From python-checkins at python.org Mon Mar 1 00:59:00 2010 From: python-checkins at python.org (ezio.melotti) Date: Mon, 1 Mar 2010 00:59:00 +0100 (CET) Subject: [Python-checkins] r78522 - in python/trunk/Objects: dictobject.c listobject.c tupleobject.c Message-ID: <20100228235900.6FA0EEE984@mail.python.org> Author: ezio.melotti Date: Mon Mar 1 00:59:00 2010 New Revision: 78522 Log: #8030: more docstring fix for builtin types. Modified: python/trunk/Objects/dictobject.c python/trunk/Objects/listobject.c python/trunk/Objects/tupleobject.c Modified: python/trunk/Objects/dictobject.c ============================================================================== --- python/trunk/Objects/dictobject.c (original) +++ python/trunk/Objects/dictobject.c Mon Mar 1 00:59:00 2010 @@ -2327,9 +2327,9 @@ } PyDoc_STRVAR(dictionary_doc, -"dict() -> new empty dictionary.\n" +"dict() -> new empty dictionary\n" "dict(mapping) -> new dictionary initialized from a mapping object's\n" -" (key, value) pairs.\n" +" (key, value) pairs\n" "dict(iterable) -> new dictionary initialized as if via:\n" " d = {}\n" " for k, v in iterable:\n" Modified: python/trunk/Objects/listobject.c ============================================================================== --- python/trunk/Objects/listobject.c (original) +++ python/trunk/Objects/listobject.c Mon Mar 1 00:59:00 2010 @@ -2536,7 +2536,7 @@ }; PyDoc_STRVAR(list_doc, -"list() -> new list\n" +"list() -> new empty list\n" "list(iterable) -> new list initialized from iterable's items"); Modified: python/trunk/Objects/tupleobject.c ============================================================================== --- python/trunk/Objects/tupleobject.c (original) +++ python/trunk/Objects/tupleobject.c Mon Mar 1 00:59:00 2010 @@ -681,10 +681,10 @@ } PyDoc_STRVAR(tuple_doc, -"tuple() -> an empty tuple\n" -"tuple(sequence) -> tuple initialized from sequence's items\n" -"\n" -"If the argument is a tuple, the return value is the same object."); +"tuple() -> empty tuple\n\ +tuple(iterable) -> tuple initialized from iterable's items\n\ +\n\ +If the argument is a tuple, the return value is the same object."); static PySequenceMethods tuple_as_sequence = { (lenfunc)tuplelength, /* sq_length */ From python-checkins at python.org Mon Mar 1 01:05:08 2010 From: python-checkins at python.org (gregory.p.smith) Date: Mon, 1 Mar 2010 01:05:08 +0100 (CET) Subject: [Python-checkins] r78523 - in python/trunk: Lib/subprocess.py Lib/test/test_subprocess.py Misc/NEWS Message-ID: <20100301000508.D9FC6EE983@mail.python.org> Author: gregory.p.smith Date: Mon Mar 1 01:05:08 2010 New Revision: 78523 Log: Issue #1068268: The subprocess module now handles EINTR in internal os.waitpid and os.read system calls where appropriate. Modified: python/trunk/Lib/subprocess.py python/trunk/Lib/test/test_subprocess.py python/trunk/Misc/NEWS Modified: python/trunk/Lib/subprocess.py ============================================================================== --- python/trunk/Lib/subprocess.py (original) +++ python/trunk/Lib/subprocess.py Mon Mar 1 01:05:08 2010 @@ -476,6 +476,16 @@ STDOUT = -2 +def _eintr_retry_call(func, *args): + while True: + try: + return func(*args) + except OSError, e: + if e.errno == errno.EINTR: + continue + raise + + def call(*popenargs, **kwargs): """Run command with arguments. Wait for command to complete, then return the returncode attribute. @@ -1173,13 +1183,14 @@ os.close(errwrite) # Wait for exec to fail or succeed; possibly raising exception - data = os.read(errpipe_read, 1048576) # Exception limited to 1M + # Exception limited to 1M + data = _eintr_retry_call(os.read, errpipe_read, 1048576) finally: # be sure the FD is closed no matter what os.close(errpipe_read) if data != "": - os.waitpid(self.pid, 0) + _eintr_retry_call(os.waitpid, self.pid, 0) child_exception = pickle.loads(data) for fd in (p2cwrite, c2pread, errread): if fd is not None: @@ -1215,7 +1226,7 @@ """Wait for child process to terminate. Returns returncode attribute.""" if self.returncode is None: - pid, sts = os.waitpid(self.pid, 0) + pid, sts = _eintr_retry_call(os.waitpid, self.pid, 0) self._handle_exitstatus(sts) return self.returncode Modified: python/trunk/Lib/test/test_subprocess.py ============================================================================== --- python/trunk/Lib/test/test_subprocess.py (original) +++ python/trunk/Lib/test/test_subprocess.py Mon Mar 1 01:05:08 2010 @@ -4,6 +4,7 @@ import sys import signal import os +import errno import tempfile import time import re @@ -772,11 +773,30 @@ ProcessTestCase.tearDown(self) +class HelperFunctionTests(unittest.TestCase): + def test_eintr_retry_call(self): + record_calls = [] + def fake_os_func(*args): + record_calls.append(args) + if len(record_calls) == 2: + raise OSError(errno.EINTR, "fake interrupted system call") + return tuple(reversed(args)) + + self.assertEqual((999, 256), + subprocess._eintr_retry_call(fake_os_func, 256, 999)) + self.assertEqual([(256, 999)], record_calls) + # This time there will be an EINTR so it will loop once. + self.assertEqual((666,), + subprocess._eintr_retry_call(fake_os_func, 666)) + self.assertEqual([(256, 999), (666,), (666,)], record_calls) + + def test_main(): unit_tests = (ProcessTestCase, POSIXProcessTestCase, Win32ProcessTestCase, - ProcessTestCaseNoPoll) + ProcessTestCaseNoPoll, + HelperFunctionTests) test_support.run_unittest(*unit_tests) test_support.reap_children() Modified: python/trunk/Misc/NEWS ============================================================================== --- python/trunk/Misc/NEWS (original) +++ python/trunk/Misc/NEWS Mon Mar 1 01:05:08 2010 @@ -75,6 +75,9 @@ - Issue #7481: When a threading.Thread failed to start it would leave the instance stuck in initial state and present in threading.enumerate(). +- Issue #1068268: The subprocess module now handles EINTR in internal + os.waitpid and os.read system calls where appropriate. + Extension Modules ----------------- From python-checkins at python.org Mon Mar 1 01:17:41 2010 From: python-checkins at python.org (gregory.p.smith) Date: Mon, 1 Mar 2010 01:17:41 +0100 (CET) Subject: [Python-checkins] r78524 - in python/branches/py3k: Lib/subprocess.py Lib/test/test_subprocess.py Misc/NEWS Message-ID: <20100301001741.12675EE983@mail.python.org> Author: gregory.p.smith Date: Mon Mar 1 01:17:40 2010 New Revision: 78524 Log: Merged revisions 78523 via svnmerge from svn+ssh://pythondev at svn.python.org/python/trunk ........ r78523 | gregory.p.smith | 2010-02-28 16:05:08 -0800 (Sun, 28 Feb 2010) | 3 lines Issue #1068268: The subprocess module now handles EINTR in internal os.waitpid and os.read system calls where appropriate. ........ Modified: python/branches/py3k/ (props changed) python/branches/py3k/Lib/subprocess.py python/branches/py3k/Lib/test/test_subprocess.py python/branches/py3k/Misc/NEWS Modified: python/branches/py3k/Lib/subprocess.py ============================================================================== --- python/branches/py3k/Lib/subprocess.py (original) +++ python/branches/py3k/Lib/subprocess.py Mon Mar 1 01:17:40 2010 @@ -406,6 +406,16 @@ STDOUT = -2 +def _eintr_retry_call(func, *args): + while True: + try: + return func(*args) + except OSError as e: + if e.errno == errno.EINTR: + continue + raise + + def call(*popenargs, **kwargs): """Run command with arguments. Wait for command to complete, then return the returncode attribute. @@ -1133,13 +1143,13 @@ # Wait for exec to fail or succeed; possibly raising an # exception (limited to 1 MB) - data = os.read(errpipe_read, 1048576) + data = _eintr_retry_call(os.read, errpipe_read, 1048576) finally: # be sure the FD is closed no matter what os.close(errpipe_read) if data: - os.waitpid(self.pid, 0) + _eintr_retry_call(os.waitpid, self.pid, 0) child_exception = pickle.loads(data) for fd in (p2cwrite, c2pread, errread): if fd is not None: @@ -1175,7 +1185,7 @@ """Wait for child process to terminate. Returns returncode attribute.""" if self.returncode is None: - pid, sts = os.waitpid(self.pid, 0) + pid, sts = _eintr_retry_call(os.waitpid, self.pid, 0) self._handle_exitstatus(sts) return self.returncode Modified: python/branches/py3k/Lib/test/test_subprocess.py ============================================================================== --- python/branches/py3k/Lib/test/test_subprocess.py (original) +++ python/branches/py3k/Lib/test/test_subprocess.py Mon Mar 1 01:17:40 2010 @@ -4,6 +4,7 @@ import sys import signal import os +import errno import tempfile import time import re @@ -797,12 +798,31 @@ ProcessTestCase.tearDown(self) +class HelperFunctionTests(unittest.TestCase): + def test_eintr_retry_call(self): + record_calls = [] + def fake_os_func(*args): + record_calls.append(args) + if len(record_calls) == 2: + raise OSError(errno.EINTR, "fake interrupted system call") + return tuple(reversed(args)) + + self.assertEqual((999, 256), + subprocess._eintr_retry_call(fake_os_func, 256, 999)) + self.assertEqual([(256, 999)], record_calls) + # This time there will be an EINTR so it will loop once. + self.assertEqual((666,), + subprocess._eintr_retry_call(fake_os_func, 666)) + self.assertEqual([(256, 999), (666,), (666,)], record_calls) + + def test_main(): unit_tests = (ProcessTestCase, POSIXProcessTestCase, Win32ProcessTestCase, CommandTests, - ProcessTestCaseNoPoll) + ProcessTestCaseNoPoll, + HelperFunctionTests) support.run_unittest(*unit_tests) support.reap_children() Modified: python/branches/py3k/Misc/NEWS ============================================================================== --- python/branches/py3k/Misc/NEWS (original) +++ python/branches/py3k/Misc/NEWS Mon Mar 1 01:17:40 2010 @@ -714,6 +714,9 @@ - Issue #7481: When a threading.Thread failed to start it would leave the instance stuck in initial state and present in threading.enumerate(). +- Issue #1068268: The subprocess module now handles EINTR in internal + os.waitpid and os.read system calls where appropriate. + Extension Modules ----------------- From python-checkins at python.org Mon Mar 1 01:35:34 2010 From: python-checkins at python.org (gregory.p.smith) Date: Mon, 1 Mar 2010 01:35:34 +0100 (CET) Subject: [Python-checkins] r78525 - in python/branches/release26-maint: Lib/subprocess.py Lib/test/test_subprocess.py Misc/NEWS Message-ID: <20100301003534.45257EE9E4@mail.python.org> Author: gregory.p.smith Date: Mon Mar 1 01:35:34 2010 New Revision: 78525 Log: Merged revisions 78523 via svnmerge from svn+ssh://pythondev at svn.python.org/python/trunk ........ r78523 | gregory.p.smith | 2010-02-28 16:05:08 -0800 (Sun, 28 Feb 2010) | 3 lines Issue #1068268: The subprocess module now handles EINTR in internal os.waitpid and os.read system calls where appropriate. ........ Modified: python/branches/release26-maint/ (props changed) python/branches/release26-maint/Lib/subprocess.py python/branches/release26-maint/Lib/test/test_subprocess.py python/branches/release26-maint/Misc/NEWS Modified: python/branches/release26-maint/Lib/subprocess.py ============================================================================== --- python/branches/release26-maint/Lib/subprocess.py (original) +++ python/branches/release26-maint/Lib/subprocess.py Mon Mar 1 01:35:34 2010 @@ -459,6 +459,16 @@ STDOUT = -2 +def _eintr_retry_call(func, *args): + while True: + try: + return func(*args) + except OSError, e: + if e.errno == errno.EINTR: + continue + raise + + def call(*popenargs, **kwargs): """Run command with arguments. Wait for command to complete, then return the returncode attribute. @@ -1114,13 +1124,14 @@ os.close(errwrite) # Wait for exec to fail or succeed; possibly raising exception - data = os.read(errpipe_read, 1048576) # Exceptions limited to 1 MB + # Exception limited to 1M + data = _eintr_retry_call(os.read, errpipe_read, 1048576) finally: # be sure the FD is closed no matter what os.close(errpipe_read) if data != "": - os.waitpid(self.pid, 0) + _eintr_retry_call(os.waitpid, self.pid, 0) child_exception = pickle.loads(data) for fd in (p2cwrite, c2pread, errread): if fd is not None: @@ -1156,7 +1167,7 @@ """Wait for child process to terminate. Returns returncode attribute.""" if self.returncode is None: - pid, sts = os.waitpid(self.pid, 0) + pid, sts = _eintr_retry_call(os.waitpid, self.pid, 0) self._handle_exitstatus(sts) return self.returncode Modified: python/branches/release26-maint/Lib/test/test_subprocess.py ============================================================================== --- python/branches/release26-maint/Lib/test/test_subprocess.py (original) +++ python/branches/release26-maint/Lib/test/test_subprocess.py Mon Mar 1 01:35:34 2010 @@ -4,6 +4,7 @@ import sys import signal import os +import errno import tempfile import time import re @@ -732,8 +733,27 @@ p.terminate() self.assertNotEqual(p.wait(), 0) +class HelperFunctionTests(unittest.TestCase): + def test_eintr_retry_call(self): + record_calls = [] + def fake_os_func(*args): + record_calls.append(args) + if len(record_calls) == 2: + raise OSError(errno.EINTR, "fake interrupted system call") + return tuple(reversed(args)) + + self.assertEqual((999, 256), + subprocess._eintr_retry_call(fake_os_func, 256, 999)) + self.assertEqual([(256, 999)], record_calls) + # This time there will be an EINTR so it will loop once. + self.assertEqual((666,), + subprocess._eintr_retry_call(fake_os_func, 666)) + self.assertEqual([(256, 999), (666,), (666,)], record_calls) + + def test_main(): - test_support.run_unittest(ProcessTestCase) + test_support.run_unittest(ProcessTestCase, + HelperFunctionTests) if hasattr(test_support, "reap_children"): test_support.reap_children() Modified: python/branches/release26-maint/Misc/NEWS ============================================================================== --- python/branches/release26-maint/Misc/NEWS (original) +++ python/branches/release26-maint/Misc/NEWS Mon Mar 1 01:35:34 2010 @@ -235,6 +235,9 @@ - Issue #7481: When a threading.Thread failed to start it would leave the instance stuck in initial state and present in threading.enumerate(). +- Issue #1068268: The subprocess module now handles EINTR in internal + os.waitpid and os.read system calls where appropriate. + Extension Modules ----------------- From python-checkins at python.org Mon Mar 1 01:43:08 2010 From: python-checkins at python.org (gregory.p.smith) Date: Mon, 1 Mar 2010 01:43:08 +0100 (CET) Subject: [Python-checkins] r78526 - in python/branches/release31-maint: Lib/subprocess.py Lib/test/test_subprocess.py Misc/NEWS Message-ID: <20100301004308.B591DFD58@mail.python.org> Author: gregory.p.smith Date: Mon Mar 1 01:43:08 2010 New Revision: 78526 Log: Merged revisions 78524 via svnmerge from svn+ssh://pythondev at svn.python.org/python/branches/py3k ................ r78524 | gregory.p.smith | 2010-02-28 16:17:40 -0800 (Sun, 28 Feb 2010) | 10 lines Merged revisions 78523 via svnmerge from svn+ssh://pythondev at svn.python.org/python/trunk ........ r78523 | gregory.p.smith | 2010-02-28 16:05:08 -0800 (Sun, 28 Feb 2010) | 3 lines Issue #1068268: The subprocess module now handles EINTR in internal os.waitpid and os.read system calls where appropriate. ........ ................ Modified: python/branches/release31-maint/ (props changed) python/branches/release31-maint/Lib/subprocess.py python/branches/release31-maint/Lib/test/test_subprocess.py python/branches/release31-maint/Misc/NEWS Modified: python/branches/release31-maint/Lib/subprocess.py ============================================================================== --- python/branches/release31-maint/Lib/subprocess.py (original) +++ python/branches/release31-maint/Lib/subprocess.py Mon Mar 1 01:43:08 2010 @@ -407,6 +407,16 @@ STDOUT = -2 +def _eintr_retry_call(func, *args): + while True: + try: + return func(*args) + except OSError as e: + if e.errno == errno.EINTR: + continue + raise + + def call(*popenargs, **kwargs): """Run command with arguments. Wait for command to complete, then return the returncode attribute. @@ -1134,13 +1144,13 @@ # Wait for exec to fail or succeed; possibly raising an # exception (limited to 1 MB) - data = os.read(errpipe_read, 1048576) + data = _eintr_retry_call(os.read, errpipe_read, 1048576) finally: # be sure the FD is closed no matter what os.close(errpipe_read) if data: - os.waitpid(self.pid, 0) + _eintr_retry_call(os.waitpid, self.pid, 0) child_exception = pickle.loads(data) for fd in (p2cwrite, c2pread, errread): if fd is not None: @@ -1176,7 +1186,7 @@ """Wait for child process to terminate. Returns returncode attribute.""" if self.returncode is None: - pid, sts = os.waitpid(self.pid, 0) + pid, sts = _eintr_retry_call(os.waitpid, self.pid, 0) self._handle_exitstatus(sts) return self.returncode Modified: python/branches/release31-maint/Lib/test/test_subprocess.py ============================================================================== --- python/branches/release31-maint/Lib/test/test_subprocess.py (original) +++ python/branches/release31-maint/Lib/test/test_subprocess.py Mon Mar 1 01:43:08 2010 @@ -4,6 +4,7 @@ import sys import signal import os +import errno import tempfile import time import re @@ -814,6 +815,25 @@ unit_tests.append(ProcessTestCaseNoPoll) +class HelperFunctionTests(unittest.TestCase): + def test_eintr_retry_call(self): + record_calls = [] + def fake_os_func(*args): + record_calls.append(args) + if len(record_calls) == 2: + raise OSError(errno.EINTR, "fake interrupted system call") + return tuple(reversed(args)) + + self.assertEqual((999, 256), + subprocess._eintr_retry_call(fake_os_func, 256, 999)) + self.assertEqual([(256, 999)], record_calls) + # This time there will be an EINTR so it will loop once. + self.assertEqual((666,), + subprocess._eintr_retry_call(fake_os_func, 666)) + self.assertEqual([(256, 999), (666,), (666,)], record_calls) + +unit_tests.append(HelperFunctionTests) + def test_main(): support.run_unittest(*unit_tests) support.reap_children() Modified: python/branches/release31-maint/Misc/NEWS ============================================================================== --- python/branches/release31-maint/Misc/NEWS (original) +++ python/branches/release31-maint/Misc/NEWS Mon Mar 1 01:43:08 2010 @@ -335,6 +335,9 @@ - Issue #7481: When a threading.Thread failed to start it would leave the instance stuck in initial state and present in threading.enumerate(). +- Issue #1068268: The subprocess module now handles EINTR in internal + os.waitpid and os.read system calls where appropriate. + Extension Modules ----------------- From ezio.melotti at gmail.com Mon Mar 1 02:16:47 2010 From: ezio.melotti at gmail.com (Ezio Melotti) Date: Mon, 01 Mar 2010 03:16:47 +0200 Subject: [Python-checkins] r78517 - in python/trunk: Lib/test/test_threading.py Lib/threading.py Misc/NEWS In-Reply-To: <20100228183610.0673AEE99F@mail.python.org> References: <20100228183610.0673AEE99F@mail.python.org> Message-ID: <4B8B157F.7090906@gmail.com> Hi, On 28/02/2010 20.36, gregory.p.smith wrote: > Author: gregory.p.smith > Date: Sun Feb 28 19:36:09 2010 > New Revision: 78517 > > Log: > Issue #7481: When a threading.Thread failed to start it would leave the > instance stuck in initial state and present in threading.enumerate(). > > > Modified: > python/trunk/Lib/test/test_threading.py > python/trunk/Lib/threading.py > python/trunk/Misc/NEWS > > Modified: python/trunk/Lib/test/test_threading.py > ============================================================================== > --- python/trunk/Lib/test/test_threading.py (original) > +++ python/trunk/Lib/test/test_threading.py Sun Feb 28 19:36:09 2010 > @@ -249,6 +249,25 @@ > t.join() > # else the thread is still running, and we have no way to kill it > > + def test_limbo_cleanup(self): > + # Issue 7481: Failure to start thread should cleanup the limbo map. > + def fail_new_thread(*args): > + raise thread.error() > + _start_new_thread = threading._start_new_thread > + threading._start_new_thread = fail_new_thread > + try: > + t = threading.Thread(target=lambda: None) > + try: > + t.start() > + assert False > + except thread.error: > + self.assertFalse( > + t in threading._limbo, > + "Failed to cleanup _limbo map on failure of Thread.start()." > + ) > This could be rewritten as (should work on 2.6/2.7/3.1/3.2): t = threading.Thread(target=lambda: None) self.assertRaises(thread.error, t.start) self.assertFalse( t in threading._limbo, "Failed to cleanup _limbo map on failure of Thread.start()." ) or: t = threading.Thread(target=lambda: None) with self.assertRaises(thread.error): t.start() self.assertNotIn( t, threading._limbo, "Failed to cleanup _limbo map on failure of Thread.start()." ) (the assertRaises as a context manager works only on 2.7/3.2, assertNotIn on 2.7/3.1/3.2). Bare 'assert' should be avoided because they don't work with -O. If you need to, you can use self.fail() instead. > + finally: > + threading._start_new_thread = _start_new_thread > + > def test_finalize_runnning_thread(self): > # Issue 1402: the PyGILState_Ensure / _Release functions may be called > # very late on python exit: on deallocation of a running thread for > > Modified: python/trunk/Lib/threading.py > ============================================================================== > --- python/trunk/Lib/threading.py (original) > +++ python/trunk/Lib/threading.py Sun Feb 28 19:36:09 2010 > @@ -469,7 +469,12 @@ > self._note("%s.start(): starting thread", self) > with _active_limbo_lock: > _limbo[self] = self > - _start_new_thread(self.__bootstrap, ()) > + try: > + _start_new_thread(self.__bootstrap, ()) > + except Exception: > + with _active_limbo_lock: > + del _limbo[self] > + raise > self.__started.wait() > > def run(self): > > Modified: python/trunk/Misc/NEWS > ============================================================================== > --- python/trunk/Misc/NEWS (original) > +++ python/trunk/Misc/NEWS Sun Feb 28 19:36:09 2010 > @@ -72,6 +72,9 @@ > > - Issue #7427: improve the representation of httplib.BadStatusLine exceptions. > > +- Issue #7481: When a threading.Thread failed to start it would leave the > + instance stuck in initial state and present in threading.enumerate(). > + > Extension Modules > ----------------- > > _______________________________________________ > Python-checkins mailing list > Python-checkins at python.org > http://mail.python.org/mailman/listinfo/python-checkins > > Best Regards, Ezio Melotti From python-checkins at python.org Mon Mar 1 02:22:39 2010 From: python-checkins at python.org (gregory.p.smith) Date: Mon, 1 Mar 2010 02:22:39 +0100 (CET) Subject: [Python-checkins] r78527 - in python/trunk: Lib/test/test_thread.py Misc/NEWS Modules/posixmodule.c Python/import.c Message-ID: <20100301012239.5DCE1EE9B2@mail.python.org> Author: gregory.p.smith Date: Mon Mar 1 02:22:39 2010 New Revision: 78527 Log: Issue #7242: On Solaris 9 and earlier calling os.fork() from within a thread could raise an incorrect RuntimeError about not holding the import lock. The import lock is now reinitialized after fork. Modified: python/trunk/Lib/test/test_thread.py python/trunk/Misc/NEWS python/trunk/Modules/posixmodule.c python/trunk/Python/import.c Modified: python/trunk/Lib/test/test_thread.py ============================================================================== --- python/trunk/Lib/test/test_thread.py (original) +++ python/trunk/Lib/test/test_thread.py Mon Mar 1 02:22:39 2010 @@ -4,6 +4,7 @@ from test import test_support import thread import time +import sys import weakref from test import lock_tests @@ -196,8 +197,47 @@ locktype = thread.allocate_lock +class TestForkInThread(unittest.TestCase): + def setUp(self): + self.read_fd, self.write_fd = os.pipe() + + def test_forkinthread(self): + if sys.platform.startswith('win'): + from test.test_support import TestSkipped + raise TestSkipped("This test is only appropriate for " + "POSIX-like systems.") + def thread1(): + try: + pid = os.fork() # fork in a thread + except RuntimeError: + sys.exit(0) # exit the child + + if pid == 0: # child + os.close(self.read_fd) + os.write(self.write_fd, "OK") + sys.exit(0) + else: # parent + os.close(self.write_fd) + + thread.start_new_thread(thread1, ()) + self.assertEqual(os.read(self.read_fd, 2), "OK", + "Unable to fork() in thread") + + def tearDown(self): + try: + os.close(self.read_fd) + except OSError: + pass + + try: + os.close(self.write_fd) + except OSError: + pass + + def test_main(): - test_support.run_unittest(ThreadRunningTests, BarrierTest, LockTests) + test_support.run_unittest(ThreadRunningTests, BarrierTest, LockTests, + TestForkInThread) if __name__ == "__main__": test_main() Modified: python/trunk/Misc/NEWS ============================================================================== --- python/trunk/Misc/NEWS (original) +++ python/trunk/Misc/NEWS Mon Mar 1 02:22:39 2010 @@ -87,6 +87,10 @@ - Stop providing crtassem.h symbols when compiling with Visual Studio 2010, as msvcr100.dll is not a platform assembly anymore. +- Issue #7242: On Solaris 9 and earlier calling os.fork() from within a + thread could raise an incorrect RuntimeError about not holding the import + lock. The import lock is now reinitialized after fork. + Tests ----- Modified: python/trunk/Modules/posixmodule.c ============================================================================== --- python/trunk/Modules/posixmodule.c (original) +++ python/trunk/Modules/posixmodule.c Mon Mar 1 02:22:39 2010 @@ -3605,14 +3605,18 @@ posix_fork1(PyObject *self, PyObject *noargs) { pid_t pid; - int result; + int result = 0; _PyImport_AcquireLock(); pid = fork1(); - result = _PyImport_ReleaseLock(); + if (pid == 0) { + /* child: this clobbers and resets the import lock. */ + PyOS_AfterFork(); + } else { + /* parent: release the import lock. */ + result = _PyImport_ReleaseLock(); + } if (pid == -1) return posix_error(); - if (pid == 0) - PyOS_AfterFork(); if (result < 0) { /* Don't clobber the OSError if the fork failed. */ PyErr_SetString(PyExc_RuntimeError, @@ -3634,14 +3638,18 @@ posix_fork(PyObject *self, PyObject *noargs) { pid_t pid; - int result; + int result = 0; _PyImport_AcquireLock(); pid = fork(); - result = _PyImport_ReleaseLock(); + if (pid == 0) { + /* child: this clobbers and resets the import lock. */ + PyOS_AfterFork(); + } else { + /* parent: release the import lock. */ + result = _PyImport_ReleaseLock(); + } if (pid == -1) return posix_error(); - if (pid == 0) - PyOS_AfterFork(); if (result < 0) { /* Don't clobber the OSError if the fork failed. */ PyErr_SetString(PyExc_RuntimeError, @@ -3759,11 +3767,12 @@ _PyImport_AcquireLock(); pid = forkpty(&master_fd, NULL, NULL, NULL); + if (pid == 0) + PyOS_AfterFork(); + result = _PyImport_ReleaseLock(); if (pid == -1) return posix_error(); - if (pid == 0) - PyOS_AfterFork(); if (result < 0) { /* Don't clobber the OSError if the fork failed. */ PyErr_SetString(PyExc_RuntimeError, Modified: python/trunk/Python/import.c ============================================================================== --- python/trunk/Python/import.c (original) +++ python/trunk/Python/import.c Mon Mar 1 02:22:39 2010 @@ -301,14 +301,18 @@ return 1; } -/* This function used to be called from PyOS_AfterFork to ensure that newly - created child processes do not share locks with the parent, but for some - reason only on AIX systems. Instead of re-initializing the lock, we now - acquire the import lock around fork() calls. */ +/* This function is called from PyOS_AfterFork to ensure that newly + created child processes do not share locks with the parent. + We now acquire the import lock around fork() calls but on some platforms + (Solaris 9 and earlier? see isue7242) that still left us with problems. */ void _PyImport_ReInitLock(void) { + if (import_lock != NULL) + import_lock = PyThread_allocate_lock(); + import_lock_thread = -1; + import_lock_level = 0; } #endif From python-checkins at python.org Mon Mar 1 03:01:47 2010 From: python-checkins at python.org (gregory.p.smith) Date: Mon, 1 Mar 2010 03:01:47 +0100 (CET) Subject: [Python-checkins] r78528 - in python/trunk: Doc/library/hashlib.rst Lib/hashlib.py Lib/test/test_hashlib.py Message-ID: <20100301020147.CA7BEEE983@mail.python.org> Author: gregory.p.smith Date: Mon Mar 1 03:01:47 2010 New Revision: 78528 Log: Adds the hashlib.algorithms attribute. See issue7418. Modified: python/trunk/Doc/library/hashlib.rst python/trunk/Lib/hashlib.py python/trunk/Lib/test/test_hashlib.py Modified: python/trunk/Doc/library/hashlib.rst ============================================================================== --- python/trunk/Doc/library/hashlib.rst (original) +++ python/trunk/Doc/library/hashlib.rst Mon Mar 1 03:01:47 2010 @@ -74,6 +74,15 @@ >>> h.hexdigest() 'cc4a5ce1b3df48aec5d22d1f16b894a0b894eccc' +This module provides the following constant attribute: + +.. data:: hashlib.algorithms + + A tuple providing the names of the hash algorithms guaranteed to be + supported by this module. + + .. versionadded:: 2.7 + The following values are provided as constant attributes of the hash objects returned by the constructors: Modified: python/trunk/Lib/hashlib.py ============================================================================== --- python/trunk/Lib/hashlib.py (original) +++ python/trunk/Lib/hashlib.py Mon Mar 1 03:01:47 2010 @@ -58,7 +58,9 @@ # always available algorithm is added. __always_supported = ('md5', 'sha1', 'sha224', 'sha256', 'sha384', 'sha512') -__all__ = __always_supported + ('new',) +algorithms = __always_supported + +__all__ = __always_supported + ('new', 'algorithms') def __get_builtin_constructor(name): Modified: python/trunk/Lib/test/test_hashlib.py ============================================================================== --- python/trunk/Lib/test/test_hashlib.py (original) +++ python/trunk/Lib/test/test_hashlib.py Mon Mar 1 03:01:47 2010 @@ -102,6 +102,11 @@ c = cons(a) c.hexdigest() + def test_algorithms_attribute(self): + self.assertEqual(hashlib.algorithms, + tuple([_algo for _algo in self.supported_hash_names if + _algo.islower()])) + def test_unknown_hash(self): try: hashlib.new('spam spam spam spam spam') From python-checkins at python.org Mon Mar 1 03:05:26 2010 From: python-checkins at python.org (gregory.p.smith) Date: Mon, 1 Mar 2010 03:05:26 +0100 (CET) Subject: [Python-checkins] r78529 - in python/branches/py3k: Doc/library/hashlib.rst Lib/hashlib.py Lib/test/test_hashlib.py Message-ID: <20100301020526.2D04EEE983@mail.python.org> Author: gregory.p.smith Date: Mon Mar 1 03:05:26 2010 New Revision: 78529 Log: Merged revisions 78528 via svnmerge from svn+ssh://pythondev at svn.python.org/python/trunk ........ r78528 | gregory.p.smith | 2010-02-28 18:01:47 -0800 (Sun, 28 Feb 2010) | 2 lines Adds the hashlib.algorithms attribute. See issue7418. ........ Modified: python/branches/py3k/ (props changed) python/branches/py3k/Doc/library/hashlib.rst python/branches/py3k/Lib/hashlib.py python/branches/py3k/Lib/test/test_hashlib.py Modified: python/branches/py3k/Doc/library/hashlib.rst ============================================================================== --- python/branches/py3k/Doc/library/hashlib.rst (original) +++ python/branches/py3k/Doc/library/hashlib.rst Mon Mar 1 03:05:26 2010 @@ -82,6 +82,15 @@ >>> h.hexdigest() 'cc4a5ce1b3df48aec5d22d1f16b894a0b894eccc' +This module provides the following constant attribute: + +.. data:: hashlib.algorithms + + A tuple providing the names of the hash algorithms guaranteed to be + supported by this module. + + .. versionadded:: 3.2 + The following values are provided as constant attributes of the hash objects returned by the constructors: Modified: python/branches/py3k/Lib/hashlib.py ============================================================================== --- python/branches/py3k/Lib/hashlib.py (original) +++ python/branches/py3k/Lib/hashlib.py Mon Mar 1 03:05:26 2010 @@ -57,7 +57,9 @@ # always available algorithm is added. __always_supported = ('md5', 'sha1', 'sha224', 'sha256', 'sha384', 'sha512') -__all__ = __always_supported + ('new',) +algorithms = __always_supported + +__all__ = __always_supported + ('new', 'algorithms') def __get_builtin_constructor(name): Modified: python/branches/py3k/Lib/test/test_hashlib.py ============================================================================== --- python/branches/py3k/Lib/test/test_hashlib.py (original) +++ python/branches/py3k/Lib/test/test_hashlib.py Mon Mar 1 03:05:26 2010 @@ -102,6 +102,11 @@ c = cons(a) c.hexdigest() + def test_algorithms_attribute(self): + self.assertEqual(hashlib.algorithms, + tuple(_algo for _algo in self.supported_hash_names + if _algo.islower())) + def test_unknown_hash(self): try: hashlib.new('spam spam spam spam spam') From python-checkins at python.org Mon Mar 1 03:09:17 2010 From: python-checkins at python.org (brett.cannon) Date: Mon, 1 Mar 2010 03:09:17 +0100 (CET) Subject: [Python-checkins] r78530 - python/branches/py3k/Python/import.c Message-ID: <20100301020917.E4499FDA0@mail.python.org> Author: brett.cannon Date: Mon Mar 1 03:09:17 2010 New Revision: 78530 Log: Strip out trailing whitespace. Modified: python/branches/py3k/Python/import.c Modified: python/branches/py3k/Python/import.c ============================================================================== --- python/branches/py3k/Python/import.c (original) +++ python/branches/py3k/Python/import.c Mon Mar 1 03:09:17 2010 @@ -19,7 +19,7 @@ #include #endif #ifdef __cplusplus -extern "C" { +extern "C" { #endif #ifdef MS_WINDOWS @@ -530,7 +530,7 @@ dictionary is stored by calling _PyImport_FixupExtension() immediately after the module initialization function succeeds. A copy can be retrieved from there by calling - _PyImport_FindExtension(). + _PyImport_FindExtension(). Modules which do support multiple multiple initialization set their m_size field to a non-negative number (indicating the size @@ -566,7 +566,7 @@ } if (def->m_size == -1) { if (def->m_base.m_copy) { - /* Somebody already imported the module, + /* Somebody already imported the module, likely under a different name. XXX this should really not happen. */ Py_DECREF(def->m_base.m_copy); @@ -624,7 +624,7 @@ PySys_WriteStderr("import %s # previously loaded (%s)\n", name, filename); return mod; - + } @@ -862,7 +862,7 @@ flags.cf_flags = 0; mod = PyParser_ASTFromFile(fp, pathname, NULL, - Py_file_input, 0, 0, &flags, + Py_file_input, 0, 0, &flags, NULL, arena); if (mod) { co = PyAST_Compile(mod, pathname, NULL, arena); @@ -920,7 +920,7 @@ mode_t mode = srcstat->st_mode & ~S_IEXEC; #else mode_t mode = srcstat->st_mode & ~S_IXUSR & ~S_IXGRP & ~S_IXOTH; -#endif +#endif fp = open_exclusive(cpathname, mode); if (fp == NULL) { @@ -1010,7 +1010,7 @@ char *cpathname; PyCodeObject *co; PyObject *m; - + if (fstat(fileno(fp), &st) != 0) { PyErr_Format(PyExc_RuntimeError, "unable to get file status from '%s'", @@ -1383,7 +1383,7 @@ if (!v) return NULL; if (PyUnicode_Check(v)) { - v = PyUnicode_AsEncodedString(v, + v = PyUnicode_AsEncodedString(v, Py_FileSystemDefaultEncoding, NULL); if (v == NULL) return NULL; @@ -1456,7 +1456,7 @@ else { char warnstr[MAXPATHLEN+80]; sprintf(warnstr, "Not importing directory " - "'%.*s': missing __init__.py", + "'%.*s': missing __init__.py", MAXPATHLEN, buf); if (PyErr_WarnEx(PyExc_ImportWarning, warnstr, 1)) { @@ -2270,7 +2270,7 @@ modname = PyDict_GetItem(globals, namestr); if (modname == NULL || !PyUnicode_Check(modname)) return Py_None; - + modpath = PyDict_GetItem(globals, pathstr); if (modpath != NULL) { /* __path__ is set, so modname is already the package name */ @@ -2643,7 +2643,7 @@ struct filedescr *fdp; FILE *fp = NULL; PyObject *newm; - + if (modules_reloading == NULL) { Py_FatalError("PyImport_ReloadModule: " "no modules_reloading dictionary!"); @@ -3039,8 +3039,8 @@ PyObject *m; FILE *fp; if (!PyArg_ParseTuple(args, "ses|O:load_compiled", - &name, - Py_FileSystemDefaultEncoding, &pathname, + &name, + Py_FileSystemDefaultEncoding, &pathname, &fob)) return NULL; fp = get_file(pathname, fob, "rb"); @@ -3065,8 +3065,8 @@ PyObject *m; FILE *fp = NULL; if (!PyArg_ParseTuple(args, "ses|O:load_dynamic", - &name, - Py_FileSystemDefaultEncoding, &pathname, + &name, + Py_FileSystemDefaultEncoding, &pathname, &fob)) return NULL; if (fob) { @@ -3094,7 +3094,7 @@ PyObject *m; FILE *fp; if (!PyArg_ParseTuple(args, "ses|O:load_source", - &name, + &name, Py_FileSystemDefaultEncoding, &pathname, &fob)) return NULL; @@ -3122,7 +3122,7 @@ FILE *fp; if (!PyArg_ParseTuple(args, "sOes(ssi):load_module", - &name, &fob, + &name, &fob, Py_FileSystemDefaultEncoding, &pathname, &suffix, &mode, &type)) return NULL; @@ -3146,7 +3146,7 @@ PyMem_Free(pathname); return NULL; } - } + } ret = load_module(name, fp, pathname, type, NULL); PyMem_Free(pathname); if (fp) @@ -3160,7 +3160,7 @@ char *name; char *pathname; PyObject * ret; - if (!PyArg_ParseTuple(args, "ses:load_package", + if (!PyArg_ParseTuple(args, "ses:load_package", &name, Py_FileSystemDefaultEncoding, &pathname)) return NULL; ret = load_package(name, pathname); From python-checkins at python.org Mon Mar 1 03:31:33 2010 From: python-checkins at python.org (gregory.p.smith) Date: Mon, 1 Mar 2010 03:31:33 +0100 (CET) Subject: [Python-checkins] r78531 - python/trunk/Modules/posixmodule.c Message-ID: <20100301023133.868AAEE9B2@mail.python.org> Author: gregory.p.smith Date: Mon Mar 1 03:31:33 2010 New Revision: 78531 Log: Fix for r78527. It left out updating forkpty. Modified: python/trunk/Modules/posixmodule.c Modified: python/trunk/Modules/posixmodule.c ============================================================================== --- python/trunk/Modules/posixmodule.c (original) +++ python/trunk/Modules/posixmodule.c Mon Mar 1 03:31:33 2010 @@ -3762,15 +3762,18 @@ static PyObject * posix_forkpty(PyObject *self, PyObject *noargs) { - int master_fd = -1, result; + int master_fd = -1, result = 0; pid_t pid; _PyImport_AcquireLock(); pid = forkpty(&master_fd, NULL, NULL, NULL); - if (pid == 0) + if (pid == 0) { + /* child: this clobbers and resets the import lock. */ PyOS_AfterFork(); - - result = _PyImport_ReleaseLock(); + } else { + /* parent: release the import lock. */ + result = _PyImport_ReleaseLock(); + } if (pid == -1) return posix_error(); if (result < 0) { From python-checkins at python.org Mon Mar 1 03:53:24 2010 From: python-checkins at python.org (gregory.p.smith) Date: Mon, 1 Mar 2010 03:53:24 +0100 (CET) Subject: [Python-checkins] r78532 - python/trunk/Lib/test/test_subprocess.py Message-ID: <20100301025324.2F41AFE3A@mail.python.org> Author: gregory.p.smith Date: Mon Mar 1 03:53:24 2010 New Revision: 78532 Log: Fix the new test on windows (skip it, its posix only) Modified: python/trunk/Lib/test/test_subprocess.py Modified: python/trunk/Lib/test/test_subprocess.py ============================================================================== --- python/trunk/Lib/test/test_subprocess.py (original) +++ python/trunk/Lib/test/test_subprocess.py Mon Mar 1 03:53:24 2010 @@ -774,6 +774,7 @@ class HelperFunctionTests(unittest.TestCase): + @unittest.skipIf(mswindows, "errno and EINTR make no sense on windows") def test_eintr_retry_call(self): record_calls = [] def fake_os_func(*args): From brett at python.org Mon Mar 1 03:54:25 2010 From: brett at python.org (Brett Cannon) Date: Sun, 28 Feb 2010 18:54:25 -0800 Subject: [Python-checkins] r78529 - in python/branches/py3k: Doc/library/hashlib.rst Lib/hashlib.py Lib/test/test_hashlib.py In-Reply-To: <20100301020526.2D04EEE983@mail.python.org> References: <20100301020526.2D04EEE983@mail.python.org> Message-ID: Totally unimportant, but why tuple over a set? On Sun, Feb 28, 2010 at 18:05, gregory.p.smith wrote: > Author: gregory.p.smith > Date: Mon Mar 1 03:05:26 2010 > New Revision: 78529 > > Log: > Merged revisions 78528 via svnmerge from > svn+ssh://pythondev at svn.python.org/python/trunk > > ........ > r78528 | gregory.p.smith | 2010-02-28 18:01:47 -0800 (Sun, 28 Feb 2010) | > 2 lines > > Adds the hashlib.algorithms attribute. See issue7418. > ........ > > > Modified: > python/branches/py3k/ (props changed) > python/branches/py3k/Doc/library/hashlib.rst > python/branches/py3k/Lib/hashlib.py > python/branches/py3k/Lib/test/test_hashlib.py > > Modified: python/branches/py3k/Doc/library/hashlib.rst > > ============================================================================== > --- python/branches/py3k/Doc/library/hashlib.rst (original) > +++ python/branches/py3k/Doc/library/hashlib.rst Mon Mar 1 03:05:26 > 2010 > @@ -82,6 +82,15 @@ > >>> h.hexdigest() > 'cc4a5ce1b3df48aec5d22d1f16b894a0b894eccc' > > +This module provides the following constant attribute: > + > +.. data:: hashlib.algorithms > + > + A tuple providing the names of the hash algorithms guaranteed to be > + supported by this module. > + > + .. versionadded:: 3.2 > + > The following values are provided as constant attributes of the hash > objects > returned by the constructors: > > > Modified: python/branches/py3k/Lib/hashlib.py > > ============================================================================== > --- python/branches/py3k/Lib/hashlib.py (original) > +++ python/branches/py3k/Lib/hashlib.py Mon Mar 1 03:05:26 2010 > @@ -57,7 +57,9 @@ > # always available algorithm is added. > __always_supported = ('md5', 'sha1', 'sha224', 'sha256', 'sha384', > 'sha512') > > -__all__ = __always_supported + ('new',) > +algorithms = __always_supported > + > +__all__ = __always_supported + ('new', 'algorithms') > > > def __get_builtin_constructor(name): > > Modified: python/branches/py3k/Lib/test/test_hashlib.py > > ============================================================================== > --- python/branches/py3k/Lib/test/test_hashlib.py (original) > +++ python/branches/py3k/Lib/test/test_hashlib.py Mon Mar 1 03:05:26 > 2010 > @@ -102,6 +102,11 @@ > c = cons(a) > c.hexdigest() > > + def test_algorithms_attribute(self): > + self.assertEqual(hashlib.algorithms, > + tuple(_algo for _algo in self.supported_hash_names > + if _algo.islower())) > + > def test_unknown_hash(self): > try: > hashlib.new('spam spam spam spam spam') > _______________________________________________ > Python-checkins mailing list > Python-checkins at python.org > http://mail.python.org/mailman/listinfo/python-checkins > -------------- next part -------------- An HTML attachment was scrubbed... URL: From python-checkins at python.org Mon Mar 1 03:56:44 2010 From: python-checkins at python.org (gregory.p.smith) Date: Mon, 1 Mar 2010 03:56:44 +0100 (CET) Subject: [Python-checkins] r78533 - in python/branches/py3k: Lib/test/test_subprocess.py Message-ID: <20100301025644.8EEC4FE58@mail.python.org> Author: gregory.p.smith Date: Mon Mar 1 03:56:44 2010 New Revision: 78533 Log: Merged revisions 78532 via svnmerge from svn+ssh://pythondev at svn.python.org/python/trunk ........ r78532 | gregory.p.smith | 2010-02-28 18:53:24 -0800 (Sun, 28 Feb 2010) | 2 lines Fix the new test on windows (skip it, its posix only) ........ Modified: python/branches/py3k/ (props changed) python/branches/py3k/Lib/test/test_subprocess.py Modified: python/branches/py3k/Lib/test/test_subprocess.py ============================================================================== --- python/branches/py3k/Lib/test/test_subprocess.py (original) +++ python/branches/py3k/Lib/test/test_subprocess.py Mon Mar 1 03:56:44 2010 @@ -799,6 +799,7 @@ class HelperFunctionTests(unittest.TestCase): + @unittest.skipIf(mswindows, "errno and EINTR make no sense on windows") def test_eintr_retry_call(self): record_calls = [] def fake_os_func(*args): From python-checkins at python.org Mon Mar 1 03:58:43 2010 From: python-checkins at python.org (gregory.p.smith) Date: Mon, 1 Mar 2010 03:58:43 +0100 (CET) Subject: [Python-checkins] r78534 - in python/branches/release31-maint: Lib/test/test_subprocess.py Message-ID: <20100301025843.BE5E3FE67@mail.python.org> Author: gregory.p.smith Date: Mon Mar 1 03:58:43 2010 New Revision: 78534 Log: Merged revisions 78533 via svnmerge from svn+ssh://pythondev at svn.python.org/python/branches/py3k ................ r78533 | gregory.p.smith | 2010-02-28 18:56:44 -0800 (Sun, 28 Feb 2010) | 9 lines Merged revisions 78532 via svnmerge from svn+ssh://pythondev at svn.python.org/python/trunk ........ r78532 | gregory.p.smith | 2010-02-28 18:53:24 -0800 (Sun, 28 Feb 2010) | 2 lines Fix the new test on windows (skip it, its posix only) ........ ................ Modified: python/branches/release31-maint/ (props changed) python/branches/release31-maint/Lib/test/test_subprocess.py Modified: python/branches/release31-maint/Lib/test/test_subprocess.py ============================================================================== --- python/branches/release31-maint/Lib/test/test_subprocess.py (original) +++ python/branches/release31-maint/Lib/test/test_subprocess.py Mon Mar 1 03:58:43 2010 @@ -816,6 +816,7 @@ class HelperFunctionTests(unittest.TestCase): + @unittest.skipIf(mswindows, "errno and EINTR make no sense on windows") def test_eintr_retry_call(self): record_calls = [] def fake_os_func(*args): From python-checkins at python.org Mon Mar 1 04:04:05 2010 From: python-checkins at python.org (gregory.p.smith) Date: Mon, 1 Mar 2010 04:04:05 +0100 (CET) Subject: [Python-checkins] r78535 - in python/branches/release26-maint: Lib/test/test_subprocess.py Message-ID: <20100301030405.6DB38EE983@mail.python.org> Author: gregory.p.smith Date: Mon Mar 1 04:04:05 2010 New Revision: 78535 Log: Merged revisions 78532 via svnmerge from svn+ssh://pythondev at svn.python.org/python/trunk ........ r78532 | gregory.p.smith | 2010-02-28 18:53:24 -0800 (Sun, 28 Feb 2010) | 2 lines Fix the new test on windows (skip it, its posix only) ........ Modified: python/branches/release26-maint/ (props changed) python/branches/release26-maint/Lib/test/test_subprocess.py Modified: python/branches/release26-maint/Lib/test/test_subprocess.py ============================================================================== --- python/branches/release26-maint/Lib/test/test_subprocess.py (original) +++ python/branches/release26-maint/Lib/test/test_subprocess.py Mon Mar 1 04:04:05 2010 @@ -734,7 +734,7 @@ self.assertNotEqual(p.wait(), 0) class HelperFunctionTests(unittest.TestCase): - def test_eintr_retry_call(self): + def _test_eintr_retry_call(self): record_calls = [] def fake_os_func(*args): record_calls.append(args) @@ -750,6 +750,9 @@ subprocess._eintr_retry_call(fake_os_func, 666)) self.assertEqual([(256, 999), (666,), (666,)], record_calls) + if not mswindows: + test_eintr_retry_call = _test_eintr_retry_call + def test_main(): test_support.run_unittest(ProcessTestCase, From python-checkins at python.org Mon Mar 1 04:09:19 2010 From: python-checkins at python.org (gregory.p.smith) Date: Mon, 1 Mar 2010 04:09:19 +0100 (CET) Subject: [Python-checkins] r78536 - python/trunk/Lib/test/test_threading.py Message-ID: <20100301030919.48226EE983@mail.python.org> Author: gregory.p.smith Date: Mon Mar 1 04:09:19 2010 New Revision: 78536 Log: Cleanup the test added in r78517 based on Ezio Melotti's feedback. Modified: python/trunk/Lib/test/test_threading.py Modified: python/trunk/Lib/test/test_threading.py ============================================================================== --- python/trunk/Lib/test/test_threading.py (original) +++ python/trunk/Lib/test/test_threading.py Mon Mar 1 04:09:19 2010 @@ -257,14 +257,10 @@ threading._start_new_thread = fail_new_thread try: t = threading.Thread(target=lambda: None) - try: - t.start() - assert False - except thread.error: - self.assertFalse( - t in threading._limbo, - "Failed to cleanup _limbo map on failure of Thread.start()." - ) + self.assertRaises(thread.error, t.start) + self.assertFalse( + t in threading._limbo, + "Failed to cleanup _limbo map on failure of Thread.start().") finally: threading._start_new_thread = _start_new_thread From python-checkins at python.org Mon Mar 1 04:11:09 2010 From: python-checkins at python.org (gregory.p.smith) Date: Mon, 1 Mar 2010 04:11:09 +0100 (CET) Subject: [Python-checkins] r78537 - in python/branches/release26-maint: Lib/test/test_threading.py Message-ID: <20100301031109.5C7C5EE9DE@mail.python.org> Author: gregory.p.smith Date: Mon Mar 1 04:11:09 2010 New Revision: 78537 Log: Merged revisions 78536 via svnmerge from svn+ssh://pythondev at svn.python.org/python/trunk ........ r78536 | gregory.p.smith | 2010-02-28 19:09:19 -0800 (Sun, 28 Feb 2010) | 2 lines Cleanup the test added in r78517 based on Ezio Melotti's feedback. ........ Modified: python/branches/release26-maint/ (props changed) python/branches/release26-maint/Lib/test/test_threading.py Modified: python/branches/release26-maint/Lib/test/test_threading.py ============================================================================== --- python/branches/release26-maint/Lib/test/test_threading.py (original) +++ python/branches/release26-maint/Lib/test/test_threading.py Mon Mar 1 04:11:09 2010 @@ -227,14 +227,10 @@ threading._start_new_thread = fail_new_thread try: t = threading.Thread(target=lambda: None) - try: - t.start() - assert False - except thread.error: - self.assertFalse( - t in threading._limbo, - "Failed to cleanup _limbo map on failure of Thread.start()." - ) + self.assertRaises(thread.error, t.start) + self.assertFalse( + t in threading._limbo, + "Failed to cleanup _limbo map on failure of Thread.start().") finally: threading._start_new_thread = _start_new_thread From python-checkins at python.org Mon Mar 1 04:13:36 2010 From: python-checkins at python.org (gregory.p.smith) Date: Mon, 1 Mar 2010 04:13:36 +0100 (CET) Subject: [Python-checkins] r78538 - in python/branches/py3k: Lib/test/test_threading.py Message-ID: <20100301031336.5AD0DEE987@mail.python.org> Author: gregory.p.smith Date: Mon Mar 1 04:13:36 2010 New Revision: 78538 Log: Merged revisions 78536 via svnmerge from svn+ssh://pythondev at svn.python.org/python/trunk ........ r78536 | gregory.p.smith | 2010-02-28 19:09:19 -0800 (Sun, 28 Feb 2010) | 2 lines Cleanup the test added in r78517 based on Ezio Melotti's feedback. ........ Modified: python/branches/py3k/ (props changed) python/branches/py3k/Lib/test/test_threading.py Modified: python/branches/py3k/Lib/test/test_threading.py ============================================================================== --- python/branches/py3k/Lib/test/test_threading.py (original) +++ python/branches/py3k/Lib/test/test_threading.py Mon Mar 1 04:13:36 2010 @@ -255,14 +255,10 @@ threading._start_new_thread = fail_new_thread try: t = threading.Thread(target=lambda: None) - try: - t.start() - assert False - except threading.ThreadError: - self.assertFalse( - t in threading._limbo, - "Failed to cleanup _limbo map on failure of Thread.start()." - ) + self.assertRaises(threading.ThreadError, t.start) + self.assertFalse( + t in threading._limbo, + "Failed to cleanup _limbo map on failure of Thread.start().") finally: threading._start_new_thread = _start_new_thread From python-checkins at python.org Mon Mar 1 04:19:29 2010 From: python-checkins at python.org (gregory.p.smith) Date: Mon, 1 Mar 2010 04:19:29 +0100 (CET) Subject: [Python-checkins] r78539 - in python/branches/release31-maint: Lib/test/test_threading.py Message-ID: <20100301031929.32EECEE987@mail.python.org> Author: gregory.p.smith Date: Mon Mar 1 04:19:29 2010 New Revision: 78539 Log: Merged revisions 78538 via svnmerge from svn+ssh://pythondev at svn.python.org/python/branches/py3k ................ r78538 | gregory.p.smith | 2010-02-28 19:13:36 -0800 (Sun, 28 Feb 2010) | 9 lines Merged revisions 78536 via svnmerge from svn+ssh://pythondev at svn.python.org/python/trunk ........ r78536 | gregory.p.smith | 2010-02-28 19:09:19 -0800 (Sun, 28 Feb 2010) | 2 lines Cleanup the test added in r78517 based on Ezio Melotti's feedback. ........ ................ Modified: python/branches/release31-maint/ (props changed) python/branches/release31-maint/Lib/test/test_threading.py Modified: python/branches/release31-maint/Lib/test/test_threading.py ============================================================================== --- python/branches/release31-maint/Lib/test/test_threading.py (original) +++ python/branches/release31-maint/Lib/test/test_threading.py Mon Mar 1 04:19:29 2010 @@ -229,14 +229,10 @@ threading._start_new_thread = fail_new_thread try: t = threading.Thread(target=lambda: None) - try: - t.start() - assert False - except threading.ThreadError: - self.assertFalse( - t in threading._limbo, - "Failed to cleanup _limbo map on failure of Thread.start()." - ) + self.assertRaises(threading.ThreadError, t.start) + self.assertFalse( + t in threading._limbo, + "Failed to cleanup _limbo map on failure of Thread.start().") finally: threading._start_new_thread = _start_new_thread From python-checkins at python.org Mon Mar 1 05:05:56 2010 From: python-checkins at python.org (ezio.melotti) Date: Mon, 1 Mar 2010 05:05:56 +0100 (CET) Subject: [Python-checkins] r78540 - in python/branches/release26-maint: Objects/dictobject.c Objects/listobject.c Objects/setobject.c Objects/tupleobject.c Message-ID: <20100301040556.DF313EEA07@mail.python.org> Author: ezio.melotti Date: Mon Mar 1 05:05:56 2010 New Revision: 78540 Log: Merged revisions 78515-78516,78522 via svnmerge from svn+ssh://pythondev at svn.python.org/python/trunk ........ r78515 | georg.brandl | 2010-02-28 20:19:17 +0200 (Sun, 28 Feb 2010) | 1 line #8030: make builtin type docstrings more consistent: use "iterable" instead of "seq(uence)", use "new" to show that set() always returns a new object. ........ r78516 | georg.brandl | 2010-02-28 20:26:37 +0200 (Sun, 28 Feb 2010) | 1 line The set types can also be called without arguments. ........ r78522 | ezio.melotti | 2010-03-01 01:59:00 +0200 (Mon, 01 Mar 2010) | 1 line #8030: more docstring fix for builtin types. ........ Modified: python/branches/release26-maint/ (props changed) python/branches/release26-maint/Objects/dictobject.c python/branches/release26-maint/Objects/listobject.c python/branches/release26-maint/Objects/setobject.c python/branches/release26-maint/Objects/tupleobject.c Modified: python/branches/release26-maint/Objects/dictobject.c ============================================================================== --- python/branches/release26-maint/Objects/dictobject.c (original) +++ python/branches/release26-maint/Objects/dictobject.c Mon Mar 1 05:05:56 2010 @@ -2222,12 +2222,12 @@ } PyDoc_STRVAR(dictionary_doc, -"dict() -> new empty dictionary.\n" +"dict() -> new empty dictionary\n" "dict(mapping) -> new dictionary initialized from a mapping object's\n" -" (key, value) pairs.\n" -"dict(seq) -> new dictionary initialized as if via:\n" +" (key, value) pairs\n" +"dict(iterable) -> new dictionary initialized as if via:\n" " d = {}\n" -" for k, v in seq:\n" +" for k, v in iterable:\n" " d[k] = v\n" "dict(**kwargs) -> new dictionary initialized with the name=value pairs\n" " in the keyword argument list. For example: dict(one=1, two=2)"); Modified: python/branches/release26-maint/Objects/listobject.c ============================================================================== --- python/branches/release26-maint/Objects/listobject.c (original) +++ python/branches/release26-maint/Objects/listobject.c Mon Mar 1 05:05:56 2010 @@ -2516,8 +2516,8 @@ }; PyDoc_STRVAR(list_doc, -"list() -> new list\n" -"list(sequence) -> new list initialized from sequence's items"); +"list() -> new empty list\n" +"list(iterable) -> new list initialized from iterable's items"); static PyObject * Modified: python/branches/release26-maint/Objects/setobject.c ============================================================================== --- python/branches/release26-maint/Objects/setobject.c (original) +++ python/branches/release26-maint/Objects/setobject.c Mon Mar 1 05:05:56 2010 @@ -2102,7 +2102,8 @@ }; PyDoc_STRVAR(set_doc, -"set(iterable) --> set object\n\ +"set() -> new empty set object\n\ +set(iterable) -> new set object\n\ \n\ Build an unordered collection of unique elements."); @@ -2200,7 +2201,8 @@ }; PyDoc_STRVAR(frozenset_doc, -"frozenset(iterable) --> frozenset object\n\ +"frozenset() -> empty frozenset object\n\ +frozenset(iterable) -> frozenset object\n\ \n\ Build an immutable unordered collection of unique elements."); Modified: python/branches/release26-maint/Objects/tupleobject.c ============================================================================== --- python/branches/release26-maint/Objects/tupleobject.c (original) +++ python/branches/release26-maint/Objects/tupleobject.c Mon Mar 1 05:05:56 2010 @@ -630,10 +630,10 @@ } PyDoc_STRVAR(tuple_doc, -"tuple() -> an empty tuple\n" -"tuple(sequence) -> tuple initialized from sequence's items\n" -"\n" -"If the argument is a tuple, the return value is the same object."); +"tuple() -> empty tuple\n\ +tuple(iterable) -> tuple initialized from iterable's items\n\ +\n\ +If the argument is a tuple, the return value is the same object."); static PySequenceMethods tuple_as_sequence = { (lenfunc)tuplelength, /* sq_length */ From python-checkins at python.org Mon Mar 1 05:08:34 2010 From: python-checkins at python.org (ezio.melotti) Date: Mon, 1 Mar 2010 05:08:34 +0100 (CET) Subject: [Python-checkins] r78541 - in python/branches/py3k: Objects/dictobject.c Objects/listobject.c Objects/setobject.c Objects/tupleobject.c Message-ID: <20100301040834.BADA4EEA06@mail.python.org> Author: ezio.melotti Date: Mon Mar 1 05:08:34 2010 New Revision: 78541 Log: Merged revisions 78515-78516,78522 via svnmerge from svn+ssh://pythondev at svn.python.org/python/trunk ........ r78515 | georg.brandl | 2010-02-28 20:19:17 +0200 (Sun, 28 Feb 2010) | 1 line #8030: make builtin type docstrings more consistent: use "iterable" instead of "seq(uence)", use "new" to show that set() always returns a new object. ........ r78516 | georg.brandl | 2010-02-28 20:26:37 +0200 (Sun, 28 Feb 2010) | 1 line The set types can also be called without arguments. ........ r78522 | ezio.melotti | 2010-03-01 01:59:00 +0200 (Mon, 01 Mar 2010) | 1 line #8030: more docstring fix for builtin types. ........ Modified: python/branches/py3k/ (props changed) python/branches/py3k/Objects/dictobject.c python/branches/py3k/Objects/listobject.c python/branches/py3k/Objects/setobject.c python/branches/py3k/Objects/tupleobject.c Modified: python/branches/py3k/Objects/dictobject.c ============================================================================== --- python/branches/py3k/Objects/dictobject.c (original) +++ python/branches/py3k/Objects/dictobject.c Mon Mar 1 05:08:34 2010 @@ -2100,12 +2100,12 @@ } PyDoc_STRVAR(dictionary_doc, -"dict() -> new empty dictionary.\n" +"dict() -> new empty dictionary\n" "dict(mapping) -> new dictionary initialized from a mapping object's\n" -" (key, value) pairs.\n" -"dict(seq) -> new dictionary initialized as if via:\n" +" (key, value) pairs\n" +"dict(iterable) -> new dictionary initialized as if via:\n" " d = {}\n" -" for k, v in seq:\n" +" for k, v in iterable:\n" " d[k] = v\n" "dict(**kwargs) -> new dictionary initialized with the name=value pairs\n" " in the keyword argument list. For example: dict(one=1, two=2)"); Modified: python/branches/py3k/Objects/listobject.c ============================================================================== --- python/branches/py3k/Objects/listobject.c (original) +++ python/branches/py3k/Objects/listobject.c Mon Mar 1 05:08:34 2010 @@ -2357,8 +2357,8 @@ }; PyDoc_STRVAR(list_doc, -"list() -> new list\n" -"list(sequence) -> new list initialized from sequence's items"); +"list() -> new empty list\n" +"list(iterable) -> new list initialized from iterable's items"); static PyObject * list_subscript(PyListObject* self, PyObject* item) Modified: python/branches/py3k/Objects/setobject.c ============================================================================== --- python/branches/py3k/Objects/setobject.c (original) +++ python/branches/py3k/Objects/setobject.c Mon Mar 1 05:08:34 2010 @@ -2090,7 +2090,8 @@ }; PyDoc_STRVAR(set_doc, -"set(iterable) --> set object\n\ +"set() -> new empty set object\n\ +set(iterable) -> new set object\n\ \n\ Build an unordered collection of unique elements."); @@ -2187,7 +2188,8 @@ }; PyDoc_STRVAR(frozenset_doc, -"frozenset(iterable) --> frozenset object\n\ +"frozenset() -> empty frozenset object\n\ +frozenset(iterable) -> frozenset object\n\ \n\ Build an immutable unordered collection of unique elements."); Modified: python/branches/py3k/Objects/tupleobject.c ============================================================================== --- python/branches/py3k/Objects/tupleobject.c (original) +++ python/branches/py3k/Objects/tupleobject.c Mon Mar 1 05:08:34 2010 @@ -656,10 +656,10 @@ } PyDoc_STRVAR(tuple_doc, -"tuple() -> an empty tuple\n" -"tuple(sequence) -> tuple initialized from sequence's items\n" -"\n" -"If the argument is a tuple, the return value is the same object."); +"tuple() -> empty tuple\n\ +tuple(iterable) -> tuple initialized from iterable's items\n\ +\n\ +If the argument is a tuple, the return value is the same object."); static PySequenceMethods tuple_as_sequence = { (lenfunc)tuplelength, /* sq_length */ From python-checkins at python.org Mon Mar 1 05:10:55 2010 From: python-checkins at python.org (ezio.melotti) Date: Mon, 1 Mar 2010 05:10:55 +0100 (CET) Subject: [Python-checkins] r78542 - in python/branches/release31-maint: Objects/dictobject.c Objects/listobject.c Objects/setobject.c Objects/tupleobject.c Message-ID: <20100301041055.47C24EEA2B@mail.python.org> Author: ezio.melotti Date: Mon Mar 1 05:10:55 2010 New Revision: 78542 Log: Merged revisions 78541 via svnmerge from svn+ssh://pythondev at svn.python.org/python/branches/py3k ................ r78541 | ezio.melotti | 2010-03-01 06:08:34 +0200 (Mon, 01 Mar 2010) | 17 lines Merged revisions 78515-78516,78522 via svnmerge from svn+ssh://pythondev at svn.python.org/python/trunk ........ r78515 | georg.brandl | 2010-02-28 20:19:17 +0200 (Sun, 28 Feb 2010) | 1 line #8030: make builtin type docstrings more consistent: use "iterable" instead of "seq(uence)", use "new" to show that set() always returns a new object. ........ r78516 | georg.brandl | 2010-02-28 20:26:37 +0200 (Sun, 28 Feb 2010) | 1 line The set types can also be called without arguments. ........ r78522 | ezio.melotti | 2010-03-01 01:59:00 +0200 (Mon, 01 Mar 2010) | 1 line #8030: more docstring fix for builtin types. ........ ................ Modified: python/branches/release31-maint/ (props changed) python/branches/release31-maint/Objects/dictobject.c python/branches/release31-maint/Objects/listobject.c python/branches/release31-maint/Objects/setobject.c python/branches/release31-maint/Objects/tupleobject.c Modified: python/branches/release31-maint/Objects/dictobject.c ============================================================================== --- python/branches/release31-maint/Objects/dictobject.c (original) +++ python/branches/release31-maint/Objects/dictobject.c Mon Mar 1 05:10:55 2010 @@ -2100,12 +2100,12 @@ } PyDoc_STRVAR(dictionary_doc, -"dict() -> new empty dictionary.\n" +"dict() -> new empty dictionary\n" "dict(mapping) -> new dictionary initialized from a mapping object's\n" -" (key, value) pairs.\n" -"dict(seq) -> new dictionary initialized as if via:\n" +" (key, value) pairs\n" +"dict(iterable) -> new dictionary initialized as if via:\n" " d = {}\n" -" for k, v in seq:\n" +" for k, v in iterable:\n" " d[k] = v\n" "dict(**kwargs) -> new dictionary initialized with the name=value pairs\n" " in the keyword argument list. For example: dict(one=1, two=2)"); Modified: python/branches/release31-maint/Objects/listobject.c ============================================================================== --- python/branches/release31-maint/Objects/listobject.c (original) +++ python/branches/release31-maint/Objects/listobject.c Mon Mar 1 05:10:55 2010 @@ -2343,8 +2343,8 @@ }; PyDoc_STRVAR(list_doc, -"list() -> new list\n" -"list(sequence) -> new list initialized from sequence's items"); +"list() -> new empty list\n" +"list(iterable) -> new list initialized from iterable's items"); static PyObject * list_subscript(PyListObject* self, PyObject* item) Modified: python/branches/release31-maint/Objects/setobject.c ============================================================================== --- python/branches/release31-maint/Objects/setobject.c (original) +++ python/branches/release31-maint/Objects/setobject.c Mon Mar 1 05:10:55 2010 @@ -2090,7 +2090,8 @@ }; PyDoc_STRVAR(set_doc, -"set(iterable) --> set object\n\ +"set() -> new empty set object\n\ +set(iterable) -> new set object\n\ \n\ Build an unordered collection of unique elements."); @@ -2187,7 +2188,8 @@ }; PyDoc_STRVAR(frozenset_doc, -"frozenset(iterable) --> frozenset object\n\ +"frozenset() -> empty frozenset object\n\ +frozenset(iterable) -> frozenset object\n\ \n\ Build an immutable unordered collection of unique elements."); Modified: python/branches/release31-maint/Objects/tupleobject.c ============================================================================== --- python/branches/release31-maint/Objects/tupleobject.c (original) +++ python/branches/release31-maint/Objects/tupleobject.c Mon Mar 1 05:10:55 2010 @@ -656,10 +656,10 @@ } PyDoc_STRVAR(tuple_doc, -"tuple() -> an empty tuple\n" -"tuple(sequence) -> tuple initialized from sequence's items\n" -"\n" -"If the argument is a tuple, the return value is the same object."); +"tuple() -> empty tuple\n\ +tuple(iterable) -> tuple initialized from iterable's items\n\ +\n\ +If the argument is a tuple, the return value is the same object."); static PySequenceMethods tuple_as_sequence = { (lenfunc)tuplelength, /* sq_length */ From python-checkins at python.org Mon Mar 1 05:40:36 2010 From: python-checkins at python.org (gregory.p.smith) Date: Mon, 1 Mar 2010 05:40:36 +0100 (CET) Subject: [Python-checkins] r78543 - in python/branches/release26-maint: Lib/test/test_thread.py Misc/NEWS Modules/posixmodule.c Python/import.c Message-ID: <20100301044036.4FDA5EE9C9@mail.python.org> Author: gregory.p.smith Date: Mon Mar 1 05:40:36 2010 New Revision: 78543 Log: Merged revisions 78527,78531 via svnmerge from svn+ssh://pythondev at svn.python.org/python/trunk ........ r78527 | gregory.p.smith | 2010-02-28 17:22:39 -0800 (Sun, 28 Feb 2010) | 4 lines Issue #7242: On Solaris 9 and earlier calling os.fork() from within a thread could raise an incorrect RuntimeError about not holding the import lock. The import lock is now reinitialized after fork. ........ r78531 | gregory.p.smith | 2010-02-28 18:31:33 -0800 (Sun, 28 Feb 2010) | 2 lines Fix for r78527. It left out updating forkpty. ........ Modified: python/branches/release26-maint/ (props changed) python/branches/release26-maint/Lib/test/test_thread.py python/branches/release26-maint/Misc/NEWS python/branches/release26-maint/Modules/posixmodule.c python/branches/release26-maint/Python/import.c Modified: python/branches/release26-maint/Lib/test/test_thread.py ============================================================================== --- python/branches/release26-maint/Lib/test/test_thread.py (original) +++ python/branches/release26-maint/Lib/test/test_thread.py Mon Mar 1 05:40:36 2010 @@ -4,6 +4,7 @@ from test import test_support import thread import time +import sys from test import lock_tests @@ -169,8 +170,47 @@ locktype = thread.allocate_lock +class TestForkInThread(unittest.TestCase): + def setUp(self): + self.read_fd, self.write_fd = os.pipe() + + def test_forkinthread(self): + if sys.platform.startswith('win'): + from test.test_support import TestSkipped + raise TestSkipped("This test is only appropriate for " + "POSIX-like systems.") + def thread1(): + try: + pid = os.fork() # fork in a thread + except RuntimeError: + sys.exit(0) # exit the child + + if pid == 0: # child + os.close(self.read_fd) + os.write(self.write_fd, "OK") + sys.exit(0) + else: # parent + os.close(self.write_fd) + + thread.start_new_thread(thread1, ()) + self.assertEqual(os.read(self.read_fd, 2), "OK", + "Unable to fork() in thread") + + def tearDown(self): + try: + os.close(self.read_fd) + except OSError: + pass + + try: + os.close(self.write_fd) + except OSError: + pass + + def test_main(): - test_support.run_unittest(ThreadRunningTests, BarrierTest, LockTests) + test_support.run_unittest(ThreadRunningTests, BarrierTest, LockTests, + TestForkInThread) if __name__ == "__main__": test_main() Modified: python/branches/release26-maint/Misc/NEWS ============================================================================== --- python/branches/release26-maint/Misc/NEWS (original) +++ python/branches/release26-maint/Misc/NEWS Mon Mar 1 05:40:36 2010 @@ -250,6 +250,10 @@ - Expat: Fix DoS via XML document with malformed UTF-8 sequences (CVE_2009_3560). +- Issue #7242: On Solaris 9 and earlier calling os.fork() from within a + thread could raise an incorrect RuntimeError about not holding the import + lock. The import lock is now reinitialized after fork. + Build ----- Modified: python/branches/release26-maint/Modules/posixmodule.c ============================================================================== --- python/branches/release26-maint/Modules/posixmodule.c (original) +++ python/branches/release26-maint/Modules/posixmodule.c Mon Mar 1 05:40:36 2010 @@ -3632,14 +3632,18 @@ posix_fork1(PyObject *self, PyObject *noargs) { pid_t pid; - int result; + int result = 0; _PyImport_AcquireLock(); pid = fork1(); - result = _PyImport_ReleaseLock(); + if (pid == 0) { + /* child: this clobbers and resets the import lock. */ + PyOS_AfterFork(); + } else { + /* parent: release the import lock. */ + result = _PyImport_ReleaseLock(); + } if (pid == -1) return posix_error(); - if (pid == 0) - PyOS_AfterFork(); if (result < 0) { /* Don't clobber the OSError if the fork failed. */ PyErr_SetString(PyExc_RuntimeError, @@ -3661,14 +3665,18 @@ posix_fork(PyObject *self, PyObject *noargs) { pid_t pid; - int result; + int result = 0; _PyImport_AcquireLock(); pid = fork(); - result = _PyImport_ReleaseLock(); + if (pid == 0) { + /* child: this clobbers and resets the import lock. */ + PyOS_AfterFork(); + } else { + /* parent: release the import lock. */ + result = _PyImport_ReleaseLock(); + } if (pid == -1) return posix_error(); - if (pid == 0) - PyOS_AfterFork(); if (result < 0) { /* Don't clobber the OSError if the fork failed. */ PyErr_SetString(PyExc_RuntimeError, @@ -3777,16 +3785,20 @@ static PyObject * posix_forkpty(PyObject *self, PyObject *noargs) { - int master_fd = -1, result; + int master_fd = -1, result = 0; pid_t pid; _PyImport_AcquireLock(); pid = forkpty(&master_fd, NULL, NULL, NULL); - result = _PyImport_ReleaseLock(); + if (pid == 0) { + /* child: this clobbers and resets the import lock. */ + PyOS_AfterFork(); + } else { + /* parent: release the import lock. */ + result = _PyImport_ReleaseLock(); + } if (pid == -1) return posix_error(); - if (pid == 0) - PyOS_AfterFork(); if (result < 0) { /* Don't clobber the OSError if the fork failed. */ PyErr_SetString(PyExc_RuntimeError, Modified: python/branches/release26-maint/Python/import.c ============================================================================== --- python/branches/release26-maint/Python/import.c (original) +++ python/branches/release26-maint/Python/import.c Mon Mar 1 05:40:36 2010 @@ -298,15 +298,17 @@ } /* This function is called from PyOS_AfterFork to ensure that newly - created child processes do not share locks with the parent. */ + created child processes do not share locks with the parent. + We now acquire the import lock around fork() calls but on some platforms + (Solaris 9 and earlier? see isue7242) that still left us with problems. */ void _PyImport_ReInitLock(void) { -#ifdef _AIX - if (import_lock != NULL) - import_lock = PyThread_allocate_lock(); -#endif + if (import_lock != NULL) + import_lock = PyThread_allocate_lock(); + import_lock_thread = -1; + import_lock_level = 0; } #endif From python-checkins at python.org Mon Mar 1 05:56:13 2010 From: python-checkins at python.org (gregory.p.smith) Date: Mon, 1 Mar 2010 05:56:13 +0100 (CET) Subject: [Python-checkins] r78544 - in python/trunk: Doc/library/ctypes.rst Lib/ctypes/__init__.py Lib/ctypes/test/test_sizes.py Misc/NEWS Message-ID: <20100301045613.122C4EE990@mail.python.org> Author: gregory.p.smith Date: Mon Mar 1 05:56:12 2010 New Revision: 78544 Log: Adds c_ssize_t to ctypes. issue 6729. Modified: python/trunk/Doc/library/ctypes.rst python/trunk/Lib/ctypes/__init__.py python/trunk/Lib/ctypes/test/test_sizes.py python/trunk/Misc/NEWS Modified: python/trunk/Doc/library/ctypes.rst ============================================================================== --- python/trunk/Doc/library/ctypes.rst (original) +++ python/trunk/Doc/library/ctypes.rst Mon Mar 1 05:56:12 2010 @@ -2248,6 +2248,13 @@ Represents the C :ctype:`size_t` datatype. +.. class:: c_ssize_t + + Represents the C :ctype:`ssize_t` datatype. + + .. versionadded:: 2.7 + + .. class:: c_ubyte Represents the C :ctype:`unsigned char` datatype, it interprets the value as Modified: python/trunk/Lib/ctypes/__init__.py ============================================================================== --- python/trunk/Lib/ctypes/__init__.py (original) +++ python/trunk/Lib/ctypes/__init__.py Mon Mar 1 05:56:12 2010 @@ -462,10 +462,13 @@ if sizeof(c_uint) == sizeof(c_void_p): c_size_t = c_uint + c_ssize_t = c_int elif sizeof(c_ulong) == sizeof(c_void_p): c_size_t = c_ulong + c_ssize_t = c_long elif sizeof(c_ulonglong) == sizeof(c_void_p): c_size_t = c_ulonglong + c_ssize_t = c_longlong # functions Modified: python/trunk/Lib/ctypes/test/test_sizes.py ============================================================================== --- python/trunk/Lib/ctypes/test/test_sizes.py (original) +++ python/trunk/Lib/ctypes/test/test_sizes.py Mon Mar 1 05:56:12 2010 @@ -1,8 +1,11 @@ # Test specifically-sized containers. -import unittest from ctypes import * +import sys +import unittest + + class SizesTestCase(unittest.TestCase): def test_8(self): self.assertEqual(1, sizeof(c_int8)) @@ -23,5 +26,9 @@ def test_size_t(self): self.assertEqual(sizeof(c_void_p), sizeof(c_size_t)) + def test_ssize_t(self): + self.assertEqual(sizeof(c_void_p), sizeof(c_ssize_t)) + + if __name__ == "__main__": unittest.main() Modified: python/trunk/Misc/NEWS ============================================================================== --- python/trunk/Misc/NEWS (original) +++ python/trunk/Misc/NEWS Mon Mar 1 05:56:12 2010 @@ -78,6 +78,8 @@ - Issue #1068268: The subprocess module now handles EINTR in internal os.waitpid and os.read system calls where appropriate. +- Issue #6729: Added ctypes.c_ssize_t to represent ssize_t. + Extension Modules ----------------- From python-checkins at python.org Mon Mar 1 05:59:27 2010 From: python-checkins at python.org (gregory.p.smith) Date: Mon, 1 Mar 2010 05:59:27 +0100 (CET) Subject: [Python-checkins] r78545 - in python/branches/py3k: Doc/library/ctypes.rst Lib/ctypes/__init__.py Lib/ctypes/test/test_sizes.py Misc/NEWS Message-ID: <20100301045927.7B3D9EE9F3@mail.python.org> Author: gregory.p.smith Date: Mon Mar 1 05:59:27 2010 New Revision: 78545 Log: Merged revisions 78544 via svnmerge from svn+ssh://pythondev at svn.python.org/python/trunk ........ r78544 | gregory.p.smith | 2010-02-28 20:56:12 -0800 (Sun, 28 Feb 2010) | 2 lines Adds c_ssize_t to ctypes. issue 6729. ........ Modified: python/branches/py3k/ (props changed) python/branches/py3k/Doc/library/ctypes.rst python/branches/py3k/Lib/ctypes/__init__.py python/branches/py3k/Lib/ctypes/test/test_sizes.py python/branches/py3k/Misc/NEWS Modified: python/branches/py3k/Doc/library/ctypes.rst ============================================================================== --- python/branches/py3k/Doc/library/ctypes.rst (original) +++ python/branches/py3k/Doc/library/ctypes.rst Mon Mar 1 05:59:27 2010 @@ -2207,6 +2207,13 @@ Represents the C :ctype:`size_t` datatype. +.. class:: c_ssize_t + + Represents the C :ctype:`ssize_t` datatype. + + .. versionadded:: 3.2 + + .. class:: c_ubyte Represents the C :ctype:`unsigned char` datatype, it interprets the value as Modified: python/branches/py3k/Lib/ctypes/__init__.py ============================================================================== --- python/branches/py3k/Lib/ctypes/__init__.py (original) +++ python/branches/py3k/Lib/ctypes/__init__.py Mon Mar 1 05:59:27 2010 @@ -459,10 +459,13 @@ if sizeof(c_uint) == sizeof(c_void_p): c_size_t = c_uint + c_ssize_t = c_int elif sizeof(c_ulong) == sizeof(c_void_p): c_size_t = c_ulong + c_ssize_t = c_long elif sizeof(c_ulonglong) == sizeof(c_void_p): c_size_t = c_ulonglong + c_ssize_t = c_longlong # functions Modified: python/branches/py3k/Lib/ctypes/test/test_sizes.py ============================================================================== --- python/branches/py3k/Lib/ctypes/test/test_sizes.py (original) +++ python/branches/py3k/Lib/ctypes/test/test_sizes.py Mon Mar 1 05:59:27 2010 @@ -1,8 +1,11 @@ # Test specifically-sized containers. -import unittest from ctypes import * +import sys +import unittest + + class SizesTestCase(unittest.TestCase): def test_8(self): self.assertEqual(1, sizeof(c_int8)) @@ -23,5 +26,9 @@ def test_size_t(self): self.assertEqual(sizeof(c_void_p), sizeof(c_size_t)) + def test_ssize_t(self): + self.assertEqual(sizeof(c_void_p), sizeof(c_ssize_t)) + + if __name__ == "__main__": unittest.main() Modified: python/branches/py3k/Misc/NEWS ============================================================================== --- python/branches/py3k/Misc/NEWS (original) +++ python/branches/py3k/Misc/NEWS Mon Mar 1 05:59:27 2010 @@ -717,6 +717,8 @@ - Issue #1068268: The subprocess module now handles EINTR in internal os.waitpid and os.read system calls where appropriate. +- Issue #6729: Added ctypes.c_ssize_t to represent ssize_t. + Extension Modules ----------------- From python-checkins at python.org Mon Mar 1 06:43:44 2010 From: python-checkins at python.org (gregory.p.smith) Date: Mon, 1 Mar 2010 06:43:44 +0100 (CET) Subject: [Python-checkins] r78546 - in python/trunk: Lib/test/test_os.py Misc/NEWS Modules/posixmodule.c Message-ID: <20100301054344.587BBEE9CB@mail.python.org> Author: gregory.p.smith Date: Mon Mar 1 06:43:43 2010 New Revision: 78546 Log: Fixes issue #7999: os.setreuid() and os.setregid() would refuse to accept a -1 parameter on some platforms such as OS X. Modified: python/trunk/Lib/test/test_os.py python/trunk/Misc/NEWS python/trunk/Modules/posixmodule.c Modified: python/trunk/Lib/test/test_os.py ============================================================================== --- python/trunk/Lib/test/test_os.py (original) +++ python/trunk/Lib/test/test_os.py Mon Mar 1 06:43:43 2010 @@ -642,6 +642,7 @@ self.assertRaises(os.error, os.setreuid, 0, 0) self.assertRaises(OverflowError, os.setreuid, 1<<32, 0) self.assertRaises(OverflowError, os.setreuid, 0, 1<<32) + os.setreuid(-1, -1) # Does nothing, but it needs to accept -1 if hasattr(os, 'setregid'): def test_setregid(self): @@ -649,6 +650,7 @@ self.assertRaises(os.error, os.setregid, 0, 0) self.assertRaises(OverflowError, os.setregid, 1<<32, 0) self.assertRaises(OverflowError, os.setregid, 0, 1<<32) + os.setregid(-1, -1) # Does nothing, but it needs to accept -1 else: class PosixUidGidTests(unittest.TestCase): pass Modified: python/trunk/Misc/NEWS ============================================================================== --- python/trunk/Misc/NEWS (original) +++ python/trunk/Misc/NEWS Mon Mar 1 06:43:43 2010 @@ -93,6 +93,9 @@ thread could raise an incorrect RuntimeError about not holding the import lock. The import lock is now reinitialized after fork. +- Issue #7999: os.setreuid() and os.setregid() would refuse to accept a -1 + parameter on some platforms such as OS X. + Tests ----- Modified: python/trunk/Modules/posixmodule.c ============================================================================== --- python/trunk/Modules/posixmodule.c (original) +++ python/trunk/Modules/posixmodule.c Mon Mar 1 06:43:43 2010 @@ -5650,9 +5650,16 @@ uid_t ruid, euid; if (!PyArg_ParseTuple(args, "ll", &ruid_arg, &euid_arg)) return NULL; - ruid = ruid_arg; - euid = euid_arg; - if (euid != euid_arg || ruid != ruid_arg) { + if (ruid_arg == -1) + ruid = (uid_t)-1; /* let the compiler choose how -1 fits */ + else + ruid = ruid_arg; /* otherwise, assign from our long */ + if (euid_arg == -1) + euid = (uid_t)-1; + else + euid = euid_arg; + if ((euid_arg != -1 && euid != euid_arg) || + (ruid_arg != -1 && ruid != ruid_arg)) { PyErr_SetString(PyExc_OverflowError, "user id too big"); return NULL; } @@ -5677,9 +5684,16 @@ gid_t rgid, egid; if (!PyArg_ParseTuple(args, "ll", &rgid_arg, &egid_arg)) return NULL; - rgid = rgid_arg; - egid = egid_arg; - if (egid != egid_arg || rgid != rgid_arg) { + if (rgid_arg == -1) + rgid = (gid_t)-1; /* let the compiler choose how -1 fits */ + else + rgid = rgid_arg; /* otherwise, assign from our long */ + if (egid_arg == -1) + egid = (gid_t)-1; + else + egid = egid_arg; + if ((egid_arg != -1 && egid != egid_arg) || + (rgid_arg != -1 && rgid != rgid_arg)) { PyErr_SetString(PyExc_OverflowError, "group id too big"); return NULL; } From python-checkins at python.org Mon Mar 1 06:48:57 2010 From: python-checkins at python.org (gregory.p.smith) Date: Mon, 1 Mar 2010 06:48:57 +0100 (CET) Subject: [Python-checkins] r78547 - in python/branches/release26-maint: Lib/test/test_os.py Misc/NEWS Modules/posixmodule.c Message-ID: <20100301054857.E46E1FE3D@mail.python.org> Author: gregory.p.smith Date: Mon Mar 1 06:48:57 2010 New Revision: 78547 Log: Merged revisions 78546 via svnmerge from svn+ssh://pythondev at svn.python.org/python/trunk ........ r78546 | gregory.p.smith | 2010-02-28 21:43:43 -0800 (Sun, 28 Feb 2010) | 3 lines Fixes issue #7999: os.setreuid() and os.setregid() would refuse to accept a -1 parameter on some platforms such as OS X. ........ Modified: python/branches/release26-maint/ (props changed) python/branches/release26-maint/Lib/test/test_os.py python/branches/release26-maint/Misc/NEWS python/branches/release26-maint/Modules/posixmodule.c Modified: python/branches/release26-maint/Lib/test/test_os.py ============================================================================== --- python/branches/release26-maint/Lib/test/test_os.py (original) +++ python/branches/release26-maint/Lib/test/test_os.py Mon Mar 1 06:48:57 2010 @@ -643,6 +643,7 @@ self.assertRaises(os.error, os.setreuid, 0, 0) self.assertRaises(OverflowError, os.setreuid, 1<<32, 0) self.assertRaises(OverflowError, os.setreuid, 0, 1<<32) + os.setreuid(-1, -1) # Does nothing, but it needs to accept -1 if hasattr(os, 'setregid'): def test_setregid(self): @@ -650,6 +651,7 @@ self.assertRaises(os.error, os.setregid, 0, 0) self.assertRaises(OverflowError, os.setregid, 1<<32, 0) self.assertRaises(OverflowError, os.setregid, 0, 1<<32) + os.setregid(-1, -1) # Does nothing, but it needs to accept -1 else: class PosixUidGidTests(unittest.TestCase): pass Modified: python/branches/release26-maint/Misc/NEWS ============================================================================== --- python/branches/release26-maint/Misc/NEWS (original) +++ python/branches/release26-maint/Misc/NEWS Mon Mar 1 06:48:57 2010 @@ -254,6 +254,9 @@ thread could raise an incorrect RuntimeError about not holding the import lock. The import lock is now reinitialized after fork. +- Issue #7999: os.setreuid() and os.setregid() would refuse to accept a -1 + parameter on some platforms such as OS X. + Build ----- Modified: python/branches/release26-maint/Modules/posixmodule.c ============================================================================== --- python/branches/release26-maint/Modules/posixmodule.c (original) +++ python/branches/release26-maint/Modules/posixmodule.c Mon Mar 1 06:48:57 2010 @@ -5649,9 +5649,16 @@ uid_t ruid, euid; if (!PyArg_ParseTuple(args, "ll", &ruid_arg, &euid_arg)) return NULL; - ruid = ruid_arg; - euid = euid_arg; - if (euid != euid_arg || ruid != ruid_arg) { + if (ruid_arg == -1) + ruid = (uid_t)-1; /* let the compiler choose how -1 fits */ + else + ruid = ruid_arg; /* otherwise, assign from our long */ + if (euid_arg == -1) + euid = (uid_t)-1; + else + euid = euid_arg; + if ((euid_arg != -1 && euid != euid_arg) || + (ruid_arg != -1 && ruid != ruid_arg)) { PyErr_SetString(PyExc_OverflowError, "user id too big"); return NULL; } @@ -5676,9 +5683,16 @@ gid_t rgid, egid; if (!PyArg_ParseTuple(args, "ll", &rgid_arg, &egid_arg)) return NULL; - rgid = rgid_arg; - egid = egid_arg; - if (egid != egid_arg || rgid != rgid_arg) { + if (rgid_arg == -1) + rgid = (gid_t)-1; /* let the compiler choose how -1 fits */ + else + rgid = rgid_arg; /* otherwise, assign from our long */ + if (egid_arg == -1) + egid = (gid_t)-1; + else + egid = egid_arg; + if ((egid_arg != -1 && egid != egid_arg) || + (rgid_arg != -1 && rgid != rgid_arg)) { PyErr_SetString(PyExc_OverflowError, "group id too big"); return NULL; } From python-checkins at python.org Mon Mar 1 06:54:15 2010 From: python-checkins at python.org (gregory.p.smith) Date: Mon, 1 Mar 2010 06:54:15 +0100 (CET) Subject: [Python-checkins] r78548 - in python/branches/py3k: Lib/test/test_os.py Misc/NEWS Modules/posixmodule.c Message-ID: <20100301055415.30F15EE987@mail.python.org> Author: gregory.p.smith Date: Mon Mar 1 06:54:14 2010 New Revision: 78548 Log: Merged revisions 78546 via svnmerge from svn+ssh://pythondev at svn.python.org/python/trunk ........ r78546 | gregory.p.smith | 2010-02-28 21:43:43 -0800 (Sun, 28 Feb 2010) | 3 lines Fixes issue #7999: os.setreuid() and os.setregid() would refuse to accept a -1 parameter on some platforms such as OS X. ........ Modified: python/branches/py3k/ (props changed) python/branches/py3k/Lib/test/test_os.py python/branches/py3k/Misc/NEWS python/branches/py3k/Modules/posixmodule.c Modified: python/branches/py3k/Lib/test/test_os.py ============================================================================== --- python/branches/py3k/Lib/test/test_os.py (original) +++ python/branches/py3k/Lib/test/test_os.py Mon Mar 1 06:54:14 2010 @@ -738,6 +738,7 @@ self.assertRaises(os.error, os.setreuid, 0, 0) self.assertRaises(OverflowError, os.setreuid, 1<<32, 0) self.assertRaises(OverflowError, os.setreuid, 0, 1<<32) + os.setreuid(-1, -1) # Does nothing, but it needs to accept -1 if hasattr(os, 'setregid'): def test_setregid(self): @@ -745,6 +746,7 @@ self.assertRaises(os.error, os.setregid, 0, 0) self.assertRaises(OverflowError, os.setregid, 1<<32, 0) self.assertRaises(OverflowError, os.setregid, 0, 1<<32) + os.setregid(-1, -1) # Does nothing, but it needs to accept -1 @unittest.skipIf(sys.platform == 'darwin', "tests don't apply to OS X") class Pep383Tests(unittest.TestCase): Modified: python/branches/py3k/Misc/NEWS ============================================================================== --- python/branches/py3k/Misc/NEWS (original) +++ python/branches/py3k/Misc/NEWS Mon Mar 1 06:54:14 2010 @@ -751,6 +751,9 @@ - Expat: Fix DoS via XML document with malformed UTF-8 sequences (CVE_2009_3560). +- Issue #7999: os.setreuid() and os.setregid() would refuse to accept a -1 + parameter on some platforms such as OS X. + Build ----- Modified: python/branches/py3k/Modules/posixmodule.c ============================================================================== --- python/branches/py3k/Modules/posixmodule.c (original) +++ python/branches/py3k/Modules/posixmodule.c Mon Mar 1 06:54:14 2010 @@ -4288,9 +4288,16 @@ uid_t ruid, euid; if (!PyArg_ParseTuple(args, "ll", &ruid_arg, &euid_arg)) return NULL; - ruid = ruid_arg; - euid = euid_arg; - if (euid != euid_arg || ruid != ruid_arg) { + if (ruid_arg == -1) + ruid = (uid_t)-1; /* let the compiler choose how -1 fits */ + else + ruid = ruid_arg; /* otherwise, assign from our long */ + if (euid_arg == -1) + euid = (uid_t)-1; + else + euid = euid_arg; + if ((euid_arg != -1 && euid != euid_arg) || + (ruid_arg != -1 && ruid != ruid_arg)) { PyErr_SetString(PyExc_OverflowError, "user id too big"); return NULL; } @@ -4315,9 +4322,16 @@ gid_t rgid, egid; if (!PyArg_ParseTuple(args, "ll", &rgid_arg, &egid_arg)) return NULL; - rgid = rgid_arg; - egid = egid_arg; - if (egid != egid_arg || rgid != rgid_arg) { + if (rgid_arg == -1) + rgid = (gid_t)-1; /* let the compiler choose how -1 fits */ + else + rgid = rgid_arg; /* otherwise, assign from our long */ + if (egid_arg == -1) + egid = (gid_t)-1; + else + egid = egid_arg; + if ((egid_arg != -1 && egid != egid_arg) || + (rgid_arg != -1 && rgid != rgid_arg)) { PyErr_SetString(PyExc_OverflowError, "group id too big"); return NULL; } From python-checkins at python.org Mon Mar 1 06:56:53 2010 From: python-checkins at python.org (gregory.p.smith) Date: Mon, 1 Mar 2010 06:56:53 +0100 (CET) Subject: [Python-checkins] r78549 - in python/branches/release31-maint: Lib/test/test_os.py Misc/NEWS Modules/posixmodule.c Message-ID: <20100301055653.BB68AEE987@mail.python.org> Author: gregory.p.smith Date: Mon Mar 1 06:56:53 2010 New Revision: 78549 Log: Merged revisions 78548 via svnmerge from svn+ssh://pythondev at svn.python.org/python/branches/py3k ................ r78548 | gregory.p.smith | 2010-02-28 21:54:14 -0800 (Sun, 28 Feb 2010) | 10 lines Merged revisions 78546 via svnmerge from svn+ssh://pythondev at svn.python.org/python/trunk ........ r78546 | gregory.p.smith | 2010-02-28 21:43:43 -0800 (Sun, 28 Feb 2010) | 3 lines Fixes issue #7999: os.setreuid() and os.setregid() would refuse to accept a -1 parameter on some platforms such as OS X. ........ ................ Modified: python/branches/release31-maint/ (props changed) python/branches/release31-maint/Lib/test/test_os.py python/branches/release31-maint/Misc/NEWS python/branches/release31-maint/Modules/posixmodule.c Modified: python/branches/release31-maint/Lib/test/test_os.py ============================================================================== --- python/branches/release31-maint/Lib/test/test_os.py (original) +++ python/branches/release31-maint/Lib/test/test_os.py Mon Mar 1 06:56:53 2010 @@ -717,6 +717,7 @@ self.assertRaises(os.error, os.setreuid, 0, 0) self.assertRaises(OverflowError, os.setreuid, 1<<32, 0) self.assertRaises(OverflowError, os.setreuid, 0, 1<<32) + os.setreuid(-1, -1) # Does nothing, but it needs to accept -1 if hasattr(os, 'setregid'): def test_setregid(self): @@ -724,6 +725,7 @@ self.assertRaises(os.error, os.setregid, 0, 0) self.assertRaises(OverflowError, os.setregid, 1<<32, 0) self.assertRaises(OverflowError, os.setregid, 0, 1<<32) + os.setregid(-1, -1) # Does nothing, but it needs to accept -1 @unittest.skipIf(sys.platform == 'darwin', "tests don't apply to OS X") class Pep383Tests(unittest.TestCase): Modified: python/branches/release31-maint/Misc/NEWS ============================================================================== --- python/branches/release31-maint/Misc/NEWS (original) +++ python/branches/release31-maint/Misc/NEWS Mon Mar 1 06:56:53 2010 @@ -351,6 +351,9 @@ - Expat: Fix DoS via XML document with malformed UTF-8 sequences (CVE_2009_3560). +- Issue #7999: os.setreuid() and os.setregid() would refuse to accept a -1 + parameter on some platforms such as OS X. + Tests ----- Modified: python/branches/release31-maint/Modules/posixmodule.c ============================================================================== --- python/branches/release31-maint/Modules/posixmodule.c (original) +++ python/branches/release31-maint/Modules/posixmodule.c Mon Mar 1 06:56:53 2010 @@ -4370,9 +4370,16 @@ uid_t ruid, euid; if (!PyArg_ParseTuple(args, "ll", &ruid_arg, &euid_arg)) return NULL; - ruid = ruid_arg; - euid = euid_arg; - if (euid != euid_arg || ruid != ruid_arg) { + if (ruid_arg == -1) + ruid = (uid_t)-1; /* let the compiler choose how -1 fits */ + else + ruid = ruid_arg; /* otherwise, assign from our long */ + if (euid_arg == -1) + euid = (uid_t)-1; + else + euid = euid_arg; + if ((euid_arg != -1 && euid != euid_arg) || + (ruid_arg != -1 && ruid != ruid_arg)) { PyErr_SetString(PyExc_OverflowError, "user id too big"); return NULL; } @@ -4397,9 +4404,16 @@ gid_t rgid, egid; if (!PyArg_ParseTuple(args, "ll", &rgid_arg, &egid_arg)) return NULL; - rgid = rgid_arg; - egid = egid_arg; - if (egid != egid_arg || rgid != rgid_arg) { + if (rgid_arg == -1) + rgid = (gid_t)-1; /* let the compiler choose how -1 fits */ + else + rgid = rgid_arg; /* otherwise, assign from our long */ + if (egid_arg == -1) + egid = (gid_t)-1; + else + egid = egid_arg; + if ((egid_arg != -1 && egid != egid_arg) || + (rgid_arg != -1 && rgid != rgid_arg)) { PyErr_SetString(PyExc_OverflowError, "group id too big"); return NULL; } From python-checkins at python.org Mon Mar 1 07:01:02 2010 From: python-checkins at python.org (gregory.p.smith) Date: Mon, 1 Mar 2010 07:01:02 +0100 (CET) Subject: [Python-checkins] r78550 - python/trunk/Lib/test/test_thread.py Message-ID: <20100301060102.68953EE987@mail.python.org> Author: gregory.p.smith Date: Mon Mar 1 07:01:02 2010 New Revision: 78550 Log: Fix test to be skipped on windows. Modified: python/trunk/Lib/test/test_thread.py Modified: python/trunk/Lib/test/test_thread.py ============================================================================== --- python/trunk/Lib/test/test_thread.py (original) +++ python/trunk/Lib/test/test_thread.py Mon Mar 1 07:01:02 2010 @@ -201,11 +201,9 @@ def setUp(self): self.read_fd, self.write_fd = os.pipe() + @unittest.skipIf(sys.platform.startswith('win'), + "This test is only appropriate for POSIX-like systems.") def test_forkinthread(self): - if sys.platform.startswith('win'): - from test.test_support import TestSkipped - raise TestSkipped("This test is only appropriate for " - "POSIX-like systems.") def thread1(): try: pid = os.fork() # fork in a thread From python-checkins at python.org Mon Mar 1 07:03:45 2010 From: python-checkins at python.org (gregory.p.smith) Date: Mon, 1 Mar 2010 07:03:45 +0100 (CET) Subject: [Python-checkins] r78551 - in python/branches/release26-maint: Lib/test/test_thread.py Message-ID: <20100301060345.021BEEE987@mail.python.org> Author: gregory.p.smith Date: Mon Mar 1 07:03:44 2010 New Revision: 78551 Log: Merged revisions 78550 via svnmerge from svn+ssh://pythondev at svn.python.org/python/trunk ........ r78550 | gregory.p.smith | 2010-02-28 22:01:02 -0800 (Sun, 28 Feb 2010) | 2 lines Fix test to be skipped on windows. ........ Modified: python/branches/release26-maint/ (props changed) python/branches/release26-maint/Lib/test/test_thread.py Modified: python/branches/release26-maint/Lib/test/test_thread.py ============================================================================== --- python/branches/release26-maint/Lib/test/test_thread.py (original) +++ python/branches/release26-maint/Lib/test/test_thread.py Mon Mar 1 07:03:44 2010 @@ -174,11 +174,7 @@ def setUp(self): self.read_fd, self.write_fd = os.pipe() - def test_forkinthread(self): - if sys.platform.startswith('win'): - from test.test_support import TestSkipped - raise TestSkipped("This test is only appropriate for " - "POSIX-like systems.") + def _test_forkinthread(self): def thread1(): try: pid = os.fork() # fork in a thread @@ -196,6 +192,9 @@ self.assertEqual(os.read(self.read_fd, 2), "OK", "Unable to fork() in thread") + if sys.platform.startswith('win'): + test_forkinthread = _test_forkinthread + def tearDown(self): try: os.close(self.read_fd) From python-checkins at python.org Mon Mar 1 07:18:42 2010 From: python-checkins at python.org (gregory.p.smith) Date: Mon, 1 Mar 2010 07:18:42 +0100 (CET) Subject: [Python-checkins] r78552 - in python/branches/py3k: Lib/test/test_thread.py Misc/NEWS Modules/posixmodule.c Python/import.c Message-ID: <20100301061842.2CA8EEE9E6@mail.python.org> Author: gregory.p.smith Date: Mon Mar 1 07:18:41 2010 New Revision: 78552 Log: Merged revisions 78527,78550 via svnmerge from svn+ssh://pythondev at svn.python.org/python/trunk ........ r78527 | gregory.p.smith | 2010-02-28 17:22:39 -0800 (Sun, 28 Feb 2010) | 4 lines Issue #7242: On Solaris 9 and earlier calling os.fork() from within a thread could raise an incorrect RuntimeError about not holding the import lock. The import lock is now reinitialized after fork. ........ r78550 | gregory.p.smith | 2010-02-28 22:01:02 -0800 (Sun, 28 Feb 2010) | 2 lines Fix test to be skipped on windows. ........ Modified: python/branches/py3k/ (props changed) python/branches/py3k/Lib/test/test_thread.py python/branches/py3k/Misc/NEWS python/branches/py3k/Modules/posixmodule.c python/branches/py3k/Python/import.c Modified: python/branches/py3k/Lib/test/test_thread.py ============================================================================== --- python/branches/py3k/Lib/test/test_thread.py (original) +++ python/branches/py3k/Lib/test/test_thread.py Mon Mar 1 07:18:41 2010 @@ -4,6 +4,7 @@ from test import support import _thread as thread import time +import sys import weakref from test import lock_tests @@ -193,8 +194,47 @@ locktype = thread.allocate_lock +class TestForkInThread(unittest.TestCase): + def setUp(self): + self.read_fd, self.write_fd = os.pipe() + + @unittest.skipIf(sys.platform.startswith('win'), + "This test is only appropriate for POSIX-like systems.") + def test_forkinthread(self): + def thread1(): + try: + pid = os.fork() # fork in a thread + except RuntimeError: + os._exit(1) # exit the child + + if pid == 0: # child + try: + os.close(self.read_fd) + os.write(self.write_fd, b"OK") + finally: + os._exit(0) + else: # parent + os.close(self.write_fd) + + thread.start_new_thread(thread1, ()) + self.assertEqual(os.read(self.read_fd, 2), b"OK", + "Unable to fork() in thread") + + def tearDown(self): + try: + os.close(self.read_fd) + except OSError: + pass + + try: + os.close(self.write_fd) + except OSError: + pass + + def test_main(): - support.run_unittest(ThreadRunningTests, BarrierTest, LockTests) + support.run_unittest(ThreadRunningTests, BarrierTest, LockTests, + TestForkInThread) if __name__ == "__main__": test_main() Modified: python/branches/py3k/Misc/NEWS ============================================================================== --- python/branches/py3k/Misc/NEWS (original) +++ python/branches/py3k/Misc/NEWS Mon Mar 1 07:18:41 2010 @@ -751,6 +751,10 @@ - Expat: Fix DoS via XML document with malformed UTF-8 sequences (CVE_2009_3560). +- Issue #7242: On Solaris 9 and earlier calling os.fork() from within a + thread could raise an incorrect RuntimeError about not holding the import + lock. The import lock is now reinitialized after fork. + - Issue #7999: os.setreuid() and os.setregid() would refuse to accept a -1 parameter on some platforms such as OS X. Modified: python/branches/py3k/Modules/posixmodule.c ============================================================================== --- python/branches/py3k/Modules/posixmodule.c (original) +++ python/branches/py3k/Modules/posixmodule.c Mon Mar 1 07:18:41 2010 @@ -3723,14 +3723,18 @@ posix_fork1(PyObject *self, PyObject *noargs) { pid_t pid; - int result; + int result = 0; _PyImport_AcquireLock(); pid = fork1(); - result = _PyImport_ReleaseLock(); + if (pid == 0) { + /* child: this clobbers and resets the import lock. */ + PyOS_AfterFork(); + } else { + /* parent: release the import lock. */ + result = _PyImport_ReleaseLock(); + } if (pid == -1) return posix_error(); - if (pid == 0) - PyOS_AfterFork(); if (result < 0) { /* Don't clobber the OSError if the fork failed. */ PyErr_SetString(PyExc_RuntimeError, @@ -3752,14 +3756,18 @@ posix_fork(PyObject *self, PyObject *noargs) { pid_t pid; - int result; + int result = 0; _PyImport_AcquireLock(); pid = fork(); - result = _PyImport_ReleaseLock(); + if (pid == 0) { + /* child: this clobbers and resets the import lock. */ + PyOS_AfterFork(); + } else { + /* parent: release the import lock. */ + result = _PyImport_ReleaseLock(); + } if (pid == -1) return posix_error(); - if (pid == 0) - PyOS_AfterFork(); if (result < 0) { /* Don't clobber the OSError if the fork failed. */ PyErr_SetString(PyExc_RuntimeError, @@ -3877,11 +3885,12 @@ _PyImport_AcquireLock(); pid = forkpty(&master_fd, NULL, NULL, NULL); + if (pid == 0) + PyOS_AfterFork(); + result = _PyImport_ReleaseLock(); if (pid == -1) return posix_error(); - if (pid == 0) - PyOS_AfterFork(); if (result < 0) { /* Don't clobber the OSError if the fork failed. */ PyErr_SetString(PyExc_RuntimeError, Modified: python/branches/py3k/Python/import.c ============================================================================== --- python/branches/py3k/Python/import.c (original) +++ python/branches/py3k/Python/import.c Mon Mar 1 07:18:41 2010 @@ -295,14 +295,18 @@ return 1; } -/* This function used to be called from PyOS_AfterFork to ensure that newly - created child processes do not share locks with the parent, but for some - reason only on AIX systems. Instead of re-initializing the lock, we now - acquire the import lock around fork() calls. */ +/* This function is called from PyOS_AfterFork to ensure that newly + created child processes do not share locks with the parent. + We now acquire the import lock around fork() calls but on some platforms + (Solaris 9 and earlier? see isue7242) that still left us with problems. */ void _PyImport_ReInitLock(void) { + if (import_lock != NULL) + import_lock = PyThread_allocate_lock(); + import_lock_thread = -1; + import_lock_level = 0; } #endif From python-checkins at python.org Mon Mar 1 14:30:07 2010 From: python-checkins at python.org (barry.warsaw) Date: Mon, 1 Mar 2010 14:30:07 +0100 (CET) Subject: [Python-checkins] r78553 - peps/trunk/pep-3147.txt Message-ID: <20100301133007.BE81AEE9EA@mail.python.org> Author: barry.warsaw Date: Mon Mar 1 14:30:07 2010 New Revision: 78553 Log: Typo repair found by Ezio Melotti. Modified: peps/trunk/pep-3147.txt Modified: peps/trunk/pep-3147.txt ============================================================================== --- peps/trunk/pep-3147.txt (original) +++ peps/trunk/pep-3147.txt Mon Mar 1 14:30:07 2010 @@ -359,7 +359,7 @@ files, the `__cached__` attribute may point to whatever information makes sense. E.g. on Jython, this might be the `.class` file for the module: `__pycache__/foo.jython-32.class`. Some implementations may -use multiple files compiled files to create the module, in which case +use multiple compiled files to create the module, in which case `__cached__` may be a tuple. The exact contents of `__cached__` are Python implementation specific. @@ -482,8 +482,8 @@ Open issues =========== -bytecode-only packages ----------------------- +Byte code only packages +----------------------- Some users of Python distribute packages containing only the byte code files (pyc). The use cases for this are to make it more difficult for From python-checkins at python.org Mon Mar 1 14:37:42 2010 From: python-checkins at python.org (vinay.sajip) Date: Mon, 1 Mar 2010 14:37:42 +0100 (CET) Subject: [Python-checkins] r78554 - python/branches/release26-maint Message-ID: <20100301133742.16809EE98F@mail.python.org> Author: vinay.sajip Date: Mon Mar 1 14:37:41 2010 New Revision: 78554 Log: Blocked revisions 77967,77969,78033,78055,78081,78085,78108 via svnmerge ........ r77967 | vinay.sajip | 2010-02-04 18:48:53 +0000 (Thu, 04 Feb 2010) | 1 line Logging: Implemented PEP 391. ........ r77969 | vinay.sajip | 2010-02-04 20:18:28 +0000 (Thu, 04 Feb 2010) | 1 line Removed spurious print statement. ........ r78033 | benjamin.peterson | 2010-02-06 22:08:15 +0000 (Sat, 06 Feb 2010) | 1 line make waiting for the server to start robust ........ r78055 | vinay.sajip | 2010-02-07 01:37:08 +0000 (Sun, 07 Feb 2010) | 1 line Issue #7868: logging: added loggerClass attribute to Manager. ........ r78081 | vinay.sajip | 2010-02-07 12:56:54 +0000 (Sun, 07 Feb 2010) | 1 line Issue #7869: logging: improved format-time diagnostics and removed some 1.5.2 support code. ........ r78085 | vinay.sajip | 2010-02-07 13:06:51 +0000 (Sun, 07 Feb 2010) | 1 line logging: Removed some more 1.5.2 support code. ........ r78108 | vinay.sajip | 2010-02-08 21:18:15 +0000 (Mon, 08 Feb 2010) | 1 line logging: gingerly re-enabling skipped tests after improving thread sync code in configurator. ........ Modified: python/branches/release26-maint/ (props changed) From python-checkins at python.org Mon Mar 1 14:44:26 2010 From: python-checkins at python.org (vinay.sajip) Date: Mon, 1 Mar 2010 14:44:26 +0100 (CET) Subject: [Python-checkins] r78555 - python/branches/release31-maint Message-ID: <20100301134426.3C16BFE35@mail.python.org> Author: vinay.sajip Date: Mon Mar 1 14:44:26 2010 New Revision: 78555 Log: Initialized merge tracking via "svnmerge" with revisions "1-73578" from svn+ssh://pythondev at svn.python.org/python/branches/py3k Modified: python/branches/release31-maint/ (props changed) From python-checkins at python.org Mon Mar 1 18:04:46 2010 From: python-checkins at python.org (gregory.p.smith) Date: Mon, 1 Mar 2010 18:04:46 +0100 (CET) Subject: [Python-checkins] r78556 - in python/branches/py3k: Modules/posixmodule.c Message-ID: <20100301170446.1579AEE98B@mail.python.org> Author: gregory.p.smith Date: Mon Mar 1 18:04:45 2010 New Revision: 78556 Log: Merged revisions 78531 via svnmerge from svn+ssh://pythondev at svn.python.org/python/trunk ........ r78531 | gregory.p.smith | 2010-02-28 18:31:33 -0800 (Sun, 28 Feb 2010) | 2 lines Fix for r78527. It left out updating forkpty. ........ Modified: python/branches/py3k/ (props changed) python/branches/py3k/Modules/posixmodule.c Modified: python/branches/py3k/Modules/posixmodule.c ============================================================================== --- python/branches/py3k/Modules/posixmodule.c (original) +++ python/branches/py3k/Modules/posixmodule.c Mon Mar 1 18:04:45 2010 @@ -3880,15 +3880,18 @@ static PyObject * posix_forkpty(PyObject *self, PyObject *noargs) { - int master_fd = -1, result; + int master_fd = -1, result = 0; pid_t pid; _PyImport_AcquireLock(); pid = forkpty(&master_fd, NULL, NULL, NULL); - if (pid == 0) + if (pid == 0) { + /* child: this clobbers and resets the import lock. */ PyOS_AfterFork(); - - result = _PyImport_ReleaseLock(); + } else { + /* parent: release the import lock. */ + result = _PyImport_ReleaseLock(); + } if (pid == -1) return posix_error(); if (result < 0) { From python-checkins at python.org Mon Mar 1 18:43:44 2010 From: python-checkins at python.org (r.david.murray) Date: Mon, 1 Mar 2010 18:43:44 +0100 (CET) Subject: [Python-checkins] r78557 - python/branches/release31-maint Message-ID: <20100301174344.BED5ADA83@mail.python.org> Author: r.david.murray Date: Mon Mar 1 18:43:44 2010 New Revision: 78557 Log: Fix invalid svnmerge-integrated property edit from last commit. Modified: python/branches/release31-maint/ (props changed) From rdmurray at bitdance.com Mon Mar 1 18:52:08 2010 From: rdmurray at bitdance.com (R. David Murray) Date: Mon, 01 Mar 2010 12:52:08 -0500 Subject: [Python-checkins] r78555 - python/branches/release31-maint In-Reply-To: <20100301134426.3C16BFE35@mail.python.org> References: <20100301134426.3C16BFE35@mail.python.org> Message-ID: <20100301175208.30E891A75FF@kimball.webabinitio.net> On Mon, 01 Mar 2010 14:44:26 +0100, vinay.sajip wrote: > Author: vinay.sajip > Date: Mon Mar 1 14:44:26 2010 > New Revision: 78555 > > Log: > Initialized merge tracking via "svnmerge" with revisions "1-73578" from > svn+ssh://pythondev at svn.python.org/python/branches/py3k > > > Modified: > python/branches/release31-maint/ (props changed) Vinay, you don't need to initialize svnmerge on any of the active branches, that has already been done. I fixed the property on release31-maint. (I almost made that mistake when I first started using svnmerge, but Brett corrected me in time.) --David From python-checkins at python.org Mon Mar 1 20:14:16 2010 From: python-checkins at python.org (r.david.murray) Date: Mon, 1 Mar 2010 20:14:16 +0100 (CET) Subject: [Python-checkins] r78558 - python/trunk/Lib/bsddb/test/test_replication.py Message-ID: <20100301191416.C7373EE9CB@mail.python.org> Author: r.david.murray Date: Mon Mar 1 20:14:16 2010 New Revision: 78558 Log: Issue 3892 again. The bsddb3 replication test still fails randomly. Since this module is unmaintained in the library and gone in py3k, this patch skips the remainder of the replication test if a second timeout occurs, as it randomly does. This should improve buildbot stability. Modified: python/trunk/Lib/bsddb/test/test_replication.py Modified: python/trunk/Lib/bsddb/test/test_replication.py ============================================================================== --- python/trunk/Lib/bsddb/test/test_replication.py (original) +++ python/trunk/Lib/bsddb/test/test_replication.py Mon Mar 1 20:14:16 2010 @@ -119,24 +119,18 @@ timeout = time.time()+60 while (time.time()> sys.stderr, \ - "XXX - windows bsddb replication fails on windows and is skipped" - print >> sys.stderr, "XXX - Please see issue #3892" - # It also fails irregularly on other platforms, and again the - # rest of the tests pass. Since bsddb support is unmaintained, and - # is gone in py3k, we just emit a warning instead of a test failure - # so as to improve buildbot stability. - elif time.time()>timeout: - print >> sys.stderr, \ - "XXX - timeout before startup confirmed, see issue #3892." + # self.client_startupdone does not always get set to True within + # the timeout. On windows this may be a deep issue, on other + # platforms it is likely just a timing issue, especially on slow + # virthost buildbots (see issue 3892 for more). Even though + # the timeout triggers, the rest of this test method usually passes + # (but not all of it always, see below). So we just note the + # timeout on stderr and keep soldering on. + if time.time()>timeout: + import sys + print >> sys.stderr, ("XXX: timeout happened before" + "startup was confirmed - see issue 3892") + startup_timeout = True d = self.dbenvMaster.repmgr_site_list() self.assertEquals(len(d), 1) @@ -194,6 +188,14 @@ txn.commit() if v is None : time.sleep(0.02) + # If startup did not happen before the timeout above, then this test + # sometimes fails. This happens randomly, which causes buildbot + # instability, but all the other bsddb tests pass. Since bsddb3 in the + # stdlib is currently not getting active maintenance, and is gone in + # py3k, we just skip the end of the test in that case. + if time.time()>=timeout and startup_timeout: + self.skipTest("replication test skipped due to random failure, " + "see issue 3892") self.assertTrue(time.time() Author: andrew.kuchling Date: Mon Mar 1 20:45:21 2010 New Revision: 78559 Log: #7637: update discussion of minidom.unlink() and garbage collection Modified: python/trunk/Doc/library/xml.dom.minidom.rst Modified: python/trunk/Doc/library/xml.dom.minidom.rst ============================================================================== --- python/trunk/Doc/library/xml.dom.minidom.rst (original) +++ python/trunk/Doc/library/xml.dom.minidom.rst Mon Mar 1 20:45:21 2010 @@ -85,22 +85,12 @@ dom3 = parseString("Some data") assert dom3.documentElement.tagName == "myxml" -When you are finished with a DOM, you should clean it up. This is necessary -because some versions of Python do not support garbage collection of objects -that refer to each other in a cycle. Until this restriction is removed from all -versions of Python, it is safest to write your code as if cycles would not be -cleaned up. - -The way to clean up a DOM is to call its :meth:`unlink` method:: - - dom1.unlink() - dom2.unlink() - dom3.unlink() - -:meth:`unlink` is a :mod:`xml.dom.minidom`\ -specific extension to the DOM API. -After calling :meth:`unlink` on a node, the node and its descendants are -essentially useless. - +When you are finished with a DOM tree, you may optionally call the +:meth:`unlink` method to encourage early cleanup of the now-unneeded +objects. :meth:`unlink` is a :mod:`xml.dom.minidom`\ -specific +extension to the DOM API that renders the node and its descendants are +essentially useless. Otherwise, Python's garbage collector will +eventually take care of the objects in the tree. .. seealso:: From python-checkins at python.org Mon Mar 1 20:49:39 2010 From: python-checkins at python.org (r.david.murray) Date: Mon, 1 Mar 2010 20:49:39 +0100 (CET) Subject: [Python-checkins] r78560 - in python/branches/release26-maint: Lib/bsddb/test/test_replication.py Message-ID: <20100301194939.B266CEEA4F@mail.python.org> Author: r.david.murray Date: Mon Mar 1 20:49:39 2010 New Revision: 78560 Log: Merged revisions 78558 via svnmerge from svn+ssh://pythondev at svn.python.org/python/trunk ........ r78558 | r.david.murray | 2010-03-01 14:14:16 -0500 (Mon, 01 Mar 2010) | 6 lines Issue 3892 again. The bsddb3 replication test still fails randomly. Since this module is unmaintained in the library and gone in py3k, this patch skips the remainder of the replication test if a second timeout occurs, as it randomly does. This should improve buildbot stability. ........ Modified: python/branches/release26-maint/ (props changed) python/branches/release26-maint/Lib/bsddb/test/test_replication.py Modified: python/branches/release26-maint/Lib/bsddb/test/test_replication.py ============================================================================== --- python/branches/release26-maint/Lib/bsddb/test/test_replication.py (original) +++ python/branches/release26-maint/Lib/bsddb/test/test_replication.py Mon Mar 1 20:49:39 2010 @@ -119,24 +119,18 @@ timeout = time.time()+60 while (time.time()> sys.stderr, \ - "XXX - windows bsddb replication fails on windows and is skipped" - print >> sys.stderr, "XXX - Please see issue #3892" - # It also fails irregularly on other platforms, and again the - # rest of the tests pass. Since bsddb support is unmaintained, and - # is gone in py3k, we just emit a warning instead of a test failure - # so as to improve buildbot stability. - elif time.time()>timeout: - print >> sys.stderr, \ - "XXX - timeout before startup confirmed, see issue #3892." + # self.client_startupdone does not always get set to True within + # the timeout. On windows this may be a deep issue, on other + # platforms it is likely just a timing issue, especially on slow + # virthost buildbots (see issue 3892 for more). Even though + # the timeout triggers, the rest of this test method usually passes + # (but not all of it always, see below). So we just note the + # timeout on stderr and keep soldering on. + if time.time()>timeout: + import sys + print >> sys.stderr, ("XXX: timeout happened before" + "startup was confirmed - see issue 3892") + startup_timeout = True d = self.dbenvMaster.repmgr_site_list() self.assertEquals(len(d), 1) @@ -194,6 +188,14 @@ txn.commit() if v==None : time.sleep(0.02) + # If startup did not happen before the timeout above, then this test + # sometimes fails. This happens randomly, which causes buildbot + # instability, but all the other bsddb tests pass. Since bsddb3 in the + # stdlib is currently not getting active maintenance, and is gone in + # py3k, we just skip the end of the test in that case. + if time.time()>=timeout and startup_timeout: + self.skipTest("replication test skipped due to random failure, " + "see issue 3892") self.assertTrue(time.time() Author: andrew.kuchling Date: Mon Mar 1 20:51:43 2010 New Revision: 78561 Log: #7191: describe more details of wbits parameter Modified: python/trunk/Doc/library/zlib.rst Modified: python/trunk/Doc/library/zlib.rst ============================================================================== --- python/trunk/Doc/library/zlib.rst (original) +++ python/trunk/Doc/library/zlib.rst Mon Mar 1 20:51:43 2010 @@ -115,14 +115,18 @@ Decompresses the data in *string*, returning a string containing the uncompressed data. The *wbits* parameter controls the size of the window - buffer. If *bufsize* is given, it is used as the initial size of the output + buffer, and is discussed further below. + If *bufsize* is given, it is used as the initial size of the output buffer. Raises the :exc:`error` exception if any error occurs. The absolute value of *wbits* is the base two logarithm of the size of the history buffer (the "window size") used when compressing data. Its absolute value should be between 8 and 15 for the most recent versions of the zlib library, larger values resulting in better compression at the expense of greater - memory usage. The default value is 15. When *wbits* is negative, the standard + memory usage. When decompressing a stream, *wbits* must not be smaller + than the size originally used to compress the stream; using a too-small + value will result in an exception. The default value is therefore the + highest value, 15. When *wbits* is negative, the standard :program:`gzip` header is suppressed; this is an undocumented feature of the zlib library, used for compatibility with :program:`unzip`'s compression file format. From python-checkins at python.org Mon Mar 1 21:11:57 2010 From: python-checkins at python.org (andrew.kuchling) Date: Mon, 1 Mar 2010 21:11:57 +0100 (CET) Subject: [Python-checkins] r78562 - python/trunk/Doc/includes/minidom-example.py Message-ID: <20100301201157.5B93AEE99D@mail.python.org> Author: andrew.kuchling Date: Mon Mar 1 21:11:57 2010 New Revision: 78562 Log: #7637: avoid repeated-concatenation antipattern in example Modified: python/trunk/Doc/includes/minidom-example.py Modified: python/trunk/Doc/includes/minidom-example.py ============================================================================== --- python/trunk/Doc/includes/minidom-example.py (original) +++ python/trunk/Doc/includes/minidom-example.py Mon Mar 1 21:11:57 2010 @@ -19,11 +19,11 @@ dom = xml.dom.minidom.parseString(document) def getText(nodelist): - rc = "" + rc = [] for node in nodelist: if node.nodeType == node.TEXT_NODE: - rc = rc + node.data - return rc + rc.append(node.data) + return ''.join(rc) def handleSlideshow(slideshow): print "" From python-checkins at python.org Mon Mar 1 21:45:01 2010 From: python-checkins at python.org (florent.xicluna) Date: Mon, 1 Mar 2010 21:45:01 +0100 (CET) Subject: [Python-checkins] r78563 - in python/trunk: Lib/bsddb/test/test_compare.py Lib/bsddb/test/test_replication.py Misc/NEWS Modules/_bsddb.c Message-ID: <20100301204501.96E05EEA0D@mail.python.org> Author: florent.xicluna Date: Mon Mar 1 21:45:01 2010 New Revision: 78563 Log: #7808: Fix reference leaks in _bsddb and related tests. Modified: python/trunk/Lib/bsddb/test/test_compare.py python/trunk/Lib/bsddb/test/test_replication.py python/trunk/Misc/NEWS python/trunk/Modules/_bsddb.c Modified: python/trunk/Lib/bsddb/test/test_compare.py ============================================================================== --- python/trunk/Lib/bsddb/test/test_compare.py (original) +++ python/trunk/Lib/bsddb/test/test_compare.py Mon Mar 1 21:45:01 2010 @@ -193,6 +193,7 @@ errorOut = temp.getvalue() if not successRe.search(errorOut): self.fail("unexpected stderr output:\n"+errorOut) + sys.exc_traceback = sys.last_traceback = None def _test_compare_function_exception (self): self.startTest () Modified: python/trunk/Lib/bsddb/test/test_replication.py ============================================================================== --- python/trunk/Lib/bsddb/test/test_replication.py (original) +++ python/trunk/Lib/bsddb/test/test_replication.py Mon Mar 1 21:45:01 2010 @@ -4,6 +4,7 @@ import os import time import unittest +import weakref from test_all import db, test_support, have_threads, verbose, \ get_new_environment_path, get_new_database_path @@ -34,13 +35,16 @@ | db.DB_INIT_LOG | db.DB_INIT_MPOOL | db.DB_INIT_LOCK | db.DB_INIT_REP | db.DB_RECOVER | db.DB_THREAD, 0666) + wr = weakref.ref(self) self.confirmed_master=self.client_startupdone=False def confirmed_master(a,b,c) : if b==db.DB_EVENT_REP_MASTER : + self = wr() self.confirmed_master=True def client_startupdone(a,b,c) : if b==db.DB_EVENT_REP_STARTUPDONE : + self = wr() self.client_startupdone=True self.dbenvMaster.set_event_notify(confirmed_master) @@ -215,12 +219,15 @@ class DBBaseReplication(DBReplicationManager): def setUp(self) : DBReplicationManager.setUp(self) + wr = weakref.ref(self) def confirmed_master(a,b,c) : if (b == db.DB_EVENT_REP_MASTER) or (b == db.DB_EVENT_REP_ELECTED) : + self = wr() self.confirmed_master = True def client_startupdone(a,b,c) : if b == db.DB_EVENT_REP_STARTUPDONE : + self = wr() self.client_startupdone = True self.dbenvMaster.set_event_notify(confirmed_master) @@ -233,9 +240,11 @@ # There are only two nodes, so we don't need to # do any routing decision def m2c(dbenv, control, rec, lsnp, envid, flags) : + self = wr() self.m2c.put((control, rec)) def c2m(dbenv, control, rec, lsnp, envid, flags) : + self = wr() self.c2m.put((control, rec)) self.dbenvMaster.rep_set_transport(13,m2c) @@ -252,10 +261,12 @@ #self.dbenvClient.set_verbose(db.DB_VERB_FILEOPS_ALL, True) def thread_master() : + self = wr() return self.thread_do(self.dbenvMaster, self.c2m, 3, self.master_doing_election, True) def thread_client() : + self = wr() return self.thread_do(self.dbenvClient, self.m2c, 13, self.client_doing_election, False) @@ -408,6 +419,7 @@ break except db.DBRepUnavailError : pass + if not election_status[0] and not self.confirmed_master : from threading import Thread election_status[0] = True Modified: python/trunk/Misc/NEWS ============================================================================== --- python/trunk/Misc/NEWS (original) +++ python/trunk/Misc/NEWS Mon Mar 1 21:45:01 2010 @@ -35,7 +35,7 @@ Library ------- -- Issue #1729305: Fix doctest to handle encode error with "backsplashreplace". +- Issue #1729305: Fix doctest to handle encode error with "backslashreplace". - Issue #691291: codecs.open() should not convert end of lines on reading and writing. @@ -83,6 +83,8 @@ Extension Modules ----------------- +- Issue #7808: Fix reference leaks in _bsddb and related tests. + - Issue #6544: fix a reference leak in the kqueue implementation's error handling. Modified: python/trunk/Modules/_bsddb.c ============================================================================== --- python/trunk/Modules/_bsddb.c (original) +++ python/trunk/Modules/_bsddb.c Mon Mar 1 21:45:01 2010 @@ -2382,8 +2382,6 @@ args = BuildValue_SS(leftKey->data, leftKey->size, rightKey->data, rightKey->size); if (args != NULL) { - /* XXX(twouters) I highly doubt this INCREF is correct */ - Py_INCREF(self); result = PyEval_CallObject(self->btCompareCallback, args); } if (args == NULL || result == NULL) { @@ -2432,10 +2430,12 @@ if (result == NULL) return NULL; if (!NUMBER_Check(result)) { + Py_DECREF(result); PyErr_SetString(PyExc_TypeError, "callback MUST return an int"); return NULL; } else if (NUMBER_AsLong(result) != 0) { + Py_DECREF(result); PyErr_SetString(PyExc_TypeError, "callback failed to return 0 on two empty strings"); return NULL; @@ -5776,6 +5776,8 @@ free(listp); return NULL; } + Py_DECREF(key); + Py_DECREF(tuple); } free(listp); return stats; @@ -7578,4 +7580,3 @@ return PyInit__bsddb(); /* Note the two underscores */ #endif } - From python-checkins at python.org Mon Mar 1 22:08:22 2010 From: python-checkins at python.org (florent.xicluna) Date: Mon, 1 Mar 2010 22:08:22 +0100 (CET) Subject: [Python-checkins] r78564 - in python/branches/release26-maint: Lib/bsddb/test/test_compare.py Lib/bsddb/test/test_replication.py Misc/NEWS Modules/_bsddb.c Message-ID: <20100301210822.083C8EEA98@mail.python.org> Author: florent.xicluna Date: Mon Mar 1 22:08:21 2010 New Revision: 78564 Log: Merged revisions 78563 via svnmerge from svn+ssh://pythondev at svn.python.org/python/trunk ........ r78563 | florent.xicluna | 2010-03-01 21:45:01 +0100 (lun, 01 mar 2010) | 2 lines #7808: Fix reference leaks in _bsddb and related tests. ........ Modified: python/branches/release26-maint/ (props changed) python/branches/release26-maint/Lib/bsddb/test/test_compare.py python/branches/release26-maint/Lib/bsddb/test/test_replication.py python/branches/release26-maint/Misc/NEWS python/branches/release26-maint/Modules/_bsddb.c Modified: python/branches/release26-maint/Lib/bsddb/test/test_compare.py ============================================================================== --- python/branches/release26-maint/Lib/bsddb/test/test_compare.py (original) +++ python/branches/release26-maint/Lib/bsddb/test/test_compare.py Mon Mar 1 22:08:21 2010 @@ -193,6 +193,7 @@ errorOut = temp.getvalue() if not successRe.search(errorOut): self.fail("unexpected stderr output:\n"+errorOut) + sys.exc_traceback = sys.last_traceback = None def _test_compare_function_exception (self): self.startTest () Modified: python/branches/release26-maint/Lib/bsddb/test/test_replication.py ============================================================================== --- python/branches/release26-maint/Lib/bsddb/test/test_replication.py (original) +++ python/branches/release26-maint/Lib/bsddb/test/test_replication.py Mon Mar 1 22:08:21 2010 @@ -4,6 +4,7 @@ import os import time import unittest +import weakref from test_all import db, test_support, have_threads, verbose, \ get_new_environment_path, get_new_database_path @@ -34,13 +35,16 @@ | db.DB_INIT_LOG | db.DB_INIT_MPOOL | db.DB_INIT_LOCK | db.DB_INIT_REP | db.DB_RECOVER | db.DB_THREAD, 0666) + wr = weakref.ref(self) self.confirmed_master=self.client_startupdone=False def confirmed_master(a,b,c) : if b==db.DB_EVENT_REP_MASTER : + self = wr() self.confirmed_master=True def client_startupdone(a,b,c) : if b==db.DB_EVENT_REP_STARTUPDONE : + self = wr() self.client_startupdone=True self.dbenvMaster.set_event_notify(confirmed_master) @@ -215,12 +219,15 @@ class DBBaseReplication(DBReplicationManager): def setUp(self) : DBReplicationManager.setUp(self) + wr = weakref.ref(self) def confirmed_master(a,b,c) : if (b == db.DB_EVENT_REP_MASTER) or (b == db.DB_EVENT_REP_ELECTED) : + self = wr() self.confirmed_master = True def client_startupdone(a,b,c) : if b == db.DB_EVENT_REP_STARTUPDONE : + self = wr() self.client_startupdone = True self.dbenvMaster.set_event_notify(confirmed_master) @@ -233,9 +240,11 @@ # There are only two nodes, so we don't need to # do any routing decision def m2c(dbenv, control, rec, lsnp, envid, flags) : + self = wr() self.m2c.put((control, rec)) def c2m(dbenv, control, rec, lsnp, envid, flags) : + self = wr() self.c2m.put((control, rec)) self.dbenvMaster.rep_set_transport(13,m2c) @@ -252,10 +261,12 @@ #self.dbenvClient.set_verbose(db.DB_VERB_FILEOPS_ALL, True) def thread_master() : + self = wr() return self.thread_do(self.dbenvMaster, self.c2m, 3, self.master_doing_election, True) def thread_client() : + self = wr() return self.thread_do(self.dbenvClient, self.m2c, 13, self.client_doing_election, False) @@ -408,6 +419,7 @@ break except db.DBRepUnavailError : pass + if not election_status[0] and not self.confirmed_master : from threading import Thread election_status[0] = True Modified: python/branches/release26-maint/Misc/NEWS ============================================================================== --- python/branches/release26-maint/Misc/NEWS (original) +++ python/branches/release26-maint/Misc/NEWS Mon Mar 1 22:08:21 2010 @@ -241,6 +241,8 @@ Extension Modules ----------------- +- Issue #7808: Fix reference leaks in _bsddb and related tests. + - Stop providing crtassem.h symbols when compiling with Visual Studio 2010, as msvcr100.dll is not a platform assembly anymore. Modified: python/branches/release26-maint/Modules/_bsddb.c ============================================================================== --- python/branches/release26-maint/Modules/_bsddb.c (original) +++ python/branches/release26-maint/Modules/_bsddb.c Mon Mar 1 22:08:21 2010 @@ -2382,8 +2382,6 @@ args = BuildValue_SS(leftKey->data, leftKey->size, rightKey->data, rightKey->size); if (args != NULL) { - /* XXX(twouters) I highly doubt this INCREF is correct */ - Py_INCREF(self); result = PyEval_CallObject(self->btCompareCallback, args); } if (args == NULL || result == NULL) { @@ -2432,10 +2430,12 @@ if (result == NULL) return NULL; if (!NUMBER_Check(result)) { + Py_DECREF(result); PyErr_SetString(PyExc_TypeError, "callback MUST return an int"); return NULL; } else if (NUMBER_AsLong(result) != 0) { + Py_DECREF(result); PyErr_SetString(PyExc_TypeError, "callback failed to return 0 on two empty strings"); return NULL; @@ -5776,6 +5776,8 @@ free(listp); return NULL; } + Py_DECREF(key); + Py_DECREF(tuple); } free(listp); return stats; @@ -7578,4 +7580,3 @@ return PyInit__bsddb(); /* Note the two underscores */ #endif } - From python-checkins at python.org Mon Mar 1 22:34:34 2010 From: python-checkins at python.org (barry.warsaw) Date: Mon, 1 Mar 2010 22:34:34 +0100 (CET) Subject: [Python-checkins] r78565 - in python/branches/release26-maint: Lib/wsgiref/handlers.py Misc/NEWS Message-ID: <20100301213434.9C829EE9C4@mail.python.org> Author: barry.warsaw Date: Mon Mar 1 22:34:34 2010 New Revision: 78565 Log: Apply the change suggested by PJE for issue 7250. Unfortunately, we couldn't come up with a unit test. :( Modified: python/branches/release26-maint/Lib/wsgiref/handlers.py python/branches/release26-maint/Misc/NEWS Modified: python/branches/release26-maint/Lib/wsgiref/handlers.py ============================================================================== --- python/branches/release26-maint/Lib/wsgiref/handlers.py (original) +++ python/branches/release26-maint/Lib/wsgiref/handlers.py Mon Mar 1 22:34:34 2010 @@ -468,6 +468,10 @@ """ wsgi_run_once = True + # Do not allow os.environ to leak between requests in Google App Engine + # and other multi-run CGI use cases. This is not easily testable. + # See http://bugs.python.org/issue7250 + os_environ = {} def __init__(self): BaseCGIHandler.__init__( Modified: python/branches/release26-maint/Misc/NEWS ============================================================================== --- python/branches/release26-maint/Misc/NEWS (original) +++ python/branches/release26-maint/Misc/NEWS Mon Mar 1 22:34:34 2010 @@ -74,6 +74,9 @@ Library ------- +- Issue #7250: Fix info leak of os.environ across multi-run uses of + wsgiref.handlers.CGIHandler. + - Issue #1729305: Fix doctest to handle encode error with "backslashreplace". - Issue #691291: codecs.open() should not convert end of lines on reading and From python-checkins at python.org Mon Mar 1 22:46:51 2010 From: python-checkins at python.org (barry.warsaw) Date: Mon, 1 Mar 2010 22:46:51 +0100 (CET) Subject: [Python-checkins] r78566 - in python/trunk: Lib/wsgiref/handlers.py Misc/NEWS Message-ID: <20100301214651.4CEDBEEA9F@mail.python.org> Author: barry.warsaw Date: Mon Mar 1 22:46:51 2010 New Revision: 78566 Log: Manually copy patch for bug 7250 from the release26-maint branch. I suck because I did this in the wrong order and couldn't smack svnmerge into submission. Modified: python/trunk/Lib/wsgiref/handlers.py python/trunk/Misc/NEWS Modified: python/trunk/Lib/wsgiref/handlers.py ============================================================================== --- python/trunk/Lib/wsgiref/handlers.py (original) +++ python/trunk/Lib/wsgiref/handlers.py Mon Mar 1 22:46:51 2010 @@ -434,6 +434,10 @@ """ wsgi_run_once = True + # Do not allow os.environ to leak between requests in Google App Engine + # and other multi-run CGI use cases. This is not easily testable. + # See http://bugs.python.org/issue7250 + os_environ = {} def __init__(self): BaseCGIHandler.__init__( Modified: python/trunk/Misc/NEWS ============================================================================== --- python/trunk/Misc/NEWS (original) +++ python/trunk/Misc/NEWS Mon Mar 1 22:46:51 2010 @@ -35,6 +35,9 @@ Library ------- +- Issue #7250: Fix info leak of os.environ across multi-run uses of + wsgiref.handlers.CGIHandler. + - Issue #1729305: Fix doctest to handle encode error with "backslashreplace". - Issue #691291: codecs.open() should not convert end of lines on reading and From python-checkins at python.org Mon Mar 1 22:49:12 2010 From: python-checkins at python.org (barry.warsaw) Date: Mon, 1 Mar 2010 22:49:12 +0100 (CET) Subject: [Python-checkins] r78567 - python/branches/release26-maint Message-ID: <20100301214912.31817EE9B0@mail.python.org> Author: barry.warsaw Date: Mon Mar 1 22:49:12 2010 New Revision: 78567 Log: Blocked revisions 78566 via svnmerge ........ r78566 | barry.warsaw | 2010-03-01 16:46:51 -0500 (Mon, 01 Mar 2010) | 4 lines Manually copy patch for bug 7250 from the release26-maint branch. I suck because I did this in the wrong order and couldn't smack svnmerge into submission. ........ Modified: python/branches/release26-maint/ (props changed) From python-checkins at python.org Mon Mar 1 22:53:00 2010 From: python-checkins at python.org (barry.warsaw) Date: Mon, 1 Mar 2010 22:53:00 +0100 (CET) Subject: [Python-checkins] r78568 - in python/branches/py3k: Lib/wsgiref/handlers.py Misc/NEWS Message-ID: <20100301215300.82E53EE9B0@mail.python.org> Author: barry.warsaw Date: Mon Mar 1 22:53:00 2010 New Revision: 78568 Log: Manually copy patch for bug 7250 from the release26-maint branch. I suck because I did this in the wrong order and couldn't smack svnmerge into submission. Modified: python/branches/py3k/Lib/wsgiref/handlers.py python/branches/py3k/Misc/NEWS Modified: python/branches/py3k/Lib/wsgiref/handlers.py ============================================================================== --- python/branches/py3k/Lib/wsgiref/handlers.py (original) +++ python/branches/py3k/Lib/wsgiref/handlers.py Mon Mar 1 22:53:00 2010 @@ -431,6 +431,10 @@ """ wsgi_run_once = True + # Do not allow os.environ to leak between requests in Google App Engine + # and other multi-run CGI use cases. This is not easily testable. + # See http://bugs.python.org/issue7250 + os_environ = {} def __init__(self): BaseCGIHandler.__init__( Modified: python/branches/py3k/Misc/NEWS ============================================================================== --- python/branches/py3k/Misc/NEWS (original) +++ python/branches/py3k/Misc/NEWS Mon Mar 1 22:53:00 2010 @@ -262,6 +262,9 @@ Library ------- +- Issue #7250: Fix info leak of os.environ across multi-run uses of + wsgiref.handlers.CGIHandler. + - Issue #1729305: Fix doctest to handle encode error with "backslashreplace". - Issue #691291: codecs.open() should not convert end of lines on reading and From python-checkins at python.org Mon Mar 1 22:56:18 2010 From: python-checkins at python.org (barry.warsaw) Date: Mon, 1 Mar 2010 22:56:18 +0100 (CET) Subject: [Python-checkins] r78569 - in python/branches/release31-maint: Lib/wsgiref/handlers.py Misc/NEWS Message-ID: <20100301215618.459D1EEAB9@mail.python.org> Author: barry.warsaw Date: Mon Mar 1 22:56:18 2010 New Revision: 78569 Log: Manually copy patch for bug 7250 from the release26-maint branch. I suck because I did this in the wrong order and couldn't smack svnmerge into submission. Modified: python/branches/release31-maint/Lib/wsgiref/handlers.py python/branches/release31-maint/Misc/NEWS Modified: python/branches/release31-maint/Lib/wsgiref/handlers.py ============================================================================== --- python/branches/release31-maint/Lib/wsgiref/handlers.py (original) +++ python/branches/release31-maint/Lib/wsgiref/handlers.py Mon Mar 1 22:56:18 2010 @@ -465,6 +465,10 @@ """ wsgi_run_once = True + # Do not allow os.environ to leak between requests in Google App Engine + # and other multi-run CGI use cases. This is not easily testable. + # See http://bugs.python.org/issue7250 + os_environ = {} def __init__(self): BaseCGIHandler.__init__( Modified: python/branches/release31-maint/Misc/NEWS ============================================================================== --- python/branches/release31-maint/Misc/NEWS (original) +++ python/branches/release31-maint/Misc/NEWS Mon Mar 1 22:56:18 2010 @@ -94,6 +94,9 @@ Library ------- +- Issue #7250: Fix info leak of os.environ across multi-run uses of + wsgiref.handlers.CGIHandler. + - Issue #1729305: Fix doctest to handle encode error with "backslashreplace". - Issue #691291: codecs.open() should not convert end of lines on reading and From python-checkins at python.org Mon Mar 1 23:06:38 2010 From: python-checkins at python.org (barry.warsaw) Date: Mon, 1 Mar 2010 23:06:38 +0100 (CET) Subject: [Python-checkins] r78570 - python/branches/release26-maint/Lib/pydoc_topics.py Message-ID: <20100301220638.82F53EEA6E@mail.python.org> Author: barry.warsaw Date: Mon Mar 1 23:06:37 2010 New Revision: 78570 Log: Update doc topics Modified: python/branches/release26-maint/Lib/pydoc_topics.py Modified: python/branches/release26-maint/Lib/pydoc_topics.py ============================================================================== --- python/branches/release26-maint/Lib/pydoc_topics.py (original) +++ python/branches/release26-maint/Lib/pydoc_topics.py Mon Mar 1 23:06:37 2010 @@ -1,57 +1,57 @@ -# Autogenerated by Sphinx on Sun Oct 25 21:45:56 2009 -topics = {'assert': u'\nThe ``assert`` statement\n************************\n\nAssert statements are a convenient way to insert debugging assertions\ninto a program:\n\n assert_stmt ::= "assert" expression ["," expression]\n\nThe simple form, ``assert expression``, is equivalent to\n\n if __debug__:\n if not expression: raise AssertionError\n\nThe extended form, ``assert expression1, expression2``, is equivalent\nto\n\n if __debug__:\n if not expression1: raise AssertionError, expression2\n\nThese equivalences assume that ``__debug__`` and ``AssertionError``\nrefer to the built-in variables with those names. In the current\nimplementation, the built-in variable ``__debug__`` is ``True`` under\nnormal circumstances, ``False`` when optimization is requested\n(command line option -O). The current code generator emits no code\nfor an assert statement when optimization is requested at compile\ntime. Note that it is unnecessary to include the source code for the\nexpression that failed in the error message; it will be displayed as\npart of the stack trace.\n\nAssignments to ``__debug__`` are illegal. The value for the built-in\nvariable is determined when the interpreter starts.\n', - 'assignment': u'\nAssignment statements\n*********************\n\nAssignment statements are used to (re)bind names to values and to\nmodify attributes or items of mutable objects:\n\n assignment_stmt ::= (target_list "=")+ (expression_list | yield_expression)\n target_list ::= target ("," target)* [","]\n target ::= identifier\n | "(" target_list ")"\n | "[" target_list "]"\n | attributeref\n | subscription\n | slicing\n\n(See section *Primaries* for the syntax definitions for the last three\nsymbols.)\n\nAn assignment statement evaluates the expression list (remember that\nthis can be a single expression or a comma-separated list, the latter\nyielding a tuple) and assigns the single resulting object to each of\nthe target lists, from left to right.\n\nAssignment is defined recursively depending on the form of the target\n(list). When a target is part of a mutable object (an attribute\nreference, subscription or slicing), the mutable object must\nultimately perform the assignment and decide about its validity, and\nmay raise an exception if the assignment is unacceptable. The rules\nobserved by various types and the exceptions raised are given with the\ndefinition of the object types (see section *The standard type\nhierarchy*).\n\nAssignment of an object to a target list is recursively defined as\nfollows.\n\n* If the target list is a single target: The object is assigned to\n that target.\n\n* If the target list is a comma-separated list of targets: The object\n must be an iterable with the same number of items as there are\n targets in the target list, and the items are assigned, from left to\n right, to the corresponding targets. (This rule is relaxed as of\n Python 1.5; in earlier versions, the object had to be a tuple.\n Since strings are sequences, an assignment like ``a, b = "xy"`` is\n now legal as long as the string has the right length.)\n\nAssignment of an object to a single target is recursively defined as\nfollows.\n\n* If the target is an identifier (name):\n\n * If the name does not occur in a ``global`` statement in the\n current code block: the name is bound to the object in the current\n local namespace.\n\n * Otherwise: the name is bound to the object in the current global\n namespace.\n\n The name is rebound if it was already bound. This may cause the\n reference count for the object previously bound to the name to reach\n zero, causing the object to be deallocated and its destructor (if it\n has one) to be called.\n\n* If the target is a target list enclosed in parentheses or in square\n brackets: The object must be an iterable with the same number of\n items as there are targets in the target list, and its items are\n assigned, from left to right, to the corresponding targets.\n\n* If the target is an attribute reference: The primary expression in\n the reference is evaluated. It should yield an object with\n assignable attributes; if this is not the case, ``TypeError`` is\n raised. That object is then asked to assign the assigned object to\n the given attribute; if it cannot perform the assignment, it raises\n an exception (usually but not necessarily ``AttributeError``).\n\n* If the target is a subscription: The primary expression in the\n reference is evaluated. It should yield either a mutable sequence\n object (such as a list) or a mapping object (such as a dictionary).\n Next, the subscript expression is evaluated.\n\n If the primary is a mutable sequence object (such as a list), the\n subscript must yield a plain integer. If it is negative, the\n sequence\'s length is added to it. The resulting value must be a\n nonnegative integer less than the sequence\'s length, and the\n sequence is asked to assign the assigned object to its item with\n that index. If the index is out of range, ``IndexError`` is raised\n (assignment to a subscripted sequence cannot add new items to a\n list).\n\n If the primary is a mapping object (such as a dictionary), the\n subscript must have a type compatible with the mapping\'s key type,\n and the mapping is then asked to create a key/datum pair which maps\n the subscript to the assigned object. This can either replace an\n existing key/value pair with the same key value, or insert a new\n key/value pair (if no key with the same value existed).\n\n* If the target is a slicing: The primary expression in the reference\n is evaluated. It should yield a mutable sequence object (such as a\n list). The assigned object should be a sequence object of the same\n type. Next, the lower and upper bound expressions are evaluated,\n insofar they are present; defaults are zero and the sequence\'s\n length. The bounds should evaluate to (small) integers. If either\n bound is negative, the sequence\'s length is added to it. The\n resulting bounds are clipped to lie between zero and the sequence\'s\n length, inclusive. Finally, the sequence object is asked to replace\n the slice with the items of the assigned sequence. The length of\n the slice may be different from the length of the assigned sequence,\n thus changing the length of the target sequence, if the object\n allows it.\n\n(In the current implementation, the syntax for targets is taken to be\nthe same as for expressions, and invalid syntax is rejected during the\ncode generation phase, causing less detailed error messages.)\n\nWARNING: Although the definition of assignment implies that overlaps\nbetween the left-hand side and the right-hand side are \'safe\' (for\nexample ``a, b = b, a`` swaps two variables), overlaps *within* the\ncollection of assigned-to variables are not safe! For instance, the\nfollowing program prints ``[0, 2]``:\n\n x = [0, 1]\n i = 0\n i, x[i] = 1, 2\n print x\n\n\nAugmented assignment statements\n===============================\n\nAugmented assignment is the combination, in a single statement, of a\nbinary operation and an assignment statement:\n\n augmented_assignment_stmt ::= augtarget augop (expression_list | yield_expression)\n augtarget ::= identifier | attributeref | subscription | slicing\n augop ::= "+=" | "-=" | "*=" | "/=" | "//=" | "%=" | "**="\n | ">>=" | "<<=" | "&=" | "^=" | "|="\n\n(See section *Primaries* for the syntax definitions for the last three\nsymbols.)\n\nAn augmented assignment evaluates the target (which, unlike normal\nassignment statements, cannot be an unpacking) and the expression\nlist, performs the binary operation specific to the type of assignment\non the two operands, and assigns the result to the original target.\nThe target is only evaluated once.\n\nAn augmented assignment expression like ``x += 1`` can be rewritten as\n``x = x + 1`` to achieve a similar, but not exactly equal effect. In\nthe augmented version, ``x`` is only evaluated once. Also, when\npossible, the actual operation is performed *in-place*, meaning that\nrather than creating a new object and assigning that to the target,\nthe old object is modified instead.\n\nWith the exception of assigning to tuples and multiple targets in a\nsingle statement, the assignment done by augmented assignment\nstatements is handled the same way as normal assignments. Similarly,\nwith the exception of the possible *in-place* behavior, the binary\noperation performed by augmented assignment is the same as the normal\nbinary operations.\n\nFor targets which are attribute references, the initial value is\nretrieved with a ``getattr()`` and the result is assigned with a\n``setattr()``. Notice that the two methods do not necessarily refer\nto the same variable. When ``getattr()`` refers to a class variable,\n``setattr()`` still writes to an instance variable. For example:\n\n class A:\n x = 3 # class variable\n a = A()\n a.x += 1 # writes a.x as 4 leaving A.x as 3\n', +# Autogenerated by Sphinx on Mon Mar 1 17:02:30 2010 +topics = {'assert': u'\nThe ``assert`` statement\n************************\n\nAssert statements are a convenient way to insert debugging assertions\ninto a program:\n\n assert_stmt ::= "assert" expression ["," expression]\n\nThe simple form, ``assert expression``, is equivalent to\n\n if __debug__:\n if not expression: raise AssertionError\n\nThe extended form, ``assert expression1, expression2``, is equivalent\nto\n\n if __debug__:\n if not expression1: raise AssertionError(expression2)\n\nThese equivalences assume that ``__debug__`` and ``AssertionError``\nrefer to the built-in variables with those names. In the current\nimplementation, the built-in variable ``__debug__`` is ``True`` under\nnormal circumstances, ``False`` when optimization is requested\n(command line option -O). The current code generator emits no code\nfor an assert statement when optimization is requested at compile\ntime. Note that it is unnecessary to include the source code for the\nexpression that failed in the error message; it will be displayed as\npart of the stack trace.\n\nAssignments to ``__debug__`` are illegal. The value for the built-in\nvariable is determined when the interpreter starts.\n', + 'assignment': u'\nAssignment statements\n*********************\n\nAssignment statements are used to (re)bind names to values and to\nmodify attributes or items of mutable objects:\n\n assignment_stmt ::= (target_list "=")+ (expression_list | yield_expression)\n target_list ::= target ("," target)* [","]\n target ::= identifier\n | "(" target_list ")"\n | "[" target_list "]"\n | attributeref\n | subscription\n | slicing\n\n(See section *Primaries* for the syntax definitions for the last three\nsymbols.)\n\nAn assignment statement evaluates the expression list (remember that\nthis can be a single expression or a comma-separated list, the latter\nyielding a tuple) and assigns the single resulting object to each of\nthe target lists, from left to right.\n\nAssignment is defined recursively depending on the form of the target\n(list). When a target is part of a mutable object (an attribute\nreference, subscription or slicing), the mutable object must\nultimately perform the assignment and decide about its validity, and\nmay raise an exception if the assignment is unacceptable. The rules\nobserved by various types and the exceptions raised are given with the\ndefinition of the object types (see section *The standard type\nhierarchy*).\n\nAssignment of an object to a target list is recursively defined as\nfollows.\n\n* If the target list is a single target: The object is assigned to\n that target.\n\n* If the target list is a comma-separated list of targets: The object\n must be an iterable with the same number of items as there are\n targets in the target list, and the items are assigned, from left to\n right, to the corresponding targets. (This rule is relaxed as of\n Python 1.5; in earlier versions, the object had to be a tuple.\n Since strings are sequences, an assignment like ``a, b = "xy"`` is\n now legal as long as the string has the right length.)\n\nAssignment of an object to a single target is recursively defined as\nfollows.\n\n* If the target is an identifier (name):\n\n * If the name does not occur in a ``global`` statement in the\n current code block: the name is bound to the object in the current\n local namespace.\n\n * Otherwise: the name is bound to the object in the current global\n namespace.\n\n The name is rebound if it was already bound. This may cause the\n reference count for the object previously bound to the name to reach\n zero, causing the object to be deallocated and its destructor (if it\n has one) to be called.\n\n* If the target is a target list enclosed in parentheses or in square\n brackets: The object must be an iterable with the same number of\n items as there are targets in the target list, and its items are\n assigned, from left to right, to the corresponding targets.\n\n* If the target is an attribute reference: The primary expression in\n the reference is evaluated. It should yield an object with\n assignable attributes; if this is not the case, ``TypeError`` is\n raised. That object is then asked to assign the assigned object to\n the given attribute; if it cannot perform the assignment, it raises\n an exception (usually but not necessarily ``AttributeError``).\n\n Note: If the object is a class instance and the attribute reference\n occurs on both sides of the assignment operator, the RHS expression,\n ``a.x`` can access either an instance attribute or (if no instance\n attribute exists) a class attribute. The LHS target ``a.x`` is\n always set as an instance attribute, creating it if necessary.\n Thus, the two occurrences of ``a.x`` do not necessarily refer to the\n same attribute: if the RHS expression refers to a class attribute,\n the LHS creates a new instance attribute as the target of the\n assignment:\n\n class Cls:\n x = 3 # class variable\n inst = Cls()\n inst.x = inst.x + 1 # writes inst.x as 4 leaving Cls.x as 3\n\n This description does not necessarily apply to descriptor\n attributes, such as properties created with ``property()``.\n\n* If the target is a subscription: The primary expression in the\n reference is evaluated. It should yield either a mutable sequence\n object (such as a list) or a mapping object (such as a dictionary).\n Next, the subscript expression is evaluated.\n\n If the primary is a mutable sequence object (such as a list), the\n subscript must yield a plain integer. If it is negative, the\n sequence\'s length is added to it. The resulting value must be a\n nonnegative integer less than the sequence\'s length, and the\n sequence is asked to assign the assigned object to its item with\n that index. If the index is out of range, ``IndexError`` is raised\n (assignment to a subscripted sequence cannot add new items to a\n list).\n\n If the primary is a mapping object (such as a dictionary), the\n subscript must have a type compatible with the mapping\'s key type,\n and the mapping is then asked to create a key/datum pair which maps\n the subscript to the assigned object. This can either replace an\n existing key/value pair with the same key value, or insert a new\n key/value pair (if no key with the same value existed).\n\n* If the target is a slicing: The primary expression in the reference\n is evaluated. It should yield a mutable sequence object (such as a\n list). The assigned object should be a sequence object of the same\n type. Next, the lower and upper bound expressions are evaluated,\n insofar they are present; defaults are zero and the sequence\'s\n length. The bounds should evaluate to (small) integers. If either\n bound is negative, the sequence\'s length is added to it. The\n resulting bounds are clipped to lie between zero and the sequence\'s\n length, inclusive. Finally, the sequence object is asked to replace\n the slice with the items of the assigned sequence. The length of\n the slice may be different from the length of the assigned sequence,\n thus changing the length of the target sequence, if the object\n allows it.\n\n**CPython implementation detail:** In the current implementation, the\nsyntax for targets is taken to be the same as for expressions, and\ninvalid syntax is rejected during the code generation phase, causing\nless detailed error messages.\n\nWARNING: Although the definition of assignment implies that overlaps\nbetween the left-hand side and the right-hand side are \'safe\' (for\nexample ``a, b = b, a`` swaps two variables), overlaps *within* the\ncollection of assigned-to variables are not safe! For instance, the\nfollowing program prints ``[0, 2]``:\n\n x = [0, 1]\n i = 0\n i, x[i] = 1, 2\n print x\n\n\nAugmented assignment statements\n===============================\n\nAugmented assignment is the combination, in a single statement, of a\nbinary operation and an assignment statement:\n\n augmented_assignment_stmt ::= augtarget augop (expression_list | yield_expression)\n augtarget ::= identifier | attributeref | subscription | slicing\n augop ::= "+=" | "-=" | "*=" | "/=" | "//=" | "%=" | "**="\n | ">>=" | "<<=" | "&=" | "^=" | "|="\n\n(See section *Primaries* for the syntax definitions for the last three\nsymbols.)\n\nAn augmented assignment evaluates the target (which, unlike normal\nassignment statements, cannot be an unpacking) and the expression\nlist, performs the binary operation specific to the type of assignment\non the two operands, and assigns the result to the original target.\nThe target is only evaluated once.\n\nAn augmented assignment expression like ``x += 1`` can be rewritten as\n``x = x + 1`` to achieve a similar, but not exactly equal effect. In\nthe augmented version, ``x`` is only evaluated once. Also, when\npossible, the actual operation is performed *in-place*, meaning that\nrather than creating a new object and assigning that to the target,\nthe old object is modified instead.\n\nWith the exception of assigning to tuples and multiple targets in a\nsingle statement, the assignment done by augmented assignment\nstatements is handled the same way as normal assignments. Similarly,\nwith the exception of the possible *in-place* behavior, the binary\noperation performed by augmented assignment is the same as the normal\nbinary operations.\n\nFor targets which are attribute references, the same *caveat about\nclass and instance attributes* applies as for regular assignments.\n', 'atom-identifiers': u'\nIdentifiers (Names)\n*******************\n\nAn identifier occurring as an atom is a name. See section\n*Identifiers and keywords* for lexical definition and section *Naming\nand binding* for documentation of naming and binding.\n\nWhen the name is bound to an object, evaluation of the atom yields\nthat object. When a name is not bound, an attempt to evaluate it\nraises a ``NameError`` exception.\n\n**Private name mangling:** When an identifier that textually occurs in\na class definition begins with two or more underscore characters and\ndoes not end in two or more underscores, it is considered a *private\nname* of that class. Private names are transformed to a longer form\nbefore code is generated for them. The transformation inserts the\nclass name in front of the name, with leading underscores removed, and\na single underscore inserted in front of the class name. For example,\nthe identifier ``__spam`` occurring in a class named ``Ham`` will be\ntransformed to ``_Ham__spam``. This transformation is independent of\nthe syntactical context in which the identifier is used. If the\ntransformed name is extremely long (longer than 255 characters),\nimplementation defined truncation may happen. If the class name\nconsists only of underscores, no transformation is done.\n', 'atom-literals': u"\nLiterals\n********\n\nPython supports string literals and various numeric literals:\n\n literal ::= stringliteral | integer | longinteger\n | floatnumber | imagnumber\n\nEvaluation of a literal yields an object of the given type (string,\ninteger, long integer, floating point number, complex number) with the\ngiven value. The value may be approximated in the case of floating\npoint and imaginary (complex) literals. See section *Literals* for\ndetails.\n\nAll literals correspond to immutable data types, and hence the\nobject's identity is less important than its value. Multiple\nevaluations of literals with the same value (either the same\noccurrence in the program text or a different occurrence) may obtain\nthe same object or a different object with the same value.\n", - 'attribute-access': u'\nCustomizing attribute access\n****************************\n\nThe following methods can be defined to customize the meaning of\nattribute access (use of, assignment to, or deletion of ``x.name``)\nfor class instances.\n\nobject.__getattr__(self, name)\n\n Called when an attribute lookup has not found the attribute in the\n usual places (i.e. it is not an instance attribute nor is it found\n in the class tree for ``self``). ``name`` is the attribute name.\n This method should return the (computed) attribute value or raise\n an ``AttributeError`` exception.\n\n Note that if the attribute is found through the normal mechanism,\n ``__getattr__()`` is not called. (This is an intentional asymmetry\n between ``__getattr__()`` and ``__setattr__()``.) This is done both\n for efficiency reasons and because otherwise ``__getattr__()``\n would have no way to access other attributes of the instance. Note\n that at least for instance variables, you can fake total control by\n not inserting any values in the instance attribute dictionary (but\n instead inserting them in another object). See the\n ``__getattribute__()`` method below for a way to actually get total\n control in new-style classes.\n\nobject.__setattr__(self, name, value)\n\n Called when an attribute assignment is attempted. This is called\n instead of the normal mechanism (i.e. store the value in the\n instance dictionary). *name* is the attribute name, *value* is the\n value to be assigned to it.\n\n If ``__setattr__()`` wants to assign to an instance attribute, it\n should not simply execute ``self.name = value`` --- this would\n cause a recursive call to itself. Instead, it should insert the\n value in the dictionary of instance attributes, e.g.,\n ``self.__dict__[name] = value``. For new-style classes, rather\n than accessing the instance dictionary, it should call the base\n class method with the same name, for example,\n ``object.__setattr__(self, name, value)``.\n\nobject.__delattr__(self, name)\n\n Like ``__setattr__()`` but for attribute deletion instead of\n assignment. This should only be implemented if ``del obj.name`` is\n meaningful for the object.\n\n\nMore attribute access for new-style classes\n===========================================\n\nThe following methods only apply to new-style classes.\n\nobject.__getattribute__(self, name)\n\n Called unconditionally to implement attribute accesses for\n instances of the class. If the class also defines\n ``__getattr__()``, the latter will not be called unless\n ``__getattribute__()`` either calls it explicitly or raises an\n ``AttributeError``. This method should return the (computed)\n attribute value or raise an ``AttributeError`` exception. In order\n to avoid infinite recursion in this method, its implementation\n should always call the base class method with the same name to\n access any attributes it needs, for example,\n ``object.__getattribute__(self, name)``.\n\n Note: This method may still be bypassed when looking up special methods\n as the result of implicit invocation via language syntax or\n builtin functions. See *Special method lookup for new-style\n classes*.\n\n\nImplementing Descriptors\n========================\n\nThe following methods only apply when an instance of the class\ncontaining the method (a so-called *descriptor* class) appears in the\nclass dictionary of another new-style class, known as the *owner*\nclass. In the examples below, "the attribute" refers to the attribute\nwhose name is the key of the property in the owner class\'\n``__dict__``. Descriptors can only be implemented as new-style\nclasses themselves.\n\nobject.__get__(self, instance, owner)\n\n Called to get the attribute of the owner class (class attribute\n access) or of an instance of that class (instance attribute\n access). *owner* is always the owner class, while *instance* is the\n instance that the attribute was accessed through, or ``None`` when\n the attribute is accessed through the *owner*. This method should\n return the (computed) attribute value or raise an\n ``AttributeError`` exception.\n\nobject.__set__(self, instance, value)\n\n Called to set the attribute on an instance *instance* of the owner\n class to a new value, *value*.\n\nobject.__delete__(self, instance)\n\n Called to delete the attribute on an instance *instance* of the\n owner class.\n\n\nInvoking Descriptors\n====================\n\nIn general, a descriptor is an object attribute with "binding\nbehavior", one whose attribute access has been overridden by methods\nin the descriptor protocol: ``__get__()``, ``__set__()``, and\n``__delete__()``. If any of those methods are defined for an object,\nit is said to be a descriptor.\n\nThe default behavior for attribute access is to get, set, or delete\nthe attribute from an object\'s dictionary. For instance, ``a.x`` has a\nlookup chain starting with ``a.__dict__[\'x\']``, then\n``type(a).__dict__[\'x\']``, and continuing through the base classes of\n``type(a)`` excluding metaclasses.\n\nHowever, if the looked-up value is an object defining one of the\ndescriptor methods, then Python may override the default behavior and\ninvoke the descriptor method instead. Where this occurs in the\nprecedence chain depends on which descriptor methods were defined and\nhow they were called. Note that descriptors are only invoked for new\nstyle objects or classes (ones that subclass ``object()`` or\n``type()``).\n\nThe starting point for descriptor invocation is a binding, ``a.x``.\nHow the arguments are assembled depends on ``a``:\n\nDirect Call\n The simplest and least common call is when user code directly\n invokes a descriptor method: ``x.__get__(a)``.\n\nInstance Binding\n If binding to a new-style object instance, ``a.x`` is transformed\n into the call: ``type(a).__dict__[\'x\'].__get__(a, type(a))``.\n\nClass Binding\n If binding to a new-style class, ``A.x`` is transformed into the\n call: ``A.__dict__[\'x\'].__get__(None, A)``.\n\nSuper Binding\n If ``a`` is an instance of ``super``, then the binding ``super(B,\n obj).m()`` searches ``obj.__class__.__mro__`` for the base class\n ``A`` immediately preceding ``B`` and then invokes the descriptor\n with the call: ``A.__dict__[\'m\'].__get__(obj, A)``.\n\nFor instance bindings, the precedence of descriptor invocation depends\non the which descriptor methods are defined. Normally, data\ndescriptors define both ``__get__()`` and ``__set__()``, while non-\ndata descriptors have just the ``__get__()`` method. Data descriptors\nalways override a redefinition in an instance dictionary. In\ncontrast, non-data descriptors can be overridden by instances. [2]\n\nPython methods (including ``staticmethod()`` and ``classmethod()``)\nare implemented as non-data descriptors. Accordingly, instances can\nredefine and override methods. This allows individual instances to\nacquire behaviors that differ from other instances of the same class.\n\nThe ``property()`` function is implemented as a data descriptor.\nAccordingly, instances cannot override the behavior of a property.\n\n\n__slots__\n=========\n\nBy default, instances of both old and new-style classes have a\ndictionary for attribute storage. This wastes space for objects\nhaving very few instance variables. The space consumption can become\nacute when creating large numbers of instances.\n\nThe default can be overridden by defining *__slots__* in a new-style\nclass definition. The *__slots__* declaration takes a sequence of\ninstance variables and reserves just enough space in each instance to\nhold a value for each variable. Space is saved because *__dict__* is\nnot created for each instance.\n\n__slots__\n\n This class variable can be assigned a string, iterable, or sequence\n of strings with variable names used by instances. If defined in a\n new-style class, *__slots__* reserves space for the declared\n variables and prevents the automatic creation of *__dict__* and\n *__weakref__* for each instance.\n\n New in version 2.2.\n\nNotes on using *__slots__*\n\n* When inheriting from a class without *__slots__*, the *__dict__*\n attribute of that class will always be accessible, so a *__slots__*\n definition in the subclass is meaningless.\n\n* Without a *__dict__* variable, instances cannot be assigned new\n variables not listed in the *__slots__* definition. Attempts to\n assign to an unlisted variable name raises ``AttributeError``. If\n dynamic assignment of new variables is desired, then add\n ``\'__dict__\'`` to the sequence of strings in the *__slots__*\n declaration.\n\n Changed in version 2.3: Previously, adding ``\'__dict__\'`` to the\n *__slots__* declaration would not enable the assignment of new\n attributes not specifically listed in the sequence of instance\n variable names.\n\n* Without a *__weakref__* variable for each instance, classes defining\n *__slots__* do not support weak references to its instances. If weak\n reference support is needed, then add ``\'__weakref__\'`` to the\n sequence of strings in the *__slots__* declaration.\n\n Changed in version 2.3: Previously, adding ``\'__weakref__\'`` to the\n *__slots__* declaration would not enable support for weak\n references.\n\n* *__slots__* are implemented at the class level by creating\n descriptors (*Implementing Descriptors*) for each variable name. As\n a result, class attributes cannot be used to set default values for\n instance variables defined by *__slots__*; otherwise, the class\n attribute would overwrite the descriptor assignment.\n\n* If a class defines a slot also defined in a base class, the instance\n variable defined by the base class slot is inaccessible (except by\n retrieving its descriptor directly from the base class). This\n renders the meaning of the program undefined. In the future, a\n check may be added to prevent this.\n\n* The action of a *__slots__* declaration is limited to the class\n where it is defined. As a result, subclasses will have a *__dict__*\n unless they also define *__slots__*.\n\n* Nonempty *__slots__* does not work for classes derived from\n "variable-length" built-in types such as ``long``, ``str`` and\n ``tuple``.\n\n* Any non-string iterable may be assigned to *__slots__*. Mappings may\n also be used; however, in the future, special meaning may be\n assigned to the values corresponding to each key.\n\n* *__class__* assignment works only if both classes have the same\n *__slots__*.\n\n Changed in version 2.6: Previously, *__class__* assignment raised an\n error if either new or old class had *__slots__*.\n', + 'attribute-access': u'\nCustomizing attribute access\n****************************\n\nThe following methods can be defined to customize the meaning of\nattribute access (use of, assignment to, or deletion of ``x.name``)\nfor class instances.\n\nobject.__getattr__(self, name)\n\n Called when an attribute lookup has not found the attribute in the\n usual places (i.e. it is not an instance attribute nor is it found\n in the class tree for ``self``). ``name`` is the attribute name.\n This method should return the (computed) attribute value or raise\n an ``AttributeError`` exception.\n\n Note that if the attribute is found through the normal mechanism,\n ``__getattr__()`` is not called. (This is an intentional asymmetry\n between ``__getattr__()`` and ``__setattr__()``.) This is done both\n for efficiency reasons and because otherwise ``__getattr__()``\n would have no way to access other attributes of the instance. Note\n that at least for instance variables, you can fake total control by\n not inserting any values in the instance attribute dictionary (but\n instead inserting them in another object). See the\n ``__getattribute__()`` method below for a way to actually get total\n control in new-style classes.\n\nobject.__setattr__(self, name, value)\n\n Called when an attribute assignment is attempted. This is called\n instead of the normal mechanism (i.e. store the value in the\n instance dictionary). *name* is the attribute name, *value* is the\n value to be assigned to it.\n\n If ``__setattr__()`` wants to assign to an instance attribute, it\n should not simply execute ``self.name = value`` --- this would\n cause a recursive call to itself. Instead, it should insert the\n value in the dictionary of instance attributes, e.g.,\n ``self.__dict__[name] = value``. For new-style classes, rather\n than accessing the instance dictionary, it should call the base\n class method with the same name, for example,\n ``object.__setattr__(self, name, value)``.\n\nobject.__delattr__(self, name)\n\n Like ``__setattr__()`` but for attribute deletion instead of\n assignment. This should only be implemented if ``del obj.name`` is\n meaningful for the object.\n\n\nMore attribute access for new-style classes\n===========================================\n\nThe following methods only apply to new-style classes.\n\nobject.__getattribute__(self, name)\n\n Called unconditionally to implement attribute accesses for\n instances of the class. If the class also defines\n ``__getattr__()``, the latter will not be called unless\n ``__getattribute__()`` either calls it explicitly or raises an\n ``AttributeError``. This method should return the (computed)\n attribute value or raise an ``AttributeError`` exception. In order\n to avoid infinite recursion in this method, its implementation\n should always call the base class method with the same name to\n access any attributes it needs, for example,\n ``object.__getattribute__(self, name)``.\n\n Note: This method may still be bypassed when looking up special methods\n as the result of implicit invocation via language syntax or\n built-in functions. See *Special method lookup for new-style\n classes*.\n\n\nImplementing Descriptors\n========================\n\nThe following methods only apply when an instance of the class\ncontaining the method (a so-called *descriptor* class) appears in the\nclass dictionary of another new-style class, known as the *owner*\nclass. In the examples below, "the attribute" refers to the attribute\nwhose name is the key of the property in the owner class\'\n``__dict__``. Descriptors can only be implemented as new-style\nclasses themselves.\n\nobject.__get__(self, instance, owner)\n\n Called to get the attribute of the owner class (class attribute\n access) or of an instance of that class (instance attribute\n access). *owner* is always the owner class, while *instance* is the\n instance that the attribute was accessed through, or ``None`` when\n the attribute is accessed through the *owner*. This method should\n return the (computed) attribute value or raise an\n ``AttributeError`` exception.\n\nobject.__set__(self, instance, value)\n\n Called to set the attribute on an instance *instance* of the owner\n class to a new value, *value*.\n\nobject.__delete__(self, instance)\n\n Called to delete the attribute on an instance *instance* of the\n owner class.\n\n\nInvoking Descriptors\n====================\n\nIn general, a descriptor is an object attribute with "binding\nbehavior", one whose attribute access has been overridden by methods\nin the descriptor protocol: ``__get__()``, ``__set__()``, and\n``__delete__()``. If any of those methods are defined for an object,\nit is said to be a descriptor.\n\nThe default behavior for attribute access is to get, set, or delete\nthe attribute from an object\'s dictionary. For instance, ``a.x`` has a\nlookup chain starting with ``a.__dict__[\'x\']``, then\n``type(a).__dict__[\'x\']``, and continuing through the base classes of\n``type(a)`` excluding metaclasses.\n\nHowever, if the looked-up value is an object defining one of the\ndescriptor methods, then Python may override the default behavior and\ninvoke the descriptor method instead. Where this occurs in the\nprecedence chain depends on which descriptor methods were defined and\nhow they were called. Note that descriptors are only invoked for new\nstyle objects or classes (ones that subclass ``object()`` or\n``type()``).\n\nThe starting point for descriptor invocation is a binding, ``a.x``.\nHow the arguments are assembled depends on ``a``:\n\nDirect Call\n The simplest and least common call is when user code directly\n invokes a descriptor method: ``x.__get__(a)``.\n\nInstance Binding\n If binding to a new-style object instance, ``a.x`` is transformed\n into the call: ``type(a).__dict__[\'x\'].__get__(a, type(a))``.\n\nClass Binding\n If binding to a new-style class, ``A.x`` is transformed into the\n call: ``A.__dict__[\'x\'].__get__(None, A)``.\n\nSuper Binding\n If ``a`` is an instance of ``super``, then the binding ``super(B,\n obj).m()`` searches ``obj.__class__.__mro__`` for the base class\n ``A`` immediately preceding ``B`` and then invokes the descriptor\n with the call: ``A.__dict__[\'m\'].__get__(obj, A)``.\n\nFor instance bindings, the precedence of descriptor invocation depends\non the which descriptor methods are defined. Normally, data\ndescriptors define both ``__get__()`` and ``__set__()``, while non-\ndata descriptors have just the ``__get__()`` method. Data descriptors\nalways override a redefinition in an instance dictionary. In\ncontrast, non-data descriptors can be overridden by instances. [2]\n\nPython methods (including ``staticmethod()`` and ``classmethod()``)\nare implemented as non-data descriptors. Accordingly, instances can\nredefine and override methods. This allows individual instances to\nacquire behaviors that differ from other instances of the same class.\n\nThe ``property()`` function is implemented as a data descriptor.\nAccordingly, instances cannot override the behavior of a property.\n\n\n__slots__\n=========\n\nBy default, instances of both old and new-style classes have a\ndictionary for attribute storage. This wastes space for objects\nhaving very few instance variables. The space consumption can become\nacute when creating large numbers of instances.\n\nThe default can be overridden by defining *__slots__* in a new-style\nclass definition. The *__slots__* declaration takes a sequence of\ninstance variables and reserves just enough space in each instance to\nhold a value for each variable. Space is saved because *__dict__* is\nnot created for each instance.\n\n__slots__\n\n This class variable can be assigned a string, iterable, or sequence\n of strings with variable names used by instances. If defined in a\n new-style class, *__slots__* reserves space for the declared\n variables and prevents the automatic creation of *__dict__* and\n *__weakref__* for each instance.\n\n New in version 2.2.\n\nNotes on using *__slots__*\n\n* When inheriting from a class without *__slots__*, the *__dict__*\n attribute of that class will always be accessible, so a *__slots__*\n definition in the subclass is meaningless.\n\n* Without a *__dict__* variable, instances cannot be assigned new\n variables not listed in the *__slots__* definition. Attempts to\n assign to an unlisted variable name raises ``AttributeError``. If\n dynamic assignment of new variables is desired, then add\n ``\'__dict__\'`` to the sequence of strings in the *__slots__*\n declaration.\n\n Changed in version 2.3: Previously, adding ``\'__dict__\'`` to the\n *__slots__* declaration would not enable the assignment of new\n attributes not specifically listed in the sequence of instance\n variable names.\n\n* Without a *__weakref__* variable for each instance, classes defining\n *__slots__* do not support weak references to its instances. If weak\n reference support is needed, then add ``\'__weakref__\'`` to the\n sequence of strings in the *__slots__* declaration.\n\n Changed in version 2.3: Previously, adding ``\'__weakref__\'`` to the\n *__slots__* declaration would not enable support for weak\n references.\n\n* *__slots__* are implemented at the class level by creating\n descriptors (*Implementing Descriptors*) for each variable name. As\n a result, class attributes cannot be used to set default values for\n instance variables defined by *__slots__*; otherwise, the class\n attribute would overwrite the descriptor assignment.\n\n* The action of a *__slots__* declaration is limited to the class\n where it is defined. As a result, subclasses will have a *__dict__*\n unless they also define *__slots__* (which must only contain names\n of any *additional* slots).\n\n* If a class defines a slot also defined in a base class, the instance\n variable defined by the base class slot is inaccessible (except by\n retrieving its descriptor directly from the base class). This\n renders the meaning of the program undefined. In the future, a\n check may be added to prevent this.\n\n* Nonempty *__slots__* does not work for classes derived from\n "variable-length" built-in types such as ``long``, ``str`` and\n ``tuple``.\n\n* Any non-string iterable may be assigned to *__slots__*. Mappings may\n also be used; however, in the future, special meaning may be\n assigned to the values corresponding to each key.\n\n* *__class__* assignment works only if both classes have the same\n *__slots__*.\n\n Changed in version 2.6: Previously, *__class__* assignment raised an\n error if either new or old class had *__slots__*.\n', 'attribute-references': u'\nAttribute references\n********************\n\nAn attribute reference is a primary followed by a period and a name:\n\n attributeref ::= primary "." identifier\n\nThe primary must evaluate to an object of a type that supports\nattribute references, e.g., a module, list, or an instance. This\nobject is then asked to produce the attribute whose name is the\nidentifier. If this attribute is not available, the exception\n``AttributeError`` is raised. Otherwise, the type and value of the\nobject produced is determined by the object. Multiple evaluations of\nthe same attribute reference may yield different objects.\n', - 'augassign': u'\nAugmented assignment statements\n*******************************\n\nAugmented assignment is the combination, in a single statement, of a\nbinary operation and an assignment statement:\n\n augmented_assignment_stmt ::= augtarget augop (expression_list | yield_expression)\n augtarget ::= identifier | attributeref | subscription | slicing\n augop ::= "+=" | "-=" | "*=" | "/=" | "//=" | "%=" | "**="\n | ">>=" | "<<=" | "&=" | "^=" | "|="\n\n(See section *Primaries* for the syntax definitions for the last three\nsymbols.)\n\nAn augmented assignment evaluates the target (which, unlike normal\nassignment statements, cannot be an unpacking) and the expression\nlist, performs the binary operation specific to the type of assignment\non the two operands, and assigns the result to the original target.\nThe target is only evaluated once.\n\nAn augmented assignment expression like ``x += 1`` can be rewritten as\n``x = x + 1`` to achieve a similar, but not exactly equal effect. In\nthe augmented version, ``x`` is only evaluated once. Also, when\npossible, the actual operation is performed *in-place*, meaning that\nrather than creating a new object and assigning that to the target,\nthe old object is modified instead.\n\nWith the exception of assigning to tuples and multiple targets in a\nsingle statement, the assignment done by augmented assignment\nstatements is handled the same way as normal assignments. Similarly,\nwith the exception of the possible *in-place* behavior, the binary\noperation performed by augmented assignment is the same as the normal\nbinary operations.\n\nFor targets which are attribute references, the initial value is\nretrieved with a ``getattr()`` and the result is assigned with a\n``setattr()``. Notice that the two methods do not necessarily refer\nto the same variable. When ``getattr()`` refers to a class variable,\n``setattr()`` still writes to an instance variable. For example:\n\n class A:\n x = 3 # class variable\n a = A()\n a.x += 1 # writes a.x as 4 leaving A.x as 3\n', + 'augassign': u'\nAugmented assignment statements\n*******************************\n\nAugmented assignment is the combination, in a single statement, of a\nbinary operation and an assignment statement:\n\n augmented_assignment_stmt ::= augtarget augop (expression_list | yield_expression)\n augtarget ::= identifier | attributeref | subscription | slicing\n augop ::= "+=" | "-=" | "*=" | "/=" | "//=" | "%=" | "**="\n | ">>=" | "<<=" | "&=" | "^=" | "|="\n\n(See section *Primaries* for the syntax definitions for the last three\nsymbols.)\n\nAn augmented assignment evaluates the target (which, unlike normal\nassignment statements, cannot be an unpacking) and the expression\nlist, performs the binary operation specific to the type of assignment\non the two operands, and assigns the result to the original target.\nThe target is only evaluated once.\n\nAn augmented assignment expression like ``x += 1`` can be rewritten as\n``x = x + 1`` to achieve a similar, but not exactly equal effect. In\nthe augmented version, ``x`` is only evaluated once. Also, when\npossible, the actual operation is performed *in-place*, meaning that\nrather than creating a new object and assigning that to the target,\nthe old object is modified instead.\n\nWith the exception of assigning to tuples and multiple targets in a\nsingle statement, the assignment done by augmented assignment\nstatements is handled the same way as normal assignments. Similarly,\nwith the exception of the possible *in-place* behavior, the binary\noperation performed by augmented assignment is the same as the normal\nbinary operations.\n\nFor targets which are attribute references, the same *caveat about\nclass and instance attributes* applies as for regular assignments.\n', 'binary': u'\nBinary arithmetic operations\n****************************\n\nThe binary arithmetic operations have the conventional priority\nlevels. Note that some of these operations also apply to certain non-\nnumeric types. Apart from the power operator, there are only two\nlevels, one for multiplicative operators and one for additive\noperators:\n\n m_expr ::= u_expr | m_expr "*" u_expr | m_expr "//" u_expr | m_expr "/" u_expr\n | m_expr "%" u_expr\n a_expr ::= m_expr | a_expr "+" m_expr | a_expr "-" m_expr\n\nThe ``*`` (multiplication) operator yields the product of its\narguments. The arguments must either both be numbers, or one argument\nmust be an integer (plain or long) and the other must be a sequence.\nIn the former case, the numbers are converted to a common type and\nthen multiplied together. In the latter case, sequence repetition is\nperformed; a negative repetition factor yields an empty sequence.\n\nThe ``/`` (division) and ``//`` (floor division) operators yield the\nquotient of their arguments. The numeric arguments are first\nconverted to a common type. Plain or long integer division yields an\ninteger of the same type; the result is that of mathematical division\nwith the \'floor\' function applied to the result. Division by zero\nraises the ``ZeroDivisionError`` exception.\n\nThe ``%`` (modulo) operator yields the remainder from the division of\nthe first argument by the second. The numeric arguments are first\nconverted to a common type. A zero right argument raises the\n``ZeroDivisionError`` exception. The arguments may be floating point\nnumbers, e.g., ``3.14%0.7`` equals ``0.34`` (since ``3.14`` equals\n``4*0.7 + 0.34``.) The modulo operator always yields a result with\nthe same sign as its second operand (or zero); the absolute value of\nthe result is strictly smaller than the absolute value of the second\noperand [2].\n\nThe integer division and modulo operators are connected by the\nfollowing identity: ``x == (x/y)*y + (x%y)``. Integer division and\nmodulo are also connected with the built-in function ``divmod()``:\n``divmod(x, y) == (x/y, x%y)``. These identities don\'t hold for\nfloating point numbers; there similar identities hold approximately\nwhere ``x/y`` is replaced by ``floor(x/y)`` or ``floor(x/y) - 1`` [3].\n\nIn addition to performing the modulo operation on numbers, the ``%``\noperator is also overloaded by string and unicode objects to perform\nstring formatting (also known as interpolation). The syntax for string\nformatting is described in the Python Library Reference, section\n*String Formatting Operations*.\n\nDeprecated since version 2.3: The floor division operator, the modulo\noperator, and the ``divmod()`` function are no longer defined for\ncomplex numbers. Instead, convert to a floating point number using\nthe ``abs()`` function if appropriate.\n\nThe ``+`` (addition) operator yields the sum of its arguments. The\narguments must either both be numbers or both sequences of the same\ntype. In the former case, the numbers are converted to a common type\nand then added together. In the latter case, the sequences are\nconcatenated.\n\nThe ``-`` (subtraction) operator yields the difference of its\narguments. The numeric arguments are first converted to a common\ntype.\n', 'bitwise': u'\nBinary bitwise operations\n*************************\n\nEach of the three bitwise operations has a different priority level:\n\n and_expr ::= shift_expr | and_expr "&" shift_expr\n xor_expr ::= and_expr | xor_expr "^" and_expr\n or_expr ::= xor_expr | or_expr "|" xor_expr\n\nThe ``&`` operator yields the bitwise AND of its arguments, which must\nbe plain or long integers. The arguments are converted to a common\ntype.\n\nThe ``^`` operator yields the bitwise XOR (exclusive OR) of its\narguments, which must be plain or long integers. The arguments are\nconverted to a common type.\n\nThe ``|`` operator yields the bitwise (inclusive) OR of its arguments,\nwhich must be plain or long integers. The arguments are converted to\na common type.\n', 'bltin-code-objects': u'\nCode Objects\n************\n\nCode objects are used by the implementation to represent "pseudo-\ncompiled" executable Python code such as a function body. They differ\nfrom function objects because they don\'t contain a reference to their\nglobal execution environment. Code objects are returned by the built-\nin ``compile()`` function and can be extracted from function objects\nthrough their ``func_code`` attribute. See also the ``code`` module.\n\nA code object can be executed or evaluated by passing it (instead of a\nsource string) to the ``exec`` statement or the built-in ``eval()``\nfunction.\n\nSee *The standard type hierarchy* for more information.\n', 'bltin-ellipsis-object': u'\nThe Ellipsis Object\n*******************\n\nThis object is used by extended slice notation (see *Slicings*). It\nsupports no special operations. There is exactly one ellipsis object,\nnamed ``Ellipsis`` (a built-in name).\n\nIt is written as ``Ellipsis``.\n', - 'bltin-file-objects': u'\nFile Objects\n************\n\nFile objects are implemented using C\'s ``stdio`` package and can be\ncreated with the built-in ``open()`` function. File objects are also\nreturned by some other built-in functions and methods, such as\n``os.popen()`` and ``os.fdopen()`` and the ``makefile()`` method of\nsocket objects. Temporary files can be created using the ``tempfile``\nmodule, and high-level file operations such as copying, moving, and\ndeleting files and directories can be achieved with the ``shutil``\nmodule.\n\nWhen a file operation fails for an I/O-related reason, the exception\n``IOError`` is raised. This includes situations where the operation\nis not defined for some reason, like ``seek()`` on a tty device or\nwriting a file opened for reading.\n\nFiles have the following methods:\n\nfile.close()\n\n Close the file. A closed file cannot be read or written any more.\n Any operation which requires that the file be open will raise a\n ``ValueError`` after the file has been closed. Calling ``close()``\n more than once is allowed.\n\n As of Python 2.5, you can avoid having to call this method\n explicitly if you use the ``with`` statement. For example, the\n following code will automatically close *f* when the ``with`` block\n is exited:\n\n from __future__ import with_statement # This isn\'t required in Python 2.6\n\n with open("hello.txt") as f:\n for line in f:\n print line\n\n In older versions of Python, you would have needed to do this to\n get the same effect:\n\n f = open("hello.txt")\n try:\n for line in f:\n print line\n finally:\n f.close()\n\n Note: Not all "file-like" types in Python support use as a context\n manager for the ``with`` statement. If your code is intended to\n work with any file-like object, you can use the function\n ``contextlib.closing()`` instead of using the object directly.\n\nfile.flush()\n\n Flush the internal buffer, like ``stdio``\'s ``fflush()``. This may\n be a no-op on some file-like objects.\n\nfile.fileno()\n\n Return the integer "file descriptor" that is used by the underlying\n implementation to request I/O operations from the operating system.\n This can be useful for other, lower level interfaces that use file\n descriptors, such as the ``fcntl`` module or ``os.read()`` and\n friends.\n\n Note: File-like objects which do not have a real file descriptor should\n *not* provide this method!\n\nfile.isatty()\n\n Return ``True`` if the file is connected to a tty(-like) device,\n else ``False``.\n\n Note: If a file-like object is not associated with a real file, this\n method should *not* be implemented.\n\nfile.next()\n\n A file object is its own iterator, for example ``iter(f)`` returns\n *f* (unless *f* is closed). When a file is used as an iterator,\n typically in a ``for`` loop (for example, ``for line in f: print\n line``), the ``next()`` method is called repeatedly. This method\n returns the next input line, or raises ``StopIteration`` when EOF\n is hit when the file is open for reading (behavior is undefined\n when the file is open for writing). In order to make a ``for``\n loop the most efficient way of looping over the lines of a file (a\n very common operation), the ``next()`` method uses a hidden read-\n ahead buffer. As a consequence of using a read-ahead buffer,\n combining ``next()`` with other file methods (like ``readline()``)\n does not work right. However, using ``seek()`` to reposition the\n file to an absolute position will flush the read-ahead buffer.\n\n New in version 2.3.\n\nfile.read([size])\n\n Read at most *size* bytes from the file (less if the read hits EOF\n before obtaining *size* bytes). If the *size* argument is negative\n or omitted, read all data until EOF is reached. The bytes are\n returned as a string object. An empty string is returned when EOF\n is encountered immediately. (For certain files, like ttys, it\n makes sense to continue reading after an EOF is hit.) Note that\n this method may call the underlying C function ``fread()`` more\n than once in an effort to acquire as close to *size* bytes as\n possible. Also note that when in non-blocking mode, less data than\n was requested may be returned, even if no *size* parameter was\n given.\n\n Note: This function is simply a wrapper for the underlying ``fread()``\n C function, and will behave the same in corner cases, such as\n whether the EOF value is cached.\n\nfile.readline([size])\n\n Read one entire line from the file. A trailing newline character\n is kept in the string (but may be absent when a file ends with an\n incomplete line). [6] If the *size* argument is present and non-\n negative, it is a maximum byte count (including the trailing\n newline) and an incomplete line may be returned. An empty string is\n returned *only* when EOF is encountered immediately.\n\n Note: Unlike ``stdio``\'s ``fgets()``, the returned string contains null\n characters (``\'\\0\'``) if they occurred in the input.\n\nfile.readlines([sizehint])\n\n Read until EOF using ``readline()`` and return a list containing\n the lines thus read. If the optional *sizehint* argument is\n present, instead of reading up to EOF, whole lines totalling\n approximately *sizehint* bytes (possibly after rounding up to an\n internal buffer size) are read. Objects implementing a file-like\n interface may choose to ignore *sizehint* if it cannot be\n implemented, or cannot be implemented efficiently.\n\nfile.xreadlines()\n\n This method returns the same thing as ``iter(f)``.\n\n New in version 2.1.\n\n Deprecated since version 2.3: Use ``for line in file`` instead.\n\nfile.seek(offset[, whence])\n\n Set the file\'s current position, like ``stdio``\'s ``fseek()``. The\n *whence* argument is optional and defaults to ``os.SEEK_SET`` or\n ``0`` (absolute file positioning); other values are ``os.SEEK_CUR``\n or ``1`` (seek relative to the current position) and\n ``os.SEEK_END`` or ``2`` (seek relative to the file\'s end). There\n is no return value.\n\n For example, ``f.seek(2, os.SEEK_CUR)`` advances the position by\n two and ``f.seek(-3, os.SEEK_END)`` sets the position to the third\n to last.\n\n Note that if the file is opened for appending (mode ``\'a\'`` or\n ``\'a+\'``), any ``seek()`` operations will be undone at the next\n write. If the file is only opened for writing in append mode (mode\n ``\'a\'``), this method is essentially a no-op, but it remains useful\n for files opened in append mode with reading enabled (mode\n ``\'a+\'``). If the file is opened in text mode (without ``\'b\'``),\n only offsets returned by ``tell()`` are legal. Use of other\n offsets causes undefined behavior.\n\n Note that not all file objects are seekable.\n\n Changed in version 2.6: Passing float values as offset has been\n deprecated.\n\nfile.tell()\n\n Return the file\'s current position, like ``stdio``\'s ``ftell()``.\n\n Note: On Windows, ``tell()`` can return illegal values (after an\n ``fgets()``) when reading files with Unix-style line-endings. Use\n binary mode (``\'rb\'``) to circumvent this problem.\n\nfile.truncate([size])\n\n Truncate the file\'s size. If the optional *size* argument is\n present, the file is truncated to (at most) that size. The size\n defaults to the current position. The current file position is not\n changed. Note that if a specified size exceeds the file\'s current\n size, the result is platform-dependent: possibilities include that\n the file may remain unchanged, increase to the specified size as if\n zero-filled, or increase to the specified size with undefined new\n content. Availability: Windows, many Unix variants.\n\nfile.write(str)\n\n Write a string to the file. There is no return value. Due to\n buffering, the string may not actually show up in the file until\n the ``flush()`` or ``close()`` method is called.\n\nfile.writelines(sequence)\n\n Write a sequence of strings to the file. The sequence can be any\n iterable object producing strings, typically a list of strings.\n There is no return value. (The name is intended to match\n ``readlines()``; ``writelines()`` does not add line separators.)\n\nFiles support the iterator protocol. Each iteration returns the same\nresult as ``file.readline()``, and iteration ends when the\n``readline()`` method returns an empty string.\n\nFile objects also offer a number of other interesting attributes.\nThese are not required for file-like objects, but should be\nimplemented if they make sense for the particular object.\n\nfile.closed\n\n bool indicating the current state of the file object. This is a\n read-only attribute; the ``close()`` method changes the value. It\n may not be available on all file-like objects.\n\nfile.encoding\n\n The encoding that this file uses. When Unicode strings are written\n to a file, they will be converted to byte strings using this\n encoding. In addition, when the file is connected to a terminal,\n the attribute gives the encoding that the terminal is likely to use\n (that information might be incorrect if the user has misconfigured\n the terminal). The attribute is read-only and may not be present\n on all file-like objects. It may also be ``None``, in which case\n the file uses the system default encoding for converting Unicode\n strings.\n\n New in version 2.3.\n\nfile.errors\n\n The Unicode error handler used along with the encoding.\n\n New in version 2.6.\n\nfile.mode\n\n The I/O mode for the file. If the file was created using the\n ``open()`` built-in function, this will be the value of the *mode*\n parameter. This is a read-only attribute and may not be present on\n all file-like objects.\n\nfile.name\n\n If the file object was created using ``open()``, the name of the\n file. Otherwise, some string that indicates the source of the file\n object, of the form ``<...>``. This is a read-only attribute and\n may not be present on all file-like objects.\n\nfile.newlines\n\n If Python was built with the *--with-universal-newlines* option to\n **configure** (the default) this read-only attribute exists, and\n for files opened in universal newline read mode it keeps track of\n the types of newlines encountered while reading the file. The\n values it can take are ``\'\\r\'``, ``\'\\n\'``, ``\'\\r\\n\'``, ``None``\n (unknown, no newlines read yet) or a tuple containing all the\n newline types seen, to indicate that multiple newline conventions\n were encountered. For files not opened in universal newline read\n mode the value of this attribute will be ``None``.\n\nfile.softspace\n\n Boolean that indicates whether a space character needs to be\n printed before another value when using the ``print`` statement.\n Classes that are trying to simulate a file object should also have\n a writable ``softspace`` attribute, which should be initialized to\n zero. This will be automatic for most classes implemented in\n Python (care may be needed for objects that override attribute\n access); types implemented in C will have to provide a writable\n ``softspace`` attribute.\n\n Note: This attribute is not used to control the ``print`` statement,\n but to allow the implementation of ``print`` to keep track of its\n internal state.\n', + 'bltin-file-objects': u'\nFile Objects\n************\n\nFile objects are implemented using C\'s ``stdio`` package and can be\ncreated with the built-in ``open()`` function. File objects are also\nreturned by some other built-in functions and methods, such as\n``os.popen()`` and ``os.fdopen()`` and the ``makefile()`` method of\nsocket objects. Temporary files can be created using the ``tempfile``\nmodule, and high-level file operations such as copying, moving, and\ndeleting files and directories can be achieved with the ``shutil``\nmodule.\n\nWhen a file operation fails for an I/O-related reason, the exception\n``IOError`` is raised. This includes situations where the operation\nis not defined for some reason, like ``seek()`` on a tty device or\nwriting a file opened for reading.\n\nFiles have the following methods:\n\nfile.close()\n\n Close the file. A closed file cannot be read or written any more.\n Any operation which requires that the file be open will raise a\n ``ValueError`` after the file has been closed. Calling ``close()``\n more than once is allowed.\n\n As of Python 2.5, you can avoid having to call this method\n explicitly if you use the ``with`` statement. For example, the\n following code will automatically close *f* when the ``with`` block\n is exited:\n\n from __future__ import with_statement # This isn\'t required in Python 2.6\n\n with open("hello.txt") as f:\n for line in f:\n print line\n\n In older versions of Python, you would have needed to do this to\n get the same effect:\n\n f = open("hello.txt")\n try:\n for line in f:\n print line\n finally:\n f.close()\n\n Note: Not all "file-like" types in Python support use as a context\n manager for the ``with`` statement. If your code is intended to\n work with any file-like object, you can use the function\n ``contextlib.closing()`` instead of using the object directly.\n\nfile.flush()\n\n Flush the internal buffer, like ``stdio``\'s ``fflush()``. This may\n be a no-op on some file-like objects.\n\n Note: ``flush()`` does not necessarily write the file\'s data to disk.\n Use ``flush()`` followed by ``os.fsync()`` to ensure this\n behavior.\n\nfile.fileno()\n\n Return the integer "file descriptor" that is used by the underlying\n implementation to request I/O operations from the operating system.\n This can be useful for other, lower level interfaces that use file\n descriptors, such as the ``fcntl`` module or ``os.read()`` and\n friends.\n\n Note: File-like objects which do not have a real file descriptor should\n *not* provide this method!\n\nfile.isatty()\n\n Return ``True`` if the file is connected to a tty(-like) device,\n else ``False``.\n\n Note: If a file-like object is not associated with a real file, this\n method should *not* be implemented.\n\nfile.next()\n\n A file object is its own iterator, for example ``iter(f)`` returns\n *f* (unless *f* is closed). When a file is used as an iterator,\n typically in a ``for`` loop (for example, ``for line in f: print\n line``), the ``next()`` method is called repeatedly. This method\n returns the next input line, or raises ``StopIteration`` when EOF\n is hit when the file is open for reading (behavior is undefined\n when the file is open for writing). In order to make a ``for``\n loop the most efficient way of looping over the lines of a file (a\n very common operation), the ``next()`` method uses a hidden read-\n ahead buffer. As a consequence of using a read-ahead buffer,\n combining ``next()`` with other file methods (like ``readline()``)\n does not work right. However, using ``seek()`` to reposition the\n file to an absolute position will flush the read-ahead buffer.\n\n New in version 2.3.\n\nfile.read([size])\n\n Read at most *size* bytes from the file (less if the read hits EOF\n before obtaining *size* bytes). If the *size* argument is negative\n or omitted, read all data until EOF is reached. The bytes are\n returned as a string object. An empty string is returned when EOF\n is encountered immediately. (For certain files, like ttys, it\n makes sense to continue reading after an EOF is hit.) Note that\n this method may call the underlying C function ``fread()`` more\n than once in an effort to acquire as close to *size* bytes as\n possible. Also note that when in non-blocking mode, less data than\n was requested may be returned, even if no *size* parameter was\n given.\n\n Note: This function is simply a wrapper for the underlying ``fread()``\n C function, and will behave the same in corner cases, such as\n whether the EOF value is cached.\n\nfile.readline([size])\n\n Read one entire line from the file. A trailing newline character\n is kept in the string (but may be absent when a file ends with an\n incomplete line). [6] If the *size* argument is present and non-\n negative, it is a maximum byte count (including the trailing\n newline) and an incomplete line may be returned. An empty string is\n returned *only* when EOF is encountered immediately.\n\n Note: Unlike ``stdio``\'s ``fgets()``, the returned string contains null\n characters (``\'\\0\'``) if they occurred in the input.\n\nfile.readlines([sizehint])\n\n Read until EOF using ``readline()`` and return a list containing\n the lines thus read. If the optional *sizehint* argument is\n present, instead of reading up to EOF, whole lines totalling\n approximately *sizehint* bytes (possibly after rounding up to an\n internal buffer size) are read. Objects implementing a file-like\n interface may choose to ignore *sizehint* if it cannot be\n implemented, or cannot be implemented efficiently.\n\nfile.xreadlines()\n\n This method returns the same thing as ``iter(f)``.\n\n New in version 2.1.\n\n Deprecated since version 2.3: Use ``for line in file`` instead.\n\nfile.seek(offset[, whence])\n\n Set the file\'s current position, like ``stdio``\'s ``fseek()``. The\n *whence* argument is optional and defaults to ``os.SEEK_SET`` or\n ``0`` (absolute file positioning); other values are ``os.SEEK_CUR``\n or ``1`` (seek relative to the current position) and\n ``os.SEEK_END`` or ``2`` (seek relative to the file\'s end). There\n is no return value.\n\n For example, ``f.seek(2, os.SEEK_CUR)`` advances the position by\n two and ``f.seek(-3, os.SEEK_END)`` sets the position to the third\n to last.\n\n Note that if the file is opened for appending (mode ``\'a\'`` or\n ``\'a+\'``), any ``seek()`` operations will be undone at the next\n write. If the file is only opened for writing in append mode (mode\n ``\'a\'``), this method is essentially a no-op, but it remains useful\n for files opened in append mode with reading enabled (mode\n ``\'a+\'``). If the file is opened in text mode (without ``\'b\'``),\n only offsets returned by ``tell()`` are legal. Use of other\n offsets causes undefined behavior.\n\n Note that not all file objects are seekable.\n\n Changed in version 2.6: Passing float values as offset has been\n deprecated.\n\nfile.tell()\n\n Return the file\'s current position, like ``stdio``\'s ``ftell()``.\n\n Note: On Windows, ``tell()`` can return illegal values (after an\n ``fgets()``) when reading files with Unix-style line-endings. Use\n binary mode (``\'rb\'``) to circumvent this problem.\n\nfile.truncate([size])\n\n Truncate the file\'s size. If the optional *size* argument is\n present, the file is truncated to (at most) that size. The size\n defaults to the current position. The current file position is not\n changed. Note that if a specified size exceeds the file\'s current\n size, the result is platform-dependent: possibilities include that\n the file may remain unchanged, increase to the specified size as if\n zero-filled, or increase to the specified size with undefined new\n content. Availability: Windows, many Unix variants.\n\nfile.write(str)\n\n Write a string to the file. There is no return value. Due to\n buffering, the string may not actually show up in the file until\n the ``flush()`` or ``close()`` method is called.\n\nfile.writelines(sequence)\n\n Write a sequence of strings to the file. The sequence can be any\n iterable object producing strings, typically a list of strings.\n There is no return value. (The name is intended to match\n ``readlines()``; ``writelines()`` does not add line separators.)\n\nFiles support the iterator protocol. Each iteration returns the same\nresult as ``file.readline()``, and iteration ends when the\n``readline()`` method returns an empty string.\n\nFile objects also offer a number of other interesting attributes.\nThese are not required for file-like objects, but should be\nimplemented if they make sense for the particular object.\n\nfile.closed\n\n bool indicating the current state of the file object. This is a\n read-only attribute; the ``close()`` method changes the value. It\n may not be available on all file-like objects.\n\nfile.encoding\n\n The encoding that this file uses. When Unicode strings are written\n to a file, they will be converted to byte strings using this\n encoding. In addition, when the file is connected to a terminal,\n the attribute gives the encoding that the terminal is likely to use\n (that information might be incorrect if the user has misconfigured\n the terminal). The attribute is read-only and may not be present\n on all file-like objects. It may also be ``None``, in which case\n the file uses the system default encoding for converting Unicode\n strings.\n\n New in version 2.3.\n\nfile.errors\n\n The Unicode error handler used along with the encoding.\n\n New in version 2.6.\n\nfile.mode\n\n The I/O mode for the file. If the file was created using the\n ``open()`` built-in function, this will be the value of the *mode*\n parameter. This is a read-only attribute and may not be present on\n all file-like objects.\n\nfile.name\n\n If the file object was created using ``open()``, the name of the\n file. Otherwise, some string that indicates the source of the file\n object, of the form ``<...>``. This is a read-only attribute and\n may not be present on all file-like objects.\n\nfile.newlines\n\n If Python was built with the *--with-universal-newlines* option to\n **configure** (the default) this read-only attribute exists, and\n for files opened in universal newline read mode it keeps track of\n the types of newlines encountered while reading the file. The\n values it can take are ``\'\\r\'``, ``\'\\n\'``, ``\'\\r\\n\'``, ``None``\n (unknown, no newlines read yet) or a tuple containing all the\n newline types seen, to indicate that multiple newline conventions\n were encountered. For files not opened in universal newline read\n mode the value of this attribute will be ``None``.\n\nfile.softspace\n\n Boolean that indicates whether a space character needs to be\n printed before another value when using the ``print`` statement.\n Classes that are trying to simulate a file object should also have\n a writable ``softspace`` attribute, which should be initialized to\n zero. This will be automatic for most classes implemented in\n Python (care may be needed for objects that override attribute\n access); types implemented in C will have to provide a writable\n ``softspace`` attribute.\n\n Note: This attribute is not used to control the ``print`` statement,\n but to allow the implementation of ``print`` to keep track of its\n internal state.\n', 'bltin-null-object': u"\nThe Null Object\n***************\n\nThis object is returned by functions that don't explicitly return a\nvalue. It supports no special operations. There is exactly one null\nobject, named ``None`` (a built-in name).\n\nIt is written as ``None``.\n", 'bltin-type-objects': u"\nType Objects\n************\n\nType objects represent the various object types. An object's type is\naccessed by the built-in function ``type()``. There are no special\noperations on types. The standard module ``types`` defines names for\nall standard built-in types.\n\nTypes are written like this: ````.\n", 'booleans': u'\nBoolean operations\n******************\n\nBoolean operations have the lowest priority of all Python operations:\n\n expression ::= conditional_expression | lambda_form\n old_expression ::= or_test | old_lambda_form\n conditional_expression ::= or_test ["if" or_test "else" expression]\n or_test ::= and_test | or_test "or" and_test\n and_test ::= not_test | and_test "and" not_test\n not_test ::= comparison | "not" not_test\n\nIn the context of Boolean operations, and also when expressions are\nused by control flow statements, the following values are interpreted\nas false: ``False``, ``None``, numeric zero of all types, and empty\nstrings and containers (including strings, tuples, lists,\ndictionaries, sets and frozensets). All other values are interpreted\nas true. (See the ``__nonzero__()`` special method for a way to\nchange this.)\n\nThe operator ``not`` yields ``True`` if its argument is false,\n``False`` otherwise.\n\nThe expression ``x if C else y`` first evaluates *C* (*not* *x*); if\n*C* is true, *x* is evaluated and its value is returned; otherwise,\n*y* is evaluated and its value is returned.\n\nNew in version 2.5.\n\nThe expression ``x and y`` first evaluates *x*; if *x* is false, its\nvalue is returned; otherwise, *y* is evaluated and the resulting value\nis returned.\n\nThe expression ``x or y`` first evaluates *x*; if *x* is true, its\nvalue is returned; otherwise, *y* is evaluated and the resulting value\nis returned.\n\n(Note that neither ``and`` nor ``or`` restrict the value and type they\nreturn to ``False`` and ``True``, but rather return the last evaluated\nargument. This is sometimes useful, e.g., if ``s`` is a string that\nshould be replaced by a default value if it is empty, the expression\n``s or \'foo\'`` yields the desired value. Because ``not`` has to\ninvent a value anyway, it does not bother to return a value of the\nsame type as its argument, so e.g., ``not \'foo\'`` yields ``False``,\nnot ``\'\'``.)\n', 'break': u'\nThe ``break`` statement\n***********************\n\n break_stmt ::= "break"\n\n``break`` may only occur syntactically nested in a ``for`` or\n``while`` loop, but not nested in a function or class definition\nwithin that loop.\n\nIt terminates the nearest enclosing loop, skipping the optional\n``else`` clause if the loop has one.\n\nIf a ``for`` loop is terminated by ``break``, the loop control target\nkeeps its current value.\n\nWhen ``break`` passes control out of a ``try`` statement with a\n``finally`` clause, that ``finally`` clause is executed before really\nleaving the loop.\n', 'callable-types': u'\nEmulating callable objects\n**************************\n\nobject.__call__(self[, args...])\n\n Called when the instance is "called" as a function; if this method\n is defined, ``x(arg1, arg2, ...)`` is a shorthand for\n ``x.__call__(arg1, arg2, ...)``.\n', - 'calls': u'\nCalls\n*****\n\nA call calls a callable object (e.g., a function) with a possibly\nempty series of arguments:\n\n call ::= primary "(" [argument_list [","]\n | expression genexpr_for] ")"\n argument_list ::= positional_arguments ["," keyword_arguments]\n ["," "*" expression] ["," keyword_arguments]\n ["," "**" expression]\n | keyword_arguments ["," "*" expression]\n ["," "**" expression]\n | "*" expression ["," "*" expression] ["," "**" expression]\n | "**" expression\n positional_arguments ::= expression ("," expression)*\n keyword_arguments ::= keyword_item ("," keyword_item)*\n keyword_item ::= identifier "=" expression\n\nA trailing comma may be present after the positional and keyword\narguments but does not affect the semantics.\n\nThe primary must evaluate to a callable object (user-defined\nfunctions, built-in functions, methods of built-in objects, class\nobjects, methods of class instances, and certain class instances\nthemselves are callable; extensions may define additional callable\nobject types). All argument expressions are evaluated before the call\nis attempted. Please refer to section *Function definitions* for the\nsyntax of formal parameter lists.\n\nIf keyword arguments are present, they are first converted to\npositional arguments, as follows. First, a list of unfilled slots is\ncreated for the formal parameters. If there are N positional\narguments, they are placed in the first N slots. Next, for each\nkeyword argument, the identifier is used to determine the\ncorresponding slot (if the identifier is the same as the first formal\nparameter name, the first slot is used, and so on). If the slot is\nalready filled, a ``TypeError`` exception is raised. Otherwise, the\nvalue of the argument is placed in the slot, filling it (even if the\nexpression is ``None``, it fills the slot). When all arguments have\nbeen processed, the slots that are still unfilled are filled with the\ncorresponding default value from the function definition. (Default\nvalues are calculated, once, when the function is defined; thus, a\nmutable object such as a list or dictionary used as default value will\nbe shared by all calls that don\'t specify an argument value for the\ncorresponding slot; this should usually be avoided.) If there are any\nunfilled slots for which no default value is specified, a\n``TypeError`` exception is raised. Otherwise, the list of filled\nslots is used as the argument list for the call.\n\nNote: An implementation may provide builtin functions whose positional\n parameters do not have names, even if they are \'named\' for the\n purpose of documentation, and which therefore cannot be supplied by\n keyword. In CPython, this is the case for functions implemented in\n C that use ``PyArg_ParseTuple()`` to parse their arguments.\n\nIf there are more positional arguments than there are formal parameter\nslots, a ``TypeError`` exception is raised, unless a formal parameter\nusing the syntax ``*identifier`` is present; in this case, that formal\nparameter receives a tuple containing the excess positional arguments\n(or an empty tuple if there were no excess positional arguments).\n\nIf any keyword argument does not correspond to a formal parameter\nname, a ``TypeError`` exception is raised, unless a formal parameter\nusing the syntax ``**identifier`` is present; in this case, that\nformal parameter receives a dictionary containing the excess keyword\narguments (using the keywords as keys and the argument values as\ncorresponding values), or a (new) empty dictionary if there were no\nexcess keyword arguments.\n\nIf the syntax ``*expression`` appears in the function call,\n``expression`` must evaluate to a sequence. Elements from this\nsequence are treated as if they were additional positional arguments;\nif there are positional arguments *x1*,..., *xN*, and ``expression``\nevaluates to a sequence *y1*, ..., *yM*, this is equivalent to a call\nwith M+N positional arguments *x1*, ..., *xN*, *y1*, ..., *yM*.\n\nA consequence of this is that although the ``*expression`` syntax may\nappear *after* some keyword arguments, it is processed *before* the\nkeyword arguments (and the ``**expression`` argument, if any -- see\nbelow). So:\n\n >>> def f(a, b):\n ... print a, b\n ...\n >>> f(b=1, *(2,))\n 2 1\n >>> f(a=1, *(2,))\n Traceback (most recent call last):\n File "", line 1, in ?\n TypeError: f() got multiple values for keyword argument \'a\'\n >>> f(1, *(2,))\n 1 2\n\nIt is unusual for both keyword arguments and the ``*expression``\nsyntax to be used in the same call, so in practice this confusion does\nnot arise.\n\nIf the syntax ``**expression`` appears in the function call,\n``expression`` must evaluate to a mapping, the contents of which are\ntreated as additional keyword arguments. In the case of a keyword\nappearing in both ``expression`` and as an explicit keyword argument,\na ``TypeError`` exception is raised.\n\nFormal parameters using the syntax ``*identifier`` or ``**identifier``\ncannot be used as positional argument slots or as keyword argument\nnames. Formal parameters using the syntax ``(sublist)`` cannot be\nused as keyword argument names; the outermost sublist corresponds to a\nsingle unnamed argument slot, and the argument value is assigned to\nthe sublist using the usual tuple assignment rules after all other\nparameter processing is done.\n\nA call always returns some value, possibly ``None``, unless it raises\nan exception. How this value is computed depends on the type of the\ncallable object.\n\nIf it is---\n\na user-defined function:\n The code block for the function is executed, passing it the\n argument list. The first thing the code block will do is bind the\n formal parameters to the arguments; this is described in section\n *Function definitions*. When the code block executes a ``return``\n statement, this specifies the return value of the function call.\n\na built-in function or method:\n The result is up to the interpreter; see *Built-in Functions* for\n the descriptions of built-in functions and methods.\n\na class object:\n A new instance of that class is returned.\n\na class instance method:\n The corresponding user-defined function is called, with an argument\n list that is one longer than the argument list of the call: the\n instance becomes the first argument.\n\na class instance:\n The class must define a ``__call__()`` method; the effect is then\n the same as if that method was called.\n', + 'calls': u'\nCalls\n*****\n\nA call calls a callable object (e.g., a function) with a possibly\nempty series of arguments:\n\n call ::= primary "(" [argument_list [","]\n | expression genexpr_for] ")"\n argument_list ::= positional_arguments ["," keyword_arguments]\n ["," "*" expression] ["," keyword_arguments]\n ["," "**" expression]\n | keyword_arguments ["," "*" expression]\n ["," "**" expression]\n | "*" expression ["," "*" expression] ["," "**" expression]\n | "**" expression\n positional_arguments ::= expression ("," expression)*\n keyword_arguments ::= keyword_item ("," keyword_item)*\n keyword_item ::= identifier "=" expression\n\nA trailing comma may be present after the positional and keyword\narguments but does not affect the semantics.\n\nThe primary must evaluate to a callable object (user-defined\nfunctions, built-in functions, methods of built-in objects, class\nobjects, methods of class instances, and certain class instances\nthemselves are callable; extensions may define additional callable\nobject types). All argument expressions are evaluated before the call\nis attempted. Please refer to section *Function definitions* for the\nsyntax of formal parameter lists.\n\nIf keyword arguments are present, they are first converted to\npositional arguments, as follows. First, a list of unfilled slots is\ncreated for the formal parameters. If there are N positional\narguments, they are placed in the first N slots. Next, for each\nkeyword argument, the identifier is used to determine the\ncorresponding slot (if the identifier is the same as the first formal\nparameter name, the first slot is used, and so on). If the slot is\nalready filled, a ``TypeError`` exception is raised. Otherwise, the\nvalue of the argument is placed in the slot, filling it (even if the\nexpression is ``None``, it fills the slot). When all arguments have\nbeen processed, the slots that are still unfilled are filled with the\ncorresponding default value from the function definition. (Default\nvalues are calculated, once, when the function is defined; thus, a\nmutable object such as a list or dictionary used as default value will\nbe shared by all calls that don\'t specify an argument value for the\ncorresponding slot; this should usually be avoided.) If there are any\nunfilled slots for which no default value is specified, a\n``TypeError`` exception is raised. Otherwise, the list of filled\nslots is used as the argument list for the call.\n\n**CPython implementation detail:** An implementation may provide\nbuilt-in functions whose positional parameters do not have names, even\nif they are \'named\' for the purpose of documentation, and which\ntherefore cannot be supplied by keyword. In CPython, this is the case\nfor functions implemented in C that use ``PyArg_ParseTuple()`` to\nparse their arguments.\n\nIf there are more positional arguments than there are formal parameter\nslots, a ``TypeError`` exception is raised, unless a formal parameter\nusing the syntax ``*identifier`` is present; in this case, that formal\nparameter receives a tuple containing the excess positional arguments\n(or an empty tuple if there were no excess positional arguments).\n\nIf any keyword argument does not correspond to a formal parameter\nname, a ``TypeError`` exception is raised, unless a formal parameter\nusing the syntax ``**identifier`` is present; in this case, that\nformal parameter receives a dictionary containing the excess keyword\narguments (using the keywords as keys and the argument values as\ncorresponding values), or a (new) empty dictionary if there were no\nexcess keyword arguments.\n\nIf the syntax ``*expression`` appears in the function call,\n``expression`` must evaluate to a sequence. Elements from this\nsequence are treated as if they were additional positional arguments;\nif there are positional arguments *x1*,..., *xN*, and ``expression``\nevaluates to a sequence *y1*, ..., *yM*, this is equivalent to a call\nwith M+N positional arguments *x1*, ..., *xN*, *y1*, ..., *yM*.\n\nA consequence of this is that although the ``*expression`` syntax may\nappear *after* some keyword arguments, it is processed *before* the\nkeyword arguments (and the ``**expression`` argument, if any -- see\nbelow). So:\n\n >>> def f(a, b):\n ... print a, b\n ...\n >>> f(b=1, *(2,))\n 2 1\n >>> f(a=1, *(2,))\n Traceback (most recent call last):\n File "", line 1, in ?\n TypeError: f() got multiple values for keyword argument \'a\'\n >>> f(1, *(2,))\n 1 2\n\nIt is unusual for both keyword arguments and the ``*expression``\nsyntax to be used in the same call, so in practice this confusion does\nnot arise.\n\nIf the syntax ``**expression`` appears in the function call,\n``expression`` must evaluate to a mapping, the contents of which are\ntreated as additional keyword arguments. In the case of a keyword\nappearing in both ``expression`` and as an explicit keyword argument,\na ``TypeError`` exception is raised.\n\nFormal parameters using the syntax ``*identifier`` or ``**identifier``\ncannot be used as positional argument slots or as keyword argument\nnames. Formal parameters using the syntax ``(sublist)`` cannot be\nused as keyword argument names; the outermost sublist corresponds to a\nsingle unnamed argument slot, and the argument value is assigned to\nthe sublist using the usual tuple assignment rules after all other\nparameter processing is done.\n\nA call always returns some value, possibly ``None``, unless it raises\nan exception. How this value is computed depends on the type of the\ncallable object.\n\nIf it is---\n\na user-defined function:\n The code block for the function is executed, passing it the\n argument list. The first thing the code block will do is bind the\n formal parameters to the arguments; this is described in section\n *Function definitions*. When the code block executes a ``return``\n statement, this specifies the return value of the function call.\n\na built-in function or method:\n The result is up to the interpreter; see *Built-in Functions* for\n the descriptions of built-in functions and methods.\n\na class object:\n A new instance of that class is returned.\n\na class instance method:\n The corresponding user-defined function is called, with an argument\n list that is one longer than the argument list of the call: the\n instance becomes the first argument.\n\na class instance:\n The class must define a ``__call__()`` method; the effect is then\n the same as if that method was called.\n', 'class': u'\nClass definitions\n*****************\n\nA class definition defines a class object (see section *The standard\ntype hierarchy*):\n\n classdef ::= "class" classname [inheritance] ":" suite\n inheritance ::= "(" [expression_list] ")"\n classname ::= identifier\n\nA class definition is an executable statement. It first evaluates the\ninheritance list, if present. Each item in the inheritance list\nshould evaluate to a class object or class type which allows\nsubclassing. The class\'s suite is then executed in a new execution\nframe (see section *Naming and binding*), using a newly created local\nnamespace and the original global namespace. (Usually, the suite\ncontains only function definitions.) When the class\'s suite finishes\nexecution, its execution frame is discarded but its local namespace is\nsaved. [4] A class object is then created using the inheritance list\nfor the base classes and the saved local namespace for the attribute\ndictionary. The class name is bound to this class object in the\noriginal local namespace.\n\n**Programmer\'s note:** Variables defined in the class definition are\nclass variables; they are shared by all instances. To create instance\nvariables, they can be set in a method with ``self.name = value``.\nBoth class and instance variables are accessible through the notation\n"``self.name``", and an instance variable hides a class variable with\nthe same name when accessed in this way. Class variables can be used\nas defaults for instance variables, but using mutable values there can\nlead to unexpected results. For *new-style class*es, descriptors can\nbe used to create instance variables with different implementation\ndetails.\n\nClass definitions, like function definitions, may be wrapped by one or\nmore *decorator* expressions. The evaluation rules for the decorator\nexpressions are the same as for functions. The result must be a class\nobject, which is then bound to the class name.\n\n-[ Footnotes ]-\n\n[1] The exception is propagated to the invocation stack only if there\n is no ``finally`` clause that negates the exception.\n\n[2] Currently, control "flows off the end" except in the case of an\n exception or the execution of a ``return``, ``continue``, or\n ``break`` statement.\n\n[3] A string literal appearing as the first statement in the function\n body is transformed into the function\'s ``__doc__`` attribute and\n therefore the function\'s *docstring*.\n\n[4] A string literal appearing as the first statement in the class\n body is transformed into the namespace\'s ``__doc__`` item and\n therefore the class\'s *docstring*.\n', 'coercion-rules': u"\nCoercion rules\n**************\n\nThis section used to document the rules for coercion. As the language\nhas evolved, the coercion rules have become hard to document\nprecisely; documenting what one version of one particular\nimplementation does is undesirable. Instead, here are some informal\nguidelines regarding coercion. In Python 3.0, coercion will not be\nsupported.\n\n* If the left operand of a % operator is a string or Unicode object,\n no coercion takes place and the string formatting operation is\n invoked instead.\n\n* It is no longer recommended to define a coercion operation. Mixed-\n mode operations on types that don't define coercion pass the\n original arguments to the operation.\n\n* New-style classes (those derived from ``object``) never invoke the\n ``__coerce__()`` method in response to a binary operator; the only\n time ``__coerce__()`` is invoked is when the built-in function\n ``coerce()`` is called.\n\n* For most intents and purposes, an operator that returns\n ``NotImplemented`` is treated the same as one that is not\n implemented at all.\n\n* Below, ``__op__()`` and ``__rop__()`` are used to signify the\n generic method names corresponding to an operator; ``__iop__()`` is\n used for the corresponding in-place operator. For example, for the\n operator '``+``', ``__add__()`` and ``__radd__()`` are used for the\n left and right variant of the binary operator, and ``__iadd__()``\n for the in-place variant.\n\n* For objects *x* and *y*, first ``x.__op__(y)`` is tried. If this is\n not implemented or returns ``NotImplemented``, ``y.__rop__(x)`` is\n tried. If this is also not implemented or returns\n ``NotImplemented``, a ``TypeError`` exception is raised. But see\n the following exception:\n\n* Exception to the previous item: if the left operand is an instance\n of a built-in type or a new-style class, and the right operand is an\n instance of a proper subclass of that type or class and overrides\n the base's ``__rop__()`` method, the right operand's ``__rop__()``\n method is tried *before* the left operand's ``__op__()`` method.\n\n This is done so that a subclass can completely override binary\n operators. Otherwise, the left operand's ``__op__()`` method would\n always accept the right operand: when an instance of a given class\n is expected, an instance of a subclass of that class is always\n acceptable.\n\n* When either operand type defines a coercion, this coercion is called\n before that type's ``__op__()`` or ``__rop__()`` method is called,\n but no sooner. If the coercion returns an object of a different\n type for the operand whose coercion is invoked, part of the process\n is redone using the new object.\n\n* When an in-place operator (like '``+=``') is used, if the left\n operand implements ``__iop__()``, it is invoked without any\n coercion. When the operation falls back to ``__op__()`` and/or\n ``__rop__()``, the normal coercion rules apply.\n\n* In ``x + y``, if *x* is a sequence that implements sequence\n concatenation, sequence concatenation is invoked.\n\n* In ``x * y``, if one operator is a sequence that implements sequence\n repetition, and the other is an integer (``int`` or ``long``),\n sequence repetition is invoked.\n\n* Rich comparisons (implemented by methods ``__eq__()`` and so on)\n never use coercion. Three-way comparison (implemented by\n ``__cmp__()``) does use coercion under the same conditions as other\n binary operations use it.\n\n* In the current implementation, the built-in numeric types ``int``,\n ``long`` and ``float`` do not use coercion; the type ``complex``\n however does use coercion for binary operators and rich comparisons,\n despite the above rules. The difference can become apparent when\n subclassing these types. Over time, the type ``complex`` may be\n fixed to avoid coercion. All these types implement a\n ``__coerce__()`` method, for use by the built-in ``coerce()``\n function.\n", - 'comparisons': u'\nComparisons\n***********\n\nUnlike C, all comparison operations in Python have the same priority,\nwhich is lower than that of any arithmetic, shifting or bitwise\noperation. Also unlike C, expressions like ``a < b < c`` have the\ninterpretation that is conventional in mathematics:\n\n comparison ::= or_expr ( comp_operator or_expr )*\n comp_operator ::= "<" | ">" | "==" | ">=" | "<=" | "<>" | "!="\n | "is" ["not"] | ["not"] "in"\n\nComparisons yield boolean values: ``True`` or ``False``.\n\nComparisons can be chained arbitrarily, e.g., ``x < y <= z`` is\nequivalent to ``x < y and y <= z``, except that ``y`` is evaluated\nonly once (but in both cases ``z`` is not evaluated at all when ``x <\ny`` is found to be false).\n\nFormally, if *a*, *b*, *c*, ..., *y*, *z* are expressions and *op1*,\n*op2*, ..., *opN* are comparison operators, then ``a op1 b op2 c ... y\nopN z`` is equivalent to ``a op1 b and b op2 c and ... y opN z``,\nexcept that each expression is evaluated at most once.\n\nNote that ``a op1 b op2 c`` doesn\'t imply any kind of comparison\nbetween *a* and *c*, so that, e.g., ``x < y > z`` is perfectly legal\n(though perhaps not pretty).\n\nThe forms ``<>`` and ``!=`` are equivalent; for consistency with C,\n``!=`` is preferred; where ``!=`` is mentioned below ``<>`` is also\naccepted. The ``<>`` spelling is considered obsolescent.\n\nThe operators ``<``, ``>``, ``==``, ``>=``, ``<=``, and ``!=`` compare\nthe values of two objects. The objects need not have the same type.\nIf both are numbers, they are converted to a common type. Otherwise,\nobjects of different types *always* compare unequal, and are ordered\nconsistently but arbitrarily. You can control comparison behavior of\nobjects of non-builtin types by defining a ``__cmp__`` method or rich\ncomparison methods like ``__gt__``, described in section *Special\nmethod names*.\n\n(This unusual definition of comparison was used to simplify the\ndefinition of operations like sorting and the ``in`` and ``not in``\noperators. In the future, the comparison rules for objects of\ndifferent types are likely to change.)\n\nComparison of objects of the same type depends on the type:\n\n* Numbers are compared arithmetically.\n\n* Strings are compared lexicographically using the numeric equivalents\n (the result of the built-in function ``ord()``) of their characters.\n Unicode and 8-bit strings are fully interoperable in this behavior.\n [4]\n\n* Tuples and lists are compared lexicographically using comparison of\n corresponding elements. This means that to compare equal, each\n element must compare equal and the two sequences must be of the same\n type and have the same length.\n\n If not equal, the sequences are ordered the same as their first\n differing elements. For example, ``cmp([1,2,x], [1,2,y])`` returns\n the same as ``cmp(x,y)``. If the corresponding element does not\n exist, the shorter sequence is ordered first (for example, ``[1,2] <\n [1,2,3]``).\n\n* Mappings (dictionaries) compare equal if and only if their sorted\n (key, value) lists compare equal. [5] Outcomes other than equality\n are resolved consistently, but are not otherwise defined. [6]\n\n* Most other objects of builtin types compare unequal unless they are\n the same object; the choice whether one object is considered smaller\n or larger than another one is made arbitrarily but consistently\n within one execution of a program.\n\nThe operators ``in`` and ``not in`` test for collection membership.\n``x in s`` evaluates to true if *x* is a member of the collection *s*,\nand false otherwise. ``x not in s`` returns the negation of ``x in\ns``. The collection membership test has traditionally been bound to\nsequences; an object is a member of a collection if the collection is\na sequence and contains an element equal to that object. However, it\nmake sense for many other object types to support membership tests\nwithout being a sequence. In particular, dictionaries (for keys) and\nsets support membership testing.\n\nFor the list and tuple types, ``x in y`` is true if and only if there\nexists an index *i* such that ``x == y[i]`` is true.\n\nFor the Unicode and string types, ``x in y`` is true if and only if\n*x* is a substring of *y*. An equivalent test is ``y.find(x) != -1``.\nNote, *x* and *y* need not be the same type; consequently, ``u\'ab\' in\n\'abc\'`` will return ``True``. Empty strings are always considered to\nbe a substring of any other string, so ``"" in "abc"`` will return\n``True``.\n\nChanged in version 2.3: Previously, *x* was required to be a string of\nlength ``1``.\n\nFor user-defined classes which define the ``__contains__()`` method,\n``x in y`` is true if and only if ``y.__contains__(x)`` is true.\n\nFor user-defined classes which do not define ``__contains__()`` and do\ndefine ``__getitem__()``, ``x in y`` is true if and only if there is a\nnon-negative integer index *i* such that ``x == y[i]``, and all lower\ninteger indices do not raise ``IndexError`` exception. (If any other\nexception is raised, it is as if ``in`` raised that exception).\n\nThe operator ``not in`` is defined to have the inverse true value of\n``in``.\n\nThe operators ``is`` and ``is not`` test for object identity: ``x is\ny`` is true if and only if *x* and *y* are the same object. ``x is\nnot y`` yields the inverse truth value. [7]\n', + 'comparisons': u'\nComparisons\n***********\n\nUnlike C, all comparison operations in Python have the same priority,\nwhich is lower than that of any arithmetic, shifting or bitwise\noperation. Also unlike C, expressions like ``a < b < c`` have the\ninterpretation that is conventional in mathematics:\n\n comparison ::= or_expr ( comp_operator or_expr )*\n comp_operator ::= "<" | ">" | "==" | ">=" | "<=" | "<>" | "!="\n | "is" ["not"] | ["not"] "in"\n\nComparisons yield boolean values: ``True`` or ``False``.\n\nComparisons can be chained arbitrarily, e.g., ``x < y <= z`` is\nequivalent to ``x < y and y <= z``, except that ``y`` is evaluated\nonly once (but in both cases ``z`` is not evaluated at all when ``x <\ny`` is found to be false).\n\nFormally, if *a*, *b*, *c*, ..., *y*, *z* are expressions and *op1*,\n*op2*, ..., *opN* are comparison operators, then ``a op1 b op2 c ... y\nopN z`` is equivalent to ``a op1 b and b op2 c and ... y opN z``,\nexcept that each expression is evaluated at most once.\n\nNote that ``a op1 b op2 c`` doesn\'t imply any kind of comparison\nbetween *a* and *c*, so that, e.g., ``x < y > z`` is perfectly legal\n(though perhaps not pretty).\n\nThe forms ``<>`` and ``!=`` are equivalent; for consistency with C,\n``!=`` is preferred; where ``!=`` is mentioned below ``<>`` is also\naccepted. The ``<>`` spelling is considered obsolescent.\n\nThe operators ``<``, ``>``, ``==``, ``>=``, ``<=``, and ``!=`` compare\nthe values of two objects. The objects need not have the same type.\nIf both are numbers, they are converted to a common type. Otherwise,\nobjects of different types *always* compare unequal, and are ordered\nconsistently but arbitrarily. You can control comparison behavior of\nobjects of non-built-in types by defining a ``__cmp__`` method or rich\ncomparison methods like ``__gt__``, described in section *Special\nmethod names*.\n\n(This unusual definition of comparison was used to simplify the\ndefinition of operations like sorting and the ``in`` and ``not in``\noperators. In the future, the comparison rules for objects of\ndifferent types are likely to change.)\n\nComparison of objects of the same type depends on the type:\n\n* Numbers are compared arithmetically.\n\n* Strings are compared lexicographically using the numeric equivalents\n (the result of the built-in function ``ord()``) of their characters.\n Unicode and 8-bit strings are fully interoperable in this behavior.\n [4]\n\n* Tuples and lists are compared lexicographically using comparison of\n corresponding elements. This means that to compare equal, each\n element must compare equal and the two sequences must be of the same\n type and have the same length.\n\n If not equal, the sequences are ordered the same as their first\n differing elements. For example, ``cmp([1,2,x], [1,2,y])`` returns\n the same as ``cmp(x,y)``. If the corresponding element does not\n exist, the shorter sequence is ordered first (for example, ``[1,2] <\n [1,2,3]``).\n\n* Mappings (dictionaries) compare equal if and only if their sorted\n (key, value) lists compare equal. [5] Outcomes other than equality\n are resolved consistently, but are not otherwise defined. [6]\n\n* Most other objects of built-in types compare unequal unless they are\n the same object; the choice whether one object is considered smaller\n or larger than another one is made arbitrarily but consistently\n within one execution of a program.\n\nThe operators ``in`` and ``not in`` test for collection membership.\n``x in s`` evaluates to true if *x* is a member of the collection *s*,\nand false otherwise. ``x not in s`` returns the negation of ``x in\ns``. The collection membership test has traditionally been bound to\nsequences; an object is a member of a collection if the collection is\na sequence and contains an element equal to that object. However, it\nmake sense for many other object types to support membership tests\nwithout being a sequence. In particular, dictionaries (for keys) and\nsets support membership testing.\n\nFor the list and tuple types, ``x in y`` is true if and only if there\nexists an index *i* such that ``x == y[i]`` is true.\n\nFor the Unicode and string types, ``x in y`` is true if and only if\n*x* is a substring of *y*. An equivalent test is ``y.find(x) != -1``.\nNote, *x* and *y* need not be the same type; consequently, ``u\'ab\' in\n\'abc\'`` will return ``True``. Empty strings are always considered to\nbe a substring of any other string, so ``"" in "abc"`` will return\n``True``.\n\nChanged in version 2.3: Previously, *x* was required to be a string of\nlength ``1``.\n\nFor user-defined classes which define the ``__contains__()`` method,\n``x in y`` is true if and only if ``y.__contains__(x)`` is true.\n\nFor user-defined classes which do not define ``__contains__()`` but do\ndefine ``__iter__()``, ``x in y`` is true if some value ``z`` with ``x\n== z`` is produced while iterating over ``y``. If an exception is\nraised during the iteration, it is as if ``in`` raised that exception.\n\nLastly, the old-style iteration protocol is tried: if a class defines\n``__getitem__()``, ``x in y`` is true if and only if there is a non-\nnegative integer index *i* such that ``x == y[i]``, and all lower\ninteger indices do not raise ``IndexError`` exception. (If any other\nexception is raised, it is as if ``in`` raised that exception).\n\nThe operator ``not in`` is defined to have the inverse true value of\n``in``.\n\nThe operators ``is`` and ``is not`` test for object identity: ``x is\ny`` is true if and only if *x* and *y* are the same object. ``x is\nnot y`` yields the inverse truth value. [7]\n', 'compound': u'\nCompound statements\n*******************\n\nCompound statements contain (groups of) other statements; they affect\nor control the execution of those other statements in some way. In\ngeneral, compound statements span multiple lines, although in simple\nincarnations a whole compound statement may be contained in one line.\n\nThe ``if``, ``while`` and ``for`` statements implement traditional\ncontrol flow constructs. ``try`` specifies exception handlers and/or\ncleanup code for a group of statements. Function and class\ndefinitions are also syntactically compound statements.\n\nCompound statements consist of one or more \'clauses.\' A clause\nconsists of a header and a \'suite.\' The clause headers of a\nparticular compound statement are all at the same indentation level.\nEach clause header begins with a uniquely identifying keyword and ends\nwith a colon. A suite is a group of statements controlled by a\nclause. A suite can be one or more semicolon-separated simple\nstatements on the same line as the header, following the header\'s\ncolon, or it can be one or more indented statements on subsequent\nlines. Only the latter form of suite can contain nested compound\nstatements; the following is illegal, mostly because it wouldn\'t be\nclear to which ``if`` clause a following ``else`` clause would belong:\n\n if test1: if test2: print x\n\nAlso note that the semicolon binds tighter than the colon in this\ncontext, so that in the following example, either all or none of the\n``print`` statements are executed:\n\n if x < y < z: print x; print y; print z\n\nSummarizing:\n\n compound_stmt ::= if_stmt\n | while_stmt\n | for_stmt\n | try_stmt\n | with_stmt\n | funcdef\n | classdef\n | decorated\n suite ::= stmt_list NEWLINE | NEWLINE INDENT statement+ DEDENT\n statement ::= stmt_list NEWLINE | compound_stmt\n stmt_list ::= simple_stmt (";" simple_stmt)* [";"]\n\nNote that statements always end in a ``NEWLINE`` possibly followed by\na ``DEDENT``. Also note that optional continuation clauses always\nbegin with a keyword that cannot start a statement, thus there are no\nambiguities (the \'dangling ``else``\' problem is solved in Python by\nrequiring nested ``if`` statements to be indented).\n\nThe formatting of the grammar rules in the following sections places\neach clause on a separate line for clarity.\n\n\nThe ``if`` statement\n====================\n\nThe ``if`` statement is used for conditional execution:\n\n if_stmt ::= "if" expression ":" suite\n ( "elif" expression ":" suite )*\n ["else" ":" suite]\n\nIt selects exactly one of the suites by evaluating the expressions one\nby one until one is found to be true (see section *Boolean operations*\nfor the definition of true and false); then that suite is executed\n(and no other part of the ``if`` statement is executed or evaluated).\nIf all expressions are false, the suite of the ``else`` clause, if\npresent, is executed.\n\n\nThe ``while`` statement\n=======================\n\nThe ``while`` statement is used for repeated execution as long as an\nexpression is true:\n\n while_stmt ::= "while" expression ":" suite\n ["else" ":" suite]\n\nThis repeatedly tests the expression and, if it is true, executes the\nfirst suite; if the expression is false (which may be the first time\nit is tested) the suite of the ``else`` clause, if present, is\nexecuted and the loop terminates.\n\nA ``break`` statement executed in the first suite terminates the loop\nwithout executing the ``else`` clause\'s suite. A ``continue``\nstatement executed in the first suite skips the rest of the suite and\ngoes back to testing the expression.\n\n\nThe ``for`` statement\n=====================\n\nThe ``for`` statement is used to iterate over the elements of a\nsequence (such as a string, tuple or list) or other iterable object:\n\n for_stmt ::= "for" target_list "in" expression_list ":" suite\n ["else" ":" suite]\n\nThe expression list is evaluated once; it should yield an iterable\nobject. An iterator is created for the result of the\n``expression_list``. The suite is then executed once for each item\nprovided by the iterator, in the order of ascending indices. Each\nitem in turn is assigned to the target list using the standard rules\nfor assignments, and then the suite is executed. When the items are\nexhausted (which is immediately when the sequence is empty), the suite\nin the ``else`` clause, if present, is executed, and the loop\nterminates.\n\nA ``break`` statement executed in the first suite terminates the loop\nwithout executing the ``else`` clause\'s suite. A ``continue``\nstatement executed in the first suite skips the rest of the suite and\ncontinues with the next item, or with the ``else`` clause if there was\nno next item.\n\nThe suite may assign to the variable(s) in the target list; this does\nnot affect the next item assigned to it.\n\nThe target list is not deleted when the loop is finished, but if the\nsequence is empty, it will not have been assigned to at all by the\nloop. Hint: the built-in function ``range()`` returns a sequence of\nintegers suitable to emulate the effect of Pascal\'s ``for i := a to b\ndo``; e.g., ``range(3)`` returns the list ``[0, 1, 2]``.\n\nNote: There is a subtlety when the sequence is being modified by the loop\n (this can only occur for mutable sequences, i.e. lists). An internal\n counter is used to keep track of which item is used next, and this\n is incremented on each iteration. When this counter has reached the\n length of the sequence the loop terminates. This means that if the\n suite deletes the current (or a previous) item from the sequence,\n the next item will be skipped (since it gets the index of the\n current item which has already been treated). Likewise, if the\n suite inserts an item in the sequence before the current item, the\n current item will be treated again the next time through the loop.\n This can lead to nasty bugs that can be avoided by making a\n temporary copy using a slice of the whole sequence, e.g.,\n\n for x in a[:]:\n if x < 0: a.remove(x)\n\n\nThe ``try`` statement\n=====================\n\nThe ``try`` statement specifies exception handlers and/or cleanup code\nfor a group of statements:\n\n try_stmt ::= try1_stmt | try2_stmt\n try1_stmt ::= "try" ":" suite\n ("except" [expression [("as" | ",") target]] ":" suite)+\n ["else" ":" suite]\n ["finally" ":" suite]\n try2_stmt ::= "try" ":" suite\n "finally" ":" suite\n\nChanged in version 2.5: In previous versions of Python,\n``try``...``except``...``finally`` did not work. ``try``...``except``\nhad to be nested in ``try``...``finally``.\n\nThe ``except`` clause(s) specify one or more exception handlers. When\nno exception occurs in the ``try`` clause, no exception handler is\nexecuted. When an exception occurs in the ``try`` suite, a search for\nan exception handler is started. This search inspects the except\nclauses in turn until one is found that matches the exception. An\nexpression-less except clause, if present, must be last; it matches\nany exception. For an except clause with an expression, that\nexpression is evaluated, and the clause matches the exception if the\nresulting object is "compatible" with the exception. An object is\ncompatible with an exception if it is the class or a base class of the\nexception object, a tuple containing an item compatible with the\nexception, or, in the (deprecated) case of string exceptions, is the\nraised string itself (note that the object identities must match, i.e.\nit must be the same string object, not just a string with the same\nvalue).\n\nIf no except clause matches the exception, the search for an exception\nhandler continues in the surrounding code and on the invocation stack.\n[1]\n\nIf the evaluation of an expression in the header of an except clause\nraises an exception, the original search for a handler is canceled and\na search starts for the new exception in the surrounding code and on\nthe call stack (it is treated as if the entire ``try`` statement\nraised the exception).\n\nWhen a matching except clause is found, the exception is assigned to\nthe target specified in that except clause, if present, and the except\nclause\'s suite is executed. All except clauses must have an\nexecutable block. When the end of this block is reached, execution\ncontinues normally after the entire try statement. (This means that\nif two nested handlers exist for the same exception, and the exception\noccurs in the try clause of the inner handler, the outer handler will\nnot handle the exception.)\n\nBefore an except clause\'s suite is executed, details about the\nexception are assigned to three variables in the ``sys`` module:\n``sys.exc_type`` receives the object identifying the exception;\n``sys.exc_value`` receives the exception\'s parameter;\n``sys.exc_traceback`` receives a traceback object (see section *The\nstandard type hierarchy*) identifying the point in the program where\nthe exception occurred. These details are also available through the\n``sys.exc_info()`` function, which returns a tuple ``(exc_type,\nexc_value, exc_traceback)``. Use of the corresponding variables is\ndeprecated in favor of this function, since their use is unsafe in a\nthreaded program. As of Python 1.5, the variables are restored to\ntheir previous values (before the call) when returning from a function\nthat handled an exception.\n\nThe optional ``else`` clause is executed if and when control flows off\nthe end of the ``try`` clause. [2] Exceptions in the ``else`` clause\nare not handled by the preceding ``except`` clauses.\n\nIf ``finally`` is present, it specifies a \'cleanup\' handler. The\n``try`` clause is executed, including any ``except`` and ``else``\nclauses. If an exception occurs in any of the clauses and is not\nhandled, the exception is temporarily saved. The ``finally`` clause is\nexecuted. If there is a saved exception, it is re-raised at the end\nof the ``finally`` clause. If the ``finally`` clause raises another\nexception or executes a ``return`` or ``break`` statement, the saved\nexception is lost. The exception information is not available to the\nprogram during execution of the ``finally`` clause.\n\nWhen a ``return``, ``break`` or ``continue`` statement is executed in\nthe ``try`` suite of a ``try``...``finally`` statement, the\n``finally`` clause is also executed \'on the way out.\' A ``continue``\nstatement is illegal in the ``finally`` clause. (The reason is a\nproblem with the current implementation --- this restriction may be\nlifted in the future).\n\nAdditional information on exceptions can be found in section\n*Exceptions*, and information on using the ``raise`` statement to\ngenerate exceptions may be found in section *The raise statement*.\n\n\nThe ``with`` statement\n======================\n\nNew in version 2.5.\n\nThe ``with`` statement is used to wrap the execution of a block with\nmethods defined by a context manager (see section *With Statement\nContext Managers*). This allows common\n``try``...``except``...``finally`` usage patterns to be encapsulated\nfor convenient reuse.\n\n with_stmt ::= "with" expression ["as" target] ":" suite\n\nThe execution of the ``with`` statement proceeds as follows:\n\n1. The context expression is evaluated to obtain a context manager.\n\n2. The context manager\'s ``__enter__()`` method is invoked.\n\n3. If a target was included in the ``with`` statement, the return\n value from ``__enter__()`` is assigned to it.\n\n Note: The ``with`` statement guarantees that if the ``__enter__()``\n method returns without an error, then ``__exit__()`` will always\n be called. Thus, if an error occurs during the assignment to the\n target list, it will be treated the same as an error occurring\n within the suite would be. See step 5 below.\n\n4. The suite is executed.\n\n5. The context manager\'s ``__exit__()`` method is invoked. If an\n exception caused the suite to be exited, its type, value, and\n traceback are passed as arguments to ``__exit__()``. Otherwise,\n three ``None`` arguments are supplied.\n\n If the suite was exited due to an exception, and the return value\n from the ``__exit__()`` method was false, the exception is\n reraised. If the return value was true, the exception is\n suppressed, and execution continues with the statement following\n the ``with`` statement.\n\n If the suite was exited for any reason other than an exception, the\n return value from ``__exit__()`` is ignored, and execution proceeds\n at the normal location for the kind of exit that was taken.\n\nNote: In Python 2.5, the ``with`` statement is only allowed when the\n ``with_statement`` feature has been enabled. It is always enabled\n in Python 2.6.\n\nSee also:\n\n **PEP 0343** - The "with" statement\n The specification, background, and examples for the Python\n ``with`` statement.\n\n\nFunction definitions\n====================\n\nA function definition defines a user-defined function object (see\nsection *The standard type hierarchy*):\n\n decorated ::= decorators (classdef | funcdef)\n decorators ::= decorator+\n decorator ::= "@" dotted_name ["(" [argument_list [","]] ")"] NEWLINE\n funcdef ::= "def" funcname "(" [parameter_list] ")" ":" suite\n dotted_name ::= identifier ("." identifier)*\n parameter_list ::= (defparameter ",")*\n ( "*" identifier [, "**" identifier]\n | "**" identifier\n | defparameter [","] )\n defparameter ::= parameter ["=" expression]\n sublist ::= parameter ("," parameter)* [","]\n parameter ::= identifier | "(" sublist ")"\n funcname ::= identifier\n\nA function definition is an executable statement. Its execution binds\nthe function name in the current local namespace to a function object\n(a wrapper around the executable code for the function). This\nfunction object contains a reference to the current global namespace\nas the global namespace to be used when the function is called.\n\nThe function definition does not execute the function body; this gets\nexecuted only when the function is called. [3]\n\nA function definition may be wrapped by one or more *decorator*\nexpressions. Decorator expressions are evaluated when the function is\ndefined, in the scope that contains the function definition. The\nresult must be a callable, which is invoked with the function object\nas the only argument. The returned value is bound to the function name\ninstead of the function object. Multiple decorators are applied in\nnested fashion. For example, the following code:\n\n @f1(arg)\n @f2\n def func(): pass\n\nis equivalent to:\n\n def func(): pass\n func = f1(arg)(f2(func))\n\nWhen one or more top-level parameters have the form *parameter* ``=``\n*expression*, the function is said to have "default parameter values."\nFor a parameter with a default value, the corresponding argument may\nbe omitted from a call, in which case the parameter\'s default value is\nsubstituted. If a parameter has a default value, all following\nparameters must also have a default value --- this is a syntactic\nrestriction that is not expressed by the grammar.\n\n**Default parameter values are evaluated when the function definition\nis executed.** This means that the expression is evaluated once, when\nthe function is defined, and that that same "pre-computed" value is\nused for each call. This is especially important to understand when a\ndefault parameter is a mutable object, such as a list or a dictionary:\nif the function modifies the object (e.g. by appending an item to a\nlist), the default value is in effect modified. This is generally not\nwhat was intended. A way around this is to use ``None`` as the\ndefault, and explicitly test for it in the body of the function, e.g.:\n\n def whats_on_the_telly(penguin=None):\n if penguin is None:\n penguin = []\n penguin.append("property of the zoo")\n return penguin\n\nFunction call semantics are described in more detail in section\n*Calls*. A function call always assigns values to all parameters\nmentioned in the parameter list, either from position arguments, from\nkeyword arguments, or from default values. If the form\n"``*identifier``" is present, it is initialized to a tuple receiving\nany excess positional parameters, defaulting to the empty tuple. If\nthe form "``**identifier``" is present, it is initialized to a new\ndictionary receiving any excess keyword arguments, defaulting to a new\nempty dictionary.\n\nIt is also possible to create anonymous functions (functions not bound\nto a name), for immediate use in expressions. This uses lambda forms,\ndescribed in section *Lambdas*. Note that the lambda form is merely a\nshorthand for a simplified function definition; a function defined in\na "``def``" statement can be passed around or assigned to another name\njust like a function defined by a lambda form. The "``def``" form is\nactually more powerful since it allows the execution of multiple\nstatements.\n\n**Programmer\'s note:** Functions are first-class objects. A "``def``"\nform executed inside a function definition defines a local function\nthat can be returned or passed around. Free variables used in the\nnested function can access the local variables of the function\ncontaining the def. See section *Naming and binding* for details.\n\n\nClass definitions\n=================\n\nA class definition defines a class object (see section *The standard\ntype hierarchy*):\n\n classdef ::= "class" classname [inheritance] ":" suite\n inheritance ::= "(" [expression_list] ")"\n classname ::= identifier\n\nA class definition is an executable statement. It first evaluates the\ninheritance list, if present. Each item in the inheritance list\nshould evaluate to a class object or class type which allows\nsubclassing. The class\'s suite is then executed in a new execution\nframe (see section *Naming and binding*), using a newly created local\nnamespace and the original global namespace. (Usually, the suite\ncontains only function definitions.) When the class\'s suite finishes\nexecution, its execution frame is discarded but its local namespace is\nsaved. [4] A class object is then created using the inheritance list\nfor the base classes and the saved local namespace for the attribute\ndictionary. The class name is bound to this class object in the\noriginal local namespace.\n\n**Programmer\'s note:** Variables defined in the class definition are\nclass variables; they are shared by all instances. To create instance\nvariables, they can be set in a method with ``self.name = value``.\nBoth class and instance variables are accessible through the notation\n"``self.name``", and an instance variable hides a class variable with\nthe same name when accessed in this way. Class variables can be used\nas defaults for instance variables, but using mutable values there can\nlead to unexpected results. For *new-style class*es, descriptors can\nbe used to create instance variables with different implementation\ndetails.\n\nClass definitions, like function definitions, may be wrapped by one or\nmore *decorator* expressions. The evaluation rules for the decorator\nexpressions are the same as for functions. The result must be a class\nobject, which is then bound to the class name.\n\n-[ Footnotes ]-\n\n[1] The exception is propagated to the invocation stack only if there\n is no ``finally`` clause that negates the exception.\n\n[2] Currently, control "flows off the end" except in the case of an\n exception or the execution of a ``return``, ``continue``, or\n ``break`` statement.\n\n[3] A string literal appearing as the first statement in the function\n body is transformed into the function\'s ``__doc__`` attribute and\n therefore the function\'s *docstring*.\n\n[4] A string literal appearing as the first statement in the class\n body is transformed into the namespace\'s ``__doc__`` item and\n therefore the class\'s *docstring*.\n', 'context-managers': u'\nWith Statement Context Managers\n*******************************\n\nNew in version 2.5.\n\nA *context manager* is an object that defines the runtime context to\nbe established when executing a ``with`` statement. The context\nmanager handles the entry into, and the exit from, the desired runtime\ncontext for the execution of the block of code. Context managers are\nnormally invoked using the ``with`` statement (described in section\n*The with statement*), but can also be used by directly invoking their\nmethods.\n\nTypical uses of context managers include saving and restoring various\nkinds of global state, locking and unlocking resources, closing opened\nfiles, etc.\n\nFor more information on context managers, see *Context Manager Types*.\n\nobject.__enter__(self)\n\n Enter the runtime context related to this object. The ``with``\n statement will bind this method\'s return value to the target(s)\n specified in the ``as`` clause of the statement, if any.\n\nobject.__exit__(self, exc_type, exc_value, traceback)\n\n Exit the runtime context related to this object. The parameters\n describe the exception that caused the context to be exited. If the\n context was exited without an exception, all three arguments will\n be ``None``.\n\n If an exception is supplied, and the method wishes to suppress the\n exception (i.e., prevent it from being propagated), it should\n return a true value. Otherwise, the exception will be processed\n normally upon exit from this method.\n\n Note that ``__exit__()`` methods should not reraise the passed-in\n exception; this is the caller\'s responsibility.\n\nSee also:\n\n **PEP 0343** - The "with" statement\n The specification, background, and examples for the Python\n ``with`` statement.\n', 'continue': u'\nThe ``continue`` statement\n**************************\n\n continue_stmt ::= "continue"\n\n``continue`` may only occur syntactically nested in a ``for`` or\n``while`` loop, but not nested in a function or class definition or\n``finally`` clause within that loop. It continues with the next cycle\nof the nearest enclosing loop.\n\nWhen ``continue`` passes control out of a ``try`` statement with a\n``finally`` clause, that ``finally`` clause is executed before really\nstarting the next loop cycle.\n', 'conversions': u'\nArithmetic conversions\n**********************\n\nWhen a description of an arithmetic operator below uses the phrase\n"the numeric arguments are converted to a common type," the arguments\nare coerced using the coercion rules listed at *Coercion rules*. If\nboth arguments are standard numeric types, the following coercions are\napplied:\n\n* If either argument is a complex number, the other is converted to\n complex;\n\n* otherwise, if either argument is a floating point number, the other\n is converted to floating point;\n\n* otherwise, if either argument is a long integer, the other is\n converted to long integer;\n\n* otherwise, both must be plain integers and no conversion is\n necessary.\n\nSome additional rules apply for certain operators (e.g., a string left\nargument to the \'%\' operator). Extensions can define their own\ncoercions.\n', - 'customization': u'\nBasic customization\n*******************\n\nobject.__new__(cls[, ...])\n\n Called to create a new instance of class *cls*. ``__new__()`` is a\n static method (special-cased so you need not declare it as such)\n that takes the class of which an instance was requested as its\n first argument. The remaining arguments are those passed to the\n object constructor expression (the call to the class). The return\n value of ``__new__()`` should be the new object instance (usually\n an instance of *cls*).\n\n Typical implementations create a new instance of the class by\n invoking the superclass\'s ``__new__()`` method using\n ``super(currentclass, cls).__new__(cls[, ...])`` with appropriate\n arguments and then modifying the newly-created instance as\n necessary before returning it.\n\n If ``__new__()`` returns an instance of *cls*, then the new\n instance\'s ``__init__()`` method will be invoked like\n ``__init__(self[, ...])``, where *self* is the new instance and the\n remaining arguments are the same as were passed to ``__new__()``.\n\n If ``__new__()`` does not return an instance of *cls*, then the new\n instance\'s ``__init__()`` method will not be invoked.\n\n ``__new__()`` is intended mainly to allow subclasses of immutable\n types (like int, str, or tuple) to customize instance creation. It\n is also commonly overridden in custom metaclasses in order to\n customize class creation.\n\nobject.__init__(self[, ...])\n\n Called when the instance is created. The arguments are those\n passed to the class constructor expression. If a base class has an\n ``__init__()`` method, the derived class\'s ``__init__()`` method,\n if any, must explicitly call it to ensure proper initialization of\n the base class part of the instance; for example:\n ``BaseClass.__init__(self, [args...])``. As a special constraint\n on constructors, no value may be returned; doing so will cause a\n ``TypeError`` to be raised at runtime.\n\nobject.__del__(self)\n\n Called when the instance is about to be destroyed. This is also\n called a destructor. If a base class has a ``__del__()`` method,\n the derived class\'s ``__del__()`` method, if any, must explicitly\n call it to ensure proper deletion of the base class part of the\n instance. Note that it is possible (though not recommended!) for\n the ``__del__()`` method to postpone destruction of the instance by\n creating a new reference to it. It may then be called at a later\n time when this new reference is deleted. It is not guaranteed that\n ``__del__()`` methods are called for objects that still exist when\n the interpreter exits.\n\n Note: ``del x`` doesn\'t directly call ``x.__del__()`` --- the former\n decrements the reference count for ``x`` by one, and the latter\n is only called when ``x``\'s reference count reaches zero. Some\n common situations that may prevent the reference count of an\n object from going to zero include: circular references between\n objects (e.g., a doubly-linked list or a tree data structure with\n parent and child pointers); a reference to the object on the\n stack frame of a function that caught an exception (the traceback\n stored in ``sys.exc_traceback`` keeps the stack frame alive); or\n a reference to the object on the stack frame that raised an\n unhandled exception in interactive mode (the traceback stored in\n ``sys.last_traceback`` keeps the stack frame alive). The first\n situation can only be remedied by explicitly breaking the cycles;\n the latter two situations can be resolved by storing ``None`` in\n ``sys.exc_traceback`` or ``sys.last_traceback``. Circular\n references which are garbage are detected when the option cycle\n detector is enabled (it\'s on by default), but can only be cleaned\n up if there are no Python-level ``__del__()`` methods involved.\n Refer to the documentation for the ``gc`` module for more\n information about how ``__del__()`` methods are handled by the\n cycle detector, particularly the description of the ``garbage``\n value.\n\n Warning: Due to the precarious circumstances under which ``__del__()``\n methods are invoked, exceptions that occur during their execution\n are ignored, and a warning is printed to ``sys.stderr`` instead.\n Also, when ``__del__()`` is invoked in response to a module being\n deleted (e.g., when execution of the program is done), other\n globals referenced by the ``__del__()`` method may already have\n been deleted or in the process of being torn down (e.g. the\n import machinery shutting down). For this reason, ``__del__()``\n methods should do the absolute minimum needed to maintain\n external invariants. Starting with version 1.5, Python\n guarantees that globals whose name begins with a single\n underscore are deleted from their module before other globals are\n deleted; if no other references to such globals exist, this may\n help in assuring that imported modules are still available at the\n time when the ``__del__()`` method is called.\n\nobject.__repr__(self)\n\n Called by the ``repr()`` built-in function and by string\n conversions (reverse quotes) to compute the "official" string\n representation of an object. If at all possible, this should look\n like a valid Python expression that could be used to recreate an\n object with the same value (given an appropriate environment). If\n this is not possible, a string of the form ``<...some useful\n description...>`` should be returned. The return value must be a\n string object. If a class defines ``__repr__()`` but not\n ``__str__()``, then ``__repr__()`` is also used when an "informal"\n string representation of instances of that class is required.\n\n This is typically used for debugging, so it is important that the\n representation is information-rich and unambiguous.\n\nobject.__str__(self)\n\n Called by the ``str()`` built-in function and by the ``print``\n statement to compute the "informal" string representation of an\n object. This differs from ``__repr__()`` in that it does not have\n to be a valid Python expression: a more convenient or concise\n representation may be used instead. The return value must be a\n string object.\n\nobject.__lt__(self, other)\nobject.__le__(self, other)\nobject.__eq__(self, other)\nobject.__ne__(self, other)\nobject.__gt__(self, other)\nobject.__ge__(self, other)\n\n New in version 2.1.\n\n These are the so-called "rich comparison" methods, and are called\n for comparison operators in preference to ``__cmp__()`` below. The\n correspondence between operator symbols and method names is as\n follows: ``xy`` call ``x.__ne__(y)``, ``x>y`` calls ``x.__gt__(y)``, and\n ``x>=y`` calls ``x.__ge__(y)``.\n\n A rich comparison method may return the singleton\n ``NotImplemented`` if it does not implement the operation for a\n given pair of arguments. By convention, ``False`` and ``True`` are\n returned for a successful comparison. However, these methods can\n return any value, so if the comparison operator is used in a\n Boolean context (e.g., in the condition of an ``if`` statement),\n Python will call ``bool()`` on the value to determine if the result\n is true or false.\n\n There are no implied relationships among the comparison operators.\n The truth of ``x==y`` does not imply that ``x!=y`` is false.\n Accordingly, when defining ``__eq__()``, one should also define\n ``__ne__()`` so that the operators will behave as expected. See\n the paragraph on ``__hash__()`` for some important notes on\n creating *hashable* objects which support custom comparison\n operations and are usable as dictionary keys.\n\n There are no swapped-argument versions of these methods (to be used\n when the left argument does not support the operation but the right\n argument does); rather, ``__lt__()`` and ``__gt__()`` are each\n other\'s reflection, ``__le__()`` and ``__ge__()`` are each other\'s\n reflection, and ``__eq__()`` and ``__ne__()`` are their own\n reflection.\n\n Arguments to rich comparison methods are never coerced.\n\nobject.__cmp__(self, other)\n\n Called by comparison operations if rich comparison (see above) is\n not defined. Should return a negative integer if ``self < other``,\n zero if ``self == other``, a positive integer if ``self > other``.\n If no ``__cmp__()``, ``__eq__()`` or ``__ne__()`` operation is\n defined, class instances are compared by object identity\n ("address"). See also the description of ``__hash__()`` for some\n important notes on creating *hashable* objects which support custom\n comparison operations and are usable as dictionary keys. (Note: the\n restriction that exceptions are not propagated by ``__cmp__()`` has\n been removed since Python 1.5.)\n\nobject.__rcmp__(self, other)\n\n Changed in version 2.1: No longer supported.\n\nobject.__hash__(self)\n\n Called by built-in function ``hash()`` and for operations on\n members of hashed collections including ``set``, ``frozenset``, and\n ``dict``. ``__hash__()`` should return an integer. The only\n required property is that objects which compare equal have the same\n hash value; it is advised to somehow mix together (e.g. using\n exclusive or) the hash values for the components of the object that\n also play a part in comparison of objects.\n\n If a class does not define a ``__cmp__()`` or ``__eq__()`` method\n it should not define a ``__hash__()`` operation either; if it\n defines ``__cmp__()`` or ``__eq__()`` but not ``__hash__()``, its\n instances will not be usable in hashed collections. If a class\n defines mutable objects and implements a ``__cmp__()`` or\n ``__eq__()`` method, it should not implement ``__hash__()``, since\n hashable collection implementations require that a object\'s hash\n value is immutable (if the object\'s hash value changes, it will be\n in the wrong hash bucket).\n\n User-defined classes have ``__cmp__()`` and ``__hash__()`` methods\n by default; with them, all objects compare unequal (except with\n themselves) and ``x.__hash__()`` returns ``id(x)``.\n\n Classes which inherit a ``__hash__()`` method from a parent class\n but change the meaning of ``__cmp__()`` or ``__eq__()`` such that\n the hash value returned is no longer appropriate (e.g. by switching\n to a value-based concept of equality instead of the default\n identity based equality) can explicitly flag themselves as being\n unhashable by setting ``__hash__ = None`` in the class definition.\n Doing so means that not only will instances of the class raise an\n appropriate ``TypeError`` when a program attempts to retrieve their\n hash value, but they will also be correctly identified as\n unhashable when checking ``isinstance(obj, collections.Hashable)``\n (unlike classes which define their own ``__hash__()`` to explicitly\n raise ``TypeError``).\n\n Changed in version 2.5: ``__hash__()`` may now also return a long\n integer object; the 32-bit integer is then derived from the hash of\n that object.\n\n Changed in version 2.6: ``__hash__`` may now be set to ``None`` to\n explicitly flag instances of a class as unhashable.\n\nobject.__nonzero__(self)\n\n Called to implement truth value testing and the built-in operation\n ``bool()``; should return ``False`` or ``True``, or their integer\n equivalents ``0`` or ``1``. When this method is not defined,\n ``__len__()`` is called, if it is defined, and the object is\n considered true if its result is nonzero. If a class defines\n neither ``__len__()`` nor ``__nonzero__()``, all its instances are\n considered true.\n\nobject.__unicode__(self)\n\n Called to implement ``unicode()`` builtin; should return a Unicode\n object. When this method is not defined, string conversion is\n attempted, and the result of string conversion is converted to\n Unicode using the system default encoding.\n', - 'debugger': u'\n``pdb`` --- The Python Debugger\n*******************************\n\nThe module ``pdb`` defines an interactive source code debugger for\nPython programs. It supports setting (conditional) breakpoints and\nsingle stepping at the source line level, inspection of stack frames,\nsource code listing, and evaluation of arbitrary Python code in the\ncontext of any stack frame. It also supports post-mortem debugging\nand can be called under program control.\n\nThe debugger is extensible --- it is actually defined as the class\n``Pdb``. This is currently undocumented but easily understood by\nreading the source. The extension interface uses the modules ``bdb``\n(undocumented) and ``cmd``.\n\nThe debugger\'s prompt is ``(Pdb)``. Typical usage to run a program\nunder control of the debugger is:\n\n >>> import pdb\n >>> import mymodule\n >>> pdb.run(\'mymodule.test()\')\n > (0)?()\n (Pdb) continue\n > (1)?()\n (Pdb) continue\n NameError: \'spam\'\n > (1)?()\n (Pdb)\n\n``pdb.py`` can also be invoked as a script to debug other scripts.\nFor example:\n\n python -m pdb myscript.py\n\nWhen invoked as a script, pdb will automatically enter post-mortem\ndebugging if the program being debugged exits abnormally. After post-\nmortem debugging (or after normal exit of the program), pdb will\nrestart the program. Automatic restarting preserves pdb\'s state (such\nas breakpoints) and in most cases is more useful than quitting the\ndebugger upon program\'s exit.\n\nNew in version 2.4: Restarting post-mortem behavior added.\n\nTypical usage to inspect a crashed program is:\n\n >>> import pdb\n >>> import mymodule\n >>> mymodule.test()\n Traceback (most recent call last):\n File "", line 1, in ?\n File "./mymodule.py", line 4, in test\n test2()\n File "./mymodule.py", line 3, in test2\n print spam\n NameError: spam\n >>> pdb.pm()\n > ./mymodule.py(3)test2()\n -> print spam\n (Pdb)\n\nThe module defines the following functions; each enters the debugger\nin a slightly different way:\n\npdb.run(statement[, globals[, locals]])\n\n Execute the *statement* (given as a string) under debugger control.\n The debugger prompt appears before any code is executed; you can\n set breakpoints and type ``continue``, or you can step through the\n statement using ``step`` or ``next`` (all these commands are\n explained below). The optional *globals* and *locals* arguments\n specify the environment in which the code is executed; by default\n the dictionary of the module ``__main__`` is used. (See the\n explanation of the ``exec`` statement or the ``eval()`` built-in\n function.)\n\npdb.runeval(expression[, globals[, locals]])\n\n Evaluate the *expression* (given as a string) under debugger\n control. When ``runeval()`` returns, it returns the value of the\n expression. Otherwise this function is similar to ``run()``.\n\npdb.runcall(function[, argument, ...])\n\n Call the *function* (a function or method object, not a string)\n with the given arguments. When ``runcall()`` returns, it returns\n whatever the function call returned. The debugger prompt appears\n as soon as the function is entered.\n\npdb.set_trace()\n\n Enter the debugger at the calling stack frame. This is useful to\n hard-code a breakpoint at a given point in a program, even if the\n code is not otherwise being debugged (e.g. when an assertion\n fails).\n\npdb.post_mortem([traceback])\n\n Enter post-mortem debugging of the given *traceback* object. If no\n *traceback* is given, it uses the one of the exception that is\n currently being handled (an exception must be being handled if the\n default is to be used).\n\npdb.pm()\n\n Enter post-mortem debugging of the traceback found in\n ``sys.last_traceback``.\n', + 'customization': u'\nBasic customization\n*******************\n\nobject.__new__(cls[, ...])\n\n Called to create a new instance of class *cls*. ``__new__()`` is a\n static method (special-cased so you need not declare it as such)\n that takes the class of which an instance was requested as its\n first argument. The remaining arguments are those passed to the\n object constructor expression (the call to the class). The return\n value of ``__new__()`` should be the new object instance (usually\n an instance of *cls*).\n\n Typical implementations create a new instance of the class by\n invoking the superclass\'s ``__new__()`` method using\n ``super(currentclass, cls).__new__(cls[, ...])`` with appropriate\n arguments and then modifying the newly-created instance as\n necessary before returning it.\n\n If ``__new__()`` returns an instance of *cls*, then the new\n instance\'s ``__init__()`` method will be invoked like\n ``__init__(self[, ...])``, where *self* is the new instance and the\n remaining arguments are the same as were passed to ``__new__()``.\n\n If ``__new__()`` does not return an instance of *cls*, then the new\n instance\'s ``__init__()`` method will not be invoked.\n\n ``__new__()`` is intended mainly to allow subclasses of immutable\n types (like int, str, or tuple) to customize instance creation. It\n is also commonly overridden in custom metaclasses in order to\n customize class creation.\n\nobject.__init__(self[, ...])\n\n Called when the instance is created. The arguments are those\n passed to the class constructor expression. If a base class has an\n ``__init__()`` method, the derived class\'s ``__init__()`` method,\n if any, must explicitly call it to ensure proper initialization of\n the base class part of the instance; for example:\n ``BaseClass.__init__(self, [args...])``. As a special constraint\n on constructors, no value may be returned; doing so will cause a\n ``TypeError`` to be raised at runtime.\n\nobject.__del__(self)\n\n Called when the instance is about to be destroyed. This is also\n called a destructor. If a base class has a ``__del__()`` method,\n the derived class\'s ``__del__()`` method, if any, must explicitly\n call it to ensure proper deletion of the base class part of the\n instance. Note that it is possible (though not recommended!) for\n the ``__del__()`` method to postpone destruction of the instance by\n creating a new reference to it. It may then be called at a later\n time when this new reference is deleted. It is not guaranteed that\n ``__del__()`` methods are called for objects that still exist when\n the interpreter exits.\n\n Note: ``del x`` doesn\'t directly call ``x.__del__()`` --- the former\n decrements the reference count for ``x`` by one, and the latter\n is only called when ``x``\'s reference count reaches zero. Some\n common situations that may prevent the reference count of an\n object from going to zero include: circular references between\n objects (e.g., a doubly-linked list or a tree data structure with\n parent and child pointers); a reference to the object on the\n stack frame of a function that caught an exception (the traceback\n stored in ``sys.exc_traceback`` keeps the stack frame alive); or\n a reference to the object on the stack frame that raised an\n unhandled exception in interactive mode (the traceback stored in\n ``sys.last_traceback`` keeps the stack frame alive). The first\n situation can only be remedied by explicitly breaking the cycles;\n the latter two situations can be resolved by storing ``None`` in\n ``sys.exc_traceback`` or ``sys.last_traceback``. Circular\n references which are garbage are detected when the option cycle\n detector is enabled (it\'s on by default), but can only be cleaned\n up if there are no Python-level ``__del__()`` methods involved.\n Refer to the documentation for the ``gc`` module for more\n information about how ``__del__()`` methods are handled by the\n cycle detector, particularly the description of the ``garbage``\n value.\n\n Warning: Due to the precarious circumstances under which ``__del__()``\n methods are invoked, exceptions that occur during their execution\n are ignored, and a warning is printed to ``sys.stderr`` instead.\n Also, when ``__del__()`` is invoked in response to a module being\n deleted (e.g., when execution of the program is done), other\n globals referenced by the ``__del__()`` method may already have\n been deleted or in the process of being torn down (e.g. the\n import machinery shutting down). For this reason, ``__del__()``\n methods should do the absolute minimum needed to maintain\n external invariants. Starting with version 1.5, Python\n guarantees that globals whose name begins with a single\n underscore are deleted from their module before other globals are\n deleted; if no other references to such globals exist, this may\n help in assuring that imported modules are still available at the\n time when the ``__del__()`` method is called.\n\nobject.__repr__(self)\n\n Called by the ``repr()`` built-in function and by string\n conversions (reverse quotes) to compute the "official" string\n representation of an object. If at all possible, this should look\n like a valid Python expression that could be used to recreate an\n object with the same value (given an appropriate environment). If\n this is not possible, a string of the form ``<...some useful\n description...>`` should be returned. The return value must be a\n string object. If a class defines ``__repr__()`` but not\n ``__str__()``, then ``__repr__()`` is also used when an "informal"\n string representation of instances of that class is required.\n\n This is typically used for debugging, so it is important that the\n representation is information-rich and unambiguous.\n\nobject.__str__(self)\n\n Called by the ``str()`` built-in function and by the ``print``\n statement to compute the "informal" string representation of an\n object. This differs from ``__repr__()`` in that it does not have\n to be a valid Python expression: a more convenient or concise\n representation may be used instead. The return value must be a\n string object.\n\nobject.__lt__(self, other)\nobject.__le__(self, other)\nobject.__eq__(self, other)\nobject.__ne__(self, other)\nobject.__gt__(self, other)\nobject.__ge__(self, other)\n\n New in version 2.1.\n\n These are the so-called "rich comparison" methods, and are called\n for comparison operators in preference to ``__cmp__()`` below. The\n correspondence between operator symbols and method names is as\n follows: ``xy`` call ``x.__ne__(y)``, ``x>y`` calls ``x.__gt__(y)``, and\n ``x>=y`` calls ``x.__ge__(y)``.\n\n A rich comparison method may return the singleton\n ``NotImplemented`` if it does not implement the operation for a\n given pair of arguments. By convention, ``False`` and ``True`` are\n returned for a successful comparison. However, these methods can\n return any value, so if the comparison operator is used in a\n Boolean context (e.g., in the condition of an ``if`` statement),\n Python will call ``bool()`` on the value to determine if the result\n is true or false.\n\n There are no implied relationships among the comparison operators.\n The truth of ``x==y`` does not imply that ``x!=y`` is false.\n Accordingly, when defining ``__eq__()``, one should also define\n ``__ne__()`` so that the operators will behave as expected. See\n the paragraph on ``__hash__()`` for some important notes on\n creating *hashable* objects which support custom comparison\n operations and are usable as dictionary keys.\n\n There are no swapped-argument versions of these methods (to be used\n when the left argument does not support the operation but the right\n argument does); rather, ``__lt__()`` and ``__gt__()`` are each\n other\'s reflection, ``__le__()`` and ``__ge__()`` are each other\'s\n reflection, and ``__eq__()`` and ``__ne__()`` are their own\n reflection.\n\n Arguments to rich comparison methods are never coerced.\n\n To automatically generate ordering operations from a single root\n operation, see the Total Ordering recipe in the ASPN cookbook.\n\nobject.__cmp__(self, other)\n\n Called by comparison operations if rich comparison (see above) is\n not defined. Should return a negative integer if ``self < other``,\n zero if ``self == other``, a positive integer if ``self > other``.\n If no ``__cmp__()``, ``__eq__()`` or ``__ne__()`` operation is\n defined, class instances are compared by object identity\n ("address"). See also the description of ``__hash__()`` for some\n important notes on creating *hashable* objects which support custom\n comparison operations and are usable as dictionary keys. (Note: the\n restriction that exceptions are not propagated by ``__cmp__()`` has\n been removed since Python 1.5.)\n\nobject.__rcmp__(self, other)\n\n Changed in version 2.1: No longer supported.\n\nobject.__hash__(self)\n\n Called by built-in function ``hash()`` and for operations on\n members of hashed collections including ``set``, ``frozenset``, and\n ``dict``. ``__hash__()`` should return an integer. The only\n required property is that objects which compare equal have the same\n hash value; it is advised to somehow mix together (e.g. using\n exclusive or) the hash values for the components of the object that\n also play a part in comparison of objects.\n\n If a class does not define a ``__cmp__()`` or ``__eq__()`` method\n it should not define a ``__hash__()`` operation either; if it\n defines ``__cmp__()`` or ``__eq__()`` but not ``__hash__()``, its\n instances will not be usable in hashed collections. If a class\n defines mutable objects and implements a ``__cmp__()`` or\n ``__eq__()`` method, it should not implement ``__hash__()``, since\n hashable collection implementations require that a object\'s hash\n value is immutable (if the object\'s hash value changes, it will be\n in the wrong hash bucket).\n\n User-defined classes have ``__cmp__()`` and ``__hash__()`` methods\n by default; with them, all objects compare unequal (except with\n themselves) and ``x.__hash__()`` returns ``id(x)``.\n\n Classes which inherit a ``__hash__()`` method from a parent class\n but change the meaning of ``__cmp__()`` or ``__eq__()`` such that\n the hash value returned is no longer appropriate (e.g. by switching\n to a value-based concept of equality instead of the default\n identity based equality) can explicitly flag themselves as being\n unhashable by setting ``__hash__ = None`` in the class definition.\n Doing so means that not only will instances of the class raise an\n appropriate ``TypeError`` when a program attempts to retrieve their\n hash value, but they will also be correctly identified as\n unhashable when checking ``isinstance(obj, collections.Hashable)``\n (unlike classes which define their own ``__hash__()`` to explicitly\n raise ``TypeError``).\n\n Changed in version 2.5: ``__hash__()`` may now also return a long\n integer object; the 32-bit integer is then derived from the hash of\n that object.\n\n Changed in version 2.6: ``__hash__`` may now be set to ``None`` to\n explicitly flag instances of a class as unhashable.\n\nobject.__nonzero__(self)\n\n Called to implement truth value testing and the built-in operation\n ``bool()``; should return ``False`` or ``True``, or their integer\n equivalents ``0`` or ``1``. When this method is not defined,\n ``__len__()`` is called, if it is defined, and the object is\n considered true if its result is nonzero. If a class defines\n neither ``__len__()`` nor ``__nonzero__()``, all its instances are\n considered true.\n\nobject.__unicode__(self)\n\n Called to implement ``unicode()`` built-in; should return a Unicode\n object. When this method is not defined, string conversion is\n attempted, and the result of string conversion is converted to\n Unicode using the system default encoding.\n', + 'debugger': u'\n``pdb`` --- The Python Debugger\n*******************************\n\nThe module ``pdb`` defines an interactive source code debugger for\nPython programs. It supports setting (conditional) breakpoints and\nsingle stepping at the source line level, inspection of stack frames,\nsource code listing, and evaluation of arbitrary Python code in the\ncontext of any stack frame. It also supports post-mortem debugging\nand can be called under program control.\n\nThe debugger is extensible --- it is actually defined as the class\n``Pdb``. This is currently undocumented but easily understood by\nreading the source. The extension interface uses the modules ``bdb``\n(undocumented) and ``cmd``.\n\nThe debugger\'s prompt is ``(Pdb)``. Typical usage to run a program\nunder control of the debugger is:\n\n >>> import pdb\n >>> import mymodule\n >>> pdb.run(\'mymodule.test()\')\n > (0)?()\n (Pdb) continue\n > (1)?()\n (Pdb) continue\n NameError: \'spam\'\n > (1)?()\n (Pdb)\n\n``pdb.py`` can also be invoked as a script to debug other scripts.\nFor example:\n\n python -m pdb myscript.py\n\nWhen invoked as a script, pdb will automatically enter post-mortem\ndebugging if the program being debugged exits abnormally. After post-\nmortem debugging (or after normal exit of the program), pdb will\nrestart the program. Automatic restarting preserves pdb\'s state (such\nas breakpoints) and in most cases is more useful than quitting the\ndebugger upon program\'s exit.\n\nNew in version 2.4: Restarting post-mortem behavior added.\n\nThe typical usage to break into the debugger from a running program is\nto insert\n\n import pdb; pdb.set_trace()\n\nat the location you want to break into the debugger. You can then\nstep through the code following this statement, and continue running\nwithout the debugger using the ``c`` command.\n\nThe typical usage to inspect a crashed program is:\n\n >>> import pdb\n >>> import mymodule\n >>> mymodule.test()\n Traceback (most recent call last):\n File "", line 1, in ?\n File "./mymodule.py", line 4, in test\n test2()\n File "./mymodule.py", line 3, in test2\n print spam\n NameError: spam\n >>> pdb.pm()\n > ./mymodule.py(3)test2()\n -> print spam\n (Pdb)\n\nThe module defines the following functions; each enters the debugger\nin a slightly different way:\n\npdb.run(statement[, globals[, locals]])\n\n Execute the *statement* (given as a string) under debugger control.\n The debugger prompt appears before any code is executed; you can\n set breakpoints and type ``continue``, or you can step through the\n statement using ``step`` or ``next`` (all these commands are\n explained below). The optional *globals* and *locals* arguments\n specify the environment in which the code is executed; by default\n the dictionary of the module ``__main__`` is used. (See the\n explanation of the ``exec`` statement or the ``eval()`` built-in\n function.)\n\npdb.runeval(expression[, globals[, locals]])\n\n Evaluate the *expression* (given as a string) under debugger\n control. When ``runeval()`` returns, it returns the value of the\n expression. Otherwise this function is similar to ``run()``.\n\npdb.runcall(function[, argument, ...])\n\n Call the *function* (a function or method object, not a string)\n with the given arguments. When ``runcall()`` returns, it returns\n whatever the function call returned. The debugger prompt appears\n as soon as the function is entered.\n\npdb.set_trace()\n\n Enter the debugger at the calling stack frame. This is useful to\n hard-code a breakpoint at a given point in a program, even if the\n code is not otherwise being debugged (e.g. when an assertion\n fails).\n\npdb.post_mortem([traceback])\n\n Enter post-mortem debugging of the given *traceback* object. If no\n *traceback* is given, it uses the one of the exception that is\n currently being handled (an exception must be being handled if the\n default is to be used).\n\npdb.pm()\n\n Enter post-mortem debugging of the traceback found in\n ``sys.last_traceback``.\n', 'del': u'\nThe ``del`` statement\n*********************\n\n del_stmt ::= "del" target_list\n\nDeletion is recursively defined very similar to the way assignment is\ndefined. Rather that spelling it out in full details, here are some\nhints.\n\nDeletion of a target list recursively deletes each target, from left\nto right.\n\nDeletion of a name removes the binding of that name from the local or\nglobal namespace, depending on whether the name occurs in a ``global``\nstatement in the same code block. If the name is unbound, a\n``NameError`` exception will be raised.\n\nIt is illegal to delete a name from the local namespace if it occurs\nas a free variable in a nested block.\n\nDeletion of attribute references, subscriptions and slicings is passed\nto the primary object involved; deletion of a slicing is in general\nequivalent to assignment of an empty slice of the right type (but even\nthis is determined by the sliced object).\n', 'dict': u'\nDictionary displays\n*******************\n\nA dictionary display is a possibly empty series of key/datum pairs\nenclosed in curly braces:\n\n dict_display ::= "{" [key_datum_list] "}"\n key_datum_list ::= key_datum ("," key_datum)* [","]\n key_datum ::= expression ":" expression\n\nA dictionary display yields a new dictionary object.\n\nThe key/datum pairs are evaluated from left to right to define the\nentries of the dictionary: each key object is used as a key into the\ndictionary to store the corresponding datum.\n\nRestrictions on the types of the key values are listed earlier in\nsection *The standard type hierarchy*. (To summarize, the key type\nshould be *hashable*, which excludes all mutable objects.) Clashes\nbetween duplicate keys are not detected; the last datum (textually\nrightmost in the display) stored for a given key value prevails.\n', 'dynamic-features': u'\nInteraction with dynamic features\n*********************************\n\nThere are several cases where Python statements are illegal when used\nin conjunction with nested scopes that contain free variables.\n\nIf a variable is referenced in an enclosing scope, it is illegal to\ndelete the name. An error will be reported at compile time.\n\nIf the wild card form of import --- ``import *`` --- is used in a\nfunction and the function contains or is a nested block with free\nvariables, the compiler will raise a ``SyntaxError``.\n\nIf ``exec`` is used in a function and the function contains or is a\nnested block with free variables, the compiler will raise a\n``SyntaxError`` unless the exec explicitly specifies the local\nnamespace for the ``exec``. (In other words, ``exec obj`` would be\nillegal, but ``exec obj in ns`` would be legal.)\n\nThe ``eval()``, ``execfile()``, and ``input()`` functions and the\n``exec`` statement do not have access to the full environment for\nresolving names. Names may be resolved in the local and global\nnamespaces of the caller. Free variables are not resolved in the\nnearest enclosing namespace, but in the global namespace. [1] The\n``exec`` statement and the ``eval()`` and ``execfile()`` functions\nhave optional arguments to override the global and local namespace.\nIf only one namespace is specified, it is used for both.\n', 'else': u'\nThe ``if`` statement\n********************\n\nThe ``if`` statement is used for conditional execution:\n\n if_stmt ::= "if" expression ":" suite\n ( "elif" expression ":" suite )*\n ["else" ":" suite]\n\nIt selects exactly one of the suites by evaluating the expressions one\nby one until one is found to be true (see section *Boolean operations*\nfor the definition of true and false); then that suite is executed\n(and no other part of the ``if`` statement is executed or evaluated).\nIf all expressions are false, the suite of the ``else`` clause, if\npresent, is executed.\n', 'exceptions': u'\nExceptions\n**********\n\nExceptions are a means of breaking out of the normal flow of control\nof a code block in order to handle errors or other exceptional\nconditions. An exception is *raised* at the point where the error is\ndetected; it may be *handled* by the surrounding code block or by any\ncode block that directly or indirectly invoked the code block where\nthe error occurred.\n\nThe Python interpreter raises an exception when it detects a run-time\nerror (such as division by zero). A Python program can also\nexplicitly raise an exception with the ``raise`` statement. Exception\nhandlers are specified with the ``try`` ... ``except`` statement. The\n``finally`` clause of such a statement can be used to specify cleanup\ncode which does not handle the exception, but is executed whether an\nexception occurred or not in the preceding code.\n\nPython uses the "termination" model of error handling: an exception\nhandler can find out what happened and continue execution at an outer\nlevel, but it cannot repair the cause of the error and retry the\nfailing operation (except by re-entering the offending piece of code\nfrom the top).\n\nWhen an exception is not handled at all, the interpreter terminates\nexecution of the program, or returns to its interactive main loop. In\neither case, it prints a stack backtrace, except when the exception is\n``SystemExit``.\n\nExceptions are identified by class instances. The ``except`` clause\nis selected depending on the class of the instance: it must reference\nthe class of the instance or a base class thereof. The instance can\nbe received by the handler and can carry additional information about\nthe exceptional condition.\n\nExceptions can also be identified by strings, in which case the\n``except`` clause is selected by object identity. An arbitrary value\ncan be raised along with the identifying string which can be passed to\nthe handler.\n\nNote: Messages to exceptions are not part of the Python API. Their\n contents may change from one version of Python to the next without\n warning and should not be relied on by code which will run under\n multiple versions of the interpreter.\n\nSee also the description of the ``try`` statement in section *The try\nstatement* and ``raise`` statement in section *The raise statement*.\n\n-[ Footnotes ]-\n\n[1] This limitation occurs because the code that is executed by these\n operations is not available at the time the module is compiled.\n', 'exec': u'\nThe ``exec`` statement\n**********************\n\n exec_stmt ::= "exec" or_expr ["in" expression ["," expression]]\n\nThis statement supports dynamic execution of Python code. The first\nexpression should evaluate to either a string, an open file object, or\na code object. If it is a string, the string is parsed as a suite of\nPython statements which is then executed (unless a syntax error\noccurs). [1] If it is an open file, the file is parsed until EOF and\nexecuted. If it is a code object, it is simply executed. In all\ncases, the code that\'s executed is expected to be valid as file input\n(see section *File input*). Be aware that the ``return`` and\n``yield`` statements may not be used outside of function definitions\neven within the context of code passed to the ``exec`` statement.\n\nIn all cases, if the optional parts are omitted, the code is executed\nin the current scope. If only the first expression after ``in`` is\nspecified, it should be a dictionary, which will be used for both the\nglobal and the local variables. If two expressions are given, they\nare used for the global and local variables, respectively. If\nprovided, *locals* can be any mapping object.\n\nChanged in version 2.4: Formerly, *locals* was required to be a\ndictionary.\n\nAs a side effect, an implementation may insert additional keys into\nthe dictionaries given besides those corresponding to variable names\nset by the executed code. For example, the current implementation may\nadd a reference to the dictionary of the built-in module\n``__builtin__`` under the key ``__builtins__`` (!).\n\n**Programmer\'s hints:** dynamic evaluation of expressions is supported\nby the built-in function ``eval()``. The built-in functions\n``globals()`` and ``locals()`` return the current global and local\ndictionary, respectively, which may be useful to pass around for use\nby ``exec``.\n\n-[ Footnotes ]-\n\n[1] Note that the parser only accepts the Unix-style end of line\n convention. If you are reading the code from a file, make sure to\n use universal newline mode to convert Windows or Mac-style\n newlines.\n', - 'execmodel': u'\nExecution model\n***************\n\n\nNaming and binding\n==================\n\n*Names* refer to objects. Names are introduced by name binding\noperations. Each occurrence of a name in the program text refers to\nthe *binding* of that name established in the innermost function block\ncontaining the use.\n\nA *block* is a piece of Python program text that is executed as a\nunit. The following are blocks: a module, a function body, and a class\ndefinition. Each command typed interactively is a block. A script\nfile (a file given as standard input to the interpreter or specified\non the interpreter command line the first argument) is a code block.\nA script command (a command specified on the interpreter command line\nwith the \'**-c**\' option) is a code block. The file read by the\nbuilt-in function ``execfile()`` is a code block. The string argument\npassed to the built-in function ``eval()`` and to the ``exec``\nstatement is a code block. The expression read and evaluated by the\nbuilt-in function ``input()`` is a code block.\n\nA code block is executed in an *execution frame*. A frame contains\nsome administrative information (used for debugging) and determines\nwhere and how execution continues after the code block\'s execution has\ncompleted.\n\nA *scope* defines the visibility of a name within a block. If a local\nvariable is defined in a block, its scope includes that block. If the\ndefinition occurs in a function block, the scope extends to any blocks\ncontained within the defining one, unless a contained block introduces\na different binding for the name. The scope of names defined in a\nclass block is limited to the class block; it does not extend to the\ncode blocks of methods -- this includes generator expressions since\nthey are implemented using a function scope. This means that the\nfollowing will fail:\n\n class A:\n a = 42\n b = list(a + i for i in range(10))\n\nWhen a name is used in a code block, it is resolved using the nearest\nenclosing scope. The set of all such scopes visible to a code block\nis called the block\'s *environment*.\n\nIf a name is bound in a block, it is a local variable of that block.\nIf a name is bound at the module level, it is a global variable. (The\nvariables of the module code block are local and global.) If a\nvariable is used in a code block but not defined there, it is a *free\nvariable*.\n\nWhen a name is not found at all, a ``NameError`` exception is raised.\nIf the name refers to a local variable that has not been bound, a\n``UnboundLocalError`` exception is raised. ``UnboundLocalError`` is a\nsubclass of ``NameError``.\n\nThe following constructs bind names: formal parameters to functions,\n``import`` statements, class and function definitions (these bind the\nclass or function name in the defining block), and targets that are\nidentifiers if occurring in an assignment, ``for`` loop header, in the\nsecond position of an ``except`` clause header or after ``as`` in a\n``with`` statement. The ``import`` statement of the form ``from ...\nimport *`` binds all names defined in the imported module, except\nthose beginning with an underscore. This form may only be used at the\nmodule level.\n\nA target occurring in a ``del`` statement is also considered bound for\nthis purpose (though the actual semantics are to unbind the name). It\nis illegal to unbind a name that is referenced by an enclosing scope;\nthe compiler will report a ``SyntaxError``.\n\nEach assignment or import statement occurs within a block defined by a\nclass or function definition or at the module level (the top-level\ncode block).\n\nIf a name binding operation occurs anywhere within a code block, all\nuses of the name within the block are treated as references to the\ncurrent block. This can lead to errors when a name is used within a\nblock before it is bound. This rule is subtle. Python lacks\ndeclarations and allows name binding operations to occur anywhere\nwithin a code block. The local variables of a code block can be\ndetermined by scanning the entire text of the block for name binding\noperations.\n\nIf the global statement occurs within a block, all uses of the name\nspecified in the statement refer to the binding of that name in the\ntop-level namespace. Names are resolved in the top-level namespace by\nsearching the global namespace, i.e. the namespace of the module\ncontaining the code block, and the builtin namespace, the namespace of\nthe module ``__builtin__``. The global namespace is searched first.\nIf the name is not found there, the builtin namespace is searched.\nThe global statement must precede all uses of the name.\n\nThe built-in namespace associated with the execution of a code block\nis actually found by looking up the name ``__builtins__`` in its\nglobal namespace; this should be a dictionary or a module (in the\nlatter case the module\'s dictionary is used). By default, when in the\n``__main__`` module, ``__builtins__`` is the built-in module\n``__builtin__`` (note: no \'s\'); when in any other module,\n``__builtins__`` is an alias for the dictionary of the ``__builtin__``\nmodule itself. ``__builtins__`` can be set to a user-created\ndictionary to create a weak form of restricted execution.\n\nNote: Users should not touch ``__builtins__``; it is strictly an\n implementation detail. Users wanting to override values in the\n built-in namespace should ``import`` the ``__builtin__`` (no \'s\')\n module and modify its attributes appropriately.\n\nThe namespace for a module is automatically created the first time a\nmodule is imported. The main module for a script is always called\n``__main__``.\n\nThe global statement has the same scope as a name binding operation in\nthe same block. If the nearest enclosing scope for a free variable\ncontains a global statement, the free variable is treated as a global.\n\nA class definition is an executable statement that may use and define\nnames. These references follow the normal rules for name resolution.\nThe namespace of the class definition becomes the attribute dictionary\nof the class. Names defined at the class scope are not visible in\nmethods.\n\n\nInteraction with dynamic features\n---------------------------------\n\nThere are several cases where Python statements are illegal when used\nin conjunction with nested scopes that contain free variables.\n\nIf a variable is referenced in an enclosing scope, it is illegal to\ndelete the name. An error will be reported at compile time.\n\nIf the wild card form of import --- ``import *`` --- is used in a\nfunction and the function contains or is a nested block with free\nvariables, the compiler will raise a ``SyntaxError``.\n\nIf ``exec`` is used in a function and the function contains or is a\nnested block with free variables, the compiler will raise a\n``SyntaxError`` unless the exec explicitly specifies the local\nnamespace for the ``exec``. (In other words, ``exec obj`` would be\nillegal, but ``exec obj in ns`` would be legal.)\n\nThe ``eval()``, ``execfile()``, and ``input()`` functions and the\n``exec`` statement do not have access to the full environment for\nresolving names. Names may be resolved in the local and global\nnamespaces of the caller. Free variables are not resolved in the\nnearest enclosing namespace, but in the global namespace. [1] The\n``exec`` statement and the ``eval()`` and ``execfile()`` functions\nhave optional arguments to override the global and local namespace.\nIf only one namespace is specified, it is used for both.\n\n\nExceptions\n==========\n\nExceptions are a means of breaking out of the normal flow of control\nof a code block in order to handle errors or other exceptional\nconditions. An exception is *raised* at the point where the error is\ndetected; it may be *handled* by the surrounding code block or by any\ncode block that directly or indirectly invoked the code block where\nthe error occurred.\n\nThe Python interpreter raises an exception when it detects a run-time\nerror (such as division by zero). A Python program can also\nexplicitly raise an exception with the ``raise`` statement. Exception\nhandlers are specified with the ``try`` ... ``except`` statement. The\n``finally`` clause of such a statement can be used to specify cleanup\ncode which does not handle the exception, but is executed whether an\nexception occurred or not in the preceding code.\n\nPython uses the "termination" model of error handling: an exception\nhandler can find out what happened and continue execution at an outer\nlevel, but it cannot repair the cause of the error and retry the\nfailing operation (except by re-entering the offending piece of code\nfrom the top).\n\nWhen an exception is not handled at all, the interpreter terminates\nexecution of the program, or returns to its interactive main loop. In\neither case, it prints a stack backtrace, except when the exception is\n``SystemExit``.\n\nExceptions are identified by class instances. The ``except`` clause\nis selected depending on the class of the instance: it must reference\nthe class of the instance or a base class thereof. The instance can\nbe received by the handler and can carry additional information about\nthe exceptional condition.\n\nExceptions can also be identified by strings, in which case the\n``except`` clause is selected by object identity. An arbitrary value\ncan be raised along with the identifying string which can be passed to\nthe handler.\n\nNote: Messages to exceptions are not part of the Python API. Their\n contents may change from one version of Python to the next without\n warning and should not be relied on by code which will run under\n multiple versions of the interpreter.\n\nSee also the description of the ``try`` statement in section *The try\nstatement* and ``raise`` statement in section *The raise statement*.\n\n-[ Footnotes ]-\n\n[1] This limitation occurs because the code that is executed by these\n operations is not available at the time the module is compiled.\n', + 'execmodel': u'\nExecution model\n***************\n\n\nNaming and binding\n==================\n\n*Names* refer to objects. Names are introduced by name binding\noperations. Each occurrence of a name in the program text refers to\nthe *binding* of that name established in the innermost function block\ncontaining the use.\n\nA *block* is a piece of Python program text that is executed as a\nunit. The following are blocks: a module, a function body, and a class\ndefinition. Each command typed interactively is a block. A script\nfile (a file given as standard input to the interpreter or specified\non the interpreter command line the first argument) is a code block.\nA script command (a command specified on the interpreter command line\nwith the \'**-c**\' option) is a code block. The file read by the\nbuilt-in function ``execfile()`` is a code block. The string argument\npassed to the built-in function ``eval()`` and to the ``exec``\nstatement is a code block. The expression read and evaluated by the\nbuilt-in function ``input()`` is a code block.\n\nA code block is executed in an *execution frame*. A frame contains\nsome administrative information (used for debugging) and determines\nwhere and how execution continues after the code block\'s execution has\ncompleted.\n\nA *scope* defines the visibility of a name within a block. If a local\nvariable is defined in a block, its scope includes that block. If the\ndefinition occurs in a function block, the scope extends to any blocks\ncontained within the defining one, unless a contained block introduces\na different binding for the name. The scope of names defined in a\nclass block is limited to the class block; it does not extend to the\ncode blocks of methods -- this includes generator expressions since\nthey are implemented using a function scope. This means that the\nfollowing will fail:\n\n class A:\n a = 42\n b = list(a + i for i in range(10))\n\nWhen a name is used in a code block, it is resolved using the nearest\nenclosing scope. The set of all such scopes visible to a code block\nis called the block\'s *environment*.\n\nIf a name is bound in a block, it is a local variable of that block.\nIf a name is bound at the module level, it is a global variable. (The\nvariables of the module code block are local and global.) If a\nvariable is used in a code block but not defined there, it is a *free\nvariable*.\n\nWhen a name is not found at all, a ``NameError`` exception is raised.\nIf the name refers to a local variable that has not been bound, a\n``UnboundLocalError`` exception is raised. ``UnboundLocalError`` is a\nsubclass of ``NameError``.\n\nThe following constructs bind names: formal parameters to functions,\n``import`` statements, class and function definitions (these bind the\nclass or function name in the defining block), and targets that are\nidentifiers if occurring in an assignment, ``for`` loop header, in the\nsecond position of an ``except`` clause header or after ``as`` in a\n``with`` statement. The ``import`` statement of the form ``from ...\nimport *`` binds all names defined in the imported module, except\nthose beginning with an underscore. This form may only be used at the\nmodule level.\n\nA target occurring in a ``del`` statement is also considered bound for\nthis purpose (though the actual semantics are to unbind the name). It\nis illegal to unbind a name that is referenced by an enclosing scope;\nthe compiler will report a ``SyntaxError``.\n\nEach assignment or import statement occurs within a block defined by a\nclass or function definition or at the module level (the top-level\ncode block).\n\nIf a name binding operation occurs anywhere within a code block, all\nuses of the name within the block are treated as references to the\ncurrent block. This can lead to errors when a name is used within a\nblock before it is bound. This rule is subtle. Python lacks\ndeclarations and allows name binding operations to occur anywhere\nwithin a code block. The local variables of a code block can be\ndetermined by scanning the entire text of the block for name binding\noperations.\n\nIf the global statement occurs within a block, all uses of the name\nspecified in the statement refer to the binding of that name in the\ntop-level namespace. Names are resolved in the top-level namespace by\nsearching the global namespace, i.e. the namespace of the module\ncontaining the code block, and the builtins namespace, the namespace\nof the module ``__builtin__``. The global namespace is searched\nfirst. If the name is not found there, the builtins namespace is\nsearched. The global statement must precede all uses of the name.\n\nThe built-in namespace associated with the execution of a code block\nis actually found by looking up the name ``__builtins__`` in its\nglobal namespace; this should be a dictionary or a module (in the\nlatter case the module\'s dictionary is used). By default, when in the\n``__main__`` module, ``__builtins__`` is the built-in module\n``__builtin__`` (note: no \'s\'); when in any other module,\n``__builtins__`` is an alias for the dictionary of the ``__builtin__``\nmodule itself. ``__builtins__`` can be set to a user-created\ndictionary to create a weak form of restricted execution.\n\n**CPython implementation detail:** Users should not touch\n``__builtins__``; it is strictly an implementation detail. Users\nwanting to override values in the built-in namespace should ``import``\nthe ``__builtin__`` (no \'s\') module and modify its attributes\nappropriately.\n\nThe namespace for a module is automatically created the first time a\nmodule is imported. The main module for a script is always called\n``__main__``.\n\nThe global statement has the same scope as a name binding operation in\nthe same block. If the nearest enclosing scope for a free variable\ncontains a global statement, the free variable is treated as a global.\n\nA class definition is an executable statement that may use and define\nnames. These references follow the normal rules for name resolution.\nThe namespace of the class definition becomes the attribute dictionary\nof the class. Names defined at the class scope are not visible in\nmethods.\n\n\nInteraction with dynamic features\n---------------------------------\n\nThere are several cases where Python statements are illegal when used\nin conjunction with nested scopes that contain free variables.\n\nIf a variable is referenced in an enclosing scope, it is illegal to\ndelete the name. An error will be reported at compile time.\n\nIf the wild card form of import --- ``import *`` --- is used in a\nfunction and the function contains or is a nested block with free\nvariables, the compiler will raise a ``SyntaxError``.\n\nIf ``exec`` is used in a function and the function contains or is a\nnested block with free variables, the compiler will raise a\n``SyntaxError`` unless the exec explicitly specifies the local\nnamespace for the ``exec``. (In other words, ``exec obj`` would be\nillegal, but ``exec obj in ns`` would be legal.)\n\nThe ``eval()``, ``execfile()``, and ``input()`` functions and the\n``exec`` statement do not have access to the full environment for\nresolving names. Names may be resolved in the local and global\nnamespaces of the caller. Free variables are not resolved in the\nnearest enclosing namespace, but in the global namespace. [1] The\n``exec`` statement and the ``eval()`` and ``execfile()`` functions\nhave optional arguments to override the global and local namespace.\nIf only one namespace is specified, it is used for both.\n\n\nExceptions\n==========\n\nExceptions are a means of breaking out of the normal flow of control\nof a code block in order to handle errors or other exceptional\nconditions. An exception is *raised* at the point where the error is\ndetected; it may be *handled* by the surrounding code block or by any\ncode block that directly or indirectly invoked the code block where\nthe error occurred.\n\nThe Python interpreter raises an exception when it detects a run-time\nerror (such as division by zero). A Python program can also\nexplicitly raise an exception with the ``raise`` statement. Exception\nhandlers are specified with the ``try`` ... ``except`` statement. The\n``finally`` clause of such a statement can be used to specify cleanup\ncode which does not handle the exception, but is executed whether an\nexception occurred or not in the preceding code.\n\nPython uses the "termination" model of error handling: an exception\nhandler can find out what happened and continue execution at an outer\nlevel, but it cannot repair the cause of the error and retry the\nfailing operation (except by re-entering the offending piece of code\nfrom the top).\n\nWhen an exception is not handled at all, the interpreter terminates\nexecution of the program, or returns to its interactive main loop. In\neither case, it prints a stack backtrace, except when the exception is\n``SystemExit``.\n\nExceptions are identified by class instances. The ``except`` clause\nis selected depending on the class of the instance: it must reference\nthe class of the instance or a base class thereof. The instance can\nbe received by the handler and can carry additional information about\nthe exceptional condition.\n\nExceptions can also be identified by strings, in which case the\n``except`` clause is selected by object identity. An arbitrary value\ncan be raised along with the identifying string which can be passed to\nthe handler.\n\nNote: Messages to exceptions are not part of the Python API. Their\n contents may change from one version of Python to the next without\n warning and should not be relied on by code which will run under\n multiple versions of the interpreter.\n\nSee also the description of the ``try`` statement in section *The try\nstatement* and ``raise`` statement in section *The raise statement*.\n\n-[ Footnotes ]-\n\n[1] This limitation occurs because the code that is executed by these\n operations is not available at the time the module is compiled.\n', 'exprlists': u'\nExpression lists\n****************\n\n expression_list ::= expression ( "," expression )* [","]\n\nAn expression list containing at least one comma yields a tuple. The\nlength of the tuple is the number of expressions in the list. The\nexpressions are evaluated from left to right.\n\nThe trailing comma is required only to create a single tuple (a.k.a. a\n*singleton*); it is optional in all other cases. A single expression\nwithout a trailing comma doesn\'t create a tuple, but rather yields the\nvalue of that expression. (To create an empty tuple, use an empty pair\nof parentheses: ``()``.)\n', 'floating': u'\nFloating point literals\n***********************\n\nFloating point literals are described by the following lexical\ndefinitions:\n\n floatnumber ::= pointfloat | exponentfloat\n pointfloat ::= [intpart] fraction | intpart "."\n exponentfloat ::= (intpart | pointfloat) exponent\n intpart ::= digit+\n fraction ::= "." digit+\n exponent ::= ("e" | "E") ["+" | "-"] digit+\n\nNote that the integer and exponent parts of floating point numbers can\nlook like octal integers, but are interpreted using radix 10. For\nexample, ``077e010`` is legal, and denotes the same number as\n``77e10``. The allowed range of floating point literals is\nimplementation-dependent. Some examples of floating point literals:\n\n 3.14 10. .001 1e100 3.14e-10 0e0\n\nNote that numeric literals do not include a sign; a phrase like ``-1``\nis actually an expression composed of the unary operator ``-`` and the\nliteral ``1``.\n', 'for': u'\nThe ``for`` statement\n*********************\n\nThe ``for`` statement is used to iterate over the elements of a\nsequence (such as a string, tuple or list) or other iterable object:\n\n for_stmt ::= "for" target_list "in" expression_list ":" suite\n ["else" ":" suite]\n\nThe expression list is evaluated once; it should yield an iterable\nobject. An iterator is created for the result of the\n``expression_list``. The suite is then executed once for each item\nprovided by the iterator, in the order of ascending indices. Each\nitem in turn is assigned to the target list using the standard rules\nfor assignments, and then the suite is executed. When the items are\nexhausted (which is immediately when the sequence is empty), the suite\nin the ``else`` clause, if present, is executed, and the loop\nterminates.\n\nA ``break`` statement executed in the first suite terminates the loop\nwithout executing the ``else`` clause\'s suite. A ``continue``\nstatement executed in the first suite skips the rest of the suite and\ncontinues with the next item, or with the ``else`` clause if there was\nno next item.\n\nThe suite may assign to the variable(s) in the target list; this does\nnot affect the next item assigned to it.\n\nThe target list is not deleted when the loop is finished, but if the\nsequence is empty, it will not have been assigned to at all by the\nloop. Hint: the built-in function ``range()`` returns a sequence of\nintegers suitable to emulate the effect of Pascal\'s ``for i := a to b\ndo``; e.g., ``range(3)`` returns the list ``[0, 1, 2]``.\n\nNote: There is a subtlety when the sequence is being modified by the loop\n (this can only occur for mutable sequences, i.e. lists). An internal\n counter is used to keep track of which item is used next, and this\n is incremented on each iteration. When this counter has reached the\n length of the sequence the loop terminates. This means that if the\n suite deletes the current (or a previous) item from the sequence,\n the next item will be skipped (since it gets the index of the\n current item which has already been treated). Likewise, if the\n suite inserts an item in the sequence before the current item, the\n current item will be treated again the next time through the loop.\n This can lead to nasty bugs that can be avoided by making a\n temporary copy using a slice of the whole sequence, e.g.,\n\n for x in a[:]:\n if x < 0: a.remove(x)\n', - 'formatstrings': u'\nFormat String Syntax\n********************\n\nThe ``str.format()`` method and the ``Formatter`` class share the same\nsyntax for format strings (although in the case of ``Formatter``,\nsubclasses can define their own format string syntax.)\n\nFormat strings contain "replacement fields" surrounded by curly braces\n``{}``. Anything that is not contained in braces is considered literal\ntext, which is copied unchanged to the output. If you need to include\na brace character in the literal text, it can be escaped by doubling:\n``{{`` and ``}}``.\n\nThe grammar for a replacement field is as follows:\n\n replacement_field ::= "{" field_name ["!" conversion] [":" format_spec] "}"\n field_name ::= (identifier | integer) ("." attribute_name | "[" element_index "]")*\n attribute_name ::= identifier\n element_index ::= integer\n conversion ::= "r" | "s"\n format_spec ::= \n\nIn less formal terms, the replacement field starts with a\n*field_name*, which can either be a number (for a positional\nargument), or an identifier (for keyword arguments). Following this\nis an optional *conversion* field, which is preceded by an exclamation\npoint ``\'!\'``, and a *format_spec*, which is preceded by a colon\n``\':\'``.\n\nThe *field_name* itself begins with either a number or a keyword. If\nit\'s a number, it refers to a positional argument, and if it\'s a\nkeyword it refers to a named keyword argument. This can be followed\nby any number of index or attribute expressions. An expression of the\nform ``\'.name\'`` selects the named attribute using ``getattr()``,\nwhile an expression of the form ``\'[index]\'`` does an index lookup\nusing ``__getitem__()``.\n\nSome simple format string examples:\n\n "First, thou shalt count to {0}" # References first positional argument\n "My quest is {name}" # References keyword argument \'name\'\n "Weight in tons {0.weight}" # \'weight\' attribute of first positional arg\n "Units destroyed: {players[0]}" # First element of keyword argument \'players\'.\n\nThe *conversion* field causes a type coercion before formatting.\nNormally, the job of formatting a value is done by the\n``__format__()`` method of the value itself. However, in some cases\nit is desirable to force a type to be formatted as a string,\noverriding its own definition of formatting. By converting the value\nto a string before calling ``__format__()``, the normal formatting\nlogic is bypassed.\n\nTwo conversion flags are currently supported: ``\'!s\'`` which calls\n``str()`` on the value, and ``\'!r\'`` which calls ``repr()``.\n\nSome examples:\n\n "Harold\'s a clever {0!s}" # Calls str() on the argument first\n "Bring out the holy {name!r}" # Calls repr() on the argument first\n\nThe *format_spec* field contains a specification of how the value\nshould be presented, including such details as field width, alignment,\npadding, decimal precision and so on. Each value type can define it\'s\nown "formatting mini-language" or interpretation of the *format_spec*.\n\nMost built-in types support a common formatting mini-language, which\nis described in the next section.\n\nA *format_spec* field can also include nested replacement fields\nwithin it. These nested replacement fields can contain only a field\nname; conversion flags and format specifications are not allowed. The\nreplacement fields within the format_spec are substituted before the\n*format_spec* string is interpreted. This allows the formatting of a\nvalue to be dynamically specified.\n\nFor example, suppose you wanted to have a replacement field whose\nfield width is determined by another variable:\n\n "A man with two {0:{1}}".format("noses", 10)\n\nThis would first evaluate the inner replacement field, making the\nformat string effectively:\n\n "A man with two {0:10}"\n\nThen the outer replacement field would be evaluated, producing:\n\n "noses "\n\nWhich is substituted into the string, yielding:\n\n "A man with two noses "\n\n(The extra space is because we specified a field width of 10, and\nbecause left alignment is the default for strings.)\n\n\nFormat Specification Mini-Language\n==================================\n\n"Format specifications" are used within replacement fields contained\nwithin a format string to define how individual values are presented\n(see *Format String Syntax*.) They can also be passed directly to the\nbuiltin ``format()`` function. Each formattable type may define how\nthe format specification is to be interpreted.\n\nMost built-in types implement the following options for format\nspecifications, although some of the formatting options are only\nsupported by the numeric types.\n\nA general convention is that an empty format string (``""``) produces\nthe same result as if you had called ``str()`` on the value.\n\nThe general form of a *standard format specifier* is:\n\n format_spec ::= [[fill]align][sign][#][0][width][.precision][type]\n fill ::= \n align ::= "<" | ">" | "=" | "^"\n sign ::= "+" | "-" | " "\n width ::= integer\n precision ::= integer\n type ::= "b" | "c" | "d" | "e" | "E" | "f" | "F" | "g" | "G" | "n" | "o" | "x" | "X" | "%"\n\nThe *fill* character can be any character other than \'}\' (which\nsignifies the end of the field). The presence of a fill character is\nsignaled by the *next* character, which must be one of the alignment\noptions. If the second character of *format_spec* is not a valid\nalignment option, then it is assumed that both the fill character and\nthe alignment option are absent.\n\nThe meaning of the various alignment options is as follows:\n\n +-----------+------------------------------------------------------------+\n | Option | Meaning |\n +===========+============================================================+\n | ``\'<\'`` | Forces the field to be left-aligned within the available |\n | | space (This is the default.) |\n +-----------+------------------------------------------------------------+\n | ``\'>\'`` | Forces the field to be right-aligned within the available |\n | | space. |\n +-----------+------------------------------------------------------------+\n | ``\'=\'`` | Forces the padding to be placed after the sign (if any) |\n | | but before the digits. This is used for printing fields |\n | | in the form \'+000000120\'. This alignment option is only |\n | | valid for numeric types. |\n +-----------+------------------------------------------------------------+\n | ``\'^\'`` | Forces the field to be centered within the available |\n | | space. |\n +-----------+------------------------------------------------------------+\n\nNote that unless a minimum field width is defined, the field width\nwill always be the same size as the data to fill it, so that the\nalignment option has no meaning in this case.\n\nThe *sign* option is only valid for number types, and can be one of\nthe following:\n\n +-----------+------------------------------------------------------------+\n | Option | Meaning |\n +===========+============================================================+\n | ``\'+\'`` | indicates that a sign should be used for both positive as |\n | | well as negative numbers. |\n +-----------+------------------------------------------------------------+\n | ``\'-\'`` | indicates that a sign should be used only for negative |\n | | numbers (this is the default behavior). |\n +-----------+------------------------------------------------------------+\n | space | indicates that a leading space should be used on positive |\n | | numbers, and a minus sign on negative numbers. |\n +-----------+------------------------------------------------------------+\n\nThe ``\'#\'`` option is only valid for integers, and only for binary,\noctal, or hexadecimal output. If present, it specifies that the\noutput will be prefixed by ``\'0b\'``, ``\'0o\'``, or ``\'0x\'``,\nrespectively.\n\n*width* is a decimal integer defining the minimum field width. If not\nspecified, then the field width will be determined by the content.\n\nIf the *width* field is preceded by a zero (``\'0\'``) character, this\nenables zero-padding. This is equivalent to an *alignment* type of\n``\'=\'`` and a *fill* character of ``\'0\'``.\n\nThe *precision* is a decimal number indicating how many digits should\nbe displayed after the decimal point for a floating point value\nformatted with ``\'f\'`` and ``\'F\'``, or before and after the decimal\npoint for a floating point value formatted with ``\'g\'`` or ``\'G\'``.\nFor non-number types the field indicates the maximum field size - in\nother words, how many characters will be used from the field content.\nThe *precision* is not allowed for integer values.\n\nFinally, the *type* determines how the data should be presented.\n\nThe available integer presentation types are:\n\n +-----------+------------------------------------------------------------+\n | Type | Meaning |\n +===========+============================================================+\n | ``\'b\'`` | Binary format. Outputs the number in base 2. |\n +-----------+------------------------------------------------------------+\n | ``\'c\'`` | Character. Converts the integer to the corresponding |\n | | unicode character before printing. |\n +-----------+------------------------------------------------------------+\n | ``\'d\'`` | Decimal Integer. Outputs the number in base 10. |\n +-----------+------------------------------------------------------------+\n | ``\'o\'`` | Octal format. Outputs the number in base 8. |\n +-----------+------------------------------------------------------------+\n | ``\'x\'`` | Hex format. Outputs the number in base 16, using lower- |\n | | case letters for the digits above 9. |\n +-----------+------------------------------------------------------------+\n | ``\'X\'`` | Hex format. Outputs the number in base 16, using upper- |\n | | case letters for the digits above 9. |\n +-----------+------------------------------------------------------------+\n | ``\'n\'`` | Number. This is the same as ``\'d\'``, except that it uses |\n | | the current locale setting to insert the appropriate |\n | | number separator characters. |\n +-----------+------------------------------------------------------------+\n | None | The same as ``\'d\'``. |\n +-----------+------------------------------------------------------------+\n\nThe available presentation types for floating point and decimal values\nare:\n\n +-----------+------------------------------------------------------------+\n | Type | Meaning |\n +===========+============================================================+\n | ``\'e\'`` | Exponent notation. Prints the number in scientific |\n | | notation using the letter \'e\' to indicate the exponent. |\n +-----------+------------------------------------------------------------+\n | ``\'E\'`` | Exponent notation. Same as ``\'e\'`` except it uses an upper |\n | | case \'E\' as the separator character. |\n +-----------+------------------------------------------------------------+\n | ``\'f\'`` | Fixed point. Displays the number as a fixed-point number. |\n +-----------+------------------------------------------------------------+\n | ``\'F\'`` | Fixed point. Same as ``\'f\'``. |\n +-----------+------------------------------------------------------------+\n | ``\'g\'`` | General format. This prints the number as a fixed-point |\n | | number, unless the number is too large, in which case it |\n | | switches to ``\'e\'`` exponent notation. Infinity and NaN |\n | | values are formatted as ``inf``, ``-inf`` and ``nan``, |\n | | respectively. |\n +-----------+------------------------------------------------------------+\n | ``\'G\'`` | General format. Same as ``\'g\'`` except switches to ``\'E\'`` |\n | | if the number gets to large. The representations of |\n | | infinity and NaN are uppercased, too. |\n +-----------+------------------------------------------------------------+\n | ``\'n\'`` | Number. This is the same as ``\'g\'``, except that it uses |\n | | the current locale setting to insert the appropriate |\n | | number separator characters. |\n +-----------+------------------------------------------------------------+\n | ``\'%\'`` | Percentage. Multiplies the number by 100 and displays in |\n | | fixed (``\'f\'``) format, followed by a percent sign. |\n +-----------+------------------------------------------------------------+\n | None | The same as ``\'g\'``. |\n +-----------+------------------------------------------------------------+\n', + 'formatstrings': u'\nFormat String Syntax\n********************\n\nThe ``str.format()`` method and the ``Formatter`` class share the same\nsyntax for format strings (although in the case of ``Formatter``,\nsubclasses can define their own format string syntax.)\n\nFormat strings contain "replacement fields" surrounded by curly braces\n``{}``. Anything that is not contained in braces is considered literal\ntext, which is copied unchanged to the output. If you need to include\na brace character in the literal text, it can be escaped by doubling:\n``{{`` and ``}}``.\n\nThe grammar for a replacement field is as follows:\n\n replacement_field ::= "{" field_name ["!" conversion] [":" format_spec] "}"\n field_name ::= (identifier | integer) ("." attribute_name | "[" element_index "]")*\n attribute_name ::= identifier\n element_index ::= integer | index_string\n index_string ::= +\n conversion ::= "r" | "s"\n format_spec ::= \n\nIn less formal terms, the replacement field starts with a\n*field_name*, which can either be a number (for a positional\nargument), or an identifier (for keyword arguments). Following this\nis an optional *conversion* field, which is preceded by an exclamation\npoint ``\'!\'``, and a *format_spec*, which is preceded by a colon\n``\':\'``.\n\nThe *field_name* itself begins with either a number or a keyword. If\nit\'s a number, it refers to a positional argument, and if it\'s a\nkeyword it refers to a named keyword argument. This can be followed\nby any number of index or attribute expressions. An expression of the\nform ``\'.name\'`` selects the named attribute using ``getattr()``,\nwhile an expression of the form ``\'[index]\'`` does an index lookup\nusing ``__getitem__()``.\n\nSome simple format string examples:\n\n "First, thou shalt count to {0}" # References first positional argument\n "My quest is {name}" # References keyword argument \'name\'\n "Weight in tons {0.weight}" # \'weight\' attribute of first positional arg\n "Units destroyed: {players[0]}" # First element of keyword argument \'players\'.\n\nThe *conversion* field causes a type coercion before formatting.\nNormally, the job of formatting a value is done by the\n``__format__()`` method of the value itself. However, in some cases\nit is desirable to force a type to be formatted as a string,\noverriding its own definition of formatting. By converting the value\nto a string before calling ``__format__()``, the normal formatting\nlogic is bypassed.\n\nTwo conversion flags are currently supported: ``\'!s\'`` which calls\n``str()`` on the value, and ``\'!r\'`` which calls ``repr()``.\n\nSome examples:\n\n "Harold\'s a clever {0!s}" # Calls str() on the argument first\n "Bring out the holy {name!r}" # Calls repr() on the argument first\n\nThe *format_spec* field contains a specification of how the value\nshould be presented, including such details as field width, alignment,\npadding, decimal precision and so on. Each value type can define its\nown "formatting mini-language" or interpretation of the *format_spec*.\n\nMost built-in types support a common formatting mini-language, which\nis described in the next section.\n\nA *format_spec* field can also include nested replacement fields\nwithin it. These nested replacement fields can contain only a field\nname; conversion flags and format specifications are not allowed. The\nreplacement fields within the format_spec are substituted before the\n*format_spec* string is interpreted. This allows the formatting of a\nvalue to be dynamically specified.\n\nFor example, suppose you wanted to have a replacement field whose\nfield width is determined by another variable:\n\n "A man with two {0:{1}}".format("noses", 10)\n\nThis would first evaluate the inner replacement field, making the\nformat string effectively:\n\n "A man with two {0:10}"\n\nThen the outer replacement field would be evaluated, producing:\n\n "noses "\n\nWhich is substituted into the string, yielding:\n\n "A man with two noses "\n\n(The extra space is because we specified a field width of 10, and\nbecause left alignment is the default for strings.)\n\n\nFormat Specification Mini-Language\n==================================\n\n"Format specifications" are used within replacement fields contained\nwithin a format string to define how individual values are presented\n(see *Format String Syntax*.) They can also be passed directly to the\nbuilt-in ``format()`` function. Each formattable type may define how\nthe format specification is to be interpreted.\n\nMost built-in types implement the following options for format\nspecifications, although some of the formatting options are only\nsupported by the numeric types.\n\nA general convention is that an empty format string (``""``) produces\nthe same result as if you had called ``str()`` on the value. A non-\nempty format string typically modifies the result.\n\nThe general form of a *standard format specifier* is:\n\n format_spec ::= [[fill]align][sign][#][0][width][.precision][type]\n fill ::= \n align ::= "<" | ">" | "=" | "^"\n sign ::= "+" | "-" | " "\n width ::= integer\n precision ::= integer\n type ::= "b" | "c" | "d" | "e" | "E" | "f" | "F" | "g" | "G" | "n" | "o" | "s" | "x" | "X" | "%"\n\nThe *fill* character can be any character other than \'}\' (which\nsignifies the end of the field). The presence of a fill character is\nsignaled by the *next* character, which must be one of the alignment\noptions. If the second character of *format_spec* is not a valid\nalignment option, then it is assumed that both the fill character and\nthe alignment option are absent.\n\nThe meaning of the various alignment options is as follows:\n\n +-----------+------------------------------------------------------------+\n | Option | Meaning |\n +===========+============================================================+\n | ``\'<\'`` | Forces the field to be left-aligned within the available |\n | | space (This is the default.) |\n +-----------+------------------------------------------------------------+\n | ``\'>\'`` | Forces the field to be right-aligned within the available |\n | | space. |\n +-----------+------------------------------------------------------------+\n | ``\'=\'`` | Forces the padding to be placed after the sign (if any) |\n | | but before the digits. This is used for printing fields |\n | | in the form \'+000000120\'. This alignment option is only |\n | | valid for numeric types. |\n +-----------+------------------------------------------------------------+\n | ``\'^\'`` | Forces the field to be centered within the available |\n | | space. |\n +-----------+------------------------------------------------------------+\n\nNote that unless a minimum field width is defined, the field width\nwill always be the same size as the data to fill it, so that the\nalignment option has no meaning in this case.\n\nThe *sign* option is only valid for number types, and can be one of\nthe following:\n\n +-----------+------------------------------------------------------------+\n | Option | Meaning |\n +===========+============================================================+\n | ``\'+\'`` | indicates that a sign should be used for both positive as |\n | | well as negative numbers. |\n +-----------+------------------------------------------------------------+\n | ``\'-\'`` | indicates that a sign should be used only for negative |\n | | numbers (this is the default behavior). |\n +-----------+------------------------------------------------------------+\n | space | indicates that a leading space should be used on positive |\n | | numbers, and a minus sign on negative numbers. |\n +-----------+------------------------------------------------------------+\n\nThe ``\'#\'`` option is only valid for integers, and only for binary,\noctal, or hexadecimal output. If present, it specifies that the\noutput will be prefixed by ``\'0b\'``, ``\'0o\'``, or ``\'0x\'``,\nrespectively.\n\n*width* is a decimal integer defining the minimum field width. If not\nspecified, then the field width will be determined by the content.\n\nIf the *width* field is preceded by a zero (``\'0\'``) character, this\nenables zero-padding. This is equivalent to an *alignment* type of\n``\'=\'`` and a *fill* character of ``\'0\'``.\n\nThe *precision* is a decimal number indicating how many digits should\nbe displayed after the decimal point for a floating point value\nformatted with ``\'f\'`` and ``\'F\'``, or before and after the decimal\npoint for a floating point value formatted with ``\'g\'`` or ``\'G\'``.\nFor non-number types the field indicates the maximum field size - in\nother words, how many characters will be used from the field content.\nThe *precision* is not allowed for integer values.\n\nFinally, the *type* determines how the data should be presented.\n\nThe available string presentation types are:\n\n +-----------+------------------------------------------------------------+\n | Type | Meaning |\n +===========+============================================================+\n | ``\'s\'`` | String format. This is the default type for strings and |\n | | may be omitted. |\n +-----------+------------------------------------------------------------+\n | None | The same as ``\'s\'``. |\n +-----------+------------------------------------------------------------+\n\nThe available integer presentation types are:\n\n +-----------+------------------------------------------------------------+\n | Type | Meaning |\n +===========+============================================================+\n | ``\'b\'`` | Binary format. Outputs the number in base 2. |\n +-----------+------------------------------------------------------------+\n | ``\'c\'`` | Character. Converts the integer to the corresponding |\n | | unicode character before printing. |\n +-----------+------------------------------------------------------------+\n | ``\'d\'`` | Decimal Integer. Outputs the number in base 10. |\n +-----------+------------------------------------------------------------+\n | ``\'o\'`` | Octal format. Outputs the number in base 8. |\n +-----------+------------------------------------------------------------+\n | ``\'x\'`` | Hex format. Outputs the number in base 16, using lower- |\n | | case letters for the digits above 9. |\n +-----------+------------------------------------------------------------+\n | ``\'X\'`` | Hex format. Outputs the number in base 16, using upper- |\n | | case letters for the digits above 9. |\n +-----------+------------------------------------------------------------+\n | ``\'n\'`` | Number. This is the same as ``\'d\'``, except that it uses |\n | | the current locale setting to insert the appropriate |\n | | number separator characters. |\n +-----------+------------------------------------------------------------+\n | None | The same as ``\'d\'``. |\n +-----------+------------------------------------------------------------+\n\nIn addition to the above presentation types, integers can be formatted\nwith the floating point presentation types listed below (except\n``\'n\'`` and None). When doing so, ``float()`` is used to convert the\ninteger to a floating point number before formatting.\n\nThe available presentation types for floating point and decimal values\nare:\n\n +-----------+------------------------------------------------------------+\n | Type | Meaning |\n +===========+============================================================+\n | ``\'e\'`` | Exponent notation. Prints the number in scientific |\n | | notation using the letter \'e\' to indicate the exponent. |\n +-----------+------------------------------------------------------------+\n | ``\'E\'`` | Exponent notation. Same as ``\'e\'`` except it uses an upper |\n | | case \'E\' as the separator character. |\n +-----------+------------------------------------------------------------+\n | ``\'f\'`` | Fixed point. Displays the number as a fixed-point number. |\n +-----------+------------------------------------------------------------+\n | ``\'F\'`` | Fixed point. Same as ``\'f\'``. |\n +-----------+------------------------------------------------------------+\n | ``\'g\'`` | General format. For a given precision ``p >= 1``, this |\n | | rounds the number to ``p`` significant digits and then |\n | | formats the result in either fixed-point format or in |\n | | scientific notation, depending on its magnitude. The |\n | | precise rules are as follows: suppose that the result |\n | | formatted with presentation type ``\'e\'`` and precision |\n | | ``p-1`` would have exponent ``exp``. Then if ``-4 <= exp |\n | | < p``, the number is formatted with presentation type |\n | | ``\'f\'`` and precision ``p-1-exp``. Otherwise, the number |\n | | is formatted with presentation type ``\'e\'`` and precision |\n | | ``p-1``. In both cases insignificant trailing zeros are |\n | | removed from the significand, and the decimal point is |\n | | also removed if there are no remaining digits following |\n | | it. Postive and negative infinity, positive and negative |\n | | zero, and nans, are formatted as ``inf``, ``-inf``, ``0``, |\n | | ``-0`` and ``nan`` respectively, regardless of the |\n | | precision. A precision of ``0`` is treated as equivalent |\n | | to a precision of ``1``. |\n +-----------+------------------------------------------------------------+\n | ``\'G\'`` | General format. Same as ``\'g\'`` except switches to ``\'E\'`` |\n | | if the number gets too large. The representations of |\n | | infinity and NaN are uppercased, too. |\n +-----------+------------------------------------------------------------+\n | ``\'n\'`` | Number. This is the same as ``\'g\'``, except that it uses |\n | | the current locale setting to insert the appropriate |\n | | number separator characters. |\n +-----------+------------------------------------------------------------+\n | ``\'%\'`` | Percentage. Multiplies the number by 100 and displays in |\n | | fixed (``\'f\'``) format, followed by a percent sign. |\n +-----------+------------------------------------------------------------+\n | None | The same as ``\'g\'``. |\n +-----------+------------------------------------------------------------+\n', 'function': u'\nFunction definitions\n********************\n\nA function definition defines a user-defined function object (see\nsection *The standard type hierarchy*):\n\n decorated ::= decorators (classdef | funcdef)\n decorators ::= decorator+\n decorator ::= "@" dotted_name ["(" [argument_list [","]] ")"] NEWLINE\n funcdef ::= "def" funcname "(" [parameter_list] ")" ":" suite\n dotted_name ::= identifier ("." identifier)*\n parameter_list ::= (defparameter ",")*\n ( "*" identifier [, "**" identifier]\n | "**" identifier\n | defparameter [","] )\n defparameter ::= parameter ["=" expression]\n sublist ::= parameter ("," parameter)* [","]\n parameter ::= identifier | "(" sublist ")"\n funcname ::= identifier\n\nA function definition is an executable statement. Its execution binds\nthe function name in the current local namespace to a function object\n(a wrapper around the executable code for the function). This\nfunction object contains a reference to the current global namespace\nas the global namespace to be used when the function is called.\n\nThe function definition does not execute the function body; this gets\nexecuted only when the function is called. [3]\n\nA function definition may be wrapped by one or more *decorator*\nexpressions. Decorator expressions are evaluated when the function is\ndefined, in the scope that contains the function definition. The\nresult must be a callable, which is invoked with the function object\nas the only argument. The returned value is bound to the function name\ninstead of the function object. Multiple decorators are applied in\nnested fashion. For example, the following code:\n\n @f1(arg)\n @f2\n def func(): pass\n\nis equivalent to:\n\n def func(): pass\n func = f1(arg)(f2(func))\n\nWhen one or more top-level parameters have the form *parameter* ``=``\n*expression*, the function is said to have "default parameter values."\nFor a parameter with a default value, the corresponding argument may\nbe omitted from a call, in which case the parameter\'s default value is\nsubstituted. If a parameter has a default value, all following\nparameters must also have a default value --- this is a syntactic\nrestriction that is not expressed by the grammar.\n\n**Default parameter values are evaluated when the function definition\nis executed.** This means that the expression is evaluated once, when\nthe function is defined, and that that same "pre-computed" value is\nused for each call. This is especially important to understand when a\ndefault parameter is a mutable object, such as a list or a dictionary:\nif the function modifies the object (e.g. by appending an item to a\nlist), the default value is in effect modified. This is generally not\nwhat was intended. A way around this is to use ``None`` as the\ndefault, and explicitly test for it in the body of the function, e.g.:\n\n def whats_on_the_telly(penguin=None):\n if penguin is None:\n penguin = []\n penguin.append("property of the zoo")\n return penguin\n\nFunction call semantics are described in more detail in section\n*Calls*. A function call always assigns values to all parameters\nmentioned in the parameter list, either from position arguments, from\nkeyword arguments, or from default values. If the form\n"``*identifier``" is present, it is initialized to a tuple receiving\nany excess positional parameters, defaulting to the empty tuple. If\nthe form "``**identifier``" is present, it is initialized to a new\ndictionary receiving any excess keyword arguments, defaulting to a new\nempty dictionary.\n\nIt is also possible to create anonymous functions (functions not bound\nto a name), for immediate use in expressions. This uses lambda forms,\ndescribed in section *Lambdas*. Note that the lambda form is merely a\nshorthand for a simplified function definition; a function defined in\na "``def``" statement can be passed around or assigned to another name\njust like a function defined by a lambda form. The "``def``" form is\nactually more powerful since it allows the execution of multiple\nstatements.\n\n**Programmer\'s note:** Functions are first-class objects. A "``def``"\nform executed inside a function definition defines a local function\nthat can be returned or passed around. Free variables used in the\nnested function can access the local variables of the function\ncontaining the def. See section *Naming and binding* for details.\n', - 'global': u'\nThe ``global`` statement\n************************\n\n global_stmt ::= "global" identifier ("," identifier)*\n\nThe ``global`` statement is a declaration which holds for the entire\ncurrent code block. It means that the listed identifiers are to be\ninterpreted as globals. It would be impossible to assign to a global\nvariable without ``global``, although free variables may refer to\nglobals without being declared global.\n\nNames listed in a ``global`` statement must not be used in the same\ncode block textually preceding that ``global`` statement.\n\nNames listed in a ``global`` statement must not be defined as formal\nparameters or in a ``for`` loop control target, ``class`` definition,\nfunction definition, or ``import`` statement.\n\n(The current implementation does not enforce the latter two\nrestrictions, but programs should not abuse this freedom, as future\nimplementations may enforce them or silently change the meaning of the\nprogram.)\n\n**Programmer\'s note:** the ``global`` is a directive to the parser.\nIt applies only to code parsed at the same time as the ``global``\nstatement. In particular, a ``global`` statement contained in an\n``exec`` statement does not affect the code block *containing* the\n``exec`` statement, and code contained in an ``exec`` statement is\nunaffected by ``global`` statements in the code containing the\n``exec`` statement. The same applies to the ``eval()``,\n``execfile()`` and ``compile()`` functions.\n', + 'global': u'\nThe ``global`` statement\n************************\n\n global_stmt ::= "global" identifier ("," identifier)*\n\nThe ``global`` statement is a declaration which holds for the entire\ncurrent code block. It means that the listed identifiers are to be\ninterpreted as globals. It would be impossible to assign to a global\nvariable without ``global``, although free variables may refer to\nglobals without being declared global.\n\nNames listed in a ``global`` statement must not be used in the same\ncode block textually preceding that ``global`` statement.\n\nNames listed in a ``global`` statement must not be defined as formal\nparameters or in a ``for`` loop control target, ``class`` definition,\nfunction definition, or ``import`` statement.\n\n**CPython implementation detail:** The current implementation does not\nenforce the latter two restrictions, but programs should not abuse\nthis freedom, as future implementations may enforce them or silently\nchange the meaning of the program.\n\n**Programmer\'s note:** the ``global`` is a directive to the parser.\nIt applies only to code parsed at the same time as the ``global``\nstatement. In particular, a ``global`` statement contained in an\n``exec`` statement does not affect the code block *containing* the\n``exec`` statement, and code contained in an ``exec`` statement is\nunaffected by ``global`` statements in the code containing the\n``exec`` statement. The same applies to the ``eval()``,\n``execfile()`` and ``compile()`` functions.\n', 'id-classes': u'\nReserved classes of identifiers\n*******************************\n\nCertain classes of identifiers (besides keywords) have special\nmeanings. These classes are identified by the patterns of leading and\ntrailing underscore characters:\n\n``_*``\n Not imported by ``from module import *``. The special identifier\n ``_`` is used in the interactive interpreter to store the result of\n the last evaluation; it is stored in the ``__builtin__`` module.\n When not in interactive mode, ``_`` has no special meaning and is\n not defined. See section *The import statement*.\n\n Note: The name ``_`` is often used in conjunction with\n internationalization; refer to the documentation for the\n ``gettext`` module for more information on this convention.\n\n``__*__``\n System-defined names. These names are defined by the interpreter\n and its implementation (including the standard library);\n applications should not expect to define additional names using\n this convention. The set of names of this class defined by Python\n may be extended in future versions. See section *Special method\n names*.\n\n``__*``\n Class-private names. Names in this category, when used within the\n context of a class definition, are re-written to use a mangled form\n to help avoid name clashes between "private" attributes of base and\n derived classes. See section *Identifiers (Names)*.\n', 'identifiers': u'\nIdentifiers and keywords\n************************\n\nIdentifiers (also referred to as *names*) are described by the\nfollowing lexical definitions:\n\n identifier ::= (letter|"_") (letter | digit | "_")*\n letter ::= lowercase | uppercase\n lowercase ::= "a"..."z"\n uppercase ::= "A"..."Z"\n digit ::= "0"..."9"\n\nIdentifiers are unlimited in length. Case is significant.\n\n\nKeywords\n========\n\nThe following identifiers are used as reserved words, or *keywords* of\nthe language, and cannot be used as ordinary identifiers. They must\nbe spelled exactly as written here:\n\n and del from not while\n as elif global or with\n assert else if pass yield\n break except import print\n class exec in raise\n continue finally is return\n def for lambda try\n\nChanged in version 2.4: ``None`` became a constant and is now\nrecognized by the compiler as a name for the built-in object ``None``.\nAlthough it is not a keyword, you cannot assign a different object to\nit.\n\nChanged in version 2.5: Both ``as`` and ``with`` are only recognized\nwhen the ``with_statement`` future feature has been enabled. It will\nalways be enabled in Python 2.6. See section *The with statement* for\ndetails. Note that using ``as`` and ``with`` as identifiers will\nalways issue a warning, even when the ``with_statement`` future\ndirective is not in effect.\n\n\nReserved classes of identifiers\n===============================\n\nCertain classes of identifiers (besides keywords) have special\nmeanings. These classes are identified by the patterns of leading and\ntrailing underscore characters:\n\n``_*``\n Not imported by ``from module import *``. The special identifier\n ``_`` is used in the interactive interpreter to store the result of\n the last evaluation; it is stored in the ``__builtin__`` module.\n When not in interactive mode, ``_`` has no special meaning and is\n not defined. See section *The import statement*.\n\n Note: The name ``_`` is often used in conjunction with\n internationalization; refer to the documentation for the\n ``gettext`` module for more information on this convention.\n\n``__*__``\n System-defined names. These names are defined by the interpreter\n and its implementation (including the standard library);\n applications should not expect to define additional names using\n this convention. The set of names of this class defined by Python\n may be extended in future versions. See section *Special method\n names*.\n\n``__*``\n Class-private names. Names in this category, when used within the\n context of a class definition, are re-written to use a mangled form\n to help avoid name clashes between "private" attributes of base and\n derived classes. See section *Identifiers (Names)*.\n', 'if': u'\nThe ``if`` statement\n********************\n\nThe ``if`` statement is used for conditional execution:\n\n if_stmt ::= "if" expression ":" suite\n ( "elif" expression ":" suite )*\n ["else" ":" suite]\n\nIt selects exactly one of the suites by evaluating the expressions one\nby one until one is found to be true (see section *Boolean operations*\nfor the definition of true and false); then that suite is executed\n(and no other part of the ``if`` statement is executed or evaluated).\nIf all expressions are false, the suite of the ``else`` clause, if\npresent, is executed.\n', 'imaginary': u'\nImaginary literals\n******************\n\nImaginary literals are described by the following lexical definitions:\n\n imagnumber ::= (floatnumber | intpart) ("j" | "J")\n\nAn imaginary literal yields a complex number with a real part of 0.0.\nComplex numbers are represented as a pair of floating point numbers\nand have the same restrictions on their range. To create a complex\nnumber with a nonzero real part, add a floating point number to it,\ne.g., ``(3+4j)``. Some examples of imaginary literals:\n\n 3.14j 10.j 10j .001j 1e100j 3.14e-10j\n', - 'import': u'\nThe ``import`` statement\n************************\n\n import_stmt ::= "import" module ["as" name] ( "," module ["as" name] )*\n | "from" relative_module "import" identifier ["as" name]\n ( "," identifier ["as" name] )*\n | "from" relative_module "import" "(" identifier ["as" name]\n ( "," identifier ["as" name] )* [","] ")"\n | "from" module "import" "*"\n module ::= (identifier ".")* identifier\n relative_module ::= "."* module | "."+\n name ::= identifier\n\nImport statements are executed in two steps: (1) find a module, and\ninitialize it if necessary; (2) define a name or names in the local\nnamespace (of the scope where the ``import`` statement occurs). The\nstatement comes in two forms differing on whether it uses the ``from``\nkeyword. The first form (without ``from``) repeats these steps for\neach identifier in the list. The form with ``from`` performs step (1)\nonce, and then performs step (2) repeatedly.\n\nTo understand how step (1) occurs, one must first understand how\nPython handles hierarchical naming of modules. To help organize\nmodules and provide a hierarchy in naming, Python has a concept of\npackages. A package can contain other packages and modules while\nmodules cannot contain other modules or packages. From a file system\nperspective, packages are directories and modules are files. The\noriginal specification for packages is still available to read,\nalthough minor details have changed since the writing of that\ndocument.\n\nOnce the name of the module is known (unless otherwise specified, the\nterm "module" will refer to both packages and modules), searching for\nthe module or package can begin. The first place checked is\n``sys.modules``, the cache of all modules that have been imported\npreviously. If the module is found there then it is used in step (2)\nof import.\n\nIf the module is not found in the cache, then ``sys.meta_path`` is\nsearched (the specification for ``sys.meta_path`` can be found in\n**PEP 302**). The object is a list of *finder* objects which are\nqueried in order as to whether they know how to load the module by\ncalling their ``find_module()`` method with the name of the module. If\nthe module happens to be contained within a package (as denoted by the\nexistence of a dot in the name), then a second argument to\n``find_module()`` is given as the value of the ``__path__`` attribute\nfrom the parent package (everything up to the last dot in the name of\nthe module being imported). If a finder can find the module it returns\na *loader* (discussed later) or returns ``None``.\n\nIf none of the finders on ``sys.meta_path`` are able to find the\nmodule then some implicitly defined finders are queried.\nImplementations of Python vary in what implicit meta path finders are\ndefined. The one they all do define, though, is one that handles\n``sys.path_hooks``, ``sys.path_importer_cache``, and ``sys.path``.\n\nThe implicit finder searches for the requested module in the "paths"\nspecified in one of two places ("paths" do not have to be file system\npaths). If the module being imported is supposed to be contained\nwithin a package then the second argument passed to ``find_module()``,\n``__path__`` on the parent package, is used as the source of paths. If\nthe module is not contained in a package then ``sys.path`` is used as\nthe source of paths.\n\nOnce the source of paths is chosen it is iterated over to find a\nfinder that can handle that path. The dict at\n``sys.path_importer_cache`` caches finders for paths and is checked\nfor a finder. If the path does not have a finder cached then\n``sys.path_hooks`` is searched by calling each object in the list with\na single argument of the path, returning a finder or raises\n``ImportError``. If a finder is returned then it is cached in\n``sys.path_importer_cache`` and then used for that path entry. If no\nfinder can be found but the path exists then a value of ``None`` is\nstored in ``sys.path_importer_cache`` to signify that an implicit,\nfile-based finder that handles modules stored as individual files\nshould be used for that path. If the path does not exist then a finder\nwhich always returns ``None`` is placed in the cache for the path.\n\nIf no finder can find the module then ``ImportError`` is raised.\nOtherwise some finder returned a loader whose ``load_module()`` method\nis called with the name of the module to load (see **PEP 302** for the\noriginal definition of loaders). A loader has several responsibilities\nto perform on a module it loads. First, if the module already exists\nin ``sys.modules`` (a possibility if the loader is called outside of\nthe import machinery) then it is to use that module for initialization\nand not a new module. But if the module does not exist in\n``sys.modules`` then it is to be added to that dict before\ninitialization begins. If an error occurs during loading of the module\nand it was added to ``sys.modules`` it is to be removed from the dict.\nIf an error occurs but the module was already in ``sys.modules`` it is\nleft in the dict.\n\nThe loader must set several attributes on the module. ``__name__`` is\nto be set to the name of the module. ``__file__`` is to be the "path"\nto the file unless the module is built-in (and thus listed in\n``sys.builtin_module_names``) in which case the attribute is not set.\nIf what is being imported is a package then ``__path__`` is to be set\nto a list of paths to be searched when looking for modules and\npackages contained within the package being imported. ``__package__``\nis optional but should be set to the name of package that contains the\nmodule or package (the empty string is used for module not contained\nin a package). ``__loader__`` is also optional but should be set to\nthe loader object that is loading the module.\n\nIf an error occurs during loading then the loader raises\n``ImportError`` if some other exception is not already being\npropagated. Otherwise the loader returns the module that was loaded\nand initialized.\n\nWhen step (1) finishes without raising an exception, step (2) can\nbegin.\n\nThe first form of ``import`` statement binds the module name in the\nlocal namespace to the module object, and then goes on to import the\nnext identifier, if any. If the module name is followed by ``as``,\nthe name following ``as`` is used as the local name for the module.\n\nThe ``from`` form does not bind the module name: it goes through the\nlist of identifiers, looks each one of them up in the module found in\nstep (1), and binds the name in the local namespace to the object thus\nfound. As with the first form of ``import``, an alternate local name\ncan be supplied by specifying "``as`` localname". If a name is not\nfound, ``ImportError`` is raised. If the list of identifiers is\nreplaced by a star (``\'*\'``), all public names defined in the module\nare bound in the local namespace of the ``import`` statement..\n\nThe *public names* defined by a module are determined by checking the\nmodule\'s namespace for a variable named ``__all__``; if defined, it\nmust be a sequence of strings which are names defined or imported by\nthat module. The names given in ``__all__`` are all considered public\nand are required to exist. If ``__all__`` is not defined, the set of\npublic names includes all names found in the module\'s namespace which\ndo not begin with an underscore character (``\'_\'``). ``__all__``\nshould contain the entire public API. It is intended to avoid\naccidentally exporting items that are not part of the API (such as\nlibrary modules which were imported and used within the module).\n\nThe ``from`` form with ``*`` may only occur in a module scope. If the\nwild card form of import --- ``import *`` --- is used in a function\nand the function contains or is a nested block with free variables,\nthe compiler will raise a ``SyntaxError``.\n\nWhen specifying what module to import you do not have to specify the\nabsolute name of the module. When a module or package is contained\nwithin another package it is possible to make a relative import within\nthe same top package without having to mention the package name. By\nusing leading dots in the specified module or package after ``from``\nyou can specify how high to traverse up the current package hierarchy\nwithout specifying exact names. One leading dot means the current\npackage where the module making the import exists. Two dots means up\none package level. Three dots is up two levels, etc. So if you execute\n``from . import mod`` from a module in the ``pkg`` package then you\nwill end up importing ``pkg.mod``. If you execute ``from ..subpkg2\nimprt mod`` from within ``pkg.subpkg1`` you will import\n``pkg.subpkg2.mod``. The specification for relative imports is\ncontained within **PEP 328**.\n\nThe built-in function ``__import__()`` is provided to support\napplications that determine which modules need to be loaded\ndynamically; refer to *Built-in Functions* for additional information.\n\n\nFuture statements\n=================\n\nA *future statement* is a directive to the compiler that a particular\nmodule should be compiled using syntax or semantics that will be\navailable in a specified future release of Python. The future\nstatement is intended to ease migration to future versions of Python\nthat introduce incompatible changes to the language. It allows use of\nthe new features on a per-module basis before the release in which the\nfeature becomes standard.\n\n future_statement ::= "from" "__future__" "import" feature ["as" name]\n ("," feature ["as" name])*\n | "from" "__future__" "import" "(" feature ["as" name]\n ("," feature ["as" name])* [","] ")"\n feature ::= identifier\n name ::= identifier\n\nA future statement must appear near the top of the module. The only\nlines that can appear before a future statement are:\n\n* the module docstring (if any),\n\n* comments,\n\n* blank lines, and\n\n* other future statements.\n\nThe features recognized by Python 2.6 are ``unicode_literals``,\n``print_function``, ``absolute_import``, ``division``, ``generators``,\n``nested_scopes`` and ``with_statement``. ``generators``,\n``with_statement``, ``nested_scopes`` are redundant in Python version\n2.6 and above because they are always enabled.\n\nA future statement is recognized and treated specially at compile\ntime: Changes to the semantics of core constructs are often\nimplemented by generating different code. It may even be the case\nthat a new feature introduces new incompatible syntax (such as a new\nreserved word), in which case the compiler may need to parse the\nmodule differently. Such decisions cannot be pushed off until\nruntime.\n\nFor any given release, the compiler knows which feature names have\nbeen defined, and raises a compile-time error if a future statement\ncontains a feature not known to it.\n\nThe direct runtime semantics are the same as for any import statement:\nthere is a standard module ``__future__``, described later, and it\nwill be imported in the usual way at the time the future statement is\nexecuted.\n\nThe interesting runtime semantics depend on the specific feature\nenabled by the future statement.\n\nNote that there is nothing special about the statement:\n\n import __future__ [as name]\n\nThat is not a future statement; it\'s an ordinary import statement with\nno special semantics or syntax restrictions.\n\nCode compiled by an ``exec`` statement or calls to the builtin\nfunctions ``compile()`` and ``execfile()`` that occur in a module\n``M`` containing a future statement will, by default, use the new\nsyntax or semantics associated with the future statement. This can,\nstarting with Python 2.2 be controlled by optional arguments to\n``compile()`` --- see the documentation of that function for details.\n\nA future statement typed at an interactive interpreter prompt will\ntake effect for the rest of the interpreter session. If an\ninterpreter is started with the *-i* option, is passed a script name\nto execute, and the script includes a future statement, it will be in\neffect in the interactive session started after the script is\nexecuted.\n\nSee also:\n\n **PEP 236** - Back to the __future__\n The original proposal for the __future__ mechanism.\n', - 'in': u'\nComparisons\n***********\n\nUnlike C, all comparison operations in Python have the same priority,\nwhich is lower than that of any arithmetic, shifting or bitwise\noperation. Also unlike C, expressions like ``a < b < c`` have the\ninterpretation that is conventional in mathematics:\n\n comparison ::= or_expr ( comp_operator or_expr )*\n comp_operator ::= "<" | ">" | "==" | ">=" | "<=" | "<>" | "!="\n | "is" ["not"] | ["not"] "in"\n\nComparisons yield boolean values: ``True`` or ``False``.\n\nComparisons can be chained arbitrarily, e.g., ``x < y <= z`` is\nequivalent to ``x < y and y <= z``, except that ``y`` is evaluated\nonly once (but in both cases ``z`` is not evaluated at all when ``x <\ny`` is found to be false).\n\nFormally, if *a*, *b*, *c*, ..., *y*, *z* are expressions and *op1*,\n*op2*, ..., *opN* are comparison operators, then ``a op1 b op2 c ... y\nopN z`` is equivalent to ``a op1 b and b op2 c and ... y opN z``,\nexcept that each expression is evaluated at most once.\n\nNote that ``a op1 b op2 c`` doesn\'t imply any kind of comparison\nbetween *a* and *c*, so that, e.g., ``x < y > z`` is perfectly legal\n(though perhaps not pretty).\n\nThe forms ``<>`` and ``!=`` are equivalent; for consistency with C,\n``!=`` is preferred; where ``!=`` is mentioned below ``<>`` is also\naccepted. The ``<>`` spelling is considered obsolescent.\n\nThe operators ``<``, ``>``, ``==``, ``>=``, ``<=``, and ``!=`` compare\nthe values of two objects. The objects need not have the same type.\nIf both are numbers, they are converted to a common type. Otherwise,\nobjects of different types *always* compare unequal, and are ordered\nconsistently but arbitrarily. You can control comparison behavior of\nobjects of non-builtin types by defining a ``__cmp__`` method or rich\ncomparison methods like ``__gt__``, described in section *Special\nmethod names*.\n\n(This unusual definition of comparison was used to simplify the\ndefinition of operations like sorting and the ``in`` and ``not in``\noperators. In the future, the comparison rules for objects of\ndifferent types are likely to change.)\n\nComparison of objects of the same type depends on the type:\n\n* Numbers are compared arithmetically.\n\n* Strings are compared lexicographically using the numeric equivalents\n (the result of the built-in function ``ord()``) of their characters.\n Unicode and 8-bit strings are fully interoperable in this behavior.\n [4]\n\n* Tuples and lists are compared lexicographically using comparison of\n corresponding elements. This means that to compare equal, each\n element must compare equal and the two sequences must be of the same\n type and have the same length.\n\n If not equal, the sequences are ordered the same as their first\n differing elements. For example, ``cmp([1,2,x], [1,2,y])`` returns\n the same as ``cmp(x,y)``. If the corresponding element does not\n exist, the shorter sequence is ordered first (for example, ``[1,2] <\n [1,2,3]``).\n\n* Mappings (dictionaries) compare equal if and only if their sorted\n (key, value) lists compare equal. [5] Outcomes other than equality\n are resolved consistently, but are not otherwise defined. [6]\n\n* Most other objects of builtin types compare unequal unless they are\n the same object; the choice whether one object is considered smaller\n or larger than another one is made arbitrarily but consistently\n within one execution of a program.\n\nThe operators ``in`` and ``not in`` test for collection membership.\n``x in s`` evaluates to true if *x* is a member of the collection *s*,\nand false otherwise. ``x not in s`` returns the negation of ``x in\ns``. The collection membership test has traditionally been bound to\nsequences; an object is a member of a collection if the collection is\na sequence and contains an element equal to that object. However, it\nmake sense for many other object types to support membership tests\nwithout being a sequence. In particular, dictionaries (for keys) and\nsets support membership testing.\n\nFor the list and tuple types, ``x in y`` is true if and only if there\nexists an index *i* such that ``x == y[i]`` is true.\n\nFor the Unicode and string types, ``x in y`` is true if and only if\n*x* is a substring of *y*. An equivalent test is ``y.find(x) != -1``.\nNote, *x* and *y* need not be the same type; consequently, ``u\'ab\' in\n\'abc\'`` will return ``True``. Empty strings are always considered to\nbe a substring of any other string, so ``"" in "abc"`` will return\n``True``.\n\nChanged in version 2.3: Previously, *x* was required to be a string of\nlength ``1``.\n\nFor user-defined classes which define the ``__contains__()`` method,\n``x in y`` is true if and only if ``y.__contains__(x)`` is true.\n\nFor user-defined classes which do not define ``__contains__()`` and do\ndefine ``__getitem__()``, ``x in y`` is true if and only if there is a\nnon-negative integer index *i* such that ``x == y[i]``, and all lower\ninteger indices do not raise ``IndexError`` exception. (If any other\nexception is raised, it is as if ``in`` raised that exception).\n\nThe operator ``not in`` is defined to have the inverse true value of\n``in``.\n\nThe operators ``is`` and ``is not`` test for object identity: ``x is\ny`` is true if and only if *x* and *y* are the same object. ``x is\nnot y`` yields the inverse truth value. [7]\n', + 'import': u'\nThe ``import`` statement\n************************\n\n import_stmt ::= "import" module ["as" name] ( "," module ["as" name] )*\n | "from" relative_module "import" identifier ["as" name]\n ( "," identifier ["as" name] )*\n | "from" relative_module "import" "(" identifier ["as" name]\n ( "," identifier ["as" name] )* [","] ")"\n | "from" module "import" "*"\n module ::= (identifier ".")* identifier\n relative_module ::= "."* module | "."+\n name ::= identifier\n\nImport statements are executed in two steps: (1) find a module, and\ninitialize it if necessary; (2) define a name or names in the local\nnamespace (of the scope where the ``import`` statement occurs). The\nstatement comes in two forms differing on whether it uses the ``from``\nkeyword. The first form (without ``from``) repeats these steps for\neach identifier in the list. The form with ``from`` performs step (1)\nonce, and then performs step (2) repeatedly.\n\nTo understand how step (1) occurs, one must first understand how\nPython handles hierarchical naming of modules. To help organize\nmodules and provide a hierarchy in naming, Python has a concept of\npackages. A package can contain other packages and modules while\nmodules cannot contain other modules or packages. From a file system\nperspective, packages are directories and modules are files. The\noriginal specification for packages is still available to read,\nalthough minor details have changed since the writing of that\ndocument.\n\nOnce the name of the module is known (unless otherwise specified, the\nterm "module" will refer to both packages and modules), searching for\nthe module or package can begin. The first place checked is\n``sys.modules``, the cache of all modules that have been imported\npreviously. If the module is found there then it is used in step (2)\nof import.\n\nIf the module is not found in the cache, then ``sys.meta_path`` is\nsearched (the specification for ``sys.meta_path`` can be found in\n**PEP 302**). The object is a list of *finder* objects which are\nqueried in order as to whether they know how to load the module by\ncalling their ``find_module()`` method with the name of the module. If\nthe module happens to be contained within a package (as denoted by the\nexistence of a dot in the name), then a second argument to\n``find_module()`` is given as the value of the ``__path__`` attribute\nfrom the parent package (everything up to the last dot in the name of\nthe module being imported). If a finder can find the module it returns\na *loader* (discussed later) or returns ``None``.\n\nIf none of the finders on ``sys.meta_path`` are able to find the\nmodule then some implicitly defined finders are queried.\nImplementations of Python vary in what implicit meta path finders are\ndefined. The one they all do define, though, is one that handles\n``sys.path_hooks``, ``sys.path_importer_cache``, and ``sys.path``.\n\nThe implicit finder searches for the requested module in the "paths"\nspecified in one of two places ("paths" do not have to be file system\npaths). If the module being imported is supposed to be contained\nwithin a package then the second argument passed to ``find_module()``,\n``__path__`` on the parent package, is used as the source of paths. If\nthe module is not contained in a package then ``sys.path`` is used as\nthe source of paths.\n\nOnce the source of paths is chosen it is iterated over to find a\nfinder that can handle that path. The dict at\n``sys.path_importer_cache`` caches finders for paths and is checked\nfor a finder. If the path does not have a finder cached then\n``sys.path_hooks`` is searched by calling each object in the list with\na single argument of the path, returning a finder or raises\n``ImportError``. If a finder is returned then it is cached in\n``sys.path_importer_cache`` and then used for that path entry. If no\nfinder can be found but the path exists then a value of ``None`` is\nstored in ``sys.path_importer_cache`` to signify that an implicit,\nfile-based finder that handles modules stored as individual files\nshould be used for that path. If the path does not exist then a finder\nwhich always returns ``None`` is placed in the cache for the path.\n\nIf no finder can find the module then ``ImportError`` is raised.\nOtherwise some finder returned a loader whose ``load_module()`` method\nis called with the name of the module to load (see **PEP 302** for the\noriginal definition of loaders). A loader has several responsibilities\nto perform on a module it loads. First, if the module already exists\nin ``sys.modules`` (a possibility if the loader is called outside of\nthe import machinery) then it is to use that module for initialization\nand not a new module. But if the module does not exist in\n``sys.modules`` then it is to be added to that dict before\ninitialization begins. If an error occurs during loading of the module\nand it was added to ``sys.modules`` it is to be removed from the dict.\nIf an error occurs but the module was already in ``sys.modules`` it is\nleft in the dict.\n\nThe loader must set several attributes on the module. ``__name__`` is\nto be set to the name of the module. ``__file__`` is to be the "path"\nto the file unless the module is built-in (and thus listed in\n``sys.builtin_module_names``) in which case the attribute is not set.\nIf what is being imported is a package then ``__path__`` is to be set\nto a list of paths to be searched when looking for modules and\npackages contained within the package being imported. ``__package__``\nis optional but should be set to the name of package that contains the\nmodule or package (the empty string is used for module not contained\nin a package). ``__loader__`` is also optional but should be set to\nthe loader object that is loading the module.\n\nIf an error occurs during loading then the loader raises\n``ImportError`` if some other exception is not already being\npropagated. Otherwise the loader returns the module that was loaded\nand initialized.\n\nWhen step (1) finishes without raising an exception, step (2) can\nbegin.\n\nThe first form of ``import`` statement binds the module name in the\nlocal namespace to the module object, and then goes on to import the\nnext identifier, if any. If the module name is followed by ``as``,\nthe name following ``as`` is used as the local name for the module.\n\nThe ``from`` form does not bind the module name: it goes through the\nlist of identifiers, looks each one of them up in the module found in\nstep (1), and binds the name in the local namespace to the object thus\nfound. As with the first form of ``import``, an alternate local name\ncan be supplied by specifying "``as`` localname". If a name is not\nfound, ``ImportError`` is raised. If the list of identifiers is\nreplaced by a star (``\'*\'``), all public names defined in the module\nare bound in the local namespace of the ``import`` statement..\n\nThe *public names* defined by a module are determined by checking the\nmodule\'s namespace for a variable named ``__all__``; if defined, it\nmust be a sequence of strings which are names defined or imported by\nthat module. The names given in ``__all__`` are all considered public\nand are required to exist. If ``__all__`` is not defined, the set of\npublic names includes all names found in the module\'s namespace which\ndo not begin with an underscore character (``\'_\'``). ``__all__``\nshould contain the entire public API. It is intended to avoid\naccidentally exporting items that are not part of the API (such as\nlibrary modules which were imported and used within the module).\n\nThe ``from`` form with ``*`` may only occur in a module scope. If the\nwild card form of import --- ``import *`` --- is used in a function\nand the function contains or is a nested block with free variables,\nthe compiler will raise a ``SyntaxError``.\n\nWhen specifying what module to import you do not have to specify the\nabsolute name of the module. When a module or package is contained\nwithin another package it is possible to make a relative import within\nthe same top package without having to mention the package name. By\nusing leading dots in the specified module or package after ``from``\nyou can specify how high to traverse up the current package hierarchy\nwithout specifying exact names. One leading dot means the current\npackage where the module making the import exists. Two dots means up\none package level. Three dots is up two levels, etc. So if you execute\n``from . import mod`` from a module in the ``pkg`` package then you\nwill end up importing ``pkg.mod``. If you execute ``from ..subpkg2\nimprt mod`` from within ``pkg.subpkg1`` you will import\n``pkg.subpkg2.mod``. The specification for relative imports is\ncontained within **PEP 328**.\n\nThe built-in function ``__import__()`` is provided to support\napplications that determine which modules need to be loaded\ndynamically; refer to *Built-in Functions* for additional information.\n\n\nFuture statements\n=================\n\nA *future statement* is a directive to the compiler that a particular\nmodule should be compiled using syntax or semantics that will be\navailable in a specified future release of Python. The future\nstatement is intended to ease migration to future versions of Python\nthat introduce incompatible changes to the language. It allows use of\nthe new features on a per-module basis before the release in which the\nfeature becomes standard.\n\n future_statement ::= "from" "__future__" "import" feature ["as" name]\n ("," feature ["as" name])*\n | "from" "__future__" "import" "(" feature ["as" name]\n ("," feature ["as" name])* [","] ")"\n feature ::= identifier\n name ::= identifier\n\nA future statement must appear near the top of the module. The only\nlines that can appear before a future statement are:\n\n* the module docstring (if any),\n\n* comments,\n\n* blank lines, and\n\n* other future statements.\n\nThe features recognized by Python 2.6 are ``unicode_literals``,\n``print_function``, ``absolute_import``, ``division``, ``generators``,\n``nested_scopes`` and ``with_statement``. ``generators``,\n``with_statement``, ``nested_scopes`` are redundant in Python version\n2.6 and above because they are always enabled.\n\nA future statement is recognized and treated specially at compile\ntime: Changes to the semantics of core constructs are often\nimplemented by generating different code. It may even be the case\nthat a new feature introduces new incompatible syntax (such as a new\nreserved word), in which case the compiler may need to parse the\nmodule differently. Such decisions cannot be pushed off until\nruntime.\n\nFor any given release, the compiler knows which feature names have\nbeen defined, and raises a compile-time error if a future statement\ncontains a feature not known to it.\n\nThe direct runtime semantics are the same as for any import statement:\nthere is a standard module ``__future__``, described later, and it\nwill be imported in the usual way at the time the future statement is\nexecuted.\n\nThe interesting runtime semantics depend on the specific feature\nenabled by the future statement.\n\nNote that there is nothing special about the statement:\n\n import __future__ [as name]\n\nThat is not a future statement; it\'s an ordinary import statement with\nno special semantics or syntax restrictions.\n\nCode compiled by an ``exec`` statement or calls to the built-in\nfunctions ``compile()`` and ``execfile()`` that occur in a module\n``M`` containing a future statement will, by default, use the new\nsyntax or semantics associated with the future statement. This can,\nstarting with Python 2.2 be controlled by optional arguments to\n``compile()`` --- see the documentation of that function for details.\n\nA future statement typed at an interactive interpreter prompt will\ntake effect for the rest of the interpreter session. If an\ninterpreter is started with the *-i* option, is passed a script name\nto execute, and the script includes a future statement, it will be in\neffect in the interactive session started after the script is\nexecuted.\n\nSee also:\n\n **PEP 236** - Back to the __future__\n The original proposal for the __future__ mechanism.\n', + 'in': u'\nComparisons\n***********\n\nUnlike C, all comparison operations in Python have the same priority,\nwhich is lower than that of any arithmetic, shifting or bitwise\noperation. Also unlike C, expressions like ``a < b < c`` have the\ninterpretation that is conventional in mathematics:\n\n comparison ::= or_expr ( comp_operator or_expr )*\n comp_operator ::= "<" | ">" | "==" | ">=" | "<=" | "<>" | "!="\n | "is" ["not"] | ["not"] "in"\n\nComparisons yield boolean values: ``True`` or ``False``.\n\nComparisons can be chained arbitrarily, e.g., ``x < y <= z`` is\nequivalent to ``x < y and y <= z``, except that ``y`` is evaluated\nonly once (but in both cases ``z`` is not evaluated at all when ``x <\ny`` is found to be false).\n\nFormally, if *a*, *b*, *c*, ..., *y*, *z* are expressions and *op1*,\n*op2*, ..., *opN* are comparison operators, then ``a op1 b op2 c ... y\nopN z`` is equivalent to ``a op1 b and b op2 c and ... y opN z``,\nexcept that each expression is evaluated at most once.\n\nNote that ``a op1 b op2 c`` doesn\'t imply any kind of comparison\nbetween *a* and *c*, so that, e.g., ``x < y > z`` is perfectly legal\n(though perhaps not pretty).\n\nThe forms ``<>`` and ``!=`` are equivalent; for consistency with C,\n``!=`` is preferred; where ``!=`` is mentioned below ``<>`` is also\naccepted. The ``<>`` spelling is considered obsolescent.\n\nThe operators ``<``, ``>``, ``==``, ``>=``, ``<=``, and ``!=`` compare\nthe values of two objects. The objects need not have the same type.\nIf both are numbers, they are converted to a common type. Otherwise,\nobjects of different types *always* compare unequal, and are ordered\nconsistently but arbitrarily. You can control comparison behavior of\nobjects of non-built-in types by defining a ``__cmp__`` method or rich\ncomparison methods like ``__gt__``, described in section *Special\nmethod names*.\n\n(This unusual definition of comparison was used to simplify the\ndefinition of operations like sorting and the ``in`` and ``not in``\noperators. In the future, the comparison rules for objects of\ndifferent types are likely to change.)\n\nComparison of objects of the same type depends on the type:\n\n* Numbers are compared arithmetically.\n\n* Strings are compared lexicographically using the numeric equivalents\n (the result of the built-in function ``ord()``) of their characters.\n Unicode and 8-bit strings are fully interoperable in this behavior.\n [4]\n\n* Tuples and lists are compared lexicographically using comparison of\n corresponding elements. This means that to compare equal, each\n element must compare equal and the two sequences must be of the same\n type and have the same length.\n\n If not equal, the sequences are ordered the same as their first\n differing elements. For example, ``cmp([1,2,x], [1,2,y])`` returns\n the same as ``cmp(x,y)``. If the corresponding element does not\n exist, the shorter sequence is ordered first (for example, ``[1,2] <\n [1,2,3]``).\n\n* Mappings (dictionaries) compare equal if and only if their sorted\n (key, value) lists compare equal. [5] Outcomes other than equality\n are resolved consistently, but are not otherwise defined. [6]\n\n* Most other objects of built-in types compare unequal unless they are\n the same object; the choice whether one object is considered smaller\n or larger than another one is made arbitrarily but consistently\n within one execution of a program.\n\nThe operators ``in`` and ``not in`` test for collection membership.\n``x in s`` evaluates to true if *x* is a member of the collection *s*,\nand false otherwise. ``x not in s`` returns the negation of ``x in\ns``. The collection membership test has traditionally been bound to\nsequences; an object is a member of a collection if the collection is\na sequence and contains an element equal to that object. However, it\nmake sense for many other object types to support membership tests\nwithout being a sequence. In particular, dictionaries (for keys) and\nsets support membership testing.\n\nFor the list and tuple types, ``x in y`` is true if and only if there\nexists an index *i* such that ``x == y[i]`` is true.\n\nFor the Unicode and string types, ``x in y`` is true if and only if\n*x* is a substring of *y*. An equivalent test is ``y.find(x) != -1``.\nNote, *x* and *y* need not be the same type; consequently, ``u\'ab\' in\n\'abc\'`` will return ``True``. Empty strings are always considered to\nbe a substring of any other string, so ``"" in "abc"`` will return\n``True``.\n\nChanged in version 2.3: Previously, *x* was required to be a string of\nlength ``1``.\n\nFor user-defined classes which define the ``__contains__()`` method,\n``x in y`` is true if and only if ``y.__contains__(x)`` is true.\n\nFor user-defined classes which do not define ``__contains__()`` but do\ndefine ``__iter__()``, ``x in y`` is true if some value ``z`` with ``x\n== z`` is produced while iterating over ``y``. If an exception is\nraised during the iteration, it is as if ``in`` raised that exception.\n\nLastly, the old-style iteration protocol is tried: if a class defines\n``__getitem__()``, ``x in y`` is true if and only if there is a non-\nnegative integer index *i* such that ``x == y[i]``, and all lower\ninteger indices do not raise ``IndexError`` exception. (If any other\nexception is raised, it is as if ``in`` raised that exception).\n\nThe operator ``not in`` is defined to have the inverse true value of\n``in``.\n\nThe operators ``is`` and ``is not`` test for object identity: ``x is\ny`` is true if and only if *x* and *y* are the same object. ``x is\nnot y`` yields the inverse truth value. [7]\n', 'integers': u'\nInteger and long integer literals\n*********************************\n\nInteger and long integer literals are described by the following\nlexical definitions:\n\n longinteger ::= integer ("l" | "L")\n integer ::= decimalinteger | octinteger | hexinteger | bininteger\n decimalinteger ::= nonzerodigit digit* | "0"\n octinteger ::= "0" ("o" | "O") octdigit+ | "0" octdigit+\n hexinteger ::= "0" ("x" | "X") hexdigit+\n bininteger ::= "0" ("b" | "B") bindigit+\n nonzerodigit ::= "1"..."9"\n octdigit ::= "0"..."7"\n bindigit ::= "0" | "1"\n hexdigit ::= digit | "a"..."f" | "A"..."F"\n\nAlthough both lower case ``\'l\'`` and upper case ``\'L\'`` are allowed as\nsuffix for long integers, it is strongly recommended to always use\n``\'L\'``, since the letter ``\'l\'`` looks too much like the digit\n``\'1\'``.\n\nPlain integer literals that are above the largest representable plain\ninteger (e.g., 2147483647 when using 32-bit arithmetic) are accepted\nas if they were long integers instead. [1] There is no limit for long\ninteger literals apart from what can be stored in available memory.\n\nSome examples of plain integer literals (first row) and long integer\nliterals (second and third rows):\n\n 7 2147483647 0177\n 3L 79228162514264337593543950336L 0377L 0x100000000L\n 79228162514264337593543950336 0xdeadbeef\n', 'lambda': u'\nLambdas\n*******\n\n lambda_form ::= "lambda" [parameter_list]: expression\n old_lambda_form ::= "lambda" [parameter_list]: old_expression\n\nLambda forms (lambda expressions) have the same syntactic position as\nexpressions. They are a shorthand to create anonymous functions; the\nexpression ``lambda arguments: expression`` yields a function object.\nThe unnamed object behaves like a function object defined with\n\n def name(arguments):\n return expression\n\nSee section *Function definitions* for the syntax of parameter lists.\nNote that functions created with lambda forms cannot contain\nstatements.\n', 'lists': u'\nList displays\n*************\n\nA list display is a possibly empty series of expressions enclosed in\nsquare brackets:\n\n list_display ::= "[" [expression_list | list_comprehension] "]"\n list_comprehension ::= expression list_for\n list_for ::= "for" target_list "in" old_expression_list [list_iter]\n old_expression_list ::= old_expression [("," old_expression)+ [","]]\n list_iter ::= list_for | list_if\n list_if ::= "if" old_expression [list_iter]\n\nA list display yields a new list object. Its contents are specified\nby providing either a list of expressions or a list comprehension.\nWhen a comma-separated list of expressions is supplied, its elements\nare evaluated from left to right and placed into the list object in\nthat order. When a list comprehension is supplied, it consists of a\nsingle expression followed by at least one ``for`` clause and zero or\nmore ``for`` or ``if`` clauses. In this case, the elements of the new\nlist are those that would be produced by considering each of the\n``for`` or ``if`` clauses a block, nesting from left to right, and\nevaluating the expression to produce a list element each time the\ninnermost block is reached [1].\n', - 'naming': u"\nNaming and binding\n******************\n\n*Names* refer to objects. Names are introduced by name binding\noperations. Each occurrence of a name in the program text refers to\nthe *binding* of that name established in the innermost function block\ncontaining the use.\n\nA *block* is a piece of Python program text that is executed as a\nunit. The following are blocks: a module, a function body, and a class\ndefinition. Each command typed interactively is a block. A script\nfile (a file given as standard input to the interpreter or specified\non the interpreter command line the first argument) is a code block.\nA script command (a command specified on the interpreter command line\nwith the '**-c**' option) is a code block. The file read by the\nbuilt-in function ``execfile()`` is a code block. The string argument\npassed to the built-in function ``eval()`` and to the ``exec``\nstatement is a code block. The expression read and evaluated by the\nbuilt-in function ``input()`` is a code block.\n\nA code block is executed in an *execution frame*. A frame contains\nsome administrative information (used for debugging) and determines\nwhere and how execution continues after the code block's execution has\ncompleted.\n\nA *scope* defines the visibility of a name within a block. If a local\nvariable is defined in a block, its scope includes that block. If the\ndefinition occurs in a function block, the scope extends to any blocks\ncontained within the defining one, unless a contained block introduces\na different binding for the name. The scope of names defined in a\nclass block is limited to the class block; it does not extend to the\ncode blocks of methods -- this includes generator expressions since\nthey are implemented using a function scope. This means that the\nfollowing will fail:\n\n class A:\n a = 42\n b = list(a + i for i in range(10))\n\nWhen a name is used in a code block, it is resolved using the nearest\nenclosing scope. The set of all such scopes visible to a code block\nis called the block's *environment*.\n\nIf a name is bound in a block, it is a local variable of that block.\nIf a name is bound at the module level, it is a global variable. (The\nvariables of the module code block are local and global.) If a\nvariable is used in a code block but not defined there, it is a *free\nvariable*.\n\nWhen a name is not found at all, a ``NameError`` exception is raised.\nIf the name refers to a local variable that has not been bound, a\n``UnboundLocalError`` exception is raised. ``UnboundLocalError`` is a\nsubclass of ``NameError``.\n\nThe following constructs bind names: formal parameters to functions,\n``import`` statements, class and function definitions (these bind the\nclass or function name in the defining block), and targets that are\nidentifiers if occurring in an assignment, ``for`` loop header, in the\nsecond position of an ``except`` clause header or after ``as`` in a\n``with`` statement. The ``import`` statement of the form ``from ...\nimport *`` binds all names defined in the imported module, except\nthose beginning with an underscore. This form may only be used at the\nmodule level.\n\nA target occurring in a ``del`` statement is also considered bound for\nthis purpose (though the actual semantics are to unbind the name). It\nis illegal to unbind a name that is referenced by an enclosing scope;\nthe compiler will report a ``SyntaxError``.\n\nEach assignment or import statement occurs within a block defined by a\nclass or function definition or at the module level (the top-level\ncode block).\n\nIf a name binding operation occurs anywhere within a code block, all\nuses of the name within the block are treated as references to the\ncurrent block. This can lead to errors when a name is used within a\nblock before it is bound. This rule is subtle. Python lacks\ndeclarations and allows name binding operations to occur anywhere\nwithin a code block. The local variables of a code block can be\ndetermined by scanning the entire text of the block for name binding\noperations.\n\nIf the global statement occurs within a block, all uses of the name\nspecified in the statement refer to the binding of that name in the\ntop-level namespace. Names are resolved in the top-level namespace by\nsearching the global namespace, i.e. the namespace of the module\ncontaining the code block, and the builtin namespace, the namespace of\nthe module ``__builtin__``. The global namespace is searched first.\nIf the name is not found there, the builtin namespace is searched.\nThe global statement must precede all uses of the name.\n\nThe built-in namespace associated with the execution of a code block\nis actually found by looking up the name ``__builtins__`` in its\nglobal namespace; this should be a dictionary or a module (in the\nlatter case the module's dictionary is used). By default, when in the\n``__main__`` module, ``__builtins__`` is the built-in module\n``__builtin__`` (note: no 's'); when in any other module,\n``__builtins__`` is an alias for the dictionary of the ``__builtin__``\nmodule itself. ``__builtins__`` can be set to a user-created\ndictionary to create a weak form of restricted execution.\n\nNote: Users should not touch ``__builtins__``; it is strictly an\n implementation detail. Users wanting to override values in the\n built-in namespace should ``import`` the ``__builtin__`` (no 's')\n module and modify its attributes appropriately.\n\nThe namespace for a module is automatically created the first time a\nmodule is imported. The main module for a script is always called\n``__main__``.\n\nThe global statement has the same scope as a name binding operation in\nthe same block. If the nearest enclosing scope for a free variable\ncontains a global statement, the free variable is treated as a global.\n\nA class definition is an executable statement that may use and define\nnames. These references follow the normal rules for name resolution.\nThe namespace of the class definition becomes the attribute dictionary\nof the class. Names defined at the class scope are not visible in\nmethods.\n\n\nInteraction with dynamic features\n=================================\n\nThere are several cases where Python statements are illegal when used\nin conjunction with nested scopes that contain free variables.\n\nIf a variable is referenced in an enclosing scope, it is illegal to\ndelete the name. An error will be reported at compile time.\n\nIf the wild card form of import --- ``import *`` --- is used in a\nfunction and the function contains or is a nested block with free\nvariables, the compiler will raise a ``SyntaxError``.\n\nIf ``exec`` is used in a function and the function contains or is a\nnested block with free variables, the compiler will raise a\n``SyntaxError`` unless the exec explicitly specifies the local\nnamespace for the ``exec``. (In other words, ``exec obj`` would be\nillegal, but ``exec obj in ns`` would be legal.)\n\nThe ``eval()``, ``execfile()``, and ``input()`` functions and the\n``exec`` statement do not have access to the full environment for\nresolving names. Names may be resolved in the local and global\nnamespaces of the caller. Free variables are not resolved in the\nnearest enclosing namespace, but in the global namespace. [1] The\n``exec`` statement and the ``eval()`` and ``execfile()`` functions\nhave optional arguments to override the global and local namespace.\nIf only one namespace is specified, it is used for both.\n", + 'naming': u"\nNaming and binding\n******************\n\n*Names* refer to objects. Names are introduced by name binding\noperations. Each occurrence of a name in the program text refers to\nthe *binding* of that name established in the innermost function block\ncontaining the use.\n\nA *block* is a piece of Python program text that is executed as a\nunit. The following are blocks: a module, a function body, and a class\ndefinition. Each command typed interactively is a block. A script\nfile (a file given as standard input to the interpreter or specified\non the interpreter command line the first argument) is a code block.\nA script command (a command specified on the interpreter command line\nwith the '**-c**' option) is a code block. The file read by the\nbuilt-in function ``execfile()`` is a code block. The string argument\npassed to the built-in function ``eval()`` and to the ``exec``\nstatement is a code block. The expression read and evaluated by the\nbuilt-in function ``input()`` is a code block.\n\nA code block is executed in an *execution frame*. A frame contains\nsome administrative information (used for debugging) and determines\nwhere and how execution continues after the code block's execution has\ncompleted.\n\nA *scope* defines the visibility of a name within a block. If a local\nvariable is defined in a block, its scope includes that block. If the\ndefinition occurs in a function block, the scope extends to any blocks\ncontained within the defining one, unless a contained block introduces\na different binding for the name. The scope of names defined in a\nclass block is limited to the class block; it does not extend to the\ncode blocks of methods -- this includes generator expressions since\nthey are implemented using a function scope. This means that the\nfollowing will fail:\n\n class A:\n a = 42\n b = list(a + i for i in range(10))\n\nWhen a name is used in a code block, it is resolved using the nearest\nenclosing scope. The set of all such scopes visible to a code block\nis called the block's *environment*.\n\nIf a name is bound in a block, it is a local variable of that block.\nIf a name is bound at the module level, it is a global variable. (The\nvariables of the module code block are local and global.) If a\nvariable is used in a code block but not defined there, it is a *free\nvariable*.\n\nWhen a name is not found at all, a ``NameError`` exception is raised.\nIf the name refers to a local variable that has not been bound, a\n``UnboundLocalError`` exception is raised. ``UnboundLocalError`` is a\nsubclass of ``NameError``.\n\nThe following constructs bind names: formal parameters to functions,\n``import`` statements, class and function definitions (these bind the\nclass or function name in the defining block), and targets that are\nidentifiers if occurring in an assignment, ``for`` loop header, in the\nsecond position of an ``except`` clause header or after ``as`` in a\n``with`` statement. The ``import`` statement of the form ``from ...\nimport *`` binds all names defined in the imported module, except\nthose beginning with an underscore. This form may only be used at the\nmodule level.\n\nA target occurring in a ``del`` statement is also considered bound for\nthis purpose (though the actual semantics are to unbind the name). It\nis illegal to unbind a name that is referenced by an enclosing scope;\nthe compiler will report a ``SyntaxError``.\n\nEach assignment or import statement occurs within a block defined by a\nclass or function definition or at the module level (the top-level\ncode block).\n\nIf a name binding operation occurs anywhere within a code block, all\nuses of the name within the block are treated as references to the\ncurrent block. This can lead to errors when a name is used within a\nblock before it is bound. This rule is subtle. Python lacks\ndeclarations and allows name binding operations to occur anywhere\nwithin a code block. The local variables of a code block can be\ndetermined by scanning the entire text of the block for name binding\noperations.\n\nIf the global statement occurs within a block, all uses of the name\nspecified in the statement refer to the binding of that name in the\ntop-level namespace. Names are resolved in the top-level namespace by\nsearching the global namespace, i.e. the namespace of the module\ncontaining the code block, and the builtins namespace, the namespace\nof the module ``__builtin__``. The global namespace is searched\nfirst. If the name is not found there, the builtins namespace is\nsearched. The global statement must precede all uses of the name.\n\nThe built-in namespace associated with the execution of a code block\nis actually found by looking up the name ``__builtins__`` in its\nglobal namespace; this should be a dictionary or a module (in the\nlatter case the module's dictionary is used). By default, when in the\n``__main__`` module, ``__builtins__`` is the built-in module\n``__builtin__`` (note: no 's'); when in any other module,\n``__builtins__`` is an alias for the dictionary of the ``__builtin__``\nmodule itself. ``__builtins__`` can be set to a user-created\ndictionary to create a weak form of restricted execution.\n\n**CPython implementation detail:** Users should not touch\n``__builtins__``; it is strictly an implementation detail. Users\nwanting to override values in the built-in namespace should ``import``\nthe ``__builtin__`` (no 's') module and modify its attributes\nappropriately.\n\nThe namespace for a module is automatically created the first time a\nmodule is imported. The main module for a script is always called\n``__main__``.\n\nThe global statement has the same scope as a name binding operation in\nthe same block. If the nearest enclosing scope for a free variable\ncontains a global statement, the free variable is treated as a global.\n\nA class definition is an executable statement that may use and define\nnames. These references follow the normal rules for name resolution.\nThe namespace of the class definition becomes the attribute dictionary\nof the class. Names defined at the class scope are not visible in\nmethods.\n\n\nInteraction with dynamic features\n=================================\n\nThere are several cases where Python statements are illegal when used\nin conjunction with nested scopes that contain free variables.\n\nIf a variable is referenced in an enclosing scope, it is illegal to\ndelete the name. An error will be reported at compile time.\n\nIf the wild card form of import --- ``import *`` --- is used in a\nfunction and the function contains or is a nested block with free\nvariables, the compiler will raise a ``SyntaxError``.\n\nIf ``exec`` is used in a function and the function contains or is a\nnested block with free variables, the compiler will raise a\n``SyntaxError`` unless the exec explicitly specifies the local\nnamespace for the ``exec``. (In other words, ``exec obj`` would be\nillegal, but ``exec obj in ns`` would be legal.)\n\nThe ``eval()``, ``execfile()``, and ``input()`` functions and the\n``exec`` statement do not have access to the full environment for\nresolving names. Names may be resolved in the local and global\nnamespaces of the caller. Free variables are not resolved in the\nnearest enclosing namespace, but in the global namespace. [1] The\n``exec`` statement and the ``eval()`` and ``execfile()`` functions\nhave optional arguments to override the global and local namespace.\nIf only one namespace is specified, it is used for both.\n", 'numbers': u"\nNumeric literals\n****************\n\nThere are four types of numeric literals: plain integers, long\nintegers, floating point numbers, and imaginary numbers. There are no\ncomplex literals (complex numbers can be formed by adding a real\nnumber and an imaginary number).\n\nNote that numeric literals do not include a sign; a phrase like ``-1``\nis actually an expression composed of the unary operator '``-``' and\nthe literal ``1``.\n", 'numeric-types': u'\nEmulating numeric types\n***********************\n\nThe following methods can be defined to emulate numeric objects.\nMethods corresponding to operations that are not supported by the\nparticular kind of number implemented (e.g., bitwise operations for\nnon-integral numbers) should be left undefined.\n\nobject.__add__(self, other)\nobject.__sub__(self, other)\nobject.__mul__(self, other)\nobject.__floordiv__(self, other)\nobject.__mod__(self, other)\nobject.__divmod__(self, other)\nobject.__pow__(self, other[, modulo])\nobject.__lshift__(self, other)\nobject.__rshift__(self, other)\nobject.__and__(self, other)\nobject.__xor__(self, other)\nobject.__or__(self, other)\n\n These methods are called to implement the binary arithmetic\n operations (``+``, ``-``, ``*``, ``//``, ``%``, ``divmod()``,\n ``pow()``, ``**``, ``<<``, ``>>``, ``&``, ``^``, ``|``). For\n instance, to evaluate the expression ``x + y``, where *x* is an\n instance of a class that has an ``__add__()`` method,\n ``x.__add__(y)`` is called. The ``__divmod__()`` method should be\n the equivalent to using ``__floordiv__()`` and ``__mod__()``; it\n should not be related to ``__truediv__()`` (described below). Note\n that ``__pow__()`` should be defined to accept an optional third\n argument if the ternary version of the built-in ``pow()`` function\n is to be supported.\n\n If one of those methods does not support the operation with the\n supplied arguments, it should return ``NotImplemented``.\n\nobject.__div__(self, other)\nobject.__truediv__(self, other)\n\n The division operator (``/``) is implemented by these methods. The\n ``__truediv__()`` method is used when ``__future__.division`` is in\n effect, otherwise ``__div__()`` is used. If only one of these two\n methods is defined, the object will not support division in the\n alternate context; ``TypeError`` will be raised instead.\n\nobject.__radd__(self, other)\nobject.__rsub__(self, other)\nobject.__rmul__(self, other)\nobject.__rdiv__(self, other)\nobject.__rtruediv__(self, other)\nobject.__rfloordiv__(self, other)\nobject.__rmod__(self, other)\nobject.__rdivmod__(self, other)\nobject.__rpow__(self, other)\nobject.__rlshift__(self, other)\nobject.__rrshift__(self, other)\nobject.__rand__(self, other)\nobject.__rxor__(self, other)\nobject.__ror__(self, other)\n\n These methods are called to implement the binary arithmetic\n operations (``+``, ``-``, ``*``, ``/``, ``%``, ``divmod()``,\n ``pow()``, ``**``, ``<<``, ``>>``, ``&``, ``^``, ``|``) with\n reflected (swapped) operands. These functions are only called if\n the left operand does not support the corresponding operation and\n the operands are of different types. [3] For instance, to evaluate\n the expression ``x - y``, where *y* is an instance of a class that\n has an ``__rsub__()`` method, ``y.__rsub__(x)`` is called if\n ``x.__sub__(y)`` returns *NotImplemented*.\n\n Note that ternary ``pow()`` will not try calling ``__rpow__()``\n (the coercion rules would become too complicated).\n\n Note: If the right operand\'s type is a subclass of the left operand\'s\n type and that subclass provides the reflected method for the\n operation, this method will be called before the left operand\'s\n non-reflected method. This behavior allows subclasses to\n override their ancestors\' operations.\n\nobject.__iadd__(self, other)\nobject.__isub__(self, other)\nobject.__imul__(self, other)\nobject.__idiv__(self, other)\nobject.__itruediv__(self, other)\nobject.__ifloordiv__(self, other)\nobject.__imod__(self, other)\nobject.__ipow__(self, other[, modulo])\nobject.__ilshift__(self, other)\nobject.__irshift__(self, other)\nobject.__iand__(self, other)\nobject.__ixor__(self, other)\nobject.__ior__(self, other)\n\n These methods are called to implement the augmented arithmetic\n assignments (``+=``, ``-=``, ``*=``, ``/=``, ``//=``, ``%=``,\n ``**=``, ``<<=``, ``>>=``, ``&=``, ``^=``, ``|=``). These methods\n should attempt to do the operation in-place (modifying *self*) and\n return the result (which could be, but does not have to be,\n *self*). If a specific method is not defined, the augmented\n assignment falls back to the normal methods. For instance, to\n execute the statement ``x += y``, where *x* is an instance of a\n class that has an ``__iadd__()`` method, ``x.__iadd__(y)`` is\n called. If *x* is an instance of a class that does not define a\n ``__iadd__()`` method, ``x.__add__(y)`` and ``y.__radd__(x)`` are\n considered, as with the evaluation of ``x + y``.\n\nobject.__neg__(self)\nobject.__pos__(self)\nobject.__abs__(self)\nobject.__invert__(self)\n\n Called to implement the unary arithmetic operations (``-``, ``+``,\n ``abs()`` and ``~``).\n\nobject.__complex__(self)\nobject.__int__(self)\nobject.__long__(self)\nobject.__float__(self)\n\n Called to implement the built-in functions ``complex()``,\n ``int()``, ``long()``, and ``float()``. Should return a value of\n the appropriate type.\n\nobject.__oct__(self)\nobject.__hex__(self)\n\n Called to implement the built-in functions ``oct()`` and ``hex()``.\n Should return a string value.\n\nobject.__index__(self)\n\n Called to implement ``operator.index()``. Also called whenever\n Python needs an integer object (such as in slicing). Must return\n an integer (int or long).\n\n New in version 2.5.\n\nobject.__coerce__(self, other)\n\n Called to implement "mixed-mode" numeric arithmetic. Should either\n return a 2-tuple containing *self* and *other* converted to a\n common numeric type, or ``None`` if conversion is impossible. When\n the common type would be the type of ``other``, it is sufficient to\n return ``None``, since the interpreter will also ask the other\n object to attempt a coercion (but sometimes, if the implementation\n of the other type cannot be changed, it is useful to do the\n conversion to the other type here). A return value of\n ``NotImplemented`` is equivalent to returning ``None``.\n', - 'objects': u'\nObjects, values and types\n*************************\n\n*Objects* are Python\'s abstraction for data. All data in a Python\nprogram is represented by objects or by relations between objects. (In\na sense, and in conformance to Von Neumann\'s model of a "stored\nprogram computer," code is also represented by objects.)\n\nEvery object has an identity, a type and a value. An object\'s\n*identity* never changes once it has been created; you may think of it\nas the object\'s address in memory. The \'``is``\' operator compares the\nidentity of two objects; the ``id()`` function returns an integer\nrepresenting its identity (currently implemented as its address). An\nobject\'s *type* is also unchangeable. [1] An object\'s type determines\nthe operations that the object supports (e.g., "does it have a\nlength?") and also defines the possible values for objects of that\ntype. The ``type()`` function returns an object\'s type (which is an\nobject itself). The *value* of some objects can change. Objects\nwhose value can change are said to be *mutable*; objects whose value\nis unchangeable once they are created are called *immutable*. (The\nvalue of an immutable container object that contains a reference to a\nmutable object can change when the latter\'s value is changed; however\nthe container is still considered immutable, because the collection of\nobjects it contains cannot be changed. So, immutability is not\nstrictly the same as having an unchangeable value, it is more subtle.)\nAn object\'s mutability is determined by its type; for instance,\nnumbers, strings and tuples are immutable, while dictionaries and\nlists are mutable.\n\nObjects are never explicitly destroyed; however, when they become\nunreachable they may be garbage-collected. An implementation is\nallowed to postpone garbage collection or omit it altogether --- it is\na matter of implementation quality how garbage collection is\nimplemented, as long as no objects are collected that are still\nreachable. (Implementation note: CPython currently uses a reference-\ncounting scheme with (optional) delayed detection of cyclically linked\ngarbage, which collects most objects as soon as they become\nunreachable, but is not guaranteed to collect garbage containing\ncircular references. See the documentation of the ``gc`` module for\ninformation on controlling the collection of cyclic garbage. Other\nimplementations act differently and CPython may change.)\n\nNote that the use of the implementation\'s tracing or debugging\nfacilities may keep objects alive that would normally be collectable.\nAlso note that catching an exception with a \'``try``...``except``\'\nstatement may keep objects alive.\n\nSome objects contain references to "external" resources such as open\nfiles or windows. It is understood that these resources are freed\nwhen the object is garbage-collected, but since garbage collection is\nnot guaranteed to happen, such objects also provide an explicit way to\nrelease the external resource, usually a ``close()`` method. Programs\nare strongly recommended to explicitly close such objects. The\n\'``try``...``finally``\' statement provides a convenient way to do\nthis.\n\nSome objects contain references to other objects; these are called\n*containers*. Examples of containers are tuples, lists and\ndictionaries. The references are part of a container\'s value. In\nmost cases, when we talk about the value of a container, we imply the\nvalues, not the identities of the contained objects; however, when we\ntalk about the mutability of a container, only the identities of the\nimmediately contained objects are implied. So, if an immutable\ncontainer (like a tuple) contains a reference to a mutable object, its\nvalue changes if that mutable object is changed.\n\nTypes affect almost all aspects of object behavior. Even the\nimportance of object identity is affected in some sense: for immutable\ntypes, operations that compute new values may actually return a\nreference to any existing object with the same type and value, while\nfor mutable objects this is not allowed. E.g., after ``a = 1; b =\n1``, ``a`` and ``b`` may or may not refer to the same object with the\nvalue one, depending on the implementation, but after ``c = []; d =\n[]``, ``c`` and ``d`` are guaranteed to refer to two different,\nunique, newly created empty lists. (Note that ``c = d = []`` assigns\nthe same object to both ``c`` and ``d``.)\n', + 'objects': u'\nObjects, values and types\n*************************\n\n*Objects* are Python\'s abstraction for data. All data in a Python\nprogram is represented by objects or by relations between objects. (In\na sense, and in conformance to Von Neumann\'s model of a "stored\nprogram computer," code is also represented by objects.)\n\nEvery object has an identity, a type and a value. An object\'s\n*identity* never changes once it has been created; you may think of it\nas the object\'s address in memory. The \'``is``\' operator compares the\nidentity of two objects; the ``id()`` function returns an integer\nrepresenting its identity (currently implemented as its address). An\nobject\'s *type* is also unchangeable. [1] An object\'s type determines\nthe operations that the object supports (e.g., "does it have a\nlength?") and also defines the possible values for objects of that\ntype. The ``type()`` function returns an object\'s type (which is an\nobject itself). The *value* of some objects can change. Objects\nwhose value can change are said to be *mutable*; objects whose value\nis unchangeable once they are created are called *immutable*. (The\nvalue of an immutable container object that contains a reference to a\nmutable object can change when the latter\'s value is changed; however\nthe container is still considered immutable, because the collection of\nobjects it contains cannot be changed. So, immutability is not\nstrictly the same as having an unchangeable value, it is more subtle.)\nAn object\'s mutability is determined by its type; for instance,\nnumbers, strings and tuples are immutable, while dictionaries and\nlists are mutable.\n\nObjects are never explicitly destroyed; however, when they become\nunreachable they may be garbage-collected. An implementation is\nallowed to postpone garbage collection or omit it altogether --- it is\na matter of implementation quality how garbage collection is\nimplemented, as long as no objects are collected that are still\nreachable.\n\n**CPython implementation detail:** CPython currently uses a reference-\ncounting scheme with (optional) delayed detection of cyclically linked\ngarbage, which collects most objects as soon as they become\nunreachable, but is not guaranteed to collect garbage containing\ncircular references. See the documentation of the ``gc`` module for\ninformation on controlling the collection of cyclic garbage. Other\nimplementations act differently and CPython may change.\n\nNote that the use of the implementation\'s tracing or debugging\nfacilities may keep objects alive that would normally be collectable.\nAlso note that catching an exception with a \'``try``...``except``\'\nstatement may keep objects alive.\n\nSome objects contain references to "external" resources such as open\nfiles or windows. It is understood that these resources are freed\nwhen the object is garbage-collected, but since garbage collection is\nnot guaranteed to happen, such objects also provide an explicit way to\nrelease the external resource, usually a ``close()`` method. Programs\nare strongly recommended to explicitly close such objects. The\n\'``try``...``finally``\' statement provides a convenient way to do\nthis.\n\nSome objects contain references to other objects; these are called\n*containers*. Examples of containers are tuples, lists and\ndictionaries. The references are part of a container\'s value. In\nmost cases, when we talk about the value of a container, we imply the\nvalues, not the identities of the contained objects; however, when we\ntalk about the mutability of a container, only the identities of the\nimmediately contained objects are implied. So, if an immutable\ncontainer (like a tuple) contains a reference to a mutable object, its\nvalue changes if that mutable object is changed.\n\nTypes affect almost all aspects of object behavior. Even the\nimportance of object identity is affected in some sense: for immutable\ntypes, operations that compute new values may actually return a\nreference to any existing object with the same type and value, while\nfor mutable objects this is not allowed. E.g., after ``a = 1; b =\n1``, ``a`` and ``b`` may or may not refer to the same object with the\nvalue one, depending on the implementation, but after ``c = []; d =\n[]``, ``c`` and ``d`` are guaranteed to refer to two different,\nunique, newly created empty lists. (Note that ``c = d = []`` assigns\nthe same object to both ``c`` and ``d``.)\n', 'operator-summary': u'\nSummary\n*******\n\nThe following table summarizes the operator precedences in Python,\nfrom lowest precedence (least binding) to highest precedence (most\nbinding). Operators in the same box have the same precedence. Unless\nthe syntax is explicitly given, operators are binary. Operators in\nthe same box group left to right (except for comparisons, including\ntests, which all have the same precedence and chain from left to right\n--- see section *Comparisons* --- and exponentiation, which groups\nfrom right to left).\n\n+-------------------------------------------------+---------------------------------------+\n| Operator | Description |\n+=================================================+=======================================+\n| ``lambda`` | Lambda expression |\n+-------------------------------------------------+---------------------------------------+\n| ``or`` | Boolean OR |\n+-------------------------------------------------+---------------------------------------+\n| ``and`` | Boolean AND |\n+-------------------------------------------------+---------------------------------------+\n| ``not`` *x* | Boolean NOT |\n+-------------------------------------------------+---------------------------------------+\n| ``in``, ``not`` ``in``, ``is``, ``is not``, | Comparisons, including membership |\n| ``<``, ``<=``, ``>``, ``>=``, ``<>``, ``!=``, | tests and identity tests, |\n| ``==`` | |\n+-------------------------------------------------+---------------------------------------+\n| ``|`` | Bitwise OR |\n+-------------------------------------------------+---------------------------------------+\n| ``^`` | Bitwise XOR |\n+-------------------------------------------------+---------------------------------------+\n| ``&`` | Bitwise AND |\n+-------------------------------------------------+---------------------------------------+\n| ``<<``, ``>>`` | Shifts |\n+-------------------------------------------------+---------------------------------------+\n| ``+``, ``-`` | Addition and subtraction |\n+-------------------------------------------------+---------------------------------------+\n| ``*``, ``/``, ``//``, ``%`` | Multiplication, division, remainder |\n+-------------------------------------------------+---------------------------------------+\n| ``+x``, ``-x``, ``~x`` | Positive, negative, bitwise NOT |\n+-------------------------------------------------+---------------------------------------+\n| ``**`` | Exponentiation [8] |\n+-------------------------------------------------+---------------------------------------+\n| ``x[index]``, ``x[index:index]``, | Subscription, slicing, call, |\n| ``x(arguments...)``, ``x.attribute`` | attribute reference |\n+-------------------------------------------------+---------------------------------------+\n| ``(expressions...)``, ``[expressions...]``, | Binding or tuple display, list |\n| ``{key:datum...}``, ```expressions...``` | display, dictionary display, string |\n| | conversion |\n+-------------------------------------------------+---------------------------------------+\n\n-[ Footnotes ]-\n\n[1] In Python 2.3 and later releases, a list comprehension "leaks" the\n control variables of each ``for`` it contains into the containing\n scope. However, this behavior is deprecated, and relying on it\n will not work in Python 3.0\n\n[2] While ``abs(x%y) < abs(y)`` is true mathematically, for floats it\n may not be true numerically due to roundoff. For example, and\n assuming a platform on which a Python float is an IEEE 754 double-\n precision number, in order that ``-1e-100 % 1e100`` have the same\n sign as ``1e100``, the computed result is ``-1e-100 + 1e100``,\n which is numerically exactly equal to ``1e100``. Function\n ``fmod()`` in the ``math`` module returns a result whose sign\n matches the sign of the first argument instead, and so returns\n ``-1e-100`` in this case. Which approach is more appropriate\n depends on the application.\n\n[3] If x is very close to an exact integer multiple of y, it\'s\n possible for ``floor(x/y)`` to be one larger than ``(x-x%y)/y``\n due to rounding. In such cases, Python returns the latter result,\n in order to preserve that ``divmod(x,y)[0] * y + x % y`` be very\n close to ``x``.\n\n[4] While comparisons between unicode strings make sense at the byte\n level, they may be counter-intuitive to users. For example, the\n strings ``u"\\u00C7"`` and ``u"\\u0043\\u0327"`` compare differently,\n even though they both represent the same unicode character (LATIN\n CAPTITAL LETTER C WITH CEDILLA). To compare strings in a human\n recognizable way, compare using ``unicodedata.normalize()``.\n\n[5] The implementation computes this efficiently, without constructing\n lists or sorting.\n\n[6] Earlier versions of Python used lexicographic comparison of the\n sorted (key, value) lists, but this was very expensive for the\n common case of comparing for equality. An even earlier version of\n Python compared dictionaries by identity only, but this caused\n surprises because people expected to be able to test a dictionary\n for emptiness by comparing it to ``{}``.\n\n[7] Due to automatic garbage-collection, free lists, and the dynamic\n nature of descriptors, you may notice seemingly unusual behaviour\n in certain uses of the ``is`` operator, like those involving\n comparisons between instance methods, or constants. Check their\n documentation for more info.\n\n[8] The power operator ``**`` binds less tightly than an arithmetic or\n bitwise unary operator on its right, that is, ``2**-1`` is\n ``0.5``.\n', 'pass': u'\nThe ``pass`` statement\n**********************\n\n pass_stmt ::= "pass"\n\n``pass`` is a null operation --- when it is executed, nothing happens.\nIt is useful as a placeholder when a statement is required\nsyntactically, but no code needs to be executed, for example:\n\n def f(arg): pass # a function that does nothing (yet)\n\n class C: pass # a class with no methods (yet)\n', 'power': u'\nThe power operator\n******************\n\nThe power operator binds more tightly than unary operators on its\nleft; it binds less tightly than unary operators on its right. The\nsyntax is:\n\n power ::= primary ["**" u_expr]\n\nThus, in an unparenthesized sequence of power and unary operators, the\noperators are evaluated from right to left (this does not constrain\nthe evaluation order for the operands): ``-1**2`` results in ``-1``.\n\nThe power operator has the same semantics as the built-in ``pow()``\nfunction, when called with two arguments: it yields its left argument\nraised to the power of its right argument. The numeric arguments are\nfirst converted to a common type. The result type is that of the\narguments after coercion.\n\nWith mixed operand types, the coercion rules for binary arithmetic\noperators apply. For int and long int operands, the result has the\nsame type as the operands (after coercion) unless the second argument\nis negative; in that case, all arguments are converted to float and a\nfloat result is delivered. For example, ``10**2`` returns ``100``, but\n``10**-2`` returns ``0.01``. (This last feature was added in Python\n2.2. In Python 2.1 and before, if both arguments were of integer types\nand the second argument was negative, an exception was raised).\n\nRaising ``0.0`` to a negative power results in a\n``ZeroDivisionError``. Raising a negative number to a fractional power\nresults in a ``ValueError``.\n', @@ -59,24 +59,24 @@ 'raise': u'\nThe ``raise`` statement\n***********************\n\n raise_stmt ::= "raise" [expression ["," expression ["," expression]]]\n\nIf no expressions are present, ``raise`` re-raises the last exception\nthat was active in the current scope. If no exception is active in\nthe current scope, a ``TypeError`` exception is raised indicating that\nthis is an error (if running under IDLE, a ``Queue.Empty`` exception\nis raised instead).\n\nOtherwise, ``raise`` evaluates the expressions to get three objects,\nusing ``None`` as the value of omitted expressions. The first two\nobjects are used to determine the *type* and *value* of the exception.\n\nIf the first object is an instance, the type of the exception is the\nclass of the instance, the instance itself is the value, and the\nsecond object must be ``None``.\n\nIf the first object is a class, it becomes the type of the exception.\nThe second object is used to determine the exception value: If it is\nan instance of the class, the instance becomes the exception value. If\nthe second object is a tuple, it is used as the argument list for the\nclass constructor; if it is ``None``, an empty argument list is used,\nand any other object is treated as a single argument to the\nconstructor. The instance so created by calling the constructor is\nused as the exception value.\n\nIf a third object is present and not ``None``, it must be a traceback\nobject (see section *The standard type hierarchy*), and it is\nsubstituted instead of the current location as the place where the\nexception occurred. If the third object is present and not a\ntraceback object or ``None``, a ``TypeError`` exception is raised.\nThe three-expression form of ``raise`` is useful to re-raise an\nexception transparently in an except clause, but ``raise`` with no\nexpressions should be preferred if the exception to be re-raised was\nthe most recently active exception in the current scope.\n\nAdditional information on exceptions can be found in section\n*Exceptions*, and information about handling exceptions is in section\n*The try statement*.\n', 'return': u'\nThe ``return`` statement\n************************\n\n return_stmt ::= "return" [expression_list]\n\n``return`` may only occur syntactically nested in a function\ndefinition, not within a nested class definition.\n\nIf an expression list is present, it is evaluated, else ``None`` is\nsubstituted.\n\n``return`` leaves the current function call with the expression list\n(or ``None``) as return value.\n\nWhen ``return`` passes control out of a ``try`` statement with a\n``finally`` clause, that ``finally`` clause is executed before really\nleaving the function.\n\nIn a generator function, the ``return`` statement is not allowed to\ninclude an **expression_list**. In that context, a bare ``return``\nindicates that the generator is done and will cause ``StopIteration``\nto be raised.\n', 'sequence-methods': u'\nAdditional methods for emulation of sequence types\n**************************************************\n\nThe following optional methods can be defined to further emulate\nsequence objects. Immutable sequences methods should at most only\ndefine ``__getslice__()``; mutable sequences might define all three\nmethods.\n\nobject.__getslice__(self, i, j)\n\n Deprecated since version 2.0: Support slice objects as parameters\n to the ``__getitem__()`` method. (However, built-in types in\n CPython currently still implement ``__getslice__()``. Therefore,\n you have to override it in derived classes when implementing\n slicing.)\n\n Called to implement evaluation of ``self[i:j]``. The returned\n object should be of the same type as *self*. Note that missing *i*\n or *j* in the slice expression are replaced by zero or\n ``sys.maxint``, respectively. If negative indexes are used in the\n slice, the length of the sequence is added to that index. If the\n instance does not implement the ``__len__()`` method, an\n ``AttributeError`` is raised. No guarantee is made that indexes\n adjusted this way are not still negative. Indexes which are\n greater than the length of the sequence are not modified. If no\n ``__getslice__()`` is found, a slice object is created instead, and\n passed to ``__getitem__()`` instead.\n\nobject.__setslice__(self, i, j, sequence)\n\n Called to implement assignment to ``self[i:j]``. Same notes for *i*\n and *j* as for ``__getslice__()``.\n\n This method is deprecated. If no ``__setslice__()`` is found, or\n for extended slicing of the form ``self[i:j:k]``, a slice object is\n created, and passed to ``__setitem__()``, instead of\n ``__setslice__()`` being called.\n\nobject.__delslice__(self, i, j)\n\n Called to implement deletion of ``self[i:j]``. Same notes for *i*\n and *j* as for ``__getslice__()``. This method is deprecated. If no\n ``__delslice__()`` is found, or for extended slicing of the form\n ``self[i:j:k]``, a slice object is created, and passed to\n ``__delitem__()``, instead of ``__delslice__()`` being called.\n\nNotice that these methods are only invoked when a single slice with a\nsingle colon is used, and the slice method is available. For slice\noperations involving extended slice notation, or in absence of the\nslice methods, ``__getitem__()``, ``__setitem__()`` or\n``__delitem__()`` is called with a slice object as argument.\n\nThe following example demonstrate how to make your program or module\ncompatible with earlier versions of Python (assuming that methods\n``__getitem__()``, ``__setitem__()`` and ``__delitem__()`` support\nslice objects as arguments):\n\n class MyClass:\n ...\n def __getitem__(self, index):\n ...\n def __setitem__(self, index, value):\n ...\n def __delitem__(self, index):\n ...\n\n if sys.version_info < (2, 0):\n # They won\'t be defined if version is at least 2.0 final\n\n def __getslice__(self, i, j):\n return self[max(0, i):max(0, j):]\n def __setslice__(self, i, j, seq):\n self[max(0, i):max(0, j):] = seq\n def __delslice__(self, i, j):\n del self[max(0, i):max(0, j):]\n ...\n\nNote the calls to ``max()``; these are necessary because of the\nhandling of negative indices before the ``__*slice__()`` methods are\ncalled. When negative indexes are used, the ``__*item__()`` methods\nreceive them as provided, but the ``__*slice__()`` methods get a\n"cooked" form of the index values. For each negative index value, the\nlength of the sequence is added to the index before calling the method\n(which may still result in a negative index); this is the customary\nhandling of negative indexes by the built-in sequence types, and the\n``__*item__()`` methods are expected to do this as well. However,\nsince they should already be doing that, negative indexes cannot be\npassed in; they must be constrained to the bounds of the sequence\nbefore being passed to the ``__*item__()`` methods. Calling ``max(0,\ni)`` conveniently returns the proper value.\n', - 'sequence-types': u"\nEmulating container types\n*************************\n\nThe following methods can be defined to implement container objects.\nContainers usually are sequences (such as lists or tuples) or mappings\n(like dictionaries), but can represent other containers as well. The\nfirst set of methods is used either to emulate a sequence or to\nemulate a mapping; the difference is that for a sequence, the\nallowable keys should be the integers *k* for which ``0 <= k < N``\nwhere *N* is the length of the sequence, or slice objects, which\ndefine a range of items. (For backwards compatibility, the method\n``__getslice__()`` (see below) can also be defined to handle simple,\nbut not extended slices.) It is also recommended that mappings provide\nthe methods ``keys()``, ``values()``, ``items()``, ``has_key()``,\n``get()``, ``clear()``, ``setdefault()``, ``iterkeys()``,\n``itervalues()``, ``iteritems()``, ``pop()``, ``popitem()``,\n``copy()``, and ``update()`` behaving similar to those for Python's\nstandard dictionary objects. The ``UserDict`` module provides a\n``DictMixin`` class to help create those methods from a base set of\n``__getitem__()``, ``__setitem__()``, ``__delitem__()``, and\n``keys()``. Mutable sequences should provide methods ``append()``,\n``count()``, ``index()``, ``extend()``, ``insert()``, ``pop()``,\n``remove()``, ``reverse()`` and ``sort()``, like Python standard list\nobjects. Finally, sequence types should implement addition (meaning\nconcatenation) and multiplication (meaning repetition) by defining the\nmethods ``__add__()``, ``__radd__()``, ``__iadd__()``, ``__mul__()``,\n``__rmul__()`` and ``__imul__()`` described below; they should not\ndefine ``__coerce__()`` or other numerical operators. It is\nrecommended that both mappings and sequences implement the\n``__contains__()`` method to allow efficient use of the ``in``\noperator; for mappings, ``in`` should be equivalent of ``has_key()``;\nfor sequences, it should search through the values. It is further\nrecommended that both mappings and sequences implement the\n``__iter__()`` method to allow efficient iteration through the\ncontainer; for mappings, ``__iter__()`` should be the same as\n``iterkeys()``; for sequences, it should iterate through the values.\n\nobject.__len__(self)\n\n Called to implement the built-in function ``len()``. Should return\n the length of the object, an integer ``>=`` 0. Also, an object\n that doesn't define a ``__nonzero__()`` method and whose\n ``__len__()`` method returns zero is considered to be false in a\n Boolean context.\n\nobject.__getitem__(self, key)\n\n Called to implement evaluation of ``self[key]``. For sequence\n types, the accepted keys should be integers and slice objects.\n Note that the special interpretation of negative indexes (if the\n class wishes to emulate a sequence type) is up to the\n ``__getitem__()`` method. If *key* is of an inappropriate type,\n ``TypeError`` may be raised; if of a value outside the set of\n indexes for the sequence (after any special interpretation of\n negative values), ``IndexError`` should be raised. For mapping\n types, if *key* is missing (not in the container), ``KeyError``\n should be raised.\n\n Note: ``for`` loops expect that an ``IndexError`` will be raised for\n illegal indexes to allow proper detection of the end of the\n sequence.\n\nobject.__setitem__(self, key, value)\n\n Called to implement assignment to ``self[key]``. Same note as for\n ``__getitem__()``. This should only be implemented for mappings if\n the objects support changes to the values for keys, or if new keys\n can be added, or for sequences if elements can be replaced. The\n same exceptions should be raised for improper *key* values as for\n the ``__getitem__()`` method.\n\nobject.__delitem__(self, key)\n\n Called to implement deletion of ``self[key]``. Same note as for\n ``__getitem__()``. This should only be implemented for mappings if\n the objects support removal of keys, or for sequences if elements\n can be removed from the sequence. The same exceptions should be\n raised for improper *key* values as for the ``__getitem__()``\n method.\n\nobject.__iter__(self)\n\n This method is called when an iterator is required for a container.\n This method should return a new iterator object that can iterate\n over all the objects in the container. For mappings, it should\n iterate over the keys of the container, and should also be made\n available as the method ``iterkeys()``.\n\n Iterator objects also need to implement this method; they are\n required to return themselves. For more information on iterator\n objects, see *Iterator Types*.\n\nobject.__reversed__(self)\n\n Called (if present) by the ``reversed()`` builtin to implement\n reverse iteration. It should return a new iterator object that\n iterates over all the objects in the container in reverse order.\n\n If the ``__reversed__()`` method is not provided, the\n ``reversed()`` builtin will fall back to using the sequence\n protocol (``__len__()`` and ``__getitem__()``). Objects that\n support the sequence protocol should only provide\n ``__reversed__()`` if they can provide an implementation that is\n more efficient than the one provided by ``reversed()``.\n\n New in version 2.6.\n\nThe membership test operators (``in`` and ``not in``) are normally\nimplemented as an iteration through a sequence. However, container\nobjects can supply the following special method with a more efficient\nimplementation, which also does not require the object be a sequence.\n\nobject.__contains__(self, item)\n\n Called to implement membership test operators. Should return true\n if *item* is in *self*, false otherwise. For mapping objects, this\n should consider the keys of the mapping rather than the values or\n the key-item pairs.\n", + 'sequence-types': u"\nEmulating container types\n*************************\n\nThe following methods can be defined to implement container objects.\nContainers usually are sequences (such as lists or tuples) or mappings\n(like dictionaries), but can represent other containers as well. The\nfirst set of methods is used either to emulate a sequence or to\nemulate a mapping; the difference is that for a sequence, the\nallowable keys should be the integers *k* for which ``0 <= k < N``\nwhere *N* is the length of the sequence, or slice objects, which\ndefine a range of items. (For backwards compatibility, the method\n``__getslice__()`` (see below) can also be defined to handle simple,\nbut not extended slices.) It is also recommended that mappings provide\nthe methods ``keys()``, ``values()``, ``items()``, ``has_key()``,\n``get()``, ``clear()``, ``setdefault()``, ``iterkeys()``,\n``itervalues()``, ``iteritems()``, ``pop()``, ``popitem()``,\n``copy()``, and ``update()`` behaving similar to those for Python's\nstandard dictionary objects. The ``UserDict`` module provides a\n``DictMixin`` class to help create those methods from a base set of\n``__getitem__()``, ``__setitem__()``, ``__delitem__()``, and\n``keys()``. Mutable sequences should provide methods ``append()``,\n``count()``, ``index()``, ``extend()``, ``insert()``, ``pop()``,\n``remove()``, ``reverse()`` and ``sort()``, like Python standard list\nobjects. Finally, sequence types should implement addition (meaning\nconcatenation) and multiplication (meaning repetition) by defining the\nmethods ``__add__()``, ``__radd__()``, ``__iadd__()``, ``__mul__()``,\n``__rmul__()`` and ``__imul__()`` described below; they should not\ndefine ``__coerce__()`` or other numerical operators. It is\nrecommended that both mappings and sequences implement the\n``__contains__()`` method to allow efficient use of the ``in``\noperator; for mappings, ``in`` should be equivalent of ``has_key()``;\nfor sequences, it should search through the values. It is further\nrecommended that both mappings and sequences implement the\n``__iter__()`` method to allow efficient iteration through the\ncontainer; for mappings, ``__iter__()`` should be the same as\n``iterkeys()``; for sequences, it should iterate through the values.\n\nobject.__len__(self)\n\n Called to implement the built-in function ``len()``. Should return\n the length of the object, an integer ``>=`` 0. Also, an object\n that doesn't define a ``__nonzero__()`` method and whose\n ``__len__()`` method returns zero is considered to be false in a\n Boolean context.\n\nobject.__getitem__(self, key)\n\n Called to implement evaluation of ``self[key]``. For sequence\n types, the accepted keys should be integers and slice objects.\n Note that the special interpretation of negative indexes (if the\n class wishes to emulate a sequence type) is up to the\n ``__getitem__()`` method. If *key* is of an inappropriate type,\n ``TypeError`` may be raised; if of a value outside the set of\n indexes for the sequence (after any special interpretation of\n negative values), ``IndexError`` should be raised. For mapping\n types, if *key* is missing (not in the container), ``KeyError``\n should be raised.\n\n Note: ``for`` loops expect that an ``IndexError`` will be raised for\n illegal indexes to allow proper detection of the end of the\n sequence.\n\nobject.__setitem__(self, key, value)\n\n Called to implement assignment to ``self[key]``. Same note as for\n ``__getitem__()``. This should only be implemented for mappings if\n the objects support changes to the values for keys, or if new keys\n can be added, or for sequences if elements can be replaced. The\n same exceptions should be raised for improper *key* values as for\n the ``__getitem__()`` method.\n\nobject.__delitem__(self, key)\n\n Called to implement deletion of ``self[key]``. Same note as for\n ``__getitem__()``. This should only be implemented for mappings if\n the objects support removal of keys, or for sequences if elements\n can be removed from the sequence. The same exceptions should be\n raised for improper *key* values as for the ``__getitem__()``\n method.\n\nobject.__iter__(self)\n\n This method is called when an iterator is required for a container.\n This method should return a new iterator object that can iterate\n over all the objects in the container. For mappings, it should\n iterate over the keys of the container, and should also be made\n available as the method ``iterkeys()``.\n\n Iterator objects also need to implement this method; they are\n required to return themselves. For more information on iterator\n objects, see *Iterator Types*.\n\nobject.__reversed__(self)\n\n Called (if present) by the ``reversed()`` built-in to implement\n reverse iteration. It should return a new iterator object that\n iterates over all the objects in the container in reverse order.\n\n If the ``__reversed__()`` method is not provided, the\n ``reversed()`` built-in will fall back to using the sequence\n protocol (``__len__()`` and ``__getitem__()``). Objects that\n support the sequence protocol should only provide\n ``__reversed__()`` if they can provide an implementation that is\n more efficient than the one provided by ``reversed()``.\n\n New in version 2.6.\n\nThe membership test operators (``in`` and ``not in``) are normally\nimplemented as an iteration through a sequence. However, container\nobjects can supply the following special method with a more efficient\nimplementation, which also does not require the object be a sequence.\n\nobject.__contains__(self, item)\n\n Called to implement membership test operators. Should return true\n if *item* is in *self*, false otherwise. For mapping objects, this\n should consider the keys of the mapping rather than the values or\n the key-item pairs.\n\n For objects that don't define ``__contains__()``, the membership\n test first tries iteration via ``__iter__()``, then the old\n sequence iteration protocol via ``__getitem__()``, see *this\n section in the language reference*.\n", 'shifting': u'\nShifting operations\n*******************\n\nThe shifting operations have lower priority than the arithmetic\noperations:\n\n shift_expr ::= a_expr | shift_expr ( "<<" | ">>" ) a_expr\n\nThese operators accept plain or long integers as arguments. The\narguments are converted to a common type. They shift the first\nargument to the left or right by the number of bits given by the\nsecond argument.\n\nA right shift by *n* bits is defined as division by ``pow(2, n)``. A\nleft shift by *n* bits is defined as multiplication with ``pow(2,\nn)``. Negative shift counts raise a ``ValueError`` exception.\n', 'slicings': u'\nSlicings\n********\n\nA slicing selects a range of items in a sequence object (e.g., a\nstring, tuple or list). Slicings may be used as expressions or as\ntargets in assignment or ``del`` statements. The syntax for a\nslicing:\n\n slicing ::= simple_slicing | extended_slicing\n simple_slicing ::= primary "[" short_slice "]"\n extended_slicing ::= primary "[" slice_list "]"\n slice_list ::= slice_item ("," slice_item)* [","]\n slice_item ::= expression | proper_slice | ellipsis\n proper_slice ::= short_slice | long_slice\n short_slice ::= [lower_bound] ":" [upper_bound]\n long_slice ::= short_slice ":" [stride]\n lower_bound ::= expression\n upper_bound ::= expression\n stride ::= expression\n ellipsis ::= "..."\n\nThere is ambiguity in the formal syntax here: anything that looks like\nan expression list also looks like a slice list, so any subscription\ncan be interpreted as a slicing. Rather than further complicating the\nsyntax, this is disambiguated by defining that in this case the\ninterpretation as a subscription takes priority over the\ninterpretation as a slicing (this is the case if the slice list\ncontains no proper slice nor ellipses). Similarly, when the slice\nlist has exactly one short slice and no trailing comma, the\ninterpretation as a simple slicing takes priority over that as an\nextended slicing.\n\nThe semantics for a simple slicing are as follows. The primary must\nevaluate to a sequence object. The lower and upper bound expressions,\nif present, must evaluate to plain integers; defaults are zero and the\n``sys.maxint``, respectively. If either bound is negative, the\nsequence\'s length is added to it. The slicing now selects all items\nwith index *k* such that ``i <= k < j`` where *i* and *j* are the\nspecified lower and upper bounds. This may be an empty sequence. It\nis not an error if *i* or *j* lie outside the range of valid indexes\n(such items don\'t exist so they aren\'t selected).\n\nThe semantics for an extended slicing are as follows. The primary\nmust evaluate to a mapping object, and it is indexed with a key that\nis constructed from the slice list, as follows. If the slice list\ncontains at least one comma, the key is a tuple containing the\nconversion of the slice items; otherwise, the conversion of the lone\nslice item is the key. The conversion of a slice item that is an\nexpression is that expression. The conversion of an ellipsis slice\nitem is the built-in ``Ellipsis`` object. The conversion of a proper\nslice is a slice object (see section *The standard type hierarchy*)\nwhose ``start``, ``stop`` and ``step`` attributes are the values of\nthe expressions given as lower bound, upper bound and stride,\nrespectively, substituting ``None`` for missing expressions.\n', 'specialattrs': u"\nSpecial Attributes\n******************\n\nThe implementation adds a few special read-only attributes to several\nobject types, where they are relevant. Some of these are not reported\nby the ``dir()`` built-in function.\n\nobject.__dict__\n\n A dictionary or other mapping object used to store an object's\n (writable) attributes.\n\nobject.__methods__\n\n Deprecated since version 2.2: Use the built-in function ``dir()``\n to get a list of an object's attributes. This attribute is no\n longer available.\n\nobject.__members__\n\n Deprecated since version 2.2: Use the built-in function ``dir()``\n to get a list of an object's attributes. This attribute is no\n longer available.\n\ninstance.__class__\n\n The class to which a class instance belongs.\n\nclass.__bases__\n\n The tuple of base classes of a class object. If there are no base\n classes, this will be an empty tuple.\n\nclass.__name__\n\n The name of the class or type.\n\nThe following attributes are only supported by *new-style class*es.\n\nclass.__mro__\n\n This attribute is a tuple of classes that are considered when\n looking for base classes during method resolution.\n\nclass.mro()\n\n This method can be overridden by a metaclass to customize the\n method resolution order for its instances. It is called at class\n instantiation, and its result is stored in ``__mro__``.\n\nclass.__subclasses__()\n\n Each new-style class keeps a list of weak references to its\n immediate subclasses. This method returns a list of all those\n references still alive. Example:\n\n >>> int.__subclasses__()\n []\n\n-[ Footnotes ]-\n\n[1] Additional information on these special methods may be found in\n the Python Reference Manual (*Basic customization*).\n\n[2] As a consequence, the list ``[1, 2]`` is considered equal to\n ``[1.0, 2.0]``, and similarly for tuples.\n\n[3] They must have since the parser can't tell the type of the\n operands.\n\n[4] To format only a tuple you should therefore provide a singleton\n tuple whose only element is the tuple to be formatted.\n\n[5] These numbers are fairly arbitrary. They are intended to avoid\n printing endless strings of meaningless digits without hampering\n correct use and without having to know the exact precision of\n floating point values on a particular machine.\n\n[6] The advantage of leaving the newline on is that returning an empty\n string is then an unambiguous EOF indication. It is also possible\n (in cases where it might matter, for example, if you want to make\n an exact copy of a file while scanning its lines) to tell whether\n the last line of a file ended in a newline or not (yes this\n happens!).\n", - 'specialnames': u'\nSpecial method names\n********************\n\nA class can implement certain operations that are invoked by special\nsyntax (such as arithmetic operations or subscripting and slicing) by\ndefining methods with special names. This is Python\'s approach to\n*operator overloading*, allowing classes to define their own behavior\nwith respect to language operators. For instance, if a class defines\na method named ``__getitem__()``, and ``x`` is an instance of this\nclass, then ``x[i]`` is roughly equivalent to ``x.__getitem__(i)`` for\nold-style classes and ``type(x).__getitem__(x, i)`` for new-style\nclasses. Except where mentioned, attempts to execute an operation\nraise an exception when no appropriate method is defined (typically\n``AttributeError`` or ``TypeError``).\n\nWhen implementing a class that emulates any built-in type, it is\nimportant that the emulation only be implemented to the degree that it\nmakes sense for the object being modelled. For example, some\nsequences may work well with retrieval of individual elements, but\nextracting a slice may not make sense. (One example of this is the\n``NodeList`` interface in the W3C\'s Document Object Model.)\n\n\nBasic customization\n===================\n\nobject.__new__(cls[, ...])\n\n Called to create a new instance of class *cls*. ``__new__()`` is a\n static method (special-cased so you need not declare it as such)\n that takes the class of which an instance was requested as its\n first argument. The remaining arguments are those passed to the\n object constructor expression (the call to the class). The return\n value of ``__new__()`` should be the new object instance (usually\n an instance of *cls*).\n\n Typical implementations create a new instance of the class by\n invoking the superclass\'s ``__new__()`` method using\n ``super(currentclass, cls).__new__(cls[, ...])`` with appropriate\n arguments and then modifying the newly-created instance as\n necessary before returning it.\n\n If ``__new__()`` returns an instance of *cls*, then the new\n instance\'s ``__init__()`` method will be invoked like\n ``__init__(self[, ...])``, where *self* is the new instance and the\n remaining arguments are the same as were passed to ``__new__()``.\n\n If ``__new__()`` does not return an instance of *cls*, then the new\n instance\'s ``__init__()`` method will not be invoked.\n\n ``__new__()`` is intended mainly to allow subclasses of immutable\n types (like int, str, or tuple) to customize instance creation. It\n is also commonly overridden in custom metaclasses in order to\n customize class creation.\n\nobject.__init__(self[, ...])\n\n Called when the instance is created. The arguments are those\n passed to the class constructor expression. If a base class has an\n ``__init__()`` method, the derived class\'s ``__init__()`` method,\n if any, must explicitly call it to ensure proper initialization of\n the base class part of the instance; for example:\n ``BaseClass.__init__(self, [args...])``. As a special constraint\n on constructors, no value may be returned; doing so will cause a\n ``TypeError`` to be raised at runtime.\n\nobject.__del__(self)\n\n Called when the instance is about to be destroyed. This is also\n called a destructor. If a base class has a ``__del__()`` method,\n the derived class\'s ``__del__()`` method, if any, must explicitly\n call it to ensure proper deletion of the base class part of the\n instance. Note that it is possible (though not recommended!) for\n the ``__del__()`` method to postpone destruction of the instance by\n creating a new reference to it. It may then be called at a later\n time when this new reference is deleted. It is not guaranteed that\n ``__del__()`` methods are called for objects that still exist when\n the interpreter exits.\n\n Note: ``del x`` doesn\'t directly call ``x.__del__()`` --- the former\n decrements the reference count for ``x`` by one, and the latter\n is only called when ``x``\'s reference count reaches zero. Some\n common situations that may prevent the reference count of an\n object from going to zero include: circular references between\n objects (e.g., a doubly-linked list or a tree data structure with\n parent and child pointers); a reference to the object on the\n stack frame of a function that caught an exception (the traceback\n stored in ``sys.exc_traceback`` keeps the stack frame alive); or\n a reference to the object on the stack frame that raised an\n unhandled exception in interactive mode (the traceback stored in\n ``sys.last_traceback`` keeps the stack frame alive). The first\n situation can only be remedied by explicitly breaking the cycles;\n the latter two situations can be resolved by storing ``None`` in\n ``sys.exc_traceback`` or ``sys.last_traceback``. Circular\n references which are garbage are detected when the option cycle\n detector is enabled (it\'s on by default), but can only be cleaned\n up if there are no Python-level ``__del__()`` methods involved.\n Refer to the documentation for the ``gc`` module for more\n information about how ``__del__()`` methods are handled by the\n cycle detector, particularly the description of the ``garbage``\n value.\n\n Warning: Due to the precarious circumstances under which ``__del__()``\n methods are invoked, exceptions that occur during their execution\n are ignored, and a warning is printed to ``sys.stderr`` instead.\n Also, when ``__del__()`` is invoked in response to a module being\n deleted (e.g., when execution of the program is done), other\n globals referenced by the ``__del__()`` method may already have\n been deleted or in the process of being torn down (e.g. the\n import machinery shutting down). For this reason, ``__del__()``\n methods should do the absolute minimum needed to maintain\n external invariants. Starting with version 1.5, Python\n guarantees that globals whose name begins with a single\n underscore are deleted from their module before other globals are\n deleted; if no other references to such globals exist, this may\n help in assuring that imported modules are still available at the\n time when the ``__del__()`` method is called.\n\nobject.__repr__(self)\n\n Called by the ``repr()`` built-in function and by string\n conversions (reverse quotes) to compute the "official" string\n representation of an object. If at all possible, this should look\n like a valid Python expression that could be used to recreate an\n object with the same value (given an appropriate environment). If\n this is not possible, a string of the form ``<...some useful\n description...>`` should be returned. The return value must be a\n string object. If a class defines ``__repr__()`` but not\n ``__str__()``, then ``__repr__()`` is also used when an "informal"\n string representation of instances of that class is required.\n\n This is typically used for debugging, so it is important that the\n representation is information-rich and unambiguous.\n\nobject.__str__(self)\n\n Called by the ``str()`` built-in function and by the ``print``\n statement to compute the "informal" string representation of an\n object. This differs from ``__repr__()`` in that it does not have\n to be a valid Python expression: a more convenient or concise\n representation may be used instead. The return value must be a\n string object.\n\nobject.__lt__(self, other)\nobject.__le__(self, other)\nobject.__eq__(self, other)\nobject.__ne__(self, other)\nobject.__gt__(self, other)\nobject.__ge__(self, other)\n\n New in version 2.1.\n\n These are the so-called "rich comparison" methods, and are called\n for comparison operators in preference to ``__cmp__()`` below. The\n correspondence between operator symbols and method names is as\n follows: ``xy`` call ``x.__ne__(y)``, ``x>y`` calls ``x.__gt__(y)``, and\n ``x>=y`` calls ``x.__ge__(y)``.\n\n A rich comparison method may return the singleton\n ``NotImplemented`` if it does not implement the operation for a\n given pair of arguments. By convention, ``False`` and ``True`` are\n returned for a successful comparison. However, these methods can\n return any value, so if the comparison operator is used in a\n Boolean context (e.g., in the condition of an ``if`` statement),\n Python will call ``bool()`` on the value to determine if the result\n is true or false.\n\n There are no implied relationships among the comparison operators.\n The truth of ``x==y`` does not imply that ``x!=y`` is false.\n Accordingly, when defining ``__eq__()``, one should also define\n ``__ne__()`` so that the operators will behave as expected. See\n the paragraph on ``__hash__()`` for some important notes on\n creating *hashable* objects which support custom comparison\n operations and are usable as dictionary keys.\n\n There are no swapped-argument versions of these methods (to be used\n when the left argument does not support the operation but the right\n argument does); rather, ``__lt__()`` and ``__gt__()`` are each\n other\'s reflection, ``__le__()`` and ``__ge__()`` are each other\'s\n reflection, and ``__eq__()`` and ``__ne__()`` are their own\n reflection.\n\n Arguments to rich comparison methods are never coerced.\n\nobject.__cmp__(self, other)\n\n Called by comparison operations if rich comparison (see above) is\n not defined. Should return a negative integer if ``self < other``,\n zero if ``self == other``, a positive integer if ``self > other``.\n If no ``__cmp__()``, ``__eq__()`` or ``__ne__()`` operation is\n defined, class instances are compared by object identity\n ("address"). See also the description of ``__hash__()`` for some\n important notes on creating *hashable* objects which support custom\n comparison operations and are usable as dictionary keys. (Note: the\n restriction that exceptions are not propagated by ``__cmp__()`` has\n been removed since Python 1.5.)\n\nobject.__rcmp__(self, other)\n\n Changed in version 2.1: No longer supported.\n\nobject.__hash__(self)\n\n Called by built-in function ``hash()`` and for operations on\n members of hashed collections including ``set``, ``frozenset``, and\n ``dict``. ``__hash__()`` should return an integer. The only\n required property is that objects which compare equal have the same\n hash value; it is advised to somehow mix together (e.g. using\n exclusive or) the hash values for the components of the object that\n also play a part in comparison of objects.\n\n If a class does not define a ``__cmp__()`` or ``__eq__()`` method\n it should not define a ``__hash__()`` operation either; if it\n defines ``__cmp__()`` or ``__eq__()`` but not ``__hash__()``, its\n instances will not be usable in hashed collections. If a class\n defines mutable objects and implements a ``__cmp__()`` or\n ``__eq__()`` method, it should not implement ``__hash__()``, since\n hashable collection implementations require that a object\'s hash\n value is immutable (if the object\'s hash value changes, it will be\n in the wrong hash bucket).\n\n User-defined classes have ``__cmp__()`` and ``__hash__()`` methods\n by default; with them, all objects compare unequal (except with\n themselves) and ``x.__hash__()`` returns ``id(x)``.\n\n Classes which inherit a ``__hash__()`` method from a parent class\n but change the meaning of ``__cmp__()`` or ``__eq__()`` such that\n the hash value returned is no longer appropriate (e.g. by switching\n to a value-based concept of equality instead of the default\n identity based equality) can explicitly flag themselves as being\n unhashable by setting ``__hash__ = None`` in the class definition.\n Doing so means that not only will instances of the class raise an\n appropriate ``TypeError`` when a program attempts to retrieve their\n hash value, but they will also be correctly identified as\n unhashable when checking ``isinstance(obj, collections.Hashable)``\n (unlike classes which define their own ``__hash__()`` to explicitly\n raise ``TypeError``).\n\n Changed in version 2.5: ``__hash__()`` may now also return a long\n integer object; the 32-bit integer is then derived from the hash of\n that object.\n\n Changed in version 2.6: ``__hash__`` may now be set to ``None`` to\n explicitly flag instances of a class as unhashable.\n\nobject.__nonzero__(self)\n\n Called to implement truth value testing and the built-in operation\n ``bool()``; should return ``False`` or ``True``, or their integer\n equivalents ``0`` or ``1``. When this method is not defined,\n ``__len__()`` is called, if it is defined, and the object is\n considered true if its result is nonzero. If a class defines\n neither ``__len__()`` nor ``__nonzero__()``, all its instances are\n considered true.\n\nobject.__unicode__(self)\n\n Called to implement ``unicode()`` builtin; should return a Unicode\n object. When this method is not defined, string conversion is\n attempted, and the result of string conversion is converted to\n Unicode using the system default encoding.\n\n\nCustomizing attribute access\n============================\n\nThe following methods can be defined to customize the meaning of\nattribute access (use of, assignment to, or deletion of ``x.name``)\nfor class instances.\n\nobject.__getattr__(self, name)\n\n Called when an attribute lookup has not found the attribute in the\n usual places (i.e. it is not an instance attribute nor is it found\n in the class tree for ``self``). ``name`` is the attribute name.\n This method should return the (computed) attribute value or raise\n an ``AttributeError`` exception.\n\n Note that if the attribute is found through the normal mechanism,\n ``__getattr__()`` is not called. (This is an intentional asymmetry\n between ``__getattr__()`` and ``__setattr__()``.) This is done both\n for efficiency reasons and because otherwise ``__getattr__()``\n would have no way to access other attributes of the instance. Note\n that at least for instance variables, you can fake total control by\n not inserting any values in the instance attribute dictionary (but\n instead inserting them in another object). See the\n ``__getattribute__()`` method below for a way to actually get total\n control in new-style classes.\n\nobject.__setattr__(self, name, value)\n\n Called when an attribute assignment is attempted. This is called\n instead of the normal mechanism (i.e. store the value in the\n instance dictionary). *name* is the attribute name, *value* is the\n value to be assigned to it.\n\n If ``__setattr__()`` wants to assign to an instance attribute, it\n should not simply execute ``self.name = value`` --- this would\n cause a recursive call to itself. Instead, it should insert the\n value in the dictionary of instance attributes, e.g.,\n ``self.__dict__[name] = value``. For new-style classes, rather\n than accessing the instance dictionary, it should call the base\n class method with the same name, for example,\n ``object.__setattr__(self, name, value)``.\n\nobject.__delattr__(self, name)\n\n Like ``__setattr__()`` but for attribute deletion instead of\n assignment. This should only be implemented if ``del obj.name`` is\n meaningful for the object.\n\n\nMore attribute access for new-style classes\n-------------------------------------------\n\nThe following methods only apply to new-style classes.\n\nobject.__getattribute__(self, name)\n\n Called unconditionally to implement attribute accesses for\n instances of the class. If the class also defines\n ``__getattr__()``, the latter will not be called unless\n ``__getattribute__()`` either calls it explicitly or raises an\n ``AttributeError``. This method should return the (computed)\n attribute value or raise an ``AttributeError`` exception. In order\n to avoid infinite recursion in this method, its implementation\n should always call the base class method with the same name to\n access any attributes it needs, for example,\n ``object.__getattribute__(self, name)``.\n\n Note: This method may still be bypassed when looking up special methods\n as the result of implicit invocation via language syntax or\n builtin functions. See *Special method lookup for new-style\n classes*.\n\n\nImplementing Descriptors\n------------------------\n\nThe following methods only apply when an instance of the class\ncontaining the method (a so-called *descriptor* class) appears in the\nclass dictionary of another new-style class, known as the *owner*\nclass. In the examples below, "the attribute" refers to the attribute\nwhose name is the key of the property in the owner class\'\n``__dict__``. Descriptors can only be implemented as new-style\nclasses themselves.\n\nobject.__get__(self, instance, owner)\n\n Called to get the attribute of the owner class (class attribute\n access) or of an instance of that class (instance attribute\n access). *owner* is always the owner class, while *instance* is the\n instance that the attribute was accessed through, or ``None`` when\n the attribute is accessed through the *owner*. This method should\n return the (computed) attribute value or raise an\n ``AttributeError`` exception.\n\nobject.__set__(self, instance, value)\n\n Called to set the attribute on an instance *instance* of the owner\n class to a new value, *value*.\n\nobject.__delete__(self, instance)\n\n Called to delete the attribute on an instance *instance* of the\n owner class.\n\n\nInvoking Descriptors\n--------------------\n\nIn general, a descriptor is an object attribute with "binding\nbehavior", one whose attribute access has been overridden by methods\nin the descriptor protocol: ``__get__()``, ``__set__()``, and\n``__delete__()``. If any of those methods are defined for an object,\nit is said to be a descriptor.\n\nThe default behavior for attribute access is to get, set, or delete\nthe attribute from an object\'s dictionary. For instance, ``a.x`` has a\nlookup chain starting with ``a.__dict__[\'x\']``, then\n``type(a).__dict__[\'x\']``, and continuing through the base classes of\n``type(a)`` excluding metaclasses.\n\nHowever, if the looked-up value is an object defining one of the\ndescriptor methods, then Python may override the default behavior and\ninvoke the descriptor method instead. Where this occurs in the\nprecedence chain depends on which descriptor methods were defined and\nhow they were called. Note that descriptors are only invoked for new\nstyle objects or classes (ones that subclass ``object()`` or\n``type()``).\n\nThe starting point for descriptor invocation is a binding, ``a.x``.\nHow the arguments are assembled depends on ``a``:\n\nDirect Call\n The simplest and least common call is when user code directly\n invokes a descriptor method: ``x.__get__(a)``.\n\nInstance Binding\n If binding to a new-style object instance, ``a.x`` is transformed\n into the call: ``type(a).__dict__[\'x\'].__get__(a, type(a))``.\n\nClass Binding\n If binding to a new-style class, ``A.x`` is transformed into the\n call: ``A.__dict__[\'x\'].__get__(None, A)``.\n\nSuper Binding\n If ``a`` is an instance of ``super``, then the binding ``super(B,\n obj).m()`` searches ``obj.__class__.__mro__`` for the base class\n ``A`` immediately preceding ``B`` and then invokes the descriptor\n with the call: ``A.__dict__[\'m\'].__get__(obj, A)``.\n\nFor instance bindings, the precedence of descriptor invocation depends\non the which descriptor methods are defined. Normally, data\ndescriptors define both ``__get__()`` and ``__set__()``, while non-\ndata descriptors have just the ``__get__()`` method. Data descriptors\nalways override a redefinition in an instance dictionary. In\ncontrast, non-data descriptors can be overridden by instances. [2]\n\nPython methods (including ``staticmethod()`` and ``classmethod()``)\nare implemented as non-data descriptors. Accordingly, instances can\nredefine and override methods. This allows individual instances to\nacquire behaviors that differ from other instances of the same class.\n\nThe ``property()`` function is implemented as a data descriptor.\nAccordingly, instances cannot override the behavior of a property.\n\n\n__slots__\n---------\n\nBy default, instances of both old and new-style classes have a\ndictionary for attribute storage. This wastes space for objects\nhaving very few instance variables. The space consumption can become\nacute when creating large numbers of instances.\n\nThe default can be overridden by defining *__slots__* in a new-style\nclass definition. The *__slots__* declaration takes a sequence of\ninstance variables and reserves just enough space in each instance to\nhold a value for each variable. Space is saved because *__dict__* is\nnot created for each instance.\n\n__slots__\n\n This class variable can be assigned a string, iterable, or sequence\n of strings with variable names used by instances. If defined in a\n new-style class, *__slots__* reserves space for the declared\n variables and prevents the automatic creation of *__dict__* and\n *__weakref__* for each instance.\n\n New in version 2.2.\n\nNotes on using *__slots__*\n\n* When inheriting from a class without *__slots__*, the *__dict__*\n attribute of that class will always be accessible, so a *__slots__*\n definition in the subclass is meaningless.\n\n* Without a *__dict__* variable, instances cannot be assigned new\n variables not listed in the *__slots__* definition. Attempts to\n assign to an unlisted variable name raises ``AttributeError``. If\n dynamic assignment of new variables is desired, then add\n ``\'__dict__\'`` to the sequence of strings in the *__slots__*\n declaration.\n\n Changed in version 2.3: Previously, adding ``\'__dict__\'`` to the\n *__slots__* declaration would not enable the assignment of new\n attributes not specifically listed in the sequence of instance\n variable names.\n\n* Without a *__weakref__* variable for each instance, classes defining\n *__slots__* do not support weak references to its instances. If weak\n reference support is needed, then add ``\'__weakref__\'`` to the\n sequence of strings in the *__slots__* declaration.\n\n Changed in version 2.3: Previously, adding ``\'__weakref__\'`` to the\n *__slots__* declaration would not enable support for weak\n references.\n\n* *__slots__* are implemented at the class level by creating\n descriptors (*Implementing Descriptors*) for each variable name. As\n a result, class attributes cannot be used to set default values for\n instance variables defined by *__slots__*; otherwise, the class\n attribute would overwrite the descriptor assignment.\n\n* If a class defines a slot also defined in a base class, the instance\n variable defined by the base class slot is inaccessible (except by\n retrieving its descriptor directly from the base class). This\n renders the meaning of the program undefined. In the future, a\n check may be added to prevent this.\n\n* The action of a *__slots__* declaration is limited to the class\n where it is defined. As a result, subclasses will have a *__dict__*\n unless they also define *__slots__*.\n\n* Nonempty *__slots__* does not work for classes derived from\n "variable-length" built-in types such as ``long``, ``str`` and\n ``tuple``.\n\n* Any non-string iterable may be assigned to *__slots__*. Mappings may\n also be used; however, in the future, special meaning may be\n assigned to the values corresponding to each key.\n\n* *__class__* assignment works only if both classes have the same\n *__slots__*.\n\n Changed in version 2.6: Previously, *__class__* assignment raised an\n error if either new or old class had *__slots__*.\n\n\nCustomizing class creation\n==========================\n\nBy default, new-style classes are constructed using ``type()``. A\nclass definition is read into a separate namespace and the value of\nclass name is bound to the result of ``type(name, bases, dict)``.\n\nWhen the class definition is read, if *__metaclass__* is defined then\nthe callable assigned to it will be called instead of ``type()``. This\nallows classes or functions to be written which monitor or alter the\nclass creation process:\n\n* Modifying the class dictionary prior to the class being created.\n\n* Returning an instance of another class -- essentially performing the\n role of a factory function.\n\nThese steps will have to be performed in the metaclass\'s ``__new__()``\nmethod -- ``type.__new__()`` can then be called from this method to\ncreate a class with different properties. This example adds a new\nelement to the class dictionary before creating the class:\n\n class metacls(type):\n def __new__(mcs, name, bases, dict):\n dict[\'foo\'] = \'metacls was here\'\n return type.__new__(mcs, name, bases, dict)\n\nYou can of course also override other class methods (or add new\nmethods); for example defining a custom ``__call__()`` method in the\nmetaclass allows custom behavior when the class is called, e.g. not\nalways creating a new instance.\n\n__metaclass__\n\n This variable can be any callable accepting arguments for ``name``,\n ``bases``, and ``dict``. Upon class creation, the callable is used\n instead of the built-in ``type()``.\n\n New in version 2.2.\n\nThe appropriate metaclass is determined by the following precedence\nrules:\n\n* If ``dict[\'__metaclass__\']`` exists, it is used.\n\n* Otherwise, if there is at least one base class, its metaclass is\n used (this looks for a *__class__* attribute first and if not found,\n uses its type).\n\n* Otherwise, if a global variable named __metaclass__ exists, it is\n used.\n\n* Otherwise, the old-style, classic metaclass (types.ClassType) is\n used.\n\nThe potential uses for metaclasses are boundless. Some ideas that have\nbeen explored including logging, interface checking, automatic\ndelegation, automatic property creation, proxies, frameworks, and\nautomatic resource locking/synchronization.\n\n\nEmulating callable objects\n==========================\n\nobject.__call__(self[, args...])\n\n Called when the instance is "called" as a function; if this method\n is defined, ``x(arg1, arg2, ...)`` is a shorthand for\n ``x.__call__(arg1, arg2, ...)``.\n\n\nEmulating container types\n=========================\n\nThe following methods can be defined to implement container objects.\nContainers usually are sequences (such as lists or tuples) or mappings\n(like dictionaries), but can represent other containers as well. The\nfirst set of methods is used either to emulate a sequence or to\nemulate a mapping; the difference is that for a sequence, the\nallowable keys should be the integers *k* for which ``0 <= k < N``\nwhere *N* is the length of the sequence, or slice objects, which\ndefine a range of items. (For backwards compatibility, the method\n``__getslice__()`` (see below) can also be defined to handle simple,\nbut not extended slices.) It is also recommended that mappings provide\nthe methods ``keys()``, ``values()``, ``items()``, ``has_key()``,\n``get()``, ``clear()``, ``setdefault()``, ``iterkeys()``,\n``itervalues()``, ``iteritems()``, ``pop()``, ``popitem()``,\n``copy()``, and ``update()`` behaving similar to those for Python\'s\nstandard dictionary objects. The ``UserDict`` module provides a\n``DictMixin`` class to help create those methods from a base set of\n``__getitem__()``, ``__setitem__()``, ``__delitem__()``, and\n``keys()``. Mutable sequences should provide methods ``append()``,\n``count()``, ``index()``, ``extend()``, ``insert()``, ``pop()``,\n``remove()``, ``reverse()`` and ``sort()``, like Python standard list\nobjects. Finally, sequence types should implement addition (meaning\nconcatenation) and multiplication (meaning repetition) by defining the\nmethods ``__add__()``, ``__radd__()``, ``__iadd__()``, ``__mul__()``,\n``__rmul__()`` and ``__imul__()`` described below; they should not\ndefine ``__coerce__()`` or other numerical operators. It is\nrecommended that both mappings and sequences implement the\n``__contains__()`` method to allow efficient use of the ``in``\noperator; for mappings, ``in`` should be equivalent of ``has_key()``;\nfor sequences, it should search through the values. It is further\nrecommended that both mappings and sequences implement the\n``__iter__()`` method to allow efficient iteration through the\ncontainer; for mappings, ``__iter__()`` should be the same as\n``iterkeys()``; for sequences, it should iterate through the values.\n\nobject.__len__(self)\n\n Called to implement the built-in function ``len()``. Should return\n the length of the object, an integer ``>=`` 0. Also, an object\n that doesn\'t define a ``__nonzero__()`` method and whose\n ``__len__()`` method returns zero is considered to be false in a\n Boolean context.\n\nobject.__getitem__(self, key)\n\n Called to implement evaluation of ``self[key]``. For sequence\n types, the accepted keys should be integers and slice objects.\n Note that the special interpretation of negative indexes (if the\n class wishes to emulate a sequence type) is up to the\n ``__getitem__()`` method. If *key* is of an inappropriate type,\n ``TypeError`` may be raised; if of a value outside the set of\n indexes for the sequence (after any special interpretation of\n negative values), ``IndexError`` should be raised. For mapping\n types, if *key* is missing (not in the container), ``KeyError``\n should be raised.\n\n Note: ``for`` loops expect that an ``IndexError`` will be raised for\n illegal indexes to allow proper detection of the end of the\n sequence.\n\nobject.__setitem__(self, key, value)\n\n Called to implement assignment to ``self[key]``. Same note as for\n ``__getitem__()``. This should only be implemented for mappings if\n the objects support changes to the values for keys, or if new keys\n can be added, or for sequences if elements can be replaced. The\n same exceptions should be raised for improper *key* values as for\n the ``__getitem__()`` method.\n\nobject.__delitem__(self, key)\n\n Called to implement deletion of ``self[key]``. Same note as for\n ``__getitem__()``. This should only be implemented for mappings if\n the objects support removal of keys, or for sequences if elements\n can be removed from the sequence. The same exceptions should be\n raised for improper *key* values as for the ``__getitem__()``\n method.\n\nobject.__iter__(self)\n\n This method is called when an iterator is required for a container.\n This method should return a new iterator object that can iterate\n over all the objects in the container. For mappings, it should\n iterate over the keys of the container, and should also be made\n available as the method ``iterkeys()``.\n\n Iterator objects also need to implement this method; they are\n required to return themselves. For more information on iterator\n objects, see *Iterator Types*.\n\nobject.__reversed__(self)\n\n Called (if present) by the ``reversed()`` builtin to implement\n reverse iteration. It should return a new iterator object that\n iterates over all the objects in the container in reverse order.\n\n If the ``__reversed__()`` method is not provided, the\n ``reversed()`` builtin will fall back to using the sequence\n protocol (``__len__()`` and ``__getitem__()``). Objects that\n support the sequence protocol should only provide\n ``__reversed__()`` if they can provide an implementation that is\n more efficient than the one provided by ``reversed()``.\n\n New in version 2.6.\n\nThe membership test operators (``in`` and ``not in``) are normally\nimplemented as an iteration through a sequence. However, container\nobjects can supply the following special method with a more efficient\nimplementation, which also does not require the object be a sequence.\n\nobject.__contains__(self, item)\n\n Called to implement membership test operators. Should return true\n if *item* is in *self*, false otherwise. For mapping objects, this\n should consider the keys of the mapping rather than the values or\n the key-item pairs.\n\n\nAdditional methods for emulation of sequence types\n==================================================\n\nThe following optional methods can be defined to further emulate\nsequence objects. Immutable sequences methods should at most only\ndefine ``__getslice__()``; mutable sequences might define all three\nmethods.\n\nobject.__getslice__(self, i, j)\n\n Deprecated since version 2.0: Support slice objects as parameters\n to the ``__getitem__()`` method. (However, built-in types in\n CPython currently still implement ``__getslice__()``. Therefore,\n you have to override it in derived classes when implementing\n slicing.)\n\n Called to implement evaluation of ``self[i:j]``. The returned\n object should be of the same type as *self*. Note that missing *i*\n or *j* in the slice expression are replaced by zero or\n ``sys.maxint``, respectively. If negative indexes are used in the\n slice, the length of the sequence is added to that index. If the\n instance does not implement the ``__len__()`` method, an\n ``AttributeError`` is raised. No guarantee is made that indexes\n adjusted this way are not still negative. Indexes which are\n greater than the length of the sequence are not modified. If no\n ``__getslice__()`` is found, a slice object is created instead, and\n passed to ``__getitem__()`` instead.\n\nobject.__setslice__(self, i, j, sequence)\n\n Called to implement assignment to ``self[i:j]``. Same notes for *i*\n and *j* as for ``__getslice__()``.\n\n This method is deprecated. If no ``__setslice__()`` is found, or\n for extended slicing of the form ``self[i:j:k]``, a slice object is\n created, and passed to ``__setitem__()``, instead of\n ``__setslice__()`` being called.\n\nobject.__delslice__(self, i, j)\n\n Called to implement deletion of ``self[i:j]``. Same notes for *i*\n and *j* as for ``__getslice__()``. This method is deprecated. If no\n ``__delslice__()`` is found, or for extended slicing of the form\n ``self[i:j:k]``, a slice object is created, and passed to\n ``__delitem__()``, instead of ``__delslice__()`` being called.\n\nNotice that these methods are only invoked when a single slice with a\nsingle colon is used, and the slice method is available. For slice\noperations involving extended slice notation, or in absence of the\nslice methods, ``__getitem__()``, ``__setitem__()`` or\n``__delitem__()`` is called with a slice object as argument.\n\nThe following example demonstrate how to make your program or module\ncompatible with earlier versions of Python (assuming that methods\n``__getitem__()``, ``__setitem__()`` and ``__delitem__()`` support\nslice objects as arguments):\n\n class MyClass:\n ...\n def __getitem__(self, index):\n ...\n def __setitem__(self, index, value):\n ...\n def __delitem__(self, index):\n ...\n\n if sys.version_info < (2, 0):\n # They won\'t be defined if version is at least 2.0 final\n\n def __getslice__(self, i, j):\n return self[max(0, i):max(0, j):]\n def __setslice__(self, i, j, seq):\n self[max(0, i):max(0, j):] = seq\n def __delslice__(self, i, j):\n del self[max(0, i):max(0, j):]\n ...\n\nNote the calls to ``max()``; these are necessary because of the\nhandling of negative indices before the ``__*slice__()`` methods are\ncalled. When negative indexes are used, the ``__*item__()`` methods\nreceive them as provided, but the ``__*slice__()`` methods get a\n"cooked" form of the index values. For each negative index value, the\nlength of the sequence is added to the index before calling the method\n(which may still result in a negative index); this is the customary\nhandling of negative indexes by the built-in sequence types, and the\n``__*item__()`` methods are expected to do this as well. However,\nsince they should already be doing that, negative indexes cannot be\npassed in; they must be constrained to the bounds of the sequence\nbefore being passed to the ``__*item__()`` methods. Calling ``max(0,\ni)`` conveniently returns the proper value.\n\n\nEmulating numeric types\n=======================\n\nThe following methods can be defined to emulate numeric objects.\nMethods corresponding to operations that are not supported by the\nparticular kind of number implemented (e.g., bitwise operations for\nnon-integral numbers) should be left undefined.\n\nobject.__add__(self, other)\nobject.__sub__(self, other)\nobject.__mul__(self, other)\nobject.__floordiv__(self, other)\nobject.__mod__(self, other)\nobject.__divmod__(self, other)\nobject.__pow__(self, other[, modulo])\nobject.__lshift__(self, other)\nobject.__rshift__(self, other)\nobject.__and__(self, other)\nobject.__xor__(self, other)\nobject.__or__(self, other)\n\n These methods are called to implement the binary arithmetic\n operations (``+``, ``-``, ``*``, ``//``, ``%``, ``divmod()``,\n ``pow()``, ``**``, ``<<``, ``>>``, ``&``, ``^``, ``|``). For\n instance, to evaluate the expression ``x + y``, where *x* is an\n instance of a class that has an ``__add__()`` method,\n ``x.__add__(y)`` is called. The ``__divmod__()`` method should be\n the equivalent to using ``__floordiv__()`` and ``__mod__()``; it\n should not be related to ``__truediv__()`` (described below). Note\n that ``__pow__()`` should be defined to accept an optional third\n argument if the ternary version of the built-in ``pow()`` function\n is to be supported.\n\n If one of those methods does not support the operation with the\n supplied arguments, it should return ``NotImplemented``.\n\nobject.__div__(self, other)\nobject.__truediv__(self, other)\n\n The division operator (``/``) is implemented by these methods. The\n ``__truediv__()`` method is used when ``__future__.division`` is in\n effect, otherwise ``__div__()`` is used. If only one of these two\n methods is defined, the object will not support division in the\n alternate context; ``TypeError`` will be raised instead.\n\nobject.__radd__(self, other)\nobject.__rsub__(self, other)\nobject.__rmul__(self, other)\nobject.__rdiv__(self, other)\nobject.__rtruediv__(self, other)\nobject.__rfloordiv__(self, other)\nobject.__rmod__(self, other)\nobject.__rdivmod__(self, other)\nobject.__rpow__(self, other)\nobject.__rlshift__(self, other)\nobject.__rrshift__(self, other)\nobject.__rand__(self, other)\nobject.__rxor__(self, other)\nobject.__ror__(self, other)\n\n These methods are called to implement the binary arithmetic\n operations (``+``, ``-``, ``*``, ``/``, ``%``, ``divmod()``,\n ``pow()``, ``**``, ``<<``, ``>>``, ``&``, ``^``, ``|``) with\n reflected (swapped) operands. These functions are only called if\n the left operand does not support the corresponding operation and\n the operands are of different types. [3] For instance, to evaluate\n the expression ``x - y``, where *y* is an instance of a class that\n has an ``__rsub__()`` method, ``y.__rsub__(x)`` is called if\n ``x.__sub__(y)`` returns *NotImplemented*.\n\n Note that ternary ``pow()`` will not try calling ``__rpow__()``\n (the coercion rules would become too complicated).\n\n Note: If the right operand\'s type is a subclass of the left operand\'s\n type and that subclass provides the reflected method for the\n operation, this method will be called before the left operand\'s\n non-reflected method. This behavior allows subclasses to\n override their ancestors\' operations.\n\nobject.__iadd__(self, other)\nobject.__isub__(self, other)\nobject.__imul__(self, other)\nobject.__idiv__(self, other)\nobject.__itruediv__(self, other)\nobject.__ifloordiv__(self, other)\nobject.__imod__(self, other)\nobject.__ipow__(self, other[, modulo])\nobject.__ilshift__(self, other)\nobject.__irshift__(self, other)\nobject.__iand__(self, other)\nobject.__ixor__(self, other)\nobject.__ior__(self, other)\n\n These methods are called to implement the augmented arithmetic\n assignments (``+=``, ``-=``, ``*=``, ``/=``, ``//=``, ``%=``,\n ``**=``, ``<<=``, ``>>=``, ``&=``, ``^=``, ``|=``). These methods\n should attempt to do the operation in-place (modifying *self*) and\n return the result (which could be, but does not have to be,\n *self*). If a specific method is not defined, the augmented\n assignment falls back to the normal methods. For instance, to\n execute the statement ``x += y``, where *x* is an instance of a\n class that has an ``__iadd__()`` method, ``x.__iadd__(y)`` is\n called. If *x* is an instance of a class that does not define a\n ``__iadd__()`` method, ``x.__add__(y)`` and ``y.__radd__(x)`` are\n considered, as with the evaluation of ``x + y``.\n\nobject.__neg__(self)\nobject.__pos__(self)\nobject.__abs__(self)\nobject.__invert__(self)\n\n Called to implement the unary arithmetic operations (``-``, ``+``,\n ``abs()`` and ``~``).\n\nobject.__complex__(self)\nobject.__int__(self)\nobject.__long__(self)\nobject.__float__(self)\n\n Called to implement the built-in functions ``complex()``,\n ``int()``, ``long()``, and ``float()``. Should return a value of\n the appropriate type.\n\nobject.__oct__(self)\nobject.__hex__(self)\n\n Called to implement the built-in functions ``oct()`` and ``hex()``.\n Should return a string value.\n\nobject.__index__(self)\n\n Called to implement ``operator.index()``. Also called whenever\n Python needs an integer object (such as in slicing). Must return\n an integer (int or long).\n\n New in version 2.5.\n\nobject.__coerce__(self, other)\n\n Called to implement "mixed-mode" numeric arithmetic. Should either\n return a 2-tuple containing *self* and *other* converted to a\n common numeric type, or ``None`` if conversion is impossible. When\n the common type would be the type of ``other``, it is sufficient to\n return ``None``, since the interpreter will also ask the other\n object to attempt a coercion (but sometimes, if the implementation\n of the other type cannot be changed, it is useful to do the\n conversion to the other type here). A return value of\n ``NotImplemented`` is equivalent to returning ``None``.\n\n\nCoercion rules\n==============\n\nThis section used to document the rules for coercion. As the language\nhas evolved, the coercion rules have become hard to document\nprecisely; documenting what one version of one particular\nimplementation does is undesirable. Instead, here are some informal\nguidelines regarding coercion. In Python 3.0, coercion will not be\nsupported.\n\n* If the left operand of a % operator is a string or Unicode object,\n no coercion takes place and the string formatting operation is\n invoked instead.\n\n* It is no longer recommended to define a coercion operation. Mixed-\n mode operations on types that don\'t define coercion pass the\n original arguments to the operation.\n\n* New-style classes (those derived from ``object``) never invoke the\n ``__coerce__()`` method in response to a binary operator; the only\n time ``__coerce__()`` is invoked is when the built-in function\n ``coerce()`` is called.\n\n* For most intents and purposes, an operator that returns\n ``NotImplemented`` is treated the same as one that is not\n implemented at all.\n\n* Below, ``__op__()`` and ``__rop__()`` are used to signify the\n generic method names corresponding to an operator; ``__iop__()`` is\n used for the corresponding in-place operator. For example, for the\n operator \'``+``\', ``__add__()`` and ``__radd__()`` are used for the\n left and right variant of the binary operator, and ``__iadd__()``\n for the in-place variant.\n\n* For objects *x* and *y*, first ``x.__op__(y)`` is tried. If this is\n not implemented or returns ``NotImplemented``, ``y.__rop__(x)`` is\n tried. If this is also not implemented or returns\n ``NotImplemented``, a ``TypeError`` exception is raised. But see\n the following exception:\n\n* Exception to the previous item: if the left operand is an instance\n of a built-in type or a new-style class, and the right operand is an\n instance of a proper subclass of that type or class and overrides\n the base\'s ``__rop__()`` method, the right operand\'s ``__rop__()``\n method is tried *before* the left operand\'s ``__op__()`` method.\n\n This is done so that a subclass can completely override binary\n operators. Otherwise, the left operand\'s ``__op__()`` method would\n always accept the right operand: when an instance of a given class\n is expected, an instance of a subclass of that class is always\n acceptable.\n\n* When either operand type defines a coercion, this coercion is called\n before that type\'s ``__op__()`` or ``__rop__()`` method is called,\n but no sooner. If the coercion returns an object of a different\n type for the operand whose coercion is invoked, part of the process\n is redone using the new object.\n\n* When an in-place operator (like \'``+=``\') is used, if the left\n operand implements ``__iop__()``, it is invoked without any\n coercion. When the operation falls back to ``__op__()`` and/or\n ``__rop__()``, the normal coercion rules apply.\n\n* In ``x + y``, if *x* is a sequence that implements sequence\n concatenation, sequence concatenation is invoked.\n\n* In ``x * y``, if one operator is a sequence that implements sequence\n repetition, and the other is an integer (``int`` or ``long``),\n sequence repetition is invoked.\n\n* Rich comparisons (implemented by methods ``__eq__()`` and so on)\n never use coercion. Three-way comparison (implemented by\n ``__cmp__()``) does use coercion under the same conditions as other\n binary operations use it.\n\n* In the current implementation, the built-in numeric types ``int``,\n ``long`` and ``float`` do not use coercion; the type ``complex``\n however does use coercion for binary operators and rich comparisons,\n despite the above rules. The difference can become apparent when\n subclassing these types. Over time, the type ``complex`` may be\n fixed to avoid coercion. All these types implement a\n ``__coerce__()`` method, for use by the built-in ``coerce()``\n function.\n\n\nWith Statement Context Managers\n===============================\n\nNew in version 2.5.\n\nA *context manager* is an object that defines the runtime context to\nbe established when executing a ``with`` statement. The context\nmanager handles the entry into, and the exit from, the desired runtime\ncontext for the execution of the block of code. Context managers are\nnormally invoked using the ``with`` statement (described in section\n*The with statement*), but can also be used by directly invoking their\nmethods.\n\nTypical uses of context managers include saving and restoring various\nkinds of global state, locking and unlocking resources, closing opened\nfiles, etc.\n\nFor more information on context managers, see *Context Manager Types*.\n\nobject.__enter__(self)\n\n Enter the runtime context related to this object. The ``with``\n statement will bind this method\'s return value to the target(s)\n specified in the ``as`` clause of the statement, if any.\n\nobject.__exit__(self, exc_type, exc_value, traceback)\n\n Exit the runtime context related to this object. The parameters\n describe the exception that caused the context to be exited. If the\n context was exited without an exception, all three arguments will\n be ``None``.\n\n If an exception is supplied, and the method wishes to suppress the\n exception (i.e., prevent it from being propagated), it should\n return a true value. Otherwise, the exception will be processed\n normally upon exit from this method.\n\n Note that ``__exit__()`` methods should not reraise the passed-in\n exception; this is the caller\'s responsibility.\n\nSee also:\n\n **PEP 0343** - The "with" statement\n The specification, background, and examples for the Python\n ``with`` statement.\n\n\nSpecial method lookup for old-style classes\n===========================================\n\nFor old-style classes, special methods are always looked up in exactly\nthe same way as any other method or attribute. This is the case\nregardless of whether the method is being looked up explicitly as in\n``x.__getitem__(i)`` or implicitly as in ``x[i]``.\n\nThis behaviour means that special methods may exhibit different\nbehaviour for different instances of a single old-style class if the\nappropriate special attributes are set differently:\n\n >>> class C:\n ... pass\n ...\n >>> c1 = C()\n >>> c2 = C()\n >>> c1.__len__ = lambda: 5\n >>> c2.__len__ = lambda: 9\n >>> len(c1)\n 5\n >>> len(c2)\n 9\n\n\nSpecial method lookup for new-style classes\n===========================================\n\nFor new-style classes, implicit invocations of special methods are\nonly guaranteed to work correctly if defined on an object\'s type, not\nin the object\'s instance dictionary. That behaviour is the reason why\nthe following code raises an exception (unlike the equivalent example\nwith old-style classes):\n\n >>> class C(object):\n ... pass\n ...\n >>> c = C()\n >>> c.__len__ = lambda: 5\n >>> len(c)\n Traceback (most recent call last):\n File "", line 1, in \n TypeError: object of type \'C\' has no len()\n\nThe rationale behind this behaviour lies with a number of special\nmethods such as ``__hash__()`` and ``__repr__()`` that are implemented\nby all objects, including type objects. If the implicit lookup of\nthese methods used the conventional lookup process, they would fail\nwhen invoked on the type object itself:\n\n >>> 1 .__hash__() == hash(1)\n True\n >>> int.__hash__() == hash(int)\n Traceback (most recent call last):\n File "", line 1, in \n TypeError: descriptor \'__hash__\' of \'int\' object needs an argument\n\nIncorrectly attempting to invoke an unbound method of a class in this\nway is sometimes referred to as \'metaclass confusion\', and is avoided\nby bypassing the instance when looking up special methods:\n\n >>> type(1).__hash__(1) == hash(1)\n True\n >>> type(int).__hash__(int) == hash(int)\n True\n\nIn addition to bypassing any instance attributes in the interest of\ncorrectness, implicit special method lookup generally also bypasses\nthe ``__getattribute__()`` method even of the object\'s metaclass:\n\n >>> class Meta(type):\n ... def __getattribute__(*args):\n ... print "Metaclass getattribute invoked"\n ... return type.__getattribute__(*args)\n ...\n >>> class C(object):\n ... __metaclass__ = Meta\n ... def __len__(self):\n ... return 10\n ... def __getattribute__(*args):\n ... print "Class getattribute invoked"\n ... return object.__getattribute__(*args)\n ...\n >>> c = C()\n >>> c.__len__() # Explicit lookup via instance\n Class getattribute invoked\n 10\n >>> type(c).__len__(c) # Explicit lookup via type\n Metaclass getattribute invoked\n 10\n >>> len(c) # Implicit lookup\n 10\n\nBypassing the ``__getattribute__()`` machinery in this fashion\nprovides significant scope for speed optimisations within the\ninterpreter, at the cost of some flexibility in the handling of\nspecial methods (the special method *must* be set on the class object\nitself in order to be consistently invoked by the interpreter).\n\n-[ Footnotes ]-\n\n[1] It *is* possible in some cases to change an object\'s type, under\n certain controlled conditions. It generally isn\'t a good idea\n though, since it can lead to some very strange behaviour if it is\n handled incorrectly.\n\n[2] A descriptor can define any combination of ``__get__()``,\n ``__set__()`` and ``__delete__()``. If it does not define\n ``__get__()``, then accessing the attribute even on an instance\n will return the descriptor object itself. If the descriptor\n defines ``__set__()`` and/or ``__delete__()``, it is a data\n descriptor; if it defines neither, it is a non-data descriptor.\n\n[3] For operands of the same type, it is assumed that if the non-\n reflected method (such as ``__add__()``) fails the operation is\n not supported, which is why the reflected method is not called.\n', + 'specialnames': u'\nSpecial method names\n********************\n\nA class can implement certain operations that are invoked by special\nsyntax (such as arithmetic operations or subscripting and slicing) by\ndefining methods with special names. This is Python\'s approach to\n*operator overloading*, allowing classes to define their own behavior\nwith respect to language operators. For instance, if a class defines\na method named ``__getitem__()``, and ``x`` is an instance of this\nclass, then ``x[i]`` is roughly equivalent to ``x.__getitem__(i)`` for\nold-style classes and ``type(x).__getitem__(x, i)`` for new-style\nclasses. Except where mentioned, attempts to execute an operation\nraise an exception when no appropriate method is defined (typically\n``AttributeError`` or ``TypeError``).\n\nWhen implementing a class that emulates any built-in type, it is\nimportant that the emulation only be implemented to the degree that it\nmakes sense for the object being modelled. For example, some\nsequences may work well with retrieval of individual elements, but\nextracting a slice may not make sense. (One example of this is the\n``NodeList`` interface in the W3C\'s Document Object Model.)\n\n\nBasic customization\n===================\n\nobject.__new__(cls[, ...])\n\n Called to create a new instance of class *cls*. ``__new__()`` is a\n static method (special-cased so you need not declare it as such)\n that takes the class of which an instance was requested as its\n first argument. The remaining arguments are those passed to the\n object constructor expression (the call to the class). The return\n value of ``__new__()`` should be the new object instance (usually\n an instance of *cls*).\n\n Typical implementations create a new instance of the class by\n invoking the superclass\'s ``__new__()`` method using\n ``super(currentclass, cls).__new__(cls[, ...])`` with appropriate\n arguments and then modifying the newly-created instance as\n necessary before returning it.\n\n If ``__new__()`` returns an instance of *cls*, then the new\n instance\'s ``__init__()`` method will be invoked like\n ``__init__(self[, ...])``, where *self* is the new instance and the\n remaining arguments are the same as were passed to ``__new__()``.\n\n If ``__new__()`` does not return an instance of *cls*, then the new\n instance\'s ``__init__()`` method will not be invoked.\n\n ``__new__()`` is intended mainly to allow subclasses of immutable\n types (like int, str, or tuple) to customize instance creation. It\n is also commonly overridden in custom metaclasses in order to\n customize class creation.\n\nobject.__init__(self[, ...])\n\n Called when the instance is created. The arguments are those\n passed to the class constructor expression. If a base class has an\n ``__init__()`` method, the derived class\'s ``__init__()`` method,\n if any, must explicitly call it to ensure proper initialization of\n the base class part of the instance; for example:\n ``BaseClass.__init__(self, [args...])``. As a special constraint\n on constructors, no value may be returned; doing so will cause a\n ``TypeError`` to be raised at runtime.\n\nobject.__del__(self)\n\n Called when the instance is about to be destroyed. This is also\n called a destructor. If a base class has a ``__del__()`` method,\n the derived class\'s ``__del__()`` method, if any, must explicitly\n call it to ensure proper deletion of the base class part of the\n instance. Note that it is possible (though not recommended!) for\n the ``__del__()`` method to postpone destruction of the instance by\n creating a new reference to it. It may then be called at a later\n time when this new reference is deleted. It is not guaranteed that\n ``__del__()`` methods are called for objects that still exist when\n the interpreter exits.\n\n Note: ``del x`` doesn\'t directly call ``x.__del__()`` --- the former\n decrements the reference count for ``x`` by one, and the latter\n is only called when ``x``\'s reference count reaches zero. Some\n common situations that may prevent the reference count of an\n object from going to zero include: circular references between\n objects (e.g., a doubly-linked list or a tree data structure with\n parent and child pointers); a reference to the object on the\n stack frame of a function that caught an exception (the traceback\n stored in ``sys.exc_traceback`` keeps the stack frame alive); or\n a reference to the object on the stack frame that raised an\n unhandled exception in interactive mode (the traceback stored in\n ``sys.last_traceback`` keeps the stack frame alive). The first\n situation can only be remedied by explicitly breaking the cycles;\n the latter two situations can be resolved by storing ``None`` in\n ``sys.exc_traceback`` or ``sys.last_traceback``. Circular\n references which are garbage are detected when the option cycle\n detector is enabled (it\'s on by default), but can only be cleaned\n up if there are no Python-level ``__del__()`` methods involved.\n Refer to the documentation for the ``gc`` module for more\n information about how ``__del__()`` methods are handled by the\n cycle detector, particularly the description of the ``garbage``\n value.\n\n Warning: Due to the precarious circumstances under which ``__del__()``\n methods are invoked, exceptions that occur during their execution\n are ignored, and a warning is printed to ``sys.stderr`` instead.\n Also, when ``__del__()`` is invoked in response to a module being\n deleted (e.g., when execution of the program is done), other\n globals referenced by the ``__del__()`` method may already have\n been deleted or in the process of being torn down (e.g. the\n import machinery shutting down). For this reason, ``__del__()``\n methods should do the absolute minimum needed to maintain\n external invariants. Starting with version 1.5, Python\n guarantees that globals whose name begins with a single\n underscore are deleted from their module before other globals are\n deleted; if no other references to such globals exist, this may\n help in assuring that imported modules are still available at the\n time when the ``__del__()`` method is called.\n\nobject.__repr__(self)\n\n Called by the ``repr()`` built-in function and by string\n conversions (reverse quotes) to compute the "official" string\n representation of an object. If at all possible, this should look\n like a valid Python expression that could be used to recreate an\n object with the same value (given an appropriate environment). If\n this is not possible, a string of the form ``<...some useful\n description...>`` should be returned. The return value must be a\n string object. If a class defines ``__repr__()`` but not\n ``__str__()``, then ``__repr__()`` is also used when an "informal"\n string representation of instances of that class is required.\n\n This is typically used for debugging, so it is important that the\n representation is information-rich and unambiguous.\n\nobject.__str__(self)\n\n Called by the ``str()`` built-in function and by the ``print``\n statement to compute the "informal" string representation of an\n object. This differs from ``__repr__()`` in that it does not have\n to be a valid Python expression: a more convenient or concise\n representation may be used instead. The return value must be a\n string object.\n\nobject.__lt__(self, other)\nobject.__le__(self, other)\nobject.__eq__(self, other)\nobject.__ne__(self, other)\nobject.__gt__(self, other)\nobject.__ge__(self, other)\n\n New in version 2.1.\n\n These are the so-called "rich comparison" methods, and are called\n for comparison operators in preference to ``__cmp__()`` below. The\n correspondence between operator symbols and method names is as\n follows: ``xy`` call ``x.__ne__(y)``, ``x>y`` calls ``x.__gt__(y)``, and\n ``x>=y`` calls ``x.__ge__(y)``.\n\n A rich comparison method may return the singleton\n ``NotImplemented`` if it does not implement the operation for a\n given pair of arguments. By convention, ``False`` and ``True`` are\n returned for a successful comparison. However, these methods can\n return any value, so if the comparison operator is used in a\n Boolean context (e.g., in the condition of an ``if`` statement),\n Python will call ``bool()`` on the value to determine if the result\n is true or false.\n\n There are no implied relationships among the comparison operators.\n The truth of ``x==y`` does not imply that ``x!=y`` is false.\n Accordingly, when defining ``__eq__()``, one should also define\n ``__ne__()`` so that the operators will behave as expected. See\n the paragraph on ``__hash__()`` for some important notes on\n creating *hashable* objects which support custom comparison\n operations and are usable as dictionary keys.\n\n There are no swapped-argument versions of these methods (to be used\n when the left argument does not support the operation but the right\n argument does); rather, ``__lt__()`` and ``__gt__()`` are each\n other\'s reflection, ``__le__()`` and ``__ge__()`` are each other\'s\n reflection, and ``__eq__()`` and ``__ne__()`` are their own\n reflection.\n\n Arguments to rich comparison methods are never coerced.\n\n To automatically generate ordering operations from a single root\n operation, see the Total Ordering recipe in the ASPN cookbook.\n\nobject.__cmp__(self, other)\n\n Called by comparison operations if rich comparison (see above) is\n not defined. Should return a negative integer if ``self < other``,\n zero if ``self == other``, a positive integer if ``self > other``.\n If no ``__cmp__()``, ``__eq__()`` or ``__ne__()`` operation is\n defined, class instances are compared by object identity\n ("address"). See also the description of ``__hash__()`` for some\n important notes on creating *hashable* objects which support custom\n comparison operations and are usable as dictionary keys. (Note: the\n restriction that exceptions are not propagated by ``__cmp__()`` has\n been removed since Python 1.5.)\n\nobject.__rcmp__(self, other)\n\n Changed in version 2.1: No longer supported.\n\nobject.__hash__(self)\n\n Called by built-in function ``hash()`` and for operations on\n members of hashed collections including ``set``, ``frozenset``, and\n ``dict``. ``__hash__()`` should return an integer. The only\n required property is that objects which compare equal have the same\n hash value; it is advised to somehow mix together (e.g. using\n exclusive or) the hash values for the components of the object that\n also play a part in comparison of objects.\n\n If a class does not define a ``__cmp__()`` or ``__eq__()`` method\n it should not define a ``__hash__()`` operation either; if it\n defines ``__cmp__()`` or ``__eq__()`` but not ``__hash__()``, its\n instances will not be usable in hashed collections. If a class\n defines mutable objects and implements a ``__cmp__()`` or\n ``__eq__()`` method, it should not implement ``__hash__()``, since\n hashable collection implementations require that a object\'s hash\n value is immutable (if the object\'s hash value changes, it will be\n in the wrong hash bucket).\n\n User-defined classes have ``__cmp__()`` and ``__hash__()`` methods\n by default; with them, all objects compare unequal (except with\n themselves) and ``x.__hash__()`` returns ``id(x)``.\n\n Classes which inherit a ``__hash__()`` method from a parent class\n but change the meaning of ``__cmp__()`` or ``__eq__()`` such that\n the hash value returned is no longer appropriate (e.g. by switching\n to a value-based concept of equality instead of the default\n identity based equality) can explicitly flag themselves as being\n unhashable by setting ``__hash__ = None`` in the class definition.\n Doing so means that not only will instances of the class raise an\n appropriate ``TypeError`` when a program attempts to retrieve their\n hash value, but they will also be correctly identified as\n unhashable when checking ``isinstance(obj, collections.Hashable)``\n (unlike classes which define their own ``__hash__()`` to explicitly\n raise ``TypeError``).\n\n Changed in version 2.5: ``__hash__()`` may now also return a long\n integer object; the 32-bit integer is then derived from the hash of\n that object.\n\n Changed in version 2.6: ``__hash__`` may now be set to ``None`` to\n explicitly flag instances of a class as unhashable.\n\nobject.__nonzero__(self)\n\n Called to implement truth value testing and the built-in operation\n ``bool()``; should return ``False`` or ``True``, or their integer\n equivalents ``0`` or ``1``. When this method is not defined,\n ``__len__()`` is called, if it is defined, and the object is\n considered true if its result is nonzero. If a class defines\n neither ``__len__()`` nor ``__nonzero__()``, all its instances are\n considered true.\n\nobject.__unicode__(self)\n\n Called to implement ``unicode()`` built-in; should return a Unicode\n object. When this method is not defined, string conversion is\n attempted, and the result of string conversion is converted to\n Unicode using the system default encoding.\n\n\nCustomizing attribute access\n============================\n\nThe following methods can be defined to customize the meaning of\nattribute access (use of, assignment to, or deletion of ``x.name``)\nfor class instances.\n\nobject.__getattr__(self, name)\n\n Called when an attribute lookup has not found the attribute in the\n usual places (i.e. it is not an instance attribute nor is it found\n in the class tree for ``self``). ``name`` is the attribute name.\n This method should return the (computed) attribute value or raise\n an ``AttributeError`` exception.\n\n Note that if the attribute is found through the normal mechanism,\n ``__getattr__()`` is not called. (This is an intentional asymmetry\n between ``__getattr__()`` and ``__setattr__()``.) This is done both\n for efficiency reasons and because otherwise ``__getattr__()``\n would have no way to access other attributes of the instance. Note\n that at least for instance variables, you can fake total control by\n not inserting any values in the instance attribute dictionary (but\n instead inserting them in another object). See the\n ``__getattribute__()`` method below for a way to actually get total\n control in new-style classes.\n\nobject.__setattr__(self, name, value)\n\n Called when an attribute assignment is attempted. This is called\n instead of the normal mechanism (i.e. store the value in the\n instance dictionary). *name* is the attribute name, *value* is the\n value to be assigned to it.\n\n If ``__setattr__()`` wants to assign to an instance attribute, it\n should not simply execute ``self.name = value`` --- this would\n cause a recursive call to itself. Instead, it should insert the\n value in the dictionary of instance attributes, e.g.,\n ``self.__dict__[name] = value``. For new-style classes, rather\n than accessing the instance dictionary, it should call the base\n class method with the same name, for example,\n ``object.__setattr__(self, name, value)``.\n\nobject.__delattr__(self, name)\n\n Like ``__setattr__()`` but for attribute deletion instead of\n assignment. This should only be implemented if ``del obj.name`` is\n meaningful for the object.\n\n\nMore attribute access for new-style classes\n-------------------------------------------\n\nThe following methods only apply to new-style classes.\n\nobject.__getattribute__(self, name)\n\n Called unconditionally to implement attribute accesses for\n instances of the class. If the class also defines\n ``__getattr__()``, the latter will not be called unless\n ``__getattribute__()`` either calls it explicitly or raises an\n ``AttributeError``. This method should return the (computed)\n attribute value or raise an ``AttributeError`` exception. In order\n to avoid infinite recursion in this method, its implementation\n should always call the base class method with the same name to\n access any attributes it needs, for example,\n ``object.__getattribute__(self, name)``.\n\n Note: This method may still be bypassed when looking up special methods\n as the result of implicit invocation via language syntax or\n built-in functions. See *Special method lookup for new-style\n classes*.\n\n\nImplementing Descriptors\n------------------------\n\nThe following methods only apply when an instance of the class\ncontaining the method (a so-called *descriptor* class) appears in the\nclass dictionary of another new-style class, known as the *owner*\nclass. In the examples below, "the attribute" refers to the attribute\nwhose name is the key of the property in the owner class\'\n``__dict__``. Descriptors can only be implemented as new-style\nclasses themselves.\n\nobject.__get__(self, instance, owner)\n\n Called to get the attribute of the owner class (class attribute\n access) or of an instance of that class (instance attribute\n access). *owner* is always the owner class, while *instance* is the\n instance that the attribute was accessed through, or ``None`` when\n the attribute is accessed through the *owner*. This method should\n return the (computed) attribute value or raise an\n ``AttributeError`` exception.\n\nobject.__set__(self, instance, value)\n\n Called to set the attribute on an instance *instance* of the owner\n class to a new value, *value*.\n\nobject.__delete__(self, instance)\n\n Called to delete the attribute on an instance *instance* of the\n owner class.\n\n\nInvoking Descriptors\n--------------------\n\nIn general, a descriptor is an object attribute with "binding\nbehavior", one whose attribute access has been overridden by methods\nin the descriptor protocol: ``__get__()``, ``__set__()``, and\n``__delete__()``. If any of those methods are defined for an object,\nit is said to be a descriptor.\n\nThe default behavior for attribute access is to get, set, or delete\nthe attribute from an object\'s dictionary. For instance, ``a.x`` has a\nlookup chain starting with ``a.__dict__[\'x\']``, then\n``type(a).__dict__[\'x\']``, and continuing through the base classes of\n``type(a)`` excluding metaclasses.\n\nHowever, if the looked-up value is an object defining one of the\ndescriptor methods, then Python may override the default behavior and\ninvoke the descriptor method instead. Where this occurs in the\nprecedence chain depends on which descriptor methods were defined and\nhow they were called. Note that descriptors are only invoked for new\nstyle objects or classes (ones that subclass ``object()`` or\n``type()``).\n\nThe starting point for descriptor invocation is a binding, ``a.x``.\nHow the arguments are assembled depends on ``a``:\n\nDirect Call\n The simplest and least common call is when user code directly\n invokes a descriptor method: ``x.__get__(a)``.\n\nInstance Binding\n If binding to a new-style object instance, ``a.x`` is transformed\n into the call: ``type(a).__dict__[\'x\'].__get__(a, type(a))``.\n\nClass Binding\n If binding to a new-style class, ``A.x`` is transformed into the\n call: ``A.__dict__[\'x\'].__get__(None, A)``.\n\nSuper Binding\n If ``a`` is an instance of ``super``, then the binding ``super(B,\n obj).m()`` searches ``obj.__class__.__mro__`` for the base class\n ``A`` immediately preceding ``B`` and then invokes the descriptor\n with the call: ``A.__dict__[\'m\'].__get__(obj, A)``.\n\nFor instance bindings, the precedence of descriptor invocation depends\non the which descriptor methods are defined. Normally, data\ndescriptors define both ``__get__()`` and ``__set__()``, while non-\ndata descriptors have just the ``__get__()`` method. Data descriptors\nalways override a redefinition in an instance dictionary. In\ncontrast, non-data descriptors can be overridden by instances. [2]\n\nPython methods (including ``staticmethod()`` and ``classmethod()``)\nare implemented as non-data descriptors. Accordingly, instances can\nredefine and override methods. This allows individual instances to\nacquire behaviors that differ from other instances of the same class.\n\nThe ``property()`` function is implemented as a data descriptor.\nAccordingly, instances cannot override the behavior of a property.\n\n\n__slots__\n---------\n\nBy default, instances of both old and new-style classes have a\ndictionary for attribute storage. This wastes space for objects\nhaving very few instance variables. The space consumption can become\nacute when creating large numbers of instances.\n\nThe default can be overridden by defining *__slots__* in a new-style\nclass definition. The *__slots__* declaration takes a sequence of\ninstance variables and reserves just enough space in each instance to\nhold a value for each variable. Space is saved because *__dict__* is\nnot created for each instance.\n\n__slots__\n\n This class variable can be assigned a string, iterable, or sequence\n of strings with variable names used by instances. If defined in a\n new-style class, *__slots__* reserves space for the declared\n variables and prevents the automatic creation of *__dict__* and\n *__weakref__* for each instance.\n\n New in version 2.2.\n\nNotes on using *__slots__*\n\n* When inheriting from a class without *__slots__*, the *__dict__*\n attribute of that class will always be accessible, so a *__slots__*\n definition in the subclass is meaningless.\n\n* Without a *__dict__* variable, instances cannot be assigned new\n variables not listed in the *__slots__* definition. Attempts to\n assign to an unlisted variable name raises ``AttributeError``. If\n dynamic assignment of new variables is desired, then add\n ``\'__dict__\'`` to the sequence of strings in the *__slots__*\n declaration.\n\n Changed in version 2.3: Previously, adding ``\'__dict__\'`` to the\n *__slots__* declaration would not enable the assignment of new\n attributes not specifically listed in the sequence of instance\n variable names.\n\n* Without a *__weakref__* variable for each instance, classes defining\n *__slots__* do not support weak references to its instances. If weak\n reference support is needed, then add ``\'__weakref__\'`` to the\n sequence of strings in the *__slots__* declaration.\n\n Changed in version 2.3: Previously, adding ``\'__weakref__\'`` to the\n *__slots__* declaration would not enable support for weak\n references.\n\n* *__slots__* are implemented at the class level by creating\n descriptors (*Implementing Descriptors*) for each variable name. As\n a result, class attributes cannot be used to set default values for\n instance variables defined by *__slots__*; otherwise, the class\n attribute would overwrite the descriptor assignment.\n\n* The action of a *__slots__* declaration is limited to the class\n where it is defined. As a result, subclasses will have a *__dict__*\n unless they also define *__slots__* (which must only contain names\n of any *additional* slots).\n\n* If a class defines a slot also defined in a base class, the instance\n variable defined by the base class slot is inaccessible (except by\n retrieving its descriptor directly from the base class). This\n renders the meaning of the program undefined. In the future, a\n check may be added to prevent this.\n\n* Nonempty *__slots__* does not work for classes derived from\n "variable-length" built-in types such as ``long``, ``str`` and\n ``tuple``.\n\n* Any non-string iterable may be assigned to *__slots__*. Mappings may\n also be used; however, in the future, special meaning may be\n assigned to the values corresponding to each key.\n\n* *__class__* assignment works only if both classes have the same\n *__slots__*.\n\n Changed in version 2.6: Previously, *__class__* assignment raised an\n error if either new or old class had *__slots__*.\n\n\nCustomizing class creation\n==========================\n\nBy default, new-style classes are constructed using ``type()``. A\nclass definition is read into a separate namespace and the value of\nclass name is bound to the result of ``type(name, bases, dict)``.\n\nWhen the class definition is read, if *__metaclass__* is defined then\nthe callable assigned to it will be called instead of ``type()``. This\nallows classes or functions to be written which monitor or alter the\nclass creation process:\n\n* Modifying the class dictionary prior to the class being created.\n\n* Returning an instance of another class -- essentially performing the\n role of a factory function.\n\nThese steps will have to be performed in the metaclass\'s ``__new__()``\nmethod -- ``type.__new__()`` can then be called from this method to\ncreate a class with different properties. This example adds a new\nelement to the class dictionary before creating the class:\n\n class metacls(type):\n def __new__(mcs, name, bases, dict):\n dict[\'foo\'] = \'metacls was here\'\n return type.__new__(mcs, name, bases, dict)\n\nYou can of course also override other class methods (or add new\nmethods); for example defining a custom ``__call__()`` method in the\nmetaclass allows custom behavior when the class is called, e.g. not\nalways creating a new instance.\n\n__metaclass__\n\n This variable can be any callable accepting arguments for ``name``,\n ``bases``, and ``dict``. Upon class creation, the callable is used\n instead of the built-in ``type()``.\n\n New in version 2.2.\n\nThe appropriate metaclass is determined by the following precedence\nrules:\n\n* If ``dict[\'__metaclass__\']`` exists, it is used.\n\n* Otherwise, if there is at least one base class, its metaclass is\n used (this looks for a *__class__* attribute first and if not found,\n uses its type).\n\n* Otherwise, if a global variable named __metaclass__ exists, it is\n used.\n\n* Otherwise, the old-style, classic metaclass (types.ClassType) is\n used.\n\nThe potential uses for metaclasses are boundless. Some ideas that have\nbeen explored including logging, interface checking, automatic\ndelegation, automatic property creation, proxies, frameworks, and\nautomatic resource locking/synchronization.\n\n\nEmulating callable objects\n==========================\n\nobject.__call__(self[, args...])\n\n Called when the instance is "called" as a function; if this method\n is defined, ``x(arg1, arg2, ...)`` is a shorthand for\n ``x.__call__(arg1, arg2, ...)``.\n\n\nEmulating container types\n=========================\n\nThe following methods can be defined to implement container objects.\nContainers usually are sequences (such as lists or tuples) or mappings\n(like dictionaries), but can represent other containers as well. The\nfirst set of methods is used either to emulate a sequence or to\nemulate a mapping; the difference is that for a sequence, the\nallowable keys should be the integers *k* for which ``0 <= k < N``\nwhere *N* is the length of the sequence, or slice objects, which\ndefine a range of items. (For backwards compatibility, the method\n``__getslice__()`` (see below) can also be defined to handle simple,\nbut not extended slices.) It is also recommended that mappings provide\nthe methods ``keys()``, ``values()``, ``items()``, ``has_key()``,\n``get()``, ``clear()``, ``setdefault()``, ``iterkeys()``,\n``itervalues()``, ``iteritems()``, ``pop()``, ``popitem()``,\n``copy()``, and ``update()`` behaving similar to those for Python\'s\nstandard dictionary objects. The ``UserDict`` module provides a\n``DictMixin`` class to help create those methods from a base set of\n``__getitem__()``, ``__setitem__()``, ``__delitem__()``, and\n``keys()``. Mutable sequences should provide methods ``append()``,\n``count()``, ``index()``, ``extend()``, ``insert()``, ``pop()``,\n``remove()``, ``reverse()`` and ``sort()``, like Python standard list\nobjects. Finally, sequence types should implement addition (meaning\nconcatenation) and multiplication (meaning repetition) by defining the\nmethods ``__add__()``, ``__radd__()``, ``__iadd__()``, ``__mul__()``,\n``__rmul__()`` and ``__imul__()`` described below; they should not\ndefine ``__coerce__()`` or other numerical operators. It is\nrecommended that both mappings and sequences implement the\n``__contains__()`` method to allow efficient use of the ``in``\noperator; for mappings, ``in`` should be equivalent of ``has_key()``;\nfor sequences, it should search through the values. It is further\nrecommended that both mappings and sequences implement the\n``__iter__()`` method to allow efficient iteration through the\ncontainer; for mappings, ``__iter__()`` should be the same as\n``iterkeys()``; for sequences, it should iterate through the values.\n\nobject.__len__(self)\n\n Called to implement the built-in function ``len()``. Should return\n the length of the object, an integer ``>=`` 0. Also, an object\n that doesn\'t define a ``__nonzero__()`` method and whose\n ``__len__()`` method returns zero is considered to be false in a\n Boolean context.\n\nobject.__getitem__(self, key)\n\n Called to implement evaluation of ``self[key]``. For sequence\n types, the accepted keys should be integers and slice objects.\n Note that the special interpretation of negative indexes (if the\n class wishes to emulate a sequence type) is up to the\n ``__getitem__()`` method. If *key* is of an inappropriate type,\n ``TypeError`` may be raised; if of a value outside the set of\n indexes for the sequence (after any special interpretation of\n negative values), ``IndexError`` should be raised. For mapping\n types, if *key* is missing (not in the container), ``KeyError``\n should be raised.\n\n Note: ``for`` loops expect that an ``IndexError`` will be raised for\n illegal indexes to allow proper detection of the end of the\n sequence.\n\nobject.__setitem__(self, key, value)\n\n Called to implement assignment to ``self[key]``. Same note as for\n ``__getitem__()``. This should only be implemented for mappings if\n the objects support changes to the values for keys, or if new keys\n can be added, or for sequences if elements can be replaced. The\n same exceptions should be raised for improper *key* values as for\n the ``__getitem__()`` method.\n\nobject.__delitem__(self, key)\n\n Called to implement deletion of ``self[key]``. Same note as for\n ``__getitem__()``. This should only be implemented for mappings if\n the objects support removal of keys, or for sequences if elements\n can be removed from the sequence. The same exceptions should be\n raised for improper *key* values as for the ``__getitem__()``\n method.\n\nobject.__iter__(self)\n\n This method is called when an iterator is required for a container.\n This method should return a new iterator object that can iterate\n over all the objects in the container. For mappings, it should\n iterate over the keys of the container, and should also be made\n available as the method ``iterkeys()``.\n\n Iterator objects also need to implement this method; they are\n required to return themselves. For more information on iterator\n objects, see *Iterator Types*.\n\nobject.__reversed__(self)\n\n Called (if present) by the ``reversed()`` built-in to implement\n reverse iteration. It should return a new iterator object that\n iterates over all the objects in the container in reverse order.\n\n If the ``__reversed__()`` method is not provided, the\n ``reversed()`` built-in will fall back to using the sequence\n protocol (``__len__()`` and ``__getitem__()``). Objects that\n support the sequence protocol should only provide\n ``__reversed__()`` if they can provide an implementation that is\n more efficient than the one provided by ``reversed()``.\n\n New in version 2.6.\n\nThe membership test operators (``in`` and ``not in``) are normally\nimplemented as an iteration through a sequence. However, container\nobjects can supply the following special method with a more efficient\nimplementation, which also does not require the object be a sequence.\n\nobject.__contains__(self, item)\n\n Called to implement membership test operators. Should return true\n if *item* is in *self*, false otherwise. For mapping objects, this\n should consider the keys of the mapping rather than the values or\n the key-item pairs.\n\n For objects that don\'t define ``__contains__()``, the membership\n test first tries iteration via ``__iter__()``, then the old\n sequence iteration protocol via ``__getitem__()``, see *this\n section in the language reference*.\n\n\nAdditional methods for emulation of sequence types\n==================================================\n\nThe following optional methods can be defined to further emulate\nsequence objects. Immutable sequences methods should at most only\ndefine ``__getslice__()``; mutable sequences might define all three\nmethods.\n\nobject.__getslice__(self, i, j)\n\n Deprecated since version 2.0: Support slice objects as parameters\n to the ``__getitem__()`` method. (However, built-in types in\n CPython currently still implement ``__getslice__()``. Therefore,\n you have to override it in derived classes when implementing\n slicing.)\n\n Called to implement evaluation of ``self[i:j]``. The returned\n object should be of the same type as *self*. Note that missing *i*\n or *j* in the slice expression are replaced by zero or\n ``sys.maxint``, respectively. If negative indexes are used in the\n slice, the length of the sequence is added to that index. If the\n instance does not implement the ``__len__()`` method, an\n ``AttributeError`` is raised. No guarantee is made that indexes\n adjusted this way are not still negative. Indexes which are\n greater than the length of the sequence are not modified. If no\n ``__getslice__()`` is found, a slice object is created instead, and\n passed to ``__getitem__()`` instead.\n\nobject.__setslice__(self, i, j, sequence)\n\n Called to implement assignment to ``self[i:j]``. Same notes for *i*\n and *j* as for ``__getslice__()``.\n\n This method is deprecated. If no ``__setslice__()`` is found, or\n for extended slicing of the form ``self[i:j:k]``, a slice object is\n created, and passed to ``__setitem__()``, instead of\n ``__setslice__()`` being called.\n\nobject.__delslice__(self, i, j)\n\n Called to implement deletion of ``self[i:j]``. Same notes for *i*\n and *j* as for ``__getslice__()``. This method is deprecated. If no\n ``__delslice__()`` is found, or for extended slicing of the form\n ``self[i:j:k]``, a slice object is created, and passed to\n ``__delitem__()``, instead of ``__delslice__()`` being called.\n\nNotice that these methods are only invoked when a single slice with a\nsingle colon is used, and the slice method is available. For slice\noperations involving extended slice notation, or in absence of the\nslice methods, ``__getitem__()``, ``__setitem__()`` or\n``__delitem__()`` is called with a slice object as argument.\n\nThe following example demonstrate how to make your program or module\ncompatible with earlier versions of Python (assuming that methods\n``__getitem__()``, ``__setitem__()`` and ``__delitem__()`` support\nslice objects as arguments):\n\n class MyClass:\n ...\n def __getitem__(self, index):\n ...\n def __setitem__(self, index, value):\n ...\n def __delitem__(self, index):\n ...\n\n if sys.version_info < (2, 0):\n # They won\'t be defined if version is at least 2.0 final\n\n def __getslice__(self, i, j):\n return self[max(0, i):max(0, j):]\n def __setslice__(self, i, j, seq):\n self[max(0, i):max(0, j):] = seq\n def __delslice__(self, i, j):\n del self[max(0, i):max(0, j):]\n ...\n\nNote the calls to ``max()``; these are necessary because of the\nhandling of negative indices before the ``__*slice__()`` methods are\ncalled. When negative indexes are used, the ``__*item__()`` methods\nreceive them as provided, but the ``__*slice__()`` methods get a\n"cooked" form of the index values. For each negative index value, the\nlength of the sequence is added to the index before calling the method\n(which may still result in a negative index); this is the customary\nhandling of negative indexes by the built-in sequence types, and the\n``__*item__()`` methods are expected to do this as well. However,\nsince they should already be doing that, negative indexes cannot be\npassed in; they must be constrained to the bounds of the sequence\nbefore being passed to the ``__*item__()`` methods. Calling ``max(0,\ni)`` conveniently returns the proper value.\n\n\nEmulating numeric types\n=======================\n\nThe following methods can be defined to emulate numeric objects.\nMethods corresponding to operations that are not supported by the\nparticular kind of number implemented (e.g., bitwise operations for\nnon-integral numbers) should be left undefined.\n\nobject.__add__(self, other)\nobject.__sub__(self, other)\nobject.__mul__(self, other)\nobject.__floordiv__(self, other)\nobject.__mod__(self, other)\nobject.__divmod__(self, other)\nobject.__pow__(self, other[, modulo])\nobject.__lshift__(self, other)\nobject.__rshift__(self, other)\nobject.__and__(self, other)\nobject.__xor__(self, other)\nobject.__or__(self, other)\n\n These methods are called to implement the binary arithmetic\n operations (``+``, ``-``, ``*``, ``//``, ``%``, ``divmod()``,\n ``pow()``, ``**``, ``<<``, ``>>``, ``&``, ``^``, ``|``). For\n instance, to evaluate the expression ``x + y``, where *x* is an\n instance of a class that has an ``__add__()`` method,\n ``x.__add__(y)`` is called. The ``__divmod__()`` method should be\n the equivalent to using ``__floordiv__()`` and ``__mod__()``; it\n should not be related to ``__truediv__()`` (described below). Note\n that ``__pow__()`` should be defined to accept an optional third\n argument if the ternary version of the built-in ``pow()`` function\n is to be supported.\n\n If one of those methods does not support the operation with the\n supplied arguments, it should return ``NotImplemented``.\n\nobject.__div__(self, other)\nobject.__truediv__(self, other)\n\n The division operator (``/``) is implemented by these methods. The\n ``__truediv__()`` method is used when ``__future__.division`` is in\n effect, otherwise ``__div__()`` is used. If only one of these two\n methods is defined, the object will not support division in the\n alternate context; ``TypeError`` will be raised instead.\n\nobject.__radd__(self, other)\nobject.__rsub__(self, other)\nobject.__rmul__(self, other)\nobject.__rdiv__(self, other)\nobject.__rtruediv__(self, other)\nobject.__rfloordiv__(self, other)\nobject.__rmod__(self, other)\nobject.__rdivmod__(self, other)\nobject.__rpow__(self, other)\nobject.__rlshift__(self, other)\nobject.__rrshift__(self, other)\nobject.__rand__(self, other)\nobject.__rxor__(self, other)\nobject.__ror__(self, other)\n\n These methods are called to implement the binary arithmetic\n operations (``+``, ``-``, ``*``, ``/``, ``%``, ``divmod()``,\n ``pow()``, ``**``, ``<<``, ``>>``, ``&``, ``^``, ``|``) with\n reflected (swapped) operands. These functions are only called if\n the left operand does not support the corresponding operation and\n the operands are of different types. [3] For instance, to evaluate\n the expression ``x - y``, where *y* is an instance of a class that\n has an ``__rsub__()`` method, ``y.__rsub__(x)`` is called if\n ``x.__sub__(y)`` returns *NotImplemented*.\n\n Note that ternary ``pow()`` will not try calling ``__rpow__()``\n (the coercion rules would become too complicated).\n\n Note: If the right operand\'s type is a subclass of the left operand\'s\n type and that subclass provides the reflected method for the\n operation, this method will be called before the left operand\'s\n non-reflected method. This behavior allows subclasses to\n override their ancestors\' operations.\n\nobject.__iadd__(self, other)\nobject.__isub__(self, other)\nobject.__imul__(self, other)\nobject.__idiv__(self, other)\nobject.__itruediv__(self, other)\nobject.__ifloordiv__(self, other)\nobject.__imod__(self, other)\nobject.__ipow__(self, other[, modulo])\nobject.__ilshift__(self, other)\nobject.__irshift__(self, other)\nobject.__iand__(self, other)\nobject.__ixor__(self, other)\nobject.__ior__(self, other)\n\n These methods are called to implement the augmented arithmetic\n assignments (``+=``, ``-=``, ``*=``, ``/=``, ``//=``, ``%=``,\n ``**=``, ``<<=``, ``>>=``, ``&=``, ``^=``, ``|=``). These methods\n should attempt to do the operation in-place (modifying *self*) and\n return the result (which could be, but does not have to be,\n *self*). If a specific method is not defined, the augmented\n assignment falls back to the normal methods. For instance, to\n execute the statement ``x += y``, where *x* is an instance of a\n class that has an ``__iadd__()`` method, ``x.__iadd__(y)`` is\n called. If *x* is an instance of a class that does not define a\n ``__iadd__()`` method, ``x.__add__(y)`` and ``y.__radd__(x)`` are\n considered, as with the evaluation of ``x + y``.\n\nobject.__neg__(self)\nobject.__pos__(self)\nobject.__abs__(self)\nobject.__invert__(self)\n\n Called to implement the unary arithmetic operations (``-``, ``+``,\n ``abs()`` and ``~``).\n\nobject.__complex__(self)\nobject.__int__(self)\nobject.__long__(self)\nobject.__float__(self)\n\n Called to implement the built-in functions ``complex()``,\n ``int()``, ``long()``, and ``float()``. Should return a value of\n the appropriate type.\n\nobject.__oct__(self)\nobject.__hex__(self)\n\n Called to implement the built-in functions ``oct()`` and ``hex()``.\n Should return a string value.\n\nobject.__index__(self)\n\n Called to implement ``operator.index()``. Also called whenever\n Python needs an integer object (such as in slicing). Must return\n an integer (int or long).\n\n New in version 2.5.\n\nobject.__coerce__(self, other)\n\n Called to implement "mixed-mode" numeric arithmetic. Should either\n return a 2-tuple containing *self* and *other* converted to a\n common numeric type, or ``None`` if conversion is impossible. When\n the common type would be the type of ``other``, it is sufficient to\n return ``None``, since the interpreter will also ask the other\n object to attempt a coercion (but sometimes, if the implementation\n of the other type cannot be changed, it is useful to do the\n conversion to the other type here). A return value of\n ``NotImplemented`` is equivalent to returning ``None``.\n\n\nCoercion rules\n==============\n\nThis section used to document the rules for coercion. As the language\nhas evolved, the coercion rules have become hard to document\nprecisely; documenting what one version of one particular\nimplementation does is undesirable. Instead, here are some informal\nguidelines regarding coercion. In Python 3.0, coercion will not be\nsupported.\n\n* If the left operand of a % operator is a string or Unicode object,\n no coercion takes place and the string formatting operation is\n invoked instead.\n\n* It is no longer recommended to define a coercion operation. Mixed-\n mode operations on types that don\'t define coercion pass the\n original arguments to the operation.\n\n* New-style classes (those derived from ``object``) never invoke the\n ``__coerce__()`` method in response to a binary operator; the only\n time ``__coerce__()`` is invoked is when the built-in function\n ``coerce()`` is called.\n\n* For most intents and purposes, an operator that returns\n ``NotImplemented`` is treated the same as one that is not\n implemented at all.\n\n* Below, ``__op__()`` and ``__rop__()`` are used to signify the\n generic method names corresponding to an operator; ``__iop__()`` is\n used for the corresponding in-place operator. For example, for the\n operator \'``+``\', ``__add__()`` and ``__radd__()`` are used for the\n left and right variant of the binary operator, and ``__iadd__()``\n for the in-place variant.\n\n* For objects *x* and *y*, first ``x.__op__(y)`` is tried. If this is\n not implemented or returns ``NotImplemented``, ``y.__rop__(x)`` is\n tried. If this is also not implemented or returns\n ``NotImplemented``, a ``TypeError`` exception is raised. But see\n the following exception:\n\n* Exception to the previous item: if the left operand is an instance\n of a built-in type or a new-style class, and the right operand is an\n instance of a proper subclass of that type or class and overrides\n the base\'s ``__rop__()`` method, the right operand\'s ``__rop__()``\n method is tried *before* the left operand\'s ``__op__()`` method.\n\n This is done so that a subclass can completely override binary\n operators. Otherwise, the left operand\'s ``__op__()`` method would\n always accept the right operand: when an instance of a given class\n is expected, an instance of a subclass of that class is always\n acceptable.\n\n* When either operand type defines a coercion, this coercion is called\n before that type\'s ``__op__()`` or ``__rop__()`` method is called,\n but no sooner. If the coercion returns an object of a different\n type for the operand whose coercion is invoked, part of the process\n is redone using the new object.\n\n* When an in-place operator (like \'``+=``\') is used, if the left\n operand implements ``__iop__()``, it is invoked without any\n coercion. When the operation falls back to ``__op__()`` and/or\n ``__rop__()``, the normal coercion rules apply.\n\n* In ``x + y``, if *x* is a sequence that implements sequence\n concatenation, sequence concatenation is invoked.\n\n* In ``x * y``, if one operator is a sequence that implements sequence\n repetition, and the other is an integer (``int`` or ``long``),\n sequence repetition is invoked.\n\n* Rich comparisons (implemented by methods ``__eq__()`` and so on)\n never use coercion. Three-way comparison (implemented by\n ``__cmp__()``) does use coercion under the same conditions as other\n binary operations use it.\n\n* In the current implementation, the built-in numeric types ``int``,\n ``long`` and ``float`` do not use coercion; the type ``complex``\n however does use coercion for binary operators and rich comparisons,\n despite the above rules. The difference can become apparent when\n subclassing these types. Over time, the type ``complex`` may be\n fixed to avoid coercion. All these types implement a\n ``__coerce__()`` method, for use by the built-in ``coerce()``\n function.\n\n\nWith Statement Context Managers\n===============================\n\nNew in version 2.5.\n\nA *context manager* is an object that defines the runtime context to\nbe established when executing a ``with`` statement. The context\nmanager handles the entry into, and the exit from, the desired runtime\ncontext for the execution of the block of code. Context managers are\nnormally invoked using the ``with`` statement (described in section\n*The with statement*), but can also be used by directly invoking their\nmethods.\n\nTypical uses of context managers include saving and restoring various\nkinds of global state, locking and unlocking resources, closing opened\nfiles, etc.\n\nFor more information on context managers, see *Context Manager Types*.\n\nobject.__enter__(self)\n\n Enter the runtime context related to this object. The ``with``\n statement will bind this method\'s return value to the target(s)\n specified in the ``as`` clause of the statement, if any.\n\nobject.__exit__(self, exc_type, exc_value, traceback)\n\n Exit the runtime context related to this object. The parameters\n describe the exception that caused the context to be exited. If the\n context was exited without an exception, all three arguments will\n be ``None``.\n\n If an exception is supplied, and the method wishes to suppress the\n exception (i.e., prevent it from being propagated), it should\n return a true value. Otherwise, the exception will be processed\n normally upon exit from this method.\n\n Note that ``__exit__()`` methods should not reraise the passed-in\n exception; this is the caller\'s responsibility.\n\nSee also:\n\n **PEP 0343** - The "with" statement\n The specification, background, and examples for the Python\n ``with`` statement.\n\n\nSpecial method lookup for old-style classes\n===========================================\n\nFor old-style classes, special methods are always looked up in exactly\nthe same way as any other method or attribute. This is the case\nregardless of whether the method is being looked up explicitly as in\n``x.__getitem__(i)`` or implicitly as in ``x[i]``.\n\nThis behaviour means that special methods may exhibit different\nbehaviour for different instances of a single old-style class if the\nappropriate special attributes are set differently:\n\n >>> class C:\n ... pass\n ...\n >>> c1 = C()\n >>> c2 = C()\n >>> c1.__len__ = lambda: 5\n >>> c2.__len__ = lambda: 9\n >>> len(c1)\n 5\n >>> len(c2)\n 9\n\n\nSpecial method lookup for new-style classes\n===========================================\n\nFor new-style classes, implicit invocations of special methods are\nonly guaranteed to work correctly if defined on an object\'s type, not\nin the object\'s instance dictionary. That behaviour is the reason why\nthe following code raises an exception (unlike the equivalent example\nwith old-style classes):\n\n >>> class C(object):\n ... pass\n ...\n >>> c = C()\n >>> c.__len__ = lambda: 5\n >>> len(c)\n Traceback (most recent call last):\n File "", line 1, in \n TypeError: object of type \'C\' has no len()\n\nThe rationale behind this behaviour lies with a number of special\nmethods such as ``__hash__()`` and ``__repr__()`` that are implemented\nby all objects, including type objects. If the implicit lookup of\nthese methods used the conventional lookup process, they would fail\nwhen invoked on the type object itself:\n\n >>> 1 .__hash__() == hash(1)\n True\n >>> int.__hash__() == hash(int)\n Traceback (most recent call last):\n File "", line 1, in \n TypeError: descriptor \'__hash__\' of \'int\' object needs an argument\n\nIncorrectly attempting to invoke an unbound method of a class in this\nway is sometimes referred to as \'metaclass confusion\', and is avoided\nby bypassing the instance when looking up special methods:\n\n >>> type(1).__hash__(1) == hash(1)\n True\n >>> type(int).__hash__(int) == hash(int)\n True\n\nIn addition to bypassing any instance attributes in the interest of\ncorrectness, implicit special method lookup generally also bypasses\nthe ``__getattribute__()`` method even of the object\'s metaclass:\n\n >>> class Meta(type):\n ... def __getattribute__(*args):\n ... print "Metaclass getattribute invoked"\n ... return type.__getattribute__(*args)\n ...\n >>> class C(object):\n ... __metaclass__ = Meta\n ... def __len__(self):\n ... return 10\n ... def __getattribute__(*args):\n ... print "Class getattribute invoked"\n ... return object.__getattribute__(*args)\n ...\n >>> c = C()\n >>> c.__len__() # Explicit lookup via instance\n Class getattribute invoked\n 10\n >>> type(c).__len__(c) # Explicit lookup via type\n Metaclass getattribute invoked\n 10\n >>> len(c) # Implicit lookup\n 10\n\nBypassing the ``__getattribute__()`` machinery in this fashion\nprovides significant scope for speed optimisations within the\ninterpreter, at the cost of some flexibility in the handling of\nspecial methods (the special method *must* be set on the class object\nitself in order to be consistently invoked by the interpreter).\n\n-[ Footnotes ]-\n\n[1] It *is* possible in some cases to change an object\'s type, under\n certain controlled conditions. It generally isn\'t a good idea\n though, since it can lead to some very strange behaviour if it is\n handled incorrectly.\n\n[2] A descriptor can define any combination of ``__get__()``,\n ``__set__()`` and ``__delete__()``. If it does not define\n ``__get__()``, then accessing the attribute even on an instance\n will return the descriptor object itself. If the descriptor\n defines ``__set__()`` and/or ``__delete__()``, it is a data\n descriptor; if it defines neither, it is a non-data descriptor.\n\n[3] For operands of the same type, it is assumed that if the non-\n reflected method (such as ``__add__()``) fails the operation is\n not supported, which is why the reflected method is not called.\n', 'string-conversions': u'\nString conversions\n******************\n\nA string conversion is an expression list enclosed in reverse (a.k.a.\nbackward) quotes:\n\n string_conversion ::= "\'" expression_list "\'"\n\nA string conversion evaluates the contained expression list and\nconverts the resulting object into a string according to rules\nspecific to its type.\n\nIf the object is a string, a number, ``None``, or a tuple, list or\ndictionary containing only objects whose type is one of these, the\nresulting string is a valid Python expression which can be passed to\nthe built-in function ``eval()`` to yield an expression with the same\nvalue (or an approximation, if floating point numbers are involved).\n\n(In particular, converting a string adds quotes around it and converts\n"funny" characters to escape sequences that are safe to print.)\n\nRecursive objects (for example, lists or dictionaries that contain a\nreference to themselves, directly or indirectly) use ``...`` to\nindicate a recursive reference, and the result cannot be passed to\n``eval()`` to get an equal value (``SyntaxError`` will be raised\ninstead).\n\nThe built-in function ``repr()`` performs exactly the same conversion\nin its argument as enclosing it in parentheses and reverse quotes\ndoes. The built-in function ``str()`` performs a similar but more\nuser-friendly conversion.\n', - 'string-methods': u'\nString Methods\n**************\n\nBelow are listed the string methods which both 8-bit strings and\nUnicode objects support. Note that none of these methods take keyword\narguments.\n\nIn addition, Python\'s strings support the sequence type methods\ndescribed in the *Sequence Types --- str, unicode, list, tuple,\nbuffer, xrange* section. To output formatted strings use template\nstrings or the ``%`` operator described in the *String Formatting\nOperations* section. Also, see the ``re`` module for string functions\nbased on regular expressions.\n\nstr.capitalize()\n\n Return a copy of the string with only its first character\n capitalized.\n\n For 8-bit strings, this method is locale-dependent.\n\nstr.center(width[, fillchar])\n\n Return centered in a string of length *width*. Padding is done\n using the specified *fillchar* (default is a space).\n\n Changed in version 2.4: Support for the *fillchar* argument.\n\nstr.count(sub[, start[, end]])\n\n Return the number of non-overlapping occurrences of substring *sub*\n in the range [*start*, *end*]. Optional arguments *start* and\n *end* are interpreted as in slice notation.\n\nstr.decode([encoding[, errors]])\n\n Decodes the string using the codec registered for *encoding*.\n *encoding* defaults to the default string encoding. *errors* may\n be given to set a different error handling scheme. The default is\n ``\'strict\'``, meaning that encoding errors raise ``UnicodeError``.\n Other possible values are ``\'ignore\'``, ``\'replace\'`` and any other\n name registered via ``codecs.register_error()``, see section *Codec\n Base Classes*.\n\n New in version 2.2.\n\n Changed in version 2.3: Support for other error handling schemes\n added.\n\nstr.encode([encoding[, errors]])\n\n Return an encoded version of the string. Default encoding is the\n current default string encoding. *errors* may be given to set a\n different error handling scheme. The default for *errors* is\n ``\'strict\'``, meaning that encoding errors raise a\n ``UnicodeError``. Other possible values are ``\'ignore\'``,\n ``\'replace\'``, ``\'xmlcharrefreplace\'``, ``\'backslashreplace\'`` and\n any other name registered via ``codecs.register_error()``, see\n section *Codec Base Classes*. For a list of possible encodings, see\n section *Standard Encodings*.\n\n New in version 2.0.\n\n Changed in version 2.3: Support for ``\'xmlcharrefreplace\'`` and\n ``\'backslashreplace\'`` and other error handling schemes added.\n\nstr.endswith(suffix[, start[, end]])\n\n Return ``True`` if the string ends with the specified *suffix*,\n otherwise return ``False``. *suffix* can also be a tuple of\n suffixes to look for. With optional *start*, test beginning at\n that position. With optional *end*, stop comparing at that\n position.\n\n Changed in version 2.5: Accept tuples as *suffix*.\n\nstr.expandtabs([tabsize])\n\n Return a copy of the string where all tab characters are replaced\n by one or more spaces, depending on the current column and the\n given tab size. The column number is reset to zero after each\n newline occurring in the string. If *tabsize* is not given, a tab\n size of ``8`` characters is assumed. This doesn\'t understand other\n non-printing characters or escape sequences.\n\nstr.find(sub[, start[, end]])\n\n Return the lowest index in the string where substring *sub* is\n found, such that *sub* is contained in the range [*start*, *end*].\n Optional arguments *start* and *end* are interpreted as in slice\n notation. Return ``-1`` if *sub* is not found.\n\nstr.format(format_string, *args, **kwargs)\n\n Perform a string formatting operation. The *format_string*\n argument can contain literal text or replacement fields delimited\n by braces ``{}``. Each replacement field contains either the\n numeric index of a positional argument, or the name of a keyword\n argument. Returns a copy of *format_string* where each replacement\n field is replaced with the string value of the corresponding\n argument.\n\n >>> "The sum of 1 + 2 is {0}".format(1+2)\n \'The sum of 1 + 2 is 3\'\n\n See *Format String Syntax* for a description of the various\n formatting options that can be specified in format strings.\n\n This method of string formatting is the new standard in Python 3.0,\n and should be preferred to the ``%`` formatting described in\n *String Formatting Operations* in new code.\n\n New in version 2.6.\n\nstr.index(sub[, start[, end]])\n\n Like ``find()``, but raise ``ValueError`` when the substring is not\n found.\n\nstr.isalnum()\n\n Return true if all characters in the string are alphanumeric and\n there is at least one character, false otherwise.\n\n For 8-bit strings, this method is locale-dependent.\n\nstr.isalpha()\n\n Return true if all characters in the string are alphabetic and\n there is at least one character, false otherwise.\n\n For 8-bit strings, this method is locale-dependent.\n\nstr.isdigit()\n\n Return true if all characters in the string are digits and there is\n at least one character, false otherwise.\n\n For 8-bit strings, this method is locale-dependent.\n\nstr.islower()\n\n Return true if all cased characters in the string are lowercase and\n there is at least one cased character, false otherwise.\n\n For 8-bit strings, this method is locale-dependent.\n\nstr.isspace()\n\n Return true if there are only whitespace characters in the string\n and there is at least one character, false otherwise.\n\n For 8-bit strings, this method is locale-dependent.\n\nstr.istitle()\n\n Return true if the string is a titlecased string and there is at\n least one character, for example uppercase characters may only\n follow uncased characters and lowercase characters only cased ones.\n Return false otherwise.\n\n For 8-bit strings, this method is locale-dependent.\n\nstr.isupper()\n\n Return true if all cased characters in the string are uppercase and\n there is at least one cased character, false otherwise.\n\n For 8-bit strings, this method is locale-dependent.\n\nstr.join(seq)\n\n Return a string which is the concatenation of the strings in the\n sequence *seq*. The separator between elements is the string\n providing this method.\n\nstr.ljust(width[, fillchar])\n\n Return the string left justified in a string of length *width*.\n Padding is done using the specified *fillchar* (default is a\n space). The original string is returned if *width* is less than\n ``len(s)``.\n\n Changed in version 2.4: Support for the *fillchar* argument.\n\nstr.lower()\n\n Return a copy of the string converted to lowercase.\n\n For 8-bit strings, this method is locale-dependent.\n\nstr.lstrip([chars])\n\n Return a copy of the string with leading characters removed. The\n *chars* argument is a string specifying the set of characters to be\n removed. If omitted or ``None``, the *chars* argument defaults to\n removing whitespace. The *chars* argument is not a prefix; rather,\n all combinations of its values are stripped:\n\n >>> \' spacious \'.lstrip()\n \'spacious \'\n >>> \'www.example.com\'.lstrip(\'cmowz.\')\n \'example.com\'\n\n Changed in version 2.2.2: Support for the *chars* argument.\n\nstr.partition(sep)\n\n Split the string at the first occurrence of *sep*, and return a\n 3-tuple containing the part before the separator, the separator\n itself, and the part after the separator. If the separator is not\n found, return a 3-tuple containing the string itself, followed by\n two empty strings.\n\n New in version 2.5.\n\nstr.replace(old, new[, count])\n\n Return a copy of the string with all occurrences of substring *old*\n replaced by *new*. If the optional argument *count* is given, only\n the first *count* occurrences are replaced.\n\nstr.rfind(sub[, start[, end]])\n\n Return the highest index in the string where substring *sub* is\n found, such that *sub* is contained within s[start,end]. Optional\n arguments *start* and *end* are interpreted as in slice notation.\n Return ``-1`` on failure.\n\nstr.rindex(sub[, start[, end]])\n\n Like ``rfind()`` but raises ``ValueError`` when the substring *sub*\n is not found.\n\nstr.rjust(width[, fillchar])\n\n Return the string right justified in a string of length *width*.\n Padding is done using the specified *fillchar* (default is a\n space). The original string is returned if *width* is less than\n ``len(s)``.\n\n Changed in version 2.4: Support for the *fillchar* argument.\n\nstr.rpartition(sep)\n\n Split the string at the last occurrence of *sep*, and return a\n 3-tuple containing the part before the separator, the separator\n itself, and the part after the separator. If the separator is not\n found, return a 3-tuple containing two empty strings, followed by\n the string itself.\n\n New in version 2.5.\n\nstr.rsplit([sep[, maxsplit]])\n\n Return a list of the words in the string, using *sep* as the\n delimiter string. If *maxsplit* is given, at most *maxsplit* splits\n are done, the *rightmost* ones. If *sep* is not specified or\n ``None``, any whitespace string is a separator. Except for\n splitting from the right, ``rsplit()`` behaves like ``split()``\n which is described in detail below.\n\n New in version 2.4.\n\nstr.rstrip([chars])\n\n Return a copy of the string with trailing characters removed. The\n *chars* argument is a string specifying the set of characters to be\n removed. If omitted or ``None``, the *chars* argument defaults to\n removing whitespace. The *chars* argument is not a suffix; rather,\n all combinations of its values are stripped:\n\n >>> \' spacious \'.rstrip()\n \' spacious\'\n >>> \'mississippi\'.rstrip(\'ipz\')\n \'mississ\'\n\n Changed in version 2.2.2: Support for the *chars* argument.\n\nstr.split([sep[, maxsplit]])\n\n Return a list of the words in the string, using *sep* as the\n delimiter string. If *maxsplit* is given, at most *maxsplit*\n splits are done (thus, the list will have at most ``maxsplit+1``\n elements). If *maxsplit* is not specified, then there is no limit\n on the number of splits (all possible splits are made).\n\n If *sep* is given, consecutive delimiters are not grouped together\n and are deemed to delimit empty strings (for example,\n ``\'1,,2\'.split(\',\')`` returns ``[\'1\', \'\', \'2\']``). The *sep*\n argument may consist of multiple characters (for example,\n ``\'1<>2<>3\'.split(\'<>\')`` returns ``[\'1\', \'2\', \'3\']``). Splitting\n an empty string with a specified separator returns ``[\'\']``.\n\n If *sep* is not specified or is ``None``, a different splitting\n algorithm is applied: runs of consecutive whitespace are regarded\n as a single separator, and the result will contain no empty strings\n at the start or end if the string has leading or trailing\n whitespace. Consequently, splitting an empty string or a string\n consisting of just whitespace with a ``None`` separator returns\n ``[]``.\n\n For example, ``\' 1 2 3 \'.split()`` returns ``[\'1\', \'2\', \'3\']``,\n and ``\' 1 2 3 \'.split(None, 1)`` returns ``[\'1\', \'2 3 \']``.\n\nstr.splitlines([keepends])\n\n Return a list of the lines in the string, breaking at line\n boundaries. Line breaks are not included in the resulting list\n unless *keepends* is given and true.\n\nstr.startswith(prefix[, start[, end]])\n\n Return ``True`` if string starts with the *prefix*, otherwise\n return ``False``. *prefix* can also be a tuple of prefixes to look\n for. With optional *start*, test string beginning at that\n position. With optional *end*, stop comparing string at that\n position.\n\n Changed in version 2.5: Accept tuples as *prefix*.\n\nstr.strip([chars])\n\n Return a copy of the string with the leading and trailing\n characters removed. The *chars* argument is a string specifying the\n set of characters to be removed. If omitted or ``None``, the\n *chars* argument defaults to removing whitespace. The *chars*\n argument is not a prefix or suffix; rather, all combinations of its\n values are stripped:\n\n >>> \' spacious \'.strip()\n \'spacious\'\n >>> \'www.example.com\'.strip(\'cmowz.\')\n \'example\'\n\n Changed in version 2.2.2: Support for the *chars* argument.\n\nstr.swapcase()\n\n Return a copy of the string with uppercase characters converted to\n lowercase and vice versa.\n\n For 8-bit strings, this method is locale-dependent.\n\nstr.title()\n\n Return a titlecased version of the string where words start with an\n uppercase character and the remaining characters are lowercase.\n\n The algorithm uses a simple language-independent definition of a\n word as groups of consecutive letters. The definition works in\n many contexts but it means that apostrophes in contractions and\n possessives form word boundaries, which may not be the desired\n result:\n\n >>> "they\'re bill\'s friends from the UK".title()\n "They\'Re Bill\'S Friends From The Uk"\n\n A workaround for apostrophes can be constructed using regular\n expressions:\n\n >>> import re\n >>> def titlecase(s):\n return re.sub(r"[A-Za-z]+(\'[A-Za-z]+)?",\n lambda mo: mo.group(0)[0].upper() +\n mo.group(0)[1:].lower(),\n s)\n\n >>> titlecase("they\'re bill\'s friends.")\n "They\'re Bill\'s Friends."\n\n For 8-bit strings, this method is locale-dependent.\n\nstr.translate(table[, deletechars])\n\n Return a copy of the string where all characters occurring in the\n optional argument *deletechars* are removed, and the remaining\n characters have been mapped through the given translation table,\n which must be a string of length 256.\n\n You can use the ``maketrans()`` helper function in the ``string``\n module to create a translation table. For string objects, set the\n *table* argument to ``None`` for translations that only delete\n characters:\n\n >>> \'read this short text\'.translate(None, \'aeiou\')\n \'rd ths shrt txt\'\n\n New in version 2.6: Support for a ``None`` *table* argument.\n\n For Unicode objects, the ``translate()`` method does not accept the\n optional *deletechars* argument. Instead, it returns a copy of the\n *s* where all characters have been mapped through the given\n translation table which must be a mapping of Unicode ordinals to\n Unicode ordinals, Unicode strings or ``None``. Unmapped characters\n are left untouched. Characters mapped to ``None`` are deleted.\n Note, a more flexible approach is to create a custom character\n mapping codec using the ``codecs`` module (see ``encodings.cp1251``\n for an example).\n\nstr.upper()\n\n Return a copy of the string converted to uppercase.\n\n For 8-bit strings, this method is locale-dependent.\n\nstr.zfill(width)\n\n Return the numeric string left filled with zeros in a string of\n length *width*. A sign prefix is handled correctly. The original\n string is returned if *width* is less than ``len(s)``.\n\n New in version 2.2.2.\n\nThe following methods are present only on unicode objects:\n\nunicode.isnumeric()\n\n Return ``True`` if there are only numeric characters in S,\n ``False`` otherwise. Numeric characters include digit characters,\n and all characters that have the Unicode numeric value property,\n e.g. U+2155, VULGAR FRACTION ONE FIFTH.\n\nunicode.isdecimal()\n\n Return ``True`` if there are only decimal characters in S,\n ``False`` otherwise. Decimal characters include digit characters,\n and all characters that that can be used to form decimal-radix\n numbers, e.g. U+0660, ARABIC-INDIC DIGIT ZERO.\n', + 'string-methods': u'\nString Methods\n**************\n\nBelow are listed the string methods which both 8-bit strings and\nUnicode objects support. Note that none of these methods take keyword\narguments.\n\nIn addition, Python\'s strings support the sequence type methods\ndescribed in the *Sequence Types --- str, unicode, list, tuple,\nbuffer, xrange* section. To output formatted strings use template\nstrings or the ``%`` operator described in the *String Formatting\nOperations* section. Also, see the ``re`` module for string functions\nbased on regular expressions.\n\nstr.capitalize()\n\n Return a copy of the string with only its first character\n capitalized.\n\n For 8-bit strings, this method is locale-dependent.\n\nstr.center(width[, fillchar])\n\n Return centered in a string of length *width*. Padding is done\n using the specified *fillchar* (default is a space).\n\n Changed in version 2.4: Support for the *fillchar* argument.\n\nstr.count(sub[, start[, end]])\n\n Return the number of non-overlapping occurrences of substring *sub*\n in the range [*start*, *end*]. Optional arguments *start* and\n *end* are interpreted as in slice notation.\n\nstr.decode([encoding[, errors]])\n\n Decodes the string using the codec registered for *encoding*.\n *encoding* defaults to the default string encoding. *errors* may\n be given to set a different error handling scheme. The default is\n ``\'strict\'``, meaning that encoding errors raise ``UnicodeError``.\n Other possible values are ``\'ignore\'``, ``\'replace\'`` and any other\n name registered via ``codecs.register_error()``, see section *Codec\n Base Classes*.\n\n New in version 2.2.\n\n Changed in version 2.3: Support for other error handling schemes\n added.\n\nstr.encode([encoding[, errors]])\n\n Return an encoded version of the string. Default encoding is the\n current default string encoding. *errors* may be given to set a\n different error handling scheme. The default for *errors* is\n ``\'strict\'``, meaning that encoding errors raise a\n ``UnicodeError``. Other possible values are ``\'ignore\'``,\n ``\'replace\'``, ``\'xmlcharrefreplace\'``, ``\'backslashreplace\'`` and\n any other name registered via ``codecs.register_error()``, see\n section *Codec Base Classes*. For a list of possible encodings, see\n section *Standard Encodings*.\n\n New in version 2.0.\n\n Changed in version 2.3: Support for ``\'xmlcharrefreplace\'`` and\n ``\'backslashreplace\'`` and other error handling schemes added.\n\nstr.endswith(suffix[, start[, end]])\n\n Return ``True`` if the string ends with the specified *suffix*,\n otherwise return ``False``. *suffix* can also be a tuple of\n suffixes to look for. With optional *start*, test beginning at\n that position. With optional *end*, stop comparing at that\n position.\n\n Changed in version 2.5: Accept tuples as *suffix*.\n\nstr.expandtabs([tabsize])\n\n Return a copy of the string where all tab characters are replaced\n by one or more spaces, depending on the current column and the\n given tab size. The column number is reset to zero after each\n newline occurring in the string. If *tabsize* is not given, a tab\n size of ``8`` characters is assumed. This doesn\'t understand other\n non-printing characters or escape sequences.\n\nstr.find(sub[, start[, end]])\n\n Return the lowest index in the string where substring *sub* is\n found, such that *sub* is contained in the range [*start*, *end*].\n Optional arguments *start* and *end* are interpreted as in slice\n notation. Return ``-1`` if *sub* is not found.\n\nstr.format(*args, **kwargs)\n\n Perform a string formatting operation. The *format_string*\n argument can contain literal text or replacement fields delimited\n by braces ``{}``. Each replacement field contains either the\n numeric index of a positional argument, or the name of a keyword\n argument. Returns a copy of *format_string* where each replacement\n field is replaced with the string value of the corresponding\n argument.\n\n >>> "The sum of 1 + 2 is {0}".format(1+2)\n \'The sum of 1 + 2 is 3\'\n\n See *Format String Syntax* for a description of the various\n formatting options that can be specified in format strings.\n\n This method of string formatting is the new standard in Python 3.0,\n and should be preferred to the ``%`` formatting described in\n *String Formatting Operations* in new code.\n\n New in version 2.6.\n\nstr.index(sub[, start[, end]])\n\n Like ``find()``, but raise ``ValueError`` when the substring is not\n found.\n\nstr.isalnum()\n\n Return true if all characters in the string are alphanumeric and\n there is at least one character, false otherwise.\n\n For 8-bit strings, this method is locale-dependent.\n\nstr.isalpha()\n\n Return true if all characters in the string are alphabetic and\n there is at least one character, false otherwise.\n\n For 8-bit strings, this method is locale-dependent.\n\nstr.isdigit()\n\n Return true if all characters in the string are digits and there is\n at least one character, false otherwise.\n\n For 8-bit strings, this method is locale-dependent.\n\nstr.islower()\n\n Return true if all cased characters in the string are lowercase and\n there is at least one cased character, false otherwise.\n\n For 8-bit strings, this method is locale-dependent.\n\nstr.isspace()\n\n Return true if there are only whitespace characters in the string\n and there is at least one character, false otherwise.\n\n For 8-bit strings, this method is locale-dependent.\n\nstr.istitle()\n\n Return true if the string is a titlecased string and there is at\n least one character, for example uppercase characters may only\n follow uncased characters and lowercase characters only cased ones.\n Return false otherwise.\n\n For 8-bit strings, this method is locale-dependent.\n\nstr.isupper()\n\n Return true if all cased characters in the string are uppercase and\n there is at least one cased character, false otherwise.\n\n For 8-bit strings, this method is locale-dependent.\n\nstr.join(iterable)\n\n Return a string which is the concatenation of the strings in the\n *iterable* *iterable*. The separator between elements is the\n string providing this method.\n\nstr.ljust(width[, fillchar])\n\n Return the string left justified in a string of length *width*.\n Padding is done using the specified *fillchar* (default is a\n space). The original string is returned if *width* is less than\n ``len(s)``.\n\n Changed in version 2.4: Support for the *fillchar* argument.\n\nstr.lower()\n\n Return a copy of the string converted to lowercase.\n\n For 8-bit strings, this method is locale-dependent.\n\nstr.lstrip([chars])\n\n Return a copy of the string with leading characters removed. The\n *chars* argument is a string specifying the set of characters to be\n removed. If omitted or ``None``, the *chars* argument defaults to\n removing whitespace. The *chars* argument is not a prefix; rather,\n all combinations of its values are stripped:\n\n >>> \' spacious \'.lstrip()\n \'spacious \'\n >>> \'www.example.com\'.lstrip(\'cmowz.\')\n \'example.com\'\n\n Changed in version 2.2.2: Support for the *chars* argument.\n\nstr.partition(sep)\n\n Split the string at the first occurrence of *sep*, and return a\n 3-tuple containing the part before the separator, the separator\n itself, and the part after the separator. If the separator is not\n found, return a 3-tuple containing the string itself, followed by\n two empty strings.\n\n New in version 2.5.\n\nstr.replace(old, new[, count])\n\n Return a copy of the string with all occurrences of substring *old*\n replaced by *new*. If the optional argument *count* is given, only\n the first *count* occurrences are replaced.\n\nstr.rfind(sub[, start[, end]])\n\n Return the highest index in the string where substring *sub* is\n found, such that *sub* is contained within s[start,end]. Optional\n arguments *start* and *end* are interpreted as in slice notation.\n Return ``-1`` on failure.\n\nstr.rindex(sub[, start[, end]])\n\n Like ``rfind()`` but raises ``ValueError`` when the substring *sub*\n is not found.\n\nstr.rjust(width[, fillchar])\n\n Return the string right justified in a string of length *width*.\n Padding is done using the specified *fillchar* (default is a\n space). The original string is returned if *width* is less than\n ``len(s)``.\n\n Changed in version 2.4: Support for the *fillchar* argument.\n\nstr.rpartition(sep)\n\n Split the string at the last occurrence of *sep*, and return a\n 3-tuple containing the part before the separator, the separator\n itself, and the part after the separator. If the separator is not\n found, return a 3-tuple containing two empty strings, followed by\n the string itself.\n\n New in version 2.5.\n\nstr.rsplit([sep[, maxsplit]])\n\n Return a list of the words in the string, using *sep* as the\n delimiter string. If *maxsplit* is given, at most *maxsplit* splits\n are done, the *rightmost* ones. If *sep* is not specified or\n ``None``, any whitespace string is a separator. Except for\n splitting from the right, ``rsplit()`` behaves like ``split()``\n which is described in detail below.\n\n New in version 2.4.\n\nstr.rstrip([chars])\n\n Return a copy of the string with trailing characters removed. The\n *chars* argument is a string specifying the set of characters to be\n removed. If omitted or ``None``, the *chars* argument defaults to\n removing whitespace. The *chars* argument is not a suffix; rather,\n all combinations of its values are stripped:\n\n >>> \' spacious \'.rstrip()\n \' spacious\'\n >>> \'mississippi\'.rstrip(\'ipz\')\n \'mississ\'\n\n Changed in version 2.2.2: Support for the *chars* argument.\n\nstr.split([sep[, maxsplit]])\n\n Return a list of the words in the string, using *sep* as the\n delimiter string. If *maxsplit* is given, at most *maxsplit*\n splits are done (thus, the list will have at most ``maxsplit+1``\n elements). If *maxsplit* is not specified, then there is no limit\n on the number of splits (all possible splits are made).\n\n If *sep* is given, consecutive delimiters are not grouped together\n and are deemed to delimit empty strings (for example,\n ``\'1,,2\'.split(\',\')`` returns ``[\'1\', \'\', \'2\']``). The *sep*\n argument may consist of multiple characters (for example,\n ``\'1<>2<>3\'.split(\'<>\')`` returns ``[\'1\', \'2\', \'3\']``). Splitting\n an empty string with a specified separator returns ``[\'\']``.\n\n If *sep* is not specified or is ``None``, a different splitting\n algorithm is applied: runs of consecutive whitespace are regarded\n as a single separator, and the result will contain no empty strings\n at the start or end if the string has leading or trailing\n whitespace. Consequently, splitting an empty string or a string\n consisting of just whitespace with a ``None`` separator returns\n ``[]``.\n\n For example, ``\' 1 2 3 \'.split()`` returns ``[\'1\', \'2\', \'3\']``,\n and ``\' 1 2 3 \'.split(None, 1)`` returns ``[\'1\', \'2 3 \']``.\n\nstr.splitlines([keepends])\n\n Return a list of the lines in the string, breaking at line\n boundaries. Line breaks are not included in the resulting list\n unless *keepends* is given and true.\n\nstr.startswith(prefix[, start[, end]])\n\n Return ``True`` if string starts with the *prefix*, otherwise\n return ``False``. *prefix* can also be a tuple of prefixes to look\n for. With optional *start*, test string beginning at that\n position. With optional *end*, stop comparing string at that\n position.\n\n Changed in version 2.5: Accept tuples as *prefix*.\n\nstr.strip([chars])\n\n Return a copy of the string with the leading and trailing\n characters removed. The *chars* argument is a string specifying the\n set of characters to be removed. If omitted or ``None``, the\n *chars* argument defaults to removing whitespace. The *chars*\n argument is not a prefix or suffix; rather, all combinations of its\n values are stripped:\n\n >>> \' spacious \'.strip()\n \'spacious\'\n >>> \'www.example.com\'.strip(\'cmowz.\')\n \'example\'\n\n Changed in version 2.2.2: Support for the *chars* argument.\n\nstr.swapcase()\n\n Return a copy of the string with uppercase characters converted to\n lowercase and vice versa.\n\n For 8-bit strings, this method is locale-dependent.\n\nstr.title()\n\n Return a titlecased version of the string where words start with an\n uppercase character and the remaining characters are lowercase.\n\n The algorithm uses a simple language-independent definition of a\n word as groups of consecutive letters. The definition works in\n many contexts but it means that apostrophes in contractions and\n possessives form word boundaries, which may not be the desired\n result:\n\n >>> "they\'re bill\'s friends from the UK".title()\n "They\'Re Bill\'S Friends From The Uk"\n\n A workaround for apostrophes can be constructed using regular\n expressions:\n\n >>> import re\n >>> def titlecase(s):\n return re.sub(r"[A-Za-z]+(\'[A-Za-z]+)?",\n lambda mo: mo.group(0)[0].upper() +\n mo.group(0)[1:].lower(),\n s)\n\n >>> titlecase("they\'re bill\'s friends.")\n "They\'re Bill\'s Friends."\n\n For 8-bit strings, this method is locale-dependent.\n\nstr.translate(table[, deletechars])\n\n Return a copy of the string where all characters occurring in the\n optional argument *deletechars* are removed, and the remaining\n characters have been mapped through the given translation table,\n which must be a string of length 256.\n\n You can use the ``maketrans()`` helper function in the ``string``\n module to create a translation table. For string objects, set the\n *table* argument to ``None`` for translations that only delete\n characters:\n\n >>> \'read this short text\'.translate(None, \'aeiou\')\n \'rd ths shrt txt\'\n\n New in version 2.6: Support for a ``None`` *table* argument.\n\n For Unicode objects, the ``translate()`` method does not accept the\n optional *deletechars* argument. Instead, it returns a copy of the\n *s* where all characters have been mapped through the given\n translation table which must be a mapping of Unicode ordinals to\n Unicode ordinals, Unicode strings or ``None``. Unmapped characters\n are left untouched. Characters mapped to ``None`` are deleted.\n Note, a more flexible approach is to create a custom character\n mapping codec using the ``codecs`` module (see ``encodings.cp1251``\n for an example).\n\nstr.upper()\n\n Return a copy of the string converted to uppercase.\n\n For 8-bit strings, this method is locale-dependent.\n\nstr.zfill(width)\n\n Return the numeric string left filled with zeros in a string of\n length *width*. A sign prefix is handled correctly. The original\n string is returned if *width* is less than ``len(s)``.\n\n New in version 2.2.2.\n\nThe following methods are present only on unicode objects:\n\nunicode.isnumeric()\n\n Return ``True`` if there are only numeric characters in S,\n ``False`` otherwise. Numeric characters include digit characters,\n and all characters that have the Unicode numeric value property,\n e.g. U+2155, VULGAR FRACTION ONE FIFTH.\n\nunicode.isdecimal()\n\n Return ``True`` if there are only decimal characters in S,\n ``False`` otherwise. Decimal characters include digit characters,\n and all characters that that can be used to form decimal-radix\n numbers, e.g. U+0660, ARABIC-INDIC DIGIT ZERO.\n', 'strings': u'\nString literals\n***************\n\nString literals are described by the following lexical definitions:\n\n stringliteral ::= [stringprefix](shortstring | longstring)\n stringprefix ::= "r" | "u" | "ur" | "R" | "U" | "UR" | "Ur" | "uR"\n shortstring ::= "\'" shortstringitem* "\'" | \'"\' shortstringitem* \'"\'\n longstring ::= "\'\'\'" longstringitem* "\'\'\'"\n | \'"""\' longstringitem* \'"""\'\n shortstringitem ::= shortstringchar | escapeseq\n longstringitem ::= longstringchar | escapeseq\n shortstringchar ::= \n longstringchar ::= \n escapeseq ::= "\\" \n\nOne syntactic restriction not indicated by these productions is that\nwhitespace is not allowed between the **stringprefix** and the rest of\nthe string literal. The source character set is defined by the\nencoding declaration; it is ASCII if no encoding declaration is given\nin the source file; see section *Encoding declarations*.\n\nIn plain English: String literals can be enclosed in matching single\nquotes (``\'``) or double quotes (``"``). They can also be enclosed in\nmatching groups of three single or double quotes (these are generally\nreferred to as *triple-quoted strings*). The backslash (``\\``)\ncharacter is used to escape characters that otherwise have a special\nmeaning, such as newline, backslash itself, or the quote character.\nString literals may optionally be prefixed with a letter ``\'r\'`` or\n``\'R\'``; such strings are called *raw strings* and use different rules\nfor interpreting backslash escape sequences. A prefix of ``\'u\'`` or\n``\'U\'`` makes the string a Unicode string. Unicode strings use the\nUnicode character set as defined by the Unicode Consortium and ISO\n10646. Some additional escape sequences, described below, are\navailable in Unicode strings. The two prefix characters may be\ncombined; in this case, ``\'u\'`` must appear before ``\'r\'``.\n\nIn triple-quoted strings, unescaped newlines and quotes are allowed\n(and are retained), except that three unescaped quotes in a row\nterminate the string. (A "quote" is the character used to open the\nstring, i.e. either ``\'`` or ``"``.)\n\nUnless an ``\'r\'`` or ``\'R\'`` prefix is present, escape sequences in\nstrings are interpreted according to rules similar to those used by\nStandard C. The recognized escape sequences are:\n\n+-------------------+-----------------------------------+---------+\n| Escape Sequence | Meaning | Notes |\n+===================+===================================+=========+\n| ``\\newline`` | Ignored | |\n+-------------------+-----------------------------------+---------+\n| ``\\\\`` | Backslash (``\\``) | |\n+-------------------+-----------------------------------+---------+\n| ``\\\'`` | Single quote (``\'``) | |\n+-------------------+-----------------------------------+---------+\n| ``\\"`` | Double quote (``"``) | |\n+-------------------+-----------------------------------+---------+\n| ``\\a`` | ASCII Bell (BEL) | |\n+-------------------+-----------------------------------+---------+\n| ``\\b`` | ASCII Backspace (BS) | |\n+-------------------+-----------------------------------+---------+\n| ``\\f`` | ASCII Formfeed (FF) | |\n+-------------------+-----------------------------------+---------+\n| ``\\n`` | ASCII Linefeed (LF) | |\n+-------------------+-----------------------------------+---------+\n| ``\\N{name}`` | Character named *name* in the | |\n| | Unicode database (Unicode only) | |\n+-------------------+-----------------------------------+---------+\n| ``\\r`` | ASCII Carriage Return (CR) | |\n+-------------------+-----------------------------------+---------+\n| ``\\t`` | ASCII Horizontal Tab (TAB) | |\n+-------------------+-----------------------------------+---------+\n| ``\\uxxxx`` | Character with 16-bit hex value | (1) |\n| | *xxxx* (Unicode only) | |\n+-------------------+-----------------------------------+---------+\n| ``\\Uxxxxxxxx`` | Character with 32-bit hex value | (2) |\n| | *xxxxxxxx* (Unicode only) | |\n+-------------------+-----------------------------------+---------+\n| ``\\v`` | ASCII Vertical Tab (VT) | |\n+-------------------+-----------------------------------+---------+\n| ``\\ooo`` | Character with octal value *ooo* | (3,5) |\n+-------------------+-----------------------------------+---------+\n| ``\\xhh`` | Character with hex value *hh* | (4,5) |\n+-------------------+-----------------------------------+---------+\n\nNotes:\n\n1. Individual code units which form parts of a surrogate pair can be\n encoded using this escape sequence.\n\n2. Any Unicode character can be encoded this way, but characters\n outside the Basic Multilingual Plane (BMP) will be encoded using a\n surrogate pair if Python is compiled to use 16-bit code units (the\n default). Individual code units which form parts of a surrogate\n pair can be encoded using this escape sequence.\n\n3. As in Standard C, up to three octal digits are accepted.\n\n4. Unlike in Standard C, exactly two hex digits are required.\n\n5. In a string literal, hexadecimal and octal escapes denote the byte\n with the given value; it is not necessary that the byte encodes a\n character in the source character set. In a Unicode literal, these\n escapes denote a Unicode character with the given value.\n\nUnlike Standard C, all unrecognized escape sequences are left in the\nstring unchanged, i.e., *the backslash is left in the string*. (This\nbehavior is useful when debugging: if an escape sequence is mistyped,\nthe resulting output is more easily recognized as broken.) It is also\nimportant to note that the escape sequences marked as "(Unicode only)"\nin the table above fall into the category of unrecognized escapes for\nnon-Unicode string literals.\n\nWhen an ``\'r\'`` or ``\'R\'`` prefix is present, a character following a\nbackslash is included in the string without change, and *all\nbackslashes are left in the string*. For example, the string literal\n``r"\\n"`` consists of two characters: a backslash and a lowercase\n``\'n\'``. String quotes can be escaped with a backslash, but the\nbackslash remains in the string; for example, ``r"\\""`` is a valid\nstring literal consisting of two characters: a backslash and a double\nquote; ``r"\\"`` is not a valid string literal (even a raw string\ncannot end in an odd number of backslashes). Specifically, *a raw\nstring cannot end in a single backslash* (since the backslash would\nescape the following quote character). Note also that a single\nbackslash followed by a newline is interpreted as those two characters\nas part of the string, *not* as a line continuation.\n\nWhen an ``\'r\'`` or ``\'R\'`` prefix is used in conjunction with a\n``\'u\'`` or ``\'U\'`` prefix, then the ``\\uXXXX`` and ``\\UXXXXXXXX``\nescape sequences are processed while *all other backslashes are left\nin the string*. For example, the string literal ``ur"\\u0062\\n"``\nconsists of three Unicode characters: \'LATIN SMALL LETTER B\', \'REVERSE\nSOLIDUS\', and \'LATIN SMALL LETTER N\'. Backslashes can be escaped with\na preceding backslash; however, both remain in the string. As a\nresult, ``\\uXXXX`` escape sequences are only recognized when there are\nan odd number of backslashes.\n', 'subscriptions': u'\nSubscriptions\n*************\n\nA subscription selects an item of a sequence (string, tuple or list)\nor mapping (dictionary) object:\n\n subscription ::= primary "[" expression_list "]"\n\nThe primary must evaluate to an object of a sequence or mapping type.\n\nIf the primary is a mapping, the expression list must evaluate to an\nobject whose value is one of the keys of the mapping, and the\nsubscription selects the value in the mapping that corresponds to that\nkey. (The expression list is a tuple except if it has exactly one\nitem.)\n\nIf the primary is a sequence, the expression (list) must evaluate to a\nplain integer. If this value is negative, the length of the sequence\nis added to it (so that, e.g., ``x[-1]`` selects the last item of\n``x``.) The resulting value must be a nonnegative integer less than\nthe number of items in the sequence, and the subscription selects the\nitem whose index is that value (counting from zero).\n\nA string\'s items are characters. A character is not a separate data\ntype but a string of exactly one character.\n', 'truth': u"\nTruth Value Testing\n*******************\n\nAny object can be tested for truth value, for use in an ``if`` or\n``while`` condition or as operand of the Boolean operations below. The\nfollowing values are considered false:\n\n* ``None``\n\n* ``False``\n\n* zero of any numeric type, for example, ``0``, ``0L``, ``0.0``,\n ``0j``.\n\n* any empty sequence, for example, ``''``, ``()``, ``[]``.\n\n* any empty mapping, for example, ``{}``.\n\n* instances of user-defined classes, if the class defines a\n ``__nonzero__()`` or ``__len__()`` method, when that method returns\n the integer zero or ``bool`` value ``False``. [1]\n\nAll other values are considered true --- so objects of many types are\nalways true.\n\nOperations and built-in functions that have a Boolean result always\nreturn ``0`` or ``False`` for false and ``1`` or ``True`` for true,\nunless otherwise stated. (Important exception: the Boolean operations\n``or`` and ``and`` always return one of their operands.)\n", 'try': u'\nThe ``try`` statement\n*********************\n\nThe ``try`` statement specifies exception handlers and/or cleanup code\nfor a group of statements:\n\n try_stmt ::= try1_stmt | try2_stmt\n try1_stmt ::= "try" ":" suite\n ("except" [expression [("as" | ",") target]] ":" suite)+\n ["else" ":" suite]\n ["finally" ":" suite]\n try2_stmt ::= "try" ":" suite\n "finally" ":" suite\n\nChanged in version 2.5: In previous versions of Python,\n``try``...``except``...``finally`` did not work. ``try``...``except``\nhad to be nested in ``try``...``finally``.\n\nThe ``except`` clause(s) specify one or more exception handlers. When\nno exception occurs in the ``try`` clause, no exception handler is\nexecuted. When an exception occurs in the ``try`` suite, a search for\nan exception handler is started. This search inspects the except\nclauses in turn until one is found that matches the exception. An\nexpression-less except clause, if present, must be last; it matches\nany exception. For an except clause with an expression, that\nexpression is evaluated, and the clause matches the exception if the\nresulting object is "compatible" with the exception. An object is\ncompatible with an exception if it is the class or a base class of the\nexception object, a tuple containing an item compatible with the\nexception, or, in the (deprecated) case of string exceptions, is the\nraised string itself (note that the object identities must match, i.e.\nit must be the same string object, not just a string with the same\nvalue).\n\nIf no except clause matches the exception, the search for an exception\nhandler continues in the surrounding code and on the invocation stack.\n[1]\n\nIf the evaluation of an expression in the header of an except clause\nraises an exception, the original search for a handler is canceled and\na search starts for the new exception in the surrounding code and on\nthe call stack (it is treated as if the entire ``try`` statement\nraised the exception).\n\nWhen a matching except clause is found, the exception is assigned to\nthe target specified in that except clause, if present, and the except\nclause\'s suite is executed. All except clauses must have an\nexecutable block. When the end of this block is reached, execution\ncontinues normally after the entire try statement. (This means that\nif two nested handlers exist for the same exception, and the exception\noccurs in the try clause of the inner handler, the outer handler will\nnot handle the exception.)\n\nBefore an except clause\'s suite is executed, details about the\nexception are assigned to three variables in the ``sys`` module:\n``sys.exc_type`` receives the object identifying the exception;\n``sys.exc_value`` receives the exception\'s parameter;\n``sys.exc_traceback`` receives a traceback object (see section *The\nstandard type hierarchy*) identifying the point in the program where\nthe exception occurred. These details are also available through the\n``sys.exc_info()`` function, which returns a tuple ``(exc_type,\nexc_value, exc_traceback)``. Use of the corresponding variables is\ndeprecated in favor of this function, since their use is unsafe in a\nthreaded program. As of Python 1.5, the variables are restored to\ntheir previous values (before the call) when returning from a function\nthat handled an exception.\n\nThe optional ``else`` clause is executed if and when control flows off\nthe end of the ``try`` clause. [2] Exceptions in the ``else`` clause\nare not handled by the preceding ``except`` clauses.\n\nIf ``finally`` is present, it specifies a \'cleanup\' handler. The\n``try`` clause is executed, including any ``except`` and ``else``\nclauses. If an exception occurs in any of the clauses and is not\nhandled, the exception is temporarily saved. The ``finally`` clause is\nexecuted. If there is a saved exception, it is re-raised at the end\nof the ``finally`` clause. If the ``finally`` clause raises another\nexception or executes a ``return`` or ``break`` statement, the saved\nexception is lost. The exception information is not available to the\nprogram during execution of the ``finally`` clause.\n\nWhen a ``return``, ``break`` or ``continue`` statement is executed in\nthe ``try`` suite of a ``try``...``finally`` statement, the\n``finally`` clause is also executed \'on the way out.\' A ``continue``\nstatement is illegal in the ``finally`` clause. (The reason is a\nproblem with the current implementation --- this restriction may be\nlifted in the future).\n\nAdditional information on exceptions can be found in section\n*Exceptions*, and information on using the ``raise`` statement to\ngenerate exceptions may be found in section *The raise statement*.\n', - 'types': u'\nThe standard type hierarchy\n***************************\n\nBelow is a list of the types that are built into Python. Extension\nmodules (written in C, Java, or other languages, depending on the\nimplementation) can define additional types. Future versions of\nPython may add types to the type hierarchy (e.g., rational numbers,\nefficiently stored arrays of integers, etc.).\n\nSome of the type descriptions below contain a paragraph listing\n\'special attributes.\' These are attributes that provide access to the\nimplementation and are not intended for general use. Their definition\nmay change in the future.\n\nNone\n This type has a single value. There is a single object with this\n value. This object is accessed through the built-in name ``None``.\n It is used to signify the absence of a value in many situations,\n e.g., it is returned from functions that don\'t explicitly return\n anything. Its truth value is false.\n\nNotImplemented\n This type has a single value. There is a single object with this\n value. This object is accessed through the built-in name\n ``NotImplemented``. Numeric methods and rich comparison methods may\n return this value if they do not implement the operation for the\n operands provided. (The interpreter will then try the reflected\n operation, or some other fallback, depending on the operator.) Its\n truth value is true.\n\nEllipsis\n This type has a single value. There is a single object with this\n value. This object is accessed through the built-in name\n ``Ellipsis``. It is used to indicate the presence of the ``...``\n syntax in a slice. Its truth value is true.\n\n``numbers.Number``\n These are created by numeric literals and returned as results by\n arithmetic operators and arithmetic built-in functions. Numeric\n objects are immutable; once created their value never changes.\n Python numbers are of course strongly related to mathematical\n numbers, but subject to the limitations of numerical representation\n in computers.\n\n Python distinguishes between integers, floating point numbers, and\n complex numbers:\n\n ``numbers.Integral``\n These represent elements from the mathematical set of integers\n (positive and negative).\n\n There are three types of integers:\n\n Plain integers\n These represent numbers in the range -2147483648 through\n 2147483647. (The range may be larger on machines with a\n larger natural word size, but not smaller.) When the result\n of an operation would fall outside this range, the result is\n normally returned as a long integer (in some cases, the\n exception ``OverflowError`` is raised instead). For the\n purpose of shift and mask operations, integers are assumed to\n have a binary, 2\'s complement notation using 32 or more bits,\n and hiding no bits from the user (i.e., all 4294967296\n different bit patterns correspond to different values).\n\n Long integers\n These represent numbers in an unlimited range, subject to\n available (virtual) memory only. For the purpose of shift\n and mask operations, a binary representation is assumed, and\n negative numbers are represented in a variant of 2\'s\n complement which gives the illusion of an infinite string of\n sign bits extending to the left.\n\n Booleans\n These represent the truth values False and True. The two\n objects representing the values False and True are the only\n Boolean objects. The Boolean type is a subtype of plain\n integers, and Boolean values behave like the values 0 and 1,\n respectively, in almost all contexts, the exception being\n that when converted to a string, the strings ``"False"`` or\n ``"True"`` are returned, respectively.\n\n The rules for integer representation are intended to give the\n most meaningful interpretation of shift and mask operations\n involving negative integers and the least surprises when\n switching between the plain and long integer domains. Any\n operation, if it yields a result in the plain integer domain,\n will yield the same result in the long integer domain or when\n using mixed operands. The switch between domains is transparent\n to the programmer.\n\n ``numbers.Real`` (``float``)\n These represent machine-level double precision floating point\n numbers. You are at the mercy of the underlying machine\n architecture (and C or Java implementation) for the accepted\n range and handling of overflow. Python does not support single-\n precision floating point numbers; the savings in processor and\n memory usage that are usually the reason for using these is\n dwarfed by the overhead of using objects in Python, so there is\n no reason to complicate the language with two kinds of floating\n point numbers.\n\n ``numbers.Complex``\n These represent complex numbers as a pair of machine-level\n double precision floating point numbers. The same caveats apply\n as for floating point numbers. The real and imaginary parts of a\n complex number ``z`` can be retrieved through the read-only\n attributes ``z.real`` and ``z.imag``.\n\nSequences\n These represent finite ordered sets indexed by non-negative\n numbers. The built-in function ``len()`` returns the number of\n items of a sequence. When the length of a sequence is *n*, the\n index set contains the numbers 0, 1, ..., *n*-1. Item *i* of\n sequence *a* is selected by ``a[i]``.\n\n Sequences also support slicing: ``a[i:j]`` selects all items with\n index *k* such that *i* ``<=`` *k* ``<`` *j*. When used as an\n expression, a slice is a sequence of the same type. This implies\n that the index set is renumbered so that it starts at 0.\n\n Some sequences also support "extended slicing" with a third "step"\n parameter: ``a[i:j:k]`` selects all items of *a* with index *x*\n where ``x = i + n*k``, *n* ``>=`` ``0`` and *i* ``<=`` *x* ``<``\n *j*.\n\n Sequences are distinguished according to their mutability:\n\n Immutable sequences\n An object of an immutable sequence type cannot change once it is\n created. (If the object contains references to other objects,\n these other objects may be mutable and may be changed; however,\n the collection of objects directly referenced by an immutable\n object cannot change.)\n\n The following types are immutable sequences:\n\n Strings\n The items of a string are characters. There is no separate\n character type; a character is represented by a string of one\n item. Characters represent (at least) 8-bit bytes. The\n built-in functions ``chr()`` and ``ord()`` convert between\n characters and nonnegative integers representing the byte\n values. Bytes with the values 0-127 usually represent the\n corresponding ASCII values, but the interpretation of values\n is up to the program. The string data type is also used to\n represent arrays of bytes, e.g., to hold data read from a\n file.\n\n (On systems whose native character set is not ASCII, strings\n may use EBCDIC in their internal representation, provided the\n functions ``chr()`` and ``ord()`` implement a mapping between\n ASCII and EBCDIC, and string comparison preserves the ASCII\n order. Or perhaps someone can propose a better rule?)\n\n Unicode\n The items of a Unicode object are Unicode code units. A\n Unicode code unit is represented by a Unicode object of one\n item and can hold either a 16-bit or 32-bit value\n representing a Unicode ordinal (the maximum value for the\n ordinal is given in ``sys.maxunicode``, and depends on how\n Python is configured at compile time). Surrogate pairs may\n be present in the Unicode object, and will be reported as two\n separate items. The built-in functions ``unichr()`` and\n ``ord()`` convert between code units and nonnegative integers\n representing the Unicode ordinals as defined in the Unicode\n Standard 3.0. Conversion from and to other encodings are\n possible through the Unicode method ``encode()`` and the\n built-in function ``unicode()``.\n\n Tuples\n The items of a tuple are arbitrary Python objects. Tuples of\n two or more items are formed by comma-separated lists of\n expressions. A tuple of one item (a \'singleton\') can be\n formed by affixing a comma to an expression (an expression by\n itself does not create a tuple, since parentheses must be\n usable for grouping of expressions). An empty tuple can be\n formed by an empty pair of parentheses.\n\n Mutable sequences\n Mutable sequences can be changed after they are created. The\n subscription and slicing notations can be used as the target of\n assignment and ``del`` (delete) statements.\n\n There is currently a single intrinsic mutable sequence type:\n\n Lists\n The items of a list are arbitrary Python objects. Lists are\n formed by placing a comma-separated list of expressions in\n square brackets. (Note that there are no special cases needed\n to form lists of length 0 or 1.)\n\n The extension module ``array`` provides an additional example of\n a mutable sequence type.\n\nSet types\n These represent unordered, finite sets of unique, immutable\n objects. As such, they cannot be indexed by any subscript. However,\n they can be iterated over, and the built-in function ``len()``\n returns the number of items in a set. Common uses for sets are fast\n membership testing, removing duplicates from a sequence, and\n computing mathematical operations such as intersection, union,\n difference, and symmetric difference.\n\n For set elements, the same immutability rules apply as for\n dictionary keys. Note that numeric types obey the normal rules for\n numeric comparison: if two numbers compare equal (e.g., ``1`` and\n ``1.0``), only one of them can be contained in a set.\n\n There are currently two intrinsic set types:\n\n Sets\n These represent a mutable set. They are created by the built-in\n ``set()`` constructor and can be modified afterwards by several\n methods, such as ``add()``.\n\n Frozen sets\n These represent an immutable set. They are created by the\n built-in ``frozenset()`` constructor. As a frozenset is\n immutable and *hashable*, it can be used again as an element of\n another set, or as a dictionary key.\n\nMappings\n These represent finite sets of objects indexed by arbitrary index\n sets. The subscript notation ``a[k]`` selects the item indexed by\n ``k`` from the mapping ``a``; this can be used in expressions and\n as the target of assignments or ``del`` statements. The built-in\n function ``len()`` returns the number of items in a mapping.\n\n There is currently a single intrinsic mapping type:\n\n Dictionaries\n These represent finite sets of objects indexed by nearly\n arbitrary values. The only types of values not acceptable as\n keys are values containing lists or dictionaries or other\n mutable types that are compared by value rather than by object\n identity, the reason being that the efficient implementation of\n dictionaries requires a key\'s hash value to remain constant.\n Numeric types used for keys obey the normal rules for numeric\n comparison: if two numbers compare equal (e.g., ``1`` and\n ``1.0``) then they can be used interchangeably to index the same\n dictionary entry.\n\n Dictionaries are mutable; they can be created by the ``{...}``\n notation (see section *Dictionary displays*).\n\n The extension modules ``dbm``, ``gdbm``, and ``bsddb`` provide\n additional examples of mapping types.\n\nCallable types\n These are the types to which the function call operation (see\n section *Calls*) can be applied:\n\n User-defined functions\n A user-defined function object is created by a function\n definition (see section *Function definitions*). It should be\n called with an argument list containing the same number of items\n as the function\'s formal parameter list.\n\n Special attributes:\n\n +-------------------------+---------------------------------+-------------+\n | Attribute | Meaning | |\n +=========================+=================================+=============+\n | ``func_doc`` | The function\'s documentation | Writable |\n | | string, or ``None`` if | |\n | | unavailable | |\n +-------------------------+---------------------------------+-------------+\n | ``__doc__`` | Another way of spelling | Writable |\n | | ``func_doc`` | |\n +-------------------------+---------------------------------+-------------+\n | ``func_name`` | The function\'s name | Writable |\n +-------------------------+---------------------------------+-------------+\n | ``__name__`` | Another way of spelling | Writable |\n | | ``func_name`` | |\n +-------------------------+---------------------------------+-------------+\n | ``__module__`` | The name of the module the | Writable |\n | | function was defined in, or | |\n | | ``None`` if unavailable. | |\n +-------------------------+---------------------------------+-------------+\n | ``func_defaults`` | A tuple containing default | Writable |\n | | argument values for those | |\n | | arguments that have defaults, | |\n | | or ``None`` if no arguments | |\n | | have a default value | |\n +-------------------------+---------------------------------+-------------+\n | ``func_code`` | The code object representing | Writable |\n | | the compiled function body. | |\n +-------------------------+---------------------------------+-------------+\n | ``func_globals`` | A reference to the dictionary | Read-only |\n | | that holds the function\'s | |\n | | global variables --- the global | |\n | | namespace of the module in | |\n | | which the function was defined. | |\n +-------------------------+---------------------------------+-------------+\n | ``func_dict`` | The namespace supporting | Writable |\n | | arbitrary function attributes. | |\n +-------------------------+---------------------------------+-------------+\n | ``func_closure`` | ``None`` or a tuple of cells | Read-only |\n | | that contain bindings for the | |\n | | function\'s free variables. | |\n +-------------------------+---------------------------------+-------------+\n\n Most of the attributes labelled "Writable" check the type of the\n assigned value.\n\n Changed in version 2.4: ``func_name`` is now writable.\n\n Function objects also support getting and setting arbitrary\n attributes, which can be used, for example, to attach metadata\n to functions. Regular attribute dot-notation is used to get and\n set such attributes. *Note that the current implementation only\n supports function attributes on user-defined functions. Function\n attributes on built-in functions may be supported in the\n future.*\n\n Additional information about a function\'s definition can be\n retrieved from its code object; see the description of internal\n types below.\n\n User-defined methods\n A user-defined method object combines a class, a class instance\n (or ``None``) and any callable object (normally a user-defined\n function).\n\n Special read-only attributes: ``im_self`` is the class instance\n object, ``im_func`` is the function object; ``im_class`` is the\n class of ``im_self`` for bound methods or the class that asked\n for the method for unbound methods; ``__doc__`` is the method\'s\n documentation (same as ``im_func.__doc__``); ``__name__`` is the\n method name (same as ``im_func.__name__``); ``__module__`` is\n the name of the module the method was defined in, or ``None`` if\n unavailable.\n\n Changed in version 2.2: ``im_self`` used to refer to the class\n that defined the method.\n\n Changed in version 2.6: For 3.0 forward-compatibility,\n ``im_func`` is also available as ``__func__``, and ``im_self``\n as ``__self__``.\n\n Methods also support accessing (but not setting) the arbitrary\n function attributes on the underlying function object.\n\n User-defined method objects may be created when getting an\n attribute of a class (perhaps via an instance of that class), if\n that attribute is a user-defined function object, an unbound\n user-defined method object, or a class method object. When the\n attribute is a user-defined method object, a new method object\n is only created if the class from which it is being retrieved is\n the same as, or a derived class of, the class stored in the\n original method object; otherwise, the original method object is\n used as it is.\n\n When a user-defined method object is created by retrieving a\n user-defined function object from a class, its ``im_self``\n attribute is ``None`` and the method object is said to be\n unbound. When one is created by retrieving a user-defined\n function object from a class via one of its instances, its\n ``im_self`` attribute is the instance, and the method object is\n said to be bound. In either case, the new method\'s ``im_class``\n attribute is the class from which the retrieval takes place, and\n its ``im_func`` attribute is the original function object.\n\n When a user-defined method object is created by retrieving\n another method object from a class or instance, the behaviour is\n the same as for a function object, except that the ``im_func``\n attribute of the new instance is not the original method object\n but its ``im_func`` attribute.\n\n When a user-defined method object is created by retrieving a\n class method object from a class or instance, its ``im_self``\n attribute is the class itself (the same as the ``im_class``\n attribute), and its ``im_func`` attribute is the function object\n underlying the class method.\n\n When an unbound user-defined method object is called, the\n underlying function (``im_func``) is called, with the\n restriction that the first argument must be an instance of the\n proper class (``im_class``) or of a derived class thereof.\n\n When a bound user-defined method object is called, the\n underlying function (``im_func``) is called, inserting the class\n instance (``im_self``) in front of the argument list. For\n instance, when ``C`` is a class which contains a definition for\n a function ``f()``, and ``x`` is an instance of ``C``, calling\n ``x.f(1)`` is equivalent to calling ``C.f(x, 1)``.\n\n When a user-defined method object is derived from a class method\n object, the "class instance" stored in ``im_self`` will actually\n be the class itself, so that calling either ``x.f(1)`` or\n ``C.f(1)`` is equivalent to calling ``f(C,1)`` where ``f`` is\n the underlying function.\n\n Note that the transformation from function object to (unbound or\n bound) method object happens each time the attribute is\n retrieved from the class or instance. In some cases, a fruitful\n optimization is to assign the attribute to a local variable and\n call that local variable. Also notice that this transformation\n only happens for user-defined functions; other callable objects\n (and all non-callable objects) are retrieved without\n transformation. It is also important to note that user-defined\n functions which are attributes of a class instance are not\n converted to bound methods; this *only* happens when the\n function is an attribute of the class.\n\n Generator functions\n A function or method which uses the ``yield`` statement (see\n section *The yield statement*) is called a *generator function*.\n Such a function, when called, always returns an iterator object\n which can be used to execute the body of the function: calling\n the iterator\'s ``next()`` method will cause the function to\n execute until it provides a value using the ``yield`` statement.\n When the function executes a ``return`` statement or falls off\n the end, a ``StopIteration`` exception is raised and the\n iterator will have reached the end of the set of values to be\n returned.\n\n Built-in functions\n A built-in function object is a wrapper around a C function.\n Examples of built-in functions are ``len()`` and ``math.sin()``\n (``math`` is a standard built-in module). The number and type of\n the arguments are determined by the C function. Special read-\n only attributes: ``__doc__`` is the function\'s documentation\n string, or ``None`` if unavailable; ``__name__`` is the\n function\'s name; ``__self__`` is set to ``None`` (but see the\n next item); ``__module__`` is the name of the module the\n function was defined in or ``None`` if unavailable.\n\n Built-in methods\n This is really a different disguise of a built-in function, this\n time containing an object passed to the C function as an\n implicit extra argument. An example of a built-in method is\n ``alist.append()``, assuming *alist* is a list object. In this\n case, the special read-only attribute ``__self__`` is set to the\n object denoted by *list*.\n\n Class Types\n Class types, or "new-style classes," are callable. These\n objects normally act as factories for new instances of\n themselves, but variations are possible for class types that\n override ``__new__()``. The arguments of the call are passed to\n ``__new__()`` and, in the typical case, to ``__init__()`` to\n initialize the new instance.\n\n Classic Classes\n Class objects are described below. When a class object is\n called, a new class instance (also described below) is created\n and returned. This implies a call to the class\'s ``__init__()``\n method if it has one. Any arguments are passed on to the\n ``__init__()`` method. If there is no ``__init__()`` method,\n the class must be called without arguments.\n\n Class instances\n Class instances are described below. Class instances are\n callable only when the class has a ``__call__()`` method;\n ``x(arguments)`` is a shorthand for ``x.__call__(arguments)``.\n\nModules\n Modules are imported by the ``import`` statement (see section *The\n import statement*). A module object has a namespace implemented by\n a dictionary object (this is the dictionary referenced by the\n func_globals attribute of functions defined in the module).\n Attribute references are translated to lookups in this dictionary,\n e.g., ``m.x`` is equivalent to ``m.__dict__["x"]``. A module object\n does not contain the code object used to initialize the module\n (since it isn\'t needed once the initialization is done).\n\n Attribute assignment updates the module\'s namespace dictionary,\n e.g., ``m.x = 1`` is equivalent to ``m.__dict__["x"] = 1``.\n\n Special read-only attribute: ``__dict__`` is the module\'s namespace\n as a dictionary object.\n\n Predefined (writable) attributes: ``__name__`` is the module\'s\n name; ``__doc__`` is the module\'s documentation string, or ``None``\n if unavailable; ``__file__`` is the pathname of the file from which\n the module was loaded, if it was loaded from a file. The\n ``__file__`` attribute is not present for C modules that are\n statically linked into the interpreter; for extension modules\n loaded dynamically from a shared library, it is the pathname of the\n shared library file.\n\nClasses\n Both class types (new-style classes) and class objects (old-\n style/classic classes) are typically created by class definitions\n (see section *Class definitions*). A class has a namespace\n implemented by a dictionary object. Class attribute references are\n translated to lookups in this dictionary, e.g., ``C.x`` is\n translated to ``C.__dict__["x"]`` (although for new-style classes\n in particular there are a number of hooks which allow for other\n means of locating attributes). When the attribute name is not found\n there, the attribute search continues in the base classes. For\n old-style classes, the search is depth-first, left-to-right in the\n order of occurrence in the base class list. New-style classes use\n the more complex C3 method resolution order which behaves correctly\n even in the presence of \'diamond\' inheritance structures where\n there are multiple inheritance paths leading back to a common\n ancestor. Additional details on the C3 MRO used by new-style\n classes can be found in the documentation accompanying the 2.3\n release at http://www.python.org/download/releases/2.3/mro/.\n\n When a class attribute reference (for class ``C``, say) would yield\n a user-defined function object or an unbound user-defined method\n object whose associated class is either ``C`` or one of its base\n classes, it is transformed into an unbound user-defined method\n object whose ``im_class`` attribute is ``C``. When it would yield a\n class method object, it is transformed into a bound user-defined\n method object whose ``im_class`` and ``im_self`` attributes are\n both ``C``. When it would yield a static method object, it is\n transformed into the object wrapped by the static method object.\n See section *Implementing Descriptors* for another way in which\n attributes retrieved from a class may differ from those actually\n contained in its ``__dict__`` (note that only new-style classes\n support descriptors).\n\n Class attribute assignments update the class\'s dictionary, never\n the dictionary of a base class.\n\n A class object can be called (see above) to yield a class instance\n (see below).\n\n Special attributes: ``__name__`` is the class name; ``__module__``\n is the module name in which the class was defined; ``__dict__`` is\n the dictionary containing the class\'s namespace; ``__bases__`` is a\n tuple (possibly empty or a singleton) containing the base classes,\n in the order of their occurrence in the base class list;\n ``__doc__`` is the class\'s documentation string, or None if\n undefined.\n\nClass instances\n A class instance is created by calling a class object (see above).\n A class instance has a namespace implemented as a dictionary which\n is the first place in which attribute references are searched.\n When an attribute is not found there, and the instance\'s class has\n an attribute by that name, the search continues with the class\n attributes. If a class attribute is found that is a user-defined\n function object or an unbound user-defined method object whose\n associated class is the class (call it ``C``) of the instance for\n which the attribute reference was initiated or one of its bases, it\n is transformed into a bound user-defined method object whose\n ``im_class`` attribute is ``C`` and whose ``im_self`` attribute is\n the instance. Static method and class method objects are also\n transformed, as if they had been retrieved from class ``C``; see\n above under "Classes". See section *Implementing Descriptors* for\n another way in which attributes of a class retrieved via its\n instances may differ from the objects actually stored in the\n class\'s ``__dict__``. If no class attribute is found, and the\n object\'s class has a ``__getattr__()`` method, that is called to\n satisfy the lookup.\n\n Attribute assignments and deletions update the instance\'s\n dictionary, never a class\'s dictionary. If the class has a\n ``__setattr__()`` or ``__delattr__()`` method, this is called\n instead of updating the instance dictionary directly.\n\n Class instances can pretend to be numbers, sequences, or mappings\n if they have methods with certain special names. See section\n *Special method names*.\n\n Special attributes: ``__dict__`` is the attribute dictionary;\n ``__class__`` is the instance\'s class.\n\nFiles\n A file object represents an open file. File objects are created by\n the ``open()`` built-in function, and also by ``os.popen()``,\n ``os.fdopen()``, and the ``makefile()`` method of socket objects\n (and perhaps by other functions or methods provided by extension\n modules). The objects ``sys.stdin``, ``sys.stdout`` and\n ``sys.stderr`` are initialized to file objects corresponding to the\n interpreter\'s standard input, output and error streams. See *File\n Objects* for complete documentation of file objects.\n\nInternal types\n A few types used internally by the interpreter are exposed to the\n user. Their definitions may change with future versions of the\n interpreter, but they are mentioned here for completeness.\n\n Code objects\n Code objects represent *byte-compiled* executable Python code,\n or *bytecode*. The difference between a code object and a\n function object is that the function object contains an explicit\n reference to the function\'s globals (the module in which it was\n defined), while a code object contains no context; also the\n default argument values are stored in the function object, not\n in the code object (because they represent values calculated at\n run-time). Unlike function objects, code objects are immutable\n and contain no references (directly or indirectly) to mutable\n objects.\n\n Special read-only attributes: ``co_name`` gives the function\n name; ``co_argcount`` is the number of positional arguments\n (including arguments with default values); ``co_nlocals`` is the\n number of local variables used by the function (including\n arguments); ``co_varnames`` is a tuple containing the names of\n the local variables (starting with the argument names);\n ``co_cellvars`` is a tuple containing the names of local\n variables that are referenced by nested functions;\n ``co_freevars`` is a tuple containing the names of free\n variables; ``co_code`` is a string representing the sequence of\n bytecode instructions; ``co_consts`` is a tuple containing the\n literals used by the bytecode; ``co_names`` is a tuple\n containing the names used by the bytecode; ``co_filename`` is\n the filename from which the code was compiled;\n ``co_firstlineno`` is the first line number of the function;\n ``co_lnotab`` is a string encoding the mapping from bytecode\n offsets to line numbers (for details see the source code of the\n interpreter); ``co_stacksize`` is the required stack size\n (including local variables); ``co_flags`` is an integer encoding\n a number of flags for the interpreter.\n\n The following flag bits are defined for ``co_flags``: bit\n ``0x04`` is set if the function uses the ``*arguments`` syntax\n to accept an arbitrary number of positional arguments; bit\n ``0x08`` is set if the function uses the ``**keywords`` syntax\n to accept arbitrary keyword arguments; bit ``0x20`` is set if\n the function is a generator.\n\n Future feature declarations (``from __future__ import\n division``) also use bits in ``co_flags`` to indicate whether a\n code object was compiled with a particular feature enabled: bit\n ``0x2000`` is set if the function was compiled with future\n division enabled; bits ``0x10`` and ``0x1000`` were used in\n earlier versions of Python.\n\n Other bits in ``co_flags`` are reserved for internal use.\n\n If a code object represents a function, the first item in\n ``co_consts`` is the documentation string of the function, or\n ``None`` if undefined.\n\n Frame objects\n Frame objects represent execution frames. They may occur in\n traceback objects (see below).\n\n Special read-only attributes: ``f_back`` is to the previous\n stack frame (towards the caller), or ``None`` if this is the\n bottom stack frame; ``f_code`` is the code object being executed\n in this frame; ``f_locals`` is the dictionary used to look up\n local variables; ``f_globals`` is used for global variables;\n ``f_builtins`` is used for built-in (intrinsic) names;\n ``f_restricted`` is a flag indicating whether the function is\n executing in restricted execution mode; ``f_lasti`` gives the\n precise instruction (this is an index into the bytecode string\n of the code object).\n\n Special writable attributes: ``f_trace``, if not ``None``, is a\n function called at the start of each source code line (this is\n used by the debugger); ``f_exc_type``, ``f_exc_value``,\n ``f_exc_traceback`` represent the last exception raised in the\n parent frame provided another exception was ever raised in the\n current frame (in all other cases they are None); ``f_lineno``\n is the current line number of the frame --- writing to this from\n within a trace function jumps to the given line (only for the\n bottom-most frame). A debugger can implement a Jump command\n (aka Set Next Statement) by writing to f_lineno.\n\n Traceback objects\n Traceback objects represent a stack trace of an exception. A\n traceback object is created when an exception occurs. When the\n search for an exception handler unwinds the execution stack, at\n each unwound level a traceback object is inserted in front of\n the current traceback. When an exception handler is entered,\n the stack trace is made available to the program. (See section\n *The try statement*.) It is accessible as ``sys.exc_traceback``,\n and also as the third item of the tuple returned by\n ``sys.exc_info()``. The latter is the preferred interface,\n since it works correctly when the program is using multiple\n threads. When the program contains no suitable handler, the\n stack trace is written (nicely formatted) to the standard error\n stream; if the interpreter is interactive, it is also made\n available to the user as ``sys.last_traceback``.\n\n Special read-only attributes: ``tb_next`` is the next level in\n the stack trace (towards the frame where the exception\n occurred), or ``None`` if there is no next level; ``tb_frame``\n points to the execution frame of the current level;\n ``tb_lineno`` gives the line number where the exception\n occurred; ``tb_lasti`` indicates the precise instruction. The\n line number and last instruction in the traceback may differ\n from the line number of its frame object if the exception\n occurred in a ``try`` statement with no matching except clause\n or with a finally clause.\n\n Slice objects\n Slice objects are used to represent slices when *extended slice\n syntax* is used. This is a slice using two colons, or multiple\n slices or ellipses separated by commas, e.g., ``a[i:j:step]``,\n ``a[i:j, k:l]``, or ``a[..., i:j]``. They are also created by\n the built-in ``slice()`` function.\n\n Special read-only attributes: ``start`` is the lower bound;\n ``stop`` is the upper bound; ``step`` is the step value; each is\n ``None`` if omitted. These attributes can have any type.\n\n Slice objects support one method:\n\n slice.indices(self, length)\n\n This method takes a single integer argument *length* and\n computes information about the extended slice that the slice\n object would describe if applied to a sequence of *length*\n items. It returns a tuple of three integers; respectively\n these are the *start* and *stop* indices and the *step* or\n stride length of the slice. Missing or out-of-bounds indices\n are handled in a manner consistent with regular slices.\n\n New in version 2.3.\n\n Static method objects\n Static method objects provide a way of defeating the\n transformation of function objects to method objects described\n above. A static method object is a wrapper around any other\n object, usually a user-defined method object. When a static\n method object is retrieved from a class or a class instance, the\n object actually returned is the wrapped object, which is not\n subject to any further transformation. Static method objects are\n not themselves callable, although the objects they wrap usually\n are. Static method objects are created by the built-in\n ``staticmethod()`` constructor.\n\n Class method objects\n A class method object, like a static method object, is a wrapper\n around another object that alters the way in which that object\n is retrieved from classes and class instances. The behaviour of\n class method objects upon such retrieval is described above,\n under "User-defined methods". Class method objects are created\n by the built-in ``classmethod()`` constructor.\n', + 'types': u'\nThe standard type hierarchy\n***************************\n\nBelow is a list of the types that are built into Python. Extension\nmodules (written in C, Java, or other languages, depending on the\nimplementation) can define additional types. Future versions of\nPython may add types to the type hierarchy (e.g., rational numbers,\nefficiently stored arrays of integers, etc.).\n\nSome of the type descriptions below contain a paragraph listing\n\'special attributes.\' These are attributes that provide access to the\nimplementation and are not intended for general use. Their definition\nmay change in the future.\n\nNone\n This type has a single value. There is a single object with this\n value. This object is accessed through the built-in name ``None``.\n It is used to signify the absence of a value in many situations,\n e.g., it is returned from functions that don\'t explicitly return\n anything. Its truth value is false.\n\nNotImplemented\n This type has a single value. There is a single object with this\n value. This object is accessed through the built-in name\n ``NotImplemented``. Numeric methods and rich comparison methods may\n return this value if they do not implement the operation for the\n operands provided. (The interpreter will then try the reflected\n operation, or some other fallback, depending on the operator.) Its\n truth value is true.\n\nEllipsis\n This type has a single value. There is a single object with this\n value. This object is accessed through the built-in name\n ``Ellipsis``. It is used to indicate the presence of the ``...``\n syntax in a slice. Its truth value is true.\n\n``numbers.Number``\n These are created by numeric literals and returned as results by\n arithmetic operators and arithmetic built-in functions. Numeric\n objects are immutable; once created their value never changes.\n Python numbers are of course strongly related to mathematical\n numbers, but subject to the limitations of numerical representation\n in computers.\n\n Python distinguishes between integers, floating point numbers, and\n complex numbers:\n\n ``numbers.Integral``\n These represent elements from the mathematical set of integers\n (positive and negative).\n\n There are three types of integers:\n\n Plain integers\n These represent numbers in the range -2147483648 through\n 2147483647. (The range may be larger on machines with a\n larger natural word size, but not smaller.) When the result\n of an operation would fall outside this range, the result is\n normally returned as a long integer (in some cases, the\n exception ``OverflowError`` is raised instead). For the\n purpose of shift and mask operations, integers are assumed to\n have a binary, 2\'s complement notation using 32 or more bits,\n and hiding no bits from the user (i.e., all 4294967296\n different bit patterns correspond to different values).\n\n Long integers\n These represent numbers in an unlimited range, subject to\n available (virtual) memory only. For the purpose of shift\n and mask operations, a binary representation is assumed, and\n negative numbers are represented in a variant of 2\'s\n complement which gives the illusion of an infinite string of\n sign bits extending to the left.\n\n Booleans\n These represent the truth values False and True. The two\n objects representing the values False and True are the only\n Boolean objects. The Boolean type is a subtype of plain\n integers, and Boolean values behave like the values 0 and 1,\n respectively, in almost all contexts, the exception being\n that when converted to a string, the strings ``"False"`` or\n ``"True"`` are returned, respectively.\n\n The rules for integer representation are intended to give the\n most meaningful interpretation of shift and mask operations\n involving negative integers and the least surprises when\n switching between the plain and long integer domains. Any\n operation, if it yields a result in the plain integer domain,\n will yield the same result in the long integer domain or when\n using mixed operands. The switch between domains is transparent\n to the programmer.\n\n ``numbers.Real`` (``float``)\n These represent machine-level double precision floating point\n numbers. You are at the mercy of the underlying machine\n architecture (and C or Java implementation) for the accepted\n range and handling of overflow. Python does not support single-\n precision floating point numbers; the savings in processor and\n memory usage that are usually the reason for using these is\n dwarfed by the overhead of using objects in Python, so there is\n no reason to complicate the language with two kinds of floating\n point numbers.\n\n ``numbers.Complex``\n These represent complex numbers as a pair of machine-level\n double precision floating point numbers. The same caveats apply\n as for floating point numbers. The real and imaginary parts of a\n complex number ``z`` can be retrieved through the read-only\n attributes ``z.real`` and ``z.imag``.\n\nSequences\n These represent finite ordered sets indexed by non-negative\n numbers. The built-in function ``len()`` returns the number of\n items of a sequence. When the length of a sequence is *n*, the\n index set contains the numbers 0, 1, ..., *n*-1. Item *i* of\n sequence *a* is selected by ``a[i]``.\n\n Sequences also support slicing: ``a[i:j]`` selects all items with\n index *k* such that *i* ``<=`` *k* ``<`` *j*. When used as an\n expression, a slice is a sequence of the same type. This implies\n that the index set is renumbered so that it starts at 0.\n\n Some sequences also support "extended slicing" with a third "step"\n parameter: ``a[i:j:k]`` selects all items of *a* with index *x*\n where ``x = i + n*k``, *n* ``>=`` ``0`` and *i* ``<=`` *x* ``<``\n *j*.\n\n Sequences are distinguished according to their mutability:\n\n Immutable sequences\n An object of an immutable sequence type cannot change once it is\n created. (If the object contains references to other objects,\n these other objects may be mutable and may be changed; however,\n the collection of objects directly referenced by an immutable\n object cannot change.)\n\n The following types are immutable sequences:\n\n Strings\n The items of a string are characters. There is no separate\n character type; a character is represented by a string of one\n item. Characters represent (at least) 8-bit bytes. The\n built-in functions ``chr()`` and ``ord()`` convert between\n characters and nonnegative integers representing the byte\n values. Bytes with the values 0-127 usually represent the\n corresponding ASCII values, but the interpretation of values\n is up to the program. The string data type is also used to\n represent arrays of bytes, e.g., to hold data read from a\n file.\n\n (On systems whose native character set is not ASCII, strings\n may use EBCDIC in their internal representation, provided the\n functions ``chr()`` and ``ord()`` implement a mapping between\n ASCII and EBCDIC, and string comparison preserves the ASCII\n order. Or perhaps someone can propose a better rule?)\n\n Unicode\n The items of a Unicode object are Unicode code units. A\n Unicode code unit is represented by a Unicode object of one\n item and can hold either a 16-bit or 32-bit value\n representing a Unicode ordinal (the maximum value for the\n ordinal is given in ``sys.maxunicode``, and depends on how\n Python is configured at compile time). Surrogate pairs may\n be present in the Unicode object, and will be reported as two\n separate items. The built-in functions ``unichr()`` and\n ``ord()`` convert between code units and nonnegative integers\n representing the Unicode ordinals as defined in the Unicode\n Standard 3.0. Conversion from and to other encodings are\n possible through the Unicode method ``encode()`` and the\n built-in function ``unicode()``.\n\n Tuples\n The items of a tuple are arbitrary Python objects. Tuples of\n two or more items are formed by comma-separated lists of\n expressions. A tuple of one item (a \'singleton\') can be\n formed by affixing a comma to an expression (an expression by\n itself does not create a tuple, since parentheses must be\n usable for grouping of expressions). An empty tuple can be\n formed by an empty pair of parentheses.\n\n Mutable sequences\n Mutable sequences can be changed after they are created. The\n subscription and slicing notations can be used as the target of\n assignment and ``del`` (delete) statements.\n\n There are currently two intrinsic mutable sequence types:\n\n Lists\n The items of a list are arbitrary Python objects. Lists are\n formed by placing a comma-separated list of expressions in\n square brackets. (Note that there are no special cases needed\n to form lists of length 0 or 1.)\n\n Byte Arrays\n A bytearray object is a mutable array. They are created by\n the built-in ``bytearray()`` constructor. Aside from being\n mutable (and hence unhashable), byte arrays otherwise provide\n the same interface and functionality as immutable bytes\n objects.\n\n The extension module ``array`` provides an additional example of\n a mutable sequence type.\n\nSet types\n These represent unordered, finite sets of unique, immutable\n objects. As such, they cannot be indexed by any subscript. However,\n they can be iterated over, and the built-in function ``len()``\n returns the number of items in a set. Common uses for sets are fast\n membership testing, removing duplicates from a sequence, and\n computing mathematical operations such as intersection, union,\n difference, and symmetric difference.\n\n For set elements, the same immutability rules apply as for\n dictionary keys. Note that numeric types obey the normal rules for\n numeric comparison: if two numbers compare equal (e.g., ``1`` and\n ``1.0``), only one of them can be contained in a set.\n\n There are currently two intrinsic set types:\n\n Sets\n These represent a mutable set. They are created by the built-in\n ``set()`` constructor and can be modified afterwards by several\n methods, such as ``add()``.\n\n Frozen sets\n These represent an immutable set. They are created by the\n built-in ``frozenset()`` constructor. As a frozenset is\n immutable and *hashable*, it can be used again as an element of\n another set, or as a dictionary key.\n\nMappings\n These represent finite sets of objects indexed by arbitrary index\n sets. The subscript notation ``a[k]`` selects the item indexed by\n ``k`` from the mapping ``a``; this can be used in expressions and\n as the target of assignments or ``del`` statements. The built-in\n function ``len()`` returns the number of items in a mapping.\n\n There is currently a single intrinsic mapping type:\n\n Dictionaries\n These represent finite sets of objects indexed by nearly\n arbitrary values. The only types of values not acceptable as\n keys are values containing lists or dictionaries or other\n mutable types that are compared by value rather than by object\n identity, the reason being that the efficient implementation of\n dictionaries requires a key\'s hash value to remain constant.\n Numeric types used for keys obey the normal rules for numeric\n comparison: if two numbers compare equal (e.g., ``1`` and\n ``1.0``) then they can be used interchangeably to index the same\n dictionary entry.\n\n Dictionaries are mutable; they can be created by the ``{...}``\n notation (see section *Dictionary displays*).\n\n The extension modules ``dbm``, ``gdbm``, and ``bsddb`` provide\n additional examples of mapping types.\n\nCallable types\n These are the types to which the function call operation (see\n section *Calls*) can be applied:\n\n User-defined functions\n A user-defined function object is created by a function\n definition (see section *Function definitions*). It should be\n called with an argument list containing the same number of items\n as the function\'s formal parameter list.\n\n Special attributes:\n\n +-------------------------+---------------------------------+-------------+\n | Attribute | Meaning | |\n +=========================+=================================+=============+\n | ``func_doc`` | The function\'s documentation | Writable |\n | | string, or ``None`` if | |\n | | unavailable | |\n +-------------------------+---------------------------------+-------------+\n | ``__doc__`` | Another way of spelling | Writable |\n | | ``func_doc`` | |\n +-------------------------+---------------------------------+-------------+\n | ``func_name`` | The function\'s name | Writable |\n +-------------------------+---------------------------------+-------------+\n | ``__name__`` | Another way of spelling | Writable |\n | | ``func_name`` | |\n +-------------------------+---------------------------------+-------------+\n | ``__module__`` | The name of the module the | Writable |\n | | function was defined in, or | |\n | | ``None`` if unavailable. | |\n +-------------------------+---------------------------------+-------------+\n | ``func_defaults`` | A tuple containing default | Writable |\n | | argument values for those | |\n | | arguments that have defaults, | |\n | | or ``None`` if no arguments | |\n | | have a default value | |\n +-------------------------+---------------------------------+-------------+\n | ``func_code`` | The code object representing | Writable |\n | | the compiled function body. | |\n +-------------------------+---------------------------------+-------------+\n | ``func_globals`` | A reference to the dictionary | Read-only |\n | | that holds the function\'s | |\n | | global variables --- the global | |\n | | namespace of the module in | |\n | | which the function was defined. | |\n +-------------------------+---------------------------------+-------------+\n | ``func_dict`` | The namespace supporting | Writable |\n | | arbitrary function attributes. | |\n +-------------------------+---------------------------------+-------------+\n | ``func_closure`` | ``None`` or a tuple of cells | Read-only |\n | | that contain bindings for the | |\n | | function\'s free variables. | |\n +-------------------------+---------------------------------+-------------+\n\n Most of the attributes labelled "Writable" check the type of the\n assigned value.\n\n Changed in version 2.4: ``func_name`` is now writable.\n\n Function objects also support getting and setting arbitrary\n attributes, which can be used, for example, to attach metadata\n to functions. Regular attribute dot-notation is used to get and\n set such attributes. *Note that the current implementation only\n supports function attributes on user-defined functions. Function\n attributes on built-in functions may be supported in the\n future.*\n\n Additional information about a function\'s definition can be\n retrieved from its code object; see the description of internal\n types below.\n\n User-defined methods\n A user-defined method object combines a class, a class instance\n (or ``None``) and any callable object (normally a user-defined\n function).\n\n Special read-only attributes: ``im_self`` is the class instance\n object, ``im_func`` is the function object; ``im_class`` is the\n class of ``im_self`` for bound methods or the class that asked\n for the method for unbound methods; ``__doc__`` is the method\'s\n documentation (same as ``im_func.__doc__``); ``__name__`` is the\n method name (same as ``im_func.__name__``); ``__module__`` is\n the name of the module the method was defined in, or ``None`` if\n unavailable.\n\n Changed in version 2.2: ``im_self`` used to refer to the class\n that defined the method.\n\n Changed in version 2.6: For 3.0 forward-compatibility,\n ``im_func`` is also available as ``__func__``, and ``im_self``\n as ``__self__``.\n\n Methods also support accessing (but not setting) the arbitrary\n function attributes on the underlying function object.\n\n User-defined method objects may be created when getting an\n attribute of a class (perhaps via an instance of that class), if\n that attribute is a user-defined function object, an unbound\n user-defined method object, or a class method object. When the\n attribute is a user-defined method object, a new method object\n is only created if the class from which it is being retrieved is\n the same as, or a derived class of, the class stored in the\n original method object; otherwise, the original method object is\n used as it is.\n\n When a user-defined method object is created by retrieving a\n user-defined function object from a class, its ``im_self``\n attribute is ``None`` and the method object is said to be\n unbound. When one is created by retrieving a user-defined\n function object from a class via one of its instances, its\n ``im_self`` attribute is the instance, and the method object is\n said to be bound. In either case, the new method\'s ``im_class``\n attribute is the class from which the retrieval takes place, and\n its ``im_func`` attribute is the original function object.\n\n When a user-defined method object is created by retrieving\n another method object from a class or instance, the behaviour is\n the same as for a function object, except that the ``im_func``\n attribute of the new instance is not the original method object\n but its ``im_func`` attribute.\n\n When a user-defined method object is created by retrieving a\n class method object from a class or instance, its ``im_self``\n attribute is the class itself (the same as the ``im_class``\n attribute), and its ``im_func`` attribute is the function object\n underlying the class method.\n\n When an unbound user-defined method object is called, the\n underlying function (``im_func``) is called, with the\n restriction that the first argument must be an instance of the\n proper class (``im_class``) or of a derived class thereof.\n\n When a bound user-defined method object is called, the\n underlying function (``im_func``) is called, inserting the class\n instance (``im_self``) in front of the argument list. For\n instance, when ``C`` is a class which contains a definition for\n a function ``f()``, and ``x`` is an instance of ``C``, calling\n ``x.f(1)`` is equivalent to calling ``C.f(x, 1)``.\n\n When a user-defined method object is derived from a class method\n object, the "class instance" stored in ``im_self`` will actually\n be the class itself, so that calling either ``x.f(1)`` or\n ``C.f(1)`` is equivalent to calling ``f(C,1)`` where ``f`` is\n the underlying function.\n\n Note that the transformation from function object to (unbound or\n bound) method object happens each time the attribute is\n retrieved from the class or instance. In some cases, a fruitful\n optimization is to assign the attribute to a local variable and\n call that local variable. Also notice that this transformation\n only happens for user-defined functions; other callable objects\n (and all non-callable objects) are retrieved without\n transformation. It is also important to note that user-defined\n functions which are attributes of a class instance are not\n converted to bound methods; this *only* happens when the\n function is an attribute of the class.\n\n Generator functions\n A function or method which uses the ``yield`` statement (see\n section *The yield statement*) is called a *generator function*.\n Such a function, when called, always returns an iterator object\n which can be used to execute the body of the function: calling\n the iterator\'s ``next()`` method will cause the function to\n execute until it provides a value using the ``yield`` statement.\n When the function executes a ``return`` statement or falls off\n the end, a ``StopIteration`` exception is raised and the\n iterator will have reached the end of the set of values to be\n returned.\n\n Built-in functions\n A built-in function object is a wrapper around a C function.\n Examples of built-in functions are ``len()`` and ``math.sin()``\n (``math`` is a standard built-in module). The number and type of\n the arguments are determined by the C function. Special read-\n only attributes: ``__doc__`` is the function\'s documentation\n string, or ``None`` if unavailable; ``__name__`` is the\n function\'s name; ``__self__`` is set to ``None`` (but see the\n next item); ``__module__`` is the name of the module the\n function was defined in or ``None`` if unavailable.\n\n Built-in methods\n This is really a different disguise of a built-in function, this\n time containing an object passed to the C function as an\n implicit extra argument. An example of a built-in method is\n ``alist.append()``, assuming *alist* is a list object. In this\n case, the special read-only attribute ``__self__`` is set to the\n object denoted by *list*.\n\n Class Types\n Class types, or "new-style classes," are callable. These\n objects normally act as factories for new instances of\n themselves, but variations are possible for class types that\n override ``__new__()``. The arguments of the call are passed to\n ``__new__()`` and, in the typical case, to ``__init__()`` to\n initialize the new instance.\n\n Classic Classes\n Class objects are described below. When a class object is\n called, a new class instance (also described below) is created\n and returned. This implies a call to the class\'s ``__init__()``\n method if it has one. Any arguments are passed on to the\n ``__init__()`` method. If there is no ``__init__()`` method,\n the class must be called without arguments.\n\n Class instances\n Class instances are described below. Class instances are\n callable only when the class has a ``__call__()`` method;\n ``x(arguments)`` is a shorthand for ``x.__call__(arguments)``.\n\nModules\n Modules are imported by the ``import`` statement (see section *The\n import statement*). A module object has a namespace implemented by\n a dictionary object (this is the dictionary referenced by the\n func_globals attribute of functions defined in the module).\n Attribute references are translated to lookups in this dictionary,\n e.g., ``m.x`` is equivalent to ``m.__dict__["x"]``. A module object\n does not contain the code object used to initialize the module\n (since it isn\'t needed once the initialization is done).\n\n Attribute assignment updates the module\'s namespace dictionary,\n e.g., ``m.x = 1`` is equivalent to ``m.__dict__["x"] = 1``.\n\n Special read-only attribute: ``__dict__`` is the module\'s namespace\n as a dictionary object.\n\n Predefined (writable) attributes: ``__name__`` is the module\'s\n name; ``__doc__`` is the module\'s documentation string, or ``None``\n if unavailable; ``__file__`` is the pathname of the file from which\n the module was loaded, if it was loaded from a file. The\n ``__file__`` attribute is not present for C modules that are\n statically linked into the interpreter; for extension modules\n loaded dynamically from a shared library, it is the pathname of the\n shared library file.\n\nClasses\n Both class types (new-style classes) and class objects (old-\n style/classic classes) are typically created by class definitions\n (see section *Class definitions*). A class has a namespace\n implemented by a dictionary object. Class attribute references are\n translated to lookups in this dictionary, e.g., ``C.x`` is\n translated to ``C.__dict__["x"]`` (although for new-style classes\n in particular there are a number of hooks which allow for other\n means of locating attributes). When the attribute name is not found\n there, the attribute search continues in the base classes. For\n old-style classes, the search is depth-first, left-to-right in the\n order of occurrence in the base class list. New-style classes use\n the more complex C3 method resolution order which behaves correctly\n even in the presence of \'diamond\' inheritance structures where\n there are multiple inheritance paths leading back to a common\n ancestor. Additional details on the C3 MRO used by new-style\n classes can be found in the documentation accompanying the 2.3\n release at http://www.python.org/download/releases/2.3/mro/.\n\n When a class attribute reference (for class ``C``, say) would yield\n a user-defined function object or an unbound user-defined method\n object whose associated class is either ``C`` or one of its base\n classes, it is transformed into an unbound user-defined method\n object whose ``im_class`` attribute is ``C``. When it would yield a\n class method object, it is transformed into a bound user-defined\n method object whose ``im_class`` and ``im_self`` attributes are\n both ``C``. When it would yield a static method object, it is\n transformed into the object wrapped by the static method object.\n See section *Implementing Descriptors* for another way in which\n attributes retrieved from a class may differ from those actually\n contained in its ``__dict__`` (note that only new-style classes\n support descriptors).\n\n Class attribute assignments update the class\'s dictionary, never\n the dictionary of a base class.\n\n A class object can be called (see above) to yield a class instance\n (see below).\n\n Special attributes: ``__name__`` is the class name; ``__module__``\n is the module name in which the class was defined; ``__dict__`` is\n the dictionary containing the class\'s namespace; ``__bases__`` is a\n tuple (possibly empty or a singleton) containing the base classes,\n in the order of their occurrence in the base class list;\n ``__doc__`` is the class\'s documentation string, or None if\n undefined.\n\nClass instances\n A class instance is created by calling a class object (see above).\n A class instance has a namespace implemented as a dictionary which\n is the first place in which attribute references are searched.\n When an attribute is not found there, and the instance\'s class has\n an attribute by that name, the search continues with the class\n attributes. If a class attribute is found that is a user-defined\n function object or an unbound user-defined method object whose\n associated class is the class (call it ``C``) of the instance for\n which the attribute reference was initiated or one of its bases, it\n is transformed into a bound user-defined method object whose\n ``im_class`` attribute is ``C`` and whose ``im_self`` attribute is\n the instance. Static method and class method objects are also\n transformed, as if they had been retrieved from class ``C``; see\n above under "Classes". See section *Implementing Descriptors* for\n another way in which attributes of a class retrieved via its\n instances may differ from the objects actually stored in the\n class\'s ``__dict__``. If no class attribute is found, and the\n object\'s class has a ``__getattr__()`` method, that is called to\n satisfy the lookup.\n\n Attribute assignments and deletions update the instance\'s\n dictionary, never a class\'s dictionary. If the class has a\n ``__setattr__()`` or ``__delattr__()`` method, this is called\n instead of updating the instance dictionary directly.\n\n Class instances can pretend to be numbers, sequences, or mappings\n if they have methods with certain special names. See section\n *Special method names*.\n\n Special attributes: ``__dict__`` is the attribute dictionary;\n ``__class__`` is the instance\'s class.\n\nFiles\n A file object represents an open file. File objects are created by\n the ``open()`` built-in function, and also by ``os.popen()``,\n ``os.fdopen()``, and the ``makefile()`` method of socket objects\n (and perhaps by other functions or methods provided by extension\n modules). The objects ``sys.stdin``, ``sys.stdout`` and\n ``sys.stderr`` are initialized to file objects corresponding to the\n interpreter\'s standard input, output and error streams. See *File\n Objects* for complete documentation of file objects.\n\nInternal types\n A few types used internally by the interpreter are exposed to the\n user. Their definitions may change with future versions of the\n interpreter, but they are mentioned here for completeness.\n\n Code objects\n Code objects represent *byte-compiled* executable Python code,\n or *bytecode*. The difference between a code object and a\n function object is that the function object contains an explicit\n reference to the function\'s globals (the module in which it was\n defined), while a code object contains no context; also the\n default argument values are stored in the function object, not\n in the code object (because they represent values calculated at\n run-time). Unlike function objects, code objects are immutable\n and contain no references (directly or indirectly) to mutable\n objects.\n\n Special read-only attributes: ``co_name`` gives the function\n name; ``co_argcount`` is the number of positional arguments\n (including arguments with default values); ``co_nlocals`` is the\n number of local variables used by the function (including\n arguments); ``co_varnames`` is a tuple containing the names of\n the local variables (starting with the argument names);\n ``co_cellvars`` is a tuple containing the names of local\n variables that are referenced by nested functions;\n ``co_freevars`` is a tuple containing the names of free\n variables; ``co_code`` is a string representing the sequence of\n bytecode instructions; ``co_consts`` is a tuple containing the\n literals used by the bytecode; ``co_names`` is a tuple\n containing the names used by the bytecode; ``co_filename`` is\n the filename from which the code was compiled;\n ``co_firstlineno`` is the first line number of the function;\n ``co_lnotab`` is a string encoding the mapping from bytecode\n offsets to line numbers (for details see the source code of the\n interpreter); ``co_stacksize`` is the required stack size\n (including local variables); ``co_flags`` is an integer encoding\n a number of flags for the interpreter.\n\n The following flag bits are defined for ``co_flags``: bit\n ``0x04`` is set if the function uses the ``*arguments`` syntax\n to accept an arbitrary number of positional arguments; bit\n ``0x08`` is set if the function uses the ``**keywords`` syntax\n to accept arbitrary keyword arguments; bit ``0x20`` is set if\n the function is a generator.\n\n Future feature declarations (``from __future__ import\n division``) also use bits in ``co_flags`` to indicate whether a\n code object was compiled with a particular feature enabled: bit\n ``0x2000`` is set if the function was compiled with future\n division enabled; bits ``0x10`` and ``0x1000`` were used in\n earlier versions of Python.\n\n Other bits in ``co_flags`` are reserved for internal use.\n\n If a code object represents a function, the first item in\n ``co_consts`` is the documentation string of the function, or\n ``None`` if undefined.\n\n Frame objects\n Frame objects represent execution frames. They may occur in\n traceback objects (see below).\n\n Special read-only attributes: ``f_back`` is to the previous\n stack frame (towards the caller), or ``None`` if this is the\n bottom stack frame; ``f_code`` is the code object being executed\n in this frame; ``f_locals`` is the dictionary used to look up\n local variables; ``f_globals`` is used for global variables;\n ``f_builtins`` is used for built-in (intrinsic) names;\n ``f_restricted`` is a flag indicating whether the function is\n executing in restricted execution mode; ``f_lasti`` gives the\n precise instruction (this is an index into the bytecode string\n of the code object).\n\n Special writable attributes: ``f_trace``, if not ``None``, is a\n function called at the start of each source code line (this is\n used by the debugger); ``f_exc_type``, ``f_exc_value``,\n ``f_exc_traceback`` represent the last exception raised in the\n parent frame provided another exception was ever raised in the\n current frame (in all other cases they are None); ``f_lineno``\n is the current line number of the frame --- writing to this from\n within a trace function jumps to the given line (only for the\n bottom-most frame). A debugger can implement a Jump command\n (aka Set Next Statement) by writing to f_lineno.\n\n Traceback objects\n Traceback objects represent a stack trace of an exception. A\n traceback object is created when an exception occurs. When the\n search for an exception handler unwinds the execution stack, at\n each unwound level a traceback object is inserted in front of\n the current traceback. When an exception handler is entered,\n the stack trace is made available to the program. (See section\n *The try statement*.) It is accessible as ``sys.exc_traceback``,\n and also as the third item of the tuple returned by\n ``sys.exc_info()``. The latter is the preferred interface,\n since it works correctly when the program is using multiple\n threads. When the program contains no suitable handler, the\n stack trace is written (nicely formatted) to the standard error\n stream; if the interpreter is interactive, it is also made\n available to the user as ``sys.last_traceback``.\n\n Special read-only attributes: ``tb_next`` is the next level in\n the stack trace (towards the frame where the exception\n occurred), or ``None`` if there is no next level; ``tb_frame``\n points to the execution frame of the current level;\n ``tb_lineno`` gives the line number where the exception\n occurred; ``tb_lasti`` indicates the precise instruction. The\n line number and last instruction in the traceback may differ\n from the line number of its frame object if the exception\n occurred in a ``try`` statement with no matching except clause\n or with a finally clause.\n\n Slice objects\n Slice objects are used to represent slices when *extended slice\n syntax* is used. This is a slice using two colons, or multiple\n slices or ellipses separated by commas, e.g., ``a[i:j:step]``,\n ``a[i:j, k:l]``, or ``a[..., i:j]``. They are also created by\n the built-in ``slice()`` function.\n\n Special read-only attributes: ``start`` is the lower bound;\n ``stop`` is the upper bound; ``step`` is the step value; each is\n ``None`` if omitted. These attributes can have any type.\n\n Slice objects support one method:\n\n slice.indices(self, length)\n\n This method takes a single integer argument *length* and\n computes information about the extended slice that the slice\n object would describe if applied to a sequence of *length*\n items. It returns a tuple of three integers; respectively\n these are the *start* and *stop* indices and the *step* or\n stride length of the slice. Missing or out-of-bounds indices\n are handled in a manner consistent with regular slices.\n\n New in version 2.3.\n\n Static method objects\n Static method objects provide a way of defeating the\n transformation of function objects to method objects described\n above. A static method object is a wrapper around any other\n object, usually a user-defined method object. When a static\n method object is retrieved from a class or a class instance, the\n object actually returned is the wrapped object, which is not\n subject to any further transformation. Static method objects are\n not themselves callable, although the objects they wrap usually\n are. Static method objects are created by the built-in\n ``staticmethod()`` constructor.\n\n Class method objects\n A class method object, like a static method object, is a wrapper\n around another object that alters the way in which that object\n is retrieved from classes and class instances. The behaviour of\n class method objects upon such retrieval is described above,\n under "User-defined methods". Class method objects are created\n by the built-in ``classmethod()`` constructor.\n', 'typesfunctions': u'\nFunctions\n*********\n\nFunction objects are created by function definitions. The only\noperation on a function object is to call it: ``func(argument-list)``.\n\nThere are really two flavors of function objects: built-in functions\nand user-defined functions. Both support the same operation (to call\nthe function), but the implementation is different, hence the\ndifferent object types.\n\nSee *Function definitions* for more information.\n', - 'typesmapping': u'\nMapping Types --- ``dict``\n**************************\n\nA *mapping* object maps *hashable* values to arbitrary objects.\nMappings are mutable objects. There is currently only one standard\nmapping type, the *dictionary*. (For other containers see the built\nin ``list``, ``set``, and ``tuple`` classes, and the ``collections``\nmodule.)\n\nA dictionary\'s keys are *almost* arbitrary values. Values that are\nnot *hashable*, that is, values containing lists, dictionaries or\nother mutable types (that are compared by value rather than by object\nidentity) may not be used as keys. Numeric types used for keys obey\nthe normal rules for numeric comparison: if two numbers compare equal\n(such as ``1`` and ``1.0``) then they can be used interchangeably to\nindex the same dictionary entry. (Note however, that since computers\nstore floating-point numbers as approximations it is usually unwise to\nuse them as dictionary keys.)\n\nDictionaries can be created by placing a comma-separated list of\n``key: value`` pairs within braces, for example: ``{\'jack\': 4098,\n\'sjoerd\': 4127}`` or ``{4098: \'jack\', 4127: \'sjoerd\'}``, or by the\n``dict`` constructor.\n\nclass class dict([arg])\n\n Return a new dictionary initialized from an optional positional\n argument or from a set of keyword arguments. If no arguments are\n given, return a new empty dictionary. If the positional argument\n *arg* is a mapping object, return a dictionary mapping the same\n keys to the same values as does the mapping object. Otherwise the\n positional argument must be a sequence, a container that supports\n iteration, or an iterator object. The elements of the argument\n must each also be of one of those kinds, and each must in turn\n contain exactly two objects. The first is used as a key in the new\n dictionary, and the second as the key\'s value. If a given key is\n seen more than once, the last value associated with it is retained\n in the new dictionary.\n\n If keyword arguments are given, the keywords themselves with their\n associated values are added as items to the dictionary. If a key is\n specified both in the positional argument and as a keyword\n argument, the value associated with the keyword is retained in the\n dictionary. For example, these all return a dictionary equal to\n ``{"one": 2, "two": 3}``:\n\n * ``dict(one=2, two=3)``\n\n * ``dict({\'one\': 2, \'two\': 3})``\n\n * ``dict(zip((\'one\', \'two\'), (2, 3)))``\n\n * ``dict([[\'two\', 3], [\'one\', 2]])``\n\n The first example only works for keys that are valid Python\n identifiers; the others work with any valid keys.\n\n New in version 2.2.\n\n Changed in version 2.3: Support for building a dictionary from\n keyword arguments added.\n\n These are the operations that dictionaries support (and therefore,\n custom mapping types should support too):\n\n len(d)\n\n Return the number of items in the dictionary *d*.\n\n d[key]\n\n Return the item of *d* with key *key*. Raises a ``KeyError`` if\n *key* is not in the map.\n\n New in version 2.5: If a subclass of dict defines a method\n ``__missing__()``, if the key *key* is not present, the\n ``d[key]`` operation calls that method with the key *key* as\n argument. The ``d[key]`` operation then returns or raises\n whatever is returned or raised by the ``__missing__(key)`` call\n if the key is not present. No other operations or methods invoke\n ``__missing__()``. If ``__missing__()`` is not defined,\n ``KeyError`` is raised. ``__missing__()`` must be a method; it\n cannot be an instance variable. For an example, see\n ``collections.defaultdict``.\n\n d[key] = value\n\n Set ``d[key]`` to *value*.\n\n del d[key]\n\n Remove ``d[key]`` from *d*. Raises a ``KeyError`` if *key* is\n not in the map.\n\n key in d\n\n Return ``True`` if *d* has a key *key*, else ``False``.\n\n New in version 2.2.\n\n key not in d\n\n Equivalent to ``not key in d``.\n\n New in version 2.2.\n\n iter(d)\n\n Return an iterator over the keys of the dictionary. This is a\n shortcut for ``iterkeys()``.\n\n clear()\n\n Remove all items from the dictionary.\n\n copy()\n\n Return a shallow copy of the dictionary.\n\n fromkeys(seq[, value])\n\n Create a new dictionary with keys from *seq* and values set to\n *value*.\n\n ``fromkeys()`` is a class method that returns a new dictionary.\n *value* defaults to ``None``.\n\n New in version 2.3.\n\n get(key[, default])\n\n Return the value for *key* if *key* is in the dictionary, else\n *default*. If *default* is not given, it defaults to ``None``,\n so that this method never raises a ``KeyError``.\n\n has_key(key)\n\n Test for the presence of *key* in the dictionary. ``has_key()``\n is deprecated in favor of ``key in d``.\n\n items()\n\n Return a copy of the dictionary\'s list of ``(key, value)``\n pairs.\n\n Note: Keys and values are listed in an arbitrary order which is non-\n random, varies across Python implementations, and depends on\n the dictionary\'s history of insertions and deletions. If\n ``items()``, ``keys()``, ``values()``, ``iteritems()``,\n ``iterkeys()``, and ``itervalues()`` are called with no\n intervening modifications to the dictionary, the lists will\n directly correspond. This allows the creation of ``(value,\n key)`` pairs using ``zip()``: ``pairs = zip(d.values(),\n d.keys())``. The same relationship holds for the\n ``iterkeys()`` and ``itervalues()`` methods: ``pairs =\n zip(d.itervalues(), d.iterkeys())`` provides the same value\n for ``pairs``. Another way to create the same list is ``pairs\n = [(v, k) for (k, v) in d.iteritems()]``.\n\n iteritems()\n\n Return an iterator over the dictionary\'s ``(key, value)`` pairs.\n See the note for ``dict.items()``.\n\n Using ``iteritems()`` while adding or deleting entries in the\n dictionary may raise a ``RuntimeError`` or fail to iterate over\n all entries.\n\n New in version 2.2.\n\n iterkeys()\n\n Return an iterator over the dictionary\'s keys. See the note for\n ``dict.items()``.\n\n Using ``iterkeys()`` while adding or deleting entries in the\n dictionary may raise a ``RuntimeError`` or fail to iterate over\n all entries.\n\n New in version 2.2.\n\n itervalues()\n\n Return an iterator over the dictionary\'s values. See the note\n for ``dict.items()``.\n\n Using ``itervalues()`` while adding or deleting entries in the\n dictionary may raise a ``RuntimeError`` or fail to iterate over\n all entries.\n\n New in version 2.2.\n\n keys()\n\n Return a copy of the dictionary\'s list of keys. See the note\n for ``dict.items()``.\n\n pop(key[, default])\n\n If *key* is in the dictionary, remove it and return its value,\n else return *default*. If *default* is not given and *key* is\n not in the dictionary, a ``KeyError`` is raised.\n\n New in version 2.3.\n\n popitem()\n\n Remove and return an arbitrary ``(key, value)`` pair from the\n dictionary.\n\n ``popitem()`` is useful to destructively iterate over a\n dictionary, as often used in set algorithms. If the dictionary\n is empty, calling ``popitem()`` raises a ``KeyError``.\n\n setdefault(key[, default])\n\n If *key* is in the dictionary, return its value. If not, insert\n *key* with a value of *default* and return *default*. *default*\n defaults to ``None``.\n\n update([other])\n\n Update the dictionary with the key/value pairs from *other*,\n overwriting existing keys. Return ``None``.\n\n ``update()`` accepts either another dictionary object or an\n iterable of key/value pairs (as a tuple or other iterable of\n length two). If keyword arguments are specified, the dictionary\n is then is updated with those key/value pairs: ``d.update(red=1,\n blue=2)``.\n\n Changed in version 2.4: Allowed the argument to be an iterable\n of key/value pairs and allowed keyword arguments.\n\n values()\n\n Return a copy of the dictionary\'s list of values. See the note\n for ``dict.items()``.\n', + 'typesmapping': u'\nMapping Types --- ``dict``\n**************************\n\nA *mapping* object maps *hashable* values to arbitrary objects.\nMappings are mutable objects. There is currently only one standard\nmapping type, the *dictionary*. (For other containers see the built\nin ``list``, ``set``, and ``tuple`` classes, and the ``collections``\nmodule.)\n\nA dictionary\'s keys are *almost* arbitrary values. Values that are\nnot *hashable*, that is, values containing lists, dictionaries or\nother mutable types (that are compared by value rather than by object\nidentity) may not be used as keys. Numeric types used for keys obey\nthe normal rules for numeric comparison: if two numbers compare equal\n(such as ``1`` and ``1.0``) then they can be used interchangeably to\nindex the same dictionary entry. (Note however, that since computers\nstore floating-point numbers as approximations it is usually unwise to\nuse them as dictionary keys.)\n\nDictionaries can be created by placing a comma-separated list of\n``key: value`` pairs within braces, for example: ``{\'jack\': 4098,\n\'sjoerd\': 4127}`` or ``{4098: \'jack\', 4127: \'sjoerd\'}``, or by the\n``dict`` constructor.\n\nclass class dict([arg])\n\n Return a new dictionary initialized from an optional positional\n argument or from a set of keyword arguments. If no arguments are\n given, return a new empty dictionary. If the positional argument\n *arg* is a mapping object, return a dictionary mapping the same\n keys to the same values as does the mapping object. Otherwise the\n positional argument must be a sequence, a container that supports\n iteration, or an iterator object. The elements of the argument\n must each also be of one of those kinds, and each must in turn\n contain exactly two objects. The first is used as a key in the new\n dictionary, and the second as the key\'s value. If a given key is\n seen more than once, the last value associated with it is retained\n in the new dictionary.\n\n If keyword arguments are given, the keywords themselves with their\n associated values are added as items to the dictionary. If a key is\n specified both in the positional argument and as a keyword\n argument, the value associated with the keyword is retained in the\n dictionary. For example, these all return a dictionary equal to\n ``{"one": 2, "two": 3}``:\n\n * ``dict(one=2, two=3)``\n\n * ``dict({\'one\': 2, \'two\': 3})``\n\n * ``dict(zip((\'one\', \'two\'), (2, 3)))``\n\n * ``dict([[\'two\', 3], [\'one\', 2]])``\n\n The first example only works for keys that are valid Python\n identifiers; the others work with any valid keys.\n\n New in version 2.2.\n\n Changed in version 2.3: Support for building a dictionary from\n keyword arguments added.\n\n These are the operations that dictionaries support (and therefore,\n custom mapping types should support too):\n\n len(d)\n\n Return the number of items in the dictionary *d*.\n\n d[key]\n\n Return the item of *d* with key *key*. Raises a ``KeyError`` if\n *key* is not in the map.\n\n New in version 2.5: If a subclass of dict defines a method\n ``__missing__()``, if the key *key* is not present, the\n ``d[key]`` operation calls that method with the key *key* as\n argument. The ``d[key]`` operation then returns or raises\n whatever is returned or raised by the ``__missing__(key)`` call\n if the key is not present. No other operations or methods invoke\n ``__missing__()``. If ``__missing__()`` is not defined,\n ``KeyError`` is raised. ``__missing__()`` must be a method; it\n cannot be an instance variable. For an example, see\n ``collections.defaultdict``.\n\n d[key] = value\n\n Set ``d[key]`` to *value*.\n\n del d[key]\n\n Remove ``d[key]`` from *d*. Raises a ``KeyError`` if *key* is\n not in the map.\n\n key in d\n\n Return ``True`` if *d* has a key *key*, else ``False``.\n\n New in version 2.2.\n\n key not in d\n\n Equivalent to ``not key in d``.\n\n New in version 2.2.\n\n iter(d)\n\n Return an iterator over the keys of the dictionary. This is a\n shortcut for ``iterkeys()``.\n\n clear()\n\n Remove all items from the dictionary.\n\n copy()\n\n Return a shallow copy of the dictionary.\n\n fromkeys(seq[, value])\n\n Create a new dictionary with keys from *seq* and values set to\n *value*.\n\n ``fromkeys()`` is a class method that returns a new dictionary.\n *value* defaults to ``None``.\n\n New in version 2.3.\n\n get(key[, default])\n\n Return the value for *key* if *key* is in the dictionary, else\n *default*. If *default* is not given, it defaults to ``None``,\n so that this method never raises a ``KeyError``.\n\n has_key(key)\n\n Test for the presence of *key* in the dictionary. ``has_key()``\n is deprecated in favor of ``key in d``.\n\n items()\n\n Return a copy of the dictionary\'s list of ``(key, value)``\n pairs.\n\n **CPython implementation detail:** Keys and values are listed in\n an arbitrary order which is non-random, varies across Python\n implementations, and depends on the dictionary\'s history of\n insertions and deletions.\n\n If ``items()``, ``keys()``, ``values()``, ``iteritems()``,\n ``iterkeys()``, and ``itervalues()`` are called with no\n intervening modifications to the dictionary, the lists will\n directly correspond. This allows the creation of ``(value,\n key)`` pairs using ``zip()``: ``pairs = zip(d.values(),\n d.keys())``. The same relationship holds for the ``iterkeys()``\n and ``itervalues()`` methods: ``pairs = zip(d.itervalues(),\n d.iterkeys())`` provides the same value for ``pairs``. Another\n way to create the same list is ``pairs = [(v, k) for (k, v) in\n d.iteritems()]``.\n\n iteritems()\n\n Return an iterator over the dictionary\'s ``(key, value)`` pairs.\n See the note for ``dict.items()``.\n\n Using ``iteritems()`` while adding or deleting entries in the\n dictionary may raise a ``RuntimeError`` or fail to iterate over\n all entries.\n\n New in version 2.2.\n\n iterkeys()\n\n Return an iterator over the dictionary\'s keys. See the note for\n ``dict.items()``.\n\n Using ``iterkeys()`` while adding or deleting entries in the\n dictionary may raise a ``RuntimeError`` or fail to iterate over\n all entries.\n\n New in version 2.2.\n\n itervalues()\n\n Return an iterator over the dictionary\'s values. See the note\n for ``dict.items()``.\n\n Using ``itervalues()`` while adding or deleting entries in the\n dictionary may raise a ``RuntimeError`` or fail to iterate over\n all entries.\n\n New in version 2.2.\n\n keys()\n\n Return a copy of the dictionary\'s list of keys. See the note\n for ``dict.items()``.\n\n pop(key[, default])\n\n If *key* is in the dictionary, remove it and return its value,\n else return *default*. If *default* is not given and *key* is\n not in the dictionary, a ``KeyError`` is raised.\n\n New in version 2.3.\n\n popitem()\n\n Remove and return an arbitrary ``(key, value)`` pair from the\n dictionary.\n\n ``popitem()`` is useful to destructively iterate over a\n dictionary, as often used in set algorithms. If the dictionary\n is empty, calling ``popitem()`` raises a ``KeyError``.\n\n setdefault(key[, default])\n\n If *key* is in the dictionary, return its value. If not, insert\n *key* with a value of *default* and return *default*. *default*\n defaults to ``None``.\n\n update([other])\n\n Update the dictionary with the key/value pairs from *other*,\n overwriting existing keys. Return ``None``.\n\n ``update()`` accepts either another dictionary object or an\n iterable of key/value pairs (as a tuple or other iterable of\n length two). If keyword arguments are specified, the dictionary\n is then updated with those key/value pairs: ``d.update(red=1,\n blue=2)``.\n\n Changed in version 2.4: Allowed the argument to be an iterable\n of key/value pairs and allowed keyword arguments.\n\n values()\n\n Return a copy of the dictionary\'s list of values. See the note\n for ``dict.items()``.\n', 'typesmethods': u"\nMethods\n*******\n\nMethods are functions that are called using the attribute notation.\nThere are two flavors: built-in methods (such as ``append()`` on\nlists) and class instance methods. Built-in methods are described\nwith the types that support them.\n\nThe implementation adds two special read-only attributes to class\ninstance methods: ``m.im_self`` is the object on which the method\noperates, and ``m.im_func`` is the function implementing the method.\nCalling ``m(arg-1, arg-2, ..., arg-n)`` is completely equivalent to\ncalling ``m.im_func(m.im_self, arg-1, arg-2, ..., arg-n)``.\n\nClass instance methods are either *bound* or *unbound*, referring to\nwhether the method was accessed through an instance or a class,\nrespectively. When a method is unbound, its ``im_self`` attribute\nwill be ``None`` and if called, an explicit ``self`` object must be\npassed as the first argument. In this case, ``self`` must be an\ninstance of the unbound method's class (or a subclass of that class),\notherwise a ``TypeError`` is raised.\n\nLike function objects, methods objects support getting arbitrary\nattributes. However, since method attributes are actually stored on\nthe underlying function object (``meth.im_func``), setting method\nattributes on either bound or unbound methods is disallowed.\nAttempting to set a method attribute results in a ``TypeError`` being\nraised. In order to set a method attribute, you need to explicitly\nset it on the underlying function object:\n\n class C:\n def method(self):\n pass\n\n c = C()\n c.method.im_func.whoami = 'my name is c'\n\nSee *The standard type hierarchy* for more information.\n", 'typesmodules': u"\nModules\n*******\n\nThe only special operation on a module is attribute access:\n``m.name``, where *m* is a module and *name* accesses a name defined\nin *m*'s symbol table. Module attributes can be assigned to. (Note\nthat the ``import`` statement is not, strictly speaking, an operation\non a module object; ``import foo`` does not require a module object\nnamed *foo* to exist, rather it requires an (external) *definition*\nfor a module named *foo* somewhere.)\n\nA special member of every module is ``__dict__``. This is the\ndictionary containing the module's symbol table. Modifying this\ndictionary will actually change the module's symbol table, but direct\nassignment to the ``__dict__`` attribute is not possible (you can\nwrite ``m.__dict__['a'] = 1``, which defines ``m.a`` to be ``1``, but\nyou can't write ``m.__dict__ = {}``). Modifying ``__dict__`` directly\nis not recommended.\n\nModules built into the interpreter are written like this: ````. If loaded from a file, they are written as\n````.\n", - 'typesseq': u'\nSequence Types --- ``str``, ``unicode``, ``list``, ``tuple``, ``buffer``, ``xrange``\n************************************************************************************\n\nThere are six sequence types: strings, Unicode strings, lists, tuples,\nbuffers, and xrange objects.\n\nFor other containers see the built in ``dict`` and ``set`` classes,\nand the ``collections`` module.\n\nString literals are written in single or double quotes: ``\'xyzzy\'``,\n``"frobozz"``. See *String literals* for more about string literals.\nUnicode strings are much like strings, but are specified in the syntax\nusing a preceding ``\'u\'`` character: ``u\'abc\'``, ``u"def"``. In\naddition to the functionality described here, there are also string-\nspecific methods described in the *String Methods* section. Lists are\nconstructed with square brackets, separating items with commas: ``[a,\nb, c]``. Tuples are constructed by the comma operator (not within\nsquare brackets), with or without enclosing parentheses, but an empty\ntuple must have the enclosing parentheses, such as ``a, b, c`` or\n``()``. A single item tuple must have a trailing comma, such as\n``(d,)``.\n\nBuffer objects are not directly supported by Python syntax, but can be\ncreated by calling the builtin function ``buffer()``. They don\'t\nsupport concatenation or repetition.\n\nObjects of type xrange are similar to buffers in that there is no\nspecific syntax to create them, but they are created using the\n``xrange()`` function. They don\'t support slicing, concatenation or\nrepetition, and using ``in``, ``not in``, ``min()`` or ``max()`` on\nthem is inefficient.\n\nMost sequence types support the following operations. The ``in`` and\n``not in`` operations have the same priorities as the comparison\noperations. The ``+`` and ``*`` operations have the same priority as\nthe corresponding numeric operations. [3] Additional methods are\nprovided for *Mutable Sequence Types*.\n\nThis table lists the sequence operations sorted in ascending priority\n(operations in the same box have the same priority). In the table,\n*s* and *t* are sequences of the same type; *n*, *i* and *j* are\nintegers:\n\n+--------------------+----------------------------------+------------+\n| Operation | Result | Notes |\n+====================+==================================+============+\n| ``x in s`` | ``True`` if an item of *s* is | (1) |\n| | equal to *x*, else ``False`` | |\n+--------------------+----------------------------------+------------+\n| ``x not in s`` | ``False`` if an item of *s* is | (1) |\n| | equal to *x*, else ``True`` | |\n+--------------------+----------------------------------+------------+\n| ``s + t`` | the concatenation of *s* and *t* | (6) |\n+--------------------+----------------------------------+------------+\n| ``s * n, n * s`` | *n* shallow copies of *s* | (2) |\n| | concatenated | |\n+--------------------+----------------------------------+------------+\n| ``s[i]`` | *i*\'th item of *s*, origin 0 | (3) |\n+--------------------+----------------------------------+------------+\n| ``s[i:j]`` | slice of *s* from *i* to *j* | (3)(4) |\n+--------------------+----------------------------------+------------+\n| ``s[i:j:k]`` | slice of *s* from *i* to *j* | (3)(5) |\n| | with step *k* | |\n+--------------------+----------------------------------+------------+\n| ``len(s)`` | length of *s* | |\n+--------------------+----------------------------------+------------+\n| ``min(s)`` | smallest item of *s* | |\n+--------------------+----------------------------------+------------+\n| ``max(s)`` | largest item of *s* | |\n+--------------------+----------------------------------+------------+\n\nSequence types also support comparisons. In particular, tuples and\nlists are compared lexicographically by comparing corresponding\nelements. This means that to compare equal, every element must compare\nequal and the two sequences must be of the same type and have the same\nlength. (For full details see *Comparisons* in the language\nreference.)\n\nNotes:\n\n1. When *s* is a string or Unicode string object the ``in`` and ``not\n in`` operations act like a substring test. In Python versions\n before 2.3, *x* had to be a string of length 1. In Python 2.3 and\n beyond, *x* may be a string of any length.\n\n2. Values of *n* less than ``0`` are treated as ``0`` (which yields an\n empty sequence of the same type as *s*). Note also that the copies\n are shallow; nested structures are not copied. This often haunts\n new Python programmers; consider:\n\n >>> lists = [[]] * 3\n >>> lists\n [[], [], []]\n >>> lists[0].append(3)\n >>> lists\n [[3], [3], [3]]\n\n What has happened is that ``[[]]`` is a one-element list containing\n an empty list, so all three elements of ``[[]] * 3`` are (pointers\n to) this single empty list. Modifying any of the elements of\n ``lists`` modifies this single list. You can create a list of\n different lists this way:\n\n >>> lists = [[] for i in range(3)]\n >>> lists[0].append(3)\n >>> lists[1].append(5)\n >>> lists[2].append(7)\n >>> lists\n [[3], [5], [7]]\n\n3. If *i* or *j* is negative, the index is relative to the end of the\n string: ``len(s) + i`` or ``len(s) + j`` is substituted. But note\n that ``-0`` is still ``0``.\n\n4. The slice of *s* from *i* to *j* is defined as the sequence of\n items with index *k* such that ``i <= k < j``. If *i* or *j* is\n greater than ``len(s)``, use ``len(s)``. If *i* is omitted or\n ``None``, use ``0``. If *j* is omitted or ``None``, use\n ``len(s)``. If *i* is greater than or equal to *j*, the slice is\n empty.\n\n5. The slice of *s* from *i* to *j* with step *k* is defined as the\n sequence of items with index ``x = i + n*k`` such that ``0 <= n <\n (j-i)/k``. In other words, the indices are ``i``, ``i+k``,\n ``i+2*k``, ``i+3*k`` and so on, stopping when *j* is reached (but\n never including *j*). If *i* or *j* is greater than ``len(s)``,\n use ``len(s)``. If *i* or *j* are omitted or ``None``, they become\n "end" values (which end depends on the sign of *k*). Note, *k*\n cannot be zero. If *k* is ``None``, it is treated like ``1``.\n\n6. If *s* and *t* are both strings, some Python implementations such\n as CPython can usually perform an in-place optimization for\n assignments of the form ``s=s+t`` or ``s+=t``. When applicable,\n this optimization makes quadratic run-time much less likely. This\n optimization is both version and implementation dependent. For\n performance sensitive code, it is preferable to use the\n ``str.join()`` method which assures consistent linear concatenation\n performance across versions and implementations.\n\n Changed in version 2.4: Formerly, string concatenation never\n occurred in-place.\n\n\nString Methods\n==============\n\nBelow are listed the string methods which both 8-bit strings and\nUnicode objects support. Note that none of these methods take keyword\narguments.\n\nIn addition, Python\'s strings support the sequence type methods\ndescribed in the *Sequence Types --- str, unicode, list, tuple,\nbuffer, xrange* section. To output formatted strings use template\nstrings or the ``%`` operator described in the *String Formatting\nOperations* section. Also, see the ``re`` module for string functions\nbased on regular expressions.\n\nstr.capitalize()\n\n Return a copy of the string with only its first character\n capitalized.\n\n For 8-bit strings, this method is locale-dependent.\n\nstr.center(width[, fillchar])\n\n Return centered in a string of length *width*. Padding is done\n using the specified *fillchar* (default is a space).\n\n Changed in version 2.4: Support for the *fillchar* argument.\n\nstr.count(sub[, start[, end]])\n\n Return the number of non-overlapping occurrences of substring *sub*\n in the range [*start*, *end*]. Optional arguments *start* and\n *end* are interpreted as in slice notation.\n\nstr.decode([encoding[, errors]])\n\n Decodes the string using the codec registered for *encoding*.\n *encoding* defaults to the default string encoding. *errors* may\n be given to set a different error handling scheme. The default is\n ``\'strict\'``, meaning that encoding errors raise ``UnicodeError``.\n Other possible values are ``\'ignore\'``, ``\'replace\'`` and any other\n name registered via ``codecs.register_error()``, see section *Codec\n Base Classes*.\n\n New in version 2.2.\n\n Changed in version 2.3: Support for other error handling schemes\n added.\n\nstr.encode([encoding[, errors]])\n\n Return an encoded version of the string. Default encoding is the\n current default string encoding. *errors* may be given to set a\n different error handling scheme. The default for *errors* is\n ``\'strict\'``, meaning that encoding errors raise a\n ``UnicodeError``. Other possible values are ``\'ignore\'``,\n ``\'replace\'``, ``\'xmlcharrefreplace\'``, ``\'backslashreplace\'`` and\n any other name registered via ``codecs.register_error()``, see\n section *Codec Base Classes*. For a list of possible encodings, see\n section *Standard Encodings*.\n\n New in version 2.0.\n\n Changed in version 2.3: Support for ``\'xmlcharrefreplace\'`` and\n ``\'backslashreplace\'`` and other error handling schemes added.\n\nstr.endswith(suffix[, start[, end]])\n\n Return ``True`` if the string ends with the specified *suffix*,\n otherwise return ``False``. *suffix* can also be a tuple of\n suffixes to look for. With optional *start*, test beginning at\n that position. With optional *end*, stop comparing at that\n position.\n\n Changed in version 2.5: Accept tuples as *suffix*.\n\nstr.expandtabs([tabsize])\n\n Return a copy of the string where all tab characters are replaced\n by one or more spaces, depending on the current column and the\n given tab size. The column number is reset to zero after each\n newline occurring in the string. If *tabsize* is not given, a tab\n size of ``8`` characters is assumed. This doesn\'t understand other\n non-printing characters or escape sequences.\n\nstr.find(sub[, start[, end]])\n\n Return the lowest index in the string where substring *sub* is\n found, such that *sub* is contained in the range [*start*, *end*].\n Optional arguments *start* and *end* are interpreted as in slice\n notation. Return ``-1`` if *sub* is not found.\n\nstr.format(format_string, *args, **kwargs)\n\n Perform a string formatting operation. The *format_string*\n argument can contain literal text or replacement fields delimited\n by braces ``{}``. Each replacement field contains either the\n numeric index of a positional argument, or the name of a keyword\n argument. Returns a copy of *format_string* where each replacement\n field is replaced with the string value of the corresponding\n argument.\n\n >>> "The sum of 1 + 2 is {0}".format(1+2)\n \'The sum of 1 + 2 is 3\'\n\n See *Format String Syntax* for a description of the various\n formatting options that can be specified in format strings.\n\n This method of string formatting is the new standard in Python 3.0,\n and should be preferred to the ``%`` formatting described in\n *String Formatting Operations* in new code.\n\n New in version 2.6.\n\nstr.index(sub[, start[, end]])\n\n Like ``find()``, but raise ``ValueError`` when the substring is not\n found.\n\nstr.isalnum()\n\n Return true if all characters in the string are alphanumeric and\n there is at least one character, false otherwise.\n\n For 8-bit strings, this method is locale-dependent.\n\nstr.isalpha()\n\n Return true if all characters in the string are alphabetic and\n there is at least one character, false otherwise.\n\n For 8-bit strings, this method is locale-dependent.\n\nstr.isdigit()\n\n Return true if all characters in the string are digits and there is\n at least one character, false otherwise.\n\n For 8-bit strings, this method is locale-dependent.\n\nstr.islower()\n\n Return true if all cased characters in the string are lowercase and\n there is at least one cased character, false otherwise.\n\n For 8-bit strings, this method is locale-dependent.\n\nstr.isspace()\n\n Return true if there are only whitespace characters in the string\n and there is at least one character, false otherwise.\n\n For 8-bit strings, this method is locale-dependent.\n\nstr.istitle()\n\n Return true if the string is a titlecased string and there is at\n least one character, for example uppercase characters may only\n follow uncased characters and lowercase characters only cased ones.\n Return false otherwise.\n\n For 8-bit strings, this method is locale-dependent.\n\nstr.isupper()\n\n Return true if all cased characters in the string are uppercase and\n there is at least one cased character, false otherwise.\n\n For 8-bit strings, this method is locale-dependent.\n\nstr.join(seq)\n\n Return a string which is the concatenation of the strings in the\n sequence *seq*. The separator between elements is the string\n providing this method.\n\nstr.ljust(width[, fillchar])\n\n Return the string left justified in a string of length *width*.\n Padding is done using the specified *fillchar* (default is a\n space). The original string is returned if *width* is less than\n ``len(s)``.\n\n Changed in version 2.4: Support for the *fillchar* argument.\n\nstr.lower()\n\n Return a copy of the string converted to lowercase.\n\n For 8-bit strings, this method is locale-dependent.\n\nstr.lstrip([chars])\n\n Return a copy of the string with leading characters removed. The\n *chars* argument is a string specifying the set of characters to be\n removed. If omitted or ``None``, the *chars* argument defaults to\n removing whitespace. The *chars* argument is not a prefix; rather,\n all combinations of its values are stripped:\n\n >>> \' spacious \'.lstrip()\n \'spacious \'\n >>> \'www.example.com\'.lstrip(\'cmowz.\')\n \'example.com\'\n\n Changed in version 2.2.2: Support for the *chars* argument.\n\nstr.partition(sep)\n\n Split the string at the first occurrence of *sep*, and return a\n 3-tuple containing the part before the separator, the separator\n itself, and the part after the separator. If the separator is not\n found, return a 3-tuple containing the string itself, followed by\n two empty strings.\n\n New in version 2.5.\n\nstr.replace(old, new[, count])\n\n Return a copy of the string with all occurrences of substring *old*\n replaced by *new*. If the optional argument *count* is given, only\n the first *count* occurrences are replaced.\n\nstr.rfind(sub[, start[, end]])\n\n Return the highest index in the string where substring *sub* is\n found, such that *sub* is contained within s[start,end]. Optional\n arguments *start* and *end* are interpreted as in slice notation.\n Return ``-1`` on failure.\n\nstr.rindex(sub[, start[, end]])\n\n Like ``rfind()`` but raises ``ValueError`` when the substring *sub*\n is not found.\n\nstr.rjust(width[, fillchar])\n\n Return the string right justified in a string of length *width*.\n Padding is done using the specified *fillchar* (default is a\n space). The original string is returned if *width* is less than\n ``len(s)``.\n\n Changed in version 2.4: Support for the *fillchar* argument.\n\nstr.rpartition(sep)\n\n Split the string at the last occurrence of *sep*, and return a\n 3-tuple containing the part before the separator, the separator\n itself, and the part after the separator. If the separator is not\n found, return a 3-tuple containing two empty strings, followed by\n the string itself.\n\n New in version 2.5.\n\nstr.rsplit([sep[, maxsplit]])\n\n Return a list of the words in the string, using *sep* as the\n delimiter string. If *maxsplit* is given, at most *maxsplit* splits\n are done, the *rightmost* ones. If *sep* is not specified or\n ``None``, any whitespace string is a separator. Except for\n splitting from the right, ``rsplit()`` behaves like ``split()``\n which is described in detail below.\n\n New in version 2.4.\n\nstr.rstrip([chars])\n\n Return a copy of the string with trailing characters removed. The\n *chars* argument is a string specifying the set of characters to be\n removed. If omitted or ``None``, the *chars* argument defaults to\n removing whitespace. The *chars* argument is not a suffix; rather,\n all combinations of its values are stripped:\n\n >>> \' spacious \'.rstrip()\n \' spacious\'\n >>> \'mississippi\'.rstrip(\'ipz\')\n \'mississ\'\n\n Changed in version 2.2.2: Support for the *chars* argument.\n\nstr.split([sep[, maxsplit]])\n\n Return a list of the words in the string, using *sep* as the\n delimiter string. If *maxsplit* is given, at most *maxsplit*\n splits are done (thus, the list will have at most ``maxsplit+1``\n elements). If *maxsplit* is not specified, then there is no limit\n on the number of splits (all possible splits are made).\n\n If *sep* is given, consecutive delimiters are not grouped together\n and are deemed to delimit empty strings (for example,\n ``\'1,,2\'.split(\',\')`` returns ``[\'1\', \'\', \'2\']``). The *sep*\n argument may consist of multiple characters (for example,\n ``\'1<>2<>3\'.split(\'<>\')`` returns ``[\'1\', \'2\', \'3\']``). Splitting\n an empty string with a specified separator returns ``[\'\']``.\n\n If *sep* is not specified or is ``None``, a different splitting\n algorithm is applied: runs of consecutive whitespace are regarded\n as a single separator, and the result will contain no empty strings\n at the start or end if the string has leading or trailing\n whitespace. Consequently, splitting an empty string or a string\n consisting of just whitespace with a ``None`` separator returns\n ``[]``.\n\n For example, ``\' 1 2 3 \'.split()`` returns ``[\'1\', \'2\', \'3\']``,\n and ``\' 1 2 3 \'.split(None, 1)`` returns ``[\'1\', \'2 3 \']``.\n\nstr.splitlines([keepends])\n\n Return a list of the lines in the string, breaking at line\n boundaries. Line breaks are not included in the resulting list\n unless *keepends* is given and true.\n\nstr.startswith(prefix[, start[, end]])\n\n Return ``True`` if string starts with the *prefix*, otherwise\n return ``False``. *prefix* can also be a tuple of prefixes to look\n for. With optional *start*, test string beginning at that\n position. With optional *end*, stop comparing string at that\n position.\n\n Changed in version 2.5: Accept tuples as *prefix*.\n\nstr.strip([chars])\n\n Return a copy of the string with the leading and trailing\n characters removed. The *chars* argument is a string specifying the\n set of characters to be removed. If omitted or ``None``, the\n *chars* argument defaults to removing whitespace. The *chars*\n argument is not a prefix or suffix; rather, all combinations of its\n values are stripped:\n\n >>> \' spacious \'.strip()\n \'spacious\'\n >>> \'www.example.com\'.strip(\'cmowz.\')\n \'example\'\n\n Changed in version 2.2.2: Support for the *chars* argument.\n\nstr.swapcase()\n\n Return a copy of the string with uppercase characters converted to\n lowercase and vice versa.\n\n For 8-bit strings, this method is locale-dependent.\n\nstr.title()\n\n Return a titlecased version of the string where words start with an\n uppercase character and the remaining characters are lowercase.\n\n The algorithm uses a simple language-independent definition of a\n word as groups of consecutive letters. The definition works in\n many contexts but it means that apostrophes in contractions and\n possessives form word boundaries, which may not be the desired\n result:\n\n >>> "they\'re bill\'s friends from the UK".title()\n "They\'Re Bill\'S Friends From The Uk"\n\n A workaround for apostrophes can be constructed using regular\n expressions:\n\n >>> import re\n >>> def titlecase(s):\n return re.sub(r"[A-Za-z]+(\'[A-Za-z]+)?",\n lambda mo: mo.group(0)[0].upper() +\n mo.group(0)[1:].lower(),\n s)\n\n >>> titlecase("they\'re bill\'s friends.")\n "They\'re Bill\'s Friends."\n\n For 8-bit strings, this method is locale-dependent.\n\nstr.translate(table[, deletechars])\n\n Return a copy of the string where all characters occurring in the\n optional argument *deletechars* are removed, and the remaining\n characters have been mapped through the given translation table,\n which must be a string of length 256.\n\n You can use the ``maketrans()`` helper function in the ``string``\n module to create a translation table. For string objects, set the\n *table* argument to ``None`` for translations that only delete\n characters:\n\n >>> \'read this short text\'.translate(None, \'aeiou\')\n \'rd ths shrt txt\'\n\n New in version 2.6: Support for a ``None`` *table* argument.\n\n For Unicode objects, the ``translate()`` method does not accept the\n optional *deletechars* argument. Instead, it returns a copy of the\n *s* where all characters have been mapped through the given\n translation table which must be a mapping of Unicode ordinals to\n Unicode ordinals, Unicode strings or ``None``. Unmapped characters\n are left untouched. Characters mapped to ``None`` are deleted.\n Note, a more flexible approach is to create a custom character\n mapping codec using the ``codecs`` module (see ``encodings.cp1251``\n for an example).\n\nstr.upper()\n\n Return a copy of the string converted to uppercase.\n\n For 8-bit strings, this method is locale-dependent.\n\nstr.zfill(width)\n\n Return the numeric string left filled with zeros in a string of\n length *width*. A sign prefix is handled correctly. The original\n string is returned if *width* is less than ``len(s)``.\n\n New in version 2.2.2.\n\nThe following methods are present only on unicode objects:\n\nunicode.isnumeric()\n\n Return ``True`` if there are only numeric characters in S,\n ``False`` otherwise. Numeric characters include digit characters,\n and all characters that have the Unicode numeric value property,\n e.g. U+2155, VULGAR FRACTION ONE FIFTH.\n\nunicode.isdecimal()\n\n Return ``True`` if there are only decimal characters in S,\n ``False`` otherwise. Decimal characters include digit characters,\n and all characters that that can be used to form decimal-radix\n numbers, e.g. U+0660, ARABIC-INDIC DIGIT ZERO.\n\n\nString Formatting Operations\n============================\n\nString and Unicode objects have one unique built-in operation: the\n``%`` operator (modulo). This is also known as the string\n*formatting* or *interpolation* operator. Given ``format % values``\n(where *format* is a string or Unicode object), ``%`` conversion\nspecifications in *format* are replaced with zero or more elements of\n*values*. The effect is similar to the using ``sprintf()`` in the C\nlanguage. If *format* is a Unicode object, or if any of the objects\nbeing converted using the ``%s`` conversion are Unicode objects, the\nresult will also be a Unicode object.\n\nIf *format* requires a single argument, *values* may be a single non-\ntuple object. [4] Otherwise, *values* must be a tuple with exactly\nthe number of items specified by the format string, or a single\nmapping object (for example, a dictionary).\n\nA conversion specifier contains two or more characters and has the\nfollowing components, which must occur in this order:\n\n1. The ``\'%\'`` character, which marks the start of the specifier.\n\n2. Mapping key (optional), consisting of a parenthesised sequence of\n characters (for example, ``(somename)``).\n\n3. Conversion flags (optional), which affect the result of some\n conversion types.\n\n4. Minimum field width (optional). If specified as an ``\'*\'``\n (asterisk), the actual width is read from the next element of the\n tuple in *values*, and the object to convert comes after the\n minimum field width and optional precision.\n\n5. Precision (optional), given as a ``\'.\'`` (dot) followed by the\n precision. If specified as ``\'*\'`` (an asterisk), the actual width\n is read from the next element of the tuple in *values*, and the\n value to convert comes after the precision.\n\n6. Length modifier (optional).\n\n7. Conversion type.\n\nWhen the right argument is a dictionary (or other mapping type), then\nthe formats in the string *must* include a parenthesised mapping key\ninto that dictionary inserted immediately after the ``\'%\'`` character.\nThe mapping key selects the value to be formatted from the mapping.\nFor example:\n\n>>> print \'%(language)s has %(#)03d quote types.\' % \\\n... {\'language\': "Python", "#": 2}\nPython has 002 quote types.\n\nIn this case no ``*`` specifiers may occur in a format (since they\nrequire a sequential parameter list).\n\nThe conversion flag characters are:\n\n+-----------+-----------------------------------------------------------------------+\n| Flag | Meaning |\n+===========+=======================================================================+\n| ``\'#\'`` | The value conversion will use the "alternate form" (where defined |\n| | below). |\n+-----------+-----------------------------------------------------------------------+\n| ``\'0\'`` | The conversion will be zero padded for numeric values. |\n+-----------+-----------------------------------------------------------------------+\n| ``\'-\'`` | The converted value is left adjusted (overrides the ``\'0\'`` |\n| | conversion if both are given). |\n+-----------+-----------------------------------------------------------------------+\n| ``\' \'`` | (a space) A blank should be left before a positive number (or empty |\n| | string) produced by a signed conversion. |\n+-----------+-----------------------------------------------------------------------+\n| ``\'+\'`` | A sign character (``\'+\'`` or ``\'-\'``) will precede the conversion |\n| | (overrides a "space" flag). |\n+-----------+-----------------------------------------------------------------------+\n\nA length modifier (``h``, ``l``, or ``L``) may be present, but is\nignored as it is not necessary for Python -- so e.g. ``%ld`` is\nidentical to ``%d``.\n\nThe conversion types are:\n\n+--------------+-------------------------------------------------------+---------+\n| Conversion | Meaning | Notes |\n+==============+=======================================================+=========+\n| ``\'d\'`` | Signed integer decimal. | |\n+--------------+-------------------------------------------------------+---------+\n| ``\'i\'`` | Signed integer decimal. | |\n+--------------+-------------------------------------------------------+---------+\n| ``\'o\'`` | Signed octal value. | (1) |\n+--------------+-------------------------------------------------------+---------+\n| ``\'u\'`` | Obsolete type -- it is identical to ``\'d\'``. | (7) |\n+--------------+-------------------------------------------------------+---------+\n| ``\'x\'`` | Signed hexadecimal (lowercase). | (2) |\n+--------------+-------------------------------------------------------+---------+\n| ``\'X\'`` | Signed hexadecimal (uppercase). | (2) |\n+--------------+-------------------------------------------------------+---------+\n| ``\'e\'`` | Floating point exponential format (lowercase). | (3) |\n+--------------+-------------------------------------------------------+---------+\n| ``\'E\'`` | Floating point exponential format (uppercase). | (3) |\n+--------------+-------------------------------------------------------+---------+\n| ``\'f\'`` | Floating point decimal format. | (3) |\n+--------------+-------------------------------------------------------+---------+\n| ``\'F\'`` | Floating point decimal format. | (3) |\n+--------------+-------------------------------------------------------+---------+\n| ``\'g\'`` | Floating point format. Uses lowercase exponential | (4) |\n| | format if exponent is less than -4 or not less than | |\n| | precision, decimal format otherwise. | |\n+--------------+-------------------------------------------------------+---------+\n| ``\'G\'`` | Floating point format. Uses uppercase exponential | (4) |\n| | format if exponent is less than -4 or not less than | |\n| | precision, decimal format otherwise. | |\n+--------------+-------------------------------------------------------+---------+\n| ``\'c\'`` | Single character (accepts integer or single character | |\n| | string). | |\n+--------------+-------------------------------------------------------+---------+\n| ``\'r\'`` | String (converts any python object using ``repr()``). | (5) |\n+--------------+-------------------------------------------------------+---------+\n| ``\'s\'`` | String (converts any python object using ``str()``). | (6) |\n+--------------+-------------------------------------------------------+---------+\n| ``\'%\'`` | No argument is converted, results in a ``\'%\'`` | |\n| | character in the result. | |\n+--------------+-------------------------------------------------------+---------+\n\nNotes:\n\n1. The alternate form causes a leading zero (``\'0\'``) to be inserted\n between left-hand padding and the formatting of the number if the\n leading character of the result is not already a zero.\n\n2. The alternate form causes a leading ``\'0x\'`` or ``\'0X\'`` (depending\n on whether the ``\'x\'`` or ``\'X\'`` format was used) to be inserted\n between left-hand padding and the formatting of the number if the\n leading character of the result is not already a zero.\n\n3. The alternate form causes the result to always contain a decimal\n point, even if no digits follow it.\n\n The precision determines the number of digits after the decimal\n point and defaults to 6.\n\n4. The alternate form causes the result to always contain a decimal\n point, and trailing zeroes are not removed as they would otherwise\n be.\n\n The precision determines the number of significant digits before\n and after the decimal point and defaults to 6.\n\n5. The ``%r`` conversion was added in Python 2.0.\n\n The precision determines the maximal number of characters used.\n\n6. If the object or format provided is a ``unicode`` string, the\n resulting string will also be ``unicode``.\n\n The precision determines the maximal number of characters used.\n\n7. See **PEP 237**.\n\nSince Python strings have an explicit length, ``%s`` conversions do\nnot assume that ``\'\\0\'`` is the end of the string.\n\nFor safety reasons, floating point precisions are clipped to 50;\n``%f`` conversions for numbers whose absolute value is over 1e50 are\nreplaced by ``%g`` conversions. [5] All other errors raise\nexceptions.\n\nAdditional string operations are defined in standard modules\n``string`` and ``re``.\n\n\nXRange Type\n===========\n\nThe ``xrange`` type is an immutable sequence which is commonly used\nfor looping. The advantage of the ``xrange`` type is that an\n``xrange`` object will always take the same amount of memory, no\nmatter the size of the range it represents. There are no consistent\nperformance advantages.\n\nXRange objects have very little behavior: they only support indexing,\niteration, and the ``len()`` function.\n\n\nMutable Sequence Types\n======================\n\nList objects support additional operations that allow in-place\nmodification of the object. Other mutable sequence types (when added\nto the language) should also support these operations. Strings and\ntuples are immutable sequence types: such objects cannot be modified\nonce created. The following operations are defined on mutable sequence\ntypes (where *x* is an arbitrary object):\n\n+--------------------------------+----------------------------------+-----------------------+\n| Operation | Result | Notes |\n+================================+==================================+=======================+\n| ``s[i] = x`` | item *i* of *s* is replaced by | |\n| | *x* | |\n+--------------------------------+----------------------------------+-----------------------+\n| ``s[i:j] = t`` | slice of *s* from *i* to *j* is | |\n| | replaced by the contents of the | |\n| | iterable *t* | |\n+--------------------------------+----------------------------------+-----------------------+\n| ``del s[i:j]`` | same as ``s[i:j] = []`` | |\n+--------------------------------+----------------------------------+-----------------------+\n| ``s[i:j:k] = t`` | the elements of ``s[i:j:k]`` are | (1) |\n| | replaced by those of *t* | |\n+--------------------------------+----------------------------------+-----------------------+\n| ``del s[i:j:k]`` | removes the elements of | |\n| | ``s[i:j:k]`` from the list | |\n+--------------------------------+----------------------------------+-----------------------+\n| ``s.append(x)`` | same as ``s[len(s):len(s)] = | (2) |\n| | [x]`` | |\n+--------------------------------+----------------------------------+-----------------------+\n| ``s.extend(x)`` | same as ``s[len(s):len(s)] = x`` | (3) |\n+--------------------------------+----------------------------------+-----------------------+\n| ``s.count(x)`` | return number of *i*\'s for which | |\n| | ``s[i] == x`` | |\n+--------------------------------+----------------------------------+-----------------------+\n| ``s.index(x[, i[, j]])`` | return smallest *k* such that | (4) |\n| | ``s[k] == x`` and ``i <= k < j`` | |\n+--------------------------------+----------------------------------+-----------------------+\n| ``s.insert(i, x)`` | same as ``s[i:i] = [x]`` | (5) |\n+--------------------------------+----------------------------------+-----------------------+\n| ``s.pop([i])`` | same as ``x = s[i]; del s[i]; | (6) |\n| | return x`` | |\n+--------------------------------+----------------------------------+-----------------------+\n| ``s.remove(x)`` | same as ``del s[s.index(x)]`` | (4) |\n+--------------------------------+----------------------------------+-----------------------+\n| ``s.reverse()`` | reverses the items of *s* in | (7) |\n| | place | |\n+--------------------------------+----------------------------------+-----------------------+\n| ``s.sort([cmp[, key[, | sort the items of *s* in place | (7)(8)(9)(10) |\n| reverse]]])`` | | |\n+--------------------------------+----------------------------------+-----------------------+\n\nNotes:\n\n1. *t* must have the same length as the slice it is replacing.\n\n2. The C implementation of Python has historically accepted multiple\n parameters and implicitly joined them into a tuple; this no longer\n works in Python 2.0. Use of this misfeature has been deprecated\n since Python 1.4.\n\n3. *x* can be any iterable object.\n\n4. Raises ``ValueError`` when *x* is not found in *s*. When a negative\n index is passed as the second or third parameter to the ``index()``\n method, the list length is added, as for slice indices. If it is\n still negative, it is truncated to zero, as for slice indices.\n\n Changed in version 2.3: Previously, ``index()`` didn\'t have\n arguments for specifying start and stop positions.\n\n5. When a negative index is passed as the first parameter to the\n ``insert()`` method, the list length is added, as for slice\n indices. If it is still negative, it is truncated to zero, as for\n slice indices.\n\n Changed in version 2.3: Previously, all negative indices were\n truncated to zero.\n\n6. The ``pop()`` method is only supported by the list and array types.\n The optional argument *i* defaults to ``-1``, so that by default\n the last item is removed and returned.\n\n7. The ``sort()`` and ``reverse()`` methods modify the list in place\n for economy of space when sorting or reversing a large list. To\n remind you that they operate by side effect, they don\'t return the\n sorted or reversed list.\n\n8. The ``sort()`` method takes optional arguments for controlling the\n comparisons.\n\n *cmp* specifies a custom comparison function of two arguments (list\n items) which should return a negative, zero or positive number\n depending on whether the first argument is considered smaller than,\n equal to, or larger than the second argument: ``cmp=lambda x,y:\n cmp(x.lower(), y.lower())``. The default value is ``None``.\n\n *key* specifies a function of one argument that is used to extract\n a comparison key from each list element: ``key=str.lower``. The\n default value is ``None``.\n\n *reverse* is a boolean value. If set to ``True``, then the list\n elements are sorted as if each comparison were reversed.\n\n In general, the *key* and *reverse* conversion processes are much\n faster than specifying an equivalent *cmp* function. This is\n because *cmp* is called multiple times for each list element while\n *key* and *reverse* touch each element only once.\n\n Changed in version 2.3: Support for ``None`` as an equivalent to\n omitting *cmp* was added.\n\n Changed in version 2.4: Support for *key* and *reverse* was added.\n\n9. Starting with Python 2.3, the ``sort()`` method is guaranteed to be\n stable. A sort is stable if it guarantees not to change the\n relative order of elements that compare equal --- this is helpful\n for sorting in multiple passes (for example, sort by department,\n then by salary grade).\n\n10. While a list is being sorted, the effect of attempting to mutate,\n or even inspect, the list is undefined. The C implementation of\n Python 2.3 and newer makes the list appear empty for the duration,\n and raises ``ValueError`` if it can detect that the list has been\n mutated during a sort.\n', - 'typesseq-mutable': u"\nMutable Sequence Types\n**********************\n\nList objects support additional operations that allow in-place\nmodification of the object. Other mutable sequence types (when added\nto the language) should also support these operations. Strings and\ntuples are immutable sequence types: such objects cannot be modified\nonce created. The following operations are defined on mutable sequence\ntypes (where *x* is an arbitrary object):\n\n+--------------------------------+----------------------------------+-----------------------+\n| Operation | Result | Notes |\n+================================+==================================+=======================+\n| ``s[i] = x`` | item *i* of *s* is replaced by | |\n| | *x* | |\n+--------------------------------+----------------------------------+-----------------------+\n| ``s[i:j] = t`` | slice of *s* from *i* to *j* is | |\n| | replaced by the contents of the | |\n| | iterable *t* | |\n+--------------------------------+----------------------------------+-----------------------+\n| ``del s[i:j]`` | same as ``s[i:j] = []`` | |\n+--------------------------------+----------------------------------+-----------------------+\n| ``s[i:j:k] = t`` | the elements of ``s[i:j:k]`` are | (1) |\n| | replaced by those of *t* | |\n+--------------------------------+----------------------------------+-----------------------+\n| ``del s[i:j:k]`` | removes the elements of | |\n| | ``s[i:j:k]`` from the list | |\n+--------------------------------+----------------------------------+-----------------------+\n| ``s.append(x)`` | same as ``s[len(s):len(s)] = | (2) |\n| | [x]`` | |\n+--------------------------------+----------------------------------+-----------------------+\n| ``s.extend(x)`` | same as ``s[len(s):len(s)] = x`` | (3) |\n+--------------------------------+----------------------------------+-----------------------+\n| ``s.count(x)`` | return number of *i*'s for which | |\n| | ``s[i] == x`` | |\n+--------------------------------+----------------------------------+-----------------------+\n| ``s.index(x[, i[, j]])`` | return smallest *k* such that | (4) |\n| | ``s[k] == x`` and ``i <= k < j`` | |\n+--------------------------------+----------------------------------+-----------------------+\n| ``s.insert(i, x)`` | same as ``s[i:i] = [x]`` | (5) |\n+--------------------------------+----------------------------------+-----------------------+\n| ``s.pop([i])`` | same as ``x = s[i]; del s[i]; | (6) |\n| | return x`` | |\n+--------------------------------+----------------------------------+-----------------------+\n| ``s.remove(x)`` | same as ``del s[s.index(x)]`` | (4) |\n+--------------------------------+----------------------------------+-----------------------+\n| ``s.reverse()`` | reverses the items of *s* in | (7) |\n| | place | |\n+--------------------------------+----------------------------------+-----------------------+\n| ``s.sort([cmp[, key[, | sort the items of *s* in place | (7)(8)(9)(10) |\n| reverse]]])`` | | |\n+--------------------------------+----------------------------------+-----------------------+\n\nNotes:\n\n1. *t* must have the same length as the slice it is replacing.\n\n2. The C implementation of Python has historically accepted multiple\n parameters and implicitly joined them into a tuple; this no longer\n works in Python 2.0. Use of this misfeature has been deprecated\n since Python 1.4.\n\n3. *x* can be any iterable object.\n\n4. Raises ``ValueError`` when *x* is not found in *s*. When a negative\n index is passed as the second or third parameter to the ``index()``\n method, the list length is added, as for slice indices. If it is\n still negative, it is truncated to zero, as for slice indices.\n\n Changed in version 2.3: Previously, ``index()`` didn't have\n arguments for specifying start and stop positions.\n\n5. When a negative index is passed as the first parameter to the\n ``insert()`` method, the list length is added, as for slice\n indices. If it is still negative, it is truncated to zero, as for\n slice indices.\n\n Changed in version 2.3: Previously, all negative indices were\n truncated to zero.\n\n6. The ``pop()`` method is only supported by the list and array types.\n The optional argument *i* defaults to ``-1``, so that by default\n the last item is removed and returned.\n\n7. The ``sort()`` and ``reverse()`` methods modify the list in place\n for economy of space when sorting or reversing a large list. To\n remind you that they operate by side effect, they don't return the\n sorted or reversed list.\n\n8. The ``sort()`` method takes optional arguments for controlling the\n comparisons.\n\n *cmp* specifies a custom comparison function of two arguments (list\n items) which should return a negative, zero or positive number\n depending on whether the first argument is considered smaller than,\n equal to, or larger than the second argument: ``cmp=lambda x,y:\n cmp(x.lower(), y.lower())``. The default value is ``None``.\n\n *key* specifies a function of one argument that is used to extract\n a comparison key from each list element: ``key=str.lower``. The\n default value is ``None``.\n\n *reverse* is a boolean value. If set to ``True``, then the list\n elements are sorted as if each comparison were reversed.\n\n In general, the *key* and *reverse* conversion processes are much\n faster than specifying an equivalent *cmp* function. This is\n because *cmp* is called multiple times for each list element while\n *key* and *reverse* touch each element only once.\n\n Changed in version 2.3: Support for ``None`` as an equivalent to\n omitting *cmp* was added.\n\n Changed in version 2.4: Support for *key* and *reverse* was added.\n\n9. Starting with Python 2.3, the ``sort()`` method is guaranteed to be\n stable. A sort is stable if it guarantees not to change the\n relative order of elements that compare equal --- this is helpful\n for sorting in multiple passes (for example, sort by department,\n then by salary grade).\n\n10. While a list is being sorted, the effect of attempting to mutate,\n or even inspect, the list is undefined. The C implementation of\n Python 2.3 and newer makes the list appear empty for the duration,\n and raises ``ValueError`` if it can detect that the list has been\n mutated during a sort.\n", + 'typesseq': u'\nSequence Types --- ``str``, ``unicode``, ``list``, ``tuple``, ``buffer``, ``xrange``\n************************************************************************************\n\nThere are six sequence types: strings, Unicode strings, lists, tuples,\nbuffers, and xrange objects.\n\nFor other containers see the built in ``dict`` and ``set`` classes,\nand the ``collections`` module.\n\nString literals are written in single or double quotes: ``\'xyzzy\'``,\n``"frobozz"``. See *String literals* for more about string literals.\nUnicode strings are much like strings, but are specified in the syntax\nusing a preceding ``\'u\'`` character: ``u\'abc\'``, ``u"def"``. In\naddition to the functionality described here, there are also string-\nspecific methods described in the *String Methods* section. Lists are\nconstructed with square brackets, separating items with commas: ``[a,\nb, c]``. Tuples are constructed by the comma operator (not within\nsquare brackets), with or without enclosing parentheses, but an empty\ntuple must have the enclosing parentheses, such as ``a, b, c`` or\n``()``. A single item tuple must have a trailing comma, such as\n``(d,)``.\n\nBuffer objects are not directly supported by Python syntax, but can be\ncreated by calling the built-in function ``buffer()``. They don\'t\nsupport concatenation or repetition.\n\nObjects of type xrange are similar to buffers in that there is no\nspecific syntax to create them, but they are created using the\n``xrange()`` function. They don\'t support slicing, concatenation or\nrepetition, and using ``in``, ``not in``, ``min()`` or ``max()`` on\nthem is inefficient.\n\nMost sequence types support the following operations. The ``in`` and\n``not in`` operations have the same priorities as the comparison\noperations. The ``+`` and ``*`` operations have the same priority as\nthe corresponding numeric operations. [3] Additional methods are\nprovided for *Mutable Sequence Types*.\n\nThis table lists the sequence operations sorted in ascending priority\n(operations in the same box have the same priority). In the table,\n*s* and *t* are sequences of the same type; *n*, *i* and *j* are\nintegers:\n\n+--------------------+----------------------------------+------------+\n| Operation | Result | Notes |\n+====================+==================================+============+\n| ``x in s`` | ``True`` if an item of *s* is | (1) |\n| | equal to *x*, else ``False`` | |\n+--------------------+----------------------------------+------------+\n| ``x not in s`` | ``False`` if an item of *s* is | (1) |\n| | equal to *x*, else ``True`` | |\n+--------------------+----------------------------------+------------+\n| ``s + t`` | the concatenation of *s* and *t* | (6) |\n+--------------------+----------------------------------+------------+\n| ``s * n, n * s`` | *n* shallow copies of *s* | (2) |\n| | concatenated | |\n+--------------------+----------------------------------+------------+\n| ``s[i]`` | *i*\'th item of *s*, origin 0 | (3) |\n+--------------------+----------------------------------+------------+\n| ``s[i:j]`` | slice of *s* from *i* to *j* | (3)(4) |\n+--------------------+----------------------------------+------------+\n| ``s[i:j:k]`` | slice of *s* from *i* to *j* | (3)(5) |\n| | with step *k* | |\n+--------------------+----------------------------------+------------+\n| ``len(s)`` | length of *s* | |\n+--------------------+----------------------------------+------------+\n| ``min(s)`` | smallest item of *s* | |\n+--------------------+----------------------------------+------------+\n| ``max(s)`` | largest item of *s* | |\n+--------------------+----------------------------------+------------+\n\nSequence types also support comparisons. In particular, tuples and\nlists are compared lexicographically by comparing corresponding\nelements. This means that to compare equal, every element must compare\nequal and the two sequences must be of the same type and have the same\nlength. (For full details see *Comparisons* in the language\nreference.)\n\nNotes:\n\n1. When *s* is a string or Unicode string object the ``in`` and ``not\n in`` operations act like a substring test. In Python versions\n before 2.3, *x* had to be a string of length 1. In Python 2.3 and\n beyond, *x* may be a string of any length.\n\n2. Values of *n* less than ``0`` are treated as ``0`` (which yields an\n empty sequence of the same type as *s*). Note also that the copies\n are shallow; nested structures are not copied. This often haunts\n new Python programmers; consider:\n\n >>> lists = [[]] * 3\n >>> lists\n [[], [], []]\n >>> lists[0].append(3)\n >>> lists\n [[3], [3], [3]]\n\n What has happened is that ``[[]]`` is a one-element list containing\n an empty list, so all three elements of ``[[]] * 3`` are (pointers\n to) this single empty list. Modifying any of the elements of\n ``lists`` modifies this single list. You can create a list of\n different lists this way:\n\n >>> lists = [[] for i in range(3)]\n >>> lists[0].append(3)\n >>> lists[1].append(5)\n >>> lists[2].append(7)\n >>> lists\n [[3], [5], [7]]\n\n3. If *i* or *j* is negative, the index is relative to the end of the\n string: ``len(s) + i`` or ``len(s) + j`` is substituted. But note\n that ``-0`` is still ``0``.\n\n4. The slice of *s* from *i* to *j* is defined as the sequence of\n items with index *k* such that ``i <= k < j``. If *i* or *j* is\n greater than ``len(s)``, use ``len(s)``. If *i* is omitted or\n ``None``, use ``0``. If *j* is omitted or ``None``, use\n ``len(s)``. If *i* is greater than or equal to *j*, the slice is\n empty.\n\n5. The slice of *s* from *i* to *j* with step *k* is defined as the\n sequence of items with index ``x = i + n*k`` such that ``0 <= n <\n (j-i)/k``. In other words, the indices are ``i``, ``i+k``,\n ``i+2*k``, ``i+3*k`` and so on, stopping when *j* is reached (but\n never including *j*). If *i* or *j* is greater than ``len(s)``,\n use ``len(s)``. If *i* or *j* are omitted or ``None``, they become\n "end" values (which end depends on the sign of *k*). Note, *k*\n cannot be zero. If *k* is ``None``, it is treated like ``1``.\n\n6. **CPython implementation detail:** If *s* and *t* are both strings,\n some Python implementations such as CPython can usually perform an\n in-place optimization for assignments of the form ``s = s + t`` or\n ``s += t``. When applicable, this optimization makes quadratic\n run-time much less likely. This optimization is both version and\n implementation dependent. For performance sensitive code, it is\n preferable to use the ``str.join()`` method which assures\n consistent linear concatenation performance across versions and\n implementations.\n\n Changed in version 2.4: Formerly, string concatenation never\n occurred in-place.\n\n\nString Methods\n==============\n\nBelow are listed the string methods which both 8-bit strings and\nUnicode objects support. Note that none of these methods take keyword\narguments.\n\nIn addition, Python\'s strings support the sequence type methods\ndescribed in the *Sequence Types --- str, unicode, list, tuple,\nbuffer, xrange* section. To output formatted strings use template\nstrings or the ``%`` operator described in the *String Formatting\nOperations* section. Also, see the ``re`` module for string functions\nbased on regular expressions.\n\nstr.capitalize()\n\n Return a copy of the string with only its first character\n capitalized.\n\n For 8-bit strings, this method is locale-dependent.\n\nstr.center(width[, fillchar])\n\n Return centered in a string of length *width*. Padding is done\n using the specified *fillchar* (default is a space).\n\n Changed in version 2.4: Support for the *fillchar* argument.\n\nstr.count(sub[, start[, end]])\n\n Return the number of non-overlapping occurrences of substring *sub*\n in the range [*start*, *end*]. Optional arguments *start* and\n *end* are interpreted as in slice notation.\n\nstr.decode([encoding[, errors]])\n\n Decodes the string using the codec registered for *encoding*.\n *encoding* defaults to the default string encoding. *errors* may\n be given to set a different error handling scheme. The default is\n ``\'strict\'``, meaning that encoding errors raise ``UnicodeError``.\n Other possible values are ``\'ignore\'``, ``\'replace\'`` and any other\n name registered via ``codecs.register_error()``, see section *Codec\n Base Classes*.\n\n New in version 2.2.\n\n Changed in version 2.3: Support for other error handling schemes\n added.\n\nstr.encode([encoding[, errors]])\n\n Return an encoded version of the string. Default encoding is the\n current default string encoding. *errors* may be given to set a\n different error handling scheme. The default for *errors* is\n ``\'strict\'``, meaning that encoding errors raise a\n ``UnicodeError``. Other possible values are ``\'ignore\'``,\n ``\'replace\'``, ``\'xmlcharrefreplace\'``, ``\'backslashreplace\'`` and\n any other name registered via ``codecs.register_error()``, see\n section *Codec Base Classes*. For a list of possible encodings, see\n section *Standard Encodings*.\n\n New in version 2.0.\n\n Changed in version 2.3: Support for ``\'xmlcharrefreplace\'`` and\n ``\'backslashreplace\'`` and other error handling schemes added.\n\nstr.endswith(suffix[, start[, end]])\n\n Return ``True`` if the string ends with the specified *suffix*,\n otherwise return ``False``. *suffix* can also be a tuple of\n suffixes to look for. With optional *start*, test beginning at\n that position. With optional *end*, stop comparing at that\n position.\n\n Changed in version 2.5: Accept tuples as *suffix*.\n\nstr.expandtabs([tabsize])\n\n Return a copy of the string where all tab characters are replaced\n by one or more spaces, depending on the current column and the\n given tab size. The column number is reset to zero after each\n newline occurring in the string. If *tabsize* is not given, a tab\n size of ``8`` characters is assumed. This doesn\'t understand other\n non-printing characters or escape sequences.\n\nstr.find(sub[, start[, end]])\n\n Return the lowest index in the string where substring *sub* is\n found, such that *sub* is contained in the range [*start*, *end*].\n Optional arguments *start* and *end* are interpreted as in slice\n notation. Return ``-1`` if *sub* is not found.\n\nstr.format(*args, **kwargs)\n\n Perform a string formatting operation. The *format_string*\n argument can contain literal text or replacement fields delimited\n by braces ``{}``. Each replacement field contains either the\n numeric index of a positional argument, or the name of a keyword\n argument. Returns a copy of *format_string* where each replacement\n field is replaced with the string value of the corresponding\n argument.\n\n >>> "The sum of 1 + 2 is {0}".format(1+2)\n \'The sum of 1 + 2 is 3\'\n\n See *Format String Syntax* for a description of the various\n formatting options that can be specified in format strings.\n\n This method of string formatting is the new standard in Python 3.0,\n and should be preferred to the ``%`` formatting described in\n *String Formatting Operations* in new code.\n\n New in version 2.6.\n\nstr.index(sub[, start[, end]])\n\n Like ``find()``, but raise ``ValueError`` when the substring is not\n found.\n\nstr.isalnum()\n\n Return true if all characters in the string are alphanumeric and\n there is at least one character, false otherwise.\n\n For 8-bit strings, this method is locale-dependent.\n\nstr.isalpha()\n\n Return true if all characters in the string are alphabetic and\n there is at least one character, false otherwise.\n\n For 8-bit strings, this method is locale-dependent.\n\nstr.isdigit()\n\n Return true if all characters in the string are digits and there is\n at least one character, false otherwise.\n\n For 8-bit strings, this method is locale-dependent.\n\nstr.islower()\n\n Return true if all cased characters in the string are lowercase and\n there is at least one cased character, false otherwise.\n\n For 8-bit strings, this method is locale-dependent.\n\nstr.isspace()\n\n Return true if there are only whitespace characters in the string\n and there is at least one character, false otherwise.\n\n For 8-bit strings, this method is locale-dependent.\n\nstr.istitle()\n\n Return true if the string is a titlecased string and there is at\n least one character, for example uppercase characters may only\n follow uncased characters and lowercase characters only cased ones.\n Return false otherwise.\n\n For 8-bit strings, this method is locale-dependent.\n\nstr.isupper()\n\n Return true if all cased characters in the string are uppercase and\n there is at least one cased character, false otherwise.\n\n For 8-bit strings, this method is locale-dependent.\n\nstr.join(iterable)\n\n Return a string which is the concatenation of the strings in the\n *iterable* *iterable*. The separator between elements is the\n string providing this method.\n\nstr.ljust(width[, fillchar])\n\n Return the string left justified in a string of length *width*.\n Padding is done using the specified *fillchar* (default is a\n space). The original string is returned if *width* is less than\n ``len(s)``.\n\n Changed in version 2.4: Support for the *fillchar* argument.\n\nstr.lower()\n\n Return a copy of the string converted to lowercase.\n\n For 8-bit strings, this method is locale-dependent.\n\nstr.lstrip([chars])\n\n Return a copy of the string with leading characters removed. The\n *chars* argument is a string specifying the set of characters to be\n removed. If omitted or ``None``, the *chars* argument defaults to\n removing whitespace. The *chars* argument is not a prefix; rather,\n all combinations of its values are stripped:\n\n >>> \' spacious \'.lstrip()\n \'spacious \'\n >>> \'www.example.com\'.lstrip(\'cmowz.\')\n \'example.com\'\n\n Changed in version 2.2.2: Support for the *chars* argument.\n\nstr.partition(sep)\n\n Split the string at the first occurrence of *sep*, and return a\n 3-tuple containing the part before the separator, the separator\n itself, and the part after the separator. If the separator is not\n found, return a 3-tuple containing the string itself, followed by\n two empty strings.\n\n New in version 2.5.\n\nstr.replace(old, new[, count])\n\n Return a copy of the string with all occurrences of substring *old*\n replaced by *new*. If the optional argument *count* is given, only\n the first *count* occurrences are replaced.\n\nstr.rfind(sub[, start[, end]])\n\n Return the highest index in the string where substring *sub* is\n found, such that *sub* is contained within s[start,end]. Optional\n arguments *start* and *end* are interpreted as in slice notation.\n Return ``-1`` on failure.\n\nstr.rindex(sub[, start[, end]])\n\n Like ``rfind()`` but raises ``ValueError`` when the substring *sub*\n is not found.\n\nstr.rjust(width[, fillchar])\n\n Return the string right justified in a string of length *width*.\n Padding is done using the specified *fillchar* (default is a\n space). The original string is returned if *width* is less than\n ``len(s)``.\n\n Changed in version 2.4: Support for the *fillchar* argument.\n\nstr.rpartition(sep)\n\n Split the string at the last occurrence of *sep*, and return a\n 3-tuple containing the part before the separator, the separator\n itself, and the part after the separator. If the separator is not\n found, return a 3-tuple containing two empty strings, followed by\n the string itself.\n\n New in version 2.5.\n\nstr.rsplit([sep[, maxsplit]])\n\n Return a list of the words in the string, using *sep* as the\n delimiter string. If *maxsplit* is given, at most *maxsplit* splits\n are done, the *rightmost* ones. If *sep* is not specified or\n ``None``, any whitespace string is a separator. Except for\n splitting from the right, ``rsplit()`` behaves like ``split()``\n which is described in detail below.\n\n New in version 2.4.\n\nstr.rstrip([chars])\n\n Return a copy of the string with trailing characters removed. The\n *chars* argument is a string specifying the set of characters to be\n removed. If omitted or ``None``, the *chars* argument defaults to\n removing whitespace. The *chars* argument is not a suffix; rather,\n all combinations of its values are stripped:\n\n >>> \' spacious \'.rstrip()\n \' spacious\'\n >>> \'mississippi\'.rstrip(\'ipz\')\n \'mississ\'\n\n Changed in version 2.2.2: Support for the *chars* argument.\n\nstr.split([sep[, maxsplit]])\n\n Return a list of the words in the string, using *sep* as the\n delimiter string. If *maxsplit* is given, at most *maxsplit*\n splits are done (thus, the list will have at most ``maxsplit+1``\n elements). If *maxsplit* is not specified, then there is no limit\n on the number of splits (all possible splits are made).\n\n If *sep* is given, consecutive delimiters are not grouped together\n and are deemed to delimit empty strings (for example,\n ``\'1,,2\'.split(\',\')`` returns ``[\'1\', \'\', \'2\']``). The *sep*\n argument may consist of multiple characters (for example,\n ``\'1<>2<>3\'.split(\'<>\')`` returns ``[\'1\', \'2\', \'3\']``). Splitting\n an empty string with a specified separator returns ``[\'\']``.\n\n If *sep* is not specified or is ``None``, a different splitting\n algorithm is applied: runs of consecutive whitespace are regarded\n as a single separator, and the result will contain no empty strings\n at the start or end if the string has leading or trailing\n whitespace. Consequently, splitting an empty string or a string\n consisting of just whitespace with a ``None`` separator returns\n ``[]``.\n\n For example, ``\' 1 2 3 \'.split()`` returns ``[\'1\', \'2\', \'3\']``,\n and ``\' 1 2 3 \'.split(None, 1)`` returns ``[\'1\', \'2 3 \']``.\n\nstr.splitlines([keepends])\n\n Return a list of the lines in the string, breaking at line\n boundaries. Line breaks are not included in the resulting list\n unless *keepends* is given and true.\n\nstr.startswith(prefix[, start[, end]])\n\n Return ``True`` if string starts with the *prefix*, otherwise\n return ``False``. *prefix* can also be a tuple of prefixes to look\n for. With optional *start*, test string beginning at that\n position. With optional *end*, stop comparing string at that\n position.\n\n Changed in version 2.5: Accept tuples as *prefix*.\n\nstr.strip([chars])\n\n Return a copy of the string with the leading and trailing\n characters removed. The *chars* argument is a string specifying the\n set of characters to be removed. If omitted or ``None``, the\n *chars* argument defaults to removing whitespace. The *chars*\n argument is not a prefix or suffix; rather, all combinations of its\n values are stripped:\n\n >>> \' spacious \'.strip()\n \'spacious\'\n >>> \'www.example.com\'.strip(\'cmowz.\')\n \'example\'\n\n Changed in version 2.2.2: Support for the *chars* argument.\n\nstr.swapcase()\n\n Return a copy of the string with uppercase characters converted to\n lowercase and vice versa.\n\n For 8-bit strings, this method is locale-dependent.\n\nstr.title()\n\n Return a titlecased version of the string where words start with an\n uppercase character and the remaining characters are lowercase.\n\n The algorithm uses a simple language-independent definition of a\n word as groups of consecutive letters. The definition works in\n many contexts but it means that apostrophes in contractions and\n possessives form word boundaries, which may not be the desired\n result:\n\n >>> "they\'re bill\'s friends from the UK".title()\n "They\'Re Bill\'S Friends From The Uk"\n\n A workaround for apostrophes can be constructed using regular\n expressions:\n\n >>> import re\n >>> def titlecase(s):\n return re.sub(r"[A-Za-z]+(\'[A-Za-z]+)?",\n lambda mo: mo.group(0)[0].upper() +\n mo.group(0)[1:].lower(),\n s)\n\n >>> titlecase("they\'re bill\'s friends.")\n "They\'re Bill\'s Friends."\n\n For 8-bit strings, this method is locale-dependent.\n\nstr.translate(table[, deletechars])\n\n Return a copy of the string where all characters occurring in the\n optional argument *deletechars* are removed, and the remaining\n characters have been mapped through the given translation table,\n which must be a string of length 256.\n\n You can use the ``maketrans()`` helper function in the ``string``\n module to create a translation table. For string objects, set the\n *table* argument to ``None`` for translations that only delete\n characters:\n\n >>> \'read this short text\'.translate(None, \'aeiou\')\n \'rd ths shrt txt\'\n\n New in version 2.6: Support for a ``None`` *table* argument.\n\n For Unicode objects, the ``translate()`` method does not accept the\n optional *deletechars* argument. Instead, it returns a copy of the\n *s* where all characters have been mapped through the given\n translation table which must be a mapping of Unicode ordinals to\n Unicode ordinals, Unicode strings or ``None``. Unmapped characters\n are left untouched. Characters mapped to ``None`` are deleted.\n Note, a more flexible approach is to create a custom character\n mapping codec using the ``codecs`` module (see ``encodings.cp1251``\n for an example).\n\nstr.upper()\n\n Return a copy of the string converted to uppercase.\n\n For 8-bit strings, this method is locale-dependent.\n\nstr.zfill(width)\n\n Return the numeric string left filled with zeros in a string of\n length *width*. A sign prefix is handled correctly. The original\n string is returned if *width* is less than ``len(s)``.\n\n New in version 2.2.2.\n\nThe following methods are present only on unicode objects:\n\nunicode.isnumeric()\n\n Return ``True`` if there are only numeric characters in S,\n ``False`` otherwise. Numeric characters include digit characters,\n and all characters that have the Unicode numeric value property,\n e.g. U+2155, VULGAR FRACTION ONE FIFTH.\n\nunicode.isdecimal()\n\n Return ``True`` if there are only decimal characters in S,\n ``False`` otherwise. Decimal characters include digit characters,\n and all characters that that can be used to form decimal-radix\n numbers, e.g. U+0660, ARABIC-INDIC DIGIT ZERO.\n\n\nString Formatting Operations\n============================\n\nString and Unicode objects have one unique built-in operation: the\n``%`` operator (modulo). This is also known as the string\n*formatting* or *interpolation* operator. Given ``format % values``\n(where *format* is a string or Unicode object), ``%`` conversion\nspecifications in *format* are replaced with zero or more elements of\n*values*. The effect is similar to the using ``sprintf()`` in the C\nlanguage. If *format* is a Unicode object, or if any of the objects\nbeing converted using the ``%s`` conversion are Unicode objects, the\nresult will also be a Unicode object.\n\nIf *format* requires a single argument, *values* may be a single non-\ntuple object. [4] Otherwise, *values* must be a tuple with exactly\nthe number of items specified by the format string, or a single\nmapping object (for example, a dictionary).\n\nA conversion specifier contains two or more characters and has the\nfollowing components, which must occur in this order:\n\n1. The ``\'%\'`` character, which marks the start of the specifier.\n\n2. Mapping key (optional), consisting of a parenthesised sequence of\n characters (for example, ``(somename)``).\n\n3. Conversion flags (optional), which affect the result of some\n conversion types.\n\n4. Minimum field width (optional). If specified as an ``\'*\'``\n (asterisk), the actual width is read from the next element of the\n tuple in *values*, and the object to convert comes after the\n minimum field width and optional precision.\n\n5. Precision (optional), given as a ``\'.\'`` (dot) followed by the\n precision. If specified as ``\'*\'`` (an asterisk), the actual width\n is read from the next element of the tuple in *values*, and the\n value to convert comes after the precision.\n\n6. Length modifier (optional).\n\n7. Conversion type.\n\nWhen the right argument is a dictionary (or other mapping type), then\nthe formats in the string *must* include a parenthesised mapping key\ninto that dictionary inserted immediately after the ``\'%\'`` character.\nThe mapping key selects the value to be formatted from the mapping.\nFor example:\n\n>>> print \'%(language)s has %(#)03d quote types.\' % \\\n... {\'language\': "Python", "#": 2}\nPython has 002 quote types.\n\nIn this case no ``*`` specifiers may occur in a format (since they\nrequire a sequential parameter list).\n\nThe conversion flag characters are:\n\n+-----------+-----------------------------------------------------------------------+\n| Flag | Meaning |\n+===========+=======================================================================+\n| ``\'#\'`` | The value conversion will use the "alternate form" (where defined |\n| | below). |\n+-----------+-----------------------------------------------------------------------+\n| ``\'0\'`` | The conversion will be zero padded for numeric values. |\n+-----------+-----------------------------------------------------------------------+\n| ``\'-\'`` | The converted value is left adjusted (overrides the ``\'0\'`` |\n| | conversion if both are given). |\n+-----------+-----------------------------------------------------------------------+\n| ``\' \'`` | (a space) A blank should be left before a positive number (or empty |\n| | string) produced by a signed conversion. |\n+-----------+-----------------------------------------------------------------------+\n| ``\'+\'`` | A sign character (``\'+\'`` or ``\'-\'``) will precede the conversion |\n| | (overrides a "space" flag). |\n+-----------+-----------------------------------------------------------------------+\n\nA length modifier (``h``, ``l``, or ``L``) may be present, but is\nignored as it is not necessary for Python -- so e.g. ``%ld`` is\nidentical to ``%d``.\n\nThe conversion types are:\n\n+--------------+-------------------------------------------------------+---------+\n| Conversion | Meaning | Notes |\n+==============+=======================================================+=========+\n| ``\'d\'`` | Signed integer decimal. | |\n+--------------+-------------------------------------------------------+---------+\n| ``\'i\'`` | Signed integer decimal. | |\n+--------------+-------------------------------------------------------+---------+\n| ``\'o\'`` | Signed octal value. | (1) |\n+--------------+-------------------------------------------------------+---------+\n| ``\'u\'`` | Obsolete type -- it is identical to ``\'d\'``. | (7) |\n+--------------+-------------------------------------------------------+---------+\n| ``\'x\'`` | Signed hexadecimal (lowercase). | (2) |\n+--------------+-------------------------------------------------------+---------+\n| ``\'X\'`` | Signed hexadecimal (uppercase). | (2) |\n+--------------+-------------------------------------------------------+---------+\n| ``\'e\'`` | Floating point exponential format (lowercase). | (3) |\n+--------------+-------------------------------------------------------+---------+\n| ``\'E\'`` | Floating point exponential format (uppercase). | (3) |\n+--------------+-------------------------------------------------------+---------+\n| ``\'f\'`` | Floating point decimal format. | (3) |\n+--------------+-------------------------------------------------------+---------+\n| ``\'F\'`` | Floating point decimal format. | (3) |\n+--------------+-------------------------------------------------------+---------+\n| ``\'g\'`` | Floating point format. Uses lowercase exponential | (4) |\n| | format if exponent is less than -4 or not less than | |\n| | precision, decimal format otherwise. | |\n+--------------+-------------------------------------------------------+---------+\n| ``\'G\'`` | Floating point format. Uses uppercase exponential | (4) |\n| | format if exponent is less than -4 or not less than | |\n| | precision, decimal format otherwise. | |\n+--------------+-------------------------------------------------------+---------+\n| ``\'c\'`` | Single character (accepts integer or single character | |\n| | string). | |\n+--------------+-------------------------------------------------------+---------+\n| ``\'r\'`` | String (converts any Python object using ``repr()``). | (5) |\n+--------------+-------------------------------------------------------+---------+\n| ``\'s\'`` | String (converts any Python object using ``str()``). | (6) |\n+--------------+-------------------------------------------------------+---------+\n| ``\'%\'`` | No argument is converted, results in a ``\'%\'`` | |\n| | character in the result. | |\n+--------------+-------------------------------------------------------+---------+\n\nNotes:\n\n1. The alternate form causes a leading zero (``\'0\'``) to be inserted\n between left-hand padding and the formatting of the number if the\n leading character of the result is not already a zero.\n\n2. The alternate form causes a leading ``\'0x\'`` or ``\'0X\'`` (depending\n on whether the ``\'x\'`` or ``\'X\'`` format was used) to be inserted\n between left-hand padding and the formatting of the number if the\n leading character of the result is not already a zero.\n\n3. The alternate form causes the result to always contain a decimal\n point, even if no digits follow it.\n\n The precision determines the number of digits after the decimal\n point and defaults to 6.\n\n4. The alternate form causes the result to always contain a decimal\n point, and trailing zeroes are not removed as they would otherwise\n be.\n\n The precision determines the number of significant digits before\n and after the decimal point and defaults to 6.\n\n5. The ``%r`` conversion was added in Python 2.0.\n\n The precision determines the maximal number of characters used.\n\n6. If the object or format provided is a ``unicode`` string, the\n resulting string will also be ``unicode``.\n\n The precision determines the maximal number of characters used.\n\n7. See **PEP 237**.\n\nSince Python strings have an explicit length, ``%s`` conversions do\nnot assume that ``\'\\0\'`` is the end of the string.\n\nFor safety reasons, floating point precisions are clipped to 50;\n``%f`` conversions for numbers whose absolute value is over 1e50 are\nreplaced by ``%g`` conversions. [5] All other errors raise\nexceptions.\n\nAdditional string operations are defined in standard modules\n``string`` and ``re``.\n\n\nXRange Type\n===========\n\nThe ``xrange`` type is an immutable sequence which is commonly used\nfor looping. The advantage of the ``xrange`` type is that an\n``xrange`` object will always take the same amount of memory, no\nmatter the size of the range it represents. There are no consistent\nperformance advantages.\n\nXRange objects have very little behavior: they only support indexing,\niteration, and the ``len()`` function.\n\n\nMutable Sequence Types\n======================\n\nList objects support additional operations that allow in-place\nmodification of the object. Other mutable sequence types (when added\nto the language) should also support these operations. Strings and\ntuples are immutable sequence types: such objects cannot be modified\nonce created. The following operations are defined on mutable sequence\ntypes (where *x* is an arbitrary object):\n\n+--------------------------------+----------------------------------+-----------------------+\n| Operation | Result | Notes |\n+================================+==================================+=======================+\n| ``s[i] = x`` | item *i* of *s* is replaced by | |\n| | *x* | |\n+--------------------------------+----------------------------------+-----------------------+\n| ``s[i:j] = t`` | slice of *s* from *i* to *j* is | |\n| | replaced by the contents of the | |\n| | iterable *t* | |\n+--------------------------------+----------------------------------+-----------------------+\n| ``del s[i:j]`` | same as ``s[i:j] = []`` | |\n+--------------------------------+----------------------------------+-----------------------+\n| ``s[i:j:k] = t`` | the elements of ``s[i:j:k]`` are | (1) |\n| | replaced by those of *t* | |\n+--------------------------------+----------------------------------+-----------------------+\n| ``del s[i:j:k]`` | removes the elements of | |\n| | ``s[i:j:k]`` from the list | |\n+--------------------------------+----------------------------------+-----------------------+\n| ``s.append(x)`` | same as ``s[len(s):len(s)] = | (2) |\n| | [x]`` | |\n+--------------------------------+----------------------------------+-----------------------+\n| ``s.extend(x)`` | same as ``s[len(s):len(s)] = x`` | (3) |\n+--------------------------------+----------------------------------+-----------------------+\n| ``s.count(x)`` | return number of *i*\'s for which | |\n| | ``s[i] == x`` | |\n+--------------------------------+----------------------------------+-----------------------+\n| ``s.index(x[, i[, j]])`` | return smallest *k* such that | (4) |\n| | ``s[k] == x`` and ``i <= k < j`` | |\n+--------------------------------+----------------------------------+-----------------------+\n| ``s.insert(i, x)`` | same as ``s[i:i] = [x]`` | (5) |\n+--------------------------------+----------------------------------+-----------------------+\n| ``s.pop([i])`` | same as ``x = s[i]; del s[i]; | (6) |\n| | return x`` | |\n+--------------------------------+----------------------------------+-----------------------+\n| ``s.remove(x)`` | same as ``del s[s.index(x)]`` | (4) |\n+--------------------------------+----------------------------------+-----------------------+\n| ``s.reverse()`` | reverses the items of *s* in | (7) |\n| | place | |\n+--------------------------------+----------------------------------+-----------------------+\n| ``s.sort([cmp[, key[, | sort the items of *s* in place | (7)(8)(9)(10) |\n| reverse]]])`` | | |\n+--------------------------------+----------------------------------+-----------------------+\n\nNotes:\n\n1. *t* must have the same length as the slice it is replacing.\n\n2. The C implementation of Python has historically accepted multiple\n parameters and implicitly joined them into a tuple; this no longer\n works in Python 2.0. Use of this misfeature has been deprecated\n since Python 1.4.\n\n3. *x* can be any iterable object.\n\n4. Raises ``ValueError`` when *x* is not found in *s*. When a negative\n index is passed as the second or third parameter to the ``index()``\n method, the list length is added, as for slice indices. If it is\n still negative, it is truncated to zero, as for slice indices.\n\n Changed in version 2.3: Previously, ``index()`` didn\'t have\n arguments for specifying start and stop positions.\n\n5. When a negative index is passed as the first parameter to the\n ``insert()`` method, the list length is added, as for slice\n indices. If it is still negative, it is truncated to zero, as for\n slice indices.\n\n Changed in version 2.3: Previously, all negative indices were\n truncated to zero.\n\n6. The ``pop()`` method is only supported by the list and array types.\n The optional argument *i* defaults to ``-1``, so that by default\n the last item is removed and returned.\n\n7. The ``sort()`` and ``reverse()`` methods modify the list in place\n for economy of space when sorting or reversing a large list. To\n remind you that they operate by side effect, they don\'t return the\n sorted or reversed list.\n\n8. The ``sort()`` method takes optional arguments for controlling the\n comparisons.\n\n *cmp* specifies a custom comparison function of two arguments (list\n items) which should return a negative, zero or positive number\n depending on whether the first argument is considered smaller than,\n equal to, or larger than the second argument: ``cmp=lambda x,y:\n cmp(x.lower(), y.lower())``. The default value is ``None``.\n\n *key* specifies a function of one argument that is used to extract\n a comparison key from each list element: ``key=str.lower``. The\n default value is ``None``.\n\n *reverse* is a boolean value. If set to ``True``, then the list\n elements are sorted as if each comparison were reversed.\n\n In general, the *key* and *reverse* conversion processes are much\n faster than specifying an equivalent *cmp* function. This is\n because *cmp* is called multiple times for each list element while\n *key* and *reverse* touch each element only once.\n\n Changed in version 2.3: Support for ``None`` as an equivalent to\n omitting *cmp* was added.\n\n Changed in version 2.4: Support for *key* and *reverse* was added.\n\n9. Starting with Python 2.3, the ``sort()`` method is guaranteed to be\n stable. A sort is stable if it guarantees not to change the\n relative order of elements that compare equal --- this is helpful\n for sorting in multiple passes (for example, sort by department,\n then by salary grade).\n\n10. **CPython implementation detail:** While a list is being sorted,\n the effect of attempting to mutate, or even inspect, the list is\n undefined. The C implementation of Python 2.3 and newer makes the\n list appear empty for the duration, and raises ``ValueError`` if\n it can detect that the list has been mutated during a sort.\n', + 'typesseq-mutable': u"\nMutable Sequence Types\n**********************\n\nList objects support additional operations that allow in-place\nmodification of the object. Other mutable sequence types (when added\nto the language) should also support these operations. Strings and\ntuples are immutable sequence types: such objects cannot be modified\nonce created. The following operations are defined on mutable sequence\ntypes (where *x* is an arbitrary object):\n\n+--------------------------------+----------------------------------+-----------------------+\n| Operation | Result | Notes |\n+================================+==================================+=======================+\n| ``s[i] = x`` | item *i* of *s* is replaced by | |\n| | *x* | |\n+--------------------------------+----------------------------------+-----------------------+\n| ``s[i:j] = t`` | slice of *s* from *i* to *j* is | |\n| | replaced by the contents of the | |\n| | iterable *t* | |\n+--------------------------------+----------------------------------+-----------------------+\n| ``del s[i:j]`` | same as ``s[i:j] = []`` | |\n+--------------------------------+----------------------------------+-----------------------+\n| ``s[i:j:k] = t`` | the elements of ``s[i:j:k]`` are | (1) |\n| | replaced by those of *t* | |\n+--------------------------------+----------------------------------+-----------------------+\n| ``del s[i:j:k]`` | removes the elements of | |\n| | ``s[i:j:k]`` from the list | |\n+--------------------------------+----------------------------------+-----------------------+\n| ``s.append(x)`` | same as ``s[len(s):len(s)] = | (2) |\n| | [x]`` | |\n+--------------------------------+----------------------------------+-----------------------+\n| ``s.extend(x)`` | same as ``s[len(s):len(s)] = x`` | (3) |\n+--------------------------------+----------------------------------+-----------------------+\n| ``s.count(x)`` | return number of *i*'s for which | |\n| | ``s[i] == x`` | |\n+--------------------------------+----------------------------------+-----------------------+\n| ``s.index(x[, i[, j]])`` | return smallest *k* such that | (4) |\n| | ``s[k] == x`` and ``i <= k < j`` | |\n+--------------------------------+----------------------------------+-----------------------+\n| ``s.insert(i, x)`` | same as ``s[i:i] = [x]`` | (5) |\n+--------------------------------+----------------------------------+-----------------------+\n| ``s.pop([i])`` | same as ``x = s[i]; del s[i]; | (6) |\n| | return x`` | |\n+--------------------------------+----------------------------------+-----------------------+\n| ``s.remove(x)`` | same as ``del s[s.index(x)]`` | (4) |\n+--------------------------------+----------------------------------+-----------------------+\n| ``s.reverse()`` | reverses the items of *s* in | (7) |\n| | place | |\n+--------------------------------+----------------------------------+-----------------------+\n| ``s.sort([cmp[, key[, | sort the items of *s* in place | (7)(8)(9)(10) |\n| reverse]]])`` | | |\n+--------------------------------+----------------------------------+-----------------------+\n\nNotes:\n\n1. *t* must have the same length as the slice it is replacing.\n\n2. The C implementation of Python has historically accepted multiple\n parameters and implicitly joined them into a tuple; this no longer\n works in Python 2.0. Use of this misfeature has been deprecated\n since Python 1.4.\n\n3. *x* can be any iterable object.\n\n4. Raises ``ValueError`` when *x* is not found in *s*. When a negative\n index is passed as the second or third parameter to the ``index()``\n method, the list length is added, as for slice indices. If it is\n still negative, it is truncated to zero, as for slice indices.\n\n Changed in version 2.3: Previously, ``index()`` didn't have\n arguments for specifying start and stop positions.\n\n5. When a negative index is passed as the first parameter to the\n ``insert()`` method, the list length is added, as for slice\n indices. If it is still negative, it is truncated to zero, as for\n slice indices.\n\n Changed in version 2.3: Previously, all negative indices were\n truncated to zero.\n\n6. The ``pop()`` method is only supported by the list and array types.\n The optional argument *i* defaults to ``-1``, so that by default\n the last item is removed and returned.\n\n7. The ``sort()`` and ``reverse()`` methods modify the list in place\n for economy of space when sorting or reversing a large list. To\n remind you that they operate by side effect, they don't return the\n sorted or reversed list.\n\n8. The ``sort()`` method takes optional arguments for controlling the\n comparisons.\n\n *cmp* specifies a custom comparison function of two arguments (list\n items) which should return a negative, zero or positive number\n depending on whether the first argument is considered smaller than,\n equal to, or larger than the second argument: ``cmp=lambda x,y:\n cmp(x.lower(), y.lower())``. The default value is ``None``.\n\n *key* specifies a function of one argument that is used to extract\n a comparison key from each list element: ``key=str.lower``. The\n default value is ``None``.\n\n *reverse* is a boolean value. If set to ``True``, then the list\n elements are sorted as if each comparison were reversed.\n\n In general, the *key* and *reverse* conversion processes are much\n faster than specifying an equivalent *cmp* function. This is\n because *cmp* is called multiple times for each list element while\n *key* and *reverse* touch each element only once.\n\n Changed in version 2.3: Support for ``None`` as an equivalent to\n omitting *cmp* was added.\n\n Changed in version 2.4: Support for *key* and *reverse* was added.\n\n9. Starting with Python 2.3, the ``sort()`` method is guaranteed to be\n stable. A sort is stable if it guarantees not to change the\n relative order of elements that compare equal --- this is helpful\n for sorting in multiple passes (for example, sort by department,\n then by salary grade).\n\n10. **CPython implementation detail:** While a list is being sorted,\n the effect of attempting to mutate, or even inspect, the list is\n undefined. The C implementation of Python 2.3 and newer makes the\n list appear empty for the duration, and raises ``ValueError`` if\n it can detect that the list has been mutated during a sort.\n", 'unary': u'\nUnary arithmetic and bitwise operations\n***************************************\n\nAll unary arithmetic and bitwise operations have the same priority:\n\n u_expr ::= power | "-" u_expr | "+" u_expr | "~" u_expr\n\nThe unary ``-`` (minus) operator yields the negation of its numeric\nargument.\n\nThe unary ``+`` (plus) operator yields its numeric argument unchanged.\n\nThe unary ``~`` (invert) operator yields the bitwise inversion of its\nplain or long integer argument. The bitwise inversion of ``x`` is\ndefined as ``-(x+1)``. It only applies to integral numbers.\n\nIn all three cases, if the argument does not have the proper type, a\n``TypeError`` exception is raised.\n', 'while': u'\nThe ``while`` statement\n***********************\n\nThe ``while`` statement is used for repeated execution as long as an\nexpression is true:\n\n while_stmt ::= "while" expression ":" suite\n ["else" ":" suite]\n\nThis repeatedly tests the expression and, if it is true, executes the\nfirst suite; if the expression is false (which may be the first time\nit is tested) the suite of the ``else`` clause, if present, is\nexecuted and the loop terminates.\n\nA ``break`` statement executed in the first suite terminates the loop\nwithout executing the ``else`` clause\'s suite. A ``continue``\nstatement executed in the first suite skips the rest of the suite and\ngoes back to testing the expression.\n', 'with': u'\nThe ``with`` statement\n**********************\n\nNew in version 2.5.\n\nThe ``with`` statement is used to wrap the execution of a block with\nmethods defined by a context manager (see section *With Statement\nContext Managers*). This allows common\n``try``...``except``...``finally`` usage patterns to be encapsulated\nfor convenient reuse.\n\n with_stmt ::= "with" expression ["as" target] ":" suite\n\nThe execution of the ``with`` statement proceeds as follows:\n\n1. The context expression is evaluated to obtain a context manager.\n\n2. The context manager\'s ``__enter__()`` method is invoked.\n\n3. If a target was included in the ``with`` statement, the return\n value from ``__enter__()`` is assigned to it.\n\n Note: The ``with`` statement guarantees that if the ``__enter__()``\n method returns without an error, then ``__exit__()`` will always\n be called. Thus, if an error occurs during the assignment to the\n target list, it will be treated the same as an error occurring\n within the suite would be. See step 5 below.\n\n4. The suite is executed.\n\n5. The context manager\'s ``__exit__()`` method is invoked. If an\n exception caused the suite to be exited, its type, value, and\n traceback are passed as arguments to ``__exit__()``. Otherwise,\n three ``None`` arguments are supplied.\n\n If the suite was exited due to an exception, and the return value\n from the ``__exit__()`` method was false, the exception is\n reraised. If the return value was true, the exception is\n suppressed, and execution continues with the statement following\n the ``with`` statement.\n\n If the suite was exited for any reason other than an exception, the\n return value from ``__exit__()`` is ignored, and execution proceeds\n at the normal location for the kind of exit that was taken.\n\nNote: In Python 2.5, the ``with`` statement is only allowed when the\n ``with_statement`` feature has been enabled. It is always enabled\n in Python 2.6.\n\nSee also:\n\n **PEP 0343** - The "with" statement\n The specification, background, and examples for the Python\n ``with`` statement.\n', From python-checkins at python.org Mon Mar 1 23:10:45 2010 From: python-checkins at python.org (barry.warsaw) Date: Mon, 1 Mar 2010 23:10:45 +0100 (CET) Subject: [Python-checkins] r78571 - in python/branches/release26-maint: Include/patchlevel.h Lib/distutils/__init__.py Lib/idlelib/idlever.py Misc/NEWS Misc/RPM/python-2.6.spec README Message-ID: <20100301221045.AF884EE98D@mail.python.org> Author: barry.warsaw Date: Mon Mar 1 23:10:45 2010 New Revision: 78571 Log: Bump to 2.6.5 rc 1. Modified: python/branches/release26-maint/Include/patchlevel.h python/branches/release26-maint/Lib/distutils/__init__.py python/branches/release26-maint/Lib/idlelib/idlever.py python/branches/release26-maint/Misc/NEWS python/branches/release26-maint/Misc/RPM/python-2.6.spec python/branches/release26-maint/README Modified: python/branches/release26-maint/Include/patchlevel.h ============================================================================== --- python/branches/release26-maint/Include/patchlevel.h (original) +++ python/branches/release26-maint/Include/patchlevel.h Mon Mar 1 23:10:45 2010 @@ -22,12 +22,12 @@ /*--start constants--*/ #define PY_MAJOR_VERSION 2 #define PY_MINOR_VERSION 6 -#define PY_MICRO_VERSION 4 -#define PY_RELEASE_LEVEL PY_RELEASE_LEVEL_FINAL -#define PY_RELEASE_SERIAL 0 +#define PY_MICRO_VERSION 5 +#define PY_RELEASE_LEVEL PY_RELEASE_LEVEL_GAMMA +#define PY_RELEASE_SERIAL 1 /* Version as a string */ -#define PY_VERSION "2.6.4+" +#define PY_VERSION "2.6.5rc1" /*--end constants--*/ /* Subversion Revision number of this file (not of the repository) */ Modified: python/branches/release26-maint/Lib/distutils/__init__.py ============================================================================== --- python/branches/release26-maint/Lib/distutils/__init__.py (original) +++ python/branches/release26-maint/Lib/distutils/__init__.py Mon Mar 1 23:10:45 2010 @@ -22,5 +22,5 @@ # #--start constants-- -__version__ = "2.6.4" +__version__ = "2.6.5rc1" #--end constants-- Modified: python/branches/release26-maint/Lib/idlelib/idlever.py ============================================================================== --- python/branches/release26-maint/Lib/idlelib/idlever.py (original) +++ python/branches/release26-maint/Lib/idlelib/idlever.py Mon Mar 1 23:10:45 2010 @@ -1 +1 @@ -IDLE_VERSION = "2.6.4" +IDLE_VERSION = "2.6.5rc1" Modified: python/branches/release26-maint/Misc/NEWS ============================================================================== --- python/branches/release26-maint/Misc/NEWS (original) +++ python/branches/release26-maint/Misc/NEWS Mon Mar 1 23:10:45 2010 @@ -4,10 +4,10 @@ (editors: check NEWS.help for information about editing NEWS using ReST.) -What's New in Python 2.6.5 -========================== +What's New in Python 2.6.5 rc 1? +================================ -*Release date: XX-XXX-20XX* +*Release date: 2010-03-01* Core and Builtins ----------------- Modified: python/branches/release26-maint/Misc/RPM/python-2.6.spec ============================================================================== --- python/branches/release26-maint/Misc/RPM/python-2.6.spec (original) +++ python/branches/release26-maint/Misc/RPM/python-2.6.spec Mon Mar 1 23:10:45 2010 @@ -39,8 +39,8 @@ %define name python #--start constants-- -%define version 2.6.4 -%define libvers 2.6 +%define version 2.6.5rc1 +%define libver 2.6 #--end constants-- %define release 1pydotorg %define __prefix /usr Modified: python/branches/release26-maint/README ============================================================================== --- python/branches/release26-maint/README (original) +++ python/branches/release26-maint/README Mon Mar 1 23:10:45 2010 @@ -1,5 +1,5 @@ -This is Python version 2.6.4 -============================ +This is Python version 2.6.5 rc 1 +================================= Copyright (c) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010 Python Software Foundation. From python-checkins at python.org Mon Mar 1 23:16:51 2010 From: python-checkins at python.org (barry.warsaw) Date: Mon, 1 Mar 2010 23:16:51 +0100 (CET) Subject: [Python-checkins] r78572 - in python/branches/release26-maint: Doc/license.rst LICENSE Lib/idlelib/NEWS.txt PC/python_nt.rc Message-ID: <20100301221651.BA35CEEA7C@mail.python.org> Author: barry.warsaw Date: Mon Mar 1 23:16:51 2010 New Revision: 78572 Log: More copyright year updates. Modified: python/branches/release26-maint/Doc/license.rst python/branches/release26-maint/LICENSE python/branches/release26-maint/Lib/idlelib/NEWS.txt python/branches/release26-maint/PC/python_nt.rc Modified: python/branches/release26-maint/Doc/license.rst ============================================================================== --- python/branches/release26-maint/Doc/license.rst (original) +++ python/branches/release26-maint/Doc/license.rst Mon Mar 1 23:16:51 2010 @@ -102,6 +102,8 @@ +----------------+--------------+-----------+------------+-----------------+ | 2.6.4 | 2.6.3 | 2009 | PSF | yes | +----------------+--------------+-----------+------------+-----------------+ +| 2.6.5 | 2.6.4 | 2010 | PSF | yes | ++----------------+--------------+-----------+------------+-----------------+ .. note:: Modified: python/branches/release26-maint/LICENSE ============================================================================== --- python/branches/release26-maint/LICENSE (original) +++ python/branches/release26-maint/LICENSE Mon Mar 1 23:16:51 2010 @@ -62,6 +62,7 @@ 2.6.2 2.6.1 2009 PSF yes 2.6.3 2.6.2 2009 PSF yes 2.6.4 2.6.3 2009 PSF yes + 2.6.5 2.6.4 2010 PSF yes Footnotes: Modified: python/branches/release26-maint/Lib/idlelib/NEWS.txt ============================================================================== --- python/branches/release26-maint/Lib/idlelib/NEWS.txt (original) +++ python/branches/release26-maint/Lib/idlelib/NEWS.txt Mon Mar 1 23:16:51 2010 @@ -1,7 +1,7 @@ What's New in Python 2.6.4rc1 ============================= -*Release date: XX-Oct-2009* +*Release date: 07-Oct-2009* - OutputWindow/PyShell right click menu "Go to file/line" wasn't working with file paths containing spaces. Bug 5559. Modified: python/branches/release26-maint/PC/python_nt.rc ============================================================================== --- python/branches/release26-maint/PC/python_nt.rc (original) +++ python/branches/release26-maint/PC/python_nt.rc Mon Mar 1 23:16:51 2010 @@ -61,7 +61,7 @@ VALUE "FileDescription", "Python Core\0" VALUE "FileVersion", PYTHON_VERSION VALUE "InternalName", "Python DLL\0" - VALUE "LegalCopyright", "Copyright ? 2001-2008 Python Software Foundation. Copyright ? 2000 BeOpen.com. Copyright ? 1995-2001 CNRI. Copyright ? 1991-1995 SMC.\0" + VALUE "LegalCopyright", "Copyright ? 2001-2010 Python Software Foundation. Copyright ? 2000 BeOpen.com. Copyright ? 1995-2001 CNRI. Copyright ? 1991-1995 SMC.\0" VALUE "OriginalFilename", PYTHON_DLL_NAME "\0" VALUE "ProductName", "Python\0" VALUE "ProductVersion", PYTHON_VERSION From python-checkins at python.org Mon Mar 1 23:26:23 2010 From: python-checkins at python.org (barry.warsaw) Date: Mon, 1 Mar 2010 23:26:23 +0100 (CET) Subject: [Python-checkins] r78573 - python/tags/r265rc1 Message-ID: <20100301222623.9CB9BFD8E@mail.python.org> Author: barry.warsaw Date: Mon Mar 1 23:26:23 2010 New Revision: 78573 Log: Tagging for 2.6.5 rc 1 Added: python/tags/r265rc1/ - copied from r78572, /python/branches/release26-maint/ From python-checkins at python.org Tue Mar 2 00:25:14 2010 From: python-checkins at python.org (benjamin.peterson) Date: Tue, 2 Mar 2010 00:25:14 +0100 (CET) Subject: [Python-checkins] r78574 - python/trunk/Modules/_cursesmodule.c Message-ID: <20100301232514.068B5EE984@mail.python.org> Author: benjamin.peterson Date: Tue Mar 2 00:25:13 2010 New Revision: 78574 Log: remove CVS id Modified: python/trunk/Modules/_cursesmodule.c (contents, props changed) Modified: python/trunk/Modules/_cursesmodule.c ============================================================================== --- python/trunk/Modules/_cursesmodule.c (original) +++ python/trunk/Modules/_cursesmodule.c Tue Mar 2 00:25:13 2010 @@ -31,8 +31,6 @@ * PERFORMANCE OF THIS SOFTWARE. */ -/* CVS: $Id$ */ - /* A number of SysV or ncurses functions don't have wrappers yet; if you From python-checkins at python.org Tue Mar 2 01:58:37 2010 From: python-checkins at python.org (barry.warsaw) Date: Tue, 2 Mar 2010 01:58:37 +0100 (CET) Subject: [Python-checkins] r78575 - peps/trunk/pep-3147.txt Message-ID: <20100302005837.502C6EE98C@mail.python.org> Author: barry.warsaw Date: Tue Mar 2 01:58:37 2010 New Revision: 78575 Log: Updates based on python-dev discussion. Modified: peps/trunk/pep-3147.txt Modified: peps/trunk/pep-3147.txt ============================================================================== --- peps/trunk/pep-3147.txt (original) +++ peps/trunk/pep-3147.txt Tue Mar 2 01:58:37 2010 @@ -499,6 +499,8 @@ with the more universally beneficial faster start up times for requiring source files? Should all Python users pay the extra stat call penalty in the general case for a minority use case by default? +Evidence shows that the extra stats can be fairly costly to start up +time. There are several ways out of this. Should we decide that it's important enough to support bytecode-only packages, the semantics @@ -521,13 +523,17 @@ * Add a `-X` switch and/or environment variable to enable the bytecode-only search algorithm. * Let those who want more protection against casual py hackers package - their code in a zip file, which is supported today. + their code in a zip file, which is supported today. Sub-options + include supporting pyc-only imports only in zip files, or still + requiring the py file for zip imports. * Provide a custom importer supporting bytecode-only packages, which would have to be enabled explicitly by the application. Either Python would provide such a custom importer or it would be left to third parties to implement. * Add a marker to a package's `__init__.py` file to enable bytecode-only imports for everything else in the package. +* Leave it to third-party tools such as py2exe [20]_ to build an + ecosystem and standards around source-less distributions. __cached__ vs. __compiled__ @@ -586,6 +592,9 @@ .. [18] importlib: http://docs.python.org/3.1/library/importlib.html +.. [19] http://mail.python.org/pipermail/python-dev/2010-March/098042.html + +.. [20] py2exe: http://www.py2exe.org/ ACKNOWLEDGMENTS =============== From python-checkins at python.org Tue Mar 2 09:38:10 2010 From: python-checkins at python.org (steven.bethard) Date: Tue, 2 Mar 2010 09:38:10 +0100 (CET) Subject: [Python-checkins] r78576 - in python/trunk: Doc/library/allos.rst Doc/library/argparse.rst Doc/library/getopt.rst Doc/library/optparse.rst Doc/tutorial/stdlib.rst Lib/argparse.py Lib/test/test_argparse.py Misc/NEWS Message-ID: <20100302083810.1FA55EE988@mail.python.org> Author: steven.bethard Date: Tue Mar 2 09:38:09 2010 New Revision: 78576 Log: Initial commit of the argparse library, based on argparse 1.1. Docs still need some updating to make getopt and optparse match the wording promised in the PEP. There are also probably a number of :class:ArgumentParser etc. links that could be added to the argparse documentation. Added: python/trunk/Doc/library/argparse.rst python/trunk/Lib/argparse.py (contents, props changed) python/trunk/Lib/test/test_argparse.py (contents, props changed) Modified: python/trunk/Doc/library/allos.rst python/trunk/Doc/library/getopt.rst python/trunk/Doc/library/optparse.rst python/trunk/Doc/tutorial/stdlib.rst python/trunk/Misc/NEWS Modified: python/trunk/Doc/library/allos.rst ============================================================================== --- python/trunk/Doc/library/allos.rst (original) +++ python/trunk/Doc/library/allos.rst Tue Mar 2 09:38:09 2010 @@ -16,6 +16,7 @@ os.rst io.rst time.rst + argparse.rst optparse.rst getopt.rst logging.rst Added: python/trunk/Doc/library/argparse.rst ============================================================================== --- (empty file) +++ python/trunk/Doc/library/argparse.rst Tue Mar 2 09:38:09 2010 @@ -0,0 +1,1758 @@ +:mod:`argparse` -- Parser for command line options, arguments and sub-commands +============================================================================== + +.. module:: argparse + :synopsis: Command-line option and argument parsing library. +.. moduleauthor:: Steven Bethard +.. versionadded:: 2.7 +.. sectionauthor:: Steven Bethard + + +The :mod:`argparse` module makes it easy to write user friendly command line +interfaces. You define what arguments your program requires, and +:mod:`argparse` will figure out how to parse those out of ``sys.argv``. The +:mod:`argparse` module also automatically generates help and usage messages +based on the arguments you have defined, and issues errors when users give your +program invalid arguments. + +Example +------- + +As an example, the following code is a Python program that takes a list of +integers and produces either the sum or the max:: + + import argparse + + parser = argparse.ArgumentParser(description='Process some integers.') + parser.add_argument('integers', metavar='N', type=int, nargs='+', + help='an integer for the accumulator') + parser.add_argument('--sum', dest='accumulate', action='store_const', + const=sum, default=max, + help='sum the integers (default: find the max)') + + args = parser.parse_args() + print args.accumulate(args.integers) + +Assuming the Python code above is saved into a file called ``prog.py``, it can +be run at the command line and provides useful help messages:: + + $ prog.py -h + usage: prog.py [-h] [--sum] N [N ...] + + Process some integers. + + positional arguments: + N an integer for the accumulator + + optional arguments: + -h, --help show this help message and exit + --sum sum the integers (default: find the max) + +When run with the appropriate arguments, it prints either the sum or the max of +the command-line integers:: + + $ prog.py 1 2 3 4 + 4 + + $ prog.py 1 2 3 4 --sum + 10 + +If invalid arguments are passed in, it will issue an error:: + + $ prog.py a b c + usage: prog.py [-h] [--sum] N [N ...] + prog.py: error: argument N: invalid int value: 'a' + +The following sections walk you through this example. + +Creating a parser +^^^^^^^^^^^^^^^^^ + +Pretty much every script that uses the :mod:`argparse` module will start out by +creating an :class:`ArgumentParser` object:: + + >>> parser = argparse.ArgumentParser(description='Process some integers.') + +The :class:`ArgumentParser` object will hold all the information necessary to +parse the command line into a more manageable form for your program. + + +Adding arguments +^^^^^^^^^^^^^^^^ + +Once you've created an :class:`ArgumentParser`, you'll want to fill it with +information about your program arguments. You typically do this by making calls +to the :meth:`add_argument` method. Generally, these calls tell the +:class:`ArgumentParser` how to take the strings on the command line and turn +them into objects for you. This information is stored and used when +:meth:`parse_args` is called. For example, if we add some arguments like this:: + + >>> parser.add_argument('integers', metavar='N', type=int, nargs='+', + ... help='an integer for the accumulator') + >>> parser.add_argument('--sum', dest='accumulate', action='store_const', + ... const=sum, default=max, + ... help='sum the integers (default: find the max)') + +when we later call :meth:`parse_args`, we can expect it to return an object +with two attributes, ``integers`` and ``accumulate``. The ``integers`` +attribute will be a list of one or more ints, and the ``accumulate`` attribute +will be either the ``sum`` function, if ``--sum`` was specified at the command +line, or the ``max`` function if it was not. + +Parsing arguments +^^^^^^^^^^^^^^^^^ + +Once an :class:`ArgumentParser` has been initialized with appropriate calls to +:meth:`add_argument`, it can be instructed to parse the command-line args by +calling the :meth:`parse_args` method. This will inspect the command-line, +convert each arg to the appropriate type and then invoke the appropriate +action. In most cases, this means a simple namespace object will be built up +from attributes parsed out of the command-line:: + + >>> parser.parse_args(['--sum', '7', '-1', '42']) + Namespace(accumulate=, integers=[7, -1, 42]) + +In a script, :meth:`parse_args` will typically be called with no arguments, and +the :class:`ArgumentParser` will automatically determine the command-line args +from ``sys.argv``. That's pretty much it. You're now ready to go write some +command line interfaces! + + +ArgumentParser objects +---------------------- + +.. class:: ArgumentParser([description], [epilog], [prog], [usage], [add_help], [argument_default], [parents], [prefix_chars], [conflict_handler], [formatter_class]) + + Create a new :class:`ArgumentParser` object. Each parameter has its own more + detailed description below, but in short they are: + + * description_ - Text to display before the argument help. + + * epilog_ - Text to display after the argument help. + + * add_help_ - Add a -h/--help option to the parser. (default: True) + + * argument_default_ - Set the global default value for arguments. + (default: None) + + * parents_ - A list of :class:ArgumentParser objects whose arguments should + also be included. + + * prefix_chars_ - The set of characters that prefix optional arguments. + (default: '-') + + * fromfile_prefix_chars_ - The set of characters that prefix files from + which additional arguments should be read. (default: None) + + * formatter_class_ - A class for customizing the help output. + + * conflict_handler_ - Usually unnecessary, defines strategy for resolving + conflicting optionals. + + * prog_ - Usually unnecessary, the name of the program + (default: ``sys.argv[0]``) + + * usage_ - Usually unnecessary, the string describing the program usage + (default: generated) + + The following sections describe how each of these are used. + + +description +^^^^^^^^^^^ + +Most calls to the ArgumentParser constructor will use the ``description=`` +keyword argument. This argument gives a brief description of what the program +does and how it works. In help messages, the description is displayed between +the command-line usage string and the help messages for the various arguments:: + + >>> parser = argparse.ArgumentParser(description='A foo that bars') + >>> parser.print_help() + usage: argparse.py [-h] + + A foo that bars + + optional arguments: + -h, --help show this help message and exit + +By default, the description will be line-wrapped so that it fits within the +given space. To change this behavior, see the formatter_class_ argument. + + +epilog +^^^^^^ + +Some programs like to display additional description of the program after the +description of the arguments. Such text can be specified using the ``epilog=`` +argument to ArgumentParser:: + + >>> parser = argparse.ArgumentParser( + ... description='A foo that bars', + ... epilog="And that's how you'd foo a bar") + >>> parser.print_help() + usage: argparse.py [-h] + + A foo that bars + + optional arguments: + -h, --help show this help message and exit + + And that's how you'd foo a bar + +As with the description_ argument, the ``epilog=`` text is by default +line-wrapped, but this behavior can be adjusted with the formatter_class_ +argument to ArgumentParser. + + +add_help +^^^^^^^^ + +By default, ArgumentParser objects add a ``-h/--help`` option which simply +displays the parser's help message. For example, consider a file named +``myprogram.py`` containing the following code:: + + import argparse + parser = argparse.ArgumentParser() + parser.add_argument('--foo', help='foo help') + args = parser.parse_args() + +If ``-h`` or ``--help`` is supplied is at the command-line, the ArgumentParser +help will be printed:: + + $ python myprogram.py --help + usage: myprogram.py [-h] [--foo FOO] + + optional arguments: + -h, --help show this help message and exit + --foo FOO foo help + +Occasionally, it may be useful to disable the addition of this help option. +This can be achieved by passing ``False`` as the ``add_help=`` argument to +ArgumentParser:: + + >>> parser = argparse.ArgumentParser(prog='PROG', add_help=False) + >>> parser.add_argument('--foo', help='foo help') + >>> parser.print_help() + usage: PROG [--foo FOO] + + optional arguments: + --foo FOO foo help + + +prefix_chars +^^^^^^^^^^^^ + +Most command-line options will use ``'-'`` as the prefix, e.g. ``-f/--foo``. +Parsers that need to support additional prefix characters, e.g. for options +like ``+f`` or ``/foo``, may specify them using the ``prefix_chars=`` argument +to the ArgumentParser constructor:: + + >>> parser = argparse.ArgumentParser(prog='PROG', prefix_chars='-+') + >>> parser.add_argument('+f') + >>> parser.add_argument('++bar') + >>> parser.parse_args('+f X ++bar Y'.split()) + Namespace(bar='Y', f='X') + +The ``prefix_chars=`` argument defaults to ``'-'``. Supplying a set of +characters that does not include ``'-'`` will cause ``-f/--foo`` options to be +disallowed. + + +fromfile_prefix_chars +^^^^^^^^^^^^^^^^^^^^^ + +Sometimes, e.g. for particularly long argument lists, it may make sense to +keep the list of arguments in a file rather than typing it out at the command +line. If the ``fromfile_prefix_chars=`` argument is given to the ArgumentParser +constructor, then arguments that start with any of the specified characters +will be treated as files, and will be replaced by the arguments they contain. +For example:: + + >>> open('args.txt', 'w').write('-f\nbar') + >>> parser = argparse.ArgumentParser(fromfile_prefix_chars='@') + >>> parser.add_argument('-f') + >>> parser.parse_args(['-f', 'foo', '@args.txt']) + Namespace(f='bar') + +Arguments read from a file must by default be one per line (but see also +:meth:`convert_arg_line_to_args`) and are treated as if they were in the same +place as the original file referencing argument on the command line. So in the +example above, the expression ``['-f', 'foo', '@args.txt']`` is considered +equivalent to the expression ``['-f', 'foo', '-f', 'bar']``. + +The ``fromfile_prefix_chars=`` argument defaults to ``None``, meaning that +arguments will never be treated as file references. + +argument_default +^^^^^^^^^^^^^^^^ + +Generally, argument defaults are specified either by passing a default to +:meth:`add_argument` or by calling the :meth:`set_defaults` methods with a +specific set of name-value pairs. Sometimes however, it may be useful to +specify a single parser-wide default for arguments. This can be accomplished by +passing the ``argument_default=`` keyword argument to ArgumentParser. For +example, to globally suppress attribute creation on :meth:`parse_args` calls, +we supply ``argument_default=SUPPRESS``:: + + >>> parser = argparse.ArgumentParser(argument_default=argparse.SUPPRESS) + >>> parser.add_argument('--foo') + >>> parser.add_argument('bar', nargs='?') + >>> parser.parse_args(['--foo', '1', 'BAR']) + Namespace(bar='BAR', foo='1') + >>> parser.parse_args([]) + Namespace() + + +parents +^^^^^^^ + +Sometimes, several parsers share a common set of arguments. Rather than +repeating the definitions of these arguments, you can define a single parser +with all the shared arguments and then use the ``parents=`` argument to +ArgumentParser to have these "inherited". The ``parents=`` argument takes a +list of ArgumentParser objects, collects all the positional and optional +actions from them, and adds these actions to the ArgumentParser object being +constructed:: + + >>> parent_parser = argparse.ArgumentParser(add_help=False) + >>> parent_parser.add_argument('--parent', type=int) + + >>> foo_parser = argparse.ArgumentParser(parents=[parent_parser]) + >>> foo_parser.add_argument('foo') + >>> foo_parser.parse_args(['--parent', '2', 'XXX']) + Namespace(foo='XXX', parent=2) + + >>> bar_parser = argparse.ArgumentParser(parents=[parent_parser]) + >>> bar_parser.add_argument('--bar') + >>> bar_parser.parse_args(['--bar', 'YYY']) + Namespace(bar='YYY', parent=None) + +Note that most parent parsers will specify ``add_help=False``. Otherwise, the +ArgumentParser will see two ``-h/--help`` options (one in the parent and one in +the child) and raise an error. + + +formatter_class +^^^^^^^^^^^^^^^ + +ArgumentParser objects allow the help formatting to be customized by specifying +an alternate formatting class. Currently, there are three such classes: +``argparse.RawDescriptionHelpFormatter``, ``argparse.RawTextHelpFormatter`` and +``argparse.ArgumentDefaultsHelpFormatter``. The first two allow more control +over how textual descriptions are displayed, while the last automatically adds +information about argument default values. + +By default, ArgumentParser objects line-wrap the description_ and epilog_ texts +in command-line help messages:: + + >>> parser = argparse.ArgumentParser( + ... prog='PROG', + ... description='''this description + ... was indented weird + ... but that is okay''', + ... epilog=''' + ... likewise for this epilog whose whitespace will + ... be cleaned up and whose words will be wrapped + ... across a couple lines''') + >>> parser.print_help() + usage: PROG [-h] + + this description was indented weird but that is okay + + optional arguments: + -h, --help show this help message and exit + + likewise for this epilog whose whitespace will be cleaned up and whose words + will be wrapped across a couple lines + +When you have description_ and epilog_ that is already correctly formatted and +should not be line-wrapped, you can indicate this by passing +``argparse.RawDescriptionHelpFormatter`` as the ``formatter_class=`` argument +to ArgumentParser:: + + >>> parser = argparse.ArgumentParser( + ... prog='PROG', + ... formatter_class=argparse.RawDescriptionHelpFormatter, + ... description=textwrap.dedent('''\ + ... Please do not mess up this text! + ... -------------------------------- + ... I have indented it + ... exactly the way + ... I want it + ... ''')) + >>> parser.print_help() + usage: PROG [-h] + + Please do not mess up this text! + -------------------------------- + I have indented it + exactly the way + I want it + + optional arguments: + -h, --help show this help message and exit + +If you want to maintain whitespace for all sorts of help text (including +argument descriptions), you can use ``argparse.RawTextHelpFormatter``. + +The other formatter class available, +``argparse.ArgumentDefaultsHelpFormatter``, will add information about the +default value of each of the arguments:: + + >>> parser = argparse.ArgumentParser( + ... prog='PROG', + ... formatter_class=argparse.ArgumentDefaultsHelpFormatter) + >>> parser.add_argument('--foo', type=int, default=42, help='FOO!') + >>> parser.add_argument('bar', nargs='*', default=[1, 2, 3], help='BAR!') + >>> parser.print_help() + usage: PROG [-h] [--foo FOO] [bar [bar ...]] + + positional arguments: + bar BAR! (default: [1, 2, 3]) + + optional arguments: + -h, --help show this help message and exit + --foo FOO FOO! (default: 42) + + +conflict_handler +^^^^^^^^^^^^^^^^ + +ArgumentParser objects do not allow two actions with the same option string. +By default, ArgumentParser objects will raise an exception if you try to create +an argument with an option string that is already in use:: + + >>> parser = argparse.ArgumentParser(prog='PROG') + >>> parser.add_argument('-f', '--foo', help='old foo help') + >>> parser.add_argument('--foo', help='new foo help') + Traceback (most recent call last): + .. + ArgumentError: argument --foo: conflicting option string(s): --foo + +Sometimes (e.g. when using parents_) it may be useful to simply override any +older arguments with the same option string. To get this behavior, the value +``'resolve'`` can be supplied to the ``conflict_handler=`` argument of +ArgumentParser:: + + >>> parser = argparse.ArgumentParser(prog='PROG', conflict_handler='resolve') + >>> parser.add_argument('-f', '--foo', help='old foo help') + >>> parser.add_argument('--foo', help='new foo help') + >>> parser.print_help() + usage: PROG [-h] [-f FOO] [--foo FOO] + + optional arguments: + -h, --help show this help message and exit + -f FOO old foo help + --foo FOO new foo help + +Note that ArgumentParser objects only remove an action if all of its option +strings are overridden. So, in the example above, the old ``-f/--foo`` action +is retained as the ``-f`` action, because only the ``--foo`` option string was +overridden. + + +prog +^^^^ + +By default, ArgumentParser objects use ``sys.argv[0]`` to determine how to +display the name of the program in help messages. This default is almost always +what you want because it will make the help messages match what your users have +typed at the command line. For example, consider a file named ``myprogram.py`` +with the following code:: + + import argparse + parser = argparse.ArgumentParser() + parser.add_argument('--foo', help='foo help') + args = parser.parse_args() + +The help for this program will display ``myprogram.py`` as the program name +(regardless of where the program was invoked from):: + + $ python myprogram.py --help + usage: myprogram.py [-h] [--foo FOO] + + optional arguments: + -h, --help show this help message and exit + --foo FOO foo help + $ cd .. + $ python subdir\myprogram.py --help + usage: myprogram.py [-h] [--foo FOO] + + optional arguments: + -h, --help show this help message and exit + --foo FOO foo help + +To change this default behavior, another value can be supplied using the +``prog=`` argument to ArgumentParser:: + + >>> parser = argparse.ArgumentParser(prog='myprogram') + >>> parser.print_help() + usage: myprogram [-h] + + optional arguments: + -h, --help show this help message and exit + +Note that the program name, whether determined from ``sys.argv[0]`` or from the +``prog=`` argument, is available to help messages using the ``%(prog)s`` format +specifier. + +:: + + >>> parser = argparse.ArgumentParser(prog='myprogram') + >>> parser.add_argument('--foo', help='foo of the %(prog)s program') + >>> parser.print_help() + usage: myprogram [-h] [--foo FOO] + + optional arguments: + -h, --help show this help message and exit + --foo FOO foo of the myprogram program + + +usage +^^^^^ + +By default, ArgumentParser objects calculate the usage message from the +arguments it contains:: + + >>> parser = argparse.ArgumentParser(prog='PROG') + >>> parser.add_argument('--foo', nargs='?', help='foo help') + >>> parser.add_argument('bar', nargs='+', help='bar help') + >>> parser.print_help() + usage: PROG [-h] [--foo [FOO]] bar [bar ...] + + positional arguments: + bar bar help + + optional arguments: + -h, --help show this help message and exit + --foo [FOO] foo help + +If the default usage message is not appropriate for your application, you can +supply your own usage message using the ``usage=`` keyword argument to +ArgumentParser:: + + >>> parser = argparse.ArgumentParser(prog='PROG', usage='%(prog)s [options]') + >>> parser.add_argument('--foo', nargs='?', help='foo help') + >>> parser.add_argument('bar', nargs='+', help='bar help') + >>> parser.print_help() + usage: PROG [options] + + positional arguments: + bar bar help + + optional arguments: + -h, --help show this help message and exit + --foo [FOO] foo help + +Note you can use the ``%(prog)s`` format specifier to fill in the program name +in your usage messages. + + +The add_argument() method +------------------------- + +.. method:: add_argument(name or flags..., [action], [nargs], [const], [default], [type], [choices], [required], [help], [metavar], [dest]) + + Define how a single command line argument should be parsed. Each parameter + has its own more detailed description below, but in short they are: + + * `name or flags`_ - Either a name or a list of option strings, e.g. ``foo`` + or ``-f, --foo`` + + * action_ - The basic type of action to be taken when this argument is + encountered at the command-line. + + * nargs_ - The number of command-line arguments that should be consumed. + + * const_ - A constant value required by some action_ and nargs_ selections. + + * default_ - The value produced if the argument is absent from the + command-line. + + * type_ - The type to which the command-line arg should be converted. + + * choices_ - A container of the allowable values for the argument. + + * required_ - Whether or not the command-line option may be omitted + (optionals only). + + * help_ - A brief description of what the argument does. + + * metavar_ - A name for the argument in usage messages. + + * dest_ - The name of the attribute to be added to the object returned by + :meth:`parse_args`. + + The following sections describe how each of these are used. + +name or flags +^^^^^^^^^^^^^ + +The :meth:`add_argument` method needs to know whether you're expecting an +optional argument, e.g. ``-f`` or ``--foo``, or a positional argument, e.g. a +list of filenames. The first arguments passed to :meth:`add_argument` must +therefore be either a series of flags, or a simple argument name. For example, +an optional argument could be created like:: + + >>> parser.add_argument('-f', '--foo') + +while a positional argument could be created like:: + + >>> parser.add_argument('bar') + +When :meth:`parse_args` is called, optional arguments will be identified by the +``-`` prefix, and the remaining arguments will be assumed to be positional:: + + >>> parser = argparse.ArgumentParser(prog='PROG') + >>> parser.add_argument('-f', '--foo') + >>> parser.add_argument('bar') + >>> parser.parse_args(['BAR']) + Namespace(bar='BAR', foo=None) + >>> parser.parse_args(['BAR', '--foo', 'FOO']) + Namespace(bar='BAR', foo='FOO') + >>> parser.parse_args(['--foo', 'FOO']) + usage: PROG [-h] [-f FOO] bar + PROG: error: too few arguments + +action +^^^^^^ + +:class:`ArgumentParser` objects associate command-line args with actions. These +actions can do just about anything with the command-line args associated with +them, though most actions simply add an attribute to the object returned by +:meth:`parse_args`. When you specify a new argument using the +:meth:`add_argument` method, you can indicate how the command-line args should +be handled by specifying the ``action`` keyword argument. The supported actions +are: + +* ``'store'`` - This just stores the argument's value. This is the default + action. For example:: + + >>> parser = argparse.ArgumentParser() + >>> parser.add_argument('--foo') + >>> parser.parse_args('--foo 1'.split()) + Namespace(foo='1') + +* ``'store_const'`` - This stores the value specified by the const_ keyword + argument. Note that the const_ keyword argument defaults to ``None``, so + you'll almost always need to provide a value for it. The ``'store_const'`` + action is most commonly used with optional arguments that specify some sort + of flag. For example:: + + >>> parser = argparse.ArgumentParser() + >>> parser.add_argument('--foo', action='store_const', const=42) + >>> parser.parse_args('--foo'.split()) + Namespace(foo=42) + +* ``'store_true'`` and ``'store_false'`` - These store the values ``True`` and + ``False`` respectively. These are basically special cases of + ``'store_const'``. For example:: + + >>> parser = argparse.ArgumentParser() + >>> parser.add_argument('--foo', action='store_true') + >>> parser.add_argument('--bar', action='store_false') + >>> parser.parse_args('--foo --bar'.split()) + Namespace(bar=False, foo=True) + +* ``'append'`` - This stores a list, and appends each argument value to the + list. This is useful when you want to allow an option to be specified + multiple times. Example usage:: + + >>> parser = argparse.ArgumentParser() + >>> parser.add_argument('--foo', action='append') + >>> parser.parse_args('--foo 1 --foo 2'.split()) + Namespace(foo=['1', '2']) + +* ``'append_const'`` - This stores a list, and appends the value specified by + the const_ keyword argument to the list. Note that the const_ keyword + argument defaults to ``None``, so you'll almost always need to provide a + value for it. The ``'append_const'`` action is typically useful when you + want multiple arguments to store constants to the same list, for example:: + + >>> parser = argparse.ArgumentParser() + >>> parser.add_argument('--str', dest='types', action='append_const', const=str) + >>> parser.add_argument('--int', dest='types', action='append_const', const=int) + >>> parser.parse_args('--str --int'.split()) + Namespace(types=[, ]) + +* ``'version'`` - This expects a ``version=`` keyword argument in the + :meth:`add_argument` call, and prints version information and exits when + invoked. + + >>> import argparse + >>> parser = argparse.ArgumentParser(prog='PROG') + >>> parser.add_argument('-v', '--version', action='version', version='%(prog)s 2.0') + >>> parser.parse_args(['-v']) + PROG 2.0 + +You can also specify an arbitrary action by passing an object that implements +the Action API. The easiest way to do this is to extend ``argparse.Action``, +supplying an appropriate ``__call__`` method. The ``__call__`` method accepts +four parameters: + +* ``parser`` - The ArgumentParser object which contains this action. + +* ``namespace`` - The namespace object that will be returned by + :meth:`parse_args`. Most actions add an attribute to this object. + +* ``values`` - The associated command-line args, with any type-conversions + applied. (Type-conversions are specified with the type_ keyword argument to + :meth:`add_argument`. + +* ``option_string`` - The option string that was used to invoke this action. + The ``option_string`` argument is optional, and will be absent if the action + is associated with a positional argument. + +So for example:: + + >>> class FooAction(argparse.Action): + ... def __call__(self, parser, namespace, values, option_string=None): + ... print '%r %r %r' % (namespace, values, option_string) + ... setattr(namespace, self.dest, values) + ... + >>> parser = argparse.ArgumentParser() + >>> parser.add_argument('--foo', action=FooAction) + >>> parser.add_argument('bar', action=FooAction) + >>> args = parser.parse_args('1 --foo 2'.split()) + Namespace(bar=None, foo=None) '1' None + Namespace(bar='1', foo=None) '2' '--foo' + >>> args + Namespace(bar='1', foo='2') + + +nargs +^^^^^ + +ArgumentParser objects usually associate a single command-line argument with a +single action to be taken. In the situations where you'd like to associate a +different number of command-line arguments with a single action, you can use +the ``nargs`` keyword argument to :meth:`add_argument`. The supported values +are: + +* N (an integer). N args from the command-line will be gathered together into + a list. For example:: + + >>> parser = argparse.ArgumentParser() + >>> parser.add_argument('--foo', nargs=2) + >>> parser.add_argument('bar', nargs=1) + >>> parser.parse_args('c --foo a b'.split()) + Namespace(bar=['c'], foo=['a', 'b']) + + Note that ``nargs=1`` produces a list of one item. This is different from + the default, in which the item is produced by itself. + +* ``'?'``. One arg will be consumed from the command-line if possible, and + produced as a single item. If no command-line arg is present, the value from + default_ will be produced. Note that for optional arguments, there is an + additional case - the option string is present but not followed by a + command-line arg. In this case the value from const_ will be produced. Some + examples to illustrate this:: + + >>> parser = argparse.ArgumentParser() + >>> parser.add_argument('--foo', nargs='?', const='c', default='d') + >>> parser.add_argument('bar', nargs='?', default='d') + >>> parser.parse_args('XX --foo YY'.split()) + Namespace(bar='XX', foo='YY') + >>> parser.parse_args('XX --foo'.split()) + Namespace(bar='XX', foo='c') + >>> parser.parse_args(''.split()) + Namespace(bar='d', foo='d') + + One of the more common uses of ``nargs='?'`` is to allow optional input and + output files:: + + >>> parser = argparse.ArgumentParser() + >>> parser.add_argument('infile', nargs='?', type=argparse.FileType('r'), default=sys.stdin) + >>> parser.add_argument('outfile', nargs='?', type=argparse.FileType('w'), default=sys.stdout) + >>> parser.parse_args(['input.txt', 'output.txt']) + Namespace(infile=, outfile=) + >>> parser.parse_args([]) + Namespace(infile=', mode 'r' at 0x...>, outfile=', mode 'w' at 0x...>) + +* ``'*'``. All command-line args present are gathered into a list. Note that + it generally doesn't make much sense to have more than one positional + argument with ``nargs='*'``, but multiple optional arguments with + ``nargs='*'`` is possible. For example:: + + >>> parser = argparse.ArgumentParser() + >>> parser.add_argument('--foo', nargs='*') + >>> parser.add_argument('--bar', nargs='*') + >>> parser.add_argument('baz', nargs='*') + >>> parser.parse_args('a b --foo x y --bar 1 2'.split()) + Namespace(bar=['1', '2'], baz=['a', 'b'], foo=['x', 'y']) + +* ``'+'``. Just like ``'*'``, all command-line args present are gathered into a + list. Additionally, an error message will be generated if there wasn't at + least one command-line arg present. For example:: + + >>> parser = argparse.ArgumentParser(prog='PROG') + >>> parser.add_argument('foo', nargs='+') + >>> parser.parse_args('a b'.split()) + Namespace(foo=['a', 'b']) + >>> parser.parse_args(''.split()) + usage: PROG [-h] foo [foo ...] + PROG: error: too few arguments + +If the ``nargs`` keyword argument is not provided, the number of args consumed +is determined by the action_. Generally this means a single command-line arg +will be consumed and a single item (not a list) will be produced. + + +const +^^^^^ + +The ``const`` argument of :meth:`add_argument` is used to hold constant values +that are not read from the command line but are required for the various +ArgumentParser actions. The two most common uses of it are: + +* When :meth:`add_argument` is called with ``action='store_const'`` or + ``action='append_const'``. These actions add the ``const`` value to one of + the attributes of the object returned by :meth:`parse_args`. See the action_ + description for examples. + +* When :meth:`add_argument` is called with option strings (like ``-f`` or + ``--foo``) and ``nargs='?'``. This creates an optional argument that can be + followed by zero or one command-line args. When parsing the command-line, if + the option string is encountered with no command-line arg following it, the + value of ``const`` will be assumed instead. See the nargs_ description for + examples. + +The ``const`` keyword argument defaults to ``None``. + + +default +^^^^^^^ + +All optional arguments and some positional arguments may be omitted at the +command-line. The ``default`` keyword argument of :meth:`add_argument`, whose +value defaults to ``None``, specifies what value should be used if the +command-line arg is not present. For optional arguments, the ``default`` value +is used when the option string was not present at the command line:: + + >>> parser = argparse.ArgumentParser() + >>> parser.add_argument('--foo', default=42) + >>> parser.parse_args('--foo 2'.split()) + Namespace(foo='2') + >>> parser.parse_args(''.split()) + Namespace(foo=42) + +For positional arguments with nargs_ ``='?'`` or ``'*'``, the ``default`` value +is used when no command-line arg was present:: + + >>> parser = argparse.ArgumentParser() + >>> parser.add_argument('foo', nargs='?', default=42) + >>> parser.parse_args('a'.split()) + Namespace(foo='a') + >>> parser.parse_args(''.split()) + Namespace(foo=42) + + +If you don't want to see an attribute when an option was not present at the +command line, you can supply ``default=argparse.SUPPRESS``:: + + >>> parser = argparse.ArgumentParser() + >>> parser.add_argument('--foo', default=argparse.SUPPRESS) + >>> parser.parse_args([]) + Namespace() + >>> parser.parse_args(['--foo', '1']) + Namespace(foo='1') + + +type +^^^^ + +By default, ArgumentParser objects read command-line args in as simple strings. +However, quite often the command-line string should instead be interpreted as +another type, e.g. ``float``, ``int`` or ``file``. The ``type`` keyword +argument of :meth:`add_argument` allows any necessary type-checking and +type-conversions to be performed. Many common builtin types can be used +directly as the value of the ``type`` argument:: + + >>> parser = argparse.ArgumentParser() + >>> parser.add_argument('foo', type=int) + >>> parser.add_argument('bar', type=file) + >>> parser.parse_args('2 temp.txt'.split()) + Namespace(bar=, foo=2) + +To ease the use of various types of files, the argparse module provides the +factory FileType which takes the ``mode=`` and ``bufsize=`` arguments of the +``file`` object. For example, ``FileType('w')`` can be used to create a +writable file:: + + >>> parser = argparse.ArgumentParser() + >>> parser.add_argument('bar', type=argparse.FileType('w')) + >>> parser.parse_args(['out.txt']) + Namespace(bar=) + +If you need to do some special type-checking or type-conversions, you can +provide your own types by passing to ``type=`` a callable that takes a single +string argument and returns the type-converted value:: + + >>> def perfect_square(string): + ... value = int(string) + ... sqrt = math.sqrt(value) + ... if sqrt != int(sqrt): + ... msg = "%r is not a perfect square" % string + ... raise argparse.ArgumentTypeError(msg) + ... return value + ... + >>> parser = argparse.ArgumentParser(prog='PROG') + >>> parser.add_argument('foo', type=perfect_square) + >>> parser.parse_args('9'.split()) + Namespace(foo=9) + >>> parser.parse_args('7'.split()) + usage: PROG [-h] foo + PROG: error: argument foo: '7' is not a perfect square + +Note that if your type-checking function is just checking for a particular set +of values, it may be more convenient to use the choices_ keyword argument:: + + >>> parser = argparse.ArgumentParser(prog='PROG') + >>> parser.add_argument('foo', type=int, choices=xrange(5, 10)) + >>> parser.parse_args('7'.split()) + Namespace(foo=7) + >>> parser.parse_args('11'.split()) + usage: PROG [-h] {5,6,7,8,9} + PROG: error: argument foo: invalid choice: 11 (choose from 5, 6, 7, 8, 9) + +See the choices_ section for more details. + + +choices +^^^^^^^ + +Some command-line args should be selected from a restricted set of values. +ArgumentParser objects can be told about such sets of values by passing a +container object as the ``choices`` keyword argument to :meth:`add_argument`. +When the command-line is parsed with :meth:`parse_args`, arg values will be +checked, and an error message will be displayed if the arg was not one of the +acceptable values:: + + >>> parser = argparse.ArgumentParser(prog='PROG') + >>> parser.add_argument('foo', choices='abc') + >>> parser.parse_args('c'.split()) + Namespace(foo='c') + >>> parser.parse_args('X'.split()) + usage: PROG [-h] {a,b,c} + PROG: error: argument foo: invalid choice: 'X' (choose from 'a', 'b', 'c') + +Note that inclusion in the ``choices`` container is checked after any type_ +conversions have been performed, so the type of the objects in the ``choices`` +container should match the type_ specified:: + + >>> parser = argparse.ArgumentParser(prog='PROG') + >>> parser.add_argument('foo', type=complex, choices=[1, 1j]) + >>> parser.parse_args('1j'.split()) + Namespace(foo=1j) + >>> parser.parse_args('-- -4'.split()) + usage: PROG [-h] {1,1j} + PROG: error: argument foo: invalid choice: (-4+0j) (choose from 1, 1j) + +Any object that supports the ``in`` operator can be passed as the ``choices`` +value, so ``dict`` objects, ``set`` objects, custom containers, etc. are all +supported. + + +required +^^^^^^^^ + +In general, the argparse module assumes that flags like ``-f`` and ``--bar`` +indicate *optional* arguments, which can always be omitted at the command-line. +To change this behavior, i.e. to make an option *required*, the value ``True`` +should be specified for the ``required=`` keyword argument to +:meth:`add_argument`:: + + >>> parser = argparse.ArgumentParser() + >>> parser.add_argument('--foo', required=True) + >>> parser.parse_args(['--foo', 'BAR']) + Namespace(foo='BAR') + >>> parser.parse_args([]) + usage: argparse.py [-h] [--foo FOO] + argparse.py: error: option --foo is required + +As the example shows, if an option is marked as ``required``, :meth:`parse_args` +will report an error if that option is not present at the command line. + +**Warning:** Required options are generally considered bad form - normal users +expect *options* to be *optional*. You should avoid the use of required options +whenever possible. + + +help +^^^^ + +A great command-line interface isn't worth anything if your users can't figure +out which option does what. So for the end-users, ``help`` is probably the +most important argument to include in your :meth:`add_argument` calls. The +``help`` value should be a string containing a brief description of what the +argument specifies. When a user requests help (usually by using ``-h`` or +``--help`` at the command-line), these ``help`` descriptions will be displayed +with each argument:: + + >>> parser = argparse.ArgumentParser(prog='frobble') + >>> parser.add_argument('--foo', action='store_true', + ... help='foo the bars before frobbling') + >>> parser.add_argument('bar', nargs='+', + ... help='one of the bars to be frobbled') + >>> parser.parse_args('-h'.split()) + usage: frobble [-h] [--foo] bar [bar ...] + + positional arguments: + bar one of the bars to be frobbled + + optional arguments: + -h, --help show this help message and exit + --foo foo the bars before frobbling + +The ``help`` strings can include various format specifiers to avoid repetition +of things like the program name or the argument default_. The available +specifiers include the program name, ``%(prog)s`` and most keyword arguments to +:meth:`add_argument`, e.g. ``%(default)s``, ``%(type)s``, etc.:: + + >>> parser = argparse.ArgumentParser(prog='frobble') + >>> parser.add_argument('bar', nargs='?', type=int, default=42, + ... help='the bar to %(prog)s (default: %(default)s)') + >>> parser.print_help() + usage: frobble [-h] [bar] + + positional arguments: + bar the bar to frobble (default: 42) + + optional arguments: + -h, --help show this help message and exit + + +metavar +^^^^^^^ + +When ArgumentParser objects generate help messages, they need some way to refer +to each expected argument. By default, ArgumentParser objects use the dest_ +value as the "name" of each object. By default, for positional argument +actions, the dest_ value is used directly, and for optional argument actions, +the dest_ value is uppercased. So if we have a single positional argument with +``dest='bar'``, that argument will be referred to as ``bar``. And if we have a +single optional argument ``--foo`` that should be followed by a single +command-line arg, that arg will be referred to as ``FOO``. You can see this +behavior in the example below:: + + >>> parser = argparse.ArgumentParser() + >>> parser.add_argument('--foo') + >>> parser.add_argument('bar') + >>> parser.parse_args('X --foo Y'.split()) + Namespace(bar='X', foo='Y') + >>> parser.print_help() + usage: [-h] [--foo FOO] bar + + positional arguments: + bar + + optional arguments: + -h, --help show this help message and exit + --foo FOO + +If you would like to provide a different name for your argument in help +messages, you can supply a value for the ``metavar`` keyword argument to +:meth:`add_argument`:: + + >>> parser = argparse.ArgumentParser() + >>> parser.add_argument('--foo', metavar='YYY') + >>> parser.add_argument('bar', metavar='XXX') + >>> parser.parse_args('X --foo Y'.split()) + Namespace(bar='X', foo='Y') + >>> parser.print_help() + usage: [-h] [--foo YYY] XXX + + positional arguments: + XXX + + optional arguments: + -h, --help show this help message and exit + --foo YYY + +Note that ``metavar`` only changes the *displayed* name - the name of the +attribute on the :meth:`parse_args` object is still determined by the dest_ +value. + +Different values of ``nargs`` may cause the metavar to be used multiple times. +If you'd like to specify a different display name for each of the arguments, +you can provide a tuple to ``metavar``:: + + >>> parser = argparse.ArgumentParser(prog='PROG') + >>> parser.add_argument('-x', nargs=2) + >>> parser.add_argument('--foo', nargs=2, metavar=('bar', 'baz')) + >>> parser.print_help() + usage: PROG [-h] [-x X X] [--foo bar baz] + + optional arguments: + -h, --help show this help message and exit + -x X X + --foo bar baz + + +dest +^^^^ + +Most ArgumentParser actions add some value as an attribute of the object +returned by :meth:`parse_args`. The name of this attribute is determined by the +``dest`` keyword argument of :meth:`add_argument`. For positional argument +actions, ``dest`` is normally supplied as the first argument to +:meth:`add_argument`:: + + >>> parser = argparse.ArgumentParser() + >>> parser.add_argument('bar') + >>> parser.parse_args('XXX'.split()) + Namespace(bar='XXX') + +For optional argument actions, the value of ``dest`` is normally inferred from +the option strings. ArgumentParser objects generate the value of ``dest`` by +taking the first long option string and stripping away the initial ``'--'`` +string. If no long option strings were supplied, ``dest`` will be derived from +the first short option string by stripping the initial ``'-'`` character. Any +internal ``'-'`` characters will be converted to ``'_'`` characters to make +sure the string is a valid attribute name. The examples below illustrate this +behavior:: + + >>> parser = argparse.ArgumentParser() + >>> parser.add_argument('-f', '--foo-bar', '--foo') + >>> parser.add_argument('-x', '-y') + >>> parser.parse_args('-f 1 -x 2'.split()) + Namespace(foo_bar='1', x='2') + >>> parser.parse_args('--foo 1 -y 2'.split()) + Namespace(foo_bar='1', x='2') + +If you would like to use a different attribute name from the one automatically +inferred by the ArgumentParser, you can supply it with an explicit ``dest`` +parameter:: + + >>> parser = argparse.ArgumentParser() + >>> parser.add_argument('--foo', dest='bar') + >>> parser.parse_args('--foo XXX'.split()) + Namespace(bar='XXX') + + +The parse_args() method +----------------------- + +.. method:: parse_args([args], [namespace]) + + Convert the strings to objects and assign them as attributes of the + namespace. Return the populated namespace. + + Previous calls to :meth:`add_argument` determine exactly what objects are + created and how they are assigned. See the documentation for + :meth:`add_argument` for details. + + By default, the arg strings are taken from ``sys.argv``, and a new empty + ``Namespace`` object is created for the attributes. + +Option value syntax +^^^^^^^^^^^^^^^^^^^ + +The :meth:`parse_args` method supports several ways of specifying the value of +an option (if it takes one). In the simplest case, the option and its value are +passed as two separate arguments:: + + >>> parser = argparse.ArgumentParser(prog='PROG') + >>> parser.add_argument('-x') + >>> parser.add_argument('--foo') + >>> parser.parse_args('-x X'.split()) + Namespace(foo=None, x='X') + >>> parser.parse_args('--foo FOO'.split()) + Namespace(foo='FOO', x=None) + +For long options (options with names longer than a single character), you may +also pass the option and value as a single command line argument, using ``=`` +to separate them:: + + >>> parser.parse_args('--foo=FOO'.split()) + Namespace(foo='FOO', x=None) + +For short options (options only one character long), you may simply concatenate +the option and its value:: + + >>> parser.parse_args('-xX'.split()) + Namespace(foo=None, x='X') + +You can also combine several short options together, using only a single ``-`` +prefix, as long as only the last option (or none of them) requires a value:: + + >>> parser = argparse.ArgumentParser(prog='PROG') + >>> parser.add_argument('-x', action='store_true') + >>> parser.add_argument('-y', action='store_true') + >>> parser.add_argument('-z') + >>> parser.parse_args('-xyzZ'.split()) + Namespace(x=True, y=True, z='Z') + + +Invalid arguments +^^^^^^^^^^^^^^^^^ + +While parsing the command-line, ``parse_args`` checks for a variety of errors, +including ambiguous options, invalid types, invalid options, wrong number of +positional arguments, etc. When it encounters such an error, it exits and +prints the error along with a usage message:: + + >>> parser = argparse.ArgumentParser(prog='PROG') + >>> parser.add_argument('--foo', type=int) + >>> parser.add_argument('bar', nargs='?') + + >>> # invalid type + >>> parser.parse_args(['--foo', 'spam']) + usage: PROG [-h] [--foo FOO] [bar] + PROG: error: argument --foo: invalid int value: 'spam' + + >>> # invalid option + >>> parser.parse_args(['--bar']) + usage: PROG [-h] [--foo FOO] [bar] + PROG: error: no such option: --bar + + >>> # wrong number of arguments + >>> parser.parse_args(['spam', 'badger']) + usage: PROG [-h] [--foo FOO] [bar] + PROG: error: extra arguments found: badger + + +Arguments containing ``"-"`` +^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +The ``parse_args`` method attempts to give errors whenever the user has clearly +made a mistake, but some situations are inherently ambiguous. For example, the +command-line arg ``'-1'`` could either be an attempt to specify an option or an +attempt to provide a positional argument. The ``parse_args`` method is cautious +here: positional arguments may only begin with ``'-'`` if they look like +negative numbers and there are no options in the parser that look like negative +numbers:: + + >>> parser = argparse.ArgumentParser(prog='PROG') + >>> parser.add_argument('-x') + >>> parser.add_argument('foo', nargs='?') + + >>> # no negative number options, so -1 is a positional argument + >>> parser.parse_args(['-x', '-1']) + Namespace(foo=None, x='-1') + + >>> # no negative number options, so -1 and -5 are positional arguments + >>> parser.parse_args(['-x', '-1', '-5']) + Namespace(foo='-5', x='-1') + + >>> parser = argparse.ArgumentParser(prog='PROG') + >>> parser.add_argument('-1', dest='one') + >>> parser.add_argument('foo', nargs='?') + + >>> # negative number options present, so -1 is an option + >>> parser.parse_args(['-1', 'X']) + Namespace(foo=None, one='X') + + >>> # negative number options present, so -2 is an option + >>> parser.parse_args(['-2']) + usage: PROG [-h] [-1 ONE] [foo] + PROG: error: no such option: -2 + + >>> # negative number options present, so both -1s are options + >>> parser.parse_args(['-1', '-1']) + usage: PROG [-h] [-1 ONE] [foo] + PROG: error: argument -1: expected one argument + +If you have positional arguments that must begin with ``'-'`` and don't look +like negative numbers, you can insert the pseudo-argument ``'--'`` which tells +``parse_args`` that everything after that is a positional argument:: + + >>> parser.parse_args(['--', '-f']) + Namespace(foo='-f', one=None) + + +Argument abbreviations +^^^^^^^^^^^^^^^^^^^^^^ + +The :meth:`parse_args` method allows you to abbreviate long options if the +abbreviation is unambiguous:: + + >>> parser = argparse.ArgumentParser(prog='PROG') + >>> parser.add_argument('-bacon') + >>> parser.add_argument('-badger') + >>> parser.parse_args('-bac MMM'.split()) + Namespace(bacon='MMM', badger=None) + >>> parser.parse_args('-bad WOOD'.split()) + Namespace(bacon=None, badger='WOOD') + >>> parser.parse_args('-ba BA'.split()) + usage: PROG [-h] [-bacon BACON] [-badger BADGER] + PROG: error: ambiguous option: -ba could match -badger, -bacon + +As you can see above, you will get an error if you pick a prefix that could +refer to more than one option. + + +Beyond ``sys.argv`` +^^^^^^^^^^^^^^^^^^^ + +Sometimes it may be useful to have an ArgumentParser parse args other than +those of ``sys.argv``. This can be accomplished by passing a list of strings +to ``parse_args``. You may have noticed that the examples in the argparse +documentation have made heavy use of this calling style - it is much easier +to use at the interactive prompt:: + + >>> parser = argparse.ArgumentParser() + >>> parser.add_argument( + ... 'integers', metavar='int', type=int, choices=xrange(10), + ... nargs='+', help='an integer in the range 0..9') + >>> parser.add_argument( + ... '--sum', dest='accumulate', action='store_const', const=sum, + ... default=max, help='sum the integers (default: find the max)') + >>> parser.parse_args(['1', '2', '3', '4']) + Namespace(accumulate=, integers=[1, 2, 3, 4]) + >>> parser.parse_args('1 2 3 4 --sum'.split()) + Namespace(accumulate=, integers=[1, 2, 3, 4]) + + +Custom namespaces +^^^^^^^^^^^^^^^^^ + +It may also be useful to have an ArgumentParser assign attributes to an already +existing object, rather than the newly-created Namespace object that is +normally used. This can be achieved by specifying the ``namespace=`` keyword +argument:: + + >>> class C(object): + ... pass + ... + >>> c = C() + >>> parser = argparse.ArgumentParser() + >>> parser.add_argument('--foo') + >>> parser.parse_args(args=['--foo', 'BAR'], namespace=c) + >>> c.foo + 'BAR' + + +Other utilities +--------------- + +Sub-commands +^^^^^^^^^^^^ + +.. method:: add_subparsers() + + A lot of programs split up their functionality into a number of + sub-commands, for example, the ``svn`` program can invoke sub-commands like + ``svn checkout``, ``svn update``, ``svn commit``, etc. Splitting up + functionality this way can be a particularly good idea when a program + performs several different functions which require different kinds of + command-line arguments. ArgumentParser objects support the creation of such + sub-commands with the :meth:`add_subparsers` method. The + :meth:`add_subparsers` method is normally called with no arguments and + returns an special action object. This object has a single method, + ``add_parser``, which takes a command name and any ArgumentParser + constructor arguments, and returns an ArgumentParser object that can be + modified as usual. + + Some example usage:: + + >>> # create the top-level parser + >>> parser = argparse.ArgumentParser(prog='PROG') + >>> parser.add_argument('--foo', action='store_true', help='foo help') + >>> subparsers = parser.add_subparsers(help='sub-command help') + >>> + >>> # create the parser for the "a" command + >>> parser_a = subparsers.add_parser('a', help='a help') + >>> parser_a.add_argument('bar', type=int, help='bar help') + >>> + >>> # create the parser for the "b" command + >>> parser_b = subparsers.add_parser('b', help='b help') + >>> parser_b.add_argument('--baz', choices='XYZ', help='baz help') + >>> + >>> # parse some arg lists + >>> parser.parse_args(['a', '12']) + Namespace(bar=12, foo=False) + >>> parser.parse_args(['--foo', 'b', '--baz', 'Z']) + Namespace(baz='Z', foo=True) + + Note that the object returned by :meth:`parse_args` will only contain + attributes for the main parser and the subparser that was selected by the + command line (and not any other subparsers). So in the example above, when + the ``"a"`` command is specified, only the ``foo`` and ``bar`` attributes + are present, and when the ``"b"`` command is specified, only the ``foo`` and + ``baz`` attributes are present. + + Similarly, when a help message is requested from a subparser, only the help + for that particular parser will be printed. The help message will not + include parent parser or sibling parser messages. (You can however supply a + help message for each subparser command by suppling the ``help=`` argument + to ``add_parser`` as above.) + + :: + + >>> parser.parse_args(['--help']) + usage: PROG [-h] [--foo] {a,b} ... + + positional arguments: + {a,b} sub-command help + a a help + b b help + + optional arguments: + -h, --help show this help message and exit + --foo foo help + + >>> parser.parse_args(['a', '--help']) + usage: PROG a [-h] bar + + positional arguments: + bar bar help + + optional arguments: + -h, --help show this help message and exit + + >>> parser.parse_args(['b', '--help']) + usage: PROG b [-h] [--baz {X,Y,Z}] + + optional arguments: + -h, --help show this help message and exit + --baz {X,Y,Z} baz help + + The :meth:`add_subparsers` method also supports ``title`` and + ``description`` keyword arguments. When either is present, the subparser's + commands will appear in their own group in the help output. For example:: + + >>> parser = argparse.ArgumentParser() + >>> subparsers = parser.add_subparsers(title='subcommands', + ... description='valid subcommands', + ... help='additional help') + >>> subparsers.add_parser('foo') + >>> subparsers.add_parser('bar') + >>> parser.parse_args(['-h']) + usage: [-h] {foo,bar} ... + + optional arguments: + -h, --help show this help message and exit + + subcommands: + valid subcommands + + {foo,bar} additional help + + + One particularly effective way of handling sub-commands is to combine the + use of the :meth:`add_subparsers` method with calls to :meth:`set_defaults` + so that each subparser knows which Python function it should execute. For + example:: + + >>> # sub-command functions + >>> def foo(args): + ... print args.x * args.y + ... + >>> def bar(args): + ... print '((%s))' % args.z + ... + >>> # create the top-level parser + >>> parser = argparse.ArgumentParser() + >>> subparsers = parser.add_subparsers() + >>> + >>> # create the parser for the "foo" command + >>> parser_foo = subparsers.add_parser('foo') + >>> parser_foo.add_argument('-x', type=int, default=1) + >>> parser_foo.add_argument('y', type=float) + >>> parser_foo.set_defaults(func=foo) + >>> + >>> # create the parser for the "bar" command + >>> parser_bar = subparsers.add_parser('bar') + >>> parser_bar.add_argument('z') + >>> parser_bar.set_defaults(func=bar) + >>> + >>> # parse the args and call whatever function was selected + >>> args = parser.parse_args('foo 1 -x 2'.split()) + >>> args.func(args) + 2.0 + >>> + >>> # parse the args and call whatever function was selected + >>> args = parser.parse_args('bar XYZYX'.split()) + >>> args.func(args) + ((XYZYX)) + + This way, you can let :meth:`parse_args` do all the work for you, and then + just call the appropriate function after the argument parsing is complete. + Associating functions with actions like this is typically the easiest way + to handle the different actions for each of your subparsers. However, if you + find it necessary to check the name of the subparser that was invoked, you + can always provide a ``dest`` keyword argument to the :meth:`add_subparsers` + call:: + + >>> parser = argparse.ArgumentParser() + >>> subparsers = parser.add_subparsers(dest='subparser_name') + >>> subparser1 = subparsers.add_parser('1') + >>> subparser1.add_argument('-x') + >>> subparser2 = subparsers.add_parser('2') + >>> subparser2.add_argument('y') + >>> parser.parse_args(['2', 'frobble']) + Namespace(subparser_name='2', y='frobble') + + +FileType objects +^^^^^^^^^^^^^^^^ + +.. class:: FileType(mode='r', bufsize=None) + + The :class:`FileType` factory creates objects that can be passed to the type + argument of :meth:`add_argument`. Arguments that have :class:`FileType` + objects as their type will open command-line args as files with the + requested modes and buffer sizes: + + >>> parser = argparse.ArgumentParser() + >>> parser.add_argument('--output', type=argparse.FileType('wb', 0)) + >>> parser.parse_args(['--output', 'out']) + Namespace(output=) + + FileType objects understand the pseudo-argument ``'-'`` and automatically + convert this into ``sys.stdin`` for readable :class:`FileType` objects and + ``sys.stdout`` for writable :class:`FileType` objects: + + >>> parser = argparse.ArgumentParser() + >>> parser.add_argument('infile', type=argparse.FileType('r')) + >>> parser.parse_args(['-']) + Namespace(infile=', mode 'r' at 0x...>) + + +Argument groups +^^^^^^^^^^^^^^^ + +.. method:: add_argument_group([title], [description]) + + By default, ArgumentParser objects group command-line arguments into + "positional arguments" and "optional arguments" when displaying help + messages. When there is a better conceptual grouping of arguments than this + default one, appropriate groups can be created using the + :meth:`add_argument_group` method:: + + >>> parser = argparse.ArgumentParser(prog='PROG', add_help=False) + >>> group = parser.add_argument_group('group') + >>> group.add_argument('--foo', help='foo help') + >>> group.add_argument('bar', help='bar help') + >>> parser.print_help() + usage: PROG [--foo FOO] bar + + group: + bar bar help + --foo FOO foo help + + The :meth:`add_argument_group` method returns an argument group object which + has an :meth:`add_argument` method just like a regular ArgumentParser + objects. When an argument is added to the group, the parser treats it just + like a normal argument, but displays the argument in a separate group for + help messages. The :meth:`add_argument_group` method accepts ``title`` and + ``description`` arguments which can be used to customize this display:: + + >>> parser = argparse.ArgumentParser(prog='PROG', add_help=False) + >>> group1 = parser.add_argument_group('group1', 'group1 description') + >>> group1.add_argument('foo', help='foo help') + >>> group2 = parser.add_argument_group('group2', 'group2 description') + >>> group2.add_argument('--bar', help='bar help') + >>> parser.print_help() + usage: PROG [--bar BAR] foo + + group1: + group1 description + + foo foo help + + group2: + group2 description + + --bar BAR bar help + + Note that any arguments not in your user defined groups will end up back in + the usual "positional arguments" and "optional arguments" sections. + + +Mutual exclusion +^^^^^^^^^^^^^^^^ + +.. method:: add_mutually_exclusive_group([required=False]) + + Sometimes, you need to make sure that only one of a couple different options + is specified on the command line. You can create groups of such mutually + exclusive arguments using the :meth:`add_mutually_exclusive_group` method. + When :func:`parse_args` is called, argparse will make sure that only one of + the arguments in the mutually exclusive group was present on the command + line:: + + >>> parser = argparse.ArgumentParser(prog='PROG') + >>> group = parser.add_mutually_exclusive_group() + >>> group.add_argument('--foo', action='store_true') + >>> group.add_argument('--bar', action='store_false') + >>> parser.parse_args(['--foo']) + Namespace(bar=True, foo=True) + >>> parser.parse_args(['--bar']) + Namespace(bar=False, foo=False) + >>> parser.parse_args(['--foo', '--bar']) + usage: PROG [-h] [--foo | --bar] + PROG: error: argument --bar: not allowed with argument --foo + + The :meth:`add_mutually_exclusive_group` method also accepts a ``required`` + argument, to indicate that at least one of the mutually exclusive arguments + is required:: + + >>> parser = argparse.ArgumentParser(prog='PROG') + >>> group = parser.add_mutually_exclusive_group(required=True) + >>> group.add_argument('--foo', action='store_true') + >>> group.add_argument('--bar', action='store_false') + >>> parser.parse_args([]) + usage: PROG [-h] (--foo | --bar) + PROG: error: one of the arguments --foo --bar is required + + Note that currently mutually exclusive argument groups do not support the + ``title`` and ``description`` arguments of :meth:`add_argument_group`. This + may change in the future however, so you are *strongly* recommended to + specify ``required`` as a keyword argument if you use it. + + +Parser defaults +^^^^^^^^^^^^^^^ + +.. method:: set_defaults(**kwargs) + + Most of the time, the attributes of the object returned by + :meth:`parse_args` will be fully determined by inspecting the command-line + args and the argument actions described in your :meth:`add_argument` calls. + However, sometimes it may be useful to add some additional attributes that + are determined without any inspection of the command-line. The + :meth:`set_defaults` method allows you to do this:: + + >>> parser = argparse.ArgumentParser() + >>> parser.add_argument('foo', type=int) + >>> parser.set_defaults(bar=42, baz='badger') + >>> parser.parse_args(['736']) + Namespace(bar=42, baz='badger', foo=736) + + Note that parser-level defaults always override argument-level defaults. So + if you set a parser-level default for a name that matches an argument, the + old argument default will no longer be used:: + + >>> parser = argparse.ArgumentParser() + >>> parser.add_argument('--foo', default='bar') + >>> parser.set_defaults(foo='spam') + >>> parser.parse_args([]) + Namespace(foo='spam') + + Parser-level defaults can be particularly useful when you're working with + multiple parsers. See the :meth:`add_subparsers` method for an example of + this type. + +.. method:: get_default(dest) + + Get the default value for a namespace attribute, as set by either + :meth:`add_argument` or by :meth:`set_defaults`:: + + >>> parser = argparse.ArgumentParser() + >>> parser.add_argument('--foo', default='badger') + >>> parser.get_default('foo') + 'badger' + + +Printing help +^^^^^^^^^^^^^ + +In most typical applications, :meth:`parse_args` will take care of formatting +and printing any usage or error messages. However, should you want to format or +print these on your own, several methods are available: + +.. method:: print_usage([file]): + + Print a brief description of how the :class:`ArgumentParser` should be + invoked on the command line. If ``file`` is not present, ``sys.stderr`` is + assumed. + +.. method:: print_help([file]): + + Print a help message, including the program usage and information about the + arguments registered with the :class:`ArgumentParser`. If ``file`` is not + present, ``sys.stderr`` is assumed. + +There are also variants of these methods that simply return a string instead of +printing it: + +.. method:: format_usage(): + + Return a string containing a brief description of how the + :class:`ArgumentParser` should be invoked on the command line. + +.. method:: format_help(): + + Return a string containing a help message, including the program usage and + information about the arguments registered with the :class:`ArgumentParser`. + + + +Partial parsing +^^^^^^^^^^^^^^^ + +.. method:: parse_known_args([args], [namespace]) + +Sometimes a script may only parse a few of the command line arguments, passing +the remaining arguments on to another script or program. In these cases, the +:meth:`parse_known_args` method can be useful. It works much like +:meth:`parse_args` except that it does not produce an error when extra +arguments are present. Instead, it returns a two item tuple containing the +populated namespace and the list of remaining argument strings. + +:: + + >>> parser = argparse.ArgumentParser() + >>> parser.add_argument('--foo', action='store_true') + >>> parser.add_argument('bar') + >>> parser.parse_known_args(['--foo', '--badger', 'BAR', 'spam']) + (Namespace(bar='BAR', foo=True), ['--badger', 'spam']) + + +Customizing file parsing +^^^^^^^^^^^^^^^^^^^^^^^^ + +.. method:: convert_arg_line_to_args(arg_line) + + Arguments that are read from a file (see the ``fromfile_prefix_chars`` + keyword argument to the :class:`ArgumentParser` constructor) are read one + argument per line. If you need fancier parsing, then you can subclass the + :class:`ArgumentParser` and override the :meth:`convert_arg_line_to_args` + method. + + This method takes a single argument ``arg_line`` which is a string read from + the argument file. It returns a list of arguments parsed from this string. + The method is called once per line read from the argument file, in order. + + A useful override of this method is one that treats each space-separated + word as an argument:: + + def convert_arg_line_to_args(self, arg_line): + for arg in arg_line.split(): + if not arg.strip(): + continue + yield arg + + +Upgrading optparse code +----------------------- + +Originally, the argparse module had attempted to maintain compatibility with + optparse. However, optparse was difficult to extend transparently, + particularly with the changes required to support the new ``nargs=`` + specifiers and better usage messges. When most everything in optparse had + either been copy-pasted over or monkey-patched, it no longer seemed practical + to try to maintain the backwards compatibility. + +A partial upgrade path from optparse to argparse: + +* Replace all ``add_option()`` calls with :meth:`add_argument` calls. + +* Replace ``options, args = parser.parse_args()`` with + ``args = parser.parse_args()`` and add additional :meth:`add_argument` calls + for the positional arguments. + +* Replace callback actions and the ``callback_*`` keyword arguments with + ``type`` or ``action`` arguments. + +* Replace string names for ``type`` keyword arguments with the corresponding + type objects (e.g. int, float, complex, etc). + +* Replace ``Values`` with ``Namespace`` and ``OptionError/OptionValueError`` + with ``ArgumentError``. + +* Replace strings with implicit arguments such as ``%default`` or ``%prog`` + with the standard python syntax to use dictionaries to format strings, that + is, ``%(default)s`` and ``%(prog)s``. Modified: python/trunk/Doc/library/getopt.rst ============================================================================== --- python/trunk/Doc/library/getopt.rst (original) +++ python/trunk/Doc/library/getopt.rst Tue Mar 2 09:38:09 2010 @@ -1,6 +1,6 @@ -:mod:`getopt` --- Parser for command line options -================================================= +:mod:`getopt` --- C-style parser for command line options +========================================================= .. module:: getopt :synopsis: Portable parser for command line options; support both short and long option Modified: python/trunk/Doc/library/optparse.rst ============================================================================== --- python/trunk/Doc/library/optparse.rst (original) +++ python/trunk/Doc/library/optparse.rst Tue Mar 2 09:38:09 2010 @@ -1,8 +1,8 @@ -:mod:`optparse` --- More powerful command line option parser -============================================================ +:mod:`optparse` --- Parser for command line options +=================================================== .. module:: optparse - :synopsis: More convenient, flexible, and powerful command-line parsing library. + :synopsis: Command-line option parsing library. .. moduleauthor:: Greg Ward Modified: python/trunk/Doc/tutorial/stdlib.rst ============================================================================== --- python/trunk/Doc/tutorial/stdlib.rst (original) +++ python/trunk/Doc/tutorial/stdlib.rst Tue Mar 2 09:38:09 2010 @@ -72,7 +72,7 @@ The :mod:`getopt` module processes *sys.argv* using the conventions of the Unix :func:`getopt` function. More powerful and flexible command line processing is -provided by the :mod:`optparse` module. +provided by the :mod:`argparse` module. .. _tut-stderr: Added: python/trunk/Lib/argparse.py ============================================================================== --- (empty file) +++ python/trunk/Lib/argparse.py Tue Mar 2 09:38:09 2010 @@ -0,0 +1,2353 @@ +# -*- coding: utf-8 -*- + +# Copyright ? 2006-2009 Steven J. Bethard . +# +# Licensed under the Apache License, Version 2.0 (the "License"); you may not +# use this file except in compliance with the License. You may obtain a copy +# of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT +# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the +# License for the specific language governing permissions and limitations +# under the License. + +"""Command-line parsing library + +This module is an optparse-inspired command-line parsing library that: + + - handles both optional and positional arguments + - produces highly informative usage messages + - supports parsers that dispatch to sub-parsers + +The following is a simple usage example that sums integers from the +command-line and writes the result to a file:: + + parser = argparse.ArgumentParser( + description='sum the integers at the command line') + parser.add_argument( + 'integers', metavar='int', nargs='+', type=int, + help='an integer to be summed') + parser.add_argument( + '--log', default=sys.stdout, type=argparse.FileType('w'), + help='the file where the sum should be written') + args = parser.parse_args() + args.log.write('%s' % sum(args.integers)) + args.log.close() + +The module contains the following public classes: + + - ArgumentParser -- The main entry point for command-line parsing. As the + example above shows, the add_argument() method is used to populate + the parser with actions for optional and positional arguments. Then + the parse_args() method is invoked to convert the args at the + command-line into an object with attributes. + + - ArgumentError -- The exception raised by ArgumentParser objects when + there are errors with the parser's actions. Errors raised while + parsing the command-line are caught by ArgumentParser and emitted + as command-line messages. + + - FileType -- A factory for defining types of files to be created. As the + example above shows, instances of FileType are typically passed as + the type= argument of add_argument() calls. + + - Action -- The base class for parser actions. Typically actions are + selected by passing strings like 'store_true' or 'append_const' to + the action= argument of add_argument(). However, for greater + customization of ArgumentParser actions, subclasses of Action may + be defined and passed as the action= argument. + + - HelpFormatter, RawDescriptionHelpFormatter, RawTextHelpFormatter, + ArgumentDefaultsHelpFormatter -- Formatter classes which + may be passed as the formatter_class= argument to the + ArgumentParser constructor. HelpFormatter is the default, + RawDescriptionHelpFormatter and RawTextHelpFormatter tell the parser + not to change the formatting for help text, and + ArgumentDefaultsHelpFormatter adds information about argument defaults + to the help. + +All other classes in this module are considered implementation details. +(Also note that HelpFormatter and RawDescriptionHelpFormatter are only +considered public as object names -- the API of the formatter objects is +still considered an implementation detail.) +""" + +__version__ = '1.1' +__all__ = [ + 'ArgumentParser', + 'ArgumentError', + 'Namespace', + 'Action', + 'FileType', + 'HelpFormatter', + 'RawDescriptionHelpFormatter', + 'RawTextHelpFormatter', + 'ArgumentDefaultsHelpFormatter', +] + + +import copy as _copy +import os as _os +import re as _re +import sys as _sys +import textwrap as _textwrap + +from gettext import gettext as _ + +try: + _set = set +except NameError: + from sets import Set as _set + +try: + _basestring = basestring +except NameError: + _basestring = str + +try: + _sorted = sorted +except NameError: + + def _sorted(iterable, reverse=False): + result = list(iterable) + result.sort() + if reverse: + result.reverse() + return result + + +def _callable(obj): + return hasattr(obj, '__call__') or hasattr(obj, '__bases__') + +# silence Python 2.6 buggy warnings about Exception.message +if _sys.version_info[:2] == (2, 6): + import warnings + warnings.filterwarnings( + action='ignore', + message='BaseException.message has been deprecated as of Python 2.6', + category=DeprecationWarning, + module='argparse') + + +SUPPRESS = '==SUPPRESS==' + +OPTIONAL = '?' +ZERO_OR_MORE = '*' +ONE_OR_MORE = '+' +PARSER = 'A...' +REMAINDER = '...' + +# ============================= +# Utility functions and classes +# ============================= + +class _AttributeHolder(object): + """Abstract base class that provides __repr__. + + The __repr__ method returns a string in the format:: + ClassName(attr=name, attr=name, ...) + The attributes are determined either by a class-level attribute, + '_kwarg_names', or by inspecting the instance __dict__. + """ + + def __repr__(self): + type_name = type(self).__name__ + arg_strings = [] + for arg in self._get_args(): + arg_strings.append(repr(arg)) + for name, value in self._get_kwargs(): + arg_strings.append('%s=%r' % (name, value)) + return '%s(%s)' % (type_name, ', '.join(arg_strings)) + + def _get_kwargs(self): + return _sorted(self.__dict__.items()) + + def _get_args(self): + return [] + + +def _ensure_value(namespace, name, value): + if getattr(namespace, name, None) is None: + setattr(namespace, name, value) + return getattr(namespace, name) + + +# =============== +# Formatting Help +# =============== + +class HelpFormatter(object): + """Formatter for generating usage messages and argument help strings. + + Only the name of this class is considered a public API. All the methods + provided by the class are considered an implementation detail. + """ + + def __init__(self, + prog, + indent_increment=2, + max_help_position=24, + width=None): + + # default setting for width + if width is None: + try: + width = int(_os.environ['COLUMNS']) + except (KeyError, ValueError): + width = 80 + width -= 2 + + self._prog = prog + self._indent_increment = indent_increment + self._max_help_position = max_help_position + self._width = width + + self._current_indent = 0 + self._level = 0 + self._action_max_length = 0 + + self._root_section = self._Section(self, None) + self._current_section = self._root_section + + self._whitespace_matcher = _re.compile(r'\s+') + self._long_break_matcher = _re.compile(r'\n\n\n+') + + # =============================== + # Section and indentation methods + # =============================== + def _indent(self): + self._current_indent += self._indent_increment + self._level += 1 + + def _dedent(self): + self._current_indent -= self._indent_increment + assert self._current_indent >= 0, 'Indent decreased below 0.' + self._level -= 1 + + class _Section(object): + + def __init__(self, formatter, parent, heading=None): + self.formatter = formatter + self.parent = parent + self.heading = heading + self.items = [] + + def format_help(self): + # format the indented section + if self.parent is not None: + self.formatter._indent() + join = self.formatter._join_parts + for func, args in self.items: + func(*args) + item_help = join([func(*args) for func, args in self.items]) + if self.parent is not None: + self.formatter._dedent() + + # return nothing if the section was empty + if not item_help: + return '' + + # add the heading if the section was non-empty + if self.heading is not SUPPRESS and self.heading is not None: + current_indent = self.formatter._current_indent + heading = '%*s%s:\n' % (current_indent, '', self.heading) + else: + heading = '' + + # join the section-initial newline, the heading and the help + return join(['\n', heading, item_help, '\n']) + + def _add_item(self, func, args): + self._current_section.items.append((func, args)) + + # ======================== + # Message building methods + # ======================== + def start_section(self, heading): + self._indent() + section = self._Section(self, self._current_section, heading) + self._add_item(section.format_help, []) + self._current_section = section + + def end_section(self): + self._current_section = self._current_section.parent + self._dedent() + + def add_text(self, text): + if text is not SUPPRESS and text is not None: + self._add_item(self._format_text, [text]) + + def add_usage(self, usage, actions, groups, prefix=None): + if usage is not SUPPRESS: + args = usage, actions, groups, prefix + self._add_item(self._format_usage, args) + + def add_argument(self, action): + if action.help is not SUPPRESS: + + # find all invocations + get_invocation = self._format_action_invocation + invocations = [get_invocation(action)] + for subaction in self._iter_indented_subactions(action): + invocations.append(get_invocation(subaction)) + + # update the maximum item length + invocation_length = max([len(s) for s in invocations]) + action_length = invocation_length + self._current_indent + self._action_max_length = max(self._action_max_length, + action_length) + + # add the item to the list + self._add_item(self._format_action, [action]) + + def add_arguments(self, actions): + for action in actions: + self.add_argument(action) + + # ======================= + # Help-formatting methods + # ======================= + def format_help(self): + help = self._root_section.format_help() + if help: + help = self._long_break_matcher.sub('\n\n', help) + help = help.strip('\n') + '\n' + return help + + def _join_parts(self, part_strings): + return ''.join([part + for part in part_strings + if part and part is not SUPPRESS]) + + def _format_usage(self, usage, actions, groups, prefix): + if prefix is None: + prefix = _('usage: ') + + # if usage is specified, use that + if usage is not None: + usage = usage % dict(prog=self._prog) + + # if no optionals or positionals are available, usage is just prog + elif usage is None and not actions: + usage = '%(prog)s' % dict(prog=self._prog) + + # if optionals and positionals are available, calculate usage + elif usage is None: + prog = '%(prog)s' % dict(prog=self._prog) + + # split optionals from positionals + optionals = [] + positionals = [] + for action in actions: + if action.option_strings: + optionals.append(action) + else: + positionals.append(action) + + # build full usage string + format = self._format_actions_usage + action_usage = format(optionals + positionals, groups) + usage = ' '.join([s for s in [prog, action_usage] if s]) + + # wrap the usage parts if it's too long + text_width = self._width - self._current_indent + if len(prefix) + len(usage) > text_width: + + # break usage into wrappable parts + part_regexp = r'\(.*?\)+|\[.*?\]+|\S+' + opt_usage = format(optionals, groups) + pos_usage = format(positionals, groups) + opt_parts = _re.findall(part_regexp, opt_usage) + pos_parts = _re.findall(part_regexp, pos_usage) + assert ' '.join(opt_parts) == opt_usage + assert ' '.join(pos_parts) == pos_usage + + # helper for wrapping lines + def get_lines(parts, indent, prefix=None): + lines = [] + line = [] + if prefix is not None: + line_len = len(prefix) - 1 + else: + line_len = len(indent) - 1 + for part in parts: + if line_len + 1 + len(part) > text_width: + lines.append(indent + ' '.join(line)) + line = [] + line_len = len(indent) - 1 + line.append(part) + line_len += len(part) + 1 + if line: + lines.append(indent + ' '.join(line)) + if prefix is not None: + lines[0] = lines[0][len(indent):] + return lines + + # if prog is short, follow it with optionals or positionals + if len(prefix) + len(prog) <= 0.75 * text_width: + indent = ' ' * (len(prefix) + len(prog) + 1) + if opt_parts: + lines = get_lines([prog] + opt_parts, indent, prefix) + lines.extend(get_lines(pos_parts, indent)) + elif pos_parts: + lines = get_lines([prog] + pos_parts, indent, prefix) + else: + lines = [prog] + + # if prog is long, put it on its own line + else: + indent = ' ' * len(prefix) + parts = opt_parts + pos_parts + lines = get_lines(parts, indent) + if len(lines) > 1: + lines = [] + lines.extend(get_lines(opt_parts, indent)) + lines.extend(get_lines(pos_parts, indent)) + lines = [prog] + lines + + # join lines into usage + usage = '\n'.join(lines) + + # prefix with 'usage:' + return '%s%s\n\n' % (prefix, usage) + + def _format_actions_usage(self, actions, groups): + # find group indices and identify actions in groups + group_actions = _set() + inserts = {} + for group in groups: + try: + start = actions.index(group._group_actions[0]) + except ValueError: + continue + else: + end = start + len(group._group_actions) + if actions[start:end] == group._group_actions: + for action in group._group_actions: + group_actions.add(action) + if not group.required: + inserts[start] = '[' + inserts[end] = ']' + else: + inserts[start] = '(' + inserts[end] = ')' + for i in range(start + 1, end): + inserts[i] = '|' + + # collect all actions format strings + parts = [] + for i, action in enumerate(actions): + + # suppressed arguments are marked with None + # remove | separators for suppressed arguments + if action.help is SUPPRESS: + parts.append(None) + if inserts.get(i) == '|': + inserts.pop(i) + elif inserts.get(i + 1) == '|': + inserts.pop(i + 1) + + # produce all arg strings + elif not action.option_strings: + part = self._format_args(action, action.dest) + + # if it's in a group, strip the outer [] + if action in group_actions: + if part[0] == '[' and part[-1] == ']': + part = part[1:-1] + + # add the action string to the list + parts.append(part) + + # produce the first way to invoke the option in brackets + else: + option_string = action.option_strings[0] + + # if the Optional doesn't take a value, format is: + # -s or --long + if action.nargs == 0: + part = '%s' % option_string + + # if the Optional takes a value, format is: + # -s ARGS or --long ARGS + else: + default = action.dest.upper() + args_string = self._format_args(action, default) + part = '%s %s' % (option_string, args_string) + + # make it look optional if it's not required or in a group + if not action.required and action not in group_actions: + part = '[%s]' % part + + # add the action string to the list + parts.append(part) + + # insert things at the necessary indices + for i in _sorted(inserts, reverse=True): + parts[i:i] = [inserts[i]] + + # join all the action items with spaces + text = ' '.join([item for item in parts if item is not None]) + + # clean up separators for mutually exclusive groups + open = r'[\[(]' + close = r'[\])]' + text = _re.sub(r'(%s) ' % open, r'\1', text) + text = _re.sub(r' (%s)' % close, r'\1', text) + text = _re.sub(r'%s *%s' % (open, close), r'', text) + text = _re.sub(r'\(([^|]*)\)', r'\1', text) + text = text.strip() + + # return the text + return text + + def _format_text(self, text): + if '%(prog)' in text: + text = text % dict(prog=self._prog) + text_width = self._width - self._current_indent + indent = ' ' * self._current_indent + return self._fill_text(text, text_width, indent) + '\n\n' + + def _format_action(self, action): + # determine the required width and the entry label + help_position = min(self._action_max_length + 2, + self._max_help_position) + help_width = self._width - help_position + action_width = help_position - self._current_indent - 2 + action_header = self._format_action_invocation(action) + + # ho nelp; start on same line and add a final newline + if not action.help: + tup = self._current_indent, '', action_header + action_header = '%*s%s\n' % tup + + # short action name; start on the same line and pad two spaces + elif len(action_header) <= action_width: + tup = self._current_indent, '', action_width, action_header + action_header = '%*s%-*s ' % tup + indent_first = 0 + + # long action name; start on the next line + else: + tup = self._current_indent, '', action_header + action_header = '%*s%s\n' % tup + indent_first = help_position + + # collect the pieces of the action help + parts = [action_header] + + # if there was help for the action, add lines of help text + if action.help: + help_text = self._expand_help(action) + help_lines = self._split_lines(help_text, help_width) + parts.append('%*s%s\n' % (indent_first, '', help_lines[0])) + for line in help_lines[1:]: + parts.append('%*s%s\n' % (help_position, '', line)) + + # or add a newline if the description doesn't end with one + elif not action_header.endswith('\n'): + parts.append('\n') + + # if there are any sub-actions, add their help as well + for subaction in self._iter_indented_subactions(action): + parts.append(self._format_action(subaction)) + + # return a single string + return self._join_parts(parts) + + def _format_action_invocation(self, action): + if not action.option_strings: + metavar, = self._metavar_formatter(action, action.dest)(1) + return metavar + + else: + parts = [] + + # if the Optional doesn't take a value, format is: + # -s, --long + if action.nargs == 0: + parts.extend(action.option_strings) + + # if the Optional takes a value, format is: + # -s ARGS, --long ARGS + else: + default = action.dest.upper() + args_string = self._format_args(action, default) + for option_string in action.option_strings: + parts.append('%s %s' % (option_string, args_string)) + + return ', '.join(parts) + + def _metavar_formatter(self, action, default_metavar): + if action.metavar is not None: + result = action.metavar + elif action.choices is not None: + choice_strs = [str(choice) for choice in action.choices] + result = '{%s}' % ','.join(choice_strs) + else: + result = default_metavar + + def format(tuple_size): + if isinstance(result, tuple): + return result + else: + return (result, ) * tuple_size + return format + + def _format_args(self, action, default_metavar): + get_metavar = self._metavar_formatter(action, default_metavar) + if action.nargs is None: + result = '%s' % get_metavar(1) + elif action.nargs == OPTIONAL: + result = '[%s]' % get_metavar(1) + elif action.nargs == ZERO_OR_MORE: + result = '[%s [%s ...]]' % get_metavar(2) + elif action.nargs == ONE_OR_MORE: + result = '%s [%s ...]' % get_metavar(2) + elif action.nargs == REMAINDER: + result = '...' + elif action.nargs == PARSER: + result = '%s ...' % get_metavar(1) + else: + formats = ['%s' for _ in range(action.nargs)] + result = ' '.join(formats) % get_metavar(action.nargs) + return result + + def _expand_help(self, action): + params = dict(vars(action), prog=self._prog) + for name in list(params): + if params[name] is SUPPRESS: + del params[name] + for name in list(params): + if hasattr(params[name], '__name__'): + params[name] = params[name].__name__ + if params.get('choices') is not None: + choices_str = ', '.join([str(c) for c in params['choices']]) + params['choices'] = choices_str + return self._get_help_string(action) % params + + def _iter_indented_subactions(self, action): + try: + get_subactions = action._get_subactions + except AttributeError: + pass + else: + self._indent() + for subaction in get_subactions(): + yield subaction + self._dedent() + + def _split_lines(self, text, width): + text = self._whitespace_matcher.sub(' ', text).strip() + return _textwrap.wrap(text, width) + + def _fill_text(self, text, width, indent): + text = self._whitespace_matcher.sub(' ', text).strip() + return _textwrap.fill(text, width, initial_indent=indent, + subsequent_indent=indent) + + def _get_help_string(self, action): + return action.help + + +class RawDescriptionHelpFormatter(HelpFormatter): + """Help message formatter which retains any formatting in descriptions. + + Only the name of this class is considered a public API. All the methods + provided by the class are considered an implementation detail. + """ + + def _fill_text(self, text, width, indent): + return ''.join([indent + line for line in text.splitlines(True)]) + + +class RawTextHelpFormatter(RawDescriptionHelpFormatter): + """Help message formatter which retains formatting of all help text. + + Only the name of this class is considered a public API. All the methods + provided by the class are considered an implementation detail. + """ + + def _split_lines(self, text, width): + return text.splitlines() + + +class ArgumentDefaultsHelpFormatter(HelpFormatter): + """Help message formatter which adds default values to argument help. + + Only the name of this class is considered a public API. All the methods + provided by the class are considered an implementation detail. + """ + + def _get_help_string(self, action): + help = action.help + if '%(default)' not in action.help: + if action.default is not SUPPRESS: + defaulting_nargs = [OPTIONAL, ZERO_OR_MORE] + if action.option_strings or action.nargs in defaulting_nargs: + help += ' (default: %(default)s)' + return help + + +# ===================== +# Options and Arguments +# ===================== + +def _get_action_name(argument): + if argument is None: + return None + elif argument.option_strings: + return '/'.join(argument.option_strings) + elif argument.metavar not in (None, SUPPRESS): + return argument.metavar + elif argument.dest not in (None, SUPPRESS): + return argument.dest + else: + return None + + +class ArgumentError(Exception): + """An error from creating or using an argument (optional or positional). + + The string value of this exception is the message, augmented with + information about the argument that caused it. + """ + + def __init__(self, argument, message): + self.argument_name = _get_action_name(argument) + self.message = message + + def __str__(self): + if self.argument_name is None: + format = '%(message)s' + else: + format = 'argument %(argument_name)s: %(message)s' + return format % dict(message=self.message, + argument_name=self.argument_name) + + +class ArgumentTypeError(Exception): + """An error from trying to convert a command line string to a type.""" + pass + + +# ============== +# Action classes +# ============== + +class Action(_AttributeHolder): + """Information about how to convert command line strings to Python objects. + + Action objects are used by an ArgumentParser to represent the information + needed to parse a single argument from one or more strings from the + command line. The keyword arguments to the Action constructor are also + all attributes of Action instances. + + Keyword Arguments: + + - option_strings -- A list of command-line option strings which + should be associated with this action. + + - dest -- The name of the attribute to hold the created object(s) + + - nargs -- The number of command-line arguments that should be + consumed. By default, one argument will be consumed and a single + value will be produced. Other values include: + - N (an integer) consumes N arguments (and produces a list) + - '?' consumes zero or one arguments + - '*' consumes zero or more arguments (and produces a list) + - '+' consumes one or more arguments (and produces a list) + Note that the difference between the default and nargs=1 is that + with the default, a single value will be produced, while with + nargs=1, a list containing a single value will be produced. + + - const -- The value to be produced if the option is specified and the + option uses an action that takes no values. + + - default -- The value to be produced if the option is not specified. + + - type -- The type which the command-line arguments should be converted + to, should be one of 'string', 'int', 'float', 'complex' or a + callable object that accepts a single string argument. If None, + 'string' is assumed. + + - choices -- A container of values that should be allowed. If not None, + after a command-line argument has been converted to the appropriate + type, an exception will be raised if it is not a member of this + collection. + + - required -- True if the action must always be specified at the + command line. This is only meaningful for optional command-line + arguments. + + - help -- The help string describing the argument. + + - metavar -- The name to be used for the option's argument with the + help string. If None, the 'dest' value will be used as the name. + """ + + def __init__(self, + option_strings, + dest, + nargs=None, + const=None, + default=None, + type=None, + choices=None, + required=False, + help=None, + metavar=None): + self.option_strings = option_strings + self.dest = dest + self.nargs = nargs + self.const = const + self.default = default + self.type = type + self.choices = choices + self.required = required + self.help = help + self.metavar = metavar + + def _get_kwargs(self): + names = [ + 'option_strings', + 'dest', + 'nargs', + 'const', + 'default', + 'type', + 'choices', + 'help', + 'metavar', + ] + return [(name, getattr(self, name)) for name in names] + + def __call__(self, parser, namespace, values, option_string=None): + raise NotImplementedError(_('.__call__() not defined')) + + +class _StoreAction(Action): + + def __init__(self, + option_strings, + dest, + nargs=None, + const=None, + default=None, + type=None, + choices=None, + required=False, + help=None, + metavar=None): + if nargs == 0: + raise ValueError('nargs for store actions must be > 0; if you ' + 'have nothing to store, actions such as store ' + 'true or store const may be more appropriate') + if const is not None and nargs != OPTIONAL: + raise ValueError('nargs must be %r to supply const' % OPTIONAL) + super(_StoreAction, self).__init__( + option_strings=option_strings, + dest=dest, + nargs=nargs, + const=const, + default=default, + type=type, + choices=choices, + required=required, + help=help, + metavar=metavar) + + def __call__(self, parser, namespace, values, option_string=None): + setattr(namespace, self.dest, values) + + +class _StoreConstAction(Action): + + def __init__(self, + option_strings, + dest, + const, + default=None, + required=False, + help=None, + metavar=None): + super(_StoreConstAction, self).__init__( + option_strings=option_strings, + dest=dest, + nargs=0, + const=const, + default=default, + required=required, + help=help) + + def __call__(self, parser, namespace, values, option_string=None): + setattr(namespace, self.dest, self.const) + + +class _StoreTrueAction(_StoreConstAction): + + def __init__(self, + option_strings, + dest, + default=False, + required=False, + help=None): + super(_StoreTrueAction, self).__init__( + option_strings=option_strings, + dest=dest, + const=True, + default=default, + required=required, + help=help) + + +class _StoreFalseAction(_StoreConstAction): + + def __init__(self, + option_strings, + dest, + default=True, + required=False, + help=None): + super(_StoreFalseAction, self).__init__( + option_strings=option_strings, + dest=dest, + const=False, + default=default, + required=required, + help=help) + + +class _AppendAction(Action): + + def __init__(self, + option_strings, + dest, + nargs=None, + const=None, + default=None, + type=None, + choices=None, + required=False, + help=None, + metavar=None): + if nargs == 0: + raise ValueError('nargs for append actions must be > 0; if arg ' + 'strings are not supplying the value to append, ' + 'the append const action may be more appropriate') + if const is not None and nargs != OPTIONAL: + raise ValueError('nargs must be %r to supply const' % OPTIONAL) + super(_AppendAction, self).__init__( + option_strings=option_strings, + dest=dest, + nargs=nargs, + const=const, + default=default, + type=type, + choices=choices, + required=required, + help=help, + metavar=metavar) + + def __call__(self, parser, namespace, values, option_string=None): + items = _copy.copy(_ensure_value(namespace, self.dest, [])) + items.append(values) + setattr(namespace, self.dest, items) + + +class _AppendConstAction(Action): + + def __init__(self, + option_strings, + dest, + const, + default=None, + required=False, + help=None, + metavar=None): + super(_AppendConstAction, self).__init__( + option_strings=option_strings, + dest=dest, + nargs=0, + const=const, + default=default, + required=required, + help=help, + metavar=metavar) + + def __call__(self, parser, namespace, values, option_string=None): + items = _copy.copy(_ensure_value(namespace, self.dest, [])) + items.append(self.const) + setattr(namespace, self.dest, items) + + +class _CountAction(Action): + + def __init__(self, + option_strings, + dest, + default=None, + required=False, + help=None): + super(_CountAction, self).__init__( + option_strings=option_strings, + dest=dest, + nargs=0, + default=default, + required=required, + help=help) + + def __call__(self, parser, namespace, values, option_string=None): + new_count = _ensure_value(namespace, self.dest, 0) + 1 + setattr(namespace, self.dest, new_count) + + +class _HelpAction(Action): + + def __init__(self, + option_strings, + dest=SUPPRESS, + default=SUPPRESS, + help=None): + super(_HelpAction, self).__init__( + option_strings=option_strings, + dest=dest, + default=default, + nargs=0, + help=help) + + def __call__(self, parser, namespace, values, option_string=None): + parser.print_help() + parser.exit() + + +class _VersionAction(Action): + + def __init__(self, + option_strings, + version=None, + dest=SUPPRESS, + default=SUPPRESS, + help=None): + super(_VersionAction, self).__init__( + option_strings=option_strings, + dest=dest, + default=default, + nargs=0, + help=help) + self.version = version + + def __call__(self, parser, namespace, values, option_string=None): + version = self.version + if version is None: + version = parser.version + formatter = parser._get_formatter() + formatter.add_text(version) + parser.exit(message=formatter.format_help()) + + +class _SubParsersAction(Action): + + class _ChoicesPseudoAction(Action): + + def __init__(self, name, help): + sup = super(_SubParsersAction._ChoicesPseudoAction, self) + sup.__init__(option_strings=[], dest=name, help=help) + + def __init__(self, + option_strings, + prog, + parser_class, + dest=SUPPRESS, + help=None, + metavar=None): + + self._prog_prefix = prog + self._parser_class = parser_class + self._name_parser_map = {} + self._choices_actions = [] + + super(_SubParsersAction, self).__init__( + option_strings=option_strings, + dest=dest, + nargs=PARSER, + choices=self._name_parser_map, + help=help, + metavar=metavar) + + def add_parser(self, name, **kwargs): + # set prog from the existing prefix + if kwargs.get('prog') is None: + kwargs['prog'] = '%s %s' % (self._prog_prefix, name) + + # create a pseudo-action to hold the choice help + if 'help' in kwargs: + help = kwargs.pop('help') + choice_action = self._ChoicesPseudoAction(name, help) + self._choices_actions.append(choice_action) + + # create the parser and add it to the map + parser = self._parser_class(**kwargs) + self._name_parser_map[name] = parser + return parser + + def _get_subactions(self): + return self._choices_actions + + def __call__(self, parser, namespace, values, option_string=None): + parser_name = values[0] + arg_strings = values[1:] + + # set the parser name if requested + if self.dest is not SUPPRESS: + setattr(namespace, self.dest, parser_name) + + # select the parser + try: + parser = self._name_parser_map[parser_name] + except KeyError: + tup = parser_name, ', '.join(self._name_parser_map) + msg = _('unknown parser %r (choices: %s)' % tup) + raise ArgumentError(self, msg) + + # parse all the remaining options into the namespace + parser.parse_args(arg_strings, namespace) + + +# ============== +# Type classes +# ============== + +class FileType(object): + """Factory for creating file object types + + Instances of FileType are typically passed as type= arguments to the + ArgumentParser add_argument() method. + + Keyword Arguments: + - mode -- A string indicating how the file is to be opened. Accepts the + same values as the builtin open() function. + - bufsize -- The file's desired buffer size. Accepts the same values as + the builtin open() function. + """ + + def __init__(self, mode='r', bufsize=None): + self._mode = mode + self._bufsize = bufsize + + def __call__(self, string): + # the special argument "-" means sys.std{in,out} + if string == '-': + if 'r' in self._mode: + return _sys.stdin + elif 'w' in self._mode: + return _sys.stdout + else: + msg = _('argument "-" with mode %r' % self._mode) + raise ValueError(msg) + + # all other arguments are used as file names + if self._bufsize: + return open(string, self._mode, self._bufsize) + else: + return open(string, self._mode) + + def __repr__(self): + args = [self._mode, self._bufsize] + args_str = ', '.join([repr(arg) for arg in args if arg is not None]) + return '%s(%s)' % (type(self).__name__, args_str) + +# =========================== +# Optional and Positional Parsing +# =========================== + +class Namespace(_AttributeHolder): + """Simple object for storing attributes. + + Implements equality by attribute names and values, and provides a simple + string representation. + """ + + def __init__(self, **kwargs): + for name in kwargs: + setattr(self, name, kwargs[name]) + + def __eq__(self, other): + return vars(self) == vars(other) + + def __ne__(self, other): + return not (self == other) + + def __contains__(self, key): + return key in self.__dict__ + + +class _ActionsContainer(object): + + def __init__(self, + description, + prefix_chars, + argument_default, + conflict_handler): + super(_ActionsContainer, self).__init__() + + self.description = description + self.argument_default = argument_default + self.prefix_chars = prefix_chars + self.conflict_handler = conflict_handler + + # set up registries + self._registries = {} + + # register actions + self.register('action', None, _StoreAction) + self.register('action', 'store', _StoreAction) + self.register('action', 'store_const', _StoreConstAction) + self.register('action', 'store_true', _StoreTrueAction) + self.register('action', 'store_false', _StoreFalseAction) + self.register('action', 'append', _AppendAction) + self.register('action', 'append_const', _AppendConstAction) + self.register('action', 'count', _CountAction) + self.register('action', 'help', _HelpAction) + self.register('action', 'version', _VersionAction) + self.register('action', 'parsers', _SubParsersAction) + + # raise an exception if the conflict handler is invalid + self._get_handler() + + # action storage + self._actions = [] + self._option_string_actions = {} + + # groups + self._action_groups = [] + self._mutually_exclusive_groups = [] + + # defaults storage + self._defaults = {} + + # determines whether an "option" looks like a negative number + self._negative_number_matcher = _re.compile(r'^-\d+$|^-\d*\.\d+$') + + # whether or not there are any optionals that look like negative + # numbers -- uses a list so it can be shared and edited + self._has_negative_number_optionals = [] + + # ==================== + # Registration methods + # ==================== + def register(self, registry_name, value, object): + registry = self._registries.setdefault(registry_name, {}) + registry[value] = object + + def _registry_get(self, registry_name, value, default=None): + return self._registries[registry_name].get(value, default) + + # ================================== + # Namespace default accessor methods + # ================================== + def set_defaults(self, **kwargs): + self._defaults.update(kwargs) + + # if these defaults match any existing arguments, replace + # the previous default on the object with the new one + for action in self._actions: + if action.dest in kwargs: + action.default = kwargs[action.dest] + + def get_default(self, dest): + for action in self._actions: + if action.dest == dest and action.default is not None: + return action.default + return self._defaults.get(dest, None) + + + # ======================= + # Adding argument actions + # ======================= + def add_argument(self, *args, **kwargs): + """ + add_argument(dest, ..., name=value, ...) + add_argument(option_string, option_string, ..., name=value, ...) + """ + + # if no positional args are supplied or only one is supplied and + # it doesn't look like an option string, parse a positional + # argument + chars = self.prefix_chars + if not args or len(args) == 1 and args[0][0] not in chars: + if args and 'dest' in kwargs: + raise ValueError('dest supplied twice for positional argument') + kwargs = self._get_positional_kwargs(*args, **kwargs) + + # otherwise, we're adding an optional argument + else: + kwargs = self._get_optional_kwargs(*args, **kwargs) + + # if no default was supplied, use the parser-level default + if 'default' not in kwargs: + dest = kwargs['dest'] + if dest in self._defaults: + kwargs['default'] = self._defaults[dest] + elif self.argument_default is not None: + kwargs['default'] = self.argument_default + + # create the action object, and add it to the parser + action_class = self._pop_action_class(kwargs) + if not _callable(action_class): + raise ValueError('unknown action "%s"' % action_class) + action = action_class(**kwargs) + + # raise an error if the action type is not callable + type_func = self._registry_get('type', action.type, action.type) + if not _callable(type_func): + raise ValueError('%r is not callable' % type_func) + + return self._add_action(action) + + def add_argument_group(self, *args, **kwargs): + group = _ArgumentGroup(self, *args, **kwargs) + self._action_groups.append(group) + return group + + def add_mutually_exclusive_group(self, **kwargs): + group = _MutuallyExclusiveGroup(self, **kwargs) + self._mutually_exclusive_groups.append(group) + return group + + def _add_action(self, action): + # resolve any conflicts + self._check_conflict(action) + + # add to actions list + self._actions.append(action) + action.container = self + + # index the action by any option strings it has + for option_string in action.option_strings: + self._option_string_actions[option_string] = action + + # set the flag if any option strings look like negative numbers + for option_string in action.option_strings: + if self._negative_number_matcher.match(option_string): + if not self._has_negative_number_optionals: + self._has_negative_number_optionals.append(True) + + # return the created action + return action + + def _remove_action(self, action): + self._actions.remove(action) + + def _add_container_actions(self, container): + # collect groups by titles + title_group_map = {} + for group in self._action_groups: + if group.title in title_group_map: + msg = _('cannot merge actions - two groups are named %r') + raise ValueError(msg % (group.title)) + title_group_map[group.title] = group + + # map each action to its group + group_map = {} + for group in container._action_groups: + + # if a group with the title exists, use that, otherwise + # create a new group matching the container's group + if group.title not in title_group_map: + title_group_map[group.title] = self.add_argument_group( + title=group.title, + description=group.description, + conflict_handler=group.conflict_handler) + + # map the actions to their new group + for action in group._group_actions: + group_map[action] = title_group_map[group.title] + + # add container's mutually exclusive groups + # NOTE: if add_mutually_exclusive_group ever gains title= and + # description= then this code will need to be expanded as above + for group in container._mutually_exclusive_groups: + mutex_group = self.add_mutually_exclusive_group( + required=group.required) + + # map the actions to their new mutex group + for action in group._group_actions: + group_map[action] = mutex_group + + # add all actions to this container or their group + for action in container._actions: + group_map.get(action, self)._add_action(action) + + def _get_positional_kwargs(self, dest, **kwargs): + # make sure required is not specified + if 'required' in kwargs: + msg = _("'required' is an invalid argument for positionals") + raise TypeError(msg) + + # mark positional arguments as required if at least one is + # always required + if kwargs.get('nargs') not in [OPTIONAL, ZERO_OR_MORE]: + kwargs['required'] = True + if kwargs.get('nargs') == ZERO_OR_MORE and 'default' not in kwargs: + kwargs['required'] = True + + # return the keyword arguments with no option strings + return dict(kwargs, dest=dest, option_strings=[]) + + def _get_optional_kwargs(self, *args, **kwargs): + # determine short and long option strings + option_strings = [] + long_option_strings = [] + for option_string in args: + # error on strings that don't start with an appropriate prefix + if not option_string[0] in self.prefix_chars: + msg = _('invalid option string %r: ' + 'must start with a character %r') + tup = option_string, self.prefix_chars + raise ValueError(msg % tup) + + # strings starting with two prefix characters are long options + option_strings.append(option_string) + if option_string[0] in self.prefix_chars: + if len(option_string) > 1: + if option_string[1] in self.prefix_chars: + long_option_strings.append(option_string) + + # infer destination, '--foo-bar' -> 'foo_bar' and '-x' -> 'x' + dest = kwargs.pop('dest', None) + if dest is None: + if long_option_strings: + dest_option_string = long_option_strings[0] + else: + dest_option_string = option_strings[0] + dest = dest_option_string.lstrip(self.prefix_chars) + if not dest: + msg = _('dest= is required for options like %r') + raise ValueError(msg % option_string) + dest = dest.replace('-', '_') + + # return the updated keyword arguments + return dict(kwargs, dest=dest, option_strings=option_strings) + + def _pop_action_class(self, kwargs, default=None): + action = kwargs.pop('action', default) + return self._registry_get('action', action, action) + + def _get_handler(self): + # determine function from conflict handler string + handler_func_name = '_handle_conflict_%s' % self.conflict_handler + try: + return getattr(self, handler_func_name) + except AttributeError: + msg = _('invalid conflict_resolution value: %r') + raise ValueError(msg % self.conflict_handler) + + def _check_conflict(self, action): + + # find all options that conflict with this option + confl_optionals = [] + for option_string in action.option_strings: + if option_string in self._option_string_actions: + confl_optional = self._option_string_actions[option_string] + confl_optionals.append((option_string, confl_optional)) + + # resolve any conflicts + if confl_optionals: + conflict_handler = self._get_handler() + conflict_handler(action, confl_optionals) + + def _handle_conflict_error(self, action, conflicting_actions): + message = _('conflicting option string(s): %s') + conflict_string = ', '.join([option_string + for option_string, action + in conflicting_actions]) + raise ArgumentError(action, message % conflict_string) + + def _handle_conflict_resolve(self, action, conflicting_actions): + + # remove all conflicting options + for option_string, action in conflicting_actions: + + # remove the conflicting option + action.option_strings.remove(option_string) + self._option_string_actions.pop(option_string, None) + + # if the option now has no option string, remove it from the + # container holding it + if not action.option_strings: + action.container._remove_action(action) + + +class _ArgumentGroup(_ActionsContainer): + + def __init__(self, container, title=None, description=None, **kwargs): + # add any missing keyword arguments by checking the container + update = kwargs.setdefault + update('conflict_handler', container.conflict_handler) + update('prefix_chars', container.prefix_chars) + update('argument_default', container.argument_default) + super_init = super(_ArgumentGroup, self).__init__ + super_init(description=description, **kwargs) + + # group attributes + self.title = title + self._group_actions = [] + + # share most attributes with the container + self._registries = container._registries + self._actions = container._actions + self._option_string_actions = container._option_string_actions + self._defaults = container._defaults + self._has_negative_number_optionals = \ + container._has_negative_number_optionals + + def _add_action(self, action): + action = super(_ArgumentGroup, self)._add_action(action) + self._group_actions.append(action) + return action + + def _remove_action(self, action): + super(_ArgumentGroup, self)._remove_action(action) + self._group_actions.remove(action) + + +class _MutuallyExclusiveGroup(_ArgumentGroup): + + def __init__(self, container, required=False): + super(_MutuallyExclusiveGroup, self).__init__(container) + self.required = required + self._container = container + + def _add_action(self, action): + if action.required: + msg = _('mutually exclusive arguments must be optional') + raise ValueError(msg) + action = self._container._add_action(action) + self._group_actions.append(action) + return action + + def _remove_action(self, action): + self._container._remove_action(action) + self._group_actions.remove(action) + + +class ArgumentParser(_AttributeHolder, _ActionsContainer): + """Object for parsing command line strings into Python objects. + + Keyword Arguments: + - prog -- The name of the program (default: sys.argv[0]) + - usage -- A usage message (default: auto-generated from arguments) + - description -- A description of what the program does + - epilog -- Text following the argument descriptions + - parents -- Parsers whose arguments should be copied into this one + - formatter_class -- HelpFormatter class for printing help messages + - prefix_chars -- Characters that prefix optional arguments + - fromfile_prefix_chars -- Characters that prefix files containing + additional arguments + - argument_default -- The default value for all arguments + - conflict_handler -- String indicating how to handle conflicts + - add_help -- Add a -h/-help option + """ + + def __init__(self, + prog=None, + usage=None, + description=None, + epilog=None, + version=None, + parents=[], + formatter_class=HelpFormatter, + prefix_chars='-', + fromfile_prefix_chars=None, + argument_default=None, + conflict_handler='error', + add_help=True): + + if version is not None: + import warnings + warnings.warn( + """The "version" argument to ArgumentParser is deprecated. """ + """Please use """ + """"add_argument(..., action='version', version="N", ...)" """ + """instead""", DeprecationWarning) + + superinit = super(ArgumentParser, self).__init__ + superinit(description=description, + prefix_chars=prefix_chars, + argument_default=argument_default, + conflict_handler=conflict_handler) + + # default setting for prog + if prog is None: + prog = _os.path.basename(_sys.argv[0]) + + self.prog = prog + self.usage = usage + self.epilog = epilog + self.version = version + self.formatter_class = formatter_class + self.fromfile_prefix_chars = fromfile_prefix_chars + self.add_help = add_help + + add_group = self.add_argument_group + self._positionals = add_group(_('positional arguments')) + self._optionals = add_group(_('optional arguments')) + self._subparsers = None + + # register types + def identity(string): + return string + self.register('type', None, identity) + + # add help and version arguments if necessary + # (using explicit default to override global argument_default) + if self.add_help: + self.add_argument( + '-h', '--help', action='help', default=SUPPRESS, + help=_('show this help message and exit')) + if self.version: + self.add_argument( + '-v', '--version', action='version', default=SUPPRESS, + version=self.version, + help=_("show program's version number and exit")) + + # add parent arguments and defaults + for parent in parents: + self._add_container_actions(parent) + try: + defaults = parent._defaults + except AttributeError: + pass + else: + self._defaults.update(defaults) + + # ======================= + # Pretty __repr__ methods + # ======================= + def _get_kwargs(self): + names = [ + 'prog', + 'usage', + 'description', + 'version', + 'formatter_class', + 'conflict_handler', + 'add_help', + ] + return [(name, getattr(self, name)) for name in names] + + # ================================== + # Optional/Positional adding methods + # ================================== + def add_subparsers(self, **kwargs): + if self._subparsers is not None: + self.error(_('cannot have multiple subparser arguments')) + + # add the parser class to the arguments if it's not present + kwargs.setdefault('parser_class', type(self)) + + if 'title' in kwargs or 'description' in kwargs: + title = _(kwargs.pop('title', 'subcommands')) + description = _(kwargs.pop('description', None)) + self._subparsers = self.add_argument_group(title, description) + else: + self._subparsers = self._positionals + + # prog defaults to the usage message of this parser, skipping + # optional arguments and with no "usage:" prefix + if kwargs.get('prog') is None: + formatter = self._get_formatter() + positionals = self._get_positional_actions() + groups = self._mutually_exclusive_groups + formatter.add_usage(self.usage, positionals, groups, '') + kwargs['prog'] = formatter.format_help().strip() + + # create the parsers action and add it to the positionals list + parsers_class = self._pop_action_class(kwargs, 'parsers') + action = parsers_class(option_strings=[], **kwargs) + self._subparsers._add_action(action) + + # return the created parsers action + return action + + def _add_action(self, action): + if action.option_strings: + self._optionals._add_action(action) + else: + self._positionals._add_action(action) + return action + + def _get_optional_actions(self): + return [action + for action in self._actions + if action.option_strings] + + def _get_positional_actions(self): + return [action + for action in self._actions + if not action.option_strings] + + # ===================================== + # Command line argument parsing methods + # ===================================== + def parse_args(self, args=None, namespace=None): + args, argv = self.parse_known_args(args, namespace) + if argv: + msg = _('unrecognized arguments: %s') + self.error(msg % ' '.join(argv)) + return args + + def parse_known_args(self, args=None, namespace=None): + # args default to the system args + if args is None: + args = _sys.argv[1:] + + # default Namespace built from parser defaults + if namespace is None: + namespace = Namespace() + + # add any action defaults that aren't present + for action in self._actions: + if action.dest is not SUPPRESS: + if not hasattr(namespace, action.dest): + if action.default is not SUPPRESS: + default = action.default + if isinstance(action.default, _basestring): + default = self._get_value(action, default) + setattr(namespace, action.dest, default) + + # add any parser defaults that aren't present + for dest in self._defaults: + if not hasattr(namespace, dest): + setattr(namespace, dest, self._defaults[dest]) + + # parse the arguments and exit if there are any errors + try: + return self._parse_known_args(args, namespace) + except ArgumentError: + err = _sys.exc_info()[1] + self.error(str(err)) + + def _parse_known_args(self, arg_strings, namespace): + # replace arg strings that are file references + if self.fromfile_prefix_chars is not None: + arg_strings = self._read_args_from_files(arg_strings) + + # map all mutually exclusive arguments to the other arguments + # they can't occur with + action_conflicts = {} + for mutex_group in self._mutually_exclusive_groups: + group_actions = mutex_group._group_actions + for i, mutex_action in enumerate(mutex_group._group_actions): + conflicts = action_conflicts.setdefault(mutex_action, []) + conflicts.extend(group_actions[:i]) + conflicts.extend(group_actions[i + 1:]) + + # find all option indices, and determine the arg_string_pattern + # which has an 'O' if there is an option at an index, + # an 'A' if there is an argument, or a '-' if there is a '--' + option_string_indices = {} + arg_string_pattern_parts = [] + arg_strings_iter = iter(arg_strings) + for i, arg_string in enumerate(arg_strings_iter): + + # all args after -- are non-options + if arg_string == '--': + arg_string_pattern_parts.append('-') + for arg_string in arg_strings_iter: + arg_string_pattern_parts.append('A') + + # otherwise, add the arg to the arg strings + # and note the index if it was an option + else: + option_tuple = self._parse_optional(arg_string) + if option_tuple is None: + pattern = 'A' + else: + option_string_indices[i] = option_tuple + pattern = 'O' + arg_string_pattern_parts.append(pattern) + + # join the pieces together to form the pattern + arg_strings_pattern = ''.join(arg_string_pattern_parts) + + # converts arg strings to the appropriate and then takes the action + seen_actions = _set() + seen_non_default_actions = _set() + + def take_action(action, argument_strings, option_string=None): + seen_actions.add(action) + argument_values = self._get_values(action, argument_strings) + + # error if this argument is not allowed with other previously + # seen arguments, assuming that actions that use the default + # value don't really count as "present" + if argument_values is not action.default: + seen_non_default_actions.add(action) + for conflict_action in action_conflicts.get(action, []): + if conflict_action in seen_non_default_actions: + msg = _('not allowed with argument %s') + action_name = _get_action_name(conflict_action) + raise ArgumentError(action, msg % action_name) + + # take the action if we didn't receive a SUPPRESS value + # (e.g. from a default) + if argument_values is not SUPPRESS: + action(self, namespace, argument_values, option_string) + + # function to convert arg_strings into an optional action + def consume_optional(start_index): + + # get the optional identified at this index + option_tuple = option_string_indices[start_index] + action, option_string, explicit_arg = option_tuple + + # identify additional optionals in the same arg string + # (e.g. -xyz is the same as -x -y -z if no args are required) + match_argument = self._match_argument + action_tuples = [] + while True: + + # if we found no optional action, skip it + if action is None: + extras.append(arg_strings[start_index]) + return start_index + 1 + + # if there is an explicit argument, try to match the + # optional's string arguments to only this + if explicit_arg is not None: + arg_count = match_argument(action, 'A') + + # if the action is a single-dash option and takes no + # arguments, try to parse more single-dash options out + # of the tail of the option string + chars = self.prefix_chars + if arg_count == 0 and option_string[1] not in chars: + action_tuples.append((action, [], option_string)) + for char in self.prefix_chars: + option_string = char + explicit_arg[0] + explicit_arg = explicit_arg[1:] or None + optionals_map = self._option_string_actions + if option_string in optionals_map: + action = optionals_map[option_string] + break + else: + msg = _('ignored explicit argument %r') + raise ArgumentError(action, msg % explicit_arg) + + # if the action expect exactly one argument, we've + # successfully matched the option; exit the loop + elif arg_count == 1: + stop = start_index + 1 + args = [explicit_arg] + action_tuples.append((action, args, option_string)) + break + + # error if a double-dash option did not use the + # explicit argument + else: + msg = _('ignored explicit argument %r') + raise ArgumentError(action, msg % explicit_arg) + + # if there is no explicit argument, try to match the + # optional's string arguments with the following strings + # if successful, exit the loop + else: + start = start_index + 1 + selected_patterns = arg_strings_pattern[start:] + arg_count = match_argument(action, selected_patterns) + stop = start + arg_count + args = arg_strings[start:stop] + action_tuples.append((action, args, option_string)) + break + + # add the Optional to the list and return the index at which + # the Optional's string args stopped + assert action_tuples + for action, args, option_string in action_tuples: + take_action(action, args, option_string) + return stop + + # the list of Positionals left to be parsed; this is modified + # by consume_positionals() + positionals = self._get_positional_actions() + + # function to convert arg_strings into positional actions + def consume_positionals(start_index): + # match as many Positionals as possible + match_partial = self._match_arguments_partial + selected_pattern = arg_strings_pattern[start_index:] + arg_counts = match_partial(positionals, selected_pattern) + + # slice off the appropriate arg strings for each Positional + # and add the Positional and its args to the list + for action, arg_count in zip(positionals, arg_counts): + args = arg_strings[start_index: start_index + arg_count] + start_index += arg_count + take_action(action, args) + + # slice off the Positionals that we just parsed and return the + # index at which the Positionals' string args stopped + positionals[:] = positionals[len(arg_counts):] + return start_index + + # consume Positionals and Optionals alternately, until we have + # passed the last option string + extras = [] + start_index = 0 + if option_string_indices: + max_option_string_index = max(option_string_indices) + else: + max_option_string_index = -1 + while start_index <= max_option_string_index: + + # consume any Positionals preceding the next option + next_option_string_index = min([ + index + for index in option_string_indices + if index >= start_index]) + if start_index != next_option_string_index: + positionals_end_index = consume_positionals(start_index) + + # only try to parse the next optional if we didn't consume + # the option string during the positionals parsing + if positionals_end_index > start_index: + start_index = positionals_end_index + continue + else: + start_index = positionals_end_index + + # if we consumed all the positionals we could and we're not + # at the index of an option string, there were extra arguments + if start_index not in option_string_indices: + strings = arg_strings[start_index:next_option_string_index] + extras.extend(strings) + start_index = next_option_string_index + + # consume the next optional and any arguments for it + start_index = consume_optional(start_index) + + # consume any positionals following the last Optional + stop_index = consume_positionals(start_index) + + # if we didn't consume all the argument strings, there were extras + extras.extend(arg_strings[stop_index:]) + + # if we didn't use all the Positional objects, there were too few + # arg strings supplied. + if positionals: + self.error(_('too few arguments')) + + # make sure all required actions were present + for action in self._actions: + if action.required: + if action not in seen_actions: + name = _get_action_name(action) + self.error(_('argument %s is required') % name) + + # make sure all required groups had one option present + for group in self._mutually_exclusive_groups: + if group.required: + for action in group._group_actions: + if action in seen_non_default_actions: + break + + # if no actions were used, report the error + else: + names = [_get_action_name(action) + for action in group._group_actions + if action.help is not SUPPRESS] + msg = _('one of the arguments %s is required') + self.error(msg % ' '.join(names)) + + # return the updated namespace and the extra arguments + return namespace, extras + + def _read_args_from_files(self, arg_strings): + # expand arguments referencing files + new_arg_strings = [] + for arg_string in arg_strings: + + # for regular arguments, just add them back into the list + if arg_string[0] not in self.fromfile_prefix_chars: + new_arg_strings.append(arg_string) + + # replace arguments referencing files with the file content + else: + try: + args_file = open(arg_string[1:]) + try: + arg_strings = [] + for arg_line in args_file.read().splitlines(): + for arg in self.convert_arg_line_to_args(arg_line): + arg_strings.append(arg) + arg_strings = self._read_args_from_files(arg_strings) + new_arg_strings.extend(arg_strings) + finally: + args_file.close() + except IOError: + err = _sys.exc_info()[1] + self.error(str(err)) + + # return the modified argument list + return new_arg_strings + + def convert_arg_line_to_args(self, arg_line): + return [arg_line] + + def _match_argument(self, action, arg_strings_pattern): + # match the pattern for this action to the arg strings + nargs_pattern = self._get_nargs_pattern(action) + match = _re.match(nargs_pattern, arg_strings_pattern) + + # raise an exception if we weren't able to find a match + if match is None: + nargs_errors = { + None: _('expected one argument'), + OPTIONAL: _('expected at most one argument'), + ONE_OR_MORE: _('expected at least one argument'), + } + default = _('expected %s argument(s)') % action.nargs + msg = nargs_errors.get(action.nargs, default) + raise ArgumentError(action, msg) + + # return the number of arguments matched + return len(match.group(1)) + + def _match_arguments_partial(self, actions, arg_strings_pattern): + # progressively shorten the actions list by slicing off the + # final actions until we find a match + result = [] + for i in range(len(actions), 0, -1): + actions_slice = actions[:i] + pattern = ''.join([self._get_nargs_pattern(action) + for action in actions_slice]) + match = _re.match(pattern, arg_strings_pattern) + if match is not None: + result.extend([len(string) for string in match.groups()]) + break + + # return the list of arg string counts + return result + + def _parse_optional(self, arg_string): + # if it's an empty string, it was meant to be a positional + if not arg_string: + return None + + # if it doesn't start with a prefix, it was meant to be positional + if not arg_string[0] in self.prefix_chars: + return None + + # if the option string is present in the parser, return the action + if arg_string in self._option_string_actions: + action = self._option_string_actions[arg_string] + return action, arg_string, None + + # if it's just a single character, it was meant to be positional + if len(arg_string) == 1: + return None + + # if the option string before the "=" is present, return the action + if '=' in arg_string: + option_string, explicit_arg = arg_string.split('=', 1) + if option_string in self._option_string_actions: + action = self._option_string_actions[option_string] + return action, option_string, explicit_arg + + # search through all possible prefixes of the option string + # and all actions in the parser for possible interpretations + option_tuples = self._get_option_tuples(arg_string) + + # if multiple actions match, the option string was ambiguous + if len(option_tuples) > 1: + options = ', '.join([option_string + for action, option_string, explicit_arg in option_tuples]) + tup = arg_string, options + self.error(_('ambiguous option: %s could match %s') % tup) + + # if exactly one action matched, this segmentation is good, + # so return the parsed action + elif len(option_tuples) == 1: + option_tuple, = option_tuples + return option_tuple + + # if it was not found as an option, but it looks like a negative + # number, it was meant to be positional + # unless there are negative-number-like options + if self._negative_number_matcher.match(arg_string): + if not self._has_negative_number_optionals: + return None + + # if it contains a space, it was meant to be a positional + if ' ' in arg_string: + return None + + # it was meant to be an optional but there is no such option + # in this parser (though it might be a valid option in a subparser) + return None, arg_string, None + + def _get_option_tuples(self, option_string): + result = [] + + # option strings starting with two prefix characters are only + # split at the '=' + chars = self.prefix_chars + if option_string[0] in chars and option_string[1] in chars: + if '=' in option_string: + option_prefix, explicit_arg = option_string.split('=', 1) + else: + option_prefix = option_string + explicit_arg = None + for option_string in self._option_string_actions: + if option_string.startswith(option_prefix): + action = self._option_string_actions[option_string] + tup = action, option_string, explicit_arg + result.append(tup) + + # single character options can be concatenated with their arguments + # but multiple character options always have to have their argument + # separate + elif option_string[0] in chars and option_string[1] not in chars: + option_prefix = option_string + explicit_arg = None + short_option_prefix = option_string[:2] + short_explicit_arg = option_string[2:] + + for option_string in self._option_string_actions: + if option_string == short_option_prefix: + action = self._option_string_actions[option_string] + tup = action, option_string, short_explicit_arg + result.append(tup) + elif option_string.startswith(option_prefix): + action = self._option_string_actions[option_string] + tup = action, option_string, explicit_arg + result.append(tup) + + # shouldn't ever get here + else: + self.error(_('unexpected option string: %s') % option_string) + + # return the collected option tuples + return result + + def _get_nargs_pattern(self, action): + # in all examples below, we have to allow for '--' args + # which are represented as '-' in the pattern + nargs = action.nargs + + # the default (None) is assumed to be a single argument + if nargs is None: + nargs_pattern = '(-*A-*)' + + # allow zero or one arguments + elif nargs == OPTIONAL: + nargs_pattern = '(-*A?-*)' + + # allow zero or more arguments + elif nargs == ZERO_OR_MORE: + nargs_pattern = '(-*[A-]*)' + + # allow one or more arguments + elif nargs == ONE_OR_MORE: + nargs_pattern = '(-*A[A-]*)' + + # allow any number of options or arguments + elif nargs == REMAINDER: + nargs_pattern = '([-AO]*)' + + # allow one argument followed by any number of options or arguments + elif nargs == PARSER: + nargs_pattern = '(-*A[-AO]*)' + + # all others should be integers + else: + nargs_pattern = '(-*%s-*)' % '-*'.join('A' * nargs) + + # if this is an optional action, -- is not allowed + if action.option_strings: + nargs_pattern = nargs_pattern.replace('-*', '') + nargs_pattern = nargs_pattern.replace('-', '') + + # return the pattern + return nargs_pattern + + # ======================== + # Value conversion methods + # ======================== + def _get_values(self, action, arg_strings): + # for everything but PARSER args, strip out '--' + if action.nargs not in [PARSER, REMAINDER]: + arg_strings = [s for s in arg_strings if s != '--'] + + # optional argument produces a default when not present + if not arg_strings and action.nargs == OPTIONAL: + if action.option_strings: + value = action.const + else: + value = action.default + if isinstance(value, _basestring): + value = self._get_value(action, value) + self._check_value(action, value) + + # when nargs='*' on a positional, if there were no command-line + # args, use the default if it is anything other than None + elif (not arg_strings and action.nargs == ZERO_OR_MORE and + not action.option_strings): + if action.default is not None: + value = action.default + else: + value = arg_strings + self._check_value(action, value) + + # single argument or optional argument produces a single value + elif len(arg_strings) == 1 and action.nargs in [None, OPTIONAL]: + arg_string, = arg_strings + value = self._get_value(action, arg_string) + self._check_value(action, value) + + # REMAINDER arguments convert all values, checking none + elif action.nargs == REMAINDER: + value = [self._get_value(action, v) for v in arg_strings] + + # PARSER arguments convert all values, but check only the first + elif action.nargs == PARSER: + value = [self._get_value(action, v) for v in arg_strings] + self._check_value(action, value[0]) + + # all other types of nargs produce a list + else: + value = [self._get_value(action, v) for v in arg_strings] + for v in value: + self._check_value(action, v) + + # return the converted value + return value + + def _get_value(self, action, arg_string): + type_func = self._registry_get('type', action.type, action.type) + if not _callable(type_func): + msg = _('%r is not callable') + raise ArgumentError(action, msg % type_func) + + # convert the value to the appropriate type + try: + result = type_func(arg_string) + + # ArgumentTypeErrors indicate errors + except ArgumentTypeError: + name = getattr(action.type, '__name__', repr(action.type)) + msg = str(_sys.exc_info()[1]) + raise ArgumentError(action, msg) + + # TypeErrors or ValueErrors also indicate errors + except (TypeError, ValueError): + name = getattr(action.type, '__name__', repr(action.type)) + msg = _('invalid %s value: %r') + raise ArgumentError(action, msg % (name, arg_string)) + + # return the converted value + return result + + def _check_value(self, action, value): + # converted value must be one of the choices (if specified) + if action.choices is not None and value not in action.choices: + tup = value, ', '.join(map(repr, action.choices)) + msg = _('invalid choice: %r (choose from %s)') % tup + raise ArgumentError(action, msg) + + # ======================= + # Help-formatting methods + # ======================= + def format_usage(self): + formatter = self._get_formatter() + formatter.add_usage(self.usage, self._actions, + self._mutually_exclusive_groups) + return formatter.format_help() + + def format_help(self): + formatter = self._get_formatter() + + # usage + formatter.add_usage(self.usage, self._actions, + self._mutually_exclusive_groups) + + # description + formatter.add_text(self.description) + + # positionals, optionals and user-defined groups + for action_group in self._action_groups: + formatter.start_section(action_group.title) + formatter.add_text(action_group.description) + formatter.add_arguments(action_group._group_actions) + formatter.end_section() + + # epilog + formatter.add_text(self.epilog) + + # determine help from format above + return formatter.format_help() + + def format_version(self): + import warnings + warnings.warn( + 'The format_version method is deprecated -- the "version" ' + 'argument to ArgumentParser is no longer supported.', + DeprecationWarning) + formatter = self._get_formatter() + formatter.add_text(self.version) + return formatter.format_help() + + def _get_formatter(self): + return self.formatter_class(prog=self.prog) + + # ===================== + # Help-printing methods + # ===================== + def print_usage(self, file=None): + if file is None: + file = _sys.stdout + self._print_message(self.format_usage(), file) + + def print_help(self, file=None): + if file is None: + file = _sys.stdout + self._print_message(self.format_help(), file) + + def print_version(self, file=None): + import warnings + warnings.warn( + 'The print_version method is deprecated -- the "version" ' + 'argument to ArgumentParser is no longer supported.', + DeprecationWarning) + self._print_message(self.format_version(), file) + + def _print_message(self, message, file=None): + if message: + if file is None: + file = _sys.stderr + file.write(message) + + # =============== + # Exiting methods + # =============== + def exit(self, status=0, message=None): + if message: + self._print_message(message, _sys.stderr) + _sys.exit(status) + + def error(self, message): + """error(message: string) + + Prints a usage message incorporating the message to stderr and + exits. + + If you override this in a subclass, it should not return -- it + should either exit or raise an exception. + """ + self.print_usage(_sys.stderr) + self.exit(2, _('%s: error: %s\n') % (self.prog, message)) Added: python/trunk/Lib/test/test_argparse.py ============================================================================== --- (empty file) +++ python/trunk/Lib/test/test_argparse.py Tue Mar 2 09:38:09 2010 @@ -0,0 +1,4206 @@ +# -*- coding: utf-8 -*- + +# Copyright ? 2006-2009 Steven J. Bethard . +# +# Licensed under the Apache License, Version 2.0 (the "License"); you may not +# use this file except in compliance with the License. You may obtain a copy +# of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT +# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the +# License for the specific language governing permissions and limitations +# under the License. + +import codecs +import os +import shutil +import sys +import textwrap +import tempfile +import unittest +import argparse + +try: + from StringIO import StringIO +except ImportError: + from io import StringIO + +try: + set +except NameError: + from sets import Set as set + +try: + sorted +except NameError: + + def sorted(iterable, reverse=False): + result = list(iterable) + result.sort() + if reverse: + result.reverse() + return result + +# silence Python 2.6 buggy warnings about Exception.message +if sys.version_info[:2] == (2, 6): + import warnings + warnings.filterwarnings( + action='ignore', + message='BaseException.message has been deprecated as of Python 2.6', + category=DeprecationWarning) + +# silence warnings about version argument - these are expected +import warnings +warnings.filterwarnings( + action='ignore', + message='The "version" argument to ArgumentParser is deprecated.', + category=DeprecationWarning) +warnings.filterwarnings( + action='ignore', + message='The format_version method is deprecated', + category=DeprecationWarning) +warnings.filterwarnings( + action='ignore', + message='The print_version method is deprecated', + category=DeprecationWarning) + + +class TestCase(unittest.TestCase): + + def assertEqual(self, obj1, obj2): + if obj1 != obj2: + print('') + print(repr(obj1)) + print(repr(obj2)) + print(obj1) + print(obj2) + super(TestCase, self).assertEqual(obj1, obj2) + + +class TempDirMixin(object): + + def setUp(self): + self.temp_dir = tempfile.mkdtemp() + self.old_dir = os.getcwd() + os.chdir(self.temp_dir) + + def tearDown(self): + os.chdir(self.old_dir) + while True: + try: + shutil.rmtree(self.temp_dir) + except WindowsError: + continue + else: + break + + +class Sig(object): + + def __init__(self, *args, **kwargs): + self.args = args + self.kwargs = kwargs + + +class NS(object): + + def __init__(self, **kwargs): + self.__dict__.update(kwargs) + + def __repr__(self): + sorted_items = sorted(self.__dict__.items()) + kwarg_str = ', '.join(['%s=%r' % tup for tup in sorted_items]) + return '%s(%s)' % (type(self).__name__, kwarg_str) + + def __eq__(self, other): + return vars(self) == vars(other) + + def __ne__(self, other): + return not (self == other) + + +class ArgumentParserError(Exception): + + def __init__(self, message, stdout=None, stderr=None, error_code=None): + Exception.__init__(self, message, stdout, stderr) + self.message = message + self.stdout = stdout + self.stderr = stderr + self.error_code = error_code + + +def stderr_to_parser_error(parse_args, *args, **kwargs): + # if this is being called recursively and stderr or stdout is already being + # redirected, simply call the function and let the enclosing function + # catch the exception + if isinstance(sys.stderr, StringIO) or isinstance(sys.stdout, StringIO): + return parse_args(*args, **kwargs) + + # if this is not being called recursively, redirect stderr and + # use it as the ArgumentParserError message + old_stdout = sys.stdout + old_stderr = sys.stderr + sys.stdout = StringIO() + sys.stderr = StringIO() + try: + try: + result = parse_args(*args, **kwargs) + for key in list(vars(result)): + if getattr(result, key) is sys.stdout: + setattr(result, key, old_stdout) + if getattr(result, key) is sys.stderr: + setattr(result, key, old_stderr) + return result + except SystemExit: + code = sys.exc_info()[1].code + stdout = sys.stdout.getvalue() + stderr = sys.stderr.getvalue() + raise ArgumentParserError("SystemExit", stdout, stderr, code) + finally: + sys.stdout = old_stdout + sys.stderr = old_stderr + + +class ErrorRaisingArgumentParser(argparse.ArgumentParser): + + def parse_args(self, *args, **kwargs): + parse_args = super(ErrorRaisingArgumentParser, self).parse_args + return stderr_to_parser_error(parse_args, *args, **kwargs) + + def exit(self, *args, **kwargs): + exit = super(ErrorRaisingArgumentParser, self).exit + return stderr_to_parser_error(exit, *args, **kwargs) + + def error(self, *args, **kwargs): + error = super(ErrorRaisingArgumentParser, self).error + return stderr_to_parser_error(error, *args, **kwargs) + + +class ParserTesterMetaclass(type): + """Adds parser tests using the class attributes. + + Classes of this type should specify the following attributes: + + argument_signatures -- a list of Sig objects which specify + the signatures of Argument objects to be created + failures -- a list of args lists that should cause the parser + to fail + successes -- a list of (initial_args, options, remaining_args) tuples + where initial_args specifies the string args to be parsed, + options is a dict that should match the vars() of the options + parsed out of initial_args, and remaining_args should be any + remaining unparsed arguments + """ + + def __init__(cls, name, bases, bodydict): + if name == 'ParserTestCase': + return + + # default parser signature is empty + if not hasattr(cls, 'parser_signature'): + cls.parser_signature = Sig() + if not hasattr(cls, 'parser_class'): + cls.parser_class = ErrorRaisingArgumentParser + + # --------------------------------------- + # functions for adding optional arguments + # --------------------------------------- + def no_groups(parser, argument_signatures): + """Add all arguments directly to the parser""" + for sig in argument_signatures: + parser.add_argument(*sig.args, **sig.kwargs) + + def one_group(parser, argument_signatures): + """Add all arguments under a single group in the parser""" + group = parser.add_argument_group('foo') + for sig in argument_signatures: + group.add_argument(*sig.args, **sig.kwargs) + + def many_groups(parser, argument_signatures): + """Add each argument in its own group to the parser""" + for i, sig in enumerate(argument_signatures): + group = parser.add_argument_group('foo:%i' % i) + group.add_argument(*sig.args, **sig.kwargs) + + # -------------------------- + # functions for parsing args + # -------------------------- + def listargs(parser, args): + """Parse the args by passing in a list""" + return parser.parse_args(args) + + def sysargs(parser, args): + """Parse the args by defaulting to sys.argv""" + old_sys_argv = sys.argv + sys.argv = [old_sys_argv[0]] + args + try: + return parser.parse_args() + finally: + sys.argv = old_sys_argv + + # class that holds the combination of one optional argument + # addition method and one arg parsing method + class AddTests(object): + + def __init__(self, tester_cls, add_arguments, parse_args): + self._add_arguments = add_arguments + self._parse_args = parse_args + + add_arguments_name = self._add_arguments.__name__ + parse_args_name = self._parse_args.__name__ + for test_func in [self.test_failures, self.test_successes]: + func_name = test_func.__name__ + names = func_name, add_arguments_name, parse_args_name + test_name = '_'.join(names) + + def wrapper(self, test_func=test_func): + test_func(self) + try: + wrapper.__name__ = test_name + except TypeError: + pass + setattr(tester_cls, test_name, wrapper) + + def _get_parser(self, tester): + args = tester.parser_signature.args + kwargs = tester.parser_signature.kwargs + parser = tester.parser_class(*args, **kwargs) + self._add_arguments(parser, tester.argument_signatures) + return parser + + def test_failures(self, tester): + parser = self._get_parser(tester) + for args_str in tester.failures: + args = args_str.split() + raises = tester.assertRaises + raises(ArgumentParserError, parser.parse_args, args) + + def test_successes(self, tester): + parser = self._get_parser(tester) + for args, expected_ns in tester.successes: + if isinstance(args, str): + args = args.split() + result_ns = self._parse_args(parser, args) + tester.assertEqual(expected_ns, result_ns) + + # add tests for each combination of an optionals adding method + # and an arg parsing method + for add_arguments in [no_groups, one_group, many_groups]: + for parse_args in [listargs, sysargs]: + AddTests(cls, add_arguments, parse_args) + +bases = TestCase, +ParserTestCase = ParserTesterMetaclass('ParserTestCase', bases, {}) + +# =============== +# Optionals tests +# =============== + +class TestOptionalsSingleDash(ParserTestCase): + """Test an Optional with a single-dash option string""" + + argument_signatures = [Sig('-x')] + failures = ['-x', 'a', '--foo', '-x --foo', '-x -y'] + successes = [ + ('', NS(x=None)), + ('-x a', NS(x='a')), + ('-xa', NS(x='a')), + ('-x -1', NS(x='-1')), + ('-x-1', NS(x='-1')), + ] + + +class TestOptionalsSingleDashCombined(ParserTestCase): + """Test an Optional with a single-dash option string""" + + argument_signatures = [ + Sig('-x', action='store_true'), + Sig('-yyy', action='store_const', const=42), + Sig('-z'), + ] + failures = ['a', '--foo', '-xa', '-x --foo', '-x -z', '-z -x', + '-yx', '-yz a', '-yyyx', '-yyyza', '-xyza'] + successes = [ + ('', NS(x=False, yyy=None, z=None)), + ('-x', NS(x=True, yyy=None, z=None)), + ('-za', NS(x=False, yyy=None, z='a')), + ('-z a', NS(x=False, yyy=None, z='a')), + ('-xza', NS(x=True, yyy=None, z='a')), + ('-xz a', NS(x=True, yyy=None, z='a')), + ('-x -za', NS(x=True, yyy=None, z='a')), + ('-x -z a', NS(x=True, yyy=None, z='a')), + ('-y', NS(x=False, yyy=42, z=None)), + ('-yyy', NS(x=False, yyy=42, z=None)), + ('-x -yyy -za', NS(x=True, yyy=42, z='a')), + ('-x -yyy -z a', NS(x=True, yyy=42, z='a')), + ] + + +class TestOptionalsSingleDashLong(ParserTestCase): + """Test an Optional with a multi-character single-dash option string""" + + argument_signatures = [Sig('-foo')] + failures = ['-foo', 'a', '--foo', '-foo --foo', '-foo -y', '-fooa'] + successes = [ + ('', NS(foo=None)), + ('-foo a', NS(foo='a')), + ('-foo -1', NS(foo='-1')), + ('-fo a', NS(foo='a')), + ('-f a', NS(foo='a')), + ] + + +class TestOptionalsSingleDashSubsetAmbiguous(ParserTestCase): + """Test Optionals where option strings are subsets of each other""" + + argument_signatures = [Sig('-f'), Sig('-foobar'), Sig('-foorab')] + failures = ['-f', '-foo', '-fo', '-foo b', '-foob', '-fooba', '-foora'] + successes = [ + ('', NS(f=None, foobar=None, foorab=None)), + ('-f a', NS(f='a', foobar=None, foorab=None)), + ('-fa', NS(f='a', foobar=None, foorab=None)), + ('-foa', NS(f='oa', foobar=None, foorab=None)), + ('-fooa', NS(f='ooa', foobar=None, foorab=None)), + ('-foobar a', NS(f=None, foobar='a', foorab=None)), + ('-foorab a', NS(f=None, foobar=None, foorab='a')), + ] + + +class TestOptionalsSingleDashAmbiguous(ParserTestCase): + """Test Optionals that partially match but are not subsets""" + + argument_signatures = [Sig('-foobar'), Sig('-foorab')] + failures = ['-f', '-f a', '-fa', '-foa', '-foo', '-fo', '-foo b'] + successes = [ + ('', NS(foobar=None, foorab=None)), + ('-foob a', NS(foobar='a', foorab=None)), + ('-foor a', NS(foobar=None, foorab='a')), + ('-fooba a', NS(foobar='a', foorab=None)), + ('-foora a', NS(foobar=None, foorab='a')), + ('-foobar a', NS(foobar='a', foorab=None)), + ('-foorab a', NS(foobar=None, foorab='a')), + ] + + +class TestOptionalsNumeric(ParserTestCase): + """Test an Optional with a short opt string""" + + argument_signatures = [Sig('-1', dest='one')] + failures = ['-1', 'a', '-1 --foo', '-1 -y', '-1 -1', '-1 -2'] + successes = [ + ('', NS(one=None)), + ('-1 a', NS(one='a')), + ('-1a', NS(one='a')), + ('-1-2', NS(one='-2')), + ] + + +class TestOptionalsDoubleDash(ParserTestCase): + """Test an Optional with a double-dash option string""" + + argument_signatures = [Sig('--foo')] + failures = ['--foo', '-f', '-f a', 'a', '--foo -x', '--foo --bar'] + successes = [ + ('', NS(foo=None)), + ('--foo a', NS(foo='a')), + ('--foo=a', NS(foo='a')), + ('--foo -2.5', NS(foo='-2.5')), + ('--foo=-2.5', NS(foo='-2.5')), + ] + + +class TestOptionalsDoubleDashPartialMatch(ParserTestCase): + """Tests partial matching with a double-dash option string""" + + argument_signatures = [ + Sig('--badger', action='store_true'), + Sig('--bat'), + ] + failures = ['--bar', '--b', '--ba', '--b=2', '--ba=4', '--badge 5'] + successes = [ + ('', NS(badger=False, bat=None)), + ('--bat X', NS(badger=False, bat='X')), + ('--bad', NS(badger=True, bat=None)), + ('--badg', NS(badger=True, bat=None)), + ('--badge', NS(badger=True, bat=None)), + ('--badger', NS(badger=True, bat=None)), + ] + + +class TestOptionalsDoubleDashPrefixMatch(ParserTestCase): + """Tests when one double-dash option string is a prefix of another""" + + argument_signatures = [ + Sig('--badger', action='store_true'), + Sig('--ba'), + ] + failures = ['--bar', '--b', '--ba', '--b=2', '--badge 5'] + successes = [ + ('', NS(badger=False, ba=None)), + ('--ba X', NS(badger=False, ba='X')), + ('--ba=X', NS(badger=False, ba='X')), + ('--bad', NS(badger=True, ba=None)), + ('--badg', NS(badger=True, ba=None)), + ('--badge', NS(badger=True, ba=None)), + ('--badger', NS(badger=True, ba=None)), + ] + + +class TestOptionalsSingleDoubleDash(ParserTestCase): + """Test an Optional with single- and double-dash option strings""" + + argument_signatures = [ + Sig('-f', action='store_true'), + Sig('--bar'), + Sig('-baz', action='store_const', const=42), + ] + failures = ['--bar', '-fbar', '-fbaz', '-bazf', '-b B', 'B'] + successes = [ + ('', NS(f=False, bar=None, baz=None)), + ('-f', NS(f=True, bar=None, baz=None)), + ('--ba B', NS(f=False, bar='B', baz=None)), + ('-f --bar B', NS(f=True, bar='B', baz=None)), + ('-f -b', NS(f=True, bar=None, baz=42)), + ('-ba -f', NS(f=True, bar=None, baz=42)), + ] + + +class TestOptionalsAlternatePrefixChars(ParserTestCase): + """Test an Optional with a double-dash option string""" + + parser_signature = Sig(prefix_chars='+:/', add_help=False) + argument_signatures = [ + Sig('+f', action='store_true'), + Sig('::bar'), + Sig('/baz', action='store_const', const=42), + ] + failures = ['--bar', '-fbar', '-b B', 'B', '-f', '--bar B', '-baz'] + successes = [ + ('', NS(f=False, bar=None, baz=None)), + ('+f', NS(f=True, bar=None, baz=None)), + ('::ba B', NS(f=False, bar='B', baz=None)), + ('+f ::bar B', NS(f=True, bar='B', baz=None)), + ('+f /b', NS(f=True, bar=None, baz=42)), + ('/ba +f', NS(f=True, bar=None, baz=42)), + ] + + +class TestOptionalsShortLong(ParserTestCase): + """Test a combination of single- and double-dash option strings""" + + argument_signatures = [ + Sig('-v', '--verbose', '-n', '--noisy', action='store_true'), + ] + failures = ['--x --verbose', '-N', 'a', '-v x'] + successes = [ + ('', NS(verbose=False)), + ('-v', NS(verbose=True)), + ('--verbose', NS(verbose=True)), + ('-n', NS(verbose=True)), + ('--noisy', NS(verbose=True)), + ] + + +class TestOptionalsDest(ParserTestCase): + """Tests various means of setting destination""" + + argument_signatures = [Sig('--foo-bar'), Sig('--baz', dest='zabbaz')] + failures = ['a'] + successes = [ + ('--foo-bar f', NS(foo_bar='f', zabbaz=None)), + ('--baz g', NS(foo_bar=None, zabbaz='g')), + ('--foo-bar h --baz i', NS(foo_bar='h', zabbaz='i')), + ('--baz j --foo-bar k', NS(foo_bar='k', zabbaz='j')), + ] + + +class TestOptionalsDefault(ParserTestCase): + """Tests specifying a default for an Optional""" + + argument_signatures = [Sig('-x'), Sig('-y', default=42)] + failures = ['a'] + successes = [ + ('', NS(x=None, y=42)), + ('-xx', NS(x='x', y=42)), + ('-yy', NS(x=None, y='y')), + ] + + +class TestOptionalsNargsDefault(ParserTestCase): + """Tests not specifying the number of args for an Optional""" + + argument_signatures = [Sig('-x')] + failures = ['a', '-x'] + successes = [ + ('', NS(x=None)), + ('-x a', NS(x='a')), + ] + + +class TestOptionalsNargs1(ParserTestCase): + """Tests specifying the 1 arg for an Optional""" + + argument_signatures = [Sig('-x', nargs=1)] + failures = ['a', '-x'] + successes = [ + ('', NS(x=None)), + ('-x a', NS(x=['a'])), + ] + + +class TestOptionalsNargs3(ParserTestCase): + """Tests specifying the 3 args for an Optional""" + + argument_signatures = [Sig('-x', nargs=3)] + failures = ['a', '-x', '-x a', '-x a b', 'a -x', 'a -x b'] + successes = [ + ('', NS(x=None)), + ('-x a b c', NS(x=['a', 'b', 'c'])), + ] + + +class TestOptionalsNargsOptional(ParserTestCase): + """Tests specifying an Optional arg for an Optional""" + + argument_signatures = [ + Sig('-w', nargs='?'), + Sig('-x', nargs='?', const=42), + Sig('-y', nargs='?', default='spam'), + Sig('-z', nargs='?', type=int, const='42', default='84'), + ] + failures = ['2'] + successes = [ + ('', NS(w=None, x=None, y='spam', z=84)), + ('-w', NS(w=None, x=None, y='spam', z=84)), + ('-w 2', NS(w='2', x=None, y='spam', z=84)), + ('-x', NS(w=None, x=42, y='spam', z=84)), + ('-x 2', NS(w=None, x='2', y='spam', z=84)), + ('-y', NS(w=None, x=None, y=None, z=84)), + ('-y 2', NS(w=None, x=None, y='2', z=84)), + ('-z', NS(w=None, x=None, y='spam', z=42)), + ('-z 2', NS(w=None, x=None, y='spam', z=2)), + ] + + +class TestOptionalsNargsZeroOrMore(ParserTestCase): + """Tests specifying an args for an Optional that accepts zero or more""" + + argument_signatures = [ + Sig('-x', nargs='*'), + Sig('-y', nargs='*', default='spam'), + ] + failures = ['a'] + successes = [ + ('', NS(x=None, y='spam')), + ('-x', NS(x=[], y='spam')), + ('-x a', NS(x=['a'], y='spam')), + ('-x a b', NS(x=['a', 'b'], y='spam')), + ('-y', NS(x=None, y=[])), + ('-y a', NS(x=None, y=['a'])), + ('-y a b', NS(x=None, y=['a', 'b'])), + ] + + +class TestOptionalsNargsOneOrMore(ParserTestCase): + """Tests specifying an args for an Optional that accepts one or more""" + + argument_signatures = [ + Sig('-x', nargs='+'), + Sig('-y', nargs='+', default='spam'), + ] + failures = ['a', '-x', '-y', 'a -x', 'a -y b'] + successes = [ + ('', NS(x=None, y='spam')), + ('-x a', NS(x=['a'], y='spam')), + ('-x a b', NS(x=['a', 'b'], y='spam')), + ('-y a', NS(x=None, y=['a'])), + ('-y a b', NS(x=None, y=['a', 'b'])), + ] + + +class TestOptionalsChoices(ParserTestCase): + """Tests specifying the choices for an Optional""" + + argument_signatures = [ + Sig('-f', choices='abc'), + Sig('-g', type=int, choices=range(5))] + failures = ['a', '-f d', '-fad', '-ga', '-g 6'] + successes = [ + ('', NS(f=None, g=None)), + ('-f a', NS(f='a', g=None)), + ('-f c', NS(f='c', g=None)), + ('-g 0', NS(f=None, g=0)), + ('-g 03', NS(f=None, g=3)), + ('-fb -g4', NS(f='b', g=4)), + ] + + +class TestOptionalsRequired(ParserTestCase): + """Tests the an optional action that is required""" + + argument_signatures = [ + Sig('-x', type=int, required=True), + ] + failures = ['a', ''] + successes = [ + ('-x 1', NS(x=1)), + ('-x42', NS(x=42)), + ] + + +class TestOptionalsActionStore(ParserTestCase): + """Tests the store action for an Optional""" + + argument_signatures = [Sig('-x', action='store')] + failures = ['a', 'a -x'] + successes = [ + ('', NS(x=None)), + ('-xfoo', NS(x='foo')), + ] + + +class TestOptionalsActionStoreConst(ParserTestCase): + """Tests the store_const action for an Optional""" + + argument_signatures = [Sig('-y', action='store_const', const=object)] + failures = ['a'] + successes = [ + ('', NS(y=None)), + ('-y', NS(y=object)), + ] + + +class TestOptionalsActionStoreFalse(ParserTestCase): + """Tests the store_false action for an Optional""" + + argument_signatures = [Sig('-z', action='store_false')] + failures = ['a', '-za', '-z a'] + successes = [ + ('', NS(z=True)), + ('-z', NS(z=False)), + ] + + +class TestOptionalsActionStoreTrue(ParserTestCase): + """Tests the store_true action for an Optional""" + + argument_signatures = [Sig('--apple', action='store_true')] + failures = ['a', '--apple=b', '--apple b'] + successes = [ + ('', NS(apple=False)), + ('--apple', NS(apple=True)), + ] + + +class TestOptionalsActionAppend(ParserTestCase): + """Tests the append action for an Optional""" + + argument_signatures = [Sig('--baz', action='append')] + failures = ['a', '--baz', 'a --baz', '--baz a b'] + successes = [ + ('', NS(baz=None)), + ('--baz a', NS(baz=['a'])), + ('--baz a --baz b', NS(baz=['a', 'b'])), + ] + + +class TestOptionalsActionAppendWithDefault(ParserTestCase): + """Tests the append action for an Optional""" + + argument_signatures = [Sig('--baz', action='append', default=['X'])] + failures = ['a', '--baz', 'a --baz', '--baz a b'] + successes = [ + ('', NS(baz=['X'])), + ('--baz a', NS(baz=['X', 'a'])), + ('--baz a --baz b', NS(baz=['X', 'a', 'b'])), + ] + + +class TestOptionalsActionAppendConst(ParserTestCase): + """Tests the append_const action for an Optional""" + + argument_signatures = [ + Sig('-b', action='append_const', const=Exception), + Sig('-c', action='append', dest='b'), + ] + failures = ['a', '-c', 'a -c', '-bx', '-b x'] + successes = [ + ('', NS(b=None)), + ('-b', NS(b=[Exception])), + ('-b -cx -b -cyz', NS(b=[Exception, 'x', Exception, 'yz'])), + ] + + +class TestOptionalsActionAppendConstWithDefault(ParserTestCase): + """Tests the append_const action for an Optional""" + + argument_signatures = [ + Sig('-b', action='append_const', const=Exception, default=['X']), + Sig('-c', action='append', dest='b'), + ] + failures = ['a', '-c', 'a -c', '-bx', '-b x'] + successes = [ + ('', NS(b=['X'])), + ('-b', NS(b=['X', Exception])), + ('-b -cx -b -cyz', NS(b=['X', Exception, 'x', Exception, 'yz'])), + ] + + +class TestOptionalsActionCount(ParserTestCase): + """Tests the count action for an Optional""" + + argument_signatures = [Sig('-x', action='count')] + failures = ['a', '-x a', '-x b', '-x a -x b'] + successes = [ + ('', NS(x=None)), + ('-x', NS(x=1)), + ] + + +# ================ +# Positional tests +# ================ + +class TestPositionalsNargsNone(ParserTestCase): + """Test a Positional that doesn't specify nargs""" + + argument_signatures = [Sig('foo')] + failures = ['', '-x', 'a b'] + successes = [ + ('a', NS(foo='a')), + ] + + +class TestPositionalsNargs1(ParserTestCase): + """Test a Positional that specifies an nargs of 1""" + + argument_signatures = [Sig('foo', nargs=1)] + failures = ['', '-x', 'a b'] + successes = [ + ('a', NS(foo=['a'])), + ] + + +class TestPositionalsNargs2(ParserTestCase): + """Test a Positional that specifies an nargs of 2""" + + argument_signatures = [Sig('foo', nargs=2)] + failures = ['', 'a', '-x', 'a b c'] + successes = [ + ('a b', NS(foo=['a', 'b'])), + ] + + +class TestPositionalsNargsZeroOrMore(ParserTestCase): + """Test a Positional that specifies unlimited nargs""" + + argument_signatures = [Sig('foo', nargs='*')] + failures = ['-x'] + successes = [ + ('', NS(foo=[])), + ('a', NS(foo=['a'])), + ('a b', NS(foo=['a', 'b'])), + ] + + +class TestPositionalsNargsZeroOrMoreDefault(ParserTestCase): + """Test a Positional that specifies unlimited nargs and a default""" + + argument_signatures = [Sig('foo', nargs='*', default='bar')] + failures = ['-x'] + successes = [ + ('', NS(foo='bar')), + ('a', NS(foo=['a'])), + ('a b', NS(foo=['a', 'b'])), + ] + + +class TestPositionalsNargsOneOrMore(ParserTestCase): + """Test a Positional that specifies one or more nargs""" + + argument_signatures = [Sig('foo', nargs='+')] + failures = ['', '-x'] + successes = [ + ('a', NS(foo=['a'])), + ('a b', NS(foo=['a', 'b'])), + ] + + +class TestPositionalsNargsOptional(ParserTestCase): + """Tests an Optional Positional""" + + argument_signatures = [Sig('foo', nargs='?')] + failures = ['-x', 'a b'] + successes = [ + ('', NS(foo=None)), + ('a', NS(foo='a')), + ] + + +class TestPositionalsNargsOptionalDefault(ParserTestCase): + """Tests an Optional Positional with a default value""" + + argument_signatures = [Sig('foo', nargs='?', default=42)] + failures = ['-x', 'a b'] + successes = [ + ('', NS(foo=42)), + ('a', NS(foo='a')), + ] + + +class TestPositionalsNargsOptionalConvertedDefault(ParserTestCase): + """Tests an Optional Positional with a default value + that needs to be converted to the appropriate type. + """ + + argument_signatures = [ + Sig('foo', nargs='?', type=int, default='42'), + ] + failures = ['-x', 'a b', '1 2'] + successes = [ + ('', NS(foo=42)), + ('1', NS(foo=1)), + ] + + +class TestPositionalsNargsNoneNone(ParserTestCase): + """Test two Positionals that don't specify nargs""" + + argument_signatures = [Sig('foo'), Sig('bar')] + failures = ['', '-x', 'a', 'a b c'] + successes = [ + ('a b', NS(foo='a', bar='b')), + ] + + +class TestPositionalsNargsNone1(ParserTestCase): + """Test a Positional with no nargs followed by one with 1""" + + argument_signatures = [Sig('foo'), Sig('bar', nargs=1)] + failures = ['', '--foo', 'a', 'a b c'] + successes = [ + ('a b', NS(foo='a', bar=['b'])), + ] + + +class TestPositionalsNargs2None(ParserTestCase): + """Test a Positional with 2 nargs followed by one with none""" + + argument_signatures = [Sig('foo', nargs=2), Sig('bar')] + failures = ['', '--foo', 'a', 'a b', 'a b c d'] + successes = [ + ('a b c', NS(foo=['a', 'b'], bar='c')), + ] + + +class TestPositionalsNargsNoneZeroOrMore(ParserTestCase): + """Test a Positional with no nargs followed by one with unlimited""" + + argument_signatures = [Sig('foo'), Sig('bar', nargs='*')] + failures = ['', '--foo'] + successes = [ + ('a', NS(foo='a', bar=[])), + ('a b', NS(foo='a', bar=['b'])), + ('a b c', NS(foo='a', bar=['b', 'c'])), + ] + + +class TestPositionalsNargsNoneOneOrMore(ParserTestCase): + """Test a Positional with no nargs followed by one with one or more""" + + argument_signatures = [Sig('foo'), Sig('bar', nargs='+')] + failures = ['', '--foo', 'a'] + successes = [ + ('a b', NS(foo='a', bar=['b'])), + ('a b c', NS(foo='a', bar=['b', 'c'])), + ] + + +class TestPositionalsNargsNoneOptional(ParserTestCase): + """Test a Positional with no nargs followed by one with an Optional""" + + argument_signatures = [Sig('foo'), Sig('bar', nargs='?')] + failures = ['', '--foo', 'a b c'] + successes = [ + ('a', NS(foo='a', bar=None)), + ('a b', NS(foo='a', bar='b')), + ] + + +class TestPositionalsNargsZeroOrMoreNone(ParserTestCase): + """Test a Positional with unlimited nargs followed by one with none""" + + argument_signatures = [Sig('foo', nargs='*'), Sig('bar')] + failures = ['', '--foo'] + successes = [ + ('a', NS(foo=[], bar='a')), + ('a b', NS(foo=['a'], bar='b')), + ('a b c', NS(foo=['a', 'b'], bar='c')), + ] + + +class TestPositionalsNargsOneOrMoreNone(ParserTestCase): + """Test a Positional with one or more nargs followed by one with none""" + + argument_signatures = [Sig('foo', nargs='+'), Sig('bar')] + failures = ['', '--foo', 'a'] + successes = [ + ('a b', NS(foo=['a'], bar='b')), + ('a b c', NS(foo=['a', 'b'], bar='c')), + ] + + +class TestPositionalsNargsOptionalNone(ParserTestCase): + """Test a Positional with an Optional nargs followed by one with none""" + + argument_signatures = [Sig('foo', nargs='?', default=42), Sig('bar')] + failures = ['', '--foo', 'a b c'] + successes = [ + ('a', NS(foo=42, bar='a')), + ('a b', NS(foo='a', bar='b')), + ] + + +class TestPositionalsNargs2ZeroOrMore(ParserTestCase): + """Test a Positional with 2 nargs followed by one with unlimited""" + + argument_signatures = [Sig('foo', nargs=2), Sig('bar', nargs='*')] + failures = ['', '--foo', 'a'] + successes = [ + ('a b', NS(foo=['a', 'b'], bar=[])), + ('a b c', NS(foo=['a', 'b'], bar=['c'])), + ] + + +class TestPositionalsNargs2OneOrMore(ParserTestCase): + """Test a Positional with 2 nargs followed by one with one or more""" + + argument_signatures = [Sig('foo', nargs=2), Sig('bar', nargs='+')] + failures = ['', '--foo', 'a', 'a b'] + successes = [ + ('a b c', NS(foo=['a', 'b'], bar=['c'])), + ] + + +class TestPositionalsNargs2Optional(ParserTestCase): + """Test a Positional with 2 nargs followed by one optional""" + + argument_signatures = [Sig('foo', nargs=2), Sig('bar', nargs='?')] + failures = ['', '--foo', 'a', 'a b c d'] + successes = [ + ('a b', NS(foo=['a', 'b'], bar=None)), + ('a b c', NS(foo=['a', 'b'], bar='c')), + ] + + +class TestPositionalsNargsZeroOrMore1(ParserTestCase): + """Test a Positional with unlimited nargs followed by one with 1""" + + argument_signatures = [Sig('foo', nargs='*'), Sig('bar', nargs=1)] + failures = ['', '--foo', ] + successes = [ + ('a', NS(foo=[], bar=['a'])), + ('a b', NS(foo=['a'], bar=['b'])), + ('a b c', NS(foo=['a', 'b'], bar=['c'])), + ] + + +class TestPositionalsNargsOneOrMore1(ParserTestCase): + """Test a Positional with one or more nargs followed by one with 1""" + + argument_signatures = [Sig('foo', nargs='+'), Sig('bar', nargs=1)] + failures = ['', '--foo', 'a'] + successes = [ + ('a b', NS(foo=['a'], bar=['b'])), + ('a b c', NS(foo=['a', 'b'], bar=['c'])), + ] + + +class TestPositionalsNargsOptional1(ParserTestCase): + """Test a Positional with an Optional nargs followed by one with 1""" + + argument_signatures = [Sig('foo', nargs='?'), Sig('bar', nargs=1)] + failures = ['', '--foo', 'a b c'] + successes = [ + ('a', NS(foo=None, bar=['a'])), + ('a b', NS(foo='a', bar=['b'])), + ] + + +class TestPositionalsNargsNoneZeroOrMore1(ParserTestCase): + """Test three Positionals: no nargs, unlimited nargs and 1 nargs""" + + argument_signatures = [ + Sig('foo'), + Sig('bar', nargs='*'), + Sig('baz', nargs=1), + ] + failures = ['', '--foo', 'a'] + successes = [ + ('a b', NS(foo='a', bar=[], baz=['b'])), + ('a b c', NS(foo='a', bar=['b'], baz=['c'])), + ] + + +class TestPositionalsNargsNoneOneOrMore1(ParserTestCase): + """Test three Positionals: no nargs, one or more nargs and 1 nargs""" + + argument_signatures = [ + Sig('foo'), + Sig('bar', nargs='+'), + Sig('baz', nargs=1), + ] + failures = ['', '--foo', 'a', 'b'] + successes = [ + ('a b c', NS(foo='a', bar=['b'], baz=['c'])), + ('a b c d', NS(foo='a', bar=['b', 'c'], baz=['d'])), + ] + + +class TestPositionalsNargsNoneOptional1(ParserTestCase): + """Test three Positionals: no nargs, optional narg and 1 nargs""" + + argument_signatures = [ + Sig('foo'), + Sig('bar', nargs='?', default=0.625), + Sig('baz', nargs=1), + ] + failures = ['', '--foo', 'a'] + successes = [ + ('a b', NS(foo='a', bar=0.625, baz=['b'])), + ('a b c', NS(foo='a', bar='b', baz=['c'])), + ] + + +class TestPositionalsNargsOptionalOptional(ParserTestCase): + """Test two optional nargs""" + + argument_signatures = [ + Sig('foo', nargs='?'), + Sig('bar', nargs='?', default=42), + ] + failures = ['--foo', 'a b c'] + successes = [ + ('', NS(foo=None, bar=42)), + ('a', NS(foo='a', bar=42)), + ('a b', NS(foo='a', bar='b')), + ] + + +class TestPositionalsNargsOptionalZeroOrMore(ParserTestCase): + """Test an Optional narg followed by unlimited nargs""" + + argument_signatures = [Sig('foo', nargs='?'), Sig('bar', nargs='*')] + failures = ['--foo'] + successes = [ + ('', NS(foo=None, bar=[])), + ('a', NS(foo='a', bar=[])), + ('a b', NS(foo='a', bar=['b'])), + ('a b c', NS(foo='a', bar=['b', 'c'])), + ] + + +class TestPositionalsNargsOptionalOneOrMore(ParserTestCase): + """Test an Optional narg followed by one or more nargs""" + + argument_signatures = [Sig('foo', nargs='?'), Sig('bar', nargs='+')] + failures = ['', '--foo'] + successes = [ + ('a', NS(foo=None, bar=['a'])), + ('a b', NS(foo='a', bar=['b'])), + ('a b c', NS(foo='a', bar=['b', 'c'])), + ] + + +class TestPositionalsChoicesString(ParserTestCase): + """Test a set of single-character choices""" + + argument_signatures = [Sig('spam', choices=set('abcdefg'))] + failures = ['', '--foo', 'h', '42', 'ef'] + successes = [ + ('a', NS(spam='a')), + ('g', NS(spam='g')), + ] + + +class TestPositionalsChoicesInt(ParserTestCase): + """Test a set of integer choices""" + + argument_signatures = [Sig('spam', type=int, choices=range(20))] + failures = ['', '--foo', 'h', '42', 'ef'] + successes = [ + ('4', NS(spam=4)), + ('15', NS(spam=15)), + ] + + +class TestPositionalsActionAppend(ParserTestCase): + """Test the 'append' action""" + + argument_signatures = [ + Sig('spam', action='append'), + Sig('spam', action='append', nargs=2), + ] + failures = ['', '--foo', 'a', 'a b', 'a b c d'] + successes = [ + ('a b c', NS(spam=['a', ['b', 'c']])), + ] + +# ======================================== +# Combined optionals and positionals tests +# ======================================== + +class TestOptionalsNumericAndPositionals(ParserTestCase): + """Tests negative number args when numeric options are present""" + + argument_signatures = [ + Sig('x', nargs='?'), + Sig('-4', dest='y', action='store_true'), + ] + failures = ['-2', '-315'] + successes = [ + ('', NS(x=None, y=False)), + ('a', NS(x='a', y=False)), + ('-4', NS(x=None, y=True)), + ('-4 a', NS(x='a', y=True)), + ] + + +class TestOptionalsAlmostNumericAndPositionals(ParserTestCase): + """Tests negative number args when almost numeric options are present""" + + argument_signatures = [ + Sig('x', nargs='?'), + Sig('-k4', dest='y', action='store_true'), + ] + failures = ['-k3'] + successes = [ + ('', NS(x=None, y=False)), + ('-2', NS(x='-2', y=False)), + ('a', NS(x='a', y=False)), + ('-k4', NS(x=None, y=True)), + ('-k4 a', NS(x='a', y=True)), + ] + + +class TestEmptyAndSpaceContainingArguments(ParserTestCase): + + argument_signatures = [ + Sig('x', nargs='?'), + Sig('-y', '--yyy', dest='y'), + ] + failures = ['-y'] + successes = [ + ([''], NS(x='', y=None)), + (['a badger'], NS(x='a badger', y=None)), + (['-a badger'], NS(x='-a badger', y=None)), + (['-y', ''], NS(x=None, y='')), + (['-y', 'a badger'], NS(x=None, y='a badger')), + (['-y', '-a badger'], NS(x=None, y='-a badger')), + (['--yyy=a badger'], NS(x=None, y='a badger')), + (['--yyy=-a badger'], NS(x=None, y='-a badger')), + ] + + +class TestPrefixCharacterOnlyArguments(ParserTestCase): + + parser_signature = Sig(prefix_chars='-+') + argument_signatures = [ + Sig('-', dest='x', nargs='?', const='badger'), + Sig('+', dest='y', type=int, default=42), + Sig('-+-', dest='z', action='store_true'), + ] + failures = ['-y', '+ -'] + successes = [ + ('', NS(x=None, y=42, z=False)), + ('-', NS(x='badger', y=42, z=False)), + ('- X', NS(x='X', y=42, z=False)), + ('+ -3', NS(x=None, y=-3, z=False)), + ('-+-', NS(x=None, y=42, z=True)), + ('- ===', NS(x='===', y=42, z=False)), + ] + + +class TestNargsZeroOrMore(ParserTestCase): + """Tests specifying an args for an Optional that accepts zero or more""" + + argument_signatures = [Sig('-x', nargs='*'), Sig('y', nargs='*')] + failures = [] + successes = [ + ('', NS(x=None, y=[])), + ('-x', NS(x=[], y=[])), + ('-x a', NS(x=['a'], y=[])), + ('-x a -- b', NS(x=['a'], y=['b'])), + ('a', NS(x=None, y=['a'])), + ('a -x', NS(x=[], y=['a'])), + ('a -x b', NS(x=['b'], y=['a'])), + ] + + +class TestNargsRemainder(ParserTestCase): + """Tests specifying a positional with nargs=REMAINDER""" + + argument_signatures = [Sig('x'), Sig('y', nargs='...'), Sig('-z')] + failures = ['', '-z', '-z Z'] + successes = [ + ('X', NS(x='X', y=[], z=None)), + ('-z Z X', NS(x='X', y=[], z='Z')), + ('X A B -z Z', NS(x='X', y=['A', 'B', '-z', 'Z'], z=None)), + ('X Y --foo', NS(x='X', y=['Y', '--foo'], z=None)), + ] + + +class TestOptionLike(ParserTestCase): + """Tests options that may or may not be arguments""" + + argument_signatures = [ + Sig('-x', type=float), + Sig('-3', type=float, dest='y'), + Sig('z', nargs='*'), + ] + failures = ['-x', '-y2.5', '-xa', '-x -a', + '-x -3', '-x -3.5', '-3 -3.5', + '-x -2.5', '-x -2.5 a', '-3 -.5', + 'a x -1', '-x -1 a', '-3 -1 a'] + successes = [ + ('', NS(x=None, y=None, z=[])), + ('-x 2.5', NS(x=2.5, y=None, z=[])), + ('-x 2.5 a', NS(x=2.5, y=None, z=['a'])), + ('-3.5', NS(x=None, y=0.5, z=[])), + ('-3-.5', NS(x=None, y=-0.5, z=[])), + ('-3 .5', NS(x=None, y=0.5, z=[])), + ('a -3.5', NS(x=None, y=0.5, z=['a'])), + ('a', NS(x=None, y=None, z=['a'])), + ('a -x 1', NS(x=1.0, y=None, z=['a'])), + ('-x 1 a', NS(x=1.0, y=None, z=['a'])), + ('-3 1 a', NS(x=None, y=1.0, z=['a'])), + ] + + +class TestDefaultSuppress(ParserTestCase): + """Test actions with suppressed defaults""" + + argument_signatures = [ + Sig('foo', nargs='?', default=argparse.SUPPRESS), + Sig('bar', nargs='*', default=argparse.SUPPRESS), + Sig('--baz', action='store_true', default=argparse.SUPPRESS), + ] + failures = ['-x'] + successes = [ + ('', NS()), + ('a', NS(foo='a')), + ('a b', NS(foo='a', bar=['b'])), + ('--baz', NS(baz=True)), + ('a --baz', NS(foo='a', baz=True)), + ('--baz a b', NS(foo='a', bar=['b'], baz=True)), + ] + + +class TestParserDefaultSuppress(ParserTestCase): + """Test actions with a parser-level default of SUPPRESS""" + + parser_signature = Sig(argument_default=argparse.SUPPRESS) + argument_signatures = [ + Sig('foo', nargs='?'), + Sig('bar', nargs='*'), + Sig('--baz', action='store_true'), + ] + failures = ['-x'] + successes = [ + ('', NS()), + ('a', NS(foo='a')), + ('a b', NS(foo='a', bar=['b'])), + ('--baz', NS(baz=True)), + ('a --baz', NS(foo='a', baz=True)), + ('--baz a b', NS(foo='a', bar=['b'], baz=True)), + ] + + +class TestParserDefault42(ParserTestCase): + """Test actions with a parser-level default of 42""" + + parser_signature = Sig(argument_default=42, version='1.0') + argument_signatures = [ + Sig('foo', nargs='?'), + Sig('bar', nargs='*'), + Sig('--baz', action='store_true'), + ] + failures = ['-x'] + successes = [ + ('', NS(foo=42, bar=42, baz=42)), + ('a', NS(foo='a', bar=42, baz=42)), + ('a b', NS(foo='a', bar=['b'], baz=42)), + ('--baz', NS(foo=42, bar=42, baz=True)), + ('a --baz', NS(foo='a', bar=42, baz=True)), + ('--baz a b', NS(foo='a', bar=['b'], baz=True)), + ] + + +class TestArgumentsFromFile(TempDirMixin, ParserTestCase): + """Test reading arguments from a file""" + + def setUp(self): + super(TestArgumentsFromFile, self).setUp() + file_texts = [ + ('hello', 'hello world!\n'), + ('recursive', '-a\n' + 'A\n' + '@hello'), + ('invalid', '@no-such-path\n'), + ] + for path, text in file_texts: + file = open(path, 'w') + file.write(text) + file.close() + + parser_signature = Sig(fromfile_prefix_chars='@') + argument_signatures = [ + Sig('-a'), + Sig('x'), + Sig('y', nargs='+'), + ] + failures = ['', '-b', 'X', '@invalid', '@missing'] + successes = [ + ('X Y', NS(a=None, x='X', y=['Y'])), + ('X -a A Y Z', NS(a='A', x='X', y=['Y', 'Z'])), + ('@hello X', NS(a=None, x='hello world!', y=['X'])), + ('X @hello', NS(a=None, x='X', y=['hello world!'])), + ('-a B @recursive Y Z', NS(a='A', x='hello world!', y=['Y', 'Z'])), + ('X @recursive Z -a B', NS(a='B', x='X', y=['hello world!', 'Z'])), + ] + + +class TestArgumentsFromFileConverter(TempDirMixin, ParserTestCase): + """Test reading arguments from a file""" + + def setUp(self): + super(TestArgumentsFromFileConverter, self).setUp() + file_texts = [ + ('hello', 'hello world!\n'), + ] + for path, text in file_texts: + file = open(path, 'w') + file.write(text) + file.close() + + class FromFileConverterArgumentParser(ErrorRaisingArgumentParser): + + def convert_arg_line_to_args(self, arg_line): + for arg in arg_line.split(): + if not arg.strip(): + continue + yield arg + parser_class = FromFileConverterArgumentParser + parser_signature = Sig(fromfile_prefix_chars='@') + argument_signatures = [ + Sig('y', nargs='+'), + ] + failures = [] + successes = [ + ('@hello X', NS(y=['hello', 'world!', 'X'])), + ] + + +# ===================== +# Type conversion tests +# ===================== + +class TestFileTypeRepr(TestCase): + + def test_r(self): + type = argparse.FileType('r') + self.assertEqual("FileType('r')", repr(type)) + + def test_wb_1(self): + type = argparse.FileType('wb', 1) + self.assertEqual("FileType('wb', 1)", repr(type)) + + +class RFile(object): + seen = {} + + def __init__(self, name): + self.name = name + + def __eq__(self, other): + if other in self.seen: + text = self.seen[other] + else: + text = self.seen[other] = other.read() + other.close() + if not isinstance(text, str): + text = text.decode('ascii') + return self.name == other.name == text + + +class TestFileTypeR(TempDirMixin, ParserTestCase): + """Test the FileType option/argument type for reading files""" + + def setUp(self): + super(TestFileTypeR, self).setUp() + for file_name in ['foo', 'bar']: + file = open(os.path.join(self.temp_dir, file_name), 'w') + file.write(file_name) + file.close() + + argument_signatures = [ + Sig('-x', type=argparse.FileType()), + Sig('spam', type=argparse.FileType('r')), + ] + failures = ['-x', '-x bar'] + successes = [ + ('foo', NS(x=None, spam=RFile('foo'))), + ('-x foo bar', NS(x=RFile('foo'), spam=RFile('bar'))), + ('bar -x foo', NS(x=RFile('foo'), spam=RFile('bar'))), + ('-x - -', NS(x=sys.stdin, spam=sys.stdin)), + ] + + +class TestFileTypeRB(TempDirMixin, ParserTestCase): + """Test the FileType option/argument type for reading files""" + + def setUp(self): + super(TestFileTypeRB, self).setUp() + for file_name in ['foo', 'bar']: + file = open(os.path.join(self.temp_dir, file_name), 'w') + file.write(file_name) + file.close() + + argument_signatures = [ + Sig('-x', type=argparse.FileType('rb')), + Sig('spam', type=argparse.FileType('rb')), + ] + failures = ['-x', '-x bar'] + successes = [ + ('foo', NS(x=None, spam=RFile('foo'))), + ('-x foo bar', NS(x=RFile('foo'), spam=RFile('bar'))), + ('bar -x foo', NS(x=RFile('foo'), spam=RFile('bar'))), + ('-x - -', NS(x=sys.stdin, spam=sys.stdin)), + ] + + +class WFile(object): + seen = set() + + def __init__(self, name): + self.name = name + + def __eq__(self, other): + if other not in self.seen: + text = 'Check that file is writable.' + if 'b' in other.mode: + text = text.encode('ascii') + other.write(text) + other.close() + self.seen.add(other) + return self.name == other.name + + +class TestFileTypeW(TempDirMixin, ParserTestCase): + """Test the FileType option/argument type for writing files""" + + argument_signatures = [ + Sig('-x', type=argparse.FileType('w')), + Sig('spam', type=argparse.FileType('w')), + ] + failures = ['-x', '-x bar'] + successes = [ + ('foo', NS(x=None, spam=WFile('foo'))), + ('-x foo bar', NS(x=WFile('foo'), spam=WFile('bar'))), + ('bar -x foo', NS(x=WFile('foo'), spam=WFile('bar'))), + ('-x - -', NS(x=sys.stdout, spam=sys.stdout)), + ] + + +class TestFileTypeWB(TempDirMixin, ParserTestCase): + + argument_signatures = [ + Sig('-x', type=argparse.FileType('wb')), + Sig('spam', type=argparse.FileType('wb')), + ] + failures = ['-x', '-x bar'] + successes = [ + ('foo', NS(x=None, spam=WFile('foo'))), + ('-x foo bar', NS(x=WFile('foo'), spam=WFile('bar'))), + ('bar -x foo', NS(x=WFile('foo'), spam=WFile('bar'))), + ('-x - -', NS(x=sys.stdout, spam=sys.stdout)), + ] + + +class TestTypeCallable(ParserTestCase): + """Test some callables as option/argument types""" + + argument_signatures = [ + Sig('--eggs', type=complex), + Sig('spam', type=float), + ] + failures = ['a', '42j', '--eggs a', '--eggs 2i'] + successes = [ + ('--eggs=42 42', NS(eggs=42, spam=42.0)), + ('--eggs 2j -- -1.5', NS(eggs=2j, spam=-1.5)), + ('1024.675', NS(eggs=None, spam=1024.675)), + ] + + +class TestTypeUserDefined(ParserTestCase): + """Test a user-defined option/argument type""" + + class MyType(TestCase): + + def __init__(self, value): + self.value = value + + def __eq__(self, other): + return (type(self), self.value) == (type(other), other.value) + + argument_signatures = [ + Sig('-x', type=MyType), + Sig('spam', type=MyType), + ] + failures = [] + successes = [ + ('a -x b', NS(x=MyType('b'), spam=MyType('a'))), + ('-xf g', NS(x=MyType('f'), spam=MyType('g'))), + ] + + +class TestTypeClassicClass(ParserTestCase): + """Test a classic class type""" + + class C: + + def __init__(self, value): + self.value = value + + def __eq__(self, other): + return (type(self), self.value) == (type(other), other.value) + + argument_signatures = [ + Sig('-x', type=C), + Sig('spam', type=C), + ] + failures = [] + successes = [ + ('a -x b', NS(x=C('b'), spam=C('a'))), + ('-xf g', NS(x=C('f'), spam=C('g'))), + ] + + +class TestTypeRegistration(TestCase): + """Test a user-defined type by registering it""" + + def test(self): + + def get_my_type(string): + return 'my_type{%s}' % string + + parser = argparse.ArgumentParser() + parser.register('type', 'my_type', get_my_type) + parser.add_argument('-x', type='my_type') + parser.add_argument('y', type='my_type') + + self.assertEqual(parser.parse_args('1'.split()), + NS(x=None, y='my_type{1}')) + self.assertEqual(parser.parse_args('-x 1 42'.split()), + NS(x='my_type{1}', y='my_type{42}')) + + +# ============ +# Action tests +# ============ + +class TestActionUserDefined(ParserTestCase): + """Test a user-defined option/argument action""" + + class OptionalAction(argparse.Action): + + def __call__(self, parser, namespace, value, option_string=None): + try: + # check destination and option string + assert self.dest == 'spam', 'dest: %s' % self.dest + assert option_string == '-s', 'flag: %s' % option_string + # when option is before argument, badger=2, and when + # option is after argument, badger= + expected_ns = NS(spam=0.25) + if value in [0.125, 0.625]: + expected_ns.badger = 2 + elif value in [2.0]: + expected_ns.badger = 84 + else: + raise AssertionError('value: %s' % value) + assert expected_ns == namespace, ('expected %s, got %s' % + (expected_ns, namespace)) + except AssertionError: + e = sys.exc_info()[1] + raise ArgumentParserError('opt_action failed: %s' % e) + setattr(namespace, 'spam', value) + + class PositionalAction(argparse.Action): + + def __call__(self, parser, namespace, value, option_string=None): + try: + assert option_string is None, ('option_string: %s' % + option_string) + # check destination + assert self.dest == 'badger', 'dest: %s' % self.dest + # when argument is before option, spam=0.25, and when + # option is after argument, spam= + expected_ns = NS(badger=2) + if value in [42, 84]: + expected_ns.spam = 0.25 + elif value in [1]: + expected_ns.spam = 0.625 + elif value in [2]: + expected_ns.spam = 0.125 + else: + raise AssertionError('value: %s' % value) + assert expected_ns == namespace, ('expected %s, got %s' % + (expected_ns, namespace)) + except AssertionError: + e = sys.exc_info()[1] + raise ArgumentParserError('arg_action failed: %s' % e) + setattr(namespace, 'badger', value) + + argument_signatures = [ + Sig('-s', dest='spam', action=OptionalAction, + type=float, default=0.25), + Sig('badger', action=PositionalAction, + type=int, nargs='?', default=2), + ] + failures = [] + successes = [ + ('-s0.125', NS(spam=0.125, badger=2)), + ('42', NS(spam=0.25, badger=42)), + ('-s 0.625 1', NS(spam=0.625, badger=1)), + ('84 -s2', NS(spam=2.0, badger=84)), + ] + + +class TestActionRegistration(TestCase): + """Test a user-defined action supplied by registering it""" + + class MyAction(argparse.Action): + + def __call__(self, parser, namespace, values, option_string=None): + setattr(namespace, self.dest, 'foo[%s]' % values) + + def test(self): + + parser = argparse.ArgumentParser() + parser.register('action', 'my_action', self.MyAction) + parser.add_argument('badger', action='my_action') + + self.assertEqual(parser.parse_args(['1']), NS(badger='foo[1]')) + self.assertEqual(parser.parse_args(['42']), NS(badger='foo[42]')) + + +# ================ +# Subparsers tests +# ================ + +class TestAddSubparsers(TestCase): + """Test the add_subparsers method""" + + def assertArgumentParserError(self, *args, **kwargs): + self.assertRaises(ArgumentParserError, *args, **kwargs) + + def _get_parser(self, subparser_help=False): + # create a parser with a subparsers argument + parser = ErrorRaisingArgumentParser( + prog='PROG', description='main description') + parser.add_argument( + '--foo', action='store_true', help='foo help') + parser.add_argument( + 'bar', type=float, help='bar help') + + # check that only one subparsers argument can be added + subparsers = parser.add_subparsers(help='command help') + self.assertArgumentParserError(parser.add_subparsers) + + # add first sub-parser + parser1_kwargs = dict(description='1 description') + if subparser_help: + parser1_kwargs['help'] = '1 help' + parser1 = subparsers.add_parser('1', **parser1_kwargs) + parser1.add_argument('-w', type=int, help='w help') + parser1.add_argument('x', choices='abc', help='x help') + + # add second sub-parser + parser2_kwargs = dict(description='2 description') + if subparser_help: + parser2_kwargs['help'] = '2 help' + parser2 = subparsers.add_parser('2', **parser2_kwargs) + parser2.add_argument('-y', choices='123', help='y help') + parser2.add_argument('z', type=complex, nargs='*', help='z help') + + # return the main parser + return parser + + def setUp(self): + self.parser = self._get_parser() + self.command_help_parser = self._get_parser(subparser_help=True) + + def test_parse_args_failures(self): + # check some failure cases: + for args_str in ['', 'a', 'a a', '0.5 a', '0.5 1', + '0.5 1 -y', '0.5 2 -w']: + args = args_str.split() + self.assertArgumentParserError(self.parser.parse_args, args) + + def test_parse_args(self): + # check some non-failure cases: + self.assertEqual( + self.parser.parse_args('0.5 1 b -w 7'.split()), + NS(foo=False, bar=0.5, w=7, x='b'), + ) + self.assertEqual( + self.parser.parse_args('0.25 --foo 2 -y 2 3j -- -1j'.split()), + NS(foo=True, bar=0.25, y='2', z=[3j, -1j]), + ) + self.assertEqual( + self.parser.parse_args('--foo 0.125 1 c'.split()), + NS(foo=True, bar=0.125, w=None, x='c'), + ) + + def test_dest(self): + parser = ErrorRaisingArgumentParser() + parser.add_argument('--foo', action='store_true') + subparsers = parser.add_subparsers(dest='bar') + parser1 = subparsers.add_parser('1') + parser1.add_argument('baz') + self.assertEqual(NS(foo=False, bar='1', baz='2'), + parser.parse_args('1 2'.split())) + + def test_help(self): + self.assertEqual(self.parser.format_usage(), + 'usage: PROG [-h] [--foo] bar {1,2} ...\n') + self.assertEqual(self.parser.format_help(), textwrap.dedent('''\ + usage: PROG [-h] [--foo] bar {1,2} ... + + main description + + positional arguments: + bar bar help + {1,2} command help + + optional arguments: + -h, --help show this help message and exit + --foo foo help + ''')) + + def test_parser_command_help(self): + self.assertEqual(self.command_help_parser.format_usage(), + 'usage: PROG [-h] [--foo] bar {1,2} ...\n') + self.assertEqual(self.command_help_parser.format_help(), + textwrap.dedent('''\ + usage: PROG [-h] [--foo] bar {1,2} ... + + main description + + positional arguments: + bar bar help + {1,2} command help + 1 1 help + 2 2 help + + optional arguments: + -h, --help show this help message and exit + --foo foo help + ''')) + + def test_subparser_title_help(self): + parser = ErrorRaisingArgumentParser(prog='PROG', + description='main description') + parser.add_argument('--foo', action='store_true', help='foo help') + parser.add_argument('bar', help='bar help') + subparsers = parser.add_subparsers(title='subcommands', + description='command help', + help='additional text') + parser1 = subparsers.add_parser('1') + parser2 = subparsers.add_parser('2') + self.assertEqual(parser.format_usage(), + 'usage: PROG [-h] [--foo] bar {1,2} ...\n') + self.assertEqual(parser.format_help(), textwrap.dedent('''\ + usage: PROG [-h] [--foo] bar {1,2} ... + + main description + + positional arguments: + bar bar help + + optional arguments: + -h, --help show this help message and exit + --foo foo help + + subcommands: + command help + + {1,2} additional text + ''')) + + def _test_subparser_help(self, args_str, expected_help): + try: + self.parser.parse_args(args_str.split()) + except ArgumentParserError: + err = sys.exc_info()[1] + if err.stdout != expected_help: + print(repr(expected_help)) + print(repr(err.stdout)) + self.assertEqual(err.stdout, expected_help) + + def test_subparser1_help(self): + self._test_subparser_help('5.0 1 -h', textwrap.dedent('''\ + usage: PROG bar 1 [-h] [-w W] {a,b,c} + + 1 description + + positional arguments: + {a,b,c} x help + + optional arguments: + -h, --help show this help message and exit + -w W w help + ''')) + + def test_subparser2_help(self): + self._test_subparser_help('5.0 2 -h', textwrap.dedent('''\ + usage: PROG bar 2 [-h] [-y {1,2,3}] [z [z ...]] + + 2 description + + positional arguments: + z z help + + optional arguments: + -h, --help show this help message and exit + -y {1,2,3} y help + ''')) + +# ============ +# Groups tests +# ============ + +class TestPositionalsGroups(TestCase): + """Tests that order of group positionals matches construction order""" + + def test_nongroup_first(self): + parser = ErrorRaisingArgumentParser() + parser.add_argument('foo') + group = parser.add_argument_group('g') + group.add_argument('bar') + parser.add_argument('baz') + expected = NS(foo='1', bar='2', baz='3') + result = parser.parse_args('1 2 3'.split()) + self.failUnlessEqual(expected, result) + + def test_group_first(self): + parser = ErrorRaisingArgumentParser() + group = parser.add_argument_group('xxx') + group.add_argument('foo') + parser.add_argument('bar') + parser.add_argument('baz') + expected = NS(foo='1', bar='2', baz='3') + result = parser.parse_args('1 2 3'.split()) + self.failUnlessEqual(expected, result) + + def test_interleaved_groups(self): + parser = ErrorRaisingArgumentParser() + group = parser.add_argument_group('xxx') + parser.add_argument('foo') + group.add_argument('bar') + parser.add_argument('baz') + group = parser.add_argument_group('yyy') + group.add_argument('frell') + expected = NS(foo='1', bar='2', baz='3', frell='4') + result = parser.parse_args('1 2 3 4'.split()) + self.failUnlessEqual(expected, result) + +# =================== +# Parent parser tests +# =================== + +class TestParentParsers(TestCase): + """Tests that parsers can be created with parent parsers""" + + def assertArgumentParserError(self, *args, **kwargs): + self.assertRaises(ArgumentParserError, *args, **kwargs) + + def setUp(self): + self.wxyz_parent = ErrorRaisingArgumentParser(add_help=False) + self.wxyz_parent.add_argument('--w') + x_group = self.wxyz_parent.add_argument_group('x') + x_group.add_argument('-y') + self.wxyz_parent.add_argument('z') + + self.abcd_parent = ErrorRaisingArgumentParser(add_help=False) + self.abcd_parent.add_argument('a') + self.abcd_parent.add_argument('-b') + c_group = self.abcd_parent.add_argument_group('c') + c_group.add_argument('--d') + + self.w_parent = ErrorRaisingArgumentParser(add_help=False) + self.w_parent.add_argument('--w') + + self.z_parent = ErrorRaisingArgumentParser(add_help=False) + self.z_parent.add_argument('z') + + # parents with mutually exclusive groups + self.ab_mutex_parent = ErrorRaisingArgumentParser(add_help=False) + group = self.ab_mutex_parent.add_mutually_exclusive_group() + group.add_argument('-a', action='store_true') + group.add_argument('-b', action='store_true') + + def test_single_parent(self): + parser = ErrorRaisingArgumentParser(parents=[self.wxyz_parent]) + self.assertEqual(parser.parse_args('-y 1 2 --w 3'.split()), + NS(w='3', y='1', z='2')) + + def test_single_parent_mutex(self): + self._test_mutex_ab(self.ab_mutex_parent.parse_args) + parser = ErrorRaisingArgumentParser(parents=[self.ab_mutex_parent]) + self._test_mutex_ab(parser.parse_args) + + def test_single_granparent_mutex(self): + parents = [self.ab_mutex_parent] + parser = ErrorRaisingArgumentParser(add_help=False, parents=parents) + parser = ErrorRaisingArgumentParser(parents=[parser]) + self._test_mutex_ab(parser.parse_args) + + def _test_mutex_ab(self, parse_args): + self.assertEqual(parse_args([]), NS(a=False, b=False)) + self.assertEqual(parse_args(['-a']), NS(a=True, b=False)) + self.assertEqual(parse_args(['-b']), NS(a=False, b=True)) + self.assertArgumentParserError(parse_args, ['-a', '-b']) + self.assertArgumentParserError(parse_args, ['-b', '-a']) + self.assertArgumentParserError(parse_args, ['-c']) + self.assertArgumentParserError(parse_args, ['-a', '-c']) + self.assertArgumentParserError(parse_args, ['-b', '-c']) + + def test_multiple_parents(self): + parents = [self.abcd_parent, self.wxyz_parent] + parser = ErrorRaisingArgumentParser(parents=parents) + self.assertEqual(parser.parse_args('--d 1 --w 2 3 4'.split()), + NS(a='3', b=None, d='1', w='2', y=None, z='4')) + + def test_multiple_parents_mutex(self): + parents = [self.ab_mutex_parent, self.wxyz_parent] + parser = ErrorRaisingArgumentParser(parents=parents) + self.assertEqual(parser.parse_args('-a --w 2 3'.split()), + NS(a=True, b=False, w='2', y=None, z='3')) + self.assertArgumentParserError( + parser.parse_args, '-a --w 2 3 -b'.split()) + self.assertArgumentParserError( + parser.parse_args, '-a -b --w 2 3'.split()) + + def test_conflicting_parents(self): + self.assertRaises( + argparse.ArgumentError, + argparse.ArgumentParser, + parents=[self.w_parent, self.wxyz_parent]) + + def test_conflicting_parents_mutex(self): + self.assertRaises( + argparse.ArgumentError, + argparse.ArgumentParser, + parents=[self.abcd_parent, self.ab_mutex_parent]) + + def test_same_argument_name_parents(self): + parents = [self.wxyz_parent, self.z_parent] + parser = ErrorRaisingArgumentParser(parents=parents) + self.assertEqual(parser.parse_args('1 2'.split()), + NS(w=None, y=None, z='2')) + + def test_subparser_parents(self): + parser = ErrorRaisingArgumentParser() + subparsers = parser.add_subparsers() + abcde_parser = subparsers.add_parser('bar', parents=[self.abcd_parent]) + abcde_parser.add_argument('e') + self.assertEqual(parser.parse_args('bar -b 1 --d 2 3 4'.split()), + NS(a='3', b='1', d='2', e='4')) + + def test_subparser_parents_mutex(self): + parser = ErrorRaisingArgumentParser() + subparsers = parser.add_subparsers() + parents = [self.ab_mutex_parent] + abc_parser = subparsers.add_parser('foo', parents=parents) + c_group = abc_parser.add_argument_group('c_group') + c_group.add_argument('c') + parents = [self.wxyz_parent, self.ab_mutex_parent] + wxyzabe_parser = subparsers.add_parser('bar', parents=parents) + wxyzabe_parser.add_argument('e') + self.assertEqual(parser.parse_args('foo -a 4'.split()), + NS(a=True, b=False, c='4')) + self.assertEqual(parser.parse_args('bar -b --w 2 3 4'.split()), + NS(a=False, b=True, w='2', y=None, z='3', e='4')) + self.assertArgumentParserError( + parser.parse_args, 'foo -a -b 4'.split()) + self.assertArgumentParserError( + parser.parse_args, 'bar -b -a 4'.split()) + + def test_parent_help(self): + parents = [self.abcd_parent, self.wxyz_parent] + parser = ErrorRaisingArgumentParser(parents=parents) + parser_help = parser.format_help() + self.assertEqual(parser_help, textwrap.dedent('''\ + usage: test_argparse.py [-h] [-b B] [--d D] [--w W] [-y Y] a z + + positional arguments: + a + z + + optional arguments: + -h, --help show this help message and exit + -b B + --w W + + c: + --d D + + x: + -y Y + ''')) + + def test_groups_parents(self): + parent = ErrorRaisingArgumentParser(add_help=False) + g = parent.add_argument_group(title='g', description='gd') + g.add_argument('-w') + g.add_argument('-x') + m = parent.add_mutually_exclusive_group() + m.add_argument('-y') + m.add_argument('-z') + parser = ErrorRaisingArgumentParser(parents=[parent]) + + self.assertRaises(ArgumentParserError, parser.parse_args, + ['-y', 'Y', '-z', 'Z']) + + parser_help = parser.format_help() + self.assertEqual(parser_help, textwrap.dedent('''\ + usage: test_argparse.py [-h] [-w W] [-x X] [-y Y | -z Z] + + optional arguments: + -h, --help show this help message and exit + -y Y + -z Z + + g: + gd + + -w W + -x X + ''')) + +# ============================== +# Mutually exclusive group tests +# ============================== + +class TestMutuallyExclusiveGroupErrors(TestCase): + + def test_invalid_add_argument_group(self): + parser = ErrorRaisingArgumentParser() + raises = self.assertRaises + raises(TypeError, parser.add_mutually_exclusive_group, title='foo') + + def test_invalid_add_argument(self): + parser = ErrorRaisingArgumentParser() + group = parser.add_mutually_exclusive_group() + add_argument = group.add_argument + raises = self.assertRaises + raises(ValueError, add_argument, '--foo', required=True) + raises(ValueError, add_argument, 'bar') + raises(ValueError, add_argument, 'bar', nargs='+') + raises(ValueError, add_argument, 'bar', nargs=1) + raises(ValueError, add_argument, 'bar', nargs=argparse.PARSER) + + +class MEMixin(object): + + def test_failures_when_not_required(self): + parse_args = self.get_parser(required=False).parse_args + error = ArgumentParserError + for args_string in self.failures: + self.assertRaises(error, parse_args, args_string.split()) + + def test_failures_when_required(self): + parse_args = self.get_parser(required=True).parse_args + error = ArgumentParserError + for args_string in self.failures + ['']: + self.assertRaises(error, parse_args, args_string.split()) + + def test_successes_when_not_required(self): + parse_args = self.get_parser(required=False).parse_args + successes = self.successes + self.successes_when_not_required + for args_string, expected_ns in successes: + actual_ns = parse_args(args_string.split()) + self.assertEqual(actual_ns, expected_ns) + + def test_successes_when_required(self): + parse_args = self.get_parser(required=True).parse_args + for args_string, expected_ns in self.successes: + actual_ns = parse_args(args_string.split()) + self.assertEqual(actual_ns, expected_ns) + + def test_usage_when_not_required(self): + format_usage = self.get_parser(required=False).format_usage + expected_usage = self.usage_when_not_required + self.assertEqual(format_usage(), textwrap.dedent(expected_usage)) + + def test_usage_when_required(self): + format_usage = self.get_parser(required=True).format_usage + expected_usage = self.usage_when_required + self.assertEqual(format_usage(), textwrap.dedent(expected_usage)) + + def test_help_when_not_required(self): + format_help = self.get_parser(required=False).format_help + help = self.usage_when_not_required + self.help + self.assertEqual(format_help(), textwrap.dedent(help)) + + def test_help_when_required(self): + format_help = self.get_parser(required=True).format_help + help = self.usage_when_required + self.help + self.assertEqual(format_help(), textwrap.dedent(help)) + + +class TestMutuallyExclusiveSimple(MEMixin, TestCase): + + def get_parser(self, required=None): + parser = ErrorRaisingArgumentParser(prog='PROG') + group = parser.add_mutually_exclusive_group(required=required) + group.add_argument('--bar', help='bar help') + group.add_argument('--baz', nargs='?', const='Z', help='baz help') + return parser + + failures = ['--bar X --baz Y', '--bar X --baz'] + successes = [ + ('--bar X', NS(bar='X', baz=None)), + ('--bar X --bar Z', NS(bar='Z', baz=None)), + ('--baz Y', NS(bar=None, baz='Y')), + ('--baz', NS(bar=None, baz='Z')), + ] + successes_when_not_required = [ + ('', NS(bar=None, baz=None)), + ] + + usage_when_not_required = '''\ + usage: PROG [-h] [--bar BAR | --baz [BAZ]] + ''' + usage_when_required = '''\ + usage: PROG [-h] (--bar BAR | --baz [BAZ]) + ''' + help = '''\ + + optional arguments: + -h, --help show this help message and exit + --bar BAR bar help + --baz [BAZ] baz help + ''' + + +class TestMutuallyExclusiveLong(MEMixin, TestCase): + + def get_parser(self, required=None): + parser = ErrorRaisingArgumentParser(prog='PROG') + parser.add_argument('--abcde', help='abcde help') + parser.add_argument('--fghij', help='fghij help') + group = parser.add_mutually_exclusive_group(required=required) + group.add_argument('--klmno', help='klmno help') + group.add_argument('--pqrst', help='pqrst help') + return parser + + failures = ['--klmno X --pqrst Y'] + successes = [ + ('--klmno X', NS(abcde=None, fghij=None, klmno='X', pqrst=None)), + ('--abcde Y --klmno X', + NS(abcde='Y', fghij=None, klmno='X', pqrst=None)), + ('--pqrst X', NS(abcde=None, fghij=None, klmno=None, pqrst='X')), + ('--pqrst X --fghij Y', + NS(abcde=None, fghij='Y', klmno=None, pqrst='X')), + ] + successes_when_not_required = [ + ('', NS(abcde=None, fghij=None, klmno=None, pqrst=None)), + ] + + usage_when_not_required = '''\ + usage: PROG [-h] [--abcde ABCDE] [--fghij FGHIJ] + [--klmno KLMNO | --pqrst PQRST] + ''' + usage_when_required = '''\ + usage: PROG [-h] [--abcde ABCDE] [--fghij FGHIJ] + (--klmno KLMNO | --pqrst PQRST) + ''' + help = '''\ + + optional arguments: + -h, --help show this help message and exit + --abcde ABCDE abcde help + --fghij FGHIJ fghij help + --klmno KLMNO klmno help + --pqrst PQRST pqrst help + ''' + + +class TestMutuallyExclusiveFirstSuppressed(MEMixin, TestCase): + + def get_parser(self, required): + parser = ErrorRaisingArgumentParser(prog='PROG') + group = parser.add_mutually_exclusive_group(required=required) + group.add_argument('-x', help=argparse.SUPPRESS) + group.add_argument('-y', action='store_false', help='y help') + return parser + + failures = ['-x X -y'] + successes = [ + ('-x X', NS(x='X', y=True)), + ('-x X -x Y', NS(x='Y', y=True)), + ('-y', NS(x=None, y=False)), + ] + successes_when_not_required = [ + ('', NS(x=None, y=True)), + ] + + usage_when_not_required = '''\ + usage: PROG [-h] [-y] + ''' + usage_when_required = '''\ + usage: PROG [-h] -y + ''' + help = '''\ + + optional arguments: + -h, --help show this help message and exit + -y y help + ''' + + +class TestMutuallyExclusiveManySuppressed(MEMixin, TestCase): + + def get_parser(self, required): + parser = ErrorRaisingArgumentParser(prog='PROG') + group = parser.add_mutually_exclusive_group(required=required) + add = group.add_argument + add('--spam', action='store_true', help=argparse.SUPPRESS) + add('--badger', action='store_false', help=argparse.SUPPRESS) + add('--bladder', help=argparse.SUPPRESS) + return parser + + failures = [ + '--spam --badger', + '--badger --bladder B', + '--bladder B --spam', + ] + successes = [ + ('--spam', NS(spam=True, badger=True, bladder=None)), + ('--badger', NS(spam=False, badger=False, bladder=None)), + ('--bladder B', NS(spam=False, badger=True, bladder='B')), + ('--spam --spam', NS(spam=True, badger=True, bladder=None)), + ] + successes_when_not_required = [ + ('', NS(spam=False, badger=True, bladder=None)), + ] + + usage_when_required = usage_when_not_required = '''\ + usage: PROG [-h] + ''' + help = '''\ + + optional arguments: + -h, --help show this help message and exit + ''' + + +class TestMutuallyExclusiveOptionalAndPositional(MEMixin, TestCase): + + def get_parser(self, required): + parser = ErrorRaisingArgumentParser(prog='PROG') + group = parser.add_mutually_exclusive_group(required=required) + group.add_argument('--foo', action='store_true', help='FOO') + group.add_argument('--spam', help='SPAM') + group.add_argument('badger', nargs='*', default='X', help='BADGER') + return parser + + failures = [ + '--foo --spam S', + '--spam S X', + 'X --foo', + 'X Y Z --spam S', + '--foo X Y', + ] + successes = [ + ('--foo', NS(foo=True, spam=None, badger='X')), + ('--spam S', NS(foo=False, spam='S', badger='X')), + ('X', NS(foo=False, spam=None, badger=['X'])), + ('X Y Z', NS(foo=False, spam=None, badger=['X', 'Y', 'Z'])), + ] + successes_when_not_required = [ + ('', NS(foo=False, spam=None, badger='X')), + ] + + usage_when_not_required = '''\ + usage: PROG [-h] [--foo | --spam SPAM | badger [badger ...]] + ''' + usage_when_required = '''\ + usage: PROG [-h] (--foo | --spam SPAM | badger [badger ...]) + ''' + help = '''\ + + positional arguments: + badger BADGER + + optional arguments: + -h, --help show this help message and exit + --foo FOO + --spam SPAM SPAM + ''' + + +class TestMutuallyExclusiveOptionalsMixed(MEMixin, TestCase): + + def get_parser(self, required): + parser = ErrorRaisingArgumentParser(prog='PROG') + parser.add_argument('-x', action='store_true', help='x help') + group = parser.add_mutually_exclusive_group(required=required) + group.add_argument('-a', action='store_true', help='a help') + group.add_argument('-b', action='store_true', help='b help') + parser.add_argument('-y', action='store_true', help='y help') + group.add_argument('-c', action='store_true', help='c help') + return parser + + failures = ['-a -b', '-b -c', '-a -c', '-a -b -c'] + successes = [ + ('-a', NS(a=True, b=False, c=False, x=False, y=False)), + ('-b', NS(a=False, b=True, c=False, x=False, y=False)), + ('-c', NS(a=False, b=False, c=True, x=False, y=False)), + ('-a -x', NS(a=True, b=False, c=False, x=True, y=False)), + ('-y -b', NS(a=False, b=True, c=False, x=False, y=True)), + ('-x -y -c', NS(a=False, b=False, c=True, x=True, y=True)), + ] + successes_when_not_required = [ + ('', NS(a=False, b=False, c=False, x=False, y=False)), + ('-x', NS(a=False, b=False, c=False, x=True, y=False)), + ('-y', NS(a=False, b=False, c=False, x=False, y=True)), + ] + + usage_when_required = usage_when_not_required = '''\ + usage: PROG [-h] [-x] [-a] [-b] [-y] [-c] + ''' + help = '''\ + + optional arguments: + -h, --help show this help message and exit + -x x help + -a a help + -b b help + -y y help + -c c help + ''' + + +class TestMutuallyExclusiveOptionalsAndPositionalsMixed(MEMixin, TestCase): + + def get_parser(self, required): + parser = ErrorRaisingArgumentParser(prog='PROG') + parser.add_argument('x', help='x help') + parser.add_argument('-y', action='store_true', help='y help') + group = parser.add_mutually_exclusive_group(required=required) + group.add_argument('a', nargs='?', help='a help') + group.add_argument('-b', action='store_true', help='b help') + group.add_argument('-c', action='store_true', help='c help') + return parser + + failures = ['X A -b', '-b -c', '-c X A'] + successes = [ + ('X A', NS(a='A', b=False, c=False, x='X', y=False)), + ('X -b', NS(a=None, b=True, c=False, x='X', y=False)), + ('X -c', NS(a=None, b=False, c=True, x='X', y=False)), + ('X A -y', NS(a='A', b=False, c=False, x='X', y=True)), + ('X -y -b', NS(a=None, b=True, c=False, x='X', y=True)), + ] + successes_when_not_required = [ + ('X', NS(a=None, b=False, c=False, x='X', y=False)), + ('X -y', NS(a=None, b=False, c=False, x='X', y=True)), + ] + + usage_when_required = usage_when_not_required = '''\ + usage: PROG [-h] [-y] [-b] [-c] x [a] + ''' + help = '''\ + + positional arguments: + x x help + a a help + + optional arguments: + -h, --help show this help message and exit + -y y help + -b b help + -c c help + ''' + +# ================================================= +# Mutually exclusive group in parent parser tests +# ================================================= + +class MEPBase(object): + + def get_parser(self, required=None): + parent = super(MEPBase, self).get_parser(required=required) + parser = ErrorRaisingArgumentParser( + prog=parent.prog, add_help=False, parents=[parent]) + return parser + + +class TestMutuallyExclusiveGroupErrorsParent( + MEPBase, TestMutuallyExclusiveGroupErrors): + pass + + +class TestMutuallyExclusiveSimpleParent( + MEPBase, TestMutuallyExclusiveSimple): + pass + + +class TestMutuallyExclusiveLongParent( + MEPBase, TestMutuallyExclusiveLong): + pass + + +class TestMutuallyExclusiveFirstSuppressedParent( + MEPBase, TestMutuallyExclusiveFirstSuppressed): + pass + + +class TestMutuallyExclusiveManySuppressedParent( + MEPBase, TestMutuallyExclusiveManySuppressed): + pass + + +class TestMutuallyExclusiveOptionalAndPositionalParent( + MEPBase, TestMutuallyExclusiveOptionalAndPositional): + pass + + +class TestMutuallyExclusiveOptionalsMixedParent( + MEPBase, TestMutuallyExclusiveOptionalsMixed): + pass + + +class TestMutuallyExclusiveOptionalsAndPositionalsMixedParent( + MEPBase, TestMutuallyExclusiveOptionalsAndPositionalsMixed): + pass + +# ================= +# Set default tests +# ================= + +class TestSetDefaults(TestCase): + + def test_set_defaults_no_args(self): + parser = ErrorRaisingArgumentParser() + parser.set_defaults(x='foo') + parser.set_defaults(y='bar', z=1) + self.assertEqual(NS(x='foo', y='bar', z=1), + parser.parse_args([])) + self.assertEqual(NS(x='foo', y='bar', z=1), + parser.parse_args([], NS())) + self.assertEqual(NS(x='baz', y='bar', z=1), + parser.parse_args([], NS(x='baz'))) + self.assertEqual(NS(x='baz', y='bar', z=2), + parser.parse_args([], NS(x='baz', z=2))) + + def test_set_defaults_with_args(self): + parser = ErrorRaisingArgumentParser() + parser.set_defaults(x='foo', y='bar') + parser.add_argument('-x', default='xfoox') + self.assertEqual(NS(x='xfoox', y='bar'), + parser.parse_args([])) + self.assertEqual(NS(x='xfoox', y='bar'), + parser.parse_args([], NS())) + self.assertEqual(NS(x='baz', y='bar'), + parser.parse_args([], NS(x='baz'))) + self.assertEqual(NS(x='1', y='bar'), + parser.parse_args('-x 1'.split())) + self.assertEqual(NS(x='1', y='bar'), + parser.parse_args('-x 1'.split(), NS())) + self.assertEqual(NS(x='1', y='bar'), + parser.parse_args('-x 1'.split(), NS(x='baz'))) + + def test_set_defaults_subparsers(self): + parser = ErrorRaisingArgumentParser() + parser.set_defaults(x='foo') + subparsers = parser.add_subparsers() + parser_a = subparsers.add_parser('a') + parser_a.set_defaults(y='bar') + self.assertEqual(NS(x='foo', y='bar'), + parser.parse_args('a'.split())) + + def test_set_defaults_parents(self): + parent = ErrorRaisingArgumentParser(add_help=False) + parent.set_defaults(x='foo') + parser = ErrorRaisingArgumentParser(parents=[parent]) + self.assertEqual(NS(x='foo'), parser.parse_args([])) + + def test_set_defaults_same_as_add_argument(self): + parser = ErrorRaisingArgumentParser() + parser.set_defaults(w='W', x='X', y='Y', z='Z') + parser.add_argument('-w') + parser.add_argument('-x', default='XX') + parser.add_argument('y', nargs='?') + parser.add_argument('z', nargs='?', default='ZZ') + + # defaults set previously + self.assertEqual(NS(w='W', x='XX', y='Y', z='ZZ'), + parser.parse_args([])) + + # reset defaults + parser.set_defaults(w='WW', x='X', y='YY', z='Z') + self.assertEqual(NS(w='WW', x='X', y='YY', z='Z'), + parser.parse_args([])) + + def test_set_defaults_same_as_add_argument_group(self): + parser = ErrorRaisingArgumentParser() + parser.set_defaults(w='W', x='X', y='Y', z='Z') + group = parser.add_argument_group('foo') + group.add_argument('-w') + group.add_argument('-x', default='XX') + group.add_argument('y', nargs='?') + group.add_argument('z', nargs='?', default='ZZ') + + + # defaults set previously + self.assertEqual(NS(w='W', x='XX', y='Y', z='ZZ'), + parser.parse_args([])) + + # reset defaults + parser.set_defaults(w='WW', x='X', y='YY', z='Z') + self.assertEqual(NS(w='WW', x='X', y='YY', z='Z'), + parser.parse_args([])) + +# ================= +# Get default tests +# ================= + +class TestGetDefault(TestCase): + + def test_get_default(self): + parser = ErrorRaisingArgumentParser() + self.assertEqual(None, parser.get_default("foo")) + self.assertEqual(None, parser.get_default("bar")) + + parser.add_argument("--foo") + self.assertEqual(None, parser.get_default("foo")) + self.assertEqual(None, parser.get_default("bar")) + + parser.add_argument("--bar", type=int, default=42) + self.assertEqual(None, parser.get_default("foo")) + self.assertEqual(42, parser.get_default("bar")) + + parser.set_defaults(foo="badger") + self.assertEqual("badger", parser.get_default("foo")) + self.assertEqual(42, parser.get_default("bar")) + +# ========================== +# Namespace 'contains' tests +# ========================== + +class TestNamespaceContainsSimple(TestCase): + + def test_empty(self): + ns = argparse.Namespace() + self.assertEquals('' in ns, False) + self.assertEquals('' not in ns, True) + self.assertEquals('x' in ns, False) + + def test_non_empty(self): + ns = argparse.Namespace(x=1, y=2) + self.assertEquals('x' in ns, True) + self.assertEquals('x' not in ns, False) + self.assertEquals('y' in ns, True) + self.assertEquals('' in ns, False) + self.assertEquals('xx' in ns, False) + self.assertEquals('z' in ns, False) + +# ===================== +# Help formatting tests +# ===================== + +class TestHelpFormattingMetaclass(type): + + def __init__(cls, name, bases, bodydict): + if name == 'HelpTestCase': + return + + class AddTests(object): + + def __init__(self, test_class, func_suffix, std_name): + self.func_suffix = func_suffix + self.std_name = std_name + + for test_func in [self.test_format, + self.test_print, + self.test_print_file]: + test_name = '%s_%s' % (test_func.__name__, func_suffix) + + def test_wrapper(self, test_func=test_func): + test_func(self) + try: + test_wrapper.__name__ = test_name + except TypeError: + pass + setattr(test_class, test_name, test_wrapper) + + def _get_parser(self, tester): + parser = argparse.ArgumentParser( + *tester.parser_signature.args, + **tester.parser_signature.kwargs) + for argument_sig in tester.argument_signatures: + parser.add_argument(*argument_sig.args, + **argument_sig.kwargs) + group_signatures = tester.argument_group_signatures + for group_sig, argument_sigs in group_signatures: + group = parser.add_argument_group(*group_sig.args, + **group_sig.kwargs) + for argument_sig in argument_sigs: + group.add_argument(*argument_sig.args, + **argument_sig.kwargs) + return parser + + def _test(self, tester, parser_text): + expected_text = getattr(tester, self.func_suffix) + expected_text = textwrap.dedent(expected_text) + if expected_text != parser_text: + print(repr(expected_text)) + print(repr(parser_text)) + for char1, char2 in zip(expected_text, parser_text): + if char1 != char2: + print('first diff: %r %r' % (char1, char2)) + break + tester.assertEqual(expected_text, parser_text) + + def test_format(self, tester): + parser = self._get_parser(tester) + format = getattr(parser, 'format_%s' % self.func_suffix) + self._test(tester, format()) + + def test_print(self, tester): + parser = self._get_parser(tester) + print_ = getattr(parser, 'print_%s' % self.func_suffix) + old_stream = getattr(sys, self.std_name) + setattr(sys, self.std_name, StringIO()) + try: + print_() + parser_text = getattr(sys, self.std_name).getvalue() + finally: + setattr(sys, self.std_name, old_stream) + self._test(tester, parser_text) + + def test_print_file(self, tester): + parser = self._get_parser(tester) + print_ = getattr(parser, 'print_%s' % self.func_suffix) + sfile = StringIO() + print_(sfile) + parser_text = sfile.getvalue() + self._test(tester, parser_text) + + # add tests for {format,print}_{usage,help,version} + for func_suffix, std_name in [('usage', 'stdout'), + ('help', 'stdout'), + ('version', 'stderr')]: + AddTests(cls, func_suffix, std_name) + +bases = TestCase, +HelpTestCase = TestHelpFormattingMetaclass('HelpTestCase', bases, {}) + + +class TestHelpBiggerOptionals(HelpTestCase): + """Make sure that argument help aligns when options are longer""" + + parser_signature = Sig(prog='PROG', description='DESCRIPTION', + epilog='EPILOG', version='0.1') + argument_signatures = [ + Sig('-x', action='store_true', help='X HELP'), + Sig('--y', help='Y HELP'), + Sig('foo', help='FOO HELP'), + Sig('bar', help='BAR HELP'), + ] + argument_group_signatures = [] + usage = '''\ + usage: PROG [-h] [-v] [-x] [--y Y] foo bar + ''' + help = usage + '''\ + + DESCRIPTION + + positional arguments: + foo FOO HELP + bar BAR HELP + + optional arguments: + -h, --help show this help message and exit + -v, --version show program's version number and exit + -x X HELP + --y Y Y HELP + + EPILOG + ''' + version = '''\ + 0.1 + ''' + + +class TestHelpBiggerOptionalGroups(HelpTestCase): + """Make sure that argument help aligns when options are longer""" + + parser_signature = Sig(prog='PROG', description='DESCRIPTION', + epilog='EPILOG', version='0.1') + argument_signatures = [ + Sig('-x', action='store_true', help='X HELP'), + Sig('--y', help='Y HELP'), + Sig('foo', help='FOO HELP'), + Sig('bar', help='BAR HELP'), + ] + argument_group_signatures = [ + (Sig('GROUP TITLE', description='GROUP DESCRIPTION'), [ + Sig('baz', help='BAZ HELP'), + Sig('-z', nargs='+', help='Z HELP')]), + ] + usage = '''\ + usage: PROG [-h] [-v] [-x] [--y Y] [-z Z [Z ...]] foo bar baz + ''' + help = usage + '''\ + + DESCRIPTION + + positional arguments: + foo FOO HELP + bar BAR HELP + + optional arguments: + -h, --help show this help message and exit + -v, --version show program's version number and exit + -x X HELP + --y Y Y HELP + + GROUP TITLE: + GROUP DESCRIPTION + + baz BAZ HELP + -z Z [Z ...] Z HELP + + EPILOG + ''' + version = '''\ + 0.1 + ''' + + +class TestHelpBiggerPositionals(HelpTestCase): + """Make sure that help aligns when arguments are longer""" + + parser_signature = Sig(usage='USAGE', description='DESCRIPTION') + argument_signatures = [ + Sig('-x', action='store_true', help='X HELP'), + Sig('--y', help='Y HELP'), + Sig('ekiekiekifekang', help='EKI HELP'), + Sig('bar', help='BAR HELP'), + ] + argument_group_signatures = [] + usage = '''\ + usage: USAGE + ''' + help = usage + '''\ + + DESCRIPTION + + positional arguments: + ekiekiekifekang EKI HELP + bar BAR HELP + + optional arguments: + -h, --help show this help message and exit + -x X HELP + --y Y Y HELP + ''' + + version = '' + + +class TestHelpReformatting(HelpTestCase): + """Make sure that text after short names starts on the first line""" + + parser_signature = Sig( + prog='PROG', + description=' oddly formatted\n' + 'description\n' + '\n' + 'that is so long that it should go onto multiple ' + 'lines when wrapped') + argument_signatures = [ + Sig('-x', metavar='XX', help='oddly\n' + ' formatted -x help'), + Sig('y', metavar='yyy', help='normal y help'), + ] + argument_group_signatures = [ + (Sig('title', description='\n' + ' oddly formatted group\n' + '\n' + 'description'), + [Sig('-a', action='store_true', + help=' oddly \n' + 'formatted -a help \n' + ' again, so long that it should be wrapped over ' + 'multiple lines')]), + ] + usage = '''\ + usage: PROG [-h] [-x XX] [-a] yyy + ''' + help = usage + '''\ + + oddly formatted description that is so long that it should go onto \ +multiple + lines when wrapped + + positional arguments: + yyy normal y help + + optional arguments: + -h, --help show this help message and exit + -x XX oddly formatted -x help + + title: + oddly formatted group description + + -a oddly formatted -a help again, so long that it should \ +be wrapped + over multiple lines + ''' + version = '' + + +class TestHelpWrappingShortNames(HelpTestCase): + """Make sure that text after short names starts on the first line""" + + parser_signature = Sig(prog='PROG', description= 'D\nD' * 30) + argument_signatures = [ + Sig('-x', metavar='XX', help='XHH HX' * 20), + Sig('y', metavar='yyy', help='YH YH' * 20), + ] + argument_group_signatures = [ + (Sig('ALPHAS'), [ + Sig('-a', action='store_true', help='AHHH HHA' * 10)]), + ] + usage = '''\ + usage: PROG [-h] [-x XX] [-a] yyy + ''' + help = usage + '''\ + + D DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD \ +DD DD DD + DD DD DD DD D + + positional arguments: + yyy YH YHYH YHYH YHYH YHYH YHYH YHYH YHYH YHYH YHYH YHYH \ +YHYH YHYH + YHYH YHYH YHYH YHYH YHYH YHYH YHYH YH + + optional arguments: + -h, --help show this help message and exit + -x XX XHH HXXHH HXXHH HXXHH HXXHH HXXHH HXXHH HXXHH HXXHH \ +HXXHH HXXHH + HXXHH HXXHH HXXHH HXXHH HXXHH HXXHH HXXHH HXXHH HXXHH HX + + ALPHAS: + -a AHHH HHAAHHH HHAAHHH HHAAHHH HHAAHHH HHAAHHH HHAAHHH \ +HHAAHHH + HHAAHHH HHAAHHH HHA + ''' + version = '' + + +class TestHelpWrappingLongNames(HelpTestCase): + """Make sure that text after long names starts on the next line""" + + parser_signature = Sig(usage='USAGE', description= 'D D' * 30, + version='V V'*30) + argument_signatures = [ + Sig('-x', metavar='X' * 25, help='XH XH' * 20), + Sig('y', metavar='y' * 25, help='YH YH' * 20), + ] + argument_group_signatures = [ + (Sig('ALPHAS'), [ + Sig('-a', metavar='A' * 25, help='AH AH' * 20), + Sig('z', metavar='z' * 25, help='ZH ZH' * 20)]), + ] + usage = '''\ + usage: USAGE + ''' + help = usage + '''\ + + D DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD \ +DD DD DD + DD DD DD DD D + + positional arguments: + yyyyyyyyyyyyyyyyyyyyyyyyy + YH YHYH YHYH YHYH YHYH YHYH YHYH YHYH YHYH \ +YHYH YHYH + YHYH YHYH YHYH YHYH YHYH YHYH YHYH YHYH YHYH YH + + optional arguments: + -h, --help show this help message and exit + -v, --version show program's version number and exit + -x XXXXXXXXXXXXXXXXXXXXXXXXX + XH XHXH XHXH XHXH XHXH XHXH XHXH XHXH XHXH \ +XHXH XHXH + XHXH XHXH XHXH XHXH XHXH XHXH XHXH XHXH XHXH XH + + ALPHAS: + -a AAAAAAAAAAAAAAAAAAAAAAAAA + AH AHAH AHAH AHAH AHAH AHAH AHAH AHAH AHAH \ +AHAH AHAH + AHAH AHAH AHAH AHAH AHAH AHAH AHAH AHAH AHAH AH + zzzzzzzzzzzzzzzzzzzzzzzzz + ZH ZHZH ZHZH ZHZH ZHZH ZHZH ZHZH ZHZH ZHZH \ +ZHZH ZHZH + ZHZH ZHZH ZHZH ZHZH ZHZH ZHZH ZHZH ZHZH ZHZH ZH + ''' + version = '''\ + V VV VV VV VV VV VV VV VV VV VV VV VV VV VV VV VV VV VV VV VV VV VV \ +VV VV VV + VV VV VV VV V + ''' + + +class TestHelpUsage(HelpTestCase): + """Test basic usage messages""" + + parser_signature = Sig(prog='PROG') + argument_signatures = [ + Sig('-w', nargs='+', help='w'), + Sig('-x', nargs='*', help='x'), + Sig('a', help='a'), + Sig('b', help='b', nargs=2), + Sig('c', help='c', nargs='?'), + ] + argument_group_signatures = [ + (Sig('group'), [ + Sig('-y', nargs='?', help='y'), + Sig('-z', nargs=3, help='z'), + Sig('d', help='d', nargs='*'), + Sig('e', help='e', nargs='+'), + ]) + ] + usage = '''\ + usage: PROG [-h] [-w W [W ...]] [-x [X [X ...]]] [-y [Y]] [-z Z Z Z] + a b b [c] [d [d ...]] e [e ...] + ''' + help = usage + '''\ + + positional arguments: + a a + b b + c c + + optional arguments: + -h, --help show this help message and exit + -w W [W ...] w + -x [X [X ...]] x + + group: + -y [Y] y + -z Z Z Z z + d d + e e + ''' + version = '' + + +class TestHelpOnlyUserGroups(HelpTestCase): + """Test basic usage messages""" + + parser_signature = Sig(prog='PROG', add_help=False) + argument_signatures = [] + argument_group_signatures = [ + (Sig('xxxx'), [ + Sig('-x', help='x'), + Sig('a', help='a'), + ]), + (Sig('yyyy'), [ + Sig('b', help='b'), + Sig('-y', help='y'), + ]), + ] + usage = '''\ + usage: PROG [-x X] [-y Y] a b + ''' + help = usage + '''\ + + xxxx: + -x X x + a a + + yyyy: + b b + -y Y y + ''' + version = '' + + +class TestHelpUsageLongProg(HelpTestCase): + """Test usage messages where the prog is long""" + + parser_signature = Sig(prog='P' * 60) + argument_signatures = [ + Sig('-w', metavar='W'), + Sig('-x', metavar='X'), + Sig('a'), + Sig('b'), + ] + argument_group_signatures = [] + usage = '''\ + usage: PPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPP + [-h] [-w W] [-x X] a b + ''' + help = usage + '''\ + + positional arguments: + a + b + + optional arguments: + -h, --help show this help message and exit + -w W + -x X + ''' + version = '' + + +class TestHelpUsageLongProgOptionsWrap(HelpTestCase): + """Test usage messages where the prog is long and the optionals wrap""" + + parser_signature = Sig(prog='P' * 60) + argument_signatures = [ + Sig('-w', metavar='W' * 25), + Sig('-x', metavar='X' * 25), + Sig('-y', metavar='Y' * 25), + Sig('-z', metavar='Z' * 25), + Sig('a'), + Sig('b'), + ] + argument_group_signatures = [] + usage = '''\ + usage: PPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPP + [-h] [-w WWWWWWWWWWWWWWWWWWWWWWWWW] \ +[-x XXXXXXXXXXXXXXXXXXXXXXXXX] + [-y YYYYYYYYYYYYYYYYYYYYYYYYY] [-z ZZZZZZZZZZZZZZZZZZZZZZZZZ] + a b + ''' + help = usage + '''\ + + positional arguments: + a + b + + optional arguments: + -h, --help show this help message and exit + -w WWWWWWWWWWWWWWWWWWWWWWWWW + -x XXXXXXXXXXXXXXXXXXXXXXXXX + -y YYYYYYYYYYYYYYYYYYYYYYYYY + -z ZZZZZZZZZZZZZZZZZZZZZZZZZ + ''' + version = '' + + +class TestHelpUsageLongProgPositionalsWrap(HelpTestCase): + """Test usage messages where the prog is long and the positionals wrap""" + + parser_signature = Sig(prog='P' * 60, add_help=False) + argument_signatures = [ + Sig('a' * 25), + Sig('b' * 25), + Sig('c' * 25), + ] + argument_group_signatures = [] + usage = '''\ + usage: PPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPP + aaaaaaaaaaaaaaaaaaaaaaaaa bbbbbbbbbbbbbbbbbbbbbbbbb + ccccccccccccccccccccccccc + ''' + help = usage + '''\ + + positional arguments: + aaaaaaaaaaaaaaaaaaaaaaaaa + bbbbbbbbbbbbbbbbbbbbbbbbb + ccccccccccccccccccccccccc + ''' + version = '' + + +class TestHelpUsageOptionalsWrap(HelpTestCase): + """Test usage messages where the optionals wrap""" + + parser_signature = Sig(prog='PROG') + argument_signatures = [ + Sig('-w', metavar='W' * 25), + Sig('-x', metavar='X' * 25), + Sig('-y', metavar='Y' * 25), + Sig('-z', metavar='Z' * 25), + Sig('a'), + Sig('b'), + Sig('c'), + ] + argument_group_signatures = [] + usage = '''\ + usage: PROG [-h] [-w WWWWWWWWWWWWWWWWWWWWWWWWW] \ +[-x XXXXXXXXXXXXXXXXXXXXXXXXX] + [-y YYYYYYYYYYYYYYYYYYYYYYYYY] \ +[-z ZZZZZZZZZZZZZZZZZZZZZZZZZ] + a b c + ''' + help = usage + '''\ + + positional arguments: + a + b + c + + optional arguments: + -h, --help show this help message and exit + -w WWWWWWWWWWWWWWWWWWWWWWWWW + -x XXXXXXXXXXXXXXXXXXXXXXXXX + -y YYYYYYYYYYYYYYYYYYYYYYYYY + -z ZZZZZZZZZZZZZZZZZZZZZZZZZ + ''' + version = '' + + +class TestHelpUsagePositionalsWrap(HelpTestCase): + """Test usage messages where the positionals wrap""" + + parser_signature = Sig(prog='PROG') + argument_signatures = [ + Sig('-x'), + Sig('-y'), + Sig('-z'), + Sig('a' * 25), + Sig('b' * 25), + Sig('c' * 25), + ] + argument_group_signatures = [] + usage = '''\ + usage: PROG [-h] [-x X] [-y Y] [-z Z] + aaaaaaaaaaaaaaaaaaaaaaaaa bbbbbbbbbbbbbbbbbbbbbbbbb + ccccccccccccccccccccccccc + ''' + help = usage + '''\ + + positional arguments: + aaaaaaaaaaaaaaaaaaaaaaaaa + bbbbbbbbbbbbbbbbbbbbbbbbb + ccccccccccccccccccccccccc + + optional arguments: + -h, --help show this help message and exit + -x X + -y Y + -z Z + ''' + version = '' + + +class TestHelpUsageOptionalsPositionalsWrap(HelpTestCase): + """Test usage messages where the optionals and positionals wrap""" + + parser_signature = Sig(prog='PROG') + argument_signatures = [ + Sig('-x', metavar='X' * 25), + Sig('-y', metavar='Y' * 25), + Sig('-z', metavar='Z' * 25), + Sig('a' * 25), + Sig('b' * 25), + Sig('c' * 25), + ] + argument_group_signatures = [] + usage = '''\ + usage: PROG [-h] [-x XXXXXXXXXXXXXXXXXXXXXXXXX] \ +[-y YYYYYYYYYYYYYYYYYYYYYYYYY] + [-z ZZZZZZZZZZZZZZZZZZZZZZZZZ] + aaaaaaaaaaaaaaaaaaaaaaaaa bbbbbbbbbbbbbbbbbbbbbbbbb + ccccccccccccccccccccccccc + ''' + help = usage + '''\ + + positional arguments: + aaaaaaaaaaaaaaaaaaaaaaaaa + bbbbbbbbbbbbbbbbbbbbbbbbb + ccccccccccccccccccccccccc + + optional arguments: + -h, --help show this help message and exit + -x XXXXXXXXXXXXXXXXXXXXXXXXX + -y YYYYYYYYYYYYYYYYYYYYYYYYY + -z ZZZZZZZZZZZZZZZZZZZZZZZZZ + ''' + version = '' + + +class TestHelpUsageOptionalsOnlyWrap(HelpTestCase): + """Test usage messages where there are only optionals and they wrap""" + + parser_signature = Sig(prog='PROG') + argument_signatures = [ + Sig('-x', metavar='X' * 25), + Sig('-y', metavar='Y' * 25), + Sig('-z', metavar='Z' * 25), + ] + argument_group_signatures = [] + usage = '''\ + usage: PROG [-h] [-x XXXXXXXXXXXXXXXXXXXXXXXXX] \ +[-y YYYYYYYYYYYYYYYYYYYYYYYYY] + [-z ZZZZZZZZZZZZZZZZZZZZZZZZZ] + ''' + help = usage + '''\ + + optional arguments: + -h, --help show this help message and exit + -x XXXXXXXXXXXXXXXXXXXXXXXXX + -y YYYYYYYYYYYYYYYYYYYYYYYYY + -z ZZZZZZZZZZZZZZZZZZZZZZZZZ + ''' + version = '' + + +class TestHelpUsagePositionalsOnlyWrap(HelpTestCase): + """Test usage messages where there are only positionals and they wrap""" + + parser_signature = Sig(prog='PROG', add_help=False) + argument_signatures = [ + Sig('a' * 25), + Sig('b' * 25), + Sig('c' * 25), + ] + argument_group_signatures = [] + usage = '''\ + usage: PROG aaaaaaaaaaaaaaaaaaaaaaaaa bbbbbbbbbbbbbbbbbbbbbbbbb + ccccccccccccccccccccccccc + ''' + help = usage + '''\ + + positional arguments: + aaaaaaaaaaaaaaaaaaaaaaaaa + bbbbbbbbbbbbbbbbbbbbbbbbb + ccccccccccccccccccccccccc + ''' + version = '' + + +class TestHelpVariableExpansion(HelpTestCase): + """Test that variables are expanded properly in help messages""" + + parser_signature = Sig(prog='PROG') + argument_signatures = [ + Sig('-x', type=int, + help='x %(prog)s %(default)s %(type)s %%'), + Sig('-y', action='store_const', default=42, const='XXX', + help='y %(prog)s %(default)s %(const)s'), + Sig('--foo', choices='abc', + help='foo %(prog)s %(default)s %(choices)s'), + Sig('--bar', default='baz', choices=[1, 2], metavar='BBB', + help='bar %(prog)s %(default)s %(dest)s'), + Sig('spam', help='spam %(prog)s %(default)s'), + Sig('badger', default=0.5, help='badger %(prog)s %(default)s'), + ] + argument_group_signatures = [ + (Sig('group'), [ + Sig('-a', help='a %(prog)s %(default)s'), + Sig('-b', default=-1, help='b %(prog)s %(default)s'), + ]) + ] + usage = ('''\ + usage: PROG [-h] [-x X] [-y] [--foo {a,b,c}] [--bar BBB] [-a A] [-b B] + spam badger + ''') + help = usage + '''\ + + positional arguments: + spam spam PROG None + badger badger PROG 0.5 + + optional arguments: + -h, --help show this help message and exit + -x X x PROG None int % + -y y PROG 42 XXX + --foo {a,b,c} foo PROG None a, b, c + --bar BBB bar PROG baz bar + + group: + -a A a PROG None + -b B b PROG -1 + ''' + version = '' + + +class TestHelpVariableExpansionUsageSupplied(HelpTestCase): + """Test that variables are expanded properly when usage= is present""" + + parser_signature = Sig(prog='PROG', usage='%(prog)s FOO') + argument_signatures = [] + argument_group_signatures = [] + usage = ('''\ + usage: PROG FOO + ''') + help = usage + '''\ + + optional arguments: + -h, --help show this help message and exit + ''' + version = '' + + +class TestHelpVariableExpansionNoArguments(HelpTestCase): + """Test that variables are expanded properly with no arguments""" + + parser_signature = Sig(prog='PROG', add_help=False) + argument_signatures = [] + argument_group_signatures = [] + usage = ('''\ + usage: PROG + ''') + help = usage + version = '' + + +class TestHelpSuppressUsage(HelpTestCase): + """Test that items can be suppressed in usage messages""" + + parser_signature = Sig(prog='PROG', usage=argparse.SUPPRESS) + argument_signatures = [ + Sig('--foo', help='foo help'), + Sig('spam', help='spam help'), + ] + argument_group_signatures = [] + help = '''\ + positional arguments: + spam spam help + + optional arguments: + -h, --help show this help message and exit + --foo FOO foo help + ''' + usage = '' + version = '' + + +class TestHelpSuppressOptional(HelpTestCase): + """Test that optional arguments can be suppressed in help messages""" + + parser_signature = Sig(prog='PROG', add_help=False) + argument_signatures = [ + Sig('--foo', help=argparse.SUPPRESS), + Sig('spam', help='spam help'), + ] + argument_group_signatures = [] + usage = '''\ + usage: PROG spam + ''' + help = usage + '''\ + + positional arguments: + spam spam help + ''' + version = '' + + +class TestHelpSuppressOptionalGroup(HelpTestCase): + """Test that optional groups can be suppressed in help messages""" + + parser_signature = Sig(prog='PROG') + argument_signatures = [ + Sig('--foo', help='foo help'), + Sig('spam', help='spam help'), + ] + argument_group_signatures = [ + (Sig('group'), [Sig('--bar', help=argparse.SUPPRESS)]), + ] + usage = '''\ + usage: PROG [-h] [--foo FOO] spam + ''' + help = usage + '''\ + + positional arguments: + spam spam help + + optional arguments: + -h, --help show this help message and exit + --foo FOO foo help + ''' + version = '' + + +class TestHelpSuppressPositional(HelpTestCase): + """Test that positional arguments can be suppressed in help messages""" + + parser_signature = Sig(prog='PROG') + argument_signatures = [ + Sig('--foo', help='foo help'), + Sig('spam', help=argparse.SUPPRESS), + ] + argument_group_signatures = [] + usage = '''\ + usage: PROG [-h] [--foo FOO] + ''' + help = usage + '''\ + + optional arguments: + -h, --help show this help message and exit + --foo FOO foo help + ''' + version = '' + + +class TestHelpRequiredOptional(HelpTestCase): + """Test that required options don't look optional""" + + parser_signature = Sig(prog='PROG') + argument_signatures = [ + Sig('--foo', required=True, help='foo help'), + ] + argument_group_signatures = [] + usage = '''\ + usage: PROG [-h] --foo FOO + ''' + help = usage + '''\ + + optional arguments: + -h, --help show this help message and exit + --foo FOO foo help + ''' + version = '' + + +class TestHelpAlternatePrefixChars(HelpTestCase): + """Test that options display with different prefix characters""" + + parser_signature = Sig(prog='PROG', prefix_chars='^;', add_help=False) + argument_signatures = [ + Sig('^^foo', action='store_true', help='foo help'), + Sig(';b', ';;bar', help='bar help'), + ] + argument_group_signatures = [] + usage = '''\ + usage: PROG [^^foo] [;b BAR] + ''' + help = usage + '''\ + + optional arguments: + ^^foo foo help + ;b BAR, ;;bar BAR bar help + ''' + version = '' + + +class TestHelpNoHelpOptional(HelpTestCase): + """Test that the --help argument can be suppressed help messages""" + + parser_signature = Sig(prog='PROG', add_help=False) + argument_signatures = [ + Sig('--foo', help='foo help'), + Sig('spam', help='spam help'), + ] + argument_group_signatures = [] + usage = '''\ + usage: PROG [--foo FOO] spam + ''' + help = usage + '''\ + + positional arguments: + spam spam help + + optional arguments: + --foo FOO foo help + ''' + version = '' + + +class TestHelpVersionOptional(HelpTestCase): + """Test that the --version argument can be suppressed help messages""" + + parser_signature = Sig(prog='PROG', version='1.0') + argument_signatures = [ + Sig('--foo', help='foo help'), + Sig('spam', help='spam help'), + ] + argument_group_signatures = [] + usage = '''\ + usage: PROG [-h] [-v] [--foo FOO] spam + ''' + help = usage + '''\ + + positional arguments: + spam spam help + + optional arguments: + -h, --help show this help message and exit + -v, --version show program's version number and exit + --foo FOO foo help + ''' + version = '''\ + 1.0 + ''' + + +class TestHelpNone(HelpTestCase): + """Test that no errors occur if no help is specified""" + + parser_signature = Sig(prog='PROG') + argument_signatures = [ + Sig('--foo'), + Sig('spam'), + ] + argument_group_signatures = [] + usage = '''\ + usage: PROG [-h] [--foo FOO] spam + ''' + help = usage + '''\ + + positional arguments: + spam + + optional arguments: + -h, --help show this help message and exit + --foo FOO + ''' + version = '' + + +class TestHelpTupleMetavar(HelpTestCase): + """Test specifying metavar as a tuple""" + + parser_signature = Sig(prog='PROG') + argument_signatures = [ + Sig('-w', help='w', nargs='+', metavar=('W1', 'W2')), + Sig('-x', help='x', nargs='*', metavar=('X1', 'X2')), + Sig('-y', help='y', nargs=3, metavar=('Y1', 'Y2', 'Y3')), + Sig('-z', help='z', nargs='?', metavar=('Z1', )), + ] + argument_group_signatures = [] + usage = '''\ + usage: PROG [-h] [-w W1 [W2 ...]] [-x [X1 [X2 ...]]] [-y Y1 Y2 Y3] \ +[-z [Z1]] + ''' + help = usage + '''\ + + optional arguments: + -h, --help show this help message and exit + -w W1 [W2 ...] w + -x [X1 [X2 ...]] x + -y Y1 Y2 Y3 y + -z [Z1] z + ''' + version = '' + + +class TestHelpRawText(HelpTestCase): + """Test the RawTextHelpFormatter""" + + parser_signature = Sig( + prog='PROG', formatter_class=argparse.RawTextHelpFormatter, + description='Keep the formatting\n' + ' exactly as it is written\n' + '\n' + 'here\n') + + argument_signatures = [ + Sig('--foo', help=' foo help should also\n' + 'appear as given here'), + Sig('spam', help='spam help'), + ] + argument_group_signatures = [ + (Sig('title', description=' This text\n' + ' should be indented\n' + ' exactly like it is here\n'), + [Sig('--bar', help='bar help')]), + ] + usage = '''\ + usage: PROG [-h] [--foo FOO] [--bar BAR] spam + ''' + help = usage + '''\ + + Keep the formatting + exactly as it is written + + here + + positional arguments: + spam spam help + + optional arguments: + -h, --help show this help message and exit + --foo FOO foo help should also + appear as given here + + title: + This text + should be indented + exactly like it is here + + --bar BAR bar help + ''' + version = '' + + +class TestHelpRawDescription(HelpTestCase): + """Test the RawTextHelpFormatter""" + + parser_signature = Sig( + prog='PROG', formatter_class=argparse.RawDescriptionHelpFormatter, + description='Keep the formatting\n' + ' exactly as it is written\n' + '\n' + 'here\n') + + argument_signatures = [ + Sig('--foo', help=' foo help should not\n' + ' retain this odd formatting'), + Sig('spam', help='spam help'), + ] + argument_group_signatures = [ + (Sig('title', description=' This text\n' + ' should be indented\n' + ' exactly like it is here\n'), + [Sig('--bar', help='bar help')]), + ] + usage = '''\ + usage: PROG [-h] [--foo FOO] [--bar BAR] spam + ''' + help = usage + '''\ + + Keep the formatting + exactly as it is written + + here + + positional arguments: + spam spam help + + optional arguments: + -h, --help show this help message and exit + --foo FOO foo help should not retain this odd formatting + + title: + This text + should be indented + exactly like it is here + + --bar BAR bar help + ''' + version = '' + + +class TestHelpArgumentDefaults(HelpTestCase): + """Test the ArgumentDefaultsHelpFormatter""" + + parser_signature = Sig( + prog='PROG', formatter_class=argparse.ArgumentDefaultsHelpFormatter, + description='description') + + argument_signatures = [ + Sig('--foo', help='foo help - oh and by the way, %(default)s'), + Sig('--bar', action='store_true', help='bar help'), + Sig('spam', help='spam help'), + Sig('badger', nargs='?', default='wooden', help='badger help'), + ] + argument_group_signatures = [ + (Sig('title', description='description'), + [Sig('--baz', type=int, default=42, help='baz help')]), + ] + usage = '''\ + usage: PROG [-h] [--foo FOO] [--bar] [--baz BAZ] spam [badger] + ''' + help = usage + '''\ + + description + + positional arguments: + spam spam help + badger badger help (default: wooden) + + optional arguments: + -h, --help show this help message and exit + --foo FOO foo help - oh and by the way, None + --bar bar help (default: False) + + title: + description + + --baz BAZ baz help (default: 42) + ''' + version = '' + +# ===================================== +# Optional/Positional constructor tests +# ===================================== + +class TestInvalidArgumentConstructors(TestCase): + """Test a bunch of invalid Argument constructors""" + + def assertTypeError(self, *args, **kwargs): + parser = argparse.ArgumentParser() + self.assertRaises(TypeError, parser.add_argument, + *args, **kwargs) + + def assertValueError(self, *args, **kwargs): + parser = argparse.ArgumentParser() + self.assertRaises(ValueError, parser.add_argument, + *args, **kwargs) + + def test_invalid_keyword_arguments(self): + self.assertTypeError('-x', bar=None) + self.assertTypeError('-y', callback='foo') + self.assertTypeError('-y', callback_args=()) + self.assertTypeError('-y', callback_kwargs={}) + + def test_missing_destination(self): + self.assertTypeError() + for action in ['append', 'store']: + self.assertTypeError(action=action) + + def test_invalid_option_strings(self): + self.assertValueError('--') + self.assertValueError('---') + + def test_invalid_type(self): + self.assertValueError('--foo', type='int') + + def test_invalid_action(self): + self.assertValueError('-x', action='foo') + self.assertValueError('foo', action='baz') + parser = argparse.ArgumentParser() + try: + parser.add_argument("--foo", action="store-true") + except ValueError: + e = sys.exc_info()[1] + expected = 'unknown action' + msg = 'expected %r, found %r' % (expected, e) + self.failUnless(expected in str(e), msg) + + def test_multiple_dest(self): + parser = argparse.ArgumentParser() + parser.add_argument(dest='foo') + try: + parser.add_argument('bar', dest='baz') + except ValueError: + e = sys.exc_info()[1] + expected = 'dest supplied twice for positional argument' + msg = 'expected %r, found %r' % (expected, e) + self.failUnless(expected in str(e), msg) + + def test_no_argument_actions(self): + for action in ['store_const', 'store_true', 'store_false', + 'append_const', 'count']: + for attrs in [dict(type=int), dict(nargs='+'), + dict(choices='ab')]: + self.assertTypeError('-x', action=action, **attrs) + + def test_no_argument_no_const_actions(self): + # options with zero arguments + for action in ['store_true', 'store_false', 'count']: + + # const is always disallowed + self.assertTypeError('-x', const='foo', action=action) + + # nargs is always disallowed + self.assertTypeError('-x', nargs='*', action=action) + + def test_more_than_one_argument_actions(self): + for action in ['store', 'append']: + + # nargs=0 is disallowed + self.assertValueError('-x', nargs=0, action=action) + self.assertValueError('spam', nargs=0, action=action) + + # const is disallowed with non-optional arguments + for nargs in [1, '*', '+']: + self.assertValueError('-x', const='foo', + nargs=nargs, action=action) + self.assertValueError('spam', const='foo', + nargs=nargs, action=action) + + def test_required_const_actions(self): + for action in ['store_const', 'append_const']: + + # nargs is always disallowed + self.assertTypeError('-x', nargs='+', action=action) + + def test_parsers_action_missing_params(self): + self.assertTypeError('command', action='parsers') + self.assertTypeError('command', action='parsers', prog='PROG') + self.assertTypeError('command', action='parsers', + parser_class=argparse.ArgumentParser) + + def test_required_positional(self): + self.assertTypeError('foo', required=True) + + def test_user_defined_action(self): + + class Success(Exception): + pass + + class Action(object): + + def __init__(self, + option_strings, + dest, + const, + default, + required=False): + if dest == 'spam': + if const is Success: + if default is Success: + raise Success() + + def __call__(self, *args, **kwargs): + pass + + parser = argparse.ArgumentParser() + self.assertRaises(Success, parser.add_argument, '--spam', + action=Action, default=Success, const=Success) + self.assertRaises(Success, parser.add_argument, 'spam', + action=Action, default=Success, const=Success) + +# ================================ +# Actions returned by add_argument +# ================================ + +class TestActionsReturned(TestCase): + + def test_dest(self): + parser = argparse.ArgumentParser() + action = parser.add_argument('--foo') + self.assertEqual(action.dest, 'foo') + action = parser.add_argument('-b', '--bar') + self.assertEqual(action.dest, 'bar') + action = parser.add_argument('-x', '-y') + self.assertEqual(action.dest, 'x') + + def test_misc(self): + parser = argparse.ArgumentParser() + action = parser.add_argument('--foo', nargs='?', const=42, + default=84, type=int, choices=[1, 2], + help='FOO', metavar='BAR', dest='baz') + self.assertEqual(action.nargs, '?') + self.assertEqual(action.const, 42) + self.assertEqual(action.default, 84) + self.assertEqual(action.type, int) + self.assertEqual(action.choices, [1, 2]) + self.assertEqual(action.help, 'FOO') + self.assertEqual(action.metavar, 'BAR') + self.assertEqual(action.dest, 'baz') + + +# ================================ +# Argument conflict handling tests +# ================================ + +class TestConflictHandling(TestCase): + + def test_bad_type(self): + self.assertRaises(ValueError, argparse.ArgumentParser, + conflict_handler='foo') + + def test_conflict_error(self): + parser = argparse.ArgumentParser() + parser.add_argument('-x') + self.assertRaises(argparse.ArgumentError, + parser.add_argument, '-x') + parser.add_argument('--spam') + self.assertRaises(argparse.ArgumentError, + parser.add_argument, '--spam') + + def test_resolve_error(self): + get_parser = argparse.ArgumentParser + parser = get_parser(prog='PROG', conflict_handler='resolve') + + parser.add_argument('-x', help='OLD X') + parser.add_argument('-x', help='NEW X') + self.assertEqual(parser.format_help(), textwrap.dedent('''\ + usage: PROG [-h] [-x X] + + optional arguments: + -h, --help show this help message and exit + -x X NEW X + ''')) + + parser.add_argument('--spam', metavar='OLD_SPAM') + parser.add_argument('--spam', metavar='NEW_SPAM') + self.assertEqual(parser.format_help(), textwrap.dedent('''\ + usage: PROG [-h] [-x X] [--spam NEW_SPAM] + + optional arguments: + -h, --help show this help message and exit + -x X NEW X + --spam NEW_SPAM + ''')) + + +# ============================= +# Help and Version option tests +# ============================= + +class TestOptionalsHelpVersionActions(TestCase): + """Test the help and version actions""" + + def _get_error(self, func, *args, **kwargs): + try: + func(*args, **kwargs) + except ArgumentParserError: + return sys.exc_info()[1] + else: + self.assertRaises(ArgumentParserError, func, *args, **kwargs) + + def assertPrintHelpExit(self, parser, args_str): + self.assertEqual( + parser.format_help(), + self._get_error(parser.parse_args, args_str.split()).stdout) + + def assertPrintVersionExit(self, parser, args_str): + self.assertEqual( + parser.format_version(), + self._get_error(parser.parse_args, args_str.split()).stderr) + + def assertArgumentParserError(self, parser, *args): + self.assertRaises(ArgumentParserError, parser.parse_args, args) + + def test_version(self): + parser = ErrorRaisingArgumentParser(version='1.0') + self.assertPrintHelpExit(parser, '-h') + self.assertPrintHelpExit(parser, '--help') + self.assertPrintVersionExit(parser, '-v') + self.assertPrintVersionExit(parser, '--version') + + def test_version_format(self): + parser = ErrorRaisingArgumentParser(prog='PPP', version='%(prog)s 3.5') + msg = self._get_error(parser.parse_args, ['-v']).stderr + self.assertEqual('PPP 3.5\n', msg) + + def test_version_no_help(self): + parser = ErrorRaisingArgumentParser(add_help=False, version='1.0') + self.assertArgumentParserError(parser, '-h') + self.assertArgumentParserError(parser, '--help') + self.assertPrintVersionExit(parser, '-v') + self.assertPrintVersionExit(parser, '--version') + + def test_version_action(self): + parser = ErrorRaisingArgumentParser(prog='XXX') + parser.add_argument('-V', action='version', version='%(prog)s 3.7') + msg = self._get_error(parser.parse_args, ['-V']).stderr + self.assertEqual('XXX 3.7\n', msg) + + def test_no_help(self): + parser = ErrorRaisingArgumentParser(add_help=False) + self.assertArgumentParserError(parser, '-h') + self.assertArgumentParserError(parser, '--help') + self.assertArgumentParserError(parser, '-v') + self.assertArgumentParserError(parser, '--version') + + def test_alternate_help_version(self): + parser = ErrorRaisingArgumentParser() + parser.add_argument('-x', action='help') + parser.add_argument('-y', action='version') + self.assertPrintHelpExit(parser, '-x') + self.assertPrintVersionExit(parser, '-y') + self.assertArgumentParserError(parser, '-v') + self.assertArgumentParserError(parser, '--version') + + def test_help_version_extra_arguments(self): + parser = ErrorRaisingArgumentParser(version='1.0') + parser.add_argument('-x', action='store_true') + parser.add_argument('y') + + # try all combinations of valid prefixes and suffixes + valid_prefixes = ['', '-x', 'foo', '-x bar', 'baz -x'] + valid_suffixes = valid_prefixes + ['--bad-option', 'foo bar baz'] + for prefix in valid_prefixes: + for suffix in valid_suffixes: + format = '%s %%s %s' % (prefix, suffix) + self.assertPrintHelpExit(parser, format % '-h') + self.assertPrintHelpExit(parser, format % '--help') + self.assertPrintVersionExit(parser, format % '-v') + self.assertPrintVersionExit(parser, format % '--version') + + +# ====================== +# str() and repr() tests +# ====================== + +class TestStrings(TestCase): + """Test str() and repr() on Optionals and Positionals""" + + def assertStringEqual(self, obj, result_string): + for func in [str, repr]: + self.assertEqual(func(obj), result_string) + + def test_optional(self): + option = argparse.Action( + option_strings=['--foo', '-a', '-b'], + dest='b', + type='int', + nargs='+', + default=42, + choices=[1, 2, 3], + help='HELP', + metavar='METAVAR') + string = ( + "Action(option_strings=['--foo', '-a', '-b'], dest='b', " + "nargs='+', const=None, default=42, type='int', " + "choices=[1, 2, 3], help='HELP', metavar='METAVAR')") + self.assertStringEqual(option, string) + + def test_argument(self): + argument = argparse.Action( + option_strings=[], + dest='x', + type=float, + nargs='?', + default=2.5, + choices=[0.5, 1.5, 2.5], + help='H HH H', + metavar='MV MV MV') + string = ( + "Action(option_strings=[], dest='x', nargs='?', " + "const=None, default=2.5, type=%r, choices=[0.5, 1.5, 2.5], " + "help='H HH H', metavar='MV MV MV')" % float) + self.assertStringEqual(argument, string) + + def test_namespace(self): + ns = argparse.Namespace(foo=42, bar='spam') + string = "Namespace(bar='spam', foo=42)" + self.assertStringEqual(ns, string) + + def test_parser(self): + parser = argparse.ArgumentParser(prog='PROG') + string = ( + "ArgumentParser(prog='PROG', usage=None, description=None, " + "version=None, formatter_class=%r, conflict_handler='error', " + "add_help=True)" % argparse.HelpFormatter) + self.assertStringEqual(parser, string) + +# =============== +# Namespace tests +# =============== + +class TestNamespace(TestCase): + + def test_constructor(self): + ns = argparse.Namespace() + self.assertRaises(AttributeError, getattr, ns, 'x') + + ns = argparse.Namespace(a=42, b='spam') + self.assertEqual(ns.a, 42) + self.assertEqual(ns.b, 'spam') + + def test_equality(self): + ns1 = argparse.Namespace(a=1, b=2) + ns2 = argparse.Namespace(b=2, a=1) + ns3 = argparse.Namespace(a=1) + ns4 = argparse.Namespace(b=2) + + self.assertEqual(ns1, ns2) + self.assertNotEqual(ns1, ns3) + self.assertNotEqual(ns1, ns4) + self.assertNotEqual(ns2, ns3) + self.assertNotEqual(ns2, ns4) + self.failUnless(ns1 != ns3) + self.failUnless(ns1 != ns4) + self.failUnless(ns2 != ns3) + self.failUnless(ns2 != ns4) + + +# =================== +# File encoding tests +# =================== + +class TestEncoding(TestCase): + + def _test_module_encoding(self, path): + path, _ = os.path.splitext(path) + path += ".py" + codecs.open(path, 'r', 'utf8').read() + + def test_argparse_module_encoding(self): + self._test_module_encoding(argparse.__file__) + + def test_test_argparse_module_encoding(self): + self._test_module_encoding(__file__) + +# =================== +# ArgumentError tests +# =================== + +class TestArgumentError(TestCase): + + def test_argument_error(self): + msg = "my error here" + error = argparse.ArgumentError(None, msg) + self.failUnlessEqual(str(error), msg) + +# ======================= +# ArgumentTypeError tests +# ======================= + +class TestArgumentError(TestCase): + + def test_argument_type_error(self): + + def spam(string): + raise argparse.ArgumentTypeError('spam!') + + parser = ErrorRaisingArgumentParser(prog='PROG', add_help=False) + parser.add_argument('x', type=spam) + try: + parser.parse_args(['XXX']) + except ArgumentParserError: + expected = 'usage: PROG x\nPROG: error: argument x: spam!\n' + msg = sys.exc_info()[1].stderr + self.failUnlessEqual(expected, msg) + else: + self.fail() + +# ====================== +# parse_known_args tests +# ====================== + +class TestParseKnownArgs(TestCase): + + def test_optionals(self): + parser = argparse.ArgumentParser() + parser.add_argument('--foo') + args, extras = parser.parse_known_args('--foo F --bar --baz'.split()) + self.failUnlessEqual(NS(foo='F'), args) + self.failUnlessEqual(['--bar', '--baz'], extras) + + def test_mixed(self): + parser = argparse.ArgumentParser() + parser.add_argument('-v', nargs='?', const=1, type=int) + parser.add_argument('--spam', action='store_false') + parser.add_argument('badger') + + argv = ["B", "C", "--foo", "-v", "3", "4"] + args, extras = parser.parse_known_args(argv) + self.failUnlessEqual(NS(v=3, spam=True, badger="B"), args) + self.failUnlessEqual(["C", "--foo", "4"], extras) + +# ============================ +# from argparse import * tests +# ============================ + +class TestImportStar(TestCase): + + def test(self): + for name in argparse.__all__: + self.failUnless(hasattr(argparse, name)) + + +if __name__ == '__main__': + unittest.main() Modified: python/trunk/Misc/NEWS ============================================================================== --- python/trunk/Misc/NEWS (original) +++ python/trunk/Misc/NEWS Tue Mar 2 09:38:09 2010 @@ -83,6 +83,8 @@ - Issue #6729: Added ctypes.c_ssize_t to represent ssize_t. +- Issue #6247: The argparse module has been added to the standard library. + Extension Modules ----------------- From python-checkins at python.org Tue Mar 2 10:22:57 2010 From: python-checkins at python.org (steven.bethard) Date: Tue, 2 Mar 2010 10:22:57 +0100 (CET) Subject: [Python-checkins] r78577 - in python/branches/py3k: Doc/library/allos.rst Doc/library/argparse.rst Doc/library/getopt.rst Doc/library/optparse.rst Doc/tutorial/stdlib.rst Lib/argparse.py Lib/test/test_argparse.py Misc/NEWS Message-ID: <20100302092257.69CD1EE99F@mail.python.org> Author: steven.bethard Date: Tue Mar 2 10:22:57 2010 New Revision: 78577 Log: Merged revisions 78576 via svnmerge from svn+ssh://pythondev at svn.python.org/python/trunk ........ r78576 | steven.bethard | 2010-03-02 00:38:09 -0800 (Tue, 02 Mar 2010) | 3 lines Initial commit of the argparse library, based on argparse 1.1. Docs still need some updating to make getopt and optparse match the wording promised in the PEP. There are also probably a number of :class:ArgumentParser etc. links that could be added to the argparse documentation. ........ Added: python/branches/py3k/Doc/library/argparse.rst - copied unchanged from r78576, /python/trunk/Doc/library/argparse.rst python/branches/py3k/Lib/argparse.py - copied unchanged from r78576, /python/trunk/Lib/argparse.py python/branches/py3k/Lib/test/test_argparse.py - copied, changed from r78576, /python/trunk/Lib/test/test_argparse.py Modified: python/branches/py3k/ (props changed) python/branches/py3k/Doc/library/allos.rst python/branches/py3k/Doc/library/getopt.rst python/branches/py3k/Doc/library/optparse.rst python/branches/py3k/Doc/tutorial/stdlib.rst python/branches/py3k/Misc/NEWS Modified: python/branches/py3k/Doc/library/allos.rst ============================================================================== --- python/branches/py3k/Doc/library/allos.rst (original) +++ python/branches/py3k/Doc/library/allos.rst Tue Mar 2 10:22:57 2010 @@ -15,6 +15,7 @@ os.rst io.rst time.rst + argparse.rst optparse.rst getopt.rst logging.rst Modified: python/branches/py3k/Doc/library/getopt.rst ============================================================================== --- python/branches/py3k/Doc/library/getopt.rst (original) +++ python/branches/py3k/Doc/library/getopt.rst Tue Mar 2 10:22:57 2010 @@ -1,5 +1,5 @@ -:mod:`getopt` --- Parser for command line options -================================================= +:mod:`getopt` --- C-style parser for command line options +========================================================= .. module:: getopt :synopsis: Portable parser for command line options; support both short and Modified: python/branches/py3k/Doc/library/optparse.rst ============================================================================== --- python/branches/py3k/Doc/library/optparse.rst (original) +++ python/branches/py3k/Doc/library/optparse.rst Tue Mar 2 10:22:57 2010 @@ -1,8 +1,8 @@ -:mod:`optparse` --- More powerful command line option parser -============================================================ +:mod:`optparse` --- Parser for command line options +=================================================== .. module:: optparse - :synopsis: More convenient, flexible, and powerful command-line parsing library. + :synopsis: Command-line option parsing library. .. moduleauthor:: Greg Ward .. sectionauthor:: Greg Ward Modified: python/branches/py3k/Doc/tutorial/stdlib.rst ============================================================================== --- python/branches/py3k/Doc/tutorial/stdlib.rst (original) +++ python/branches/py3k/Doc/tutorial/stdlib.rst Tue Mar 2 10:22:57 2010 @@ -72,7 +72,7 @@ The :mod:`getopt` module processes *sys.argv* using the conventions of the Unix :func:`getopt` function. More powerful and flexible command line processing is -provided by the :mod:`optparse` module. +provided by the :mod:`argparse` module. .. _tut-stderr: Copied: python/branches/py3k/Lib/test/test_argparse.py (from r78576, /python/trunk/Lib/test/test_argparse.py) ============================================================================== --- /python/trunk/Lib/test/test_argparse.py (original) +++ python/branches/py3k/Lib/test/test_argparse.py Tue Mar 2 10:22:57 2010 @@ -1450,7 +1450,7 @@ Sig('-x', type=argparse.FileType()), Sig('spam', type=argparse.FileType('r')), ] - failures = ['-x', '-x bar'] + failures = ['-x', ''] successes = [ ('foo', NS(x=None, spam=RFile('foo'))), ('-x foo bar', NS(x=RFile('foo'), spam=RFile('bar'))), @@ -1473,7 +1473,7 @@ Sig('-x', type=argparse.FileType('rb')), Sig('spam', type=argparse.FileType('rb')), ] - failures = ['-x', '-x bar'] + failures = ['-x', ''] successes = [ ('foo', NS(x=None, spam=RFile('foo'))), ('-x foo bar', NS(x=RFile('foo'), spam=RFile('bar'))), @@ -1506,7 +1506,7 @@ Sig('-x', type=argparse.FileType('w')), Sig('spam', type=argparse.FileType('w')), ] - failures = ['-x', '-x bar'] + failures = ['-x', ''] successes = [ ('foo', NS(x=None, spam=WFile('foo'))), ('-x foo bar', NS(x=WFile('foo'), spam=WFile('bar'))), @@ -1521,7 +1521,7 @@ Sig('-x', type=argparse.FileType('wb')), Sig('spam', type=argparse.FileType('wb')), ] - failures = ['-x', '-x bar'] + failures = ['-x', ''] successes = [ ('foo', NS(x=None, spam=WFile('foo'))), ('-x foo bar', NS(x=WFile('foo'), spam=WFile('bar'))), @@ -1894,7 +1894,7 @@ parser.add_argument('baz') expected = NS(foo='1', bar='2', baz='3') result = parser.parse_args('1 2 3'.split()) - self.failUnlessEqual(expected, result) + self.assertEqual(expected, result) def test_group_first(self): parser = ErrorRaisingArgumentParser() @@ -1904,7 +1904,7 @@ parser.add_argument('baz') expected = NS(foo='1', bar='2', baz='3') result = parser.parse_args('1 2 3'.split()) - self.failUnlessEqual(expected, result) + self.assertEqual(expected, result) def test_interleaved_groups(self): parser = ErrorRaisingArgumentParser() @@ -1916,7 +1916,7 @@ group.add_argument('frell') expected = NS(foo='1', bar='2', baz='3', frell='4') result = parser.parse_args('1 2 3 4'.split()) - self.failUnlessEqual(expected, result) + self.assertEqual(expected, result) # =================== # Parent parser tests @@ -3783,7 +3783,7 @@ e = sys.exc_info()[1] expected = 'unknown action' msg = 'expected %r, found %r' % (expected, e) - self.failUnless(expected in str(e), msg) + self.assertTrue(expected in str(e), msg) def test_multiple_dest(self): parser = argparse.ArgumentParser() @@ -3794,7 +3794,7 @@ e = sys.exc_info()[1] expected = 'dest supplied twice for positional argument' msg = 'expected %r, found %r' % (expected, e) - self.failUnless(expected in str(e), msg) + self.assertTrue(expected in str(e), msg) def test_no_argument_actions(self): for action in ['store_const', 'store_true', 'store_false', @@ -4111,10 +4111,10 @@ self.assertNotEqual(ns1, ns4) self.assertNotEqual(ns2, ns3) self.assertNotEqual(ns2, ns4) - self.failUnless(ns1 != ns3) - self.failUnless(ns1 != ns4) - self.failUnless(ns2 != ns3) - self.failUnless(ns2 != ns4) + self.assertTrue(ns1 != ns3) + self.assertTrue(ns1 != ns4) + self.assertTrue(ns2 != ns3) + self.assertTrue(ns2 != ns4) # =================== @@ -4143,7 +4143,7 @@ def test_argument_error(self): msg = "my error here" error = argparse.ArgumentError(None, msg) - self.failUnlessEqual(str(error), msg) + self.assertEqual(str(error), msg) # ======================= # ArgumentTypeError tests @@ -4163,7 +4163,7 @@ except ArgumentParserError: expected = 'usage: PROG x\nPROG: error: argument x: spam!\n' msg = sys.exc_info()[1].stderr - self.failUnlessEqual(expected, msg) + self.assertEqual(expected, msg) else: self.fail() @@ -4177,8 +4177,8 @@ parser = argparse.ArgumentParser() parser.add_argument('--foo') args, extras = parser.parse_known_args('--foo F --bar --baz'.split()) - self.failUnlessEqual(NS(foo='F'), args) - self.failUnlessEqual(['--bar', '--baz'], extras) + self.assertEqual(NS(foo='F'), args) + self.assertEqual(['--bar', '--baz'], extras) def test_mixed(self): parser = argparse.ArgumentParser() @@ -4188,8 +4188,8 @@ argv = ["B", "C", "--foo", "-v", "3", "4"] args, extras = parser.parse_known_args(argv) - self.failUnlessEqual(NS(v=3, spam=True, badger="B"), args) - self.failUnlessEqual(["C", "--foo", "4"], extras) + self.assertEqual(NS(v=3, spam=True, badger="B"), args) + self.assertEqual(["C", "--foo", "4"], extras) # ============================ # from argparse import * tests @@ -4199,7 +4199,7 @@ def test(self): for name in argparse.__all__: - self.failUnless(hasattr(argparse, name)) + self.assertTrue(hasattr(argparse, name)) if __name__ == '__main__': Modified: python/branches/py3k/Misc/NEWS ============================================================================== --- python/branches/py3k/Misc/NEWS (original) +++ python/branches/py3k/Misc/NEWS Tue Mar 2 10:22:57 2010 @@ -722,6 +722,8 @@ - Issue #6729: Added ctypes.c_ssize_t to represent ssize_t. +- Issue #6247: The argparse module has been added to the standard library. + Extension Modules ----------------- From python-checkins at python.org Tue Mar 2 10:27:05 2010 From: python-checkins at python.org (steven.bethard) Date: Tue, 2 Mar 2010 10:27:05 +0100 (CET) Subject: [Python-checkins] r78578 - python/branches/release26-maint Message-ID: <20100302092705.D2A05EE99F@mail.python.org> Author: steven.bethard Date: Tue Mar 2 10:27:05 2010 New Revision: 78578 Log: Blocked revisions 78576 via svnmerge ........ r78576 | steven.bethard | 2010-03-02 00:38:09 -0800 (Tue, 02 Mar 2010) | 3 lines Initial commit of the argparse library, based on argparse 1.1. Docs still need some updating to make getopt and optparse match the wording promised in the PEP. There are also probably a number of :class:ArgumentParser etc. links that could be added to the argparse documentation. ........ Modified: python/branches/release26-maint/ (props changed) From python-checkins at python.org Tue Mar 2 10:28:36 2010 From: python-checkins at python.org (steven.bethard) Date: Tue, 2 Mar 2010 10:28:36 +0100 (CET) Subject: [Python-checkins] r78579 - python/branches/release31-maint Message-ID: <20100302092836.C6CF5EE986@mail.python.org> Author: steven.bethard Date: Tue Mar 2 10:28:36 2010 New Revision: 78579 Log: Blocked revisions 78577 via svnmerge ................ r78577 | steven.bethard | 2010-03-02 01:22:57 -0800 (Tue, 02 Mar 2010) | 11 lines Merged revisions 78576 via svnmerge from svn+ssh://pythondev at svn.python.org/python/trunk ........ r78576 | steven.bethard | 2010-03-02 00:38:09 -0800 (Tue, 02 Mar 2010) | 3 lines Initial commit of the argparse library, based on argparse 1.1. Docs still need some updating to make getopt and optparse match the wording promised in the PEP. There are also probably a number of :class:ArgumentParser etc. links that could be added to the argparse documentation. ........ ................ Modified: python/branches/release31-maint/ (props changed) From python-checkins at python.org Tue Mar 2 14:55:34 2010 From: python-checkins at python.org (andrew.kuchling) Date: Tue, 2 Mar 2010 14:55:34 +0100 (CET) Subject: [Python-checkins] r78580 - python/trunk/Doc/whatsnew/2.7.rst Message-ID: <20100302135534.25EFBEE982@mail.python.org> Author: andrew.kuchling Date: Tue Mar 2 14:55:33 2010 New Revision: 78580 Log: Add an item Modified: python/trunk/Doc/whatsnew/2.7.rst Modified: python/trunk/Doc/whatsnew/2.7.rst ============================================================================== --- python/trunk/Doc/whatsnew/2.7.rst (original) +++ python/trunk/Doc/whatsnew/2.7.rst Tue Mar 2 14:55:33 2010 @@ -222,6 +222,16 @@ :pep:`378` - Format Specifier for Thousands Separator PEP written by Raymond Hettinger; implemented by Eric Smith. +PEP 389: The argparse Module for Parsing Command Lines +====================================================== + +XXX write this section. + +.. seealso:: + + :pep:`389` - argparse - New Command Line Parsing Module + PEP written and implemented by Steven Bethard. + PEP 391: Dictionary-Based Configuration For Logging ==================================================== From python-checkins at python.org Tue Mar 2 15:22:15 2010 From: python-checkins at python.org (michael.foord) Date: Tue, 2 Mar 2010 15:22:15 +0100 (CET) Subject: [Python-checkins] r78581 - python/trunk/Doc/library/sqlite3.rst Message-ID: <20100302142215.36D65EE99B@mail.python.org> Author: michael.foord Date: Tue Mar 2 15:22:15 2010 New Revision: 78581 Log: Link correction in documentation. Modified: python/trunk/Doc/library/sqlite3.rst Modified: python/trunk/Doc/library/sqlite3.rst ============================================================================== --- python/trunk/Doc/library/sqlite3.rst (original) +++ python/trunk/Doc/library/sqlite3.rst Tue Mar 2 15:22:15 2010 @@ -92,7 +92,7 @@ .. seealso:: - http://www.pysqlite.org + http://code.google.com/p/pysqlite/ The pysqlite web page -- sqlite3 is developed externally under the name "pysqlite". From python-checkins at python.org Tue Mar 2 17:00:00 2010 From: python-checkins at python.org (florent.xicluna) Date: Tue, 2 Mar 2010 17:00:00 +0100 (CET) Subject: [Python-checkins] r78582 - python/trunk/Lib/test/test_dict.py Message-ID: <20100302160000.56CF6EEA1E@mail.python.org> Author: florent.xicluna Date: Tue Mar 2 17:00:00 2010 New Revision: 78582 Log: Refactor test_dict using assertRaises. Modified: python/trunk/Lib/test/test_dict.py Modified: python/trunk/Lib/test/test_dict.py ============================================================================== --- python/trunk/Lib/test/test_dict.py (original) +++ python/trunk/Lib/test/test_dict.py Tue Mar 2 17:00:00 2010 @@ -9,24 +9,24 @@ def test_constructor(self): # calling built-in types without argument must return empty self.assertEqual(dict(), {}) - self.assertTrue(dict() is not {}) + self.assertIsNot(dict(), {}) def test_literal_constructor(self): - # check literal constructor for different sized dicts (to exercise the BUILD_MAP oparg + # check literal constructor for different sized dicts + # (to exercise the BUILD_MAP oparg). for n in (0, 1, 6, 256, 400): - items = [(''.join([random.choice(string.letters) - for j in range(8)]), - i) + items = [(''.join(random.sample(string.letters, 8)), i) for i in range(n)] random.shuffle(items) - dictliteral = '{' + ', '.join('%r: %d' % item for item in items) + '}' + formatted_items = ('{!r}: {:d}'.format(k, v) for k, v in items) + dictliteral = '{' + ', '.join(formatted_items) + '}' self.assertEqual(eval(dictliteral), dict(items)) def test_bool(self): - self.assertTrue(not {}) + self.assertIs(not {}, True) self.assertTrue({1: 2}) - self.assertTrue(bool({}) is False) - self.assertTrue(bool({1: 2}) is True) + self.assertIs(bool({}), False) + self.assertIs(bool({1: 2}), True) def test_keys(self): d = {} @@ -57,7 +57,7 @@ def test_has_key(self): d = {} - self.assertTrue(not d.has_key('a')) + self.assertFalse(d.has_key('a')) d = {'a': 1, 'b': 2} k = d.keys() k.sort() @@ -68,7 +68,7 @@ def test_contains(self): d = {} self.assertNotIn('a', d) - self.assertTrue(not ('a' in d)) + self.assertFalse('a' in d) self.assertTrue('a' not in d) d = {'a': 1, 'b': 2} self.assertIn('a', d) @@ -207,7 +207,7 @@ def test_fromkeys(self): self.assertEqual(dict.fromkeys('abc'), {'a':None, 'b':None, 'c':None}) d = {} - self.assertTrue(not(d.fromkeys('abc') is d)) + self.assertIsNot(d.fromkeys('abc'), d) self.assertEqual(d.fromkeys('abc'), {'a':None, 'b':None, 'c':None}) self.assertEqual(d.fromkeys((4,5),0), {4:0, 5:0}) self.assertEqual(d.fromkeys([]), {}) @@ -218,8 +218,8 @@ class dictlike(dict): pass self.assertEqual(dictlike.fromkeys('a'), {'a':None}) self.assertEqual(dictlike().fromkeys('a'), {'a':None}) - self.assertTrue(type(dictlike.fromkeys('a')) is dictlike) - self.assertTrue(type(dictlike().fromkeys('a')) is dictlike) + self.assertIsInstance(dictlike.fromkeys('a'), dictlike) + self.assertIsInstance(dictlike().fromkeys('a'), dictlike) class mydict(dict): def __new__(cls): return UserDict.UserDict() @@ -262,10 +262,10 @@ def test_get(self): d = {} - self.assertTrue(d.get('c') is None) + self.assertIs(d.get('c'), None) self.assertEqual(d.get('c', 3), 3) - d = {'a' : 1, 'b' : 2} - self.assertTrue(d.get('c') is None) + d = {'a': 1, 'b': 2} + self.assertIs(d.get('c'), None) self.assertEqual(d.get('c', 3), 3) self.assertEqual(d.get('a'), 1) self.assertEqual(d.get('a', 3), 1) @@ -275,9 +275,9 @@ def test_setdefault(self): # dict.setdefault() d = {} - self.assertTrue(d.setdefault('key0') is None) + self.assertIs(d.setdefault('key0'), None) d.setdefault('key0', []) - self.assertTrue(d.setdefault('key0') is None) + self.assertIs(d.setdefault('key0'), None) d.setdefault('key', []).append(3) self.assertEqual(d['key'][0], 3) d.setdefault('key', []).append(4) @@ -319,9 +319,9 @@ self.assertEqual(va, int(ka)) kb, vb = tb = b.popitem() self.assertEqual(vb, int(kb)) - self.assertTrue(not(copymode < 0 and ta != tb)) - self.assertTrue(not a) - self.assertTrue(not b) + self.assertFalse(copymode < 0 and ta != tb) + self.assertFalse(a) + self.assertFalse(b) d = {} self.assertRaises(KeyError, d.popitem) @@ -338,8 +338,8 @@ self.assertRaises(KeyError, d.pop, k) - # verify longs/ints get same value when key > 32 bits (for 64-bit archs) - # see SF bug #689659 + # verify longs/ints get same value when key > 32 bits + # (for 64-bit archs). See SF bug #689659. x = 4503599627370496L y = 4503599627370496 h = {x: 'anything', y: 'something else'} @@ -367,15 +367,12 @@ self.assertRaises(Exc, d.pop, x) def test_mutatingiteration(self): + # changing dict size during iteration d = {} d[1] = 1 - try: + with self.assertRaises(RuntimeError): for i in d: d[i+1] = 1 - except RuntimeError: - pass - else: - self.fail("changing dict size during iteration doesn't raise Error") def test_repr(self): d = {} @@ -396,8 +393,8 @@ self.assertRaises(Exc, repr, d) def test_le(self): - self.assertTrue(not ({} < {})) - self.assertTrue(not ({1: 2} < {1L: 2L})) + self.assertFalse({} < {}) + self.assertFalse({1: 2} < {1L: 2L}) class Exc(Exception): pass @@ -409,17 +406,14 @@ d1 = {BadCmp(): 1} d2 = {1: 1} - try: + + with self.assertRaises(Exc): d1 < d2 - except Exc: - pass - else: - self.fail("< didn't raise Exc") def test_missing(self): # Make sure dict doesn't have a __missing__ method - self.assertEqual(hasattr(dict, "__missing__"), False) - self.assertEqual(hasattr({}, "__missing__"), False) + self.assertFalse(hasattr(dict, "__missing__")) + self.assertFalse(hasattr({}, "__missing__")) # Test several cases: # (D) subclass defines __missing__ method returning a value # (E) subclass defines __missing__ method raising RuntimeError @@ -434,46 +428,37 @@ self.assertNotIn(2, d) self.assertNotIn(2, d.keys()) self.assertEqual(d[2], 42) + class E(dict): def __missing__(self, key): raise RuntimeError(key) e = E() - try: + with self.assertRaises(RuntimeError) as c: e[42] - except RuntimeError, err: - self.assertEqual(err.args, (42,)) - else: - self.fail("e[42] didn't raise RuntimeError") + self.assertEqual(c.exception.args, (42,)) + class F(dict): def __init__(self): # An instance variable __missing__ should have no effect self.__missing__ = lambda key: None f = F() - try: + with self.assertRaises(KeyError) as c: f[42] - except KeyError, err: - self.assertEqual(err.args, (42,)) - else: - self.fail("f[42] didn't raise KeyError") + self.assertEqual(c.exception.args, (42,)) + class G(dict): pass g = G() - try: + with self.assertRaises(KeyError) as c: g[42] - except KeyError, err: - self.assertEqual(err.args, (42,)) - else: - self.fail("g[42] didn't raise KeyError") + self.assertEqual(c.exception.args, (42,)) def test_tuple_keyerror(self): # SF #1576657 d = {} - try: + with self.assertRaises(KeyError) as c: d[(1,)] - except KeyError, e: - self.assertEqual(e.args, ((1,),)) - else: - self.fail("missing KeyError") + self.assertEqual(c.exception.args, ((1,),)) def test_bad_key(self): # Dictionary lookups should fail if __cmp__() raises an exception. @@ -501,12 +486,8 @@ 'd.setdefault(x2, 42)', 'd.pop(x2)', 'd.update({x2: 2})']: - try: + with self.assertRaises(CustomException): exec stmt in locals() - except CustomException: - pass - else: - self.fail("Statement didn't raise exception") def test_resize1(self): # Dict resizing bug, found by Jack Jansen in 2.2 CVS development. @@ -549,11 +530,9 @@ def test_empty_presized_dict_in_freelist(self): # Bug #3537: if an empty but presized dict with a size larger # than 7 was in the freelist, it triggered an assertion failure - try: - d = {'a': 1/0, 'b': None, 'c': None, 'd': None, 'e': None, + with self.assertRaises(ZeroDivisionError): + d = {'a': 1 // 0, 'b': None, 'c': None, 'd': None, 'e': None, 'f': None, 'g': None, 'h': None} - except ZeroDivisionError: - pass d = {} def test_container_iterator(self): @@ -568,7 +547,7 @@ obj.x = i(container) del obj, container gc.collect() - self.assertTrue(ref() is None, "Cycle was not collected") + self.assertIs(ref(), None, "Cycle was not collected") def _not_tracked(self, t): # Nested containers can take several collections to untrack From python-checkins at python.org Tue Mar 2 17:06:24 2010 From: python-checkins at python.org (florent.xicluna) Date: Tue, 2 Mar 2010 17:06:24 +0100 (CET) Subject: [Python-checkins] r78583 - in python/branches/py3k: Lib/test/test_dict.py Message-ID: <20100302160624.546B3FD93@mail.python.org> Author: florent.xicluna Date: Tue Mar 2 17:06:24 2010 New Revision: 78583 Log: Recorded merge of revisions 78582 via svnmerge from svn+ssh://pythondev at svn.python.org/python/trunk ........ r78582 | florent.xicluna | 2010-03-02 17:00:00 +0100 (mar, 02 mar 2010) | 2 lines Refactor test_dict using assertRaises. ........ Modified: python/branches/py3k/ (props changed) python/branches/py3k/Lib/test/test_dict.py Modified: python/branches/py3k/Lib/test/test_dict.py ============================================================================== --- python/branches/py3k/Lib/test/test_dict.py (original) +++ python/branches/py3k/Lib/test/test_dict.py Tue Mar 2 17:06:24 2010 @@ -1,7 +1,7 @@ import unittest from test import support -import sys, collections, random, string +import collections, random, string import gc, weakref @@ -10,24 +10,24 @@ def test_constructor(self): # calling built-in types without argument must return empty self.assertEqual(dict(), {}) - self.assertTrue(dict() is not {}) + self.assertIsNot(dict(), {}) def test_literal_constructor(self): - # check literal constructor for different sized dicts (to exercise the BUILD_MAP oparg + # check literal constructor for different sized dicts + # (to exercise the BUILD_MAP oparg). for n in (0, 1, 6, 256, 400): - items = [(''.join([random.choice(string.ascii_letters) - for j in range(8)]), - i) + items = [(''.join(random.sample(string.ascii_letters, 8)), i) for i in range(n)] random.shuffle(items) - dictliteral = '{' + ', '.join('%r: %d' % item for item in items) + '}' + formatted_items = ('{!r}: {:d}'.format(k, v) for k, v in items) + dictliteral = '{' + ', '.join(formatted_items) + '}' self.assertEqual(eval(dictliteral), dict(items)) def test_bool(self): - self.assertTrue(not {}) + self.assertIs(not {}, True) self.assertTrue({1: 2}) - self.assertTrue(bool({}) is False) - self.assertTrue(bool({1: 2}) is True) + self.assertIs(bool({}), False) + self.assertIs(bool({1: 2}), True) def test_keys(self): d = {} @@ -59,7 +59,7 @@ def test_contains(self): d = {} self.assertNotIn('a', d) - self.assertTrue(not ('a' in d)) + self.assertFalse('a' in d) self.assertTrue('a' not in d) d = {'a': 1, 'b': 2} self.assertIn('a', d) @@ -198,7 +198,7 @@ def test_fromkeys(self): self.assertEqual(dict.fromkeys('abc'), {'a':None, 'b':None, 'c':None}) d = {} - self.assertTrue(not(d.fromkeys('abc') is d)) + self.assertIsNot(d.fromkeys('abc'), d) self.assertEqual(d.fromkeys('abc'), {'a':None, 'b':None, 'c':None}) self.assertEqual(d.fromkeys((4,5),0), {4:0, 5:0}) self.assertEqual(d.fromkeys([]), {}) @@ -209,8 +209,8 @@ class dictlike(dict): pass self.assertEqual(dictlike.fromkeys('a'), {'a':None}) self.assertEqual(dictlike().fromkeys('a'), {'a':None}) - self.assertTrue(type(dictlike.fromkeys('a')) is dictlike) - self.assertTrue(type(dictlike().fromkeys('a')) is dictlike) + self.assertIsInstance(dictlike.fromkeys('a'), dictlike) + self.assertIsInstance(dictlike().fromkeys('a'), dictlike) class mydict(dict): def __new__(cls): return collections.UserDict() @@ -253,10 +253,10 @@ def test_get(self): d = {} - self.assertTrue(d.get('c') is None) + self.assertIs(d.get('c'), None) self.assertEqual(d.get('c', 3), 3) - d = {'a' : 1, 'b' : 2} - self.assertTrue(d.get('c') is None) + d = {'a': 1, 'b': 2} + self.assertIs(d.get('c'), None) self.assertEqual(d.get('c', 3), 3) self.assertEqual(d.get('a'), 1) self.assertEqual(d.get('a', 3), 1) @@ -266,9 +266,9 @@ def test_setdefault(self): # dict.setdefault() d = {} - self.assertTrue(d.setdefault('key0') is None) + self.assertIs(d.setdefault('key0'), None) d.setdefault('key0', []) - self.assertTrue(d.setdefault('key0') is None) + self.assertIs(d.setdefault('key0'), None) d.setdefault('key', []).append(3) self.assertEqual(d['key'][0], 3) d.setdefault('key', []).append(4) @@ -310,9 +310,9 @@ self.assertEqual(va, int(ka)) kb, vb = tb = b.popitem() self.assertEqual(vb, int(kb)) - self.assertTrue(not(copymode < 0 and ta != tb)) - self.assertTrue(not a) - self.assertTrue(not b) + self.assertFalse(copymode < 0 and ta != tb) + self.assertFalse(a) + self.assertFalse(b) d = {} self.assertRaises(KeyError, d.popitem) @@ -351,15 +351,12 @@ self.assertRaises(Exc, d.pop, x) def test_mutatingiteration(self): + # changing dict size during iteration d = {} d[1] = 1 - try: + with self.assertRaises(RuntimeError): for i in d: d[i+1] = 1 - except RuntimeError: - pass - else: - self.fail("changing dict size during iteration doesn't raise Error") def test_repr(self): d = {} @@ -393,12 +390,9 @@ d1 = {BadCmp(): 1} d2 = {1: 1} - try: + + with self.assertRaises(Exc): d1 == d2 - except Exc: - pass - else: - self.fail("< didn't raise Exc") def test_keys_contained(self): self.helper_keys_contained(lambda x: x.keys()) @@ -452,62 +446,70 @@ class C: def __eq__(self, other): raise RuntimeError + d1 = {1: C()} d2 = {1: C()} - self.assertRaises(RuntimeError, lambda: d1.items() == d2.items()) - self.assertRaises(RuntimeError, lambda: d1.items() != d2.items()) - self.assertRaises(RuntimeError, lambda: d1.items() <= d2.items()) - self.assertRaises(RuntimeError, lambda: d1.items() >= d2.items()) + with self.assertRaises(RuntimeError): + d1.items() == d2.items() + with self.assertRaises(RuntimeError): + d1.items() != d2.items() + with self.assertRaises(RuntimeError): + d1.items() <= d2.items() + with self.assertRaises(RuntimeError): + d1.items() >= d2.items() + d3 = {1: C(), 2: C()} - self.assertRaises(RuntimeError, lambda: d2.items() < d3.items()) - self.assertRaises(RuntimeError, lambda: d3.items() > d2.items()) + with self.assertRaises(RuntimeError): + d2.items() < d3.items() + with self.assertRaises(RuntimeError): + d3.items() > d2.items() def test_dictview_set_operations_on_keys(self): k1 = {1:1, 2:2}.keys() k2 = {1:1, 2:2, 3:3}.keys() k3 = {4:4}.keys() - self.assertEquals(k1 - k2, set()) - self.assertEquals(k1 - k3, {1,2}) - self.assertEquals(k2 - k1, {3}) - self.assertEquals(k3 - k1, {4}) - self.assertEquals(k1 & k2, {1,2}) - self.assertEquals(k1 & k3, set()) - self.assertEquals(k1 | k2, {1,2,3}) - self.assertEquals(k1 ^ k2, {3}) - self.assertEquals(k1 ^ k3, {1,2,4}) + self.assertEqual(k1 - k2, set()) + self.assertEqual(k1 - k3, {1,2}) + self.assertEqual(k2 - k1, {3}) + self.assertEqual(k3 - k1, {4}) + self.assertEqual(k1 & k2, {1,2}) + self.assertEqual(k1 & k3, set()) + self.assertEqual(k1 | k2, {1,2,3}) + self.assertEqual(k1 ^ k2, {3}) + self.assertEqual(k1 ^ k3, {1,2,4}) def test_dictview_set_operations_on_items(self): k1 = {1:1, 2:2}.items() k2 = {1:1, 2:2, 3:3}.items() k3 = {4:4}.items() - self.assertEquals(k1 - k2, set()) - self.assertEquals(k1 - k3, {(1,1), (2,2)}) - self.assertEquals(k2 - k1, {(3,3)}) - self.assertEquals(k3 - k1, {(4,4)}) - self.assertEquals(k1 & k2, {(1,1), (2,2)}) - self.assertEquals(k1 & k3, set()) - self.assertEquals(k1 | k2, {(1,1), (2,2), (3,3)}) - self.assertEquals(k1 ^ k2, {(3,3)}) - self.assertEquals(k1 ^ k3, {(1,1), (2,2), (4,4)}) + self.assertEqual(k1 - k2, set()) + self.assertEqual(k1 - k3, {(1,1), (2,2)}) + self.assertEqual(k2 - k1, {(3,3)}) + self.assertEqual(k3 - k1, {(4,4)}) + self.assertEqual(k1 & k2, {(1,1), (2,2)}) + self.assertEqual(k1 & k3, set()) + self.assertEqual(k1 | k2, {(1,1), (2,2), (3,3)}) + self.assertEqual(k1 ^ k2, {(3,3)}) + self.assertEqual(k1 ^ k3, {(1,1), (2,2), (4,4)}) def test_dictview_mixed_set_operations(self): # Just a few for .keys() self.assertTrue({1:1}.keys() == {1}) self.assertTrue({1} == {1:1}.keys()) - self.assertEquals({1:1}.keys() | {2}, {1, 2}) - self.assertEquals({2} | {1:1}.keys(), {1, 2}) + self.assertEqual({1:1}.keys() | {2}, {1, 2}) + self.assertEqual({2} | {1:1}.keys(), {1, 2}) # And a few for .items() self.assertTrue({1:1}.items() == {(1,1)}) self.assertTrue({(1,1)} == {1:1}.items()) - self.assertEquals({1:1}.items() | {2}, {(1,1), 2}) - self.assertEquals({2} | {1:1}.items(), {(1,1), 2}) + self.assertEqual({1:1}.items() | {2}, {(1,1), 2}) + self.assertEqual({2} | {1:1}.items(), {(1,1), 2}) def test_missing(self): # Make sure dict doesn't have a __missing__ method - self.assertEqual(hasattr(dict, "__missing__"), False) - self.assertEqual(hasattr({}, "__missing__"), False) + self.assertFalse(hasattr(dict, "__missing__")) + self.assertFalse(hasattr({}, "__missing__")) # Test several cases: # (D) subclass defines __missing__ method returning a value # (E) subclass defines __missing__ method raising RuntimeError @@ -522,46 +524,37 @@ self.assertNotIn(2, d) self.assertNotIn(2, d.keys()) self.assertEqual(d[2], 42) + class E(dict): def __missing__(self, key): raise RuntimeError(key) e = E() - try: + with self.assertRaises(RuntimeError) as c: e[42] - except RuntimeError as err: - self.assertEqual(err.args, (42,)) - else: - self.fail("e[42] didn't raise RuntimeError") + self.assertEqual(c.exception.args, (42,)) + class F(dict): def __init__(self): # An instance variable __missing__ should have no effect self.__missing__ = lambda key: None f = F() - try: + with self.assertRaises(KeyError) as c: f[42] - except KeyError as err: - self.assertEqual(err.args, (42,)) - else: - self.fail("f[42] didn't raise KeyError") + self.assertEqual(c.exception.args, (42,)) + class G(dict): pass g = G() - try: + with self.assertRaises(KeyError) as c: g[42] - except KeyError as err: - self.assertEqual(err.args, (42,)) - else: - self.fail("g[42] didn't raise KeyError") + self.assertEqual(c.exception.args, (42,)) def test_tuple_keyerror(self): # SF #1576657 d = {} - try: + with self.assertRaises(KeyError) as c: d[(1,)] - except KeyError as e: - self.assertEqual(e.args, ((1,),)) - else: - self.fail("missing KeyError") + self.assertEqual(c.exception.args, ((1,),)) def test_bad_key(self): # Dictionary lookups should fail if __eq__() raises an exception. @@ -588,12 +581,8 @@ 'd.setdefault(x2, 42)', 'd.pop(x2)', 'd.update({x2: 2})']: - try: + with self.assertRaises(CustomException): exec(stmt, locals()) - except CustomException: - pass - else: - self.fail("Statement %r didn't raise exception" % stmt) def test_resize1(self): # Dict resizing bug, found by Jack Jansen in 2.2 CVS development. @@ -636,11 +625,9 @@ def test_empty_presized_dict_in_freelist(self): # Bug #3537: if an empty but presized dict with a size larger # than 7 was in the freelist, it triggered an assertion failure - try: - d = {'a': 1/0, 'b': None, 'c': None, 'd': None, 'e': None, + with self.assertRaises(ZeroDivisionError): + d = {'a': 1 // 0, 'b': None, 'c': None, 'd': None, 'e': None, 'f': None, 'g': None, 'h': None} - except ZeroDivisionError: - pass d = {} def test_container_iterator(self): @@ -657,7 +644,7 @@ obj.x = iter(obj.v) del obj, container gc.collect() - self.assertTrue(ref() is None, "Cycle was not collected") + self.assertIs(ref(), None, "Cycle was not collected") def _not_tracked(self, t): # Nested containers can take several collections to untrack From ezio.melotti at gmail.com Tue Mar 2 20:30:29 2010 From: ezio.melotti at gmail.com (Ezio Melotti) Date: Tue, 02 Mar 2010 21:30:29 +0200 Subject: [Python-checkins] r78576 - in python/trunk: Doc/library/allos.rst Doc/library/argparse.rst Doc/library/getopt.rst Doc/library/optparse.rst Doc/tutorial/stdlib.rst Lib/argparse.py Lib/test/test_argparse.py Misc/NEWS In-Reply-To: <20100302083810.1FA55EE988@mail.python.org> References: <20100302083810.1FA55EE988@mail.python.org> Message-ID: <4B8D6755.2010002@gmail.com> Hi, On 02/03/2010 10.38, steven.bethard wrote: > Author: steven.bethard > Date: Tue Mar 2 09:38:09 2010 > New Revision: 78576 > > Log: > Initial commit of the argparse library, based on argparse 1.1. > Docs still need some updating to make getopt and optparse match the wording promised in the PEP. > There are also probably a number of :class:ArgumentParser etc. links that could be added to the argparse documentation. > > Added: > python/trunk/Doc/library/argparse.rst > python/trunk/Lib/argparse.py (contents, props changed) > python/trunk/Lib/test/test_argparse.py (contents, props changed) > Modified: > python/trunk/Doc/library/allos.rst > python/trunk/Doc/library/getopt.rst > python/trunk/Doc/library/optparse.rst > python/trunk/Doc/tutorial/stdlib.rst > python/trunk/Misc/NEWS > > +[...] > + > +try: > + from StringIO import StringIO > +except ImportError: > + from io import StringIO > + > +try: > + set > +except NameError: > + from sets import Set as set > + > +try: > + sorted > +except NameError: > + > + def sorted(iterable, reverse=False): > + result = list(iterable) > + result.sort() > + if reverse: > + result.reverse() > + return result > + > +# silence Python 2.6 buggy warnings about Exception.message > +if sys.version_info[:2] == (2, 6): > + import warnings > + warnings.filterwarnings( > + action='ignore', > + message='BaseException.message has been deprecated as of Python 2.6', > + category=DeprecationWarning) > + > +[...] > + > +class TestCase(unittest.TestCase): > + > + def assertEqual(self, obj1, obj2): > + if obj1 != obj2: > + print('') > + print(repr(obj1)) > + print(repr(obj2)) > + print(obj1) > + print(obj2) > + super(TestCase, self).assertEqual(obj1, obj2) > + > I didn't review all the patch, but this code (and probably other) doesn't look necessary anymore. > + > +class TempDirMixin(object): > + > + def setUp(self): > + self.temp_dir = tempfile.mkdtemp() > + self.old_dir = os.getcwd() > + os.chdir(self.temp_dir) > + > + def tearDown(self): > + os.chdir(self.old_dir) > + while True: > + try: > + shutil.rmtree(self.temp_dir) > + except WindowsError: > + continue > + else: > + break > +[...] > This could be replaced with test_support.temp_cwd. Note that the tests are run on a temporary dir that should always be writable, so maybe this class can be removed too. Best Regards, Ezio Melotti From python-checkins at python.org Tue Mar 2 21:06:31 2010 From: python-checkins at python.org (brett.cannon) Date: Tue, 2 Mar 2010 21:06:31 +0100 (CET) Subject: [Python-checkins] r78584 - peps/trunk/pep-3147.txt Message-ID: <20100302200631.7E371FE34@mail.python.org> Author: brett.cannon Date: Tue Mar 2 21:06:31 2010 New Revision: 78584 Log: Fix a title underline that was too short. Modified: peps/trunk/pep-3147.txt Modified: peps/trunk/pep-3147.txt ============================================================================== --- peps/trunk/pep-3147.txt (original) +++ peps/trunk/pep-3147.txt Tue Mar 2 21:06:31 2010 @@ -234,7 +234,7 @@ Case 3: __pycache__/foo..pyc with no source ------------------------------------------- +--------------------------------------------------- It's possible that the `foo.py` file somehow got removed, while leaving the cached pyc file still on the file system. If the From python-checkins at python.org Tue Mar 2 22:34:46 2010 From: python-checkins at python.org (florent.xicluna) Date: Tue, 2 Mar 2010 22:34:46 +0100 (CET) Subject: [Python-checkins] r78585 - in python/trunk: Lib/test/test_pep277.py Misc/NEWS Message-ID: <20100302213446.288A2EEA2E@mail.python.org> Author: florent.xicluna Date: Tue Mar 2 22:34:45 2010 New Revision: 78585 Log: Tentatively enable test_pep277 on all platforms. Modified: python/trunk/Lib/test/test_pep277.py python/trunk/Misc/NEWS Modified: python/trunk/Lib/test/test_pep277.py ============================================================================== --- python/trunk/Lib/test/test_pep277.py (original) +++ python/trunk/Lib/test/test_pep277.py Tue Mar 2 22:34:45 2010 @@ -2,8 +2,9 @@ # open, os.open, os.stat. os.listdir, os.rename, os.remove, os.mkdir, os.chdir, os.rmdir import sys, os, unittest from test import test_support -if not os.path.supports_unicode_filenames: - raise unittest.SkipTest, "test works only on NT+" +## There's no obvious reason to skip these tests on POSIX systems +# if not os.path.supports_unicode_filenames: +# raise unittest.SkipTest, "test works only on NT+" filenames = [ 'abc', @@ -51,6 +52,9 @@ raise test_support.TestFailed("Expected to fail calling '%s(%r)'" % (fn.__name__, filename)) except expected_exception, details: + # the "filename" exception attribute may be encoded + if isinstance(details.filename, str): + filename = filename.encode(sys.getfilesystemencoding()) if check_fn_in_exception and details.filename != filename: raise test_support.TestFailed("Function '%s(%r) failed with " "bad filename in the exception: %r" @@ -80,7 +84,7 @@ f1 = os.listdir(test_support.TESTFN) f2 = os.listdir(unicode(test_support.TESTFN, sys.getfilesystemencoding())) - sf2 = set(u"\\".join((unicode(test_support.TESTFN), f)) + sf2 = set(os.path.join(unicode(test_support.TESTFN), f) for f in f2) self.assertEqual(len(f1), len(self.files)) self.assertEqual(sf2, set(self.files)) Modified: python/trunk/Misc/NEWS ============================================================================== --- python/trunk/Misc/NEWS (original) +++ python/trunk/Misc/NEWS Tue Mar 2 22:34:45 2010 @@ -106,6 +106,8 @@ Tests ----- +- Issue #767675: enable test_pep277 on all platforms. + - Issue #6292: for the moment at least, the test suite runs cleanly if python is run with the -OO flag. Tests requiring docstrings are skipped. From python-checkins at python.org Tue Mar 2 23:03:03 2010 From: python-checkins at python.org (benjamin.peterson) Date: Tue, 2 Mar 2010 23:03:03 +0100 (CET) Subject: [Python-checkins] r78586 - python/trunk/Lib/argparse.py Message-ID: <20100302220303.64CE0EEA3A@mail.python.org> Author: benjamin.peterson Date: Tue Mar 2 23:03:03 2010 New Revision: 78586 Log: remove coding cookie as mandated by PEP 8 Modified: python/trunk/Lib/argparse.py Modified: python/trunk/Lib/argparse.py ============================================================================== --- python/trunk/Lib/argparse.py (original) +++ python/trunk/Lib/argparse.py Tue Mar 2 23:03:03 2010 @@ -1,6 +1,4 @@ -# -*- coding: utf-8 -*- - -# Copyright ? 2006-2009 Steven J. Bethard . +# Copyright 2006-2009 Steven J. Bethard . # # Licensed under the Apache License, Version 2.0 (the "License"); you may not # use this file except in compliance with the License. You may obtain a copy From python-checkins at python.org Tue Mar 2 23:05:59 2010 From: python-checkins at python.org (benjamin.peterson) Date: Tue, 2 Mar 2010 23:05:59 +0100 (CET) Subject: [Python-checkins] r78587 - in python/trunk: Doc/library/argparse.rst Lib/argparse.py Lib/test/test_argparse.py Message-ID: <20100302220559.9BF7DFC81@mail.python.org> Author: benjamin.peterson Date: Tue Mar 2 23:05:59 2010 New Revision: 78587 Log: set svn:eol-style Modified: python/trunk/Doc/library/argparse.rst (contents, props changed) python/trunk/Lib/argparse.py (contents, props changed) python/trunk/Lib/test/test_argparse.py (contents, props changed) Modified: python/trunk/Doc/library/argparse.rst ============================================================================== --- python/trunk/Doc/library/argparse.rst (original) +++ python/trunk/Doc/library/argparse.rst Tue Mar 2 23:05:59 2010 @@ -1,1758 +1,1758 @@ -:mod:`argparse` -- Parser for command line options, arguments and sub-commands -============================================================================== - -.. module:: argparse - :synopsis: Command-line option and argument parsing library. -.. moduleauthor:: Steven Bethard -.. versionadded:: 2.7 -.. sectionauthor:: Steven Bethard - - -The :mod:`argparse` module makes it easy to write user friendly command line -interfaces. You define what arguments your program requires, and -:mod:`argparse` will figure out how to parse those out of ``sys.argv``. The -:mod:`argparse` module also automatically generates help and usage messages -based on the arguments you have defined, and issues errors when users give your -program invalid arguments. - -Example -------- - -As an example, the following code is a Python program that takes a list of -integers and produces either the sum or the max:: - - import argparse - - parser = argparse.ArgumentParser(description='Process some integers.') - parser.add_argument('integers', metavar='N', type=int, nargs='+', - help='an integer for the accumulator') - parser.add_argument('--sum', dest='accumulate', action='store_const', - const=sum, default=max, - help='sum the integers (default: find the max)') - - args = parser.parse_args() - print args.accumulate(args.integers) - -Assuming the Python code above is saved into a file called ``prog.py``, it can -be run at the command line and provides useful help messages:: - - $ prog.py -h - usage: prog.py [-h] [--sum] N [N ...] - - Process some integers. - - positional arguments: - N an integer for the accumulator - - optional arguments: - -h, --help show this help message and exit - --sum sum the integers (default: find the max) - -When run with the appropriate arguments, it prints either the sum or the max of -the command-line integers:: - - $ prog.py 1 2 3 4 - 4 - - $ prog.py 1 2 3 4 --sum - 10 - -If invalid arguments are passed in, it will issue an error:: - - $ prog.py a b c - usage: prog.py [-h] [--sum] N [N ...] - prog.py: error: argument N: invalid int value: 'a' - -The following sections walk you through this example. - -Creating a parser -^^^^^^^^^^^^^^^^^ - -Pretty much every script that uses the :mod:`argparse` module will start out by -creating an :class:`ArgumentParser` object:: - - >>> parser = argparse.ArgumentParser(description='Process some integers.') - -The :class:`ArgumentParser` object will hold all the information necessary to -parse the command line into a more manageable form for your program. - - -Adding arguments -^^^^^^^^^^^^^^^^ - -Once you've created an :class:`ArgumentParser`, you'll want to fill it with -information about your program arguments. You typically do this by making calls -to the :meth:`add_argument` method. Generally, these calls tell the -:class:`ArgumentParser` how to take the strings on the command line and turn -them into objects for you. This information is stored and used when -:meth:`parse_args` is called. For example, if we add some arguments like this:: - - >>> parser.add_argument('integers', metavar='N', type=int, nargs='+', - ... help='an integer for the accumulator') - >>> parser.add_argument('--sum', dest='accumulate', action='store_const', - ... const=sum, default=max, - ... help='sum the integers (default: find the max)') - -when we later call :meth:`parse_args`, we can expect it to return an object -with two attributes, ``integers`` and ``accumulate``. The ``integers`` -attribute will be a list of one or more ints, and the ``accumulate`` attribute -will be either the ``sum`` function, if ``--sum`` was specified at the command -line, or the ``max`` function if it was not. - -Parsing arguments -^^^^^^^^^^^^^^^^^ - -Once an :class:`ArgumentParser` has been initialized with appropriate calls to -:meth:`add_argument`, it can be instructed to parse the command-line args by -calling the :meth:`parse_args` method. This will inspect the command-line, -convert each arg to the appropriate type and then invoke the appropriate -action. In most cases, this means a simple namespace object will be built up -from attributes parsed out of the command-line:: - - >>> parser.parse_args(['--sum', '7', '-1', '42']) - Namespace(accumulate=, integers=[7, -1, 42]) - -In a script, :meth:`parse_args` will typically be called with no arguments, and -the :class:`ArgumentParser` will automatically determine the command-line args -from ``sys.argv``. That's pretty much it. You're now ready to go write some -command line interfaces! - - -ArgumentParser objects ----------------------- - -.. class:: ArgumentParser([description], [epilog], [prog], [usage], [add_help], [argument_default], [parents], [prefix_chars], [conflict_handler], [formatter_class]) - - Create a new :class:`ArgumentParser` object. Each parameter has its own more - detailed description below, but in short they are: - - * description_ - Text to display before the argument help. - - * epilog_ - Text to display after the argument help. - - * add_help_ - Add a -h/--help option to the parser. (default: True) - - * argument_default_ - Set the global default value for arguments. - (default: None) - - * parents_ - A list of :class:ArgumentParser objects whose arguments should - also be included. - - * prefix_chars_ - The set of characters that prefix optional arguments. - (default: '-') - - * fromfile_prefix_chars_ - The set of characters that prefix files from - which additional arguments should be read. (default: None) - - * formatter_class_ - A class for customizing the help output. - - * conflict_handler_ - Usually unnecessary, defines strategy for resolving - conflicting optionals. - - * prog_ - Usually unnecessary, the name of the program - (default: ``sys.argv[0]``) - - * usage_ - Usually unnecessary, the string describing the program usage - (default: generated) - - The following sections describe how each of these are used. - - -description -^^^^^^^^^^^ - -Most calls to the ArgumentParser constructor will use the ``description=`` -keyword argument. This argument gives a brief description of what the program -does and how it works. In help messages, the description is displayed between -the command-line usage string and the help messages for the various arguments:: - - >>> parser = argparse.ArgumentParser(description='A foo that bars') - >>> parser.print_help() - usage: argparse.py [-h] - - A foo that bars - - optional arguments: - -h, --help show this help message and exit - -By default, the description will be line-wrapped so that it fits within the -given space. To change this behavior, see the formatter_class_ argument. - - -epilog -^^^^^^ - -Some programs like to display additional description of the program after the -description of the arguments. Such text can be specified using the ``epilog=`` -argument to ArgumentParser:: - - >>> parser = argparse.ArgumentParser( - ... description='A foo that bars', - ... epilog="And that's how you'd foo a bar") - >>> parser.print_help() - usage: argparse.py [-h] - - A foo that bars - - optional arguments: - -h, --help show this help message and exit - - And that's how you'd foo a bar - -As with the description_ argument, the ``epilog=`` text is by default -line-wrapped, but this behavior can be adjusted with the formatter_class_ -argument to ArgumentParser. - - -add_help -^^^^^^^^ - -By default, ArgumentParser objects add a ``-h/--help`` option which simply -displays the parser's help message. For example, consider a file named -``myprogram.py`` containing the following code:: - - import argparse - parser = argparse.ArgumentParser() - parser.add_argument('--foo', help='foo help') - args = parser.parse_args() - -If ``-h`` or ``--help`` is supplied is at the command-line, the ArgumentParser -help will be printed:: - - $ python myprogram.py --help - usage: myprogram.py [-h] [--foo FOO] - - optional arguments: - -h, --help show this help message and exit - --foo FOO foo help - -Occasionally, it may be useful to disable the addition of this help option. -This can be achieved by passing ``False`` as the ``add_help=`` argument to -ArgumentParser:: - - >>> parser = argparse.ArgumentParser(prog='PROG', add_help=False) - >>> parser.add_argument('--foo', help='foo help') - >>> parser.print_help() - usage: PROG [--foo FOO] - - optional arguments: - --foo FOO foo help - - -prefix_chars -^^^^^^^^^^^^ - -Most command-line options will use ``'-'`` as the prefix, e.g. ``-f/--foo``. -Parsers that need to support additional prefix characters, e.g. for options -like ``+f`` or ``/foo``, may specify them using the ``prefix_chars=`` argument -to the ArgumentParser constructor:: - - >>> parser = argparse.ArgumentParser(prog='PROG', prefix_chars='-+') - >>> parser.add_argument('+f') - >>> parser.add_argument('++bar') - >>> parser.parse_args('+f X ++bar Y'.split()) - Namespace(bar='Y', f='X') - -The ``prefix_chars=`` argument defaults to ``'-'``. Supplying a set of -characters that does not include ``'-'`` will cause ``-f/--foo`` options to be -disallowed. - - -fromfile_prefix_chars -^^^^^^^^^^^^^^^^^^^^^ - -Sometimes, e.g. for particularly long argument lists, it may make sense to -keep the list of arguments in a file rather than typing it out at the command -line. If the ``fromfile_prefix_chars=`` argument is given to the ArgumentParser -constructor, then arguments that start with any of the specified characters -will be treated as files, and will be replaced by the arguments they contain. -For example:: - - >>> open('args.txt', 'w').write('-f\nbar') - >>> parser = argparse.ArgumentParser(fromfile_prefix_chars='@') - >>> parser.add_argument('-f') - >>> parser.parse_args(['-f', 'foo', '@args.txt']) - Namespace(f='bar') - -Arguments read from a file must by default be one per line (but see also -:meth:`convert_arg_line_to_args`) and are treated as if they were in the same -place as the original file referencing argument on the command line. So in the -example above, the expression ``['-f', 'foo', '@args.txt']`` is considered -equivalent to the expression ``['-f', 'foo', '-f', 'bar']``. - -The ``fromfile_prefix_chars=`` argument defaults to ``None``, meaning that -arguments will never be treated as file references. - -argument_default -^^^^^^^^^^^^^^^^ - -Generally, argument defaults are specified either by passing a default to -:meth:`add_argument` or by calling the :meth:`set_defaults` methods with a -specific set of name-value pairs. Sometimes however, it may be useful to -specify a single parser-wide default for arguments. This can be accomplished by -passing the ``argument_default=`` keyword argument to ArgumentParser. For -example, to globally suppress attribute creation on :meth:`parse_args` calls, -we supply ``argument_default=SUPPRESS``:: - - >>> parser = argparse.ArgumentParser(argument_default=argparse.SUPPRESS) - >>> parser.add_argument('--foo') - >>> parser.add_argument('bar', nargs='?') - >>> parser.parse_args(['--foo', '1', 'BAR']) - Namespace(bar='BAR', foo='1') - >>> parser.parse_args([]) - Namespace() - - -parents -^^^^^^^ - -Sometimes, several parsers share a common set of arguments. Rather than -repeating the definitions of these arguments, you can define a single parser -with all the shared arguments and then use the ``parents=`` argument to -ArgumentParser to have these "inherited". The ``parents=`` argument takes a -list of ArgumentParser objects, collects all the positional and optional -actions from them, and adds these actions to the ArgumentParser object being -constructed:: - - >>> parent_parser = argparse.ArgumentParser(add_help=False) - >>> parent_parser.add_argument('--parent', type=int) - - >>> foo_parser = argparse.ArgumentParser(parents=[parent_parser]) - >>> foo_parser.add_argument('foo') - >>> foo_parser.parse_args(['--parent', '2', 'XXX']) - Namespace(foo='XXX', parent=2) - - >>> bar_parser = argparse.ArgumentParser(parents=[parent_parser]) - >>> bar_parser.add_argument('--bar') - >>> bar_parser.parse_args(['--bar', 'YYY']) - Namespace(bar='YYY', parent=None) - -Note that most parent parsers will specify ``add_help=False``. Otherwise, the -ArgumentParser will see two ``-h/--help`` options (one in the parent and one in -the child) and raise an error. - - -formatter_class -^^^^^^^^^^^^^^^ - -ArgumentParser objects allow the help formatting to be customized by specifying -an alternate formatting class. Currently, there are three such classes: -``argparse.RawDescriptionHelpFormatter``, ``argparse.RawTextHelpFormatter`` and -``argparse.ArgumentDefaultsHelpFormatter``. The first two allow more control -over how textual descriptions are displayed, while the last automatically adds -information about argument default values. - -By default, ArgumentParser objects line-wrap the description_ and epilog_ texts -in command-line help messages:: - - >>> parser = argparse.ArgumentParser( - ... prog='PROG', - ... description='''this description - ... was indented weird - ... but that is okay''', - ... epilog=''' - ... likewise for this epilog whose whitespace will - ... be cleaned up and whose words will be wrapped - ... across a couple lines''') - >>> parser.print_help() - usage: PROG [-h] - - this description was indented weird but that is okay - - optional arguments: - -h, --help show this help message and exit - - likewise for this epilog whose whitespace will be cleaned up and whose words - will be wrapped across a couple lines - -When you have description_ and epilog_ that is already correctly formatted and -should not be line-wrapped, you can indicate this by passing -``argparse.RawDescriptionHelpFormatter`` as the ``formatter_class=`` argument -to ArgumentParser:: - - >>> parser = argparse.ArgumentParser( - ... prog='PROG', - ... formatter_class=argparse.RawDescriptionHelpFormatter, - ... description=textwrap.dedent('''\ - ... Please do not mess up this text! - ... -------------------------------- - ... I have indented it - ... exactly the way - ... I want it - ... ''')) - >>> parser.print_help() - usage: PROG [-h] - - Please do not mess up this text! - -------------------------------- - I have indented it - exactly the way - I want it - - optional arguments: - -h, --help show this help message and exit - -If you want to maintain whitespace for all sorts of help text (including -argument descriptions), you can use ``argparse.RawTextHelpFormatter``. - -The other formatter class available, -``argparse.ArgumentDefaultsHelpFormatter``, will add information about the -default value of each of the arguments:: - - >>> parser = argparse.ArgumentParser( - ... prog='PROG', - ... formatter_class=argparse.ArgumentDefaultsHelpFormatter) - >>> parser.add_argument('--foo', type=int, default=42, help='FOO!') - >>> parser.add_argument('bar', nargs='*', default=[1, 2, 3], help='BAR!') - >>> parser.print_help() - usage: PROG [-h] [--foo FOO] [bar [bar ...]] - - positional arguments: - bar BAR! (default: [1, 2, 3]) - - optional arguments: - -h, --help show this help message and exit - --foo FOO FOO! (default: 42) - - -conflict_handler -^^^^^^^^^^^^^^^^ - -ArgumentParser objects do not allow two actions with the same option string. -By default, ArgumentParser objects will raise an exception if you try to create -an argument with an option string that is already in use:: - - >>> parser = argparse.ArgumentParser(prog='PROG') - >>> parser.add_argument('-f', '--foo', help='old foo help') - >>> parser.add_argument('--foo', help='new foo help') - Traceback (most recent call last): - .. - ArgumentError: argument --foo: conflicting option string(s): --foo - -Sometimes (e.g. when using parents_) it may be useful to simply override any -older arguments with the same option string. To get this behavior, the value -``'resolve'`` can be supplied to the ``conflict_handler=`` argument of -ArgumentParser:: - - >>> parser = argparse.ArgumentParser(prog='PROG', conflict_handler='resolve') - >>> parser.add_argument('-f', '--foo', help='old foo help') - >>> parser.add_argument('--foo', help='new foo help') - >>> parser.print_help() - usage: PROG [-h] [-f FOO] [--foo FOO] - - optional arguments: - -h, --help show this help message and exit - -f FOO old foo help - --foo FOO new foo help - -Note that ArgumentParser objects only remove an action if all of its option -strings are overridden. So, in the example above, the old ``-f/--foo`` action -is retained as the ``-f`` action, because only the ``--foo`` option string was -overridden. - - -prog -^^^^ - -By default, ArgumentParser objects use ``sys.argv[0]`` to determine how to -display the name of the program in help messages. This default is almost always -what you want because it will make the help messages match what your users have -typed at the command line. For example, consider a file named ``myprogram.py`` -with the following code:: - - import argparse - parser = argparse.ArgumentParser() - parser.add_argument('--foo', help='foo help') - args = parser.parse_args() - -The help for this program will display ``myprogram.py`` as the program name -(regardless of where the program was invoked from):: - - $ python myprogram.py --help - usage: myprogram.py [-h] [--foo FOO] - - optional arguments: - -h, --help show this help message and exit - --foo FOO foo help - $ cd .. - $ python subdir\myprogram.py --help - usage: myprogram.py [-h] [--foo FOO] - - optional arguments: - -h, --help show this help message and exit - --foo FOO foo help - -To change this default behavior, another value can be supplied using the -``prog=`` argument to ArgumentParser:: - - >>> parser = argparse.ArgumentParser(prog='myprogram') - >>> parser.print_help() - usage: myprogram [-h] - - optional arguments: - -h, --help show this help message and exit - -Note that the program name, whether determined from ``sys.argv[0]`` or from the -``prog=`` argument, is available to help messages using the ``%(prog)s`` format -specifier. - -:: - - >>> parser = argparse.ArgumentParser(prog='myprogram') - >>> parser.add_argument('--foo', help='foo of the %(prog)s program') - >>> parser.print_help() - usage: myprogram [-h] [--foo FOO] - - optional arguments: - -h, --help show this help message and exit - --foo FOO foo of the myprogram program - - -usage -^^^^^ - -By default, ArgumentParser objects calculate the usage message from the -arguments it contains:: - - >>> parser = argparse.ArgumentParser(prog='PROG') - >>> parser.add_argument('--foo', nargs='?', help='foo help') - >>> parser.add_argument('bar', nargs='+', help='bar help') - >>> parser.print_help() - usage: PROG [-h] [--foo [FOO]] bar [bar ...] - - positional arguments: - bar bar help - - optional arguments: - -h, --help show this help message and exit - --foo [FOO] foo help - -If the default usage message is not appropriate for your application, you can -supply your own usage message using the ``usage=`` keyword argument to -ArgumentParser:: - - >>> parser = argparse.ArgumentParser(prog='PROG', usage='%(prog)s [options]') - >>> parser.add_argument('--foo', nargs='?', help='foo help') - >>> parser.add_argument('bar', nargs='+', help='bar help') - >>> parser.print_help() - usage: PROG [options] - - positional arguments: - bar bar help - - optional arguments: - -h, --help show this help message and exit - --foo [FOO] foo help - -Note you can use the ``%(prog)s`` format specifier to fill in the program name -in your usage messages. - - -The add_argument() method -------------------------- - -.. method:: add_argument(name or flags..., [action], [nargs], [const], [default], [type], [choices], [required], [help], [metavar], [dest]) - - Define how a single command line argument should be parsed. Each parameter - has its own more detailed description below, but in short they are: - - * `name or flags`_ - Either a name or a list of option strings, e.g. ``foo`` - or ``-f, --foo`` - - * action_ - The basic type of action to be taken when this argument is - encountered at the command-line. - - * nargs_ - The number of command-line arguments that should be consumed. - - * const_ - A constant value required by some action_ and nargs_ selections. - - * default_ - The value produced if the argument is absent from the - command-line. - - * type_ - The type to which the command-line arg should be converted. - - * choices_ - A container of the allowable values for the argument. - - * required_ - Whether or not the command-line option may be omitted - (optionals only). - - * help_ - A brief description of what the argument does. - - * metavar_ - A name for the argument in usage messages. - - * dest_ - The name of the attribute to be added to the object returned by - :meth:`parse_args`. - - The following sections describe how each of these are used. - -name or flags -^^^^^^^^^^^^^ - -The :meth:`add_argument` method needs to know whether you're expecting an -optional argument, e.g. ``-f`` or ``--foo``, or a positional argument, e.g. a -list of filenames. The first arguments passed to :meth:`add_argument` must -therefore be either a series of flags, or a simple argument name. For example, -an optional argument could be created like:: - - >>> parser.add_argument('-f', '--foo') - -while a positional argument could be created like:: - - >>> parser.add_argument('bar') - -When :meth:`parse_args` is called, optional arguments will be identified by the -``-`` prefix, and the remaining arguments will be assumed to be positional:: - - >>> parser = argparse.ArgumentParser(prog='PROG') - >>> parser.add_argument('-f', '--foo') - >>> parser.add_argument('bar') - >>> parser.parse_args(['BAR']) - Namespace(bar='BAR', foo=None) - >>> parser.parse_args(['BAR', '--foo', 'FOO']) - Namespace(bar='BAR', foo='FOO') - >>> parser.parse_args(['--foo', 'FOO']) - usage: PROG [-h] [-f FOO] bar - PROG: error: too few arguments - -action -^^^^^^ - -:class:`ArgumentParser` objects associate command-line args with actions. These -actions can do just about anything with the command-line args associated with -them, though most actions simply add an attribute to the object returned by -:meth:`parse_args`. When you specify a new argument using the -:meth:`add_argument` method, you can indicate how the command-line args should -be handled by specifying the ``action`` keyword argument. The supported actions -are: - -* ``'store'`` - This just stores the argument's value. This is the default - action. For example:: - - >>> parser = argparse.ArgumentParser() - >>> parser.add_argument('--foo') - >>> parser.parse_args('--foo 1'.split()) - Namespace(foo='1') - -* ``'store_const'`` - This stores the value specified by the const_ keyword - argument. Note that the const_ keyword argument defaults to ``None``, so - you'll almost always need to provide a value for it. The ``'store_const'`` - action is most commonly used with optional arguments that specify some sort - of flag. For example:: - - >>> parser = argparse.ArgumentParser() - >>> parser.add_argument('--foo', action='store_const', const=42) - >>> parser.parse_args('--foo'.split()) - Namespace(foo=42) - -* ``'store_true'`` and ``'store_false'`` - These store the values ``True`` and - ``False`` respectively. These are basically special cases of - ``'store_const'``. For example:: - - >>> parser = argparse.ArgumentParser() - >>> parser.add_argument('--foo', action='store_true') - >>> parser.add_argument('--bar', action='store_false') - >>> parser.parse_args('--foo --bar'.split()) - Namespace(bar=False, foo=True) - -* ``'append'`` - This stores a list, and appends each argument value to the - list. This is useful when you want to allow an option to be specified - multiple times. Example usage:: - - >>> parser = argparse.ArgumentParser() - >>> parser.add_argument('--foo', action='append') - >>> parser.parse_args('--foo 1 --foo 2'.split()) - Namespace(foo=['1', '2']) - -* ``'append_const'`` - This stores a list, and appends the value specified by - the const_ keyword argument to the list. Note that the const_ keyword - argument defaults to ``None``, so you'll almost always need to provide a - value for it. The ``'append_const'`` action is typically useful when you - want multiple arguments to store constants to the same list, for example:: - - >>> parser = argparse.ArgumentParser() - >>> parser.add_argument('--str', dest='types', action='append_const', const=str) - >>> parser.add_argument('--int', dest='types', action='append_const', const=int) - >>> parser.parse_args('--str --int'.split()) - Namespace(types=[, ]) - -* ``'version'`` - This expects a ``version=`` keyword argument in the - :meth:`add_argument` call, and prints version information and exits when - invoked. - - >>> import argparse - >>> parser = argparse.ArgumentParser(prog='PROG') - >>> parser.add_argument('-v', '--version', action='version', version='%(prog)s 2.0') - >>> parser.parse_args(['-v']) - PROG 2.0 - -You can also specify an arbitrary action by passing an object that implements -the Action API. The easiest way to do this is to extend ``argparse.Action``, -supplying an appropriate ``__call__`` method. The ``__call__`` method accepts -four parameters: - -* ``parser`` - The ArgumentParser object which contains this action. - -* ``namespace`` - The namespace object that will be returned by - :meth:`parse_args`. Most actions add an attribute to this object. - -* ``values`` - The associated command-line args, with any type-conversions - applied. (Type-conversions are specified with the type_ keyword argument to - :meth:`add_argument`. - -* ``option_string`` - The option string that was used to invoke this action. - The ``option_string`` argument is optional, and will be absent if the action - is associated with a positional argument. - -So for example:: - - >>> class FooAction(argparse.Action): - ... def __call__(self, parser, namespace, values, option_string=None): - ... print '%r %r %r' % (namespace, values, option_string) - ... setattr(namespace, self.dest, values) - ... - >>> parser = argparse.ArgumentParser() - >>> parser.add_argument('--foo', action=FooAction) - >>> parser.add_argument('bar', action=FooAction) - >>> args = parser.parse_args('1 --foo 2'.split()) - Namespace(bar=None, foo=None) '1' None - Namespace(bar='1', foo=None) '2' '--foo' - >>> args - Namespace(bar='1', foo='2') - - -nargs -^^^^^ - -ArgumentParser objects usually associate a single command-line argument with a -single action to be taken. In the situations where you'd like to associate a -different number of command-line arguments with a single action, you can use -the ``nargs`` keyword argument to :meth:`add_argument`. The supported values -are: - -* N (an integer). N args from the command-line will be gathered together into - a list. For example:: - - >>> parser = argparse.ArgumentParser() - >>> parser.add_argument('--foo', nargs=2) - >>> parser.add_argument('bar', nargs=1) - >>> parser.parse_args('c --foo a b'.split()) - Namespace(bar=['c'], foo=['a', 'b']) - - Note that ``nargs=1`` produces a list of one item. This is different from - the default, in which the item is produced by itself. - -* ``'?'``. One arg will be consumed from the command-line if possible, and - produced as a single item. If no command-line arg is present, the value from - default_ will be produced. Note that for optional arguments, there is an - additional case - the option string is present but not followed by a - command-line arg. In this case the value from const_ will be produced. Some - examples to illustrate this:: - - >>> parser = argparse.ArgumentParser() - >>> parser.add_argument('--foo', nargs='?', const='c', default='d') - >>> parser.add_argument('bar', nargs='?', default='d') - >>> parser.parse_args('XX --foo YY'.split()) - Namespace(bar='XX', foo='YY') - >>> parser.parse_args('XX --foo'.split()) - Namespace(bar='XX', foo='c') - >>> parser.parse_args(''.split()) - Namespace(bar='d', foo='d') - - One of the more common uses of ``nargs='?'`` is to allow optional input and - output files:: - - >>> parser = argparse.ArgumentParser() - >>> parser.add_argument('infile', nargs='?', type=argparse.FileType('r'), default=sys.stdin) - >>> parser.add_argument('outfile', nargs='?', type=argparse.FileType('w'), default=sys.stdout) - >>> parser.parse_args(['input.txt', 'output.txt']) - Namespace(infile=, outfile=) - >>> parser.parse_args([]) - Namespace(infile=', mode 'r' at 0x...>, outfile=', mode 'w' at 0x...>) - -* ``'*'``. All command-line args present are gathered into a list. Note that - it generally doesn't make much sense to have more than one positional - argument with ``nargs='*'``, but multiple optional arguments with - ``nargs='*'`` is possible. For example:: - - >>> parser = argparse.ArgumentParser() - >>> parser.add_argument('--foo', nargs='*') - >>> parser.add_argument('--bar', nargs='*') - >>> parser.add_argument('baz', nargs='*') - >>> parser.parse_args('a b --foo x y --bar 1 2'.split()) - Namespace(bar=['1', '2'], baz=['a', 'b'], foo=['x', 'y']) - -* ``'+'``. Just like ``'*'``, all command-line args present are gathered into a - list. Additionally, an error message will be generated if there wasn't at - least one command-line arg present. For example:: - - >>> parser = argparse.ArgumentParser(prog='PROG') - >>> parser.add_argument('foo', nargs='+') - >>> parser.parse_args('a b'.split()) - Namespace(foo=['a', 'b']) - >>> parser.parse_args(''.split()) - usage: PROG [-h] foo [foo ...] - PROG: error: too few arguments - -If the ``nargs`` keyword argument is not provided, the number of args consumed -is determined by the action_. Generally this means a single command-line arg -will be consumed and a single item (not a list) will be produced. - - -const -^^^^^ - -The ``const`` argument of :meth:`add_argument` is used to hold constant values -that are not read from the command line but are required for the various -ArgumentParser actions. The two most common uses of it are: - -* When :meth:`add_argument` is called with ``action='store_const'`` or - ``action='append_const'``. These actions add the ``const`` value to one of - the attributes of the object returned by :meth:`parse_args`. See the action_ - description for examples. - -* When :meth:`add_argument` is called with option strings (like ``-f`` or - ``--foo``) and ``nargs='?'``. This creates an optional argument that can be - followed by zero or one command-line args. When parsing the command-line, if - the option string is encountered with no command-line arg following it, the - value of ``const`` will be assumed instead. See the nargs_ description for - examples. - -The ``const`` keyword argument defaults to ``None``. - - -default -^^^^^^^ - -All optional arguments and some positional arguments may be omitted at the -command-line. The ``default`` keyword argument of :meth:`add_argument`, whose -value defaults to ``None``, specifies what value should be used if the -command-line arg is not present. For optional arguments, the ``default`` value -is used when the option string was not present at the command line:: - - >>> parser = argparse.ArgumentParser() - >>> parser.add_argument('--foo', default=42) - >>> parser.parse_args('--foo 2'.split()) - Namespace(foo='2') - >>> parser.parse_args(''.split()) - Namespace(foo=42) - -For positional arguments with nargs_ ``='?'`` or ``'*'``, the ``default`` value -is used when no command-line arg was present:: - - >>> parser = argparse.ArgumentParser() - >>> parser.add_argument('foo', nargs='?', default=42) - >>> parser.parse_args('a'.split()) - Namespace(foo='a') - >>> parser.parse_args(''.split()) - Namespace(foo=42) - - -If you don't want to see an attribute when an option was not present at the -command line, you can supply ``default=argparse.SUPPRESS``:: - - >>> parser = argparse.ArgumentParser() - >>> parser.add_argument('--foo', default=argparse.SUPPRESS) - >>> parser.parse_args([]) - Namespace() - >>> parser.parse_args(['--foo', '1']) - Namespace(foo='1') - - -type -^^^^ - -By default, ArgumentParser objects read command-line args in as simple strings. -However, quite often the command-line string should instead be interpreted as -another type, e.g. ``float``, ``int`` or ``file``. The ``type`` keyword -argument of :meth:`add_argument` allows any necessary type-checking and -type-conversions to be performed. Many common builtin types can be used -directly as the value of the ``type`` argument:: - - >>> parser = argparse.ArgumentParser() - >>> parser.add_argument('foo', type=int) - >>> parser.add_argument('bar', type=file) - >>> parser.parse_args('2 temp.txt'.split()) - Namespace(bar=, foo=2) - -To ease the use of various types of files, the argparse module provides the -factory FileType which takes the ``mode=`` and ``bufsize=`` arguments of the -``file`` object. For example, ``FileType('w')`` can be used to create a -writable file:: - - >>> parser = argparse.ArgumentParser() - >>> parser.add_argument('bar', type=argparse.FileType('w')) - >>> parser.parse_args(['out.txt']) - Namespace(bar=) - -If you need to do some special type-checking or type-conversions, you can -provide your own types by passing to ``type=`` a callable that takes a single -string argument and returns the type-converted value:: - - >>> def perfect_square(string): - ... value = int(string) - ... sqrt = math.sqrt(value) - ... if sqrt != int(sqrt): - ... msg = "%r is not a perfect square" % string - ... raise argparse.ArgumentTypeError(msg) - ... return value - ... - >>> parser = argparse.ArgumentParser(prog='PROG') - >>> parser.add_argument('foo', type=perfect_square) - >>> parser.parse_args('9'.split()) - Namespace(foo=9) - >>> parser.parse_args('7'.split()) - usage: PROG [-h] foo - PROG: error: argument foo: '7' is not a perfect square - -Note that if your type-checking function is just checking for a particular set -of values, it may be more convenient to use the choices_ keyword argument:: - - >>> parser = argparse.ArgumentParser(prog='PROG') - >>> parser.add_argument('foo', type=int, choices=xrange(5, 10)) - >>> parser.parse_args('7'.split()) - Namespace(foo=7) - >>> parser.parse_args('11'.split()) - usage: PROG [-h] {5,6,7,8,9} - PROG: error: argument foo: invalid choice: 11 (choose from 5, 6, 7, 8, 9) - -See the choices_ section for more details. - - -choices -^^^^^^^ - -Some command-line args should be selected from a restricted set of values. -ArgumentParser objects can be told about such sets of values by passing a -container object as the ``choices`` keyword argument to :meth:`add_argument`. -When the command-line is parsed with :meth:`parse_args`, arg values will be -checked, and an error message will be displayed if the arg was not one of the -acceptable values:: - - >>> parser = argparse.ArgumentParser(prog='PROG') - >>> parser.add_argument('foo', choices='abc') - >>> parser.parse_args('c'.split()) - Namespace(foo='c') - >>> parser.parse_args('X'.split()) - usage: PROG [-h] {a,b,c} - PROG: error: argument foo: invalid choice: 'X' (choose from 'a', 'b', 'c') - -Note that inclusion in the ``choices`` container is checked after any type_ -conversions have been performed, so the type of the objects in the ``choices`` -container should match the type_ specified:: - - >>> parser = argparse.ArgumentParser(prog='PROG') - >>> parser.add_argument('foo', type=complex, choices=[1, 1j]) - >>> parser.parse_args('1j'.split()) - Namespace(foo=1j) - >>> parser.parse_args('-- -4'.split()) - usage: PROG [-h] {1,1j} - PROG: error: argument foo: invalid choice: (-4+0j) (choose from 1, 1j) - -Any object that supports the ``in`` operator can be passed as the ``choices`` -value, so ``dict`` objects, ``set`` objects, custom containers, etc. are all -supported. - - -required -^^^^^^^^ - -In general, the argparse module assumes that flags like ``-f`` and ``--bar`` -indicate *optional* arguments, which can always be omitted at the command-line. -To change this behavior, i.e. to make an option *required*, the value ``True`` -should be specified for the ``required=`` keyword argument to -:meth:`add_argument`:: - - >>> parser = argparse.ArgumentParser() - >>> parser.add_argument('--foo', required=True) - >>> parser.parse_args(['--foo', 'BAR']) - Namespace(foo='BAR') - >>> parser.parse_args([]) - usage: argparse.py [-h] [--foo FOO] - argparse.py: error: option --foo is required - -As the example shows, if an option is marked as ``required``, :meth:`parse_args` -will report an error if that option is not present at the command line. - -**Warning:** Required options are generally considered bad form - normal users -expect *options* to be *optional*. You should avoid the use of required options -whenever possible. - - -help -^^^^ - -A great command-line interface isn't worth anything if your users can't figure -out which option does what. So for the end-users, ``help`` is probably the -most important argument to include in your :meth:`add_argument` calls. The -``help`` value should be a string containing a brief description of what the -argument specifies. When a user requests help (usually by using ``-h`` or -``--help`` at the command-line), these ``help`` descriptions will be displayed -with each argument:: - - >>> parser = argparse.ArgumentParser(prog='frobble') - >>> parser.add_argument('--foo', action='store_true', - ... help='foo the bars before frobbling') - >>> parser.add_argument('bar', nargs='+', - ... help='one of the bars to be frobbled') - >>> parser.parse_args('-h'.split()) - usage: frobble [-h] [--foo] bar [bar ...] - - positional arguments: - bar one of the bars to be frobbled - - optional arguments: - -h, --help show this help message and exit - --foo foo the bars before frobbling - -The ``help`` strings can include various format specifiers to avoid repetition -of things like the program name or the argument default_. The available -specifiers include the program name, ``%(prog)s`` and most keyword arguments to -:meth:`add_argument`, e.g. ``%(default)s``, ``%(type)s``, etc.:: - - >>> parser = argparse.ArgumentParser(prog='frobble') - >>> parser.add_argument('bar', nargs='?', type=int, default=42, - ... help='the bar to %(prog)s (default: %(default)s)') - >>> parser.print_help() - usage: frobble [-h] [bar] - - positional arguments: - bar the bar to frobble (default: 42) - - optional arguments: - -h, --help show this help message and exit - - -metavar -^^^^^^^ - -When ArgumentParser objects generate help messages, they need some way to refer -to each expected argument. By default, ArgumentParser objects use the dest_ -value as the "name" of each object. By default, for positional argument -actions, the dest_ value is used directly, and for optional argument actions, -the dest_ value is uppercased. So if we have a single positional argument with -``dest='bar'``, that argument will be referred to as ``bar``. And if we have a -single optional argument ``--foo`` that should be followed by a single -command-line arg, that arg will be referred to as ``FOO``. You can see this -behavior in the example below:: - - >>> parser = argparse.ArgumentParser() - >>> parser.add_argument('--foo') - >>> parser.add_argument('bar') - >>> parser.parse_args('X --foo Y'.split()) - Namespace(bar='X', foo='Y') - >>> parser.print_help() - usage: [-h] [--foo FOO] bar - - positional arguments: - bar - - optional arguments: - -h, --help show this help message and exit - --foo FOO - -If you would like to provide a different name for your argument in help -messages, you can supply a value for the ``metavar`` keyword argument to -:meth:`add_argument`:: - - >>> parser = argparse.ArgumentParser() - >>> parser.add_argument('--foo', metavar='YYY') - >>> parser.add_argument('bar', metavar='XXX') - >>> parser.parse_args('X --foo Y'.split()) - Namespace(bar='X', foo='Y') - >>> parser.print_help() - usage: [-h] [--foo YYY] XXX - - positional arguments: - XXX - - optional arguments: - -h, --help show this help message and exit - --foo YYY - -Note that ``metavar`` only changes the *displayed* name - the name of the -attribute on the :meth:`parse_args` object is still determined by the dest_ -value. - -Different values of ``nargs`` may cause the metavar to be used multiple times. -If you'd like to specify a different display name for each of the arguments, -you can provide a tuple to ``metavar``:: - - >>> parser = argparse.ArgumentParser(prog='PROG') - >>> parser.add_argument('-x', nargs=2) - >>> parser.add_argument('--foo', nargs=2, metavar=('bar', 'baz')) - >>> parser.print_help() - usage: PROG [-h] [-x X X] [--foo bar baz] - - optional arguments: - -h, --help show this help message and exit - -x X X - --foo bar baz - - -dest -^^^^ - -Most ArgumentParser actions add some value as an attribute of the object -returned by :meth:`parse_args`. The name of this attribute is determined by the -``dest`` keyword argument of :meth:`add_argument`. For positional argument -actions, ``dest`` is normally supplied as the first argument to -:meth:`add_argument`:: - - >>> parser = argparse.ArgumentParser() - >>> parser.add_argument('bar') - >>> parser.parse_args('XXX'.split()) - Namespace(bar='XXX') - -For optional argument actions, the value of ``dest`` is normally inferred from -the option strings. ArgumentParser objects generate the value of ``dest`` by -taking the first long option string and stripping away the initial ``'--'`` -string. If no long option strings were supplied, ``dest`` will be derived from -the first short option string by stripping the initial ``'-'`` character. Any -internal ``'-'`` characters will be converted to ``'_'`` characters to make -sure the string is a valid attribute name. The examples below illustrate this -behavior:: - - >>> parser = argparse.ArgumentParser() - >>> parser.add_argument('-f', '--foo-bar', '--foo') - >>> parser.add_argument('-x', '-y') - >>> parser.parse_args('-f 1 -x 2'.split()) - Namespace(foo_bar='1', x='2') - >>> parser.parse_args('--foo 1 -y 2'.split()) - Namespace(foo_bar='1', x='2') - -If you would like to use a different attribute name from the one automatically -inferred by the ArgumentParser, you can supply it with an explicit ``dest`` -parameter:: - - >>> parser = argparse.ArgumentParser() - >>> parser.add_argument('--foo', dest='bar') - >>> parser.parse_args('--foo XXX'.split()) - Namespace(bar='XXX') - - -The parse_args() method ------------------------ - -.. method:: parse_args([args], [namespace]) - - Convert the strings to objects and assign them as attributes of the - namespace. Return the populated namespace. - - Previous calls to :meth:`add_argument` determine exactly what objects are - created and how they are assigned. See the documentation for - :meth:`add_argument` for details. - - By default, the arg strings are taken from ``sys.argv``, and a new empty - ``Namespace`` object is created for the attributes. - -Option value syntax -^^^^^^^^^^^^^^^^^^^ - -The :meth:`parse_args` method supports several ways of specifying the value of -an option (if it takes one). In the simplest case, the option and its value are -passed as two separate arguments:: - - >>> parser = argparse.ArgumentParser(prog='PROG') - >>> parser.add_argument('-x') - >>> parser.add_argument('--foo') - >>> parser.parse_args('-x X'.split()) - Namespace(foo=None, x='X') - >>> parser.parse_args('--foo FOO'.split()) - Namespace(foo='FOO', x=None) - -For long options (options with names longer than a single character), you may -also pass the option and value as a single command line argument, using ``=`` -to separate them:: - - >>> parser.parse_args('--foo=FOO'.split()) - Namespace(foo='FOO', x=None) - -For short options (options only one character long), you may simply concatenate -the option and its value:: - - >>> parser.parse_args('-xX'.split()) - Namespace(foo=None, x='X') - -You can also combine several short options together, using only a single ``-`` -prefix, as long as only the last option (or none of them) requires a value:: - - >>> parser = argparse.ArgumentParser(prog='PROG') - >>> parser.add_argument('-x', action='store_true') - >>> parser.add_argument('-y', action='store_true') - >>> parser.add_argument('-z') - >>> parser.parse_args('-xyzZ'.split()) - Namespace(x=True, y=True, z='Z') - - -Invalid arguments -^^^^^^^^^^^^^^^^^ - -While parsing the command-line, ``parse_args`` checks for a variety of errors, -including ambiguous options, invalid types, invalid options, wrong number of -positional arguments, etc. When it encounters such an error, it exits and -prints the error along with a usage message:: - - >>> parser = argparse.ArgumentParser(prog='PROG') - >>> parser.add_argument('--foo', type=int) - >>> parser.add_argument('bar', nargs='?') - - >>> # invalid type - >>> parser.parse_args(['--foo', 'spam']) - usage: PROG [-h] [--foo FOO] [bar] - PROG: error: argument --foo: invalid int value: 'spam' - - >>> # invalid option - >>> parser.parse_args(['--bar']) - usage: PROG [-h] [--foo FOO] [bar] - PROG: error: no such option: --bar - - >>> # wrong number of arguments - >>> parser.parse_args(['spam', 'badger']) - usage: PROG [-h] [--foo FOO] [bar] - PROG: error: extra arguments found: badger - - -Arguments containing ``"-"`` -^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -The ``parse_args`` method attempts to give errors whenever the user has clearly -made a mistake, but some situations are inherently ambiguous. For example, the -command-line arg ``'-1'`` could either be an attempt to specify an option or an -attempt to provide a positional argument. The ``parse_args`` method is cautious -here: positional arguments may only begin with ``'-'`` if they look like -negative numbers and there are no options in the parser that look like negative -numbers:: - - >>> parser = argparse.ArgumentParser(prog='PROG') - >>> parser.add_argument('-x') - >>> parser.add_argument('foo', nargs='?') - - >>> # no negative number options, so -1 is a positional argument - >>> parser.parse_args(['-x', '-1']) - Namespace(foo=None, x='-1') - - >>> # no negative number options, so -1 and -5 are positional arguments - >>> parser.parse_args(['-x', '-1', '-5']) - Namespace(foo='-5', x='-1') - - >>> parser = argparse.ArgumentParser(prog='PROG') - >>> parser.add_argument('-1', dest='one') - >>> parser.add_argument('foo', nargs='?') - - >>> # negative number options present, so -1 is an option - >>> parser.parse_args(['-1', 'X']) - Namespace(foo=None, one='X') - - >>> # negative number options present, so -2 is an option - >>> parser.parse_args(['-2']) - usage: PROG [-h] [-1 ONE] [foo] - PROG: error: no such option: -2 - - >>> # negative number options present, so both -1s are options - >>> parser.parse_args(['-1', '-1']) - usage: PROG [-h] [-1 ONE] [foo] - PROG: error: argument -1: expected one argument - -If you have positional arguments that must begin with ``'-'`` and don't look -like negative numbers, you can insert the pseudo-argument ``'--'`` which tells -``parse_args`` that everything after that is a positional argument:: - - >>> parser.parse_args(['--', '-f']) - Namespace(foo='-f', one=None) - - -Argument abbreviations -^^^^^^^^^^^^^^^^^^^^^^ - -The :meth:`parse_args` method allows you to abbreviate long options if the -abbreviation is unambiguous:: - - >>> parser = argparse.ArgumentParser(prog='PROG') - >>> parser.add_argument('-bacon') - >>> parser.add_argument('-badger') - >>> parser.parse_args('-bac MMM'.split()) - Namespace(bacon='MMM', badger=None) - >>> parser.parse_args('-bad WOOD'.split()) - Namespace(bacon=None, badger='WOOD') - >>> parser.parse_args('-ba BA'.split()) - usage: PROG [-h] [-bacon BACON] [-badger BADGER] - PROG: error: ambiguous option: -ba could match -badger, -bacon - -As you can see above, you will get an error if you pick a prefix that could -refer to more than one option. - - -Beyond ``sys.argv`` -^^^^^^^^^^^^^^^^^^^ - -Sometimes it may be useful to have an ArgumentParser parse args other than -those of ``sys.argv``. This can be accomplished by passing a list of strings -to ``parse_args``. You may have noticed that the examples in the argparse -documentation have made heavy use of this calling style - it is much easier -to use at the interactive prompt:: - - >>> parser = argparse.ArgumentParser() - >>> parser.add_argument( - ... 'integers', metavar='int', type=int, choices=xrange(10), - ... nargs='+', help='an integer in the range 0..9') - >>> parser.add_argument( - ... '--sum', dest='accumulate', action='store_const', const=sum, - ... default=max, help='sum the integers (default: find the max)') - >>> parser.parse_args(['1', '2', '3', '4']) - Namespace(accumulate=, integers=[1, 2, 3, 4]) - >>> parser.parse_args('1 2 3 4 --sum'.split()) - Namespace(accumulate=, integers=[1, 2, 3, 4]) - - -Custom namespaces -^^^^^^^^^^^^^^^^^ - -It may also be useful to have an ArgumentParser assign attributes to an already -existing object, rather than the newly-created Namespace object that is -normally used. This can be achieved by specifying the ``namespace=`` keyword -argument:: - - >>> class C(object): - ... pass - ... - >>> c = C() - >>> parser = argparse.ArgumentParser() - >>> parser.add_argument('--foo') - >>> parser.parse_args(args=['--foo', 'BAR'], namespace=c) - >>> c.foo - 'BAR' - - -Other utilities ---------------- - -Sub-commands -^^^^^^^^^^^^ - -.. method:: add_subparsers() - - A lot of programs split up their functionality into a number of - sub-commands, for example, the ``svn`` program can invoke sub-commands like - ``svn checkout``, ``svn update``, ``svn commit``, etc. Splitting up - functionality this way can be a particularly good idea when a program - performs several different functions which require different kinds of - command-line arguments. ArgumentParser objects support the creation of such - sub-commands with the :meth:`add_subparsers` method. The - :meth:`add_subparsers` method is normally called with no arguments and - returns an special action object. This object has a single method, - ``add_parser``, which takes a command name and any ArgumentParser - constructor arguments, and returns an ArgumentParser object that can be - modified as usual. - - Some example usage:: - - >>> # create the top-level parser - >>> parser = argparse.ArgumentParser(prog='PROG') - >>> parser.add_argument('--foo', action='store_true', help='foo help') - >>> subparsers = parser.add_subparsers(help='sub-command help') - >>> - >>> # create the parser for the "a" command - >>> parser_a = subparsers.add_parser('a', help='a help') - >>> parser_a.add_argument('bar', type=int, help='bar help') - >>> - >>> # create the parser for the "b" command - >>> parser_b = subparsers.add_parser('b', help='b help') - >>> parser_b.add_argument('--baz', choices='XYZ', help='baz help') - >>> - >>> # parse some arg lists - >>> parser.parse_args(['a', '12']) - Namespace(bar=12, foo=False) - >>> parser.parse_args(['--foo', 'b', '--baz', 'Z']) - Namespace(baz='Z', foo=True) - - Note that the object returned by :meth:`parse_args` will only contain - attributes for the main parser and the subparser that was selected by the - command line (and not any other subparsers). So in the example above, when - the ``"a"`` command is specified, only the ``foo`` and ``bar`` attributes - are present, and when the ``"b"`` command is specified, only the ``foo`` and - ``baz`` attributes are present. - - Similarly, when a help message is requested from a subparser, only the help - for that particular parser will be printed. The help message will not - include parent parser or sibling parser messages. (You can however supply a - help message for each subparser command by suppling the ``help=`` argument - to ``add_parser`` as above.) - - :: - - >>> parser.parse_args(['--help']) - usage: PROG [-h] [--foo] {a,b} ... - - positional arguments: - {a,b} sub-command help - a a help - b b help - - optional arguments: - -h, --help show this help message and exit - --foo foo help - - >>> parser.parse_args(['a', '--help']) - usage: PROG a [-h] bar - - positional arguments: - bar bar help - - optional arguments: - -h, --help show this help message and exit - - >>> parser.parse_args(['b', '--help']) - usage: PROG b [-h] [--baz {X,Y,Z}] - - optional arguments: - -h, --help show this help message and exit - --baz {X,Y,Z} baz help - - The :meth:`add_subparsers` method also supports ``title`` and - ``description`` keyword arguments. When either is present, the subparser's - commands will appear in their own group in the help output. For example:: - - >>> parser = argparse.ArgumentParser() - >>> subparsers = parser.add_subparsers(title='subcommands', - ... description='valid subcommands', - ... help='additional help') - >>> subparsers.add_parser('foo') - >>> subparsers.add_parser('bar') - >>> parser.parse_args(['-h']) - usage: [-h] {foo,bar} ... - - optional arguments: - -h, --help show this help message and exit - - subcommands: - valid subcommands - - {foo,bar} additional help - - - One particularly effective way of handling sub-commands is to combine the - use of the :meth:`add_subparsers` method with calls to :meth:`set_defaults` - so that each subparser knows which Python function it should execute. For - example:: - - >>> # sub-command functions - >>> def foo(args): - ... print args.x * args.y - ... - >>> def bar(args): - ... print '((%s))' % args.z - ... - >>> # create the top-level parser - >>> parser = argparse.ArgumentParser() - >>> subparsers = parser.add_subparsers() - >>> - >>> # create the parser for the "foo" command - >>> parser_foo = subparsers.add_parser('foo') - >>> parser_foo.add_argument('-x', type=int, default=1) - >>> parser_foo.add_argument('y', type=float) - >>> parser_foo.set_defaults(func=foo) - >>> - >>> # create the parser for the "bar" command - >>> parser_bar = subparsers.add_parser('bar') - >>> parser_bar.add_argument('z') - >>> parser_bar.set_defaults(func=bar) - >>> - >>> # parse the args and call whatever function was selected - >>> args = parser.parse_args('foo 1 -x 2'.split()) - >>> args.func(args) - 2.0 - >>> - >>> # parse the args and call whatever function was selected - >>> args = parser.parse_args('bar XYZYX'.split()) - >>> args.func(args) - ((XYZYX)) - - This way, you can let :meth:`parse_args` do all the work for you, and then - just call the appropriate function after the argument parsing is complete. - Associating functions with actions like this is typically the easiest way - to handle the different actions for each of your subparsers. However, if you - find it necessary to check the name of the subparser that was invoked, you - can always provide a ``dest`` keyword argument to the :meth:`add_subparsers` - call:: - - >>> parser = argparse.ArgumentParser() - >>> subparsers = parser.add_subparsers(dest='subparser_name') - >>> subparser1 = subparsers.add_parser('1') - >>> subparser1.add_argument('-x') - >>> subparser2 = subparsers.add_parser('2') - >>> subparser2.add_argument('y') - >>> parser.parse_args(['2', 'frobble']) - Namespace(subparser_name='2', y='frobble') - - -FileType objects -^^^^^^^^^^^^^^^^ - -.. class:: FileType(mode='r', bufsize=None) - - The :class:`FileType` factory creates objects that can be passed to the type - argument of :meth:`add_argument`. Arguments that have :class:`FileType` - objects as their type will open command-line args as files with the - requested modes and buffer sizes: - - >>> parser = argparse.ArgumentParser() - >>> parser.add_argument('--output', type=argparse.FileType('wb', 0)) - >>> parser.parse_args(['--output', 'out']) - Namespace(output=) - - FileType objects understand the pseudo-argument ``'-'`` and automatically - convert this into ``sys.stdin`` for readable :class:`FileType` objects and - ``sys.stdout`` for writable :class:`FileType` objects: - - >>> parser = argparse.ArgumentParser() - >>> parser.add_argument('infile', type=argparse.FileType('r')) - >>> parser.parse_args(['-']) - Namespace(infile=', mode 'r' at 0x...>) - - -Argument groups -^^^^^^^^^^^^^^^ - -.. method:: add_argument_group([title], [description]) - - By default, ArgumentParser objects group command-line arguments into - "positional arguments" and "optional arguments" when displaying help - messages. When there is a better conceptual grouping of arguments than this - default one, appropriate groups can be created using the - :meth:`add_argument_group` method:: - - >>> parser = argparse.ArgumentParser(prog='PROG', add_help=False) - >>> group = parser.add_argument_group('group') - >>> group.add_argument('--foo', help='foo help') - >>> group.add_argument('bar', help='bar help') - >>> parser.print_help() - usage: PROG [--foo FOO] bar - - group: - bar bar help - --foo FOO foo help - - The :meth:`add_argument_group` method returns an argument group object which - has an :meth:`add_argument` method just like a regular ArgumentParser - objects. When an argument is added to the group, the parser treats it just - like a normal argument, but displays the argument in a separate group for - help messages. The :meth:`add_argument_group` method accepts ``title`` and - ``description`` arguments which can be used to customize this display:: - - >>> parser = argparse.ArgumentParser(prog='PROG', add_help=False) - >>> group1 = parser.add_argument_group('group1', 'group1 description') - >>> group1.add_argument('foo', help='foo help') - >>> group2 = parser.add_argument_group('group2', 'group2 description') - >>> group2.add_argument('--bar', help='bar help') - >>> parser.print_help() - usage: PROG [--bar BAR] foo - - group1: - group1 description - - foo foo help - - group2: - group2 description - - --bar BAR bar help - - Note that any arguments not in your user defined groups will end up back in - the usual "positional arguments" and "optional arguments" sections. - - -Mutual exclusion -^^^^^^^^^^^^^^^^ - -.. method:: add_mutually_exclusive_group([required=False]) - - Sometimes, you need to make sure that only one of a couple different options - is specified on the command line. You can create groups of such mutually - exclusive arguments using the :meth:`add_mutually_exclusive_group` method. - When :func:`parse_args` is called, argparse will make sure that only one of - the arguments in the mutually exclusive group was present on the command - line:: - - >>> parser = argparse.ArgumentParser(prog='PROG') - >>> group = parser.add_mutually_exclusive_group() - >>> group.add_argument('--foo', action='store_true') - >>> group.add_argument('--bar', action='store_false') - >>> parser.parse_args(['--foo']) - Namespace(bar=True, foo=True) - >>> parser.parse_args(['--bar']) - Namespace(bar=False, foo=False) - >>> parser.parse_args(['--foo', '--bar']) - usage: PROG [-h] [--foo | --bar] - PROG: error: argument --bar: not allowed with argument --foo - - The :meth:`add_mutually_exclusive_group` method also accepts a ``required`` - argument, to indicate that at least one of the mutually exclusive arguments - is required:: - - >>> parser = argparse.ArgumentParser(prog='PROG') - >>> group = parser.add_mutually_exclusive_group(required=True) - >>> group.add_argument('--foo', action='store_true') - >>> group.add_argument('--bar', action='store_false') - >>> parser.parse_args([]) - usage: PROG [-h] (--foo | --bar) - PROG: error: one of the arguments --foo --bar is required - - Note that currently mutually exclusive argument groups do not support the - ``title`` and ``description`` arguments of :meth:`add_argument_group`. This - may change in the future however, so you are *strongly* recommended to - specify ``required`` as a keyword argument if you use it. - - -Parser defaults -^^^^^^^^^^^^^^^ - -.. method:: set_defaults(**kwargs) - - Most of the time, the attributes of the object returned by - :meth:`parse_args` will be fully determined by inspecting the command-line - args and the argument actions described in your :meth:`add_argument` calls. - However, sometimes it may be useful to add some additional attributes that - are determined without any inspection of the command-line. The - :meth:`set_defaults` method allows you to do this:: - - >>> parser = argparse.ArgumentParser() - >>> parser.add_argument('foo', type=int) - >>> parser.set_defaults(bar=42, baz='badger') - >>> parser.parse_args(['736']) - Namespace(bar=42, baz='badger', foo=736) - - Note that parser-level defaults always override argument-level defaults. So - if you set a parser-level default for a name that matches an argument, the - old argument default will no longer be used:: - - >>> parser = argparse.ArgumentParser() - >>> parser.add_argument('--foo', default='bar') - >>> parser.set_defaults(foo='spam') - >>> parser.parse_args([]) - Namespace(foo='spam') - - Parser-level defaults can be particularly useful when you're working with - multiple parsers. See the :meth:`add_subparsers` method for an example of - this type. - -.. method:: get_default(dest) - - Get the default value for a namespace attribute, as set by either - :meth:`add_argument` or by :meth:`set_defaults`:: - - >>> parser = argparse.ArgumentParser() - >>> parser.add_argument('--foo', default='badger') - >>> parser.get_default('foo') - 'badger' - - -Printing help -^^^^^^^^^^^^^ - -In most typical applications, :meth:`parse_args` will take care of formatting -and printing any usage or error messages. However, should you want to format or -print these on your own, several methods are available: - -.. method:: print_usage([file]): - - Print a brief description of how the :class:`ArgumentParser` should be - invoked on the command line. If ``file`` is not present, ``sys.stderr`` is - assumed. - -.. method:: print_help([file]): - - Print a help message, including the program usage and information about the - arguments registered with the :class:`ArgumentParser`. If ``file`` is not - present, ``sys.stderr`` is assumed. - -There are also variants of these methods that simply return a string instead of -printing it: - -.. method:: format_usage(): - - Return a string containing a brief description of how the - :class:`ArgumentParser` should be invoked on the command line. - -.. method:: format_help(): - - Return a string containing a help message, including the program usage and - information about the arguments registered with the :class:`ArgumentParser`. - - - -Partial parsing -^^^^^^^^^^^^^^^ - -.. method:: parse_known_args([args], [namespace]) - -Sometimes a script may only parse a few of the command line arguments, passing -the remaining arguments on to another script or program. In these cases, the -:meth:`parse_known_args` method can be useful. It works much like -:meth:`parse_args` except that it does not produce an error when extra -arguments are present. Instead, it returns a two item tuple containing the -populated namespace and the list of remaining argument strings. - -:: - - >>> parser = argparse.ArgumentParser() - >>> parser.add_argument('--foo', action='store_true') - >>> parser.add_argument('bar') - >>> parser.parse_known_args(['--foo', '--badger', 'BAR', 'spam']) - (Namespace(bar='BAR', foo=True), ['--badger', 'spam']) - - -Customizing file parsing -^^^^^^^^^^^^^^^^^^^^^^^^ - -.. method:: convert_arg_line_to_args(arg_line) - - Arguments that are read from a file (see the ``fromfile_prefix_chars`` - keyword argument to the :class:`ArgumentParser` constructor) are read one - argument per line. If you need fancier parsing, then you can subclass the - :class:`ArgumentParser` and override the :meth:`convert_arg_line_to_args` - method. - - This method takes a single argument ``arg_line`` which is a string read from - the argument file. It returns a list of arguments parsed from this string. - The method is called once per line read from the argument file, in order. - - A useful override of this method is one that treats each space-separated - word as an argument:: - - def convert_arg_line_to_args(self, arg_line): - for arg in arg_line.split(): - if not arg.strip(): - continue - yield arg - - -Upgrading optparse code ------------------------ - -Originally, the argparse module had attempted to maintain compatibility with - optparse. However, optparse was difficult to extend transparently, - particularly with the changes required to support the new ``nargs=`` - specifiers and better usage messges. When most everything in optparse had - either been copy-pasted over or monkey-patched, it no longer seemed practical - to try to maintain the backwards compatibility. - -A partial upgrade path from optparse to argparse: - -* Replace all ``add_option()`` calls with :meth:`add_argument` calls. - -* Replace ``options, args = parser.parse_args()`` with - ``args = parser.parse_args()`` and add additional :meth:`add_argument` calls - for the positional arguments. - -* Replace callback actions and the ``callback_*`` keyword arguments with - ``type`` or ``action`` arguments. - -* Replace string names for ``type`` keyword arguments with the corresponding - type objects (e.g. int, float, complex, etc). - -* Replace ``Values`` with ``Namespace`` and ``OptionError/OptionValueError`` - with ``ArgumentError``. - -* Replace strings with implicit arguments such as ``%default`` or ``%prog`` - with the standard python syntax to use dictionaries to format strings, that - is, ``%(default)s`` and ``%(prog)s``. +:mod:`argparse` -- Parser for command line options, arguments and sub-commands +============================================================================== + +.. module:: argparse + :synopsis: Command-line option and argument parsing library. +.. moduleauthor:: Steven Bethard +.. versionadded:: 2.7 +.. sectionauthor:: Steven Bethard + + +The :mod:`argparse` module makes it easy to write user friendly command line +interfaces. You define what arguments your program requires, and +:mod:`argparse` will figure out how to parse those out of ``sys.argv``. The +:mod:`argparse` module also automatically generates help and usage messages +based on the arguments you have defined, and issues errors when users give your +program invalid arguments. + +Example +------- + +As an example, the following code is a Python program that takes a list of +integers and produces either the sum or the max:: + + import argparse + + parser = argparse.ArgumentParser(description='Process some integers.') + parser.add_argument('integers', metavar='N', type=int, nargs='+', + help='an integer for the accumulator') + parser.add_argument('--sum', dest='accumulate', action='store_const', + const=sum, default=max, + help='sum the integers (default: find the max)') + + args = parser.parse_args() + print args.accumulate(args.integers) + +Assuming the Python code above is saved into a file called ``prog.py``, it can +be run at the command line and provides useful help messages:: + + $ prog.py -h + usage: prog.py [-h] [--sum] N [N ...] + + Process some integers. + + positional arguments: + N an integer for the accumulator + + optional arguments: + -h, --help show this help message and exit + --sum sum the integers (default: find the max) + +When run with the appropriate arguments, it prints either the sum or the max of +the command-line integers:: + + $ prog.py 1 2 3 4 + 4 + + $ prog.py 1 2 3 4 --sum + 10 + +If invalid arguments are passed in, it will issue an error:: + + $ prog.py a b c + usage: prog.py [-h] [--sum] N [N ...] + prog.py: error: argument N: invalid int value: 'a' + +The following sections walk you through this example. + +Creating a parser +^^^^^^^^^^^^^^^^^ + +Pretty much every script that uses the :mod:`argparse` module will start out by +creating an :class:`ArgumentParser` object:: + + >>> parser = argparse.ArgumentParser(description='Process some integers.') + +The :class:`ArgumentParser` object will hold all the information necessary to +parse the command line into a more manageable form for your program. + + +Adding arguments +^^^^^^^^^^^^^^^^ + +Once you've created an :class:`ArgumentParser`, you'll want to fill it with +information about your program arguments. You typically do this by making calls +to the :meth:`add_argument` method. Generally, these calls tell the +:class:`ArgumentParser` how to take the strings on the command line and turn +them into objects for you. This information is stored and used when +:meth:`parse_args` is called. For example, if we add some arguments like this:: + + >>> parser.add_argument('integers', metavar='N', type=int, nargs='+', + ... help='an integer for the accumulator') + >>> parser.add_argument('--sum', dest='accumulate', action='store_const', + ... const=sum, default=max, + ... help='sum the integers (default: find the max)') + +when we later call :meth:`parse_args`, we can expect it to return an object +with two attributes, ``integers`` and ``accumulate``. The ``integers`` +attribute will be a list of one or more ints, and the ``accumulate`` attribute +will be either the ``sum`` function, if ``--sum`` was specified at the command +line, or the ``max`` function if it was not. + +Parsing arguments +^^^^^^^^^^^^^^^^^ + +Once an :class:`ArgumentParser` has been initialized with appropriate calls to +:meth:`add_argument`, it can be instructed to parse the command-line args by +calling the :meth:`parse_args` method. This will inspect the command-line, +convert each arg to the appropriate type and then invoke the appropriate +action. In most cases, this means a simple namespace object will be built up +from attributes parsed out of the command-line:: + + >>> parser.parse_args(['--sum', '7', '-1', '42']) + Namespace(accumulate=, integers=[7, -1, 42]) + +In a script, :meth:`parse_args` will typically be called with no arguments, and +the :class:`ArgumentParser` will automatically determine the command-line args +from ``sys.argv``. That's pretty much it. You're now ready to go write some +command line interfaces! + + +ArgumentParser objects +---------------------- + +.. class:: ArgumentParser([description], [epilog], [prog], [usage], [add_help], [argument_default], [parents], [prefix_chars], [conflict_handler], [formatter_class]) + + Create a new :class:`ArgumentParser` object. Each parameter has its own more + detailed description below, but in short they are: + + * description_ - Text to display before the argument help. + + * epilog_ - Text to display after the argument help. + + * add_help_ - Add a -h/--help option to the parser. (default: True) + + * argument_default_ - Set the global default value for arguments. + (default: None) + + * parents_ - A list of :class:ArgumentParser objects whose arguments should + also be included. + + * prefix_chars_ - The set of characters that prefix optional arguments. + (default: '-') + + * fromfile_prefix_chars_ - The set of characters that prefix files from + which additional arguments should be read. (default: None) + + * formatter_class_ - A class for customizing the help output. + + * conflict_handler_ - Usually unnecessary, defines strategy for resolving + conflicting optionals. + + * prog_ - Usually unnecessary, the name of the program + (default: ``sys.argv[0]``) + + * usage_ - Usually unnecessary, the string describing the program usage + (default: generated) + + The following sections describe how each of these are used. + + +description +^^^^^^^^^^^ + +Most calls to the ArgumentParser constructor will use the ``description=`` +keyword argument. This argument gives a brief description of what the program +does and how it works. In help messages, the description is displayed between +the command-line usage string and the help messages for the various arguments:: + + >>> parser = argparse.ArgumentParser(description='A foo that bars') + >>> parser.print_help() + usage: argparse.py [-h] + + A foo that bars + + optional arguments: + -h, --help show this help message and exit + +By default, the description will be line-wrapped so that it fits within the +given space. To change this behavior, see the formatter_class_ argument. + + +epilog +^^^^^^ + +Some programs like to display additional description of the program after the +description of the arguments. Such text can be specified using the ``epilog=`` +argument to ArgumentParser:: + + >>> parser = argparse.ArgumentParser( + ... description='A foo that bars', + ... epilog="And that's how you'd foo a bar") + >>> parser.print_help() + usage: argparse.py [-h] + + A foo that bars + + optional arguments: + -h, --help show this help message and exit + + And that's how you'd foo a bar + +As with the description_ argument, the ``epilog=`` text is by default +line-wrapped, but this behavior can be adjusted with the formatter_class_ +argument to ArgumentParser. + + +add_help +^^^^^^^^ + +By default, ArgumentParser objects add a ``-h/--help`` option which simply +displays the parser's help message. For example, consider a file named +``myprogram.py`` containing the following code:: + + import argparse + parser = argparse.ArgumentParser() + parser.add_argument('--foo', help='foo help') + args = parser.parse_args() + +If ``-h`` or ``--help`` is supplied is at the command-line, the ArgumentParser +help will be printed:: + + $ python myprogram.py --help + usage: myprogram.py [-h] [--foo FOO] + + optional arguments: + -h, --help show this help message and exit + --foo FOO foo help + +Occasionally, it may be useful to disable the addition of this help option. +This can be achieved by passing ``False`` as the ``add_help=`` argument to +ArgumentParser:: + + >>> parser = argparse.ArgumentParser(prog='PROG', add_help=False) + >>> parser.add_argument('--foo', help='foo help') + >>> parser.print_help() + usage: PROG [--foo FOO] + + optional arguments: + --foo FOO foo help + + +prefix_chars +^^^^^^^^^^^^ + +Most command-line options will use ``'-'`` as the prefix, e.g. ``-f/--foo``. +Parsers that need to support additional prefix characters, e.g. for options +like ``+f`` or ``/foo``, may specify them using the ``prefix_chars=`` argument +to the ArgumentParser constructor:: + + >>> parser = argparse.ArgumentParser(prog='PROG', prefix_chars='-+') + >>> parser.add_argument('+f') + >>> parser.add_argument('++bar') + >>> parser.parse_args('+f X ++bar Y'.split()) + Namespace(bar='Y', f='X') + +The ``prefix_chars=`` argument defaults to ``'-'``. Supplying a set of +characters that does not include ``'-'`` will cause ``-f/--foo`` options to be +disallowed. + + +fromfile_prefix_chars +^^^^^^^^^^^^^^^^^^^^^ + +Sometimes, e.g. for particularly long argument lists, it may make sense to +keep the list of arguments in a file rather than typing it out at the command +line. If the ``fromfile_prefix_chars=`` argument is given to the ArgumentParser +constructor, then arguments that start with any of the specified characters +will be treated as files, and will be replaced by the arguments they contain. +For example:: + + >>> open('args.txt', 'w').write('-f\nbar') + >>> parser = argparse.ArgumentParser(fromfile_prefix_chars='@') + >>> parser.add_argument('-f') + >>> parser.parse_args(['-f', 'foo', '@args.txt']) + Namespace(f='bar') + +Arguments read from a file must by default be one per line (but see also +:meth:`convert_arg_line_to_args`) and are treated as if they were in the same +place as the original file referencing argument on the command line. So in the +example above, the expression ``['-f', 'foo', '@args.txt']`` is considered +equivalent to the expression ``['-f', 'foo', '-f', 'bar']``. + +The ``fromfile_prefix_chars=`` argument defaults to ``None``, meaning that +arguments will never be treated as file references. + +argument_default +^^^^^^^^^^^^^^^^ + +Generally, argument defaults are specified either by passing a default to +:meth:`add_argument` or by calling the :meth:`set_defaults` methods with a +specific set of name-value pairs. Sometimes however, it may be useful to +specify a single parser-wide default for arguments. This can be accomplished by +passing the ``argument_default=`` keyword argument to ArgumentParser. For +example, to globally suppress attribute creation on :meth:`parse_args` calls, +we supply ``argument_default=SUPPRESS``:: + + >>> parser = argparse.ArgumentParser(argument_default=argparse.SUPPRESS) + >>> parser.add_argument('--foo') + >>> parser.add_argument('bar', nargs='?') + >>> parser.parse_args(['--foo', '1', 'BAR']) + Namespace(bar='BAR', foo='1') + >>> parser.parse_args([]) + Namespace() + + +parents +^^^^^^^ + +Sometimes, several parsers share a common set of arguments. Rather than +repeating the definitions of these arguments, you can define a single parser +with all the shared arguments and then use the ``parents=`` argument to +ArgumentParser to have these "inherited". The ``parents=`` argument takes a +list of ArgumentParser objects, collects all the positional and optional +actions from them, and adds these actions to the ArgumentParser object being +constructed:: + + >>> parent_parser = argparse.ArgumentParser(add_help=False) + >>> parent_parser.add_argument('--parent', type=int) + + >>> foo_parser = argparse.ArgumentParser(parents=[parent_parser]) + >>> foo_parser.add_argument('foo') + >>> foo_parser.parse_args(['--parent', '2', 'XXX']) + Namespace(foo='XXX', parent=2) + + >>> bar_parser = argparse.ArgumentParser(parents=[parent_parser]) + >>> bar_parser.add_argument('--bar') + >>> bar_parser.parse_args(['--bar', 'YYY']) + Namespace(bar='YYY', parent=None) + +Note that most parent parsers will specify ``add_help=False``. Otherwise, the +ArgumentParser will see two ``-h/--help`` options (one in the parent and one in +the child) and raise an error. + + +formatter_class +^^^^^^^^^^^^^^^ + +ArgumentParser objects allow the help formatting to be customized by specifying +an alternate formatting class. Currently, there are three such classes: +``argparse.RawDescriptionHelpFormatter``, ``argparse.RawTextHelpFormatter`` and +``argparse.ArgumentDefaultsHelpFormatter``. The first two allow more control +over how textual descriptions are displayed, while the last automatically adds +information about argument default values. + +By default, ArgumentParser objects line-wrap the description_ and epilog_ texts +in command-line help messages:: + + >>> parser = argparse.ArgumentParser( + ... prog='PROG', + ... description='''this description + ... was indented weird + ... but that is okay''', + ... epilog=''' + ... likewise for this epilog whose whitespace will + ... be cleaned up and whose words will be wrapped + ... across a couple lines''') + >>> parser.print_help() + usage: PROG [-h] + + this description was indented weird but that is okay + + optional arguments: + -h, --help show this help message and exit + + likewise for this epilog whose whitespace will be cleaned up and whose words + will be wrapped across a couple lines + +When you have description_ and epilog_ that is already correctly formatted and +should not be line-wrapped, you can indicate this by passing +``argparse.RawDescriptionHelpFormatter`` as the ``formatter_class=`` argument +to ArgumentParser:: + + >>> parser = argparse.ArgumentParser( + ... prog='PROG', + ... formatter_class=argparse.RawDescriptionHelpFormatter, + ... description=textwrap.dedent('''\ + ... Please do not mess up this text! + ... -------------------------------- + ... I have indented it + ... exactly the way + ... I want it + ... ''')) + >>> parser.print_help() + usage: PROG [-h] + + Please do not mess up this text! + -------------------------------- + I have indented it + exactly the way + I want it + + optional arguments: + -h, --help show this help message and exit + +If you want to maintain whitespace for all sorts of help text (including +argument descriptions), you can use ``argparse.RawTextHelpFormatter``. + +The other formatter class available, +``argparse.ArgumentDefaultsHelpFormatter``, will add information about the +default value of each of the arguments:: + + >>> parser = argparse.ArgumentParser( + ... prog='PROG', + ... formatter_class=argparse.ArgumentDefaultsHelpFormatter) + >>> parser.add_argument('--foo', type=int, default=42, help='FOO!') + >>> parser.add_argument('bar', nargs='*', default=[1, 2, 3], help='BAR!') + >>> parser.print_help() + usage: PROG [-h] [--foo FOO] [bar [bar ...]] + + positional arguments: + bar BAR! (default: [1, 2, 3]) + + optional arguments: + -h, --help show this help message and exit + --foo FOO FOO! (default: 42) + + +conflict_handler +^^^^^^^^^^^^^^^^ + +ArgumentParser objects do not allow two actions with the same option string. +By default, ArgumentParser objects will raise an exception if you try to create +an argument with an option string that is already in use:: + + >>> parser = argparse.ArgumentParser(prog='PROG') + >>> parser.add_argument('-f', '--foo', help='old foo help') + >>> parser.add_argument('--foo', help='new foo help') + Traceback (most recent call last): + .. + ArgumentError: argument --foo: conflicting option string(s): --foo + +Sometimes (e.g. when using parents_) it may be useful to simply override any +older arguments with the same option string. To get this behavior, the value +``'resolve'`` can be supplied to the ``conflict_handler=`` argument of +ArgumentParser:: + + >>> parser = argparse.ArgumentParser(prog='PROG', conflict_handler='resolve') + >>> parser.add_argument('-f', '--foo', help='old foo help') + >>> parser.add_argument('--foo', help='new foo help') + >>> parser.print_help() + usage: PROG [-h] [-f FOO] [--foo FOO] + + optional arguments: + -h, --help show this help message and exit + -f FOO old foo help + --foo FOO new foo help + +Note that ArgumentParser objects only remove an action if all of its option +strings are overridden. So, in the example above, the old ``-f/--foo`` action +is retained as the ``-f`` action, because only the ``--foo`` option string was +overridden. + + +prog +^^^^ + +By default, ArgumentParser objects use ``sys.argv[0]`` to determine how to +display the name of the program in help messages. This default is almost always +what you want because it will make the help messages match what your users have +typed at the command line. For example, consider a file named ``myprogram.py`` +with the following code:: + + import argparse + parser = argparse.ArgumentParser() + parser.add_argument('--foo', help='foo help') + args = parser.parse_args() + +The help for this program will display ``myprogram.py`` as the program name +(regardless of where the program was invoked from):: + + $ python myprogram.py --help + usage: myprogram.py [-h] [--foo FOO] + + optional arguments: + -h, --help show this help message and exit + --foo FOO foo help + $ cd .. + $ python subdir\myprogram.py --help + usage: myprogram.py [-h] [--foo FOO] + + optional arguments: + -h, --help show this help message and exit + --foo FOO foo help + +To change this default behavior, another value can be supplied using the +``prog=`` argument to ArgumentParser:: + + >>> parser = argparse.ArgumentParser(prog='myprogram') + >>> parser.print_help() + usage: myprogram [-h] + + optional arguments: + -h, --help show this help message and exit + +Note that the program name, whether determined from ``sys.argv[0]`` or from the +``prog=`` argument, is available to help messages using the ``%(prog)s`` format +specifier. + +:: + + >>> parser = argparse.ArgumentParser(prog='myprogram') + >>> parser.add_argument('--foo', help='foo of the %(prog)s program') + >>> parser.print_help() + usage: myprogram [-h] [--foo FOO] + + optional arguments: + -h, --help show this help message and exit + --foo FOO foo of the myprogram program + + +usage +^^^^^ + +By default, ArgumentParser objects calculate the usage message from the +arguments it contains:: + + >>> parser = argparse.ArgumentParser(prog='PROG') + >>> parser.add_argument('--foo', nargs='?', help='foo help') + >>> parser.add_argument('bar', nargs='+', help='bar help') + >>> parser.print_help() + usage: PROG [-h] [--foo [FOO]] bar [bar ...] + + positional arguments: + bar bar help + + optional arguments: + -h, --help show this help message and exit + --foo [FOO] foo help + +If the default usage message is not appropriate for your application, you can +supply your own usage message using the ``usage=`` keyword argument to +ArgumentParser:: + + >>> parser = argparse.ArgumentParser(prog='PROG', usage='%(prog)s [options]') + >>> parser.add_argument('--foo', nargs='?', help='foo help') + >>> parser.add_argument('bar', nargs='+', help='bar help') + >>> parser.print_help() + usage: PROG [options] + + positional arguments: + bar bar help + + optional arguments: + -h, --help show this help message and exit + --foo [FOO] foo help + +Note you can use the ``%(prog)s`` format specifier to fill in the program name +in your usage messages. + + +The add_argument() method +------------------------- + +.. method:: add_argument(name or flags..., [action], [nargs], [const], [default], [type], [choices], [required], [help], [metavar], [dest]) + + Define how a single command line argument should be parsed. Each parameter + has its own more detailed description below, but in short they are: + + * `name or flags`_ - Either a name or a list of option strings, e.g. ``foo`` + or ``-f, --foo`` + + * action_ - The basic type of action to be taken when this argument is + encountered at the command-line. + + * nargs_ - The number of command-line arguments that should be consumed. + + * const_ - A constant value required by some action_ and nargs_ selections. + + * default_ - The value produced if the argument is absent from the + command-line. + + * type_ - The type to which the command-line arg should be converted. + + * choices_ - A container of the allowable values for the argument. + + * required_ - Whether or not the command-line option may be omitted + (optionals only). + + * help_ - A brief description of what the argument does. + + * metavar_ - A name for the argument in usage messages. + + * dest_ - The name of the attribute to be added to the object returned by + :meth:`parse_args`. + + The following sections describe how each of these are used. + +name or flags +^^^^^^^^^^^^^ + +The :meth:`add_argument` method needs to know whether you're expecting an +optional argument, e.g. ``-f`` or ``--foo``, or a positional argument, e.g. a +list of filenames. The first arguments passed to :meth:`add_argument` must +therefore be either a series of flags, or a simple argument name. For example, +an optional argument could be created like:: + + >>> parser.add_argument('-f', '--foo') + +while a positional argument could be created like:: + + >>> parser.add_argument('bar') + +When :meth:`parse_args` is called, optional arguments will be identified by the +``-`` prefix, and the remaining arguments will be assumed to be positional:: + + >>> parser = argparse.ArgumentParser(prog='PROG') + >>> parser.add_argument('-f', '--foo') + >>> parser.add_argument('bar') + >>> parser.parse_args(['BAR']) + Namespace(bar='BAR', foo=None) + >>> parser.parse_args(['BAR', '--foo', 'FOO']) + Namespace(bar='BAR', foo='FOO') + >>> parser.parse_args(['--foo', 'FOO']) + usage: PROG [-h] [-f FOO] bar + PROG: error: too few arguments + +action +^^^^^^ + +:class:`ArgumentParser` objects associate command-line args with actions. These +actions can do just about anything with the command-line args associated with +them, though most actions simply add an attribute to the object returned by +:meth:`parse_args`. When you specify a new argument using the +:meth:`add_argument` method, you can indicate how the command-line args should +be handled by specifying the ``action`` keyword argument. The supported actions +are: + +* ``'store'`` - This just stores the argument's value. This is the default + action. For example:: + + >>> parser = argparse.ArgumentParser() + >>> parser.add_argument('--foo') + >>> parser.parse_args('--foo 1'.split()) + Namespace(foo='1') + +* ``'store_const'`` - This stores the value specified by the const_ keyword + argument. Note that the const_ keyword argument defaults to ``None``, so + you'll almost always need to provide a value for it. The ``'store_const'`` + action is most commonly used with optional arguments that specify some sort + of flag. For example:: + + >>> parser = argparse.ArgumentParser() + >>> parser.add_argument('--foo', action='store_const', const=42) + >>> parser.parse_args('--foo'.split()) + Namespace(foo=42) + +* ``'store_true'`` and ``'store_false'`` - These store the values ``True`` and + ``False`` respectively. These are basically special cases of + ``'store_const'``. For example:: + + >>> parser = argparse.ArgumentParser() + >>> parser.add_argument('--foo', action='store_true') + >>> parser.add_argument('--bar', action='store_false') + >>> parser.parse_args('--foo --bar'.split()) + Namespace(bar=False, foo=True) + +* ``'append'`` - This stores a list, and appends each argument value to the + list. This is useful when you want to allow an option to be specified + multiple times. Example usage:: + + >>> parser = argparse.ArgumentParser() + >>> parser.add_argument('--foo', action='append') + >>> parser.parse_args('--foo 1 --foo 2'.split()) + Namespace(foo=['1', '2']) + +* ``'append_const'`` - This stores a list, and appends the value specified by + the const_ keyword argument to the list. Note that the const_ keyword + argument defaults to ``None``, so you'll almost always need to provide a + value for it. The ``'append_const'`` action is typically useful when you + want multiple arguments to store constants to the same list, for example:: + + >>> parser = argparse.ArgumentParser() + >>> parser.add_argument('--str', dest='types', action='append_const', const=str) + >>> parser.add_argument('--int', dest='types', action='append_const', const=int) + >>> parser.parse_args('--str --int'.split()) + Namespace(types=[, ]) + +* ``'version'`` - This expects a ``version=`` keyword argument in the + :meth:`add_argument` call, and prints version information and exits when + invoked. + + >>> import argparse + >>> parser = argparse.ArgumentParser(prog='PROG') + >>> parser.add_argument('-v', '--version', action='version', version='%(prog)s 2.0') + >>> parser.parse_args(['-v']) + PROG 2.0 + +You can also specify an arbitrary action by passing an object that implements +the Action API. The easiest way to do this is to extend ``argparse.Action``, +supplying an appropriate ``__call__`` method. The ``__call__`` method accepts +four parameters: + +* ``parser`` - The ArgumentParser object which contains this action. + +* ``namespace`` - The namespace object that will be returned by + :meth:`parse_args`. Most actions add an attribute to this object. + +* ``values`` - The associated command-line args, with any type-conversions + applied. (Type-conversions are specified with the type_ keyword argument to + :meth:`add_argument`. + +* ``option_string`` - The option string that was used to invoke this action. + The ``option_string`` argument is optional, and will be absent if the action + is associated with a positional argument. + +So for example:: + + >>> class FooAction(argparse.Action): + ... def __call__(self, parser, namespace, values, option_string=None): + ... print '%r %r %r' % (namespace, values, option_string) + ... setattr(namespace, self.dest, values) + ... + >>> parser = argparse.ArgumentParser() + >>> parser.add_argument('--foo', action=FooAction) + >>> parser.add_argument('bar', action=FooAction) + >>> args = parser.parse_args('1 --foo 2'.split()) + Namespace(bar=None, foo=None) '1' None + Namespace(bar='1', foo=None) '2' '--foo' + >>> args + Namespace(bar='1', foo='2') + + +nargs +^^^^^ + +ArgumentParser objects usually associate a single command-line argument with a +single action to be taken. In the situations where you'd like to associate a +different number of command-line arguments with a single action, you can use +the ``nargs`` keyword argument to :meth:`add_argument`. The supported values +are: + +* N (an integer). N args from the command-line will be gathered together into + a list. For example:: + + >>> parser = argparse.ArgumentParser() + >>> parser.add_argument('--foo', nargs=2) + >>> parser.add_argument('bar', nargs=1) + >>> parser.parse_args('c --foo a b'.split()) + Namespace(bar=['c'], foo=['a', 'b']) + + Note that ``nargs=1`` produces a list of one item. This is different from + the default, in which the item is produced by itself. + +* ``'?'``. One arg will be consumed from the command-line if possible, and + produced as a single item. If no command-line arg is present, the value from + default_ will be produced. Note that for optional arguments, there is an + additional case - the option string is present but not followed by a + command-line arg. In this case the value from const_ will be produced. Some + examples to illustrate this:: + + >>> parser = argparse.ArgumentParser() + >>> parser.add_argument('--foo', nargs='?', const='c', default='d') + >>> parser.add_argument('bar', nargs='?', default='d') + >>> parser.parse_args('XX --foo YY'.split()) + Namespace(bar='XX', foo='YY') + >>> parser.parse_args('XX --foo'.split()) + Namespace(bar='XX', foo='c') + >>> parser.parse_args(''.split()) + Namespace(bar='d', foo='d') + + One of the more common uses of ``nargs='?'`` is to allow optional input and + output files:: + + >>> parser = argparse.ArgumentParser() + >>> parser.add_argument('infile', nargs='?', type=argparse.FileType('r'), default=sys.stdin) + >>> parser.add_argument('outfile', nargs='?', type=argparse.FileType('w'), default=sys.stdout) + >>> parser.parse_args(['input.txt', 'output.txt']) + Namespace(infile=, outfile=) + >>> parser.parse_args([]) + Namespace(infile=', mode 'r' at 0x...>, outfile=', mode 'w' at 0x...>) + +* ``'*'``. All command-line args present are gathered into a list. Note that + it generally doesn't make much sense to have more than one positional + argument with ``nargs='*'``, but multiple optional arguments with + ``nargs='*'`` is possible. For example:: + + >>> parser = argparse.ArgumentParser() + >>> parser.add_argument('--foo', nargs='*') + >>> parser.add_argument('--bar', nargs='*') + >>> parser.add_argument('baz', nargs='*') + >>> parser.parse_args('a b --foo x y --bar 1 2'.split()) + Namespace(bar=['1', '2'], baz=['a', 'b'], foo=['x', 'y']) + +* ``'+'``. Just like ``'*'``, all command-line args present are gathered into a + list. Additionally, an error message will be generated if there wasn't at + least one command-line arg present. For example:: + + >>> parser = argparse.ArgumentParser(prog='PROG') + >>> parser.add_argument('foo', nargs='+') + >>> parser.parse_args('a b'.split()) + Namespace(foo=['a', 'b']) + >>> parser.parse_args(''.split()) + usage: PROG [-h] foo [foo ...] + PROG: error: too few arguments + +If the ``nargs`` keyword argument is not provided, the number of args consumed +is determined by the action_. Generally this means a single command-line arg +will be consumed and a single item (not a list) will be produced. + + +const +^^^^^ + +The ``const`` argument of :meth:`add_argument` is used to hold constant values +that are not read from the command line but are required for the various +ArgumentParser actions. The two most common uses of it are: + +* When :meth:`add_argument` is called with ``action='store_const'`` or + ``action='append_const'``. These actions add the ``const`` value to one of + the attributes of the object returned by :meth:`parse_args`. See the action_ + description for examples. + +* When :meth:`add_argument` is called with option strings (like ``-f`` or + ``--foo``) and ``nargs='?'``. This creates an optional argument that can be + followed by zero or one command-line args. When parsing the command-line, if + the option string is encountered with no command-line arg following it, the + value of ``const`` will be assumed instead. See the nargs_ description for + examples. + +The ``const`` keyword argument defaults to ``None``. + + +default +^^^^^^^ + +All optional arguments and some positional arguments may be omitted at the +command-line. The ``default`` keyword argument of :meth:`add_argument`, whose +value defaults to ``None``, specifies what value should be used if the +command-line arg is not present. For optional arguments, the ``default`` value +is used when the option string was not present at the command line:: + + >>> parser = argparse.ArgumentParser() + >>> parser.add_argument('--foo', default=42) + >>> parser.parse_args('--foo 2'.split()) + Namespace(foo='2') + >>> parser.parse_args(''.split()) + Namespace(foo=42) + +For positional arguments with nargs_ ``='?'`` or ``'*'``, the ``default`` value +is used when no command-line arg was present:: + + >>> parser = argparse.ArgumentParser() + >>> parser.add_argument('foo', nargs='?', default=42) + >>> parser.parse_args('a'.split()) + Namespace(foo='a') + >>> parser.parse_args(''.split()) + Namespace(foo=42) + + +If you don't want to see an attribute when an option was not present at the +command line, you can supply ``default=argparse.SUPPRESS``:: + + >>> parser = argparse.ArgumentParser() + >>> parser.add_argument('--foo', default=argparse.SUPPRESS) + >>> parser.parse_args([]) + Namespace() + >>> parser.parse_args(['--foo', '1']) + Namespace(foo='1') + + +type +^^^^ + +By default, ArgumentParser objects read command-line args in as simple strings. +However, quite often the command-line string should instead be interpreted as +another type, e.g. ``float``, ``int`` or ``file``. The ``type`` keyword +argument of :meth:`add_argument` allows any necessary type-checking and +type-conversions to be performed. Many common builtin types can be used +directly as the value of the ``type`` argument:: + + >>> parser = argparse.ArgumentParser() + >>> parser.add_argument('foo', type=int) + >>> parser.add_argument('bar', type=file) + >>> parser.parse_args('2 temp.txt'.split()) + Namespace(bar=, foo=2) + +To ease the use of various types of files, the argparse module provides the +factory FileType which takes the ``mode=`` and ``bufsize=`` arguments of the +``file`` object. For example, ``FileType('w')`` can be used to create a +writable file:: + + >>> parser = argparse.ArgumentParser() + >>> parser.add_argument('bar', type=argparse.FileType('w')) + >>> parser.parse_args(['out.txt']) + Namespace(bar=) + +If you need to do some special type-checking or type-conversions, you can +provide your own types by passing to ``type=`` a callable that takes a single +string argument and returns the type-converted value:: + + >>> def perfect_square(string): + ... value = int(string) + ... sqrt = math.sqrt(value) + ... if sqrt != int(sqrt): + ... msg = "%r is not a perfect square" % string + ... raise argparse.ArgumentTypeError(msg) + ... return value + ... + >>> parser = argparse.ArgumentParser(prog='PROG') + >>> parser.add_argument('foo', type=perfect_square) + >>> parser.parse_args('9'.split()) + Namespace(foo=9) + >>> parser.parse_args('7'.split()) + usage: PROG [-h] foo + PROG: error: argument foo: '7' is not a perfect square + +Note that if your type-checking function is just checking for a particular set +of values, it may be more convenient to use the choices_ keyword argument:: + + >>> parser = argparse.ArgumentParser(prog='PROG') + >>> parser.add_argument('foo', type=int, choices=xrange(5, 10)) + >>> parser.parse_args('7'.split()) + Namespace(foo=7) + >>> parser.parse_args('11'.split()) + usage: PROG [-h] {5,6,7,8,9} + PROG: error: argument foo: invalid choice: 11 (choose from 5, 6, 7, 8, 9) + +See the choices_ section for more details. + + +choices +^^^^^^^ + +Some command-line args should be selected from a restricted set of values. +ArgumentParser objects can be told about such sets of values by passing a +container object as the ``choices`` keyword argument to :meth:`add_argument`. +When the command-line is parsed with :meth:`parse_args`, arg values will be +checked, and an error message will be displayed if the arg was not one of the +acceptable values:: + + >>> parser = argparse.ArgumentParser(prog='PROG') + >>> parser.add_argument('foo', choices='abc') + >>> parser.parse_args('c'.split()) + Namespace(foo='c') + >>> parser.parse_args('X'.split()) + usage: PROG [-h] {a,b,c} + PROG: error: argument foo: invalid choice: 'X' (choose from 'a', 'b', 'c') + +Note that inclusion in the ``choices`` container is checked after any type_ +conversions have been performed, so the type of the objects in the ``choices`` +container should match the type_ specified:: + + >>> parser = argparse.ArgumentParser(prog='PROG') + >>> parser.add_argument('foo', type=complex, choices=[1, 1j]) + >>> parser.parse_args('1j'.split()) + Namespace(foo=1j) + >>> parser.parse_args('-- -4'.split()) + usage: PROG [-h] {1,1j} + PROG: error: argument foo: invalid choice: (-4+0j) (choose from 1, 1j) + +Any object that supports the ``in`` operator can be passed as the ``choices`` +value, so ``dict`` objects, ``set`` objects, custom containers, etc. are all +supported. + + +required +^^^^^^^^ + +In general, the argparse module assumes that flags like ``-f`` and ``--bar`` +indicate *optional* arguments, which can always be omitted at the command-line. +To change this behavior, i.e. to make an option *required*, the value ``True`` +should be specified for the ``required=`` keyword argument to +:meth:`add_argument`:: + + >>> parser = argparse.ArgumentParser() + >>> parser.add_argument('--foo', required=True) + >>> parser.parse_args(['--foo', 'BAR']) + Namespace(foo='BAR') + >>> parser.parse_args([]) + usage: argparse.py [-h] [--foo FOO] + argparse.py: error: option --foo is required + +As the example shows, if an option is marked as ``required``, :meth:`parse_args` +will report an error if that option is not present at the command line. + +**Warning:** Required options are generally considered bad form - normal users +expect *options* to be *optional*. You should avoid the use of required options +whenever possible. + + +help +^^^^ + +A great command-line interface isn't worth anything if your users can't figure +out which option does what. So for the end-users, ``help`` is probably the +most important argument to include in your :meth:`add_argument` calls. The +``help`` value should be a string containing a brief description of what the +argument specifies. When a user requests help (usually by using ``-h`` or +``--help`` at the command-line), these ``help`` descriptions will be displayed +with each argument:: + + >>> parser = argparse.ArgumentParser(prog='frobble') + >>> parser.add_argument('--foo', action='store_true', + ... help='foo the bars before frobbling') + >>> parser.add_argument('bar', nargs='+', + ... help='one of the bars to be frobbled') + >>> parser.parse_args('-h'.split()) + usage: frobble [-h] [--foo] bar [bar ...] + + positional arguments: + bar one of the bars to be frobbled + + optional arguments: + -h, --help show this help message and exit + --foo foo the bars before frobbling + +The ``help`` strings can include various format specifiers to avoid repetition +of things like the program name or the argument default_. The available +specifiers include the program name, ``%(prog)s`` and most keyword arguments to +:meth:`add_argument`, e.g. ``%(default)s``, ``%(type)s``, etc.:: + + >>> parser = argparse.ArgumentParser(prog='frobble') + >>> parser.add_argument('bar', nargs='?', type=int, default=42, + ... help='the bar to %(prog)s (default: %(default)s)') + >>> parser.print_help() + usage: frobble [-h] [bar] + + positional arguments: + bar the bar to frobble (default: 42) + + optional arguments: + -h, --help show this help message and exit + + +metavar +^^^^^^^ + +When ArgumentParser objects generate help messages, they need some way to refer +to each expected argument. By default, ArgumentParser objects use the dest_ +value as the "name" of each object. By default, for positional argument +actions, the dest_ value is used directly, and for optional argument actions, +the dest_ value is uppercased. So if we have a single positional argument with +``dest='bar'``, that argument will be referred to as ``bar``. And if we have a +single optional argument ``--foo`` that should be followed by a single +command-line arg, that arg will be referred to as ``FOO``. You can see this +behavior in the example below:: + + >>> parser = argparse.ArgumentParser() + >>> parser.add_argument('--foo') + >>> parser.add_argument('bar') + >>> parser.parse_args('X --foo Y'.split()) + Namespace(bar='X', foo='Y') + >>> parser.print_help() + usage: [-h] [--foo FOO] bar + + positional arguments: + bar + + optional arguments: + -h, --help show this help message and exit + --foo FOO + +If you would like to provide a different name for your argument in help +messages, you can supply a value for the ``metavar`` keyword argument to +:meth:`add_argument`:: + + >>> parser = argparse.ArgumentParser() + >>> parser.add_argument('--foo', metavar='YYY') + >>> parser.add_argument('bar', metavar='XXX') + >>> parser.parse_args('X --foo Y'.split()) + Namespace(bar='X', foo='Y') + >>> parser.print_help() + usage: [-h] [--foo YYY] XXX + + positional arguments: + XXX + + optional arguments: + -h, --help show this help message and exit + --foo YYY + +Note that ``metavar`` only changes the *displayed* name - the name of the +attribute on the :meth:`parse_args` object is still determined by the dest_ +value. + +Different values of ``nargs`` may cause the metavar to be used multiple times. +If you'd like to specify a different display name for each of the arguments, +you can provide a tuple to ``metavar``:: + + >>> parser = argparse.ArgumentParser(prog='PROG') + >>> parser.add_argument('-x', nargs=2) + >>> parser.add_argument('--foo', nargs=2, metavar=('bar', 'baz')) + >>> parser.print_help() + usage: PROG [-h] [-x X X] [--foo bar baz] + + optional arguments: + -h, --help show this help message and exit + -x X X + --foo bar baz + + +dest +^^^^ + +Most ArgumentParser actions add some value as an attribute of the object +returned by :meth:`parse_args`. The name of this attribute is determined by the +``dest`` keyword argument of :meth:`add_argument`. For positional argument +actions, ``dest`` is normally supplied as the first argument to +:meth:`add_argument`:: + + >>> parser = argparse.ArgumentParser() + >>> parser.add_argument('bar') + >>> parser.parse_args('XXX'.split()) + Namespace(bar='XXX') + +For optional argument actions, the value of ``dest`` is normally inferred from +the option strings. ArgumentParser objects generate the value of ``dest`` by +taking the first long option string and stripping away the initial ``'--'`` +string. If no long option strings were supplied, ``dest`` will be derived from +the first short option string by stripping the initial ``'-'`` character. Any +internal ``'-'`` characters will be converted to ``'_'`` characters to make +sure the string is a valid attribute name. The examples below illustrate this +behavior:: + + >>> parser = argparse.ArgumentParser() + >>> parser.add_argument('-f', '--foo-bar', '--foo') + >>> parser.add_argument('-x', '-y') + >>> parser.parse_args('-f 1 -x 2'.split()) + Namespace(foo_bar='1', x='2') + >>> parser.parse_args('--foo 1 -y 2'.split()) + Namespace(foo_bar='1', x='2') + +If you would like to use a different attribute name from the one automatically +inferred by the ArgumentParser, you can supply it with an explicit ``dest`` +parameter:: + + >>> parser = argparse.ArgumentParser() + >>> parser.add_argument('--foo', dest='bar') + >>> parser.parse_args('--foo XXX'.split()) + Namespace(bar='XXX') + + +The parse_args() method +----------------------- + +.. method:: parse_args([args], [namespace]) + + Convert the strings to objects and assign them as attributes of the + namespace. Return the populated namespace. + + Previous calls to :meth:`add_argument` determine exactly what objects are + created and how they are assigned. See the documentation for + :meth:`add_argument` for details. + + By default, the arg strings are taken from ``sys.argv``, and a new empty + ``Namespace`` object is created for the attributes. + +Option value syntax +^^^^^^^^^^^^^^^^^^^ + +The :meth:`parse_args` method supports several ways of specifying the value of +an option (if it takes one). In the simplest case, the option and its value are +passed as two separate arguments:: + + >>> parser = argparse.ArgumentParser(prog='PROG') + >>> parser.add_argument('-x') + >>> parser.add_argument('--foo') + >>> parser.parse_args('-x X'.split()) + Namespace(foo=None, x='X') + >>> parser.parse_args('--foo FOO'.split()) + Namespace(foo='FOO', x=None) + +For long options (options with names longer than a single character), you may +also pass the option and value as a single command line argument, using ``=`` +to separate them:: + + >>> parser.parse_args('--foo=FOO'.split()) + Namespace(foo='FOO', x=None) + +For short options (options only one character long), you may simply concatenate +the option and its value:: + + >>> parser.parse_args('-xX'.split()) + Namespace(foo=None, x='X') + +You can also combine several short options together, using only a single ``-`` +prefix, as long as only the last option (or none of them) requires a value:: + + >>> parser = argparse.ArgumentParser(prog='PROG') + >>> parser.add_argument('-x', action='store_true') + >>> parser.add_argument('-y', action='store_true') + >>> parser.add_argument('-z') + >>> parser.parse_args('-xyzZ'.split()) + Namespace(x=True, y=True, z='Z') + + +Invalid arguments +^^^^^^^^^^^^^^^^^ + +While parsing the command-line, ``parse_args`` checks for a variety of errors, +including ambiguous options, invalid types, invalid options, wrong number of +positional arguments, etc. When it encounters such an error, it exits and +prints the error along with a usage message:: + + >>> parser = argparse.ArgumentParser(prog='PROG') + >>> parser.add_argument('--foo', type=int) + >>> parser.add_argument('bar', nargs='?') + + >>> # invalid type + >>> parser.parse_args(['--foo', 'spam']) + usage: PROG [-h] [--foo FOO] [bar] + PROG: error: argument --foo: invalid int value: 'spam' + + >>> # invalid option + >>> parser.parse_args(['--bar']) + usage: PROG [-h] [--foo FOO] [bar] + PROG: error: no such option: --bar + + >>> # wrong number of arguments + >>> parser.parse_args(['spam', 'badger']) + usage: PROG [-h] [--foo FOO] [bar] + PROG: error: extra arguments found: badger + + +Arguments containing ``"-"`` +^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +The ``parse_args`` method attempts to give errors whenever the user has clearly +made a mistake, but some situations are inherently ambiguous. For example, the +command-line arg ``'-1'`` could either be an attempt to specify an option or an +attempt to provide a positional argument. The ``parse_args`` method is cautious +here: positional arguments may only begin with ``'-'`` if they look like +negative numbers and there are no options in the parser that look like negative +numbers:: + + >>> parser = argparse.ArgumentParser(prog='PROG') + >>> parser.add_argument('-x') + >>> parser.add_argument('foo', nargs='?') + + >>> # no negative number options, so -1 is a positional argument + >>> parser.parse_args(['-x', '-1']) + Namespace(foo=None, x='-1') + + >>> # no negative number options, so -1 and -5 are positional arguments + >>> parser.parse_args(['-x', '-1', '-5']) + Namespace(foo='-5', x='-1') + + >>> parser = argparse.ArgumentParser(prog='PROG') + >>> parser.add_argument('-1', dest='one') + >>> parser.add_argument('foo', nargs='?') + + >>> # negative number options present, so -1 is an option + >>> parser.parse_args(['-1', 'X']) + Namespace(foo=None, one='X') + + >>> # negative number options present, so -2 is an option + >>> parser.parse_args(['-2']) + usage: PROG [-h] [-1 ONE] [foo] + PROG: error: no such option: -2 + + >>> # negative number options present, so both -1s are options + >>> parser.parse_args(['-1', '-1']) + usage: PROG [-h] [-1 ONE] [foo] + PROG: error: argument -1: expected one argument + +If you have positional arguments that must begin with ``'-'`` and don't look +like negative numbers, you can insert the pseudo-argument ``'--'`` which tells +``parse_args`` that everything after that is a positional argument:: + + >>> parser.parse_args(['--', '-f']) + Namespace(foo='-f', one=None) + + +Argument abbreviations +^^^^^^^^^^^^^^^^^^^^^^ + +The :meth:`parse_args` method allows you to abbreviate long options if the +abbreviation is unambiguous:: + + >>> parser = argparse.ArgumentParser(prog='PROG') + >>> parser.add_argument('-bacon') + >>> parser.add_argument('-badger') + >>> parser.parse_args('-bac MMM'.split()) + Namespace(bacon='MMM', badger=None) + >>> parser.parse_args('-bad WOOD'.split()) + Namespace(bacon=None, badger='WOOD') + >>> parser.parse_args('-ba BA'.split()) + usage: PROG [-h] [-bacon BACON] [-badger BADGER] + PROG: error: ambiguous option: -ba could match -badger, -bacon + +As you can see above, you will get an error if you pick a prefix that could +refer to more than one option. + + +Beyond ``sys.argv`` +^^^^^^^^^^^^^^^^^^^ + +Sometimes it may be useful to have an ArgumentParser parse args other than +those of ``sys.argv``. This can be accomplished by passing a list of strings +to ``parse_args``. You may have noticed that the examples in the argparse +documentation have made heavy use of this calling style - it is much easier +to use at the interactive prompt:: + + >>> parser = argparse.ArgumentParser() + >>> parser.add_argument( + ... 'integers', metavar='int', type=int, choices=xrange(10), + ... nargs='+', help='an integer in the range 0..9') + >>> parser.add_argument( + ... '--sum', dest='accumulate', action='store_const', const=sum, + ... default=max, help='sum the integers (default: find the max)') + >>> parser.parse_args(['1', '2', '3', '4']) + Namespace(accumulate=, integers=[1, 2, 3, 4]) + >>> parser.parse_args('1 2 3 4 --sum'.split()) + Namespace(accumulate=, integers=[1, 2, 3, 4]) + + +Custom namespaces +^^^^^^^^^^^^^^^^^ + +It may also be useful to have an ArgumentParser assign attributes to an already +existing object, rather than the newly-created Namespace object that is +normally used. This can be achieved by specifying the ``namespace=`` keyword +argument:: + + >>> class C(object): + ... pass + ... + >>> c = C() + >>> parser = argparse.ArgumentParser() + >>> parser.add_argument('--foo') + >>> parser.parse_args(args=['--foo', 'BAR'], namespace=c) + >>> c.foo + 'BAR' + + +Other utilities +--------------- + +Sub-commands +^^^^^^^^^^^^ + +.. method:: add_subparsers() + + A lot of programs split up their functionality into a number of + sub-commands, for example, the ``svn`` program can invoke sub-commands like + ``svn checkout``, ``svn update``, ``svn commit``, etc. Splitting up + functionality this way can be a particularly good idea when a program + performs several different functions which require different kinds of + command-line arguments. ArgumentParser objects support the creation of such + sub-commands with the :meth:`add_subparsers` method. The + :meth:`add_subparsers` method is normally called with no arguments and + returns an special action object. This object has a single method, + ``add_parser``, which takes a command name and any ArgumentParser + constructor arguments, and returns an ArgumentParser object that can be + modified as usual. + + Some example usage:: + + >>> # create the top-level parser + >>> parser = argparse.ArgumentParser(prog='PROG') + >>> parser.add_argument('--foo', action='store_true', help='foo help') + >>> subparsers = parser.add_subparsers(help='sub-command help') + >>> + >>> # create the parser for the "a" command + >>> parser_a = subparsers.add_parser('a', help='a help') + >>> parser_a.add_argument('bar', type=int, help='bar help') + >>> + >>> # create the parser for the "b" command + >>> parser_b = subparsers.add_parser('b', help='b help') + >>> parser_b.add_argument('--baz', choices='XYZ', help='baz help') + >>> + >>> # parse some arg lists + >>> parser.parse_args(['a', '12']) + Namespace(bar=12, foo=False) + >>> parser.parse_args(['--foo', 'b', '--baz', 'Z']) + Namespace(baz='Z', foo=True) + + Note that the object returned by :meth:`parse_args` will only contain + attributes for the main parser and the subparser that was selected by the + command line (and not any other subparsers). So in the example above, when + the ``"a"`` command is specified, only the ``foo`` and ``bar`` attributes + are present, and when the ``"b"`` command is specified, only the ``foo`` and + ``baz`` attributes are present. + + Similarly, when a help message is requested from a subparser, only the help + for that particular parser will be printed. The help message will not + include parent parser or sibling parser messages. (You can however supply a + help message for each subparser command by suppling the ``help=`` argument + to ``add_parser`` as above.) + + :: + + >>> parser.parse_args(['--help']) + usage: PROG [-h] [--foo] {a,b} ... + + positional arguments: + {a,b} sub-command help + a a help + b b help + + optional arguments: + -h, --help show this help message and exit + --foo foo help + + >>> parser.parse_args(['a', '--help']) + usage: PROG a [-h] bar + + positional arguments: + bar bar help + + optional arguments: + -h, --help show this help message and exit + + >>> parser.parse_args(['b', '--help']) + usage: PROG b [-h] [--baz {X,Y,Z}] + + optional arguments: + -h, --help show this help message and exit + --baz {X,Y,Z} baz help + + The :meth:`add_subparsers` method also supports ``title`` and + ``description`` keyword arguments. When either is present, the subparser's + commands will appear in their own group in the help output. For example:: + + >>> parser = argparse.ArgumentParser() + >>> subparsers = parser.add_subparsers(title='subcommands', + ... description='valid subcommands', + ... help='additional help') + >>> subparsers.add_parser('foo') + >>> subparsers.add_parser('bar') + >>> parser.parse_args(['-h']) + usage: [-h] {foo,bar} ... + + optional arguments: + -h, --help show this help message and exit + + subcommands: + valid subcommands + + {foo,bar} additional help + + + One particularly effective way of handling sub-commands is to combine the + use of the :meth:`add_subparsers` method with calls to :meth:`set_defaults` + so that each subparser knows which Python function it should execute. For + example:: + + >>> # sub-command functions + >>> def foo(args): + ... print args.x * args.y + ... + >>> def bar(args): + ... print '((%s))' % args.z + ... + >>> # create the top-level parser + >>> parser = argparse.ArgumentParser() + >>> subparsers = parser.add_subparsers() + >>> + >>> # create the parser for the "foo" command + >>> parser_foo = subparsers.add_parser('foo') + >>> parser_foo.add_argument('-x', type=int, default=1) + >>> parser_foo.add_argument('y', type=float) + >>> parser_foo.set_defaults(func=foo) + >>> + >>> # create the parser for the "bar" command + >>> parser_bar = subparsers.add_parser('bar') + >>> parser_bar.add_argument('z') + >>> parser_bar.set_defaults(func=bar) + >>> + >>> # parse the args and call whatever function was selected + >>> args = parser.parse_args('foo 1 -x 2'.split()) + >>> args.func(args) + 2.0 + >>> + >>> # parse the args and call whatever function was selected + >>> args = parser.parse_args('bar XYZYX'.split()) + >>> args.func(args) + ((XYZYX)) + + This way, you can let :meth:`parse_args` do all the work for you, and then + just call the appropriate function after the argument parsing is complete. + Associating functions with actions like this is typically the easiest way + to handle the different actions for each of your subparsers. However, if you + find it necessary to check the name of the subparser that was invoked, you + can always provide a ``dest`` keyword argument to the :meth:`add_subparsers` + call:: + + >>> parser = argparse.ArgumentParser() + >>> subparsers = parser.add_subparsers(dest='subparser_name') + >>> subparser1 = subparsers.add_parser('1') + >>> subparser1.add_argument('-x') + >>> subparser2 = subparsers.add_parser('2') + >>> subparser2.add_argument('y') + >>> parser.parse_args(['2', 'frobble']) + Namespace(subparser_name='2', y='frobble') + + +FileType objects +^^^^^^^^^^^^^^^^ + +.. class:: FileType(mode='r', bufsize=None) + + The :class:`FileType` factory creates objects that can be passed to the type + argument of :meth:`add_argument`. Arguments that have :class:`FileType` + objects as their type will open command-line args as files with the + requested modes and buffer sizes: + + >>> parser = argparse.ArgumentParser() + >>> parser.add_argument('--output', type=argparse.FileType('wb', 0)) + >>> parser.parse_args(['--output', 'out']) + Namespace(output=) + + FileType objects understand the pseudo-argument ``'-'`` and automatically + convert this into ``sys.stdin`` for readable :class:`FileType` objects and + ``sys.stdout`` for writable :class:`FileType` objects: + + >>> parser = argparse.ArgumentParser() + >>> parser.add_argument('infile', type=argparse.FileType('r')) + >>> parser.parse_args(['-']) + Namespace(infile=', mode 'r' at 0x...>) + + +Argument groups +^^^^^^^^^^^^^^^ + +.. method:: add_argument_group([title], [description]) + + By default, ArgumentParser objects group command-line arguments into + "positional arguments" and "optional arguments" when displaying help + messages. When there is a better conceptual grouping of arguments than this + default one, appropriate groups can be created using the + :meth:`add_argument_group` method:: + + >>> parser = argparse.ArgumentParser(prog='PROG', add_help=False) + >>> group = parser.add_argument_group('group') + >>> group.add_argument('--foo', help='foo help') + >>> group.add_argument('bar', help='bar help') + >>> parser.print_help() + usage: PROG [--foo FOO] bar + + group: + bar bar help + --foo FOO foo help + + The :meth:`add_argument_group` method returns an argument group object which + has an :meth:`add_argument` method just like a regular ArgumentParser + objects. When an argument is added to the group, the parser treats it just + like a normal argument, but displays the argument in a separate group for + help messages. The :meth:`add_argument_group` method accepts ``title`` and + ``description`` arguments which can be used to customize this display:: + + >>> parser = argparse.ArgumentParser(prog='PROG', add_help=False) + >>> group1 = parser.add_argument_group('group1', 'group1 description') + >>> group1.add_argument('foo', help='foo help') + >>> group2 = parser.add_argument_group('group2', 'group2 description') + >>> group2.add_argument('--bar', help='bar help') + >>> parser.print_help() + usage: PROG [--bar BAR] foo + + group1: + group1 description + + foo foo help + + group2: + group2 description + + --bar BAR bar help + + Note that any arguments not in your user defined groups will end up back in + the usual "positional arguments" and "optional arguments" sections. + + +Mutual exclusion +^^^^^^^^^^^^^^^^ + +.. method:: add_mutually_exclusive_group([required=False]) + + Sometimes, you need to make sure that only one of a couple different options + is specified on the command line. You can create groups of such mutually + exclusive arguments using the :meth:`add_mutually_exclusive_group` method. + When :func:`parse_args` is called, argparse will make sure that only one of + the arguments in the mutually exclusive group was present on the command + line:: + + >>> parser = argparse.ArgumentParser(prog='PROG') + >>> group = parser.add_mutually_exclusive_group() + >>> group.add_argument('--foo', action='store_true') + >>> group.add_argument('--bar', action='store_false') + >>> parser.parse_args(['--foo']) + Namespace(bar=True, foo=True) + >>> parser.parse_args(['--bar']) + Namespace(bar=False, foo=False) + >>> parser.parse_args(['--foo', '--bar']) + usage: PROG [-h] [--foo | --bar] + PROG: error: argument --bar: not allowed with argument --foo + + The :meth:`add_mutually_exclusive_group` method also accepts a ``required`` + argument, to indicate that at least one of the mutually exclusive arguments + is required:: + + >>> parser = argparse.ArgumentParser(prog='PROG') + >>> group = parser.add_mutually_exclusive_group(required=True) + >>> group.add_argument('--foo', action='store_true') + >>> group.add_argument('--bar', action='store_false') + >>> parser.parse_args([]) + usage: PROG [-h] (--foo | --bar) + PROG: error: one of the arguments --foo --bar is required + + Note that currently mutually exclusive argument groups do not support the + ``title`` and ``description`` arguments of :meth:`add_argument_group`. This + may change in the future however, so you are *strongly* recommended to + specify ``required`` as a keyword argument if you use it. + + +Parser defaults +^^^^^^^^^^^^^^^ + +.. method:: set_defaults(**kwargs) + + Most of the time, the attributes of the object returned by + :meth:`parse_args` will be fully determined by inspecting the command-line + args and the argument actions described in your :meth:`add_argument` calls. + However, sometimes it may be useful to add some additional attributes that + are determined without any inspection of the command-line. The + :meth:`set_defaults` method allows you to do this:: + + >>> parser = argparse.ArgumentParser() + >>> parser.add_argument('foo', type=int) + >>> parser.set_defaults(bar=42, baz='badger') + >>> parser.parse_args(['736']) + Namespace(bar=42, baz='badger', foo=736) + + Note that parser-level defaults always override argument-level defaults. So + if you set a parser-level default for a name that matches an argument, the + old argument default will no longer be used:: + + >>> parser = argparse.ArgumentParser() + >>> parser.add_argument('--foo', default='bar') + >>> parser.set_defaults(foo='spam') + >>> parser.parse_args([]) + Namespace(foo='spam') + + Parser-level defaults can be particularly useful when you're working with + multiple parsers. See the :meth:`add_subparsers` method for an example of + this type. + +.. method:: get_default(dest) + + Get the default value for a namespace attribute, as set by either + :meth:`add_argument` or by :meth:`set_defaults`:: + + >>> parser = argparse.ArgumentParser() + >>> parser.add_argument('--foo', default='badger') + >>> parser.get_default('foo') + 'badger' + + +Printing help +^^^^^^^^^^^^^ + +In most typical applications, :meth:`parse_args` will take care of formatting +and printing any usage or error messages. However, should you want to format or +print these on your own, several methods are available: + +.. method:: print_usage([file]): + + Print a brief description of how the :class:`ArgumentParser` should be + invoked on the command line. If ``file`` is not present, ``sys.stderr`` is + assumed. + +.. method:: print_help([file]): + + Print a help message, including the program usage and information about the + arguments registered with the :class:`ArgumentParser`. If ``file`` is not + present, ``sys.stderr`` is assumed. + +There are also variants of these methods that simply return a string instead of +printing it: + +.. method:: format_usage(): + + Return a string containing a brief description of how the + :class:`ArgumentParser` should be invoked on the command line. + +.. method:: format_help(): + + Return a string containing a help message, including the program usage and + information about the arguments registered with the :class:`ArgumentParser`. + + + +Partial parsing +^^^^^^^^^^^^^^^ + +.. method:: parse_known_args([args], [namespace]) + +Sometimes a script may only parse a few of the command line arguments, passing +the remaining arguments on to another script or program. In these cases, the +:meth:`parse_known_args` method can be useful. It works much like +:meth:`parse_args` except that it does not produce an error when extra +arguments are present. Instead, it returns a two item tuple containing the +populated namespace and the list of remaining argument strings. + +:: + + >>> parser = argparse.ArgumentParser() + >>> parser.add_argument('--foo', action='store_true') + >>> parser.add_argument('bar') + >>> parser.parse_known_args(['--foo', '--badger', 'BAR', 'spam']) + (Namespace(bar='BAR', foo=True), ['--badger', 'spam']) + + +Customizing file parsing +^^^^^^^^^^^^^^^^^^^^^^^^ + +.. method:: convert_arg_line_to_args(arg_line) + + Arguments that are read from a file (see the ``fromfile_prefix_chars`` + keyword argument to the :class:`ArgumentParser` constructor) are read one + argument per line. If you need fancier parsing, then you can subclass the + :class:`ArgumentParser` and override the :meth:`convert_arg_line_to_args` + method. + + This method takes a single argument ``arg_line`` which is a string read from + the argument file. It returns a list of arguments parsed from this string. + The method is called once per line read from the argument file, in order. + + A useful override of this method is one that treats each space-separated + word as an argument:: + + def convert_arg_line_to_args(self, arg_line): + for arg in arg_line.split(): + if not arg.strip(): + continue + yield arg + + +Upgrading optparse code +----------------------- + +Originally, the argparse module had attempted to maintain compatibility with + optparse. However, optparse was difficult to extend transparently, + particularly with the changes required to support the new ``nargs=`` + specifiers and better usage messges. When most everything in optparse had + either been copy-pasted over or monkey-patched, it no longer seemed practical + to try to maintain the backwards compatibility. + +A partial upgrade path from optparse to argparse: + +* Replace all ``add_option()`` calls with :meth:`add_argument` calls. + +* Replace ``options, args = parser.parse_args()`` with + ``args = parser.parse_args()`` and add additional :meth:`add_argument` calls + for the positional arguments. + +* Replace callback actions and the ``callback_*`` keyword arguments with + ``type`` or ``action`` arguments. + +* Replace string names for ``type`` keyword arguments with the corresponding + type objects (e.g. int, float, complex, etc). + +* Replace ``Values`` with ``Namespace`` and ``OptionError/OptionValueError`` + with ``ArgumentError``. + +* Replace strings with implicit arguments such as ``%default`` or ``%prog`` + with the standard python syntax to use dictionaries to format strings, that + is, ``%(default)s`` and ``%(prog)s``. Modified: python/trunk/Lib/argparse.py ============================================================================== --- python/trunk/Lib/argparse.py (original) +++ python/trunk/Lib/argparse.py Tue Mar 2 23:05:59 2010 @@ -1,2351 +1,2351 @@ -# Copyright 2006-2009 Steven J. Bethard . -# -# Licensed under the Apache License, Version 2.0 (the "License"); you may not -# use this file except in compliance with the License. You may obtain a copy -# of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT -# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the -# License for the specific language governing permissions and limitations -# under the License. - -"""Command-line parsing library - -This module is an optparse-inspired command-line parsing library that: - - - handles both optional and positional arguments - - produces highly informative usage messages - - supports parsers that dispatch to sub-parsers - -The following is a simple usage example that sums integers from the -command-line and writes the result to a file:: - - parser = argparse.ArgumentParser( - description='sum the integers at the command line') - parser.add_argument( - 'integers', metavar='int', nargs='+', type=int, - help='an integer to be summed') - parser.add_argument( - '--log', default=sys.stdout, type=argparse.FileType('w'), - help='the file where the sum should be written') - args = parser.parse_args() - args.log.write('%s' % sum(args.integers)) - args.log.close() - -The module contains the following public classes: - - - ArgumentParser -- The main entry point for command-line parsing. As the - example above shows, the add_argument() method is used to populate - the parser with actions for optional and positional arguments. Then - the parse_args() method is invoked to convert the args at the - command-line into an object with attributes. - - - ArgumentError -- The exception raised by ArgumentParser objects when - there are errors with the parser's actions. Errors raised while - parsing the command-line are caught by ArgumentParser and emitted - as command-line messages. - - - FileType -- A factory for defining types of files to be created. As the - example above shows, instances of FileType are typically passed as - the type= argument of add_argument() calls. - - - Action -- The base class for parser actions. Typically actions are - selected by passing strings like 'store_true' or 'append_const' to - the action= argument of add_argument(). However, for greater - customization of ArgumentParser actions, subclasses of Action may - be defined and passed as the action= argument. - - - HelpFormatter, RawDescriptionHelpFormatter, RawTextHelpFormatter, - ArgumentDefaultsHelpFormatter -- Formatter classes which - may be passed as the formatter_class= argument to the - ArgumentParser constructor. HelpFormatter is the default, - RawDescriptionHelpFormatter and RawTextHelpFormatter tell the parser - not to change the formatting for help text, and - ArgumentDefaultsHelpFormatter adds information about argument defaults - to the help. - -All other classes in this module are considered implementation details. -(Also note that HelpFormatter and RawDescriptionHelpFormatter are only -considered public as object names -- the API of the formatter objects is -still considered an implementation detail.) -""" - -__version__ = '1.1' -__all__ = [ - 'ArgumentParser', - 'ArgumentError', - 'Namespace', - 'Action', - 'FileType', - 'HelpFormatter', - 'RawDescriptionHelpFormatter', - 'RawTextHelpFormatter', - 'ArgumentDefaultsHelpFormatter', -] - - -import copy as _copy -import os as _os -import re as _re -import sys as _sys -import textwrap as _textwrap - -from gettext import gettext as _ - -try: - _set = set -except NameError: - from sets import Set as _set - -try: - _basestring = basestring -except NameError: - _basestring = str - -try: - _sorted = sorted -except NameError: - - def _sorted(iterable, reverse=False): - result = list(iterable) - result.sort() - if reverse: - result.reverse() - return result - - -def _callable(obj): - return hasattr(obj, '__call__') or hasattr(obj, '__bases__') - -# silence Python 2.6 buggy warnings about Exception.message -if _sys.version_info[:2] == (2, 6): - import warnings - warnings.filterwarnings( - action='ignore', - message='BaseException.message has been deprecated as of Python 2.6', - category=DeprecationWarning, - module='argparse') - - -SUPPRESS = '==SUPPRESS==' - -OPTIONAL = '?' -ZERO_OR_MORE = '*' -ONE_OR_MORE = '+' -PARSER = 'A...' -REMAINDER = '...' - -# ============================= -# Utility functions and classes -# ============================= - -class _AttributeHolder(object): - """Abstract base class that provides __repr__. - - The __repr__ method returns a string in the format:: - ClassName(attr=name, attr=name, ...) - The attributes are determined either by a class-level attribute, - '_kwarg_names', or by inspecting the instance __dict__. - """ - - def __repr__(self): - type_name = type(self).__name__ - arg_strings = [] - for arg in self._get_args(): - arg_strings.append(repr(arg)) - for name, value in self._get_kwargs(): - arg_strings.append('%s=%r' % (name, value)) - return '%s(%s)' % (type_name, ', '.join(arg_strings)) - - def _get_kwargs(self): - return _sorted(self.__dict__.items()) - - def _get_args(self): - return [] - - -def _ensure_value(namespace, name, value): - if getattr(namespace, name, None) is None: - setattr(namespace, name, value) - return getattr(namespace, name) - - -# =============== -# Formatting Help -# =============== - -class HelpFormatter(object): - """Formatter for generating usage messages and argument help strings. - - Only the name of this class is considered a public API. All the methods - provided by the class are considered an implementation detail. - """ - - def __init__(self, - prog, - indent_increment=2, - max_help_position=24, - width=None): - - # default setting for width - if width is None: - try: - width = int(_os.environ['COLUMNS']) - except (KeyError, ValueError): - width = 80 - width -= 2 - - self._prog = prog - self._indent_increment = indent_increment - self._max_help_position = max_help_position - self._width = width - - self._current_indent = 0 - self._level = 0 - self._action_max_length = 0 - - self._root_section = self._Section(self, None) - self._current_section = self._root_section - - self._whitespace_matcher = _re.compile(r'\s+') - self._long_break_matcher = _re.compile(r'\n\n\n+') - - # =============================== - # Section and indentation methods - # =============================== - def _indent(self): - self._current_indent += self._indent_increment - self._level += 1 - - def _dedent(self): - self._current_indent -= self._indent_increment - assert self._current_indent >= 0, 'Indent decreased below 0.' - self._level -= 1 - - class _Section(object): - - def __init__(self, formatter, parent, heading=None): - self.formatter = formatter - self.parent = parent - self.heading = heading - self.items = [] - - def format_help(self): - # format the indented section - if self.parent is not None: - self.formatter._indent() - join = self.formatter._join_parts - for func, args in self.items: - func(*args) - item_help = join([func(*args) for func, args in self.items]) - if self.parent is not None: - self.formatter._dedent() - - # return nothing if the section was empty - if not item_help: - return '' - - # add the heading if the section was non-empty - if self.heading is not SUPPRESS and self.heading is not None: - current_indent = self.formatter._current_indent - heading = '%*s%s:\n' % (current_indent, '', self.heading) - else: - heading = '' - - # join the section-initial newline, the heading and the help - return join(['\n', heading, item_help, '\n']) - - def _add_item(self, func, args): - self._current_section.items.append((func, args)) - - # ======================== - # Message building methods - # ======================== - def start_section(self, heading): - self._indent() - section = self._Section(self, self._current_section, heading) - self._add_item(section.format_help, []) - self._current_section = section - - def end_section(self): - self._current_section = self._current_section.parent - self._dedent() - - def add_text(self, text): - if text is not SUPPRESS and text is not None: - self._add_item(self._format_text, [text]) - - def add_usage(self, usage, actions, groups, prefix=None): - if usage is not SUPPRESS: - args = usage, actions, groups, prefix - self._add_item(self._format_usage, args) - - def add_argument(self, action): - if action.help is not SUPPRESS: - - # find all invocations - get_invocation = self._format_action_invocation - invocations = [get_invocation(action)] - for subaction in self._iter_indented_subactions(action): - invocations.append(get_invocation(subaction)) - - # update the maximum item length - invocation_length = max([len(s) for s in invocations]) - action_length = invocation_length + self._current_indent - self._action_max_length = max(self._action_max_length, - action_length) - - # add the item to the list - self._add_item(self._format_action, [action]) - - def add_arguments(self, actions): - for action in actions: - self.add_argument(action) - - # ======================= - # Help-formatting methods - # ======================= - def format_help(self): - help = self._root_section.format_help() - if help: - help = self._long_break_matcher.sub('\n\n', help) - help = help.strip('\n') + '\n' - return help - - def _join_parts(self, part_strings): - return ''.join([part - for part in part_strings - if part and part is not SUPPRESS]) - - def _format_usage(self, usage, actions, groups, prefix): - if prefix is None: - prefix = _('usage: ') - - # if usage is specified, use that - if usage is not None: - usage = usage % dict(prog=self._prog) - - # if no optionals or positionals are available, usage is just prog - elif usage is None and not actions: - usage = '%(prog)s' % dict(prog=self._prog) - - # if optionals and positionals are available, calculate usage - elif usage is None: - prog = '%(prog)s' % dict(prog=self._prog) - - # split optionals from positionals - optionals = [] - positionals = [] - for action in actions: - if action.option_strings: - optionals.append(action) - else: - positionals.append(action) - - # build full usage string - format = self._format_actions_usage - action_usage = format(optionals + positionals, groups) - usage = ' '.join([s for s in [prog, action_usage] if s]) - - # wrap the usage parts if it's too long - text_width = self._width - self._current_indent - if len(prefix) + len(usage) > text_width: - - # break usage into wrappable parts - part_regexp = r'\(.*?\)+|\[.*?\]+|\S+' - opt_usage = format(optionals, groups) - pos_usage = format(positionals, groups) - opt_parts = _re.findall(part_regexp, opt_usage) - pos_parts = _re.findall(part_regexp, pos_usage) - assert ' '.join(opt_parts) == opt_usage - assert ' '.join(pos_parts) == pos_usage - - # helper for wrapping lines - def get_lines(parts, indent, prefix=None): - lines = [] - line = [] - if prefix is not None: - line_len = len(prefix) - 1 - else: - line_len = len(indent) - 1 - for part in parts: - if line_len + 1 + len(part) > text_width: - lines.append(indent + ' '.join(line)) - line = [] - line_len = len(indent) - 1 - line.append(part) - line_len += len(part) + 1 - if line: - lines.append(indent + ' '.join(line)) - if prefix is not None: - lines[0] = lines[0][len(indent):] - return lines - - # if prog is short, follow it with optionals or positionals - if len(prefix) + len(prog) <= 0.75 * text_width: - indent = ' ' * (len(prefix) + len(prog) + 1) - if opt_parts: - lines = get_lines([prog] + opt_parts, indent, prefix) - lines.extend(get_lines(pos_parts, indent)) - elif pos_parts: - lines = get_lines([prog] + pos_parts, indent, prefix) - else: - lines = [prog] - - # if prog is long, put it on its own line - else: - indent = ' ' * len(prefix) - parts = opt_parts + pos_parts - lines = get_lines(parts, indent) - if len(lines) > 1: - lines = [] - lines.extend(get_lines(opt_parts, indent)) - lines.extend(get_lines(pos_parts, indent)) - lines = [prog] + lines - - # join lines into usage - usage = '\n'.join(lines) - - # prefix with 'usage:' - return '%s%s\n\n' % (prefix, usage) - - def _format_actions_usage(self, actions, groups): - # find group indices and identify actions in groups - group_actions = _set() - inserts = {} - for group in groups: - try: - start = actions.index(group._group_actions[0]) - except ValueError: - continue - else: - end = start + len(group._group_actions) - if actions[start:end] == group._group_actions: - for action in group._group_actions: - group_actions.add(action) - if not group.required: - inserts[start] = '[' - inserts[end] = ']' - else: - inserts[start] = '(' - inserts[end] = ')' - for i in range(start + 1, end): - inserts[i] = '|' - - # collect all actions format strings - parts = [] - for i, action in enumerate(actions): - - # suppressed arguments are marked with None - # remove | separators for suppressed arguments - if action.help is SUPPRESS: - parts.append(None) - if inserts.get(i) == '|': - inserts.pop(i) - elif inserts.get(i + 1) == '|': - inserts.pop(i + 1) - - # produce all arg strings - elif not action.option_strings: - part = self._format_args(action, action.dest) - - # if it's in a group, strip the outer [] - if action in group_actions: - if part[0] == '[' and part[-1] == ']': - part = part[1:-1] - - # add the action string to the list - parts.append(part) - - # produce the first way to invoke the option in brackets - else: - option_string = action.option_strings[0] - - # if the Optional doesn't take a value, format is: - # -s or --long - if action.nargs == 0: - part = '%s' % option_string - - # if the Optional takes a value, format is: - # -s ARGS or --long ARGS - else: - default = action.dest.upper() - args_string = self._format_args(action, default) - part = '%s %s' % (option_string, args_string) - - # make it look optional if it's not required or in a group - if not action.required and action not in group_actions: - part = '[%s]' % part - - # add the action string to the list - parts.append(part) - - # insert things at the necessary indices - for i in _sorted(inserts, reverse=True): - parts[i:i] = [inserts[i]] - - # join all the action items with spaces - text = ' '.join([item for item in parts if item is not None]) - - # clean up separators for mutually exclusive groups - open = r'[\[(]' - close = r'[\])]' - text = _re.sub(r'(%s) ' % open, r'\1', text) - text = _re.sub(r' (%s)' % close, r'\1', text) - text = _re.sub(r'%s *%s' % (open, close), r'', text) - text = _re.sub(r'\(([^|]*)\)', r'\1', text) - text = text.strip() - - # return the text - return text - - def _format_text(self, text): - if '%(prog)' in text: - text = text % dict(prog=self._prog) - text_width = self._width - self._current_indent - indent = ' ' * self._current_indent - return self._fill_text(text, text_width, indent) + '\n\n' - - def _format_action(self, action): - # determine the required width and the entry label - help_position = min(self._action_max_length + 2, - self._max_help_position) - help_width = self._width - help_position - action_width = help_position - self._current_indent - 2 - action_header = self._format_action_invocation(action) - - # ho nelp; start on same line and add a final newline - if not action.help: - tup = self._current_indent, '', action_header - action_header = '%*s%s\n' % tup - - # short action name; start on the same line and pad two spaces - elif len(action_header) <= action_width: - tup = self._current_indent, '', action_width, action_header - action_header = '%*s%-*s ' % tup - indent_first = 0 - - # long action name; start on the next line - else: - tup = self._current_indent, '', action_header - action_header = '%*s%s\n' % tup - indent_first = help_position - - # collect the pieces of the action help - parts = [action_header] - - # if there was help for the action, add lines of help text - if action.help: - help_text = self._expand_help(action) - help_lines = self._split_lines(help_text, help_width) - parts.append('%*s%s\n' % (indent_first, '', help_lines[0])) - for line in help_lines[1:]: - parts.append('%*s%s\n' % (help_position, '', line)) - - # or add a newline if the description doesn't end with one - elif not action_header.endswith('\n'): - parts.append('\n') - - # if there are any sub-actions, add their help as well - for subaction in self._iter_indented_subactions(action): - parts.append(self._format_action(subaction)) - - # return a single string - return self._join_parts(parts) - - def _format_action_invocation(self, action): - if not action.option_strings: - metavar, = self._metavar_formatter(action, action.dest)(1) - return metavar - - else: - parts = [] - - # if the Optional doesn't take a value, format is: - # -s, --long - if action.nargs == 0: - parts.extend(action.option_strings) - - # if the Optional takes a value, format is: - # -s ARGS, --long ARGS - else: - default = action.dest.upper() - args_string = self._format_args(action, default) - for option_string in action.option_strings: - parts.append('%s %s' % (option_string, args_string)) - - return ', '.join(parts) - - def _metavar_formatter(self, action, default_metavar): - if action.metavar is not None: - result = action.metavar - elif action.choices is not None: - choice_strs = [str(choice) for choice in action.choices] - result = '{%s}' % ','.join(choice_strs) - else: - result = default_metavar - - def format(tuple_size): - if isinstance(result, tuple): - return result - else: - return (result, ) * tuple_size - return format - - def _format_args(self, action, default_metavar): - get_metavar = self._metavar_formatter(action, default_metavar) - if action.nargs is None: - result = '%s' % get_metavar(1) - elif action.nargs == OPTIONAL: - result = '[%s]' % get_metavar(1) - elif action.nargs == ZERO_OR_MORE: - result = '[%s [%s ...]]' % get_metavar(2) - elif action.nargs == ONE_OR_MORE: - result = '%s [%s ...]' % get_metavar(2) - elif action.nargs == REMAINDER: - result = '...' - elif action.nargs == PARSER: - result = '%s ...' % get_metavar(1) - else: - formats = ['%s' for _ in range(action.nargs)] - result = ' '.join(formats) % get_metavar(action.nargs) - return result - - def _expand_help(self, action): - params = dict(vars(action), prog=self._prog) - for name in list(params): - if params[name] is SUPPRESS: - del params[name] - for name in list(params): - if hasattr(params[name], '__name__'): - params[name] = params[name].__name__ - if params.get('choices') is not None: - choices_str = ', '.join([str(c) for c in params['choices']]) - params['choices'] = choices_str - return self._get_help_string(action) % params - - def _iter_indented_subactions(self, action): - try: - get_subactions = action._get_subactions - except AttributeError: - pass - else: - self._indent() - for subaction in get_subactions(): - yield subaction - self._dedent() - - def _split_lines(self, text, width): - text = self._whitespace_matcher.sub(' ', text).strip() - return _textwrap.wrap(text, width) - - def _fill_text(self, text, width, indent): - text = self._whitespace_matcher.sub(' ', text).strip() - return _textwrap.fill(text, width, initial_indent=indent, - subsequent_indent=indent) - - def _get_help_string(self, action): - return action.help - - -class RawDescriptionHelpFormatter(HelpFormatter): - """Help message formatter which retains any formatting in descriptions. - - Only the name of this class is considered a public API. All the methods - provided by the class are considered an implementation detail. - """ - - def _fill_text(self, text, width, indent): - return ''.join([indent + line for line in text.splitlines(True)]) - - -class RawTextHelpFormatter(RawDescriptionHelpFormatter): - """Help message formatter which retains formatting of all help text. - - Only the name of this class is considered a public API. All the methods - provided by the class are considered an implementation detail. - """ - - def _split_lines(self, text, width): - return text.splitlines() - - -class ArgumentDefaultsHelpFormatter(HelpFormatter): - """Help message formatter which adds default values to argument help. - - Only the name of this class is considered a public API. All the methods - provided by the class are considered an implementation detail. - """ - - def _get_help_string(self, action): - help = action.help - if '%(default)' not in action.help: - if action.default is not SUPPRESS: - defaulting_nargs = [OPTIONAL, ZERO_OR_MORE] - if action.option_strings or action.nargs in defaulting_nargs: - help += ' (default: %(default)s)' - return help - - -# ===================== -# Options and Arguments -# ===================== - -def _get_action_name(argument): - if argument is None: - return None - elif argument.option_strings: - return '/'.join(argument.option_strings) - elif argument.metavar not in (None, SUPPRESS): - return argument.metavar - elif argument.dest not in (None, SUPPRESS): - return argument.dest - else: - return None - - -class ArgumentError(Exception): - """An error from creating or using an argument (optional or positional). - - The string value of this exception is the message, augmented with - information about the argument that caused it. - """ - - def __init__(self, argument, message): - self.argument_name = _get_action_name(argument) - self.message = message - - def __str__(self): - if self.argument_name is None: - format = '%(message)s' - else: - format = 'argument %(argument_name)s: %(message)s' - return format % dict(message=self.message, - argument_name=self.argument_name) - - -class ArgumentTypeError(Exception): - """An error from trying to convert a command line string to a type.""" - pass - - -# ============== -# Action classes -# ============== - -class Action(_AttributeHolder): - """Information about how to convert command line strings to Python objects. - - Action objects are used by an ArgumentParser to represent the information - needed to parse a single argument from one or more strings from the - command line. The keyword arguments to the Action constructor are also - all attributes of Action instances. - - Keyword Arguments: - - - option_strings -- A list of command-line option strings which - should be associated with this action. - - - dest -- The name of the attribute to hold the created object(s) - - - nargs -- The number of command-line arguments that should be - consumed. By default, one argument will be consumed and a single - value will be produced. Other values include: - - N (an integer) consumes N arguments (and produces a list) - - '?' consumes zero or one arguments - - '*' consumes zero or more arguments (and produces a list) - - '+' consumes one or more arguments (and produces a list) - Note that the difference between the default and nargs=1 is that - with the default, a single value will be produced, while with - nargs=1, a list containing a single value will be produced. - - - const -- The value to be produced if the option is specified and the - option uses an action that takes no values. - - - default -- The value to be produced if the option is not specified. - - - type -- The type which the command-line arguments should be converted - to, should be one of 'string', 'int', 'float', 'complex' or a - callable object that accepts a single string argument. If None, - 'string' is assumed. - - - choices -- A container of values that should be allowed. If not None, - after a command-line argument has been converted to the appropriate - type, an exception will be raised if it is not a member of this - collection. - - - required -- True if the action must always be specified at the - command line. This is only meaningful for optional command-line - arguments. - - - help -- The help string describing the argument. - - - metavar -- The name to be used for the option's argument with the - help string. If None, the 'dest' value will be used as the name. - """ - - def __init__(self, - option_strings, - dest, - nargs=None, - const=None, - default=None, - type=None, - choices=None, - required=False, - help=None, - metavar=None): - self.option_strings = option_strings - self.dest = dest - self.nargs = nargs - self.const = const - self.default = default - self.type = type - self.choices = choices - self.required = required - self.help = help - self.metavar = metavar - - def _get_kwargs(self): - names = [ - 'option_strings', - 'dest', - 'nargs', - 'const', - 'default', - 'type', - 'choices', - 'help', - 'metavar', - ] - return [(name, getattr(self, name)) for name in names] - - def __call__(self, parser, namespace, values, option_string=None): - raise NotImplementedError(_('.__call__() not defined')) - - -class _StoreAction(Action): - - def __init__(self, - option_strings, - dest, - nargs=None, - const=None, - default=None, - type=None, - choices=None, - required=False, - help=None, - metavar=None): - if nargs == 0: - raise ValueError('nargs for store actions must be > 0; if you ' - 'have nothing to store, actions such as store ' - 'true or store const may be more appropriate') - if const is not None and nargs != OPTIONAL: - raise ValueError('nargs must be %r to supply const' % OPTIONAL) - super(_StoreAction, self).__init__( - option_strings=option_strings, - dest=dest, - nargs=nargs, - const=const, - default=default, - type=type, - choices=choices, - required=required, - help=help, - metavar=metavar) - - def __call__(self, parser, namespace, values, option_string=None): - setattr(namespace, self.dest, values) - - -class _StoreConstAction(Action): - - def __init__(self, - option_strings, - dest, - const, - default=None, - required=False, - help=None, - metavar=None): - super(_StoreConstAction, self).__init__( - option_strings=option_strings, - dest=dest, - nargs=0, - const=const, - default=default, - required=required, - help=help) - - def __call__(self, parser, namespace, values, option_string=None): - setattr(namespace, self.dest, self.const) - - -class _StoreTrueAction(_StoreConstAction): - - def __init__(self, - option_strings, - dest, - default=False, - required=False, - help=None): - super(_StoreTrueAction, self).__init__( - option_strings=option_strings, - dest=dest, - const=True, - default=default, - required=required, - help=help) - - -class _StoreFalseAction(_StoreConstAction): - - def __init__(self, - option_strings, - dest, - default=True, - required=False, - help=None): - super(_StoreFalseAction, self).__init__( - option_strings=option_strings, - dest=dest, - const=False, - default=default, - required=required, - help=help) - - -class _AppendAction(Action): - - def __init__(self, - option_strings, - dest, - nargs=None, - const=None, - default=None, - type=None, - choices=None, - required=False, - help=None, - metavar=None): - if nargs == 0: - raise ValueError('nargs for append actions must be > 0; if arg ' - 'strings are not supplying the value to append, ' - 'the append const action may be more appropriate') - if const is not None and nargs != OPTIONAL: - raise ValueError('nargs must be %r to supply const' % OPTIONAL) - super(_AppendAction, self).__init__( - option_strings=option_strings, - dest=dest, - nargs=nargs, - const=const, - default=default, - type=type, - choices=choices, - required=required, - help=help, - metavar=metavar) - - def __call__(self, parser, namespace, values, option_string=None): - items = _copy.copy(_ensure_value(namespace, self.dest, [])) - items.append(values) - setattr(namespace, self.dest, items) - - -class _AppendConstAction(Action): - - def __init__(self, - option_strings, - dest, - const, - default=None, - required=False, - help=None, - metavar=None): - super(_AppendConstAction, self).__init__( - option_strings=option_strings, - dest=dest, - nargs=0, - const=const, - default=default, - required=required, - help=help, - metavar=metavar) - - def __call__(self, parser, namespace, values, option_string=None): - items = _copy.copy(_ensure_value(namespace, self.dest, [])) - items.append(self.const) - setattr(namespace, self.dest, items) - - -class _CountAction(Action): - - def __init__(self, - option_strings, - dest, - default=None, - required=False, - help=None): - super(_CountAction, self).__init__( - option_strings=option_strings, - dest=dest, - nargs=0, - default=default, - required=required, - help=help) - - def __call__(self, parser, namespace, values, option_string=None): - new_count = _ensure_value(namespace, self.dest, 0) + 1 - setattr(namespace, self.dest, new_count) - - -class _HelpAction(Action): - - def __init__(self, - option_strings, - dest=SUPPRESS, - default=SUPPRESS, - help=None): - super(_HelpAction, self).__init__( - option_strings=option_strings, - dest=dest, - default=default, - nargs=0, - help=help) - - def __call__(self, parser, namespace, values, option_string=None): - parser.print_help() - parser.exit() - - -class _VersionAction(Action): - - def __init__(self, - option_strings, - version=None, - dest=SUPPRESS, - default=SUPPRESS, - help=None): - super(_VersionAction, self).__init__( - option_strings=option_strings, - dest=dest, - default=default, - nargs=0, - help=help) - self.version = version - - def __call__(self, parser, namespace, values, option_string=None): - version = self.version - if version is None: - version = parser.version - formatter = parser._get_formatter() - formatter.add_text(version) - parser.exit(message=formatter.format_help()) - - -class _SubParsersAction(Action): - - class _ChoicesPseudoAction(Action): - - def __init__(self, name, help): - sup = super(_SubParsersAction._ChoicesPseudoAction, self) - sup.__init__(option_strings=[], dest=name, help=help) - - def __init__(self, - option_strings, - prog, - parser_class, - dest=SUPPRESS, - help=None, - metavar=None): - - self._prog_prefix = prog - self._parser_class = parser_class - self._name_parser_map = {} - self._choices_actions = [] - - super(_SubParsersAction, self).__init__( - option_strings=option_strings, - dest=dest, - nargs=PARSER, - choices=self._name_parser_map, - help=help, - metavar=metavar) - - def add_parser(self, name, **kwargs): - # set prog from the existing prefix - if kwargs.get('prog') is None: - kwargs['prog'] = '%s %s' % (self._prog_prefix, name) - - # create a pseudo-action to hold the choice help - if 'help' in kwargs: - help = kwargs.pop('help') - choice_action = self._ChoicesPseudoAction(name, help) - self._choices_actions.append(choice_action) - - # create the parser and add it to the map - parser = self._parser_class(**kwargs) - self._name_parser_map[name] = parser - return parser - - def _get_subactions(self): - return self._choices_actions - - def __call__(self, parser, namespace, values, option_string=None): - parser_name = values[0] - arg_strings = values[1:] - - # set the parser name if requested - if self.dest is not SUPPRESS: - setattr(namespace, self.dest, parser_name) - - # select the parser - try: - parser = self._name_parser_map[parser_name] - except KeyError: - tup = parser_name, ', '.join(self._name_parser_map) - msg = _('unknown parser %r (choices: %s)' % tup) - raise ArgumentError(self, msg) - - # parse all the remaining options into the namespace - parser.parse_args(arg_strings, namespace) - - -# ============== -# Type classes -# ============== - -class FileType(object): - """Factory for creating file object types - - Instances of FileType are typically passed as type= arguments to the - ArgumentParser add_argument() method. - - Keyword Arguments: - - mode -- A string indicating how the file is to be opened. Accepts the - same values as the builtin open() function. - - bufsize -- The file's desired buffer size. Accepts the same values as - the builtin open() function. - """ - - def __init__(self, mode='r', bufsize=None): - self._mode = mode - self._bufsize = bufsize - - def __call__(self, string): - # the special argument "-" means sys.std{in,out} - if string == '-': - if 'r' in self._mode: - return _sys.stdin - elif 'w' in self._mode: - return _sys.stdout - else: - msg = _('argument "-" with mode %r' % self._mode) - raise ValueError(msg) - - # all other arguments are used as file names - if self._bufsize: - return open(string, self._mode, self._bufsize) - else: - return open(string, self._mode) - - def __repr__(self): - args = [self._mode, self._bufsize] - args_str = ', '.join([repr(arg) for arg in args if arg is not None]) - return '%s(%s)' % (type(self).__name__, args_str) - -# =========================== -# Optional and Positional Parsing -# =========================== - -class Namespace(_AttributeHolder): - """Simple object for storing attributes. - - Implements equality by attribute names and values, and provides a simple - string representation. - """ - - def __init__(self, **kwargs): - for name in kwargs: - setattr(self, name, kwargs[name]) - - def __eq__(self, other): - return vars(self) == vars(other) - - def __ne__(self, other): - return not (self == other) - - def __contains__(self, key): - return key in self.__dict__ - - -class _ActionsContainer(object): - - def __init__(self, - description, - prefix_chars, - argument_default, - conflict_handler): - super(_ActionsContainer, self).__init__() - - self.description = description - self.argument_default = argument_default - self.prefix_chars = prefix_chars - self.conflict_handler = conflict_handler - - # set up registries - self._registries = {} - - # register actions - self.register('action', None, _StoreAction) - self.register('action', 'store', _StoreAction) - self.register('action', 'store_const', _StoreConstAction) - self.register('action', 'store_true', _StoreTrueAction) - self.register('action', 'store_false', _StoreFalseAction) - self.register('action', 'append', _AppendAction) - self.register('action', 'append_const', _AppendConstAction) - self.register('action', 'count', _CountAction) - self.register('action', 'help', _HelpAction) - self.register('action', 'version', _VersionAction) - self.register('action', 'parsers', _SubParsersAction) - - # raise an exception if the conflict handler is invalid - self._get_handler() - - # action storage - self._actions = [] - self._option_string_actions = {} - - # groups - self._action_groups = [] - self._mutually_exclusive_groups = [] - - # defaults storage - self._defaults = {} - - # determines whether an "option" looks like a negative number - self._negative_number_matcher = _re.compile(r'^-\d+$|^-\d*\.\d+$') - - # whether or not there are any optionals that look like negative - # numbers -- uses a list so it can be shared and edited - self._has_negative_number_optionals = [] - - # ==================== - # Registration methods - # ==================== - def register(self, registry_name, value, object): - registry = self._registries.setdefault(registry_name, {}) - registry[value] = object - - def _registry_get(self, registry_name, value, default=None): - return self._registries[registry_name].get(value, default) - - # ================================== - # Namespace default accessor methods - # ================================== - def set_defaults(self, **kwargs): - self._defaults.update(kwargs) - - # if these defaults match any existing arguments, replace - # the previous default on the object with the new one - for action in self._actions: - if action.dest in kwargs: - action.default = kwargs[action.dest] - - def get_default(self, dest): - for action in self._actions: - if action.dest == dest and action.default is not None: - return action.default - return self._defaults.get(dest, None) - - - # ======================= - # Adding argument actions - # ======================= - def add_argument(self, *args, **kwargs): - """ - add_argument(dest, ..., name=value, ...) - add_argument(option_string, option_string, ..., name=value, ...) - """ - - # if no positional args are supplied or only one is supplied and - # it doesn't look like an option string, parse a positional - # argument - chars = self.prefix_chars - if not args or len(args) == 1 and args[0][0] not in chars: - if args and 'dest' in kwargs: - raise ValueError('dest supplied twice for positional argument') - kwargs = self._get_positional_kwargs(*args, **kwargs) - - # otherwise, we're adding an optional argument - else: - kwargs = self._get_optional_kwargs(*args, **kwargs) - - # if no default was supplied, use the parser-level default - if 'default' not in kwargs: - dest = kwargs['dest'] - if dest in self._defaults: - kwargs['default'] = self._defaults[dest] - elif self.argument_default is not None: - kwargs['default'] = self.argument_default - - # create the action object, and add it to the parser - action_class = self._pop_action_class(kwargs) - if not _callable(action_class): - raise ValueError('unknown action "%s"' % action_class) - action = action_class(**kwargs) - - # raise an error if the action type is not callable - type_func = self._registry_get('type', action.type, action.type) - if not _callable(type_func): - raise ValueError('%r is not callable' % type_func) - - return self._add_action(action) - - def add_argument_group(self, *args, **kwargs): - group = _ArgumentGroup(self, *args, **kwargs) - self._action_groups.append(group) - return group - - def add_mutually_exclusive_group(self, **kwargs): - group = _MutuallyExclusiveGroup(self, **kwargs) - self._mutually_exclusive_groups.append(group) - return group - - def _add_action(self, action): - # resolve any conflicts - self._check_conflict(action) - - # add to actions list - self._actions.append(action) - action.container = self - - # index the action by any option strings it has - for option_string in action.option_strings: - self._option_string_actions[option_string] = action - - # set the flag if any option strings look like negative numbers - for option_string in action.option_strings: - if self._negative_number_matcher.match(option_string): - if not self._has_negative_number_optionals: - self._has_negative_number_optionals.append(True) - - # return the created action - return action - - def _remove_action(self, action): - self._actions.remove(action) - - def _add_container_actions(self, container): - # collect groups by titles - title_group_map = {} - for group in self._action_groups: - if group.title in title_group_map: - msg = _('cannot merge actions - two groups are named %r') - raise ValueError(msg % (group.title)) - title_group_map[group.title] = group - - # map each action to its group - group_map = {} - for group in container._action_groups: - - # if a group with the title exists, use that, otherwise - # create a new group matching the container's group - if group.title not in title_group_map: - title_group_map[group.title] = self.add_argument_group( - title=group.title, - description=group.description, - conflict_handler=group.conflict_handler) - - # map the actions to their new group - for action in group._group_actions: - group_map[action] = title_group_map[group.title] - - # add container's mutually exclusive groups - # NOTE: if add_mutually_exclusive_group ever gains title= and - # description= then this code will need to be expanded as above - for group in container._mutually_exclusive_groups: - mutex_group = self.add_mutually_exclusive_group( - required=group.required) - - # map the actions to their new mutex group - for action in group._group_actions: - group_map[action] = mutex_group - - # add all actions to this container or their group - for action in container._actions: - group_map.get(action, self)._add_action(action) - - def _get_positional_kwargs(self, dest, **kwargs): - # make sure required is not specified - if 'required' in kwargs: - msg = _("'required' is an invalid argument for positionals") - raise TypeError(msg) - - # mark positional arguments as required if at least one is - # always required - if kwargs.get('nargs') not in [OPTIONAL, ZERO_OR_MORE]: - kwargs['required'] = True - if kwargs.get('nargs') == ZERO_OR_MORE and 'default' not in kwargs: - kwargs['required'] = True - - # return the keyword arguments with no option strings - return dict(kwargs, dest=dest, option_strings=[]) - - def _get_optional_kwargs(self, *args, **kwargs): - # determine short and long option strings - option_strings = [] - long_option_strings = [] - for option_string in args: - # error on strings that don't start with an appropriate prefix - if not option_string[0] in self.prefix_chars: - msg = _('invalid option string %r: ' - 'must start with a character %r') - tup = option_string, self.prefix_chars - raise ValueError(msg % tup) - - # strings starting with two prefix characters are long options - option_strings.append(option_string) - if option_string[0] in self.prefix_chars: - if len(option_string) > 1: - if option_string[1] in self.prefix_chars: - long_option_strings.append(option_string) - - # infer destination, '--foo-bar' -> 'foo_bar' and '-x' -> 'x' - dest = kwargs.pop('dest', None) - if dest is None: - if long_option_strings: - dest_option_string = long_option_strings[0] - else: - dest_option_string = option_strings[0] - dest = dest_option_string.lstrip(self.prefix_chars) - if not dest: - msg = _('dest= is required for options like %r') - raise ValueError(msg % option_string) - dest = dest.replace('-', '_') - - # return the updated keyword arguments - return dict(kwargs, dest=dest, option_strings=option_strings) - - def _pop_action_class(self, kwargs, default=None): - action = kwargs.pop('action', default) - return self._registry_get('action', action, action) - - def _get_handler(self): - # determine function from conflict handler string - handler_func_name = '_handle_conflict_%s' % self.conflict_handler - try: - return getattr(self, handler_func_name) - except AttributeError: - msg = _('invalid conflict_resolution value: %r') - raise ValueError(msg % self.conflict_handler) - - def _check_conflict(self, action): - - # find all options that conflict with this option - confl_optionals = [] - for option_string in action.option_strings: - if option_string in self._option_string_actions: - confl_optional = self._option_string_actions[option_string] - confl_optionals.append((option_string, confl_optional)) - - # resolve any conflicts - if confl_optionals: - conflict_handler = self._get_handler() - conflict_handler(action, confl_optionals) - - def _handle_conflict_error(self, action, conflicting_actions): - message = _('conflicting option string(s): %s') - conflict_string = ', '.join([option_string - for option_string, action - in conflicting_actions]) - raise ArgumentError(action, message % conflict_string) - - def _handle_conflict_resolve(self, action, conflicting_actions): - - # remove all conflicting options - for option_string, action in conflicting_actions: - - # remove the conflicting option - action.option_strings.remove(option_string) - self._option_string_actions.pop(option_string, None) - - # if the option now has no option string, remove it from the - # container holding it - if not action.option_strings: - action.container._remove_action(action) - - -class _ArgumentGroup(_ActionsContainer): - - def __init__(self, container, title=None, description=None, **kwargs): - # add any missing keyword arguments by checking the container - update = kwargs.setdefault - update('conflict_handler', container.conflict_handler) - update('prefix_chars', container.prefix_chars) - update('argument_default', container.argument_default) - super_init = super(_ArgumentGroup, self).__init__ - super_init(description=description, **kwargs) - - # group attributes - self.title = title - self._group_actions = [] - - # share most attributes with the container - self._registries = container._registries - self._actions = container._actions - self._option_string_actions = container._option_string_actions - self._defaults = container._defaults - self._has_negative_number_optionals = \ - container._has_negative_number_optionals - - def _add_action(self, action): - action = super(_ArgumentGroup, self)._add_action(action) - self._group_actions.append(action) - return action - - def _remove_action(self, action): - super(_ArgumentGroup, self)._remove_action(action) - self._group_actions.remove(action) - - -class _MutuallyExclusiveGroup(_ArgumentGroup): - - def __init__(self, container, required=False): - super(_MutuallyExclusiveGroup, self).__init__(container) - self.required = required - self._container = container - - def _add_action(self, action): - if action.required: - msg = _('mutually exclusive arguments must be optional') - raise ValueError(msg) - action = self._container._add_action(action) - self._group_actions.append(action) - return action - - def _remove_action(self, action): - self._container._remove_action(action) - self._group_actions.remove(action) - - -class ArgumentParser(_AttributeHolder, _ActionsContainer): - """Object for parsing command line strings into Python objects. - - Keyword Arguments: - - prog -- The name of the program (default: sys.argv[0]) - - usage -- A usage message (default: auto-generated from arguments) - - description -- A description of what the program does - - epilog -- Text following the argument descriptions - - parents -- Parsers whose arguments should be copied into this one - - formatter_class -- HelpFormatter class for printing help messages - - prefix_chars -- Characters that prefix optional arguments - - fromfile_prefix_chars -- Characters that prefix files containing - additional arguments - - argument_default -- The default value for all arguments - - conflict_handler -- String indicating how to handle conflicts - - add_help -- Add a -h/-help option - """ - - def __init__(self, - prog=None, - usage=None, - description=None, - epilog=None, - version=None, - parents=[], - formatter_class=HelpFormatter, - prefix_chars='-', - fromfile_prefix_chars=None, - argument_default=None, - conflict_handler='error', - add_help=True): - - if version is not None: - import warnings - warnings.warn( - """The "version" argument to ArgumentParser is deprecated. """ - """Please use """ - """"add_argument(..., action='version', version="N", ...)" """ - """instead""", DeprecationWarning) - - superinit = super(ArgumentParser, self).__init__ - superinit(description=description, - prefix_chars=prefix_chars, - argument_default=argument_default, - conflict_handler=conflict_handler) - - # default setting for prog - if prog is None: - prog = _os.path.basename(_sys.argv[0]) - - self.prog = prog - self.usage = usage - self.epilog = epilog - self.version = version - self.formatter_class = formatter_class - self.fromfile_prefix_chars = fromfile_prefix_chars - self.add_help = add_help - - add_group = self.add_argument_group - self._positionals = add_group(_('positional arguments')) - self._optionals = add_group(_('optional arguments')) - self._subparsers = None - - # register types - def identity(string): - return string - self.register('type', None, identity) - - # add help and version arguments if necessary - # (using explicit default to override global argument_default) - if self.add_help: - self.add_argument( - '-h', '--help', action='help', default=SUPPRESS, - help=_('show this help message and exit')) - if self.version: - self.add_argument( - '-v', '--version', action='version', default=SUPPRESS, - version=self.version, - help=_("show program's version number and exit")) - - # add parent arguments and defaults - for parent in parents: - self._add_container_actions(parent) - try: - defaults = parent._defaults - except AttributeError: - pass - else: - self._defaults.update(defaults) - - # ======================= - # Pretty __repr__ methods - # ======================= - def _get_kwargs(self): - names = [ - 'prog', - 'usage', - 'description', - 'version', - 'formatter_class', - 'conflict_handler', - 'add_help', - ] - return [(name, getattr(self, name)) for name in names] - - # ================================== - # Optional/Positional adding methods - # ================================== - def add_subparsers(self, **kwargs): - if self._subparsers is not None: - self.error(_('cannot have multiple subparser arguments')) - - # add the parser class to the arguments if it's not present - kwargs.setdefault('parser_class', type(self)) - - if 'title' in kwargs or 'description' in kwargs: - title = _(kwargs.pop('title', 'subcommands')) - description = _(kwargs.pop('description', None)) - self._subparsers = self.add_argument_group(title, description) - else: - self._subparsers = self._positionals - - # prog defaults to the usage message of this parser, skipping - # optional arguments and with no "usage:" prefix - if kwargs.get('prog') is None: - formatter = self._get_formatter() - positionals = self._get_positional_actions() - groups = self._mutually_exclusive_groups - formatter.add_usage(self.usage, positionals, groups, '') - kwargs['prog'] = formatter.format_help().strip() - - # create the parsers action and add it to the positionals list - parsers_class = self._pop_action_class(kwargs, 'parsers') - action = parsers_class(option_strings=[], **kwargs) - self._subparsers._add_action(action) - - # return the created parsers action - return action - - def _add_action(self, action): - if action.option_strings: - self._optionals._add_action(action) - else: - self._positionals._add_action(action) - return action - - def _get_optional_actions(self): - return [action - for action in self._actions - if action.option_strings] - - def _get_positional_actions(self): - return [action - for action in self._actions - if not action.option_strings] - - # ===================================== - # Command line argument parsing methods - # ===================================== - def parse_args(self, args=None, namespace=None): - args, argv = self.parse_known_args(args, namespace) - if argv: - msg = _('unrecognized arguments: %s') - self.error(msg % ' '.join(argv)) - return args - - def parse_known_args(self, args=None, namespace=None): - # args default to the system args - if args is None: - args = _sys.argv[1:] - - # default Namespace built from parser defaults - if namespace is None: - namespace = Namespace() - - # add any action defaults that aren't present - for action in self._actions: - if action.dest is not SUPPRESS: - if not hasattr(namespace, action.dest): - if action.default is not SUPPRESS: - default = action.default - if isinstance(action.default, _basestring): - default = self._get_value(action, default) - setattr(namespace, action.dest, default) - - # add any parser defaults that aren't present - for dest in self._defaults: - if not hasattr(namespace, dest): - setattr(namespace, dest, self._defaults[dest]) - - # parse the arguments and exit if there are any errors - try: - return self._parse_known_args(args, namespace) - except ArgumentError: - err = _sys.exc_info()[1] - self.error(str(err)) - - def _parse_known_args(self, arg_strings, namespace): - # replace arg strings that are file references - if self.fromfile_prefix_chars is not None: - arg_strings = self._read_args_from_files(arg_strings) - - # map all mutually exclusive arguments to the other arguments - # they can't occur with - action_conflicts = {} - for mutex_group in self._mutually_exclusive_groups: - group_actions = mutex_group._group_actions - for i, mutex_action in enumerate(mutex_group._group_actions): - conflicts = action_conflicts.setdefault(mutex_action, []) - conflicts.extend(group_actions[:i]) - conflicts.extend(group_actions[i + 1:]) - - # find all option indices, and determine the arg_string_pattern - # which has an 'O' if there is an option at an index, - # an 'A' if there is an argument, or a '-' if there is a '--' - option_string_indices = {} - arg_string_pattern_parts = [] - arg_strings_iter = iter(arg_strings) - for i, arg_string in enumerate(arg_strings_iter): - - # all args after -- are non-options - if arg_string == '--': - arg_string_pattern_parts.append('-') - for arg_string in arg_strings_iter: - arg_string_pattern_parts.append('A') - - # otherwise, add the arg to the arg strings - # and note the index if it was an option - else: - option_tuple = self._parse_optional(arg_string) - if option_tuple is None: - pattern = 'A' - else: - option_string_indices[i] = option_tuple - pattern = 'O' - arg_string_pattern_parts.append(pattern) - - # join the pieces together to form the pattern - arg_strings_pattern = ''.join(arg_string_pattern_parts) - - # converts arg strings to the appropriate and then takes the action - seen_actions = _set() - seen_non_default_actions = _set() - - def take_action(action, argument_strings, option_string=None): - seen_actions.add(action) - argument_values = self._get_values(action, argument_strings) - - # error if this argument is not allowed with other previously - # seen arguments, assuming that actions that use the default - # value don't really count as "present" - if argument_values is not action.default: - seen_non_default_actions.add(action) - for conflict_action in action_conflicts.get(action, []): - if conflict_action in seen_non_default_actions: - msg = _('not allowed with argument %s') - action_name = _get_action_name(conflict_action) - raise ArgumentError(action, msg % action_name) - - # take the action if we didn't receive a SUPPRESS value - # (e.g. from a default) - if argument_values is not SUPPRESS: - action(self, namespace, argument_values, option_string) - - # function to convert arg_strings into an optional action - def consume_optional(start_index): - - # get the optional identified at this index - option_tuple = option_string_indices[start_index] - action, option_string, explicit_arg = option_tuple - - # identify additional optionals in the same arg string - # (e.g. -xyz is the same as -x -y -z if no args are required) - match_argument = self._match_argument - action_tuples = [] - while True: - - # if we found no optional action, skip it - if action is None: - extras.append(arg_strings[start_index]) - return start_index + 1 - - # if there is an explicit argument, try to match the - # optional's string arguments to only this - if explicit_arg is not None: - arg_count = match_argument(action, 'A') - - # if the action is a single-dash option and takes no - # arguments, try to parse more single-dash options out - # of the tail of the option string - chars = self.prefix_chars - if arg_count == 0 and option_string[1] not in chars: - action_tuples.append((action, [], option_string)) - for char in self.prefix_chars: - option_string = char + explicit_arg[0] - explicit_arg = explicit_arg[1:] or None - optionals_map = self._option_string_actions - if option_string in optionals_map: - action = optionals_map[option_string] - break - else: - msg = _('ignored explicit argument %r') - raise ArgumentError(action, msg % explicit_arg) - - # if the action expect exactly one argument, we've - # successfully matched the option; exit the loop - elif arg_count == 1: - stop = start_index + 1 - args = [explicit_arg] - action_tuples.append((action, args, option_string)) - break - - # error if a double-dash option did not use the - # explicit argument - else: - msg = _('ignored explicit argument %r') - raise ArgumentError(action, msg % explicit_arg) - - # if there is no explicit argument, try to match the - # optional's string arguments with the following strings - # if successful, exit the loop - else: - start = start_index + 1 - selected_patterns = arg_strings_pattern[start:] - arg_count = match_argument(action, selected_patterns) - stop = start + arg_count - args = arg_strings[start:stop] - action_tuples.append((action, args, option_string)) - break - - # add the Optional to the list and return the index at which - # the Optional's string args stopped - assert action_tuples - for action, args, option_string in action_tuples: - take_action(action, args, option_string) - return stop - - # the list of Positionals left to be parsed; this is modified - # by consume_positionals() - positionals = self._get_positional_actions() - - # function to convert arg_strings into positional actions - def consume_positionals(start_index): - # match as many Positionals as possible - match_partial = self._match_arguments_partial - selected_pattern = arg_strings_pattern[start_index:] - arg_counts = match_partial(positionals, selected_pattern) - - # slice off the appropriate arg strings for each Positional - # and add the Positional and its args to the list - for action, arg_count in zip(positionals, arg_counts): - args = arg_strings[start_index: start_index + arg_count] - start_index += arg_count - take_action(action, args) - - # slice off the Positionals that we just parsed and return the - # index at which the Positionals' string args stopped - positionals[:] = positionals[len(arg_counts):] - return start_index - - # consume Positionals and Optionals alternately, until we have - # passed the last option string - extras = [] - start_index = 0 - if option_string_indices: - max_option_string_index = max(option_string_indices) - else: - max_option_string_index = -1 - while start_index <= max_option_string_index: - - # consume any Positionals preceding the next option - next_option_string_index = min([ - index - for index in option_string_indices - if index >= start_index]) - if start_index != next_option_string_index: - positionals_end_index = consume_positionals(start_index) - - # only try to parse the next optional if we didn't consume - # the option string during the positionals parsing - if positionals_end_index > start_index: - start_index = positionals_end_index - continue - else: - start_index = positionals_end_index - - # if we consumed all the positionals we could and we're not - # at the index of an option string, there were extra arguments - if start_index not in option_string_indices: - strings = arg_strings[start_index:next_option_string_index] - extras.extend(strings) - start_index = next_option_string_index - - # consume the next optional and any arguments for it - start_index = consume_optional(start_index) - - # consume any positionals following the last Optional - stop_index = consume_positionals(start_index) - - # if we didn't consume all the argument strings, there were extras - extras.extend(arg_strings[stop_index:]) - - # if we didn't use all the Positional objects, there were too few - # arg strings supplied. - if positionals: - self.error(_('too few arguments')) - - # make sure all required actions were present - for action in self._actions: - if action.required: - if action not in seen_actions: - name = _get_action_name(action) - self.error(_('argument %s is required') % name) - - # make sure all required groups had one option present - for group in self._mutually_exclusive_groups: - if group.required: - for action in group._group_actions: - if action in seen_non_default_actions: - break - - # if no actions were used, report the error - else: - names = [_get_action_name(action) - for action in group._group_actions - if action.help is not SUPPRESS] - msg = _('one of the arguments %s is required') - self.error(msg % ' '.join(names)) - - # return the updated namespace and the extra arguments - return namespace, extras - - def _read_args_from_files(self, arg_strings): - # expand arguments referencing files - new_arg_strings = [] - for arg_string in arg_strings: - - # for regular arguments, just add them back into the list - if arg_string[0] not in self.fromfile_prefix_chars: - new_arg_strings.append(arg_string) - - # replace arguments referencing files with the file content - else: - try: - args_file = open(arg_string[1:]) - try: - arg_strings = [] - for arg_line in args_file.read().splitlines(): - for arg in self.convert_arg_line_to_args(arg_line): - arg_strings.append(arg) - arg_strings = self._read_args_from_files(arg_strings) - new_arg_strings.extend(arg_strings) - finally: - args_file.close() - except IOError: - err = _sys.exc_info()[1] - self.error(str(err)) - - # return the modified argument list - return new_arg_strings - - def convert_arg_line_to_args(self, arg_line): - return [arg_line] - - def _match_argument(self, action, arg_strings_pattern): - # match the pattern for this action to the arg strings - nargs_pattern = self._get_nargs_pattern(action) - match = _re.match(nargs_pattern, arg_strings_pattern) - - # raise an exception if we weren't able to find a match - if match is None: - nargs_errors = { - None: _('expected one argument'), - OPTIONAL: _('expected at most one argument'), - ONE_OR_MORE: _('expected at least one argument'), - } - default = _('expected %s argument(s)') % action.nargs - msg = nargs_errors.get(action.nargs, default) - raise ArgumentError(action, msg) - - # return the number of arguments matched - return len(match.group(1)) - - def _match_arguments_partial(self, actions, arg_strings_pattern): - # progressively shorten the actions list by slicing off the - # final actions until we find a match - result = [] - for i in range(len(actions), 0, -1): - actions_slice = actions[:i] - pattern = ''.join([self._get_nargs_pattern(action) - for action in actions_slice]) - match = _re.match(pattern, arg_strings_pattern) - if match is not None: - result.extend([len(string) for string in match.groups()]) - break - - # return the list of arg string counts - return result - - def _parse_optional(self, arg_string): - # if it's an empty string, it was meant to be a positional - if not arg_string: - return None - - # if it doesn't start with a prefix, it was meant to be positional - if not arg_string[0] in self.prefix_chars: - return None - - # if the option string is present in the parser, return the action - if arg_string in self._option_string_actions: - action = self._option_string_actions[arg_string] - return action, arg_string, None - - # if it's just a single character, it was meant to be positional - if len(arg_string) == 1: - return None - - # if the option string before the "=" is present, return the action - if '=' in arg_string: - option_string, explicit_arg = arg_string.split('=', 1) - if option_string in self._option_string_actions: - action = self._option_string_actions[option_string] - return action, option_string, explicit_arg - - # search through all possible prefixes of the option string - # and all actions in the parser for possible interpretations - option_tuples = self._get_option_tuples(arg_string) - - # if multiple actions match, the option string was ambiguous - if len(option_tuples) > 1: - options = ', '.join([option_string - for action, option_string, explicit_arg in option_tuples]) - tup = arg_string, options - self.error(_('ambiguous option: %s could match %s') % tup) - - # if exactly one action matched, this segmentation is good, - # so return the parsed action - elif len(option_tuples) == 1: - option_tuple, = option_tuples - return option_tuple - - # if it was not found as an option, but it looks like a negative - # number, it was meant to be positional - # unless there are negative-number-like options - if self._negative_number_matcher.match(arg_string): - if not self._has_negative_number_optionals: - return None - - # if it contains a space, it was meant to be a positional - if ' ' in arg_string: - return None - - # it was meant to be an optional but there is no such option - # in this parser (though it might be a valid option in a subparser) - return None, arg_string, None - - def _get_option_tuples(self, option_string): - result = [] - - # option strings starting with two prefix characters are only - # split at the '=' - chars = self.prefix_chars - if option_string[0] in chars and option_string[1] in chars: - if '=' in option_string: - option_prefix, explicit_arg = option_string.split('=', 1) - else: - option_prefix = option_string - explicit_arg = None - for option_string in self._option_string_actions: - if option_string.startswith(option_prefix): - action = self._option_string_actions[option_string] - tup = action, option_string, explicit_arg - result.append(tup) - - # single character options can be concatenated with their arguments - # but multiple character options always have to have their argument - # separate - elif option_string[0] in chars and option_string[1] not in chars: - option_prefix = option_string - explicit_arg = None - short_option_prefix = option_string[:2] - short_explicit_arg = option_string[2:] - - for option_string in self._option_string_actions: - if option_string == short_option_prefix: - action = self._option_string_actions[option_string] - tup = action, option_string, short_explicit_arg - result.append(tup) - elif option_string.startswith(option_prefix): - action = self._option_string_actions[option_string] - tup = action, option_string, explicit_arg - result.append(tup) - - # shouldn't ever get here - else: - self.error(_('unexpected option string: %s') % option_string) - - # return the collected option tuples - return result - - def _get_nargs_pattern(self, action): - # in all examples below, we have to allow for '--' args - # which are represented as '-' in the pattern - nargs = action.nargs - - # the default (None) is assumed to be a single argument - if nargs is None: - nargs_pattern = '(-*A-*)' - - # allow zero or one arguments - elif nargs == OPTIONAL: - nargs_pattern = '(-*A?-*)' - - # allow zero or more arguments - elif nargs == ZERO_OR_MORE: - nargs_pattern = '(-*[A-]*)' - - # allow one or more arguments - elif nargs == ONE_OR_MORE: - nargs_pattern = '(-*A[A-]*)' - - # allow any number of options or arguments - elif nargs == REMAINDER: - nargs_pattern = '([-AO]*)' - - # allow one argument followed by any number of options or arguments - elif nargs == PARSER: - nargs_pattern = '(-*A[-AO]*)' - - # all others should be integers - else: - nargs_pattern = '(-*%s-*)' % '-*'.join('A' * nargs) - - # if this is an optional action, -- is not allowed - if action.option_strings: - nargs_pattern = nargs_pattern.replace('-*', '') - nargs_pattern = nargs_pattern.replace('-', '') - - # return the pattern - return nargs_pattern - - # ======================== - # Value conversion methods - # ======================== - def _get_values(self, action, arg_strings): - # for everything but PARSER args, strip out '--' - if action.nargs not in [PARSER, REMAINDER]: - arg_strings = [s for s in arg_strings if s != '--'] - - # optional argument produces a default when not present - if not arg_strings and action.nargs == OPTIONAL: - if action.option_strings: - value = action.const - else: - value = action.default - if isinstance(value, _basestring): - value = self._get_value(action, value) - self._check_value(action, value) - - # when nargs='*' on a positional, if there were no command-line - # args, use the default if it is anything other than None - elif (not arg_strings and action.nargs == ZERO_OR_MORE and - not action.option_strings): - if action.default is not None: - value = action.default - else: - value = arg_strings - self._check_value(action, value) - - # single argument or optional argument produces a single value - elif len(arg_strings) == 1 and action.nargs in [None, OPTIONAL]: - arg_string, = arg_strings - value = self._get_value(action, arg_string) - self._check_value(action, value) - - # REMAINDER arguments convert all values, checking none - elif action.nargs == REMAINDER: - value = [self._get_value(action, v) for v in arg_strings] - - # PARSER arguments convert all values, but check only the first - elif action.nargs == PARSER: - value = [self._get_value(action, v) for v in arg_strings] - self._check_value(action, value[0]) - - # all other types of nargs produce a list - else: - value = [self._get_value(action, v) for v in arg_strings] - for v in value: - self._check_value(action, v) - - # return the converted value - return value - - def _get_value(self, action, arg_string): - type_func = self._registry_get('type', action.type, action.type) - if not _callable(type_func): - msg = _('%r is not callable') - raise ArgumentError(action, msg % type_func) - - # convert the value to the appropriate type - try: - result = type_func(arg_string) - - # ArgumentTypeErrors indicate errors - except ArgumentTypeError: - name = getattr(action.type, '__name__', repr(action.type)) - msg = str(_sys.exc_info()[1]) - raise ArgumentError(action, msg) - - # TypeErrors or ValueErrors also indicate errors - except (TypeError, ValueError): - name = getattr(action.type, '__name__', repr(action.type)) - msg = _('invalid %s value: %r') - raise ArgumentError(action, msg % (name, arg_string)) - - # return the converted value - return result - - def _check_value(self, action, value): - # converted value must be one of the choices (if specified) - if action.choices is not None and value not in action.choices: - tup = value, ', '.join(map(repr, action.choices)) - msg = _('invalid choice: %r (choose from %s)') % tup - raise ArgumentError(action, msg) - - # ======================= - # Help-formatting methods - # ======================= - def format_usage(self): - formatter = self._get_formatter() - formatter.add_usage(self.usage, self._actions, - self._mutually_exclusive_groups) - return formatter.format_help() - - def format_help(self): - formatter = self._get_formatter() - - # usage - formatter.add_usage(self.usage, self._actions, - self._mutually_exclusive_groups) - - # description - formatter.add_text(self.description) - - # positionals, optionals and user-defined groups - for action_group in self._action_groups: - formatter.start_section(action_group.title) - formatter.add_text(action_group.description) - formatter.add_arguments(action_group._group_actions) - formatter.end_section() - - # epilog - formatter.add_text(self.epilog) - - # determine help from format above - return formatter.format_help() - - def format_version(self): - import warnings - warnings.warn( - 'The format_version method is deprecated -- the "version" ' - 'argument to ArgumentParser is no longer supported.', - DeprecationWarning) - formatter = self._get_formatter() - formatter.add_text(self.version) - return formatter.format_help() - - def _get_formatter(self): - return self.formatter_class(prog=self.prog) - - # ===================== - # Help-printing methods - # ===================== - def print_usage(self, file=None): - if file is None: - file = _sys.stdout - self._print_message(self.format_usage(), file) - - def print_help(self, file=None): - if file is None: - file = _sys.stdout - self._print_message(self.format_help(), file) - - def print_version(self, file=None): - import warnings - warnings.warn( - 'The print_version method is deprecated -- the "version" ' - 'argument to ArgumentParser is no longer supported.', - DeprecationWarning) - self._print_message(self.format_version(), file) - - def _print_message(self, message, file=None): - if message: - if file is None: - file = _sys.stderr - file.write(message) - - # =============== - # Exiting methods - # =============== - def exit(self, status=0, message=None): - if message: - self._print_message(message, _sys.stderr) - _sys.exit(status) - - def error(self, message): - """error(message: string) - - Prints a usage message incorporating the message to stderr and - exits. - - If you override this in a subclass, it should not return -- it - should either exit or raise an exception. - """ - self.print_usage(_sys.stderr) - self.exit(2, _('%s: error: %s\n') % (self.prog, message)) +# Copyright 2006-2009 Steven J. Bethard . +# +# Licensed under the Apache License, Version 2.0 (the "License"); you may not +# use this file except in compliance with the License. You may obtain a copy +# of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT +# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the +# License for the specific language governing permissions and limitations +# under the License. + +"""Command-line parsing library + +This module is an optparse-inspired command-line parsing library that: + + - handles both optional and positional arguments + - produces highly informative usage messages + - supports parsers that dispatch to sub-parsers + +The following is a simple usage example that sums integers from the +command-line and writes the result to a file:: + + parser = argparse.ArgumentParser( + description='sum the integers at the command line') + parser.add_argument( + 'integers', metavar='int', nargs='+', type=int, + help='an integer to be summed') + parser.add_argument( + '--log', default=sys.stdout, type=argparse.FileType('w'), + help='the file where the sum should be written') + args = parser.parse_args() + args.log.write('%s' % sum(args.integers)) + args.log.close() + +The module contains the following public classes: + + - ArgumentParser -- The main entry point for command-line parsing. As the + example above shows, the add_argument() method is used to populate + the parser with actions for optional and positional arguments. Then + the parse_args() method is invoked to convert the args at the + command-line into an object with attributes. + + - ArgumentError -- The exception raised by ArgumentParser objects when + there are errors with the parser's actions. Errors raised while + parsing the command-line are caught by ArgumentParser and emitted + as command-line messages. + + - FileType -- A factory for defining types of files to be created. As the + example above shows, instances of FileType are typically passed as + the type= argument of add_argument() calls. + + - Action -- The base class for parser actions. Typically actions are + selected by passing strings like 'store_true' or 'append_const' to + the action= argument of add_argument(). However, for greater + customization of ArgumentParser actions, subclasses of Action may + be defined and passed as the action= argument. + + - HelpFormatter, RawDescriptionHelpFormatter, RawTextHelpFormatter, + ArgumentDefaultsHelpFormatter -- Formatter classes which + may be passed as the formatter_class= argument to the + ArgumentParser constructor. HelpFormatter is the default, + RawDescriptionHelpFormatter and RawTextHelpFormatter tell the parser + not to change the formatting for help text, and + ArgumentDefaultsHelpFormatter adds information about argument defaults + to the help. + +All other classes in this module are considered implementation details. +(Also note that HelpFormatter and RawDescriptionHelpFormatter are only +considered public as object names -- the API of the formatter objects is +still considered an implementation detail.) +""" + +__version__ = '1.1' +__all__ = [ + 'ArgumentParser', + 'ArgumentError', + 'Namespace', + 'Action', + 'FileType', + 'HelpFormatter', + 'RawDescriptionHelpFormatter', + 'RawTextHelpFormatter', + 'ArgumentDefaultsHelpFormatter', +] + + +import copy as _copy +import os as _os +import re as _re +import sys as _sys +import textwrap as _textwrap + +from gettext import gettext as _ + +try: + _set = set +except NameError: + from sets import Set as _set + +try: + _basestring = basestring +except NameError: + _basestring = str + +try: + _sorted = sorted +except NameError: + + def _sorted(iterable, reverse=False): + result = list(iterable) + result.sort() + if reverse: + result.reverse() + return result + + +def _callable(obj): + return hasattr(obj, '__call__') or hasattr(obj, '__bases__') + +# silence Python 2.6 buggy warnings about Exception.message +if _sys.version_info[:2] == (2, 6): + import warnings + warnings.filterwarnings( + action='ignore', + message='BaseException.message has been deprecated as of Python 2.6', + category=DeprecationWarning, + module='argparse') + + +SUPPRESS = '==SUPPRESS==' + +OPTIONAL = '?' +ZERO_OR_MORE = '*' +ONE_OR_MORE = '+' +PARSER = 'A...' +REMAINDER = '...' + +# ============================= +# Utility functions and classes +# ============================= + +class _AttributeHolder(object): + """Abstract base class that provides __repr__. + + The __repr__ method returns a string in the format:: + ClassName(attr=name, attr=name, ...) + The attributes are determined either by a class-level attribute, + '_kwarg_names', or by inspecting the instance __dict__. + """ + + def __repr__(self): + type_name = type(self).__name__ + arg_strings = [] + for arg in self._get_args(): + arg_strings.append(repr(arg)) + for name, value in self._get_kwargs(): + arg_strings.append('%s=%r' % (name, value)) + return '%s(%s)' % (type_name, ', '.join(arg_strings)) + + def _get_kwargs(self): + return _sorted(self.__dict__.items()) + + def _get_args(self): + return [] + + +def _ensure_value(namespace, name, value): + if getattr(namespace, name, None) is None: + setattr(namespace, name, value) + return getattr(namespace, name) + + +# =============== +# Formatting Help +# =============== + +class HelpFormatter(object): + """Formatter for generating usage messages and argument help strings. + + Only the name of this class is considered a public API. All the methods + provided by the class are considered an implementation detail. + """ + + def __init__(self, + prog, + indent_increment=2, + max_help_position=24, + width=None): + + # default setting for width + if width is None: + try: + width = int(_os.environ['COLUMNS']) + except (KeyError, ValueError): + width = 80 + width -= 2 + + self._prog = prog + self._indent_increment = indent_increment + self._max_help_position = max_help_position + self._width = width + + self._current_indent = 0 + self._level = 0 + self._action_max_length = 0 + + self._root_section = self._Section(self, None) + self._current_section = self._root_section + + self._whitespace_matcher = _re.compile(r'\s+') + self._long_break_matcher = _re.compile(r'\n\n\n+') + + # =============================== + # Section and indentation methods + # =============================== + def _indent(self): + self._current_indent += self._indent_increment + self._level += 1 + + def _dedent(self): + self._current_indent -= self._indent_increment + assert self._current_indent >= 0, 'Indent decreased below 0.' + self._level -= 1 + + class _Section(object): + + def __init__(self, formatter, parent, heading=None): + self.formatter = formatter + self.parent = parent + self.heading = heading + self.items = [] + + def format_help(self): + # format the indented section + if self.parent is not None: + self.formatter._indent() + join = self.formatter._join_parts + for func, args in self.items: + func(*args) + item_help = join([func(*args) for func, args in self.items]) + if self.parent is not None: + self.formatter._dedent() + + # return nothing if the section was empty + if not item_help: + return '' + + # add the heading if the section was non-empty + if self.heading is not SUPPRESS and self.heading is not None: + current_indent = self.formatter._current_indent + heading = '%*s%s:\n' % (current_indent, '', self.heading) + else: + heading = '' + + # join the section-initial newline, the heading and the help + return join(['\n', heading, item_help, '\n']) + + def _add_item(self, func, args): + self._current_section.items.append((func, args)) + + # ======================== + # Message building methods + # ======================== + def start_section(self, heading): + self._indent() + section = self._Section(self, self._current_section, heading) + self._add_item(section.format_help, []) + self._current_section = section + + def end_section(self): + self._current_section = self._current_section.parent + self._dedent() + + def add_text(self, text): + if text is not SUPPRESS and text is not None: + self._add_item(self._format_text, [text]) + + def add_usage(self, usage, actions, groups, prefix=None): + if usage is not SUPPRESS: + args = usage, actions, groups, prefix + self._add_item(self._format_usage, args) + + def add_argument(self, action): + if action.help is not SUPPRESS: + + # find all invocations + get_invocation = self._format_action_invocation + invocations = [get_invocation(action)] + for subaction in self._iter_indented_subactions(action): + invocations.append(get_invocation(subaction)) + + # update the maximum item length + invocation_length = max([len(s) for s in invocations]) + action_length = invocation_length + self._current_indent + self._action_max_length = max(self._action_max_length, + action_length) + + # add the item to the list + self._add_item(self._format_action, [action]) + + def add_arguments(self, actions): + for action in actions: + self.add_argument(action) + + # ======================= + # Help-formatting methods + # ======================= + def format_help(self): + help = self._root_section.format_help() + if help: + help = self._long_break_matcher.sub('\n\n', help) + help = help.strip('\n') + '\n' + return help + + def _join_parts(self, part_strings): + return ''.join([part + for part in part_strings + if part and part is not SUPPRESS]) + + def _format_usage(self, usage, actions, groups, prefix): + if prefix is None: + prefix = _('usage: ') + + # if usage is specified, use that + if usage is not None: + usage = usage % dict(prog=self._prog) + + # if no optionals or positionals are available, usage is just prog + elif usage is None and not actions: + usage = '%(prog)s' % dict(prog=self._prog) + + # if optionals and positionals are available, calculate usage + elif usage is None: + prog = '%(prog)s' % dict(prog=self._prog) + + # split optionals from positionals + optionals = [] + positionals = [] + for action in actions: + if action.option_strings: + optionals.append(action) + else: + positionals.append(action) + + # build full usage string + format = self._format_actions_usage + action_usage = format(optionals + positionals, groups) + usage = ' '.join([s for s in [prog, action_usage] if s]) + + # wrap the usage parts if it's too long + text_width = self._width - self._current_indent + if len(prefix) + len(usage) > text_width: + + # break usage into wrappable parts + part_regexp = r'\(.*?\)+|\[.*?\]+|\S+' + opt_usage = format(optionals, groups) + pos_usage = format(positionals, groups) + opt_parts = _re.findall(part_regexp, opt_usage) + pos_parts = _re.findall(part_regexp, pos_usage) + assert ' '.join(opt_parts) == opt_usage + assert ' '.join(pos_parts) == pos_usage + + # helper for wrapping lines + def get_lines(parts, indent, prefix=None): + lines = [] + line = [] + if prefix is not None: + line_len = len(prefix) - 1 + else: + line_len = len(indent) - 1 + for part in parts: + if line_len + 1 + len(part) > text_width: + lines.append(indent + ' '.join(line)) + line = [] + line_len = len(indent) - 1 + line.append(part) + line_len += len(part) + 1 + if line: + lines.append(indent + ' '.join(line)) + if prefix is not None: + lines[0] = lines[0][len(indent):] + return lines + + # if prog is short, follow it with optionals or positionals + if len(prefix) + len(prog) <= 0.75 * text_width: + indent = ' ' * (len(prefix) + len(prog) + 1) + if opt_parts: + lines = get_lines([prog] + opt_parts, indent, prefix) + lines.extend(get_lines(pos_parts, indent)) + elif pos_parts: + lines = get_lines([prog] + pos_parts, indent, prefix) + else: + lines = [prog] + + # if prog is long, put it on its own line + else: + indent = ' ' * len(prefix) + parts = opt_parts + pos_parts + lines = get_lines(parts, indent) + if len(lines) > 1: + lines = [] + lines.extend(get_lines(opt_parts, indent)) + lines.extend(get_lines(pos_parts, indent)) + lines = [prog] + lines + + # join lines into usage + usage = '\n'.join(lines) + + # prefix with 'usage:' + return '%s%s\n\n' % (prefix, usage) + + def _format_actions_usage(self, actions, groups): + # find group indices and identify actions in groups + group_actions = _set() + inserts = {} + for group in groups: + try: + start = actions.index(group._group_actions[0]) + except ValueError: + continue + else: + end = start + len(group._group_actions) + if actions[start:end] == group._group_actions: + for action in group._group_actions: + group_actions.add(action) + if not group.required: + inserts[start] = '[' + inserts[end] = ']' + else: + inserts[start] = '(' + inserts[end] = ')' + for i in range(start + 1, end): + inserts[i] = '|' + + # collect all actions format strings + parts = [] + for i, action in enumerate(actions): + + # suppressed arguments are marked with None + # remove | separators for suppressed arguments + if action.help is SUPPRESS: + parts.append(None) + if inserts.get(i) == '|': + inserts.pop(i) + elif inserts.get(i + 1) == '|': + inserts.pop(i + 1) + + # produce all arg strings + elif not action.option_strings: + part = self._format_args(action, action.dest) + + # if it's in a group, strip the outer [] + if action in group_actions: + if part[0] == '[' and part[-1] == ']': + part = part[1:-1] + + # add the action string to the list + parts.append(part) + + # produce the first way to invoke the option in brackets + else: + option_string = action.option_strings[0] + + # if the Optional doesn't take a value, format is: + # -s or --long + if action.nargs == 0: + part = '%s' % option_string + + # if the Optional takes a value, format is: + # -s ARGS or --long ARGS + else: + default = action.dest.upper() + args_string = self._format_args(action, default) + part = '%s %s' % (option_string, args_string) + + # make it look optional if it's not required or in a group + if not action.required and action not in group_actions: + part = '[%s]' % part + + # add the action string to the list + parts.append(part) + + # insert things at the necessary indices + for i in _sorted(inserts, reverse=True): + parts[i:i] = [inserts[i]] + + # join all the action items with spaces + text = ' '.join([item for item in parts if item is not None]) + + # clean up separators for mutually exclusive groups + open = r'[\[(]' + close = r'[\])]' + text = _re.sub(r'(%s) ' % open, r'\1', text) + text = _re.sub(r' (%s)' % close, r'\1', text) + text = _re.sub(r'%s *%s' % (open, close), r'', text) + text = _re.sub(r'\(([^|]*)\)', r'\1', text) + text = text.strip() + + # return the text + return text + + def _format_text(self, text): + if '%(prog)' in text: + text = text % dict(prog=self._prog) + text_width = self._width - self._current_indent + indent = ' ' * self._current_indent + return self._fill_text(text, text_width, indent) + '\n\n' + + def _format_action(self, action): + # determine the required width and the entry label + help_position = min(self._action_max_length + 2, + self._max_help_position) + help_width = self._width - help_position + action_width = help_position - self._current_indent - 2 + action_header = self._format_action_invocation(action) + + # ho nelp; start on same line and add a final newline + if not action.help: + tup = self._current_indent, '', action_header + action_header = '%*s%s\n' % tup + + # short action name; start on the same line and pad two spaces + elif len(action_header) <= action_width: + tup = self._current_indent, '', action_width, action_header + action_header = '%*s%-*s ' % tup + indent_first = 0 + + # long action name; start on the next line + else: + tup = self._current_indent, '', action_header + action_header = '%*s%s\n' % tup + indent_first = help_position + + # collect the pieces of the action help + parts = [action_header] + + # if there was help for the action, add lines of help text + if action.help: + help_text = self._expand_help(action) + help_lines = self._split_lines(help_text, help_width) + parts.append('%*s%s\n' % (indent_first, '', help_lines[0])) + for line in help_lines[1:]: + parts.append('%*s%s\n' % (help_position, '', line)) + + # or add a newline if the description doesn't end with one + elif not action_header.endswith('\n'): + parts.append('\n') + + # if there are any sub-actions, add their help as well + for subaction in self._iter_indented_subactions(action): + parts.append(self._format_action(subaction)) + + # return a single string + return self._join_parts(parts) + + def _format_action_invocation(self, action): + if not action.option_strings: + metavar, = self._metavar_formatter(action, action.dest)(1) + return metavar + + else: + parts = [] + + # if the Optional doesn't take a value, format is: + # -s, --long + if action.nargs == 0: + parts.extend(action.option_strings) + + # if the Optional takes a value, format is: + # -s ARGS, --long ARGS + else: + default = action.dest.upper() + args_string = self._format_args(action, default) + for option_string in action.option_strings: + parts.append('%s %s' % (option_string, args_string)) + + return ', '.join(parts) + + def _metavar_formatter(self, action, default_metavar): + if action.metavar is not None: + result = action.metavar + elif action.choices is not None: + choice_strs = [str(choice) for choice in action.choices] + result = '{%s}' % ','.join(choice_strs) + else: + result = default_metavar + + def format(tuple_size): + if isinstance(result, tuple): + return result + else: + return (result, ) * tuple_size + return format + + def _format_args(self, action, default_metavar): + get_metavar = self._metavar_formatter(action, default_metavar) + if action.nargs is None: + result = '%s' % get_metavar(1) + elif action.nargs == OPTIONAL: + result = '[%s]' % get_metavar(1) + elif action.nargs == ZERO_OR_MORE: + result = '[%s [%s ...]]' % get_metavar(2) + elif action.nargs == ONE_OR_MORE: + result = '%s [%s ...]' % get_metavar(2) + elif action.nargs == REMAINDER: + result = '...' + elif action.nargs == PARSER: + result = '%s ...' % get_metavar(1) + else: + formats = ['%s' for _ in range(action.nargs)] + result = ' '.join(formats) % get_metavar(action.nargs) + return result + + def _expand_help(self, action): + params = dict(vars(action), prog=self._prog) + for name in list(params): + if params[name] is SUPPRESS: + del params[name] + for name in list(params): + if hasattr(params[name], '__name__'): + params[name] = params[name].__name__ + if params.get('choices') is not None: + choices_str = ', '.join([str(c) for c in params['choices']]) + params['choices'] = choices_str + return self._get_help_string(action) % params + + def _iter_indented_subactions(self, action): + try: + get_subactions = action._get_subactions + except AttributeError: + pass + else: + self._indent() + for subaction in get_subactions(): + yield subaction + self._dedent() + + def _split_lines(self, text, width): + text = self._whitespace_matcher.sub(' ', text).strip() + return _textwrap.wrap(text, width) + + def _fill_text(self, text, width, indent): + text = self._whitespace_matcher.sub(' ', text).strip() + return _textwrap.fill(text, width, initial_indent=indent, + subsequent_indent=indent) + + def _get_help_string(self, action): + return action.help + + +class RawDescriptionHelpFormatter(HelpFormatter): + """Help message formatter which retains any formatting in descriptions. + + Only the name of this class is considered a public API. All the methods + provided by the class are considered an implementation detail. + """ + + def _fill_text(self, text, width, indent): + return ''.join([indent + line for line in text.splitlines(True)]) + + +class RawTextHelpFormatter(RawDescriptionHelpFormatter): + """Help message formatter which retains formatting of all help text. + + Only the name of this class is considered a public API. All the methods + provided by the class are considered an implementation detail. + """ + + def _split_lines(self, text, width): + return text.splitlines() + + +class ArgumentDefaultsHelpFormatter(HelpFormatter): + """Help message formatter which adds default values to argument help. + + Only the name of this class is considered a public API. All the methods + provided by the class are considered an implementation detail. + """ + + def _get_help_string(self, action): + help = action.help + if '%(default)' not in action.help: + if action.default is not SUPPRESS: + defaulting_nargs = [OPTIONAL, ZERO_OR_MORE] + if action.option_strings or action.nargs in defaulting_nargs: + help += ' (default: %(default)s)' + return help + + +# ===================== +# Options and Arguments +# ===================== + +def _get_action_name(argument): + if argument is None: + return None + elif argument.option_strings: + return '/'.join(argument.option_strings) + elif argument.metavar not in (None, SUPPRESS): + return argument.metavar + elif argument.dest not in (None, SUPPRESS): + return argument.dest + else: + return None + + +class ArgumentError(Exception): + """An error from creating or using an argument (optional or positional). + + The string value of this exception is the message, augmented with + information about the argument that caused it. + """ + + def __init__(self, argument, message): + self.argument_name = _get_action_name(argument) + self.message = message + + def __str__(self): + if self.argument_name is None: + format = '%(message)s' + else: + format = 'argument %(argument_name)s: %(message)s' + return format % dict(message=self.message, + argument_name=self.argument_name) + + +class ArgumentTypeError(Exception): + """An error from trying to convert a command line string to a type.""" + pass + + +# ============== +# Action classes +# ============== + +class Action(_AttributeHolder): + """Information about how to convert command line strings to Python objects. + + Action objects are used by an ArgumentParser to represent the information + needed to parse a single argument from one or more strings from the + command line. The keyword arguments to the Action constructor are also + all attributes of Action instances. + + Keyword Arguments: + + - option_strings -- A list of command-line option strings which + should be associated with this action. + + - dest -- The name of the attribute to hold the created object(s) + + - nargs -- The number of command-line arguments that should be + consumed. By default, one argument will be consumed and a single + value will be produced. Other values include: + - N (an integer) consumes N arguments (and produces a list) + - '?' consumes zero or one arguments + - '*' consumes zero or more arguments (and produces a list) + - '+' consumes one or more arguments (and produces a list) + Note that the difference between the default and nargs=1 is that + with the default, a single value will be produced, while with + nargs=1, a list containing a single value will be produced. + + - const -- The value to be produced if the option is specified and the + option uses an action that takes no values. + + - default -- The value to be produced if the option is not specified. + + - type -- The type which the command-line arguments should be converted + to, should be one of 'string', 'int', 'float', 'complex' or a + callable object that accepts a single string argument. If None, + 'string' is assumed. + + - choices -- A container of values that should be allowed. If not None, + after a command-line argument has been converted to the appropriate + type, an exception will be raised if it is not a member of this + collection. + + - required -- True if the action must always be specified at the + command line. This is only meaningful for optional command-line + arguments. + + - help -- The help string describing the argument. + + - metavar -- The name to be used for the option's argument with the + help string. If None, the 'dest' value will be used as the name. + """ + + def __init__(self, + option_strings, + dest, + nargs=None, + const=None, + default=None, + type=None, + choices=None, + required=False, + help=None, + metavar=None): + self.option_strings = option_strings + self.dest = dest + self.nargs = nargs + self.const = const + self.default = default + self.type = type + self.choices = choices + self.required = required + self.help = help + self.metavar = metavar + + def _get_kwargs(self): + names = [ + 'option_strings', + 'dest', + 'nargs', + 'const', + 'default', + 'type', + 'choices', + 'help', + 'metavar', + ] + return [(name, getattr(self, name)) for name in names] + + def __call__(self, parser, namespace, values, option_string=None): + raise NotImplementedError(_('.__call__() not defined')) + + +class _StoreAction(Action): + + def __init__(self, + option_strings, + dest, + nargs=None, + const=None, + default=None, + type=None, + choices=None, + required=False, + help=None, + metavar=None): + if nargs == 0: + raise ValueError('nargs for store actions must be > 0; if you ' + 'have nothing to store, actions such as store ' + 'true or store const may be more appropriate') + if const is not None and nargs != OPTIONAL: + raise ValueError('nargs must be %r to supply const' % OPTIONAL) + super(_StoreAction, self).__init__( + option_strings=option_strings, + dest=dest, + nargs=nargs, + const=const, + default=default, + type=type, + choices=choices, + required=required, + help=help, + metavar=metavar) + + def __call__(self, parser, namespace, values, option_string=None): + setattr(namespace, self.dest, values) + + +class _StoreConstAction(Action): + + def __init__(self, + option_strings, + dest, + const, + default=None, + required=False, + help=None, + metavar=None): + super(_StoreConstAction, self).__init__( + option_strings=option_strings, + dest=dest, + nargs=0, + const=const, + default=default, + required=required, + help=help) + + def __call__(self, parser, namespace, values, option_string=None): + setattr(namespace, self.dest, self.const) + + +class _StoreTrueAction(_StoreConstAction): + + def __init__(self, + option_strings, + dest, + default=False, + required=False, + help=None): + super(_StoreTrueAction, self).__init__( + option_strings=option_strings, + dest=dest, + const=True, + default=default, + required=required, + help=help) + + +class _StoreFalseAction(_StoreConstAction): + + def __init__(self, + option_strings, + dest, + default=True, + required=False, + help=None): + super(_StoreFalseAction, self).__init__( + option_strings=option_strings, + dest=dest, + const=False, + default=default, + required=required, + help=help) + + +class _AppendAction(Action): + + def __init__(self, + option_strings, + dest, + nargs=None, + const=None, + default=None, + type=None, + choices=None, + required=False, + help=None, + metavar=None): + if nargs == 0: + raise ValueError('nargs for append actions must be > 0; if arg ' + 'strings are not supplying the value to append, ' + 'the append const action may be more appropriate') + if const is not None and nargs != OPTIONAL: + raise ValueError('nargs must be %r to supply const' % OPTIONAL) + super(_AppendAction, self).__init__( + option_strings=option_strings, + dest=dest, + nargs=nargs, + const=const, + default=default, + type=type, + choices=choices, + required=required, + help=help, + metavar=metavar) + + def __call__(self, parser, namespace, values, option_string=None): + items = _copy.copy(_ensure_value(namespace, self.dest, [])) + items.append(values) + setattr(namespace, self.dest, items) + + +class _AppendConstAction(Action): + + def __init__(self, + option_strings, + dest, + const, + default=None, + required=False, + help=None, + metavar=None): + super(_AppendConstAction, self).__init__( + option_strings=option_strings, + dest=dest, + nargs=0, + const=const, + default=default, + required=required, + help=help, + metavar=metavar) + + def __call__(self, parser, namespace, values, option_string=None): + items = _copy.copy(_ensure_value(namespace, self.dest, [])) + items.append(self.const) + setattr(namespace, self.dest, items) + + +class _CountAction(Action): + + def __init__(self, + option_strings, + dest, + default=None, + required=False, + help=None): + super(_CountAction, self).__init__( + option_strings=option_strings, + dest=dest, + nargs=0, + default=default, + required=required, + help=help) + + def __call__(self, parser, namespace, values, option_string=None): + new_count = _ensure_value(namespace, self.dest, 0) + 1 + setattr(namespace, self.dest, new_count) + + +class _HelpAction(Action): + + def __init__(self, + option_strings, + dest=SUPPRESS, + default=SUPPRESS, + help=None): + super(_HelpAction, self).__init__( + option_strings=option_strings, + dest=dest, + default=default, + nargs=0, + help=help) + + def __call__(self, parser, namespace, values, option_string=None): + parser.print_help() + parser.exit() + + +class _VersionAction(Action): + + def __init__(self, + option_strings, + version=None, + dest=SUPPRESS, + default=SUPPRESS, + help=None): + super(_VersionAction, self).__init__( + option_strings=option_strings, + dest=dest, + default=default, + nargs=0, + help=help) + self.version = version + + def __call__(self, parser, namespace, values, option_string=None): + version = self.version + if version is None: + version = parser.version + formatter = parser._get_formatter() + formatter.add_text(version) + parser.exit(message=formatter.format_help()) + + +class _SubParsersAction(Action): + + class _ChoicesPseudoAction(Action): + + def __init__(self, name, help): + sup = super(_SubParsersAction._ChoicesPseudoAction, self) + sup.__init__(option_strings=[], dest=name, help=help) + + def __init__(self, + option_strings, + prog, + parser_class, + dest=SUPPRESS, + help=None, + metavar=None): + + self._prog_prefix = prog + self._parser_class = parser_class + self._name_parser_map = {} + self._choices_actions = [] + + super(_SubParsersAction, self).__init__( + option_strings=option_strings, + dest=dest, + nargs=PARSER, + choices=self._name_parser_map, + help=help, + metavar=metavar) + + def add_parser(self, name, **kwargs): + # set prog from the existing prefix + if kwargs.get('prog') is None: + kwargs['prog'] = '%s %s' % (self._prog_prefix, name) + + # create a pseudo-action to hold the choice help + if 'help' in kwargs: + help = kwargs.pop('help') + choice_action = self._ChoicesPseudoAction(name, help) + self._choices_actions.append(choice_action) + + # create the parser and add it to the map + parser = self._parser_class(**kwargs) + self._name_parser_map[name] = parser + return parser + + def _get_subactions(self): + return self._choices_actions + + def __call__(self, parser, namespace, values, option_string=None): + parser_name = values[0] + arg_strings = values[1:] + + # set the parser name if requested + if self.dest is not SUPPRESS: + setattr(namespace, self.dest, parser_name) + + # select the parser + try: + parser = self._name_parser_map[parser_name] + except KeyError: + tup = parser_name, ', '.join(self._name_parser_map) + msg = _('unknown parser %r (choices: %s)' % tup) + raise ArgumentError(self, msg) + + # parse all the remaining options into the namespace + parser.parse_args(arg_strings, namespace) + + +# ============== +# Type classes +# ============== + +class FileType(object): + """Factory for creating file object types + + Instances of FileType are typically passed as type= arguments to the + ArgumentParser add_argument() method. + + Keyword Arguments: + - mode -- A string indicating how the file is to be opened. Accepts the + same values as the builtin open() function. + - bufsize -- The file's desired buffer size. Accepts the same values as + the builtin open() function. + """ + + def __init__(self, mode='r', bufsize=None): + self._mode = mode + self._bufsize = bufsize + + def __call__(self, string): + # the special argument "-" means sys.std{in,out} + if string == '-': + if 'r' in self._mode: + return _sys.stdin + elif 'w' in self._mode: + return _sys.stdout + else: + msg = _('argument "-" with mode %r' % self._mode) + raise ValueError(msg) + + # all other arguments are used as file names + if self._bufsize: + return open(string, self._mode, self._bufsize) + else: + return open(string, self._mode) + + def __repr__(self): + args = [self._mode, self._bufsize] + args_str = ', '.join([repr(arg) for arg in args if arg is not None]) + return '%s(%s)' % (type(self).__name__, args_str) + +# =========================== +# Optional and Positional Parsing +# =========================== + +class Namespace(_AttributeHolder): + """Simple object for storing attributes. + + Implements equality by attribute names and values, and provides a simple + string representation. + """ + + def __init__(self, **kwargs): + for name in kwargs: + setattr(self, name, kwargs[name]) + + def __eq__(self, other): + return vars(self) == vars(other) + + def __ne__(self, other): + return not (self == other) + + def __contains__(self, key): + return key in self.__dict__ + + +class _ActionsContainer(object): + + def __init__(self, + description, + prefix_chars, + argument_default, + conflict_handler): + super(_ActionsContainer, self).__init__() + + self.description = description + self.argument_default = argument_default + self.prefix_chars = prefix_chars + self.conflict_handler = conflict_handler + + # set up registries + self._registries = {} + + # register actions + self.register('action', None, _StoreAction) + self.register('action', 'store', _StoreAction) + self.register('action', 'store_const', _StoreConstAction) + self.register('action', 'store_true', _StoreTrueAction) + self.register('action', 'store_false', _StoreFalseAction) + self.register('action', 'append', _AppendAction) + self.register('action', 'append_const', _AppendConstAction) + self.register('action', 'count', _CountAction) + self.register('action', 'help', _HelpAction) + self.register('action', 'version', _VersionAction) + self.register('action', 'parsers', _SubParsersAction) + + # raise an exception if the conflict handler is invalid + self._get_handler() + + # action storage + self._actions = [] + self._option_string_actions = {} + + # groups + self._action_groups = [] + self._mutually_exclusive_groups = [] + + # defaults storage + self._defaults = {} + + # determines whether an "option" looks like a negative number + self._negative_number_matcher = _re.compile(r'^-\d+$|^-\d*\.\d+$') + + # whether or not there are any optionals that look like negative + # numbers -- uses a list so it can be shared and edited + self._has_negative_number_optionals = [] + + # ==================== + # Registration methods + # ==================== + def register(self, registry_name, value, object): + registry = self._registries.setdefault(registry_name, {}) + registry[value] = object + + def _registry_get(self, registry_name, value, default=None): + return self._registries[registry_name].get(value, default) + + # ================================== + # Namespace default accessor methods + # ================================== + def set_defaults(self, **kwargs): + self._defaults.update(kwargs) + + # if these defaults match any existing arguments, replace + # the previous default on the object with the new one + for action in self._actions: + if action.dest in kwargs: + action.default = kwargs[action.dest] + + def get_default(self, dest): + for action in self._actions: + if action.dest == dest and action.default is not None: + return action.default + return self._defaults.get(dest, None) + + + # ======================= + # Adding argument actions + # ======================= + def add_argument(self, *args, **kwargs): + """ + add_argument(dest, ..., name=value, ...) + add_argument(option_string, option_string, ..., name=value, ...) + """ + + # if no positional args are supplied or only one is supplied and + # it doesn't look like an option string, parse a positional + # argument + chars = self.prefix_chars + if not args or len(args) == 1 and args[0][0] not in chars: + if args and 'dest' in kwargs: + raise ValueError('dest supplied twice for positional argument') + kwargs = self._get_positional_kwargs(*args, **kwargs) + + # otherwise, we're adding an optional argument + else: + kwargs = self._get_optional_kwargs(*args, **kwargs) + + # if no default was supplied, use the parser-level default + if 'default' not in kwargs: + dest = kwargs['dest'] + if dest in self._defaults: + kwargs['default'] = self._defaults[dest] + elif self.argument_default is not None: + kwargs['default'] = self.argument_default + + # create the action object, and add it to the parser + action_class = self._pop_action_class(kwargs) + if not _callable(action_class): + raise ValueError('unknown action "%s"' % action_class) + action = action_class(**kwargs) + + # raise an error if the action type is not callable + type_func = self._registry_get('type', action.type, action.type) + if not _callable(type_func): + raise ValueError('%r is not callable' % type_func) + + return self._add_action(action) + + def add_argument_group(self, *args, **kwargs): + group = _ArgumentGroup(self, *args, **kwargs) + self._action_groups.append(group) + return group + + def add_mutually_exclusive_group(self, **kwargs): + group = _MutuallyExclusiveGroup(self, **kwargs) + self._mutually_exclusive_groups.append(group) + return group + + def _add_action(self, action): + # resolve any conflicts + self._check_conflict(action) + + # add to actions list + self._actions.append(action) + action.container = self + + # index the action by any option strings it has + for option_string in action.option_strings: + self._option_string_actions[option_string] = action + + # set the flag if any option strings look like negative numbers + for option_string in action.option_strings: + if self._negative_number_matcher.match(option_string): + if not self._has_negative_number_optionals: + self._has_negative_number_optionals.append(True) + + # return the created action + return action + + def _remove_action(self, action): + self._actions.remove(action) + + def _add_container_actions(self, container): + # collect groups by titles + title_group_map = {} + for group in self._action_groups: + if group.title in title_group_map: + msg = _('cannot merge actions - two groups are named %r') + raise ValueError(msg % (group.title)) + title_group_map[group.title] = group + + # map each action to its group + group_map = {} + for group in container._action_groups: + + # if a group with the title exists, use that, otherwise + # create a new group matching the container's group + if group.title not in title_group_map: + title_group_map[group.title] = self.add_argument_group( + title=group.title, + description=group.description, + conflict_handler=group.conflict_handler) + + # map the actions to their new group + for action in group._group_actions: + group_map[action] = title_group_map[group.title] + + # add container's mutually exclusive groups + # NOTE: if add_mutually_exclusive_group ever gains title= and + # description= then this code will need to be expanded as above + for group in container._mutually_exclusive_groups: + mutex_group = self.add_mutually_exclusive_group( + required=group.required) + + # map the actions to their new mutex group + for action in group._group_actions: + group_map[action] = mutex_group + + # add all actions to this container or their group + for action in container._actions: + group_map.get(action, self)._add_action(action) + + def _get_positional_kwargs(self, dest, **kwargs): + # make sure required is not specified + if 'required' in kwargs: + msg = _("'required' is an invalid argument for positionals") + raise TypeError(msg) + + # mark positional arguments as required if at least one is + # always required + if kwargs.get('nargs') not in [OPTIONAL, ZERO_OR_MORE]: + kwargs['required'] = True + if kwargs.get('nargs') == ZERO_OR_MORE and 'default' not in kwargs: + kwargs['required'] = True + + # return the keyword arguments with no option strings + return dict(kwargs, dest=dest, option_strings=[]) + + def _get_optional_kwargs(self, *args, **kwargs): + # determine short and long option strings + option_strings = [] + long_option_strings = [] + for option_string in args: + # error on strings that don't start with an appropriate prefix + if not option_string[0] in self.prefix_chars: + msg = _('invalid option string %r: ' + 'must start with a character %r') + tup = option_string, self.prefix_chars + raise ValueError(msg % tup) + + # strings starting with two prefix characters are long options + option_strings.append(option_string) + if option_string[0] in self.prefix_chars: + if len(option_string) > 1: + if option_string[1] in self.prefix_chars: + long_option_strings.append(option_string) + + # infer destination, '--foo-bar' -> 'foo_bar' and '-x' -> 'x' + dest = kwargs.pop('dest', None) + if dest is None: + if long_option_strings: + dest_option_string = long_option_strings[0] + else: + dest_option_string = option_strings[0] + dest = dest_option_string.lstrip(self.prefix_chars) + if not dest: + msg = _('dest= is required for options like %r') + raise ValueError(msg % option_string) + dest = dest.replace('-', '_') + + # return the updated keyword arguments + return dict(kwargs, dest=dest, option_strings=option_strings) + + def _pop_action_class(self, kwargs, default=None): + action = kwargs.pop('action', default) + return self._registry_get('action', action, action) + + def _get_handler(self): + # determine function from conflict handler string + handler_func_name = '_handle_conflict_%s' % self.conflict_handler + try: + return getattr(self, handler_func_name) + except AttributeError: + msg = _('invalid conflict_resolution value: %r') + raise ValueError(msg % self.conflict_handler) + + def _check_conflict(self, action): + + # find all options that conflict with this option + confl_optionals = [] + for option_string in action.option_strings: + if option_string in self._option_string_actions: + confl_optional = self._option_string_actions[option_string] + confl_optionals.append((option_string, confl_optional)) + + # resolve any conflicts + if confl_optionals: + conflict_handler = self._get_handler() + conflict_handler(action, confl_optionals) + + def _handle_conflict_error(self, action, conflicting_actions): + message = _('conflicting option string(s): %s') + conflict_string = ', '.join([option_string + for option_string, action + in conflicting_actions]) + raise ArgumentError(action, message % conflict_string) + + def _handle_conflict_resolve(self, action, conflicting_actions): + + # remove all conflicting options + for option_string, action in conflicting_actions: + + # remove the conflicting option + action.option_strings.remove(option_string) + self._option_string_actions.pop(option_string, None) + + # if the option now has no option string, remove it from the + # container holding it + if not action.option_strings: + action.container._remove_action(action) + + +class _ArgumentGroup(_ActionsContainer): + + def __init__(self, container, title=None, description=None, **kwargs): + # add any missing keyword arguments by checking the container + update = kwargs.setdefault + update('conflict_handler', container.conflict_handler) + update('prefix_chars', container.prefix_chars) + update('argument_default', container.argument_default) + super_init = super(_ArgumentGroup, self).__init__ + super_init(description=description, **kwargs) + + # group attributes + self.title = title + self._group_actions = [] + + # share most attributes with the container + self._registries = container._registries + self._actions = container._actions + self._option_string_actions = container._option_string_actions + self._defaults = container._defaults + self._has_negative_number_optionals = \ + container._has_negative_number_optionals + + def _add_action(self, action): + action = super(_ArgumentGroup, self)._add_action(action) + self._group_actions.append(action) + return action + + def _remove_action(self, action): + super(_ArgumentGroup, self)._remove_action(action) + self._group_actions.remove(action) + + +class _MutuallyExclusiveGroup(_ArgumentGroup): + + def __init__(self, container, required=False): + super(_MutuallyExclusiveGroup, self).__init__(container) + self.required = required + self._container = container + + def _add_action(self, action): + if action.required: + msg = _('mutually exclusive arguments must be optional') + raise ValueError(msg) + action = self._container._add_action(action) + self._group_actions.append(action) + return action + + def _remove_action(self, action): + self._container._remove_action(action) + self._group_actions.remove(action) + + +class ArgumentParser(_AttributeHolder, _ActionsContainer): + """Object for parsing command line strings into Python objects. + + Keyword Arguments: + - prog -- The name of the program (default: sys.argv[0]) + - usage -- A usage message (default: auto-generated from arguments) + - description -- A description of what the program does + - epilog -- Text following the argument descriptions + - parents -- Parsers whose arguments should be copied into this one + - formatter_class -- HelpFormatter class for printing help messages + - prefix_chars -- Characters that prefix optional arguments + - fromfile_prefix_chars -- Characters that prefix files containing + additional arguments + - argument_default -- The default value for all arguments + - conflict_handler -- String indicating how to handle conflicts + - add_help -- Add a -h/-help option + """ + + def __init__(self, + prog=None, + usage=None, + description=None, + epilog=None, + version=None, + parents=[], + formatter_class=HelpFormatter, + prefix_chars='-', + fromfile_prefix_chars=None, + argument_default=None, + conflict_handler='error', + add_help=True): + + if version is not None: + import warnings + warnings.warn( + """The "version" argument to ArgumentParser is deprecated. """ + """Please use """ + """"add_argument(..., action='version', version="N", ...)" """ + """instead""", DeprecationWarning) + + superinit = super(ArgumentParser, self).__init__ + superinit(description=description, + prefix_chars=prefix_chars, + argument_default=argument_default, + conflict_handler=conflict_handler) + + # default setting for prog + if prog is None: + prog = _os.path.basename(_sys.argv[0]) + + self.prog = prog + self.usage = usage + self.epilog = epilog + self.version = version + self.formatter_class = formatter_class + self.fromfile_prefix_chars = fromfile_prefix_chars + self.add_help = add_help + + add_group = self.add_argument_group + self._positionals = add_group(_('positional arguments')) + self._optionals = add_group(_('optional arguments')) + self._subparsers = None + + # register types + def identity(string): + return string + self.register('type', None, identity) + + # add help and version arguments if necessary + # (using explicit default to override global argument_default) + if self.add_help: + self.add_argument( + '-h', '--help', action='help', default=SUPPRESS, + help=_('show this help message and exit')) + if self.version: + self.add_argument( + '-v', '--version', action='version', default=SUPPRESS, + version=self.version, + help=_("show program's version number and exit")) + + # add parent arguments and defaults + for parent in parents: + self._add_container_actions(parent) + try: + defaults = parent._defaults + except AttributeError: + pass + else: + self._defaults.update(defaults) + + # ======================= + # Pretty __repr__ methods + # ======================= + def _get_kwargs(self): + names = [ + 'prog', + 'usage', + 'description', + 'version', + 'formatter_class', + 'conflict_handler', + 'add_help', + ] + return [(name, getattr(self, name)) for name in names] + + # ================================== + # Optional/Positional adding methods + # ================================== + def add_subparsers(self, **kwargs): + if self._subparsers is not None: + self.error(_('cannot have multiple subparser arguments')) + + # add the parser class to the arguments if it's not present + kwargs.setdefault('parser_class', type(self)) + + if 'title' in kwargs or 'description' in kwargs: + title = _(kwargs.pop('title', 'subcommands')) + description = _(kwargs.pop('description', None)) + self._subparsers = self.add_argument_group(title, description) + else: + self._subparsers = self._positionals + + # prog defaults to the usage message of this parser, skipping + # optional arguments and with no "usage:" prefix + if kwargs.get('prog') is None: + formatter = self._get_formatter() + positionals = self._get_positional_actions() + groups = self._mutually_exclusive_groups + formatter.add_usage(self.usage, positionals, groups, '') + kwargs['prog'] = formatter.format_help().strip() + + # create the parsers action and add it to the positionals list + parsers_class = self._pop_action_class(kwargs, 'parsers') + action = parsers_class(option_strings=[], **kwargs) + self._subparsers._add_action(action) + + # return the created parsers action + return action + + def _add_action(self, action): + if action.option_strings: + self._optionals._add_action(action) + else: + self._positionals._add_action(action) + return action + + def _get_optional_actions(self): + return [action + for action in self._actions + if action.option_strings] + + def _get_positional_actions(self): + return [action + for action in self._actions + if not action.option_strings] + + # ===================================== + # Command line argument parsing methods + # ===================================== + def parse_args(self, args=None, namespace=None): + args, argv = self.parse_known_args(args, namespace) + if argv: + msg = _('unrecognized arguments: %s') + self.error(msg % ' '.join(argv)) + return args + + def parse_known_args(self, args=None, namespace=None): + # args default to the system args + if args is None: + args = _sys.argv[1:] + + # default Namespace built from parser defaults + if namespace is None: + namespace = Namespace() + + # add any action defaults that aren't present + for action in self._actions: + if action.dest is not SUPPRESS: + if not hasattr(namespace, action.dest): + if action.default is not SUPPRESS: + default = action.default + if isinstance(action.default, _basestring): + default = self._get_value(action, default) + setattr(namespace, action.dest, default) + + # add any parser defaults that aren't present + for dest in self._defaults: + if not hasattr(namespace, dest): + setattr(namespace, dest, self._defaults[dest]) + + # parse the arguments and exit if there are any errors + try: + return self._parse_known_args(args, namespace) + except ArgumentError: + err = _sys.exc_info()[1] + self.error(str(err)) + + def _parse_known_args(self, arg_strings, namespace): + # replace arg strings that are file references + if self.fromfile_prefix_chars is not None: + arg_strings = self._read_args_from_files(arg_strings) + + # map all mutually exclusive arguments to the other arguments + # they can't occur with + action_conflicts = {} + for mutex_group in self._mutually_exclusive_groups: + group_actions = mutex_group._group_actions + for i, mutex_action in enumerate(mutex_group._group_actions): + conflicts = action_conflicts.setdefault(mutex_action, []) + conflicts.extend(group_actions[:i]) + conflicts.extend(group_actions[i + 1:]) + + # find all option indices, and determine the arg_string_pattern + # which has an 'O' if there is an option at an index, + # an 'A' if there is an argument, or a '-' if there is a '--' + option_string_indices = {} + arg_string_pattern_parts = [] + arg_strings_iter = iter(arg_strings) + for i, arg_string in enumerate(arg_strings_iter): + + # all args after -- are non-options + if arg_string == '--': + arg_string_pattern_parts.append('-') + for arg_string in arg_strings_iter: + arg_string_pattern_parts.append('A') + + # otherwise, add the arg to the arg strings + # and note the index if it was an option + else: + option_tuple = self._parse_optional(arg_string) + if option_tuple is None: + pattern = 'A' + else: + option_string_indices[i] = option_tuple + pattern = 'O' + arg_string_pattern_parts.append(pattern) + + # join the pieces together to form the pattern + arg_strings_pattern = ''.join(arg_string_pattern_parts) + + # converts arg strings to the appropriate and then takes the action + seen_actions = _set() + seen_non_default_actions = _set() + + def take_action(action, argument_strings, option_string=None): + seen_actions.add(action) + argument_values = self._get_values(action, argument_strings) + + # error if this argument is not allowed with other previously + # seen arguments, assuming that actions that use the default + # value don't really count as "present" + if argument_values is not action.default: + seen_non_default_actions.add(action) + for conflict_action in action_conflicts.get(action, []): + if conflict_action in seen_non_default_actions: + msg = _('not allowed with argument %s') + action_name = _get_action_name(conflict_action) + raise ArgumentError(action, msg % action_name) + + # take the action if we didn't receive a SUPPRESS value + # (e.g. from a default) + if argument_values is not SUPPRESS: + action(self, namespace, argument_values, option_string) + + # function to convert arg_strings into an optional action + def consume_optional(start_index): + + # get the optional identified at this index + option_tuple = option_string_indices[start_index] + action, option_string, explicit_arg = option_tuple + + # identify additional optionals in the same arg string + # (e.g. -xyz is the same as -x -y -z if no args are required) + match_argument = self._match_argument + action_tuples = [] + while True: + + # if we found no optional action, skip it + if action is None: + extras.append(arg_strings[start_index]) + return start_index + 1 + + # if there is an explicit argument, try to match the + # optional's string arguments to only this + if explicit_arg is not None: + arg_count = match_argument(action, 'A') + + # if the action is a single-dash option and takes no + # arguments, try to parse more single-dash options out + # of the tail of the option string + chars = self.prefix_chars + if arg_count == 0 and option_string[1] not in chars: + action_tuples.append((action, [], option_string)) + for char in self.prefix_chars: + option_string = char + explicit_arg[0] + explicit_arg = explicit_arg[1:] or None + optionals_map = self._option_string_actions + if option_string in optionals_map: + action = optionals_map[option_string] + break + else: + msg = _('ignored explicit argument %r') + raise ArgumentError(action, msg % explicit_arg) + + # if the action expect exactly one argument, we've + # successfully matched the option; exit the loop + elif arg_count == 1: + stop = start_index + 1 + args = [explicit_arg] + action_tuples.append((action, args, option_string)) + break + + # error if a double-dash option did not use the + # explicit argument + else: + msg = _('ignored explicit argument %r') + raise ArgumentError(action, msg % explicit_arg) + + # if there is no explicit argument, try to match the + # optional's string arguments with the following strings + # if successful, exit the loop + else: + start = start_index + 1 + selected_patterns = arg_strings_pattern[start:] + arg_count = match_argument(action, selected_patterns) + stop = start + arg_count + args = arg_strings[start:stop] + action_tuples.append((action, args, option_string)) + break + + # add the Optional to the list and return the index at which + # the Optional's string args stopped + assert action_tuples + for action, args, option_string in action_tuples: + take_action(action, args, option_string) + return stop + + # the list of Positionals left to be parsed; this is modified + # by consume_positionals() + positionals = self._get_positional_actions() + + # function to convert arg_strings into positional actions + def consume_positionals(start_index): + # match as many Positionals as possible + match_partial = self._match_arguments_partial + selected_pattern = arg_strings_pattern[start_index:] + arg_counts = match_partial(positionals, selected_pattern) + + # slice off the appropriate arg strings for each Positional + # and add the Positional and its args to the list + for action, arg_count in zip(positionals, arg_counts): + args = arg_strings[start_index: start_index + arg_count] + start_index += arg_count + take_action(action, args) + + # slice off the Positionals that we just parsed and return the + # index at which the Positionals' string args stopped + positionals[:] = positionals[len(arg_counts):] + return start_index + + # consume Positionals and Optionals alternately, until we have + # passed the last option string + extras = [] + start_index = 0 + if option_string_indices: + max_option_string_index = max(option_string_indices) + else: + max_option_string_index = -1 + while start_index <= max_option_string_index: + + # consume any Positionals preceding the next option + next_option_string_index = min([ + index + for index in option_string_indices + if index >= start_index]) + if start_index != next_option_string_index: + positionals_end_index = consume_positionals(start_index) + + # only try to parse the next optional if we didn't consume + # the option string during the positionals parsing + if positionals_end_index > start_index: + start_index = positionals_end_index + continue + else: + start_index = positionals_end_index + + # if we consumed all the positionals we could and we're not + # at the index of an option string, there were extra arguments + if start_index not in option_string_indices: + strings = arg_strings[start_index:next_option_string_index] + extras.extend(strings) + start_index = next_option_string_index + + # consume the next optional and any arguments for it + start_index = consume_optional(start_index) + + # consume any positionals following the last Optional + stop_index = consume_positionals(start_index) + + # if we didn't consume all the argument strings, there were extras + extras.extend(arg_strings[stop_index:]) + + # if we didn't use all the Positional objects, there were too few + # arg strings supplied. + if positionals: + self.error(_('too few arguments')) + + # make sure all required actions were present + for action in self._actions: + if action.required: + if action not in seen_actions: + name = _get_action_name(action) + self.error(_('argument %s is required') % name) + + # make sure all required groups had one option present + for group in self._mutually_exclusive_groups: + if group.required: + for action in group._group_actions: + if action in seen_non_default_actions: + break + + # if no actions were used, report the error + else: + names = [_get_action_name(action) + for action in group._group_actions + if action.help is not SUPPRESS] + msg = _('one of the arguments %s is required') + self.error(msg % ' '.join(names)) + + # return the updated namespace and the extra arguments + return namespace, extras + + def _read_args_from_files(self, arg_strings): + # expand arguments referencing files + new_arg_strings = [] + for arg_string in arg_strings: + + # for regular arguments, just add them back into the list + if arg_string[0] not in self.fromfile_prefix_chars: + new_arg_strings.append(arg_string) + + # replace arguments referencing files with the file content + else: + try: + args_file = open(arg_string[1:]) + try: + arg_strings = [] + for arg_line in args_file.read().splitlines(): + for arg in self.convert_arg_line_to_args(arg_line): + arg_strings.append(arg) + arg_strings = self._read_args_from_files(arg_strings) + new_arg_strings.extend(arg_strings) + finally: + args_file.close() + except IOError: + err = _sys.exc_info()[1] + self.error(str(err)) + + # return the modified argument list + return new_arg_strings + + def convert_arg_line_to_args(self, arg_line): + return [arg_line] + + def _match_argument(self, action, arg_strings_pattern): + # match the pattern for this action to the arg strings + nargs_pattern = self._get_nargs_pattern(action) + match = _re.match(nargs_pattern, arg_strings_pattern) + + # raise an exception if we weren't able to find a match + if match is None: + nargs_errors = { + None: _('expected one argument'), + OPTIONAL: _('expected at most one argument'), + ONE_OR_MORE: _('expected at least one argument'), + } + default = _('expected %s argument(s)') % action.nargs + msg = nargs_errors.get(action.nargs, default) + raise ArgumentError(action, msg) + + # return the number of arguments matched + return len(match.group(1)) + + def _match_arguments_partial(self, actions, arg_strings_pattern): + # progressively shorten the actions list by slicing off the + # final actions until we find a match + result = [] + for i in range(len(actions), 0, -1): + actions_slice = actions[:i] + pattern = ''.join([self._get_nargs_pattern(action) + for action in actions_slice]) + match = _re.match(pattern, arg_strings_pattern) + if match is not None: + result.extend([len(string) for string in match.groups()]) + break + + # return the list of arg string counts + return result + + def _parse_optional(self, arg_string): + # if it's an empty string, it was meant to be a positional + if not arg_string: + return None + + # if it doesn't start with a prefix, it was meant to be positional + if not arg_string[0] in self.prefix_chars: + return None + + # if the option string is present in the parser, return the action + if arg_string in self._option_string_actions: + action = self._option_string_actions[arg_string] + return action, arg_string, None + + # if it's just a single character, it was meant to be positional + if len(arg_string) == 1: + return None + + # if the option string before the "=" is present, return the action + if '=' in arg_string: + option_string, explicit_arg = arg_string.split('=', 1) + if option_string in self._option_string_actions: + action = self._option_string_actions[option_string] + return action, option_string, explicit_arg + + # search through all possible prefixes of the option string + # and all actions in the parser for possible interpretations + option_tuples = self._get_option_tuples(arg_string) + + # if multiple actions match, the option string was ambiguous + if len(option_tuples) > 1: + options = ', '.join([option_string + for action, option_string, explicit_arg in option_tuples]) + tup = arg_string, options + self.error(_('ambiguous option: %s could match %s') % tup) + + # if exactly one action matched, this segmentation is good, + # so return the parsed action + elif len(option_tuples) == 1: + option_tuple, = option_tuples + return option_tuple + + # if it was not found as an option, but it looks like a negative + # number, it was meant to be positional + # unless there are negative-number-like options + if self._negative_number_matcher.match(arg_string): + if not self._has_negative_number_optionals: + return None + + # if it contains a space, it was meant to be a positional + if ' ' in arg_string: + return None + + # it was meant to be an optional but there is no such option + # in this parser (though it might be a valid option in a subparser) + return None, arg_string, None + + def _get_option_tuples(self, option_string): + result = [] + + # option strings starting with two prefix characters are only + # split at the '=' + chars = self.prefix_chars + if option_string[0] in chars and option_string[1] in chars: + if '=' in option_string: + option_prefix, explicit_arg = option_string.split('=', 1) + else: + option_prefix = option_string + explicit_arg = None + for option_string in self._option_string_actions: + if option_string.startswith(option_prefix): + action = self._option_string_actions[option_string] + tup = action, option_string, explicit_arg + result.append(tup) + + # single character options can be concatenated with their arguments + # but multiple character options always have to have their argument + # separate + elif option_string[0] in chars and option_string[1] not in chars: + option_prefix = option_string + explicit_arg = None + short_option_prefix = option_string[:2] + short_explicit_arg = option_string[2:] + + for option_string in self._option_string_actions: + if option_string == short_option_prefix: + action = self._option_string_actions[option_string] + tup = action, option_string, short_explicit_arg + result.append(tup) + elif option_string.startswith(option_prefix): + action = self._option_string_actions[option_string] + tup = action, option_string, explicit_arg + result.append(tup) + + # shouldn't ever get here + else: + self.error(_('unexpected option string: %s') % option_string) + + # return the collected option tuples + return result + + def _get_nargs_pattern(self, action): + # in all examples below, we have to allow for '--' args + # which are represented as '-' in the pattern + nargs = action.nargs + + # the default (None) is assumed to be a single argument + if nargs is None: + nargs_pattern = '(-*A-*)' + + # allow zero or one arguments + elif nargs == OPTIONAL: + nargs_pattern = '(-*A?-*)' + + # allow zero or more arguments + elif nargs == ZERO_OR_MORE: + nargs_pattern = '(-*[A-]*)' + + # allow one or more arguments + elif nargs == ONE_OR_MORE: + nargs_pattern = '(-*A[A-]*)' + + # allow any number of options or arguments + elif nargs == REMAINDER: + nargs_pattern = '([-AO]*)' + + # allow one argument followed by any number of options or arguments + elif nargs == PARSER: + nargs_pattern = '(-*A[-AO]*)' + + # all others should be integers + else: + nargs_pattern = '(-*%s-*)' % '-*'.join('A' * nargs) + + # if this is an optional action, -- is not allowed + if action.option_strings: + nargs_pattern = nargs_pattern.replace('-*', '') + nargs_pattern = nargs_pattern.replace('-', '') + + # return the pattern + return nargs_pattern + + # ======================== + # Value conversion methods + # ======================== + def _get_values(self, action, arg_strings): + # for everything but PARSER args, strip out '--' + if action.nargs not in [PARSER, REMAINDER]: + arg_strings = [s for s in arg_strings if s != '--'] + + # optional argument produces a default when not present + if not arg_strings and action.nargs == OPTIONAL: + if action.option_strings: + value = action.const + else: + value = action.default + if isinstance(value, _basestring): + value = self._get_value(action, value) + self._check_value(action, value) + + # when nargs='*' on a positional, if there were no command-line + # args, use the default if it is anything other than None + elif (not arg_strings and action.nargs == ZERO_OR_MORE and + not action.option_strings): + if action.default is not None: + value = action.default + else: + value = arg_strings + self._check_value(action, value) + + # single argument or optional argument produces a single value + elif len(arg_strings) == 1 and action.nargs in [None, OPTIONAL]: + arg_string, = arg_strings + value = self._get_value(action, arg_string) + self._check_value(action, value) + + # REMAINDER arguments convert all values, checking none + elif action.nargs == REMAINDER: + value = [self._get_value(action, v) for v in arg_strings] + + # PARSER arguments convert all values, but check only the first + elif action.nargs == PARSER: + value = [self._get_value(action, v) for v in arg_strings] + self._check_value(action, value[0]) + + # all other types of nargs produce a list + else: + value = [self._get_value(action, v) for v in arg_strings] + for v in value: + self._check_value(action, v) + + # return the converted value + return value + + def _get_value(self, action, arg_string): + type_func = self._registry_get('type', action.type, action.type) + if not _callable(type_func): + msg = _('%r is not callable') + raise ArgumentError(action, msg % type_func) + + # convert the value to the appropriate type + try: + result = type_func(arg_string) + + # ArgumentTypeErrors indicate errors + except ArgumentTypeError: + name = getattr(action.type, '__name__', repr(action.type)) + msg = str(_sys.exc_info()[1]) + raise ArgumentError(action, msg) + + # TypeErrors or ValueErrors also indicate errors + except (TypeError, ValueError): + name = getattr(action.type, '__name__', repr(action.type)) + msg = _('invalid %s value: %r') + raise ArgumentError(action, msg % (name, arg_string)) + + # return the converted value + return result + + def _check_value(self, action, value): + # converted value must be one of the choices (if specified) + if action.choices is not None and value not in action.choices: + tup = value, ', '.join(map(repr, action.choices)) + msg = _('invalid choice: %r (choose from %s)') % tup + raise ArgumentError(action, msg) + + # ======================= + # Help-formatting methods + # ======================= + def format_usage(self): + formatter = self._get_formatter() + formatter.add_usage(self.usage, self._actions, + self._mutually_exclusive_groups) + return formatter.format_help() + + def format_help(self): + formatter = self._get_formatter() + + # usage + formatter.add_usage(self.usage, self._actions, + self._mutually_exclusive_groups) + + # description + formatter.add_text(self.description) + + # positionals, optionals and user-defined groups + for action_group in self._action_groups: + formatter.start_section(action_group.title) + formatter.add_text(action_group.description) + formatter.add_arguments(action_group._group_actions) + formatter.end_section() + + # epilog + formatter.add_text(self.epilog) + + # determine help from format above + return formatter.format_help() + + def format_version(self): + import warnings + warnings.warn( + 'The format_version method is deprecated -- the "version" ' + 'argument to ArgumentParser is no longer supported.', + DeprecationWarning) + formatter = self._get_formatter() + formatter.add_text(self.version) + return formatter.format_help() + + def _get_formatter(self): + return self.formatter_class(prog=self.prog) + + # ===================== + # Help-printing methods + # ===================== + def print_usage(self, file=None): + if file is None: + file = _sys.stdout + self._print_message(self.format_usage(), file) + + def print_help(self, file=None): + if file is None: + file = _sys.stdout + self._print_message(self.format_help(), file) + + def print_version(self, file=None): + import warnings + warnings.warn( + 'The print_version method is deprecated -- the "version" ' + 'argument to ArgumentParser is no longer supported.', + DeprecationWarning) + self._print_message(self.format_version(), file) + + def _print_message(self, message, file=None): + if message: + if file is None: + file = _sys.stderr + file.write(message) + + # =============== + # Exiting methods + # =============== + def exit(self, status=0, message=None): + if message: + self._print_message(message, _sys.stderr) + _sys.exit(status) + + def error(self, message): + """error(message: string) + + Prints a usage message incorporating the message to stderr and + exits. + + If you override this in a subclass, it should not return -- it + should either exit or raise an exception. + """ + self.print_usage(_sys.stderr) + self.exit(2, _('%s: error: %s\n') % (self.prog, message)) Modified: python/trunk/Lib/test/test_argparse.py ============================================================================== --- python/trunk/Lib/test/test_argparse.py (original) +++ python/trunk/Lib/test/test_argparse.py Tue Mar 2 23:05:59 2010 @@ -1,4206 +1,4206 @@ -# -*- coding: utf-8 -*- - -# Copyright ? 2006-2009 Steven J. Bethard . -# -# Licensed under the Apache License, Version 2.0 (the "License"); you may not -# use this file except in compliance with the License. You may obtain a copy -# of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT -# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the -# License for the specific language governing permissions and limitations -# under the License. - -import codecs -import os -import shutil -import sys -import textwrap -import tempfile -import unittest -import argparse - -try: - from StringIO import StringIO -except ImportError: - from io import StringIO - -try: - set -except NameError: - from sets import Set as set - -try: - sorted -except NameError: - - def sorted(iterable, reverse=False): - result = list(iterable) - result.sort() - if reverse: - result.reverse() - return result - -# silence Python 2.6 buggy warnings about Exception.message -if sys.version_info[:2] == (2, 6): - import warnings - warnings.filterwarnings( - action='ignore', - message='BaseException.message has been deprecated as of Python 2.6', - category=DeprecationWarning) - -# silence warnings about version argument - these are expected -import warnings -warnings.filterwarnings( - action='ignore', - message='The "version" argument to ArgumentParser is deprecated.', - category=DeprecationWarning) -warnings.filterwarnings( - action='ignore', - message='The format_version method is deprecated', - category=DeprecationWarning) -warnings.filterwarnings( - action='ignore', - message='The print_version method is deprecated', - category=DeprecationWarning) - - -class TestCase(unittest.TestCase): - - def assertEqual(self, obj1, obj2): - if obj1 != obj2: - print('') - print(repr(obj1)) - print(repr(obj2)) - print(obj1) - print(obj2) - super(TestCase, self).assertEqual(obj1, obj2) - - -class TempDirMixin(object): - - def setUp(self): - self.temp_dir = tempfile.mkdtemp() - self.old_dir = os.getcwd() - os.chdir(self.temp_dir) - - def tearDown(self): - os.chdir(self.old_dir) - while True: - try: - shutil.rmtree(self.temp_dir) - except WindowsError: - continue - else: - break - - -class Sig(object): - - def __init__(self, *args, **kwargs): - self.args = args - self.kwargs = kwargs - - -class NS(object): - - def __init__(self, **kwargs): - self.__dict__.update(kwargs) - - def __repr__(self): - sorted_items = sorted(self.__dict__.items()) - kwarg_str = ', '.join(['%s=%r' % tup for tup in sorted_items]) - return '%s(%s)' % (type(self).__name__, kwarg_str) - - def __eq__(self, other): - return vars(self) == vars(other) - - def __ne__(self, other): - return not (self == other) - - -class ArgumentParserError(Exception): - - def __init__(self, message, stdout=None, stderr=None, error_code=None): - Exception.__init__(self, message, stdout, stderr) - self.message = message - self.stdout = stdout - self.stderr = stderr - self.error_code = error_code - - -def stderr_to_parser_error(parse_args, *args, **kwargs): - # if this is being called recursively and stderr or stdout is already being - # redirected, simply call the function and let the enclosing function - # catch the exception - if isinstance(sys.stderr, StringIO) or isinstance(sys.stdout, StringIO): - return parse_args(*args, **kwargs) - - # if this is not being called recursively, redirect stderr and - # use it as the ArgumentParserError message - old_stdout = sys.stdout - old_stderr = sys.stderr - sys.stdout = StringIO() - sys.stderr = StringIO() - try: - try: - result = parse_args(*args, **kwargs) - for key in list(vars(result)): - if getattr(result, key) is sys.stdout: - setattr(result, key, old_stdout) - if getattr(result, key) is sys.stderr: - setattr(result, key, old_stderr) - return result - except SystemExit: - code = sys.exc_info()[1].code - stdout = sys.stdout.getvalue() - stderr = sys.stderr.getvalue() - raise ArgumentParserError("SystemExit", stdout, stderr, code) - finally: - sys.stdout = old_stdout - sys.stderr = old_stderr - - -class ErrorRaisingArgumentParser(argparse.ArgumentParser): - - def parse_args(self, *args, **kwargs): - parse_args = super(ErrorRaisingArgumentParser, self).parse_args - return stderr_to_parser_error(parse_args, *args, **kwargs) - - def exit(self, *args, **kwargs): - exit = super(ErrorRaisingArgumentParser, self).exit - return stderr_to_parser_error(exit, *args, **kwargs) - - def error(self, *args, **kwargs): - error = super(ErrorRaisingArgumentParser, self).error - return stderr_to_parser_error(error, *args, **kwargs) - - -class ParserTesterMetaclass(type): - """Adds parser tests using the class attributes. - - Classes of this type should specify the following attributes: - - argument_signatures -- a list of Sig objects which specify - the signatures of Argument objects to be created - failures -- a list of args lists that should cause the parser - to fail - successes -- a list of (initial_args, options, remaining_args) tuples - where initial_args specifies the string args to be parsed, - options is a dict that should match the vars() of the options - parsed out of initial_args, and remaining_args should be any - remaining unparsed arguments - """ - - def __init__(cls, name, bases, bodydict): - if name == 'ParserTestCase': - return - - # default parser signature is empty - if not hasattr(cls, 'parser_signature'): - cls.parser_signature = Sig() - if not hasattr(cls, 'parser_class'): - cls.parser_class = ErrorRaisingArgumentParser - - # --------------------------------------- - # functions for adding optional arguments - # --------------------------------------- - def no_groups(parser, argument_signatures): - """Add all arguments directly to the parser""" - for sig in argument_signatures: - parser.add_argument(*sig.args, **sig.kwargs) - - def one_group(parser, argument_signatures): - """Add all arguments under a single group in the parser""" - group = parser.add_argument_group('foo') - for sig in argument_signatures: - group.add_argument(*sig.args, **sig.kwargs) - - def many_groups(parser, argument_signatures): - """Add each argument in its own group to the parser""" - for i, sig in enumerate(argument_signatures): - group = parser.add_argument_group('foo:%i' % i) - group.add_argument(*sig.args, **sig.kwargs) - - # -------------------------- - # functions for parsing args - # -------------------------- - def listargs(parser, args): - """Parse the args by passing in a list""" - return parser.parse_args(args) - - def sysargs(parser, args): - """Parse the args by defaulting to sys.argv""" - old_sys_argv = sys.argv - sys.argv = [old_sys_argv[0]] + args - try: - return parser.parse_args() - finally: - sys.argv = old_sys_argv - - # class that holds the combination of one optional argument - # addition method and one arg parsing method - class AddTests(object): - - def __init__(self, tester_cls, add_arguments, parse_args): - self._add_arguments = add_arguments - self._parse_args = parse_args - - add_arguments_name = self._add_arguments.__name__ - parse_args_name = self._parse_args.__name__ - for test_func in [self.test_failures, self.test_successes]: - func_name = test_func.__name__ - names = func_name, add_arguments_name, parse_args_name - test_name = '_'.join(names) - - def wrapper(self, test_func=test_func): - test_func(self) - try: - wrapper.__name__ = test_name - except TypeError: - pass - setattr(tester_cls, test_name, wrapper) - - def _get_parser(self, tester): - args = tester.parser_signature.args - kwargs = tester.parser_signature.kwargs - parser = tester.parser_class(*args, **kwargs) - self._add_arguments(parser, tester.argument_signatures) - return parser - - def test_failures(self, tester): - parser = self._get_parser(tester) - for args_str in tester.failures: - args = args_str.split() - raises = tester.assertRaises - raises(ArgumentParserError, parser.parse_args, args) - - def test_successes(self, tester): - parser = self._get_parser(tester) - for args, expected_ns in tester.successes: - if isinstance(args, str): - args = args.split() - result_ns = self._parse_args(parser, args) - tester.assertEqual(expected_ns, result_ns) - - # add tests for each combination of an optionals adding method - # and an arg parsing method - for add_arguments in [no_groups, one_group, many_groups]: - for parse_args in [listargs, sysargs]: - AddTests(cls, add_arguments, parse_args) - -bases = TestCase, -ParserTestCase = ParserTesterMetaclass('ParserTestCase', bases, {}) - -# =============== -# Optionals tests -# =============== - -class TestOptionalsSingleDash(ParserTestCase): - """Test an Optional with a single-dash option string""" - - argument_signatures = [Sig('-x')] - failures = ['-x', 'a', '--foo', '-x --foo', '-x -y'] - successes = [ - ('', NS(x=None)), - ('-x a', NS(x='a')), - ('-xa', NS(x='a')), - ('-x -1', NS(x='-1')), - ('-x-1', NS(x='-1')), - ] - - -class TestOptionalsSingleDashCombined(ParserTestCase): - """Test an Optional with a single-dash option string""" - - argument_signatures = [ - Sig('-x', action='store_true'), - Sig('-yyy', action='store_const', const=42), - Sig('-z'), - ] - failures = ['a', '--foo', '-xa', '-x --foo', '-x -z', '-z -x', - '-yx', '-yz a', '-yyyx', '-yyyza', '-xyza'] - successes = [ - ('', NS(x=False, yyy=None, z=None)), - ('-x', NS(x=True, yyy=None, z=None)), - ('-za', NS(x=False, yyy=None, z='a')), - ('-z a', NS(x=False, yyy=None, z='a')), - ('-xza', NS(x=True, yyy=None, z='a')), - ('-xz a', NS(x=True, yyy=None, z='a')), - ('-x -za', NS(x=True, yyy=None, z='a')), - ('-x -z a', NS(x=True, yyy=None, z='a')), - ('-y', NS(x=False, yyy=42, z=None)), - ('-yyy', NS(x=False, yyy=42, z=None)), - ('-x -yyy -za', NS(x=True, yyy=42, z='a')), - ('-x -yyy -z a', NS(x=True, yyy=42, z='a')), - ] - - -class TestOptionalsSingleDashLong(ParserTestCase): - """Test an Optional with a multi-character single-dash option string""" - - argument_signatures = [Sig('-foo')] - failures = ['-foo', 'a', '--foo', '-foo --foo', '-foo -y', '-fooa'] - successes = [ - ('', NS(foo=None)), - ('-foo a', NS(foo='a')), - ('-foo -1', NS(foo='-1')), - ('-fo a', NS(foo='a')), - ('-f a', NS(foo='a')), - ] - - -class TestOptionalsSingleDashSubsetAmbiguous(ParserTestCase): - """Test Optionals where option strings are subsets of each other""" - - argument_signatures = [Sig('-f'), Sig('-foobar'), Sig('-foorab')] - failures = ['-f', '-foo', '-fo', '-foo b', '-foob', '-fooba', '-foora'] - successes = [ - ('', NS(f=None, foobar=None, foorab=None)), - ('-f a', NS(f='a', foobar=None, foorab=None)), - ('-fa', NS(f='a', foobar=None, foorab=None)), - ('-foa', NS(f='oa', foobar=None, foorab=None)), - ('-fooa', NS(f='ooa', foobar=None, foorab=None)), - ('-foobar a', NS(f=None, foobar='a', foorab=None)), - ('-foorab a', NS(f=None, foobar=None, foorab='a')), - ] - - -class TestOptionalsSingleDashAmbiguous(ParserTestCase): - """Test Optionals that partially match but are not subsets""" - - argument_signatures = [Sig('-foobar'), Sig('-foorab')] - failures = ['-f', '-f a', '-fa', '-foa', '-foo', '-fo', '-foo b'] - successes = [ - ('', NS(foobar=None, foorab=None)), - ('-foob a', NS(foobar='a', foorab=None)), - ('-foor a', NS(foobar=None, foorab='a')), - ('-fooba a', NS(foobar='a', foorab=None)), - ('-foora a', NS(foobar=None, foorab='a')), - ('-foobar a', NS(foobar='a', foorab=None)), - ('-foorab a', NS(foobar=None, foorab='a')), - ] - - -class TestOptionalsNumeric(ParserTestCase): - """Test an Optional with a short opt string""" - - argument_signatures = [Sig('-1', dest='one')] - failures = ['-1', 'a', '-1 --foo', '-1 -y', '-1 -1', '-1 -2'] - successes = [ - ('', NS(one=None)), - ('-1 a', NS(one='a')), - ('-1a', NS(one='a')), - ('-1-2', NS(one='-2')), - ] - - -class TestOptionalsDoubleDash(ParserTestCase): - """Test an Optional with a double-dash option string""" - - argument_signatures = [Sig('--foo')] - failures = ['--foo', '-f', '-f a', 'a', '--foo -x', '--foo --bar'] - successes = [ - ('', NS(foo=None)), - ('--foo a', NS(foo='a')), - ('--foo=a', NS(foo='a')), - ('--foo -2.5', NS(foo='-2.5')), - ('--foo=-2.5', NS(foo='-2.5')), - ] - - -class TestOptionalsDoubleDashPartialMatch(ParserTestCase): - """Tests partial matching with a double-dash option string""" - - argument_signatures = [ - Sig('--badger', action='store_true'), - Sig('--bat'), - ] - failures = ['--bar', '--b', '--ba', '--b=2', '--ba=4', '--badge 5'] - successes = [ - ('', NS(badger=False, bat=None)), - ('--bat X', NS(badger=False, bat='X')), - ('--bad', NS(badger=True, bat=None)), - ('--badg', NS(badger=True, bat=None)), - ('--badge', NS(badger=True, bat=None)), - ('--badger', NS(badger=True, bat=None)), - ] - - -class TestOptionalsDoubleDashPrefixMatch(ParserTestCase): - """Tests when one double-dash option string is a prefix of another""" - - argument_signatures = [ - Sig('--badger', action='store_true'), - Sig('--ba'), - ] - failures = ['--bar', '--b', '--ba', '--b=2', '--badge 5'] - successes = [ - ('', NS(badger=False, ba=None)), - ('--ba X', NS(badger=False, ba='X')), - ('--ba=X', NS(badger=False, ba='X')), - ('--bad', NS(badger=True, ba=None)), - ('--badg', NS(badger=True, ba=None)), - ('--badge', NS(badger=True, ba=None)), - ('--badger', NS(badger=True, ba=None)), - ] - - -class TestOptionalsSingleDoubleDash(ParserTestCase): - """Test an Optional with single- and double-dash option strings""" - - argument_signatures = [ - Sig('-f', action='store_true'), - Sig('--bar'), - Sig('-baz', action='store_const', const=42), - ] - failures = ['--bar', '-fbar', '-fbaz', '-bazf', '-b B', 'B'] - successes = [ - ('', NS(f=False, bar=None, baz=None)), - ('-f', NS(f=True, bar=None, baz=None)), - ('--ba B', NS(f=False, bar='B', baz=None)), - ('-f --bar B', NS(f=True, bar='B', baz=None)), - ('-f -b', NS(f=True, bar=None, baz=42)), - ('-ba -f', NS(f=True, bar=None, baz=42)), - ] - - -class TestOptionalsAlternatePrefixChars(ParserTestCase): - """Test an Optional with a double-dash option string""" - - parser_signature = Sig(prefix_chars='+:/', add_help=False) - argument_signatures = [ - Sig('+f', action='store_true'), - Sig('::bar'), - Sig('/baz', action='store_const', const=42), - ] - failures = ['--bar', '-fbar', '-b B', 'B', '-f', '--bar B', '-baz'] - successes = [ - ('', NS(f=False, bar=None, baz=None)), - ('+f', NS(f=True, bar=None, baz=None)), - ('::ba B', NS(f=False, bar='B', baz=None)), - ('+f ::bar B', NS(f=True, bar='B', baz=None)), - ('+f /b', NS(f=True, bar=None, baz=42)), - ('/ba +f', NS(f=True, bar=None, baz=42)), - ] - - -class TestOptionalsShortLong(ParserTestCase): - """Test a combination of single- and double-dash option strings""" - - argument_signatures = [ - Sig('-v', '--verbose', '-n', '--noisy', action='store_true'), - ] - failures = ['--x --verbose', '-N', 'a', '-v x'] - successes = [ - ('', NS(verbose=False)), - ('-v', NS(verbose=True)), - ('--verbose', NS(verbose=True)), - ('-n', NS(verbose=True)), - ('--noisy', NS(verbose=True)), - ] - - -class TestOptionalsDest(ParserTestCase): - """Tests various means of setting destination""" - - argument_signatures = [Sig('--foo-bar'), Sig('--baz', dest='zabbaz')] - failures = ['a'] - successes = [ - ('--foo-bar f', NS(foo_bar='f', zabbaz=None)), - ('--baz g', NS(foo_bar=None, zabbaz='g')), - ('--foo-bar h --baz i', NS(foo_bar='h', zabbaz='i')), - ('--baz j --foo-bar k', NS(foo_bar='k', zabbaz='j')), - ] - - -class TestOptionalsDefault(ParserTestCase): - """Tests specifying a default for an Optional""" - - argument_signatures = [Sig('-x'), Sig('-y', default=42)] - failures = ['a'] - successes = [ - ('', NS(x=None, y=42)), - ('-xx', NS(x='x', y=42)), - ('-yy', NS(x=None, y='y')), - ] - - -class TestOptionalsNargsDefault(ParserTestCase): - """Tests not specifying the number of args for an Optional""" - - argument_signatures = [Sig('-x')] - failures = ['a', '-x'] - successes = [ - ('', NS(x=None)), - ('-x a', NS(x='a')), - ] - - -class TestOptionalsNargs1(ParserTestCase): - """Tests specifying the 1 arg for an Optional""" - - argument_signatures = [Sig('-x', nargs=1)] - failures = ['a', '-x'] - successes = [ - ('', NS(x=None)), - ('-x a', NS(x=['a'])), - ] - - -class TestOptionalsNargs3(ParserTestCase): - """Tests specifying the 3 args for an Optional""" - - argument_signatures = [Sig('-x', nargs=3)] - failures = ['a', '-x', '-x a', '-x a b', 'a -x', 'a -x b'] - successes = [ - ('', NS(x=None)), - ('-x a b c', NS(x=['a', 'b', 'c'])), - ] - - -class TestOptionalsNargsOptional(ParserTestCase): - """Tests specifying an Optional arg for an Optional""" - - argument_signatures = [ - Sig('-w', nargs='?'), - Sig('-x', nargs='?', const=42), - Sig('-y', nargs='?', default='spam'), - Sig('-z', nargs='?', type=int, const='42', default='84'), - ] - failures = ['2'] - successes = [ - ('', NS(w=None, x=None, y='spam', z=84)), - ('-w', NS(w=None, x=None, y='spam', z=84)), - ('-w 2', NS(w='2', x=None, y='spam', z=84)), - ('-x', NS(w=None, x=42, y='spam', z=84)), - ('-x 2', NS(w=None, x='2', y='spam', z=84)), - ('-y', NS(w=None, x=None, y=None, z=84)), - ('-y 2', NS(w=None, x=None, y='2', z=84)), - ('-z', NS(w=None, x=None, y='spam', z=42)), - ('-z 2', NS(w=None, x=None, y='spam', z=2)), - ] - - -class TestOptionalsNargsZeroOrMore(ParserTestCase): - """Tests specifying an args for an Optional that accepts zero or more""" - - argument_signatures = [ - Sig('-x', nargs='*'), - Sig('-y', nargs='*', default='spam'), - ] - failures = ['a'] - successes = [ - ('', NS(x=None, y='spam')), - ('-x', NS(x=[], y='spam')), - ('-x a', NS(x=['a'], y='spam')), - ('-x a b', NS(x=['a', 'b'], y='spam')), - ('-y', NS(x=None, y=[])), - ('-y a', NS(x=None, y=['a'])), - ('-y a b', NS(x=None, y=['a', 'b'])), - ] - - -class TestOptionalsNargsOneOrMore(ParserTestCase): - """Tests specifying an args for an Optional that accepts one or more""" - - argument_signatures = [ - Sig('-x', nargs='+'), - Sig('-y', nargs='+', default='spam'), - ] - failures = ['a', '-x', '-y', 'a -x', 'a -y b'] - successes = [ - ('', NS(x=None, y='spam')), - ('-x a', NS(x=['a'], y='spam')), - ('-x a b', NS(x=['a', 'b'], y='spam')), - ('-y a', NS(x=None, y=['a'])), - ('-y a b', NS(x=None, y=['a', 'b'])), - ] - - -class TestOptionalsChoices(ParserTestCase): - """Tests specifying the choices for an Optional""" - - argument_signatures = [ - Sig('-f', choices='abc'), - Sig('-g', type=int, choices=range(5))] - failures = ['a', '-f d', '-fad', '-ga', '-g 6'] - successes = [ - ('', NS(f=None, g=None)), - ('-f a', NS(f='a', g=None)), - ('-f c', NS(f='c', g=None)), - ('-g 0', NS(f=None, g=0)), - ('-g 03', NS(f=None, g=3)), - ('-fb -g4', NS(f='b', g=4)), - ] - - -class TestOptionalsRequired(ParserTestCase): - """Tests the an optional action that is required""" - - argument_signatures = [ - Sig('-x', type=int, required=True), - ] - failures = ['a', ''] - successes = [ - ('-x 1', NS(x=1)), - ('-x42', NS(x=42)), - ] - - -class TestOptionalsActionStore(ParserTestCase): - """Tests the store action for an Optional""" - - argument_signatures = [Sig('-x', action='store')] - failures = ['a', 'a -x'] - successes = [ - ('', NS(x=None)), - ('-xfoo', NS(x='foo')), - ] - - -class TestOptionalsActionStoreConst(ParserTestCase): - """Tests the store_const action for an Optional""" - - argument_signatures = [Sig('-y', action='store_const', const=object)] - failures = ['a'] - successes = [ - ('', NS(y=None)), - ('-y', NS(y=object)), - ] - - -class TestOptionalsActionStoreFalse(ParserTestCase): - """Tests the store_false action for an Optional""" - - argument_signatures = [Sig('-z', action='store_false')] - failures = ['a', '-za', '-z a'] - successes = [ - ('', NS(z=True)), - ('-z', NS(z=False)), - ] - - -class TestOptionalsActionStoreTrue(ParserTestCase): - """Tests the store_true action for an Optional""" - - argument_signatures = [Sig('--apple', action='store_true')] - failures = ['a', '--apple=b', '--apple b'] - successes = [ - ('', NS(apple=False)), - ('--apple', NS(apple=True)), - ] - - -class TestOptionalsActionAppend(ParserTestCase): - """Tests the append action for an Optional""" - - argument_signatures = [Sig('--baz', action='append')] - failures = ['a', '--baz', 'a --baz', '--baz a b'] - successes = [ - ('', NS(baz=None)), - ('--baz a', NS(baz=['a'])), - ('--baz a --baz b', NS(baz=['a', 'b'])), - ] - - -class TestOptionalsActionAppendWithDefault(ParserTestCase): - """Tests the append action for an Optional""" - - argument_signatures = [Sig('--baz', action='append', default=['X'])] - failures = ['a', '--baz', 'a --baz', '--baz a b'] - successes = [ - ('', NS(baz=['X'])), - ('--baz a', NS(baz=['X', 'a'])), - ('--baz a --baz b', NS(baz=['X', 'a', 'b'])), - ] - - -class TestOptionalsActionAppendConst(ParserTestCase): - """Tests the append_const action for an Optional""" - - argument_signatures = [ - Sig('-b', action='append_const', const=Exception), - Sig('-c', action='append', dest='b'), - ] - failures = ['a', '-c', 'a -c', '-bx', '-b x'] - successes = [ - ('', NS(b=None)), - ('-b', NS(b=[Exception])), - ('-b -cx -b -cyz', NS(b=[Exception, 'x', Exception, 'yz'])), - ] - - -class TestOptionalsActionAppendConstWithDefault(ParserTestCase): - """Tests the append_const action for an Optional""" - - argument_signatures = [ - Sig('-b', action='append_const', const=Exception, default=['X']), - Sig('-c', action='append', dest='b'), - ] - failures = ['a', '-c', 'a -c', '-bx', '-b x'] - successes = [ - ('', NS(b=['X'])), - ('-b', NS(b=['X', Exception])), - ('-b -cx -b -cyz', NS(b=['X', Exception, 'x', Exception, 'yz'])), - ] - - -class TestOptionalsActionCount(ParserTestCase): - """Tests the count action for an Optional""" - - argument_signatures = [Sig('-x', action='count')] - failures = ['a', '-x a', '-x b', '-x a -x b'] - successes = [ - ('', NS(x=None)), - ('-x', NS(x=1)), - ] - - -# ================ -# Positional tests -# ================ - -class TestPositionalsNargsNone(ParserTestCase): - """Test a Positional that doesn't specify nargs""" - - argument_signatures = [Sig('foo')] - failures = ['', '-x', 'a b'] - successes = [ - ('a', NS(foo='a')), - ] - - -class TestPositionalsNargs1(ParserTestCase): - """Test a Positional that specifies an nargs of 1""" - - argument_signatures = [Sig('foo', nargs=1)] - failures = ['', '-x', 'a b'] - successes = [ - ('a', NS(foo=['a'])), - ] - - -class TestPositionalsNargs2(ParserTestCase): - """Test a Positional that specifies an nargs of 2""" - - argument_signatures = [Sig('foo', nargs=2)] - failures = ['', 'a', '-x', 'a b c'] - successes = [ - ('a b', NS(foo=['a', 'b'])), - ] - - -class TestPositionalsNargsZeroOrMore(ParserTestCase): - """Test a Positional that specifies unlimited nargs""" - - argument_signatures = [Sig('foo', nargs='*')] - failures = ['-x'] - successes = [ - ('', NS(foo=[])), - ('a', NS(foo=['a'])), - ('a b', NS(foo=['a', 'b'])), - ] - - -class TestPositionalsNargsZeroOrMoreDefault(ParserTestCase): - """Test a Positional that specifies unlimited nargs and a default""" - - argument_signatures = [Sig('foo', nargs='*', default='bar')] - failures = ['-x'] - successes = [ - ('', NS(foo='bar')), - ('a', NS(foo=['a'])), - ('a b', NS(foo=['a', 'b'])), - ] - - -class TestPositionalsNargsOneOrMore(ParserTestCase): - """Test a Positional that specifies one or more nargs""" - - argument_signatures = [Sig('foo', nargs='+')] - failures = ['', '-x'] - successes = [ - ('a', NS(foo=['a'])), - ('a b', NS(foo=['a', 'b'])), - ] - - -class TestPositionalsNargsOptional(ParserTestCase): - """Tests an Optional Positional""" - - argument_signatures = [Sig('foo', nargs='?')] - failures = ['-x', 'a b'] - successes = [ - ('', NS(foo=None)), - ('a', NS(foo='a')), - ] - - -class TestPositionalsNargsOptionalDefault(ParserTestCase): - """Tests an Optional Positional with a default value""" - - argument_signatures = [Sig('foo', nargs='?', default=42)] - failures = ['-x', 'a b'] - successes = [ - ('', NS(foo=42)), - ('a', NS(foo='a')), - ] - - -class TestPositionalsNargsOptionalConvertedDefault(ParserTestCase): - """Tests an Optional Positional with a default value - that needs to be converted to the appropriate type. - """ - - argument_signatures = [ - Sig('foo', nargs='?', type=int, default='42'), - ] - failures = ['-x', 'a b', '1 2'] - successes = [ - ('', NS(foo=42)), - ('1', NS(foo=1)), - ] - - -class TestPositionalsNargsNoneNone(ParserTestCase): - """Test two Positionals that don't specify nargs""" - - argument_signatures = [Sig('foo'), Sig('bar')] - failures = ['', '-x', 'a', 'a b c'] - successes = [ - ('a b', NS(foo='a', bar='b')), - ] - - -class TestPositionalsNargsNone1(ParserTestCase): - """Test a Positional with no nargs followed by one with 1""" - - argument_signatures = [Sig('foo'), Sig('bar', nargs=1)] - failures = ['', '--foo', 'a', 'a b c'] - successes = [ - ('a b', NS(foo='a', bar=['b'])), - ] - - -class TestPositionalsNargs2None(ParserTestCase): - """Test a Positional with 2 nargs followed by one with none""" - - argument_signatures = [Sig('foo', nargs=2), Sig('bar')] - failures = ['', '--foo', 'a', 'a b', 'a b c d'] - successes = [ - ('a b c', NS(foo=['a', 'b'], bar='c')), - ] - - -class TestPositionalsNargsNoneZeroOrMore(ParserTestCase): - """Test a Positional with no nargs followed by one with unlimited""" - - argument_signatures = [Sig('foo'), Sig('bar', nargs='*')] - failures = ['', '--foo'] - successes = [ - ('a', NS(foo='a', bar=[])), - ('a b', NS(foo='a', bar=['b'])), - ('a b c', NS(foo='a', bar=['b', 'c'])), - ] - - -class TestPositionalsNargsNoneOneOrMore(ParserTestCase): - """Test a Positional with no nargs followed by one with one or more""" - - argument_signatures = [Sig('foo'), Sig('bar', nargs='+')] - failures = ['', '--foo', 'a'] - successes = [ - ('a b', NS(foo='a', bar=['b'])), - ('a b c', NS(foo='a', bar=['b', 'c'])), - ] - - -class TestPositionalsNargsNoneOptional(ParserTestCase): - """Test a Positional with no nargs followed by one with an Optional""" - - argument_signatures = [Sig('foo'), Sig('bar', nargs='?')] - failures = ['', '--foo', 'a b c'] - successes = [ - ('a', NS(foo='a', bar=None)), - ('a b', NS(foo='a', bar='b')), - ] - - -class TestPositionalsNargsZeroOrMoreNone(ParserTestCase): - """Test a Positional with unlimited nargs followed by one with none""" - - argument_signatures = [Sig('foo', nargs='*'), Sig('bar')] - failures = ['', '--foo'] - successes = [ - ('a', NS(foo=[], bar='a')), - ('a b', NS(foo=['a'], bar='b')), - ('a b c', NS(foo=['a', 'b'], bar='c')), - ] - - -class TestPositionalsNargsOneOrMoreNone(ParserTestCase): - """Test a Positional with one or more nargs followed by one with none""" - - argument_signatures = [Sig('foo', nargs='+'), Sig('bar')] - failures = ['', '--foo', 'a'] - successes = [ - ('a b', NS(foo=['a'], bar='b')), - ('a b c', NS(foo=['a', 'b'], bar='c')), - ] - - -class TestPositionalsNargsOptionalNone(ParserTestCase): - """Test a Positional with an Optional nargs followed by one with none""" - - argument_signatures = [Sig('foo', nargs='?', default=42), Sig('bar')] - failures = ['', '--foo', 'a b c'] - successes = [ - ('a', NS(foo=42, bar='a')), - ('a b', NS(foo='a', bar='b')), - ] - - -class TestPositionalsNargs2ZeroOrMore(ParserTestCase): - """Test a Positional with 2 nargs followed by one with unlimited""" - - argument_signatures = [Sig('foo', nargs=2), Sig('bar', nargs='*')] - failures = ['', '--foo', 'a'] - successes = [ - ('a b', NS(foo=['a', 'b'], bar=[])), - ('a b c', NS(foo=['a', 'b'], bar=['c'])), - ] - - -class TestPositionalsNargs2OneOrMore(ParserTestCase): - """Test a Positional with 2 nargs followed by one with one or more""" - - argument_signatures = [Sig('foo', nargs=2), Sig('bar', nargs='+')] - failures = ['', '--foo', 'a', 'a b'] - successes = [ - ('a b c', NS(foo=['a', 'b'], bar=['c'])), - ] - - -class TestPositionalsNargs2Optional(ParserTestCase): - """Test a Positional with 2 nargs followed by one optional""" - - argument_signatures = [Sig('foo', nargs=2), Sig('bar', nargs='?')] - failures = ['', '--foo', 'a', 'a b c d'] - successes = [ - ('a b', NS(foo=['a', 'b'], bar=None)), - ('a b c', NS(foo=['a', 'b'], bar='c')), - ] - - -class TestPositionalsNargsZeroOrMore1(ParserTestCase): - """Test a Positional with unlimited nargs followed by one with 1""" - - argument_signatures = [Sig('foo', nargs='*'), Sig('bar', nargs=1)] - failures = ['', '--foo', ] - successes = [ - ('a', NS(foo=[], bar=['a'])), - ('a b', NS(foo=['a'], bar=['b'])), - ('a b c', NS(foo=['a', 'b'], bar=['c'])), - ] - - -class TestPositionalsNargsOneOrMore1(ParserTestCase): - """Test a Positional with one or more nargs followed by one with 1""" - - argument_signatures = [Sig('foo', nargs='+'), Sig('bar', nargs=1)] - failures = ['', '--foo', 'a'] - successes = [ - ('a b', NS(foo=['a'], bar=['b'])), - ('a b c', NS(foo=['a', 'b'], bar=['c'])), - ] - - -class TestPositionalsNargsOptional1(ParserTestCase): - """Test a Positional with an Optional nargs followed by one with 1""" - - argument_signatures = [Sig('foo', nargs='?'), Sig('bar', nargs=1)] - failures = ['', '--foo', 'a b c'] - successes = [ - ('a', NS(foo=None, bar=['a'])), - ('a b', NS(foo='a', bar=['b'])), - ] - - -class TestPositionalsNargsNoneZeroOrMore1(ParserTestCase): - """Test three Positionals: no nargs, unlimited nargs and 1 nargs""" - - argument_signatures = [ - Sig('foo'), - Sig('bar', nargs='*'), - Sig('baz', nargs=1), - ] - failures = ['', '--foo', 'a'] - successes = [ - ('a b', NS(foo='a', bar=[], baz=['b'])), - ('a b c', NS(foo='a', bar=['b'], baz=['c'])), - ] - - -class TestPositionalsNargsNoneOneOrMore1(ParserTestCase): - """Test three Positionals: no nargs, one or more nargs and 1 nargs""" - - argument_signatures = [ - Sig('foo'), - Sig('bar', nargs='+'), - Sig('baz', nargs=1), - ] - failures = ['', '--foo', 'a', 'b'] - successes = [ - ('a b c', NS(foo='a', bar=['b'], baz=['c'])), - ('a b c d', NS(foo='a', bar=['b', 'c'], baz=['d'])), - ] - - -class TestPositionalsNargsNoneOptional1(ParserTestCase): - """Test three Positionals: no nargs, optional narg and 1 nargs""" - - argument_signatures = [ - Sig('foo'), - Sig('bar', nargs='?', default=0.625), - Sig('baz', nargs=1), - ] - failures = ['', '--foo', 'a'] - successes = [ - ('a b', NS(foo='a', bar=0.625, baz=['b'])), - ('a b c', NS(foo='a', bar='b', baz=['c'])), - ] - - -class TestPositionalsNargsOptionalOptional(ParserTestCase): - """Test two optional nargs""" - - argument_signatures = [ - Sig('foo', nargs='?'), - Sig('bar', nargs='?', default=42), - ] - failures = ['--foo', 'a b c'] - successes = [ - ('', NS(foo=None, bar=42)), - ('a', NS(foo='a', bar=42)), - ('a b', NS(foo='a', bar='b')), - ] - - -class TestPositionalsNargsOptionalZeroOrMore(ParserTestCase): - """Test an Optional narg followed by unlimited nargs""" - - argument_signatures = [Sig('foo', nargs='?'), Sig('bar', nargs='*')] - failures = ['--foo'] - successes = [ - ('', NS(foo=None, bar=[])), - ('a', NS(foo='a', bar=[])), - ('a b', NS(foo='a', bar=['b'])), - ('a b c', NS(foo='a', bar=['b', 'c'])), - ] - - -class TestPositionalsNargsOptionalOneOrMore(ParserTestCase): - """Test an Optional narg followed by one or more nargs""" - - argument_signatures = [Sig('foo', nargs='?'), Sig('bar', nargs='+')] - failures = ['', '--foo'] - successes = [ - ('a', NS(foo=None, bar=['a'])), - ('a b', NS(foo='a', bar=['b'])), - ('a b c', NS(foo='a', bar=['b', 'c'])), - ] - - -class TestPositionalsChoicesString(ParserTestCase): - """Test a set of single-character choices""" - - argument_signatures = [Sig('spam', choices=set('abcdefg'))] - failures = ['', '--foo', 'h', '42', 'ef'] - successes = [ - ('a', NS(spam='a')), - ('g', NS(spam='g')), - ] - - -class TestPositionalsChoicesInt(ParserTestCase): - """Test a set of integer choices""" - - argument_signatures = [Sig('spam', type=int, choices=range(20))] - failures = ['', '--foo', 'h', '42', 'ef'] - successes = [ - ('4', NS(spam=4)), - ('15', NS(spam=15)), - ] - - -class TestPositionalsActionAppend(ParserTestCase): - """Test the 'append' action""" - - argument_signatures = [ - Sig('spam', action='append'), - Sig('spam', action='append', nargs=2), - ] - failures = ['', '--foo', 'a', 'a b', 'a b c d'] - successes = [ - ('a b c', NS(spam=['a', ['b', 'c']])), - ] - -# ======================================== -# Combined optionals and positionals tests -# ======================================== - -class TestOptionalsNumericAndPositionals(ParserTestCase): - """Tests negative number args when numeric options are present""" - - argument_signatures = [ - Sig('x', nargs='?'), - Sig('-4', dest='y', action='store_true'), - ] - failures = ['-2', '-315'] - successes = [ - ('', NS(x=None, y=False)), - ('a', NS(x='a', y=False)), - ('-4', NS(x=None, y=True)), - ('-4 a', NS(x='a', y=True)), - ] - - -class TestOptionalsAlmostNumericAndPositionals(ParserTestCase): - """Tests negative number args when almost numeric options are present""" - - argument_signatures = [ - Sig('x', nargs='?'), - Sig('-k4', dest='y', action='store_true'), - ] - failures = ['-k3'] - successes = [ - ('', NS(x=None, y=False)), - ('-2', NS(x='-2', y=False)), - ('a', NS(x='a', y=False)), - ('-k4', NS(x=None, y=True)), - ('-k4 a', NS(x='a', y=True)), - ] - - -class TestEmptyAndSpaceContainingArguments(ParserTestCase): - - argument_signatures = [ - Sig('x', nargs='?'), - Sig('-y', '--yyy', dest='y'), - ] - failures = ['-y'] - successes = [ - ([''], NS(x='', y=None)), - (['a badger'], NS(x='a badger', y=None)), - (['-a badger'], NS(x='-a badger', y=None)), - (['-y', ''], NS(x=None, y='')), - (['-y', 'a badger'], NS(x=None, y='a badger')), - (['-y', '-a badger'], NS(x=None, y='-a badger')), - (['--yyy=a badger'], NS(x=None, y='a badger')), - (['--yyy=-a badger'], NS(x=None, y='-a badger')), - ] - - -class TestPrefixCharacterOnlyArguments(ParserTestCase): - - parser_signature = Sig(prefix_chars='-+') - argument_signatures = [ - Sig('-', dest='x', nargs='?', const='badger'), - Sig('+', dest='y', type=int, default=42), - Sig('-+-', dest='z', action='store_true'), - ] - failures = ['-y', '+ -'] - successes = [ - ('', NS(x=None, y=42, z=False)), - ('-', NS(x='badger', y=42, z=False)), - ('- X', NS(x='X', y=42, z=False)), - ('+ -3', NS(x=None, y=-3, z=False)), - ('-+-', NS(x=None, y=42, z=True)), - ('- ===', NS(x='===', y=42, z=False)), - ] - - -class TestNargsZeroOrMore(ParserTestCase): - """Tests specifying an args for an Optional that accepts zero or more""" - - argument_signatures = [Sig('-x', nargs='*'), Sig('y', nargs='*')] - failures = [] - successes = [ - ('', NS(x=None, y=[])), - ('-x', NS(x=[], y=[])), - ('-x a', NS(x=['a'], y=[])), - ('-x a -- b', NS(x=['a'], y=['b'])), - ('a', NS(x=None, y=['a'])), - ('a -x', NS(x=[], y=['a'])), - ('a -x b', NS(x=['b'], y=['a'])), - ] - - -class TestNargsRemainder(ParserTestCase): - """Tests specifying a positional with nargs=REMAINDER""" - - argument_signatures = [Sig('x'), Sig('y', nargs='...'), Sig('-z')] - failures = ['', '-z', '-z Z'] - successes = [ - ('X', NS(x='X', y=[], z=None)), - ('-z Z X', NS(x='X', y=[], z='Z')), - ('X A B -z Z', NS(x='X', y=['A', 'B', '-z', 'Z'], z=None)), - ('X Y --foo', NS(x='X', y=['Y', '--foo'], z=None)), - ] - - -class TestOptionLike(ParserTestCase): - """Tests options that may or may not be arguments""" - - argument_signatures = [ - Sig('-x', type=float), - Sig('-3', type=float, dest='y'), - Sig('z', nargs='*'), - ] - failures = ['-x', '-y2.5', '-xa', '-x -a', - '-x -3', '-x -3.5', '-3 -3.5', - '-x -2.5', '-x -2.5 a', '-3 -.5', - 'a x -1', '-x -1 a', '-3 -1 a'] - successes = [ - ('', NS(x=None, y=None, z=[])), - ('-x 2.5', NS(x=2.5, y=None, z=[])), - ('-x 2.5 a', NS(x=2.5, y=None, z=['a'])), - ('-3.5', NS(x=None, y=0.5, z=[])), - ('-3-.5', NS(x=None, y=-0.5, z=[])), - ('-3 .5', NS(x=None, y=0.5, z=[])), - ('a -3.5', NS(x=None, y=0.5, z=['a'])), - ('a', NS(x=None, y=None, z=['a'])), - ('a -x 1', NS(x=1.0, y=None, z=['a'])), - ('-x 1 a', NS(x=1.0, y=None, z=['a'])), - ('-3 1 a', NS(x=None, y=1.0, z=['a'])), - ] - - -class TestDefaultSuppress(ParserTestCase): - """Test actions with suppressed defaults""" - - argument_signatures = [ - Sig('foo', nargs='?', default=argparse.SUPPRESS), - Sig('bar', nargs='*', default=argparse.SUPPRESS), - Sig('--baz', action='store_true', default=argparse.SUPPRESS), - ] - failures = ['-x'] - successes = [ - ('', NS()), - ('a', NS(foo='a')), - ('a b', NS(foo='a', bar=['b'])), - ('--baz', NS(baz=True)), - ('a --baz', NS(foo='a', baz=True)), - ('--baz a b', NS(foo='a', bar=['b'], baz=True)), - ] - - -class TestParserDefaultSuppress(ParserTestCase): - """Test actions with a parser-level default of SUPPRESS""" - - parser_signature = Sig(argument_default=argparse.SUPPRESS) - argument_signatures = [ - Sig('foo', nargs='?'), - Sig('bar', nargs='*'), - Sig('--baz', action='store_true'), - ] - failures = ['-x'] - successes = [ - ('', NS()), - ('a', NS(foo='a')), - ('a b', NS(foo='a', bar=['b'])), - ('--baz', NS(baz=True)), - ('a --baz', NS(foo='a', baz=True)), - ('--baz a b', NS(foo='a', bar=['b'], baz=True)), - ] - - -class TestParserDefault42(ParserTestCase): - """Test actions with a parser-level default of 42""" - - parser_signature = Sig(argument_default=42, version='1.0') - argument_signatures = [ - Sig('foo', nargs='?'), - Sig('bar', nargs='*'), - Sig('--baz', action='store_true'), - ] - failures = ['-x'] - successes = [ - ('', NS(foo=42, bar=42, baz=42)), - ('a', NS(foo='a', bar=42, baz=42)), - ('a b', NS(foo='a', bar=['b'], baz=42)), - ('--baz', NS(foo=42, bar=42, baz=True)), - ('a --baz', NS(foo='a', bar=42, baz=True)), - ('--baz a b', NS(foo='a', bar=['b'], baz=True)), - ] - - -class TestArgumentsFromFile(TempDirMixin, ParserTestCase): - """Test reading arguments from a file""" - - def setUp(self): - super(TestArgumentsFromFile, self).setUp() - file_texts = [ - ('hello', 'hello world!\n'), - ('recursive', '-a\n' - 'A\n' - '@hello'), - ('invalid', '@no-such-path\n'), - ] - for path, text in file_texts: - file = open(path, 'w') - file.write(text) - file.close() - - parser_signature = Sig(fromfile_prefix_chars='@') - argument_signatures = [ - Sig('-a'), - Sig('x'), - Sig('y', nargs='+'), - ] - failures = ['', '-b', 'X', '@invalid', '@missing'] - successes = [ - ('X Y', NS(a=None, x='X', y=['Y'])), - ('X -a A Y Z', NS(a='A', x='X', y=['Y', 'Z'])), - ('@hello X', NS(a=None, x='hello world!', y=['X'])), - ('X @hello', NS(a=None, x='X', y=['hello world!'])), - ('-a B @recursive Y Z', NS(a='A', x='hello world!', y=['Y', 'Z'])), - ('X @recursive Z -a B', NS(a='B', x='X', y=['hello world!', 'Z'])), - ] - - -class TestArgumentsFromFileConverter(TempDirMixin, ParserTestCase): - """Test reading arguments from a file""" - - def setUp(self): - super(TestArgumentsFromFileConverter, self).setUp() - file_texts = [ - ('hello', 'hello world!\n'), - ] - for path, text in file_texts: - file = open(path, 'w') - file.write(text) - file.close() - - class FromFileConverterArgumentParser(ErrorRaisingArgumentParser): - - def convert_arg_line_to_args(self, arg_line): - for arg in arg_line.split(): - if not arg.strip(): - continue - yield arg - parser_class = FromFileConverterArgumentParser - parser_signature = Sig(fromfile_prefix_chars='@') - argument_signatures = [ - Sig('y', nargs='+'), - ] - failures = [] - successes = [ - ('@hello X', NS(y=['hello', 'world!', 'X'])), - ] - - -# ===================== -# Type conversion tests -# ===================== - -class TestFileTypeRepr(TestCase): - - def test_r(self): - type = argparse.FileType('r') - self.assertEqual("FileType('r')", repr(type)) - - def test_wb_1(self): - type = argparse.FileType('wb', 1) - self.assertEqual("FileType('wb', 1)", repr(type)) - - -class RFile(object): - seen = {} - - def __init__(self, name): - self.name = name - - def __eq__(self, other): - if other in self.seen: - text = self.seen[other] - else: - text = self.seen[other] = other.read() - other.close() - if not isinstance(text, str): - text = text.decode('ascii') - return self.name == other.name == text - - -class TestFileTypeR(TempDirMixin, ParserTestCase): - """Test the FileType option/argument type for reading files""" - - def setUp(self): - super(TestFileTypeR, self).setUp() - for file_name in ['foo', 'bar']: - file = open(os.path.join(self.temp_dir, file_name), 'w') - file.write(file_name) - file.close() - - argument_signatures = [ - Sig('-x', type=argparse.FileType()), - Sig('spam', type=argparse.FileType('r')), - ] - failures = ['-x', '-x bar'] - successes = [ - ('foo', NS(x=None, spam=RFile('foo'))), - ('-x foo bar', NS(x=RFile('foo'), spam=RFile('bar'))), - ('bar -x foo', NS(x=RFile('foo'), spam=RFile('bar'))), - ('-x - -', NS(x=sys.stdin, spam=sys.stdin)), - ] - - -class TestFileTypeRB(TempDirMixin, ParserTestCase): - """Test the FileType option/argument type for reading files""" - - def setUp(self): - super(TestFileTypeRB, self).setUp() - for file_name in ['foo', 'bar']: - file = open(os.path.join(self.temp_dir, file_name), 'w') - file.write(file_name) - file.close() - - argument_signatures = [ - Sig('-x', type=argparse.FileType('rb')), - Sig('spam', type=argparse.FileType('rb')), - ] - failures = ['-x', '-x bar'] - successes = [ - ('foo', NS(x=None, spam=RFile('foo'))), - ('-x foo bar', NS(x=RFile('foo'), spam=RFile('bar'))), - ('bar -x foo', NS(x=RFile('foo'), spam=RFile('bar'))), - ('-x - -', NS(x=sys.stdin, spam=sys.stdin)), - ] - - -class WFile(object): - seen = set() - - def __init__(self, name): - self.name = name - - def __eq__(self, other): - if other not in self.seen: - text = 'Check that file is writable.' - if 'b' in other.mode: - text = text.encode('ascii') - other.write(text) - other.close() - self.seen.add(other) - return self.name == other.name - - -class TestFileTypeW(TempDirMixin, ParserTestCase): - """Test the FileType option/argument type for writing files""" - - argument_signatures = [ - Sig('-x', type=argparse.FileType('w')), - Sig('spam', type=argparse.FileType('w')), - ] - failures = ['-x', '-x bar'] - successes = [ - ('foo', NS(x=None, spam=WFile('foo'))), - ('-x foo bar', NS(x=WFile('foo'), spam=WFile('bar'))), - ('bar -x foo', NS(x=WFile('foo'), spam=WFile('bar'))), - ('-x - -', NS(x=sys.stdout, spam=sys.stdout)), - ] - - -class TestFileTypeWB(TempDirMixin, ParserTestCase): - - argument_signatures = [ - Sig('-x', type=argparse.FileType('wb')), - Sig('spam', type=argparse.FileType('wb')), - ] - failures = ['-x', '-x bar'] - successes = [ - ('foo', NS(x=None, spam=WFile('foo'))), - ('-x foo bar', NS(x=WFile('foo'), spam=WFile('bar'))), - ('bar -x foo', NS(x=WFile('foo'), spam=WFile('bar'))), - ('-x - -', NS(x=sys.stdout, spam=sys.stdout)), - ] - - -class TestTypeCallable(ParserTestCase): - """Test some callables as option/argument types""" - - argument_signatures = [ - Sig('--eggs', type=complex), - Sig('spam', type=float), - ] - failures = ['a', '42j', '--eggs a', '--eggs 2i'] - successes = [ - ('--eggs=42 42', NS(eggs=42, spam=42.0)), - ('--eggs 2j -- -1.5', NS(eggs=2j, spam=-1.5)), - ('1024.675', NS(eggs=None, spam=1024.675)), - ] - - -class TestTypeUserDefined(ParserTestCase): - """Test a user-defined option/argument type""" - - class MyType(TestCase): - - def __init__(self, value): - self.value = value - - def __eq__(self, other): - return (type(self), self.value) == (type(other), other.value) - - argument_signatures = [ - Sig('-x', type=MyType), - Sig('spam', type=MyType), - ] - failures = [] - successes = [ - ('a -x b', NS(x=MyType('b'), spam=MyType('a'))), - ('-xf g', NS(x=MyType('f'), spam=MyType('g'))), - ] - - -class TestTypeClassicClass(ParserTestCase): - """Test a classic class type""" - - class C: - - def __init__(self, value): - self.value = value - - def __eq__(self, other): - return (type(self), self.value) == (type(other), other.value) - - argument_signatures = [ - Sig('-x', type=C), - Sig('spam', type=C), - ] - failures = [] - successes = [ - ('a -x b', NS(x=C('b'), spam=C('a'))), - ('-xf g', NS(x=C('f'), spam=C('g'))), - ] - - -class TestTypeRegistration(TestCase): - """Test a user-defined type by registering it""" - - def test(self): - - def get_my_type(string): - return 'my_type{%s}' % string - - parser = argparse.ArgumentParser() - parser.register('type', 'my_type', get_my_type) - parser.add_argument('-x', type='my_type') - parser.add_argument('y', type='my_type') - - self.assertEqual(parser.parse_args('1'.split()), - NS(x=None, y='my_type{1}')) - self.assertEqual(parser.parse_args('-x 1 42'.split()), - NS(x='my_type{1}', y='my_type{42}')) - - -# ============ -# Action tests -# ============ - -class TestActionUserDefined(ParserTestCase): - """Test a user-defined option/argument action""" - - class OptionalAction(argparse.Action): - - def __call__(self, parser, namespace, value, option_string=None): - try: - # check destination and option string - assert self.dest == 'spam', 'dest: %s' % self.dest - assert option_string == '-s', 'flag: %s' % option_string - # when option is before argument, badger=2, and when - # option is after argument, badger= - expected_ns = NS(spam=0.25) - if value in [0.125, 0.625]: - expected_ns.badger = 2 - elif value in [2.0]: - expected_ns.badger = 84 - else: - raise AssertionError('value: %s' % value) - assert expected_ns == namespace, ('expected %s, got %s' % - (expected_ns, namespace)) - except AssertionError: - e = sys.exc_info()[1] - raise ArgumentParserError('opt_action failed: %s' % e) - setattr(namespace, 'spam', value) - - class PositionalAction(argparse.Action): - - def __call__(self, parser, namespace, value, option_string=None): - try: - assert option_string is None, ('option_string: %s' % - option_string) - # check destination - assert self.dest == 'badger', 'dest: %s' % self.dest - # when argument is before option, spam=0.25, and when - # option is after argument, spam= - expected_ns = NS(badger=2) - if value in [42, 84]: - expected_ns.spam = 0.25 - elif value in [1]: - expected_ns.spam = 0.625 - elif value in [2]: - expected_ns.spam = 0.125 - else: - raise AssertionError('value: %s' % value) - assert expected_ns == namespace, ('expected %s, got %s' % - (expected_ns, namespace)) - except AssertionError: - e = sys.exc_info()[1] - raise ArgumentParserError('arg_action failed: %s' % e) - setattr(namespace, 'badger', value) - - argument_signatures = [ - Sig('-s', dest='spam', action=OptionalAction, - type=float, default=0.25), - Sig('badger', action=PositionalAction, - type=int, nargs='?', default=2), - ] - failures = [] - successes = [ - ('-s0.125', NS(spam=0.125, badger=2)), - ('42', NS(spam=0.25, badger=42)), - ('-s 0.625 1', NS(spam=0.625, badger=1)), - ('84 -s2', NS(spam=2.0, badger=84)), - ] - - -class TestActionRegistration(TestCase): - """Test a user-defined action supplied by registering it""" - - class MyAction(argparse.Action): - - def __call__(self, parser, namespace, values, option_string=None): - setattr(namespace, self.dest, 'foo[%s]' % values) - - def test(self): - - parser = argparse.ArgumentParser() - parser.register('action', 'my_action', self.MyAction) - parser.add_argument('badger', action='my_action') - - self.assertEqual(parser.parse_args(['1']), NS(badger='foo[1]')) - self.assertEqual(parser.parse_args(['42']), NS(badger='foo[42]')) - - -# ================ -# Subparsers tests -# ================ - -class TestAddSubparsers(TestCase): - """Test the add_subparsers method""" - - def assertArgumentParserError(self, *args, **kwargs): - self.assertRaises(ArgumentParserError, *args, **kwargs) - - def _get_parser(self, subparser_help=False): - # create a parser with a subparsers argument - parser = ErrorRaisingArgumentParser( - prog='PROG', description='main description') - parser.add_argument( - '--foo', action='store_true', help='foo help') - parser.add_argument( - 'bar', type=float, help='bar help') - - # check that only one subparsers argument can be added - subparsers = parser.add_subparsers(help='command help') - self.assertArgumentParserError(parser.add_subparsers) - - # add first sub-parser - parser1_kwargs = dict(description='1 description') - if subparser_help: - parser1_kwargs['help'] = '1 help' - parser1 = subparsers.add_parser('1', **parser1_kwargs) - parser1.add_argument('-w', type=int, help='w help') - parser1.add_argument('x', choices='abc', help='x help') - - # add second sub-parser - parser2_kwargs = dict(description='2 description') - if subparser_help: - parser2_kwargs['help'] = '2 help' - parser2 = subparsers.add_parser('2', **parser2_kwargs) - parser2.add_argument('-y', choices='123', help='y help') - parser2.add_argument('z', type=complex, nargs='*', help='z help') - - # return the main parser - return parser - - def setUp(self): - self.parser = self._get_parser() - self.command_help_parser = self._get_parser(subparser_help=True) - - def test_parse_args_failures(self): - # check some failure cases: - for args_str in ['', 'a', 'a a', '0.5 a', '0.5 1', - '0.5 1 -y', '0.5 2 -w']: - args = args_str.split() - self.assertArgumentParserError(self.parser.parse_args, args) - - def test_parse_args(self): - # check some non-failure cases: - self.assertEqual( - self.parser.parse_args('0.5 1 b -w 7'.split()), - NS(foo=False, bar=0.5, w=7, x='b'), - ) - self.assertEqual( - self.parser.parse_args('0.25 --foo 2 -y 2 3j -- -1j'.split()), - NS(foo=True, bar=0.25, y='2', z=[3j, -1j]), - ) - self.assertEqual( - self.parser.parse_args('--foo 0.125 1 c'.split()), - NS(foo=True, bar=0.125, w=None, x='c'), - ) - - def test_dest(self): - parser = ErrorRaisingArgumentParser() - parser.add_argument('--foo', action='store_true') - subparsers = parser.add_subparsers(dest='bar') - parser1 = subparsers.add_parser('1') - parser1.add_argument('baz') - self.assertEqual(NS(foo=False, bar='1', baz='2'), - parser.parse_args('1 2'.split())) - - def test_help(self): - self.assertEqual(self.parser.format_usage(), - 'usage: PROG [-h] [--foo] bar {1,2} ...\n') - self.assertEqual(self.parser.format_help(), textwrap.dedent('''\ - usage: PROG [-h] [--foo] bar {1,2} ... - - main description - - positional arguments: - bar bar help - {1,2} command help - - optional arguments: - -h, --help show this help message and exit - --foo foo help - ''')) - - def test_parser_command_help(self): - self.assertEqual(self.command_help_parser.format_usage(), - 'usage: PROG [-h] [--foo] bar {1,2} ...\n') - self.assertEqual(self.command_help_parser.format_help(), - textwrap.dedent('''\ - usage: PROG [-h] [--foo] bar {1,2} ... - - main description - - positional arguments: - bar bar help - {1,2} command help - 1 1 help - 2 2 help - - optional arguments: - -h, --help show this help message and exit - --foo foo help - ''')) - - def test_subparser_title_help(self): - parser = ErrorRaisingArgumentParser(prog='PROG', - description='main description') - parser.add_argument('--foo', action='store_true', help='foo help') - parser.add_argument('bar', help='bar help') - subparsers = parser.add_subparsers(title='subcommands', - description='command help', - help='additional text') - parser1 = subparsers.add_parser('1') - parser2 = subparsers.add_parser('2') - self.assertEqual(parser.format_usage(), - 'usage: PROG [-h] [--foo] bar {1,2} ...\n') - self.assertEqual(parser.format_help(), textwrap.dedent('''\ - usage: PROG [-h] [--foo] bar {1,2} ... - - main description - - positional arguments: - bar bar help - - optional arguments: - -h, --help show this help message and exit - --foo foo help - - subcommands: - command help - - {1,2} additional text - ''')) - - def _test_subparser_help(self, args_str, expected_help): - try: - self.parser.parse_args(args_str.split()) - except ArgumentParserError: - err = sys.exc_info()[1] - if err.stdout != expected_help: - print(repr(expected_help)) - print(repr(err.stdout)) - self.assertEqual(err.stdout, expected_help) - - def test_subparser1_help(self): - self._test_subparser_help('5.0 1 -h', textwrap.dedent('''\ - usage: PROG bar 1 [-h] [-w W] {a,b,c} - - 1 description - - positional arguments: - {a,b,c} x help - - optional arguments: - -h, --help show this help message and exit - -w W w help - ''')) - - def test_subparser2_help(self): - self._test_subparser_help('5.0 2 -h', textwrap.dedent('''\ - usage: PROG bar 2 [-h] [-y {1,2,3}] [z [z ...]] - - 2 description - - positional arguments: - z z help - - optional arguments: - -h, --help show this help message and exit - -y {1,2,3} y help - ''')) - -# ============ -# Groups tests -# ============ - -class TestPositionalsGroups(TestCase): - """Tests that order of group positionals matches construction order""" - - def test_nongroup_first(self): - parser = ErrorRaisingArgumentParser() - parser.add_argument('foo') - group = parser.add_argument_group('g') - group.add_argument('bar') - parser.add_argument('baz') - expected = NS(foo='1', bar='2', baz='3') - result = parser.parse_args('1 2 3'.split()) - self.failUnlessEqual(expected, result) - - def test_group_first(self): - parser = ErrorRaisingArgumentParser() - group = parser.add_argument_group('xxx') - group.add_argument('foo') - parser.add_argument('bar') - parser.add_argument('baz') - expected = NS(foo='1', bar='2', baz='3') - result = parser.parse_args('1 2 3'.split()) - self.failUnlessEqual(expected, result) - - def test_interleaved_groups(self): - parser = ErrorRaisingArgumentParser() - group = parser.add_argument_group('xxx') - parser.add_argument('foo') - group.add_argument('bar') - parser.add_argument('baz') - group = parser.add_argument_group('yyy') - group.add_argument('frell') - expected = NS(foo='1', bar='2', baz='3', frell='4') - result = parser.parse_args('1 2 3 4'.split()) - self.failUnlessEqual(expected, result) - -# =================== -# Parent parser tests -# =================== - -class TestParentParsers(TestCase): - """Tests that parsers can be created with parent parsers""" - - def assertArgumentParserError(self, *args, **kwargs): - self.assertRaises(ArgumentParserError, *args, **kwargs) - - def setUp(self): - self.wxyz_parent = ErrorRaisingArgumentParser(add_help=False) - self.wxyz_parent.add_argument('--w') - x_group = self.wxyz_parent.add_argument_group('x') - x_group.add_argument('-y') - self.wxyz_parent.add_argument('z') - - self.abcd_parent = ErrorRaisingArgumentParser(add_help=False) - self.abcd_parent.add_argument('a') - self.abcd_parent.add_argument('-b') - c_group = self.abcd_parent.add_argument_group('c') - c_group.add_argument('--d') - - self.w_parent = ErrorRaisingArgumentParser(add_help=False) - self.w_parent.add_argument('--w') - - self.z_parent = ErrorRaisingArgumentParser(add_help=False) - self.z_parent.add_argument('z') - - # parents with mutually exclusive groups - self.ab_mutex_parent = ErrorRaisingArgumentParser(add_help=False) - group = self.ab_mutex_parent.add_mutually_exclusive_group() - group.add_argument('-a', action='store_true') - group.add_argument('-b', action='store_true') - - def test_single_parent(self): - parser = ErrorRaisingArgumentParser(parents=[self.wxyz_parent]) - self.assertEqual(parser.parse_args('-y 1 2 --w 3'.split()), - NS(w='3', y='1', z='2')) - - def test_single_parent_mutex(self): - self._test_mutex_ab(self.ab_mutex_parent.parse_args) - parser = ErrorRaisingArgumentParser(parents=[self.ab_mutex_parent]) - self._test_mutex_ab(parser.parse_args) - - def test_single_granparent_mutex(self): - parents = [self.ab_mutex_parent] - parser = ErrorRaisingArgumentParser(add_help=False, parents=parents) - parser = ErrorRaisingArgumentParser(parents=[parser]) - self._test_mutex_ab(parser.parse_args) - - def _test_mutex_ab(self, parse_args): - self.assertEqual(parse_args([]), NS(a=False, b=False)) - self.assertEqual(parse_args(['-a']), NS(a=True, b=False)) - self.assertEqual(parse_args(['-b']), NS(a=False, b=True)) - self.assertArgumentParserError(parse_args, ['-a', '-b']) - self.assertArgumentParserError(parse_args, ['-b', '-a']) - self.assertArgumentParserError(parse_args, ['-c']) - self.assertArgumentParserError(parse_args, ['-a', '-c']) - self.assertArgumentParserError(parse_args, ['-b', '-c']) - - def test_multiple_parents(self): - parents = [self.abcd_parent, self.wxyz_parent] - parser = ErrorRaisingArgumentParser(parents=parents) - self.assertEqual(parser.parse_args('--d 1 --w 2 3 4'.split()), - NS(a='3', b=None, d='1', w='2', y=None, z='4')) - - def test_multiple_parents_mutex(self): - parents = [self.ab_mutex_parent, self.wxyz_parent] - parser = ErrorRaisingArgumentParser(parents=parents) - self.assertEqual(parser.parse_args('-a --w 2 3'.split()), - NS(a=True, b=False, w='2', y=None, z='3')) - self.assertArgumentParserError( - parser.parse_args, '-a --w 2 3 -b'.split()) - self.assertArgumentParserError( - parser.parse_args, '-a -b --w 2 3'.split()) - - def test_conflicting_parents(self): - self.assertRaises( - argparse.ArgumentError, - argparse.ArgumentParser, - parents=[self.w_parent, self.wxyz_parent]) - - def test_conflicting_parents_mutex(self): - self.assertRaises( - argparse.ArgumentError, - argparse.ArgumentParser, - parents=[self.abcd_parent, self.ab_mutex_parent]) - - def test_same_argument_name_parents(self): - parents = [self.wxyz_parent, self.z_parent] - parser = ErrorRaisingArgumentParser(parents=parents) - self.assertEqual(parser.parse_args('1 2'.split()), - NS(w=None, y=None, z='2')) - - def test_subparser_parents(self): - parser = ErrorRaisingArgumentParser() - subparsers = parser.add_subparsers() - abcde_parser = subparsers.add_parser('bar', parents=[self.abcd_parent]) - abcde_parser.add_argument('e') - self.assertEqual(parser.parse_args('bar -b 1 --d 2 3 4'.split()), - NS(a='3', b='1', d='2', e='4')) - - def test_subparser_parents_mutex(self): - parser = ErrorRaisingArgumentParser() - subparsers = parser.add_subparsers() - parents = [self.ab_mutex_parent] - abc_parser = subparsers.add_parser('foo', parents=parents) - c_group = abc_parser.add_argument_group('c_group') - c_group.add_argument('c') - parents = [self.wxyz_parent, self.ab_mutex_parent] - wxyzabe_parser = subparsers.add_parser('bar', parents=parents) - wxyzabe_parser.add_argument('e') - self.assertEqual(parser.parse_args('foo -a 4'.split()), - NS(a=True, b=False, c='4')) - self.assertEqual(parser.parse_args('bar -b --w 2 3 4'.split()), - NS(a=False, b=True, w='2', y=None, z='3', e='4')) - self.assertArgumentParserError( - parser.parse_args, 'foo -a -b 4'.split()) - self.assertArgumentParserError( - parser.parse_args, 'bar -b -a 4'.split()) - - def test_parent_help(self): - parents = [self.abcd_parent, self.wxyz_parent] - parser = ErrorRaisingArgumentParser(parents=parents) - parser_help = parser.format_help() - self.assertEqual(parser_help, textwrap.dedent('''\ - usage: test_argparse.py [-h] [-b B] [--d D] [--w W] [-y Y] a z - - positional arguments: - a - z - - optional arguments: - -h, --help show this help message and exit - -b B - --w W - - c: - --d D - - x: - -y Y - ''')) - - def test_groups_parents(self): - parent = ErrorRaisingArgumentParser(add_help=False) - g = parent.add_argument_group(title='g', description='gd') - g.add_argument('-w') - g.add_argument('-x') - m = parent.add_mutually_exclusive_group() - m.add_argument('-y') - m.add_argument('-z') - parser = ErrorRaisingArgumentParser(parents=[parent]) - - self.assertRaises(ArgumentParserError, parser.parse_args, - ['-y', 'Y', '-z', 'Z']) - - parser_help = parser.format_help() - self.assertEqual(parser_help, textwrap.dedent('''\ - usage: test_argparse.py [-h] [-w W] [-x X] [-y Y | -z Z] - - optional arguments: - -h, --help show this help message and exit - -y Y - -z Z - - g: - gd - - -w W - -x X - ''')) - -# ============================== -# Mutually exclusive group tests -# ============================== - -class TestMutuallyExclusiveGroupErrors(TestCase): - - def test_invalid_add_argument_group(self): - parser = ErrorRaisingArgumentParser() - raises = self.assertRaises - raises(TypeError, parser.add_mutually_exclusive_group, title='foo') - - def test_invalid_add_argument(self): - parser = ErrorRaisingArgumentParser() - group = parser.add_mutually_exclusive_group() - add_argument = group.add_argument - raises = self.assertRaises - raises(ValueError, add_argument, '--foo', required=True) - raises(ValueError, add_argument, 'bar') - raises(ValueError, add_argument, 'bar', nargs='+') - raises(ValueError, add_argument, 'bar', nargs=1) - raises(ValueError, add_argument, 'bar', nargs=argparse.PARSER) - - -class MEMixin(object): - - def test_failures_when_not_required(self): - parse_args = self.get_parser(required=False).parse_args - error = ArgumentParserError - for args_string in self.failures: - self.assertRaises(error, parse_args, args_string.split()) - - def test_failures_when_required(self): - parse_args = self.get_parser(required=True).parse_args - error = ArgumentParserError - for args_string in self.failures + ['']: - self.assertRaises(error, parse_args, args_string.split()) - - def test_successes_when_not_required(self): - parse_args = self.get_parser(required=False).parse_args - successes = self.successes + self.successes_when_not_required - for args_string, expected_ns in successes: - actual_ns = parse_args(args_string.split()) - self.assertEqual(actual_ns, expected_ns) - - def test_successes_when_required(self): - parse_args = self.get_parser(required=True).parse_args - for args_string, expected_ns in self.successes: - actual_ns = parse_args(args_string.split()) - self.assertEqual(actual_ns, expected_ns) - - def test_usage_when_not_required(self): - format_usage = self.get_parser(required=False).format_usage - expected_usage = self.usage_when_not_required - self.assertEqual(format_usage(), textwrap.dedent(expected_usage)) - - def test_usage_when_required(self): - format_usage = self.get_parser(required=True).format_usage - expected_usage = self.usage_when_required - self.assertEqual(format_usage(), textwrap.dedent(expected_usage)) - - def test_help_when_not_required(self): - format_help = self.get_parser(required=False).format_help - help = self.usage_when_not_required + self.help - self.assertEqual(format_help(), textwrap.dedent(help)) - - def test_help_when_required(self): - format_help = self.get_parser(required=True).format_help - help = self.usage_when_required + self.help - self.assertEqual(format_help(), textwrap.dedent(help)) - - -class TestMutuallyExclusiveSimple(MEMixin, TestCase): - - def get_parser(self, required=None): - parser = ErrorRaisingArgumentParser(prog='PROG') - group = parser.add_mutually_exclusive_group(required=required) - group.add_argument('--bar', help='bar help') - group.add_argument('--baz', nargs='?', const='Z', help='baz help') - return parser - - failures = ['--bar X --baz Y', '--bar X --baz'] - successes = [ - ('--bar X', NS(bar='X', baz=None)), - ('--bar X --bar Z', NS(bar='Z', baz=None)), - ('--baz Y', NS(bar=None, baz='Y')), - ('--baz', NS(bar=None, baz='Z')), - ] - successes_when_not_required = [ - ('', NS(bar=None, baz=None)), - ] - - usage_when_not_required = '''\ - usage: PROG [-h] [--bar BAR | --baz [BAZ]] - ''' - usage_when_required = '''\ - usage: PROG [-h] (--bar BAR | --baz [BAZ]) - ''' - help = '''\ - - optional arguments: - -h, --help show this help message and exit - --bar BAR bar help - --baz [BAZ] baz help - ''' - - -class TestMutuallyExclusiveLong(MEMixin, TestCase): - - def get_parser(self, required=None): - parser = ErrorRaisingArgumentParser(prog='PROG') - parser.add_argument('--abcde', help='abcde help') - parser.add_argument('--fghij', help='fghij help') - group = parser.add_mutually_exclusive_group(required=required) - group.add_argument('--klmno', help='klmno help') - group.add_argument('--pqrst', help='pqrst help') - return parser - - failures = ['--klmno X --pqrst Y'] - successes = [ - ('--klmno X', NS(abcde=None, fghij=None, klmno='X', pqrst=None)), - ('--abcde Y --klmno X', - NS(abcde='Y', fghij=None, klmno='X', pqrst=None)), - ('--pqrst X', NS(abcde=None, fghij=None, klmno=None, pqrst='X')), - ('--pqrst X --fghij Y', - NS(abcde=None, fghij='Y', klmno=None, pqrst='X')), - ] - successes_when_not_required = [ - ('', NS(abcde=None, fghij=None, klmno=None, pqrst=None)), - ] - - usage_when_not_required = '''\ - usage: PROG [-h] [--abcde ABCDE] [--fghij FGHIJ] - [--klmno KLMNO | --pqrst PQRST] - ''' - usage_when_required = '''\ - usage: PROG [-h] [--abcde ABCDE] [--fghij FGHIJ] - (--klmno KLMNO | --pqrst PQRST) - ''' - help = '''\ - - optional arguments: - -h, --help show this help message and exit - --abcde ABCDE abcde help - --fghij FGHIJ fghij help - --klmno KLMNO klmno help - --pqrst PQRST pqrst help - ''' - - -class TestMutuallyExclusiveFirstSuppressed(MEMixin, TestCase): - - def get_parser(self, required): - parser = ErrorRaisingArgumentParser(prog='PROG') - group = parser.add_mutually_exclusive_group(required=required) - group.add_argument('-x', help=argparse.SUPPRESS) - group.add_argument('-y', action='store_false', help='y help') - return parser - - failures = ['-x X -y'] - successes = [ - ('-x X', NS(x='X', y=True)), - ('-x X -x Y', NS(x='Y', y=True)), - ('-y', NS(x=None, y=False)), - ] - successes_when_not_required = [ - ('', NS(x=None, y=True)), - ] - - usage_when_not_required = '''\ - usage: PROG [-h] [-y] - ''' - usage_when_required = '''\ - usage: PROG [-h] -y - ''' - help = '''\ - - optional arguments: - -h, --help show this help message and exit - -y y help - ''' - - -class TestMutuallyExclusiveManySuppressed(MEMixin, TestCase): - - def get_parser(self, required): - parser = ErrorRaisingArgumentParser(prog='PROG') - group = parser.add_mutually_exclusive_group(required=required) - add = group.add_argument - add('--spam', action='store_true', help=argparse.SUPPRESS) - add('--badger', action='store_false', help=argparse.SUPPRESS) - add('--bladder', help=argparse.SUPPRESS) - return parser - - failures = [ - '--spam --badger', - '--badger --bladder B', - '--bladder B --spam', - ] - successes = [ - ('--spam', NS(spam=True, badger=True, bladder=None)), - ('--badger', NS(spam=False, badger=False, bladder=None)), - ('--bladder B', NS(spam=False, badger=True, bladder='B')), - ('--spam --spam', NS(spam=True, badger=True, bladder=None)), - ] - successes_when_not_required = [ - ('', NS(spam=False, badger=True, bladder=None)), - ] - - usage_when_required = usage_when_not_required = '''\ - usage: PROG [-h] - ''' - help = '''\ - - optional arguments: - -h, --help show this help message and exit - ''' - - -class TestMutuallyExclusiveOptionalAndPositional(MEMixin, TestCase): - - def get_parser(self, required): - parser = ErrorRaisingArgumentParser(prog='PROG') - group = parser.add_mutually_exclusive_group(required=required) - group.add_argument('--foo', action='store_true', help='FOO') - group.add_argument('--spam', help='SPAM') - group.add_argument('badger', nargs='*', default='X', help='BADGER') - return parser - - failures = [ - '--foo --spam S', - '--spam S X', - 'X --foo', - 'X Y Z --spam S', - '--foo X Y', - ] - successes = [ - ('--foo', NS(foo=True, spam=None, badger='X')), - ('--spam S', NS(foo=False, spam='S', badger='X')), - ('X', NS(foo=False, spam=None, badger=['X'])), - ('X Y Z', NS(foo=False, spam=None, badger=['X', 'Y', 'Z'])), - ] - successes_when_not_required = [ - ('', NS(foo=False, spam=None, badger='X')), - ] - - usage_when_not_required = '''\ - usage: PROG [-h] [--foo | --spam SPAM | badger [badger ...]] - ''' - usage_when_required = '''\ - usage: PROG [-h] (--foo | --spam SPAM | badger [badger ...]) - ''' - help = '''\ - - positional arguments: - badger BADGER - - optional arguments: - -h, --help show this help message and exit - --foo FOO - --spam SPAM SPAM - ''' - - -class TestMutuallyExclusiveOptionalsMixed(MEMixin, TestCase): - - def get_parser(self, required): - parser = ErrorRaisingArgumentParser(prog='PROG') - parser.add_argument('-x', action='store_true', help='x help') - group = parser.add_mutually_exclusive_group(required=required) - group.add_argument('-a', action='store_true', help='a help') - group.add_argument('-b', action='store_true', help='b help') - parser.add_argument('-y', action='store_true', help='y help') - group.add_argument('-c', action='store_true', help='c help') - return parser - - failures = ['-a -b', '-b -c', '-a -c', '-a -b -c'] - successes = [ - ('-a', NS(a=True, b=False, c=False, x=False, y=False)), - ('-b', NS(a=False, b=True, c=False, x=False, y=False)), - ('-c', NS(a=False, b=False, c=True, x=False, y=False)), - ('-a -x', NS(a=True, b=False, c=False, x=True, y=False)), - ('-y -b', NS(a=False, b=True, c=False, x=False, y=True)), - ('-x -y -c', NS(a=False, b=False, c=True, x=True, y=True)), - ] - successes_when_not_required = [ - ('', NS(a=False, b=False, c=False, x=False, y=False)), - ('-x', NS(a=False, b=False, c=False, x=True, y=False)), - ('-y', NS(a=False, b=False, c=False, x=False, y=True)), - ] - - usage_when_required = usage_when_not_required = '''\ - usage: PROG [-h] [-x] [-a] [-b] [-y] [-c] - ''' - help = '''\ - - optional arguments: - -h, --help show this help message and exit - -x x help - -a a help - -b b help - -y y help - -c c help - ''' - - -class TestMutuallyExclusiveOptionalsAndPositionalsMixed(MEMixin, TestCase): - - def get_parser(self, required): - parser = ErrorRaisingArgumentParser(prog='PROG') - parser.add_argument('x', help='x help') - parser.add_argument('-y', action='store_true', help='y help') - group = parser.add_mutually_exclusive_group(required=required) - group.add_argument('a', nargs='?', help='a help') - group.add_argument('-b', action='store_true', help='b help') - group.add_argument('-c', action='store_true', help='c help') - return parser - - failures = ['X A -b', '-b -c', '-c X A'] - successes = [ - ('X A', NS(a='A', b=False, c=False, x='X', y=False)), - ('X -b', NS(a=None, b=True, c=False, x='X', y=False)), - ('X -c', NS(a=None, b=False, c=True, x='X', y=False)), - ('X A -y', NS(a='A', b=False, c=False, x='X', y=True)), - ('X -y -b', NS(a=None, b=True, c=False, x='X', y=True)), - ] - successes_when_not_required = [ - ('X', NS(a=None, b=False, c=False, x='X', y=False)), - ('X -y', NS(a=None, b=False, c=False, x='X', y=True)), - ] - - usage_when_required = usage_when_not_required = '''\ - usage: PROG [-h] [-y] [-b] [-c] x [a] - ''' - help = '''\ - - positional arguments: - x x help - a a help - - optional arguments: - -h, --help show this help message and exit - -y y help - -b b help - -c c help - ''' - -# ================================================= -# Mutually exclusive group in parent parser tests -# ================================================= - -class MEPBase(object): - - def get_parser(self, required=None): - parent = super(MEPBase, self).get_parser(required=required) - parser = ErrorRaisingArgumentParser( - prog=parent.prog, add_help=False, parents=[parent]) - return parser - - -class TestMutuallyExclusiveGroupErrorsParent( - MEPBase, TestMutuallyExclusiveGroupErrors): - pass - - -class TestMutuallyExclusiveSimpleParent( - MEPBase, TestMutuallyExclusiveSimple): - pass - - -class TestMutuallyExclusiveLongParent( - MEPBase, TestMutuallyExclusiveLong): - pass - - -class TestMutuallyExclusiveFirstSuppressedParent( - MEPBase, TestMutuallyExclusiveFirstSuppressed): - pass - - -class TestMutuallyExclusiveManySuppressedParent( - MEPBase, TestMutuallyExclusiveManySuppressed): - pass - - -class TestMutuallyExclusiveOptionalAndPositionalParent( - MEPBase, TestMutuallyExclusiveOptionalAndPositional): - pass - - -class TestMutuallyExclusiveOptionalsMixedParent( - MEPBase, TestMutuallyExclusiveOptionalsMixed): - pass - - -class TestMutuallyExclusiveOptionalsAndPositionalsMixedParent( - MEPBase, TestMutuallyExclusiveOptionalsAndPositionalsMixed): - pass - -# ================= -# Set default tests -# ================= - -class TestSetDefaults(TestCase): - - def test_set_defaults_no_args(self): - parser = ErrorRaisingArgumentParser() - parser.set_defaults(x='foo') - parser.set_defaults(y='bar', z=1) - self.assertEqual(NS(x='foo', y='bar', z=1), - parser.parse_args([])) - self.assertEqual(NS(x='foo', y='bar', z=1), - parser.parse_args([], NS())) - self.assertEqual(NS(x='baz', y='bar', z=1), - parser.parse_args([], NS(x='baz'))) - self.assertEqual(NS(x='baz', y='bar', z=2), - parser.parse_args([], NS(x='baz', z=2))) - - def test_set_defaults_with_args(self): - parser = ErrorRaisingArgumentParser() - parser.set_defaults(x='foo', y='bar') - parser.add_argument('-x', default='xfoox') - self.assertEqual(NS(x='xfoox', y='bar'), - parser.parse_args([])) - self.assertEqual(NS(x='xfoox', y='bar'), - parser.parse_args([], NS())) - self.assertEqual(NS(x='baz', y='bar'), - parser.parse_args([], NS(x='baz'))) - self.assertEqual(NS(x='1', y='bar'), - parser.parse_args('-x 1'.split())) - self.assertEqual(NS(x='1', y='bar'), - parser.parse_args('-x 1'.split(), NS())) - self.assertEqual(NS(x='1', y='bar'), - parser.parse_args('-x 1'.split(), NS(x='baz'))) - - def test_set_defaults_subparsers(self): - parser = ErrorRaisingArgumentParser() - parser.set_defaults(x='foo') - subparsers = parser.add_subparsers() - parser_a = subparsers.add_parser('a') - parser_a.set_defaults(y='bar') - self.assertEqual(NS(x='foo', y='bar'), - parser.parse_args('a'.split())) - - def test_set_defaults_parents(self): - parent = ErrorRaisingArgumentParser(add_help=False) - parent.set_defaults(x='foo') - parser = ErrorRaisingArgumentParser(parents=[parent]) - self.assertEqual(NS(x='foo'), parser.parse_args([])) - - def test_set_defaults_same_as_add_argument(self): - parser = ErrorRaisingArgumentParser() - parser.set_defaults(w='W', x='X', y='Y', z='Z') - parser.add_argument('-w') - parser.add_argument('-x', default='XX') - parser.add_argument('y', nargs='?') - parser.add_argument('z', nargs='?', default='ZZ') - - # defaults set previously - self.assertEqual(NS(w='W', x='XX', y='Y', z='ZZ'), - parser.parse_args([])) - - # reset defaults - parser.set_defaults(w='WW', x='X', y='YY', z='Z') - self.assertEqual(NS(w='WW', x='X', y='YY', z='Z'), - parser.parse_args([])) - - def test_set_defaults_same_as_add_argument_group(self): - parser = ErrorRaisingArgumentParser() - parser.set_defaults(w='W', x='X', y='Y', z='Z') - group = parser.add_argument_group('foo') - group.add_argument('-w') - group.add_argument('-x', default='XX') - group.add_argument('y', nargs='?') - group.add_argument('z', nargs='?', default='ZZ') - - - # defaults set previously - self.assertEqual(NS(w='W', x='XX', y='Y', z='ZZ'), - parser.parse_args([])) - - # reset defaults - parser.set_defaults(w='WW', x='X', y='YY', z='Z') - self.assertEqual(NS(w='WW', x='X', y='YY', z='Z'), - parser.parse_args([])) - -# ================= -# Get default tests -# ================= - -class TestGetDefault(TestCase): - - def test_get_default(self): - parser = ErrorRaisingArgumentParser() - self.assertEqual(None, parser.get_default("foo")) - self.assertEqual(None, parser.get_default("bar")) - - parser.add_argument("--foo") - self.assertEqual(None, parser.get_default("foo")) - self.assertEqual(None, parser.get_default("bar")) - - parser.add_argument("--bar", type=int, default=42) - self.assertEqual(None, parser.get_default("foo")) - self.assertEqual(42, parser.get_default("bar")) - - parser.set_defaults(foo="badger") - self.assertEqual("badger", parser.get_default("foo")) - self.assertEqual(42, parser.get_default("bar")) - -# ========================== -# Namespace 'contains' tests -# ========================== - -class TestNamespaceContainsSimple(TestCase): - - def test_empty(self): - ns = argparse.Namespace() - self.assertEquals('' in ns, False) - self.assertEquals('' not in ns, True) - self.assertEquals('x' in ns, False) - - def test_non_empty(self): - ns = argparse.Namespace(x=1, y=2) - self.assertEquals('x' in ns, True) - self.assertEquals('x' not in ns, False) - self.assertEquals('y' in ns, True) - self.assertEquals('' in ns, False) - self.assertEquals('xx' in ns, False) - self.assertEquals('z' in ns, False) - -# ===================== -# Help formatting tests -# ===================== - -class TestHelpFormattingMetaclass(type): - - def __init__(cls, name, bases, bodydict): - if name == 'HelpTestCase': - return - - class AddTests(object): - - def __init__(self, test_class, func_suffix, std_name): - self.func_suffix = func_suffix - self.std_name = std_name - - for test_func in [self.test_format, - self.test_print, - self.test_print_file]: - test_name = '%s_%s' % (test_func.__name__, func_suffix) - - def test_wrapper(self, test_func=test_func): - test_func(self) - try: - test_wrapper.__name__ = test_name - except TypeError: - pass - setattr(test_class, test_name, test_wrapper) - - def _get_parser(self, tester): - parser = argparse.ArgumentParser( - *tester.parser_signature.args, - **tester.parser_signature.kwargs) - for argument_sig in tester.argument_signatures: - parser.add_argument(*argument_sig.args, - **argument_sig.kwargs) - group_signatures = tester.argument_group_signatures - for group_sig, argument_sigs in group_signatures: - group = parser.add_argument_group(*group_sig.args, - **group_sig.kwargs) - for argument_sig in argument_sigs: - group.add_argument(*argument_sig.args, - **argument_sig.kwargs) - return parser - - def _test(self, tester, parser_text): - expected_text = getattr(tester, self.func_suffix) - expected_text = textwrap.dedent(expected_text) - if expected_text != parser_text: - print(repr(expected_text)) - print(repr(parser_text)) - for char1, char2 in zip(expected_text, parser_text): - if char1 != char2: - print('first diff: %r %r' % (char1, char2)) - break - tester.assertEqual(expected_text, parser_text) - - def test_format(self, tester): - parser = self._get_parser(tester) - format = getattr(parser, 'format_%s' % self.func_suffix) - self._test(tester, format()) - - def test_print(self, tester): - parser = self._get_parser(tester) - print_ = getattr(parser, 'print_%s' % self.func_suffix) - old_stream = getattr(sys, self.std_name) - setattr(sys, self.std_name, StringIO()) - try: - print_() - parser_text = getattr(sys, self.std_name).getvalue() - finally: - setattr(sys, self.std_name, old_stream) - self._test(tester, parser_text) - - def test_print_file(self, tester): - parser = self._get_parser(tester) - print_ = getattr(parser, 'print_%s' % self.func_suffix) - sfile = StringIO() - print_(sfile) - parser_text = sfile.getvalue() - self._test(tester, parser_text) - - # add tests for {format,print}_{usage,help,version} - for func_suffix, std_name in [('usage', 'stdout'), - ('help', 'stdout'), - ('version', 'stderr')]: - AddTests(cls, func_suffix, std_name) - -bases = TestCase, -HelpTestCase = TestHelpFormattingMetaclass('HelpTestCase', bases, {}) - - -class TestHelpBiggerOptionals(HelpTestCase): - """Make sure that argument help aligns when options are longer""" - - parser_signature = Sig(prog='PROG', description='DESCRIPTION', - epilog='EPILOG', version='0.1') - argument_signatures = [ - Sig('-x', action='store_true', help='X HELP'), - Sig('--y', help='Y HELP'), - Sig('foo', help='FOO HELP'), - Sig('bar', help='BAR HELP'), - ] - argument_group_signatures = [] - usage = '''\ - usage: PROG [-h] [-v] [-x] [--y Y] foo bar - ''' - help = usage + '''\ - - DESCRIPTION - - positional arguments: - foo FOO HELP - bar BAR HELP - - optional arguments: - -h, --help show this help message and exit - -v, --version show program's version number and exit - -x X HELP - --y Y Y HELP - - EPILOG - ''' - version = '''\ - 0.1 - ''' - - -class TestHelpBiggerOptionalGroups(HelpTestCase): - """Make sure that argument help aligns when options are longer""" - - parser_signature = Sig(prog='PROG', description='DESCRIPTION', - epilog='EPILOG', version='0.1') - argument_signatures = [ - Sig('-x', action='store_true', help='X HELP'), - Sig('--y', help='Y HELP'), - Sig('foo', help='FOO HELP'), - Sig('bar', help='BAR HELP'), - ] - argument_group_signatures = [ - (Sig('GROUP TITLE', description='GROUP DESCRIPTION'), [ - Sig('baz', help='BAZ HELP'), - Sig('-z', nargs='+', help='Z HELP')]), - ] - usage = '''\ - usage: PROG [-h] [-v] [-x] [--y Y] [-z Z [Z ...]] foo bar baz - ''' - help = usage + '''\ - - DESCRIPTION - - positional arguments: - foo FOO HELP - bar BAR HELP - - optional arguments: - -h, --help show this help message and exit - -v, --version show program's version number and exit - -x X HELP - --y Y Y HELP - - GROUP TITLE: - GROUP DESCRIPTION - - baz BAZ HELP - -z Z [Z ...] Z HELP - - EPILOG - ''' - version = '''\ - 0.1 - ''' - - -class TestHelpBiggerPositionals(HelpTestCase): - """Make sure that help aligns when arguments are longer""" - - parser_signature = Sig(usage='USAGE', description='DESCRIPTION') - argument_signatures = [ - Sig('-x', action='store_true', help='X HELP'), - Sig('--y', help='Y HELP'), - Sig('ekiekiekifekang', help='EKI HELP'), - Sig('bar', help='BAR HELP'), - ] - argument_group_signatures = [] - usage = '''\ - usage: USAGE - ''' - help = usage + '''\ - - DESCRIPTION - - positional arguments: - ekiekiekifekang EKI HELP - bar BAR HELP - - optional arguments: - -h, --help show this help message and exit - -x X HELP - --y Y Y HELP - ''' - - version = '' - - -class TestHelpReformatting(HelpTestCase): - """Make sure that text after short names starts on the first line""" - - parser_signature = Sig( - prog='PROG', - description=' oddly formatted\n' - 'description\n' - '\n' - 'that is so long that it should go onto multiple ' - 'lines when wrapped') - argument_signatures = [ - Sig('-x', metavar='XX', help='oddly\n' - ' formatted -x help'), - Sig('y', metavar='yyy', help='normal y help'), - ] - argument_group_signatures = [ - (Sig('title', description='\n' - ' oddly formatted group\n' - '\n' - 'description'), - [Sig('-a', action='store_true', - help=' oddly \n' - 'formatted -a help \n' - ' again, so long that it should be wrapped over ' - 'multiple lines')]), - ] - usage = '''\ - usage: PROG [-h] [-x XX] [-a] yyy - ''' - help = usage + '''\ - - oddly formatted description that is so long that it should go onto \ -multiple - lines when wrapped - - positional arguments: - yyy normal y help - - optional arguments: - -h, --help show this help message and exit - -x XX oddly formatted -x help - - title: - oddly formatted group description - - -a oddly formatted -a help again, so long that it should \ -be wrapped - over multiple lines - ''' - version = '' - - -class TestHelpWrappingShortNames(HelpTestCase): - """Make sure that text after short names starts on the first line""" - - parser_signature = Sig(prog='PROG', description= 'D\nD' * 30) - argument_signatures = [ - Sig('-x', metavar='XX', help='XHH HX' * 20), - Sig('y', metavar='yyy', help='YH YH' * 20), - ] - argument_group_signatures = [ - (Sig('ALPHAS'), [ - Sig('-a', action='store_true', help='AHHH HHA' * 10)]), - ] - usage = '''\ - usage: PROG [-h] [-x XX] [-a] yyy - ''' - help = usage + '''\ - - D DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD \ -DD DD DD - DD DD DD DD D - - positional arguments: - yyy YH YHYH YHYH YHYH YHYH YHYH YHYH YHYH YHYH YHYH YHYH \ -YHYH YHYH - YHYH YHYH YHYH YHYH YHYH YHYH YHYH YH - - optional arguments: - -h, --help show this help message and exit - -x XX XHH HXXHH HXXHH HXXHH HXXHH HXXHH HXXHH HXXHH HXXHH \ -HXXHH HXXHH - HXXHH HXXHH HXXHH HXXHH HXXHH HXXHH HXXHH HXXHH HXXHH HX - - ALPHAS: - -a AHHH HHAAHHH HHAAHHH HHAAHHH HHAAHHH HHAAHHH HHAAHHH \ -HHAAHHH - HHAAHHH HHAAHHH HHA - ''' - version = '' - - -class TestHelpWrappingLongNames(HelpTestCase): - """Make sure that text after long names starts on the next line""" - - parser_signature = Sig(usage='USAGE', description= 'D D' * 30, - version='V V'*30) - argument_signatures = [ - Sig('-x', metavar='X' * 25, help='XH XH' * 20), - Sig('y', metavar='y' * 25, help='YH YH' * 20), - ] - argument_group_signatures = [ - (Sig('ALPHAS'), [ - Sig('-a', metavar='A' * 25, help='AH AH' * 20), - Sig('z', metavar='z' * 25, help='ZH ZH' * 20)]), - ] - usage = '''\ - usage: USAGE - ''' - help = usage + '''\ - - D DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD \ -DD DD DD - DD DD DD DD D - - positional arguments: - yyyyyyyyyyyyyyyyyyyyyyyyy - YH YHYH YHYH YHYH YHYH YHYH YHYH YHYH YHYH \ -YHYH YHYH - YHYH YHYH YHYH YHYH YHYH YHYH YHYH YHYH YHYH YH - - optional arguments: - -h, --help show this help message and exit - -v, --version show program's version number and exit - -x XXXXXXXXXXXXXXXXXXXXXXXXX - XH XHXH XHXH XHXH XHXH XHXH XHXH XHXH XHXH \ -XHXH XHXH - XHXH XHXH XHXH XHXH XHXH XHXH XHXH XHXH XHXH XH - - ALPHAS: - -a AAAAAAAAAAAAAAAAAAAAAAAAA - AH AHAH AHAH AHAH AHAH AHAH AHAH AHAH AHAH \ -AHAH AHAH - AHAH AHAH AHAH AHAH AHAH AHAH AHAH AHAH AHAH AH - zzzzzzzzzzzzzzzzzzzzzzzzz - ZH ZHZH ZHZH ZHZH ZHZH ZHZH ZHZH ZHZH ZHZH \ -ZHZH ZHZH - ZHZH ZHZH ZHZH ZHZH ZHZH ZHZH ZHZH ZHZH ZHZH ZH - ''' - version = '''\ - V VV VV VV VV VV VV VV VV VV VV VV VV VV VV VV VV VV VV VV VV VV VV \ -VV VV VV - VV VV VV VV V - ''' - - -class TestHelpUsage(HelpTestCase): - """Test basic usage messages""" - - parser_signature = Sig(prog='PROG') - argument_signatures = [ - Sig('-w', nargs='+', help='w'), - Sig('-x', nargs='*', help='x'), - Sig('a', help='a'), - Sig('b', help='b', nargs=2), - Sig('c', help='c', nargs='?'), - ] - argument_group_signatures = [ - (Sig('group'), [ - Sig('-y', nargs='?', help='y'), - Sig('-z', nargs=3, help='z'), - Sig('d', help='d', nargs='*'), - Sig('e', help='e', nargs='+'), - ]) - ] - usage = '''\ - usage: PROG [-h] [-w W [W ...]] [-x [X [X ...]]] [-y [Y]] [-z Z Z Z] - a b b [c] [d [d ...]] e [e ...] - ''' - help = usage + '''\ - - positional arguments: - a a - b b - c c - - optional arguments: - -h, --help show this help message and exit - -w W [W ...] w - -x [X [X ...]] x - - group: - -y [Y] y - -z Z Z Z z - d d - e e - ''' - version = '' - - -class TestHelpOnlyUserGroups(HelpTestCase): - """Test basic usage messages""" - - parser_signature = Sig(prog='PROG', add_help=False) - argument_signatures = [] - argument_group_signatures = [ - (Sig('xxxx'), [ - Sig('-x', help='x'), - Sig('a', help='a'), - ]), - (Sig('yyyy'), [ - Sig('b', help='b'), - Sig('-y', help='y'), - ]), - ] - usage = '''\ - usage: PROG [-x X] [-y Y] a b - ''' - help = usage + '''\ - - xxxx: - -x X x - a a - - yyyy: - b b - -y Y y - ''' - version = '' - - -class TestHelpUsageLongProg(HelpTestCase): - """Test usage messages where the prog is long""" - - parser_signature = Sig(prog='P' * 60) - argument_signatures = [ - Sig('-w', metavar='W'), - Sig('-x', metavar='X'), - Sig('a'), - Sig('b'), - ] - argument_group_signatures = [] - usage = '''\ - usage: PPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPP - [-h] [-w W] [-x X] a b - ''' - help = usage + '''\ - - positional arguments: - a - b - - optional arguments: - -h, --help show this help message and exit - -w W - -x X - ''' - version = '' - - -class TestHelpUsageLongProgOptionsWrap(HelpTestCase): - """Test usage messages where the prog is long and the optionals wrap""" - - parser_signature = Sig(prog='P' * 60) - argument_signatures = [ - Sig('-w', metavar='W' * 25), - Sig('-x', metavar='X' * 25), - Sig('-y', metavar='Y' * 25), - Sig('-z', metavar='Z' * 25), - Sig('a'), - Sig('b'), - ] - argument_group_signatures = [] - usage = '''\ - usage: PPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPP - [-h] [-w WWWWWWWWWWWWWWWWWWWWWWWWW] \ -[-x XXXXXXXXXXXXXXXXXXXXXXXXX] - [-y YYYYYYYYYYYYYYYYYYYYYYYYY] [-z ZZZZZZZZZZZZZZZZZZZZZZZZZ] - a b - ''' - help = usage + '''\ - - positional arguments: - a - b - - optional arguments: - -h, --help show this help message and exit - -w WWWWWWWWWWWWWWWWWWWWWWWWW - -x XXXXXXXXXXXXXXXXXXXXXXXXX - -y YYYYYYYYYYYYYYYYYYYYYYYYY - -z ZZZZZZZZZZZZZZZZZZZZZZZZZ - ''' - version = '' - - -class TestHelpUsageLongProgPositionalsWrap(HelpTestCase): - """Test usage messages where the prog is long and the positionals wrap""" - - parser_signature = Sig(prog='P' * 60, add_help=False) - argument_signatures = [ - Sig('a' * 25), - Sig('b' * 25), - Sig('c' * 25), - ] - argument_group_signatures = [] - usage = '''\ - usage: PPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPP - aaaaaaaaaaaaaaaaaaaaaaaaa bbbbbbbbbbbbbbbbbbbbbbbbb - ccccccccccccccccccccccccc - ''' - help = usage + '''\ - - positional arguments: - aaaaaaaaaaaaaaaaaaaaaaaaa - bbbbbbbbbbbbbbbbbbbbbbbbb - ccccccccccccccccccccccccc - ''' - version = '' - - -class TestHelpUsageOptionalsWrap(HelpTestCase): - """Test usage messages where the optionals wrap""" - - parser_signature = Sig(prog='PROG') - argument_signatures = [ - Sig('-w', metavar='W' * 25), - Sig('-x', metavar='X' * 25), - Sig('-y', metavar='Y' * 25), - Sig('-z', metavar='Z' * 25), - Sig('a'), - Sig('b'), - Sig('c'), - ] - argument_group_signatures = [] - usage = '''\ - usage: PROG [-h] [-w WWWWWWWWWWWWWWWWWWWWWWWWW] \ -[-x XXXXXXXXXXXXXXXXXXXXXXXXX] - [-y YYYYYYYYYYYYYYYYYYYYYYYYY] \ -[-z ZZZZZZZZZZZZZZZZZZZZZZZZZ] - a b c - ''' - help = usage + '''\ - - positional arguments: - a - b - c - - optional arguments: - -h, --help show this help message and exit - -w WWWWWWWWWWWWWWWWWWWWWWWWW - -x XXXXXXXXXXXXXXXXXXXXXXXXX - -y YYYYYYYYYYYYYYYYYYYYYYYYY - -z ZZZZZZZZZZZZZZZZZZZZZZZZZ - ''' - version = '' - - -class TestHelpUsagePositionalsWrap(HelpTestCase): - """Test usage messages where the positionals wrap""" - - parser_signature = Sig(prog='PROG') - argument_signatures = [ - Sig('-x'), - Sig('-y'), - Sig('-z'), - Sig('a' * 25), - Sig('b' * 25), - Sig('c' * 25), - ] - argument_group_signatures = [] - usage = '''\ - usage: PROG [-h] [-x X] [-y Y] [-z Z] - aaaaaaaaaaaaaaaaaaaaaaaaa bbbbbbbbbbbbbbbbbbbbbbbbb - ccccccccccccccccccccccccc - ''' - help = usage + '''\ - - positional arguments: - aaaaaaaaaaaaaaaaaaaaaaaaa - bbbbbbbbbbbbbbbbbbbbbbbbb - ccccccccccccccccccccccccc - - optional arguments: - -h, --help show this help message and exit - -x X - -y Y - -z Z - ''' - version = '' - - -class TestHelpUsageOptionalsPositionalsWrap(HelpTestCase): - """Test usage messages where the optionals and positionals wrap""" - - parser_signature = Sig(prog='PROG') - argument_signatures = [ - Sig('-x', metavar='X' * 25), - Sig('-y', metavar='Y' * 25), - Sig('-z', metavar='Z' * 25), - Sig('a' * 25), - Sig('b' * 25), - Sig('c' * 25), - ] - argument_group_signatures = [] - usage = '''\ - usage: PROG [-h] [-x XXXXXXXXXXXXXXXXXXXXXXXXX] \ -[-y YYYYYYYYYYYYYYYYYYYYYYYYY] - [-z ZZZZZZZZZZZZZZZZZZZZZZZZZ] - aaaaaaaaaaaaaaaaaaaaaaaaa bbbbbbbbbbbbbbbbbbbbbbbbb - ccccccccccccccccccccccccc - ''' - help = usage + '''\ - - positional arguments: - aaaaaaaaaaaaaaaaaaaaaaaaa - bbbbbbbbbbbbbbbbbbbbbbbbb - ccccccccccccccccccccccccc - - optional arguments: - -h, --help show this help message and exit - -x XXXXXXXXXXXXXXXXXXXXXXXXX - -y YYYYYYYYYYYYYYYYYYYYYYYYY - -z ZZZZZZZZZZZZZZZZZZZZZZZZZ - ''' - version = '' - - -class TestHelpUsageOptionalsOnlyWrap(HelpTestCase): - """Test usage messages where there are only optionals and they wrap""" - - parser_signature = Sig(prog='PROG') - argument_signatures = [ - Sig('-x', metavar='X' * 25), - Sig('-y', metavar='Y' * 25), - Sig('-z', metavar='Z' * 25), - ] - argument_group_signatures = [] - usage = '''\ - usage: PROG [-h] [-x XXXXXXXXXXXXXXXXXXXXXXXXX] \ -[-y YYYYYYYYYYYYYYYYYYYYYYYYY] - [-z ZZZZZZZZZZZZZZZZZZZZZZZZZ] - ''' - help = usage + '''\ - - optional arguments: - -h, --help show this help message and exit - -x XXXXXXXXXXXXXXXXXXXXXXXXX - -y YYYYYYYYYYYYYYYYYYYYYYYYY - -z ZZZZZZZZZZZZZZZZZZZZZZZZZ - ''' - version = '' - - -class TestHelpUsagePositionalsOnlyWrap(HelpTestCase): - """Test usage messages where there are only positionals and they wrap""" - - parser_signature = Sig(prog='PROG', add_help=False) - argument_signatures = [ - Sig('a' * 25), - Sig('b' * 25), - Sig('c' * 25), - ] - argument_group_signatures = [] - usage = '''\ - usage: PROG aaaaaaaaaaaaaaaaaaaaaaaaa bbbbbbbbbbbbbbbbbbbbbbbbb - ccccccccccccccccccccccccc - ''' - help = usage + '''\ - - positional arguments: - aaaaaaaaaaaaaaaaaaaaaaaaa - bbbbbbbbbbbbbbbbbbbbbbbbb - ccccccccccccccccccccccccc - ''' - version = '' - - -class TestHelpVariableExpansion(HelpTestCase): - """Test that variables are expanded properly in help messages""" - - parser_signature = Sig(prog='PROG') - argument_signatures = [ - Sig('-x', type=int, - help='x %(prog)s %(default)s %(type)s %%'), - Sig('-y', action='store_const', default=42, const='XXX', - help='y %(prog)s %(default)s %(const)s'), - Sig('--foo', choices='abc', - help='foo %(prog)s %(default)s %(choices)s'), - Sig('--bar', default='baz', choices=[1, 2], metavar='BBB', - help='bar %(prog)s %(default)s %(dest)s'), - Sig('spam', help='spam %(prog)s %(default)s'), - Sig('badger', default=0.5, help='badger %(prog)s %(default)s'), - ] - argument_group_signatures = [ - (Sig('group'), [ - Sig('-a', help='a %(prog)s %(default)s'), - Sig('-b', default=-1, help='b %(prog)s %(default)s'), - ]) - ] - usage = ('''\ - usage: PROG [-h] [-x X] [-y] [--foo {a,b,c}] [--bar BBB] [-a A] [-b B] - spam badger - ''') - help = usage + '''\ - - positional arguments: - spam spam PROG None - badger badger PROG 0.5 - - optional arguments: - -h, --help show this help message and exit - -x X x PROG None int % - -y y PROG 42 XXX - --foo {a,b,c} foo PROG None a, b, c - --bar BBB bar PROG baz bar - - group: - -a A a PROG None - -b B b PROG -1 - ''' - version = '' - - -class TestHelpVariableExpansionUsageSupplied(HelpTestCase): - """Test that variables are expanded properly when usage= is present""" - - parser_signature = Sig(prog='PROG', usage='%(prog)s FOO') - argument_signatures = [] - argument_group_signatures = [] - usage = ('''\ - usage: PROG FOO - ''') - help = usage + '''\ - - optional arguments: - -h, --help show this help message and exit - ''' - version = '' - - -class TestHelpVariableExpansionNoArguments(HelpTestCase): - """Test that variables are expanded properly with no arguments""" - - parser_signature = Sig(prog='PROG', add_help=False) - argument_signatures = [] - argument_group_signatures = [] - usage = ('''\ - usage: PROG - ''') - help = usage - version = '' - - -class TestHelpSuppressUsage(HelpTestCase): - """Test that items can be suppressed in usage messages""" - - parser_signature = Sig(prog='PROG', usage=argparse.SUPPRESS) - argument_signatures = [ - Sig('--foo', help='foo help'), - Sig('spam', help='spam help'), - ] - argument_group_signatures = [] - help = '''\ - positional arguments: - spam spam help - - optional arguments: - -h, --help show this help message and exit - --foo FOO foo help - ''' - usage = '' - version = '' - - -class TestHelpSuppressOptional(HelpTestCase): - """Test that optional arguments can be suppressed in help messages""" - - parser_signature = Sig(prog='PROG', add_help=False) - argument_signatures = [ - Sig('--foo', help=argparse.SUPPRESS), - Sig('spam', help='spam help'), - ] - argument_group_signatures = [] - usage = '''\ - usage: PROG spam - ''' - help = usage + '''\ - - positional arguments: - spam spam help - ''' - version = '' - - -class TestHelpSuppressOptionalGroup(HelpTestCase): - """Test that optional groups can be suppressed in help messages""" - - parser_signature = Sig(prog='PROG') - argument_signatures = [ - Sig('--foo', help='foo help'), - Sig('spam', help='spam help'), - ] - argument_group_signatures = [ - (Sig('group'), [Sig('--bar', help=argparse.SUPPRESS)]), - ] - usage = '''\ - usage: PROG [-h] [--foo FOO] spam - ''' - help = usage + '''\ - - positional arguments: - spam spam help - - optional arguments: - -h, --help show this help message and exit - --foo FOO foo help - ''' - version = '' - - -class TestHelpSuppressPositional(HelpTestCase): - """Test that positional arguments can be suppressed in help messages""" - - parser_signature = Sig(prog='PROG') - argument_signatures = [ - Sig('--foo', help='foo help'), - Sig('spam', help=argparse.SUPPRESS), - ] - argument_group_signatures = [] - usage = '''\ - usage: PROG [-h] [--foo FOO] - ''' - help = usage + '''\ - - optional arguments: - -h, --help show this help message and exit - --foo FOO foo help - ''' - version = '' - - -class TestHelpRequiredOptional(HelpTestCase): - """Test that required options don't look optional""" - - parser_signature = Sig(prog='PROG') - argument_signatures = [ - Sig('--foo', required=True, help='foo help'), - ] - argument_group_signatures = [] - usage = '''\ - usage: PROG [-h] --foo FOO - ''' - help = usage + '''\ - - optional arguments: - -h, --help show this help message and exit - --foo FOO foo help - ''' - version = '' - - -class TestHelpAlternatePrefixChars(HelpTestCase): - """Test that options display with different prefix characters""" - - parser_signature = Sig(prog='PROG', prefix_chars='^;', add_help=False) - argument_signatures = [ - Sig('^^foo', action='store_true', help='foo help'), - Sig(';b', ';;bar', help='bar help'), - ] - argument_group_signatures = [] - usage = '''\ - usage: PROG [^^foo] [;b BAR] - ''' - help = usage + '''\ - - optional arguments: - ^^foo foo help - ;b BAR, ;;bar BAR bar help - ''' - version = '' - - -class TestHelpNoHelpOptional(HelpTestCase): - """Test that the --help argument can be suppressed help messages""" - - parser_signature = Sig(prog='PROG', add_help=False) - argument_signatures = [ - Sig('--foo', help='foo help'), - Sig('spam', help='spam help'), - ] - argument_group_signatures = [] - usage = '''\ - usage: PROG [--foo FOO] spam - ''' - help = usage + '''\ - - positional arguments: - spam spam help - - optional arguments: - --foo FOO foo help - ''' - version = '' - - -class TestHelpVersionOptional(HelpTestCase): - """Test that the --version argument can be suppressed help messages""" - - parser_signature = Sig(prog='PROG', version='1.0') - argument_signatures = [ - Sig('--foo', help='foo help'), - Sig('spam', help='spam help'), - ] - argument_group_signatures = [] - usage = '''\ - usage: PROG [-h] [-v] [--foo FOO] spam - ''' - help = usage + '''\ - - positional arguments: - spam spam help - - optional arguments: - -h, --help show this help message and exit - -v, --version show program's version number and exit - --foo FOO foo help - ''' - version = '''\ - 1.0 - ''' - - -class TestHelpNone(HelpTestCase): - """Test that no errors occur if no help is specified""" - - parser_signature = Sig(prog='PROG') - argument_signatures = [ - Sig('--foo'), - Sig('spam'), - ] - argument_group_signatures = [] - usage = '''\ - usage: PROG [-h] [--foo FOO] spam - ''' - help = usage + '''\ - - positional arguments: - spam - - optional arguments: - -h, --help show this help message and exit - --foo FOO - ''' - version = '' - - -class TestHelpTupleMetavar(HelpTestCase): - """Test specifying metavar as a tuple""" - - parser_signature = Sig(prog='PROG') - argument_signatures = [ - Sig('-w', help='w', nargs='+', metavar=('W1', 'W2')), - Sig('-x', help='x', nargs='*', metavar=('X1', 'X2')), - Sig('-y', help='y', nargs=3, metavar=('Y1', 'Y2', 'Y3')), - Sig('-z', help='z', nargs='?', metavar=('Z1', )), - ] - argument_group_signatures = [] - usage = '''\ - usage: PROG [-h] [-w W1 [W2 ...]] [-x [X1 [X2 ...]]] [-y Y1 Y2 Y3] \ -[-z [Z1]] - ''' - help = usage + '''\ - - optional arguments: - -h, --help show this help message and exit - -w W1 [W2 ...] w - -x [X1 [X2 ...]] x - -y Y1 Y2 Y3 y - -z [Z1] z - ''' - version = '' - - -class TestHelpRawText(HelpTestCase): - """Test the RawTextHelpFormatter""" - - parser_signature = Sig( - prog='PROG', formatter_class=argparse.RawTextHelpFormatter, - description='Keep the formatting\n' - ' exactly as it is written\n' - '\n' - 'here\n') - - argument_signatures = [ - Sig('--foo', help=' foo help should also\n' - 'appear as given here'), - Sig('spam', help='spam help'), - ] - argument_group_signatures = [ - (Sig('title', description=' This text\n' - ' should be indented\n' - ' exactly like it is here\n'), - [Sig('--bar', help='bar help')]), - ] - usage = '''\ - usage: PROG [-h] [--foo FOO] [--bar BAR] spam - ''' - help = usage + '''\ - - Keep the formatting - exactly as it is written - - here - - positional arguments: - spam spam help - - optional arguments: - -h, --help show this help message and exit - --foo FOO foo help should also - appear as given here - - title: - This text - should be indented - exactly like it is here - - --bar BAR bar help - ''' - version = '' - - -class TestHelpRawDescription(HelpTestCase): - """Test the RawTextHelpFormatter""" - - parser_signature = Sig( - prog='PROG', formatter_class=argparse.RawDescriptionHelpFormatter, - description='Keep the formatting\n' - ' exactly as it is written\n' - '\n' - 'here\n') - - argument_signatures = [ - Sig('--foo', help=' foo help should not\n' - ' retain this odd formatting'), - Sig('spam', help='spam help'), - ] - argument_group_signatures = [ - (Sig('title', description=' This text\n' - ' should be indented\n' - ' exactly like it is here\n'), - [Sig('--bar', help='bar help')]), - ] - usage = '''\ - usage: PROG [-h] [--foo FOO] [--bar BAR] spam - ''' - help = usage + '''\ - - Keep the formatting - exactly as it is written - - here - - positional arguments: - spam spam help - - optional arguments: - -h, --help show this help message and exit - --foo FOO foo help should not retain this odd formatting - - title: - This text - should be indented - exactly like it is here - - --bar BAR bar help - ''' - version = '' - - -class TestHelpArgumentDefaults(HelpTestCase): - """Test the ArgumentDefaultsHelpFormatter""" - - parser_signature = Sig( - prog='PROG', formatter_class=argparse.ArgumentDefaultsHelpFormatter, - description='description') - - argument_signatures = [ - Sig('--foo', help='foo help - oh and by the way, %(default)s'), - Sig('--bar', action='store_true', help='bar help'), - Sig('spam', help='spam help'), - Sig('badger', nargs='?', default='wooden', help='badger help'), - ] - argument_group_signatures = [ - (Sig('title', description='description'), - [Sig('--baz', type=int, default=42, help='baz help')]), - ] - usage = '''\ - usage: PROG [-h] [--foo FOO] [--bar] [--baz BAZ] spam [badger] - ''' - help = usage + '''\ - - description - - positional arguments: - spam spam help - badger badger help (default: wooden) - - optional arguments: - -h, --help show this help message and exit - --foo FOO foo help - oh and by the way, None - --bar bar help (default: False) - - title: - description - - --baz BAZ baz help (default: 42) - ''' - version = '' - -# ===================================== -# Optional/Positional constructor tests -# ===================================== - -class TestInvalidArgumentConstructors(TestCase): - """Test a bunch of invalid Argument constructors""" - - def assertTypeError(self, *args, **kwargs): - parser = argparse.ArgumentParser() - self.assertRaises(TypeError, parser.add_argument, - *args, **kwargs) - - def assertValueError(self, *args, **kwargs): - parser = argparse.ArgumentParser() - self.assertRaises(ValueError, parser.add_argument, - *args, **kwargs) - - def test_invalid_keyword_arguments(self): - self.assertTypeError('-x', bar=None) - self.assertTypeError('-y', callback='foo') - self.assertTypeError('-y', callback_args=()) - self.assertTypeError('-y', callback_kwargs={}) - - def test_missing_destination(self): - self.assertTypeError() - for action in ['append', 'store']: - self.assertTypeError(action=action) - - def test_invalid_option_strings(self): - self.assertValueError('--') - self.assertValueError('---') - - def test_invalid_type(self): - self.assertValueError('--foo', type='int') - - def test_invalid_action(self): - self.assertValueError('-x', action='foo') - self.assertValueError('foo', action='baz') - parser = argparse.ArgumentParser() - try: - parser.add_argument("--foo", action="store-true") - except ValueError: - e = sys.exc_info()[1] - expected = 'unknown action' - msg = 'expected %r, found %r' % (expected, e) - self.failUnless(expected in str(e), msg) - - def test_multiple_dest(self): - parser = argparse.ArgumentParser() - parser.add_argument(dest='foo') - try: - parser.add_argument('bar', dest='baz') - except ValueError: - e = sys.exc_info()[1] - expected = 'dest supplied twice for positional argument' - msg = 'expected %r, found %r' % (expected, e) - self.failUnless(expected in str(e), msg) - - def test_no_argument_actions(self): - for action in ['store_const', 'store_true', 'store_false', - 'append_const', 'count']: - for attrs in [dict(type=int), dict(nargs='+'), - dict(choices='ab')]: - self.assertTypeError('-x', action=action, **attrs) - - def test_no_argument_no_const_actions(self): - # options with zero arguments - for action in ['store_true', 'store_false', 'count']: - - # const is always disallowed - self.assertTypeError('-x', const='foo', action=action) - - # nargs is always disallowed - self.assertTypeError('-x', nargs='*', action=action) - - def test_more_than_one_argument_actions(self): - for action in ['store', 'append']: - - # nargs=0 is disallowed - self.assertValueError('-x', nargs=0, action=action) - self.assertValueError('spam', nargs=0, action=action) - - # const is disallowed with non-optional arguments - for nargs in [1, '*', '+']: - self.assertValueError('-x', const='foo', - nargs=nargs, action=action) - self.assertValueError('spam', const='foo', - nargs=nargs, action=action) - - def test_required_const_actions(self): - for action in ['store_const', 'append_const']: - - # nargs is always disallowed - self.assertTypeError('-x', nargs='+', action=action) - - def test_parsers_action_missing_params(self): - self.assertTypeError('command', action='parsers') - self.assertTypeError('command', action='parsers', prog='PROG') - self.assertTypeError('command', action='parsers', - parser_class=argparse.ArgumentParser) - - def test_required_positional(self): - self.assertTypeError('foo', required=True) - - def test_user_defined_action(self): - - class Success(Exception): - pass - - class Action(object): - - def __init__(self, - option_strings, - dest, - const, - default, - required=False): - if dest == 'spam': - if const is Success: - if default is Success: - raise Success() - - def __call__(self, *args, **kwargs): - pass - - parser = argparse.ArgumentParser() - self.assertRaises(Success, parser.add_argument, '--spam', - action=Action, default=Success, const=Success) - self.assertRaises(Success, parser.add_argument, 'spam', - action=Action, default=Success, const=Success) - -# ================================ -# Actions returned by add_argument -# ================================ - -class TestActionsReturned(TestCase): - - def test_dest(self): - parser = argparse.ArgumentParser() - action = parser.add_argument('--foo') - self.assertEqual(action.dest, 'foo') - action = parser.add_argument('-b', '--bar') - self.assertEqual(action.dest, 'bar') - action = parser.add_argument('-x', '-y') - self.assertEqual(action.dest, 'x') - - def test_misc(self): - parser = argparse.ArgumentParser() - action = parser.add_argument('--foo', nargs='?', const=42, - default=84, type=int, choices=[1, 2], - help='FOO', metavar='BAR', dest='baz') - self.assertEqual(action.nargs, '?') - self.assertEqual(action.const, 42) - self.assertEqual(action.default, 84) - self.assertEqual(action.type, int) - self.assertEqual(action.choices, [1, 2]) - self.assertEqual(action.help, 'FOO') - self.assertEqual(action.metavar, 'BAR') - self.assertEqual(action.dest, 'baz') - - -# ================================ -# Argument conflict handling tests -# ================================ - -class TestConflictHandling(TestCase): - - def test_bad_type(self): - self.assertRaises(ValueError, argparse.ArgumentParser, - conflict_handler='foo') - - def test_conflict_error(self): - parser = argparse.ArgumentParser() - parser.add_argument('-x') - self.assertRaises(argparse.ArgumentError, - parser.add_argument, '-x') - parser.add_argument('--spam') - self.assertRaises(argparse.ArgumentError, - parser.add_argument, '--spam') - - def test_resolve_error(self): - get_parser = argparse.ArgumentParser - parser = get_parser(prog='PROG', conflict_handler='resolve') - - parser.add_argument('-x', help='OLD X') - parser.add_argument('-x', help='NEW X') - self.assertEqual(parser.format_help(), textwrap.dedent('''\ - usage: PROG [-h] [-x X] - - optional arguments: - -h, --help show this help message and exit - -x X NEW X - ''')) - - parser.add_argument('--spam', metavar='OLD_SPAM') - parser.add_argument('--spam', metavar='NEW_SPAM') - self.assertEqual(parser.format_help(), textwrap.dedent('''\ - usage: PROG [-h] [-x X] [--spam NEW_SPAM] - - optional arguments: - -h, --help show this help message and exit - -x X NEW X - --spam NEW_SPAM - ''')) - - -# ============================= -# Help and Version option tests -# ============================= - -class TestOptionalsHelpVersionActions(TestCase): - """Test the help and version actions""" - - def _get_error(self, func, *args, **kwargs): - try: - func(*args, **kwargs) - except ArgumentParserError: - return sys.exc_info()[1] - else: - self.assertRaises(ArgumentParserError, func, *args, **kwargs) - - def assertPrintHelpExit(self, parser, args_str): - self.assertEqual( - parser.format_help(), - self._get_error(parser.parse_args, args_str.split()).stdout) - - def assertPrintVersionExit(self, parser, args_str): - self.assertEqual( - parser.format_version(), - self._get_error(parser.parse_args, args_str.split()).stderr) - - def assertArgumentParserError(self, parser, *args): - self.assertRaises(ArgumentParserError, parser.parse_args, args) - - def test_version(self): - parser = ErrorRaisingArgumentParser(version='1.0') - self.assertPrintHelpExit(parser, '-h') - self.assertPrintHelpExit(parser, '--help') - self.assertPrintVersionExit(parser, '-v') - self.assertPrintVersionExit(parser, '--version') - - def test_version_format(self): - parser = ErrorRaisingArgumentParser(prog='PPP', version='%(prog)s 3.5') - msg = self._get_error(parser.parse_args, ['-v']).stderr - self.assertEqual('PPP 3.5\n', msg) - - def test_version_no_help(self): - parser = ErrorRaisingArgumentParser(add_help=False, version='1.0') - self.assertArgumentParserError(parser, '-h') - self.assertArgumentParserError(parser, '--help') - self.assertPrintVersionExit(parser, '-v') - self.assertPrintVersionExit(parser, '--version') - - def test_version_action(self): - parser = ErrorRaisingArgumentParser(prog='XXX') - parser.add_argument('-V', action='version', version='%(prog)s 3.7') - msg = self._get_error(parser.parse_args, ['-V']).stderr - self.assertEqual('XXX 3.7\n', msg) - - def test_no_help(self): - parser = ErrorRaisingArgumentParser(add_help=False) - self.assertArgumentParserError(parser, '-h') - self.assertArgumentParserError(parser, '--help') - self.assertArgumentParserError(parser, '-v') - self.assertArgumentParserError(parser, '--version') - - def test_alternate_help_version(self): - parser = ErrorRaisingArgumentParser() - parser.add_argument('-x', action='help') - parser.add_argument('-y', action='version') - self.assertPrintHelpExit(parser, '-x') - self.assertPrintVersionExit(parser, '-y') - self.assertArgumentParserError(parser, '-v') - self.assertArgumentParserError(parser, '--version') - - def test_help_version_extra_arguments(self): - parser = ErrorRaisingArgumentParser(version='1.0') - parser.add_argument('-x', action='store_true') - parser.add_argument('y') - - # try all combinations of valid prefixes and suffixes - valid_prefixes = ['', '-x', 'foo', '-x bar', 'baz -x'] - valid_suffixes = valid_prefixes + ['--bad-option', 'foo bar baz'] - for prefix in valid_prefixes: - for suffix in valid_suffixes: - format = '%s %%s %s' % (prefix, suffix) - self.assertPrintHelpExit(parser, format % '-h') - self.assertPrintHelpExit(parser, format % '--help') - self.assertPrintVersionExit(parser, format % '-v') - self.assertPrintVersionExit(parser, format % '--version') - - -# ====================== -# str() and repr() tests -# ====================== - -class TestStrings(TestCase): - """Test str() and repr() on Optionals and Positionals""" - - def assertStringEqual(self, obj, result_string): - for func in [str, repr]: - self.assertEqual(func(obj), result_string) - - def test_optional(self): - option = argparse.Action( - option_strings=['--foo', '-a', '-b'], - dest='b', - type='int', - nargs='+', - default=42, - choices=[1, 2, 3], - help='HELP', - metavar='METAVAR') - string = ( - "Action(option_strings=['--foo', '-a', '-b'], dest='b', " - "nargs='+', const=None, default=42, type='int', " - "choices=[1, 2, 3], help='HELP', metavar='METAVAR')") - self.assertStringEqual(option, string) - - def test_argument(self): - argument = argparse.Action( - option_strings=[], - dest='x', - type=float, - nargs='?', - default=2.5, - choices=[0.5, 1.5, 2.5], - help='H HH H', - metavar='MV MV MV') - string = ( - "Action(option_strings=[], dest='x', nargs='?', " - "const=None, default=2.5, type=%r, choices=[0.5, 1.5, 2.5], " - "help='H HH H', metavar='MV MV MV')" % float) - self.assertStringEqual(argument, string) - - def test_namespace(self): - ns = argparse.Namespace(foo=42, bar='spam') - string = "Namespace(bar='spam', foo=42)" - self.assertStringEqual(ns, string) - - def test_parser(self): - parser = argparse.ArgumentParser(prog='PROG') - string = ( - "ArgumentParser(prog='PROG', usage=None, description=None, " - "version=None, formatter_class=%r, conflict_handler='error', " - "add_help=True)" % argparse.HelpFormatter) - self.assertStringEqual(parser, string) - -# =============== -# Namespace tests -# =============== - -class TestNamespace(TestCase): - - def test_constructor(self): - ns = argparse.Namespace() - self.assertRaises(AttributeError, getattr, ns, 'x') - - ns = argparse.Namespace(a=42, b='spam') - self.assertEqual(ns.a, 42) - self.assertEqual(ns.b, 'spam') - - def test_equality(self): - ns1 = argparse.Namespace(a=1, b=2) - ns2 = argparse.Namespace(b=2, a=1) - ns3 = argparse.Namespace(a=1) - ns4 = argparse.Namespace(b=2) - - self.assertEqual(ns1, ns2) - self.assertNotEqual(ns1, ns3) - self.assertNotEqual(ns1, ns4) - self.assertNotEqual(ns2, ns3) - self.assertNotEqual(ns2, ns4) - self.failUnless(ns1 != ns3) - self.failUnless(ns1 != ns4) - self.failUnless(ns2 != ns3) - self.failUnless(ns2 != ns4) - - -# =================== -# File encoding tests -# =================== - -class TestEncoding(TestCase): - - def _test_module_encoding(self, path): - path, _ = os.path.splitext(path) - path += ".py" - codecs.open(path, 'r', 'utf8').read() - - def test_argparse_module_encoding(self): - self._test_module_encoding(argparse.__file__) - - def test_test_argparse_module_encoding(self): - self._test_module_encoding(__file__) - -# =================== -# ArgumentError tests -# =================== - -class TestArgumentError(TestCase): - - def test_argument_error(self): - msg = "my error here" - error = argparse.ArgumentError(None, msg) - self.failUnlessEqual(str(error), msg) - -# ======================= -# ArgumentTypeError tests -# ======================= - -class TestArgumentError(TestCase): - - def test_argument_type_error(self): - - def spam(string): - raise argparse.ArgumentTypeError('spam!') - - parser = ErrorRaisingArgumentParser(prog='PROG', add_help=False) - parser.add_argument('x', type=spam) - try: - parser.parse_args(['XXX']) - except ArgumentParserError: - expected = 'usage: PROG x\nPROG: error: argument x: spam!\n' - msg = sys.exc_info()[1].stderr - self.failUnlessEqual(expected, msg) - else: - self.fail() - -# ====================== -# parse_known_args tests -# ====================== - -class TestParseKnownArgs(TestCase): - - def test_optionals(self): - parser = argparse.ArgumentParser() - parser.add_argument('--foo') - args, extras = parser.parse_known_args('--foo F --bar --baz'.split()) - self.failUnlessEqual(NS(foo='F'), args) - self.failUnlessEqual(['--bar', '--baz'], extras) - - def test_mixed(self): - parser = argparse.ArgumentParser() - parser.add_argument('-v', nargs='?', const=1, type=int) - parser.add_argument('--spam', action='store_false') - parser.add_argument('badger') - - argv = ["B", "C", "--foo", "-v", "3", "4"] - args, extras = parser.parse_known_args(argv) - self.failUnlessEqual(NS(v=3, spam=True, badger="B"), args) - self.failUnlessEqual(["C", "--foo", "4"], extras) - -# ============================ -# from argparse import * tests -# ============================ - -class TestImportStar(TestCase): - - def test(self): - for name in argparse.__all__: - self.failUnless(hasattr(argparse, name)) - - -if __name__ == '__main__': - unittest.main() +# -*- coding: utf-8 -*- + +# Copyright ? 2006-2009 Steven J. Bethard . +# +# Licensed under the Apache License, Version 2.0 (the "License"); you may not +# use this file except in compliance with the License. You may obtain a copy +# of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT +# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the +# License for the specific language governing permissions and limitations +# under the License. + +import codecs +import os +import shutil +import sys +import textwrap +import tempfile +import unittest +import argparse + +try: + from StringIO import StringIO +except ImportError: + from io import StringIO + +try: + set +except NameError: + from sets import Set as set + +try: + sorted +except NameError: + + def sorted(iterable, reverse=False): + result = list(iterable) + result.sort() + if reverse: + result.reverse() + return result + +# silence Python 2.6 buggy warnings about Exception.message +if sys.version_info[:2] == (2, 6): + import warnings + warnings.filterwarnings( + action='ignore', + message='BaseException.message has been deprecated as of Python 2.6', + category=DeprecationWarning) + +# silence warnings about version argument - these are expected +import warnings +warnings.filterwarnings( + action='ignore', + message='The "version" argument to ArgumentParser is deprecated.', + category=DeprecationWarning) +warnings.filterwarnings( + action='ignore', + message='The format_version method is deprecated', + category=DeprecationWarning) +warnings.filterwarnings( + action='ignore', + message='The print_version method is deprecated', + category=DeprecationWarning) + + +class TestCase(unittest.TestCase): + + def assertEqual(self, obj1, obj2): + if obj1 != obj2: + print('') + print(repr(obj1)) + print(repr(obj2)) + print(obj1) + print(obj2) + super(TestCase, self).assertEqual(obj1, obj2) + + +class TempDirMixin(object): + + def setUp(self): + self.temp_dir = tempfile.mkdtemp() + self.old_dir = os.getcwd() + os.chdir(self.temp_dir) + + def tearDown(self): + os.chdir(self.old_dir) + while True: + try: + shutil.rmtree(self.temp_dir) + except WindowsError: + continue + else: + break + + +class Sig(object): + + def __init__(self, *args, **kwargs): + self.args = args + self.kwargs = kwargs + + +class NS(object): + + def __init__(self, **kwargs): + self.__dict__.update(kwargs) + + def __repr__(self): + sorted_items = sorted(self.__dict__.items()) + kwarg_str = ', '.join(['%s=%r' % tup for tup in sorted_items]) + return '%s(%s)' % (type(self).__name__, kwarg_str) + + def __eq__(self, other): + return vars(self) == vars(other) + + def __ne__(self, other): + return not (self == other) + + +class ArgumentParserError(Exception): + + def __init__(self, message, stdout=None, stderr=None, error_code=None): + Exception.__init__(self, message, stdout, stderr) + self.message = message + self.stdout = stdout + self.stderr = stderr + self.error_code = error_code + + +def stderr_to_parser_error(parse_args, *args, **kwargs): + # if this is being called recursively and stderr or stdout is already being + # redirected, simply call the function and let the enclosing function + # catch the exception + if isinstance(sys.stderr, StringIO) or isinstance(sys.stdout, StringIO): + return parse_args(*args, **kwargs) + + # if this is not being called recursively, redirect stderr and + # use it as the ArgumentParserError message + old_stdout = sys.stdout + old_stderr = sys.stderr + sys.stdout = StringIO() + sys.stderr = StringIO() + try: + try: + result = parse_args(*args, **kwargs) + for key in list(vars(result)): + if getattr(result, key) is sys.stdout: + setattr(result, key, old_stdout) + if getattr(result, key) is sys.stderr: + setattr(result, key, old_stderr) + return result + except SystemExit: + code = sys.exc_info()[1].code + stdout = sys.stdout.getvalue() + stderr = sys.stderr.getvalue() + raise ArgumentParserError("SystemExit", stdout, stderr, code) + finally: + sys.stdout = old_stdout + sys.stderr = old_stderr + + +class ErrorRaisingArgumentParser(argparse.ArgumentParser): + + def parse_args(self, *args, **kwargs): + parse_args = super(ErrorRaisingArgumentParser, self).parse_args + return stderr_to_parser_error(parse_args, *args, **kwargs) + + def exit(self, *args, **kwargs): + exit = super(ErrorRaisingArgumentParser, self).exit + return stderr_to_parser_error(exit, *args, **kwargs) + + def error(self, *args, **kwargs): + error = super(ErrorRaisingArgumentParser, self).error + return stderr_to_parser_error(error, *args, **kwargs) + + +class ParserTesterMetaclass(type): + """Adds parser tests using the class attributes. + + Classes of this type should specify the following attributes: + + argument_signatures -- a list of Sig objects which specify + the signatures of Argument objects to be created + failures -- a list of args lists that should cause the parser + to fail + successes -- a list of (initial_args, options, remaining_args) tuples + where initial_args specifies the string args to be parsed, + options is a dict that should match the vars() of the options + parsed out of initial_args, and remaining_args should be any + remaining unparsed arguments + """ + + def __init__(cls, name, bases, bodydict): + if name == 'ParserTestCase': + return + + # default parser signature is empty + if not hasattr(cls, 'parser_signature'): + cls.parser_signature = Sig() + if not hasattr(cls, 'parser_class'): + cls.parser_class = ErrorRaisingArgumentParser + + # --------------------------------------- + # functions for adding optional arguments + # --------------------------------------- + def no_groups(parser, argument_signatures): + """Add all arguments directly to the parser""" + for sig in argument_signatures: + parser.add_argument(*sig.args, **sig.kwargs) + + def one_group(parser, argument_signatures): + """Add all arguments under a single group in the parser""" + group = parser.add_argument_group('foo') + for sig in argument_signatures: + group.add_argument(*sig.args, **sig.kwargs) + + def many_groups(parser, argument_signatures): + """Add each argument in its own group to the parser""" + for i, sig in enumerate(argument_signatures): + group = parser.add_argument_group('foo:%i' % i) + group.add_argument(*sig.args, **sig.kwargs) + + # -------------------------- + # functions for parsing args + # -------------------------- + def listargs(parser, args): + """Parse the args by passing in a list""" + return parser.parse_args(args) + + def sysargs(parser, args): + """Parse the args by defaulting to sys.argv""" + old_sys_argv = sys.argv + sys.argv = [old_sys_argv[0]] + args + try: + return parser.parse_args() + finally: + sys.argv = old_sys_argv + + # class that holds the combination of one optional argument + # addition method and one arg parsing method + class AddTests(object): + + def __init__(self, tester_cls, add_arguments, parse_args): + self._add_arguments = add_arguments + self._parse_args = parse_args + + add_arguments_name = self._add_arguments.__name__ + parse_args_name = self._parse_args.__name__ + for test_func in [self.test_failures, self.test_successes]: + func_name = test_func.__name__ + names = func_name, add_arguments_name, parse_args_name + test_name = '_'.join(names) + + def wrapper(self, test_func=test_func): + test_func(self) + try: + wrapper.__name__ = test_name + except TypeError: + pass + setattr(tester_cls, test_name, wrapper) + + def _get_parser(self, tester): + args = tester.parser_signature.args + kwargs = tester.parser_signature.kwargs + parser = tester.parser_class(*args, **kwargs) + self._add_arguments(parser, tester.argument_signatures) + return parser + + def test_failures(self, tester): + parser = self._get_parser(tester) + for args_str in tester.failures: + args = args_str.split() + raises = tester.assertRaises + raises(ArgumentParserError, parser.parse_args, args) + + def test_successes(self, tester): + parser = self._get_parser(tester) + for args, expected_ns in tester.successes: + if isinstance(args, str): + args = args.split() + result_ns = self._parse_args(parser, args) + tester.assertEqual(expected_ns, result_ns) + + # add tests for each combination of an optionals adding method + # and an arg parsing method + for add_arguments in [no_groups, one_group, many_groups]: + for parse_args in [listargs, sysargs]: + AddTests(cls, add_arguments, parse_args) + +bases = TestCase, +ParserTestCase = ParserTesterMetaclass('ParserTestCase', bases, {}) + +# =============== +# Optionals tests +# =============== + +class TestOptionalsSingleDash(ParserTestCase): + """Test an Optional with a single-dash option string""" + + argument_signatures = [Sig('-x')] + failures = ['-x', 'a', '--foo', '-x --foo', '-x -y'] + successes = [ + ('', NS(x=None)), + ('-x a', NS(x='a')), + ('-xa', NS(x='a')), + ('-x -1', NS(x='-1')), + ('-x-1', NS(x='-1')), + ] + + +class TestOptionalsSingleDashCombined(ParserTestCase): + """Test an Optional with a single-dash option string""" + + argument_signatures = [ + Sig('-x', action='store_true'), + Sig('-yyy', action='store_const', const=42), + Sig('-z'), + ] + failures = ['a', '--foo', '-xa', '-x --foo', '-x -z', '-z -x', + '-yx', '-yz a', '-yyyx', '-yyyza', '-xyza'] + successes = [ + ('', NS(x=False, yyy=None, z=None)), + ('-x', NS(x=True, yyy=None, z=None)), + ('-za', NS(x=False, yyy=None, z='a')), + ('-z a', NS(x=False, yyy=None, z='a')), + ('-xza', NS(x=True, yyy=None, z='a')), + ('-xz a', NS(x=True, yyy=None, z='a')), + ('-x -za', NS(x=True, yyy=None, z='a')), + ('-x -z a', NS(x=True, yyy=None, z='a')), + ('-y', NS(x=False, yyy=42, z=None)), + ('-yyy', NS(x=False, yyy=42, z=None)), + ('-x -yyy -za', NS(x=True, yyy=42, z='a')), + ('-x -yyy -z a', NS(x=True, yyy=42, z='a')), + ] + + +class TestOptionalsSingleDashLong(ParserTestCase): + """Test an Optional with a multi-character single-dash option string""" + + argument_signatures = [Sig('-foo')] + failures = ['-foo', 'a', '--foo', '-foo --foo', '-foo -y', '-fooa'] + successes = [ + ('', NS(foo=None)), + ('-foo a', NS(foo='a')), + ('-foo -1', NS(foo='-1')), + ('-fo a', NS(foo='a')), + ('-f a', NS(foo='a')), + ] + + +class TestOptionalsSingleDashSubsetAmbiguous(ParserTestCase): + """Test Optionals where option strings are subsets of each other""" + + argument_signatures = [Sig('-f'), Sig('-foobar'), Sig('-foorab')] + failures = ['-f', '-foo', '-fo', '-foo b', '-foob', '-fooba', '-foora'] + successes = [ + ('', NS(f=None, foobar=None, foorab=None)), + ('-f a', NS(f='a', foobar=None, foorab=None)), + ('-fa', NS(f='a', foobar=None, foorab=None)), + ('-foa', NS(f='oa', foobar=None, foorab=None)), + ('-fooa', NS(f='ooa', foobar=None, foorab=None)), + ('-foobar a', NS(f=None, foobar='a', foorab=None)), + ('-foorab a', NS(f=None, foobar=None, foorab='a')), + ] + + +class TestOptionalsSingleDashAmbiguous(ParserTestCase): + """Test Optionals that partially match but are not subsets""" + + argument_signatures = [Sig('-foobar'), Sig('-foorab')] + failures = ['-f', '-f a', '-fa', '-foa', '-foo', '-fo', '-foo b'] + successes = [ + ('', NS(foobar=None, foorab=None)), + ('-foob a', NS(foobar='a', foorab=None)), + ('-foor a', NS(foobar=None, foorab='a')), + ('-fooba a', NS(foobar='a', foorab=None)), + ('-foora a', NS(foobar=None, foorab='a')), + ('-foobar a', NS(foobar='a', foorab=None)), + ('-foorab a', NS(foobar=None, foorab='a')), + ] + + +class TestOptionalsNumeric(ParserTestCase): + """Test an Optional with a short opt string""" + + argument_signatures = [Sig('-1', dest='one')] + failures = ['-1', 'a', '-1 --foo', '-1 -y', '-1 -1', '-1 -2'] + successes = [ + ('', NS(one=None)), + ('-1 a', NS(one='a')), + ('-1a', NS(one='a')), + ('-1-2', NS(one='-2')), + ] + + +class TestOptionalsDoubleDash(ParserTestCase): + """Test an Optional with a double-dash option string""" + + argument_signatures = [Sig('--foo')] + failures = ['--foo', '-f', '-f a', 'a', '--foo -x', '--foo --bar'] + successes = [ + ('', NS(foo=None)), + ('--foo a', NS(foo='a')), + ('--foo=a', NS(foo='a')), + ('--foo -2.5', NS(foo='-2.5')), + ('--foo=-2.5', NS(foo='-2.5')), + ] + + +class TestOptionalsDoubleDashPartialMatch(ParserTestCase): + """Tests partial matching with a double-dash option string""" + + argument_signatures = [ + Sig('--badger', action='store_true'), + Sig('--bat'), + ] + failures = ['--bar', '--b', '--ba', '--b=2', '--ba=4', '--badge 5'] + successes = [ + ('', NS(badger=False, bat=None)), + ('--bat X', NS(badger=False, bat='X')), + ('--bad', NS(badger=True, bat=None)), + ('--badg', NS(badger=True, bat=None)), + ('--badge', NS(badger=True, bat=None)), + ('--badger', NS(badger=True, bat=None)), + ] + + +class TestOptionalsDoubleDashPrefixMatch(ParserTestCase): + """Tests when one double-dash option string is a prefix of another""" + + argument_signatures = [ + Sig('--badger', action='store_true'), + Sig('--ba'), + ] + failures = ['--bar', '--b', '--ba', '--b=2', '--badge 5'] + successes = [ + ('', NS(badger=False, ba=None)), + ('--ba X', NS(badger=False, ba='X')), + ('--ba=X', NS(badger=False, ba='X')), + ('--bad', NS(badger=True, ba=None)), + ('--badg', NS(badger=True, ba=None)), + ('--badge', NS(badger=True, ba=None)), + ('--badger', NS(badger=True, ba=None)), + ] + + +class TestOptionalsSingleDoubleDash(ParserTestCase): + """Test an Optional with single- and double-dash option strings""" + + argument_signatures = [ + Sig('-f', action='store_true'), + Sig('--bar'), + Sig('-baz', action='store_const', const=42), + ] + failures = ['--bar', '-fbar', '-fbaz', '-bazf', '-b B', 'B'] + successes = [ + ('', NS(f=False, bar=None, baz=None)), + ('-f', NS(f=True, bar=None, baz=None)), + ('--ba B', NS(f=False, bar='B', baz=None)), + ('-f --bar B', NS(f=True, bar='B', baz=None)), + ('-f -b', NS(f=True, bar=None, baz=42)), + ('-ba -f', NS(f=True, bar=None, baz=42)), + ] + + +class TestOptionalsAlternatePrefixChars(ParserTestCase): + """Test an Optional with a double-dash option string""" + + parser_signature = Sig(prefix_chars='+:/', add_help=False) + argument_signatures = [ + Sig('+f', action='store_true'), + Sig('::bar'), + Sig('/baz', action='store_const', const=42), + ] + failures = ['--bar', '-fbar', '-b B', 'B', '-f', '--bar B', '-baz'] + successes = [ + ('', NS(f=False, bar=None, baz=None)), + ('+f', NS(f=True, bar=None, baz=None)), + ('::ba B', NS(f=False, bar='B', baz=None)), + ('+f ::bar B', NS(f=True, bar='B', baz=None)), + ('+f /b', NS(f=True, bar=None, baz=42)), + ('/ba +f', NS(f=True, bar=None, baz=42)), + ] + + +class TestOptionalsShortLong(ParserTestCase): + """Test a combination of single- and double-dash option strings""" + + argument_signatures = [ + Sig('-v', '--verbose', '-n', '--noisy', action='store_true'), + ] + failures = ['--x --verbose', '-N', 'a', '-v x'] + successes = [ + ('', NS(verbose=False)), + ('-v', NS(verbose=True)), + ('--verbose', NS(verbose=True)), + ('-n', NS(verbose=True)), + ('--noisy', NS(verbose=True)), + ] + + +class TestOptionalsDest(ParserTestCase): + """Tests various means of setting destination""" + + argument_signatures = [Sig('--foo-bar'), Sig('--baz', dest='zabbaz')] + failures = ['a'] + successes = [ + ('--foo-bar f', NS(foo_bar='f', zabbaz=None)), + ('--baz g', NS(foo_bar=None, zabbaz='g')), + ('--foo-bar h --baz i', NS(foo_bar='h', zabbaz='i')), + ('--baz j --foo-bar k', NS(foo_bar='k', zabbaz='j')), + ] + + +class TestOptionalsDefault(ParserTestCase): + """Tests specifying a default for an Optional""" + + argument_signatures = [Sig('-x'), Sig('-y', default=42)] + failures = ['a'] + successes = [ + ('', NS(x=None, y=42)), + ('-xx', NS(x='x', y=42)), + ('-yy', NS(x=None, y='y')), + ] + + +class TestOptionalsNargsDefault(ParserTestCase): + """Tests not specifying the number of args for an Optional""" + + argument_signatures = [Sig('-x')] + failures = ['a', '-x'] + successes = [ + ('', NS(x=None)), + ('-x a', NS(x='a')), + ] + + +class TestOptionalsNargs1(ParserTestCase): + """Tests specifying the 1 arg for an Optional""" + + argument_signatures = [Sig('-x', nargs=1)] + failures = ['a', '-x'] + successes = [ + ('', NS(x=None)), + ('-x a', NS(x=['a'])), + ] + + +class TestOptionalsNargs3(ParserTestCase): + """Tests specifying the 3 args for an Optional""" + + argument_signatures = [Sig('-x', nargs=3)] + failures = ['a', '-x', '-x a', '-x a b', 'a -x', 'a -x b'] + successes = [ + ('', NS(x=None)), + ('-x a b c', NS(x=['a', 'b', 'c'])), + ] + + +class TestOptionalsNargsOptional(ParserTestCase): + """Tests specifying an Optional arg for an Optional""" + + argument_signatures = [ + Sig('-w', nargs='?'), + Sig('-x', nargs='?', const=42), + Sig('-y', nargs='?', default='spam'), + Sig('-z', nargs='?', type=int, const='42', default='84'), + ] + failures = ['2'] + successes = [ + ('', NS(w=None, x=None, y='spam', z=84)), + ('-w', NS(w=None, x=None, y='spam', z=84)), + ('-w 2', NS(w='2', x=None, y='spam', z=84)), + ('-x', NS(w=None, x=42, y='spam', z=84)), + ('-x 2', NS(w=None, x='2', y='spam', z=84)), + ('-y', NS(w=None, x=None, y=None, z=84)), + ('-y 2', NS(w=None, x=None, y='2', z=84)), + ('-z', NS(w=None, x=None, y='spam', z=42)), + ('-z 2', NS(w=None, x=None, y='spam', z=2)), + ] + + +class TestOptionalsNargsZeroOrMore(ParserTestCase): + """Tests specifying an args for an Optional that accepts zero or more""" + + argument_signatures = [ + Sig('-x', nargs='*'), + Sig('-y', nargs='*', default='spam'), + ] + failures = ['a'] + successes = [ + ('', NS(x=None, y='spam')), + ('-x', NS(x=[], y='spam')), + ('-x a', NS(x=['a'], y='spam')), + ('-x a b', NS(x=['a', 'b'], y='spam')), + ('-y', NS(x=None, y=[])), + ('-y a', NS(x=None, y=['a'])), + ('-y a b', NS(x=None, y=['a', 'b'])), + ] + + +class TestOptionalsNargsOneOrMore(ParserTestCase): + """Tests specifying an args for an Optional that accepts one or more""" + + argument_signatures = [ + Sig('-x', nargs='+'), + Sig('-y', nargs='+', default='spam'), + ] + failures = ['a', '-x', '-y', 'a -x', 'a -y b'] + successes = [ + ('', NS(x=None, y='spam')), + ('-x a', NS(x=['a'], y='spam')), + ('-x a b', NS(x=['a', 'b'], y='spam')), + ('-y a', NS(x=None, y=['a'])), + ('-y a b', NS(x=None, y=['a', 'b'])), + ] + + +class TestOptionalsChoices(ParserTestCase): + """Tests specifying the choices for an Optional""" + + argument_signatures = [ + Sig('-f', choices='abc'), + Sig('-g', type=int, choices=range(5))] + failures = ['a', '-f d', '-fad', '-ga', '-g 6'] + successes = [ + ('', NS(f=None, g=None)), + ('-f a', NS(f='a', g=None)), + ('-f c', NS(f='c', g=None)), + ('-g 0', NS(f=None, g=0)), + ('-g 03', NS(f=None, g=3)), + ('-fb -g4', NS(f='b', g=4)), + ] + + +class TestOptionalsRequired(ParserTestCase): + """Tests the an optional action that is required""" + + argument_signatures = [ + Sig('-x', type=int, required=True), + ] + failures = ['a', ''] + successes = [ + ('-x 1', NS(x=1)), + ('-x42', NS(x=42)), + ] + + +class TestOptionalsActionStore(ParserTestCase): + """Tests the store action for an Optional""" + + argument_signatures = [Sig('-x', action='store')] + failures = ['a', 'a -x'] + successes = [ + ('', NS(x=None)), + ('-xfoo', NS(x='foo')), + ] + + +class TestOptionalsActionStoreConst(ParserTestCase): + """Tests the store_const action for an Optional""" + + argument_signatures = [Sig('-y', action='store_const', const=object)] + failures = ['a'] + successes = [ + ('', NS(y=None)), + ('-y', NS(y=object)), + ] + + +class TestOptionalsActionStoreFalse(ParserTestCase): + """Tests the store_false action for an Optional""" + + argument_signatures = [Sig('-z', action='store_false')] + failures = ['a', '-za', '-z a'] + successes = [ + ('', NS(z=True)), + ('-z', NS(z=False)), + ] + + +class TestOptionalsActionStoreTrue(ParserTestCase): + """Tests the store_true action for an Optional""" + + argument_signatures = [Sig('--apple', action='store_true')] + failures = ['a', '--apple=b', '--apple b'] + successes = [ + ('', NS(apple=False)), + ('--apple', NS(apple=True)), + ] + + +class TestOptionalsActionAppend(ParserTestCase): + """Tests the append action for an Optional""" + + argument_signatures = [Sig('--baz', action='append')] + failures = ['a', '--baz', 'a --baz', '--baz a b'] + successes = [ + ('', NS(baz=None)), + ('--baz a', NS(baz=['a'])), + ('--baz a --baz b', NS(baz=['a', 'b'])), + ] + + +class TestOptionalsActionAppendWithDefault(ParserTestCase): + """Tests the append action for an Optional""" + + argument_signatures = [Sig('--baz', action='append', default=['X'])] + failures = ['a', '--baz', 'a --baz', '--baz a b'] + successes = [ + ('', NS(baz=['X'])), + ('--baz a', NS(baz=['X', 'a'])), + ('--baz a --baz b', NS(baz=['X', 'a', 'b'])), + ] + + +class TestOptionalsActionAppendConst(ParserTestCase): + """Tests the append_const action for an Optional""" + + argument_signatures = [ + Sig('-b', action='append_const', const=Exception), + Sig('-c', action='append', dest='b'), + ] + failures = ['a', '-c', 'a -c', '-bx', '-b x'] + successes = [ + ('', NS(b=None)), + ('-b', NS(b=[Exception])), + ('-b -cx -b -cyz', NS(b=[Exception, 'x', Exception, 'yz'])), + ] + + +class TestOptionalsActionAppendConstWithDefault(ParserTestCase): + """Tests the append_const action for an Optional""" + + argument_signatures = [ + Sig('-b', action='append_const', const=Exception, default=['X']), + Sig('-c', action='append', dest='b'), + ] + failures = ['a', '-c', 'a -c', '-bx', '-b x'] + successes = [ + ('', NS(b=['X'])), + ('-b', NS(b=['X', Exception])), + ('-b -cx -b -cyz', NS(b=['X', Exception, 'x', Exception, 'yz'])), + ] + + +class TestOptionalsActionCount(ParserTestCase): + """Tests the count action for an Optional""" + + argument_signatures = [Sig('-x', action='count')] + failures = ['a', '-x a', '-x b', '-x a -x b'] + successes = [ + ('', NS(x=None)), + ('-x', NS(x=1)), + ] + + +# ================ +# Positional tests +# ================ + +class TestPositionalsNargsNone(ParserTestCase): + """Test a Positional that doesn't specify nargs""" + + argument_signatures = [Sig('foo')] + failures = ['', '-x', 'a b'] + successes = [ + ('a', NS(foo='a')), + ] + + +class TestPositionalsNargs1(ParserTestCase): + """Test a Positional that specifies an nargs of 1""" + + argument_signatures = [Sig('foo', nargs=1)] + failures = ['', '-x', 'a b'] + successes = [ + ('a', NS(foo=['a'])), + ] + + +class TestPositionalsNargs2(ParserTestCase): + """Test a Positional that specifies an nargs of 2""" + + argument_signatures = [Sig('foo', nargs=2)] + failures = ['', 'a', '-x', 'a b c'] + successes = [ + ('a b', NS(foo=['a', 'b'])), + ] + + +class TestPositionalsNargsZeroOrMore(ParserTestCase): + """Test a Positional that specifies unlimited nargs""" + + argument_signatures = [Sig('foo', nargs='*')] + failures = ['-x'] + successes = [ + ('', NS(foo=[])), + ('a', NS(foo=['a'])), + ('a b', NS(foo=['a', 'b'])), + ] + + +class TestPositionalsNargsZeroOrMoreDefault(ParserTestCase): + """Test a Positional that specifies unlimited nargs and a default""" + + argument_signatures = [Sig('foo', nargs='*', default='bar')] + failures = ['-x'] + successes = [ + ('', NS(foo='bar')), + ('a', NS(foo=['a'])), + ('a b', NS(foo=['a', 'b'])), + ] + + +class TestPositionalsNargsOneOrMore(ParserTestCase): + """Test a Positional that specifies one or more nargs""" + + argument_signatures = [Sig('foo', nargs='+')] + failures = ['', '-x'] + successes = [ + ('a', NS(foo=['a'])), + ('a b', NS(foo=['a', 'b'])), + ] + + +class TestPositionalsNargsOptional(ParserTestCase): + """Tests an Optional Positional""" + + argument_signatures = [Sig('foo', nargs='?')] + failures = ['-x', 'a b'] + successes = [ + ('', NS(foo=None)), + ('a', NS(foo='a')), + ] + + +class TestPositionalsNargsOptionalDefault(ParserTestCase): + """Tests an Optional Positional with a default value""" + + argument_signatures = [Sig('foo', nargs='?', default=42)] + failures = ['-x', 'a b'] + successes = [ + ('', NS(foo=42)), + ('a', NS(foo='a')), + ] + + +class TestPositionalsNargsOptionalConvertedDefault(ParserTestCase): + """Tests an Optional Positional with a default value + that needs to be converted to the appropriate type. + """ + + argument_signatures = [ + Sig('foo', nargs='?', type=int, default='42'), + ] + failures = ['-x', 'a b', '1 2'] + successes = [ + ('', NS(foo=42)), + ('1', NS(foo=1)), + ] + + +class TestPositionalsNargsNoneNone(ParserTestCase): + """Test two Positionals that don't specify nargs""" + + argument_signatures = [Sig('foo'), Sig('bar')] + failures = ['', '-x', 'a', 'a b c'] + successes = [ + ('a b', NS(foo='a', bar='b')), + ] + + +class TestPositionalsNargsNone1(ParserTestCase): + """Test a Positional with no nargs followed by one with 1""" + + argument_signatures = [Sig('foo'), Sig('bar', nargs=1)] + failures = ['', '--foo', 'a', 'a b c'] + successes = [ + ('a b', NS(foo='a', bar=['b'])), + ] + + +class TestPositionalsNargs2None(ParserTestCase): + """Test a Positional with 2 nargs followed by one with none""" + + argument_signatures = [Sig('foo', nargs=2), Sig('bar')] + failures = ['', '--foo', 'a', 'a b', 'a b c d'] + successes = [ + ('a b c', NS(foo=['a', 'b'], bar='c')), + ] + + +class TestPositionalsNargsNoneZeroOrMore(ParserTestCase): + """Test a Positional with no nargs followed by one with unlimited""" + + argument_signatures = [Sig('foo'), Sig('bar', nargs='*')] + failures = ['', '--foo'] + successes = [ + ('a', NS(foo='a', bar=[])), + ('a b', NS(foo='a', bar=['b'])), + ('a b c', NS(foo='a', bar=['b', 'c'])), + ] + + +class TestPositionalsNargsNoneOneOrMore(ParserTestCase): + """Test a Positional with no nargs followed by one with one or more""" + + argument_signatures = [Sig('foo'), Sig('bar', nargs='+')] + failures = ['', '--foo', 'a'] + successes = [ + ('a b', NS(foo='a', bar=['b'])), + ('a b c', NS(foo='a', bar=['b', 'c'])), + ] + + +class TestPositionalsNargsNoneOptional(ParserTestCase): + """Test a Positional with no nargs followed by one with an Optional""" + + argument_signatures = [Sig('foo'), Sig('bar', nargs='?')] + failures = ['', '--foo', 'a b c'] + successes = [ + ('a', NS(foo='a', bar=None)), + ('a b', NS(foo='a', bar='b')), + ] + + +class TestPositionalsNargsZeroOrMoreNone(ParserTestCase): + """Test a Positional with unlimited nargs followed by one with none""" + + argument_signatures = [Sig('foo', nargs='*'), Sig('bar')] + failures = ['', '--foo'] + successes = [ + ('a', NS(foo=[], bar='a')), + ('a b', NS(foo=['a'], bar='b')), + ('a b c', NS(foo=['a', 'b'], bar='c')), + ] + + +class TestPositionalsNargsOneOrMoreNone(ParserTestCase): + """Test a Positional with one or more nargs followed by one with none""" + + argument_signatures = [Sig('foo', nargs='+'), Sig('bar')] + failures = ['', '--foo', 'a'] + successes = [ + ('a b', NS(foo=['a'], bar='b')), + ('a b c', NS(foo=['a', 'b'], bar='c')), + ] + + +class TestPositionalsNargsOptionalNone(ParserTestCase): + """Test a Positional with an Optional nargs followed by one with none""" + + argument_signatures = [Sig('foo', nargs='?', default=42), Sig('bar')] + failures = ['', '--foo', 'a b c'] + successes = [ + ('a', NS(foo=42, bar='a')), + ('a b', NS(foo='a', bar='b')), + ] + + +class TestPositionalsNargs2ZeroOrMore(ParserTestCase): + """Test a Positional with 2 nargs followed by one with unlimited""" + + argument_signatures = [Sig('foo', nargs=2), Sig('bar', nargs='*')] + failures = ['', '--foo', 'a'] + successes = [ + ('a b', NS(foo=['a', 'b'], bar=[])), + ('a b c', NS(foo=['a', 'b'], bar=['c'])), + ] + + +class TestPositionalsNargs2OneOrMore(ParserTestCase): + """Test a Positional with 2 nargs followed by one with one or more""" + + argument_signatures = [Sig('foo', nargs=2), Sig('bar', nargs='+')] + failures = ['', '--foo', 'a', 'a b'] + successes = [ + ('a b c', NS(foo=['a', 'b'], bar=['c'])), + ] + + +class TestPositionalsNargs2Optional(ParserTestCase): + """Test a Positional with 2 nargs followed by one optional""" + + argument_signatures = [Sig('foo', nargs=2), Sig('bar', nargs='?')] + failures = ['', '--foo', 'a', 'a b c d'] + successes = [ + ('a b', NS(foo=['a', 'b'], bar=None)), + ('a b c', NS(foo=['a', 'b'], bar='c')), + ] + + +class TestPositionalsNargsZeroOrMore1(ParserTestCase): + """Test a Positional with unlimited nargs followed by one with 1""" + + argument_signatures = [Sig('foo', nargs='*'), Sig('bar', nargs=1)] + failures = ['', '--foo', ] + successes = [ + ('a', NS(foo=[], bar=['a'])), + ('a b', NS(foo=['a'], bar=['b'])), + ('a b c', NS(foo=['a', 'b'], bar=['c'])), + ] + + +class TestPositionalsNargsOneOrMore1(ParserTestCase): + """Test a Positional with one or more nargs followed by one with 1""" + + argument_signatures = [Sig('foo', nargs='+'), Sig('bar', nargs=1)] + failures = ['', '--foo', 'a'] + successes = [ + ('a b', NS(foo=['a'], bar=['b'])), + ('a b c', NS(foo=['a', 'b'], bar=['c'])), + ] + + +class TestPositionalsNargsOptional1(ParserTestCase): + """Test a Positional with an Optional nargs followed by one with 1""" + + argument_signatures = [Sig('foo', nargs='?'), Sig('bar', nargs=1)] + failures = ['', '--foo', 'a b c'] + successes = [ + ('a', NS(foo=None, bar=['a'])), + ('a b', NS(foo='a', bar=['b'])), + ] + + +class TestPositionalsNargsNoneZeroOrMore1(ParserTestCase): + """Test three Positionals: no nargs, unlimited nargs and 1 nargs""" + + argument_signatures = [ + Sig('foo'), + Sig('bar', nargs='*'), + Sig('baz', nargs=1), + ] + failures = ['', '--foo', 'a'] + successes = [ + ('a b', NS(foo='a', bar=[], baz=['b'])), + ('a b c', NS(foo='a', bar=['b'], baz=['c'])), + ] + + +class TestPositionalsNargsNoneOneOrMore1(ParserTestCase): + """Test three Positionals: no nargs, one or more nargs and 1 nargs""" + + argument_signatures = [ + Sig('foo'), + Sig('bar', nargs='+'), + Sig('baz', nargs=1), + ] + failures = ['', '--foo', 'a', 'b'] + successes = [ + ('a b c', NS(foo='a', bar=['b'], baz=['c'])), + ('a b c d', NS(foo='a', bar=['b', 'c'], baz=['d'])), + ] + + +class TestPositionalsNargsNoneOptional1(ParserTestCase): + """Test three Positionals: no nargs, optional narg and 1 nargs""" + + argument_signatures = [ + Sig('foo'), + Sig('bar', nargs='?', default=0.625), + Sig('baz', nargs=1), + ] + failures = ['', '--foo', 'a'] + successes = [ + ('a b', NS(foo='a', bar=0.625, baz=['b'])), + ('a b c', NS(foo='a', bar='b', baz=['c'])), + ] + + +class TestPositionalsNargsOptionalOptional(ParserTestCase): + """Test two optional nargs""" + + argument_signatures = [ + Sig('foo', nargs='?'), + Sig('bar', nargs='?', default=42), + ] + failures = ['--foo', 'a b c'] + successes = [ + ('', NS(foo=None, bar=42)), + ('a', NS(foo='a', bar=42)), + ('a b', NS(foo='a', bar='b')), + ] + + +class TestPositionalsNargsOptionalZeroOrMore(ParserTestCase): + """Test an Optional narg followed by unlimited nargs""" + + argument_signatures = [Sig('foo', nargs='?'), Sig('bar', nargs='*')] + failures = ['--foo'] + successes = [ + ('', NS(foo=None, bar=[])), + ('a', NS(foo='a', bar=[])), + ('a b', NS(foo='a', bar=['b'])), + ('a b c', NS(foo='a', bar=['b', 'c'])), + ] + + +class TestPositionalsNargsOptionalOneOrMore(ParserTestCase): + """Test an Optional narg followed by one or more nargs""" + + argument_signatures = [Sig('foo', nargs='?'), Sig('bar', nargs='+')] + failures = ['', '--foo'] + successes = [ + ('a', NS(foo=None, bar=['a'])), + ('a b', NS(foo='a', bar=['b'])), + ('a b c', NS(foo='a', bar=['b', 'c'])), + ] + + +class TestPositionalsChoicesString(ParserTestCase): + """Test a set of single-character choices""" + + argument_signatures = [Sig('spam', choices=set('abcdefg'))] + failures = ['', '--foo', 'h', '42', 'ef'] + successes = [ + ('a', NS(spam='a')), + ('g', NS(spam='g')), + ] + + +class TestPositionalsChoicesInt(ParserTestCase): + """Test a set of integer choices""" + + argument_signatures = [Sig('spam', type=int, choices=range(20))] + failures = ['', '--foo', 'h', '42', 'ef'] + successes = [ + ('4', NS(spam=4)), + ('15', NS(spam=15)), + ] + + +class TestPositionalsActionAppend(ParserTestCase): + """Test the 'append' action""" + + argument_signatures = [ + Sig('spam', action='append'), + Sig('spam', action='append', nargs=2), + ] + failures = ['', '--foo', 'a', 'a b', 'a b c d'] + successes = [ + ('a b c', NS(spam=['a', ['b', 'c']])), + ] + +# ======================================== +# Combined optionals and positionals tests +# ======================================== + +class TestOptionalsNumericAndPositionals(ParserTestCase): + """Tests negative number args when numeric options are present""" + + argument_signatures = [ + Sig('x', nargs='?'), + Sig('-4', dest='y', action='store_true'), + ] + failures = ['-2', '-315'] + successes = [ + ('', NS(x=None, y=False)), + ('a', NS(x='a', y=False)), + ('-4', NS(x=None, y=True)), + ('-4 a', NS(x='a', y=True)), + ] + + +class TestOptionalsAlmostNumericAndPositionals(ParserTestCase): + """Tests negative number args when almost numeric options are present""" + + argument_signatures = [ + Sig('x', nargs='?'), + Sig('-k4', dest='y', action='store_true'), + ] + failures = ['-k3'] + successes = [ + ('', NS(x=None, y=False)), + ('-2', NS(x='-2', y=False)), + ('a', NS(x='a', y=False)), + ('-k4', NS(x=None, y=True)), + ('-k4 a', NS(x='a', y=True)), + ] + + +class TestEmptyAndSpaceContainingArguments(ParserTestCase): + + argument_signatures = [ + Sig('x', nargs='?'), + Sig('-y', '--yyy', dest='y'), + ] + failures = ['-y'] + successes = [ + ([''], NS(x='', y=None)), + (['a badger'], NS(x='a badger', y=None)), + (['-a badger'], NS(x='-a badger', y=None)), + (['-y', ''], NS(x=None, y='')), + (['-y', 'a badger'], NS(x=None, y='a badger')), + (['-y', '-a badger'], NS(x=None, y='-a badger')), + (['--yyy=a badger'], NS(x=None, y='a badger')), + (['--yyy=-a badger'], NS(x=None, y='-a badger')), + ] + + +class TestPrefixCharacterOnlyArguments(ParserTestCase): + + parser_signature = Sig(prefix_chars='-+') + argument_signatures = [ + Sig('-', dest='x', nargs='?', const='badger'), + Sig('+', dest='y', type=int, default=42), + Sig('-+-', dest='z', action='store_true'), + ] + failures = ['-y', '+ -'] + successes = [ + ('', NS(x=None, y=42, z=False)), + ('-', NS(x='badger', y=42, z=False)), + ('- X', NS(x='X', y=42, z=False)), + ('+ -3', NS(x=None, y=-3, z=False)), + ('-+-', NS(x=None, y=42, z=True)), + ('- ===', NS(x='===', y=42, z=False)), + ] + + +class TestNargsZeroOrMore(ParserTestCase): + """Tests specifying an args for an Optional that accepts zero or more""" + + argument_signatures = [Sig('-x', nargs='*'), Sig('y', nargs='*')] + failures = [] + successes = [ + ('', NS(x=None, y=[])), + ('-x', NS(x=[], y=[])), + ('-x a', NS(x=['a'], y=[])), + ('-x a -- b', NS(x=['a'], y=['b'])), + ('a', NS(x=None, y=['a'])), + ('a -x', NS(x=[], y=['a'])), + ('a -x b', NS(x=['b'], y=['a'])), + ] + + +class TestNargsRemainder(ParserTestCase): + """Tests specifying a positional with nargs=REMAINDER""" + + argument_signatures = [Sig('x'), Sig('y', nargs='...'), Sig('-z')] + failures = ['', '-z', '-z Z'] + successes = [ + ('X', NS(x='X', y=[], z=None)), + ('-z Z X', NS(x='X', y=[], z='Z')), + ('X A B -z Z', NS(x='X', y=['A', 'B', '-z', 'Z'], z=None)), + ('X Y --foo', NS(x='X', y=['Y', '--foo'], z=None)), + ] + + +class TestOptionLike(ParserTestCase): + """Tests options that may or may not be arguments""" + + argument_signatures = [ + Sig('-x', type=float), + Sig('-3', type=float, dest='y'), + Sig('z', nargs='*'), + ] + failures = ['-x', '-y2.5', '-xa', '-x -a', + '-x -3', '-x -3.5', '-3 -3.5', + '-x -2.5', '-x -2.5 a', '-3 -.5', + 'a x -1', '-x -1 a', '-3 -1 a'] + successes = [ + ('', NS(x=None, y=None, z=[])), + ('-x 2.5', NS(x=2.5, y=None, z=[])), + ('-x 2.5 a', NS(x=2.5, y=None, z=['a'])), + ('-3.5', NS(x=None, y=0.5, z=[])), + ('-3-.5', NS(x=None, y=-0.5, z=[])), + ('-3 .5', NS(x=None, y=0.5, z=[])), + ('a -3.5', NS(x=None, y=0.5, z=['a'])), + ('a', NS(x=None, y=None, z=['a'])), + ('a -x 1', NS(x=1.0, y=None, z=['a'])), + ('-x 1 a', NS(x=1.0, y=None, z=['a'])), + ('-3 1 a', NS(x=None, y=1.0, z=['a'])), + ] + + +class TestDefaultSuppress(ParserTestCase): + """Test actions with suppressed defaults""" + + argument_signatures = [ + Sig('foo', nargs='?', default=argparse.SUPPRESS), + Sig('bar', nargs='*', default=argparse.SUPPRESS), + Sig('--baz', action='store_true', default=argparse.SUPPRESS), + ] + failures = ['-x'] + successes = [ + ('', NS()), + ('a', NS(foo='a')), + ('a b', NS(foo='a', bar=['b'])), + ('--baz', NS(baz=True)), + ('a --baz', NS(foo='a', baz=True)), + ('--baz a b', NS(foo='a', bar=['b'], baz=True)), + ] + + +class TestParserDefaultSuppress(ParserTestCase): + """Test actions with a parser-level default of SUPPRESS""" + + parser_signature = Sig(argument_default=argparse.SUPPRESS) + argument_signatures = [ + Sig('foo', nargs='?'), + Sig('bar', nargs='*'), + Sig('--baz', action='store_true'), + ] + failures = ['-x'] + successes = [ + ('', NS()), + ('a', NS(foo='a')), + ('a b', NS(foo='a', bar=['b'])), + ('--baz', NS(baz=True)), + ('a --baz', NS(foo='a', baz=True)), + ('--baz a b', NS(foo='a', bar=['b'], baz=True)), + ] + + +class TestParserDefault42(ParserTestCase): + """Test actions with a parser-level default of 42""" + + parser_signature = Sig(argument_default=42, version='1.0') + argument_signatures = [ + Sig('foo', nargs='?'), + Sig('bar', nargs='*'), + Sig('--baz', action='store_true'), + ] + failures = ['-x'] + successes = [ + ('', NS(foo=42, bar=42, baz=42)), + ('a', NS(foo='a', bar=42, baz=42)), + ('a b', NS(foo='a', bar=['b'], baz=42)), + ('--baz', NS(foo=42, bar=42, baz=True)), + ('a --baz', NS(foo='a', bar=42, baz=True)), + ('--baz a b', NS(foo='a', bar=['b'], baz=True)), + ] + + +class TestArgumentsFromFile(TempDirMixin, ParserTestCase): + """Test reading arguments from a file""" + + def setUp(self): + super(TestArgumentsFromFile, self).setUp() + file_texts = [ + ('hello', 'hello world!\n'), + ('recursive', '-a\n' + 'A\n' + '@hello'), + ('invalid', '@no-such-path\n'), + ] + for path, text in file_texts: + file = open(path, 'w') + file.write(text) + file.close() + + parser_signature = Sig(fromfile_prefix_chars='@') + argument_signatures = [ + Sig('-a'), + Sig('x'), + Sig('y', nargs='+'), + ] + failures = ['', '-b', 'X', '@invalid', '@missing'] + successes = [ + ('X Y', NS(a=None, x='X', y=['Y'])), + ('X -a A Y Z', NS(a='A', x='X', y=['Y', 'Z'])), + ('@hello X', NS(a=None, x='hello world!', y=['X'])), + ('X @hello', NS(a=None, x='X', y=['hello world!'])), + ('-a B @recursive Y Z', NS(a='A', x='hello world!', y=['Y', 'Z'])), + ('X @recursive Z -a B', NS(a='B', x='X', y=['hello world!', 'Z'])), + ] + + +class TestArgumentsFromFileConverter(TempDirMixin, ParserTestCase): + """Test reading arguments from a file""" + + def setUp(self): + super(TestArgumentsFromFileConverter, self).setUp() + file_texts = [ + ('hello', 'hello world!\n'), + ] + for path, text in file_texts: + file = open(path, 'w') + file.write(text) + file.close() + + class FromFileConverterArgumentParser(ErrorRaisingArgumentParser): + + def convert_arg_line_to_args(self, arg_line): + for arg in arg_line.split(): + if not arg.strip(): + continue + yield arg + parser_class = FromFileConverterArgumentParser + parser_signature = Sig(fromfile_prefix_chars='@') + argument_signatures = [ + Sig('y', nargs='+'), + ] + failures = [] + successes = [ + ('@hello X', NS(y=['hello', 'world!', 'X'])), + ] + + +# ===================== +# Type conversion tests +# ===================== + +class TestFileTypeRepr(TestCase): + + def test_r(self): + type = argparse.FileType('r') + self.assertEqual("FileType('r')", repr(type)) + + def test_wb_1(self): + type = argparse.FileType('wb', 1) + self.assertEqual("FileType('wb', 1)", repr(type)) + + +class RFile(object): + seen = {} + + def __init__(self, name): + self.name = name + + def __eq__(self, other): + if other in self.seen: + text = self.seen[other] + else: + text = self.seen[other] = other.read() + other.close() + if not isinstance(text, str): + text = text.decode('ascii') + return self.name == other.name == text + + +class TestFileTypeR(TempDirMixin, ParserTestCase): + """Test the FileType option/argument type for reading files""" + + def setUp(self): + super(TestFileTypeR, self).setUp() + for file_name in ['foo', 'bar']: + file = open(os.path.join(self.temp_dir, file_name), 'w') + file.write(file_name) + file.close() + + argument_signatures = [ + Sig('-x', type=argparse.FileType()), + Sig('spam', type=argparse.FileType('r')), + ] + failures = ['-x', '-x bar'] + successes = [ + ('foo', NS(x=None, spam=RFile('foo'))), + ('-x foo bar', NS(x=RFile('foo'), spam=RFile('bar'))), + ('bar -x foo', NS(x=RFile('foo'), spam=RFile('bar'))), + ('-x - -', NS(x=sys.stdin, spam=sys.stdin)), + ] + + +class TestFileTypeRB(TempDirMixin, ParserTestCase): + """Test the FileType option/argument type for reading files""" + + def setUp(self): + super(TestFileTypeRB, self).setUp() + for file_name in ['foo', 'bar']: + file = open(os.path.join(self.temp_dir, file_name), 'w') + file.write(file_name) + file.close() + + argument_signatures = [ + Sig('-x', type=argparse.FileType('rb')), + Sig('spam', type=argparse.FileType('rb')), + ] + failures = ['-x', '-x bar'] + successes = [ + ('foo', NS(x=None, spam=RFile('foo'))), + ('-x foo bar', NS(x=RFile('foo'), spam=RFile('bar'))), + ('bar -x foo', NS(x=RFile('foo'), spam=RFile('bar'))), + ('-x - -', NS(x=sys.stdin, spam=sys.stdin)), + ] + + +class WFile(object): + seen = set() + + def __init__(self, name): + self.name = name + + def __eq__(self, other): + if other not in self.seen: + text = 'Check that file is writable.' + if 'b' in other.mode: + text = text.encode('ascii') + other.write(text) + other.close() + self.seen.add(other) + return self.name == other.name + + +class TestFileTypeW(TempDirMixin, ParserTestCase): + """Test the FileType option/argument type for writing files""" + + argument_signatures = [ + Sig('-x', type=argparse.FileType('w')), + Sig('spam', type=argparse.FileType('w')), + ] + failures = ['-x', '-x bar'] + successes = [ + ('foo', NS(x=None, spam=WFile('foo'))), + ('-x foo bar', NS(x=WFile('foo'), spam=WFile('bar'))), + ('bar -x foo', NS(x=WFile('foo'), spam=WFile('bar'))), + ('-x - -', NS(x=sys.stdout, spam=sys.stdout)), + ] + + +class TestFileTypeWB(TempDirMixin, ParserTestCase): + + argument_signatures = [ + Sig('-x', type=argparse.FileType('wb')), + Sig('spam', type=argparse.FileType('wb')), + ] + failures = ['-x', '-x bar'] + successes = [ + ('foo', NS(x=None, spam=WFile('foo'))), + ('-x foo bar', NS(x=WFile('foo'), spam=WFile('bar'))), + ('bar -x foo', NS(x=WFile('foo'), spam=WFile('bar'))), + ('-x - -', NS(x=sys.stdout, spam=sys.stdout)), + ] + + +class TestTypeCallable(ParserTestCase): + """Test some callables as option/argument types""" + + argument_signatures = [ + Sig('--eggs', type=complex), + Sig('spam', type=float), + ] + failures = ['a', '42j', '--eggs a', '--eggs 2i'] + successes = [ + ('--eggs=42 42', NS(eggs=42, spam=42.0)), + ('--eggs 2j -- -1.5', NS(eggs=2j, spam=-1.5)), + ('1024.675', NS(eggs=None, spam=1024.675)), + ] + + +class TestTypeUserDefined(ParserTestCase): + """Test a user-defined option/argument type""" + + class MyType(TestCase): + + def __init__(self, value): + self.value = value + + def __eq__(self, other): + return (type(self), self.value) == (type(other), other.value) + + argument_signatures = [ + Sig('-x', type=MyType), + Sig('spam', type=MyType), + ] + failures = [] + successes = [ + ('a -x b', NS(x=MyType('b'), spam=MyType('a'))), + ('-xf g', NS(x=MyType('f'), spam=MyType('g'))), + ] + + +class TestTypeClassicClass(ParserTestCase): + """Test a classic class type""" + + class C: + + def __init__(self, value): + self.value = value + + def __eq__(self, other): + return (type(self), self.value) == (type(other), other.value) + + argument_signatures = [ + Sig('-x', type=C), + Sig('spam', type=C), + ] + failures = [] + successes = [ + ('a -x b', NS(x=C('b'), spam=C('a'))), + ('-xf g', NS(x=C('f'), spam=C('g'))), + ] + + +class TestTypeRegistration(TestCase): + """Test a user-defined type by registering it""" + + def test(self): + + def get_my_type(string): + return 'my_type{%s}' % string + + parser = argparse.ArgumentParser() + parser.register('type', 'my_type', get_my_type) + parser.add_argument('-x', type='my_type') + parser.add_argument('y', type='my_type') + + self.assertEqual(parser.parse_args('1'.split()), + NS(x=None, y='my_type{1}')) + self.assertEqual(parser.parse_args('-x 1 42'.split()), + NS(x='my_type{1}', y='my_type{42}')) + + +# ============ +# Action tests +# ============ + +class TestActionUserDefined(ParserTestCase): + """Test a user-defined option/argument action""" + + class OptionalAction(argparse.Action): + + def __call__(self, parser, namespace, value, option_string=None): + try: + # check destination and option string + assert self.dest == 'spam', 'dest: %s' % self.dest + assert option_string == '-s', 'flag: %s' % option_string + # when option is before argument, badger=2, and when + # option is after argument, badger= + expected_ns = NS(spam=0.25) + if value in [0.125, 0.625]: + expected_ns.badger = 2 + elif value in [2.0]: + expected_ns.badger = 84 + else: + raise AssertionError('value: %s' % value) + assert expected_ns == namespace, ('expected %s, got %s' % + (expected_ns, namespace)) + except AssertionError: + e = sys.exc_info()[1] + raise ArgumentParserError('opt_action failed: %s' % e) + setattr(namespace, 'spam', value) + + class PositionalAction(argparse.Action): + + def __call__(self, parser, namespace, value, option_string=None): + try: + assert option_string is None, ('option_string: %s' % + option_string) + # check destination + assert self.dest == 'badger', 'dest: %s' % self.dest + # when argument is before option, spam=0.25, and when + # option is after argument, spam= + expected_ns = NS(badger=2) + if value in [42, 84]: + expected_ns.spam = 0.25 + elif value in [1]: + expected_ns.spam = 0.625 + elif value in [2]: + expected_ns.spam = 0.125 + else: + raise AssertionError('value: %s' % value) + assert expected_ns == namespace, ('expected %s, got %s' % + (expected_ns, namespace)) + except AssertionError: + e = sys.exc_info()[1] + raise ArgumentParserError('arg_action failed: %s' % e) + setattr(namespace, 'badger', value) + + argument_signatures = [ + Sig('-s', dest='spam', action=OptionalAction, + type=float, default=0.25), + Sig('badger', action=PositionalAction, + type=int, nargs='?', default=2), + ] + failures = [] + successes = [ + ('-s0.125', NS(spam=0.125, badger=2)), + ('42', NS(spam=0.25, badger=42)), + ('-s 0.625 1', NS(spam=0.625, badger=1)), + ('84 -s2', NS(spam=2.0, badger=84)), + ] + + +class TestActionRegistration(TestCase): + """Test a user-defined action supplied by registering it""" + + class MyAction(argparse.Action): + + def __call__(self, parser, namespace, values, option_string=None): + setattr(namespace, self.dest, 'foo[%s]' % values) + + def test(self): + + parser = argparse.ArgumentParser() + parser.register('action', 'my_action', self.MyAction) + parser.add_argument('badger', action='my_action') + + self.assertEqual(parser.parse_args(['1']), NS(badger='foo[1]')) + self.assertEqual(parser.parse_args(['42']), NS(badger='foo[42]')) + + +# ================ +# Subparsers tests +# ================ + +class TestAddSubparsers(TestCase): + """Test the add_subparsers method""" + + def assertArgumentParserError(self, *args, **kwargs): + self.assertRaises(ArgumentParserError, *args, **kwargs) + + def _get_parser(self, subparser_help=False): + # create a parser with a subparsers argument + parser = ErrorRaisingArgumentParser( + prog='PROG', description='main description') + parser.add_argument( + '--foo', action='store_true', help='foo help') + parser.add_argument( + 'bar', type=float, help='bar help') + + # check that only one subparsers argument can be added + subparsers = parser.add_subparsers(help='command help') + self.assertArgumentParserError(parser.add_subparsers) + + # add first sub-parser + parser1_kwargs = dict(description='1 description') + if subparser_help: + parser1_kwargs['help'] = '1 help' + parser1 = subparsers.add_parser('1', **parser1_kwargs) + parser1.add_argument('-w', type=int, help='w help') + parser1.add_argument('x', choices='abc', help='x help') + + # add second sub-parser + parser2_kwargs = dict(description='2 description') + if subparser_help: + parser2_kwargs['help'] = '2 help' + parser2 = subparsers.add_parser('2', **parser2_kwargs) + parser2.add_argument('-y', choices='123', help='y help') + parser2.add_argument('z', type=complex, nargs='*', help='z help') + + # return the main parser + return parser + + def setUp(self): + self.parser = self._get_parser() + self.command_help_parser = self._get_parser(subparser_help=True) + + def test_parse_args_failures(self): + # check some failure cases: + for args_str in ['', 'a', 'a a', '0.5 a', '0.5 1', + '0.5 1 -y', '0.5 2 -w']: + args = args_str.split() + self.assertArgumentParserError(self.parser.parse_args, args) + + def test_parse_args(self): + # check some non-failure cases: + self.assertEqual( + self.parser.parse_args('0.5 1 b -w 7'.split()), + NS(foo=False, bar=0.5, w=7, x='b'), + ) + self.assertEqual( + self.parser.parse_args('0.25 --foo 2 -y 2 3j -- -1j'.split()), + NS(foo=True, bar=0.25, y='2', z=[3j, -1j]), + ) + self.assertEqual( + self.parser.parse_args('--foo 0.125 1 c'.split()), + NS(foo=True, bar=0.125, w=None, x='c'), + ) + + def test_dest(self): + parser = ErrorRaisingArgumentParser() + parser.add_argument('--foo', action='store_true') + subparsers = parser.add_subparsers(dest='bar') + parser1 = subparsers.add_parser('1') + parser1.add_argument('baz') + self.assertEqual(NS(foo=False, bar='1', baz='2'), + parser.parse_args('1 2'.split())) + + def test_help(self): + self.assertEqual(self.parser.format_usage(), + 'usage: PROG [-h] [--foo] bar {1,2} ...\n') + self.assertEqual(self.parser.format_help(), textwrap.dedent('''\ + usage: PROG [-h] [--foo] bar {1,2} ... + + main description + + positional arguments: + bar bar help + {1,2} command help + + optional arguments: + -h, --help show this help message and exit + --foo foo help + ''')) + + def test_parser_command_help(self): + self.assertEqual(self.command_help_parser.format_usage(), + 'usage: PROG [-h] [--foo] bar {1,2} ...\n') + self.assertEqual(self.command_help_parser.format_help(), + textwrap.dedent('''\ + usage: PROG [-h] [--foo] bar {1,2} ... + + main description + + positional arguments: + bar bar help + {1,2} command help + 1 1 help + 2 2 help + + optional arguments: + -h, --help show this help message and exit + --foo foo help + ''')) + + def test_subparser_title_help(self): + parser = ErrorRaisingArgumentParser(prog='PROG', + description='main description') + parser.add_argument('--foo', action='store_true', help='foo help') + parser.add_argument('bar', help='bar help') + subparsers = parser.add_subparsers(title='subcommands', + description='command help', + help='additional text') + parser1 = subparsers.add_parser('1') + parser2 = subparsers.add_parser('2') + self.assertEqual(parser.format_usage(), + 'usage: PROG [-h] [--foo] bar {1,2} ...\n') + self.assertEqual(parser.format_help(), textwrap.dedent('''\ + usage: PROG [-h] [--foo] bar {1,2} ... + + main description + + positional arguments: + bar bar help + + optional arguments: + -h, --help show this help message and exit + --foo foo help + + subcommands: + command help + + {1,2} additional text + ''')) + + def _test_subparser_help(self, args_str, expected_help): + try: + self.parser.parse_args(args_str.split()) + except ArgumentParserError: + err = sys.exc_info()[1] + if err.stdout != expected_help: + print(repr(expected_help)) + print(repr(err.stdout)) + self.assertEqual(err.stdout, expected_help) + + def test_subparser1_help(self): + self._test_subparser_help('5.0 1 -h', textwrap.dedent('''\ + usage: PROG bar 1 [-h] [-w W] {a,b,c} + + 1 description + + positional arguments: + {a,b,c} x help + + optional arguments: + -h, --help show this help message and exit + -w W w help + ''')) + + def test_subparser2_help(self): + self._test_subparser_help('5.0 2 -h', textwrap.dedent('''\ + usage: PROG bar 2 [-h] [-y {1,2,3}] [z [z ...]] + + 2 description + + positional arguments: + z z help + + optional arguments: + -h, --help show this help message and exit + -y {1,2,3} y help + ''')) + +# ============ +# Groups tests +# ============ + +class TestPositionalsGroups(TestCase): + """Tests that order of group positionals matches construction order""" + + def test_nongroup_first(self): + parser = ErrorRaisingArgumentParser() + parser.add_argument('foo') + group = parser.add_argument_group('g') + group.add_argument('bar') + parser.add_argument('baz') + expected = NS(foo='1', bar='2', baz='3') + result = parser.parse_args('1 2 3'.split()) + self.failUnlessEqual(expected, result) + + def test_group_first(self): + parser = ErrorRaisingArgumentParser() + group = parser.add_argument_group('xxx') + group.add_argument('foo') + parser.add_argument('bar') + parser.add_argument('baz') + expected = NS(foo='1', bar='2', baz='3') + result = parser.parse_args('1 2 3'.split()) + self.failUnlessEqual(expected, result) + + def test_interleaved_groups(self): + parser = ErrorRaisingArgumentParser() + group = parser.add_argument_group('xxx') + parser.add_argument('foo') + group.add_argument('bar') + parser.add_argument('baz') + group = parser.add_argument_group('yyy') + group.add_argument('frell') + expected = NS(foo='1', bar='2', baz='3', frell='4') + result = parser.parse_args('1 2 3 4'.split()) + self.failUnlessEqual(expected, result) + +# =================== +# Parent parser tests +# =================== + +class TestParentParsers(TestCase): + """Tests that parsers can be created with parent parsers""" + + def assertArgumentParserError(self, *args, **kwargs): + self.assertRaises(ArgumentParserError, *args, **kwargs) + + def setUp(self): + self.wxyz_parent = ErrorRaisingArgumentParser(add_help=False) + self.wxyz_parent.add_argument('--w') + x_group = self.wxyz_parent.add_argument_group('x') + x_group.add_argument('-y') + self.wxyz_parent.add_argument('z') + + self.abcd_parent = ErrorRaisingArgumentParser(add_help=False) + self.abcd_parent.add_argument('a') + self.abcd_parent.add_argument('-b') + c_group = self.abcd_parent.add_argument_group('c') + c_group.add_argument('--d') + + self.w_parent = ErrorRaisingArgumentParser(add_help=False) + self.w_parent.add_argument('--w') + + self.z_parent = ErrorRaisingArgumentParser(add_help=False) + self.z_parent.add_argument('z') + + # parents with mutually exclusive groups + self.ab_mutex_parent = ErrorRaisingArgumentParser(add_help=False) + group = self.ab_mutex_parent.add_mutually_exclusive_group() + group.add_argument('-a', action='store_true') + group.add_argument('-b', action='store_true') + + def test_single_parent(self): + parser = ErrorRaisingArgumentParser(parents=[self.wxyz_parent]) + self.assertEqual(parser.parse_args('-y 1 2 --w 3'.split()), + NS(w='3', y='1', z='2')) + + def test_single_parent_mutex(self): + self._test_mutex_ab(self.ab_mutex_parent.parse_args) + parser = ErrorRaisingArgumentParser(parents=[self.ab_mutex_parent]) + self._test_mutex_ab(parser.parse_args) + + def test_single_granparent_mutex(self): + parents = [self.ab_mutex_parent] + parser = ErrorRaisingArgumentParser(add_help=False, parents=parents) + parser = ErrorRaisingArgumentParser(parents=[parser]) + self._test_mutex_ab(parser.parse_args) + + def _test_mutex_ab(self, parse_args): + self.assertEqual(parse_args([]), NS(a=False, b=False)) + self.assertEqual(parse_args(['-a']), NS(a=True, b=False)) + self.assertEqual(parse_args(['-b']), NS(a=False, b=True)) + self.assertArgumentParserError(parse_args, ['-a', '-b']) + self.assertArgumentParserError(parse_args, ['-b', '-a']) + self.assertArgumentParserError(parse_args, ['-c']) + self.assertArgumentParserError(parse_args, ['-a', '-c']) + self.assertArgumentParserError(parse_args, ['-b', '-c']) + + def test_multiple_parents(self): + parents = [self.abcd_parent, self.wxyz_parent] + parser = ErrorRaisingArgumentParser(parents=parents) + self.assertEqual(parser.parse_args('--d 1 --w 2 3 4'.split()), + NS(a='3', b=None, d='1', w='2', y=None, z='4')) + + def test_multiple_parents_mutex(self): + parents = [self.ab_mutex_parent, self.wxyz_parent] + parser = ErrorRaisingArgumentParser(parents=parents) + self.assertEqual(parser.parse_args('-a --w 2 3'.split()), + NS(a=True, b=False, w='2', y=None, z='3')) + self.assertArgumentParserError( + parser.parse_args, '-a --w 2 3 -b'.split()) + self.assertArgumentParserError( + parser.parse_args, '-a -b --w 2 3'.split()) + + def test_conflicting_parents(self): + self.assertRaises( + argparse.ArgumentError, + argparse.ArgumentParser, + parents=[self.w_parent, self.wxyz_parent]) + + def test_conflicting_parents_mutex(self): + self.assertRaises( + argparse.ArgumentError, + argparse.ArgumentParser, + parents=[self.abcd_parent, self.ab_mutex_parent]) + + def test_same_argument_name_parents(self): + parents = [self.wxyz_parent, self.z_parent] + parser = ErrorRaisingArgumentParser(parents=parents) + self.assertEqual(parser.parse_args('1 2'.split()), + NS(w=None, y=None, z='2')) + + def test_subparser_parents(self): + parser = ErrorRaisingArgumentParser() + subparsers = parser.add_subparsers() + abcde_parser = subparsers.add_parser('bar', parents=[self.abcd_parent]) + abcde_parser.add_argument('e') + self.assertEqual(parser.parse_args('bar -b 1 --d 2 3 4'.split()), + NS(a='3', b='1', d='2', e='4')) + + def test_subparser_parents_mutex(self): + parser = ErrorRaisingArgumentParser() + subparsers = parser.add_subparsers() + parents = [self.ab_mutex_parent] + abc_parser = subparsers.add_parser('foo', parents=parents) + c_group = abc_parser.add_argument_group('c_group') + c_group.add_argument('c') + parents = [self.wxyz_parent, self.ab_mutex_parent] + wxyzabe_parser = subparsers.add_parser('bar', parents=parents) + wxyzabe_parser.add_argument('e') + self.assertEqual(parser.parse_args('foo -a 4'.split()), + NS(a=True, b=False, c='4')) + self.assertEqual(parser.parse_args('bar -b --w 2 3 4'.split()), + NS(a=False, b=True, w='2', y=None, z='3', e='4')) + self.assertArgumentParserError( + parser.parse_args, 'foo -a -b 4'.split()) + self.assertArgumentParserError( + parser.parse_args, 'bar -b -a 4'.split()) + + def test_parent_help(self): + parents = [self.abcd_parent, self.wxyz_parent] + parser = ErrorRaisingArgumentParser(parents=parents) + parser_help = parser.format_help() + self.assertEqual(parser_help, textwrap.dedent('''\ + usage: test_argparse.py [-h] [-b B] [--d D] [--w W] [-y Y] a z + + positional arguments: + a + z + + optional arguments: + -h, --help show this help message and exit + -b B + --w W + + c: + --d D + + x: + -y Y + ''')) + + def test_groups_parents(self): + parent = ErrorRaisingArgumentParser(add_help=False) + g = parent.add_argument_group(title='g', description='gd') + g.add_argument('-w') + g.add_argument('-x') + m = parent.add_mutually_exclusive_group() + m.add_argument('-y') + m.add_argument('-z') + parser = ErrorRaisingArgumentParser(parents=[parent]) + + self.assertRaises(ArgumentParserError, parser.parse_args, + ['-y', 'Y', '-z', 'Z']) + + parser_help = parser.format_help() + self.assertEqual(parser_help, textwrap.dedent('''\ + usage: test_argparse.py [-h] [-w W] [-x X] [-y Y | -z Z] + + optional arguments: + -h, --help show this help message and exit + -y Y + -z Z + + g: + gd + + -w W + -x X + ''')) + +# ============================== +# Mutually exclusive group tests +# ============================== + +class TestMutuallyExclusiveGroupErrors(TestCase): + + def test_invalid_add_argument_group(self): + parser = ErrorRaisingArgumentParser() + raises = self.assertRaises + raises(TypeError, parser.add_mutually_exclusive_group, title='foo') + + def test_invalid_add_argument(self): + parser = ErrorRaisingArgumentParser() + group = parser.add_mutually_exclusive_group() + add_argument = group.add_argument + raises = self.assertRaises + raises(ValueError, add_argument, '--foo', required=True) + raises(ValueError, add_argument, 'bar') + raises(ValueError, add_argument, 'bar', nargs='+') + raises(ValueError, add_argument, 'bar', nargs=1) + raises(ValueError, add_argument, 'bar', nargs=argparse.PARSER) + + +class MEMixin(object): + + def test_failures_when_not_required(self): + parse_args = self.get_parser(required=False).parse_args + error = ArgumentParserError + for args_string in self.failures: + self.assertRaises(error, parse_args, args_string.split()) + + def test_failures_when_required(self): + parse_args = self.get_parser(required=True).parse_args + error = ArgumentParserError + for args_string in self.failures + ['']: + self.assertRaises(error, parse_args, args_string.split()) + + def test_successes_when_not_required(self): + parse_args = self.get_parser(required=False).parse_args + successes = self.successes + self.successes_when_not_required + for args_string, expected_ns in successes: + actual_ns = parse_args(args_string.split()) + self.assertEqual(actual_ns, expected_ns) + + def test_successes_when_required(self): + parse_args = self.get_parser(required=True).parse_args + for args_string, expected_ns in self.successes: + actual_ns = parse_args(args_string.split()) + self.assertEqual(actual_ns, expected_ns) + + def test_usage_when_not_required(self): + format_usage = self.get_parser(required=False).format_usage + expected_usage = self.usage_when_not_required + self.assertEqual(format_usage(), textwrap.dedent(expected_usage)) + + def test_usage_when_required(self): + format_usage = self.get_parser(required=True).format_usage + expected_usage = self.usage_when_required + self.assertEqual(format_usage(), textwrap.dedent(expected_usage)) + + def test_help_when_not_required(self): + format_help = self.get_parser(required=False).format_help + help = self.usage_when_not_required + self.help + self.assertEqual(format_help(), textwrap.dedent(help)) + + def test_help_when_required(self): + format_help = self.get_parser(required=True).format_help + help = self.usage_when_required + self.help + self.assertEqual(format_help(), textwrap.dedent(help)) + + +class TestMutuallyExclusiveSimple(MEMixin, TestCase): + + def get_parser(self, required=None): + parser = ErrorRaisingArgumentParser(prog='PROG') + group = parser.add_mutually_exclusive_group(required=required) + group.add_argument('--bar', help='bar help') + group.add_argument('--baz', nargs='?', const='Z', help='baz help') + return parser + + failures = ['--bar X --baz Y', '--bar X --baz'] + successes = [ + ('--bar X', NS(bar='X', baz=None)), + ('--bar X --bar Z', NS(bar='Z', baz=None)), + ('--baz Y', NS(bar=None, baz='Y')), + ('--baz', NS(bar=None, baz='Z')), + ] + successes_when_not_required = [ + ('', NS(bar=None, baz=None)), + ] + + usage_when_not_required = '''\ + usage: PROG [-h] [--bar BAR | --baz [BAZ]] + ''' + usage_when_required = '''\ + usage: PROG [-h] (--bar BAR | --baz [BAZ]) + ''' + help = '''\ + + optional arguments: + -h, --help show this help message and exit + --bar BAR bar help + --baz [BAZ] baz help + ''' + + +class TestMutuallyExclusiveLong(MEMixin, TestCase): + + def get_parser(self, required=None): + parser = ErrorRaisingArgumentParser(prog='PROG') + parser.add_argument('--abcde', help='abcde help') + parser.add_argument('--fghij', help='fghij help') + group = parser.add_mutually_exclusive_group(required=required) + group.add_argument('--klmno', help='klmno help') + group.add_argument('--pqrst', help='pqrst help') + return parser + + failures = ['--klmno X --pqrst Y'] + successes = [ + ('--klmno X', NS(abcde=None, fghij=None, klmno='X', pqrst=None)), + ('--abcde Y --klmno X', + NS(abcde='Y', fghij=None, klmno='X', pqrst=None)), + ('--pqrst X', NS(abcde=None, fghij=None, klmno=None, pqrst='X')), + ('--pqrst X --fghij Y', + NS(abcde=None, fghij='Y', klmno=None, pqrst='X')), + ] + successes_when_not_required = [ + ('', NS(abcde=None, fghij=None, klmno=None, pqrst=None)), + ] + + usage_when_not_required = '''\ + usage: PROG [-h] [--abcde ABCDE] [--fghij FGHIJ] + [--klmno KLMNO | --pqrst PQRST] + ''' + usage_when_required = '''\ + usage: PROG [-h] [--abcde ABCDE] [--fghij FGHIJ] + (--klmno KLMNO | --pqrst PQRST) + ''' + help = '''\ + + optional arguments: + -h, --help show this help message and exit + --abcde ABCDE abcde help + --fghij FGHIJ fghij help + --klmno KLMNO klmno help + --pqrst PQRST pqrst help + ''' + + +class TestMutuallyExclusiveFirstSuppressed(MEMixin, TestCase): + + def get_parser(self, required): + parser = ErrorRaisingArgumentParser(prog='PROG') + group = parser.add_mutually_exclusive_group(required=required) + group.add_argument('-x', help=argparse.SUPPRESS) + group.add_argument('-y', action='store_false', help='y help') + return parser + + failures = ['-x X -y'] + successes = [ + ('-x X', NS(x='X', y=True)), + ('-x X -x Y', NS(x='Y', y=True)), + ('-y', NS(x=None, y=False)), + ] + successes_when_not_required = [ + ('', NS(x=None, y=True)), + ] + + usage_when_not_required = '''\ + usage: PROG [-h] [-y] + ''' + usage_when_required = '''\ + usage: PROG [-h] -y + ''' + help = '''\ + + optional arguments: + -h, --help show this help message and exit + -y y help + ''' + + +class TestMutuallyExclusiveManySuppressed(MEMixin, TestCase): + + def get_parser(self, required): + parser = ErrorRaisingArgumentParser(prog='PROG') + group = parser.add_mutually_exclusive_group(required=required) + add = group.add_argument + add('--spam', action='store_true', help=argparse.SUPPRESS) + add('--badger', action='store_false', help=argparse.SUPPRESS) + add('--bladder', help=argparse.SUPPRESS) + return parser + + failures = [ + '--spam --badger', + '--badger --bladder B', + '--bladder B --spam', + ] + successes = [ + ('--spam', NS(spam=True, badger=True, bladder=None)), + ('--badger', NS(spam=False, badger=False, bladder=None)), + ('--bladder B', NS(spam=False, badger=True, bladder='B')), + ('--spam --spam', NS(spam=True, badger=True, bladder=None)), + ] + successes_when_not_required = [ + ('', NS(spam=False, badger=True, bladder=None)), + ] + + usage_when_required = usage_when_not_required = '''\ + usage: PROG [-h] + ''' + help = '''\ + + optional arguments: + -h, --help show this help message and exit + ''' + + +class TestMutuallyExclusiveOptionalAndPositional(MEMixin, TestCase): + + def get_parser(self, required): + parser = ErrorRaisingArgumentParser(prog='PROG') + group = parser.add_mutually_exclusive_group(required=required) + group.add_argument('--foo', action='store_true', help='FOO') + group.add_argument('--spam', help='SPAM') + group.add_argument('badger', nargs='*', default='X', help='BADGER') + return parser + + failures = [ + '--foo --spam S', + '--spam S X', + 'X --foo', + 'X Y Z --spam S', + '--foo X Y', + ] + successes = [ + ('--foo', NS(foo=True, spam=None, badger='X')), + ('--spam S', NS(foo=False, spam='S', badger='X')), + ('X', NS(foo=False, spam=None, badger=['X'])), + ('X Y Z', NS(foo=False, spam=None, badger=['X', 'Y', 'Z'])), + ] + successes_when_not_required = [ + ('', NS(foo=False, spam=None, badger='X')), + ] + + usage_when_not_required = '''\ + usage: PROG [-h] [--foo | --spam SPAM | badger [badger ...]] + ''' + usage_when_required = '''\ + usage: PROG [-h] (--foo | --spam SPAM | badger [badger ...]) + ''' + help = '''\ + + positional arguments: + badger BADGER + + optional arguments: + -h, --help show this help message and exit + --foo FOO + --spam SPAM SPAM + ''' + + +class TestMutuallyExclusiveOptionalsMixed(MEMixin, TestCase): + + def get_parser(self, required): + parser = ErrorRaisingArgumentParser(prog='PROG') + parser.add_argument('-x', action='store_true', help='x help') + group = parser.add_mutually_exclusive_group(required=required) + group.add_argument('-a', action='store_true', help='a help') + group.add_argument('-b', action='store_true', help='b help') + parser.add_argument('-y', action='store_true', help='y help') + group.add_argument('-c', action='store_true', help='c help') + return parser + + failures = ['-a -b', '-b -c', '-a -c', '-a -b -c'] + successes = [ + ('-a', NS(a=True, b=False, c=False, x=False, y=False)), + ('-b', NS(a=False, b=True, c=False, x=False, y=False)), + ('-c', NS(a=False, b=False, c=True, x=False, y=False)), + ('-a -x', NS(a=True, b=False, c=False, x=True, y=False)), + ('-y -b', NS(a=False, b=True, c=False, x=False, y=True)), + ('-x -y -c', NS(a=False, b=False, c=True, x=True, y=True)), + ] + successes_when_not_required = [ + ('', NS(a=False, b=False, c=False, x=False, y=False)), + ('-x', NS(a=False, b=False, c=False, x=True, y=False)), + ('-y', NS(a=False, b=False, c=False, x=False, y=True)), + ] + + usage_when_required = usage_when_not_required = '''\ + usage: PROG [-h] [-x] [-a] [-b] [-y] [-c] + ''' + help = '''\ + + optional arguments: + -h, --help show this help message and exit + -x x help + -a a help + -b b help + -y y help + -c c help + ''' + + +class TestMutuallyExclusiveOptionalsAndPositionalsMixed(MEMixin, TestCase): + + def get_parser(self, required): + parser = ErrorRaisingArgumentParser(prog='PROG') + parser.add_argument('x', help='x help') + parser.add_argument('-y', action='store_true', help='y help') + group = parser.add_mutually_exclusive_group(required=required) + group.add_argument('a', nargs='?', help='a help') + group.add_argument('-b', action='store_true', help='b help') + group.add_argument('-c', action='store_true', help='c help') + return parser + + failures = ['X A -b', '-b -c', '-c X A'] + successes = [ + ('X A', NS(a='A', b=False, c=False, x='X', y=False)), + ('X -b', NS(a=None, b=True, c=False, x='X', y=False)), + ('X -c', NS(a=None, b=False, c=True, x='X', y=False)), + ('X A -y', NS(a='A', b=False, c=False, x='X', y=True)), + ('X -y -b', NS(a=None, b=True, c=False, x='X', y=True)), + ] + successes_when_not_required = [ + ('X', NS(a=None, b=False, c=False, x='X', y=False)), + ('X -y', NS(a=None, b=False, c=False, x='X', y=True)), + ] + + usage_when_required = usage_when_not_required = '''\ + usage: PROG [-h] [-y] [-b] [-c] x [a] + ''' + help = '''\ + + positional arguments: + x x help + a a help + + optional arguments: + -h, --help show this help message and exit + -y y help + -b b help + -c c help + ''' + +# ================================================= +# Mutually exclusive group in parent parser tests +# ================================================= + +class MEPBase(object): + + def get_parser(self, required=None): + parent = super(MEPBase, self).get_parser(required=required) + parser = ErrorRaisingArgumentParser( + prog=parent.prog, add_help=False, parents=[parent]) + return parser + + +class TestMutuallyExclusiveGroupErrorsParent( + MEPBase, TestMutuallyExclusiveGroupErrors): + pass + + +class TestMutuallyExclusiveSimpleParent( + MEPBase, TestMutuallyExclusiveSimple): + pass + + +class TestMutuallyExclusiveLongParent( + MEPBase, TestMutuallyExclusiveLong): + pass + + +class TestMutuallyExclusiveFirstSuppressedParent( + MEPBase, TestMutuallyExclusiveFirstSuppressed): + pass + + +class TestMutuallyExclusiveManySuppressedParent( + MEPBase, TestMutuallyExclusiveManySuppressed): + pass + + +class TestMutuallyExclusiveOptionalAndPositionalParent( + MEPBase, TestMutuallyExclusiveOptionalAndPositional): + pass + + +class TestMutuallyExclusiveOptionalsMixedParent( + MEPBase, TestMutuallyExclusiveOptionalsMixed): + pass + + +class TestMutuallyExclusiveOptionalsAndPositionalsMixedParent( + MEPBase, TestMutuallyExclusiveOptionalsAndPositionalsMixed): + pass + +# ================= +# Set default tests +# ================= + +class TestSetDefaults(TestCase): + + def test_set_defaults_no_args(self): + parser = ErrorRaisingArgumentParser() + parser.set_defaults(x='foo') + parser.set_defaults(y='bar', z=1) + self.assertEqual(NS(x='foo', y='bar', z=1), + parser.parse_args([])) + self.assertEqual(NS(x='foo', y='bar', z=1), + parser.parse_args([], NS())) + self.assertEqual(NS(x='baz', y='bar', z=1), + parser.parse_args([], NS(x='baz'))) + self.assertEqual(NS(x='baz', y='bar', z=2), + parser.parse_args([], NS(x='baz', z=2))) + + def test_set_defaults_with_args(self): + parser = ErrorRaisingArgumentParser() + parser.set_defaults(x='foo', y='bar') + parser.add_argument('-x', default='xfoox') + self.assertEqual(NS(x='xfoox', y='bar'), + parser.parse_args([])) + self.assertEqual(NS(x='xfoox', y='bar'), + parser.parse_args([], NS())) + self.assertEqual(NS(x='baz', y='bar'), + parser.parse_args([], NS(x='baz'))) + self.assertEqual(NS(x='1', y='bar'), + parser.parse_args('-x 1'.split())) + self.assertEqual(NS(x='1', y='bar'), + parser.parse_args('-x 1'.split(), NS())) + self.assertEqual(NS(x='1', y='bar'), + parser.parse_args('-x 1'.split(), NS(x='baz'))) + + def test_set_defaults_subparsers(self): + parser = ErrorRaisingArgumentParser() + parser.set_defaults(x='foo') + subparsers = parser.add_subparsers() + parser_a = subparsers.add_parser('a') + parser_a.set_defaults(y='bar') + self.assertEqual(NS(x='foo', y='bar'), + parser.parse_args('a'.split())) + + def test_set_defaults_parents(self): + parent = ErrorRaisingArgumentParser(add_help=False) + parent.set_defaults(x='foo') + parser = ErrorRaisingArgumentParser(parents=[parent]) + self.assertEqual(NS(x='foo'), parser.parse_args([])) + + def test_set_defaults_same_as_add_argument(self): + parser = ErrorRaisingArgumentParser() + parser.set_defaults(w='W', x='X', y='Y', z='Z') + parser.add_argument('-w') + parser.add_argument('-x', default='XX') + parser.add_argument('y', nargs='?') + parser.add_argument('z', nargs='?', default='ZZ') + + # defaults set previously + self.assertEqual(NS(w='W', x='XX', y='Y', z='ZZ'), + parser.parse_args([])) + + # reset defaults + parser.set_defaults(w='WW', x='X', y='YY', z='Z') + self.assertEqual(NS(w='WW', x='X', y='YY', z='Z'), + parser.parse_args([])) + + def test_set_defaults_same_as_add_argument_group(self): + parser = ErrorRaisingArgumentParser() + parser.set_defaults(w='W', x='X', y='Y', z='Z') + group = parser.add_argument_group('foo') + group.add_argument('-w') + group.add_argument('-x', default='XX') + group.add_argument('y', nargs='?') + group.add_argument('z', nargs='?', default='ZZ') + + + # defaults set previously + self.assertEqual(NS(w='W', x='XX', y='Y', z='ZZ'), + parser.parse_args([])) + + # reset defaults + parser.set_defaults(w='WW', x='X', y='YY', z='Z') + self.assertEqual(NS(w='WW', x='X', y='YY', z='Z'), + parser.parse_args([])) + +# ================= +# Get default tests +# ================= + +class TestGetDefault(TestCase): + + def test_get_default(self): + parser = ErrorRaisingArgumentParser() + self.assertEqual(None, parser.get_default("foo")) + self.assertEqual(None, parser.get_default("bar")) + + parser.add_argument("--foo") + self.assertEqual(None, parser.get_default("foo")) + self.assertEqual(None, parser.get_default("bar")) + + parser.add_argument("--bar", type=int, default=42) + self.assertEqual(None, parser.get_default("foo")) + self.assertEqual(42, parser.get_default("bar")) + + parser.set_defaults(foo="badger") + self.assertEqual("badger", parser.get_default("foo")) + self.assertEqual(42, parser.get_default("bar")) + +# ========================== +# Namespace 'contains' tests +# ========================== + +class TestNamespaceContainsSimple(TestCase): + + def test_empty(self): + ns = argparse.Namespace() + self.assertEquals('' in ns, False) + self.assertEquals('' not in ns, True) + self.assertEquals('x' in ns, False) + + def test_non_empty(self): + ns = argparse.Namespace(x=1, y=2) + self.assertEquals('x' in ns, True) + self.assertEquals('x' not in ns, False) + self.assertEquals('y' in ns, True) + self.assertEquals('' in ns, False) + self.assertEquals('xx' in ns, False) + self.assertEquals('z' in ns, False) + +# ===================== +# Help formatting tests +# ===================== + +class TestHelpFormattingMetaclass(type): + + def __init__(cls, name, bases, bodydict): + if name == 'HelpTestCase': + return + + class AddTests(object): + + def __init__(self, test_class, func_suffix, std_name): + self.func_suffix = func_suffix + self.std_name = std_name + + for test_func in [self.test_format, + self.test_print, + self.test_print_file]: + test_name = '%s_%s' % (test_func.__name__, func_suffix) + + def test_wrapper(self, test_func=test_func): + test_func(self) + try: + test_wrapper.__name__ = test_name + except TypeError: + pass + setattr(test_class, test_name, test_wrapper) + + def _get_parser(self, tester): + parser = argparse.ArgumentParser( + *tester.parser_signature.args, + **tester.parser_signature.kwargs) + for argument_sig in tester.argument_signatures: + parser.add_argument(*argument_sig.args, + **argument_sig.kwargs) + group_signatures = tester.argument_group_signatures + for group_sig, argument_sigs in group_signatures: + group = parser.add_argument_group(*group_sig.args, + **group_sig.kwargs) + for argument_sig in argument_sigs: + group.add_argument(*argument_sig.args, + **argument_sig.kwargs) + return parser + + def _test(self, tester, parser_text): + expected_text = getattr(tester, self.func_suffix) + expected_text = textwrap.dedent(expected_text) + if expected_text != parser_text: + print(repr(expected_text)) + print(repr(parser_text)) + for char1, char2 in zip(expected_text, parser_text): + if char1 != char2: + print('first diff: %r %r' % (char1, char2)) + break + tester.assertEqual(expected_text, parser_text) + + def test_format(self, tester): + parser = self._get_parser(tester) + format = getattr(parser, 'format_%s' % self.func_suffix) + self._test(tester, format()) + + def test_print(self, tester): + parser = self._get_parser(tester) + print_ = getattr(parser, 'print_%s' % self.func_suffix) + old_stream = getattr(sys, self.std_name) + setattr(sys, self.std_name, StringIO()) + try: + print_() + parser_text = getattr(sys, self.std_name).getvalue() + finally: + setattr(sys, self.std_name, old_stream) + self._test(tester, parser_text) + + def test_print_file(self, tester): + parser = self._get_parser(tester) + print_ = getattr(parser, 'print_%s' % self.func_suffix) + sfile = StringIO() + print_(sfile) + parser_text = sfile.getvalue() + self._test(tester, parser_text) + + # add tests for {format,print}_{usage,help,version} + for func_suffix, std_name in [('usage', 'stdout'), + ('help', 'stdout'), + ('version', 'stderr')]: + AddTests(cls, func_suffix, std_name) + +bases = TestCase, +HelpTestCase = TestHelpFormattingMetaclass('HelpTestCase', bases, {}) + + +class TestHelpBiggerOptionals(HelpTestCase): + """Make sure that argument help aligns when options are longer""" + + parser_signature = Sig(prog='PROG', description='DESCRIPTION', + epilog='EPILOG', version='0.1') + argument_signatures = [ + Sig('-x', action='store_true', help='X HELP'), + Sig('--y', help='Y HELP'), + Sig('foo', help='FOO HELP'), + Sig('bar', help='BAR HELP'), + ] + argument_group_signatures = [] + usage = '''\ + usage: PROG [-h] [-v] [-x] [--y Y] foo bar + ''' + help = usage + '''\ + + DESCRIPTION + + positional arguments: + foo FOO HELP + bar BAR HELP + + optional arguments: + -h, --help show this help message and exit + -v, --version show program's version number and exit + -x X HELP + --y Y Y HELP + + EPILOG + ''' + version = '''\ + 0.1 + ''' + + +class TestHelpBiggerOptionalGroups(HelpTestCase): + """Make sure that argument help aligns when options are longer""" + + parser_signature = Sig(prog='PROG', description='DESCRIPTION', + epilog='EPILOG', version='0.1') + argument_signatures = [ + Sig('-x', action='store_true', help='X HELP'), + Sig('--y', help='Y HELP'), + Sig('foo', help='FOO HELP'), + Sig('bar', help='BAR HELP'), + ] + argument_group_signatures = [ + (Sig('GROUP TITLE', description='GROUP DESCRIPTION'), [ + Sig('baz', help='BAZ HELP'), + Sig('-z', nargs='+', help='Z HELP')]), + ] + usage = '''\ + usage: PROG [-h] [-v] [-x] [--y Y] [-z Z [Z ...]] foo bar baz + ''' + help = usage + '''\ + + DESCRIPTION + + positional arguments: + foo FOO HELP + bar BAR HELP + + optional arguments: + -h, --help show this help message and exit + -v, --version show program's version number and exit + -x X HELP + --y Y Y HELP + + GROUP TITLE: + GROUP DESCRIPTION + + baz BAZ HELP + -z Z [Z ...] Z HELP + + EPILOG + ''' + version = '''\ + 0.1 + ''' + + +class TestHelpBiggerPositionals(HelpTestCase): + """Make sure that help aligns when arguments are longer""" + + parser_signature = Sig(usage='USAGE', description='DESCRIPTION') + argument_signatures = [ + Sig('-x', action='store_true', help='X HELP'), + Sig('--y', help='Y HELP'), + Sig('ekiekiekifekang', help='EKI HELP'), + Sig('bar', help='BAR HELP'), + ] + argument_group_signatures = [] + usage = '''\ + usage: USAGE + ''' + help = usage + '''\ + + DESCRIPTION + + positional arguments: + ekiekiekifekang EKI HELP + bar BAR HELP + + optional arguments: + -h, --help show this help message and exit + -x X HELP + --y Y Y HELP + ''' + + version = '' + + +class TestHelpReformatting(HelpTestCase): + """Make sure that text after short names starts on the first line""" + + parser_signature = Sig( + prog='PROG', + description=' oddly formatted\n' + 'description\n' + '\n' + 'that is so long that it should go onto multiple ' + 'lines when wrapped') + argument_signatures = [ + Sig('-x', metavar='XX', help='oddly\n' + ' formatted -x help'), + Sig('y', metavar='yyy', help='normal y help'), + ] + argument_group_signatures = [ + (Sig('title', description='\n' + ' oddly formatted group\n' + '\n' + 'description'), + [Sig('-a', action='store_true', + help=' oddly \n' + 'formatted -a help \n' + ' again, so long that it should be wrapped over ' + 'multiple lines')]), + ] + usage = '''\ + usage: PROG [-h] [-x XX] [-a] yyy + ''' + help = usage + '''\ + + oddly formatted description that is so long that it should go onto \ +multiple + lines when wrapped + + positional arguments: + yyy normal y help + + optional arguments: + -h, --help show this help message and exit + -x XX oddly formatted -x help + + title: + oddly formatted group description + + -a oddly formatted -a help again, so long that it should \ +be wrapped + over multiple lines + ''' + version = '' + + +class TestHelpWrappingShortNames(HelpTestCase): + """Make sure that text after short names starts on the first line""" + + parser_signature = Sig(prog='PROG', description= 'D\nD' * 30) + argument_signatures = [ + Sig('-x', metavar='XX', help='XHH HX' * 20), + Sig('y', metavar='yyy', help='YH YH' * 20), + ] + argument_group_signatures = [ + (Sig('ALPHAS'), [ + Sig('-a', action='store_true', help='AHHH HHA' * 10)]), + ] + usage = '''\ + usage: PROG [-h] [-x XX] [-a] yyy + ''' + help = usage + '''\ + + D DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD \ +DD DD DD + DD DD DD DD D + + positional arguments: + yyy YH YHYH YHYH YHYH YHYH YHYH YHYH YHYH YHYH YHYH YHYH \ +YHYH YHYH + YHYH YHYH YHYH YHYH YHYH YHYH YHYH YH + + optional arguments: + -h, --help show this help message and exit + -x XX XHH HXXHH HXXHH HXXHH HXXHH HXXHH HXXHH HXXHH HXXHH \ +HXXHH HXXHH + HXXHH HXXHH HXXHH HXXHH HXXHH HXXHH HXXHH HXXHH HXXHH HX + + ALPHAS: + -a AHHH HHAAHHH HHAAHHH HHAAHHH HHAAHHH HHAAHHH HHAAHHH \ +HHAAHHH + HHAAHHH HHAAHHH HHA + ''' + version = '' + + +class TestHelpWrappingLongNames(HelpTestCase): + """Make sure that text after long names starts on the next line""" + + parser_signature = Sig(usage='USAGE', description= 'D D' * 30, + version='V V'*30) + argument_signatures = [ + Sig('-x', metavar='X' * 25, help='XH XH' * 20), + Sig('y', metavar='y' * 25, help='YH YH' * 20), + ] + argument_group_signatures = [ + (Sig('ALPHAS'), [ + Sig('-a', metavar='A' * 25, help='AH AH' * 20), + Sig('z', metavar='z' * 25, help='ZH ZH' * 20)]), + ] + usage = '''\ + usage: USAGE + ''' + help = usage + '''\ + + D DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD \ +DD DD DD + DD DD DD DD D + + positional arguments: + yyyyyyyyyyyyyyyyyyyyyyyyy + YH YHYH YHYH YHYH YHYH YHYH YHYH YHYH YHYH \ +YHYH YHYH + YHYH YHYH YHYH YHYH YHYH YHYH YHYH YHYH YHYH YH + + optional arguments: + -h, --help show this help message and exit + -v, --version show program's version number and exit + -x XXXXXXXXXXXXXXXXXXXXXXXXX + XH XHXH XHXH XHXH XHXH XHXH XHXH XHXH XHXH \ +XHXH XHXH + XHXH XHXH XHXH XHXH XHXH XHXH XHXH XHXH XHXH XH + + ALPHAS: + -a AAAAAAAAAAAAAAAAAAAAAAAAA + AH AHAH AHAH AHAH AHAH AHAH AHAH AHAH AHAH \ +AHAH AHAH + AHAH AHAH AHAH AHAH AHAH AHAH AHAH AHAH AHAH AH + zzzzzzzzzzzzzzzzzzzzzzzzz + ZH ZHZH ZHZH ZHZH ZHZH ZHZH ZHZH ZHZH ZHZH \ +ZHZH ZHZH + ZHZH ZHZH ZHZH ZHZH ZHZH ZHZH ZHZH ZHZH ZHZH ZH + ''' + version = '''\ + V VV VV VV VV VV VV VV VV VV VV VV VV VV VV VV VV VV VV VV VV VV VV \ +VV VV VV + VV VV VV VV V + ''' + + +class TestHelpUsage(HelpTestCase): + """Test basic usage messages""" + + parser_signature = Sig(prog='PROG') + argument_signatures = [ + Sig('-w', nargs='+', help='w'), + Sig('-x', nargs='*', help='x'), + Sig('a', help='a'), + Sig('b', help='b', nargs=2), + Sig('c', help='c', nargs='?'), + ] + argument_group_signatures = [ + (Sig('group'), [ + Sig('-y', nargs='?', help='y'), + Sig('-z', nargs=3, help='z'), + Sig('d', help='d', nargs='*'), + Sig('e', help='e', nargs='+'), + ]) + ] + usage = '''\ + usage: PROG [-h] [-w W [W ...]] [-x [X [X ...]]] [-y [Y]] [-z Z Z Z] + a b b [c] [d [d ...]] e [e ...] + ''' + help = usage + '''\ + + positional arguments: + a a + b b + c c + + optional arguments: + -h, --help show this help message and exit + -w W [W ...] w + -x [X [X ...]] x + + group: + -y [Y] y + -z Z Z Z z + d d + e e + ''' + version = '' + + +class TestHelpOnlyUserGroups(HelpTestCase): + """Test basic usage messages""" + + parser_signature = Sig(prog='PROG', add_help=False) + argument_signatures = [] + argument_group_signatures = [ + (Sig('xxxx'), [ + Sig('-x', help='x'), + Sig('a', help='a'), + ]), + (Sig('yyyy'), [ + Sig('b', help='b'), + Sig('-y', help='y'), + ]), + ] + usage = '''\ + usage: PROG [-x X] [-y Y] a b + ''' + help = usage + '''\ + + xxxx: + -x X x + a a + + yyyy: + b b + -y Y y + ''' + version = '' + + +class TestHelpUsageLongProg(HelpTestCase): + """Test usage messages where the prog is long""" + + parser_signature = Sig(prog='P' * 60) + argument_signatures = [ + Sig('-w', metavar='W'), + Sig('-x', metavar='X'), + Sig('a'), + Sig('b'), + ] + argument_group_signatures = [] + usage = '''\ + usage: PPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPP + [-h] [-w W] [-x X] a b + ''' + help = usage + '''\ + + positional arguments: + a + b + + optional arguments: + -h, --help show this help message and exit + -w W + -x X + ''' + version = '' + + +class TestHelpUsageLongProgOptionsWrap(HelpTestCase): + """Test usage messages where the prog is long and the optionals wrap""" + + parser_signature = Sig(prog='P' * 60) + argument_signatures = [ + Sig('-w', metavar='W' * 25), + Sig('-x', metavar='X' * 25), + Sig('-y', metavar='Y' * 25), + Sig('-z', metavar='Z' * 25), + Sig('a'), + Sig('b'), + ] + argument_group_signatures = [] + usage = '''\ + usage: PPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPP + [-h] [-w WWWWWWWWWWWWWWWWWWWWWWWWW] \ +[-x XXXXXXXXXXXXXXXXXXXXXXXXX] + [-y YYYYYYYYYYYYYYYYYYYYYYYYY] [-z ZZZZZZZZZZZZZZZZZZZZZZZZZ] + a b + ''' + help = usage + '''\ + + positional arguments: + a + b + + optional arguments: + -h, --help show this help message and exit + -w WWWWWWWWWWWWWWWWWWWWWWWWW + -x XXXXXXXXXXXXXXXXXXXXXXXXX + -y YYYYYYYYYYYYYYYYYYYYYYYYY + -z ZZZZZZZZZZZZZZZZZZZZZZZZZ + ''' + version = '' + + +class TestHelpUsageLongProgPositionalsWrap(HelpTestCase): + """Test usage messages where the prog is long and the positionals wrap""" + + parser_signature = Sig(prog='P' * 60, add_help=False) + argument_signatures = [ + Sig('a' * 25), + Sig('b' * 25), + Sig('c' * 25), + ] + argument_group_signatures = [] + usage = '''\ + usage: PPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPP + aaaaaaaaaaaaaaaaaaaaaaaaa bbbbbbbbbbbbbbbbbbbbbbbbb + ccccccccccccccccccccccccc + ''' + help = usage + '''\ + + positional arguments: + aaaaaaaaaaaaaaaaaaaaaaaaa + bbbbbbbbbbbbbbbbbbbbbbbbb + ccccccccccccccccccccccccc + ''' + version = '' + + +class TestHelpUsageOptionalsWrap(HelpTestCase): + """Test usage messages where the optionals wrap""" + + parser_signature = Sig(prog='PROG') + argument_signatures = [ + Sig('-w', metavar='W' * 25), + Sig('-x', metavar='X' * 25), + Sig('-y', metavar='Y' * 25), + Sig('-z', metavar='Z' * 25), + Sig('a'), + Sig('b'), + Sig('c'), + ] + argument_group_signatures = [] + usage = '''\ + usage: PROG [-h] [-w WWWWWWWWWWWWWWWWWWWWWWWWW] \ +[-x XXXXXXXXXXXXXXXXXXXXXXXXX] + [-y YYYYYYYYYYYYYYYYYYYYYYYYY] \ +[-z ZZZZZZZZZZZZZZZZZZZZZZZZZ] + a b c + ''' + help = usage + '''\ + + positional arguments: + a + b + c + + optional arguments: + -h, --help show this help message and exit + -w WWWWWWWWWWWWWWWWWWWWWWWWW + -x XXXXXXXXXXXXXXXXXXXXXXXXX + -y YYYYYYYYYYYYYYYYYYYYYYYYY + -z ZZZZZZZZZZZZZZZZZZZZZZZZZ + ''' + version = '' + + +class TestHelpUsagePositionalsWrap(HelpTestCase): + """Test usage messages where the positionals wrap""" + + parser_signature = Sig(prog='PROG') + argument_signatures = [ + Sig('-x'), + Sig('-y'), + Sig('-z'), + Sig('a' * 25), + Sig('b' * 25), + Sig('c' * 25), + ] + argument_group_signatures = [] + usage = '''\ + usage: PROG [-h] [-x X] [-y Y] [-z Z] + aaaaaaaaaaaaaaaaaaaaaaaaa bbbbbbbbbbbbbbbbbbbbbbbbb + ccccccccccccccccccccccccc + ''' + help = usage + '''\ + + positional arguments: + aaaaaaaaaaaaaaaaaaaaaaaaa + bbbbbbbbbbbbbbbbbbbbbbbbb + ccccccccccccccccccccccccc + + optional arguments: + -h, --help show this help message and exit + -x X + -y Y + -z Z + ''' + version = '' + + +class TestHelpUsageOptionalsPositionalsWrap(HelpTestCase): + """Test usage messages where the optionals and positionals wrap""" + + parser_signature = Sig(prog='PROG') + argument_signatures = [ + Sig('-x', metavar='X' * 25), + Sig('-y', metavar='Y' * 25), + Sig('-z', metavar='Z' * 25), + Sig('a' * 25), + Sig('b' * 25), + Sig('c' * 25), + ] + argument_group_signatures = [] + usage = '''\ + usage: PROG [-h] [-x XXXXXXXXXXXXXXXXXXXXXXXXX] \ +[-y YYYYYYYYYYYYYYYYYYYYYYYYY] + [-z ZZZZZZZZZZZZZZZZZZZZZZZZZ] + aaaaaaaaaaaaaaaaaaaaaaaaa bbbbbbbbbbbbbbbbbbbbbbbbb + ccccccccccccccccccccccccc + ''' + help = usage + '''\ + + positional arguments: + aaaaaaaaaaaaaaaaaaaaaaaaa + bbbbbbbbbbbbbbbbbbbbbbbbb + ccccccccccccccccccccccccc + + optional arguments: + -h, --help show this help message and exit + -x XXXXXXXXXXXXXXXXXXXXXXXXX + -y YYYYYYYYYYYYYYYYYYYYYYYYY + -z ZZZZZZZZZZZZZZZZZZZZZZZZZ + ''' + version = '' + + +class TestHelpUsageOptionalsOnlyWrap(HelpTestCase): + """Test usage messages where there are only optionals and they wrap""" + + parser_signature = Sig(prog='PROG') + argument_signatures = [ + Sig('-x', metavar='X' * 25), + Sig('-y', metavar='Y' * 25), + Sig('-z', metavar='Z' * 25), + ] + argument_group_signatures = [] + usage = '''\ + usage: PROG [-h] [-x XXXXXXXXXXXXXXXXXXXXXXXXX] \ +[-y YYYYYYYYYYYYYYYYYYYYYYYYY] + [-z ZZZZZZZZZZZZZZZZZZZZZZZZZ] + ''' + help = usage + '''\ + + optional arguments: + -h, --help show this help message and exit + -x XXXXXXXXXXXXXXXXXXXXXXXXX + -y YYYYYYYYYYYYYYYYYYYYYYYYY + -z ZZZZZZZZZZZZZZZZZZZZZZZZZ + ''' + version = '' + + +class TestHelpUsagePositionalsOnlyWrap(HelpTestCase): + """Test usage messages where there are only positionals and they wrap""" + + parser_signature = Sig(prog='PROG', add_help=False) + argument_signatures = [ + Sig('a' * 25), + Sig('b' * 25), + Sig('c' * 25), + ] + argument_group_signatures = [] + usage = '''\ + usage: PROG aaaaaaaaaaaaaaaaaaaaaaaaa bbbbbbbbbbbbbbbbbbbbbbbbb + ccccccccccccccccccccccccc + ''' + help = usage + '''\ + + positional arguments: + aaaaaaaaaaaaaaaaaaaaaaaaa + bbbbbbbbbbbbbbbbbbbbbbbbb + ccccccccccccccccccccccccc + ''' + version = '' + + +class TestHelpVariableExpansion(HelpTestCase): + """Test that variables are expanded properly in help messages""" + + parser_signature = Sig(prog='PROG') + argument_signatures = [ + Sig('-x', type=int, + help='x %(prog)s %(default)s %(type)s %%'), + Sig('-y', action='store_const', default=42, const='XXX', + help='y %(prog)s %(default)s %(const)s'), + Sig('--foo', choices='abc', + help='foo %(prog)s %(default)s %(choices)s'), + Sig('--bar', default='baz', choices=[1, 2], metavar='BBB', + help='bar %(prog)s %(default)s %(dest)s'), + Sig('spam', help='spam %(prog)s %(default)s'), + Sig('badger', default=0.5, help='badger %(prog)s %(default)s'), + ] + argument_group_signatures = [ + (Sig('group'), [ + Sig('-a', help='a %(prog)s %(default)s'), + Sig('-b', default=-1, help='b %(prog)s %(default)s'), + ]) + ] + usage = ('''\ + usage: PROG [-h] [-x X] [-y] [--foo {a,b,c}] [--bar BBB] [-a A] [-b B] + spam badger + ''') + help = usage + '''\ + + positional arguments: + spam spam PROG None + badger badger PROG 0.5 + + optional arguments: + -h, --help show this help message and exit + -x X x PROG None int % + -y y PROG 42 XXX + --foo {a,b,c} foo PROG None a, b, c + --bar BBB bar PROG baz bar + + group: + -a A a PROG None + -b B b PROG -1 + ''' + version = '' + + +class TestHelpVariableExpansionUsageSupplied(HelpTestCase): + """Test that variables are expanded properly when usage= is present""" + + parser_signature = Sig(prog='PROG', usage='%(prog)s FOO') + argument_signatures = [] + argument_group_signatures = [] + usage = ('''\ + usage: PROG FOO + ''') + help = usage + '''\ + + optional arguments: + -h, --help show this help message and exit + ''' + version = '' + + +class TestHelpVariableExpansionNoArguments(HelpTestCase): + """Test that variables are expanded properly with no arguments""" + + parser_signature = Sig(prog='PROG', add_help=False) + argument_signatures = [] + argument_group_signatures = [] + usage = ('''\ + usage: PROG + ''') + help = usage + version = '' + + +class TestHelpSuppressUsage(HelpTestCase): + """Test that items can be suppressed in usage messages""" + + parser_signature = Sig(prog='PROG', usage=argparse.SUPPRESS) + argument_signatures = [ + Sig('--foo', help='foo help'), + Sig('spam', help='spam help'), + ] + argument_group_signatures = [] + help = '''\ + positional arguments: + spam spam help + + optional arguments: + -h, --help show this help message and exit + --foo FOO foo help + ''' + usage = '' + version = '' + + +class TestHelpSuppressOptional(HelpTestCase): + """Test that optional arguments can be suppressed in help messages""" + + parser_signature = Sig(prog='PROG', add_help=False) + argument_signatures = [ + Sig('--foo', help=argparse.SUPPRESS), + Sig('spam', help='spam help'), + ] + argument_group_signatures = [] + usage = '''\ + usage: PROG spam + ''' + help = usage + '''\ + + positional arguments: + spam spam help + ''' + version = '' + + +class TestHelpSuppressOptionalGroup(HelpTestCase): + """Test that optional groups can be suppressed in help messages""" + + parser_signature = Sig(prog='PROG') + argument_signatures = [ + Sig('--foo', help='foo help'), + Sig('spam', help='spam help'), + ] + argument_group_signatures = [ + (Sig('group'), [Sig('--bar', help=argparse.SUPPRESS)]), + ] + usage = '''\ + usage: PROG [-h] [--foo FOO] spam + ''' + help = usage + '''\ + + positional arguments: + spam spam help + + optional arguments: + -h, --help show this help message and exit + --foo FOO foo help + ''' + version = '' + + +class TestHelpSuppressPositional(HelpTestCase): + """Test that positional arguments can be suppressed in help messages""" + + parser_signature = Sig(prog='PROG') + argument_signatures = [ + Sig('--foo', help='foo help'), + Sig('spam', help=argparse.SUPPRESS), + ] + argument_group_signatures = [] + usage = '''\ + usage: PROG [-h] [--foo FOO] + ''' + help = usage + '''\ + + optional arguments: + -h, --help show this help message and exit + --foo FOO foo help + ''' + version = '' + + +class TestHelpRequiredOptional(HelpTestCase): + """Test that required options don't look optional""" + + parser_signature = Sig(prog='PROG') + argument_signatures = [ + Sig('--foo', required=True, help='foo help'), + ] + argument_group_signatures = [] + usage = '''\ + usage: PROG [-h] --foo FOO + ''' + help = usage + '''\ + + optional arguments: + -h, --help show this help message and exit + --foo FOO foo help + ''' + version = '' + + +class TestHelpAlternatePrefixChars(HelpTestCase): + """Test that options display with different prefix characters""" + + parser_signature = Sig(prog='PROG', prefix_chars='^;', add_help=False) + argument_signatures = [ + Sig('^^foo', action='store_true', help='foo help'), + Sig(';b', ';;bar', help='bar help'), + ] + argument_group_signatures = [] + usage = '''\ + usage: PROG [^^foo] [;b BAR] + ''' + help = usage + '''\ + + optional arguments: + ^^foo foo help + ;b BAR, ;;bar BAR bar help + ''' + version = '' + + +class TestHelpNoHelpOptional(HelpTestCase): + """Test that the --help argument can be suppressed help messages""" + + parser_signature = Sig(prog='PROG', add_help=False) + argument_signatures = [ + Sig('--foo', help='foo help'), + Sig('spam', help='spam help'), + ] + argument_group_signatures = [] + usage = '''\ + usage: PROG [--foo FOO] spam + ''' + help = usage + '''\ + + positional arguments: + spam spam help + + optional arguments: + --foo FOO foo help + ''' + version = '' + + +class TestHelpVersionOptional(HelpTestCase): + """Test that the --version argument can be suppressed help messages""" + + parser_signature = Sig(prog='PROG', version='1.0') + argument_signatures = [ + Sig('--foo', help='foo help'), + Sig('spam', help='spam help'), + ] + argument_group_signatures = [] + usage = '''\ + usage: PROG [-h] [-v] [--foo FOO] spam + ''' + help = usage + '''\ + + positional arguments: + spam spam help + + optional arguments: + -h, --help show this help message and exit + -v, --version show program's version number and exit + --foo FOO foo help + ''' + version = '''\ + 1.0 + ''' + + +class TestHelpNone(HelpTestCase): + """Test that no errors occur if no help is specified""" + + parser_signature = Sig(prog='PROG') + argument_signatures = [ + Sig('--foo'), + Sig('spam'), + ] + argument_group_signatures = [] + usage = '''\ + usage: PROG [-h] [--foo FOO] spam + ''' + help = usage + '''\ + + positional arguments: + spam + + optional arguments: + -h, --help show this help message and exit + --foo FOO + ''' + version = '' + + +class TestHelpTupleMetavar(HelpTestCase): + """Test specifying metavar as a tuple""" + + parser_signature = Sig(prog='PROG') + argument_signatures = [ + Sig('-w', help='w', nargs='+', metavar=('W1', 'W2')), + Sig('-x', help='x', nargs='*', metavar=('X1', 'X2')), + Sig('-y', help='y', nargs=3, metavar=('Y1', 'Y2', 'Y3')), + Sig('-z', help='z', nargs='?', metavar=('Z1', )), + ] + argument_group_signatures = [] + usage = '''\ + usage: PROG [-h] [-w W1 [W2 ...]] [-x [X1 [X2 ...]]] [-y Y1 Y2 Y3] \ +[-z [Z1]] + ''' + help = usage + '''\ + + optional arguments: + -h, --help show this help message and exit + -w W1 [W2 ...] w + -x [X1 [X2 ...]] x + -y Y1 Y2 Y3 y + -z [Z1] z + ''' + version = '' + + +class TestHelpRawText(HelpTestCase): + """Test the RawTextHelpFormatter""" + + parser_signature = Sig( + prog='PROG', formatter_class=argparse.RawTextHelpFormatter, + description='Keep the formatting\n' + ' exactly as it is written\n' + '\n' + 'here\n') + + argument_signatures = [ + Sig('--foo', help=' foo help should also\n' + 'appear as given here'), + Sig('spam', help='spam help'), + ] + argument_group_signatures = [ + (Sig('title', description=' This text\n' + ' should be indented\n' + ' exactly like it is here\n'), + [Sig('--bar', help='bar help')]), + ] + usage = '''\ + usage: PROG [-h] [--foo FOO] [--bar BAR] spam + ''' + help = usage + '''\ + + Keep the formatting + exactly as it is written + + here + + positional arguments: + spam spam help + + optional arguments: + -h, --help show this help message and exit + --foo FOO foo help should also + appear as given here + + title: + This text + should be indented + exactly like it is here + + --bar BAR bar help + ''' + version = '' + + +class TestHelpRawDescription(HelpTestCase): + """Test the RawTextHelpFormatter""" + + parser_signature = Sig( + prog='PROG', formatter_class=argparse.RawDescriptionHelpFormatter, + description='Keep the formatting\n' + ' exactly as it is written\n' + '\n' + 'here\n') + + argument_signatures = [ + Sig('--foo', help=' foo help should not\n' + ' retain this odd formatting'), + Sig('spam', help='spam help'), + ] + argument_group_signatures = [ + (Sig('title', description=' This text\n' + ' should be indented\n' + ' exactly like it is here\n'), + [Sig('--bar', help='bar help')]), + ] + usage = '''\ + usage: PROG [-h] [--foo FOO] [--bar BAR] spam + ''' + help = usage + '''\ + + Keep the formatting + exactly as it is written + + here + + positional arguments: + spam spam help + + optional arguments: + -h, --help show this help message and exit + --foo FOO foo help should not retain this odd formatting + + title: + This text + should be indented + exactly like it is here + + --bar BAR bar help + ''' + version = '' + + +class TestHelpArgumentDefaults(HelpTestCase): + """Test the ArgumentDefaultsHelpFormatter""" + + parser_signature = Sig( + prog='PROG', formatter_class=argparse.ArgumentDefaultsHelpFormatter, + description='description') + + argument_signatures = [ + Sig('--foo', help='foo help - oh and by the way, %(default)s'), + Sig('--bar', action='store_true', help='bar help'), + Sig('spam', help='spam help'), + Sig('badger', nargs='?', default='wooden', help='badger help'), + ] + argument_group_signatures = [ + (Sig('title', description='description'), + [Sig('--baz', type=int, default=42, help='baz help')]), + ] + usage = '''\ + usage: PROG [-h] [--foo FOO] [--bar] [--baz BAZ] spam [badger] + ''' + help = usage + '''\ + + description + + positional arguments: + spam spam help + badger badger help (default: wooden) + + optional arguments: + -h, --help show this help message and exit + --foo FOO foo help - oh and by the way, None + --bar bar help (default: False) + + title: + description + + --baz BAZ baz help (default: 42) + ''' + version = '' + +# ===================================== +# Optional/Positional constructor tests +# ===================================== + +class TestInvalidArgumentConstructors(TestCase): + """Test a bunch of invalid Argument constructors""" + + def assertTypeError(self, *args, **kwargs): + parser = argparse.ArgumentParser() + self.assertRaises(TypeError, parser.add_argument, + *args, **kwargs) + + def assertValueError(self, *args, **kwargs): + parser = argparse.ArgumentParser() + self.assertRaises(ValueError, parser.add_argument, + *args, **kwargs) + + def test_invalid_keyword_arguments(self): + self.assertTypeError('-x', bar=None) + self.assertTypeError('-y', callback='foo') + self.assertTypeError('-y', callback_args=()) + self.assertTypeError('-y', callback_kwargs={}) + + def test_missing_destination(self): + self.assertTypeError() + for action in ['append', 'store']: + self.assertTypeError(action=action) + + def test_invalid_option_strings(self): + self.assertValueError('--') + self.assertValueError('---') + + def test_invalid_type(self): + self.assertValueError('--foo', type='int') + + def test_invalid_action(self): + self.assertValueError('-x', action='foo') + self.assertValueError('foo', action='baz') + parser = argparse.ArgumentParser() + try: + parser.add_argument("--foo", action="store-true") + except ValueError: + e = sys.exc_info()[1] + expected = 'unknown action' + msg = 'expected %r, found %r' % (expected, e) + self.failUnless(expected in str(e), msg) + + def test_multiple_dest(self): + parser = argparse.ArgumentParser() + parser.add_argument(dest='foo') + try: + parser.add_argument('bar', dest='baz') + except ValueError: + e = sys.exc_info()[1] + expected = 'dest supplied twice for positional argument' + msg = 'expected %r, found %r' % (expected, e) + self.failUnless(expected in str(e), msg) + + def test_no_argument_actions(self): + for action in ['store_const', 'store_true', 'store_false', + 'append_const', 'count']: + for attrs in [dict(type=int), dict(nargs='+'), + dict(choices='ab')]: + self.assertTypeError('-x', action=action, **attrs) + + def test_no_argument_no_const_actions(self): + # options with zero arguments + for action in ['store_true', 'store_false', 'count']: + + # const is always disallowed + self.assertTypeError('-x', const='foo', action=action) + + # nargs is always disallowed + self.assertTypeError('-x', nargs='*', action=action) + + def test_more_than_one_argument_actions(self): + for action in ['store', 'append']: + + # nargs=0 is disallowed + self.assertValueError('-x', nargs=0, action=action) + self.assertValueError('spam', nargs=0, action=action) + + # const is disallowed with non-optional arguments + for nargs in [1, '*', '+']: + self.assertValueError('-x', const='foo', + nargs=nargs, action=action) + self.assertValueError('spam', const='foo', + nargs=nargs, action=action) + + def test_required_const_actions(self): + for action in ['store_const', 'append_const']: + + # nargs is always disallowed + self.assertTypeError('-x', nargs='+', action=action) + + def test_parsers_action_missing_params(self): + self.assertTypeError('command', action='parsers') + self.assertTypeError('command', action='parsers', prog='PROG') + self.assertTypeError('command', action='parsers', + parser_class=argparse.ArgumentParser) + + def test_required_positional(self): + self.assertTypeError('foo', required=True) + + def test_user_defined_action(self): + + class Success(Exception): + pass + + class Action(object): + + def __init__(self, + option_strings, + dest, + const, + default, + required=False): + if dest == 'spam': + if const is Success: + if default is Success: + raise Success() + + def __call__(self, *args, **kwargs): + pass + + parser = argparse.ArgumentParser() + self.assertRaises(Success, parser.add_argument, '--spam', + action=Action, default=Success, const=Success) + self.assertRaises(Success, parser.add_argument, 'spam', + action=Action, default=Success, const=Success) + +# ================================ +# Actions returned by add_argument +# ================================ + +class TestActionsReturned(TestCase): + + def test_dest(self): + parser = argparse.ArgumentParser() + action = parser.add_argument('--foo') + self.assertEqual(action.dest, 'foo') + action = parser.add_argument('-b', '--bar') + self.assertEqual(action.dest, 'bar') + action = parser.add_argument('-x', '-y') + self.assertEqual(action.dest, 'x') + + def test_misc(self): + parser = argparse.ArgumentParser() + action = parser.add_argument('--foo', nargs='?', const=42, + default=84, type=int, choices=[1, 2], + help='FOO', metavar='BAR', dest='baz') + self.assertEqual(action.nargs, '?') + self.assertEqual(action.const, 42) + self.assertEqual(action.default, 84) + self.assertEqual(action.type, int) + self.assertEqual(action.choices, [1, 2]) + self.assertEqual(action.help, 'FOO') + self.assertEqual(action.metavar, 'BAR') + self.assertEqual(action.dest, 'baz') + + +# ================================ +# Argument conflict handling tests +# ================================ + +class TestConflictHandling(TestCase): + + def test_bad_type(self): + self.assertRaises(ValueError, argparse.ArgumentParser, + conflict_handler='foo') + + def test_conflict_error(self): + parser = argparse.ArgumentParser() + parser.add_argument('-x') + self.assertRaises(argparse.ArgumentError, + parser.add_argument, '-x') + parser.add_argument('--spam') + self.assertRaises(argparse.ArgumentError, + parser.add_argument, '--spam') + + def test_resolve_error(self): + get_parser = argparse.ArgumentParser + parser = get_parser(prog='PROG', conflict_handler='resolve') + + parser.add_argument('-x', help='OLD X') + parser.add_argument('-x', help='NEW X') + self.assertEqual(parser.format_help(), textwrap.dedent('''\ + usage: PROG [-h] [-x X] + + optional arguments: + -h, --help show this help message and exit + -x X NEW X + ''')) + + parser.add_argument('--spam', metavar='OLD_SPAM') + parser.add_argument('--spam', metavar='NEW_SPAM') + self.assertEqual(parser.format_help(), textwrap.dedent('''\ + usage: PROG [-h] [-x X] [--spam NEW_SPAM] + + optional arguments: + -h, --help show this help message and exit + -x X NEW X + --spam NEW_SPAM + ''')) + + +# ============================= +# Help and Version option tests +# ============================= + +class TestOptionalsHelpVersionActions(TestCase): + """Test the help and version actions""" + + def _get_error(self, func, *args, **kwargs): + try: + func(*args, **kwargs) + except ArgumentParserError: + return sys.exc_info()[1] + else: + self.assertRaises(ArgumentParserError, func, *args, **kwargs) + + def assertPrintHelpExit(self, parser, args_str): + self.assertEqual( + parser.format_help(), + self._get_error(parser.parse_args, args_str.split()).stdout) + + def assertPrintVersionExit(self, parser, args_str): + self.assertEqual( + parser.format_version(), + self._get_error(parser.parse_args, args_str.split()).stderr) + + def assertArgumentParserError(self, parser, *args): + self.assertRaises(ArgumentParserError, parser.parse_args, args) + + def test_version(self): + parser = ErrorRaisingArgumentParser(version='1.0') + self.assertPrintHelpExit(parser, '-h') + self.assertPrintHelpExit(parser, '--help') + self.assertPrintVersionExit(parser, '-v') + self.assertPrintVersionExit(parser, '--version') + + def test_version_format(self): + parser = ErrorRaisingArgumentParser(prog='PPP', version='%(prog)s 3.5') + msg = self._get_error(parser.parse_args, ['-v']).stderr + self.assertEqual('PPP 3.5\n', msg) + + def test_version_no_help(self): + parser = ErrorRaisingArgumentParser(add_help=False, version='1.0') + self.assertArgumentParserError(parser, '-h') + self.assertArgumentParserError(parser, '--help') + self.assertPrintVersionExit(parser, '-v') + self.assertPrintVersionExit(parser, '--version') + + def test_version_action(self): + parser = ErrorRaisingArgumentParser(prog='XXX') + parser.add_argument('-V', action='version', version='%(prog)s 3.7') + msg = self._get_error(parser.parse_args, ['-V']).stderr + self.assertEqual('XXX 3.7\n', msg) + + def test_no_help(self): + parser = ErrorRaisingArgumentParser(add_help=False) + self.assertArgumentParserError(parser, '-h') + self.assertArgumentParserError(parser, '--help') + self.assertArgumentParserError(parser, '-v') + self.assertArgumentParserError(parser, '--version') + + def test_alternate_help_version(self): + parser = ErrorRaisingArgumentParser() + parser.add_argument('-x', action='help') + parser.add_argument('-y', action='version') + self.assertPrintHelpExit(parser, '-x') + self.assertPrintVersionExit(parser, '-y') + self.assertArgumentParserError(parser, '-v') + self.assertArgumentParserError(parser, '--version') + + def test_help_version_extra_arguments(self): + parser = ErrorRaisingArgumentParser(version='1.0') + parser.add_argument('-x', action='store_true') + parser.add_argument('y') + + # try all combinations of valid prefixes and suffixes + valid_prefixes = ['', '-x', 'foo', '-x bar', 'baz -x'] + valid_suffixes = valid_prefixes + ['--bad-option', 'foo bar baz'] + for prefix in valid_prefixes: + for suffix in valid_suffixes: + format = '%s %%s %s' % (prefix, suffix) + self.assertPrintHelpExit(parser, format % '-h') + self.assertPrintHelpExit(parser, format % '--help') + self.assertPrintVersionExit(parser, format % '-v') + self.assertPrintVersionExit(parser, format % '--version') + + +# ====================== +# str() and repr() tests +# ====================== + +class TestStrings(TestCase): + """Test str() and repr() on Optionals and Positionals""" + + def assertStringEqual(self, obj, result_string): + for func in [str, repr]: + self.assertEqual(func(obj), result_string) + + def test_optional(self): + option = argparse.Action( + option_strings=['--foo', '-a', '-b'], + dest='b', + type='int', + nargs='+', + default=42, + choices=[1, 2, 3], + help='HELP', + metavar='METAVAR') + string = ( + "Action(option_strings=['--foo', '-a', '-b'], dest='b', " + "nargs='+', const=None, default=42, type='int', " + "choices=[1, 2, 3], help='HELP', metavar='METAVAR')") + self.assertStringEqual(option, string) + + def test_argument(self): + argument = argparse.Action( + option_strings=[], + dest='x', + type=float, + nargs='?', + default=2.5, + choices=[0.5, 1.5, 2.5], + help='H HH H', + metavar='MV MV MV') + string = ( + "Action(option_strings=[], dest='x', nargs='?', " + "const=None, default=2.5, type=%r, choices=[0.5, 1.5, 2.5], " + "help='H HH H', metavar='MV MV MV')" % float) + self.assertStringEqual(argument, string) + + def test_namespace(self): + ns = argparse.Namespace(foo=42, bar='spam') + string = "Namespace(bar='spam', foo=42)" + self.assertStringEqual(ns, string) + + def test_parser(self): + parser = argparse.ArgumentParser(prog='PROG') + string = ( + "ArgumentParser(prog='PROG', usage=None, description=None, " + "version=None, formatter_class=%r, conflict_handler='error', " + "add_help=True)" % argparse.HelpFormatter) + self.assertStringEqual(parser, string) + +# =============== +# Namespace tests +# =============== + +class TestNamespace(TestCase): + + def test_constructor(self): + ns = argparse.Namespace() + self.assertRaises(AttributeError, getattr, ns, 'x') + + ns = argparse.Namespace(a=42, b='spam') + self.assertEqual(ns.a, 42) + self.assertEqual(ns.b, 'spam') + + def test_equality(self): + ns1 = argparse.Namespace(a=1, b=2) + ns2 = argparse.Namespace(b=2, a=1) + ns3 = argparse.Namespace(a=1) + ns4 = argparse.Namespace(b=2) + + self.assertEqual(ns1, ns2) + self.assertNotEqual(ns1, ns3) + self.assertNotEqual(ns1, ns4) + self.assertNotEqual(ns2, ns3) + self.assertNotEqual(ns2, ns4) + self.failUnless(ns1 != ns3) + self.failUnless(ns1 != ns4) + self.failUnless(ns2 != ns3) + self.failUnless(ns2 != ns4) + + +# =================== +# File encoding tests +# =================== + +class TestEncoding(TestCase): + + def _test_module_encoding(self, path): + path, _ = os.path.splitext(path) + path += ".py" + codecs.open(path, 'r', 'utf8').read() + + def test_argparse_module_encoding(self): + self._test_module_encoding(argparse.__file__) + + def test_test_argparse_module_encoding(self): + self._test_module_encoding(__file__) + +# =================== +# ArgumentError tests +# =================== + +class TestArgumentError(TestCase): + + def test_argument_error(self): + msg = "my error here" + error = argparse.ArgumentError(None, msg) + self.failUnlessEqual(str(error), msg) + +# ======================= +# ArgumentTypeError tests +# ======================= + +class TestArgumentError(TestCase): + + def test_argument_type_error(self): + + def spam(string): + raise argparse.ArgumentTypeError('spam!') + + parser = ErrorRaisingArgumentParser(prog='PROG', add_help=False) + parser.add_argument('x', type=spam) + try: + parser.parse_args(['XXX']) + except ArgumentParserError: + expected = 'usage: PROG x\nPROG: error: argument x: spam!\n' + msg = sys.exc_info()[1].stderr + self.failUnlessEqual(expected, msg) + else: + self.fail() + +# ====================== +# parse_known_args tests +# ====================== + +class TestParseKnownArgs(TestCase): + + def test_optionals(self): + parser = argparse.ArgumentParser() + parser.add_argument('--foo') + args, extras = parser.parse_known_args('--foo F --bar --baz'.split()) + self.failUnlessEqual(NS(foo='F'), args) + self.failUnlessEqual(['--bar', '--baz'], extras) + + def test_mixed(self): + parser = argparse.ArgumentParser() + parser.add_argument('-v', nargs='?', const=1, type=int) + parser.add_argument('--spam', action='store_false') + parser.add_argument('badger') + + argv = ["B", "C", "--foo", "-v", "3", "4"] + args, extras = parser.parse_known_args(argv) + self.failUnlessEqual(NS(v=3, spam=True, badger="B"), args) + self.failUnlessEqual(["C", "--foo", "4"], extras) + +# ============================ +# from argparse import * tests +# ============================ + +class TestImportStar(TestCase): + + def test(self): + for name in argparse.__all__: + self.failUnless(hasattr(argparse, name)) + + +if __name__ == '__main__': + unittest.main() From python-checkins at python.org Tue Mar 2 23:08:41 2010 From: python-checkins at python.org (benjamin.peterson) Date: Tue, 2 Mar 2010 23:08:41 +0100 (CET) Subject: [Python-checkins] r78588 - python/trunk/Lib/test/test_argparse.py Message-ID: <20100302220841.096D4FD93@mail.python.org> Author: benjamin.peterson Date: Tue Mar 2 23:08:40 2010 New Revision: 78588 Log: remove another coding cookie Modified: python/trunk/Lib/test/test_argparse.py Modified: python/trunk/Lib/test/test_argparse.py ============================================================================== --- python/trunk/Lib/test/test_argparse.py (original) +++ python/trunk/Lib/test/test_argparse.py Tue Mar 2 23:08:40 2010 @@ -1,6 +1,4 @@ -# -*- coding: utf-8 -*- - -# Copyright ? 2006-2009 Steven J. Bethard . +# Copyright 2006-2009 Steven J. Bethard . # # Licensed under the Apache License, Version 2.0 (the "License"); you may not # use this file except in compliance with the License. You may obtain a copy From python-checkins at python.org Tue Mar 2 23:17:38 2010 From: python-checkins at python.org (georg.brandl) Date: Tue, 2 Mar 2010 23:17:38 +0100 (CET) Subject: [Python-checkins] r78589 - python/trunk/Doc/library/argparse.rst Message-ID: <20100302221738.AB82CFAB1@mail.python.org> Author: georg.brandl Date: Tue Mar 2 23:17:38 2010 New Revision: 78589 Log: Add some x-refs. Modified: python/trunk/Doc/library/argparse.rst Modified: python/trunk/Doc/library/argparse.rst ============================================================================== --- python/trunk/Doc/library/argparse.rst (original) +++ python/trunk/Doc/library/argparse.rst Tue Mar 2 23:17:38 2010 @@ -9,11 +9,11 @@ The :mod:`argparse` module makes it easy to write user friendly command line -interfaces. You define what arguments your program requires, and -:mod:`argparse` will figure out how to parse those out of ``sys.argv``. The -:mod:`argparse` module also automatically generates help and usage messages -based on the arguments you have defined, and issues errors when users give your -program invalid arguments. +interfaces. You define what arguments your program requires, and :mod:`argparse` +will figure out how to parse those out of :data:`sys.argv`. The :mod:`argparse` +module also automatically generates help and usage messages based on the +arguments you have defined, and issues errors when users give your program +invalid arguments. Example ------- @@ -81,10 +81,10 @@ ^^^^^^^^^^^^^^^^ Once you've created an :class:`ArgumentParser`, you'll want to fill it with -information about your program arguments. You typically do this by making calls +information about your program arguments. You typically do this by making calls to the :meth:`add_argument` method. Generally, these calls tell the :class:`ArgumentParser` how to take the strings on the command line and turn -them into objects for you. This information is stored and used when +them into objects for you. This information is stored and used when :meth:`parse_args` is called. For example, if we add some arguments like this:: >>> parser.add_argument('integers', metavar='N', type=int, nargs='+', @@ -93,11 +93,11 @@ ... const=sum, default=max, ... help='sum the integers (default: find the max)') -when we later call :meth:`parse_args`, we can expect it to return an object -with two attributes, ``integers`` and ``accumulate``. The ``integers`` -attribute will be a list of one or more ints, and the ``accumulate`` attribute -will be either the ``sum`` function, if ``--sum`` was specified at the command -line, or the ``max`` function if it was not. +when we later call :meth:`parse_args`, we can expect it to return an object with +two attributes, ``integers`` and ``accumulate``. The ``integers`` attribute +will be a list of one or more ints, and the ``accumulate`` attribute will be +either the :func:`sum` function, if ``--sum`` was specified at the command line, +or the :func:`max` function if it was not. Parsing arguments ^^^^^^^^^^^^^^^^^ @@ -105,17 +105,17 @@ Once an :class:`ArgumentParser` has been initialized with appropriate calls to :meth:`add_argument`, it can be instructed to parse the command-line args by calling the :meth:`parse_args` method. This will inspect the command-line, -convert each arg to the appropriate type and then invoke the appropriate -action. In most cases, this means a simple namespace object will be built up -from attributes parsed out of the command-line:: +convert each arg to the appropriate type and then invoke the appropriate action. +In most cases, this means a simple namespace object will be built up from +attributes parsed out of the command-line:: >>> parser.parse_args(['--sum', '7', '-1', '42']) Namespace(accumulate=, integers=[7, -1, 42]) In a script, :meth:`parse_args` will typically be called with no arguments, and the :class:`ArgumentParser` will automatically determine the command-line args -from ``sys.argv``. That's pretty much it. You're now ready to go write some -command line interfaces! +from :data:`sys.argv`. That's pretty much it. You're now ready to go write +some command line interfaces! ArgumentParser objects @@ -123,7 +123,7 @@ .. class:: ArgumentParser([description], [epilog], [prog], [usage], [add_help], [argument_default], [parents], [prefix_chars], [conflict_handler], [formatter_class]) - Create a new :class:`ArgumentParser` object. Each parameter has its own more + Create a new :class:`ArgumentParser` object. Each parameter has its own more detailed description below, but in short they are: * description_ - Text to display before the argument help. @@ -162,8 +162,8 @@ ^^^^^^^^^^^ Most calls to the ArgumentParser constructor will use the ``description=`` -keyword argument. This argument gives a brief description of what the program -does and how it works. In help messages, the description is displayed between +keyword argument. This argument gives a brief description of what the program +does and how it works. In help messages, the description is displayed between the command-line usage string and the help messages for the various arguments:: >>> parser = argparse.ArgumentParser(description='A foo that bars') @@ -176,15 +176,15 @@ -h, --help show this help message and exit By default, the description will be line-wrapped so that it fits within the -given space. To change this behavior, see the formatter_class_ argument. +given space. To change this behavior, see the formatter_class_ argument. epilog ^^^^^^ Some programs like to display additional description of the program after the -description of the arguments. Such text can be specified using the ``epilog=`` -argument to ArgumentParser:: +description of the arguments. Such text can be specified using the ``epilog=`` +argument to :class:`ArgumentParser`:: >>> parser = argparse.ArgumentParser( ... description='A foo that bars', @@ -208,7 +208,7 @@ ^^^^^^^^ By default, ArgumentParser objects add a ``-h/--help`` option which simply -displays the parser's help message. For example, consider a file named +displays the parser's help message. For example, consider a file named ``myprogram.py`` containing the following code:: import argparse @@ -261,12 +261,12 @@ fromfile_prefix_chars ^^^^^^^^^^^^^^^^^^^^^ -Sometimes, e.g. for particularly long argument lists, it may make sense to -keep the list of arguments in a file rather than typing it out at the command -line. If the ``fromfile_prefix_chars=`` argument is given to the ArgumentParser -constructor, then arguments that start with any of the specified characters -will be treated as files, and will be replaced by the arguments they contain. -For example:: +Sometimes, e.g. for particularly long argument lists, it may make sense to keep +the list of arguments in a file rather than typing it out at the command line. +If the ``fromfile_prefix_chars=`` argument is given to the ArgumentParser +constructor, then arguments that start with any of the specified characters will +be treated as files, and will be replaced by the arguments they contain. For +example:: >>> open('args.txt', 'w').write('-f\nbar') >>> parser = argparse.ArgumentParser(fromfile_prefix_chars='@') @@ -276,7 +276,7 @@ Arguments read from a file must by default be one per line (but see also :meth:`convert_arg_line_to_args`) and are treated as if they were in the same -place as the original file referencing argument on the command line. So in the +place as the original file referencing argument on the command line. So in the example above, the expression ``['-f', 'foo', '@args.txt']`` is considered equivalent to the expression ``['-f', 'foo', '-f', 'bar']``. @@ -288,11 +288,11 @@ Generally, argument defaults are specified either by passing a default to :meth:`add_argument` or by calling the :meth:`set_defaults` methods with a -specific set of name-value pairs. Sometimes however, it may be useful to -specify a single parser-wide default for arguments. This can be accomplished by -passing the ``argument_default=`` keyword argument to ArgumentParser. For -example, to globally suppress attribute creation on :meth:`parse_args` calls, -we supply ``argument_default=SUPPRESS``:: +specific set of name-value pairs. Sometimes however, it may be useful to +specify a single parser-wide default for arguments. This can be accomplished by +passing the ``argument_default=`` keyword argument to ArgumentParser. For +example, to globally suppress attribute creation on :meth:`parse_args` calls, we +supply ``argument_default=SUPPRESS``:: >>> parser = argparse.ArgumentParser(argument_default=argparse.SUPPRESS) >>> parser.add_argument('--foo') @@ -309,9 +309,9 @@ Sometimes, several parsers share a common set of arguments. Rather than repeating the definitions of these arguments, you can define a single parser with all the shared arguments and then use the ``parents=`` argument to -ArgumentParser to have these "inherited". The ``parents=`` argument takes a -list of ArgumentParser objects, collects all the positional and optional -actions from them, and adds these actions to the ArgumentParser object being +ArgumentParser to have these "inherited". The ``parents=`` argument takes a +list of ArgumentParser objects, collects all the positional and optional actions +from them, and adds these actions to the ArgumentParser object being constructed:: >>> parent_parser = argparse.ArgumentParser(add_help=False) @@ -327,7 +327,7 @@ >>> bar_parser.parse_args(['--bar', 'YYY']) Namespace(bar='YYY', parent=None) -Note that most parent parsers will specify ``add_help=False``. Otherwise, the +Note that most parent parsers will specify ``add_help=False``. Otherwise, the ArgumentParser will see two ``-h/--help`` options (one in the parent and one in the child) and raise an error. @@ -336,11 +336,12 @@ ^^^^^^^^^^^^^^^ ArgumentParser objects allow the help formatting to be customized by specifying -an alternate formatting class. Currently, there are three such classes: -``argparse.RawDescriptionHelpFormatter``, ``argparse.RawTextHelpFormatter`` and -``argparse.ArgumentDefaultsHelpFormatter``. The first two allow more control -over how textual descriptions are displayed, while the last automatically adds -information about argument default values. +an alternate formatting class. Currently, there are three such classes: +:class:`argparse.RawDescriptionHelpFormatter`, +:class:`argparse.RawTextHelpFormatter` and +:class:`argparse.ArgumentDefaultsHelpFormatter`. The first two allow more +control over how textual descriptions are displayed, while the last +automatically adds information about argument default values. By default, ArgumentParser objects line-wrap the description_ and epilog_ texts in command-line help messages:: @@ -367,8 +368,8 @@ When you have description_ and epilog_ that is already correctly formatted and should not be line-wrapped, you can indicate this by passing -``argparse.RawDescriptionHelpFormatter`` as the ``formatter_class=`` argument -to ArgumentParser:: +``argparse.RawDescriptionHelpFormatter`` as the ``formatter_class=`` argument to +ArgumentParser:: >>> parser = argparse.ArgumentParser( ... prog='PROG', @@ -395,9 +396,8 @@ If you want to maintain whitespace for all sorts of help text (including argument descriptions), you can use ``argparse.RawTextHelpFormatter``. -The other formatter class available, -``argparse.ArgumentDefaultsHelpFormatter``, will add information about the -default value of each of the arguments:: +The other formatter class available, ``argparse.ArgumentDefaultsHelpFormatter``, +will add information about the default value of each of the arguments:: >>> parser = argparse.ArgumentParser( ... prog='PROG', @@ -418,9 +418,9 @@ conflict_handler ^^^^^^^^^^^^^^^^ -ArgumentParser objects do not allow two actions with the same option string. -By default, ArgumentParser objects will raise an exception if you try to create -an argument with an option string that is already in use:: +ArgumentParser objects do not allow two actions with the same option string. By +default, ArgumentParser objects will raise an exception if you try to create an +argument with an option string that is already in use:: >>> parser = argparse.ArgumentParser(prog='PROG') >>> parser.add_argument('-f', '--foo', help='old foo help') @@ -430,7 +430,7 @@ ArgumentError: argument --foo: conflicting option string(s): --foo Sometimes (e.g. when using parents_) it may be useful to simply override any -older arguments with the same option string. To get this behavior, the value +older arguments with the same option string. To get this behavior, the value ``'resolve'`` can be supplied to the ``conflict_handler=`` argument of ArgumentParser:: @@ -446,7 +446,7 @@ --foo FOO new foo help Note that ArgumentParser objects only remove an action if all of its option -strings are overridden. So, in the example above, the old ``-f/--foo`` action +strings are overridden. So, in the example above, the old ``-f/--foo`` action is retained as the ``-f`` action, because only the ``--foo`` option string was overridden. @@ -455,9 +455,9 @@ ^^^^ By default, ArgumentParser objects use ``sys.argv[0]`` to determine how to -display the name of the program in help messages. This default is almost always +display the name of the program in help messages. This default is almost always what you want because it will make the help messages match what your users have -typed at the command line. For example, consider a file named ``myprogram.py`` +typed at the command line. For example, consider a file named ``myprogram.py`` with the following code:: import argparse @@ -553,7 +553,7 @@ .. method:: add_argument(name or flags..., [action], [nargs], [const], [default], [type], [choices], [required], [help], [metavar], [dest]) - Define how a single command line argument should be parsed. Each parameter + Define how a single command line argument should be parsed. Each parameter has its own more detailed description below, but in short they are: * `name or flags`_ - Either a name or a list of option strings, e.g. ``foo`` @@ -590,8 +590,8 @@ The :meth:`add_argument` method needs to know whether you're expecting an optional argument, e.g. ``-f`` or ``--foo``, or a positional argument, e.g. a -list of filenames. The first arguments passed to :meth:`add_argument` must -therefore be either a series of flags, or a simple argument name. For example, +list of filenames. The first arguments passed to :meth:`add_argument` must +therefore be either a series of flags, or a simple argument name. For example, an optional argument could be created like:: >>> parser.add_argument('-f', '--foo') @@ -617,15 +617,15 @@ action ^^^^^^ -:class:`ArgumentParser` objects associate command-line args with actions. These +:class:`ArgumentParser` objects associate command-line args with actions. These actions can do just about anything with the command-line args associated with them, though most actions simply add an attribute to the object returned by :meth:`parse_args`. When you specify a new argument using the :meth:`add_argument` method, you can indicate how the command-line args should -be handled by specifying the ``action`` keyword argument. The supported actions +be handled by specifying the ``action`` keyword argument. The supported actions are: -* ``'store'`` - This just stores the argument's value. This is the default +* ``'store'`` - This just stores the argument's value. This is the default action. For example:: >>> parser = argparse.ArgumentParser() @@ -634,8 +634,8 @@ Namespace(foo='1') * ``'store_const'`` - This stores the value specified by the const_ keyword - argument. Note that the const_ keyword argument defaults to ``None``, so - you'll almost always need to provide a value for it. The ``'store_const'`` + argument. Note that the const_ keyword argument defaults to ``None``, so + you'll almost always need to provide a value for it. The ``'store_const'`` action is most commonly used with optional arguments that specify some sort of flag. For example:: @@ -665,9 +665,9 @@ * ``'append_const'`` - This stores a list, and appends the value specified by the const_ keyword argument to the list. Note that the const_ keyword - argument defaults to ``None``, so you'll almost always need to provide a - value for it. The ``'append_const'`` action is typically useful when you - want multiple arguments to store constants to the same list, for example:: + argument defaults to ``None``, so you'll almost always need to provide a value + for it. The ``'append_const'`` action is typically useful when you want + multiple arguments to store constants to the same list, for example:: >>> parser = argparse.ArgumentParser() >>> parser.add_argument('--str', dest='types', action='append_const', const=str) @@ -687,13 +687,13 @@ You can also specify an arbitrary action by passing an object that implements the Action API. The easiest way to do this is to extend ``argparse.Action``, -supplying an appropriate ``__call__`` method. The ``__call__`` method accepts -four parameters: +supplying an appropriate :meth:`__call__` method. The ``__call__`` method +accepts four parameters: * ``parser`` - The ArgumentParser object which contains this action. * ``namespace`` - The namespace object that will be returned by - :meth:`parse_args`. Most actions add an attribute to this object. + :meth:`parse_args`. Most actions add an attribute to this object. * ``values`` - The associated command-line args, with any type-conversions applied. (Type-conversions are specified with the type_ keyword argument to @@ -725,12 +725,11 @@ ArgumentParser objects usually associate a single command-line argument with a single action to be taken. In the situations where you'd like to associate a -different number of command-line arguments with a single action, you can use -the ``nargs`` keyword argument to :meth:`add_argument`. The supported values -are: +different number of command-line arguments with a single action, you can use the +``nargs`` keyword argument to :meth:`add_argument`. The supported values are: -* N (an integer). N args from the command-line will be gathered together into - a list. For example:: +* N (an integer). N args from the command-line will be gathered together into a + list. For example:: >>> parser = argparse.ArgumentParser() >>> parser.add_argument('--foo', nargs=2) @@ -748,53 +747,53 @@ command-line arg. In this case the value from const_ will be produced. Some examples to illustrate this:: - >>> parser = argparse.ArgumentParser() - >>> parser.add_argument('--foo', nargs='?', const='c', default='d') - >>> parser.add_argument('bar', nargs='?', default='d') - >>> parser.parse_args('XX --foo YY'.split()) - Namespace(bar='XX', foo='YY') - >>> parser.parse_args('XX --foo'.split()) - Namespace(bar='XX', foo='c') - >>> parser.parse_args(''.split()) - Namespace(bar='d', foo='d') + >>> parser = argparse.ArgumentParser() + >>> parser.add_argument('--foo', nargs='?', const='c', default='d') + >>> parser.add_argument('bar', nargs='?', default='d') + >>> parser.parse_args('XX --foo YY'.split()) + Namespace(bar='XX', foo='YY') + >>> parser.parse_args('XX --foo'.split()) + Namespace(bar='XX', foo='c') + >>> parser.parse_args(''.split()) + Namespace(bar='d', foo='d') - One of the more common uses of ``nargs='?'`` is to allow optional input and - output files:: + One of the more common uses of ``nargs='?'`` is to allow optional input and + output files:: - >>> parser = argparse.ArgumentParser() - >>> parser.add_argument('infile', nargs='?', type=argparse.FileType('r'), default=sys.stdin) - >>> parser.add_argument('outfile', nargs='?', type=argparse.FileType('w'), default=sys.stdout) - >>> parser.parse_args(['input.txt', 'output.txt']) - Namespace(infile=, outfile=) - >>> parser.parse_args([]) - Namespace(infile=', mode 'r' at 0x...>, outfile=', mode 'w' at 0x...>) - -* ``'*'``. All command-line args present are gathered into a list. Note that - it generally doesn't make much sense to have more than one positional - argument with ``nargs='*'``, but multiple optional arguments with - ``nargs='*'`` is possible. For example:: + >>> parser = argparse.ArgumentParser() + >>> parser.add_argument('infile', nargs='?', type=argparse.FileType('r'), default=sys.stdin) + >>> parser.add_argument('outfile', nargs='?', type=argparse.FileType('w'), default=sys.stdout) + >>> parser.parse_args(['input.txt', 'output.txt']) + Namespace(infile=, outfile=) + >>> parser.parse_args([]) + Namespace(infile=', mode 'r' at 0x...>, outfile=', mode 'w' at 0x...>) - >>> parser = argparse.ArgumentParser() - >>> parser.add_argument('--foo', nargs='*') - >>> parser.add_argument('--bar', nargs='*') - >>> parser.add_argument('baz', nargs='*') - >>> parser.parse_args('a b --foo x y --bar 1 2'.split()) - Namespace(bar=['1', '2'], baz=['a', 'b'], foo=['x', 'y']) +* ``'*'``. All command-line args present are gathered into a list. Note that + it generally doesn't make much sense to have more than one positional argument + with ``nargs='*'``, but multiple optional arguments with ``nargs='*'`` is + possible. For example:: + + >>> parser = argparse.ArgumentParser() + >>> parser.add_argument('--foo', nargs='*') + >>> parser.add_argument('--bar', nargs='*') + >>> parser.add_argument('baz', nargs='*') + >>> parser.parse_args('a b --foo x y --bar 1 2'.split()) + Namespace(bar=['1', '2'], baz=['a', 'b'], foo=['x', 'y']) * ``'+'``. Just like ``'*'``, all command-line args present are gathered into a list. Additionally, an error message will be generated if there wasn't at least one command-line arg present. For example:: - >>> parser = argparse.ArgumentParser(prog='PROG') - >>> parser.add_argument('foo', nargs='+') - >>> parser.parse_args('a b'.split()) - Namespace(foo=['a', 'b']) - >>> parser.parse_args(''.split()) - usage: PROG [-h] foo [foo ...] - PROG: error: too few arguments + >>> parser = argparse.ArgumentParser(prog='PROG') + >>> parser.add_argument('foo', nargs='+') + >>> parser.parse_args('a b'.split()) + Namespace(foo=['a', 'b']) + >>> parser.parse_args(''.split()) + usage: PROG [-h] foo [foo ...] + PROG: error: too few arguments If the ``nargs`` keyword argument is not provided, the number of args consumed -is determined by the action_. Generally this means a single command-line arg +is determined by the action_. Generally this means a single command-line arg will be consumed and a single item (not a list) will be produced. @@ -811,7 +810,7 @@ description for examples. * When :meth:`add_argument` is called with option strings (like ``-f`` or - ``--foo``) and ``nargs='?'``. This creates an optional argument that can be + ``--foo``) and ``nargs='?'``. This creates an optional argument that can be followed by zero or one command-line args. When parsing the command-line, if the option string is encountered with no command-line arg following it, the value of ``const`` will be assumed instead. See the nargs_ description for @@ -863,8 +862,8 @@ By default, ArgumentParser objects read command-line args in as simple strings. However, quite often the command-line string should instead be interpreted as -another type, e.g. ``float``, ``int`` or ``file``. The ``type`` keyword -argument of :meth:`add_argument` allows any necessary type-checking and +another type, e.g. :class:`float`, :class:`int` or :class:`file`. The ``type`` +keyword argument of :meth:`add_argument` allows any necessary type-checking and type-conversions to be performed. Many common builtin types can be used directly as the value of the ``type`` argument:: @@ -876,7 +875,7 @@ To ease the use of various types of files, the argparse module provides the factory FileType which takes the ``mode=`` and ``bufsize=`` arguments of the -``file`` object. For example, ``FileType('w')`` can be used to create a +``file`` object. For example, ``FileType('w')`` can be used to create a writable file:: >>> parser = argparse.ArgumentParser() @@ -949,8 +948,8 @@ PROG: error: argument foo: invalid choice: (-4+0j) (choose from 1, 1j) Any object that supports the ``in`` operator can be passed as the ``choices`` -value, so ``dict`` objects, ``set`` objects, custom containers, etc. are all -supported. +value, so :class:`dict` objects, :class:`set` objects, custom containers, +etc. are all supported. required @@ -974,7 +973,7 @@ will report an error if that option is not present at the command line. **Warning:** Required options are generally considered bad form - normal users -expect *options* to be *optional*. You should avoid the use of required options +expect *options* to be *optional*. You should avoid the use of required options whenever possible. @@ -982,12 +981,12 @@ ^^^^ A great command-line interface isn't worth anything if your users can't figure -out which option does what. So for the end-users, ``help`` is probably the -most important argument to include in your :meth:`add_argument` calls. The -``help`` value should be a string containing a brief description of what the -argument specifies. When a user requests help (usually by using ``-h`` or -``--help`` at the command-line), these ``help`` descriptions will be displayed -with each argument:: +out which option does what. So for the end-users, ``help`` is probably the most +important argument to include in your :meth:`add_argument` calls. The ``help`` +value should be a string containing a brief description of what the argument +specifies. When a user requests help (usually by using ``-h`` or ``--help`` at +the command-line), these ``help`` descriptions will be displayed with each +argument:: >>> parser = argparse.ArgumentParser(prog='frobble') >>> parser.add_argument('--foo', action='store_true', @@ -1026,7 +1025,7 @@ ^^^^^^^ When ArgumentParser objects generate help messages, they need some way to refer -to each expected argument. By default, ArgumentParser objects use the dest_ +to each expected argument. By default, ArgumentParser objects use the dest_ value as the "name" of each object. By default, for positional argument actions, the dest_ value is used directly, and for optional argument actions, the dest_ value is uppercased. So if we have a single positional argument with @@ -1074,8 +1073,8 @@ value. Different values of ``nargs`` may cause the metavar to be used multiple times. -If you'd like to specify a different display name for each of the arguments, -you can provide a tuple to ``metavar``:: +If you'd like to specify a different display name for each of the arguments, you +can provide a tuple to ``metavar``:: >>> parser = argparse.ArgumentParser(prog='PROG') >>> parser.add_argument('-x', nargs=2) @@ -1093,8 +1092,8 @@ ^^^^ Most ArgumentParser actions add some value as an attribute of the object -returned by :meth:`parse_args`. The name of this attribute is determined by the -``dest`` keyword argument of :meth:`add_argument`. For positional argument +returned by :meth:`parse_args`. The name of this attribute is determined by the +``dest`` keyword argument of :meth:`add_argument`. For positional argument actions, ``dest`` is normally supplied as the first argument to :meth:`add_argument`:: @@ -1104,12 +1103,12 @@ Namespace(bar='XXX') For optional argument actions, the value of ``dest`` is normally inferred from -the option strings. ArgumentParser objects generate the value of ``dest`` by +the option strings. ArgumentParser objects generate the value of ``dest`` by taking the first long option string and stripping away the initial ``'--'`` string. If no long option strings were supplied, ``dest`` will be derived from the first short option string by stripping the initial ``'-'`` character. Any -internal ``'-'`` characters will be converted to ``'_'`` characters to make -sure the string is a valid attribute name. The examples below illustrate this +internal ``'-'`` characters will be converted to ``'_'`` characters to make sure +the string is a valid attribute name. The examples below illustrate this behavior:: >>> parser = argparse.ArgumentParser() @@ -1136,20 +1135,20 @@ .. method:: parse_args([args], [namespace]) Convert the strings to objects and assign them as attributes of the - namespace. Return the populated namespace. + namespace. Return the populated namespace. Previous calls to :meth:`add_argument` determine exactly what objects are created and how they are assigned. See the documentation for :meth:`add_argument` for details. - By default, the arg strings are taken from ``sys.argv``, and a new empty + By default, the arg strings are taken from :data:`sys.argv`, and a new empty ``Namespace`` object is created for the attributes. Option value syntax ^^^^^^^^^^^^^^^^^^^ The :meth:`parse_args` method supports several ways of specifying the value of -an option (if it takes one). In the simplest case, the option and its value are +an option (if it takes one). In the simplest case, the option and its value are passed as two separate arguments:: >>> parser = argparse.ArgumentParser(prog='PROG') @@ -1161,8 +1160,8 @@ Namespace(foo='FOO', x=None) For long options (options with names longer than a single character), you may -also pass the option and value as a single command line argument, using ``=`` -to separate them:: +also pass the option and value as a single command line argument, using ``=`` to +separate them:: >>> parser.parse_args('--foo=FOO'.split()) Namespace(foo='FOO', x=None) @@ -1189,7 +1188,7 @@ While parsing the command-line, ``parse_args`` checks for a variety of errors, including ambiguous options, invalid types, invalid options, wrong number of -positional arguments, etc. When it encounters such an error, it exits and +positional arguments, etc. When it encounters such an error, it exits and prints the error along with a usage message:: >>> parser = argparse.ArgumentParser(prog='PROG') @@ -1216,9 +1215,9 @@ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ The ``parse_args`` method attempts to give errors whenever the user has clearly -made a mistake, but some situations are inherently ambiguous. For example, the +made a mistake, but some situations are inherently ambiguous. For example, the command-line arg ``'-1'`` could either be an attempt to specify an option or an -attempt to provide a positional argument. The ``parse_args`` method is cautious +attempt to provide a positional argument. The ``parse_args`` method is cautious here: positional arguments may only begin with ``'-'`` if they look like negative numbers and there are no options in the parser that look like negative numbers:: @@ -1285,11 +1284,11 @@ Beyond ``sys.argv`` ^^^^^^^^^^^^^^^^^^^ -Sometimes it may be useful to have an ArgumentParser parse args other than -those of ``sys.argv``. This can be accomplished by passing a list of strings -to ``parse_args``. You may have noticed that the examples in the argparse -documentation have made heavy use of this calling style - it is much easier -to use at the interactive prompt:: +Sometimes it may be useful to have an ArgumentParser parse args other than those +of :data:`sys.argv`. This can be accomplished by passing a list of strings to +``parse_args``. You may have noticed that the examples in the argparse +documentation have made heavy use of this calling style - it is much easier to +use at the interactive prompt:: >>> parser = argparse.ArgumentParser() >>> parser.add_argument( @@ -1308,9 +1307,8 @@ ^^^^^^^^^^^^^^^^^ It may also be useful to have an ArgumentParser assign attributes to an already -existing object, rather than the newly-created Namespace object that is -normally used. This can be achieved by specifying the ``namespace=`` keyword -argument:: +existing object, rather than the newly-created Namespace object that is normally +used. This can be achieved by specifying the ``namespace=`` keyword argument:: >>> class C(object): ... pass @@ -1331,18 +1329,17 @@ .. method:: add_subparsers() - A lot of programs split up their functionality into a number of - sub-commands, for example, the ``svn`` program can invoke sub-commands like - ``svn checkout``, ``svn update``, ``svn commit``, etc. Splitting up - functionality this way can be a particularly good idea when a program - performs several different functions which require different kinds of - command-line arguments. ArgumentParser objects support the creation of such - sub-commands with the :meth:`add_subparsers` method. The - :meth:`add_subparsers` method is normally called with no arguments and - returns an special action object. This object has a single method, - ``add_parser``, which takes a command name and any ArgumentParser - constructor arguments, and returns an ArgumentParser object that can be - modified as usual. + A lot of programs split up their functionality into a number of sub-commands, + for example, the ``svn`` program can invoke sub-commands like ``svn + checkout``, ``svn update``, ``svn commit``, etc. Splitting up functionality + this way can be a particularly good idea when a program performs several + different functions which require different kinds of command-line arguments. + ArgumentParser objects support the creation of such sub-commands with the + :meth:`add_subparsers` method. The :meth:`add_subparsers` method is normally + called with no arguments and returns an special action object. This object + has a single method, ``add_parser``, which takes a command name and any + ArgumentParser constructor arguments, and returns an ArgumentParser object + that can be modified as usual. Some example usage:: @@ -1368,15 +1365,15 @@ Note that the object returned by :meth:`parse_args` will only contain attributes for the main parser and the subparser that was selected by the command line (and not any other subparsers). So in the example above, when - the ``"a"`` command is specified, only the ``foo`` and ``bar`` attributes - are present, and when the ``"b"`` command is specified, only the ``foo`` and + the ``"a"`` command is specified, only the ``foo`` and ``bar`` attributes are + present, and when the ``"b"`` command is specified, only the ``foo`` and ``baz`` attributes are present. Similarly, when a help message is requested from a subparser, only the help - for that particular parser will be printed. The help message will not - include parent parser or sibling parser messages. (You can however supply a - help message for each subparser command by suppling the ``help=`` argument - to ``add_parser`` as above.) + for that particular parser will be printed. The help message will not + include parent parser or sibling parser messages. (You can however supply a + help message for each subparser command by suppling the ``help=`` argument to + ``add_parser`` as above.) :: @@ -1408,9 +1405,9 @@ -h, --help show this help message and exit --baz {X,Y,Z} baz help - The :meth:`add_subparsers` method also supports ``title`` and - ``description`` keyword arguments. When either is present, the subparser's - commands will appear in their own group in the help output. For example:: + The :meth:`add_subparsers` method also supports ``title`` and ``description`` + keyword arguments. When either is present, the subparser's commands will + appear in their own group in the help output. For example:: >>> parser = argparse.ArgumentParser() >>> subparsers = parser.add_subparsers(title='subcommands', @@ -1430,9 +1427,9 @@ {foo,bar} additional help - One particularly effective way of handling sub-commands is to combine the - use of the :meth:`add_subparsers` method with calls to :meth:`set_defaults` - so that each subparser knows which Python function it should execute. For + One particularly effective way of handling sub-commands is to combine the use + of the :meth:`add_subparsers` method with calls to :meth:`set_defaults` so + that each subparser knows which Python function it should execute. For example:: >>> # sub-command functions @@ -1469,8 +1466,8 @@ This way, you can let :meth:`parse_args` do all the work for you, and then just call the appropriate function after the argument parsing is complete. - Associating functions with actions like this is typically the easiest way - to handle the different actions for each of your subparsers. However, if you + Associating functions with actions like this is typically the easiest way to + handle the different actions for each of your subparsers. However, if you find it necessary to check the name of the subparser that was invoked, you can always provide a ``dest`` keyword argument to the :meth:`add_subparsers` call:: @@ -1491,9 +1488,9 @@ .. class:: FileType(mode='r', bufsize=None) The :class:`FileType` factory creates objects that can be passed to the type - argument of :meth:`add_argument`. Arguments that have :class:`FileType` - objects as their type will open command-line args as files with the - requested modes and buffer sizes: + argument of :meth:`add_argument`. Arguments that have :class:`FileType` + objects as their type will open command-line args as files with the requested + modes and buffer sizes: >>> parser = argparse.ArgumentParser() >>> parser.add_argument('--output', type=argparse.FileType('wb', 0)) @@ -1534,9 +1531,9 @@ The :meth:`add_argument_group` method returns an argument group object which has an :meth:`add_argument` method just like a regular ArgumentParser - objects. When an argument is added to the group, the parser treats it just + objects. When an argument is added to the group, the parser treats it just like a normal argument, but displays the argument in a separate group for - help messages. The :meth:`add_argument_group` method accepts ``title`` and + help messages. The :meth:`add_argument_group` method accepts ``title`` and ``description`` arguments which can be used to customize this display:: >>> parser = argparse.ArgumentParser(prog='PROG', add_help=False) @@ -1567,7 +1564,7 @@ .. method:: add_mutually_exclusive_group([required=False]) Sometimes, you need to make sure that only one of a couple different options - is specified on the command line. You can create groups of such mutually + is specified on the command line. You can create groups of such mutually exclusive arguments using the :meth:`add_mutually_exclusive_group` method. When :func:`parse_args` is called, argparse will make sure that only one of the arguments in the mutually exclusive group was present on the command @@ -1598,7 +1595,7 @@ PROG: error: one of the arguments --foo --bar is required Note that currently mutually exclusive argument groups do not support the - ``title`` and ``description`` arguments of :meth:`add_argument_group`. This + ``title`` and ``description`` arguments of :meth:`add_argument_group`. This may change in the future however, so you are *strongly* recommended to specify ``required`` as a keyword argument if you use it. @@ -1608,12 +1605,12 @@ .. method:: set_defaults(**kwargs) - Most of the time, the attributes of the object returned by - :meth:`parse_args` will be fully determined by inspecting the command-line - args and the argument actions described in your :meth:`add_argument` calls. - However, sometimes it may be useful to add some additional attributes that - are determined without any inspection of the command-line. The - :meth:`set_defaults` method allows you to do this:: + Most of the time, the attributes of the object returned by :meth:`parse_args` + will be fully determined by inspecting the command-line args and the argument + actions described in your :meth:`add_argument` calls. However, sometimes it + may be useful to add some additional attributes that are determined without + any inspection of the command-line. The :meth:`set_defaults` method allows + you to do this:: >>> parser = argparse.ArgumentParser() >>> parser.add_argument('foo', type=int) @@ -1650,7 +1647,7 @@ ^^^^^^^^^^^^^ In most typical applications, :meth:`parse_args` will take care of formatting -and printing any usage or error messages. However, should you want to format or +and printing any usage or error messages. However, should you want to format or print these on your own, several methods are available: .. method:: print_usage([file]): @@ -1662,7 +1659,7 @@ .. method:: print_help([file]): Print a help message, including the program usage and information about the - arguments registered with the :class:`ArgumentParser`. If ``file`` is not + arguments registered with the :class:`ArgumentParser`. If ``file`` is not present, ``sys.stderr`` is assumed. There are also variants of these methods that simply return a string instead of @@ -1687,10 +1684,10 @@ Sometimes a script may only parse a few of the command line arguments, passing the remaining arguments on to another script or program. In these cases, the -:meth:`parse_known_args` method can be useful. It works much like -:meth:`parse_args` except that it does not produce an error when extra -arguments are present. Instead, it returns a two item tuple containing the -populated namespace and the list of remaining argument strings. +:meth:`parse_known_args` method can be useful. It works much like +:meth:`parse_args` except that it does not produce an error when extra arguments +are present. Instead, it returns a two item tuple containing the populated +namespace and the list of remaining argument strings. :: @@ -1716,8 +1713,8 @@ the argument file. It returns a list of arguments parsed from this string. The method is called once per line read from the argument file, in order. - A useful override of this method is one that treats each space-separated - word as an argument:: + A useful override of this method is one that treats each space-separated word + as an argument:: def convert_arg_line_to_args(self, arg_line): for arg in arg_line.split(): @@ -1730,19 +1727,19 @@ ----------------------- Originally, the argparse module had attempted to maintain compatibility with - optparse. However, optparse was difficult to extend transparently, - particularly with the changes required to support the new ``nargs=`` - specifiers and better usage messges. When most everything in optparse had - either been copy-pasted over or monkey-patched, it no longer seemed practical - to try to maintain the backwards compatibility. +optparse. However, optparse was difficult to extend transparently, particularly +with the changes required to support the new ``nargs=`` specifiers and better +usage messges. When most everything in optparse had either been copy-pasted +over or monkey-patched, it no longer seemed practical to try to maintain the +backwards compatibility. A partial upgrade path from optparse to argparse: * Replace all ``add_option()`` calls with :meth:`add_argument` calls. -* Replace ``options, args = parser.parse_args()`` with - ``args = parser.parse_args()`` and add additional :meth:`add_argument` calls - for the positional arguments. +* Replace ``options, args = parser.parse_args()`` with ``args = + parser.parse_args()`` and add additional :meth:`add_argument` calls for the + positional arguments. * Replace callback actions and the ``callback_*`` keyword arguments with ``type`` or ``action`` arguments. @@ -1753,6 +1750,6 @@ * Replace ``Values`` with ``Namespace`` and ``OptionError/OptionValueError`` with ``ArgumentError``. -* Replace strings with implicit arguments such as ``%default`` or ``%prog`` - with the standard python syntax to use dictionaries to format strings, that - is, ``%(default)s`` and ``%(prog)s``. +* Replace strings with implicit arguments such as ``%default`` or ``%prog`` with + the standard python syntax to use dictionaries to format strings, that is, + ``%(default)s`` and ``%(prog)s``. From python-checkins at python.org Tue Mar 2 23:20:10 2010 From: python-checkins at python.org (benjamin.peterson) Date: Tue, 2 Mar 2010 23:20:10 +0100 (CET) Subject: [Python-checkins] r78590 - python/trunk/Lib/test/test_argparse.py Message-ID: <20100302222010.D1CE9EEA19@mail.python.org> Author: benjamin.peterson Date: Tue Mar 2 23:20:10 2010 New Revision: 78590 Log: enable running of argparse tests and fix two that failed in the new environment Modified: python/trunk/Lib/test/test_argparse.py Modified: python/trunk/Lib/test/test_argparse.py ============================================================================== --- python/trunk/Lib/test/test_argparse.py (original) +++ python/trunk/Lib/test/test_argparse.py Tue Mar 2 23:20:10 2010 @@ -21,6 +21,8 @@ import unittest import argparse +from test import test_support + try: from StringIO import StringIO except ImportError: @@ -1951,6 +1953,8 @@ group.add_argument('-a', action='store_true') group.add_argument('-b', action='store_true') + self.main_program = os.path.basename(sys.argv[0]) + def test_single_parent(self): parser = ErrorRaisingArgumentParser(parents=[self.wxyz_parent]) self.assertEqual(parser.parse_args('-y 1 2 --w 3'.split()), @@ -2043,7 +2047,7 @@ parser = ErrorRaisingArgumentParser(parents=parents) parser_help = parser.format_help() self.assertEqual(parser_help, textwrap.dedent('''\ - usage: test_argparse.py [-h] [-b B] [--d D] [--w W] [-y Y] a z + usage: {} [-h] [-b B] [--d D] [--w W] [-y Y] a z positional arguments: a @@ -2059,7 +2063,7 @@ x: -y Y - ''')) + '''.format(self.main_program))) def test_groups_parents(self): parent = ErrorRaisingArgumentParser(add_help=False) @@ -2076,7 +2080,7 @@ parser_help = parser.format_help() self.assertEqual(parser_help, textwrap.dedent('''\ - usage: test_argparse.py [-h] [-w W] [-x X] [-y Y | -z Z] + usage: {} [-h] [-w W] [-x X] [-y Y | -z Z] optional arguments: -h, --help show this help message and exit @@ -2088,7 +2092,7 @@ -w W -x X - ''')) + '''.format(self.main_program))) # ============================== # Mutually exclusive group tests @@ -4199,6 +4203,9 @@ for name in argparse.__all__: self.failUnless(hasattr(argparse, name)) +def test_main(): + test_support.run_unittest(__name__) + if __name__ == '__main__': unittest.main() From python-checkins at python.org Tue Mar 2 23:23:33 2010 From: python-checkins at python.org (benjamin.peterson) Date: Tue, 2 Mar 2010 23:23:33 +0100 (CET) Subject: [Python-checkins] r78591 - python/trunk/Lib/test/test_argparse.py Message-ID: <20100302222333.D60C7EE99E@mail.python.org> Author: benjamin.peterson Date: Tue Mar 2 23:23:33 2010 New Revision: 78591 Log: prevent warning filter adjustment from altering other tests Modified: python/trunk/Lib/test/test_argparse.py Modified: python/trunk/Lib/test/test_argparse.py ============================================================================== --- python/trunk/Lib/test/test_argparse.py (original) +++ python/trunk/Lib/test/test_argparse.py Tue Mar 2 23:23:33 2010 @@ -19,6 +19,7 @@ import textwrap import tempfile import unittest +import warnings import argparse from test import test_support @@ -44,29 +45,6 @@ result.reverse() return result -# silence Python 2.6 buggy warnings about Exception.message -if sys.version_info[:2] == (2, 6): - import warnings - warnings.filterwarnings( - action='ignore', - message='BaseException.message has been deprecated as of Python 2.6', - category=DeprecationWarning) - -# silence warnings about version argument - these are expected -import warnings -warnings.filterwarnings( - action='ignore', - message='The "version" argument to ArgumentParser is deprecated.', - category=DeprecationWarning) -warnings.filterwarnings( - action='ignore', - message='The format_version method is deprecated', - category=DeprecationWarning) -warnings.filterwarnings( - action='ignore', - message='The print_version method is deprecated', - category=DeprecationWarning) - class TestCase(unittest.TestCase): @@ -4204,7 +4182,28 @@ self.failUnless(hasattr(argparse, name)) def test_main(): - test_support.run_unittest(__name__) + with warnings.catch_warnings(): + # silence Python 2.6 buggy warnings about Exception.message + warnings.filterwarnings( + action='ignore', + message='BaseException.message has been deprecated as of' + 'Python 2.6', + category=DeprecationWarning) + # silence warnings about version argument - these are expected + warnings.filterwarnings( + action='ignore', + message='The "version" argument to ArgumentParser is deprecated.', + category=DeprecationWarning) + warnings.filterwarnings( + action='ignore', + message='The format_version method is deprecated', + category=DeprecationWarning) + warnings.filterwarnings( + action='ignore', + message='The print_version method is deprecated', + category=DeprecationWarning) + + test_support.run_unittest(__name__) if __name__ == '__main__': From python-checkins at python.org Tue Mar 2 23:24:30 2010 From: python-checkins at python.org (benjamin.peterson) Date: Tue, 2 Mar 2010 23:24:30 +0100 (CET) Subject: [Python-checkins] r78592 - python/trunk/Lib/test/test_argparse.py Message-ID: <20100302222430.7D2ABDE47@mail.python.org> Author: benjamin.peterson Date: Tue Mar 2 23:24:30 2010 New Revision: 78592 Log: use test_main() in __main__ section Modified: python/trunk/Lib/test/test_argparse.py Modified: python/trunk/Lib/test/test_argparse.py ============================================================================== --- python/trunk/Lib/test/test_argparse.py (original) +++ python/trunk/Lib/test/test_argparse.py Tue Mar 2 23:24:30 2010 @@ -4207,4 +4207,4 @@ if __name__ == '__main__': - unittest.main() + test_main() From python-checkins at python.org Tue Mar 2 23:26:25 2010 From: python-checkins at python.org (benjamin.peterson) Date: Tue, 2 Mar 2010 23:26:25 +0100 (CET) Subject: [Python-checkins] r78593 - python/trunk/Lib/test/test_argparse.py Message-ID: <20100302222625.928D4C645@mail.python.org> Author: benjamin.peterson Date: Tue Mar 2 23:26:25 2010 New Revision: 78593 Log: convert deprecated fail* methods to assert* variants Modified: python/trunk/Lib/test/test_argparse.py Modified: python/trunk/Lib/test/test_argparse.py ============================================================================== --- python/trunk/Lib/test/test_argparse.py (original) +++ python/trunk/Lib/test/test_argparse.py Tue Mar 2 23:26:25 2010 @@ -1872,7 +1872,7 @@ parser.add_argument('baz') expected = NS(foo='1', bar='2', baz='3') result = parser.parse_args('1 2 3'.split()) - self.failUnlessEqual(expected, result) + self.assertEqual(expected, result) def test_group_first(self): parser = ErrorRaisingArgumentParser() @@ -1882,7 +1882,7 @@ parser.add_argument('baz') expected = NS(foo='1', bar='2', baz='3') result = parser.parse_args('1 2 3'.split()) - self.failUnlessEqual(expected, result) + self.assertEqual(expected, result) def test_interleaved_groups(self): parser = ErrorRaisingArgumentParser() @@ -1894,7 +1894,7 @@ group.add_argument('frell') expected = NS(foo='1', bar='2', baz='3', frell='4') result = parser.parse_args('1 2 3 4'.split()) - self.failUnlessEqual(expected, result) + self.assertEqual(expected, result) # =================== # Parent parser tests @@ -3763,7 +3763,7 @@ e = sys.exc_info()[1] expected = 'unknown action' msg = 'expected %r, found %r' % (expected, e) - self.failUnless(expected in str(e), msg) + self.assertTrue(expected in str(e), msg) def test_multiple_dest(self): parser = argparse.ArgumentParser() @@ -3774,7 +3774,7 @@ e = sys.exc_info()[1] expected = 'dest supplied twice for positional argument' msg = 'expected %r, found %r' % (expected, e) - self.failUnless(expected in str(e), msg) + self.assertTrue(expected in str(e), msg) def test_no_argument_actions(self): for action in ['store_const', 'store_true', 'store_false', @@ -4091,10 +4091,10 @@ self.assertNotEqual(ns1, ns4) self.assertNotEqual(ns2, ns3) self.assertNotEqual(ns2, ns4) - self.failUnless(ns1 != ns3) - self.failUnless(ns1 != ns4) - self.failUnless(ns2 != ns3) - self.failUnless(ns2 != ns4) + self.assertTrue(ns1 != ns3) + self.assertTrue(ns1 != ns4) + self.assertTrue(ns2 != ns3) + self.assertTrue(ns2 != ns4) # =================== @@ -4123,7 +4123,7 @@ def test_argument_error(self): msg = "my error here" error = argparse.ArgumentError(None, msg) - self.failUnlessEqual(str(error), msg) + self.assertEqual(str(error), msg) # ======================= # ArgumentTypeError tests @@ -4143,7 +4143,7 @@ except ArgumentParserError: expected = 'usage: PROG x\nPROG: error: argument x: spam!\n' msg = sys.exc_info()[1].stderr - self.failUnlessEqual(expected, msg) + self.assertEqual(expected, msg) else: self.fail() @@ -4157,8 +4157,8 @@ parser = argparse.ArgumentParser() parser.add_argument('--foo') args, extras = parser.parse_known_args('--foo F --bar --baz'.split()) - self.failUnlessEqual(NS(foo='F'), args) - self.failUnlessEqual(['--bar', '--baz'], extras) + self.assertEqual(NS(foo='F'), args) + self.assertEqual(['--bar', '--baz'], extras) def test_mixed(self): parser = argparse.ArgumentParser() @@ -4168,8 +4168,8 @@ argv = ["B", "C", "--foo", "-v", "3", "4"] args, extras = parser.parse_known_args(argv) - self.failUnlessEqual(NS(v=3, spam=True, badger="B"), args) - self.failUnlessEqual(["C", "--foo", "4"], extras) + self.assertEqual(NS(v=3, spam=True, badger="B"), args) + self.assertEqual(["C", "--foo", "4"], extras) # ============================ # from argparse import * tests @@ -4179,7 +4179,7 @@ def test(self): for name in argparse.__all__: - self.failUnless(hasattr(argparse, name)) + self.assertTrue(hasattr(argparse, name)) def test_main(): with warnings.catch_warnings(): From python-checkins at python.org Tue Mar 2 23:34:11 2010 From: python-checkins at python.org (florent.xicluna) Date: Tue, 2 Mar 2010 23:34:11 +0100 (CET) Subject: [Python-checkins] r78594 - in python/trunk: Lib/test/test_pep277.py Misc/NEWS Message-ID: <20100302223411.CB19BEE98C@mail.python.org> Author: florent.xicluna Date: Tue Mar 2 23:34:11 2010 New Revision: 78594 Log: Test test_pep277 is only relevant for Unicode-friendly filesystems. Modified: python/trunk/Lib/test/test_pep277.py python/trunk/Misc/NEWS Modified: python/trunk/Lib/test/test_pep277.py ============================================================================== --- python/trunk/Lib/test/test_pep277.py (original) +++ python/trunk/Lib/test/test_pep277.py Tue Mar 2 23:34:11 2010 @@ -2,9 +2,6 @@ # open, os.open, os.stat. os.listdir, os.rename, os.remove, os.mkdir, os.chdir, os.rmdir import sys, os, unittest from test import test_support -## There's no obvious reason to skip these tests on POSIX systems -# if not os.path.supports_unicode_filenames: -# raise unittest.SkipTest, "test works only on NT+" filenames = [ 'abc', @@ -37,7 +34,12 @@ except OSError: pass for name in self.files: - f = open(name, 'w') + try: + f = open(name, 'w') + except UnicodeEncodeError: + if not os.path.supports_unicode_filenames: + raise unittest.SkipTest("test works only on NT+, and with " + "pseudo-Unicode filesystems") f.write((name+'\n').encode("utf-8")) f.close() os.stat(name) Modified: python/trunk/Misc/NEWS ============================================================================== --- python/trunk/Misc/NEWS (original) +++ python/trunk/Misc/NEWS Tue Mar 2 23:34:11 2010 @@ -106,7 +106,8 @@ Tests ----- -- Issue #767675: enable test_pep277 on all platforms. +- Issue #767675: enable test_pep277 on POSIX platforms with Unicode-friendly + filesystem encoding. - Issue #6292: for the moment at least, the test suite runs cleanly if python is run with the -OO flag. Tests requiring docstrings are skipped. From python-checkins at python.org Tue Mar 2 23:34:38 2010 From: python-checkins at python.org (benjamin.peterson) Date: Tue, 2 Mar 2010 23:34:38 +0100 (CET) Subject: [Python-checkins] r78595 - in python/branches/py3k: Doc/library/argparse.rst Lib/argparse.py Lib/test/test_argparse.py Message-ID: <20100302223438.46037EE98C@mail.python.org> Author: benjamin.peterson Date: Tue Mar 2 23:34:37 2010 New Revision: 78595 Log: Merged revisions 78586-78593 via svnmerge from svn+ssh://pythondev at svn.python.org/python/trunk ........ r78586 | benjamin.peterson | 2010-03-02 16:03:03 -0600 (Tue, 02 Mar 2010) | 1 line remove coding cookie as mandated by PEP 8 ........ r78587 | benjamin.peterson | 2010-03-02 16:05:59 -0600 (Tue, 02 Mar 2010) | 1 line set svn:eol-style ........ r78588 | benjamin.peterson | 2010-03-02 16:08:40 -0600 (Tue, 02 Mar 2010) | 1 line remove another coding cookie ........ r78589 | georg.brandl | 2010-03-02 16:17:38 -0600 (Tue, 02 Mar 2010) | 1 line Add some x-refs. ........ r78590 | benjamin.peterson | 2010-03-02 16:20:10 -0600 (Tue, 02 Mar 2010) | 1 line enable running of argparse tests and fix two that failed in the new environment ........ r78591 | benjamin.peterson | 2010-03-02 16:23:33 -0600 (Tue, 02 Mar 2010) | 1 line prevent warning filter adjustment from altering other tests ........ r78592 | benjamin.peterson | 2010-03-02 16:24:30 -0600 (Tue, 02 Mar 2010) | 1 line use test_main() in __main__ section ........ r78593 | benjamin.peterson | 2010-03-02 16:26:25 -0600 (Tue, 02 Mar 2010) | 1 line convert deprecated fail* methods to assert* variants ........ Modified: python/branches/py3k/ (props changed) python/branches/py3k/Doc/library/argparse.rst (contents, props changed) python/branches/py3k/Lib/argparse.py (contents, props changed) python/branches/py3k/Lib/test/test_argparse.py (contents, props changed) Modified: python/branches/py3k/Doc/library/argparse.rst ============================================================================== --- python/branches/py3k/Doc/library/argparse.rst (original) +++ python/branches/py3k/Doc/library/argparse.rst Tue Mar 2 23:34:37 2010 @@ -1,1758 +1,1755 @@ -:mod:`argparse` -- Parser for command line options, arguments and sub-commands -============================================================================== - -.. module:: argparse - :synopsis: Command-line option and argument parsing library. -.. moduleauthor:: Steven Bethard -.. versionadded:: 2.7 -.. sectionauthor:: Steven Bethard - - -The :mod:`argparse` module makes it easy to write user friendly command line -interfaces. You define what arguments your program requires, and -:mod:`argparse` will figure out how to parse those out of ``sys.argv``. The -:mod:`argparse` module also automatically generates help and usage messages -based on the arguments you have defined, and issues errors when users give your -program invalid arguments. - -Example -------- - -As an example, the following code is a Python program that takes a list of -integers and produces either the sum or the max:: - - import argparse - - parser = argparse.ArgumentParser(description='Process some integers.') - parser.add_argument('integers', metavar='N', type=int, nargs='+', - help='an integer for the accumulator') - parser.add_argument('--sum', dest='accumulate', action='store_const', - const=sum, default=max, - help='sum the integers (default: find the max)') - - args = parser.parse_args() - print args.accumulate(args.integers) - -Assuming the Python code above is saved into a file called ``prog.py``, it can -be run at the command line and provides useful help messages:: - - $ prog.py -h - usage: prog.py [-h] [--sum] N [N ...] - - Process some integers. - - positional arguments: - N an integer for the accumulator - - optional arguments: - -h, --help show this help message and exit - --sum sum the integers (default: find the max) - -When run with the appropriate arguments, it prints either the sum or the max of -the command-line integers:: - - $ prog.py 1 2 3 4 - 4 - - $ prog.py 1 2 3 4 --sum - 10 - -If invalid arguments are passed in, it will issue an error:: - - $ prog.py a b c - usage: prog.py [-h] [--sum] N [N ...] - prog.py: error: argument N: invalid int value: 'a' - -The following sections walk you through this example. - -Creating a parser -^^^^^^^^^^^^^^^^^ - -Pretty much every script that uses the :mod:`argparse` module will start out by -creating an :class:`ArgumentParser` object:: - - >>> parser = argparse.ArgumentParser(description='Process some integers.') - -The :class:`ArgumentParser` object will hold all the information necessary to -parse the command line into a more manageable form for your program. - - -Adding arguments -^^^^^^^^^^^^^^^^ - -Once you've created an :class:`ArgumentParser`, you'll want to fill it with -information about your program arguments. You typically do this by making calls -to the :meth:`add_argument` method. Generally, these calls tell the -:class:`ArgumentParser` how to take the strings on the command line and turn -them into objects for you. This information is stored and used when -:meth:`parse_args` is called. For example, if we add some arguments like this:: - - >>> parser.add_argument('integers', metavar='N', type=int, nargs='+', - ... help='an integer for the accumulator') - >>> parser.add_argument('--sum', dest='accumulate', action='store_const', - ... const=sum, default=max, - ... help='sum the integers (default: find the max)') - -when we later call :meth:`parse_args`, we can expect it to return an object -with two attributes, ``integers`` and ``accumulate``. The ``integers`` -attribute will be a list of one or more ints, and the ``accumulate`` attribute -will be either the ``sum`` function, if ``--sum`` was specified at the command -line, or the ``max`` function if it was not. - -Parsing arguments -^^^^^^^^^^^^^^^^^ - -Once an :class:`ArgumentParser` has been initialized with appropriate calls to -:meth:`add_argument`, it can be instructed to parse the command-line args by -calling the :meth:`parse_args` method. This will inspect the command-line, -convert each arg to the appropriate type and then invoke the appropriate -action. In most cases, this means a simple namespace object will be built up -from attributes parsed out of the command-line:: - - >>> parser.parse_args(['--sum', '7', '-1', '42']) - Namespace(accumulate=, integers=[7, -1, 42]) - -In a script, :meth:`parse_args` will typically be called with no arguments, and -the :class:`ArgumentParser` will automatically determine the command-line args -from ``sys.argv``. That's pretty much it. You're now ready to go write some -command line interfaces! - - -ArgumentParser objects ----------------------- - -.. class:: ArgumentParser([description], [epilog], [prog], [usage], [add_help], [argument_default], [parents], [prefix_chars], [conflict_handler], [formatter_class]) - - Create a new :class:`ArgumentParser` object. Each parameter has its own more - detailed description below, but in short they are: - - * description_ - Text to display before the argument help. - - * epilog_ - Text to display after the argument help. - - * add_help_ - Add a -h/--help option to the parser. (default: True) - - * argument_default_ - Set the global default value for arguments. - (default: None) - - * parents_ - A list of :class:ArgumentParser objects whose arguments should - also be included. - - * prefix_chars_ - The set of characters that prefix optional arguments. - (default: '-') - - * fromfile_prefix_chars_ - The set of characters that prefix files from - which additional arguments should be read. (default: None) - - * formatter_class_ - A class for customizing the help output. - - * conflict_handler_ - Usually unnecessary, defines strategy for resolving - conflicting optionals. - - * prog_ - Usually unnecessary, the name of the program - (default: ``sys.argv[0]``) - - * usage_ - Usually unnecessary, the string describing the program usage - (default: generated) - - The following sections describe how each of these are used. - - -description -^^^^^^^^^^^ - -Most calls to the ArgumentParser constructor will use the ``description=`` -keyword argument. This argument gives a brief description of what the program -does and how it works. In help messages, the description is displayed between -the command-line usage string and the help messages for the various arguments:: - - >>> parser = argparse.ArgumentParser(description='A foo that bars') - >>> parser.print_help() - usage: argparse.py [-h] - - A foo that bars - - optional arguments: - -h, --help show this help message and exit - -By default, the description will be line-wrapped so that it fits within the -given space. To change this behavior, see the formatter_class_ argument. - - -epilog -^^^^^^ - -Some programs like to display additional description of the program after the -description of the arguments. Such text can be specified using the ``epilog=`` -argument to ArgumentParser:: - - >>> parser = argparse.ArgumentParser( - ... description='A foo that bars', - ... epilog="And that's how you'd foo a bar") - >>> parser.print_help() - usage: argparse.py [-h] - - A foo that bars - - optional arguments: - -h, --help show this help message and exit - - And that's how you'd foo a bar - -As with the description_ argument, the ``epilog=`` text is by default -line-wrapped, but this behavior can be adjusted with the formatter_class_ -argument to ArgumentParser. - - -add_help -^^^^^^^^ - -By default, ArgumentParser objects add a ``-h/--help`` option which simply -displays the parser's help message. For example, consider a file named -``myprogram.py`` containing the following code:: - - import argparse - parser = argparse.ArgumentParser() - parser.add_argument('--foo', help='foo help') - args = parser.parse_args() - -If ``-h`` or ``--help`` is supplied is at the command-line, the ArgumentParser -help will be printed:: - - $ python myprogram.py --help - usage: myprogram.py [-h] [--foo FOO] - - optional arguments: - -h, --help show this help message and exit - --foo FOO foo help - -Occasionally, it may be useful to disable the addition of this help option. -This can be achieved by passing ``False`` as the ``add_help=`` argument to -ArgumentParser:: - - >>> parser = argparse.ArgumentParser(prog='PROG', add_help=False) - >>> parser.add_argument('--foo', help='foo help') - >>> parser.print_help() - usage: PROG [--foo FOO] - - optional arguments: - --foo FOO foo help - - -prefix_chars -^^^^^^^^^^^^ - -Most command-line options will use ``'-'`` as the prefix, e.g. ``-f/--foo``. -Parsers that need to support additional prefix characters, e.g. for options -like ``+f`` or ``/foo``, may specify them using the ``prefix_chars=`` argument -to the ArgumentParser constructor:: - - >>> parser = argparse.ArgumentParser(prog='PROG', prefix_chars='-+') - >>> parser.add_argument('+f') - >>> parser.add_argument('++bar') - >>> parser.parse_args('+f X ++bar Y'.split()) - Namespace(bar='Y', f='X') - -The ``prefix_chars=`` argument defaults to ``'-'``. Supplying a set of -characters that does not include ``'-'`` will cause ``-f/--foo`` options to be -disallowed. - - -fromfile_prefix_chars -^^^^^^^^^^^^^^^^^^^^^ - -Sometimes, e.g. for particularly long argument lists, it may make sense to -keep the list of arguments in a file rather than typing it out at the command -line. If the ``fromfile_prefix_chars=`` argument is given to the ArgumentParser -constructor, then arguments that start with any of the specified characters -will be treated as files, and will be replaced by the arguments they contain. -For example:: - - >>> open('args.txt', 'w').write('-f\nbar') - >>> parser = argparse.ArgumentParser(fromfile_prefix_chars='@') - >>> parser.add_argument('-f') - >>> parser.parse_args(['-f', 'foo', '@args.txt']) - Namespace(f='bar') - -Arguments read from a file must by default be one per line (but see also -:meth:`convert_arg_line_to_args`) and are treated as if they were in the same -place as the original file referencing argument on the command line. So in the -example above, the expression ``['-f', 'foo', '@args.txt']`` is considered -equivalent to the expression ``['-f', 'foo', '-f', 'bar']``. - -The ``fromfile_prefix_chars=`` argument defaults to ``None``, meaning that -arguments will never be treated as file references. - -argument_default -^^^^^^^^^^^^^^^^ - -Generally, argument defaults are specified either by passing a default to -:meth:`add_argument` or by calling the :meth:`set_defaults` methods with a -specific set of name-value pairs. Sometimes however, it may be useful to -specify a single parser-wide default for arguments. This can be accomplished by -passing the ``argument_default=`` keyword argument to ArgumentParser. For -example, to globally suppress attribute creation on :meth:`parse_args` calls, -we supply ``argument_default=SUPPRESS``:: - - >>> parser = argparse.ArgumentParser(argument_default=argparse.SUPPRESS) - >>> parser.add_argument('--foo') - >>> parser.add_argument('bar', nargs='?') - >>> parser.parse_args(['--foo', '1', 'BAR']) - Namespace(bar='BAR', foo='1') - >>> parser.parse_args([]) - Namespace() - - -parents -^^^^^^^ - -Sometimes, several parsers share a common set of arguments. Rather than -repeating the definitions of these arguments, you can define a single parser -with all the shared arguments and then use the ``parents=`` argument to -ArgumentParser to have these "inherited". The ``parents=`` argument takes a -list of ArgumentParser objects, collects all the positional and optional -actions from them, and adds these actions to the ArgumentParser object being -constructed:: - - >>> parent_parser = argparse.ArgumentParser(add_help=False) - >>> parent_parser.add_argument('--parent', type=int) - - >>> foo_parser = argparse.ArgumentParser(parents=[parent_parser]) - >>> foo_parser.add_argument('foo') - >>> foo_parser.parse_args(['--parent', '2', 'XXX']) - Namespace(foo='XXX', parent=2) - - >>> bar_parser = argparse.ArgumentParser(parents=[parent_parser]) - >>> bar_parser.add_argument('--bar') - >>> bar_parser.parse_args(['--bar', 'YYY']) - Namespace(bar='YYY', parent=None) - -Note that most parent parsers will specify ``add_help=False``. Otherwise, the -ArgumentParser will see two ``-h/--help`` options (one in the parent and one in -the child) and raise an error. - - -formatter_class -^^^^^^^^^^^^^^^ - -ArgumentParser objects allow the help formatting to be customized by specifying -an alternate formatting class. Currently, there are three such classes: -``argparse.RawDescriptionHelpFormatter``, ``argparse.RawTextHelpFormatter`` and -``argparse.ArgumentDefaultsHelpFormatter``. The first two allow more control -over how textual descriptions are displayed, while the last automatically adds -information about argument default values. - -By default, ArgumentParser objects line-wrap the description_ and epilog_ texts -in command-line help messages:: - - >>> parser = argparse.ArgumentParser( - ... prog='PROG', - ... description='''this description - ... was indented weird - ... but that is okay''', - ... epilog=''' - ... likewise for this epilog whose whitespace will - ... be cleaned up and whose words will be wrapped - ... across a couple lines''') - >>> parser.print_help() - usage: PROG [-h] - - this description was indented weird but that is okay - - optional arguments: - -h, --help show this help message and exit - - likewise for this epilog whose whitespace will be cleaned up and whose words - will be wrapped across a couple lines - -When you have description_ and epilog_ that is already correctly formatted and -should not be line-wrapped, you can indicate this by passing -``argparse.RawDescriptionHelpFormatter`` as the ``formatter_class=`` argument -to ArgumentParser:: - - >>> parser = argparse.ArgumentParser( - ... prog='PROG', - ... formatter_class=argparse.RawDescriptionHelpFormatter, - ... description=textwrap.dedent('''\ - ... Please do not mess up this text! - ... -------------------------------- - ... I have indented it - ... exactly the way - ... I want it - ... ''')) - >>> parser.print_help() - usage: PROG [-h] - - Please do not mess up this text! - -------------------------------- - I have indented it - exactly the way - I want it - - optional arguments: - -h, --help show this help message and exit - -If you want to maintain whitespace for all sorts of help text (including -argument descriptions), you can use ``argparse.RawTextHelpFormatter``. - -The other formatter class available, -``argparse.ArgumentDefaultsHelpFormatter``, will add information about the -default value of each of the arguments:: - - >>> parser = argparse.ArgumentParser( - ... prog='PROG', - ... formatter_class=argparse.ArgumentDefaultsHelpFormatter) - >>> parser.add_argument('--foo', type=int, default=42, help='FOO!') - >>> parser.add_argument('bar', nargs='*', default=[1, 2, 3], help='BAR!') - >>> parser.print_help() - usage: PROG [-h] [--foo FOO] [bar [bar ...]] - - positional arguments: - bar BAR! (default: [1, 2, 3]) - - optional arguments: - -h, --help show this help message and exit - --foo FOO FOO! (default: 42) - - -conflict_handler -^^^^^^^^^^^^^^^^ - -ArgumentParser objects do not allow two actions with the same option string. -By default, ArgumentParser objects will raise an exception if you try to create -an argument with an option string that is already in use:: - - >>> parser = argparse.ArgumentParser(prog='PROG') - >>> parser.add_argument('-f', '--foo', help='old foo help') - >>> parser.add_argument('--foo', help='new foo help') - Traceback (most recent call last): - .. - ArgumentError: argument --foo: conflicting option string(s): --foo - -Sometimes (e.g. when using parents_) it may be useful to simply override any -older arguments with the same option string. To get this behavior, the value -``'resolve'`` can be supplied to the ``conflict_handler=`` argument of -ArgumentParser:: - - >>> parser = argparse.ArgumentParser(prog='PROG', conflict_handler='resolve') - >>> parser.add_argument('-f', '--foo', help='old foo help') - >>> parser.add_argument('--foo', help='new foo help') - >>> parser.print_help() - usage: PROG [-h] [-f FOO] [--foo FOO] - - optional arguments: - -h, --help show this help message and exit - -f FOO old foo help - --foo FOO new foo help - -Note that ArgumentParser objects only remove an action if all of its option -strings are overridden. So, in the example above, the old ``-f/--foo`` action -is retained as the ``-f`` action, because only the ``--foo`` option string was -overridden. - - -prog -^^^^ - -By default, ArgumentParser objects use ``sys.argv[0]`` to determine how to -display the name of the program in help messages. This default is almost always -what you want because it will make the help messages match what your users have -typed at the command line. For example, consider a file named ``myprogram.py`` -with the following code:: - - import argparse - parser = argparse.ArgumentParser() - parser.add_argument('--foo', help='foo help') - args = parser.parse_args() - -The help for this program will display ``myprogram.py`` as the program name -(regardless of where the program was invoked from):: - - $ python myprogram.py --help - usage: myprogram.py [-h] [--foo FOO] - - optional arguments: - -h, --help show this help message and exit - --foo FOO foo help - $ cd .. - $ python subdir\myprogram.py --help - usage: myprogram.py [-h] [--foo FOO] - - optional arguments: - -h, --help show this help message and exit - --foo FOO foo help - -To change this default behavior, another value can be supplied using the -``prog=`` argument to ArgumentParser:: - - >>> parser = argparse.ArgumentParser(prog='myprogram') - >>> parser.print_help() - usage: myprogram [-h] - - optional arguments: - -h, --help show this help message and exit - -Note that the program name, whether determined from ``sys.argv[0]`` or from the -``prog=`` argument, is available to help messages using the ``%(prog)s`` format -specifier. - -:: - - >>> parser = argparse.ArgumentParser(prog='myprogram') - >>> parser.add_argument('--foo', help='foo of the %(prog)s program') - >>> parser.print_help() - usage: myprogram [-h] [--foo FOO] - - optional arguments: - -h, --help show this help message and exit - --foo FOO foo of the myprogram program - - -usage -^^^^^ - -By default, ArgumentParser objects calculate the usage message from the -arguments it contains:: - - >>> parser = argparse.ArgumentParser(prog='PROG') - >>> parser.add_argument('--foo', nargs='?', help='foo help') - >>> parser.add_argument('bar', nargs='+', help='bar help') - >>> parser.print_help() - usage: PROG [-h] [--foo [FOO]] bar [bar ...] - - positional arguments: - bar bar help - - optional arguments: - -h, --help show this help message and exit - --foo [FOO] foo help - -If the default usage message is not appropriate for your application, you can -supply your own usage message using the ``usage=`` keyword argument to -ArgumentParser:: - - >>> parser = argparse.ArgumentParser(prog='PROG', usage='%(prog)s [options]') - >>> parser.add_argument('--foo', nargs='?', help='foo help') - >>> parser.add_argument('bar', nargs='+', help='bar help') - >>> parser.print_help() - usage: PROG [options] - - positional arguments: - bar bar help - - optional arguments: - -h, --help show this help message and exit - --foo [FOO] foo help - -Note you can use the ``%(prog)s`` format specifier to fill in the program name -in your usage messages. - - -The add_argument() method -------------------------- - -.. method:: add_argument(name or flags..., [action], [nargs], [const], [default], [type], [choices], [required], [help], [metavar], [dest]) - - Define how a single command line argument should be parsed. Each parameter - has its own more detailed description below, but in short they are: - - * `name or flags`_ - Either a name or a list of option strings, e.g. ``foo`` - or ``-f, --foo`` - - * action_ - The basic type of action to be taken when this argument is - encountered at the command-line. - - * nargs_ - The number of command-line arguments that should be consumed. - - * const_ - A constant value required by some action_ and nargs_ selections. - - * default_ - The value produced if the argument is absent from the - command-line. - - * type_ - The type to which the command-line arg should be converted. - - * choices_ - A container of the allowable values for the argument. - - * required_ - Whether or not the command-line option may be omitted - (optionals only). - - * help_ - A brief description of what the argument does. - - * metavar_ - A name for the argument in usage messages. - - * dest_ - The name of the attribute to be added to the object returned by - :meth:`parse_args`. - - The following sections describe how each of these are used. - -name or flags -^^^^^^^^^^^^^ - -The :meth:`add_argument` method needs to know whether you're expecting an -optional argument, e.g. ``-f`` or ``--foo``, or a positional argument, e.g. a -list of filenames. The first arguments passed to :meth:`add_argument` must -therefore be either a series of flags, or a simple argument name. For example, -an optional argument could be created like:: - - >>> parser.add_argument('-f', '--foo') - -while a positional argument could be created like:: - - >>> parser.add_argument('bar') - -When :meth:`parse_args` is called, optional arguments will be identified by the -``-`` prefix, and the remaining arguments will be assumed to be positional:: - - >>> parser = argparse.ArgumentParser(prog='PROG') - >>> parser.add_argument('-f', '--foo') - >>> parser.add_argument('bar') - >>> parser.parse_args(['BAR']) - Namespace(bar='BAR', foo=None) - >>> parser.parse_args(['BAR', '--foo', 'FOO']) - Namespace(bar='BAR', foo='FOO') - >>> parser.parse_args(['--foo', 'FOO']) - usage: PROG [-h] [-f FOO] bar - PROG: error: too few arguments - -action -^^^^^^ - -:class:`ArgumentParser` objects associate command-line args with actions. These -actions can do just about anything with the command-line args associated with -them, though most actions simply add an attribute to the object returned by -:meth:`parse_args`. When you specify a new argument using the -:meth:`add_argument` method, you can indicate how the command-line args should -be handled by specifying the ``action`` keyword argument. The supported actions -are: - -* ``'store'`` - This just stores the argument's value. This is the default - action. For example:: - - >>> parser = argparse.ArgumentParser() - >>> parser.add_argument('--foo') - >>> parser.parse_args('--foo 1'.split()) - Namespace(foo='1') - -* ``'store_const'`` - This stores the value specified by the const_ keyword - argument. Note that the const_ keyword argument defaults to ``None``, so - you'll almost always need to provide a value for it. The ``'store_const'`` - action is most commonly used with optional arguments that specify some sort - of flag. For example:: - - >>> parser = argparse.ArgumentParser() - >>> parser.add_argument('--foo', action='store_const', const=42) - >>> parser.parse_args('--foo'.split()) - Namespace(foo=42) - -* ``'store_true'`` and ``'store_false'`` - These store the values ``True`` and - ``False`` respectively. These are basically special cases of - ``'store_const'``. For example:: - - >>> parser = argparse.ArgumentParser() - >>> parser.add_argument('--foo', action='store_true') - >>> parser.add_argument('--bar', action='store_false') - >>> parser.parse_args('--foo --bar'.split()) - Namespace(bar=False, foo=True) - -* ``'append'`` - This stores a list, and appends each argument value to the - list. This is useful when you want to allow an option to be specified - multiple times. Example usage:: - - >>> parser = argparse.ArgumentParser() - >>> parser.add_argument('--foo', action='append') - >>> parser.parse_args('--foo 1 --foo 2'.split()) - Namespace(foo=['1', '2']) - -* ``'append_const'`` - This stores a list, and appends the value specified by - the const_ keyword argument to the list. Note that the const_ keyword - argument defaults to ``None``, so you'll almost always need to provide a - value for it. The ``'append_const'`` action is typically useful when you - want multiple arguments to store constants to the same list, for example:: - - >>> parser = argparse.ArgumentParser() - >>> parser.add_argument('--str', dest='types', action='append_const', const=str) - >>> parser.add_argument('--int', dest='types', action='append_const', const=int) - >>> parser.parse_args('--str --int'.split()) - Namespace(types=[, ]) - -* ``'version'`` - This expects a ``version=`` keyword argument in the - :meth:`add_argument` call, and prints version information and exits when - invoked. - - >>> import argparse - >>> parser = argparse.ArgumentParser(prog='PROG') - >>> parser.add_argument('-v', '--version', action='version', version='%(prog)s 2.0') - >>> parser.parse_args(['-v']) - PROG 2.0 - -You can also specify an arbitrary action by passing an object that implements -the Action API. The easiest way to do this is to extend ``argparse.Action``, -supplying an appropriate ``__call__`` method. The ``__call__`` method accepts -four parameters: - -* ``parser`` - The ArgumentParser object which contains this action. - -* ``namespace`` - The namespace object that will be returned by - :meth:`parse_args`. Most actions add an attribute to this object. - -* ``values`` - The associated command-line args, with any type-conversions - applied. (Type-conversions are specified with the type_ keyword argument to - :meth:`add_argument`. - -* ``option_string`` - The option string that was used to invoke this action. - The ``option_string`` argument is optional, and will be absent if the action - is associated with a positional argument. - -So for example:: - - >>> class FooAction(argparse.Action): - ... def __call__(self, parser, namespace, values, option_string=None): - ... print '%r %r %r' % (namespace, values, option_string) - ... setattr(namespace, self.dest, values) - ... - >>> parser = argparse.ArgumentParser() - >>> parser.add_argument('--foo', action=FooAction) - >>> parser.add_argument('bar', action=FooAction) - >>> args = parser.parse_args('1 --foo 2'.split()) - Namespace(bar=None, foo=None) '1' None - Namespace(bar='1', foo=None) '2' '--foo' - >>> args - Namespace(bar='1', foo='2') - - -nargs -^^^^^ - -ArgumentParser objects usually associate a single command-line argument with a -single action to be taken. In the situations where you'd like to associate a -different number of command-line arguments with a single action, you can use -the ``nargs`` keyword argument to :meth:`add_argument`. The supported values -are: - -* N (an integer). N args from the command-line will be gathered together into - a list. For example:: - - >>> parser = argparse.ArgumentParser() - >>> parser.add_argument('--foo', nargs=2) - >>> parser.add_argument('bar', nargs=1) - >>> parser.parse_args('c --foo a b'.split()) - Namespace(bar=['c'], foo=['a', 'b']) - - Note that ``nargs=1`` produces a list of one item. This is different from - the default, in which the item is produced by itself. - -* ``'?'``. One arg will be consumed from the command-line if possible, and - produced as a single item. If no command-line arg is present, the value from - default_ will be produced. Note that for optional arguments, there is an - additional case - the option string is present but not followed by a - command-line arg. In this case the value from const_ will be produced. Some - examples to illustrate this:: - - >>> parser = argparse.ArgumentParser() - >>> parser.add_argument('--foo', nargs='?', const='c', default='d') - >>> parser.add_argument('bar', nargs='?', default='d') - >>> parser.parse_args('XX --foo YY'.split()) - Namespace(bar='XX', foo='YY') - >>> parser.parse_args('XX --foo'.split()) - Namespace(bar='XX', foo='c') - >>> parser.parse_args(''.split()) - Namespace(bar='d', foo='d') - - One of the more common uses of ``nargs='?'`` is to allow optional input and - output files:: - - >>> parser = argparse.ArgumentParser() - >>> parser.add_argument('infile', nargs='?', type=argparse.FileType('r'), default=sys.stdin) - >>> parser.add_argument('outfile', nargs='?', type=argparse.FileType('w'), default=sys.stdout) - >>> parser.parse_args(['input.txt', 'output.txt']) - Namespace(infile=, outfile=) - >>> parser.parse_args([]) - Namespace(infile=', mode 'r' at 0x...>, outfile=', mode 'w' at 0x...>) - -* ``'*'``. All command-line args present are gathered into a list. Note that - it generally doesn't make much sense to have more than one positional - argument with ``nargs='*'``, but multiple optional arguments with - ``nargs='*'`` is possible. For example:: - - >>> parser = argparse.ArgumentParser() - >>> parser.add_argument('--foo', nargs='*') - >>> parser.add_argument('--bar', nargs='*') - >>> parser.add_argument('baz', nargs='*') - >>> parser.parse_args('a b --foo x y --bar 1 2'.split()) - Namespace(bar=['1', '2'], baz=['a', 'b'], foo=['x', 'y']) - -* ``'+'``. Just like ``'*'``, all command-line args present are gathered into a - list. Additionally, an error message will be generated if there wasn't at - least one command-line arg present. For example:: - - >>> parser = argparse.ArgumentParser(prog='PROG') - >>> parser.add_argument('foo', nargs='+') - >>> parser.parse_args('a b'.split()) - Namespace(foo=['a', 'b']) - >>> parser.parse_args(''.split()) - usage: PROG [-h] foo [foo ...] - PROG: error: too few arguments - -If the ``nargs`` keyword argument is not provided, the number of args consumed -is determined by the action_. Generally this means a single command-line arg -will be consumed and a single item (not a list) will be produced. - - -const -^^^^^ - -The ``const`` argument of :meth:`add_argument` is used to hold constant values -that are not read from the command line but are required for the various -ArgumentParser actions. The two most common uses of it are: - -* When :meth:`add_argument` is called with ``action='store_const'`` or - ``action='append_const'``. These actions add the ``const`` value to one of - the attributes of the object returned by :meth:`parse_args`. See the action_ - description for examples. - -* When :meth:`add_argument` is called with option strings (like ``-f`` or - ``--foo``) and ``nargs='?'``. This creates an optional argument that can be - followed by zero or one command-line args. When parsing the command-line, if - the option string is encountered with no command-line arg following it, the - value of ``const`` will be assumed instead. See the nargs_ description for - examples. - -The ``const`` keyword argument defaults to ``None``. - - -default -^^^^^^^ - -All optional arguments and some positional arguments may be omitted at the -command-line. The ``default`` keyword argument of :meth:`add_argument`, whose -value defaults to ``None``, specifies what value should be used if the -command-line arg is not present. For optional arguments, the ``default`` value -is used when the option string was not present at the command line:: - - >>> parser = argparse.ArgumentParser() - >>> parser.add_argument('--foo', default=42) - >>> parser.parse_args('--foo 2'.split()) - Namespace(foo='2') - >>> parser.parse_args(''.split()) - Namespace(foo=42) - -For positional arguments with nargs_ ``='?'`` or ``'*'``, the ``default`` value -is used when no command-line arg was present:: - - >>> parser = argparse.ArgumentParser() - >>> parser.add_argument('foo', nargs='?', default=42) - >>> parser.parse_args('a'.split()) - Namespace(foo='a') - >>> parser.parse_args(''.split()) - Namespace(foo=42) - - -If you don't want to see an attribute when an option was not present at the -command line, you can supply ``default=argparse.SUPPRESS``:: - - >>> parser = argparse.ArgumentParser() - >>> parser.add_argument('--foo', default=argparse.SUPPRESS) - >>> parser.parse_args([]) - Namespace() - >>> parser.parse_args(['--foo', '1']) - Namespace(foo='1') - - -type -^^^^ - -By default, ArgumentParser objects read command-line args in as simple strings. -However, quite often the command-line string should instead be interpreted as -another type, e.g. ``float``, ``int`` or ``file``. The ``type`` keyword -argument of :meth:`add_argument` allows any necessary type-checking and -type-conversions to be performed. Many common builtin types can be used -directly as the value of the ``type`` argument:: - - >>> parser = argparse.ArgumentParser() - >>> parser.add_argument('foo', type=int) - >>> parser.add_argument('bar', type=file) - >>> parser.parse_args('2 temp.txt'.split()) - Namespace(bar=, foo=2) - -To ease the use of various types of files, the argparse module provides the -factory FileType which takes the ``mode=`` and ``bufsize=`` arguments of the -``file`` object. For example, ``FileType('w')`` can be used to create a -writable file:: - - >>> parser = argparse.ArgumentParser() - >>> parser.add_argument('bar', type=argparse.FileType('w')) - >>> parser.parse_args(['out.txt']) - Namespace(bar=) - -If you need to do some special type-checking or type-conversions, you can -provide your own types by passing to ``type=`` a callable that takes a single -string argument and returns the type-converted value:: - - >>> def perfect_square(string): - ... value = int(string) - ... sqrt = math.sqrt(value) - ... if sqrt != int(sqrt): - ... msg = "%r is not a perfect square" % string - ... raise argparse.ArgumentTypeError(msg) - ... return value - ... - >>> parser = argparse.ArgumentParser(prog='PROG') - >>> parser.add_argument('foo', type=perfect_square) - >>> parser.parse_args('9'.split()) - Namespace(foo=9) - >>> parser.parse_args('7'.split()) - usage: PROG [-h] foo - PROG: error: argument foo: '7' is not a perfect square - -Note that if your type-checking function is just checking for a particular set -of values, it may be more convenient to use the choices_ keyword argument:: - - >>> parser = argparse.ArgumentParser(prog='PROG') - >>> parser.add_argument('foo', type=int, choices=xrange(5, 10)) - >>> parser.parse_args('7'.split()) - Namespace(foo=7) - >>> parser.parse_args('11'.split()) - usage: PROG [-h] {5,6,7,8,9} - PROG: error: argument foo: invalid choice: 11 (choose from 5, 6, 7, 8, 9) - -See the choices_ section for more details. - - -choices -^^^^^^^ - -Some command-line args should be selected from a restricted set of values. -ArgumentParser objects can be told about such sets of values by passing a -container object as the ``choices`` keyword argument to :meth:`add_argument`. -When the command-line is parsed with :meth:`parse_args`, arg values will be -checked, and an error message will be displayed if the arg was not one of the -acceptable values:: - - >>> parser = argparse.ArgumentParser(prog='PROG') - >>> parser.add_argument('foo', choices='abc') - >>> parser.parse_args('c'.split()) - Namespace(foo='c') - >>> parser.parse_args('X'.split()) - usage: PROG [-h] {a,b,c} - PROG: error: argument foo: invalid choice: 'X' (choose from 'a', 'b', 'c') - -Note that inclusion in the ``choices`` container is checked after any type_ -conversions have been performed, so the type of the objects in the ``choices`` -container should match the type_ specified:: - - >>> parser = argparse.ArgumentParser(prog='PROG') - >>> parser.add_argument('foo', type=complex, choices=[1, 1j]) - >>> parser.parse_args('1j'.split()) - Namespace(foo=1j) - >>> parser.parse_args('-- -4'.split()) - usage: PROG [-h] {1,1j} - PROG: error: argument foo: invalid choice: (-4+0j) (choose from 1, 1j) - -Any object that supports the ``in`` operator can be passed as the ``choices`` -value, so ``dict`` objects, ``set`` objects, custom containers, etc. are all -supported. - - -required -^^^^^^^^ - -In general, the argparse module assumes that flags like ``-f`` and ``--bar`` -indicate *optional* arguments, which can always be omitted at the command-line. -To change this behavior, i.e. to make an option *required*, the value ``True`` -should be specified for the ``required=`` keyword argument to -:meth:`add_argument`:: - - >>> parser = argparse.ArgumentParser() - >>> parser.add_argument('--foo', required=True) - >>> parser.parse_args(['--foo', 'BAR']) - Namespace(foo='BAR') - >>> parser.parse_args([]) - usage: argparse.py [-h] [--foo FOO] - argparse.py: error: option --foo is required - -As the example shows, if an option is marked as ``required``, :meth:`parse_args` -will report an error if that option is not present at the command line. - -**Warning:** Required options are generally considered bad form - normal users -expect *options* to be *optional*. You should avoid the use of required options -whenever possible. - - -help -^^^^ - -A great command-line interface isn't worth anything if your users can't figure -out which option does what. So for the end-users, ``help`` is probably the -most important argument to include in your :meth:`add_argument` calls. The -``help`` value should be a string containing a brief description of what the -argument specifies. When a user requests help (usually by using ``-h`` or -``--help`` at the command-line), these ``help`` descriptions will be displayed -with each argument:: - - >>> parser = argparse.ArgumentParser(prog='frobble') - >>> parser.add_argument('--foo', action='store_true', - ... help='foo the bars before frobbling') - >>> parser.add_argument('bar', nargs='+', - ... help='one of the bars to be frobbled') - >>> parser.parse_args('-h'.split()) - usage: frobble [-h] [--foo] bar [bar ...] - - positional arguments: - bar one of the bars to be frobbled - - optional arguments: - -h, --help show this help message and exit - --foo foo the bars before frobbling - -The ``help`` strings can include various format specifiers to avoid repetition -of things like the program name or the argument default_. The available -specifiers include the program name, ``%(prog)s`` and most keyword arguments to -:meth:`add_argument`, e.g. ``%(default)s``, ``%(type)s``, etc.:: - - >>> parser = argparse.ArgumentParser(prog='frobble') - >>> parser.add_argument('bar', nargs='?', type=int, default=42, - ... help='the bar to %(prog)s (default: %(default)s)') - >>> parser.print_help() - usage: frobble [-h] [bar] - - positional arguments: - bar the bar to frobble (default: 42) - - optional arguments: - -h, --help show this help message and exit - - -metavar -^^^^^^^ - -When ArgumentParser objects generate help messages, they need some way to refer -to each expected argument. By default, ArgumentParser objects use the dest_ -value as the "name" of each object. By default, for positional argument -actions, the dest_ value is used directly, and for optional argument actions, -the dest_ value is uppercased. So if we have a single positional argument with -``dest='bar'``, that argument will be referred to as ``bar``. And if we have a -single optional argument ``--foo`` that should be followed by a single -command-line arg, that arg will be referred to as ``FOO``. You can see this -behavior in the example below:: - - >>> parser = argparse.ArgumentParser() - >>> parser.add_argument('--foo') - >>> parser.add_argument('bar') - >>> parser.parse_args('X --foo Y'.split()) - Namespace(bar='X', foo='Y') - >>> parser.print_help() - usage: [-h] [--foo FOO] bar - - positional arguments: - bar - - optional arguments: - -h, --help show this help message and exit - --foo FOO - -If you would like to provide a different name for your argument in help -messages, you can supply a value for the ``metavar`` keyword argument to -:meth:`add_argument`:: - - >>> parser = argparse.ArgumentParser() - >>> parser.add_argument('--foo', metavar='YYY') - >>> parser.add_argument('bar', metavar='XXX') - >>> parser.parse_args('X --foo Y'.split()) - Namespace(bar='X', foo='Y') - >>> parser.print_help() - usage: [-h] [--foo YYY] XXX - - positional arguments: - XXX - - optional arguments: - -h, --help show this help message and exit - --foo YYY - -Note that ``metavar`` only changes the *displayed* name - the name of the -attribute on the :meth:`parse_args` object is still determined by the dest_ -value. - -Different values of ``nargs`` may cause the metavar to be used multiple times. -If you'd like to specify a different display name for each of the arguments, -you can provide a tuple to ``metavar``:: - - >>> parser = argparse.ArgumentParser(prog='PROG') - >>> parser.add_argument('-x', nargs=2) - >>> parser.add_argument('--foo', nargs=2, metavar=('bar', 'baz')) - >>> parser.print_help() - usage: PROG [-h] [-x X X] [--foo bar baz] - - optional arguments: - -h, --help show this help message and exit - -x X X - --foo bar baz - - -dest -^^^^ - -Most ArgumentParser actions add some value as an attribute of the object -returned by :meth:`parse_args`. The name of this attribute is determined by the -``dest`` keyword argument of :meth:`add_argument`. For positional argument -actions, ``dest`` is normally supplied as the first argument to -:meth:`add_argument`:: - - >>> parser = argparse.ArgumentParser() - >>> parser.add_argument('bar') - >>> parser.parse_args('XXX'.split()) - Namespace(bar='XXX') - -For optional argument actions, the value of ``dest`` is normally inferred from -the option strings. ArgumentParser objects generate the value of ``dest`` by -taking the first long option string and stripping away the initial ``'--'`` -string. If no long option strings were supplied, ``dest`` will be derived from -the first short option string by stripping the initial ``'-'`` character. Any -internal ``'-'`` characters will be converted to ``'_'`` characters to make -sure the string is a valid attribute name. The examples below illustrate this -behavior:: - - >>> parser = argparse.ArgumentParser() - >>> parser.add_argument('-f', '--foo-bar', '--foo') - >>> parser.add_argument('-x', '-y') - >>> parser.parse_args('-f 1 -x 2'.split()) - Namespace(foo_bar='1', x='2') - >>> parser.parse_args('--foo 1 -y 2'.split()) - Namespace(foo_bar='1', x='2') - -If you would like to use a different attribute name from the one automatically -inferred by the ArgumentParser, you can supply it with an explicit ``dest`` -parameter:: - - >>> parser = argparse.ArgumentParser() - >>> parser.add_argument('--foo', dest='bar') - >>> parser.parse_args('--foo XXX'.split()) - Namespace(bar='XXX') - - -The parse_args() method ------------------------ - -.. method:: parse_args([args], [namespace]) - - Convert the strings to objects and assign them as attributes of the - namespace. Return the populated namespace. - - Previous calls to :meth:`add_argument` determine exactly what objects are - created and how they are assigned. See the documentation for - :meth:`add_argument` for details. - - By default, the arg strings are taken from ``sys.argv``, and a new empty - ``Namespace`` object is created for the attributes. - -Option value syntax -^^^^^^^^^^^^^^^^^^^ - -The :meth:`parse_args` method supports several ways of specifying the value of -an option (if it takes one). In the simplest case, the option and its value are -passed as two separate arguments:: - - >>> parser = argparse.ArgumentParser(prog='PROG') - >>> parser.add_argument('-x') - >>> parser.add_argument('--foo') - >>> parser.parse_args('-x X'.split()) - Namespace(foo=None, x='X') - >>> parser.parse_args('--foo FOO'.split()) - Namespace(foo='FOO', x=None) - -For long options (options with names longer than a single character), you may -also pass the option and value as a single command line argument, using ``=`` -to separate them:: - - >>> parser.parse_args('--foo=FOO'.split()) - Namespace(foo='FOO', x=None) - -For short options (options only one character long), you may simply concatenate -the option and its value:: - - >>> parser.parse_args('-xX'.split()) - Namespace(foo=None, x='X') - -You can also combine several short options together, using only a single ``-`` -prefix, as long as only the last option (or none of them) requires a value:: - - >>> parser = argparse.ArgumentParser(prog='PROG') - >>> parser.add_argument('-x', action='store_true') - >>> parser.add_argument('-y', action='store_true') - >>> parser.add_argument('-z') - >>> parser.parse_args('-xyzZ'.split()) - Namespace(x=True, y=True, z='Z') - - -Invalid arguments -^^^^^^^^^^^^^^^^^ - -While parsing the command-line, ``parse_args`` checks for a variety of errors, -including ambiguous options, invalid types, invalid options, wrong number of -positional arguments, etc. When it encounters such an error, it exits and -prints the error along with a usage message:: - - >>> parser = argparse.ArgumentParser(prog='PROG') - >>> parser.add_argument('--foo', type=int) - >>> parser.add_argument('bar', nargs='?') - - >>> # invalid type - >>> parser.parse_args(['--foo', 'spam']) - usage: PROG [-h] [--foo FOO] [bar] - PROG: error: argument --foo: invalid int value: 'spam' - - >>> # invalid option - >>> parser.parse_args(['--bar']) - usage: PROG [-h] [--foo FOO] [bar] - PROG: error: no such option: --bar - - >>> # wrong number of arguments - >>> parser.parse_args(['spam', 'badger']) - usage: PROG [-h] [--foo FOO] [bar] - PROG: error: extra arguments found: badger - - -Arguments containing ``"-"`` -^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -The ``parse_args`` method attempts to give errors whenever the user has clearly -made a mistake, but some situations are inherently ambiguous. For example, the -command-line arg ``'-1'`` could either be an attempt to specify an option or an -attempt to provide a positional argument. The ``parse_args`` method is cautious -here: positional arguments may only begin with ``'-'`` if they look like -negative numbers and there are no options in the parser that look like negative -numbers:: - - >>> parser = argparse.ArgumentParser(prog='PROG') - >>> parser.add_argument('-x') - >>> parser.add_argument('foo', nargs='?') - - >>> # no negative number options, so -1 is a positional argument - >>> parser.parse_args(['-x', '-1']) - Namespace(foo=None, x='-1') - - >>> # no negative number options, so -1 and -5 are positional arguments - >>> parser.parse_args(['-x', '-1', '-5']) - Namespace(foo='-5', x='-1') - - >>> parser = argparse.ArgumentParser(prog='PROG') - >>> parser.add_argument('-1', dest='one') - >>> parser.add_argument('foo', nargs='?') - - >>> # negative number options present, so -1 is an option - >>> parser.parse_args(['-1', 'X']) - Namespace(foo=None, one='X') - - >>> # negative number options present, so -2 is an option - >>> parser.parse_args(['-2']) - usage: PROG [-h] [-1 ONE] [foo] - PROG: error: no such option: -2 - - >>> # negative number options present, so both -1s are options - >>> parser.parse_args(['-1', '-1']) - usage: PROG [-h] [-1 ONE] [foo] - PROG: error: argument -1: expected one argument - -If you have positional arguments that must begin with ``'-'`` and don't look -like negative numbers, you can insert the pseudo-argument ``'--'`` which tells -``parse_args`` that everything after that is a positional argument:: - - >>> parser.parse_args(['--', '-f']) - Namespace(foo='-f', one=None) - - -Argument abbreviations -^^^^^^^^^^^^^^^^^^^^^^ - -The :meth:`parse_args` method allows you to abbreviate long options if the -abbreviation is unambiguous:: - - >>> parser = argparse.ArgumentParser(prog='PROG') - >>> parser.add_argument('-bacon') - >>> parser.add_argument('-badger') - >>> parser.parse_args('-bac MMM'.split()) - Namespace(bacon='MMM', badger=None) - >>> parser.parse_args('-bad WOOD'.split()) - Namespace(bacon=None, badger='WOOD') - >>> parser.parse_args('-ba BA'.split()) - usage: PROG [-h] [-bacon BACON] [-badger BADGER] - PROG: error: ambiguous option: -ba could match -badger, -bacon - -As you can see above, you will get an error if you pick a prefix that could -refer to more than one option. - - -Beyond ``sys.argv`` -^^^^^^^^^^^^^^^^^^^ - -Sometimes it may be useful to have an ArgumentParser parse args other than -those of ``sys.argv``. This can be accomplished by passing a list of strings -to ``parse_args``. You may have noticed that the examples in the argparse -documentation have made heavy use of this calling style - it is much easier -to use at the interactive prompt:: - - >>> parser = argparse.ArgumentParser() - >>> parser.add_argument( - ... 'integers', metavar='int', type=int, choices=xrange(10), - ... nargs='+', help='an integer in the range 0..9') - >>> parser.add_argument( - ... '--sum', dest='accumulate', action='store_const', const=sum, - ... default=max, help='sum the integers (default: find the max)') - >>> parser.parse_args(['1', '2', '3', '4']) - Namespace(accumulate=, integers=[1, 2, 3, 4]) - >>> parser.parse_args('1 2 3 4 --sum'.split()) - Namespace(accumulate=, integers=[1, 2, 3, 4]) - - -Custom namespaces -^^^^^^^^^^^^^^^^^ - -It may also be useful to have an ArgumentParser assign attributes to an already -existing object, rather than the newly-created Namespace object that is -normally used. This can be achieved by specifying the ``namespace=`` keyword -argument:: - - >>> class C(object): - ... pass - ... - >>> c = C() - >>> parser = argparse.ArgumentParser() - >>> parser.add_argument('--foo') - >>> parser.parse_args(args=['--foo', 'BAR'], namespace=c) - >>> c.foo - 'BAR' - - -Other utilities ---------------- - -Sub-commands -^^^^^^^^^^^^ - -.. method:: add_subparsers() - - A lot of programs split up their functionality into a number of - sub-commands, for example, the ``svn`` program can invoke sub-commands like - ``svn checkout``, ``svn update``, ``svn commit``, etc. Splitting up - functionality this way can be a particularly good idea when a program - performs several different functions which require different kinds of - command-line arguments. ArgumentParser objects support the creation of such - sub-commands with the :meth:`add_subparsers` method. The - :meth:`add_subparsers` method is normally called with no arguments and - returns an special action object. This object has a single method, - ``add_parser``, which takes a command name and any ArgumentParser - constructor arguments, and returns an ArgumentParser object that can be - modified as usual. - - Some example usage:: - - >>> # create the top-level parser - >>> parser = argparse.ArgumentParser(prog='PROG') - >>> parser.add_argument('--foo', action='store_true', help='foo help') - >>> subparsers = parser.add_subparsers(help='sub-command help') - >>> - >>> # create the parser for the "a" command - >>> parser_a = subparsers.add_parser('a', help='a help') - >>> parser_a.add_argument('bar', type=int, help='bar help') - >>> - >>> # create the parser for the "b" command - >>> parser_b = subparsers.add_parser('b', help='b help') - >>> parser_b.add_argument('--baz', choices='XYZ', help='baz help') - >>> - >>> # parse some arg lists - >>> parser.parse_args(['a', '12']) - Namespace(bar=12, foo=False) - >>> parser.parse_args(['--foo', 'b', '--baz', 'Z']) - Namespace(baz='Z', foo=True) - - Note that the object returned by :meth:`parse_args` will only contain - attributes for the main parser and the subparser that was selected by the - command line (and not any other subparsers). So in the example above, when - the ``"a"`` command is specified, only the ``foo`` and ``bar`` attributes - are present, and when the ``"b"`` command is specified, only the ``foo`` and - ``baz`` attributes are present. - - Similarly, when a help message is requested from a subparser, only the help - for that particular parser will be printed. The help message will not - include parent parser or sibling parser messages. (You can however supply a - help message for each subparser command by suppling the ``help=`` argument - to ``add_parser`` as above.) - - :: - - >>> parser.parse_args(['--help']) - usage: PROG [-h] [--foo] {a,b} ... - - positional arguments: - {a,b} sub-command help - a a help - b b help - - optional arguments: - -h, --help show this help message and exit - --foo foo help - - >>> parser.parse_args(['a', '--help']) - usage: PROG a [-h] bar - - positional arguments: - bar bar help - - optional arguments: - -h, --help show this help message and exit - - >>> parser.parse_args(['b', '--help']) - usage: PROG b [-h] [--baz {X,Y,Z}] - - optional arguments: - -h, --help show this help message and exit - --baz {X,Y,Z} baz help - - The :meth:`add_subparsers` method also supports ``title`` and - ``description`` keyword arguments. When either is present, the subparser's - commands will appear in their own group in the help output. For example:: - - >>> parser = argparse.ArgumentParser() - >>> subparsers = parser.add_subparsers(title='subcommands', - ... description='valid subcommands', - ... help='additional help') - >>> subparsers.add_parser('foo') - >>> subparsers.add_parser('bar') - >>> parser.parse_args(['-h']) - usage: [-h] {foo,bar} ... - - optional arguments: - -h, --help show this help message and exit - - subcommands: - valid subcommands - - {foo,bar} additional help - - - One particularly effective way of handling sub-commands is to combine the - use of the :meth:`add_subparsers` method with calls to :meth:`set_defaults` - so that each subparser knows which Python function it should execute. For - example:: - - >>> # sub-command functions - >>> def foo(args): - ... print args.x * args.y - ... - >>> def bar(args): - ... print '((%s))' % args.z - ... - >>> # create the top-level parser - >>> parser = argparse.ArgumentParser() - >>> subparsers = parser.add_subparsers() - >>> - >>> # create the parser for the "foo" command - >>> parser_foo = subparsers.add_parser('foo') - >>> parser_foo.add_argument('-x', type=int, default=1) - >>> parser_foo.add_argument('y', type=float) - >>> parser_foo.set_defaults(func=foo) - >>> - >>> # create the parser for the "bar" command - >>> parser_bar = subparsers.add_parser('bar') - >>> parser_bar.add_argument('z') - >>> parser_bar.set_defaults(func=bar) - >>> - >>> # parse the args and call whatever function was selected - >>> args = parser.parse_args('foo 1 -x 2'.split()) - >>> args.func(args) - 2.0 - >>> - >>> # parse the args and call whatever function was selected - >>> args = parser.parse_args('bar XYZYX'.split()) - >>> args.func(args) - ((XYZYX)) - - This way, you can let :meth:`parse_args` do all the work for you, and then - just call the appropriate function after the argument parsing is complete. - Associating functions with actions like this is typically the easiest way - to handle the different actions for each of your subparsers. However, if you - find it necessary to check the name of the subparser that was invoked, you - can always provide a ``dest`` keyword argument to the :meth:`add_subparsers` - call:: - - >>> parser = argparse.ArgumentParser() - >>> subparsers = parser.add_subparsers(dest='subparser_name') - >>> subparser1 = subparsers.add_parser('1') - >>> subparser1.add_argument('-x') - >>> subparser2 = subparsers.add_parser('2') - >>> subparser2.add_argument('y') - >>> parser.parse_args(['2', 'frobble']) - Namespace(subparser_name='2', y='frobble') - - -FileType objects -^^^^^^^^^^^^^^^^ - -.. class:: FileType(mode='r', bufsize=None) - - The :class:`FileType` factory creates objects that can be passed to the type - argument of :meth:`add_argument`. Arguments that have :class:`FileType` - objects as their type will open command-line args as files with the - requested modes and buffer sizes: - - >>> parser = argparse.ArgumentParser() - >>> parser.add_argument('--output', type=argparse.FileType('wb', 0)) - >>> parser.parse_args(['--output', 'out']) - Namespace(output=) - - FileType objects understand the pseudo-argument ``'-'`` and automatically - convert this into ``sys.stdin`` for readable :class:`FileType` objects and - ``sys.stdout`` for writable :class:`FileType` objects: - - >>> parser = argparse.ArgumentParser() - >>> parser.add_argument('infile', type=argparse.FileType('r')) - >>> parser.parse_args(['-']) - Namespace(infile=', mode 'r' at 0x...>) - - -Argument groups -^^^^^^^^^^^^^^^ - -.. method:: add_argument_group([title], [description]) - - By default, ArgumentParser objects group command-line arguments into - "positional arguments" and "optional arguments" when displaying help - messages. When there is a better conceptual grouping of arguments than this - default one, appropriate groups can be created using the - :meth:`add_argument_group` method:: - - >>> parser = argparse.ArgumentParser(prog='PROG', add_help=False) - >>> group = parser.add_argument_group('group') - >>> group.add_argument('--foo', help='foo help') - >>> group.add_argument('bar', help='bar help') - >>> parser.print_help() - usage: PROG [--foo FOO] bar - - group: - bar bar help - --foo FOO foo help - - The :meth:`add_argument_group` method returns an argument group object which - has an :meth:`add_argument` method just like a regular ArgumentParser - objects. When an argument is added to the group, the parser treats it just - like a normal argument, but displays the argument in a separate group for - help messages. The :meth:`add_argument_group` method accepts ``title`` and - ``description`` arguments which can be used to customize this display:: - - >>> parser = argparse.ArgumentParser(prog='PROG', add_help=False) - >>> group1 = parser.add_argument_group('group1', 'group1 description') - >>> group1.add_argument('foo', help='foo help') - >>> group2 = parser.add_argument_group('group2', 'group2 description') - >>> group2.add_argument('--bar', help='bar help') - >>> parser.print_help() - usage: PROG [--bar BAR] foo - - group1: - group1 description - - foo foo help - - group2: - group2 description - - --bar BAR bar help - - Note that any arguments not in your user defined groups will end up back in - the usual "positional arguments" and "optional arguments" sections. - - -Mutual exclusion -^^^^^^^^^^^^^^^^ - -.. method:: add_mutually_exclusive_group([required=False]) - - Sometimes, you need to make sure that only one of a couple different options - is specified on the command line. You can create groups of such mutually - exclusive arguments using the :meth:`add_mutually_exclusive_group` method. - When :func:`parse_args` is called, argparse will make sure that only one of - the arguments in the mutually exclusive group was present on the command - line:: - - >>> parser = argparse.ArgumentParser(prog='PROG') - >>> group = parser.add_mutually_exclusive_group() - >>> group.add_argument('--foo', action='store_true') - >>> group.add_argument('--bar', action='store_false') - >>> parser.parse_args(['--foo']) - Namespace(bar=True, foo=True) - >>> parser.parse_args(['--bar']) - Namespace(bar=False, foo=False) - >>> parser.parse_args(['--foo', '--bar']) - usage: PROG [-h] [--foo | --bar] - PROG: error: argument --bar: not allowed with argument --foo - - The :meth:`add_mutually_exclusive_group` method also accepts a ``required`` - argument, to indicate that at least one of the mutually exclusive arguments - is required:: - - >>> parser = argparse.ArgumentParser(prog='PROG') - >>> group = parser.add_mutually_exclusive_group(required=True) - >>> group.add_argument('--foo', action='store_true') - >>> group.add_argument('--bar', action='store_false') - >>> parser.parse_args([]) - usage: PROG [-h] (--foo | --bar) - PROG: error: one of the arguments --foo --bar is required - - Note that currently mutually exclusive argument groups do not support the - ``title`` and ``description`` arguments of :meth:`add_argument_group`. This - may change in the future however, so you are *strongly* recommended to - specify ``required`` as a keyword argument if you use it. - - -Parser defaults -^^^^^^^^^^^^^^^ - -.. method:: set_defaults(**kwargs) - - Most of the time, the attributes of the object returned by - :meth:`parse_args` will be fully determined by inspecting the command-line - args and the argument actions described in your :meth:`add_argument` calls. - However, sometimes it may be useful to add some additional attributes that - are determined without any inspection of the command-line. The - :meth:`set_defaults` method allows you to do this:: - - >>> parser = argparse.ArgumentParser() - >>> parser.add_argument('foo', type=int) - >>> parser.set_defaults(bar=42, baz='badger') - >>> parser.parse_args(['736']) - Namespace(bar=42, baz='badger', foo=736) - - Note that parser-level defaults always override argument-level defaults. So - if you set a parser-level default for a name that matches an argument, the - old argument default will no longer be used:: - - >>> parser = argparse.ArgumentParser() - >>> parser.add_argument('--foo', default='bar') - >>> parser.set_defaults(foo='spam') - >>> parser.parse_args([]) - Namespace(foo='spam') - - Parser-level defaults can be particularly useful when you're working with - multiple parsers. See the :meth:`add_subparsers` method for an example of - this type. - -.. method:: get_default(dest) - - Get the default value for a namespace attribute, as set by either - :meth:`add_argument` or by :meth:`set_defaults`:: - - >>> parser = argparse.ArgumentParser() - >>> parser.add_argument('--foo', default='badger') - >>> parser.get_default('foo') - 'badger' - - -Printing help -^^^^^^^^^^^^^ - -In most typical applications, :meth:`parse_args` will take care of formatting -and printing any usage or error messages. However, should you want to format or -print these on your own, several methods are available: - -.. method:: print_usage([file]): - - Print a brief description of how the :class:`ArgumentParser` should be - invoked on the command line. If ``file`` is not present, ``sys.stderr`` is - assumed. - -.. method:: print_help([file]): - - Print a help message, including the program usage and information about the - arguments registered with the :class:`ArgumentParser`. If ``file`` is not - present, ``sys.stderr`` is assumed. - -There are also variants of these methods that simply return a string instead of -printing it: - -.. method:: format_usage(): - - Return a string containing a brief description of how the - :class:`ArgumentParser` should be invoked on the command line. - -.. method:: format_help(): - - Return a string containing a help message, including the program usage and - information about the arguments registered with the :class:`ArgumentParser`. - - - -Partial parsing -^^^^^^^^^^^^^^^ - -.. method:: parse_known_args([args], [namespace]) - -Sometimes a script may only parse a few of the command line arguments, passing -the remaining arguments on to another script or program. In these cases, the -:meth:`parse_known_args` method can be useful. It works much like -:meth:`parse_args` except that it does not produce an error when extra -arguments are present. Instead, it returns a two item tuple containing the -populated namespace and the list of remaining argument strings. - -:: - - >>> parser = argparse.ArgumentParser() - >>> parser.add_argument('--foo', action='store_true') - >>> parser.add_argument('bar') - >>> parser.parse_known_args(['--foo', '--badger', 'BAR', 'spam']) - (Namespace(bar='BAR', foo=True), ['--badger', 'spam']) - - -Customizing file parsing -^^^^^^^^^^^^^^^^^^^^^^^^ - -.. method:: convert_arg_line_to_args(arg_line) - - Arguments that are read from a file (see the ``fromfile_prefix_chars`` - keyword argument to the :class:`ArgumentParser` constructor) are read one - argument per line. If you need fancier parsing, then you can subclass the - :class:`ArgumentParser` and override the :meth:`convert_arg_line_to_args` - method. - - This method takes a single argument ``arg_line`` which is a string read from - the argument file. It returns a list of arguments parsed from this string. - The method is called once per line read from the argument file, in order. - - A useful override of this method is one that treats each space-separated - word as an argument:: - - def convert_arg_line_to_args(self, arg_line): - for arg in arg_line.split(): - if not arg.strip(): - continue - yield arg - - -Upgrading optparse code ------------------------ - -Originally, the argparse module had attempted to maintain compatibility with - optparse. However, optparse was difficult to extend transparently, - particularly with the changes required to support the new ``nargs=`` - specifiers and better usage messges. When most everything in optparse had - either been copy-pasted over or monkey-patched, it no longer seemed practical - to try to maintain the backwards compatibility. - -A partial upgrade path from optparse to argparse: - -* Replace all ``add_option()`` calls with :meth:`add_argument` calls. - -* Replace ``options, args = parser.parse_args()`` with - ``args = parser.parse_args()`` and add additional :meth:`add_argument` calls - for the positional arguments. - -* Replace callback actions and the ``callback_*`` keyword arguments with - ``type`` or ``action`` arguments. - -* Replace string names for ``type`` keyword arguments with the corresponding - type objects (e.g. int, float, complex, etc). - -* Replace ``Values`` with ``Namespace`` and ``OptionError/OptionValueError`` - with ``ArgumentError``. - -* Replace strings with implicit arguments such as ``%default`` or ``%prog`` - with the standard python syntax to use dictionaries to format strings, that - is, ``%(default)s`` and ``%(prog)s``. +:mod:`argparse` -- Parser for command line options, arguments and sub-commands +============================================================================== + +.. module:: argparse + :synopsis: Command-line option and argument parsing library. +.. moduleauthor:: Steven Bethard +.. versionadded:: 2.7 +.. sectionauthor:: Steven Bethard + + +The :mod:`argparse` module makes it easy to write user friendly command line +interfaces. You define what arguments your program requires, and :mod:`argparse` +will figure out how to parse those out of :data:`sys.argv`. The :mod:`argparse` +module also automatically generates help and usage messages based on the +arguments you have defined, and issues errors when users give your program +invalid arguments. + +Example +------- + +As an example, the following code is a Python program that takes a list of +integers and produces either the sum or the max:: + + import argparse + + parser = argparse.ArgumentParser(description='Process some integers.') + parser.add_argument('integers', metavar='N', type=int, nargs='+', + help='an integer for the accumulator') + parser.add_argument('--sum', dest='accumulate', action='store_const', + const=sum, default=max, + help='sum the integers (default: find the max)') + + args = parser.parse_args() + print args.accumulate(args.integers) + +Assuming the Python code above is saved into a file called ``prog.py``, it can +be run at the command line and provides useful help messages:: + + $ prog.py -h + usage: prog.py [-h] [--sum] N [N ...] + + Process some integers. + + positional arguments: + N an integer for the accumulator + + optional arguments: + -h, --help show this help message and exit + --sum sum the integers (default: find the max) + +When run with the appropriate arguments, it prints either the sum or the max of +the command-line integers:: + + $ prog.py 1 2 3 4 + 4 + + $ prog.py 1 2 3 4 --sum + 10 + +If invalid arguments are passed in, it will issue an error:: + + $ prog.py a b c + usage: prog.py [-h] [--sum] N [N ...] + prog.py: error: argument N: invalid int value: 'a' + +The following sections walk you through this example. + +Creating a parser +^^^^^^^^^^^^^^^^^ + +Pretty much every script that uses the :mod:`argparse` module will start out by +creating an :class:`ArgumentParser` object:: + + >>> parser = argparse.ArgumentParser(description='Process some integers.') + +The :class:`ArgumentParser` object will hold all the information necessary to +parse the command line into a more manageable form for your program. + + +Adding arguments +^^^^^^^^^^^^^^^^ + +Once you've created an :class:`ArgumentParser`, you'll want to fill it with +information about your program arguments. You typically do this by making calls +to the :meth:`add_argument` method. Generally, these calls tell the +:class:`ArgumentParser` how to take the strings on the command line and turn +them into objects for you. This information is stored and used when +:meth:`parse_args` is called. For example, if we add some arguments like this:: + + >>> parser.add_argument('integers', metavar='N', type=int, nargs='+', + ... help='an integer for the accumulator') + >>> parser.add_argument('--sum', dest='accumulate', action='store_const', + ... const=sum, default=max, + ... help='sum the integers (default: find the max)') + +when we later call :meth:`parse_args`, we can expect it to return an object with +two attributes, ``integers`` and ``accumulate``. The ``integers`` attribute +will be a list of one or more ints, and the ``accumulate`` attribute will be +either the :func:`sum` function, if ``--sum`` was specified at the command line, +or the :func:`max` function if it was not. + +Parsing arguments +^^^^^^^^^^^^^^^^^ + +Once an :class:`ArgumentParser` has been initialized with appropriate calls to +:meth:`add_argument`, it can be instructed to parse the command-line args by +calling the :meth:`parse_args` method. This will inspect the command-line, +convert each arg to the appropriate type and then invoke the appropriate action. +In most cases, this means a simple namespace object will be built up from +attributes parsed out of the command-line:: + + >>> parser.parse_args(['--sum', '7', '-1', '42']) + Namespace(accumulate=, integers=[7, -1, 42]) + +In a script, :meth:`parse_args` will typically be called with no arguments, and +the :class:`ArgumentParser` will automatically determine the command-line args +from :data:`sys.argv`. That's pretty much it. You're now ready to go write +some command line interfaces! + + +ArgumentParser objects +---------------------- + +.. class:: ArgumentParser([description], [epilog], [prog], [usage], [add_help], [argument_default], [parents], [prefix_chars], [conflict_handler], [formatter_class]) + + Create a new :class:`ArgumentParser` object. Each parameter has its own more + detailed description below, but in short they are: + + * description_ - Text to display before the argument help. + + * epilog_ - Text to display after the argument help. + + * add_help_ - Add a -h/--help option to the parser. (default: True) + + * argument_default_ - Set the global default value for arguments. + (default: None) + + * parents_ - A list of :class:ArgumentParser objects whose arguments should + also be included. + + * prefix_chars_ - The set of characters that prefix optional arguments. + (default: '-') + + * fromfile_prefix_chars_ - The set of characters that prefix files from + which additional arguments should be read. (default: None) + + * formatter_class_ - A class for customizing the help output. + + * conflict_handler_ - Usually unnecessary, defines strategy for resolving + conflicting optionals. + + * prog_ - Usually unnecessary, the name of the program + (default: ``sys.argv[0]``) + + * usage_ - Usually unnecessary, the string describing the program usage + (default: generated) + + The following sections describe how each of these are used. + + +description +^^^^^^^^^^^ + +Most calls to the ArgumentParser constructor will use the ``description=`` +keyword argument. This argument gives a brief description of what the program +does and how it works. In help messages, the description is displayed between +the command-line usage string and the help messages for the various arguments:: + + >>> parser = argparse.ArgumentParser(description='A foo that bars') + >>> parser.print_help() + usage: argparse.py [-h] + + A foo that bars + + optional arguments: + -h, --help show this help message and exit + +By default, the description will be line-wrapped so that it fits within the +given space. To change this behavior, see the formatter_class_ argument. + + +epilog +^^^^^^ + +Some programs like to display additional description of the program after the +description of the arguments. Such text can be specified using the ``epilog=`` +argument to :class:`ArgumentParser`:: + + >>> parser = argparse.ArgumentParser( + ... description='A foo that bars', + ... epilog="And that's how you'd foo a bar") + >>> parser.print_help() + usage: argparse.py [-h] + + A foo that bars + + optional arguments: + -h, --help show this help message and exit + + And that's how you'd foo a bar + +As with the description_ argument, the ``epilog=`` text is by default +line-wrapped, but this behavior can be adjusted with the formatter_class_ +argument to ArgumentParser. + + +add_help +^^^^^^^^ + +By default, ArgumentParser objects add a ``-h/--help`` option which simply +displays the parser's help message. For example, consider a file named +``myprogram.py`` containing the following code:: + + import argparse + parser = argparse.ArgumentParser() + parser.add_argument('--foo', help='foo help') + args = parser.parse_args() + +If ``-h`` or ``--help`` is supplied is at the command-line, the ArgumentParser +help will be printed:: + + $ python myprogram.py --help + usage: myprogram.py [-h] [--foo FOO] + + optional arguments: + -h, --help show this help message and exit + --foo FOO foo help + +Occasionally, it may be useful to disable the addition of this help option. +This can be achieved by passing ``False`` as the ``add_help=`` argument to +ArgumentParser:: + + >>> parser = argparse.ArgumentParser(prog='PROG', add_help=False) + >>> parser.add_argument('--foo', help='foo help') + >>> parser.print_help() + usage: PROG [--foo FOO] + + optional arguments: + --foo FOO foo help + + +prefix_chars +^^^^^^^^^^^^ + +Most command-line options will use ``'-'`` as the prefix, e.g. ``-f/--foo``. +Parsers that need to support additional prefix characters, e.g. for options +like ``+f`` or ``/foo``, may specify them using the ``prefix_chars=`` argument +to the ArgumentParser constructor:: + + >>> parser = argparse.ArgumentParser(prog='PROG', prefix_chars='-+') + >>> parser.add_argument('+f') + >>> parser.add_argument('++bar') + >>> parser.parse_args('+f X ++bar Y'.split()) + Namespace(bar='Y', f='X') + +The ``prefix_chars=`` argument defaults to ``'-'``. Supplying a set of +characters that does not include ``'-'`` will cause ``-f/--foo`` options to be +disallowed. + + +fromfile_prefix_chars +^^^^^^^^^^^^^^^^^^^^^ + +Sometimes, e.g. for particularly long argument lists, it may make sense to keep +the list of arguments in a file rather than typing it out at the command line. +If the ``fromfile_prefix_chars=`` argument is given to the ArgumentParser +constructor, then arguments that start with any of the specified characters will +be treated as files, and will be replaced by the arguments they contain. For +example:: + + >>> open('args.txt', 'w').write('-f\nbar') + >>> parser = argparse.ArgumentParser(fromfile_prefix_chars='@') + >>> parser.add_argument('-f') + >>> parser.parse_args(['-f', 'foo', '@args.txt']) + Namespace(f='bar') + +Arguments read from a file must by default be one per line (but see also +:meth:`convert_arg_line_to_args`) and are treated as if they were in the same +place as the original file referencing argument on the command line. So in the +example above, the expression ``['-f', 'foo', '@args.txt']`` is considered +equivalent to the expression ``['-f', 'foo', '-f', 'bar']``. + +The ``fromfile_prefix_chars=`` argument defaults to ``None``, meaning that +arguments will never be treated as file references. + +argument_default +^^^^^^^^^^^^^^^^ + +Generally, argument defaults are specified either by passing a default to +:meth:`add_argument` or by calling the :meth:`set_defaults` methods with a +specific set of name-value pairs. Sometimes however, it may be useful to +specify a single parser-wide default for arguments. This can be accomplished by +passing the ``argument_default=`` keyword argument to ArgumentParser. For +example, to globally suppress attribute creation on :meth:`parse_args` calls, we +supply ``argument_default=SUPPRESS``:: + + >>> parser = argparse.ArgumentParser(argument_default=argparse.SUPPRESS) + >>> parser.add_argument('--foo') + >>> parser.add_argument('bar', nargs='?') + >>> parser.parse_args(['--foo', '1', 'BAR']) + Namespace(bar='BAR', foo='1') + >>> parser.parse_args([]) + Namespace() + + +parents +^^^^^^^ + +Sometimes, several parsers share a common set of arguments. Rather than +repeating the definitions of these arguments, you can define a single parser +with all the shared arguments and then use the ``parents=`` argument to +ArgumentParser to have these "inherited". The ``parents=`` argument takes a +list of ArgumentParser objects, collects all the positional and optional actions +from them, and adds these actions to the ArgumentParser object being +constructed:: + + >>> parent_parser = argparse.ArgumentParser(add_help=False) + >>> parent_parser.add_argument('--parent', type=int) + + >>> foo_parser = argparse.ArgumentParser(parents=[parent_parser]) + >>> foo_parser.add_argument('foo') + >>> foo_parser.parse_args(['--parent', '2', 'XXX']) + Namespace(foo='XXX', parent=2) + + >>> bar_parser = argparse.ArgumentParser(parents=[parent_parser]) + >>> bar_parser.add_argument('--bar') + >>> bar_parser.parse_args(['--bar', 'YYY']) + Namespace(bar='YYY', parent=None) + +Note that most parent parsers will specify ``add_help=False``. Otherwise, the +ArgumentParser will see two ``-h/--help`` options (one in the parent and one in +the child) and raise an error. + + +formatter_class +^^^^^^^^^^^^^^^ + +ArgumentParser objects allow the help formatting to be customized by specifying +an alternate formatting class. Currently, there are three such classes: +:class:`argparse.RawDescriptionHelpFormatter`, +:class:`argparse.RawTextHelpFormatter` and +:class:`argparse.ArgumentDefaultsHelpFormatter`. The first two allow more +control over how textual descriptions are displayed, while the last +automatically adds information about argument default values. + +By default, ArgumentParser objects line-wrap the description_ and epilog_ texts +in command-line help messages:: + + >>> parser = argparse.ArgumentParser( + ... prog='PROG', + ... description='''this description + ... was indented weird + ... but that is okay''', + ... epilog=''' + ... likewise for this epilog whose whitespace will + ... be cleaned up and whose words will be wrapped + ... across a couple lines''') + >>> parser.print_help() + usage: PROG [-h] + + this description was indented weird but that is okay + + optional arguments: + -h, --help show this help message and exit + + likewise for this epilog whose whitespace will be cleaned up and whose words + will be wrapped across a couple lines + +When you have description_ and epilog_ that is already correctly formatted and +should not be line-wrapped, you can indicate this by passing +``argparse.RawDescriptionHelpFormatter`` as the ``formatter_class=`` argument to +ArgumentParser:: + + >>> parser = argparse.ArgumentParser( + ... prog='PROG', + ... formatter_class=argparse.RawDescriptionHelpFormatter, + ... description=textwrap.dedent('''\ + ... Please do not mess up this text! + ... -------------------------------- + ... I have indented it + ... exactly the way + ... I want it + ... ''')) + >>> parser.print_help() + usage: PROG [-h] + + Please do not mess up this text! + -------------------------------- + I have indented it + exactly the way + I want it + + optional arguments: + -h, --help show this help message and exit + +If you want to maintain whitespace for all sorts of help text (including +argument descriptions), you can use ``argparse.RawTextHelpFormatter``. + +The other formatter class available, ``argparse.ArgumentDefaultsHelpFormatter``, +will add information about the default value of each of the arguments:: + + >>> parser = argparse.ArgumentParser( + ... prog='PROG', + ... formatter_class=argparse.ArgumentDefaultsHelpFormatter) + >>> parser.add_argument('--foo', type=int, default=42, help='FOO!') + >>> parser.add_argument('bar', nargs='*', default=[1, 2, 3], help='BAR!') + >>> parser.print_help() + usage: PROG [-h] [--foo FOO] [bar [bar ...]] + + positional arguments: + bar BAR! (default: [1, 2, 3]) + + optional arguments: + -h, --help show this help message and exit + --foo FOO FOO! (default: 42) + + +conflict_handler +^^^^^^^^^^^^^^^^ + +ArgumentParser objects do not allow two actions with the same option string. By +default, ArgumentParser objects will raise an exception if you try to create an +argument with an option string that is already in use:: + + >>> parser = argparse.ArgumentParser(prog='PROG') + >>> parser.add_argument('-f', '--foo', help='old foo help') + >>> parser.add_argument('--foo', help='new foo help') + Traceback (most recent call last): + .. + ArgumentError: argument --foo: conflicting option string(s): --foo + +Sometimes (e.g. when using parents_) it may be useful to simply override any +older arguments with the same option string. To get this behavior, the value +``'resolve'`` can be supplied to the ``conflict_handler=`` argument of +ArgumentParser:: + + >>> parser = argparse.ArgumentParser(prog='PROG', conflict_handler='resolve') + >>> parser.add_argument('-f', '--foo', help='old foo help') + >>> parser.add_argument('--foo', help='new foo help') + >>> parser.print_help() + usage: PROG [-h] [-f FOO] [--foo FOO] + + optional arguments: + -h, --help show this help message and exit + -f FOO old foo help + --foo FOO new foo help + +Note that ArgumentParser objects only remove an action if all of its option +strings are overridden. So, in the example above, the old ``-f/--foo`` action +is retained as the ``-f`` action, because only the ``--foo`` option string was +overridden. + + +prog +^^^^ + +By default, ArgumentParser objects use ``sys.argv[0]`` to determine how to +display the name of the program in help messages. This default is almost always +what you want because it will make the help messages match what your users have +typed at the command line. For example, consider a file named ``myprogram.py`` +with the following code:: + + import argparse + parser = argparse.ArgumentParser() + parser.add_argument('--foo', help='foo help') + args = parser.parse_args() + +The help for this program will display ``myprogram.py`` as the program name +(regardless of where the program was invoked from):: + + $ python myprogram.py --help + usage: myprogram.py [-h] [--foo FOO] + + optional arguments: + -h, --help show this help message and exit + --foo FOO foo help + $ cd .. + $ python subdir\myprogram.py --help + usage: myprogram.py [-h] [--foo FOO] + + optional arguments: + -h, --help show this help message and exit + --foo FOO foo help + +To change this default behavior, another value can be supplied using the +``prog=`` argument to ArgumentParser:: + + >>> parser = argparse.ArgumentParser(prog='myprogram') + >>> parser.print_help() + usage: myprogram [-h] + + optional arguments: + -h, --help show this help message and exit + +Note that the program name, whether determined from ``sys.argv[0]`` or from the +``prog=`` argument, is available to help messages using the ``%(prog)s`` format +specifier. + +:: + + >>> parser = argparse.ArgumentParser(prog='myprogram') + >>> parser.add_argument('--foo', help='foo of the %(prog)s program') + >>> parser.print_help() + usage: myprogram [-h] [--foo FOO] + + optional arguments: + -h, --help show this help message and exit + --foo FOO foo of the myprogram program + + +usage +^^^^^ + +By default, ArgumentParser objects calculate the usage message from the +arguments it contains:: + + >>> parser = argparse.ArgumentParser(prog='PROG') + >>> parser.add_argument('--foo', nargs='?', help='foo help') + >>> parser.add_argument('bar', nargs='+', help='bar help') + >>> parser.print_help() + usage: PROG [-h] [--foo [FOO]] bar [bar ...] + + positional arguments: + bar bar help + + optional arguments: + -h, --help show this help message and exit + --foo [FOO] foo help + +If the default usage message is not appropriate for your application, you can +supply your own usage message using the ``usage=`` keyword argument to +ArgumentParser:: + + >>> parser = argparse.ArgumentParser(prog='PROG', usage='%(prog)s [options]') + >>> parser.add_argument('--foo', nargs='?', help='foo help') + >>> parser.add_argument('bar', nargs='+', help='bar help') + >>> parser.print_help() + usage: PROG [options] + + positional arguments: + bar bar help + + optional arguments: + -h, --help show this help message and exit + --foo [FOO] foo help + +Note you can use the ``%(prog)s`` format specifier to fill in the program name +in your usage messages. + + +The add_argument() method +------------------------- + +.. method:: add_argument(name or flags..., [action], [nargs], [const], [default], [type], [choices], [required], [help], [metavar], [dest]) + + Define how a single command line argument should be parsed. Each parameter + has its own more detailed description below, but in short they are: + + * `name or flags`_ - Either a name or a list of option strings, e.g. ``foo`` + or ``-f, --foo`` + + * action_ - The basic type of action to be taken when this argument is + encountered at the command-line. + + * nargs_ - The number of command-line arguments that should be consumed. + + * const_ - A constant value required by some action_ and nargs_ selections. + + * default_ - The value produced if the argument is absent from the + command-line. + + * type_ - The type to which the command-line arg should be converted. + + * choices_ - A container of the allowable values for the argument. + + * required_ - Whether or not the command-line option may be omitted + (optionals only). + + * help_ - A brief description of what the argument does. + + * metavar_ - A name for the argument in usage messages. + + * dest_ - The name of the attribute to be added to the object returned by + :meth:`parse_args`. + + The following sections describe how each of these are used. + +name or flags +^^^^^^^^^^^^^ + +The :meth:`add_argument` method needs to know whether you're expecting an +optional argument, e.g. ``-f`` or ``--foo``, or a positional argument, e.g. a +list of filenames. The first arguments passed to :meth:`add_argument` must +therefore be either a series of flags, or a simple argument name. For example, +an optional argument could be created like:: + + >>> parser.add_argument('-f', '--foo') + +while a positional argument could be created like:: + + >>> parser.add_argument('bar') + +When :meth:`parse_args` is called, optional arguments will be identified by the +``-`` prefix, and the remaining arguments will be assumed to be positional:: + + >>> parser = argparse.ArgumentParser(prog='PROG') + >>> parser.add_argument('-f', '--foo') + >>> parser.add_argument('bar') + >>> parser.parse_args(['BAR']) + Namespace(bar='BAR', foo=None) + >>> parser.parse_args(['BAR', '--foo', 'FOO']) + Namespace(bar='BAR', foo='FOO') + >>> parser.parse_args(['--foo', 'FOO']) + usage: PROG [-h] [-f FOO] bar + PROG: error: too few arguments + +action +^^^^^^ + +:class:`ArgumentParser` objects associate command-line args with actions. These +actions can do just about anything with the command-line args associated with +them, though most actions simply add an attribute to the object returned by +:meth:`parse_args`. When you specify a new argument using the +:meth:`add_argument` method, you can indicate how the command-line args should +be handled by specifying the ``action`` keyword argument. The supported actions +are: + +* ``'store'`` - This just stores the argument's value. This is the default + action. For example:: + + >>> parser = argparse.ArgumentParser() + >>> parser.add_argument('--foo') + >>> parser.parse_args('--foo 1'.split()) + Namespace(foo='1') + +* ``'store_const'`` - This stores the value specified by the const_ keyword + argument. Note that the const_ keyword argument defaults to ``None``, so + you'll almost always need to provide a value for it. The ``'store_const'`` + action is most commonly used with optional arguments that specify some sort + of flag. For example:: + + >>> parser = argparse.ArgumentParser() + >>> parser.add_argument('--foo', action='store_const', const=42) + >>> parser.parse_args('--foo'.split()) + Namespace(foo=42) + +* ``'store_true'`` and ``'store_false'`` - These store the values ``True`` and + ``False`` respectively. These are basically special cases of + ``'store_const'``. For example:: + + >>> parser = argparse.ArgumentParser() + >>> parser.add_argument('--foo', action='store_true') + >>> parser.add_argument('--bar', action='store_false') + >>> parser.parse_args('--foo --bar'.split()) + Namespace(bar=False, foo=True) + +* ``'append'`` - This stores a list, and appends each argument value to the + list. This is useful when you want to allow an option to be specified + multiple times. Example usage:: + + >>> parser = argparse.ArgumentParser() + >>> parser.add_argument('--foo', action='append') + >>> parser.parse_args('--foo 1 --foo 2'.split()) + Namespace(foo=['1', '2']) + +* ``'append_const'`` - This stores a list, and appends the value specified by + the const_ keyword argument to the list. Note that the const_ keyword + argument defaults to ``None``, so you'll almost always need to provide a value + for it. The ``'append_const'`` action is typically useful when you want + multiple arguments to store constants to the same list, for example:: + + >>> parser = argparse.ArgumentParser() + >>> parser.add_argument('--str', dest='types', action='append_const', const=str) + >>> parser.add_argument('--int', dest='types', action='append_const', const=int) + >>> parser.parse_args('--str --int'.split()) + Namespace(types=[, ]) + +* ``'version'`` - This expects a ``version=`` keyword argument in the + :meth:`add_argument` call, and prints version information and exits when + invoked. + + >>> import argparse + >>> parser = argparse.ArgumentParser(prog='PROG') + >>> parser.add_argument('-v', '--version', action='version', version='%(prog)s 2.0') + >>> parser.parse_args(['-v']) + PROG 2.0 + +You can also specify an arbitrary action by passing an object that implements +the Action API. The easiest way to do this is to extend ``argparse.Action``, +supplying an appropriate :meth:`__call__` method. The ``__call__`` method +accepts four parameters: + +* ``parser`` - The ArgumentParser object which contains this action. + +* ``namespace`` - The namespace object that will be returned by + :meth:`parse_args`. Most actions add an attribute to this object. + +* ``values`` - The associated command-line args, with any type-conversions + applied. (Type-conversions are specified with the type_ keyword argument to + :meth:`add_argument`. + +* ``option_string`` - The option string that was used to invoke this action. + The ``option_string`` argument is optional, and will be absent if the action + is associated with a positional argument. + +So for example:: + + >>> class FooAction(argparse.Action): + ... def __call__(self, parser, namespace, values, option_string=None): + ... print '%r %r %r' % (namespace, values, option_string) + ... setattr(namespace, self.dest, values) + ... + >>> parser = argparse.ArgumentParser() + >>> parser.add_argument('--foo', action=FooAction) + >>> parser.add_argument('bar', action=FooAction) + >>> args = parser.parse_args('1 --foo 2'.split()) + Namespace(bar=None, foo=None) '1' None + Namespace(bar='1', foo=None) '2' '--foo' + >>> args + Namespace(bar='1', foo='2') + + +nargs +^^^^^ + +ArgumentParser objects usually associate a single command-line argument with a +single action to be taken. In the situations where you'd like to associate a +different number of command-line arguments with a single action, you can use the +``nargs`` keyword argument to :meth:`add_argument`. The supported values are: + +* N (an integer). N args from the command-line will be gathered together into a + list. For example:: + + >>> parser = argparse.ArgumentParser() + >>> parser.add_argument('--foo', nargs=2) + >>> parser.add_argument('bar', nargs=1) + >>> parser.parse_args('c --foo a b'.split()) + Namespace(bar=['c'], foo=['a', 'b']) + + Note that ``nargs=1`` produces a list of one item. This is different from + the default, in which the item is produced by itself. + +* ``'?'``. One arg will be consumed from the command-line if possible, and + produced as a single item. If no command-line arg is present, the value from + default_ will be produced. Note that for optional arguments, there is an + additional case - the option string is present but not followed by a + command-line arg. In this case the value from const_ will be produced. Some + examples to illustrate this:: + + >>> parser = argparse.ArgumentParser() + >>> parser.add_argument('--foo', nargs='?', const='c', default='d') + >>> parser.add_argument('bar', nargs='?', default='d') + >>> parser.parse_args('XX --foo YY'.split()) + Namespace(bar='XX', foo='YY') + >>> parser.parse_args('XX --foo'.split()) + Namespace(bar='XX', foo='c') + >>> parser.parse_args(''.split()) + Namespace(bar='d', foo='d') + + One of the more common uses of ``nargs='?'`` is to allow optional input and + output files:: + + >>> parser = argparse.ArgumentParser() + >>> parser.add_argument('infile', nargs='?', type=argparse.FileType('r'), default=sys.stdin) + >>> parser.add_argument('outfile', nargs='?', type=argparse.FileType('w'), default=sys.stdout) + >>> parser.parse_args(['input.txt', 'output.txt']) + Namespace(infile=, outfile=) + >>> parser.parse_args([]) + Namespace(infile=', mode 'r' at 0x...>, outfile=', mode 'w' at 0x...>) + +* ``'*'``. All command-line args present are gathered into a list. Note that + it generally doesn't make much sense to have more than one positional argument + with ``nargs='*'``, but multiple optional arguments with ``nargs='*'`` is + possible. For example:: + + >>> parser = argparse.ArgumentParser() + >>> parser.add_argument('--foo', nargs='*') + >>> parser.add_argument('--bar', nargs='*') + >>> parser.add_argument('baz', nargs='*') + >>> parser.parse_args('a b --foo x y --bar 1 2'.split()) + Namespace(bar=['1', '2'], baz=['a', 'b'], foo=['x', 'y']) + +* ``'+'``. Just like ``'*'``, all command-line args present are gathered into a + list. Additionally, an error message will be generated if there wasn't at + least one command-line arg present. For example:: + + >>> parser = argparse.ArgumentParser(prog='PROG') + >>> parser.add_argument('foo', nargs='+') + >>> parser.parse_args('a b'.split()) + Namespace(foo=['a', 'b']) + >>> parser.parse_args(''.split()) + usage: PROG [-h] foo [foo ...] + PROG: error: too few arguments + +If the ``nargs`` keyword argument is not provided, the number of args consumed +is determined by the action_. Generally this means a single command-line arg +will be consumed and a single item (not a list) will be produced. + + +const +^^^^^ + +The ``const`` argument of :meth:`add_argument` is used to hold constant values +that are not read from the command line but are required for the various +ArgumentParser actions. The two most common uses of it are: + +* When :meth:`add_argument` is called with ``action='store_const'`` or + ``action='append_const'``. These actions add the ``const`` value to one of + the attributes of the object returned by :meth:`parse_args`. See the action_ + description for examples. + +* When :meth:`add_argument` is called with option strings (like ``-f`` or + ``--foo``) and ``nargs='?'``. This creates an optional argument that can be + followed by zero or one command-line args. When parsing the command-line, if + the option string is encountered with no command-line arg following it, the + value of ``const`` will be assumed instead. See the nargs_ description for + examples. + +The ``const`` keyword argument defaults to ``None``. + + +default +^^^^^^^ + +All optional arguments and some positional arguments may be omitted at the +command-line. The ``default`` keyword argument of :meth:`add_argument`, whose +value defaults to ``None``, specifies what value should be used if the +command-line arg is not present. For optional arguments, the ``default`` value +is used when the option string was not present at the command line:: + + >>> parser = argparse.ArgumentParser() + >>> parser.add_argument('--foo', default=42) + >>> parser.parse_args('--foo 2'.split()) + Namespace(foo='2') + >>> parser.parse_args(''.split()) + Namespace(foo=42) + +For positional arguments with nargs_ ``='?'`` or ``'*'``, the ``default`` value +is used when no command-line arg was present:: + + >>> parser = argparse.ArgumentParser() + >>> parser.add_argument('foo', nargs='?', default=42) + >>> parser.parse_args('a'.split()) + Namespace(foo='a') + >>> parser.parse_args(''.split()) + Namespace(foo=42) + + +If you don't want to see an attribute when an option was not present at the +command line, you can supply ``default=argparse.SUPPRESS``:: + + >>> parser = argparse.ArgumentParser() + >>> parser.add_argument('--foo', default=argparse.SUPPRESS) + >>> parser.parse_args([]) + Namespace() + >>> parser.parse_args(['--foo', '1']) + Namespace(foo='1') + + +type +^^^^ + +By default, ArgumentParser objects read command-line args in as simple strings. +However, quite often the command-line string should instead be interpreted as +another type, e.g. :class:`float`, :class:`int` or :class:`file`. The ``type`` +keyword argument of :meth:`add_argument` allows any necessary type-checking and +type-conversions to be performed. Many common builtin types can be used +directly as the value of the ``type`` argument:: + + >>> parser = argparse.ArgumentParser() + >>> parser.add_argument('foo', type=int) + >>> parser.add_argument('bar', type=file) + >>> parser.parse_args('2 temp.txt'.split()) + Namespace(bar=, foo=2) + +To ease the use of various types of files, the argparse module provides the +factory FileType which takes the ``mode=`` and ``bufsize=`` arguments of the +``file`` object. For example, ``FileType('w')`` can be used to create a +writable file:: + + >>> parser = argparse.ArgumentParser() + >>> parser.add_argument('bar', type=argparse.FileType('w')) + >>> parser.parse_args(['out.txt']) + Namespace(bar=) + +If you need to do some special type-checking or type-conversions, you can +provide your own types by passing to ``type=`` a callable that takes a single +string argument and returns the type-converted value:: + + >>> def perfect_square(string): + ... value = int(string) + ... sqrt = math.sqrt(value) + ... if sqrt != int(sqrt): + ... msg = "%r is not a perfect square" % string + ... raise argparse.ArgumentTypeError(msg) + ... return value + ... + >>> parser = argparse.ArgumentParser(prog='PROG') + >>> parser.add_argument('foo', type=perfect_square) + >>> parser.parse_args('9'.split()) + Namespace(foo=9) + >>> parser.parse_args('7'.split()) + usage: PROG [-h] foo + PROG: error: argument foo: '7' is not a perfect square + +Note that if your type-checking function is just checking for a particular set +of values, it may be more convenient to use the choices_ keyword argument:: + + >>> parser = argparse.ArgumentParser(prog='PROG') + >>> parser.add_argument('foo', type=int, choices=xrange(5, 10)) + >>> parser.parse_args('7'.split()) + Namespace(foo=7) + >>> parser.parse_args('11'.split()) + usage: PROG [-h] {5,6,7,8,9} + PROG: error: argument foo: invalid choice: 11 (choose from 5, 6, 7, 8, 9) + +See the choices_ section for more details. + + +choices +^^^^^^^ + +Some command-line args should be selected from a restricted set of values. +ArgumentParser objects can be told about such sets of values by passing a +container object as the ``choices`` keyword argument to :meth:`add_argument`. +When the command-line is parsed with :meth:`parse_args`, arg values will be +checked, and an error message will be displayed if the arg was not one of the +acceptable values:: + + >>> parser = argparse.ArgumentParser(prog='PROG') + >>> parser.add_argument('foo', choices='abc') + >>> parser.parse_args('c'.split()) + Namespace(foo='c') + >>> parser.parse_args('X'.split()) + usage: PROG [-h] {a,b,c} + PROG: error: argument foo: invalid choice: 'X' (choose from 'a', 'b', 'c') + +Note that inclusion in the ``choices`` container is checked after any type_ +conversions have been performed, so the type of the objects in the ``choices`` +container should match the type_ specified:: + + >>> parser = argparse.ArgumentParser(prog='PROG') + >>> parser.add_argument('foo', type=complex, choices=[1, 1j]) + >>> parser.parse_args('1j'.split()) + Namespace(foo=1j) + >>> parser.parse_args('-- -4'.split()) + usage: PROG [-h] {1,1j} + PROG: error: argument foo: invalid choice: (-4+0j) (choose from 1, 1j) + +Any object that supports the ``in`` operator can be passed as the ``choices`` +value, so :class:`dict` objects, :class:`set` objects, custom containers, +etc. are all supported. + + +required +^^^^^^^^ + +In general, the argparse module assumes that flags like ``-f`` and ``--bar`` +indicate *optional* arguments, which can always be omitted at the command-line. +To change this behavior, i.e. to make an option *required*, the value ``True`` +should be specified for the ``required=`` keyword argument to +:meth:`add_argument`:: + + >>> parser = argparse.ArgumentParser() + >>> parser.add_argument('--foo', required=True) + >>> parser.parse_args(['--foo', 'BAR']) + Namespace(foo='BAR') + >>> parser.parse_args([]) + usage: argparse.py [-h] [--foo FOO] + argparse.py: error: option --foo is required + +As the example shows, if an option is marked as ``required``, :meth:`parse_args` +will report an error if that option is not present at the command line. + +**Warning:** Required options are generally considered bad form - normal users +expect *options* to be *optional*. You should avoid the use of required options +whenever possible. + + +help +^^^^ + +A great command-line interface isn't worth anything if your users can't figure +out which option does what. So for the end-users, ``help`` is probably the most +important argument to include in your :meth:`add_argument` calls. The ``help`` +value should be a string containing a brief description of what the argument +specifies. When a user requests help (usually by using ``-h`` or ``--help`` at +the command-line), these ``help`` descriptions will be displayed with each +argument:: + + >>> parser = argparse.ArgumentParser(prog='frobble') + >>> parser.add_argument('--foo', action='store_true', + ... help='foo the bars before frobbling') + >>> parser.add_argument('bar', nargs='+', + ... help='one of the bars to be frobbled') + >>> parser.parse_args('-h'.split()) + usage: frobble [-h] [--foo] bar [bar ...] + + positional arguments: + bar one of the bars to be frobbled + + optional arguments: + -h, --help show this help message and exit + --foo foo the bars before frobbling + +The ``help`` strings can include various format specifiers to avoid repetition +of things like the program name or the argument default_. The available +specifiers include the program name, ``%(prog)s`` and most keyword arguments to +:meth:`add_argument`, e.g. ``%(default)s``, ``%(type)s``, etc.:: + + >>> parser = argparse.ArgumentParser(prog='frobble') + >>> parser.add_argument('bar', nargs='?', type=int, default=42, + ... help='the bar to %(prog)s (default: %(default)s)') + >>> parser.print_help() + usage: frobble [-h] [bar] + + positional arguments: + bar the bar to frobble (default: 42) + + optional arguments: + -h, --help show this help message and exit + + +metavar +^^^^^^^ + +When ArgumentParser objects generate help messages, they need some way to refer +to each expected argument. By default, ArgumentParser objects use the dest_ +value as the "name" of each object. By default, for positional argument +actions, the dest_ value is used directly, and for optional argument actions, +the dest_ value is uppercased. So if we have a single positional argument with +``dest='bar'``, that argument will be referred to as ``bar``. And if we have a +single optional argument ``--foo`` that should be followed by a single +command-line arg, that arg will be referred to as ``FOO``. You can see this +behavior in the example below:: + + >>> parser = argparse.ArgumentParser() + >>> parser.add_argument('--foo') + >>> parser.add_argument('bar') + >>> parser.parse_args('X --foo Y'.split()) + Namespace(bar='X', foo='Y') + >>> parser.print_help() + usage: [-h] [--foo FOO] bar + + positional arguments: + bar + + optional arguments: + -h, --help show this help message and exit + --foo FOO + +If you would like to provide a different name for your argument in help +messages, you can supply a value for the ``metavar`` keyword argument to +:meth:`add_argument`:: + + >>> parser = argparse.ArgumentParser() + >>> parser.add_argument('--foo', metavar='YYY') + >>> parser.add_argument('bar', metavar='XXX') + >>> parser.parse_args('X --foo Y'.split()) + Namespace(bar='X', foo='Y') + >>> parser.print_help() + usage: [-h] [--foo YYY] XXX + + positional arguments: + XXX + + optional arguments: + -h, --help show this help message and exit + --foo YYY + +Note that ``metavar`` only changes the *displayed* name - the name of the +attribute on the :meth:`parse_args` object is still determined by the dest_ +value. + +Different values of ``nargs`` may cause the metavar to be used multiple times. +If you'd like to specify a different display name for each of the arguments, you +can provide a tuple to ``metavar``:: + + >>> parser = argparse.ArgumentParser(prog='PROG') + >>> parser.add_argument('-x', nargs=2) + >>> parser.add_argument('--foo', nargs=2, metavar=('bar', 'baz')) + >>> parser.print_help() + usage: PROG [-h] [-x X X] [--foo bar baz] + + optional arguments: + -h, --help show this help message and exit + -x X X + --foo bar baz + + +dest +^^^^ + +Most ArgumentParser actions add some value as an attribute of the object +returned by :meth:`parse_args`. The name of this attribute is determined by the +``dest`` keyword argument of :meth:`add_argument`. For positional argument +actions, ``dest`` is normally supplied as the first argument to +:meth:`add_argument`:: + + >>> parser = argparse.ArgumentParser() + >>> parser.add_argument('bar') + >>> parser.parse_args('XXX'.split()) + Namespace(bar='XXX') + +For optional argument actions, the value of ``dest`` is normally inferred from +the option strings. ArgumentParser objects generate the value of ``dest`` by +taking the first long option string and stripping away the initial ``'--'`` +string. If no long option strings were supplied, ``dest`` will be derived from +the first short option string by stripping the initial ``'-'`` character. Any +internal ``'-'`` characters will be converted to ``'_'`` characters to make sure +the string is a valid attribute name. The examples below illustrate this +behavior:: + + >>> parser = argparse.ArgumentParser() + >>> parser.add_argument('-f', '--foo-bar', '--foo') + >>> parser.add_argument('-x', '-y') + >>> parser.parse_args('-f 1 -x 2'.split()) + Namespace(foo_bar='1', x='2') + >>> parser.parse_args('--foo 1 -y 2'.split()) + Namespace(foo_bar='1', x='2') + +If you would like to use a different attribute name from the one automatically +inferred by the ArgumentParser, you can supply it with an explicit ``dest`` +parameter:: + + >>> parser = argparse.ArgumentParser() + >>> parser.add_argument('--foo', dest='bar') + >>> parser.parse_args('--foo XXX'.split()) + Namespace(bar='XXX') + + +The parse_args() method +----------------------- + +.. method:: parse_args([args], [namespace]) + + Convert the strings to objects and assign them as attributes of the + namespace. Return the populated namespace. + + Previous calls to :meth:`add_argument` determine exactly what objects are + created and how they are assigned. See the documentation for + :meth:`add_argument` for details. + + By default, the arg strings are taken from :data:`sys.argv`, and a new empty + ``Namespace`` object is created for the attributes. + +Option value syntax +^^^^^^^^^^^^^^^^^^^ + +The :meth:`parse_args` method supports several ways of specifying the value of +an option (if it takes one). In the simplest case, the option and its value are +passed as two separate arguments:: + + >>> parser = argparse.ArgumentParser(prog='PROG') + >>> parser.add_argument('-x') + >>> parser.add_argument('--foo') + >>> parser.parse_args('-x X'.split()) + Namespace(foo=None, x='X') + >>> parser.parse_args('--foo FOO'.split()) + Namespace(foo='FOO', x=None) + +For long options (options with names longer than a single character), you may +also pass the option and value as a single command line argument, using ``=`` to +separate them:: + + >>> parser.parse_args('--foo=FOO'.split()) + Namespace(foo='FOO', x=None) + +For short options (options only one character long), you may simply concatenate +the option and its value:: + + >>> parser.parse_args('-xX'.split()) + Namespace(foo=None, x='X') + +You can also combine several short options together, using only a single ``-`` +prefix, as long as only the last option (or none of them) requires a value:: + + >>> parser = argparse.ArgumentParser(prog='PROG') + >>> parser.add_argument('-x', action='store_true') + >>> parser.add_argument('-y', action='store_true') + >>> parser.add_argument('-z') + >>> parser.parse_args('-xyzZ'.split()) + Namespace(x=True, y=True, z='Z') + + +Invalid arguments +^^^^^^^^^^^^^^^^^ + +While parsing the command-line, ``parse_args`` checks for a variety of errors, +including ambiguous options, invalid types, invalid options, wrong number of +positional arguments, etc. When it encounters such an error, it exits and +prints the error along with a usage message:: + + >>> parser = argparse.ArgumentParser(prog='PROG') + >>> parser.add_argument('--foo', type=int) + >>> parser.add_argument('bar', nargs='?') + + >>> # invalid type + >>> parser.parse_args(['--foo', 'spam']) + usage: PROG [-h] [--foo FOO] [bar] + PROG: error: argument --foo: invalid int value: 'spam' + + >>> # invalid option + >>> parser.parse_args(['--bar']) + usage: PROG [-h] [--foo FOO] [bar] + PROG: error: no such option: --bar + + >>> # wrong number of arguments + >>> parser.parse_args(['spam', 'badger']) + usage: PROG [-h] [--foo FOO] [bar] + PROG: error: extra arguments found: badger + + +Arguments containing ``"-"`` +^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +The ``parse_args`` method attempts to give errors whenever the user has clearly +made a mistake, but some situations are inherently ambiguous. For example, the +command-line arg ``'-1'`` could either be an attempt to specify an option or an +attempt to provide a positional argument. The ``parse_args`` method is cautious +here: positional arguments may only begin with ``'-'`` if they look like +negative numbers and there are no options in the parser that look like negative +numbers:: + + >>> parser = argparse.ArgumentParser(prog='PROG') + >>> parser.add_argument('-x') + >>> parser.add_argument('foo', nargs='?') + + >>> # no negative number options, so -1 is a positional argument + >>> parser.parse_args(['-x', '-1']) + Namespace(foo=None, x='-1') + + >>> # no negative number options, so -1 and -5 are positional arguments + >>> parser.parse_args(['-x', '-1', '-5']) + Namespace(foo='-5', x='-1') + + >>> parser = argparse.ArgumentParser(prog='PROG') + >>> parser.add_argument('-1', dest='one') + >>> parser.add_argument('foo', nargs='?') + + >>> # negative number options present, so -1 is an option + >>> parser.parse_args(['-1', 'X']) + Namespace(foo=None, one='X') + + >>> # negative number options present, so -2 is an option + >>> parser.parse_args(['-2']) + usage: PROG [-h] [-1 ONE] [foo] + PROG: error: no such option: -2 + + >>> # negative number options present, so both -1s are options + >>> parser.parse_args(['-1', '-1']) + usage: PROG [-h] [-1 ONE] [foo] + PROG: error: argument -1: expected one argument + +If you have positional arguments that must begin with ``'-'`` and don't look +like negative numbers, you can insert the pseudo-argument ``'--'`` which tells +``parse_args`` that everything after that is a positional argument:: + + >>> parser.parse_args(['--', '-f']) + Namespace(foo='-f', one=None) + + +Argument abbreviations +^^^^^^^^^^^^^^^^^^^^^^ + +The :meth:`parse_args` method allows you to abbreviate long options if the +abbreviation is unambiguous:: + + >>> parser = argparse.ArgumentParser(prog='PROG') + >>> parser.add_argument('-bacon') + >>> parser.add_argument('-badger') + >>> parser.parse_args('-bac MMM'.split()) + Namespace(bacon='MMM', badger=None) + >>> parser.parse_args('-bad WOOD'.split()) + Namespace(bacon=None, badger='WOOD') + >>> parser.parse_args('-ba BA'.split()) + usage: PROG [-h] [-bacon BACON] [-badger BADGER] + PROG: error: ambiguous option: -ba could match -badger, -bacon + +As you can see above, you will get an error if you pick a prefix that could +refer to more than one option. + + +Beyond ``sys.argv`` +^^^^^^^^^^^^^^^^^^^ + +Sometimes it may be useful to have an ArgumentParser parse args other than those +of :data:`sys.argv`. This can be accomplished by passing a list of strings to +``parse_args``. You may have noticed that the examples in the argparse +documentation have made heavy use of this calling style - it is much easier to +use at the interactive prompt:: + + >>> parser = argparse.ArgumentParser() + >>> parser.add_argument( + ... 'integers', metavar='int', type=int, choices=xrange(10), + ... nargs='+', help='an integer in the range 0..9') + >>> parser.add_argument( + ... '--sum', dest='accumulate', action='store_const', const=sum, + ... default=max, help='sum the integers (default: find the max)') + >>> parser.parse_args(['1', '2', '3', '4']) + Namespace(accumulate=, integers=[1, 2, 3, 4]) + >>> parser.parse_args('1 2 3 4 --sum'.split()) + Namespace(accumulate=, integers=[1, 2, 3, 4]) + + +Custom namespaces +^^^^^^^^^^^^^^^^^ + +It may also be useful to have an ArgumentParser assign attributes to an already +existing object, rather than the newly-created Namespace object that is normally +used. This can be achieved by specifying the ``namespace=`` keyword argument:: + + >>> class C(object): + ... pass + ... + >>> c = C() + >>> parser = argparse.ArgumentParser() + >>> parser.add_argument('--foo') + >>> parser.parse_args(args=['--foo', 'BAR'], namespace=c) + >>> c.foo + 'BAR' + + +Other utilities +--------------- + +Sub-commands +^^^^^^^^^^^^ + +.. method:: add_subparsers() + + A lot of programs split up their functionality into a number of sub-commands, + for example, the ``svn`` program can invoke sub-commands like ``svn + checkout``, ``svn update``, ``svn commit``, etc. Splitting up functionality + this way can be a particularly good idea when a program performs several + different functions which require different kinds of command-line arguments. + ArgumentParser objects support the creation of such sub-commands with the + :meth:`add_subparsers` method. The :meth:`add_subparsers` method is normally + called with no arguments and returns an special action object. This object + has a single method, ``add_parser``, which takes a command name and any + ArgumentParser constructor arguments, and returns an ArgumentParser object + that can be modified as usual. + + Some example usage:: + + >>> # create the top-level parser + >>> parser = argparse.ArgumentParser(prog='PROG') + >>> parser.add_argument('--foo', action='store_true', help='foo help') + >>> subparsers = parser.add_subparsers(help='sub-command help') + >>> + >>> # create the parser for the "a" command + >>> parser_a = subparsers.add_parser('a', help='a help') + >>> parser_a.add_argument('bar', type=int, help='bar help') + >>> + >>> # create the parser for the "b" command + >>> parser_b = subparsers.add_parser('b', help='b help') + >>> parser_b.add_argument('--baz', choices='XYZ', help='baz help') + >>> + >>> # parse some arg lists + >>> parser.parse_args(['a', '12']) + Namespace(bar=12, foo=False) + >>> parser.parse_args(['--foo', 'b', '--baz', 'Z']) + Namespace(baz='Z', foo=True) + + Note that the object returned by :meth:`parse_args` will only contain + attributes for the main parser and the subparser that was selected by the + command line (and not any other subparsers). So in the example above, when + the ``"a"`` command is specified, only the ``foo`` and ``bar`` attributes are + present, and when the ``"b"`` command is specified, only the ``foo`` and + ``baz`` attributes are present. + + Similarly, when a help message is requested from a subparser, only the help + for that particular parser will be printed. The help message will not + include parent parser or sibling parser messages. (You can however supply a + help message for each subparser command by suppling the ``help=`` argument to + ``add_parser`` as above.) + + :: + + >>> parser.parse_args(['--help']) + usage: PROG [-h] [--foo] {a,b} ... + + positional arguments: + {a,b} sub-command help + a a help + b b help + + optional arguments: + -h, --help show this help message and exit + --foo foo help + + >>> parser.parse_args(['a', '--help']) + usage: PROG a [-h] bar + + positional arguments: + bar bar help + + optional arguments: + -h, --help show this help message and exit + + >>> parser.parse_args(['b', '--help']) + usage: PROG b [-h] [--baz {X,Y,Z}] + + optional arguments: + -h, --help show this help message and exit + --baz {X,Y,Z} baz help + + The :meth:`add_subparsers` method also supports ``title`` and ``description`` + keyword arguments. When either is present, the subparser's commands will + appear in their own group in the help output. For example:: + + >>> parser = argparse.ArgumentParser() + >>> subparsers = parser.add_subparsers(title='subcommands', + ... description='valid subcommands', + ... help='additional help') + >>> subparsers.add_parser('foo') + >>> subparsers.add_parser('bar') + >>> parser.parse_args(['-h']) + usage: [-h] {foo,bar} ... + + optional arguments: + -h, --help show this help message and exit + + subcommands: + valid subcommands + + {foo,bar} additional help + + + One particularly effective way of handling sub-commands is to combine the use + of the :meth:`add_subparsers` method with calls to :meth:`set_defaults` so + that each subparser knows which Python function it should execute. For + example:: + + >>> # sub-command functions + >>> def foo(args): + ... print args.x * args.y + ... + >>> def bar(args): + ... print '((%s))' % args.z + ... + >>> # create the top-level parser + >>> parser = argparse.ArgumentParser() + >>> subparsers = parser.add_subparsers() + >>> + >>> # create the parser for the "foo" command + >>> parser_foo = subparsers.add_parser('foo') + >>> parser_foo.add_argument('-x', type=int, default=1) + >>> parser_foo.add_argument('y', type=float) + >>> parser_foo.set_defaults(func=foo) + >>> + >>> # create the parser for the "bar" command + >>> parser_bar = subparsers.add_parser('bar') + >>> parser_bar.add_argument('z') + >>> parser_bar.set_defaults(func=bar) + >>> + >>> # parse the args and call whatever function was selected + >>> args = parser.parse_args('foo 1 -x 2'.split()) + >>> args.func(args) + 2.0 + >>> + >>> # parse the args and call whatever function was selected + >>> args = parser.parse_args('bar XYZYX'.split()) + >>> args.func(args) + ((XYZYX)) + + This way, you can let :meth:`parse_args` do all the work for you, and then + just call the appropriate function after the argument parsing is complete. + Associating functions with actions like this is typically the easiest way to + handle the different actions for each of your subparsers. However, if you + find it necessary to check the name of the subparser that was invoked, you + can always provide a ``dest`` keyword argument to the :meth:`add_subparsers` + call:: + + >>> parser = argparse.ArgumentParser() + >>> subparsers = parser.add_subparsers(dest='subparser_name') + >>> subparser1 = subparsers.add_parser('1') + >>> subparser1.add_argument('-x') + >>> subparser2 = subparsers.add_parser('2') + >>> subparser2.add_argument('y') + >>> parser.parse_args(['2', 'frobble']) + Namespace(subparser_name='2', y='frobble') + + +FileType objects +^^^^^^^^^^^^^^^^ + +.. class:: FileType(mode='r', bufsize=None) + + The :class:`FileType` factory creates objects that can be passed to the type + argument of :meth:`add_argument`. Arguments that have :class:`FileType` + objects as their type will open command-line args as files with the requested + modes and buffer sizes: + + >>> parser = argparse.ArgumentParser() + >>> parser.add_argument('--output', type=argparse.FileType('wb', 0)) + >>> parser.parse_args(['--output', 'out']) + Namespace(output=) + + FileType objects understand the pseudo-argument ``'-'`` and automatically + convert this into ``sys.stdin`` for readable :class:`FileType` objects and + ``sys.stdout`` for writable :class:`FileType` objects: + + >>> parser = argparse.ArgumentParser() + >>> parser.add_argument('infile', type=argparse.FileType('r')) + >>> parser.parse_args(['-']) + Namespace(infile=', mode 'r' at 0x...>) + + +Argument groups +^^^^^^^^^^^^^^^ + +.. method:: add_argument_group([title], [description]) + + By default, ArgumentParser objects group command-line arguments into + "positional arguments" and "optional arguments" when displaying help + messages. When there is a better conceptual grouping of arguments than this + default one, appropriate groups can be created using the + :meth:`add_argument_group` method:: + + >>> parser = argparse.ArgumentParser(prog='PROG', add_help=False) + >>> group = parser.add_argument_group('group') + >>> group.add_argument('--foo', help='foo help') + >>> group.add_argument('bar', help='bar help') + >>> parser.print_help() + usage: PROG [--foo FOO] bar + + group: + bar bar help + --foo FOO foo help + + The :meth:`add_argument_group` method returns an argument group object which + has an :meth:`add_argument` method just like a regular ArgumentParser + objects. When an argument is added to the group, the parser treats it just + like a normal argument, but displays the argument in a separate group for + help messages. The :meth:`add_argument_group` method accepts ``title`` and + ``description`` arguments which can be used to customize this display:: + + >>> parser = argparse.ArgumentParser(prog='PROG', add_help=False) + >>> group1 = parser.add_argument_group('group1', 'group1 description') + >>> group1.add_argument('foo', help='foo help') + >>> group2 = parser.add_argument_group('group2', 'group2 description') + >>> group2.add_argument('--bar', help='bar help') + >>> parser.print_help() + usage: PROG [--bar BAR] foo + + group1: + group1 description + + foo foo help + + group2: + group2 description + + --bar BAR bar help + + Note that any arguments not in your user defined groups will end up back in + the usual "positional arguments" and "optional arguments" sections. + + +Mutual exclusion +^^^^^^^^^^^^^^^^ + +.. method:: add_mutually_exclusive_group([required=False]) + + Sometimes, you need to make sure that only one of a couple different options + is specified on the command line. You can create groups of such mutually + exclusive arguments using the :meth:`add_mutually_exclusive_group` method. + When :func:`parse_args` is called, argparse will make sure that only one of + the arguments in the mutually exclusive group was present on the command + line:: + + >>> parser = argparse.ArgumentParser(prog='PROG') + >>> group = parser.add_mutually_exclusive_group() + >>> group.add_argument('--foo', action='store_true') + >>> group.add_argument('--bar', action='store_false') + >>> parser.parse_args(['--foo']) + Namespace(bar=True, foo=True) + >>> parser.parse_args(['--bar']) + Namespace(bar=False, foo=False) + >>> parser.parse_args(['--foo', '--bar']) + usage: PROG [-h] [--foo | --bar] + PROG: error: argument --bar: not allowed with argument --foo + + The :meth:`add_mutually_exclusive_group` method also accepts a ``required`` + argument, to indicate that at least one of the mutually exclusive arguments + is required:: + + >>> parser = argparse.ArgumentParser(prog='PROG') + >>> group = parser.add_mutually_exclusive_group(required=True) + >>> group.add_argument('--foo', action='store_true') + >>> group.add_argument('--bar', action='store_false') + >>> parser.parse_args([]) + usage: PROG [-h] (--foo | --bar) + PROG: error: one of the arguments --foo --bar is required + + Note that currently mutually exclusive argument groups do not support the + ``title`` and ``description`` arguments of :meth:`add_argument_group`. This + may change in the future however, so you are *strongly* recommended to + specify ``required`` as a keyword argument if you use it. + + +Parser defaults +^^^^^^^^^^^^^^^ + +.. method:: set_defaults(**kwargs) + + Most of the time, the attributes of the object returned by :meth:`parse_args` + will be fully determined by inspecting the command-line args and the argument + actions described in your :meth:`add_argument` calls. However, sometimes it + may be useful to add some additional attributes that are determined without + any inspection of the command-line. The :meth:`set_defaults` method allows + you to do this:: + + >>> parser = argparse.ArgumentParser() + >>> parser.add_argument('foo', type=int) + >>> parser.set_defaults(bar=42, baz='badger') + >>> parser.parse_args(['736']) + Namespace(bar=42, baz='badger', foo=736) + + Note that parser-level defaults always override argument-level defaults. So + if you set a parser-level default for a name that matches an argument, the + old argument default will no longer be used:: + + >>> parser = argparse.ArgumentParser() + >>> parser.add_argument('--foo', default='bar') + >>> parser.set_defaults(foo='spam') + >>> parser.parse_args([]) + Namespace(foo='spam') + + Parser-level defaults can be particularly useful when you're working with + multiple parsers. See the :meth:`add_subparsers` method for an example of + this type. + +.. method:: get_default(dest) + + Get the default value for a namespace attribute, as set by either + :meth:`add_argument` or by :meth:`set_defaults`:: + + >>> parser = argparse.ArgumentParser() + >>> parser.add_argument('--foo', default='badger') + >>> parser.get_default('foo') + 'badger' + + +Printing help +^^^^^^^^^^^^^ + +In most typical applications, :meth:`parse_args` will take care of formatting +and printing any usage or error messages. However, should you want to format or +print these on your own, several methods are available: + +.. method:: print_usage([file]): + + Print a brief description of how the :class:`ArgumentParser` should be + invoked on the command line. If ``file`` is not present, ``sys.stderr`` is + assumed. + +.. method:: print_help([file]): + + Print a help message, including the program usage and information about the + arguments registered with the :class:`ArgumentParser`. If ``file`` is not + present, ``sys.stderr`` is assumed. + +There are also variants of these methods that simply return a string instead of +printing it: + +.. method:: format_usage(): + + Return a string containing a brief description of how the + :class:`ArgumentParser` should be invoked on the command line. + +.. method:: format_help(): + + Return a string containing a help message, including the program usage and + information about the arguments registered with the :class:`ArgumentParser`. + + + +Partial parsing +^^^^^^^^^^^^^^^ + +.. method:: parse_known_args([args], [namespace]) + +Sometimes a script may only parse a few of the command line arguments, passing +the remaining arguments on to another script or program. In these cases, the +:meth:`parse_known_args` method can be useful. It works much like +:meth:`parse_args` except that it does not produce an error when extra arguments +are present. Instead, it returns a two item tuple containing the populated +namespace and the list of remaining argument strings. + +:: + + >>> parser = argparse.ArgumentParser() + >>> parser.add_argument('--foo', action='store_true') + >>> parser.add_argument('bar') + >>> parser.parse_known_args(['--foo', '--badger', 'BAR', 'spam']) + (Namespace(bar='BAR', foo=True), ['--badger', 'spam']) + + +Customizing file parsing +^^^^^^^^^^^^^^^^^^^^^^^^ + +.. method:: convert_arg_line_to_args(arg_line) + + Arguments that are read from a file (see the ``fromfile_prefix_chars`` + keyword argument to the :class:`ArgumentParser` constructor) are read one + argument per line. If you need fancier parsing, then you can subclass the + :class:`ArgumentParser` and override the :meth:`convert_arg_line_to_args` + method. + + This method takes a single argument ``arg_line`` which is a string read from + the argument file. It returns a list of arguments parsed from this string. + The method is called once per line read from the argument file, in order. + + A useful override of this method is one that treats each space-separated word + as an argument:: + + def convert_arg_line_to_args(self, arg_line): + for arg in arg_line.split(): + if not arg.strip(): + continue + yield arg + + +Upgrading optparse code +----------------------- + +Originally, the argparse module had attempted to maintain compatibility with +optparse. However, optparse was difficult to extend transparently, particularly +with the changes required to support the new ``nargs=`` specifiers and better +usage messges. When most everything in optparse had either been copy-pasted +over or monkey-patched, it no longer seemed practical to try to maintain the +backwards compatibility. + +A partial upgrade path from optparse to argparse: + +* Replace all ``add_option()`` calls with :meth:`add_argument` calls. + +* Replace ``options, args = parser.parse_args()`` with ``args = + parser.parse_args()`` and add additional :meth:`add_argument` calls for the + positional arguments. + +* Replace callback actions and the ``callback_*`` keyword arguments with + ``type`` or ``action`` arguments. + +* Replace string names for ``type`` keyword arguments with the corresponding + type objects (e.g. int, float, complex, etc). + +* Replace ``Values`` with ``Namespace`` and ``OptionError/OptionValueError`` + with ``ArgumentError``. + +* Replace strings with implicit arguments such as ``%default`` or ``%prog`` with + the standard python syntax to use dictionaries to format strings, that is, + ``%(default)s`` and ``%(prog)s``. Modified: python/branches/py3k/Lib/argparse.py ============================================================================== --- python/branches/py3k/Lib/argparse.py (original) +++ python/branches/py3k/Lib/argparse.py Tue Mar 2 23:34:37 2010 @@ -1,2353 +1,2351 @@ -# -*- coding: utf-8 -*- - -# Copyright ? 2006-2009 Steven J. Bethard . -# -# Licensed under the Apache License, Version 2.0 (the "License"); you may not -# use this file except in compliance with the License. You may obtain a copy -# of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT -# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the -# License for the specific language governing permissions and limitations -# under the License. - -"""Command-line parsing library - -This module is an optparse-inspired command-line parsing library that: - - - handles both optional and positional arguments - - produces highly informative usage messages - - supports parsers that dispatch to sub-parsers - -The following is a simple usage example that sums integers from the -command-line and writes the result to a file:: - - parser = argparse.ArgumentParser( - description='sum the integers at the command line') - parser.add_argument( - 'integers', metavar='int', nargs='+', type=int, - help='an integer to be summed') - parser.add_argument( - '--log', default=sys.stdout, type=argparse.FileType('w'), - help='the file where the sum should be written') - args = parser.parse_args() - args.log.write('%s' % sum(args.integers)) - args.log.close() - -The module contains the following public classes: - - - ArgumentParser -- The main entry point for command-line parsing. As the - example above shows, the add_argument() method is used to populate - the parser with actions for optional and positional arguments. Then - the parse_args() method is invoked to convert the args at the - command-line into an object with attributes. - - - ArgumentError -- The exception raised by ArgumentParser objects when - there are errors with the parser's actions. Errors raised while - parsing the command-line are caught by ArgumentParser and emitted - as command-line messages. - - - FileType -- A factory for defining types of files to be created. As the - example above shows, instances of FileType are typically passed as - the type= argument of add_argument() calls. - - - Action -- The base class for parser actions. Typically actions are - selected by passing strings like 'store_true' or 'append_const' to - the action= argument of add_argument(). However, for greater - customization of ArgumentParser actions, subclasses of Action may - be defined and passed as the action= argument. - - - HelpFormatter, RawDescriptionHelpFormatter, RawTextHelpFormatter, - ArgumentDefaultsHelpFormatter -- Formatter classes which - may be passed as the formatter_class= argument to the - ArgumentParser constructor. HelpFormatter is the default, - RawDescriptionHelpFormatter and RawTextHelpFormatter tell the parser - not to change the formatting for help text, and - ArgumentDefaultsHelpFormatter adds information about argument defaults - to the help. - -All other classes in this module are considered implementation details. -(Also note that HelpFormatter and RawDescriptionHelpFormatter are only -considered public as object names -- the API of the formatter objects is -still considered an implementation detail.) -""" - -__version__ = '1.1' -__all__ = [ - 'ArgumentParser', - 'ArgumentError', - 'Namespace', - 'Action', - 'FileType', - 'HelpFormatter', - 'RawDescriptionHelpFormatter', - 'RawTextHelpFormatter', - 'ArgumentDefaultsHelpFormatter', -] - - -import copy as _copy -import os as _os -import re as _re -import sys as _sys -import textwrap as _textwrap - -from gettext import gettext as _ - -try: - _set = set -except NameError: - from sets import Set as _set - -try: - _basestring = basestring -except NameError: - _basestring = str - -try: - _sorted = sorted -except NameError: - - def _sorted(iterable, reverse=False): - result = list(iterable) - result.sort() - if reverse: - result.reverse() - return result - - -def _callable(obj): - return hasattr(obj, '__call__') or hasattr(obj, '__bases__') - -# silence Python 2.6 buggy warnings about Exception.message -if _sys.version_info[:2] == (2, 6): - import warnings - warnings.filterwarnings( - action='ignore', - message='BaseException.message has been deprecated as of Python 2.6', - category=DeprecationWarning, - module='argparse') - - -SUPPRESS = '==SUPPRESS==' - -OPTIONAL = '?' -ZERO_OR_MORE = '*' -ONE_OR_MORE = '+' -PARSER = 'A...' -REMAINDER = '...' - -# ============================= -# Utility functions and classes -# ============================= - -class _AttributeHolder(object): - """Abstract base class that provides __repr__. - - The __repr__ method returns a string in the format:: - ClassName(attr=name, attr=name, ...) - The attributes are determined either by a class-level attribute, - '_kwarg_names', or by inspecting the instance __dict__. - """ - - def __repr__(self): - type_name = type(self).__name__ - arg_strings = [] - for arg in self._get_args(): - arg_strings.append(repr(arg)) - for name, value in self._get_kwargs(): - arg_strings.append('%s=%r' % (name, value)) - return '%s(%s)' % (type_name, ', '.join(arg_strings)) - - def _get_kwargs(self): - return _sorted(self.__dict__.items()) - - def _get_args(self): - return [] - - -def _ensure_value(namespace, name, value): - if getattr(namespace, name, None) is None: - setattr(namespace, name, value) - return getattr(namespace, name) - - -# =============== -# Formatting Help -# =============== - -class HelpFormatter(object): - """Formatter for generating usage messages and argument help strings. - - Only the name of this class is considered a public API. All the methods - provided by the class are considered an implementation detail. - """ - - def __init__(self, - prog, - indent_increment=2, - max_help_position=24, - width=None): - - # default setting for width - if width is None: - try: - width = int(_os.environ['COLUMNS']) - except (KeyError, ValueError): - width = 80 - width -= 2 - - self._prog = prog - self._indent_increment = indent_increment - self._max_help_position = max_help_position - self._width = width - - self._current_indent = 0 - self._level = 0 - self._action_max_length = 0 - - self._root_section = self._Section(self, None) - self._current_section = self._root_section - - self._whitespace_matcher = _re.compile(r'\s+') - self._long_break_matcher = _re.compile(r'\n\n\n+') - - # =============================== - # Section and indentation methods - # =============================== - def _indent(self): - self._current_indent += self._indent_increment - self._level += 1 - - def _dedent(self): - self._current_indent -= self._indent_increment - assert self._current_indent >= 0, 'Indent decreased below 0.' - self._level -= 1 - - class _Section(object): - - def __init__(self, formatter, parent, heading=None): - self.formatter = formatter - self.parent = parent - self.heading = heading - self.items = [] - - def format_help(self): - # format the indented section - if self.parent is not None: - self.formatter._indent() - join = self.formatter._join_parts - for func, args in self.items: - func(*args) - item_help = join([func(*args) for func, args in self.items]) - if self.parent is not None: - self.formatter._dedent() - - # return nothing if the section was empty - if not item_help: - return '' - - # add the heading if the section was non-empty - if self.heading is not SUPPRESS and self.heading is not None: - current_indent = self.formatter._current_indent - heading = '%*s%s:\n' % (current_indent, '', self.heading) - else: - heading = '' - - # join the section-initial newline, the heading and the help - return join(['\n', heading, item_help, '\n']) - - def _add_item(self, func, args): - self._current_section.items.append((func, args)) - - # ======================== - # Message building methods - # ======================== - def start_section(self, heading): - self._indent() - section = self._Section(self, self._current_section, heading) - self._add_item(section.format_help, []) - self._current_section = section - - def end_section(self): - self._current_section = self._current_section.parent - self._dedent() - - def add_text(self, text): - if text is not SUPPRESS and text is not None: - self._add_item(self._format_text, [text]) - - def add_usage(self, usage, actions, groups, prefix=None): - if usage is not SUPPRESS: - args = usage, actions, groups, prefix - self._add_item(self._format_usage, args) - - def add_argument(self, action): - if action.help is not SUPPRESS: - - # find all invocations - get_invocation = self._format_action_invocation - invocations = [get_invocation(action)] - for subaction in self._iter_indented_subactions(action): - invocations.append(get_invocation(subaction)) - - # update the maximum item length - invocation_length = max([len(s) for s in invocations]) - action_length = invocation_length + self._current_indent - self._action_max_length = max(self._action_max_length, - action_length) - - # add the item to the list - self._add_item(self._format_action, [action]) - - def add_arguments(self, actions): - for action in actions: - self.add_argument(action) - - # ======================= - # Help-formatting methods - # ======================= - def format_help(self): - help = self._root_section.format_help() - if help: - help = self._long_break_matcher.sub('\n\n', help) - help = help.strip('\n') + '\n' - return help - - def _join_parts(self, part_strings): - return ''.join([part - for part in part_strings - if part and part is not SUPPRESS]) - - def _format_usage(self, usage, actions, groups, prefix): - if prefix is None: - prefix = _('usage: ') - - # if usage is specified, use that - if usage is not None: - usage = usage % dict(prog=self._prog) - - # if no optionals or positionals are available, usage is just prog - elif usage is None and not actions: - usage = '%(prog)s' % dict(prog=self._prog) - - # if optionals and positionals are available, calculate usage - elif usage is None: - prog = '%(prog)s' % dict(prog=self._prog) - - # split optionals from positionals - optionals = [] - positionals = [] - for action in actions: - if action.option_strings: - optionals.append(action) - else: - positionals.append(action) - - # build full usage string - format = self._format_actions_usage - action_usage = format(optionals + positionals, groups) - usage = ' '.join([s for s in [prog, action_usage] if s]) - - # wrap the usage parts if it's too long - text_width = self._width - self._current_indent - if len(prefix) + len(usage) > text_width: - - # break usage into wrappable parts - part_regexp = r'\(.*?\)+|\[.*?\]+|\S+' - opt_usage = format(optionals, groups) - pos_usage = format(positionals, groups) - opt_parts = _re.findall(part_regexp, opt_usage) - pos_parts = _re.findall(part_regexp, pos_usage) - assert ' '.join(opt_parts) == opt_usage - assert ' '.join(pos_parts) == pos_usage - - # helper for wrapping lines - def get_lines(parts, indent, prefix=None): - lines = [] - line = [] - if prefix is not None: - line_len = len(prefix) - 1 - else: - line_len = len(indent) - 1 - for part in parts: - if line_len + 1 + len(part) > text_width: - lines.append(indent + ' '.join(line)) - line = [] - line_len = len(indent) - 1 - line.append(part) - line_len += len(part) + 1 - if line: - lines.append(indent + ' '.join(line)) - if prefix is not None: - lines[0] = lines[0][len(indent):] - return lines - - # if prog is short, follow it with optionals or positionals - if len(prefix) + len(prog) <= 0.75 * text_width: - indent = ' ' * (len(prefix) + len(prog) + 1) - if opt_parts: - lines = get_lines([prog] + opt_parts, indent, prefix) - lines.extend(get_lines(pos_parts, indent)) - elif pos_parts: - lines = get_lines([prog] + pos_parts, indent, prefix) - else: - lines = [prog] - - # if prog is long, put it on its own line - else: - indent = ' ' * len(prefix) - parts = opt_parts + pos_parts - lines = get_lines(parts, indent) - if len(lines) > 1: - lines = [] - lines.extend(get_lines(opt_parts, indent)) - lines.extend(get_lines(pos_parts, indent)) - lines = [prog] + lines - - # join lines into usage - usage = '\n'.join(lines) - - # prefix with 'usage:' - return '%s%s\n\n' % (prefix, usage) - - def _format_actions_usage(self, actions, groups): - # find group indices and identify actions in groups - group_actions = _set() - inserts = {} - for group in groups: - try: - start = actions.index(group._group_actions[0]) - except ValueError: - continue - else: - end = start + len(group._group_actions) - if actions[start:end] == group._group_actions: - for action in group._group_actions: - group_actions.add(action) - if not group.required: - inserts[start] = '[' - inserts[end] = ']' - else: - inserts[start] = '(' - inserts[end] = ')' - for i in range(start + 1, end): - inserts[i] = '|' - - # collect all actions format strings - parts = [] - for i, action in enumerate(actions): - - # suppressed arguments are marked with None - # remove | separators for suppressed arguments - if action.help is SUPPRESS: - parts.append(None) - if inserts.get(i) == '|': - inserts.pop(i) - elif inserts.get(i + 1) == '|': - inserts.pop(i + 1) - - # produce all arg strings - elif not action.option_strings: - part = self._format_args(action, action.dest) - - # if it's in a group, strip the outer [] - if action in group_actions: - if part[0] == '[' and part[-1] == ']': - part = part[1:-1] - - # add the action string to the list - parts.append(part) - - # produce the first way to invoke the option in brackets - else: - option_string = action.option_strings[0] - - # if the Optional doesn't take a value, format is: - # -s or --long - if action.nargs == 0: - part = '%s' % option_string - - # if the Optional takes a value, format is: - # -s ARGS or --long ARGS - else: - default = action.dest.upper() - args_string = self._format_args(action, default) - part = '%s %s' % (option_string, args_string) - - # make it look optional if it's not required or in a group - if not action.required and action not in group_actions: - part = '[%s]' % part - - # add the action string to the list - parts.append(part) - - # insert things at the necessary indices - for i in _sorted(inserts, reverse=True): - parts[i:i] = [inserts[i]] - - # join all the action items with spaces - text = ' '.join([item for item in parts if item is not None]) - - # clean up separators for mutually exclusive groups - open = r'[\[(]' - close = r'[\])]' - text = _re.sub(r'(%s) ' % open, r'\1', text) - text = _re.sub(r' (%s)' % close, r'\1', text) - text = _re.sub(r'%s *%s' % (open, close), r'', text) - text = _re.sub(r'\(([^|]*)\)', r'\1', text) - text = text.strip() - - # return the text - return text - - def _format_text(self, text): - if '%(prog)' in text: - text = text % dict(prog=self._prog) - text_width = self._width - self._current_indent - indent = ' ' * self._current_indent - return self._fill_text(text, text_width, indent) + '\n\n' - - def _format_action(self, action): - # determine the required width and the entry label - help_position = min(self._action_max_length + 2, - self._max_help_position) - help_width = self._width - help_position - action_width = help_position - self._current_indent - 2 - action_header = self._format_action_invocation(action) - - # ho nelp; start on same line and add a final newline - if not action.help: - tup = self._current_indent, '', action_header - action_header = '%*s%s\n' % tup - - # short action name; start on the same line and pad two spaces - elif len(action_header) <= action_width: - tup = self._current_indent, '', action_width, action_header - action_header = '%*s%-*s ' % tup - indent_first = 0 - - # long action name; start on the next line - else: - tup = self._current_indent, '', action_header - action_header = '%*s%s\n' % tup - indent_first = help_position - - # collect the pieces of the action help - parts = [action_header] - - # if there was help for the action, add lines of help text - if action.help: - help_text = self._expand_help(action) - help_lines = self._split_lines(help_text, help_width) - parts.append('%*s%s\n' % (indent_first, '', help_lines[0])) - for line in help_lines[1:]: - parts.append('%*s%s\n' % (help_position, '', line)) - - # or add a newline if the description doesn't end with one - elif not action_header.endswith('\n'): - parts.append('\n') - - # if there are any sub-actions, add their help as well - for subaction in self._iter_indented_subactions(action): - parts.append(self._format_action(subaction)) - - # return a single string - return self._join_parts(parts) - - def _format_action_invocation(self, action): - if not action.option_strings: - metavar, = self._metavar_formatter(action, action.dest)(1) - return metavar - - else: - parts = [] - - # if the Optional doesn't take a value, format is: - # -s, --long - if action.nargs == 0: - parts.extend(action.option_strings) - - # if the Optional takes a value, format is: - # -s ARGS, --long ARGS - else: - default = action.dest.upper() - args_string = self._format_args(action, default) - for option_string in action.option_strings: - parts.append('%s %s' % (option_string, args_string)) - - return ', '.join(parts) - - def _metavar_formatter(self, action, default_metavar): - if action.metavar is not None: - result = action.metavar - elif action.choices is not None: - choice_strs = [str(choice) for choice in action.choices] - result = '{%s}' % ','.join(choice_strs) - else: - result = default_metavar - - def format(tuple_size): - if isinstance(result, tuple): - return result - else: - return (result, ) * tuple_size - return format - - def _format_args(self, action, default_metavar): - get_metavar = self._metavar_formatter(action, default_metavar) - if action.nargs is None: - result = '%s' % get_metavar(1) - elif action.nargs == OPTIONAL: - result = '[%s]' % get_metavar(1) - elif action.nargs == ZERO_OR_MORE: - result = '[%s [%s ...]]' % get_metavar(2) - elif action.nargs == ONE_OR_MORE: - result = '%s [%s ...]' % get_metavar(2) - elif action.nargs == REMAINDER: - result = '...' - elif action.nargs == PARSER: - result = '%s ...' % get_metavar(1) - else: - formats = ['%s' for _ in range(action.nargs)] - result = ' '.join(formats) % get_metavar(action.nargs) - return result - - def _expand_help(self, action): - params = dict(vars(action), prog=self._prog) - for name in list(params): - if params[name] is SUPPRESS: - del params[name] - for name in list(params): - if hasattr(params[name], '__name__'): - params[name] = params[name].__name__ - if params.get('choices') is not None: - choices_str = ', '.join([str(c) for c in params['choices']]) - params['choices'] = choices_str - return self._get_help_string(action) % params - - def _iter_indented_subactions(self, action): - try: - get_subactions = action._get_subactions - except AttributeError: - pass - else: - self._indent() - for subaction in get_subactions(): - yield subaction - self._dedent() - - def _split_lines(self, text, width): - text = self._whitespace_matcher.sub(' ', text).strip() - return _textwrap.wrap(text, width) - - def _fill_text(self, text, width, indent): - text = self._whitespace_matcher.sub(' ', text).strip() - return _textwrap.fill(text, width, initial_indent=indent, - subsequent_indent=indent) - - def _get_help_string(self, action): - return action.help - - -class RawDescriptionHelpFormatter(HelpFormatter): - """Help message formatter which retains any formatting in descriptions. - - Only the name of this class is considered a public API. All the methods - provided by the class are considered an implementation detail. - """ - - def _fill_text(self, text, width, indent): - return ''.join([indent + line for line in text.splitlines(True)]) - - -class RawTextHelpFormatter(RawDescriptionHelpFormatter): - """Help message formatter which retains formatting of all help text. - - Only the name of this class is considered a public API. All the methods - provided by the class are considered an implementation detail. - """ - - def _split_lines(self, text, width): - return text.splitlines() - - -class ArgumentDefaultsHelpFormatter(HelpFormatter): - """Help message formatter which adds default values to argument help. - - Only the name of this class is considered a public API. All the methods - provided by the class are considered an implementation detail. - """ - - def _get_help_string(self, action): - help = action.help - if '%(default)' not in action.help: - if action.default is not SUPPRESS: - defaulting_nargs = [OPTIONAL, ZERO_OR_MORE] - if action.option_strings or action.nargs in defaulting_nargs: - help += ' (default: %(default)s)' - return help - - -# ===================== -# Options and Arguments -# ===================== - -def _get_action_name(argument): - if argument is None: - return None - elif argument.option_strings: - return '/'.join(argument.option_strings) - elif argument.metavar not in (None, SUPPRESS): - return argument.metavar - elif argument.dest not in (None, SUPPRESS): - return argument.dest - else: - return None - - -class ArgumentError(Exception): - """An error from creating or using an argument (optional or positional). - - The string value of this exception is the message, augmented with - information about the argument that caused it. - """ - - def __init__(self, argument, message): - self.argument_name = _get_action_name(argument) - self.message = message - - def __str__(self): - if self.argument_name is None: - format = '%(message)s' - else: - format = 'argument %(argument_name)s: %(message)s' - return format % dict(message=self.message, - argument_name=self.argument_name) - - -class ArgumentTypeError(Exception): - """An error from trying to convert a command line string to a type.""" - pass - - -# ============== -# Action classes -# ============== - -class Action(_AttributeHolder): - """Information about how to convert command line strings to Python objects. - - Action objects are used by an ArgumentParser to represent the information - needed to parse a single argument from one or more strings from the - command line. The keyword arguments to the Action constructor are also - all attributes of Action instances. - - Keyword Arguments: - - - option_strings -- A list of command-line option strings which - should be associated with this action. - - - dest -- The name of the attribute to hold the created object(s) - - - nargs -- The number of command-line arguments that should be - consumed. By default, one argument will be consumed and a single - value will be produced. Other values include: - - N (an integer) consumes N arguments (and produces a list) - - '?' consumes zero or one arguments - - '*' consumes zero or more arguments (and produces a list) - - '+' consumes one or more arguments (and produces a list) - Note that the difference between the default and nargs=1 is that - with the default, a single value will be produced, while with - nargs=1, a list containing a single value will be produced. - - - const -- The value to be produced if the option is specified and the - option uses an action that takes no values. - - - default -- The value to be produced if the option is not specified. - - - type -- The type which the command-line arguments should be converted - to, should be one of 'string', 'int', 'float', 'complex' or a - callable object that accepts a single string argument. If None, - 'string' is assumed. - - - choices -- A container of values that should be allowed. If not None, - after a command-line argument has been converted to the appropriate - type, an exception will be raised if it is not a member of this - collection. - - - required -- True if the action must always be specified at the - command line. This is only meaningful for optional command-line - arguments. - - - help -- The help string describing the argument. - - - metavar -- The name to be used for the option's argument with the - help string. If None, the 'dest' value will be used as the name. - """ - - def __init__(self, - option_strings, - dest, - nargs=None, - const=None, - default=None, - type=None, - choices=None, - required=False, - help=None, - metavar=None): - self.option_strings = option_strings - self.dest = dest - self.nargs = nargs - self.const = const - self.default = default - self.type = type - self.choices = choices - self.required = required - self.help = help - self.metavar = metavar - - def _get_kwargs(self): - names = [ - 'option_strings', - 'dest', - 'nargs', - 'const', - 'default', - 'type', - 'choices', - 'help', - 'metavar', - ] - return [(name, getattr(self, name)) for name in names] - - def __call__(self, parser, namespace, values, option_string=None): - raise NotImplementedError(_('.__call__() not defined')) - - -class _StoreAction(Action): - - def __init__(self, - option_strings, - dest, - nargs=None, - const=None, - default=None, - type=None, - choices=None, - required=False, - help=None, - metavar=None): - if nargs == 0: - raise ValueError('nargs for store actions must be > 0; if you ' - 'have nothing to store, actions such as store ' - 'true or store const may be more appropriate') - if const is not None and nargs != OPTIONAL: - raise ValueError('nargs must be %r to supply const' % OPTIONAL) - super(_StoreAction, self).__init__( - option_strings=option_strings, - dest=dest, - nargs=nargs, - const=const, - default=default, - type=type, - choices=choices, - required=required, - help=help, - metavar=metavar) - - def __call__(self, parser, namespace, values, option_string=None): - setattr(namespace, self.dest, values) - - -class _StoreConstAction(Action): - - def __init__(self, - option_strings, - dest, - const, - default=None, - required=False, - help=None, - metavar=None): - super(_StoreConstAction, self).__init__( - option_strings=option_strings, - dest=dest, - nargs=0, - const=const, - default=default, - required=required, - help=help) - - def __call__(self, parser, namespace, values, option_string=None): - setattr(namespace, self.dest, self.const) - - -class _StoreTrueAction(_StoreConstAction): - - def __init__(self, - option_strings, - dest, - default=False, - required=False, - help=None): - super(_StoreTrueAction, self).__init__( - option_strings=option_strings, - dest=dest, - const=True, - default=default, - required=required, - help=help) - - -class _StoreFalseAction(_StoreConstAction): - - def __init__(self, - option_strings, - dest, - default=True, - required=False, - help=None): - super(_StoreFalseAction, self).__init__( - option_strings=option_strings, - dest=dest, - const=False, - default=default, - required=required, - help=help) - - -class _AppendAction(Action): - - def __init__(self, - option_strings, - dest, - nargs=None, - const=None, - default=None, - type=None, - choices=None, - required=False, - help=None, - metavar=None): - if nargs == 0: - raise ValueError('nargs for append actions must be > 0; if arg ' - 'strings are not supplying the value to append, ' - 'the append const action may be more appropriate') - if const is not None and nargs != OPTIONAL: - raise ValueError('nargs must be %r to supply const' % OPTIONAL) - super(_AppendAction, self).__init__( - option_strings=option_strings, - dest=dest, - nargs=nargs, - const=const, - default=default, - type=type, - choices=choices, - required=required, - help=help, - metavar=metavar) - - def __call__(self, parser, namespace, values, option_string=None): - items = _copy.copy(_ensure_value(namespace, self.dest, [])) - items.append(values) - setattr(namespace, self.dest, items) - - -class _AppendConstAction(Action): - - def __init__(self, - option_strings, - dest, - const, - default=None, - required=False, - help=None, - metavar=None): - super(_AppendConstAction, self).__init__( - option_strings=option_strings, - dest=dest, - nargs=0, - const=const, - default=default, - required=required, - help=help, - metavar=metavar) - - def __call__(self, parser, namespace, values, option_string=None): - items = _copy.copy(_ensure_value(namespace, self.dest, [])) - items.append(self.const) - setattr(namespace, self.dest, items) - - -class _CountAction(Action): - - def __init__(self, - option_strings, - dest, - default=None, - required=False, - help=None): - super(_CountAction, self).__init__( - option_strings=option_strings, - dest=dest, - nargs=0, - default=default, - required=required, - help=help) - - def __call__(self, parser, namespace, values, option_string=None): - new_count = _ensure_value(namespace, self.dest, 0) + 1 - setattr(namespace, self.dest, new_count) - - -class _HelpAction(Action): - - def __init__(self, - option_strings, - dest=SUPPRESS, - default=SUPPRESS, - help=None): - super(_HelpAction, self).__init__( - option_strings=option_strings, - dest=dest, - default=default, - nargs=0, - help=help) - - def __call__(self, parser, namespace, values, option_string=None): - parser.print_help() - parser.exit() - - -class _VersionAction(Action): - - def __init__(self, - option_strings, - version=None, - dest=SUPPRESS, - default=SUPPRESS, - help=None): - super(_VersionAction, self).__init__( - option_strings=option_strings, - dest=dest, - default=default, - nargs=0, - help=help) - self.version = version - - def __call__(self, parser, namespace, values, option_string=None): - version = self.version - if version is None: - version = parser.version - formatter = parser._get_formatter() - formatter.add_text(version) - parser.exit(message=formatter.format_help()) - - -class _SubParsersAction(Action): - - class _ChoicesPseudoAction(Action): - - def __init__(self, name, help): - sup = super(_SubParsersAction._ChoicesPseudoAction, self) - sup.__init__(option_strings=[], dest=name, help=help) - - def __init__(self, - option_strings, - prog, - parser_class, - dest=SUPPRESS, - help=None, - metavar=None): - - self._prog_prefix = prog - self._parser_class = parser_class - self._name_parser_map = {} - self._choices_actions = [] - - super(_SubParsersAction, self).__init__( - option_strings=option_strings, - dest=dest, - nargs=PARSER, - choices=self._name_parser_map, - help=help, - metavar=metavar) - - def add_parser(self, name, **kwargs): - # set prog from the existing prefix - if kwargs.get('prog') is None: - kwargs['prog'] = '%s %s' % (self._prog_prefix, name) - - # create a pseudo-action to hold the choice help - if 'help' in kwargs: - help = kwargs.pop('help') - choice_action = self._ChoicesPseudoAction(name, help) - self._choices_actions.append(choice_action) - - # create the parser and add it to the map - parser = self._parser_class(**kwargs) - self._name_parser_map[name] = parser - return parser - - def _get_subactions(self): - return self._choices_actions - - def __call__(self, parser, namespace, values, option_string=None): - parser_name = values[0] - arg_strings = values[1:] - - # set the parser name if requested - if self.dest is not SUPPRESS: - setattr(namespace, self.dest, parser_name) - - # select the parser - try: - parser = self._name_parser_map[parser_name] - except KeyError: - tup = parser_name, ', '.join(self._name_parser_map) - msg = _('unknown parser %r (choices: %s)' % tup) - raise ArgumentError(self, msg) - - # parse all the remaining options into the namespace - parser.parse_args(arg_strings, namespace) - - -# ============== -# Type classes -# ============== - -class FileType(object): - """Factory for creating file object types - - Instances of FileType are typically passed as type= arguments to the - ArgumentParser add_argument() method. - - Keyword Arguments: - - mode -- A string indicating how the file is to be opened. Accepts the - same values as the builtin open() function. - - bufsize -- The file's desired buffer size. Accepts the same values as - the builtin open() function. - """ - - def __init__(self, mode='r', bufsize=None): - self._mode = mode - self._bufsize = bufsize - - def __call__(self, string): - # the special argument "-" means sys.std{in,out} - if string == '-': - if 'r' in self._mode: - return _sys.stdin - elif 'w' in self._mode: - return _sys.stdout - else: - msg = _('argument "-" with mode %r' % self._mode) - raise ValueError(msg) - - # all other arguments are used as file names - if self._bufsize: - return open(string, self._mode, self._bufsize) - else: - return open(string, self._mode) - - def __repr__(self): - args = [self._mode, self._bufsize] - args_str = ', '.join([repr(arg) for arg in args if arg is not None]) - return '%s(%s)' % (type(self).__name__, args_str) - -# =========================== -# Optional and Positional Parsing -# =========================== - -class Namespace(_AttributeHolder): - """Simple object for storing attributes. - - Implements equality by attribute names and values, and provides a simple - string representation. - """ - - def __init__(self, **kwargs): - for name in kwargs: - setattr(self, name, kwargs[name]) - - def __eq__(self, other): - return vars(self) == vars(other) - - def __ne__(self, other): - return not (self == other) - - def __contains__(self, key): - return key in self.__dict__ - - -class _ActionsContainer(object): - - def __init__(self, - description, - prefix_chars, - argument_default, - conflict_handler): - super(_ActionsContainer, self).__init__() - - self.description = description - self.argument_default = argument_default - self.prefix_chars = prefix_chars - self.conflict_handler = conflict_handler - - # set up registries - self._registries = {} - - # register actions - self.register('action', None, _StoreAction) - self.register('action', 'store', _StoreAction) - self.register('action', 'store_const', _StoreConstAction) - self.register('action', 'store_true', _StoreTrueAction) - self.register('action', 'store_false', _StoreFalseAction) - self.register('action', 'append', _AppendAction) - self.register('action', 'append_const', _AppendConstAction) - self.register('action', 'count', _CountAction) - self.register('action', 'help', _HelpAction) - self.register('action', 'version', _VersionAction) - self.register('action', 'parsers', _SubParsersAction) - - # raise an exception if the conflict handler is invalid - self._get_handler() - - # action storage - self._actions = [] - self._option_string_actions = {} - - # groups - self._action_groups = [] - self._mutually_exclusive_groups = [] - - # defaults storage - self._defaults = {} - - # determines whether an "option" looks like a negative number - self._negative_number_matcher = _re.compile(r'^-\d+$|^-\d*\.\d+$') - - # whether or not there are any optionals that look like negative - # numbers -- uses a list so it can be shared and edited - self._has_negative_number_optionals = [] - - # ==================== - # Registration methods - # ==================== - def register(self, registry_name, value, object): - registry = self._registries.setdefault(registry_name, {}) - registry[value] = object - - def _registry_get(self, registry_name, value, default=None): - return self._registries[registry_name].get(value, default) - - # ================================== - # Namespace default accessor methods - # ================================== - def set_defaults(self, **kwargs): - self._defaults.update(kwargs) - - # if these defaults match any existing arguments, replace - # the previous default on the object with the new one - for action in self._actions: - if action.dest in kwargs: - action.default = kwargs[action.dest] - - def get_default(self, dest): - for action in self._actions: - if action.dest == dest and action.default is not None: - return action.default - return self._defaults.get(dest, None) - - - # ======================= - # Adding argument actions - # ======================= - def add_argument(self, *args, **kwargs): - """ - add_argument(dest, ..., name=value, ...) - add_argument(option_string, option_string, ..., name=value, ...) - """ - - # if no positional args are supplied or only one is supplied and - # it doesn't look like an option string, parse a positional - # argument - chars = self.prefix_chars - if not args or len(args) == 1 and args[0][0] not in chars: - if args and 'dest' in kwargs: - raise ValueError('dest supplied twice for positional argument') - kwargs = self._get_positional_kwargs(*args, **kwargs) - - # otherwise, we're adding an optional argument - else: - kwargs = self._get_optional_kwargs(*args, **kwargs) - - # if no default was supplied, use the parser-level default - if 'default' not in kwargs: - dest = kwargs['dest'] - if dest in self._defaults: - kwargs['default'] = self._defaults[dest] - elif self.argument_default is not None: - kwargs['default'] = self.argument_default - - # create the action object, and add it to the parser - action_class = self._pop_action_class(kwargs) - if not _callable(action_class): - raise ValueError('unknown action "%s"' % action_class) - action = action_class(**kwargs) - - # raise an error if the action type is not callable - type_func = self._registry_get('type', action.type, action.type) - if not _callable(type_func): - raise ValueError('%r is not callable' % type_func) - - return self._add_action(action) - - def add_argument_group(self, *args, **kwargs): - group = _ArgumentGroup(self, *args, **kwargs) - self._action_groups.append(group) - return group - - def add_mutually_exclusive_group(self, **kwargs): - group = _MutuallyExclusiveGroup(self, **kwargs) - self._mutually_exclusive_groups.append(group) - return group - - def _add_action(self, action): - # resolve any conflicts - self._check_conflict(action) - - # add to actions list - self._actions.append(action) - action.container = self - - # index the action by any option strings it has - for option_string in action.option_strings: - self._option_string_actions[option_string] = action - - # set the flag if any option strings look like negative numbers - for option_string in action.option_strings: - if self._negative_number_matcher.match(option_string): - if not self._has_negative_number_optionals: - self._has_negative_number_optionals.append(True) - - # return the created action - return action - - def _remove_action(self, action): - self._actions.remove(action) - - def _add_container_actions(self, container): - # collect groups by titles - title_group_map = {} - for group in self._action_groups: - if group.title in title_group_map: - msg = _('cannot merge actions - two groups are named %r') - raise ValueError(msg % (group.title)) - title_group_map[group.title] = group - - # map each action to its group - group_map = {} - for group in container._action_groups: - - # if a group with the title exists, use that, otherwise - # create a new group matching the container's group - if group.title not in title_group_map: - title_group_map[group.title] = self.add_argument_group( - title=group.title, - description=group.description, - conflict_handler=group.conflict_handler) - - # map the actions to their new group - for action in group._group_actions: - group_map[action] = title_group_map[group.title] - - # add container's mutually exclusive groups - # NOTE: if add_mutually_exclusive_group ever gains title= and - # description= then this code will need to be expanded as above - for group in container._mutually_exclusive_groups: - mutex_group = self.add_mutually_exclusive_group( - required=group.required) - - # map the actions to their new mutex group - for action in group._group_actions: - group_map[action] = mutex_group - - # add all actions to this container or their group - for action in container._actions: - group_map.get(action, self)._add_action(action) - - def _get_positional_kwargs(self, dest, **kwargs): - # make sure required is not specified - if 'required' in kwargs: - msg = _("'required' is an invalid argument for positionals") - raise TypeError(msg) - - # mark positional arguments as required if at least one is - # always required - if kwargs.get('nargs') not in [OPTIONAL, ZERO_OR_MORE]: - kwargs['required'] = True - if kwargs.get('nargs') == ZERO_OR_MORE and 'default' not in kwargs: - kwargs['required'] = True - - # return the keyword arguments with no option strings - return dict(kwargs, dest=dest, option_strings=[]) - - def _get_optional_kwargs(self, *args, **kwargs): - # determine short and long option strings - option_strings = [] - long_option_strings = [] - for option_string in args: - # error on strings that don't start with an appropriate prefix - if not option_string[0] in self.prefix_chars: - msg = _('invalid option string %r: ' - 'must start with a character %r') - tup = option_string, self.prefix_chars - raise ValueError(msg % tup) - - # strings starting with two prefix characters are long options - option_strings.append(option_string) - if option_string[0] in self.prefix_chars: - if len(option_string) > 1: - if option_string[1] in self.prefix_chars: - long_option_strings.append(option_string) - - # infer destination, '--foo-bar' -> 'foo_bar' and '-x' -> 'x' - dest = kwargs.pop('dest', None) - if dest is None: - if long_option_strings: - dest_option_string = long_option_strings[0] - else: - dest_option_string = option_strings[0] - dest = dest_option_string.lstrip(self.prefix_chars) - if not dest: - msg = _('dest= is required for options like %r') - raise ValueError(msg % option_string) - dest = dest.replace('-', '_') - - # return the updated keyword arguments - return dict(kwargs, dest=dest, option_strings=option_strings) - - def _pop_action_class(self, kwargs, default=None): - action = kwargs.pop('action', default) - return self._registry_get('action', action, action) - - def _get_handler(self): - # determine function from conflict handler string - handler_func_name = '_handle_conflict_%s' % self.conflict_handler - try: - return getattr(self, handler_func_name) - except AttributeError: - msg = _('invalid conflict_resolution value: %r') - raise ValueError(msg % self.conflict_handler) - - def _check_conflict(self, action): - - # find all options that conflict with this option - confl_optionals = [] - for option_string in action.option_strings: - if option_string in self._option_string_actions: - confl_optional = self._option_string_actions[option_string] - confl_optionals.append((option_string, confl_optional)) - - # resolve any conflicts - if confl_optionals: - conflict_handler = self._get_handler() - conflict_handler(action, confl_optionals) - - def _handle_conflict_error(self, action, conflicting_actions): - message = _('conflicting option string(s): %s') - conflict_string = ', '.join([option_string - for option_string, action - in conflicting_actions]) - raise ArgumentError(action, message % conflict_string) - - def _handle_conflict_resolve(self, action, conflicting_actions): - - # remove all conflicting options - for option_string, action in conflicting_actions: - - # remove the conflicting option - action.option_strings.remove(option_string) - self._option_string_actions.pop(option_string, None) - - # if the option now has no option string, remove it from the - # container holding it - if not action.option_strings: - action.container._remove_action(action) - - -class _ArgumentGroup(_ActionsContainer): - - def __init__(self, container, title=None, description=None, **kwargs): - # add any missing keyword arguments by checking the container - update = kwargs.setdefault - update('conflict_handler', container.conflict_handler) - update('prefix_chars', container.prefix_chars) - update('argument_default', container.argument_default) - super_init = super(_ArgumentGroup, self).__init__ - super_init(description=description, **kwargs) - - # group attributes - self.title = title - self._group_actions = [] - - # share most attributes with the container - self._registries = container._registries - self._actions = container._actions - self._option_string_actions = container._option_string_actions - self._defaults = container._defaults - self._has_negative_number_optionals = \ - container._has_negative_number_optionals - - def _add_action(self, action): - action = super(_ArgumentGroup, self)._add_action(action) - self._group_actions.append(action) - return action - - def _remove_action(self, action): - super(_ArgumentGroup, self)._remove_action(action) - self._group_actions.remove(action) - - -class _MutuallyExclusiveGroup(_ArgumentGroup): - - def __init__(self, container, required=False): - super(_MutuallyExclusiveGroup, self).__init__(container) - self.required = required - self._container = container - - def _add_action(self, action): - if action.required: - msg = _('mutually exclusive arguments must be optional') - raise ValueError(msg) - action = self._container._add_action(action) - self._group_actions.append(action) - return action - - def _remove_action(self, action): - self._container._remove_action(action) - self._group_actions.remove(action) - - -class ArgumentParser(_AttributeHolder, _ActionsContainer): - """Object for parsing command line strings into Python objects. - - Keyword Arguments: - - prog -- The name of the program (default: sys.argv[0]) - - usage -- A usage message (default: auto-generated from arguments) - - description -- A description of what the program does - - epilog -- Text following the argument descriptions - - parents -- Parsers whose arguments should be copied into this one - - formatter_class -- HelpFormatter class for printing help messages - - prefix_chars -- Characters that prefix optional arguments - - fromfile_prefix_chars -- Characters that prefix files containing - additional arguments - - argument_default -- The default value for all arguments - - conflict_handler -- String indicating how to handle conflicts - - add_help -- Add a -h/-help option - """ - - def __init__(self, - prog=None, - usage=None, - description=None, - epilog=None, - version=None, - parents=[], - formatter_class=HelpFormatter, - prefix_chars='-', - fromfile_prefix_chars=None, - argument_default=None, - conflict_handler='error', - add_help=True): - - if version is not None: - import warnings - warnings.warn( - """The "version" argument to ArgumentParser is deprecated. """ - """Please use """ - """"add_argument(..., action='version', version="N", ...)" """ - """instead""", DeprecationWarning) - - superinit = super(ArgumentParser, self).__init__ - superinit(description=description, - prefix_chars=prefix_chars, - argument_default=argument_default, - conflict_handler=conflict_handler) - - # default setting for prog - if prog is None: - prog = _os.path.basename(_sys.argv[0]) - - self.prog = prog - self.usage = usage - self.epilog = epilog - self.version = version - self.formatter_class = formatter_class - self.fromfile_prefix_chars = fromfile_prefix_chars - self.add_help = add_help - - add_group = self.add_argument_group - self._positionals = add_group(_('positional arguments')) - self._optionals = add_group(_('optional arguments')) - self._subparsers = None - - # register types - def identity(string): - return string - self.register('type', None, identity) - - # add help and version arguments if necessary - # (using explicit default to override global argument_default) - if self.add_help: - self.add_argument( - '-h', '--help', action='help', default=SUPPRESS, - help=_('show this help message and exit')) - if self.version: - self.add_argument( - '-v', '--version', action='version', default=SUPPRESS, - version=self.version, - help=_("show program's version number and exit")) - - # add parent arguments and defaults - for parent in parents: - self._add_container_actions(parent) - try: - defaults = parent._defaults - except AttributeError: - pass - else: - self._defaults.update(defaults) - - # ======================= - # Pretty __repr__ methods - # ======================= - def _get_kwargs(self): - names = [ - 'prog', - 'usage', - 'description', - 'version', - 'formatter_class', - 'conflict_handler', - 'add_help', - ] - return [(name, getattr(self, name)) for name in names] - - # ================================== - # Optional/Positional adding methods - # ================================== - def add_subparsers(self, **kwargs): - if self._subparsers is not None: - self.error(_('cannot have multiple subparser arguments')) - - # add the parser class to the arguments if it's not present - kwargs.setdefault('parser_class', type(self)) - - if 'title' in kwargs or 'description' in kwargs: - title = _(kwargs.pop('title', 'subcommands')) - description = _(kwargs.pop('description', None)) - self._subparsers = self.add_argument_group(title, description) - else: - self._subparsers = self._positionals - - # prog defaults to the usage message of this parser, skipping - # optional arguments and with no "usage:" prefix - if kwargs.get('prog') is None: - formatter = self._get_formatter() - positionals = self._get_positional_actions() - groups = self._mutually_exclusive_groups - formatter.add_usage(self.usage, positionals, groups, '') - kwargs['prog'] = formatter.format_help().strip() - - # create the parsers action and add it to the positionals list - parsers_class = self._pop_action_class(kwargs, 'parsers') - action = parsers_class(option_strings=[], **kwargs) - self._subparsers._add_action(action) - - # return the created parsers action - return action - - def _add_action(self, action): - if action.option_strings: - self._optionals._add_action(action) - else: - self._positionals._add_action(action) - return action - - def _get_optional_actions(self): - return [action - for action in self._actions - if action.option_strings] - - def _get_positional_actions(self): - return [action - for action in self._actions - if not action.option_strings] - - # ===================================== - # Command line argument parsing methods - # ===================================== - def parse_args(self, args=None, namespace=None): - args, argv = self.parse_known_args(args, namespace) - if argv: - msg = _('unrecognized arguments: %s') - self.error(msg % ' '.join(argv)) - return args - - def parse_known_args(self, args=None, namespace=None): - # args default to the system args - if args is None: - args = _sys.argv[1:] - - # default Namespace built from parser defaults - if namespace is None: - namespace = Namespace() - - # add any action defaults that aren't present - for action in self._actions: - if action.dest is not SUPPRESS: - if not hasattr(namespace, action.dest): - if action.default is not SUPPRESS: - default = action.default - if isinstance(action.default, _basestring): - default = self._get_value(action, default) - setattr(namespace, action.dest, default) - - # add any parser defaults that aren't present - for dest in self._defaults: - if not hasattr(namespace, dest): - setattr(namespace, dest, self._defaults[dest]) - - # parse the arguments and exit if there are any errors - try: - return self._parse_known_args(args, namespace) - except ArgumentError: - err = _sys.exc_info()[1] - self.error(str(err)) - - def _parse_known_args(self, arg_strings, namespace): - # replace arg strings that are file references - if self.fromfile_prefix_chars is not None: - arg_strings = self._read_args_from_files(arg_strings) - - # map all mutually exclusive arguments to the other arguments - # they can't occur with - action_conflicts = {} - for mutex_group in self._mutually_exclusive_groups: - group_actions = mutex_group._group_actions - for i, mutex_action in enumerate(mutex_group._group_actions): - conflicts = action_conflicts.setdefault(mutex_action, []) - conflicts.extend(group_actions[:i]) - conflicts.extend(group_actions[i + 1:]) - - # find all option indices, and determine the arg_string_pattern - # which has an 'O' if there is an option at an index, - # an 'A' if there is an argument, or a '-' if there is a '--' - option_string_indices = {} - arg_string_pattern_parts = [] - arg_strings_iter = iter(arg_strings) - for i, arg_string in enumerate(arg_strings_iter): - - # all args after -- are non-options - if arg_string == '--': - arg_string_pattern_parts.append('-') - for arg_string in arg_strings_iter: - arg_string_pattern_parts.append('A') - - # otherwise, add the arg to the arg strings - # and note the index if it was an option - else: - option_tuple = self._parse_optional(arg_string) - if option_tuple is None: - pattern = 'A' - else: - option_string_indices[i] = option_tuple - pattern = 'O' - arg_string_pattern_parts.append(pattern) - - # join the pieces together to form the pattern - arg_strings_pattern = ''.join(arg_string_pattern_parts) - - # converts arg strings to the appropriate and then takes the action - seen_actions = _set() - seen_non_default_actions = _set() - - def take_action(action, argument_strings, option_string=None): - seen_actions.add(action) - argument_values = self._get_values(action, argument_strings) - - # error if this argument is not allowed with other previously - # seen arguments, assuming that actions that use the default - # value don't really count as "present" - if argument_values is not action.default: - seen_non_default_actions.add(action) - for conflict_action in action_conflicts.get(action, []): - if conflict_action in seen_non_default_actions: - msg = _('not allowed with argument %s') - action_name = _get_action_name(conflict_action) - raise ArgumentError(action, msg % action_name) - - # take the action if we didn't receive a SUPPRESS value - # (e.g. from a default) - if argument_values is not SUPPRESS: - action(self, namespace, argument_values, option_string) - - # function to convert arg_strings into an optional action - def consume_optional(start_index): - - # get the optional identified at this index - option_tuple = option_string_indices[start_index] - action, option_string, explicit_arg = option_tuple - - # identify additional optionals in the same arg string - # (e.g. -xyz is the same as -x -y -z if no args are required) - match_argument = self._match_argument - action_tuples = [] - while True: - - # if we found no optional action, skip it - if action is None: - extras.append(arg_strings[start_index]) - return start_index + 1 - - # if there is an explicit argument, try to match the - # optional's string arguments to only this - if explicit_arg is not None: - arg_count = match_argument(action, 'A') - - # if the action is a single-dash option and takes no - # arguments, try to parse more single-dash options out - # of the tail of the option string - chars = self.prefix_chars - if arg_count == 0 and option_string[1] not in chars: - action_tuples.append((action, [], option_string)) - for char in self.prefix_chars: - option_string = char + explicit_arg[0] - explicit_arg = explicit_arg[1:] or None - optionals_map = self._option_string_actions - if option_string in optionals_map: - action = optionals_map[option_string] - break - else: - msg = _('ignored explicit argument %r') - raise ArgumentError(action, msg % explicit_arg) - - # if the action expect exactly one argument, we've - # successfully matched the option; exit the loop - elif arg_count == 1: - stop = start_index + 1 - args = [explicit_arg] - action_tuples.append((action, args, option_string)) - break - - # error if a double-dash option did not use the - # explicit argument - else: - msg = _('ignored explicit argument %r') - raise ArgumentError(action, msg % explicit_arg) - - # if there is no explicit argument, try to match the - # optional's string arguments with the following strings - # if successful, exit the loop - else: - start = start_index + 1 - selected_patterns = arg_strings_pattern[start:] - arg_count = match_argument(action, selected_patterns) - stop = start + arg_count - args = arg_strings[start:stop] - action_tuples.append((action, args, option_string)) - break - - # add the Optional to the list and return the index at which - # the Optional's string args stopped - assert action_tuples - for action, args, option_string in action_tuples: - take_action(action, args, option_string) - return stop - - # the list of Positionals left to be parsed; this is modified - # by consume_positionals() - positionals = self._get_positional_actions() - - # function to convert arg_strings into positional actions - def consume_positionals(start_index): - # match as many Positionals as possible - match_partial = self._match_arguments_partial - selected_pattern = arg_strings_pattern[start_index:] - arg_counts = match_partial(positionals, selected_pattern) - - # slice off the appropriate arg strings for each Positional - # and add the Positional and its args to the list - for action, arg_count in zip(positionals, arg_counts): - args = arg_strings[start_index: start_index + arg_count] - start_index += arg_count - take_action(action, args) - - # slice off the Positionals that we just parsed and return the - # index at which the Positionals' string args stopped - positionals[:] = positionals[len(arg_counts):] - return start_index - - # consume Positionals and Optionals alternately, until we have - # passed the last option string - extras = [] - start_index = 0 - if option_string_indices: - max_option_string_index = max(option_string_indices) - else: - max_option_string_index = -1 - while start_index <= max_option_string_index: - - # consume any Positionals preceding the next option - next_option_string_index = min([ - index - for index in option_string_indices - if index >= start_index]) - if start_index != next_option_string_index: - positionals_end_index = consume_positionals(start_index) - - # only try to parse the next optional if we didn't consume - # the option string during the positionals parsing - if positionals_end_index > start_index: - start_index = positionals_end_index - continue - else: - start_index = positionals_end_index - - # if we consumed all the positionals we could and we're not - # at the index of an option string, there were extra arguments - if start_index not in option_string_indices: - strings = arg_strings[start_index:next_option_string_index] - extras.extend(strings) - start_index = next_option_string_index - - # consume the next optional and any arguments for it - start_index = consume_optional(start_index) - - # consume any positionals following the last Optional - stop_index = consume_positionals(start_index) - - # if we didn't consume all the argument strings, there were extras - extras.extend(arg_strings[stop_index:]) - - # if we didn't use all the Positional objects, there were too few - # arg strings supplied. - if positionals: - self.error(_('too few arguments')) - - # make sure all required actions were present - for action in self._actions: - if action.required: - if action not in seen_actions: - name = _get_action_name(action) - self.error(_('argument %s is required') % name) - - # make sure all required groups had one option present - for group in self._mutually_exclusive_groups: - if group.required: - for action in group._group_actions: - if action in seen_non_default_actions: - break - - # if no actions were used, report the error - else: - names = [_get_action_name(action) - for action in group._group_actions - if action.help is not SUPPRESS] - msg = _('one of the arguments %s is required') - self.error(msg % ' '.join(names)) - - # return the updated namespace and the extra arguments - return namespace, extras - - def _read_args_from_files(self, arg_strings): - # expand arguments referencing files - new_arg_strings = [] - for arg_string in arg_strings: - - # for regular arguments, just add them back into the list - if arg_string[0] not in self.fromfile_prefix_chars: - new_arg_strings.append(arg_string) - - # replace arguments referencing files with the file content - else: - try: - args_file = open(arg_string[1:]) - try: - arg_strings = [] - for arg_line in args_file.read().splitlines(): - for arg in self.convert_arg_line_to_args(arg_line): - arg_strings.append(arg) - arg_strings = self._read_args_from_files(arg_strings) - new_arg_strings.extend(arg_strings) - finally: - args_file.close() - except IOError: - err = _sys.exc_info()[1] - self.error(str(err)) - - # return the modified argument list - return new_arg_strings - - def convert_arg_line_to_args(self, arg_line): - return [arg_line] - - def _match_argument(self, action, arg_strings_pattern): - # match the pattern for this action to the arg strings - nargs_pattern = self._get_nargs_pattern(action) - match = _re.match(nargs_pattern, arg_strings_pattern) - - # raise an exception if we weren't able to find a match - if match is None: - nargs_errors = { - None: _('expected one argument'), - OPTIONAL: _('expected at most one argument'), - ONE_OR_MORE: _('expected at least one argument'), - } - default = _('expected %s argument(s)') % action.nargs - msg = nargs_errors.get(action.nargs, default) - raise ArgumentError(action, msg) - - # return the number of arguments matched - return len(match.group(1)) - - def _match_arguments_partial(self, actions, arg_strings_pattern): - # progressively shorten the actions list by slicing off the - # final actions until we find a match - result = [] - for i in range(len(actions), 0, -1): - actions_slice = actions[:i] - pattern = ''.join([self._get_nargs_pattern(action) - for action in actions_slice]) - match = _re.match(pattern, arg_strings_pattern) - if match is not None: - result.extend([len(string) for string in match.groups()]) - break - - # return the list of arg string counts - return result - - def _parse_optional(self, arg_string): - # if it's an empty string, it was meant to be a positional - if not arg_string: - return None - - # if it doesn't start with a prefix, it was meant to be positional - if not arg_string[0] in self.prefix_chars: - return None - - # if the option string is present in the parser, return the action - if arg_string in self._option_string_actions: - action = self._option_string_actions[arg_string] - return action, arg_string, None - - # if it's just a single character, it was meant to be positional - if len(arg_string) == 1: - return None - - # if the option string before the "=" is present, return the action - if '=' in arg_string: - option_string, explicit_arg = arg_string.split('=', 1) - if option_string in self._option_string_actions: - action = self._option_string_actions[option_string] - return action, option_string, explicit_arg - - # search through all possible prefixes of the option string - # and all actions in the parser for possible interpretations - option_tuples = self._get_option_tuples(arg_string) - - # if multiple actions match, the option string was ambiguous - if len(option_tuples) > 1: - options = ', '.join([option_string - for action, option_string, explicit_arg in option_tuples]) - tup = arg_string, options - self.error(_('ambiguous option: %s could match %s') % tup) - - # if exactly one action matched, this segmentation is good, - # so return the parsed action - elif len(option_tuples) == 1: - option_tuple, = option_tuples - return option_tuple - - # if it was not found as an option, but it looks like a negative - # number, it was meant to be positional - # unless there are negative-number-like options - if self._negative_number_matcher.match(arg_string): - if not self._has_negative_number_optionals: - return None - - # if it contains a space, it was meant to be a positional - if ' ' in arg_string: - return None - - # it was meant to be an optional but there is no such option - # in this parser (though it might be a valid option in a subparser) - return None, arg_string, None - - def _get_option_tuples(self, option_string): - result = [] - - # option strings starting with two prefix characters are only - # split at the '=' - chars = self.prefix_chars - if option_string[0] in chars and option_string[1] in chars: - if '=' in option_string: - option_prefix, explicit_arg = option_string.split('=', 1) - else: - option_prefix = option_string - explicit_arg = None - for option_string in self._option_string_actions: - if option_string.startswith(option_prefix): - action = self._option_string_actions[option_string] - tup = action, option_string, explicit_arg - result.append(tup) - - # single character options can be concatenated with their arguments - # but multiple character options always have to have their argument - # separate - elif option_string[0] in chars and option_string[1] not in chars: - option_prefix = option_string - explicit_arg = None - short_option_prefix = option_string[:2] - short_explicit_arg = option_string[2:] - - for option_string in self._option_string_actions: - if option_string == short_option_prefix: - action = self._option_string_actions[option_string] - tup = action, option_string, short_explicit_arg - result.append(tup) - elif option_string.startswith(option_prefix): - action = self._option_string_actions[option_string] - tup = action, option_string, explicit_arg - result.append(tup) - - # shouldn't ever get here - else: - self.error(_('unexpected option string: %s') % option_string) - - # return the collected option tuples - return result - - def _get_nargs_pattern(self, action): - # in all examples below, we have to allow for '--' args - # which are represented as '-' in the pattern - nargs = action.nargs - - # the default (None) is assumed to be a single argument - if nargs is None: - nargs_pattern = '(-*A-*)' - - # allow zero or one arguments - elif nargs == OPTIONAL: - nargs_pattern = '(-*A?-*)' - - # allow zero or more arguments - elif nargs == ZERO_OR_MORE: - nargs_pattern = '(-*[A-]*)' - - # allow one or more arguments - elif nargs == ONE_OR_MORE: - nargs_pattern = '(-*A[A-]*)' - - # allow any number of options or arguments - elif nargs == REMAINDER: - nargs_pattern = '([-AO]*)' - - # allow one argument followed by any number of options or arguments - elif nargs == PARSER: - nargs_pattern = '(-*A[-AO]*)' - - # all others should be integers - else: - nargs_pattern = '(-*%s-*)' % '-*'.join('A' * nargs) - - # if this is an optional action, -- is not allowed - if action.option_strings: - nargs_pattern = nargs_pattern.replace('-*', '') - nargs_pattern = nargs_pattern.replace('-', '') - - # return the pattern - return nargs_pattern - - # ======================== - # Value conversion methods - # ======================== - def _get_values(self, action, arg_strings): - # for everything but PARSER args, strip out '--' - if action.nargs not in [PARSER, REMAINDER]: - arg_strings = [s for s in arg_strings if s != '--'] - - # optional argument produces a default when not present - if not arg_strings and action.nargs == OPTIONAL: - if action.option_strings: - value = action.const - else: - value = action.default - if isinstance(value, _basestring): - value = self._get_value(action, value) - self._check_value(action, value) - - # when nargs='*' on a positional, if there were no command-line - # args, use the default if it is anything other than None - elif (not arg_strings and action.nargs == ZERO_OR_MORE and - not action.option_strings): - if action.default is not None: - value = action.default - else: - value = arg_strings - self._check_value(action, value) - - # single argument or optional argument produces a single value - elif len(arg_strings) == 1 and action.nargs in [None, OPTIONAL]: - arg_string, = arg_strings - value = self._get_value(action, arg_string) - self._check_value(action, value) - - # REMAINDER arguments convert all values, checking none - elif action.nargs == REMAINDER: - value = [self._get_value(action, v) for v in arg_strings] - - # PARSER arguments convert all values, but check only the first - elif action.nargs == PARSER: - value = [self._get_value(action, v) for v in arg_strings] - self._check_value(action, value[0]) - - # all other types of nargs produce a list - else: - value = [self._get_value(action, v) for v in arg_strings] - for v in value: - self._check_value(action, v) - - # return the converted value - return value - - def _get_value(self, action, arg_string): - type_func = self._registry_get('type', action.type, action.type) - if not _callable(type_func): - msg = _('%r is not callable') - raise ArgumentError(action, msg % type_func) - - # convert the value to the appropriate type - try: - result = type_func(arg_string) - - # ArgumentTypeErrors indicate errors - except ArgumentTypeError: - name = getattr(action.type, '__name__', repr(action.type)) - msg = str(_sys.exc_info()[1]) - raise ArgumentError(action, msg) - - # TypeErrors or ValueErrors also indicate errors - except (TypeError, ValueError): - name = getattr(action.type, '__name__', repr(action.type)) - msg = _('invalid %s value: %r') - raise ArgumentError(action, msg % (name, arg_string)) - - # return the converted value - return result - - def _check_value(self, action, value): - # converted value must be one of the choices (if specified) - if action.choices is not None and value not in action.choices: - tup = value, ', '.join(map(repr, action.choices)) - msg = _('invalid choice: %r (choose from %s)') % tup - raise ArgumentError(action, msg) - - # ======================= - # Help-formatting methods - # ======================= - def format_usage(self): - formatter = self._get_formatter() - formatter.add_usage(self.usage, self._actions, - self._mutually_exclusive_groups) - return formatter.format_help() - - def format_help(self): - formatter = self._get_formatter() - - # usage - formatter.add_usage(self.usage, self._actions, - self._mutually_exclusive_groups) - - # description - formatter.add_text(self.description) - - # positionals, optionals and user-defined groups - for action_group in self._action_groups: - formatter.start_section(action_group.title) - formatter.add_text(action_group.description) - formatter.add_arguments(action_group._group_actions) - formatter.end_section() - - # epilog - formatter.add_text(self.epilog) - - # determine help from format above - return formatter.format_help() - - def format_version(self): - import warnings - warnings.warn( - 'The format_version method is deprecated -- the "version" ' - 'argument to ArgumentParser is no longer supported.', - DeprecationWarning) - formatter = self._get_formatter() - formatter.add_text(self.version) - return formatter.format_help() - - def _get_formatter(self): - return self.formatter_class(prog=self.prog) - - # ===================== - # Help-printing methods - # ===================== - def print_usage(self, file=None): - if file is None: - file = _sys.stdout - self._print_message(self.format_usage(), file) - - def print_help(self, file=None): - if file is None: - file = _sys.stdout - self._print_message(self.format_help(), file) - - def print_version(self, file=None): - import warnings - warnings.warn( - 'The print_version method is deprecated -- the "version" ' - 'argument to ArgumentParser is no longer supported.', - DeprecationWarning) - self._print_message(self.format_version(), file) - - def _print_message(self, message, file=None): - if message: - if file is None: - file = _sys.stderr - file.write(message) - - # =============== - # Exiting methods - # =============== - def exit(self, status=0, message=None): - if message: - self._print_message(message, _sys.stderr) - _sys.exit(status) - - def error(self, message): - """error(message: string) - - Prints a usage message incorporating the message to stderr and - exits. - - If you override this in a subclass, it should not return -- it - should either exit or raise an exception. - """ - self.print_usage(_sys.stderr) - self.exit(2, _('%s: error: %s\n') % (self.prog, message)) +# Copyright 2006-2009 Steven J. Bethard . +# +# Licensed under the Apache License, Version 2.0 (the "License"); you may not +# use this file except in compliance with the License. You may obtain a copy +# of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT +# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the +# License for the specific language governing permissions and limitations +# under the License. + +"""Command-line parsing library + +This module is an optparse-inspired command-line parsing library that: + + - handles both optional and positional arguments + - produces highly informative usage messages + - supports parsers that dispatch to sub-parsers + +The following is a simple usage example that sums integers from the +command-line and writes the result to a file:: + + parser = argparse.ArgumentParser( + description='sum the integers at the command line') + parser.add_argument( + 'integers', metavar='int', nargs='+', type=int, + help='an integer to be summed') + parser.add_argument( + '--log', default=sys.stdout, type=argparse.FileType('w'), + help='the file where the sum should be written') + args = parser.parse_args() + args.log.write('%s' % sum(args.integers)) + args.log.close() + +The module contains the following public classes: + + - ArgumentParser -- The main entry point for command-line parsing. As the + example above shows, the add_argument() method is used to populate + the parser with actions for optional and positional arguments. Then + the parse_args() method is invoked to convert the args at the + command-line into an object with attributes. + + - ArgumentError -- The exception raised by ArgumentParser objects when + there are errors with the parser's actions. Errors raised while + parsing the command-line are caught by ArgumentParser and emitted + as command-line messages. + + - FileType -- A factory for defining types of files to be created. As the + example above shows, instances of FileType are typically passed as + the type= argument of add_argument() calls. + + - Action -- The base class for parser actions. Typically actions are + selected by passing strings like 'store_true' or 'append_const' to + the action= argument of add_argument(). However, for greater + customization of ArgumentParser actions, subclasses of Action may + be defined and passed as the action= argument. + + - HelpFormatter, RawDescriptionHelpFormatter, RawTextHelpFormatter, + ArgumentDefaultsHelpFormatter -- Formatter classes which + may be passed as the formatter_class= argument to the + ArgumentParser constructor. HelpFormatter is the default, + RawDescriptionHelpFormatter and RawTextHelpFormatter tell the parser + not to change the formatting for help text, and + ArgumentDefaultsHelpFormatter adds information about argument defaults + to the help. + +All other classes in this module are considered implementation details. +(Also note that HelpFormatter and RawDescriptionHelpFormatter are only +considered public as object names -- the API of the formatter objects is +still considered an implementation detail.) +""" + +__version__ = '1.1' +__all__ = [ + 'ArgumentParser', + 'ArgumentError', + 'Namespace', + 'Action', + 'FileType', + 'HelpFormatter', + 'RawDescriptionHelpFormatter', + 'RawTextHelpFormatter', + 'ArgumentDefaultsHelpFormatter', +] + + +import copy as _copy +import os as _os +import re as _re +import sys as _sys +import textwrap as _textwrap + +from gettext import gettext as _ + +try: + _set = set +except NameError: + from sets import Set as _set + +try: + _basestring = basestring +except NameError: + _basestring = str + +try: + _sorted = sorted +except NameError: + + def _sorted(iterable, reverse=False): + result = list(iterable) + result.sort() + if reverse: + result.reverse() + return result + + +def _callable(obj): + return hasattr(obj, '__call__') or hasattr(obj, '__bases__') + +# silence Python 2.6 buggy warnings about Exception.message +if _sys.version_info[:2] == (2, 6): + import warnings + warnings.filterwarnings( + action='ignore', + message='BaseException.message has been deprecated as of Python 2.6', + category=DeprecationWarning, + module='argparse') + + +SUPPRESS = '==SUPPRESS==' + +OPTIONAL = '?' +ZERO_OR_MORE = '*' +ONE_OR_MORE = '+' +PARSER = 'A...' +REMAINDER = '...' + +# ============================= +# Utility functions and classes +# ============================= + +class _AttributeHolder(object): + """Abstract base class that provides __repr__. + + The __repr__ method returns a string in the format:: + ClassName(attr=name, attr=name, ...) + The attributes are determined either by a class-level attribute, + '_kwarg_names', or by inspecting the instance __dict__. + """ + + def __repr__(self): + type_name = type(self).__name__ + arg_strings = [] + for arg in self._get_args(): + arg_strings.append(repr(arg)) + for name, value in self._get_kwargs(): + arg_strings.append('%s=%r' % (name, value)) + return '%s(%s)' % (type_name, ', '.join(arg_strings)) + + def _get_kwargs(self): + return _sorted(self.__dict__.items()) + + def _get_args(self): + return [] + + +def _ensure_value(namespace, name, value): + if getattr(namespace, name, None) is None: + setattr(namespace, name, value) + return getattr(namespace, name) + + +# =============== +# Formatting Help +# =============== + +class HelpFormatter(object): + """Formatter for generating usage messages and argument help strings. + + Only the name of this class is considered a public API. All the methods + provided by the class are considered an implementation detail. + """ + + def __init__(self, + prog, + indent_increment=2, + max_help_position=24, + width=None): + + # default setting for width + if width is None: + try: + width = int(_os.environ['COLUMNS']) + except (KeyError, ValueError): + width = 80 + width -= 2 + + self._prog = prog + self._indent_increment = indent_increment + self._max_help_position = max_help_position + self._width = width + + self._current_indent = 0 + self._level = 0 + self._action_max_length = 0 + + self._root_section = self._Section(self, None) + self._current_section = self._root_section + + self._whitespace_matcher = _re.compile(r'\s+') + self._long_break_matcher = _re.compile(r'\n\n\n+') + + # =============================== + # Section and indentation methods + # =============================== + def _indent(self): + self._current_indent += self._indent_increment + self._level += 1 + + def _dedent(self): + self._current_indent -= self._indent_increment + assert self._current_indent >= 0, 'Indent decreased below 0.' + self._level -= 1 + + class _Section(object): + + def __init__(self, formatter, parent, heading=None): + self.formatter = formatter + self.parent = parent + self.heading = heading + self.items = [] + + def format_help(self): + # format the indented section + if self.parent is not None: + self.formatter._indent() + join = self.formatter._join_parts + for func, args in self.items: + func(*args) + item_help = join([func(*args) for func, args in self.items]) + if self.parent is not None: + self.formatter._dedent() + + # return nothing if the section was empty + if not item_help: + return '' + + # add the heading if the section was non-empty + if self.heading is not SUPPRESS and self.heading is not None: + current_indent = self.formatter._current_indent + heading = '%*s%s:\n' % (current_indent, '', self.heading) + else: + heading = '' + + # join the section-initial newline, the heading and the help + return join(['\n', heading, item_help, '\n']) + + def _add_item(self, func, args): + self._current_section.items.append((func, args)) + + # ======================== + # Message building methods + # ======================== + def start_section(self, heading): + self._indent() + section = self._Section(self, self._current_section, heading) + self._add_item(section.format_help, []) + self._current_section = section + + def end_section(self): + self._current_section = self._current_section.parent + self._dedent() + + def add_text(self, text): + if text is not SUPPRESS and text is not None: + self._add_item(self._format_text, [text]) + + def add_usage(self, usage, actions, groups, prefix=None): + if usage is not SUPPRESS: + args = usage, actions, groups, prefix + self._add_item(self._format_usage, args) + + def add_argument(self, action): + if action.help is not SUPPRESS: + + # find all invocations + get_invocation = self._format_action_invocation + invocations = [get_invocation(action)] + for subaction in self._iter_indented_subactions(action): + invocations.append(get_invocation(subaction)) + + # update the maximum item length + invocation_length = max([len(s) for s in invocations]) + action_length = invocation_length + self._current_indent + self._action_max_length = max(self._action_max_length, + action_length) + + # add the item to the list + self._add_item(self._format_action, [action]) + + def add_arguments(self, actions): + for action in actions: + self.add_argument(action) + + # ======================= + # Help-formatting methods + # ======================= + def format_help(self): + help = self._root_section.format_help() + if help: + help = self._long_break_matcher.sub('\n\n', help) + help = help.strip('\n') + '\n' + return help + + def _join_parts(self, part_strings): + return ''.join([part + for part in part_strings + if part and part is not SUPPRESS]) + + def _format_usage(self, usage, actions, groups, prefix): + if prefix is None: + prefix = _('usage: ') + + # if usage is specified, use that + if usage is not None: + usage = usage % dict(prog=self._prog) + + # if no optionals or positionals are available, usage is just prog + elif usage is None and not actions: + usage = '%(prog)s' % dict(prog=self._prog) + + # if optionals and positionals are available, calculate usage + elif usage is None: + prog = '%(prog)s' % dict(prog=self._prog) + + # split optionals from positionals + optionals = [] + positionals = [] + for action in actions: + if action.option_strings: + optionals.append(action) + else: + positionals.append(action) + + # build full usage string + format = self._format_actions_usage + action_usage = format(optionals + positionals, groups) + usage = ' '.join([s for s in [prog, action_usage] if s]) + + # wrap the usage parts if it's too long + text_width = self._width - self._current_indent + if len(prefix) + len(usage) > text_width: + + # break usage into wrappable parts + part_regexp = r'\(.*?\)+|\[.*?\]+|\S+' + opt_usage = format(optionals, groups) + pos_usage = format(positionals, groups) + opt_parts = _re.findall(part_regexp, opt_usage) + pos_parts = _re.findall(part_regexp, pos_usage) + assert ' '.join(opt_parts) == opt_usage + assert ' '.join(pos_parts) == pos_usage + + # helper for wrapping lines + def get_lines(parts, indent, prefix=None): + lines = [] + line = [] + if prefix is not None: + line_len = len(prefix) - 1 + else: + line_len = len(indent) - 1 + for part in parts: + if line_len + 1 + len(part) > text_width: + lines.append(indent + ' '.join(line)) + line = [] + line_len = len(indent) - 1 + line.append(part) + line_len += len(part) + 1 + if line: + lines.append(indent + ' '.join(line)) + if prefix is not None: + lines[0] = lines[0][len(indent):] + return lines + + # if prog is short, follow it with optionals or positionals + if len(prefix) + len(prog) <= 0.75 * text_width: + indent = ' ' * (len(prefix) + len(prog) + 1) + if opt_parts: + lines = get_lines([prog] + opt_parts, indent, prefix) + lines.extend(get_lines(pos_parts, indent)) + elif pos_parts: + lines = get_lines([prog] + pos_parts, indent, prefix) + else: + lines = [prog] + + # if prog is long, put it on its own line + else: + indent = ' ' * len(prefix) + parts = opt_parts + pos_parts + lines = get_lines(parts, indent) + if len(lines) > 1: + lines = [] + lines.extend(get_lines(opt_parts, indent)) + lines.extend(get_lines(pos_parts, indent)) + lines = [prog] + lines + + # join lines into usage + usage = '\n'.join(lines) + + # prefix with 'usage:' + return '%s%s\n\n' % (prefix, usage) + + def _format_actions_usage(self, actions, groups): + # find group indices and identify actions in groups + group_actions = _set() + inserts = {} + for group in groups: + try: + start = actions.index(group._group_actions[0]) + except ValueError: + continue + else: + end = start + len(group._group_actions) + if actions[start:end] == group._group_actions: + for action in group._group_actions: + group_actions.add(action) + if not group.required: + inserts[start] = '[' + inserts[end] = ']' + else: + inserts[start] = '(' + inserts[end] = ')' + for i in range(start + 1, end): + inserts[i] = '|' + + # collect all actions format strings + parts = [] + for i, action in enumerate(actions): + + # suppressed arguments are marked with None + # remove | separators for suppressed arguments + if action.help is SUPPRESS: + parts.append(None) + if inserts.get(i) == '|': + inserts.pop(i) + elif inserts.get(i + 1) == '|': + inserts.pop(i + 1) + + # produce all arg strings + elif not action.option_strings: + part = self._format_args(action, action.dest) + + # if it's in a group, strip the outer [] + if action in group_actions: + if part[0] == '[' and part[-1] == ']': + part = part[1:-1] + + # add the action string to the list + parts.append(part) + + # produce the first way to invoke the option in brackets + else: + option_string = action.option_strings[0] + + # if the Optional doesn't take a value, format is: + # -s or --long + if action.nargs == 0: + part = '%s' % option_string + + # if the Optional takes a value, format is: + # -s ARGS or --long ARGS + else: + default = action.dest.upper() + args_string = self._format_args(action, default) + part = '%s %s' % (option_string, args_string) + + # make it look optional if it's not required or in a group + if not action.required and action not in group_actions: + part = '[%s]' % part + + # add the action string to the list + parts.append(part) + + # insert things at the necessary indices + for i in _sorted(inserts, reverse=True): + parts[i:i] = [inserts[i]] + + # join all the action items with spaces + text = ' '.join([item for item in parts if item is not None]) + + # clean up separators for mutually exclusive groups + open = r'[\[(]' + close = r'[\])]' + text = _re.sub(r'(%s) ' % open, r'\1', text) + text = _re.sub(r' (%s)' % close, r'\1', text) + text = _re.sub(r'%s *%s' % (open, close), r'', text) + text = _re.sub(r'\(([^|]*)\)', r'\1', text) + text = text.strip() + + # return the text + return text + + def _format_text(self, text): + if '%(prog)' in text: + text = text % dict(prog=self._prog) + text_width = self._width - self._current_indent + indent = ' ' * self._current_indent + return self._fill_text(text, text_width, indent) + '\n\n' + + def _format_action(self, action): + # determine the required width and the entry label + help_position = min(self._action_max_length + 2, + self._max_help_position) + help_width = self._width - help_position + action_width = help_position - self._current_indent - 2 + action_header = self._format_action_invocation(action) + + # ho nelp; start on same line and add a final newline + if not action.help: + tup = self._current_indent, '', action_header + action_header = '%*s%s\n' % tup + + # short action name; start on the same line and pad two spaces + elif len(action_header) <= action_width: + tup = self._current_indent, '', action_width, action_header + action_header = '%*s%-*s ' % tup + indent_first = 0 + + # long action name; start on the next line + else: + tup = self._current_indent, '', action_header + action_header = '%*s%s\n' % tup + indent_first = help_position + + # collect the pieces of the action help + parts = [action_header] + + # if there was help for the action, add lines of help text + if action.help: + help_text = self._expand_help(action) + help_lines = self._split_lines(help_text, help_width) + parts.append('%*s%s\n' % (indent_first, '', help_lines[0])) + for line in help_lines[1:]: + parts.append('%*s%s\n' % (help_position, '', line)) + + # or add a newline if the description doesn't end with one + elif not action_header.endswith('\n'): + parts.append('\n') + + # if there are any sub-actions, add their help as well + for subaction in self._iter_indented_subactions(action): + parts.append(self._format_action(subaction)) + + # return a single string + return self._join_parts(parts) + + def _format_action_invocation(self, action): + if not action.option_strings: + metavar, = self._metavar_formatter(action, action.dest)(1) + return metavar + + else: + parts = [] + + # if the Optional doesn't take a value, format is: + # -s, --long + if action.nargs == 0: + parts.extend(action.option_strings) + + # if the Optional takes a value, format is: + # -s ARGS, --long ARGS + else: + default = action.dest.upper() + args_string = self._format_args(action, default) + for option_string in action.option_strings: + parts.append('%s %s' % (option_string, args_string)) + + return ', '.join(parts) + + def _metavar_formatter(self, action, default_metavar): + if action.metavar is not None: + result = action.metavar + elif action.choices is not None: + choice_strs = [str(choice) for choice in action.choices] + result = '{%s}' % ','.join(choice_strs) + else: + result = default_metavar + + def format(tuple_size): + if isinstance(result, tuple): + return result + else: + return (result, ) * tuple_size + return format + + def _format_args(self, action, default_metavar): + get_metavar = self._metavar_formatter(action, default_metavar) + if action.nargs is None: + result = '%s' % get_metavar(1) + elif action.nargs == OPTIONAL: + result = '[%s]' % get_metavar(1) + elif action.nargs == ZERO_OR_MORE: + result = '[%s [%s ...]]' % get_metavar(2) + elif action.nargs == ONE_OR_MORE: + result = '%s [%s ...]' % get_metavar(2) + elif action.nargs == REMAINDER: + result = '...' + elif action.nargs == PARSER: + result = '%s ...' % get_metavar(1) + else: + formats = ['%s' for _ in range(action.nargs)] + result = ' '.join(formats) % get_metavar(action.nargs) + return result + + def _expand_help(self, action): + params = dict(vars(action), prog=self._prog) + for name in list(params): + if params[name] is SUPPRESS: + del params[name] + for name in list(params): + if hasattr(params[name], '__name__'): + params[name] = params[name].__name__ + if params.get('choices') is not None: + choices_str = ', '.join([str(c) for c in params['choices']]) + params['choices'] = choices_str + return self._get_help_string(action) % params + + def _iter_indented_subactions(self, action): + try: + get_subactions = action._get_subactions + except AttributeError: + pass + else: + self._indent() + for subaction in get_subactions(): + yield subaction + self._dedent() + + def _split_lines(self, text, width): + text = self._whitespace_matcher.sub(' ', text).strip() + return _textwrap.wrap(text, width) + + def _fill_text(self, text, width, indent): + text = self._whitespace_matcher.sub(' ', text).strip() + return _textwrap.fill(text, width, initial_indent=indent, + subsequent_indent=indent) + + def _get_help_string(self, action): + return action.help + + +class RawDescriptionHelpFormatter(HelpFormatter): + """Help message formatter which retains any formatting in descriptions. + + Only the name of this class is considered a public API. All the methods + provided by the class are considered an implementation detail. + """ + + def _fill_text(self, text, width, indent): + return ''.join([indent + line for line in text.splitlines(True)]) + + +class RawTextHelpFormatter(RawDescriptionHelpFormatter): + """Help message formatter which retains formatting of all help text. + + Only the name of this class is considered a public API. All the methods + provided by the class are considered an implementation detail. + """ + + def _split_lines(self, text, width): + return text.splitlines() + + +class ArgumentDefaultsHelpFormatter(HelpFormatter): + """Help message formatter which adds default values to argument help. + + Only the name of this class is considered a public API. All the methods + provided by the class are considered an implementation detail. + """ + + def _get_help_string(self, action): + help = action.help + if '%(default)' not in action.help: + if action.default is not SUPPRESS: + defaulting_nargs = [OPTIONAL, ZERO_OR_MORE] + if action.option_strings or action.nargs in defaulting_nargs: + help += ' (default: %(default)s)' + return help + + +# ===================== +# Options and Arguments +# ===================== + +def _get_action_name(argument): + if argument is None: + return None + elif argument.option_strings: + return '/'.join(argument.option_strings) + elif argument.metavar not in (None, SUPPRESS): + return argument.metavar + elif argument.dest not in (None, SUPPRESS): + return argument.dest + else: + return None + + +class ArgumentError(Exception): + """An error from creating or using an argument (optional or positional). + + The string value of this exception is the message, augmented with + information about the argument that caused it. + """ + + def __init__(self, argument, message): + self.argument_name = _get_action_name(argument) + self.message = message + + def __str__(self): + if self.argument_name is None: + format = '%(message)s' + else: + format = 'argument %(argument_name)s: %(message)s' + return format % dict(message=self.message, + argument_name=self.argument_name) + + +class ArgumentTypeError(Exception): + """An error from trying to convert a command line string to a type.""" + pass + + +# ============== +# Action classes +# ============== + +class Action(_AttributeHolder): + """Information about how to convert command line strings to Python objects. + + Action objects are used by an ArgumentParser to represent the information + needed to parse a single argument from one or more strings from the + command line. The keyword arguments to the Action constructor are also + all attributes of Action instances. + + Keyword Arguments: + + - option_strings -- A list of command-line option strings which + should be associated with this action. + + - dest -- The name of the attribute to hold the created object(s) + + - nargs -- The number of command-line arguments that should be + consumed. By default, one argument will be consumed and a single + value will be produced. Other values include: + - N (an integer) consumes N arguments (and produces a list) + - '?' consumes zero or one arguments + - '*' consumes zero or more arguments (and produces a list) + - '+' consumes one or more arguments (and produces a list) + Note that the difference between the default and nargs=1 is that + with the default, a single value will be produced, while with + nargs=1, a list containing a single value will be produced. + + - const -- The value to be produced if the option is specified and the + option uses an action that takes no values. + + - default -- The value to be produced if the option is not specified. + + - type -- The type which the command-line arguments should be converted + to, should be one of 'string', 'int', 'float', 'complex' or a + callable object that accepts a single string argument. If None, + 'string' is assumed. + + - choices -- A container of values that should be allowed. If not None, + after a command-line argument has been converted to the appropriate + type, an exception will be raised if it is not a member of this + collection. + + - required -- True if the action must always be specified at the + command line. This is only meaningful for optional command-line + arguments. + + - help -- The help string describing the argument. + + - metavar -- The name to be used for the option's argument with the + help string. If None, the 'dest' value will be used as the name. + """ + + def __init__(self, + option_strings, + dest, + nargs=None, + const=None, + default=None, + type=None, + choices=None, + required=False, + help=None, + metavar=None): + self.option_strings = option_strings + self.dest = dest + self.nargs = nargs + self.const = const + self.default = default + self.type = type + self.choices = choices + self.required = required + self.help = help + self.metavar = metavar + + def _get_kwargs(self): + names = [ + 'option_strings', + 'dest', + 'nargs', + 'const', + 'default', + 'type', + 'choices', + 'help', + 'metavar', + ] + return [(name, getattr(self, name)) for name in names] + + def __call__(self, parser, namespace, values, option_string=None): + raise NotImplementedError(_('.__call__() not defined')) + + +class _StoreAction(Action): + + def __init__(self, + option_strings, + dest, + nargs=None, + const=None, + default=None, + type=None, + choices=None, + required=False, + help=None, + metavar=None): + if nargs == 0: + raise ValueError('nargs for store actions must be > 0; if you ' + 'have nothing to store, actions such as store ' + 'true or store const may be more appropriate') + if const is not None and nargs != OPTIONAL: + raise ValueError('nargs must be %r to supply const' % OPTIONAL) + super(_StoreAction, self).__init__( + option_strings=option_strings, + dest=dest, + nargs=nargs, + const=const, + default=default, + type=type, + choices=choices, + required=required, + help=help, + metavar=metavar) + + def __call__(self, parser, namespace, values, option_string=None): + setattr(namespace, self.dest, values) + + +class _StoreConstAction(Action): + + def __init__(self, + option_strings, + dest, + const, + default=None, + required=False, + help=None, + metavar=None): + super(_StoreConstAction, self).__init__( + option_strings=option_strings, + dest=dest, + nargs=0, + const=const, + default=default, + required=required, + help=help) + + def __call__(self, parser, namespace, values, option_string=None): + setattr(namespace, self.dest, self.const) + + +class _StoreTrueAction(_StoreConstAction): + + def __init__(self, + option_strings, + dest, + default=False, + required=False, + help=None): + super(_StoreTrueAction, self).__init__( + option_strings=option_strings, + dest=dest, + const=True, + default=default, + required=required, + help=help) + + +class _StoreFalseAction(_StoreConstAction): + + def __init__(self, + option_strings, + dest, + default=True, + required=False, + help=None): + super(_StoreFalseAction, self).__init__( + option_strings=option_strings, + dest=dest, + const=False, + default=default, + required=required, + help=help) + + +class _AppendAction(Action): + + def __init__(self, + option_strings, + dest, + nargs=None, + const=None, + default=None, + type=None, + choices=None, + required=False, + help=None, + metavar=None): + if nargs == 0: + raise ValueError('nargs for append actions must be > 0; if arg ' + 'strings are not supplying the value to append, ' + 'the append const action may be more appropriate') + if const is not None and nargs != OPTIONAL: + raise ValueError('nargs must be %r to supply const' % OPTIONAL) + super(_AppendAction, self).__init__( + option_strings=option_strings, + dest=dest, + nargs=nargs, + const=const, + default=default, + type=type, + choices=choices, + required=required, + help=help, + metavar=metavar) + + def __call__(self, parser, namespace, values, option_string=None): + items = _copy.copy(_ensure_value(namespace, self.dest, [])) + items.append(values) + setattr(namespace, self.dest, items) + + +class _AppendConstAction(Action): + + def __init__(self, + option_strings, + dest, + const, + default=None, + required=False, + help=None, + metavar=None): + super(_AppendConstAction, self).__init__( + option_strings=option_strings, + dest=dest, + nargs=0, + const=const, + default=default, + required=required, + help=help, + metavar=metavar) + + def __call__(self, parser, namespace, values, option_string=None): + items = _copy.copy(_ensure_value(namespace, self.dest, [])) + items.append(self.const) + setattr(namespace, self.dest, items) + + +class _CountAction(Action): + + def __init__(self, + option_strings, + dest, + default=None, + required=False, + help=None): + super(_CountAction, self).__init__( + option_strings=option_strings, + dest=dest, + nargs=0, + default=default, + required=required, + help=help) + + def __call__(self, parser, namespace, values, option_string=None): + new_count = _ensure_value(namespace, self.dest, 0) + 1 + setattr(namespace, self.dest, new_count) + + +class _HelpAction(Action): + + def __init__(self, + option_strings, + dest=SUPPRESS, + default=SUPPRESS, + help=None): + super(_HelpAction, self).__init__( + option_strings=option_strings, + dest=dest, + default=default, + nargs=0, + help=help) + + def __call__(self, parser, namespace, values, option_string=None): + parser.print_help() + parser.exit() + + +class _VersionAction(Action): + + def __init__(self, + option_strings, + version=None, + dest=SUPPRESS, + default=SUPPRESS, + help=None): + super(_VersionAction, self).__init__( + option_strings=option_strings, + dest=dest, + default=default, + nargs=0, + help=help) + self.version = version + + def __call__(self, parser, namespace, values, option_string=None): + version = self.version + if version is None: + version = parser.version + formatter = parser._get_formatter() + formatter.add_text(version) + parser.exit(message=formatter.format_help()) + + +class _SubParsersAction(Action): + + class _ChoicesPseudoAction(Action): + + def __init__(self, name, help): + sup = super(_SubParsersAction._ChoicesPseudoAction, self) + sup.__init__(option_strings=[], dest=name, help=help) + + def __init__(self, + option_strings, + prog, + parser_class, + dest=SUPPRESS, + help=None, + metavar=None): + + self._prog_prefix = prog + self._parser_class = parser_class + self._name_parser_map = {} + self._choices_actions = [] + + super(_SubParsersAction, self).__init__( + option_strings=option_strings, + dest=dest, + nargs=PARSER, + choices=self._name_parser_map, + help=help, + metavar=metavar) + + def add_parser(self, name, **kwargs): + # set prog from the existing prefix + if kwargs.get('prog') is None: + kwargs['prog'] = '%s %s' % (self._prog_prefix, name) + + # create a pseudo-action to hold the choice help + if 'help' in kwargs: + help = kwargs.pop('help') + choice_action = self._ChoicesPseudoAction(name, help) + self._choices_actions.append(choice_action) + + # create the parser and add it to the map + parser = self._parser_class(**kwargs) + self._name_parser_map[name] = parser + return parser + + def _get_subactions(self): + return self._choices_actions + + def __call__(self, parser, namespace, values, option_string=None): + parser_name = values[0] + arg_strings = values[1:] + + # set the parser name if requested + if self.dest is not SUPPRESS: + setattr(namespace, self.dest, parser_name) + + # select the parser + try: + parser = self._name_parser_map[parser_name] + except KeyError: + tup = parser_name, ', '.join(self._name_parser_map) + msg = _('unknown parser %r (choices: %s)' % tup) + raise ArgumentError(self, msg) + + # parse all the remaining options into the namespace + parser.parse_args(arg_strings, namespace) + + +# ============== +# Type classes +# ============== + +class FileType(object): + """Factory for creating file object types + + Instances of FileType are typically passed as type= arguments to the + ArgumentParser add_argument() method. + + Keyword Arguments: + - mode -- A string indicating how the file is to be opened. Accepts the + same values as the builtin open() function. + - bufsize -- The file's desired buffer size. Accepts the same values as + the builtin open() function. + """ + + def __init__(self, mode='r', bufsize=None): + self._mode = mode + self._bufsize = bufsize + + def __call__(self, string): + # the special argument "-" means sys.std{in,out} + if string == '-': + if 'r' in self._mode: + return _sys.stdin + elif 'w' in self._mode: + return _sys.stdout + else: + msg = _('argument "-" with mode %r' % self._mode) + raise ValueError(msg) + + # all other arguments are used as file names + if self._bufsize: + return open(string, self._mode, self._bufsize) + else: + return open(string, self._mode) + + def __repr__(self): + args = [self._mode, self._bufsize] + args_str = ', '.join([repr(arg) for arg in args if arg is not None]) + return '%s(%s)' % (type(self).__name__, args_str) + +# =========================== +# Optional and Positional Parsing +# =========================== + +class Namespace(_AttributeHolder): + """Simple object for storing attributes. + + Implements equality by attribute names and values, and provides a simple + string representation. + """ + + def __init__(self, **kwargs): + for name in kwargs: + setattr(self, name, kwargs[name]) + + def __eq__(self, other): + return vars(self) == vars(other) + + def __ne__(self, other): + return not (self == other) + + def __contains__(self, key): + return key in self.__dict__ + + +class _ActionsContainer(object): + + def __init__(self, + description, + prefix_chars, + argument_default, + conflict_handler): + super(_ActionsContainer, self).__init__() + + self.description = description + self.argument_default = argument_default + self.prefix_chars = prefix_chars + self.conflict_handler = conflict_handler + + # set up registries + self._registries = {} + + # register actions + self.register('action', None, _StoreAction) + self.register('action', 'store', _StoreAction) + self.register('action', 'store_const', _StoreConstAction) + self.register('action', 'store_true', _StoreTrueAction) + self.register('action', 'store_false', _StoreFalseAction) + self.register('action', 'append', _AppendAction) + self.register('action', 'append_const', _AppendConstAction) + self.register('action', 'count', _CountAction) + self.register('action', 'help', _HelpAction) + self.register('action', 'version', _VersionAction) + self.register('action', 'parsers', _SubParsersAction) + + # raise an exception if the conflict handler is invalid + self._get_handler() + + # action storage + self._actions = [] + self._option_string_actions = {} + + # groups + self._action_groups = [] + self._mutually_exclusive_groups = [] + + # defaults storage + self._defaults = {} + + # determines whether an "option" looks like a negative number + self._negative_number_matcher = _re.compile(r'^-\d+$|^-\d*\.\d+$') + + # whether or not there are any optionals that look like negative + # numbers -- uses a list so it can be shared and edited + self._has_negative_number_optionals = [] + + # ==================== + # Registration methods + # ==================== + def register(self, registry_name, value, object): + registry = self._registries.setdefault(registry_name, {}) + registry[value] = object + + def _registry_get(self, registry_name, value, default=None): + return self._registries[registry_name].get(value, default) + + # ================================== + # Namespace default accessor methods + # ================================== + def set_defaults(self, **kwargs): + self._defaults.update(kwargs) + + # if these defaults match any existing arguments, replace + # the previous default on the object with the new one + for action in self._actions: + if action.dest in kwargs: + action.default = kwargs[action.dest] + + def get_default(self, dest): + for action in self._actions: + if action.dest == dest and action.default is not None: + return action.default + return self._defaults.get(dest, None) + + + # ======================= + # Adding argument actions + # ======================= + def add_argument(self, *args, **kwargs): + """ + add_argument(dest, ..., name=value, ...) + add_argument(option_string, option_string, ..., name=value, ...) + """ + + # if no positional args are supplied or only one is supplied and + # it doesn't look like an option string, parse a positional + # argument + chars = self.prefix_chars + if not args or len(args) == 1 and args[0][0] not in chars: + if args and 'dest' in kwargs: + raise ValueError('dest supplied twice for positional argument') + kwargs = self._get_positional_kwargs(*args, **kwargs) + + # otherwise, we're adding an optional argument + else: + kwargs = self._get_optional_kwargs(*args, **kwargs) + + # if no default was supplied, use the parser-level default + if 'default' not in kwargs: + dest = kwargs['dest'] + if dest in self._defaults: + kwargs['default'] = self._defaults[dest] + elif self.argument_default is not None: + kwargs['default'] = self.argument_default + + # create the action object, and add it to the parser + action_class = self._pop_action_class(kwargs) + if not _callable(action_class): + raise ValueError('unknown action "%s"' % action_class) + action = action_class(**kwargs) + + # raise an error if the action type is not callable + type_func = self._registry_get('type', action.type, action.type) + if not _callable(type_func): + raise ValueError('%r is not callable' % type_func) + + return self._add_action(action) + + def add_argument_group(self, *args, **kwargs): + group = _ArgumentGroup(self, *args, **kwargs) + self._action_groups.append(group) + return group + + def add_mutually_exclusive_group(self, **kwargs): + group = _MutuallyExclusiveGroup(self, **kwargs) + self._mutually_exclusive_groups.append(group) + return group + + def _add_action(self, action): + # resolve any conflicts + self._check_conflict(action) + + # add to actions list + self._actions.append(action) + action.container = self + + # index the action by any option strings it has + for option_string in action.option_strings: + self._option_string_actions[option_string] = action + + # set the flag if any option strings look like negative numbers + for option_string in action.option_strings: + if self._negative_number_matcher.match(option_string): + if not self._has_negative_number_optionals: + self._has_negative_number_optionals.append(True) + + # return the created action + return action + + def _remove_action(self, action): + self._actions.remove(action) + + def _add_container_actions(self, container): + # collect groups by titles + title_group_map = {} + for group in self._action_groups: + if group.title in title_group_map: + msg = _('cannot merge actions - two groups are named %r') + raise ValueError(msg % (group.title)) + title_group_map[group.title] = group + + # map each action to its group + group_map = {} + for group in container._action_groups: + + # if a group with the title exists, use that, otherwise + # create a new group matching the container's group + if group.title not in title_group_map: + title_group_map[group.title] = self.add_argument_group( + title=group.title, + description=group.description, + conflict_handler=group.conflict_handler) + + # map the actions to their new group + for action in group._group_actions: + group_map[action] = title_group_map[group.title] + + # add container's mutually exclusive groups + # NOTE: if add_mutually_exclusive_group ever gains title= and + # description= then this code will need to be expanded as above + for group in container._mutually_exclusive_groups: + mutex_group = self.add_mutually_exclusive_group( + required=group.required) + + # map the actions to their new mutex group + for action in group._group_actions: + group_map[action] = mutex_group + + # add all actions to this container or their group + for action in container._actions: + group_map.get(action, self)._add_action(action) + + def _get_positional_kwargs(self, dest, **kwargs): + # make sure required is not specified + if 'required' in kwargs: + msg = _("'required' is an invalid argument for positionals") + raise TypeError(msg) + + # mark positional arguments as required if at least one is + # always required + if kwargs.get('nargs') not in [OPTIONAL, ZERO_OR_MORE]: + kwargs['required'] = True + if kwargs.get('nargs') == ZERO_OR_MORE and 'default' not in kwargs: + kwargs['required'] = True + + # return the keyword arguments with no option strings + return dict(kwargs, dest=dest, option_strings=[]) + + def _get_optional_kwargs(self, *args, **kwargs): + # determine short and long option strings + option_strings = [] + long_option_strings = [] + for option_string in args: + # error on strings that don't start with an appropriate prefix + if not option_string[0] in self.prefix_chars: + msg = _('invalid option string %r: ' + 'must start with a character %r') + tup = option_string, self.prefix_chars + raise ValueError(msg % tup) + + # strings starting with two prefix characters are long options + option_strings.append(option_string) + if option_string[0] in self.prefix_chars: + if len(option_string) > 1: + if option_string[1] in self.prefix_chars: + long_option_strings.append(option_string) + + # infer destination, '--foo-bar' -> 'foo_bar' and '-x' -> 'x' + dest = kwargs.pop('dest', None) + if dest is None: + if long_option_strings: + dest_option_string = long_option_strings[0] + else: + dest_option_string = option_strings[0] + dest = dest_option_string.lstrip(self.prefix_chars) + if not dest: + msg = _('dest= is required for options like %r') + raise ValueError(msg % option_string) + dest = dest.replace('-', '_') + + # return the updated keyword arguments + return dict(kwargs, dest=dest, option_strings=option_strings) + + def _pop_action_class(self, kwargs, default=None): + action = kwargs.pop('action', default) + return self._registry_get('action', action, action) + + def _get_handler(self): + # determine function from conflict handler string + handler_func_name = '_handle_conflict_%s' % self.conflict_handler + try: + return getattr(self, handler_func_name) + except AttributeError: + msg = _('invalid conflict_resolution value: %r') + raise ValueError(msg % self.conflict_handler) + + def _check_conflict(self, action): + + # find all options that conflict with this option + confl_optionals = [] + for option_string in action.option_strings: + if option_string in self._option_string_actions: + confl_optional = self._option_string_actions[option_string] + confl_optionals.append((option_string, confl_optional)) + + # resolve any conflicts + if confl_optionals: + conflict_handler = self._get_handler() + conflict_handler(action, confl_optionals) + + def _handle_conflict_error(self, action, conflicting_actions): + message = _('conflicting option string(s): %s') + conflict_string = ', '.join([option_string + for option_string, action + in conflicting_actions]) + raise ArgumentError(action, message % conflict_string) + + def _handle_conflict_resolve(self, action, conflicting_actions): + + # remove all conflicting options + for option_string, action in conflicting_actions: + + # remove the conflicting option + action.option_strings.remove(option_string) + self._option_string_actions.pop(option_string, None) + + # if the option now has no option string, remove it from the + # container holding it + if not action.option_strings: + action.container._remove_action(action) + + +class _ArgumentGroup(_ActionsContainer): + + def __init__(self, container, title=None, description=None, **kwargs): + # add any missing keyword arguments by checking the container + update = kwargs.setdefault + update('conflict_handler', container.conflict_handler) + update('prefix_chars', container.prefix_chars) + update('argument_default', container.argument_default) + super_init = super(_ArgumentGroup, self).__init__ + super_init(description=description, **kwargs) + + # group attributes + self.title = title + self._group_actions = [] + + # share most attributes with the container + self._registries = container._registries + self._actions = container._actions + self._option_string_actions = container._option_string_actions + self._defaults = container._defaults + self._has_negative_number_optionals = \ + container._has_negative_number_optionals + + def _add_action(self, action): + action = super(_ArgumentGroup, self)._add_action(action) + self._group_actions.append(action) + return action + + def _remove_action(self, action): + super(_ArgumentGroup, self)._remove_action(action) + self._group_actions.remove(action) + + +class _MutuallyExclusiveGroup(_ArgumentGroup): + + def __init__(self, container, required=False): + super(_MutuallyExclusiveGroup, self).__init__(container) + self.required = required + self._container = container + + def _add_action(self, action): + if action.required: + msg = _('mutually exclusive arguments must be optional') + raise ValueError(msg) + action = self._container._add_action(action) + self._group_actions.append(action) + return action + + def _remove_action(self, action): + self._container._remove_action(action) + self._group_actions.remove(action) + + +class ArgumentParser(_AttributeHolder, _ActionsContainer): + """Object for parsing command line strings into Python objects. + + Keyword Arguments: + - prog -- The name of the program (default: sys.argv[0]) + - usage -- A usage message (default: auto-generated from arguments) + - description -- A description of what the program does + - epilog -- Text following the argument descriptions + - parents -- Parsers whose arguments should be copied into this one + - formatter_class -- HelpFormatter class for printing help messages + - prefix_chars -- Characters that prefix optional arguments + - fromfile_prefix_chars -- Characters that prefix files containing + additional arguments + - argument_default -- The default value for all arguments + - conflict_handler -- String indicating how to handle conflicts + - add_help -- Add a -h/-help option + """ + + def __init__(self, + prog=None, + usage=None, + description=None, + epilog=None, + version=None, + parents=[], + formatter_class=HelpFormatter, + prefix_chars='-', + fromfile_prefix_chars=None, + argument_default=None, + conflict_handler='error', + add_help=True): + + if version is not None: + import warnings + warnings.warn( + """The "version" argument to ArgumentParser is deprecated. """ + """Please use """ + """"add_argument(..., action='version', version="N", ...)" """ + """instead""", DeprecationWarning) + + superinit = super(ArgumentParser, self).__init__ + superinit(description=description, + prefix_chars=prefix_chars, + argument_default=argument_default, + conflict_handler=conflict_handler) + + # default setting for prog + if prog is None: + prog = _os.path.basename(_sys.argv[0]) + + self.prog = prog + self.usage = usage + self.epilog = epilog + self.version = version + self.formatter_class = formatter_class + self.fromfile_prefix_chars = fromfile_prefix_chars + self.add_help = add_help + + add_group = self.add_argument_group + self._positionals = add_group(_('positional arguments')) + self._optionals = add_group(_('optional arguments')) + self._subparsers = None + + # register types + def identity(string): + return string + self.register('type', None, identity) + + # add help and version arguments if necessary + # (using explicit default to override global argument_default) + if self.add_help: + self.add_argument( + '-h', '--help', action='help', default=SUPPRESS, + help=_('show this help message and exit')) + if self.version: + self.add_argument( + '-v', '--version', action='version', default=SUPPRESS, + version=self.version, + help=_("show program's version number and exit")) + + # add parent arguments and defaults + for parent in parents: + self._add_container_actions(parent) + try: + defaults = parent._defaults + except AttributeError: + pass + else: + self._defaults.update(defaults) + + # ======================= + # Pretty __repr__ methods + # ======================= + def _get_kwargs(self): + names = [ + 'prog', + 'usage', + 'description', + 'version', + 'formatter_class', + 'conflict_handler', + 'add_help', + ] + return [(name, getattr(self, name)) for name in names] + + # ================================== + # Optional/Positional adding methods + # ================================== + def add_subparsers(self, **kwargs): + if self._subparsers is not None: + self.error(_('cannot have multiple subparser arguments')) + + # add the parser class to the arguments if it's not present + kwargs.setdefault('parser_class', type(self)) + + if 'title' in kwargs or 'description' in kwargs: + title = _(kwargs.pop('title', 'subcommands')) + description = _(kwargs.pop('description', None)) + self._subparsers = self.add_argument_group(title, description) + else: + self._subparsers = self._positionals + + # prog defaults to the usage message of this parser, skipping + # optional arguments and with no "usage:" prefix + if kwargs.get('prog') is None: + formatter = self._get_formatter() + positionals = self._get_positional_actions() + groups = self._mutually_exclusive_groups + formatter.add_usage(self.usage, positionals, groups, '') + kwargs['prog'] = formatter.format_help().strip() + + # create the parsers action and add it to the positionals list + parsers_class = self._pop_action_class(kwargs, 'parsers') + action = parsers_class(option_strings=[], **kwargs) + self._subparsers._add_action(action) + + # return the created parsers action + return action + + def _add_action(self, action): + if action.option_strings: + self._optionals._add_action(action) + else: + self._positionals._add_action(action) + return action + + def _get_optional_actions(self): + return [action + for action in self._actions + if action.option_strings] + + def _get_positional_actions(self): + return [action + for action in self._actions + if not action.option_strings] + + # ===================================== + # Command line argument parsing methods + # ===================================== + def parse_args(self, args=None, namespace=None): + args, argv = self.parse_known_args(args, namespace) + if argv: + msg = _('unrecognized arguments: %s') + self.error(msg % ' '.join(argv)) + return args + + def parse_known_args(self, args=None, namespace=None): + # args default to the system args + if args is None: + args = _sys.argv[1:] + + # default Namespace built from parser defaults + if namespace is None: + namespace = Namespace() + + # add any action defaults that aren't present + for action in self._actions: + if action.dest is not SUPPRESS: + if not hasattr(namespace, action.dest): + if action.default is not SUPPRESS: + default = action.default + if isinstance(action.default, _basestring): + default = self._get_value(action, default) + setattr(namespace, action.dest, default) + + # add any parser defaults that aren't present + for dest in self._defaults: + if not hasattr(namespace, dest): + setattr(namespace, dest, self._defaults[dest]) + + # parse the arguments and exit if there are any errors + try: + return self._parse_known_args(args, namespace) + except ArgumentError: + err = _sys.exc_info()[1] + self.error(str(err)) + + def _parse_known_args(self, arg_strings, namespace): + # replace arg strings that are file references + if self.fromfile_prefix_chars is not None: + arg_strings = self._read_args_from_files(arg_strings) + + # map all mutually exclusive arguments to the other arguments + # they can't occur with + action_conflicts = {} + for mutex_group in self._mutually_exclusive_groups: + group_actions = mutex_group._group_actions + for i, mutex_action in enumerate(mutex_group._group_actions): + conflicts = action_conflicts.setdefault(mutex_action, []) + conflicts.extend(group_actions[:i]) + conflicts.extend(group_actions[i + 1:]) + + # find all option indices, and determine the arg_string_pattern + # which has an 'O' if there is an option at an index, + # an 'A' if there is an argument, or a '-' if there is a '--' + option_string_indices = {} + arg_string_pattern_parts = [] + arg_strings_iter = iter(arg_strings) + for i, arg_string in enumerate(arg_strings_iter): + + # all args after -- are non-options + if arg_string == '--': + arg_string_pattern_parts.append('-') + for arg_string in arg_strings_iter: + arg_string_pattern_parts.append('A') + + # otherwise, add the arg to the arg strings + # and note the index if it was an option + else: + option_tuple = self._parse_optional(arg_string) + if option_tuple is None: + pattern = 'A' + else: + option_string_indices[i] = option_tuple + pattern = 'O' + arg_string_pattern_parts.append(pattern) + + # join the pieces together to form the pattern + arg_strings_pattern = ''.join(arg_string_pattern_parts) + + # converts arg strings to the appropriate and then takes the action + seen_actions = _set() + seen_non_default_actions = _set() + + def take_action(action, argument_strings, option_string=None): + seen_actions.add(action) + argument_values = self._get_values(action, argument_strings) + + # error if this argument is not allowed with other previously + # seen arguments, assuming that actions that use the default + # value don't really count as "present" + if argument_values is not action.default: + seen_non_default_actions.add(action) + for conflict_action in action_conflicts.get(action, []): + if conflict_action in seen_non_default_actions: + msg = _('not allowed with argument %s') + action_name = _get_action_name(conflict_action) + raise ArgumentError(action, msg % action_name) + + # take the action if we didn't receive a SUPPRESS value + # (e.g. from a default) + if argument_values is not SUPPRESS: + action(self, namespace, argument_values, option_string) + + # function to convert arg_strings into an optional action + def consume_optional(start_index): + + # get the optional identified at this index + option_tuple = option_string_indices[start_index] + action, option_string, explicit_arg = option_tuple + + # identify additional optionals in the same arg string + # (e.g. -xyz is the same as -x -y -z if no args are required) + match_argument = self._match_argument + action_tuples = [] + while True: + + # if we found no optional action, skip it + if action is None: + extras.append(arg_strings[start_index]) + return start_index + 1 + + # if there is an explicit argument, try to match the + # optional's string arguments to only this + if explicit_arg is not None: + arg_count = match_argument(action, 'A') + + # if the action is a single-dash option and takes no + # arguments, try to parse more single-dash options out + # of the tail of the option string + chars = self.prefix_chars + if arg_count == 0 and option_string[1] not in chars: + action_tuples.append((action, [], option_string)) + for char in self.prefix_chars: + option_string = char + explicit_arg[0] + explicit_arg = explicit_arg[1:] or None + optionals_map = self._option_string_actions + if option_string in optionals_map: + action = optionals_map[option_string] + break + else: + msg = _('ignored explicit argument %r') + raise ArgumentError(action, msg % explicit_arg) + + # if the action expect exactly one argument, we've + # successfully matched the option; exit the loop + elif arg_count == 1: + stop = start_index + 1 + args = [explicit_arg] + action_tuples.append((action, args, option_string)) + break + + # error if a double-dash option did not use the + # explicit argument + else: + msg = _('ignored explicit argument %r') + raise ArgumentError(action, msg % explicit_arg) + + # if there is no explicit argument, try to match the + # optional's string arguments with the following strings + # if successful, exit the loop + else: + start = start_index + 1 + selected_patterns = arg_strings_pattern[start:] + arg_count = match_argument(action, selected_patterns) + stop = start + arg_count + args = arg_strings[start:stop] + action_tuples.append((action, args, option_string)) + break + + # add the Optional to the list and return the index at which + # the Optional's string args stopped + assert action_tuples + for action, args, option_string in action_tuples: + take_action(action, args, option_string) + return stop + + # the list of Positionals left to be parsed; this is modified + # by consume_positionals() + positionals = self._get_positional_actions() + + # function to convert arg_strings into positional actions + def consume_positionals(start_index): + # match as many Positionals as possible + match_partial = self._match_arguments_partial + selected_pattern = arg_strings_pattern[start_index:] + arg_counts = match_partial(positionals, selected_pattern) + + # slice off the appropriate arg strings for each Positional + # and add the Positional and its args to the list + for action, arg_count in zip(positionals, arg_counts): + args = arg_strings[start_index: start_index + arg_count] + start_index += arg_count + take_action(action, args) + + # slice off the Positionals that we just parsed and return the + # index at which the Positionals' string args stopped + positionals[:] = positionals[len(arg_counts):] + return start_index + + # consume Positionals and Optionals alternately, until we have + # passed the last option string + extras = [] + start_index = 0 + if option_string_indices: + max_option_string_index = max(option_string_indices) + else: + max_option_string_index = -1 + while start_index <= max_option_string_index: + + # consume any Positionals preceding the next option + next_option_string_index = min([ + index + for index in option_string_indices + if index >= start_index]) + if start_index != next_option_string_index: + positionals_end_index = consume_positionals(start_index) + + # only try to parse the next optional if we didn't consume + # the option string during the positionals parsing + if positionals_end_index > start_index: + start_index = positionals_end_index + continue + else: + start_index = positionals_end_index + + # if we consumed all the positionals we could and we're not + # at the index of an option string, there were extra arguments + if start_index not in option_string_indices: + strings = arg_strings[start_index:next_option_string_index] + extras.extend(strings) + start_index = next_option_string_index + + # consume the next optional and any arguments for it + start_index = consume_optional(start_index) + + # consume any positionals following the last Optional + stop_index = consume_positionals(start_index) + + # if we didn't consume all the argument strings, there were extras + extras.extend(arg_strings[stop_index:]) + + # if we didn't use all the Positional objects, there were too few + # arg strings supplied. + if positionals: + self.error(_('too few arguments')) + + # make sure all required actions were present + for action in self._actions: + if action.required: + if action not in seen_actions: + name = _get_action_name(action) + self.error(_('argument %s is required') % name) + + # make sure all required groups had one option present + for group in self._mutually_exclusive_groups: + if group.required: + for action in group._group_actions: + if action in seen_non_default_actions: + break + + # if no actions were used, report the error + else: + names = [_get_action_name(action) + for action in group._group_actions + if action.help is not SUPPRESS] + msg = _('one of the arguments %s is required') + self.error(msg % ' '.join(names)) + + # return the updated namespace and the extra arguments + return namespace, extras + + def _read_args_from_files(self, arg_strings): + # expand arguments referencing files + new_arg_strings = [] + for arg_string in arg_strings: + + # for regular arguments, just add them back into the list + if arg_string[0] not in self.fromfile_prefix_chars: + new_arg_strings.append(arg_string) + + # replace arguments referencing files with the file content + else: + try: + args_file = open(arg_string[1:]) + try: + arg_strings = [] + for arg_line in args_file.read().splitlines(): + for arg in self.convert_arg_line_to_args(arg_line): + arg_strings.append(arg) + arg_strings = self._read_args_from_files(arg_strings) + new_arg_strings.extend(arg_strings) + finally: + args_file.close() + except IOError: + err = _sys.exc_info()[1] + self.error(str(err)) + + # return the modified argument list + return new_arg_strings + + def convert_arg_line_to_args(self, arg_line): + return [arg_line] + + def _match_argument(self, action, arg_strings_pattern): + # match the pattern for this action to the arg strings + nargs_pattern = self._get_nargs_pattern(action) + match = _re.match(nargs_pattern, arg_strings_pattern) + + # raise an exception if we weren't able to find a match + if match is None: + nargs_errors = { + None: _('expected one argument'), + OPTIONAL: _('expected at most one argument'), + ONE_OR_MORE: _('expected at least one argument'), + } + default = _('expected %s argument(s)') % action.nargs + msg = nargs_errors.get(action.nargs, default) + raise ArgumentError(action, msg) + + # return the number of arguments matched + return len(match.group(1)) + + def _match_arguments_partial(self, actions, arg_strings_pattern): + # progressively shorten the actions list by slicing off the + # final actions until we find a match + result = [] + for i in range(len(actions), 0, -1): + actions_slice = actions[:i] + pattern = ''.join([self._get_nargs_pattern(action) + for action in actions_slice]) + match = _re.match(pattern, arg_strings_pattern) + if match is not None: + result.extend([len(string) for string in match.groups()]) + break + + # return the list of arg string counts + return result + + def _parse_optional(self, arg_string): + # if it's an empty string, it was meant to be a positional + if not arg_string: + return None + + # if it doesn't start with a prefix, it was meant to be positional + if not arg_string[0] in self.prefix_chars: + return None + + # if the option string is present in the parser, return the action + if arg_string in self._option_string_actions: + action = self._option_string_actions[arg_string] + return action, arg_string, None + + # if it's just a single character, it was meant to be positional + if len(arg_string) == 1: + return None + + # if the option string before the "=" is present, return the action + if '=' in arg_string: + option_string, explicit_arg = arg_string.split('=', 1) + if option_string in self._option_string_actions: + action = self._option_string_actions[option_string] + return action, option_string, explicit_arg + + # search through all possible prefixes of the option string + # and all actions in the parser for possible interpretations + option_tuples = self._get_option_tuples(arg_string) + + # if multiple actions match, the option string was ambiguous + if len(option_tuples) > 1: + options = ', '.join([option_string + for action, option_string, explicit_arg in option_tuples]) + tup = arg_string, options + self.error(_('ambiguous option: %s could match %s') % tup) + + # if exactly one action matched, this segmentation is good, + # so return the parsed action + elif len(option_tuples) == 1: + option_tuple, = option_tuples + return option_tuple + + # if it was not found as an option, but it looks like a negative + # number, it was meant to be positional + # unless there are negative-number-like options + if self._negative_number_matcher.match(arg_string): + if not self._has_negative_number_optionals: + return None + + # if it contains a space, it was meant to be a positional + if ' ' in arg_string: + return None + + # it was meant to be an optional but there is no such option + # in this parser (though it might be a valid option in a subparser) + return None, arg_string, None + + def _get_option_tuples(self, option_string): + result = [] + + # option strings starting with two prefix characters are only + # split at the '=' + chars = self.prefix_chars + if option_string[0] in chars and option_string[1] in chars: + if '=' in option_string: + option_prefix, explicit_arg = option_string.split('=', 1) + else: + option_prefix = option_string + explicit_arg = None + for option_string in self._option_string_actions: + if option_string.startswith(option_prefix): + action = self._option_string_actions[option_string] + tup = action, option_string, explicit_arg + result.append(tup) + + # single character options can be concatenated with their arguments + # but multiple character options always have to have their argument + # separate + elif option_string[0] in chars and option_string[1] not in chars: + option_prefix = option_string + explicit_arg = None + short_option_prefix = option_string[:2] + short_explicit_arg = option_string[2:] + + for option_string in self._option_string_actions: + if option_string == short_option_prefix: + action = self._option_string_actions[option_string] + tup = action, option_string, short_explicit_arg + result.append(tup) + elif option_string.startswith(option_prefix): + action = self._option_string_actions[option_string] + tup = action, option_string, explicit_arg + result.append(tup) + + # shouldn't ever get here + else: + self.error(_('unexpected option string: %s') % option_string) + + # return the collected option tuples + return result + + def _get_nargs_pattern(self, action): + # in all examples below, we have to allow for '--' args + # which are represented as '-' in the pattern + nargs = action.nargs + + # the default (None) is assumed to be a single argument + if nargs is None: + nargs_pattern = '(-*A-*)' + + # allow zero or one arguments + elif nargs == OPTIONAL: + nargs_pattern = '(-*A?-*)' + + # allow zero or more arguments + elif nargs == ZERO_OR_MORE: + nargs_pattern = '(-*[A-]*)' + + # allow one or more arguments + elif nargs == ONE_OR_MORE: + nargs_pattern = '(-*A[A-]*)' + + # allow any number of options or arguments + elif nargs == REMAINDER: + nargs_pattern = '([-AO]*)' + + # allow one argument followed by any number of options or arguments + elif nargs == PARSER: + nargs_pattern = '(-*A[-AO]*)' + + # all others should be integers + else: + nargs_pattern = '(-*%s-*)' % '-*'.join('A' * nargs) + + # if this is an optional action, -- is not allowed + if action.option_strings: + nargs_pattern = nargs_pattern.replace('-*', '') + nargs_pattern = nargs_pattern.replace('-', '') + + # return the pattern + return nargs_pattern + + # ======================== + # Value conversion methods + # ======================== + def _get_values(self, action, arg_strings): + # for everything but PARSER args, strip out '--' + if action.nargs not in [PARSER, REMAINDER]: + arg_strings = [s for s in arg_strings if s != '--'] + + # optional argument produces a default when not present + if not arg_strings and action.nargs == OPTIONAL: + if action.option_strings: + value = action.const + else: + value = action.default + if isinstance(value, _basestring): + value = self._get_value(action, value) + self._check_value(action, value) + + # when nargs='*' on a positional, if there were no command-line + # args, use the default if it is anything other than None + elif (not arg_strings and action.nargs == ZERO_OR_MORE and + not action.option_strings): + if action.default is not None: + value = action.default + else: + value = arg_strings + self._check_value(action, value) + + # single argument or optional argument produces a single value + elif len(arg_strings) == 1 and action.nargs in [None, OPTIONAL]: + arg_string, = arg_strings + value = self._get_value(action, arg_string) + self._check_value(action, value) + + # REMAINDER arguments convert all values, checking none + elif action.nargs == REMAINDER: + value = [self._get_value(action, v) for v in arg_strings] + + # PARSER arguments convert all values, but check only the first + elif action.nargs == PARSER: + value = [self._get_value(action, v) for v in arg_strings] + self._check_value(action, value[0]) + + # all other types of nargs produce a list + else: + value = [self._get_value(action, v) for v in arg_strings] + for v in value: + self._check_value(action, v) + + # return the converted value + return value + + def _get_value(self, action, arg_string): + type_func = self._registry_get('type', action.type, action.type) + if not _callable(type_func): + msg = _('%r is not callable') + raise ArgumentError(action, msg % type_func) + + # convert the value to the appropriate type + try: + result = type_func(arg_string) + + # ArgumentTypeErrors indicate errors + except ArgumentTypeError: + name = getattr(action.type, '__name__', repr(action.type)) + msg = str(_sys.exc_info()[1]) + raise ArgumentError(action, msg) + + # TypeErrors or ValueErrors also indicate errors + except (TypeError, ValueError): + name = getattr(action.type, '__name__', repr(action.type)) + msg = _('invalid %s value: %r') + raise ArgumentError(action, msg % (name, arg_string)) + + # return the converted value + return result + + def _check_value(self, action, value): + # converted value must be one of the choices (if specified) + if action.choices is not None and value not in action.choices: + tup = value, ', '.join(map(repr, action.choices)) + msg = _('invalid choice: %r (choose from %s)') % tup + raise ArgumentError(action, msg) + + # ======================= + # Help-formatting methods + # ======================= + def format_usage(self): + formatter = self._get_formatter() + formatter.add_usage(self.usage, self._actions, + self._mutually_exclusive_groups) + return formatter.format_help() + + def format_help(self): + formatter = self._get_formatter() + + # usage + formatter.add_usage(self.usage, self._actions, + self._mutually_exclusive_groups) + + # description + formatter.add_text(self.description) + + # positionals, optionals and user-defined groups + for action_group in self._action_groups: + formatter.start_section(action_group.title) + formatter.add_text(action_group.description) + formatter.add_arguments(action_group._group_actions) + formatter.end_section() + + # epilog + formatter.add_text(self.epilog) + + # determine help from format above + return formatter.format_help() + + def format_version(self): + import warnings + warnings.warn( + 'The format_version method is deprecated -- the "version" ' + 'argument to ArgumentParser is no longer supported.', + DeprecationWarning) + formatter = self._get_formatter() + formatter.add_text(self.version) + return formatter.format_help() + + def _get_formatter(self): + return self.formatter_class(prog=self.prog) + + # ===================== + # Help-printing methods + # ===================== + def print_usage(self, file=None): + if file is None: + file = _sys.stdout + self._print_message(self.format_usage(), file) + + def print_help(self, file=None): + if file is None: + file = _sys.stdout + self._print_message(self.format_help(), file) + + def print_version(self, file=None): + import warnings + warnings.warn( + 'The print_version method is deprecated -- the "version" ' + 'argument to ArgumentParser is no longer supported.', + DeprecationWarning) + self._print_message(self.format_version(), file) + + def _print_message(self, message, file=None): + if message: + if file is None: + file = _sys.stderr + file.write(message) + + # =============== + # Exiting methods + # =============== + def exit(self, status=0, message=None): + if message: + self._print_message(message, _sys.stderr) + _sys.exit(status) + + def error(self, message): + """error(message: string) + + Prints a usage message incorporating the message to stderr and + exits. + + If you override this in a subclass, it should not return -- it + should either exit or raise an exception. + """ + self.print_usage(_sys.stderr) + self.exit(2, _('%s: error: %s\n') % (self.prog, message)) Modified: python/branches/py3k/Lib/test/test_argparse.py ============================================================================== --- python/branches/py3k/Lib/test/test_argparse.py (original) +++ python/branches/py3k/Lib/test/test_argparse.py Tue Mar 2 23:34:37 2010 @@ -1,4206 +1,4210 @@ -# -*- coding: utf-8 -*- - -# Copyright ? 2006-2009 Steven J. Bethard . -# -# Licensed under the Apache License, Version 2.0 (the "License"); you may not -# use this file except in compliance with the License. You may obtain a copy -# of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT -# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the -# License for the specific language governing permissions and limitations -# under the License. - -import codecs -import os -import shutil -import sys -import textwrap -import tempfile -import unittest -import argparse - -try: - from StringIO import StringIO -except ImportError: - from io import StringIO - -try: - set -except NameError: - from sets import Set as set - -try: - sorted -except NameError: - - def sorted(iterable, reverse=False): - result = list(iterable) - result.sort() - if reverse: - result.reverse() - return result - -# silence Python 2.6 buggy warnings about Exception.message -if sys.version_info[:2] == (2, 6): - import warnings - warnings.filterwarnings( - action='ignore', - message='BaseException.message has been deprecated as of Python 2.6', - category=DeprecationWarning) - -# silence warnings about version argument - these are expected -import warnings -warnings.filterwarnings( - action='ignore', - message='The "version" argument to ArgumentParser is deprecated.', - category=DeprecationWarning) -warnings.filterwarnings( - action='ignore', - message='The format_version method is deprecated', - category=DeprecationWarning) -warnings.filterwarnings( - action='ignore', - message='The print_version method is deprecated', - category=DeprecationWarning) - - -class TestCase(unittest.TestCase): - - def assertEqual(self, obj1, obj2): - if obj1 != obj2: - print('') - print(repr(obj1)) - print(repr(obj2)) - print(obj1) - print(obj2) - super(TestCase, self).assertEqual(obj1, obj2) - - -class TempDirMixin(object): - - def setUp(self): - self.temp_dir = tempfile.mkdtemp() - self.old_dir = os.getcwd() - os.chdir(self.temp_dir) - - def tearDown(self): - os.chdir(self.old_dir) - while True: - try: - shutil.rmtree(self.temp_dir) - except WindowsError: - continue - else: - break - - -class Sig(object): - - def __init__(self, *args, **kwargs): - self.args = args - self.kwargs = kwargs - - -class NS(object): - - def __init__(self, **kwargs): - self.__dict__.update(kwargs) - - def __repr__(self): - sorted_items = sorted(self.__dict__.items()) - kwarg_str = ', '.join(['%s=%r' % tup for tup in sorted_items]) - return '%s(%s)' % (type(self).__name__, kwarg_str) - - def __eq__(self, other): - return vars(self) == vars(other) - - def __ne__(self, other): - return not (self == other) - - -class ArgumentParserError(Exception): - - def __init__(self, message, stdout=None, stderr=None, error_code=None): - Exception.__init__(self, message, stdout, stderr) - self.message = message - self.stdout = stdout - self.stderr = stderr - self.error_code = error_code - - -def stderr_to_parser_error(parse_args, *args, **kwargs): - # if this is being called recursively and stderr or stdout is already being - # redirected, simply call the function and let the enclosing function - # catch the exception - if isinstance(sys.stderr, StringIO) or isinstance(sys.stdout, StringIO): - return parse_args(*args, **kwargs) - - # if this is not being called recursively, redirect stderr and - # use it as the ArgumentParserError message - old_stdout = sys.stdout - old_stderr = sys.stderr - sys.stdout = StringIO() - sys.stderr = StringIO() - try: - try: - result = parse_args(*args, **kwargs) - for key in list(vars(result)): - if getattr(result, key) is sys.stdout: - setattr(result, key, old_stdout) - if getattr(result, key) is sys.stderr: - setattr(result, key, old_stderr) - return result - except SystemExit: - code = sys.exc_info()[1].code - stdout = sys.stdout.getvalue() - stderr = sys.stderr.getvalue() - raise ArgumentParserError("SystemExit", stdout, stderr, code) - finally: - sys.stdout = old_stdout - sys.stderr = old_stderr - - -class ErrorRaisingArgumentParser(argparse.ArgumentParser): - - def parse_args(self, *args, **kwargs): - parse_args = super(ErrorRaisingArgumentParser, self).parse_args - return stderr_to_parser_error(parse_args, *args, **kwargs) - - def exit(self, *args, **kwargs): - exit = super(ErrorRaisingArgumentParser, self).exit - return stderr_to_parser_error(exit, *args, **kwargs) - - def error(self, *args, **kwargs): - error = super(ErrorRaisingArgumentParser, self).error - return stderr_to_parser_error(error, *args, **kwargs) - - -class ParserTesterMetaclass(type): - """Adds parser tests using the class attributes. - - Classes of this type should specify the following attributes: - - argument_signatures -- a list of Sig objects which specify - the signatures of Argument objects to be created - failures -- a list of args lists that should cause the parser - to fail - successes -- a list of (initial_args, options, remaining_args) tuples - where initial_args specifies the string args to be parsed, - options is a dict that should match the vars() of the options - parsed out of initial_args, and remaining_args should be any - remaining unparsed arguments - """ - - def __init__(cls, name, bases, bodydict): - if name == 'ParserTestCase': - return - - # default parser signature is empty - if not hasattr(cls, 'parser_signature'): - cls.parser_signature = Sig() - if not hasattr(cls, 'parser_class'): - cls.parser_class = ErrorRaisingArgumentParser - - # --------------------------------------- - # functions for adding optional arguments - # --------------------------------------- - def no_groups(parser, argument_signatures): - """Add all arguments directly to the parser""" - for sig in argument_signatures: - parser.add_argument(*sig.args, **sig.kwargs) - - def one_group(parser, argument_signatures): - """Add all arguments under a single group in the parser""" - group = parser.add_argument_group('foo') - for sig in argument_signatures: - group.add_argument(*sig.args, **sig.kwargs) - - def many_groups(parser, argument_signatures): - """Add each argument in its own group to the parser""" - for i, sig in enumerate(argument_signatures): - group = parser.add_argument_group('foo:%i' % i) - group.add_argument(*sig.args, **sig.kwargs) - - # -------------------------- - # functions for parsing args - # -------------------------- - def listargs(parser, args): - """Parse the args by passing in a list""" - return parser.parse_args(args) - - def sysargs(parser, args): - """Parse the args by defaulting to sys.argv""" - old_sys_argv = sys.argv - sys.argv = [old_sys_argv[0]] + args - try: - return parser.parse_args() - finally: - sys.argv = old_sys_argv - - # class that holds the combination of one optional argument - # addition method and one arg parsing method - class AddTests(object): - - def __init__(self, tester_cls, add_arguments, parse_args): - self._add_arguments = add_arguments - self._parse_args = parse_args - - add_arguments_name = self._add_arguments.__name__ - parse_args_name = self._parse_args.__name__ - for test_func in [self.test_failures, self.test_successes]: - func_name = test_func.__name__ - names = func_name, add_arguments_name, parse_args_name - test_name = '_'.join(names) - - def wrapper(self, test_func=test_func): - test_func(self) - try: - wrapper.__name__ = test_name - except TypeError: - pass - setattr(tester_cls, test_name, wrapper) - - def _get_parser(self, tester): - args = tester.parser_signature.args - kwargs = tester.parser_signature.kwargs - parser = tester.parser_class(*args, **kwargs) - self._add_arguments(parser, tester.argument_signatures) - return parser - - def test_failures(self, tester): - parser = self._get_parser(tester) - for args_str in tester.failures: - args = args_str.split() - raises = tester.assertRaises - raises(ArgumentParserError, parser.parse_args, args) - - def test_successes(self, tester): - parser = self._get_parser(tester) - for args, expected_ns in tester.successes: - if isinstance(args, str): - args = args.split() - result_ns = self._parse_args(parser, args) - tester.assertEqual(expected_ns, result_ns) - - # add tests for each combination of an optionals adding method - # and an arg parsing method - for add_arguments in [no_groups, one_group, many_groups]: - for parse_args in [listargs, sysargs]: - AddTests(cls, add_arguments, parse_args) - -bases = TestCase, -ParserTestCase = ParserTesterMetaclass('ParserTestCase', bases, {}) - -# =============== -# Optionals tests -# =============== - -class TestOptionalsSingleDash(ParserTestCase): - """Test an Optional with a single-dash option string""" - - argument_signatures = [Sig('-x')] - failures = ['-x', 'a', '--foo', '-x --foo', '-x -y'] - successes = [ - ('', NS(x=None)), - ('-x a', NS(x='a')), - ('-xa', NS(x='a')), - ('-x -1', NS(x='-1')), - ('-x-1', NS(x='-1')), - ] - - -class TestOptionalsSingleDashCombined(ParserTestCase): - """Test an Optional with a single-dash option string""" - - argument_signatures = [ - Sig('-x', action='store_true'), - Sig('-yyy', action='store_const', const=42), - Sig('-z'), - ] - failures = ['a', '--foo', '-xa', '-x --foo', '-x -z', '-z -x', - '-yx', '-yz a', '-yyyx', '-yyyza', '-xyza'] - successes = [ - ('', NS(x=False, yyy=None, z=None)), - ('-x', NS(x=True, yyy=None, z=None)), - ('-za', NS(x=False, yyy=None, z='a')), - ('-z a', NS(x=False, yyy=None, z='a')), - ('-xza', NS(x=True, yyy=None, z='a')), - ('-xz a', NS(x=True, yyy=None, z='a')), - ('-x -za', NS(x=True, yyy=None, z='a')), - ('-x -z a', NS(x=True, yyy=None, z='a')), - ('-y', NS(x=False, yyy=42, z=None)), - ('-yyy', NS(x=False, yyy=42, z=None)), - ('-x -yyy -za', NS(x=True, yyy=42, z='a')), - ('-x -yyy -z a', NS(x=True, yyy=42, z='a')), - ] - - -class TestOptionalsSingleDashLong(ParserTestCase): - """Test an Optional with a multi-character single-dash option string""" - - argument_signatures = [Sig('-foo')] - failures = ['-foo', 'a', '--foo', '-foo --foo', '-foo -y', '-fooa'] - successes = [ - ('', NS(foo=None)), - ('-foo a', NS(foo='a')), - ('-foo -1', NS(foo='-1')), - ('-fo a', NS(foo='a')), - ('-f a', NS(foo='a')), - ] - - -class TestOptionalsSingleDashSubsetAmbiguous(ParserTestCase): - """Test Optionals where option strings are subsets of each other""" - - argument_signatures = [Sig('-f'), Sig('-foobar'), Sig('-foorab')] - failures = ['-f', '-foo', '-fo', '-foo b', '-foob', '-fooba', '-foora'] - successes = [ - ('', NS(f=None, foobar=None, foorab=None)), - ('-f a', NS(f='a', foobar=None, foorab=None)), - ('-fa', NS(f='a', foobar=None, foorab=None)), - ('-foa', NS(f='oa', foobar=None, foorab=None)), - ('-fooa', NS(f='ooa', foobar=None, foorab=None)), - ('-foobar a', NS(f=None, foobar='a', foorab=None)), - ('-foorab a', NS(f=None, foobar=None, foorab='a')), - ] - - -class TestOptionalsSingleDashAmbiguous(ParserTestCase): - """Test Optionals that partially match but are not subsets""" - - argument_signatures = [Sig('-foobar'), Sig('-foorab')] - failures = ['-f', '-f a', '-fa', '-foa', '-foo', '-fo', '-foo b'] - successes = [ - ('', NS(foobar=None, foorab=None)), - ('-foob a', NS(foobar='a', foorab=None)), - ('-foor a', NS(foobar=None, foorab='a')), - ('-fooba a', NS(foobar='a', foorab=None)), - ('-foora a', NS(foobar=None, foorab='a')), - ('-foobar a', NS(foobar='a', foorab=None)), - ('-foorab a', NS(foobar=None, foorab='a')), - ] - - -class TestOptionalsNumeric(ParserTestCase): - """Test an Optional with a short opt string""" - - argument_signatures = [Sig('-1', dest='one')] - failures = ['-1', 'a', '-1 --foo', '-1 -y', '-1 -1', '-1 -2'] - successes = [ - ('', NS(one=None)), - ('-1 a', NS(one='a')), - ('-1a', NS(one='a')), - ('-1-2', NS(one='-2')), - ] - - -class TestOptionalsDoubleDash(ParserTestCase): - """Test an Optional with a double-dash option string""" - - argument_signatures = [Sig('--foo')] - failures = ['--foo', '-f', '-f a', 'a', '--foo -x', '--foo --bar'] - successes = [ - ('', NS(foo=None)), - ('--foo a', NS(foo='a')), - ('--foo=a', NS(foo='a')), - ('--foo -2.5', NS(foo='-2.5')), - ('--foo=-2.5', NS(foo='-2.5')), - ] - - -class TestOptionalsDoubleDashPartialMatch(ParserTestCase): - """Tests partial matching with a double-dash option string""" - - argument_signatures = [ - Sig('--badger', action='store_true'), - Sig('--bat'), - ] - failures = ['--bar', '--b', '--ba', '--b=2', '--ba=4', '--badge 5'] - successes = [ - ('', NS(badger=False, bat=None)), - ('--bat X', NS(badger=False, bat='X')), - ('--bad', NS(badger=True, bat=None)), - ('--badg', NS(badger=True, bat=None)), - ('--badge', NS(badger=True, bat=None)), - ('--badger', NS(badger=True, bat=None)), - ] - - -class TestOptionalsDoubleDashPrefixMatch(ParserTestCase): - """Tests when one double-dash option string is a prefix of another""" - - argument_signatures = [ - Sig('--badger', action='store_true'), - Sig('--ba'), - ] - failures = ['--bar', '--b', '--ba', '--b=2', '--badge 5'] - successes = [ - ('', NS(badger=False, ba=None)), - ('--ba X', NS(badger=False, ba='X')), - ('--ba=X', NS(badger=False, ba='X')), - ('--bad', NS(badger=True, ba=None)), - ('--badg', NS(badger=True, ba=None)), - ('--badge', NS(badger=True, ba=None)), - ('--badger', NS(badger=True, ba=None)), - ] - - -class TestOptionalsSingleDoubleDash(ParserTestCase): - """Test an Optional with single- and double-dash option strings""" - - argument_signatures = [ - Sig('-f', action='store_true'), - Sig('--bar'), - Sig('-baz', action='store_const', const=42), - ] - failures = ['--bar', '-fbar', '-fbaz', '-bazf', '-b B', 'B'] - successes = [ - ('', NS(f=False, bar=None, baz=None)), - ('-f', NS(f=True, bar=None, baz=None)), - ('--ba B', NS(f=False, bar='B', baz=None)), - ('-f --bar B', NS(f=True, bar='B', baz=None)), - ('-f -b', NS(f=True, bar=None, baz=42)), - ('-ba -f', NS(f=True, bar=None, baz=42)), - ] - - -class TestOptionalsAlternatePrefixChars(ParserTestCase): - """Test an Optional with a double-dash option string""" - - parser_signature = Sig(prefix_chars='+:/', add_help=False) - argument_signatures = [ - Sig('+f', action='store_true'), - Sig('::bar'), - Sig('/baz', action='store_const', const=42), - ] - failures = ['--bar', '-fbar', '-b B', 'B', '-f', '--bar B', '-baz'] - successes = [ - ('', NS(f=False, bar=None, baz=None)), - ('+f', NS(f=True, bar=None, baz=None)), - ('::ba B', NS(f=False, bar='B', baz=None)), - ('+f ::bar B', NS(f=True, bar='B', baz=None)), - ('+f /b', NS(f=True, bar=None, baz=42)), - ('/ba +f', NS(f=True, bar=None, baz=42)), - ] - - -class TestOptionalsShortLong(ParserTestCase): - """Test a combination of single- and double-dash option strings""" - - argument_signatures = [ - Sig('-v', '--verbose', '-n', '--noisy', action='store_true'), - ] - failures = ['--x --verbose', '-N', 'a', '-v x'] - successes = [ - ('', NS(verbose=False)), - ('-v', NS(verbose=True)), - ('--verbose', NS(verbose=True)), - ('-n', NS(verbose=True)), - ('--noisy', NS(verbose=True)), - ] - - -class TestOptionalsDest(ParserTestCase): - """Tests various means of setting destination""" - - argument_signatures = [Sig('--foo-bar'), Sig('--baz', dest='zabbaz')] - failures = ['a'] - successes = [ - ('--foo-bar f', NS(foo_bar='f', zabbaz=None)), - ('--baz g', NS(foo_bar=None, zabbaz='g')), - ('--foo-bar h --baz i', NS(foo_bar='h', zabbaz='i')), - ('--baz j --foo-bar k', NS(foo_bar='k', zabbaz='j')), - ] - - -class TestOptionalsDefault(ParserTestCase): - """Tests specifying a default for an Optional""" - - argument_signatures = [Sig('-x'), Sig('-y', default=42)] - failures = ['a'] - successes = [ - ('', NS(x=None, y=42)), - ('-xx', NS(x='x', y=42)), - ('-yy', NS(x=None, y='y')), - ] - - -class TestOptionalsNargsDefault(ParserTestCase): - """Tests not specifying the number of args for an Optional""" - - argument_signatures = [Sig('-x')] - failures = ['a', '-x'] - successes = [ - ('', NS(x=None)), - ('-x a', NS(x='a')), - ] - - -class TestOptionalsNargs1(ParserTestCase): - """Tests specifying the 1 arg for an Optional""" - - argument_signatures = [Sig('-x', nargs=1)] - failures = ['a', '-x'] - successes = [ - ('', NS(x=None)), - ('-x a', NS(x=['a'])), - ] - - -class TestOptionalsNargs3(ParserTestCase): - """Tests specifying the 3 args for an Optional""" - - argument_signatures = [Sig('-x', nargs=3)] - failures = ['a', '-x', '-x a', '-x a b', 'a -x', 'a -x b'] - successes = [ - ('', NS(x=None)), - ('-x a b c', NS(x=['a', 'b', 'c'])), - ] - - -class TestOptionalsNargsOptional(ParserTestCase): - """Tests specifying an Optional arg for an Optional""" - - argument_signatures = [ - Sig('-w', nargs='?'), - Sig('-x', nargs='?', const=42), - Sig('-y', nargs='?', default='spam'), - Sig('-z', nargs='?', type=int, const='42', default='84'), - ] - failures = ['2'] - successes = [ - ('', NS(w=None, x=None, y='spam', z=84)), - ('-w', NS(w=None, x=None, y='spam', z=84)), - ('-w 2', NS(w='2', x=None, y='spam', z=84)), - ('-x', NS(w=None, x=42, y='spam', z=84)), - ('-x 2', NS(w=None, x='2', y='spam', z=84)), - ('-y', NS(w=None, x=None, y=None, z=84)), - ('-y 2', NS(w=None, x=None, y='2', z=84)), - ('-z', NS(w=None, x=None, y='spam', z=42)), - ('-z 2', NS(w=None, x=None, y='spam', z=2)), - ] - - -class TestOptionalsNargsZeroOrMore(ParserTestCase): - """Tests specifying an args for an Optional that accepts zero or more""" - - argument_signatures = [ - Sig('-x', nargs='*'), - Sig('-y', nargs='*', default='spam'), - ] - failures = ['a'] - successes = [ - ('', NS(x=None, y='spam')), - ('-x', NS(x=[], y='spam')), - ('-x a', NS(x=['a'], y='spam')), - ('-x a b', NS(x=['a', 'b'], y='spam')), - ('-y', NS(x=None, y=[])), - ('-y a', NS(x=None, y=['a'])), - ('-y a b', NS(x=None, y=['a', 'b'])), - ] - - -class TestOptionalsNargsOneOrMore(ParserTestCase): - """Tests specifying an args for an Optional that accepts one or more""" - - argument_signatures = [ - Sig('-x', nargs='+'), - Sig('-y', nargs='+', default='spam'), - ] - failures = ['a', '-x', '-y', 'a -x', 'a -y b'] - successes = [ - ('', NS(x=None, y='spam')), - ('-x a', NS(x=['a'], y='spam')), - ('-x a b', NS(x=['a', 'b'], y='spam')), - ('-y a', NS(x=None, y=['a'])), - ('-y a b', NS(x=None, y=['a', 'b'])), - ] - - -class TestOptionalsChoices(ParserTestCase): - """Tests specifying the choices for an Optional""" - - argument_signatures = [ - Sig('-f', choices='abc'), - Sig('-g', type=int, choices=range(5))] - failures = ['a', '-f d', '-fad', '-ga', '-g 6'] - successes = [ - ('', NS(f=None, g=None)), - ('-f a', NS(f='a', g=None)), - ('-f c', NS(f='c', g=None)), - ('-g 0', NS(f=None, g=0)), - ('-g 03', NS(f=None, g=3)), - ('-fb -g4', NS(f='b', g=4)), - ] - - -class TestOptionalsRequired(ParserTestCase): - """Tests the an optional action that is required""" - - argument_signatures = [ - Sig('-x', type=int, required=True), - ] - failures = ['a', ''] - successes = [ - ('-x 1', NS(x=1)), - ('-x42', NS(x=42)), - ] - - -class TestOptionalsActionStore(ParserTestCase): - """Tests the store action for an Optional""" - - argument_signatures = [Sig('-x', action='store')] - failures = ['a', 'a -x'] - successes = [ - ('', NS(x=None)), - ('-xfoo', NS(x='foo')), - ] - - -class TestOptionalsActionStoreConst(ParserTestCase): - """Tests the store_const action for an Optional""" - - argument_signatures = [Sig('-y', action='store_const', const=object)] - failures = ['a'] - successes = [ - ('', NS(y=None)), - ('-y', NS(y=object)), - ] - - -class TestOptionalsActionStoreFalse(ParserTestCase): - """Tests the store_false action for an Optional""" - - argument_signatures = [Sig('-z', action='store_false')] - failures = ['a', '-za', '-z a'] - successes = [ - ('', NS(z=True)), - ('-z', NS(z=False)), - ] - - -class TestOptionalsActionStoreTrue(ParserTestCase): - """Tests the store_true action for an Optional""" - - argument_signatures = [Sig('--apple', action='store_true')] - failures = ['a', '--apple=b', '--apple b'] - successes = [ - ('', NS(apple=False)), - ('--apple', NS(apple=True)), - ] - - -class TestOptionalsActionAppend(ParserTestCase): - """Tests the append action for an Optional""" - - argument_signatures = [Sig('--baz', action='append')] - failures = ['a', '--baz', 'a --baz', '--baz a b'] - successes = [ - ('', NS(baz=None)), - ('--baz a', NS(baz=['a'])), - ('--baz a --baz b', NS(baz=['a', 'b'])), - ] - - -class TestOptionalsActionAppendWithDefault(ParserTestCase): - """Tests the append action for an Optional""" - - argument_signatures = [Sig('--baz', action='append', default=['X'])] - failures = ['a', '--baz', 'a --baz', '--baz a b'] - successes = [ - ('', NS(baz=['X'])), - ('--baz a', NS(baz=['X', 'a'])), - ('--baz a --baz b', NS(baz=['X', 'a', 'b'])), - ] - - -class TestOptionalsActionAppendConst(ParserTestCase): - """Tests the append_const action for an Optional""" - - argument_signatures = [ - Sig('-b', action='append_const', const=Exception), - Sig('-c', action='append', dest='b'), - ] - failures = ['a', '-c', 'a -c', '-bx', '-b x'] - successes = [ - ('', NS(b=None)), - ('-b', NS(b=[Exception])), - ('-b -cx -b -cyz', NS(b=[Exception, 'x', Exception, 'yz'])), - ] - - -class TestOptionalsActionAppendConstWithDefault(ParserTestCase): - """Tests the append_const action for an Optional""" - - argument_signatures = [ - Sig('-b', action='append_const', const=Exception, default=['X']), - Sig('-c', action='append', dest='b'), - ] - failures = ['a', '-c', 'a -c', '-bx', '-b x'] - successes = [ - ('', NS(b=['X'])), - ('-b', NS(b=['X', Exception])), - ('-b -cx -b -cyz', NS(b=['X', Exception, 'x', Exception, 'yz'])), - ] - - -class TestOptionalsActionCount(ParserTestCase): - """Tests the count action for an Optional""" - - argument_signatures = [Sig('-x', action='count')] - failures = ['a', '-x a', '-x b', '-x a -x b'] - successes = [ - ('', NS(x=None)), - ('-x', NS(x=1)), - ] - - -# ================ -# Positional tests -# ================ - -class TestPositionalsNargsNone(ParserTestCase): - """Test a Positional that doesn't specify nargs""" - - argument_signatures = [Sig('foo')] - failures = ['', '-x', 'a b'] - successes = [ - ('a', NS(foo='a')), - ] - - -class TestPositionalsNargs1(ParserTestCase): - """Test a Positional that specifies an nargs of 1""" - - argument_signatures = [Sig('foo', nargs=1)] - failures = ['', '-x', 'a b'] - successes = [ - ('a', NS(foo=['a'])), - ] - - -class TestPositionalsNargs2(ParserTestCase): - """Test a Positional that specifies an nargs of 2""" - - argument_signatures = [Sig('foo', nargs=2)] - failures = ['', 'a', '-x', 'a b c'] - successes = [ - ('a b', NS(foo=['a', 'b'])), - ] - - -class TestPositionalsNargsZeroOrMore(ParserTestCase): - """Test a Positional that specifies unlimited nargs""" - - argument_signatures = [Sig('foo', nargs='*')] - failures = ['-x'] - successes = [ - ('', NS(foo=[])), - ('a', NS(foo=['a'])), - ('a b', NS(foo=['a', 'b'])), - ] - - -class TestPositionalsNargsZeroOrMoreDefault(ParserTestCase): - """Test a Positional that specifies unlimited nargs and a default""" - - argument_signatures = [Sig('foo', nargs='*', default='bar')] - failures = ['-x'] - successes = [ - ('', NS(foo='bar')), - ('a', NS(foo=['a'])), - ('a b', NS(foo=['a', 'b'])), - ] - - -class TestPositionalsNargsOneOrMore(ParserTestCase): - """Test a Positional that specifies one or more nargs""" - - argument_signatures = [Sig('foo', nargs='+')] - failures = ['', '-x'] - successes = [ - ('a', NS(foo=['a'])), - ('a b', NS(foo=['a', 'b'])), - ] - - -class TestPositionalsNargsOptional(ParserTestCase): - """Tests an Optional Positional""" - - argument_signatures = [Sig('foo', nargs='?')] - failures = ['-x', 'a b'] - successes = [ - ('', NS(foo=None)), - ('a', NS(foo='a')), - ] - - -class TestPositionalsNargsOptionalDefault(ParserTestCase): - """Tests an Optional Positional with a default value""" - - argument_signatures = [Sig('foo', nargs='?', default=42)] - failures = ['-x', 'a b'] - successes = [ - ('', NS(foo=42)), - ('a', NS(foo='a')), - ] - - -class TestPositionalsNargsOptionalConvertedDefault(ParserTestCase): - """Tests an Optional Positional with a default value - that needs to be converted to the appropriate type. - """ - - argument_signatures = [ - Sig('foo', nargs='?', type=int, default='42'), - ] - failures = ['-x', 'a b', '1 2'] - successes = [ - ('', NS(foo=42)), - ('1', NS(foo=1)), - ] - - -class TestPositionalsNargsNoneNone(ParserTestCase): - """Test two Positionals that don't specify nargs""" - - argument_signatures = [Sig('foo'), Sig('bar')] - failures = ['', '-x', 'a', 'a b c'] - successes = [ - ('a b', NS(foo='a', bar='b')), - ] - - -class TestPositionalsNargsNone1(ParserTestCase): - """Test a Positional with no nargs followed by one with 1""" - - argument_signatures = [Sig('foo'), Sig('bar', nargs=1)] - failures = ['', '--foo', 'a', 'a b c'] - successes = [ - ('a b', NS(foo='a', bar=['b'])), - ] - - -class TestPositionalsNargs2None(ParserTestCase): - """Test a Positional with 2 nargs followed by one with none""" - - argument_signatures = [Sig('foo', nargs=2), Sig('bar')] - failures = ['', '--foo', 'a', 'a b', 'a b c d'] - successes = [ - ('a b c', NS(foo=['a', 'b'], bar='c')), - ] - - -class TestPositionalsNargsNoneZeroOrMore(ParserTestCase): - """Test a Positional with no nargs followed by one with unlimited""" - - argument_signatures = [Sig('foo'), Sig('bar', nargs='*')] - failures = ['', '--foo'] - successes = [ - ('a', NS(foo='a', bar=[])), - ('a b', NS(foo='a', bar=['b'])), - ('a b c', NS(foo='a', bar=['b', 'c'])), - ] - - -class TestPositionalsNargsNoneOneOrMore(ParserTestCase): - """Test a Positional with no nargs followed by one with one or more""" - - argument_signatures = [Sig('foo'), Sig('bar', nargs='+')] - failures = ['', '--foo', 'a'] - successes = [ - ('a b', NS(foo='a', bar=['b'])), - ('a b c', NS(foo='a', bar=['b', 'c'])), - ] - - -class TestPositionalsNargsNoneOptional(ParserTestCase): - """Test a Positional with no nargs followed by one with an Optional""" - - argument_signatures = [Sig('foo'), Sig('bar', nargs='?')] - failures = ['', '--foo', 'a b c'] - successes = [ - ('a', NS(foo='a', bar=None)), - ('a b', NS(foo='a', bar='b')), - ] - - -class TestPositionalsNargsZeroOrMoreNone(ParserTestCase): - """Test a Positional with unlimited nargs followed by one with none""" - - argument_signatures = [Sig('foo', nargs='*'), Sig('bar')] - failures = ['', '--foo'] - successes = [ - ('a', NS(foo=[], bar='a')), - ('a b', NS(foo=['a'], bar='b')), - ('a b c', NS(foo=['a', 'b'], bar='c')), - ] - - -class TestPositionalsNargsOneOrMoreNone(ParserTestCase): - """Test a Positional with one or more nargs followed by one with none""" - - argument_signatures = [Sig('foo', nargs='+'), Sig('bar')] - failures = ['', '--foo', 'a'] - successes = [ - ('a b', NS(foo=['a'], bar='b')), - ('a b c', NS(foo=['a', 'b'], bar='c')), - ] - - -class TestPositionalsNargsOptionalNone(ParserTestCase): - """Test a Positional with an Optional nargs followed by one with none""" - - argument_signatures = [Sig('foo', nargs='?', default=42), Sig('bar')] - failures = ['', '--foo', 'a b c'] - successes = [ - ('a', NS(foo=42, bar='a')), - ('a b', NS(foo='a', bar='b')), - ] - - -class TestPositionalsNargs2ZeroOrMore(ParserTestCase): - """Test a Positional with 2 nargs followed by one with unlimited""" - - argument_signatures = [Sig('foo', nargs=2), Sig('bar', nargs='*')] - failures = ['', '--foo', 'a'] - successes = [ - ('a b', NS(foo=['a', 'b'], bar=[])), - ('a b c', NS(foo=['a', 'b'], bar=['c'])), - ] - - -class TestPositionalsNargs2OneOrMore(ParserTestCase): - """Test a Positional with 2 nargs followed by one with one or more""" - - argument_signatures = [Sig('foo', nargs=2), Sig('bar', nargs='+')] - failures = ['', '--foo', 'a', 'a b'] - successes = [ - ('a b c', NS(foo=['a', 'b'], bar=['c'])), - ] - - -class TestPositionalsNargs2Optional(ParserTestCase): - """Test a Positional with 2 nargs followed by one optional""" - - argument_signatures = [Sig('foo', nargs=2), Sig('bar', nargs='?')] - failures = ['', '--foo', 'a', 'a b c d'] - successes = [ - ('a b', NS(foo=['a', 'b'], bar=None)), - ('a b c', NS(foo=['a', 'b'], bar='c')), - ] - - -class TestPositionalsNargsZeroOrMore1(ParserTestCase): - """Test a Positional with unlimited nargs followed by one with 1""" - - argument_signatures = [Sig('foo', nargs='*'), Sig('bar', nargs=1)] - failures = ['', '--foo', ] - successes = [ - ('a', NS(foo=[], bar=['a'])), - ('a b', NS(foo=['a'], bar=['b'])), - ('a b c', NS(foo=['a', 'b'], bar=['c'])), - ] - - -class TestPositionalsNargsOneOrMore1(ParserTestCase): - """Test a Positional with one or more nargs followed by one with 1""" - - argument_signatures = [Sig('foo', nargs='+'), Sig('bar', nargs=1)] - failures = ['', '--foo', 'a'] - successes = [ - ('a b', NS(foo=['a'], bar=['b'])), - ('a b c', NS(foo=['a', 'b'], bar=['c'])), - ] - - -class TestPositionalsNargsOptional1(ParserTestCase): - """Test a Positional with an Optional nargs followed by one with 1""" - - argument_signatures = [Sig('foo', nargs='?'), Sig('bar', nargs=1)] - failures = ['', '--foo', 'a b c'] - successes = [ - ('a', NS(foo=None, bar=['a'])), - ('a b', NS(foo='a', bar=['b'])), - ] - - -class TestPositionalsNargsNoneZeroOrMore1(ParserTestCase): - """Test three Positionals: no nargs, unlimited nargs and 1 nargs""" - - argument_signatures = [ - Sig('foo'), - Sig('bar', nargs='*'), - Sig('baz', nargs=1), - ] - failures = ['', '--foo', 'a'] - successes = [ - ('a b', NS(foo='a', bar=[], baz=['b'])), - ('a b c', NS(foo='a', bar=['b'], baz=['c'])), - ] - - -class TestPositionalsNargsNoneOneOrMore1(ParserTestCase): - """Test three Positionals: no nargs, one or more nargs and 1 nargs""" - - argument_signatures = [ - Sig('foo'), - Sig('bar', nargs='+'), - Sig('baz', nargs=1), - ] - failures = ['', '--foo', 'a', 'b'] - successes = [ - ('a b c', NS(foo='a', bar=['b'], baz=['c'])), - ('a b c d', NS(foo='a', bar=['b', 'c'], baz=['d'])), - ] - - -class TestPositionalsNargsNoneOptional1(ParserTestCase): - """Test three Positionals: no nargs, optional narg and 1 nargs""" - - argument_signatures = [ - Sig('foo'), - Sig('bar', nargs='?', default=0.625), - Sig('baz', nargs=1), - ] - failures = ['', '--foo', 'a'] - successes = [ - ('a b', NS(foo='a', bar=0.625, baz=['b'])), - ('a b c', NS(foo='a', bar='b', baz=['c'])), - ] - - -class TestPositionalsNargsOptionalOptional(ParserTestCase): - """Test two optional nargs""" - - argument_signatures = [ - Sig('foo', nargs='?'), - Sig('bar', nargs='?', default=42), - ] - failures = ['--foo', 'a b c'] - successes = [ - ('', NS(foo=None, bar=42)), - ('a', NS(foo='a', bar=42)), - ('a b', NS(foo='a', bar='b')), - ] - - -class TestPositionalsNargsOptionalZeroOrMore(ParserTestCase): - """Test an Optional narg followed by unlimited nargs""" - - argument_signatures = [Sig('foo', nargs='?'), Sig('bar', nargs='*')] - failures = ['--foo'] - successes = [ - ('', NS(foo=None, bar=[])), - ('a', NS(foo='a', bar=[])), - ('a b', NS(foo='a', bar=['b'])), - ('a b c', NS(foo='a', bar=['b', 'c'])), - ] - - -class TestPositionalsNargsOptionalOneOrMore(ParserTestCase): - """Test an Optional narg followed by one or more nargs""" - - argument_signatures = [Sig('foo', nargs='?'), Sig('bar', nargs='+')] - failures = ['', '--foo'] - successes = [ - ('a', NS(foo=None, bar=['a'])), - ('a b', NS(foo='a', bar=['b'])), - ('a b c', NS(foo='a', bar=['b', 'c'])), - ] - - -class TestPositionalsChoicesString(ParserTestCase): - """Test a set of single-character choices""" - - argument_signatures = [Sig('spam', choices=set('abcdefg'))] - failures = ['', '--foo', 'h', '42', 'ef'] - successes = [ - ('a', NS(spam='a')), - ('g', NS(spam='g')), - ] - - -class TestPositionalsChoicesInt(ParserTestCase): - """Test a set of integer choices""" - - argument_signatures = [Sig('spam', type=int, choices=range(20))] - failures = ['', '--foo', 'h', '42', 'ef'] - successes = [ - ('4', NS(spam=4)), - ('15', NS(spam=15)), - ] - - -class TestPositionalsActionAppend(ParserTestCase): - """Test the 'append' action""" - - argument_signatures = [ - Sig('spam', action='append'), - Sig('spam', action='append', nargs=2), - ] - failures = ['', '--foo', 'a', 'a b', 'a b c d'] - successes = [ - ('a b c', NS(spam=['a', ['b', 'c']])), - ] - -# ======================================== -# Combined optionals and positionals tests -# ======================================== - -class TestOptionalsNumericAndPositionals(ParserTestCase): - """Tests negative number args when numeric options are present""" - - argument_signatures = [ - Sig('x', nargs='?'), - Sig('-4', dest='y', action='store_true'), - ] - failures = ['-2', '-315'] - successes = [ - ('', NS(x=None, y=False)), - ('a', NS(x='a', y=False)), - ('-4', NS(x=None, y=True)), - ('-4 a', NS(x='a', y=True)), - ] - - -class TestOptionalsAlmostNumericAndPositionals(ParserTestCase): - """Tests negative number args when almost numeric options are present""" - - argument_signatures = [ - Sig('x', nargs='?'), - Sig('-k4', dest='y', action='store_true'), - ] - failures = ['-k3'] - successes = [ - ('', NS(x=None, y=False)), - ('-2', NS(x='-2', y=False)), - ('a', NS(x='a', y=False)), - ('-k4', NS(x=None, y=True)), - ('-k4 a', NS(x='a', y=True)), - ] - - -class TestEmptyAndSpaceContainingArguments(ParserTestCase): - - argument_signatures = [ - Sig('x', nargs='?'), - Sig('-y', '--yyy', dest='y'), - ] - failures = ['-y'] - successes = [ - ([''], NS(x='', y=None)), - (['a badger'], NS(x='a badger', y=None)), - (['-a badger'], NS(x='-a badger', y=None)), - (['-y', ''], NS(x=None, y='')), - (['-y', 'a badger'], NS(x=None, y='a badger')), - (['-y', '-a badger'], NS(x=None, y='-a badger')), - (['--yyy=a badger'], NS(x=None, y='a badger')), - (['--yyy=-a badger'], NS(x=None, y='-a badger')), - ] - - -class TestPrefixCharacterOnlyArguments(ParserTestCase): - - parser_signature = Sig(prefix_chars='-+') - argument_signatures = [ - Sig('-', dest='x', nargs='?', const='badger'), - Sig('+', dest='y', type=int, default=42), - Sig('-+-', dest='z', action='store_true'), - ] - failures = ['-y', '+ -'] - successes = [ - ('', NS(x=None, y=42, z=False)), - ('-', NS(x='badger', y=42, z=False)), - ('- X', NS(x='X', y=42, z=False)), - ('+ -3', NS(x=None, y=-3, z=False)), - ('-+-', NS(x=None, y=42, z=True)), - ('- ===', NS(x='===', y=42, z=False)), - ] - - -class TestNargsZeroOrMore(ParserTestCase): - """Tests specifying an args for an Optional that accepts zero or more""" - - argument_signatures = [Sig('-x', nargs='*'), Sig('y', nargs='*')] - failures = [] - successes = [ - ('', NS(x=None, y=[])), - ('-x', NS(x=[], y=[])), - ('-x a', NS(x=['a'], y=[])), - ('-x a -- b', NS(x=['a'], y=['b'])), - ('a', NS(x=None, y=['a'])), - ('a -x', NS(x=[], y=['a'])), - ('a -x b', NS(x=['b'], y=['a'])), - ] - - -class TestNargsRemainder(ParserTestCase): - """Tests specifying a positional with nargs=REMAINDER""" - - argument_signatures = [Sig('x'), Sig('y', nargs='...'), Sig('-z')] - failures = ['', '-z', '-z Z'] - successes = [ - ('X', NS(x='X', y=[], z=None)), - ('-z Z X', NS(x='X', y=[], z='Z')), - ('X A B -z Z', NS(x='X', y=['A', 'B', '-z', 'Z'], z=None)), - ('X Y --foo', NS(x='X', y=['Y', '--foo'], z=None)), - ] - - -class TestOptionLike(ParserTestCase): - """Tests options that may or may not be arguments""" - - argument_signatures = [ - Sig('-x', type=float), - Sig('-3', type=float, dest='y'), - Sig('z', nargs='*'), - ] - failures = ['-x', '-y2.5', '-xa', '-x -a', - '-x -3', '-x -3.5', '-3 -3.5', - '-x -2.5', '-x -2.5 a', '-3 -.5', - 'a x -1', '-x -1 a', '-3 -1 a'] - successes = [ - ('', NS(x=None, y=None, z=[])), - ('-x 2.5', NS(x=2.5, y=None, z=[])), - ('-x 2.5 a', NS(x=2.5, y=None, z=['a'])), - ('-3.5', NS(x=None, y=0.5, z=[])), - ('-3-.5', NS(x=None, y=-0.5, z=[])), - ('-3 .5', NS(x=None, y=0.5, z=[])), - ('a -3.5', NS(x=None, y=0.5, z=['a'])), - ('a', NS(x=None, y=None, z=['a'])), - ('a -x 1', NS(x=1.0, y=None, z=['a'])), - ('-x 1 a', NS(x=1.0, y=None, z=['a'])), - ('-3 1 a', NS(x=None, y=1.0, z=['a'])), - ] - - -class TestDefaultSuppress(ParserTestCase): - """Test actions with suppressed defaults""" - - argument_signatures = [ - Sig('foo', nargs='?', default=argparse.SUPPRESS), - Sig('bar', nargs='*', default=argparse.SUPPRESS), - Sig('--baz', action='store_true', default=argparse.SUPPRESS), - ] - failures = ['-x'] - successes = [ - ('', NS()), - ('a', NS(foo='a')), - ('a b', NS(foo='a', bar=['b'])), - ('--baz', NS(baz=True)), - ('a --baz', NS(foo='a', baz=True)), - ('--baz a b', NS(foo='a', bar=['b'], baz=True)), - ] - - -class TestParserDefaultSuppress(ParserTestCase): - """Test actions with a parser-level default of SUPPRESS""" - - parser_signature = Sig(argument_default=argparse.SUPPRESS) - argument_signatures = [ - Sig('foo', nargs='?'), - Sig('bar', nargs='*'), - Sig('--baz', action='store_true'), - ] - failures = ['-x'] - successes = [ - ('', NS()), - ('a', NS(foo='a')), - ('a b', NS(foo='a', bar=['b'])), - ('--baz', NS(baz=True)), - ('a --baz', NS(foo='a', baz=True)), - ('--baz a b', NS(foo='a', bar=['b'], baz=True)), - ] - - -class TestParserDefault42(ParserTestCase): - """Test actions with a parser-level default of 42""" - - parser_signature = Sig(argument_default=42, version='1.0') - argument_signatures = [ - Sig('foo', nargs='?'), - Sig('bar', nargs='*'), - Sig('--baz', action='store_true'), - ] - failures = ['-x'] - successes = [ - ('', NS(foo=42, bar=42, baz=42)), - ('a', NS(foo='a', bar=42, baz=42)), - ('a b', NS(foo='a', bar=['b'], baz=42)), - ('--baz', NS(foo=42, bar=42, baz=True)), - ('a --baz', NS(foo='a', bar=42, baz=True)), - ('--baz a b', NS(foo='a', bar=['b'], baz=True)), - ] - - -class TestArgumentsFromFile(TempDirMixin, ParserTestCase): - """Test reading arguments from a file""" - - def setUp(self): - super(TestArgumentsFromFile, self).setUp() - file_texts = [ - ('hello', 'hello world!\n'), - ('recursive', '-a\n' - 'A\n' - '@hello'), - ('invalid', '@no-such-path\n'), - ] - for path, text in file_texts: - file = open(path, 'w') - file.write(text) - file.close() - - parser_signature = Sig(fromfile_prefix_chars='@') - argument_signatures = [ - Sig('-a'), - Sig('x'), - Sig('y', nargs='+'), - ] - failures = ['', '-b', 'X', '@invalid', '@missing'] - successes = [ - ('X Y', NS(a=None, x='X', y=['Y'])), - ('X -a A Y Z', NS(a='A', x='X', y=['Y', 'Z'])), - ('@hello X', NS(a=None, x='hello world!', y=['X'])), - ('X @hello', NS(a=None, x='X', y=['hello world!'])), - ('-a B @recursive Y Z', NS(a='A', x='hello world!', y=['Y', 'Z'])), - ('X @recursive Z -a B', NS(a='B', x='X', y=['hello world!', 'Z'])), - ] - - -class TestArgumentsFromFileConverter(TempDirMixin, ParserTestCase): - """Test reading arguments from a file""" - - def setUp(self): - super(TestArgumentsFromFileConverter, self).setUp() - file_texts = [ - ('hello', 'hello world!\n'), - ] - for path, text in file_texts: - file = open(path, 'w') - file.write(text) - file.close() - - class FromFileConverterArgumentParser(ErrorRaisingArgumentParser): - - def convert_arg_line_to_args(self, arg_line): - for arg in arg_line.split(): - if not arg.strip(): - continue - yield arg - parser_class = FromFileConverterArgumentParser - parser_signature = Sig(fromfile_prefix_chars='@') - argument_signatures = [ - Sig('y', nargs='+'), - ] - failures = [] - successes = [ - ('@hello X', NS(y=['hello', 'world!', 'X'])), - ] - - -# ===================== -# Type conversion tests -# ===================== - -class TestFileTypeRepr(TestCase): - - def test_r(self): - type = argparse.FileType('r') - self.assertEqual("FileType('r')", repr(type)) - - def test_wb_1(self): - type = argparse.FileType('wb', 1) - self.assertEqual("FileType('wb', 1)", repr(type)) - - -class RFile(object): - seen = {} - - def __init__(self, name): - self.name = name - - def __eq__(self, other): - if other in self.seen: - text = self.seen[other] - else: - text = self.seen[other] = other.read() - other.close() - if not isinstance(text, str): - text = text.decode('ascii') - return self.name == other.name == text - - -class TestFileTypeR(TempDirMixin, ParserTestCase): - """Test the FileType option/argument type for reading files""" - - def setUp(self): - super(TestFileTypeR, self).setUp() - for file_name in ['foo', 'bar']: - file = open(os.path.join(self.temp_dir, file_name), 'w') - file.write(file_name) - file.close() - - argument_signatures = [ - Sig('-x', type=argparse.FileType()), - Sig('spam', type=argparse.FileType('r')), - ] - failures = ['-x', ''] - successes = [ - ('foo', NS(x=None, spam=RFile('foo'))), - ('-x foo bar', NS(x=RFile('foo'), spam=RFile('bar'))), - ('bar -x foo', NS(x=RFile('foo'), spam=RFile('bar'))), - ('-x - -', NS(x=sys.stdin, spam=sys.stdin)), - ] - - -class TestFileTypeRB(TempDirMixin, ParserTestCase): - """Test the FileType option/argument type for reading files""" - - def setUp(self): - super(TestFileTypeRB, self).setUp() - for file_name in ['foo', 'bar']: - file = open(os.path.join(self.temp_dir, file_name), 'w') - file.write(file_name) - file.close() - - argument_signatures = [ - Sig('-x', type=argparse.FileType('rb')), - Sig('spam', type=argparse.FileType('rb')), - ] - failures = ['-x', ''] - successes = [ - ('foo', NS(x=None, spam=RFile('foo'))), - ('-x foo bar', NS(x=RFile('foo'), spam=RFile('bar'))), - ('bar -x foo', NS(x=RFile('foo'), spam=RFile('bar'))), - ('-x - -', NS(x=sys.stdin, spam=sys.stdin)), - ] - - -class WFile(object): - seen = set() - - def __init__(self, name): - self.name = name - - def __eq__(self, other): - if other not in self.seen: - text = 'Check that file is writable.' - if 'b' in other.mode: - text = text.encode('ascii') - other.write(text) - other.close() - self.seen.add(other) - return self.name == other.name - - -class TestFileTypeW(TempDirMixin, ParserTestCase): - """Test the FileType option/argument type for writing files""" - - argument_signatures = [ - Sig('-x', type=argparse.FileType('w')), - Sig('spam', type=argparse.FileType('w')), - ] - failures = ['-x', ''] - successes = [ - ('foo', NS(x=None, spam=WFile('foo'))), - ('-x foo bar', NS(x=WFile('foo'), spam=WFile('bar'))), - ('bar -x foo', NS(x=WFile('foo'), spam=WFile('bar'))), - ('-x - -', NS(x=sys.stdout, spam=sys.stdout)), - ] - - -class TestFileTypeWB(TempDirMixin, ParserTestCase): - - argument_signatures = [ - Sig('-x', type=argparse.FileType('wb')), - Sig('spam', type=argparse.FileType('wb')), - ] - failures = ['-x', ''] - successes = [ - ('foo', NS(x=None, spam=WFile('foo'))), - ('-x foo bar', NS(x=WFile('foo'), spam=WFile('bar'))), - ('bar -x foo', NS(x=WFile('foo'), spam=WFile('bar'))), - ('-x - -', NS(x=sys.stdout, spam=sys.stdout)), - ] - - -class TestTypeCallable(ParserTestCase): - """Test some callables as option/argument types""" - - argument_signatures = [ - Sig('--eggs', type=complex), - Sig('spam', type=float), - ] - failures = ['a', '42j', '--eggs a', '--eggs 2i'] - successes = [ - ('--eggs=42 42', NS(eggs=42, spam=42.0)), - ('--eggs 2j -- -1.5', NS(eggs=2j, spam=-1.5)), - ('1024.675', NS(eggs=None, spam=1024.675)), - ] - - -class TestTypeUserDefined(ParserTestCase): - """Test a user-defined option/argument type""" - - class MyType(TestCase): - - def __init__(self, value): - self.value = value - - def __eq__(self, other): - return (type(self), self.value) == (type(other), other.value) - - argument_signatures = [ - Sig('-x', type=MyType), - Sig('spam', type=MyType), - ] - failures = [] - successes = [ - ('a -x b', NS(x=MyType('b'), spam=MyType('a'))), - ('-xf g', NS(x=MyType('f'), spam=MyType('g'))), - ] - - -class TestTypeClassicClass(ParserTestCase): - """Test a classic class type""" - - class C: - - def __init__(self, value): - self.value = value - - def __eq__(self, other): - return (type(self), self.value) == (type(other), other.value) - - argument_signatures = [ - Sig('-x', type=C), - Sig('spam', type=C), - ] - failures = [] - successes = [ - ('a -x b', NS(x=C('b'), spam=C('a'))), - ('-xf g', NS(x=C('f'), spam=C('g'))), - ] - - -class TestTypeRegistration(TestCase): - """Test a user-defined type by registering it""" - - def test(self): - - def get_my_type(string): - return 'my_type{%s}' % string - - parser = argparse.ArgumentParser() - parser.register('type', 'my_type', get_my_type) - parser.add_argument('-x', type='my_type') - parser.add_argument('y', type='my_type') - - self.assertEqual(parser.parse_args('1'.split()), - NS(x=None, y='my_type{1}')) - self.assertEqual(parser.parse_args('-x 1 42'.split()), - NS(x='my_type{1}', y='my_type{42}')) - - -# ============ -# Action tests -# ============ - -class TestActionUserDefined(ParserTestCase): - """Test a user-defined option/argument action""" - - class OptionalAction(argparse.Action): - - def __call__(self, parser, namespace, value, option_string=None): - try: - # check destination and option string - assert self.dest == 'spam', 'dest: %s' % self.dest - assert option_string == '-s', 'flag: %s' % option_string - # when option is before argument, badger=2, and when - # option is after argument, badger= - expected_ns = NS(spam=0.25) - if value in [0.125, 0.625]: - expected_ns.badger = 2 - elif value in [2.0]: - expected_ns.badger = 84 - else: - raise AssertionError('value: %s' % value) - assert expected_ns == namespace, ('expected %s, got %s' % - (expected_ns, namespace)) - except AssertionError: - e = sys.exc_info()[1] - raise ArgumentParserError('opt_action failed: %s' % e) - setattr(namespace, 'spam', value) - - class PositionalAction(argparse.Action): - - def __call__(self, parser, namespace, value, option_string=None): - try: - assert option_string is None, ('option_string: %s' % - option_string) - # check destination - assert self.dest == 'badger', 'dest: %s' % self.dest - # when argument is before option, spam=0.25, and when - # option is after argument, spam= - expected_ns = NS(badger=2) - if value in [42, 84]: - expected_ns.spam = 0.25 - elif value in [1]: - expected_ns.spam = 0.625 - elif value in [2]: - expected_ns.spam = 0.125 - else: - raise AssertionError('value: %s' % value) - assert expected_ns == namespace, ('expected %s, got %s' % - (expected_ns, namespace)) - except AssertionError: - e = sys.exc_info()[1] - raise ArgumentParserError('arg_action failed: %s' % e) - setattr(namespace, 'badger', value) - - argument_signatures = [ - Sig('-s', dest='spam', action=OptionalAction, - type=float, default=0.25), - Sig('badger', action=PositionalAction, - type=int, nargs='?', default=2), - ] - failures = [] - successes = [ - ('-s0.125', NS(spam=0.125, badger=2)), - ('42', NS(spam=0.25, badger=42)), - ('-s 0.625 1', NS(spam=0.625, badger=1)), - ('84 -s2', NS(spam=2.0, badger=84)), - ] - - -class TestActionRegistration(TestCase): - """Test a user-defined action supplied by registering it""" - - class MyAction(argparse.Action): - - def __call__(self, parser, namespace, values, option_string=None): - setattr(namespace, self.dest, 'foo[%s]' % values) - - def test(self): - - parser = argparse.ArgumentParser() - parser.register('action', 'my_action', self.MyAction) - parser.add_argument('badger', action='my_action') - - self.assertEqual(parser.parse_args(['1']), NS(badger='foo[1]')) - self.assertEqual(parser.parse_args(['42']), NS(badger='foo[42]')) - - -# ================ -# Subparsers tests -# ================ - -class TestAddSubparsers(TestCase): - """Test the add_subparsers method""" - - def assertArgumentParserError(self, *args, **kwargs): - self.assertRaises(ArgumentParserError, *args, **kwargs) - - def _get_parser(self, subparser_help=False): - # create a parser with a subparsers argument - parser = ErrorRaisingArgumentParser( - prog='PROG', description='main description') - parser.add_argument( - '--foo', action='store_true', help='foo help') - parser.add_argument( - 'bar', type=float, help='bar help') - - # check that only one subparsers argument can be added - subparsers = parser.add_subparsers(help='command help') - self.assertArgumentParserError(parser.add_subparsers) - - # add first sub-parser - parser1_kwargs = dict(description='1 description') - if subparser_help: - parser1_kwargs['help'] = '1 help' - parser1 = subparsers.add_parser('1', **parser1_kwargs) - parser1.add_argument('-w', type=int, help='w help') - parser1.add_argument('x', choices='abc', help='x help') - - # add second sub-parser - parser2_kwargs = dict(description='2 description') - if subparser_help: - parser2_kwargs['help'] = '2 help' - parser2 = subparsers.add_parser('2', **parser2_kwargs) - parser2.add_argument('-y', choices='123', help='y help') - parser2.add_argument('z', type=complex, nargs='*', help='z help') - - # return the main parser - return parser - - def setUp(self): - self.parser = self._get_parser() - self.command_help_parser = self._get_parser(subparser_help=True) - - def test_parse_args_failures(self): - # check some failure cases: - for args_str in ['', 'a', 'a a', '0.5 a', '0.5 1', - '0.5 1 -y', '0.5 2 -w']: - args = args_str.split() - self.assertArgumentParserError(self.parser.parse_args, args) - - def test_parse_args(self): - # check some non-failure cases: - self.assertEqual( - self.parser.parse_args('0.5 1 b -w 7'.split()), - NS(foo=False, bar=0.5, w=7, x='b'), - ) - self.assertEqual( - self.parser.parse_args('0.25 --foo 2 -y 2 3j -- -1j'.split()), - NS(foo=True, bar=0.25, y='2', z=[3j, -1j]), - ) - self.assertEqual( - self.parser.parse_args('--foo 0.125 1 c'.split()), - NS(foo=True, bar=0.125, w=None, x='c'), - ) - - def test_dest(self): - parser = ErrorRaisingArgumentParser() - parser.add_argument('--foo', action='store_true') - subparsers = parser.add_subparsers(dest='bar') - parser1 = subparsers.add_parser('1') - parser1.add_argument('baz') - self.assertEqual(NS(foo=False, bar='1', baz='2'), - parser.parse_args('1 2'.split())) - - def test_help(self): - self.assertEqual(self.parser.format_usage(), - 'usage: PROG [-h] [--foo] bar {1,2} ...\n') - self.assertEqual(self.parser.format_help(), textwrap.dedent('''\ - usage: PROG [-h] [--foo] bar {1,2} ... - - main description - - positional arguments: - bar bar help - {1,2} command help - - optional arguments: - -h, --help show this help message and exit - --foo foo help - ''')) - - def test_parser_command_help(self): - self.assertEqual(self.command_help_parser.format_usage(), - 'usage: PROG [-h] [--foo] bar {1,2} ...\n') - self.assertEqual(self.command_help_parser.format_help(), - textwrap.dedent('''\ - usage: PROG [-h] [--foo] bar {1,2} ... - - main description - - positional arguments: - bar bar help - {1,2} command help - 1 1 help - 2 2 help - - optional arguments: - -h, --help show this help message and exit - --foo foo help - ''')) - - def test_subparser_title_help(self): - parser = ErrorRaisingArgumentParser(prog='PROG', - description='main description') - parser.add_argument('--foo', action='store_true', help='foo help') - parser.add_argument('bar', help='bar help') - subparsers = parser.add_subparsers(title='subcommands', - description='command help', - help='additional text') - parser1 = subparsers.add_parser('1') - parser2 = subparsers.add_parser('2') - self.assertEqual(parser.format_usage(), - 'usage: PROG [-h] [--foo] bar {1,2} ...\n') - self.assertEqual(parser.format_help(), textwrap.dedent('''\ - usage: PROG [-h] [--foo] bar {1,2} ... - - main description - - positional arguments: - bar bar help - - optional arguments: - -h, --help show this help message and exit - --foo foo help - - subcommands: - command help - - {1,2} additional text - ''')) - - def _test_subparser_help(self, args_str, expected_help): - try: - self.parser.parse_args(args_str.split()) - except ArgumentParserError: - err = sys.exc_info()[1] - if err.stdout != expected_help: - print(repr(expected_help)) - print(repr(err.stdout)) - self.assertEqual(err.stdout, expected_help) - - def test_subparser1_help(self): - self._test_subparser_help('5.0 1 -h', textwrap.dedent('''\ - usage: PROG bar 1 [-h] [-w W] {a,b,c} - - 1 description - - positional arguments: - {a,b,c} x help - - optional arguments: - -h, --help show this help message and exit - -w W w help - ''')) - - def test_subparser2_help(self): - self._test_subparser_help('5.0 2 -h', textwrap.dedent('''\ - usage: PROG bar 2 [-h] [-y {1,2,3}] [z [z ...]] - - 2 description - - positional arguments: - z z help - - optional arguments: - -h, --help show this help message and exit - -y {1,2,3} y help - ''')) - -# ============ -# Groups tests -# ============ - -class TestPositionalsGroups(TestCase): - """Tests that order of group positionals matches construction order""" - - def test_nongroup_first(self): - parser = ErrorRaisingArgumentParser() - parser.add_argument('foo') - group = parser.add_argument_group('g') - group.add_argument('bar') - parser.add_argument('baz') - expected = NS(foo='1', bar='2', baz='3') - result = parser.parse_args('1 2 3'.split()) - self.assertEqual(expected, result) - - def test_group_first(self): - parser = ErrorRaisingArgumentParser() - group = parser.add_argument_group('xxx') - group.add_argument('foo') - parser.add_argument('bar') - parser.add_argument('baz') - expected = NS(foo='1', bar='2', baz='3') - result = parser.parse_args('1 2 3'.split()) - self.assertEqual(expected, result) - - def test_interleaved_groups(self): - parser = ErrorRaisingArgumentParser() - group = parser.add_argument_group('xxx') - parser.add_argument('foo') - group.add_argument('bar') - parser.add_argument('baz') - group = parser.add_argument_group('yyy') - group.add_argument('frell') - expected = NS(foo='1', bar='2', baz='3', frell='4') - result = parser.parse_args('1 2 3 4'.split()) - self.assertEqual(expected, result) - -# =================== -# Parent parser tests -# =================== - -class TestParentParsers(TestCase): - """Tests that parsers can be created with parent parsers""" - - def assertArgumentParserError(self, *args, **kwargs): - self.assertRaises(ArgumentParserError, *args, **kwargs) - - def setUp(self): - self.wxyz_parent = ErrorRaisingArgumentParser(add_help=False) - self.wxyz_parent.add_argument('--w') - x_group = self.wxyz_parent.add_argument_group('x') - x_group.add_argument('-y') - self.wxyz_parent.add_argument('z') - - self.abcd_parent = ErrorRaisingArgumentParser(add_help=False) - self.abcd_parent.add_argument('a') - self.abcd_parent.add_argument('-b') - c_group = self.abcd_parent.add_argument_group('c') - c_group.add_argument('--d') - - self.w_parent = ErrorRaisingArgumentParser(add_help=False) - self.w_parent.add_argument('--w') - - self.z_parent = ErrorRaisingArgumentParser(add_help=False) - self.z_parent.add_argument('z') - - # parents with mutually exclusive groups - self.ab_mutex_parent = ErrorRaisingArgumentParser(add_help=False) - group = self.ab_mutex_parent.add_mutually_exclusive_group() - group.add_argument('-a', action='store_true') - group.add_argument('-b', action='store_true') - - def test_single_parent(self): - parser = ErrorRaisingArgumentParser(parents=[self.wxyz_parent]) - self.assertEqual(parser.parse_args('-y 1 2 --w 3'.split()), - NS(w='3', y='1', z='2')) - - def test_single_parent_mutex(self): - self._test_mutex_ab(self.ab_mutex_parent.parse_args) - parser = ErrorRaisingArgumentParser(parents=[self.ab_mutex_parent]) - self._test_mutex_ab(parser.parse_args) - - def test_single_granparent_mutex(self): - parents = [self.ab_mutex_parent] - parser = ErrorRaisingArgumentParser(add_help=False, parents=parents) - parser = ErrorRaisingArgumentParser(parents=[parser]) - self._test_mutex_ab(parser.parse_args) - - def _test_mutex_ab(self, parse_args): - self.assertEqual(parse_args([]), NS(a=False, b=False)) - self.assertEqual(parse_args(['-a']), NS(a=True, b=False)) - self.assertEqual(parse_args(['-b']), NS(a=False, b=True)) - self.assertArgumentParserError(parse_args, ['-a', '-b']) - self.assertArgumentParserError(parse_args, ['-b', '-a']) - self.assertArgumentParserError(parse_args, ['-c']) - self.assertArgumentParserError(parse_args, ['-a', '-c']) - self.assertArgumentParserError(parse_args, ['-b', '-c']) - - def test_multiple_parents(self): - parents = [self.abcd_parent, self.wxyz_parent] - parser = ErrorRaisingArgumentParser(parents=parents) - self.assertEqual(parser.parse_args('--d 1 --w 2 3 4'.split()), - NS(a='3', b=None, d='1', w='2', y=None, z='4')) - - def test_multiple_parents_mutex(self): - parents = [self.ab_mutex_parent, self.wxyz_parent] - parser = ErrorRaisingArgumentParser(parents=parents) - self.assertEqual(parser.parse_args('-a --w 2 3'.split()), - NS(a=True, b=False, w='2', y=None, z='3')) - self.assertArgumentParserError( - parser.parse_args, '-a --w 2 3 -b'.split()) - self.assertArgumentParserError( - parser.parse_args, '-a -b --w 2 3'.split()) - - def test_conflicting_parents(self): - self.assertRaises( - argparse.ArgumentError, - argparse.ArgumentParser, - parents=[self.w_parent, self.wxyz_parent]) - - def test_conflicting_parents_mutex(self): - self.assertRaises( - argparse.ArgumentError, - argparse.ArgumentParser, - parents=[self.abcd_parent, self.ab_mutex_parent]) - - def test_same_argument_name_parents(self): - parents = [self.wxyz_parent, self.z_parent] - parser = ErrorRaisingArgumentParser(parents=parents) - self.assertEqual(parser.parse_args('1 2'.split()), - NS(w=None, y=None, z='2')) - - def test_subparser_parents(self): - parser = ErrorRaisingArgumentParser() - subparsers = parser.add_subparsers() - abcde_parser = subparsers.add_parser('bar', parents=[self.abcd_parent]) - abcde_parser.add_argument('e') - self.assertEqual(parser.parse_args('bar -b 1 --d 2 3 4'.split()), - NS(a='3', b='1', d='2', e='4')) - - def test_subparser_parents_mutex(self): - parser = ErrorRaisingArgumentParser() - subparsers = parser.add_subparsers() - parents = [self.ab_mutex_parent] - abc_parser = subparsers.add_parser('foo', parents=parents) - c_group = abc_parser.add_argument_group('c_group') - c_group.add_argument('c') - parents = [self.wxyz_parent, self.ab_mutex_parent] - wxyzabe_parser = subparsers.add_parser('bar', parents=parents) - wxyzabe_parser.add_argument('e') - self.assertEqual(parser.parse_args('foo -a 4'.split()), - NS(a=True, b=False, c='4')) - self.assertEqual(parser.parse_args('bar -b --w 2 3 4'.split()), - NS(a=False, b=True, w='2', y=None, z='3', e='4')) - self.assertArgumentParserError( - parser.parse_args, 'foo -a -b 4'.split()) - self.assertArgumentParserError( - parser.parse_args, 'bar -b -a 4'.split()) - - def test_parent_help(self): - parents = [self.abcd_parent, self.wxyz_parent] - parser = ErrorRaisingArgumentParser(parents=parents) - parser_help = parser.format_help() - self.assertEqual(parser_help, textwrap.dedent('''\ - usage: test_argparse.py [-h] [-b B] [--d D] [--w W] [-y Y] a z - - positional arguments: - a - z - - optional arguments: - -h, --help show this help message and exit - -b B - --w W - - c: - --d D - - x: - -y Y - ''')) - - def test_groups_parents(self): - parent = ErrorRaisingArgumentParser(add_help=False) - g = parent.add_argument_group(title='g', description='gd') - g.add_argument('-w') - g.add_argument('-x') - m = parent.add_mutually_exclusive_group() - m.add_argument('-y') - m.add_argument('-z') - parser = ErrorRaisingArgumentParser(parents=[parent]) - - self.assertRaises(ArgumentParserError, parser.parse_args, - ['-y', 'Y', '-z', 'Z']) - - parser_help = parser.format_help() - self.assertEqual(parser_help, textwrap.dedent('''\ - usage: test_argparse.py [-h] [-w W] [-x X] [-y Y | -z Z] - - optional arguments: - -h, --help show this help message and exit - -y Y - -z Z - - g: - gd - - -w W - -x X - ''')) - -# ============================== -# Mutually exclusive group tests -# ============================== - -class TestMutuallyExclusiveGroupErrors(TestCase): - - def test_invalid_add_argument_group(self): - parser = ErrorRaisingArgumentParser() - raises = self.assertRaises - raises(TypeError, parser.add_mutually_exclusive_group, title='foo') - - def test_invalid_add_argument(self): - parser = ErrorRaisingArgumentParser() - group = parser.add_mutually_exclusive_group() - add_argument = group.add_argument - raises = self.assertRaises - raises(ValueError, add_argument, '--foo', required=True) - raises(ValueError, add_argument, 'bar') - raises(ValueError, add_argument, 'bar', nargs='+') - raises(ValueError, add_argument, 'bar', nargs=1) - raises(ValueError, add_argument, 'bar', nargs=argparse.PARSER) - - -class MEMixin(object): - - def test_failures_when_not_required(self): - parse_args = self.get_parser(required=False).parse_args - error = ArgumentParserError - for args_string in self.failures: - self.assertRaises(error, parse_args, args_string.split()) - - def test_failures_when_required(self): - parse_args = self.get_parser(required=True).parse_args - error = ArgumentParserError - for args_string in self.failures + ['']: - self.assertRaises(error, parse_args, args_string.split()) - - def test_successes_when_not_required(self): - parse_args = self.get_parser(required=False).parse_args - successes = self.successes + self.successes_when_not_required - for args_string, expected_ns in successes: - actual_ns = parse_args(args_string.split()) - self.assertEqual(actual_ns, expected_ns) - - def test_successes_when_required(self): - parse_args = self.get_parser(required=True).parse_args - for args_string, expected_ns in self.successes: - actual_ns = parse_args(args_string.split()) - self.assertEqual(actual_ns, expected_ns) - - def test_usage_when_not_required(self): - format_usage = self.get_parser(required=False).format_usage - expected_usage = self.usage_when_not_required - self.assertEqual(format_usage(), textwrap.dedent(expected_usage)) - - def test_usage_when_required(self): - format_usage = self.get_parser(required=True).format_usage - expected_usage = self.usage_when_required - self.assertEqual(format_usage(), textwrap.dedent(expected_usage)) - - def test_help_when_not_required(self): - format_help = self.get_parser(required=False).format_help - help = self.usage_when_not_required + self.help - self.assertEqual(format_help(), textwrap.dedent(help)) - - def test_help_when_required(self): - format_help = self.get_parser(required=True).format_help - help = self.usage_when_required + self.help - self.assertEqual(format_help(), textwrap.dedent(help)) - - -class TestMutuallyExclusiveSimple(MEMixin, TestCase): - - def get_parser(self, required=None): - parser = ErrorRaisingArgumentParser(prog='PROG') - group = parser.add_mutually_exclusive_group(required=required) - group.add_argument('--bar', help='bar help') - group.add_argument('--baz', nargs='?', const='Z', help='baz help') - return parser - - failures = ['--bar X --baz Y', '--bar X --baz'] - successes = [ - ('--bar X', NS(bar='X', baz=None)), - ('--bar X --bar Z', NS(bar='Z', baz=None)), - ('--baz Y', NS(bar=None, baz='Y')), - ('--baz', NS(bar=None, baz='Z')), - ] - successes_when_not_required = [ - ('', NS(bar=None, baz=None)), - ] - - usage_when_not_required = '''\ - usage: PROG [-h] [--bar BAR | --baz [BAZ]] - ''' - usage_when_required = '''\ - usage: PROG [-h] (--bar BAR | --baz [BAZ]) - ''' - help = '''\ - - optional arguments: - -h, --help show this help message and exit - --bar BAR bar help - --baz [BAZ] baz help - ''' - - -class TestMutuallyExclusiveLong(MEMixin, TestCase): - - def get_parser(self, required=None): - parser = ErrorRaisingArgumentParser(prog='PROG') - parser.add_argument('--abcde', help='abcde help') - parser.add_argument('--fghij', help='fghij help') - group = parser.add_mutually_exclusive_group(required=required) - group.add_argument('--klmno', help='klmno help') - group.add_argument('--pqrst', help='pqrst help') - return parser - - failures = ['--klmno X --pqrst Y'] - successes = [ - ('--klmno X', NS(abcde=None, fghij=None, klmno='X', pqrst=None)), - ('--abcde Y --klmno X', - NS(abcde='Y', fghij=None, klmno='X', pqrst=None)), - ('--pqrst X', NS(abcde=None, fghij=None, klmno=None, pqrst='X')), - ('--pqrst X --fghij Y', - NS(abcde=None, fghij='Y', klmno=None, pqrst='X')), - ] - successes_when_not_required = [ - ('', NS(abcde=None, fghij=None, klmno=None, pqrst=None)), - ] - - usage_when_not_required = '''\ - usage: PROG [-h] [--abcde ABCDE] [--fghij FGHIJ] - [--klmno KLMNO | --pqrst PQRST] - ''' - usage_when_required = '''\ - usage: PROG [-h] [--abcde ABCDE] [--fghij FGHIJ] - (--klmno KLMNO | --pqrst PQRST) - ''' - help = '''\ - - optional arguments: - -h, --help show this help message and exit - --abcde ABCDE abcde help - --fghij FGHIJ fghij help - --klmno KLMNO klmno help - --pqrst PQRST pqrst help - ''' - - -class TestMutuallyExclusiveFirstSuppressed(MEMixin, TestCase): - - def get_parser(self, required): - parser = ErrorRaisingArgumentParser(prog='PROG') - group = parser.add_mutually_exclusive_group(required=required) - group.add_argument('-x', help=argparse.SUPPRESS) - group.add_argument('-y', action='store_false', help='y help') - return parser - - failures = ['-x X -y'] - successes = [ - ('-x X', NS(x='X', y=True)), - ('-x X -x Y', NS(x='Y', y=True)), - ('-y', NS(x=None, y=False)), - ] - successes_when_not_required = [ - ('', NS(x=None, y=True)), - ] - - usage_when_not_required = '''\ - usage: PROG [-h] [-y] - ''' - usage_when_required = '''\ - usage: PROG [-h] -y - ''' - help = '''\ - - optional arguments: - -h, --help show this help message and exit - -y y help - ''' - - -class TestMutuallyExclusiveManySuppressed(MEMixin, TestCase): - - def get_parser(self, required): - parser = ErrorRaisingArgumentParser(prog='PROG') - group = parser.add_mutually_exclusive_group(required=required) - add = group.add_argument - add('--spam', action='store_true', help=argparse.SUPPRESS) - add('--badger', action='store_false', help=argparse.SUPPRESS) - add('--bladder', help=argparse.SUPPRESS) - return parser - - failures = [ - '--spam --badger', - '--badger --bladder B', - '--bladder B --spam', - ] - successes = [ - ('--spam', NS(spam=True, badger=True, bladder=None)), - ('--badger', NS(spam=False, badger=False, bladder=None)), - ('--bladder B', NS(spam=False, badger=True, bladder='B')), - ('--spam --spam', NS(spam=True, badger=True, bladder=None)), - ] - successes_when_not_required = [ - ('', NS(spam=False, badger=True, bladder=None)), - ] - - usage_when_required = usage_when_not_required = '''\ - usage: PROG [-h] - ''' - help = '''\ - - optional arguments: - -h, --help show this help message and exit - ''' - - -class TestMutuallyExclusiveOptionalAndPositional(MEMixin, TestCase): - - def get_parser(self, required): - parser = ErrorRaisingArgumentParser(prog='PROG') - group = parser.add_mutually_exclusive_group(required=required) - group.add_argument('--foo', action='store_true', help='FOO') - group.add_argument('--spam', help='SPAM') - group.add_argument('badger', nargs='*', default='X', help='BADGER') - return parser - - failures = [ - '--foo --spam S', - '--spam S X', - 'X --foo', - 'X Y Z --spam S', - '--foo X Y', - ] - successes = [ - ('--foo', NS(foo=True, spam=None, badger='X')), - ('--spam S', NS(foo=False, spam='S', badger='X')), - ('X', NS(foo=False, spam=None, badger=['X'])), - ('X Y Z', NS(foo=False, spam=None, badger=['X', 'Y', 'Z'])), - ] - successes_when_not_required = [ - ('', NS(foo=False, spam=None, badger='X')), - ] - - usage_when_not_required = '''\ - usage: PROG [-h] [--foo | --spam SPAM | badger [badger ...]] - ''' - usage_when_required = '''\ - usage: PROG [-h] (--foo | --spam SPAM | badger [badger ...]) - ''' - help = '''\ - - positional arguments: - badger BADGER - - optional arguments: - -h, --help show this help message and exit - --foo FOO - --spam SPAM SPAM - ''' - - -class TestMutuallyExclusiveOptionalsMixed(MEMixin, TestCase): - - def get_parser(self, required): - parser = ErrorRaisingArgumentParser(prog='PROG') - parser.add_argument('-x', action='store_true', help='x help') - group = parser.add_mutually_exclusive_group(required=required) - group.add_argument('-a', action='store_true', help='a help') - group.add_argument('-b', action='store_true', help='b help') - parser.add_argument('-y', action='store_true', help='y help') - group.add_argument('-c', action='store_true', help='c help') - return parser - - failures = ['-a -b', '-b -c', '-a -c', '-a -b -c'] - successes = [ - ('-a', NS(a=True, b=False, c=False, x=False, y=False)), - ('-b', NS(a=False, b=True, c=False, x=False, y=False)), - ('-c', NS(a=False, b=False, c=True, x=False, y=False)), - ('-a -x', NS(a=True, b=False, c=False, x=True, y=False)), - ('-y -b', NS(a=False, b=True, c=False, x=False, y=True)), - ('-x -y -c', NS(a=False, b=False, c=True, x=True, y=True)), - ] - successes_when_not_required = [ - ('', NS(a=False, b=False, c=False, x=False, y=False)), - ('-x', NS(a=False, b=False, c=False, x=True, y=False)), - ('-y', NS(a=False, b=False, c=False, x=False, y=True)), - ] - - usage_when_required = usage_when_not_required = '''\ - usage: PROG [-h] [-x] [-a] [-b] [-y] [-c] - ''' - help = '''\ - - optional arguments: - -h, --help show this help message and exit - -x x help - -a a help - -b b help - -y y help - -c c help - ''' - - -class TestMutuallyExclusiveOptionalsAndPositionalsMixed(MEMixin, TestCase): - - def get_parser(self, required): - parser = ErrorRaisingArgumentParser(prog='PROG') - parser.add_argument('x', help='x help') - parser.add_argument('-y', action='store_true', help='y help') - group = parser.add_mutually_exclusive_group(required=required) - group.add_argument('a', nargs='?', help='a help') - group.add_argument('-b', action='store_true', help='b help') - group.add_argument('-c', action='store_true', help='c help') - return parser - - failures = ['X A -b', '-b -c', '-c X A'] - successes = [ - ('X A', NS(a='A', b=False, c=False, x='X', y=False)), - ('X -b', NS(a=None, b=True, c=False, x='X', y=False)), - ('X -c', NS(a=None, b=False, c=True, x='X', y=False)), - ('X A -y', NS(a='A', b=False, c=False, x='X', y=True)), - ('X -y -b', NS(a=None, b=True, c=False, x='X', y=True)), - ] - successes_when_not_required = [ - ('X', NS(a=None, b=False, c=False, x='X', y=False)), - ('X -y', NS(a=None, b=False, c=False, x='X', y=True)), - ] - - usage_when_required = usage_when_not_required = '''\ - usage: PROG [-h] [-y] [-b] [-c] x [a] - ''' - help = '''\ - - positional arguments: - x x help - a a help - - optional arguments: - -h, --help show this help message and exit - -y y help - -b b help - -c c help - ''' - -# ================================================= -# Mutually exclusive group in parent parser tests -# ================================================= - -class MEPBase(object): - - def get_parser(self, required=None): - parent = super(MEPBase, self).get_parser(required=required) - parser = ErrorRaisingArgumentParser( - prog=parent.prog, add_help=False, parents=[parent]) - return parser - - -class TestMutuallyExclusiveGroupErrorsParent( - MEPBase, TestMutuallyExclusiveGroupErrors): - pass - - -class TestMutuallyExclusiveSimpleParent( - MEPBase, TestMutuallyExclusiveSimple): - pass - - -class TestMutuallyExclusiveLongParent( - MEPBase, TestMutuallyExclusiveLong): - pass - - -class TestMutuallyExclusiveFirstSuppressedParent( - MEPBase, TestMutuallyExclusiveFirstSuppressed): - pass - - -class TestMutuallyExclusiveManySuppressedParent( - MEPBase, TestMutuallyExclusiveManySuppressed): - pass - - -class TestMutuallyExclusiveOptionalAndPositionalParent( - MEPBase, TestMutuallyExclusiveOptionalAndPositional): - pass - - -class TestMutuallyExclusiveOptionalsMixedParent( - MEPBase, TestMutuallyExclusiveOptionalsMixed): - pass - - -class TestMutuallyExclusiveOptionalsAndPositionalsMixedParent( - MEPBase, TestMutuallyExclusiveOptionalsAndPositionalsMixed): - pass - -# ================= -# Set default tests -# ================= - -class TestSetDefaults(TestCase): - - def test_set_defaults_no_args(self): - parser = ErrorRaisingArgumentParser() - parser.set_defaults(x='foo') - parser.set_defaults(y='bar', z=1) - self.assertEqual(NS(x='foo', y='bar', z=1), - parser.parse_args([])) - self.assertEqual(NS(x='foo', y='bar', z=1), - parser.parse_args([], NS())) - self.assertEqual(NS(x='baz', y='bar', z=1), - parser.parse_args([], NS(x='baz'))) - self.assertEqual(NS(x='baz', y='bar', z=2), - parser.parse_args([], NS(x='baz', z=2))) - - def test_set_defaults_with_args(self): - parser = ErrorRaisingArgumentParser() - parser.set_defaults(x='foo', y='bar') - parser.add_argument('-x', default='xfoox') - self.assertEqual(NS(x='xfoox', y='bar'), - parser.parse_args([])) - self.assertEqual(NS(x='xfoox', y='bar'), - parser.parse_args([], NS())) - self.assertEqual(NS(x='baz', y='bar'), - parser.parse_args([], NS(x='baz'))) - self.assertEqual(NS(x='1', y='bar'), - parser.parse_args('-x 1'.split())) - self.assertEqual(NS(x='1', y='bar'), - parser.parse_args('-x 1'.split(), NS())) - self.assertEqual(NS(x='1', y='bar'), - parser.parse_args('-x 1'.split(), NS(x='baz'))) - - def test_set_defaults_subparsers(self): - parser = ErrorRaisingArgumentParser() - parser.set_defaults(x='foo') - subparsers = parser.add_subparsers() - parser_a = subparsers.add_parser('a') - parser_a.set_defaults(y='bar') - self.assertEqual(NS(x='foo', y='bar'), - parser.parse_args('a'.split())) - - def test_set_defaults_parents(self): - parent = ErrorRaisingArgumentParser(add_help=False) - parent.set_defaults(x='foo') - parser = ErrorRaisingArgumentParser(parents=[parent]) - self.assertEqual(NS(x='foo'), parser.parse_args([])) - - def test_set_defaults_same_as_add_argument(self): - parser = ErrorRaisingArgumentParser() - parser.set_defaults(w='W', x='X', y='Y', z='Z') - parser.add_argument('-w') - parser.add_argument('-x', default='XX') - parser.add_argument('y', nargs='?') - parser.add_argument('z', nargs='?', default='ZZ') - - # defaults set previously - self.assertEqual(NS(w='W', x='XX', y='Y', z='ZZ'), - parser.parse_args([])) - - # reset defaults - parser.set_defaults(w='WW', x='X', y='YY', z='Z') - self.assertEqual(NS(w='WW', x='X', y='YY', z='Z'), - parser.parse_args([])) - - def test_set_defaults_same_as_add_argument_group(self): - parser = ErrorRaisingArgumentParser() - parser.set_defaults(w='W', x='X', y='Y', z='Z') - group = parser.add_argument_group('foo') - group.add_argument('-w') - group.add_argument('-x', default='XX') - group.add_argument('y', nargs='?') - group.add_argument('z', nargs='?', default='ZZ') - - - # defaults set previously - self.assertEqual(NS(w='W', x='XX', y='Y', z='ZZ'), - parser.parse_args([])) - - # reset defaults - parser.set_defaults(w='WW', x='X', y='YY', z='Z') - self.assertEqual(NS(w='WW', x='X', y='YY', z='Z'), - parser.parse_args([])) - -# ================= -# Get default tests -# ================= - -class TestGetDefault(TestCase): - - def test_get_default(self): - parser = ErrorRaisingArgumentParser() - self.assertEqual(None, parser.get_default("foo")) - self.assertEqual(None, parser.get_default("bar")) - - parser.add_argument("--foo") - self.assertEqual(None, parser.get_default("foo")) - self.assertEqual(None, parser.get_default("bar")) - - parser.add_argument("--bar", type=int, default=42) - self.assertEqual(None, parser.get_default("foo")) - self.assertEqual(42, parser.get_default("bar")) - - parser.set_defaults(foo="badger") - self.assertEqual("badger", parser.get_default("foo")) - self.assertEqual(42, parser.get_default("bar")) - -# ========================== -# Namespace 'contains' tests -# ========================== - -class TestNamespaceContainsSimple(TestCase): - - def test_empty(self): - ns = argparse.Namespace() - self.assertEquals('' in ns, False) - self.assertEquals('' not in ns, True) - self.assertEquals('x' in ns, False) - - def test_non_empty(self): - ns = argparse.Namespace(x=1, y=2) - self.assertEquals('x' in ns, True) - self.assertEquals('x' not in ns, False) - self.assertEquals('y' in ns, True) - self.assertEquals('' in ns, False) - self.assertEquals('xx' in ns, False) - self.assertEquals('z' in ns, False) - -# ===================== -# Help formatting tests -# ===================== - -class TestHelpFormattingMetaclass(type): - - def __init__(cls, name, bases, bodydict): - if name == 'HelpTestCase': - return - - class AddTests(object): - - def __init__(self, test_class, func_suffix, std_name): - self.func_suffix = func_suffix - self.std_name = std_name - - for test_func in [self.test_format, - self.test_print, - self.test_print_file]: - test_name = '%s_%s' % (test_func.__name__, func_suffix) - - def test_wrapper(self, test_func=test_func): - test_func(self) - try: - test_wrapper.__name__ = test_name - except TypeError: - pass - setattr(test_class, test_name, test_wrapper) - - def _get_parser(self, tester): - parser = argparse.ArgumentParser( - *tester.parser_signature.args, - **tester.parser_signature.kwargs) - for argument_sig in tester.argument_signatures: - parser.add_argument(*argument_sig.args, - **argument_sig.kwargs) - group_signatures = tester.argument_group_signatures - for group_sig, argument_sigs in group_signatures: - group = parser.add_argument_group(*group_sig.args, - **group_sig.kwargs) - for argument_sig in argument_sigs: - group.add_argument(*argument_sig.args, - **argument_sig.kwargs) - return parser - - def _test(self, tester, parser_text): - expected_text = getattr(tester, self.func_suffix) - expected_text = textwrap.dedent(expected_text) - if expected_text != parser_text: - print(repr(expected_text)) - print(repr(parser_text)) - for char1, char2 in zip(expected_text, parser_text): - if char1 != char2: - print('first diff: %r %r' % (char1, char2)) - break - tester.assertEqual(expected_text, parser_text) - - def test_format(self, tester): - parser = self._get_parser(tester) - format = getattr(parser, 'format_%s' % self.func_suffix) - self._test(tester, format()) - - def test_print(self, tester): - parser = self._get_parser(tester) - print_ = getattr(parser, 'print_%s' % self.func_suffix) - old_stream = getattr(sys, self.std_name) - setattr(sys, self.std_name, StringIO()) - try: - print_() - parser_text = getattr(sys, self.std_name).getvalue() - finally: - setattr(sys, self.std_name, old_stream) - self._test(tester, parser_text) - - def test_print_file(self, tester): - parser = self._get_parser(tester) - print_ = getattr(parser, 'print_%s' % self.func_suffix) - sfile = StringIO() - print_(sfile) - parser_text = sfile.getvalue() - self._test(tester, parser_text) - - # add tests for {format,print}_{usage,help,version} - for func_suffix, std_name in [('usage', 'stdout'), - ('help', 'stdout'), - ('version', 'stderr')]: - AddTests(cls, func_suffix, std_name) - -bases = TestCase, -HelpTestCase = TestHelpFormattingMetaclass('HelpTestCase', bases, {}) - - -class TestHelpBiggerOptionals(HelpTestCase): - """Make sure that argument help aligns when options are longer""" - - parser_signature = Sig(prog='PROG', description='DESCRIPTION', - epilog='EPILOG', version='0.1') - argument_signatures = [ - Sig('-x', action='store_true', help='X HELP'), - Sig('--y', help='Y HELP'), - Sig('foo', help='FOO HELP'), - Sig('bar', help='BAR HELP'), - ] - argument_group_signatures = [] - usage = '''\ - usage: PROG [-h] [-v] [-x] [--y Y] foo bar - ''' - help = usage + '''\ - - DESCRIPTION - - positional arguments: - foo FOO HELP - bar BAR HELP - - optional arguments: - -h, --help show this help message and exit - -v, --version show program's version number and exit - -x X HELP - --y Y Y HELP - - EPILOG - ''' - version = '''\ - 0.1 - ''' - - -class TestHelpBiggerOptionalGroups(HelpTestCase): - """Make sure that argument help aligns when options are longer""" - - parser_signature = Sig(prog='PROG', description='DESCRIPTION', - epilog='EPILOG', version='0.1') - argument_signatures = [ - Sig('-x', action='store_true', help='X HELP'), - Sig('--y', help='Y HELP'), - Sig('foo', help='FOO HELP'), - Sig('bar', help='BAR HELP'), - ] - argument_group_signatures = [ - (Sig('GROUP TITLE', description='GROUP DESCRIPTION'), [ - Sig('baz', help='BAZ HELP'), - Sig('-z', nargs='+', help='Z HELP')]), - ] - usage = '''\ - usage: PROG [-h] [-v] [-x] [--y Y] [-z Z [Z ...]] foo bar baz - ''' - help = usage + '''\ - - DESCRIPTION - - positional arguments: - foo FOO HELP - bar BAR HELP - - optional arguments: - -h, --help show this help message and exit - -v, --version show program's version number and exit - -x X HELP - --y Y Y HELP - - GROUP TITLE: - GROUP DESCRIPTION - - baz BAZ HELP - -z Z [Z ...] Z HELP - - EPILOG - ''' - version = '''\ - 0.1 - ''' - - -class TestHelpBiggerPositionals(HelpTestCase): - """Make sure that help aligns when arguments are longer""" - - parser_signature = Sig(usage='USAGE', description='DESCRIPTION') - argument_signatures = [ - Sig('-x', action='store_true', help='X HELP'), - Sig('--y', help='Y HELP'), - Sig('ekiekiekifekang', help='EKI HELP'), - Sig('bar', help='BAR HELP'), - ] - argument_group_signatures = [] - usage = '''\ - usage: USAGE - ''' - help = usage + '''\ - - DESCRIPTION - - positional arguments: - ekiekiekifekang EKI HELP - bar BAR HELP - - optional arguments: - -h, --help show this help message and exit - -x X HELP - --y Y Y HELP - ''' - - version = '' - - -class TestHelpReformatting(HelpTestCase): - """Make sure that text after short names starts on the first line""" - - parser_signature = Sig( - prog='PROG', - description=' oddly formatted\n' - 'description\n' - '\n' - 'that is so long that it should go onto multiple ' - 'lines when wrapped') - argument_signatures = [ - Sig('-x', metavar='XX', help='oddly\n' - ' formatted -x help'), - Sig('y', metavar='yyy', help='normal y help'), - ] - argument_group_signatures = [ - (Sig('title', description='\n' - ' oddly formatted group\n' - '\n' - 'description'), - [Sig('-a', action='store_true', - help=' oddly \n' - 'formatted -a help \n' - ' again, so long that it should be wrapped over ' - 'multiple lines')]), - ] - usage = '''\ - usage: PROG [-h] [-x XX] [-a] yyy - ''' - help = usage + '''\ - - oddly formatted description that is so long that it should go onto \ -multiple - lines when wrapped - - positional arguments: - yyy normal y help - - optional arguments: - -h, --help show this help message and exit - -x XX oddly formatted -x help - - title: - oddly formatted group description - - -a oddly formatted -a help again, so long that it should \ -be wrapped - over multiple lines - ''' - version = '' - - -class TestHelpWrappingShortNames(HelpTestCase): - """Make sure that text after short names starts on the first line""" - - parser_signature = Sig(prog='PROG', description= 'D\nD' * 30) - argument_signatures = [ - Sig('-x', metavar='XX', help='XHH HX' * 20), - Sig('y', metavar='yyy', help='YH YH' * 20), - ] - argument_group_signatures = [ - (Sig('ALPHAS'), [ - Sig('-a', action='store_true', help='AHHH HHA' * 10)]), - ] - usage = '''\ - usage: PROG [-h] [-x XX] [-a] yyy - ''' - help = usage + '''\ - - D DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD \ -DD DD DD - DD DD DD DD D - - positional arguments: - yyy YH YHYH YHYH YHYH YHYH YHYH YHYH YHYH YHYH YHYH YHYH \ -YHYH YHYH - YHYH YHYH YHYH YHYH YHYH YHYH YHYH YH - - optional arguments: - -h, --help show this help message and exit - -x XX XHH HXXHH HXXHH HXXHH HXXHH HXXHH HXXHH HXXHH HXXHH \ -HXXHH HXXHH - HXXHH HXXHH HXXHH HXXHH HXXHH HXXHH HXXHH HXXHH HXXHH HX - - ALPHAS: - -a AHHH HHAAHHH HHAAHHH HHAAHHH HHAAHHH HHAAHHH HHAAHHH \ -HHAAHHH - HHAAHHH HHAAHHH HHA - ''' - version = '' - - -class TestHelpWrappingLongNames(HelpTestCase): - """Make sure that text after long names starts on the next line""" - - parser_signature = Sig(usage='USAGE', description= 'D D' * 30, - version='V V'*30) - argument_signatures = [ - Sig('-x', metavar='X' * 25, help='XH XH' * 20), - Sig('y', metavar='y' * 25, help='YH YH' * 20), - ] - argument_group_signatures = [ - (Sig('ALPHAS'), [ - Sig('-a', metavar='A' * 25, help='AH AH' * 20), - Sig('z', metavar='z' * 25, help='ZH ZH' * 20)]), - ] - usage = '''\ - usage: USAGE - ''' - help = usage + '''\ - - D DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD \ -DD DD DD - DD DD DD DD D - - positional arguments: - yyyyyyyyyyyyyyyyyyyyyyyyy - YH YHYH YHYH YHYH YHYH YHYH YHYH YHYH YHYH \ -YHYH YHYH - YHYH YHYH YHYH YHYH YHYH YHYH YHYH YHYH YHYH YH - - optional arguments: - -h, --help show this help message and exit - -v, --version show program's version number and exit - -x XXXXXXXXXXXXXXXXXXXXXXXXX - XH XHXH XHXH XHXH XHXH XHXH XHXH XHXH XHXH \ -XHXH XHXH - XHXH XHXH XHXH XHXH XHXH XHXH XHXH XHXH XHXH XH - - ALPHAS: - -a AAAAAAAAAAAAAAAAAAAAAAAAA - AH AHAH AHAH AHAH AHAH AHAH AHAH AHAH AHAH \ -AHAH AHAH - AHAH AHAH AHAH AHAH AHAH AHAH AHAH AHAH AHAH AH - zzzzzzzzzzzzzzzzzzzzzzzzz - ZH ZHZH ZHZH ZHZH ZHZH ZHZH ZHZH ZHZH ZHZH \ -ZHZH ZHZH - ZHZH ZHZH ZHZH ZHZH ZHZH ZHZH ZHZH ZHZH ZHZH ZH - ''' - version = '''\ - V VV VV VV VV VV VV VV VV VV VV VV VV VV VV VV VV VV VV VV VV VV VV \ -VV VV VV - VV VV VV VV V - ''' - - -class TestHelpUsage(HelpTestCase): - """Test basic usage messages""" - - parser_signature = Sig(prog='PROG') - argument_signatures = [ - Sig('-w', nargs='+', help='w'), - Sig('-x', nargs='*', help='x'), - Sig('a', help='a'), - Sig('b', help='b', nargs=2), - Sig('c', help='c', nargs='?'), - ] - argument_group_signatures = [ - (Sig('group'), [ - Sig('-y', nargs='?', help='y'), - Sig('-z', nargs=3, help='z'), - Sig('d', help='d', nargs='*'), - Sig('e', help='e', nargs='+'), - ]) - ] - usage = '''\ - usage: PROG [-h] [-w W [W ...]] [-x [X [X ...]]] [-y [Y]] [-z Z Z Z] - a b b [c] [d [d ...]] e [e ...] - ''' - help = usage + '''\ - - positional arguments: - a a - b b - c c - - optional arguments: - -h, --help show this help message and exit - -w W [W ...] w - -x [X [X ...]] x - - group: - -y [Y] y - -z Z Z Z z - d d - e e - ''' - version = '' - - -class TestHelpOnlyUserGroups(HelpTestCase): - """Test basic usage messages""" - - parser_signature = Sig(prog='PROG', add_help=False) - argument_signatures = [] - argument_group_signatures = [ - (Sig('xxxx'), [ - Sig('-x', help='x'), - Sig('a', help='a'), - ]), - (Sig('yyyy'), [ - Sig('b', help='b'), - Sig('-y', help='y'), - ]), - ] - usage = '''\ - usage: PROG [-x X] [-y Y] a b - ''' - help = usage + '''\ - - xxxx: - -x X x - a a - - yyyy: - b b - -y Y y - ''' - version = '' - - -class TestHelpUsageLongProg(HelpTestCase): - """Test usage messages where the prog is long""" - - parser_signature = Sig(prog='P' * 60) - argument_signatures = [ - Sig('-w', metavar='W'), - Sig('-x', metavar='X'), - Sig('a'), - Sig('b'), - ] - argument_group_signatures = [] - usage = '''\ - usage: PPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPP - [-h] [-w W] [-x X] a b - ''' - help = usage + '''\ - - positional arguments: - a - b - - optional arguments: - -h, --help show this help message and exit - -w W - -x X - ''' - version = '' - - -class TestHelpUsageLongProgOptionsWrap(HelpTestCase): - """Test usage messages where the prog is long and the optionals wrap""" - - parser_signature = Sig(prog='P' * 60) - argument_signatures = [ - Sig('-w', metavar='W' * 25), - Sig('-x', metavar='X' * 25), - Sig('-y', metavar='Y' * 25), - Sig('-z', metavar='Z' * 25), - Sig('a'), - Sig('b'), - ] - argument_group_signatures = [] - usage = '''\ - usage: PPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPP - [-h] [-w WWWWWWWWWWWWWWWWWWWWWWWWW] \ -[-x XXXXXXXXXXXXXXXXXXXXXXXXX] - [-y YYYYYYYYYYYYYYYYYYYYYYYYY] [-z ZZZZZZZZZZZZZZZZZZZZZZZZZ] - a b - ''' - help = usage + '''\ - - positional arguments: - a - b - - optional arguments: - -h, --help show this help message and exit - -w WWWWWWWWWWWWWWWWWWWWWWWWW - -x XXXXXXXXXXXXXXXXXXXXXXXXX - -y YYYYYYYYYYYYYYYYYYYYYYYYY - -z ZZZZZZZZZZZZZZZZZZZZZZZZZ - ''' - version = '' - - -class TestHelpUsageLongProgPositionalsWrap(HelpTestCase): - """Test usage messages where the prog is long and the positionals wrap""" - - parser_signature = Sig(prog='P' * 60, add_help=False) - argument_signatures = [ - Sig('a' * 25), - Sig('b' * 25), - Sig('c' * 25), - ] - argument_group_signatures = [] - usage = '''\ - usage: PPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPP - aaaaaaaaaaaaaaaaaaaaaaaaa bbbbbbbbbbbbbbbbbbbbbbbbb - ccccccccccccccccccccccccc - ''' - help = usage + '''\ - - positional arguments: - aaaaaaaaaaaaaaaaaaaaaaaaa - bbbbbbbbbbbbbbbbbbbbbbbbb - ccccccccccccccccccccccccc - ''' - version = '' - - -class TestHelpUsageOptionalsWrap(HelpTestCase): - """Test usage messages where the optionals wrap""" - - parser_signature = Sig(prog='PROG') - argument_signatures = [ - Sig('-w', metavar='W' * 25), - Sig('-x', metavar='X' * 25), - Sig('-y', metavar='Y' * 25), - Sig('-z', metavar='Z' * 25), - Sig('a'), - Sig('b'), - Sig('c'), - ] - argument_group_signatures = [] - usage = '''\ - usage: PROG [-h] [-w WWWWWWWWWWWWWWWWWWWWWWWWW] \ -[-x XXXXXXXXXXXXXXXXXXXXXXXXX] - [-y YYYYYYYYYYYYYYYYYYYYYYYYY] \ -[-z ZZZZZZZZZZZZZZZZZZZZZZZZZ] - a b c - ''' - help = usage + '''\ - - positional arguments: - a - b - c - - optional arguments: - -h, --help show this help message and exit - -w WWWWWWWWWWWWWWWWWWWWWWWWW - -x XXXXXXXXXXXXXXXXXXXXXXXXX - -y YYYYYYYYYYYYYYYYYYYYYYYYY - -z ZZZZZZZZZZZZZZZZZZZZZZZZZ - ''' - version = '' - - -class TestHelpUsagePositionalsWrap(HelpTestCase): - """Test usage messages where the positionals wrap""" - - parser_signature = Sig(prog='PROG') - argument_signatures = [ - Sig('-x'), - Sig('-y'), - Sig('-z'), - Sig('a' * 25), - Sig('b' * 25), - Sig('c' * 25), - ] - argument_group_signatures = [] - usage = '''\ - usage: PROG [-h] [-x X] [-y Y] [-z Z] - aaaaaaaaaaaaaaaaaaaaaaaaa bbbbbbbbbbbbbbbbbbbbbbbbb - ccccccccccccccccccccccccc - ''' - help = usage + '''\ - - positional arguments: - aaaaaaaaaaaaaaaaaaaaaaaaa - bbbbbbbbbbbbbbbbbbbbbbbbb - ccccccccccccccccccccccccc - - optional arguments: - -h, --help show this help message and exit - -x X - -y Y - -z Z - ''' - version = '' - - -class TestHelpUsageOptionalsPositionalsWrap(HelpTestCase): - """Test usage messages where the optionals and positionals wrap""" - - parser_signature = Sig(prog='PROG') - argument_signatures = [ - Sig('-x', metavar='X' * 25), - Sig('-y', metavar='Y' * 25), - Sig('-z', metavar='Z' * 25), - Sig('a' * 25), - Sig('b' * 25), - Sig('c' * 25), - ] - argument_group_signatures = [] - usage = '''\ - usage: PROG [-h] [-x XXXXXXXXXXXXXXXXXXXXXXXXX] \ -[-y YYYYYYYYYYYYYYYYYYYYYYYYY] - [-z ZZZZZZZZZZZZZZZZZZZZZZZZZ] - aaaaaaaaaaaaaaaaaaaaaaaaa bbbbbbbbbbbbbbbbbbbbbbbbb - ccccccccccccccccccccccccc - ''' - help = usage + '''\ - - positional arguments: - aaaaaaaaaaaaaaaaaaaaaaaaa - bbbbbbbbbbbbbbbbbbbbbbbbb - ccccccccccccccccccccccccc - - optional arguments: - -h, --help show this help message and exit - -x XXXXXXXXXXXXXXXXXXXXXXXXX - -y YYYYYYYYYYYYYYYYYYYYYYYYY - -z ZZZZZZZZZZZZZZZZZZZZZZZZZ - ''' - version = '' - - -class TestHelpUsageOptionalsOnlyWrap(HelpTestCase): - """Test usage messages where there are only optionals and they wrap""" - - parser_signature = Sig(prog='PROG') - argument_signatures = [ - Sig('-x', metavar='X' * 25), - Sig('-y', metavar='Y' * 25), - Sig('-z', metavar='Z' * 25), - ] - argument_group_signatures = [] - usage = '''\ - usage: PROG [-h] [-x XXXXXXXXXXXXXXXXXXXXXXXXX] \ -[-y YYYYYYYYYYYYYYYYYYYYYYYYY] - [-z ZZZZZZZZZZZZZZZZZZZZZZZZZ] - ''' - help = usage + '''\ - - optional arguments: - -h, --help show this help message and exit - -x XXXXXXXXXXXXXXXXXXXXXXXXX - -y YYYYYYYYYYYYYYYYYYYYYYYYY - -z ZZZZZZZZZZZZZZZZZZZZZZZZZ - ''' - version = '' - - -class TestHelpUsagePositionalsOnlyWrap(HelpTestCase): - """Test usage messages where there are only positionals and they wrap""" - - parser_signature = Sig(prog='PROG', add_help=False) - argument_signatures = [ - Sig('a' * 25), - Sig('b' * 25), - Sig('c' * 25), - ] - argument_group_signatures = [] - usage = '''\ - usage: PROG aaaaaaaaaaaaaaaaaaaaaaaaa bbbbbbbbbbbbbbbbbbbbbbbbb - ccccccccccccccccccccccccc - ''' - help = usage + '''\ - - positional arguments: - aaaaaaaaaaaaaaaaaaaaaaaaa - bbbbbbbbbbbbbbbbbbbbbbbbb - ccccccccccccccccccccccccc - ''' - version = '' - - -class TestHelpVariableExpansion(HelpTestCase): - """Test that variables are expanded properly in help messages""" - - parser_signature = Sig(prog='PROG') - argument_signatures = [ - Sig('-x', type=int, - help='x %(prog)s %(default)s %(type)s %%'), - Sig('-y', action='store_const', default=42, const='XXX', - help='y %(prog)s %(default)s %(const)s'), - Sig('--foo', choices='abc', - help='foo %(prog)s %(default)s %(choices)s'), - Sig('--bar', default='baz', choices=[1, 2], metavar='BBB', - help='bar %(prog)s %(default)s %(dest)s'), - Sig('spam', help='spam %(prog)s %(default)s'), - Sig('badger', default=0.5, help='badger %(prog)s %(default)s'), - ] - argument_group_signatures = [ - (Sig('group'), [ - Sig('-a', help='a %(prog)s %(default)s'), - Sig('-b', default=-1, help='b %(prog)s %(default)s'), - ]) - ] - usage = ('''\ - usage: PROG [-h] [-x X] [-y] [--foo {a,b,c}] [--bar BBB] [-a A] [-b B] - spam badger - ''') - help = usage + '''\ - - positional arguments: - spam spam PROG None - badger badger PROG 0.5 - - optional arguments: - -h, --help show this help message and exit - -x X x PROG None int % - -y y PROG 42 XXX - --foo {a,b,c} foo PROG None a, b, c - --bar BBB bar PROG baz bar - - group: - -a A a PROG None - -b B b PROG -1 - ''' - version = '' - - -class TestHelpVariableExpansionUsageSupplied(HelpTestCase): - """Test that variables are expanded properly when usage= is present""" - - parser_signature = Sig(prog='PROG', usage='%(prog)s FOO') - argument_signatures = [] - argument_group_signatures = [] - usage = ('''\ - usage: PROG FOO - ''') - help = usage + '''\ - - optional arguments: - -h, --help show this help message and exit - ''' - version = '' - - -class TestHelpVariableExpansionNoArguments(HelpTestCase): - """Test that variables are expanded properly with no arguments""" - - parser_signature = Sig(prog='PROG', add_help=False) - argument_signatures = [] - argument_group_signatures = [] - usage = ('''\ - usage: PROG - ''') - help = usage - version = '' - - -class TestHelpSuppressUsage(HelpTestCase): - """Test that items can be suppressed in usage messages""" - - parser_signature = Sig(prog='PROG', usage=argparse.SUPPRESS) - argument_signatures = [ - Sig('--foo', help='foo help'), - Sig('spam', help='spam help'), - ] - argument_group_signatures = [] - help = '''\ - positional arguments: - spam spam help - - optional arguments: - -h, --help show this help message and exit - --foo FOO foo help - ''' - usage = '' - version = '' - - -class TestHelpSuppressOptional(HelpTestCase): - """Test that optional arguments can be suppressed in help messages""" - - parser_signature = Sig(prog='PROG', add_help=False) - argument_signatures = [ - Sig('--foo', help=argparse.SUPPRESS), - Sig('spam', help='spam help'), - ] - argument_group_signatures = [] - usage = '''\ - usage: PROG spam - ''' - help = usage + '''\ - - positional arguments: - spam spam help - ''' - version = '' - - -class TestHelpSuppressOptionalGroup(HelpTestCase): - """Test that optional groups can be suppressed in help messages""" - - parser_signature = Sig(prog='PROG') - argument_signatures = [ - Sig('--foo', help='foo help'), - Sig('spam', help='spam help'), - ] - argument_group_signatures = [ - (Sig('group'), [Sig('--bar', help=argparse.SUPPRESS)]), - ] - usage = '''\ - usage: PROG [-h] [--foo FOO] spam - ''' - help = usage + '''\ - - positional arguments: - spam spam help - - optional arguments: - -h, --help show this help message and exit - --foo FOO foo help - ''' - version = '' - - -class TestHelpSuppressPositional(HelpTestCase): - """Test that positional arguments can be suppressed in help messages""" - - parser_signature = Sig(prog='PROG') - argument_signatures = [ - Sig('--foo', help='foo help'), - Sig('spam', help=argparse.SUPPRESS), - ] - argument_group_signatures = [] - usage = '''\ - usage: PROG [-h] [--foo FOO] - ''' - help = usage + '''\ - - optional arguments: - -h, --help show this help message and exit - --foo FOO foo help - ''' - version = '' - - -class TestHelpRequiredOptional(HelpTestCase): - """Test that required options don't look optional""" - - parser_signature = Sig(prog='PROG') - argument_signatures = [ - Sig('--foo', required=True, help='foo help'), - ] - argument_group_signatures = [] - usage = '''\ - usage: PROG [-h] --foo FOO - ''' - help = usage + '''\ - - optional arguments: - -h, --help show this help message and exit - --foo FOO foo help - ''' - version = '' - - -class TestHelpAlternatePrefixChars(HelpTestCase): - """Test that options display with different prefix characters""" - - parser_signature = Sig(prog='PROG', prefix_chars='^;', add_help=False) - argument_signatures = [ - Sig('^^foo', action='store_true', help='foo help'), - Sig(';b', ';;bar', help='bar help'), - ] - argument_group_signatures = [] - usage = '''\ - usage: PROG [^^foo] [;b BAR] - ''' - help = usage + '''\ - - optional arguments: - ^^foo foo help - ;b BAR, ;;bar BAR bar help - ''' - version = '' - - -class TestHelpNoHelpOptional(HelpTestCase): - """Test that the --help argument can be suppressed help messages""" - - parser_signature = Sig(prog='PROG', add_help=False) - argument_signatures = [ - Sig('--foo', help='foo help'), - Sig('spam', help='spam help'), - ] - argument_group_signatures = [] - usage = '''\ - usage: PROG [--foo FOO] spam - ''' - help = usage + '''\ - - positional arguments: - spam spam help - - optional arguments: - --foo FOO foo help - ''' - version = '' - - -class TestHelpVersionOptional(HelpTestCase): - """Test that the --version argument can be suppressed help messages""" - - parser_signature = Sig(prog='PROG', version='1.0') - argument_signatures = [ - Sig('--foo', help='foo help'), - Sig('spam', help='spam help'), - ] - argument_group_signatures = [] - usage = '''\ - usage: PROG [-h] [-v] [--foo FOO] spam - ''' - help = usage + '''\ - - positional arguments: - spam spam help - - optional arguments: - -h, --help show this help message and exit - -v, --version show program's version number and exit - --foo FOO foo help - ''' - version = '''\ - 1.0 - ''' - - -class TestHelpNone(HelpTestCase): - """Test that no errors occur if no help is specified""" - - parser_signature = Sig(prog='PROG') - argument_signatures = [ - Sig('--foo'), - Sig('spam'), - ] - argument_group_signatures = [] - usage = '''\ - usage: PROG [-h] [--foo FOO] spam - ''' - help = usage + '''\ - - positional arguments: - spam - - optional arguments: - -h, --help show this help message and exit - --foo FOO - ''' - version = '' - - -class TestHelpTupleMetavar(HelpTestCase): - """Test specifying metavar as a tuple""" - - parser_signature = Sig(prog='PROG') - argument_signatures = [ - Sig('-w', help='w', nargs='+', metavar=('W1', 'W2')), - Sig('-x', help='x', nargs='*', metavar=('X1', 'X2')), - Sig('-y', help='y', nargs=3, metavar=('Y1', 'Y2', 'Y3')), - Sig('-z', help='z', nargs='?', metavar=('Z1', )), - ] - argument_group_signatures = [] - usage = '''\ - usage: PROG [-h] [-w W1 [W2 ...]] [-x [X1 [X2 ...]]] [-y Y1 Y2 Y3] \ -[-z [Z1]] - ''' - help = usage + '''\ - - optional arguments: - -h, --help show this help message and exit - -w W1 [W2 ...] w - -x [X1 [X2 ...]] x - -y Y1 Y2 Y3 y - -z [Z1] z - ''' - version = '' - - -class TestHelpRawText(HelpTestCase): - """Test the RawTextHelpFormatter""" - - parser_signature = Sig( - prog='PROG', formatter_class=argparse.RawTextHelpFormatter, - description='Keep the formatting\n' - ' exactly as it is written\n' - '\n' - 'here\n') - - argument_signatures = [ - Sig('--foo', help=' foo help should also\n' - 'appear as given here'), - Sig('spam', help='spam help'), - ] - argument_group_signatures = [ - (Sig('title', description=' This text\n' - ' should be indented\n' - ' exactly like it is here\n'), - [Sig('--bar', help='bar help')]), - ] - usage = '''\ - usage: PROG [-h] [--foo FOO] [--bar BAR] spam - ''' - help = usage + '''\ - - Keep the formatting - exactly as it is written - - here - - positional arguments: - spam spam help - - optional arguments: - -h, --help show this help message and exit - --foo FOO foo help should also - appear as given here - - title: - This text - should be indented - exactly like it is here - - --bar BAR bar help - ''' - version = '' - - -class TestHelpRawDescription(HelpTestCase): - """Test the RawTextHelpFormatter""" - - parser_signature = Sig( - prog='PROG', formatter_class=argparse.RawDescriptionHelpFormatter, - description='Keep the formatting\n' - ' exactly as it is written\n' - '\n' - 'here\n') - - argument_signatures = [ - Sig('--foo', help=' foo help should not\n' - ' retain this odd formatting'), - Sig('spam', help='spam help'), - ] - argument_group_signatures = [ - (Sig('title', description=' This text\n' - ' should be indented\n' - ' exactly like it is here\n'), - [Sig('--bar', help='bar help')]), - ] - usage = '''\ - usage: PROG [-h] [--foo FOO] [--bar BAR] spam - ''' - help = usage + '''\ - - Keep the formatting - exactly as it is written - - here - - positional arguments: - spam spam help - - optional arguments: - -h, --help show this help message and exit - --foo FOO foo help should not retain this odd formatting - - title: - This text - should be indented - exactly like it is here - - --bar BAR bar help - ''' - version = '' - - -class TestHelpArgumentDefaults(HelpTestCase): - """Test the ArgumentDefaultsHelpFormatter""" - - parser_signature = Sig( - prog='PROG', formatter_class=argparse.ArgumentDefaultsHelpFormatter, - description='description') - - argument_signatures = [ - Sig('--foo', help='foo help - oh and by the way, %(default)s'), - Sig('--bar', action='store_true', help='bar help'), - Sig('spam', help='spam help'), - Sig('badger', nargs='?', default='wooden', help='badger help'), - ] - argument_group_signatures = [ - (Sig('title', description='description'), - [Sig('--baz', type=int, default=42, help='baz help')]), - ] - usage = '''\ - usage: PROG [-h] [--foo FOO] [--bar] [--baz BAZ] spam [badger] - ''' - help = usage + '''\ - - description - - positional arguments: - spam spam help - badger badger help (default: wooden) - - optional arguments: - -h, --help show this help message and exit - --foo FOO foo help - oh and by the way, None - --bar bar help (default: False) - - title: - description - - --baz BAZ baz help (default: 42) - ''' - version = '' - -# ===================================== -# Optional/Positional constructor tests -# ===================================== - -class TestInvalidArgumentConstructors(TestCase): - """Test a bunch of invalid Argument constructors""" - - def assertTypeError(self, *args, **kwargs): - parser = argparse.ArgumentParser() - self.assertRaises(TypeError, parser.add_argument, - *args, **kwargs) - - def assertValueError(self, *args, **kwargs): - parser = argparse.ArgumentParser() - self.assertRaises(ValueError, parser.add_argument, - *args, **kwargs) - - def test_invalid_keyword_arguments(self): - self.assertTypeError('-x', bar=None) - self.assertTypeError('-y', callback='foo') - self.assertTypeError('-y', callback_args=()) - self.assertTypeError('-y', callback_kwargs={}) - - def test_missing_destination(self): - self.assertTypeError() - for action in ['append', 'store']: - self.assertTypeError(action=action) - - def test_invalid_option_strings(self): - self.assertValueError('--') - self.assertValueError('---') - - def test_invalid_type(self): - self.assertValueError('--foo', type='int') - - def test_invalid_action(self): - self.assertValueError('-x', action='foo') - self.assertValueError('foo', action='baz') - parser = argparse.ArgumentParser() - try: - parser.add_argument("--foo", action="store-true") - except ValueError: - e = sys.exc_info()[1] - expected = 'unknown action' - msg = 'expected %r, found %r' % (expected, e) - self.assertTrue(expected in str(e), msg) - - def test_multiple_dest(self): - parser = argparse.ArgumentParser() - parser.add_argument(dest='foo') - try: - parser.add_argument('bar', dest='baz') - except ValueError: - e = sys.exc_info()[1] - expected = 'dest supplied twice for positional argument' - msg = 'expected %r, found %r' % (expected, e) - self.assertTrue(expected in str(e), msg) - - def test_no_argument_actions(self): - for action in ['store_const', 'store_true', 'store_false', - 'append_const', 'count']: - for attrs in [dict(type=int), dict(nargs='+'), - dict(choices='ab')]: - self.assertTypeError('-x', action=action, **attrs) - - def test_no_argument_no_const_actions(self): - # options with zero arguments - for action in ['store_true', 'store_false', 'count']: - - # const is always disallowed - self.assertTypeError('-x', const='foo', action=action) - - # nargs is always disallowed - self.assertTypeError('-x', nargs='*', action=action) - - def test_more_than_one_argument_actions(self): - for action in ['store', 'append']: - - # nargs=0 is disallowed - self.assertValueError('-x', nargs=0, action=action) - self.assertValueError('spam', nargs=0, action=action) - - # const is disallowed with non-optional arguments - for nargs in [1, '*', '+']: - self.assertValueError('-x', const='foo', - nargs=nargs, action=action) - self.assertValueError('spam', const='foo', - nargs=nargs, action=action) - - def test_required_const_actions(self): - for action in ['store_const', 'append_const']: - - # nargs is always disallowed - self.assertTypeError('-x', nargs='+', action=action) - - def test_parsers_action_missing_params(self): - self.assertTypeError('command', action='parsers') - self.assertTypeError('command', action='parsers', prog='PROG') - self.assertTypeError('command', action='parsers', - parser_class=argparse.ArgumentParser) - - def test_required_positional(self): - self.assertTypeError('foo', required=True) - - def test_user_defined_action(self): - - class Success(Exception): - pass - - class Action(object): - - def __init__(self, - option_strings, - dest, - const, - default, - required=False): - if dest == 'spam': - if const is Success: - if default is Success: - raise Success() - - def __call__(self, *args, **kwargs): - pass - - parser = argparse.ArgumentParser() - self.assertRaises(Success, parser.add_argument, '--spam', - action=Action, default=Success, const=Success) - self.assertRaises(Success, parser.add_argument, 'spam', - action=Action, default=Success, const=Success) - -# ================================ -# Actions returned by add_argument -# ================================ - -class TestActionsReturned(TestCase): - - def test_dest(self): - parser = argparse.ArgumentParser() - action = parser.add_argument('--foo') - self.assertEqual(action.dest, 'foo') - action = parser.add_argument('-b', '--bar') - self.assertEqual(action.dest, 'bar') - action = parser.add_argument('-x', '-y') - self.assertEqual(action.dest, 'x') - - def test_misc(self): - parser = argparse.ArgumentParser() - action = parser.add_argument('--foo', nargs='?', const=42, - default=84, type=int, choices=[1, 2], - help='FOO', metavar='BAR', dest='baz') - self.assertEqual(action.nargs, '?') - self.assertEqual(action.const, 42) - self.assertEqual(action.default, 84) - self.assertEqual(action.type, int) - self.assertEqual(action.choices, [1, 2]) - self.assertEqual(action.help, 'FOO') - self.assertEqual(action.metavar, 'BAR') - self.assertEqual(action.dest, 'baz') - - -# ================================ -# Argument conflict handling tests -# ================================ - -class TestConflictHandling(TestCase): - - def test_bad_type(self): - self.assertRaises(ValueError, argparse.ArgumentParser, - conflict_handler='foo') - - def test_conflict_error(self): - parser = argparse.ArgumentParser() - parser.add_argument('-x') - self.assertRaises(argparse.ArgumentError, - parser.add_argument, '-x') - parser.add_argument('--spam') - self.assertRaises(argparse.ArgumentError, - parser.add_argument, '--spam') - - def test_resolve_error(self): - get_parser = argparse.ArgumentParser - parser = get_parser(prog='PROG', conflict_handler='resolve') - - parser.add_argument('-x', help='OLD X') - parser.add_argument('-x', help='NEW X') - self.assertEqual(parser.format_help(), textwrap.dedent('''\ - usage: PROG [-h] [-x X] - - optional arguments: - -h, --help show this help message and exit - -x X NEW X - ''')) - - parser.add_argument('--spam', metavar='OLD_SPAM') - parser.add_argument('--spam', metavar='NEW_SPAM') - self.assertEqual(parser.format_help(), textwrap.dedent('''\ - usage: PROG [-h] [-x X] [--spam NEW_SPAM] - - optional arguments: - -h, --help show this help message and exit - -x X NEW X - --spam NEW_SPAM - ''')) - - -# ============================= -# Help and Version option tests -# ============================= - -class TestOptionalsHelpVersionActions(TestCase): - """Test the help and version actions""" - - def _get_error(self, func, *args, **kwargs): - try: - func(*args, **kwargs) - except ArgumentParserError: - return sys.exc_info()[1] - else: - self.assertRaises(ArgumentParserError, func, *args, **kwargs) - - def assertPrintHelpExit(self, parser, args_str): - self.assertEqual( - parser.format_help(), - self._get_error(parser.parse_args, args_str.split()).stdout) - - def assertPrintVersionExit(self, parser, args_str): - self.assertEqual( - parser.format_version(), - self._get_error(parser.parse_args, args_str.split()).stderr) - - def assertArgumentParserError(self, parser, *args): - self.assertRaises(ArgumentParserError, parser.parse_args, args) - - def test_version(self): - parser = ErrorRaisingArgumentParser(version='1.0') - self.assertPrintHelpExit(parser, '-h') - self.assertPrintHelpExit(parser, '--help') - self.assertPrintVersionExit(parser, '-v') - self.assertPrintVersionExit(parser, '--version') - - def test_version_format(self): - parser = ErrorRaisingArgumentParser(prog='PPP', version='%(prog)s 3.5') - msg = self._get_error(parser.parse_args, ['-v']).stderr - self.assertEqual('PPP 3.5\n', msg) - - def test_version_no_help(self): - parser = ErrorRaisingArgumentParser(add_help=False, version='1.0') - self.assertArgumentParserError(parser, '-h') - self.assertArgumentParserError(parser, '--help') - self.assertPrintVersionExit(parser, '-v') - self.assertPrintVersionExit(parser, '--version') - - def test_version_action(self): - parser = ErrorRaisingArgumentParser(prog='XXX') - parser.add_argument('-V', action='version', version='%(prog)s 3.7') - msg = self._get_error(parser.parse_args, ['-V']).stderr - self.assertEqual('XXX 3.7\n', msg) - - def test_no_help(self): - parser = ErrorRaisingArgumentParser(add_help=False) - self.assertArgumentParserError(parser, '-h') - self.assertArgumentParserError(parser, '--help') - self.assertArgumentParserError(parser, '-v') - self.assertArgumentParserError(parser, '--version') - - def test_alternate_help_version(self): - parser = ErrorRaisingArgumentParser() - parser.add_argument('-x', action='help') - parser.add_argument('-y', action='version') - self.assertPrintHelpExit(parser, '-x') - self.assertPrintVersionExit(parser, '-y') - self.assertArgumentParserError(parser, '-v') - self.assertArgumentParserError(parser, '--version') - - def test_help_version_extra_arguments(self): - parser = ErrorRaisingArgumentParser(version='1.0') - parser.add_argument('-x', action='store_true') - parser.add_argument('y') - - # try all combinations of valid prefixes and suffixes - valid_prefixes = ['', '-x', 'foo', '-x bar', 'baz -x'] - valid_suffixes = valid_prefixes + ['--bad-option', 'foo bar baz'] - for prefix in valid_prefixes: - for suffix in valid_suffixes: - format = '%s %%s %s' % (prefix, suffix) - self.assertPrintHelpExit(parser, format % '-h') - self.assertPrintHelpExit(parser, format % '--help') - self.assertPrintVersionExit(parser, format % '-v') - self.assertPrintVersionExit(parser, format % '--version') - - -# ====================== -# str() and repr() tests -# ====================== - -class TestStrings(TestCase): - """Test str() and repr() on Optionals and Positionals""" - - def assertStringEqual(self, obj, result_string): - for func in [str, repr]: - self.assertEqual(func(obj), result_string) - - def test_optional(self): - option = argparse.Action( - option_strings=['--foo', '-a', '-b'], - dest='b', - type='int', - nargs='+', - default=42, - choices=[1, 2, 3], - help='HELP', - metavar='METAVAR') - string = ( - "Action(option_strings=['--foo', '-a', '-b'], dest='b', " - "nargs='+', const=None, default=42, type='int', " - "choices=[1, 2, 3], help='HELP', metavar='METAVAR')") - self.assertStringEqual(option, string) - - def test_argument(self): - argument = argparse.Action( - option_strings=[], - dest='x', - type=float, - nargs='?', - default=2.5, - choices=[0.5, 1.5, 2.5], - help='H HH H', - metavar='MV MV MV') - string = ( - "Action(option_strings=[], dest='x', nargs='?', " - "const=None, default=2.5, type=%r, choices=[0.5, 1.5, 2.5], " - "help='H HH H', metavar='MV MV MV')" % float) - self.assertStringEqual(argument, string) - - def test_namespace(self): - ns = argparse.Namespace(foo=42, bar='spam') - string = "Namespace(bar='spam', foo=42)" - self.assertStringEqual(ns, string) - - def test_parser(self): - parser = argparse.ArgumentParser(prog='PROG') - string = ( - "ArgumentParser(prog='PROG', usage=None, description=None, " - "version=None, formatter_class=%r, conflict_handler='error', " - "add_help=True)" % argparse.HelpFormatter) - self.assertStringEqual(parser, string) - -# =============== -# Namespace tests -# =============== - -class TestNamespace(TestCase): - - def test_constructor(self): - ns = argparse.Namespace() - self.assertRaises(AttributeError, getattr, ns, 'x') - - ns = argparse.Namespace(a=42, b='spam') - self.assertEqual(ns.a, 42) - self.assertEqual(ns.b, 'spam') - - def test_equality(self): - ns1 = argparse.Namespace(a=1, b=2) - ns2 = argparse.Namespace(b=2, a=1) - ns3 = argparse.Namespace(a=1) - ns4 = argparse.Namespace(b=2) - - self.assertEqual(ns1, ns2) - self.assertNotEqual(ns1, ns3) - self.assertNotEqual(ns1, ns4) - self.assertNotEqual(ns2, ns3) - self.assertNotEqual(ns2, ns4) - self.assertTrue(ns1 != ns3) - self.assertTrue(ns1 != ns4) - self.assertTrue(ns2 != ns3) - self.assertTrue(ns2 != ns4) - - -# =================== -# File encoding tests -# =================== - -class TestEncoding(TestCase): - - def _test_module_encoding(self, path): - path, _ = os.path.splitext(path) - path += ".py" - codecs.open(path, 'r', 'utf8').read() - - def test_argparse_module_encoding(self): - self._test_module_encoding(argparse.__file__) - - def test_test_argparse_module_encoding(self): - self._test_module_encoding(__file__) - -# =================== -# ArgumentError tests -# =================== - -class TestArgumentError(TestCase): - - def test_argument_error(self): - msg = "my error here" - error = argparse.ArgumentError(None, msg) - self.assertEqual(str(error), msg) - -# ======================= -# ArgumentTypeError tests -# ======================= - -class TestArgumentError(TestCase): - - def test_argument_type_error(self): - - def spam(string): - raise argparse.ArgumentTypeError('spam!') - - parser = ErrorRaisingArgumentParser(prog='PROG', add_help=False) - parser.add_argument('x', type=spam) - try: - parser.parse_args(['XXX']) - except ArgumentParserError: - expected = 'usage: PROG x\nPROG: error: argument x: spam!\n' - msg = sys.exc_info()[1].stderr - self.assertEqual(expected, msg) - else: - self.fail() - -# ====================== -# parse_known_args tests -# ====================== - -class TestParseKnownArgs(TestCase): - - def test_optionals(self): - parser = argparse.ArgumentParser() - parser.add_argument('--foo') - args, extras = parser.parse_known_args('--foo F --bar --baz'.split()) - self.assertEqual(NS(foo='F'), args) - self.assertEqual(['--bar', '--baz'], extras) - - def test_mixed(self): - parser = argparse.ArgumentParser() - parser.add_argument('-v', nargs='?', const=1, type=int) - parser.add_argument('--spam', action='store_false') - parser.add_argument('badger') - - argv = ["B", "C", "--foo", "-v", "3", "4"] - args, extras = parser.parse_known_args(argv) - self.assertEqual(NS(v=3, spam=True, badger="B"), args) - self.assertEqual(["C", "--foo", "4"], extras) - -# ============================ -# from argparse import * tests -# ============================ - -class TestImportStar(TestCase): - - def test(self): - for name in argparse.__all__: - self.assertTrue(hasattr(argparse, name)) - - -if __name__ == '__main__': - unittest.main() +# Copyright 2006-2009 Steven J. Bethard . +# +# Licensed under the Apache License, Version 2.0 (the "License"); you may not +# use this file except in compliance with the License. You may obtain a copy +# of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT +# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the +# License for the specific language governing permissions and limitations +# under the License. + +import codecs +import os +import shutil +import sys +import textwrap +import tempfile +import unittest +import warnings +import argparse + +from test import support + +try: + from StringIO import StringIO +except ImportError: + from io import StringIO + +try: + set +except NameError: + from sets import Set as set + +try: + sorted +except NameError: + + def sorted(iterable, reverse=False): + result = list(iterable) + result.sort() + if reverse: + result.reverse() + return result + + +class TestCase(unittest.TestCase): + + def assertEqual(self, obj1, obj2): + if obj1 != obj2: + print('') + print(repr(obj1)) + print(repr(obj2)) + print(obj1) + print(obj2) + super(TestCase, self).assertEqual(obj1, obj2) + + +class TempDirMixin(object): + + def setUp(self): + self.temp_dir = tempfile.mkdtemp() + self.old_dir = os.getcwd() + os.chdir(self.temp_dir) + + def tearDown(self): + os.chdir(self.old_dir) + while True: + try: + shutil.rmtree(self.temp_dir) + except WindowsError: + continue + else: + break + + +class Sig(object): + + def __init__(self, *args, **kwargs): + self.args = args + self.kwargs = kwargs + + +class NS(object): + + def __init__(self, **kwargs): + self.__dict__.update(kwargs) + + def __repr__(self): + sorted_items = sorted(self.__dict__.items()) + kwarg_str = ', '.join(['%s=%r' % tup for tup in sorted_items]) + return '%s(%s)' % (type(self).__name__, kwarg_str) + + def __eq__(self, other): + return vars(self) == vars(other) + + def __ne__(self, other): + return not (self == other) + + +class ArgumentParserError(Exception): + + def __init__(self, message, stdout=None, stderr=None, error_code=None): + Exception.__init__(self, message, stdout, stderr) + self.message = message + self.stdout = stdout + self.stderr = stderr + self.error_code = error_code + + +def stderr_to_parser_error(parse_args, *args, **kwargs): + # if this is being called recursively and stderr or stdout is already being + # redirected, simply call the function and let the enclosing function + # catch the exception + if isinstance(sys.stderr, StringIO) or isinstance(sys.stdout, StringIO): + return parse_args(*args, **kwargs) + + # if this is not being called recursively, redirect stderr and + # use it as the ArgumentParserError message + old_stdout = sys.stdout + old_stderr = sys.stderr + sys.stdout = StringIO() + sys.stderr = StringIO() + try: + try: + result = parse_args(*args, **kwargs) + for key in list(vars(result)): + if getattr(result, key) is sys.stdout: + setattr(result, key, old_stdout) + if getattr(result, key) is sys.stderr: + setattr(result, key, old_stderr) + return result + except SystemExit: + code = sys.exc_info()[1].code + stdout = sys.stdout.getvalue() + stderr = sys.stderr.getvalue() + raise ArgumentParserError("SystemExit", stdout, stderr, code) + finally: + sys.stdout = old_stdout + sys.stderr = old_stderr + + +class ErrorRaisingArgumentParser(argparse.ArgumentParser): + + def parse_args(self, *args, **kwargs): + parse_args = super(ErrorRaisingArgumentParser, self).parse_args + return stderr_to_parser_error(parse_args, *args, **kwargs) + + def exit(self, *args, **kwargs): + exit = super(ErrorRaisingArgumentParser, self).exit + return stderr_to_parser_error(exit, *args, **kwargs) + + def error(self, *args, **kwargs): + error = super(ErrorRaisingArgumentParser, self).error + return stderr_to_parser_error(error, *args, **kwargs) + + +class ParserTesterMetaclass(type): + """Adds parser tests using the class attributes. + + Classes of this type should specify the following attributes: + + argument_signatures -- a list of Sig objects which specify + the signatures of Argument objects to be created + failures -- a list of args lists that should cause the parser + to fail + successes -- a list of (initial_args, options, remaining_args) tuples + where initial_args specifies the string args to be parsed, + options is a dict that should match the vars() of the options + parsed out of initial_args, and remaining_args should be any + remaining unparsed arguments + """ + + def __init__(cls, name, bases, bodydict): + if name == 'ParserTestCase': + return + + # default parser signature is empty + if not hasattr(cls, 'parser_signature'): + cls.parser_signature = Sig() + if not hasattr(cls, 'parser_class'): + cls.parser_class = ErrorRaisingArgumentParser + + # --------------------------------------- + # functions for adding optional arguments + # --------------------------------------- + def no_groups(parser, argument_signatures): + """Add all arguments directly to the parser""" + for sig in argument_signatures: + parser.add_argument(*sig.args, **sig.kwargs) + + def one_group(parser, argument_signatures): + """Add all arguments under a single group in the parser""" + group = parser.add_argument_group('foo') + for sig in argument_signatures: + group.add_argument(*sig.args, **sig.kwargs) + + def many_groups(parser, argument_signatures): + """Add each argument in its own group to the parser""" + for i, sig in enumerate(argument_signatures): + group = parser.add_argument_group('foo:%i' % i) + group.add_argument(*sig.args, **sig.kwargs) + + # -------------------------- + # functions for parsing args + # -------------------------- + def listargs(parser, args): + """Parse the args by passing in a list""" + return parser.parse_args(args) + + def sysargs(parser, args): + """Parse the args by defaulting to sys.argv""" + old_sys_argv = sys.argv + sys.argv = [old_sys_argv[0]] + args + try: + return parser.parse_args() + finally: + sys.argv = old_sys_argv + + # class that holds the combination of one optional argument + # addition method and one arg parsing method + class AddTests(object): + + def __init__(self, tester_cls, add_arguments, parse_args): + self._add_arguments = add_arguments + self._parse_args = parse_args + + add_arguments_name = self._add_arguments.__name__ + parse_args_name = self._parse_args.__name__ + for test_func in [self.test_failures, self.test_successes]: + func_name = test_func.__name__ + names = func_name, add_arguments_name, parse_args_name + test_name = '_'.join(names) + + def wrapper(self, test_func=test_func): + test_func(self) + try: + wrapper.__name__ = test_name + except TypeError: + pass + setattr(tester_cls, test_name, wrapper) + + def _get_parser(self, tester): + args = tester.parser_signature.args + kwargs = tester.parser_signature.kwargs + parser = tester.parser_class(*args, **kwargs) + self._add_arguments(parser, tester.argument_signatures) + return parser + + def test_failures(self, tester): + parser = self._get_parser(tester) + for args_str in tester.failures: + args = args_str.split() + raises = tester.assertRaises + raises(ArgumentParserError, parser.parse_args, args) + + def test_successes(self, tester): + parser = self._get_parser(tester) + for args, expected_ns in tester.successes: + if isinstance(args, str): + args = args.split() + result_ns = self._parse_args(parser, args) + tester.assertEqual(expected_ns, result_ns) + + # add tests for each combination of an optionals adding method + # and an arg parsing method + for add_arguments in [no_groups, one_group, many_groups]: + for parse_args in [listargs, sysargs]: + AddTests(cls, add_arguments, parse_args) + +bases = TestCase, +ParserTestCase = ParserTesterMetaclass('ParserTestCase', bases, {}) + +# =============== +# Optionals tests +# =============== + +class TestOptionalsSingleDash(ParserTestCase): + """Test an Optional with a single-dash option string""" + + argument_signatures = [Sig('-x')] + failures = ['-x', 'a', '--foo', '-x --foo', '-x -y'] + successes = [ + ('', NS(x=None)), + ('-x a', NS(x='a')), + ('-xa', NS(x='a')), + ('-x -1', NS(x='-1')), + ('-x-1', NS(x='-1')), + ] + + +class TestOptionalsSingleDashCombined(ParserTestCase): + """Test an Optional with a single-dash option string""" + + argument_signatures = [ + Sig('-x', action='store_true'), + Sig('-yyy', action='store_const', const=42), + Sig('-z'), + ] + failures = ['a', '--foo', '-xa', '-x --foo', '-x -z', '-z -x', + '-yx', '-yz a', '-yyyx', '-yyyza', '-xyza'] + successes = [ + ('', NS(x=False, yyy=None, z=None)), + ('-x', NS(x=True, yyy=None, z=None)), + ('-za', NS(x=False, yyy=None, z='a')), + ('-z a', NS(x=False, yyy=None, z='a')), + ('-xza', NS(x=True, yyy=None, z='a')), + ('-xz a', NS(x=True, yyy=None, z='a')), + ('-x -za', NS(x=True, yyy=None, z='a')), + ('-x -z a', NS(x=True, yyy=None, z='a')), + ('-y', NS(x=False, yyy=42, z=None)), + ('-yyy', NS(x=False, yyy=42, z=None)), + ('-x -yyy -za', NS(x=True, yyy=42, z='a')), + ('-x -yyy -z a', NS(x=True, yyy=42, z='a')), + ] + + +class TestOptionalsSingleDashLong(ParserTestCase): + """Test an Optional with a multi-character single-dash option string""" + + argument_signatures = [Sig('-foo')] + failures = ['-foo', 'a', '--foo', '-foo --foo', '-foo -y', '-fooa'] + successes = [ + ('', NS(foo=None)), + ('-foo a', NS(foo='a')), + ('-foo -1', NS(foo='-1')), + ('-fo a', NS(foo='a')), + ('-f a', NS(foo='a')), + ] + + +class TestOptionalsSingleDashSubsetAmbiguous(ParserTestCase): + """Test Optionals where option strings are subsets of each other""" + + argument_signatures = [Sig('-f'), Sig('-foobar'), Sig('-foorab')] + failures = ['-f', '-foo', '-fo', '-foo b', '-foob', '-fooba', '-foora'] + successes = [ + ('', NS(f=None, foobar=None, foorab=None)), + ('-f a', NS(f='a', foobar=None, foorab=None)), + ('-fa', NS(f='a', foobar=None, foorab=None)), + ('-foa', NS(f='oa', foobar=None, foorab=None)), + ('-fooa', NS(f='ooa', foobar=None, foorab=None)), + ('-foobar a', NS(f=None, foobar='a', foorab=None)), + ('-foorab a', NS(f=None, foobar=None, foorab='a')), + ] + + +class TestOptionalsSingleDashAmbiguous(ParserTestCase): + """Test Optionals that partially match but are not subsets""" + + argument_signatures = [Sig('-foobar'), Sig('-foorab')] + failures = ['-f', '-f a', '-fa', '-foa', '-foo', '-fo', '-foo b'] + successes = [ + ('', NS(foobar=None, foorab=None)), + ('-foob a', NS(foobar='a', foorab=None)), + ('-foor a', NS(foobar=None, foorab='a')), + ('-fooba a', NS(foobar='a', foorab=None)), + ('-foora a', NS(foobar=None, foorab='a')), + ('-foobar a', NS(foobar='a', foorab=None)), + ('-foorab a', NS(foobar=None, foorab='a')), + ] + + +class TestOptionalsNumeric(ParserTestCase): + """Test an Optional with a short opt string""" + + argument_signatures = [Sig('-1', dest='one')] + failures = ['-1', 'a', '-1 --foo', '-1 -y', '-1 -1', '-1 -2'] + successes = [ + ('', NS(one=None)), + ('-1 a', NS(one='a')), + ('-1a', NS(one='a')), + ('-1-2', NS(one='-2')), + ] + + +class TestOptionalsDoubleDash(ParserTestCase): + """Test an Optional with a double-dash option string""" + + argument_signatures = [Sig('--foo')] + failures = ['--foo', '-f', '-f a', 'a', '--foo -x', '--foo --bar'] + successes = [ + ('', NS(foo=None)), + ('--foo a', NS(foo='a')), + ('--foo=a', NS(foo='a')), + ('--foo -2.5', NS(foo='-2.5')), + ('--foo=-2.5', NS(foo='-2.5')), + ] + + +class TestOptionalsDoubleDashPartialMatch(ParserTestCase): + """Tests partial matching with a double-dash option string""" + + argument_signatures = [ + Sig('--badger', action='store_true'), + Sig('--bat'), + ] + failures = ['--bar', '--b', '--ba', '--b=2', '--ba=4', '--badge 5'] + successes = [ + ('', NS(badger=False, bat=None)), + ('--bat X', NS(badger=False, bat='X')), + ('--bad', NS(badger=True, bat=None)), + ('--badg', NS(badger=True, bat=None)), + ('--badge', NS(badger=True, bat=None)), + ('--badger', NS(badger=True, bat=None)), + ] + + +class TestOptionalsDoubleDashPrefixMatch(ParserTestCase): + """Tests when one double-dash option string is a prefix of another""" + + argument_signatures = [ + Sig('--badger', action='store_true'), + Sig('--ba'), + ] + failures = ['--bar', '--b', '--ba', '--b=2', '--badge 5'] + successes = [ + ('', NS(badger=False, ba=None)), + ('--ba X', NS(badger=False, ba='X')), + ('--ba=X', NS(badger=False, ba='X')), + ('--bad', NS(badger=True, ba=None)), + ('--badg', NS(badger=True, ba=None)), + ('--badge', NS(badger=True, ba=None)), + ('--badger', NS(badger=True, ba=None)), + ] + + +class TestOptionalsSingleDoubleDash(ParserTestCase): + """Test an Optional with single- and double-dash option strings""" + + argument_signatures = [ + Sig('-f', action='store_true'), + Sig('--bar'), + Sig('-baz', action='store_const', const=42), + ] + failures = ['--bar', '-fbar', '-fbaz', '-bazf', '-b B', 'B'] + successes = [ + ('', NS(f=False, bar=None, baz=None)), + ('-f', NS(f=True, bar=None, baz=None)), + ('--ba B', NS(f=False, bar='B', baz=None)), + ('-f --bar B', NS(f=True, bar='B', baz=None)), + ('-f -b', NS(f=True, bar=None, baz=42)), + ('-ba -f', NS(f=True, bar=None, baz=42)), + ] + + +class TestOptionalsAlternatePrefixChars(ParserTestCase): + """Test an Optional with a double-dash option string""" + + parser_signature = Sig(prefix_chars='+:/', add_help=False) + argument_signatures = [ + Sig('+f', action='store_true'), + Sig('::bar'), + Sig('/baz', action='store_const', const=42), + ] + failures = ['--bar', '-fbar', '-b B', 'B', '-f', '--bar B', '-baz'] + successes = [ + ('', NS(f=False, bar=None, baz=None)), + ('+f', NS(f=True, bar=None, baz=None)), + ('::ba B', NS(f=False, bar='B', baz=None)), + ('+f ::bar B', NS(f=True, bar='B', baz=None)), + ('+f /b', NS(f=True, bar=None, baz=42)), + ('/ba +f', NS(f=True, bar=None, baz=42)), + ] + + +class TestOptionalsShortLong(ParserTestCase): + """Test a combination of single- and double-dash option strings""" + + argument_signatures = [ + Sig('-v', '--verbose', '-n', '--noisy', action='store_true'), + ] + failures = ['--x --verbose', '-N', 'a', '-v x'] + successes = [ + ('', NS(verbose=False)), + ('-v', NS(verbose=True)), + ('--verbose', NS(verbose=True)), + ('-n', NS(verbose=True)), + ('--noisy', NS(verbose=True)), + ] + + +class TestOptionalsDest(ParserTestCase): + """Tests various means of setting destination""" + + argument_signatures = [Sig('--foo-bar'), Sig('--baz', dest='zabbaz')] + failures = ['a'] + successes = [ + ('--foo-bar f', NS(foo_bar='f', zabbaz=None)), + ('--baz g', NS(foo_bar=None, zabbaz='g')), + ('--foo-bar h --baz i', NS(foo_bar='h', zabbaz='i')), + ('--baz j --foo-bar k', NS(foo_bar='k', zabbaz='j')), + ] + + +class TestOptionalsDefault(ParserTestCase): + """Tests specifying a default for an Optional""" + + argument_signatures = [Sig('-x'), Sig('-y', default=42)] + failures = ['a'] + successes = [ + ('', NS(x=None, y=42)), + ('-xx', NS(x='x', y=42)), + ('-yy', NS(x=None, y='y')), + ] + + +class TestOptionalsNargsDefault(ParserTestCase): + """Tests not specifying the number of args for an Optional""" + + argument_signatures = [Sig('-x')] + failures = ['a', '-x'] + successes = [ + ('', NS(x=None)), + ('-x a', NS(x='a')), + ] + + +class TestOptionalsNargs1(ParserTestCase): + """Tests specifying the 1 arg for an Optional""" + + argument_signatures = [Sig('-x', nargs=1)] + failures = ['a', '-x'] + successes = [ + ('', NS(x=None)), + ('-x a', NS(x=['a'])), + ] + + +class TestOptionalsNargs3(ParserTestCase): + """Tests specifying the 3 args for an Optional""" + + argument_signatures = [Sig('-x', nargs=3)] + failures = ['a', '-x', '-x a', '-x a b', 'a -x', 'a -x b'] + successes = [ + ('', NS(x=None)), + ('-x a b c', NS(x=['a', 'b', 'c'])), + ] + + +class TestOptionalsNargsOptional(ParserTestCase): + """Tests specifying an Optional arg for an Optional""" + + argument_signatures = [ + Sig('-w', nargs='?'), + Sig('-x', nargs='?', const=42), + Sig('-y', nargs='?', default='spam'), + Sig('-z', nargs='?', type=int, const='42', default='84'), + ] + failures = ['2'] + successes = [ + ('', NS(w=None, x=None, y='spam', z=84)), + ('-w', NS(w=None, x=None, y='spam', z=84)), + ('-w 2', NS(w='2', x=None, y='spam', z=84)), + ('-x', NS(w=None, x=42, y='spam', z=84)), + ('-x 2', NS(w=None, x='2', y='spam', z=84)), + ('-y', NS(w=None, x=None, y=None, z=84)), + ('-y 2', NS(w=None, x=None, y='2', z=84)), + ('-z', NS(w=None, x=None, y='spam', z=42)), + ('-z 2', NS(w=None, x=None, y='spam', z=2)), + ] + + +class TestOptionalsNargsZeroOrMore(ParserTestCase): + """Tests specifying an args for an Optional that accepts zero or more""" + + argument_signatures = [ + Sig('-x', nargs='*'), + Sig('-y', nargs='*', default='spam'), + ] + failures = ['a'] + successes = [ + ('', NS(x=None, y='spam')), + ('-x', NS(x=[], y='spam')), + ('-x a', NS(x=['a'], y='spam')), + ('-x a b', NS(x=['a', 'b'], y='spam')), + ('-y', NS(x=None, y=[])), + ('-y a', NS(x=None, y=['a'])), + ('-y a b', NS(x=None, y=['a', 'b'])), + ] + + +class TestOptionalsNargsOneOrMore(ParserTestCase): + """Tests specifying an args for an Optional that accepts one or more""" + + argument_signatures = [ + Sig('-x', nargs='+'), + Sig('-y', nargs='+', default='spam'), + ] + failures = ['a', '-x', '-y', 'a -x', 'a -y b'] + successes = [ + ('', NS(x=None, y='spam')), + ('-x a', NS(x=['a'], y='spam')), + ('-x a b', NS(x=['a', 'b'], y='spam')), + ('-y a', NS(x=None, y=['a'])), + ('-y a b', NS(x=None, y=['a', 'b'])), + ] + + +class TestOptionalsChoices(ParserTestCase): + """Tests specifying the choices for an Optional""" + + argument_signatures = [ + Sig('-f', choices='abc'), + Sig('-g', type=int, choices=range(5))] + failures = ['a', '-f d', '-fad', '-ga', '-g 6'] + successes = [ + ('', NS(f=None, g=None)), + ('-f a', NS(f='a', g=None)), + ('-f c', NS(f='c', g=None)), + ('-g 0', NS(f=None, g=0)), + ('-g 03', NS(f=None, g=3)), + ('-fb -g4', NS(f='b', g=4)), + ] + + +class TestOptionalsRequired(ParserTestCase): + """Tests the an optional action that is required""" + + argument_signatures = [ + Sig('-x', type=int, required=True), + ] + failures = ['a', ''] + successes = [ + ('-x 1', NS(x=1)), + ('-x42', NS(x=42)), + ] + + +class TestOptionalsActionStore(ParserTestCase): + """Tests the store action for an Optional""" + + argument_signatures = [Sig('-x', action='store')] + failures = ['a', 'a -x'] + successes = [ + ('', NS(x=None)), + ('-xfoo', NS(x='foo')), + ] + + +class TestOptionalsActionStoreConst(ParserTestCase): + """Tests the store_const action for an Optional""" + + argument_signatures = [Sig('-y', action='store_const', const=object)] + failures = ['a'] + successes = [ + ('', NS(y=None)), + ('-y', NS(y=object)), + ] + + +class TestOptionalsActionStoreFalse(ParserTestCase): + """Tests the store_false action for an Optional""" + + argument_signatures = [Sig('-z', action='store_false')] + failures = ['a', '-za', '-z a'] + successes = [ + ('', NS(z=True)), + ('-z', NS(z=False)), + ] + + +class TestOptionalsActionStoreTrue(ParserTestCase): + """Tests the store_true action for an Optional""" + + argument_signatures = [Sig('--apple', action='store_true')] + failures = ['a', '--apple=b', '--apple b'] + successes = [ + ('', NS(apple=False)), + ('--apple', NS(apple=True)), + ] + + +class TestOptionalsActionAppend(ParserTestCase): + """Tests the append action for an Optional""" + + argument_signatures = [Sig('--baz', action='append')] + failures = ['a', '--baz', 'a --baz', '--baz a b'] + successes = [ + ('', NS(baz=None)), + ('--baz a', NS(baz=['a'])), + ('--baz a --baz b', NS(baz=['a', 'b'])), + ] + + +class TestOptionalsActionAppendWithDefault(ParserTestCase): + """Tests the append action for an Optional""" + + argument_signatures = [Sig('--baz', action='append', default=['X'])] + failures = ['a', '--baz', 'a --baz', '--baz a b'] + successes = [ + ('', NS(baz=['X'])), + ('--baz a', NS(baz=['X', 'a'])), + ('--baz a --baz b', NS(baz=['X', 'a', 'b'])), + ] + + +class TestOptionalsActionAppendConst(ParserTestCase): + """Tests the append_const action for an Optional""" + + argument_signatures = [ + Sig('-b', action='append_const', const=Exception), + Sig('-c', action='append', dest='b'), + ] + failures = ['a', '-c', 'a -c', '-bx', '-b x'] + successes = [ + ('', NS(b=None)), + ('-b', NS(b=[Exception])), + ('-b -cx -b -cyz', NS(b=[Exception, 'x', Exception, 'yz'])), + ] + + +class TestOptionalsActionAppendConstWithDefault(ParserTestCase): + """Tests the append_const action for an Optional""" + + argument_signatures = [ + Sig('-b', action='append_const', const=Exception, default=['X']), + Sig('-c', action='append', dest='b'), + ] + failures = ['a', '-c', 'a -c', '-bx', '-b x'] + successes = [ + ('', NS(b=['X'])), + ('-b', NS(b=['X', Exception])), + ('-b -cx -b -cyz', NS(b=['X', Exception, 'x', Exception, 'yz'])), + ] + + +class TestOptionalsActionCount(ParserTestCase): + """Tests the count action for an Optional""" + + argument_signatures = [Sig('-x', action='count')] + failures = ['a', '-x a', '-x b', '-x a -x b'] + successes = [ + ('', NS(x=None)), + ('-x', NS(x=1)), + ] + + +# ================ +# Positional tests +# ================ + +class TestPositionalsNargsNone(ParserTestCase): + """Test a Positional that doesn't specify nargs""" + + argument_signatures = [Sig('foo')] + failures = ['', '-x', 'a b'] + successes = [ + ('a', NS(foo='a')), + ] + + +class TestPositionalsNargs1(ParserTestCase): + """Test a Positional that specifies an nargs of 1""" + + argument_signatures = [Sig('foo', nargs=1)] + failures = ['', '-x', 'a b'] + successes = [ + ('a', NS(foo=['a'])), + ] + + +class TestPositionalsNargs2(ParserTestCase): + """Test a Positional that specifies an nargs of 2""" + + argument_signatures = [Sig('foo', nargs=2)] + failures = ['', 'a', '-x', 'a b c'] + successes = [ + ('a b', NS(foo=['a', 'b'])), + ] + + +class TestPositionalsNargsZeroOrMore(ParserTestCase): + """Test a Positional that specifies unlimited nargs""" + + argument_signatures = [Sig('foo', nargs='*')] + failures = ['-x'] + successes = [ + ('', NS(foo=[])), + ('a', NS(foo=['a'])), + ('a b', NS(foo=['a', 'b'])), + ] + + +class TestPositionalsNargsZeroOrMoreDefault(ParserTestCase): + """Test a Positional that specifies unlimited nargs and a default""" + + argument_signatures = [Sig('foo', nargs='*', default='bar')] + failures = ['-x'] + successes = [ + ('', NS(foo='bar')), + ('a', NS(foo=['a'])), + ('a b', NS(foo=['a', 'b'])), + ] + + +class TestPositionalsNargsOneOrMore(ParserTestCase): + """Test a Positional that specifies one or more nargs""" + + argument_signatures = [Sig('foo', nargs='+')] + failures = ['', '-x'] + successes = [ + ('a', NS(foo=['a'])), + ('a b', NS(foo=['a', 'b'])), + ] + + +class TestPositionalsNargsOptional(ParserTestCase): + """Tests an Optional Positional""" + + argument_signatures = [Sig('foo', nargs='?')] + failures = ['-x', 'a b'] + successes = [ + ('', NS(foo=None)), + ('a', NS(foo='a')), + ] + + +class TestPositionalsNargsOptionalDefault(ParserTestCase): + """Tests an Optional Positional with a default value""" + + argument_signatures = [Sig('foo', nargs='?', default=42)] + failures = ['-x', 'a b'] + successes = [ + ('', NS(foo=42)), + ('a', NS(foo='a')), + ] + + +class TestPositionalsNargsOptionalConvertedDefault(ParserTestCase): + """Tests an Optional Positional with a default value + that needs to be converted to the appropriate type. + """ + + argument_signatures = [ + Sig('foo', nargs='?', type=int, default='42'), + ] + failures = ['-x', 'a b', '1 2'] + successes = [ + ('', NS(foo=42)), + ('1', NS(foo=1)), + ] + + +class TestPositionalsNargsNoneNone(ParserTestCase): + """Test two Positionals that don't specify nargs""" + + argument_signatures = [Sig('foo'), Sig('bar')] + failures = ['', '-x', 'a', 'a b c'] + successes = [ + ('a b', NS(foo='a', bar='b')), + ] + + +class TestPositionalsNargsNone1(ParserTestCase): + """Test a Positional with no nargs followed by one with 1""" + + argument_signatures = [Sig('foo'), Sig('bar', nargs=1)] + failures = ['', '--foo', 'a', 'a b c'] + successes = [ + ('a b', NS(foo='a', bar=['b'])), + ] + + +class TestPositionalsNargs2None(ParserTestCase): + """Test a Positional with 2 nargs followed by one with none""" + + argument_signatures = [Sig('foo', nargs=2), Sig('bar')] + failures = ['', '--foo', 'a', 'a b', 'a b c d'] + successes = [ + ('a b c', NS(foo=['a', 'b'], bar='c')), + ] + + +class TestPositionalsNargsNoneZeroOrMore(ParserTestCase): + """Test a Positional with no nargs followed by one with unlimited""" + + argument_signatures = [Sig('foo'), Sig('bar', nargs='*')] + failures = ['', '--foo'] + successes = [ + ('a', NS(foo='a', bar=[])), + ('a b', NS(foo='a', bar=['b'])), + ('a b c', NS(foo='a', bar=['b', 'c'])), + ] + + +class TestPositionalsNargsNoneOneOrMore(ParserTestCase): + """Test a Positional with no nargs followed by one with one or more""" + + argument_signatures = [Sig('foo'), Sig('bar', nargs='+')] + failures = ['', '--foo', 'a'] + successes = [ + ('a b', NS(foo='a', bar=['b'])), + ('a b c', NS(foo='a', bar=['b', 'c'])), + ] + + +class TestPositionalsNargsNoneOptional(ParserTestCase): + """Test a Positional with no nargs followed by one with an Optional""" + + argument_signatures = [Sig('foo'), Sig('bar', nargs='?')] + failures = ['', '--foo', 'a b c'] + successes = [ + ('a', NS(foo='a', bar=None)), + ('a b', NS(foo='a', bar='b')), + ] + + +class TestPositionalsNargsZeroOrMoreNone(ParserTestCase): + """Test a Positional with unlimited nargs followed by one with none""" + + argument_signatures = [Sig('foo', nargs='*'), Sig('bar')] + failures = ['', '--foo'] + successes = [ + ('a', NS(foo=[], bar='a')), + ('a b', NS(foo=['a'], bar='b')), + ('a b c', NS(foo=['a', 'b'], bar='c')), + ] + + +class TestPositionalsNargsOneOrMoreNone(ParserTestCase): + """Test a Positional with one or more nargs followed by one with none""" + + argument_signatures = [Sig('foo', nargs='+'), Sig('bar')] + failures = ['', '--foo', 'a'] + successes = [ + ('a b', NS(foo=['a'], bar='b')), + ('a b c', NS(foo=['a', 'b'], bar='c')), + ] + + +class TestPositionalsNargsOptionalNone(ParserTestCase): + """Test a Positional with an Optional nargs followed by one with none""" + + argument_signatures = [Sig('foo', nargs='?', default=42), Sig('bar')] + failures = ['', '--foo', 'a b c'] + successes = [ + ('a', NS(foo=42, bar='a')), + ('a b', NS(foo='a', bar='b')), + ] + + +class TestPositionalsNargs2ZeroOrMore(ParserTestCase): + """Test a Positional with 2 nargs followed by one with unlimited""" + + argument_signatures = [Sig('foo', nargs=2), Sig('bar', nargs='*')] + failures = ['', '--foo', 'a'] + successes = [ + ('a b', NS(foo=['a', 'b'], bar=[])), + ('a b c', NS(foo=['a', 'b'], bar=['c'])), + ] + + +class TestPositionalsNargs2OneOrMore(ParserTestCase): + """Test a Positional with 2 nargs followed by one with one or more""" + + argument_signatures = [Sig('foo', nargs=2), Sig('bar', nargs='+')] + failures = ['', '--foo', 'a', 'a b'] + successes = [ + ('a b c', NS(foo=['a', 'b'], bar=['c'])), + ] + + +class TestPositionalsNargs2Optional(ParserTestCase): + """Test a Positional with 2 nargs followed by one optional""" + + argument_signatures = [Sig('foo', nargs=2), Sig('bar', nargs='?')] + failures = ['', '--foo', 'a', 'a b c d'] + successes = [ + ('a b', NS(foo=['a', 'b'], bar=None)), + ('a b c', NS(foo=['a', 'b'], bar='c')), + ] + + +class TestPositionalsNargsZeroOrMore1(ParserTestCase): + """Test a Positional with unlimited nargs followed by one with 1""" + + argument_signatures = [Sig('foo', nargs='*'), Sig('bar', nargs=1)] + failures = ['', '--foo', ] + successes = [ + ('a', NS(foo=[], bar=['a'])), + ('a b', NS(foo=['a'], bar=['b'])), + ('a b c', NS(foo=['a', 'b'], bar=['c'])), + ] + + +class TestPositionalsNargsOneOrMore1(ParserTestCase): + """Test a Positional with one or more nargs followed by one with 1""" + + argument_signatures = [Sig('foo', nargs='+'), Sig('bar', nargs=1)] + failures = ['', '--foo', 'a'] + successes = [ + ('a b', NS(foo=['a'], bar=['b'])), + ('a b c', NS(foo=['a', 'b'], bar=['c'])), + ] + + +class TestPositionalsNargsOptional1(ParserTestCase): + """Test a Positional with an Optional nargs followed by one with 1""" + + argument_signatures = [Sig('foo', nargs='?'), Sig('bar', nargs=1)] + failures = ['', '--foo', 'a b c'] + successes = [ + ('a', NS(foo=None, bar=['a'])), + ('a b', NS(foo='a', bar=['b'])), + ] + + +class TestPositionalsNargsNoneZeroOrMore1(ParserTestCase): + """Test three Positionals: no nargs, unlimited nargs and 1 nargs""" + + argument_signatures = [ + Sig('foo'), + Sig('bar', nargs='*'), + Sig('baz', nargs=1), + ] + failures = ['', '--foo', 'a'] + successes = [ + ('a b', NS(foo='a', bar=[], baz=['b'])), + ('a b c', NS(foo='a', bar=['b'], baz=['c'])), + ] + + +class TestPositionalsNargsNoneOneOrMore1(ParserTestCase): + """Test three Positionals: no nargs, one or more nargs and 1 nargs""" + + argument_signatures = [ + Sig('foo'), + Sig('bar', nargs='+'), + Sig('baz', nargs=1), + ] + failures = ['', '--foo', 'a', 'b'] + successes = [ + ('a b c', NS(foo='a', bar=['b'], baz=['c'])), + ('a b c d', NS(foo='a', bar=['b', 'c'], baz=['d'])), + ] + + +class TestPositionalsNargsNoneOptional1(ParserTestCase): + """Test three Positionals: no nargs, optional narg and 1 nargs""" + + argument_signatures = [ + Sig('foo'), + Sig('bar', nargs='?', default=0.625), + Sig('baz', nargs=1), + ] + failures = ['', '--foo', 'a'] + successes = [ + ('a b', NS(foo='a', bar=0.625, baz=['b'])), + ('a b c', NS(foo='a', bar='b', baz=['c'])), + ] + + +class TestPositionalsNargsOptionalOptional(ParserTestCase): + """Test two optional nargs""" + + argument_signatures = [ + Sig('foo', nargs='?'), + Sig('bar', nargs='?', default=42), + ] + failures = ['--foo', 'a b c'] + successes = [ + ('', NS(foo=None, bar=42)), + ('a', NS(foo='a', bar=42)), + ('a b', NS(foo='a', bar='b')), + ] + + +class TestPositionalsNargsOptionalZeroOrMore(ParserTestCase): + """Test an Optional narg followed by unlimited nargs""" + + argument_signatures = [Sig('foo', nargs='?'), Sig('bar', nargs='*')] + failures = ['--foo'] + successes = [ + ('', NS(foo=None, bar=[])), + ('a', NS(foo='a', bar=[])), + ('a b', NS(foo='a', bar=['b'])), + ('a b c', NS(foo='a', bar=['b', 'c'])), + ] + + +class TestPositionalsNargsOptionalOneOrMore(ParserTestCase): + """Test an Optional narg followed by one or more nargs""" + + argument_signatures = [Sig('foo', nargs='?'), Sig('bar', nargs='+')] + failures = ['', '--foo'] + successes = [ + ('a', NS(foo=None, bar=['a'])), + ('a b', NS(foo='a', bar=['b'])), + ('a b c', NS(foo='a', bar=['b', 'c'])), + ] + + +class TestPositionalsChoicesString(ParserTestCase): + """Test a set of single-character choices""" + + argument_signatures = [Sig('spam', choices=set('abcdefg'))] + failures = ['', '--foo', 'h', '42', 'ef'] + successes = [ + ('a', NS(spam='a')), + ('g', NS(spam='g')), + ] + + +class TestPositionalsChoicesInt(ParserTestCase): + """Test a set of integer choices""" + + argument_signatures = [Sig('spam', type=int, choices=range(20))] + failures = ['', '--foo', 'h', '42', 'ef'] + successes = [ + ('4', NS(spam=4)), + ('15', NS(spam=15)), + ] + + +class TestPositionalsActionAppend(ParserTestCase): + """Test the 'append' action""" + + argument_signatures = [ + Sig('spam', action='append'), + Sig('spam', action='append', nargs=2), + ] + failures = ['', '--foo', 'a', 'a b', 'a b c d'] + successes = [ + ('a b c', NS(spam=['a', ['b', 'c']])), + ] + +# ======================================== +# Combined optionals and positionals tests +# ======================================== + +class TestOptionalsNumericAndPositionals(ParserTestCase): + """Tests negative number args when numeric options are present""" + + argument_signatures = [ + Sig('x', nargs='?'), + Sig('-4', dest='y', action='store_true'), + ] + failures = ['-2', '-315'] + successes = [ + ('', NS(x=None, y=False)), + ('a', NS(x='a', y=False)), + ('-4', NS(x=None, y=True)), + ('-4 a', NS(x='a', y=True)), + ] + + +class TestOptionalsAlmostNumericAndPositionals(ParserTestCase): + """Tests negative number args when almost numeric options are present""" + + argument_signatures = [ + Sig('x', nargs='?'), + Sig('-k4', dest='y', action='store_true'), + ] + failures = ['-k3'] + successes = [ + ('', NS(x=None, y=False)), + ('-2', NS(x='-2', y=False)), + ('a', NS(x='a', y=False)), + ('-k4', NS(x=None, y=True)), + ('-k4 a', NS(x='a', y=True)), + ] + + +class TestEmptyAndSpaceContainingArguments(ParserTestCase): + + argument_signatures = [ + Sig('x', nargs='?'), + Sig('-y', '--yyy', dest='y'), + ] + failures = ['-y'] + successes = [ + ([''], NS(x='', y=None)), + (['a badger'], NS(x='a badger', y=None)), + (['-a badger'], NS(x='-a badger', y=None)), + (['-y', ''], NS(x=None, y='')), + (['-y', 'a badger'], NS(x=None, y='a badger')), + (['-y', '-a badger'], NS(x=None, y='-a badger')), + (['--yyy=a badger'], NS(x=None, y='a badger')), + (['--yyy=-a badger'], NS(x=None, y='-a badger')), + ] + + +class TestPrefixCharacterOnlyArguments(ParserTestCase): + + parser_signature = Sig(prefix_chars='-+') + argument_signatures = [ + Sig('-', dest='x', nargs='?', const='badger'), + Sig('+', dest='y', type=int, default=42), + Sig('-+-', dest='z', action='store_true'), + ] + failures = ['-y', '+ -'] + successes = [ + ('', NS(x=None, y=42, z=False)), + ('-', NS(x='badger', y=42, z=False)), + ('- X', NS(x='X', y=42, z=False)), + ('+ -3', NS(x=None, y=-3, z=False)), + ('-+-', NS(x=None, y=42, z=True)), + ('- ===', NS(x='===', y=42, z=False)), + ] + + +class TestNargsZeroOrMore(ParserTestCase): + """Tests specifying an args for an Optional that accepts zero or more""" + + argument_signatures = [Sig('-x', nargs='*'), Sig('y', nargs='*')] + failures = [] + successes = [ + ('', NS(x=None, y=[])), + ('-x', NS(x=[], y=[])), + ('-x a', NS(x=['a'], y=[])), + ('-x a -- b', NS(x=['a'], y=['b'])), + ('a', NS(x=None, y=['a'])), + ('a -x', NS(x=[], y=['a'])), + ('a -x b', NS(x=['b'], y=['a'])), + ] + + +class TestNargsRemainder(ParserTestCase): + """Tests specifying a positional with nargs=REMAINDER""" + + argument_signatures = [Sig('x'), Sig('y', nargs='...'), Sig('-z')] + failures = ['', '-z', '-z Z'] + successes = [ + ('X', NS(x='X', y=[], z=None)), + ('-z Z X', NS(x='X', y=[], z='Z')), + ('X A B -z Z', NS(x='X', y=['A', 'B', '-z', 'Z'], z=None)), + ('X Y --foo', NS(x='X', y=['Y', '--foo'], z=None)), + ] + + +class TestOptionLike(ParserTestCase): + """Tests options that may or may not be arguments""" + + argument_signatures = [ + Sig('-x', type=float), + Sig('-3', type=float, dest='y'), + Sig('z', nargs='*'), + ] + failures = ['-x', '-y2.5', '-xa', '-x -a', + '-x -3', '-x -3.5', '-3 -3.5', + '-x -2.5', '-x -2.5 a', '-3 -.5', + 'a x -1', '-x -1 a', '-3 -1 a'] + successes = [ + ('', NS(x=None, y=None, z=[])), + ('-x 2.5', NS(x=2.5, y=None, z=[])), + ('-x 2.5 a', NS(x=2.5, y=None, z=['a'])), + ('-3.5', NS(x=None, y=0.5, z=[])), + ('-3-.5', NS(x=None, y=-0.5, z=[])), + ('-3 .5', NS(x=None, y=0.5, z=[])), + ('a -3.5', NS(x=None, y=0.5, z=['a'])), + ('a', NS(x=None, y=None, z=['a'])), + ('a -x 1', NS(x=1.0, y=None, z=['a'])), + ('-x 1 a', NS(x=1.0, y=None, z=['a'])), + ('-3 1 a', NS(x=None, y=1.0, z=['a'])), + ] + + +class TestDefaultSuppress(ParserTestCase): + """Test actions with suppressed defaults""" + + argument_signatures = [ + Sig('foo', nargs='?', default=argparse.SUPPRESS), + Sig('bar', nargs='*', default=argparse.SUPPRESS), + Sig('--baz', action='store_true', default=argparse.SUPPRESS), + ] + failures = ['-x'] + successes = [ + ('', NS()), + ('a', NS(foo='a')), + ('a b', NS(foo='a', bar=['b'])), + ('--baz', NS(baz=True)), + ('a --baz', NS(foo='a', baz=True)), + ('--baz a b', NS(foo='a', bar=['b'], baz=True)), + ] + + +class TestParserDefaultSuppress(ParserTestCase): + """Test actions with a parser-level default of SUPPRESS""" + + parser_signature = Sig(argument_default=argparse.SUPPRESS) + argument_signatures = [ + Sig('foo', nargs='?'), + Sig('bar', nargs='*'), + Sig('--baz', action='store_true'), + ] + failures = ['-x'] + successes = [ + ('', NS()), + ('a', NS(foo='a')), + ('a b', NS(foo='a', bar=['b'])), + ('--baz', NS(baz=True)), + ('a --baz', NS(foo='a', baz=True)), + ('--baz a b', NS(foo='a', bar=['b'], baz=True)), + ] + + +class TestParserDefault42(ParserTestCase): + """Test actions with a parser-level default of 42""" + + parser_signature = Sig(argument_default=42, version='1.0') + argument_signatures = [ + Sig('foo', nargs='?'), + Sig('bar', nargs='*'), + Sig('--baz', action='store_true'), + ] + failures = ['-x'] + successes = [ + ('', NS(foo=42, bar=42, baz=42)), + ('a', NS(foo='a', bar=42, baz=42)), + ('a b', NS(foo='a', bar=['b'], baz=42)), + ('--baz', NS(foo=42, bar=42, baz=True)), + ('a --baz', NS(foo='a', bar=42, baz=True)), + ('--baz a b', NS(foo='a', bar=['b'], baz=True)), + ] + + +class TestArgumentsFromFile(TempDirMixin, ParserTestCase): + """Test reading arguments from a file""" + + def setUp(self): + super(TestArgumentsFromFile, self).setUp() + file_texts = [ + ('hello', 'hello world!\n'), + ('recursive', '-a\n' + 'A\n' + '@hello'), + ('invalid', '@no-such-path\n'), + ] + for path, text in file_texts: + file = open(path, 'w') + file.write(text) + file.close() + + parser_signature = Sig(fromfile_prefix_chars='@') + argument_signatures = [ + Sig('-a'), + Sig('x'), + Sig('y', nargs='+'), + ] + failures = ['', '-b', 'X', '@invalid', '@missing'] + successes = [ + ('X Y', NS(a=None, x='X', y=['Y'])), + ('X -a A Y Z', NS(a='A', x='X', y=['Y', 'Z'])), + ('@hello X', NS(a=None, x='hello world!', y=['X'])), + ('X @hello', NS(a=None, x='X', y=['hello world!'])), + ('-a B @recursive Y Z', NS(a='A', x='hello world!', y=['Y', 'Z'])), + ('X @recursive Z -a B', NS(a='B', x='X', y=['hello world!', 'Z'])), + ] + + +class TestArgumentsFromFileConverter(TempDirMixin, ParserTestCase): + """Test reading arguments from a file""" + + def setUp(self): + super(TestArgumentsFromFileConverter, self).setUp() + file_texts = [ + ('hello', 'hello world!\n'), + ] + for path, text in file_texts: + file = open(path, 'w') + file.write(text) + file.close() + + class FromFileConverterArgumentParser(ErrorRaisingArgumentParser): + + def convert_arg_line_to_args(self, arg_line): + for arg in arg_line.split(): + if not arg.strip(): + continue + yield arg + parser_class = FromFileConverterArgumentParser + parser_signature = Sig(fromfile_prefix_chars='@') + argument_signatures = [ + Sig('y', nargs='+'), + ] + failures = [] + successes = [ + ('@hello X', NS(y=['hello', 'world!', 'X'])), + ] + + +# ===================== +# Type conversion tests +# ===================== + +class TestFileTypeRepr(TestCase): + + def test_r(self): + type = argparse.FileType('r') + self.assertEqual("FileType('r')", repr(type)) + + def test_wb_1(self): + type = argparse.FileType('wb', 1) + self.assertEqual("FileType('wb', 1)", repr(type)) + + +class RFile(object): + seen = {} + + def __init__(self, name): + self.name = name + + def __eq__(self, other): + if other in self.seen: + text = self.seen[other] + else: + text = self.seen[other] = other.read() + other.close() + if not isinstance(text, str): + text = text.decode('ascii') + return self.name == other.name == text + + +class TestFileTypeR(TempDirMixin, ParserTestCase): + """Test the FileType option/argument type for reading files""" + + def setUp(self): + super(TestFileTypeR, self).setUp() + for file_name in ['foo', 'bar']: + file = open(os.path.join(self.temp_dir, file_name), 'w') + file.write(file_name) + file.close() + + argument_signatures = [ + Sig('-x', type=argparse.FileType()), + Sig('spam', type=argparse.FileType('r')), + ] + failures = ['-x', ''] + successes = [ + ('foo', NS(x=None, spam=RFile('foo'))), + ('-x foo bar', NS(x=RFile('foo'), spam=RFile('bar'))), + ('bar -x foo', NS(x=RFile('foo'), spam=RFile('bar'))), + ('-x - -', NS(x=sys.stdin, spam=sys.stdin)), + ] + + +class TestFileTypeRB(TempDirMixin, ParserTestCase): + """Test the FileType option/argument type for reading files""" + + def setUp(self): + super(TestFileTypeRB, self).setUp() + for file_name in ['foo', 'bar']: + file = open(os.path.join(self.temp_dir, file_name), 'w') + file.write(file_name) + file.close() + + argument_signatures = [ + Sig('-x', type=argparse.FileType('rb')), + Sig('spam', type=argparse.FileType('rb')), + ] + failures = ['-x', ''] + successes = [ + ('foo', NS(x=None, spam=RFile('foo'))), + ('-x foo bar', NS(x=RFile('foo'), spam=RFile('bar'))), + ('bar -x foo', NS(x=RFile('foo'), spam=RFile('bar'))), + ('-x - -', NS(x=sys.stdin, spam=sys.stdin)), + ] + + +class WFile(object): + seen = set() + + def __init__(self, name): + self.name = name + + def __eq__(self, other): + if other not in self.seen: + text = 'Check that file is writable.' + if 'b' in other.mode: + text = text.encode('ascii') + other.write(text) + other.close() + self.seen.add(other) + return self.name == other.name + + +class TestFileTypeW(TempDirMixin, ParserTestCase): + """Test the FileType option/argument type for writing files""" + + argument_signatures = [ + Sig('-x', type=argparse.FileType('w')), + Sig('spam', type=argparse.FileType('w')), + ] + failures = ['-x', ''] + successes = [ + ('foo', NS(x=None, spam=WFile('foo'))), + ('-x foo bar', NS(x=WFile('foo'), spam=WFile('bar'))), + ('bar -x foo', NS(x=WFile('foo'), spam=WFile('bar'))), + ('-x - -', NS(x=sys.stdout, spam=sys.stdout)), + ] + + +class TestFileTypeWB(TempDirMixin, ParserTestCase): + + argument_signatures = [ + Sig('-x', type=argparse.FileType('wb')), + Sig('spam', type=argparse.FileType('wb')), + ] + failures = ['-x', ''] + successes = [ + ('foo', NS(x=None, spam=WFile('foo'))), + ('-x foo bar', NS(x=WFile('foo'), spam=WFile('bar'))), + ('bar -x foo', NS(x=WFile('foo'), spam=WFile('bar'))), + ('-x - -', NS(x=sys.stdout, spam=sys.stdout)), + ] + + +class TestTypeCallable(ParserTestCase): + """Test some callables as option/argument types""" + + argument_signatures = [ + Sig('--eggs', type=complex), + Sig('spam', type=float), + ] + failures = ['a', '42j', '--eggs a', '--eggs 2i'] + successes = [ + ('--eggs=42 42', NS(eggs=42, spam=42.0)), + ('--eggs 2j -- -1.5', NS(eggs=2j, spam=-1.5)), + ('1024.675', NS(eggs=None, spam=1024.675)), + ] + + +class TestTypeUserDefined(ParserTestCase): + """Test a user-defined option/argument type""" + + class MyType(TestCase): + + def __init__(self, value): + self.value = value + + def __eq__(self, other): + return (type(self), self.value) == (type(other), other.value) + + argument_signatures = [ + Sig('-x', type=MyType), + Sig('spam', type=MyType), + ] + failures = [] + successes = [ + ('a -x b', NS(x=MyType('b'), spam=MyType('a'))), + ('-xf g', NS(x=MyType('f'), spam=MyType('g'))), + ] + + +class TestTypeClassicClass(ParserTestCase): + """Test a classic class type""" + + class C: + + def __init__(self, value): + self.value = value + + def __eq__(self, other): + return (type(self), self.value) == (type(other), other.value) + + argument_signatures = [ + Sig('-x', type=C), + Sig('spam', type=C), + ] + failures = [] + successes = [ + ('a -x b', NS(x=C('b'), spam=C('a'))), + ('-xf g', NS(x=C('f'), spam=C('g'))), + ] + + +class TestTypeRegistration(TestCase): + """Test a user-defined type by registering it""" + + def test(self): + + def get_my_type(string): + return 'my_type{%s}' % string + + parser = argparse.ArgumentParser() + parser.register('type', 'my_type', get_my_type) + parser.add_argument('-x', type='my_type') + parser.add_argument('y', type='my_type') + + self.assertEqual(parser.parse_args('1'.split()), + NS(x=None, y='my_type{1}')) + self.assertEqual(parser.parse_args('-x 1 42'.split()), + NS(x='my_type{1}', y='my_type{42}')) + + +# ============ +# Action tests +# ============ + +class TestActionUserDefined(ParserTestCase): + """Test a user-defined option/argument action""" + + class OptionalAction(argparse.Action): + + def __call__(self, parser, namespace, value, option_string=None): + try: + # check destination and option string + assert self.dest == 'spam', 'dest: %s' % self.dest + assert option_string == '-s', 'flag: %s' % option_string + # when option is before argument, badger=2, and when + # option is after argument, badger= + expected_ns = NS(spam=0.25) + if value in [0.125, 0.625]: + expected_ns.badger = 2 + elif value in [2.0]: + expected_ns.badger = 84 + else: + raise AssertionError('value: %s' % value) + assert expected_ns == namespace, ('expected %s, got %s' % + (expected_ns, namespace)) + except AssertionError: + e = sys.exc_info()[1] + raise ArgumentParserError('opt_action failed: %s' % e) + setattr(namespace, 'spam', value) + + class PositionalAction(argparse.Action): + + def __call__(self, parser, namespace, value, option_string=None): + try: + assert option_string is None, ('option_string: %s' % + option_string) + # check destination + assert self.dest == 'badger', 'dest: %s' % self.dest + # when argument is before option, spam=0.25, and when + # option is after argument, spam= + expected_ns = NS(badger=2) + if value in [42, 84]: + expected_ns.spam = 0.25 + elif value in [1]: + expected_ns.spam = 0.625 + elif value in [2]: + expected_ns.spam = 0.125 + else: + raise AssertionError('value: %s' % value) + assert expected_ns == namespace, ('expected %s, got %s' % + (expected_ns, namespace)) + except AssertionError: + e = sys.exc_info()[1] + raise ArgumentParserError('arg_action failed: %s' % e) + setattr(namespace, 'badger', value) + + argument_signatures = [ + Sig('-s', dest='spam', action=OptionalAction, + type=float, default=0.25), + Sig('badger', action=PositionalAction, + type=int, nargs='?', default=2), + ] + failures = [] + successes = [ + ('-s0.125', NS(spam=0.125, badger=2)), + ('42', NS(spam=0.25, badger=42)), + ('-s 0.625 1', NS(spam=0.625, badger=1)), + ('84 -s2', NS(spam=2.0, badger=84)), + ] + + +class TestActionRegistration(TestCase): + """Test a user-defined action supplied by registering it""" + + class MyAction(argparse.Action): + + def __call__(self, parser, namespace, values, option_string=None): + setattr(namespace, self.dest, 'foo[%s]' % values) + + def test(self): + + parser = argparse.ArgumentParser() + parser.register('action', 'my_action', self.MyAction) + parser.add_argument('badger', action='my_action') + + self.assertEqual(parser.parse_args(['1']), NS(badger='foo[1]')) + self.assertEqual(parser.parse_args(['42']), NS(badger='foo[42]')) + + +# ================ +# Subparsers tests +# ================ + +class TestAddSubparsers(TestCase): + """Test the add_subparsers method""" + + def assertArgumentParserError(self, *args, **kwargs): + self.assertRaises(ArgumentParserError, *args, **kwargs) + + def _get_parser(self, subparser_help=False): + # create a parser with a subparsers argument + parser = ErrorRaisingArgumentParser( + prog='PROG', description='main description') + parser.add_argument( + '--foo', action='store_true', help='foo help') + parser.add_argument( + 'bar', type=float, help='bar help') + + # check that only one subparsers argument can be added + subparsers = parser.add_subparsers(help='command help') + self.assertArgumentParserError(parser.add_subparsers) + + # add first sub-parser + parser1_kwargs = dict(description='1 description') + if subparser_help: + parser1_kwargs['help'] = '1 help' + parser1 = subparsers.add_parser('1', **parser1_kwargs) + parser1.add_argument('-w', type=int, help='w help') + parser1.add_argument('x', choices='abc', help='x help') + + # add second sub-parser + parser2_kwargs = dict(description='2 description') + if subparser_help: + parser2_kwargs['help'] = '2 help' + parser2 = subparsers.add_parser('2', **parser2_kwargs) + parser2.add_argument('-y', choices='123', help='y help') + parser2.add_argument('z', type=complex, nargs='*', help='z help') + + # return the main parser + return parser + + def setUp(self): + self.parser = self._get_parser() + self.command_help_parser = self._get_parser(subparser_help=True) + + def test_parse_args_failures(self): + # check some failure cases: + for args_str in ['', 'a', 'a a', '0.5 a', '0.5 1', + '0.5 1 -y', '0.5 2 -w']: + args = args_str.split() + self.assertArgumentParserError(self.parser.parse_args, args) + + def test_parse_args(self): + # check some non-failure cases: + self.assertEqual( + self.parser.parse_args('0.5 1 b -w 7'.split()), + NS(foo=False, bar=0.5, w=7, x='b'), + ) + self.assertEqual( + self.parser.parse_args('0.25 --foo 2 -y 2 3j -- -1j'.split()), + NS(foo=True, bar=0.25, y='2', z=[3j, -1j]), + ) + self.assertEqual( + self.parser.parse_args('--foo 0.125 1 c'.split()), + NS(foo=True, bar=0.125, w=None, x='c'), + ) + + def test_dest(self): + parser = ErrorRaisingArgumentParser() + parser.add_argument('--foo', action='store_true') + subparsers = parser.add_subparsers(dest='bar') + parser1 = subparsers.add_parser('1') + parser1.add_argument('baz') + self.assertEqual(NS(foo=False, bar='1', baz='2'), + parser.parse_args('1 2'.split())) + + def test_help(self): + self.assertEqual(self.parser.format_usage(), + 'usage: PROG [-h] [--foo] bar {1,2} ...\n') + self.assertEqual(self.parser.format_help(), textwrap.dedent('''\ + usage: PROG [-h] [--foo] bar {1,2} ... + + main description + + positional arguments: + bar bar help + {1,2} command help + + optional arguments: + -h, --help show this help message and exit + --foo foo help + ''')) + + def test_parser_command_help(self): + self.assertEqual(self.command_help_parser.format_usage(), + 'usage: PROG [-h] [--foo] bar {1,2} ...\n') + self.assertEqual(self.command_help_parser.format_help(), + textwrap.dedent('''\ + usage: PROG [-h] [--foo] bar {1,2} ... + + main description + + positional arguments: + bar bar help + {1,2} command help + 1 1 help + 2 2 help + + optional arguments: + -h, --help show this help message and exit + --foo foo help + ''')) + + def test_subparser_title_help(self): + parser = ErrorRaisingArgumentParser(prog='PROG', + description='main description') + parser.add_argument('--foo', action='store_true', help='foo help') + parser.add_argument('bar', help='bar help') + subparsers = parser.add_subparsers(title='subcommands', + description='command help', + help='additional text') + parser1 = subparsers.add_parser('1') + parser2 = subparsers.add_parser('2') + self.assertEqual(parser.format_usage(), + 'usage: PROG [-h] [--foo] bar {1,2} ...\n') + self.assertEqual(parser.format_help(), textwrap.dedent('''\ + usage: PROG [-h] [--foo] bar {1,2} ... + + main description + + positional arguments: + bar bar help + + optional arguments: + -h, --help show this help message and exit + --foo foo help + + subcommands: + command help + + {1,2} additional text + ''')) + + def _test_subparser_help(self, args_str, expected_help): + try: + self.parser.parse_args(args_str.split()) + except ArgumentParserError: + err = sys.exc_info()[1] + if err.stdout != expected_help: + print(repr(expected_help)) + print(repr(err.stdout)) + self.assertEqual(err.stdout, expected_help) + + def test_subparser1_help(self): + self._test_subparser_help('5.0 1 -h', textwrap.dedent('''\ + usage: PROG bar 1 [-h] [-w W] {a,b,c} + + 1 description + + positional arguments: + {a,b,c} x help + + optional arguments: + -h, --help show this help message and exit + -w W w help + ''')) + + def test_subparser2_help(self): + self._test_subparser_help('5.0 2 -h', textwrap.dedent('''\ + usage: PROG bar 2 [-h] [-y {1,2,3}] [z [z ...]] + + 2 description + + positional arguments: + z z help + + optional arguments: + -h, --help show this help message and exit + -y {1,2,3} y help + ''')) + +# ============ +# Groups tests +# ============ + +class TestPositionalsGroups(TestCase): + """Tests that order of group positionals matches construction order""" + + def test_nongroup_first(self): + parser = ErrorRaisingArgumentParser() + parser.add_argument('foo') + group = parser.add_argument_group('g') + group.add_argument('bar') + parser.add_argument('baz') + expected = NS(foo='1', bar='2', baz='3') + result = parser.parse_args('1 2 3'.split()) + self.assertEqual(expected, result) + + def test_group_first(self): + parser = ErrorRaisingArgumentParser() + group = parser.add_argument_group('xxx') + group.add_argument('foo') + parser.add_argument('bar') + parser.add_argument('baz') + expected = NS(foo='1', bar='2', baz='3') + result = parser.parse_args('1 2 3'.split()) + self.assertEqual(expected, result) + + def test_interleaved_groups(self): + parser = ErrorRaisingArgumentParser() + group = parser.add_argument_group('xxx') + parser.add_argument('foo') + group.add_argument('bar') + parser.add_argument('baz') + group = parser.add_argument_group('yyy') + group.add_argument('frell') + expected = NS(foo='1', bar='2', baz='3', frell='4') + result = parser.parse_args('1 2 3 4'.split()) + self.assertEqual(expected, result) + +# =================== +# Parent parser tests +# =================== + +class TestParentParsers(TestCase): + """Tests that parsers can be created with parent parsers""" + + def assertArgumentParserError(self, *args, **kwargs): + self.assertRaises(ArgumentParserError, *args, **kwargs) + + def setUp(self): + self.wxyz_parent = ErrorRaisingArgumentParser(add_help=False) + self.wxyz_parent.add_argument('--w') + x_group = self.wxyz_parent.add_argument_group('x') + x_group.add_argument('-y') + self.wxyz_parent.add_argument('z') + + self.abcd_parent = ErrorRaisingArgumentParser(add_help=False) + self.abcd_parent.add_argument('a') + self.abcd_parent.add_argument('-b') + c_group = self.abcd_parent.add_argument_group('c') + c_group.add_argument('--d') + + self.w_parent = ErrorRaisingArgumentParser(add_help=False) + self.w_parent.add_argument('--w') + + self.z_parent = ErrorRaisingArgumentParser(add_help=False) + self.z_parent.add_argument('z') + + # parents with mutually exclusive groups + self.ab_mutex_parent = ErrorRaisingArgumentParser(add_help=False) + group = self.ab_mutex_parent.add_mutually_exclusive_group() + group.add_argument('-a', action='store_true') + group.add_argument('-b', action='store_true') + + self.main_program = os.path.basename(sys.argv[0]) + + def test_single_parent(self): + parser = ErrorRaisingArgumentParser(parents=[self.wxyz_parent]) + self.assertEqual(parser.parse_args('-y 1 2 --w 3'.split()), + NS(w='3', y='1', z='2')) + + def test_single_parent_mutex(self): + self._test_mutex_ab(self.ab_mutex_parent.parse_args) + parser = ErrorRaisingArgumentParser(parents=[self.ab_mutex_parent]) + self._test_mutex_ab(parser.parse_args) + + def test_single_granparent_mutex(self): + parents = [self.ab_mutex_parent] + parser = ErrorRaisingArgumentParser(add_help=False, parents=parents) + parser = ErrorRaisingArgumentParser(parents=[parser]) + self._test_mutex_ab(parser.parse_args) + + def _test_mutex_ab(self, parse_args): + self.assertEqual(parse_args([]), NS(a=False, b=False)) + self.assertEqual(parse_args(['-a']), NS(a=True, b=False)) + self.assertEqual(parse_args(['-b']), NS(a=False, b=True)) + self.assertArgumentParserError(parse_args, ['-a', '-b']) + self.assertArgumentParserError(parse_args, ['-b', '-a']) + self.assertArgumentParserError(parse_args, ['-c']) + self.assertArgumentParserError(parse_args, ['-a', '-c']) + self.assertArgumentParserError(parse_args, ['-b', '-c']) + + def test_multiple_parents(self): + parents = [self.abcd_parent, self.wxyz_parent] + parser = ErrorRaisingArgumentParser(parents=parents) + self.assertEqual(parser.parse_args('--d 1 --w 2 3 4'.split()), + NS(a='3', b=None, d='1', w='2', y=None, z='4')) + + def test_multiple_parents_mutex(self): + parents = [self.ab_mutex_parent, self.wxyz_parent] + parser = ErrorRaisingArgumentParser(parents=parents) + self.assertEqual(parser.parse_args('-a --w 2 3'.split()), + NS(a=True, b=False, w='2', y=None, z='3')) + self.assertArgumentParserError( + parser.parse_args, '-a --w 2 3 -b'.split()) + self.assertArgumentParserError( + parser.parse_args, '-a -b --w 2 3'.split()) + + def test_conflicting_parents(self): + self.assertRaises( + argparse.ArgumentError, + argparse.ArgumentParser, + parents=[self.w_parent, self.wxyz_parent]) + + def test_conflicting_parents_mutex(self): + self.assertRaises( + argparse.ArgumentError, + argparse.ArgumentParser, + parents=[self.abcd_parent, self.ab_mutex_parent]) + + def test_same_argument_name_parents(self): + parents = [self.wxyz_parent, self.z_parent] + parser = ErrorRaisingArgumentParser(parents=parents) + self.assertEqual(parser.parse_args('1 2'.split()), + NS(w=None, y=None, z='2')) + + def test_subparser_parents(self): + parser = ErrorRaisingArgumentParser() + subparsers = parser.add_subparsers() + abcde_parser = subparsers.add_parser('bar', parents=[self.abcd_parent]) + abcde_parser.add_argument('e') + self.assertEqual(parser.parse_args('bar -b 1 --d 2 3 4'.split()), + NS(a='3', b='1', d='2', e='4')) + + def test_subparser_parents_mutex(self): + parser = ErrorRaisingArgumentParser() + subparsers = parser.add_subparsers() + parents = [self.ab_mutex_parent] + abc_parser = subparsers.add_parser('foo', parents=parents) + c_group = abc_parser.add_argument_group('c_group') + c_group.add_argument('c') + parents = [self.wxyz_parent, self.ab_mutex_parent] + wxyzabe_parser = subparsers.add_parser('bar', parents=parents) + wxyzabe_parser.add_argument('e') + self.assertEqual(parser.parse_args('foo -a 4'.split()), + NS(a=True, b=False, c='4')) + self.assertEqual(parser.parse_args('bar -b --w 2 3 4'.split()), + NS(a=False, b=True, w='2', y=None, z='3', e='4')) + self.assertArgumentParserError( + parser.parse_args, 'foo -a -b 4'.split()) + self.assertArgumentParserError( + parser.parse_args, 'bar -b -a 4'.split()) + + def test_parent_help(self): + parents = [self.abcd_parent, self.wxyz_parent] + parser = ErrorRaisingArgumentParser(parents=parents) + parser_help = parser.format_help() + self.assertEqual(parser_help, textwrap.dedent('''\ + usage: {} [-h] [-b B] [--d D] [--w W] [-y Y] a z + + positional arguments: + a + z + + optional arguments: + -h, --help show this help message and exit + -b B + --w W + + c: + --d D + + x: + -y Y + '''.format(self.main_program))) + + def test_groups_parents(self): + parent = ErrorRaisingArgumentParser(add_help=False) + g = parent.add_argument_group(title='g', description='gd') + g.add_argument('-w') + g.add_argument('-x') + m = parent.add_mutually_exclusive_group() + m.add_argument('-y') + m.add_argument('-z') + parser = ErrorRaisingArgumentParser(parents=[parent]) + + self.assertRaises(ArgumentParserError, parser.parse_args, + ['-y', 'Y', '-z', 'Z']) + + parser_help = parser.format_help() + self.assertEqual(parser_help, textwrap.dedent('''\ + usage: {} [-h] [-w W] [-x X] [-y Y | -z Z] + + optional arguments: + -h, --help show this help message and exit + -y Y + -z Z + + g: + gd + + -w W + -x X + '''.format(self.main_program))) + +# ============================== +# Mutually exclusive group tests +# ============================== + +class TestMutuallyExclusiveGroupErrors(TestCase): + + def test_invalid_add_argument_group(self): + parser = ErrorRaisingArgumentParser() + raises = self.assertRaises + raises(TypeError, parser.add_mutually_exclusive_group, title='foo') + + def test_invalid_add_argument(self): + parser = ErrorRaisingArgumentParser() + group = parser.add_mutually_exclusive_group() + add_argument = group.add_argument + raises = self.assertRaises + raises(ValueError, add_argument, '--foo', required=True) + raises(ValueError, add_argument, 'bar') + raises(ValueError, add_argument, 'bar', nargs='+') + raises(ValueError, add_argument, 'bar', nargs=1) + raises(ValueError, add_argument, 'bar', nargs=argparse.PARSER) + + +class MEMixin(object): + + def test_failures_when_not_required(self): + parse_args = self.get_parser(required=False).parse_args + error = ArgumentParserError + for args_string in self.failures: + self.assertRaises(error, parse_args, args_string.split()) + + def test_failures_when_required(self): + parse_args = self.get_parser(required=True).parse_args + error = ArgumentParserError + for args_string in self.failures + ['']: + self.assertRaises(error, parse_args, args_string.split()) + + def test_successes_when_not_required(self): + parse_args = self.get_parser(required=False).parse_args + successes = self.successes + self.successes_when_not_required + for args_string, expected_ns in successes: + actual_ns = parse_args(args_string.split()) + self.assertEqual(actual_ns, expected_ns) + + def test_successes_when_required(self): + parse_args = self.get_parser(required=True).parse_args + for args_string, expected_ns in self.successes: + actual_ns = parse_args(args_string.split()) + self.assertEqual(actual_ns, expected_ns) + + def test_usage_when_not_required(self): + format_usage = self.get_parser(required=False).format_usage + expected_usage = self.usage_when_not_required + self.assertEqual(format_usage(), textwrap.dedent(expected_usage)) + + def test_usage_when_required(self): + format_usage = self.get_parser(required=True).format_usage + expected_usage = self.usage_when_required + self.assertEqual(format_usage(), textwrap.dedent(expected_usage)) + + def test_help_when_not_required(self): + format_help = self.get_parser(required=False).format_help + help = self.usage_when_not_required + self.help + self.assertEqual(format_help(), textwrap.dedent(help)) + + def test_help_when_required(self): + format_help = self.get_parser(required=True).format_help + help = self.usage_when_required + self.help + self.assertEqual(format_help(), textwrap.dedent(help)) + + +class TestMutuallyExclusiveSimple(MEMixin, TestCase): + + def get_parser(self, required=None): + parser = ErrorRaisingArgumentParser(prog='PROG') + group = parser.add_mutually_exclusive_group(required=required) + group.add_argument('--bar', help='bar help') + group.add_argument('--baz', nargs='?', const='Z', help='baz help') + return parser + + failures = ['--bar X --baz Y', '--bar X --baz'] + successes = [ + ('--bar X', NS(bar='X', baz=None)), + ('--bar X --bar Z', NS(bar='Z', baz=None)), + ('--baz Y', NS(bar=None, baz='Y')), + ('--baz', NS(bar=None, baz='Z')), + ] + successes_when_not_required = [ + ('', NS(bar=None, baz=None)), + ] + + usage_when_not_required = '''\ + usage: PROG [-h] [--bar BAR | --baz [BAZ]] + ''' + usage_when_required = '''\ + usage: PROG [-h] (--bar BAR | --baz [BAZ]) + ''' + help = '''\ + + optional arguments: + -h, --help show this help message and exit + --bar BAR bar help + --baz [BAZ] baz help + ''' + + +class TestMutuallyExclusiveLong(MEMixin, TestCase): + + def get_parser(self, required=None): + parser = ErrorRaisingArgumentParser(prog='PROG') + parser.add_argument('--abcde', help='abcde help') + parser.add_argument('--fghij', help='fghij help') + group = parser.add_mutually_exclusive_group(required=required) + group.add_argument('--klmno', help='klmno help') + group.add_argument('--pqrst', help='pqrst help') + return parser + + failures = ['--klmno X --pqrst Y'] + successes = [ + ('--klmno X', NS(abcde=None, fghij=None, klmno='X', pqrst=None)), + ('--abcde Y --klmno X', + NS(abcde='Y', fghij=None, klmno='X', pqrst=None)), + ('--pqrst X', NS(abcde=None, fghij=None, klmno=None, pqrst='X')), + ('--pqrst X --fghij Y', + NS(abcde=None, fghij='Y', klmno=None, pqrst='X')), + ] + successes_when_not_required = [ + ('', NS(abcde=None, fghij=None, klmno=None, pqrst=None)), + ] + + usage_when_not_required = '''\ + usage: PROG [-h] [--abcde ABCDE] [--fghij FGHIJ] + [--klmno KLMNO | --pqrst PQRST] + ''' + usage_when_required = '''\ + usage: PROG [-h] [--abcde ABCDE] [--fghij FGHIJ] + (--klmno KLMNO | --pqrst PQRST) + ''' + help = '''\ + + optional arguments: + -h, --help show this help message and exit + --abcde ABCDE abcde help + --fghij FGHIJ fghij help + --klmno KLMNO klmno help + --pqrst PQRST pqrst help + ''' + + +class TestMutuallyExclusiveFirstSuppressed(MEMixin, TestCase): + + def get_parser(self, required): + parser = ErrorRaisingArgumentParser(prog='PROG') + group = parser.add_mutually_exclusive_group(required=required) + group.add_argument('-x', help=argparse.SUPPRESS) + group.add_argument('-y', action='store_false', help='y help') + return parser + + failures = ['-x X -y'] + successes = [ + ('-x X', NS(x='X', y=True)), + ('-x X -x Y', NS(x='Y', y=True)), + ('-y', NS(x=None, y=False)), + ] + successes_when_not_required = [ + ('', NS(x=None, y=True)), + ] + + usage_when_not_required = '''\ + usage: PROG [-h] [-y] + ''' + usage_when_required = '''\ + usage: PROG [-h] -y + ''' + help = '''\ + + optional arguments: + -h, --help show this help message and exit + -y y help + ''' + + +class TestMutuallyExclusiveManySuppressed(MEMixin, TestCase): + + def get_parser(self, required): + parser = ErrorRaisingArgumentParser(prog='PROG') + group = parser.add_mutually_exclusive_group(required=required) + add = group.add_argument + add('--spam', action='store_true', help=argparse.SUPPRESS) + add('--badger', action='store_false', help=argparse.SUPPRESS) + add('--bladder', help=argparse.SUPPRESS) + return parser + + failures = [ + '--spam --badger', + '--badger --bladder B', + '--bladder B --spam', + ] + successes = [ + ('--spam', NS(spam=True, badger=True, bladder=None)), + ('--badger', NS(spam=False, badger=False, bladder=None)), + ('--bladder B', NS(spam=False, badger=True, bladder='B')), + ('--spam --spam', NS(spam=True, badger=True, bladder=None)), + ] + successes_when_not_required = [ + ('', NS(spam=False, badger=True, bladder=None)), + ] + + usage_when_required = usage_when_not_required = '''\ + usage: PROG [-h] + ''' + help = '''\ + + optional arguments: + -h, --help show this help message and exit + ''' + + +class TestMutuallyExclusiveOptionalAndPositional(MEMixin, TestCase): + + def get_parser(self, required): + parser = ErrorRaisingArgumentParser(prog='PROG') + group = parser.add_mutually_exclusive_group(required=required) + group.add_argument('--foo', action='store_true', help='FOO') + group.add_argument('--spam', help='SPAM') + group.add_argument('badger', nargs='*', default='X', help='BADGER') + return parser + + failures = [ + '--foo --spam S', + '--spam S X', + 'X --foo', + 'X Y Z --spam S', + '--foo X Y', + ] + successes = [ + ('--foo', NS(foo=True, spam=None, badger='X')), + ('--spam S', NS(foo=False, spam='S', badger='X')), + ('X', NS(foo=False, spam=None, badger=['X'])), + ('X Y Z', NS(foo=False, spam=None, badger=['X', 'Y', 'Z'])), + ] + successes_when_not_required = [ + ('', NS(foo=False, spam=None, badger='X')), + ] + + usage_when_not_required = '''\ + usage: PROG [-h] [--foo | --spam SPAM | badger [badger ...]] + ''' + usage_when_required = '''\ + usage: PROG [-h] (--foo | --spam SPAM | badger [badger ...]) + ''' + help = '''\ + + positional arguments: + badger BADGER + + optional arguments: + -h, --help show this help message and exit + --foo FOO + --spam SPAM SPAM + ''' + + +class TestMutuallyExclusiveOptionalsMixed(MEMixin, TestCase): + + def get_parser(self, required): + parser = ErrorRaisingArgumentParser(prog='PROG') + parser.add_argument('-x', action='store_true', help='x help') + group = parser.add_mutually_exclusive_group(required=required) + group.add_argument('-a', action='store_true', help='a help') + group.add_argument('-b', action='store_true', help='b help') + parser.add_argument('-y', action='store_true', help='y help') + group.add_argument('-c', action='store_true', help='c help') + return parser + + failures = ['-a -b', '-b -c', '-a -c', '-a -b -c'] + successes = [ + ('-a', NS(a=True, b=False, c=False, x=False, y=False)), + ('-b', NS(a=False, b=True, c=False, x=False, y=False)), + ('-c', NS(a=False, b=False, c=True, x=False, y=False)), + ('-a -x', NS(a=True, b=False, c=False, x=True, y=False)), + ('-y -b', NS(a=False, b=True, c=False, x=False, y=True)), + ('-x -y -c', NS(a=False, b=False, c=True, x=True, y=True)), + ] + successes_when_not_required = [ + ('', NS(a=False, b=False, c=False, x=False, y=False)), + ('-x', NS(a=False, b=False, c=False, x=True, y=False)), + ('-y', NS(a=False, b=False, c=False, x=False, y=True)), + ] + + usage_when_required = usage_when_not_required = '''\ + usage: PROG [-h] [-x] [-a] [-b] [-y] [-c] + ''' + help = '''\ + + optional arguments: + -h, --help show this help message and exit + -x x help + -a a help + -b b help + -y y help + -c c help + ''' + + +class TestMutuallyExclusiveOptionalsAndPositionalsMixed(MEMixin, TestCase): + + def get_parser(self, required): + parser = ErrorRaisingArgumentParser(prog='PROG') + parser.add_argument('x', help='x help') + parser.add_argument('-y', action='store_true', help='y help') + group = parser.add_mutually_exclusive_group(required=required) + group.add_argument('a', nargs='?', help='a help') + group.add_argument('-b', action='store_true', help='b help') + group.add_argument('-c', action='store_true', help='c help') + return parser + + failures = ['X A -b', '-b -c', '-c X A'] + successes = [ + ('X A', NS(a='A', b=False, c=False, x='X', y=False)), + ('X -b', NS(a=None, b=True, c=False, x='X', y=False)), + ('X -c', NS(a=None, b=False, c=True, x='X', y=False)), + ('X A -y', NS(a='A', b=False, c=False, x='X', y=True)), + ('X -y -b', NS(a=None, b=True, c=False, x='X', y=True)), + ] + successes_when_not_required = [ + ('X', NS(a=None, b=False, c=False, x='X', y=False)), + ('X -y', NS(a=None, b=False, c=False, x='X', y=True)), + ] + + usage_when_required = usage_when_not_required = '''\ + usage: PROG [-h] [-y] [-b] [-c] x [a] + ''' + help = '''\ + + positional arguments: + x x help + a a help + + optional arguments: + -h, --help show this help message and exit + -y y help + -b b help + -c c help + ''' + +# ================================================= +# Mutually exclusive group in parent parser tests +# ================================================= + +class MEPBase(object): + + def get_parser(self, required=None): + parent = super(MEPBase, self).get_parser(required=required) + parser = ErrorRaisingArgumentParser( + prog=parent.prog, add_help=False, parents=[parent]) + return parser + + +class TestMutuallyExclusiveGroupErrorsParent( + MEPBase, TestMutuallyExclusiveGroupErrors): + pass + + +class TestMutuallyExclusiveSimpleParent( + MEPBase, TestMutuallyExclusiveSimple): + pass + + +class TestMutuallyExclusiveLongParent( + MEPBase, TestMutuallyExclusiveLong): + pass + + +class TestMutuallyExclusiveFirstSuppressedParent( + MEPBase, TestMutuallyExclusiveFirstSuppressed): + pass + + +class TestMutuallyExclusiveManySuppressedParent( + MEPBase, TestMutuallyExclusiveManySuppressed): + pass + + +class TestMutuallyExclusiveOptionalAndPositionalParent( + MEPBase, TestMutuallyExclusiveOptionalAndPositional): + pass + + +class TestMutuallyExclusiveOptionalsMixedParent( + MEPBase, TestMutuallyExclusiveOptionalsMixed): + pass + + +class TestMutuallyExclusiveOptionalsAndPositionalsMixedParent( + MEPBase, TestMutuallyExclusiveOptionalsAndPositionalsMixed): + pass + +# ================= +# Set default tests +# ================= + +class TestSetDefaults(TestCase): + + def test_set_defaults_no_args(self): + parser = ErrorRaisingArgumentParser() + parser.set_defaults(x='foo') + parser.set_defaults(y='bar', z=1) + self.assertEqual(NS(x='foo', y='bar', z=1), + parser.parse_args([])) + self.assertEqual(NS(x='foo', y='bar', z=1), + parser.parse_args([], NS())) + self.assertEqual(NS(x='baz', y='bar', z=1), + parser.parse_args([], NS(x='baz'))) + self.assertEqual(NS(x='baz', y='bar', z=2), + parser.parse_args([], NS(x='baz', z=2))) + + def test_set_defaults_with_args(self): + parser = ErrorRaisingArgumentParser() + parser.set_defaults(x='foo', y='bar') + parser.add_argument('-x', default='xfoox') + self.assertEqual(NS(x='xfoox', y='bar'), + parser.parse_args([])) + self.assertEqual(NS(x='xfoox', y='bar'), + parser.parse_args([], NS())) + self.assertEqual(NS(x='baz', y='bar'), + parser.parse_args([], NS(x='baz'))) + self.assertEqual(NS(x='1', y='bar'), + parser.parse_args('-x 1'.split())) + self.assertEqual(NS(x='1', y='bar'), + parser.parse_args('-x 1'.split(), NS())) + self.assertEqual(NS(x='1', y='bar'), + parser.parse_args('-x 1'.split(), NS(x='baz'))) + + def test_set_defaults_subparsers(self): + parser = ErrorRaisingArgumentParser() + parser.set_defaults(x='foo') + subparsers = parser.add_subparsers() + parser_a = subparsers.add_parser('a') + parser_a.set_defaults(y='bar') + self.assertEqual(NS(x='foo', y='bar'), + parser.parse_args('a'.split())) + + def test_set_defaults_parents(self): + parent = ErrorRaisingArgumentParser(add_help=False) + parent.set_defaults(x='foo') + parser = ErrorRaisingArgumentParser(parents=[parent]) + self.assertEqual(NS(x='foo'), parser.parse_args([])) + + def test_set_defaults_same_as_add_argument(self): + parser = ErrorRaisingArgumentParser() + parser.set_defaults(w='W', x='X', y='Y', z='Z') + parser.add_argument('-w') + parser.add_argument('-x', default='XX') + parser.add_argument('y', nargs='?') + parser.add_argument('z', nargs='?', default='ZZ') + + # defaults set previously + self.assertEqual(NS(w='W', x='XX', y='Y', z='ZZ'), + parser.parse_args([])) + + # reset defaults + parser.set_defaults(w='WW', x='X', y='YY', z='Z') + self.assertEqual(NS(w='WW', x='X', y='YY', z='Z'), + parser.parse_args([])) + + def test_set_defaults_same_as_add_argument_group(self): + parser = ErrorRaisingArgumentParser() + parser.set_defaults(w='W', x='X', y='Y', z='Z') + group = parser.add_argument_group('foo') + group.add_argument('-w') + group.add_argument('-x', default='XX') + group.add_argument('y', nargs='?') + group.add_argument('z', nargs='?', default='ZZ') + + + # defaults set previously + self.assertEqual(NS(w='W', x='XX', y='Y', z='ZZ'), + parser.parse_args([])) + + # reset defaults + parser.set_defaults(w='WW', x='X', y='YY', z='Z') + self.assertEqual(NS(w='WW', x='X', y='YY', z='Z'), + parser.parse_args([])) + +# ================= +# Get default tests +# ================= + +class TestGetDefault(TestCase): + + def test_get_default(self): + parser = ErrorRaisingArgumentParser() + self.assertEqual(None, parser.get_default("foo")) + self.assertEqual(None, parser.get_default("bar")) + + parser.add_argument("--foo") + self.assertEqual(None, parser.get_default("foo")) + self.assertEqual(None, parser.get_default("bar")) + + parser.add_argument("--bar", type=int, default=42) + self.assertEqual(None, parser.get_default("foo")) + self.assertEqual(42, parser.get_default("bar")) + + parser.set_defaults(foo="badger") + self.assertEqual("badger", parser.get_default("foo")) + self.assertEqual(42, parser.get_default("bar")) + +# ========================== +# Namespace 'contains' tests +# ========================== + +class TestNamespaceContainsSimple(TestCase): + + def test_empty(self): + ns = argparse.Namespace() + self.assertEquals('' in ns, False) + self.assertEquals('' not in ns, True) + self.assertEquals('x' in ns, False) + + def test_non_empty(self): + ns = argparse.Namespace(x=1, y=2) + self.assertEquals('x' in ns, True) + self.assertEquals('x' not in ns, False) + self.assertEquals('y' in ns, True) + self.assertEquals('' in ns, False) + self.assertEquals('xx' in ns, False) + self.assertEquals('z' in ns, False) + +# ===================== +# Help formatting tests +# ===================== + +class TestHelpFormattingMetaclass(type): + + def __init__(cls, name, bases, bodydict): + if name == 'HelpTestCase': + return + + class AddTests(object): + + def __init__(self, test_class, func_suffix, std_name): + self.func_suffix = func_suffix + self.std_name = std_name + + for test_func in [self.test_format, + self.test_print, + self.test_print_file]: + test_name = '%s_%s' % (test_func.__name__, func_suffix) + + def test_wrapper(self, test_func=test_func): + test_func(self) + try: + test_wrapper.__name__ = test_name + except TypeError: + pass + setattr(test_class, test_name, test_wrapper) + + def _get_parser(self, tester): + parser = argparse.ArgumentParser( + *tester.parser_signature.args, + **tester.parser_signature.kwargs) + for argument_sig in tester.argument_signatures: + parser.add_argument(*argument_sig.args, + **argument_sig.kwargs) + group_signatures = tester.argument_group_signatures + for group_sig, argument_sigs in group_signatures: + group = parser.add_argument_group(*group_sig.args, + **group_sig.kwargs) + for argument_sig in argument_sigs: + group.add_argument(*argument_sig.args, + **argument_sig.kwargs) + return parser + + def _test(self, tester, parser_text): + expected_text = getattr(tester, self.func_suffix) + expected_text = textwrap.dedent(expected_text) + if expected_text != parser_text: + print(repr(expected_text)) + print(repr(parser_text)) + for char1, char2 in zip(expected_text, parser_text): + if char1 != char2: + print('first diff: %r %r' % (char1, char2)) + break + tester.assertEqual(expected_text, parser_text) + + def test_format(self, tester): + parser = self._get_parser(tester) + format = getattr(parser, 'format_%s' % self.func_suffix) + self._test(tester, format()) + + def test_print(self, tester): + parser = self._get_parser(tester) + print_ = getattr(parser, 'print_%s' % self.func_suffix) + old_stream = getattr(sys, self.std_name) + setattr(sys, self.std_name, StringIO()) + try: + print_() + parser_text = getattr(sys, self.std_name).getvalue() + finally: + setattr(sys, self.std_name, old_stream) + self._test(tester, parser_text) + + def test_print_file(self, tester): + parser = self._get_parser(tester) + print_ = getattr(parser, 'print_%s' % self.func_suffix) + sfile = StringIO() + print_(sfile) + parser_text = sfile.getvalue() + self._test(tester, parser_text) + + # add tests for {format,print}_{usage,help,version} + for func_suffix, std_name in [('usage', 'stdout'), + ('help', 'stdout'), + ('version', 'stderr')]: + AddTests(cls, func_suffix, std_name) + +bases = TestCase, +HelpTestCase = TestHelpFormattingMetaclass('HelpTestCase', bases, {}) + + +class TestHelpBiggerOptionals(HelpTestCase): + """Make sure that argument help aligns when options are longer""" + + parser_signature = Sig(prog='PROG', description='DESCRIPTION', + epilog='EPILOG', version='0.1') + argument_signatures = [ + Sig('-x', action='store_true', help='X HELP'), + Sig('--y', help='Y HELP'), + Sig('foo', help='FOO HELP'), + Sig('bar', help='BAR HELP'), + ] + argument_group_signatures = [] + usage = '''\ + usage: PROG [-h] [-v] [-x] [--y Y] foo bar + ''' + help = usage + '''\ + + DESCRIPTION + + positional arguments: + foo FOO HELP + bar BAR HELP + + optional arguments: + -h, --help show this help message and exit + -v, --version show program's version number and exit + -x X HELP + --y Y Y HELP + + EPILOG + ''' + version = '''\ + 0.1 + ''' + + +class TestHelpBiggerOptionalGroups(HelpTestCase): + """Make sure that argument help aligns when options are longer""" + + parser_signature = Sig(prog='PROG', description='DESCRIPTION', + epilog='EPILOG', version='0.1') + argument_signatures = [ + Sig('-x', action='store_true', help='X HELP'), + Sig('--y', help='Y HELP'), + Sig('foo', help='FOO HELP'), + Sig('bar', help='BAR HELP'), + ] + argument_group_signatures = [ + (Sig('GROUP TITLE', description='GROUP DESCRIPTION'), [ + Sig('baz', help='BAZ HELP'), + Sig('-z', nargs='+', help='Z HELP')]), + ] + usage = '''\ + usage: PROG [-h] [-v] [-x] [--y Y] [-z Z [Z ...]] foo bar baz + ''' + help = usage + '''\ + + DESCRIPTION + + positional arguments: + foo FOO HELP + bar BAR HELP + + optional arguments: + -h, --help show this help message and exit + -v, --version show program's version number and exit + -x X HELP + --y Y Y HELP + + GROUP TITLE: + GROUP DESCRIPTION + + baz BAZ HELP + -z Z [Z ...] Z HELP + + EPILOG + ''' + version = '''\ + 0.1 + ''' + + +class TestHelpBiggerPositionals(HelpTestCase): + """Make sure that help aligns when arguments are longer""" + + parser_signature = Sig(usage='USAGE', description='DESCRIPTION') + argument_signatures = [ + Sig('-x', action='store_true', help='X HELP'), + Sig('--y', help='Y HELP'), + Sig('ekiekiekifekang', help='EKI HELP'), + Sig('bar', help='BAR HELP'), + ] + argument_group_signatures = [] + usage = '''\ + usage: USAGE + ''' + help = usage + '''\ + + DESCRIPTION + + positional arguments: + ekiekiekifekang EKI HELP + bar BAR HELP + + optional arguments: + -h, --help show this help message and exit + -x X HELP + --y Y Y HELP + ''' + + version = '' + + +class TestHelpReformatting(HelpTestCase): + """Make sure that text after short names starts on the first line""" + + parser_signature = Sig( + prog='PROG', + description=' oddly formatted\n' + 'description\n' + '\n' + 'that is so long that it should go onto multiple ' + 'lines when wrapped') + argument_signatures = [ + Sig('-x', metavar='XX', help='oddly\n' + ' formatted -x help'), + Sig('y', metavar='yyy', help='normal y help'), + ] + argument_group_signatures = [ + (Sig('title', description='\n' + ' oddly formatted group\n' + '\n' + 'description'), + [Sig('-a', action='store_true', + help=' oddly \n' + 'formatted -a help \n' + ' again, so long that it should be wrapped over ' + 'multiple lines')]), + ] + usage = '''\ + usage: PROG [-h] [-x XX] [-a] yyy + ''' + help = usage + '''\ + + oddly formatted description that is so long that it should go onto \ +multiple + lines when wrapped + + positional arguments: + yyy normal y help + + optional arguments: + -h, --help show this help message and exit + -x XX oddly formatted -x help + + title: + oddly formatted group description + + -a oddly formatted -a help again, so long that it should \ +be wrapped + over multiple lines + ''' + version = '' + + +class TestHelpWrappingShortNames(HelpTestCase): + """Make sure that text after short names starts on the first line""" + + parser_signature = Sig(prog='PROG', description= 'D\nD' * 30) + argument_signatures = [ + Sig('-x', metavar='XX', help='XHH HX' * 20), + Sig('y', metavar='yyy', help='YH YH' * 20), + ] + argument_group_signatures = [ + (Sig('ALPHAS'), [ + Sig('-a', action='store_true', help='AHHH HHA' * 10)]), + ] + usage = '''\ + usage: PROG [-h] [-x XX] [-a] yyy + ''' + help = usage + '''\ + + D DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD \ +DD DD DD + DD DD DD DD D + + positional arguments: + yyy YH YHYH YHYH YHYH YHYH YHYH YHYH YHYH YHYH YHYH YHYH \ +YHYH YHYH + YHYH YHYH YHYH YHYH YHYH YHYH YHYH YH + + optional arguments: + -h, --help show this help message and exit + -x XX XHH HXXHH HXXHH HXXHH HXXHH HXXHH HXXHH HXXHH HXXHH \ +HXXHH HXXHH + HXXHH HXXHH HXXHH HXXHH HXXHH HXXHH HXXHH HXXHH HXXHH HX + + ALPHAS: + -a AHHH HHAAHHH HHAAHHH HHAAHHH HHAAHHH HHAAHHH HHAAHHH \ +HHAAHHH + HHAAHHH HHAAHHH HHA + ''' + version = '' + + +class TestHelpWrappingLongNames(HelpTestCase): + """Make sure that text after long names starts on the next line""" + + parser_signature = Sig(usage='USAGE', description= 'D D' * 30, + version='V V'*30) + argument_signatures = [ + Sig('-x', metavar='X' * 25, help='XH XH' * 20), + Sig('y', metavar='y' * 25, help='YH YH' * 20), + ] + argument_group_signatures = [ + (Sig('ALPHAS'), [ + Sig('-a', metavar='A' * 25, help='AH AH' * 20), + Sig('z', metavar='z' * 25, help='ZH ZH' * 20)]), + ] + usage = '''\ + usage: USAGE + ''' + help = usage + '''\ + + D DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD \ +DD DD DD + DD DD DD DD D + + positional arguments: + yyyyyyyyyyyyyyyyyyyyyyyyy + YH YHYH YHYH YHYH YHYH YHYH YHYH YHYH YHYH \ +YHYH YHYH + YHYH YHYH YHYH YHYH YHYH YHYH YHYH YHYH YHYH YH + + optional arguments: + -h, --help show this help message and exit + -v, --version show program's version number and exit + -x XXXXXXXXXXXXXXXXXXXXXXXXX + XH XHXH XHXH XHXH XHXH XHXH XHXH XHXH XHXH \ +XHXH XHXH + XHXH XHXH XHXH XHXH XHXH XHXH XHXH XHXH XHXH XH + + ALPHAS: + -a AAAAAAAAAAAAAAAAAAAAAAAAA + AH AHAH AHAH AHAH AHAH AHAH AHAH AHAH AHAH \ +AHAH AHAH + AHAH AHAH AHAH AHAH AHAH AHAH AHAH AHAH AHAH AH + zzzzzzzzzzzzzzzzzzzzzzzzz + ZH ZHZH ZHZH ZHZH ZHZH ZHZH ZHZH ZHZH ZHZH \ +ZHZH ZHZH + ZHZH ZHZH ZHZH ZHZH ZHZH ZHZH ZHZH ZHZH ZHZH ZH + ''' + version = '''\ + V VV VV VV VV VV VV VV VV VV VV VV VV VV VV VV VV VV VV VV VV VV VV \ +VV VV VV + VV VV VV VV V + ''' + + +class TestHelpUsage(HelpTestCase): + """Test basic usage messages""" + + parser_signature = Sig(prog='PROG') + argument_signatures = [ + Sig('-w', nargs='+', help='w'), + Sig('-x', nargs='*', help='x'), + Sig('a', help='a'), + Sig('b', help='b', nargs=2), + Sig('c', help='c', nargs='?'), + ] + argument_group_signatures = [ + (Sig('group'), [ + Sig('-y', nargs='?', help='y'), + Sig('-z', nargs=3, help='z'), + Sig('d', help='d', nargs='*'), + Sig('e', help='e', nargs='+'), + ]) + ] + usage = '''\ + usage: PROG [-h] [-w W [W ...]] [-x [X [X ...]]] [-y [Y]] [-z Z Z Z] + a b b [c] [d [d ...]] e [e ...] + ''' + help = usage + '''\ + + positional arguments: + a a + b b + c c + + optional arguments: + -h, --help show this help message and exit + -w W [W ...] w + -x [X [X ...]] x + + group: + -y [Y] y + -z Z Z Z z + d d + e e + ''' + version = '' + + +class TestHelpOnlyUserGroups(HelpTestCase): + """Test basic usage messages""" + + parser_signature = Sig(prog='PROG', add_help=False) + argument_signatures = [] + argument_group_signatures = [ + (Sig('xxxx'), [ + Sig('-x', help='x'), + Sig('a', help='a'), + ]), + (Sig('yyyy'), [ + Sig('b', help='b'), + Sig('-y', help='y'), + ]), + ] + usage = '''\ + usage: PROG [-x X] [-y Y] a b + ''' + help = usage + '''\ + + xxxx: + -x X x + a a + + yyyy: + b b + -y Y y + ''' + version = '' + + +class TestHelpUsageLongProg(HelpTestCase): + """Test usage messages where the prog is long""" + + parser_signature = Sig(prog='P' * 60) + argument_signatures = [ + Sig('-w', metavar='W'), + Sig('-x', metavar='X'), + Sig('a'), + Sig('b'), + ] + argument_group_signatures = [] + usage = '''\ + usage: PPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPP + [-h] [-w W] [-x X] a b + ''' + help = usage + '''\ + + positional arguments: + a + b + + optional arguments: + -h, --help show this help message and exit + -w W + -x X + ''' + version = '' + + +class TestHelpUsageLongProgOptionsWrap(HelpTestCase): + """Test usage messages where the prog is long and the optionals wrap""" + + parser_signature = Sig(prog='P' * 60) + argument_signatures = [ + Sig('-w', metavar='W' * 25), + Sig('-x', metavar='X' * 25), + Sig('-y', metavar='Y' * 25), + Sig('-z', metavar='Z' * 25), + Sig('a'), + Sig('b'), + ] + argument_group_signatures = [] + usage = '''\ + usage: PPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPP + [-h] [-w WWWWWWWWWWWWWWWWWWWWWWWWW] \ +[-x XXXXXXXXXXXXXXXXXXXXXXXXX] + [-y YYYYYYYYYYYYYYYYYYYYYYYYY] [-z ZZZZZZZZZZZZZZZZZZZZZZZZZ] + a b + ''' + help = usage + '''\ + + positional arguments: + a + b + + optional arguments: + -h, --help show this help message and exit + -w WWWWWWWWWWWWWWWWWWWWWWWWW + -x XXXXXXXXXXXXXXXXXXXXXXXXX + -y YYYYYYYYYYYYYYYYYYYYYYYYY + -z ZZZZZZZZZZZZZZZZZZZZZZZZZ + ''' + version = '' + + +class TestHelpUsageLongProgPositionalsWrap(HelpTestCase): + """Test usage messages where the prog is long and the positionals wrap""" + + parser_signature = Sig(prog='P' * 60, add_help=False) + argument_signatures = [ + Sig('a' * 25), + Sig('b' * 25), + Sig('c' * 25), + ] + argument_group_signatures = [] + usage = '''\ + usage: PPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPP + aaaaaaaaaaaaaaaaaaaaaaaaa bbbbbbbbbbbbbbbbbbbbbbbbb + ccccccccccccccccccccccccc + ''' + help = usage + '''\ + + positional arguments: + aaaaaaaaaaaaaaaaaaaaaaaaa + bbbbbbbbbbbbbbbbbbbbbbbbb + ccccccccccccccccccccccccc + ''' + version = '' + + +class TestHelpUsageOptionalsWrap(HelpTestCase): + """Test usage messages where the optionals wrap""" + + parser_signature = Sig(prog='PROG') + argument_signatures = [ + Sig('-w', metavar='W' * 25), + Sig('-x', metavar='X' * 25), + Sig('-y', metavar='Y' * 25), + Sig('-z', metavar='Z' * 25), + Sig('a'), + Sig('b'), + Sig('c'), + ] + argument_group_signatures = [] + usage = '''\ + usage: PROG [-h] [-w WWWWWWWWWWWWWWWWWWWWWWWWW] \ +[-x XXXXXXXXXXXXXXXXXXXXXXXXX] + [-y YYYYYYYYYYYYYYYYYYYYYYYYY] \ +[-z ZZZZZZZZZZZZZZZZZZZZZZZZZ] + a b c + ''' + help = usage + '''\ + + positional arguments: + a + b + c + + optional arguments: + -h, --help show this help message and exit + -w WWWWWWWWWWWWWWWWWWWWWWWWW + -x XXXXXXXXXXXXXXXXXXXXXXXXX + -y YYYYYYYYYYYYYYYYYYYYYYYYY + -z ZZZZZZZZZZZZZZZZZZZZZZZZZ + ''' + version = '' + + +class TestHelpUsagePositionalsWrap(HelpTestCase): + """Test usage messages where the positionals wrap""" + + parser_signature = Sig(prog='PROG') + argument_signatures = [ + Sig('-x'), + Sig('-y'), + Sig('-z'), + Sig('a' * 25), + Sig('b' * 25), + Sig('c' * 25), + ] + argument_group_signatures = [] + usage = '''\ + usage: PROG [-h] [-x X] [-y Y] [-z Z] + aaaaaaaaaaaaaaaaaaaaaaaaa bbbbbbbbbbbbbbbbbbbbbbbbb + ccccccccccccccccccccccccc + ''' + help = usage + '''\ + + positional arguments: + aaaaaaaaaaaaaaaaaaaaaaaaa + bbbbbbbbbbbbbbbbbbbbbbbbb + ccccccccccccccccccccccccc + + optional arguments: + -h, --help show this help message and exit + -x X + -y Y + -z Z + ''' + version = '' + + +class TestHelpUsageOptionalsPositionalsWrap(HelpTestCase): + """Test usage messages where the optionals and positionals wrap""" + + parser_signature = Sig(prog='PROG') + argument_signatures = [ + Sig('-x', metavar='X' * 25), + Sig('-y', metavar='Y' * 25), + Sig('-z', metavar='Z' * 25), + Sig('a' * 25), + Sig('b' * 25), + Sig('c' * 25), + ] + argument_group_signatures = [] + usage = '''\ + usage: PROG [-h] [-x XXXXXXXXXXXXXXXXXXXXXXXXX] \ +[-y YYYYYYYYYYYYYYYYYYYYYYYYY] + [-z ZZZZZZZZZZZZZZZZZZZZZZZZZ] + aaaaaaaaaaaaaaaaaaaaaaaaa bbbbbbbbbbbbbbbbbbbbbbbbb + ccccccccccccccccccccccccc + ''' + help = usage + '''\ + + positional arguments: + aaaaaaaaaaaaaaaaaaaaaaaaa + bbbbbbbbbbbbbbbbbbbbbbbbb + ccccccccccccccccccccccccc + + optional arguments: + -h, --help show this help message and exit + -x XXXXXXXXXXXXXXXXXXXXXXXXX + -y YYYYYYYYYYYYYYYYYYYYYYYYY + -z ZZZZZZZZZZZZZZZZZZZZZZZZZ + ''' + version = '' + + +class TestHelpUsageOptionalsOnlyWrap(HelpTestCase): + """Test usage messages where there are only optionals and they wrap""" + + parser_signature = Sig(prog='PROG') + argument_signatures = [ + Sig('-x', metavar='X' * 25), + Sig('-y', metavar='Y' * 25), + Sig('-z', metavar='Z' * 25), + ] + argument_group_signatures = [] + usage = '''\ + usage: PROG [-h] [-x XXXXXXXXXXXXXXXXXXXXXXXXX] \ +[-y YYYYYYYYYYYYYYYYYYYYYYYYY] + [-z ZZZZZZZZZZZZZZZZZZZZZZZZZ] + ''' + help = usage + '''\ + + optional arguments: + -h, --help show this help message and exit + -x XXXXXXXXXXXXXXXXXXXXXXXXX + -y YYYYYYYYYYYYYYYYYYYYYYYYY + -z ZZZZZZZZZZZZZZZZZZZZZZZZZ + ''' + version = '' + + +class TestHelpUsagePositionalsOnlyWrap(HelpTestCase): + """Test usage messages where there are only positionals and they wrap""" + + parser_signature = Sig(prog='PROG', add_help=False) + argument_signatures = [ + Sig('a' * 25), + Sig('b' * 25), + Sig('c' * 25), + ] + argument_group_signatures = [] + usage = '''\ + usage: PROG aaaaaaaaaaaaaaaaaaaaaaaaa bbbbbbbbbbbbbbbbbbbbbbbbb + ccccccccccccccccccccccccc + ''' + help = usage + '''\ + + positional arguments: + aaaaaaaaaaaaaaaaaaaaaaaaa + bbbbbbbbbbbbbbbbbbbbbbbbb + ccccccccccccccccccccccccc + ''' + version = '' + + +class TestHelpVariableExpansion(HelpTestCase): + """Test that variables are expanded properly in help messages""" + + parser_signature = Sig(prog='PROG') + argument_signatures = [ + Sig('-x', type=int, + help='x %(prog)s %(default)s %(type)s %%'), + Sig('-y', action='store_const', default=42, const='XXX', + help='y %(prog)s %(default)s %(const)s'), + Sig('--foo', choices='abc', + help='foo %(prog)s %(default)s %(choices)s'), + Sig('--bar', default='baz', choices=[1, 2], metavar='BBB', + help='bar %(prog)s %(default)s %(dest)s'), + Sig('spam', help='spam %(prog)s %(default)s'), + Sig('badger', default=0.5, help='badger %(prog)s %(default)s'), + ] + argument_group_signatures = [ + (Sig('group'), [ + Sig('-a', help='a %(prog)s %(default)s'), + Sig('-b', default=-1, help='b %(prog)s %(default)s'), + ]) + ] + usage = ('''\ + usage: PROG [-h] [-x X] [-y] [--foo {a,b,c}] [--bar BBB] [-a A] [-b B] + spam badger + ''') + help = usage + '''\ + + positional arguments: + spam spam PROG None + badger badger PROG 0.5 + + optional arguments: + -h, --help show this help message and exit + -x X x PROG None int % + -y y PROG 42 XXX + --foo {a,b,c} foo PROG None a, b, c + --bar BBB bar PROG baz bar + + group: + -a A a PROG None + -b B b PROG -1 + ''' + version = '' + + +class TestHelpVariableExpansionUsageSupplied(HelpTestCase): + """Test that variables are expanded properly when usage= is present""" + + parser_signature = Sig(prog='PROG', usage='%(prog)s FOO') + argument_signatures = [] + argument_group_signatures = [] + usage = ('''\ + usage: PROG FOO + ''') + help = usage + '''\ + + optional arguments: + -h, --help show this help message and exit + ''' + version = '' + + +class TestHelpVariableExpansionNoArguments(HelpTestCase): + """Test that variables are expanded properly with no arguments""" + + parser_signature = Sig(prog='PROG', add_help=False) + argument_signatures = [] + argument_group_signatures = [] + usage = ('''\ + usage: PROG + ''') + help = usage + version = '' + + +class TestHelpSuppressUsage(HelpTestCase): + """Test that items can be suppressed in usage messages""" + + parser_signature = Sig(prog='PROG', usage=argparse.SUPPRESS) + argument_signatures = [ + Sig('--foo', help='foo help'), + Sig('spam', help='spam help'), + ] + argument_group_signatures = [] + help = '''\ + positional arguments: + spam spam help + + optional arguments: + -h, --help show this help message and exit + --foo FOO foo help + ''' + usage = '' + version = '' + + +class TestHelpSuppressOptional(HelpTestCase): + """Test that optional arguments can be suppressed in help messages""" + + parser_signature = Sig(prog='PROG', add_help=False) + argument_signatures = [ + Sig('--foo', help=argparse.SUPPRESS), + Sig('spam', help='spam help'), + ] + argument_group_signatures = [] + usage = '''\ + usage: PROG spam + ''' + help = usage + '''\ + + positional arguments: + spam spam help + ''' + version = '' + + +class TestHelpSuppressOptionalGroup(HelpTestCase): + """Test that optional groups can be suppressed in help messages""" + + parser_signature = Sig(prog='PROG') + argument_signatures = [ + Sig('--foo', help='foo help'), + Sig('spam', help='spam help'), + ] + argument_group_signatures = [ + (Sig('group'), [Sig('--bar', help=argparse.SUPPRESS)]), + ] + usage = '''\ + usage: PROG [-h] [--foo FOO] spam + ''' + help = usage + '''\ + + positional arguments: + spam spam help + + optional arguments: + -h, --help show this help message and exit + --foo FOO foo help + ''' + version = '' + + +class TestHelpSuppressPositional(HelpTestCase): + """Test that positional arguments can be suppressed in help messages""" + + parser_signature = Sig(prog='PROG') + argument_signatures = [ + Sig('--foo', help='foo help'), + Sig('spam', help=argparse.SUPPRESS), + ] + argument_group_signatures = [] + usage = '''\ + usage: PROG [-h] [--foo FOO] + ''' + help = usage + '''\ + + optional arguments: + -h, --help show this help message and exit + --foo FOO foo help + ''' + version = '' + + +class TestHelpRequiredOptional(HelpTestCase): + """Test that required options don't look optional""" + + parser_signature = Sig(prog='PROG') + argument_signatures = [ + Sig('--foo', required=True, help='foo help'), + ] + argument_group_signatures = [] + usage = '''\ + usage: PROG [-h] --foo FOO + ''' + help = usage + '''\ + + optional arguments: + -h, --help show this help message and exit + --foo FOO foo help + ''' + version = '' + + +class TestHelpAlternatePrefixChars(HelpTestCase): + """Test that options display with different prefix characters""" + + parser_signature = Sig(prog='PROG', prefix_chars='^;', add_help=False) + argument_signatures = [ + Sig('^^foo', action='store_true', help='foo help'), + Sig(';b', ';;bar', help='bar help'), + ] + argument_group_signatures = [] + usage = '''\ + usage: PROG [^^foo] [;b BAR] + ''' + help = usage + '''\ + + optional arguments: + ^^foo foo help + ;b BAR, ;;bar BAR bar help + ''' + version = '' + + +class TestHelpNoHelpOptional(HelpTestCase): + """Test that the --help argument can be suppressed help messages""" + + parser_signature = Sig(prog='PROG', add_help=False) + argument_signatures = [ + Sig('--foo', help='foo help'), + Sig('spam', help='spam help'), + ] + argument_group_signatures = [] + usage = '''\ + usage: PROG [--foo FOO] spam + ''' + help = usage + '''\ + + positional arguments: + spam spam help + + optional arguments: + --foo FOO foo help + ''' + version = '' + + +class TestHelpVersionOptional(HelpTestCase): + """Test that the --version argument can be suppressed help messages""" + + parser_signature = Sig(prog='PROG', version='1.0') + argument_signatures = [ + Sig('--foo', help='foo help'), + Sig('spam', help='spam help'), + ] + argument_group_signatures = [] + usage = '''\ + usage: PROG [-h] [-v] [--foo FOO] spam + ''' + help = usage + '''\ + + positional arguments: + spam spam help + + optional arguments: + -h, --help show this help message and exit + -v, --version show program's version number and exit + --foo FOO foo help + ''' + version = '''\ + 1.0 + ''' + + +class TestHelpNone(HelpTestCase): + """Test that no errors occur if no help is specified""" + + parser_signature = Sig(prog='PROG') + argument_signatures = [ + Sig('--foo'), + Sig('spam'), + ] + argument_group_signatures = [] + usage = '''\ + usage: PROG [-h] [--foo FOO] spam + ''' + help = usage + '''\ + + positional arguments: + spam + + optional arguments: + -h, --help show this help message and exit + --foo FOO + ''' + version = '' + + +class TestHelpTupleMetavar(HelpTestCase): + """Test specifying metavar as a tuple""" + + parser_signature = Sig(prog='PROG') + argument_signatures = [ + Sig('-w', help='w', nargs='+', metavar=('W1', 'W2')), + Sig('-x', help='x', nargs='*', metavar=('X1', 'X2')), + Sig('-y', help='y', nargs=3, metavar=('Y1', 'Y2', 'Y3')), + Sig('-z', help='z', nargs='?', metavar=('Z1', )), + ] + argument_group_signatures = [] + usage = '''\ + usage: PROG [-h] [-w W1 [W2 ...]] [-x [X1 [X2 ...]]] [-y Y1 Y2 Y3] \ +[-z [Z1]] + ''' + help = usage + '''\ + + optional arguments: + -h, --help show this help message and exit + -w W1 [W2 ...] w + -x [X1 [X2 ...]] x + -y Y1 Y2 Y3 y + -z [Z1] z + ''' + version = '' + + +class TestHelpRawText(HelpTestCase): + """Test the RawTextHelpFormatter""" + + parser_signature = Sig( + prog='PROG', formatter_class=argparse.RawTextHelpFormatter, + description='Keep the formatting\n' + ' exactly as it is written\n' + '\n' + 'here\n') + + argument_signatures = [ + Sig('--foo', help=' foo help should also\n' + 'appear as given here'), + Sig('spam', help='spam help'), + ] + argument_group_signatures = [ + (Sig('title', description=' This text\n' + ' should be indented\n' + ' exactly like it is here\n'), + [Sig('--bar', help='bar help')]), + ] + usage = '''\ + usage: PROG [-h] [--foo FOO] [--bar BAR] spam + ''' + help = usage + '''\ + + Keep the formatting + exactly as it is written + + here + + positional arguments: + spam spam help + + optional arguments: + -h, --help show this help message and exit + --foo FOO foo help should also + appear as given here + + title: + This text + should be indented + exactly like it is here + + --bar BAR bar help + ''' + version = '' + + +class TestHelpRawDescription(HelpTestCase): + """Test the RawTextHelpFormatter""" + + parser_signature = Sig( + prog='PROG', formatter_class=argparse.RawDescriptionHelpFormatter, + description='Keep the formatting\n' + ' exactly as it is written\n' + '\n' + 'here\n') + + argument_signatures = [ + Sig('--foo', help=' foo help should not\n' + ' retain this odd formatting'), + Sig('spam', help='spam help'), + ] + argument_group_signatures = [ + (Sig('title', description=' This text\n' + ' should be indented\n' + ' exactly like it is here\n'), + [Sig('--bar', help='bar help')]), + ] + usage = '''\ + usage: PROG [-h] [--foo FOO] [--bar BAR] spam + ''' + help = usage + '''\ + + Keep the formatting + exactly as it is written + + here + + positional arguments: + spam spam help + + optional arguments: + -h, --help show this help message and exit + --foo FOO foo help should not retain this odd formatting + + title: + This text + should be indented + exactly like it is here + + --bar BAR bar help + ''' + version = '' + + +class TestHelpArgumentDefaults(HelpTestCase): + """Test the ArgumentDefaultsHelpFormatter""" + + parser_signature = Sig( + prog='PROG', formatter_class=argparse.ArgumentDefaultsHelpFormatter, + description='description') + + argument_signatures = [ + Sig('--foo', help='foo help - oh and by the way, %(default)s'), + Sig('--bar', action='store_true', help='bar help'), + Sig('spam', help='spam help'), + Sig('badger', nargs='?', default='wooden', help='badger help'), + ] + argument_group_signatures = [ + (Sig('title', description='description'), + [Sig('--baz', type=int, default=42, help='baz help')]), + ] + usage = '''\ + usage: PROG [-h] [--foo FOO] [--bar] [--baz BAZ] spam [badger] + ''' + help = usage + '''\ + + description + + positional arguments: + spam spam help + badger badger help (default: wooden) + + optional arguments: + -h, --help show this help message and exit + --foo FOO foo help - oh and by the way, None + --bar bar help (default: False) + + title: + description + + --baz BAZ baz help (default: 42) + ''' + version = '' + +# ===================================== +# Optional/Positional constructor tests +# ===================================== + +class TestInvalidArgumentConstructors(TestCase): + """Test a bunch of invalid Argument constructors""" + + def assertTypeError(self, *args, **kwargs): + parser = argparse.ArgumentParser() + self.assertRaises(TypeError, parser.add_argument, + *args, **kwargs) + + def assertValueError(self, *args, **kwargs): + parser = argparse.ArgumentParser() + self.assertRaises(ValueError, parser.add_argument, + *args, **kwargs) + + def test_invalid_keyword_arguments(self): + self.assertTypeError('-x', bar=None) + self.assertTypeError('-y', callback='foo') + self.assertTypeError('-y', callback_args=()) + self.assertTypeError('-y', callback_kwargs={}) + + def test_missing_destination(self): + self.assertTypeError() + for action in ['append', 'store']: + self.assertTypeError(action=action) + + def test_invalid_option_strings(self): + self.assertValueError('--') + self.assertValueError('---') + + def test_invalid_type(self): + self.assertValueError('--foo', type='int') + + def test_invalid_action(self): + self.assertValueError('-x', action='foo') + self.assertValueError('foo', action='baz') + parser = argparse.ArgumentParser() + try: + parser.add_argument("--foo", action="store-true") + except ValueError: + e = sys.exc_info()[1] + expected = 'unknown action' + msg = 'expected %r, found %r' % (expected, e) + self.assertTrue(expected in str(e), msg) + + def test_multiple_dest(self): + parser = argparse.ArgumentParser() + parser.add_argument(dest='foo') + try: + parser.add_argument('bar', dest='baz') + except ValueError: + e = sys.exc_info()[1] + expected = 'dest supplied twice for positional argument' + msg = 'expected %r, found %r' % (expected, e) + self.assertTrue(expected in str(e), msg) + + def test_no_argument_actions(self): + for action in ['store_const', 'store_true', 'store_false', + 'append_const', 'count']: + for attrs in [dict(type=int), dict(nargs='+'), + dict(choices='ab')]: + self.assertTypeError('-x', action=action, **attrs) + + def test_no_argument_no_const_actions(self): + # options with zero arguments + for action in ['store_true', 'store_false', 'count']: + + # const is always disallowed + self.assertTypeError('-x', const='foo', action=action) + + # nargs is always disallowed + self.assertTypeError('-x', nargs='*', action=action) + + def test_more_than_one_argument_actions(self): + for action in ['store', 'append']: + + # nargs=0 is disallowed + self.assertValueError('-x', nargs=0, action=action) + self.assertValueError('spam', nargs=0, action=action) + + # const is disallowed with non-optional arguments + for nargs in [1, '*', '+']: + self.assertValueError('-x', const='foo', + nargs=nargs, action=action) + self.assertValueError('spam', const='foo', + nargs=nargs, action=action) + + def test_required_const_actions(self): + for action in ['store_const', 'append_const']: + + # nargs is always disallowed + self.assertTypeError('-x', nargs='+', action=action) + + def test_parsers_action_missing_params(self): + self.assertTypeError('command', action='parsers') + self.assertTypeError('command', action='parsers', prog='PROG') + self.assertTypeError('command', action='parsers', + parser_class=argparse.ArgumentParser) + + def test_required_positional(self): + self.assertTypeError('foo', required=True) + + def test_user_defined_action(self): + + class Success(Exception): + pass + + class Action(object): + + def __init__(self, + option_strings, + dest, + const, + default, + required=False): + if dest == 'spam': + if const is Success: + if default is Success: + raise Success() + + def __call__(self, *args, **kwargs): + pass + + parser = argparse.ArgumentParser() + self.assertRaises(Success, parser.add_argument, '--spam', + action=Action, default=Success, const=Success) + self.assertRaises(Success, parser.add_argument, 'spam', + action=Action, default=Success, const=Success) + +# ================================ +# Actions returned by add_argument +# ================================ + +class TestActionsReturned(TestCase): + + def test_dest(self): + parser = argparse.ArgumentParser() + action = parser.add_argument('--foo') + self.assertEqual(action.dest, 'foo') + action = parser.add_argument('-b', '--bar') + self.assertEqual(action.dest, 'bar') + action = parser.add_argument('-x', '-y') + self.assertEqual(action.dest, 'x') + + def test_misc(self): + parser = argparse.ArgumentParser() + action = parser.add_argument('--foo', nargs='?', const=42, + default=84, type=int, choices=[1, 2], + help='FOO', metavar='BAR', dest='baz') + self.assertEqual(action.nargs, '?') + self.assertEqual(action.const, 42) + self.assertEqual(action.default, 84) + self.assertEqual(action.type, int) + self.assertEqual(action.choices, [1, 2]) + self.assertEqual(action.help, 'FOO') + self.assertEqual(action.metavar, 'BAR') + self.assertEqual(action.dest, 'baz') + + +# ================================ +# Argument conflict handling tests +# ================================ + +class TestConflictHandling(TestCase): + + def test_bad_type(self): + self.assertRaises(ValueError, argparse.ArgumentParser, + conflict_handler='foo') + + def test_conflict_error(self): + parser = argparse.ArgumentParser() + parser.add_argument('-x') + self.assertRaises(argparse.ArgumentError, + parser.add_argument, '-x') + parser.add_argument('--spam') + self.assertRaises(argparse.ArgumentError, + parser.add_argument, '--spam') + + def test_resolve_error(self): + get_parser = argparse.ArgumentParser + parser = get_parser(prog='PROG', conflict_handler='resolve') + + parser.add_argument('-x', help='OLD X') + parser.add_argument('-x', help='NEW X') + self.assertEqual(parser.format_help(), textwrap.dedent('''\ + usage: PROG [-h] [-x X] + + optional arguments: + -h, --help show this help message and exit + -x X NEW X + ''')) + + parser.add_argument('--spam', metavar='OLD_SPAM') + parser.add_argument('--spam', metavar='NEW_SPAM') + self.assertEqual(parser.format_help(), textwrap.dedent('''\ + usage: PROG [-h] [-x X] [--spam NEW_SPAM] + + optional arguments: + -h, --help show this help message and exit + -x X NEW X + --spam NEW_SPAM + ''')) + + +# ============================= +# Help and Version option tests +# ============================= + +class TestOptionalsHelpVersionActions(TestCase): + """Test the help and version actions""" + + def _get_error(self, func, *args, **kwargs): + try: + func(*args, **kwargs) + except ArgumentParserError: + return sys.exc_info()[1] + else: + self.assertRaises(ArgumentParserError, func, *args, **kwargs) + + def assertPrintHelpExit(self, parser, args_str): + self.assertEqual( + parser.format_help(), + self._get_error(parser.parse_args, args_str.split()).stdout) + + def assertPrintVersionExit(self, parser, args_str): + self.assertEqual( + parser.format_version(), + self._get_error(parser.parse_args, args_str.split()).stderr) + + def assertArgumentParserError(self, parser, *args): + self.assertRaises(ArgumentParserError, parser.parse_args, args) + + def test_version(self): + parser = ErrorRaisingArgumentParser(version='1.0') + self.assertPrintHelpExit(parser, '-h') + self.assertPrintHelpExit(parser, '--help') + self.assertPrintVersionExit(parser, '-v') + self.assertPrintVersionExit(parser, '--version') + + def test_version_format(self): + parser = ErrorRaisingArgumentParser(prog='PPP', version='%(prog)s 3.5') + msg = self._get_error(parser.parse_args, ['-v']).stderr + self.assertEqual('PPP 3.5\n', msg) + + def test_version_no_help(self): + parser = ErrorRaisingArgumentParser(add_help=False, version='1.0') + self.assertArgumentParserError(parser, '-h') + self.assertArgumentParserError(parser, '--help') + self.assertPrintVersionExit(parser, '-v') + self.assertPrintVersionExit(parser, '--version') + + def test_version_action(self): + parser = ErrorRaisingArgumentParser(prog='XXX') + parser.add_argument('-V', action='version', version='%(prog)s 3.7') + msg = self._get_error(parser.parse_args, ['-V']).stderr + self.assertEqual('XXX 3.7\n', msg) + + def test_no_help(self): + parser = ErrorRaisingArgumentParser(add_help=False) + self.assertArgumentParserError(parser, '-h') + self.assertArgumentParserError(parser, '--help') + self.assertArgumentParserError(parser, '-v') + self.assertArgumentParserError(parser, '--version') + + def test_alternate_help_version(self): + parser = ErrorRaisingArgumentParser() + parser.add_argument('-x', action='help') + parser.add_argument('-y', action='version') + self.assertPrintHelpExit(parser, '-x') + self.assertPrintVersionExit(parser, '-y') + self.assertArgumentParserError(parser, '-v') + self.assertArgumentParserError(parser, '--version') + + def test_help_version_extra_arguments(self): + parser = ErrorRaisingArgumentParser(version='1.0') + parser.add_argument('-x', action='store_true') + parser.add_argument('y') + + # try all combinations of valid prefixes and suffixes + valid_prefixes = ['', '-x', 'foo', '-x bar', 'baz -x'] + valid_suffixes = valid_prefixes + ['--bad-option', 'foo bar baz'] + for prefix in valid_prefixes: + for suffix in valid_suffixes: + format = '%s %%s %s' % (prefix, suffix) + self.assertPrintHelpExit(parser, format % '-h') + self.assertPrintHelpExit(parser, format % '--help') + self.assertPrintVersionExit(parser, format % '-v') + self.assertPrintVersionExit(parser, format % '--version') + + +# ====================== +# str() and repr() tests +# ====================== + +class TestStrings(TestCase): + """Test str() and repr() on Optionals and Positionals""" + + def assertStringEqual(self, obj, result_string): + for func in [str, repr]: + self.assertEqual(func(obj), result_string) + + def test_optional(self): + option = argparse.Action( + option_strings=['--foo', '-a', '-b'], + dest='b', + type='int', + nargs='+', + default=42, + choices=[1, 2, 3], + help='HELP', + metavar='METAVAR') + string = ( + "Action(option_strings=['--foo', '-a', '-b'], dest='b', " + "nargs='+', const=None, default=42, type='int', " + "choices=[1, 2, 3], help='HELP', metavar='METAVAR')") + self.assertStringEqual(option, string) + + def test_argument(self): + argument = argparse.Action( + option_strings=[], + dest='x', + type=float, + nargs='?', + default=2.5, + choices=[0.5, 1.5, 2.5], + help='H HH H', + metavar='MV MV MV') + string = ( + "Action(option_strings=[], dest='x', nargs='?', " + "const=None, default=2.5, type=%r, choices=[0.5, 1.5, 2.5], " + "help='H HH H', metavar='MV MV MV')" % float) + self.assertStringEqual(argument, string) + + def test_namespace(self): + ns = argparse.Namespace(foo=42, bar='spam') + string = "Namespace(bar='spam', foo=42)" + self.assertStringEqual(ns, string) + + def test_parser(self): + parser = argparse.ArgumentParser(prog='PROG') + string = ( + "ArgumentParser(prog='PROG', usage=None, description=None, " + "version=None, formatter_class=%r, conflict_handler='error', " + "add_help=True)" % argparse.HelpFormatter) + self.assertStringEqual(parser, string) + +# =============== +# Namespace tests +# =============== + +class TestNamespace(TestCase): + + def test_constructor(self): + ns = argparse.Namespace() + self.assertRaises(AttributeError, getattr, ns, 'x') + + ns = argparse.Namespace(a=42, b='spam') + self.assertEqual(ns.a, 42) + self.assertEqual(ns.b, 'spam') + + def test_equality(self): + ns1 = argparse.Namespace(a=1, b=2) + ns2 = argparse.Namespace(b=2, a=1) + ns3 = argparse.Namespace(a=1) + ns4 = argparse.Namespace(b=2) + + self.assertEqual(ns1, ns2) + self.assertNotEqual(ns1, ns3) + self.assertNotEqual(ns1, ns4) + self.assertNotEqual(ns2, ns3) + self.assertNotEqual(ns2, ns4) + self.assertTrue(ns1 != ns3) + self.assertTrue(ns1 != ns4) + self.assertTrue(ns2 != ns3) + self.assertTrue(ns2 != ns4) + + +# =================== +# File encoding tests +# =================== + +class TestEncoding(TestCase): + + def _test_module_encoding(self, path): + path, _ = os.path.splitext(path) + path += ".py" + codecs.open(path, 'r', 'utf8').read() + + def test_argparse_module_encoding(self): + self._test_module_encoding(argparse.__file__) + + def test_test_argparse_module_encoding(self): + self._test_module_encoding(__file__) + +# =================== +# ArgumentError tests +# =================== + +class TestArgumentError(TestCase): + + def test_argument_error(self): + msg = "my error here" + error = argparse.ArgumentError(None, msg) + self.assertEqual(str(error), msg) + +# ======================= +# ArgumentTypeError tests +# ======================= + +class TestArgumentError(TestCase): + + def test_argument_type_error(self): + + def spam(string): + raise argparse.ArgumentTypeError('spam!') + + parser = ErrorRaisingArgumentParser(prog='PROG', add_help=False) + parser.add_argument('x', type=spam) + try: + parser.parse_args(['XXX']) + except ArgumentParserError: + expected = 'usage: PROG x\nPROG: error: argument x: spam!\n' + msg = sys.exc_info()[1].stderr + self.assertEqual(expected, msg) + else: + self.fail() + +# ====================== +# parse_known_args tests +# ====================== + +class TestParseKnownArgs(TestCase): + + def test_optionals(self): + parser = argparse.ArgumentParser() + parser.add_argument('--foo') + args, extras = parser.parse_known_args('--foo F --bar --baz'.split()) + self.assertEqual(NS(foo='F'), args) + self.assertEqual(['--bar', '--baz'], extras) + + def test_mixed(self): + parser = argparse.ArgumentParser() + parser.add_argument('-v', nargs='?', const=1, type=int) + parser.add_argument('--spam', action='store_false') + parser.add_argument('badger') + + argv = ["B", "C", "--foo", "-v", "3", "4"] + args, extras = parser.parse_known_args(argv) + self.assertEqual(NS(v=3, spam=True, badger="B"), args) + self.assertEqual(["C", "--foo", "4"], extras) + +# ============================ +# from argparse import * tests +# ============================ + +class TestImportStar(TestCase): + + def test(self): + for name in argparse.__all__: + self.assertTrue(hasattr(argparse, name)) + +def test_main(): + with warnings.catch_warnings(): + # silence Python 2.6 buggy warnings about Exception.message + warnings.filterwarnings( + action='ignore', + message='BaseException.message has been deprecated as of' + 'Python 2.6', + category=DeprecationWarning) + # silence warnings about version argument - these are expected + warnings.filterwarnings( + action='ignore', + message='The "version" argument to ArgumentParser is deprecated.', + category=DeprecationWarning) + warnings.filterwarnings( + action='ignore', + message='The format_version method is deprecated', + category=DeprecationWarning) + warnings.filterwarnings( + action='ignore', + message='The print_version method is deprecated', + category=DeprecationWarning) + + support.run_unittest(__name__) + + +if __name__ == '__main__': + test_main() From python-checkins at python.org Tue Mar 2 23:44:42 2010 From: python-checkins at python.org (victor.stinner) Date: Tue, 2 Mar 2010 23:44:42 +0100 (CET) Subject: [Python-checkins] r78596 - python/trunk/Modules/_ssl.c Message-ID: <20100302224442.E7FD0EE98C@mail.python.org> Author: victor.stinner Date: Tue Mar 2 23:44:42 2010 New Revision: 78596 Log: Issue #2973: Fix gcc warning on the 2nd argument of ASN1_item_d2i() and method->d2i(): OpenSSL API changed in OpenSSL 0.9.6m. Patch written by Daniel Black. Modified: python/trunk/Modules/_ssl.c Modified: python/trunk/Modules/_ssl.c ============================================================================== --- python/trunk/Modules/_ssl.c (original) +++ python/trunk/Modules/_ssl.c Tue Mar 2 23:44:42 2010 @@ -667,7 +667,12 @@ 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; From python-checkins at python.org Tue Mar 2 23:46:25 2010 From: python-checkins at python.org (victor.stinner) Date: Tue, 2 Mar 2010 23:46:25 +0100 (CET) Subject: [Python-checkins] r78597 - in python/branches/release26-maint: Modules/_ssl.c Message-ID: <20100302224625.BCE26EE98C@mail.python.org> Author: victor.stinner Date: Tue Mar 2 23:46:25 2010 New Revision: 78597 Log: Merged revisions 78596 via svnmerge from svn+ssh://pythondev at svn.python.org/python/trunk ........ r78596 | victor.stinner | 2010-03-02 23:44:42 +0100 (mar., 02 mars 2010) | 4 lines Issue #2973: Fix gcc warning on the 2nd argument of ASN1_item_d2i() and method->d2i(): OpenSSL API changed in OpenSSL 0.9.6m. Patch written by Daniel Black. ........ Modified: python/branches/release26-maint/ (props changed) python/branches/release26-maint/Modules/_ssl.c Modified: python/branches/release26-maint/Modules/_ssl.c ============================================================================== --- python/branches/release26-maint/Modules/_ssl.c (original) +++ python/branches/release26-maint/Modules/_ssl.c Tue Mar 2 23:46:25 2010 @@ -667,7 +667,12 @@ 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; From python-checkins at python.org Tue Mar 2 23:48:17 2010 From: python-checkins at python.org (victor.stinner) Date: Tue, 2 Mar 2010 23:48:17 +0100 (CET) Subject: [Python-checkins] r78598 - in python/branches/py3k: Modules/_ssl.c Message-ID: <20100302224817.EED24EE986@mail.python.org> Author: victor.stinner Date: Tue Mar 2 23:48:17 2010 New Revision: 78598 Log: Merged revisions 78596 via svnmerge from svn+ssh://pythondev at svn.python.org/python/trunk ........ r78596 | victor.stinner | 2010-03-02 23:44:42 +0100 (mar., 02 mars 2010) | 4 lines Issue #2973: Fix gcc warning on the 2nd argument of ASN1_item_d2i() and method->d2i(): OpenSSL API changed in OpenSSL 0.9.6m. Patch written by Daniel Black. ........ Modified: python/branches/py3k/ (props changed) python/branches/py3k/Modules/_ssl.c Modified: python/branches/py3k/Modules/_ssl.c ============================================================================== --- python/branches/py3k/Modules/_ssl.c (original) +++ python/branches/py3k/Modules/_ssl.c Tue Mar 2 23:48:17 2010 @@ -658,7 +658,12 @@ 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; From python-checkins at python.org Tue Mar 2 23:49:30 2010 From: python-checkins at python.org (victor.stinner) Date: Tue, 2 Mar 2010 23:49:30 +0100 (CET) Subject: [Python-checkins] r78599 - in python/branches/release31-maint: Modules/_ssl.c Message-ID: <20100302224930.9B45EEE989@mail.python.org> Author: victor.stinner Date: Tue Mar 2 23:49:30 2010 New Revision: 78599 Log: Merged revisions 78598 via svnmerge from svn+ssh://pythondev at svn.python.org/python/branches/py3k ................ r78598 | victor.stinner | 2010-03-02 23:48:17 +0100 (mar., 02 mars 2010) | 11 lines Merged revisions 78596 via svnmerge from svn+ssh://pythondev at svn.python.org/python/trunk ........ r78596 | victor.stinner | 2010-03-02 23:44:42 +0100 (mar., 02 mars 2010) | 4 lines Issue #2973: Fix gcc warning on the 2nd argument of ASN1_item_d2i() and method->d2i(): OpenSSL API changed in OpenSSL 0.9.6m. Patch written by Daniel Black. ........ ................ Modified: python/branches/release31-maint/ (props changed) python/branches/release31-maint/Modules/_ssl.c Modified: python/branches/release31-maint/Modules/_ssl.c ============================================================================== --- python/branches/release31-maint/Modules/_ssl.c (original) +++ python/branches/release31-maint/Modules/_ssl.c Tue Mar 2 23:49:30 2010 @@ -658,7 +658,12 @@ 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; From python-checkins at python.org Tue Mar 2 23:58:01 2010 From: python-checkins at python.org (benjamin.peterson) Date: Tue, 2 Mar 2010 23:58:01 +0100 (CET) Subject: [Python-checkins] r78600 - in python/trunk/Lib: argparse.py test/test_argparse.py Message-ID: <20100302225801.7C370EE9CE@mail.python.org> Author: benjamin.peterson Date: Tue Mar 2 23:58:01 2010 New Revision: 78600 Log: remove code to avoid BaseException.message bug Modified: python/trunk/Lib/argparse.py python/trunk/Lib/test/test_argparse.py Modified: python/trunk/Lib/argparse.py ============================================================================== --- python/trunk/Lib/argparse.py (original) +++ python/trunk/Lib/argparse.py Tue Mar 2 23:58:01 2010 @@ -120,15 +120,6 @@ def _callable(obj): return hasattr(obj, '__call__') or hasattr(obj, '__bases__') -# silence Python 2.6 buggy warnings about Exception.message -if _sys.version_info[:2] == (2, 6): - import warnings - warnings.filterwarnings( - action='ignore', - message='BaseException.message has been deprecated as of Python 2.6', - category=DeprecationWarning, - module='argparse') - SUPPRESS = '==SUPPRESS==' Modified: python/trunk/Lib/test/test_argparse.py ============================================================================== --- python/trunk/Lib/test/test_argparse.py (original) +++ python/trunk/Lib/test/test_argparse.py Tue Mar 2 23:58:01 2010 @@ -4183,12 +4183,6 @@ def test_main(): with warnings.catch_warnings(): - # silence Python 2.6 buggy warnings about Exception.message - warnings.filterwarnings( - action='ignore', - message='BaseException.message has been deprecated as of' - 'Python 2.6', - category=DeprecationWarning) # silence warnings about version argument - these are expected warnings.filterwarnings( action='ignore', From python-checkins at python.org Wed Mar 3 00:02:04 2010 From: python-checkins at python.org (benjamin.peterson) Date: Wed, 3 Mar 2010 00:02:04 +0100 (CET) Subject: [Python-checkins] r78601 - in python/trunk/Lib: argparse.py test/test_argparse.py Message-ID: <20100302230204.1B515EE9F3@mail.python.org> Author: benjamin.peterson Date: Wed Mar 3 00:02:02 2010 New Revision: 78601 Log: remove cross-version compatibility code Modified: python/trunk/Lib/argparse.py python/trunk/Lib/test/test_argparse.py Modified: python/trunk/Lib/argparse.py ============================================================================== --- python/trunk/Lib/argparse.py (original) +++ python/trunk/Lib/argparse.py Wed Mar 3 00:02:02 2010 @@ -95,27 +95,6 @@ from gettext import gettext as _ -try: - _set = set -except NameError: - from sets import Set as _set - -try: - _basestring = basestring -except NameError: - _basestring = str - -try: - _sorted = sorted -except NameError: - - def _sorted(iterable, reverse=False): - result = list(iterable) - result.sort() - if reverse: - result.reverse() - return result - def _callable(obj): return hasattr(obj, '__call__') or hasattr(obj, '__bases__') @@ -152,7 +131,7 @@ return '%s(%s)' % (type_name, ', '.join(arg_strings)) def _get_kwargs(self): - return _sorted(self.__dict__.items()) + return sorted(self.__dict__.items()) def _get_args(self): return [] @@ -405,7 +384,7 @@ def _format_actions_usage(self, actions, groups): # find group indices and identify actions in groups - group_actions = _set() + group_actions = set() inserts = {} for group in groups: try: @@ -475,7 +454,7 @@ parts.append(part) # insert things at the necessary indices - for i in _sorted(inserts, reverse=True): + for i in sorted(inserts, reverse=True): parts[i:i] = [inserts[i]] # join all the action items with spaces @@ -1705,7 +1684,7 @@ if not hasattr(namespace, action.dest): if action.default is not SUPPRESS: default = action.default - if isinstance(action.default, _basestring): + if isinstance(action.default, basestring): default = self._get_value(action, default) setattr(namespace, action.dest, default) @@ -1765,8 +1744,8 @@ arg_strings_pattern = ''.join(arg_string_pattern_parts) # converts arg strings to the appropriate and then takes the action - seen_actions = _set() - seen_non_default_actions = _set() + seen_actions = set() + seen_non_default_actions = set() def take_action(action, argument_strings, option_string=None): seen_actions.add(action) @@ -2179,7 +2158,7 @@ value = action.const else: value = action.default - if isinstance(value, _basestring): + if isinstance(value, basestring): value = self._get_value(action, value) self._check_value(action, value) Modified: python/trunk/Lib/test/test_argparse.py ============================================================================== --- python/trunk/Lib/test/test_argparse.py (original) +++ python/trunk/Lib/test/test_argparse.py Wed Mar 3 00:02:02 2010 @@ -22,29 +22,9 @@ import warnings import argparse -from test import test_support - -try: - from StringIO import StringIO -except ImportError: - from io import StringIO - -try: - set -except NameError: - from sets import Set as set - -try: - sorted -except NameError: - - def sorted(iterable, reverse=False): - result = list(iterable) - result.sort() - if reverse: - result.reverse() - return result +from StringIO import StringIO +from test import test_support class TestCase(unittest.TestCase): From python-checkins at python.org Wed Mar 3 00:09:39 2010 From: python-checkins at python.org (benjamin.peterson) Date: Wed, 3 Mar 2010 00:09:39 +0100 (CET) Subject: [Python-checkins] r78602 - in python/branches/py3k: Lib/argparse.py Lib/test/test_argparse.py Message-ID: <20100302230939.139D5EE9EE@mail.python.org> Author: benjamin.peterson Date: Wed Mar 3 00:09:38 2010 New Revision: 78602 Log: Merged revisions 78600-78601 via svnmerge from svn+ssh://pythondev at svn.python.org/python/trunk ........ r78600 | benjamin.peterson | 2010-03-02 16:58:01 -0600 (Tue, 02 Mar 2010) | 1 line remove code to avoid BaseException.message bug ........ r78601 | benjamin.peterson | 2010-03-02 17:02:02 -0600 (Tue, 02 Mar 2010) | 1 line remove cross-version compatibility code ........ Modified: python/branches/py3k/ (props changed) python/branches/py3k/Lib/argparse.py python/branches/py3k/Lib/test/test_argparse.py Modified: python/branches/py3k/Lib/argparse.py ============================================================================== --- python/branches/py3k/Lib/argparse.py (original) +++ python/branches/py3k/Lib/argparse.py Wed Mar 3 00:09:38 2010 @@ -95,40 +95,10 @@ from gettext import gettext as _ -try: - _set = set -except NameError: - from sets import Set as _set - -try: - _basestring = basestring -except NameError: - _basestring = str - -try: - _sorted = sorted -except NameError: - - def _sorted(iterable, reverse=False): - result = list(iterable) - result.sort() - if reverse: - result.reverse() - return result - def _callable(obj): return hasattr(obj, '__call__') or hasattr(obj, '__bases__') -# silence Python 2.6 buggy warnings about Exception.message -if _sys.version_info[:2] == (2, 6): - import warnings - warnings.filterwarnings( - action='ignore', - message='BaseException.message has been deprecated as of Python 2.6', - category=DeprecationWarning, - module='argparse') - SUPPRESS = '==SUPPRESS==' @@ -161,7 +131,7 @@ return '%s(%s)' % (type_name, ', '.join(arg_strings)) def _get_kwargs(self): - return _sorted(self.__dict__.items()) + return sorted(self.__dict__.items()) def _get_args(self): return [] @@ -414,7 +384,7 @@ def _format_actions_usage(self, actions, groups): # find group indices and identify actions in groups - group_actions = _set() + group_actions = set() inserts = {} for group in groups: try: @@ -484,7 +454,7 @@ parts.append(part) # insert things at the necessary indices - for i in _sorted(inserts, reverse=True): + for i in sorted(inserts, reverse=True): parts[i:i] = [inserts[i]] # join all the action items with spaces @@ -1714,7 +1684,7 @@ if not hasattr(namespace, action.dest): if action.default is not SUPPRESS: default = action.default - if isinstance(action.default, _basestring): + if isinstance(action.default, str): default = self._get_value(action, default) setattr(namespace, action.dest, default) @@ -1774,8 +1744,8 @@ arg_strings_pattern = ''.join(arg_string_pattern_parts) # converts arg strings to the appropriate and then takes the action - seen_actions = _set() - seen_non_default_actions = _set() + seen_actions = set() + seen_non_default_actions = set() def take_action(action, argument_strings, option_string=None): seen_actions.add(action) @@ -2188,7 +2158,7 @@ value = action.const else: value = action.default - if isinstance(value, _basestring): + if isinstance(value, str): value = self._get_value(action, value) self._check_value(action, value) Modified: python/branches/py3k/Lib/test/test_argparse.py ============================================================================== --- python/branches/py3k/Lib/test/test_argparse.py (original) +++ python/branches/py3k/Lib/test/test_argparse.py Wed Mar 3 00:09:38 2010 @@ -22,29 +22,9 @@ import warnings import argparse -from test import support - -try: - from StringIO import StringIO -except ImportError: - from io import StringIO - -try: - set -except NameError: - from sets import Set as set - -try: - sorted -except NameError: - - def sorted(iterable, reverse=False): - result = list(iterable) - result.sort() - if reverse: - result.reverse() - return result +from io import StringIO +from test import support class TestCase(unittest.TestCase): @@ -4183,12 +4163,6 @@ def test_main(): with warnings.catch_warnings(): - # silence Python 2.6 buggy warnings about Exception.message - warnings.filterwarnings( - action='ignore', - message='BaseException.message has been deprecated as of' - 'Python 2.6', - category=DeprecationWarning) # silence warnings about version argument - these are expected warnings.filterwarnings( action='ignore', From python-checkins at python.org Wed Mar 3 00:20:02 2010 From: python-checkins at python.org (victor.stinner) Date: Wed, 3 Mar 2010 00:20:02 +0100 (CET) Subject: [Python-checkins] r78603 - in python/trunk: Lib/test/test_pep263.py Misc/NEWS Parser/tokenizer.c Message-ID: <20100302232002.4274AEE986@mail.python.org> Author: victor.stinner Date: Wed Mar 3 00:20:02 2010 New Revision: 78603 Log: Issue #7820: The parser tokenizer restores all bytes in the right if the BOM check fails. Fix an assertion in pydebug mode. Modified: python/trunk/Lib/test/test_pep263.py python/trunk/Misc/NEWS python/trunk/Parser/tokenizer.c Modified: python/trunk/Lib/test/test_pep263.py ============================================================================== --- python/trunk/Lib/test/test_pep263.py (original) +++ python/trunk/Lib/test/test_pep263.py Wed Mar 3 00:20:02 2010 @@ -30,6 +30,17 @@ self.assertEqual(d['a'], d['b']) self.assertEqual(len(d['a']), len(d['b'])) + def test_issue7820(self): + # Ensure that check_bom() restores all bytes in the right order if + # check_bom() fails in pydebug mode: a buffer starts with the first + # byte of a valid BOM, but next bytes are different + + # one byte in common with the UTF-16-LE BOM + self.assertRaises(SyntaxError, eval, '\xff\x20') + + # two bytes in common with the UTF-8 BOM + self.assertRaises(SyntaxError, eval, '\xef\xbb\x20') + def test_main(): test_support.run_unittest(PEP263Test) Modified: python/trunk/Misc/NEWS ============================================================================== --- python/trunk/Misc/NEWS (original) +++ python/trunk/Misc/NEWS Wed Mar 3 00:20:02 2010 @@ -12,6 +12,9 @@ Core and Builtins ----------------- +- Issue #7820: The parser tokenizer restores all bytes in the right if + the BOM check fails. + - Issue #7309: Fix unchecked attribute access when converting UnicodeEncodeError, UnicodeDecodeError, and UnicodeTranslateError to strings. Modified: python/trunk/Parser/tokenizer.c ============================================================================== --- python/trunk/Parser/tokenizer.c (original) +++ python/trunk/Parser/tokenizer.c Wed Mar 3 00:20:02 2010 @@ -312,47 +312,57 @@ int set_readline(struct tok_state *, const char *), struct tok_state *tok) { - int ch = get_char(tok); + int ch1, ch2, ch3; + ch1 = get_char(tok); tok->decoding_state = 1; - if (ch == EOF) { + if (ch1 == EOF) { return 1; - } else if (ch == 0xEF) { - ch = get_char(tok); - if (ch != 0xBB) - goto NON_BOM; - ch = get_char(tok); - if (ch != 0xBF) - goto NON_BOM; + } else if (ch1 == 0xEF) { + ch2 = get_char(tok); + if (ch2 != 0xBB) { + unget_char(ch2, tok); + unget_char(ch1, tok); + return 1; + } + ch3 = get_char(tok); + if (ch3 != 0xBF) { + unget_char(ch3, tok); + unget_char(ch2, tok); + unget_char(ch1, tok); + return 1; + } #if 0 /* Disable support for UTF-16 BOMs until a decision is made whether this needs to be supported. */ - } else if (ch == 0xFE) { - ch = get_char(tok); - if (ch != 0xFF) - goto NON_BOM; + } else if (ch1 == 0xFE) { + ch2 = get_char(tok); + if (ch2 != 0xFF) { + unget_char(ch2, tok); + unget_char(ch1, tok); + return 1; + } if (!set_readline(tok, "utf-16-be")) return 0; tok->decoding_state = -1; - } else if (ch == 0xFF) { - ch = get_char(tok); - if (ch != 0xFE) - goto NON_BOM; + } else if (ch1 == 0xFF) { + ch2 = get_char(tok); + if (ch2 != 0xFE) { + unget_char(ch2, tok); + unget_char(ch1, tok); + return 1; + } if (!set_readline(tok, "utf-16-le")) return 0; tok->decoding_state = -1; #endif } else { - unget_char(ch, tok); + unget_char(ch1, tok); return 1; } if (tok->encoding != NULL) PyMem_FREE(tok->encoding); tok->encoding = new_string("utf-8", 5); /* resulting is in utf-8 */ return 1; - NON_BOM: - /* any token beginning with '\xEF', '\xFE', '\xFF' is a bad token */ - unget_char(0xFF, tok); /* XXX this will cause a syntax error */ - return 1; } /* Read a line of text from TOK into S, using the stream in TOK. From python-checkins at python.org Wed Mar 3 00:43:47 2010 From: python-checkins at python.org (benjamin.peterson) Date: Wed, 3 Mar 2010 00:43:47 +0100 (CET) Subject: [Python-checkins] r78604 - python/trunk/Lib/test/test_argparse.py Message-ID: <20100302234347.832EFEE989@mail.python.org> Author: benjamin.peterson Date: Wed Mar 3 00:43:47 2010 New Revision: 78604 Log: plug ref leaks Modified: python/trunk/Lib/test/test_argparse.py Modified: python/trunk/Lib/test/test_argparse.py ============================================================================== --- python/trunk/Lib/test/test_argparse.py (original) +++ python/trunk/Lib/test/test_argparse.py Wed Mar 3 00:43:47 2010 @@ -4178,6 +4178,10 @@ category=DeprecationWarning) test_support.run_unittest(__name__) + # Remove global references to avoid looking like we have refleaks. + RFile.seen = {} + WFile.seen = set() + if __name__ == '__main__': From python-checkins at python.org Wed Mar 3 00:46:43 2010 From: python-checkins at python.org (benjamin.peterson) Date: Wed, 3 Mar 2010 00:46:43 +0100 (CET) Subject: [Python-checkins] r78605 - in python/branches/py3k: Lib/test/test_argparse.py Message-ID: <20100302234643.11F34EE991@mail.python.org> Author: benjamin.peterson Date: Wed Mar 3 00:46:42 2010 New Revision: 78605 Log: Merged revisions 78604 via svnmerge from svn+ssh://pythondev at svn.python.org/python/trunk ........ r78604 | benjamin.peterson | 2010-03-02 17:43:47 -0600 (Tue, 02 Mar 2010) | 1 line plug ref leaks ........ Modified: python/branches/py3k/ (props changed) python/branches/py3k/Lib/test/test_argparse.py Modified: python/branches/py3k/Lib/test/test_argparse.py ============================================================================== --- python/branches/py3k/Lib/test/test_argparse.py (original) +++ python/branches/py3k/Lib/test/test_argparse.py Wed Mar 3 00:46:42 2010 @@ -4178,6 +4178,10 @@ category=DeprecationWarning) support.run_unittest(__name__) + # Remove global references to avoid looking like we have refleaks. + RFile.seen = {} + WFile.seen = set() + if __name__ == '__main__': From python-checkins at python.org Wed Mar 3 00:56:39 2010 From: python-checkins at python.org (florent.xicluna) Date: Wed, 3 Mar 2010 00:56:39 +0100 (CET) Subject: [Python-checkins] r78606 - python/trunk/Lib/test/test_pep277.py Message-ID: <20100302235639.21D78EEA3A@mail.python.org> Author: florent.xicluna Date: Wed Mar 3 00:56:38 2010 New Revision: 78606 Log: Fix wording. Modified: python/trunk/Lib/test/test_pep277.py Modified: python/trunk/Lib/test/test_pep277.py ============================================================================== --- python/trunk/Lib/test/test_pep277.py (original) +++ python/trunk/Lib/test/test_pep277.py Wed Mar 3 00:56:38 2010 @@ -38,8 +38,8 @@ f = open(name, 'w') except UnicodeEncodeError: if not os.path.supports_unicode_filenames: - raise unittest.SkipTest("test works only on NT+, and with " - "pseudo-Unicode filesystems") + raise unittest.SkipTest("only NT+ and systems with Unicode" + "-friendly filesystem encoding") f.write((name+'\n').encode("utf-8")) f.close() os.stat(name) From python-checkins at python.org Wed Mar 3 01:06:37 2010 From: python-checkins at python.org (florent.xicluna) Date: Wed, 3 Mar 2010 01:06:37 +0100 (CET) Subject: [Python-checkins] r78607 - in python/branches/py3k: Lib/test/test_pep277.py Misc/NEWS Message-ID: <20100303000637.D2B70FDAA@mail.python.org> Author: florent.xicluna Date: Wed Mar 3 01:06:37 2010 New Revision: 78607 Log: Merged revisions 78585,78594,78606 via svnmerge from svn+ssh://pythondev at svn.python.org/python/trunk ........ r78585 | florent.xicluna | 2010-03-02 22:34:45 +0100 (mar, 02 mar 2010) | 2 lines Tentatively enable test_pep277 on all platforms. ........ r78594 | florent.xicluna | 2010-03-02 23:34:11 +0100 (mar, 02 mar 2010) | 2 lines Test test_pep277 is only relevant for Unicode-friendly filesystems. ........ r78606 | florent.xicluna | 2010-03-03 00:56:38 +0100 (mer, 03 mar 2010) | 2 lines Fix wording. ........ Modified: python/branches/py3k/ (props changed) python/branches/py3k/Lib/test/test_pep277.py python/branches/py3k/Misc/NEWS Modified: python/branches/py3k/Lib/test/test_pep277.py ============================================================================== --- python/branches/py3k/Lib/test/test_pep277.py (original) +++ python/branches/py3k/Lib/test/test_pep277.py Wed Mar 3 01:06:37 2010 @@ -2,8 +2,6 @@ # open, os.open, os.stat. os.listdir, os.rename, os.remove, os.mkdir, os.chdir, os.rmdir import sys, os, unittest from test import support -if not os.path.supports_unicode_filenames: - raise unittest.SkipTest("test works only on NT+") filenames = [ 'abc', @@ -36,7 +34,12 @@ except OSError: pass for name in self.files: - f = open(name, 'wb') + try: + f = open(name, 'wb') + except UnicodeEncodeError: + if not os.path.supports_unicode_filenames: + raise unittest.SkipTest("only NT+ and systems with Unicode" + "-friendly filesystem encoding") f.write((name+'\n').encode("utf-8")) f.close() os.stat(name) @@ -51,6 +54,9 @@ raise support.TestFailed("Expected to fail calling '%s(%r)'" % (fn.__name__, filename)) except expected_exception as details: + # the "filename" exception attribute may be encoded + if isinstance(details.filename, bytes): + filename = filename.encode(sys.getfilesystemencoding()) if check_fn_in_exception and details.filename != filename: raise support.TestFailed("Function '%s(%r) failed with " "bad filename in the exception: %r" @@ -80,7 +86,7 @@ f1 = os.listdir(support.TESTFN) f2 = os.listdir(str(support.TESTFN.encode("utf-8"), sys.getfilesystemencoding())) - sf2 = set("\\".join((str(support.TESTFN), f)) + sf2 = set(os.path.join(str(support.TESTFN), f) for f in f2) self.assertEqual(len(f1), len(self.files)) self.assertEqual(sf2, set(self.files)) Modified: python/branches/py3k/Misc/NEWS ============================================================================== --- python/branches/py3k/Misc/NEWS (original) +++ python/branches/py3k/Misc/NEWS Wed Mar 3 01:06:37 2010 @@ -824,6 +824,9 @@ Tests ----- +- Issue #767675: enable test_pep277 on POSIX platforms with Unicode-friendly + filesystem encoding. + - Issue #6292: for the moment at least, the test suite runs cleanly if python is run with the -OO flag. Tests requiring docstrings are skipped. From nnorwitz at gmail.com Wed Mar 3 01:13:36 2010 From: nnorwitz at gmail.com (Neal Norwitz) Date: Tue, 2 Mar 2010 19:13:36 -0500 Subject: [Python-checkins] Python Regression Test Failures refleak (1) Message-ID: <20100303001336.GA4008@kbk-i386-bb.psfb.org> More important issues: ---------------------- test_distutils leaked [-25, 0, 0] references, sum=-25 Less important issues: ---------------------- test_popen2 leaked [29, -25, -4] references, sum=0 From python-checkins at python.org Wed Mar 3 01:18:50 2010 From: python-checkins at python.org (victor.stinner) Date: Wed, 3 Mar 2010 01:18:50 +0100 (CET) Subject: [Python-checkins] r78608 - in python/branches/py3k: Lib/test/test_pep263.py Misc/NEWS Parser/tokenizer.c Message-ID: <20100303001850.2CAA0FE50@mail.python.org> Author: victor.stinner Date: Wed Mar 3 01:18:49 2010 New Revision: 78608 Log: Merged revisions 78603 via svnmerge from svn+ssh://pythondev at svn.python.org/python/trunk ........ r78603 | victor.stinner | 2010-03-03 00:20:02 +0100 (mer., 03 mars 2010) | 5 lines Issue #7820: The parser tokenizer restores all bytes in the right if the BOM check fails. Fix an assertion in pydebug mode. ........ Modified: python/branches/py3k/ (props changed) python/branches/py3k/Lib/test/test_pep263.py python/branches/py3k/Misc/NEWS python/branches/py3k/Parser/tokenizer.c Modified: python/branches/py3k/Lib/test/test_pep263.py ============================================================================== --- python/branches/py3k/Lib/test/test_pep263.py (original) +++ python/branches/py3k/Lib/test/test_pep263.py Wed Mar 3 01:18:49 2010 @@ -44,6 +44,17 @@ self.assertEqual(len(d['a']), len(d['b'])) self.assertEqual(ascii(d['a']), ascii(d['b'])) + def test_issue7820(self): + # Ensure that check_bom() restores all bytes in the right order if + # check_bom() fails in pydebug mode: a buffer starts with the first + # byte of a valid BOM, but next bytes are different + + # one byte in common with the UTF-16-LE BOM + self.assertRaises(SyntaxError, eval, b'\xff\x20') + + # two bytes in common with the UTF-8 BOM + self.assertRaises(SyntaxError, eval, b'\xef\xbb\x20') + def test_main(): support.run_unittest(PEP263Test) Modified: python/branches/py3k/Misc/NEWS ============================================================================== --- python/branches/py3k/Misc/NEWS (original) +++ python/branches/py3k/Misc/NEWS Wed Mar 3 01:18:49 2010 @@ -12,6 +12,9 @@ Core and Builtins ----------------- +- Issue #7820: The parser tokenizer restores all bytes in the right if + the BOM check fails. + - Handle errors from looking up __prepare__ correctly. - Issue #5939: Add additional runtime checking to ensure a valid capsule Modified: python/branches/py3k/Parser/tokenizer.c ============================================================================== --- python/branches/py3k/Parser/tokenizer.c (original) +++ python/branches/py3k/Parser/tokenizer.c Wed Mar 3 01:18:49 2010 @@ -318,46 +318,51 @@ int set_readline(struct tok_state *, const char *), struct tok_state *tok) { - int ch = get_char(tok); + int ch1, ch2, ch3; + ch1 = get_char(tok); tok->decoding_state = STATE_RAW; - if (ch == EOF) { + if (ch1 == EOF) { return 1; - } else if (ch == 0xEF) { - ch = get_char(tok); - if (ch != 0xBB) { - unget_char(ch, tok); - unget_char(0xEF, tok); - /* any token beginning with '\xEF' is a bad token */ + } else if (ch1 == 0xEF) { + ch2 = get_char(tok); + if (ch2 != 0xBB) { + unget_char(ch2, tok); + unget_char(ch1, tok); return 1; } - ch = get_char(tok); - if (ch != 0xBF) { - unget_char(ch, tok); - unget_char(0xBB, tok); - unget_char(0xEF, tok); - /* any token beginning with '\xEF' is a bad token */ + ch3 = get_char(tok); + if (ch3 != 0xBF) { + unget_char(ch3, tok); + unget_char(ch2, tok); + unget_char(ch1, tok); return 1; } #if 0 /* Disable support for UTF-16 BOMs until a decision is made whether this needs to be supported. */ - } else if (ch == 0xFE) { - ch = get_char(tok); - if (ch != 0xFF) - goto NON_BOM; + } else if (ch1 == 0xFE) { + ch2 = get_char(tok); + if (ch2 != 0xFF) { + unget_char(ch2, tok); + unget_char(ch1, tok); + return 1; + } if (!set_readline(tok, "utf-16-be")) return 0; tok->decoding_state = STATE_NORMAL; - } else if (ch == 0xFF) { - ch = get_char(tok); - if (ch != 0xFE) - goto NON_BOM; + } else if (ch1 == 0xFF) { + ch2 = get_char(tok); + if (ch2 != 0xFE) { + unget_char(ch2, tok); + unget_char(ch1, tok); + return 1; + } if (!set_readline(tok, "utf-16-le")) return 0; tok->decoding_state = STATE_NORMAL; #endif } else { - unget_char(ch, tok); + unget_char(ch1, tok); return 1; } if (tok->encoding != NULL) From python-checkins at python.org Wed Mar 3 01:22:22 2010 From: python-checkins at python.org (victor.stinner) Date: Wed, 3 Mar 2010 01:22:22 +0100 (CET) Subject: [Python-checkins] r78609 - in python/branches/release31-maint: Lib/test/test_pep263.py Misc/NEWS Parser/tokenizer.c Message-ID: <20100303002222.1F841FE63@mail.python.org> Author: victor.stinner Date: Wed Mar 3 01:22:21 2010 New Revision: 78609 Log: Merged revisions 78608 via svnmerge from svn+ssh://pythondev at svn.python.org/python/branches/py3k ................ r78608 | victor.stinner | 2010-03-03 01:18:49 +0100 (mer., 03 mars 2010) | 12 lines Merged revisions 78603 via svnmerge from svn+ssh://pythondev at svn.python.org/python/trunk ........ r78603 | victor.stinner | 2010-03-03 00:20:02 +0100 (mer., 03 mars 2010) | 5 lines Issue #7820: The parser tokenizer restores all bytes in the right if the BOM check fails. Fix an assertion in pydebug mode. ........ ................ Modified: python/branches/release31-maint/ (props changed) python/branches/release31-maint/Lib/test/test_pep263.py python/branches/release31-maint/Misc/NEWS python/branches/release31-maint/Parser/tokenizer.c Modified: python/branches/release31-maint/Lib/test/test_pep263.py ============================================================================== --- python/branches/release31-maint/Lib/test/test_pep263.py (original) +++ python/branches/release31-maint/Lib/test/test_pep263.py Wed Mar 3 01:22:21 2010 @@ -44,6 +44,17 @@ self.assertEqual(len(d['a']), len(d['b'])) self.assertEqual(ascii(d['a']), ascii(d['b'])) + def test_issue7820(self): + # Ensure that check_bom() restores all bytes in the right order if + # check_bom() fails in pydebug mode: a buffer starts with the first + # byte of a valid BOM, but next bytes are different + + # one byte in common with the UTF-16-LE BOM + self.assertRaises(SyntaxError, eval, b'\xff\x20') + + # two bytes in common with the UTF-8 BOM + self.assertRaises(SyntaxError, eval, b'\xef\xbb\x20') + def test_main(): support.run_unittest(PEP263Test) Modified: python/branches/release31-maint/Misc/NEWS ============================================================================== --- python/branches/release31-maint/Misc/NEWS (original) +++ python/branches/release31-maint/Misc/NEWS Wed Mar 3 01:22:21 2010 @@ -12,6 +12,9 @@ Core and Builtins ----------------- +- Issue #7820: The parser tokenizer restores all bytes in the right if + the BOM check fails. + - Handle errors from looking up __prepare__ correctly. - Issue #5939: Add additional runtime checking to ensure a valid capsule Modified: python/branches/release31-maint/Parser/tokenizer.c ============================================================================== --- python/branches/release31-maint/Parser/tokenizer.c (original) +++ python/branches/release31-maint/Parser/tokenizer.c Wed Mar 3 01:22:21 2010 @@ -316,46 +316,51 @@ int set_readline(struct tok_state *, const char *), struct tok_state *tok) { - int ch = get_char(tok); + int ch1, ch2, ch3; + ch1 = get_char(tok); tok->decoding_state = STATE_RAW; - if (ch == EOF) { + if (ch1 == EOF) { return 1; - } else if (ch == 0xEF) { - ch = get_char(tok); - if (ch != 0xBB) { - unget_char(ch, tok); - unget_char(0xEF, tok); - /* any token beginning with '\xEF' is a bad token */ + } else if (ch1 == 0xEF) { + ch2 = get_char(tok); + if (ch2 != 0xBB) { + unget_char(ch2, tok); + unget_char(ch1, tok); return 1; } - ch = get_char(tok); - if (ch != 0xBF) { - unget_char(ch, tok); - unget_char(0xBB, tok); - unget_char(0xEF, tok); - /* any token beginning with '\xEF' is a bad token */ + ch3 = get_char(tok); + if (ch3 != 0xBF) { + unget_char(ch3, tok); + unget_char(ch2, tok); + unget_char(ch1, tok); return 1; } #if 0 /* Disable support for UTF-16 BOMs until a decision is made whether this needs to be supported. */ - } else if (ch == 0xFE) { - ch = get_char(tok); - if (ch != 0xFF) - goto NON_BOM; + } else if (ch1 == 0xFE) { + ch2 = get_char(tok); + if (ch2 != 0xFF) { + unget_char(ch2, tok); + unget_char(ch1, tok); + return 1; + } if (!set_readline(tok, "utf-16-be")) return 0; tok->decoding_state = STATE_NORMAL; - } else if (ch == 0xFF) { - ch = get_char(tok); - if (ch != 0xFE) - goto NON_BOM; + } else if (ch1 == 0xFF) { + ch2 = get_char(tok); + if (ch2 != 0xFE) { + unget_char(ch2, tok); + unget_char(ch1, tok); + return 1; + } if (!set_readline(tok, "utf-16-le")) return 0; tok->decoding_state = STATE_NORMAL; #endif } else { - unget_char(ch, tok); + unget_char(ch1, tok); return 1; } if (tok->encoding != NULL) From python-checkins at python.org Wed Mar 3 01:43:44 2010 From: python-checkins at python.org (victor.stinner) Date: Wed, 3 Mar 2010 01:43:44 +0100 (CET) Subject: [Python-checkins] r78610 - python/trunk/Modules/threadmodule.c Message-ID: <20100303004344.6E0F3EEA34@mail.python.org> Author: victor.stinner Date: Wed Mar 3 01:43:44 2010 New Revision: 78610 Log: Issue #3299: fix thread.allocate_lock() error handler, replace PyObject_Del() by Py_DECREF() to fix a crash in pydebug mode. Modified: python/trunk/Modules/threadmodule.c Modified: python/trunk/Modules/threadmodule.c ============================================================================== --- python/trunk/Modules/threadmodule.c (original) +++ python/trunk/Modules/threadmodule.c Wed Mar 3 01:43:44 2010 @@ -27,14 +27,15 @@ static void lock_dealloc(lockobject *self) { - assert(self->lock_lock); if (self->in_weakreflist != NULL) PyObject_ClearWeakRefs((PyObject *) self); - /* Unlock the lock so it's safe to free it */ - PyThread_acquire_lock(self->lock_lock, 0); - PyThread_release_lock(self->lock_lock); - - PyThread_free_lock(self->lock_lock); + if (self->lock_lock != NULL) { + /* Unlock the lock so it's safe to free it */ + PyThread_acquire_lock(self->lock_lock, 0); + PyThread_release_lock(self->lock_lock); + + PyThread_free_lock(self->lock_lock); + } PyObject_Del(self); } @@ -165,9 +166,9 @@ self->lock_lock = PyThread_allocate_lock(); self->in_weakreflist = NULL; if (self->lock_lock == NULL) { - PyObject_Del(self); - self = NULL; + Py_DECREF(self); PyErr_SetString(ThreadError, "can't allocate lock"); + return NULL; } return self; } From python-checkins at python.org Wed Mar 3 01:50:12 2010 From: python-checkins at python.org (victor.stinner) Date: Wed, 3 Mar 2010 01:50:12 +0100 (CET) Subject: [Python-checkins] r78611 - in python/branches/py3k: Modules/_threadmodule.c Message-ID: <20100303005012.36496EE9E1@mail.python.org> Author: victor.stinner Date: Wed Mar 3 01:50:12 2010 New Revision: 78611 Log: Merged revisions 78610 via svnmerge from svn+ssh://pythondev at svn.python.org/python/trunk ........ r78610 | victor.stinner | 2010-03-03 01:43:44 +0100 (mer., 03 mars 2010) | 3 lines Issue #3299: fix thread.allocate_lock() error handler, replace PyObject_Del() by Py_DECREF() to fix a crash in pydebug mode. ........ Modified: python/branches/py3k/ (props changed) python/branches/py3k/Modules/_threadmodule.c Modified: python/branches/py3k/Modules/_threadmodule.c ============================================================================== --- python/branches/py3k/Modules/_threadmodule.c (original) +++ python/branches/py3k/Modules/_threadmodule.c Wed Mar 3 01:50:12 2010 @@ -27,14 +27,15 @@ static void lock_dealloc(lockobject *self) { - assert(self->lock_lock); if (self->in_weakreflist != NULL) PyObject_ClearWeakRefs((PyObject *) self); - /* Unlock the lock so it's safe to free it */ - PyThread_acquire_lock(self->lock_lock, 0); - PyThread_release_lock(self->lock_lock); - - PyThread_free_lock(self->lock_lock); + if (self->lock_lock != NULL) { + /* Unlock the lock so it's safe to free it */ + PyThread_acquire_lock(self->lock_lock, 0); + PyThread_release_lock(self->lock_lock); + + PyThread_free_lock(self->lock_lock); + } PyObject_Del(self); } @@ -432,9 +433,9 @@ self->lock_lock = PyThread_allocate_lock(); self->in_weakreflist = NULL; if (self->lock_lock == NULL) { - PyObject_Del(self); - self = NULL; + Py_DECREF(self); PyErr_SetString(ThreadError, "can't allocate lock"); + return NULL; } return self; } From python-checkins at python.org Wed Mar 3 01:51:28 2010 From: python-checkins at python.org (victor.stinner) Date: Wed, 3 Mar 2010 01:51:28 +0100 (CET) Subject: [Python-checkins] r78612 - in python/branches/release31-maint: Modules/_threadmodule.c Message-ID: <20100303005128.DF0FCEE9FB@mail.python.org> Author: victor.stinner Date: Wed Mar 3 01:51:28 2010 New Revision: 78612 Log: Merged revisions 78611 via svnmerge from svn+ssh://pythondev at svn.python.org/python/branches/py3k ................ r78611 | victor.stinner | 2010-03-03 01:50:12 +0100 (mer., 03 mars 2010) | 10 lines Merged revisions 78610 via svnmerge from svn+ssh://pythondev at svn.python.org/python/trunk ........ r78610 | victor.stinner | 2010-03-03 01:43:44 +0100 (mer., 03 mars 2010) | 3 lines Issue #3299: fix thread.allocate_lock() error handler, replace PyObject_Del() by Py_DECREF() to fix a crash in pydebug mode. ........ ................ Modified: python/branches/release31-maint/ (props changed) python/branches/release31-maint/Modules/_threadmodule.c Modified: python/branches/release31-maint/Modules/_threadmodule.c ============================================================================== --- python/branches/release31-maint/Modules/_threadmodule.c (original) +++ python/branches/release31-maint/Modules/_threadmodule.c Wed Mar 3 01:51:28 2010 @@ -25,12 +25,13 @@ static void lock_dealloc(lockobject *self) { - assert(self->lock_lock); - /* Unlock the lock so it's safe to free it */ - PyThread_acquire_lock(self->lock_lock, 0); - PyThread_release_lock(self->lock_lock); - - PyThread_free_lock(self->lock_lock); + if (self->lock_lock != NULL) { + /* Unlock the lock so it's safe to free it */ + PyThread_acquire_lock(self->lock_lock, 0); + PyThread_release_lock(self->lock_lock); + + PyThread_free_lock(self->lock_lock); + } PyObject_Del(self); } @@ -160,9 +161,9 @@ return NULL; self->lock_lock = PyThread_allocate_lock(); if (self->lock_lock == NULL) { - PyObject_Del(self); - self = NULL; + Py_DECREF(self); PyErr_SetString(ThreadError, "can't allocate lock"); + return NULL; } return self; } From python-checkins at python.org Wed Mar 3 02:55:09 2010 From: python-checkins at python.org (benjamin.peterson) Date: Wed, 3 Mar 2010 02:55:09 +0100 (CET) Subject: [Python-checkins] r78613 - python/trunk/Doc/library/argparse.rst Message-ID: <20100303015509.F40A8EE982@mail.python.org> Author: benjamin.peterson Date: Wed Mar 3 02:55:09 2010 New Revision: 78613 Log: edit for style Modified: python/trunk/Doc/library/argparse.rst Modified: python/trunk/Doc/library/argparse.rst ============================================================================== --- python/trunk/Doc/library/argparse.rst (original) +++ python/trunk/Doc/library/argparse.rst Wed Mar 3 02:55:09 2010 @@ -9,17 +9,16 @@ The :mod:`argparse` module makes it easy to write user friendly command line -interfaces. You define what arguments your program requires, and :mod:`argparse` +interfaces. The program defines what arguments it requires, and :mod:`argparse` will figure out how to parse those out of :data:`sys.argv`. The :mod:`argparse` -module also automatically generates help and usage messages based on the -arguments you have defined, and issues errors when users give your program -invalid arguments. +module also automatically generates help and usage messages and issues errors +when users give the program invalid arguments. Example ------- -As an example, the following code is a Python program that takes a list of -integers and produces either the sum or the max:: +The following code is a Python program that takes a list of integers and +produces either the sum or the max:: import argparse @@ -68,24 +67,23 @@ Creating a parser ^^^^^^^^^^^^^^^^^ -Pretty much every script that uses the :mod:`argparse` module will start out by -creating an :class:`ArgumentParser` object:: +Mose uses of the :mod:`argparse` module will start out by creating an +:class:`ArgumentParser` object:: >>> parser = argparse.ArgumentParser(description='Process some integers.') The :class:`ArgumentParser` object will hold all the information necessary to -parse the command line into a more manageable form for your program. +parse the command line into python data types. Adding arguments ^^^^^^^^^^^^^^^^ -Once you've created an :class:`ArgumentParser`, you'll want to fill it with -information about your program arguments. You typically do this by making calls -to the :meth:`add_argument` method. Generally, these calls tell the -:class:`ArgumentParser` how to take the strings on the command line and turn -them into objects for you. This information is stored and used when -:meth:`parse_args` is called. For example, if we add some arguments like this:: +Filling an :class:`ArgumentParser` with information about program arguments is +done by making calls to the :meth:`~ArgumentParser.add_argument` method. +Generally, these calls tell the :class:`ArgumentParser` how to take the strings +on the command line and turn them into objects. This information is stored and +used when :meth:`~ArgumentParser.parse_args` is called. For example:: >>> parser.add_argument('integers', metavar='N', type=int, nargs='+', ... help='an integer for the accumulator') @@ -93,7 +91,7 @@ ... const=sum, default=max, ... help='sum the integers (default: find the max)') -when we later call :meth:`parse_args`, we can expect it to return an object with +Later, calling :meth:`parse_args` will return an object with two attributes, ``integers`` and ``accumulate``. The ``integers`` attribute will be a list of one or more ints, and the ``accumulate`` attribute will be either the :func:`sum` function, if ``--sum`` was specified at the command line, @@ -102,9 +100,8 @@ Parsing arguments ^^^^^^^^^^^^^^^^^ -Once an :class:`ArgumentParser` has been initialized with appropriate calls to -:meth:`add_argument`, it can be instructed to parse the command-line args by -calling the :meth:`parse_args` method. This will inspect the command-line, +:class:`ArgumentParser` parses args through the +:meth:`~ArgumentParser.parse_args` method. This will inspect the command-line, convert each arg to the appropriate type and then invoke the appropriate action. In most cases, this means a simple namespace object will be built up from attributes parsed out of the command-line:: @@ -112,10 +109,9 @@ >>> parser.parse_args(['--sum', '7', '-1', '42']) Namespace(accumulate=, integers=[7, -1, 42]) -In a script, :meth:`parse_args` will typically be called with no arguments, and -the :class:`ArgumentParser` will automatically determine the command-line args -from :data:`sys.argv`. That's pretty much it. You're now ready to go write -some command line interfaces! +In a script, :meth:`~ArgumentParser.parse_args` will typically be called with no +arguments, and the :class:`ArgumentParser` will automatically determine the +command-line args from :data:`sys.argv`. ArgumentParser objects @@ -130,41 +126,41 @@ * epilog_ - Text to display after the argument help. - * add_help_ - Add a -h/--help option to the parser. (default: True) + * add_help_ - Add a -h/--help option to the parser. (default: ``True``) * argument_default_ - Set the global default value for arguments. - (default: None) + (default: ``None``) - * parents_ - A list of :class:ArgumentParser objects whose arguments should + * parents_ - A list of :class:`ArgumentParser` objects whose arguments should also be included. * prefix_chars_ - The set of characters that prefix optional arguments. (default: '-') * fromfile_prefix_chars_ - The set of characters that prefix files from - which additional arguments should be read. (default: None) + which additional arguments should be read. (default: ``None``) * formatter_class_ - A class for customizing the help output. * conflict_handler_ - Usually unnecessary, defines strategy for resolving conflicting optionals. - * prog_ - Usually unnecessary, the name of the program - (default: ``sys.argv[0]``) + * prog_ - The name of the program (default: + :data:`sys.argv[0]`) - * usage_ - Usually unnecessary, the string describing the program usage - (default: generated) + * usage_ - The string describing the program usage (default: generated) - The following sections describe how each of these are used. +The following sections describe how each of these are used. description ^^^^^^^^^^^ -Most calls to the ArgumentParser constructor will use the ``description=`` -keyword argument. This argument gives a brief description of what the program -does and how it works. In help messages, the description is displayed between -the command-line usage string and the help messages for the various arguments:: +Most calls to the :class:`ArgumentParser` constructor will use the +``description=`` keyword argument. This argument gives a brief description of +what the program does and how it works. In help messages, the description is +displayed between the command-line usage string and the help messages for the +various arguments:: >>> parser = argparse.ArgumentParser(description='A foo that bars') >>> parser.print_help() @@ -201,7 +197,7 @@ As with the description_ argument, the ``epilog=`` text is by default line-wrapped, but this behavior can be adjusted with the formatter_class_ -argument to ArgumentParser. +argument to :class:`ArgumentParser`. add_help @@ -228,7 +224,7 @@ Occasionally, it may be useful to disable the addition of this help option. This can be achieved by passing ``False`` as the ``add_help=`` argument to -ArgumentParser:: +:class:`ArgumentParser`:: >>> parser = argparse.ArgumentParser(prog='PROG', add_help=False) >>> parser.add_argument('--foo', help='foo help') @@ -261,14 +257,15 @@ fromfile_prefix_chars ^^^^^^^^^^^^^^^^^^^^^ -Sometimes, e.g. for particularly long argument lists, it may make sense to keep -the list of arguments in a file rather than typing it out at the command line. -If the ``fromfile_prefix_chars=`` argument is given to the ArgumentParser -constructor, then arguments that start with any of the specified characters will -be treated as files, and will be replaced by the arguments they contain. For -example:: +Sometimes, for example when dealing with a particularly long argument lists, it +may make sense to keep the list of arguments in a file rather than typing it out +at the command line. If the ``fromfile_prefix_chars=`` argument is given to the +:class:`ArgumentParser` constructor, then arguments that start with any of the +specified characters will be treated as files, and will be replaced by the +arguments they contain. For example:: - >>> open('args.txt', 'w').write('-f\nbar') + >>> with open('args.txt', 'w') as fp: + ... fp.write('-f\nbar') >>> parser = argparse.ArgumentParser(fromfile_prefix_chars='@') >>> parser.add_argument('-f') >>> parser.parse_args(['-f', 'foo', '@args.txt']) @@ -290,9 +287,9 @@ :meth:`add_argument` or by calling the :meth:`set_defaults` methods with a specific set of name-value pairs. Sometimes however, it may be useful to specify a single parser-wide default for arguments. This can be accomplished by -passing the ``argument_default=`` keyword argument to ArgumentParser. For -example, to globally suppress attribute creation on :meth:`parse_args` calls, we -supply ``argument_default=SUPPRESS``:: +passing the ``argument_default=`` keyword argument to :class:`ArgumentParser`. +For example, to globally suppress attribute creation on :meth:`parse_args` +calls, we supply ``argument_default=SUPPRESS``:: >>> parser = argparse.ArgumentParser(argument_default=argparse.SUPPRESS) >>> parser.add_argument('--foo') @@ -307,12 +304,11 @@ ^^^^^^^ Sometimes, several parsers share a common set of arguments. Rather than -repeating the definitions of these arguments, you can define a single parser -with all the shared arguments and then use the ``parents=`` argument to -ArgumentParser to have these "inherited". The ``parents=`` argument takes a -list of ArgumentParser objects, collects all the positional and optional actions -from them, and adds these actions to the ArgumentParser object being -constructed:: +repeating the definitions of these arguments, a single parser with all the +shared arguments and passed to ``parents=`` argument to :class:`ArgumentParser` +can be used. The ``parents=`` argument takes a list of :class:`ArgumentParser` +objects, collects all the positional and optional actions from them, and adds +these actions to the :class:`ArgumentParser` object being constructed:: >>> parent_parser = argparse.ArgumentParser(add_help=False) >>> parent_parser.add_argument('--parent', type=int) @@ -328,23 +324,23 @@ Namespace(bar='YYY', parent=None) Note that most parent parsers will specify ``add_help=False``. Otherwise, the -ArgumentParser will see two ``-h/--help`` options (one in the parent and one in -the child) and raise an error. +:class:`ArgumentParser` will see two ``-h/--help`` options (one in the parent +and one in the child) and raise an error. formatter_class ^^^^^^^^^^^^^^^ -ArgumentParser objects allow the help formatting to be customized by specifying -an alternate formatting class. Currently, there are three such classes: -:class:`argparse.RawDescriptionHelpFormatter`, +:class:`ArgumentParser` objects allow the help formatting to be customized by +specifying an alternate formatting class. Currently, there are three such +classes: :class:`argparse.RawDescriptionHelpFormatter`, :class:`argparse.RawTextHelpFormatter` and :class:`argparse.ArgumentDefaultsHelpFormatter`. The first two allow more control over how textual descriptions are displayed, while the last automatically adds information about argument default values. -By default, ArgumentParser objects line-wrap the description_ and epilog_ texts -in command-line help messages:: +By default, :class:`ArgumentParser` objects line-wrap the description_ and +epilog_ texts in command-line help messages:: >>> parser = argparse.ArgumentParser( ... prog='PROG', @@ -366,10 +362,9 @@ likewise for this epilog whose whitespace will be cleaned up and whose words will be wrapped across a couple lines -When you have description_ and epilog_ that is already correctly formatted and -should not be line-wrapped, you can indicate this by passing -``argparse.RawDescriptionHelpFormatter`` as the ``formatter_class=`` argument to -ArgumentParser:: +Passing :class:`argparse.RawDescriptionHelpFormatter` as ``formatter_class=`` +indicates that description_ and eiplog_ are already correctly formatted and +should not be line-wrapped:: >>> parser = argparse.ArgumentParser( ... prog='PROG', @@ -393,10 +388,10 @@ optional arguments: -h, --help show this help message and exit -If you want to maintain whitespace for all sorts of help text (including -argument descriptions), you can use ``argparse.RawTextHelpFormatter``. +:class:`RawTextHelpFormatter` maintains whitespace for all sorts of help text +including argument descriptions. -The other formatter class available, ``argparse.ArgumentDefaultsHelpFormatter``, +The other formatter class available, :class:`ArgumentDefaultsHelpFormatter`, will add information about the default value of each of the arguments:: >>> parser = argparse.ArgumentParser( @@ -418,9 +413,10 @@ conflict_handler ^^^^^^^^^^^^^^^^ -ArgumentParser objects do not allow two actions with the same option string. By -default, ArgumentParser objects will raise an exception if you try to create an -argument with an option string that is already in use:: +:class:`ArgumentParser` objects do not allow two actions with the same option +string. By default, :class:`ArgumentParser` objects raises an exception if an +attempt is made to create an argument with an option string that is already in +use:: >>> parser = argparse.ArgumentParser(prog='PROG') >>> parser.add_argument('-f', '--foo', help='old foo help') @@ -432,7 +428,7 @@ Sometimes (e.g. when using parents_) it may be useful to simply override any older arguments with the same option string. To get this behavior, the value ``'resolve'`` can be supplied to the ``conflict_handler=`` argument of -ArgumentParser:: +:class:`ArgumentParser`:: >>> parser = argparse.ArgumentParser(prog='PROG', conflict_handler='resolve') >>> parser.add_argument('-f', '--foo', help='old foo help') @@ -445,20 +441,20 @@ -f FOO old foo help --foo FOO new foo help -Note that ArgumentParser objects only remove an action if all of its option -strings are overridden. So, in the example above, the old ``-f/--foo`` action -is retained as the ``-f`` action, because only the ``--foo`` option string was -overridden. +Note that :class:`ArgumentParser` objects only remove an action if all of its +option strings are overridden. So, in the example above, the old ``-f/--foo`` +action is retained as the ``-f`` action, because only the ``--foo`` option +string was overridden. prog ^^^^ -By default, ArgumentParser objects use ``sys.argv[0]`` to determine how to -display the name of the program in help messages. This default is almost always -what you want because it will make the help messages match what your users have -typed at the command line. For example, consider a file named ``myprogram.py`` -with the following code:: +By default, :class:`ArgumentParser` objects uses ``sys.argv[0]`` to determine +how to display the name of the program in help messages. This default is almost +always desirable because it will make the help messages match how the pgoram was +invoked on the command line. For example, consider a file named +``myprogram.py`` with the following code:: import argparse parser = argparse.ArgumentParser() @@ -483,7 +479,7 @@ --foo FOO foo help To change this default behavior, another value can be supplied using the -``prog=`` argument to ArgumentParser:: +``prog=`` argument to :class:`ArgumentParser`:: >>> parser = argparse.ArgumentParser(prog='myprogram') >>> parser.print_help() @@ -511,7 +507,7 @@ usage ^^^^^ -By default, ArgumentParser objects calculate the usage message from the +By default, :class:`ArgumentParser` calculates the usage message from the arguments it contains:: >>> parser = argparse.ArgumentParser(prog='PROG') @@ -527,9 +523,7 @@ -h, --help show this help message and exit --foo [FOO] foo help -If the default usage message is not appropriate for your application, you can -supply your own usage message using the ``usage=`` keyword argument to -ArgumentParser:: +The default message can be overridden with the ``usage=`` keyword argument:: >>> parser = argparse.ArgumentParser(prog='PROG', usage='%(prog)s [options]') >>> parser.add_argument('--foo', nargs='?', help='foo help') @@ -544,14 +538,14 @@ -h, --help show this help message and exit --foo [FOO] foo help -Note you can use the ``%(prog)s`` format specifier to fill in the program name -in your usage messages. +The ``%(prog)s`` format specifier is available to fill in the program name in +your usage messages. The add_argument() method ------------------------- -.. method:: add_argument(name or flags..., [action], [nargs], [const], [default], [type], [choices], [required], [help], [metavar], [dest]) +.. method:: ArgumentParser.add_argument(name or flags..., [action], [nargs], [const], [default], [type], [choices], [required], [help], [metavar], [dest]) Define how a single command line argument should be parsed. Each parameter has its own more detailed description below, but in short they are: @@ -583,16 +577,16 @@ * dest_ - The name of the attribute to be added to the object returned by :meth:`parse_args`. - The following sections describe how each of these are used. +The following sections describe how each of these are used. name or flags ^^^^^^^^^^^^^ -The :meth:`add_argument` method needs to know whether you're expecting an -optional argument, e.g. ``-f`` or ``--foo``, or a positional argument, e.g. a -list of filenames. The first arguments passed to :meth:`add_argument` must -therefore be either a series of flags, or a simple argument name. For example, -an optional argument could be created like:: +The :meth:`add_argument` method must know whether an optional argument, like +``-f`` or ``--foo``, or a positional argument, like a list of filenames, is +expected. The first arguments passed to :meth:`add_argument` must therefore be +either a series of flags, or a simple argument name. For example, an optional +argument could be created like:: >>> parser.add_argument('-f', '--foo') @@ -620,10 +614,8 @@ :class:`ArgumentParser` objects associate command-line args with actions. These actions can do just about anything with the command-line args associated with them, though most actions simply add an attribute to the object returned by -:meth:`parse_args`. When you specify a new argument using the -:meth:`add_argument` method, you can indicate how the command-line args should -be handled by specifying the ``action`` keyword argument. The supported actions -are: +:meth:`parse_args`. The ``action`` keyword argument specifies how the +command-line args should be handled. The supported actions are: * ``'store'`` - This just stores the argument's value. This is the default action. For example:: @@ -634,10 +626,9 @@ Namespace(foo='1') * ``'store_const'`` - This stores the value specified by the const_ keyword - argument. Note that the const_ keyword argument defaults to ``None``, so - you'll almost always need to provide a value for it. The ``'store_const'`` - action is most commonly used with optional arguments that specify some sort - of flag. For example:: + argument. (Note that the const_ keyword argument defaults to the rather + unhelpful ``None``.) The ``'store_const'`` action is most commonly used with + optional arguments that specify some sort of flag. For example:: >>> parser = argparse.ArgumentParser() >>> parser.add_argument('--foo', action='store_const', const=42) @@ -645,8 +636,8 @@ Namespace(foo=42) * ``'store_true'`` and ``'store_false'`` - These store the values ``True`` and - ``False`` respectively. These are basically special cases of - ``'store_const'``. For example:: + ``False`` respectively. These are special cases of ``'store_const'``. For + example:: >>> parser = argparse.ArgumentParser() >>> parser.add_argument('--foo', action='store_true') @@ -655,8 +646,8 @@ Namespace(bar=False, foo=True) * ``'append'`` - This stores a list, and appends each argument value to the - list. This is useful when you want to allow an option to be specified - multiple times. Example usage:: + list. This is useful to allow an option to be specified multiple times. + Example usage:: >>> parser = argparse.ArgumentParser() >>> parser.add_argument('--foo', action='append') @@ -664,10 +655,10 @@ Namespace(foo=['1', '2']) * ``'append_const'`` - This stores a list, and appends the value specified by - the const_ keyword argument to the list. Note that the const_ keyword - argument defaults to ``None``, so you'll almost always need to provide a value - for it. The ``'append_const'`` action is typically useful when you want - multiple arguments to store constants to the same list, for example:: + the const_ keyword argument to the list. (Note that the const_ keyword + argument defaults to ``None``.) The ``'append_const'`` action is typically + useful when multiple arguments need to store constants to the same list. For + example:: >>> parser = argparse.ArgumentParser() >>> parser.add_argument('--str', dest='types', action='append_const', const=str) @@ -686,9 +677,9 @@ PROG 2.0 You can also specify an arbitrary action by passing an object that implements -the Action API. The easiest way to do this is to extend ``argparse.Action``, -supplying an appropriate :meth:`__call__` method. The ``__call__`` method -accepts four parameters: +the Action API. The easiest way to do this is to extend +:class:`argparse.Action`, supplying an appropriate ``__call__`` method. The +``__call__`` method should accept four parameters: * ``parser`` - The ArgumentParser object which contains this action. @@ -703,7 +694,7 @@ The ``option_string`` argument is optional, and will be absent if the action is associated with a positional argument. -So for example:: +An example of a custom action:: >>> class FooAction(argparse.Action): ... def __call__(self, parser, namespace, values, option_string=None): @@ -724,9 +715,9 @@ ^^^^^ ArgumentParser objects usually associate a single command-line argument with a -single action to be taken. In the situations where you'd like to associate a -different number of command-line arguments with a single action, you can use the -``nargs`` keyword argument to :meth:`add_argument`. The supported values are: +single action to be taken. The ``nargs`` keyword argument associates a +different number of command-line arguments with a single action.. The supported +values are: * N (an integer). N args from the command-line will be gathered together into a list. For example:: @@ -846,8 +837,8 @@ Namespace(foo=42) -If you don't want to see an attribute when an option was not present at the -command line, you can supply ``default=argparse.SUPPRESS``:: +Providing ``default=argparse.SUPPRESS`` causes no attribute to be added if the +command-line argument was not present.:: >>> parser = argparse.ArgumentParser() >>> parser.add_argument('--foo', default=argparse.SUPPRESS) @@ -862,10 +853,10 @@ By default, ArgumentParser objects read command-line args in as simple strings. However, quite often the command-line string should instead be interpreted as -another type, e.g. :class:`float`, :class:`int` or :class:`file`. The ``type`` -keyword argument of :meth:`add_argument` allows any necessary type-checking and -type-conversions to be performed. Many common builtin types can be used -directly as the value of the ``type`` argument:: +another type, like a :class:`float`, :class:`int` or :class:`file`. The +``type`` keyword argument of :meth:`add_argument` allows any necessary +type-checking and type-conversions to be performed. Many common builtin types +can be used directly as the value of the ``type`` argument:: >>> parser = argparse.ArgumentParser() >>> parser.add_argument('foo', type=int) @@ -883,9 +874,8 @@ >>> parser.parse_args(['out.txt']) Namespace(bar=) -If you need to do some special type-checking or type-conversions, you can -provide your own types by passing to ``type=`` a callable that takes a single -string argument and returns the type-converted value:: +``type=`` can take any callable that takes a single string argument and returns +the type-converted value:: >>> def perfect_square(string): ... value = int(string) @@ -903,8 +893,8 @@ usage: PROG [-h] foo PROG: error: argument foo: '7' is not a perfect square -Note that if your type-checking function is just checking for a particular set -of values, it may be more convenient to use the choices_ keyword argument:: +The choices_ keyword argument may be more convenient for type checkers that +simply check against a range of values:: >>> parser = argparse.ArgumentParser(prog='PROG') >>> parser.add_argument('foo', type=int, choices=xrange(5, 10)) @@ -921,11 +911,10 @@ ^^^^^^^ Some command-line args should be selected from a restricted set of values. -ArgumentParser objects can be told about such sets of values by passing a -container object as the ``choices`` keyword argument to :meth:`add_argument`. -When the command-line is parsed with :meth:`parse_args`, arg values will be -checked, and an error message will be displayed if the arg was not one of the -acceptable values:: +These can be handled by passing a container object as the ``choices`` keyword +argument to :meth:`add_argument`. When the command-line is parsed, arg values +will be checked, and an error message will be displayed if the arg was not one +of the acceptable values:: >>> parser = argparse.ArgumentParser(prog='PROG') >>> parser.add_argument('foo', choices='abc') @@ -957,9 +946,8 @@ In general, the argparse module assumes that flags like ``-f`` and ``--bar`` indicate *optional* arguments, which can always be omitted at the command-line. -To change this behavior, i.e. to make an option *required*, the value ``True`` -should be specified for the ``required=`` keyword argument to -:meth:`add_argument`:: +To make an option *required*, ``True`` can be specified for the ``required=`` +keyword argument to :meth:`add_argument`:: >>> parser = argparse.ArgumentParser() >>> parser.add_argument('--foo', required=True) @@ -972,20 +960,18 @@ As the example shows, if an option is marked as ``required``, :meth:`parse_args` will report an error if that option is not present at the command line. -**Warning:** Required options are generally considered bad form - normal users -expect *options* to be *optional*. You should avoid the use of required options -whenever possible. +.. note:: + + Required options are generally considered bad form because users expect + *options* to be *optional*, and thus they should be avoided when possible. help ^^^^ -A great command-line interface isn't worth anything if your users can't figure -out which option does what. So for the end-users, ``help`` is probably the most -important argument to include in your :meth:`add_argument` calls. The ``help`` -value should be a string containing a brief description of what the argument -specifies. When a user requests help (usually by using ``-h`` or ``--help`` at -the command-line), these ``help`` descriptions will be displayed with each +The ``help`` value is a string containing a brief description of the argument. +When a user requests help (usually by using ``-h`` or ``--help`` at the +command-line), these ``help`` descriptions will be displayed with each argument:: >>> parser = argparse.ArgumentParser(prog='frobble') @@ -1024,15 +1010,14 @@ metavar ^^^^^^^ -When ArgumentParser objects generate help messages, they need some way to refer +When :class:`ArgumentParser` generates help messages, it need some way to refer to each expected argument. By default, ArgumentParser objects use the dest_ value as the "name" of each object. By default, for positional argument actions, the dest_ value is used directly, and for optional argument actions, -the dest_ value is uppercased. So if we have a single positional argument with -``dest='bar'``, that argument will be referred to as ``bar``. And if we have a -single optional argument ``--foo`` that should be followed by a single -command-line arg, that arg will be referred to as ``FOO``. You can see this -behavior in the example below:: +the dest_ value is uppercased. So, a single positional argument with +``dest='bar'`` will that argument will be referred to as ``bar``. A single +optional argument ``--foo`` that should be followed by a single command-line arg +will be referred to as ``FOO``. An example:: >>> parser = argparse.ArgumentParser() >>> parser.add_argument('--foo') @@ -1049,9 +1034,7 @@ -h, --help show this help message and exit --foo FOO -If you would like to provide a different name for your argument in help -messages, you can supply a value for the ``metavar`` keyword argument to -:meth:`add_argument`:: +An alternative name can be specified with ``metavar``:: >>> parser = argparse.ArgumentParser() >>> parser.add_argument('--foo', metavar='YYY') @@ -1073,8 +1056,8 @@ value. Different values of ``nargs`` may cause the metavar to be used multiple times. -If you'd like to specify a different display name for each of the arguments, you -can provide a tuple to ``metavar``:: +Providing a tuple to ``metavar`` specifies a different display for each of the +arguments:: >>> parser = argparse.ArgumentParser(prog='PROG') >>> parser.add_argument('-x', nargs=2) @@ -1091,10 +1074,10 @@ dest ^^^^ -Most ArgumentParser actions add some value as an attribute of the object -returned by :meth:`parse_args`. The name of this attribute is determined by the -``dest`` keyword argument of :meth:`add_argument`. For positional argument -actions, ``dest`` is normally supplied as the first argument to +Most :class:`ArgumentParser` actions add some value as an attribute of the +object returned by :meth:`parse_args`. The name of this attribute is determined +by the ``dest`` keyword argument of :meth:`add_argument`. For positional +argument actions, ``dest`` is normally supplied as the first argument to :meth:`add_argument`:: >>> parser = argparse.ArgumentParser() @@ -1103,7 +1086,7 @@ Namespace(bar='XXX') For optional argument actions, the value of ``dest`` is normally inferred from -the option strings. ArgumentParser objects generate the value of ``dest`` by +the option strings. :class:`ArgumentParser` generates the value of ``dest`` by taking the first long option string and stripping away the initial ``'--'`` string. If no long option strings were supplied, ``dest`` will be derived from the first short option string by stripping the initial ``'-'`` character. Any @@ -1119,9 +1102,7 @@ >>> parser.parse_args('--foo 1 -y 2'.split()) Namespace(foo_bar='1', x='2') -If you would like to use a different attribute name from the one automatically -inferred by the ArgumentParser, you can supply it with an explicit ``dest`` -parameter:: +``dest`` allows a custom attribute name to be provided:: >>> parser = argparse.ArgumentParser() >>> parser.add_argument('--foo', dest='bar') @@ -1132,9 +1113,9 @@ The parse_args() method ----------------------- -.. method:: parse_args([args], [namespace]) +.. method:: ArgumentParser.parse_args([args], [namespace]) - Convert the strings to objects and assign them as attributes of the + Convert argument strings to objects and assign them as attributes of the namespace. Return the populated namespace. Previous calls to :meth:`add_argument` determine exactly what objects are @@ -1142,7 +1123,7 @@ :meth:`add_argument` for details. By default, the arg strings are taken from :data:`sys.argv`, and a new empty - ``Namespace`` object is created for the attributes. + :class:`Namespace` object is created for the attributes. Option value syntax ^^^^^^^^^^^^^^^^^^^ @@ -1159,21 +1140,21 @@ >>> parser.parse_args('--foo FOO'.split()) Namespace(foo='FOO', x=None) -For long options (options with names longer than a single character), you may -also pass the option and value as a single command line argument, using ``=`` to +For long options (options with names longer than a single character), the option +and value can also be passed as a single command line argument, using ``=`` to separate them:: >>> parser.parse_args('--foo=FOO'.split()) Namespace(foo='FOO', x=None) -For short options (options only one character long), you may simply concatenate -the option and its value:: +For short options (options only one character long), the option and its value +can be concatenated:: >>> parser.parse_args('-xX'.split()) Namespace(foo=None, x='X') -You can also combine several short options together, using only a single ``-`` -prefix, as long as only the last option (or none of them) requires a value:: +Several short options can be joined together, using only a single ``-`` prefix, +as long as only the last option (or none of them) requires a value:: >>> parser = argparse.ArgumentParser(prog='PROG') >>> parser.add_argument('-x', action='store_true') @@ -1263,7 +1244,7 @@ Argument abbreviations ^^^^^^^^^^^^^^^^^^^^^^ -The :meth:`parse_args` method allows you to abbreviate long options if the +The :meth:`parse_args` method allows long options to be abbreviated if the abbreviation is unambiguous:: >>> parser = argparse.ArgumentParser(prog='PROG') @@ -1277,8 +1258,7 @@ usage: PROG [-h] [-bacon BACON] [-badger BADGER] PROG: error: ambiguous option: -ba could match -badger, -bacon -As you can see above, you will get an error if you pick a prefix that could -refer to more than one option. +An error is produced for arguments that could produce more than one options. Beyond ``sys.argv`` @@ -1286,9 +1266,7 @@ Sometimes it may be useful to have an ArgumentParser parse args other than those of :data:`sys.argv`. This can be accomplished by passing a list of strings to -``parse_args``. You may have noticed that the examples in the argparse -documentation have made heavy use of this calling style - it is much easier to -use at the interactive prompt:: +``parse_args``. This is useful for testing at the interactive prompt:: >>> parser = argparse.ArgumentParser() >>> parser.add_argument( @@ -1306,9 +1284,10 @@ Custom namespaces ^^^^^^^^^^^^^^^^^ -It may also be useful to have an ArgumentParser assign attributes to an already -existing object, rather than the newly-created Namespace object that is normally -used. This can be achieved by specifying the ``namespace=`` keyword argument:: +It may also be useful to have an :class:`ArgumentParser` assign attributes to an +already existing object, rather than the newly-created :class:`Namespace` object +that is normally used. This can be achieved by specifying the ``namespace=`` +keyword argument:: >>> class C(object): ... pass @@ -1327,19 +1306,19 @@ Sub-commands ^^^^^^^^^^^^ -.. method:: add_subparsers() +.. method:: ArgumentParser.add_subparsers() - A lot of programs split up their functionality into a number of sub-commands, + Many programs split up their functionality into a number of sub-commands, for example, the ``svn`` program can invoke sub-commands like ``svn - checkout``, ``svn update``, ``svn commit``, etc. Splitting up functionality + checkout``, ``svn update``, and ``svn commit``. Splitting up functionality this way can be a particularly good idea when a program performs several different functions which require different kinds of command-line arguments. - ArgumentParser objects support the creation of such sub-commands with the + :class:`ArgumentParser` supports the creation of such sub-commands with the :meth:`add_subparsers` method. The :meth:`add_subparsers` method is normally called with no arguments and returns an special action object. This object has a single method, ``add_parser``, which takes a command name and any - ArgumentParser constructor arguments, and returns an ArgumentParser object - that can be modified as usual. + :class:`ArgumentParser` constructor arguments, and returns an + :class:`ArgumentParser` object that can be modified as usual. Some example usage:: @@ -1371,9 +1350,9 @@ Similarly, when a help message is requested from a subparser, only the help for that particular parser will be printed. The help message will not - include parent parser or sibling parser messages. (You can however supply a - help message for each subparser command by suppling the ``help=`` argument to - ``add_parser`` as above.) + include parent parser or sibling parser messages. (A help message for each + subparser command, however, can be given by supplying the ``help=`` argument + to ``add_parser`` as above.) :: @@ -1464,13 +1443,12 @@ >>> args.func(args) ((XYZYX)) - This way, you can let :meth:`parse_args` do all the work for you, and then - just call the appropriate function after the argument parsing is complete. - Associating functions with actions like this is typically the easiest way to - handle the different actions for each of your subparsers. However, if you - find it necessary to check the name of the subparser that was invoked, you - can always provide a ``dest`` keyword argument to the :meth:`add_subparsers` - call:: + This way, you can let :meth:`parse_args` does the job of calling the + appropriate function after argument parsing is complete. Associating + functions with actions like this is typically the easiest way to handle the + different actions for each of your subparsers. However, if it is necessary + to check the name of the subparser that was invoked, the ``dest`` keyword + argument to the :meth:`add_subparsers` call will work:: >>> parser = argparse.ArgumentParser() >>> subparsers = parser.add_subparsers(dest='subparser_name') @@ -1488,9 +1466,9 @@ .. class:: FileType(mode='r', bufsize=None) The :class:`FileType` factory creates objects that can be passed to the type - argument of :meth:`add_argument`. Arguments that have :class:`FileType` - objects as their type will open command-line args as files with the requested - modes and buffer sizes: + argument of :meth:`ArgumentParser.add_argument`. Arguments that have + :class:`FileType` objects as their type will open command-line args as files + with the requested modes and buffer sizes: >>> parser = argparse.ArgumentParser() >>> parser.add_argument('--output', type=argparse.FileType('wb', 0)) @@ -1510,9 +1488,9 @@ Argument groups ^^^^^^^^^^^^^^^ -.. method:: add_argument_group([title], [description]) +.. method:: ArgumentParser.add_argument_group([title], [description]) - By default, ArgumentParser objects group command-line arguments into + By default, :class:`ArgumentParser` groups command-line arguments into "positional arguments" and "optional arguments" when displaying help messages. When there is a better conceptual grouping of arguments than this default one, appropriate groups can be created using the @@ -1530,11 +1508,12 @@ --foo FOO foo help The :meth:`add_argument_group` method returns an argument group object which - has an :meth:`add_argument` method just like a regular ArgumentParser - objects. When an argument is added to the group, the parser treats it just - like a normal argument, but displays the argument in a separate group for - help messages. The :meth:`add_argument_group` method accepts ``title`` and - ``description`` arguments which can be used to customize this display:: + has an :meth:`~ArgumentParser.add_argument` method just like a regular + :class:`ArgumentParser`. When an argument is added to the group, the parser + treats it just like a normal argument, but displays the argument in a + separate group for help messages. The :meth:`add_argument_group` method + accepts ``title`` and ``description`` arguments which can be used to + customize this display:: >>> parser = argparse.ArgumentParser(prog='PROG', add_help=False) >>> group1 = parser.add_argument_group('group1', 'group1 description') @@ -1554,8 +1533,8 @@ --bar BAR bar help - Note that any arguments not in your user defined groups will end up back in - the usual "positional arguments" and "optional arguments" sections. + Note that any arguments not your user defined groups will end up back in the + usual "positional arguments" and "optional arguments" sections. Mutual exclusion @@ -1563,10 +1542,7 @@ .. method:: add_mutually_exclusive_group([required=False]) - Sometimes, you need to make sure that only one of a couple different options - is specified on the command line. You can create groups of such mutually - exclusive arguments using the :meth:`add_mutually_exclusive_group` method. - When :func:`parse_args` is called, argparse will make sure that only one of + Create a mutually exclusive group. argparse will make sure that only one of the arguments in the mutually exclusive group was present on the command line:: @@ -1595,22 +1571,18 @@ PROG: error: one of the arguments --foo --bar is required Note that currently mutually exclusive argument groups do not support the - ``title`` and ``description`` arguments of :meth:`add_argument_group`. This - may change in the future however, so you are *strongly* recommended to - specify ``required`` as a keyword argument if you use it. + ``title`` and ``description`` arguments of :meth:`add_argument_group`. Parser defaults ^^^^^^^^^^^^^^^ -.. method:: set_defaults(**kwargs) +.. method:: ArgumentParser.set_defaults(**kwargs) Most of the time, the attributes of the object returned by :meth:`parse_args` will be fully determined by inspecting the command-line args and the argument - actions described in your :meth:`add_argument` calls. However, sometimes it - may be useful to add some additional attributes that are determined without - any inspection of the command-line. The :meth:`set_defaults` method allows - you to do this:: + actions. :method:`set_defaults` allows some additional attributes that are + determined without any inspection of the command-line to be added:: >>> parser = argparse.ArgumentParser() >>> parser.add_argument('foo', type=int) @@ -1618,9 +1590,7 @@ >>> parser.parse_args(['736']) Namespace(bar=42, baz='badger', foo=736) - Note that parser-level defaults always override argument-level defaults. So - if you set a parser-level default for a name that matches an argument, the - old argument default will no longer be used:: + Note that parser-level defaults always override argument-level defaults:: >>> parser = argparse.ArgumentParser() >>> parser.add_argument('--foo', default='bar') @@ -1628,14 +1598,15 @@ >>> parser.parse_args([]) Namespace(foo='spam') - Parser-level defaults can be particularly useful when you're working with - multiple parsers. See the :meth:`add_subparsers` method for an example of - this type. + Parser-level defaults can be particularly useful when working with multiple + parsers. See the :meth:`~ArgumentParser.add_subparsers` method for an + example of this type. -.. method:: get_default(dest) +.. method:: ArgumentParser.get_default(dest) Get the default value for a namespace attribute, as set by either - :meth:`add_argument` or by :meth:`set_defaults`:: + :meth:`~ArgumentParser.add_argument` or by + :meth:`~ArgumentParser.set_defaults`:: >>> parser = argparse.ArgumentParser() >>> parser.add_argument('--foo', default='badger') @@ -1647,16 +1618,16 @@ ^^^^^^^^^^^^^ In most typical applications, :meth:`parse_args` will take care of formatting -and printing any usage or error messages. However, should you want to format or -print these on your own, several methods are available: +and printing any usage or error messages. However, several formatting methods +are available: -.. method:: print_usage([file]): +.. method:: ArgumentParser.print_usage([file]): Print a brief description of how the :class:`ArgumentParser` should be invoked on the command line. If ``file`` is not present, ``sys.stderr`` is assumed. -.. method:: print_help([file]): +.. method:: ArgumentParser.print_help([file]): Print a help message, including the program usage and information about the arguments registered with the :class:`ArgumentParser`. If ``file`` is not @@ -1665,12 +1636,12 @@ There are also variants of these methods that simply return a string instead of printing it: -.. method:: format_usage(): +.. method:: ArgumentParser.format_usage(): Return a string containing a brief description of how the :class:`ArgumentParser` should be invoked on the command line. -.. method:: format_help(): +.. method:: ArgumentParser.format_help(): Return a string containing a help message, including the program usage and information about the arguments registered with the :class:`ArgumentParser`. @@ -1680,14 +1651,14 @@ Partial parsing ^^^^^^^^^^^^^^^ -.. method:: parse_known_args([args], [namespace]) +.. method:: ArgumentParser.parse_known_args([args], [namespace]) Sometimes a script may only parse a few of the command line arguments, passing the remaining arguments on to another script or program. In these cases, the :meth:`parse_known_args` method can be useful. It works much like -:meth:`parse_args` except that it does not produce an error when extra arguments -are present. Instead, it returns a two item tuple containing the populated -namespace and the list of remaining argument strings. +:meth:`~ArgumentParser.parse_args` except that it does not produce an error when +extra arguments are present. Instead, it returns a two item tuple containing +the populated namespace and the list of remaining argument strings. :: @@ -1701,13 +1672,12 @@ Customizing file parsing ^^^^^^^^^^^^^^^^^^^^^^^^ -.. method:: convert_arg_line_to_args(arg_line) +.. method:: ArgumentParser.convert_arg_line_to_args(arg_line) Arguments that are read from a file (see the ``fromfile_prefix_chars`` keyword argument to the :class:`ArgumentParser` constructor) are read one - argument per line. If you need fancier parsing, then you can subclass the - :class:`ArgumentParser` and override the :meth:`convert_arg_line_to_args` - method. + argument per line. :meth:`convert_arg_line_to_args` can be overriden for + fancier reading. This method takes a single argument ``arg_line`` which is a string read from the argument file. It returns a list of arguments parsed from this string. @@ -1735,10 +1705,10 @@ A partial upgrade path from optparse to argparse: -* Replace all ``add_option()`` calls with :meth:`add_argument` calls. +* Replace all ``add_option()`` calls with :meth:`ArgumentParser.add_argument` calls. * Replace ``options, args = parser.parse_args()`` with ``args = - parser.parse_args()`` and add additional :meth:`add_argument` calls for the + parser.parse_args()`` and add additional :meth:`ArgumentParser.add_argument` calls for the positional arguments. * Replace callback actions and the ``callback_*`` keyword arguments with @@ -1747,8 +1717,9 @@ * Replace string names for ``type`` keyword arguments with the corresponding type objects (e.g. int, float, complex, etc). -* Replace ``Values`` with ``Namespace`` and ``OptionError/OptionValueError`` - with ``ArgumentError``. +* Replace :class:`optparse.Values` with :class:`Namespace` and + :exc:`optparse.OptionError` and :exc:`optparse.OptionValueError` with + :exc:`ArgumentError`. * Replace strings with implicit arguments such as ``%default`` or ``%prog`` with the standard python syntax to use dictionaries to format strings, that is, From python-checkins at python.org Wed Mar 3 03:04:24 2010 From: python-checkins at python.org (benjamin.peterson) Date: Wed, 3 Mar 2010 03:04:24 +0100 (CET) Subject: [Python-checkins] r78614 - python/trunk/Doc/library/argparse.rst Message-ID: <20100303020424.B7721EE982@mail.python.org> Author: benjamin.peterson Date: Wed Mar 3 03:04:24 2010 New Revision: 78614 Log: fix Sphinx warnings Modified: python/trunk/Doc/library/argparse.rst Modified: python/trunk/Doc/library/argparse.rst ============================================================================== --- python/trunk/Doc/library/argparse.rst (original) +++ python/trunk/Doc/library/argparse.rst Wed Mar 3 03:04:24 2010 @@ -363,7 +363,7 @@ will be wrapped across a couple lines Passing :class:`argparse.RawDescriptionHelpFormatter` as ``formatter_class=`` -indicates that description_ and eiplog_ are already correctly formatted and +indicates that description_ and epilog_ are already correctly formatted and should not be line-wrapped:: >>> parser = argparse.ArgumentParser( @@ -1581,8 +1581,9 @@ Most of the time, the attributes of the object returned by :meth:`parse_args` will be fully determined by inspecting the command-line args and the argument - actions. :method:`set_defaults` allows some additional attributes that are - determined without any inspection of the command-line to be added:: + actions. :meth:`ArgumentParser.set_defaults` allows some additional + attributes that are determined without any inspection of the command-line to + be added:: >>> parser = argparse.ArgumentParser() >>> parser.add_argument('foo', type=int) From python-checkins at python.org Wed Mar 3 03:07:08 2010 From: python-checkins at python.org (benjamin.peterson) Date: Wed, 3 Mar 2010 03:07:08 +0100 (CET) Subject: [Python-checkins] r78615 - in python/branches/py3k: Doc/library/argparse.rst Message-ID: <20100303020708.3ADA2EE989@mail.python.org> Author: benjamin.peterson Date: Wed Mar 3 03:07:08 2010 New Revision: 78615 Log: Merged revisions 78613-78614 via svnmerge from svn+ssh://pythondev at svn.python.org/python/trunk ........ r78613 | benjamin.peterson | 2010-03-02 19:55:09 -0600 (Tue, 02 Mar 2010) | 1 line edit for style ........ r78614 | benjamin.peterson | 2010-03-02 20:04:24 -0600 (Tue, 02 Mar 2010) | 1 line fix Sphinx warnings ........ Modified: python/branches/py3k/ (props changed) python/branches/py3k/Doc/library/argparse.rst Modified: python/branches/py3k/Doc/library/argparse.rst ============================================================================== --- python/branches/py3k/Doc/library/argparse.rst (original) +++ python/branches/py3k/Doc/library/argparse.rst Wed Mar 3 03:07:08 2010 @@ -9,17 +9,16 @@ The :mod:`argparse` module makes it easy to write user friendly command line -interfaces. You define what arguments your program requires, and :mod:`argparse` +interfaces. The program defines what arguments it requires, and :mod:`argparse` will figure out how to parse those out of :data:`sys.argv`. The :mod:`argparse` -module also automatically generates help and usage messages based on the -arguments you have defined, and issues errors when users give your program -invalid arguments. +module also automatically generates help and usage messages and issues errors +when users give the program invalid arguments. Example ------- -As an example, the following code is a Python program that takes a list of -integers and produces either the sum or the max:: +The following code is a Python program that takes a list of integers and +produces either the sum or the max:: import argparse @@ -68,24 +67,23 @@ Creating a parser ^^^^^^^^^^^^^^^^^ -Pretty much every script that uses the :mod:`argparse` module will start out by -creating an :class:`ArgumentParser` object:: +Mose uses of the :mod:`argparse` module will start out by creating an +:class:`ArgumentParser` object:: >>> parser = argparse.ArgumentParser(description='Process some integers.') The :class:`ArgumentParser` object will hold all the information necessary to -parse the command line into a more manageable form for your program. +parse the command line into python data types. Adding arguments ^^^^^^^^^^^^^^^^ -Once you've created an :class:`ArgumentParser`, you'll want to fill it with -information about your program arguments. You typically do this by making calls -to the :meth:`add_argument` method. Generally, these calls tell the -:class:`ArgumentParser` how to take the strings on the command line and turn -them into objects for you. This information is stored and used when -:meth:`parse_args` is called. For example, if we add some arguments like this:: +Filling an :class:`ArgumentParser` with information about program arguments is +done by making calls to the :meth:`~ArgumentParser.add_argument` method. +Generally, these calls tell the :class:`ArgumentParser` how to take the strings +on the command line and turn them into objects. This information is stored and +used when :meth:`~ArgumentParser.parse_args` is called. For example:: >>> parser.add_argument('integers', metavar='N', type=int, nargs='+', ... help='an integer for the accumulator') @@ -93,7 +91,7 @@ ... const=sum, default=max, ... help='sum the integers (default: find the max)') -when we later call :meth:`parse_args`, we can expect it to return an object with +Later, calling :meth:`parse_args` will return an object with two attributes, ``integers`` and ``accumulate``. The ``integers`` attribute will be a list of one or more ints, and the ``accumulate`` attribute will be either the :func:`sum` function, if ``--sum`` was specified at the command line, @@ -102,9 +100,8 @@ Parsing arguments ^^^^^^^^^^^^^^^^^ -Once an :class:`ArgumentParser` has been initialized with appropriate calls to -:meth:`add_argument`, it can be instructed to parse the command-line args by -calling the :meth:`parse_args` method. This will inspect the command-line, +:class:`ArgumentParser` parses args through the +:meth:`~ArgumentParser.parse_args` method. This will inspect the command-line, convert each arg to the appropriate type and then invoke the appropriate action. In most cases, this means a simple namespace object will be built up from attributes parsed out of the command-line:: @@ -112,10 +109,9 @@ >>> parser.parse_args(['--sum', '7', '-1', '42']) Namespace(accumulate=, integers=[7, -1, 42]) -In a script, :meth:`parse_args` will typically be called with no arguments, and -the :class:`ArgumentParser` will automatically determine the command-line args -from :data:`sys.argv`. That's pretty much it. You're now ready to go write -some command line interfaces! +In a script, :meth:`~ArgumentParser.parse_args` will typically be called with no +arguments, and the :class:`ArgumentParser` will automatically determine the +command-line args from :data:`sys.argv`. ArgumentParser objects @@ -130,41 +126,41 @@ * epilog_ - Text to display after the argument help. - * add_help_ - Add a -h/--help option to the parser. (default: True) + * add_help_ - Add a -h/--help option to the parser. (default: ``True``) * argument_default_ - Set the global default value for arguments. - (default: None) + (default: ``None``) - * parents_ - A list of :class:ArgumentParser objects whose arguments should + * parents_ - A list of :class:`ArgumentParser` objects whose arguments should also be included. * prefix_chars_ - The set of characters that prefix optional arguments. (default: '-') * fromfile_prefix_chars_ - The set of characters that prefix files from - which additional arguments should be read. (default: None) + which additional arguments should be read. (default: ``None``) * formatter_class_ - A class for customizing the help output. * conflict_handler_ - Usually unnecessary, defines strategy for resolving conflicting optionals. - * prog_ - Usually unnecessary, the name of the program - (default: ``sys.argv[0]``) + * prog_ - The name of the program (default: + :data:`sys.argv[0]`) - * usage_ - Usually unnecessary, the string describing the program usage - (default: generated) + * usage_ - The string describing the program usage (default: generated) - The following sections describe how each of these are used. +The following sections describe how each of these are used. description ^^^^^^^^^^^ -Most calls to the ArgumentParser constructor will use the ``description=`` -keyword argument. This argument gives a brief description of what the program -does and how it works. In help messages, the description is displayed between -the command-line usage string and the help messages for the various arguments:: +Most calls to the :class:`ArgumentParser` constructor will use the +``description=`` keyword argument. This argument gives a brief description of +what the program does and how it works. In help messages, the description is +displayed between the command-line usage string and the help messages for the +various arguments:: >>> parser = argparse.ArgumentParser(description='A foo that bars') >>> parser.print_help() @@ -201,7 +197,7 @@ As with the description_ argument, the ``epilog=`` text is by default line-wrapped, but this behavior can be adjusted with the formatter_class_ -argument to ArgumentParser. +argument to :class:`ArgumentParser`. add_help @@ -228,7 +224,7 @@ Occasionally, it may be useful to disable the addition of this help option. This can be achieved by passing ``False`` as the ``add_help=`` argument to -ArgumentParser:: +:class:`ArgumentParser`:: >>> parser = argparse.ArgumentParser(prog='PROG', add_help=False) >>> parser.add_argument('--foo', help='foo help') @@ -261,14 +257,15 @@ fromfile_prefix_chars ^^^^^^^^^^^^^^^^^^^^^ -Sometimes, e.g. for particularly long argument lists, it may make sense to keep -the list of arguments in a file rather than typing it out at the command line. -If the ``fromfile_prefix_chars=`` argument is given to the ArgumentParser -constructor, then arguments that start with any of the specified characters will -be treated as files, and will be replaced by the arguments they contain. For -example:: +Sometimes, for example when dealing with a particularly long argument lists, it +may make sense to keep the list of arguments in a file rather than typing it out +at the command line. If the ``fromfile_prefix_chars=`` argument is given to the +:class:`ArgumentParser` constructor, then arguments that start with any of the +specified characters will be treated as files, and will be replaced by the +arguments they contain. For example:: - >>> open('args.txt', 'w').write('-f\nbar') + >>> with open('args.txt', 'w') as fp: + ... fp.write('-f\nbar') >>> parser = argparse.ArgumentParser(fromfile_prefix_chars='@') >>> parser.add_argument('-f') >>> parser.parse_args(['-f', 'foo', '@args.txt']) @@ -290,9 +287,9 @@ :meth:`add_argument` or by calling the :meth:`set_defaults` methods with a specific set of name-value pairs. Sometimes however, it may be useful to specify a single parser-wide default for arguments. This can be accomplished by -passing the ``argument_default=`` keyword argument to ArgumentParser. For -example, to globally suppress attribute creation on :meth:`parse_args` calls, we -supply ``argument_default=SUPPRESS``:: +passing the ``argument_default=`` keyword argument to :class:`ArgumentParser`. +For example, to globally suppress attribute creation on :meth:`parse_args` +calls, we supply ``argument_default=SUPPRESS``:: >>> parser = argparse.ArgumentParser(argument_default=argparse.SUPPRESS) >>> parser.add_argument('--foo') @@ -307,12 +304,11 @@ ^^^^^^^ Sometimes, several parsers share a common set of arguments. Rather than -repeating the definitions of these arguments, you can define a single parser -with all the shared arguments and then use the ``parents=`` argument to -ArgumentParser to have these "inherited". The ``parents=`` argument takes a -list of ArgumentParser objects, collects all the positional and optional actions -from them, and adds these actions to the ArgumentParser object being -constructed:: +repeating the definitions of these arguments, a single parser with all the +shared arguments and passed to ``parents=`` argument to :class:`ArgumentParser` +can be used. The ``parents=`` argument takes a list of :class:`ArgumentParser` +objects, collects all the positional and optional actions from them, and adds +these actions to the :class:`ArgumentParser` object being constructed:: >>> parent_parser = argparse.ArgumentParser(add_help=False) >>> parent_parser.add_argument('--parent', type=int) @@ -328,23 +324,23 @@ Namespace(bar='YYY', parent=None) Note that most parent parsers will specify ``add_help=False``. Otherwise, the -ArgumentParser will see two ``-h/--help`` options (one in the parent and one in -the child) and raise an error. +:class:`ArgumentParser` will see two ``-h/--help`` options (one in the parent +and one in the child) and raise an error. formatter_class ^^^^^^^^^^^^^^^ -ArgumentParser objects allow the help formatting to be customized by specifying -an alternate formatting class. Currently, there are three such classes: -:class:`argparse.RawDescriptionHelpFormatter`, +:class:`ArgumentParser` objects allow the help formatting to be customized by +specifying an alternate formatting class. Currently, there are three such +classes: :class:`argparse.RawDescriptionHelpFormatter`, :class:`argparse.RawTextHelpFormatter` and :class:`argparse.ArgumentDefaultsHelpFormatter`. The first two allow more control over how textual descriptions are displayed, while the last automatically adds information about argument default values. -By default, ArgumentParser objects line-wrap the description_ and epilog_ texts -in command-line help messages:: +By default, :class:`ArgumentParser` objects line-wrap the description_ and +epilog_ texts in command-line help messages:: >>> parser = argparse.ArgumentParser( ... prog='PROG', @@ -366,10 +362,9 @@ likewise for this epilog whose whitespace will be cleaned up and whose words will be wrapped across a couple lines -When you have description_ and epilog_ that is already correctly formatted and -should not be line-wrapped, you can indicate this by passing -``argparse.RawDescriptionHelpFormatter`` as the ``formatter_class=`` argument to -ArgumentParser:: +Passing :class:`argparse.RawDescriptionHelpFormatter` as ``formatter_class=`` +indicates that description_ and epilog_ are already correctly formatted and +should not be line-wrapped:: >>> parser = argparse.ArgumentParser( ... prog='PROG', @@ -393,10 +388,10 @@ optional arguments: -h, --help show this help message and exit -If you want to maintain whitespace for all sorts of help text (including -argument descriptions), you can use ``argparse.RawTextHelpFormatter``. +:class:`RawTextHelpFormatter` maintains whitespace for all sorts of help text +including argument descriptions. -The other formatter class available, ``argparse.ArgumentDefaultsHelpFormatter``, +The other formatter class available, :class:`ArgumentDefaultsHelpFormatter`, will add information about the default value of each of the arguments:: >>> parser = argparse.ArgumentParser( @@ -418,9 +413,10 @@ conflict_handler ^^^^^^^^^^^^^^^^ -ArgumentParser objects do not allow two actions with the same option string. By -default, ArgumentParser objects will raise an exception if you try to create an -argument with an option string that is already in use:: +:class:`ArgumentParser` objects do not allow two actions with the same option +string. By default, :class:`ArgumentParser` objects raises an exception if an +attempt is made to create an argument with an option string that is already in +use:: >>> parser = argparse.ArgumentParser(prog='PROG') >>> parser.add_argument('-f', '--foo', help='old foo help') @@ -432,7 +428,7 @@ Sometimes (e.g. when using parents_) it may be useful to simply override any older arguments with the same option string. To get this behavior, the value ``'resolve'`` can be supplied to the ``conflict_handler=`` argument of -ArgumentParser:: +:class:`ArgumentParser`:: >>> parser = argparse.ArgumentParser(prog='PROG', conflict_handler='resolve') >>> parser.add_argument('-f', '--foo', help='old foo help') @@ -445,20 +441,20 @@ -f FOO old foo help --foo FOO new foo help -Note that ArgumentParser objects only remove an action if all of its option -strings are overridden. So, in the example above, the old ``-f/--foo`` action -is retained as the ``-f`` action, because only the ``--foo`` option string was -overridden. +Note that :class:`ArgumentParser` objects only remove an action if all of its +option strings are overridden. So, in the example above, the old ``-f/--foo`` +action is retained as the ``-f`` action, because only the ``--foo`` option +string was overridden. prog ^^^^ -By default, ArgumentParser objects use ``sys.argv[0]`` to determine how to -display the name of the program in help messages. This default is almost always -what you want because it will make the help messages match what your users have -typed at the command line. For example, consider a file named ``myprogram.py`` -with the following code:: +By default, :class:`ArgumentParser` objects uses ``sys.argv[0]`` to determine +how to display the name of the program in help messages. This default is almost +always desirable because it will make the help messages match how the pgoram was +invoked on the command line. For example, consider a file named +``myprogram.py`` with the following code:: import argparse parser = argparse.ArgumentParser() @@ -483,7 +479,7 @@ --foo FOO foo help To change this default behavior, another value can be supplied using the -``prog=`` argument to ArgumentParser:: +``prog=`` argument to :class:`ArgumentParser`:: >>> parser = argparse.ArgumentParser(prog='myprogram') >>> parser.print_help() @@ -511,7 +507,7 @@ usage ^^^^^ -By default, ArgumentParser objects calculate the usage message from the +By default, :class:`ArgumentParser` calculates the usage message from the arguments it contains:: >>> parser = argparse.ArgumentParser(prog='PROG') @@ -527,9 +523,7 @@ -h, --help show this help message and exit --foo [FOO] foo help -If the default usage message is not appropriate for your application, you can -supply your own usage message using the ``usage=`` keyword argument to -ArgumentParser:: +The default message can be overridden with the ``usage=`` keyword argument:: >>> parser = argparse.ArgumentParser(prog='PROG', usage='%(prog)s [options]') >>> parser.add_argument('--foo', nargs='?', help='foo help') @@ -544,14 +538,14 @@ -h, --help show this help message and exit --foo [FOO] foo help -Note you can use the ``%(prog)s`` format specifier to fill in the program name -in your usage messages. +The ``%(prog)s`` format specifier is available to fill in the program name in +your usage messages. The add_argument() method ------------------------- -.. method:: add_argument(name or flags..., [action], [nargs], [const], [default], [type], [choices], [required], [help], [metavar], [dest]) +.. method:: ArgumentParser.add_argument(name or flags..., [action], [nargs], [const], [default], [type], [choices], [required], [help], [metavar], [dest]) Define how a single command line argument should be parsed. Each parameter has its own more detailed description below, but in short they are: @@ -583,16 +577,16 @@ * dest_ - The name of the attribute to be added to the object returned by :meth:`parse_args`. - The following sections describe how each of these are used. +The following sections describe how each of these are used. name or flags ^^^^^^^^^^^^^ -The :meth:`add_argument` method needs to know whether you're expecting an -optional argument, e.g. ``-f`` or ``--foo``, or a positional argument, e.g. a -list of filenames. The first arguments passed to :meth:`add_argument` must -therefore be either a series of flags, or a simple argument name. For example, -an optional argument could be created like:: +The :meth:`add_argument` method must know whether an optional argument, like +``-f`` or ``--foo``, or a positional argument, like a list of filenames, is +expected. The first arguments passed to :meth:`add_argument` must therefore be +either a series of flags, or a simple argument name. For example, an optional +argument could be created like:: >>> parser.add_argument('-f', '--foo') @@ -620,10 +614,8 @@ :class:`ArgumentParser` objects associate command-line args with actions. These actions can do just about anything with the command-line args associated with them, though most actions simply add an attribute to the object returned by -:meth:`parse_args`. When you specify a new argument using the -:meth:`add_argument` method, you can indicate how the command-line args should -be handled by specifying the ``action`` keyword argument. The supported actions -are: +:meth:`parse_args`. The ``action`` keyword argument specifies how the +command-line args should be handled. The supported actions are: * ``'store'`` - This just stores the argument's value. This is the default action. For example:: @@ -634,10 +626,9 @@ Namespace(foo='1') * ``'store_const'`` - This stores the value specified by the const_ keyword - argument. Note that the const_ keyword argument defaults to ``None``, so - you'll almost always need to provide a value for it. The ``'store_const'`` - action is most commonly used with optional arguments that specify some sort - of flag. For example:: + argument. (Note that the const_ keyword argument defaults to the rather + unhelpful ``None``.) The ``'store_const'`` action is most commonly used with + optional arguments that specify some sort of flag. For example:: >>> parser = argparse.ArgumentParser() >>> parser.add_argument('--foo', action='store_const', const=42) @@ -645,8 +636,8 @@ Namespace(foo=42) * ``'store_true'`` and ``'store_false'`` - These store the values ``True`` and - ``False`` respectively. These are basically special cases of - ``'store_const'``. For example:: + ``False`` respectively. These are special cases of ``'store_const'``. For + example:: >>> parser = argparse.ArgumentParser() >>> parser.add_argument('--foo', action='store_true') @@ -655,8 +646,8 @@ Namespace(bar=False, foo=True) * ``'append'`` - This stores a list, and appends each argument value to the - list. This is useful when you want to allow an option to be specified - multiple times. Example usage:: + list. This is useful to allow an option to be specified multiple times. + Example usage:: >>> parser = argparse.ArgumentParser() >>> parser.add_argument('--foo', action='append') @@ -664,10 +655,10 @@ Namespace(foo=['1', '2']) * ``'append_const'`` - This stores a list, and appends the value specified by - the const_ keyword argument to the list. Note that the const_ keyword - argument defaults to ``None``, so you'll almost always need to provide a value - for it. The ``'append_const'`` action is typically useful when you want - multiple arguments to store constants to the same list, for example:: + the const_ keyword argument to the list. (Note that the const_ keyword + argument defaults to ``None``.) The ``'append_const'`` action is typically + useful when multiple arguments need to store constants to the same list. For + example:: >>> parser = argparse.ArgumentParser() >>> parser.add_argument('--str', dest='types', action='append_const', const=str) @@ -686,9 +677,9 @@ PROG 2.0 You can also specify an arbitrary action by passing an object that implements -the Action API. The easiest way to do this is to extend ``argparse.Action``, -supplying an appropriate :meth:`__call__` method. The ``__call__`` method -accepts four parameters: +the Action API. The easiest way to do this is to extend +:class:`argparse.Action`, supplying an appropriate ``__call__`` method. The +``__call__`` method should accept four parameters: * ``parser`` - The ArgumentParser object which contains this action. @@ -703,7 +694,7 @@ The ``option_string`` argument is optional, and will be absent if the action is associated with a positional argument. -So for example:: +An example of a custom action:: >>> class FooAction(argparse.Action): ... def __call__(self, parser, namespace, values, option_string=None): @@ -724,9 +715,9 @@ ^^^^^ ArgumentParser objects usually associate a single command-line argument with a -single action to be taken. In the situations where you'd like to associate a -different number of command-line arguments with a single action, you can use the -``nargs`` keyword argument to :meth:`add_argument`. The supported values are: +single action to be taken. The ``nargs`` keyword argument associates a +different number of command-line arguments with a single action.. The supported +values are: * N (an integer). N args from the command-line will be gathered together into a list. For example:: @@ -846,8 +837,8 @@ Namespace(foo=42) -If you don't want to see an attribute when an option was not present at the -command line, you can supply ``default=argparse.SUPPRESS``:: +Providing ``default=argparse.SUPPRESS`` causes no attribute to be added if the +command-line argument was not present.:: >>> parser = argparse.ArgumentParser() >>> parser.add_argument('--foo', default=argparse.SUPPRESS) @@ -862,10 +853,10 @@ By default, ArgumentParser objects read command-line args in as simple strings. However, quite often the command-line string should instead be interpreted as -another type, e.g. :class:`float`, :class:`int` or :class:`file`. The ``type`` -keyword argument of :meth:`add_argument` allows any necessary type-checking and -type-conversions to be performed. Many common builtin types can be used -directly as the value of the ``type`` argument:: +another type, like a :class:`float`, :class:`int` or :class:`file`. The +``type`` keyword argument of :meth:`add_argument` allows any necessary +type-checking and type-conversions to be performed. Many common builtin types +can be used directly as the value of the ``type`` argument:: >>> parser = argparse.ArgumentParser() >>> parser.add_argument('foo', type=int) @@ -883,9 +874,8 @@ >>> parser.parse_args(['out.txt']) Namespace(bar=) -If you need to do some special type-checking or type-conversions, you can -provide your own types by passing to ``type=`` a callable that takes a single -string argument and returns the type-converted value:: +``type=`` can take any callable that takes a single string argument and returns +the type-converted value:: >>> def perfect_square(string): ... value = int(string) @@ -903,8 +893,8 @@ usage: PROG [-h] foo PROG: error: argument foo: '7' is not a perfect square -Note that if your type-checking function is just checking for a particular set -of values, it may be more convenient to use the choices_ keyword argument:: +The choices_ keyword argument may be more convenient for type checkers that +simply check against a range of values:: >>> parser = argparse.ArgumentParser(prog='PROG') >>> parser.add_argument('foo', type=int, choices=xrange(5, 10)) @@ -921,11 +911,10 @@ ^^^^^^^ Some command-line args should be selected from a restricted set of values. -ArgumentParser objects can be told about such sets of values by passing a -container object as the ``choices`` keyword argument to :meth:`add_argument`. -When the command-line is parsed with :meth:`parse_args`, arg values will be -checked, and an error message will be displayed if the arg was not one of the -acceptable values:: +These can be handled by passing a container object as the ``choices`` keyword +argument to :meth:`add_argument`. When the command-line is parsed, arg values +will be checked, and an error message will be displayed if the arg was not one +of the acceptable values:: >>> parser = argparse.ArgumentParser(prog='PROG') >>> parser.add_argument('foo', choices='abc') @@ -957,9 +946,8 @@ In general, the argparse module assumes that flags like ``-f`` and ``--bar`` indicate *optional* arguments, which can always be omitted at the command-line. -To change this behavior, i.e. to make an option *required*, the value ``True`` -should be specified for the ``required=`` keyword argument to -:meth:`add_argument`:: +To make an option *required*, ``True`` can be specified for the ``required=`` +keyword argument to :meth:`add_argument`:: >>> parser = argparse.ArgumentParser() >>> parser.add_argument('--foo', required=True) @@ -972,20 +960,18 @@ As the example shows, if an option is marked as ``required``, :meth:`parse_args` will report an error if that option is not present at the command line. -**Warning:** Required options are generally considered bad form - normal users -expect *options* to be *optional*. You should avoid the use of required options -whenever possible. +.. note:: + + Required options are generally considered bad form because users expect + *options* to be *optional*, and thus they should be avoided when possible. help ^^^^ -A great command-line interface isn't worth anything if your users can't figure -out which option does what. So for the end-users, ``help`` is probably the most -important argument to include in your :meth:`add_argument` calls. The ``help`` -value should be a string containing a brief description of what the argument -specifies. When a user requests help (usually by using ``-h`` or ``--help`` at -the command-line), these ``help`` descriptions will be displayed with each +The ``help`` value is a string containing a brief description of the argument. +When a user requests help (usually by using ``-h`` or ``--help`` at the +command-line), these ``help`` descriptions will be displayed with each argument:: >>> parser = argparse.ArgumentParser(prog='frobble') @@ -1024,15 +1010,14 @@ metavar ^^^^^^^ -When ArgumentParser objects generate help messages, they need some way to refer +When :class:`ArgumentParser` generates help messages, it need some way to refer to each expected argument. By default, ArgumentParser objects use the dest_ value as the "name" of each object. By default, for positional argument actions, the dest_ value is used directly, and for optional argument actions, -the dest_ value is uppercased. So if we have a single positional argument with -``dest='bar'``, that argument will be referred to as ``bar``. And if we have a -single optional argument ``--foo`` that should be followed by a single -command-line arg, that arg will be referred to as ``FOO``. You can see this -behavior in the example below:: +the dest_ value is uppercased. So, a single positional argument with +``dest='bar'`` will that argument will be referred to as ``bar``. A single +optional argument ``--foo`` that should be followed by a single command-line arg +will be referred to as ``FOO``. An example:: >>> parser = argparse.ArgumentParser() >>> parser.add_argument('--foo') @@ -1049,9 +1034,7 @@ -h, --help show this help message and exit --foo FOO -If you would like to provide a different name for your argument in help -messages, you can supply a value for the ``metavar`` keyword argument to -:meth:`add_argument`:: +An alternative name can be specified with ``metavar``:: >>> parser = argparse.ArgumentParser() >>> parser.add_argument('--foo', metavar='YYY') @@ -1073,8 +1056,8 @@ value. Different values of ``nargs`` may cause the metavar to be used multiple times. -If you'd like to specify a different display name for each of the arguments, you -can provide a tuple to ``metavar``:: +Providing a tuple to ``metavar`` specifies a different display for each of the +arguments:: >>> parser = argparse.ArgumentParser(prog='PROG') >>> parser.add_argument('-x', nargs=2) @@ -1091,10 +1074,10 @@ dest ^^^^ -Most ArgumentParser actions add some value as an attribute of the object -returned by :meth:`parse_args`. The name of this attribute is determined by the -``dest`` keyword argument of :meth:`add_argument`. For positional argument -actions, ``dest`` is normally supplied as the first argument to +Most :class:`ArgumentParser` actions add some value as an attribute of the +object returned by :meth:`parse_args`. The name of this attribute is determined +by the ``dest`` keyword argument of :meth:`add_argument`. For positional +argument actions, ``dest`` is normally supplied as the first argument to :meth:`add_argument`:: >>> parser = argparse.ArgumentParser() @@ -1103,7 +1086,7 @@ Namespace(bar='XXX') For optional argument actions, the value of ``dest`` is normally inferred from -the option strings. ArgumentParser objects generate the value of ``dest`` by +the option strings. :class:`ArgumentParser` generates the value of ``dest`` by taking the first long option string and stripping away the initial ``'--'`` string. If no long option strings were supplied, ``dest`` will be derived from the first short option string by stripping the initial ``'-'`` character. Any @@ -1119,9 +1102,7 @@ >>> parser.parse_args('--foo 1 -y 2'.split()) Namespace(foo_bar='1', x='2') -If you would like to use a different attribute name from the one automatically -inferred by the ArgumentParser, you can supply it with an explicit ``dest`` -parameter:: +``dest`` allows a custom attribute name to be provided:: >>> parser = argparse.ArgumentParser() >>> parser.add_argument('--foo', dest='bar') @@ -1132,9 +1113,9 @@ The parse_args() method ----------------------- -.. method:: parse_args([args], [namespace]) +.. method:: ArgumentParser.parse_args([args], [namespace]) - Convert the strings to objects and assign them as attributes of the + Convert argument strings to objects and assign them as attributes of the namespace. Return the populated namespace. Previous calls to :meth:`add_argument` determine exactly what objects are @@ -1142,7 +1123,7 @@ :meth:`add_argument` for details. By default, the arg strings are taken from :data:`sys.argv`, and a new empty - ``Namespace`` object is created for the attributes. + :class:`Namespace` object is created for the attributes. Option value syntax ^^^^^^^^^^^^^^^^^^^ @@ -1159,21 +1140,21 @@ >>> parser.parse_args('--foo FOO'.split()) Namespace(foo='FOO', x=None) -For long options (options with names longer than a single character), you may -also pass the option and value as a single command line argument, using ``=`` to +For long options (options with names longer than a single character), the option +and value can also be passed as a single command line argument, using ``=`` to separate them:: >>> parser.parse_args('--foo=FOO'.split()) Namespace(foo='FOO', x=None) -For short options (options only one character long), you may simply concatenate -the option and its value:: +For short options (options only one character long), the option and its value +can be concatenated:: >>> parser.parse_args('-xX'.split()) Namespace(foo=None, x='X') -You can also combine several short options together, using only a single ``-`` -prefix, as long as only the last option (or none of them) requires a value:: +Several short options can be joined together, using only a single ``-`` prefix, +as long as only the last option (or none of them) requires a value:: >>> parser = argparse.ArgumentParser(prog='PROG') >>> parser.add_argument('-x', action='store_true') @@ -1263,7 +1244,7 @@ Argument abbreviations ^^^^^^^^^^^^^^^^^^^^^^ -The :meth:`parse_args` method allows you to abbreviate long options if the +The :meth:`parse_args` method allows long options to be abbreviated if the abbreviation is unambiguous:: >>> parser = argparse.ArgumentParser(prog='PROG') @@ -1277,8 +1258,7 @@ usage: PROG [-h] [-bacon BACON] [-badger BADGER] PROG: error: ambiguous option: -ba could match -badger, -bacon -As you can see above, you will get an error if you pick a prefix that could -refer to more than one option. +An error is produced for arguments that could produce more than one options. Beyond ``sys.argv`` @@ -1286,9 +1266,7 @@ Sometimes it may be useful to have an ArgumentParser parse args other than those of :data:`sys.argv`. This can be accomplished by passing a list of strings to -``parse_args``. You may have noticed that the examples in the argparse -documentation have made heavy use of this calling style - it is much easier to -use at the interactive prompt:: +``parse_args``. This is useful for testing at the interactive prompt:: >>> parser = argparse.ArgumentParser() >>> parser.add_argument( @@ -1306,9 +1284,10 @@ Custom namespaces ^^^^^^^^^^^^^^^^^ -It may also be useful to have an ArgumentParser assign attributes to an already -existing object, rather than the newly-created Namespace object that is normally -used. This can be achieved by specifying the ``namespace=`` keyword argument:: +It may also be useful to have an :class:`ArgumentParser` assign attributes to an +already existing object, rather than the newly-created :class:`Namespace` object +that is normally used. This can be achieved by specifying the ``namespace=`` +keyword argument:: >>> class C(object): ... pass @@ -1327,19 +1306,19 @@ Sub-commands ^^^^^^^^^^^^ -.. method:: add_subparsers() +.. method:: ArgumentParser.add_subparsers() - A lot of programs split up their functionality into a number of sub-commands, + Many programs split up their functionality into a number of sub-commands, for example, the ``svn`` program can invoke sub-commands like ``svn - checkout``, ``svn update``, ``svn commit``, etc. Splitting up functionality + checkout``, ``svn update``, and ``svn commit``. Splitting up functionality this way can be a particularly good idea when a program performs several different functions which require different kinds of command-line arguments. - ArgumentParser objects support the creation of such sub-commands with the + :class:`ArgumentParser` supports the creation of such sub-commands with the :meth:`add_subparsers` method. The :meth:`add_subparsers` method is normally called with no arguments and returns an special action object. This object has a single method, ``add_parser``, which takes a command name and any - ArgumentParser constructor arguments, and returns an ArgumentParser object - that can be modified as usual. + :class:`ArgumentParser` constructor arguments, and returns an + :class:`ArgumentParser` object that can be modified as usual. Some example usage:: @@ -1371,9 +1350,9 @@ Similarly, when a help message is requested from a subparser, only the help for that particular parser will be printed. The help message will not - include parent parser or sibling parser messages. (You can however supply a - help message for each subparser command by suppling the ``help=`` argument to - ``add_parser`` as above.) + include parent parser or sibling parser messages. (A help message for each + subparser command, however, can be given by supplying the ``help=`` argument + to ``add_parser`` as above.) :: @@ -1464,13 +1443,12 @@ >>> args.func(args) ((XYZYX)) - This way, you can let :meth:`parse_args` do all the work for you, and then - just call the appropriate function after the argument parsing is complete. - Associating functions with actions like this is typically the easiest way to - handle the different actions for each of your subparsers. However, if you - find it necessary to check the name of the subparser that was invoked, you - can always provide a ``dest`` keyword argument to the :meth:`add_subparsers` - call:: + This way, you can let :meth:`parse_args` does the job of calling the + appropriate function after argument parsing is complete. Associating + functions with actions like this is typically the easiest way to handle the + different actions for each of your subparsers. However, if it is necessary + to check the name of the subparser that was invoked, the ``dest`` keyword + argument to the :meth:`add_subparsers` call will work:: >>> parser = argparse.ArgumentParser() >>> subparsers = parser.add_subparsers(dest='subparser_name') @@ -1488,9 +1466,9 @@ .. class:: FileType(mode='r', bufsize=None) The :class:`FileType` factory creates objects that can be passed to the type - argument of :meth:`add_argument`. Arguments that have :class:`FileType` - objects as their type will open command-line args as files with the requested - modes and buffer sizes: + argument of :meth:`ArgumentParser.add_argument`. Arguments that have + :class:`FileType` objects as their type will open command-line args as files + with the requested modes and buffer sizes: >>> parser = argparse.ArgumentParser() >>> parser.add_argument('--output', type=argparse.FileType('wb', 0)) @@ -1510,9 +1488,9 @@ Argument groups ^^^^^^^^^^^^^^^ -.. method:: add_argument_group([title], [description]) +.. method:: ArgumentParser.add_argument_group([title], [description]) - By default, ArgumentParser objects group command-line arguments into + By default, :class:`ArgumentParser` groups command-line arguments into "positional arguments" and "optional arguments" when displaying help messages. When there is a better conceptual grouping of arguments than this default one, appropriate groups can be created using the @@ -1530,11 +1508,12 @@ --foo FOO foo help The :meth:`add_argument_group` method returns an argument group object which - has an :meth:`add_argument` method just like a regular ArgumentParser - objects. When an argument is added to the group, the parser treats it just - like a normal argument, but displays the argument in a separate group for - help messages. The :meth:`add_argument_group` method accepts ``title`` and - ``description`` arguments which can be used to customize this display:: + has an :meth:`~ArgumentParser.add_argument` method just like a regular + :class:`ArgumentParser`. When an argument is added to the group, the parser + treats it just like a normal argument, but displays the argument in a + separate group for help messages. The :meth:`add_argument_group` method + accepts ``title`` and ``description`` arguments which can be used to + customize this display:: >>> parser = argparse.ArgumentParser(prog='PROG', add_help=False) >>> group1 = parser.add_argument_group('group1', 'group1 description') @@ -1554,8 +1533,8 @@ --bar BAR bar help - Note that any arguments not in your user defined groups will end up back in - the usual "positional arguments" and "optional arguments" sections. + Note that any arguments not your user defined groups will end up back in the + usual "positional arguments" and "optional arguments" sections. Mutual exclusion @@ -1563,10 +1542,7 @@ .. method:: add_mutually_exclusive_group([required=False]) - Sometimes, you need to make sure that only one of a couple different options - is specified on the command line. You can create groups of such mutually - exclusive arguments using the :meth:`add_mutually_exclusive_group` method. - When :func:`parse_args` is called, argparse will make sure that only one of + Create a mutually exclusive group. argparse will make sure that only one of the arguments in the mutually exclusive group was present on the command line:: @@ -1595,22 +1571,19 @@ PROG: error: one of the arguments --foo --bar is required Note that currently mutually exclusive argument groups do not support the - ``title`` and ``description`` arguments of :meth:`add_argument_group`. This - may change in the future however, so you are *strongly* recommended to - specify ``required`` as a keyword argument if you use it. + ``title`` and ``description`` arguments of :meth:`add_argument_group`. Parser defaults ^^^^^^^^^^^^^^^ -.. method:: set_defaults(**kwargs) +.. method:: ArgumentParser.set_defaults(**kwargs) Most of the time, the attributes of the object returned by :meth:`parse_args` will be fully determined by inspecting the command-line args and the argument - actions described in your :meth:`add_argument` calls. However, sometimes it - may be useful to add some additional attributes that are determined without - any inspection of the command-line. The :meth:`set_defaults` method allows - you to do this:: + actions. :meth:`ArgumentParser.set_defaults` allows some additional + attributes that are determined without any inspection of the command-line to + be added:: >>> parser = argparse.ArgumentParser() >>> parser.add_argument('foo', type=int) @@ -1618,9 +1591,7 @@ >>> parser.parse_args(['736']) Namespace(bar=42, baz='badger', foo=736) - Note that parser-level defaults always override argument-level defaults. So - if you set a parser-level default for a name that matches an argument, the - old argument default will no longer be used:: + Note that parser-level defaults always override argument-level defaults:: >>> parser = argparse.ArgumentParser() >>> parser.add_argument('--foo', default='bar') @@ -1628,14 +1599,15 @@ >>> parser.parse_args([]) Namespace(foo='spam') - Parser-level defaults can be particularly useful when you're working with - multiple parsers. See the :meth:`add_subparsers` method for an example of - this type. + Parser-level defaults can be particularly useful when working with multiple + parsers. See the :meth:`~ArgumentParser.add_subparsers` method for an + example of this type. -.. method:: get_default(dest) +.. method:: ArgumentParser.get_default(dest) Get the default value for a namespace attribute, as set by either - :meth:`add_argument` or by :meth:`set_defaults`:: + :meth:`~ArgumentParser.add_argument` or by + :meth:`~ArgumentParser.set_defaults`:: >>> parser = argparse.ArgumentParser() >>> parser.add_argument('--foo', default='badger') @@ -1647,16 +1619,16 @@ ^^^^^^^^^^^^^ In most typical applications, :meth:`parse_args` will take care of formatting -and printing any usage or error messages. However, should you want to format or -print these on your own, several methods are available: +and printing any usage or error messages. However, several formatting methods +are available: -.. method:: print_usage([file]): +.. method:: ArgumentParser.print_usage([file]): Print a brief description of how the :class:`ArgumentParser` should be invoked on the command line. If ``file`` is not present, ``sys.stderr`` is assumed. -.. method:: print_help([file]): +.. method:: ArgumentParser.print_help([file]): Print a help message, including the program usage and information about the arguments registered with the :class:`ArgumentParser`. If ``file`` is not @@ -1665,12 +1637,12 @@ There are also variants of these methods that simply return a string instead of printing it: -.. method:: format_usage(): +.. method:: ArgumentParser.format_usage(): Return a string containing a brief description of how the :class:`ArgumentParser` should be invoked on the command line. -.. method:: format_help(): +.. method:: ArgumentParser.format_help(): Return a string containing a help message, including the program usage and information about the arguments registered with the :class:`ArgumentParser`. @@ -1680,14 +1652,14 @@ Partial parsing ^^^^^^^^^^^^^^^ -.. method:: parse_known_args([args], [namespace]) +.. method:: ArgumentParser.parse_known_args([args], [namespace]) Sometimes a script may only parse a few of the command line arguments, passing the remaining arguments on to another script or program. In these cases, the :meth:`parse_known_args` method can be useful. It works much like -:meth:`parse_args` except that it does not produce an error when extra arguments -are present. Instead, it returns a two item tuple containing the populated -namespace and the list of remaining argument strings. +:meth:`~ArgumentParser.parse_args` except that it does not produce an error when +extra arguments are present. Instead, it returns a two item tuple containing +the populated namespace and the list of remaining argument strings. :: @@ -1701,13 +1673,12 @@ Customizing file parsing ^^^^^^^^^^^^^^^^^^^^^^^^ -.. method:: convert_arg_line_to_args(arg_line) +.. method:: ArgumentParser.convert_arg_line_to_args(arg_line) Arguments that are read from a file (see the ``fromfile_prefix_chars`` keyword argument to the :class:`ArgumentParser` constructor) are read one - argument per line. If you need fancier parsing, then you can subclass the - :class:`ArgumentParser` and override the :meth:`convert_arg_line_to_args` - method. + argument per line. :meth:`convert_arg_line_to_args` can be overriden for + fancier reading. This method takes a single argument ``arg_line`` which is a string read from the argument file. It returns a list of arguments parsed from this string. @@ -1735,10 +1706,10 @@ A partial upgrade path from optparse to argparse: -* Replace all ``add_option()`` calls with :meth:`add_argument` calls. +* Replace all ``add_option()`` calls with :meth:`ArgumentParser.add_argument` calls. * Replace ``options, args = parser.parse_args()`` with ``args = - parser.parse_args()`` and add additional :meth:`add_argument` calls for the + parser.parse_args()`` and add additional :meth:`ArgumentParser.add_argument` calls for the positional arguments. * Replace callback actions and the ``callback_*`` keyword arguments with @@ -1747,8 +1718,9 @@ * Replace string names for ``type`` keyword arguments with the corresponding type objects (e.g. int, float, complex, etc). -* Replace ``Values`` with ``Namespace`` and ``OptionError/OptionValueError`` - with ``ArgumentError``. +* Replace :class:`optparse.Values` with :class:`Namespace` and + :exc:`optparse.OptionError` and :exc:`optparse.OptionValueError` with + :exc:`ArgumentError`. * Replace strings with implicit arguments such as ``%default`` or ``%prog`` with the standard python syntax to use dictionaries to format strings, that is, From python-checkins at python.org Wed Mar 3 03:09:18 2010 From: python-checkins at python.org (benjamin.peterson) Date: Wed, 3 Mar 2010 03:09:18 +0100 (CET) Subject: [Python-checkins] r78616 - python/branches/py3k/Doc/library/argparse.rst Message-ID: <20100303020918.40060EE98C@mail.python.org> Author: benjamin.peterson Date: Wed Mar 3 03:09:18 2010 New Revision: 78616 Log: convert to print function Modified: python/branches/py3k/Doc/library/argparse.rst Modified: python/branches/py3k/Doc/library/argparse.rst ============================================================================== --- python/branches/py3k/Doc/library/argparse.rst (original) +++ python/branches/py3k/Doc/library/argparse.rst Wed Mar 3 03:09:18 2010 @@ -30,7 +30,7 @@ help='sum the integers (default: find the max)') args = parser.parse_args() - print args.accumulate(args.integers) + print(args.accumulate(args.integers)) Assuming the Python code above is saved into a file called ``prog.py``, it can be run at the command line and provides useful help messages:: @@ -698,7 +698,7 @@ >>> class FooAction(argparse.Action): ... def __call__(self, parser, namespace, values, option_string=None): - ... print '%r %r %r' % (namespace, values, option_string) + ... print('%r %r %r' % (namespace, values, option_string)) ... setattr(namespace, self.dest, values) ... >>> parser = argparse.ArgumentParser() @@ -1413,10 +1413,10 @@ >>> # sub-command functions >>> def foo(args): - ... print args.x * args.y + ... print(args.x * args.y) ... >>> def bar(args): - ... print '((%s))' % args.z + ... print('((%s))' % args.z) ... >>> # create the top-level parser >>> parser = argparse.ArgumentParser() From python-checkins at python.org Wed Mar 3 03:54:52 2010 From: python-checkins at python.org (brett.cannon) Date: Wed, 3 Mar 2010 03:54:52 +0100 (CET) Subject: [Python-checkins] r78617 - in peps/trunk: Makefile propcheck.py Message-ID: <20100303025452.03CBAFE7D@mail.python.org> Author: brett.cannon Date: Wed Mar 3 03:54:51 2010 New Revision: 78617 Log: Add a file that checks the svn properties on PEPs to make sure they are set, and if not set them. Can be run by ``make propcheck``. Added: peps/trunk/propcheck.py Modified: peps/trunk/Makefile Modified: peps/trunk/Makefile ============================================================================== --- peps/trunk/Makefile (original) +++ peps/trunk/Makefile Wed Mar 3 03:54:51 2010 @@ -30,3 +30,6 @@ update: svn update + +propcheck: + $(PYTHON) propcheck.py Added: peps/trunk/propcheck.py ============================================================================== --- (empty file) +++ peps/trunk/propcheck.py Wed Mar 3 03:54:51 2010 @@ -0,0 +1,74 @@ +"""Perform an integrity check upon all PEPs to make sure the needed svn +properties are set.""" + +import glob +import pdb +import subprocess +from xml.etree import ElementTree + +PROPS = {'svn:eol-style': "native", 'svn:keywords': "Author Date Id Revision"} + + +def get_props(): + """Return the properties set on pep-*.txt files as an ElementTree instance. + + Files with no properties set will not be contained in the returned data. + + """ + cmd = 'svn proplist --xml pep-*.txt' + proc = subprocess.Popen(cmd, shell=True, stdout=subprocess.PIPE) + xml_results = proc.communicate()[0] + if proc.returncode: + raise subprocess.CalledProcessError("%s returned %d" % + (cmd, proc.returncode)) + return ElementTree.fromstring(xml_results) + + +def missing_props(props): + """Figure out what properties are missing on what PEPs, returning a sequence + of (path, [missing_props]) pairs. + + For the set properties (as calculated by get_props()), see which PEPs are + lacking any properties. For the PEPs that are not even listed in the set + properties, assume they are missing all needed properties. + + """ + problems = [] + missing_files = set(glob.glob('pep-*.txt')) + missing_files.remove('pep-0000.txt') + for target in props: + assert target.tag == 'target' + needs = PROPS.keys() + path = target.attrib['path'] + missing_files.remove(path) + for property in target.getchildren(): + assert property.tag == 'property' + try: + needs.remove(property.attrib['name']) + except ValueError: + pass + if needs: + problems.append([path, needs]) + for path in missing_files: + problems.append([path, PROPS.keys()]) + return problems + + +def fix_props(missing_props): + """Fix the missing properties.""" + for path, missing in missing_props: + print "For %s, setting %s" % (path, missing) + for problem in missing: + cmd = 'svn propset %s "%s" %s' % (problem, PROPS[problem], path) + subprocess.check_call(cmd, shell=True) + + +def main(): + props = get_props() + need_fixing = missing_props(props) + fix_props(need_fixing) + + + +if __name__ == '__main__': + main() From python-checkins at python.org Wed Mar 3 03:55:24 2010 From: python-checkins at python.org (brett.cannon) Date: Wed, 3 Mar 2010 03:55:24 +0100 (CET) Subject: [Python-checkins] r78618 - in peps/trunk: pep-0382.txt pep-0389.txt pep-0390.txt pep-0391.txt pep-3003.txt pep-3144.txt pep-3145.txt pep-3146.txt pep-3147.txt pep-3148.txt Message-ID: <20100303025524.9A825EE9D5@mail.python.org> Author: brett.cannon Date: Wed Mar 3 03:55:24 2010 New Revision: 78618 Log: Fix svn properties on a bunch of PEPs thanks to make propcheck. Modified: peps/trunk/pep-0382.txt (props changed) peps/trunk/pep-0389.txt (props changed) peps/trunk/pep-0390.txt (contents, props changed) peps/trunk/pep-0391.txt (props changed) peps/trunk/pep-3003.txt (props changed) peps/trunk/pep-3144.txt (props changed) peps/trunk/pep-3145.txt (props changed) peps/trunk/pep-3146.txt (props changed) peps/trunk/pep-3147.txt (props changed) peps/trunk/pep-3148.txt (props changed) Modified: peps/trunk/pep-0390.txt ============================================================================== --- peps/trunk/pep-0390.txt (original) +++ peps/trunk/pep-0390.txt Wed Mar 3 03:55:24 2010 @@ -1,7 +1,7 @@ PEP: 390 Title: Static metadata for Distutils -Version: $Revision: 70705 $ -Last-Modified: $Date: 2009-03-30 06:53:39 +0200 (Lun 30 mar 2009) $ +Version: $Revision$ +Last-Modified: $Date$ Author: Tarek Ziad? Status: Draft Type: Standards Track From python-checkins at python.org Wed Mar 3 04:09:49 2010 From: python-checkins at python.org (barry.warsaw) Date: Wed, 3 Mar 2010 04:09:49 +0100 (CET) Subject: [Python-checkins] r78619 - in python/branches/release26-maint: Include/patchlevel.h Misc/NEWS Message-ID: <20100303030949.858D8BF1D@mail.python.org> Author: barry.warsaw Date: Wed Mar 3 04:09:49 2010 New Revision: 78619 Log: Post 2.6.5rc1 cleanup. Modified: python/branches/release26-maint/Include/patchlevel.h python/branches/release26-maint/Misc/NEWS Modified: python/branches/release26-maint/Include/patchlevel.h ============================================================================== --- python/branches/release26-maint/Include/patchlevel.h (original) +++ python/branches/release26-maint/Include/patchlevel.h Wed Mar 3 04:09:49 2010 @@ -27,7 +27,7 @@ #define PY_RELEASE_SERIAL 1 /* Version as a string */ -#define PY_VERSION "2.6.5rc1" +#define PY_VERSION "2.6.5rc1+" /*--end constants--*/ /* Subversion Revision number of this file (not of the repository) */ Modified: python/branches/release26-maint/Misc/NEWS ============================================================================== --- python/branches/release26-maint/Misc/NEWS (original) +++ python/branches/release26-maint/Misc/NEWS Wed Mar 3 04:09:49 2010 @@ -4,6 +4,18 @@ (editors: check NEWS.help for information about editing NEWS using ReST.) +What's New in Python 2.6.5 final? +================================= + +*Release date: 2010-03-XX* + +Core and Builtins +----------------- + +Library +------- + + What's New in Python 2.6.5 rc 1? ================================ From python-checkins at python.org Wed Mar 3 12:49:53 2010 From: python-checkins at python.org (florent.xicluna) Date: Wed, 3 Mar 2010 12:49:53 +0100 (CET) Subject: [Python-checkins] r78620 - python/trunk/Python/sysmodule.c Message-ID: <20100303114953.3DB32EE9FB@mail.python.org> Author: florent.xicluna Date: Wed Mar 3 12:49:53 2010 New Revision: 78620 Log: Revert a nonexistent docstring typo, r42805. Modified: python/trunk/Python/sysmodule.c Modified: python/trunk/Python/sysmodule.c ============================================================================== --- python/trunk/Python/sysmodule.c (original) +++ python/trunk/Python/sysmodule.c Wed Mar 3 12:49:53 2010 @@ -126,7 +126,7 @@ PyDoc_STRVAR(displayhook_doc, "displayhook(object) -> None\n" "\n" -"Print an object to sys.stdout and also save it in __builtin__.\n" +"Print an object to sys.stdout and also save it in __builtin__._\n" ); static PyObject * From python-checkins at python.org Wed Mar 3 12:50:46 2010 From: python-checkins at python.org (florent.xicluna) Date: Wed, 3 Mar 2010 12:50:46 +0100 (CET) Subject: [Python-checkins] r78621 - python/branches/release26-maint/Python/sysmodule.c Message-ID: <20100303115046.9D8BAEE9CC@mail.python.org> Author: florent.xicluna Date: Wed Mar 3 12:50:46 2010 New Revision: 78621 Log: Merged revisions 78620 via svnmerge from svn+ssh://pythondev at svn.python.org/python/trunk ........ r78620 | florent.xicluna | 2010-03-03 12:49:53 +0100 (mer, 03 mar 2010) | 2 lines Revert a nonexistent docstring typo, r42805. ........ Modified: python/branches/release26-maint/Python/sysmodule.c Modified: python/branches/release26-maint/Python/sysmodule.c ============================================================================== --- python/branches/release26-maint/Python/sysmodule.c (original) +++ python/branches/release26-maint/Python/sysmodule.c Wed Mar 3 12:50:46 2010 @@ -126,7 +126,7 @@ PyDoc_STRVAR(displayhook_doc, "displayhook(object) -> None\n" "\n" -"Print an object to sys.stdout and also save it in __builtin__.\n" +"Print an object to sys.stdout and also save it in __builtin__._\n" ); static PyObject * From python-checkins at python.org Wed Mar 3 12:54:54 2010 From: python-checkins at python.org (florent.xicluna) Date: Wed, 3 Mar 2010 12:54:54 +0100 (CET) Subject: [Python-checkins] r78622 - in python/branches/py3k: Python/sysmodule.c Message-ID: <20100303115454.CEF98EE989@mail.python.org> Author: florent.xicluna Date: Wed Mar 3 12:54:54 2010 New Revision: 78622 Log: Merged revisions 78620 via svnmerge from svn+ssh://pythondev at svn.python.org/python/trunk ........ r78620 | florent.xicluna | 2010-03-03 12:49:53 +0100 (mer, 03 mar 2010) | 2 lines Revert a nonexistent docstring typo, r42805. ........ Modified: python/branches/py3k/ (props changed) python/branches/py3k/Python/sysmodule.c Modified: python/branches/py3k/Python/sysmodule.c ============================================================================== --- python/branches/py3k/Python/sysmodule.c (original) +++ python/branches/py3k/Python/sysmodule.c Wed Mar 3 12:54:54 2010 @@ -107,7 +107,7 @@ PyDoc_STRVAR(displayhook_doc, "displayhook(object) -> None\n" "\n" -"Print an object to sys.stdout and also save it in builtins.\n" +"Print an object to sys.stdout and also save it in builtins._\n" ); static PyObject * From python-checkins at python.org Wed Mar 3 12:55:49 2010 From: python-checkins at python.org (lars.gustaebel) Date: Wed, 3 Mar 2010 12:55:49 +0100 (CET) Subject: [Python-checkins] r78623 - in python/trunk: Doc/library/tarfile.rst Lib/tarfile.py Lib/test/test_tarfile.py Misc/NEWS Message-ID: <20100303115549.26166EE98B@mail.python.org> Author: lars.gustaebel Date: Wed Mar 3 12:55:48 2010 New Revision: 78623 Log: Issue #7232: Add support for the context manager protocol to the TarFile class. Modified: python/trunk/Doc/library/tarfile.rst python/trunk/Lib/tarfile.py python/trunk/Lib/test/test_tarfile.py python/trunk/Misc/NEWS Modified: python/trunk/Doc/library/tarfile.rst ============================================================================== --- python/trunk/Doc/library/tarfile.rst (original) +++ python/trunk/Doc/library/tarfile.rst Wed Mar 3 12:55:48 2010 @@ -234,6 +234,14 @@ archive several times. Each archive member is represented by a :class:`TarInfo` object, see :ref:`tarinfo-objects` for details. +A :class:`TarFile` object can be used as a context manager in a :keyword:`with` +statement. It will automatically be closed when the block is completed. Please +note that in the event of an exception an archive opened for writing will not +be finalized, only the internally used file object will be closed. See the +:ref:`tar-examples` section for a use case. + +.. versionadded:: 2.7 + Added support for the context manager protocol. .. class:: TarFile(name=None, mode='r', fileobj=None, format=DEFAULT_FORMAT, tarinfo=TarInfo, dereference=False, ignore_zeros=False, encoding=ENCODING, errors=None, pax_headers=None, debug=0, errorlevel=0) @@ -650,6 +658,13 @@ tar.add(name) tar.close() +The same example using the :keyword:`with` statement:: + + import tarfile + with tarfile.open("sample.tar", "w") as tar: + for name in ["foo", "bar", "quux"]: + tar.add(name) + How to read a gzip compressed tar archive and display some member information:: import tarfile Modified: python/trunk/Lib/tarfile.py ============================================================================== --- python/trunk/Lib/tarfile.py (original) +++ python/trunk/Lib/tarfile.py Wed Mar 3 12:55:48 2010 @@ -2411,6 +2411,20 @@ """ if level <= self.debug: print >> sys.stderr, msg + + def __enter__(self): + self._check() + return self + + def __exit__(self, type, value, traceback): + if type is None: + self.close() + else: + # An exception occurred. We must not call close() because + # it would try to write end-of-archive blocks and padding. + if not self._extfileobj: + self.fileobj.close() + self.closed = True # class TarFile class TarIter: Modified: python/trunk/Lib/test/test_tarfile.py ============================================================================== --- python/trunk/Lib/test/test_tarfile.py (original) +++ python/trunk/Lib/test/test_tarfile.py Wed Mar 3 12:55:48 2010 @@ -1292,6 +1292,65 @@ tarinfo.tobuf(tarfile.PAX_FORMAT) +class ContextManagerTest(unittest.TestCase): + + def test_basic(self): + with tarfile.open(tarname) as tar: + self.assertFalse(tar.closed, "closed inside runtime context") + self.assertTrue(tar.closed, "context manager failed") + + def test_closed(self): + # The __enter__() method is supposed to raise IOError + # if the TarFile object is already closed. + tar = tarfile.open(tarname) + tar.close() + with self.assertRaises(IOError): + with tar: + pass + + def test_exception(self): + # Test if the IOError exception is passed through properly. + with self.assertRaises(Exception) as exc: + with tarfile.open(tarname) as tar: + raise IOError + self.assertIsInstance(exc.exception, IOError, + "wrong exception raised in context manager") + self.assertTrue(tar.closed, "context manager failed") + + def test_no_eof(self): + # __exit__() must not write end-of-archive blocks if an + # exception was raised. + try: + with tarfile.open(tmpname, "w") as tar: + raise Exception + except: + pass + self.assertEqual(os.path.getsize(tmpname), 0, + "context manager wrote an end-of-archive block") + self.assertTrue(tar.closed, "context manager failed") + + def test_eof(self): + # __exit__() must write end-of-archive blocks, i.e. call + # TarFile.close() if there was no error. + with tarfile.open(tmpname, "w"): + pass + self.assertNotEqual(os.path.getsize(tmpname), 0, + "context manager wrote no end-of-archive block") + + def test_fileobj(self): + # Test that __exit__() did not close the external file + # object. + fobj = open(tmpname, "wb") + try: + with tarfile.open(fileobj=fobj, mode="w") as tar: + raise Exception + except: + pass + self.assertFalse(fobj.closed, "external file object was closed") + self.assertTrue(tar.closed, "context manager failed") + fobj.close() + + class GzipMiscReadTest(MiscReadTest): tarname = gzipname mode = "r:gz" @@ -1371,6 +1430,7 @@ PaxUnicodeTest, AppendTest, LimitsTest, + ContextManagerTest, ] if hasattr(os, "link"): Modified: python/trunk/Misc/NEWS ============================================================================== --- python/trunk/Misc/NEWS (original) +++ python/trunk/Misc/NEWS Wed Mar 3 12:55:48 2010 @@ -38,6 +38,9 @@ Library ------- +- Issue #7232: Add support for the context manager protocol to the TarFile + class. + - Issue #7250: Fix info leak of os.environ across multi-run uses of wsgiref.handlers.CGIHandler. From python-checkins at python.org Wed Mar 3 12:55:53 2010 From: python-checkins at python.org (florent.xicluna) Date: Wed, 3 Mar 2010 12:55:53 +0100 (CET) Subject: [Python-checkins] r78624 - in python/branches/release31-maint: Python/sysmodule.c Message-ID: <20100303115553.D76FEEE9B5@mail.python.org> Author: florent.xicluna Date: Wed Mar 3 12:55:53 2010 New Revision: 78624 Log: Merged revisions 78622 via svnmerge from svn+ssh://pythondev at svn.python.org/python/branches/py3k ................ r78622 | florent.xicluna | 2010-03-03 12:54:54 +0100 (mer, 03 mar 2010) | 9 lines Merged revisions 78620 via svnmerge from svn+ssh://pythondev at svn.python.org/python/trunk ........ r78620 | florent.xicluna | 2010-03-03 12:49:53 +0100 (mer, 03 mar 2010) | 2 lines Revert a nonexistent docstring typo, r42805. ........ ................ Modified: python/branches/release31-maint/ (props changed) python/branches/release31-maint/Python/sysmodule.c Modified: python/branches/release31-maint/Python/sysmodule.c ============================================================================== --- python/branches/release31-maint/Python/sysmodule.c (original) +++ python/branches/release31-maint/Python/sysmodule.c Wed Mar 3 12:55:53 2010 @@ -107,7 +107,7 @@ PyDoc_STRVAR(displayhook_doc, "displayhook(object) -> None\n" "\n" -"Print an object to sys.stdout and also save it in builtins.\n" +"Print an object to sys.stdout and also save it in builtins._\n" ); static PyObject * From python-checkins at python.org Wed Mar 3 12:59:47 2010 From: python-checkins at python.org (florent.xicluna) Date: Wed, 3 Mar 2010 12:59:47 +0100 (CET) Subject: [Python-checkins] r78625 - python/branches/release26-maint Message-ID: <20100303115947.C6C29EE989@mail.python.org> Author: florent.xicluna Date: Wed Mar 3 12:59:47 2010 New Revision: 78625 Log: Missing property from previous changeset r78621. Recorded merge of revisions 78620 via svnmerge from svn+ssh://pythondev at svn.python.org/python/trunk ........ r78620 | florent.xicluna | 2010-03-03 12:49:53 +0100 (mer, 03 mar 2010) | 2 lines Revert a nonexistent docstring typo, r42805. ........ Modified: python/branches/release26-maint/ (props changed) From python-checkins at python.org Wed Mar 3 13:08:54 2010 From: python-checkins at python.org (lars.gustaebel) Date: Wed, 3 Mar 2010 13:08:54 +0100 (CET) Subject: [Python-checkins] r78626 - in python/branches/py3k: Doc/library/tarfile.rst Lib/tarfile.py Lib/test/test_tarfile.py Misc/NEWS Message-ID: <20100303120854.EF6E2EE989@mail.python.org> Author: lars.gustaebel Date: Wed Mar 3 13:08:54 2010 New Revision: 78626 Log: Merged revisions 78623 via svnmerge from svn+ssh://pythondev at svn.python.org/python/trunk ........ r78623 | lars.gustaebel | 2010-03-03 12:55:48 +0100 (Wed, 03 Mar 2010) | 3 lines Issue #7232: Add support for the context manager protocol to the TarFile class. ........ Modified: python/branches/py3k/ (props changed) python/branches/py3k/Doc/library/tarfile.rst python/branches/py3k/Lib/tarfile.py python/branches/py3k/Lib/test/test_tarfile.py python/branches/py3k/Misc/NEWS Modified: python/branches/py3k/Doc/library/tarfile.rst ============================================================================== --- python/branches/py3k/Doc/library/tarfile.rst (original) +++ python/branches/py3k/Doc/library/tarfile.rst Wed Mar 3 13:08:54 2010 @@ -209,6 +209,14 @@ archive several times. Each archive member is represented by a :class:`TarInfo` object, see :ref:`tarinfo-objects` for details. +A :class:`TarFile` object can be used as a context manager in a :keyword:`with` +statement. It will automatically be closed when the block is completed. Please +note that in the event of an exception an archive opened for writing will not +be finalized, only the internally used file object will be closed. See the +:ref:`tar-examples` section for a use case. + +.. versionadded:: 3.2 + Added support for the context manager protocol. .. class:: TarFile(name=None, mode='r', fileobj=None, format=DEFAULT_FORMAT, tarinfo=TarInfo, dereference=False, ignore_zeros=False, encoding=ENCODING, errors=None, pax_headers=None, debug=0, errorlevel=0) @@ -593,6 +601,13 @@ tar.add(name) tar.close() +The same example using the :keyword:`with` statement:: + + import tarfile + with tarfile.open("sample.tar", "w") as tar: + for name in ["foo", "bar", "quux"]: + tar.add(name) + How to read a gzip compressed tar archive and display some member information:: import tarfile Modified: python/branches/py3k/Lib/tarfile.py ============================================================================== --- python/branches/py3k/Lib/tarfile.py (original) +++ python/branches/py3k/Lib/tarfile.py Wed Mar 3 13:08:54 2010 @@ -2391,6 +2391,20 @@ """ if level <= self.debug: print(msg, file=sys.stderr) + + def __enter__(self): + self._check() + return self + + def __exit__(self, type, value, traceback): + if type is None: + self.close() + else: + # An exception occurred. We must not call close() because + # it would try to write end-of-archive blocks and padding. + if not self._extfileobj: + self.fileobj.close() + self.closed = True # class TarFile class TarIter: Modified: python/branches/py3k/Lib/test/test_tarfile.py ============================================================================== --- python/branches/py3k/Lib/test/test_tarfile.py (original) +++ python/branches/py3k/Lib/test/test_tarfile.py Wed Mar 3 13:08:54 2010 @@ -1274,6 +1274,65 @@ self.assertEqual(tarfile.itn(0xffffffff), b"\x80\x00\x00\x00\xff\xff\xff\xff") +class ContextManagerTest(unittest.TestCase): + + def test_basic(self): + with tarfile.open(tarname) as tar: + self.assertFalse(tar.closed, "closed inside runtime context") + self.assertTrue(tar.closed, "context manager failed") + + def test_closed(self): + # The __enter__() method is supposed to raise IOError + # if the TarFile object is already closed. + tar = tarfile.open(tarname) + tar.close() + with self.assertRaises(IOError): + with tar: + pass + + def test_exception(self): + # Test if the IOError exception is passed through properly. + with self.assertRaises(Exception) as exc: + with tarfile.open(tarname) as tar: + raise IOError + self.assertIsInstance(exc.exception, IOError, + "wrong exception raised in context manager") + self.assertTrue(tar.closed, "context manager failed") + + def test_no_eof(self): + # __exit__() must not write end-of-archive blocks if an + # exception was raised. + try: + with tarfile.open(tmpname, "w") as tar: + raise Exception + except: + pass + self.assertEqual(os.path.getsize(tmpname), 0, + "context manager wrote an end-of-archive block") + self.assertTrue(tar.closed, "context manager failed") + + def test_eof(self): + # __exit__() must write end-of-archive blocks, i.e. call + # TarFile.close() if there was no error. + with tarfile.open(tmpname, "w"): + pass + self.assertNotEqual(os.path.getsize(tmpname), 0, + "context manager wrote no end-of-archive block") + + def test_fileobj(self): + # Test that __exit__() did not close the external file + # object. + fobj = open(tmpname, "wb") + try: + with tarfile.open(fileobj=fobj, mode="w") as tar: + raise Exception + except: + pass + self.assertFalse(fobj.closed, "external file object was closed") + self.assertTrue(tar.closed, "context manager failed") + fobj.close() + + class GzipMiscReadTest(MiscReadTest): tarname = gzipname mode = "r:gz" @@ -1354,6 +1413,7 @@ AppendTest, LimitsTest, MiscTest, + ContextManagerTest, ] if hasattr(os, "link"): Modified: python/branches/py3k/Misc/NEWS ============================================================================== --- python/branches/py3k/Misc/NEWS (original) +++ python/branches/py3k/Misc/NEWS Wed Mar 3 13:08:54 2010 @@ -265,6 +265,9 @@ Library ------- +- Issue #7232: Add support for the context manager protocol to the TarFile + class. + - Issue #7250: Fix info leak of os.environ across multi-run uses of wsgiref.handlers.CGIHandler. From python-checkins at python.org Wed Mar 3 13:18:28 2010 From: python-checkins at python.org (lars.gustaebel) Date: Wed, 3 Mar 2010 13:18:28 +0100 (CET) Subject: [Python-checkins] r78627 - python/branches/release26-maint Message-ID: <20100303121828.CACF5EEA19@mail.python.org> Author: lars.gustaebel Date: Wed Mar 3 13:18:28 2010 New Revision: 78627 Log: Blocked revisions 78623 via svnmerge ........ r78623 | lars.gustaebel | 2010-03-03 12:55:48 +0100 (Wed, 03 Mar 2010) | 3 lines Issue #7232: Add support for the context manager protocol to the TarFile class. ........ Modified: python/branches/release26-maint/ (props changed) From python-checkins at python.org Wed Mar 3 13:19:15 2010 From: python-checkins at python.org (lars.gustaebel) Date: Wed, 3 Mar 2010 13:19:15 +0100 (CET) Subject: [Python-checkins] r78628 - python/branches/release31-maint Message-ID: <20100303121915.59873EEA52@mail.python.org> Author: lars.gustaebel Date: Wed Mar 3 13:19:15 2010 New Revision: 78628 Log: Blocked revisions 78626 via svnmerge ................ r78626 | lars.gustaebel | 2010-03-03 13:08:54 +0100 (Wed, 03 Mar 2010) | 10 lines Merged revisions 78623 via svnmerge from svn+ssh://pythondev at svn.python.org/python/trunk ........ r78623 | lars.gustaebel | 2010-03-03 12:55:48 +0100 (Wed, 03 Mar 2010) | 3 lines Issue #7232: Add support for the context manager protocol to the TarFile class. ........ ................ Modified: python/branches/release31-maint/ (props changed) From python-checkins at python.org Wed Mar 3 13:31:33 2010 From: python-checkins at python.org (barry.warsaw) Date: Wed, 3 Mar 2010 13:31:33 +0100 (CET) Subject: [Python-checkins] r78629 - python/branches/release26-maint/Python/sysmodule.c Message-ID: <20100303123133.C8EFAEE9E2@mail.python.org> Author: barry.warsaw Date: Wed Mar 3 13:31:33 2010 New Revision: 78629 Log: Revert r78621. This was not a critical fix and we're in rc mode. Modified: python/branches/release26-maint/Python/sysmodule.c Modified: python/branches/release26-maint/Python/sysmodule.c ============================================================================== --- python/branches/release26-maint/Python/sysmodule.c (original) +++ python/branches/release26-maint/Python/sysmodule.c Wed Mar 3 13:31:33 2010 @@ -126,7 +126,7 @@ PyDoc_STRVAR(displayhook_doc, "displayhook(object) -> None\n" "\n" -"Print an object to sys.stdout and also save it in __builtin__._\n" +"Print an object to sys.stdout and also save it in __builtin__.\n" ); static PyObject * From python-checkins at python.org Wed Mar 3 13:34:43 2010 From: python-checkins at python.org (barry.warsaw) Date: Wed, 3 Mar 2010 13:34:43 +0100 (CET) Subject: [Python-checkins] r78630 - python/branches/release26-maint/Modules/_ssl.c Message-ID: <20100303123443.A1139EE989@mail.python.org> Author: barry.warsaw Date: Wed Mar 3 13:34:43 2010 New Revision: 78630 Log: Reverting r78597. This is not a critical fix and we're in rc mode. Modified: python/branches/release26-maint/Modules/_ssl.c Modified: python/branches/release26-maint/Modules/_ssl.c ============================================================================== --- python/branches/release26-maint/Modules/_ssl.c (original) +++ python/branches/release26-maint/Modules/_ssl.c Wed Mar 3 13:34:43 2010 @@ -667,12 +667,7 @@ 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; From python-checkins at python.org Wed Mar 3 15:11:24 2010 From: python-checkins at python.org (barry.warsaw) Date: Wed, 3 Mar 2010 15:11:24 +0100 (CET) Subject: [Python-checkins] r78631 - in peps/trunk: pep-3147-1.dia pep-3147-1.png pep-3147.txt Message-ID: <20100303141124.44986FDD6@mail.python.org> Author: barry.warsaw Date: Wed Mar 3 15:11:24 2010 New Revision: 78631 Log: Updated PEP 3147 with latest BDFL pronouncement. Modified: peps/trunk/pep-3147-1.dia peps/trunk/pep-3147-1.png peps/trunk/pep-3147.txt Modified: peps/trunk/pep-3147-1.dia ============================================================================== Binary files. No diff available. Modified: peps/trunk/pep-3147-1.png ============================================================================== Binary files. No diff available. Modified: peps/trunk/pep-3147.txt ============================================================================== --- peps/trunk/pep-3147.txt (original) +++ peps/trunk/pep-3147.txt Wed Mar 3 15:11:24 2010 @@ -8,7 +8,7 @@ Content-Type: text/x-rst Created: 2009-12-16 Python-Version: 3.2 -Post-History: 2010-01-30, 2010-02-25 +Post-History: 2010-01-30, 2010-02-25, 2010-03-03 Abstract @@ -75,7 +75,7 @@ the sheer number of packages available, this amount of work is infeasible. -Even C extensions can be source compatible across multiple versions of +C extensions can be source compatible across multiple versions of Python. Compiled extension modules are usually not compatible though, and PEP 384 [7]_ has been proposed to address this by defining a stable ABI for extension modules. @@ -101,10 +101,9 @@ code cache files in a single directory inside every Python package directory. This directory will be called `__pycache__`. -Further, pyc files will contain a magic string that -differentiates the Python version they were compiled for. This allows -multiple byte compiled cache files to co-exist for a single Python -source file. +Further, pyc files will contain a magic string that differentiates the +Python version they were compiled for. This allows multiple byte +compiled cache files to co-exist for a single Python source file. This scheme has the added benefit of reducing the clutter in a Python package directory. @@ -112,8 +111,8 @@ What would this look like in practice? Let's say we have a Python package named `alpha` which contains a -sub-package name `beta`. The source directory layout might look like -this:: +sub-package name `beta`. The source directory layout before byte +compilation might look like this:: alpha/ __init__.py @@ -144,6 +143,8 @@ three.py four.py +*Note: listing order may differ depending on the platform.* + Let's say that two new versions of Python are installed, one is Python 3.3 and another is Unladen Swallow. After byte compilation, the file system would look like this:: @@ -240,23 +241,29 @@ leaving the cached pyc file still on the file system. If the `__pycache__/foo..pyc` file exists, but the `foo.py` file used to create it does not, Python will raise an `ImportError` when asked -to import foo. In other words, by default, Python will not support -importing a module unless the source file exists. +to import foo. In other words, Python will not import a pyc file from +the cache directory unless the source file exists. -Python users who want to deploy sourceless imports are instructed to -create a custom importer that supports this behavior. Options include -importing pycs from a zip file, or locating pyc files where the py -source file would have existed. (See the Open Issues section for more -discussion.) +Case 4: legacy pyc files and source-less imports +------------------------------------------------ + +Python will ignore all legacy pyc files when a source file exists next +to it. In other words, if a `foo.pyc` file exists next to the +`foo.py` file, the pyc file will be ignored in all cases + +In order to continue to support source-less distributions though, if +the source file is missing, Python will import a lone pyc file if it +lives where the source file would have been. -Case 4: legacy pyc files ------------------------- -Python will ignore all legacy pyc files. In other words, if a -`foo.pyc` file exists next to the `foo.py` file, it will be ignored in -all cases, including sourceless deployments. Python users wishing to -support this use case can create a custom importer. +Case 5: read-only file systems +------------------------------ + +When the source lives on a read-only file system, or the `__pycache__` +directory or pyc file cannot otherwise be written, all the same rules +apply. + Flow chart @@ -273,7 +280,7 @@ pyc files inside of the `__pycache__` directories contain a magic identifier in their file names. These are mnemonic tags for the -actual magic numbers used by the importer. For example, for Python +actual magic numbers used by the importer. For example, in Python 3.2, we could use the hexlified [10]_ magic number as a unique identifier:: @@ -402,8 +409,8 @@ 2.7), this behavior will be turned on by default, and in fact, it will replace the old behavior. Backports will need to support the old layout by default. We suggest supporting PEP 3147 through the use of -an environment variable called `$PYTHONCACHEDIR` or the command line -switch `-Xcachedir` to enable the feature. +an environment variable called `$PYTHONENABLECACHEDIR` or the command +line switch `-Xenablecachedir` to enable the feature. Alternatives @@ -482,58 +489,40 @@ Open issues =========== -Byte code only packages ------------------------ +__pycache__ vs. __cachepy__ +----------------------------- -Some users of Python distribute packages containing only the byte code -files (pyc). The use cases for this are to make it more difficult for -end-users to view the source code, and to reduce maintenance burdens -when end users casually edit the source files. - -This PEP currently promote no default support for bytecode-only -packages. The primary motivator for this are that we can reduce stat -calls if the importer only looks for .py files, making Python start-up -and import faster. - -The question is how to balance the requirements of bytecode-only users -with the more universally beneficial faster start up times for -requiring source files? Should all Python users pay the extra stat -call penalty in the general case for a minority use case by default? -Evidence shows that the extra stats can be fairly costly to start up -time. - -There are several ways out of this. Should we decide that it's -important enough to support bytecode-only packages, the semantics -would be as follows: - -* If there is a traditional, non-magic-tagged .pyc file in the - location where a .py file should be found, it will satisfy the - import. -* The `__file__` attribute of the module will point to the .pyc file. -* The `__cached__` attribute of the module will point to the .pyc file - too. -* The existence of a matching `__pycached__/foo..pyc` file - without the source py file will *not* satisfy the import. This - means that if the source file is removed, the pyc file will be - ignored (unlike in today's implementation). - -Other ways to satisfy the bytecode-only packagers requirements would -have less impact on the general Python user population, and include: - -* Add a `-X` switch and/or environment variable to enable - the bytecode-only search algorithm. -* Let those who want more protection against casual py hackers package - their code in a zip file, which is supported today. Sub-options - include supporting pyc-only imports only in zip files, or still - requiring the py file for zip imports. -* Provide a custom importer supporting bytecode-only packages, which - would have to be enabled explicitly by the application. Either - Python would provide such a custom importer or it would be left to - third parties to implement. -* Add a marker to a package's `__init__.py` file to enable - bytecode-only imports for everything else in the package. -* Leave it to third-party tools such as py2exe [20]_ to build an - ecosystem and standards around source-less distributions. +Minor point, but __pycache__ sorts after __init__.py alphabetically so +that might be a little jarring (see the directory layout examples +above). It seems that `ls(1)` on Linux at least also sorts the files +alphabetically, ignoring the leading underscores. + +Should we name the cache directory something like `__cachepy__` so +that it sorts before `__init__.py`? OTOH, many graphical file system +navigators sort directories before plain files anyway, so maybe it +doesn't matter. + +Here are some sample `ls(1) -l` output. First, with `__pycache__`:: + + % ls -l + total 8 + -rw-rw-r-- 1 user user 0 2010-03-03 08:29 alpha.py + drwxrwxr-x 2 user user 4096 2010-03-03 08:28 beta/ + -rw-rw-r-- 1 user user 0 2010-03-03 08:28 __init__.py + -rw-rw-r-- 1 user user 0 2010-03-03 08:28 one.py + drwxrwxr-x 2 user user 4096 2010-03-03 08:28 __pycache__/ + -rw-rw-r-- 1 user user 0 2010-03-03 08:28 two.py + +Now, with `__cachepy__`:: + + % ls -l + total 8 + -rw-rw-r-- 1 user user 0 2010-03-03 08:29 alpha.py + drwxrwxr-x 2 user user 4096 2010-03-03 08:28 beta/ + drwxrwxr-x 2 user user 4096 2010-03-03 08:28 __cachepy__/ + -rw-rw-r-- 1 user user 0 2010-03-03 08:28 __init__.py + -rw-rw-r-- 1 user user 0 2010-03-03 08:28 one.py + -rw-rw-r-- 1 user user 0 2010-03-03 08:28 two.py __cached__ vs. __compiled__ @@ -592,9 +581,6 @@ .. [18] importlib: http://docs.python.org/3.1/library/importlib.html -.. [19] http://mail.python.org/pipermail/python-dev/2010-March/098042.html - -.. [20] py2exe: http://www.py2exe.org/ ACKNOWLEDGMENTS =============== From python-checkins at python.org Wed Mar 3 21:10:46 2010 From: python-checkins at python.org (ezio.melotti) Date: Wed, 3 Mar 2010 21:10:46 +0100 (CET) Subject: [Python-checkins] r78632 - python/branches/py3k/Misc/maintainers.rst Message-ID: <20100303201046.11B03FE43@mail.python.org> Author: ezio.melotti Date: Wed Mar 3 21:10:45 2010 New Revision: 78632 Log: Add the argparse module and Steven as its maintainer. Modified: python/branches/py3k/Misc/maintainers.rst Modified: python/branches/py3k/Misc/maintainers.rst ============================================================================== --- python/branches/py3k/Misc/maintainers.rst (original) +++ python/branches/py3k/Misc/maintainers.rst Wed Mar 3 21:10:45 2010 @@ -45,6 +45,7 @@ _thread abc aifc r.david.murray +argparse bethard array ast asynchat josiahcarlson From python-checkins at python.org Wed Mar 3 21:12:28 2010 From: python-checkins at python.org (ezio.melotti) Date: Wed, 3 Mar 2010 21:12:28 +0100 (CET) Subject: [Python-checkins] r78633 - in python/branches/release31-maint: Misc/maintainers.rst Message-ID: <20100303201228.B6237EE9E7@mail.python.org> Author: ezio.melotti Date: Wed Mar 3 21:12:28 2010 New Revision: 78633 Log: Merged revisions 78632 via svnmerge from svn+ssh://pythondev at svn.python.org/python/branches/py3k ........ r78632 | ezio.melotti | 2010-03-03 22:10:45 +0200 (Wed, 03 Mar 2010) | 1 line Add the argparse module and Steven as its maintainer. ........ Modified: python/branches/release31-maint/ (props changed) python/branches/release31-maint/Misc/maintainers.rst Modified: python/branches/release31-maint/Misc/maintainers.rst ============================================================================== --- python/branches/release31-maint/Misc/maintainers.rst (original) +++ python/branches/release31-maint/Misc/maintainers.rst Wed Mar 3 21:12:28 2010 @@ -47,6 +47,7 @@ _thread abc aifc r.david.murray +argparse bethard array ast asynchat josiahcarlson From python-checkins at python.org Wed Mar 3 22:28:25 2010 From: python-checkins at python.org (benjamin.peterson) Date: Wed, 3 Mar 2010 22:28:25 +0100 (CET) Subject: [Python-checkins] r78634 - python/trunk/Doc/library/argparse.rst Message-ID: <20100303212825.CF136EEA8F@mail.python.org> Author: benjamin.peterson Date: Wed Mar 3 22:28:25 2010 New Revision: 78634 Log: rephrase Modified: python/trunk/Doc/library/argparse.rst Modified: python/trunk/Doc/library/argparse.rst ============================================================================== --- python/trunk/Doc/library/argparse.rst (original) +++ python/trunk/Doc/library/argparse.rst Wed Mar 3 22:28:25 2010 @@ -67,7 +67,7 @@ Creating a parser ^^^^^^^^^^^^^^^^^ -Mose uses of the :mod:`argparse` module will start out by creating an +The first step in using the :mod:`argparse` is creating an :class:`ArgumentParser` object:: >>> parser = argparse.ArgumentParser(description='Process some integers.') From python-checkins at python.org Wed Mar 3 22:53:42 2010 From: python-checkins at python.org (victor.stinner) Date: Wed, 3 Mar 2010 22:53:42 +0100 (CET) Subject: [Python-checkins] r78635 - python/trunk/Modules/_curses_panel.c Message-ID: <20100303215342.0D36AFE36@mail.python.org> Author: victor.stinner Date: Wed Mar 3 22:53:41 2010 New Revision: 78635 Log: Issue #3299: fix curses.panel.new_panel() error handler, replace PyObject_DEL() by Py_DECREF() to avoid a crash in pydebug mode. Use po->wo==NULL to detect than the panel is in the lop list or not. Modified: python/trunk/Modules/_curses_panel.c Modified: python/trunk/Modules/_curses_panel.c ============================================================================== --- python/trunk/Modules/_curses_panel.c (original) +++ python/trunk/Modules/_curses_panel.c Wed Mar 3 22:53:41 2010 @@ -178,12 +178,13 @@ po = PyObject_NEW(PyCursesPanelObject, &PyCursesPanel_Type); if (po == NULL) return NULL; po->pan = pan; - po->wo = wo; - Py_INCREF(wo); if (insert_lop(po) < 0) { - PyObject_DEL(po); + po->wo = NULL; + Py_DECREF(po); return NULL; } + po->wo = wo; + Py_INCREF(wo); return (PyObject *)po; } @@ -191,8 +192,10 @@ PyCursesPanel_Dealloc(PyCursesPanelObject *po) { (void)del_panel(po->pan); - Py_DECREF(po->wo); - remove_lop(po); + if (po->wo != NULL) { + Py_DECREF(po->wo); + remove_lop(po); + } PyObject_DEL(po); } From python-checkins at python.org Wed Mar 3 22:56:53 2010 From: python-checkins at python.org (victor.stinner) Date: Wed, 3 Mar 2010 22:56:53 +0100 (CET) Subject: [Python-checkins] r78636 - in python/branches/py3k: Modules/_curses_panel.c Message-ID: <20100303215653.C9FDEEEAA6@mail.python.org> Author: victor.stinner Date: Wed Mar 3 22:56:53 2010 New Revision: 78636 Log: Merged revisions 78635 via svnmerge from svn+ssh://pythondev at svn.python.org/python/trunk ........ r78635 | victor.stinner | 2010-03-03 22:53:41 +0100 (mer., 03 mars 2010) | 5 lines Issue #3299: fix curses.panel.new_panel() error handler, replace PyObject_DEL() by Py_DECREF() to avoid a crash in pydebug mode. Use po->wo==NULL to detect than the panel is in the lop list or not. ........ Modified: python/branches/py3k/ (props changed) python/branches/py3k/Modules/_curses_panel.c Modified: python/branches/py3k/Modules/_curses_panel.c ============================================================================== --- python/branches/py3k/Modules/_curses_panel.c (original) +++ python/branches/py3k/Modules/_curses_panel.c Wed Mar 3 22:56:53 2010 @@ -178,12 +178,13 @@ po = PyObject_NEW(PyCursesPanelObject, &PyCursesPanel_Type); if (po == NULL) return NULL; po->pan = pan; - po->wo = wo; - Py_INCREF(wo); if (insert_lop(po) < 0) { - PyObject_DEL(po); + po->wo = NULL; + Py_DECREF(po); return NULL; } + po->wo = wo; + Py_INCREF(wo); return (PyObject *)po; } @@ -191,8 +192,10 @@ PyCursesPanel_Dealloc(PyCursesPanelObject *po) { (void)del_panel(po->pan); - Py_DECREF(po->wo); - remove_lop(po); + if (po->wo != NULL) { + Py_DECREF(po->wo); + remove_lop(po); + } PyObject_DEL(po); } From python-checkins at python.org Wed Mar 3 22:57:58 2010 From: python-checkins at python.org (victor.stinner) Date: Wed, 3 Mar 2010 22:57:58 +0100 (CET) Subject: [Python-checkins] r78637 - in python/branches/release31-maint: Modules/_curses_panel.c Message-ID: <20100303215758.C2D60EEA9D@mail.python.org> Author: victor.stinner Date: Wed Mar 3 22:57:58 2010 New Revision: 78637 Log: Merged revisions 78636 via svnmerge from svn+ssh://pythondev at svn.python.org/python/branches/py3k ................ r78636 | victor.stinner | 2010-03-03 22:56:53 +0100 (mer., 03 mars 2010) | 12 lines Merged revisions 78635 via svnmerge from svn+ssh://pythondev at svn.python.org/python/trunk ........ r78635 | victor.stinner | 2010-03-03 22:53:41 +0100 (mer., 03 mars 2010) | 5 lines Issue #3299: fix curses.panel.new_panel() error handler, replace PyObject_DEL() by Py_DECREF() to avoid a crash in pydebug mode. Use po->wo==NULL to detect than the panel is in the lop list or not. ........ ................ Modified: python/branches/release31-maint/ (props changed) python/branches/release31-maint/Modules/_curses_panel.c Modified: python/branches/release31-maint/Modules/_curses_panel.c ============================================================================== --- python/branches/release31-maint/Modules/_curses_panel.c (original) +++ python/branches/release31-maint/Modules/_curses_panel.c Wed Mar 3 22:57:58 2010 @@ -178,12 +178,13 @@ po = PyObject_NEW(PyCursesPanelObject, &PyCursesPanel_Type); if (po == NULL) return NULL; po->pan = pan; - po->wo = wo; - Py_INCREF(wo); if (insert_lop(po) < 0) { - PyObject_DEL(po); + po->wo = NULL; + Py_DECREF(po); return NULL; } + po->wo = wo; + Py_INCREF(wo); return (PyObject *)po; } @@ -191,8 +192,10 @@ PyCursesPanel_Dealloc(PyCursesPanelObject *po) { (void)del_panel(po->pan); - Py_DECREF(po->wo); - remove_lop(po); + if (po->wo != NULL) { + Py_DECREF(po->wo); + remove_lop(po); + } PyObject_DEL(po); } From python-checkins at python.org Thu Mar 4 00:20:25 2010 From: python-checkins at python.org (victor.stinner) Date: Thu, 4 Mar 2010 00:20:25 +0100 (CET) Subject: [Python-checkins] r78638 - in python/trunk: Include/pystate.h Misc/NEWS Modules/threadmodule.c Python/pystate.c Message-ID: <20100303232025.A6C88EEAD2@mail.python.org> Author: victor.stinner Date: Thu Mar 4 00:20:25 2010 New Revision: 78638 Log: Issue #7544: Preallocate thread memory before creating the thread to avoid a fatal error in low memory condition. Modified: python/trunk/Include/pystate.h python/trunk/Misc/NEWS python/trunk/Modules/threadmodule.c python/trunk/Python/pystate.c Modified: python/trunk/Include/pystate.h ============================================================================== --- python/trunk/Include/pystate.h (original) +++ python/trunk/Include/pystate.h Thu Mar 4 00:20:25 2010 @@ -105,6 +105,8 @@ PyAPI_FUNC(void) PyInterpreterState_Delete(PyInterpreterState *); PyAPI_FUNC(PyThreadState *) PyThreadState_New(PyInterpreterState *); +PyAPI_FUNC(PyThreadState *) _PyThreadState_Prealloc(PyInterpreterState *); +PyAPI_FUNC(void) _PyThreadState_Init(PyThreadState *); PyAPI_FUNC(void) PyThreadState_Clear(PyThreadState *); PyAPI_FUNC(void) PyThreadState_Delete(PyThreadState *); #ifdef WITH_THREAD Modified: python/trunk/Misc/NEWS ============================================================================== --- python/trunk/Misc/NEWS (original) +++ python/trunk/Misc/NEWS Thu Mar 4 00:20:25 2010 @@ -12,6 +12,9 @@ Core and Builtins ----------------- +- Issue #7544: Preallocate thread memory before creating the thread to avoid + a fatal error in low memory condition. + - Issue #7820: The parser tokenizer restores all bytes in the right if the BOM check fails. Modified: python/trunk/Modules/threadmodule.c ============================================================================== --- python/trunk/Modules/threadmodule.c (original) +++ python/trunk/Modules/threadmodule.c Thu Mar 4 00:20:25 2010 @@ -428,6 +428,7 @@ PyObject *func; PyObject *args; PyObject *keyw; + PyThreadState *tstate; }; static void @@ -437,8 +438,9 @@ PyThreadState *tstate; PyObject *res; - tstate = PyThreadState_New(boot->interp); - + tstate = boot->tstate; + tstate->thread_id = PyThread_get_thread_ident(); + _PyThreadState_Init(tstate); PyEval_AcquireThread(tstate); nb_threads++; res = PyEval_CallObjectWithKeywords( @@ -503,6 +505,11 @@ boot->func = func; boot->args = args; boot->keyw = keyw; + boot->tstate = _PyThreadState_Prealloc(boot->interp); + if (boot->tstate == NULL) { + PyMem_DEL(boot); + return PyErr_NoMemory(); + } Py_INCREF(func); Py_INCREF(args); Py_XINCREF(keyw); @@ -513,6 +520,7 @@ Py_DECREF(func); Py_DECREF(args); Py_XDECREF(keyw); + PyThreadState_Clear(boot->tstate); PyMem_DEL(boot); return NULL; } Modified: python/trunk/Python/pystate.c ============================================================================== --- python/trunk/Python/pystate.c (original) +++ python/trunk/Python/pystate.c Thu Mar 4 00:20:25 2010 @@ -154,8 +154,8 @@ return self->frame; } -PyThreadState * -PyThreadState_New(PyInterpreterState *interp) +static PyThreadState * +new_threadstate(PyInterpreterState *interp, int init) { PyThreadState *tstate = (PyThreadState *)malloc(sizeof(PyThreadState)); @@ -193,9 +193,8 @@ tstate->c_profileobj = NULL; tstate->c_traceobj = NULL; -#ifdef WITH_THREAD - _PyGILState_NoteThreadState(tstate); -#endif + if (init) + _PyThreadState_Init(tstate); HEAD_LOCK(); tstate->next = interp->tstate_head; @@ -206,6 +205,25 @@ return tstate; } +PyThreadState * +PyThreadState_New(PyInterpreterState *interp) +{ + return new_threadstate(interp, 1); +} + +PyThreadState * +_PyThreadState_Prealloc(PyInterpreterState *interp) +{ + return new_threadstate(interp, 0); +} + +void +_PyThreadState_Init(PyThreadState *tstate) +{ +#ifdef WITH_THREAD + _PyGILState_NoteThreadState(tstate); +#endif +} void PyThreadState_Clear(PyThreadState *tstate) From python-checkins at python.org Thu Mar 4 00:28:07 2010 From: python-checkins at python.org (victor.stinner) Date: Thu, 4 Mar 2010 00:28:07 +0100 (CET) Subject: [Python-checkins] r78639 - in python/branches/py3k: Include/pystate.h Misc/NEWS Modules/_threadmodule.c Python/pystate.c Message-ID: <20100303232807.9B7F5EEABE@mail.python.org> Author: victor.stinner Date: Thu Mar 4 00:28:07 2010 New Revision: 78639 Log: Merged revisions 78638 via svnmerge from svn+ssh://pythondev at svn.python.org/python/trunk ........ r78638 | victor.stinner | 2010-03-04 00:20:25 +0100 (jeu., 04 mars 2010) | 3 lines Issue #7544: Preallocate thread memory before creating the thread to avoid a fatal error in low memory condition. ........ Modified: python/branches/py3k/ (props changed) python/branches/py3k/Include/pystate.h python/branches/py3k/Misc/NEWS python/branches/py3k/Modules/_threadmodule.c python/branches/py3k/Python/pystate.c Modified: python/branches/py3k/Include/pystate.h ============================================================================== --- python/branches/py3k/Include/pystate.h (original) +++ python/branches/py3k/Include/pystate.h Thu Mar 4 00:28:07 2010 @@ -115,6 +115,8 @@ PyAPI_FUNC(PyObject*) PyState_FindModule(struct PyModuleDef*); PyAPI_FUNC(PyThreadState *) PyThreadState_New(PyInterpreterState *); +PyAPI_FUNC(PyThreadState *) _PyThreadState_Prealloc(PyInterpreterState *); +PyAPI_FUNC(void) _PyThreadState_Init(PyThreadState *); PyAPI_FUNC(void) PyThreadState_Clear(PyThreadState *); PyAPI_FUNC(void) PyThreadState_Delete(PyThreadState *); #ifdef WITH_THREAD Modified: python/branches/py3k/Misc/NEWS ============================================================================== --- python/branches/py3k/Misc/NEWS (original) +++ python/branches/py3k/Misc/NEWS Thu Mar 4 00:28:07 2010 @@ -12,6 +12,9 @@ Core and Builtins ----------------- +- Issue #7544: Preallocate thread memory before creating the thread to avoid + a fatal error in low memory condition. + - Issue #7820: The parser tokenizer restores all bytes in the right if the BOM check fails. Modified: python/branches/py3k/Modules/_threadmodule.c ============================================================================== --- python/branches/py3k/Modules/_threadmodule.c (original) +++ python/branches/py3k/Modules/_threadmodule.c Thu Mar 4 00:28:07 2010 @@ -695,6 +695,7 @@ PyObject *func; PyObject *args; PyObject *keyw; + PyThreadState *tstate; }; static void @@ -704,8 +705,9 @@ PyThreadState *tstate; PyObject *res; - tstate = PyThreadState_New(boot->interp); - + tstate = boot->tstate; + tstate->thread_id = PyThread_get_thread_ident(); + _PyThreadState_Init(tstate); PyEval_AcquireThread(tstate); nb_threads++; res = PyEval_CallObjectWithKeywords( @@ -770,6 +772,11 @@ boot->func = func; boot->args = args; boot->keyw = keyw; + boot->tstate = _PyThreadState_Prealloc(boot->interp); + if (boot->tstate == NULL) { + PyMem_DEL(boot); + return PyErr_NoMemory(); + } Py_INCREF(func); Py_INCREF(args); Py_XINCREF(keyw); @@ -780,6 +787,7 @@ Py_DECREF(func); Py_DECREF(args); Py_XDECREF(keyw); + PyThreadState_Clear(boot->tstate); PyMem_DEL(boot); return NULL; } Modified: python/branches/py3k/Python/pystate.c ============================================================================== --- python/branches/py3k/Python/pystate.c (original) +++ python/branches/py3k/Python/pystate.c Thu Mar 4 00:28:07 2010 @@ -157,8 +157,8 @@ return self->frame; } -PyThreadState * -PyThreadState_New(PyInterpreterState *interp) +static PyThreadState * +new_threadstate(PyInterpreterState *interp, int init) { PyThreadState *tstate = (PyThreadState *)malloc(sizeof(PyThreadState)); @@ -198,9 +198,8 @@ tstate->c_profileobj = NULL; tstate->c_traceobj = NULL; -#ifdef WITH_THREAD - _PyGILState_NoteThreadState(tstate); -#endif + if (init) + _PyThreadState_Init(tstate); HEAD_LOCK(); tstate->next = interp->tstate_head; @@ -211,6 +210,26 @@ return tstate; } +PyThreadState * +PyThreadState_New(PyInterpreterState *interp) +{ + return new_threadstate(interp, 1); +} + +PyThreadState * +_PyThreadState_Prealloc(PyInterpreterState *interp) +{ + return new_threadstate(interp, 0); +} + +void +_PyThreadState_Init(PyThreadState *tstate) +{ +#ifdef WITH_THREAD + _PyGILState_NoteThreadState(tstate); +#endif +} + PyObject* PyState_FindModule(struct PyModuleDef* m) { From python-checkins at python.org Thu Mar 4 00:32:07 2010 From: python-checkins at python.org (victor.stinner) Date: Thu, 4 Mar 2010 00:32:07 +0100 (CET) Subject: [Python-checkins] r78640 - in python/branches/release31-maint: Include/pystate.h Misc/NEWS Modules/_threadmodule.c Python/pystate.c Message-ID: <20100303233207.9F54DEEAC0@mail.python.org> Author: victor.stinner Date: Thu Mar 4 00:32:07 2010 New Revision: 78640 Log: Merged revisions 78639 via svnmerge from svn+ssh://pythondev at svn.python.org/python/branches/py3k ................ r78639 | victor.stinner | 2010-03-04 00:28:07 +0100 (jeu., 04 mars 2010) | 10 lines Merged revisions 78638 via svnmerge from svn+ssh://pythondev at svn.python.org/python/trunk ........ r78638 | victor.stinner | 2010-03-04 00:20:25 +0100 (jeu., 04 mars 2010) | 3 lines Issue #7544: Preallocate thread memory before creating the thread to avoid a fatal error in low memory condition. ........ ................ Modified: python/branches/release31-maint/ (props changed) python/branches/release31-maint/Include/pystate.h python/branches/release31-maint/Misc/NEWS python/branches/release31-maint/Modules/_threadmodule.c python/branches/release31-maint/Python/pystate.c Modified: python/branches/release31-maint/Include/pystate.h ============================================================================== --- python/branches/release31-maint/Include/pystate.h (original) +++ python/branches/release31-maint/Include/pystate.h Thu Mar 4 00:32:07 2010 @@ -113,6 +113,8 @@ PyAPI_FUNC(PyObject*) PyState_FindModule(struct PyModuleDef*); PyAPI_FUNC(PyThreadState *) PyThreadState_New(PyInterpreterState *); +PyAPI_FUNC(PyThreadState *) _PyThreadState_Prealloc(PyInterpreterState *); +PyAPI_FUNC(void) _PyThreadState_Init(PyThreadState *); PyAPI_FUNC(void) PyThreadState_Clear(PyThreadState *); PyAPI_FUNC(void) PyThreadState_Delete(PyThreadState *); #ifdef WITH_THREAD Modified: python/branches/release31-maint/Misc/NEWS ============================================================================== --- python/branches/release31-maint/Misc/NEWS (original) +++ python/branches/release31-maint/Misc/NEWS Thu Mar 4 00:32:07 2010 @@ -12,6 +12,9 @@ Core and Builtins ----------------- +- Issue #7544: Preallocate thread memory before creating the thread to avoid + a fatal error in low memory condition. + - Issue #7820: The parser tokenizer restores all bytes in the right if the BOM check fails. Modified: python/branches/release31-maint/Modules/_threadmodule.c ============================================================================== --- python/branches/release31-maint/Modules/_threadmodule.c (original) +++ python/branches/release31-maint/Modules/_threadmodule.c Thu Mar 4 00:32:07 2010 @@ -423,6 +423,7 @@ PyObject *func; PyObject *args; PyObject *keyw; + PyThreadState *tstate; }; static void @@ -432,8 +433,9 @@ PyThreadState *tstate; PyObject *res; - tstate = PyThreadState_New(boot->interp); - + tstate = boot->tstate; + tstate->thread_id = PyThread_get_thread_ident(); + _PyThreadState_Init(tstate); PyEval_AcquireThread(tstate); res = PyEval_CallObjectWithKeywords( boot->func, boot->args, boot->keyw); @@ -496,6 +498,11 @@ boot->func = func; boot->args = args; boot->keyw = keyw; + boot->tstate = _PyThreadState_Prealloc(boot->interp); + if (boot->tstate == NULL) { + PyMem_DEL(boot); + return PyErr_NoMemory(); + } Py_INCREF(func); Py_INCREF(args); Py_XINCREF(keyw); @@ -506,6 +513,7 @@ Py_DECREF(func); Py_DECREF(args); Py_XDECREF(keyw); + PyThreadState_Clear(boot->tstate); PyMem_DEL(boot); return NULL; } Modified: python/branches/release31-maint/Python/pystate.c ============================================================================== --- python/branches/release31-maint/Python/pystate.c (original) +++ python/branches/release31-maint/Python/pystate.c Thu Mar 4 00:32:07 2010 @@ -157,8 +157,8 @@ return self->frame; } -PyThreadState * -PyThreadState_New(PyInterpreterState *interp) +static PyThreadState * +new_threadstate(PyInterpreterState *interp, int init) { PyThreadState *tstate = (PyThreadState *)malloc(sizeof(PyThreadState)); @@ -198,9 +198,8 @@ tstate->c_profileobj = NULL; tstate->c_traceobj = NULL; -#ifdef WITH_THREAD - _PyGILState_NoteThreadState(tstate); -#endif + if (init) + _PyThreadState_Init(tstate); HEAD_LOCK(); tstate->next = interp->tstate_head; @@ -211,6 +210,26 @@ return tstate; } +PyThreadState * +PyThreadState_New(PyInterpreterState *interp) +{ + return new_threadstate(interp, 1); +} + +PyThreadState * +_PyThreadState_Prealloc(PyInterpreterState *interp) +{ + return new_threadstate(interp, 0); +} + +void +_PyThreadState_Init(PyThreadState *tstate) +{ +#ifdef WITH_THREAD + _PyGILState_NoteThreadState(tstate); +#endif +} + PyObject* PyState_FindModule(struct PyModuleDef* m) { From solipsis at pitrou.net Thu Mar 4 01:04:17 2010 From: solipsis at pitrou.net (solipsis at pitrou.net) Date: Thu, 4 Mar 2010 01:04:17 +0100 (CET) Subject: [Python-checkins] Daily py3k reference leaks (r78636): sum=0 Message-ID: <20100304000417.D7A411770D@ns6635.ovh.net> py3k results for svn r78636 (hg cset 777afab0679b) -------------------------------------------------- Command line was: ['./python', '-m', 'test.regrtest', '-uall', '-R', '3:3:/home/antoine/py3k/refleaks/reflogFE7tl2', '-x', 'test_httpservers'] From python-checkins at python.org Thu Mar 4 01:10:13 2010 From: python-checkins at python.org (victor.stinner) Date: Thu, 4 Mar 2010 01:10:13 +0100 (CET) Subject: [Python-checkins] r78641 - in python/trunk: Misc/NEWS Modules/_lsprof.c Message-ID: <20100304001013.0736EEEAC9@mail.python.org> Author: victor.stinner Date: Thu Mar 4 01:10:12 2010 New Revision: 78641 Log: Issue #7494: fix a crash in _lsprof (cProfile) after clearing the profiler, reset also the pointer to the current pointer context. Modified: python/trunk/Misc/NEWS python/trunk/Modules/_lsprof.c Modified: python/trunk/Misc/NEWS ============================================================================== --- python/trunk/Misc/NEWS (original) +++ python/trunk/Misc/NEWS Thu Mar 4 01:10:12 2010 @@ -41,6 +41,9 @@ Library ------- +- Issue #7494: fix a crash in _lsprof (cProfile) after clearing the profiler, + reset also the pointer to the current pointer context. + - Issue #7232: Add support for the context manager protocol to the TarFile class. Modified: python/trunk/Modules/_lsprof.c ============================================================================== --- python/trunk/Modules/_lsprof.c (original) +++ python/trunk/Modules/_lsprof.c Thu Mar 4 01:10:12 2010 @@ -303,12 +303,17 @@ { RotatingTree_Enum(pObj->profilerEntries, freeEntry, NULL); pObj->profilerEntries = EMPTY_ROTATING_TREE; - /* release the memory hold by the free list of ProfilerContexts */ + /* release the memory hold by the ProfilerContexts */ + if (pObj->currentProfilerContext) { + free(pObj->currentProfilerContext); + pObj->currentProfilerContext = NULL; + } while (pObj->freelistProfilerContext) { ProfilerContext *c = pObj->freelistProfilerContext; pObj->freelistProfilerContext = c->previous; free(c); } + pObj->freelistProfilerContext = NULL; } static void From python-checkins at python.org Thu Mar 4 01:29:24 2010 From: python-checkins at python.org (victor.stinner) Date: Thu, 4 Mar 2010 01:29:24 +0100 (CET) Subject: [Python-checkins] r78642 - in python/branches/py3k: Misc/NEWS Modules/_lsprof.c Message-ID: <20100304002924.E87A2EEAD8@mail.python.org> Author: victor.stinner Date: Thu Mar 4 01:29:24 2010 New Revision: 78642 Log: Merged revisions 78641 via svnmerge from svn+ssh://pythondev at svn.python.org/python/trunk ........ r78641 | victor.stinner | 2010-03-04 01:10:12 +0100 (jeu., 04 mars 2010) | 3 lines Issue #7494: fix a crash in _lsprof (cProfile) after clearing the profiler, reset also the pointer to the current pointer context. ........ Modified: python/branches/py3k/ (props changed) python/branches/py3k/Misc/NEWS python/branches/py3k/Modules/_lsprof.c Modified: python/branches/py3k/Misc/NEWS ============================================================================== --- python/branches/py3k/Misc/NEWS (original) +++ python/branches/py3k/Misc/NEWS Thu Mar 4 01:29:24 2010 @@ -268,6 +268,9 @@ Library ------- +- Issue #7494: fix a crash in _lsprof (cProfile) after clearing the profiler, + reset also the pointer to the current pointer context. + - Issue #7232: Add support for the context manager protocol to the TarFile class. Modified: python/branches/py3k/Modules/_lsprof.c ============================================================================== --- python/branches/py3k/Modules/_lsprof.c (original) +++ python/branches/py3k/Modules/_lsprof.c Thu Mar 4 01:29:24 2010 @@ -303,12 +303,17 @@ { RotatingTree_Enum(pObj->profilerEntries, freeEntry, NULL); pObj->profilerEntries = EMPTY_ROTATING_TREE; - /* release the memory hold by the free list of ProfilerContexts */ + /* release the memory hold by the ProfilerContexts */ + if (pObj->currentProfilerContext) { + free(pObj->currentProfilerContext); + pObj->currentProfilerContext = NULL; + } while (pObj->freelistProfilerContext) { ProfilerContext *c = pObj->freelistProfilerContext; pObj->freelistProfilerContext = c->previous; free(c); } + pObj->freelistProfilerContext = NULL; } static void From python-checkins at python.org Thu Mar 4 01:33:35 2010 From: python-checkins at python.org (victor.stinner) Date: Thu, 4 Mar 2010 01:33:35 +0100 (CET) Subject: [Python-checkins] r78643 - in python/branches/release31-maint: Misc/NEWS Modules/_lsprof.c Message-ID: <20100304003335.7D7D4EEAF1@mail.python.org> Author: victor.stinner Date: Thu Mar 4 01:33:35 2010 New Revision: 78643 Log: Merged revisions 78642 via svnmerge from svn+ssh://pythondev at svn.python.org/python/branches/py3k ................ r78642 | victor.stinner | 2010-03-04 01:29:24 +0100 (jeu., 04 mars 2010) | 10 lines Merged revisions 78641 via svnmerge from svn+ssh://pythondev at svn.python.org/python/trunk ........ r78641 | victor.stinner | 2010-03-04 01:10:12 +0100 (jeu., 04 mars 2010) | 3 lines Issue #7494: fix a crash in _lsprof (cProfile) after clearing the profiler, reset also the pointer to the current pointer context. ........ ................ Modified: python/branches/release31-maint/ (props changed) python/branches/release31-maint/Misc/NEWS python/branches/release31-maint/Modules/_lsprof.c Modified: python/branches/release31-maint/Misc/NEWS ============================================================================== --- python/branches/release31-maint/Misc/NEWS (original) +++ python/branches/release31-maint/Misc/NEWS Thu Mar 4 01:33:35 2010 @@ -100,6 +100,9 @@ Library ------- +- Issue #7494: fix a crash in _lsprof (cProfile) after clearing the profiler, + reset also the pointer to the current pointer context. + - Issue #7250: Fix info leak of os.environ across multi-run uses of wsgiref.handlers.CGIHandler. Modified: python/branches/release31-maint/Modules/_lsprof.c ============================================================================== --- python/branches/release31-maint/Modules/_lsprof.c (original) +++ python/branches/release31-maint/Modules/_lsprof.c Thu Mar 4 01:33:35 2010 @@ -303,12 +303,17 @@ { RotatingTree_Enum(pObj->profilerEntries, freeEntry, NULL); pObj->profilerEntries = EMPTY_ROTATING_TREE; - /* release the memory hold by the free list of ProfilerContexts */ + /* release the memory hold by the ProfilerContexts */ + if (pObj->currentProfilerContext) { + free(pObj->currentProfilerContext); + pObj->currentProfilerContext = NULL; + } while (pObj->freelistProfilerContext) { ProfilerContext *c = pObj->freelistProfilerContext; pObj->freelistProfilerContext = c->previous; free(c); } + pObj->freelistProfilerContext = NULL; } static void From python-checkins at python.org Thu Mar 4 03:07:55 2010 From: python-checkins at python.org (benjamin.peterson) Date: Thu, 4 Mar 2010 03:07:55 +0100 (CET) Subject: [Python-checkins] r78644 - in python/trunk/Lib: plat-atheos/regen plat-freebsd4/regen plat-freebsd5/regen plat-freebsd6/regen plat-freebsd7/regen plat-freebsd8/regen plat-os2emx/regen Message-ID: <20100304020755.4FC8AEEA76@mail.python.org> Author: benjamin.peterson Date: Thu Mar 4 03:07:55 2010 New Revision: 78644 Log: set svn:executable on all regen scripts Modified: python/trunk/Lib/plat-atheos/regen (props changed) python/trunk/Lib/plat-freebsd4/regen (props changed) python/trunk/Lib/plat-freebsd5/regen (props changed) python/trunk/Lib/plat-freebsd6/regen (props changed) python/trunk/Lib/plat-freebsd7/regen (props changed) python/trunk/Lib/plat-freebsd8/regen (props changed) python/trunk/Lib/plat-os2emx/regen (props changed) From python-checkins at python.org Thu Mar 4 03:11:41 2010 From: python-checkins at python.org (benjamin.peterson) Date: Thu, 4 Mar 2010 03:11:41 +0100 (CET) Subject: [Python-checkins] r78645 - in python/branches/py3k: Lib/plat-freebsd4/regen Lib/plat-freebsd5/regen Lib/plat-freebsd6/regen Lib/plat-freebsd7/regen Lib/plat-freebsd8/regen Lib/plat-os2emx/regen Message-ID: <20100304021141.26E04EEABA@mail.python.org> Author: benjamin.peterson Date: Thu Mar 4 03:11:41 2010 New Revision: 78645 Log: Merged revisions 78644 via svnmerge from svn+ssh://pythondev at svn.python.org/python/trunk ........ r78644 | benjamin.peterson | 2010-03-03 20:07:55 -0600 (Wed, 03 Mar 2010) | 1 line set svn:executable on all regen scripts ........ Modified: python/branches/py3k/ (props changed) python/branches/py3k/Lib/plat-freebsd4/regen (props changed) python/branches/py3k/Lib/plat-freebsd5/regen (props changed) python/branches/py3k/Lib/plat-freebsd6/regen (props changed) python/branches/py3k/Lib/plat-freebsd7/regen (props changed) python/branches/py3k/Lib/plat-freebsd8/regen (props changed) python/branches/py3k/Lib/plat-os2emx/regen (props changed) From python-checkins at python.org Thu Mar 4 13:09:34 2010 From: python-checkins at python.org (victor.stinner) Date: Thu, 4 Mar 2010 13:09:34 +0100 (CET) Subject: [Python-checkins] r78646 - in python/trunk: Lib/test/test_unicodedata.py Misc/NEWS Modules/unicodedata.c Message-ID: <20100304120934.0B873EE9BB@mail.python.org> Author: victor.stinner Date: Thu Mar 4 13:09:33 2010 New Revision: 78646 Log: Issue #1054943: Fix unicodedata.normalize('NFC', text) for the Public Review Issue #29. PR #29 was released in february 2004! Modified: python/trunk/Lib/test/test_unicodedata.py python/trunk/Misc/NEWS python/trunk/Modules/unicodedata.c Modified: python/trunk/Lib/test/test_unicodedata.py ============================================================================== --- python/trunk/Lib/test/test_unicodedata.py (original) +++ python/trunk/Lib/test/test_unicodedata.py Thu Mar 4 13:09:33 2010 @@ -186,6 +186,11 @@ # The rest can be found in test_normalization.py # which requires an external file. + def test_pr29(self): + # http://www.unicode.org/review/pr-29.html + for text in (u"\u0b47\u0300\u0b3e", u"\u1100\u0300\u1161"): + self.assertEqual(self.db.normalize('NFC', text), text) + def test_east_asian_width(self): eaw = self.db.east_asian_width self.assertRaises(TypeError, eaw, 'a') Modified: python/trunk/Misc/NEWS ============================================================================== --- python/trunk/Misc/NEWS (original) +++ python/trunk/Misc/NEWS Thu Mar 4 13:09:33 2010 @@ -41,6 +41,9 @@ Library ------- +- Issue #1054943: Fix unicodedata.normalize('NFC', text) for the Public Review + Issue #29 + - Issue #7494: fix a crash in _lsprof (cProfile) after clearing the profiler, reset also the pointer to the current pointer context. Modified: python/trunk/Modules/unicodedata.c ============================================================================== --- python/trunk/Modules/unicodedata.c (original) +++ python/trunk/Modules/unicodedata.c Thu Mar 4 13:09:33 2010 @@ -682,7 +682,7 @@ comb = 0; while (i1 < end) { int comb1 = _getrecord_ex(*i1)->combining; - if (comb1 && comb == comb1) { + if (comb && (comb1 == 0 || comb == comb1)) { /* Character is blocked. */ i1++; continue; From python-checkins at python.org Thu Mar 4 13:14:57 2010 From: python-checkins at python.org (victor.stinner) Date: Thu, 4 Mar 2010 13:14:57 +0100 (CET) Subject: [Python-checkins] r78647 - in python/branches/py3k: Lib/test/test_unicodedata.py Misc/NEWS Modules/unicodedata.c Message-ID: <20100304121457.C57CCDFFA@mail.python.org> Author: victor.stinner Date: Thu Mar 4 13:14:57 2010 New Revision: 78647 Log: Merged revisions 78646 via svnmerge from svn+ssh://pythondev at svn.python.org/python/trunk ........ r78646 | victor.stinner | 2010-03-04 13:09:33 +0100 (jeu., 04 mars 2010) | 5 lines Issue #1054943: Fix unicodedata.normalize('NFC', text) for the Public Review Issue #29. PR #29 was released in february 2004! ........ Modified: python/branches/py3k/ (props changed) python/branches/py3k/Lib/test/test_unicodedata.py python/branches/py3k/Misc/NEWS python/branches/py3k/Modules/unicodedata.c Modified: python/branches/py3k/Lib/test/test_unicodedata.py ============================================================================== --- python/branches/py3k/Lib/test/test_unicodedata.py (original) +++ python/branches/py3k/Lib/test/test_unicodedata.py Thu Mar 4 13:14:57 2010 @@ -187,6 +187,11 @@ # The rest can be found in test_normalization.py # which requires an external file. + def test_pr29(self): + # http://www.unicode.org/review/pr-29.html + for text in (u"\u0b47\u0300\u0b3e", u"\u1100\u0300\u1161"): + self.assertEqual(self.db.normalize('NFC', text), text) + def test_east_asian_width(self): eaw = self.db.east_asian_width self.assertRaises(TypeError, eaw, b'a') Modified: python/branches/py3k/Misc/NEWS ============================================================================== --- python/branches/py3k/Misc/NEWS (original) +++ python/branches/py3k/Misc/NEWS Thu Mar 4 13:14:57 2010 @@ -268,6 +268,9 @@ Library ------- +- Issue #1054943: Fix unicodedata.normalize('NFC', text) for the Public Review + Issue #29 + - Issue #7494: fix a crash in _lsprof (cProfile) after clearing the profiler, reset also the pointer to the current pointer context. Modified: python/branches/py3k/Modules/unicodedata.c ============================================================================== --- python/branches/py3k/Modules/unicodedata.c (original) +++ python/branches/py3k/Modules/unicodedata.c Thu Mar 4 13:14:57 2010 @@ -684,7 +684,7 @@ comb = 0; while (i1 < end) { int comb1 = _getrecord_ex(*i1)->combining; - if (comb1 && comb == comb1) { + if (comb && (comb1 == 0 || comb == comb1)) { /* Character is blocked. */ i1++; continue; From python-checkins at python.org Thu Mar 4 13:16:27 2010 From: python-checkins at python.org (victor.stinner) Date: Thu, 4 Mar 2010 13:16:27 +0100 (CET) Subject: [Python-checkins] r78648 - in python/branches/release31-maint: Lib/test/test_unicodedata.py Misc/NEWS Modules/unicodedata.c Message-ID: <20100304121627.7D405DC14@mail.python.org> Author: victor.stinner Date: Thu Mar 4 13:16:27 2010 New Revision: 78648 Log: Merged revisions 78647 via svnmerge from svn+ssh://pythondev at svn.python.org/python/branches/py3k ................ r78647 | victor.stinner | 2010-03-04 13:14:57 +0100 (jeu., 04 mars 2010) | 12 lines Merged revisions 78646 via svnmerge from svn+ssh://pythondev at svn.python.org/python/trunk ........ r78646 | victor.stinner | 2010-03-04 13:09:33 +0100 (jeu., 04 mars 2010) | 5 lines Issue #1054943: Fix unicodedata.normalize('NFC', text) for the Public Review Issue #29. PR #29 was released in february 2004! ........ ................ Modified: python/branches/release31-maint/ (props changed) python/branches/release31-maint/Lib/test/test_unicodedata.py python/branches/release31-maint/Misc/NEWS python/branches/release31-maint/Modules/unicodedata.c Modified: python/branches/release31-maint/Lib/test/test_unicodedata.py ============================================================================== --- python/branches/release31-maint/Lib/test/test_unicodedata.py (original) +++ python/branches/release31-maint/Lib/test/test_unicodedata.py Thu Mar 4 13:16:27 2010 @@ -186,6 +186,11 @@ # The rest can be found in test_normalization.py # which requires an external file. + def test_pr29(self): + # http://www.unicode.org/review/pr-29.html + for text in (u"\u0b47\u0300\u0b3e", u"\u1100\u0300\u1161"): + self.assertEqual(self.db.normalize('NFC', text), text) + def test_east_asian_width(self): eaw = self.db.east_asian_width self.assertRaises(TypeError, eaw, b'a') Modified: python/branches/release31-maint/Misc/NEWS ============================================================================== --- python/branches/release31-maint/Misc/NEWS (original) +++ python/branches/release31-maint/Misc/NEWS Thu Mar 4 13:16:27 2010 @@ -100,6 +100,9 @@ Library ------- +- Issue #1054943: Fix unicodedata.normalize('NFC', text) for the Public Review + Issue #29 + - Issue #7494: fix a crash in _lsprof (cProfile) after clearing the profiler, reset also the pointer to the current pointer context. Modified: python/branches/release31-maint/Modules/unicodedata.c ============================================================================== --- python/branches/release31-maint/Modules/unicodedata.c (original) +++ python/branches/release31-maint/Modules/unicodedata.c Thu Mar 4 13:16:27 2010 @@ -684,7 +684,7 @@ comb = 0; while (i1 < end) { int comb1 = _getrecord_ex(*i1)->combining; - if (comb1 && comb == comb1) { + if (comb && (comb1 == 0 || comb == comb1)) { /* Character is blocked. */ i1++; continue; From nnorwitz at gmail.com Thu Mar 4 13:32:28 2010 From: nnorwitz at gmail.com (Neal Norwitz) Date: Thu, 4 Mar 2010 07:32:28 -0500 Subject: [Python-checkins] Python Regression Test Failures refleak (1) Message-ID: <20100304123228.GA15055@kbk-i386-bb.psfb.org> More important issues: ---------------------- test_warnings leaked [0, 0, 120] references, sum=120 Less important issues: ---------------------- test_threadsignals leaked [8, -8, 0] references, sum=0 From python-checkins at python.org Thu Mar 4 13:47:32 2010 From: python-checkins at python.org (victor.stinner) Date: Thu, 4 Mar 2010 13:47:32 +0100 (CET) Subject: [Python-checkins] r78649 - python/branches/py3k/Lib/test/test_unicodedata.py Message-ID: <20100304124732.AC1F0EEAB1@mail.python.org> Author: victor.stinner Date: Thu Mar 4 13:47:32 2010 New Revision: 78649 Log: oops, fix the test of my previous commit about unicodedata and PR #29 (r78647) Modified: python/branches/py3k/Lib/test/test_unicodedata.py Modified: python/branches/py3k/Lib/test/test_unicodedata.py ============================================================================== --- python/branches/py3k/Lib/test/test_unicodedata.py (original) +++ python/branches/py3k/Lib/test/test_unicodedata.py Thu Mar 4 13:47:32 2010 @@ -189,7 +189,7 @@ def test_pr29(self): # http://www.unicode.org/review/pr-29.html - for text in (u"\u0b47\u0300\u0b3e", u"\u1100\u0300\u1161"): + for text in ("\u0b47\u0300\u0b3e", "\u1100\u0300\u1161"): self.assertEqual(self.db.normalize('NFC', text), text) def test_east_asian_width(self): From python-checkins at python.org Thu Mar 4 13:48:27 2010 From: python-checkins at python.org (victor.stinner) Date: Thu, 4 Mar 2010 13:48:27 +0100 (CET) Subject: [Python-checkins] r78650 - in python/branches/release31-maint: Lib/test/test_unicodedata.py Message-ID: <20100304124827.48B7AEE9E7@mail.python.org> Author: victor.stinner Date: Thu Mar 4 13:48:27 2010 New Revision: 78650 Log: Merged revisions 78649 via svnmerge from svn+ssh://pythondev at svn.python.org/python/branches/py3k ........ r78649 | victor.stinner | 2010-03-04 13:47:32 +0100 (jeu., 04 mars 2010) | 2 lines oops, fix the test of my previous commit about unicodedata and PR #29 (r78647) ........ Modified: python/branches/release31-maint/ (props changed) python/branches/release31-maint/Lib/test/test_unicodedata.py Modified: python/branches/release31-maint/Lib/test/test_unicodedata.py ============================================================================== --- python/branches/release31-maint/Lib/test/test_unicodedata.py (original) +++ python/branches/release31-maint/Lib/test/test_unicodedata.py Thu Mar 4 13:48:27 2010 @@ -188,7 +188,7 @@ def test_pr29(self): # http://www.unicode.org/review/pr-29.html - for text in (u"\u0b47\u0300\u0b3e", u"\u1100\u0300\u1161"): + for text in ("\u0b47\u0300\u0b3e", "\u1100\u0300\u1161"): self.assertEqual(self.db.normalize('NFC', text), text) def test_east_asian_width(self): From hg at python.org Thu Mar 4 14:03:24 2010 From: hg at python.org (tarek.ziade) Date: Thu, 04 Mar 2010 14:03:24 +0100 Subject: [Python-checkins] 1 new changeset in distutils2 Message-ID: tarek.ziade pushed 1 new changeset to distutils2: http://hg.python.org/distutils2/rev/ff0345ed6a2e changeset: 68:ff0345ed6a2e tag: tip user: Tarek Ziade date: Thu Mar 04 14:03:15 2010 +0100 summary: now we can provide a custom execution context -- Repository URL: http://hg.python.org/distutils2 From python-checkins at python.org Thu Mar 4 16:15:38 2010 From: python-checkins at python.org (senthil.kumaran) Date: Thu, 4 Mar 2010 16:15:38 +0100 (CET) Subject: [Python-checkins] r78651 - in python/branches/release26-maint/Lib: test/test_urllib2.py urllib2.py Message-ID: <20100304151538.3AD26EE988@mail.python.org> Author: senthil.kumaran Date: Thu Mar 4 16:15:37 2010 New Revision: 78651 Log: Reverting the changes made in r78432. Discussed in the tracker issue7540. Modified: python/branches/release26-maint/Lib/test/test_urllib2.py python/branches/release26-maint/Lib/urllib2.py Modified: python/branches/release26-maint/Lib/test/test_urllib2.py ============================================================================== --- python/branches/release26-maint/Lib/test/test_urllib2.py (original) +++ python/branches/release26-maint/Lib/test/test_urllib2.py Thu Mar 4 16:15:37 2010 @@ -1209,7 +1209,6 @@ self.get.add_data("spam") self.assert_(self.get.has_data()) self.assertEqual("POST", self.get.get_method()) - self.assertRaises(TypeError,self.get.add_data, "more spam") def test_get_full_url(self): self.assertEqual("http://www.python.org/~jeremy/", Modified: python/branches/release26-maint/Lib/urllib2.py ============================================================================== --- python/branches/release26-maint/Lib/urllib2.py (original) +++ python/branches/release26-maint/Lib/urllib2.py Thu Mar 4 16:15:37 2010 @@ -226,9 +226,6 @@ # XXX these helper methods are lame def add_data(self, data): - if self.has_data(): - raise TypeError("Request Obj already contains data: %s" % - self.data) self.data = data def has_data(self): From python-checkins at python.org Thu Mar 4 16:57:21 2010 From: python-checkins at python.org (florent.xicluna) Date: Thu, 4 Mar 2010 16:57:21 +0100 (CET) Subject: [Python-checkins] r78652 - python/trunk/Lib/test/test_popen2.py Message-ID: <20100304155721.13C62EEA8F@mail.python.org> Author: florent.xicluna Date: Thu Mar 4 16:57:20 2010 New Revision: 78652 Log: Fix transient refleak in test_popen2. Modified: python/trunk/Lib/test/test_popen2.py Modified: python/trunk/Lib/test/test_popen2.py ============================================================================== --- python/trunk/Lib/test/test_popen2.py (original) +++ python/trunk/Lib/test/test_popen2.py Thu Mar 4 16:57:20 2010 @@ -50,7 +50,13 @@ for inst in popen2._active: inst.wait() popen2._cleanup() - self.assertFalse(popen2._active, "_active not empty") + self.assertFalse(popen2._active, "popen2._active not empty") + # The os.popen*() API delegates to the subprocess module (on Unix) + import subprocess + for inst in subprocess._active: + inst.wait() + subprocess._cleanup() + self.assertFalse(subprocess._active, "subprocess._active not empty") reap_children() def validate_output(self, teststr, expected_out, r, w, e=None): From python-checkins at python.org Thu Mar 4 16:58:54 2010 From: python-checkins at python.org (florent.xicluna) Date: Thu, 4 Mar 2010 16:58:54 +0100 (CET) Subject: [Python-checkins] r78653 - in python/trunk/Lib: multiprocessing/process.py test/test_multiprocessing.py Message-ID: <20100304155854.56ADDEEAE1@mail.python.org> Author: florent.xicluna Date: Thu Mar 4 16:58:54 2010 New Revision: 78653 Log: #7805: wait until all workers are started before collecting their PIDs Modified: python/trunk/Lib/multiprocessing/process.py python/trunk/Lib/test/test_multiprocessing.py Modified: python/trunk/Lib/multiprocessing/process.py ============================================================================== --- python/trunk/Lib/multiprocessing/process.py (original) +++ python/trunk/Lib/multiprocessing/process.py Thu Mar 4 16:58:54 2010 @@ -179,7 +179,7 @@ @property def ident(self): ''' - Return indentifier (PID) of process or `None` if it has yet to start + Return identifier (PID) of process or `None` if it has yet to start ''' if self is _current_process: return os.getpid() Modified: python/trunk/Lib/test/test_multiprocessing.py ============================================================================== --- python/trunk/Lib/test/test_multiprocessing.py (original) +++ python/trunk/Lib/test/test_multiprocessing.py Thu Mar 4 16:58:54 2010 @@ -1070,8 +1070,16 @@ self.assertEqual(res.get(), sqr(j)) # Refill the pool p._repopulate_pool() - # Finally, check that the worker pids have changed + # Wait until all workers are alive + countdown = 5 + while countdown and not all(w.is_alive() for w in p._pool): + countdown -= 1 + time.sleep(DELTA) finalworkerpids = [w.pid for w in p._pool] + # All pids should be assigned. See issue #7805. + self.assertNotIn(None, origworkerpids) + self.assertNotIn(None, finalworkerpids) + # Finally, check that the worker pids have changed self.assertNotEqual(sorted(origworkerpids), sorted(finalworkerpids)) p.close() p.join() From python-checkins at python.org Thu Mar 4 17:10:11 2010 From: python-checkins at python.org (florent.xicluna) Date: Thu, 4 Mar 2010 17:10:11 +0100 (CET) Subject: [Python-checkins] r78654 - in python/branches/py3k: Lib/test/test_multiprocessing.py Message-ID: <20100304161011.0CA62EEA24@mail.python.org> Author: florent.xicluna Date: Thu Mar 4 17:10:10 2010 New Revision: 78654 Log: Merged revisions 78653 via svnmerge from svn+ssh://pythondev at svn.python.org/python/trunk ........ r78653 | florent.xicluna | 2010-03-04 16:58:54 +0100 (jeu, 04 mar 2010) | 2 lines #7805: wait until all workers are started before collecting their PIDs ........ Modified: python/branches/py3k/ (props changed) python/branches/py3k/Lib/test/test_multiprocessing.py Modified: python/branches/py3k/Lib/test/test_multiprocessing.py ============================================================================== --- python/branches/py3k/Lib/test/test_multiprocessing.py (original) +++ python/branches/py3k/Lib/test/test_multiprocessing.py Thu Mar 4 17:10:10 2010 @@ -1071,8 +1071,16 @@ self.assertEqual(res.get(), sqr(j)) # Refill the pool p._repopulate_pool() - # Finally, check that the worker pids have changed + # Wait until all workers are alive + countdown = 5 + while countdown and not all(w.is_alive() for w in p._pool): + countdown -= 1 + time.sleep(DELTA) finalworkerpids = [w.pid for w in p._pool] + # All pids should be assigned. See issue #7805. + self.assertNotIn(None, origworkerpids) + self.assertNotIn(None, finalworkerpids) + # Finally, check that the worker pids have changed self.assertNotEqual(sorted(origworkerpids), sorted(finalworkerpids)) p.close() p.join() From python-checkins at python.org Thu Mar 4 17:10:55 2010 From: python-checkins at python.org (florent.xicluna) Date: Thu, 4 Mar 2010 17:10:55 +0100 (CET) Subject: [Python-checkins] r78655 - python/branches/py3k/Lib/multiprocessing/process.py Message-ID: <20100304161055.26AC5EEACA@mail.python.org> Author: florent.xicluna Date: Thu Mar 4 17:10:55 2010 New Revision: 78655 Log: Missing part from r78654 Modified: python/branches/py3k/Lib/multiprocessing/process.py Modified: python/branches/py3k/Lib/multiprocessing/process.py ============================================================================== --- python/branches/py3k/Lib/multiprocessing/process.py (original) +++ python/branches/py3k/Lib/multiprocessing/process.py Thu Mar 4 17:10:55 2010 @@ -179,7 +179,7 @@ @property def ident(self): ''' - Return indentifier (PID) of process or `None` if it has yet to start + Return identifier (PID) of process or `None` if it has yet to start ''' if self is _current_process: return os.getpid() From python-checkins at python.org Thu Mar 4 18:34:05 2010 From: python-checkins at python.org (r.david.murray) Date: Thu, 4 Mar 2010 18:34:05 +0100 (CET) Subject: [Python-checkins] r78656 - python/trunk/Doc/library/email.message.rst Message-ID: <20100304173405.4495EEEABE@mail.python.org> Author: r.david.murray Date: Thu Mar 4 18:34:05 2010 New Revision: 78656 Log: Fix documentation of email.Message.get_filename to match the fix applied in Issue 7082. Modified: python/trunk/Doc/library/email.message.rst Modified: python/trunk/Doc/library/email.message.rst ============================================================================== --- python/trunk/Doc/library/email.message.rst (original) +++ python/trunk/Doc/library/email.message.rst Thu Mar 4 18:34:05 2010 @@ -447,9 +447,10 @@ Return the value of the ``filename`` parameter of the :mailheader:`Content-Disposition` header of the message. If the header does not have a ``filename`` parameter, this method falls back to looking - for the ``name`` parameter. If neither is found, or the header is - missing, then *failobj* is returned. The returned string will always be - unquoted as per :func:`email.utils.unquote`. + for the ``name`` parameter on the :mailheader:`Content-Type` header. If + neither is found, or the header is missing, then *failobj* is returned. + The returned string will always be unquoted as per + :func:`email.utils.unquote`. .. method:: get_boundary([failobj]) From python-checkins at python.org Thu Mar 4 18:38:18 2010 From: python-checkins at python.org (r.david.murray) Date: Thu, 4 Mar 2010 18:38:18 +0100 (CET) Subject: [Python-checkins] r78657 - in python/branches/py3k: Doc/library/email.message.rst Message-ID: <20100304173818.EEC7AEEA96@mail.python.org> Author: r.david.murray Date: Thu Mar 4 18:38:18 2010 New Revision: 78657 Log: Merged revisions 78656 via svnmerge from svn+ssh://pythondev at svn.python.org/python/trunk ........ r78656 | r.david.murray | 2010-03-04 12:34:05 -0500 (Thu, 04 Mar 2010) | 3 lines Fix documentation of email.Message.get_filename to match the fix applied in Issue 7082. ........ Modified: python/branches/py3k/ (props changed) python/branches/py3k/Doc/library/email.message.rst Modified: python/branches/py3k/Doc/library/email.message.rst ============================================================================== --- python/branches/py3k/Doc/library/email.message.rst (original) +++ python/branches/py3k/Doc/library/email.message.rst Thu Mar 4 18:38:18 2010 @@ -415,9 +415,10 @@ Return the value of the ``filename`` parameter of the :mailheader:`Content-Disposition` header of the message. If the header does not have a ``filename`` parameter, this method falls back to looking - for the ``name`` parameter. If neither is found, or the header is - missing, then *failobj* is returned. The returned string will always be - unquoted as per :func:`email.utils.unquote`. + for the ``name`` parameter on the :mailheader:`Content-Type` header. If + neither is found, or the header is missing, then *failobj* is returned. + The returned string will always be unquoted as per + :func:`email.utils.unquote`. .. method:: get_boundary(failobj=None) From python-checkins at python.org Thu Mar 4 18:43:40 2010 From: python-checkins at python.org (r.david.murray) Date: Thu, 4 Mar 2010 18:43:40 +0100 (CET) Subject: [Python-checkins] r78658 - in python/branches/release31-maint: Doc/library/email.message.rst Message-ID: <20100304174340.6062EC645@mail.python.org> Author: r.david.murray Date: Thu Mar 4 18:43:40 2010 New Revision: 78658 Log: Merged revisions 78657 via svnmerge from svn+ssh://pythondev at svn.python.org/python/branches/py3k ................ r78657 | r.david.murray | 2010-03-04 12:38:18 -0500 (Thu, 04 Mar 2010) | 10 lines Merged revisions 78656 via svnmerge from svn+ssh://pythondev at svn.python.org/python/trunk ........ r78656 | r.david.murray | 2010-03-04 12:34:05 -0500 (Thu, 04 Mar 2010) | 3 lines Fix documentation of email.Message.get_filename to match the fix applied in Issue 7082. ........ ................ Modified: python/branches/release31-maint/ (props changed) python/branches/release31-maint/Doc/library/email.message.rst Modified: python/branches/release31-maint/Doc/library/email.message.rst ============================================================================== --- python/branches/release31-maint/Doc/library/email.message.rst (original) +++ python/branches/release31-maint/Doc/library/email.message.rst Thu Mar 4 18:43:40 2010 @@ -415,9 +415,10 @@ Return the value of the ``filename`` parameter of the :mailheader:`Content-Disposition` header of the message. If the header does not have a ``filename`` parameter, this method falls back to looking - for the ``name`` parameter. If neither is found, or the header is - missing, then *failobj* is returned. The returned string will always be - unquoted as per :func:`email.utils.unquote`. + for the ``name`` parameter on the :mailheader:`Content-Type` header. If + neither is found, or the header is missing, then *failobj* is returned. + The returned string will always be unquoted as per + :func:`email.utils.unquote`. .. method:: get_boundary(failobj=None) From python-checkins at python.org Thu Mar 4 19:26:54 2010 From: python-checkins at python.org (gregory.p.smith) Date: Thu, 4 Mar 2010 19:26:54 +0100 (CET) Subject: [Python-checkins] r78659 - python/branches/release26-maint/Lib/test/test_thread.py Message-ID: <20100304182654.24B96EEA4D@mail.python.org> Author: gregory.p.smith Date: Thu Mar 4 19:26:53 2010 New Revision: 78659 Log: issue8053 - logic was inverted on which platforms to run a test on. caused test_thread to fail on windows. Modified: python/branches/release26-maint/Lib/test/test_thread.py Modified: python/branches/release26-maint/Lib/test/test_thread.py ============================================================================== --- python/branches/release26-maint/Lib/test/test_thread.py (original) +++ python/branches/release26-maint/Lib/test/test_thread.py Thu Mar 4 19:26:53 2010 @@ -192,7 +192,7 @@ self.assertEqual(os.read(self.read_fd, 2), "OK", "Unable to fork() in thread") - if sys.platform.startswith('win'): + if not sys.platform.startswith('win'): test_forkinthread = _test_forkinthread def tearDown(self): From python-checkins at python.org Thu Mar 4 20:21:54 2010 From: python-checkins at python.org (dirkjan.ochtman) Date: Thu, 4 Mar 2010 20:21:54 +0100 (CET) Subject: [Python-checkins] r78660 - python/trunk/Lib/test/test_csv.py Message-ID: <20100304192154.0AF11EE998@mail.python.org> Author: dirkjan.ochtman Date: Thu Mar 4 20:21:53 2010 New Revision: 78660 Log: Try to fix buildbot breakage from r78384. Thanks bitdancer and briancurtin for the help. Modified: python/trunk/Lib/test/test_csv.py Modified: python/trunk/Lib/test/test_csv.py ============================================================================== --- python/trunk/Lib/test/test_csv.py (original) +++ python/trunk/Lib/test/test_csv.py Thu Mar 4 20:21:53 2010 @@ -9,6 +9,7 @@ import tempfile import csv import gc +import io from test import test_support class Test_Csv(unittest.TestCase): @@ -595,7 +596,7 @@ ### "short" means there are fewer elements in the row than fieldnames def test_write_simple_dict(self): fd, name = tempfile.mkstemp() - fileobj = os.fdopen(fd, "w+b") + fileobj = io.open(fd, 'w+b') try: writer = csv.DictWriter(fileobj, fieldnames = ["f1", "f2", "f3"]) writer.writeheader() From python-checkins at python.org Thu Mar 4 20:40:48 2010 From: python-checkins at python.org (florent.xicluna) Date: Thu, 4 Mar 2010 20:40:48 +0100 (CET) Subject: [Python-checkins] r78661 - python/trunk/Lib/test/test_subprocess.py Message-ID: <20100304194048.B20C0FE34@mail.python.org> Author: florent.xicluna Date: Thu Mar 4 20:40:48 2010 New Revision: 78661 Log: Cleanup. Modified: python/trunk/Lib/test/test_subprocess.py Modified: python/trunk/Lib/test/test_subprocess.py ============================================================================== --- python/trunk/Lib/test/test_subprocess.py (original) +++ python/trunk/Lib/test/test_subprocess.py Thu Mar 4 20:40:48 2010 @@ -99,9 +99,9 @@ newenv = os.environ.copy() newenv["FRUIT"] = "banana" rc = subprocess.call([sys.executable, "-c", - 'import sys, os;' \ - 'sys.exit(os.getenv("FRUIT")=="banana")'], - env=newenv) + 'import sys, os;' + 'sys.exit(os.getenv("FRUIT")=="banana")'], + env=newenv) self.assertEqual(rc, 1) def test_stdin_none(self): @@ -552,7 +552,7 @@ pass - at unittest.skipIf(sys.platform == "win32", "POSIX specific tests") + at unittest.skipIf(mswindows, "POSIX specific tests") class POSIXProcessTestCase(unittest.TestCase): def setUp(self): # Try to minimize the number of children we have so this test @@ -663,7 +663,7 @@ self.assertEqual(p.wait(), -signal.SIGTERM) - at unittest.skipUnless(sys.platform == "win32", "Windows specific tests") + at unittest.skipUnless(mswindows, "Windows specific tests") class Win32ProcessTestCase(unittest.TestCase): def setUp(self): # Try to minimize the number of children we have so this test From brett at python.org Thu Mar 4 21:17:21 2010 From: brett at python.org (Brett Cannon) Date: Thu, 4 Mar 2010 12:17:21 -0800 Subject: [Python-checkins] 1 new changeset in distutils2 In-Reply-To: References: Message-ID: Is there any way to get the new Hg emails to list the affected files in a changeset in the subject? On Thu, Mar 4, 2010 at 05:03, tarek.ziade wrote: > tarek.ziade pushed 1 new changeset to distutils2: > > http://hg.python.org/distutils2/rev/ff0345ed6a2e > changeset: 68:ff0345ed6a2e > tag: tip > user: Tarek Ziade > date: Thu Mar 04 14:03:15 2010 +0100 > summary: now we can provide a custom execution context > > > -- > Repository URL: http://hg.python.org/distutils2 > _______________________________________________ > Python-checkins mailing list > Python-checkins at python.org > http://mail.python.org/mailman/listinfo/python-checkins > > -------------- next part -------------- An HTML attachment was scrubbed... URL: From python-checkins at python.org Thu Mar 4 22:31:58 2010 From: python-checkins at python.org (florent.xicluna) Date: Thu, 4 Mar 2010 22:31:58 +0100 (CET) Subject: [Python-checkins] r78662 - python/trunk/Lib/test/test_subprocess.py Message-ID: <20100304213158.4D0D4EEAB1@mail.python.org> Author: florent.xicluna Date: Thu Mar 4 22:31:58 2010 New Revision: 78662 Log: #2777: Enable test_send_signal, test_kill and test_terminate on all platforms. Modified: python/trunk/Lib/test/test_subprocess.py Modified: python/trunk/Lib/test/test_subprocess.py ============================================================================== --- python/trunk/Lib/test/test_subprocess.py (original) +++ python/trunk/Lib/test/test_subprocess.py Thu Mar 4 22:31:58 2010 @@ -39,6 +39,12 @@ # doesn't crash on some buildbots (Alphas in particular). test_support.reap_children() + def tearDown(self): + for inst in subprocess._active: + inst.wait() + subprocess._cleanup() + self.assertFalse(subprocess._active, "subprocess._active not empty") + def assertStderrEqual(self, stderr, expected, msg=None): # In a debug build, stuff like "[6580 refs]" is printed to stderr at # shutdown time. That frustrates tests trying to check stderr produced @@ -559,6 +565,12 @@ # doesn't crash on some buildbots (Alphas in particular). test_support.reap_children() + def tearDown(self): + for inst in subprocess._active: + inst.wait() + subprocess._cleanup() + self.assertFalse(subprocess._active, "subprocess._active not empty") + def test_exceptions(self): # caught & re-raised exceptions with self.assertRaises(OSError) as c: @@ -638,15 +650,15 @@ os.remove(fname) self.assertEqual(rc, 47) - @unittest.skip("See issue #2777") def test_send_signal(self): p = subprocess.Popen([sys.executable, "-c", "input()"]) + # Let the process initialize correctly (Issue #3137) + time.sleep(.1) self.assertIs(p.poll(), None) p.send_signal(signal.SIGINT) self.assertNotEqual(p.wait(), 0) - @unittest.skip("See issue #2777") def test_kill(self): p = subprocess.Popen([sys.executable, "-c", "input()"]) @@ -654,7 +666,6 @@ p.kill() self.assertEqual(p.wait(), -signal.SIGKILL) - @unittest.skip("See issue #2777") def test_terminate(self): p = subprocess.Popen([sys.executable, "-c", "input()"]) @@ -670,6 +681,12 @@ # doesn't crash on some buildbots (Alphas in particular). test_support.reap_children() + def tearDown(self): + for inst in subprocess._active: + inst.wait() + subprocess._cleanup() + self.assertFalse(subprocess._active, "subprocess._active not empty") + def test_startupinfo(self): # startupinfo argument # We uses hardcoded constants, because we do not want to @@ -736,7 +753,6 @@ ' -c "import sys; sys.exit(47)"') self.assertEqual(rc, 47) - @unittest.skip("See issue #2777") def test_send_signal(self): p = subprocess.Popen([sys.executable, "-c", "input()"]) @@ -744,7 +760,6 @@ p.send_signal(signal.SIGTERM) self.assertNotEqual(p.wait(), 0) - @unittest.skip("See issue #2777") def test_kill(self): p = subprocess.Popen([sys.executable, "-c", "input()"]) @@ -752,7 +767,6 @@ p.kill() self.assertNotEqual(p.wait(), 0) - @unittest.skip("See issue #2777") def test_terminate(self): p = subprocess.Popen([sys.executable, "-c", "input()"]) From python-checkins at python.org Thu Mar 4 22:50:56 2010 From: python-checkins at python.org (florent.xicluna) Date: Thu, 4 Mar 2010 22:50:56 +0100 (CET) Subject: [Python-checkins] r78663 - in python/branches/py3k: Lib/test/test_subprocess.py Message-ID: <20100304215056.57A3DEEA3F@mail.python.org> Author: florent.xicluna Date: Thu Mar 4 22:50:56 2010 New Revision: 78663 Log: Merged revisions 78661-78662 via svnmerge from svn+ssh://pythondev at svn.python.org/python/trunk ........ r78661 | florent.xicluna | 2010-03-04 20:40:48 +0100 (jeu, 04 mar 2010) | 2 lines Cleanup. ........ r78662 | florent.xicluna | 2010-03-04 22:31:58 +0100 (jeu, 04 mar 2010) | 2 lines #2777: Enable test_send_signal, test_kill and test_terminate on all platforms. ........ And fix an oversight of changeset 78510. Modified: python/branches/py3k/ (props changed) python/branches/py3k/Lib/test/test_subprocess.py Modified: python/branches/py3k/Lib/test/test_subprocess.py ============================================================================== --- python/branches/py3k/Lib/test/test_subprocess.py (original) +++ python/branches/py3k/Lib/test/test_subprocess.py Thu Mar 4 22:50:56 2010 @@ -39,6 +39,12 @@ # doesn't crash on some buildbots (Alphas in particular). support.reap_children() + def tearDown(self): + for inst in subprocess._active: + inst.wait() + subprocess._cleanup() + self.assertFalse(subprocess._active, "subprocess._active not empty") + def assertStderrEqual(self, stderr, expected, msg=None): # In a debug build, stuff like "[6580 refs]" is printed to stderr at # shutdown time. That frustrates tests trying to check stderr produced @@ -548,13 +554,19 @@ pass - at unittest.skipIf(sys.platform == "win32", "POSIX specific tests") + at unittest.skipIf(mswindows, "POSIX specific tests") class POSIXProcessTestCase(unittest.TestCase): def setUp(self): # Try to minimize the number of children we have so this test # doesn't crash on some buildbots (Alphas in particular). support.reap_children() + def tearDown(self): + for inst in subprocess._active: + inst.wait() + subprocess._cleanup() + self.assertFalse(subprocess._active, "subprocess._active not empty") + def test_exceptions(self): # caught & re-raised exceptions with self.assertRaises(OSError) as c: @@ -636,15 +648,15 @@ os.remove(fname) self.assertEqual(rc, 47) - @unittest.skip("See issue #2777") def test_send_signal(self): p = subprocess.Popen([sys.executable, "-c", "input()"]) + # Let the process initialize correctly (Issue #3137) + time.sleep(.1) self.assertIs(p.poll(), None) p.send_signal(signal.SIGINT) - self.assertIsNot(p.wait(), None) + self.assertNotEqual(p.wait(), 0) - @unittest.skip("See issue #2777") def test_kill(self): p = subprocess.Popen([sys.executable, "-c", "input()"]) @@ -652,7 +664,6 @@ p.kill() self.assertEqual(p.wait(), -signal.SIGKILL) - @unittest.skip("See issue #2777") def test_terminate(self): p = subprocess.Popen([sys.executable, "-c", "input()"]) @@ -661,13 +672,19 @@ self.assertEqual(p.wait(), -signal.SIGTERM) - at unittest.skipUnless(sys.platform == "win32", "Windows specific tests") + at unittest.skipUnless(mswindows, "Windows specific tests") class Win32ProcessTestCase(unittest.TestCase): def setUp(self): # Try to minimize the number of children we have so this test # doesn't crash on some buildbots (Alphas in particular). support.reap_children() + def tearDown(self): + for inst in subprocess._active: + inst.wait() + subprocess._cleanup() + self.assertFalse(subprocess._active, "subprocess._active not empty") + def test_startupinfo(self): # startupinfo argument # We uses hardcoded constants, because we do not want to @@ -734,7 +751,6 @@ ' -c "import sys; sys.exit(47)"') self.assertEqual(rc, 47) - @unittest.skip("See issue #2777") def test_send_signal(self): p = subprocess.Popen([sys.executable, "-c", "input()"]) @@ -742,7 +758,6 @@ p.send_signal(signal.SIGTERM) self.assertNotEqual(p.wait(), 0) - @unittest.skip("See issue #2777") def test_kill(self): p = subprocess.Popen([sys.executable, "-c", "input()"]) @@ -750,7 +765,6 @@ p.kill() self.assertNotEqual(p.wait(), 0) - @unittest.skip("See issue #2777") def test_terminate(self): p = subprocess.Popen([sys.executable, "-c", "input()"]) @@ -764,7 +778,7 @@ # # Actually, getoutput should work on any platform with an os.popen, but # I'll take the comment as given, and skip this suite. - at unittest.skipUnless(os.name != 'posix', "only relevant for UNIX") + at unittest.skipUnless(os.name == 'posix', "only relevant for UNIX") class CommandTests(unittest.TestCase): def test_getoutput(self): self.assertEqual(subprocess.getoutput('echo xyzzy'), 'xyzzy') From python-checkins at python.org Thu Mar 4 22:59:53 2010 From: python-checkins at python.org (victor.stinner) Date: Thu, 4 Mar 2010 22:59:53 +0100 (CET) Subject: [Python-checkins] r78664 - in python/branches/py3k: Lib/test/test_re.py Modules/_sre.c Message-ID: <20100304215953.5BEF3EEAC8@mail.python.org> Author: victor.stinner Date: Thu Mar 4 22:59:53 2010 New Revision: 78664 Log: Issue #3299: replace PyObject_DEL() by Py_DECREF() in _sre module to fix a crash in pydebug mode. Modified: python/branches/py3k/Lib/test/test_re.py python/branches/py3k/Modules/_sre.c Modified: python/branches/py3k/Lib/test/test_re.py ============================================================================== --- python/branches/py3k/Lib/test/test_re.py (original) +++ python/branches/py3k/Lib/test/test_re.py Thu Mar 4 22:59:53 2010 @@ -727,6 +727,7 @@ long_overflow = 2**128 self.assertRaises(TypeError, re.finditer, "a", {}) self.assertRaises(OverflowError, _sre.compile, "abc", 0, [long_overflow]) + self.assertRaises(TypeError, _sre.compile, {}, 0, []) def run_re_tests(): from test.re_tests import benchmarks, tests, SUCCEED, FAIL, SYNTAX_ERROR Modified: python/branches/py3k/Modules/_sre.c ============================================================================== --- python/branches/py3k/Modules/_sre.c (original) +++ python/branches/py3k/Modules/_sre.c Thu Mar 4 22:59:53 2010 @@ -2702,7 +2702,7 @@ else { Py_ssize_t p_length; if (!getstring(pattern, &p_length, &self->charsize)) { - PyObject_DEL(self); + Py_DECREF(self); return NULL; } } From python-checkins at python.org Thu Mar 4 23:01:47 2010 From: python-checkins at python.org (victor.stinner) Date: Thu, 4 Mar 2010 23:01:47 +0100 (CET) Subject: [Python-checkins] r78665 - in python/branches/release31-maint: Lib/test/test_re.py Modules/_sre.c Message-ID: <20100304220147.77962EEAA7@mail.python.org> Author: victor.stinner Date: Thu Mar 4 23:01:47 2010 New Revision: 78665 Log: Merged revisions 78664 via svnmerge from svn+ssh://pythondev at svn.python.org/python/branches/py3k ........ r78664 | victor.stinner | 2010-03-04 22:59:53 +0100 (jeu., 04 mars 2010) | 3 lines Issue #3299: replace PyObject_DEL() by Py_DECREF() in _sre module to fix a crash in pydebug mode. ........ Modified: python/branches/release31-maint/ (props changed) python/branches/release31-maint/Lib/test/test_re.py python/branches/release31-maint/Modules/_sre.c Modified: python/branches/release31-maint/Lib/test/test_re.py ============================================================================== --- python/branches/release31-maint/Lib/test/test_re.py (original) +++ python/branches/release31-maint/Lib/test/test_re.py Thu Mar 4 23:01:47 2010 @@ -706,6 +706,7 @@ long_overflow = 2**128 self.assertRaises(TypeError, re.finditer, "a", {}) self.assertRaises(OverflowError, _sre.compile, "abc", 0, [long_overflow]) + self.assertRaises(TypeError, _sre.compile, {}, 0, []) def run_re_tests(): from test.re_tests import benchmarks, tests, SUCCEED, FAIL, SYNTAX_ERROR Modified: python/branches/release31-maint/Modules/_sre.c ============================================================================== --- python/branches/release31-maint/Modules/_sre.c (original) +++ python/branches/release31-maint/Modules/_sre.c Thu Mar 4 23:01:47 2010 @@ -2702,7 +2702,7 @@ else { Py_ssize_t p_length; if (!getstring(pattern, &p_length, &self->charsize)) { - PyObject_DEL(self); + Py_DECREF(self); return NULL; } } From solipsis at pitrou.net Fri Mar 5 00:30:18 2010 From: solipsis at pitrou.net (solipsis at pitrou.net) Date: Fri, 5 Mar 2010 00:30:18 +0100 (CET) Subject: [Python-checkins] Daily py3k reference leaks (r78664): sum=0 Message-ID: <20100304233019.040031770A@ns6635.ovh.net> py3k results for svn r78664 (hg cset d284733d3ddd) -------------------------------------------------- Command line was: ['./python', '-m', 'test.regrtest', '-uall', '-R', '3:3:/home/antoine/py3k/refleaks/reflog0-jaKw', '-x', 'test_httpservers'] From hg at python.org Fri Mar 5 00:31:24 2010 From: hg at python.org (tarek.ziade) Date: Fri, 05 Mar 2010 00:31:24 +0100 Subject: [Python-checkins] e8dc941b6cae in distutils2: added an __all__ statement Message-ID: tarek.ziade pushed e8dc941b6cae to distutils2: http://hg.python.org/distutils2/rev/e8dc941b6cae changeset: 69:e8dc941b6cae user: Tarek Ziade date: Thu Mar 04 19:34:56 2010 +0100 summary: added an __all__ statement diff --git a/src/distutils2/metadata.py b/src/distutils2/metadata.py --- a/src/distutils2/metadata.py +++ b/src/distutils2/metadata.py @@ -85,6 +85,9 @@ # docutils is not installed _HAS_DOCUTILS = False +# public API of this module +__all__ = ('DistributionMetadata', 'PKG_INFO_ENCODING') + # Encoding used for the PKG-INFO files PKG_INFO_ENCODING = 'utf-8' -- Repository URL: http://hg.python.org/distutils2 From hg at python.org Fri Mar 5 00:31:24 2010 From: hg at python.org (tarek.ziade) Date: Fri, 05 Mar 2010 00:31:24 +0100 Subject: [Python-checkins] cbd0ab901245 in distutils2: this test is not necessary anymore Message-ID: tarek.ziade pushed cbd0ab901245 to distutils2: http://hg.python.org/distutils2/rev/cbd0ab901245 changeset: 70:cbd0ab901245 user: Tarek Ziade date: Thu Mar 04 20:41:35 2010 +0100 summary: this test is not necessary anymore diff --git a/src/distutils2/tests/test_check.py b/src/distutils2/tests/test_check.py --- a/src/distutils2/tests/test_check.py +++ b/src/distutils2/tests/test_check.py @@ -47,22 +47,6 @@ cmd = self._run(metadata, strict=1) self.assertEquals(cmd._warnings, 0) - def test_check_document(self): - if not _HAS_DOCUTILS: # won't test without docutils - return - pkg_info, dist = self.create_dist() - cmd = check(dist) - - # let's see if it detects broken rest - broken_rest = 'title\n===\n\ntest' - msgs = cmd._check_rst_data(broken_rest) - self.assertEquals(len(msgs), 1) - - # and non-broken rest - rest = 'title\n=====\n\ntest' - msgs = cmd._check_rst_data(rest) - self.assertEquals(len(msgs), 0) - def test_check_restructuredtext(self): if not _HAS_DOCUTILS: # won't test without docutils return -- Repository URL: http://hg.python.org/distutils2 From hg at python.org Fri Mar 5 00:31:24 2010 From: hg at python.org (tarek.ziade) Date: Fri, 05 Mar 2010 00:31:24 +0100 Subject: [Python-checkins] af2f3db02606 in distutils2: a bad predicate just display a warning -- Message-ID: tarek.ziade pushed af2f3db02606 to distutils2: http://hg.python.org/distutils2/rev/af2f3db02606 changeset: 72:af2f3db02606 tag: tip user: Tarek Ziade date: Thu Mar 04 21:04:49 2010 +0100 summary: a bad predicate just display a warning -- diff --git a/docs/source/metadata.rst b/docs/source/metadata.rst --- a/docs/source/metadata.rst +++ b/docs/source/metadata.rst @@ -2,20 +2,17 @@ Metadata ======== -Distutils2 provides a :class:`DistributionMetadata` class that can read and -write Metadata files. It also supports PEP 345 environment markers and -checks that version numbers provided in the fields are PEP 386 compatible -when required. +Distutils2 provides a :class:`DistributionMetadata` class that can read and +write Metadata files. This class is compatible with all versions of Metadata: +- 1.0 : PEP 241 +- 1.1 : PEP 314 +- 1.2 : PEP 345 -Supported formats -================= +The PEP 345 implementation supports the micro-language for the environment +markers, and displays warnings when versions that are supposed to be +PEP 386 are violating the scheme. -The class can read and write Metadata v1.0 and v1.2 -files. When a v1.1 file is read, it is transformed into 1.0 or 1.2 depending -on the fields provided. 1.1 fields are ignored in that case. - -XXX explain why Reading metadata ================ @@ -34,11 +31,11 @@ >>> metadata['Requires-Dist'] ["pywin32; sys.platform == 'win32'", "Sphinx"] -The fields that supports environment markers (XXX) can be automatically -ignored if the object is instanciated using the ``platform_dependant`` option. +The fields that supports environment markers can be automatically ignored if +the object is instanciated using the ``platform_dependant`` option. :class:`DistributionMetadata` will interpret in the case the markers and will -automatically remove the fields that are not compliant with the running -environment. Here's an example under Mac OS X. The win32 dependency +automatically remove the fields that are not compliant with the running +environment. Here's an example under Mac OS X. The win32 dependency we saw earlier is ignored:: >>> from distutils2.metadata import DistributionMetadata @@ -46,9 +43,53 @@ >>> metadata['Requires-Dist'] ['bar'] +If you want to provide your own execution context, let's say to test the +Metadata under a particular environment that is not the current environment, +you can provide your own values in the ``execution_context`` option, which +is the dict that may contain one or more keys of the context the micro-language +expects. + +Here's an example, simulating a win32 environment:: + + >>> from distutils2.metadata import DistributionMetadata + >>> context = {'sys.platform': 'win32'} + >>> metadata = DistributionMetadata('PKG-INFO', platform_dependant=True, + ... execution_context=context) + ... + >>> metadata['Requires-Dist'] = ["pywin32; sys.platform == 'win32'", + ... "Sphinx"] + ... + >>> metadata['Requires-Dist'] + ['pywin32', 'Sphinx'] + Writing metadata ================ -XXX demonstrate here how version numbers are checked when a key is set. +Writing metadata can be done using the ``write`` API:: + >>> metadata.write('/to/my/PKG-INFO') + +The class will pick the best version for the metadata, depending on the values +provided. If all the values provided exists in all versions, teh class will +used :attr:`metadata.PKG_INFO_PREFERRED_VERSION`. It is set by default to 1.0. + + +Conflict checking and best version +================================== + +Some fields in PEP 345 have to follow a version scheme in their versions +predicate. When the scheme is violated, a warning is emited:: + + >>> from distutils2.metadata import DistributionMetadata + >>> metadata = DistributionMetadata() + >>> metadata['Requires-Dist'] = ['Funky (Groovie)'] + "Funky (Groovie)" is not a valid predicate + >>> metadata['Requires-Dist'] = ['Funky (1.2)'] + + + +XXX talk about check() + + + diff --git a/src/distutils2/errors.py b/src/distutils2/errors.py --- a/src/distutils2/errors.py +++ b/src/distutils2/errors.py @@ -93,3 +93,16 @@ class MetadataUnrecognizedVersionError(DistutilsError): """Unknown metadata version number.""" +class IrrationalVersionError(Exception): + """This is an irrational version.""" + pass + +class HugeMajorVersionNumError(IrrationalVersionError): + """An irrational version because the major version number is huge + (often because a year or date was used). + + See `error_on_huge_major_num` option in `NormalizedVersion` for details. + This guard can be disabled by setting that option False. + """ + pass + diff --git a/src/distutils2/metadata.py b/src/distutils2/metadata.py --- a/src/distutils2/metadata.py +++ b/src/distutils2/metadata.py @@ -58,6 +58,7 @@ from email import message_from_file from tokenize import tokenize, NAME, OP, STRING, ENDMARKER +from distutils2.log import warn from distutils2.util import rfc822_escape from distutils2.version import is_valid_predicate from distutils2.errors import (MetadataConflictError, @@ -352,7 +353,7 @@ for v in value: # check that the values are valid predicates if not is_valid_predicate(v.split(';')[0]): - raise ValueError('"%s" is not a valid predicate' % v) + warn('"%s" is not a valid predicate' % v) if name in _LISTFIELDS + _ELEMENTSFIELD: if isinstance(value, str): value = value.split(',') diff --git a/src/distutils2/tests/test_metadata.py b/src/distutils2/tests/test_metadata.py --- a/src/distutils2/tests/test_metadata.py +++ b/src/distutils2/tests/test_metadata.py @@ -134,6 +134,13 @@ metadata.read_file(StringIO(open(PKG_INFO).read())) self.assertEquals(metadata['Metadata-Version'], '1.1') + def test_warnings(self): + metadata = DistributionMetadata() + + # this should raise a warning + # XXX how to test this on 2.4 ? + metadata['Requires-Dist'] = ['Funky (Groovie)'] + def test_suite(): diff --git a/src/distutils2/version.py b/src/distutils2/version.py --- a/src/distutils2/version.py +++ b/src/distutils2/version.py @@ -1,18 +1,7 @@ import sys import re -class IrrationalVersionError(Exception): - """This is an irrational version.""" - pass - -class HugeMajorVersionNumError(IrrationalVersionError): - """An irrational version because the major version number is huge - (often because a year or date was used). - - See `error_on_huge_major_num` option in `NormalizedVersion` for details. - This guard can be disabled by setting that option False. - """ - pass +from distutils2.errors import IrrationalVersionError, HugeMajorVersionNumError # A marker used in the second and third parts of the `parts` tuple, for # versions that don't have those segments, to sort properly. An example @@ -373,7 +362,7 @@ def is_valid_predicate(predicate): try: VersionPredicate(predicate) - except ValueError: + except (ValueError, IrrationalVersionError): return False else: return True -- Repository URL: http://hg.python.org/distutils2 From hg at python.org Fri Mar 5 00:31:24 2010 From: hg at python.org (tarek.ziade) Date: Fri, 05 Mar 2010 00:31:24 +0100 Subject: [Python-checkins] 1e1e2f7ab25c in distutils2: refactored DistributionMetadata so it also recognizes 1.1. It's much cleaner Message-ID: tarek.ziade pushed 1e1e2f7ab25c to distutils2: http://hg.python.org/distutils2/rev/1e1e2f7ab25c changeset: 71:1e1e2f7ab25c user: Tarek Ziade date: Thu Mar 04 20:42:22 2010 +0100 summary: refactored DistributionMetadata so it also recognizes 1.1. It's much cleaner that way even if 1.1 is never used diff --git a/src/distutils2/errors.py b/src/distutils2/errors.py --- a/src/distutils2/errors.py +++ b/src/distutils2/errors.py @@ -86,3 +86,10 @@ class UnknownFileError(CCompilerError): """Attempt to process an unknown file type.""" + +class MetadataConflictError(DistutilsError): + """Attempt to read or write metadata fields that are conflictual.""" + +class MetadataUnrecognizedVersionError(DistutilsError): + """Unknown metadata version number.""" + diff --git a/src/distutils2/metadata.py b/src/distutils2/metadata.py --- a/src/distutils2/metadata.py +++ b/src/distutils2/metadata.py @@ -60,6 +60,8 @@ from distutils2.util import rfc822_escape from distutils2.version import is_valid_predicate +from distutils2.errors import (MetadataConflictError, + MetadataUnrecognizedVersionError) try: # docutils is installed @@ -86,17 +88,30 @@ _HAS_DOCUTILS = False # public API of this module -__all__ = ('DistributionMetadata', 'PKG_INFO_ENCODING') +__all__ = ('DistributionMetadata', 'PKG_INFO_ENCODING', + 'PKG_INFO_PREFERRED_VERSION') # Encoding used for the PKG-INFO files PKG_INFO_ENCODING = 'utf-8' +# preferred version. Hopefully will be changed +# to 1.2 once PEP 345 is supported everywhere +PKG_INFO_PREFERRED_VERSION = '1.0' + _LINE_PREFIX = re.compile('\n \|') _241_FIELDS = ('Metadata-Version', 'Name', 'Version', 'Platform', 'Summary', 'Description', 'Keywords', 'Home-page', 'Author', 'Author-email', 'License') +_314_FIELDS = ('Metadata-Version', 'Name', 'Version', 'Platform', + 'Supported-Platform', 'Summary', 'Description', + 'Keywords', 'Home-page', 'Author', 'Author-email', + 'License', 'Classifier', 'Download-URL', 'Obsoletes', + 'Provides', 'Requires') + +_314_MARKERS = ('Obsoletes', 'Provides', 'Requires') + _345_FIELDS = ('Metadata-Version', 'Name', 'Version', 'Platform', 'Supported-Platform', 'Summary', 'Description', 'Keywords', 'Home-page', 'Author', 'Author-email', @@ -105,6 +120,48 @@ 'Provides-Dist', 'Requires-Dist', 'Requires-Python', 'Requires-External') +_345_MARKERS = ('Provides-Dist', 'Requires-Dist', 'Requires-Python', + 'Obsoletes-Dist', 'Requires-External', 'Maintainer', + 'Maintainer-email') + +_ALL_FIELDS = [] +for field in _241_FIELDS + _314_FIELDS + _345_FIELDS: + if field in _ALL_FIELDS: + continue + _ALL_FIELDS.append(field) + +def _version2fieldlist(version): + if version == '1.0': + return _241_FIELDS + elif version == '1.1': + return _314_FIELDS + elif version == '1.2': + return _345_FIELDS + raise MetadataUnrecognizedVersionError(version) + +def _best_version(fields): + """Will detect the best version depending on the fields used.""" + def _has_marker(keys, markers): + for marker in markers: + if marker in keys: + return True + return False + keys = fields.keys() + is_1_1 = _has_marker(keys, _314_MARKERS) + is_1_2 = _has_marker(keys, _345_MARKERS) + if is_1_1 and is_1_2: + raise MetadataConflictError('You used both 1.1 and 1.2 fields') + + # we have the choice, either 1.0, or 1.2 + # - 1.0 has a broken Summary field but work with all tools + # - 1.1 is to avoid + # - 1.2 fixes Summary but is not spreaded yet + if not is_1_1 and not is_1_2: + return PKG_INFO_PREFERRED_VERSION + if is_1_1: + return '1.1' + return '1.2' + _ATTR2FIELD = {'metadata_version': 'Metadata-Version', 'name': 'Name', 'version': 'Version', @@ -156,16 +213,14 @@ self.read(path) self.execution_context = execution_context - def _guessmetadata_version(self): - for field in self._fields: - if field in _345_FIELDS and field not in _241_FIELDS: - return '1.2' - return '1.0' + def _set_best_version(self): + self.version = _best_version(self._fields) + self._fields['Metadata-Version'] = self.version def _write_field(self, file, name, value): file.write('%s: %s\n' % (name, value)) - def _write_list (self, file, name, values): + def _write_list(self, file, name, values): for value in values: self._write_field(file, name, value) @@ -175,13 +230,17 @@ return str(value) def __getitem__(self, name): - return self.get_field(name) + return self.get(name) def __setitem__(self, name, value): - return self.set_field(name, value) + return self.set(name, value) + + def __delitem__(self, name): + del self._fields[name] + self._set_best_version() def _convert_name(self, name): - if name in _241_FIELDS + _345_FIELDS: + if name in _ALL_FIELDS: return name name = name.replace('-', '_').lower() if name in _ATTR2FIELD: @@ -236,7 +295,7 @@ def is_metadata_field(self, name): name = self._convert_name(name) - return name in _241_FIELDS + _345_FIELDS + return name in _ALL_FIELDS def read(self, filepath): self.read_file(open(filepath)) @@ -244,25 +303,18 @@ def read_file(self, fileob): """Reads the metadata values from a file object.""" msg = message_from_file(fileob) - version = msg['metadata-version'] - if version in ('1.0', '1.1'): - fields = _241_FIELDS - else: - fields = _345_FIELDS + self.version = msg['metadata-version'] - for field in fields: + for field in _version2fieldlist(self.version): if field in _LISTFIELDS: # we can have multiple lines values = msg.get_all(field) - self.set_field(field, values) + self.set(field, values) else: # single line value = msg[field] if value is not None: - self.set_field(field, value) - - self.version = self._guessmetadata_version() - self.set_field('Metadata-Version', self.version) + self.set(field, value) def write(self, filepath): """Write the metadata fields into path. @@ -276,15 +328,9 @@ def write_file(self, fileobject): """Write the PKG-INFO format data to a file object. """ - version = self._guessmetadata_version() - if 'Metadata-Version' not in self._fields: - self['Metadata-Version'] = version - if version == '1.0': - fields = _241_FIELDS - else: - fields = _345_FIELDS - for field in fields: - values = self.get_field(field) + self._set_best_version() + for field in _version2fieldlist(self.version): + values = self.get(field) if field in _ELEMENTSFIELD: self._write_field(fileobject, field, ','.join(values)) continue @@ -296,7 +342,7 @@ for value in values: self._write_field(fileobject, field, value) - def set_field(self, name, value): + def set(self, name, value): """Controls then sets a metadata field""" name = self._convert_name(name) @@ -315,8 +361,11 @@ if name == 'Description': value = self._remove_line_prefix(value) self._fields[name] = value + # will trigger an error in case the user + # tries to set incompatible versions fields + self._set_best_version() - def get_field(self, name): + def get(self, name): """Gets a metadata field.""" name = self._convert_name(name) if name not in self._fields: @@ -363,10 +412,7 @@ return missing, warnings def keys(self): - version = self._guessmetadata_version() - if version == '1.0': - return _241_FIELDS - return _345_FIELDS + return _version2fieldlist(self.version) def values(self): return [self[key] for key in self.keys()] diff --git a/src/distutils2/tests/SETUPTOOLS-PKG-INFO b/src/distutils2/tests/SETUPTOOLS-PKG-INFO new file mode 100644 --- /dev/null +++ b/src/distutils2/tests/SETUPTOOLS-PKG-INFO @@ -0,0 +1,182 @@ +Metadata-Version: 1.0 +Name: setuptools +Version: 0.6c9 +Summary: Download, build, install, upgrade, and uninstall Python packages -- easily! +Home-page: http://pypi.python.org/pypi/setuptools +Author: Phillip J. Eby +Author-email: distutils-sig at python.org +License: PSF or ZPL +Description: =============================== + Installing and Using Setuptools + =============================== + + .. contents:: **Table of Contents** + + + ------------------------- + Installation Instructions + ------------------------- + + Windows + ======= + + Install setuptools using the provided ``.exe`` installer. If you've previously + installed older versions of setuptools, please delete all ``setuptools*.egg`` + and ``setuptools.pth`` files from your system's ``site-packages`` directory + (and any other ``sys.path`` directories) FIRST. + + If you are upgrading a previous version of setuptools that was installed using + an ``.exe`` installer, please be sure to also *uninstall that older version* + via your system's "Add/Remove Programs" feature, BEFORE installing the newer + version. + + Once installation is complete, you will find an ``easy_install.exe`` program in + your Python ``Scripts`` subdirectory. Be sure to add this directory to your + ``PATH`` environment variable, if you haven't already done so. + + + RPM-Based Systems + ================= + + Install setuptools using the provided source RPM. The included ``.spec`` file + assumes you are installing using the default ``python`` executable, and is not + specific to a particular Python version. The ``easy_install`` executable will + be installed to a system ``bin`` directory such as ``/usr/bin``. + + If you wish to install to a location other than the default Python + installation's default ``site-packages`` directory (and ``$prefix/bin`` for + scripts), please use the ``.egg``-based installation approach described in the + following section. + + + Cygwin, Mac OS X, Linux, Other + ============================== + + 1. Download the appropriate egg for your version of Python (e.g. + ``setuptools-0.6c9-py2.4.egg``). Do NOT rename it. + + 2. Run it as if it were a shell script, e.g. ``sh setuptools-0.6c9-py2.4.egg``. + Setuptools will install itself using the matching version of Python (e.g. + ``python2.4``), and will place the ``easy_install`` executable in the + default location for installing Python scripts (as determined by the + standard distutils configuration files, or by the Python installation). + + If you want to install setuptools to somewhere other than ``site-packages`` or + your default distutils installation locations for libraries and scripts, you + may include EasyInstall command-line options such as ``--prefix``, + ``--install-dir``, and so on, following the ``.egg`` filename on the same + command line. For example:: + + sh setuptools-0.6c9-py2.4.egg --prefix=~ + + You can use ``--help`` to get a full options list, but we recommend consulting + the `EasyInstall manual`_ for detailed instructions, especially `the section + on custom installation locations`_. + + .. _EasyInstall manual: http://peak.telecommunity.com/DevCenter/EasyInstall + .. _the section on custom installation locations: http://peak.telecommunity.com/DevCenter/EasyInstall#custom-installation-locations + + + Cygwin Note + ----------- + + If you are trying to install setuptools for the **Windows** version of Python + (as opposed to the Cygwin version that lives in ``/usr/bin``), you must make + sure that an appropriate executable (``python2.3``, ``python2.4``, or + ``python2.5``) is on your **Cygwin** ``PATH`` when invoking the egg. For + example, doing the following at a Cygwin bash prompt will install setuptools + for the **Windows** Python found at ``C:\\Python24``:: + + ln -s /cygdrive/c/Python24/python.exe python2.4 + PATH=.:$PATH sh setuptools-0.6c9-py2.4.egg + rm python2.4 + + + Downloads + ========= + + All setuptools downloads can be found at `the project's home page in the Python + Package Index`_. Scroll to the very bottom of the page to find the links. + + .. _the project's home page in the Python Package Index: http://pypi.python.org/pypi/setuptools + + In addition to the PyPI downloads, the development version of ``setuptools`` + is available from the `Python SVN sandbox`_, and in-development versions of the + `0.6 branch`_ are available as well. + + .. _0.6 branch: http://svn.python.org/projects/sandbox/branches/setuptools-0.6/#egg=setuptools-dev06 + + .. _Python SVN sandbox: http://svn.python.org/projects/sandbox/trunk/setuptools/#egg=setuptools-dev + + -------------------------------- + Using Setuptools and EasyInstall + -------------------------------- + + Here are some of the available manuals, tutorials, and other resources for + learning about Setuptools, Python Eggs, and EasyInstall: + + * `The EasyInstall user's guide and reference manual`_ + * `The setuptools Developer's Guide`_ + * `The pkg_resources API reference`_ + * `Package Compatibility Notes`_ (user-maintained) + * `The Internal Structure of Python Eggs`_ + + Questions, comments, and bug reports should be directed to the `distutils-sig + mailing list`_. If you have written (or know of) any tutorials, documentation, + plug-ins, or other resources for setuptools users, please let us know about + them there, so this reference list can be updated. If you have working, + *tested* patches to correct problems or add features, you may submit them to + the `setuptools bug tracker`_. + + .. _setuptools bug tracker: http://bugs.python.org/setuptools/ + .. _Package Compatibility Notes: http://peak.telecommunity.com/DevCenter/PackageNotes + .. _The Internal Structure of Python Eggs: http://peak.telecommunity.com/DevCenter/EggFormats + .. _The setuptools Developer's Guide: http://peak.telecommunity.com/DevCenter/setuptools + .. _The pkg_resources API reference: http://peak.telecommunity.com/DevCenter/PkgResources + .. _The EasyInstall user's guide and reference manual: http://peak.telecommunity.com/DevCenter/EasyInstall + .. _distutils-sig mailing list: http://mail.python.org/pipermail/distutils-sig/ + + + ------- + Credits + ------- + + * The original design for the ``.egg`` format and the ``pkg_resources`` API was + co-created by Phillip Eby and Bob Ippolito. Bob also implemented the first + version of ``pkg_resources``, and supplied the OS X operating system version + compatibility algorithm. + + * Ian Bicking implemented many early "creature comfort" features of + easy_install, including support for downloading via Sourceforge and + Subversion repositories. Ian's comments on the Web-SIG about WSGI + application deployment also inspired the concept of "entry points" in eggs, + and he has given talks at PyCon and elsewhere to inform and educate the + community about eggs and setuptools. + + * Jim Fulton contributed time and effort to build automated tests of various + aspects of ``easy_install``, and supplied the doctests for the command-line + ``.exe`` wrappers on Windows. + + * Phillip J. Eby is the principal author and maintainer of setuptools, and + first proposed the idea of an importable binary distribution format for + Python application plug-ins. + + * Significant parts of the implementation of setuptools were funded by the Open + Source Applications Foundation, to provide a plug-in infrastructure for the + Chandler PIM application. In addition, many OSAF staffers (such as Mike + "Code Bear" Taylor) contributed their time and stress as guinea pigs for the + use of eggs and setuptools, even before eggs were "cool". (Thanks, guys!) + + +Keywords: CPAN PyPI distutils eggs package management +Platform: UNKNOWN +Classifier: Development Status :: 3 - Alpha +Classifier: Intended Audience :: Developers +Classifier: License :: OSI Approved :: Python Software Foundation License +Classifier: License :: OSI Approved :: Zope Public License +Classifier: Operating System :: OS Independent +Classifier: Programming Language :: Python +Classifier: Topic :: Software Development :: Libraries :: Python Modules +Classifier: Topic :: System :: Archiving :: Packaging +Classifier: Topic :: System :: Systems Administration +Classifier: Topic :: Utilities diff --git a/src/distutils2/tests/SETUPTOOLS-PKG-INFO2 b/src/distutils2/tests/SETUPTOOLS-PKG-INFO2 new file mode 100644 --- /dev/null +++ b/src/distutils2/tests/SETUPTOOLS-PKG-INFO2 @@ -0,0 +1,183 @@ +Metadata-Version: 1.1 +Name: setuptools +Version: 0.6c9 +Summary: Download, build, install, upgrade, and uninstall Python packages -- easily! +Home-page: http://pypi.python.org/pypi/setuptools +Author: Phillip J. Eby +Author-email: distutils-sig at python.org +License: PSF or ZPL +Description: =============================== + Installing and Using Setuptools + =============================== + + .. contents:: **Table of Contents** + + + ------------------------- + Installation Instructions + ------------------------- + + Windows + ======= + + Install setuptools using the provided ``.exe`` installer. If you've previously + installed older versions of setuptools, please delete all ``setuptools*.egg`` + and ``setuptools.pth`` files from your system's ``site-packages`` directory + (and any other ``sys.path`` directories) FIRST. + + If you are upgrading a previous version of setuptools that was installed using + an ``.exe`` installer, please be sure to also *uninstall that older version* + via your system's "Add/Remove Programs" feature, BEFORE installing the newer + version. + + Once installation is complete, you will find an ``easy_install.exe`` program in + your Python ``Scripts`` subdirectory. Be sure to add this directory to your + ``PATH`` environment variable, if you haven't already done so. + + + RPM-Based Systems + ================= + + Install setuptools using the provided source RPM. The included ``.spec`` file + assumes you are installing using the default ``python`` executable, and is not + specific to a particular Python version. The ``easy_install`` executable will + be installed to a system ``bin`` directory such as ``/usr/bin``. + + If you wish to install to a location other than the default Python + installation's default ``site-packages`` directory (and ``$prefix/bin`` for + scripts), please use the ``.egg``-based installation approach described in the + following section. + + + Cygwin, Mac OS X, Linux, Other + ============================== + + 1. Download the appropriate egg for your version of Python (e.g. + ``setuptools-0.6c9-py2.4.egg``). Do NOT rename it. + + 2. Run it as if it were a shell script, e.g. ``sh setuptools-0.6c9-py2.4.egg``. + Setuptools will install itself using the matching version of Python (e.g. + ``python2.4``), and will place the ``easy_install`` executable in the + default location for installing Python scripts (as determined by the + standard distutils configuration files, or by the Python installation). + + If you want to install setuptools to somewhere other than ``site-packages`` or + your default distutils installation locations for libraries and scripts, you + may include EasyInstall command-line options such as ``--prefix``, + ``--install-dir``, and so on, following the ``.egg`` filename on the same + command line. For example:: + + sh setuptools-0.6c9-py2.4.egg --prefix=~ + + You can use ``--help`` to get a full options list, but we recommend consulting + the `EasyInstall manual`_ for detailed instructions, especially `the section + on custom installation locations`_. + + .. _EasyInstall manual: http://peak.telecommunity.com/DevCenter/EasyInstall + .. _the section on custom installation locations: http://peak.telecommunity.com/DevCenter/EasyInstall#custom-installation-locations + + + Cygwin Note + ----------- + + If you are trying to install setuptools for the **Windows** version of Python + (as opposed to the Cygwin version that lives in ``/usr/bin``), you must make + sure that an appropriate executable (``python2.3``, ``python2.4``, or + ``python2.5``) is on your **Cygwin** ``PATH`` when invoking the egg. For + example, doing the following at a Cygwin bash prompt will install setuptools + for the **Windows** Python found at ``C:\\Python24``:: + + ln -s /cygdrive/c/Python24/python.exe python2.4 + PATH=.:$PATH sh setuptools-0.6c9-py2.4.egg + rm python2.4 + + + Downloads + ========= + + All setuptools downloads can be found at `the project's home page in the Python + Package Index`_. Scroll to the very bottom of the page to find the links. + + .. _the project's home page in the Python Package Index: http://pypi.python.org/pypi/setuptools + + In addition to the PyPI downloads, the development version of ``setuptools`` + is available from the `Python SVN sandbox`_, and in-development versions of the + `0.6 branch`_ are available as well. + + .. _0.6 branch: http://svn.python.org/projects/sandbox/branches/setuptools-0.6/#egg=setuptools-dev06 + + .. _Python SVN sandbox: http://svn.python.org/projects/sandbox/trunk/setuptools/#egg=setuptools-dev + + -------------------------------- + Using Setuptools and EasyInstall + -------------------------------- + + Here are some of the available manuals, tutorials, and other resources for + learning about Setuptools, Python Eggs, and EasyInstall: + + * `The EasyInstall user's guide and reference manual`_ + * `The setuptools Developer's Guide`_ + * `The pkg_resources API reference`_ + * `Package Compatibility Notes`_ (user-maintained) + * `The Internal Structure of Python Eggs`_ + + Questions, comments, and bug reports should be directed to the `distutils-sig + mailing list`_. If you have written (or know of) any tutorials, documentation, + plug-ins, or other resources for setuptools users, please let us know about + them there, so this reference list can be updated. If you have working, + *tested* patches to correct problems or add features, you may submit them to + the `setuptools bug tracker`_. + + .. _setuptools bug tracker: http://bugs.python.org/setuptools/ + .. _Package Compatibility Notes: http://peak.telecommunity.com/DevCenter/PackageNotes + .. _The Internal Structure of Python Eggs: http://peak.telecommunity.com/DevCenter/EggFormats + .. _The setuptools Developer's Guide: http://peak.telecommunity.com/DevCenter/setuptools + .. _The pkg_resources API reference: http://peak.telecommunity.com/DevCenter/PkgResources + .. _The EasyInstall user's guide and reference manual: http://peak.telecommunity.com/DevCenter/EasyInstall + .. _distutils-sig mailing list: http://mail.python.org/pipermail/distutils-sig/ + + + ------- + Credits + ------- + + * The original design for the ``.egg`` format and the ``pkg_resources`` API was + co-created by Phillip Eby and Bob Ippolito. Bob also implemented the first + version of ``pkg_resources``, and supplied the OS X operating system version + compatibility algorithm. + + * Ian Bicking implemented many early "creature comfort" features of + easy_install, including support for downloading via Sourceforge and + Subversion repositories. Ian's comments on the Web-SIG about WSGI + application deployment also inspired the concept of "entry points" in eggs, + and he has given talks at PyCon and elsewhere to inform and educate the + community about eggs and setuptools. + + * Jim Fulton contributed time and effort to build automated tests of various + aspects of ``easy_install``, and supplied the doctests for the command-line + ``.exe`` wrappers on Windows. + + * Phillip J. Eby is the principal author and maintainer of setuptools, and + first proposed the idea of an importable binary distribution format for + Python application plug-ins. + + * Significant parts of the implementation of setuptools were funded by the Open + Source Applications Foundation, to provide a plug-in infrastructure for the + Chandler PIM application. In addition, many OSAF staffers (such as Mike + "Code Bear" Taylor) contributed their time and stress as guinea pigs for the + use of eggs and setuptools, even before eggs were "cool". (Thanks, guys!) + + +Keywords: CPAN PyPI distutils eggs package management +Platform: UNKNOWN +Classifier: Development Status :: 3 - Alpha +Classifier: Intended Audience :: Developers +Classifier: License :: OSI Approved :: Python Software Foundation License +Classifier: License :: OSI Approved :: Zope Public License +Classifier: Operating System :: OS Independent +Classifier: Programming Language :: Python +Classifier: Topic :: Software Development :: Libraries :: Python Modules +Classifier: Topic :: System :: Archiving :: Packaging +Classifier: Topic :: System :: Systems Administration +Classifier: Topic :: Utilities +Requires: Foo diff --git a/src/distutils2/tests/test_metadata.py b/src/distutils2/tests/test_metadata.py --- a/src/distutils2/tests/test_metadata.py +++ b/src/distutils2/tests/test_metadata.py @@ -111,6 +111,30 @@ self.assertIn('0.5', metadata.values()) self.assertIn(('Version', '0.5'), metadata.items()) + def test_versions(self): + metadata = DistributionMetadata() + metadata['Obsoletes'] = 'ok' + self.assertEquals(metadata['Metadata-Version'], '1.1') + + del metadata['Obsoletes'] + metadata['Obsoletes-Dist'] = 'ok' + self.assertEquals(metadata['Metadata-Version'], '1.2') + + del metadata['Obsoletes-Dist'] + metadata['Version'] = '1' + self.assertEquals(metadata['Metadata-Version'], '1.0') + + PKG_INFO = os.path.join(os.path.dirname(__file__), + 'SETUPTOOLS-PKG-INFO') + metadata.read_file(StringIO(open(PKG_INFO).read())) + self.assertEquals(metadata['Metadata-Version'], '1.0') + + PKG_INFO = os.path.join(os.path.dirname(__file__), + 'SETUPTOOLS-PKG-INFO2') + metadata.read_file(StringIO(open(PKG_INFO).read())) + self.assertEquals(metadata['Metadata-Version'], '1.1') + + def test_suite(): return unittest2.makeSuite(DistributionMetadataTestCase) -- Repository URL: http://hg.python.org/distutils2 From python-checkins at python.org Fri Mar 5 01:16:03 2010 From: python-checkins at python.org (tarek.ziade) Date: Fri, 5 Mar 2010 01:16:03 +0100 (CET) Subject: [Python-checkins] r78666 - in python/trunk/Lib/distutils: command/build_ext.py command/install.py cygwinccompiler.py emxccompiler.py extension.py sysconfig.py tests/test_cygwinccompiler.py tests/test_emxccompiler.py tests/test_extension.py tests/test_install.py tests/test_unixccompiler.py tests/test_util.py unixccompiler.py util.py Message-ID: <20100305001603.48043EEABF@mail.python.org> Author: tarek.ziade Date: Fri Mar 5 01:16:02 2010 New Revision: 78666 Log: reverting partially distutils to its 2.6.x state so 2.7a4 looks more like the 2.7b1 in this. the whole revert will occur after a4 is tagged Removed: python/trunk/Lib/distutils/tests/test_cygwinccompiler.py python/trunk/Lib/distutils/tests/test_emxccompiler.py python/trunk/Lib/distutils/tests/test_extension.py Modified: python/trunk/Lib/distutils/command/build_ext.py python/trunk/Lib/distutils/command/install.py python/trunk/Lib/distutils/cygwinccompiler.py python/trunk/Lib/distutils/emxccompiler.py python/trunk/Lib/distutils/extension.py python/trunk/Lib/distutils/sysconfig.py python/trunk/Lib/distutils/tests/test_install.py python/trunk/Lib/distutils/tests/test_unixccompiler.py python/trunk/Lib/distutils/tests/test_util.py python/trunk/Lib/distutils/unixccompiler.py python/trunk/Lib/distutils/util.py Modified: python/trunk/Lib/distutils/command/build_ext.py ============================================================================== --- python/trunk/Lib/distutils/command/build_ext.py (original) +++ python/trunk/Lib/distutils/command/build_ext.py Fri Mar 5 01:16:02 2010 @@ -4,27 +4,21 @@ modules (currently limited to C extensions, should accommodate C++ extensions ASAP).""" -__revision__ = "$Id$" +# This module should be kept compatible with Python 2.1. -import sys, os, re -from warnings import warn +__revision__ = "$Id$" -from distutils.util import get_platform +import sys, os, string, re +from types import * +from site import USER_BASE, USER_SITE from distutils.core import Command from distutils.errors import * -from distutils.ccompiler import customize_compiler +from distutils.sysconfig import customize_compiler, get_python_version from distutils.dep_util import newer_group from distutils.extension import Extension +from distutils.util import get_platform from distutils import log -# this keeps compatibility from 2.3 to 2.5 -if sys.version < "2.6": - USER_BASE = None - HAS_USER_SITE = False -else: - from site import USER_BASE - HAS_USER_SITE = True - if os.name == 'nt': from distutils.msvccompiler import get_build_version MSVC_VERSION = int(get_build_version()) @@ -40,7 +34,7 @@ show_compilers() -class build_ext(Command): +class build_ext (Command): description = "build C/C++ extensions (compile/link to build directory)" @@ -100,55 +94,18 @@ "list of SWIG command line options"), ('swig=', None, "path to the SWIG executable"), + ('user', None, + "add user include, library and rpath"), ] - boolean_options = ['inplace', 'debug', 'force', 'swig-cpp'] - - if HAS_USER_SITE: - user_options.append(('user', None, - "add user include, library and rpath")) - boolean_options.append('user') + boolean_options = ['inplace', 'debug', 'force', 'swig-cpp', 'user'] help_options = [ ('help-compiler', None, "list available compilers", show_compilers), ] - - # making 'compiler' a property to deprecate - # its usage as something else than a compiler type - # e.g. like a compiler instance - def __init__(self, dist): - self._compiler = None - Command.__init__(self, dist) - - def __setattr__(self, name, value): - # need this to make sure setattr() (used in distutils) - # doesn't kill our property - if name == 'compiler': - self._set_compiler(value) - else: - self.__dict__[name] = value - - def _set_compiler(self, compiler): - if not isinstance(compiler, str) and compiler is not None: - # we don't want to allow that anymore in the future - warn("'compiler' specifies the compiler type in build_ext. " - "If you want to get the compiler object itself, " - "use 'compiler_obj'", DeprecationWarning) - self._compiler = compiler - - def _get_compiler(self): - if not isinstance(self._compiler, str) and self._compiler is not None: - # we don't want to allow that anymore in the future - warn("'compiler' specifies the compiler type in build_ext. " - "If you want to get the compiler object itself, " - "use 'compiler_obj'", DeprecationWarning) - return self._compiler - - compiler = property(_get_compiler, _set_compiler) - - def initialize_options(self): + def initialize_options (self): self.extensions = None self.build_lib = None self.plat_name = None @@ -172,7 +129,8 @@ self.user = None def finalize_options(self): - _sysconfig = __import__('sysconfig') + from distutils import sysconfig + self.set_undefined_options('build', ('build_lib', 'build_lib'), ('build_temp', 'build_temp'), @@ -189,8 +147,8 @@ # Make sure Python's include directories (for Python.h, pyconfig.h, # etc.) are in the include search path. - py_include = _sysconfig.get_path('include') - plat_py_include = _sysconfig.get_path('platinclude') + py_include = sysconfig.get_python_inc() + plat_py_include = sysconfig.get_python_inc(plat_specific=1) if self.include_dirs is None: self.include_dirs = self.distribution.include_dirs or [] if isinstance(self.include_dirs, str): @@ -211,13 +169,13 @@ self.libraries = [] if self.library_dirs is None: self.library_dirs = [] - elif isinstance(self.library_dirs, str): - self.library_dirs = self.library_dirs.split(os.pathsep) + elif type(self.library_dirs) is StringType: + self.library_dirs = string.split(self.library_dirs, os.pathsep) if self.rpath is None: self.rpath = [] - elif isinstance(self.rpath, str): - self.rpath = self.rpath.split(os.pathsep) + elif type(self.rpath) is StringType: + self.rpath = string.split(self.rpath, os.pathsep) # for extensions under windows use different directories # for Release and Debug builds. @@ -268,7 +226,7 @@ if sys.executable.startswith(os.path.join(sys.exec_prefix, "bin")): # building third party extensions self.library_dirs.append(os.path.join(sys.prefix, "lib", - "python" + _sysconfig.get_python_version(), + "python" + get_python_version(), "config")) else: # building python standard extensions @@ -276,13 +234,13 @@ # for extensions under Linux or Solaris with a shared Python library, # Python's library directory must be appended to library_dirs - _sysconfig.get_config_var('Py_ENABLE_SHARED') + sysconfig.get_config_var('Py_ENABLE_SHARED') if ((sys.platform.startswith('linux') or sys.platform.startswith('gnu') or sys.platform.startswith('sunos')) - and _sysconfig.get_config_var('Py_ENABLE_SHARED')): + and sysconfig.get_config_var('Py_ENABLE_SHARED')): if sys.executable.startswith(os.path.join(sys.exec_prefix, "bin")): # building third party extensions - self.library_dirs.append(_sysconfig.get_config_var('LIBDIR')) + self.library_dirs.append(sysconfig.get_config_var('LIBDIR')) else: # building python standard extensions self.library_dirs.append('.') @@ -294,7 +252,7 @@ if self.define: defines = self.define.split(',') - self.define = [(symbol, '1') for symbol in defines] + self.define = map(lambda symbol: (symbol, '1'), defines) # The option for macros to undefine is also a string from the # option parsing, but has to be a list. Multiple symbols can also @@ -345,50 +303,38 @@ # Setup the CCompiler object that we'll use to do all the # compiling and linking - - # used to prevent the usage of an existing compiler for the - # compiler option when calling new_compiler() - # this will be removed in 3.3 and 2.8 - if not isinstance(self._compiler, str): - self._compiler = None - - self.compiler_obj = new_compiler(compiler=self._compiler, - verbose=self.verbose, - dry_run=self.dry_run, - force=self.force) - - # used to keep the compiler object reachable with - # "self.compiler". this will be removed in 3.3 and 2.8 - self._compiler = self.compiler_obj - - customize_compiler(self.compiler_obj) + self.compiler = new_compiler(compiler=self.compiler, + verbose=self.verbose, + dry_run=self.dry_run, + force=self.force) + customize_compiler(self.compiler) # If we are cross-compiling, init the compiler now (if we are not # cross-compiling, init would not hurt, but people may rely on # late initialization of compiler even if they shouldn't...) if os.name == 'nt' and self.plat_name != get_platform(): - self.compiler_obj.initialize(self.plat_name) + self.compiler.initialize(self.plat_name) # And make sure that any compile/link-related options (which might # come from the command-line or from the setup script) are set in # that CCompiler object -- that way, they automatically apply to # all compiling and linking done here. if self.include_dirs is not None: - self.compiler_obj.set_include_dirs(self.include_dirs) + self.compiler.set_include_dirs(self.include_dirs) if self.define is not None: # 'define' option is a list of (name,value) tuples for (name, value) in self.define: - self.compiler_obj.define_macro(name, value) + self.compiler.define_macro(name, value) if self.undef is not None: for macro in self.undef: - self.compiler_obj.undefine_macro(macro) + self.compiler.undefine_macro(macro) if self.libraries is not None: - self.compiler_obj.set_libraries(self.libraries) + self.compiler.set_libraries(self.libraries) if self.library_dirs is not None: - self.compiler_obj.set_library_dirs(self.library_dirs) + self.compiler.set_library_dirs(self.library_dirs) if self.rpath is not None: - self.compiler_obj.set_runtime_library_dirs(self.rpath) + self.compiler.set_runtime_library_dirs(self.rpath) if self.link_objects is not None: - self.compiler_obj.set_link_objects(self.link_objects) + self.compiler.set_link_objects(self.link_objects) # Now actually compile and link everything. self.build_extensions() @@ -500,17 +446,11 @@ self.check_extensions_list(self.extensions) for ext in self.extensions: - try: - self.build_extension(ext) - except (CCompilerError, DistutilsError, CompileError), e: - if not ext.optional: - raise - self.warn('building extension "%s" failed: %s' % - (ext.name, e)) + self.build_extension(ext) def build_extension(self, ext): sources = ext.sources - if sources is None or not isinstance(sources, (list, tuple)): + if sources is None or type(sources) not in (ListType, TupleType): raise DistutilsSetupError, \ ("in 'ext_modules' option (extension '%s'), " + "'sources' must be present and must be " + @@ -550,13 +490,13 @@ for undef in ext.undef_macros: macros.append((undef,)) - objects = self.compiler_obj.compile(sources, - output_dir=self.build_temp, - macros=macros, - include_dirs=ext.include_dirs, - debug=self.debug, - extra_postargs=extra_args, - depends=ext.depends) + objects = self.compiler.compile(sources, + output_dir=self.build_temp, + macros=macros, + include_dirs=ext.include_dirs, + debug=self.debug, + extra_postargs=extra_args, + depends=ext.depends) # XXX -- this is a Vile HACK! # @@ -577,9 +517,9 @@ extra_args = ext.extra_link_args or [] # Detect target language, if not provided - language = ext.language or self.compiler_obj.detect_language(sources) + language = ext.language or self.compiler.detect_language(sources) - self.compiler_obj.link_shared_object( + self.compiler.link_shared_object( objects, ext_path, libraries=self.get_libraries(ext), library_dirs=ext.library_dirs, @@ -591,12 +531,14 @@ target_lang=language) - def swig_sources(self, sources, extension): + def swig_sources (self, sources, extension): + """Walk the list of source files in 'sources', looking for SWIG interface (.i) files. Run SWIG on all that are found, and return a modified 'sources' list with SWIG source files replaced by the generated C (or C++) files. """ + new_sources = [] swig_sources = [] swig_targets = {} @@ -645,7 +587,9 @@ return new_sources - def find_swig(self): + # swig_sources () + + def find_swig (self): """Return the name of the SWIG executable. On Unix, this is just "swig" -- it should be in the PATH. Tries a bit harder on Windows. @@ -674,6 +618,8 @@ ("I don't know how to find (much less run) SWIG " "on platform '%s'") % os.name + # find_swig () + # -- Name generators ----------------------------------------------- # (extension names, filenames, whatever) def get_ext_fullpath(self, ext_name): @@ -682,9 +628,14 @@ The file is located in `build_lib` or directly in the package (inplace option). """ + # makes sure the extension name is only using dots + all_dots = string.maketrans('/'+os.sep, '..') + ext_name = ext_name.translate(all_dots) + fullname = self.get_ext_fullname(ext_name) modpath = fullname.split('.') - filename = self.get_ext_filename(modpath[-1]) + filename = self.get_ext_filename(ext_name) + filename = os.path.split(filename)[-1] if not self.inplace: # no further work needed @@ -717,18 +668,18 @@ of the file from which it will be loaded (eg. "foo/bar.so", or "foo\bar.pyd"). """ - _sysconfig = __import__('sysconfig') - ext_path = ext_name.split('.') + from distutils.sysconfig import get_config_var + ext_path = string.split(ext_name, '.') # OS/2 has an 8 character module (extension) limit :-( if os.name == "os2": ext_path[len(ext_path) - 1] = ext_path[len(ext_path) - 1][:8] # extensions in debug_mode are named 'module_d.pyd' under windows - so_ext = _sysconfig.get_config_var('SO') + so_ext = get_config_var('SO') if os.name == 'nt' and self.debug: - return os.path.join(*ext_path) + '_d' + so_ext + return apply(os.path.join, ext_path) + '_d' + so_ext return os.path.join(*ext_path) + so_ext - def get_export_symbols(self, ext): + def get_export_symbols (self, ext): """Return the list of symbols that a shared extension has to export. This either uses 'ext.export_symbols' or, if it's not provided, "init" + module_name. Only relevant on Windows, where @@ -739,7 +690,7 @@ ext.export_symbols.append(initfunc_name) return ext.export_symbols - def get_libraries(self, ext): + def get_libraries (self, ext): """Return the list of libraries to link against when building a shared extension. On most platforms, this is just 'ext.libraries'; on Windows and OS/2, we add the Python library (eg. python20.dll). @@ -751,7 +702,7 @@ # Append '_d' to the python import library on debug builds. if sys.platform == "win32": from distutils.msvccompiler import MSVCCompiler - if not isinstance(self.compiler_obj, MSVCCompiler): + if not isinstance(self.compiler, MSVCCompiler): template = "python%d%d" if self.debug: template = template + '_d' @@ -783,13 +734,14 @@ # extensions, it is a reference to the original list return ext.libraries + [pythonlib] elif sys.platform[:6] == "atheos": - _sysconfig = __import__('sysconfig') + from distutils import sysconfig + template = "python%d.%d" pythonlib = (template % (sys.hexversion >> 24, (sys.hexversion >> 16) & 0xff)) # Get SHLIBS from Makefile extra = [] - for lib in _sysconfig.get_config_var('SHLIBS').split(): + for lib in sysconfig.get_config_var('SHLIBS').split(): if lib.startswith('-l'): extra.append(lib[2:]) else: @@ -803,11 +755,13 @@ return ext.libraries else: - _sysconfig = __import__('sysconfig') - if _sysconfig.get_config_var('Py_ENABLE_SHARED'): + from distutils import sysconfig + if sysconfig.get_config_var('Py_ENABLE_SHARED'): template = "python%d.%d" pythonlib = (template % (sys.hexversion >> 24, (sys.hexversion >> 16) & 0xff)) return ext.libraries + [pythonlib] else: return ext.libraries + +# class build_ext Modified: python/trunk/Lib/distutils/command/install.py ============================================================================== --- python/trunk/Lib/distutils/command/install.py (original) +++ python/trunk/Lib/distutils/command/install.py Fri Mar 5 01:16:02 2010 @@ -2,22 +2,26 @@ Implements the Distutils 'install' command.""" -__revision__ = "$Id$" +from distutils import log -import sys -import os +# This module should be kept compatible with Python 2.1. -from sysconfig import get_config_vars, get_paths, get_path, get_config_var +__revision__ = "$Id$" -from distutils import log +import sys, os, string +from types import * from distutils.core import Command from distutils.debug import DEBUG +from distutils.sysconfig import get_config_vars from distutils.errors import DistutilsPlatformError from distutils.file_util import write_file -from distutils.util import convert_path, change_root, get_platform +from distutils.util import convert_path, subst_vars, change_root +from distutils.util import get_platform from distutils.errors import DistutilsOptionError +from site import USER_BASE +from site import USER_SITE + -# kept for backward compat, will be removed in 3.2 if sys.version < "2.2": WINDOWS_SCHEME = { 'purelib': '$base', @@ -95,19 +99,13 @@ }, } +# The keys to an installation scheme; if any new types of files are to be +# installed, be sure to add an entry to every installation scheme above, +# and to SCHEME_KEYS here. SCHEME_KEYS = ('purelib', 'platlib', 'headers', 'scripts', 'data') -# end of backward compat -def _subst_vars(s, local_vars): - try: - return s.format(**local_vars) - except KeyError: - try: - return s.format(**os.environ) - except KeyError, var: - raise AttributeError('{%s}' % var) -class install(Command): +class install (Command): description = "install everything from build directory" @@ -119,6 +117,8 @@ "(Unix only) prefix for platform-specific files"), ('home=', None, "(Unix only) home directory to install under"), + ('user', None, + "install in user site-package '%s'" % USER_SITE), # Or, just set the base director(y|ies) ('install-base=', None, @@ -170,17 +170,12 @@ "filename in which to record list of installed files"), ] - boolean_options = ['compile', 'force', 'skip-build'] - - user_options.append(('user', None, - "install in user site-package '%s'" % \ - get_path('purelib', '%s_user' % os.name))) - boolean_options.append('user') + boolean_options = ['compile', 'force', 'skip-build', 'user'] negative_opt = {'no-compile' : 'compile'} - def initialize_options(self): - """Initializes options.""" + def initialize_options (self): + # High-level options: these select both an installation base # and scheme. self.prefix = None @@ -205,8 +200,8 @@ self.install_lib = None # set to either purelib or platlib self.install_scripts = None self.install_data = None - self.install_userbase = get_config_var('userbase') - self.install_usersite = get_path('purelib', '%s_user' % os.name) + self.install_userbase = USER_BASE + self.install_usersite = USER_SITE self.compile = None self.optimize = None @@ -256,8 +251,8 @@ # party Python modules on various platforms given a wide # array of user input is decided. Yes, it's quite complex!) - def finalize_options(self): - """Finalizes options.""" + def finalize_options (self): + # This method (and its pliant slaves, like 'finalize_unix()', # 'finalize_other()', and 'select_scheme()') is where the default # installation directories for modules, extension modules, and @@ -315,10 +310,8 @@ # $platbase in the other installation directories and not worry # about needing recursive variable expansion (shudder). - py_version = sys.version.split()[0] - prefix, exec_prefix, srcdir = get_config_vars('prefix', 'exec_prefix', - 'srcdir') - + py_version = (string.split(sys.version))[0] + (prefix, exec_prefix) = get_config_vars('prefix', 'exec_prefix') self.config_vars = {'dist_name': self.distribution.get_name(), 'dist_version': self.distribution.get_version(), 'dist_fullname': self.distribution.get_fullname(), @@ -329,11 +322,9 @@ 'prefix': prefix, 'sys_exec_prefix': exec_prefix, 'exec_prefix': exec_prefix, - 'srcdir': srcdir, + 'userbase': self.install_userbase, + 'usersite': self.install_usersite, } - - self.config_vars['userbase'] = self.install_userbase - self.config_vars['usersite'] = self.install_usersite self.expand_basedirs() self.dump_dirs("post-expand_basedirs()") @@ -399,27 +390,29 @@ # Punt on doc directories for now -- after all, we're punting on # documentation completely! - def dump_dirs(self, msg): - """Dumps the list of user options.""" - if not DEBUG: - return - from distutils.fancy_getopt import longopt_xlate - log.debug(msg + ":") - for opt in self.user_options: - opt_name = opt[0] - if opt_name[-1] == "=": - opt_name = opt_name[0:-1] - if opt_name in self.negative_opt: - opt_name = self.negative_opt[opt_name] - opt_name = opt_name.translate(longopt_xlate) - val = not getattr(self, opt_name) - else: - opt_name = opt_name.translate(longopt_xlate) - val = getattr(self, opt_name) - log.debug(" %s: %s" % (opt_name, val)) + # finalize_options () + + + def dump_dirs (self, msg): + if DEBUG: + from distutils.fancy_getopt import longopt_xlate + print msg + ":" + for opt in self.user_options: + opt_name = opt[0] + if opt_name[-1] == "=": + opt_name = opt_name[0:-1] + if opt_name in self.negative_opt: + opt_name = string.translate(self.negative_opt[opt_name], + longopt_xlate) + val = not getattr(self, opt_name) + else: + opt_name = string.translate(opt_name, longopt_xlate) + val = getattr(self, opt_name) + print " %s: %s" % (opt_name, val) + + + def finalize_unix (self): - def finalize_unix(self): - """Finalizes options for posix platforms.""" if self.install_base is not None or self.install_platbase is not None: if ((self.install_lib is None and self.install_purelib is None and @@ -437,10 +430,10 @@ raise DistutilsPlatformError( "User base directory is not specified") self.install_base = self.install_platbase = self.install_userbase - self.select_scheme("posix_user") + self.select_scheme("unix_user") elif self.home is not None: self.install_base = self.install_platbase = self.home - self.select_scheme("posix_home") + self.select_scheme("unix_home") else: if self.prefix is None: if self.exec_prefix is not None: @@ -456,10 +449,13 @@ self.install_base = self.prefix self.install_platbase = self.exec_prefix - self.select_scheme("posix_prefix") + self.select_scheme("unix_prefix") + + # finalize_unix () + + + def finalize_other (self): # Windows and Mac OS for now - def finalize_other(self): - """Finalizes options for non-posix platforms""" if self.user: if self.install_userbase is None: raise DistutilsPlatformError( @@ -468,7 +464,7 @@ self.select_scheme(os.name + "_user") elif self.home is not None: self.install_base = self.install_platbase = self.home - self.select_scheme("posix_home") + self.select_scheme("unix_home") else: if self.prefix is None: self.prefix = os.path.normpath(sys.prefix) @@ -480,58 +476,61 @@ raise DistutilsPlatformError, \ "I don't know how to install stuff on '%s'" % os.name - def select_scheme(self, name): - """Sets the install directories by applying the install schemes.""" + # finalize_other () + + + def select_scheme (self, name): # it's the caller's problem if they supply a bad name! - scheme = get_paths(name, expand=False) - for key, value in scheme.items(): - if key == 'platinclude': - key = 'headers' - value = os.path.join(value, self.distribution.get_name()) + scheme = INSTALL_SCHEMES[name] + for key in SCHEME_KEYS: attrname = 'install_' + key - if hasattr(self, attrname): - if getattr(self, attrname) is None: - setattr(self, attrname, value) + if getattr(self, attrname) is None: + setattr(self, attrname, scheme[key]) + - def _expand_attrs(self, attrs): + def _expand_attrs (self, attrs): for attr in attrs: val = getattr(self, attr) if val is not None: if os.name == 'posix' or os.name == 'nt': val = os.path.expanduser(val) - val = _subst_vars(val, self.config_vars) + val = subst_vars(val, self.config_vars) setattr(self, attr, val) - def expand_basedirs(self): - """Calls `os.path.expanduser` on install_base, install_platbase and - root.""" - self._expand_attrs(['install_base', 'install_platbase', 'root']) - - def expand_dirs(self): - """Calls `os.path.expanduser` on install dirs.""" - self._expand_attrs(['install_purelib', 'install_platlib', - 'install_lib', 'install_headers', - 'install_scripts', 'install_data',]) - def convert_paths(self, *names): - """Call `convert_path` over `names`.""" + def expand_basedirs (self): + self._expand_attrs(['install_base', + 'install_platbase', + 'root']) + + def expand_dirs (self): + self._expand_attrs(['install_purelib', + 'install_platlib', + 'install_lib', + 'install_headers', + 'install_scripts', + 'install_data',]) + + + def convert_paths (self, *names): for name in names: attr = "install_" + name setattr(self, attr, convert_path(getattr(self, attr))) - def handle_extra_path(self): - """Set `path_file` and `extra_dirs` using `extra_path`.""" + + def handle_extra_path (self): + if self.extra_path is None: self.extra_path = self.distribution.extra_path if self.extra_path is not None: - if isinstance(self.extra_path, str): - self.extra_path = self.extra_path.split(',') + if type(self.extra_path) is StringType: + self.extra_path = string.split(self.extra_path, ',') if len(self.extra_path) == 1: path_file = extra_dirs = self.extra_path[0] elif len(self.extra_path) == 2: - path_file, extra_dirs = self.extra_path + (path_file, extra_dirs) = self.extra_path else: raise DistutilsOptionError, \ ("'extra_path' option must be a list, tuple, or " @@ -540,6 +539,7 @@ # convert to local form in case Unix notation used (as it # should be in setup scripts) extra_dirs = convert_path(extra_dirs) + else: path_file = None extra_dirs = '' @@ -549,14 +549,17 @@ self.path_file = path_file self.extra_dirs = extra_dirs - def change_roots(self, *names): - """Change the install direcories pointed by name using root.""" + # handle_extra_path () + + + def change_roots (self, *names): for name in names: attr = "install_" + name setattr(self, attr, change_root(self.root, getattr(self, attr))) def create_home_path(self): - """Create directories under ~.""" + """Create directories under ~ + """ if not self.user: return home = convert_path(os.path.expanduser("~")) @@ -567,8 +570,8 @@ # -- Command execution methods ------------------------------------- - def run(self): - """Runs the command.""" + def run (self): + # Obviously have to build before we can install if not self.skip_build: self.run_command('build') @@ -611,8 +614,9 @@ "you'll have to change the search path yourself"), self.install_lib) - def create_path_file(self): - """Creates the .pth file""" + # run () + + def create_path_file (self): filename = os.path.join(self.install_libbase, self.path_file + ".pth") if self.install_path_file: @@ -625,8 +629,8 @@ # -- Reporting methods --------------------------------------------- - def get_outputs(self): - """Assembles the outputs of all the sub-commands.""" + def get_outputs (self): + # Assemble the outputs of all the sub-commands. outputs = [] for cmd_name in self.get_sub_commands(): cmd = self.get_finalized_command(cmd_name) @@ -642,8 +646,7 @@ return outputs - def get_inputs(self): - """Returns the inputs of all the sub-commands""" + def get_inputs (self): # XXX gee, this looks familiar ;-( inputs = [] for cmd_name in self.get_sub_commands(): @@ -652,29 +655,25 @@ return inputs + # -- Predicates for sub-command list ------------------------------- - def has_lib(self): - """Returns true if the current distribution has any Python + def has_lib (self): + """Return true if the current distribution has any Python modules to install.""" return (self.distribution.has_pure_modules() or self.distribution.has_ext_modules()) - def has_headers(self): - """Returns true if the current distribution has any headers to - install.""" + def has_headers (self): return self.distribution.has_headers() - def has_scripts(self): - """Returns true if the current distribution has any scripts to. - install.""" + def has_scripts (self): return self.distribution.has_scripts() - def has_data(self): - """Returns true if the current distribution has any data to. - install.""" + def has_data (self): return self.distribution.has_data_files() + # 'sub_commands': a list of commands this command might have to run to # get its work done. See cmd.py for more info. sub_commands = [('install_lib', has_lib), @@ -683,3 +682,5 @@ ('install_data', has_data), ('install_egg_info', lambda self:True), ] + +# class install Modified: python/trunk/Lib/distutils/cygwinccompiler.py ============================================================================== --- python/trunk/Lib/distutils/cygwinccompiler.py (original) +++ python/trunk/Lib/distutils/cygwinccompiler.py Fri Mar 5 01:16:02 2010 @@ -45,18 +45,16 @@ # * mingw gcc 3.2/ld 2.13 works # (ld supports -shared) -__revision__ = "$Id$" +# This module should be kept compatible with Python 2.1. -import os -import sys -import copy -import re -from warnings import warn +__revision__ = "$Id$" +import os,sys,copy +from distutils.ccompiler import gen_preprocess_options, gen_lib_options from distutils.unixccompiler import UnixCCompiler from distutils.file_util import write_file from distutils.errors import DistutilsExecError, CompileError, UnknownFileError -from distutils.util import get_compiler_versions +from distutils import log def get_msvcr(): """Include the appropriate MSVC runtime library if Python was built @@ -81,9 +79,8 @@ raise ValueError("Unknown MS Compiler version %s " % msc_ver) -class CygwinCCompiler(UnixCCompiler): - """ Handles the Cygwin port of the GNU C compiler to Windows. - """ +class CygwinCCompiler (UnixCCompiler): + compiler_type = 'cygwin' obj_extension = ".o" static_lib_extension = ".a" @@ -92,11 +89,11 @@ shared_lib_format = "%s%s" exe_extension = ".exe" - def __init__(self, verbose=0, dry_run=0, force=0): + def __init__ (self, verbose=0, dry_run=0, force=0): - UnixCCompiler.__init__(self, verbose, dry_run, force) + UnixCCompiler.__init__ (self, verbose, dry_run, force) - status, details = check_config_h() + (status, details) = check_config_h() self.debug_print("Python's GCC status: %s (details: %s)" % (status, details)) if status is not CONFIG_H_OK: @@ -107,7 +104,7 @@ % details) self.gcc_version, self.ld_version, self.dllwrap_version = \ - get_compiler_versions() + get_versions() self.debug_print(self.compiler_type + ": gcc %s, ld %s, dllwrap %s\n" % (self.gcc_version, self.ld_version, @@ -151,8 +148,10 @@ # with MSVC 7.0 or later. self.dll_libraries = get_msvcr() + # __init__ () + + def _compile(self, obj, src, ext, cc_args, extra_postargs, pp_opts): - """Compiles the source by spawing GCC and windres if needed.""" if ext == '.rc' or ext == '.res': # gcc needs '.res' and '.rc' compiled to object files !!! try: @@ -166,11 +165,21 @@ except DistutilsExecError, msg: raise CompileError, msg - def link(self, target_desc, objects, output_filename, output_dir=None, - libraries=None, library_dirs=None, runtime_library_dirs=None, - export_symbols=None, debug=0, extra_preargs=None, - extra_postargs=None, build_temp=None, target_lang=None): - """Link the objects.""" + def link (self, + target_desc, + objects, + output_filename, + output_dir=None, + libraries=None, + library_dirs=None, + runtime_library_dirs=None, + export_symbols=None, + debug=0, + extra_preargs=None, + extra_postargs=None, + build_temp=None, + target_lang=None): + # use separate copies, so we can modify the lists extra_preargs = copy.copy(extra_preargs or []) libraries = copy.copy(libraries or []) @@ -235,44 +244,64 @@ if not debug: extra_preargs.append("-s") - UnixCCompiler.link(self, target_desc, objects, output_filename, - output_dir, libraries, library_dirs, + UnixCCompiler.link(self, + target_desc, + objects, + output_filename, + output_dir, + libraries, + library_dirs, runtime_library_dirs, None, # export_symbols, we do this in our def-file - debug, extra_preargs, extra_postargs, build_temp, + debug, + extra_preargs, + extra_postargs, + build_temp, target_lang) + # link () + # -- Miscellaneous methods ----------------------------------------- - def object_filenames(self, source_filenames, strip_dir=0, output_dir=''): - """Adds supports for rc and res files.""" - if output_dir is None: - output_dir = '' + # overwrite the one from CCompiler to support rc and res-files + def object_filenames (self, + source_filenames, + strip_dir=0, + output_dir=''): + if output_dir is None: output_dir = '' obj_names = [] for src_name in source_filenames: # use normcase to make sure '.rc' is really '.rc' and not '.RC' - base, ext = os.path.splitext(os.path.normcase(src_name)) + (base, ext) = os.path.splitext (os.path.normcase(src_name)) if ext not in (self.src_extensions + ['.rc','.res']): raise UnknownFileError, \ - "unknown file type '%s' (from '%s')" % (ext, src_name) + "unknown file type '%s' (from '%s')" % \ + (ext, src_name) if strip_dir: base = os.path.basename (base) - if ext in ('.res', '.rc'): + if ext == '.res' or ext == '.rc': # these need to be compiled to object files - obj_names.append (os.path.join(output_dir, - base + ext + self.obj_extension)) + obj_names.append (os.path.join (output_dir, + base + ext + self.obj_extension)) else: - obj_names.append (os.path.join(output_dir, - base + self.obj_extension)) + obj_names.append (os.path.join (output_dir, + base + self.obj_extension)) return obj_names + # object_filenames () + +# class CygwinCCompiler + + # the same as cygwin plus some additional parameters -class Mingw32CCompiler(CygwinCCompiler): - """ Handles the Mingw32 port of the GNU C compiler to Windows. - """ +class Mingw32CCompiler (CygwinCCompiler): + compiler_type = 'mingw32' - def __init__(self, verbose=0, dry_run=0, force=0): + def __init__ (self, + verbose=0, + dry_run=0, + force=0): CygwinCCompiler.__init__ (self, verbose, dry_run, force) @@ -308,6 +337,10 @@ # with MSVC 7.0 or later. self.dll_libraries = get_msvcr() + # __init__ () + +# class Mingw32CCompiler + # Because these compilers aren't configured in Python's pyconfig.h file by # default, we should at least warn the user if he is using a unmodified # version. @@ -317,16 +350,16 @@ CONFIG_H_UNCERTAIN = "uncertain" def check_config_h(): - """Check if the current Python installation appears amenable to building - extensions with GCC. - - Returns a tuple (status, details), where 'status' is one of the following - constants: - - - CONFIG_H_OK: all is well, go ahead and compile - - CONFIG_H_NOTOK: doesn't look good - - CONFIG_H_UNCERTAIN: not sure -- unable to read pyconfig.h + """Check if the current Python installation (specifically, pyconfig.h) + appears amenable to building extensions with GCC. Returns a tuple + (status, details), where 'status' is one of the following constants: + CONFIG_H_OK + all is well, go ahead and compile + CONFIG_H_NOTOK + doesn't look good + CONFIG_H_UNCERTAIN + not sure -- unable to read pyconfig.h 'details' is a human-readable string explaining the situation. Note there are two ways to conclude "OK": either 'sys.version' contains @@ -337,45 +370,78 @@ # XXX since this function also checks sys.version, it's not strictly a # "pyconfig.h" check -- should probably be renamed... - _sysconfig = __import__('sysconfig') - - # if sys.version contains GCC then python was compiled with GCC, and the - # pyconfig.h file should be OK - if "GCC" in sys.version: - return CONFIG_H_OK, "sys.version mentions 'GCC'" + from distutils import sysconfig + import string + # if sys.version contains GCC then python was compiled with + # GCC, and the pyconfig.h file should be OK + if string.find(sys.version,"GCC") >= 0: + return (CONFIG_H_OK, "sys.version mentions 'GCC'") - # let's see if __GNUC__ is mentioned in python.h - fn = _sysconfig.get_config_h_filename() + fn = sysconfig.get_config_h_filename() try: - with open(fn) as config_h: - if "__GNUC__" in config_h.read(): - return CONFIG_H_OK, "'%s' mentions '__GNUC__'" % fn - else: - return CONFIG_H_NOTOK, "'%s' does not mention '__GNUC__'" % fn + # It would probably better to read single lines to search. + # But we do this only once, and it is fast enough + f = open(fn) + s = f.read() + f.close() + except IOError, exc: + # if we can't read this file, we cannot say it is wrong + # the compiler will complain later about this file as missing return (CONFIG_H_UNCERTAIN, "couldn't read '%s': %s" % (fn, exc.strerror)) -class _Deprecated_SRE_Pattern(object): - def __init__(self, pattern): - self.pattern = pattern - - def __getattr__(self, name): - if name in ('findall', 'finditer', 'match', 'scanner', 'search', - 'split', 'sub', 'subn'): - warn("'distutils.cygwinccompiler.RE_VERSION' is deprecated " - "and will be removed in the next version", DeprecationWarning) - return getattr(self.pattern, name) + else: + # "pyconfig.h" contains an "#ifdef __GNUC__" or something similar + if string.find(s,"__GNUC__") >= 0: + return (CONFIG_H_OK, "'%s' mentions '__GNUC__'" % fn) + else: + return (CONFIG_H_NOTOK, "'%s' does not mention '__GNUC__'" % fn) + -RE_VERSION = _Deprecated_SRE_Pattern(re.compile('(\d+\.\d+(\.\d+)*)')) def get_versions(): """ Try to find out the versions of gcc, ld and dllwrap. - - If not possible it returns None for it. + If not possible it returns None for it. """ - warn("'distutils.cygwinccompiler.get_versions' is deprecated " - "use 'distutils.util.get_compiler_versions' instead", - DeprecationWarning) - - return get_compiler_versions() + from distutils.version import LooseVersion + from distutils.spawn import find_executable + import re + + gcc_exe = find_executable('gcc') + if gcc_exe: + out = os.popen(gcc_exe + ' -dumpversion','r') + out_string = out.read() + out.close() + result = re.search('(\d+\.\d+(\.\d+)*)',out_string) + if result: + gcc_version = LooseVersion(result.group(1)) + else: + gcc_version = None + else: + gcc_version = None + ld_exe = find_executable('ld') + if ld_exe: + out = os.popen(ld_exe + ' -v','r') + out_string = out.read() + out.close() + result = re.search('(\d+\.\d+(\.\d+)*)',out_string) + if result: + ld_version = LooseVersion(result.group(1)) + else: + ld_version = None + else: + ld_version = None + dllwrap_exe = find_executable('dllwrap') + if dllwrap_exe: + out = os.popen(dllwrap_exe + ' --version','r') + out_string = out.read() + out.close() + result = re.search(' (\d+\.\d+(\.\d+)*)',out_string) + if result: + dllwrap_version = LooseVersion(result.group(1)) + else: + dllwrap_version = None + else: + dllwrap_version = None + return (gcc_version, ld_version, dllwrap_version) Modified: python/trunk/Lib/distutils/emxccompiler.py ============================================================================== --- python/trunk/Lib/distutils/emxccompiler.py (original) +++ python/trunk/Lib/distutils/emxccompiler.py Fri Mar 5 01:16:02 2010 @@ -21,13 +21,12 @@ __revision__ = "$Id$" -import os, sys, copy -from warnings import warn - +import os,sys,copy +from distutils.ccompiler import gen_preprocess_options, gen_lib_options from distutils.unixccompiler import UnixCCompiler from distutils.file_util import write_file from distutils.errors import DistutilsExecError, CompileError, UnknownFileError -from distutils.util import get_compiler_versions +from distutils import log class EMXCCompiler (UnixCCompiler): @@ -56,8 +55,8 @@ ("Reason: %s." % details) + "Compiling may fail because of undefined preprocessor macros.") - gcc_version, ld_version, dllwrap_version = get_compiler_versions() - self.gcc_version, self.ld_version = gcc_version, ld_version + (self.gcc_version, self.ld_version) = \ + get_versions() self.debug_print(self.compiler_type + ": gcc %s, ld %s\n" % (self.gcc_version, self.ld_version) ) @@ -294,11 +293,23 @@ """ Try to find out the versions of gcc and ld. If not possible it returns None for it. """ - warn("'distutils.emxccompiler.get_versions' is deprecated " - "use 'distutils.util.get_compiler_versions' instead", - DeprecationWarning) - + from distutils.version import StrictVersion + from distutils.spawn import find_executable + import re + + gcc_exe = find_executable('gcc') + if gcc_exe: + out = os.popen(gcc_exe + ' -dumpversion','r') + out_string = out.read() + out.close() + result = re.search('(\d+\.\d+\.\d+)',out_string) + if result: + gcc_version = StrictVersion(result.group(1)) + else: + gcc_version = None + else: + gcc_version = None # EMX ld has no way of reporting version number, and we use GCC # anyway - so we can link OMF DLLs - gcc_version, ld_version, dllwrap_version = get_compiler_versions() - return gcc_version, None + ld_version = None + return (gcc_version, ld_version) Modified: python/trunk/Lib/distutils/extension.py ============================================================================== --- python/trunk/Lib/distutils/extension.py (original) +++ python/trunk/Lib/distutils/extension.py Fri Mar 5 01:16:02 2010 @@ -5,8 +5,13 @@ __revision__ = "$Id$" -import os -import warnings +import os, string, sys +from types import * + +try: + import warnings +except ImportError: + warnings = None # This class is really only used by the "build_ext" command, so it might # make sense to put it in distutils.command.build_ext. However, that @@ -78,9 +83,6 @@ language : string extension language (i.e. "c", "c++", "objc"). Will be detected from the source extensions if not provided. - optional : boolean - specifies that a build failure in the extension should not abort the - build process, but simply not install the failing extension. """ # When adding arguments to this constructor, be sure to update @@ -99,14 +101,12 @@ swig_opts = None, depends=None, language=None, - optional=None, **kw # To catch unknown keywords ): - if not isinstance(name, str): - raise AssertionError("'name' must be a string") - if not (isinstance(sources, list) and - all(isinstance(v, str) for v in sources)): - raise AssertionError("'sources' must be a list of strings") + assert type(name) is StringType, "'name' must be a string" + assert (type(sources) is ListType and + map(type, sources) == [StringType]*len(sources)), \ + "'sources' must be a list of strings" self.name = name self.sources = sources @@ -123,28 +123,27 @@ self.swig_opts = swig_opts or [] self.depends = depends or [] self.language = language - self.optional = optional # If there are unknown keyword options, warn about them - if len(kw) > 0: - options = [repr(option) for option in kw] - options = ', '.join(sorted(options)) - msg = "Unknown Extension options: %s" % options - warnings.warn(msg) - -def read_setup_file(filename): - """Reads a Setup file and returns Extension instances.""" - warnings.warn('distutils.extensions.read_setup_file is deprecated. ' - 'It will be removed in the next Python release.') - _sysconfig = __import__('sysconfig') - from distutils.sysconfig import (expand_makefile_vars, - _variable_rx) + if len(kw): + L = kw.keys() ; L.sort() + L = map(repr, L) + msg = "Unknown Extension options: " + string.join(L, ', ') + if warnings is not None: + warnings.warn(msg) + else: + sys.stderr.write(msg + '\n') +# class Extension + +def read_setup_file (filename): + from distutils.sysconfig import \ + parse_makefile, expand_makefile_vars, _variable_rx from distutils.text_file import TextFile from distutils.util import split_quoted # First pass over the file to gather "VAR = VALUE" assignments. - vars = _sysconfig._parse_makefile(filename) + vars = parse_makefile(filename) # Second pass to gobble up the real content: lines of the form # ... [ ...] [ ...] [ ...] @@ -164,11 +163,10 @@ file.warn("'%s' lines not handled yet" % line) continue - with warnings.catch_warnings(): - warnings.simplefilter("ignore") - line = expand_makefile_vars(line, vars) - + #print "original line: " + line + line = expand_makefile_vars(line, vars) words = split_quoted(line) + #print "expanded line: " + line # NB. this parses a slightly different syntax than the old # makesetup script: here, there must be exactly one extension per @@ -197,7 +195,7 @@ elif switch == "-I": ext.include_dirs.append(value) elif switch == "-D": - equals = value.find("=") + equals = string.find(value, "=") if equals == -1: # bare "-DFOO" -- no value ext.define_macros.append((value, None)) else: # "-DFOO=blah" @@ -234,4 +232,15 @@ extensions.append(ext) + #print "module:", module + #print "source files:", source_files + #print "cpp args:", cpp_args + #print "lib args:", library_args + + #extensions[module] = { 'sources': source_files, + # 'cpp_args': cpp_args, + # 'lib_args': library_args } + return extensions + +# read_setup_file () Modified: python/trunk/Lib/distutils/sysconfig.py ============================================================================== --- python/trunk/Lib/distutils/sysconfig.py (original) +++ python/trunk/Lib/distutils/sysconfig.py Fri Mar 5 01:16:02 2010 @@ -7,51 +7,59 @@ Written by: Fred L. Drake, Jr. Email: - -**This module has been moved out of Distutils and will be removed from -Python in the next version (3.3)** """ __revision__ = "$Id$" +import os import re -from warnings import warn +import string +import sys -# importing sysconfig from Lib -# to avoid this module to shadow it -_sysconfig = __import__('sysconfig') - -# names defined here to keep backward compatibility -# for APIs that were relocated -get_python_version = _sysconfig.get_python_version -get_config_h_filename = _sysconfig.get_config_h_filename -parse_config_h = _sysconfig.parse_config_h -get_config_vars = _sysconfig.get_config_vars -get_config_var = _sysconfig.get_config_var -from distutils.ccompiler import customize_compiler - -_DEPRECATION_MSG = ("distutils.sysconfig.%s is deprecated. " - "Use the APIs provided by the sysconfig module instead") - -def _get_project_base(): - return _sysconfig._PROJECT_BASE - -project_base = _get_project_base() - -class _DeprecatedBool(int): - def __nonzero__(self): - warn(_DEPRECATION_MSG % 'get_python_version', DeprecationWarning) - return super(_DeprecatedBool, self).__nonzero__() +from distutils.errors import DistutilsPlatformError +# These are needed in a couple of spots, so just compute them once. +PREFIX = os.path.normpath(sys.prefix) +EXEC_PREFIX = os.path.normpath(sys.exec_prefix) + +# Path to the base directory of the project. On Windows the binary may +# live in project/PCBuild9. If we're dealing with an x64 Windows build, +# it'll live in project/PCbuild/amd64. +project_base = os.path.dirname(os.path.abspath(sys.executable)) +if os.name == "nt" and "pcbuild" in project_base[-8:].lower(): + project_base = os.path.abspath(os.path.join(project_base, os.path.pardir)) +# PC/VS7.1 +if os.name == "nt" and "\\pc\\v" in project_base[-10:].lower(): + project_base = os.path.abspath(os.path.join(project_base, os.path.pardir, + os.path.pardir)) +# PC/AMD64 +if os.name == "nt" and "\\pcbuild\\amd64" in project_base[-14:].lower(): + project_base = os.path.abspath(os.path.join(project_base, os.path.pardir, + os.path.pardir)) + +# python_build: (Boolean) if true, we're either building Python or +# building an extension with an un-installed Python, so we use +# different (hard-wired) directories. +# Setup.local is available for Makefile builds including VPATH builds, +# Setup.dist is available on Windows def _python_build(): - return _DeprecatedBool(_sysconfig.is_python_build()) - + for fn in ("Setup.dist", "Setup.local"): + if os.path.isfile(os.path.join(project_base, "Modules", fn)): + return True + return False python_build = _python_build() -def get_python_inc(plat_specific=0, prefix=None): - """This function is deprecated. - Return the directory containing installed Python header files. +def get_python_version(): + """Return a string containing the major and minor Python version, + leaving off the patchlevel. Sample return values could be '1.5' + or '2.2'. + """ + return sys.version[:3] + + +def get_python_inc(plat_specific=0, prefix=None): + """Return the directory containing installed Python header files. If 'plat_specific' is false (the default), this is the path to the non-platform-specific header files, i.e. Python.h and so on; @@ -61,22 +69,36 @@ If 'prefix' is supplied, use it instead of sys.prefix or sys.exec_prefix -- i.e., ignore 'plat_specific'. """ - warn(_DEPRECATION_MSG % 'get_python_inc', DeprecationWarning) - get_path = _sysconfig.get_path - - if prefix is not None: - vars = {'base': prefix} - return get_path('include', vars=vars) - - if not plat_specific: - return get_path('include') + if prefix is None: + prefix = plat_specific and EXEC_PREFIX or PREFIX + if os.name == "posix": + if python_build: + base = os.path.dirname(os.path.abspath(sys.executable)) + if plat_specific: + inc_dir = base + else: + inc_dir = os.path.join(base, "Include") + if not os.path.exists(inc_dir): + inc_dir = os.path.join(os.path.dirname(base), "Include") + return inc_dir + return os.path.join(prefix, "include", "python" + get_python_version()) + elif os.name == "nt": + return os.path.join(prefix, "include") + elif os.name == "mac": + if plat_specific: + return os.path.join(prefix, "Mac", "Include") + else: + return os.path.join(prefix, "Include") + elif os.name == "os2": + return os.path.join(prefix, "Include") else: - return get_path('platinclude') + raise DistutilsPlatformError( + "I don't know where Python installs its C header files " + "on platform '%s'" % os.name) -def get_python_lib(plat_specific=False, standard_lib=False, prefix=None): - """This function is deprecated. - Return the directory containing the Python library (standard or +def get_python_lib(plat_specific=0, standard_lib=0, prefix=None): + """Return the directory containing the Python library (standard or site additions). If 'plat_specific' is true, return the directory containing @@ -89,33 +111,146 @@ If 'prefix' is supplied, use it instead of sys.prefix or sys.exec_prefix -- i.e., ignore 'plat_specific'. """ - warn(_DEPRECATION_MSG % 'get_python_lib', DeprecationWarning) - vars = {} - get_path = _sysconfig.get_path - if prefix is not None: - if plat_specific: - vars['platbase'] = prefix + if prefix is None: + prefix = plat_specific and EXEC_PREFIX or PREFIX + + if os.name == "posix": + libpython = os.path.join(prefix, + "lib", "python" + get_python_version()) + if standard_lib: + return libpython + else: + return os.path.join(libpython, "site-packages") + + elif os.name == "nt": + if standard_lib: + return os.path.join(prefix, "Lib") else: - vars['base'] = prefix + if get_python_version() < "2.2": + return prefix + else: + return os.path.join(prefix, "Lib", "site-packages") - if standard_lib: + elif os.name == "mac": if plat_specific: - return get_path('platstdlib', vars=vars) + if standard_lib: + return os.path.join(prefix, "Lib", "lib-dynload") + else: + return os.path.join(prefix, "Lib", "site-packages") + else: + if standard_lib: + return os.path.join(prefix, "Lib") + else: + return os.path.join(prefix, "Lib", "site-packages") + + elif os.name == "os2": + if standard_lib: + return os.path.join(prefix, "Lib") else: - return get_path('stdlib', vars=vars) + return os.path.join(prefix, "Lib", "site-packages") + else: - if plat_specific: - return get_path('platlib', vars=vars) + raise DistutilsPlatformError( + "I don't know where Python installs its library " + "on platform '%s'" % os.name) + + +def customize_compiler(compiler): + """Do any platform-specific customization of a CCompiler instance. + + Mainly needed on Unix, so we can plug in the information that + varies across Unices and is stored in Python's Makefile. + """ + if compiler.compiler_type == "unix": + (cc, cxx, opt, cflags, ccshared, ldshared, so_ext) = \ + get_config_vars('CC', 'CXX', 'OPT', 'CFLAGS', + 'CCSHARED', 'LDSHARED', 'SO') + + if 'CC' in os.environ: + cc = os.environ['CC'] + if 'CXX' in os.environ: + cxx = os.environ['CXX'] + if 'LDSHARED' in os.environ: + ldshared = os.environ['LDSHARED'] + if 'CPP' in os.environ: + cpp = os.environ['CPP'] else: - return get_path('purelib', vars=vars) + cpp = cc + " -E" # not always + if 'LDFLAGS' in os.environ: + ldshared = ldshared + ' ' + os.environ['LDFLAGS'] + if 'CFLAGS' in os.environ: + cflags = opt + ' ' + os.environ['CFLAGS'] + ldshared = ldshared + ' ' + os.environ['CFLAGS'] + if 'CPPFLAGS' in os.environ: + cpp = cpp + ' ' + os.environ['CPPFLAGS'] + cflags = cflags + ' ' + os.environ['CPPFLAGS'] + ldshared = ldshared + ' ' + os.environ['CPPFLAGS'] + + cc_cmd = cc + ' ' + cflags + compiler.set_executables( + preprocessor=cpp, + compiler=cc_cmd, + compiler_so=cc_cmd + ' ' + ccshared, + compiler_cxx=cxx, + linker_so=ldshared, + linker_exe=cc) + + compiler.shared_lib_extension = so_ext + + +def get_config_h_filename(): + """Return full pathname of installed pyconfig.h file.""" + if python_build: + if os.name == "nt": + inc_dir = os.path.join(project_base, "PC") + else: + inc_dir = project_base + else: + inc_dir = get_python_inc(plat_specific=1) + if get_python_version() < '2.2': + config_h = 'config.h' + else: + # The name of the config.h file changed in 2.2 + config_h = 'pyconfig.h' + return os.path.join(inc_dir, config_h) + def get_makefile_filename(): - """This function is deprecated. + """Return full pathname of installed Makefile from the Python build.""" + if python_build: + return os.path.join(os.path.dirname(sys.executable), "Makefile") + lib_dir = get_python_lib(plat_specific=1, standard_lib=1) + return os.path.join(lib_dir, "config", "Makefile") + + +def parse_config_h(fp, g=None): + """Parse a config.h-style file. - Return full pathname of installed Makefile from the Python build. + A dictionary containing name/value pairs is returned. If an + optional dictionary is passed in as the second argument, it is + used instead of a new dictionary. """ - warn(_DEPRECATION_MSG % 'get_makefile_filename', DeprecationWarning) - return _sysconfig._get_makefile_filename() + if g is None: + g = {} + define_rx = re.compile("#define ([A-Z][A-Za-z0-9_]+) (.*)\n") + undef_rx = re.compile("/[*] #undef ([A-Z][A-Za-z0-9_]+) [*]/\n") + # + while 1: + line = fp.readline() + if not line: + break + m = define_rx.match(line) + if m: + n, v = m.group(1, 2) + try: v = int(v) + except ValueError: pass + g[n] = v + else: + m = undef_rx.match(line) + if m: + g[m.group(1)] = 0 + return g + # Regexes needed for parsing Makefile (and similar syntaxes, # like old-style Setup files). @@ -124,29 +259,91 @@ _findvar2_rx = re.compile(r"\${([A-Za-z][A-Za-z0-9_]*)}") def parse_makefile(fn, g=None): - """This function is deprecated. - - Parse a Makefile-style file. + """Parse a Makefile-style file. A dictionary containing name/value pairs is returned. If an optional dictionary is passed in as the second argument, it is used instead of a new dictionary. """ - warn(_DEPRECATION_MSG % 'parse_makefile', DeprecationWarning) - return _sysconfig._parse_makefile(fn, g) + from distutils.text_file import TextFile + fp = TextFile(fn, strip_comments=1, skip_blanks=1, join_lines=1) -def expand_makefile_vars(s, vars): - """This function is deprecated. + if g is None: + g = {} + done = {} + notdone = {} + + while 1: + line = fp.readline() + if line is None: # eof + break + m = _variable_rx.match(line) + if m: + n, v = m.group(1, 2) + v = v.strip() + # `$$' is a literal `$' in make + tmpv = v.replace('$$', '') + + if "$" in tmpv: + notdone[n] = v + else: + try: + v = int(v) + except ValueError: + # insert literal `$' + done[n] = v.replace('$$', '$') + else: + done[n] = v + + # do variable interpolation here + while notdone: + for name in notdone.keys(): + value = notdone[name] + m = _findvar1_rx.search(value) or _findvar2_rx.search(value) + if m: + n = m.group(1) + found = True + if n in done: + item = str(done[n]) + elif n in notdone: + # get it on a subsequent round + found = False + elif n in os.environ: + # do it like make: fall back to environment + item = os.environ[n] + else: + done[n] = item = "" + if found: + after = value[m.end():] + value = value[:m.start()] + item + after + if "$" in after: + notdone[name] = value + else: + try: value = int(value) + except ValueError: + done[name] = value.strip() + else: + done[name] = value + del notdone[name] + else: + # bogus variable reference; just drop it since we can't deal + del notdone[name] + + fp.close() + + # save the results in the global dictionary + g.update(done) + return g - Expand Makefile-style variables -- "${foo}" or "$(foo)" -- in + +def expand_makefile_vars(s, vars): + """Expand Makefile-style variables -- "${foo}" or "$(foo)" -- in 'string' according to 'vars' (a dictionary mapping variable names to values). Variables not present in 'vars' are silently expanded to the empty string. The variable values in 'vars' should not contain further variable expansions; if 'vars' is the output of 'parse_makefile()', you're fine. Returns a variable-expanded version of 's'. """ - warn('this function will be removed in then next version of Python', - DeprecationWarning) # This algorithm does multiple expansion, so if vars['foo'] contains # "${bar}", it will expand ${foo} to ${bar}, and then expand @@ -162,3 +359,247 @@ else: break return s + + +_config_vars = None + +def _init_posix(): + """Initialize the module as appropriate for POSIX systems.""" + g = {} + # load the installed Makefile: + try: + filename = get_makefile_filename() + parse_makefile(filename, g) + except IOError, msg: + my_msg = "invalid Python installation: unable to open %s" % filename + if hasattr(msg, "strerror"): + my_msg = my_msg + " (%s)" % msg.strerror + + raise DistutilsPlatformError(my_msg) + + # load the installed pyconfig.h: + try: + filename = get_config_h_filename() + parse_config_h(file(filename), g) + except IOError, msg: + my_msg = "invalid Python installation: unable to open %s" % filename + if hasattr(msg, "strerror"): + my_msg = my_msg + " (%s)" % msg.strerror + + raise DistutilsPlatformError(my_msg) + + # On MacOSX we need to check the setting of the environment variable + # MACOSX_DEPLOYMENT_TARGET: configure bases some choices on it so + # it needs to be compatible. + # If it isn't set we set it to the configure-time value + if sys.platform == 'darwin' and 'MACOSX_DEPLOYMENT_TARGET' in g: + cfg_target = g['MACOSX_DEPLOYMENT_TARGET'] + cur_target = os.getenv('MACOSX_DEPLOYMENT_TARGET', '') + if cur_target == '': + cur_target = cfg_target + os.putenv('MACOSX_DEPLOYMENT_TARGET', cfg_target) + elif map(int, cfg_target.split('.')) > map(int, cur_target.split('.')): + my_msg = ('$MACOSX_DEPLOYMENT_TARGET mismatch: now "%s" but "%s" during configure' + % (cur_target, cfg_target)) + raise DistutilsPlatformError(my_msg) + + # On AIX, there are wrong paths to the linker scripts in the Makefile + # -- these paths are relative to the Python source, but when installed + # the scripts are in another directory. + if python_build: + g['LDSHARED'] = g['BLDSHARED'] + + elif get_python_version() < '2.1': + # The following two branches are for 1.5.2 compatibility. + if sys.platform == 'aix4': # what about AIX 3.x ? + # Linker script is in the config directory, not in Modules as the + # Makefile says. + python_lib = get_python_lib(standard_lib=1) + ld_so_aix = os.path.join(python_lib, 'config', 'ld_so_aix') + python_exp = os.path.join(python_lib, 'config', 'python.exp') + + g['LDSHARED'] = "%s %s -bI:%s" % (ld_so_aix, g['CC'], python_exp) + + elif sys.platform == 'beos': + # Linker script is in the config directory. In the Makefile it is + # relative to the srcdir, which after installation no longer makes + # sense. + python_lib = get_python_lib(standard_lib=1) + linkerscript_path = string.split(g['LDSHARED'])[0] + linkerscript_name = os.path.basename(linkerscript_path) + linkerscript = os.path.join(python_lib, 'config', + linkerscript_name) + + # XXX this isn't the right place to do this: adding the Python + # library to the link, if needed, should be in the "build_ext" + # command. (It's also needed for non-MS compilers on Windows, and + # it's taken care of for them by the 'build_ext.get_libraries()' + # method.) + g['LDSHARED'] = ("%s -L%s/lib -lpython%s" % + (linkerscript, PREFIX, get_python_version())) + + global _config_vars + _config_vars = g + + +def _init_nt(): + """Initialize the module as appropriate for NT""" + g = {} + # set basic install directories + g['LIBDEST'] = get_python_lib(plat_specific=0, standard_lib=1) + g['BINLIBDEST'] = get_python_lib(plat_specific=1, standard_lib=1) + + # XXX hmmm.. a normal install puts include files here + g['INCLUDEPY'] = get_python_inc(plat_specific=0) + + g['SO'] = '.pyd' + g['EXE'] = ".exe" + g['VERSION'] = get_python_version().replace(".", "") + g['BINDIR'] = os.path.dirname(os.path.abspath(sys.executable)) + + global _config_vars + _config_vars = g + + +def _init_mac(): + """Initialize the module as appropriate for Macintosh systems""" + g = {} + # set basic install directories + g['LIBDEST'] = get_python_lib(plat_specific=0, standard_lib=1) + g['BINLIBDEST'] = get_python_lib(plat_specific=1, standard_lib=1) + + # XXX hmmm.. a normal install puts include files here + g['INCLUDEPY'] = get_python_inc(plat_specific=0) + + import MacOS + if not hasattr(MacOS, 'runtimemodel'): + g['SO'] = '.ppc.slb' + else: + g['SO'] = '.%s.slb' % MacOS.runtimemodel + + # XXX are these used anywhere? + g['install_lib'] = os.path.join(EXEC_PREFIX, "Lib") + g['install_platlib'] = os.path.join(EXEC_PREFIX, "Mac", "Lib") + + # These are used by the extension module build + g['srcdir'] = ':' + global _config_vars + _config_vars = g + + +def _init_os2(): + """Initialize the module as appropriate for OS/2""" + g = {} + # set basic install directories + g['LIBDEST'] = get_python_lib(plat_specific=0, standard_lib=1) + g['BINLIBDEST'] = get_python_lib(plat_specific=1, standard_lib=1) + + # XXX hmmm.. a normal install puts include files here + g['INCLUDEPY'] = get_python_inc(plat_specific=0) + + g['SO'] = '.pyd' + g['EXE'] = ".exe" + + global _config_vars + _config_vars = g + + +def get_config_vars(*args): + """With no arguments, return a dictionary of all configuration + variables relevant for the current platform. Generally this includes + everything needed to build extensions and install both pure modules and + extensions. On Unix, this means every variable defined in Python's + installed Makefile; on Windows and Mac OS it's a much smaller set. + + With arguments, return a list of values that result from looking up + each argument in the configuration variable dictionary. + """ + global _config_vars + if _config_vars is None: + func = globals().get("_init_" + os.name) + if func: + func() + else: + _config_vars = {} + + # Normalized versions of prefix and exec_prefix are handy to have; + # in fact, these are the standard versions used most places in the + # Distutils. + _config_vars['prefix'] = PREFIX + _config_vars['exec_prefix'] = EXEC_PREFIX + + if sys.platform == 'darwin': + kernel_version = os.uname()[2] # Kernel version (8.4.3) + major_version = int(kernel_version.split('.')[0]) + + if major_version < 8: + # On Mac OS X before 10.4, check if -arch and -isysroot + # are in CFLAGS or LDFLAGS and remove them if they are. + # This is needed when building extensions on a 10.3 system + # using a universal build of python. + for key in ('LDFLAGS', 'BASECFLAGS', 'LDSHARED', + # a number of derived variables. These need to be + # patched up as well. + 'CFLAGS', 'PY_CFLAGS', 'BLDSHARED'): + flags = _config_vars[key] + flags = re.sub('-arch\s+\w+\s', ' ', flags) + flags = re.sub('-isysroot [^ \t]*', ' ', flags) + _config_vars[key] = flags + + else: + + # Allow the user to override the architecture flags using + # an environment variable. + # NOTE: This name was introduced by Apple in OSX 10.5 and + # is used by several scripting languages distributed with + # that OS release. + + if 'ARCHFLAGS' in os.environ: + arch = os.environ['ARCHFLAGS'] + for key in ('LDFLAGS', 'BASECFLAGS', 'LDSHARED', + # a number of derived variables. These need to be + # patched up as well. + 'CFLAGS', 'PY_CFLAGS', 'BLDSHARED'): + + flags = _config_vars[key] + flags = re.sub('-arch\s+\w+\s', ' ', flags) + flags = flags + ' ' + arch + _config_vars[key] = flags + + # If we're on OSX 10.5 or later and the user tries to + # compiles an extension using an SDK that is not present + # on the current machine it is better to not use an SDK + # than to fail. + # + # The major usecase for this is users using a Python.org + # binary installer on OSX 10.6: that installer uses + # the 10.4u SDK, but that SDK is not installed by default + # when you install Xcode. + # + m = re.search('-isysroot\s+(\S+)', _config_vars['CFLAGS']) + if m is not None: + sdk = m.group(1) + if not os.path.exists(sdk): + for key in ('LDFLAGS', 'BASECFLAGS', 'LDSHARED', + # a number of derived variables. These need to be + # patched up as well. + 'CFLAGS', 'PY_CFLAGS', 'BLDSHARED'): + + flags = _config_vars[key] + flags = re.sub('-isysroot\s+\S+(\s|$)', ' ', flags) + _config_vars[key] = flags + + if args: + vals = [] + for name in args: + vals.append(_config_vars.get(name)) + return vals + else: + return _config_vars + +def get_config_var(name): + """Return the value of a single variable using the dictionary + returned by 'get_config_vars()'. Equivalent to + get_config_vars().get(name) + """ + return get_config_vars().get(name) Deleted: python/trunk/Lib/distutils/tests/test_cygwinccompiler.py ============================================================================== --- python/trunk/Lib/distutils/tests/test_cygwinccompiler.py Fri Mar 5 01:16:02 2010 +++ (empty file) @@ -1,111 +0,0 @@ -"""Tests for distutils.cygwinccompiler.""" -import unittest -import sys -import os -import warnings -import sysconfig - -from test.test_support import check_warnings, run_unittest -from test.test_support import captured_stdout - -from distutils import cygwinccompiler -from distutils.cygwinccompiler import (CygwinCCompiler, check_config_h, - CONFIG_H_OK, CONFIG_H_NOTOK, - CONFIG_H_UNCERTAIN, get_versions, - get_msvcr, RE_VERSION) -from distutils.util import get_compiler_versions -from distutils.tests import support - -class CygwinCCompilerTestCase(support.TempdirManager, - unittest.TestCase): - - def setUp(self): - super(CygwinCCompilerTestCase, self).setUp() - self.version = sys.version - self.python_h = os.path.join(self.mkdtemp(), 'python.h') - self.old_get_config_h_filename = sysconfig.get_config_h_filename - sysconfig.get_config_h_filename = self._get_config_h_filename - - def tearDown(self): - sys.version = self.version - sysconfig.get_config_h_filename = self.old_get_config_h_filename - super(CygwinCCompilerTestCase, self).tearDown() - - def _get_config_h_filename(self): - return self.python_h - - def test_check_config_h(self): - - # check_config_h looks for "GCC" in sys.version first - # returns CONFIG_H_OK if found - sys.version = ('2.6.1 (r261:67515, Dec 6 2008, 16:42:21) \n[GCC ' - '4.0.1 (Apple Computer, Inc. build 5370)]') - - self.assertEquals(check_config_h()[0], CONFIG_H_OK) - - # then it tries to see if it can find "__GNUC__" in pyconfig.h - sys.version = 'something without the *CC word' - - # if the file doesn't exist it returns CONFIG_H_UNCERTAIN - self.assertEquals(check_config_h()[0], CONFIG_H_UNCERTAIN) - - # if it exists but does not contain __GNUC__, it returns CONFIG_H_NOTOK - self.write_file(self.python_h, 'xxx') - self.assertEquals(check_config_h()[0], CONFIG_H_NOTOK) - - # and CONFIG_H_OK if __GNUC__ is found - self.write_file(self.python_h, 'xxx __GNUC__ xxx') - self.assertEquals(check_config_h()[0], CONFIG_H_OK) - - def test_get_msvcr(self): - - # none - sys.version = ('2.6.1 (r261:67515, Dec 6 2008, 16:42:21) ' - '\n[GCC 4.0.1 (Apple Computer, Inc. build 5370)]') - self.assertEquals(get_msvcr(), None) - - # MSVC 7.0 - sys.version = ('2.5.1 (r251:54863, Apr 18 2007, 08:51:08) ' - '[MSC v.1300 32 bits (Intel)]') - self.assertEquals(get_msvcr(), ['msvcr70']) - - # MSVC 7.1 - sys.version = ('2.5.1 (r251:54863, Apr 18 2007, 08:51:08) ' - '[MSC v.1310 32 bits (Intel)]') - self.assertEquals(get_msvcr(), ['msvcr71']) - - # VS2005 / MSVC 8.0 - sys.version = ('2.5.1 (r251:54863, Apr 18 2007, 08:51:08) ' - '[MSC v.1400 32 bits (Intel)]') - self.assertEquals(get_msvcr(), ['msvcr80']) - - # VS2008 / MSVC 9.0 - sys.version = ('2.5.1 (r251:54863, Apr 18 2007, 08:51:08) ' - '[MSC v.1500 32 bits (Intel)]') - self.assertEquals(get_msvcr(), ['msvcr90']) - - # unknown - sys.version = ('2.5.1 (r251:54863, Apr 18 2007, 08:51:08) ' - '[MSC v.1999 32 bits (Intel)]') - self.assertRaises(ValueError, get_msvcr) - - - def test_get_version_deprecated(self): - with check_warnings() as w: - warnings.simplefilter("always") - # make sure get_compiler_versions and get_versions - # returns the same thing - self.assertEquals(get_compiler_versions(), get_versions()) - # make sure using get_version() generated a warning - self.assertEquals(len(w.warnings), 1) - # make sure any usage of RE_VERSION will also - # generate a warning, but till works - version = RE_VERSION.search('1.2').group(1) - self.assertEquals(version, '1.2') - self.assertEquals(len(w.warnings), 2) - -def test_suite(): - return unittest.makeSuite(CygwinCCompilerTestCase) - -if __name__ == '__main__': - run_unittest(test_suite()) Deleted: python/trunk/Lib/distutils/tests/test_emxccompiler.py ============================================================================== --- python/trunk/Lib/distutils/tests/test_emxccompiler.py Fri Mar 5 01:16:02 2010 +++ (empty file) @@ -1,33 +0,0 @@ -"""Tests for distutils.emxccompiler.""" -import unittest -import sys -import os -import warnings - -from test.test_support import check_warnings, run_unittest -from test.test_support import captured_stdout - -from distutils.emxccompiler import get_versions -from distutils.util import get_compiler_versions -from distutils.tests import support - -class EmxCCompilerTestCase(support.TempdirManager, - unittest.TestCase): - - def test_get_version_deprecated(self): - with check_warnings() as w: - warnings.simplefilter("always") - # make sure get_compiler_versions and get_versions - # returns the same gcc - gcc, ld, dllwrap = get_compiler_versions() - emx_gcc, emx_ld = get_versions() - self.assertEquals(gcc, emx_gcc) - - # make sure using get_version() generated a warning - self.assertEquals(len(w.warnings), 1) - -def test_suite(): - return unittest.makeSuite(EmxCCompilerTestCase) - -if __name__ == '__main__': - run_unittest(test_suite()) Deleted: python/trunk/Lib/distutils/tests/test_extension.py ============================================================================== --- python/trunk/Lib/distutils/tests/test_extension.py Fri Mar 5 01:16:02 2010 +++ (empty file) @@ -1,78 +0,0 @@ -"""Tests for distutils.extension.""" -import os -import sys -import unittest -import warnings - -from test.test_support import check_warnings -from distutils.extension import read_setup_file, Extension -from distutils.tests.support import capture_warnings - -class ExtensionTestCase(unittest.TestCase): - - @capture_warnings - def test_read_setup_file(self): - # trying to read a Setup file - # (sample extracted from the PyGame project) - setup = os.path.join(os.path.dirname(__file__), 'Setup.sample') - - exts = read_setup_file(setup) - names = [ext.name for ext in exts] - names.sort() - - # here are the extensions read_setup_file should have created - # out of the file - wanted = ['_arraysurfarray', '_camera', '_numericsndarray', - '_numericsurfarray', 'base', 'bufferproxy', 'cdrom', - 'color', 'constants', 'display', 'draw', 'event', - 'fastevent', 'font', 'gfxdraw', 'image', 'imageext', - 'joystick', 'key', 'mask', 'mixer', 'mixer_music', - 'mouse', 'movie', 'overlay', 'pixelarray', 'pypm', - 'rect', 'rwobject', 'scrap', 'surface', 'surflock', - 'time', 'transform'] - - self.assertEquals(names, wanted) - - @unittest.skipIf(sys.flags.optimize >= 2, - "Assertions are omitted with -O2 and above") - def test_extension_init_assertions(self): - # The first argument, which is the name, must be a string. - self.assertRaises(AssertionError, Extension, 1, []) - - # the second argument, which is the list of files, must - # be a list of strings - self.assertRaises(AssertionError, Extension, 'name', 'file') - self.assertRaises(AssertionError, Extension, 'name', ['file', 1]) - - def test_extension_init(self): - ext = Extension('name', []) - self.assertEquals(ext.name, 'name') - - - ext = Extension('name', ['file1', 'file2']) - self.assertEquals(ext.sources, ['file1', 'file2']) - - # others arguments have defaults - for attr in ('include_dirs', 'define_macros', 'undef_macros', - 'library_dirs', 'libraries', 'runtime_library_dirs', - 'extra_objects', 'extra_compile_args', 'extra_link_args', - 'export_symbols', 'swig_opts', 'depends'): - self.assertEquals(getattr(ext, attr), []) - - self.assertEquals(ext.language, None) - self.assertEquals(ext.optional, None) - - # if there are unknown keyword options, warn about them - with check_warnings() as w: - warnings.simplefilter('always') - ext = Extension('name', ['file1', 'file2'], chic=True) - - self.assertEquals(len(w.warnings), 1) - self.assertEquals(str(w.warnings[0].message), - "Unknown Extension options: 'chic'") - -def test_suite(): - return unittest.makeSuite(ExtensionTestCase) - -if __name__ == "__main__": - unittest.main(defaultTest="test_suite") Modified: python/trunk/Lib/distutils/tests/test_install.py ============================================================================== --- python/trunk/Lib/distutils/tests/test_install.py (original) +++ python/trunk/Lib/distutils/tests/test_install.py Fri Mar 5 01:16:02 2010 @@ -1,27 +1,15 @@ """Tests for distutils.command.install.""" import os -import os.path -import sys import unittest -import site -import sysconfig -from sysconfig import (get_scheme_names, _CONFIG_VARS, _INSTALL_SCHEMES, - get_config_var, get_path) - -from test.test_support import captured_stdout from distutils.command.install import install -from distutils.command import install as install_module from distutils.core import Distribution -from distutils.errors import DistutilsOptionError from distutils.tests import support -class InstallTestCase(support.TempdirManager, - support.EnvironGuard, - support.LoggingSilencer, - unittest.TestCase): + +class InstallTestCase(support.TempdirManager, unittest.TestCase): def test_home_installation_scheme(self): # This ensure two things: @@ -38,23 +26,9 @@ build_lib=os.path.join(builddir, "lib"), ) - - - posix_prefix = _INSTALL_SCHEMES['posix_prefix'] - old_posix_prefix = posix_prefix['platinclude'] - posix_prefix['platinclude'] = \ - '{platbase}/include/python{py_version_short}' - - posix_home = _INSTALL_SCHEMES['posix_home'] - old_posix_home = posix_home['platinclude'] - posix_home['platinclude'] = '{base}/include/python' - try: - cmd = install(dist) - cmd.home = destination - cmd.ensure_finalized() - finally: - posix_home['platinclude'] = old_posix_home - posix_prefix['platinclude'] = old_posix_prefix + cmd = install(dist) + cmd.home = destination + cmd.ensure_finalized() self.assertEqual(cmd.install_base, destination) self.assertEqual(cmd.install_platbase, destination) @@ -73,143 +47,6 @@ check_path(cmd.install_scripts, os.path.join(destination, "bin")) check_path(cmd.install_data, destination) - def test_user_site(self): - # site.USER_SITE was introduced in 2.6 - if sys.version < '2.6': - return - - # preparing the environement for the test - self.old_user_base = get_config_var('userbase') - self.old_user_site = get_path('purelib', '%s_user' % os.name) - self.tmpdir = self.mkdtemp() - self.user_base = os.path.join(self.tmpdir, 'B') - self.user_site = os.path.join(self.tmpdir, 'S') - _CONFIG_VARS['userbase'] = self.user_base - scheme = _INSTALL_SCHEMES['%s_user' % os.name] - scheme['purelib'] = self.user_site - - def _expanduser(path): - if path[0] == '~': - path = os.path.normpath(self.tmpdir) + path[1:] - return path - self.old_expand = os.path.expanduser - os.path.expanduser = _expanduser - - try: - # this is the actual test - self._test_user_site() - finally: - _CONFIG_VARS['userbase'] = self.old_user_base - scheme['purelib'] = self.old_user_site - os.path.expanduser = self.old_expand - - def _test_user_site(self): - schemes = get_scheme_names() - for key in ('nt_user', 'posix_user', 'os2_home'): - self.assertTrue(key in schemes) - - dist = Distribution({'name': 'xx'}) - cmd = install(dist) - # making sure the user option is there - options = [name for name, short, lable in - cmd.user_options] - self.assertTrue('user' in options) - - # setting a value - cmd.user = 1 - - # user base and site shouldn't be created yet - self.assertTrue(not os.path.exists(self.user_base)) - self.assertTrue(not os.path.exists(self.user_site)) - - # let's run finalize - cmd.ensure_finalized() - - # now they should - self.assertTrue(os.path.exists(self.user_base)) - self.assertTrue(os.path.exists(self.user_site)) - - self.assertTrue('userbase' in cmd.config_vars) - self.assertTrue('usersite' in cmd.config_vars) - - def test_handle_extra_path(self): - dist = Distribution({'name': 'xx', 'extra_path': 'path,dirs'}) - cmd = install(dist) - - # two elements - cmd.handle_extra_path() - self.assertEquals(cmd.extra_path, ['path', 'dirs']) - self.assertEquals(cmd.extra_dirs, 'dirs') - self.assertEquals(cmd.path_file, 'path') - - # one element - cmd.extra_path = ['path'] - cmd.handle_extra_path() - self.assertEquals(cmd.extra_path, ['path']) - self.assertEquals(cmd.extra_dirs, 'path') - self.assertEquals(cmd.path_file, 'path') - - # none - dist.extra_path = cmd.extra_path = None - cmd.handle_extra_path() - self.assertEquals(cmd.extra_path, None) - self.assertEquals(cmd.extra_dirs, '') - self.assertEquals(cmd.path_file, None) - - # three elements (no way !) - cmd.extra_path = 'path,dirs,again' - self.assertRaises(DistutilsOptionError, cmd.handle_extra_path) - - def test_finalize_options(self): - dist = Distribution({'name': 'xx'}) - cmd = install(dist) - - # must supply either prefix/exec-prefix/home or - # install-base/install-platbase -- not both - cmd.prefix = 'prefix' - cmd.install_base = 'base' - self.assertRaises(DistutilsOptionError, cmd.finalize_options) - - # must supply either home or prefix/exec-prefix -- not both - cmd.install_base = None - cmd.home = 'home' - self.assertRaises(DistutilsOptionError, cmd.finalize_options) - - # can't combine user with with prefix/exec_prefix/home or - # install_(plat)base - cmd.prefix = None - cmd.user = 'user' - self.assertRaises(DistutilsOptionError, cmd.finalize_options) - - def test_record(self): - - install_dir = self.mkdtemp() - pkgdir, dist = self.create_dist() - - dist = Distribution() - cmd = install(dist) - dist.command_obj['install'] = cmd - cmd.root = install_dir - cmd.record = os.path.join(pkgdir, 'RECORD') - cmd.ensure_finalized() - - cmd.run() - - # let's check the RECORD file was created with one - # line (the egg info file) - with open(cmd.record) as f: - self.assertEquals(len(f.readlines()), 1) - - def _test_debug_mode(self): - # this covers the code called when DEBUG is set - old_logs_len = len(self.logs) - install_module.DEBUG = True - try: - with captured_stdout() as stdout: - self.test_record() - finally: - install_module.DEBUG = False - self.assertTrue(len(self.logs) > old_logs_len) def test_suite(): return unittest.makeSuite(InstallTestCase) Modified: python/trunk/Lib/distutils/tests/test_unixccompiler.py ============================================================================== --- python/trunk/Lib/distutils/tests/test_unixccompiler.py (original) +++ python/trunk/Lib/distutils/tests/test_unixccompiler.py Fri Mar 5 01:16:02 2010 @@ -1,8 +1,8 @@ """Tests for distutils.unixccompiler.""" import sys import unittest -import sysconfig +from distutils import sysconfig from distutils.unixccompiler import UnixCCompiler class UnixCCompilerTestCase(unittest.TestCase): @@ -70,7 +70,7 @@ elif v == 'GNULD': return 'yes' sysconfig.get_config_var = gcv - self.assertEqual(self.cc.rpath_foo(), '-Wl,--enable-new-dtags,-R/foo') + self.assertEqual(self.cc.rpath_foo(), '-Wl,-R/foo') # GCC non-GNULD sys.platform = 'bar' @@ -91,7 +91,7 @@ elif v == 'GNULD': return 'yes' sysconfig.get_config_var = gcv - self.assertEqual(self.cc.rpath_foo(), '-Wl,--enable-new-dtags,-R/foo') + self.assertEqual(self.cc.rpath_foo(), '-Wl,-R/foo') # non-GCC GNULD @@ -119,7 +119,7 @@ def gcv(v): return 'xxx' sysconfig.get_config_var = gcv - self.assertEqual(self.cc.rpath_foo(), '-blibpath:/foo') + self.assertEqual(self.cc.rpath_foo(), '-R/foo') def test_suite(): Modified: python/trunk/Lib/distutils/tests/test_util.py ============================================================================== --- python/trunk/Lib/distutils/tests/test_util.py (original) +++ python/trunk/Lib/distutils/tests/test_util.py Fri Mar 5 01:16:02 2010 @@ -1,267 +1,11 @@ """Tests for distutils.util.""" -import os import sys import unittest -from copy import copy -from StringIO import StringIO -import subprocess -from sysconfig import get_config_vars, get_platform from distutils.errors import DistutilsPlatformError, DistutilsByteCompileError -from distutils.util import (convert_path, change_root, - check_environ, split_quoted, strtobool, - rfc822_escape, get_compiler_versions, - _find_exe_version, _MAC_OS_X_LD_VERSION, - byte_compile) -from distutils import util -from distutils.tests import support -from distutils.version import LooseVersion +from distutils.util import byte_compile -class FakePopen(object): - test_class = None - def __init__(self, cmd, shell, stdout, stderr): - self.cmd = cmd.split()[0] - exes = self.test_class._exes - if self.cmd not in exes: - # we don't want to call the system, returning an empty - # output so it doesn't match - self.stdout = StringIO() - self.stderr = StringIO() - else: - self.stdout = StringIO(exes[self.cmd]) - self.stderr = StringIO() - -class UtilTestCase(support.EnvironGuard, unittest.TestCase): - - def setUp(self): - super(UtilTestCase, self).setUp() - # saving the environment - self.name = os.name - self.platform = sys.platform - self.version = sys.version - self.sep = os.sep - self.join = os.path.join - self.isabs = os.path.isabs - self.splitdrive = os.path.splitdrive - #self._config_vars = copy(sysconfig._config_vars) - - # patching os.uname - if hasattr(os, 'uname'): - self.uname = os.uname - self._uname = os.uname() - else: - self.uname = None - self._uname = None - os.uname = self._get_uname - - # patching POpen - self.old_find_executable = util.find_executable - util.find_executable = self._find_executable - self._exes = {} - self.old_popen = subprocess.Popen - self.old_stdout = sys.stdout - self.old_stderr = sys.stderr - FakePopen.test_class = self - subprocess.Popen = FakePopen - - def tearDown(self): - # getting back the environment - os.name = self.name - sys.platform = self.platform - sys.version = self.version - os.sep = self.sep - os.path.join = self.join - os.path.isabs = self.isabs - os.path.splitdrive = self.splitdrive - if self.uname is not None: - os.uname = self.uname - else: - del os.uname - #sysconfig._config_vars = copy(self._config_vars) - util.find_executable = self.old_find_executable - subprocess.Popen = self.old_popen - sys.old_stdout = self.old_stdout - sys.old_stderr = self.old_stderr - super(UtilTestCase, self).tearDown() - - def _set_uname(self, uname): - self._uname = uname - - def _get_uname(self): - return self._uname - - def test_get_platform(self): - platform = util.get_platform() - self.assertEquals(platform, get_platform()) - util.set_platform('MyOwnPlatform') - self.assertEquals('MyOwnPlatform', util.get_platform()) - util.set_platform(platform) - - def test_convert_path(self): - # linux/mac - os.sep = '/' - def _join(path): - return '/'.join(path) - os.path.join = _join - - self.assertEquals(convert_path('/home/to/my/stuff'), - '/home/to/my/stuff') - - # win - os.sep = '\\' - def _join(*path): - return '\\'.join(path) - os.path.join = _join - - self.assertRaises(ValueError, convert_path, '/home/to/my/stuff') - self.assertRaises(ValueError, convert_path, 'home/to/my/stuff/') - - self.assertEquals(convert_path('home/to/my/stuff'), - 'home\\to\\my\\stuff') - self.assertEquals(convert_path('.'), - os.curdir) - - def test_change_root(self): - # linux/mac - os.name = 'posix' - def _isabs(path): - return path[0] == '/' - os.path.isabs = _isabs - def _join(*path): - return '/'.join(path) - os.path.join = _join - - self.assertEquals(change_root('/root', '/old/its/here'), - '/root/old/its/here') - self.assertEquals(change_root('/root', 'its/here'), - '/root/its/here') - - # windows - os.name = 'nt' - def _isabs(path): - return path.startswith('c:\\') - os.path.isabs = _isabs - def _splitdrive(path): - if path.startswith('c:'): - return ('', path.replace('c:', '')) - return ('', path) - os.path.splitdrive = _splitdrive - def _join(*path): - return '\\'.join(path) - os.path.join = _join - - self.assertEquals(change_root('c:\\root', 'c:\\old\\its\\here'), - 'c:\\root\\old\\its\\here') - self.assertEquals(change_root('c:\\root', 'its\\here'), - 'c:\\root\\its\\here') - - # BugsBunny os (it's a great os) - os.name = 'BugsBunny' - self.assertRaises(DistutilsPlatformError, - change_root, 'c:\\root', 'its\\here') - - # XXX platforms to be covered: os2, mac - - def test_check_environ(self): - util._environ_checked = 0 - if 'HOME' in os.environ: - del os.environ['HOME'] - - # posix without HOME - if os.name == 'posix': # this test won't run on windows - check_environ() - import pwd - self.assertEquals(os.environ['HOME'], pwd.getpwuid(os.getuid())[5]) - else: - check_environ() - - self.assertEquals(os.environ['PLAT'], get_platform()) - self.assertEquals(util._environ_checked, 1) - - def test_split_quoted(self): - self.assertEquals(split_quoted('""one"" "two" \'three\' \\four'), - ['one', 'two', 'three', 'four']) - - def test_strtobool(self): - yes = ('y', 'Y', 'yes', 'True', 't', 'true', 'True', 'On', 'on', '1') - no = ('n', 'no', 'f', 'false', 'off', '0', 'Off', 'No', 'N') - - for y in yes: - self.assertTrue(strtobool(y)) - - for n in no: - self.assertTrue(not strtobool(n)) - - def test_rfc822_escape(self): - header = 'I am a\npoor\nlonesome\nheader\n' - res = rfc822_escape(header) - wanted = ('I am a%(8s)spoor%(8s)slonesome%(8s)s' - 'header%(8s)s') % {'8s': '\n'+8*' '} - self.assertEquals(res, wanted) - - def test_find_exe_version(self): - # the ld version scheme under MAC OS is: - # ^@(#)PROGRAM:ld PROJECT:ld64-VERSION - # - # where VERSION is a 2-digit number for major - # revisions. For instance under Leopard, it's - # currently 77 - # - # Dots are used when branching is done. - # - # The SnowLeopard ld64 is currently 95.2.12 - - for output, version in (('@(#)PROGRAM:ld PROJECT:ld64-77', '77'), - ('@(#)PROGRAM:ld PROJECT:ld64-95.2.12', - '95.2.12')): - result = _MAC_OS_X_LD_VERSION.search(output) - self.assertEquals(result.group(1), version) - - def _find_executable(self, name): - if name in self._exes: - return name - return None - - def test_get_compiler_versions(self): - # get_versions calls distutils.spawn.find_executable on - # 'gcc', 'ld' and 'dllwrap' - self.assertEquals(get_compiler_versions(), (None, None, None)) - - # Let's fake we have 'gcc' and it returns '3.4.5' - self._exes['gcc'] = 'gcc (GCC) 3.4.5 (mingw special)\nFSF' - res = get_compiler_versions() - self.assertEquals(str(res[0]), '3.4.5') - - # and let's see what happens when the version - # doesn't match the regular expression - # (\d+\.\d+(\.\d+)*) - self._exes['gcc'] = 'very strange output' - res = get_compiler_versions() - self.assertEquals(res[0], None) - - # same thing for ld - if sys.platform != 'darwin': - self._exes['ld'] = 'GNU ld version 2.17.50 20060824' - res = get_compiler_versions() - self.assertEquals(str(res[1]), '2.17.50') - self._exes['ld'] = '@(#)PROGRAM:ld PROJECT:ld64-77' - res = get_compiler_versions() - self.assertEquals(res[1], None) - else: - self._exes['ld'] = 'GNU ld version 2.17.50 20060824' - res = get_compiler_versions() - self.assertEquals(res[1], None) - self._exes['ld'] = '@(#)PROGRAM:ld PROJECT:ld64-77' - res = get_compiler_versions() - self.assertEquals(str(res[1]), '77') - - # and dllwrap - self._exes['dllwrap'] = 'GNU dllwrap 2.17.50 20060824\nFSF' - res = get_compiler_versions() - self.assertEquals(str(res[2]), '2.17.50') - self._exes['dllwrap'] = 'Cheese Wrap' - res = get_compiler_versions() - self.assertEquals(res[2], None) +class UtilTestCase(unittest.TestCase): def test_dont_write_bytecode(self): # makes sure byte_compile raise a DistutilsError Modified: python/trunk/Lib/distutils/unixccompiler.py ============================================================================== --- python/trunk/Lib/distutils/unixccompiler.py (original) +++ python/trunk/Lib/distutils/unixccompiler.py Fri Mar 5 01:16:02 2010 @@ -18,6 +18,7 @@ import os, sys from types import StringType, NoneType +from distutils import sysconfig from distutils.dep_util import newer from distutils.ccompiler import \ CCompiler, gen_preprocess_options, gen_lib_options @@ -25,7 +26,6 @@ DistutilsExecError, CompileError, LibError, LinkError from distutils import log - # XXX Things not currently handled: # * optimization/debug/warning flags; we just use whatever's in Python's # Makefile and live with it. Is this adequate? If not, we might @@ -75,7 +75,7 @@ if 'ARCHFLAGS' in os.environ and not stripArch: # User specified different -arch flags in the environ, - # see also the sysconfig + # see also distutils.sysconfig compiler_so = compiler_so + os.environ['ARCHFLAGS'].split() if stripSysroot: @@ -276,16 +276,13 @@ # Linkers on different platforms need different options to # specify that directories need to be added to the list of # directories searched for dependencies when a dynamic library - # is sought. GCC on GNU systems (Linux, FreeBSD, ...) has to - # be told to pass the -R option through to the linker, whereas - # other compilers and gcc on other systems just know this. + # is sought. GCC has to be told to pass the -R option through + # to the linker, whereas other compilers just know this. # Other compilers may need something slightly different. At # this time, there's no way to determine this information from # the configuration data stored in the Python installation, so # we use this hack. - _sysconfig = __import__('sysconfig') - - compiler = os.path.basename(_sysconfig.get_config_var("CC")) + compiler = os.path.basename(sysconfig.get_config_var("CC")) if sys.platform[:6] == "darwin": # MacOSX's linker doesn't understand the -R flag at all return "-L" + dir @@ -296,22 +293,8 @@ elif sys.platform[:7] == "irix646" or sys.platform[:6] == "osf1V5": return ["-rpath", dir] elif self._is_gcc(compiler): - # gcc on non-GNU systems does not need -Wl, but can - # use it anyway. Since distutils has always passed in - # -Wl whenever gcc was used in the past it is probably - # safest to keep doing so. - if _sysconfig.get_config_var("GNULD") == "yes": - # GNU ld needs an extra option to get a RUNPATH - # instead of just an RPATH. - return "-Wl,--enable-new-dtags,-R" + dir - else: - return "-Wl,-R" + dir - elif sys.platform[:3] == "aix": - return "-blibpath:" + dir + return "-Wl,-R" + dir else: - # No idea how --enable-new-dtags would be passed on to - # ld if this system was using GNU ld. Don't know if a - # system like this even exists. return "-R" + dir def library_option(self, lib): Modified: python/trunk/Lib/distutils/util.py ============================================================================== --- python/trunk/Lib/distutils/util.py (original) +++ python/trunk/Lib/distutils/util.py Fri Mar 5 01:16:02 2010 @@ -7,40 +7,184 @@ __revision__ = "$Id$" import sys, os, string, re - from distutils.errors import DistutilsPlatformError from distutils.dep_util import newer -from distutils.spawn import spawn, find_executable +from distutils.spawn import spawn from distutils import log -from distutils.version import LooseVersion from distutils.errors import DistutilsByteCompileError -_sysconfig = __import__('sysconfig') -_PLATFORM = None +def get_platform (): + """Return a string that identifies the current platform. This is used + mainly to distinguish platform-specific build directories and + platform-specific built distributions. Typically includes the OS name + and version and the architecture (as supplied by 'os.uname()'), + although the exact information included depends on the OS; eg. for IRIX + the architecture isn't particularly important (IRIX only runs on SGI + hardware), but for Linux the kernel version isn't particularly + important. + + Examples of returned values: + linux-i586 + linux-alpha (?) + solaris-2.6-sun4u + irix-5.3 + irix64-6.2 + + Windows will return one of: + win-amd64 (64bit Windows on AMD64 (aka x86_64, Intel64, EM64T, etc) + win-ia64 (64bit Windows on Itanium) + win32 (all others - specifically, sys.platform is returned) + + For other non-POSIX platforms, currently just returns 'sys.platform'. + """ + if os.name == 'nt': + # sniff sys.version for architecture. + prefix = " bit (" + i = string.find(sys.version, prefix) + if i == -1: + return sys.platform + j = string.find(sys.version, ")", i) + look = sys.version[i+len(prefix):j].lower() + if look=='amd64': + return 'win-amd64' + if look=='itanium': + return 'win-ia64' + return sys.platform + + if os.name != "posix" or not hasattr(os, 'uname'): + # XXX what about the architecture? NT is Intel or Alpha, + # Mac OS is M68k or PPC, etc. + return sys.platform + + # Try to distinguish various flavours of Unix + + (osname, host, release, version, machine) = os.uname() + + # Convert the OS name to lowercase, remove '/' characters + # (to accommodate BSD/OS), and translate spaces (for "Power Macintosh") + osname = string.lower(osname) + osname = string.replace(osname, '/', '') + machine = string.replace(machine, ' ', '_') + machine = string.replace(machine, '/', '-') + + if osname[:5] == "linux": + # At least on Linux/Intel, 'machine' is the processor -- + # i386, etc. + # XXX what about Alpha, SPARC, etc? + return "%s-%s" % (osname, machine) + elif osname[:5] == "sunos": + if release[0] >= "5": # SunOS 5 == Solaris 2 + osname = "solaris" + release = "%d.%s" % (int(release[0]) - 3, release[2:]) + # fall through to standard osname-release-machine representation + elif osname[:4] == "irix": # could be "irix64"! + return "%s-%s" % (osname, release) + elif osname[:3] == "aix": + return "%s-%s.%s" % (osname, version, release) + elif osname[:6] == "cygwin": + osname = "cygwin" + rel_re = re.compile (r'[\d.]+') + m = rel_re.match(release) + if m: + release = m.group() + elif osname[:6] == "darwin": + # + # For our purposes, we'll assume that the system version from + # distutils' perspective is what MACOSX_DEPLOYMENT_TARGET is set + # to. This makes the compatibility story a bit more sane because the + # machine is going to compile and link as if it were + # MACOSX_DEPLOYMENT_TARGET. + from distutils.sysconfig import get_config_vars + cfgvars = get_config_vars() + + macver = os.environ.get('MACOSX_DEPLOYMENT_TARGET') + if not macver: + macver = cfgvars.get('MACOSX_DEPLOYMENT_TARGET') + + if 1: + # Always calculate the release of the running machine, + # needed to determine if we can build fat binaries or not. + + macrelease = macver + # Get the system version. Reading this plist is a documented + # way to get the system version (see the documentation for + # the Gestalt Manager) + try: + f = open('/System/Library/CoreServices/SystemVersion.plist') + except IOError: + # We're on a plain darwin box, fall back to the default + # behaviour. + pass + else: + m = re.search( + r'ProductUserVisibleVersion\s*' + + r'(.*?)', f.read()) + f.close() + if m is not None: + macrelease = '.'.join(m.group(1).split('.')[:2]) + # else: fall back to the default behaviour + + if not macver: + macver = macrelease + + if macver: + from distutils.sysconfig import get_config_vars + release = macver + osname = "macosx" + + if (macrelease + '.') >= '10.4.' and \ + '-arch' in get_config_vars().get('CFLAGS', '').strip(): + # The universal build will build fat binaries, but not on + # systems before 10.4 + # + # Try to detect 4-way universal builds, those have machine-type + # 'universal' instead of 'fat'. + + machine = 'fat' + cflags = get_config_vars().get('CFLAGS') + + archs = re.findall('-arch\s+(\S+)', cflags) + archs.sort() + archs = tuple(archs) + + if len(archs) == 1: + machine = archs[0] + elif archs == ('i386', 'ppc'): + machine = 'fat' + elif archs == ('i386', 'x86_64'): + machine = 'intel' + elif archs == ('i386', 'ppc', 'x86_64'): + machine = 'fat3' + elif archs == ('ppc64', 'x86_64'): + machine = 'fat64' + elif archs == ('i386', 'ppc', 'ppc64', 'x86_64'): + machine = 'universal' + else: + raise ValueError( + "Don't know machine value for archs=%r"%(archs,)) + + elif machine == 'i386': + # On OSX the machine type returned by uname is always the + # 32-bit variant, even if the executable architecture is + # the 64-bit variant + if sys.maxint >= 2**32: + machine = 'x86_64' -def get_platform(): - """Return a string that identifies the current platform. + elif machine in ('PowerPC', 'Power_Macintosh'): + # Pick a sane name for the PPC architecture. + machine = 'ppc' - By default, will return the value returned by sysconfig.get_platform(), - but it can be changed by calling set_platform(). - """ - global _PLATFORM - if _PLATFORM is None: - _PLATFORM = _sysconfig.get_platform() - return _PLATFORM + # See 'i386' case + if sys.maxint >= 2**32: + machine = 'ppc64' -def set_platform(identifier): - """Sets the platform string identifier returned by get_platform(). + return "%s-%s-%s" % (osname, release, machine) - Note that this change doesn't impact the value returned by - sysconfig.get_platform() and is local to Distutils - """ - global _PLATFORM - _PLATFORM = identifier +# get_platform () -def convert_path(pathname): - """Return 'pathname' as a name that will work on the native filesystem. +def convert_path (pathname): + """Return 'pathname' as a name that will work on the native filesystem, i.e. split it on '/' and put it back together again using the current directory separator. Needed because filenames in the setup script are always supplied in Unix style, and have to be converted to the local @@ -53,23 +197,23 @@ if not pathname: return pathname if pathname[0] == '/': - raise ValueError("path '%s' cannot be absolute" % pathname) + raise ValueError, "path '%s' cannot be absolute" % pathname if pathname[-1] == '/': - raise ValueError("path '%s' cannot end with '/'" % pathname) + raise ValueError, "path '%s' cannot end with '/'" % pathname - paths = pathname.split('/') + paths = string.split(pathname, '/') while '.' in paths: paths.remove('.') if not paths: return os.curdir - return os.path.join(*paths) + return apply(os.path.join, paths) +# convert_path () -def change_root(new_root, pathname): - """Return 'pathname' with 'new_root' prepended. - If 'pathname' is relative, this is equivalent to - "os.path.join(new_root,pathname)". +def change_root (new_root, pathname): + """Return 'pathname' with 'new_root' prepended. If 'pathname' is + relative, this is equivalent to "os.path.join(new_root,pathname)". Otherwise, it requires making 'pathname' relative and then joining the two, which is tricky on DOS/Windows and Mac OS. """ @@ -96,20 +240,19 @@ return os.path.join(new_root, pathname) else: # Chop off volume name from start of path - elements = pathname.split(":", 1) + elements = string.split(pathname, ":", 1) pathname = ":" + elements[1] return os.path.join(new_root, pathname) else: - raise DistutilsPlatformError("nothing known about " - "platform '%s'" % os.name) + raise DistutilsPlatformError, \ + "nothing known about platform '%s'" % os.name -_environ_checked = 0 - -def check_environ(): - """Ensure that 'os.environ' has all the environment variables needed. - We guarantee that users can use in config files, command-line options, +_environ_checked = 0 +def check_environ (): + """Ensure that 'os.environ' has all the environment variables we + guarantee that users can use in config files, command-line options, etc. Currently this includes: HOME - user's home directory (Unix only) PLAT - description of the current platform, including hardware @@ -124,14 +267,14 @@ os.environ['HOME'] = pwd.getpwuid(os.getuid())[5] if 'PLAT' not in os.environ: - os.environ['PLAT'] = _sysconfig.get_platform() + os.environ['PLAT'] = get_platform() _environ_checked = 1 -def subst_vars(s, local_vars): - """Perform shell/Perl-style variable substitution on 'string'. - Every occurrence of '$' followed by a name is considered a variable, and +def subst_vars (s, local_vars): + """Perform shell/Perl-style variable substitution on 'string'. Every + occurrence of '$' followed by a name is considered a variable, and variable is substituted by the value found in the 'local_vars' dictionary, or in 'os.environ' if it's not in 'local_vars'. 'os.environ' is first checked/augmented to guarantee that it contains @@ -149,13 +292,14 @@ try: return re.sub(r'\$([a-zA-Z_][a-zA-Z_0-9]*)', _subst, s) except KeyError, var: - raise ValueError("invalid variable '$%s'" % var) + raise ValueError, "invalid variable '$%s'" % var -def grok_environment_error(exc, prefix="error: "): - """Generate a useful error message from an EnvironmentError. +# subst_vars () - This will generate an IOError or an OSError exception object. - Handles Python 1.5.1 and 1.5.2 styles, and + +def grok_environment_error (exc, prefix="error: "): + """Generate a useful error message from an EnvironmentError (IOError or + OSError) exception object. Handles Python 1.5.1 and 1.5.2 styles, and does what it can to deal with exception objects that don't have a filename (which happens when the error is due to a two-file operation, such as 'rename()' or 'link()'. Returns the error message as a string @@ -174,20 +318,18 @@ return error + # Needed by 'split_quoted()' _wordchars_re = _squote_re = _dquote_re = None - def _init_regex(): global _wordchars_re, _squote_re, _dquote_re _wordchars_re = re.compile(r'[^\\\'\"%s ]*' % string.whitespace) _squote_re = re.compile(r"'(?:[^'\\]|\\.)*'") _dquote_re = re.compile(r'"(?:[^"\\]|\\.)*"') -def split_quoted(s): +def split_quoted (s): """Split a string up according to Unix shell-like rules for quotes and - backslashes. - - In short: words are delimited by spaces, as long as those + backslashes. In short: words are delimited by spaces, as long as those spaces are not escaped by a backslash, or inside a quoted string. Single and double quotes are equivalent, and the quote characters can be backslash-escaped. The backslash is stripped from any two-character @@ -195,12 +337,13 @@ characters are stripped from any quoted string. Returns a list of words. """ + # This is a nice algorithm for splitting up a single string, since it # doesn't require character-by-character examination. It was a little # bit of a brain-bender to get it working right, though... if _wordchars_re is None: _init_regex() - s = s.strip() + s = string.strip(s) words = [] pos = 0 @@ -213,7 +356,7 @@ if s[end] in string.whitespace: # unescaped, unquoted whitespace: now words.append(s[:end]) # we definitely have a word delimiter - s = s[end:].lstrip() + s = string.lstrip(s[end:]) pos = 0 elif s[end] == '\\': # preserve whatever is being escaped; @@ -227,11 +370,12 @@ elif s[end] == '"': # slurp doubly-quoted string m = _dquote_re.match(s, end) else: - raise RuntimeError("this can't happen " - "(bad char '%c')" % s[end]) + raise RuntimeError, \ + "this can't happen (bad char '%c')" % s[end] if m is None: - raise ValueError("bad string (mismatched %s quotes?)" % s[end]) + raise ValueError, \ + "bad string (mismatched %s quotes?)" % s[end] (beg, end) = m.span() s = s[:beg] + s[beg+1:end-1] + s[end:] @@ -243,12 +387,13 @@ return words +# split_quoted () -def execute(func, args, msg=None, verbose=0, dry_run=0): - """Perform some action that affects the outside world. - eg. by writing to the filesystem). Such actions are special because - they are disabled by the 'dry_run' flag. This method takes care of all +def execute (func, args, msg=None, verbose=0, dry_run=0): + """Perform some action that affects the outside world (eg. by + writing to the filesystem). Such actions are special because they + are disabled by the 'dry_run' flag. This method takes care of all that bureaucracy for you; all you have to do is supply the function to call and an argument tuple for it (to embody the "external action" being performed), and an optional message to @@ -261,17 +406,17 @@ log.info(msg) if not dry_run: - func(*args) + apply(func, args) -def strtobool(val): +def strtobool (val): """Convert a string representation of truth to true (1) or false (0). True values are 'y', 'yes', 't', 'true', 'on', and '1'; false values are 'n', 'no', 'f', 'false', 'off', and '0'. Raises ValueError if 'val' is anything else. """ - val = val.lower() + val = string.lower(val) if val in ('y', 'yes', 't', 'true', 'on', '1'): return 1 elif val in ('n', 'no', 'f', 'false', 'off', '0'): @@ -280,13 +425,15 @@ raise ValueError, "invalid truth value %r" % (val,) -def byte_compile(py_files, optimize=0, force=0, prefix=None, base_dir=None, - verbose=1, dry_run=0, direct=None): +def byte_compile (py_files, + optimize=0, force=0, + prefix=None, base_dir=None, + verbose=1, dry_run=0, + direct=None): """Byte-compile a collection of Python source files to either .pyc - or .pyo files in the same directory. - - 'py_files' is a list of files to compile; any files that don't end in - ".py" are silently skipped. 'optimize' must be one of the following: + or .pyo files in the same directory. 'py_files' is a list of files + to compile; any files that don't end in ".py" are silently skipped. + 'optimize' must be one of the following: 0 - don't optimize (generate .pyc) 1 - normal optimization (like "python -O") 2 - extra optimization (like "python -OO") @@ -363,7 +510,7 @@ #if prefix: # prefix = os.path.abspath(prefix) - script.write(",\n".join(map(repr, py_files)) + "]\n") + script.write(string.join(map(repr, py_files), ",\n") + "]\n") script.write(""" byte_compile(files, optimize=%r, force=%r, prefix=%r, base_dir=%r, @@ -402,8 +549,9 @@ dfile = file if prefix: if file[:len(prefix)] != prefix: - raise ValueError("invalid prefix: filename %r doesn't " - "start with %r" % (file, prefix)) + raise ValueError, \ + ("invalid prefix: filename %r doesn't start with %r" + % (file, prefix)) dfile = dfile[len(prefix):] if base_dir: dfile = os.path.join(base_dir, dfile) @@ -418,61 +566,12 @@ log.debug("skipping byte-compilation of %s to %s", file, cfile_base) +# byte_compile () -def rfc822_escape(header): +def rfc822_escape (header): """Return a version of the string escaped for inclusion in an RFC-822 header, by ensuring there are 8 spaces space after each newline. """ - lines = header.split('\n') - sep = '\n' + 8 * ' ' - return sep.join(lines) - -_RE_VERSION = re.compile('(\d+\.\d+(\.\d+)*)') -_MAC_OS_X_LD_VERSION = re.compile('^@\(#\)PROGRAM:ld PROJECT:ld64-((\d+)(\.\d+)*)') - -def _find_ld_version(): - """Finds the ld version. The version scheme differs under Mac OSX.""" - if sys.platform == 'darwin': - return _find_exe_version('ld -v', _MAC_OS_X_LD_VERSION) - else: - return _find_exe_version('ld -v') - -def _find_exe_version(cmd, pattern=_RE_VERSION): - """Find the version of an executable by running `cmd` in the shell. - - `pattern` is a compiled regular expression. If not provided, default - to _RE_VERSION. If the command is not found, or the output does not - match the mattern, returns None. - """ - from subprocess import Popen, PIPE - executable = cmd.split()[0] - if find_executable(executable) is None: - return None - pipe = Popen(cmd, shell=True, stdout=PIPE, stderr=PIPE) - try: - stdout, stderr = pipe.stdout.read(), pipe.stderr.read() - finally: - pipe.stdout.close() - pipe.stderr.close() - # some commands like ld under MacOS X, will give the - # output in the stderr, rather than stdout. - if stdout != '': - out_string = stdout - else: - out_string = stderr - - result = pattern.search(out_string) - if result is None: - return None - return LooseVersion(result.group(1)) - -def get_compiler_versions(): - """Returns a tuple providing the versions of gcc, ld and dllwrap - - For each command, if a command is not found, None is returned. - Otherwise a LooseVersion instance is returned. - """ - gcc = _find_exe_version('gcc -dumpversion') - ld = _find_ld_version() - dllwrap = _find_exe_version('dllwrap --version') - return gcc, ld, dllwrap + lines = string.split(header, '\n') + header = string.join(lines, '\n' + 8*' ') + return header From python-checkins at python.org Fri Mar 5 01:29:38 2010 From: python-checkins at python.org (tarek.ziade) Date: Fri, 5 Mar 2010 01:29:38 +0100 (CET) Subject: [Python-checkins] r78667 - python/trunk/setup.py Message-ID: <20100305002938.C0F2DEE982@mail.python.org> Author: tarek.ziade Date: Fri Mar 5 01:29:38 2010 New Revision: 78667 Log: reverted the usage of compiler_obj in Python's setup.py Modified: python/trunk/setup.py Modified: python/trunk/setup.py ============================================================================== --- python/trunk/setup.py (original) +++ python/trunk/setup.py Fri Mar 5 01:29:38 2010 @@ -187,7 +187,7 @@ if compiler is not None: (ccshared,cflags) = sysconfig.get_config_vars('CCSHARED','CFLAGS') args['compiler_so'] = compiler + ' ' + ccshared + ' ' + cflags - self.compiler_obj.set_executables(**args) + self.compiler.set_executables(**args) build_ext.build_extensions(self) @@ -302,8 +302,8 @@ def detect_modules(self): # Ensure that /usr/local is always used - add_dir_to_list(self.compiler_obj.library_dirs, '/usr/local/lib') - add_dir_to_list(self.compiler_obj.include_dirs, '/usr/local/include') + add_dir_to_list(self.compiler.library_dirs, '/usr/local/lib') + add_dir_to_list(self.compiler.include_dirs, '/usr/local/include') # Add paths specified in the environment variables LDFLAGS and # CPPFLAGS for header and library files. @@ -312,9 +312,9 @@ # the environment variable is not set even though the value were passed # into configure and stored in the Makefile (issue found on OS X 10.3). for env_var, arg_name, dir_list in ( - ('LDFLAGS', '-R', self.compiler_obj.runtime_library_dirs), - ('LDFLAGS', '-L', self.compiler_obj.library_dirs), - ('CPPFLAGS', '-I', self.compiler_obj.include_dirs)): + ('LDFLAGS', '-R', self.compiler.runtime_library_dirs), + ('LDFLAGS', '-L', self.compiler.library_dirs), + ('CPPFLAGS', '-I', self.compiler.include_dirs)): env_val = sysconfig.get_config_var(env_var) if env_val: # To prevent optparse from raising an exception about any @@ -340,9 +340,9 @@ add_dir_to_list(dir_list, directory) if os.path.normpath(sys.prefix) != '/usr': - add_dir_to_list(self.compiler_obj.library_dirs, + add_dir_to_list(self.compiler.library_dirs, sysconfig.get_config_var("LIBDIR")) - add_dir_to_list(self.compiler_obj.include_dirs, + add_dir_to_list(self.compiler.include_dirs, sysconfig.get_config_var("INCLUDEDIR")) try: @@ -353,11 +353,11 @@ # lib_dirs and inc_dirs are used to search for files; # if a file is found in one of those directories, it can # be assumed that no additional -I,-L directives are needed. - lib_dirs = self.compiler_obj.library_dirs + [ + lib_dirs = self.compiler.library_dirs + [ '/lib64', '/usr/lib64', '/lib', '/usr/lib', ] - inc_dirs = self.compiler_obj.include_dirs + ['/usr/include'] + inc_dirs = self.compiler.include_dirs + ['/usr/include'] exts = [] missing = [] @@ -549,7 +549,7 @@ missing.extend(['imageop']) # readline - do_readline = self.compiler_obj.find_library_file(lib_dirs, 'readline') + do_readline = self.compiler.find_library_file(lib_dirs, 'readline') if platform == 'darwin': os_release = int(os.uname()[2].split('.')[0]) if os_release < 9: @@ -570,15 +570,15 @@ readline_extra_link_args = () readline_libs = ['readline'] - if self.compiler_obj.find_library_file(lib_dirs, + if self.compiler.find_library_file(lib_dirs, 'ncursesw'): readline_libs.append('ncursesw') - elif self.compiler_obj.find_library_file(lib_dirs, + elif self.compiler.find_library_file(lib_dirs, 'ncurses'): readline_libs.append('ncurses') - elif self.compiler_obj.find_library_file(lib_dirs, 'curses'): + elif self.compiler.find_library_file(lib_dirs, 'curses'): readline_libs.append('curses') - elif self.compiler_obj.find_library_file(lib_dirs + + elif self.compiler.find_library_file(lib_dirs + ['/usr/lib/termcap'], 'termcap'): readline_libs.append('termcap') @@ -592,7 +592,7 @@ if platform not in ['mac']: # crypt module. - if self.compiler_obj.find_library_file(lib_dirs, 'crypt'): + if self.compiler.find_library_file(lib_dirs, 'crypt'): libs = ['crypt'] else: libs = [] @@ -619,7 +619,7 @@ ['/usr/kerberos/include']) if krb5_h: ssl_incs += krb5_h - ssl_libs = find_library_file(self.compiler_obj, 'ssl',lib_dirs, + ssl_libs = find_library_file(self.compiler, 'ssl',lib_dirs, ['/usr/local/ssl/lib', '/usr/contrib/ssl/lib/' ] ) @@ -849,7 +849,7 @@ for dblib in (('db-%d.%d' % db_ver), ('db%d%d' % db_ver), ('db%d' % db_ver[0])): - dblib_file = self.compiler_obj.find_library_file( + dblib_file = self.compiler.find_library_file( db_dirs_to_check + lib_dirs, dblib ) if dblib_file: dblib_dir = [ os.path.abspath(os.path.dirname(dblib_file)) ] @@ -933,7 +933,7 @@ os.path.join(sqlite_incdir, '..', '..', 'lib64'), os.path.join(sqlite_incdir, '..', '..', 'lib'), ] - sqlite_libfile = self.compiler_obj.find_library_file( + sqlite_libfile = self.compiler.find_library_file( sqlite_dirs_to_check + lib_dirs, 'sqlite3') if sqlite_libfile: sqlite_libdir = [os.path.abspath(os.path.dirname(sqlite_libfile))] @@ -1024,7 +1024,7 @@ if cand == "ndbm": if find_file("ndbm.h", inc_dirs, []) is not None: # Some systems have -lndbm, others don't - if self.compiler_obj.find_library_file(lib_dirs, + if self.compiler.find_library_file(lib_dirs, 'ndbm'): ndbm_libs = ['ndbm'] else: @@ -1038,9 +1038,9 @@ break elif cand == "gdbm": - if self.compiler_obj.find_library_file(lib_dirs, 'gdbm'): + if self.compiler.find_library_file(lib_dirs, 'gdbm'): gdbm_libs = ['gdbm'] - if self.compiler_obj.find_library_file(lib_dirs, + if self.compiler.find_library_file(lib_dirs, 'gdbm_compat'): gdbm_libs.append('gdbm_compat') if find_file("gdbm/ndbm.h", inc_dirs, []) is not None: @@ -1081,7 +1081,7 @@ # Anthony Baxter's gdbm module. GNU dbm(3) will require -lgdbm: if ('gdbm' in dbm_order and - self.compiler_obj.find_library_file(lib_dirs, 'gdbm')): + self.compiler.find_library_file(lib_dirs, 'gdbm')): exts.append( Extension('gdbm', ['gdbmmodule.c'], libraries = ['gdbm'] ) ) else: @@ -1100,7 +1100,7 @@ # Sun yellow pages. Some systems have the functions in libc. if (platform not in ['cygwin', 'atheos', 'qnx6'] and find_file('rpcsvc/yp_prot.h', inc_dirs, []) is not None): - if (self.compiler_obj.find_library_file(lib_dirs, 'nsl')): + if (self.compiler.find_library_file(lib_dirs, 'nsl')): libs = ['nsl'] else: libs = [] @@ -1114,24 +1114,24 @@ # Curses support, requiring the System V version of curses, often # provided by the ncurses library. panel_library = 'panel' - if (self.compiler_obj.find_library_file(lib_dirs, 'ncursesw')): + if (self.compiler.find_library_file(lib_dirs, 'ncursesw')): curses_libs = ['ncursesw'] # Bug 1464056: If _curses.so links with ncursesw, # _curses_panel.so must link with panelw. panel_library = 'panelw' exts.append( Extension('_curses', ['_cursesmodule.c'], libraries = curses_libs) ) - elif (self.compiler_obj.find_library_file(lib_dirs, 'ncurses')): + elif (self.compiler.find_library_file(lib_dirs, 'ncurses')): curses_libs = ['ncurses'] exts.append( Extension('_curses', ['_cursesmodule.c'], libraries = curses_libs) ) - elif (self.compiler_obj.find_library_file(lib_dirs, 'curses') + elif (self.compiler.find_library_file(lib_dirs, 'curses') and platform != 'darwin'): # OSX has an old Berkeley curses, not good enough for # the _curses module. - if (self.compiler_obj.find_library_file(lib_dirs, 'terminfo')): + if (self.compiler.find_library_file(lib_dirs, 'terminfo')): curses_libs = ['curses', 'terminfo'] - elif (self.compiler_obj.find_library_file(lib_dirs, 'termcap')): + elif (self.compiler.find_library_file(lib_dirs, 'termcap')): curses_libs = ['curses', 'termcap'] else: curses_libs = ['curses'] @@ -1143,7 +1143,7 @@ # If the curses module is enabled, check for the panel module if (module_enabled(exts, '_curses') and - self.compiler_obj.find_library_file(lib_dirs, panel_library)): + self.compiler.find_library_file(lib_dirs, panel_library)): exts.append( Extension('_curses_panel', ['_curses_panel.c'], libraries = [panel_library] + curses_libs) ) else: @@ -1176,7 +1176,7 @@ version = line.split()[2] break if version >= version_req: - if (self.compiler_obj.find_library_file(lib_dirs, 'z')): + if (self.compiler.find_library_file(lib_dirs, 'z')): if sys.platform == "darwin": zlib_extra_link_args = ('-Wl,-search_paths_first',) else: @@ -1208,7 +1208,7 @@ extra_link_args = extra_link_args) ) # Gustavo Niemeyer's bz2 module. - if (self.compiler_obj.find_library_file(lib_dirs, 'bz2')): + if (self.compiler.find_library_file(lib_dirs, 'bz2')): if sys.platform == "darwin": bz2_extra_link_args = ('-Wl,-search_paths_first',) else: @@ -1571,9 +1571,9 @@ tcllib = tklib = tcl_includes = tk_includes = None for version in ['8.6', '86', '8.5', '85', '8.4', '84', '8.3', '83', '8.2', '82', '8.1', '81', '8.0', '80']: - tklib = self.compiler_obj.find_library_file(lib_dirs, + tklib = self.compiler.find_library_file(lib_dirs, 'tk' + version) - tcllib = self.compiler_obj.find_library_file(lib_dirs, + tcllib = self.compiler.find_library_file(lib_dirs, 'tcl' + version) if tklib and tcllib: # Exit the loop when we've found the Tcl/Tk libraries @@ -1632,11 +1632,11 @@ return # Check for BLT extension - if self.compiler_obj.find_library_file(lib_dirs + added_lib_dirs, + if self.compiler.find_library_file(lib_dirs + added_lib_dirs, 'BLT8.0'): defs.append( ('WITH_BLT', 1) ) libs.append('BLT8.0') - elif self.compiler_obj.find_library_file(lib_dirs + added_lib_dirs, + elif self.compiler.find_library_file(lib_dirs + added_lib_dirs, 'BLT'): defs.append( ('WITH_BLT', 1) ) libs.append('BLT') @@ -1691,7 +1691,7 @@ ]] # Add .S (preprocessed assembly) to C compiler source extensions. - self.compiler_obj.src_extensions.append('.S') + self.compiler.src_extensions.append('.S') include_dirs = [os.path.join(ffi_srcdir, 'include'), os.path.join(ffi_srcdir, 'powerpc')] @@ -1736,7 +1736,7 @@ exec f in fficonfig # Add .S (preprocessed assembly) to C compiler source extensions. - self.compiler_obj.src_extensions.append('.S') + self.compiler.src_extensions.append('.S') include_dirs = [os.path.join(ffi_builddir, 'include'), ffi_builddir, @@ -1818,7 +1818,7 @@ ffi_lib = None if ffi_inc is not None: for lib_name in ('ffi_convenience', 'ffi_pic', 'ffi'): - if (self.compiler_obj.find_library_file(lib_dirs, lib_name)): + if (self.compiler.find_library_file(lib_dirs, lib_name)): ffi_lib = lib_name break From python-checkins at python.org Fri Mar 5 01:30:44 2010 From: python-checkins at python.org (tarek.ziade) Date: Fri, 5 Mar 2010 01:30:44 +0100 (CET) Subject: [Python-checkins] r78668 - python/branches/release26-maint Message-ID: <20100305003044.591C3EEA9A@mail.python.org> Author: tarek.ziade Date: Fri Mar 5 01:30:44 2010 New Revision: 78668 Log: Blocked revisions 78666 via svnmerge ........ r78666 | tarek.ziade | 2010-03-05 01:16:02 +0100 (Fri, 05 Mar 2010) | 1 line reverting partially distutils to its 2.6.x state so 2.7a4 looks more like the 2.7b1 in this. the whole revert will occur after a4 is tagged ........ Modified: python/branches/release26-maint/ (props changed) From python-checkins at python.org Fri Mar 5 01:32:29 2010 From: python-checkins at python.org (tarek.ziade) Date: Fri, 5 Mar 2010 01:32:29 +0100 (CET) Subject: [Python-checkins] r78669 - python/branches/release26-maint Message-ID: <20100305003229.C8CB6EEAAB@mail.python.org> Author: tarek.ziade Date: Fri Mar 5 01:32:29 2010 New Revision: 78669 Log: Blocked revisions 78667 via svnmerge ........ r78667 | tarek.ziade | 2010-03-05 01:29:38 +0100 (Fri, 05 Mar 2010) | 1 line reverted the usage of compiler_obj in Python's setup.py ........ Modified: python/branches/release26-maint/ (props changed) From python-checkins at python.org Fri Mar 5 01:36:03 2010 From: python-checkins at python.org (tarek.ziade) Date: Fri, 5 Mar 2010 01:36:03 +0100 (CET) Subject: [Python-checkins] r78670 - python/branches/py3k Message-ID: <20100305003603.17AB1EE987@mail.python.org> Author: tarek.ziade Date: Fri Mar 5 01:36:02 2010 New Revision: 78670 Log: Blocked revisions 78666-78667 via svnmerge ........ r78666 | tarek.ziade | 2010-03-05 01:16:02 +0100 (Fri, 05 Mar 2010) | 1 line reverting partially distutils to its 2.6.x state so 2.7a4 looks more like the 2.7b1 in this. the whole revert will occur after a4 is tagged ........ r78667 | tarek.ziade | 2010-03-05 01:29:38 +0100 (Fri, 05 Mar 2010) | 1 line reverted the usage of compiler_obj in Python's setup.py ........ Modified: python/branches/py3k/ (props changed) From python-checkins at python.org Fri Mar 5 01:47:40 2010 From: python-checkins at python.org (florent.xicluna) Date: Fri, 5 Mar 2010 01:47:40 +0100 (CET) Subject: [Python-checkins] r78671 - python/trunk/Lib/test/test_subprocess.py Message-ID: <20100305004740.52173EEAB4@mail.python.org> Author: florent.xicluna Date: Fri Mar 5 01:47:40 2010 New Revision: 78671 Log: Workaround #3137: Retry SIGINT if it is not received the first time. test_send_signal should not hang anymore on various Linux distributions. Modified: python/trunk/Lib/test/test_subprocess.py Modified: python/trunk/Lib/test/test_subprocess.py ============================================================================== --- python/trunk/Lib/test/test_subprocess.py (original) +++ python/trunk/Lib/test/test_subprocess.py Fri Mar 5 01:47:40 2010 @@ -654,9 +654,20 @@ p = subprocess.Popen([sys.executable, "-c", "input()"]) # Let the process initialize correctly (Issue #3137) - time.sleep(.1) + time.sleep(0.1) self.assertIs(p.poll(), None) - p.send_signal(signal.SIGINT) + count, maxcount = 0, 3 + # Retry if the process do not receive the SIGINT signal. + while count < maxcount and p.poll() is None: + p.send_signal(signal.SIGINT) + time.sleep(0.1) + count += 1 + if p.poll() is None: + raise test_support.TestFailed("the subprocess did not receive " + "the signal SIGINT") + elif count > 1: + print >>sys.stderr, ("p.send_signal(SIGINT) succeeded " + "after {} attempts".format(count)) self.assertNotEqual(p.wait(), 0) def test_kill(self): From python-checkins at python.org Fri Mar 5 01:52:00 2010 From: python-checkins at python.org (florent.xicluna) Date: Fri, 5 Mar 2010 01:52:00 +0100 (CET) Subject: [Python-checkins] r78672 - in python/branches/py3k: Lib/test/test_subprocess.py Message-ID: <20100305005200.EF209EEA87@mail.python.org> Author: florent.xicluna Date: Fri Mar 5 01:52:00 2010 New Revision: 78672 Log: Merged revisions 78671 via svnmerge from svn+ssh://pythondev at svn.python.org/python/trunk ........ r78671 | florent.xicluna | 2010-03-05 01:47:40 +0100 (ven, 05 mar 2010) | 3 lines Workaround #3137: Retry SIGINT if it is not received the first time. test_send_signal should not hang anymore on various Linux distributions. ........ Modified: python/branches/py3k/ (props changed) python/branches/py3k/Lib/test/test_subprocess.py Modified: python/branches/py3k/Lib/test/test_subprocess.py ============================================================================== --- python/branches/py3k/Lib/test/test_subprocess.py (original) +++ python/branches/py3k/Lib/test/test_subprocess.py Fri Mar 5 01:52:00 2010 @@ -652,9 +652,20 @@ p = subprocess.Popen([sys.executable, "-c", "input()"]) # Let the process initialize correctly (Issue #3137) - time.sleep(.1) + time.sleep(0.1) self.assertIs(p.poll(), None) - p.send_signal(signal.SIGINT) + count, maxcount = 0, 3 + # Retry if the process do not receive the SIGINT signal. + while count < maxcount and p.poll() is None: + p.send_signal(signal.SIGINT) + time.sleep(0.1) + count += 1 + if p.poll() is None: + raise support.TestFailed("the subprocess did not receive " + "the signal SIGINT") + elif count > 1: + print("p.send_signal(SIGINT) succeeded " + "after {} attempts".format(count), file=sys.stderr) self.assertNotEqual(p.wait(), 0) def test_kill(self): @@ -839,6 +850,7 @@ ProcessTestCaseNoPoll, HelperFunctionTests) + unit_tests = (POSIXProcessTestCase,) support.run_unittest(*unit_tests) support.reap_children() From python-checkins at python.org Fri Mar 5 02:05:55 2010 From: python-checkins at python.org (florent.xicluna) Date: Fri, 5 Mar 2010 02:05:55 +0100 (CET) Subject: [Python-checkins] r78673 - python/trunk/Lib/test/test_subprocess.py Message-ID: <20100305010555.A64F8EE987@mail.python.org> Author: florent.xicluna Date: Fri Mar 5 02:05:55 2010 New Revision: 78673 Log: Let's use assertIsNone / assertIsNotNone. It's hype. Modified: python/trunk/Lib/test/test_subprocess.py Modified: python/trunk/Lib/test/test_subprocess.py ============================================================================== --- python/trunk/Lib/test/test_subprocess.py (original) +++ python/trunk/Lib/test/test_subprocess.py Fri Mar 5 02:05:55 2010 @@ -655,17 +655,16 @@ # Let the process initialize correctly (Issue #3137) time.sleep(0.1) - self.assertIs(p.poll(), None) + self.assertIsNone(p.poll()) count, maxcount = 0, 3 # Retry if the process do not receive the SIGINT signal. while count < maxcount and p.poll() is None: p.send_signal(signal.SIGINT) time.sleep(0.1) count += 1 - if p.poll() is None: - raise test_support.TestFailed("the subprocess did not receive " - "the signal SIGINT") - elif count > 1: + self.assertIsNotNone(p.poll(), "the subprocess did not receive " + "the signal SIGINT") + if count > 1: print >>sys.stderr, ("p.send_signal(SIGINT) succeeded " "after {} attempts".format(count)) self.assertNotEqual(p.wait(), 0) @@ -824,6 +823,7 @@ ProcessTestCaseNoPoll, HelperFunctionTests) + unit_tests = ( POSIXProcessTestCase,) test_support.run_unittest(*unit_tests) test_support.reap_children() From python-checkins at python.org Fri Mar 5 02:07:40 2010 From: python-checkins at python.org (florent.xicluna) Date: Fri, 5 Mar 2010 02:07:40 +0100 (CET) Subject: [Python-checkins] r78674 - python/branches/py3k/Lib/test/test_subprocess.py Message-ID: <20100305010740.628D7EE987@mail.python.org> Author: florent.xicluna Date: Fri Mar 5 02:07:40 2010 New Revision: 78674 Log: Remove some debug line... Modified: python/branches/py3k/Lib/test/test_subprocess.py Modified: python/branches/py3k/Lib/test/test_subprocess.py ============================================================================== --- python/branches/py3k/Lib/test/test_subprocess.py (original) +++ python/branches/py3k/Lib/test/test_subprocess.py Fri Mar 5 02:07:40 2010 @@ -850,7 +850,6 @@ ProcessTestCaseNoPoll, HelperFunctionTests) - unit_tests = (POSIXProcessTestCase,) support.run_unittest(*unit_tests) support.reap_children() From python-checkins at python.org Fri Mar 5 02:12:14 2010 From: python-checkins at python.org (florent.xicluna) Date: Fri, 5 Mar 2010 02:12:14 +0100 (CET) Subject: [Python-checkins] r78675 - python/trunk/Lib/test/test_subprocess.py Message-ID: <20100305011214.ECD1AEE987@mail.python.org> Author: florent.xicluna Date: Fri Mar 5 02:12:14 2010 New Revision: 78675 Log: These line should not be there. Modified: python/trunk/Lib/test/test_subprocess.py Modified: python/trunk/Lib/test/test_subprocess.py ============================================================================== --- python/trunk/Lib/test/test_subprocess.py (original) +++ python/trunk/Lib/test/test_subprocess.py Fri Mar 5 02:12:14 2010 @@ -823,7 +823,6 @@ ProcessTestCaseNoPoll, HelperFunctionTests) - unit_tests = ( POSIXProcessTestCase,) test_support.run_unittest(*unit_tests) test_support.reap_children() From python-checkins at python.org Fri Mar 5 02:18:04 2010 From: python-checkins at python.org (florent.xicluna) Date: Fri, 5 Mar 2010 02:18:04 +0100 (CET) Subject: [Python-checkins] r78676 - in python/branches/py3k: Lib/test/test_subprocess.py Message-ID: <20100305011804.60B10EE987@mail.python.org> Author: florent.xicluna Date: Fri Mar 5 02:18:04 2010 New Revision: 78676 Log: Merged revisions 78673 via svnmerge from svn+ssh://pythondev at svn.python.org/python/trunk ........ r78673 | florent.xicluna | 2010-03-05 02:05:55 +0100 (ven, 05 mar 2010) | 2 lines Let's use assertIsNone / assertIsNotNone. It's hype. ........ Modified: python/branches/py3k/ (props changed) python/branches/py3k/Lib/test/test_subprocess.py Modified: python/branches/py3k/Lib/test/test_subprocess.py ============================================================================== --- python/branches/py3k/Lib/test/test_subprocess.py (original) +++ python/branches/py3k/Lib/test/test_subprocess.py Fri Mar 5 02:18:04 2010 @@ -653,17 +653,16 @@ # Let the process initialize correctly (Issue #3137) time.sleep(0.1) - self.assertIs(p.poll(), None) + self.assertIsNone(p.poll()) count, maxcount = 0, 3 # Retry if the process do not receive the SIGINT signal. while count < maxcount and p.poll() is None: p.send_signal(signal.SIGINT) time.sleep(0.1) count += 1 - if p.poll() is None: - raise support.TestFailed("the subprocess did not receive " - "the signal SIGINT") - elif count > 1: + self.assertIsNotNone(p.poll(), "the subprocess did not receive " + "the signal SIGINT") + if count > 1: print("p.send_signal(SIGINT) succeeded " "after {} attempts".format(count), file=sys.stderr) self.assertNotEqual(p.wait(), 0) From python-checkins at python.org Fri Mar 5 04:07:12 2010 From: python-checkins at python.org (brett.cannon) Date: Fri, 5 Mar 2010 04:07:12 +0100 (CET) Subject: [Python-checkins] r78677 - peps/trunk/pep-0001.txt Message-ID: <20100305030712.9D650EE995@mail.python.org> Author: brett.cannon Date: Fri Mar 5 04:07:12 2010 New Revision: 78677 Log: Clarify the current practices of how to develop a PEP. Modified: peps/trunk/pep-0001.txt Modified: peps/trunk/pep-0001.txt ============================================================================== --- peps/trunk/pep-0001.txt (original) +++ peps/trunk/pep-0001.txt Fri Mar 5 04:07:12 2010 @@ -60,17 +60,18 @@ PEP Work Flow ============= -The PEP editors assign PEP numbers and change their status. The -current PEP editors are David Goodger and Barry Warsaw. Please send +The PEP editors assign PEP numbers and change their status. Please send all PEP-related email to (no cross-posting please). Also see `PEP Editor Responsibilities & Workflow`_ below. The PEP process begins with a new idea for Python. It is highly recommended that a single PEP contain a single key proposal or new -idea. The more focussed the PEP, the more successful it tends to -be. The PEP editor reserves the right to reject PEP proposals if they -appear too unfocussed or too broad. If in doubt, split your PEP into -several well-focussed ones. +idea. Small enhancements or patches often don't need +a PEP and can be injected into the Python development work flow with a +patch submission to the Python `issue tracker`_. The more focussed the +PEP, the more successful it tends to be. The PEP editor reserves the +right to reject PEP proposals if they appear too unfocussed or too +broad. If in doubt, split your PEP into several well-focussed ones. Each PEP must have a champion -- someone who writes the PEP using the style and format described below, shepherds the discussions in the @@ -78,13 +79,31 @@ the idea. The PEP champion (a.k.a. Author) should first attempt to ascertain whether the idea is PEP-able. Posting to the comp.lang.python newsgroup (a.k.a. python-list at python.org mailing -list) is recommended. Small enhancements or patches often don't need -a PEP and can be injected into the Python development work flow with a -patch submission to the Python `issue tracker`_. +list) or the python-ideas mailing list is the best way to go about this. -The PEP champion then emails the PEP editor with a -proposed title and a rough, but fleshed out, draft of the PEP. This -draft must be written in PEP style as described below. +Vetting an idea publicly before going as far as writing a PEP is meant +to save the potential author time. Many ideas have been brought +forward for changing Python that have been rejected for various +reasons. Asking the Python community first if an idea is original +helps prevent too much time being spent on something that is +guaranteed to be rejected based on prior discussions (searching +the internet does not always do the trick). It also helps to make sure +the idea is applicable to the entire community and not just the author. +Just because an idea sounds good to the author does not +mean it will work for most people in most areas where Python is used. + +Once the champion has asked the Python community as to whether an +idea has any chance of acceptance, a draft PEP should be presented to +python-ideas. This gives the author a chance to flesh out the draft +PEP to make properly formatted, of high quality, and to address +initial concerns about the proposal. + +Following a discussion on python-ideas, the proposal should be sent to +the `python-dev list `__ with the draft +PEP and the PEP editors . This +draft must be written in PEP style as described below, else it will be +sent back without further regard until proper formatting rules are +followed. If the PEP editor approves, he will assign the PEP a number, label it as Standards Track, Informational, or Process, give it status "Draft", @@ -96,16 +115,9 @@ Dictator for Life, Guido van Rossum) can be consulted during the approval phase, and is the final arbiter of the draft's PEP-ability. -If a pre-PEP is rejected, the author may elect to take the pre-PEP to -the comp.lang.python newsgroup (a.k.a. python-list at python.org mailing -list) to help flesh it out, gain feedback and consensus from the -community at large, and improve the PEP for re-submission. - -The author of the PEP is then responsible for posting the PEP to the -community forums, and marshaling community support for it. As updates -are necessary, the PEP author can check in new versions if they have -SVN commit permissions, or can email new PEP versions to the PEP -editor for committing. +As updates are necessary, the PEP author can check in new versions if +they have SVN commit permissions, or can email new PEP versions to +the PEP editor for committing. Standards Track PEPs consist of two parts, a design document and a reference implementation. The PEP should be reviewed and accepted @@ -115,10 +127,9 @@ or a URL to same -- before it can be considered Final. PEP authors are responsible for collecting community feedback on a PEP -before submitting it for review. A PEP that has not been discussed on -python-list at python.org and/or python-dev at python.org will not be -accepted. However, wherever possible, long open-ended discussions on -public mailing lists should be avoided. Strategies to keep the +before submitting it for review. However, wherever possible, long +open-ended discussions on public mailing lists should be avoided. +Strategies to keep the discussions efficient include: setting up a separate SIG mailing list for the topic, having the PEP author accept private comments in the early design phases, setting up a wiki page, etc. PEP authors should From python-checkins at python.org Fri Mar 5 04:07:59 2010 From: python-checkins at python.org (benjamin.peterson) Date: Fri, 5 Mar 2010 04:07:59 +0100 (CET) Subject: [Python-checkins] r78678 - in python/trunk: Doc/library/sysconfig.rst Lib/sysconfig.py Lib/test/test_sysconfig.py Message-ID: <20100305030759.90354EE995@mail.python.org> Author: benjamin.peterson Date: Fri Mar 5 04:07:59 2010 New Revision: 78678 Log: set svn:eol-style Modified: python/trunk/Doc/library/sysconfig.rst (props changed) python/trunk/Lib/sysconfig.py (props changed) python/trunk/Lib/test/test_sysconfig.py (props changed) From python-checkins at python.org Fri Mar 5 04:10:47 2010 From: python-checkins at python.org (benjamin.peterson) Date: Fri, 5 Mar 2010 04:10:47 +0100 (CET) Subject: [Python-checkins] r78679 - sandbox/trunk/2to3/lib2to3/tests/test_main.py Message-ID: <20100305031047.07E5DEEA77@mail.python.org> Author: benjamin.peterson Date: Fri Mar 5 04:10:46 2010 New Revision: 78679 Log: set svn:eol-style Modified: sandbox/trunk/2to3/lib2to3/tests/test_main.py (props changed) From python-checkins at python.org Fri Mar 5 04:15:07 2010 From: python-checkins at python.org (benjamin.peterson) Date: Fri, 5 Mar 2010 04:15:07 +0100 (CET) Subject: [Python-checkins] r78680 - in python/trunk/Lib: distutils/tests/test_bdist_msi.py distutils/tests/test_dep_util.py importlib/__init__.py json/tests/test_check_circular.py lib-tk/test/test_tkinter/__init__.py lib-tk/test/test_tkinter/test_text.py test/test_aifc.py test/test_ascii_formatd.py test/test_compileall.py test/test_dictcomps.py test/test_dictviews.py test/test_importlib.py test/test_setcomps.py test/test_smtpnet.py test/test_strtod.py Message-ID: <20100305031507.4EA3EEEA9A@mail.python.org> Author: benjamin.peterson Date: Fri Mar 5 04:15:07 2010 New Revision: 78680 Log: set svn:eol-style on Lib files Modified: python/trunk/Lib/distutils/tests/test_bdist_msi.py (props changed) python/trunk/Lib/distutils/tests/test_dep_util.py (props changed) python/trunk/Lib/importlib/__init__.py (props changed) python/trunk/Lib/json/tests/test_check_circular.py (props changed) python/trunk/Lib/lib-tk/test/test_tkinter/__init__.py (props changed) python/trunk/Lib/lib-tk/test/test_tkinter/test_text.py (props changed) python/trunk/Lib/test/test_aifc.py (props changed) python/trunk/Lib/test/test_ascii_formatd.py (props changed) python/trunk/Lib/test/test_compileall.py (props changed) python/trunk/Lib/test/test_dictcomps.py (props changed) python/trunk/Lib/test/test_dictviews.py (props changed) python/trunk/Lib/test/test_importlib.py (props changed) python/trunk/Lib/test/test_setcomps.py (props changed) python/trunk/Lib/test/test_smtpnet.py (props changed) python/trunk/Lib/test/test_strtod.py (props changed) From python-checkins at python.org Fri Mar 5 04:19:07 2010 From: python-checkins at python.org (benjamin.peterson) Date: Fri, 5 Mar 2010 04:19:07 +0100 (CET) Subject: [Python-checkins] r78681 - in sandbox/trunk/2to3/lib2to3/tests: test_fixers.py test_pytree.py Message-ID: <20100305031907.1A786EE98E@mail.python.org> Author: benjamin.peterson Date: Fri Mar 5 04:19:06 2010 New Revision: 78681 Log: remove svn:executable property Modified: sandbox/trunk/2to3/lib2to3/tests/test_fixers.py (props changed) sandbox/trunk/2to3/lib2to3/tests/test_pytree.py (props changed) From python-checkins at python.org Fri Mar 5 04:20:06 2010 From: python-checkins at python.org (benjamin.peterson) Date: Fri, 5 Mar 2010 04:20:06 +0100 (CET) Subject: [Python-checkins] r78682 - in python/trunk/Lib: distutils/tests/test_clean.py fractions.py lib-tk/Tix.py plat-irix5/AL.py plat-irix5/CD.py plat-irix5/CL.py plat-irix5/CL_old.py plat-irix5/DEVICE.py plat-irix5/ERRNO.py plat-irix5/FILE.py plat-irix5/FL.py plat-irix5/GET.py plat-irix5/GL.py plat-irix5/GLWS.py plat-irix5/IN.py plat-irix5/IOCTL.py plat-irix5/SV.py plat-irix5/WAIT.py plat-irix5/cddb.py plat-irix5/cdplayer.py plat-irix5/flp.py plat-irix5/jpeg.py plat-irix5/panel.py plat-irix5/panelparser.py plat-irix5/readcd.py plat-irix5/torgb.py plat-mac/Carbon/CG.py plat-mac/Carbon/CarbonEvents.py plat-mac/Carbon/CarbonEvt.py plat-mac/Carbon/CoreGraphics.py plat-sunos5/IN.py plat-sunos5/SUNAUDIODEV.py runpy.py test/test_aepack.py test/test_binascii.py test/test_cmath.py test/test_cprofile.py test/test_crypt.py test/test_dbm.py test/test_fcntl.py test/test_gdbm.py test/test_grp.py test/test_htmlparser.py test/test_profile.py test/test_strftime.py test/test_wsgiref.py Message-ID: <20100305032006.96860EE98E@mail.python.org> Author: benjamin.peterson Date: Fri Mar 5 04:20:06 2010 New Revision: 78682 Log: remove the svn:executable property from files that don't have shebang lines Modified: python/trunk/Lib/distutils/tests/test_clean.py (props changed) python/trunk/Lib/fractions.py (props changed) python/trunk/Lib/lib-tk/Tix.py (props changed) python/trunk/Lib/plat-irix5/AL.py (props changed) python/trunk/Lib/plat-irix5/CD.py (props changed) python/trunk/Lib/plat-irix5/CL.py (props changed) python/trunk/Lib/plat-irix5/CL_old.py (props changed) python/trunk/Lib/plat-irix5/DEVICE.py (props changed) python/trunk/Lib/plat-irix5/ERRNO.py (props changed) python/trunk/Lib/plat-irix5/FILE.py (props changed) python/trunk/Lib/plat-irix5/FL.py (props changed) python/trunk/Lib/plat-irix5/GET.py (props changed) python/trunk/Lib/plat-irix5/GL.py (props changed) python/trunk/Lib/plat-irix5/GLWS.py (props changed) python/trunk/Lib/plat-irix5/IN.py (props changed) python/trunk/Lib/plat-irix5/IOCTL.py (props changed) python/trunk/Lib/plat-irix5/SV.py (props changed) python/trunk/Lib/plat-irix5/WAIT.py (props changed) python/trunk/Lib/plat-irix5/cddb.py (props changed) python/trunk/Lib/plat-irix5/cdplayer.py (props changed) python/trunk/Lib/plat-irix5/flp.py (props changed) python/trunk/Lib/plat-irix5/jpeg.py (props changed) python/trunk/Lib/plat-irix5/panel.py (props changed) python/trunk/Lib/plat-irix5/panelparser.py (props changed) python/trunk/Lib/plat-irix5/readcd.py (props changed) python/trunk/Lib/plat-irix5/torgb.py (props changed) python/trunk/Lib/plat-mac/Carbon/CG.py (props changed) python/trunk/Lib/plat-mac/Carbon/CarbonEvents.py (props changed) python/trunk/Lib/plat-mac/Carbon/CarbonEvt.py (props changed) python/trunk/Lib/plat-mac/Carbon/CoreGraphics.py (props changed) python/trunk/Lib/plat-sunos5/IN.py (props changed) python/trunk/Lib/plat-sunos5/SUNAUDIODEV.py (props changed) python/trunk/Lib/runpy.py (props changed) python/trunk/Lib/test/test_aepack.py (props changed) python/trunk/Lib/test/test_binascii.py (props changed) python/trunk/Lib/test/test_cmath.py (props changed) python/trunk/Lib/test/test_cprofile.py (props changed) python/trunk/Lib/test/test_crypt.py (props changed) python/trunk/Lib/test/test_dbm.py (props changed) python/trunk/Lib/test/test_fcntl.py (props changed) python/trunk/Lib/test/test_gdbm.py (props changed) python/trunk/Lib/test/test_grp.py (props changed) python/trunk/Lib/test/test_htmlparser.py (props changed) python/trunk/Lib/test/test_profile.py (props changed) python/trunk/Lib/test/test_strftime.py (props changed) python/trunk/Lib/test/test_wsgiref.py (props changed) From python-checkins at python.org Fri Mar 5 04:24:18 2010 From: python-checkins at python.org (benjamin.peterson) Date: Fri, 5 Mar 2010 04:24:18 +0100 (CET) Subject: [Python-checkins] r78683 - in python/trunk/Lib/lib2to3: tests/test_fixers.py tests/test_main.py tests/test_pytree.py Message-ID: <20100305032418.21067EE98E@mail.python.org> Author: benjamin.peterson Date: Fri Mar 5 04:24:17 2010 New Revision: 78683 Log: Merged revisions 78679,78681 via svnmerge from svn+ssh://pythondev at svn.python.org/sandbox/trunk/2to3/lib2to3 ........ r78679 | benjamin.peterson | 2010-03-04 21:10:46 -0600 (Thu, 04 Mar 2010) | 1 line set svn:eol-style ........ r78681 | benjamin.peterson | 2010-03-04 21:19:06 -0600 (Thu, 04 Mar 2010) | 1 line remove svn:executable property ........ Modified: python/trunk/Lib/lib2to3/ (props changed) python/trunk/Lib/lib2to3/tests/test_fixers.py (props changed) python/trunk/Lib/lib2to3/tests/test_main.py (props changed) python/trunk/Lib/lib2to3/tests/test_pytree.py (props changed) From python-checkins at python.org Fri Mar 5 04:27:12 2010 From: python-checkins at python.org (benjamin.peterson) Date: Fri, 5 Mar 2010 04:27:12 +0100 (CET) Subject: [Python-checkins] r78684 - in python/branches/py3k: Lib/lib2to3/tests/test_fixers.py Lib/lib2to3/tests/test_main.py Lib/lib2to3/tests/test_pytree.py Message-ID: <20100305032712.DD6FDEE98E@mail.python.org> Author: benjamin.peterson Date: Fri Mar 5 04:27:12 2010 New Revision: 78684 Log: Merged revisions 78683 via svnmerge from svn+ssh://pythondev at svn.python.org/python/trunk ................ r78683 | benjamin.peterson | 2010-03-04 21:24:17 -0600 (Thu, 04 Mar 2010) | 13 lines Merged revisions 78679,78681 via svnmerge from svn+ssh://pythondev at svn.python.org/sandbox/trunk/2to3/lib2to3 ........ r78679 | benjamin.peterson | 2010-03-04 21:10:46 -0600 (Thu, 04 Mar 2010) | 1 line set svn:eol-style ........ r78681 | benjamin.peterson | 2010-03-04 21:19:06 -0600 (Thu, 04 Mar 2010) | 1 line remove svn:executable property ........ ................ Modified: python/branches/py3k/ (props changed) python/branches/py3k/Lib/lib2to3/tests/test_fixers.py (props changed) python/branches/py3k/Lib/lib2to3/tests/test_main.py (props changed) python/branches/py3k/Lib/lib2to3/tests/test_pytree.py (props changed) From python-checkins at python.org Fri Mar 5 04:27:16 2010 From: python-checkins at python.org (benjamin.peterson) Date: Fri, 5 Mar 2010 04:27:16 +0100 (CET) Subject: [Python-checkins] r78685 - in python/branches/release26-maint: Lib/lib2to3 Lib/lib2to3/tests/test_fixers.py Lib/lib2to3/tests/test_main.py Lib/lib2to3/tests/test_pytree.py Message-ID: <20100305032716.C197FEEA9F@mail.python.org> Author: benjamin.peterson Date: Fri Mar 5 04:27:16 2010 New Revision: 78685 Log: Merged revisions 78683 via svnmerge from svn+ssh://pythondev at svn.python.org/python/trunk ................ r78683 | benjamin.peterson | 2010-03-04 21:24:17 -0600 (Thu, 04 Mar 2010) | 13 lines Merged revisions 78679,78681 via svnmerge from svn+ssh://pythondev at svn.python.org/sandbox/trunk/2to3/lib2to3 ........ r78679 | benjamin.peterson | 2010-03-04 21:10:46 -0600 (Thu, 04 Mar 2010) | 1 line set svn:eol-style ........ r78681 | benjamin.peterson | 2010-03-04 21:19:06 -0600 (Thu, 04 Mar 2010) | 1 line remove svn:executable property ........ ................ Modified: python/branches/release26-maint/ (props changed) python/branches/release26-maint/Lib/lib2to3/ (props changed) python/branches/release26-maint/Lib/lib2to3/tests/test_fixers.py (props changed) python/branches/release26-maint/Lib/lib2to3/tests/test_main.py (props changed) python/branches/release26-maint/Lib/lib2to3/tests/test_pytree.py (props changed) From python-checkins at python.org Fri Mar 5 04:30:16 2010 From: python-checkins at python.org (benjamin.peterson) Date: Fri, 5 Mar 2010 04:30:16 +0100 (CET) Subject: [Python-checkins] r78686 - in python/branches/release31-maint: Lib/lib2to3/tests/test_fixers.py Lib/lib2to3/tests/test_main.py Lib/lib2to3/tests/test_pytree.py Message-ID: <20100305033016.DBD0EEE98E@mail.python.org> Author: benjamin.peterson Date: Fri Mar 5 04:30:16 2010 New Revision: 78686 Log: Merged revisions 78684 via svnmerge from svn+ssh://pythondev at svn.python.org/python/branches/py3k ................ r78684 | benjamin.peterson | 2010-03-04 21:27:12 -0600 (Thu, 04 Mar 2010) | 20 lines Merged revisions 78683 via svnmerge from svn+ssh://pythondev at svn.python.org/python/trunk ................ r78683 | benjamin.peterson | 2010-03-04 21:24:17 -0600 (Thu, 04 Mar 2010) | 13 lines Merged revisions 78679,78681 via svnmerge from svn+ssh://pythondev at svn.python.org/sandbox/trunk/2to3/lib2to3 ........ r78679 | benjamin.peterson | 2010-03-04 21:10:46 -0600 (Thu, 04 Mar 2010) | 1 line set svn:eol-style ........ r78681 | benjamin.peterson | 2010-03-04 21:19:06 -0600 (Thu, 04 Mar 2010) | 1 line remove svn:executable property ........ ................ ................ Modified: python/branches/release31-maint/ (props changed) python/branches/release31-maint/Lib/lib2to3/tests/test_fixers.py (props changed) python/branches/release31-maint/Lib/lib2to3/tests/test_main.py (props changed) python/branches/release31-maint/Lib/lib2to3/tests/test_pytree.py (props changed) From python-checkins at python.org Fri Mar 5 04:33:11 2010 From: python-checkins at python.org (benjamin.peterson) Date: Fri, 5 Mar 2010 04:33:11 +0100 (CET) Subject: [Python-checkins] r78687 - in python/branches/py3k: Doc/library/sysconfig.rst Lib/distutils/tests/test_bdist_msi.py Lib/distutils/tests/test_clean.py Lib/distutils/tests/test_dep_util.py Lib/importlib/__init__.py Lib/plat-sunos5/IN.py Lib/sysconfig.py Lib/test/test_aifc.py Lib/test/test_binascii.py Lib/test/test_cmath.py Lib/test/test_compileall.py Lib/test/test_crypt.py Lib/test/test_fcntl.py Lib/test/test_grp.py Lib/test/test_htmlparser.py Lib/test/test_importlib.py Lib/test/test_profile.py Lib/test/test_smtpnet.py Lib/test/test_strftime.py Lib/test/test_strtod.py Lib/test/test_sysconfig.py Lib/test/test_wsgiref.py Message-ID: <20100305033311.93422EEA16@mail.python.org> Author: benjamin.peterson Date: Fri Mar 5 04:33:11 2010 New Revision: 78687 Log: Merged revisions 78678,78680,78682 via svnmerge from svn+ssh://pythondev at svn.python.org/python/trunk ........ r78678 | benjamin.peterson | 2010-03-04 21:07:59 -0600 (Thu, 04 Mar 2010) | 1 line set svn:eol-style ........ r78680 | benjamin.peterson | 2010-03-04 21:15:07 -0600 (Thu, 04 Mar 2010) | 1 line set svn:eol-style on Lib files ........ r78682 | benjamin.peterson | 2010-03-04 21:20:06 -0600 (Thu, 04 Mar 2010) | 1 line remove the svn:executable property from files that don't have shebang lines ........ Modified: python/branches/py3k/ (props changed) python/branches/py3k/Doc/library/sysconfig.rst (props changed) python/branches/py3k/Lib/distutils/tests/test_bdist_msi.py (props changed) python/branches/py3k/Lib/distutils/tests/test_clean.py (props changed) python/branches/py3k/Lib/distutils/tests/test_dep_util.py (props changed) python/branches/py3k/Lib/importlib/__init__.py (props changed) python/branches/py3k/Lib/plat-sunos5/IN.py (props changed) python/branches/py3k/Lib/sysconfig.py (props changed) python/branches/py3k/Lib/test/test_aifc.py (props changed) python/branches/py3k/Lib/test/test_binascii.py (props changed) python/branches/py3k/Lib/test/test_cmath.py (props changed) python/branches/py3k/Lib/test/test_compileall.py (props changed) python/branches/py3k/Lib/test/test_crypt.py (props changed) python/branches/py3k/Lib/test/test_fcntl.py (props changed) python/branches/py3k/Lib/test/test_grp.py (props changed) python/branches/py3k/Lib/test/test_htmlparser.py (props changed) python/branches/py3k/Lib/test/test_importlib.py (props changed) python/branches/py3k/Lib/test/test_profile.py (props changed) python/branches/py3k/Lib/test/test_smtpnet.py (props changed) python/branches/py3k/Lib/test/test_strftime.py (props changed) python/branches/py3k/Lib/test/test_strtod.py (props changed) python/branches/py3k/Lib/test/test_sysconfig.py (props changed) python/branches/py3k/Lib/test/test_wsgiref.py (props changed) From python-checkins at python.org Fri Mar 5 10:12:37 2010 From: python-checkins at python.org (gerhard.haering) Date: Fri, 5 Mar 2010 10:12:37 +0100 (CET) Subject: [Python-checkins] r78688 - in python/trunk: Doc/includes/sqlite3/load_extension.py Doc/library/sqlite3.rst Lib/sqlite3/test/dbapi.py Lib/sqlite3/test/regression.py Lib/sqlite3/test/transactions.py Lib/sqlite3/test/types.py Misc/NEWS Modules/_sqlite/cache.c Modules/_sqlite/cache.h Modules/_sqlite/connection.c Modules/_sqlite/connection.h Modules/_sqlite/cursor.c Modules/_sqlite/cursor.h Modules/_sqlite/module.c Modules/_sqlite/module.h Modules/_sqlite/prepare_protocol.c Modules/_sqlite/prepare_protocol.h Modules/_sqlite/row.c Modules/_sqlite/row.h Modules/_sqlite/sqlitecompat.h Modules/_sqlite/statement.c Modules/_sqlite/statement.h Modules/_sqlite/util.c Modules/_sqlite/util.h setup.py Message-ID: <20100305091237.C0DB7EEB06@mail.python.org> Author: gerhard.haering Date: Fri Mar 5 10:12:37 2010 New Revision: 78688 Log: Merged code from pysqlite 2.6.0. Added: python/trunk/Doc/includes/sqlite3/load_extension.py Modified: python/trunk/Doc/library/sqlite3.rst python/trunk/Lib/sqlite3/test/dbapi.py python/trunk/Lib/sqlite3/test/regression.py python/trunk/Lib/sqlite3/test/transactions.py python/trunk/Lib/sqlite3/test/types.py python/trunk/Misc/NEWS python/trunk/Modules/_sqlite/cache.c python/trunk/Modules/_sqlite/cache.h python/trunk/Modules/_sqlite/connection.c python/trunk/Modules/_sqlite/connection.h python/trunk/Modules/_sqlite/cursor.c python/trunk/Modules/_sqlite/cursor.h python/trunk/Modules/_sqlite/module.c python/trunk/Modules/_sqlite/module.h python/trunk/Modules/_sqlite/prepare_protocol.c python/trunk/Modules/_sqlite/prepare_protocol.h python/trunk/Modules/_sqlite/row.c python/trunk/Modules/_sqlite/row.h python/trunk/Modules/_sqlite/sqlitecompat.h python/trunk/Modules/_sqlite/statement.c python/trunk/Modules/_sqlite/statement.h python/trunk/Modules/_sqlite/util.c python/trunk/Modules/_sqlite/util.h python/trunk/setup.py Added: python/trunk/Doc/includes/sqlite3/load_extension.py ============================================================================== --- (empty file) +++ python/trunk/Doc/includes/sqlite3/load_extension.py Fri Mar 5 10:12:37 2010 @@ -0,0 +1,26 @@ +import sqlite3 + +con = sqlite3.connect(":memory:") + +# enable extension loading +con.enable_load_extension(True) + +# Load the fulltext search extension +con.execute("select load_extension('./fts3.so')") + +# alternatively you can load the extension using an API call: +# con.load_extension("./fts3.so") + +# disable extension laoding again +con.enable_load_extension(False) + +# example from SQLite wiki +con.execute("create virtual table recipe using fts3(name, ingredients)") +con.executescript(""" + insert into recipe (name, ingredients) values ('broccoli stew', 'broccoli peppers cheese tomatoes'); + insert into recipe (name, ingredients) values ('pumpkin stew', 'pumpkin onions garlic celery'); + insert into recipe (name, ingredients) values ('broccoli pie', 'broccoli cheese onions flour'); + insert into recipe (name, ingredients) values ('pumpkin pie', 'pumpkin sugar flour butter'); + """) +for row in con.execute("select rowid, name, ingredients from recipe where name match 'pie'"): + print row Modified: python/trunk/Doc/library/sqlite3.rst ============================================================================== --- python/trunk/Doc/library/sqlite3.rst (original) +++ python/trunk/Doc/library/sqlite3.rst Fri Mar 5 10:12:37 2010 @@ -368,6 +368,25 @@ method with :const:`None` for *handler*. +.. method:: Connection.enable_load_extension(enabled) + + .. versionadded:: 2.7 + + This routine allows/disallows the SQLite engine to load SQLite extensions + from shared libraries. SQLite extensions can define new functions, + aggregates or whole new virtual table implementations. One well-known + extension is the fulltext-search extension distributed with SQLite. + + .. literalinclude:: ../includes/sqlite3/load_extension.py + +.. method:: Connection.load_extension(path) + + .. versionadded:: 2.7 + + This routine loads a SQLite extension from a shared library. You have to + enable extension loading with ``enable_load_extension`` before you can use + this routine. + .. attribute:: Connection.row_factory You can change this attribute to a callable that accepts the cursor and the @@ -439,7 +458,7 @@ Cursor Objects -------------- -.. class:: Cursor +A :class:`Cursor` instance has the following attributes and methods: A SQLite database cursor has the following attributes and methods: Modified: python/trunk/Lib/sqlite3/test/dbapi.py ============================================================================== --- python/trunk/Lib/sqlite3/test/dbapi.py (original) +++ python/trunk/Lib/sqlite3/test/dbapi.py Fri Mar 5 10:12:37 2010 @@ -1,7 +1,7 @@ #-*- coding: ISO-8859-1 -*- # pysqlite2/test/dbapi.py: tests for DB-API compliance # -# Copyright (C) 2004-2007 Gerhard H?ring +# Copyright (C) 2004-2010 Gerhard H?ring # # This file is part of pysqlite. # @@ -672,13 +672,13 @@ res = cur.fetchone()[0] self.assertEqual(res, 6) - def CheckScriptErrorIncomplete(self): + def CheckScriptSyntaxError(self): con = sqlite.connect(":memory:") cur = con.cursor() raised = False try: - cur.executescript("create table test(sadfsadfdsa") - except sqlite.ProgrammingError: + cur.executescript("create table test(x); asdf; create table test2(x)") + except sqlite.OperationalError: raised = True self.assertEqual(raised, True, "should have raised an exception") @@ -711,7 +711,7 @@ result = con.execute("select foo from test").fetchone()[0] self.assertEqual(result, 5, "Basic test of Connection.executescript") -class ClosedTests(unittest.TestCase): +class ClosedConTests(unittest.TestCase): def setUp(self): pass @@ -763,6 +763,102 @@ except: self.fail("Should have raised a ProgrammingError") + def CheckClosedCreateFunction(self): + con = sqlite.connect(":memory:") + con.close() + def f(x): return 17 + try: + con.create_function("foo", 1, f) + self.fail("Should have raised a ProgrammingError") + except sqlite.ProgrammingError: + pass + except: + self.fail("Should have raised a ProgrammingError") + + def CheckClosedCreateAggregate(self): + con = sqlite.connect(":memory:") + con.close() + class Agg: + def __init__(self): + pass + def step(self, x): + pass + def finalize(self): + return 17 + try: + con.create_aggregate("foo", 1, Agg) + self.fail("Should have raised a ProgrammingError") + except sqlite.ProgrammingError: + pass + except: + self.fail("Should have raised a ProgrammingError") + + def CheckClosedSetAuthorizer(self): + con = sqlite.connect(":memory:") + con.close() + def authorizer(*args): + return sqlite.DENY + try: + con.set_authorizer(authorizer) + self.fail("Should have raised a ProgrammingError") + except sqlite.ProgrammingError: + pass + except: + self.fail("Should have raised a ProgrammingError") + + def CheckClosedSetProgressCallback(self): + con = sqlite.connect(":memory:") + con.close() + def progress(): pass + try: + con.set_progress_handler(progress, 100) + self.fail("Should have raised a ProgrammingError") + except sqlite.ProgrammingError: + pass + except: + self.fail("Should have raised a ProgrammingError") + + def CheckClosedCall(self): + con = sqlite.connect(":memory:") + con.close() + try: + con() + self.fail("Should have raised a ProgrammingError") + except sqlite.ProgrammingError: + pass + except: + self.fail("Should have raised a ProgrammingError") + +class ClosedCurTests(unittest.TestCase): + def setUp(self): + pass + + def tearDown(self): + pass + + def CheckClosed(self): + con = sqlite.connect(":memory:") + cur = con.cursor() + cur.close() + + for method_name in ("execute", "executemany", "executescript", "fetchall", "fetchmany", "fetchone"): + if method_name in ("execute", "executescript"): + params = ("select 4 union select 5",) + elif method_name == "executemany": + params = ("insert into foo(bar) values (?)", [(3,), (4,)]) + else: + params = [] + + try: + method = getattr(cur, method_name) + + method(*params) + self.fail("Should have raised a ProgrammingError: method " + method_name) + except sqlite.ProgrammingError: + pass + except: + self.fail("Should have raised a ProgrammingError: " + method_name) + def suite(): module_suite = unittest.makeSuite(ModuleTests, "Check") connection_suite = unittest.makeSuite(ConnectionTests, "Check") @@ -770,8 +866,9 @@ thread_suite = unittest.makeSuite(ThreadTests, "Check") constructor_suite = unittest.makeSuite(ConstructorTests, "Check") ext_suite = unittest.makeSuite(ExtensionTests, "Check") - closed_suite = unittest.makeSuite(ClosedTests, "Check") - return unittest.TestSuite((module_suite, connection_suite, cursor_suite, thread_suite, constructor_suite, ext_suite, closed_suite)) + closed_con_suite = unittest.makeSuite(ClosedConTests, "Check") + closed_cur_suite = unittest.makeSuite(ClosedCurTests, "Check") + return unittest.TestSuite((module_suite, connection_suite, cursor_suite, thread_suite, constructor_suite, ext_suite, closed_con_suite, closed_cur_suite)) def test(): runner = unittest.TextTestRunner() Modified: python/trunk/Lib/sqlite3/test/regression.py ============================================================================== --- python/trunk/Lib/sqlite3/test/regression.py (original) +++ python/trunk/Lib/sqlite3/test/regression.py Fri Mar 5 10:12:37 2010 @@ -70,16 +70,6 @@ cur.execute('select 1 as "foo baz"') self.assertEqual(cur.description[0][0], "foo baz") - def CheckStatementAvailable(self): - # pysqlite up to 2.3.2 crashed on this, because the active statement handle was not checked - # before trying to fetch data from it. close() destroys the active statement ... - con = sqlite.connect(":memory:", detect_types=sqlite.PARSE_DECLTYPES) - cur = con.cursor() - cur.execute("select 4 union select 5") - cur.close() - cur.fetchone() - cur.fetchone() - def CheckStatementFinalizationOnCloseDb(self): # pysqlite versions <= 2.3.3 only finalized statements in the statement # cache when closing the database. statements that were still @@ -167,6 +157,107 @@ self.assertRaises(UnicodeEncodeError, setattr, con, "isolation_level", u"\xe9") + def CheckCursorConstructorCallCheck(self): + """ + Verifies that cursor methods check wether base class __init__ was called. + """ + class Cursor(sqlite.Cursor): + def __init__(self, con): + pass + + con = sqlite.connect(":memory:") + cur = Cursor(con) + try: + cur.execute("select 4+5").fetchall() + self.fail("should have raised ProgrammingError") + except sqlite.ProgrammingError: + pass + except: + self.fail("should have raised ProgrammingError") + + def CheckConnectionConstructorCallCheck(self): + """ + Verifies that connection methods check wether base class __init__ was called. + """ + class Connection(sqlite.Connection): + def __init__(self, name): + pass + + con = Connection(":memory:") + try: + cur = con.cursor() + self.fail("should have raised ProgrammingError") + except sqlite.ProgrammingError: + pass + except: + self.fail("should have raised ProgrammingError") + + def CheckCursorRegistration(self): + """ + Verifies that subclassed cursor classes are correctly registered with + the connection object, too. (fetch-across-rollback problem) + """ + class Connection(sqlite.Connection): + def cursor(self): + return Cursor(self) + + class Cursor(sqlite.Cursor): + def __init__(self, con): + sqlite.Cursor.__init__(self, con) + + con = Connection(":memory:") + cur = con.cursor() + cur.execute("create table foo(x)") + cur.executemany("insert into foo(x) values (?)", [(3,), (4,), (5,)]) + cur.execute("select x from foo") + con.rollback() + try: + cur.fetchall() + self.fail("should have raised InterfaceError") + except sqlite.InterfaceError: + pass + except: + self.fail("should have raised InterfaceError") + + def CheckAutoCommit(self): + """ + Verifies that creating a connection in autocommit mode works. + 2.5.3 introduced a regression so that these could no longer + be created. + """ + con = sqlite.connect(":memory:", isolation_level=None) + + def CheckPragmaAutocommit(self): + """ + Verifies that running a PRAGMA statement that does an autocommit does + work. This did not work in 2.5.3/2.5.4. + """ + con = sqlite.connect(":memory:") + cur = con.cursor() + cur.execute("create table foo(bar)") + cur.execute("insert into foo(bar) values (5)") + + cur.execute("pragma page_size") + row = cur.fetchone() + + def CheckSetDict(self): + """ + See http://bugs.python.org/issue7478 + + It was possible to successfully register callbacks that could not be + hashed. Return codes of PyDict_SetItem were not checked properly. + """ + class NotHashable: + def __call__(self, *args, **kw): + pass + def __hash__(self): + raise TypeError() + var = NotHashable() + con = sqlite.connect(":memory:") + self.assertRaises(TypeError, con.create_function, var) + self.assertRaises(TypeError, con.create_aggregate, var) + self.assertRaises(TypeError, con.set_authorizer, var) + self.assertRaises(TypeError, con.set_progress_handler, var) def suite(): regression_suite = unittest.makeSuite(RegressionTests, "Check") Modified: python/trunk/Lib/sqlite3/test/transactions.py ============================================================================== --- python/trunk/Lib/sqlite3/test/transactions.py (original) +++ python/trunk/Lib/sqlite3/test/transactions.py Fri Mar 5 10:12:37 2010 @@ -148,6 +148,26 @@ # NO self.con2.rollback() HERE!!! self.con1.commit() + def CheckRollbackCursorConsistency(self): + """ + Checks if cursors on the connection are set into a "reset" state + when a rollback is done on the connection. + """ + con = sqlite.connect(":memory:") + cur = con.cursor() + cur.execute("create table test(x)") + cur.execute("insert into test(x) values (5)") + cur.execute("select 1 union select 2 union select 3") + + con.rollback() + try: + cur.fetchall() + self.fail("InterfaceError should have been raised") + except sqlite.InterfaceError, e: + pass + except: + self.fail("InterfaceError should have been raised") + class SpecialCommandTests(unittest.TestCase): def setUp(self): self.con = sqlite.connect(":memory:") Modified: python/trunk/Lib/sqlite3/test/types.py ============================================================================== --- python/trunk/Lib/sqlite3/test/types.py (original) +++ python/trunk/Lib/sqlite3/test/types.py Fri Mar 5 10:12:37 2010 @@ -78,6 +78,33 @@ row = self.cur.fetchone() self.assertEqual(row[0], u"?sterreich") + def CheckNonUtf8_Default(self): + try: + self.cur.execute("select ?", (chr(150),)) + self.fail("should have raised a ProgrammingError") + except sqlite.ProgrammingError: + pass + + def CheckNonUtf8_TextFactoryString(self): + orig_text_factory = self.con.text_factory + try: + self.con.text_factory = str + self.cur.execute("select ?", (chr(150),)) + finally: + self.con.text_factory = orig_text_factory + + def CheckNonUtf8_TextFactoryOptimizedUnicode(self): + orig_text_factory = self.con.text_factory + try: + try: + self.con.text_factory = sqlite.OptimizedUnicode + self.cur.execute("select ?", (chr(150),)) + self.fail("should have raised a ProgrammingError") + except sqlite.ProgrammingError: + pass + finally: + self.con.text_factory = orig_text_factory + class DeclTypesTests(unittest.TestCase): class Foo: def __init__(self, _val): Modified: python/trunk/Misc/NEWS ============================================================================== --- python/trunk/Misc/NEWS (original) +++ python/trunk/Misc/NEWS Fri Mar 5 10:12:37 2010 @@ -103,6 +103,9 @@ Extension Modules ----------------- +- The sqlite3 module was updated to pysqlite 2.6.0. This fixes several obscure + bugs and allows loading SQLite extensions from shared libraries. + - Issue #7808: Fix reference leaks in _bsddb and related tests. - Issue #6544: fix a reference leak in the kqueue implementation's error Modified: python/trunk/Modules/_sqlite/cache.c ============================================================================== --- python/trunk/Modules/_sqlite/cache.c (original) +++ python/trunk/Modules/_sqlite/cache.c Fri Mar 5 10:12:37 2010 @@ -1,6 +1,6 @@ /* cache .c - a LRU cache * - * Copyright (C) 2004-2007 Gerhard H?ring + * Copyright (C) 2004-2010 Gerhard H?ring * * This file is part of pysqlite. * @@ -21,6 +21,7 @@ * 3. This notice may not be removed or altered from any source distribution. */ +#include "sqlitecompat.h" #include "cache.h" #include Modified: python/trunk/Modules/_sqlite/cache.h ============================================================================== --- python/trunk/Modules/_sqlite/cache.h (original) +++ python/trunk/Modules/_sqlite/cache.h Fri Mar 5 10:12:37 2010 @@ -1,6 +1,6 @@ /* cache.h - definitions for the LRU cache * - * Copyright (C) 2004-2007 Gerhard H?ring + * Copyright (C) 2004-2010 Gerhard H?ring * * This file is part of pysqlite. * Modified: python/trunk/Modules/_sqlite/connection.c ============================================================================== --- python/trunk/Modules/_sqlite/connection.c (original) +++ python/trunk/Modules/_sqlite/connection.c Fri Mar 5 10:12:37 2010 @@ -1,6 +1,6 @@ /* connection.c - the connection type * - * Copyright (C) 2004-2007 Gerhard H?ring + * Copyright (C) 2004-2010 Gerhard H?ring * * This file is part of pysqlite. * @@ -35,7 +35,14 @@ #define ACTION_FINALIZE 1 #define ACTION_RESET 2 +#if SQLITE_VERSION_NUMBER >= 3003008 +#ifndef SQLITE_OMIT_LOAD_EXTENSION +#define HAVE_LOAD_EXTENSION +#endif +#endif + static int pysqlite_connection_set_isolation_level(pysqlite_Connection* self, PyObject* isolation_level); +static void _pysqlite_drop_unused_cursor_references(pysqlite_Connection* self); static void _sqlite3_result_error(sqlite3_context* ctx, const char* errmsg, int len) @@ -73,10 +80,13 @@ return -1; } + self->initialized = 1; + self->begin_statement = NULL; self->statement_cache = NULL; self->statements = NULL; + self->cursors = NULL; Py_INCREF(Py_None); self->row_factory = Py_None; @@ -150,11 +160,15 @@ return -1; } + self->created_statements = 0; + self->created_cursors = 0; + + /* Create lists of weak references to statements/cursors */ self->statements = PyList_New(0); - if (!self->statements) { + self->cursors = PyList_New(0); + if (!self->statements || !self->cursors) { return -1; } - self->created_statements = 0; /* By default, the Cache class INCREFs the factory in its initializer, and * decrefs it in its deallocator method. Since this would create a circular @@ -218,11 +232,12 @@ } /* action in (ACTION_RESET, ACTION_FINALIZE) */ -void pysqlite_do_all_statements(pysqlite_Connection* self, int action) +void pysqlite_do_all_statements(pysqlite_Connection* self, int action, int reset_cursors) { int i; PyObject* weakref; PyObject* statement; + pysqlite_Cursor* cursor; for (i = 0; i < PyList_Size(self->statements); i++) { weakref = PyList_GetItem(self->statements, i); @@ -235,6 +250,16 @@ } } } + + if (reset_cursors) { + for (i = 0; i < PyList_Size(self->cursors); i++) { + weakref = PyList_GetItem(self->cursors, i); + cursor = (pysqlite_Cursor*)PyWeakref_GetObject(weakref); + if ((PyObject*)cursor != Py_None) { + cursor->reset = 1; + } + } + } } void pysqlite_connection_dealloc(pysqlite_Connection* self) @@ -263,17 +288,43 @@ Py_XDECREF(self->text_factory); Py_XDECREF(self->collations); Py_XDECREF(self->statements); + Py_XDECREF(self->cursors); self->ob_type->tp_free((PyObject*)self); } +/* + * Registers a cursor with the connection. + * + * 0 => error; 1 => ok + */ +int pysqlite_connection_register_cursor(pysqlite_Connection* connection, PyObject* cursor) +{ + PyObject* weakref; + + weakref = PyWeakref_NewRef((PyObject*)cursor, NULL); + if (!weakref) { + goto error; + } + + if (PyList_Append(connection->cursors, weakref) != 0) { + Py_CLEAR(weakref); + goto error; + } + + Py_DECREF(weakref); + + return 1; +error: + return 0; +} + PyObject* pysqlite_connection_cursor(pysqlite_Connection* self, PyObject* args, PyObject* kwargs) { static char *kwlist[] = {"factory", NULL, NULL}; PyObject* factory = NULL; PyObject* cursor; - if (!PyArg_ParseTupleAndKeywords(args, kwargs, "|O", kwlist, &factory)) { return NULL; @@ -289,6 +340,8 @@ cursor = PyObject_CallFunction(factory, "O", self); + _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); @@ -307,7 +360,7 @@ return NULL; } - pysqlite_do_all_statements(self, ACTION_FINALIZE); + pysqlite_do_all_statements(self, ACTION_FINALIZE, 1); if (self->db) { if (self->apsw_connection) { @@ -341,6 +394,11 @@ */ int pysqlite_check_connection(pysqlite_Connection* con) { + if (!con->initialized) { + PyErr_SetString(pysqlite_ProgrammingError, "Base Connection.__init__ not called."); + return 0; + } + if (!con->db) { PyErr_SetString(pysqlite_ProgrammingError, "Cannot operate on a closed database."); return 0; @@ -399,6 +457,8 @@ } if (self->inTransaction) { + pysqlite_do_all_statements(self, ACTION_RESET, 0); + Py_BEGIN_ALLOW_THREADS rc = sqlite3_prepare(self->db, "COMMIT", -1, &statement, &tail); Py_END_ALLOW_THREADS @@ -443,7 +503,7 @@ } if (self->inTransaction) { - pysqlite_do_all_statements(self, ACTION_RESET); + pysqlite_do_all_statements(self, ACTION_RESET, 1); Py_BEGIN_ALLOW_THREADS rc = sqlite3_prepare(self->db, "ROLLBACK", -1, &statement, &tail); @@ -724,7 +784,7 @@ #endif } -void _pysqlite_drop_unused_statement_references(pysqlite_Connection* self) +static void _pysqlite_drop_unused_statement_references(pysqlite_Connection* self) { PyObject* new_list; PyObject* weakref; @@ -756,6 +816,38 @@ self->statements = new_list; } +static void _pysqlite_drop_unused_cursor_references(pysqlite_Connection* self) +{ + PyObject* new_list; + PyObject* weakref; + int i; + + /* we only need to do this once in a while */ + if (self->created_cursors++ < 200) { + return; + } + + self->created_cursors = 0; + + new_list = PyList_New(0); + if (!new_list) { + return; + } + + for (i = 0; i < PyList_Size(self->cursors); i++) { + weakref = PyList_GetItem(self->cursors, i); + if (PyWeakref_GetObject(weakref) != Py_None) { + if (PyList_Append(new_list, weakref) != 0) { + Py_DECREF(new_list); + return; + } + } + } + + Py_DECREF(self->cursors); + self->cursors = new_list; +} + PyObject* pysqlite_connection_create_function(pysqlite_Connection* self, PyObject* args, PyObject* kwargs) { static char *kwlist[] = {"name", "narg", "func", NULL, NULL}; @@ -765,6 +857,10 @@ int narg; int rc; + if (!pysqlite_check_thread(self) || !pysqlite_check_connection(self)) { + return NULL; + } + if (!PyArg_ParseTupleAndKeywords(args, kwargs, "siO", kwlist, &name, &narg, &func)) { @@ -778,7 +874,8 @@ PyErr_SetString(pysqlite_OperationalError, "Error creating function"); return NULL; } else { - PyDict_SetItem(self->function_pinboard, func, Py_None); + if (PyDict_SetItem(self->function_pinboard, func, Py_None) == -1) + return NULL; Py_INCREF(Py_None); return Py_None; @@ -794,6 +891,10 @@ static char *kwlist[] = { "name", "n_arg", "aggregate_class", NULL }; int rc; + if (!pysqlite_check_thread(self) || !pysqlite_check_connection(self)) { + return NULL; + } + if (!PyArg_ParseTupleAndKeywords(args, kwargs, "siO:create_aggregate", kwlist, &name, &n_arg, &aggregate_class)) { return NULL; @@ -805,7 +906,8 @@ PyErr_SetString(pysqlite_OperationalError, "Error creating aggregate"); return NULL; } else { - PyDict_SetItem(self->function_pinboard, aggregate_class, Py_None); + if (PyDict_SetItem(self->function_pinboard, aggregate_class, Py_None) == -1) + return NULL; Py_INCREF(Py_None); return Py_None; @@ -877,13 +979,17 @@ return rc; } -PyObject* pysqlite_connection_set_authorizer(pysqlite_Connection* self, PyObject* args, PyObject* kwargs) +static PyObject* pysqlite_connection_set_authorizer(pysqlite_Connection* self, PyObject* args, PyObject* kwargs) { PyObject* authorizer_cb; static char *kwlist[] = { "authorizer_callback", NULL }; int rc; + if (!pysqlite_check_thread(self) || !pysqlite_check_connection(self)) { + return NULL; + } + if (!PyArg_ParseTupleAndKeywords(args, kwargs, "O:set_authorizer", kwlist, &authorizer_cb)) { return NULL; @@ -895,20 +1001,25 @@ PyErr_SetString(pysqlite_OperationalError, "Error setting authorizer callback"); return NULL; } else { - PyDict_SetItem(self->function_pinboard, authorizer_cb, Py_None); + if (PyDict_SetItem(self->function_pinboard, authorizer_cb, Py_None) == -1) + return NULL; Py_INCREF(Py_None); return Py_None; } } -PyObject* pysqlite_connection_set_progress_handler(pysqlite_Connection* self, PyObject* args, PyObject* kwargs) +static PyObject* pysqlite_connection_set_progress_handler(pysqlite_Connection* self, PyObject* args, PyObject* kwargs) { PyObject* progress_handler; int n; static char *kwlist[] = { "progress_handler", "n", NULL }; + if (!pysqlite_check_thread(self) || !pysqlite_check_connection(self)) { + return NULL; + } + if (!PyArg_ParseTupleAndKeywords(args, kwargs, "Oi:set_progress_handler", kwlist, &progress_handler, &n)) { return NULL; @@ -919,13 +1030,64 @@ sqlite3_progress_handler(self->db, 0, 0, (void*)0); } else { sqlite3_progress_handler(self->db, n, _progress_handler, progress_handler); - PyDict_SetItem(self->function_pinboard, progress_handler, Py_None); + if (PyDict_SetItem(self->function_pinboard, progress_handler, Py_None) == -1) + return NULL; } Py_INCREF(Py_None); return Py_None; } +#ifdef HAVE_LOAD_EXTENSION +static PyObject* pysqlite_enable_load_extension(pysqlite_Connection* self, PyObject* args) +{ + int rc; + int onoff; + + if (!pysqlite_check_thread(self) || !pysqlite_check_connection(self)) { + return NULL; + } + + if (!PyArg_ParseTuple(args, "i", &onoff)) { + return NULL; + } + + rc = sqlite3_enable_load_extension(self->db, onoff); + + if (rc != SQLITE_OK) { + PyErr_SetString(pysqlite_OperationalError, "Error enabling load extension"); + return NULL; + } else { + Py_INCREF(Py_None); + return Py_None; + } +} + +static PyObject* pysqlite_load_extension(pysqlite_Connection* self, PyObject* args) +{ + int rc; + char* extension_name; + char* errmsg; + + if (!pysqlite_check_thread(self) || !pysqlite_check_connection(self)) { + return NULL; + } + + if (!PyArg_ParseTuple(args, "s", &extension_name)) { + return NULL; + } + + rc = sqlite3_load_extension(self->db, extension_name, 0, &errmsg); + if (rc != 0) { + PyErr_SetString(pysqlite_OperationalError, errmsg); + return NULL; + } else { + Py_INCREF(Py_None); + return Py_None; + } +} +#endif + int pysqlite_check_thread(pysqlite_Connection* self) { #ifdef WITH_THREAD @@ -1020,6 +1182,10 @@ PyObject* weakref; int rc; + if (!pysqlite_check_thread(self) || !pysqlite_check_connection(self)) { + return NULL; + } + if (!PyArg_ParseTuple(args, "O", &sql)) { return NULL; } @@ -1309,9 +1475,11 @@ } if (callable != Py_None) { - PyDict_SetItem(self->collations, uppercase_name, callable); + if (PyDict_SetItem(self->collations, uppercase_name, callable) == -1) + goto finally; } else { - PyDict_DelItem(self->collations, uppercase_name); + if (PyDict_DelItem(self->collations, uppercase_name) == -1) + goto finally; } rc = sqlite3_create_collation(self->db, @@ -1400,6 +1568,12 @@ PyDoc_STR("Creates a new aggregate. Non-standard.")}, {"set_authorizer", (PyCFunction)pysqlite_connection_set_authorizer, METH_VARARGS|METH_KEYWORDS, PyDoc_STR("Sets authorizer callback. Non-standard.")}, + #ifdef HAVE_LOAD_EXTENSION + {"enable_load_extension", (PyCFunction)pysqlite_enable_load_extension, METH_VARARGS, + PyDoc_STR("Enable dynamic loading of SQLite extension modules. Non-standard.")}, + {"load_extension", (PyCFunction)pysqlite_load_extension, METH_VARARGS, + PyDoc_STR("Load SQLite extension module. Non-standard.")}, + #endif {"set_progress_handler", (PyCFunction)pysqlite_connection_set_progress_handler, METH_VARARGS|METH_KEYWORDS, PyDoc_STR("Sets progress handler callback. Non-standard.")}, {"execute", (PyCFunction)pysqlite_connection_execute, METH_VARARGS, Modified: python/trunk/Modules/_sqlite/connection.h ============================================================================== --- python/trunk/Modules/_sqlite/connection.h (original) +++ python/trunk/Modules/_sqlite/connection.h Fri Mar 5 10:12:37 2010 @@ -1,6 +1,6 @@ /* connection.h - definitions for the connection type * - * Copyright (C) 2004-2007 Gerhard H?ring + * Copyright (C) 2004-2010 Gerhard H?ring * * This file is part of pysqlite. * @@ -63,17 +63,21 @@ * used from the same thread it was created in */ int check_same_thread; + int initialized; + /* thread identification of the thread the connection was created in */ long thread_ident; pysqlite_Cache* statement_cache; - /* A list of weak references to statements used within this connection */ + /* Lists of weak references to statements and cursors used within this connection */ PyObject* statements; + PyObject* cursors; - /* a counter for how many statements were created in the connection. May be + /* Counters for how many statements/cursors were created in the connection. May be * reset to 0 at certain intervals */ int created_statements; + int created_cursors; PyObject* row_factory; @@ -125,6 +129,7 @@ PyObject* pysqlite_connection_new(PyTypeObject* type, PyObject* args, PyObject* kw); int pysqlite_connection_init(pysqlite_Connection* self, PyObject* args, PyObject* kwargs); +int pysqlite_connection_register_cursor(pysqlite_Connection* connection, PyObject* cursor); int pysqlite_check_thread(pysqlite_Connection* self); int pysqlite_check_connection(pysqlite_Connection* con); Modified: python/trunk/Modules/_sqlite/cursor.c ============================================================================== --- python/trunk/Modules/_sqlite/cursor.c (original) +++ python/trunk/Modules/_sqlite/cursor.c Fri Mar 5 10:12:37 2010 @@ -1,6 +1,6 @@ /* cursor.c - the cursor type * - * Copyright (C) 2004-2007 Gerhard H?ring + * Copyright (C) 2004-2010 Gerhard H?ring * * This file is part of pysqlite. * @@ -36,6 +36,8 @@ 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 pysqlite_StatementKind detect_statement_type(char* statement) { char buf[20]; @@ -74,7 +76,7 @@ } } -int pysqlite_cursor_init(pysqlite_Cursor* self, PyObject* args, PyObject* kwargs) +static int pysqlite_cursor_init(pysqlite_Cursor* self, PyObject* args, PyObject* kwargs) { pysqlite_Connection* connection; @@ -87,6 +89,7 @@ self->connection = connection; self->statement = NULL; self->next_row = NULL; + self->in_weakreflist = NULL; self->row_cast_map = PyList_New(0); if (!self->row_cast_map) { @@ -100,6 +103,8 @@ self->lastrowid= Py_None; self->arraysize = 1; + self->closed = 0; + self->reset = 0; self->rowcount = -1L; @@ -110,10 +115,16 @@ return -1; } + if (!pysqlite_connection_register_cursor(connection, (PyObject*)self)) { + return -1; + } + + self->initialized = 1; + return 0; } -void pysqlite_cursor_dealloc(pysqlite_Cursor* self) +static void pysqlite_cursor_dealloc(pysqlite_Cursor* self) { int rc; @@ -130,7 +141,11 @@ Py_XDECREF(self->row_factory); Py_XDECREF(self->next_row); - Py_TYPE(self)->tp_free((PyObject*)self); + if (self->in_weakreflist != NULL) { + PyObject_ClearWeakRefs((PyObject*)self); + } + + self->ob_type->tp_free((PyObject*)self); } PyObject* _pysqlite_get_converter(PyObject* key) @@ -301,6 +316,11 @@ char buf[200]; const char* colname; + if (self->reset) { + PyErr_SetString(pysqlite_InterfaceError, errmsg_fetch_across_rollback); + return NULL; + } + Py_BEGIN_ALLOW_THREADS numcols = sqlite3_data_count(self->statement->st); Py_END_ALLOW_THREADS @@ -406,6 +426,26 @@ return row; } +/* + * Checks if a cursor object is usable. + * + * 0 => error; 1 => ok + */ +static int check_cursor(pysqlite_Cursor* cur) +{ + if (!cur->initialized) { + PyErr_SetString(pysqlite_ProgrammingError, "Base Cursor.__init__ not called."); + return 0; + } + + if (cur->closed) { + PyErr_SetString(pysqlite_ProgrammingError, "Cannot operate on a closed cursor."); + return 0; + } else { + return pysqlite_check_thread(cur->connection) && pysqlite_check_connection(cur->connection); + } +} + PyObject* _pysqlite_query_execute(pysqlite_Cursor* self, int multiple, PyObject* args) { PyObject* operation; @@ -425,13 +465,15 @@ PyObject* second_argument = NULL; int allow_8bit_chars; - if (!pysqlite_check_thread(self->connection) || !pysqlite_check_connection(self->connection)) { + if (!check_cursor(self)) { return NULL; } + self->reset = 0; + /* Make shooting yourself in the foot with not utf-8 decodable 8-bit-strings harder */ allow_8bit_chars = ((self->connection->text_factory != (PyObject*)&PyUnicode_Type) && - (self->connection->text_factory != (PyObject*)&PyUnicode_Type && pysqlite_OptimizedUnicode)); + (self->connection->text_factory != pysqlite_OptimizedUnicode)); Py_XDECREF(self->next_row); self->next_row = NULL; @@ -753,16 +795,17 @@ sqlite3_stmt* statement; int rc; PyObject* result; - int statement_completed = 0; if (!PyArg_ParseTuple(args, "O", &script_obj)) { return NULL; } - if (!pysqlite_check_thread(self->connection) || !pysqlite_check_connection(self->connection)) { + if (!check_cursor(self)) { return NULL; } + self->reset = 0; + if (PyString_Check(script_obj)) { script_cstr = PyString_AsString(script_obj); } else if (PyUnicode_Check(script_obj)) { @@ -785,11 +828,6 @@ Py_DECREF(result); while (1) { - if (!sqlite3_complete(script_cstr)) { - break; - } - statement_completed = 1; - Py_BEGIN_ALLOW_THREADS rc = sqlite3_prepare(self->connection->db, script_cstr, @@ -820,15 +858,15 @@ _pysqlite_seterror(self->connection->db, NULL); goto error; } + + if (*script_cstr == (char)0) { + break; + } } error: Py_XDECREF(script_str); - if (!statement_completed) { - PyErr_SetString(pysqlite_ProgrammingError, "you did not provide a complete SQL statement"); - } - if (PyErr_Occurred()) { return NULL; } else { @@ -849,7 +887,12 @@ PyObject* next_row; int rc; - if (!pysqlite_check_thread(self->connection) || !pysqlite_check_connection(self->connection)) { + if (!check_cursor(self)) { + return NULL; + } + + if (self->reset) { + PyErr_SetString(pysqlite_InterfaceError, errmsg_fetch_across_rollback); return NULL; } @@ -992,6 +1035,8 @@ Py_CLEAR(self->statement); } + self->closed = 1; + Py_INCREF(Py_None); return Py_None; } @@ -1052,12 +1097,12 @@ 0, /* tp_getattro */ 0, /* tp_setattro */ 0, /* tp_as_buffer */ - Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_ITER|Py_TPFLAGS_BASETYPE, /* tp_flags */ + Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_ITER|Py_TPFLAGS_BASETYPE|Py_TPFLAGS_HAVE_WEAKREFS, /* tp_flags */ cursor_doc, /* tp_doc */ 0, /* tp_traverse */ 0, /* tp_clear */ 0, /* tp_richcompare */ - 0, /* tp_weaklistoffset */ + offsetof(pysqlite_Cursor, in_weakreflist), /* tp_weaklistoffset */ (getiterfunc)pysqlite_cursor_getiter, /* tp_iter */ (iternextfunc)pysqlite_cursor_iternext, /* tp_iternext */ cursor_methods, /* tp_methods */ Modified: python/trunk/Modules/_sqlite/cursor.h ============================================================================== --- python/trunk/Modules/_sqlite/cursor.h (original) +++ python/trunk/Modules/_sqlite/cursor.h Fri Mar 5 10:12:37 2010 @@ -1,6 +1,6 @@ /* cursor.h - definitions for the cursor type * - * Copyright (C) 2004-2007 Gerhard H?ring + * Copyright (C) 2004-2010 Gerhard H?ring * * This file is part of pysqlite. * @@ -40,9 +40,14 @@ long rowcount; PyObject* row_factory; pysqlite_Statement* statement; + int closed; + int reset; + int initialized; /* the next row to be returned, NULL if no next row available */ PyObject* next_row; + + PyObject* in_weakreflist; /* List of weak references */ } pysqlite_Cursor; typedef enum { @@ -53,8 +58,6 @@ extern PyTypeObject pysqlite_CursorType; -int pysqlite_cursor_init(pysqlite_Cursor* self, PyObject* args, PyObject* kwargs); -void pysqlite_cursor_dealloc(pysqlite_Cursor* self); PyObject* pysqlite_cursor_execute(pysqlite_Cursor* self, PyObject* args); PyObject* pysqlite_cursor_executemany(pysqlite_Cursor* self, PyObject* args); PyObject* pysqlite_cursor_getiter(pysqlite_Cursor *self); Modified: python/trunk/Modules/_sqlite/module.c ============================================================================== --- python/trunk/Modules/_sqlite/module.c (original) +++ python/trunk/Modules/_sqlite/module.c Fri Mar 5 10:12:37 2010 @@ -1,6 +1,6 @@ /* module.c - the module itself * - * Copyright (C) 2004-2007 Gerhard H?ring + * Copyright (C) 2004-2010 Gerhard H?ring * * This file is part of pysqlite. * Modified: python/trunk/Modules/_sqlite/module.h ============================================================================== --- python/trunk/Modules/_sqlite/module.h (original) +++ python/trunk/Modules/_sqlite/module.h Fri Mar 5 10:12:37 2010 @@ -1,6 +1,6 @@ /* module.h - definitions for the module * - * Copyright (C) 2004-2007 Gerhard H?ring + * Copyright (C) 2004-2010 Gerhard H?ring * * This file is part of pysqlite. * @@ -25,7 +25,7 @@ #define PYSQLITE_MODULE_H #include "Python.h" -#define PYSQLITE_VERSION "2.4.1" +#define PYSQLITE_VERSION "2.6.0" extern PyObject* pysqlite_Error; extern PyObject* pysqlite_Warning; Modified: python/trunk/Modules/_sqlite/prepare_protocol.c ============================================================================== --- python/trunk/Modules/_sqlite/prepare_protocol.c (original) +++ python/trunk/Modules/_sqlite/prepare_protocol.c Fri Mar 5 10:12:37 2010 @@ -1,6 +1,6 @@ /* prepare_protocol.c - the protocol for preparing values for SQLite * - * Copyright (C) 2005-2006 Gerhard H?ring + * Copyright (C) 2005-2010 Gerhard H?ring * * This file is part of pysqlite. * @@ -21,6 +21,7 @@ * 3. This notice may not be removed or altered from any source distribution. */ +#include "sqlitecompat.h" #include "prepare_protocol.h" int pysqlite_prepare_protocol_init(pysqlite_PrepareProtocol* self, PyObject* args, PyObject* kwargs) Modified: python/trunk/Modules/_sqlite/prepare_protocol.h ============================================================================== --- python/trunk/Modules/_sqlite/prepare_protocol.h (original) +++ python/trunk/Modules/_sqlite/prepare_protocol.h Fri Mar 5 10:12:37 2010 @@ -1,6 +1,6 @@ /* prepare_protocol.h - the protocol for preparing values for SQLite * - * Copyright (C) 2005-2007 Gerhard H?ring + * Copyright (C) 2005-2010 Gerhard H?ring * * This file is part of pysqlite. * Modified: python/trunk/Modules/_sqlite/row.c ============================================================================== --- python/trunk/Modules/_sqlite/row.c (original) +++ python/trunk/Modules/_sqlite/row.c Fri Mar 5 10:12:37 2010 @@ -1,6 +1,6 @@ /* row.c - an enhanced tuple for database rows * - * Copyright (C) 2005-2006 Gerhard H?ring + * Copyright (C) 2005-2010 Gerhard H?ring * * This file is part of pysqlite. * @@ -177,17 +177,17 @@ static PyObject* pysqlite_row_richcompare(pysqlite_Row *self, PyObject *_other, int opid) { if (opid != Py_EQ && opid != Py_NE) { - Py_INCREF(Py_NotImplemented); - return Py_NotImplemented; + Py_INCREF(Py_NotImplemented); + return Py_NotImplemented; } if (PyType_IsSubtype(Py_TYPE(_other), &pysqlite_RowType)) { - pysqlite_Row *other = (pysqlite_Row *)_other; - PyObject *res = PyObject_RichCompare(self->description, other->description, opid); - if ((opid == Py_EQ && res == Py_True) - || (opid == Py_NE && res == Py_False)) { - Py_DECREF(res); - return PyObject_RichCompare(self->data, other->data, opid); - } + pysqlite_Row *other = (pysqlite_Row *)_other; + PyObject *res = PyObject_RichCompare(self->description, other->description, opid); + if ((opid == Py_EQ && res == Py_True) + || (opid == Py_NE && res == Py_False)) { + Py_DECREF(res); + return PyObject_RichCompare(self->data, other->data, opid); + } } Py_INCREF(Py_NotImplemented); return Py_NotImplemented; Modified: python/trunk/Modules/_sqlite/row.h ============================================================================== --- python/trunk/Modules/_sqlite/row.h (original) +++ python/trunk/Modules/_sqlite/row.h Fri Mar 5 10:12:37 2010 @@ -1,6 +1,6 @@ /* row.h - an enhanced tuple for database rows * - * Copyright (C) 2005-2007 Gerhard H?ring + * Copyright (C) 2005-2010 Gerhard H?ring * * This file is part of pysqlite. * Modified: python/trunk/Modules/_sqlite/sqlitecompat.h ============================================================================== --- python/trunk/Modules/_sqlite/sqlitecompat.h (original) +++ python/trunk/Modules/_sqlite/sqlitecompat.h Fri Mar 5 10:12:37 2010 @@ -1,6 +1,6 @@ /* sqlitecompat.h - compatibility macros * - * Copyright (C) 2006 Gerhard H?ring + * Copyright (C) 2006-2010 Gerhard H?ring * * This file is part of pysqlite. * @@ -21,6 +21,8 @@ * 3. This notice may not be removed or altered from any source distribution. */ +#include "Python.h" + #ifndef PYSQLITE_COMPAT_H #define PYSQLITE_COMPAT_H @@ -31,4 +33,31 @@ typedef int (*lenfunc)(PyObject*); #endif + +/* define PyDict_CheckExact for pre-2.4 versions of Python */ +#ifndef PyDict_CheckExact +#define PyDict_CheckExact(op) ((op)->ob_type == &PyDict_Type) +#endif + +/* define Py_CLEAR for pre-2.4 versions of Python */ +#ifndef Py_CLEAR +#define Py_CLEAR(op) \ + do { \ + if (op) { \ + PyObject *tmp = (PyObject *)(op); \ + (op) = NULL; \ + Py_DECREF(tmp); \ + } \ + } while (0) +#endif + +#ifndef PyVarObject_HEAD_INIT +#define PyVarObject_HEAD_INIT(type, size) \ + PyObject_HEAD_INIT(type) size, +#endif + +#ifndef Py_TYPE +#define Py_TYPE(ob) ((ob)->ob_type) +#endif + #endif Modified: python/trunk/Modules/_sqlite/statement.c ============================================================================== --- python/trunk/Modules/_sqlite/statement.c (original) +++ python/trunk/Modules/_sqlite/statement.c Fri Mar 5 10:12:37 2010 @@ -1,6 +1,6 @@ /* statement.c - the statement type * - * Copyright (C) 2005-2007 Gerhard H?ring + * Copyright (C) 2005-2010 Gerhard H?ring * * This file is part of pysqlite. * Modified: python/trunk/Modules/_sqlite/statement.h ============================================================================== --- python/trunk/Modules/_sqlite/statement.h (original) +++ python/trunk/Modules/_sqlite/statement.h Fri Mar 5 10:12:37 2010 @@ -1,6 +1,6 @@ /* statement.h - definitions for the statement type * - * Copyright (C) 2005-2007 Gerhard H?ring + * Copyright (C) 2005-2010 Gerhard H?ring * * This file is part of pysqlite. * Modified: python/trunk/Modules/_sqlite/util.c ============================================================================== --- python/trunk/Modules/_sqlite/util.c (original) +++ python/trunk/Modules/_sqlite/util.c Fri Mar 5 10:12:37 2010 @@ -1,6 +1,6 @@ /* util.c - various utility functions * - * Copyright (C) 2005-2007 Gerhard H?ring + * Copyright (C) 2005-2010 Gerhard H?ring * * This file is part of pysqlite. * Modified: python/trunk/Modules/_sqlite/util.h ============================================================================== --- python/trunk/Modules/_sqlite/util.h (original) +++ python/trunk/Modules/_sqlite/util.h Fri Mar 5 10:12:37 2010 @@ -1,6 +1,6 @@ /* util.h - various utility functions * - * Copyright (C) 2005-2007 Gerhard H?ring + * Copyright (C) 2005-2010 Gerhard H?ring * * This file is part of pysqlite. * Modified: python/trunk/setup.py ============================================================================== --- python/trunk/setup.py (original) +++ python/trunk/setup.py Fri Mar 5 10:12:37 2010 @@ -955,6 +955,8 @@ else: sqlite_defines.append(('MODULE_NAME', '\\"sqlite3\\"')) + # Comment this out if you want the sqlite3 module to be able to load extensions. + sqlite_defines.append(("SQLITE_OMIT_LOAD_EXTENSION", "1")) if sys.platform == 'darwin': # In every directory on the search path search for a dynamic From nnorwitz at gmail.com Fri Mar 5 10:18:04 2010 From: nnorwitz at gmail.com (Neal Norwitz) Date: Fri, 5 Mar 2010 04:18:04 -0500 Subject: [Python-checkins] Python Regression Test Failures basics (1) Message-ID: <20100305091804.GA28427@kbk-i386-bb.psfb.org> 346 tests OK. 1 test failed: test_subprocess 35 tests skipped: test_aepack test_al test_applesingle test_bsddb185 test_bsddb3 test_cd test_cl test_curses test_epoll test_gl test_imgfile test_ioctl test_kqueue test_linuxaudiodev test_macos test_macostools test_multiprocessing test_ossaudiodev test_py3kwarn test_scriptpackages test_smtpnet test_socketserver test_startfile test_sunaudiodev test_tcl test_timeout test_tk test_ttk_guionly test_ttk_textonly test_unicode_file test_urllib2net test_urllibnet test_winreg test_winsound test_zipfile64 6 skips unexpected on linux2: test_multiprocessing test_ttk_guionly test_epoll test_tk test_ioctl test_ttk_textonly test_grammar test_opcodes test_dict test_builtin test_exceptions test_types test_unittest test_doctest test_doctest2 test_MimeWriter test_SimpleHTTPServer test_StringIO test___all__ test___future__ test__locale test_abc test_abstract_numbers test_aepack test_aepack skipped -- No module named aetypes test_aifc test_al test_al skipped -- No module named al test_anydbm test_applesingle test_applesingle skipped -- No module named MacOS test_argparse test_array test_ascii_formatd test_ast test_asynchat test_asyncore test_atexit test_audioop test_augassign test_base64 test_bastion test_bigaddrspace test_bigmem test_binascii test_binhex test_binop test_bisect test_bool test_bsddb test_bsddb185 test_bsddb185 skipped -- No module named bsddb185 test_bsddb3 test_bsddb3 skipped -- Use of the `bsddb' resource not enabled test_buffer test_bufio test_bytes test_bz2 test_calendar test_call test_capi test_cd test_cd skipped -- No module named cd test_cfgparser test_cgi test_charmapcodec test_cl test_cl skipped -- No module named cl test_class test_cmath test_cmd test_cmd_line test_cmd_line_script test_code test_codeccallbacks test_codecencodings_cn test_codecencodings_hk test_codecencodings_jp test_codecencodings_kr test_codecencodings_tw test_codecmaps_cn fetching http://source.icu-project.org/repos/icu/data/trunk/charset/data/xml/gb-18030-2000.xml ... fetching http://people.freebsd.org/~perky/i18n/EUC-CN.TXT ... fetching http://www.unicode.org/Public/MAPPINGS/VENDORS/MICSFT/WINDOWS/CP936.TXT ... test_codecmaps_hk fetching http://people.freebsd.org/~perky/i18n/BIG5HKSCS-2004.TXT ... test_codecmaps_jp fetching http://www.unicode.org/Public/MAPPINGS/VENDORS/MICSFT/WINDOWS/CP932.TXT ... fetching http://people.freebsd.org/~perky/i18n/EUC-JISX0213.TXT ... fetching http://people.freebsd.org/~perky/i18n/EUC-JP.TXT ... fetching http://www.unicode.org/Public/MAPPINGS/OBSOLETE/EASTASIA/JIS/SHIFTJIS.TXT ... fetching http://people.freebsd.org/~perky/i18n/SHIFT_JISX0213.TXT ... test_codecmaps_kr fetching http://www.unicode.org/Public/MAPPINGS/VENDORS/MICSFT/WINDOWS/CP949.TXT ... fetching http://people.freebsd.org/~perky/i18n/EUC-KR.TXT ... fetching http://www.unicode.org/Public/MAPPINGS/OBSOLETE/EASTASIA/KSC/JOHAB.TXT ... test_codecmaps_tw fetching http://www.unicode.org/Public/MAPPINGS/OBSOLETE/EASTASIA/OTHER/BIG5.TXT ... fetching http://www.unicode.org/Public/MAPPINGS/VENDORS/MICSFT/WINDOWS/CP950.TXT ... test_codecs test_codeop test_coding test_coercion test_collections test_colorsys test_commands test_compare test_compile test_compileall test_compiler test_complex test_complex_args test_contains test_contextlib test_cookie test_cookielib test_copy test_copy_reg test_cpickle test_cprofile test_crypt test_csv test_ctypes test_curses test_curses skipped -- Use of the `curses' resource not enabled test_datetime test_dbm test_decimal test_decorators test_defaultdict test_deque test_descr test_descrtut test_dictcomps test_dictviews test_difflib test_dircache test_dis test_distutils [20679 refs] test_dl test_docxmlrpc test_dumbdbm test_dummy_thread test_dummy_threading test_email test_email_codecs test_email_renamed test_enumerate test_eof test_epoll test_epoll skipped -- kernel doesn't support epoll() test_errno test_exception_variations test_extcall test_fcntl test_file test_file2k test_filecmp test_fileinput test_fileio test_float test_fnmatch test_fork1 test_format test_fpformat test_fractions test_frozen test_ftplib test_funcattrs test_functools test_future test_future3 test_future4 test_future5 test_future_builtins test_gc test_gdbm test_generators test_genericpath test_genexps test_getargs test_getargs2 test_getopt test_gettext test_gl test_gl skipped -- No module named gl test_glob test_global test_grp test_gzip test_hash test_hashlib test_heapq test_hmac test_hotshot test_htmllib test_htmlparser test_httplib test_httpservers [16680 refs] [16680 refs] [16680 refs] [28258 refs] test_imageop test_imaplib test_imgfile test_imgfile skipped -- No module named imgfile test_imp test_import test_importhooks test_importlib test_index test_inspect test_int test_int_literal test_io test_ioctl test_ioctl skipped -- Unable to open /dev/tty test_isinstance test_iter test_iterlen test_itertools test_json test_kqueue test_kqueue skipped -- test works only on BSD test_largefile test_lib2to3 test_linecache test_linuxaudiodev test_linuxaudiodev skipped -- Use of the `audio' resource not enabled test_list test_locale test_logging test_long test_long_future test_longexp test_macos test_macos skipped -- No module named MacOS test_macostools test_macostools skipped -- No module named MacOS test_macpath test_mailbox test_marshal test_math test_md5 test_memoryio test_memoryview test_mhlib test_mimetools test_mimetypes test_minidom test_mmap test_module test_modulefinder test_multibytecodec test_multibytecodec_support test_multifile test_multiprocessing test_multiprocessing skipped -- This platform lacks a functioning sem_open implementation, therefore, the required synchronization primitives needed will not function, see issue 3770. test_mutants test_mutex test_netrc test_new test_nis test_normalization fetching http://www.unicode.org/Public/5.1.0/ucd/NormalizationTest.txt ... test_ntpath test_old_mailbox test_openpty test_operator test_optparse test_os test_ossaudiodev test_ossaudiodev skipped -- Use of the `audio' resource not enabled test_parser Expecting 's_push: parser stack overflow' in next line s_push: parser stack overflow test_pdb test_peepholer test_pep247 test_pep263 test_pep277 test_pep292 test_pep352 test_pickle test_pickletools test_pipes test_pkg test_pkgimport test_pkgutil test_platform [18076 refs] [18076 refs] test_plistlib test_poll test_popen [16685 refs] [16685 refs] [16685 refs] test_popen2 test_poplib test_posix test_posixpath test_pow test_pprint test_print test_profile test_profilehooks test_property test_pstats test_pty test_pwd test_py3kwarn test_py3kwarn skipped -- test.test_py3kwarn must be run with the -3 flag test_pyclbr test_pydoc [23122 refs] [23122 refs] [23122 refs] [23122 refs] [23122 refs] [23121 refs] [23121 refs] test_pyexpat test_queue test_quopri [19508 refs] [19508 refs] test_random test_re test_readline test_repr test_resource test_rfc822 test_richcmp test_robotparser test_runpy test_sax test_scope test_scriptpackages test_scriptpackages skipped -- No module named aetools test_select test_set test_setcomps test_sets test_sgmllib test_sha test_shelve test_shlex test_shutil test_signal test_site [16680 refs] [16680 refs] [16680 refs] [16680 refs] test_slice test_smtplib test_smtpnet test_smtpnet skipped -- Use of the `network' resource not enabled test_socket test_socketserver test_socketserver skipped -- Use of the `network' resource not enabled test_softspace test_sort test_sqlite test_ssl test_startfile test_startfile skipped -- module os has no attribute startfile test_str test_strftime test_string test_stringprep test_strop test_strptime test_strtod test_struct test_structmembers test_structseq test_subprocess [16680 refs] [16680 refs] [16680 refs] [16680 refs] [16680 refs] [16680 refs] [16680 refs] [16680 refs] [16680 refs] [16680 refs] [16680 refs] [16680 refs] [16680 refs] [16680 refs] [16895 refs] [16680 refs] [16680 refs] [16680 refs] [16680 refs] [16680 refs] . [16680 refs] [16680 refs] this bit of output is from a test of stdout in a different process ... [16680 refs] [16680 refs] [16895 refs] [16680 refs] [16680 refs] [16680 refs] Traceback (most recent call last): File "", line 1, in EOFError: EOF when reading a line [16680 refs] [16680 refs] [16680 refs] [16680 refs] [16680 refs] [16680 refs] [16680 refs] [16680 refs] [16680 refs] [16680 refs] [16680 refs] [16680 refs] [16680 refs] [16680 refs] [16680 refs] [16895 refs] [16680 refs] [16680 refs] [16680 refs] [16680 refs] [16680 refs] . [16680 refs] [16680 refs] this bit of output is from a test of stdout in a different process ... [16680 refs] [16680 refs] [16895 refs] test test_subprocess failed -- Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/test/test_subprocess.py", line 658, in test_send_signal self.assertIsNone(p.poll()) AssertionError: 1 is not None Re-running test 'test_subprocess' in verbose mode test_call_kwargs (test.test_subprocess.ProcessTestCase) ... [16680 refs] ok test_call_seq (test.test_subprocess.ProcessTestCase) ... [16680 refs] ok test_check_call_nonzero (test.test_subprocess.ProcessTestCase) ... [16680 refs] ok test_check_call_zero (test.test_subprocess.ProcessTestCase) ... [16680 refs] ok test_check_output (test.test_subprocess.ProcessTestCase) ... [16680 refs] ok test_check_output_nonzero (test.test_subprocess.ProcessTestCase) ... [16680 refs] ok test_check_output_stderr (test.test_subprocess.ProcessTestCase) ... ok test_check_output_stdout_arg (test.test_subprocess.ProcessTestCase) ... ok test_communicate (test.test_subprocess.ProcessTestCase) ... ok test_communicate_pipe_buf (test.test_subprocess.ProcessTestCase) ... ok test_communicate_pipe_fd_leak (test.test_subprocess.ProcessTestCase) ... [16680 refs] ok test_communicate_returns (test.test_subprocess.ProcessTestCase) ... [16680 refs] ok test_communicate_stderr (test.test_subprocess.ProcessTestCase) ... ok test_communicate_stdin (test.test_subprocess.ProcessTestCase) ... [16680 refs] ok test_communicate_stdout (test.test_subprocess.ProcessTestCase) ... [16680 refs] ok test_cwd (test.test_subprocess.ProcessTestCase) ... [16680 refs] ok test_env (test.test_subprocess.ProcessTestCase) ... [16680 refs] ok test_executable_with_cwd (test.test_subprocess.ProcessTestCase) ... [16680 refs] ok test_executable_without_cwd (test.test_subprocess.ProcessTestCase) ... [16680 refs] ok test_invalid_bufsize (test.test_subprocess.ProcessTestCase) ... ok test_leaking_fds_on_error (test.test_subprocess.ProcessTestCase) ... ok test_list2cmdline (test.test_subprocess.ProcessTestCase) ... ok test_no_leaking (test.test_subprocess.ProcessTestCase) ... ok test_poll (test.test_subprocess.ProcessTestCase) ... [16895 refs] ok test_stderr_filedes (test.test_subprocess.ProcessTestCase) ... ok test_stderr_fileobj (test.test_subprocess.ProcessTestCase) ... ok test_stderr_none (test.test_subprocess.ProcessTestCase) ... [16680 refs] ok test_stderr_pipe (test.test_subprocess.ProcessTestCase) ... ok test_stdin_filedes (test.test_subprocess.ProcessTestCase) ... [16680 refs] ok test_stdin_fileobj (test.test_subprocess.ProcessTestCase) ... [16680 refs] ok test_stdin_none (test.test_subprocess.ProcessTestCase) ... ok test_stdin_pipe (test.test_subprocess.ProcessTestCase) ... [16680 refs] ok test_stdout_filedes (test.test_subprocess.ProcessTestCase) ... [16680 refs] ok test_stdout_filedes_of_stdout (test.test_subprocess.ProcessTestCase) ... . [16680 refs] ok test_stdout_fileobj (test.test_subprocess.ProcessTestCase) ... [16680 refs] ok test_stdout_none (test.test_subprocess.ProcessTestCase) ... this bit of output is from a test of stdout in a different process ... ok test_stdout_pipe (test.test_subprocess.ProcessTestCase) ... [16680 refs] ok test_stdout_stderr_file (test.test_subprocess.ProcessTestCase) ... ok test_stdout_stderr_pipe (test.test_subprocess.ProcessTestCase) ... ok test_universal_newlines (test.test_subprocess.ProcessTestCase) ... [16680 refs] ok test_universal_newlines_communicate (test.test_subprocess.ProcessTestCase) ... ok test_wait (test.test_subprocess.ProcessTestCase) ... [16895 refs] ok test_writes_before_communicate (test.test_subprocess.ProcessTestCase) ... ok test_args_string (test.test_subprocess.POSIXProcessTestCase) ... [16680 refs] ok test_call_string (test.test_subprocess.POSIXProcessTestCase) ... [16680 refs] ok test_exceptions (test.test_subprocess.POSIXProcessTestCase) ... ok test_invalid_args (test.test_subprocess.POSIXProcessTestCase) ... ok test_kill (test.test_subprocess.POSIXProcessTestCase) ... ok test_preexec (test.test_subprocess.POSIXProcessTestCase) ... [16680 refs] ok test_run_abort (test.test_subprocess.POSIXProcessTestCase) ... ok test_send_signal (test.test_subprocess.POSIXProcessTestCase) ... Traceback (most recent call last): File "", line 1, in EOFError: EOF when reading a line [16680 refs] FAIL test_shell_sequence (test.test_subprocess.POSIXProcessTestCase) ... ok test_shell_string (test.test_subprocess.POSIXProcessTestCase) ... ok test_terminate (test.test_subprocess.POSIXProcessTestCase) ... ok test_call_string (test.test_subprocess.Win32ProcessTestCase) ... skipped 'Windows specific tests' test_close_fds (test.test_subprocess.Win32ProcessTestCase) ... skipped 'Windows specific tests' test_creationflags (test.test_subprocess.Win32ProcessTestCase) ... skipped 'Windows specific tests' test_invalid_args (test.test_subprocess.Win32ProcessTestCase) ... skipped 'Windows specific tests' test_kill (test.test_subprocess.Win32ProcessTestCase) ... skipped 'Windows specific tests' test_send_signal (test.test_subprocess.Win32ProcessTestCase) ... skipped 'Windows specific tests' test_shell_sequence (test.test_subprocess.Win32ProcessTestCase) ... skipped 'Windows specific tests' test_shell_string (test.test_subprocess.Win32ProcessTestCase) ... skipped 'Windows specific tests' test_startupinfo (test.test_subprocess.Win32ProcessTestCase) ... skipped 'Windows specific tests' test_terminate (test.test_subprocess.Win32ProcessTestCase) ... skipped 'Windows specific tests' test_call_kwargs (test.test_subprocess.ProcessTestCaseNoPoll) ... [16680 refs] ok test_call_seq (test.test_subprocess.ProcessTestCaseNoPoll) ... [16680 refs] ok test_check_call_nonzero (test.test_subprocess.ProcessTestCaseNoPoll) ... [16680 refs] ok test_check_call_zero (test.test_subprocess.ProcessTestCaseNoPoll) ... [16680 refs] ok test_check_output (test.test_subprocess.ProcessTestCaseNoPoll) ... [16680 refs] ok test_check_output_nonzero (test.test_subprocess.ProcessTestCaseNoPoll) ... [16680 refs] ok test_check_output_stderr (test.test_subprocess.ProcessTestCaseNoPoll) ... ok test_check_output_stdout_arg (test.test_subprocess.ProcessTestCaseNoPoll) ... ok test_communicate (test.test_subprocess.ProcessTestCaseNoPoll) ... ok test_communicate_pipe_buf (test.test_subprocess.ProcessTestCaseNoPoll) ... ok test_communicate_pipe_fd_leak (test.test_subprocess.ProcessTestCaseNoPoll) ... [16680 refs] ok test_communicate_returns (test.test_subprocess.ProcessTestCaseNoPoll) ... [16680 refs] ok test_communicate_stderr (test.test_subprocess.ProcessTestCaseNoPoll) ... ok test_communicate_stdin (test.test_subprocess.ProcessTestCaseNoPoll) ... [16680 refs] ok test_communicate_stdout (test.test_subprocess.ProcessTestCaseNoPoll) ... [16680 refs] ok test_cwd (test.test_subprocess.ProcessTestCaseNoPoll) ... [16680 refs] ok test_env (test.test_subprocess.ProcessTestCaseNoPoll) ... [16680 refs] ok test_executable_with_cwd (test.test_subprocess.ProcessTestCaseNoPoll) ... [16680 refs] ok test_executable_without_cwd (test.test_subprocess.ProcessTestCaseNoPoll) ... [16680 refs] ok test_invalid_bufsize (test.test_subprocess.ProcessTestCaseNoPoll) ... ok test_leaking_fds_on_error (test.test_subprocess.ProcessTestCaseNoPoll) ... ok test_list2cmdline (test.test_subprocess.ProcessTestCaseNoPoll) ... ok test_no_leaking (test.test_subprocess.ProcessTestCaseNoPoll) ... ok test_poll (test.test_subprocess.ProcessTestCaseNoPoll) ... [16895 refs] ok test_stderr_filedes (test.test_subprocess.ProcessTestCaseNoPoll) ... ok test_stderr_fileobj (test.test_subprocess.ProcessTestCaseNoPoll) ... ok test_stderr_none (test.test_subprocess.ProcessTestCaseNoPoll) ... [16680 refs] ok test_stderr_pipe (test.test_subprocess.ProcessTestCaseNoPoll) ... ok test_stdin_filedes (test.test_subprocess.ProcessTestCaseNoPoll) ... [16680 refs] ok test_stdin_fileobj (test.test_subprocess.ProcessTestCaseNoPoll) ... [16680 refs] ok test_stdin_none (test.test_subprocess.ProcessTestCaseNoPoll) ... ok test_stdin_pipe (test.test_subprocess.ProcessTestCaseNoPoll) ... [16680 refs] ok test_stdout_filedes (test.test_subprocess.ProcessTestCaseNoPoll) ... [16680 refs] ok test_stdout_filedes_of_stdout (test.test_subprocess.ProcessTestCaseNoPoll) ... . [16680 refs] ok test_stdout_fileobj (test.test_subprocess.ProcessTestCaseNoPoll) ... [16680 refs] ok test_stdout_none (test.test_subprocess.ProcessTestCaseNoPoll) ... this bit of output is from a test of stdout in a different process ... ok test_stdout_pipe (test.test_subprocess.ProcessTestCaseNoPoll) ... [16680 refs] ok test_stdout_stderr_file (test.test_subprocess.ProcessTestCaseNoPoll) ... ok test_stdout_stderr_pipe (test.test_subprocess.ProcessTestCaseNoPoll) ... ok test_universal_newlines (test.test_subprocess.ProcessTestCaseNoPoll) ... [16680 refs] ok test_universal_newlines_communicate (test.test_subprocess.ProcessTestCaseNoPoll) ... ok test_wait (test.test_subprocess.ProcessTestCaseNoPoll) ... [16895 refs] ok test_writes_before_communicate (test.test_subprocess.ProcessTestCaseNoPoll) ... ok test_eintr_retry_call (test.test_subprocess.HelperFunctionTests) ... ok ====================================================================== FAIL: test_send_signal (test.test_subprocess.POSIXProcessTestCase) ---------------------------------------------------------------------- Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/test/test_subprocess.py", line 658, in test_send_signal self.assertIsNone(p.poll()) AssertionError: 1 is not None ---------------------------------------------------------------------- Ran 108 tests in 76.774s FAILED (failures=1, skipped=10) test test_subprocess failed -- Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/test/test_subprocess.py", line 658, in test_send_signal self.assertIsNone(p.poll()) AssertionError: 1 is not None test_sunaudiodev test_sunaudiodev skipped -- No module named sunaudiodev test_sundry test_symtable test_syntax test_sys [16680 refs] [16680 refs] [16909 refs] [16703 refs] test_sysconfig test_tarfile test_tcl test_tcl skipped -- No module named _tkinter test_telnetlib test_tempfile [16680 refs] test_textwrap test_thread test_threaded_import test_threadedtempfile test_threading [19980 refs] [22486 refs] [22300 refs] [22300 refs] [22300 refs] [22300 refs] test_threading_local test_threadsignals test_time test_timeout test_timeout skipped -- Use of the `network' resource not enabled test_tk test_tk skipped -- No module named _tkinter test_tokenize test_trace test_traceback test_transformer test_ttk_guionly test_ttk_guionly skipped -- No module named _tkinter test_ttk_textonly test_ttk_textonly skipped -- No module named _tkinter test_tuple test_typechecks test_ucn test_unary test_undocumented_details test_unicode test_unicode_file test_unicode_file skipped -- No Unicode filesystem semantics on this platform. test_unicodedata test_univnewlines test_univnewlines2k test_unpack test_urllib test_urllib2 test_urllib2_localnet test_urllib2net test_urllib2net skipped -- Use of the `network' resource not enabled test_urllibnet test_urllibnet skipped -- Use of the `network' resource not enabled test_urlparse test_userdict test_userlist test_userstring test_uu test_uuid WARNING: uuid.getnode is unreliable on many platforms. It is disabled until the code and/or test can be fixed properly. WARNING: uuid._ifconfig_getnode is unreliable on many platforms. It is disabled until the code and/or test can be fixed properly. WARNING: uuid._unixdll_getnode is unreliable on many platforms. It is disabled until the code and/or test can be fixed properly. test_wait3 test_wait4 test_warnings test_wave test_weakref test_whichdb test_winreg test_winreg skipped -- No module named _winreg test_winsound test_winsound skipped -- No module named winsound test_with test_wsgiref test_xdrlib test_xml_etree test_xml_etree_c test_xmllib test_xmlrpc test_xpickle test_xpickle -- skipping backwards compat tests. Use 'regrtest.py -u xpickle' to run them. test_xrange test_zipfile test_zipfile64 test_zipfile64 skipped -- test requires loads of disk-space bytes and a long time to run test_zipimport test_zipimport_support test_zlib 346 tests OK. 1 test failed: test_subprocess 35 tests skipped: test_aepack test_al test_applesingle test_bsddb185 test_bsddb3 test_cd test_cl test_curses test_epoll test_gl test_imgfile test_ioctl test_kqueue test_linuxaudiodev test_macos test_macostools test_multiprocessing test_ossaudiodev test_py3kwarn test_scriptpackages test_smtpnet test_socketserver test_startfile test_sunaudiodev test_tcl test_timeout test_tk test_ttk_guionly test_ttk_textonly test_unicode_file test_urllib2net test_urllibnet test_winreg test_winsound test_zipfile64 6 skips unexpected on linux2: test_multiprocessing test_ttk_guionly test_epoll test_tk test_ioctl test_ttk_textonly [937643 refs] From nnorwitz at gmail.com Fri Mar 5 10:41:06 2010 From: nnorwitz at gmail.com (Neal Norwitz) Date: Fri, 5 Mar 2010 04:41:06 -0500 Subject: [Python-checkins] Python Regression Test Failures opt (1) Message-ID: <20100305094106.GA15991@kbk-i386-bb.psfb.org> 346 tests OK. 1 test failed: test_subprocess 35 tests skipped: test_aepack test_al test_applesingle test_bsddb185 test_bsddb3 test_cd test_cl test_curses test_epoll test_gl test_imgfile test_ioctl test_kqueue test_linuxaudiodev test_macos test_macostools test_multiprocessing test_ossaudiodev test_py3kwarn test_scriptpackages test_smtpnet test_socketserver test_startfile test_sunaudiodev test_tcl test_timeout test_tk test_ttk_guionly test_ttk_textonly test_unicode_file test_urllib2net test_urllibnet test_winreg test_winsound test_zipfile64 6 skips unexpected on linux2: test_multiprocessing test_ttk_guionly test_epoll test_tk test_ioctl test_ttk_textonly test_grammar test_opcodes test_dict test_builtin test_exceptions test_types test_unittest test_doctest test_doctest2 test_MimeWriter test_SimpleHTTPServer test_StringIO test___all__ test___future__ test__locale test_abc test_abstract_numbers test_aepack test_aepack skipped -- No module named aetypes test_aifc test_al test_al skipped -- No module named al test_anydbm test_applesingle test_applesingle skipped -- No module named MacOS test_argparse test_array test_ascii_formatd test_ast test_asynchat test_asyncore test_atexit test_audioop test_augassign test_base64 test_bastion test_bigaddrspace test_bigmem test_binascii test_binhex test_binop test_bisect test_bool test_bsddb test_bsddb185 test_bsddb185 skipped -- No module named bsddb185 test_bsddb3 test_bsddb3 skipped -- Use of the `bsddb' resource not enabled test_buffer test_bufio test_bytes test_bz2 test_calendar test_call test_capi test_cd test_cd skipped -- No module named cd test_cfgparser test_cgi test_charmapcodec test_cl test_cl skipped -- No module named cl test_class test_cmath test_cmd test_cmd_line test_cmd_line_script test_code test_codeccallbacks test_codecencodings_cn test_codecencodings_hk test_codecencodings_jp test_codecencodings_kr test_codecencodings_tw test_codecmaps_cn test_codecmaps_hk test_codecmaps_jp test_codecmaps_kr test_codecmaps_tw test_codecs test_codeop test_coding test_coercion test_collections test_colorsys test_commands test_compare test_compile test_compileall test_compiler test_complex test_complex_args test_contains test_contextlib test_cookie test_cookielib test_copy test_copy_reg test_cpickle test_cprofile test_crypt test_csv test_ctypes test_curses test_curses skipped -- Use of the `curses' resource not enabled test_datetime test_dbm test_decimal test_decorators test_defaultdict test_deque test_descr test_descrtut test_dictcomps test_dictviews test_difflib test_dircache test_dis test_distutils [20682 refs] [20682 refs] [20682 refs] [20682 refs] [20679 refs] test_dl test_docxmlrpc test_dumbdbm test_dummy_thread test_dummy_threading test_email test_email_codecs test_email_renamed test_enumerate test_eof test_epoll test_epoll skipped -- kernel doesn't support epoll() test_errno test_exception_variations test_extcall test_fcntl test_file test_file2k test_filecmp test_fileinput test_fileio test_float test_fnmatch test_fork1 test_format test_fpformat test_fractions test_frozen test_ftplib test_funcattrs test_functools test_future test_future3 test_future4 test_future5 test_future_builtins test_gc test_gdbm test_generators test_genericpath test_genexps test_getargs test_getargs2 test_getopt test_gettext test_gl test_gl skipped -- No module named gl test_glob test_global test_grp test_gzip test_hash test_hashlib test_heapq test_hmac test_hotshot test_htmllib test_htmlparser test_httplib test_httpservers [16680 refs] [16680 refs] [16680 refs] [28258 refs] test_imageop test_imaplib test_imgfile test_imgfile skipped -- No module named imgfile test_imp test_import test_importhooks test_importlib test_index test_inspect test_int test_int_literal test_io test_ioctl test_ioctl skipped -- Unable to open /dev/tty test_isinstance test_iter test_iterlen test_itertools test_json test_kqueue test_kqueue skipped -- test works only on BSD test_largefile test_lib2to3 test_linecache test_linuxaudiodev test_linuxaudiodev skipped -- Use of the `audio' resource not enabled test_list test_locale test_logging test_long test_long_future test_longexp test_macos test_macos skipped -- No module named MacOS test_macostools test_macostools skipped -- No module named MacOS test_macpath test_mailbox test_marshal test_math test_md5 test_memoryio test_memoryview test_mhlib test_mimetools test_mimetypes test_minidom test_mmap test_module test_modulefinder test_multibytecodec test_multibytecodec_support test_multifile test_multiprocessing test_multiprocessing skipped -- This platform lacks a functioning sem_open implementation, therefore, the required synchronization primitives needed will not function, see issue 3770. test_mutants test_mutex test_netrc test_new test_nis test_normalization test_ntpath test_old_mailbox test_openpty test_operator test_optparse test_os test_ossaudiodev test_ossaudiodev skipped -- Use of the `audio' resource not enabled test_parser Expecting 's_push: parser stack overflow' in next line s_push: parser stack overflow test_pdb test_peepholer test_pep247 test_pep263 test_pep277 test_pep292 test_pep352 test_pickle test_pickletools test_pipes test_pkg test_pkgimport test_pkgutil test_platform [18076 refs] [18076 refs] test_plistlib test_poll test_popen [16685 refs] [16685 refs] [16685 refs] test_popen2 test_poplib test_posix test_posixpath test_pow test_pprint test_print test_profile test_profilehooks test_property test_pstats test_pty test_pwd test_py3kwarn test_py3kwarn skipped -- test.test_py3kwarn must be run with the -3 flag test_pyclbr test_pydoc [23122 refs] [23122 refs] [23122 refs] [23122 refs] [23122 refs] [23121 refs] [23121 refs] test_pyexpat test_queue test_quopri [19508 refs] [19508 refs] test_random test_re test_readline test_repr test_resource test_rfc822 test_richcmp test_robotparser test_runpy test_sax test_scope test_scriptpackages test_scriptpackages skipped -- No module named aetools test_select test_set test_setcomps test_sets test_sgmllib test_sha test_shelve test_shlex test_shutil test_signal test_site [16680 refs] [16680 refs] [16680 refs] [16680 refs] test_slice test_smtplib test_smtpnet test_smtpnet skipped -- Use of the `network' resource not enabled test_socket test_socketserver test_socketserver skipped -- Use of the `network' resource not enabled test_softspace test_sort test_sqlite test_ssl test_startfile test_startfile skipped -- module os has no attribute startfile test_str test_strftime test_string test_stringprep test_strop test_strptime test_strtod test_struct test_structmembers test_structseq test_subprocess [16680 refs] [16680 refs] [16680 refs] [16680 refs] [16680 refs] [16680 refs] [16680 refs] [16680 refs] [16680 refs] [16680 refs] [16680 refs] [16680 refs] [16680 refs] [16680 refs] [16895 refs] [16680 refs] [16680 refs] [16680 refs] [16680 refs] [16680 refs] . [16680 refs] [16680 refs] this bit of output is from a test of stdout in a different process ... [16680 refs] [16680 refs] [16895 refs] [16680 refs] [16680 refs] [16680 refs] Traceback (most recent call last): File "", line 1, in EOFError: EOF when reading a line [16680 refs] [16680 refs] [16680 refs] [16680 refs] [16680 refs] [16680 refs] [16680 refs] [16680 refs] [16680 refs] [16680 refs] [16680 refs] [16680 refs] [16680 refs] [16680 refs] [16680 refs] [16895 refs] [16680 refs] [16680 refs] [16680 refs] [16680 refs] [16680 refs] . [16680 refs] [16680 refs] this bit of output is from a test of stdout in a different process ... [16680 refs] [16680 refs] [16895 refs] test test_subprocess failed -- Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/test/test_subprocess.py", line 658, in test_send_signal self.assertIsNone(p.poll()) AssertionError: 1 is not None Re-running test 'test_subprocess' in verbose mode test_call_kwargs (test.test_subprocess.ProcessTestCase) ... [16680 refs] ok test_call_seq (test.test_subprocess.ProcessTestCase) ... [16680 refs] ok test_check_call_nonzero (test.test_subprocess.ProcessTestCase) ... [16680 refs] ok test_check_call_zero (test.test_subprocess.ProcessTestCase) ... [16680 refs] ok test_check_output (test.test_subprocess.ProcessTestCase) ... [16680 refs] ok test_check_output_nonzero (test.test_subprocess.ProcessTestCase) ... [16680 refs] ok test_check_output_stderr (test.test_subprocess.ProcessTestCase) ... ok test_check_output_stdout_arg (test.test_subprocess.ProcessTestCase) ... ok test_communicate (test.test_subprocess.ProcessTestCase) ... ok test_communicate_pipe_buf (test.test_subprocess.ProcessTestCase) ... ok test_communicate_pipe_fd_leak (test.test_subprocess.ProcessTestCase) ... [16680 refs] ok test_communicate_returns (test.test_subprocess.ProcessTestCase) ... [16680 refs] ok test_communicate_stderr (test.test_subprocess.ProcessTestCase) ... ok test_communicate_stdin (test.test_subprocess.ProcessTestCase) ... [16680 refs] ok test_communicate_stdout (test.test_subprocess.ProcessTestCase) ... [16680 refs] ok test_cwd (test.test_subprocess.ProcessTestCase) ... [16680 refs] ok test_env (test.test_subprocess.ProcessTestCase) ... [16680 refs] ok test_executable_with_cwd (test.test_subprocess.ProcessTestCase) ... [16680 refs] ok test_executable_without_cwd (test.test_subprocess.ProcessTestCase) ... [16680 refs] ok test_invalid_bufsize (test.test_subprocess.ProcessTestCase) ... ok test_leaking_fds_on_error (test.test_subprocess.ProcessTestCase) ... ok test_list2cmdline (test.test_subprocess.ProcessTestCase) ... ok test_no_leaking (test.test_subprocess.ProcessTestCase) ... ok test_poll (test.test_subprocess.ProcessTestCase) ... [16895 refs] ok test_stderr_filedes (test.test_subprocess.ProcessTestCase) ... ok test_stderr_fileobj (test.test_subprocess.ProcessTestCase) ... ok test_stderr_none (test.test_subprocess.ProcessTestCase) ... [16680 refs] ok test_stderr_pipe (test.test_subprocess.ProcessTestCase) ... ok test_stdin_filedes (test.test_subprocess.ProcessTestCase) ... [16680 refs] ok test_stdin_fileobj (test.test_subprocess.ProcessTestCase) ... [16680 refs] ok test_stdin_none (test.test_subprocess.ProcessTestCase) ... ok test_stdin_pipe (test.test_subprocess.ProcessTestCase) ... [16680 refs] ok test_stdout_filedes (test.test_subprocess.ProcessTestCase) ... [16680 refs] ok test_stdout_filedes_of_stdout (test.test_subprocess.ProcessTestCase) ... . [16680 refs] ok test_stdout_fileobj (test.test_subprocess.ProcessTestCase) ... [16680 refs] ok test_stdout_none (test.test_subprocess.ProcessTestCase) ... this bit of output is from a test of stdout in a different process ... ok test_stdout_pipe (test.test_subprocess.ProcessTestCase) ... [16680 refs] ok test_stdout_stderr_file (test.test_subprocess.ProcessTestCase) ... ok test_stdout_stderr_pipe (test.test_subprocess.ProcessTestCase) ... ok test_universal_newlines (test.test_subprocess.ProcessTestCase) ... [16680 refs] ok test_universal_newlines_communicate (test.test_subprocess.ProcessTestCase) ... ok test_wait (test.test_subprocess.ProcessTestCase) ... [16895 refs] ok test_writes_before_communicate (test.test_subprocess.ProcessTestCase) ... ok test_args_string (test.test_subprocess.POSIXProcessTestCase) ... [16680 refs] ok test_call_string (test.test_subprocess.POSIXProcessTestCase) ... [16680 refs] ok test_exceptions (test.test_subprocess.POSIXProcessTestCase) ... ok test_invalid_args (test.test_subprocess.POSIXProcessTestCase) ... ok test_kill (test.test_subprocess.POSIXProcessTestCase) ... ok test_preexec (test.test_subprocess.POSIXProcessTestCase) ... [16680 refs] ok test_run_abort (test.test_subprocess.POSIXProcessTestCase) ... ok test_send_signal (test.test_subprocess.POSIXProcessTestCase) ... Traceback (most recent call last): File "", line 1, in EOFError: EOF when reading a line [16680 refs] FAIL test_shell_sequence (test.test_subprocess.POSIXProcessTestCase) ... ok test_shell_string (test.test_subprocess.POSIXProcessTestCase) ... ok test_terminate (test.test_subprocess.POSIXProcessTestCase) ... ok test_call_string (test.test_subprocess.Win32ProcessTestCase) ... skipped 'Windows specific tests' test_close_fds (test.test_subprocess.Win32ProcessTestCase) ... skipped 'Windows specific tests' test_creationflags (test.test_subprocess.Win32ProcessTestCase) ... skipped 'Windows specific tests' test_invalid_args (test.test_subprocess.Win32ProcessTestCase) ... skipped 'Windows specific tests' test_kill (test.test_subprocess.Win32ProcessTestCase) ... skipped 'Windows specific tests' test_send_signal (test.test_subprocess.Win32ProcessTestCase) ... skipped 'Windows specific tests' test_shell_sequence (test.test_subprocess.Win32ProcessTestCase) ... skipped 'Windows specific tests' test_shell_string (test.test_subprocess.Win32ProcessTestCase) ... skipped 'Windows specific tests' test_startupinfo (test.test_subprocess.Win32ProcessTestCase) ... skipped 'Windows specific tests' test_terminate (test.test_subprocess.Win32ProcessTestCase) ... skipped 'Windows specific tests' test_call_kwargs (test.test_subprocess.ProcessTestCaseNoPoll) ... [16680 refs] ok test_call_seq (test.test_subprocess.ProcessTestCaseNoPoll) ... [16680 refs] ok test_check_call_nonzero (test.test_subprocess.ProcessTestCaseNoPoll) ... [16680 refs] ok test_check_call_zero (test.test_subprocess.ProcessTestCaseNoPoll) ... [16680 refs] ok test_check_output (test.test_subprocess.ProcessTestCaseNoPoll) ... [16680 refs] ok test_check_output_nonzero (test.test_subprocess.ProcessTestCaseNoPoll) ... [16680 refs] ok test_check_output_stderr (test.test_subprocess.ProcessTestCaseNoPoll) ... ok test_check_output_stdout_arg (test.test_subprocess.ProcessTestCaseNoPoll) ... ok test_communicate (test.test_subprocess.ProcessTestCaseNoPoll) ... ok test_communicate_pipe_buf (test.test_subprocess.ProcessTestCaseNoPoll) ... ok test_communicate_pipe_fd_leak (test.test_subprocess.ProcessTestCaseNoPoll) ... [16680 refs] ok test_communicate_returns (test.test_subprocess.ProcessTestCaseNoPoll) ... [16680 refs] ok test_communicate_stderr (test.test_subprocess.ProcessTestCaseNoPoll) ... ok test_communicate_stdin (test.test_subprocess.ProcessTestCaseNoPoll) ... [16680 refs] ok test_communicate_stdout (test.test_subprocess.ProcessTestCaseNoPoll) ... [16680 refs] ok test_cwd (test.test_subprocess.ProcessTestCaseNoPoll) ... [16680 refs] ok test_env (test.test_subprocess.ProcessTestCaseNoPoll) ... [16680 refs] ok test_executable_with_cwd (test.test_subprocess.ProcessTestCaseNoPoll) ... [16680 refs] ok test_executable_without_cwd (test.test_subprocess.ProcessTestCaseNoPoll) ... [16680 refs] ok test_invalid_bufsize (test.test_subprocess.ProcessTestCaseNoPoll) ... ok test_leaking_fds_on_error (test.test_subprocess.ProcessTestCaseNoPoll) ... ok test_list2cmdline (test.test_subprocess.ProcessTestCaseNoPoll) ... ok test_no_leaking (test.test_subprocess.ProcessTestCaseNoPoll) ... ok test_poll (test.test_subprocess.ProcessTestCaseNoPoll) ... [16895 refs] ok test_stderr_filedes (test.test_subprocess.ProcessTestCaseNoPoll) ... ok test_stderr_fileobj (test.test_subprocess.ProcessTestCaseNoPoll) ... ok test_stderr_none (test.test_subprocess.ProcessTestCaseNoPoll) ... [16680 refs] ok test_stderr_pipe (test.test_subprocess.ProcessTestCaseNoPoll) ... ok test_stdin_filedes (test.test_subprocess.ProcessTestCaseNoPoll) ... [16680 refs] ok test_stdin_fileobj (test.test_subprocess.ProcessTestCaseNoPoll) ... [16680 refs] ok test_stdin_none (test.test_subprocess.ProcessTestCaseNoPoll) ... ok test_stdin_pipe (test.test_subprocess.ProcessTestCaseNoPoll) ... [16680 refs] ok test_stdout_filedes (test.test_subprocess.ProcessTestCaseNoPoll) ... [16680 refs] ok test_stdout_filedes_of_stdout (test.test_subprocess.ProcessTestCaseNoPoll) ... . [16680 refs] ok test_stdout_fileobj (test.test_subprocess.ProcessTestCaseNoPoll) ... [16680 refs] ok test_stdout_none (test.test_subprocess.ProcessTestCaseNoPoll) ... this bit of output is from a test of stdout in a different process ... ok test_stdout_pipe (test.test_subprocess.ProcessTestCaseNoPoll) ... [16680 refs] ok test_stdout_stderr_file (test.test_subprocess.ProcessTestCaseNoPoll) ... ok test_stdout_stderr_pipe (test.test_subprocess.ProcessTestCaseNoPoll) ... ok test_universal_newlines (test.test_subprocess.ProcessTestCaseNoPoll) ... [16680 refs] ok test_universal_newlines_communicate (test.test_subprocess.ProcessTestCaseNoPoll) ... ok test_wait (test.test_subprocess.ProcessTestCaseNoPoll) ... [16895 refs] ok test_writes_before_communicate (test.test_subprocess.ProcessTestCaseNoPoll) ... ok test_eintr_retry_call (test.test_subprocess.HelperFunctionTests) ... ok ====================================================================== FAIL: test_send_signal (test.test_subprocess.POSIXProcessTestCase) ---------------------------------------------------------------------- Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/test/test_subprocess.py", line 658, in test_send_signal self.assertIsNone(p.poll()) AssertionError: 1 is not None ---------------------------------------------------------------------- Ran 108 tests in 126.000s FAILED (failures=1, skipped=10) test test_subprocess failed -- Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/test/test_subprocess.py", line 658, in test_send_signal self.assertIsNone(p.poll()) AssertionError: 1 is not None test_sunaudiodev test_sunaudiodev skipped -- No module named sunaudiodev test_sundry test_symtable test_syntax test_sys [16680 refs] [16680 refs] [16909 refs] [16703 refs] test_sysconfig test_tarfile test_tcl test_tcl skipped -- No module named _tkinter test_telnetlib test_tempfile [16680 refs] test_textwrap test_thread test_threaded_import test_threadedtempfile test_threading [19980 refs] [22486 refs] [22300 refs] [22300 refs] [22300 refs] [22300 refs] test_threading_local test_threadsignals test_time test_timeout test_timeout skipped -- Use of the `network' resource not enabled test_tk test_tk skipped -- No module named _tkinter test_tokenize test_trace test_traceback test_transformer test_ttk_guionly test_ttk_guionly skipped -- No module named _tkinter test_ttk_textonly test_ttk_textonly skipped -- No module named _tkinter test_tuple test_typechecks test_ucn test_unary test_undocumented_details test_unicode test_unicode_file test_unicode_file skipped -- No Unicode filesystem semantics on this platform. test_unicodedata test_univnewlines test_univnewlines2k test_unpack test_urllib test_urllib2 test_urllib2_localnet test_urllib2net test_urllib2net skipped -- Use of the `network' resource not enabled test_urllibnet test_urllibnet skipped -- Use of the `network' resource not enabled test_urlparse test_userdict test_userlist test_userstring test_uu test_uuid WARNING: uuid.getnode is unreliable on many platforms. It is disabled until the code and/or test can be fixed properly. WARNING: uuid._ifconfig_getnode is unreliable on many platforms. It is disabled until the code and/or test can be fixed properly. WARNING: uuid._unixdll_getnode is unreliable on many platforms. It is disabled until the code and/or test can be fixed properly. test_wait3 test_wait4 test_warnings test_wave test_weakref test_whichdb test_winreg test_winreg skipped -- No module named _winreg test_winsound test_winsound skipped -- No module named winsound test_with test_wsgiref test_xdrlib test_xml_etree test_xml_etree_c test_xmllib test_xmlrpc test_xpickle test_xpickle -- skipping backwards compat tests. Use 'regrtest.py -u xpickle' to run them. test_xrange test_zipfile test_zipfile64 test_zipfile64 skipped -- test requires loads of disk-space bytes and a long time to run test_zipimport test_zipimport_support test_zlib 346 tests OK. 1 test failed: test_subprocess 35 tests skipped: test_aepack test_al test_applesingle test_bsddb185 test_bsddb3 test_cd test_cl test_curses test_epoll test_gl test_imgfile test_ioctl test_kqueue test_linuxaudiodev test_macos test_macostools test_multiprocessing test_ossaudiodev test_py3kwarn test_scriptpackages test_smtpnet test_socketserver test_startfile test_sunaudiodev test_tcl test_timeout test_tk test_ttk_guionly test_ttk_textonly test_unicode_file test_urllib2net test_urllibnet test_winreg test_winsound test_zipfile64 6 skips unexpected on linux2: test_multiprocessing test_ttk_guionly test_epoll test_tk test_ioctl test_ttk_textonly [936511 refs] From florent.xicluna at m4x.org Fri Mar 5 11:33:34 2010 From: florent.xicluna at m4x.org (Florent XICLUNA) Date: Fri, 5 Mar 2010 11:33:34 +0100 Subject: [Python-checkins] Python Regression Test Failures basics (1) In-Reply-To: <20100305091804.GA28427@kbk-i386-bb.psfb.org> References: <20100305091804.GA28427@kbk-i386-bb.psfb.org> Message-ID: It would be useful to know the specific configuration of this platform: os, cpu, ... The test_subprocess failure is related to #2777. Thanks, -- Florent Xicluna 2010/3/5 Neal Norwitz : > 346 tests OK. > 1 test failed: > ? ?test_subprocess (...) > test_subprocess > [16680 refs] > [16680 refs] > [16680 refs] > [16680 refs] > [16680 refs] > [16680 refs] > [16680 refs] > [16680 refs] > [16680 refs] > [16680 refs] > [16680 refs] > [16680 refs] > [16680 refs] > [16680 refs] > [16895 refs] > [16680 refs] > [16680 refs] > [16680 refs] > [16680 refs] > [16680 refs] > . > [16680 refs] > [16680 refs] > ? ?this bit of output is from a test of stdout in a different process ... > [16680 refs] > [16680 refs] > [16895 refs] > [16680 refs] > [16680 refs] > [16680 refs] > Traceback (most recent call last): > ?File "", line 1, in > EOFError: EOF when reading a line > [16680 refs] > [16680 refs] > [16680 refs] > [16680 refs] > [16680 refs] > [16680 refs] > [16680 refs] > [16680 refs] > [16680 refs] > [16680 refs] > [16680 refs] > [16680 refs] > [16680 refs] > [16680 refs] > [16680 refs] > [16895 refs] > [16680 refs] > [16680 refs] > [16680 refs] > [16680 refs] > [16680 refs] > . > [16680 refs] > [16680 refs] > ? ?this bit of output is from a test of stdout in a different process ... > [16680 refs] > [16680 refs] > [16895 refs] > test test_subprocess failed -- Traceback (most recent call last): > ?File "/tmp/python-test/local/lib/python2.7/test/test_subprocess.py", line 658, in test_send_signal > ? ?self.assertIsNone(p.poll()) > AssertionError: 1 is not None > (...) > ====================================================================== > FAIL: test_send_signal (test.test_subprocess.POSIXProcessTestCase) > ---------------------------------------------------------------------- > Traceback (most recent call last): > ?File "/tmp/python-test/local/lib/python2.7/test/test_subprocess.py", line 658, in test_send_signal > ? ?self.assertIsNone(p.poll()) > AssertionError: 1 is not None > > ---------------------------------------------------------------------- > Ran 108 tests in 76.774s > > FAILED (failures=1, skipped=10) > test test_subprocess failed -- Traceback (most recent call last): > ?File "/tmp/python-test/local/lib/python2.7/test/test_subprocess.py", line 658, in test_send_signal > ? ?self.assertIsNone(p.poll()) > AssertionError: 1 is not None > From python-checkins at python.org Fri Mar 5 13:43:17 2010 From: python-checkins at python.org (ezio.melotti) Date: Fri, 5 Mar 2010 13:43:17 +0100 (CET) Subject: [Python-checkins] r78689 - python/branches/py3k/Lib/test/test_imp.py Message-ID: <20100305124317.386D7EE989@mail.python.org> Author: ezio.melotti Date: Fri Mar 5 13:43:17 2010 New Revision: 78689 Log: This fixes a missing .lower() on the encoding name, a wrong byte undecodable by UTF-8, a wrong variable name, hopefully some windows buildbot on 3.x and adds a proper skip. It might break other things though. Modified: python/branches/py3k/Lib/test/test_imp.py Modified: python/branches/py3k/Lib/test/test_imp.py ============================================================================== --- python/branches/py3k/Lib/test/test_imp.py (original) +++ python/branches/py3k/Lib/test/test_imp.py Fri Mar 5 13:43:17 2010 @@ -85,13 +85,14 @@ # and issue never happens for dynamic modules. # But sources modified to follow generic way for processing pathes. - locale_encoding = locale.getpreferredencoding() + # the return encoding can be uppercase + locale_encoding = locale.getpreferredencoding().lower() # covers utf-8 and Windows ANSI code pages # one non-space symbol from every page # (http://en.wikipedia.org/wiki/Code_page) known_locales = { - 'utf-8' : b'\xe4', + 'utf-8' : b'\xc3\xa4', 'cp1250' : b'\x8C', 'cp1251' : b'\xc0', 'cp1252' : b'\xc0', @@ -104,46 +105,48 @@ } special_char = known_locales.get(locale_encoding) - if special_char: - encoded_char = special_char.decode(locale_encoding) - temp_mod_name = 'test_imp_helper_' + encoded_char - test_package_name = 'test_imp_helper_package_' + encoded_char - init_file_name = os.path.join(test_package_name, '__init__.py') - try: - with open(temp_mod_name + '.py', 'w') as file: - file.write('a = 1\n') - file, filename, info = imp.find_module(temp_mod_name) - self.assertNotEquals(None, file) - self.assertTrue(filename[:-3].endswith(temp_mod_name)) - self.assertEquals('.py', info[0]) - self.assertEquals('U', info[1]) - self.assertEquals(imp.PY_SOURCE, info[2]) - - mod = imp.load_module(temp_mod_name, file, filename, info) - self.assertEquals(1, mod.a) - file.close() - - mod = imp.load_source(temp_mod_name, temp_mod_name + '.py') - self.assertEquals(1, mod.a) - - mod = imp.load_compiled(temp_mod_name, temp_mod_name + '.pyc') - self.assertEquals(1, mod.a) - - if not os.path.exists(test_package_name): - os.mkdir(test_package_name) - with open(init_file_name, 'w') as file: - file.write('b = 2\n') - package = imp.load_package(test_package_name, test_package_name) - self.assertEquals(2, package.b) - finally: - support.unlink(temp_mod_name + '.py') - support.unlink(temp_mod_name + '.pyc') - support.unlink(temp_mod_name + '.pyo') - - support.unlink(init_file_name + '.py') - support.unlink(init_file_name + '.pyc') - support.unlink(init_file_name + '.pyo') - support.rmtree(test_package_name) + if not special_char: + self.skipTest("can't run this test with %s as preferred encoding" + % locale_encoding) + decoded_char = special_char.decode(locale_encoding) + temp_mod_name = 'test_imp_helper_' + decoded_char + test_package_name = 'test_imp_helper_package_' + decoded_char + init_file_name = os.path.join(test_package_name, '__init__.py') + try: + with open(temp_mod_name + '.py', 'w') as file: + file.write('a = 1\n') + file, filename, info = imp.find_module(temp_mod_name) + self.assertNotEquals(None, file) + self.assertTrue(filename[:-3].endswith(temp_mod_name)) + self.assertEquals('.py', info[0]) + self.assertEquals('U', info[1]) + self.assertEquals(imp.PY_SOURCE, info[2]) + + mod = imp.load_module(temp_mod_name, file, filename, info) + self.assertEquals(1, mod.a) + file.close() + + mod = imp.load_source(temp_mod_name, temp_mod_name + '.py') + self.assertEquals(1, mod.a) + + mod = imp.load_compiled(temp_mod_name, temp_mod_name + '.pyc') + self.assertEquals(1, mod.a) + + if not os.path.exists(test_package_name): + os.mkdir(test_package_name) + with open(init_file_name, 'w') as file: + file.write('b = 2\n') + package = imp.load_package(test_package_name, test_package_name) + self.assertEquals(2, package.b) + finally: + support.unlink(temp_mod_name + '.py') + support.unlink(temp_mod_name + '.pyc') + support.unlink(temp_mod_name + '.pyo') + + support.unlink(init_file_name + '.py') + support.unlink(init_file_name + '.pyc') + support.unlink(init_file_name + '.pyo') + support.rmtree(test_package_name) class ReloadTests(unittest.TestCase): From nnorwitz at gmail.com Fri Mar 5 13:52:20 2010 From: nnorwitz at gmail.com (Neal Norwitz) Date: Fri, 5 Mar 2010 07:52:20 -0500 Subject: [Python-checkins] Python Regression Test Failures all (1) Message-ID: <20100305125220.GA26082@kbk-i386-bb.psfb.org> 352 tests OK. 1 test failed: test_subprocess 26 tests skipped: test_aepack test_al test_applesingle test_bsddb185 test_cd test_cl test_epoll test_gl test_imgfile test_ioctl test_kqueue test_macos test_macostools test_multiprocessing test_py3kwarn test_scriptpackages test_startfile test_sunaudiodev test_tcl test_tk test_ttk_guionly test_ttk_textonly test_unicode_file test_winreg test_winsound test_zipfile64 6 skips unexpected on linux2: test_multiprocessing test_ttk_guionly test_epoll test_tk test_ioctl test_ttk_textonly test_grammar test_opcodes test_dict test_builtin test_exceptions test_types test_unittest test_doctest test_doctest2 test_MimeWriter test_SimpleHTTPServer test_StringIO test___all__ test___future__ test__locale test_abc test_abstract_numbers test_aepack test_aepack skipped -- No module named aetypes test_aifc test_al test_al skipped -- No module named al test_anydbm test_applesingle test_applesingle skipped -- No module named MacOS test_argparse test_array test_ascii_formatd test_ast test_asynchat test_asyncore test_atexit test_audioop test_augassign test_base64 test_bastion test_bigaddrspace test_bigmem test_binascii test_binhex test_binop test_bisect test_bool test_bsddb test_bsddb185 test_bsddb185 skipped -- No module named bsddb185 test_bsddb3 Sleepycat Software: Berkeley DB 4.1.25: (December 19, 2002) Test path prefix: /tmp/z-test_bsddb3-5139 test_buffer test_bufio test_bytes test_bz2 test_calendar test_call test_capi test_cd test_cd skipped -- No module named cd test_cfgparser test_cgi test_charmapcodec test_cl test_cl skipped -- No module named cl test_class test_cmath test_cmd test_cmd_line test_cmd_line_script test_code test_codeccallbacks test_codecencodings_cn test_codecencodings_hk test_codecencodings_jp test_codecencodings_kr test_codecencodings_tw test_codecmaps_cn test_codecmaps_hk test_codecmaps_jp test_codecmaps_kr test_codecmaps_tw test_codecs test_codeop test_coding test_coercion test_collections test_colorsys test_commands test_compare test_compile test_compileall test_compiler test_complex test_complex_args test_contains test_contextlib test_cookie test_cookielib test_copy test_copy_reg test_cpickle test_cprofile test_crypt test_csv test_ctypes test_datetime test_dbm test_decimal test_decorators test_defaultdict test_deque test_descr test_descrtut test_dictcomps test_dictviews test_difflib test_dircache test_dis test_distutils [20679 refs] test_dl test_docxmlrpc test_dumbdbm test_dummy_thread test_dummy_threading test_email test_email_codecs test_email_renamed test_enumerate test_eof test_epoll test_epoll skipped -- kernel doesn't support epoll() test_errno test_exception_variations test_extcall test_fcntl test_file test_file2k test_filecmp test_fileinput test_fileio test_float test_fnmatch test_fork1 test_format test_fpformat test_fractions test_frozen test_ftplib test_funcattrs test_functools test_future test_future3 test_future4 test_future5 test_future_builtins test_gc test_gdbm test_generators test_genericpath test_genexps test_getargs test_getargs2 test_getopt test_gettext test_gl test_gl skipped -- No module named gl test_glob test_global test_grp test_gzip test_hash test_hashlib test_heapq test_hmac test_hotshot test_htmllib test_htmlparser test_httplib test_httpservers [16680 refs] [16680 refs] [16680 refs] [28258 refs] test_imageop test_imaplib test_imgfile test_imgfile skipped -- No module named imgfile test_imp test_import test_importhooks test_importlib test_index test_inspect test_int test_int_literal test_io test_ioctl test_ioctl skipped -- Unable to open /dev/tty test_isinstance test_iter test_iterlen test_itertools test_json test_kqueue test_kqueue skipped -- test works only on BSD test_largefile test_lib2to3 test_linecache test_list test_locale test_logging test_long test_long_future test_longexp test_macos test_macos skipped -- No module named MacOS test_macostools test_macostools skipped -- No module named MacOS test_macpath test_mailbox test_marshal test_math test_md5 test_memoryio test_memoryview test_mhlib test_mimetools test_mimetypes test_minidom test_mmap test_module test_modulefinder test_multibytecodec test_multibytecodec_support test_multifile test_multiprocessing test_multiprocessing skipped -- This platform lacks a functioning sem_open implementation, therefore, the required synchronization primitives needed will not function, see issue 3770. test_mutants test_mutex test_netrc test_new test_nis test_normalization test_ntpath test_old_mailbox test_openpty test_operator test_optparse test_os test_parser Expecting 's_push: parser stack overflow' in next line s_push: parser stack overflow test_pdb test_peepholer test_pep247 test_pep263 test_pep277 test_pep292 test_pep352 test_pickle test_pickletools test_pipes test_pkg test_pkgimport test_pkgutil test_platform [18076 refs] [18076 refs] test_plistlib test_poll test_popen [16685 refs] [16685 refs] [16685 refs] test_popen2 test_poplib test_posix test_posixpath test_pow test_pprint test_print test_profile test_profilehooks test_property test_pstats test_pty test_pwd test_py3kwarn test_py3kwarn skipped -- test.test_py3kwarn must be run with the -3 flag test_pyclbr test_pydoc [23122 refs] [23122 refs] [23122 refs] [23122 refs] [23122 refs] [23121 refs] [23121 refs] test_pyexpat test_queue test_quopri [19508 refs] [19508 refs] test_random test_re test_readline test_repr test_resource test_rfc822 test_richcmp test_robotparser test_runpy test_sax test_scope test_scriptpackages test_scriptpackages skipped -- No module named aetools test_select test_set test_setcomps test_sets test_sgmllib test_sha test_shelve test_shlex test_shutil test_signal test_site [16680 refs] [16680 refs] [16680 refs] [16680 refs] test_slice test_smtplib test_smtpnet test_socket test_socketserver test_softspace test_sort test_sqlite test_ssl test_startfile test_startfile skipped -- module os has no attribute startfile test_str test_strftime test_string test_stringprep test_strop test_strptime test_strtod test_struct test_structmembers test_structseq test_subprocess [16680 refs] [16680 refs] [16680 refs] [16680 refs] [16680 refs] [16680 refs] [16680 refs] [16680 refs] [16680 refs] [16680 refs] [16680 refs] [16680 refs] [16680 refs] [16680 refs] [16895 refs] [16680 refs] [16680 refs] [16680 refs] [16680 refs] [16680 refs] . [16680 refs] [16680 refs] this bit of output is from a test of stdout in a different process ... [16680 refs] [16680 refs] [16895 refs] [16680 refs] [16680 refs] [16680 refs] Traceback (most recent call last): File "", line 1, in EOFError: EOF when reading a line [16680 refs] [16680 refs] [16680 refs] [16680 refs] [16680 refs] [16680 refs] [16680 refs] [16680 refs] [16680 refs] [16680 refs] [16680 refs] [16680 refs] [16680 refs] [16680 refs] [16680 refs] [16895 refs] [16680 refs] [16680 refs] [16680 refs] [16680 refs] [16680 refs] . [16680 refs] [16680 refs] this bit of output is from a test of stdout in a different process ... [16680 refs] [16680 refs] [16895 refs] test test_subprocess failed -- Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/test/test_subprocess.py", line 658, in test_send_signal self.assertIsNone(p.poll()) AssertionError: 1 is not None Re-running test 'test_subprocess' in verbose mode test_call_kwargs (test.test_subprocess.ProcessTestCase) ... [16680 refs] ok test_call_seq (test.test_subprocess.ProcessTestCase) ... [16680 refs] ok test_check_call_nonzero (test.test_subprocess.ProcessTestCase) ... [16680 refs] ok test_check_call_zero (test.test_subprocess.ProcessTestCase) ... [16680 refs] ok test_check_output (test.test_subprocess.ProcessTestCase) ... [16680 refs] ok test_check_output_nonzero (test.test_subprocess.ProcessTestCase) ... [16680 refs] ok test_check_output_stderr (test.test_subprocess.ProcessTestCase) ... ok test_check_output_stdout_arg (test.test_subprocess.ProcessTestCase) ... ok test_communicate (test.test_subprocess.ProcessTestCase) ... ok test_communicate_pipe_buf (test.test_subprocess.ProcessTestCase) ... ok test_communicate_pipe_fd_leak (test.test_subprocess.ProcessTestCase) ... [16680 refs] ok test_communicate_returns (test.test_subprocess.ProcessTestCase) ... [16680 refs] ok test_communicate_stderr (test.test_subprocess.ProcessTestCase) ... ok test_communicate_stdin (test.test_subprocess.ProcessTestCase) ... [16680 refs] ok test_communicate_stdout (test.test_subprocess.ProcessTestCase) ... [16680 refs] ok test_cwd (test.test_subprocess.ProcessTestCase) ... [16680 refs] ok test_env (test.test_subprocess.ProcessTestCase) ... [16680 refs] ok test_executable_with_cwd (test.test_subprocess.ProcessTestCase) ... [16680 refs] ok test_executable_without_cwd (test.test_subprocess.ProcessTestCase) ... [16680 refs] ok test_invalid_bufsize (test.test_subprocess.ProcessTestCase) ... ok test_leaking_fds_on_error (test.test_subprocess.ProcessTestCase) ... ok test_list2cmdline (test.test_subprocess.ProcessTestCase) ... ok test_no_leaking (test.test_subprocess.ProcessTestCase) ... ok test_poll (test.test_subprocess.ProcessTestCase) ... [16895 refs] ok test_stderr_filedes (test.test_subprocess.ProcessTestCase) ... ok test_stderr_fileobj (test.test_subprocess.ProcessTestCase) ... ok test_stderr_none (test.test_subprocess.ProcessTestCase) ... [16680 refs] ok test_stderr_pipe (test.test_subprocess.ProcessTestCase) ... ok test_stdin_filedes (test.test_subprocess.ProcessTestCase) ... [16680 refs] ok test_stdin_fileobj (test.test_subprocess.ProcessTestCase) ... [16680 refs] ok test_stdin_none (test.test_subprocess.ProcessTestCase) ... ok test_stdin_pipe (test.test_subprocess.ProcessTestCase) ... [16680 refs] ok test_stdout_filedes (test.test_subprocess.ProcessTestCase) ... [16680 refs] ok test_stdout_filedes_of_stdout (test.test_subprocess.ProcessTestCase) ... . [16680 refs] ok test_stdout_fileobj (test.test_subprocess.ProcessTestCase) ... [16680 refs] ok test_stdout_none (test.test_subprocess.ProcessTestCase) ... this bit of output is from a test of stdout in a different process ... ok test_stdout_pipe (test.test_subprocess.ProcessTestCase) ... [16680 refs] ok test_stdout_stderr_file (test.test_subprocess.ProcessTestCase) ... ok test_stdout_stderr_pipe (test.test_subprocess.ProcessTestCase) ... ok test_universal_newlines (test.test_subprocess.ProcessTestCase) ... [16680 refs] ok test_universal_newlines_communicate (test.test_subprocess.ProcessTestCase) ... ok test_wait (test.test_subprocess.ProcessTestCase) ... [16895 refs] ok test_writes_before_communicate (test.test_subprocess.ProcessTestCase) ... ok test_args_string (test.test_subprocess.POSIXProcessTestCase) ... [16680 refs] ok test_call_string (test.test_subprocess.POSIXProcessTestCase) ... [16680 refs] ok test_exceptions (test.test_subprocess.POSIXProcessTestCase) ... ok test_invalid_args (test.test_subprocess.POSIXProcessTestCase) ... ok test_kill (test.test_subprocess.POSIXProcessTestCase) ... Traceback (most recent call last): File "", line 1, in EOFError: EOF when reading a line [16680 refs] FAIL test_preexec (test.test_subprocess.POSIXProcessTestCase) ... [16680 refs] ok test_run_abort (test.test_subprocess.POSIXProcessTestCase) ... ok test_send_signal (test.test_subprocess.POSIXProcessTestCase) ... Traceback (most recent call last): File "", line 1, in EOFError: EOF when reading a line [16680 refs] FAIL test_shell_sequence (test.test_subprocess.POSIXProcessTestCase) ... ok test_shell_string (test.test_subprocess.POSIXProcessTestCase) ... ok test_terminate (test.test_subprocess.POSIXProcessTestCase) ... ok test_call_string (test.test_subprocess.Win32ProcessTestCase) ... skipped 'Windows specific tests' test_close_fds (test.test_subprocess.Win32ProcessTestCase) ... skipped 'Windows specific tests' test_creationflags (test.test_subprocess.Win32ProcessTestCase) ... skipped 'Windows specific tests' test_invalid_args (test.test_subprocess.Win32ProcessTestCase) ... skipped 'Windows specific tests' test_kill (test.test_subprocess.Win32ProcessTestCase) ... skipped 'Windows specific tests' test_send_signal (test.test_subprocess.Win32ProcessTestCase) ... skipped 'Windows specific tests' test_shell_sequence (test.test_subprocess.Win32ProcessTestCase) ... skipped 'Windows specific tests' test_shell_string (test.test_subprocess.Win32ProcessTestCase) ... skipped 'Windows specific tests' test_startupinfo (test.test_subprocess.Win32ProcessTestCase) ... skipped 'Windows specific tests' test_terminate (test.test_subprocess.Win32ProcessTestCase) ... skipped 'Windows specific tests' test_call_kwargs (test.test_subprocess.ProcessTestCaseNoPoll) ... [16680 refs] ok test_call_seq (test.test_subprocess.ProcessTestCaseNoPoll) ... [16680 refs] ok test_check_call_nonzero (test.test_subprocess.ProcessTestCaseNoPoll) ... [16680 refs] ok test_check_call_zero (test.test_subprocess.ProcessTestCaseNoPoll) ... [16680 refs] ok test_check_output (test.test_subprocess.ProcessTestCaseNoPoll) ... [16680 refs] ok test_check_output_nonzero (test.test_subprocess.ProcessTestCaseNoPoll) ... [16680 refs] ok test_check_output_stderr (test.test_subprocess.ProcessTestCaseNoPoll) ... ok test_check_output_stdout_arg (test.test_subprocess.ProcessTestCaseNoPoll) ... ok test_communicate (test.test_subprocess.ProcessTestCaseNoPoll) ... ok test_communicate_pipe_buf (test.test_subprocess.ProcessTestCaseNoPoll) ... ok test_communicate_pipe_fd_leak (test.test_subprocess.ProcessTestCaseNoPoll) ... [16680 refs] ok test_communicate_returns (test.test_subprocess.ProcessTestCaseNoPoll) ... [16680 refs] ok test_communicate_stderr (test.test_subprocess.ProcessTestCaseNoPoll) ... ok test_communicate_stdin (test.test_subprocess.ProcessTestCaseNoPoll) ... [16680 refs] ok test_communicate_stdout (test.test_subprocess.ProcessTestCaseNoPoll) ... [16680 refs] ok test_cwd (test.test_subprocess.ProcessTestCaseNoPoll) ... [16680 refs] ok test_env (test.test_subprocess.ProcessTestCaseNoPoll) ... [16680 refs] ok test_executable_with_cwd (test.test_subprocess.ProcessTestCaseNoPoll) ... [16680 refs] ok test_executable_without_cwd (test.test_subprocess.ProcessTestCaseNoPoll) ... [16680 refs] ok test_invalid_bufsize (test.test_subprocess.ProcessTestCaseNoPoll) ... ok test_leaking_fds_on_error (test.test_subprocess.ProcessTestCaseNoPoll) ... ok test_list2cmdline (test.test_subprocess.ProcessTestCaseNoPoll) ... ok test_no_leaking (test.test_subprocess.ProcessTestCaseNoPoll) ... ok test_poll (test.test_subprocess.ProcessTestCaseNoPoll) ... [16895 refs] ok test_stderr_filedes (test.test_subprocess.ProcessTestCaseNoPoll) ... ok test_stderr_fileobj (test.test_subprocess.ProcessTestCaseNoPoll) ... ok test_stderr_none (test.test_subprocess.ProcessTestCaseNoPoll) ... [16680 refs] ok test_stderr_pipe (test.test_subprocess.ProcessTestCaseNoPoll) ... ok test_stdin_filedes (test.test_subprocess.ProcessTestCaseNoPoll) ... [16680 refs] ok test_stdin_fileobj (test.test_subprocess.ProcessTestCaseNoPoll) ... [16680 refs] ok test_stdin_none (test.test_subprocess.ProcessTestCaseNoPoll) ... ok test_stdin_pipe (test.test_subprocess.ProcessTestCaseNoPoll) ... [16680 refs] ok test_stdout_filedes (test.test_subprocess.ProcessTestCaseNoPoll) ... [16680 refs] ok test_stdout_filedes_of_stdout (test.test_subprocess.ProcessTestCaseNoPoll) ... . [16680 refs] ok test_stdout_fileobj (test.test_subprocess.ProcessTestCaseNoPoll) ... [16680 refs] ok test_stdout_none (test.test_subprocess.ProcessTestCaseNoPoll) ... this bit of output is from a test of stdout in a different process ... ok test_stdout_pipe (test.test_subprocess.ProcessTestCaseNoPoll) ... [16680 refs] ok test_stdout_stderr_file (test.test_subprocess.ProcessTestCaseNoPoll) ... ok test_stdout_stderr_pipe (test.test_subprocess.ProcessTestCaseNoPoll) ... ok test_universal_newlines (test.test_subprocess.ProcessTestCaseNoPoll) ... [16680 refs] ok test_universal_newlines_communicate (test.test_subprocess.ProcessTestCaseNoPoll) ... ok test_wait (test.test_subprocess.ProcessTestCaseNoPoll) ... [16895 refs] ok test_writes_before_communicate (test.test_subprocess.ProcessTestCaseNoPoll) ... ok test_eintr_retry_call (test.test_subprocess.HelperFunctionTests) ... ok ====================================================================== FAIL: test_kill (test.test_subprocess.POSIXProcessTestCase) ---------------------------------------------------------------------- Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/test/test_subprocess.py", line 675, in test_kill self.assertIs(p.poll(), None) AssertionError: 1 is not None ====================================================================== FAIL: test_send_signal (test.test_subprocess.POSIXProcessTestCase) ---------------------------------------------------------------------- Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/test/test_subprocess.py", line 658, in test_send_signal self.assertIsNone(p.poll()) AssertionError: 1 is not None ---------------------------------------------------------------------- Ran 108 tests in 266.830s FAILED (failures=2, skipped=10) test test_subprocess failed -- multiple errors occurred test_sunaudiodev test_sunaudiodev skipped -- No module named sunaudiodev test_sundry test_symtable test_syntax test_sys [16680 refs] [16680 refs] [16909 refs] [16703 refs] test_sysconfig test_tarfile test_tcl test_tcl skipped -- No module named _tkinter test_telnetlib test_tempfile [16680 refs] test_textwrap test_thread test_threaded_import Unhandled exception in thread started by Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/test/test_thread.py", line 218, in thread1 os.close(self.write_fd) OSError: [Errno 9] Bad file descriptor test_threadedtempfile test_threading [19980 refs] [22486 refs] [22300 refs] [22300 refs] [22300 refs] [22300 refs] test_threading_local test_threadsignals test_time test_timeout test_tk test_tk skipped -- No module named _tkinter test_tokenize test_trace test_traceback test_transformer test_ttk_guionly test_ttk_guionly skipped -- No module named _tkinter test_ttk_textonly test_ttk_textonly skipped -- No module named _tkinter test_tuple test_typechecks test_ucn test_unary test_undocumented_details test_unicode test_unicode_file test_unicode_file skipped -- No Unicode filesystem semantics on this platform. test_unicodedata test_univnewlines test_univnewlines2k test_unpack test_urllib test_urllib2 test_urllib2_localnet test_urllib2net test_urllibnet test_urlparse test_userdict test_userlist test_userstring test_uu test_uuid WARNING: uuid.getnode is unreliable on many platforms. It is disabled until the code and/or test can be fixed properly. WARNING: uuid._ifconfig_getnode is unreliable on many platforms. It is disabled until the code and/or test can be fixed properly. WARNING: uuid._unixdll_getnode is unreliable on many platforms. It is disabled until the code and/or test can be fixed properly. test_wait3 test_wait4 test_warnings test_wave test_weakref test_whichdb test_winreg test_winreg skipped -- No module named _winreg test_winsound test_winsound skipped -- No module named winsound test_with test_wsgiref test_xdrlib test_xml_etree test_xml_etree_c test_xmllib test_xmlrpc test_xpickle sh: line 1: python2.4: command not found sh: line 1: python2.6: command not found test_xrange test_zipfile test_zipfile64 test_zipfile64 skipped -- test requires loads of disk-space bytes and a long time to run test_zipimport test_zipimport_support test_zlib 352 tests OK. 1 test failed: test_subprocess 26 tests skipped: test_aepack test_al test_applesingle test_bsddb185 test_cd test_cl test_epoll test_gl test_imgfile test_ioctl test_kqueue test_macos test_macostools test_multiprocessing test_py3kwarn test_scriptpackages test_startfile test_sunaudiodev test_tcl test_tk test_ttk_guionly test_ttk_textonly test_unicode_file test_winreg test_winsound test_zipfile64 6 skips unexpected on linux2: test_multiprocessing test_ttk_guionly test_epoll test_tk test_ioctl test_ttk_textonly [953367 refs] From python-checkins at python.org Fri Mar 5 15:36:20 2010 From: python-checkins at python.org (mark.dickinson) Date: Fri, 5 Mar 2010 15:36:20 +0100 (CET) Subject: [Python-checkins] r78690 - in python/trunk: Lib/test/test_struct.py Modules/_struct.c Message-ID: <20100305143620.8044EC5A3@mail.python.org> Author: mark.dickinson Date: Fri Mar 5 15:36:20 2010 New Revision: 78690 Log: Fix incorrect stacklevel for DeprecationWarnings originating from the struct module. Also clean up related tests in test_struct. The stacklevel fix should be backported to 2.6 once that branch is unfrozen. Modified: python/trunk/Lib/test/test_struct.py python/trunk/Modules/_struct.c Modified: python/trunk/Lib/test/test_struct.py ============================================================================== --- python/trunk/Lib/test/test_struct.py (original) +++ python/trunk/Lib/test/test_struct.py Fri Mar 5 15:36:20 2010 @@ -23,13 +23,6 @@ else: HAVE_LONG_LONG = True -try: - import _struct -except ImportError: - PY_STRUCT_FLOAT_COERCE = 2 -else: - PY_STRUCT_FLOAT_COERCE = getattr(_struct, '_PY_STRUCT_FLOAT_COERCE', 0) - def string_reverse(s): return "".join(reversed(s)) @@ -39,39 +32,25 @@ else: return string_reverse(value) -def with_warning_restore(func): - @wraps(func) - def decorator(*args, **kw): - with warnings.catch_warnings(): - # We need this function to warn every time, so stick an - # unqualifed 'always' at the head of the filter list - warnings.simplefilter("always") - warnings.filterwarnings("error", category=DeprecationWarning) - return func(*args, **kw) - return decorator - class StructTest(unittest.TestCase): - @with_warning_restore def check_float_coerce(self, format, number): # SF bug 1530559. struct.pack raises TypeError where it used to convert. - if PY_STRUCT_FLOAT_COERCE == 2: - # Test for pre-2.5 struct module - packed = struct.pack(format, number) - floored = struct.unpack(format, packed)[0] - self.assertEqual(floored, int(number), - "did not correcly coerce float to int") - return - try: - struct.pack(format, number) - except struct.error: - if PY_STRUCT_FLOAT_COERCE: - self.fail("expected DeprecationWarning for float coerce") - except DeprecationWarning: - if not PY_STRUCT_FLOAT_COERCE: - self.fail("expected to raise struct.error for float coerce") - else: - self.fail("did not raise error for float coerce") + with warnings.catch_warnings(): + warnings.filterwarnings( + "ignore", + category=DeprecationWarning, + message=".*integer argument expected, got float", + module=__name__) + self.assertEqual(struct.pack(format, number), struct.pack(format, int(number))) + + with warnings.catch_warnings(): + warnings.filterwarnings( + "error", + category=DeprecationWarning, + message=".*integer argument expected, got float", + module="unittest") + self.assertRaises(DeprecationWarning, struct.pack, format, number) def test_isbigendian(self): self.assertEqual((struct.pack('=i', 1)[0] == chr(0)), ISBIGENDIAN) Modified: python/trunk/Modules/_struct.c ============================================================================== --- python/trunk/Modules/_struct.c (original) +++ python/trunk/Modules/_struct.c Fri Mar 5 15:36:20 2010 @@ -121,7 +121,7 @@ } #ifdef PY_STRUCT_FLOAT_COERCE if (PyFloat_Check(v)) { - if (PyErr_WarnEx(PyExc_DeprecationWarning, FLOAT_COERCE, 2)<0) + if (PyErr_WarnEx(PyExc_DeprecationWarning, FLOAT_COERCE, 1)<0) return NULL; return PyNumber_Long(v); } From python-checkins at python.org Fri Mar 5 15:41:34 2010 From: python-checkins at python.org (mark.dickinson) Date: Fri, 5 Mar 2010 15:41:34 +0100 (CET) Subject: [Python-checkins] r78691 - python/branches/py3k Message-ID: <20100305144134.29B1AD93C@mail.python.org> Author: mark.dickinson Date: Fri Mar 5 15:41:33 2010 New Revision: 78691 Log: Blocked revisions 78690 via svnmerge ........ r78690 | mark.dickinson | 2010-03-05 14:36:20 +0000 (Fri, 05 Mar 2010) | 3 lines Fix incorrect stacklevel for DeprecationWarnings originating from the struct module. Also clean up related tests in test_struct. The stacklevel fix should be backported to 2.6 once that branch is unfrozen. ........ Modified: python/branches/py3k/ (props changed) From python-checkins at python.org Fri Mar 5 15:44:08 2010 From: python-checkins at python.org (mark.dickinson) Date: Fri, 5 Mar 2010 15:44:08 +0100 (CET) Subject: [Python-checkins] r78692 - python/branches/py3k/Lib/test/test_struct.py Message-ID: <20100305144408.7051CDB24@mail.python.org> Author: mark.dickinson Date: Fri Mar 5 15:44:08 2010 New Revision: 78692 Log: Remove unused imports & clean up sys imports in test_struct. Modified: python/branches/py3k/Lib/test/test_struct.py Modified: python/branches/py3k/Lib/test/test_struct.py ============================================================================== --- python/branches/py3k/Lib/test/test_struct.py (original) +++ python/branches/py3k/Lib/test/test_struct.py Fri Mar 5 15:44:08 2010 @@ -1,15 +1,12 @@ import array import unittest import struct -import warnings +import sys -from functools import wraps -from test.support import TestFailed, verbose, run_unittest +from test.support import run_unittest -import sys ISBIGENDIAN = sys.byteorder == "big" IS32BIT = sys.maxsize == 0x7fffffff -del sys def string_reverse(s): return s[::-1] @@ -377,7 +374,6 @@ def test_1229380(self): # SF bug 1229380. No struct.pack exception for some out of # range integers - import sys for endian in ('', '>', '<'): for fmt in ('B', 'H', 'I', 'L'): self.assertRaises((struct.error, OverflowError), struct.pack, From python-checkins at python.org Fri Mar 5 15:45:49 2010 From: python-checkins at python.org (mark.dickinson) Date: Fri, 5 Mar 2010 15:45:49 +0100 (CET) Subject: [Python-checkins] r78693 - in python/branches/release31-maint: Lib/test/test_struct.py Message-ID: <20100305144549.86A04DE67@mail.python.org> Author: mark.dickinson Date: Fri Mar 5 15:45:49 2010 New Revision: 78693 Log: Merged revisions 78692 via svnmerge from svn+ssh://pythondev at svn.python.org/python/branches/py3k ........ r78692 | mark.dickinson | 2010-03-05 14:44:08 +0000 (Fri, 05 Mar 2010) | 1 line Remove unused imports & clean up sys imports in test_struct. ........ Modified: python/branches/release31-maint/ (props changed) python/branches/release31-maint/Lib/test/test_struct.py Modified: python/branches/release31-maint/Lib/test/test_struct.py ============================================================================== --- python/branches/release31-maint/Lib/test/test_struct.py (original) +++ python/branches/release31-maint/Lib/test/test_struct.py Fri Mar 5 15:45:49 2010 @@ -1,15 +1,12 @@ import array import unittest import struct -import warnings +import sys -from functools import wraps -from test.support import TestFailed, verbose, run_unittest +from test.support import run_unittest -import sys ISBIGENDIAN = sys.byteorder == "big" IS32BIT = sys.maxsize == 0x7fffffff -del sys def string_reverse(s): return s[::-1] @@ -377,7 +374,6 @@ def test_1229380(self): # SF bug 1229380. No struct.pack exception for some out of # range integers - import sys for endian in ('', '>', '<'): for fmt in ('B', 'H', 'I', 'L'): self.assertRaises((struct.error, OverflowError), struct.pack, From python-checkins at python.org Fri Mar 5 15:50:22 2010 From: python-checkins at python.org (mark.dickinson) Date: Fri, 5 Mar 2010 15:50:22 +0100 (CET) Subject: [Python-checkins] r78694 - python/trunk/Modules/_struct.c Message-ID: <20100305145022.D61B9DE9C@mail.python.org> Author: mark.dickinson Date: Fri Mar 5 15:50:22 2010 New Revision: 78694 Log: Remove the redundant #define: PY_STRUCT_FLOAT_COERCE Modified: python/trunk/Modules/_struct.c Modified: python/trunk/Modules/_struct.c ============================================================================== --- python/trunk/Modules/_struct.c (original) +++ python/trunk/Modules/_struct.c Fri Mar 5 15:50:22 2010 @@ -17,15 +17,7 @@ typedef int Py_ssize_t; #endif -/* If PY_STRUCT_FLOAT_COERCE is defined, the struct module will allow float - arguments for integer formats with a warning for backwards - compatibility. */ - -#define PY_STRUCT_FLOAT_COERCE 1 - -#ifdef PY_STRUCT_FLOAT_COERCE #define FLOAT_COERCE "integer argument expected, got float" -#endif /* The translation function for each format character is table driven */ @@ -119,13 +111,11 @@ Py_INCREF(v); return v; } -#ifdef PY_STRUCT_FLOAT_COERCE if (PyFloat_Check(v)) { if (PyErr_WarnEx(PyExc_DeprecationWarning, FLOAT_COERCE, 1)<0) return NULL; return PyNumber_Long(v); } -#endif PyErr_SetString(StructError, "cannot convert argument to long"); return NULL; @@ -1972,8 +1962,5 @@ PyModule_AddObject(m, "__version__", ver); PyModule_AddIntConstant(m, "_PY_STRUCT_RANGE_CHECKING", 1); -#ifdef PY_STRUCT_FLOAT_COERCE PyModule_AddIntConstant(m, "_PY_STRUCT_FLOAT_COERCE", 1); -#endif - } From python-checkins at python.org Fri Mar 5 15:50:47 2010 From: python-checkins at python.org (mark.dickinson) Date: Fri, 5 Mar 2010 15:50:47 +0100 (CET) Subject: [Python-checkins] r78695 - python/branches/py3k Message-ID: <20100305145047.4C2AFDEC0@mail.python.org> Author: mark.dickinson Date: Fri Mar 5 15:50:47 2010 New Revision: 78695 Log: Blocked revisions 78694 via svnmerge ........ r78694 | mark.dickinson | 2010-03-05 14:50:22 +0000 (Fri, 05 Mar 2010) | 1 line Remove the redundant #define: PY_STRUCT_FLOAT_COERCE ........ Modified: python/branches/py3k/ (props changed) From python-checkins at python.org Fri Mar 5 16:08:19 2010 From: python-checkins at python.org (ezio.melotti) Date: Fri, 5 Mar 2010 16:08:19 +0100 (CET) Subject: [Python-checkins] r78696 - python/branches/py3k/Lib/test/test_imp.py Message-ID: <20100305150819.B782AE2BD@mail.python.org> Author: ezio.melotti Date: Fri Mar 5 16:08:19 2010 New Revision: 78696 Log: r78689 enabled the test on more platforms but the buildbot did not like it. Using the filesystem encoding might work better. Also see #5604. Modified: python/branches/py3k/Lib/test/test_imp.py Modified: python/branches/py3k/Lib/test/test_imp.py ============================================================================== --- python/branches/py3k/Lib/test/test_imp.py (original) +++ python/branches/py3k/Lib/test/test_imp.py Fri Mar 5 16:08:19 2010 @@ -1,5 +1,4 @@ import imp -import locale import os import os.path import sys @@ -86,7 +85,7 @@ # But sources modified to follow generic way for processing pathes. # the return encoding can be uppercase - locale_encoding = locale.getpreferredencoding().lower() + fs_encoding = sys.getfilesystemencoding().lower() # covers utf-8 and Windows ANSI code pages # one non-space symbol from every page @@ -104,11 +103,11 @@ 'cp1258' : b'\xc0', } - special_char = known_locales.get(locale_encoding) + special_char = known_locales.get(fs_encoding) if not special_char: - self.skipTest("can't run this test with %s as preferred encoding" - % locale_encoding) - decoded_char = special_char.decode(locale_encoding) + self.skipTest("can't run this test with %s as filesystem encoding" + % fs_encoding) + decoded_char = special_char.decode(fs_encoding) temp_mod_name = 'test_imp_helper_' + decoded_char test_package_name = 'test_imp_helper_package_' + decoded_char init_file_name = os.path.join(test_package_name, '__init__.py') From python-checkins at python.org Fri Mar 5 16:17:26 2010 From: python-checkins at python.org (ezio.melotti) Date: Fri, 5 Mar 2010 16:17:26 +0100 (CET) Subject: [Python-checkins] r78697 - python/branches/py3k/Lib/test/test_imp.py Message-ID: <20100305151726.8B2B4F523@mail.python.org> Author: ezio.melotti Date: Fri Mar 5 16:17:26 2010 New Revision: 78697 Log: sys.getdefaultencoding() can return None. Modified: python/branches/py3k/Lib/test/test_imp.py Modified: python/branches/py3k/Lib/test/test_imp.py ============================================================================== --- python/branches/py3k/Lib/test/test_imp.py (original) +++ python/branches/py3k/Lib/test/test_imp.py Fri Mar 5 16:17:26 2010 @@ -86,6 +86,7 @@ # the return encoding can be uppercase fs_encoding = sys.getfilesystemencoding().lower() + fs_encoding = fs_encoding.lower() if fs_encoding else 'ascii' # covers utf-8 and Windows ANSI code pages # one non-space symbol from every page From python-checkins at python.org Fri Mar 5 16:20:03 2010 From: python-checkins at python.org (gerhard.haering) Date: Fri, 5 Mar 2010 16:20:03 +0100 (CET) Subject: [Python-checkins] r78698 - in python/branches/py3k: Doc/includes/sqlite3/load_extension.py Doc/library/sqlite3.rst Lib/sqlite3/test/dbapi.py Lib/sqlite3/test/regression.py Lib/sqlite3/test/transactions.py Misc/NEWS Modules/_sqlite/cache.c Modules/_sqlite/cache.h Modules/_sqlite/connection.c Modules/_sqlite/connection.h Modules/_sqlite/cursor.c Modules/_sqlite/cursor.h Modules/_sqlite/module.c Modules/_sqlite/module.h Modules/_sqlite/prepare_protocol.c Modules/_sqlite/prepare_protocol.h Modules/_sqlite/row.c Modules/_sqlite/row.h Modules/_sqlite/sqlitecompat.h Modules/_sqlite/statement.c Modules/_sqlite/statement.h Modules/_sqlite/util.c Modules/_sqlite/util.h setup.py Message-ID: <20100305152003.E86ABF5F5@mail.python.org> Author: gerhard.haering Date: Fri Mar 5 16:20:03 2010 New Revision: 78698 Log: Merged new pysqlite version 2.6.0 from trunk. Added: python/branches/py3k/Doc/includes/sqlite3/load_extension.py Modified: python/branches/py3k/ (props changed) python/branches/py3k/Doc/library/sqlite3.rst python/branches/py3k/Lib/sqlite3/test/dbapi.py python/branches/py3k/Lib/sqlite3/test/regression.py python/branches/py3k/Lib/sqlite3/test/transactions.py python/branches/py3k/Misc/NEWS python/branches/py3k/Modules/_sqlite/cache.c python/branches/py3k/Modules/_sqlite/cache.h python/branches/py3k/Modules/_sqlite/connection.c python/branches/py3k/Modules/_sqlite/connection.h python/branches/py3k/Modules/_sqlite/cursor.c python/branches/py3k/Modules/_sqlite/cursor.h python/branches/py3k/Modules/_sqlite/module.c python/branches/py3k/Modules/_sqlite/module.h python/branches/py3k/Modules/_sqlite/prepare_protocol.c python/branches/py3k/Modules/_sqlite/prepare_protocol.h python/branches/py3k/Modules/_sqlite/row.c python/branches/py3k/Modules/_sqlite/row.h python/branches/py3k/Modules/_sqlite/sqlitecompat.h python/branches/py3k/Modules/_sqlite/statement.c python/branches/py3k/Modules/_sqlite/statement.h python/branches/py3k/Modules/_sqlite/util.c python/branches/py3k/Modules/_sqlite/util.h python/branches/py3k/setup.py Added: python/branches/py3k/Doc/includes/sqlite3/load_extension.py ============================================================================== --- (empty file) +++ python/branches/py3k/Doc/includes/sqlite3/load_extension.py Fri Mar 5 16:20:03 2010 @@ -0,0 +1,26 @@ +import sqlite3 + +con = sqlite3.connect(":memory:") + +# enable extension loading +con.enable_load_extension(True) + +# Load the fulltext search extension +con.execute("select load_extension('./fts3.so')") + +# alternatively you can load the extension using an API call: +# con.load_extension("./fts3.so") + +# disable extension laoding again +con.enable_load_extension(False) + +# example from SQLite wiki +con.execute("create virtual table recipe using fts3(name, ingredients)") +con.executescript(""" + insert into recipe (name, ingredients) values ('broccoli stew', 'broccoli peppers cheese tomatoes'); + insert into recipe (name, ingredients) values ('pumpkin stew', 'pumpkin onions garlic celery'); + insert into recipe (name, ingredients) values ('broccoli pie', 'broccoli cheese onions flour'); + insert into recipe (name, ingredients) values ('pumpkin pie', 'pumpkin sugar flour butter'); + """) +for row in con.execute("select rowid, name, ingredients from recipe where name match 'pie'"): + print row Modified: python/branches/py3k/Doc/library/sqlite3.rst ============================================================================== --- python/branches/py3k/Doc/library/sqlite3.rst (original) +++ python/branches/py3k/Doc/library/sqlite3.rst Fri Mar 5 16:20:03 2010 @@ -365,6 +365,25 @@ method with :const:`None` for *handler*. +.. method:: Connection.enable_load_extension(enabled) + + .. versionadded:: 2.7 + + This routine allows/disallows the SQLite engine to load SQLite extensions + from shared libraries. SQLite extensions can define new functions, + aggregates or whole new virtual table implementations. One well-known + extension is the fulltext-search extension distributed with SQLite. + + .. literalinclude:: ../includes/sqlite3/load_extension.py + +.. method:: Connection.load_extension(path) + + .. versionadded:: 2.7 + + This routine loads a SQLite extension from a shared library. You have to + enable extension loading with ``enable_load_extension`` before you can use + this routine. + .. attribute:: Connection.row_factory You can change this attribute to a callable that accepts the cursor and the @@ -434,7 +453,7 @@ Cursor Objects -------------- -.. class:: Cursor +A :class:`Cursor` instance has the following attributes and methods: A SQLite database cursor has the following attributes and methods: Modified: python/branches/py3k/Lib/sqlite3/test/dbapi.py ============================================================================== --- python/branches/py3k/Lib/sqlite3/test/dbapi.py (original) +++ python/branches/py3k/Lib/sqlite3/test/dbapi.py Fri Mar 5 16:20:03 2010 @@ -1,7 +1,7 @@ #-*- coding: ISO-8859-1 -*- # pysqlite2/test/dbapi.py: tests for DB-API compliance # -# Copyright (C) 2004-2007 Gerhard H?ring +# Copyright (C) 2004-2010 Gerhard H?ring # # This file is part of pysqlite. # @@ -653,13 +653,13 @@ res = cur.fetchone()[0] self.assertEqual(res, 5) - def CheckScriptErrorIncomplete(self): + def CheckScriptSyntaxError(self): con = sqlite.connect(":memory:") cur = con.cursor() raised = False try: - cur.executescript("create table test(sadfsadfdsa") - except sqlite.ProgrammingError: + cur.executescript("create table test(x); asdf; create table test2(x)") + except sqlite.OperationalError: raised = True self.assertEqual(raised, True, "should have raised an exception") @@ -692,7 +692,7 @@ result = con.execute("select foo from test").fetchone()[0] self.assertEqual(result, 5, "Basic test of Connection.executescript") -class ClosedTests(unittest.TestCase): +class ClosedConTests(unittest.TestCase): def setUp(self): pass @@ -744,6 +744,102 @@ except: self.fail("Should have raised a ProgrammingError") + def CheckClosedCreateFunction(self): + con = sqlite.connect(":memory:") + con.close() + def f(x): return 17 + try: + con.create_function("foo", 1, f) + self.fail("Should have raised a ProgrammingError") + except sqlite.ProgrammingError: + pass + except: + self.fail("Should have raised a ProgrammingError") + + def CheckClosedCreateAggregate(self): + con = sqlite.connect(":memory:") + con.close() + class Agg: + def __init__(self): + pass + def step(self, x): + pass + def finalize(self): + return 17 + try: + con.create_aggregate("foo", 1, Agg) + self.fail("Should have raised a ProgrammingError") + except sqlite.ProgrammingError: + pass + except: + self.fail("Should have raised a ProgrammingError") + + def CheckClosedSetAuthorizer(self): + con = sqlite.connect(":memory:") + con.close() + def authorizer(*args): + return sqlite.DENY + try: + con.set_authorizer(authorizer) + self.fail("Should have raised a ProgrammingError") + except sqlite.ProgrammingError: + pass + except: + self.fail("Should have raised a ProgrammingError") + + def CheckClosedSetProgressCallback(self): + con = sqlite.connect(":memory:") + con.close() + def progress(): pass + try: + con.set_progress_handler(progress, 100) + self.fail("Should have raised a ProgrammingError") + except sqlite.ProgrammingError: + pass + except: + self.fail("Should have raised a ProgrammingError") + + def CheckClosedCall(self): + con = sqlite.connect(":memory:") + con.close() + try: + con() + self.fail("Should have raised a ProgrammingError") + except sqlite.ProgrammingError: + pass + except: + self.fail("Should have raised a ProgrammingError") + +class ClosedCurTests(unittest.TestCase): + def setUp(self): + pass + + def tearDown(self): + pass + + def CheckClosed(self): + con = sqlite.connect(":memory:") + cur = con.cursor() + cur.close() + + for method_name in ("execute", "executemany", "executescript", "fetchall", "fetchmany", "fetchone"): + if method_name in ("execute", "executescript"): + params = ("select 4 union select 5",) + elif method_name == "executemany": + params = ("insert into foo(bar) values (?)", [(3,), (4,)]) + else: + params = [] + + try: + method = getattr(cur, method_name) + + method(*params) + self.fail("Should have raised a ProgrammingError: method " + method_name) + except sqlite.ProgrammingError: + pass + except: + self.fail("Should have raised a ProgrammingError: " + method_name) + def suite(): module_suite = unittest.makeSuite(ModuleTests, "Check") connection_suite = unittest.makeSuite(ConnectionTests, "Check") @@ -751,8 +847,9 @@ thread_suite = unittest.makeSuite(ThreadTests, "Check") constructor_suite = unittest.makeSuite(ConstructorTests, "Check") ext_suite = unittest.makeSuite(ExtensionTests, "Check") - closed_suite = unittest.makeSuite(ClosedTests, "Check") - return unittest.TestSuite((module_suite, connection_suite, cursor_suite, thread_suite, constructor_suite, ext_suite, closed_suite)) + closed_con_suite = unittest.makeSuite(ClosedConTests, "Check") + closed_cur_suite = unittest.makeSuite(ClosedCurTests, "Check") + return unittest.TestSuite((module_suite, connection_suite, cursor_suite, thread_suite, constructor_suite, ext_suite, closed_con_suite, closed_cur_suite)) def test(): runner = unittest.TextTestRunner() Modified: python/branches/py3k/Lib/sqlite3/test/regression.py ============================================================================== --- python/branches/py3k/Lib/sqlite3/test/regression.py (original) +++ python/branches/py3k/Lib/sqlite3/test/regression.py Fri Mar 5 16:20:03 2010 @@ -1,7 +1,7 @@ #-*- coding: ISO-8859-1 -*- # pysqlite2/test/regression.py: pysqlite regression tests # -# Copyright (C) 2006 Gerhard H?ring +# Copyright (C) 2006-2010 Gerhard H?ring # # This file is part of pysqlite. # @@ -70,16 +70,6 @@ cur.execute('select 1 as "foo baz"') self.assertEqual(cur.description[0][0], "foo baz") - def CheckStatementAvailable(self): - # pysqlite up to 2.3.2 crashed on this, because the active statement handle was not checked - # before trying to fetch data from it. close() destroys the active statement ... - con = sqlite.connect(":memory:", detect_types=sqlite.PARSE_DECLTYPES) - cur = con.cursor() - cur.execute("select 4 union select 5") - cur.close() - cur.fetchone() - cur.fetchone() - def CheckStatementFinalizationOnCloseDb(self): # pysqlite versions <= 2.3.3 only finalized statements in the statement # cache when closing the database. statements that were still @@ -169,6 +159,25 @@ con = sqlite.connect(":memory:") setattr(con, "isolation_level", "\xe9") + def CheckCursorConstructorCallCheck(self): + """ + Verifies that cursor methods check wether base class __init__ was called. + """ + class Cursor(sqlite.Cursor): + def __init__(self, con): + pass + + con = sqlite.connect(":memory:") + cur = Cursor(con) + try: + cur.execute("select 4+5").fetchall() + self.fail("should have raised ProgrammingError") + except sqlite.ProgrammingError: + pass + except: + self.fail("should have raised ProgrammingError") + + def CheckStrSubclass(self): """ The Python 3.0 port of the module didn't cope with values of subclasses of str. @@ -176,6 +185,90 @@ class MyStr(str): pass self.con.execute("select ?", (MyStr("abc"),)) + def CheckConnectionConstructorCallCheck(self): + """ + Verifies that connection methods check wether base class __init__ was called. + """ + class Connection(sqlite.Connection): + def __init__(self, name): + pass + + con = Connection(":memory:") + try: + cur = con.cursor() + self.fail("should have raised ProgrammingError") + except sqlite.ProgrammingError: + pass + except: + self.fail("should have raised ProgrammingError") + + def CheckCursorRegistration(self): + """ + Verifies that subclassed cursor classes are correctly registered with + the connection object, too. (fetch-across-rollback problem) + """ + class Connection(sqlite.Connection): + def cursor(self): + return Cursor(self) + + class Cursor(sqlite.Cursor): + def __init__(self, con): + sqlite.Cursor.__init__(self, con) + + con = Connection(":memory:") + cur = con.cursor() + cur.execute("create table foo(x)") + cur.executemany("insert into foo(x) values (?)", [(3,), (4,), (5,)]) + cur.execute("select x from foo") + con.rollback() + try: + cur.fetchall() + self.fail("should have raised InterfaceError") + except sqlite.InterfaceError: + pass + except: + self.fail("should have raised InterfaceError") + + def CheckAutoCommit(self): + """ + Verifies that creating a connection in autocommit mode works. + 2.5.3 introduced a regression so that these could no longer + be created. + """ + con = sqlite.connect(":memory:", isolation_level=None) + + def CheckPragmaAutocommit(self): + """ + Verifies that running a PRAGMA statement that does an autocommit does + work. This did not work in 2.5.3/2.5.4. + """ + con = sqlite.connect(":memory:") + cur = con.cursor() + cur.execute("create table foo(bar)") + cur.execute("insert into foo(bar) values (5)") + + cur.execute("pragma page_size") + row = cur.fetchone() + + def CheckSetDict(self): + """ + See http://bugs.python.org/issue7478 + + It was possible to successfully register callbacks that could not be + hashed. Return codes of PyDict_SetItem were not checked properly. + """ + class NotHashable: + def __call__(self, *args, **kw): + pass + def __hash__(self): + raise TypeError() + var = NotHashable() + con = sqlite.connect(":memory:") + self.assertRaises(TypeError, con.create_function, var) + self.assertRaises(TypeError, con.create_aggregate, var) + self.assertRaises(TypeError, con.set_authorizer, var) + self.assertRaises(TypeError, con.set_progress_handler, var) + def suite(): regression_suite = unittest.makeSuite(RegressionTests, "Check") return unittest.TestSuite((regression_suite,)) Modified: python/branches/py3k/Lib/sqlite3/test/transactions.py ============================================================================== --- python/branches/py3k/Lib/sqlite3/test/transactions.py (original) +++ python/branches/py3k/Lib/sqlite3/test/transactions.py Fri Mar 5 16:20:03 2010 @@ -147,6 +147,26 @@ # NO self.con2.rollback() HERE!!! self.con1.commit() + def CheckRollbackCursorConsistency(self): + """ + Checks if cursors on the connection are set into a "reset" state + when a rollback is done on the connection. + """ + con = sqlite.connect(":memory:") + cur = con.cursor() + cur.execute("create table test(x)") + cur.execute("insert into test(x) values (5)") + cur.execute("select 1 union select 2 union select 3") + + con.rollback() + try: + cur.fetchall() + self.fail("InterfaceError should have been raised") + except sqlite.InterfaceError as e: + pass + except: + self.fail("InterfaceError should have been raised") + class SpecialCommandTests(unittest.TestCase): def setUp(self): self.con = sqlite.connect(":memory:") Modified: python/branches/py3k/Misc/NEWS ============================================================================== --- python/branches/py3k/Misc/NEWS (original) +++ python/branches/py3k/Misc/NEWS Fri Mar 5 16:20:03 2010 @@ -268,6 +268,9 @@ Library ------- +- The sqlite3 module was updated to pysqlite 2.6.0. This fixes several obscure + bugs and allows loading SQLite extensions from shared libraries. + - Issue #1054943: Fix unicodedata.normalize('NFC', text) for the Public Review Issue #29 Modified: python/branches/py3k/Modules/_sqlite/cache.c ============================================================================== --- python/branches/py3k/Modules/_sqlite/cache.c (original) +++ python/branches/py3k/Modules/_sqlite/cache.c Fri Mar 5 16:20:03 2010 @@ -1,6 +1,6 @@ /* cache .c - a LRU cache * - * Copyright (C) 2004-2007 Gerhard H?ring + * Copyright (C) 2004-2010 Gerhard H?ring * * This file is part of pysqlite. * @@ -21,6 +21,7 @@ * 3. This notice may not be removed or altered from any source distribution. */ +#include "sqlitecompat.h" #include "cache.h" #include Modified: python/branches/py3k/Modules/_sqlite/cache.h ============================================================================== --- python/branches/py3k/Modules/_sqlite/cache.h (original) +++ python/branches/py3k/Modules/_sqlite/cache.h Fri Mar 5 16:20:03 2010 @@ -1,6 +1,6 @@ /* cache.h - definitions for the LRU cache * - * Copyright (C) 2004-2007 Gerhard H?ring + * Copyright (C) 2004-2010 Gerhard H?ring * * This file is part of pysqlite. * Modified: python/branches/py3k/Modules/_sqlite/connection.c ============================================================================== --- python/branches/py3k/Modules/_sqlite/connection.c (original) +++ python/branches/py3k/Modules/_sqlite/connection.c Fri Mar 5 16:20:03 2010 @@ -1,6 +1,6 @@ /* connection.c - the connection type * - * Copyright (C) 2004-2007 Gerhard H?ring + * Copyright (C) 2004-2010 Gerhard H?ring * * This file is part of pysqlite. * @@ -35,7 +35,14 @@ #define ACTION_FINALIZE 1 #define ACTION_RESET 2 +#if SQLITE_VERSION_NUMBER >= 3003008 +#ifndef SQLITE_OMIT_LOAD_EXTENSION +#define HAVE_LOAD_EXTENSION +#endif +#endif + static int pysqlite_connection_set_isolation_level(pysqlite_Connection* self, PyObject* isolation_level); +static void _pysqlite_drop_unused_cursor_references(pysqlite_Connection* self); static void _sqlite3_result_error(sqlite3_context* ctx, const char* errmsg, int len) @@ -69,10 +76,13 @@ return -1; } + self->initialized = 1; + self->begin_statement = NULL; self->statement_cache = NULL; self->statements = NULL; + self->cursors = NULL; Py_INCREF(Py_None); self->row_factory = Py_None; @@ -106,11 +116,15 @@ return -1; } + self->created_statements = 0; + self->created_cursors = 0; + + /* Create lists of weak references to statements/cursors */ self->statements = PyList_New(0); - if (!self->statements) { + self->cursors = PyList_New(0); + if (!self->statements || !self->cursors) { return -1; } - self->created_statements = 0; /* By default, the Cache class INCREFs the factory in its initializer, and * decrefs it in its deallocator method. Since this would create a circular @@ -174,11 +188,12 @@ } /* action in (ACTION_RESET, ACTION_FINALIZE) */ -void pysqlite_do_all_statements(pysqlite_Connection* self, int action) +void pysqlite_do_all_statements(pysqlite_Connection* self, int action, int reset_cursors) { int i; PyObject* weakref; PyObject* statement; + pysqlite_Cursor* cursor; for (i = 0; i < PyList_Size(self->statements); i++) { weakref = PyList_GetItem(self->statements, i); @@ -191,6 +206,16 @@ } } } + + if (reset_cursors) { + for (i = 0; i < PyList_Size(self->cursors); i++) { + weakref = PyList_GetItem(self->cursors, i); + cursor = (pysqlite_Cursor*)PyWeakref_GetObject(weakref); + if ((PyObject*)cursor != Py_None) { + cursor->reset = 1; + } + } + } } void pysqlite_connection_dealloc(pysqlite_Connection* self) @@ -213,17 +238,43 @@ Py_XDECREF(self->text_factory); Py_XDECREF(self->collations); Py_XDECREF(self->statements); + Py_XDECREF(self->cursors); Py_TYPE(self)->tp_free((PyObject*)self); } +/* + * Registers a cursor with the connection. + * + * 0 => error; 1 => ok + */ +int pysqlite_connection_register_cursor(pysqlite_Connection* connection, PyObject* cursor) +{ + PyObject* weakref; + + weakref = PyWeakref_NewRef((PyObject*)cursor, NULL); + if (!weakref) { + goto error; + } + + if (PyList_Append(connection->cursors, weakref) != 0) { + Py_CLEAR(weakref); + goto error; + } + + Py_DECREF(weakref); + + return 1; +error: + return 0; +} + PyObject* pysqlite_connection_cursor(pysqlite_Connection* self, PyObject* args, PyObject* kwargs) { static char *kwlist[] = {"factory", NULL, NULL}; PyObject* factory = NULL; PyObject* cursor; - if (!PyArg_ParseTupleAndKeywords(args, kwargs, "|O", kwlist, &factory)) { return NULL; @@ -239,6 +290,8 @@ cursor = PyObject_CallFunction(factory, "O", self); + _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); @@ -256,7 +309,7 @@ return NULL; } - pysqlite_do_all_statements(self, ACTION_FINALIZE); + pysqlite_do_all_statements(self, ACTION_FINALIZE, 1); if (self->db) { Py_BEGIN_ALLOW_THREADS @@ -282,6 +335,11 @@ */ int pysqlite_check_connection(pysqlite_Connection* con) { + if (!con->initialized) { + PyErr_SetString(pysqlite_ProgrammingError, "Base Connection.__init__ not called."); + return 0; + } + if (!con->db) { PyErr_SetString(pysqlite_ProgrammingError, "Cannot operate on a closed database."); return 0; @@ -340,6 +398,8 @@ } if (self->inTransaction) { + pysqlite_do_all_statements(self, ACTION_RESET, 0); + Py_BEGIN_ALLOW_THREADS rc = sqlite3_prepare(self->db, "COMMIT", -1, &statement, &tail); Py_END_ALLOW_THREADS @@ -384,7 +444,7 @@ } if (self->inTransaction) { - pysqlite_do_all_statements(self, ACTION_RESET); + pysqlite_do_all_statements(self, ACTION_RESET, 1); Py_BEGIN_ALLOW_THREADS rc = sqlite3_prepare(self->db, "ROLLBACK", -1, &statement, &tail); @@ -649,7 +709,7 @@ #endif } -void _pysqlite_drop_unused_statement_references(pysqlite_Connection* self) +static void _pysqlite_drop_unused_statement_references(pysqlite_Connection* self) { PyObject* new_list; PyObject* weakref; @@ -681,6 +741,38 @@ self->statements = new_list; } +static void _pysqlite_drop_unused_cursor_references(pysqlite_Connection* self) +{ + PyObject* new_list; + PyObject* weakref; + int i; + + /* we only need to do this once in a while */ + if (self->created_cursors++ < 200) { + return; + } + + self->created_cursors = 0; + + new_list = PyList_New(0); + if (!new_list) { + return; + } + + for (i = 0; i < PyList_Size(self->cursors); i++) { + weakref = PyList_GetItem(self->cursors, i); + if (PyWeakref_GetObject(weakref) != Py_None) { + if (PyList_Append(new_list, weakref) != 0) { + Py_DECREF(new_list); + return; + } + } + } + + Py_DECREF(self->cursors); + self->cursors = new_list; +} + PyObject* pysqlite_connection_create_function(pysqlite_Connection* self, PyObject* args, PyObject* kwargs) { static char *kwlist[] = {"name", "narg", "func", NULL, NULL}; @@ -690,6 +782,10 @@ int narg; int rc; + if (!pysqlite_check_thread(self) || !pysqlite_check_connection(self)) { + return NULL; + } + if (!PyArg_ParseTupleAndKeywords(args, kwargs, "siO", kwlist, &name, &narg, &func)) { @@ -703,7 +799,8 @@ PyErr_SetString(pysqlite_OperationalError, "Error creating function"); return NULL; } else { - PyDict_SetItem(self->function_pinboard, func, Py_None); + if (PyDict_SetItem(self->function_pinboard, func, Py_None) == -1) + return NULL; Py_INCREF(Py_None); return Py_None; @@ -719,6 +816,10 @@ static char *kwlist[] = { "name", "n_arg", "aggregate_class", NULL }; int rc; + if (!pysqlite_check_thread(self) || !pysqlite_check_connection(self)) { + return NULL; + } + if (!PyArg_ParseTupleAndKeywords(args, kwargs, "siO:create_aggregate", kwlist, &name, &n_arg, &aggregate_class)) { return NULL; @@ -730,7 +831,8 @@ PyErr_SetString(pysqlite_OperationalError, "Error creating aggregate"); return NULL; } else { - PyDict_SetItem(self->function_pinboard, aggregate_class, Py_None); + if (PyDict_SetItem(self->function_pinboard, aggregate_class, Py_None) == -1) + return NULL; Py_INCREF(Py_None); return Py_None; @@ -802,13 +904,17 @@ return rc; } -PyObject* pysqlite_connection_set_authorizer(pysqlite_Connection* self, PyObject* args, PyObject* kwargs) +static PyObject* pysqlite_connection_set_authorizer(pysqlite_Connection* self, PyObject* args, PyObject* kwargs) { PyObject* authorizer_cb; static char *kwlist[] = { "authorizer_callback", NULL }; int rc; + if (!pysqlite_check_thread(self) || !pysqlite_check_connection(self)) { + return NULL; + } + if (!PyArg_ParseTupleAndKeywords(args, kwargs, "O:set_authorizer", kwlist, &authorizer_cb)) { return NULL; @@ -820,20 +926,25 @@ PyErr_SetString(pysqlite_OperationalError, "Error setting authorizer callback"); return NULL; } else { - PyDict_SetItem(self->function_pinboard, authorizer_cb, Py_None); + if (PyDict_SetItem(self->function_pinboard, authorizer_cb, Py_None) == -1) + return NULL; Py_INCREF(Py_None); return Py_None; } } -PyObject* pysqlite_connection_set_progress_handler(pysqlite_Connection* self, PyObject* args, PyObject* kwargs) +static PyObject* pysqlite_connection_set_progress_handler(pysqlite_Connection* self, PyObject* args, PyObject* kwargs) { PyObject* progress_handler; int n; static char *kwlist[] = { "progress_handler", "n", NULL }; + if (!pysqlite_check_thread(self) || !pysqlite_check_connection(self)) { + return NULL; + } + if (!PyArg_ParseTupleAndKeywords(args, kwargs, "Oi:set_progress_handler", kwlist, &progress_handler, &n)) { return NULL; @@ -844,13 +955,64 @@ sqlite3_progress_handler(self->db, 0, 0, (void*)0); } else { sqlite3_progress_handler(self->db, n, _progress_handler, progress_handler); - PyDict_SetItem(self->function_pinboard, progress_handler, Py_None); + if (PyDict_SetItem(self->function_pinboard, progress_handler, Py_None) == -1) + return NULL; } Py_INCREF(Py_None); return Py_None; } +#ifdef HAVE_LOAD_EXTENSION +static PyObject* pysqlite_enable_load_extension(pysqlite_Connection* self, PyObject* args) +{ + int rc; + int onoff; + + if (!pysqlite_check_thread(self) || !pysqlite_check_connection(self)) { + return NULL; + } + + if (!PyArg_ParseTuple(args, "i", &onoff)) { + return NULL; + } + + rc = sqlite3_enable_load_extension(self->db, onoff); + + if (rc != SQLITE_OK) { + PyErr_SetString(pysqlite_OperationalError, "Error enabling load extension"); + return NULL; + } else { + Py_INCREF(Py_None); + return Py_None; + } +} + +static PyObject* pysqlite_load_extension(pysqlite_Connection* self, PyObject* args) +{ + int rc; + char* extension_name; + char* errmsg; + + if (!pysqlite_check_thread(self) || !pysqlite_check_connection(self)) { + return NULL; + } + + if (!PyArg_ParseTuple(args, "s", &extension_name)) { + return NULL; + } + + rc = sqlite3_load_extension(self->db, extension_name, 0, &errmsg); + if (rc != 0) { + PyErr_SetString(pysqlite_OperationalError, errmsg); + return NULL; + } else { + Py_INCREF(Py_None); + return Py_None; + } +} +#endif + int pysqlite_check_thread(pysqlite_Connection* self) { #ifdef WITH_THREAD @@ -948,6 +1110,10 @@ PyObject* weakref; int rc; + if (!pysqlite_check_thread(self) || !pysqlite_check_connection(self)) { + return NULL; + } + if (!PyArg_ParseTuple(args, "O", &sql)) { return NULL; } @@ -1237,9 +1403,11 @@ } if (callable != Py_None) { - PyDict_SetItem(self->collations, uppercase_name, callable); + if (PyDict_SetItem(self->collations, uppercase_name, callable) == -1) + goto finally; } else { - PyDict_DelItem(self->collations, uppercase_name); + if (PyDict_DelItem(self->collations, uppercase_name) == -1) + goto finally; } rc = sqlite3_create_collation(self->db, @@ -1327,6 +1495,12 @@ PyDoc_STR("Creates a new aggregate. Non-standard.")}, {"set_authorizer", (PyCFunction)pysqlite_connection_set_authorizer, METH_VARARGS|METH_KEYWORDS, PyDoc_STR("Sets authorizer callback. Non-standard.")}, + #ifdef HAVE_LOAD_EXTENSION + {"enable_load_extension", (PyCFunction)pysqlite_enable_load_extension, METH_VARARGS, + PyDoc_STR("Enable dynamic loading of SQLite extension modules. Non-standard.")}, + {"load_extension", (PyCFunction)pysqlite_load_extension, METH_VARARGS, + PyDoc_STR("Load SQLite extension module. Non-standard.")}, + #endif {"set_progress_handler", (PyCFunction)pysqlite_connection_set_progress_handler, METH_VARARGS|METH_KEYWORDS, PyDoc_STR("Sets progress handler callback. Non-standard.")}, {"execute", (PyCFunction)pysqlite_connection_execute, METH_VARARGS, Modified: python/branches/py3k/Modules/_sqlite/connection.h ============================================================================== --- python/branches/py3k/Modules/_sqlite/connection.h (original) +++ python/branches/py3k/Modules/_sqlite/connection.h Fri Mar 5 16:20:03 2010 @@ -1,6 +1,6 @@ /* connection.h - definitions for the connection type * - * Copyright (C) 2004-2007 Gerhard H?ring + * Copyright (C) 2004-2010 Gerhard H?ring * * This file is part of pysqlite. * @@ -63,17 +63,21 @@ * used from the same thread it was created in */ int check_same_thread; + int initialized; + /* thread identification of the thread the connection was created in */ long thread_ident; pysqlite_Cache* statement_cache; - /* A list of weak references to statements used within this connection */ + /* Lists of weak references to statements and cursors used within this connection */ PyObject* statements; + PyObject* cursors; - /* a counter for how many statements were created in the connection. May be + /* Counters for how many statements/cursors were created in the connection. May be * reset to 0 at certain intervals */ int created_statements; + int created_cursors; PyObject* row_factory; @@ -120,6 +124,7 @@ PyObject* pysqlite_connection_new(PyTypeObject* type, PyObject* args, PyObject* kw); int pysqlite_connection_init(pysqlite_Connection* self, PyObject* args, PyObject* kwargs); +int pysqlite_connection_register_cursor(pysqlite_Connection* connection, PyObject* cursor); int pysqlite_check_thread(pysqlite_Connection* self); int pysqlite_check_connection(pysqlite_Connection* con); Modified: python/branches/py3k/Modules/_sqlite/cursor.c ============================================================================== --- python/branches/py3k/Modules/_sqlite/cursor.c (original) +++ python/branches/py3k/Modules/_sqlite/cursor.c Fri Mar 5 16:20:03 2010 @@ -1,6 +1,6 @@ /* cursor.c - the cursor type * - * Copyright (C) 2004-2007 Gerhard H??ring + * Copyright (C) 2004-2010 Gerhard H??ring * * This file is part of pysqlite. * @@ -36,6 +36,8 @@ 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 pysqlite_StatementKind detect_statement_type(const char* statement) { char buf[20]; @@ -74,7 +76,7 @@ } } -int pysqlite_cursor_init(pysqlite_Cursor* self, PyObject* args, PyObject* kwargs) +static int pysqlite_cursor_init(pysqlite_Cursor* self, PyObject* args, PyObject* kwargs) { pysqlite_Connection* connection; @@ -87,6 +89,7 @@ self->connection = connection; self->statement = NULL; self->next_row = NULL; + self->in_weakreflist = NULL; self->row_cast_map = PyList_New(0); if (!self->row_cast_map) { @@ -100,6 +103,8 @@ self->lastrowid= Py_None; self->arraysize = 1; + self->closed = 0; + self->reset = 0; self->rowcount = -1L; @@ -110,10 +115,16 @@ return -1; } + if (!pysqlite_connection_register_cursor(connection, (PyObject*)self)) { + return -1; + } + + self->initialized = 1; + return 0; } -void pysqlite_cursor_dealloc(pysqlite_Cursor* self) +static void pysqlite_cursor_dealloc(pysqlite_Cursor* self) { int rc; @@ -130,6 +141,10 @@ Py_XDECREF(self->row_factory); Py_XDECREF(self->next_row); + if (self->in_weakreflist != NULL) { + PyObject_ClearWeakRefs((PyObject*)self); + } + Py_TYPE(self)->tp_free((PyObject*)self); } @@ -281,6 +296,11 @@ PyObject* buf_bytes; PyObject* error_obj; + if (self->reset) { + PyErr_SetString(pysqlite_InterfaceError, errmsg_fetch_across_rollback); + return NULL; + } + Py_BEGIN_ALLOW_THREADS numcols = sqlite3_data_count(self->statement->st); Py_END_ALLOW_THREADS @@ -397,6 +417,26 @@ return row; } +/* + * Checks if a cursor object is usable. + * + * 0 => error; 1 => ok + */ +static int check_cursor(pysqlite_Cursor* cur) +{ + if (!cur->initialized) { + PyErr_SetString(pysqlite_ProgrammingError, "Base Cursor.__init__ not called."); + return 0; + } + + if (cur->closed) { + PyErr_SetString(pysqlite_ProgrammingError, "Cannot operate on a closed cursor."); + return 0; + } else { + return pysqlite_check_thread(cur->connection) && pysqlite_check_connection(cur->connection); + } +} + PyObject* _pysqlite_query_execute(pysqlite_Cursor* self, int multiple, PyObject* args) { PyObject* operation; @@ -416,13 +456,15 @@ PyObject* second_argument = NULL; int allow_8bit_chars; - if (!pysqlite_check_thread(self->connection) || !pysqlite_check_connection(self->connection)) { + if (!check_cursor(self)) { return NULL; } + self->reset = 0; + /* Make shooting yourself in the foot with not utf-8 decodable 8-bit-strings harder */ allow_8bit_chars = ((self->connection->text_factory != (PyObject*)&PyUnicode_Type) && - (self->connection->text_factory != (PyObject*)&PyUnicode_Type && pysqlite_OptimizedUnicode)); + (self->connection->text_factory != pysqlite_OptimizedUnicode)); Py_XDECREF(self->next_row); self->next_row = NULL; @@ -573,42 +615,6 @@ } } - func_args = PyTuple_New(1); - if (!func_args) { - goto error; - } - Py_INCREF(operation); - if (PyTuple_SetItem(func_args, 0, operation) != 0) { - goto error; - } - - 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_DECREF(func_args); - - if (!self->statement) { - goto error; - } - - if (self->statement->in_use) { - Py_DECREF(self->statement); - self->statement = PyObject_New(pysqlite_Statement, &pysqlite_StatementType); - if (!self->statement) { - goto error; - } - rc = pysqlite_statement_create(self->statement, self->connection, operation); - if (rc != SQLITE_OK) { - Py_CLEAR(self->statement); - goto error; - } - } - - pysqlite_statement_reset(self->statement); - pysqlite_statement_mark_dirty(self->statement); while (1) { parameters = PyIter_Next(parameters_iter); @@ -623,11 +629,6 @@ goto error; } - if (pysqlite_build_row_cast_map(self) != 0) { - PyErr_SetString(pysqlite_OperationalError, "Error while building row_cast_map"); - goto error; - } - /* Keep trying the SQL statement until the schema stops changing. */ while (1) { /* Actually execute the SQL statement. */ @@ -671,10 +672,6 @@ } if (rc == SQLITE_ROW || (rc == SQLITE_DONE && statement_type == STATEMENT_SELECT)) { - Py_BEGIN_ALLOW_THREADS - numcols = sqlite3_column_count(self->statement->st); - Py_END_ALLOW_THREADS - if (self->description == Py_None) { Py_BEGIN_ALLOW_THREADS numcols = sqlite3_column_count(self->statement->st); @@ -782,16 +779,17 @@ sqlite3_stmt* statement; int rc; PyObject* result; - int statement_completed = 0; if (!PyArg_ParseTuple(args, "O", &script_obj)) { return NULL; } - if (!pysqlite_check_thread(self->connection) || !pysqlite_check_connection(self->connection)) { + if (!check_cursor(self)) { return NULL; } + self->reset = 0; + if (PyUnicode_Check(script_obj)) { script_cstr = _PyUnicode_AsString(script_obj); if (!script_cstr) { @@ -810,11 +808,6 @@ Py_DECREF(result); while (1) { - if (!sqlite3_complete(script_cstr)) { - break; - } - statement_completed = 1; - Py_BEGIN_ALLOW_THREADS rc = sqlite3_prepare(self->connection->db, script_cstr, @@ -845,15 +838,15 @@ _pysqlite_seterror(self->connection->db, NULL); goto error; } + + if (*script_cstr == (char)0) { + break; + } } error: Py_XDECREF(script_str); - if (!statement_completed) { - PyErr_SetString(pysqlite_ProgrammingError, "you did not provide a complete SQL statement"); - } - if (PyErr_Occurred()) { return NULL; } else { @@ -874,7 +867,12 @@ PyObject* next_row; int rc; - if (!pysqlite_check_thread(self->connection) || !pysqlite_check_connection(self->connection)) { + if (!check_cursor(self)) { + return NULL; + } + + if (self->reset) { + PyErr_SetString(pysqlite_InterfaceError, errmsg_fetch_across_rollback); return NULL; } @@ -1017,6 +1015,8 @@ Py_CLEAR(self->statement); } + self->closed = 1; + Py_INCREF(Py_None); return Py_None; } @@ -1077,12 +1077,12 @@ 0, /* tp_getattro */ 0, /* tp_setattro */ 0, /* tp_as_buffer */ - Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE, /* tp_flags */ + Py_TPFLAGS_DEFAULT|Py_TPFLAGS_BASETYPE, /* tp_flags */ cursor_doc, /* tp_doc */ 0, /* tp_traverse */ 0, /* tp_clear */ 0, /* tp_richcompare */ - 0, /* tp_weaklistoffset */ + offsetof(pysqlite_Cursor, in_weakreflist), /* tp_weaklistoffset */ (getiterfunc)pysqlite_cursor_getiter, /* tp_iter */ (iternextfunc)pysqlite_cursor_iternext, /* tp_iternext */ cursor_methods, /* tp_methods */ Modified: python/branches/py3k/Modules/_sqlite/cursor.h ============================================================================== --- python/branches/py3k/Modules/_sqlite/cursor.h (original) +++ python/branches/py3k/Modules/_sqlite/cursor.h Fri Mar 5 16:20:03 2010 @@ -1,6 +1,6 @@ /* cursor.h - definitions for the cursor type * - * Copyright (C) 2004-2007 Gerhard H?ring + * Copyright (C) 2004-2010 Gerhard H?ring * * This file is part of pysqlite. * @@ -40,9 +40,14 @@ long rowcount; PyObject* row_factory; pysqlite_Statement* statement; + int closed; + int reset; + int initialized; /* the next row to be returned, NULL if no next row available */ PyObject* next_row; + + PyObject* in_weakreflist; /* List of weak references */ } pysqlite_Cursor; typedef enum { @@ -53,8 +58,6 @@ extern PyTypeObject pysqlite_CursorType; -int pysqlite_cursor_init(pysqlite_Cursor* self, PyObject* args, PyObject* kwargs); -void pysqlite_cursor_dealloc(pysqlite_Cursor* self); PyObject* pysqlite_cursor_execute(pysqlite_Cursor* self, PyObject* args); PyObject* pysqlite_cursor_executemany(pysqlite_Cursor* self, PyObject* args); PyObject* pysqlite_cursor_getiter(pysqlite_Cursor *self); Modified: python/branches/py3k/Modules/_sqlite/module.c ============================================================================== --- python/branches/py3k/Modules/_sqlite/module.c (original) +++ python/branches/py3k/Modules/_sqlite/module.c Fri Mar 5 16:20:03 2010 @@ -1,6 +1,6 @@ /* module.c - the module itself * - * Copyright (C) 2004-2007 Gerhard H?ring + * Copyright (C) 2004-2010 Gerhard H?ring * * This file is part of pysqlite. * Modified: python/branches/py3k/Modules/_sqlite/module.h ============================================================================== --- python/branches/py3k/Modules/_sqlite/module.h (original) +++ python/branches/py3k/Modules/_sqlite/module.h Fri Mar 5 16:20:03 2010 @@ -1,6 +1,6 @@ /* module.h - definitions for the module * - * Copyright (C) 2004-2007 Gerhard H?ring + * Copyright (C) 2004-2010 Gerhard H?ring * * This file is part of pysqlite. * @@ -25,7 +25,7 @@ #define PYSQLITE_MODULE_H #include "Python.h" -#define PYSQLITE_VERSION "2.4.1" +#define PYSQLITE_VERSION "2.6.0" extern PyObject* pysqlite_Error; extern PyObject* pysqlite_Warning; Modified: python/branches/py3k/Modules/_sqlite/prepare_protocol.c ============================================================================== --- python/branches/py3k/Modules/_sqlite/prepare_protocol.c (original) +++ python/branches/py3k/Modules/_sqlite/prepare_protocol.c Fri Mar 5 16:20:03 2010 @@ -1,6 +1,6 @@ /* prepare_protocol.c - the protocol for preparing values for SQLite * - * Copyright (C) 2005-2006 Gerhard H?ring + * Copyright (C) 2005-2010 Gerhard H?ring * * This file is part of pysqlite. * @@ -21,6 +21,7 @@ * 3. This notice may not be removed or altered from any source distribution. */ +#include "sqlitecompat.h" #include "prepare_protocol.h" int pysqlite_prepare_protocol_init(pysqlite_PrepareProtocol* self, PyObject* args, PyObject* kwargs) Modified: python/branches/py3k/Modules/_sqlite/prepare_protocol.h ============================================================================== --- python/branches/py3k/Modules/_sqlite/prepare_protocol.h (original) +++ python/branches/py3k/Modules/_sqlite/prepare_protocol.h Fri Mar 5 16:20:03 2010 @@ -1,6 +1,6 @@ /* prepare_protocol.h - the protocol for preparing values for SQLite * - * Copyright (C) 2005-2007 Gerhard H?ring + * Copyright (C) 2005-2010 Gerhard H?ring * * This file is part of pysqlite. * Modified: python/branches/py3k/Modules/_sqlite/row.c ============================================================================== --- python/branches/py3k/Modules/_sqlite/row.c (original) +++ python/branches/py3k/Modules/_sqlite/row.c Fri Mar 5 16:20:03 2010 @@ -1,6 +1,6 @@ /* row.c - an enhanced tuple for database rows * - * Copyright (C) 2005-2006 Gerhard H?ring + * Copyright (C) 2005-2010 Gerhard H?ring * * This file is part of pysqlite. * @@ -172,17 +172,17 @@ static PyObject* pysqlite_row_richcompare(pysqlite_Row *self, PyObject *_other, int opid) { if (opid != Py_EQ && opid != Py_NE) { - Py_INCREF(Py_NotImplemented); - return Py_NotImplemented; + Py_INCREF(Py_NotImplemented); + return Py_NotImplemented; } if (PyType_IsSubtype(Py_TYPE(_other), &pysqlite_RowType)) { - pysqlite_Row *other = (pysqlite_Row *)_other; - PyObject *res = PyObject_RichCompare(self->description, other->description, opid); - if ((opid == Py_EQ && res == Py_True) - || (opid == Py_NE && res == Py_False)) { - Py_DECREF(res); - return PyObject_RichCompare(self->data, other->data, opid); - } + pysqlite_Row *other = (pysqlite_Row *)_other; + PyObject *res = PyObject_RichCompare(self->description, other->description, opid); + if ((opid == Py_EQ && res == Py_True) + || (opid == Py_NE && res == Py_False)) { + Py_DECREF(res); + return PyObject_RichCompare(self->data, other->data, opid); + } } Py_INCREF(Py_NotImplemented); return Py_NotImplemented; Modified: python/branches/py3k/Modules/_sqlite/row.h ============================================================================== --- python/branches/py3k/Modules/_sqlite/row.h (original) +++ python/branches/py3k/Modules/_sqlite/row.h Fri Mar 5 16:20:03 2010 @@ -1,6 +1,6 @@ /* row.h - an enhanced tuple for database rows * - * Copyright (C) 2005-2007 Gerhard H?ring + * Copyright (C) 2005-2010 Gerhard H?ring * * This file is part of pysqlite. * Modified: python/branches/py3k/Modules/_sqlite/sqlitecompat.h ============================================================================== --- python/branches/py3k/Modules/_sqlite/sqlitecompat.h (original) +++ python/branches/py3k/Modules/_sqlite/sqlitecompat.h Fri Mar 5 16:20:03 2010 @@ -1,6 +1,6 @@ /* sqlitecompat.h - compatibility macros * - * Copyright (C) 2006 Gerhard H?ring + * Copyright (C) 2006-2010 Gerhard H?ring * * This file is part of pysqlite. * @@ -21,6 +21,8 @@ * 3. This notice may not be removed or altered from any source distribution. */ +#include "Python.h" + #ifndef PYSQLITE_COMPAT_H #define PYSQLITE_COMPAT_H @@ -31,4 +33,31 @@ typedef int (*lenfunc)(PyObject*); #endif + +/* define PyDict_CheckExact for pre-2.4 versions of Python */ +#ifndef PyDict_CheckExact +#define PyDict_CheckExact(op) ((op)->ob_type == &PyDict_Type) +#endif + +/* define Py_CLEAR for pre-2.4 versions of Python */ +#ifndef Py_CLEAR +#define Py_CLEAR(op) \ + do { \ + if (op) { \ + PyObject *tmp = (PyObject *)(op); \ + (op) = NULL; \ + Py_DECREF(tmp); \ + } \ + } while (0) +#endif + +#ifndef PyVarObject_HEAD_INIT +#define PyVarObject_HEAD_INIT(type, size) \ + PyObject_HEAD_INIT(type) size, +#endif + +#ifndef Py_TYPE +#define Py_TYPE(ob) ((ob)->ob_type) +#endif + #endif Modified: python/branches/py3k/Modules/_sqlite/statement.c ============================================================================== --- python/branches/py3k/Modules/_sqlite/statement.c (original) +++ python/branches/py3k/Modules/_sqlite/statement.c Fri Mar 5 16:20:03 2010 @@ -1,6 +1,6 @@ /* statement.c - the statement type * - * Copyright (C) 2005-2007 Gerhard H?ring + * Copyright (C) 2005-2010 Gerhard H?ring * * This file is part of pysqlite. * Modified: python/branches/py3k/Modules/_sqlite/statement.h ============================================================================== --- python/branches/py3k/Modules/_sqlite/statement.h (original) +++ python/branches/py3k/Modules/_sqlite/statement.h Fri Mar 5 16:20:03 2010 @@ -1,6 +1,6 @@ /* statement.h - definitions for the statement type * - * Copyright (C) 2005-2007 Gerhard H?ring + * Copyright (C) 2005-2010 Gerhard H?ring * * This file is part of pysqlite. * Modified: python/branches/py3k/Modules/_sqlite/util.c ============================================================================== --- python/branches/py3k/Modules/_sqlite/util.c (original) +++ python/branches/py3k/Modules/_sqlite/util.c Fri Mar 5 16:20:03 2010 @@ -1,6 +1,6 @@ /* util.c - various utility functions * - * Copyright (C) 2005-2007 Gerhard H?ring + * Copyright (C) 2005-2010 Gerhard H?ring * * This file is part of pysqlite. * Modified: python/branches/py3k/Modules/_sqlite/util.h ============================================================================== --- python/branches/py3k/Modules/_sqlite/util.h (original) +++ python/branches/py3k/Modules/_sqlite/util.h Fri Mar 5 16:20:03 2010 @@ -1,6 +1,6 @@ /* util.h - various utility functions * - * Copyright (C) 2005-2007 Gerhard H?ring + * Copyright (C) 2005-2010 Gerhard H?ring * * This file is part of pysqlite. * Modified: python/branches/py3k/setup.py ============================================================================== --- python/branches/py3k/setup.py (original) +++ python/branches/py3k/setup.py Fri Mar 5 16:20:03 2010 @@ -876,6 +876,8 @@ else: sqlite_defines.append(('MODULE_NAME', '\\"sqlite3\\"')) + # Comment this out if you want the sqlite3 module to be able to load extensions. + sqlite_defines.append(("SQLITE_OMIT_LOAD_EXTENSION", "1")) if sys.platform == 'darwin': # In every directory on the search path search for a dynamic From python-checkins at python.org Fri Mar 5 16:50:25 2010 From: python-checkins at python.org (gerhard.haering) Date: Fri, 5 Mar 2010 16:50:25 +0100 (CET) Subject: [Python-checkins] r78699 - in python/branches/release26-maint: Lib/sqlite3/test/dbapi.py Misc/NEWS Modules/_sqlite/connection.c Message-ID: <20100305155025.BCE86F491@mail.python.org> Author: gerhard.haering Date: Fri Mar 5 16:50:25 2010 New Revision: 78699 Log: Issue #7670: sqlite3: Fixed crashes when operating on closed connections. Modified: python/branches/release26-maint/Lib/sqlite3/test/dbapi.py python/branches/release26-maint/Misc/NEWS python/branches/release26-maint/Modules/_sqlite/connection.c Modified: python/branches/release26-maint/Lib/sqlite3/test/dbapi.py ============================================================================== --- python/branches/release26-maint/Lib/sqlite3/test/dbapi.py (original) +++ python/branches/release26-maint/Lib/sqlite3/test/dbapi.py Fri Mar 5 16:50:25 2010 @@ -763,6 +763,73 @@ except: self.fail("Should have raised a ProgrammingError") + + def CheckClosedCreateFunction(self): + con = sqlite.connect(":memory:") + con.close() + def f(x): return 17 + try: + con.create_function("foo", 1, f) + self.fail("Should have raised a ProgrammingError") + except sqlite.ProgrammingError: + pass + except: + self.fail("Should have raised a ProgrammingError") + + def CheckClosedCreateAggregate(self): + con = sqlite.connect(":memory:") + con.close() + class Agg: + def __init__(self): + pass + def step(self, x): + pass + def finalize(self): + return 17 + try: + con.create_aggregate("foo", 1, Agg) + self.fail("Should have raised a ProgrammingError") + except sqlite.ProgrammingError: + pass + except: + self.fail("Should have raised a ProgrammingError") + + def CheckClosedSetAuthorizer(self): + con = sqlite.connect(":memory:") + con.close() + def authorizer(*args): + return sqlite.DENY + try: + con.set_authorizer(authorizer) + self.fail("Should have raised a ProgrammingError") + except sqlite.ProgrammingError: + pass + except: + self.fail("Should have raised a ProgrammingError") + + def CheckClosedSetProgressCallback(self): + con = sqlite.connect(":memory:") + con.close() + def progress(): pass + try: + con.set_progress_handler(progress, 100) + self.fail("Should have raised a ProgrammingError") + except sqlite.ProgrammingError: + pass + except: + self.fail("Should have raised a ProgrammingError") + + def CheckClosedCall(self): + con = sqlite.connect(":memory:") + con.close() + try: + con() + self.fail("Should have raised a ProgrammingError") + except sqlite.ProgrammingError: + pass + except: + self.fail("Should have raised a ProgrammingError") + def suite(): module_suite = unittest.makeSuite(ModuleTests, "Check") connection_suite = unittest.makeSuite(ConnectionTests, "Check") Modified: python/branches/release26-maint/Misc/NEWS ============================================================================== --- python/branches/release26-maint/Misc/NEWS (original) +++ python/branches/release26-maint/Misc/NEWS Fri Mar 5 16:50:25 2010 @@ -15,6 +15,10 @@ Library ------- +Extension Modules +----------------- + +- Issue #7670: sqlite3: Fixed crashes when operating on closed connections. What's New in Python 2.6.5 rc 1? ================================ Modified: python/branches/release26-maint/Modules/_sqlite/connection.c ============================================================================== --- python/branches/release26-maint/Modules/_sqlite/connection.c (original) +++ python/branches/release26-maint/Modules/_sqlite/connection.c Fri Mar 5 16:50:25 2010 @@ -765,6 +765,10 @@ int narg; int rc; + if (!pysqlite_check_thread(self) || !pysqlite_check_connection(self)) { + return NULL; + } + if (!PyArg_ParseTupleAndKeywords(args, kwargs, "siO", kwlist, &name, &narg, &func)) { @@ -794,6 +798,10 @@ static char *kwlist[] = { "name", "n_arg", "aggregate_class", NULL }; int rc; + if (!pysqlite_check_thread(self) || !pysqlite_check_connection(self)) { + return NULL; + } + if (!PyArg_ParseTupleAndKeywords(args, kwargs, "siO:create_aggregate", kwlist, &name, &n_arg, &aggregate_class)) { return NULL; @@ -884,6 +892,10 @@ static char *kwlist[] = { "authorizer_callback", NULL }; int rc; + if (!pysqlite_check_thread(self) || !pysqlite_check_connection(self)) { + return NULL; + } + if (!PyArg_ParseTupleAndKeywords(args, kwargs, "O:set_authorizer", kwlist, &authorizer_cb)) { return NULL; @@ -909,6 +921,10 @@ static char *kwlist[] = { "progress_handler", "n", NULL }; + if (!pysqlite_check_thread(self) || !pysqlite_check_connection(self)) { + return NULL; + } + if (!PyArg_ParseTupleAndKeywords(args, kwargs, "Oi:set_progress_handler", kwlist, &progress_handler, &n)) { return NULL; @@ -1020,6 +1036,10 @@ PyObject* weakref; int rc; + if (!pysqlite_check_thread(self) || !pysqlite_check_connection(self)) { + return NULL; + } + if (!PyArg_ParseTuple(args, "O", &sql)) { return NULL; } From ncoghlan at gmail.com Fri Mar 5 16:55:50 2010 From: ncoghlan at gmail.com (Nick Coghlan) Date: Sat, 06 Mar 2010 01:55:50 +1000 Subject: [Python-checkins] r78697 - python/branches/py3k/Lib/test/test_imp.py In-Reply-To: <20100305151726.8B2B4F523@mail.python.org> References: <20100305151726.8B2B4F523@mail.python.org> Message-ID: <4B912986.1090300@gmail.com> ezio.melotti wrote: > ============================================================================== > --- python/branches/py3k/Lib/test/test_imp.py (original) > +++ python/branches/py3k/Lib/test/test_imp.py Fri Mar 5 16:17:26 2010 > @@ -86,6 +86,7 @@ > > # the return encoding can be uppercase > fs_encoding = sys.getfilesystemencoding().lower() > + fs_encoding = fs_encoding.lower() if fs_encoding else 'ascii' You missed deleting the .lower() call on the previous line. I also suggest tacking an "or None" on to the end of the preceding comment. Cheers, Nick. -- Nick Coghlan | ncoghlan at gmail.com | Brisbane, Australia --------------------------------------------------------------- From python-checkins at python.org Fri Mar 5 16:55:56 2010 From: python-checkins at python.org (gerhard.haering) Date: Fri, 5 Mar 2010 16:55:56 +0100 (CET) Subject: [Python-checkins] r78700 - in python/branches/release31-maint: Lib/sqlite3/test/dbapi.py Misc/NEWS Modules/_sqlite/connection.c Message-ID: <20100305155556.2E5E7F67E@mail.python.org> Author: gerhard.haering Date: Fri Mar 5 16:55:55 2010 New Revision: 78700 Log: Issue #7670: sqlite3: Fixed crashes when operating on closed connections. Modified: python/branches/release31-maint/Lib/sqlite3/test/dbapi.py python/branches/release31-maint/Misc/NEWS python/branches/release31-maint/Modules/_sqlite/connection.c Modified: python/branches/release31-maint/Lib/sqlite3/test/dbapi.py ============================================================================== --- python/branches/release31-maint/Lib/sqlite3/test/dbapi.py (original) +++ python/branches/release31-maint/Lib/sqlite3/test/dbapi.py Fri Mar 5 16:55:55 2010 @@ -744,6 +744,73 @@ except: self.fail("Should have raised a ProgrammingError") + + def CheckClosedCreateFunction(self): + con = sqlite.connect(":memory:") + con.close() + def f(x): return 17 + try: + con.create_function("foo", 1, f) + self.fail("Should have raised a ProgrammingError") + except sqlite.ProgrammingError: + pass + except: + self.fail("Should have raised a ProgrammingError") + + def CheckClosedCreateAggregate(self): + con = sqlite.connect(":memory:") + con.close() + class Agg: + def __init__(self): + pass + def step(self, x): + pass + def finalize(self): + return 17 + try: + con.create_aggregate("foo", 1, Agg) + self.fail("Should have raised a ProgrammingError") + except sqlite.ProgrammingError: + pass + except: + self.fail("Should have raised a ProgrammingError") + + def CheckClosedSetAuthorizer(self): + con = sqlite.connect(":memory:") + con.close() + def authorizer(*args): + return sqlite.DENY + try: + con.set_authorizer(authorizer) + self.fail("Should have raised a ProgrammingError") + except sqlite.ProgrammingError: + pass + except: + self.fail("Should have raised a ProgrammingError") + + def CheckClosedSetProgressCallback(self): + con = sqlite.connect(":memory:") + con.close() + def progress(): pass + try: + con.set_progress_handler(progress, 100) + self.fail("Should have raised a ProgrammingError") + except sqlite.ProgrammingError: + pass + except: + self.fail("Should have raised a ProgrammingError") + + def CheckClosedCall(self): + con = sqlite.connect(":memory:") + con.close() + try: + con() + self.fail("Should have raised a ProgrammingError") + except sqlite.ProgrammingError: + pass + except: + self.fail("Should have raised a ProgrammingError") + def suite(): module_suite = unittest.makeSuite(ModuleTests, "Check") connection_suite = unittest.makeSuite(ConnectionTests, "Check") Modified: python/branches/release31-maint/Misc/NEWS ============================================================================== --- python/branches/release31-maint/Misc/NEWS (original) +++ python/branches/release31-maint/Misc/NEWS Fri Mar 5 16:55:55 2010 @@ -356,6 +356,8 @@ Extension Modules ----------------- +- Issue #7670: sqlite3: Fixed crashes when operating on closed connections. + - Stop providing crtassem.h symbols when compiling with Visual Studio 2010, as msvcr100.dll is not a platform assembly anymore. Modified: python/branches/release31-maint/Modules/_sqlite/connection.c ============================================================================== --- python/branches/release31-maint/Modules/_sqlite/connection.c (original) +++ python/branches/release31-maint/Modules/_sqlite/connection.c Fri Mar 5 16:55:55 2010 @@ -690,6 +690,10 @@ int narg; int rc; + if (!pysqlite_check_thread(self) || !pysqlite_check_connection(self)) { + return NULL; + } + if (!PyArg_ParseTupleAndKeywords(args, kwargs, "siO", kwlist, &name, &narg, &func)) { @@ -719,6 +723,10 @@ static char *kwlist[] = { "name", "n_arg", "aggregate_class", NULL }; int rc; + if (!pysqlite_check_thread(self) || !pysqlite_check_connection(self)) { + return NULL; + } + if (!PyArg_ParseTupleAndKeywords(args, kwargs, "siO:create_aggregate", kwlist, &name, &n_arg, &aggregate_class)) { return NULL; @@ -809,6 +817,10 @@ static char *kwlist[] = { "authorizer_callback", NULL }; int rc; + if (!pysqlite_check_thread(self) || !pysqlite_check_connection(self)) { + return NULL; + } + if (!PyArg_ParseTupleAndKeywords(args, kwargs, "O:set_authorizer", kwlist, &authorizer_cb)) { return NULL; @@ -834,6 +846,10 @@ static char *kwlist[] = { "progress_handler", "n", NULL }; + if (!pysqlite_check_thread(self) || !pysqlite_check_connection(self)) { + return NULL; + } + if (!PyArg_ParseTupleAndKeywords(args, kwargs, "Oi:set_progress_handler", kwlist, &progress_handler, &n)) { return NULL; @@ -948,6 +964,10 @@ PyObject* weakref; int rc; + if (!pysqlite_check_thread(self) || !pysqlite_check_connection(self)) { + return NULL; + } + if (!PyArg_ParseTuple(args, "O", &sql)) { return NULL; } From python-checkins at python.org Fri Mar 5 20:31:21 2010 From: python-checkins at python.org (florent.xicluna) Date: Fri, 5 Mar 2010 20:31:21 +0100 (CET) Subject: [Python-checkins] r78701 - python/trunk/Lib/test/test_subprocess.py Message-ID: <20100305193121.B8877FB97@mail.python.org> Author: florent.xicluna Date: Fri Mar 5 20:31:21 2010 New Revision: 78701 Log: #2777: Handle fds more carefully to try to fix some x86-Linux failures (namely, neal bot and twisted bot). Modified: python/trunk/Lib/test/test_subprocess.py Modified: python/trunk/Lib/test/test_subprocess.py ============================================================================== --- python/trunk/Lib/test/test_subprocess.py (original) +++ python/trunk/Lib/test/test_subprocess.py Fri Mar 5 20:31:21 2010 @@ -651,7 +651,10 @@ self.assertEqual(rc, 47) def test_send_signal(self): - p = subprocess.Popen([sys.executable, "-c", "input()"]) + # Do not inherit file handles from the parent. + # It should fix failures on some platforms. + p = subprocess.Popen([sys.executable, "-c", "input()"], close_fds=True, + stdin=subprocess.PIPE, stderr=subprocess.PIPE) # Let the process initialize correctly (Issue #3137) time.sleep(0.1) @@ -672,14 +675,14 @@ def test_kill(self): p = subprocess.Popen([sys.executable, "-c", "input()"]) - self.assertIs(p.poll(), None) + self.assertIsNone(p.poll()) p.kill() self.assertEqual(p.wait(), -signal.SIGKILL) def test_terminate(self): p = subprocess.Popen([sys.executable, "-c", "input()"]) - self.assertIs(p.poll(), None) + self.assertIsNone(p.poll()) p.terminate() self.assertEqual(p.wait(), -signal.SIGTERM) From python-checkins at python.org Fri Mar 5 21:26:54 2010 From: python-checkins at python.org (florent.xicluna) Date: Fri, 5 Mar 2010 21:26:54 +0100 (CET) Subject: [Python-checkins] r78702 - in python/branches/py3k: Lib/test/test_subprocess.py Message-ID: <20100305202654.F3F91FAD4@mail.python.org> Author: florent.xicluna Date: Fri Mar 5 21:26:54 2010 New Revision: 78702 Log: Merged revisions 78701 via svnmerge from svn+ssh://pythondev at svn.python.org/python/trunk ........ r78701 | florent.xicluna | 2010-03-05 20:31:21 +0100 (ven, 05 mar 2010) | 2 lines #2777: Handle fds more carefully to try to fix some x86-Linux failures (namely, neal bot and twisted bot). ........ Modified: python/branches/py3k/ (props changed) python/branches/py3k/Lib/test/test_subprocess.py Modified: python/branches/py3k/Lib/test/test_subprocess.py ============================================================================== --- python/branches/py3k/Lib/test/test_subprocess.py (original) +++ python/branches/py3k/Lib/test/test_subprocess.py Fri Mar 5 21:26:54 2010 @@ -649,7 +649,10 @@ self.assertEqual(rc, 47) def test_send_signal(self): - p = subprocess.Popen([sys.executable, "-c", "input()"]) + # Do not inherit file handles from the parent. + # It should fix failures on some platforms. + p = subprocess.Popen([sys.executable, "-c", "input()"], close_fds=True, + stdin=subprocess.PIPE, stderr=subprocess.PIPE) # Let the process initialize correctly (Issue #3137) time.sleep(0.1) @@ -670,14 +673,14 @@ def test_kill(self): p = subprocess.Popen([sys.executable, "-c", "input()"]) - self.assertIs(p.poll(), None) + self.assertIsNone(p.poll()) p.kill() self.assertEqual(p.wait(), -signal.SIGKILL) def test_terminate(self): p = subprocess.Popen([sys.executable, "-c", "input()"]) - self.assertIs(p.poll(), None) + self.assertIsNone(p.poll()) p.terminate() self.assertEqual(p.wait(), -signal.SIGTERM) From nnorwitz at gmail.com Fri Mar 5 22:40:29 2010 From: nnorwitz at gmail.com (Neal Norwitz) Date: Fri, 5 Mar 2010 16:40:29 -0500 Subject: [Python-checkins] Python Regression Test Failures opt (1) Message-ID: <20100305214029.GA21432@kbk-i386-bb.psfb.org> 346 tests OK. 1 test failed: test_subprocess 35 tests skipped: test_aepack test_al test_applesingle test_bsddb185 test_bsddb3 test_cd test_cl test_curses test_epoll test_gl test_imgfile test_ioctl test_kqueue test_linuxaudiodev test_macos test_macostools test_multiprocessing test_ossaudiodev test_py3kwarn test_scriptpackages test_smtpnet test_socketserver test_startfile test_sunaudiodev test_tcl test_timeout test_tk test_ttk_guionly test_ttk_textonly test_unicode_file test_urllib2net test_urllibnet test_winreg test_winsound test_zipfile64 6 skips unexpected on linux2: test_multiprocessing test_ttk_guionly test_epoll test_tk test_ioctl test_ttk_textonly test_grammar test_opcodes test_dict test_builtin test_exceptions test_types test_unittest test_doctest test_doctest2 test_MimeWriter test_SimpleHTTPServer test_StringIO test___all__ test___future__ test__locale test_abc test_abstract_numbers test_aepack test_aepack skipped -- No module named aetypes test_aifc test_al test_al skipped -- No module named al test_anydbm test_applesingle test_applesingle skipped -- No module named MacOS test_argparse test_array test_ascii_formatd test_ast test_asynchat test_asyncore test_atexit test_audioop test_augassign test_base64 test_bastion test_bigaddrspace test_bigmem test_binascii test_binhex test_binop test_bisect test_bool test_bsddb test_bsddb185 test_bsddb185 skipped -- No module named bsddb185 test_bsddb3 test_bsddb3 skipped -- Use of the `bsddb' resource not enabled test_buffer test_bufio test_bytes test_bz2 test_calendar test_call test_capi test_cd test_cd skipped -- No module named cd test_cfgparser test_cgi test_charmapcodec test_cl test_cl skipped -- No module named cl test_class test_cmath test_cmd test_cmd_line test_cmd_line_script test_code test_codeccallbacks test_codecencodings_cn test_codecencodings_hk test_codecencodings_jp test_codecencodings_kr test_codecencodings_tw test_codecmaps_cn test_codecmaps_hk test_codecmaps_jp test_codecmaps_kr test_codecmaps_tw test_codecs test_codeop test_coding test_coercion test_collections test_colorsys test_commands test_compare test_compile test_compileall test_compiler test_complex test_complex_args test_contains test_contextlib test_cookie test_cookielib test_copy test_copy_reg test_cpickle test_cprofile test_crypt test_csv test_ctypes test_curses test_curses skipped -- Use of the `curses' resource not enabled test_datetime test_dbm test_decimal test_decorators test_defaultdict test_deque test_descr test_descrtut test_dictcomps test_dictviews test_difflib test_dircache test_dis test_distutils [20682 refs] [20682 refs] [20682 refs] [20682 refs] [20679 refs] test_dl test_docxmlrpc test_dumbdbm test_dummy_thread test_dummy_threading test_email test_email_codecs test_email_renamed test_enumerate test_eof test_epoll test_epoll skipped -- kernel doesn't support epoll() test_errno test_exception_variations test_extcall test_fcntl test_file test_file2k test_filecmp test_fileinput test_fileio test_float test_fnmatch test_fork1 test_format test_fpformat test_fractions test_frozen test_ftplib test_funcattrs test_functools test_future test_future3 test_future4 test_future5 test_future_builtins test_gc test_gdbm test_generators test_genericpath test_genexps test_getargs test_getargs2 test_getopt test_gettext test_gl test_gl skipped -- No module named gl test_glob test_global test_grp test_gzip test_hash test_hashlib test_heapq test_hmac test_hotshot test_htmllib test_htmlparser test_httplib test_httpservers [16680 refs] [16680 refs] [16680 refs] [28258 refs] test_imageop test_imaplib test_imgfile test_imgfile skipped -- No module named imgfile test_imp test_import test_importhooks test_importlib test_index test_inspect test_int test_int_literal test_io test_ioctl test_ioctl skipped -- Unable to open /dev/tty test_isinstance test_iter test_iterlen test_itertools test_json test_kqueue test_kqueue skipped -- test works only on BSD test_largefile test_lib2to3 test_linecache test_linuxaudiodev test_linuxaudiodev skipped -- Use of the `audio' resource not enabled test_list test_locale test_logging test_long test_long_future test_longexp test_macos test_macos skipped -- No module named MacOS test_macostools test_macostools skipped -- No module named MacOS test_macpath test_mailbox test_marshal test_math test_md5 test_memoryio test_memoryview test_mhlib test_mimetools test_mimetypes test_minidom test_mmap test_module test_modulefinder test_multibytecodec test_multibytecodec_support test_multifile test_multiprocessing test_multiprocessing skipped -- This platform lacks a functioning sem_open implementation, therefore, the required synchronization primitives needed will not function, see issue 3770. test_mutants test_mutex test_netrc test_new test_nis test_normalization test_ntpath test_old_mailbox test_openpty test_operator test_optparse test_os test_ossaudiodev test_ossaudiodev skipped -- Use of the `audio' resource not enabled test_parser Expecting 's_push: parser stack overflow' in next line s_push: parser stack overflow test_pdb test_peepholer test_pep247 test_pep263 test_pep277 test_pep292 test_pep352 test_pickle test_pickletools test_pipes test_pkg test_pkgimport test_pkgutil test_platform [18076 refs] [18076 refs] test_plistlib test_poll test_popen [16685 refs] [16685 refs] [16685 refs] test_popen2 test_poplib test_posix test_posixpath test_pow test_pprint test_print test_profile test_profilehooks test_property test_pstats test_pty test_pwd test_py3kwarn test_py3kwarn skipped -- test.test_py3kwarn must be run with the -3 flag test_pyclbr test_pydoc [23122 refs] [23122 refs] [23122 refs] [23122 refs] [23122 refs] [23121 refs] [23121 refs] test_pyexpat test_queue test_quopri [19508 refs] [19508 refs] test_random test_re test_readline test_repr test_resource test_rfc822 test_richcmp test_robotparser test_runpy test_sax test_scope test_scriptpackages test_scriptpackages skipped -- No module named aetools test_select test_set test_setcomps test_sets test_sgmllib test_sha test_shelve test_shlex test_shutil test_signal test_site [16680 refs] [16680 refs] [16680 refs] [16680 refs] test_slice test_smtplib test_smtpnet test_smtpnet skipped -- Use of the `network' resource not enabled test_socket test_socketserver test_socketserver skipped -- Use of the `network' resource not enabled test_softspace test_sort test_sqlite test_ssl test_startfile test_startfile skipped -- module os has no attribute startfile test_str test_strftime test_string test_stringprep test_strop test_strptime test_strtod test_struct test_structmembers test_structseq test_subprocess [16680 refs] [16680 refs] [16680 refs] [16680 refs] [16680 refs] [16680 refs] [16680 refs] [16680 refs] [16680 refs] [16680 refs] [16680 refs] [16680 refs] [16680 refs] [16680 refs] [16895 refs] [16680 refs] [16680 refs] [16680 refs] [16680 refs] [16680 refs] . [16680 refs] [16680 refs] this bit of output is from a test of stdout in a different process ... [16680 refs] [16680 refs] [16895 refs] [16680 refs] [16680 refs] [16680 refs] Traceback (most recent call last): File "", line 1, in EOFError: EOF when reading a line [16680 refs] [16680 refs] [16680 refs] [16680 refs] [16680 refs] [16680 refs] [16680 refs] [16680 refs] [16680 refs] [16680 refs] [16680 refs] [16680 refs] [16680 refs] [16680 refs] [16680 refs] [16895 refs] [16680 refs] [16680 refs] [16680 refs] [16680 refs] [16680 refs] . [16680 refs] [16680 refs] this bit of output is from a test of stdout in a different process ... [16680 refs] [16680 refs] [16895 refs] test test_subprocess failed -- Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/test/test_subprocess.py", line 685, in test_terminate self.assertIsNone(p.poll()) AssertionError: 1 is not None Re-running test 'test_subprocess' in verbose mode test_call_kwargs (test.test_subprocess.ProcessTestCase) ... [16680 refs] ok test_call_seq (test.test_subprocess.ProcessTestCase) ... [16680 refs] ok test_check_call_nonzero (test.test_subprocess.ProcessTestCase) ... [16680 refs] ok test_check_call_zero (test.test_subprocess.ProcessTestCase) ... [16680 refs] ok test_check_output (test.test_subprocess.ProcessTestCase) ... [16680 refs] ok test_check_output_nonzero (test.test_subprocess.ProcessTestCase) ... [16680 refs] ok test_check_output_stderr (test.test_subprocess.ProcessTestCase) ... ok test_check_output_stdout_arg (test.test_subprocess.ProcessTestCase) ... ok test_communicate (test.test_subprocess.ProcessTestCase) ... ok test_communicate_pipe_buf (test.test_subprocess.ProcessTestCase) ... ok test_communicate_pipe_fd_leak (test.test_subprocess.ProcessTestCase) ... [16680 refs] ok test_communicate_returns (test.test_subprocess.ProcessTestCase) ... [16680 refs] ok test_communicate_stderr (test.test_subprocess.ProcessTestCase) ... ok test_communicate_stdin (test.test_subprocess.ProcessTestCase) ... [16680 refs] ok test_communicate_stdout (test.test_subprocess.ProcessTestCase) ... [16680 refs] ok test_cwd (test.test_subprocess.ProcessTestCase) ... [16680 refs] ok test_env (test.test_subprocess.ProcessTestCase) ... [16680 refs] ok test_executable_with_cwd (test.test_subprocess.ProcessTestCase) ... [16680 refs] ok test_executable_without_cwd (test.test_subprocess.ProcessTestCase) ... [16680 refs] ok test_invalid_bufsize (test.test_subprocess.ProcessTestCase) ... ok test_leaking_fds_on_error (test.test_subprocess.ProcessTestCase) ... ok test_list2cmdline (test.test_subprocess.ProcessTestCase) ... ok test_no_leaking (test.test_subprocess.ProcessTestCase) ... ok test_poll (test.test_subprocess.ProcessTestCase) ... [16895 refs] ok test_stderr_filedes (test.test_subprocess.ProcessTestCase) ... ok test_stderr_fileobj (test.test_subprocess.ProcessTestCase) ... ok test_stderr_none (test.test_subprocess.ProcessTestCase) ... [16680 refs] ok test_stderr_pipe (test.test_subprocess.ProcessTestCase) ... ok test_stdin_filedes (test.test_subprocess.ProcessTestCase) ... [16680 refs] ok test_stdin_fileobj (test.test_subprocess.ProcessTestCase) ... [16680 refs] ok test_stdin_none (test.test_subprocess.ProcessTestCase) ... ok test_stdin_pipe (test.test_subprocess.ProcessTestCase) ... [16680 refs] ok test_stdout_filedes (test.test_subprocess.ProcessTestCase) ... [16680 refs] ok test_stdout_filedes_of_stdout (test.test_subprocess.ProcessTestCase) ... . [16680 refs] ok test_stdout_fileobj (test.test_subprocess.ProcessTestCase) ... [16680 refs] ok test_stdout_none (test.test_subprocess.ProcessTestCase) ... this bit of output is from a test of stdout in a different process ... ok test_stdout_pipe (test.test_subprocess.ProcessTestCase) ... [16680 refs] ok test_stdout_stderr_file (test.test_subprocess.ProcessTestCase) ... ok test_stdout_stderr_pipe (test.test_subprocess.ProcessTestCase) ... ok test_universal_newlines (test.test_subprocess.ProcessTestCase) ... [16680 refs] ok test_universal_newlines_communicate (test.test_subprocess.ProcessTestCase) ... ok test_wait (test.test_subprocess.ProcessTestCase) ... [16895 refs] ok test_writes_before_communicate (test.test_subprocess.ProcessTestCase) ... ok test_args_string (test.test_subprocess.POSIXProcessTestCase) ... [16680 refs] ok test_call_string (test.test_subprocess.POSIXProcessTestCase) ... [16680 refs] ok test_exceptions (test.test_subprocess.POSIXProcessTestCase) ... ok test_invalid_args (test.test_subprocess.POSIXProcessTestCase) ... ok test_kill (test.test_subprocess.POSIXProcessTestCase) ... ok test_preexec (test.test_subprocess.POSIXProcessTestCase) ... [16680 refs] ok test_run_abort (test.test_subprocess.POSIXProcessTestCase) ... ok test_send_signal (test.test_subprocess.POSIXProcessTestCase) ... ok test_shell_sequence (test.test_subprocess.POSIXProcessTestCase) ... ok test_shell_string (test.test_subprocess.POSIXProcessTestCase) ... ok test_terminate (test.test_subprocess.POSIXProcessTestCase) ... ok test_call_string (test.test_subprocess.Win32ProcessTestCase) ... skipped 'Windows specific tests' test_close_fds (test.test_subprocess.Win32ProcessTestCase) ... skipped 'Windows specific tests' test_creationflags (test.test_subprocess.Win32ProcessTestCase) ... skipped 'Windows specific tests' test_invalid_args (test.test_subprocess.Win32ProcessTestCase) ... skipped 'Windows specific tests' test_kill (test.test_subprocess.Win32ProcessTestCase) ... skipped 'Windows specific tests' test_send_signal (test.test_subprocess.Win32ProcessTestCase) ... skipped 'Windows specific tests' test_shell_sequence (test.test_subprocess.Win32ProcessTestCase) ... skipped 'Windows specific tests' test_shell_string (test.test_subprocess.Win32ProcessTestCase) ... skipped 'Windows specific tests' test_startupinfo (test.test_subprocess.Win32ProcessTestCase) ... skipped 'Windows specific tests' test_terminate (test.test_subprocess.Win32ProcessTestCase) ... skipped 'Windows specific tests' test_call_kwargs (test.test_subprocess.ProcessTestCaseNoPoll) ... [16680 refs] ok test_call_seq (test.test_subprocess.ProcessTestCaseNoPoll) ... [16680 refs] ok test_check_call_nonzero (test.test_subprocess.ProcessTestCaseNoPoll) ... [16680 refs] ok test_check_call_zero (test.test_subprocess.ProcessTestCaseNoPoll) ... [16680 refs] ok test_check_output (test.test_subprocess.ProcessTestCaseNoPoll) ... [16680 refs] ok test_check_output_nonzero (test.test_subprocess.ProcessTestCaseNoPoll) ... [16680 refs] ok test_check_output_stderr (test.test_subprocess.ProcessTestCaseNoPoll) ... ok test_check_output_stdout_arg (test.test_subprocess.ProcessTestCaseNoPoll) ... ok test_communicate (test.test_subprocess.ProcessTestCaseNoPoll) ... ok test_communicate_pipe_buf (test.test_subprocess.ProcessTestCaseNoPoll) ... ok test_communicate_pipe_fd_leak (test.test_subprocess.ProcessTestCaseNoPoll) ... [16680 refs] ok test_communicate_returns (test.test_subprocess.ProcessTestCaseNoPoll) ... [16680 refs] ok test_communicate_stderr (test.test_subprocess.ProcessTestCaseNoPoll) ... ok test_communicate_stdin (test.test_subprocess.ProcessTestCaseNoPoll) ... [16680 refs] ok test_communicate_stdout (test.test_subprocess.ProcessTestCaseNoPoll) ... [16680 refs] ok test_cwd (test.test_subprocess.ProcessTestCaseNoPoll) ... [16680 refs] ok test_env (test.test_subprocess.ProcessTestCaseNoPoll) ... [16680 refs] ok test_executable_with_cwd (test.test_subprocess.ProcessTestCaseNoPoll) ... [16680 refs] ok test_executable_without_cwd (test.test_subprocess.ProcessTestCaseNoPoll) ... [16680 refs] ok test_invalid_bufsize (test.test_subprocess.ProcessTestCaseNoPoll) ... ok test_leaking_fds_on_error (test.test_subprocess.ProcessTestCaseNoPoll) ... ok test_list2cmdline (test.test_subprocess.ProcessTestCaseNoPoll) ... ok test_no_leaking (test.test_subprocess.ProcessTestCaseNoPoll) ... ok test_poll (test.test_subprocess.ProcessTestCaseNoPoll) ... [16895 refs] ok test_stderr_filedes (test.test_subprocess.ProcessTestCaseNoPoll) ... ok test_stderr_fileobj (test.test_subprocess.ProcessTestCaseNoPoll) ... ok test_stderr_none (test.test_subprocess.ProcessTestCaseNoPoll) ... [16680 refs] ok test_stderr_pipe (test.test_subprocess.ProcessTestCaseNoPoll) ... ok test_stdin_filedes (test.test_subprocess.ProcessTestCaseNoPoll) ... [16680 refs] ok test_stdin_fileobj (test.test_subprocess.ProcessTestCaseNoPoll) ... [16680 refs] ok test_stdin_none (test.test_subprocess.ProcessTestCaseNoPoll) ... ok test_stdin_pipe (test.test_subprocess.ProcessTestCaseNoPoll) ... [16680 refs] ok test_stdout_filedes (test.test_subprocess.ProcessTestCaseNoPoll) ... [16680 refs] ok test_stdout_filedes_of_stdout (test.test_subprocess.ProcessTestCaseNoPoll) ... . [16680 refs] ok test_stdout_fileobj (test.test_subprocess.ProcessTestCaseNoPoll) ... [16680 refs] ok test_stdout_none (test.test_subprocess.ProcessTestCaseNoPoll) ... this bit of output is from a test of stdout in a different process ... ok test_stdout_pipe (test.test_subprocess.ProcessTestCaseNoPoll) ... [16680 refs] ok test_stdout_stderr_file (test.test_subprocess.ProcessTestCaseNoPoll) ... ok test_stdout_stderr_pipe (test.test_subprocess.ProcessTestCaseNoPoll) ... ok test_universal_newlines (test.test_subprocess.ProcessTestCaseNoPoll) ... [16680 refs] ok test_universal_newlines_communicate (test.test_subprocess.ProcessTestCaseNoPoll) ... ok test_wait (test.test_subprocess.ProcessTestCaseNoPoll) ... [16895 refs] ok test_writes_before_communicate (test.test_subprocess.ProcessTestCaseNoPoll) ... ok test_eintr_retry_call (test.test_subprocess.HelperFunctionTests) ... ok ---------------------------------------------------------------------- Ran 108 tests in 75.277s OK (skipped=10) test_sunaudiodev test_sunaudiodev skipped -- No module named sunaudiodev test_sundry test_symtable test_syntax test_sys [16680 refs] [16680 refs] [16909 refs] [16703 refs] test_sysconfig test_tarfile test_tcl test_tcl skipped -- No module named _tkinter test_telnetlib test_tempfile [16680 refs] test_textwrap test_thread test_threaded_import Unhandled exception in thread started by Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/test/test_thread.py", line 218, in thread1 os.close(self.write_fd) OSError: [Errno 9] Bad file descriptor test_threadedtempfile test_threading [19980 refs] [23388 refs] [22300 refs] [22300 refs] [22300 refs] [22300 refs] test_threading_local test_threadsignals test_time test_timeout test_timeout skipped -- Use of the `network' resource not enabled test_tk test_tk skipped -- No module named _tkinter test_tokenize test_trace test_traceback test_transformer test_ttk_guionly test_ttk_guionly skipped -- No module named _tkinter test_ttk_textonly test_ttk_textonly skipped -- No module named _tkinter test_tuple test_typechecks test_ucn test_unary test_undocumented_details test_unicode test_unicode_file test_unicode_file skipped -- No Unicode filesystem semantics on this platform. test_unicodedata test_univnewlines test_univnewlines2k test_unpack test_urllib test_urllib2 test_urllib2_localnet test_urllib2net test_urllib2net skipped -- Use of the `network' resource not enabled test_urllibnet test_urllibnet skipped -- Use of the `network' resource not enabled test_urlparse test_userdict test_userlist test_userstring test_uu test_uuid WARNING: uuid.getnode is unreliable on many platforms. It is disabled until the code and/or test can be fixed properly. WARNING: uuid._ifconfig_getnode is unreliable on many platforms. It is disabled until the code and/or test can be fixed properly. WARNING: uuid._unixdll_getnode is unreliable on many platforms. It is disabled until the code and/or test can be fixed properly. test_wait3 test_wait4 test_warnings test_wave test_weakref test_whichdb test_winreg test_winreg skipped -- No module named _winreg test_winsound test_winsound skipped -- No module named winsound test_with test_wsgiref test_xdrlib test_xml_etree test_xml_etree_c test_xmllib test_xmlrpc test_xpickle test_xpickle -- skipping backwards compat tests. Use 'regrtest.py -u xpickle' to run them. test_xrange test_zipfile test_zipfile64 test_zipfile64 skipped -- test requires loads of disk-space bytes and a long time to run test_zipimport test_zipimport_support test_zlib 346 tests OK. 1 test failed: test_subprocess 35 tests skipped: test_aepack test_al test_applesingle test_bsddb185 test_bsddb3 test_cd test_cl test_curses test_epoll test_gl test_imgfile test_ioctl test_kqueue test_linuxaudiodev test_macos test_macostools test_multiprocessing test_ossaudiodev test_py3kwarn test_scriptpackages test_smtpnet test_socketserver test_startfile test_sunaudiodev test_tcl test_timeout test_tk test_ttk_guionly test_ttk_textonly test_unicode_file test_urllib2net test_urllibnet test_winreg test_winsound test_zipfile64 6 skips unexpected on linux2: test_multiprocessing test_ttk_guionly test_epoll test_tk test_ioctl test_ttk_textonly [937245 refs] From python-checkins at python.org Fri Mar 5 23:11:24 2010 From: python-checkins at python.org (vinay.sajip) Date: Fri, 5 Mar 2010 23:11:24 +0100 (CET) Subject: [Python-checkins] r78703 - python/trunk/Lib/logging/__init__.py Message-ID: <20100305221124.E044FFCA4@mail.python.org> Author: vinay.sajip Date: Fri Mar 5 23:11:24 2010 New Revision: 78703 Log: Factored out time usage determination into a method, to facilitate alternative formatting implementations in the future. Modified: python/trunk/Lib/logging/__init__.py Modified: python/trunk/Lib/logging/__init__.py ============================================================================== --- python/trunk/Lib/logging/__init__.py (original) +++ python/trunk/Lib/logging/__init__.py Fri Mar 5 23:11:24 2010 @@ -434,6 +434,12 @@ s = s[:-1] return s + def usesTime(self): + """ + Check if the format uses the creation time of the record. + """ + return self._fmt.find("%(asctime)") >= 0 + def format(self, record): """ Format the specified record as text. @@ -442,13 +448,13 @@ string formatting operation which yields the returned string. Before formatting the dictionary, a couple of preparatory steps are carried out. The message attribute of the record is computed - using LogRecord.getMessage(). If the formatting string contains - "%(asctime)", formatTime() is called to format the event time. - If there is exception information, it is formatted using - formatException() and appended to the message. + using LogRecord.getMessage(). If the formatting string uses the + time (as determined by a call to usesTime(), formatTime() is + called to format the event time. If there is exception information, + it is formatted using formatException() and appended to the message. """ record.message = record.getMessage() - if self._fmt.find("%(asctime)") >= 0: + if self.usesTime(): record.asctime = self.formatTime(record, self.datefmt) s = self._fmt % record.__dict__ if record.exc_info: From solipsis at pitrou.net Sat Mar 6 01:01:26 2010 From: solipsis at pitrou.net (solipsis at pitrou.net) Date: Sat, 6 Mar 2010 01:01:26 +0100 (CET) Subject: [Python-checkins] Daily py3k reference leaks (r78702): sum=0 Message-ID: <20100306000126.83CED1770A@ns6635.ovh.net> py3k results for svn r78702 (hg cset 67da217a8e5b) -------------------------------------------------- Command line was: ['./python', '-m', 'test.regrtest', '-uall', '-R', '3:3:/home/antoine/py3k/refleaks/reflogdZU_Bl', '-x', 'test_httpservers'] From python-checkins at python.org Sat Mar 6 01:16:57 2010 From: python-checkins at python.org (florent.xicluna) Date: Sat, 6 Mar 2010 01:16:57 +0100 (CET) Subject: [Python-checkins] r78704 - python/trunk/Lib/test/test_subprocess.py Message-ID: <20100306001657.AF539FBC5@mail.python.org> Author: florent.xicluna Date: Sat Mar 6 01:16:57 2010 New Revision: 78704 Log: #2777: Apply same recipe for test_terminate and test_kill, i.e. close or redirect fds. Modified: python/trunk/Lib/test/test_subprocess.py Modified: python/trunk/Lib/test/test_subprocess.py ============================================================================== --- python/trunk/Lib/test/test_subprocess.py (original) +++ python/trunk/Lib/test/test_subprocess.py Sat Mar 6 01:16:57 2010 @@ -673,14 +673,16 @@ self.assertNotEqual(p.wait(), 0) def test_kill(self): - p = subprocess.Popen([sys.executable, "-c", "input()"]) + p = subprocess.Popen([sys.executable, "-c", "input()"], + stdin=subprocess.PIPE, close_fds=True) self.assertIsNone(p.poll()) p.kill() self.assertEqual(p.wait(), -signal.SIGKILL) def test_terminate(self): - p = subprocess.Popen([sys.executable, "-c", "input()"]) + p = subprocess.Popen([sys.executable, "-c", "input()"], + stdin=subprocess.PIPE, close_fds=True) self.assertIsNone(p.poll()) p.terminate() From python-checkins at python.org Sat Mar 6 01:19:38 2010 From: python-checkins at python.org (florent.xicluna) Date: Sat, 6 Mar 2010 01:19:38 +0100 (CET) Subject: [Python-checkins] r78705 - in python/branches/py3k: Lib/test/test_subprocess.py Message-ID: <20100306001938.C1786FD23@mail.python.org> Author: florent.xicluna Date: Sat Mar 6 01:19:38 2010 New Revision: 78705 Log: Merged revisions 78704 via svnmerge from svn+ssh://pythondev at svn.python.org/python/trunk ........ r78704 | florent.xicluna | 2010-03-06 01:16:57 +0100 (sam, 06 mar 2010) | 2 lines #2777: Apply same recipe for test_terminate and test_kill, i.e. close or redirect fds. ........ Modified: python/branches/py3k/ (props changed) python/branches/py3k/Lib/test/test_subprocess.py Modified: python/branches/py3k/Lib/test/test_subprocess.py ============================================================================== --- python/branches/py3k/Lib/test/test_subprocess.py (original) +++ python/branches/py3k/Lib/test/test_subprocess.py Sat Mar 6 01:19:38 2010 @@ -671,14 +671,16 @@ self.assertNotEqual(p.wait(), 0) def test_kill(self): - p = subprocess.Popen([sys.executable, "-c", "input()"]) + p = subprocess.Popen([sys.executable, "-c", "input()"], + stdin=subprocess.PIPE, close_fds=True) self.assertIsNone(p.poll()) p.kill() self.assertEqual(p.wait(), -signal.SIGKILL) def test_terminate(self): - p = subprocess.Popen([sys.executable, "-c", "input()"]) + p = subprocess.Popen([sys.executable, "-c", "input()"], + stdin=subprocess.PIPE, close_fds=True) self.assertIsNone(p.poll()) p.terminate() From python-checkins at python.org Sat Mar 6 02:04:14 2010 From: python-checkins at python.org (tarek.ziade) Date: Sat, 6 Mar 2010 02:04:14 +0100 (CET) Subject: [Python-checkins] r78706 - python/trunk/Lib/distutils/tests/test_build_ext.py Message-ID: <20100306010414.CCA27DEAE@mail.python.org> Author: tarek.ziade Date: Sat Mar 6 02:04:14 2010 New Revision: 78706 Log: copied back the build_ext tests from 2.6 Modified: python/trunk/Lib/distutils/tests/test_build_ext.py Modified: python/trunk/Lib/distutils/tests/test_build_ext.py ============================================================================== --- python/trunk/Lib/distutils/tests/test_build_ext.py (original) +++ python/trunk/Lib/distutils/tests/test_build_ext.py Sat Mar 6 02:04:14 2010 @@ -3,17 +3,12 @@ import tempfile import shutil from StringIO import StringIO -import warnings -from test.test_support import check_warnings -from test.test_support import captured_stdout from distutils.core import Extension, Distribution from distutils.command.build_ext import build_ext -import sysconfig +from distutils import sysconfig from distutils.tests import support -from distutils.extension import Extension -from distutils.errors import (UnknownFileError, DistutilsSetupError, - CompileError) +from distutils.errors import DistutilsSetupError import unittest from test import test_support @@ -33,16 +28,10 @@ # Create a simple test environment # Note that we're making changes to sys.path super(BuildExtTestCase, self).setUp() - self.tmp_dir = self.mkdtemp() - self.sys_path = sys.path, sys.path[:] + self.tmp_dir = tempfile.mkdtemp(prefix="pythontest_") + self.sys_path = sys.path[:] sys.path.append(self.tmp_dir) shutil.copy(_get_source_filename(), self.tmp_dir) - if sys.version > "2.6": - import site - self.old_user_base = site.USER_BASE - site.USER_BASE = self.mkdtemp() - from distutils.command import build_ext - build_ext.USER_BASE = site.USER_BASE def test_build_ext(self): global ALREADY_TESTED @@ -76,27 +65,22 @@ import xx for attr in ('error', 'foo', 'new', 'roj'): - self.assertTrue(hasattr(xx, attr)) + self.assert_(hasattr(xx, attr)) self.assertEquals(xx.foo(2, 5), 7) self.assertEquals(xx.foo(13,15), 28) self.assertEquals(xx.new().demo(), None) doc = 'This is a template module just for instruction.' self.assertEquals(xx.__doc__, doc) - self.assertTrue(isinstance(xx.Null(), xx.Null)) - self.assertTrue(isinstance(xx.Str(), xx.Str)) + self.assert_(isinstance(xx.Null(), xx.Null)) + self.assert_(isinstance(xx.Str(), xx.Str)) def tearDown(self): # Get everything back to normal test_support.unload('xx') - sys.path = self.sys_path[0] - sys.path[:] = self.sys_path[1] - if sys.version > "2.6": - import site - site.USER_BASE = self.old_user_base - from distutils.command import build_ext - build_ext.USER_BASE = self.old_user_base - + sys.path = self.sys_path + # XXX on Windows the test leaves a directory with xx module in TEMP + shutil.rmtree(self.tmp_dir, os.name == 'nt' or sys.platform == 'cygwin') super(BuildExtTestCase, self).tearDown() def test_solaris_enable_shared(self): @@ -105,83 +89,35 @@ old = sys.platform sys.platform = 'sunos' # fooling finalize_options - from sysconfig import _CONFIG_VARS - old_var = _CONFIG_VARS.get('Py_ENABLE_SHARED') - _CONFIG_VARS['Py_ENABLE_SHARED'] = 1 + from distutils.sysconfig import _config_vars + old_var = _config_vars.get('Py_ENABLE_SHARED') + _config_vars['Py_ENABLE_SHARED'] = 1 try: cmd.ensure_finalized() finally: sys.platform = old if old_var is None: - del _CONFIG_VARS['Py_ENABLE_SHARED'] + del _config_vars['Py_ENABLE_SHARED'] else: - _CONFIG_VARS['Py_ENABLE_SHARED'] = old_var + _config_vars['Py_ENABLE_SHARED'] = old_var # make sure we get some library dirs under solaris - self.assertTrue(len(cmd.library_dirs) > 0) - - def test_user_site(self): - # site.USER_SITE was introduced in 2.6 - if sys.version < '2.6': - return - - import site - dist = Distribution({'name': 'xx'}) - cmd = build_ext(dist) - - # making sure the user option is there - options = [name for name, short, lable in - cmd.user_options] - self.assertTrue('user' in options) - - # setting a value - cmd.user = 1 - - # setting user based lib and include - lib = os.path.join(site.USER_BASE, 'lib') - incl = os.path.join(site.USER_BASE, 'include') - os.mkdir(lib) - os.mkdir(incl) - - # let's run finalize - cmd.ensure_finalized() - - # see if include_dirs and library_dirs - # were set - self.assertTrue(lib in cmd.library_dirs) - self.assertTrue(lib in cmd.rpath) - self.assertTrue(incl in cmd.include_dirs) - - def test_optional_extension(self): - - # this extension will fail, but let's ignore this failure - # with the optional argument. - modules = [Extension('foo', ['xxx'], optional=False)] - dist = Distribution({'name': 'xx', 'ext_modules': modules}) - cmd = build_ext(dist) - cmd.ensure_finalized() - self.assertRaises((UnknownFileError, CompileError), - cmd.run) # should raise an error - - modules = [Extension('foo', ['xxx'], optional=True)] - dist = Distribution({'name': 'xx', 'ext_modules': modules}) - cmd = build_ext(dist) - cmd.ensure_finalized() - cmd.run() # should pass + self.assert_(len(cmd.library_dirs) > 0) def test_finalize_options(self): # Make sure Python's include directories (for Python.h, pyconfig.h, # etc.) are in the include search path. - modules = [Extension('foo', ['xxx'], optional=False)] + modules = [Extension('foo', ['xxx'])] dist = Distribution({'name': 'xx', 'ext_modules': modules}) cmd = build_ext(dist) cmd.finalize_options() - py_include = sysconfig.get_path('include') - self.assertTrue(py_include in cmd.include_dirs) + from distutils import sysconfig + py_include = sysconfig.get_python_inc() + self.assert_(py_include in cmd.include_dirs) - plat_py_include = sysconfig.get_path('platinclude') - self.assertTrue(plat_py_include in cmd.include_dirs) + plat_py_include = sysconfig.get_python_inc(plat_specific=1) + self.assert_(plat_py_include in cmd.include_dirs) # make sure cmd.libraries is turned into a list # if it's a string @@ -195,7 +131,7 @@ cmd = build_ext(dist) cmd.library_dirs = 'my_lib_dir' cmd.finalize_options() - self.assertTrue('my_lib_dir' in cmd.library_dirs) + self.assert_('my_lib_dir' in cmd.library_dirs) # make sure rpath is turned into a list # if it's a list of os.pathsep's paths @@ -260,13 +196,13 @@ 'some': 'bar'})] cmd.check_extensions_list(exts) ext = exts[0] - self.assertTrue(isinstance(ext, Extension)) + self.assert_(isinstance(ext, Extension)) # check_extensions_list adds in ext the values passed # when they are in ('include_dirs', 'library_dirs', 'libraries' # 'extra_objects', 'extra_compile_args', 'extra_link_args') self.assertEquals(ext.libraries, 'foo') - self.assertTrue(not hasattr(ext, 'some')) + self.assert_(not hasattr(ext, 'some')) # 'macros' element of build info dict must be 1- or 2-tuple exts = [('foo.bar', {'sources': [''], 'libraries': 'foo', @@ -279,7 +215,7 @@ self.assertEquals(exts[0].define_macros, [('1', '2')]) def test_get_source_files(self): - modules = [Extension('foo', ['xxx'], optional=False)] + modules = [Extension('foo', ['xxx'])] dist = Distribution({'name': 'xx', 'ext_modules': modules}) cmd = build_ext(dist) cmd.ensure_finalized() @@ -300,7 +236,7 @@ tmp_dir = self.mkdtemp() c_file = os.path.join(tmp_dir, 'foo.c') self.write_file(c_file, 'void initfoo(void) {};\n') - ext = Extension('foo', [c_file], optional=False) + ext = Extension('foo', [c_file]) dist = Distribution({'name': 'xx', 'ext_modules': [ext]}) cmd = build_ext(dist) @@ -324,16 +260,16 @@ so_file = cmd.get_outputs()[0] finally: os.chdir(old_wd) - self.assertTrue(os.path.exists(so_file)) + self.assert_(os.path.exists(so_file)) self.assertEquals(os.path.splitext(so_file)[-1], sysconfig.get_config_var('SO')) so_dir = os.path.dirname(so_file) self.assertEquals(so_dir, other_tmp_dir) - + cmd.compiler = None cmd.inplace = 0 cmd.run() so_file = cmd.get_outputs()[0] - self.assertTrue(os.path.exists(so_file)) + self.assert_(os.path.exists(so_file)) self.assertEquals(os.path.splitext(so_file)[-1], sysconfig.get_config_var('SO')) so_dir = os.path.dirname(so_file) @@ -363,10 +299,6 @@ def test_ext_fullpath(self): ext = sysconfig.get_config_vars()['SO'] - # building lxml.etree inplace - #etree_c = os.path.join(self.tmp_dir, 'lxml.etree.c') - #etree_ext = Extension('lxml.etree', [etree_c]) - #dist = Distribution({'name': 'lxml', 'ext_modules': [etree_ext]}) dist = Distribution() cmd = build_ext(dist) cmd.inplace = 1 @@ -399,25 +331,61 @@ wanted = os.path.join(curdir, 'twisted', 'runner', 'portmap' + ext) self.assertEquals(wanted, path) - def test_compiler_deprecation_warning(self): - dist = Distribution() + def test_build_ext_inplace(self): + etree_c = os.path.join(self.tmp_dir, 'lxml.etree.c') + etree_ext = Extension('lxml.etree', [etree_c]) + dist = Distribution({'name': 'lxml', 'ext_modules': [etree_ext]}) + cmd = build_ext(dist) + cmd.ensure_finalized() + cmd.inplace = 1 + cmd.distribution.package_dir = {'': 'src'} + cmd.distribution.packages = ['lxml', 'lxml.html'] + curdir = os.getcwd() + ext = sysconfig.get_config_var("SO") + wanted = os.path.join(curdir, 'src', 'lxml', 'etree' + ext) + path = cmd.get_ext_fullpath('lxml.etree') + self.assertEquals(wanted, path) + + def test_setuptools_compat(self): + from setuptools_build_ext import build_ext as setuptools_build_ext + from setuptools_extension import Extension + + etree_c = os.path.join(self.tmp_dir, 'lxml.etree.c') + etree_ext = Extension('lxml.etree', [etree_c]) + dist = Distribution({'name': 'lxml', 'ext_modules': [etree_ext]}) + cmd = setuptools_build_ext(dist) + cmd.ensure_finalized() + cmd.inplace = 1 + cmd.distribution.package_dir = {'': 'src'} + cmd.distribution.packages = ['lxml', 'lxml.html'] + curdir = os.getcwd() + ext = sysconfig.get_config_var("SO") + wanted = os.path.join(curdir, 'src', 'lxml', 'etree' + ext) + path = cmd.get_ext_fullpath('lxml.etree') + self.assertEquals(wanted, path) + + def test_build_ext_path_with_os_sep(self): + dist = Distribution({'name': 'UpdateManager'}) cmd = build_ext(dist) + cmd.ensure_finalized() + ext = sysconfig.get_config_var("SO") + ext_name = os.path.join('UpdateManager', 'fdsend') + ext_path = cmd.get_ext_fullpath(ext_name) + wanted = os.path.join(cmd.build_lib, 'UpdateManager', 'fdsend' + ext) + self.assertEquals(ext_path, wanted) - class MyCompiler(object): - def do_something(self): - pass - - with check_warnings() as w: - warnings.simplefilter("always") - cmd.compiler = MyCompiler() - self.assertEquals(len(w.warnings), 1) - cmd.compile = 'unix' - self.assertEquals(len(w.warnings), 1) - cmd.compiler = MyCompiler() - cmd.compiler.do_something() - # two more warnings genereated by the get - # and the set - self.assertEquals(len(w.warnings), 3) + def test_build_ext_path_cross_platform(self): + if sys.platform != 'win32': + return + dist = Distribution({'name': 'UpdateManager'}) + cmd = build_ext(dist) + cmd.ensure_finalized() + ext = sysconfig.get_config_var("SO") + # this needs to work even under win32 + ext_name = 'UpdateManager/fdsend' + ext_path = cmd.get_ext_fullpath(ext_name) + wanted = os.path.join(cmd.build_lib, 'UpdateManager', 'fdsend' + ext) + self.assertEquals(ext_path, wanted) def test_suite(): src = _get_source_filename() From python-checkins at python.org Sat Mar 6 02:18:28 2010 From: python-checkins at python.org (tarek.ziade) Date: Sat, 6 Mar 2010 02:18:28 +0100 (CET) Subject: [Python-checkins] r78707 - in python/trunk/Lib/distutils/tests: test_build_ext.py xxmodule.c Message-ID: <20100306011828.1A4F5C687@mail.python.org> Author: tarek.ziade Date: Sat Mar 6 02:18:27 2010 New Revision: 78707 Log: provide a fallback for xxmodule.c in case the buildir is not present Added: python/trunk/Lib/distutils/tests/xxmodule.c Modified: python/trunk/Lib/distutils/tests/test_build_ext.py Modified: python/trunk/Lib/distutils/tests/test_build_ext.py ============================================================================== --- python/trunk/Lib/distutils/tests/test_build_ext.py (original) +++ python/trunk/Lib/distutils/tests/test_build_ext.py Sat Mar 6 02:18:27 2010 @@ -19,7 +19,11 @@ def _get_source_filename(): srcdir = sysconfig.get_config_var('srcdir') - return os.path.join(srcdir, 'Modules', 'xxmodule.c') + xxmodule = os.path.join(srcdir, 'Modules', 'xxmodule.c') + if not os.path.exists(xxmodule): + # local fallback + xxmodule = os.path.join(os.path.dirname(__file__), 'xxmodule.c') + return xxmodule class BuildExtTestCase(support.TempdirManager, support.LoggingSilencer, Added: python/trunk/Lib/distutils/tests/xxmodule.c ============================================================================== --- (empty file) +++ python/trunk/Lib/distutils/tests/xxmodule.c Sat Mar 6 02:18:27 2010 @@ -0,0 +1,379 @@ + +/* Use this file as a template to start implementing a module that + also declares object types. All occurrences of 'Xxo' should be changed + to something reasonable for your objects. After that, all other + occurrences of 'xx' should be changed to something reasonable for your + module. If your module is named foo your sourcefile should be named + foomodule.c. + + You will probably want to delete all references to 'x_attr' and add + your own types of attributes instead. Maybe you want to name your + local variables other than 'self'. If your object type is needed in + other files, you'll have to create a file "foobarobject.h"; see + intobject.h for an example. */ + +/* Xxo objects */ + +#include "Python.h" + +static PyObject *ErrorObject; + +typedef struct { + PyObject_HEAD + PyObject *x_attr; /* Attributes dictionary */ +} XxoObject; + +static PyTypeObject Xxo_Type; + +#define XxoObject_Check(v) (Py_TYPE(v) == &Xxo_Type) + +static XxoObject * +newXxoObject(PyObject *arg) +{ + XxoObject *self; + self = PyObject_New(XxoObject, &Xxo_Type); + if (self == NULL) + return NULL; + self->x_attr = NULL; + return self; +} + +/* Xxo methods */ + +static void +Xxo_dealloc(XxoObject *self) +{ + Py_XDECREF(self->x_attr); + PyObject_Del(self); +} + +static PyObject * +Xxo_demo(XxoObject *self, PyObject *args) +{ + if (!PyArg_ParseTuple(args, ":demo")) + return NULL; + Py_INCREF(Py_None); + return Py_None; +} + +static PyMethodDef Xxo_methods[] = { + {"demo", (PyCFunction)Xxo_demo, METH_VARARGS, + PyDoc_STR("demo() -> None")}, + {NULL, NULL} /* sentinel */ +}; + +static PyObject * +Xxo_getattr(XxoObject *self, char *name) +{ + if (self->x_attr != NULL) { + PyObject *v = PyDict_GetItemString(self->x_attr, name); + if (v != NULL) { + Py_INCREF(v); + return v; + } + } + return Py_FindMethod(Xxo_methods, (PyObject *)self, name); +} + +static int +Xxo_setattr(XxoObject *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 Xxo attribute"); + return rv; + } + else + return PyDict_SetItemString(self->x_attr, name, v); +} + +static PyTypeObject Xxo_Type = { + /* The ob_type field must be initialized in the module init function + * to be portable to Windows without using C++. */ + PyVarObject_HEAD_INIT(NULL, 0) + "xxmodule.Xxo", /*tp_name*/ + sizeof(XxoObject), /*tp_basicsize*/ + 0, /*tp_itemsize*/ + /* methods */ + (destructor)Xxo_dealloc, /*tp_dealloc*/ + 0, /*tp_print*/ + (getattrfunc)Xxo_getattr, /*tp_getattr*/ + (setattrfunc)Xxo_setattr, /*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*/ + 0, /*tp_iter*/ + 0, /*tp_iternext*/ + 0, /*tp_methods*/ + 0, /*tp_members*/ + 0, /*tp_getset*/ + 0, /*tp_base*/ + 0, /*tp_dict*/ + 0, /*tp_descr_get*/ + 0, /*tp_descr_set*/ + 0, /*tp_dictoffset*/ + 0, /*tp_init*/ + 0, /*tp_alloc*/ + 0, /*tp_new*/ + 0, /*tp_free*/ + 0, /*tp_is_gc*/ +}; +/* --------------------------------------------------------------------- */ + +/* Function of two integers returning integer */ + +PyDoc_STRVAR(xx_foo_doc, +"foo(i,j)\n\ +\n\ +Return the sum of i and j."); + +static PyObject * +xx_foo(PyObject *self, PyObject *args) +{ + long i, j; + long res; + if (!PyArg_ParseTuple(args, "ll:foo", &i, &j)) + return NULL; + res = i+j; /* XXX Do something here */ + return PyInt_FromLong(res); +} + + +/* Function of no arguments returning new Xxo object */ + +static PyObject * +xx_new(PyObject *self, PyObject *args) +{ + XxoObject *rv; + + if (!PyArg_ParseTuple(args, ":new")) + return NULL; + rv = newXxoObject(args); + if (rv == NULL) + return NULL; + return (PyObject *)rv; +} + +/* Example with subtle bug from extensions manual ("Thin Ice"). */ + +static PyObject * +xx_bug(PyObject *self, PyObject *args) +{ + PyObject *list, *item; + + if (!PyArg_ParseTuple(args, "O:bug", &list)) + return NULL; + + item = PyList_GetItem(list, 0); + /* Py_INCREF(item); */ + PyList_SetItem(list, 1, PyInt_FromLong(0L)); + PyObject_Print(item, stdout, 0); + printf("\n"); + /* Py_DECREF(item); */ + + Py_INCREF(Py_None); + return Py_None; +} + +/* Test bad format character */ + +static PyObject * +xx_roj(PyObject *self, PyObject *args) +{ + PyObject *a; + long b; + if (!PyArg_ParseTuple(args, "O#:roj", &a, &b)) + return NULL; + Py_INCREF(Py_None); + return Py_None; +} + + +/* ---------- */ + +static PyTypeObject Str_Type = { + /* The ob_type field must be initialized in the module init function + * to be portable to Windows without using C++. */ + PyVarObject_HEAD_INIT(NULL, 0) + "xxmodule.Str", /*tp_name*/ + 0, /*tp_basicsize*/ + 0, /*tp_itemsize*/ + /* methods */ + 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, /*tp_flags*/ + 0, /*tp_doc*/ + 0, /*tp_traverse*/ + 0, /*tp_clear*/ + 0, /*tp_richcompare*/ + 0, /*tp_weaklistoffset*/ + 0, /*tp_iter*/ + 0, /*tp_iternext*/ + 0, /*tp_methods*/ + 0, /*tp_members*/ + 0, /*tp_getset*/ + 0, /* see initxx */ /*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*/ +}; + +/* ---------- */ + +static PyObject * +null_richcompare(PyObject *self, PyObject *other, int op) +{ + Py_INCREF(Py_NotImplemented); + return Py_NotImplemented; +} + +static PyTypeObject Null_Type = { + /* The ob_type field must be initialized in the module init function + * to be portable to Windows without using C++. */ + PyVarObject_HEAD_INIT(NULL, 0) + "xxmodule.Null", /*tp_name*/ + 0, /*tp_basicsize*/ + 0, /*tp_itemsize*/ + /* methods */ + 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, /*tp_flags*/ + 0, /*tp_doc*/ + 0, /*tp_traverse*/ + 0, /*tp_clear*/ + null_richcompare, /*tp_richcompare*/ + 0, /*tp_weaklistoffset*/ + 0, /*tp_iter*/ + 0, /*tp_iternext*/ + 0, /*tp_methods*/ + 0, /*tp_members*/ + 0, /*tp_getset*/ + 0, /* see initxx */ /*tp_base*/ + 0, /*tp_dict*/ + 0, /*tp_descr_get*/ + 0, /*tp_descr_set*/ + 0, /*tp_dictoffset*/ + 0, /*tp_init*/ + 0, /*tp_alloc*/ + 0, /* see initxx */ /*tp_new*/ + 0, /*tp_free*/ + 0, /*tp_is_gc*/ +}; + + +/* ---------- */ + + +/* List of functions defined in the module */ + +static PyMethodDef xx_methods[] = { + {"roj", xx_roj, METH_VARARGS, + PyDoc_STR("roj(a,b) -> None")}, + {"foo", xx_foo, METH_VARARGS, + xx_foo_doc}, + {"new", xx_new, METH_VARARGS, + PyDoc_STR("new() -> new Xx object")}, + {"bug", xx_bug, METH_VARARGS, + PyDoc_STR("bug(o) -> None")}, + {NULL, NULL} /* sentinel */ +}; + +PyDoc_STRVAR(module_doc, +"This is a template module just for instruction."); + +/* Initialization function for the module (*must* be called initxx) */ + +PyMODINIT_FUNC +initxx(void) +{ + PyObject *m; + + /* Due to cross platform compiler issues the slots must be filled + * here. It's required for portability to Windows without requiring + * C++. */ + Null_Type.tp_base = &PyBaseObject_Type; + Null_Type.tp_new = PyType_GenericNew; + Str_Type.tp_base = &PyUnicode_Type; + + /* Finalize the type object including setting type of the new type + * object; doing it here is required for portability, too. */ + if (PyType_Ready(&Xxo_Type) < 0) + return; + + /* Create the module and add the functions */ + m = Py_InitModule3("xx", xx_methods, module_doc); + if (m == NULL) + return; + + /* Add some symbolic constants to the module */ + if (ErrorObject == NULL) { + ErrorObject = PyErr_NewException("xx.error", NULL, NULL); + if (ErrorObject == NULL) + return; + } + Py_INCREF(ErrorObject); + PyModule_AddObject(m, "error", ErrorObject); + + /* Add Str */ + if (PyType_Ready(&Str_Type) < 0) + return; + PyModule_AddObject(m, "Str", (PyObject *)&Str_Type); + + /* Add Null */ + if (PyType_Ready(&Null_Type) < 0) + return; + PyModule_AddObject(m, "Null", (PyObject *)&Null_Type); +} From python-checkins at python.org Sat Mar 6 02:20:50 2010 From: python-checkins at python.org (ezio.melotti) Date: Sat, 6 Mar 2010 02:20:50 +0100 (CET) Subject: [Python-checkins] r78708 - python/branches/py3k/Lib/test/test_imp.py Message-ID: <20100306012050.06E6EDBF6@mail.python.org> Author: ezio.melotti Date: Sat Mar 6 02:20:49 2010 New Revision: 78708 Log: Cleanup and minor fixes. Modified: python/branches/py3k/Lib/test/test_imp.py Modified: python/branches/py3k/Lib/test/test_imp.py ============================================================================== --- python/branches/py3k/Lib/test/test_imp.py (original) +++ python/branches/py3k/Lib/test/test_imp.py Sat Mar 6 02:20:49 2010 @@ -84,8 +84,8 @@ # and issue never happens for dynamic modules. # But sources modified to follow generic way for processing pathes. - # the return encoding can be uppercase - fs_encoding = sys.getfilesystemencoding().lower() + # the return encoding could be uppercase or None + fs_encoding = sys.getfilesystemencoding() fs_encoding = fs_encoding.lower() if fs_encoding else 'ascii' # covers utf-8 and Windows ANSI code pages @@ -116,36 +116,32 @@ with open(temp_mod_name + '.py', 'w') as file: file.write('a = 1\n') file, filename, info = imp.find_module(temp_mod_name) - self.assertNotEquals(None, file) + self.assertIsNotNone(file) self.assertTrue(filename[:-3].endswith(temp_mod_name)) - self.assertEquals('.py', info[0]) - self.assertEquals('U', info[1]) - self.assertEquals(imp.PY_SOURCE, info[2]) + self.assertEqual(info[0], '.py') + self.assertEqual(info[1], 'U') + self.assertEqual(info[2], imp.PY_SOURCE) mod = imp.load_module(temp_mod_name, file, filename, info) - self.assertEquals(1, mod.a) + self.assertEqual(mod.a, 1) file.close() mod = imp.load_source(temp_mod_name, temp_mod_name + '.py') - self.assertEquals(1, mod.a) + self.assertEqual(mod.a, 1) mod = imp.load_compiled(temp_mod_name, temp_mod_name + '.pyc') - self.assertEquals(1, mod.a) + self.assertEqual(mod.a, 1) if not os.path.exists(test_package_name): os.mkdir(test_package_name) with open(init_file_name, 'w') as file: file.write('b = 2\n') package = imp.load_package(test_package_name, test_package_name) - self.assertEquals(2, package.b) + self.assertEqual(package.b, 2) finally: - support.unlink(temp_mod_name + '.py') - support.unlink(temp_mod_name + '.pyc') - support.unlink(temp_mod_name + '.pyo') - - support.unlink(init_file_name + '.py') - support.unlink(init_file_name + '.pyc') - support.unlink(init_file_name + '.pyo') + for ext in ('.py', '.pyc', '.pyo'): + support.unlink(temp_mod_name + ext) + support.unlink(init_file_name + ext) support.rmtree(test_package_name) From python-checkins at python.org Sat Mar 6 02:23:21 2010 From: python-checkins at python.org (tarek.ziade) Date: Sat, 6 Mar 2010 02:23:21 +0100 (CET) Subject: [Python-checkins] r78709 - python/trunk/Lib/distutils/tests/test_build_ext.py Message-ID: <20100306012321.7948EDBF6@mail.python.org> Author: tarek.ziade Date: Sat Mar 6 02:23:21 2010 New Revision: 78709 Log: simplified the fallback case Modified: python/trunk/Lib/distutils/tests/test_build_ext.py Modified: python/trunk/Lib/distutils/tests/test_build_ext.py ============================================================================== --- python/trunk/Lib/distutils/tests/test_build_ext.py (original) +++ python/trunk/Lib/distutils/tests/test_build_ext.py Sat Mar 6 02:23:21 2010 @@ -19,11 +19,10 @@ def _get_source_filename(): srcdir = sysconfig.get_config_var('srcdir') - xxmodule = os.path.join(srcdir, 'Modules', 'xxmodule.c') - if not os.path.exists(xxmodule): + if srcdir is None: # local fallback - xxmodule = os.path.join(os.path.dirname(__file__), 'xxmodule.c') - return xxmodule + return os.path.join(os.path.dirname(__file__), 'xxmodule.c') + return os.path.join(srcdir, 'Modules', 'xxmodule.c') class BuildExtTestCase(support.TempdirManager, support.LoggingSilencer, From python-checkins at python.org Sat Mar 6 02:27:09 2010 From: python-checkins at python.org (tarek.ziade) Date: Sat, 6 Mar 2010 02:27:09 +0100 (CET) Subject: [Python-checkins] r78710 - in python/trunk/Lib/distutils/tests: setuptools_build_ext.py setuptools_extension.py Message-ID: <20100306012709.8B77FC606@mail.python.org> Author: tarek.ziade Date: Sat Mar 6 02:27:09 2010 New Revision: 78710 Log: files used by win32 tests Added: python/trunk/Lib/distutils/tests/setuptools_build_ext.py python/trunk/Lib/distutils/tests/setuptools_extension.py Added: python/trunk/Lib/distutils/tests/setuptools_build_ext.py ============================================================================== --- (empty file) +++ python/trunk/Lib/distutils/tests/setuptools_build_ext.py Sat Mar 6 02:27:09 2010 @@ -0,0 +1,287 @@ +from distutils.command.build_ext import build_ext as _du_build_ext +try: + # Attempt to use Pyrex for building extensions, if available + from Pyrex.Distutils.build_ext import build_ext as _build_ext +except ImportError: + _build_ext = _du_build_ext + +import os, sys +from distutils.file_util import copy_file + +from distutils.tests.setuptools_extension import Library + +from distutils.ccompiler import new_compiler +from distutils.sysconfig import customize_compiler, get_config_var +get_config_var("LDSHARED") # make sure _config_vars is initialized +from distutils.sysconfig import _config_vars +from distutils import log +from distutils.errors import * + +have_rtld = False +use_stubs = False +libtype = 'shared' + +if sys.platform == "darwin": + use_stubs = True +elif os.name != 'nt': + try: + from dl import RTLD_NOW + have_rtld = True + use_stubs = True + except ImportError: + pass + +def if_dl(s): + if have_rtld: + return s + return '' + + + + + + +class build_ext(_build_ext): + def run(self): + """Build extensions in build directory, then copy if --inplace""" + old_inplace, self.inplace = self.inplace, 0 + _build_ext.run(self) + self.inplace = old_inplace + if old_inplace: + self.copy_extensions_to_source() + + def copy_extensions_to_source(self): + build_py = self.get_finalized_command('build_py') + for ext in self.extensions: + fullname = self.get_ext_fullname(ext.name) + filename = self.get_ext_filename(fullname) + modpath = fullname.split('.') + package = '.'.join(modpath[:-1]) + package_dir = build_py.get_package_dir(package) + dest_filename = os.path.join(package_dir,os.path.basename(filename)) + src_filename = os.path.join(self.build_lib,filename) + + # Always copy, even if source is older than destination, to ensure + # that the right extensions for the current Python/platform are + # used. + copy_file( + src_filename, dest_filename, verbose=self.verbose, + dry_run=self.dry_run + ) + if ext._needs_stub: + self.write_stub(package_dir or os.curdir, ext, True) + + + if _build_ext is not _du_build_ext and not hasattr(_build_ext,'pyrex_sources'): + # Workaround for problems using some Pyrex versions w/SWIG and/or 2.4 + def swig_sources(self, sources, *otherargs): + # first do any Pyrex processing + sources = _build_ext.swig_sources(self, sources) or sources + # Then do any actual SWIG stuff on the remainder + return _du_build_ext.swig_sources(self, sources, *otherargs) + + + + def get_ext_filename(self, fullname): + filename = _build_ext.get_ext_filename(self,fullname) + ext = self.ext_map[fullname] + if isinstance(ext,Library): + fn, ext = os.path.splitext(filename) + return self.shlib_compiler.library_filename(fn,libtype) + elif use_stubs and ext._links_to_dynamic: + d,fn = os.path.split(filename) + return os.path.join(d,'dl-'+fn) + else: + return filename + + def initialize_options(self): + _build_ext.initialize_options(self) + self.shlib_compiler = None + self.shlibs = [] + self.ext_map = {} + + def finalize_options(self): + _build_ext.finalize_options(self) + self.extensions = self.extensions or [] + self.check_extensions_list(self.extensions) + self.shlibs = [ext for ext in self.extensions + if isinstance(ext,Library)] + if self.shlibs: + self.setup_shlib_compiler() + for ext in self.extensions: + ext._full_name = self.get_ext_fullname(ext.name) + for ext in self.extensions: + fullname = ext._full_name + self.ext_map[fullname] = ext + ltd = ext._links_to_dynamic = \ + self.shlibs and self.links_to_dynamic(ext) or False + ext._needs_stub = ltd and use_stubs and not isinstance(ext,Library) + filename = ext._file_name = self.get_ext_filename(fullname) + libdir = os.path.dirname(os.path.join(self.build_lib,filename)) + if ltd and libdir not in ext.library_dirs: + ext.library_dirs.append(libdir) + if ltd and use_stubs and os.curdir not in ext.runtime_library_dirs: + ext.runtime_library_dirs.append(os.curdir) + + def setup_shlib_compiler(self): + compiler = self.shlib_compiler = new_compiler( + compiler=self.compiler, dry_run=self.dry_run, force=self.force + ) + if sys.platform == "darwin": + tmp = _config_vars.copy() + try: + # XXX Help! I don't have any idea whether these are right... + _config_vars['LDSHARED'] = "gcc -Wl,-x -dynamiclib -undefined dynamic_lookup" + _config_vars['CCSHARED'] = " -dynamiclib" + _config_vars['SO'] = ".dylib" + customize_compiler(compiler) + finally: + _config_vars.clear() + _config_vars.update(tmp) + else: + customize_compiler(compiler) + + if self.include_dirs is not None: + compiler.set_include_dirs(self.include_dirs) + if self.define is not None: + # 'define' option is a list of (name,value) tuples + for (name,value) in self.define: + compiler.define_macro(name, value) + if self.undef is not None: + for macro in self.undef: + compiler.undefine_macro(macro) + if self.libraries is not None: + compiler.set_libraries(self.libraries) + if self.library_dirs is not None: + compiler.set_library_dirs(self.library_dirs) + if self.rpath is not None: + compiler.set_runtime_library_dirs(self.rpath) + if self.link_objects is not None: + compiler.set_link_objects(self.link_objects) + + # hack so distutils' build_extension() builds a library instead + compiler.link_shared_object = link_shared_object.__get__(compiler) + + + + def get_export_symbols(self, ext): + if isinstance(ext,Library): + return ext.export_symbols + return _build_ext.get_export_symbols(self,ext) + + def build_extension(self, ext): + _compiler = self.compiler + try: + if isinstance(ext,Library): + self.compiler = self.shlib_compiler + _build_ext.build_extension(self,ext) + if ext._needs_stub: + self.write_stub( + self.get_finalized_command('build_py').build_lib, ext + ) + finally: + self.compiler = _compiler + + def links_to_dynamic(self, ext): + """Return true if 'ext' links to a dynamic lib in the same package""" + # XXX this should check to ensure the lib is actually being built + # XXX as dynamic, and not just using a locally-found version or a + # XXX static-compiled version + libnames = dict.fromkeys([lib._full_name for lib in self.shlibs]) + pkg = '.'.join(ext._full_name.split('.')[:-1]+['']) + for libname in ext.libraries: + if pkg+libname in libnames: return True + return False + + def get_outputs(self): + outputs = _build_ext.get_outputs(self) + optimize = self.get_finalized_command('build_py').optimize + for ext in self.extensions: + if ext._needs_stub: + base = os.path.join(self.build_lib, *ext._full_name.split('.')) + outputs.append(base+'.py') + outputs.append(base+'.pyc') + if optimize: + outputs.append(base+'.pyo') + return outputs + + def write_stub(self, output_dir, ext, compile=False): + log.info("writing stub loader for %s to %s",ext._full_name, output_dir) + stub_file = os.path.join(output_dir, *ext._full_name.split('.'))+'.py' + if compile and os.path.exists(stub_file): + raise DistutilsError(stub_file+" already exists! Please delete.") + if not self.dry_run: + f = open(stub_file,'w') + f.write('\n'.join([ + "def __bootstrap__():", + " global __bootstrap__, __file__, __loader__", + " import sys, os, pkg_resources, imp"+if_dl(", dl"), + " __file__ = pkg_resources.resource_filename(__name__,%r)" + % os.path.basename(ext._file_name), + " del __bootstrap__", + " if '__loader__' in globals():", + " del __loader__", + if_dl(" old_flags = sys.getdlopenflags()"), + " old_dir = os.getcwd()", + " try:", + " os.chdir(os.path.dirname(__file__))", + if_dl(" sys.setdlopenflags(dl.RTLD_NOW)"), + " imp.load_dynamic(__name__,__file__)", + " finally:", + if_dl(" sys.setdlopenflags(old_flags)"), + " os.chdir(old_dir)", + "__bootstrap__()", + "" # terminal \n + ])) + f.close() + if compile: + from distutils.util import byte_compile + byte_compile([stub_file], optimize=0, + force=True, dry_run=self.dry_run) + optimize = self.get_finalized_command('install_lib').optimize + if optimize > 0: + byte_compile([stub_file], optimize=optimize, + force=True, dry_run=self.dry_run) + if os.path.exists(stub_file) and not self.dry_run: + os.unlink(stub_file) + + +if use_stubs or os.name=='nt': + # Build shared libraries + # + def link_shared_object(self, objects, output_libname, output_dir=None, + libraries=None, library_dirs=None, runtime_library_dirs=None, + export_symbols=None, debug=0, extra_preargs=None, + extra_postargs=None, build_temp=None, target_lang=None + ): self.link( + self.SHARED_LIBRARY, objects, output_libname, + output_dir, libraries, library_dirs, runtime_library_dirs, + export_symbols, debug, extra_preargs, extra_postargs, + build_temp, target_lang + ) +else: + # Build static libraries everywhere else + libtype = 'static' + + def link_shared_object(self, objects, output_libname, output_dir=None, + libraries=None, library_dirs=None, runtime_library_dirs=None, + export_symbols=None, debug=0, extra_preargs=None, + extra_postargs=None, build_temp=None, target_lang=None + ): + # XXX we need to either disallow these attrs on Library instances, + # or warn/abort here if set, or something... + #libraries=None, library_dirs=None, runtime_library_dirs=None, + #export_symbols=None, extra_preargs=None, extra_postargs=None, + #build_temp=None + + assert output_dir is None # distutils build_ext doesn't pass this + output_dir,filename = os.path.split(output_libname) + basename, ext = os.path.splitext(filename) + if self.library_filename("x").startswith('lib'): + # strip 'lib' prefix; this is kludgy if some platform uses + # a different prefix + basename = basename[3:] + + self.create_static_lib( + objects, basename, output_dir, debug, target_lang + ) Added: python/trunk/Lib/distutils/tests/setuptools_extension.py ============================================================================== --- (empty file) +++ python/trunk/Lib/distutils/tests/setuptools_extension.py Sat Mar 6 02:27:09 2010 @@ -0,0 +1,51 @@ +from distutils.core import Extension as _Extension +from distutils.core import Distribution as _Distribution + +def _get_unpatched(cls): + """Protect against re-patching the distutils if reloaded + + Also ensures that no other distutils extension monkeypatched the distutils + first. + """ + while cls.__module__.startswith('setuptools'): + cls, = cls.__bases__ + if not cls.__module__.startswith('distutils'): + raise AssertionError( + "distutils has already been patched by %r" % cls + ) + return cls + +_Distribution = _get_unpatched(_Distribution) +_Extension = _get_unpatched(_Extension) + +try: + from Pyrex.Distutils.build_ext import build_ext +except ImportError: + have_pyrex = False +else: + have_pyrex = True + + +class Extension(_Extension): + """Extension that uses '.c' files in place of '.pyx' files""" + + if not have_pyrex: + # convert .pyx extensions to .c + def __init__(self,*args,**kw): + _Extension.__init__(self,*args,**kw) + sources = [] + for s in self.sources: + if s.endswith('.pyx'): + sources.append(s[:-3]+'c') + else: + sources.append(s) + self.sources = sources + +class Library(Extension): + """Just like a regular Extension, but built as a library instead""" + +import sys, distutils.core, distutils.extension +distutils.core.Extension = Extension +distutils.extension.Extension = Extension +if 'distutils.command.build_ext' in sys.modules: + sys.modules['distutils.command.build_ext'].Extension = Extension From python-checkins at python.org Sat Mar 6 02:50:26 2010 From: python-checkins at python.org (ezio.melotti) Date: Sat, 6 Mar 2010 02:50:26 +0100 (CET) Subject: [Python-checkins] r78711 - python/branches/py3k/Lib/test/test_imp.py Message-ID: <20100306015026.1A747FC00@mail.python.org> Author: ezio.melotti Date: Sat Mar 6 02:50:25 2010 New Revision: 78711 Log: The test was failing because the curdir was missing from sys.path. This should fix the problem. Modified: python/branches/py3k/Lib/test/test_imp.py Modified: python/branches/py3k/Lib/test/test_imp.py ============================================================================== --- python/branches/py3k/Lib/test/test_imp.py (original) +++ python/branches/py3k/Lib/test/test_imp.py Sat Mar 6 02:50:25 2010 @@ -113,6 +113,9 @@ test_package_name = 'test_imp_helper_package_' + decoded_char init_file_name = os.path.join(test_package_name, '__init__.py') try: + # if the curdir is not in sys.path the test fails when run with + # ./python ./Lib/test/regrtest.py test_imp + sys.path.insert(0, os.curdir) with open(temp_mod_name + '.py', 'w') as file: file.write('a = 1\n') file, filename, info = imp.find_module(temp_mod_name) @@ -139,6 +142,7 @@ package = imp.load_package(test_package_name, test_package_name) self.assertEqual(package.b, 2) finally: + del sys.path[0] for ext in ('.py', '.pyc', '.pyo'): support.unlink(temp_mod_name + ext) support.unlink(init_file_name + ext) From python-checkins at python.org Sat Mar 6 03:11:14 2010 From: python-checkins at python.org (tarek.ziade) Date: Sat, 6 Mar 2010 03:11:14 +0100 (CET) Subject: [Python-checkins] r78712 - python/trunk/Lib/distutils/tests/test_build_ext.py Message-ID: <20100306021114.64E44FD98@mail.python.org> Author: tarek.ziade Date: Sat Mar 6 03:11:14 2010 New Revision: 78712 Log: fixed various failures and environment alterations in distutils.test_build_ext Modified: python/trunk/Lib/distutils/tests/test_build_ext.py Modified: python/trunk/Lib/distutils/tests/test_build_ext.py ============================================================================== --- python/trunk/Lib/distutils/tests/test_build_ext.py (original) +++ python/trunk/Lib/distutils/tests/test_build_ext.py Sat Mar 6 03:11:14 2010 @@ -19,10 +19,15 @@ def _get_source_filename(): srcdir = sysconfig.get_config_var('srcdir') + fallback_path = os.path.join(os.path.dirname(__file__), 'xxmodule.c') if srcdir is None: - # local fallback - return os.path.join(os.path.dirname(__file__), 'xxmodule.c') - return os.path.join(srcdir, 'Modules', 'xxmodule.c') + return fallback_path + locations = (srcdir, os.path.dirname(sys.executable)) + for location in locations: + path = os.path.join(location, 'Modules', 'xxmodule.c') + if os.path.exists(path): + return path + return fallback_path class BuildExtTestCase(support.TempdirManager, support.LoggingSilencer, @@ -81,7 +86,7 @@ def tearDown(self): # Get everything back to normal test_support.unload('xx') - sys.path = self.sys_path + sys.path[:] = self.sys_path # XXX on Windows the test leaves a directory with xx module in TEMP shutil.rmtree(self.tmp_dir, os.name == 'nt' or sys.platform == 'cygwin') super(BuildExtTestCase, self).tearDown() @@ -350,22 +355,31 @@ self.assertEquals(wanted, path) def test_setuptools_compat(self): - from setuptools_build_ext import build_ext as setuptools_build_ext - from setuptools_extension import Extension - - etree_c = os.path.join(self.tmp_dir, 'lxml.etree.c') - etree_ext = Extension('lxml.etree', [etree_c]) - dist = Distribution({'name': 'lxml', 'ext_modules': [etree_ext]}) - cmd = setuptools_build_ext(dist) - cmd.ensure_finalized() - cmd.inplace = 1 - cmd.distribution.package_dir = {'': 'src'} - cmd.distribution.packages = ['lxml', 'lxml.html'] - curdir = os.getcwd() - ext = sysconfig.get_config_var("SO") - wanted = os.path.join(curdir, 'src', 'lxml', 'etree' + ext) - path = cmd.get_ext_fullpath('lxml.etree') - self.assertEquals(wanted, path) + import distutils.core, distutils.extension, distutils.command.build_ext + saved_ext = distutils.extension.Extension + try: + # theses import patch Distutils' Extension class + from setuptools_build_ext import build_ext as setuptools_build_ext + from setuptools_extension import Extension + + etree_c = os.path.join(self.tmp_dir, 'lxml.etree.c') + etree_ext = Extension('lxml.etree', [etree_c]) + dist = Distribution({'name': 'lxml', 'ext_modules': [etree_ext]}) + cmd = setuptools_build_ext(dist) + cmd.ensure_finalized() + cmd.inplace = 1 + cmd.distribution.package_dir = {'': 'src'} + cmd.distribution.packages = ['lxml', 'lxml.html'] + curdir = os.getcwd() + ext = sysconfig.get_config_var("SO") + wanted = os.path.join(curdir, 'src', 'lxml', 'etree' + ext) + path = cmd.get_ext_fullpath('lxml.etree') + self.assertEquals(wanted, path) + finally: + # restoring Distutils' Extension class otherwise its broken + distutils.extension.Extension = saved_ext + distutils.core.Extension = saved_ext + distutils.command.build_ext.Extension = saved_ext def test_build_ext_path_with_os_sep(self): dist = Distribution({'name': 'UpdateManager'}) @@ -391,13 +405,7 @@ self.assertEquals(ext_path, wanted) def test_suite(): - src = _get_source_filename() - if not os.path.exists(src): - if test_support.verbose: - print ('test_build_ext: Cannot find source code (test' - ' must run in python build dir)') - return unittest.TestSuite() - else: return unittest.makeSuite(BuildExtTestCase) + return unittest.makeSuite(BuildExtTestCase) if __name__ == '__main__': test_support.run_unittest(test_suite()) From python-checkins at python.org Sat Mar 6 03:17:28 2010 From: python-checkins at python.org (tarek.ziade) Date: Sat, 6 Mar 2010 03:17:28 +0100 (CET) Subject: [Python-checkins] r78713 - python/trunk/Lib/distutils/msvc9compiler.py Message-ID: <20100306021728.2813CFAEB@mail.python.org> Author: tarek.ziade Date: Sat Mar 6 03:17:28 2010 New Revision: 78713 Log: search in the alternative location for VCExpress Modified: python/trunk/Lib/distutils/msvc9compiler.py Modified: python/trunk/Lib/distutils/msvc9compiler.py ============================================================================== --- python/trunk/Lib/distutils/msvc9compiler.py (original) +++ python/trunk/Lib/distutils/msvc9compiler.py Sat Mar 6 03:17:28 2010 @@ -38,6 +38,7 @@ _winreg.HKEY_CLASSES_ROOT) VS_BASE = r"Software\Microsoft\VisualStudio\%0.1f" +VSEXPRESS_BASE = r"Software\Microsoft\VCExpress\%0.1f" WINSDK_BASE = r"Software\Microsoft\Microsoft SDKs\Windows" NET_BASE = r"Software\Microsoft\.NETFramework" @@ -216,9 +217,18 @@ productdir = Reg.get_value(r"%s\Setup\VC" % vsbase, "productdir") except KeyError: - log.debug("Unable to find productdir in registry") productdir = None + # trying Express edition + if productdir is None: + vsbase = VSEXPRESS_BASE % version + try: + productdir = Reg.get_value(r"%s\Setup\VC" % vsbase, + "productdir") + except KeyError: + productdir = None + log.debug("Unable to find productdir in registry") + if not productdir or not os.path.isdir(productdir): toolskey = "VS%0.f0COMNTOOLS" % version toolsdir = os.environ.get(toolskey, None) From python-checkins at python.org Sat Mar 6 03:26:07 2010 From: python-checkins at python.org (tarek.ziade) Date: Sat, 6 Mar 2010 03:26:07 +0100 (CET) Subject: [Python-checkins] r78714 - python/branches/release26-maint Message-ID: <20100306022607.95BDEF684@mail.python.org> Author: tarek.ziade Date: Sat Mar 6 03:26:07 2010 New Revision: 78714 Log: Blocked revisions 78706,78710 via svnmerge ........ r78706 | tarek.ziade | 2010-03-06 02:04:14 +0100 (Sat, 06 Mar 2010) | 1 line copied back the build_ext tests from 2.6 ........ r78710 | tarek.ziade | 2010-03-06 02:27:09 +0100 (Sat, 06 Mar 2010) | 1 line files used by win32 tests ........ Modified: python/branches/release26-maint/ (props changed) From python-checkins at python.org Sat Mar 6 03:30:14 2010 From: python-checkins at python.org (tarek.ziade) Date: Sat, 6 Mar 2010 03:30:14 +0100 (CET) Subject: [Python-checkins] r78715 - python/branches/py3k Message-ID: <20100306023014.D169EFE34@mail.python.org> Author: tarek.ziade Date: Sat Mar 6 03:30:14 2010 New Revision: 78715 Log: Blocked revisions 78706,78710 via svnmerge ........ r78706 | tarek.ziade | 2010-03-06 02:04:14 +0100 (Sat, 06 Mar 2010) | 1 line copied back the build_ext tests from 2.6 ........ r78710 | tarek.ziade | 2010-03-06 02:27:09 +0100 (Sat, 06 Mar 2010) | 1 line files used by win32 tests ........ Modified: python/branches/py3k/ (props changed) From python-checkins at python.org Sat Mar 6 04:09:26 2010 From: python-checkins at python.org (ezio.melotti) Date: Sat, 6 Mar 2010 04:09:26 +0100 (CET) Subject: [Python-checkins] r78716 - in python/branches/release31-maint: Lib/test/test_imp.py Message-ID: <20100306030926.3413DD4FC@mail.python.org> Author: ezio.melotti Date: Sat Mar 6 04:09:26 2010 New Revision: 78716 Log: Merged revisions 78689,78696-78697,78708,78711 via svnmerge from svn+ssh://pythondev at svn.python.org/python/branches/py3k ........ r78689 | ezio.melotti | 2010-03-05 14:43:17 +0200 (Fri, 05 Mar 2010) | 1 line This fixes a missing .lower() on the encoding name, a wrong byte undecodable by UTF-8, a wrong variable name, hopefully some windows buildbot on 3.x and adds a proper skip. It might break other things though. ........ r78696 | ezio.melotti | 2010-03-05 17:08:19 +0200 (Fri, 05 Mar 2010) | 1 line r78689 enabled the test on more platforms but the buildbot did not like it. Using the filesystem encoding might work better. Also see #5604. ........ r78697 | ezio.melotti | 2010-03-05 17:17:26 +0200 (Fri, 05 Mar 2010) | 1 line sys.getdefaultencoding() can return None. ........ r78708 | ezio.melotti | 2010-03-06 03:20:49 +0200 (Sat, 06 Mar 2010) | 1 line Cleanup and minor fixes. ........ r78711 | ezio.melotti | 2010-03-06 03:50:25 +0200 (Sat, 06 Mar 2010) | 1 line The test was failing because the curdir was missing from sys.path. This should fix the problem. ........ Modified: python/branches/release31-maint/ (props changed) python/branches/release31-maint/Lib/test/test_imp.py Modified: python/branches/release31-maint/Lib/test/test_imp.py ============================================================================== --- python/branches/release31-maint/Lib/test/test_imp.py (original) +++ python/branches/release31-maint/Lib/test/test_imp.py Sat Mar 6 04:09:26 2010 @@ -1,5 +1,4 @@ import imp -import locale import os import os.path import sys @@ -85,13 +84,15 @@ # and issue never happens for dynamic modules. # But sources modified to follow generic way for processing pathes. - locale_encoding = locale.getpreferredencoding() + # the return encoding could be uppercase or None + fs_encoding = sys.getfilesystemencoding() + fs_encoding = fs_encoding.lower() if fs_encoding else 'ascii' # covers utf-8 and Windows ANSI code pages # one non-space symbol from every page # (http://en.wikipedia.org/wiki/Code_page) known_locales = { - 'utf-8' : b'\xe4', + 'utf-8' : b'\xc3\xa4', 'cp1250' : b'\x8C', 'cp1251' : b'\xc0', 'cp1252' : b'\xc0', @@ -103,47 +104,49 @@ 'cp1258' : b'\xc0', } - special_char = known_locales.get(locale_encoding) - if special_char: - encoded_char = special_char.decode(locale_encoding) - temp_mod_name = 'test_imp_helper_' + encoded_char - test_package_name = 'test_imp_helper_package_' + encoded_char - init_file_name = os.path.join(test_package_name, '__init__.py') - try: - with open(temp_mod_name + '.py', 'w') as file: - file.write('a = 1\n') - file, filename, info = imp.find_module(temp_mod_name) - self.assertNotEquals(None, file) - self.assertTrue(filename[:-3].endswith(temp_mod_name)) - self.assertEquals('.py', info[0]) - self.assertEquals('U', info[1]) - self.assertEquals(imp.PY_SOURCE, info[2]) - - mod = imp.load_module(temp_mod_name, file, filename, info) - self.assertEquals(1, mod.a) - file.close() - - mod = imp.load_source(temp_mod_name, temp_mod_name + '.py') - self.assertEquals(1, mod.a) - - mod = imp.load_compiled(temp_mod_name, temp_mod_name + '.pyc') - self.assertEquals(1, mod.a) - - if not os.path.exists(test_package_name): - os.mkdir(test_package_name) - with open(init_file_name, 'w') as file: - file.write('b = 2\n') - package = imp.load_package(test_package_name, test_package_name) - self.assertEquals(2, package.b) - finally: - support.unlink(temp_mod_name + '.py') - support.unlink(temp_mod_name + '.pyc') - support.unlink(temp_mod_name + '.pyo') - - support.unlink(init_file_name + '.py') - support.unlink(init_file_name + '.pyc') - support.unlink(init_file_name + '.pyo') - support.rmtree(test_package_name) + special_char = known_locales.get(fs_encoding) + if not special_char: + self.skipTest("can't run this test with %s as filesystem encoding" + % fs_encoding) + decoded_char = special_char.decode(fs_encoding) + temp_mod_name = 'test_imp_helper_' + decoded_char + test_package_name = 'test_imp_helper_package_' + decoded_char + init_file_name = os.path.join(test_package_name, '__init__.py') + try: + # if the curdir is not in sys.path the test fails when run with + # ./python ./Lib/test/regrtest.py test_imp + sys.path.insert(0, os.curdir) + with open(temp_mod_name + '.py', 'w') as file: + file.write('a = 1\n') + file, filename, info = imp.find_module(temp_mod_name) + self.assertIsNotNone(file) + self.assertTrue(filename[:-3].endswith(temp_mod_name)) + self.assertEqual(info[0], '.py') + self.assertEqual(info[1], 'U') + self.assertEqual(info[2], imp.PY_SOURCE) + + mod = imp.load_module(temp_mod_name, file, filename, info) + self.assertEqual(mod.a, 1) + file.close() + + mod = imp.load_source(temp_mod_name, temp_mod_name + '.py') + self.assertEqual(mod.a, 1) + + mod = imp.load_compiled(temp_mod_name, temp_mod_name + '.pyc') + self.assertEqual(mod.a, 1) + + if not os.path.exists(test_package_name): + os.mkdir(test_package_name) + with open(init_file_name, 'w') as file: + file.write('b = 2\n') + package = imp.load_package(test_package_name, test_package_name) + self.assertEqual(package.b, 2) + finally: + del sys.path[0] + for ext in ('.py', '.pyc', '.pyo'): + support.unlink(temp_mod_name + ext) + support.unlink(init_file_name + ext) + support.rmtree(test_package_name) def test_reload(self): From python-checkins at python.org Sat Mar 6 04:13:33 2010 From: python-checkins at python.org (benjamin.peterson) Date: Sat, 6 Mar 2010 04:13:33 +0100 (CET) Subject: [Python-checkins] r78717 - python/trunk/Doc/library/sys.rst Message-ID: <20100306031333.706D4D6D8@mail.python.org> Author: benjamin.peterson Date: Sat Mar 6 04:13:33 2010 New Revision: 78717 Log: settscdump is definitely an implementation detail Modified: python/trunk/Doc/library/sys.rst Modified: python/trunk/Doc/library/sys.rst ============================================================================== --- python/trunk/Doc/library/sys.rst (original) +++ python/trunk/Doc/library/sys.rst Sat Mar 6 04:13:33 2010 @@ -890,6 +890,11 @@ .. versionadded:: 2.4 + .. impl-detail:: + + This function is intimately bound to CPython implementation details and + thus not likely to be implemented elsewhere. + .. data:: stdin stdout From python-checkins at python.org Sat Mar 6 08:35:20 2010 From: python-checkins at python.org (gregory.p.smith) Date: Sat, 6 Mar 2010 08:35:20 +0100 (CET) Subject: [Python-checkins] r78718 - python/trunk/Lib/test/test_os.py Message-ID: <20100306073520.1C946FAB4@mail.python.org> Author: gregory.p.smith Date: Sat Mar 6 08:35:19 2010 New Revision: 78718 Log: Call setreuid and setregid in a subprocess to avoid altering the test runner's process state. Should fix issue8045. Modified: python/trunk/Lib/test/test_os.py Modified: python/trunk/Lib/test/test_os.py ============================================================================== --- python/trunk/Lib/test/test_os.py (original) +++ python/trunk/Lib/test/test_os.py Sat Mar 6 08:35:19 2010 @@ -642,7 +642,14 @@ self.assertRaises(os.error, os.setreuid, 0, 0) self.assertRaises(OverflowError, os.setreuid, 1<<32, 0) self.assertRaises(OverflowError, os.setreuid, 0, 1<<32) - os.setreuid(-1, -1) # Does nothing, but it needs to accept -1 + + def test_setreuid_neg1(self): + # Needs to accept -1. We run this in a subprocess to avoid + # altering the test runner's process state (issue8045). + import subprocess + subprocess.check_call([ + sys.executable, '-c', + 'import os,sys;os.setreuid(-1,-1);sys.exit(0)']) if hasattr(os, 'setregid'): def test_setregid(self): @@ -650,7 +657,14 @@ self.assertRaises(os.error, os.setregid, 0, 0) self.assertRaises(OverflowError, os.setregid, 1<<32, 0) self.assertRaises(OverflowError, os.setregid, 0, 1<<32) - os.setregid(-1, -1) # Does nothing, but it needs to accept -1 + + def test_setregid_neg1(self): + # Needs to accept -1. We run this in a subprocess to avoid + # altering the test runner's process state (issue8045). + import subprocess + subprocess.check_call([ + sys.executable, '-c', + 'import os,sys;os.setregid(-1,-1);sys.exit(0)']) else: class PosixUidGidTests(unittest.TestCase): pass From python-checkins at python.org Sat Mar 6 09:07:44 2010 From: python-checkins at python.org (florent.xicluna) Date: Sat, 6 Mar 2010 09:07:44 +0100 (CET) Subject: [Python-checkins] r78719 - python/trunk/Lib/test/regrtest.py Message-ID: <20100306080744.B4E01FD7E@mail.python.org> Author: florent.xicluna Date: Sat Mar 6 09:07:44 2010 New Revision: 78719 Log: Keep the test files in the ./build/ subdirectory, if Python is not installed. Remove two hacks which are no longer needed after #7712, because all __file__ attributes are absolute. Modified: python/trunk/Lib/test/regrtest.py Modified: python/trunk/Lib/test/regrtest.py ============================================================================== --- python/trunk/Lib/test/regrtest.py (original) +++ python/trunk/Lib/test/regrtest.py Sat Mar 6 09:07:44 2010 @@ -160,6 +160,7 @@ import unittest import tempfile import imp +import sysconfig # Some times __path__ and __file__ are not absolute (e.g. while running from @@ -404,10 +405,8 @@ fp.close() # Strip .py extensions. - if args: - args = map(removepy, args) - if tests: - tests = map(removepy, tests) + removepy(args) + removepy(tests) stdtests = STDTESTS[:] nottests = NOTTESTS[:] @@ -665,16 +664,15 @@ def findtests(testdir=None, stdtests=STDTESTS, nottests=NOTTESTS): """Return a list of all applicable test modules.""" - if not testdir: testdir = findtestdir() + testdir = findtestdir(testdir) names = os.listdir(testdir) tests = [] + others = set(stdtests + nottests) for name in names: - if name[:5] == "test_" and name[-3:] == os.extsep+"py": - modname = name[:-3] - if modname not in stdtests and modname not in nottests: - tests.append(modname) - tests.sort() - return stdtests + tests + modname, ext = os.path.splitext(name) + if modname[:5] == "test_" and ext == ".py" and modname not in others: + tests.append(modname) + return stdtests + sorted(tests) def runtest(test, verbose, quiet, testdir=None, huntrleaks=False, use_resources=None): @@ -825,8 +823,7 @@ def runtest_inner(test, verbose, quiet, testdir=None, huntrleaks=False): test_support.unload(test) - if not testdir: - testdir = findtestdir() + testdir = findtestdir(testdir) if verbose: capture_stdout = None else: @@ -1054,18 +1051,16 @@ # Collect cyclic trash. gc.collect() -def findtestdir(): - if __name__ == '__main__': - file = sys.argv[0] - else: - file = __file__ - testdir = os.path.dirname(file) or os.curdir - return testdir - -def removepy(name): - if name.endswith(os.extsep + "py"): - name = name[:-3] - return name +def findtestdir(path=None): + return path or os.path.dirname(__file__) or os.curdir + +def removepy(names): + if not names: + return + for idx, name in enumerate(names): + basename, ext = os.path.splitext(name) + if ext == '.py': + names[idx] = basename def count(n, word): if n == 1: @@ -1083,7 +1078,7 @@ from textwrap import fill blanks = ' ' * indent - print fill(' '.join(map(str, x)), width, + print fill(' '.join(str(elt) for elt in x), width, initial_indent=blanks, subsequent_indent=blanks) # Map sys.platform to a string containing the basenames of tests @@ -1510,31 +1505,25 @@ return self.expected if __name__ == '__main__': - # Remove regrtest.py's own directory from the module search path. This - # prevents relative imports from working, and relative imports will screw - # up the testing framework. E.g. if both test.test_support and - # test_support are imported, they will not contain the same globals, and - # much of the testing framework relies on the globals in the - # test.test_support module. - mydir = os.path.abspath(os.path.normpath(os.path.dirname(sys.argv[0]))) - i = len(sys.path) - while i >= 0: - i -= 1 - if os.path.abspath(os.path.normpath(sys.path[i])) == mydir: - del sys.path[i] - - # findtestdir() gets the dirname out of sys.argv[0], so we have to make it - # absolute before changing the CWD. - if sys.argv[0]: - sys.argv[0] = os.path.abspath(sys.argv[0]) + # Simplification for findtestdir(). + assert __file__ == os.path.abspath(sys.argv[0]) + # When tests are run from the Python build directory, it is best practice + # to keep the test files in a subfolder. It eases the cleanup of leftover + # files using command "make distclean". + if sysconfig.is_python_build(): + parent_dir = os.path.join(sysconfig.get_config_var('srcdir'), 'build') + if not os.path.exists(parent_dir): + os.mkdir(parent_dir) + else: + parent_dir = os.path.abspath(tempfile.gettempdir()) # Define a writable temp dir that will be used as cwd while running # the tests. The name of the dir includes the pid to allow parallel # testing (see the -j option). TESTCWD = 'test_python_{}'.format(os.getpid()) - TESTCWD = os.path.abspath(os.path.join(tempfile.gettempdir(), TESTCWD)) + TESTCWD = os.path.join(parent_dir, TESTCWD) # Run the tests in a context manager that temporary changes the CWD to a # temporary and writable directory. If it's not possible to create or From python-checkins at python.org Sat Mar 6 10:11:55 2010 From: python-checkins at python.org (florent.xicluna) Date: Sat, 6 Mar 2010 10:11:55 +0100 (CET) Subject: [Python-checkins] r78720 - python/trunk/Lib/test/regrtest.py Message-ID: <20100306091155.DD407FD36@mail.python.org> Author: florent.xicluna Date: Sat Mar 6 10:11:55 2010 New Revision: 78720 Log: Print platform information to stdout, to help troubleshooting platform-specific failures. Modified: python/trunk/Lib/test/regrtest.py Modified: python/trunk/Lib/test/regrtest.py ============================================================================== --- python/trunk/Lib/test/regrtest.py (original) +++ python/trunk/Lib/test/regrtest.py Sat Mar 6 10:11:55 2010 @@ -160,6 +160,7 @@ import unittest import tempfile import imp +import platform import sysconfig @@ -362,6 +363,9 @@ usage(2, "-T and -j don't go together!") if use_mp and findleaks: usage(2, "-l and -j don't go together!") + if use_mp and max(sys.flags): + # TODO: inherit the environment and the flags + print "Warning: flags and environment variables are ignored with -j option" good = [] bad = [] @@ -369,8 +373,14 @@ resource_denieds = [] environment_changed = [] - if verbose: - print 'The CWD is now', os.getcwd() + if not quiet: + # Print basic platform information + print "== {} {}".format( + platform.python_implementation(), + " ".join(sys.version.split()) + ) + print "== {}".format(platform.platform(aliased=True)) + print "== {}".format(os.getcwd()) if findleaks: try: From python-checkins at python.org Sat Mar 6 10:54:14 2010 From: python-checkins at python.org (florent.xicluna) Date: Sat, 6 Mar 2010 10:54:14 +0100 (CET) Subject: [Python-checkins] r78721 - python/trunk/Lib/test/test_subprocess.py Message-ID: <20100306095414.3EB2AFD72@mail.python.org> Author: florent.xicluna Date: Sat Mar 6 10:54:14 2010 New Revision: 78721 Log: #2777: Apply same recipe on win32, i.e. do not inherit file handles. Modified: python/trunk/Lib/test/test_subprocess.py Modified: python/trunk/Lib/test/test_subprocess.py ============================================================================== --- python/trunk/Lib/test/test_subprocess.py (original) +++ python/trunk/Lib/test/test_subprocess.py Sat Mar 6 10:54:14 2010 @@ -769,21 +769,23 @@ self.assertEqual(rc, 47) def test_send_signal(self): - p = subprocess.Popen([sys.executable, "-c", "input()"]) + # Do not inherit file handles from the parent. + # It should fix failure on some platforms. + p = subprocess.Popen([sys.executable, "-c", "input()"], close_fds=True) self.assertIs(p.poll(), None) p.send_signal(signal.SIGTERM) self.assertNotEqual(p.wait(), 0) def test_kill(self): - p = subprocess.Popen([sys.executable, "-c", "input()"]) + p = subprocess.Popen([sys.executable, "-c", "input()"], close_fds=True) self.assertIs(p.poll(), None) p.kill() self.assertNotEqual(p.wait(), 0) def test_terminate(self): - p = subprocess.Popen([sys.executable, "-c", "input()"]) + p = subprocess.Popen([sys.executable, "-c", "input()"], close_fds=True) self.assertIs(p.poll(), None) p.terminate() From python-checkins at python.org Sat Mar 6 12:01:08 2010 From: python-checkins at python.org (florent.xicluna) Date: Sat, 6 Mar 2010 12:01:08 +0100 (CET) Subject: [Python-checkins] r78722 - in python/trunk: Lib/lib-tk/FixTk.py Misc/NEWS Message-ID: <20100306110108.5320BFE64@mail.python.org> Author: florent.xicluna Date: Sat Mar 6 12:01:08 2010 New Revision: 78722 Log: #6906: TCL_LIBRARY and TK_LIBRARY environment variables should be encoded. Modified: python/trunk/Lib/lib-tk/FixTk.py python/trunk/Misc/NEWS Modified: python/trunk/Lib/lib-tk/FixTk.py ============================================================================== --- python/trunk/Lib/lib-tk/FixTk.py (original) +++ python/trunk/Lib/lib-tk/FixTk.py Sat Mar 6 12:01:08 2010 @@ -19,10 +19,10 @@ return s else: def convert_path(s): - if isinstance(s, str): - s = s.decode("mbcs") + assert isinstance(s, str) # sys.prefix contains only bytes + udir = s.decode("mbcs") hdir = ctypes.windll.kernel32.\ - CreateFileW(s, 0x80, # FILE_READ_ATTRIBUTES + CreateFileW(udir, 0x80, # FILE_READ_ATTRIBUTES 1, # FILE_SHARE_READ None, 3, # OPEN_EXISTING 0x02000000, # FILE_FLAG_BACKUP_SEMANTICS @@ -38,9 +38,9 @@ if res == 0: # Conversion failed (e.g. network location) return s - s = buf[:res] + s = buf[:res].encode("mbcs") # Ignore leading \\?\ - if s.startswith(u"\\\\?\\"): + if s.startswith("\\\\?\\"): s = s[4:] return s Modified: python/trunk/Misc/NEWS ============================================================================== --- python/trunk/Misc/NEWS (original) +++ python/trunk/Misc/NEWS Sat Mar 6 12:01:08 2010 @@ -41,6 +41,8 @@ Library ------- +- Issue #6906: Tk should not set Unicode environment variables on Windows. + - Issue #1054943: Fix unicodedata.normalize('NFC', text) for the Public Review Issue #29 From python-checkins at python.org Sat Mar 6 12:43:55 2010 From: python-checkins at python.org (florent.xicluna) Date: Sat, 6 Mar 2010 12:43:55 +0100 (CET) Subject: [Python-checkins] r78723 - in python/branches/py3k: Lib/test/regrtest.py Message-ID: <20100306114355.C72B2FD7C@mail.python.org> Author: florent.xicluna Date: Sat Mar 6 12:43:55 2010 New Revision: 78723 Log: Merged revisions 78719-78720 via svnmerge from svn+ssh://pythondev at svn.python.org/python/trunk ........ r78719 | florent.xicluna | 2010-03-06 09:07:44 +0100 (sam, 06 mar 2010) | 3 lines Keep the test files in the ./build/ subdirectory, if Python is not installed. Remove two hacks which are no longer needed after #7712, because all __file__ attributes are absolute. ........ r78720 | florent.xicluna | 2010-03-06 10:11:55 +0100 (sam, 06 mar 2010) | 2 lines Print platform information to stdout, to help troubleshooting platform-specific failures. ........ Modified: python/branches/py3k/ (props changed) python/branches/py3k/Lib/test/regrtest.py Modified: python/branches/py3k/Lib/test/regrtest.py ============================================================================== --- python/branches/py3k/Lib/test/regrtest.py (original) +++ python/branches/py3k/Lib/test/regrtest.py Sat Mar 6 12:43:55 2010 @@ -159,6 +159,8 @@ import unittest from inspect import isabstract import tempfile +import platform +import sysconfig # Some times __path__ and __file__ are not absolute (e.g. while running from # Lib/) and, if we change the CWD to run the tests in a temporary dir, some @@ -386,6 +388,9 @@ usage(2, "-T and -j don't go together!") if use_mp and findleaks: usage(2, "-l and -j don't go together!") + if use_mp and max(sys.flags): + # TODO: inherit the environment and the flags + print("Warning: flags and environment variables are ignored with -j option") good = [] bad = [] @@ -393,8 +398,11 @@ resource_denieds = [] environment_changed = [] - if verbose: - print('The CWD is now', os.getcwd()) + if not quiet: + # Print basic platform information + print("==", platform.python_implementation(), *sys.version.split()) + print("== ", platform.platform(aliased=True)) + print("== ", os.getcwd()) if findleaks: try: @@ -429,10 +437,8 @@ fp.close() # Strip .py extensions. - if args: - args = list(map(removepy, args)) - if tests: - tests = list(map(removepy, tests)) + removepy(args) + removepy(tests) stdtests = STDTESTS[:] nottests = NOTTESTS.copy() @@ -698,16 +704,15 @@ def findtests(testdir=None, stdtests=STDTESTS, nottests=NOTTESTS): """Return a list of all applicable test modules.""" - if not testdir: testdir = findtestdir() + testdir = findtestdir(testdir) names = os.listdir(testdir) tests = [] + others = set(stdtests) | nottests for name in names: - if name[:5] == "test_" and name[-3:] == ".py": - modname = name[:-3] - if modname not in stdtests and modname not in nottests: - tests.append(modname) - tests.sort() - return stdtests + tests + modname, ext = os.path.splitext(name) + if modname[:5] == "test_" and ext == ".py" and modname not in others: + tests.append(modname) + return stdtests + sorted(tests) def runtest(test, verbose, quiet, testdir=None, huntrleaks=False, debug=False, use_resources=None): @@ -865,8 +870,7 @@ def runtest_inner(test, verbose, quiet, testdir=None, huntrleaks=False, debug=False): support.unload(test) - if not testdir: - testdir = findtestdir() + testdir = findtestdir(testdir) test_time = 0.0 refleak = False # True if the test leaked references. @@ -1087,18 +1091,16 @@ for i in range(256): s[i:i+1] -def findtestdir(): - if __name__ == '__main__': - file = sys.argv[0] - else: - file = __file__ - testdir = os.path.dirname(file) or os.curdir - return testdir - -def removepy(name): - if name.endswith(".py"): - name = name[:-3] - return name +def findtestdir(path=None): + return path or os.path.dirname(__file__) or os.curdir + +def removepy(names): + if not names: + return + for idx, name in enumerate(names): + basename, ext = os.path.splitext(name) + if ext == '.py': + names[idx] = basename def count(n, word): if n == 1: @@ -1116,7 +1118,7 @@ from textwrap import fill blanks = ' ' * indent - print(fill(' '.join(map(str, x)), width, + print(fill(' '.join(str(elt) for elt in x), width, initial_indent=blanks, subsequent_indent=blanks)) # Map sys.platform to a string containing the basenames of tests @@ -1432,31 +1434,25 @@ return self.expected if __name__ == '__main__': - # Remove regrtest.py's own directory from the module search path. This - # prevents relative imports from working, and relative imports will screw - # up the testing framework. E.g. if both test.support and - # support are imported, they will not contain the same globals, and - # much of the testing framework relies on the globals in the - # test.support module. - mydir = os.path.abspath(os.path.normpath(os.path.dirname(sys.argv[0]))) - i = len(sys.path) - while i >= 0: - i -= 1 - if os.path.abspath(os.path.normpath(sys.path[i])) == mydir: - del sys.path[i] - - # findtestdir() gets the dirname out of sys.argv[0], so we have to make it - # absolute before changing the CWD. - if sys.argv[0]: - sys.argv[0] = os.path.abspath(sys.argv[0]) + # Simplification for findtestdir(). + assert __file__ == os.path.abspath(sys.argv[0]) + # When tests are run from the Python build directory, it is best practice + # to keep the test files in a subfolder. It eases the cleanup of leftover + # files using command "make distclean". + if sysconfig.is_python_build(): + parent_dir = os.path.join(sysconfig.get_config_var('srcdir'), 'build') + if not os.path.exists(parent_dir): + os.mkdir(parent_dir) + else: + parent_dir = os.path.abspath(tempfile.gettempdir()) # Define a writable temp dir that will be used as cwd while running # the tests. The name of the dir includes the pid to allow parallel # testing (see the -j option). TESTCWD = 'test_python_{}'.format(os.getpid()) - TESTCWD = os.path.abspath(os.path.join(tempfile.gettempdir(), TESTCWD)) + TESTCWD = os.path.join(parent_dir, TESTCWD) # Run the tests in a context manager that temporary changes the CWD to a # temporary and writable directory. If it's not possible to create or From python-checkins at python.org Sat Mar 6 12:52:51 2010 From: python-checkins at python.org (florent.xicluna) Date: Sat, 6 Mar 2010 12:52:51 +0100 (CET) Subject: [Python-checkins] r78724 - in python/branches/py3k: Lib/test/test_subprocess.py Message-ID: <20100306115251.BFC3BFDCF@mail.python.org> Author: florent.xicluna Date: Sat Mar 6 12:52:51 2010 New Revision: 78724 Log: Merged revisions 78721 via svnmerge from svn+ssh://pythondev at svn.python.org/python/trunk ........ r78721 | florent.xicluna | 2010-03-06 10:54:14 +0100 (sam, 06 mar 2010) | 2 lines #2777: Apply same recipe on win32, i.e. do not inherit file handles. ........ Modified: python/branches/py3k/ (props changed) python/branches/py3k/Lib/test/test_subprocess.py Modified: python/branches/py3k/Lib/test/test_subprocess.py ============================================================================== --- python/branches/py3k/Lib/test/test_subprocess.py (original) +++ python/branches/py3k/Lib/test/test_subprocess.py Sat Mar 6 12:52:51 2010 @@ -767,21 +767,23 @@ self.assertEqual(rc, 47) def test_send_signal(self): - p = subprocess.Popen([sys.executable, "-c", "input()"]) + # Do not inherit file handles from the parent. + # It should fix failure on some platforms. + p = subprocess.Popen([sys.executable, "-c", "input()"], close_fds=True) self.assertIs(p.poll(), None) p.send_signal(signal.SIGTERM) self.assertNotEqual(p.wait(), 0) def test_kill(self): - p = subprocess.Popen([sys.executable, "-c", "input()"]) + p = subprocess.Popen([sys.executable, "-c", "input()"], close_fds=True) self.assertIs(p.poll(), None) p.kill() self.assertNotEqual(p.wait(), 0) def test_terminate(self): - p = subprocess.Popen([sys.executable, "-c", "input()"]) + p = subprocess.Popen([sys.executable, "-c", "input()"], close_fds=True) self.assertIs(p.poll(), None) p.terminate() From python-checkins at python.org Sat Mar 6 15:04:16 2010 From: python-checkins at python.org (florent.xicluna) Date: Sat, 6 Mar 2010 15:04:16 +0100 (CET) Subject: [Python-checkins] r78725 - python/branches/py3k/Lib/test/test_pydoc.py Message-ID: <20100306140416.4F914FD6A@mail.python.org> Author: florent.xicluna Date: Sat Mar 6 15:04:16 2010 New Revision: 78725 Log: Fix test_pydoc when sys.modules["test"] is first imported using importlib.import_module. Modified: python/branches/py3k/Lib/test/test_pydoc.py Modified: python/branches/py3k/Lib/test/test_pydoc.py ============================================================================== --- python/branches/py3k/Lib/test/test_pydoc.py (original) +++ python/branches/py3k/Lib/test/test_pydoc.py Sat Mar 6 15:04:16 2010 @@ -14,6 +14,10 @@ from test import pydoc_mod +# Just in case sys.modules["test"] has the optional attribute __loader__. +if hasattr(pydoc_mod, "__loader__"): + del pydoc_mod.__loader__ + expected_text_pattern = \ """ NAME From python-checkins at python.org Sat Mar 6 15:38:10 2010 From: python-checkins at python.org (florent.xicluna) Date: Sat, 6 Mar 2010 15:38:10 +0100 (CET) Subject: [Python-checkins] r78726 - python/trunk/Lib/test/regrtest.py Message-ID: <20100306143810.2D02BFD56@mail.python.org> Author: florent.xicluna Date: Sat Mar 6 15:38:09 2010 New Revision: 78726 Log: Backport "test.regrtest -R 2:3" syntax from py3k branch, and other minor adjustments. Modified: python/trunk/Lib/test/regrtest.py Modified: python/trunk/Lib/test/regrtest.py ============================================================================== --- python/trunk/Lib/test/regrtest.py (original) +++ python/trunk/Lib/test/regrtest.py Sat Mar 6 15:38:09 2010 @@ -82,7 +82,7 @@ test is run to let gettotalrefcount settle down, 'run' is the number of times further it is run and 'fname' is the name of the file the reports are written to. These parameters all have defaults (5, 4 and -"reflog.txt" respectively), so the minimal invocation is '-R ::'. +"reflog.txt" respectively), and the minimal invocation is '-R :'. -M runs tests that require an exorbitant amount of memory. These tests typically try to ascertain containers keep working when containing more than @@ -248,9 +248,10 @@ files beginning with test_ will be used. The other default arguments (verbose, quiet, exclude, - single, randomize, findleaks, use_resources, trace, coverdir, print_slow and - random_seed) allow programmers calling main() directly to set the - values that would normally be set by flags on the command line. + single, randomize, findleaks, use_resources, trace, coverdir, + print_slow, and random_seed) allow programmers calling main() + directly to set the values that would normally be set by flags + on the command line. """ test_support.record_original_stdout(sys.stdout) @@ -308,19 +309,19 @@ coverdir = None elif o in ('-R', '--huntrleaks'): huntrleaks = a.split(':') - if len(huntrleaks) != 3: + if len(huntrleaks) not in (2, 3): print a, huntrleaks - usage(2, '-R takes three colon-separated arguments') - if len(huntrleaks[0]) == 0: + usage(2, '-R takes 2 or 3 colon-separated arguments') + if not huntrleaks[0]: huntrleaks[0] = 5 else: huntrleaks[0] = int(huntrleaks[0]) - if len(huntrleaks[1]) == 0: + if not huntrleaks[1]: huntrleaks[1] = 4 else: huntrleaks[1] = int(huntrleaks[1]) - if len(huntrleaks[2]) == 0: - huntrleaks[2] = "reflog.txt" + if len(huntrleaks) == 2 or not huntrleaks[2]: + huntrleaks[2:] = ["reflog.txt"] elif o in ('-M', '--memlimit'): test_support.set_memlimit(a) elif o in ('-u', '--use'): @@ -375,12 +376,10 @@ if not quiet: # Print basic platform information - print "== {} {}".format( - platform.python_implementation(), - " ".join(sys.version.split()) - ) - print "== {}".format(platform.platform(aliased=True)) - print "== {}".format(os.getcwd()) + print "==", platform.python_implementation(), \ + " ".join(sys.version.split()) + print "== ", platform.platform(aliased=True) + print "== ", os.getcwd() if findleaks: try: @@ -419,12 +418,12 @@ removepy(tests) stdtests = STDTESTS[:] - nottests = NOTTESTS[:] + nottests = NOTTESTS.copy() if exclude: for arg in args: if arg in stdtests: stdtests.remove(arg) - nottests[:0] = args + nottests.add(arg) args = [] alltests = findtests(testdir, stdtests, nottests) tests = tests or args or alltests @@ -664,20 +663,20 @@ 'test_unittest', 'test_doctest', 'test_doctest2', - ] +] -NOTTESTS = [ +NOTTESTS = { 'test_support', 'test_future1', 'test_future2', - ] +} def findtests(testdir=None, stdtests=STDTESTS, nottests=NOTTESTS): """Return a list of all applicable test modules.""" testdir = findtestdir(testdir) names = os.listdir(testdir) tests = [] - others = set(stdtests + nottests) + others = set(stdtests) | nottests for name in names: modname, ext = os.path.splitext(name) if modname[:5] == "test_" and ext == ".py" and modname not in others: From python-checkins at python.org Sat Mar 6 15:43:34 2010 From: python-checkins at python.org (florent.xicluna) Date: Sat, 6 Mar 2010 15:43:34 +0100 (CET) Subject: [Python-checkins] r78727 - python/branches/py3k/Lib/test/regrtest.py Message-ID: <20100306144334.2A927F9AF@mail.python.org> Author: florent.xicluna Date: Sat Mar 6 15:43:34 2010 New Revision: 78727 Log: Fix TypeError on usage() when using regrtest switches which are not compatible. Modified: python/branches/py3k/Lib/test/regrtest.py Modified: python/branches/py3k/Lib/test/regrtest.py ============================================================================== --- python/branches/py3k/Lib/test/regrtest.py (original) +++ python/branches/py3k/Lib/test/regrtest.py Sat Mar 6 15:43:34 2010 @@ -162,6 +162,7 @@ import platform import sysconfig + # Some times __path__ and __file__ are not absolute (e.g. while running from # Lib/) and, if we change the CWD to run the tests in a temporary dir, some # imports might fail. This affects only the modules imported before os.chdir(). @@ -385,9 +386,9 @@ if single and fromfile: usage("-s and -f don't go together!") if use_mp and trace: - usage(2, "-T and -j don't go together!") + usage("-T and -j don't go together!") if use_mp and findleaks: - usage(2, "-l and -j don't go together!") + usage("-l and -j don't go together!") if use_mp and max(sys.flags): # TODO: inherit the environment and the flags print("Warning: flags and environment variables are ignored with -j option") From python-checkins at python.org Sat Mar 6 16:12:08 2010 From: python-checkins at python.org (vinay.sajip) Date: Sat, 6 Mar 2010 16:12:08 +0100 (CET) Subject: [Python-checkins] r78728 - in python/trunk/Lib: logging/config.py test/test_logging.py Message-ID: <20100306151208.D4AD9DE78@mail.python.org> Author: vinay.sajip Date: Sat Mar 6 16:12:08 2010 New Revision: 78728 Log: Added schema version test in dictConfig. Modified: python/trunk/Lib/logging/config.py python/trunk/Lib/test/test_logging.py Modified: python/trunk/Lib/logging/config.py ============================================================================== --- python/trunk/Lib/logging/config.py (original) +++ python/trunk/Lib/logging/config.py Sat Mar 6 16:12:08 2010 @@ -484,6 +484,10 @@ """Do the configuration.""" config = self.config + if 'version' not in config: + raise ValueError("dictionary doesn't specify a version") + if config['version'] != 1: + raise ValueError("Unsupported version: %s" % config['version']) incremental = config.pop('incremental', False) EMPTY_DICT = {} logging._acquireLock() Modified: python/trunk/Lib/test/test_logging.py ============================================================================== --- python/trunk/Lib/test/test_logging.py (original) +++ python/trunk/Lib/test/test_logging.py Sat Mar 6 16:12:08 2010 @@ -952,6 +952,7 @@ # config0 is a standard configuration. config0 = { + 'version': 1, 'formatters': { 'form1' : { 'format' : '%(levelname)s ++ %(message)s', @@ -973,6 +974,7 @@ # config1 adds a little to the standard configuration. config1 = { + 'version': 1, 'formatters': { 'form1' : { 'format' : '%(levelname)s ++ %(message)s', @@ -999,6 +1001,7 @@ # config2 has a subtle configuration error that should be reported config2 = { + 'version': 1, 'formatters': { 'form1' : { 'format' : '%(levelname)s ++ %(message)s', @@ -1025,6 +1028,7 @@ #As config1 but with a misspelt level on a handler config2a = { + 'version': 1, 'formatters': { 'form1' : { 'format' : '%(levelname)s ++ %(message)s', @@ -1052,6 +1056,7 @@ #As config1 but with a misspelt level on a logger config2b = { + 'version': 1, 'formatters': { 'form1' : { 'format' : '%(levelname)s ++ %(message)s', @@ -1078,6 +1083,7 @@ # config3 has a less subtle configuration error config3 = { + 'version': 1, 'formatters': { 'form1' : { 'format' : '%(levelname)s ++ %(message)s', @@ -1104,6 +1110,7 @@ # config4 specifies a custom formatter class to be loaded config4 = { + 'version': 1, 'formatters': { 'form1' : { '()' : __name__ + '.ExceptionFormatter', @@ -1126,6 +1133,7 @@ # As config4 but using an actual callable rather than a string config4a = { + 'version': 1, 'formatters': { 'form1' : { '()' : ExceptionFormatter, @@ -1159,6 +1167,7 @@ # config5 specifies a custom handler class to be loaded config5 = { + 'version': 1, 'formatters': { 'form1' : { 'format' : '%(levelname)s ++ %(message)s', @@ -1186,6 +1195,7 @@ # config6 specifies a custom handler class to be loaded # but has bad arguments config6 = { + 'version': 1, 'formatters': { 'form1' : { 'format' : '%(levelname)s ++ %(message)s', @@ -1214,6 +1224,7 @@ #config 7 does not define compiler.parser but defines compiler.lexer #so compiler.parser should be disabled after applying it config7 = { + 'version': 1, 'formatters': { 'form1' : { 'format' : '%(levelname)s ++ %(message)s', @@ -1239,6 +1250,7 @@ } config8 = { + 'version': 1, 'disable_existing_loggers' : False, 'formatters': { 'form1' : { @@ -1267,6 +1279,7 @@ } config9 = { + 'version': 1, 'formatters': { 'form1' : { 'format' : '%(levelname)s ++ %(message)s', @@ -1292,6 +1305,7 @@ } config9a = { + 'version': 1, 'incremental' : True, 'handlers' : { 'hand1' : { @@ -1306,6 +1320,7 @@ } config9b = { + 'version': 1, 'incremental' : True, 'handlers' : { 'hand1' : { @@ -1321,6 +1336,7 @@ #As config1 but with a filter added config10 = { + 'version': 1, 'formatters': { 'form1' : { 'format' : '%(levelname)s ++ %(message)s', @@ -1354,6 +1370,68 @@ #As config1 but using cfg:// references config11 = { + 'version': 1, + 'true_formatters': { + 'form1' : { + 'format' : '%(levelname)s ++ %(message)s', + }, + }, + 'handler_configs': { + 'hand1' : { + 'class' : 'logging.StreamHandler', + 'formatter' : 'form1', + 'level' : 'NOTSET', + 'stream' : 'ext://sys.stdout', + }, + }, + 'formatters' : 'cfg://true_formatters', + 'handlers' : { + 'hand1' : 'cfg://handler_configs[hand1]', + }, + 'loggers' : { + 'compiler.parser' : { + 'level' : 'DEBUG', + 'handlers' : ['hand1'], + }, + }, + 'root' : { + 'level' : 'WARNING', + }, + } + + #As config11 but missing the version key + config12 = { + 'true_formatters': { + 'form1' : { + 'format' : '%(levelname)s ++ %(message)s', + }, + }, + 'handler_configs': { + 'hand1' : { + 'class' : 'logging.StreamHandler', + 'formatter' : 'form1', + 'level' : 'NOTSET', + 'stream' : 'ext://sys.stdout', + }, + }, + 'formatters' : 'cfg://true_formatters', + 'handlers' : { + 'hand1' : 'cfg://handler_configs[hand1]', + }, + 'loggers' : { + 'compiler.parser' : { + 'level' : 'DEBUG', + 'handlers' : ['hand1'], + }, + }, + 'root' : { + 'level' : 'WARNING', + }, + } + + #As config11 but using an unsupported version + config13 = { + 'version': 2, 'true_formatters': { 'form1' : { 'format' : '%(levelname)s ++ %(message)s', @@ -1569,6 +1647,12 @@ def test_config11_ok(self): self.test_config1_ok(self.config11) + def test_config12_failure(self): + self.assertRaises(StandardError, self.apply_config, self.config12) + + def test_config13_failure(self): + self.assertRaises(StandardError, self.apply_config, self.config13) + def setup_via_listener(self, text): port = find_unused_port() t = logging.config.listen(port) From python-checkins at python.org Sat Mar 6 16:24:08 2010 From: python-checkins at python.org (ezio.melotti) Date: Sat, 6 Mar 2010 16:24:08 +0100 (CET) Subject: [Python-checkins] r78729 - in python/branches/py3k: Lib/sre_parse.py Lib/test/test_re.py Misc/NEWS Message-ID: <20100306152408.69688FBE4@mail.python.org> Author: ezio.melotti Date: Sat Mar 6 16:24:08 2010 New Revision: 78729 Log: #6509: fix re.sub to work properly when the pattern, the string, and the replacement were all bytes. Patch by Antoine Pitrou. Modified: python/branches/py3k/Lib/sre_parse.py python/branches/py3k/Lib/test/test_re.py python/branches/py3k/Misc/NEWS Modified: python/branches/py3k/Lib/sre_parse.py ============================================================================== --- python/branches/py3k/Lib/sre_parse.py (original) +++ python/branches/py3k/Lib/sre_parse.py Sat Mar 6 16:24:08 2010 @@ -786,12 +786,18 @@ groups = [] groupsappend = groups.append literals = [None] * len(p) + if isinstance(source, str): + encode = lambda x: x + else: + # The tokenizer implicitly decodes bytes objects as latin-1, we must + # therefore re-encode the final representation. + encode = lambda x: x.encode('latin1') for c, s in p: if c is MARK: groupsappend((i, s)) # literal[i] is already None else: - literals[i] = s + literals[i] = encode(s) i = i + 1 return groups, literals Modified: python/branches/py3k/Lib/test/test_re.py ============================================================================== --- python/branches/py3k/Lib/test/test_re.py (original) +++ python/branches/py3k/Lib/test/test_re.py Sat Mar 6 16:24:08 2010 @@ -717,6 +717,24 @@ self.assertRaises(ValueError, re.compile, '(?a)\w', re.UNICODE) self.assertRaises(ValueError, re.compile, '(?au)\w') + def test_bug_6509(self): + # Replacement strings of both types must parse properly. + # all strings + pat = re.compile('a(\w)') + self.assertEqual(pat.sub('b\\1', 'ac'), 'bc') + pat = re.compile('a(.)') + self.assertEqual(pat.sub('b\\1', 'a\u1234'), 'b\u1234') + pat = re.compile('..') + self.assertEqual(pat.sub(lambda m: 'str', 'a5'), 'str') + + # all bytes + pat = re.compile(b'a(\w)') + self.assertEqual(pat.sub(b'b\\1', b'ac'), b'bc') + pat = re.compile(b'a(.)') + self.assertEqual(pat.sub(b'b\\1', b'a\xCD'), b'b\xCD') + pat = re.compile(b'..') + self.assertEqual(pat.sub(lambda m: b'bytes', b'a5'), b'bytes') + def test_dealloc(self): # issue 3299: check for segfault in debug build import _sre Modified: python/branches/py3k/Misc/NEWS ============================================================================== --- python/branches/py3k/Misc/NEWS (original) +++ python/branches/py3k/Misc/NEWS Sat Mar 6 16:24:08 2010 @@ -268,6 +268,9 @@ Library ------- +- Issue #6509: fix re.sub to work properly when the pattern, the string, and + the replacement were all bytes. Patch by Antoine Pitrou. + - The sqlite3 module was updated to pysqlite 2.6.0. This fixes several obscure bugs and allows loading SQLite extensions from shared libraries. From python-checkins at python.org Sat Mar 6 16:27:04 2010 From: python-checkins at python.org (ezio.melotti) Date: Sat, 6 Mar 2010 16:27:04 +0100 (CET) Subject: [Python-checkins] r78730 - in python/branches/release31-maint: Lib/sre_parse.py Lib/test/test_re.py Misc/NEWS Message-ID: <20100306152704.563C6FBE4@mail.python.org> Author: ezio.melotti Date: Sat Mar 6 16:27:04 2010 New Revision: 78730 Log: Merged revisions 78729 via svnmerge from svn+ssh://pythondev at svn.python.org/python/branches/py3k ........ r78729 | ezio.melotti | 2010-03-06 17:24:08 +0200 (Sat, 06 Mar 2010) | 1 line #6509: fix re.sub to work properly when the pattern, the string, and the replacement were all bytes. Patch by Antoine Pitrou. ........ Modified: python/branches/release31-maint/ (props changed) python/branches/release31-maint/Lib/sre_parse.py python/branches/release31-maint/Lib/test/test_re.py python/branches/release31-maint/Misc/NEWS Modified: python/branches/release31-maint/Lib/sre_parse.py ============================================================================== --- python/branches/release31-maint/Lib/sre_parse.py (original) +++ python/branches/release31-maint/Lib/sre_parse.py Sat Mar 6 16:27:04 2010 @@ -786,12 +786,18 @@ groups = [] groupsappend = groups.append literals = [None] * len(p) + if isinstance(source, str): + encode = lambda x: x + else: + # The tokenizer implicitly decodes bytes objects as latin-1, we must + # therefore re-encode the final representation. + encode = lambda x: x.encode('latin1') for c, s in p: if c is MARK: groupsappend((i, s)) # literal[i] is already None else: - literals[i] = s + literals[i] = encode(s) i = i + 1 return groups, literals Modified: python/branches/release31-maint/Lib/test/test_re.py ============================================================================== --- python/branches/release31-maint/Lib/test/test_re.py (original) +++ python/branches/release31-maint/Lib/test/test_re.py Sat Mar 6 16:27:04 2010 @@ -696,6 +696,24 @@ self.assertRaises(ValueError, re.compile, '(?a)\w', re.UNICODE) self.assertRaises(ValueError, re.compile, '(?au)\w') + def test_bug_6509(self): + # Replacement strings of both types must parse properly. + # all strings + pat = re.compile('a(\w)') + self.assertEqual(pat.sub('b\\1', 'ac'), 'bc') + pat = re.compile('a(.)') + self.assertEqual(pat.sub('b\\1', 'a\u1234'), 'b\u1234') + pat = re.compile('..') + self.assertEqual(pat.sub(lambda m: 'str', 'a5'), 'str') + + # all bytes + pat = re.compile(b'a(\w)') + self.assertEqual(pat.sub(b'b\\1', b'ac'), b'bc') + pat = re.compile(b'a(.)') + self.assertEqual(pat.sub(b'b\\1', b'a\xCD'), b'b\xCD') + pat = re.compile(b'..') + self.assertEqual(pat.sub(lambda m: b'bytes', b'a5'), b'bytes') + def test_dealloc(self): # issue 3299: check for segfault in debug build import _sre Modified: python/branches/release31-maint/Misc/NEWS ============================================================================== --- python/branches/release31-maint/Misc/NEWS (original) +++ python/branches/release31-maint/Misc/NEWS Sat Mar 6 16:27:04 2010 @@ -100,6 +100,9 @@ Library ------- +- Issue #6509: fix re.sub to work properly when the pattern, the string, and + the replacement were all bytes. Patch by Antoine Pitrou. + - Issue #1054943: Fix unicodedata.normalize('NFC', text) for the Public Review Issue #29 From python-checkins at python.org Sat Mar 6 16:56:03 2010 From: python-checkins at python.org (vinay.sajip) Date: Sat, 6 Mar 2010 16:56:03 +0100 (CET) Subject: [Python-checkins] r78731 - python/trunk/Lib/logging/config.py Message-ID: <20100306155603.A98A3F967@mail.python.org> Author: vinay.sajip Date: Sat Mar 6 16:56:03 2010 New Revision: 78731 Log: Added checks for tuples in dictConfig. Modified: python/trunk/Lib/logging/config.py Modified: python/trunk/Lib/logging/config.py ============================================================================== --- python/trunk/Lib/logging/config.py (original) +++ python/trunk/Lib/logging/config.py Sat Mar 6 16:56:03 2010 @@ -474,6 +474,12 @@ setattr(result, name, value) return result + def as_tuple(self, value): + """Utility function which converts lists to tuples.""" + if isinstance(value, list): + value = tuple(value) + return value + class DictConfigurator(BaseConfigurator): """ Configure logging using a dictionary-like object to describe the @@ -688,6 +694,12 @@ except StandardError, e: raise ValueError('Unable to set target handler ' '%r: %s' % (config['target'], e)) + elif issubclass(klass, logging.handlers.SMTPHandler) and\ + 'mailhost' in config: + config['mailhost'] = self.as_tuple(config['mailhost']) + elif issubclass(klass, logging.handlers.SysLogHandler) and\ + 'address' in config: + config['address'] = self.as_tuple(config['address']) factory = klass kwargs = dict([(k, config[k]) for k in config if valid_ident(k)]) try: From python-checkins at python.org Sat Mar 6 18:24:36 2010 From: python-checkins at python.org (florent.xicluna) Date: Sat, 6 Mar 2010 18:24:36 +0100 (CET) Subject: [Python-checkins] r78732 - in python/trunk: Lib/test/regrtest.py Misc/NEWS Message-ID: <20100306172436.A3E44FAD8@mail.python.org> Author: florent.xicluna Date: Sat Mar 6 18:24:36 2010 New Revision: 78732 Log: Do not print the header lines when running a single test. Modified: python/trunk/Lib/test/regrtest.py python/trunk/Misc/NEWS Modified: python/trunk/Lib/test/regrtest.py ============================================================================== --- python/trunk/Lib/test/regrtest.py (original) +++ python/trunk/Lib/test/regrtest.py Sat Mar 6 18:24:36 2010 @@ -374,13 +374,6 @@ resource_denieds = [] environment_changed = [] - if not quiet: - # Print basic platform information - print "==", platform.python_implementation(), \ - " ".join(sys.version.split()) - print "== ", platform.platform(aliased=True) - print "== ", os.getcwd() - if findleaks: try: import gc @@ -425,6 +418,15 @@ stdtests.remove(arg) nottests.add(arg) args = [] + + # For a partial run, we do not need to clutter the output. + if verbose or not (quiet or tests or args): + # Print basic platform information + print "==", platform.python_implementation(), \ + " ".join(sys.version.split()) + print "== ", platform.platform(aliased=True) + print "== ", os.getcwd() + alltests = findtests(testdir, stdtests, nottests) tests = tests or args or alltests if single: Modified: python/trunk/Misc/NEWS ============================================================================== --- python/trunk/Misc/NEWS (original) +++ python/trunk/Misc/NEWS Sat Mar 6 18:24:36 2010 @@ -126,6 +126,9 @@ Tests ----- +- Print platform information when running the whole test suite, or using + the --verbose flag. + - Issue #767675: enable test_pep277 on POSIX platforms with Unicode-friendly filesystem encoding. From python-checkins at python.org Sat Mar 6 18:34:49 2010 From: python-checkins at python.org (florent.xicluna) Date: Sat, 6 Mar 2010 18:34:49 +0100 (CET) Subject: [Python-checkins] r78733 - in python/branches/py3k: Lib/test/regrtest.py Misc/NEWS Message-ID: <20100306173449.1F0ADFB6F@mail.python.org> Author: florent.xicluna Date: Sat Mar 6 18:34:48 2010 New Revision: 78733 Log: Merged revisions 78732 via svnmerge from svn+ssh://pythondev at svn.python.org/python/trunk ........ r78732 | florent.xicluna | 2010-03-06 18:24:36 +0100 (sam, 06 mar 2010) | 2 lines Do not print the header lines when running a single test. ........ Modified: python/branches/py3k/ (props changed) python/branches/py3k/Lib/test/regrtest.py python/branches/py3k/Misc/NEWS Modified: python/branches/py3k/Lib/test/regrtest.py ============================================================================== --- python/branches/py3k/Lib/test/regrtest.py (original) +++ python/branches/py3k/Lib/test/regrtest.py Sat Mar 6 18:34:48 2010 @@ -399,12 +399,6 @@ resource_denieds = [] environment_changed = [] - if not quiet: - # Print basic platform information - print("==", platform.python_implementation(), *sys.version.split()) - print("== ", platform.platform(aliased=True)) - print("== ", os.getcwd()) - if findleaks: try: import gc @@ -449,6 +443,14 @@ stdtests.remove(arg) nottests.add(arg) args = [] + + # For a partial run, we do not need to clutter the output. + if verbose or not (quiet or tests or args): + # Print basic platform information + print("==", platform.python_implementation(), *sys.version.split()) + print("== ", platform.platform(aliased=True)) + print("== ", os.getcwd()) + alltests = findtests(testdir, stdtests, nottests) tests = tests or args or alltests if single: Modified: python/branches/py3k/Misc/NEWS ============================================================================== --- python/branches/py3k/Misc/NEWS (original) +++ python/branches/py3k/Misc/NEWS Sat Mar 6 18:34:48 2010 @@ -845,6 +845,9 @@ Tests ----- +- Print platform information when running the whole test suite, or using + the --verbose flag. + - Issue #767675: enable test_pep277 on POSIX platforms with Unicode-friendly filesystem encoding. From python-checkins at python.org Sat Mar 6 19:07:18 2010 From: python-checkins at python.org (florent.xicluna) Date: Sat, 6 Mar 2010 19:07:18 +0100 (CET) Subject: [Python-checkins] r78734 - in python/trunk/Lib/test: test_genericpath.py test_macpath.py test_ntpath.py test_posixpath.py Message-ID: <20100306180718.E866FFCBF@mail.python.org> Author: florent.xicluna Date: Sat Mar 6 19:07:18 2010 New Revision: 78734 Log: Create test_genericpath.CommonTest and reuse it to test other path modules. Modified: python/trunk/Lib/test/test_genericpath.py python/trunk/Lib/test/test_macpath.py python/trunk/Lib/test/test_ntpath.py python/trunk/Lib/test/test_posixpath.py Modified: python/trunk/Lib/test/test_genericpath.py ============================================================================== --- python/trunk/Lib/test/test_genericpath.py (original) +++ python/trunk/Lib/test/test_genericpath.py Sat Mar 6 19:07:18 2010 @@ -1,38 +1,72 @@ +""" +Tests common to genericpath, macpath, ntpath and posixpath +""" + import unittest from test import test_support import os import genericpath -class AllCommonTest(unittest.TestCase): + +def safe_rmdir(dirname): + try: + os.rmdir(dirname) + except OSError: + pass + + +class GenericTest(unittest.TestCase): + # The path module to be tested + path = genericpath + common_attributes = ['commonprefix', 'getsize', 'getatime', 'getctime', + 'getmtime', 'exists', 'isdir', 'isfile'] + attributes = [] + + def test_no_argument(self): + for attr in self.common_attributes + self.attributes: + with self.assertRaises(TypeError): + getattr(self.path, attr)() + raise self.fail("{}.{}() do not raise a TypeError" + .format(self.path.__name__, attr)) def test_commonprefix(self): self.assertEqual( - genericpath.commonprefix([]), + self.path.commonprefix([]), "" ) self.assertEqual( - genericpath.commonprefix(["/home/swenson/spam", "/home/swen/spam"]), + self.path.commonprefix(["/home/swenson/spam", "/home/swen/spam"]), "/home/swen" ) self.assertEqual( - genericpath.commonprefix(["/home/swen/spam", "/home/swen/eggs"]), + self.path.commonprefix(["/home/swen/spam", "/home/swen/eggs"]), "/home/swen/" ) self.assertEqual( - genericpath.commonprefix(["/home/swen/spam", "/home/swen/spam"]), + self.path.commonprefix(["/home/swen/spam", "/home/swen/spam"]), "/home/swen/spam" ) + testlist = ['', 'abc', 'Xbcd', 'Xb', 'XY', 'abcd', 'aXc', 'abd', 'ab', 'aX', 'abcX'] + for s1 in testlist: + for s2 in testlist: + p = self.path.commonprefix([s1, s2]) + self.assertTrue(s1.startswith(p)) + self.assertTrue(s2.startswith(p)) + if s1 != s2: + n = len(p) + self.assertNotEqual(s1[n:n+1], s2[n:n+1]) + def test_getsize(self): f = open(test_support.TESTFN, "wb") try: f.write("foo") f.close() - self.assertEqual(genericpath.getsize(test_support.TESTFN), 3) + self.assertEqual(self.path.getsize(test_support.TESTFN), 3) finally: if not f.closed: f.close() - os.remove(test_support.TESTFN) + test_support.unlink(test_support.TESTFN) def test_time(self): f = open(test_support.TESTFN, "wb") @@ -48,147 +82,150 @@ self.assertEqual(d, "foobar") self.assertLessEqual( - genericpath.getctime(test_support.TESTFN), - genericpath.getmtime(test_support.TESTFN) + self.path.getctime(test_support.TESTFN), + self.path.getmtime(test_support.TESTFN) ) finally: if not f.closed: f.close() - os.remove(test_support.TESTFN) + test_support.unlink(test_support.TESTFN) def test_exists(self): - self.assertIs(genericpath.exists(test_support.TESTFN), False) + self.assertIs(self.path.exists(test_support.TESTFN), False) f = open(test_support.TESTFN, "wb") try: f.write("foo") f.close() - self.assertIs(genericpath.exists(test_support.TESTFN), True) + self.assertIs(self.path.exists(test_support.TESTFN), True) + if not self.path == genericpath: + self.assertIs(self.path.lexists(test_support.TESTFN), True) finally: if not f.close(): f.close() - try: - os.remove(test_support.TESTFN) - except os.error: - pass - - self.assertRaises(TypeError, genericpath.exists) + test_support.unlink(test_support.TESTFN) def test_isdir(self): - self.assertIs(genericpath.isdir(test_support.TESTFN), False) + self.assertIs(self.path.isdir(test_support.TESTFN), False) f = open(test_support.TESTFN, "wb") try: f.write("foo") f.close() - self.assertIs(genericpath.isdir(test_support.TESTFN), False) + self.assertIs(self.path.isdir(test_support.TESTFN), False) os.remove(test_support.TESTFN) os.mkdir(test_support.TESTFN) - self.assertIs(genericpath.isdir(test_support.TESTFN), True) + self.assertIs(self.path.isdir(test_support.TESTFN), True) os.rmdir(test_support.TESTFN) finally: if not f.close(): f.close() - try: - os.remove(test_support.TESTFN) - except os.error: - pass - try: - os.rmdir(test_support.TESTFN) - except os.error: - pass - - self.assertRaises(TypeError, genericpath.isdir) + test_support.unlink(test_support.TESTFN) + safe_rmdir(test_support.TESTFN) def test_isfile(self): - self.assertIs(genericpath.isfile(test_support.TESTFN), False) + self.assertIs(self.path.isfile(test_support.TESTFN), False) f = open(test_support.TESTFN, "wb") try: f.write("foo") f.close() - self.assertIs(genericpath.isfile(test_support.TESTFN), True) + self.assertIs(self.path.isfile(test_support.TESTFN), True) os.remove(test_support.TESTFN) os.mkdir(test_support.TESTFN) - self.assertIs(genericpath.isfile(test_support.TESTFN), False) + self.assertIs(self.path.isfile(test_support.TESTFN), False) os.rmdir(test_support.TESTFN) finally: if not f.close(): f.close() - try: - os.remove(test_support.TESTFN) - except os.error: - pass - try: - os.rmdir(test_support.TESTFN) - except os.error: - pass - - self.assertRaises(TypeError, genericpath.isdir) - - def test_samefile(self): - f = open(test_support.TESTFN + "1", "wb") - try: - f.write("foo") - f.close() - self.assertIs( - genericpath.samefile( - test_support.TESTFN + "1", - test_support.TESTFN + "1" - ), - True - ) - # If we don't have links, assume that os.stat doesn't return resonable - # inode information and thus, that samefile() doesn't work - if hasattr(os, "symlink"): - os.symlink( - test_support.TESTFN + "1", - test_support.TESTFN + "2" - ) - self.assertIs( - genericpath.samefile( - test_support.TESTFN + "1", - test_support.TESTFN + "2" - ), - True - ) - os.remove(test_support.TESTFN + "2") - f = open(test_support.TESTFN + "2", "wb") - f.write("bar") - f.close() - self.assertIs( - genericpath.samefile( - test_support.TESTFN + "1", - test_support.TESTFN + "2" - ), - False - ) - finally: - if not f.close(): - f.close() - try: - os.remove(test_support.TESTFN + "1") - except os.error: - pass - try: - os.remove(test_support.TESTFN + "2") - except os.error: - pass - - self.assertRaises(TypeError, genericpath.samefile) - - -# XXX at some point this should probably go in some class that contains common -# tests for all test_*path modules. -def _issue3426(self, cwd, abspath): - # Issue 3426: check that abspath retuns unicode when the arg is unicode - # and str when it's str, with both ASCII and non-ASCII cwds - with test_support.temp_cwd(cwd): + test_support.unlink(test_support.TESTFN) + safe_rmdir(test_support.TESTFN) + + +class CommonTest(GenericTest): + # The path module to be tested + path = None + common_attributes = GenericTest.common_attributes + [ + # Properties + 'curdir', 'pardir', 'extsep', 'sep', + 'pathsep', 'defpath', 'altsep', 'devnull', + # Methods + 'normcase', 'splitdrive', 'expandvars', 'normpath', 'abspath', + 'join', 'split', 'splitext', 'isabs', 'basename', 'dirname', + 'lexists', 'islink', 'ismount', 'expanduser', 'normpath', 'realpath', + ] + + def test_normcase(self): + # Check that normcase() is idempotent + p = "FoO/./BaR" + p = self.path.normcase(p) + self.assertEqual(p, self.path.normcase(p)) + + def test_splitdrive(self): + # splitdrive for non-NT paths + self.assertEqual(self.path.splitdrive("/foo/bar"), ("", "/foo/bar")) + self.assertEqual(self.path.splitdrive("foo:bar"), ('', 'foo:bar')) + self.assertEqual(self.path.splitdrive(":foo:bar"), ('', ':foo:bar')) + + def test_expandvars(self): + if self.path.__name__ == 'macpath': + raise unittest.SkipTest('macpath.expandvars is a stub') + with test_support.EnvironmentVarGuard() as env: + env.clear() + env["foo"] = "bar" + env["{foo"] = "baz1" + env["{foo}"] = "baz2" + self.assertEqual(self.path.expandvars("foo"), "foo") + self.assertEqual(self.path.expandvars("$foo bar"), "bar bar") + self.assertEqual(self.path.expandvars("${foo}bar"), "barbar") + self.assertEqual(self.path.expandvars("$[foo]bar"), "$[foo]bar") + self.assertEqual(self.path.expandvars("$bar bar"), "$bar bar") + self.assertEqual(self.path.expandvars("$?bar"), "$?bar") + self.assertEqual(self.path.expandvars("${foo}bar"), "barbar") + self.assertEqual(self.path.expandvars("$foo}bar"), "bar}bar") + self.assertEqual(self.path.expandvars("${foo"), "${foo") + self.assertEqual(self.path.expandvars("${{foo}}"), "baz1}") + self.assertEqual(self.path.expandvars("$foo$foo"), "barbar") + self.assertEqual(self.path.expandvars("$bar$bar"), "$bar$bar") + + def test_abspath(self): + self.assertIn("foo", self.path.abspath("foo")) + + # Abspath returns bytes when the arg is bytes for path in ('', 'foo', 'f\xf2\xf2', '/foo', 'C:\\'): - self.assertIsInstance(abspath(path), str) - for upath in (u'', u'fuu', u'f\xf9\xf9', u'/fuu', u'U:\\'): - self.assertIsInstance(abspath(upath), unicode) + self.assertIsInstance(self.path.abspath(path), str) + + def test_realpath(self): + self.assertIn("foo", self.path.realpath("foo")) + + def test_normpath_issue5827(self): + # Make sure normpath preserves unicode + for path in (u'', u'.', u'/', u'\\', u'///foo/.//bar//'): + self.assertIsInstance(self.path.normpath(path), unicode) + + def test_abspath_issue3426(self): + # Check that abspath returns unicode when the arg is unicode + # with both ASCII and non-ASCII cwds. + for path in (u'', u'fuu', u'f\xf9\xf9', u'/fuu', u'U:\\'): + self.assertIsInstance(self.path.abspath(path), unicode) + + unicwd = u'\xe7w\xf0' + try: + fsencoding = test_support.TESTFN_ENCODING or "ascii" + unicwd.encode(fsencoding) + except (AttributeError, UnicodeEncodeError): + # FS encoding is probably ASCII + pass + else: + with test_support.temp_cwd(unicwd): + for path in (u'', u'fuu', u'f\xf9\xf9', u'/fuu', u'U:\\'): + self.assertIsInstance(self.path.abspath(path), unicode) + + # Test non-ASCII, non-UTF8 bytes in the path. + with test_support.temp_cwd('\xe7w\xf0'): + self.test_abspath() def test_main(): - test_support.run_unittest(AllCommonTest) + test_support.run_unittest(GenericTest) + if __name__=="__main__": test_main() Modified: python/trunk/Lib/test/test_macpath.py ============================================================================== --- python/trunk/Lib/test/test_macpath.py (original) +++ python/trunk/Lib/test/test_macpath.py Sat Mar 6 19:07:18 2010 @@ -1,7 +1,6 @@ import macpath -from test import test_support +from test import test_support, test_genericpath import unittest -import test_genericpath class MacPathTestCase(unittest.TestCase): @@ -9,12 +8,6 @@ def test_abspath(self): self.assertEqual(macpath.abspath("xx:yy"), "xx:yy") - def test_abspath_with_ascii_cwd(self): - test_genericpath._issue3426(self, u'cwd', macpath.abspath) - - def test_abspath_with_nonascii_cwd(self): - test_genericpath._issue3426(self, u'\xe7w\xf0', macpath.abspath) - def test_isabs(self): isabs = macpath.isabs self.assertTrue(isabs("xx:yy")) @@ -46,11 +39,6 @@ self.assertEqual(split(":conky:mountpoint:"), (':conky:mountpoint', '')) - def test_splitdrive(self): - splitdrive = macpath.splitdrive - self.assertEqual(splitdrive("foo:bar"), ('', 'foo:bar')) - self.assertEqual(splitdrive(":foo:bar"), ('', ':foo:bar')) - def test_splitext(self): splitext = macpath.splitext self.assertEqual(splitext(":foo.ext"), (':foo', '.ext')) @@ -67,9 +55,12 @@ self.assertIsInstance(macpath.normpath(path), unicode, 'normpath() returned str instead of unicode') +class MacCommonTest(test_genericpath.CommonTest): + path = macpath + def test_main(): - test_support.run_unittest(MacPathTestCase) + test_support.run_unittest(MacPathTestCase, MacCommonTest) if __name__ == "__main__": Modified: python/trunk/Lib/test/test_ntpath.py ============================================================================== --- python/trunk/Lib/test/test_ntpath.py (original) +++ python/trunk/Lib/test/test_ntpath.py Sat Mar 6 19:07:18 2010 @@ -1,7 +1,7 @@ import ntpath import os from test.test_support import TestFailed -import test.test_support as test_support +from test import test_support, test_genericpath import unittest @@ -123,11 +123,6 @@ tester("ntpath.normpath('C:////a/b')", r'C:\a\b') tester("ntpath.normpath('//machine/share//a/b')", r'\\machine\share\a\b') - # Issue 5827: Make sure normpath preserves unicode - for path in (u'', u'.', u'/', u'\\', u'///foo/.//bar//'): - self.assertIsInstance(ntpath.normpath(path), unicode, - 'normpath() returned str instead of unicode') - def test_expandvars(self): with test_support.EnvironmentVarGuard() as env: env.clear() @@ -169,16 +164,6 @@ else: tester('ntpath.abspath("C:\\")', "C:\\") - # Issue 3426: check that abspath retuns unicode when the arg is - # unicode and str when it's str, with both ASCII and non-ASCII cwds - for cwd in (u'cwd', u'\xe7w\xf0'): - with test_support.temp_cwd(cwd): - for path in ('', 'foo', 'f\xf2\xf2', '/foo', 'C:\\'): - self.assertIsInstance(ntpath.abspath(path), str) - for upath in (u'', u'fuu', u'f\xf9\xf9', u'/fuu', u'U:\\'): - self.assertIsInstance(ntpath.abspath(upath), unicode) - - def test_relpath(self): currentdir = os.path.split(os.getcwd())[-1] tester('ntpath.relpath("a")', 'a') @@ -192,8 +177,13 @@ tester('ntpath.relpath("a", "a")', '.') +class NtCommonTest(test_genericpath.CommonTest): + path = ntpath + attributes = ['relpath', 'splitunc'] + + def test_main(): - test_support.run_unittest(TestNtpath) + test_support.run_unittest(TestNtpath, NtCommonTest) if __name__ == "__main__": Modified: python/trunk/Lib/test/test_posixpath.py ============================================================================== --- python/trunk/Lib/test/test_posixpath.py (original) +++ python/trunk/Lib/test/test_posixpath.py Sat Mar 6 19:07:18 2010 @@ -1,7 +1,5 @@ import unittest -from test import test_support - -import test_genericpath +from test import test_support, test_genericpath import posixpath, os from posixpath import realpath, abspath, dirname, basename @@ -27,26 +25,11 @@ test_support.unlink(test_support.TESTFN + suffix) safe_rmdir(test_support.TESTFN + suffix) - def test_normcase(self): - # Check that normcase() is idempotent - p = "FoO/./BaR" - p = posixpath.normcase(p) - self.assertEqual(p, posixpath.normcase(p)) - - self.assertRaises(TypeError, posixpath.normcase) - def test_join(self): self.assertEqual(posixpath.join("/foo", "bar", "/bar", "baz"), "/bar/baz") self.assertEqual(posixpath.join("/foo", "bar", "baz"), "/foo/bar/baz") self.assertEqual(posixpath.join("/foo/", "bar/", "baz/"), "/foo/bar/baz/") - self.assertRaises(TypeError, posixpath.join) - - def test_splitdrive(self): - self.assertEqual(posixpath.splitdrive("/foo/bar"), ("", "/foo/bar")) - - self.assertRaises(TypeError, posixpath.splitdrive) - def test_split(self): self.assertEqual(posixpath.split("/foo/bar"), ("/foo", "bar")) self.assertEqual(posixpath.split("/"), ("/", "")) @@ -54,8 +37,6 @@ self.assertEqual(posixpath.split("////foo"), ("////", "foo")) self.assertEqual(posixpath.split("//foo//bar"), ("//foo", "bar")) - self.assertRaises(TypeError, posixpath.split) - def splitextTest(self, path, filename, ext): self.assertEqual(posixpath.splitext(path), (filename, ext)) self.assertEqual(posixpath.splitext("/" + path), ("/" + filename, ext)) @@ -77,7 +58,6 @@ self.splitextTest("..", "..", "") self.splitextTest("........", "........", "") self.splitextTest("", "", "") - self.assertRaises(TypeError, posixpath.splitext) def test_isabs(self): self.assertIs(posixpath.isabs(""), False) @@ -86,8 +66,6 @@ self.assertIs(posixpath.isabs("/foo/bar"), True) self.assertIs(posixpath.isabs("foo/bar"), False) - self.assertRaises(TypeError, posixpath.isabs) - def test_basename(self): self.assertEqual(posixpath.basename("/foo/bar"), "bar") self.assertEqual(posixpath.basename("/"), "") @@ -95,8 +73,6 @@ self.assertEqual(posixpath.basename("////foo"), "foo") self.assertEqual(posixpath.basename("//foo//bar"), "bar") - self.assertRaises(TypeError, posixpath.basename) - def test_dirname(self): self.assertEqual(posixpath.dirname("/foo/bar"), "/foo") self.assertEqual(posixpath.dirname("/"), "/") @@ -104,67 +80,6 @@ self.assertEqual(posixpath.dirname("////foo"), "////") self.assertEqual(posixpath.dirname("//foo//bar"), "//foo") - self.assertRaises(TypeError, posixpath.dirname) - - def test_commonprefix(self): - self.assertEqual( - posixpath.commonprefix([]), - "" - ) - self.assertEqual( - posixpath.commonprefix(["/home/swenson/spam", "/home/swen/spam"]), - "/home/swen" - ) - self.assertEqual( - posixpath.commonprefix(["/home/swen/spam", "/home/swen/eggs"]), - "/home/swen/" - ) - self.assertEqual( - posixpath.commonprefix(["/home/swen/spam", "/home/swen/spam"]), - "/home/swen/spam" - ) - - testlist = ['', 'abc', 'Xbcd', 'Xb', 'XY', 'abcd', 'aXc', 'abd', 'ab', 'aX', 'abcX'] - for s1 in testlist: - for s2 in testlist: - p = posixpath.commonprefix([s1, s2]) - self.assertTrue(s1.startswith(p)) - self.assertTrue(s2.startswith(p)) - if s1 != s2: - n = len(p) - self.assertNotEqual(s1[n:n+1], s2[n:n+1]) - - def test_getsize(self): - f = open(test_support.TESTFN, "wb") - try: - f.write("foo") - f.close() - self.assertEqual(posixpath.getsize(test_support.TESTFN), 3) - finally: - if not f.closed: - f.close() - - def test_time(self): - f = open(test_support.TESTFN, "wb") - try: - f.write("foo") - f.close() - f = open(test_support.TESTFN, "ab") - f.write("bar") - f.close() - f = open(test_support.TESTFN, "rb") - d = f.read() - f.close() - self.assertEqual(d, "foobar") - - self.assertLessEqual( - posixpath.getctime(test_support.TESTFN), - posixpath.getmtime(test_support.TESTFN) - ) - finally: - if not f.closed: - f.close() - def test_islink(self): self.assertIs(posixpath.islink(test_support.TESTFN + "1"), False) f = open(test_support.TESTFN + "1", "wb") @@ -183,56 +98,6 @@ if not f.close(): f.close() - self.assertRaises(TypeError, posixpath.islink) - - def test_exists(self): - self.assertIs(posixpath.exists(test_support.TESTFN), False) - f = open(test_support.TESTFN, "wb") - try: - f.write("foo") - f.close() - self.assertIs(posixpath.exists(test_support.TESTFN), True) - self.assertIs(posixpath.lexists(test_support.TESTFN), True) - finally: - if not f.close(): - f.close() - - self.assertRaises(TypeError, posixpath.exists) - - def test_isdir(self): - self.assertIs(posixpath.isdir(test_support.TESTFN), False) - f = open(test_support.TESTFN, "wb") - try: - f.write("foo") - f.close() - self.assertIs(posixpath.isdir(test_support.TESTFN), False) - os.remove(test_support.TESTFN) - os.mkdir(test_support.TESTFN) - self.assertIs(posixpath.isdir(test_support.TESTFN), True) - os.rmdir(test_support.TESTFN) - finally: - if not f.close(): - f.close() - - self.assertRaises(TypeError, posixpath.isdir) - - def test_isfile(self): - self.assertIs(posixpath.isfile(test_support.TESTFN), False) - f = open(test_support.TESTFN, "wb") - try: - f.write("foo") - f.close() - self.assertIs(posixpath.isfile(test_support.TESTFN), True) - os.remove(test_support.TESTFN) - os.mkdir(test_support.TESTFN) - self.assertIs(posixpath.isfile(test_support.TESTFN), False) - os.rmdir(test_support.TESTFN) - finally: - if not f.close(): - f.close() - - self.assertRaises(TypeError, posixpath.isdir) - def test_samefile(self): f = open(test_support.TESTFN + "1", "wb") try: @@ -274,8 +139,6 @@ if not f.close(): f.close() - self.assertRaises(TypeError, posixpath.samefile) - def test_samestat(self): f = open(test_support.TESTFN + "1", "wb") try: @@ -315,13 +178,9 @@ if not f.close(): f.close() - self.assertRaises(TypeError, posixpath.samestat) - def test_ismount(self): self.assertIs(posixpath.ismount("/"), True) - self.assertRaises(TypeError, posixpath.ismount) - def test_expanduser(self): self.assertEqual(posixpath.expanduser("foo"), "foo") try: @@ -343,29 +202,6 @@ env['HOME'] = '/' self.assertEqual(posixpath.expanduser("~"), "/") - self.assertRaises(TypeError, posixpath.expanduser) - - def test_expandvars(self): - with test_support.EnvironmentVarGuard() as env: - env.clear() - env["foo"] = "bar" - env["{foo"] = "baz1" - env["{foo}"] = "baz2" - self.assertEqual(posixpath.expandvars("foo"), "foo") - self.assertEqual(posixpath.expandvars("$foo bar"), "bar bar") - self.assertEqual(posixpath.expandvars("${foo}bar"), "barbar") - self.assertEqual(posixpath.expandvars("$[foo]bar"), "$[foo]bar") - self.assertEqual(posixpath.expandvars("$bar bar"), "$bar bar") - self.assertEqual(posixpath.expandvars("$?bar"), "$?bar") - self.assertEqual(posixpath.expandvars("${foo}bar"), "barbar") - self.assertEqual(posixpath.expandvars("$foo}bar"), "bar}bar") - self.assertEqual(posixpath.expandvars("${foo"), "${foo") - self.assertEqual(posixpath.expandvars("${{foo}}"), "baz1}") - self.assertEqual(posixpath.expandvars("$foo$foo"), "barbar") - self.assertEqual(posixpath.expandvars("$bar$bar"), "$bar$bar") - - self.assertRaises(TypeError, posixpath.expandvars) - def test_normpath(self): self.assertEqual(posixpath.normpath(""), ".") self.assertEqual(posixpath.normpath("/"), "/") @@ -375,27 +211,6 @@ self.assertEqual(posixpath.normpath("///foo/.//bar//.//..//.//baz"), "/foo/baz") self.assertEqual(posixpath.normpath("///..//./foo/.//bar"), "/foo/bar") - # Issue 5827: Make sure normpath preserves unicode - for path in (u'', u'.', u'/', u'\\', u'///foo/.//bar//'): - self.assertIsInstance(posixpath.normpath(path), unicode, - 'normpath() returned str instead of unicode') - - self.assertRaises(TypeError, posixpath.normpath) - - def test_abspath(self): - self.assertIn("foo", posixpath.abspath("foo")) - self.assertRaises(TypeError, posixpath.abspath) - - def test_abspath_with_ascii_cwd(self): - test_genericpath._issue3426(self, u'cwd', posixpath.abspath) - - def test_abspath_with_nonascii_cwd(self): - test_genericpath._issue3426(self, u'\xe7w\xf0', posixpath.abspath) - - def test_realpath(self): - self.assertIn("foo", realpath("foo")) - self.assertRaises(TypeError, posixpath.realpath) - if hasattr(os, "symlink"): def test_realpath_basic(self): # Basic operation. @@ -510,8 +325,15 @@ finally: os.getcwd = real_getcwd + +class PosixCommonTest(test_genericpath.CommonTest): + path = posixpath + attributes = ['relpath', 'samefile', 'sameopenfile', 'samestat'] + + def test_main(): - test_support.run_unittest(PosixPathTest) + test_support.run_unittest(PosixPathTest, PosixCommonTest) + if __name__=="__main__": test_main() From python-checkins at python.org Sat Mar 6 19:52:52 2010 From: python-checkins at python.org (florent.xicluna) Date: Sat, 6 Mar 2010 19:52:52 +0100 (CET) Subject: [Python-checkins] r78735 - in python/trunk: Lib/test/test_genericpath.py Lib/test/test_macpath.py Lib/test/test_ntpath.py Lib/test/test_posixpath.py Misc/NEWS Message-ID: <20100306185252.6E57BE24D@mail.python.org> Author: florent.xicluna Date: Sat Mar 6 19:52:52 2010 New Revision: 78735 Log: Minor tweaking of previous r78734, and add a NEWS entry. Modified: python/trunk/Lib/test/test_genericpath.py python/trunk/Lib/test/test_macpath.py python/trunk/Lib/test/test_ntpath.py python/trunk/Lib/test/test_posixpath.py python/trunk/Misc/NEWS Modified: python/trunk/Lib/test/test_genericpath.py ============================================================================== --- python/trunk/Lib/test/test_genericpath.py (original) +++ python/trunk/Lib/test/test_genericpath.py Sat Mar 6 19:52:52 2010 @@ -17,7 +17,7 @@ class GenericTest(unittest.TestCase): # The path module to be tested - path = genericpath + pathmodule = genericpath common_attributes = ['commonprefix', 'getsize', 'getatime', 'getctime', 'getmtime', 'exists', 'isdir', 'isfile'] attributes = [] @@ -25,32 +25,34 @@ def test_no_argument(self): for attr in self.common_attributes + self.attributes: with self.assertRaises(TypeError): - getattr(self.path, attr)() - raise self.fail("{}.{}() do not raise a TypeError" - .format(self.path.__name__, attr)) + getattr(self.pathmodule, attr)() + raise self.fail("{}.{}() did not raise a TypeError" + .format(self.pathmodule.__name__, attr)) def test_commonprefix(self): + commonprefix = self.pathmodule.commonprefix self.assertEqual( - self.path.commonprefix([]), + commonprefix([]), "" ) self.assertEqual( - self.path.commonprefix(["/home/swenson/spam", "/home/swen/spam"]), + commonprefix(["/home/swenson/spam", "/home/swen/spam"]), "/home/swen" ) self.assertEqual( - self.path.commonprefix(["/home/swen/spam", "/home/swen/eggs"]), + commonprefix(["/home/swen/spam", "/home/swen/eggs"]), "/home/swen/" ) self.assertEqual( - self.path.commonprefix(["/home/swen/spam", "/home/swen/spam"]), + commonprefix(["/home/swen/spam", "/home/swen/spam"]), "/home/swen/spam" ) - testlist = ['', 'abc', 'Xbcd', 'Xb', 'XY', 'abcd', 'aXc', 'abd', 'ab', 'aX', 'abcX'] + testlist = ['', 'abc', 'Xbcd', 'Xb', 'XY', 'abcd', + 'aXc', 'abd', 'ab', 'aX', 'abcX'] for s1 in testlist: for s2 in testlist: - p = self.path.commonprefix([s1, s2]) + p = commonprefix([s1, s2]) self.assertTrue(s1.startswith(p)) self.assertTrue(s2.startswith(p)) if s1 != s2: @@ -62,7 +64,7 @@ try: f.write("foo") f.close() - self.assertEqual(self.path.getsize(test_support.TESTFN), 3) + self.assertEqual(self.pathmodule.getsize(test_support.TESTFN), 3) finally: if not f.closed: f.close() @@ -82,8 +84,8 @@ self.assertEqual(d, "foobar") self.assertLessEqual( - self.path.getctime(test_support.TESTFN), - self.path.getmtime(test_support.TESTFN) + self.pathmodule.getctime(test_support.TESTFN), + self.pathmodule.getmtime(test_support.TESTFN) ) finally: if not f.closed: @@ -91,29 +93,30 @@ test_support.unlink(test_support.TESTFN) def test_exists(self): - self.assertIs(self.path.exists(test_support.TESTFN), False) + self.assertIs(self.pathmodule.exists(test_support.TESTFN), False) f = open(test_support.TESTFN, "wb") try: f.write("foo") f.close() - self.assertIs(self.path.exists(test_support.TESTFN), True) - if not self.path == genericpath: - self.assertIs(self.path.lexists(test_support.TESTFN), True) + self.assertIs(self.pathmodule.exists(test_support.TESTFN), True) + if not self.pathmodule == genericpath: + self.assertIs(self.pathmodule.lexists(test_support.TESTFN), + True) finally: if not f.close(): f.close() test_support.unlink(test_support.TESTFN) def test_isdir(self): - self.assertIs(self.path.isdir(test_support.TESTFN), False) + self.assertIs(self.pathmodule.isdir(test_support.TESTFN), False) f = open(test_support.TESTFN, "wb") try: f.write("foo") f.close() - self.assertIs(self.path.isdir(test_support.TESTFN), False) + self.assertIs(self.pathmodule.isdir(test_support.TESTFN), False) os.remove(test_support.TESTFN) os.mkdir(test_support.TESTFN) - self.assertIs(self.path.isdir(test_support.TESTFN), True) + self.assertIs(self.pathmodule.isdir(test_support.TESTFN), True) os.rmdir(test_support.TESTFN) finally: if not f.close(): @@ -122,15 +125,15 @@ safe_rmdir(test_support.TESTFN) def test_isfile(self): - self.assertIs(self.path.isfile(test_support.TESTFN), False) + self.assertIs(self.pathmodule.isfile(test_support.TESTFN), False) f = open(test_support.TESTFN, "wb") try: f.write("foo") f.close() - self.assertIs(self.path.isfile(test_support.TESTFN), True) + self.assertIs(self.pathmodule.isfile(test_support.TESTFN), True) os.remove(test_support.TESTFN) os.mkdir(test_support.TESTFN) - self.assertIs(self.path.isfile(test_support.TESTFN), False) + self.assertIs(self.pathmodule.isfile(test_support.TESTFN), False) os.rmdir(test_support.TESTFN) finally: if not f.close(): @@ -141,7 +144,7 @@ class CommonTest(GenericTest): # The path module to be tested - path = None + pathmodule = None common_attributes = GenericTest.common_attributes + [ # Properties 'curdir', 'pardir', 'extsep', 'sep', @@ -155,56 +158,59 @@ def test_normcase(self): # Check that normcase() is idempotent p = "FoO/./BaR" - p = self.path.normcase(p) - self.assertEqual(p, self.path.normcase(p)) + p = self.pathmodule.normcase(p) + self.assertEqual(p, self.pathmodule.normcase(p)) def test_splitdrive(self): # splitdrive for non-NT paths - self.assertEqual(self.path.splitdrive("/foo/bar"), ("", "/foo/bar")) - self.assertEqual(self.path.splitdrive("foo:bar"), ('', 'foo:bar')) - self.assertEqual(self.path.splitdrive(":foo:bar"), ('', ':foo:bar')) + splitdrive = self.pathmodule.splitdrive + self.assertEqual(splitdrive("/foo/bar"), ("", "/foo/bar")) + self.assertEqual(splitdrive("foo:bar"), ("", "foo:bar")) + self.assertEqual(splitdrive(":foo:bar"), ("", ":foo:bar")) def test_expandvars(self): - if self.path.__name__ == 'macpath': - raise unittest.SkipTest('macpath.expandvars is a stub') + if self.pathmodule.__name__ == 'macpath': + self.skipTest('macpath.expandvars is a stub') + expandvars = self.pathmodule.expandvars with test_support.EnvironmentVarGuard() as env: env.clear() env["foo"] = "bar" env["{foo"] = "baz1" env["{foo}"] = "baz2" - self.assertEqual(self.path.expandvars("foo"), "foo") - self.assertEqual(self.path.expandvars("$foo bar"), "bar bar") - self.assertEqual(self.path.expandvars("${foo}bar"), "barbar") - self.assertEqual(self.path.expandvars("$[foo]bar"), "$[foo]bar") - self.assertEqual(self.path.expandvars("$bar bar"), "$bar bar") - self.assertEqual(self.path.expandvars("$?bar"), "$?bar") - self.assertEqual(self.path.expandvars("${foo}bar"), "barbar") - self.assertEqual(self.path.expandvars("$foo}bar"), "bar}bar") - self.assertEqual(self.path.expandvars("${foo"), "${foo") - self.assertEqual(self.path.expandvars("${{foo}}"), "baz1}") - self.assertEqual(self.path.expandvars("$foo$foo"), "barbar") - self.assertEqual(self.path.expandvars("$bar$bar"), "$bar$bar") + self.assertEqual(expandvars("foo"), "foo") + self.assertEqual(expandvars("$foo bar"), "bar bar") + self.assertEqual(expandvars("${foo}bar"), "barbar") + self.assertEqual(expandvars("$[foo]bar"), "$[foo]bar") + self.assertEqual(expandvars("$bar bar"), "$bar bar") + self.assertEqual(expandvars("$?bar"), "$?bar") + self.assertEqual(expandvars("${foo}bar"), "barbar") + self.assertEqual(expandvars("$foo}bar"), "bar}bar") + self.assertEqual(expandvars("${foo"), "${foo") + self.assertEqual(expandvars("${{foo}}"), "baz1}") + self.assertEqual(expandvars("$foo$foo"), "barbar") + self.assertEqual(expandvars("$bar$bar"), "$bar$bar") def test_abspath(self): - self.assertIn("foo", self.path.abspath("foo")) + self.assertIn("foo", self.pathmodule.abspath("foo")) # Abspath returns bytes when the arg is bytes for path in ('', 'foo', 'f\xf2\xf2', '/foo', 'C:\\'): - self.assertIsInstance(self.path.abspath(path), str) + self.assertIsInstance(self.pathmodule.abspath(path), str) def test_realpath(self): - self.assertIn("foo", self.path.realpath("foo")) + self.assertIn("foo", self.pathmodule.realpath("foo")) def test_normpath_issue5827(self): # Make sure normpath preserves unicode for path in (u'', u'.', u'/', u'\\', u'///foo/.//bar//'): - self.assertIsInstance(self.path.normpath(path), unicode) + self.assertIsInstance(self.pathmodule.normpath(path), unicode) def test_abspath_issue3426(self): # Check that abspath returns unicode when the arg is unicode # with both ASCII and non-ASCII cwds. + abspath = self.pathmodule.abspath for path in (u'', u'fuu', u'f\xf9\xf9', u'/fuu', u'U:\\'): - self.assertIsInstance(self.path.abspath(path), unicode) + self.assertIsInstance(abspath(path), unicode) unicwd = u'\xe7w\xf0' try: @@ -216,7 +222,7 @@ else: with test_support.temp_cwd(unicwd): for path in (u'', u'fuu', u'f\xf9\xf9', u'/fuu', u'U:\\'): - self.assertIsInstance(self.path.abspath(path), unicode) + self.assertIsInstance(abspath(path), unicode) # Test non-ASCII, non-UTF8 bytes in the path. with test_support.temp_cwd('\xe7w\xf0'): Modified: python/trunk/Lib/test/test_macpath.py ============================================================================== --- python/trunk/Lib/test/test_macpath.py (original) +++ python/trunk/Lib/test/test_macpath.py Sat Mar 6 19:52:52 2010 @@ -56,7 +56,7 @@ 'normpath() returned str instead of unicode') class MacCommonTest(test_genericpath.CommonTest): - path = macpath + pathmodule = macpath def test_main(): Modified: python/trunk/Lib/test/test_ntpath.py ============================================================================== --- python/trunk/Lib/test/test_ntpath.py (original) +++ python/trunk/Lib/test/test_ntpath.py Sat Mar 6 19:52:52 2010 @@ -178,7 +178,7 @@ class NtCommonTest(test_genericpath.CommonTest): - path = ntpath + pathmodule = ntpath attributes = ['relpath', 'splitunc'] Modified: python/trunk/Lib/test/test_posixpath.py ============================================================================== --- python/trunk/Lib/test/test_posixpath.py (original) +++ python/trunk/Lib/test/test_posixpath.py Sat Mar 6 19:52:52 2010 @@ -327,7 +327,7 @@ class PosixCommonTest(test_genericpath.CommonTest): - path = posixpath + pathmodule = posixpath attributes = ['relpath', 'samefile', 'sameopenfile', 'samestat'] Modified: python/trunk/Misc/NEWS ============================================================================== --- python/trunk/Misc/NEWS (original) +++ python/trunk/Misc/NEWS Sat Mar 6 19:52:52 2010 @@ -126,6 +126,9 @@ Tests ----- +- The four path modules (genericpath, macpath, ntpath, posixpath) share a + common TestCase for some tests: test_genericpath.CommonTest. + - Print platform information when running the whole test suite, or using the --verbose flag. From python-checkins at python.org Sat Mar 6 20:43:41 2010 From: python-checkins at python.org (florent.xicluna) Date: Sat, 6 Mar 2010 20:43:41 +0100 (CET) Subject: [Python-checkins] r78736 - python/trunk/Lib/test/test_subprocess.py Message-ID: <20100306194341.8492DFD1D@mail.python.org> Author: florent.xicluna Date: Sat Mar 6 20:43:41 2010 New Revision: 78736 Log: Skip test_send_signal, test_kill, test_terminate on win32 platforms, for 2.7a4 release. Modified: python/trunk/Lib/test/test_subprocess.py Modified: python/trunk/Lib/test/test_subprocess.py ============================================================================== --- python/trunk/Lib/test/test_subprocess.py (original) +++ python/trunk/Lib/test/test_subprocess.py Sat Mar 6 20:43:41 2010 @@ -768,24 +768,30 @@ ' -c "import sys; sys.exit(47)"') self.assertEqual(rc, 47) + @unittest.skip("It fails on some win32 platforms. See issue #2777") def test_send_signal(self): - # Do not inherit file handles from the parent. - # It should fix failure on some platforms. - p = subprocess.Popen([sys.executable, "-c", "input()"], close_fds=True) + # Redirect the stdin file handle. + # It should fix failure on some win32 platforms. + p = subprocess.Popen([sys.executable, "-c", "input()"], + stdin=subprocess.PIPE) self.assertIs(p.poll(), None) p.send_signal(signal.SIGTERM) self.assertNotEqual(p.wait(), 0) + @unittest.skip("It fails on some win32 platforms. See issue #2777") def test_kill(self): - p = subprocess.Popen([sys.executable, "-c", "input()"], close_fds=True) + p = subprocess.Popen([sys.executable, "-c", "input()"], + stdin=subprocess.PIPE) self.assertIs(p.poll(), None) p.kill() self.assertNotEqual(p.wait(), 0) + @unittest.skip("It fails on some win32 platforms. See issue #2777") def test_terminate(self): - p = subprocess.Popen([sys.executable, "-c", "input()"], close_fds=True) + p = subprocess.Popen([sys.executable, "-c", "input()"], + stdin=subprocess.PIPE) self.assertIs(p.poll(), None) p.terminate() From python-checkins at python.org Sat Mar 6 21:28:33 2010 From: python-checkins at python.org (benjamin.peterson) Date: Sat, 6 Mar 2010 21:28:33 +0100 (CET) Subject: [Python-checkins] r78737 - in python/branches/release31-maint: Include/patchlevel.h Lib/distutils/__init__.py Lib/idlelib/idlever.py Misc/NEWS Misc/RPM/python-3.1.spec README Message-ID: <20100306202833.91A69EE989@mail.python.org> Author: benjamin.peterson Date: Sat Mar 6 21:28:33 2010 New Revision: 78737 Log: bump to 3.1.2rc1 Modified: python/branches/release31-maint/Include/patchlevel.h python/branches/release31-maint/Lib/distutils/__init__.py python/branches/release31-maint/Lib/idlelib/idlever.py python/branches/release31-maint/Misc/NEWS python/branches/release31-maint/Misc/RPM/python-3.1.spec python/branches/release31-maint/README Modified: python/branches/release31-maint/Include/patchlevel.h ============================================================================== --- python/branches/release31-maint/Include/patchlevel.h (original) +++ python/branches/release31-maint/Include/patchlevel.h Sat Mar 6 21:28:33 2010 @@ -18,12 +18,12 @@ /*--start constants--*/ #define PY_MAJOR_VERSION 3 #define PY_MINOR_VERSION 1 -#define PY_MICRO_VERSION 1 -#define PY_RELEASE_LEVEL PY_RELEASE_LEVEL_FINAL -#define PY_RELEASE_SERIAL 0 +#define PY_MICRO_VERSION 2 +#define PY_RELEASE_LEVEL PY_RELEASE_LEVEL_GAMMA +#define PY_RELEASE_SERIAL 1 /* Version as a string */ -#define PY_VERSION "3.1.1+" +#define PY_VERSION "3.1.2rc1" /*--end constants--*/ /* Subversion Revision number of this file (not of the repository) */ Modified: python/branches/release31-maint/Lib/distutils/__init__.py ============================================================================== --- python/branches/release31-maint/Lib/distutils/__init__.py (original) +++ python/branches/release31-maint/Lib/distutils/__init__.py Sat Mar 6 21:28:33 2010 @@ -15,5 +15,5 @@ # Updated automatically by the Python release process. # #--start constants-- -__version__ = "3.1.1" +__version__ = "3.1.2rc1" #--end constants-- Modified: python/branches/release31-maint/Lib/idlelib/idlever.py ============================================================================== --- python/branches/release31-maint/Lib/idlelib/idlever.py (original) +++ python/branches/release31-maint/Lib/idlelib/idlever.py Sat Mar 6 21:28:33 2010 @@ -1 +1 @@ -IDLE_VERSION = "3.1.1" +IDLE_VERSION = "3.1.2rc1" Modified: python/branches/release31-maint/Misc/NEWS ============================================================================== --- python/branches/release31-maint/Misc/NEWS (original) +++ python/branches/release31-maint/Misc/NEWS Sat Mar 6 21:28:33 2010 @@ -4,10 +4,10 @@ (editors: check NEWS.help for information about editing NEWS using ReST.) -What's New in Python 3.1.2? -=========================== +What's New in Python 3.1.2 release candidate 1? +=============================================== -*Release date: 20xx-xx-xx* +*Release date: 2010-03-06* Core and Builtins ----------------- Modified: python/branches/release31-maint/Misc/RPM/python-3.1.spec ============================================================================== --- python/branches/release31-maint/Misc/RPM/python-3.1.spec (original) +++ python/branches/release31-maint/Misc/RPM/python-3.1.spec Sat Mar 6 21:28:33 2010 @@ -34,7 +34,7 @@ %define name python #--start constants-- -%define version 3.1.1 +%define version 3.1.2rc1 %define libver 3.1 #--end constants-- %define release 1pydotorg Modified: python/branches/release31-maint/README ============================================================================== --- python/branches/release31-maint/README (original) +++ python/branches/release31-maint/README Sat Mar 6 21:28:33 2010 @@ -1,5 +1,5 @@ -This is Python version 3.1.1 -============================ +This is Python version 3.1.2 Release Candidate 1 +================================================ Copyright (c) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010 Python Software Foundation. From python-checkins at python.org Sat Mar 6 21:34:16 2010 From: python-checkins at python.org (benjamin.peterson) Date: Sat, 6 Mar 2010 21:34:16 +0100 (CET) Subject: [Python-checkins] r78738 - in python/trunk: Include/patchlevel.h Lib/distutils/__init__.py Lib/idlelib/idlever.py Misc/NEWS Misc/RPM/python-2.7.spec README Message-ID: <20100306203416.14085FBF3@mail.python.org> Author: benjamin.peterson Date: Sat Mar 6 21:34:14 2010 New Revision: 78738 Log: bump version to 2.7a4 Modified: python/trunk/Include/patchlevel.h python/trunk/Lib/distutils/__init__.py python/trunk/Lib/idlelib/idlever.py python/trunk/Misc/NEWS python/trunk/Misc/RPM/python-2.7.spec python/trunk/README Modified: python/trunk/Include/patchlevel.h ============================================================================== --- python/trunk/Include/patchlevel.h (original) +++ python/trunk/Include/patchlevel.h Sat Mar 6 21:34:14 2010 @@ -24,10 +24,10 @@ #define PY_MINOR_VERSION 7 #define PY_MICRO_VERSION 0 #define PY_RELEASE_LEVEL PY_RELEASE_LEVEL_ALPHA -#define PY_RELEASE_SERIAL 3 +#define PY_RELEASE_SERIAL 4 /* Version as a string */ -#define PY_VERSION "2.7a3+" +#define PY_VERSION "2.7a4" /*--end constants--*/ /* Subversion Revision number of this file (not of the repository) */ Modified: python/trunk/Lib/distutils/__init__.py ============================================================================== --- python/trunk/Lib/distutils/__init__.py (original) +++ python/trunk/Lib/distutils/__init__.py Sat Mar 6 21:34:14 2010 @@ -15,5 +15,5 @@ # Updated automatically by the Python release process. # #--start constants-- -__version__ = "2.7a3" +__version__ = "2.7a4" #--end constants-- Modified: python/trunk/Lib/idlelib/idlever.py ============================================================================== --- python/trunk/Lib/idlelib/idlever.py (original) +++ python/trunk/Lib/idlelib/idlever.py Sat Mar 6 21:34:14 2010 @@ -1 +1 @@ -IDLE_VERSION = "2.7a3" +IDLE_VERSION = "2.7a4" Modified: python/trunk/Misc/NEWS ============================================================================== --- python/trunk/Misc/NEWS (original) +++ python/trunk/Misc/NEWS Sat Mar 6 21:34:14 2010 @@ -7,7 +7,7 @@ What's New in Python 2.7 alpha 4? ================================= -*Release date: XXXX-XX-XX* +*Release date: 2010-03-06* Core and Builtins ----------------- Modified: python/trunk/Misc/RPM/python-2.7.spec ============================================================================== --- python/trunk/Misc/RPM/python-2.7.spec (original) +++ python/trunk/Misc/RPM/python-2.7.spec Sat Mar 6 21:34:14 2010 @@ -39,7 +39,7 @@ %define name python #--start constants-- -%define version 2.7a3 +%define version 2.7a4 %define libver 2.7 #--end constants-- %define release 1pydotorg Modified: python/trunk/README ============================================================================== --- python/trunk/README (original) +++ python/trunk/README Sat Mar 6 21:34:14 2010 @@ -1,4 +1,4 @@ -This is Python version 2.7 alpha 3 +This is Python version 2.7 alpha 4 ================================== Copyright (c) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010 From python-checkins at python.org Sat Mar 6 21:34:24 2010 From: python-checkins at python.org (benjamin.peterson) Date: Sat, 6 Mar 2010 21:34:24 +0100 (CET) Subject: [Python-checkins] r78739 - in python/branches/py3k: Lib/test/test_os.py Message-ID: <20100306203424.907C1EE9B4@mail.python.org> Author: benjamin.peterson Date: Sat Mar 6 21:34:24 2010 New Revision: 78739 Log: Merged revisions 78718 via svnmerge from svn+ssh://pythondev at svn.python.org/python/trunk ........ r78718 | gregory.p.smith | 2010-03-06 01:35:19 -0600 (Sat, 06 Mar 2010) | 3 lines Call setreuid and setregid in a subprocess to avoid altering the test runner's process state. Should fix issue8045. ........ Modified: python/branches/py3k/ (props changed) python/branches/py3k/Lib/test/test_os.py Modified: python/branches/py3k/Lib/test/test_os.py ============================================================================== --- python/branches/py3k/Lib/test/test_os.py (original) +++ python/branches/py3k/Lib/test/test_os.py Sat Mar 6 21:34:24 2010 @@ -738,7 +738,14 @@ self.assertRaises(os.error, os.setreuid, 0, 0) self.assertRaises(OverflowError, os.setreuid, 1<<32, 0) self.assertRaises(OverflowError, os.setreuid, 0, 1<<32) - os.setreuid(-1, -1) # Does nothing, but it needs to accept -1 + + def test_setreuid_neg1(self): + # Needs to accept -1. We run this in a subprocess to avoid + # altering the test runner's process state (issue8045). + import subprocess + subprocess.check_call([ + sys.executable, '-c', + 'import os,sys;os.setreuid(-1,-1);sys.exit(0)']) if hasattr(os, 'setregid'): def test_setregid(self): @@ -746,7 +753,14 @@ self.assertRaises(os.error, os.setregid, 0, 0) self.assertRaises(OverflowError, os.setregid, 1<<32, 0) self.assertRaises(OverflowError, os.setregid, 0, 1<<32) - os.setregid(-1, -1) # Does nothing, but it needs to accept -1 + + def test_setregid_neg1(self): + # Needs to accept -1. We run this in a subprocess to avoid + # altering the test runner's process state (issue8045). + import subprocess + subprocess.check_call([ + sys.executable, '-c', + 'import os,sys;os.setregid(-1,-1);sys.exit(0)']) @unittest.skipIf(sys.platform == 'darwin', "tests don't apply to OS X") class Pep383Tests(unittest.TestCase): From python-checkins at python.org Sat Mar 6 21:37:04 2010 From: python-checkins at python.org (benjamin.peterson) Date: Sat, 6 Mar 2010 21:37:04 +0100 (CET) Subject: [Python-checkins] r78740 - python/tags/r27a4 Message-ID: <20100306203704.1BEF8FBF3@mail.python.org> Author: benjamin.peterson Date: Sat Mar 6 21:37:03 2010 New Revision: 78740 Log: tag 2.7 alpha 4 Added: python/tags/r27a4/ - copied from r78739, /python/trunk/ From python-checkins at python.org Sat Mar 6 21:37:32 2010 From: python-checkins at python.org (benjamin.peterson) Date: Sat, 6 Mar 2010 21:37:32 +0100 (CET) Subject: [Python-checkins] r78741 - in python/branches/release31-maint: Lib/test/test_os.py Message-ID: <20100306203732.6AB3EFABD@mail.python.org> Author: benjamin.peterson Date: Sat Mar 6 21:37:32 2010 New Revision: 78741 Log: Merged revisions 78739 via svnmerge from svn+ssh://pythondev at svn.python.org/python/branches/py3k ................ r78739 | benjamin.peterson | 2010-03-06 14:34:24 -0600 (Sat, 06 Mar 2010) | 10 lines Merged revisions 78718 via svnmerge from svn+ssh://pythondev at svn.python.org/python/trunk ........ r78718 | gregory.p.smith | 2010-03-06 01:35:19 -0600 (Sat, 06 Mar 2010) | 3 lines Call setreuid and setregid in a subprocess to avoid altering the test runner's process state. Should fix issue8045. ........ ................ Modified: python/branches/release31-maint/ (props changed) python/branches/release31-maint/Lib/test/test_os.py Modified: python/branches/release31-maint/Lib/test/test_os.py ============================================================================== --- python/branches/release31-maint/Lib/test/test_os.py (original) +++ python/branches/release31-maint/Lib/test/test_os.py Sat Mar 6 21:37:32 2010 @@ -717,7 +717,14 @@ self.assertRaises(os.error, os.setreuid, 0, 0) self.assertRaises(OverflowError, os.setreuid, 1<<32, 0) self.assertRaises(OverflowError, os.setreuid, 0, 1<<32) - os.setreuid(-1, -1) # Does nothing, but it needs to accept -1 + + def test_setreuid_neg1(self): + # Needs to accept -1. We run this in a subprocess to avoid + # altering the test runner's process state (issue8045). + import subprocess + subprocess.check_call([ + sys.executable, '-c', + 'import os,sys;os.setreuid(-1,-1);sys.exit(0)']) if hasattr(os, 'setregid'): def test_setregid(self): @@ -725,7 +732,14 @@ self.assertRaises(os.error, os.setregid, 0, 0) self.assertRaises(OverflowError, os.setregid, 1<<32, 0) self.assertRaises(OverflowError, os.setregid, 0, 1<<32) - os.setregid(-1, -1) # Does nothing, but it needs to accept -1 + + def test_setregid_neg1(self): + # Needs to accept -1. We run this in a subprocess to avoid + # altering the test runner's process state (issue8045). + import subprocess + subprocess.check_call([ + sys.executable, '-c', + 'import os,sys;os.setregid(-1,-1);sys.exit(0)']) @unittest.skipIf(sys.platform == 'darwin', "tests don't apply to OS X") class Pep383Tests(unittest.TestCase): From python-checkins at python.org Sat Mar 6 21:40:49 2010 From: python-checkins at python.org (benjamin.peterson) Date: Sat, 6 Mar 2010 21:40:49 +0100 (CET) Subject: [Python-checkins] r78742 - python/tags/r312rc1 Message-ID: <20100306204049.9B85BC5BB@mail.python.org> Author: benjamin.peterson Date: Sat Mar 6 21:40:49 2010 New Revision: 78742 Log: tagging 3.1.2 release candidate Added: python/tags/r312rc1/ - copied from r78741, /python/branches/release31-maint/ From python-checkins at python.org Sat Mar 6 23:44:07 2010 From: python-checkins at python.org (benjamin.peterson) Date: Sat, 6 Mar 2010 23:44:07 +0100 (CET) Subject: [Python-checkins] r78743 - in python/trunk: Include/patchlevel.h Misc/NEWS Message-ID: <20100306224407.37663FCFC@mail.python.org> Author: benjamin.peterson Date: Sat Mar 6 23:44:07 2010 New Revision: 78743 Log: post release update Modified: python/trunk/Include/patchlevel.h python/trunk/Misc/NEWS Modified: python/trunk/Include/patchlevel.h ============================================================================== --- python/trunk/Include/patchlevel.h (original) +++ python/trunk/Include/patchlevel.h Sat Mar 6 23:44:07 2010 @@ -27,7 +27,7 @@ #define PY_RELEASE_SERIAL 4 /* Version as a string */ -#define PY_VERSION "2.7a4" +#define PY_VERSION "2.7a4+" /*--end constants--*/ /* Subversion Revision number of this file (not of the repository) */ Modified: python/trunk/Misc/NEWS ============================================================================== --- python/trunk/Misc/NEWS (original) +++ python/trunk/Misc/NEWS Sat Mar 6 23:44:07 2010 @@ -4,6 +4,18 @@ (editors: check NEWS.help for information about editing NEWS using ReST.) +What's New in Python 2.7 beta 1? +================================ + +*Release date: XXXX-XX-XX* + +Core and Builtins +----------------- + +Library +------- + + What's New in Python 2.7 alpha 4? ================================= From python-checkins at python.org Sat Mar 6 23:45:54 2010 From: python-checkins at python.org (benjamin.peterson) Date: Sat, 6 Mar 2010 23:45:54 +0100 (CET) Subject: [Python-checkins] r78744 - in python/branches/release31-maint: Include/patchlevel.h Misc/NEWS Message-ID: <20100306224554.1B04DFDB8@mail.python.org> Author: benjamin.peterson Date: Sat Mar 6 23:45:53 2010 New Revision: 78744 Log: start working towards 3.1.2 final Modified: python/branches/release31-maint/Include/patchlevel.h python/branches/release31-maint/Misc/NEWS Modified: python/branches/release31-maint/Include/patchlevel.h ============================================================================== --- python/branches/release31-maint/Include/patchlevel.h (original) +++ python/branches/release31-maint/Include/patchlevel.h Sat Mar 6 23:45:53 2010 @@ -23,7 +23,7 @@ #define PY_RELEASE_SERIAL 1 /* Version as a string */ -#define PY_VERSION "3.1.2rc1" +#define PY_VERSION "3.1.2rc1+" /*--end constants--*/ /* Subversion Revision number of this file (not of the repository) */ Modified: python/branches/release31-maint/Misc/NEWS ============================================================================== --- python/branches/release31-maint/Misc/NEWS (original) +++ python/branches/release31-maint/Misc/NEWS Sat Mar 6 23:45:53 2010 @@ -4,6 +4,18 @@ (editors: check NEWS.help for information about editing NEWS using ReST.) +What's New in Python 3.1.2? +=========================== + +*Release date: XXXX-XX-XX* + +Core and Builtins +----------------- + +Library +------- + + What's New in Python 3.1.2 release candidate 1? =============================================== From python-checkins at python.org Sat Mar 6 23:49:30 2010 From: python-checkins at python.org (benjamin.peterson) Date: Sat, 6 Mar 2010 23:49:30 +0100 (CET) Subject: [Python-checkins] r78745 - python/branches/py3k Message-ID: <20100306224930.493C1FE54@mail.python.org> Author: benjamin.peterson Date: Sat Mar 6 23:49:30 2010 New Revision: 78745 Log: Blocked revisions 78738,78743 via svnmerge ........ r78738 | benjamin.peterson | 2010-03-06 14:34:14 -0600 (Sat, 06 Mar 2010) | 1 line bump version to 2.7a4 ........ r78743 | benjamin.peterson | 2010-03-06 16:44:07 -0600 (Sat, 06 Mar 2010) | 1 line post release update ........ Modified: python/branches/py3k/ (props changed) From python-checkins at python.org Sun Mar 7 01:00:37 2010 From: python-checkins at python.org (benjamin.peterson) Date: Sun, 7 Mar 2010 01:00:37 +0100 (CET) Subject: [Python-checkins] r78746 - python/trunk/Python/ceval.c Message-ID: <20100307000037.2629FFE4C@mail.python.org> Author: benjamin.peterson Date: Sun Mar 7 01:00:37 2010 New Revision: 78746 Log: more specific exception for wrong kind of raise #8082 Modified: python/trunk/Python/ceval.c Modified: python/trunk/Python/ceval.c ============================================================================== --- python/trunk/Python/ceval.c (original) +++ python/trunk/Python/ceval.c Sun Mar 7 01:00:37 2010 @@ -3539,8 +3539,9 @@ /* Not something you can raise. You get an exception anyway, just not what you specified :-) */ PyErr_Format(PyExc_TypeError, - "exceptions must be classes or instances, not %s", - type->ob_type->tp_name); + "exceptions must be old-style classes or " + "derived from BaseException, not %s", + type->ob_type->tp_name); goto raise_error; } From python-checkins at python.org Sun Mar 7 01:03:46 2010 From: python-checkins at python.org (benjamin.peterson) Date: Sun, 7 Mar 2010 01:03:46 +0100 (CET) Subject: [Python-checkins] r78747 - python/branches/py3k Message-ID: <20100307000346.5BB7FFE69@mail.python.org> Author: benjamin.peterson Date: Sun Mar 7 01:03:46 2010 New Revision: 78747 Log: Blocked revisions 78746 via svnmerge ........ r78746 | benjamin.peterson | 2010-03-06 18:00:37 -0600 (Sat, 06 Mar 2010) | 1 line more specific exception for wrong kind of raise #8082 ........ Modified: python/branches/py3k/ (props changed) From solipsis at pitrou.net Sun Mar 7 01:03:50 2010 From: solipsis at pitrou.net (solipsis at pitrou.net) Date: Sun, 7 Mar 2010 01:03:50 +0100 (CET) Subject: [Python-checkins] Daily py3k reference leaks (r78739): sum=0 Message-ID: <20100307000350.629421770A@ns6635.ovh.net> py3k results for svn r78739 (hg cset cdc6ea3a743f) -------------------------------------------------- Command line was: ['./python', '-m', 'test.regrtest', '-uall', '-R', '3:3:/home/antoine/py3k/refleaks/reflog5mqugt', '-x', 'test_httpservers'] From python-checkins at python.org Sun Mar 7 01:07:45 2010 From: python-checkins at python.org (benjamin.peterson) Date: Sun, 7 Mar 2010 01:07:45 +0100 (CET) Subject: [Python-checkins] r78748 - in python/branches/release26-maint: Python/ceval.c Message-ID: <20100307000745.F1CE2DCD3@mail.python.org> Author: benjamin.peterson Date: Sun Mar 7 01:07:45 2010 New Revision: 78748 Log: Merged revisions 78746 via svnmerge from svn+ssh://pythondev at svn.python.org/python/trunk ........ r78746 | benjamin.peterson | 2010-03-06 18:00:37 -0600 (Sat, 06 Mar 2010) | 1 line more specific exception for wrong kind of raise #8082 ........ Modified: python/branches/release26-maint/ (props changed) python/branches/release26-maint/Python/ceval.c Modified: python/branches/release26-maint/Python/ceval.c ============================================================================== --- python/branches/release26-maint/Python/ceval.c (original) +++ python/branches/release26-maint/Python/ceval.c Sun Mar 7 01:07:45 2010 @@ -3260,8 +3260,9 @@ /* Not something you can raise. You get an exception anyway, just not what you specified :-) */ PyErr_Format(PyExc_TypeError, - "exceptions must be classes or instances, not %s", - type->ob_type->tp_name); + "exceptions must be old-style classes or " + "derived from BaseException, not %s", + type->ob_type->tp_name); goto raise_error; } From python-checkins at python.org Sun Mar 7 01:29:45 2010 From: python-checkins at python.org (benjamin.peterson) Date: Sun, 7 Mar 2010 01:29:45 +0100 (CET) Subject: [Python-checkins] r78749 - in python/trunk/Lib: argparse.py test/test_argparse.py Message-ID: <20100307002945.137BAFB42@mail.python.org> Author: benjamin.peterson Date: Sun Mar 7 01:29:44 2010 New Revision: 78749 Log: eliminate py3k warnings in argparse Modified: python/trunk/Lib/argparse.py python/trunk/Lib/test/test_argparse.py Modified: python/trunk/Lib/argparse.py ============================================================================== --- python/trunk/Lib/argparse.py (original) +++ python/trunk/Lib/argparse.py Sun Mar 7 01:29:44 2010 @@ -1143,6 +1143,8 @@ for name in kwargs: setattr(self, name, kwargs[name]) + __hash__ = None + def __eq__(self, other): return vars(self) == vars(other) Modified: python/trunk/Lib/test/test_argparse.py ============================================================================== --- python/trunk/Lib/test/test_argparse.py (original) +++ python/trunk/Lib/test/test_argparse.py Sun Mar 7 01:29:44 2010 @@ -73,6 +73,8 @@ kwarg_str = ', '.join(['%s=%r' % tup for tup in sorted_items]) return '%s(%s)' % (type(self).__name__, kwarg_str) + __hash__ = None + def __eq__(self, other): return vars(self) == vars(other) @@ -1383,6 +1385,8 @@ def __init__(self, name): self.name = name + __hash__ = None + def __eq__(self, other): if other in self.seen: text = self.seen[other] @@ -1446,6 +1450,8 @@ def __init__(self, name): self.name = name + __hash__ = None + def __eq__(self, other): if other not in self.seen: text = 'Check that file is writable.' @@ -1511,6 +1517,8 @@ def __init__(self, value): self.value = value + __hash__ = None + def __eq__(self, other): return (type(self), self.value) == (type(other), other.value) @@ -1533,6 +1541,8 @@ def __init__(self, value): self.value = value + __hash__ = None + def __eq__(self, other): return (type(self), self.value) == (type(other), other.value) From python-checkins at python.org Sun Mar 7 01:35:14 2010 From: python-checkins at python.org (benjamin.peterson) Date: Sun, 7 Mar 2010 01:35:14 +0100 (CET) Subject: [Python-checkins] r78750 - python/branches/py3k Message-ID: <20100307003514.0CD11FB4B@mail.python.org> Author: benjamin.peterson Date: Sun Mar 7 01:35:13 2010 New Revision: 78750 Log: Blocked revisions 78749 via svnmerge ........ r78749 | benjamin.peterson | 2010-03-06 18:29:44 -0600 (Sat, 06 Mar 2010) | 1 line eliminate py3k warnings in argparse ........ Modified: python/branches/py3k/ (props changed) From python-checkins at python.org Sun Mar 7 05:09:30 2010 From: python-checkins at python.org (senthil.kumaran) Date: Sun, 7 Mar 2010 05:09:30 +0100 (CET) Subject: [Python-checkins] r78751 - in python/trunk/Lib: test/test_urllib2.py urllib2.py Message-ID: <20100307040930.2EAF1FA7C@mail.python.org> Author: senthil.kumaran Date: Sun Mar 7 05:09:30 2010 New Revision: 78751 Log: Reverting the change made in r78431. Modified: python/trunk/Lib/test/test_urllib2.py python/trunk/Lib/urllib2.py Modified: python/trunk/Lib/test/test_urllib2.py ============================================================================== --- python/trunk/Lib/test/test_urllib2.py (original) +++ python/trunk/Lib/test/test_urllib2.py Sun Mar 7 05:09:30 2010 @@ -1209,7 +1209,6 @@ self.get.add_data("spam") self.assertTrue(self.get.has_data()) self.assertEqual("POST", self.get.get_method()) - self.assertRaises(TypeError,self.get.add_data, "more spam") def test_get_full_url(self): self.assertEqual("http://www.python.org/~jeremy/", Modified: python/trunk/Lib/urllib2.py ============================================================================== --- python/trunk/Lib/urllib2.py (original) +++ python/trunk/Lib/urllib2.py Sun Mar 7 05:09:30 2010 @@ -226,9 +226,6 @@ # XXX these helper methods are lame def add_data(self, data): - if self.has_data(): - raise TypeError("Request Obj already contains data: %s" % - self.data) self.data = data def has_data(self): From python-checkins at python.org Sun Mar 7 05:12:02 2010 From: python-checkins at python.org (senthil.kumaran) Date: Sun, 7 Mar 2010 05:12:02 +0100 (CET) Subject: [Python-checkins] r78752 - in python/branches/py3k/Lib: test/test_urllib2.py urllib/request.py Message-ID: <20100307041202.348E9FE56@mail.python.org> Author: senthil.kumaran Date: Sun Mar 7 05:12:02 2010 New Revision: 78752 Log: Reverting the changes made in r78433. Modified: python/branches/py3k/Lib/test/test_urllib2.py python/branches/py3k/Lib/urllib/request.py Modified: python/branches/py3k/Lib/test/test_urllib2.py ============================================================================== --- python/branches/py3k/Lib/test/test_urllib2.py (original) +++ python/branches/py3k/Lib/test/test_urllib2.py Sun Mar 7 05:12:02 2010 @@ -1220,7 +1220,6 @@ self.get.add_data("spam") self.assertTrue(self.get.has_data()) self.assertEqual("POST", self.get.get_method()) - self.assertRaises(TypeError,self.get.add_data, "more spam") def test_get_full_url(self): self.assertEqual("http://www.python.org/~jeremy/", Modified: python/branches/py3k/Lib/urllib/request.py ============================================================================== --- python/branches/py3k/Lib/urllib/request.py (original) +++ python/branches/py3k/Lib/urllib/request.py Sun Mar 7 05:12:02 2010 @@ -192,9 +192,6 @@ # Begin deprecated methods def add_data(self, data): - if self.has_data(): - raise TypeError("Request Obj already contains data: %s" % - self.data) self.data = data def has_data(self): From python-checkins at python.org Sun Mar 7 05:13:49 2010 From: python-checkins at python.org (senthil.kumaran) Date: Sun, 7 Mar 2010 05:13:49 +0100 (CET) Subject: [Python-checkins] r78753 - in python/branches/release31-maint/Lib: test/test_urllib2.py urllib/request.py Message-ID: <20100307041349.1E4E9DEAB@mail.python.org> Author: senthil.kumaran Date: Sun Mar 7 05:13:48 2010 New Revision: 78753 Log: Reverting the change made in r78434 Modified: python/branches/release31-maint/Lib/test/test_urllib2.py python/branches/release31-maint/Lib/urllib/request.py Modified: python/branches/release31-maint/Lib/test/test_urllib2.py ============================================================================== --- python/branches/release31-maint/Lib/test/test_urllib2.py (original) +++ python/branches/release31-maint/Lib/test/test_urllib2.py Sun Mar 7 05:13:48 2010 @@ -1220,7 +1220,6 @@ self.get.add_data("spam") self.assertTrue(self.get.has_data()) self.assertEqual("POST", self.get.get_method()) - self.assertRaises(TypeError,self.get.add_data, "more spam") def test_get_full_url(self): self.assertEqual("http://www.python.org/~jeremy/", Modified: python/branches/release31-maint/Lib/urllib/request.py ============================================================================== --- python/branches/release31-maint/Lib/urllib/request.py (original) +++ python/branches/release31-maint/Lib/urllib/request.py Sun Mar 7 05:13:48 2010 @@ -192,9 +192,6 @@ # Begin deprecated methods def add_data(self, data): - if self.has_data(): - raise TypeError("Request Obj already contains data: %s" % - self.data) self.data = data def has_data(self): From python-checkins at python.org Sun Mar 7 06:58:43 2010 From: python-checkins at python.org (gregory.p.smith) Date: Sun, 7 Mar 2010 06:58:43 +0100 (CET) Subject: [Python-checkins] r78754 - in python/branches/release26-maint: Lib/test/test_os.py Message-ID: <20100307055843.BA21FFCE1@mail.python.org> Author: gregory.p.smith Date: Sun Mar 7 06:58:43 2010 New Revision: 78754 Log: Merged revisions 78718 via svnmerge from svn+ssh://pythondev at svn.python.org/python/trunk ........ r78718 | gregory.p.smith | 2010-03-05 23:35:19 -0800 (Fri, 05 Mar 2010) | 3 lines Call setreuid and setregid in a subprocess to avoid altering the test runner's process state. Should fix issue8045. ........ Modified: python/branches/release26-maint/ (props changed) python/branches/release26-maint/Lib/test/test_os.py Modified: python/branches/release26-maint/Lib/test/test_os.py ============================================================================== --- python/branches/release26-maint/Lib/test/test_os.py (original) +++ python/branches/release26-maint/Lib/test/test_os.py Sun Mar 7 06:58:43 2010 @@ -643,7 +643,14 @@ self.assertRaises(os.error, os.setreuid, 0, 0) self.assertRaises(OverflowError, os.setreuid, 1<<32, 0) self.assertRaises(OverflowError, os.setreuid, 0, 1<<32) - os.setreuid(-1, -1) # Does nothing, but it needs to accept -1 + + def test_setreuid_neg1(self): + # Needs to accept -1. We run this in a subprocess to avoid + # altering the test runner's process state (issue8045). + import subprocess + subprocess.check_call([ + sys.executable, '-c', + 'import os,sys;os.setreuid(-1,-1);sys.exit(0)']) if hasattr(os, 'setregid'): def test_setregid(self): @@ -651,7 +658,14 @@ self.assertRaises(os.error, os.setregid, 0, 0) self.assertRaises(OverflowError, os.setregid, 1<<32, 0) self.assertRaises(OverflowError, os.setregid, 0, 1<<32) - os.setregid(-1, -1) # Does nothing, but it needs to accept -1 + + def test_setregid_neg1(self): + # Needs to accept -1. We run this in a subprocess to avoid + # altering the test runner's process state (issue8045). + import subprocess + subprocess.check_call([ + sys.executable, '-c', + 'import os,sys;os.setregid(-1,-1);sys.exit(0)']) else: class PosixUidGidTests(unittest.TestCase): pass From python-checkins at python.org Sun Mar 7 10:04:06 2010 From: python-checkins at python.org (ronald.oussoren) Date: Sun, 7 Mar 2010 10:04:06 +0100 (CET) Subject: [Python-checkins] r78755 - in python/trunk/Mac: Makefile.in Tools/pythonw.c Message-ID: <20100307090406.C40E8FD21@mail.python.org> Author: ronald.oussoren Date: Sun Mar 7 10:04:06 2010 New Revision: 78755 Log: Fix for issue #7998: pythonw didn't work when --with-framework-name was specified Modified: python/trunk/Mac/Makefile.in python/trunk/Mac/Tools/pythonw.c Modified: python/trunk/Mac/Makefile.in ============================================================================== --- python/trunk/Mac/Makefile.in (original) +++ python/trunk/Mac/Makefile.in Sun Mar 7 10:04:06 2010 @@ -114,7 +114,7 @@ pythonw: $(srcdir)/Tools/pythonw.c Makefile - $(CC) $(LDFLAGS) -o $@ $(srcdir)/Tools/pythonw.c -I.. -I$(srcdir)/../Include ../$(PYTHONFRAMEWORK).framework/Versions/$(VERSION)/$(PYTHONFRAMEWORK) + $(CC) $(LDFLAGS) -DPYTHONFRAMEWORK='"$(PYTHONFRAMEWORK)"' -o $@ $(srcdir)/Tools/pythonw.c -I.. -I$(srcdir)/../Include ../$(PYTHONFRAMEWORK).framework/Versions/$(VERSION)/$(PYTHONFRAMEWORK) install_PythonLauncher: cd PythonLauncher && make install DESTDIR=$(DESTDIR) Modified: python/trunk/Mac/Tools/pythonw.c ============================================================================== --- python/trunk/Mac/Tools/pythonw.c (original) +++ python/trunk/Mac/Tools/pythonw.c Sun Mar 7 10:04:06 2010 @@ -79,7 +79,7 @@ if (end[1] == '.') { end++; } - strcpy(end, "Resources/Python.app/Contents/MacOS/Python"); + strcpy(end, "Resources/Python.app/Contents/MacOS/" PYTHONFRAMEWORK); return g_path; } From python-checkins at python.org Sun Mar 7 10:14:06 2010 From: python-checkins at python.org (ronald.oussoren) Date: Sun, 7 Mar 2010 10:14:06 +0100 (CET) Subject: [Python-checkins] r78756 - in python/branches/py3k: Mac/Makefile.in Mac/Tools/pythonw.c Message-ID: <20100307091406.B651FDF5D@mail.python.org> Author: ronald.oussoren Date: Sun Mar 7 10:14:06 2010 New Revision: 78756 Log: Merged revisions 78755 via svnmerge from svn+ssh://pythondev at svn.python.org/python/trunk ........ r78755 | ronald.oussoren | 2010-03-07 10:04:06 +0100 (Sun, 07 Mar 2010) | 3 lines Fix for issue #7998: pythonw didn't work when --with-framework-name was specified ........ Modified: python/branches/py3k/ (props changed) python/branches/py3k/Mac/Makefile.in python/branches/py3k/Mac/Tools/pythonw.c Modified: python/branches/py3k/Mac/Makefile.in ============================================================================== --- python/branches/py3k/Mac/Makefile.in (original) +++ python/branches/py3k/Mac/Makefile.in Sun Mar 7 10:14:06 2010 @@ -111,7 +111,7 @@ pythonw: $(srcdir)/Tools/pythonw.c Makefile - $(CC) $(LDFLAGS) -o $@ $(srcdir)/Tools/pythonw.c -I.. -I$(srcdir)/../Include ../$(PYTHONFRAMEWORK).framework/Versions/$(VERSION)/$(PYTHONFRAMEWORK) + $(CC) $(LDFLAGS) -DPYTHONFRAMEWORK='"$(PYTHONFRAMEWORK)"' -o $@ $(srcdir)/Tools/pythonw.c -I.. -I$(srcdir)/../Include ../$(PYTHONFRAMEWORK).framework/Versions/$(VERSION)/$(PYTHONFRAMEWORK) install_PythonLauncher: cd PythonLauncher && make install DESTDIR=$(DESTDIR) Modified: python/branches/py3k/Mac/Tools/pythonw.c ============================================================================== --- python/branches/py3k/Mac/Tools/pythonw.c (original) +++ python/branches/py3k/Mac/Tools/pythonw.c Sun Mar 7 10:14:06 2010 @@ -81,7 +81,7 @@ if (end[1] == '.') { end++; } - strcpy(end, "Resources/Python.app/Contents/MacOS/Python"); + strcpy(end, "Resources/Python.app/Contents/MacOS/" PYTHONFRAMEWORK); return g_path; } From python-checkins at python.org Sun Mar 7 13:14:25 2010 From: python-checkins at python.org (florent.xicluna) Date: Sun, 7 Mar 2010 13:14:25 +0100 (CET) Subject: [Python-checkins] r78757 - in python/trunk/Lib: _pyio.py calendar.py ctypes/test/test_callbacks.py distutils/util.py shutil.py test/test_calendar.py test/test_memoryio.py unittest/case.py warnings.py Message-ID: <20100307121425.87779FDA4@mail.python.org> Author: florent.xicluna Date: Sun Mar 7 13:14:25 2010 New Revision: 78757 Log: Fix some py3k warnings in the standard library. Modified: python/trunk/Lib/_pyio.py python/trunk/Lib/calendar.py python/trunk/Lib/ctypes/test/test_callbacks.py python/trunk/Lib/distutils/util.py python/trunk/Lib/shutil.py python/trunk/Lib/test/test_calendar.py python/trunk/Lib/test/test_memoryio.py python/trunk/Lib/unittest/case.py python/trunk/Lib/warnings.py Modified: python/trunk/Lib/_pyio.py ============================================================================== --- python/trunk/Lib/_pyio.py (original) +++ python/trunk/Lib/_pyio.py Sun Mar 7 13:14:25 2010 @@ -839,8 +839,8 @@ if self.closed: raise ValueError("seek on closed file") try: - pos = pos.__index__() - except AttributeError as err: + pos.__index__ + except AttributeError: raise TypeError("an integer is required") if whence == 0: if pos < 0: @@ -864,8 +864,13 @@ raise ValueError("truncate on closed file") if pos is None: pos = self._pos - elif pos < 0: - raise ValueError("negative truncate position %r" % (pos,)) + else: + try: + pos.__index__ + except AttributeError: + raise TypeError("an integer is required") + if pos < 0: + raise ValueError("negative truncate position %r" % (pos,)) del self._buffer[pos:] return pos @@ -1813,6 +1818,10 @@ if n is None: n = -1 decoder = self._decoder or self._get_decoder() + try: + n.__index__ + except AttributeError: + raise TypeError("an integer is required") if n < 0: # Read everything. result = (self._get_decoded_chars() + Modified: python/trunk/Lib/calendar.py ============================================================================== --- python/trunk/Lib/calendar.py (original) +++ python/trunk/Lib/calendar.py Sun Mar 7 13:14:25 2010 @@ -564,6 +564,10 @@ firstweekday = c.getfirstweekday def setfirstweekday(firstweekday): + try: + firstweekday.__index__ + except AttributeError: + raise IllegalWeekdayError(firstweekday) if not MONDAY <= firstweekday <= SUNDAY: raise IllegalWeekdayError(firstweekday) c.firstweekday = firstweekday Modified: python/trunk/Lib/ctypes/test/test_callbacks.py ============================================================================== --- python/trunk/Lib/ctypes/test/test_callbacks.py (original) +++ python/trunk/Lib/ctypes/test/test_callbacks.py Sun Mar 7 13:14:25 2010 @@ -132,7 +132,7 @@ gc.collect() live = [x for x in gc.get_objects() if isinstance(x, X)] - self.failUnlessEqual(len(live), 0) + self.assertEqual(len(live), 0) try: WINFUNCTYPE @@ -164,7 +164,7 @@ result = integrate(0.0, 1.0, CALLBACK(func), 10) diff = abs(result - 1./3.) - self.assertTrue(diff < 0.01, "%s not less than 0.01" % diff) + self.assertLess(diff, 0.01, "%s not less than 0.01" % diff) ################################################################ Modified: python/trunk/Lib/distutils/util.py ============================================================================== --- python/trunk/Lib/distutils/util.py (original) +++ python/trunk/Lib/distutils/util.py Sun Mar 7 13:14:25 2010 @@ -406,7 +406,7 @@ log.info(msg) if not dry_run: - apply(func, args) + func(*args) def strtobool (val): Modified: python/trunk/Lib/shutil.py ============================================================================== --- python/trunk/Lib/shutil.py (original) +++ python/trunk/Lib/shutil.py Sun Mar 7 13:14:25 2010 @@ -10,6 +10,7 @@ from os.path import abspath import fnmatch from warnings import warn +import collections try: from pwd import getpwnam @@ -500,7 +501,7 @@ """ if extra_args is None: extra_args = [] - if not callable(function): + if not isinstance(function, collections.Callable): raise TypeError('The %s object is not callable' % function) if not isinstance(extra_args, (tuple, list)): raise TypeError('extra_args needs to be a sequence') Modified: python/trunk/Lib/test/test_calendar.py ============================================================================== --- python/trunk/Lib/test/test_calendar.py (original) +++ python/trunk/Lib/test/test_calendar.py Sun Mar 7 13:14:25 2010 @@ -212,11 +212,9 @@ self.assertEqual(calendar.isleap(2003), 0) def test_setfirstweekday(self): - # Silence a py3k warning claiming to affect Lib/calendar.py - with test_support.check_warnings(): - self.assertRaises(ValueError, calendar.setfirstweekday, 'flabber') - self.assertRaises(ValueError, calendar.setfirstweekday, -1) - self.assertRaises(ValueError, calendar.setfirstweekday, 200) + self.assertRaises(ValueError, calendar.setfirstweekday, 'flabber') + self.assertRaises(ValueError, calendar.setfirstweekday, -1) + self.assertRaises(ValueError, calendar.setfirstweekday, 200) orig = calendar.firstweekday() calendar.setfirstweekday(calendar.SUNDAY) self.assertEqual(calendar.firstweekday(), calendar.SUNDAY) Modified: python/trunk/Lib/test/test_memoryio.py ============================================================================== --- python/trunk/Lib/test/test_memoryio.py (original) +++ python/trunk/Lib/test/test_memoryio.py Sun Mar 7 13:14:25 2010 @@ -133,9 +133,7 @@ pos = memio.tell() self.assertEqual(memio.truncate(None), pos) self.assertEqual(memio.tell(), pos) - # Silence a py3k warning - with support.check_warnings(): - self.assertRaises(TypeError, memio.truncate, '0') + self.assertRaises(TypeError, memio.truncate, '0') memio.close() self.assertRaises(ValueError, memio.truncate, 0) @@ -172,9 +170,7 @@ self.assertEqual(type(memio.read()), type(buf)) memio.seek(0) self.assertEqual(memio.read(None), buf) - # Silence a py3k warning - with support.check_warnings(): - self.assertRaises(TypeError, memio.read, '') + self.assertRaises(TypeError, memio.read, '') memio.close() self.assertRaises(ValueError, memio.read) Modified: python/trunk/Lib/unittest/case.py ============================================================================== --- python/trunk/Lib/unittest/case.py (original) +++ python/trunk/Lib/unittest/case.py Sun Mar 7 13:14:25 2010 @@ -774,26 +774,23 @@ set(actual))`` but it works with sequences of unhashable objects as well. """ - try: - expected = set(expected_seq) - actual = set(actual_seq) - missing = list(expected.difference(actual)) - unexpected = list(actual.difference(expected)) - missing.sort() - unexpected.sort() - except TypeError: - # Fall back to slower list-compare if any of the objects are - # not hashable. - expected = list(expected_seq) - actual = list(actual_seq) - with warnings.catch_warnings(): - if sys.py3kwarning: - # Silence Py3k warning - warnings.filterwarnings("ignore", - "dict inequality comparisons " - "not supported", DeprecationWarning) - expected.sort() - actual.sort() + with warnings.catch_warnings(): + if sys.py3kwarning: + # Silence Py3k warning raised during the sorting + for msg in ["dict inequality comparisons", + "builtin_function_or_method order comparisons", + "comparing unequal types"]: + warnings.filterwarnings("ignore", msg, DeprecationWarning) + try: + expected = set(expected_seq) + actual = set(actual_seq) + missing = sorted(expected.difference(actual)) + unexpected = sorted(actual.difference(expected)) + except TypeError: + # Fall back to slower list-compare if any of the objects are + # not hashable. + expected = sorted(expected_seq) + actual = sorted(actual_seq) missing, unexpected = sorted_list_difference(expected, actual) errors = [] if missing: Modified: python/trunk/Lib/warnings.py ============================================================================== --- python/trunk/Lib/warnings.py (original) +++ python/trunk/Lib/warnings.py Sun Mar 7 13:14:25 2010 @@ -29,7 +29,7 @@ file.write(formatwarning(message, category, filename, lineno, line)) except IOError: pass # the file (probably stderr) is invalid - this warning gets lost. -# Keep a worrking version around in case the deprecation of the old API is +# Keep a working version around in case the deprecation of the old API is # triggered. showwarning = _show_warning From python-checkins at python.org Sun Mar 7 13:18:33 2010 From: python-checkins at python.org (florent.xicluna) Date: Sun, 7 Mar 2010 13:18:33 +0100 (CET) Subject: [Python-checkins] r78758 - in python/trunk: Lib/test/string_tests.py Lib/test/test_ascii_formatd.py Lib/test/test_fileio.py Lib/test/test_index.py Lib/test/test_random.py Lib/test/test_support.py Lib/test/test_unicode.py Misc/NEWS Message-ID: <20100307121833.758EEFB97@mail.python.org> Author: florent.xicluna Date: Sun Mar 7 13:18:33 2010 New Revision: 78758 Log: Issue #7849: Now the utility ``check_warnings`` verifies if the warnings are effectively raised. A new utility ``check_py3k_warnings`` deals with py3k warnings. Modified: python/trunk/Lib/test/string_tests.py python/trunk/Lib/test/test_ascii_formatd.py python/trunk/Lib/test/test_fileio.py python/trunk/Lib/test/test_index.py python/trunk/Lib/test/test_random.py python/trunk/Lib/test/test_support.py python/trunk/Lib/test/test_unicode.py python/trunk/Misc/NEWS Modified: python/trunk/Lib/test/string_tests.py ============================================================================== --- python/trunk/Lib/test/string_tests.py (original) +++ python/trunk/Lib/test/string_tests.py Sun Mar 7 13:18:33 2010 @@ -715,8 +715,7 @@ EQ("bobobXbobob", "bobobobXbobobob", "replace", "bobob", "bob") EQ("BOBOBOB", "BOBOBOB", "replace", "bob", "bobby") - # Silence Py3k warning - with test_support.check_warnings(): + with test_support.check_py3k_warnings(): ba = buffer('a') bb = buffer('b') EQ("bbc", "abc", "replace", ba, bb) Modified: python/trunk/Lib/test/test_ascii_formatd.py ============================================================================== --- python/trunk/Lib/test/test_ascii_formatd.py (original) +++ python/trunk/Lib/test/test_ascii_formatd.py Sun Mar 7 13:18:33 2010 @@ -17,14 +17,11 @@ PyOS_ascii_formatd = pythonapi.PyOS_ascii_formatd buf = create_string_buffer(' ' * 100) - with check_warnings() as w: - warnings.simplefilter('default') + with check_warnings(): PyOS_ascii_formatd(byref(buf), sizeof(buf), '%+.10f', c_double(10.0)) self.assertEqual(buf.value, '+10.0000000000') - self.assertEqual(w.category, DeprecationWarning) - class FormatTests(unittest.TestCase): # ensure that, for the restricted set of format codes, # %-formatting returns the same values os PyOS_ascii_formatd Modified: python/trunk/Lib/test/test_fileio.py ============================================================================== --- python/trunk/Lib/test/test_fileio.py (original) +++ python/trunk/Lib/test/test_fileio.py Sun Mar 7 13:18:33 2010 @@ -390,7 +390,7 @@ self.assertRaises(TypeError, _FileIO, "1", 0, 0) def testWarnings(self): - with check_warnings() as w: + with check_warnings(quiet=True) as w: self.assertEqual(w.warnings, []) self.assertRaises(TypeError, _FileIO, []) self.assertEqual(w.warnings, []) Modified: python/trunk/Lib/test/test_index.py ============================================================================== --- python/trunk/Lib/test/test_index.py (original) +++ python/trunk/Lib/test/test_index.py Sun Mar 7 13:18:33 2010 @@ -279,16 +279,14 @@ def test_getitem(self): self._getitem_helper(object) - # Silence Py3k warning - with test_support.check_warnings(): + with test_support.check_py3k_warnings(): self._getslice_helper_deprecated(object) def test_getitem_classic(self): class Empty: pass # XXX This test fails (see bug #7532) #self._getitem_helper(Empty) - # Silence Py3k warning - with test_support.check_warnings(): + with test_support.check_py3k_warnings(): self._getslice_helper_deprecated(Empty) def test_sequence_repeat(self): @@ -308,8 +306,7 @@ XRangeTestCase, OverflowTestCase, ) - # Silence Py3k warning - with test_support.check_warnings(): + with test_support.check_py3k_warnings(): test_support.run_unittest( ClassicSeqDeprecatedTestCase, NewSeqDeprecatedTestCase, Modified: python/trunk/Lib/test/test_random.py ============================================================================== --- python/trunk/Lib/test/test_random.py (original) +++ python/trunk/Lib/test/test_random.py Sun Mar 7 13:18:33 2010 @@ -53,8 +53,7 @@ state3 = self.gen.getstate() # s/b distinct from state2 self.assertNotEqual(state2, state3) - # Silence py3k warnings - with test_support.check_warnings(): + with test_support.check_py3k_warnings(quiet=True): self.assertRaises(TypeError, self.gen.jumpahead) # needs an arg self.assertRaises(TypeError, self.gen.jumpahead, "ick") # wrong type self.assertRaises(TypeError, self.gen.jumpahead, 2.3) # wrong type Modified: python/trunk/Lib/test/test_support.py ============================================================================== --- python/trunk/Lib/test/test_support.py (original) +++ python/trunk/Lib/test/test_support.py Sun Mar 7 13:18:33 2010 @@ -16,6 +16,7 @@ import unittest import importlib import UserDict +import re __all__ = ["Error", "TestFailed", "ResourceDenied", "import_module", "verbose", "use_resources", "max_memuse", "record_original_stdout", @@ -23,8 +24,8 @@ "is_resource_enabled", "requires", "find_unused_port", "bind_port", "fcmp", "have_unicode", "is_jython", "TESTFN", "HOST", "FUZZ", "SAVEDCWD", "temp_cwd", "findfile", "sortdict", "check_syntax_error", - "open_urlresource", "check_warnings", "CleanImport", - "EnvironmentVarGuard", "captured_output", + "open_urlresource", "check_warnings", "check_py3k_warnings", + "CleanImport", "EnvironmentVarGuard", "captured_output", "captured_stdout", "TransientResource", "transient_internet", "run_with_locale", "set_memlimit", "bigmemtest", "bigaddrspacetest", "BasicTestRunner", "run_unittest", "run_doctest", "threading_setup", @@ -488,22 +489,103 @@ entry to the warnings.catch_warnings() context manager. """ def __init__(self, warnings_list): - self.warnings = warnings_list + self._warnings = warnings_list + self._last = 0 def __getattr__(self, attr): - if self.warnings: - return getattr(self.warnings[-1], attr) + if len(self._warnings) > self._last: + return getattr(self._warnings[-1], attr) elif attr in warnings.WarningMessage._WARNING_DETAILS: return None raise AttributeError("%r has no attribute %r" % (self, attr)) + @property + def warnings(self): + return self._warnings[self._last:] + def reset(self): - del self.warnings[:] + self._last = len(self._warnings) - at contextlib.contextmanager -def check_warnings(): + +def _filterwarnings(filters, quiet=False): + """Catch the warnings, then check if all the expected + warnings have been raised and re-raise unexpected warnings. + If 'quiet' is True, only re-raise the unexpected warnings. + """ + # Clear the warning registry of the calling module + # in order to re-raise the warnings. + frame = sys._getframe(2) + registry = frame.f_globals.get('__warningregistry__') + if registry: + registry.clear() with warnings.catch_warnings(record=True) as w: + # Disable filters, to record all warnings. Because + # test_warnings swap the module, we need to look up + # in the sys.modules dictionary. + sys.modules['warnings'].resetwarnings() yield WarningsRecorder(w) + # Filter the recorded warnings + reraise = [warning.message for warning in w] + missing = [] + for msg, cat in filters: + seen = False + for exc in reraise[:]: + message = str(exc) + # Filter out the matching messages + if (re.match(msg, message, re.I) and + issubclass(exc.__class__, cat)): + seen = True + reraise.remove(exc) + if not seen and not quiet: + # This filter caught nothing + missing.append((msg, cat.__name__)) + for exc in reraise: + raise AssertionError("unhandled warning %r" % exc) + for filter in missing: + raise AssertionError("filter (%r, %s) did not caught any warning" % + filter) + + + at contextlib.contextmanager +def check_warnings(*filters, **kwargs): + """Context manager to silence warnings. + + Accept 2-tuples as positional arguments: + ("message regexp", WarningCategory) + + Optional argument: + - if 'quiet' is True, it does not fail if a filter catches nothing + (default False) + + Without argument, it defaults to: + check_warnings(("", Warning), quiet=False) + """ + if not filters: + filters = (("", Warning),) + return _filterwarnings(filters, kwargs.get('quiet')) + + + at contextlib.contextmanager +def check_py3k_warnings(*filters, **kwargs): + """Context manager to silence py3k warnings. + + Accept 2-tuples as positional arguments: + ("message regexp", WarningCategory) + + Optional argument: + - if 'quiet' is True, it does not fail if a filter catches nothing + (default False) + + Without argument, it defaults to: + check_py3k_warnings(("", DeprecationWarning), quiet=False) + """ + if sys.py3kwarning: + if not filters: + filters = (("", DeprecationWarning),) + else: + # It should not raise any py3k warning + filters = () + return _filterwarnings(filters, kwargs.get('quiet')) class CleanImport(object): @@ -735,7 +817,6 @@ MAX_Py_ssize_t = sys.maxsize def set_memlimit(limit): - import re global max_memuse global real_max_memuse sizes = { Modified: python/trunk/Lib/test/test_unicode.py ============================================================================== --- python/trunk/Lib/test/test_unicode.py (original) +++ python/trunk/Lib/test/test_unicode.py Sun Mar 7 13:18:33 2010 @@ -512,8 +512,7 @@ ) if not sys.platform.startswith('java'): - # Silence Py3k warning - with test_support.check_warnings(): + with test_support.check_py3k_warnings(): buf = buffer('character buffers are decoded to unicode') self.assertEqual( unicode( Modified: python/trunk/Misc/NEWS ============================================================================== --- python/trunk/Misc/NEWS (original) +++ python/trunk/Misc/NEWS Sun Mar 7 13:18:33 2010 @@ -138,6 +138,9 @@ Tests ----- +- Issue #7849: Now the utility ``check_warnings`` verifies if the warnings are + effectively raised. A new utility ``check_py3k_warnings`` is available. + - The four path modules (genericpath, macpath, ntpath, posixpath) share a common TestCase for some tests: test_genericpath.CommonTest. From python-checkins at python.org Sun Mar 7 13:21:36 2010 From: python-checkins at python.org (florent.xicluna) Date: Sun, 7 Mar 2010 13:21:36 +0100 (CET) Subject: [Python-checkins] r78759 - python/trunk/Lib/test/test_subprocess.py Message-ID: <20100307122136.5AC20FB97@mail.python.org> Author: florent.xicluna Date: Sun Mar 7 13:21:36 2010 New Revision: 78759 Log: #2777: Enable test_send_signal, test_terminate and test_kill on win32 platforms. Modified: python/trunk/Lib/test/test_subprocess.py Modified: python/trunk/Lib/test/test_subprocess.py ============================================================================== --- python/trunk/Lib/test/test_subprocess.py (original) +++ python/trunk/Lib/test/test_subprocess.py Sun Mar 7 13:21:36 2010 @@ -768,7 +768,6 @@ ' -c "import sys; sys.exit(47)"') self.assertEqual(rc, 47) - @unittest.skip("It fails on some win32 platforms. See issue #2777") def test_send_signal(self): # Redirect the stdin file handle. # It should fix failure on some win32 platforms. @@ -779,7 +778,6 @@ p.send_signal(signal.SIGTERM) self.assertNotEqual(p.wait(), 0) - @unittest.skip("It fails on some win32 platforms. See issue #2777") def test_kill(self): p = subprocess.Popen([sys.executable, "-c", "input()"], stdin=subprocess.PIPE) @@ -788,7 +786,6 @@ p.kill() self.assertNotEqual(p.wait(), 0) - @unittest.skip("It fails on some win32 platforms. See issue #2777") def test_terminate(self): p = subprocess.Popen([sys.executable, "-c", "input()"], stdin=subprocess.PIPE) From ncoghlan at gmail.com Sun Mar 7 13:53:40 2010 From: ncoghlan at gmail.com (Nick Coghlan) Date: Sun, 07 Mar 2010 22:53:40 +1000 Subject: [Python-checkins] r78758 - in python/trunk: Lib/test/string_tests.py Lib/test/test_ascii_formatd.py Lib/test/test_fileio.py Lib/test/test_index.py Lib/test/test_random.py Lib/test/test_support.py Lib/test/test_unicode.py Misc/NEWS In-Reply-To: <20100307121833.758EEFB97@mail.python.org> References: <20100307121833.758EEFB97@mail.python.org> Message-ID: <4B93A1D4.4050605@gmail.com> florent.xicluna wrote: > + Optional argument: > + - if 'quiet' is True, it does not fail if a filter catches nothing > + (default False) > + > + Without argument, it defaults to: > + check_warnings(("", Warning), quiet=False) The default here needs to be "quiet=True" so that it gives the same behaviour as the old one if you don't provide any arguments. It doesn't matter which is more common in our test suite - what matters is that the old behaviour is documented for use by third parties. The test_support module documentation also needs to be updated - it's the only module within the test suite that *is* documented (and thus constrained by backwards compatibility concerns). http://docs.python.org/library/test.html#module-test.test_support It also looks to me like the kwargs.get() calls are missing their default value for when no 'quiet' argument is provided. Cheers, Nick. -- Nick Coghlan | ncoghlan at gmail.com | Brisbane, Australia --------------------------------------------------------------- From nnorwitz at gmail.com Sun Mar 7 14:07:33 2010 From: nnorwitz at gmail.com (Neal Norwitz) Date: Sun, 7 Mar 2010 08:07:33 -0500 Subject: [Python-checkins] Python Regression Test Failures all (1) Message-ID: <20100307130733.GA11220@kbk-i386-bb.psfb.org> 352 tests OK. 1 test failed: test_wait4 26 tests skipped: test_aepack test_al test_applesingle test_bsddb185 test_cd test_cl test_epoll test_gl test_imgfile test_ioctl test_kqueue test_macos test_macostools test_multiprocessing test_py3kwarn test_scriptpackages test_startfile test_sunaudiodev test_tcl test_tk test_ttk_guionly test_ttk_textonly test_unicode_file test_winreg test_winsound test_zipfile64 6 skips unexpected on linux2: test_multiprocessing test_ttk_guionly test_epoll test_tk test_ioctl test_ttk_textonly == CPython 2.7a4+ (trunk:78754M, Mar 7 2010, 04:01:48) [GCC 3.3.4 20040623 (Gentoo Linux 3.3.4-r1, ssp-3.3.2-2, pie-8.7.6)] == Linux-2.6.9-gentoo-r1-i686-AMD_Athlon-tm-_XP_3000+-with-gentoo-1.4.16 == /tmp/test_python_26759 test_grammar test_opcodes test_dict test_builtin test_exceptions test_types test_unittest test_doctest test_doctest2 test_MimeWriter test_SimpleHTTPServer test_StringIO test___all__ test___future__ test__locale test_abc test_abstract_numbers test_aepack test_aepack skipped -- No module named aetypes test_aifc test_al test_al skipped -- No module named al test_anydbm test_applesingle test_applesingle skipped -- No module named MacOS test_argparse test_array test_ascii_formatd test_ast test_asynchat test_asyncore test_atexit test_audioop test_augassign test_base64 test_bastion test_bigaddrspace test_bigmem test_binascii test_binhex test_binop test_bisect test_bool test_bsddb test_bsddb185 test_bsddb185 skipped -- No module named bsddb185 test_bsddb3 Sleepycat Software: Berkeley DB 4.1.25: (December 19, 2002) Test path prefix: /tmp/z-test_bsddb3-26759 test_buffer test_bufio test_bytes test_bz2 test_calendar test_call test_capi test_cd test_cd skipped -- No module named cd test_cfgparser test_cgi test_charmapcodec test_cl test_cl skipped -- No module named cl test_class test_cmath test_cmd test_cmd_line test_cmd_line_script test_code test_codeccallbacks test_codecencodings_cn test_codecencodings_hk test_codecencodings_jp test_codecencodings_kr test_codecencodings_tw test_codecmaps_cn test_codecmaps_hk test_codecmaps_jp test_codecmaps_kr test_codecmaps_tw test_codecs test_codeop test_coding test_coercion test_collections test_colorsys test_commands test_compare test_compile test_compileall test_compiler testCompileLibrary still working, be patient... test_complex test_complex_args test_contains test_contextlib test_cookie test_cookielib test_copy test_copy_reg test_cpickle test_cprofile test_crypt test_csv test_ctypes test_datetime test_dbm test_decimal test_decorators test_defaultdict test_deque test_descr test_descrtut test_dictcomps test_dictviews test_difflib test_dircache test_dis test_distutils [20679 refs] test_dl test_docxmlrpc test_dumbdbm test_dummy_thread test_dummy_threading test_email test_email_codecs test_email_renamed test_enumerate test_eof test_epoll test_epoll skipped -- kernel doesn't support epoll() test_errno test_exception_variations test_extcall test_fcntl test_file test_file2k test_filecmp test_fileinput test_fileio test_float test_fnmatch test_fork1 test_format test_fpformat test_fractions test_frozen test_ftplib test_funcattrs test_functools test_future test_future3 test_future4 test_future5 test_future_builtins test_gc test_gdbm test_generators test_genericpath test_genexps test_getargs test_getargs2 test_getopt test_gettext test_gl test_gl skipped -- No module named gl test_glob test_global test_grp test_gzip test_hash test_hashlib test_heapq test_hmac test_hotshot test_htmllib test_htmlparser test_httplib test_httpservers [16680 refs] [16680 refs] [16680 refs] [28258 refs] test_imageop test_imaplib test_imgfile test_imgfile skipped -- No module named imgfile test_imp test_import test_importhooks test_importlib test_index test_inspect test_int test_int_literal test_io test_ioctl test_ioctl skipped -- Unable to open /dev/tty test_isinstance test_iter test_iterlen test_itertools test_json test_kqueue test_kqueue skipped -- test works only on BSD test_largefile test_lib2to3 test_linecache test_list test_locale test_logging test_long test_long_future test_longexp test_macos test_macos skipped -- No module named MacOS test_macostools test_macostools skipped -- No module named MacOS test_macpath test_mailbox test_marshal test_math test_md5 test_memoryio test_memoryview test_mhlib test_mimetools test_mimetypes test_minidom test_mmap test_module test_modulefinder test_multibytecodec test_multibytecodec_support test_multifile test_multiprocessing test_multiprocessing skipped -- This platform lacks a functioning sem_open implementation, therefore, the required synchronization primitives needed will not function, see issue 3770. test_mutants test_mutex test_netrc test_new test_nis test_normalization test_ntpath test_old_mailbox test_openpty test_operator test_optparse test_os [16680 refs] [16680 refs] test_parser Expecting 's_push: parser stack overflow' in next line s_push: parser stack overflow test_pdb test_peepholer test_pep247 test_pep263 test_pep277 test_pep292 test_pep352 test_pickle test_pickletools test_pipes test_pkg test_pkgimport test_pkgutil test_platform [18076 refs] [18076 refs] test_plistlib test_poll test_popen [16685 refs] [16685 refs] [16685 refs] test_popen2 test_poplib test_posix test_posixpath test_pow test_pprint test_print test_profile test_profilehooks test_property test_pstats test_pty test_pwd test_py3kwarn test_py3kwarn skipped -- test.test_py3kwarn must be run with the -3 flag test_pyclbr test_pydoc [23122 refs] [23122 refs] [23122 refs] [23122 refs] [23122 refs] [23121 refs] [23121 refs] test_pyexpat test_queue test_quopri [19508 refs] [19508 refs] test_random test_re test_readline test_repr test_resource test_rfc822 test_richcmp test_robotparser test_runpy test_sax test_scope test_scriptpackages test_scriptpackages skipped -- No module named aetools test_select test_set test_setcomps test_sets test_sgmllib test_sha test_shelve test_shlex test_shutil test_signal test_site [16680 refs] [16680 refs] [16680 refs] [16680 refs] test_slice test_smtplib test_smtpnet test_socket test_socketserver test_softspace test_sort test_sqlite test_ssl test_startfile test_startfile skipped -- module os has no attribute startfile test_str test_strftime test_string test_stringprep test_strop test_strptime test_strtod test_struct test_structmembers test_structseq test_subprocess [16680 refs] [16680 refs] [16680 refs] [16680 refs] [16680 refs] [16680 refs] [16680 refs] [16680 refs] [16680 refs] [16680 refs] [16680 refs] [16680 refs] [16680 refs] [16680 refs] [16895 refs] [16680 refs] [16680 refs] [16680 refs] [16680 refs] [16680 refs] . [16680 refs] [16680 refs] this bit of output is from a test of stdout in a different process ... [16680 refs] [16680 refs] [16895 refs] [16680 refs] [16680 refs] [16680 refs] [16680 refs] [16680 refs] [16680 refs] [16680 refs] [16680 refs] [16680 refs] [16680 refs] [16680 refs] [16680 refs] [16680 refs] [16680 refs] [16680 refs] [16680 refs] [16680 refs] [16895 refs] [16680 refs] [16680 refs] [16680 refs] [16680 refs] [16680 refs] . [16680 refs] [16680 refs] this bit of output is from a test of stdout in a different process ... [16680 refs] [16680 refs] [16895 refs] test_sunaudiodev test_sunaudiodev skipped -- No module named sunaudiodev test_sundry test_symtable test_syntax test_sys [16680 refs] [16680 refs] [16909 refs] [16703 refs] test_sysconfig test_tarfile test_tcl test_tcl skipped -- No module named _tkinter test_telnetlib test_tempfile [16680 refs] test_textwrap test_thread test_threaded_import test_threadedtempfile test_threading [19980 refs] [22486 refs] [22300 refs] [22300 refs] [22300 refs] [22300 refs] test_threading_local test_threadsignals test_time test_timeout test_tk test_tk skipped -- No module named _tkinter test_tokenize test_trace test_traceback test_transformer test_ttk_guionly test_ttk_guionly skipped -- No module named _tkinter test_ttk_textonly test_ttk_textonly skipped -- No module named _tkinter test_tuple test_typechecks test_ucn test_unary test_undocumented_details test_unicode test_unicode_file test_unicode_file skipped -- No Unicode filesystem semantics on this platform. test_unicodedata test_univnewlines test_univnewlines2k test_unpack test_urllib test_urllib2 test_urllib2_localnet test_urllib2net test_urllibnet test_urlparse test_userdict test_userlist test_userstring test_uu test_uuid WARNING: uuid.getnode is unreliable on many platforms. It is disabled until the code and/or test can be fixed properly. WARNING: uuid._ifconfig_getnode is unreliable on many platforms. It is disabled until the code and/or test can be fixed properly. WARNING: uuid._unixdll_getnode is unreliable on many platforms. It is disabled until the code and/or test can be fixed properly. test_wait3 test_wait4 test test_wait4 failed -- Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/test/fork_wait.py", line 55, in test_wait self.assertEquals(a, range(NUM_THREADS)) AssertionError: Lists differ: [] != [0, 1, 2, 3] Second list contains 4 additional elements. First extra element 0: 0 - [] + [0, 1, 2, 3] Re-running test 'test_wait4' in verbose mode test_wait (test.test_wait4.Wait4Test) ... ok ---------------------------------------------------------------------- Ran 1 test in 6.005s OK test_warnings test_wave test_weakref test_whichdb test_winreg test_winreg skipped -- No module named _winreg test_winsound test_winsound skipped -- No module named winsound test_with test_wsgiref test_xdrlib test_xml_etree test_xml_etree_c test_xmllib test_xmlrpc test_xpickle sh: line 1: python2.4: command not found sh: line 1: python2.6: command not found test_xrange test_zipfile test_zipfile64 test_zipfile64 skipped -- test requires loads of disk-space bytes and a long time to run test_zipimport test_zipimport_support test_zlib 352 tests OK. 1 test failed: test_wait4 26 tests skipped: test_aepack test_al test_applesingle test_bsddb185 test_cd test_cl test_epoll test_gl test_imgfile test_ioctl test_kqueue test_macos test_macostools test_multiprocessing test_py3kwarn test_scriptpackages test_startfile test_sunaudiodev test_tcl test_tk test_ttk_guionly test_ttk_textonly test_unicode_file test_winreg test_winsound test_zipfile64 6 skips unexpected on linux2: test_multiprocessing test_ttk_guionly test_epoll test_tk test_ioctl test_ttk_textonly [954103 refs] From dickinsm at gmail.com Sun Mar 7 16:17:40 2010 From: dickinsm at gmail.com (Mark Dickinson) Date: Sun, 7 Mar 2010 15:17:40 +0000 Subject: [Python-checkins] r78758 - in python/trunk: Lib/test/string_tests.py Lib/test/test_ascii_formatd.py Lib/test/test_fileio.py Lib/test/test_index.py Lib/test/test_random.py Lib/test/test_support.py Lib/test/test_unicode.py Misc/NEWS In-Reply-To: <20100307121833.758EEFB97@mail.python.org> References: <20100307121833.758EEFB97@mail.python.org> Message-ID: <5c6f2a5d1003070717o560c5851i63761fcb4a51a3fd@mail.gmail.com> On Sun, Mar 7, 2010 at 12:18 PM, florent.xicluna wrote: > Author: florent.xicluna > Date: Sun Mar ?7 13:18:33 2010 > New Revision: 78758 > > Log: > Issue #7849: Now the utility ``check_warnings`` verifies if the warnings are > effectively raised. ?A new utility ``check_py3k_warnings`` deals with py3k warnings. > Modified: python/trunk/Lib/test/test_support.py > ============================================================================== [...] > + ? ?for filter in missing: > + ? ? ? ?raise AssertionError("filter (%r, %s) did not caught any warning" % > + ? ? ? ? ? ? ? ? ? ? ? ? ? ? filter) "did not caught" -> "did not catch" :) > + at contextlib.contextmanager > +def check_warnings(*filters, **kwargs): > + ? ?"""Context manager to silence warnings. > + > + ? ?Accept 2-tuples as positional arguments: > + ? ? ? ?("message regexp", WarningCategory) What's the reason for only allowing filtering on the warning category and message, but not on line number and module? Mark From python-checkins at python.org Sun Mar 7 16:24:00 2010 From: python-checkins at python.org (georg.brandl) Date: Sun, 7 Mar 2010 16:24:00 +0100 (CET) Subject: [Python-checkins] r78760 - in python/trunk: Doc/library/argparse.rst Doc/reference/executionmodel.rst Doc/whatsnew/2.6.rst Misc/BeOS-setup.py Misc/HISTORY Misc/NEWS Misc/SpecialBuilds.txt Message-ID: <20100307152400.682F1DC56@mail.python.org> Author: georg.brandl Date: Sun Mar 7 16:23:59 2010 New Revision: 78760 Log: #5341: more built-in vs builtin fixes. Modified: python/trunk/Doc/library/argparse.rst python/trunk/Doc/reference/executionmodel.rst python/trunk/Doc/whatsnew/2.6.rst python/trunk/Misc/BeOS-setup.py python/trunk/Misc/HISTORY python/trunk/Misc/NEWS python/trunk/Misc/SpecialBuilds.txt Modified: python/trunk/Doc/library/argparse.rst ============================================================================== --- python/trunk/Doc/library/argparse.rst (original) +++ python/trunk/Doc/library/argparse.rst Sun Mar 7 16:23:59 2010 @@ -855,7 +855,7 @@ However, quite often the command-line string should instead be interpreted as another type, like a :class:`float`, :class:`int` or :class:`file`. The ``type`` keyword argument of :meth:`add_argument` allows any necessary -type-checking and type-conversions to be performed. Many common builtin types +type-checking and type-conversions to be performed. Many common built-in types can be used directly as the value of the ``type`` argument:: >>> parser = argparse.ArgumentParser() Modified: python/trunk/Doc/reference/executionmodel.rst ============================================================================== --- python/trunk/Doc/reference/executionmodel.rst (original) +++ python/trunk/Doc/reference/executionmodel.rst Sun Mar 7 16:23:59 2010 @@ -119,7 +119,7 @@ .. index:: pair: restricted; execution -The built-in namespace associated with the execution of a code block is actually +The builtins namespace associated with the execution of a code block is actually found by looking up the name ``__builtins__`` in its global namespace; this should be a dictionary or a module (in the latter case the module's dictionary is used). By default, when in the :mod:`__main__` module, ``__builtins__`` is @@ -131,7 +131,7 @@ .. impl-detail:: Users should not touch ``__builtins__``; it is strictly an implementation - detail. Users wanting to override values in the built-in namespace should + detail. Users wanting to override values in the builtins namespace should :keyword:`import` the :mod:`__builtin__` (no 's') module and modify its attributes appropriately. Modified: python/trunk/Doc/whatsnew/2.6.rst ============================================================================== --- python/trunk/Doc/whatsnew/2.6.rst (original) +++ python/trunk/Doc/whatsnew/2.6.rst Sun Mar 7 16:23:59 2010 @@ -109,9 +109,9 @@ :func:`reduce` function. Python 3.0 adds several new built-in functions and changes the -semantics of some existing built-ins. Functions that are new in 3.0 +semantics of some existing builtins. Functions that are new in 3.0 such as :func:`bin` have simply been added to Python 2.6, but existing -built-ins haven't been changed; instead, the :mod:`future_builtins` +builtins haven't been changed; instead, the :mod:`future_builtins` module has versions with the new 3.0 semantics. Code written to be compatible with 3.0 can do ``from future_builtins import hex, map`` as necessary. @@ -833,7 +833,7 @@ else: return str(self) -There's also a :func:`format` built-in that will format a single +There's also a :func:`format` builtin that will format a single value. It calls the type's :meth:`__format__` method with the provided specifier:: @@ -1164,7 +1164,7 @@ feature for Python. The ABC support consists of an :mod:`abc` module containing a metaclass called :class:`ABCMeta`, special handling of this metaclass by the :func:`isinstance` and :func:`issubclass` -built-ins, and a collection of basic ABCs that the Python developers +builtins, and a collection of basic ABCs that the Python developers think will be widely useful. Future versions of Python will probably add more ABCs. @@ -1318,9 +1318,9 @@ >>> 0b101111 47 -The :func:`oct` built-in still returns numbers +The :func:`oct` builtin still returns numbers prefixed with a leading zero, and a new :func:`bin` -built-in returns the binary representation for a number:: +builtin returns the binary representation for a number:: >>> oct(42) '052' @@ -1329,7 +1329,7 @@ >>> bin(173) '0b10101101' -The :func:`int` and :func:`long` built-ins will now accept the "0o" +The :func:`int` and :func:`long` builtins will now accept the "0o" and "0b" prefixes when base-8 or base-2 are requested, or when the *base* argument is zero (signalling that the base used should be determined from the string):: @@ -1415,7 +1415,7 @@ combined using bitwise operations such as ``&`` and ``|``, and can be used as array indexes and slice boundaries. -In Python 3.0, the PEP slightly redefines the existing built-ins +In Python 3.0, the PEP slightly redefines the existing builtins :func:`round`, :func:`math.floor`, :func:`math.ceil`, and adds a new one, :func:`math.trunc`, that's been backported to Python 2.6. :func:`math.trunc` rounds toward zero, returning the closest @@ -1523,7 +1523,7 @@ Previously this would have been a syntax error. (Contributed by Amaury Forgeot d'Arc; :issue:`3473`.) -* A new built-in, ``next(iterator, [default])`` returns the next item +* A new builtin, ``next(iterator, [default])`` returns the next item from the specified iterator. If the *default* argument is supplied, it will be returned if *iterator* has been exhausted; otherwise, the :exc:`StopIteration` exception will be raised. (Backported @@ -1952,9 +1952,9 @@ (Contributed by Phil Schwartz; :issue:`1221598`.) * The :func:`reduce` built-in function is also available in the - :mod:`functools` module. In Python 3.0, the built-in has been + :mod:`functools` module. In Python 3.0, the builtin has been dropped and :func:`reduce` is only available from :mod:`functools`; - currently there are no plans to drop the built-in in the 2.x series. + currently there are no plans to drop the builtin in the 2.x series. (Patched by Christian Heimes; :issue:`1739906`.) * When possible, the :mod:`getpass` module will now use @@ -2756,7 +2756,7 @@ * ``filter(predicate, iterable)``, ``map(func, iterable1, ...)``: the 3.0 versions - return iterators, unlike the 2.x built-ins which return lists. + return iterators, unlike the 2.x builtins which return lists. * ``hex(value)``, ``oct(value)``: instead of calling the :meth:`__hex__` or :meth:`__oct__` methods, these versions will Modified: python/trunk/Misc/BeOS-setup.py ============================================================================== --- python/trunk/Misc/BeOS-setup.py (original) +++ python/trunk/Misc/BeOS-setup.py Sun Mar 7 16:23:59 2010 @@ -195,7 +195,7 @@ libraries=math_libs) ) # operator.add() and similar goodies exts.append( Extension('operator', ['operator.c']) ) - # access to the builtin codecs and codec registry + # access to the built-in codecs and codec registry exts.append( Extension('_codecs', ['_codecsmodule.c']) ) # Python C API test module exts.append( Extension('_testcapi', ['_testcapimodule.c']) ) Modified: python/trunk/Misc/HISTORY ============================================================================== --- python/trunk/Misc/HISTORY (original) +++ python/trunk/Misc/HISTORY Sun Mar 7 16:23:59 2010 @@ -1154,7 +1154,7 @@ - Bug #1244610, #1392915, fix build problem on OpenBSD 3.7 and 3.8. configure would break checking curses.h. -- Bug #959576: The pwd module is now builtin. This allows Python to be +- Bug #959576: The pwd module is now built in. This allows Python to be built on UNIX platforms without $HOME set. - Bug #1072182, fix some potential problems if characters are signed. @@ -1187,7 +1187,7 @@ it will now use a default error message in this case. - Replaced most Unicode charmap codecs with new ones using the - new Unicode translate string feature in the builtin charmap + new Unicode translate string feature in the built-in charmap codec; the codecs were created from the mapping tables available at ftp.unicode.org and contain a few updates (e.g. the Mac OS encodings now include a mapping for the Apple logo) @@ -1642,7 +1642,7 @@ current file number. - Patch #1349274: gettext.install() now optionally installs additional - translation functions other than _() in the builtin namespace. + translation functions other than _() in the builtins namespace. - Patch #1337756: fileinput now accepts Unicode filenames. @@ -2013,7 +2013,7 @@ - Patch #881820: look for openpty and forkpty also in libbsd. - The sources of zlib are now part of the Python distribution (zlib 1.2.3). - The zlib module is now builtin on Windows. + The zlib module is now built in on Windows. - Use -xcode=pic32 for CCSHARED on Solaris with SunPro. @@ -2848,7 +2848,7 @@ - Patch #846659. Fix an error in tarfile.py when using GNU longname/longlink creation. -- The obsolete FCNTL.py has been deleted. The builtin fcntl module +- The obsolete FCNTL.py has been deleted. The built-in fcntl module has been available (on platforms that support fcntl) since Python 1.5a3, and all FCNTL.py did is export fcntl's names, after generating a deprecation warning telling you to use fcntl directly. @@ -3102,7 +3102,7 @@ segfault in a debug build, but provided less predictable behavior in a release build. -- input() builtin function now respects compiler flags such as +- input() built-in function now respects compiler flags such as __future__ statements. SF patch 876178. - Removed PendingDeprecationWarning from apply(). apply() remains @@ -3163,12 +3163,12 @@ - Compiler flags set in PYTHONSTARTUP are now active in __main__. -- Added two builtin types, set() and frozenset(). +- Added two built-in types, set() and frozenset(). -- Added a reversed() builtin function that returns a reverse iterator +- Added a reversed() built-in function that returns a reverse iterator over a sequence. -- Added a sorted() builtin function that returns a new sorted list +- Added a sorted() built-in function that returns a new sorted list from any iterable. - CObjects are now mutable (on the C level) through PyCObject_SetVoidPtr. @@ -3207,7 +3207,7 @@ When comparing containers with cyclic references to themselves it will now just hit the recursion limit. See SF patch 825639. -- str and unicode builtin types now have an rsplit() method that is +- str and unicode built-in types now have an rsplit() method that is same as split() except that it scans the string from the end working towards the beginning. See SF feature request 801847. @@ -3758,7 +3758,7 @@ - A warning about assignments to module attributes that shadow builtins, present in earlier releases of 2.3, has been removed. -- It is not possible to create subclasses of builtin types like str +- It is not possible to create subclasses of built-in types like str and tuple that define an itemsize. Earlier releases of Python 2.3 allowed this by mistake, leading to crashes and other problems. @@ -4233,13 +4233,13 @@ - New format codes B, H, I, k and K have been implemented for PyArg_ParseTuple and PyBuild_Value. -- New builtin function sum(seq, start=0) returns the sum of all the +- New built-in function sum(seq, start=0) returns the sum of all the items in iterable object seq, plus start (items are normally numbers, and cannot be strings). - bool() called without arguments now returns False rather than raising an exception. This is consistent with calling the - constructors for the other builtin types -- called without argument + constructors for the other built-in types -- called without argument they all return the false value of that type. (SF patch #724135) - In support of PEP 269 (making the pgen parser generator accessible @@ -4764,7 +4764,7 @@ internals, and supplies some helpers for working with pickles, such as a symbolic pickle disassembler. -- Xmlrpclib.py now supports the builtin boolean type. +- xmlrpclib.py now supports the built-in boolean type. - py_compile has a new 'doraise' flag and a new PyCompileError exception. @@ -5015,8 +5015,8 @@ trace function to change which line will execute next. A command to exploit this from pdb has been added. [SF patch #643835] -- The _codecs support module for codecs.py was turned into a builtin - module to assure that at least the builtin codecs are available +- The _codecs support module for codecs.py was turned into a built-in + module to assure that at least the built-in codecs are available to the Python parser for source code decoding according to PEP 263. - issubclass now supports a tuple as the second argument, just like @@ -5174,13 +5174,13 @@ - Unicode objects in sys.path are no longer ignored but treated as directory names. -- Fixed string.startswith and string.endswith builtin methods +- Fixed string.startswith and string.endswith built-in methods so they accept negative indices. [SF bug 493951] - Fixed a bug with a continue inside a try block and a yield in the finally clause. [SF bug 567538] -- Most builtin sequences now support "extended slices", i.e. slices +- Most built-in sequences now support "extended slices", i.e. slices with a third "stride" parameter. For example, "hello world"[::-1] gives "dlrow olleh". @@ -5195,7 +5195,7 @@ method no longer exist. xrange repetition and slicing have been removed. -- New builtin function enumerate(x), from PEP 279. Example: +- New built-in function enumerate(x), from PEP 279. Example: enumerate("abc") is an iterator returning (0,"a"), (1,"b"), (2,"c"). The argument can be an arbitrary iterable object. @@ -5744,7 +5744,7 @@ Presumably 2.3a1 breaks such systems. If anyone uses such a system, help! - The configure option --without-doc-strings can be used to remove the - doc strings from the builtin functions and modules; this reduces the + doc strings from the built-in functions and modules; this reduces the size of the executable. - The universal newlines option (PEP 278) is on by default. On Unix @@ -5980,7 +5980,7 @@ available for convenience. - New Carbon modules File (implementing the APIs in Files.h and Aliases.h) - and Folder (APIs from Folders.h). The old macfs builtin module is + and Folder (APIs from Folders.h). The old macfs built-in module is gone, and replaced by a Python wrapper around the new modules. - Pathname handling should now be fully consistent: MacPython-OSX always uses @@ -6202,7 +6202,7 @@ C API ----- -- New function PyDict_MergeFromSeq2() exposes the builtin dict +- New function PyDict_MergeFromSeq2() exposes the built-in dict constructor's logic for updating a dictionary from an iterable object producing key-value pairs. @@ -6253,7 +6253,7 @@ using new-style MRO rules if any base class is a new-style class. This needs to be documented. -- The new builtin dictionary() constructor, and dictionary type, have +- The new built-in dictionary() constructor, and dictionary type, have been renamed to dict. This reflects a decade of common usage. - dict() now accepts an iterable object producing 2-sequences. For @@ -6708,9 +6708,9 @@ The new class must have the same C-level object layout as the old class. -- The builtin file type can be subclassed now. In the usual pattern, - "file" is the name of the builtin type, and file() is a new builtin - constructor, with the same signature as the builtin open() function. +- The built-in file type can be subclassed now. In the usual pattern, + "file" is the name of the built-in type, and file() is a new built-in + constructor, with the same signature as the built-in open() function. file() is now the preferred way to open a file. - Previously, __new__ would only see sequential arguments passed to @@ -6724,7 +6724,7 @@ - Previously, an operation on an instance of a subclass of an immutable type (int, long, float, complex, tuple, str, unicode), where the subtype didn't override the operation (and so the - operation was handled by the builtin type), could return that + operation was handled by the built-in type), could return that instance instead a value of the base type. For example, if s was of a str subclass type, s[:] returned s as-is. Now it returns a str with the same value as s. @@ -6772,7 +6772,7 @@ called for each iteration until it returns an empty string). - The codecs module has grown four new helper APIs to access - builtin codecs: getencoder(), getdecoder(), getreader(), + built-in codecs: getencoder(), getdecoder(), getreader(), getwriter(). - SimpleXMLRPCServer: a new module (based upon SimpleHTMLServer) @@ -7902,7 +7902,7 @@ In all previous version of Python, names were resolved in exactly three namespaces -- the local namespace, the global namespace, and - the builtin namespace. According to this old definition, if a + the builtins namespace. According to this old definition, if a function A is defined within a function B, the names bound in B are not visible in A. The new rules make names bound in B visible in A, unless A contains a name binding that hides the binding in B. @@ -7923,7 +7923,7 @@ return str.strip() Under the old rules, the name str in helper() is bound to the - builtin function str(). Under the new rules, it will be bound to + built-in function str(). Under the new rules, it will be bound to the argument named str and an error will occur when helper() is called. @@ -8421,7 +8421,7 @@ assignment, e.g. +=, was fixed. - Raise ZeroDivisionError when raising zero to a negative number, - e.g. 0.0 ** -2.0. Note that math.pow is unrelated to the builtin + e.g. 0.0 ** -2.0. Note that math.pow is unrelated to the built-in power operator and the result of math.pow(0.0, -2.0) will vary by platform. On Linux, it raises a ValueError. @@ -12671,7 +12671,7 @@ overriding modules with the same name. - Fixed some strange exceptions in __del__ methods in library modules -(e.g. urllib). This happens because the builtin names are already +(e.g. urllib). This happens because the built-in names are already deleted by the time __del__ is called. The solution (a hack, but it works) is to set some instance variables to 0 instead of None. @@ -13374,8 +13374,8 @@ f(a=1,a=2) is now a syntax error. -Changes to builtin features ---------------------------- +Changes to built-in features +---------------------------- - There's a new exception FloatingPointError (used only by Lee Busby's patches to catch floating point exceptions, at the moment). @@ -14675,7 +14675,7 @@ - New modules: errno, operator (XXX). -- Changes for use with Numerical Python: builtin function slice() and +- Changes for use with Numerical Python: built-in function slice() and Ellipses object, and corresponding syntax: x[lo:hi:stride] == x[slice(lo, hi, stride)] @@ -15163,7 +15163,7 @@ - The functions posix.popen() and posix.fdopen() now have an optional third argument to specify the buffer size, and default their second -(mode) argument to 'r' -- in analogy to the builtin open() function. +(mode) argument to 'r' -- in analogy to the built-in open() function. The same applies to posixfile.open() and the socket method makefile(). - The thread.exit_thread() function now raises SystemExit so that Modified: python/trunk/Misc/NEWS ============================================================================== --- python/trunk/Misc/NEWS (original) +++ python/trunk/Misc/NEWS Sun Mar 7 16:23:59 2010 @@ -673,8 +673,8 @@ - Issue #4618: When unicode arguments are passed to print(), the default separator and end should be unicode also. -- Issue #6119: Fixed a incorrect Py3k warning about order comparisons of builtin - functions and methods. +- Issue #6119: Fixed an incorrect Py3k warning about order comparisons of + built-in functions and methods. - Issue #6347: Include inttypes.h as well as stdint.h in pyport.h. This fixes a build failure on HP-UX: int32_t and uint32_t are @@ -778,7 +778,7 @@ correctly rounded. - Issue #5787: object.__getattribute__(some_type, "__bases__") segfaulted on - some builtin types. + some built-in types. - Issue #1869: fix a couple of minor round() issues. round(5e15+1) was giving 5e15+2; round(-0.0) was losing the sign of the zero. @@ -3747,7 +3747,7 @@ - Fixed a minor memory leak in dictobject.c. The content of the free list was not freed on interpreter shutdown. -- Limit free list of method and builtin function objects to 256 +- Limit free list of method and built-in function objects to 256 entries each. - Patch #1953: Added ``sys._compact_freelists()`` and the C API @@ -3881,7 +3881,7 @@ - Fix warnings found by the new version of the Coverity checker. -- The enumerate() builtin function is no longer bounded to sequences +- The enumerate() built-in function is no longer bounded to sequences smaller than LONG_MAX. Formerly, it raised an OverflowError. Now, automatically shifts from ints to longs. @@ -3942,7 +3942,7 @@ - Deprecate BaseException.message as per PEP 352. - Issue #1303614: don't expose object's __dict__ when the dict is - inherited from a builtin base. + inherited from a built-in base. - When __slots__ are set to a unicode string, make it work the same as setting a plain string, ie don't expand to single letter identifiers. @@ -4851,7 +4851,7 @@ GNU modes. - Bug #1586448: the compiler module now emits the same bytecode for - list comprehensions as the builtin compiler, using the LIST_APPEND + list comprehensions as the built-in compiler, using the LIST_APPEND opcode. - Fix codecs.EncodedFile which did not use file_encoding in 2.5.0, and @@ -5083,7 +5083,7 @@ - Bug #1653736: Complain about keyword arguments to time.isoformat. - Bug #1486663: don't reject keyword arguments for subclasses of - builtin types. + built-in types. - Patch #1610575: The struct module now supports the 't' code, for C99 _Bool. @@ -5266,7 +5266,7 @@ - Bug #1629566: clarify the docs on the return values of parsedate() and parsedate_tz() in email.utils and rfc822. -- Patch #1671450: add a section about subclassing builtin types to the +- Patch #1671450: add a section about subclassing built-in types to the "extending and embedding" tutorial. - Bug #1629125: fix wrong data type (int -> Py_ssize_t) in PyDict_Next Modified: python/trunk/Misc/SpecialBuilds.txt ============================================================================== --- python/trunk/Misc/SpecialBuilds.txt (original) +++ python/trunk/Misc/SpecialBuilds.txt Sun Mar 7 16:23:59 2010 @@ -37,7 +37,7 @@ Turn on heavy reference debugging. This is major surgery. Every PyObject grows two more pointers, to maintain a doubly-linked list of all live -heap-allocated objects. Most builtin type objects are not in this list, +heap-allocated objects. Most built-in type objects are not in this list, as they're statically allocated. Starting in Python 2.3, if COUNT_ALLOCS (see below) is also defined, a static type object T does appear in this list if at least one object of type T has been created. From python-checkins at python.org Sun Mar 7 16:27:39 2010 From: python-checkins at python.org (florent.xicluna) Date: Sun, 7 Mar 2010 16:27:39 +0100 (CET) Subject: [Python-checkins] r78761 - python/trunk/Lib/test/test_subprocess.py Message-ID: <20100307152739.978CAEE9A2@mail.python.org> Author: florent.xicluna Date: Sun Mar 7 16:27:39 2010 New Revision: 78761 Log: Do not fail if returncode is 0 on send_signal/kill/terminate, for win32 platforms. Do not hide the KeyboardInterrupt on POSIX platforms. Modified: python/trunk/Lib/test/test_subprocess.py Modified: python/trunk/Lib/test/test_subprocess.py ============================================================================== --- python/trunk/Lib/test/test_subprocess.py (original) +++ python/trunk/Lib/test/test_subprocess.py Sun Mar 7 16:27:39 2010 @@ -650,42 +650,39 @@ os.remove(fname) self.assertEqual(rc, 47) - def test_send_signal(self): + def _kill_process(self, method, *args): # Do not inherit file handles from the parent. # It should fix failures on some platforms. p = subprocess.Popen([sys.executable, "-c", "input()"], close_fds=True, - stdin=subprocess.PIPE, stderr=subprocess.PIPE) + stdin=subprocess.PIPE) - # Let the process initialize correctly (Issue #3137) + # Let the process initialize (Issue #3137) time.sleep(0.1) + # The process should not terminate prematurely self.assertIsNone(p.poll()) + # Retry if the process do not receive the signal. count, maxcount = 0, 3 - # Retry if the process do not receive the SIGINT signal. while count < maxcount and p.poll() is None: - p.send_signal(signal.SIGINT) + getattr(p, method)(*args) time.sleep(0.1) count += 1 - self.assertIsNotNone(p.poll(), "the subprocess did not receive " - "the signal SIGINT") + + self.assertIsNotNone(p.poll(), "the subprocess did not terminate") if count > 1: - print >>sys.stderr, ("p.send_signal(SIGINT) succeeded " - "after {} attempts".format(count)) + print >>sys.stderr, ("p.{}{} succeeded after " + "{} attempts".format(method, args, count)) + return p + + def test_send_signal(self): + p = self._kill_process('send_signal', signal.SIGINT) self.assertNotEqual(p.wait(), 0) def test_kill(self): - p = subprocess.Popen([sys.executable, "-c", "input()"], - stdin=subprocess.PIPE, close_fds=True) - - self.assertIsNone(p.poll()) - p.kill() + p = self._kill_process('kill') self.assertEqual(p.wait(), -signal.SIGKILL) def test_terminate(self): - p = subprocess.Popen([sys.executable, "-c", "input()"], - stdin=subprocess.PIPE, close_fds=True) - - self.assertIsNone(p.poll()) - p.terminate() + p = self._kill_process('terminate') self.assertEqual(p.wait(), -signal.SIGTERM) @@ -768,31 +765,39 @@ ' -c "import sys; sys.exit(47)"') self.assertEqual(rc, 47) - def test_send_signal(self): - # Redirect the stdin file handle. - # It should fix failure on some win32 platforms. - p = subprocess.Popen([sys.executable, "-c", "input()"], - stdin=subprocess.PIPE) + def _kill_process(self, method, *args): + # Do not inherit file handles from the parent. + p = subprocess.Popen([sys.executable, "-c", "input()"], close_fds=True) - self.assertIs(p.poll(), None) - p.send_signal(signal.SIGTERM) - self.assertNotEqual(p.wait(), 0) + # Let the process initialize + time.sleep(0.1) + # The process should not terminate prematurely + self.assertIsNone(p.poll()) + # Retry if the process do not receive the signal. + count, maxcount = 0, 3 + while count < maxcount and p.poll() is None: + getattr(p, method)(*args) + time.sleep(0.1) + count += 1 - def test_kill(self): - p = subprocess.Popen([sys.executable, "-c", "input()"], - stdin=subprocess.PIPE) + returncode = p.poll() + self.assertIsNotNone(returncode, "the subprocess did not terminate") + if count > 1: + print >>sys.stderr, ("p.{}{} succeeded after " + "{} attempts".format(method, args, count)) + if returncode == 0: + # On some win32 platforms, it returns 0. See #2777. + print >>sys.stderr, "p.{}{} returned 0".format(method, args) + self.assertEqual(p.wait(), returncode) - self.assertIs(p.poll(), None) - p.kill() - self.assertNotEqual(p.wait(), 0) + def test_send_signal(self): + self._kill_process('send_signal', signal.SIGTERM) - def test_terminate(self): - p = subprocess.Popen([sys.executable, "-c", "input()"], - stdin=subprocess.PIPE) + def test_kill(self): + self._kill_process('kill') - self.assertIs(p.poll(), None) - p.terminate() - self.assertNotEqual(p.wait(), 0) + def test_terminate(self): + self._kill_process('terminate') @unittest.skipUnless(getattr(subprocess, '_has_poll', False), From florent.xicluna at m4x.org Sun Mar 7 16:53:50 2010 From: florent.xicluna at m4x.org (Florent XICLUNA) Date: Sun, 7 Mar 2010 16:53:50 +0100 Subject: [Python-checkins] r78758 - in python/trunk: Lib/test/string_tests.py Lib/test/test_ascii_formatd.py Lib/test/test_fileio.py Lib/test/test_index.py Lib/test/test_random.py Lib/test/test_support.py Lib/test/test_unicode.py Misc/NEWS In-Reply-To: <4B93A1D4.4050605@gmail.com> References: <20100307121833.758EEFB97@mail.python.org> <4B93A1D4.4050605@gmail.com> Message-ID: 2010/3/7 Nick Coghlan: > > The default here needs to be "quiet=True" so that it gives the same > behaviour as the old one if you don't provide any arguments. The test failure (with quiet=False) will highlight when the context manager "check_warnings()" is no longer needed. It displays an helpful message to identify which warnings are no longer raised. Obviously these new features will not be backported to 2.6. > The test_support module documentation also needs to be updated Thank you for noticing the documentation. I will add these methods. 2010/3/7 Mark Dickinson: > > What's the reason for only allowing filtering on the warning category > and message, but not on line number and module? > These helpers were changed to deal with #7092 more elegantly, while keeping an eye on the Warnings, and see if they are effectively raised. We didn't need the (line, module) arguments for our use case. But if you need them, someone could propose a patch. -- Florent From python-checkins at python.org Sun Mar 7 17:24:45 2010 From: python-checkins at python.org (mark.dickinson) Date: Sun, 7 Mar 2010 17:24:45 +0100 (CET) Subject: [Python-checkins] r78762 - in python/trunk: Doc/library/struct.rst Lib/test/test_struct.py Misc/NEWS Modules/_struct.c Message-ID: <20100307162445.C1A07EE9BE@mail.python.org> Author: mark.dickinson Date: Sun Mar 7 17:24:45 2010 New Revision: 78762 Log: Issue #1530559: When packing a non-integer with any integer conversion code using struct.pack, attempt to convert to an integer first using the argument's __int__ method (if present). Also raise a DeprecationWarning for any such usage of __int__. This fixes a regression from 2.6, where some (but not all) integer conversion codes already used __int__. Modified: python/trunk/Doc/library/struct.rst python/trunk/Lib/test/test_struct.py python/trunk/Misc/NEWS python/trunk/Modules/_struct.c Modified: python/trunk/Doc/library/struct.rst ============================================================================== --- python/trunk/Doc/library/struct.rst (original) +++ python/trunk/Doc/library/struct.rst Sun Mar 7 17:24:45 2010 @@ -123,6 +123,18 @@ .. versionadded:: 2.2 +(3) + When attempting to pack a non-integer using any of the integer conversion + codes, the non-integer's :meth:`__int__` method (if present) will be called + to convert to an integer before packing. However, this behaviour is + deprecated, and will raise :exc:`DeprecationWarning`. + + .. versionchanged:: 2.7 + Prior to version 2.7, not all integer conversion codes would use the + :meth:`__int__` method to convert, and :exc:`DeprecationWarning` was + raised only for float arguments. + + A format character may be preceded by an integral repeat count. For example, the format string ``'4h'`` means exactly the same as ``'hhhh'``. Modified: python/trunk/Lib/test/test_struct.py ============================================================================== --- python/trunk/Lib/test/test_struct.py (original) +++ python/trunk/Lib/test/test_struct.py Sun Mar 7 17:24:45 2010 @@ -2,10 +2,6 @@ import unittest import struct import warnings -warnings.filterwarnings("ignore", "struct integer overflow masking is deprecated", - DeprecationWarning) - -from functools import wraps from test.test_support import run_unittest import sys @@ -35,22 +31,27 @@ class StructTest(unittest.TestCase): def check_float_coerce(self, format, number): - # SF bug 1530559. struct.pack raises TypeError where it used to convert. - with warnings.catch_warnings(): + # SF bug 1530559. struct.pack raises TypeError where it used + # to convert. + with warnings.catch_warnings(record=True) as w: + # ignore everything except the + # DeprecationWarning we're looking for + warnings.simplefilter("ignore") warnings.filterwarnings( - "ignore", - category=DeprecationWarning, + "always", message=".*integer argument expected, got float", - module=__name__) - self.assertEqual(struct.pack(format, number), struct.pack(format, int(number))) - - with warnings.catch_warnings(): - warnings.filterwarnings( - "error", category=DeprecationWarning, - message=".*integer argument expected, got float", - module="unittest") - self.assertRaises(DeprecationWarning, struct.pack, format, number) + module=__name__ + ) + got = struct.pack(format, number) + nwarn = len(w) + self.assertEqual(nwarn, 1, + "expected exactly one warning from " + "struct.pack({!r}, {!r}); " + "got {} warnings".format( + format, number, nwarn)) + expected = struct.pack(format, int(number)) + self.assertEqual(got, expected) def test_isbigendian(self): self.assertEqual((struct.pack('=i', 1)[0] == chr(0)), ISBIGENDIAN) @@ -291,17 +292,41 @@ class NotAnIntOS: def __int__(self): - return 10585 + return 85 def __long__(self): return -163L - for badobject in ("a string", 3+42j, randrange, - NotAnIntNS(), NotAnIntOS()): - self.assertRaises(struct.error, - struct.pack, format, + for badobject in ("a string", 3+42j, randrange): + self.assertRaises((TypeError, struct.error), + struct.pack, self.format, badobject) + # an attempt to convert a non-integer (with an + # implicit conversion via __int__) should succeed, + # with a DeprecationWarning + for nonint in NotAnIntNS(), NotAnIntOS(): + with warnings.catch_warnings(record=True) as w: + # ignore everything except the + # DeprecationWarning we're looking for + warnings.simplefilter("ignore") + warnings.filterwarnings( + "always", + message=(".*integer argument expected, " + "got non-integer.*"), + category=DeprecationWarning, + module=__name__ + ) + got = struct.pack(self.format, nonint) + nwarn = len(w) + self.assertEqual(nwarn, 1, + "expected exactly one warning from " + "struct.pack({!r}, {!r}); " + "got {} warnings".format( + self.format, nonint, nwarn)) + expected = struct.pack(self.format, int(nonint)) + self.assertEqual(got, expected) + byteorders = '', '@', '=', '<', '>', '!' for code in integer_codes: for byteorder in byteorders: Modified: python/trunk/Misc/NEWS ============================================================================== --- python/trunk/Misc/NEWS (original) +++ python/trunk/Misc/NEWS Sun Mar 7 17:24:45 2010 @@ -15,6 +15,18 @@ Library ------- +Extension Modules +----------------- + +- Issue #1530559: When passing a non-integer argument to struct.pack + with *any* integer format code (one of 'bBhHiIlLqQ'), struct.pack + attempts to use the argument's __int__ method to convert to an + integer before packing. It also produces a DeprecationWarning in + this case. (In Python 2.6, the behaviour was inconsistent: __int__ + was used for some integer codes but not for others, and the set of + integer codes for which it was used differed between native packing + and standard packing.) + What's New in Python 2.7 alpha 4? ================================= @@ -2192,6 +2204,10 @@ TypeError used to be raised (with a confusing error message) for 'I', 'L', '*B', '*H', '*I', '*L', and struct.error in other cases. + Note: as of Python 2.7 beta 1, the above is out of date. In 2.7 + beta 1, any argument with an __int__ method can be packed, but use + of this feature triggers a DeprecationWarning. + - Issue #4873: Fix resource leaks in error cases of pwd and grp. - Issue #4751: For hashlib algorithms provided by OpenSSL, the Python Modified: python/trunk/Modules/_struct.c ============================================================================== --- python/trunk/Modules/_struct.c (original) +++ python/trunk/Modules/_struct.c Sun Mar 7 17:24:45 2010 @@ -17,7 +17,10 @@ typedef int Py_ssize_t; #endif -#define FLOAT_COERCE "integer argument expected, got float" +/* warning messages */ +#define FLOAT_COERCE_WARN "integer argument expected, got float" +#define NON_INTEGER_WARN "integer argument expected, got non-integer " \ + "(implicit conversion using __int__ is deprecated)" /* The translation function for each format character is table driven */ @@ -104,21 +107,58 @@ static PyObject * get_pylong(PyObject *v) { + PyObject *r; assert(v != NULL); - if (PyInt_Check(v)) - return PyLong_FromLong(PyInt_AS_LONG(v)); - if (PyLong_Check(v)) { - Py_INCREF(v); - return v; - } - if (PyFloat_Check(v)) { - if (PyErr_WarnEx(PyExc_DeprecationWarning, FLOAT_COERCE, 1)<0) + if (!PyInt_Check(v) && !PyLong_Check(v)) { + PyNumberMethods *m; + /* Not an integer; try to use __int__ to convert to an + integer. This behaviour is deprecated, and is removed in + Python 3.x. */ + m = Py_TYPE(v)->tp_as_number; + if (m != NULL && m->nb_int != NULL) { + /* Special case warning message for floats, for + backwards compatibility. */ + if (PyFloat_Check(v)) { + if (PyErr_WarnEx(PyExc_DeprecationWarning, + FLOAT_COERCE_WARN, 1)) + return NULL; + } + else { + if (PyErr_WarnEx(PyExc_DeprecationWarning, + NON_INTEGER_WARN, 1)) + return NULL; + } + v = m->nb_int(v); + if (v == NULL) + return NULL; + if (!PyInt_Check(v) && !PyLong_Check(v)) { + PyErr_SetString(PyExc_TypeError, + "__int__ method returned non-integer"); + return NULL; + } + } + else { + PyErr_SetString(StructError, + "cannot convert argument to integer"); return NULL; - return PyNumber_Long(v); + } } - PyErr_SetString(StructError, - "cannot convert argument to long"); - return NULL; + else + /* Ensure we own a reference to v. */ + Py_INCREF(v); + + if (PyInt_Check(v)) { + r = PyLong_FromLong(PyInt_AS_LONG(v)); + Py_DECREF(v); + } + else if (PyLong_Check(v)) { + assert(PyLong_Check(v)); + r = v; + } + else + assert(0); /* shouldn't ever get here */ + + return r; } /* Helper to convert a Python object to a C long. Sets an exception From python-checkins at python.org Sun Mar 7 17:25:25 2010 From: python-checkins at python.org (mark.dickinson) Date: Sun, 7 Mar 2010 17:25:25 +0100 (CET) Subject: [Python-checkins] r78763 - python/branches/py3k Message-ID: <20100307162525.C25E4EE9C7@mail.python.org> Author: mark.dickinson Date: Sun Mar 7 17:25:25 2010 New Revision: 78763 Log: Blocked revisions 78762 via svnmerge ........ r78762 | mark.dickinson | 2010-03-07 16:24:45 +0000 (Sun, 07 Mar 2010) | 8 lines Issue #1530559: When packing a non-integer with any integer conversion code using struct.pack, attempt to convert to an integer first using the argument's __int__ method (if present). Also raise a DeprecationWarning for any such usage of __int__. This fixes a regression from 2.6, where some (but not all) integer conversion codes already used __int__. ........ Modified: python/branches/py3k/ (props changed) From eric at trueblade.com Sun Mar 7 17:55:46 2010 From: eric at trueblade.com (Eric Smith) Date: Sun, 07 Mar 2010 11:55:46 -0500 Subject: [Python-checkins] r78758 - in python/trunk: Lib/test/string_tests.py Lib/test/test_ascii_formatd.py Lib/test/test_fileio.py Lib/test/test_index.py Lib/test/test_random.py Lib/test/test_support.py Lib/test/test_unicode.py Misc/NEWS In-Reply-To: References: <20100307121833.758EEFB97@mail.python.org> <4B93A1D4.4050605@gmail.com> Message-ID: <4B93DA92.7060508@trueblade.com> Florent XICLUNA wrote: > 2010/3/7 Nick Coghlan: >> The default here needs to be "quiet=True" so that it gives the same >> behaviour as the old one if you don't provide any arguments. > > The test failure (with quiet=False) will highlight when the context > manager "check_warnings()" is no longer needed. It displays an helpful > message to identify which warnings are no longer raised. > Obviously these new features will not be backported to 2.6. I think the issue is that we don't want to break compatibility, even with major versions (2.6 -> 2.7), unless we have good reason to and it's discussed on python-dev. Eric. From python-checkins at python.org Sun Mar 7 18:10:19 2010 From: python-checkins at python.org (mark.dickinson) Date: Sun, 7 Mar 2010 18:10:19 +0100 (CET) Subject: [Python-checkins] r78764 - python/trunk/Modules/_struct.c Message-ID: <20100307171019.B1839FDCE@mail.python.org> Author: mark.dickinson Date: Sun Mar 7 18:10:19 2010 New Revision: 78764 Log: Silence compiler warning. Modified: python/trunk/Modules/_struct.c Modified: python/trunk/Modules/_struct.c ============================================================================== --- python/trunk/Modules/_struct.c (original) +++ python/trunk/Modules/_struct.c Sun Mar 7 18:10:19 2010 @@ -155,8 +155,11 @@ assert(PyLong_Check(v)); r = v; } - else + else { + r = NULL; /* silence compiler warning about + possibly uninitialized variable */ assert(0); /* shouldn't ever get here */ + } return r; } From python-checkins at python.org Sun Mar 7 18:10:42 2010 From: python-checkins at python.org (mark.dickinson) Date: Sun, 7 Mar 2010 18:10:42 +0100 (CET) Subject: [Python-checkins] r78765 - python/branches/py3k Message-ID: <20100307171042.B0DE7FDCE@mail.python.org> Author: mark.dickinson Date: Sun Mar 7 18:10:42 2010 New Revision: 78765 Log: Blocked revisions 78764 via svnmerge ........ r78764 | mark.dickinson | 2010-03-07 17:10:19 +0000 (Sun, 07 Mar 2010) | 1 line Silence compiler warning. ........ Modified: python/branches/py3k/ (props changed) From python-checkins at python.org Sun Mar 7 18:10:51 2010 From: python-checkins at python.org (benjamin.peterson) Date: Sun, 7 Mar 2010 18:10:51 +0100 (CET) Subject: [Python-checkins] r78766 - in python/branches/py3k: Lib/test/test_exceptions.py Misc/NEWS Python/ceval.c Message-ID: <20100307171051.41A88EE9C9@mail.python.org> Author: benjamin.peterson Date: Sun Mar 7 18:10:51 2010 New Revision: 78766 Log: prevent generator finalization from invalidating sys.exc_info() #7173 Modified: python/branches/py3k/Lib/test/test_exceptions.py python/branches/py3k/Misc/NEWS python/branches/py3k/Python/ceval.c Modified: python/branches/py3k/Lib/test/test_exceptions.py ============================================================================== --- python/branches/py3k/Lib/test/test_exceptions.py (original) +++ python/branches/py3k/Lib/test/test_exceptions.py Sun Mar 7 18:10:51 2010 @@ -6,7 +6,8 @@ import pickle import weakref -from test.support import TESTFN, unlink, run_unittest, captured_output +from test.support import (TESTFN, unlink, run_unittest, captured_output, + gc_collect) # XXX This is not really enough, each *operation* should be tested! @@ -554,6 +555,20 @@ del g self.assertEquals(sys.exc_info()[0], TypeError) + def test_generator_finalizing_and_exc_info(self): + # See #7173 + def simple_gen(): + yield 1 + def run_gen(): + gen = simple_gen() + try: + raise RuntimeError + except RuntimeError: + return next(gen) + run_gen() + gc_collect() + self.assertEqual(sys.exc_info(), (None, None, None)) + def test_3114(self): # Bug #3114: in its destructor, MyObject retrieves a pointer to # obsolete and/or deallocated objects. Modified: python/branches/py3k/Misc/NEWS ============================================================================== --- python/branches/py3k/Misc/NEWS (original) +++ python/branches/py3k/Misc/NEWS Sun Mar 7 18:10:51 2010 @@ -12,6 +12,8 @@ Core and Builtins ----------------- +- Issue #7173: Generator finalization could invalidate sys.exc_info(). + - Issue #7544: Preallocate thread memory before creating the thread to avoid a fatal error in low memory condition. Modified: python/branches/py3k/Python/ceval.c ============================================================================== --- python/branches/py3k/Python/ceval.c (original) +++ python/branches/py3k/Python/ceval.c Sun Mar 7 18:10:51 2010 @@ -1159,7 +1159,7 @@ assert(stack_pointer != NULL); f->f_stacktop = NULL; /* remains NULL unless yield suspends frame */ - if (f->f_code->co_flags & CO_GENERATOR) { + if (co->co_flags & CO_GENERATOR && !throwflag) { if (f->f_exc_type != NULL && f->f_exc_type != Py_None) { /* We were in an except handler when we left, restore the exception state which was put aside From python-checkins at python.org Sun Mar 7 18:12:23 2010 From: python-checkins at python.org (florent.xicluna) Date: Sun, 7 Mar 2010 18:12:23 +0100 (CET) Subject: [Python-checkins] r78767 - python/trunk/Lib/test/test_subprocess.py Message-ID: <20100307171223.33FA7FC55@mail.python.org> Author: florent.xicluna Date: Sun Mar 7 18:12:23 2010 New Revision: 78767 Log: #2777: Try hard to make Win7 buildbot happy... Modified: python/trunk/Lib/test/test_subprocess.py Modified: python/trunk/Lib/test/test_subprocess.py ============================================================================== --- python/trunk/Lib/test/test_subprocess.py (original) +++ python/trunk/Lib/test/test_subprocess.py Sun Mar 7 18:12:23 2010 @@ -766,8 +766,9 @@ self.assertEqual(rc, 47) def _kill_process(self, method, *args): - # Do not inherit file handles from the parent. - p = subprocess.Popen([sys.executable, "-c", "input()"], close_fds=True) + # Some win32 buildbot raises EOFError if stdin is inherited + p = subprocess.Popen([sys.executable, "-c", "input()"], + stdin=subprocess.PIPE) # Let the process initialize time.sleep(0.1) From python-checkins at python.org Sun Mar 7 18:14:15 2010 From: python-checkins at python.org (benjamin.peterson) Date: Sun, 7 Mar 2010 18:14:15 +0100 (CET) Subject: [Python-checkins] r78768 - in python/branches/release31-maint: Lib/test/test_exceptions.py Misc/NEWS Python/ceval.c Message-ID: <20100307171415.F0DD8FDF7@mail.python.org> Author: benjamin.peterson Date: Sun Mar 7 18:14:15 2010 New Revision: 78768 Log: Merged revisions 78766 via svnmerge from svn+ssh://pythondev at svn.python.org/python/branches/py3k ........ r78766 | benjamin.peterson | 2010-03-07 11:10:51 -0600 (Sun, 07 Mar 2010) | 1 line prevent generator finalization from invalidating sys.exc_info() #7173 ........ Modified: python/branches/release31-maint/ (props changed) python/branches/release31-maint/Lib/test/test_exceptions.py python/branches/release31-maint/Misc/NEWS python/branches/release31-maint/Python/ceval.c Modified: python/branches/release31-maint/Lib/test/test_exceptions.py ============================================================================== --- python/branches/release31-maint/Lib/test/test_exceptions.py (original) +++ python/branches/release31-maint/Lib/test/test_exceptions.py Sun Mar 7 18:14:15 2010 @@ -6,7 +6,8 @@ import pickle import weakref -from test.support import TESTFN, unlink, run_unittest, captured_output +from test.support import (TESTFN, unlink, run_unittest, captured_output, + gc_collect) # XXX This is not really enough, each *operation* should be tested! @@ -554,6 +555,20 @@ del g self.assertEquals(sys.exc_info()[0], TypeError) + def test_generator_finalizing_and_exc_info(self): + # See #7173 + def simple_gen(): + yield 1 + def run_gen(): + gen = simple_gen() + try: + raise RuntimeError + except RuntimeError: + return next(gen) + run_gen() + gc_collect() + self.assertEqual(sys.exc_info(), (None, None, None)) + def test_3114(self): # Bug #3114: in its destructor, MyObject retrieves a pointer to # obsolete and/or deallocated objects. Modified: python/branches/release31-maint/Misc/NEWS ============================================================================== --- python/branches/release31-maint/Misc/NEWS (original) +++ python/branches/release31-maint/Misc/NEWS Sun Mar 7 18:14:15 2010 @@ -12,6 +12,8 @@ Core and Builtins ----------------- +- Issue #7173: Generator finalization could invalidate sys.exc_info(). + Library ------- Modified: python/branches/release31-maint/Python/ceval.c ============================================================================== --- python/branches/release31-maint/Python/ceval.c (original) +++ python/branches/release31-maint/Python/ceval.c Sun Mar 7 18:14:15 2010 @@ -1107,7 +1107,7 @@ assert(stack_pointer != NULL); f->f_stacktop = NULL; /* remains NULL unless yield suspends frame */ - if (f->f_code->co_flags & CO_GENERATOR) { + if (co->co_flags & CO_GENERATOR && !throwflag) { if (f->f_exc_type != NULL && f->f_exc_type != Py_None) { /* We were in an except handler when we left, restore the exception state which was put aside From python-checkins at python.org Sun Mar 7 20:14:12 2010 From: python-checkins at python.org (florent.xicluna) Date: Sun, 7 Mar 2010 20:14:12 +0100 (CET) Subject: [Python-checkins] r78769 - in python/trunk: Doc/library/test.rst Lib/test/test_support.py Message-ID: <20100307191413.00ADBEE9C8@mail.python.org> Author: florent.xicluna Date: Sun Mar 7 20:14:12 2010 New Revision: 78769 Log: Refresh the documentation for the test.test_support module. Modified: python/trunk/Doc/library/test.rst python/trunk/Lib/test/test_support.py Modified: python/trunk/Doc/library/test.rst ============================================================================== --- python/trunk/Doc/library/test.rst (original) +++ python/trunk/Doc/library/test.rst Sun Mar 7 20:14:12 2010 @@ -131,13 +131,13 @@ self.func(self.arg) class AcceptLists(TestFuncAcceptsSequences): - arg = [1,2,3] + arg = [1, 2, 3] class AcceptStrings(TestFuncAcceptsSequences): arg = 'abc' class AcceptTuples(TestFuncAcceptsSequences): - arg = (1,2,3) + arg = (1, 2, 3) .. seealso:: @@ -207,16 +207,9 @@ methods. -.. exception:: TestSkipped - - Subclass of :exc:`TestFailed`. Raised when a test is skipped. This occurs when a - needed resource (such as a network connection) is not available at the time of - testing. - - .. exception:: ResourceDenied - Subclass of :exc:`TestSkipped`. Raised when a resource (such as a network + Subclass of :exc:`unittest.SkipTest`. Raised when a resource (such as a network connection) is not available. Raised by the :func:`requires` function. The :mod:`test.test_support` module defines the following constants: @@ -241,7 +234,7 @@ .. data:: TESTFN - Set to the path that a temporary file may be created at. Any temporary that is + Set to the name that a temporary file could use. Any temporary file that is created should be closed and unlinked (removed). The :mod:`test.test_support` module defines the following functions: @@ -249,21 +242,21 @@ .. function:: forget(module_name) - Removes the module named *module_name* from ``sys.modules`` and deletes any + Remove the module named *module_name* from ``sys.modules`` and deletes any byte-compiled files of the module. .. function:: is_resource_enabled(resource) - Returns :const:`True` if *resource* is enabled and available. The list of + Return :const:`True` if *resource* is enabled and available. The list of available resources is only set when :mod:`test.regrtest` is executing the tests. .. function:: requires(resource[, msg]) - Raises :exc:`ResourceDenied` if *resource* is not available. *msg* is the - argument to :exc:`ResourceDenied` if it is raised. Always returns true if called + Raise :exc:`ResourceDenied` if *resource* is not available. *msg* is the + argument to :exc:`ResourceDenied` if it is raised. Always returns True if called by a function whose ``__name__`` is ``'__main__'``. Used when tests are executed by :mod:`test.regrtest`. @@ -291,14 +284,24 @@ This will run all tests defined in the named module. -.. function:: check_warnings() +.. function:: check_warnings(*filters, quiet=False) A convenience wrapper for ``warnings.catch_warnings()`` that makes it easier to test that a warning was correctly raised with a single assertion. It is approximately equivalent to calling ``warnings.catch_warnings(record=True)``. - The main difference is that on entry to the context manager, a + It accepts 2-tuples ``("message regexp", WarningCategory)`` as positional + arguments. When the optional keyword argument ``quiet`` is True, it does + not fail if a filter catches nothing. Without argument, it defaults to:: + + check_warnings(("", Warning), quiet=False) + + The main difference is that it verifies the warnings raised. If some filter + did not catch any warning, the test fails. If some warnings are not caught, + the test fails, too. To disable these checks, use argument ``quiet=True``. + + Another significant difference is that on entry to the context manager, a :class:`WarningRecorder` instance is returned instead of a simple list. The underlying warnings list is available via the recorder object's :attr:`warnings` attribute, while the attributes of the last raised @@ -308,20 +311,49 @@ A :meth:`reset` method is also provided on the recorder object. This method simply clears the warning list. - The context manager is used like this:: + The context manager may be used like this:: + + import warnings + + with check_warnings(): + exec('assert(False, "Hey!")') + warnings.warn(UserWarning("Hide me!")) + + with check_warnings(("assertion is always true", SyntaxWarning), + ("", UserWarning)): + exec('assert(False, "Hey!")') + warnings.warn(UserWarning("Hide me!")) - with check_warnings() as w: + with check_warnings(quiet=True) as w: warnings.simplefilter("always") warnings.warn("foo") - assert str(w.message) == "foo" + assert str(w.args[0]) == "foo" warnings.warn("bar") - assert str(w.message) == "bar" - assert str(w.warnings[0].message) == "foo" - assert str(w.warnings[1].message) == "bar" + assert str(w.args[0]) == "bar" + assert str(w.warnings[0].args[0]) == "foo" + assert str(w.warnings[1].args[0]) == "bar" w.reset() assert len(w.warnings) == 0 .. versionadded:: 2.6 + .. versionchanged:: 2.7 + The test fails when the context manager do not catch any warning. + New optional attributes ``*filters`` and ``quiet``. + + +.. function:: check_py3k_warnings(*filters, quiet=False) + + Same as :func:`check_warnings` but for Python 3 compatibility warnings. + If ``sys.py3kwarning == 1``, it checks if the warning is effectively raised. + If ``sys.py3kwarning == 0``, it checks that no warning is raised. + + It accepts 2-tuples ``("message regexp", WarningCategory)`` as positional + arguments. When the optional keyword argument ``quiet`` is True, it does + not fail if a filter catches nothing. Without argument, it defaults to:: + + check_py3k_warnings(("", DeprecationWarning), quiet=False) + + .. versionadded:: 2.7 .. function:: captured_stdout() Modified: python/trunk/Lib/test/test_support.py ============================================================================== --- python/trunk/Lib/test/test_support.py (original) +++ python/trunk/Lib/test/test_support.py Sun Mar 7 20:14:12 2010 @@ -539,11 +539,11 @@ if not seen and not quiet: # This filter caught nothing missing.append((msg, cat.__name__)) - for exc in reraise: - raise AssertionError("unhandled warning %r" % exc) - for filter in missing: - raise AssertionError("filter (%r, %s) did not caught any warning" % - filter) + if reraise: + raise AssertionError("unhandled warning %r" % reraise[0]) + if missing: + raise AssertionError("filter (%r, %s) did not catch any warning" % + missing[0]) @contextlib.contextmanager From python-checkins at python.org Sun Mar 7 21:22:12 2010 From: python-checkins at python.org (michael.foord) Date: Sun, 7 Mar 2010 21:22:12 +0100 (CET) Subject: [Python-checkins] r78770 - in python/trunk/Lib: test/test_unittest.py unittest/case.py Message-ID: <20100307202212.6820BEE9B3@mail.python.org> Author: michael.foord Date: Sun Mar 7 21:22:12 2010 New Revision: 78770 Log: Fix for potentials errors in constructing unittest failure messages. Plus skipped test methods no longer run setUp and tearDown (Issue 8059) Modified: python/trunk/Lib/test/test_unittest.py python/trunk/Lib/unittest/case.py Modified: python/trunk/Lib/test/test_unittest.py ============================================================================== --- python/trunk/Lib/test/test_unittest.py (original) +++ python/trunk/Lib/test/test_unittest.py Sun Mar 7 21:22:12 2010 @@ -3118,6 +3118,43 @@ self.assertEqual(result.unexpectedSuccesses, [test]) self.assertTrue(result.wasSuccessful()) + def test_skip_doesnt_run_setup(self): + class Foo(unittest.TestCase): + wasSetUp = False + wasTornDown = False + def setUp(self): + Foo.wasSetUp = True + def tornDown(self): + Foo.wasTornDown = True + @unittest.skip('testing') + def test_1(self): + pass + + result = unittest.TestResult() + test = Foo("test_1") + suite = unittest.TestSuite([test]) + suite.run(result) + self.assertEqual(result.skipped, [(test, "testing")]) + self.assertFalse(Foo.wasSetUp) + self.assertFalse(Foo.wasTornDown) + + def test_decorated_skip(self): + def decorator(func): + def inner(*a): + return func(*a) + return inner + + class Foo(unittest.TestCase): + @decorator + @unittest.skip('testing') + def test_1(self): + pass + + result = unittest.TestResult() + test = Foo("test_1") + suite = unittest.TestSuite([test]) + suite.run(result) + self.assertEqual(result.skipped, [(test, "testing")]) class Test_Assertions(TestCase): @@ -3220,6 +3257,16 @@ self.assertEquals(self.testableTrue._formatMessage(None, "foo"), "foo") self.assertEquals(self.testableTrue._formatMessage("foo", "bar"), "bar : foo") + # This blows up if _formatMessage uses string concatenation + self.testableTrue._formatMessage(object(), 'foo') + + def test_formatMessage_unicode_error(self): + with warnings.catch_warnings(record=True): + # This causes a UnicodeWarning due to its craziness + one = ''.join(chr(i) for i in range(255)) + # this used to cause a UnicodeDecodeError constructing msg + self.testableTrue._formatMessage(one, u'\uFFFD') + def assertMessages(self, methodName, args, errors): def getMethod(i): useTestableFalse = i < 2 Modified: python/trunk/Lib/unittest/case.py ============================================================================== --- python/trunk/Lib/unittest/case.py (original) +++ python/trunk/Lib/unittest/case.py Sun Mar 7 21:22:12 2010 @@ -45,14 +45,15 @@ Unconditionally skip a test. """ def decorator(test_item): - if isinstance(test_item, type) and issubclass(test_item, TestCase): - test_item.__unittest_skip__ = True - test_item.__unittest_skip_why__ = reason - return test_item - @functools.wraps(test_item) - def skip_wrapper(*args, **kwargs): - raise SkipTest(reason) - return skip_wrapper + if not (isinstance(test_item, type) and issubclass(test_item, TestCase)): + @functools.wraps(test_item) + def skip_wrapper(*args, **kwargs): + raise SkipTest(reason) + test_item = skip_wrapper + + test_item.__unittest_skip__ = True + test_item.__unittest_skip_why__ = reason + return test_item return decorator def skipIf(condition, reason): @@ -268,14 +269,18 @@ self._resultForDoCleanups = result result.startTest(self) - if getattr(self.__class__, "__unittest_skip__", False): - # If the whole class was skipped. + + testMethod = getattr(self, self._testMethodName) + if (getattr(self.__class__, "__unittest_skip__", False) or + getattr(testMethod, "__unittest_skip__", False)): + # If the class or method was skipped. try: - self._addSkip(result, self.__class__.__unittest_skip_why__) + skip_why = (getattr(self.__class__, '__unittest_skip_why__', '') + or getattr(testMethod, '__unittest_skip_why__', '')) + self._addSkip(result, skip_why) finally: result.stopTest(self) return - testMethod = getattr(self, self._testMethodName) try: success = False try: @@ -386,7 +391,12 @@ return msg or standardMsg if msg is None: return standardMsg - return standardMsg + ' : ' + msg + try: + # don't switch to '{}' formatting in Python 2.X + # it changes the way unicode input is handled + return '%s : %s' % (standardMsg, msg) + except UnicodeDecodeError: + return '%s : %s' % (safe_repr(standardMsg), safe_repr(msg)) def assertRaises(self, excClass, callableObj=None, *args, **kwargs): From amk at amk.ca Sun Mar 7 21:50:14 2010 From: amk at amk.ca (A.M. Kuchling) Date: Sun, 7 Mar 2010 15:50:14 -0500 Subject: [Python-checkins] r78760 - in python/trunk: Doc/library/argparse.rst Doc/reference/executionmodel.rst Doc/whatsnew/2.6.rst Misc/BeOS-setup.py Misc/HISTORY Misc/NEWS Misc/SpecialBuilds.txt In-Reply-To: <20100307152400.682F1DC56@mail.python.org> References: <20100307152400.682F1DC56@mail.python.org> Message-ID: <20100307205014.GA7567@andrew-kuchlings-macbook.local> I'm confused by this set of changes. Georg, what are the rules for 'built-in' vs 'builtin' you're following? On Sun, Mar 07, 2010 at 04:24:00PM +0100, georg.brandl wrote: > --- python/trunk/Doc/library/argparse.rst (original) > +++ python/trunk/Doc/library/argparse.rst Sun Mar 7 16:23:59 2010 > -type-checking and type-conversions to be performed. Many common builtin types > +type-checking and type-conversions to be performed. Many common built-in types So, the style is 'built-in' as the adjective... > --- python/trunk/Doc/whatsnew/2.6.rst (original) > +++ python/trunk/Doc/whatsnew/2.6.rst Sun Mar 7 16:23:59 2010 > -semantics of some existing built-ins. Functions that are new in 3.0 > +semantics of some existing builtins. Functions that are new in 3.0 ... but 'builtin' as the noun form ... > Modified: python/trunk/Misc/HISTORY > -- Bug #959576: The pwd module is now builtin. This allows Python to be > +- Bug #959576: The pwd module is now built in. This allows Python to be ... except here, where it's 'built in' instead of 'built-in'. Personally I would just use 'built-in' everywhere. I find 'builtin' slightly more difficult to read because it's slightly ambiguous on first view. A reader might initially wonder if it's 'buil-tin' or 'built-in'. > --- python/trunk/Doc/reference/executionmodel.rst (original) > +++ python/trunk/Doc/reference/executionmodel.rst Sun Mar 7 16:23:59 2010 > -The built-in namespace associated with the execution of a code block is actually > +The builtins namespace associated with the execution of a code block is actually In executionmodel.rst 'built-in' was changed to 'builtins', which seems totally wrong. At least this part of the commit needs reviewing, or reverting. --amk From python-checkins at python.org Sun Mar 7 21:58:31 2010 From: python-checkins at python.org (georg.brandl) Date: Sun, 7 Mar 2010 21:58:31 +0100 (CET) Subject: [Python-checkins] r78771 - in python/trunk/Doc/c-api: gcsupport.rst typeobj.rst Message-ID: <20100307205831.F3D89F7E7@mail.python.org> Author: georg.brandl Date: Sun Mar 7 21:58:31 2010 New Revision: 78771 Log: #8085: The function is called PyObject_NewVar, not PyObject_VarNew. Modified: python/trunk/Doc/c-api/gcsupport.rst python/trunk/Doc/c-api/typeobj.rst Modified: python/trunk/Doc/c-api/gcsupport.rst ============================================================================== --- python/trunk/Doc/c-api/gcsupport.rst (original) +++ python/trunk/Doc/c-api/gcsupport.rst Sun Mar 7 21:58:31 2010 @@ -31,7 +31,7 @@ Constructors for container types must conform to two rules: #. The memory for the object must be allocated using :cfunc:`PyObject_GC_New` - or :cfunc:`PyObject_GC_VarNew`. + or :cfunc:`PyObject_GC_NewVar`. #. Once all the fields which may contain references to other containers are initialized, it must call :cfunc:`PyObject_GC_Track`. Modified: python/trunk/Doc/c-api/typeobj.rst ============================================================================== --- python/trunk/Doc/c-api/typeobj.rst (original) +++ python/trunk/Doc/c-api/typeobj.rst Sun Mar 7 21:58:31 2010 @@ -189,7 +189,7 @@ instance; this is normally :cfunc:`PyObject_Del` if the instance was allocated using :cfunc:`PyObject_New` or :cfunc:`PyObject_VarNew`, or :cfunc:`PyObject_GC_Del` if the instance was allocated using - :cfunc:`PyObject_GC_New` or :cfunc:`PyObject_GC_VarNew`. + :cfunc:`PyObject_GC_New` or :cfunc:`PyObject_GC_NewVar`. This field is inherited by subtypes. From python-checkins at python.org Sun Mar 7 22:12:28 2010 From: python-checkins at python.org (georg.brandl) Date: Sun, 7 Mar 2010 22:12:28 +0100 (CET) Subject: [Python-checkins] r78772 - python/trunk/Doc/reference/expressions.rst Message-ID: <20100307211228.C72D3EEA0F@mail.python.org> Author: georg.brandl Date: Sun Mar 7 22:12:28 2010 New Revision: 78772 Log: #8039: document conditional expressions better, giving them their own section. Modified: python/trunk/Doc/reference/expressions.rst Modified: python/trunk/Doc/reference/expressions.rst ============================================================================== --- python/trunk/Doc/reference/expressions.rst (original) +++ python/trunk/Doc/reference/expressions.rst Sun Mar 7 22:12:28 2010 @@ -185,6 +185,7 @@ list_comprehension: `expression` `list_for` list_for: "for" `target_list` "in" `old_expression_list` [`list_iter`] old_expression_list: `old_expression` [("," `old_expression`)+ [","]] + old_expression: `or_test` | `old_lambda_form` list_iter: `list_for` | `list_if` list_if: "if" `old_expression` [`list_iter`] @@ -1186,12 +1187,7 @@ pair: Conditional; expression pair: Boolean; operation -Boolean operations have the lowest priority of all Python operations: - .. productionlist:: - expression: `conditional_expression` | `lambda_form` - old_expression: `or_test` | `old_lambda_form` - conditional_expression: `or_test` ["if" `or_test` "else" `expression`] or_test: `and_test` | `or_test` "or" `and_test` and_test: `not_test` | `and_test` "and" `not_test` not_test: `comparison` | "not" `not_test` @@ -1208,12 +1204,6 @@ The operator :keyword:`not` yields ``True`` if its argument is false, ``False`` otherwise. -The expression ``x if C else y`` first evaluates *C* (*not* *x*); if *C* is -true, *x* is evaluated and its value is returned; otherwise, *y* is evaluated -and its value is returned. - -.. versionadded:: 2.5 - .. index:: operator: and The expression ``x and y`` first evaluates *x*; if *x* is false, its value is @@ -1233,6 +1223,29 @@ 'foo'`` yields ``False``, not ``''``.) +Conditional Expressions +======================= + +.. versionadded:: 2.5 + +.. index:: + pair: conditional; expression + pair: ternary; operator + +.. productionlist:: + conditional_expression: `or_test` ["if" `or_test` "else" `expression`] + expression: `conditional_expression` | `lambda_form` + +Conditional expressions (sometimes called a "ternary operator") have the lowest +priority of all Python operations. + +The expression ``x if C else y`` first evaluates the condition, *C* (*not* *a*); +if *C* is true, *x* is evaluated and its value is returned; otherwise, *y* is +evaluated and its value is returned. + +See :pep:`308` for more details about conditional expressions. + + .. _lambdas: .. _lambda: @@ -1326,6 +1339,8 @@ +===============================================+=====================================+ | :keyword:`lambda` | Lambda expression | +-----------------------------------------------+-------------------------------------+ +| :keyword:`if` -- :keyword:`else` | Conditional expression | ++-----------------------------------------------+-------------------------------------+ | :keyword:`or` | Boolean OR | +-----------------------------------------------+-------------------------------------+ | :keyword:`and` | Boolean AND | From python-checkins at python.org Sun Mar 7 22:32:06 2010 From: python-checkins at python.org (georg.brandl) Date: Sun, 7 Mar 2010 22:32:06 +0100 (CET) Subject: [Python-checkins] r78773 - python/trunk/Doc/c-api/exceptions.rst Message-ID: <20100307213206.E4978EE9FC@mail.python.org> Author: georg.brandl Date: Sun Mar 7 22:32:06 2010 New Revision: 78773 Log: #8044: document Py_{Enter,Leave}RecursiveCall functions. Modified: python/trunk/Doc/c-api/exceptions.rst Modified: python/trunk/Doc/c-api/exceptions.rst ============================================================================== --- python/trunk/Doc/c-api/exceptions.rst (original) +++ python/trunk/Doc/c-api/exceptions.rst Sun Mar 7 22:32:06 2010 @@ -454,6 +454,36 @@ the warning message. +Recursion Control +================= + +These two functions provide a way to perform safe recursive calls at the C +level, both in the core and in extension modules. They are needed if the +recursive code does not necessarily invoke Python code (which tracks its +recursion depth automatically). + +.. cfunction:: int Py_EnterRecursiveCall(char *where) + + Marks a point where a recursive C-level call is about to be performed. + + If :const:`USE_STACKCHECK` is defined, this function checks if the the OS + stack overflowed using :cfunc:`PyOS_CheckStack`. In this is the case, it + sets a :exc:`MemoryError` and returns a nonzero value. + + The function then checks if the recursion limit is reached. If this is the + case, a :exc:`RuntimeError` is set and a nonzero value is returned. + Otherwise, zero is returned. + + *where* should be a string such as ``" in instance check"`` to be + concatenated to the :exc:`RuntimeError` message caused by the recursion depth + limit. + +.. cfunction:: void Py_LeaveRecursiveCall() + + Ends a :cfunc:`Py_EnterRecursiveCall`. Must be called once for each + *successful* invocation of :cfunc:`Py_EnterRecursiveCall`. + + .. _standardexceptions: Standard Exceptions From g.brandl at gmx.net Sun Mar 7 22:58:36 2010 From: g.brandl at gmx.net (Georg Brandl) Date: Sun, 07 Mar 2010 22:58:36 +0100 Subject: [Python-checkins] r78760 - in python/trunk: Doc/library/argparse.rst Doc/reference/executionmodel.rst Doc/whatsnew/2.6.rst Misc/BeOS-setup.py Misc/HISTORY Misc/NEWS Misc/SpecialBuilds.txt In-Reply-To: <20100307205014.GA7567@andrew-kuchlings-macbook.local> References: <20100307152400.682F1DC56@mail.python.org> <20100307205014.GA7567@andrew-kuchlings-macbook.local> Message-ID: Am 07.03.2010 21:50, schrieb A.M. Kuchling: > I'm confused by this set of changes. Georg, what are the rules for > 'built-in' vs 'builtin' you're following? > > On Sun, Mar 07, 2010 at 04:24:00PM +0100, georg.brandl wrote: >> --- python/trunk/Doc/library/argparse.rst (original) >> +++ python/trunk/Doc/library/argparse.rst Sun Mar 7 16:23:59 2010 >> -type-checking and type-conversions to be performed. Many common builtin types >> +type-checking and type-conversions to be performed. Many common built-in types > > So, the style is 'built-in' as the adjective... > >> --- python/trunk/Doc/whatsnew/2.6.rst (original) >> +++ python/trunk/Doc/whatsnew/2.6.rst Sun Mar 7 16:23:59 2010 >> -semantics of some existing built-ins. Functions that are new in 3.0 >> +semantics of some existing builtins. Functions that are new in 3.0 > > ... but 'builtin' as the noun form ... Yes, that's the convention. >> Modified: python/trunk/Misc/HISTORY >> -- Bug #959576: The pwd module is now builtin. This allows Python to be >> +- Bug #959576: The pwd module is now built in. This allows Python to be > > ... except here, where it's 'built in' instead of 'built-in'. Isn't that a third form, i.e. a verb? > Personally I would just use 'built-in' everywhere. I find 'builtin' > slightly more difficult to read because it's slightly ambiguous on > first view. A reader might initially wonder if it's 'buil-tin' or > 'built-in'. > >> --- python/trunk/Doc/reference/executionmodel.rst (original) >> +++ python/trunk/Doc/reference/executionmodel.rst Sun Mar 7 16:23:59 2010 >> -The built-in namespace associated with the execution of a code block is actually >> +The builtins namespace associated with the execution of a code block is actually > > In executionmodel.rst 'built-in' was changed to 'builtins', which > seems totally wrong. At least this part of the commit needs > reviewing, or reverting. Why does it seem wrong to you? A builtins namespace is a namespace where builtins live. A built-in namespace is a namespace built into Python. The former actually makes more sense to me, since the namespace in question isn't some special namespace, it can be replaced by another, e.g. per frame. However, there are still several instances of both "built-in namespace" and "builtins namespace". I'm not sure I want to spend any more cycles on this; if you care, please make them consistent. cheers, Georg -- Thus spake the Lord: Thou shalt indent with four spaces. No more, no less. Four shall be the number of spaces thou shalt indent, and the number of thy indenting shall be four. Eight shalt thou not indent, nor either indent thou two, excepting that thou then proceed to four. Tabs are right out. From python-checkins at python.org Sun Mar 7 23:04:55 2010 From: python-checkins at python.org (michael.foord) Date: Sun, 7 Mar 2010 23:04:55 +0100 (CET) Subject: [Python-checkins] r78774 - in python/trunk/Lib: test/test_unittest.py unittest/__init__.py unittest/case.py unittest/result.py unittest/suite.py Message-ID: <20100307220455.722E9EE98F@mail.python.org> Author: michael.foord Date: Sun Mar 7 23:04:55 2010 New Revision: 78774 Log: Addition of setUpClass and setUpModule shared fixtures to unittest. Modified: python/trunk/Lib/test/test_unittest.py python/trunk/Lib/unittest/__init__.py python/trunk/Lib/unittest/case.py python/trunk/Lib/unittest/result.py python/trunk/Lib/unittest/suite.py Modified: python/trunk/Lib/test/test_unittest.py ============================================================================== --- python/trunk/Lib/test/test_unittest.py (original) +++ python/trunk/Lib/test/test_unittest.py Sun Mar 7 23:04:55 2010 @@ -22,6 +22,9 @@ ### Support code ################################################################ +def resultFactory(*_): + return unittest.TestResult() + class LoggingResult(unittest.TestResult): def __init__(self, log): self._events = log @@ -3937,6 +3940,397 @@ self.assertEqual(program.verbosity, 2) +class TestSetups(unittest.TestCase): + + def getRunner(self): + return unittest.TextTestRunner(resultclass=resultFactory, + stream=StringIO()) + def runTests(self, *cases): + suite = unittest.TestSuite() + for case in cases: + tests = unittest.defaultTestLoader.loadTestsFromTestCase(case) + suite.addTests(tests) + + runner = self.getRunner() + + # creating a nested suite exposes some potential bugs + realSuite = unittest.TestSuite() + realSuite.addTest(suite) + # adding empty suites to the end exposes potential bugs + suite.addTest(unittest.TestSuite()) + realSuite.addTest(unittest.TestSuite()) + return runner.run(realSuite) + + def test_setup_class(self): + class Test(unittest.TestCase): + setUpCalled = 0 + @classmethod + def setUpClass(cls): + Test.setUpCalled += 1 + unittest.TestCase.setUpClass() + def test_one(self): + pass + def test_two(self): + pass + + result = self.runTests(Test) + + self.assertEqual(Test.setUpCalled, 1) + self.assertEqual(result.testsRun, 2) + self.assertEqual(len(result.errors), 0) + + def test_teardown_class(self): + class Test(unittest.TestCase): + tearDownCalled = 0 + @classmethod + def tearDownClass(cls): + Test.tearDownCalled += 1 + unittest.TestCase.tearDownClass() + def test_one(self): + pass + def test_two(self): + pass + + result = self.runTests(Test) + + self.assertEqual(Test.tearDownCalled, 1) + self.assertEqual(result.testsRun, 2) + self.assertEqual(len(result.errors), 0) + + def test_teardown_class_two_classes(self): + class Test(unittest.TestCase): + tearDownCalled = 0 + @classmethod + def tearDownClass(cls): + Test.tearDownCalled += 1 + unittest.TestCase.tearDownClass() + def test_one(self): + pass + def test_two(self): + pass + + class Test2(unittest.TestCase): + tearDownCalled = 0 + @classmethod + def tearDownClass(cls): + Test2.tearDownCalled += 1 + unittest.TestCase.tearDownClass() + def test_one(self): + pass + def test_two(self): + pass + + result = self.runTests(Test, Test2) + + self.assertEqual(Test.tearDownCalled, 1) + self.assertEqual(Test2.tearDownCalled, 1) + self.assertEqual(result.testsRun, 4) + self.assertEqual(len(result.errors), 0) + + def test_error_in_setupclass(self): + class BrokenTest(unittest.TestCase): + @classmethod + def setUpClass(cls): + raise TypeError('foo') + def test_one(self): + pass + def test_two(self): + pass + + result = self.runTests(BrokenTest) + + self.assertEqual(result.testsRun, 0) + self.assertEqual(len(result.errors), 1) + error, _ = result.errors[0] + self.assertEqual(str(error), + 'classSetUp (%s.BrokenTest)' % __name__) + + def test_error_in_teardown_class(self): + class Test(unittest.TestCase): + tornDown = 0 + @classmethod + def tearDownClass(cls): + Test.tornDown += 1 + raise TypeError('foo') + def test_one(self): + pass + def test_two(self): + pass + + class Test2(unittest.TestCase): + tornDown = 0 + @classmethod + def tearDownClass(cls): + Test2.tornDown += 1 + raise TypeError('foo') + def test_one(self): + pass + def test_two(self): + pass + + result = self.runTests(Test, Test2) + self.assertEqual(result.testsRun, 4) + self.assertEqual(len(result.errors), 2) + self.assertEqual(Test.tornDown, 1) + self.assertEqual(Test2.tornDown, 1) + + error, _ = result.errors[0] + self.assertEqual(str(error), + 'classTearDown (%s.Test)' % __name__) + + def test_class_not_torndown_when_setup_fails(self): + class Test(unittest.TestCase): + tornDown = False + @classmethod + def setUpClass(cls): + raise TypeError + @classmethod + def tearDownClass(cls): + Test.tornDown = True + raise TypeError('foo') + def test_one(self): + pass + + self.runTests(Test) + self.assertFalse(Test.tornDown) + + def test_class_not_setup_or_torndown_when_skipped(self): + class Test(unittest.TestCase): + classSetUp = False + tornDown = False + @classmethod + def setUpClass(cls): + Test.classSetUp = True + @classmethod + def tearDownClass(cls): + Test.tornDown = True + def test_one(self): + pass + + Test = unittest.skip("hop")(Test) + self.runTests(Test) + self.assertFalse(Test.classSetUp) + self.assertFalse(Test.tornDown) + + def test_setup_teardown_order_with_pathological_suite(self): + results = [] + + class Module1(object): + @staticmethod + def setUpModule(): + results.append('Module1.setUpModule') + @staticmethod + def tearDownModule(): + results.append('Module1.tearDownModule') + + class Module2(object): + @staticmethod + def setUpModule(): + results.append('Module2.setUpModule') + @staticmethod + def tearDownModule(): + results.append('Module2.tearDownModule') + + class Test1(unittest.TestCase): + @classmethod + def setUpClass(cls): + results.append('setup 1') + @classmethod + def tearDownClass(cls): + results.append('teardown 1') + def testOne(self): + results.append('Test1.testOne') + def testTwo(self): + results.append('Test1.testTwo') + + class Test2(unittest.TestCase): + @classmethod + def setUpClass(cls): + results.append('setup 2') + @classmethod + def tearDownClass(cls): + results.append('teardown 2') + def testOne(self): + results.append('Test2.testOne') + def testTwo(self): + results.append('Test2.testTwo') + + class Test3(unittest.TestCase): + @classmethod + def setUpClass(cls): + results.append('setup 3') + @classmethod + def tearDownClass(cls): + results.append('teardown 3') + def testOne(self): + results.append('Test3.testOne') + def testTwo(self): + results.append('Test3.testTwo') + + Test1.__module__ = Test2.__module__ = 'Module' + Test3.__module__ = 'Module2' + sys.modules['Module'] = Module1 + sys.modules['Module2'] = Module2 + + first = unittest.TestSuite((Test1('testOne'),)) + second = unittest.TestSuite((Test1('testTwo'),)) + third = unittest.TestSuite((Test2('testOne'),)) + fourth = unittest.TestSuite((Test2('testTwo'),)) + fifth = unittest.TestSuite((Test3('testOne'),)) + sixth = unittest.TestSuite((Test3('testTwo'),)) + suite = unittest.TestSuite((first, second, third, fourth, fifth, sixth)) + + runner = self.getRunner() + result = runner.run(suite) + self.assertEqual(result.testsRun, 6) + self.assertEqual(len(result.errors), 0) + + self.assertEqual(results, + ['Module1.setUpModule', 'setup 1', + 'Test1.testOne', 'Test1.testTwo', 'teardown 1', + 'setup 2', 'Test2.testOne', 'Test2.testTwo', + 'teardown 2', 'Module1.tearDownModule', + 'Module2.setUpModule', 'setup 3', + 'Test3.testOne', 'Test3.testTwo', + 'teardown 3', 'Module2.tearDownModule']) + + def test_setup_module(self): + class Module(object): + moduleSetup = 0 + @staticmethod + def setUpModule(): + Module.moduleSetup += 1 + + class Test(unittest.TestCase): + def test_one(self): + pass + def test_two(self): + pass + Test.__module__ = 'Module' + sys.modules['Module'] = Module + + result = self.runTests(Test) + self.assertEqual(Module.moduleSetup, 1) + self.assertEqual(result.testsRun, 2) + self.assertEqual(len(result.errors), 0) + + def test_error_in_setup_module(self): + class Module(object): + moduleSetup = 0 + moduleTornDown = 0 + @staticmethod + def setUpModule(): + Module.moduleSetup += 1 + raise TypeError('foo') + @staticmethod + def tearDownModule(): + Module.moduleTornDown += 1 + + class Test(unittest.TestCase): + classSetUp = False + classTornDown = False + @classmethod + def setUpClass(cls): + Test.classSetUp = True + @classmethod + def tearDownClass(cls): + Test.classTornDown = True + def test_one(self): + pass + def test_two(self): + pass + + class Test2(unittest.TestCase): + def test_one(self): + pass + def test_two(self): + pass + Test.__module__ = 'Module' + Test2.__module__ = 'Module' + sys.modules['Module'] = Module + + result = self.runTests(Test, Test2) + self.assertEqual(Module.moduleSetup, 1) + self.assertEqual(Module.moduleTornDown, 0) + self.assertEqual(result.testsRun, 0) + self.assertFalse(Test.classSetUp) + self.assertFalse(Test.classTornDown) + self.assertEqual(len(result.errors), 1) + error, _ = result.errors[0] + self.assertEqual(str(error), 'setUpModule (Module)') + + def test_testcase_with_missing_module(self): + class Test(unittest.TestCase): + def test_one(self): + pass + def test_two(self): + pass + Test.__module__ = 'Module' + sys.modules.pop('Module', None) + + result = self.runTests(Test) + self.assertEqual(result.testsRun, 2) + + def test_teardown_module(self): + class Module(object): + moduleTornDown = 0 + @staticmethod + def tearDownModule(): + Module.moduleTornDown += 1 + + class Test(unittest.TestCase): + def test_one(self): + pass + def test_two(self): + pass + Test.__module__ = 'Module' + sys.modules['Module'] = Module + + result = self.runTests(Test) + self.assertEqual(Module.moduleTornDown, 1) + self.assertEqual(result.testsRun, 2) + self.assertEqual(len(result.errors), 0) + + def test_error_in_teardown_module(self): + class Module(object): + moduleTornDown = 0 + @staticmethod + def tearDownModule(): + Module.moduleTornDown += 1 + raise TypeError('foo') + + class Test(unittest.TestCase): + classSetUp = False + classTornDown = False + @classmethod + def setUpClass(cls): + Test.classSetUp = True + @classmethod + def tearDownClass(cls): + Test.classTornDown = True + def test_one(self): + pass + def test_two(self): + pass + + class Test2(unittest.TestCase): + def test_one(self): + pass + def test_two(self): + pass + Test.__module__ = 'Module' + Test2.__module__ = 'Module' + sys.modules['Module'] = Module + + result = self.runTests(Test, Test2) + self.assertEqual(Module.moduleTornDown, 1) + self.assertEqual(result.testsRun, 4) + self.assertTrue(Test.classSetUp) + self.assertTrue(Test.classTornDown) + self.assertEqual(len(result.errors), 1) + error, _ = result.errors[0] + self.assertEqual(str(error), 'tearDownModule (Module)') + ###################################################################### ## Main ###################################################################### @@ -3946,7 +4340,7 @@ Test_TestSuite, Test_TestResult, Test_FunctionTestCase, Test_TestSkipping, Test_Assertions, TestLongMessage, Test_TestProgram, TestCleanUp, TestDiscovery, Test_TextTestRunner, - Test_OldTestResult) + Test_OldTestResult, TestSetups) if __name__ == "__main__": test_main() Modified: python/trunk/Lib/unittest/__init__.py ============================================================================== --- python/trunk/Lib/unittest/__init__.py (original) +++ python/trunk/Lib/unittest/__init__.py Sun Mar 7 23:04:55 2010 @@ -51,13 +51,12 @@ # Expose obsolete functions for backwards compatibility __all__.extend(['getTestCaseNames', 'makeSuite', 'findTestCases']) -__all__.append('_TextTestResult') from .result import TestResult from .case import (TestCase, FunctionTestCase, SkipTest, skip, skipIf, skipUnless, expectedFailure) -from .suite import TestSuite +from .suite import BaseTestSuite, TestSuite from .loader import (TestLoader, defaultTestLoader, makeSuite, getTestCaseNames, findTestCases) from .main import TestProgram, main Modified: python/trunk/Lib/unittest/case.py ============================================================================== --- python/trunk/Lib/unittest/case.py (original) +++ python/trunk/Lib/unittest/case.py Sun Mar 7 23:04:55 2010 @@ -153,6 +153,9 @@ longMessage = False + # Attribute used by TestSuite for classSetUp + + _classSetupFailed = False def __init__(self, methodName='runTest'): """Create an instance of the class that will use the named test @@ -211,6 +214,14 @@ "Hook method for deconstructing the test fixture after testing it." pass + @classmethod + def setUpClass(cls): + "Hook method for setting up class fixture before running tests in the class." + + @classmethod + def tearDownClass(cls): + "Hook method for deconstructing the class fixture after running all tests in the class." + def countTestCases(self): return 1 Modified: python/trunk/Lib/unittest/result.py ============================================================================== --- python/trunk/Lib/unittest/result.py (original) +++ python/trunk/Lib/unittest/result.py Sun Mar 7 23:04:55 2010 @@ -16,6 +16,8 @@ contain tuples of (testcase, exceptioninfo), where exceptioninfo is the formatted traceback of the error that occurred. """ + _previousTestClass = None + _moduleSetUpFailed = False def __init__(self, stream=None, descriptions=None, verbosity=None): self.failures = [] self.errors = [] Modified: python/trunk/Lib/unittest/suite.py ============================================================================== --- python/trunk/Lib/unittest/suite.py (original) +++ python/trunk/Lib/unittest/suite.py Sun Mar 7 23:04:55 2010 @@ -1,17 +1,13 @@ """TestSuite""" +import sys + from . import case from . import util -class TestSuite(object): - """A test suite is a composite test consisting of a number of TestCases. - - For use, create an instance of TestSuite, then add test case instances. - When all tests have been added, the suite can be passed to a test - runner, such as TextTestRunner. It will run the individual test cases - in the order in which they were added, aggregating the results. When - subclassing, do not forget to call the base class constructor. +class BaseTestSuite(object): + """A simple test suite that doesn't provide class or module shared fixtures. """ def __init__(self, tests=()): self._tests = [] @@ -70,3 +66,190 @@ """Run the tests without collecting errors in a TestResult""" for test in self: test.debug() + + +class TestSuite(BaseTestSuite): + """A test suite is a composite test consisting of a number of TestCases. + + For use, create an instance of TestSuite, then add test case instances. + When all tests have been added, the suite can be passed to a test + runner, such as TextTestRunner. It will run the individual test cases + in the order in which they were added, aggregating the results. When + subclassing, do not forget to call the base class constructor. + """ + + + def run(self, result): + self._wrapped_run(result) + self._tearDownPreviousClass(None, result) + self._handleModuleTearDown(result) + return result + + ################################ + # private methods + def _wrapped_run(self, result): + for test in self: + if result.shouldStop: + break + + if _isnotsuite(test): + self._tearDownPreviousClass(test, result) + self._handleModuleFixture(test, result) + self._handleClassSetUp(test, result) + result._previousTestClass = test.__class__ + + if (getattr(test.__class__, '_classSetupFailed', False) or + getattr(result, '_moduleSetUpFailed', False)): + continue + + if hasattr(test, '_wrapped_run'): + test._wrapped_run(result) + else: + test(result) + + def _handleClassSetUp(self, test, result): + previousClass = getattr(result, '_previousTestClass', None) + currentClass = test.__class__ + if currentClass == previousClass: + return + if result._moduleSetUpFailed: + return + if getattr(currentClass, "__unittest_skip__", False): + return + + currentClass._classSetupFailed = False + + setUpClass = getattr(currentClass, 'setUpClass', None) + if setUpClass is not None: + try: + setUpClass() + except: + currentClass._classSetupFailed = True + self._addClassSetUpError(result, currentClass) + + def _get_previous_module(self, result): + previousModule = None + previousClass = getattr(result, '_previousTestClass', None) + if previousClass is not None: + previousModule = previousClass.__module__ + return previousModule + + + def _handleModuleFixture(self, test, result): + previousModule = self._get_previous_module(result) + currentModule = test.__class__.__module__ + if currentModule == previousModule: + return + + self._handleModuleTearDown(result) + + + result._moduleSetUpFailed = False + try: + module = sys.modules[currentModule] + except KeyError: + return + setUpModule = getattr(module, 'setUpModule', None) + if setUpModule is not None: + try: + setUpModule() + except: + result._moduleSetUpFailed = True + error = _ErrorHolder('setUpModule (%s)' % currentModule) + result.addError(error, sys.exc_info()) + + def _handleModuleTearDown(self, result): + previousModule = self._get_previous_module(result) + if previousModule is None: + return + if result._moduleSetUpFailed: + return + + try: + module = sys.modules[previousModule] + except KeyError: + return + + tearDownModule = getattr(module, 'tearDownModule', None) + if tearDownModule is not None: + try: + tearDownModule() + except: + error = _ErrorHolder('tearDownModule (%s)' % previousModule) + result.addError(error, sys.exc_info()) + + def _tearDownPreviousClass(self, test, result): + previousClass = getattr(result, '_previousTestClass', None) + currentClass = test.__class__ + if currentClass == previousClass: + return + if getattr(previousClass, '_classSetupFailed', False): + return + if getattr(result, '_moduleSetUpFailed', False): + return + if getattr(previousClass, "__unittest_skip__", False): + return + + tearDownClass = getattr(previousClass, 'tearDownClass', None) + if tearDownClass is not None: + try: + tearDownClass() + except: + self._addClassTearDownError(result) + + def _addClassTearDownError(self, result): + className = util.strclass(result._previousTestClass) + error = _ErrorHolder('classTearDown (%s)' % className) + result.addError(error, sys.exc_info()) + + def _addClassSetUpError(self, result, klass): + className = util.strclass(klass) + error = _ErrorHolder('classSetUp (%s)' % className) + result.addError(error, sys.exc_info()) + + +class _ErrorHolder(object): + """ + Placeholder for a TestCase inside a result. As far as a TestResult + is concerned, this looks exactly like a unit test. Used to insert + arbitrary errors into a test suite run. + """ + # Inspired by the ErrorHolder from Twisted: + # http://twistedmatrix.com/trac/browser/trunk/twisted/trial/runner.py + + # attribute used by TestResult._exc_info_to_string + failureException = None + + def __init__(self, description): + self.description = description + + def id(self): + return self.description + + def shortDescription(self): + return None + + def __repr__(self): + return "" % (self.description,) + + def __str__(self): + return self.id() + + def run(self, result): + # could call result.addError(...) - but this test-like object + # shouldn't be run anyway + pass + + def __call__(self, result): + return self.run(result) + + def countTestCases(self): + return 0 + +def _isnotsuite(test): + "A crude way to tell apart testcases and suites with duck-typing" + try: + iter(test) + except TypeError: + return True + return False From python-checkins at python.org Mon Mar 8 00:10:37 2010 From: python-checkins at python.org (michael.foord) Date: Mon, 8 Mar 2010 00:10:37 +0100 (CET) Subject: [Python-checkins] r78775 - python/trunk/Lib/unittest/case.py Message-ID: <20100307231037.2496DEE9E1@mail.python.org> Author: michael.foord Date: Mon Mar 8 00:10:36 2010 New Revision: 78775 Log: Fix accidental name rebinding in unittest py3k warning filtering. Modified: python/trunk/Lib/unittest/case.py Modified: python/trunk/Lib/unittest/case.py ============================================================================== --- python/trunk/Lib/unittest/case.py (original) +++ python/trunk/Lib/unittest/case.py Mon Mar 8 00:10:36 2010 @@ -798,10 +798,10 @@ with warnings.catch_warnings(): if sys.py3kwarning: # Silence Py3k warning raised during the sorting - for msg in ["dict inequality comparisons", + for _msg in ["dict inequality comparisons", "builtin_function_or_method order comparisons", "comparing unequal types"]: - warnings.filterwarnings("ignore", msg, DeprecationWarning) + warnings.filterwarnings("ignore", _msg, DeprecationWarning) try: expected = set(expected_seq) actual = set(actual_seq) @@ -820,6 +820,7 @@ if unexpected: errors.append('Unexpected, but present:\n %s' % safe_repr(unexpected)) + print 'errors', errors if errors: standardMsg = '\n'.join(errors) self.fail(self._formatMessage(msg, standardMsg)) From python-checkins at python.org Mon Mar 8 00:16:20 2010 From: python-checkins at python.org (michael.foord) Date: Mon, 8 Mar 2010 00:16:20 +0100 (CET) Subject: [Python-checkins] r78776 - python/trunk/Lib/unittest/case.py Message-ID: <20100307231620.E2E30DACC@mail.python.org> Author: michael.foord Date: Mon Mar 8 00:16:20 2010 New Revision: 78776 Log: Remove accidental print statement from last commit. Modified: python/trunk/Lib/unittest/case.py Modified: python/trunk/Lib/unittest/case.py ============================================================================== --- python/trunk/Lib/unittest/case.py (original) +++ python/trunk/Lib/unittest/case.py Mon Mar 8 00:16:20 2010 @@ -820,7 +820,6 @@ if unexpected: errors.append('Unexpected, but present:\n %s' % safe_repr(unexpected)) - print 'errors', errors if errors: standardMsg = '\n'.join(errors) self.fail(self._formatMessage(msg, standardMsg)) From python-checkins at python.org Mon Mar 8 00:49:04 2010 From: python-checkins at python.org (florent.xicluna) Date: Mon, 8 Mar 2010 00:49:04 +0100 (CET) Subject: [Python-checkins] r78777 - python/trunk/Lib/multiprocessing/forking.py Message-ID: <20100307234904.05C36EE981@mail.python.org> Author: florent.xicluna Date: Mon Mar 8 00:49:03 2010 New Revision: 78777 Log: Backport the Popen.poll() protection from subprocess to multiprocessing. See #1731717. It should fix transient failures on test_multiprocessing. Modified: python/trunk/Lib/multiprocessing/forking.py Modified: python/trunk/Lib/multiprocessing/forking.py ============================================================================== --- python/trunk/Lib/multiprocessing/forking.py (original) +++ python/trunk/Lib/multiprocessing/forking.py Mon Mar 8 00:49:03 2010 @@ -103,7 +103,12 @@ def poll(self, flag=os.WNOHANG): if self.returncode is None: - pid, sts = os.waitpid(self.pid, flag) + try: + pid, sts = os.waitpid(self.pid, flag) + except os.error: + # Child process not yet created. See #1731717 + # e.errno == errno.ECHILD == 10 + return None if pid == self.pid: if os.WIFSIGNALED(sts): self.returncode = -os.WTERMSIG(sts) From solipsis at pitrou.net Mon Mar 8 01:03:19 2010 From: solipsis at pitrou.net (solipsis at pitrou.net) Date: Mon, 8 Mar 2010 01:03:19 +0100 (CET) Subject: [Python-checkins] Daily py3k reference leaks (r78766): sum=0 Message-ID: <20100308000319.819FC1770B@ns6635.ovh.net> py3k results for svn r78766 (hg cset f1f25be49007) -------------------------------------------------- Command line was: ['./python', '-m', 'test.regrtest', '-uall', '-R', '3:3:/home/antoine/py3k/refleaks/reflogjT-hn0', '-x', 'test_httpservers'] From python-checkins at python.org Mon Mar 8 03:04:06 2010 From: python-checkins at python.org (r.david.murray) Date: Mon, 8 Mar 2010 03:04:06 +0100 (CET) Subject: [Python-checkins] r78778 - in python/trunk: Lib/email/__init__.py Lib/email/test/data/msg_10.txt Lib/email/test/test_email.py Lib/email/test/test_email_renamed.py Lib/email/utils.py Misc/ACKS Misc/NEWS Message-ID: <20100308020406.B9B62EEA45@mail.python.org> Author: r.david.murray Date: Mon Mar 8 03:04:06 2010 New Revision: 78778 Log: Issue #7143: get_payload used to strip any trailing newline from a base64 transfer-encoded payload *after* decoding it; it no longer does. email had a special method in utils, _bdecode, specifically to do this, so it must have served a purpose at some point, yet it is clearly wrong per RFC. Fixed with Barry's approval, but no backport. Email package minor version number is bumped, now version 4.0.1. Patch by Joaquin Cuenca Abela. Modified: python/trunk/Lib/email/__init__.py python/trunk/Lib/email/test/data/msg_10.txt python/trunk/Lib/email/test/test_email.py python/trunk/Lib/email/test/test_email_renamed.py python/trunk/Lib/email/utils.py python/trunk/Misc/ACKS python/trunk/Misc/NEWS Modified: python/trunk/Lib/email/__init__.py ============================================================================== --- python/trunk/Lib/email/__init__.py (original) +++ python/trunk/Lib/email/__init__.py Mon Mar 8 03:04:06 2010 @@ -4,7 +4,7 @@ """A package for parsing, handling, and generating email messages.""" -__version__ = '4.0.1' +__version__ = '4.0.2' __all__ = [ # Old names Modified: python/trunk/Lib/email/test/data/msg_10.txt ============================================================================== --- python/trunk/Lib/email/test/data/msg_10.txt (original) +++ python/trunk/Lib/email/test/data/msg_10.txt Mon Mar 8 03:04:06 2010 @@ -26,6 +26,13 @@ --BOUNDARY Content-Type: text/plain; charset="iso-8859-1" +Content-Transfer-Encoding: Base64 + +VGhpcyBpcyBhIEJhc2U2NCBlbmNvZGVkIG1lc3NhZ2UuCg== + + +--BOUNDARY +Content-Type: text/plain; charset="iso-8859-1" This has no Content-Transfer-Encoding: header. Modified: python/trunk/Lib/email/test/test_email.py ============================================================================== --- python/trunk/Lib/email/test/test_email.py (original) +++ python/trunk/Lib/email/test/test_email.py Mon Mar 8 03:04:06 2010 @@ -205,8 +205,12 @@ # Subpart 3 is base64 eq(msg.get_payload(2).get_payload(decode=True), 'This is a Base64 encoded message.') - # Subpart 4 has no Content-Transfer-Encoding: header. + # Subpart 4 is base64 with a trailing newline, which + # used to be stripped (issue 7143). eq(msg.get_payload(3).get_payload(decode=True), + 'This is a Base64 encoded message.\n') + # Subpart 5 has no Content-Transfer-Encoding: header. + eq(msg.get_payload(4).get_payload(decode=True), 'This has no Content-Transfer-Encoding: header.\n') def test_get_decoded_uu_payload(self): Modified: python/trunk/Lib/email/test/test_email_renamed.py ============================================================================== --- python/trunk/Lib/email/test/test_email_renamed.py (original) +++ python/trunk/Lib/email/test/test_email_renamed.py Mon Mar 8 03:04:06 2010 @@ -194,8 +194,12 @@ # Subpart 3 is base64 eq(msg.get_payload(2).get_payload(decode=True), 'This is a Base64 encoded message.') - # Subpart 4 has no Content-Transfer-Encoding: header. + # Subpart 4 is base64 with a trailing newline, which + # used to be stripped (issue 7143). eq(msg.get_payload(3).get_payload(decode=True), + 'This is a Base64 encoded message.\n') + # Subpart 5 has no Content-Transfer-Encoding: header. + eq(msg.get_payload(4).get_payload(decode=True), 'This has no Content-Transfer-Encoding: header.\n') def test_get_decoded_uu_payload(self): Modified: python/trunk/Lib/email/utils.py ============================================================================== --- python/trunk/Lib/email/utils.py (original) +++ python/trunk/Lib/email/utils.py Mon Mar 8 03:04:06 2010 @@ -60,14 +60,15 @@ def _bdecode(s): - # We can't quite use base64.encodestring() since it tacks on a "courtesy - # newline". Blech! + """Decodes a base64 string. + + This function is equivalent to base64.decodestring and it's retained only + for backward compatibility. It used to remove the last \n of the decoded + string, if it had any (see issue 7143). + """ if not s: return s - value = base64.decodestring(s) - if not s.endswith('\n') and value.endswith('\n'): - return value[:-1] - return value + return base64.decodestring(s) Modified: python/trunk/Misc/ACKS ============================================================================== --- python/trunk/Misc/ACKS (original) +++ python/trunk/Misc/ACKS Mon Mar 8 03:04:06 2010 @@ -10,6 +10,7 @@ PS: In the standard Python distribution, this file is encoded in UTF-8. +Joaquin Cuenca Abela David Abrahams Jim Ahlstrom Farhan Ahmad Modified: python/trunk/Misc/NEWS ============================================================================== --- python/trunk/Misc/NEWS (original) +++ python/trunk/Misc/NEWS Mon Mar 8 03:04:06 2010 @@ -15,6 +15,11 @@ Library ------- +- Issue #7143: get_payload used to strip any trailing newline from a + base64 transfer-encoded payload *after* decoding it; it no longer does. + This is a behavior change, so email's minor version number is now + bumped, to version 4.0.2, for the 2.7 release. + Extension Modules ----------------- @@ -28,6 +33,7 @@ and standard packing.) + What's New in Python 2.7 alpha 4? ================================= From python-checkins at python.org Mon Mar 8 03:11:07 2010 From: python-checkins at python.org (benjamin.peterson) Date: Mon, 8 Mar 2010 03:11:07 +0100 (CET) Subject: [Python-checkins] r78779 - in python/trunk: Demo/classes/Complex.py Demo/classes/Dates.py Demo/classes/Dbm.py Demo/classes/Range.py Demo/classes/Rev.py Demo/classes/Vec.py Demo/classes/bitvec.py Demo/md5test/md5driver.py Demo/pdist/FSProxy.py Demo/pdist/client.py Demo/pdist/cmdfw.py Demo/pdist/cmptree.py Demo/pdist/cvslib.py Demo/pdist/cvslock.py Demo/pdist/mac.py Demo/pdist/rcsclient.py Demo/pdist/rcslib.py Demo/pdist/security.py Demo/pdist/server.py Demo/pdist/sumtree.py Demo/sockets/broadcast.py Demo/sockets/ftp.py Demo/sockets/radio.py Demo/tix/samples/Balloon.py Demo/tix/samples/BtnBox.py Demo/tix/samples/CmpImg.py Demo/tix/samples/ComboBox.py Demo/tix/samples/Control.py Demo/tix/samples/DirList.py Demo/tix/samples/DirTree.py Demo/tix/samples/NoteBook.py Demo/tix/samples/OptMenu.py Demo/tix/samples/PanedWin.py Demo/tix/samples/PopMenu.py Demo/tix/samples/SHList1.py Demo/tix/samples/SHList2.py Demo/tix/samples/Tree.py Demo/tkinter/guido/AttrDialog.py Demo/tkinter/guido/ManPage.py Demo/tkinter/guido/ShellWindow.py Demo/tkinter/guido/hanoi.py Demo/tkinter/guido/hello.py Demo/tkinter/guido/imagedraw.py Demo/tkinter/guido/imageview.py Demo/tkinter/guido/listtree.py Demo/tkinter/guido/wish.py Mac/Modules/cg/cgscan.py Mac/Modules/cg/cgsupport.py Mac/Modules/qt/setup.py Tools/scripts/mailerdaemon.py Message-ID: <20100308021107.23C71EEA23@mail.python.org> Author: benjamin.peterson Date: Mon Mar 8 03:11:06 2010 New Revision: 78779 Log: remove svn:executable from scripts without a shebang line Modified: python/trunk/Demo/classes/Complex.py (props changed) python/trunk/Demo/classes/Dates.py (props changed) python/trunk/Demo/classes/Dbm.py (props changed) python/trunk/Demo/classes/Range.py (props changed) python/trunk/Demo/classes/Rev.py (props changed) python/trunk/Demo/classes/Vec.py (props changed) python/trunk/Demo/classes/bitvec.py (props changed) python/trunk/Demo/md5test/md5driver.py (props changed) python/trunk/Demo/pdist/FSProxy.py (props changed) python/trunk/Demo/pdist/client.py (props changed) python/trunk/Demo/pdist/cmdfw.py (props changed) python/trunk/Demo/pdist/cmptree.py (props changed) python/trunk/Demo/pdist/cvslib.py (props changed) python/trunk/Demo/pdist/cvslock.py (props changed) python/trunk/Demo/pdist/mac.py (props changed) python/trunk/Demo/pdist/rcsclient.py (props changed) python/trunk/Demo/pdist/rcslib.py (props changed) python/trunk/Demo/pdist/security.py (props changed) python/trunk/Demo/pdist/server.py (props changed) python/trunk/Demo/pdist/sumtree.py (props changed) python/trunk/Demo/sockets/broadcast.py (props changed) python/trunk/Demo/sockets/ftp.py (props changed) python/trunk/Demo/sockets/radio.py (props changed) python/trunk/Demo/tix/samples/Balloon.py (props changed) python/trunk/Demo/tix/samples/BtnBox.py (props changed) python/trunk/Demo/tix/samples/CmpImg.py (props changed) python/trunk/Demo/tix/samples/ComboBox.py (props changed) python/trunk/Demo/tix/samples/Control.py (props changed) python/trunk/Demo/tix/samples/DirList.py (props changed) python/trunk/Demo/tix/samples/DirTree.py (props changed) python/trunk/Demo/tix/samples/NoteBook.py (props changed) python/trunk/Demo/tix/samples/OptMenu.py (props changed) python/trunk/Demo/tix/samples/PanedWin.py (props changed) python/trunk/Demo/tix/samples/PopMenu.py (props changed) python/trunk/Demo/tix/samples/SHList1.py (props changed) python/trunk/Demo/tix/samples/SHList2.py (props changed) python/trunk/Demo/tix/samples/Tree.py (props changed) python/trunk/Demo/tkinter/guido/AttrDialog.py (props changed) python/trunk/Demo/tkinter/guido/ManPage.py (props changed) python/trunk/Demo/tkinter/guido/ShellWindow.py (props changed) python/trunk/Demo/tkinter/guido/hanoi.py (props changed) python/trunk/Demo/tkinter/guido/hello.py (props changed) python/trunk/Demo/tkinter/guido/imagedraw.py (props changed) python/trunk/Demo/tkinter/guido/imageview.py (props changed) python/trunk/Demo/tkinter/guido/listtree.py (props changed) python/trunk/Demo/tkinter/guido/wish.py (props changed) python/trunk/Mac/Modules/cg/cgscan.py (props changed) python/trunk/Mac/Modules/cg/cgsupport.py (props changed) python/trunk/Mac/Modules/qt/setup.py (props changed) python/trunk/Tools/scripts/mailerdaemon.py (props changed) From python-checkins at python.org Mon Mar 8 03:17:05 2010 From: python-checkins at python.org (r.david.murray) Date: Mon, 8 Mar 2010 03:17:05 +0100 (CET) Subject: [Python-checkins] r78780 - in python/branches/py3k: Lib/email/message.py Lib/email/test/data/msg_10.txt Lib/email/test/test_email.py Misc/ACKS Message-ID: <20100308021705.1D348EE9EA@mail.python.org> Author: r.david.murray Date: Mon Mar 8 03:17:03 2010 New Revision: 78780 Log: bdecode was already gone in email 5. This merge adds the test from the trunk patch, and removes the last trace of bdecode, which was a commented out call in message.py. Merged revisions 78778 via svnmerge from svn+ssh://pythondev at svn.python.org/python/trunk ........ r78778 | r.david.murray | 2010-03-07 21:04:06 -0500 (Sun, 07 Mar 2010) | 9 lines Issue #7143: get_payload used to strip any trailing newline from a base64 transfer-encoded payload *after* decoding it; it no longer does. email had a special method in utils, _bdecode, specifically to do this, so it must have served a purpose at some point, yet it is clearly wrong per RFC. Fixed with Barry's approval, but no backport. Email package minor version number is bumped, now version 4.0.1. Patch by Joaquin Cuenca Abela. ........ Modified: python/branches/py3k/ (props changed) python/branches/py3k/Lib/email/message.py python/branches/py3k/Lib/email/test/data/msg_10.txt python/branches/py3k/Lib/email/test/test_email.py python/branches/py3k/Misc/ACKS Modified: python/branches/py3k/Lib/email/message.py ============================================================================== --- python/branches/py3k/Lib/email/message.py (original) +++ python/branches/py3k/Lib/email/message.py Mon Mar 8 03:17:03 2010 @@ -204,7 +204,6 @@ if isinstance(payload, str): payload = payload.encode('raw-unicode-escape') return base64.b64decode(payload) - #return utils._bdecode(payload) except binascii.Error: # Incorrect padding pass Modified: python/branches/py3k/Lib/email/test/data/msg_10.txt ============================================================================== --- python/branches/py3k/Lib/email/test/data/msg_10.txt (original) +++ python/branches/py3k/Lib/email/test/data/msg_10.txt Mon Mar 8 03:17:03 2010 @@ -26,6 +26,13 @@ --BOUNDARY Content-Type: text/plain; charset="iso-8859-1" +Content-Transfer-Encoding: Base64 + +VGhpcyBpcyBhIEJhc2U2NCBlbmNvZGVkIG1lc3NhZ2UuCg== + + +--BOUNDARY +Content-Type: text/plain; charset="iso-8859-1" This has no Content-Transfer-Encoding: header. Modified: python/branches/py3k/Lib/email/test/test_email.py ============================================================================== --- python/branches/py3k/Lib/email/test/test_email.py (original) +++ python/branches/py3k/Lib/email/test/test_email.py Mon Mar 8 03:17:03 2010 @@ -204,8 +204,12 @@ # Subpart 3 is base64 eq(msg.get_payload(2).get_payload(decode=True), b'This is a Base64 encoded message.') - # Subpart 4 has no Content-Transfer-Encoding: header. + # Subpart 4 is base64 with a trailing newline, which + # used to be stripped (issue 7143). eq(msg.get_payload(3).get_payload(decode=True), + b'This is a Base64 encoded message.\n') + # Subpart 5 has no Content-Transfer-Encoding: header. + eq(msg.get_payload(4).get_payload(decode=True), b'This has no Content-Transfer-Encoding: header.\n') def test_get_decoded_uu_payload(self): Modified: python/branches/py3k/Misc/ACKS ============================================================================== --- python/branches/py3k/Misc/ACKS (original) +++ python/branches/py3k/Misc/ACKS Mon Mar 8 03:17:03 2010 @@ -9,6 +9,7 @@ PS: In the standard Python distribution, this file is encoded in UTF-8. +Joaquin Cuenca Abela David Abrahams Jim Ahlstrom Farhan Ahmad From python-checkins at python.org Mon Mar 8 08:00:08 2010 From: python-checkins at python.org (ronald.oussoren) Date: Mon, 8 Mar 2010 08:00:08 +0100 (CET) Subject: [Python-checkins] r78781 - in python/branches/release26-maint: configure configure.in Message-ID: <20100308070008.97B38EEA47@mail.python.org> Author: ronald.oussoren Date: Mon Mar 8 08:00:08 2010 New Revision: 78781 Log: Fix for issue 8084: fixes build issues on OSX 10.6 when targetting OSX 10.4 Modified: python/branches/release26-maint/configure python/branches/release26-maint/configure.in Modified: python/branches/release26-maint/configure ============================================================================== --- python/branches/release26-maint/configure (original) +++ python/branches/release26-maint/configure Mon Mar 8 08:00:08 2010 @@ -2166,6 +2166,8 @@ # has no effect, don't bother defining them Darwin/[6789].*) define_xopen_source=no;; + Darwin/1[6789].*) + define_xopen_source=no;; # On AIX 4 and 5.1, mbstate_t is defined only when _XOPEN_SOURCE == 500 but # used in wcsnrtombs() and mbsnrtowcs() even if _XOPEN_SOURCE is not defined # or has another value. By not (re)defining it, the defaults come in place. @@ -3888,7 +3890,7 @@ { echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6; } fi -rm -f conftest* +rm -f -r conftest* @@ -5427,7 +5429,7 @@ else ac_cv_header_stdc=no fi -rm -f conftest* +rm -f -r conftest* fi @@ -5448,7 +5450,7 @@ else ac_cv_header_stdc=no fi -rm -f conftest* +rm -f -r conftest* fi @@ -6546,7 +6548,7 @@ fi -rm -f conftest* +rm -f -r conftest* { echo "$as_me:$LINENO: result: $was_it_defined" >&5 echo "${ECHO_T}$was_it_defined" >&6; } @@ -7076,7 +7078,7 @@ else ac_cv_type_uid_t=no fi -rm -f conftest* +rm -f -r conftest* fi { echo "$as_me:$LINENO: result: $ac_cv_type_uid_t" >&5 @@ -14201,7 +14203,7 @@ else unistd_defines_pthreads=no fi -rm -f conftest* +rm -f -r conftest* { echo "$as_me:$LINENO: result: $unistd_defines_pthreads" >&5 echo "${ECHO_T}$unistd_defines_pthreads" >&6; } @@ -15815,7 +15817,7 @@ $EGREP "yes" >/dev/null 2>&1; then ipv6type=$i fi -rm -f conftest* +rm -f -r conftest* ;; kame) @@ -15838,7 +15840,7 @@ ipv6libdir=/usr/local/v6/lib ipv6trylibc=yes fi -rm -f conftest* +rm -f -r conftest* ;; linux-glibc) @@ -15859,7 +15861,7 @@ ipv6type=$i; ipv6trylibc=yes fi -rm -f conftest* +rm -f -r conftest* ;; linux-inet6) @@ -15897,7 +15899,7 @@ ipv6lib=inet6; ipv6libdir=/usr/local/v6/lib fi -rm -f conftest* +rm -f -r conftest* ;; v6d) @@ -15920,7 +15922,7 @@ ipv6libdir=/usr/local/v6/lib; BASECFLAGS="-I/usr/local/v6/include $BASECFLAGS" fi -rm -f conftest* +rm -f -r conftest* ;; zeta) @@ -15942,7 +15944,7 @@ ipv6lib=inet6; ipv6libdir=/usr/local/v6/lib fi -rm -f conftest* +rm -f -r conftest* ;; esac @@ -23720,7 +23722,7 @@ _ACEOF fi -rm -f conftest* +rm -f -r conftest* cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ @@ -23739,7 +23741,7 @@ _ACEOF fi -rm -f conftest* +rm -f -r conftest* fi @@ -24009,7 +24011,7 @@ _ACEOF fi -rm -f conftest* +rm -f -r conftest* fi Modified: python/branches/release26-maint/configure.in ============================================================================== --- python/branches/release26-maint/configure.in (original) +++ python/branches/release26-maint/configure.in Mon Mar 8 08:00:08 2010 @@ -324,6 +324,8 @@ # has no effect, don't bother defining them Darwin/@<:@6789@:>@.*) define_xopen_source=no;; + Darwin/1@<:@6789@:>@.*) + define_xopen_source=no;; # On AIX 4 and 5.1, mbstate_t is defined only when _XOPEN_SOURCE == 500 but # used in wcsnrtombs() and mbsnrtowcs() even if _XOPEN_SOURCE is not defined # or has another value. By not (re)defining it, the defaults come in place. From python-checkins at python.org Mon Mar 8 08:02:03 2010 From: python-checkins at python.org (ronald.oussoren) Date: Mon, 8 Mar 2010 08:02:03 +0100 (CET) Subject: [Python-checkins] r78782 - in python/branches/py3k: configure configure.in Message-ID: <20100308070203.A5EF4EE9C1@mail.python.org> Author: ronald.oussoren Date: Mon Mar 8 08:02:03 2010 New Revision: 78782 Log: Fix for issue 8067 Modified: python/branches/py3k/configure python/branches/py3k/configure.in Modified: python/branches/py3k/configure ============================================================================== --- python/branches/py3k/configure (original) +++ python/branches/py3k/configure Mon Mar 8 08:02:03 2010 @@ -1,5 +1,5 @@ #! /bin/sh -# From configure.in Revision: 78196 . +# From configure.in Revision: 78476 . # Guess values for system-dependent variables and create Makefiles. # Generated by GNU Autoconf 2.61 for python 3.2. # @@ -2154,6 +2154,8 @@ # has no effect, don't bother defining them Darwin/[6789].*) define_xopen_source=no;; + Darwin/1[6789].*) + define_xopen_source=no;; # On AIX 4 and 5.1, mbstate_t is defined only when _XOPEN_SOURCE == 500 but # used in wcsnrtombs() and mbsnrtowcs() even if _XOPEN_SOURCE is not defined # or has another value. By not (re)defining it, the defaults come in place. @@ -3829,7 +3831,7 @@ { echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6; } fi -rm -f conftest* +rm -f -r conftest* @@ -5404,7 +5406,7 @@ else ac_cv_header_stdc=no fi -rm -f conftest* +rm -f -r conftest* fi @@ -5425,7 +5427,7 @@ else ac_cv_header_stdc=no fi -rm -f conftest* +rm -f -r conftest* fi @@ -6525,7 +6527,7 @@ fi -rm -f conftest* +rm -f -r conftest* { echo "$as_me:$LINENO: result: $was_it_defined" >&5 echo "${ECHO_T}$was_it_defined" >&6; } @@ -7055,7 +7057,7 @@ else ac_cv_type_uid_t=no fi -rm -f conftest* +rm -f -r conftest* fi { echo "$as_me:$LINENO: result: $ac_cv_type_uid_t" >&5 @@ -15724,7 +15726,7 @@ else unistd_defines_pthreads=no fi -rm -f conftest* +rm -f -r conftest* { echo "$as_me:$LINENO: result: $unistd_defines_pthreads" >&5 echo "${ECHO_T}$unistd_defines_pthreads" >&6; } @@ -17022,7 +17024,7 @@ $EGREP "yes" >/dev/null 2>&1; then ipv6type=$i fi -rm -f conftest* +rm -f -r conftest* ;; kame) @@ -17045,7 +17047,7 @@ ipv6libdir=/usr/local/v6/lib ipv6trylibc=yes fi -rm -f conftest* +rm -f -r conftest* ;; linux-glibc) @@ -17066,7 +17068,7 @@ ipv6type=$i; ipv6trylibc=yes fi -rm -f conftest* +rm -f -r conftest* ;; linux-inet6) @@ -17104,7 +17106,7 @@ ipv6lib=inet6; ipv6libdir=/usr/local/v6/lib fi -rm -f conftest* +rm -f -r conftest* ;; v6d) @@ -17127,7 +17129,7 @@ ipv6libdir=/usr/local/v6/lib; BASECFLAGS="-I/usr/local/v6/include $BASECFLAGS" fi -rm -f conftest* +rm -f -r conftest* ;; zeta) @@ -17149,7 +17151,7 @@ ipv6lib=inet6; ipv6libdir=/usr/local/v6/lib fi -rm -f conftest* +rm -f -r conftest* ;; esac @@ -25664,7 +25666,7 @@ _ACEOF fi -rm -f conftest* +rm -f -r conftest* cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ @@ -25683,7 +25685,7 @@ _ACEOF fi -rm -f conftest* +rm -f -r conftest* fi @@ -25953,7 +25955,7 @@ _ACEOF fi -rm -f conftest* +rm -f -r conftest* fi Modified: python/branches/py3k/configure.in ============================================================================== --- python/branches/py3k/configure.in (original) +++ python/branches/py3k/configure.in Mon Mar 8 08:02:03 2010 @@ -319,6 +319,8 @@ # has no effect, don't bother defining them Darwin/@<:@6789@:>@.*) define_xopen_source=no;; + Darwin/1@<:@6789@:>@.*) + define_xopen_source=no;; # On AIX 4 and 5.1, mbstate_t is defined only when _XOPEN_SOURCE == 500 but # used in wcsnrtombs() and mbsnrtowcs() even if _XOPEN_SOURCE is not defined # or has another value. By not (re)defining it, the defaults come in place. From python-checkins at python.org Mon Mar 8 08:03:14 2010 From: python-checkins at python.org (ronald.oussoren) Date: Mon, 8 Mar 2010 08:03:14 +0100 (CET) Subject: [Python-checkins] r78783 - in python/branches/release31-maint: configure configure.in Message-ID: <20100308070314.91DD8EE9C1@mail.python.org> Author: ronald.oussoren Date: Mon Mar 8 08:03:14 2010 New Revision: 78783 Log: Merged revisions 78782 via svnmerge from svn+ssh://pythondev at svn.python.org/python/branches/py3k ........ r78782 | ronald.oussoren | 2010-03-08 08:02:03 +0100 (Mon, 08 Mar 2010) | 2 lines Fix for issue 8067 ........ Modified: python/branches/release31-maint/configure python/branches/release31-maint/configure.in Modified: python/branches/release31-maint/configure ============================================================================== --- python/branches/release31-maint/configure (original) +++ python/branches/release31-maint/configure Mon Mar 8 08:03:14 2010 @@ -1,5 +1,5 @@ #! /bin/sh -# From configure.in Revision: 78197 . +# From configure.in Revision: 78477 . # Guess values for system-dependent variables and create Makefiles. # Generated by GNU Autoconf 2.61 for python 3.1. # @@ -2160,6 +2160,8 @@ # has no effect, don't bother defining them Darwin/[6789].*) define_xopen_source=no;; + Darwin/1[6789].*) + define_xopen_source=no;; # On AIX 4 and 5.1, mbstate_t is defined only when _XOPEN_SOURCE == 500 but # used in wcsnrtombs() and mbsnrtowcs() even if _XOPEN_SOURCE is not defined # or has another value. By not (re)defining it, the defaults come in place. @@ -3835,7 +3837,7 @@ { echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6; } fi -rm -f conftest* +rm -f -r conftest* @@ -5383,7 +5385,7 @@ else ac_cv_header_stdc=no fi -rm -f conftest* +rm -f -r conftest* fi @@ -5404,7 +5406,7 @@ else ac_cv_header_stdc=no fi -rm -f conftest* +rm -f -r conftest* fi @@ -6502,7 +6504,7 @@ fi -rm -f conftest* +rm -f -r conftest* { echo "$as_me:$LINENO: result: $was_it_defined" >&5 echo "${ECHO_T}$was_it_defined" >&6; } @@ -7032,7 +7034,7 @@ else ac_cv_type_uid_t=no fi -rm -f conftest* +rm -f -r conftest* fi { echo "$as_me:$LINENO: result: $ac_cv_type_uid_t" >&5 @@ -14447,7 +14449,7 @@ else unistd_defines_pthreads=no fi -rm -f conftest* +rm -f -r conftest* { echo "$as_me:$LINENO: result: $unistd_defines_pthreads" >&5 echo "${ECHO_T}$unistd_defines_pthreads" >&6; } @@ -15915,7 +15917,7 @@ $EGREP "yes" >/dev/null 2>&1; then ipv6type=$i fi -rm -f conftest* +rm -f -r conftest* ;; kame) @@ -15938,7 +15940,7 @@ ipv6libdir=/usr/local/v6/lib ipv6trylibc=yes fi -rm -f conftest* +rm -f -r conftest* ;; linux-glibc) @@ -15959,7 +15961,7 @@ ipv6type=$i; ipv6trylibc=yes fi -rm -f conftest* +rm -f -r conftest* ;; linux-inet6) @@ -15997,7 +15999,7 @@ ipv6lib=inet6; ipv6libdir=/usr/local/v6/lib fi -rm -f conftest* +rm -f -r conftest* ;; v6d) @@ -16020,7 +16022,7 @@ ipv6libdir=/usr/local/v6/lib; BASECFLAGS="-I/usr/local/v6/include $BASECFLAGS" fi -rm -f conftest* +rm -f -r conftest* ;; zeta) @@ -16042,7 +16044,7 @@ ipv6lib=inet6; ipv6libdir=/usr/local/v6/lib fi -rm -f conftest* +rm -f -r conftest* ;; esac @@ -24295,7 +24297,7 @@ _ACEOF fi -rm -f conftest* +rm -f -r conftest* cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ @@ -24314,7 +24316,7 @@ _ACEOF fi -rm -f conftest* +rm -f -r conftest* fi @@ -24584,7 +24586,7 @@ _ACEOF fi -rm -f conftest* +rm -f -r conftest* fi Modified: python/branches/release31-maint/configure.in ============================================================================== --- python/branches/release31-maint/configure.in (original) +++ python/branches/release31-maint/configure.in Mon Mar 8 08:03:14 2010 @@ -322,6 +322,8 @@ # has no effect, don't bother defining them Darwin/@<:@6789@:>@.*) define_xopen_source=no;; + Darwin/1@<:@6789@:>@.*) + define_xopen_source=no;; # On AIX 4 and 5.1, mbstate_t is defined only when _XOPEN_SOURCE == 500 but # used in wcsnrtombs() and mbsnrtowcs() even if _XOPEN_SOURCE is not defined # or has another value. By not (re)defining it, the defaults come in place. From python-checkins at python.org Mon Mar 8 08:06:47 2010 From: python-checkins at python.org (ronald.oussoren) Date: Mon, 8 Mar 2010 08:06:47 +0100 (CET) Subject: [Python-checkins] r78784 - python/trunk/setup.py Message-ID: <20100308070647.C7D5BEE9C1@mail.python.org> Author: ronald.oussoren Date: Mon Mar 8 08:06:47 2010 New Revision: 78784 Log: Fix for issue 8066: readline should not be linked against libedit when the deployment target is 10.4, libedit on 10.4 is too broken. Modified: python/trunk/setup.py Modified: python/trunk/setup.py ============================================================================== --- python/trunk/setup.py (original) +++ python/trunk/setup.py Mon Mar 8 08:06:47 2010 @@ -552,6 +552,9 @@ do_readline = self.compiler.find_library_file(lib_dirs, 'readline') if platform == 'darwin': os_release = int(os.uname()[2].split('.')[0]) + dep_target = sysconfig.get_config_var('MACOSX_DEPLOYMENT_TARGET') + if dep_target and dep_target.split('.') < ['10', '5']: + os_release = 8 if os_release < 9: # MacOSX 10.4 has a broken readline. Don't try to build # the readline module unless the user has installed a fixed @@ -1382,7 +1385,7 @@ if platform == 'darwin' and ("--disable-toolbox-glue" not in sysconfig.get_config_var("CONFIG_ARGS")): - if os.uname()[2] > '8.': + if int(os.uname()[2].split('.')[0]) >= 8: # We're on Mac OS X 10.4 or later, the compiler should # support '-Wno-deprecated-declarations'. This will # surpress deprecation warnings for the Carbon extensions, From python-checkins at python.org Mon Mar 8 08:08:25 2010 From: python-checkins at python.org (ronald.oussoren) Date: Mon, 8 Mar 2010 08:08:25 +0100 (CET) Subject: [Python-checkins] r78785 - in python/branches/release26-maint: setup.py Message-ID: <20100308070825.EFFF2EE9C1@mail.python.org> Author: ronald.oussoren Date: Mon Mar 8 08:08:25 2010 New Revision: 78785 Log: Merged revisions 78784 via svnmerge from svn+ssh://pythondev at svn.python.org/python/trunk ........ r78784 | ronald.oussoren | 2010-03-08 08:06:47 +0100 (Mon, 08 Mar 2010) | 3 lines Fix for issue 8066: readline should not be linked against libedit when the deployment target is 10.4, libedit on 10.4 is too broken. ........ Modified: python/branches/release26-maint/ (props changed) python/branches/release26-maint/setup.py Modified: python/branches/release26-maint/setup.py ============================================================================== --- python/branches/release26-maint/setup.py (original) +++ python/branches/release26-maint/setup.py Mon Mar 8 08:08:25 2010 @@ -558,6 +558,9 @@ do_readline = self.compiler.find_library_file(lib_dirs, 'readline') if platform == 'darwin': os_release = int(os.uname()[2].split('.')[0]) + dep_target = sysconfig.get_config_var('MACOSX_DEPLOYMENT_TARGET') + if dep_target and dep_target.split('.') < ['10', '5']: + os_release = 8 if os_release < 9: # MacOSX 10.4 has a broken readline. Don't try to build # the readline module unless the user has installed a fixed @@ -1366,7 +1369,7 @@ if platform == 'darwin' and ("--disable-toolbox-glue" not in sysconfig.get_config_var("CONFIG_ARGS")): - if os.uname()[2] > '8.': + if int(os.uname()[2].split('.')[0]) >= 8: # We're on Mac OS X 10.4 or later, the compiler should # support '-Wno-deprecated-declarations'. This will # surpress deprecation warnings for the Carbon extensions, From python-checkins at python.org Mon Mar 8 08:09:59 2010 From: python-checkins at python.org (ronald.oussoren) Date: Mon, 8 Mar 2010 08:09:59 +0100 (CET) Subject: [Python-checkins] r78786 - in python/branches/py3k: setup.py Message-ID: <20100308070959.2E2AAEEA18@mail.python.org> Author: ronald.oussoren Date: Mon Mar 8 08:09:59 2010 New Revision: 78786 Log: Merged revisions 78784 via svnmerge from svn+ssh://pythondev at svn.python.org/python/trunk ........ r78784 | ronald.oussoren | 2010-03-08 08:06:47 +0100 (Mon, 08 Mar 2010) | 3 lines Fix for issue 8066: readline should not be linked against libedit when the deployment target is 10.4, libedit on 10.4 is too broken. ........ Modified: python/branches/py3k/ (props changed) python/branches/py3k/setup.py Modified: python/branches/py3k/setup.py ============================================================================== --- python/branches/py3k/setup.py (original) +++ python/branches/py3k/setup.py Mon Mar 8 08:09:59 2010 @@ -492,6 +492,9 @@ do_readline = self.compiler_obj.find_library_file(lib_dirs, 'readline') if platform == 'darwin': os_release = int(os.uname()[2].split('.')[0]) + dep_target = sysconfig.get_config_var('MACOSX_DEPLOYMENT_TARGET') + if dep_target and dep_target.split('.') < ['10', '5']: + os_release = 8 if os_release < 9: # MacOSX 10.4 has a broken readline. Don't try to build # the readline module unless the user has installed a fixed From python-checkins at python.org Mon Mar 8 08:21:17 2010 From: python-checkins at python.org (florent.xicluna) Date: Mon, 8 Mar 2010 08:21:17 +0100 (CET) Subject: [Python-checkins] r78787 - python/trunk/Lib/multiprocessing/pool.py Message-ID: <20100308072117.0FDD9EE9C1@mail.python.org> Author: florent.xicluna Date: Mon Mar 8 08:21:16 2010 New Revision: 78787 Log: Don't fail on a debug() statement, if the worker PID is (still) None. Modified: python/trunk/Lib/multiprocessing/pool.py Modified: python/trunk/Lib/multiprocessing/pool.py ============================================================================== --- python/trunk/Lib/multiprocessing/pool.py (original) +++ python/trunk/Lib/multiprocessing/pool.py Mon Mar 8 08:21:16 2010 @@ -451,7 +451,7 @@ for w in pool: if w.exitcode is None: # worker has not yet exited - debug('cleaning up worker %d' % w.pid) + debug('cleaning up worker %s' % w.pid) w.join() # From ncoghlan at gmail.com Mon Mar 8 11:55:05 2010 From: ncoghlan at gmail.com (Nick Coghlan) Date: Mon, 08 Mar 2010 20:55:05 +1000 Subject: [Python-checkins] r78758 - in python/trunk: Lib/test/string_tests.py Lib/test/test_ascii_formatd.py Lib/test/test_fileio.py Lib/test/test_index.py Lib/test/test_random.py Lib/test/test_support.py Lib/test/test_unicode.py Misc/NEWS In-Reply-To: <4B93DA92.7060508@trueblade.com> References: <20100307121833.758EEFB97@mail.python.org> <4B93A1D4.4050605@gmail.com> <4B93DA92.7060508@trueblade.com> Message-ID: <4B94D789.4060205@gmail.com> Eric Smith wrote: > Florent XICLUNA wrote: >> 2010/3/7 Nick Coghlan: >>> The default here needs to be "quiet=True" so that it gives the same >>> behaviour as the old one if you don't provide any arguments. >> >> The test failure (with quiet=False) will highlight when the context >> manager "check_warnings()" is no longer needed. It displays an helpful >> message to identify which warnings are no longer raised. >> Obviously these new features will not be backported to 2.6. > > I think the issue is that we don't want to break compatibility, even > with major versions (2.6 -> 2.7), unless we have good reason to and it's > discussed on python-dev. Yep. This is a documented API with a certain existing behaviour. We can't cause it to raise exceptions in user's code without a really good reason (and I don't see any such reason here - defaulting to the old behaviour instead of the new behaviour is straightforward). Cheers, Nick. -- Nick Coghlan | ncoghlan at gmail.com | Brisbane, Australia --------------------------------------------------------------- From python-checkins at python.org Mon Mar 8 11:58:12 2010 From: python-checkins at python.org (florent.xicluna) Date: Mon, 8 Mar 2010 11:58:12 +0100 (CET) Subject: [Python-checkins] r78788 - in python/trunk: Doc/library/subprocess.rst Lib/subprocess.py Message-ID: <20100308105812.C4C7EC67B@mail.python.org> Author: florent.xicluna Date: Mon Mar 8 11:58:12 2010 New Revision: 78788 Log: Fix syntax: "rc != None" -> "rc is not None" Modified: python/trunk/Doc/library/subprocess.rst python/trunk/Lib/subprocess.py Modified: python/trunk/Doc/library/subprocess.rst ============================================================================== --- python/trunk/Doc/library/subprocess.rst (original) +++ python/trunk/Doc/library/subprocess.rst Mon Mar 8 11:58:12 2010 @@ -541,7 +541,7 @@ pipe = os.popen("cmd", 'w') ... rc = pipe.close() - if rc != None and rc % 256: + if rc is not None and rc % 256: print "There were some errors" ==> process = Popen("cmd", 'w', shell=True, stdin=PIPE) Modified: python/trunk/Lib/subprocess.py ============================================================================== --- python/trunk/Lib/subprocess.py (original) +++ python/trunk/Lib/subprocess.py Mon Mar 8 11:58:12 2010 @@ -349,7 +349,7 @@ pipe = os.popen("cmd", 'w') ... rc = pipe.close() -if rc != None and rc % 256: +if rc is not None and rc % 256: print "There were some errors" ==> process = Popen("cmd", 'w', shell=True, stdin=PIPE) From python-checkins at python.org Mon Mar 8 11:59:33 2010 From: python-checkins at python.org (florent.xicluna) Date: Mon, 8 Mar 2010 11:59:33 +0100 (CET) Subject: [Python-checkins] r78789 - python/trunk/Lib/test/test_subprocess.py Message-ID: <20100308105933.6B114C6CD@mail.python.org> Author: florent.xicluna Date: Mon Mar 8 11:59:33 2010 New Revision: 78789 Log: Replace the stderr logging with assertNotEqual(returncode, 0). Modified: python/trunk/Lib/test/test_subprocess.py Modified: python/trunk/Lib/test/test_subprocess.py ============================================================================== --- python/trunk/Lib/test/test_subprocess.py (original) +++ python/trunk/Lib/test/test_subprocess.py Mon Mar 8 11:59:33 2010 @@ -770,7 +770,7 @@ p = subprocess.Popen([sys.executable, "-c", "input()"], stdin=subprocess.PIPE) - # Let the process initialize + # Let the process initialize (Issue #3137) time.sleep(0.1) # The process should not terminate prematurely self.assertIsNone(p.poll()) @@ -786,10 +786,8 @@ if count > 1: print >>sys.stderr, ("p.{}{} succeeded after " "{} attempts".format(method, args, count)) - if returncode == 0: - # On some win32 platforms, it returns 0. See #2777. - print >>sys.stderr, "p.{}{} returned 0".format(method, args) self.assertEqual(p.wait(), returncode) + self.assertNotEqual(returncode, 0) def test_send_signal(self): self._kill_process('send_signal', signal.SIGTERM) From python-checkins at python.org Mon Mar 8 12:01:39 2010 From: python-checkins at python.org (florent.xicluna) Date: Mon, 8 Mar 2010 12:01:39 +0100 (CET) Subject: [Python-checkins] r78790 - python/trunk/Lib/multiprocessing/pool.py Message-ID: <20100308110139.2C3BDFDD9@mail.python.org> Author: florent.xicluna Date: Mon Mar 8 12:01:39 2010 New Revision: 78790 Log: On finalize, don't try to join not started process. Modified: python/trunk/Lib/multiprocessing/pool.py Modified: python/trunk/Lib/multiprocessing/pool.py ============================================================================== --- python/trunk/Lib/multiprocessing/pool.py (original) +++ python/trunk/Lib/multiprocessing/pool.py Mon Mar 8 12:01:39 2010 @@ -447,12 +447,10 @@ if pool and hasattr(pool[0], 'terminate'): debug('joining pool workers') for p in pool: - p.join() - for w in pool: - if w.exitcode is None: + if p.is_alive(): # worker has not yet exited - debug('cleaning up worker %s' % w.pid) - w.join() + debug('cleaning up worker %d' % p.pid) + p.join() # # Class whose instances are returned by `Pool.apply_async()` From ncoghlan at gmail.com Mon Mar 8 12:03:07 2010 From: ncoghlan at gmail.com (Nick Coghlan) Date: Mon, 08 Mar 2010 21:03:07 +1000 Subject: [Python-checkins] r78772 - python/trunk/Doc/reference/expressions.rst In-Reply-To: <20100307211228.C72D3EEA0F@mail.python.org> References: <20100307211228.C72D3EEA0F@mail.python.org> Message-ID: <4B94D96B.2080605@gmail.com> georg.brandl wrote: > +The expression ``x if C else y`` first evaluates the condition, *C* (*not* *a*); s/a/x/? Cheers, Nick. -- Nick Coghlan | ncoghlan at gmail.com | Brisbane, Australia --------------------------------------------------------------- From python-checkins at python.org Mon Mar 8 13:00:39 2010 From: python-checkins at python.org (andrew.kuchling) Date: Mon, 8 Mar 2010 13:00:39 +0100 (CET) Subject: [Python-checkins] r78791 - python/trunk/Doc/whatsnew/2.7.rst Message-ID: <20100308120039.39771FC49@mail.python.org> Author: andrew.kuchling Date: Mon Mar 8 13:00:39 2010 New Revision: 78791 Log: Add various items Modified: python/trunk/Doc/whatsnew/2.7.rst Modified: python/trunk/Doc/whatsnew/2.7.rst ============================================================================== --- python/trunk/Doc/whatsnew/2.7.rst (original) +++ python/trunk/Doc/whatsnew/2.7.rst Mon Mar 8 13:00:39 2010 @@ -812,6 +812,10 @@ named pipes like a regular file by opening them for reading, and this would block indefinitely. (Fixed by Antoine Pitrou; :issue:`3002`.) + New function: :func:`make_archive` takes a filename, archive type + (zip or tar-format), and a directory path, and creates an archive + containing the directory's contents. (Added by Tarek Ziad?.) + * New functions: in the :mod:`site` module, three new functions return various site- and user-specific paths. :func:`getsitepackages` returns a list containing all @@ -837,6 +841,13 @@ prevent buffering many small sends into a single TCP packet. (Contributed by Kristjan Valur Jonsson; :issue:`6192`.) +* Updated module: the :mod:`sqlite` module has been updated to + version 2.6.0 of the `pysqlite package `__. Version 2.6.0 includes a number of bugfixes, and adds + the ability to load SQLite extensions from shared libraries. + Call the ``enable_load_extension(True)`` method to enable extensions, + and then call :meth:`load_extension` to load a particular shared library. + (Updated by Gerhard H?ring.) + * The :mod:`struct` module will no longer silently ignore overflow errors when a value is too large for a particular integer format code (one of ``bBhHiIlLqQ``); it now always raises a @@ -893,6 +904,8 @@ resulting archive. This is more powerful than the existing *exclude* argument, which has therefore been deprecated. (Added by Lars Gust?bel; :issue:`6856`.) + The :class:`TarFile` class also now supports the context manager protocol. + (Added by Lars Gust?bel; :issue:`7232`.) * The :mod:`threading` module's :meth:`Event.wait` method now returns the internal flag on exit. This means the method will usually From python-checkins at python.org Mon Mar 8 13:24:53 2010 From: python-checkins at python.org (florent.xicluna) Date: Mon, 8 Mar 2010 13:24:53 +0100 (CET) Subject: [Python-checkins] r78792 - in python/branches/py3k: Lib/test/test_genericpath.py Lib/test/test_macpath.py Lib/test/test_ntpath.py Lib/test/test_posixpath.py Misc/NEWS Message-ID: <20100308122453.7AA1DFD22@mail.python.org> Author: florent.xicluna Date: Mon Mar 8 13:24:53 2010 New Revision: 78792 Log: Merged revisions 78734-78735 via svnmerge from svn+ssh://pythondev at svn.python.org/python/trunk ........ r78734 | florent.xicluna | 2010-03-06 19:07:18 +0100 (sam, 06 mar 2010) | 2 lines Create test_genericpath.CommonTest and reuse it to test other path modules. ........ r78735 | florent.xicluna | 2010-03-06 19:52:52 +0100 (sam, 06 mar 2010) | 2 lines Minor tweaking of previous r78734, and add a NEWS entry. ........ Modified: python/branches/py3k/ (props changed) python/branches/py3k/Lib/test/test_genericpath.py python/branches/py3k/Lib/test/test_macpath.py python/branches/py3k/Lib/test/test_ntpath.py python/branches/py3k/Lib/test/test_posixpath.py python/branches/py3k/Misc/NEWS Modified: python/branches/py3k/Lib/test/test_genericpath.py ============================================================================== --- python/branches/py3k/Lib/test/test_genericpath.py (original) +++ python/branches/py3k/Lib/test/test_genericpath.py Mon Mar 8 13:24:53 2010 @@ -1,38 +1,87 @@ +""" +Tests common to genericpath, macpath, ntpath and posixpath +""" + import unittest from test import support import os import genericpath -class AllCommonTest(unittest.TestCase): + +def safe_rmdir(dirname): + try: + os.rmdir(dirname) + except OSError: + pass + + +class GenericTest(unittest.TestCase): + # The path module to be tested + pathmodule = genericpath + common_attributes = ['commonprefix', 'getsize', 'getatime', 'getctime', + 'getmtime', 'exists', 'isdir', 'isfile'] + attributes = [] + + def test_no_argument(self): + for attr in self.common_attributes + self.attributes: + with self.assertRaises(TypeError): + getattr(self.pathmodule, attr)() + raise self.fail("{}.{}() did not raise a TypeError" + .format(self.pathmodule.__name__, attr)) def test_commonprefix(self): + commonprefix = self.pathmodule.commonprefix self.assertEqual( - genericpath.commonprefix([]), + commonprefix([]), "" ) self.assertEqual( - genericpath.commonprefix(["/home/swenson/spam", "/home/swen/spam"]), + commonprefix(["/home/swenson/spam", "/home/swen/spam"]), "/home/swen" ) self.assertEqual( - genericpath.commonprefix(["/home/swen/spam", "/home/swen/eggs"]), + commonprefix(["/home/swen/spam", "/home/swen/eggs"]), "/home/swen/" ) self.assertEqual( - genericpath.commonprefix(["/home/swen/spam", "/home/swen/spam"]), + commonprefix(["/home/swen/spam", "/home/swen/spam"]), "/home/swen/spam" ) + self.assertEqual( + commonprefix([b"/home/swenson/spam", b"/home/swen/spam"]), + b"/home/swen" + ) + self.assertEqual( + commonprefix([b"/home/swen/spam", b"/home/swen/eggs"]), + b"/home/swen/" + ) + self.assertEqual( + commonprefix([b"/home/swen/spam", b"/home/swen/spam"]), + b"/home/swen/spam" + ) + + testlist = ['', 'abc', 'Xbcd', 'Xb', 'XY', 'abcd', + 'aXc', 'abd', 'ab', 'aX', 'abcX'] + for s1 in testlist: + for s2 in testlist: + p = commonprefix([s1, s2]) + self.assertTrue(s1.startswith(p)) + self.assertTrue(s2.startswith(p)) + if s1 != s2: + n = len(p) + self.assertNotEqual(s1[n:n+1], s2[n:n+1]) + def test_getsize(self): f = open(support.TESTFN, "wb") try: f.write(b"foo") f.close() - self.assertEqual(genericpath.getsize(support.TESTFN), 3) + self.assertEqual(self.pathmodule.getsize(support.TESTFN), 3) finally: if not f.closed: f.close() - os.remove(support.TESTFN) + support.unlink(support.TESTFN) def test_time(self): f = open(support.TESTFN, "wb") @@ -48,134 +97,177 @@ self.assertEqual(d, b"foobar") self.assertLessEqual( - genericpath.getctime(support.TESTFN), - genericpath.getmtime(support.TESTFN) + self.pathmodule.getctime(support.TESTFN), + self.pathmodule.getmtime(support.TESTFN) ) finally: if not f.closed: f.close() - os.remove(support.TESTFN) + support.unlink(support.TESTFN) def test_exists(self): - self.assertIs(genericpath.exists(support.TESTFN), False) + self.assertIs(self.pathmodule.exists(support.TESTFN), False) f = open(support.TESTFN, "wb") try: f.write(b"foo") f.close() - self.assertIs(genericpath.exists(support.TESTFN), True) + self.assertIs(self.pathmodule.exists(support.TESTFN), True) + if not self.pathmodule == genericpath: + self.assertIs(self.pathmodule.lexists(support.TESTFN), + True) finally: if not f.close(): f.close() - try: - os.remove(support.TESTFN) - except os.error: - pass - - self.assertRaises(TypeError, genericpath.exists) + support.unlink(support.TESTFN) def test_isdir(self): - self.assertIs(genericpath.isdir(support.TESTFN), False) + self.assertIs(self.pathmodule.isdir(support.TESTFN), False) f = open(support.TESTFN, "wb") try: f.write(b"foo") f.close() - self.assertIs(genericpath.isdir(support.TESTFN), False) + self.assertIs(self.pathmodule.isdir(support.TESTFN), False) os.remove(support.TESTFN) os.mkdir(support.TESTFN) - self.assertIs(genericpath.isdir(support.TESTFN), True) + self.assertIs(self.pathmodule.isdir(support.TESTFN), True) os.rmdir(support.TESTFN) finally: if not f.close(): f.close() - try: - os.remove(support.TESTFN) - except os.error: - pass - try: - os.rmdir(support.TESTFN) - except os.error: - pass - - self.assertRaises(TypeError, genericpath.isdir) + support.unlink(support.TESTFN) + safe_rmdir(support.TESTFN) def test_isfile(self): - self.assertIs(genericpath.isfile(support.TESTFN), False) + self.assertIs(self.pathmodule.isfile(support.TESTFN), False) f = open(support.TESTFN, "wb") try: f.write(b"foo") f.close() - self.assertIs(genericpath.isfile(support.TESTFN), True) + self.assertIs(self.pathmodule.isfile(support.TESTFN), True) os.remove(support.TESTFN) os.mkdir(support.TESTFN) - self.assertIs(genericpath.isfile(support.TESTFN), False) + self.assertIs(self.pathmodule.isfile(support.TESTFN), False) os.rmdir(support.TESTFN) finally: if not f.close(): f.close() - try: - os.remove(support.TESTFN) - except os.error: - pass - try: - os.rmdir(support.TESTFN) - except os.error: - pass - - self.assertRaises(TypeError, genericpath.isdir) - - def test_samefile(self): - f = open(support.TESTFN + "1", "wb") - try: - f.write(b"foo") - f.close() - self.assertIs( - genericpath.samefile( - support.TESTFN + "1", - support.TESTFN + "1" - ), - True - ) - # If we don't have links, assume that os.stat doesn't return resonable - # inode information and thus, that samefile() doesn't work - if hasattr(os, "symlink"): - os.symlink( - support.TESTFN + "1", - support.TESTFN + "2" - ) - self.assertIs( - genericpath.samefile( - support.TESTFN + "1", - support.TESTFN + "2" - ), - True - ) - os.remove(support.TESTFN + "2") - f = open(support.TESTFN + "2", "wb") - f.write(b"bar") - f.close() - self.assertIs( - genericpath.samefile( - support.TESTFN + "1", - support.TESTFN + "2" - ), - False - ) - finally: - if not f.close(): - f.close() - try: - os.remove(support.TESTFN + "1") - except os.error: - pass - try: - os.remove(support.TESTFN + "2") - except os.error: - pass + support.unlink(support.TESTFN) + safe_rmdir(support.TESTFN) + + +class CommonTest(GenericTest): + # The path module to be tested + pathmodule = None + common_attributes = GenericTest.common_attributes + [ + # Properties + 'curdir', 'pardir', 'extsep', 'sep', + 'pathsep', 'defpath', 'altsep', 'devnull', + # Methods + 'normcase', 'splitdrive', 'expandvars', 'normpath', 'abspath', + 'join', 'split', 'splitext', 'isabs', 'basename', 'dirname', + 'lexists', 'islink', 'ismount', 'expanduser', 'normpath', 'realpath', + ] + + def test_normcase(self): + # Check that normcase() is idempotent + p = "FoO/./BaR" + p = self.pathmodule.normcase(p) + self.assertEqual(p, self.pathmodule.normcase(p)) + + p = b"FoO/./BaR" + p = self.pathmodule.normcase(p) + self.assertEqual(p, self.pathmodule.normcase(p)) + + def test_splitdrive(self): + # splitdrive for non-NT paths + splitdrive = self.pathmodule.splitdrive + self.assertEqual(splitdrive("/foo/bar"), ("", "/foo/bar")) + self.assertEqual(splitdrive("foo:bar"), ("", "foo:bar")) + self.assertEqual(splitdrive(":foo:bar"), ("", ":foo:bar")) + + self.assertEqual(splitdrive(b"/foo/bar"), (b"", b"/foo/bar")) + self.assertEqual(splitdrive(b"foo:bar"), (b"", b"foo:bar")) + self.assertEqual(splitdrive(b":foo:bar"), (b"", b":foo:bar")) + + def test_expandvars(self): + if self.pathmodule.__name__ == 'macpath': + self.skipTest('macpath.expandvars is a stub') + expandvars = self.pathmodule.expandvars + with support.EnvironmentVarGuard() as env: + env.clear() + env["foo"] = "bar" + env["{foo"] = "baz1" + env["{foo}"] = "baz2" + self.assertEqual(expandvars("foo"), "foo") + self.assertEqual(expandvars("$foo bar"), "bar bar") + self.assertEqual(expandvars("${foo}bar"), "barbar") + self.assertEqual(expandvars("$[foo]bar"), "$[foo]bar") + self.assertEqual(expandvars("$bar bar"), "$bar bar") + self.assertEqual(expandvars("$?bar"), "$?bar") + self.assertEqual(expandvars("${foo}bar"), "barbar") + self.assertEqual(expandvars("$foo}bar"), "bar}bar") + self.assertEqual(expandvars("${foo"), "${foo") + self.assertEqual(expandvars("${{foo}}"), "baz1}") + self.assertEqual(expandvars("$foo$foo"), "barbar") + self.assertEqual(expandvars("$bar$bar"), "$bar$bar") + + self.assertEqual(expandvars(b"foo"), b"foo") + self.assertEqual(expandvars(b"$foo bar"), b"bar bar") + self.assertEqual(expandvars(b"${foo}bar"), b"barbar") + self.assertEqual(expandvars(b"$[foo]bar"), b"$[foo]bar") + self.assertEqual(expandvars(b"$bar bar"), b"$bar bar") + self.assertEqual(expandvars(b"$?bar"), b"$?bar") + self.assertEqual(expandvars(b"${foo}bar"), b"barbar") + self.assertEqual(expandvars(b"$foo}bar"), b"bar}bar") + self.assertEqual(expandvars(b"${foo"), b"${foo") + self.assertEqual(expandvars(b"${{foo}}"), b"baz1}") + self.assertEqual(expandvars(b"$foo$foo"), b"barbar") + self.assertEqual(expandvars(b"$bar$bar"), b"$bar$bar") + + def test_abspath(self): + self.assertIn("foo", self.pathmodule.abspath("foo")) + self.assertIn(b"foo", self.pathmodule.abspath(b"foo")) + + # Abspath returns bytes when the arg is bytes + for path in (b'', b'foo', b'f\xf2\xf2', b'/foo', b'C:\\'): + self.assertIsInstance(self.pathmodule.abspath(path), bytes) + + def test_realpath(self): + self.assertIn("foo", self.pathmodule.realpath("foo")) + self.assertIn(b"foo", self.pathmodule.realpath(b"foo")) + + def test_normpath_issue5827(self): + # Make sure normpath preserves unicode + for path in ('', '.', '/', '\\', '///foo/.//bar//'): + self.assertIsInstance(self.pathmodule.normpath(path), str) + + def test_abspath_issue3426(self): + # Check that abspath returns unicode when the arg is unicode + # with both ASCII and non-ASCII cwds. + abspath = self.pathmodule.abspath + for path in ('', 'fuu', 'f\xf9\xf9', '/fuu', 'U:\\'): + self.assertIsInstance(abspath(path), str) + + unicwd = '\xe7w\xf0' + try: + fsencoding = support.TESTFN_ENCODING or "ascii" + unicwd.encode(fsencoding) + except (AttributeError, UnicodeEncodeError): + # FS encoding is probably ASCII + pass + else: + with support.temp_cwd(unicwd): + for path in ('', 'fuu', 'f\xf9\xf9', '/fuu', 'U:\\'): + self.assertIsInstance(abspath(path), str) + + # Test non-ASCII, non-UTF8 bytes in the path. + with support.temp_cwd('\xe7w\xf0'): + self.test_abspath() - self.assertRaises(TypeError, genericpath.samefile) def test_main(): - support.run_unittest(AllCommonTest) + support.run_unittest(GenericTest) + if __name__=="__main__": test_main() Modified: python/branches/py3k/Lib/test/test_macpath.py ============================================================================== --- python/branches/py3k/Lib/test/test_macpath.py (original) +++ python/branches/py3k/Lib/test/test_macpath.py Mon Mar 8 13:24:53 2010 @@ -1,5 +1,5 @@ import macpath -from test import support +from test import support, test_genericpath import unittest @@ -139,8 +139,13 @@ self.assertEqual(normpath(b"a:"), b"a:") self.assertEqual(normpath(b"a:b:"), b"a:b") + +class MacCommonTest(test_genericpath.CommonTest): + pathmodule = macpath + + def test_main(): - support.run_unittest(MacPathTestCase) + support.run_unittest(MacPathTestCase, MacCommonTest) if __name__ == "__main__": Modified: python/branches/py3k/Lib/test/test_ntpath.py ============================================================================== --- python/branches/py3k/Lib/test/test_ntpath.py (original) +++ python/branches/py3k/Lib/test/test_ntpath.py Mon Mar 8 13:24:53 2010 @@ -1,7 +1,7 @@ import ntpath import os from test.support import verbose, TestFailed -import test.support as support +from test import support, test_genericpath import unittest @@ -174,7 +174,6 @@ tester("ntpath.normpath('C:////a/b')", r'C:\a\b') tester("ntpath.normpath('//machine/share//a/b')", r'\\machine\share\a\b') - def test_expandvars(self): with support.EnvironmentVarGuard() as env: env.clear() @@ -236,8 +235,13 @@ tester('ntpath.relpath("/a/b", "/a/b")', '.') +class NtCommonTest(test_genericpath.CommonTest): + pathmodule = ntpath + attributes = ['relpath', 'splitunc'] + + def test_main(): - support.run_unittest(TestNtpath) + support.run_unittest(TestNtpath, NtCommonTest) if __name__ == "__main__": Modified: python/branches/py3k/Lib/test/test_posixpath.py ============================================================================== --- python/branches/py3k/Lib/test/test_posixpath.py (original) +++ python/branches/py3k/Lib/test/test_posixpath.py Mon Mar 8 13:24:53 2010 @@ -1,5 +1,5 @@ import unittest -from test import support +from test import support, test_genericpath import posixpath, os from posixpath import realpath, abspath, join, dirname, basename, relpath @@ -25,16 +25,6 @@ support.unlink(support.TESTFN + suffix) safe_rmdir(support.TESTFN + suffix) - def test_normcase(self): - # Check that normcase() is idempotent - p = "FoO/./BaR" - self.assertEqual(p, posixpath.normcase(p)) - - p = b"FoO/./BaR" - self.assertEqual(p, posixpath.normcase(p)) - - self.assertRaises(TypeError, posixpath.normcase) - def test_join(self): self.assertEqual(posixpath.join("/foo", "bar", "/bar", "baz"), "/bar/baz") @@ -49,16 +39,9 @@ self.assertEqual(posixpath.join(b"/foo/", b"bar/", b"baz/"), b"/foo/bar/baz/") - self.assertRaises(TypeError, posixpath.join) self.assertRaises(TypeError, posixpath.join, b"bytes", "str") self.assertRaises(TypeError, posixpath.join, "str", b"bytes") - def test_splitdrive(self): - self.assertEqual(posixpath.splitdrive("/foo/bar"), ("", "/foo/bar")) - self.assertEqual(posixpath.splitdrive(b"/foo/bar"), (b"", b"/foo/bar")) - - self.assertRaises(TypeError, posixpath.splitdrive) - def test_split(self): self.assertEqual(posixpath.split("/foo/bar"), ("/foo", "bar")) self.assertEqual(posixpath.split("/"), ("/", "")) @@ -72,8 +55,6 @@ self.assertEqual(posixpath.split(b"////foo"), (b"////", b"foo")) self.assertEqual(posixpath.split(b"//foo//bar"), (b"//foo", b"bar")) - self.assertRaises(TypeError, posixpath.split) - def splitextTest(self, path, filename, ext): self.assertEqual(posixpath.splitext(path), (filename, ext)) self.assertEqual(posixpath.splitext("/" + path), ("/" + filename, ext)) @@ -115,7 +96,6 @@ self.splitextTest("..", "..", "") self.splitextTest("........", "........", "") self.splitextTest("", "", "") - self.assertRaises(TypeError, posixpath.splitext) def test_isabs(self): self.assertIs(posixpath.isabs(""), False) @@ -130,8 +110,6 @@ self.assertIs(posixpath.isabs(b"/foo/bar"), True) self.assertIs(posixpath.isabs(b"foo/bar"), False) - self.assertRaises(TypeError, posixpath.isabs) - def test_basename(self): self.assertEqual(posixpath.basename("/foo/bar"), "bar") self.assertEqual(posixpath.basename("/"), "") @@ -145,8 +123,6 @@ self.assertEqual(posixpath.basename(b"////foo"), b"foo") self.assertEqual(posixpath.basename(b"//foo//bar"), b"bar") - self.assertRaises(TypeError, posixpath.basename) - def test_dirname(self): self.assertEqual(posixpath.dirname("/foo/bar"), "/foo") self.assertEqual(posixpath.dirname("/"), "/") @@ -160,8 +136,6 @@ self.assertEqual(posixpath.dirname(b"////foo"), b"////") self.assertEqual(posixpath.dirname(b"//foo//bar"), b"//foo") - self.assertRaises(TypeError, posixpath.dirname) - def test_commonprefix(self): self.assertEqual( posixpath.commonprefix([]), @@ -252,56 +226,6 @@ if not f.close(): f.close() - self.assertRaises(TypeError, posixpath.islink) - - def test_exists(self): - self.assertIs(posixpath.exists(support.TESTFN), False) - f = open(support.TESTFN, "wb") - try: - f.write(b"foo") - f.close() - self.assertIs(posixpath.exists(support.TESTFN), True) - self.assertIs(posixpath.lexists(support.TESTFN), True) - finally: - if not f.close(): - f.close() - - self.assertRaises(TypeError, posixpath.exists) - - def test_isdir(self): - self.assertIs(posixpath.isdir(support.TESTFN), False) - f = open(support.TESTFN, "wb") - try: - f.write(b"foo") - f.close() - self.assertIs(posixpath.isdir(support.TESTFN), False) - os.remove(support.TESTFN) - os.mkdir(support.TESTFN) - self.assertIs(posixpath.isdir(support.TESTFN), True) - os.rmdir(support.TESTFN) - finally: - if not f.close(): - f.close() - - self.assertRaises(TypeError, posixpath.isdir) - - def test_isfile(self): - self.assertIs(posixpath.isfile(support.TESTFN), False) - f = open(support.TESTFN, "wb") - try: - f.write(b"foo") - f.close() - self.assertIs(posixpath.isfile(support.TESTFN), True) - os.remove(support.TESTFN) - os.mkdir(support.TESTFN) - self.assertIs(posixpath.isfile(support.TESTFN), False) - os.rmdir(support.TESTFN) - finally: - if not f.close(): - f.close() - - self.assertRaises(TypeError, posixpath.isdir) - def test_samefile(self): f = open(support.TESTFN + "1", "wb") try: @@ -343,8 +267,6 @@ if not f.close(): f.close() - self.assertRaises(TypeError, posixpath.samefile) - def test_samestat(self): f = open(support.TESTFN + "1", "wb") try: @@ -384,13 +306,9 @@ if not f.close(): f.close() - self.assertRaises(TypeError, posixpath.samestat) - def test_ismount(self): self.assertIs(posixpath.ismount("/"), True) - self.assertRaises(TypeError, posixpath.ismount) - def test_expanduser(self): self.assertEqual(posixpath.expanduser("foo"), "foo") self.assertEqual(posixpath.expanduser(b"foo"), b"foo") @@ -420,41 +338,6 @@ env['HOME'] = '/' self.assertEqual(posixpath.expanduser("~"), "/") - self.assertRaises(TypeError, posixpath.expanduser) - - def test_expandvars(self): - with support.EnvironmentVarGuard() as env: - env.clear() - env["foo"] = "bar" - env["{foo"] = "baz1" - env["{foo}"] = "baz2" - self.assertEqual(posixpath.expandvars("foo"), "foo") - self.assertEqual(posixpath.expandvars("$foo bar"), "bar bar") - self.assertEqual(posixpath.expandvars("${foo}bar"), "barbar") - self.assertEqual(posixpath.expandvars("$[foo]bar"), "$[foo]bar") - self.assertEqual(posixpath.expandvars("$bar bar"), "$bar bar") - self.assertEqual(posixpath.expandvars("$?bar"), "$?bar") - self.assertEqual(posixpath.expandvars("${foo}bar"), "barbar") - self.assertEqual(posixpath.expandvars("$foo}bar"), "bar}bar") - self.assertEqual(posixpath.expandvars("${foo"), "${foo") - self.assertEqual(posixpath.expandvars("${{foo}}"), "baz1}") - self.assertEqual(posixpath.expandvars("$foo$foo"), "barbar") - self.assertEqual(posixpath.expandvars("$bar$bar"), "$bar$bar") - - self.assertEqual(posixpath.expandvars(b"foo"), b"foo") - self.assertEqual(posixpath.expandvars(b"$foo bar"), b"bar bar") - self.assertEqual(posixpath.expandvars(b"${foo}bar"), b"barbar") - self.assertEqual(posixpath.expandvars(b"$[foo]bar"), b"$[foo]bar") - self.assertEqual(posixpath.expandvars(b"$bar bar"), b"$bar bar") - self.assertEqual(posixpath.expandvars(b"$?bar"), b"$?bar") - self.assertEqual(posixpath.expandvars(b"${foo}bar"), b"barbar") - self.assertEqual(posixpath.expandvars(b"$foo}bar"), b"bar}bar") - self.assertEqual(posixpath.expandvars(b"${foo"), b"${foo") - self.assertEqual(posixpath.expandvars(b"${{foo}}"), b"baz1}") - self.assertEqual(posixpath.expandvars(b"$foo$foo"), b"barbar") - self.assertEqual(posixpath.expandvars(b"$bar$bar"), b"$bar$bar") - self.assertRaises(TypeError, posixpath.expandvars) - def test_normpath(self): self.assertEqual(posixpath.normpath(""), ".") self.assertEqual(posixpath.normpath("/"), "/") @@ -475,19 +358,6 @@ self.assertEqual(posixpath.normpath(b"///..//./foo/.//bar"), b"/foo/bar") - self.assertRaises(TypeError, posixpath.normpath) - - def test_abspath(self): - self.assertIn("foo", posixpath.abspath("foo")) - self.assertIn(b"foo", posixpath.abspath(b"foo")) - - self.assertRaises(TypeError, posixpath.abspath) - - def test_realpath(self): - self.assertIn("foo", realpath("foo")) - self.assertIn(b"foo", realpath(b"foo")) - self.assertRaises(TypeError, posixpath.realpath) - if hasattr(os, "symlink"): def test_realpath_basic(self): # Basic operation. @@ -624,8 +494,15 @@ finally: os.getcwdb = real_getcwdb + +class PosixCommonTest(test_genericpath.CommonTest): + pathmodule = posixpath + attributes = ['relpath', 'samefile', 'sameopenfile', 'samestat'] + + def test_main(): - support.run_unittest(PosixPathTest) + support.run_unittest(PosixPathTest, PosixCommonTest) + if __name__=="__main__": test_main() Modified: python/branches/py3k/Misc/NEWS ============================================================================== --- python/branches/py3k/Misc/NEWS (original) +++ python/branches/py3k/Misc/NEWS Mon Mar 8 13:24:53 2010 @@ -847,6 +847,9 @@ Tests ----- +- The four path modules (genericpath, macpath, ntpath, posixpath) share a + common TestCase for some tests: test_genericpath.CommonTest. + - Print platform information when running the whole test suite, or using the --verbose flag. From python-checkins at python.org Mon Mar 8 13:25:35 2010 From: python-checkins at python.org (florent.xicluna) Date: Mon, 8 Mar 2010 13:25:35 +0100 (CET) Subject: [Python-checkins] r78793 - python/branches/py3k/Lib/macpath.py Message-ID: <20100308122535.7C902FD77@mail.python.org> Author: florent.xicluna Date: Mon Mar 8 13:25:35 2010 New Revision: 78793 Log: Fix macpath to deal with bytes Modified: python/branches/py3k/Lib/macpath.py Modified: python/branches/py3k/Lib/macpath.py ============================================================================== --- python/branches/py3k/Lib/macpath.py (original) +++ python/branches/py3k/Lib/macpath.py Mon Mar 8 13:25:35 2010 @@ -172,7 +172,11 @@ def abspath(path): """Return an absolute path.""" if not isabs(path): - path = join(os.getcwd(), path) + if isinstance(path, bytes): + cwd = os.getcwdb() + else: + cwd = os.getcwd() + path = join(cwd, path) return normpath(path) # realpath is a no-op on systems without islink support From python-checkins at python.org Mon Mar 8 13:39:35 2010 From: python-checkins at python.org (florent.xicluna) Date: Mon, 8 Mar 2010 13:39:35 +0100 (CET) Subject: [Python-checkins] r78794 - in python/trunk/Lib/test: test_genericpath.py test_macpath.py Message-ID: <20100308123935.3466DFC11@mail.python.org> Author: florent.xicluna Date: Mon Mar 8 13:39:35 2010 New Revision: 78794 Log: Move some tests from test_macpath to test_genericpath.CommonTest Modified: python/trunk/Lib/test/test_genericpath.py python/trunk/Lib/test/test_macpath.py Modified: python/trunk/Lib/test/test_genericpath.py ============================================================================== --- python/trunk/Lib/test/test_genericpath.py (original) +++ python/trunk/Lib/test/test_genericpath.py Mon Mar 8 13:39:35 2010 @@ -47,6 +47,18 @@ commonprefix(["/home/swen/spam", "/home/swen/spam"]), "/home/swen/spam" ) + self.assertEqual( + commonprefix(["home:swenson:spam", "home:swen:spam"]), + "home:swen" + ) + self.assertEqual( + commonprefix([":home:swen:spam", ":home:swen:eggs"]), + ":home:swen:" + ) + self.assertEqual( + commonprefix([":home:swen:spam", ":home:swen:spam"]), + ":home:swen:spam" + ) testlist = ['', 'abc', 'Xbcd', 'Xb', 'XY', 'abcd', 'aXc', 'abd', 'ab', 'aX', 'abcX'] Modified: python/trunk/Lib/test/test_macpath.py ============================================================================== --- python/trunk/Lib/test/test_macpath.py (original) +++ python/trunk/Lib/test/test_macpath.py Mon Mar 8 13:39:35 2010 @@ -18,16 +18,6 @@ self.assertFalse(isabs(":foo:bar")) self.assertFalse(isabs(":foo:bar:")) - - def test_commonprefix(self): - commonprefix = macpath.commonprefix - self.assertEqual(commonprefix(["home:swenson:spam", "home:swen:spam"]), - "home:swen") - self.assertEqual(commonprefix([":home:swen:spam", ":home:swen:eggs"]), - ":home:swen:") - self.assertEqual(commonprefix([":home:swen:spam", ":home:swen:spam"]), - ":home:swen:spam") - def test_split(self): split = macpath.split self.assertEqual(split("foo:bar"), From python-checkins at python.org Mon Mar 8 13:42:20 2010 From: python-checkins at python.org (florent.xicluna) Date: Mon, 8 Mar 2010 13:42:20 +0100 (CET) Subject: [Python-checkins] r78795 - in python/branches/py3k: Lib/test/test_genericpath.py Lib/test/test_macpath.py Lib/test/test_posixpath.py Message-ID: <20100308124220.8C40DFD2B@mail.python.org> Author: florent.xicluna Date: Mon Mar 8 13:42:20 2010 New Revision: 78795 Log: Merge other tests from test_*path.py into test_genericpath.CommonTest, and do some cleanup. Modified: python/branches/py3k/ (props changed) python/branches/py3k/Lib/test/test_genericpath.py python/branches/py3k/Lib/test/test_macpath.py python/branches/py3k/Lib/test/test_posixpath.py Modified: python/branches/py3k/Lib/test/test_genericpath.py ============================================================================== --- python/branches/py3k/Lib/test/test_genericpath.py (original) +++ python/branches/py3k/Lib/test/test_genericpath.py Mon Mar 8 13:42:20 2010 @@ -47,6 +47,18 @@ commonprefix(["/home/swen/spam", "/home/swen/spam"]), "/home/swen/spam" ) + self.assertEqual( + commonprefix(["home:swenson:spam", "home:swen:spam"]), + "home:swen" + ) + self.assertEqual( + commonprefix([":home:swen:spam", ":home:swen:eggs"]), + ":home:swen:" + ) + self.assertEqual( + commonprefix([":home:swen:spam", ":home:swen:spam"]), + ":home:swen:spam" + ) self.assertEqual( commonprefix([b"/home/swenson/spam", b"/home/swen/spam"]), @@ -60,6 +72,18 @@ commonprefix([b"/home/swen/spam", b"/home/swen/spam"]), b"/home/swen/spam" ) + self.assertEqual( + commonprefix([b"home:swenson:spam", b"home:swen:spam"]), + b"home:swen" + ) + self.assertEqual( + commonprefix([b":home:swen:spam", b":home:swen:eggs"]), + b":home:swen:" + ) + self.assertEqual( + commonprefix([b":home:swen:spam", b":home:swen:spam"]), + b":home:swen:spam" + ) testlist = ['', 'abc', 'Xbcd', 'Xb', 'XY', 'abcd', 'aXc', 'abd', 'ab', 'aX', 'abcX'] Modified: python/branches/py3k/Lib/test/test_macpath.py ============================================================================== --- python/branches/py3k/Lib/test/test_macpath.py (original) +++ python/branches/py3k/Lib/test/test_macpath.py Mon Mar 8 13:42:20 2010 @@ -26,23 +26,6 @@ self.assertFalse(isabs(b":foo:bar")) self.assertFalse(isabs(b":foo:bar:")) - - def test_commonprefix(self): - commonprefix = macpath.commonprefix - self.assertEqual(commonprefix(["home:swenson:spam", "home:swen:spam"]), - "home:swen") - self.assertEqual(commonprefix([":home:swen:spam", ":home:swen:eggs"]), - ":home:swen:") - self.assertEqual(commonprefix([":home:swen:spam", ":home:swen:spam"]), - ":home:swen:spam") - - self.assertTrue(commonprefix([b"home:swenson:spam", b"home:swen:spam"]) - == b"home:swen") - self.assertTrue(commonprefix([b":home:swen:spam", b":home:swen:eggs"]) - == b":home:swen:") - self.assertTrue(commonprefix([b":home:swen:spam", b":home:swen:spam"]) - == b":home:swen:spam") - def test_split(self): split = macpath.split self.assertEqual(split("foo:bar"), @@ -54,36 +37,28 @@ self.assertEqual(split(":conky:mountpoint:"), (':conky:mountpoint', '')) - self.assertEquals(split(b"foo:bar"), + self.assertEqual(split(b"foo:bar"), (b'foo:', b'bar')) - self.assertEquals(split(b"conky:mountpoint:foo:bar"), + self.assertEqual(split(b"conky:mountpoint:foo:bar"), (b'conky:mountpoint:foo', b'bar')) - self.assertEquals(split(b":"), (b'', b'')) - self.assertEquals(split(b":conky:mountpoint:"), + self.assertEqual(split(b":"), (b'', b'')) + self.assertEqual(split(b":conky:mountpoint:"), (b':conky:mountpoint', b'')) def test_join(self): join = macpath.join - self.assertEquals(join('a', 'b'), ':a:b') - self.assertEquals(join('', 'a:b'), 'a:b') - self.assertEquals(join('a:b', 'c'), 'a:b:c') - self.assertEquals(join('a:b', ':c'), 'a:b:c') - self.assertEquals(join('a', ':b', ':c'), ':a:b:c') - - self.assertEquals(join(b'a', b'b'), b':a:b') - self.assertEquals(join(b'', b'a:b'), b'a:b') - self.assertEquals(join(b'a:b', b'c'), b'a:b:c') - self.assertEquals(join(b'a:b', b':c'), b'a:b:c') - self.assertEquals(join(b'a', b':b', b':c'), b':a:b:c') - - def test_splitdrive(self): - splitdrive = macpath.splitdrive - self.assertEqual(splitdrive("foo:bar"), ('', 'foo:bar')) - self.assertEqual(splitdrive(":foo:bar"), ('', ':foo:bar')) - - self.assertEquals(splitdrive(b"foo:bar"), (b'', b'foo:bar')) - self.assertEquals(splitdrive(b":foo:bar"), (b'', b':foo:bar')) + self.assertEqual(join('a', 'b'), ':a:b') + self.assertEqual(join('', 'a:b'), 'a:b') + self.assertEqual(join('a:b', 'c'), 'a:b:c') + self.assertEqual(join('a:b', ':c'), 'a:b:c') + self.assertEqual(join('a', ':b', ':c'), ':a:b:c') + + self.assertEqual(join(b'a', b'b'), b':a:b') + self.assertEqual(join(b'', b'a:b'), b'a:b') + self.assertEqual(join(b'a:b', b'c'), b'a:b:c') + self.assertEqual(join(b'a:b', b':c'), b'a:b:c') + self.assertEqual(join(b'a', b':b', b':c'), b':a:b:c') def test_splitext(self): splitext = macpath.splitext @@ -95,27 +70,27 @@ self.assertEqual(splitext(""), ('', '')) self.assertEqual(splitext("foo.bar.ext"), ('foo.bar', '.ext')) - self.assertEquals(splitext(b":foo.ext"), (b':foo', b'.ext')) - self.assertEquals(splitext(b"foo:foo.ext"), (b'foo:foo', b'.ext')) - self.assertEquals(splitext(b".ext"), (b'.ext', b'')) - self.assertEquals(splitext(b"foo.ext:foo"), (b'foo.ext:foo', b'')) - self.assertEquals(splitext(b":foo.ext:"), (b':foo.ext:', b'')) - self.assertEquals(splitext(b""), (b'', b'')) - self.assertEquals(splitext(b"foo.bar.ext"), (b'foo.bar', b'.ext')) + self.assertEqual(splitext(b":foo.ext"), (b':foo', b'.ext')) + self.assertEqual(splitext(b"foo:foo.ext"), (b'foo:foo', b'.ext')) + self.assertEqual(splitext(b".ext"), (b'.ext', b'')) + self.assertEqual(splitext(b"foo.ext:foo"), (b'foo.ext:foo', b'')) + self.assertEqual(splitext(b":foo.ext:"), (b':foo.ext:', b'')) + self.assertEqual(splitext(b""), (b'', b'')) + self.assertEqual(splitext(b"foo.bar.ext"), (b'foo.bar', b'.ext')) def test_ismount(self): ismount = macpath.ismount - self.assertEquals(ismount("a:"), True) - self.assertEquals(ismount("a:b"), False) - self.assertEquals(ismount("a:b:"), True) - self.assertEquals(ismount(""), False) - self.assertEquals(ismount(":"), False) - - self.assertEquals(ismount(b"a:"), True) - self.assertEquals(ismount(b"a:b"), False) - self.assertEquals(ismount(b"a:b:"), True) - self.assertEquals(ismount(b""), False) - self.assertEquals(ismount(b":"), False) + self.assertEqual(ismount("a:"), True) + self.assertEqual(ismount("a:b"), False) + self.assertEqual(ismount("a:b:"), True) + self.assertEqual(ismount(""), False) + self.assertEqual(ismount(":"), False) + + self.assertEqual(ismount(b"a:"), True) + self.assertEqual(ismount(b"a:b"), False) + self.assertEqual(ismount(b"a:b:"), True) + self.assertEqual(ismount(b""), False) + self.assertEqual(ismount(b":"), False) def test_normpath(self): normpath = macpath.normpath Modified: python/branches/py3k/Lib/test/test_posixpath.py ============================================================================== --- python/branches/py3k/Lib/test/test_posixpath.py (original) +++ python/branches/py3k/Lib/test/test_posixpath.py Mon Mar 8 13:42:20 2010 @@ -136,78 +136,6 @@ self.assertEqual(posixpath.dirname(b"////foo"), b"////") self.assertEqual(posixpath.dirname(b"//foo//bar"), b"//foo") - def test_commonprefix(self): - self.assertEqual( - posixpath.commonprefix([]), - "" - ) - self.assertEqual( - posixpath.commonprefix(["/home/swenson/spam", "/home/swen/spam"]), - "/home/swen" - ) - self.assertEqual( - posixpath.commonprefix(["/home/swen/spam", "/home/swen/eggs"]), - "/home/swen/" - ) - self.assertEqual( - posixpath.commonprefix(["/home/swen/spam", "/home/swen/spam"]), - "/home/swen/spam" - ) - - self.assertEqual( - posixpath.commonprefix([b"/home/swenson/spam", b"/home/swen/spam"]), - b"/home/swen" - ) - self.assertEqual( - posixpath.commonprefix([b"/home/swen/spam", b"/home/swen/eggs"]), - b"/home/swen/" - ) - self.assertEqual( - posixpath.commonprefix([b"/home/swen/spam", b"/home/swen/spam"]), - b"/home/swen/spam" - ) - - testlist = ['', 'abc', 'Xbcd', 'Xb', 'XY', 'abcd', 'aXc', 'abd', 'ab', 'aX', 'abcX'] - for s1 in testlist: - for s2 in testlist: - p = posixpath.commonprefix([s1, s2]) - self.assertTrue(s1.startswith(p)) - self.assertTrue(s2.startswith(p)) - if s1 != s2: - n = len(p) - self.assertNotEqual(s1[n:n+1], s2[n:n+1]) - - def test_getsize(self): - f = open(support.TESTFN, "wb") - try: - f.write(b"foo") - f.close() - self.assertEqual(posixpath.getsize(support.TESTFN), 3) - finally: - if not f.closed: - f.close() - - def test_time(self): - f = open(support.TESTFN, "wb") - try: - f.write(b"foo") - f.close() - f = open(support.TESTFN, "ab") - f.write(b"bar") - f.close() - f = open(support.TESTFN, "rb") - d = f.read() - f.close() - self.assertEqual(d, b"foobar") - - self.assertLessEqual( - posixpath.getctime(support.TESTFN), - posixpath.getmtime(support.TESTFN) - ) - finally: - if not f.closed: - f.close() - def test_islink(self): self.assertIs(posixpath.islink(support.TESTFN + "1"), False) f = open(support.TESTFN + "1", "wb") From nnorwitz at gmail.com Mon Mar 8 13:44:10 2010 From: nnorwitz at gmail.com (Neal Norwitz) Date: Mon, 8 Mar 2010 07:44:10 -0500 Subject: [Python-checkins] Python Regression Test Failures refleak (1) Message-ID: <20100308124410.GA32094@kbk-i386-bb.psfb.org> More important issues: ---------------------- test_bz2 leaked [-82, 0, 0] references, sum=-82 Less important issues: ---------------------- From python-checkins at python.org Mon Mar 8 13:47:44 2010 From: python-checkins at python.org (florent.xicluna) Date: Mon, 8 Mar 2010 13:47:44 +0100 (CET) Subject: [Python-checkins] r78796 - python/branches/py3k/Lib/test/test_genericpath.py Message-ID: <20100308124744.970D0FD7C@mail.python.org> Author: florent.xicluna Date: Mon Mar 8 13:47:44 2010 New Revision: 78796 Log: Fix string-> bytes conversion on backport from 2.x. Modified: python/branches/py3k/Lib/test/test_genericpath.py Modified: python/branches/py3k/Lib/test/test_genericpath.py ============================================================================== --- python/branches/py3k/Lib/test/test_genericpath.py (original) +++ python/branches/py3k/Lib/test/test_genericpath.py Mon Mar 8 13:47:44 2010 @@ -285,7 +285,7 @@ self.assertIsInstance(abspath(path), str) # Test non-ASCII, non-UTF8 bytes in the path. - with support.temp_cwd('\xe7w\xf0'): + with support.temp_cwd(b'\xe7w\xf0'): self.test_abspath() From python-checkins at python.org Mon Mar 8 14:27:26 2010 From: python-checkins at python.org (florent.xicluna) Date: Mon, 8 Mar 2010 14:27:26 +0100 (CET) Subject: [Python-checkins] r78797 - in python/branches/py3k: Doc/library/subprocess.rst Lib/subprocess.py Lib/test/test_subprocess.py Message-ID: <20100308132726.C6578FA5E@mail.python.org> Author: florent.xicluna Date: Mon Mar 8 14:27:26 2010 New Revision: 78797 Log: Merged revisions 78736,78759,78761,78767,78788-78789 via svnmerge from svn+ssh://pythondev at svn.python.org/python/trunk ........ r78736 | florent.xicluna | 2010-03-06 20:43:41 +0100 (sam, 06 mar 2010) | 2 lines Skip test_send_signal, test_kill, test_terminate on win32 platforms, for 2.7a4 release. ........ r78759 | florent.xicluna | 2010-03-07 13:21:36 +0100 (dim, 07 mar 2010) | 2 lines #2777: Enable test_send_signal, test_terminate and test_kill on win32 platforms. ........ r78761 | florent.xicluna | 2010-03-07 16:27:39 +0100 (dim, 07 mar 2010) | 4 lines Do not fail if returncode is 0 on send_signal/kill/terminate, for win32 platforms. Do not hide the KeyboardInterrupt on POSIX platforms. ........ r78767 | florent.xicluna | 2010-03-07 18:12:23 +0100 (dim, 07 mar 2010) | 2 lines #2777: Try hard to make Win7 buildbot happy... ........ r78788 | florent.xicluna | 2010-03-08 11:58:12 +0100 (lun, 08 mar 2010) | 2 lines Fix syntax: "rc != None" -> "rc is not None" ........ r78789 | florent.xicluna | 2010-03-08 11:59:33 +0100 (lun, 08 mar 2010) | 2 lines Replace the stderr logging with assertNotEqual(returncode, 0). ........ Modified: python/branches/py3k/ (props changed) python/branches/py3k/Doc/library/subprocess.rst python/branches/py3k/Lib/subprocess.py python/branches/py3k/Lib/test/test_subprocess.py Modified: python/branches/py3k/Doc/library/subprocess.rst ============================================================================== --- python/branches/py3k/Doc/library/subprocess.rst (original) +++ python/branches/py3k/Doc/library/subprocess.rst Mon Mar 8 14:27:26 2010 @@ -534,7 +534,7 @@ pipe = os.popen(cmd, 'w') ... rc = pipe.close() - if rc != None and rc % 256: + if rc is not None and rc % 256: print("There were some errors") ==> process = Popen(cmd, 'w', stdin=PIPE) Modified: python/branches/py3k/Lib/subprocess.py ============================================================================== --- python/branches/py3k/Lib/subprocess.py (original) +++ python/branches/py3k/Lib/subprocess.py Mon Mar 8 14:27:26 2010 @@ -110,7 +110,7 @@ The arguments are the same as for the Popen constructor. Example: - >>> retcode = call(["ls", "-l"]) + >>> retcode = subprocess.call(["ls", "-l"]) check_call(*popenargs, **kwargs): Run command with arguments. Wait for command to complete. If the @@ -120,7 +120,7 @@ The arguments are the same as for the Popen constructor. Example: - >>> check_call(["ls", "-l"]) + >>> subprocess.check_call(["ls", "-l"]) 0 getstatusoutput(cmd): Modified: python/branches/py3k/Lib/test/test_subprocess.py ============================================================================== --- python/branches/py3k/Lib/test/test_subprocess.py (original) +++ python/branches/py3k/Lib/test/test_subprocess.py Mon Mar 8 14:27:26 2010 @@ -648,42 +648,39 @@ os.remove(fname) self.assertEqual(rc, 47) - def test_send_signal(self): + def _kill_process(self, method, *args): # Do not inherit file handles from the parent. # It should fix failures on some platforms. p = subprocess.Popen([sys.executable, "-c", "input()"], close_fds=True, - stdin=subprocess.PIPE, stderr=subprocess.PIPE) + stdin=subprocess.PIPE) - # Let the process initialize correctly (Issue #3137) + # Let the process initialize (Issue #3137) time.sleep(0.1) + # The process should not terminate prematurely self.assertIsNone(p.poll()) + # Retry if the process do not receive the signal. count, maxcount = 0, 3 - # Retry if the process do not receive the SIGINT signal. while count < maxcount and p.poll() is None: - p.send_signal(signal.SIGINT) + getattr(p, method)(*args) time.sleep(0.1) count += 1 - self.assertIsNotNone(p.poll(), "the subprocess did not receive " - "the signal SIGINT") + + self.assertIsNotNone(p.poll(), "the subprocess did not terminate") if count > 1: - print("p.send_signal(SIGINT) succeeded " - "after {} attempts".format(count), file=sys.stderr) + print("p.{}{} succeeded after " + "{} attempts".format(method, args, count), file=sys.stderr) + return p + + def test_send_signal(self): + p = self._kill_process('send_signal', signal.SIGINT) self.assertNotEqual(p.wait(), 0) def test_kill(self): - p = subprocess.Popen([sys.executable, "-c", "input()"], - stdin=subprocess.PIPE, close_fds=True) - - self.assertIsNone(p.poll()) - p.kill() + p = self._kill_process('kill') self.assertEqual(p.wait(), -signal.SIGKILL) def test_terminate(self): - p = subprocess.Popen([sys.executable, "-c", "input()"], - stdin=subprocess.PIPE, close_fds=True) - - self.assertIsNone(p.poll()) - p.terminate() + p = self._kill_process('terminate') self.assertEqual(p.wait(), -signal.SIGTERM) @@ -766,28 +763,38 @@ ' -c "import sys; sys.exit(47)"') self.assertEqual(rc, 47) - def test_send_signal(self): - # Do not inherit file handles from the parent. - # It should fix failure on some platforms. - p = subprocess.Popen([sys.executable, "-c", "input()"], close_fds=True) + def _kill_process(self, method, *args): + # Some win32 buildbot raises EOFError if stdin is inherited + p = subprocess.Popen([sys.executable, "-c", "input()"], + stdin=subprocess.PIPE) - self.assertIs(p.poll(), None) - p.send_signal(signal.SIGTERM) - self.assertNotEqual(p.wait(), 0) + # Let the process initialize (Issue #3137) + time.sleep(0.1) + # The process should not terminate prematurely + self.assertIsNone(p.poll()) + # Retry if the process do not receive the signal. + count, maxcount = 0, 3 + while count < maxcount and p.poll() is None: + getattr(p, method)(*args) + time.sleep(0.1) + count += 1 - def test_kill(self): - p = subprocess.Popen([sys.executable, "-c", "input()"], close_fds=True) + returncode = p.poll() + self.assertIsNotNone(returncode, "the subprocess did not terminate") + if count > 1: + print("p.{}{} succeeded after " + "{} attempts".format(method, args, count), file=sys.stderr) + self.assertEqual(p.wait(), returncode) + self.assertNotEqual(returncode, 0) - self.assertIs(p.poll(), None) - p.kill() - self.assertNotEqual(p.wait(), 0) + def test_send_signal(self): + self._kill_process('send_signal', signal.SIGTERM) - def test_terminate(self): - p = subprocess.Popen([sys.executable, "-c", "input()"], close_fds=True) + def test_kill(self): + self._kill_process('kill') - self.assertIs(p.poll(), None) - p.terminate() - self.assertNotEqual(p.wait(), 0) + def test_terminate(self): + self._kill_process('terminate') # The module says: From python-checkins at python.org Mon Mar 8 14:32:18 2010 From: python-checkins at python.org (florent.xicluna) Date: Mon, 8 Mar 2010 14:32:18 +0100 (CET) Subject: [Python-checkins] r78798 - in python/branches/py3k: Lib/multiprocessing/forking.py Lib/multiprocessing/pool.py Message-ID: <20100308133218.02557FAF8@mail.python.org> Author: florent.xicluna Date: Mon Mar 8 14:32:17 2010 New Revision: 78798 Log: Merged revisions 78777,78787,78790 via svnmerge from svn+ssh://pythondev at svn.python.org/python/trunk ........ r78777 | florent.xicluna | 2010-03-08 00:49:03 +0100 (lun, 08 mar 2010) | 4 lines Backport the Popen.poll() protection from subprocess to multiprocessing. See #1731717. It should fix transient failures on test_multiprocessing. ........ r78787 | florent.xicluna | 2010-03-08 08:21:16 +0100 (lun, 08 mar 2010) | 2 lines Don't fail on a debug() statement, if the worker PID is (still) None. ........ r78790 | florent.xicluna | 2010-03-08 12:01:39 +0100 (lun, 08 mar 2010) | 2 lines On finalize, don't try to join not started process. ........ Modified: python/branches/py3k/ (props changed) python/branches/py3k/Lib/multiprocessing/forking.py python/branches/py3k/Lib/multiprocessing/pool.py Modified: python/branches/py3k/Lib/multiprocessing/forking.py ============================================================================== --- python/branches/py3k/Lib/multiprocessing/forking.py (original) +++ python/branches/py3k/Lib/multiprocessing/forking.py Mon Mar 8 14:32:17 2010 @@ -104,7 +104,12 @@ def poll(self, flag=os.WNOHANG): if self.returncode is None: - pid, sts = os.waitpid(self.pid, flag) + try: + pid, sts = os.waitpid(self.pid, flag) + except os.error: + # Child process not yet created. See #1731717 + # e.errno == errno.ECHILD == 10 + return None if pid == self.pid: if os.WIFSIGNALED(sts): self.returncode = -os.WTERMSIG(sts) Modified: python/branches/py3k/Lib/multiprocessing/pool.py ============================================================================== --- python/branches/py3k/Lib/multiprocessing/pool.py (original) +++ python/branches/py3k/Lib/multiprocessing/pool.py Mon Mar 8 14:32:17 2010 @@ -448,12 +448,10 @@ if pool and hasattr(pool[0], 'terminate'): debug('joining pool workers') for p in pool: - p.join() - for w in pool: - if w.exitcode is None: + if p.is_alive(): # worker has not yet exited - debug('cleaning up worker %d' % w.pid) - w.join() + debug('cleaning up worker %d' % p.pid) + p.join() # # Class whose instances are returned by `Pool.apply_async()` From python-checkins at python.org Mon Mar 8 15:44:41 2010 From: python-checkins at python.org (florent.xicluna) Date: Mon, 8 Mar 2010 15:44:41 +0100 (CET) Subject: [Python-checkins] r78799 - python/branches/py3k/Lib/ntpath.py Message-ID: <20100308144441.47A57FCB7@mail.python.org> Author: florent.xicluna Date: Mon Mar 8 15:44:41 2010 New Revision: 78799 Log: Fix ntpath abspath to deal with bytes. Modified: python/branches/py3k/Lib/ntpath.py Modified: python/branches/py3k/Lib/ntpath.py ============================================================================== --- python/branches/py3k/Lib/ntpath.py (original) +++ python/branches/py3k/Lib/ntpath.py Mon Mar 8 15:44:41 2010 @@ -561,6 +561,8 @@ path = _getfullpathname(path) except WindowsError: pass # Bad path - return unchanged. + elif isinstance(path, bytes): + path = os.getcwdb() else: path = os.getcwd() return normpath(path) From python-checkins at python.org Mon Mar 8 16:20:28 2010 From: python-checkins at python.org (florent.xicluna) Date: Mon, 8 Mar 2010 16:20:28 +0100 (CET) Subject: [Python-checkins] r78800 - in python/trunk: Lib/_abcoll.py Lib/abc.py Lib/test/test_collections.py Misc/NEWS Message-ID: <20100308152028.ED73DFD85@mail.python.org> Author: florent.xicluna Date: Mon Mar 8 16:20:28 2010 New Revision: 78800 Log: #7624: Fix isinstance(foo(), collections.Callable) for old-style classes. Modified: python/trunk/Lib/_abcoll.py python/trunk/Lib/abc.py python/trunk/Lib/test/test_collections.py python/trunk/Misc/NEWS Modified: python/trunk/Lib/_abcoll.py ============================================================================== --- python/trunk/Lib/_abcoll.py (original) +++ python/trunk/Lib/_abcoll.py Mon Mar 8 16:20:28 2010 @@ -21,6 +21,14 @@ ### ONE-TRICK PONIES ### +def _hasattr(C, attr): + try: + return any(attr in B.__dict__ for B in C.__mro__) + except AttributeError: + # Old-style class + return hasattr(C, attr) + + class Hashable: __metaclass__ = ABCMeta @@ -31,11 +39,16 @@ @classmethod def __subclasshook__(cls, C): if cls is Hashable: - for B in C.__mro__: - if "__hash__" in B.__dict__: - if B.__dict__["__hash__"]: - return True - break + try: + for B in C.__mro__: + if "__hash__" in B.__dict__: + if B.__dict__["__hash__"]: + return True + break + except AttributeError: + # Old-style class + if getattr(C, "__hash__", None): + return True return NotImplemented @@ -50,7 +63,7 @@ @classmethod def __subclasshook__(cls, C): if cls is Iterable: - if any("__iter__" in B.__dict__ for B in C.__mro__): + if _hasattr(C, "__iter__"): return True return NotImplemented @@ -69,7 +82,7 @@ @classmethod def __subclasshook__(cls, C): if cls is Iterator: - if any("next" in B.__dict__ for B in C.__mro__): + if _hasattr(C, "next"): return True return NotImplemented @@ -84,7 +97,7 @@ @classmethod def __subclasshook__(cls, C): if cls is Sized: - if any("__len__" in B.__dict__ for B in C.__mro__): + if _hasattr(C, "__len__"): return True return NotImplemented @@ -99,7 +112,7 @@ @classmethod def __subclasshook__(cls, C): if cls is Container: - if any("__contains__" in B.__dict__ for B in C.__mro__): + if _hasattr(C, "__contains__"): return True return NotImplemented @@ -114,7 +127,7 @@ @classmethod def __subclasshook__(cls, C): if cls is Callable: - if any("__call__" in B.__dict__ for B in C.__mro__): + if _hasattr(C, "__call__"): return True return NotImplemented Modified: python/trunk/Lib/abc.py ============================================================================== --- python/trunk/Lib/abc.py (original) +++ python/trunk/Lib/abc.py Mon Mar 8 16:20:28 2010 @@ -4,6 +4,11 @@ """Abstract Base Classes (ABCs) according to PEP 3119.""" +# Instance of old-style class +class _C: pass +_InstanceType = type(_C()) + + def abstractmethod(funcobj): """A decorator indicating abstract methods. @@ -124,6 +129,9 @@ if subclass in cls._abc_cache: return True subtype = type(instance) + # Old-style instances + if subtype is _InstanceType: + subtype = subclass if subtype is subclass or subclass is None: if (cls._abc_negative_cache_version == ABCMeta._abc_invalidation_counter and Modified: python/trunk/Lib/test/test_collections.py ============================================================================== --- python/trunk/Lib/test/test_collections.py (original) +++ python/trunk/Lib/test/test_collections.py Mon Mar 8 16:20:28 2010 @@ -231,6 +231,27 @@ C = type('C', (abc,), stubs) self.assertRaises(TypeError, C, name) + def validate_isinstance(self, abc, name): + stub = lambda s, *args: 0 + + # new-style class + C = type('C', (object,), {name: stub}) + self.assertIsInstance(C(), abc) + self.assertTrue(issubclass(C, abc)) + # old-style class + class C: pass + setattr(C, name, stub) + self.assertIsInstance(C(), abc) + self.assertTrue(issubclass(C, abc)) + + # new-style class + C = type('C', (object,), {'__hash__': None}) + self.assertNotIsInstance(C(), abc) + self.assertFalse(issubclass(C, abc)) + # old-style class + class C: pass + self.assertNotIsInstance(C(), abc) + self.assertFalse(issubclass(C, abc)) class TestOneTrickPonyABCs(ABCTestCase): @@ -259,6 +280,7 @@ self.assertEqual(hash(H()), 0) self.assertFalse(issubclass(int, H)) self.validate_abstract_methods(Hashable, '__hash__') + self.validate_isinstance(Hashable, '__hash__') def test_Iterable(self): # Check some non-iterables @@ -283,6 +305,7 @@ self.assertEqual(list(I()), []) self.assertFalse(issubclass(str, I)) self.validate_abstract_methods(Iterable, '__iter__') + self.validate_isinstance(Iterable, '__iter__') def test_Iterator(self): non_samples = [None, 42, 3.14, 1j, "".encode('ascii'), "", (), [], @@ -302,6 +325,7 @@ self.assertIsInstance(x, Iterator) self.assertTrue(issubclass(type(x), Iterator), repr(type(x))) self.validate_abstract_methods(Iterator, 'next') + self.validate_isinstance(Iterator, 'next') def test_Sized(self): non_samples = [None, 42, 3.14, 1j, @@ -319,6 +343,7 @@ self.assertIsInstance(x, Sized) self.assertTrue(issubclass(type(x), Sized), repr(type(x))) self.validate_abstract_methods(Sized, '__len__') + self.validate_isinstance(Sized, '__len__') def test_Container(self): non_samples = [None, 42, 3.14, 1j, @@ -336,6 +361,7 @@ self.assertIsInstance(x, Container) self.assertTrue(issubclass(type(x), Container), repr(type(x))) self.validate_abstract_methods(Container, '__contains__') + self.validate_isinstance(Container, '__contains__') def test_Callable(self): non_samples = [None, 42, 3.14, 1j, @@ -355,6 +381,7 @@ self.assertIsInstance(x, Callable) self.assertTrue(issubclass(type(x), Callable), repr(type(x))) self.validate_abstract_methods(Callable, '__call__') + self.validate_isinstance(Callable, '__call__') def test_direct_subclassing(self): for B in Hashable, Iterable, Iterator, Sized, Container, Callable: @@ -515,8 +542,9 @@ [('a', 3), ('b', 2), ('c', 1)]) self.assertEqual(c['b'], 2) self.assertEqual(c['z'], 0) - self.assertEqual(c.has_key('c'), True) - self.assertEqual(c.has_key('z'), False) + with test_support.check_py3k_warnings(): + self.assertEqual(c.has_key('c'), True) + self.assertEqual(c.has_key('z'), False) self.assertEqual(c.__contains__('c'), True) self.assertEqual(c.__contains__('z'), False) self.assertEqual(c.get('b', 10), 2) Modified: python/trunk/Misc/NEWS ============================================================================== --- python/trunk/Misc/NEWS (original) +++ python/trunk/Misc/NEWS Mon Mar 8 16:20:28 2010 @@ -15,6 +15,9 @@ Library ------- +- Issue #7624: Fix isinstance(foo(), collections.Callable) for old-style + classes. + - Issue #7143: get_payload used to strip any trailing newline from a base64 transfer-encoded payload *after* decoding it; it no longer does. This is a behavior change, so email's minor version number is now From python-checkins at python.org Mon Mar 8 16:34:35 2010 From: python-checkins at python.org (florent.xicluna) Date: Mon, 8 Mar 2010 16:34:35 +0100 (CET) Subject: [Python-checkins] r78801 - in python/branches/py3k: Lib/test/test_collections.py Message-ID: <20100308153435.A1493FC84@mail.python.org> Author: florent.xicluna Date: Mon Mar 8 16:34:35 2010 New Revision: 78801 Log: Backport the tests only. Merged revisions 78800 via svnmerge from svn+ssh://pythondev at svn.python.org/python/trunk ........ r78800 | florent.xicluna | 2010-03-08 16:20:28 +0100 (lun, 08 mar 2010) | 2 lines #7624: Fix isinstance(foo(), collections.Callable) for old-style classes. ........ Modified: python/branches/py3k/ (props changed) python/branches/py3k/Lib/test/test_collections.py Modified: python/branches/py3k/Lib/test/test_collections.py ============================================================================== --- python/branches/py3k/Lib/test/test_collections.py (original) +++ python/branches/py3k/Lib/test/test_collections.py Mon Mar 8 16:34:35 2010 @@ -235,6 +235,17 @@ C = type('C', (abc,), stubs) self.assertRaises(TypeError, C, name) + def validate_isinstance(self, abc, name): + stub = lambda s, *args: 0 + + C = type('C', (object,), {'__hash__': None}) + setattr(C, name, stub) + self.assertIsInstance(C(), abc) + self.assertTrue(issubclass(C, abc)) + + C = type('C', (object,), {'__hash__': None}) + self.assertNotIsInstance(C(), abc) + self.assertFalse(issubclass(C, abc)) class TestOneTrickPonyABCs(ABCTestCase): @@ -262,6 +273,7 @@ self.assertEqual(hash(H()), 0) self.assertFalse(issubclass(int, H)) self.validate_abstract_methods(Hashable, '__hash__') + self.validate_isinstance(Hashable, '__hash__') def test_Iterable(self): # Check some non-iterables @@ -286,6 +298,7 @@ self.assertEqual(list(I()), []) self.assertFalse(issubclass(str, I)) self.validate_abstract_methods(Iterable, '__iter__') + self.validate_isinstance(Iterable, '__iter__') def test_Iterator(self): non_samples = [None, 42, 3.14, 1j, b"", "", (), [], {}, set()] @@ -304,6 +317,7 @@ self.assertIsInstance(x, Iterator) self.assertTrue(issubclass(type(x), Iterator), repr(type(x))) self.validate_abstract_methods(Iterator, '__next__') + self.validate_isinstance(Iterator, '__next__') def test_Sized(self): non_samples = [None, 42, 3.14, 1j, @@ -321,6 +335,7 @@ self.assertIsInstance(x, Sized) self.assertTrue(issubclass(type(x), Sized), repr(type(x))) self.validate_abstract_methods(Sized, '__len__') + self.validate_isinstance(Sized, '__len__') def test_Container(self): non_samples = [None, 42, 3.14, 1j, @@ -338,6 +353,7 @@ self.assertIsInstance(x, Container) self.assertTrue(issubclass(type(x), Container), repr(type(x))) self.validate_abstract_methods(Container, '__contains__') + self.validate_isinstance(Container, '__contains__') def test_Callable(self): non_samples = [None, 42, 3.14, 1j, @@ -357,6 +373,7 @@ self.assertIsInstance(x, Callable) self.assertTrue(issubclass(type(x), Callable), repr(type(x))) self.validate_abstract_methods(Callable, '__call__') + self.validate_isinstance(Callable, '__call__') def test_direct_subclassing(self): for B in Hashable, Iterable, Iterator, Sized, Container, Callable: From python-checkins at python.org Mon Mar 8 17:28:40 2010 From: python-checkins at python.org (georg.brandl) Date: Mon, 8 Mar 2010 17:28:40 +0100 (CET) Subject: [Python-checkins] r78802 - python/trunk/Doc/reference/expressions.rst Message-ID: <20100308162840.336E9FDC9@mail.python.org> Author: georg.brandl Date: Mon Mar 8 17:28:40 2010 New Revision: 78802 Log: Fix typo. Modified: python/trunk/Doc/reference/expressions.rst Modified: python/trunk/Doc/reference/expressions.rst ============================================================================== --- python/trunk/Doc/reference/expressions.rst (original) +++ python/trunk/Doc/reference/expressions.rst Mon Mar 8 17:28:40 2010 @@ -1239,7 +1239,7 @@ Conditional expressions (sometimes called a "ternary operator") have the lowest priority of all Python operations. -The expression ``x if C else y`` first evaluates the condition, *C* (*not* *a*); +The expression ``x if C else y`` first evaluates the condition, *C* (*not* *x*); if *C* is true, *x* is evaluated and its value is returned; otherwise, *y* is evaluated and its value is returned. From g.brandl at gmx.net Mon Mar 8 17:29:13 2010 From: g.brandl at gmx.net (Georg Brandl) Date: Mon, 08 Mar 2010 17:29:13 +0100 Subject: [Python-checkins] r78772 - python/trunk/Doc/reference/expressions.rst In-Reply-To: <4B94D96B.2080605@gmail.com> References: <20100307211228.C72D3EEA0F@mail.python.org> <4B94D96B.2080605@gmail.com> Message-ID: Am 08.03.2010 12:03, schrieb Nick Coghlan: > georg.brandl wrote: > >> +The expression ``x if C else y`` first evaluates the condition, *C* (*not* *a*); > > s/a/x/? Of course. Thanks :) Georg From python-checkins at python.org Mon Mar 8 18:16:58 2010 From: python-checkins at python.org (r.david.murray) Date: Mon, 8 Mar 2010 18:16:58 +0100 (CET) Subject: [Python-checkins] r78803 - python/branches/py3k Message-ID: <20100308171658.40FF4FE38@mail.python.org> Author: r.david.murray Date: Mon Mar 8 18:16:58 2010 New Revision: 78803 Log: Blocked revisions 78558 via svnmerge ........ r78558 | r.david.murray | 2010-03-01 14:14:16 -0500 (Mon, 01 Mar 2010) | 6 lines Issue 3892 again. The bsddb3 replication test still fails randomly. Since this module is unmaintained in the library and gone in py3k, this patch skips the remainder of the replication test if a second timeout occurs, as it randomly does. This should improve buildbot stability. ........ Modified: python/branches/py3k/ (props changed) From python-checkins at python.org Mon Mar 8 18:48:38 2010 From: python-checkins at python.org (r.david.murray) Date: Mon, 8 Mar 2010 18:48:38 +0100 (CET) Subject: [Python-checkins] r78804 - in python/branches/py3k: Doc/Makefile Misc/NEWS Tools/scripts/README Tools/scripts/serve.py Message-ID: <20100308174838.BA01EFE73@mail.python.org> Author: r.david.murray Date: Mon Mar 8 18:48:38 2010 New Revision: 78804 Log: Merged revisions 78416,78430 via svnmerge from svn+ssh://pythondev at svn.python.org/python/trunk ........ r78416 | dirkjan.ochtman | 2010-02-23 23:12:11 -0500 (Tue, 23 Feb 2010) | 1 line Issue #8004: add a serve target to the Doc Makefile. ........ r78430 | dirkjan.ochtman | 2010-02-24 12:06:31 -0500 (Wed, 24 Feb 2010) | 1 line Add some notes about Tools/scripts/serve.py. ........ Added: python/branches/py3k/Tools/scripts/serve.py (contents, props changed) Modified: python/branches/py3k/ (props changed) python/branches/py3k/Doc/Makefile python/branches/py3k/Misc/NEWS python/branches/py3k/Tools/scripts/README Modified: python/branches/py3k/Doc/Makefile ============================================================================== --- python/branches/py3k/Doc/Makefile (original) +++ python/branches/py3k/Doc/Makefile Mon Mar 8 18:48:38 2010 @@ -27,6 +27,7 @@ @echo " suspicious to check for suspicious markup in output text" @echo " coverage to check documentation coverage for library and C API" @echo " dist to create a \"dist\" directory with archived docs for download" + @echo " serve to serve the documentation on the localhost (8000)" # Note: if you update versions here, do the same in make.bat and README.txt checkout: @@ -149,3 +150,6 @@ check: $(PYTHON) tools/rstlint.py -i tools + +serve: + ../Tools/scripts/serve.py build/html Modified: python/branches/py3k/Misc/NEWS ============================================================================== --- python/branches/py3k/Misc/NEWS (original) +++ python/branches/py3k/Misc/NEWS Mon Mar 8 18:48:38 2010 @@ -832,6 +832,9 @@ Documentation ------------ +- A small wsgi server was added as Tools/scripts/serve.py, and is used to + implement a local documentation server via 'make serve' in the doc directory. + - Updating `Using Python` documentation to include description of CPython's -J and -X options. Modified: python/branches/py3k/Tools/scripts/README ============================================================================== --- python/branches/py3k/Tools/scripts/README (original) +++ python/branches/py3k/Tools/scripts/README Mon Mar 8 18:48:38 2010 @@ -56,6 +56,7 @@ redemo.py Basic regular expression demonstration facility reindent.py Change .py files to use 4-space indents. rgrep.py Reverse grep through a file (useful for big logfiles) +serve.py Small wsgiref-based web server, used in make serve in Doc setup.py Install all scripts listed here suff.py Sort a list of files by suffix svneol.py Sets svn:eol-style on all files in directory Added: python/branches/py3k/Tools/scripts/serve.py ============================================================================== --- (empty file) +++ python/branches/py3k/Tools/scripts/serve.py Mon Mar 8 18:48:38 2010 @@ -0,0 +1,31 @@ +#!/usr/bin/env python +''' +Small wsgiref based web server. Takes a path to serve from and an +optional port number (defaults to 8000), then tries to serve files. +Mime types are guessed from the file names, 404 errors are thrown +if the file is not found. Used for the make serve target in Doc. +''' +import sys +import os +import mimetypes +from wsgiref import simple_server, util + +def app(environ, respond): + + fn = os.path.join(path, environ['PATH_INFO'][1:]) + if '.' not in fn.split(os.path.sep)[-1]: + fn = os.path.join(fn, 'index.html') + type = mimetypes.guess_type(fn)[0] + + if os.path.exists(fn): + respond('200 OK', [('Content-Type', type)]) + return util.FileWrapper(open(fn)) + else: + respond('404 Not Found', [('Content-Type', 'text/plain')]) + return ['not found'] + +if __name__ == '__main__': + path = sys.argv[1] + port = int(sys.argv[2]) if len(sys.argv) > 2 else 8000 + httpd = simple_server.make_server('', port, app) + httpd.serve_forever() From python-checkins at python.org Mon Mar 8 19:21:19 2010 From: python-checkins at python.org (ronald.oussoren) Date: Mon, 8 Mar 2010 19:21:19 +0100 (CET) Subject: [Python-checkins] r78805 - in python/branches/release26-maint: configure configure.in Message-ID: <20100308182119.CF1B4E2BD@mail.python.org> Author: ronald.oussoren Date: Mon Mar 8 19:21:19 2010 New Revision: 78805 Log: I shall not rush commits.... I shall not rush commits.... I shall not rush commits.... I shall not rush commits.... This actually fixes issue 8067, previous commit for this issue was broken. Modified: python/branches/release26-maint/configure python/branches/release26-maint/configure.in Modified: python/branches/release26-maint/configure ============================================================================== --- python/branches/release26-maint/configure (original) +++ python/branches/release26-maint/configure Mon Mar 8 19:21:19 2010 @@ -1,5 +1,5 @@ #! /bin/sh -# From configure.in Revision: 78471 . +# From configure.in Revision: 78781 . # Guess values for system-dependent variables and create Makefiles. # Generated by GNU Autoconf 2.61 for python 2.6. # @@ -2166,7 +2166,7 @@ # has no effect, don't bother defining them Darwin/[6789].*) define_xopen_source=no;; - Darwin/1[6789].*) + Darwin/1[0-9].*) define_xopen_source=no;; # On AIX 4 and 5.1, mbstate_t is defined only when _XOPEN_SOURCE == 500 but # used in wcsnrtombs() and mbsnrtowcs() even if _XOPEN_SOURCE is not defined Modified: python/branches/release26-maint/configure.in ============================================================================== --- python/branches/release26-maint/configure.in (original) +++ python/branches/release26-maint/configure.in Mon Mar 8 19:21:19 2010 @@ -324,7 +324,7 @@ # has no effect, don't bother defining them Darwin/@<:@6789@:>@.*) define_xopen_source=no;; - Darwin/1@<:@6789@:>@.*) + Darwin/1@<:@0-9@:>@.*) define_xopen_source=no;; # On AIX 4 and 5.1, mbstate_t is defined only when _XOPEN_SOURCE == 500 but # used in wcsnrtombs() and mbsnrtowcs() even if _XOPEN_SOURCE is not defined From python-checkins at python.org Mon Mar 8 23:15:12 2010 From: python-checkins at python.org (benjamin.peterson) Date: Mon, 8 Mar 2010 23:15:12 +0100 (CET) Subject: [Python-checkins] r78806 - in python/trunk: Doc/c-api/code.rst Doc/includes/sqlite3/load_extension.py Lib/distutils/tests/setuptools_build_ext.py Lib/distutils/tests/setuptools_extension.py Lib/email/test/data/msg_45.txt Lib/email/test/data/msg_46.txt Lib/encodings/cp720.py Lib/test/formatfloat_testcases.txt Lib/test/math_testcases.txt Lib/test/test_linecache.py Lib/test/test_pdb.py Lib/test/test_ttk_guionly.py Objects/lnotab_notes.txt Tools/msi/merge.py Tools/scripts/analyze_dxp.py Tools/scripts/serve.py Tools/unicode/genwincodec.py Message-ID: <20100308221512.05891F8A5@mail.python.org> Author: benjamin.peterson Date: Mon Mar 8 23:15:11 2010 New Revision: 78806 Log: set svn:eol-style on various files Modified: python/trunk/Doc/c-api/code.rst (props changed) python/trunk/Doc/includes/sqlite3/load_extension.py (props changed) python/trunk/Lib/distutils/tests/setuptools_build_ext.py (props changed) python/trunk/Lib/distutils/tests/setuptools_extension.py (props changed) python/trunk/Lib/email/test/data/msg_45.txt (props changed) python/trunk/Lib/email/test/data/msg_46.txt (props changed) python/trunk/Lib/encodings/cp720.py (contents, props changed) python/trunk/Lib/test/formatfloat_testcases.txt (props changed) python/trunk/Lib/test/math_testcases.txt (props changed) python/trunk/Lib/test/test_linecache.py (props changed) python/trunk/Lib/test/test_pdb.py (props changed) python/trunk/Lib/test/test_ttk_guionly.py (props changed) python/trunk/Objects/lnotab_notes.txt (props changed) python/trunk/Tools/msi/merge.py (contents, props changed) python/trunk/Tools/scripts/analyze_dxp.py (props changed) python/trunk/Tools/scripts/serve.py (props changed) python/trunk/Tools/unicode/genwincodec.py (contents, props changed) Modified: python/trunk/Lib/encodings/cp720.py ============================================================================== --- python/trunk/Lib/encodings/cp720.py (original) +++ python/trunk/Lib/encodings/cp720.py Mon Mar 8 23:15:11 2010 @@ -1,311 +1,309 @@ -"""Python Character Mapping Codec cp720 generated on Windows: -Vista 6.0.6002 SP2 Multiprocessor Free with the command: - python Tools/unicode/genwincodec.py 720 -"""#" - - -import codecs - -### Codec APIs - -class Codec(codecs.Codec): - - def encode(self,input,errors='strict'): - return codecs.charmap_encode(input,errors,encoding_table) - - def decode(self,input,errors='strict'): - return codecs.charmap_decode(input,errors,decoding_table) - -class IncrementalEncoder(codecs.IncrementalEncoder): - def encode(self, input, final=False): - return codecs.charmap_encode(input,self.errors,encoding_table)[0] - -class IncrementalDecoder(codecs.IncrementalDecoder): - def decode(self, input, final=False): - return codecs.charmap_decode(input,self.errors,decoding_table)[0] - -class StreamWriter(Codec,codecs.StreamWriter): - pass - -class StreamReader(Codec,codecs.StreamReader): - pass - -### encodings module API - -def getregentry(): - return codecs.CodecInfo( - name='cp720', - encode=Codec().encode, - decode=Codec().decode, - incrementalencoder=IncrementalEncoder, - incrementaldecoder=IncrementalDecoder, - streamreader=StreamReader, - streamwriter=StreamWriter, - ) - - -### Decoding Table - -decoding_table = ( - u'\x00' # 0x00 -> CONTROL CHARACTER - u'\x01' # 0x01 -> CONTROL CHARACTER - u'\x02' # 0x02 -> CONTROL CHARACTER - u'\x03' # 0x03 -> CONTROL CHARACTER - u'\x04' # 0x04 -> CONTROL CHARACTER - u'\x05' # 0x05 -> CONTROL CHARACTER - u'\x06' # 0x06 -> CONTROL CHARACTER - u'\x07' # 0x07 -> CONTROL CHARACTER - u'\x08' # 0x08 -> CONTROL CHARACTER - u'\t' # 0x09 -> CONTROL CHARACTER - u'\n' # 0x0A -> CONTROL CHARACTER - u'\x0b' # 0x0B -> CONTROL CHARACTER - u'\x0c' # 0x0C -> CONTROL CHARACTER - u'\r' # 0x0D -> CONTROL CHARACTER - u'\x0e' # 0x0E -> CONTROL CHARACTER - u'\x0f' # 0x0F -> CONTROL CHARACTER - u'\x10' # 0x10 -> CONTROL CHARACTER - u'\x11' # 0x11 -> CONTROL CHARACTER - u'\x12' # 0x12 -> CONTROL CHARACTER - u'\x13' # 0x13 -> CONTROL CHARACTER - u'\x14' # 0x14 -> CONTROL CHARACTER - u'\x15' # 0x15 -> CONTROL CHARACTER - u'\x16' # 0x16 -> CONTROL CHARACTER - u'\x17' # 0x17 -> CONTROL CHARACTER - u'\x18' # 0x18 -> CONTROL CHARACTER - u'\x19' # 0x19 -> CONTROL CHARACTER - u'\x1a' # 0x1A -> CONTROL CHARACTER - u'\x1b' # 0x1B -> CONTROL CHARACTER - u'\x1c' # 0x1C -> CONTROL CHARACTER - u'\x1d' # 0x1D -> CONTROL CHARACTER - u'\x1e' # 0x1E -> CONTROL CHARACTER - u'\x1f' # 0x1F -> CONTROL CHARACTER - u' ' # 0x20 -> SPACE - u'!' # 0x21 -> EXCLAMATION MARK - u'"' # 0x22 -> QUOTATION MARK - u'#' # 0x23 -> NUMBER SIGN - u'$' # 0x24 -> DOLLAR SIGN - u'%' # 0x25 -> PERCENT SIGN - u'&' # 0x26 -> AMPERSAND - u"'" # 0x27 -> APOSTROPHE - u'(' # 0x28 -> LEFT PARENTHESIS - u')' # 0x29 -> RIGHT PARENTHESIS - u'*' # 0x2A -> ASTERISK - u'+' # 0x2B -> PLUS SIGN - u',' # 0x2C -> COMMA - u'-' # 0x2D -> HYPHEN-MINUS - u'.' # 0x2E -> FULL STOP - u'/' # 0x2F -> SOLIDUS - u'0' # 0x30 -> DIGIT ZERO - u'1' # 0x31 -> DIGIT ONE - u'2' # 0x32 -> DIGIT TWO - u'3' # 0x33 -> DIGIT THREE - u'4' # 0x34 -> DIGIT FOUR - u'5' # 0x35 -> DIGIT FIVE - u'6' # 0x36 -> DIGIT SIX - u'7' # 0x37 -> DIGIT SEVEN - u'8' # 0x38 -> DIGIT EIGHT - u'9' # 0x39 -> DIGIT NINE - u':' # 0x3A -> COLON - u';' # 0x3B -> SEMICOLON - u'<' # 0x3C -> LESS-THAN SIGN - u'=' # 0x3D -> EQUALS SIGN - u'>' # 0x3E -> GREATER-THAN SIGN - u'?' # 0x3F -> QUESTION MARK - u'@' # 0x40 -> COMMERCIAL AT - u'A' # 0x41 -> LATIN CAPITAL LETTER A - u'B' # 0x42 -> LATIN CAPITAL LETTER B - u'C' # 0x43 -> LATIN CAPITAL LETTER C - u'D' # 0x44 -> LATIN CAPITAL LETTER D - u'E' # 0x45 -> LATIN CAPITAL LETTER E - u'F' # 0x46 -> LATIN CAPITAL LETTER F - u'G' # 0x47 -> LATIN CAPITAL LETTER G - u'H' # 0x48 -> LATIN CAPITAL LETTER H - u'I' # 0x49 -> LATIN CAPITAL LETTER I - u'J' # 0x4A -> LATIN CAPITAL LETTER J - u'K' # 0x4B -> LATIN CAPITAL LETTER K - u'L' # 0x4C -> LATIN CAPITAL LETTER L - u'M' # 0x4D -> LATIN CAPITAL LETTER M - u'N' # 0x4E -> LATIN CAPITAL LETTER N - u'O' # 0x4F -> LATIN CAPITAL LETTER O - u'P' # 0x50 -> LATIN CAPITAL LETTER P - u'Q' # 0x51 -> LATIN CAPITAL LETTER Q - u'R' # 0x52 -> LATIN CAPITAL LETTER R - u'S' # 0x53 -> LATIN CAPITAL LETTER S - u'T' # 0x54 -> LATIN CAPITAL LETTER T - u'U' # 0x55 -> LATIN CAPITAL LETTER U - u'V' # 0x56 -> LATIN CAPITAL LETTER V - u'W' # 0x57 -> LATIN CAPITAL LETTER W - u'X' # 0x58 -> LATIN CAPITAL LETTER X - u'Y' # 0x59 -> LATIN CAPITAL LETTER Y - u'Z' # 0x5A -> LATIN CAPITAL LETTER Z - u'[' # 0x5B -> LEFT SQUARE BRACKET - u'\\' # 0x5C -> REVERSE SOLIDUS - u']' # 0x5D -> RIGHT SQUARE BRACKET - u'^' # 0x5E -> CIRCUMFLEX ACCENT - u'_' # 0x5F -> LOW LINE - u'`' # 0x60 -> GRAVE ACCENT - u'a' # 0x61 -> LATIN SMALL LETTER A - u'b' # 0x62 -> LATIN SMALL LETTER B - u'c' # 0x63 -> LATIN SMALL LETTER C - u'd' # 0x64 -> LATIN SMALL LETTER D - u'e' # 0x65 -> LATIN SMALL LETTER E - u'f' # 0x66 -> LATIN SMALL LETTER F - u'g' # 0x67 -> LATIN SMALL LETTER G - u'h' # 0x68 -> LATIN SMALL LETTER H - u'i' # 0x69 -> LATIN SMALL LETTER I - u'j' # 0x6A -> LATIN SMALL LETTER J - u'k' # 0x6B -> LATIN SMALL LETTER K - u'l' # 0x6C -> LATIN SMALL LETTER L - u'm' # 0x6D -> LATIN SMALL LETTER M - u'n' # 0x6E -> LATIN SMALL LETTER N - u'o' # 0x6F -> LATIN SMALL LETTER O - u'p' # 0x70 -> LATIN SMALL LETTER P - u'q' # 0x71 -> LATIN SMALL LETTER Q - u'r' # 0x72 -> LATIN SMALL LETTER R - u's' # 0x73 -> LATIN SMALL LETTER S - u't' # 0x74 -> LATIN SMALL LETTER T - u'u' # 0x75 -> LATIN SMALL LETTER U - u'v' # 0x76 -> LATIN SMALL LETTER V - u'w' # 0x77 -> LATIN SMALL LETTER W - u'x' # 0x78 -> LATIN SMALL LETTER X - u'y' # 0x79 -> LATIN SMALL LETTER Y - u'z' # 0x7A -> LATIN SMALL LETTER Z - u'{' # 0x7B -> LEFT CURLY BRACKET - u'|' # 0x7C -> VERTICAL LINE - u'}' # 0x7D -> RIGHT CURLY BRACKET - u'~' # 0x7E -> TILDE - u'\x7f' # 0x7F -> CONTROL CHARACTER - u'\x80' - u'\x81' - u'\xe9' # 0x82 -> LATIN SMALL LETTER E WITH ACUTE - u'\xe2' # 0x83 -> LATIN SMALL LETTER A WITH CIRCUMFLEX - u'\x84' - u'\xe0' # 0x85 -> LATIN SMALL LETTER A WITH GRAVE - u'\x86' - u'\xe7' # 0x87 -> LATIN SMALL LETTER C WITH CEDILLA - u'\xea' # 0x88 -> LATIN SMALL LETTER E WITH CIRCUMFLEX - u'\xeb' # 0x89 -> LATIN SMALL LETTER E WITH DIAERESIS - u'\xe8' # 0x8A -> LATIN SMALL LETTER E WITH GRAVE - u'\xef' # 0x8B -> LATIN SMALL LETTER I WITH DIAERESIS - u'\xee' # 0x8C -> LATIN SMALL LETTER I WITH CIRCUMFLEX - u'\x8d' - u'\x8e' - u'\x8f' - u'\x90' - u'\u0651' # 0x91 -> ARABIC SHADDA - u'\u0652' # 0x92 -> ARABIC SUKUN - u'\xf4' # 0x93 -> LATIN SMALL LETTER O WITH CIRCUMFLEX - u'\xa4' # 0x94 -> CURRENCY SIGN - u'\u0640' # 0x95 -> ARABIC TATWEEL - u'\xfb' # 0x96 -> LATIN SMALL LETTER U WITH CIRCUMFLEX - u'\xf9' # 0x97 -> LATIN SMALL LETTER U WITH GRAVE - u'\u0621' # 0x98 -> ARABIC LETTER HAMZA - u'\u0622' # 0x99 -> ARABIC LETTER ALEF WITH MADDA ABOVE - u'\u0623' # 0x9A -> ARABIC LETTER ALEF WITH HAMZA ABOVE - u'\u0624' # 0x9B -> ARABIC LETTER WAW WITH HAMZA ABOVE - u'\xa3' # 0x9C -> POUND SIGN - u'\u0625' # 0x9D -> ARABIC LETTER ALEF WITH HAMZA BELOW - u'\u0626' # 0x9E -> ARABIC LETTER YEH WITH HAMZA ABOVE - u'\u0627' # 0x9F -> ARABIC LETTER ALEF - u'\u0628' # 0xA0 -> ARABIC LETTER BEH - u'\u0629' # 0xA1 -> ARABIC LETTER TEH MARBUTA - u'\u062a' # 0xA2 -> ARABIC LETTER TEH - u'\u062b' # 0xA3 -> ARABIC LETTER THEH - u'\u062c' # 0xA4 -> ARABIC LETTER JEEM - u'\u062d' # 0xA5 -> ARABIC LETTER HAH - u'\u062e' # 0xA6 -> ARABIC LETTER KHAH - u'\u062f' # 0xA7 -> ARABIC LETTER DAL - u'\u0630' # 0xA8 -> ARABIC LETTER THAL - u'\u0631' # 0xA9 -> ARABIC LETTER REH - u'\u0632' # 0xAA -> ARABIC LETTER ZAIN - u'\u0633' # 0xAB -> ARABIC LETTER SEEN - u'\u0634' # 0xAC -> ARABIC LETTER SHEEN - u'\u0635' # 0xAD -> ARABIC LETTER SAD - u'\xab' # 0xAE -> LEFT-POINTING DOUBLE ANGLE QUOTATION MARK - u'\xbb' # 0xAF -> RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK - u'\u2591' # 0xB0 -> LIGHT SHADE - u'\u2592' # 0xB1 -> MEDIUM SHADE - u'\u2593' # 0xB2 -> DARK SHADE - u'\u2502' # 0xB3 -> BOX DRAWINGS LIGHT VERTICAL - u'\u2524' # 0xB4 -> BOX DRAWINGS LIGHT VERTICAL AND LEFT - u'\u2561' # 0xB5 -> BOX DRAWINGS VERTICAL SINGLE AND LEFT DOUBLE - u'\u2562' # 0xB6 -> BOX DRAWINGS VERTICAL DOUBLE AND LEFT SINGLE - u'\u2556' # 0xB7 -> BOX DRAWINGS DOWN DOUBLE AND LEFT SINGLE - u'\u2555' # 0xB8 -> BOX DRAWINGS DOWN SINGLE AND LEFT DOUBLE - u'\u2563' # 0xB9 -> BOX DRAWINGS DOUBLE VERTICAL AND LEFT - u'\u2551' # 0xBA -> BOX DRAWINGS DOUBLE VERTICAL - u'\u2557' # 0xBB -> BOX DRAWINGS DOUBLE DOWN AND LEFT - u'\u255d' # 0xBC -> BOX DRAWINGS DOUBLE UP AND LEFT - u'\u255c' # 0xBD -> BOX DRAWINGS UP DOUBLE AND LEFT SINGLE - u'\u255b' # 0xBE -> BOX DRAWINGS UP SINGLE AND LEFT DOUBLE - u'\u2510' # 0xBF -> BOX DRAWINGS LIGHT DOWN AND LEFT - u'\u2514' # 0xC0 -> BOX DRAWINGS LIGHT UP AND RIGHT - u'\u2534' # 0xC1 -> BOX DRAWINGS LIGHT UP AND HORIZONTAL - u'\u252c' # 0xC2 -> BOX DRAWINGS LIGHT DOWN AND HORIZONTAL - u'\u251c' # 0xC3 -> BOX DRAWINGS LIGHT VERTICAL AND RIGHT - u'\u2500' # 0xC4 -> BOX DRAWINGS LIGHT HORIZONTAL - u'\u253c' # 0xC5 -> BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL - u'\u255e' # 0xC6 -> BOX DRAWINGS VERTICAL SINGLE AND RIGHT DOUBLE - u'\u255f' # 0xC7 -> BOX DRAWINGS VERTICAL DOUBLE AND RIGHT SINGLE - u'\u255a' # 0xC8 -> BOX DRAWINGS DOUBLE UP AND RIGHT - u'\u2554' # 0xC9 -> BOX DRAWINGS DOUBLE DOWN AND RIGHT - u'\u2569' # 0xCA -> BOX DRAWINGS DOUBLE UP AND HORIZONTAL - u'\u2566' # 0xCB -> BOX DRAWINGS DOUBLE DOWN AND HORIZONTAL - u'\u2560' # 0xCC -> BOX DRAWINGS DOUBLE VERTICAL AND RIGHT - u'\u2550' # 0xCD -> BOX DRAWINGS DOUBLE HORIZONTAL - u'\u256c' # 0xCE -> BOX DRAWINGS DOUBLE VERTICAL AND HORIZONTAL - u'\u2567' # 0xCF -> BOX DRAWINGS UP SINGLE AND HORIZONTAL DOUBLE - u'\u2568' # 0xD0 -> BOX DRAWINGS UP DOUBLE AND HORIZONTAL SINGLE - u'\u2564' # 0xD1 -> BOX DRAWINGS DOWN SINGLE AND HORIZONTAL DOUBLE - u'\u2565' # 0xD2 -> BOX DRAWINGS DOWN DOUBLE AND HORIZONTAL SINGLE - u'\u2559' # 0xD3 -> BOX DRAWINGS UP DOUBLE AND RIGHT SINGLE - u'\u2558' # 0xD4 -> BOX DRAWINGS UP SINGLE AND RIGHT DOUBLE - u'\u2552' # 0xD5 -> BOX DRAWINGS DOWN SINGLE AND RIGHT DOUBLE - u'\u2553' # 0xD6 -> BOX DRAWINGS DOWN DOUBLE AND RIGHT SINGLE - u'\u256b' # 0xD7 -> BOX DRAWINGS VERTICAL DOUBLE AND HORIZONTAL SINGLE - u'\u256a' # 0xD8 -> BOX DRAWINGS VERTICAL SINGLE AND HORIZONTAL DOUBLE - u'\u2518' # 0xD9 -> BOX DRAWINGS LIGHT UP AND LEFT - u'\u250c' # 0xDA -> BOX DRAWINGS LIGHT DOWN AND RIGHT - u'\u2588' # 0xDB -> FULL BLOCK - u'\u2584' # 0xDC -> LOWER HALF BLOCK - u'\u258c' # 0xDD -> LEFT HALF BLOCK - u'\u2590' # 0xDE -> RIGHT HALF BLOCK - u'\u2580' # 0xDF -> UPPER HALF BLOCK - u'\u0636' # 0xE0 -> ARABIC LETTER DAD - u'\u0637' # 0xE1 -> ARABIC LETTER TAH - u'\u0638' # 0xE2 -> ARABIC LETTER ZAH - u'\u0639' # 0xE3 -> ARABIC LETTER AIN - u'\u063a' # 0xE4 -> ARABIC LETTER GHAIN - u'\u0641' # 0xE5 -> ARABIC LETTER FEH - u'\xb5' # 0xE6 -> MICRO SIGN - u'\u0642' # 0xE7 -> ARABIC LETTER QAF - u'\u0643' # 0xE8 -> ARABIC LETTER KAF - u'\u0644' # 0xE9 -> ARABIC LETTER LAM - u'\u0645' # 0xEA -> ARABIC LETTER MEEM - u'\u0646' # 0xEB -> ARABIC LETTER NOON - u'\u0647' # 0xEC -> ARABIC LETTER HEH - u'\u0648' # 0xED -> ARABIC LETTER WAW - u'\u0649' # 0xEE -> ARABIC LETTER ALEF MAKSURA - u'\u064a' # 0xEF -> ARABIC LETTER YEH - u'\u2261' # 0xF0 -> IDENTICAL TO - u'\u064b' # 0xF1 -> ARABIC FATHATAN - u'\u064c' # 0xF2 -> ARABIC DAMMATAN - u'\u064d' # 0xF3 -> ARABIC KASRATAN - u'\u064e' # 0xF4 -> ARABIC FATHA - u'\u064f' # 0xF5 -> ARABIC DAMMA - u'\u0650' # 0xF6 -> ARABIC KASRA - u'\u2248' # 0xF7 -> ALMOST EQUAL TO - u'\xb0' # 0xF8 -> DEGREE SIGN - u'\u2219' # 0xF9 -> BULLET OPERATOR - u'\xb7' # 0xFA -> MIDDLE DOT - u'\u221a' # 0xFB -> SQUARE ROOT - u'\u207f' # 0xFC -> SUPERSCRIPT LATIN SMALL LETTER N - u'\xb2' # 0xFD -> SUPERSCRIPT TWO - u'\u25a0' # 0xFE -> BLACK SQUARE - u'\xa0' # 0xFF -> NO-BREAK SPACE -) - -### Encoding table -encoding_table=codecs.charmap_build(decoding_table) - - +"""Python Character Mapping Codec cp720 generated on Windows: +Vista 6.0.6002 SP2 Multiprocessor Free with the command: + python Tools/unicode/genwincodec.py 720 +"""#" + + +import codecs + +### Codec APIs + +class Codec(codecs.Codec): + + def encode(self,input,errors='strict'): + return codecs.charmap_encode(input,errors,encoding_table) + + def decode(self,input,errors='strict'): + return codecs.charmap_decode(input,errors,decoding_table) + +class IncrementalEncoder(codecs.IncrementalEncoder): + def encode(self, input, final=False): + return codecs.charmap_encode(input,self.errors,encoding_table)[0] + +class IncrementalDecoder(codecs.IncrementalDecoder): + def decode(self, input, final=False): + return codecs.charmap_decode(input,self.errors,decoding_table)[0] + +class StreamWriter(Codec,codecs.StreamWriter): + pass + +class StreamReader(Codec,codecs.StreamReader): + pass + +### encodings module API + +def getregentry(): + return codecs.CodecInfo( + name='cp720', + encode=Codec().encode, + decode=Codec().decode, + incrementalencoder=IncrementalEncoder, + incrementaldecoder=IncrementalDecoder, + streamreader=StreamReader, + streamwriter=StreamWriter, + ) + + +### Decoding Table + +decoding_table = ( + u'\x00' # 0x00 -> CONTROL CHARACTER + u'\x01' # 0x01 -> CONTROL CHARACTER + u'\x02' # 0x02 -> CONTROL CHARACTER + u'\x03' # 0x03 -> CONTROL CHARACTER + u'\x04' # 0x04 -> CONTROL CHARACTER + u'\x05' # 0x05 -> CONTROL CHARACTER + u'\x06' # 0x06 -> CONTROL CHARACTER + u'\x07' # 0x07 -> CONTROL CHARACTER + u'\x08' # 0x08 -> CONTROL CHARACTER + u'\t' # 0x09 -> CONTROL CHARACTER + u'\n' # 0x0A -> CONTROL CHARACTER + u'\x0b' # 0x0B -> CONTROL CHARACTER + u'\x0c' # 0x0C -> CONTROL CHARACTER + u'\r' # 0x0D -> CONTROL CHARACTER + u'\x0e' # 0x0E -> CONTROL CHARACTER + u'\x0f' # 0x0F -> CONTROL CHARACTER + u'\x10' # 0x10 -> CONTROL CHARACTER + u'\x11' # 0x11 -> CONTROL CHARACTER + u'\x12' # 0x12 -> CONTROL CHARACTER + u'\x13' # 0x13 -> CONTROL CHARACTER + u'\x14' # 0x14 -> CONTROL CHARACTER + u'\x15' # 0x15 -> CONTROL CHARACTER + u'\x16' # 0x16 -> CONTROL CHARACTER + u'\x17' # 0x17 -> CONTROL CHARACTER + u'\x18' # 0x18 -> CONTROL CHARACTER + u'\x19' # 0x19 -> CONTROL CHARACTER + u'\x1a' # 0x1A -> CONTROL CHARACTER + u'\x1b' # 0x1B -> CONTROL CHARACTER + u'\x1c' # 0x1C -> CONTROL CHARACTER + u'\x1d' # 0x1D -> CONTROL CHARACTER + u'\x1e' # 0x1E -> CONTROL CHARACTER + u'\x1f' # 0x1F -> CONTROL CHARACTER + u' ' # 0x20 -> SPACE + u'!' # 0x21 -> EXCLAMATION MARK + u'"' # 0x22 -> QUOTATION MARK + u'#' # 0x23 -> NUMBER SIGN + u'$' # 0x24 -> DOLLAR SIGN + u'%' # 0x25 -> PERCENT SIGN + u'&' # 0x26 -> AMPERSAND + u"'" # 0x27 -> APOSTROPHE + u'(' # 0x28 -> LEFT PARENTHESIS + u')' # 0x29 -> RIGHT PARENTHESIS + u'*' # 0x2A -> ASTERISK + u'+' # 0x2B -> PLUS SIGN + u',' # 0x2C -> COMMA + u'-' # 0x2D -> HYPHEN-MINUS + u'.' # 0x2E -> FULL STOP + u'/' # 0x2F -> SOLIDUS + u'0' # 0x30 -> DIGIT ZERO + u'1' # 0x31 -> DIGIT ONE + u'2' # 0x32 -> DIGIT TWO + u'3' # 0x33 -> DIGIT THREE + u'4' # 0x34 -> DIGIT FOUR + u'5' # 0x35 -> DIGIT FIVE + u'6' # 0x36 -> DIGIT SIX + u'7' # 0x37 -> DIGIT SEVEN + u'8' # 0x38 -> DIGIT EIGHT + u'9' # 0x39 -> DIGIT NINE + u':' # 0x3A -> COLON + u';' # 0x3B -> SEMICOLON + u'<' # 0x3C -> LESS-THAN SIGN + u'=' # 0x3D -> EQUALS SIGN + u'>' # 0x3E -> GREATER-THAN SIGN + u'?' # 0x3F -> QUESTION MARK + u'@' # 0x40 -> COMMERCIAL AT + u'A' # 0x41 -> LATIN CAPITAL LETTER A + u'B' # 0x42 -> LATIN CAPITAL LETTER B + u'C' # 0x43 -> LATIN CAPITAL LETTER C + u'D' # 0x44 -> LATIN CAPITAL LETTER D + u'E' # 0x45 -> LATIN CAPITAL LETTER E + u'F' # 0x46 -> LATIN CAPITAL LETTER F + u'G' # 0x47 -> LATIN CAPITAL LETTER G + u'H' # 0x48 -> LATIN CAPITAL LETTER H + u'I' # 0x49 -> LATIN CAPITAL LETTER I + u'J' # 0x4A -> LATIN CAPITAL LETTER J + u'K' # 0x4B -> LATIN CAPITAL LETTER K + u'L' # 0x4C -> LATIN CAPITAL LETTER L + u'M' # 0x4D -> LATIN CAPITAL LETTER M + u'N' # 0x4E -> LATIN CAPITAL LETTER N + u'O' # 0x4F -> LATIN CAPITAL LETTER O + u'P' # 0x50 -> LATIN CAPITAL LETTER P + u'Q' # 0x51 -> LATIN CAPITAL LETTER Q + u'R' # 0x52 -> LATIN CAPITAL LETTER R + u'S' # 0x53 -> LATIN CAPITAL LETTER S + u'T' # 0x54 -> LATIN CAPITAL LETTER T + u'U' # 0x55 -> LATIN CAPITAL LETTER U + u'V' # 0x56 -> LATIN CAPITAL LETTER V + u'W' # 0x57 -> LATIN CAPITAL LETTER W + u'X' # 0x58 -> LATIN CAPITAL LETTER X + u'Y' # 0x59 -> LATIN CAPITAL LETTER Y + u'Z' # 0x5A -> LATIN CAPITAL LETTER Z + u'[' # 0x5B -> LEFT SQUARE BRACKET + u'\\' # 0x5C -> REVERSE SOLIDUS + u']' # 0x5D -> RIGHT SQUARE BRACKET + u'^' # 0x5E -> CIRCUMFLEX ACCENT + u'_' # 0x5F -> LOW LINE + u'`' # 0x60 -> GRAVE ACCENT + u'a' # 0x61 -> LATIN SMALL LETTER A + u'b' # 0x62 -> LATIN SMALL LETTER B + u'c' # 0x63 -> LATIN SMALL LETTER C + u'd' # 0x64 -> LATIN SMALL LETTER D + u'e' # 0x65 -> LATIN SMALL LETTER E + u'f' # 0x66 -> LATIN SMALL LETTER F + u'g' # 0x67 -> LATIN SMALL LETTER G + u'h' # 0x68 -> LATIN SMALL LETTER H + u'i' # 0x69 -> LATIN SMALL LETTER I + u'j' # 0x6A -> LATIN SMALL LETTER J + u'k' # 0x6B -> LATIN SMALL LETTER K + u'l' # 0x6C -> LATIN SMALL LETTER L + u'm' # 0x6D -> LATIN SMALL LETTER M + u'n' # 0x6E -> LATIN SMALL LETTER N + u'o' # 0x6F -> LATIN SMALL LETTER O + u'p' # 0x70 -> LATIN SMALL LETTER P + u'q' # 0x71 -> LATIN SMALL LETTER Q + u'r' # 0x72 -> LATIN SMALL LETTER R + u's' # 0x73 -> LATIN SMALL LETTER S + u't' # 0x74 -> LATIN SMALL LETTER T + u'u' # 0x75 -> LATIN SMALL LETTER U + u'v' # 0x76 -> LATIN SMALL LETTER V + u'w' # 0x77 -> LATIN SMALL LETTER W + u'x' # 0x78 -> LATIN SMALL LETTER X + u'y' # 0x79 -> LATIN SMALL LETTER Y + u'z' # 0x7A -> LATIN SMALL LETTER Z + u'{' # 0x7B -> LEFT CURLY BRACKET + u'|' # 0x7C -> VERTICAL LINE + u'}' # 0x7D -> RIGHT CURLY BRACKET + u'~' # 0x7E -> TILDE + u'\x7f' # 0x7F -> CONTROL CHARACTER + u'\x80' + u'\x81' + u'\xe9' # 0x82 -> LATIN SMALL LETTER E WITH ACUTE + u'\xe2' # 0x83 -> LATIN SMALL LETTER A WITH CIRCUMFLEX + u'\x84' + u'\xe0' # 0x85 -> LATIN SMALL LETTER A WITH GRAVE + u'\x86' + u'\xe7' # 0x87 -> LATIN SMALL LETTER C WITH CEDILLA + u'\xea' # 0x88 -> LATIN SMALL LETTER E WITH CIRCUMFLEX + u'\xeb' # 0x89 -> LATIN SMALL LETTER E WITH DIAERESIS + u'\xe8' # 0x8A -> LATIN SMALL LETTER E WITH GRAVE + u'\xef' # 0x8B -> LATIN SMALL LETTER I WITH DIAERESIS + u'\xee' # 0x8C -> LATIN SMALL LETTER I WITH CIRCUMFLEX + u'\x8d' + u'\x8e' + u'\x8f' + u'\x90' + u'\u0651' # 0x91 -> ARABIC SHADDA + u'\u0652' # 0x92 -> ARABIC SUKUN + u'\xf4' # 0x93 -> LATIN SMALL LETTER O WITH CIRCUMFLEX + u'\xa4' # 0x94 -> CURRENCY SIGN + u'\u0640' # 0x95 -> ARABIC TATWEEL + u'\xfb' # 0x96 -> LATIN SMALL LETTER U WITH CIRCUMFLEX + u'\xf9' # 0x97 -> LATIN SMALL LETTER U WITH GRAVE + u'\u0621' # 0x98 -> ARABIC LETTER HAMZA + u'\u0622' # 0x99 -> ARABIC LETTER ALEF WITH MADDA ABOVE + u'\u0623' # 0x9A -> ARABIC LETTER ALEF WITH HAMZA ABOVE + u'\u0624' # 0x9B -> ARABIC LETTER WAW WITH HAMZA ABOVE + u'\xa3' # 0x9C -> POUND SIGN + u'\u0625' # 0x9D -> ARABIC LETTER ALEF WITH HAMZA BELOW + u'\u0626' # 0x9E -> ARABIC LETTER YEH WITH HAMZA ABOVE + u'\u0627' # 0x9F -> ARABIC LETTER ALEF + u'\u0628' # 0xA0 -> ARABIC LETTER BEH + u'\u0629' # 0xA1 -> ARABIC LETTER TEH MARBUTA + u'\u062a' # 0xA2 -> ARABIC LETTER TEH + u'\u062b' # 0xA3 -> ARABIC LETTER THEH + u'\u062c' # 0xA4 -> ARABIC LETTER JEEM + u'\u062d' # 0xA5 -> ARABIC LETTER HAH + u'\u062e' # 0xA6 -> ARABIC LETTER KHAH + u'\u062f' # 0xA7 -> ARABIC LETTER DAL + u'\u0630' # 0xA8 -> ARABIC LETTER THAL + u'\u0631' # 0xA9 -> ARABIC LETTER REH + u'\u0632' # 0xAA -> ARABIC LETTER ZAIN + u'\u0633' # 0xAB -> ARABIC LETTER SEEN + u'\u0634' # 0xAC -> ARABIC LETTER SHEEN + u'\u0635' # 0xAD -> ARABIC LETTER SAD + u'\xab' # 0xAE -> LEFT-POINTING DOUBLE ANGLE QUOTATION MARK + u'\xbb' # 0xAF -> RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK + u'\u2591' # 0xB0 -> LIGHT SHADE + u'\u2592' # 0xB1 -> MEDIUM SHADE + u'\u2593' # 0xB2 -> DARK SHADE + u'\u2502' # 0xB3 -> BOX DRAWINGS LIGHT VERTICAL + u'\u2524' # 0xB4 -> BOX DRAWINGS LIGHT VERTICAL AND LEFT + u'\u2561' # 0xB5 -> BOX DRAWINGS VERTICAL SINGLE AND LEFT DOUBLE + u'\u2562' # 0xB6 -> BOX DRAWINGS VERTICAL DOUBLE AND LEFT SINGLE + u'\u2556' # 0xB7 -> BOX DRAWINGS DOWN DOUBLE AND LEFT SINGLE + u'\u2555' # 0xB8 -> BOX DRAWINGS DOWN SINGLE AND LEFT DOUBLE + u'\u2563' # 0xB9 -> BOX DRAWINGS DOUBLE VERTICAL AND LEFT + u'\u2551' # 0xBA -> BOX DRAWINGS DOUBLE VERTICAL + u'\u2557' # 0xBB -> BOX DRAWINGS DOUBLE DOWN AND LEFT + u'\u255d' # 0xBC -> BOX DRAWINGS DOUBLE UP AND LEFT + u'\u255c' # 0xBD -> BOX DRAWINGS UP DOUBLE AND LEFT SINGLE + u'\u255b' # 0xBE -> BOX DRAWINGS UP SINGLE AND LEFT DOUBLE + u'\u2510' # 0xBF -> BOX DRAWINGS LIGHT DOWN AND LEFT + u'\u2514' # 0xC0 -> BOX DRAWINGS LIGHT UP AND RIGHT + u'\u2534' # 0xC1 -> BOX DRAWINGS LIGHT UP AND HORIZONTAL + u'\u252c' # 0xC2 -> BOX DRAWINGS LIGHT DOWN AND HORIZONTAL + u'\u251c' # 0xC3 -> BOX DRAWINGS LIGHT VERTICAL AND RIGHT + u'\u2500' # 0xC4 -> BOX DRAWINGS LIGHT HORIZONTAL + u'\u253c' # 0xC5 -> BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL + u'\u255e' # 0xC6 -> BOX DRAWINGS VERTICAL SINGLE AND RIGHT DOUBLE + u'\u255f' # 0xC7 -> BOX DRAWINGS VERTICAL DOUBLE AND RIGHT SINGLE + u'\u255a' # 0xC8 -> BOX DRAWINGS DOUBLE UP AND RIGHT + u'\u2554' # 0xC9 -> BOX DRAWINGS DOUBLE DOWN AND RIGHT + u'\u2569' # 0xCA -> BOX DRAWINGS DOUBLE UP AND HORIZONTAL + u'\u2566' # 0xCB -> BOX DRAWINGS DOUBLE DOWN AND HORIZONTAL + u'\u2560' # 0xCC -> BOX DRAWINGS DOUBLE VERTICAL AND RIGHT + u'\u2550' # 0xCD -> BOX DRAWINGS DOUBLE HORIZONTAL + u'\u256c' # 0xCE -> BOX DRAWINGS DOUBLE VERTICAL AND HORIZONTAL + u'\u2567' # 0xCF -> BOX DRAWINGS UP SINGLE AND HORIZONTAL DOUBLE + u'\u2568' # 0xD0 -> BOX DRAWINGS UP DOUBLE AND HORIZONTAL SINGLE + u'\u2564' # 0xD1 -> BOX DRAWINGS DOWN SINGLE AND HORIZONTAL DOUBLE + u'\u2565' # 0xD2 -> BOX DRAWINGS DOWN DOUBLE AND HORIZONTAL SINGLE + u'\u2559' # 0xD3 -> BOX DRAWINGS UP DOUBLE AND RIGHT SINGLE + u'\u2558' # 0xD4 -> BOX DRAWINGS UP SINGLE AND RIGHT DOUBLE + u'\u2552' # 0xD5 -> BOX DRAWINGS DOWN SINGLE AND RIGHT DOUBLE + u'\u2553' # 0xD6 -> BOX DRAWINGS DOWN DOUBLE AND RIGHT SINGLE + u'\u256b' # 0xD7 -> BOX DRAWINGS VERTICAL DOUBLE AND HORIZONTAL SINGLE + u'\u256a' # 0xD8 -> BOX DRAWINGS VERTICAL SINGLE AND HORIZONTAL DOUBLE + u'\u2518' # 0xD9 -> BOX DRAWINGS LIGHT UP AND LEFT + u'\u250c' # 0xDA -> BOX DRAWINGS LIGHT DOWN AND RIGHT + u'\u2588' # 0xDB -> FULL BLOCK + u'\u2584' # 0xDC -> LOWER HALF BLOCK + u'\u258c' # 0xDD -> LEFT HALF BLOCK + u'\u2590' # 0xDE -> RIGHT HALF BLOCK + u'\u2580' # 0xDF -> UPPER HALF BLOCK + u'\u0636' # 0xE0 -> ARABIC LETTER DAD + u'\u0637' # 0xE1 -> ARABIC LETTER TAH + u'\u0638' # 0xE2 -> ARABIC LETTER ZAH + u'\u0639' # 0xE3 -> ARABIC LETTER AIN + u'\u063a' # 0xE4 -> ARABIC LETTER GHAIN + u'\u0641' # 0xE5 -> ARABIC LETTER FEH + u'\xb5' # 0xE6 -> MICRO SIGN + u'\u0642' # 0xE7 -> ARABIC LETTER QAF + u'\u0643' # 0xE8 -> ARABIC LETTER KAF + u'\u0644' # 0xE9 -> ARABIC LETTER LAM + u'\u0645' # 0xEA -> ARABIC LETTER MEEM + u'\u0646' # 0xEB -> ARABIC LETTER NOON + u'\u0647' # 0xEC -> ARABIC LETTER HEH + u'\u0648' # 0xED -> ARABIC LETTER WAW + u'\u0649' # 0xEE -> ARABIC LETTER ALEF MAKSURA + u'\u064a' # 0xEF -> ARABIC LETTER YEH + u'\u2261' # 0xF0 -> IDENTICAL TO + u'\u064b' # 0xF1 -> ARABIC FATHATAN + u'\u064c' # 0xF2 -> ARABIC DAMMATAN + u'\u064d' # 0xF3 -> ARABIC KASRATAN + u'\u064e' # 0xF4 -> ARABIC FATHA + u'\u064f' # 0xF5 -> ARABIC DAMMA + u'\u0650' # 0xF6 -> ARABIC KASRA + u'\u2248' # 0xF7 -> ALMOST EQUAL TO + u'\xb0' # 0xF8 -> DEGREE SIGN + u'\u2219' # 0xF9 -> BULLET OPERATOR + u'\xb7' # 0xFA -> MIDDLE DOT + u'\u221a' # 0xFB -> SQUARE ROOT + u'\u207f' # 0xFC -> SUPERSCRIPT LATIN SMALL LETTER N + u'\xb2' # 0xFD -> SUPERSCRIPT TWO + u'\u25a0' # 0xFE -> BLACK SQUARE + u'\xa0' # 0xFF -> NO-BREAK SPACE +) + +### Encoding table +encoding_table=codecs.charmap_build(decoding_table) Modified: python/trunk/Tools/msi/merge.py ============================================================================== --- python/trunk/Tools/msi/merge.py (original) +++ python/trunk/Tools/msi/merge.py Mon Mar 8 23:15:11 2010 @@ -1,84 +1,84 @@ -import msilib,os,win32com,tempfile,sys -PCBUILD="PCBuild" -certname = None -from config import * - -Win64 = "amd64" in PCBUILD - -mod_dir = os.path.join(os.environ["ProgramFiles"], "Common Files", "Merge Modules") -msi = None -if len(sys.argv)==2: - msi = sys.argv[1] -if Win64: - modules = ["Microsoft_VC90_CRT_x86_x64.msm", "policy_9_0_Microsoft_VC90_CRT_x86_x64.msm"] - if not msi: msi = "python-%s.amd64.msi" % full_current_version -else: - modules = ["Microsoft_VC90_CRT_x86.msm","policy_9_0_Microsoft_VC90_CRT_x86.msm"] - if not msi: msi = "python-%s.msi" % full_current_version -for i, n in enumerate(modules): - modules[i] = os.path.join(mod_dir, n) - -def merge(msi, feature, rootdir, modules): - cab_and_filecount = [] - # Step 1: Merge databases, extract cabfiles - m = msilib.MakeMerge2() - m.OpenLog("merge.log") - print "Opened Log" - m.OpenDatabase(msi) - print "Opened DB" - for module in modules: - print module - m.OpenModule(module,0) - print "Opened Module",module - m.Merge(feature, rootdir) - print "Errors:" - for e in m.Errors: - print e.Type, e.ModuleTable, e.DatabaseTable - print " Modkeys:", - for s in e.ModuleKeys: print s, - print - print " DBKeys:", - for s in e.DatabaseKeys: print s, - print - cabname = tempfile.mktemp(suffix=".cab") - m.ExtractCAB(cabname) - cab_and_filecount.append((cabname, len(m.ModuleFiles))) - m.CloseModule() - m.CloseDatabase(True) - m.CloseLog() - - # Step 2: Add CAB files - i = msilib.MakeInstaller() - db = i.OpenDatabase(msi, win32com.client.constants.msiOpenDatabaseModeTransact) - - v = db.OpenView("SELECT LastSequence FROM Media") - v.Execute(None) - maxmedia = -1 - while 1: - r = v.Fetch() - if not r: break - seq = r.IntegerData(1) - if seq > maxmedia: - maxmedia = seq - print "Start of Media", maxmedia - - for cabname, count in cab_and_filecount: - stream = "merged%d" % maxmedia - msilib.add_data(db, "Media", - [(maxmedia+1, maxmedia+count, None, "#"+stream, None, None)]) - msilib.add_stream(db, stream, cabname) - os.unlink(cabname) - maxmedia += count - # The merge module sets ALLUSERS to 1 in the property table. - # This is undesired; delete that - v = db.OpenView("DELETE FROM Property WHERE Property='ALLUSERS'") - v.Execute(None) - v.Close() - db.Commit() - -merge(msi, "SharedCRT", "TARGETDIR", modules) - -# certname (from config.py) should be (a substring of) -# the certificate subject, e.g. "Python Software Foundation" -if certname: - os.system('signtool sign /n "%s" /t http://timestamp.verisign.com/scripts/timestamp.dll %s' % (certname, msi)) +import msilib,os,win32com,tempfile,sys +PCBUILD="PCBuild" +certname = None +from config import * + +Win64 = "amd64" in PCBUILD + +mod_dir = os.path.join(os.environ["ProgramFiles"], "Common Files", "Merge Modules") +msi = None +if len(sys.argv)==2: + msi = sys.argv[1] +if Win64: + modules = ["Microsoft_VC90_CRT_x86_x64.msm", "policy_9_0_Microsoft_VC90_CRT_x86_x64.msm"] + if not msi: msi = "python-%s.amd64.msi" % full_current_version +else: + modules = ["Microsoft_VC90_CRT_x86.msm","policy_9_0_Microsoft_VC90_CRT_x86.msm"] + if not msi: msi = "python-%s.msi" % full_current_version +for i, n in enumerate(modules): + modules[i] = os.path.join(mod_dir, n) + +def merge(msi, feature, rootdir, modules): + cab_and_filecount = [] + # Step 1: Merge databases, extract cabfiles + m = msilib.MakeMerge2() + m.OpenLog("merge.log") + print "Opened Log" + m.OpenDatabase(msi) + print "Opened DB" + for module in modules: + print module + m.OpenModule(module,0) + print "Opened Module",module + m.Merge(feature, rootdir) + print "Errors:" + for e in m.Errors: + print e.Type, e.ModuleTable, e.DatabaseTable + print " Modkeys:", + for s in e.ModuleKeys: print s, + print + print " DBKeys:", + for s in e.DatabaseKeys: print s, + print + cabname = tempfile.mktemp(suffix=".cab") + m.ExtractCAB(cabname) + cab_and_filecount.append((cabname, len(m.ModuleFiles))) + m.CloseModule() + m.CloseDatabase(True) + m.CloseLog() + + # Step 2: Add CAB files + i = msilib.MakeInstaller() + db = i.OpenDatabase(msi, win32com.client.constants.msiOpenDatabaseModeTransact) + + v = db.OpenView("SELECT LastSequence FROM Media") + v.Execute(None) + maxmedia = -1 + while 1: + r = v.Fetch() + if not r: break + seq = r.IntegerData(1) + if seq > maxmedia: + maxmedia = seq + print "Start of Media", maxmedia + + for cabname, count in cab_and_filecount: + stream = "merged%d" % maxmedia + msilib.add_data(db, "Media", + [(maxmedia+1, maxmedia+count, None, "#"+stream, None, None)]) + msilib.add_stream(db, stream, cabname) + os.unlink(cabname) + maxmedia += count + # The merge module sets ALLUSERS to 1 in the property table. + # This is undesired; delete that + v = db.OpenView("DELETE FROM Property WHERE Property='ALLUSERS'") + v.Execute(None) + v.Close() + db.Commit() + +merge(msi, "SharedCRT", "TARGETDIR", modules) + +# certname (from config.py) should be (a substring of) +# the certificate subject, e.g. "Python Software Foundation" +if certname: + os.system('signtool sign /n "%s" /t http://timestamp.verisign.com/scripts/timestamp.dll %s' % (certname, msi)) Modified: python/trunk/Tools/unicode/genwincodec.py ============================================================================== --- python/trunk/Tools/unicode/genwincodec.py (original) +++ python/trunk/Tools/unicode/genwincodec.py Mon Mar 8 23:15:11 2010 @@ -1,61 +1,61 @@ -"""This script generates a Python codec module from a Windows Code Page. - -It uses the function MultiByteToWideChar to generate a decoding table. -""" - -import ctypes -from ctypes import wintypes -from gencodec import codegen -import unicodedata - -def genwinmap(codepage): - MultiByteToWideChar = ctypes.windll.kernel32.MultiByteToWideChar - MultiByteToWideChar.argtypes = [wintypes.UINT, wintypes.DWORD, - wintypes.LPCSTR, ctypes.c_int, - wintypes.LPWSTR, ctypes.c_int] - MultiByteToWideChar.restype = ctypes.c_int - - enc2uni = {} - - for i in range(32) + [127]: - enc2uni[i] = (i, 'CONTROL CHARACTER') - - for i in range(256): - buf = ctypes.create_unicode_buffer(2) - ret = MultiByteToWideChar( - codepage, 0, - chr(i), 1, - buf, 2) - assert ret == 1, "invalid code page" - assert buf[1] == '\x00' - try: - name = unicodedata.name(buf[0]) - except ValueError: - try: - name = enc2uni[i][1] - except KeyError: - name = '' - - enc2uni[i] = (ord(buf[0]), name) - - return enc2uni - -def genwincodec(codepage): - import platform - map = genwinmap(codepage) - encodingname = 'cp%d' % codepage - code = codegen("", map, encodingname) - # Replace first lines with our own docstring - code = '''\ -"""Python Character Mapping Codec %s generated on Windows: -%s with the command: - python Tools/unicode/genwincodec.py %s -"""#" -''' % (encodingname, ' '.join(platform.win32_ver()), codepage - ) + code.split('"""#"', 1)[1] - - print code - -if __name__ == '__main__': - import sys - genwincodec(int(sys.argv[1])) +"""This script generates a Python codec module from a Windows Code Page. + +It uses the function MultiByteToWideChar to generate a decoding table. +""" + +import ctypes +from ctypes import wintypes +from gencodec import codegen +import unicodedata + +def genwinmap(codepage): + MultiByteToWideChar = ctypes.windll.kernel32.MultiByteToWideChar + MultiByteToWideChar.argtypes = [wintypes.UINT, wintypes.DWORD, + wintypes.LPCSTR, ctypes.c_int, + wintypes.LPWSTR, ctypes.c_int] + MultiByteToWideChar.restype = ctypes.c_int + + enc2uni = {} + + for i in range(32) + [127]: + enc2uni[i] = (i, 'CONTROL CHARACTER') + + for i in range(256): + buf = ctypes.create_unicode_buffer(2) + ret = MultiByteToWideChar( + codepage, 0, + chr(i), 1, + buf, 2) + assert ret == 1, "invalid code page" + assert buf[1] == '\x00' + try: + name = unicodedata.name(buf[0]) + except ValueError: + try: + name = enc2uni[i][1] + except KeyError: + name = '' + + enc2uni[i] = (ord(buf[0]), name) + + return enc2uni + +def genwincodec(codepage): + import platform + map = genwinmap(codepage) + encodingname = 'cp%d' % codepage + code = codegen("", map, encodingname) + # Replace first lines with our own docstring + code = '''\ +"""Python Character Mapping Codec %s generated on Windows: +%s with the command: + python Tools/unicode/genwincodec.py %s +"""#" +''' % (encodingname, ' '.join(platform.win32_ver()), codepage + ) + code.split('"""#"', 1)[1] + + print code + +if __name__ == '__main__': + import sys + genwincodec(int(sys.argv[1])) From python-checkins at python.org Mon Mar 8 23:17:58 2010 From: python-checkins at python.org (benjamin.peterson) Date: Mon, 8 Mar 2010 23:17:58 +0100 (CET) Subject: [Python-checkins] r78807 - in python/branches/py3k: Doc/c-api/code.rst Doc/includes/sqlite3/load_extension.py Lib/email/test/data/msg_45.txt Lib/email/test/data/msg_46.txt Lib/encodings/cp720.py Lib/test/formatfloat_testcases.txt Lib/test/math_testcases.txt Lib/test/test_linecache.py Lib/test/test_pdb.py Lib/test/test_ttk_guionly.py Objects/lnotab_notes.txt Tools/msi/merge.py Tools/scripts/analyze_dxp.py Tools/scripts/serve.py Tools/unicode/genwincodec.py Message-ID: <20100308221758.44EE8F34D@mail.python.org> Author: benjamin.peterson Date: Mon Mar 8 23:17:58 2010 New Revision: 78807 Log: Merged revisions 78806 via svnmerge from svn+ssh://pythondev at svn.python.org/python/trunk ........ r78806 | benjamin.peterson | 2010-03-08 16:15:11 -0600 (Mon, 08 Mar 2010) | 1 line set svn:eol-style on various files ........ Modified: python/branches/py3k/ (props changed) python/branches/py3k/Doc/c-api/code.rst (props changed) python/branches/py3k/Doc/includes/sqlite3/load_extension.py (props changed) python/branches/py3k/Lib/email/test/data/msg_45.txt (props changed) python/branches/py3k/Lib/email/test/data/msg_46.txt (props changed) python/branches/py3k/Lib/encodings/cp720.py (contents, props changed) python/branches/py3k/Lib/test/formatfloat_testcases.txt (props changed) python/branches/py3k/Lib/test/math_testcases.txt (props changed) python/branches/py3k/Lib/test/test_linecache.py (props changed) python/branches/py3k/Lib/test/test_pdb.py (props changed) python/branches/py3k/Lib/test/test_ttk_guionly.py (props changed) python/branches/py3k/Objects/lnotab_notes.txt (props changed) python/branches/py3k/Tools/msi/merge.py (contents, props changed) python/branches/py3k/Tools/scripts/analyze_dxp.py (props changed) python/branches/py3k/Tools/scripts/serve.py (props changed) python/branches/py3k/Tools/unicode/genwincodec.py (contents, props changed) Modified: python/branches/py3k/Lib/encodings/cp720.py ============================================================================== --- python/branches/py3k/Lib/encodings/cp720.py (original) +++ python/branches/py3k/Lib/encodings/cp720.py Mon Mar 8 23:17:58 2010 @@ -1,311 +1,309 @@ -"""Python Character Mapping Codec cp720 generated on Windows: -Vista 6.0.6002 SP2 Multiprocessor Free with the command: - python Tools/unicode/genwincodec.py 720 -"""#" - - -import codecs - -### Codec APIs - -class Codec(codecs.Codec): - - def encode(self,input,errors='strict'): - return codecs.charmap_encode(input,errors,encoding_table) - - def decode(self,input,errors='strict'): - return codecs.charmap_decode(input,errors,decoding_table) - -class IncrementalEncoder(codecs.IncrementalEncoder): - def encode(self, input, final=False): - return codecs.charmap_encode(input,self.errors,encoding_table)[0] - -class IncrementalDecoder(codecs.IncrementalDecoder): - def decode(self, input, final=False): - return codecs.charmap_decode(input,self.errors,decoding_table)[0] - -class StreamWriter(Codec,codecs.StreamWriter): - pass - -class StreamReader(Codec,codecs.StreamReader): - pass - -### encodings module API - -def getregentry(): - return codecs.CodecInfo( - name='cp720', - encode=Codec().encode, - decode=Codec().decode, - incrementalencoder=IncrementalEncoder, - incrementaldecoder=IncrementalDecoder, - streamreader=StreamReader, - streamwriter=StreamWriter, - ) - - -### Decoding Table - -decoding_table = ( - '\x00' # 0x00 -> CONTROL CHARACTER - '\x01' # 0x01 -> CONTROL CHARACTER - '\x02' # 0x02 -> CONTROL CHARACTER - '\x03' # 0x03 -> CONTROL CHARACTER - '\x04' # 0x04 -> CONTROL CHARACTER - '\x05' # 0x05 -> CONTROL CHARACTER - '\x06' # 0x06 -> CONTROL CHARACTER - '\x07' # 0x07 -> CONTROL CHARACTER - '\x08' # 0x08 -> CONTROL CHARACTER - '\t' # 0x09 -> CONTROL CHARACTER - '\n' # 0x0A -> CONTROL CHARACTER - '\x0b' # 0x0B -> CONTROL CHARACTER - '\x0c' # 0x0C -> CONTROL CHARACTER - '\r' # 0x0D -> CONTROL CHARACTER - '\x0e' # 0x0E -> CONTROL CHARACTER - '\x0f' # 0x0F -> CONTROL CHARACTER - '\x10' # 0x10 -> CONTROL CHARACTER - '\x11' # 0x11 -> CONTROL CHARACTER - '\x12' # 0x12 -> CONTROL CHARACTER - '\x13' # 0x13 -> CONTROL CHARACTER - '\x14' # 0x14 -> CONTROL CHARACTER - '\x15' # 0x15 -> CONTROL CHARACTER - '\x16' # 0x16 -> CONTROL CHARACTER - '\x17' # 0x17 -> CONTROL CHARACTER - '\x18' # 0x18 -> CONTROL CHARACTER - '\x19' # 0x19 -> CONTROL CHARACTER - '\x1a' # 0x1A -> CONTROL CHARACTER - '\x1b' # 0x1B -> CONTROL CHARACTER - '\x1c' # 0x1C -> CONTROL CHARACTER - '\x1d' # 0x1D -> CONTROL CHARACTER - '\x1e' # 0x1E -> CONTROL CHARACTER - '\x1f' # 0x1F -> CONTROL CHARACTER - ' ' # 0x20 -> SPACE - '!' # 0x21 -> EXCLAMATION MARK - '"' # 0x22 -> QUOTATION MARK - '#' # 0x23 -> NUMBER SIGN - '$' # 0x24 -> DOLLAR SIGN - '%' # 0x25 -> PERCENT SIGN - '&' # 0x26 -> AMPERSAND - "'" # 0x27 -> APOSTROPHE - '(' # 0x28 -> LEFT PARENTHESIS - ')' # 0x29 -> RIGHT PARENTHESIS - '*' # 0x2A -> ASTERISK - '+' # 0x2B -> PLUS SIGN - ',' # 0x2C -> COMMA - '-' # 0x2D -> HYPHEN-MINUS - '.' # 0x2E -> FULL STOP - '/' # 0x2F -> SOLIDUS - '0' # 0x30 -> DIGIT ZERO - '1' # 0x31 -> DIGIT ONE - '2' # 0x32 -> DIGIT TWO - '3' # 0x33 -> DIGIT THREE - '4' # 0x34 -> DIGIT FOUR - '5' # 0x35 -> DIGIT FIVE - '6' # 0x36 -> DIGIT SIX - '7' # 0x37 -> DIGIT SEVEN - '8' # 0x38 -> DIGIT EIGHT - '9' # 0x39 -> DIGIT NINE - ':' # 0x3A -> COLON - ';' # 0x3B -> SEMICOLON - '<' # 0x3C -> LESS-THAN SIGN - '=' # 0x3D -> EQUALS SIGN - '>' # 0x3E -> GREATER-THAN SIGN - '?' # 0x3F -> QUESTION MARK - '@' # 0x40 -> COMMERCIAL AT - 'A' # 0x41 -> LATIN CAPITAL LETTER A - 'B' # 0x42 -> LATIN CAPITAL LETTER B - 'C' # 0x43 -> LATIN CAPITAL LETTER C - 'D' # 0x44 -> LATIN CAPITAL LETTER D - 'E' # 0x45 -> LATIN CAPITAL LETTER E - 'F' # 0x46 -> LATIN CAPITAL LETTER F - 'G' # 0x47 -> LATIN CAPITAL LETTER G - 'H' # 0x48 -> LATIN CAPITAL LETTER H - 'I' # 0x49 -> LATIN CAPITAL LETTER I - 'J' # 0x4A -> LATIN CAPITAL LETTER J - 'K' # 0x4B -> LATIN CAPITAL LETTER K - 'L' # 0x4C -> LATIN CAPITAL LETTER L - 'M' # 0x4D -> LATIN CAPITAL LETTER M - 'N' # 0x4E -> LATIN CAPITAL LETTER N - 'O' # 0x4F -> LATIN CAPITAL LETTER O - 'P' # 0x50 -> LATIN CAPITAL LETTER P - 'Q' # 0x51 -> LATIN CAPITAL LETTER Q - 'R' # 0x52 -> LATIN CAPITAL LETTER R - 'S' # 0x53 -> LATIN CAPITAL LETTER S - 'T' # 0x54 -> LATIN CAPITAL LETTER T - 'U' # 0x55 -> LATIN CAPITAL LETTER U - 'V' # 0x56 -> LATIN CAPITAL LETTER V - 'W' # 0x57 -> LATIN CAPITAL LETTER W - 'X' # 0x58 -> LATIN CAPITAL LETTER X - 'Y' # 0x59 -> LATIN CAPITAL LETTER Y - 'Z' # 0x5A -> LATIN CAPITAL LETTER Z - '[' # 0x5B -> LEFT SQUARE BRACKET - '\\' # 0x5C -> REVERSE SOLIDUS - ']' # 0x5D -> RIGHT SQUARE BRACKET - '^' # 0x5E -> CIRCUMFLEX ACCENT - '_' # 0x5F -> LOW LINE - '`' # 0x60 -> GRAVE ACCENT - 'a' # 0x61 -> LATIN SMALL LETTER A - 'b' # 0x62 -> LATIN SMALL LETTER B - 'c' # 0x63 -> LATIN SMALL LETTER C - 'd' # 0x64 -> LATIN SMALL LETTER D - 'e' # 0x65 -> LATIN SMALL LETTER E - 'f' # 0x66 -> LATIN SMALL LETTER F - 'g' # 0x67 -> LATIN SMALL LETTER G - 'h' # 0x68 -> LATIN SMALL LETTER H - 'i' # 0x69 -> LATIN SMALL LETTER I - 'j' # 0x6A -> LATIN SMALL LETTER J - 'k' # 0x6B -> LATIN SMALL LETTER K - 'l' # 0x6C -> LATIN SMALL LETTER L - 'm' # 0x6D -> LATIN SMALL LETTER M - 'n' # 0x6E -> LATIN SMALL LETTER N - 'o' # 0x6F -> LATIN SMALL LETTER O - 'p' # 0x70 -> LATIN SMALL LETTER P - 'q' # 0x71 -> LATIN SMALL LETTER Q - 'r' # 0x72 -> LATIN SMALL LETTER R - 's' # 0x73 -> LATIN SMALL LETTER S - 't' # 0x74 -> LATIN SMALL LETTER T - 'u' # 0x75 -> LATIN SMALL LETTER U - 'v' # 0x76 -> LATIN SMALL LETTER V - 'w' # 0x77 -> LATIN SMALL LETTER W - 'x' # 0x78 -> LATIN SMALL LETTER X - 'y' # 0x79 -> LATIN SMALL LETTER Y - 'z' # 0x7A -> LATIN SMALL LETTER Z - '{' # 0x7B -> LEFT CURLY BRACKET - '|' # 0x7C -> VERTICAL LINE - '}' # 0x7D -> RIGHT CURLY BRACKET - '~' # 0x7E -> TILDE - '\x7f' # 0x7F -> CONTROL CHARACTER - '\x80' - '\x81' - '\xe9' # 0x82 -> LATIN SMALL LETTER E WITH ACUTE - '\xe2' # 0x83 -> LATIN SMALL LETTER A WITH CIRCUMFLEX - '\x84' - '\xe0' # 0x85 -> LATIN SMALL LETTER A WITH GRAVE - '\x86' - '\xe7' # 0x87 -> LATIN SMALL LETTER C WITH CEDILLA - '\xea' # 0x88 -> LATIN SMALL LETTER E WITH CIRCUMFLEX - '\xeb' # 0x89 -> LATIN SMALL LETTER E WITH DIAERESIS - '\xe8' # 0x8A -> LATIN SMALL LETTER E WITH GRAVE - '\xef' # 0x8B -> LATIN SMALL LETTER I WITH DIAERESIS - '\xee' # 0x8C -> LATIN SMALL LETTER I WITH CIRCUMFLEX - '\x8d' - '\x8e' - '\x8f' - '\x90' - '\u0651' # 0x91 -> ARABIC SHADDA - '\u0652' # 0x92 -> ARABIC SUKUN - '\xf4' # 0x93 -> LATIN SMALL LETTER O WITH CIRCUMFLEX - '\xa4' # 0x94 -> CURRENCY SIGN - '\u0640' # 0x95 -> ARABIC TATWEEL - '\xfb' # 0x96 -> LATIN SMALL LETTER U WITH CIRCUMFLEX - '\xf9' # 0x97 -> LATIN SMALL LETTER U WITH GRAVE - '\u0621' # 0x98 -> ARABIC LETTER HAMZA - '\u0622' # 0x99 -> ARABIC LETTER ALEF WITH MADDA ABOVE - '\u0623' # 0x9A -> ARABIC LETTER ALEF WITH HAMZA ABOVE - '\u0624' # 0x9B -> ARABIC LETTER WAW WITH HAMZA ABOVE - '\xa3' # 0x9C -> POUND SIGN - '\u0625' # 0x9D -> ARABIC LETTER ALEF WITH HAMZA BELOW - '\u0626' # 0x9E -> ARABIC LETTER YEH WITH HAMZA ABOVE - '\u0627' # 0x9F -> ARABIC LETTER ALEF - '\u0628' # 0xA0 -> ARABIC LETTER BEH - '\u0629' # 0xA1 -> ARABIC LETTER TEH MARBUTA - '\u062a' # 0xA2 -> ARABIC LETTER TEH - '\u062b' # 0xA3 -> ARABIC LETTER THEH - '\u062c' # 0xA4 -> ARABIC LETTER JEEM - '\u062d' # 0xA5 -> ARABIC LETTER HAH - '\u062e' # 0xA6 -> ARABIC LETTER KHAH - '\u062f' # 0xA7 -> ARABIC LETTER DAL - '\u0630' # 0xA8 -> ARABIC LETTER THAL - '\u0631' # 0xA9 -> ARABIC LETTER REH - '\u0632' # 0xAA -> ARABIC LETTER ZAIN - '\u0633' # 0xAB -> ARABIC LETTER SEEN - '\u0634' # 0xAC -> ARABIC LETTER SHEEN - '\u0635' # 0xAD -> ARABIC LETTER SAD - '\xab' # 0xAE -> LEFT-POINTING DOUBLE ANGLE QUOTATION MARK - '\xbb' # 0xAF -> RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK - '\u2591' # 0xB0 -> LIGHT SHADE - '\u2592' # 0xB1 -> MEDIUM SHADE - '\u2593' # 0xB2 -> DARK SHADE - '\u2502' # 0xB3 -> BOX DRAWINGS LIGHT VERTICAL - '\u2524' # 0xB4 -> BOX DRAWINGS LIGHT VERTICAL AND LEFT - '\u2561' # 0xB5 -> BOX DRAWINGS VERTICAL SINGLE AND LEFT DOUBLE - '\u2562' # 0xB6 -> BOX DRAWINGS VERTICAL DOUBLE AND LEFT SINGLE - '\u2556' # 0xB7 -> BOX DRAWINGS DOWN DOUBLE AND LEFT SINGLE - '\u2555' # 0xB8 -> BOX DRAWINGS DOWN SINGLE AND LEFT DOUBLE - '\u2563' # 0xB9 -> BOX DRAWINGS DOUBLE VERTICAL AND LEFT - '\u2551' # 0xBA -> BOX DRAWINGS DOUBLE VERTICAL - '\u2557' # 0xBB -> BOX DRAWINGS DOUBLE DOWN AND LEFT - '\u255d' # 0xBC -> BOX DRAWINGS DOUBLE UP AND LEFT - '\u255c' # 0xBD -> BOX DRAWINGS UP DOUBLE AND LEFT SINGLE - '\u255b' # 0xBE -> BOX DRAWINGS UP SINGLE AND LEFT DOUBLE - '\u2510' # 0xBF -> BOX DRAWINGS LIGHT DOWN AND LEFT - '\u2514' # 0xC0 -> BOX DRAWINGS LIGHT UP AND RIGHT - '\u2534' # 0xC1 -> BOX DRAWINGS LIGHT UP AND HORIZONTAL - '\u252c' # 0xC2 -> BOX DRAWINGS LIGHT DOWN AND HORIZONTAL - '\u251c' # 0xC3 -> BOX DRAWINGS LIGHT VERTICAL AND RIGHT - '\u2500' # 0xC4 -> BOX DRAWINGS LIGHT HORIZONTAL - '\u253c' # 0xC5 -> BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL - '\u255e' # 0xC6 -> BOX DRAWINGS VERTICAL SINGLE AND RIGHT DOUBLE - '\u255f' # 0xC7 -> BOX DRAWINGS VERTICAL DOUBLE AND RIGHT SINGLE - '\u255a' # 0xC8 -> BOX DRAWINGS DOUBLE UP AND RIGHT - '\u2554' # 0xC9 -> BOX DRAWINGS DOUBLE DOWN AND RIGHT - '\u2569' # 0xCA -> BOX DRAWINGS DOUBLE UP AND HORIZONTAL - '\u2566' # 0xCB -> BOX DRAWINGS DOUBLE DOWN AND HORIZONTAL - '\u2560' # 0xCC -> BOX DRAWINGS DOUBLE VERTICAL AND RIGHT - '\u2550' # 0xCD -> BOX DRAWINGS DOUBLE HORIZONTAL - '\u256c' # 0xCE -> BOX DRAWINGS DOUBLE VERTICAL AND HORIZONTAL - '\u2567' # 0xCF -> BOX DRAWINGS UP SINGLE AND HORIZONTAL DOUBLE - '\u2568' # 0xD0 -> BOX DRAWINGS UP DOUBLE AND HORIZONTAL SINGLE - '\u2564' # 0xD1 -> BOX DRAWINGS DOWN SINGLE AND HORIZONTAL DOUBLE - '\u2565' # 0xD2 -> BOX DRAWINGS DOWN DOUBLE AND HORIZONTAL SINGLE - '\u2559' # 0xD3 -> BOX DRAWINGS UP DOUBLE AND RIGHT SINGLE - '\u2558' # 0xD4 -> BOX DRAWINGS UP SINGLE AND RIGHT DOUBLE - '\u2552' # 0xD5 -> BOX DRAWINGS DOWN SINGLE AND RIGHT DOUBLE - '\u2553' # 0xD6 -> BOX DRAWINGS DOWN DOUBLE AND RIGHT SINGLE - '\u256b' # 0xD7 -> BOX DRAWINGS VERTICAL DOUBLE AND HORIZONTAL SINGLE - '\u256a' # 0xD8 -> BOX DRAWINGS VERTICAL SINGLE AND HORIZONTAL DOUBLE - '\u2518' # 0xD9 -> BOX DRAWINGS LIGHT UP AND LEFT - '\u250c' # 0xDA -> BOX DRAWINGS LIGHT DOWN AND RIGHT - '\u2588' # 0xDB -> FULL BLOCK - '\u2584' # 0xDC -> LOWER HALF BLOCK - '\u258c' # 0xDD -> LEFT HALF BLOCK - '\u2590' # 0xDE -> RIGHT HALF BLOCK - '\u2580' # 0xDF -> UPPER HALF BLOCK - '\u0636' # 0xE0 -> ARABIC LETTER DAD - '\u0637' # 0xE1 -> ARABIC LETTER TAH - '\u0638' # 0xE2 -> ARABIC LETTER ZAH - '\u0639' # 0xE3 -> ARABIC LETTER AIN - '\u063a' # 0xE4 -> ARABIC LETTER GHAIN - '\u0641' # 0xE5 -> ARABIC LETTER FEH - '\xb5' # 0xE6 -> MICRO SIGN - '\u0642' # 0xE7 -> ARABIC LETTER QAF - '\u0643' # 0xE8 -> ARABIC LETTER KAF - '\u0644' # 0xE9 -> ARABIC LETTER LAM - '\u0645' # 0xEA -> ARABIC LETTER MEEM - '\u0646' # 0xEB -> ARABIC LETTER NOON - '\u0647' # 0xEC -> ARABIC LETTER HEH - '\u0648' # 0xED -> ARABIC LETTER WAW - '\u0649' # 0xEE -> ARABIC LETTER ALEF MAKSURA - '\u064a' # 0xEF -> ARABIC LETTER YEH - '\u2261' # 0xF0 -> IDENTICAL TO - '\u064b' # 0xF1 -> ARABIC FATHATAN - '\u064c' # 0xF2 -> ARABIC DAMMATAN - '\u064d' # 0xF3 -> ARABIC KASRATAN - '\u064e' # 0xF4 -> ARABIC FATHA - '\u064f' # 0xF5 -> ARABIC DAMMA - '\u0650' # 0xF6 -> ARABIC KASRA - '\u2248' # 0xF7 -> ALMOST EQUAL TO - '\xb0' # 0xF8 -> DEGREE SIGN - '\u2219' # 0xF9 -> BULLET OPERATOR - '\xb7' # 0xFA -> MIDDLE DOT - '\u221a' # 0xFB -> SQUARE ROOT - '\u207f' # 0xFC -> SUPERSCRIPT LATIN SMALL LETTER N - '\xb2' # 0xFD -> SUPERSCRIPT TWO - '\u25a0' # 0xFE -> BLACK SQUARE - '\xa0' # 0xFF -> NO-BREAK SPACE -) - -### Encoding table -encoding_table=codecs.charmap_build(decoding_table) - - +"""Python Character Mapping Codec cp720 generated on Windows: +Vista 6.0.6002 SP2 Multiprocessor Free with the command: + python Tools/unicode/genwincodec.py 720 +"""#" + + +import codecs + +### Codec APIs + +class Codec(codecs.Codec): + + def encode(self,input,errors='strict'): + return codecs.charmap_encode(input,errors,encoding_table) + + def decode(self,input,errors='strict'): + return codecs.charmap_decode(input,errors,decoding_table) + +class IncrementalEncoder(codecs.IncrementalEncoder): + def encode(self, input, final=False): + return codecs.charmap_encode(input,self.errors,encoding_table)[0] + +class IncrementalDecoder(codecs.IncrementalDecoder): + def decode(self, input, final=False): + return codecs.charmap_decode(input,self.errors,decoding_table)[0] + +class StreamWriter(Codec,codecs.StreamWriter): + pass + +class StreamReader(Codec,codecs.StreamReader): + pass + +### encodings module API + +def getregentry(): + return codecs.CodecInfo( + name='cp720', + encode=Codec().encode, + decode=Codec().decode, + incrementalencoder=IncrementalEncoder, + incrementaldecoder=IncrementalDecoder, + streamreader=StreamReader, + streamwriter=StreamWriter, + ) + + +### Decoding Table + +decoding_table = ( + '\x00' # 0x00 -> CONTROL CHARACTER + '\x01' # 0x01 -> CONTROL CHARACTER + '\x02' # 0x02 -> CONTROL CHARACTER + '\x03' # 0x03 -> CONTROL CHARACTER + '\x04' # 0x04 -> CONTROL CHARACTER + '\x05' # 0x05 -> CONTROL CHARACTER + '\x06' # 0x06 -> CONTROL CHARACTER + '\x07' # 0x07 -> CONTROL CHARACTER + '\x08' # 0x08 -> CONTROL CHARACTER + '\t' # 0x09 -> CONTROL CHARACTER + '\n' # 0x0A -> CONTROL CHARACTER + '\x0b' # 0x0B -> CONTROL CHARACTER + '\x0c' # 0x0C -> CONTROL CHARACTER + '\r' # 0x0D -> CONTROL CHARACTER + '\x0e' # 0x0E -> CONTROL CHARACTER + '\x0f' # 0x0F -> CONTROL CHARACTER + '\x10' # 0x10 -> CONTROL CHARACTER + '\x11' # 0x11 -> CONTROL CHARACTER + '\x12' # 0x12 -> CONTROL CHARACTER + '\x13' # 0x13 -> CONTROL CHARACTER + '\x14' # 0x14 -> CONTROL CHARACTER + '\x15' # 0x15 -> CONTROL CHARACTER + '\x16' # 0x16 -> CONTROL CHARACTER + '\x17' # 0x17 -> CONTROL CHARACTER + '\x18' # 0x18 -> CONTROL CHARACTER + '\x19' # 0x19 -> CONTROL CHARACTER + '\x1a' # 0x1A -> CONTROL CHARACTER + '\x1b' # 0x1B -> CONTROL CHARACTER + '\x1c' # 0x1C -> CONTROL CHARACTER + '\x1d' # 0x1D -> CONTROL CHARACTER + '\x1e' # 0x1E -> CONTROL CHARACTER + '\x1f' # 0x1F -> CONTROL CHARACTER + ' ' # 0x20 -> SPACE + '!' # 0x21 -> EXCLAMATION MARK + '"' # 0x22 -> QUOTATION MARK + '#' # 0x23 -> NUMBER SIGN + '$' # 0x24 -> DOLLAR SIGN + '%' # 0x25 -> PERCENT SIGN + '&' # 0x26 -> AMPERSAND + "'" # 0x27 -> APOSTROPHE + '(' # 0x28 -> LEFT PARENTHESIS + ')' # 0x29 -> RIGHT PARENTHESIS + '*' # 0x2A -> ASTERISK + '+' # 0x2B -> PLUS SIGN + ',' # 0x2C -> COMMA + '-' # 0x2D -> HYPHEN-MINUS + '.' # 0x2E -> FULL STOP + '/' # 0x2F -> SOLIDUS + '0' # 0x30 -> DIGIT ZERO + '1' # 0x31 -> DIGIT ONE + '2' # 0x32 -> DIGIT TWO + '3' # 0x33 -> DIGIT THREE + '4' # 0x34 -> DIGIT FOUR + '5' # 0x35 -> DIGIT FIVE + '6' # 0x36 -> DIGIT SIX + '7' # 0x37 -> DIGIT SEVEN + '8' # 0x38 -> DIGIT EIGHT + '9' # 0x39 -> DIGIT NINE + ':' # 0x3A -> COLON + ';' # 0x3B -> SEMICOLON + '<' # 0x3C -> LESS-THAN SIGN + '=' # 0x3D -> EQUALS SIGN + '>' # 0x3E -> GREATER-THAN SIGN + '?' # 0x3F -> QUESTION MARK + '@' # 0x40 -> COMMERCIAL AT + 'A' # 0x41 -> LATIN CAPITAL LETTER A + 'B' # 0x42 -> LATIN CAPITAL LETTER B + 'C' # 0x43 -> LATIN CAPITAL LETTER C + 'D' # 0x44 -> LATIN CAPITAL LETTER D + 'E' # 0x45 -> LATIN CAPITAL LETTER E + 'F' # 0x46 -> LATIN CAPITAL LETTER F + 'G' # 0x47 -> LATIN CAPITAL LETTER G + 'H' # 0x48 -> LATIN CAPITAL LETTER H + 'I' # 0x49 -> LATIN CAPITAL LETTER I + 'J' # 0x4A -> LATIN CAPITAL LETTER J + 'K' # 0x4B -> LATIN CAPITAL LETTER K + 'L' # 0x4C -> LATIN CAPITAL LETTER L + 'M' # 0x4D -> LATIN CAPITAL LETTER M + 'N' # 0x4E -> LATIN CAPITAL LETTER N + 'O' # 0x4F -> LATIN CAPITAL LETTER O + 'P' # 0x50 -> LATIN CAPITAL LETTER P + 'Q' # 0x51 -> LATIN CAPITAL LETTER Q + 'R' # 0x52 -> LATIN CAPITAL LETTER R + 'S' # 0x53 -> LATIN CAPITAL LETTER S + 'T' # 0x54 -> LATIN CAPITAL LETTER T + 'U' # 0x55 -> LATIN CAPITAL LETTER U + 'V' # 0x56 -> LATIN CAPITAL LETTER V + 'W' # 0x57 -> LATIN CAPITAL LETTER W + 'X' # 0x58 -> LATIN CAPITAL LETTER X + 'Y' # 0x59 -> LATIN CAPITAL LETTER Y + 'Z' # 0x5A -> LATIN CAPITAL LETTER Z + '[' # 0x5B -> LEFT SQUARE BRACKET + '\\' # 0x5C -> REVERSE SOLIDUS + ']' # 0x5D -> RIGHT SQUARE BRACKET + '^' # 0x5E -> CIRCUMFLEX ACCENT + '_' # 0x5F -> LOW LINE + '`' # 0x60 -> GRAVE ACCENT + 'a' # 0x61 -> LATIN SMALL LETTER A + 'b' # 0x62 -> LATIN SMALL LETTER B + 'c' # 0x63 -> LATIN SMALL LETTER C + 'd' # 0x64 -> LATIN SMALL LETTER D + 'e' # 0x65 -> LATIN SMALL LETTER E + 'f' # 0x66 -> LATIN SMALL LETTER F + 'g' # 0x67 -> LATIN SMALL LETTER G + 'h' # 0x68 -> LATIN SMALL LETTER H + 'i' # 0x69 -> LATIN SMALL LETTER I + 'j' # 0x6A -> LATIN SMALL LETTER J + 'k' # 0x6B -> LATIN SMALL LETTER K + 'l' # 0x6C -> LATIN SMALL LETTER L + 'm' # 0x6D -> LATIN SMALL LETTER M + 'n' # 0x6E -> LATIN SMALL LETTER N + 'o' # 0x6F -> LATIN SMALL LETTER O + 'p' # 0x70 -> LATIN SMALL LETTER P + 'q' # 0x71 -> LATIN SMALL LETTER Q + 'r' # 0x72 -> LATIN SMALL LETTER R + 's' # 0x73 -> LATIN SMALL LETTER S + 't' # 0x74 -> LATIN SMALL LETTER T + 'u' # 0x75 -> LATIN SMALL LETTER U + 'v' # 0x76 -> LATIN SMALL LETTER V + 'w' # 0x77 -> LATIN SMALL LETTER W + 'x' # 0x78 -> LATIN SMALL LETTER X + 'y' # 0x79 -> LATIN SMALL LETTER Y + 'z' # 0x7A -> LATIN SMALL LETTER Z + '{' # 0x7B -> LEFT CURLY BRACKET + '|' # 0x7C -> VERTICAL LINE + '}' # 0x7D -> RIGHT CURLY BRACKET + '~' # 0x7E -> TILDE + '\x7f' # 0x7F -> CONTROL CHARACTER + '\x80' + '\x81' + '\xe9' # 0x82 -> LATIN SMALL LETTER E WITH ACUTE + '\xe2' # 0x83 -> LATIN SMALL LETTER A WITH CIRCUMFLEX + '\x84' + '\xe0' # 0x85 -> LATIN SMALL LETTER A WITH GRAVE + '\x86' + '\xe7' # 0x87 -> LATIN SMALL LETTER C WITH CEDILLA + '\xea' # 0x88 -> LATIN SMALL LETTER E WITH CIRCUMFLEX + '\xeb' # 0x89 -> LATIN SMALL LETTER E WITH DIAERESIS + '\xe8' # 0x8A -> LATIN SMALL LETTER E WITH GRAVE + '\xef' # 0x8B -> LATIN SMALL LETTER I WITH DIAERESIS + '\xee' # 0x8C -> LATIN SMALL LETTER I WITH CIRCUMFLEX + '\x8d' + '\x8e' + '\x8f' + '\x90' + '\u0651' # 0x91 -> ARABIC SHADDA + '\u0652' # 0x92 -> ARABIC SUKUN + '\xf4' # 0x93 -> LATIN SMALL LETTER O WITH CIRCUMFLEX + '\xa4' # 0x94 -> CURRENCY SIGN + '\u0640' # 0x95 -> ARABIC TATWEEL + '\xfb' # 0x96 -> LATIN SMALL LETTER U WITH CIRCUMFLEX + '\xf9' # 0x97 -> LATIN SMALL LETTER U WITH GRAVE + '\u0621' # 0x98 -> ARABIC LETTER HAMZA + '\u0622' # 0x99 -> ARABIC LETTER ALEF WITH MADDA ABOVE + '\u0623' # 0x9A -> ARABIC LETTER ALEF WITH HAMZA ABOVE + '\u0624' # 0x9B -> ARABIC LETTER WAW WITH HAMZA ABOVE + '\xa3' # 0x9C -> POUND SIGN + '\u0625' # 0x9D -> ARABIC LETTER ALEF WITH HAMZA BELOW + '\u0626' # 0x9E -> ARABIC LETTER YEH WITH HAMZA ABOVE + '\u0627' # 0x9F -> ARABIC LETTER ALEF + '\u0628' # 0xA0 -> ARABIC LETTER BEH + '\u0629' # 0xA1 -> ARABIC LETTER TEH MARBUTA + '\u062a' # 0xA2 -> ARABIC LETTER TEH + '\u062b' # 0xA3 -> ARABIC LETTER THEH + '\u062c' # 0xA4 -> ARABIC LETTER JEEM + '\u062d' # 0xA5 -> ARABIC LETTER HAH + '\u062e' # 0xA6 -> ARABIC LETTER KHAH + '\u062f' # 0xA7 -> ARABIC LETTER DAL + '\u0630' # 0xA8 -> ARABIC LETTER THAL + '\u0631' # 0xA9 -> ARABIC LETTER REH + '\u0632' # 0xAA -> ARABIC LETTER ZAIN + '\u0633' # 0xAB -> ARABIC LETTER SEEN + '\u0634' # 0xAC -> ARABIC LETTER SHEEN + '\u0635' # 0xAD -> ARABIC LETTER SAD + '\xab' # 0xAE -> LEFT-POINTING DOUBLE ANGLE QUOTATION MARK + '\xbb' # 0xAF -> RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK + '\u2591' # 0xB0 -> LIGHT SHADE + '\u2592' # 0xB1 -> MEDIUM SHADE + '\u2593' # 0xB2 -> DARK SHADE + '\u2502' # 0xB3 -> BOX DRAWINGS LIGHT VERTICAL + '\u2524' # 0xB4 -> BOX DRAWINGS LIGHT VERTICAL AND LEFT + '\u2561' # 0xB5 -> BOX DRAWINGS VERTICAL SINGLE AND LEFT DOUBLE + '\u2562' # 0xB6 -> BOX DRAWINGS VERTICAL DOUBLE AND LEFT SINGLE + '\u2556' # 0xB7 -> BOX DRAWINGS DOWN DOUBLE AND LEFT SINGLE + '\u2555' # 0xB8 -> BOX DRAWINGS DOWN SINGLE AND LEFT DOUBLE + '\u2563' # 0xB9 -> BOX DRAWINGS DOUBLE VERTICAL AND LEFT + '\u2551' # 0xBA -> BOX DRAWINGS DOUBLE VERTICAL + '\u2557' # 0xBB -> BOX DRAWINGS DOUBLE DOWN AND LEFT + '\u255d' # 0xBC -> BOX DRAWINGS DOUBLE UP AND LEFT + '\u255c' # 0xBD -> BOX DRAWINGS UP DOUBLE AND LEFT SINGLE + '\u255b' # 0xBE -> BOX DRAWINGS UP SINGLE AND LEFT DOUBLE + '\u2510' # 0xBF -> BOX DRAWINGS LIGHT DOWN AND LEFT + '\u2514' # 0xC0 -> BOX DRAWINGS LIGHT UP AND RIGHT + '\u2534' # 0xC1 -> BOX DRAWINGS LIGHT UP AND HORIZONTAL + '\u252c' # 0xC2 -> BOX DRAWINGS LIGHT DOWN AND HORIZONTAL + '\u251c' # 0xC3 -> BOX DRAWINGS LIGHT VERTICAL AND RIGHT + '\u2500' # 0xC4 -> BOX DRAWINGS LIGHT HORIZONTAL + '\u253c' # 0xC5 -> BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL + '\u255e' # 0xC6 -> BOX DRAWINGS VERTICAL SINGLE AND RIGHT DOUBLE + '\u255f' # 0xC7 -> BOX DRAWINGS VERTICAL DOUBLE AND RIGHT SINGLE + '\u255a' # 0xC8 -> BOX DRAWINGS DOUBLE UP AND RIGHT + '\u2554' # 0xC9 -> BOX DRAWINGS DOUBLE DOWN AND RIGHT + '\u2569' # 0xCA -> BOX DRAWINGS DOUBLE UP AND HORIZONTAL + '\u2566' # 0xCB -> BOX DRAWINGS DOUBLE DOWN AND HORIZONTAL + '\u2560' # 0xCC -> BOX DRAWINGS DOUBLE VERTICAL AND RIGHT + '\u2550' # 0xCD -> BOX DRAWINGS DOUBLE HORIZONTAL + '\u256c' # 0xCE -> BOX DRAWINGS DOUBLE VERTICAL AND HORIZONTAL + '\u2567' # 0xCF -> BOX DRAWINGS UP SINGLE AND HORIZONTAL DOUBLE + '\u2568' # 0xD0 -> BOX DRAWINGS UP DOUBLE AND HORIZONTAL SINGLE + '\u2564' # 0xD1 -> BOX DRAWINGS DOWN SINGLE AND HORIZONTAL DOUBLE + '\u2565' # 0xD2 -> BOX DRAWINGS DOWN DOUBLE AND HORIZONTAL SINGLE + '\u2559' # 0xD3 -> BOX DRAWINGS UP DOUBLE AND RIGHT SINGLE + '\u2558' # 0xD4 -> BOX DRAWINGS UP SINGLE AND RIGHT DOUBLE + '\u2552' # 0xD5 -> BOX DRAWINGS DOWN SINGLE AND RIGHT DOUBLE + '\u2553' # 0xD6 -> BOX DRAWINGS DOWN DOUBLE AND RIGHT SINGLE + '\u256b' # 0xD7 -> BOX DRAWINGS VERTICAL DOUBLE AND HORIZONTAL SINGLE + '\u256a' # 0xD8 -> BOX DRAWINGS VERTICAL SINGLE AND HORIZONTAL DOUBLE + '\u2518' # 0xD9 -> BOX DRAWINGS LIGHT UP AND LEFT + '\u250c' # 0xDA -> BOX DRAWINGS LIGHT DOWN AND RIGHT + '\u2588' # 0xDB -> FULL BLOCK + '\u2584' # 0xDC -> LOWER HALF BLOCK + '\u258c' # 0xDD -> LEFT HALF BLOCK + '\u2590' # 0xDE -> RIGHT HALF BLOCK + '\u2580' # 0xDF -> UPPER HALF BLOCK + '\u0636' # 0xE0 -> ARABIC LETTER DAD + '\u0637' # 0xE1 -> ARABIC LETTER TAH + '\u0638' # 0xE2 -> ARABIC LETTER ZAH + '\u0639' # 0xE3 -> ARABIC LETTER AIN + '\u063a' # 0xE4 -> ARABIC LETTER GHAIN + '\u0641' # 0xE5 -> ARABIC LETTER FEH + '\xb5' # 0xE6 -> MICRO SIGN + '\u0642' # 0xE7 -> ARABIC LETTER QAF + '\u0643' # 0xE8 -> ARABIC LETTER KAF + '\u0644' # 0xE9 -> ARABIC LETTER LAM + '\u0645' # 0xEA -> ARABIC LETTER MEEM + '\u0646' # 0xEB -> ARABIC LETTER NOON + '\u0647' # 0xEC -> ARABIC LETTER HEH + '\u0648' # 0xED -> ARABIC LETTER WAW + '\u0649' # 0xEE -> ARABIC LETTER ALEF MAKSURA + '\u064a' # 0xEF -> ARABIC LETTER YEH + '\u2261' # 0xF0 -> IDENTICAL TO + '\u064b' # 0xF1 -> ARABIC FATHATAN + '\u064c' # 0xF2 -> ARABIC DAMMATAN + '\u064d' # 0xF3 -> ARABIC KASRATAN + '\u064e' # 0xF4 -> ARABIC FATHA + '\u064f' # 0xF5 -> ARABIC DAMMA + '\u0650' # 0xF6 -> ARABIC KASRA + '\u2248' # 0xF7 -> ALMOST EQUAL TO + '\xb0' # 0xF8 -> DEGREE SIGN + '\u2219' # 0xF9 -> BULLET OPERATOR + '\xb7' # 0xFA -> MIDDLE DOT + '\u221a' # 0xFB -> SQUARE ROOT + '\u207f' # 0xFC -> SUPERSCRIPT LATIN SMALL LETTER N + '\xb2' # 0xFD -> SUPERSCRIPT TWO + '\u25a0' # 0xFE -> BLACK SQUARE + '\xa0' # 0xFF -> NO-BREAK SPACE +) + +### Encoding table +encoding_table=codecs.charmap_build(decoding_table) Modified: python/branches/py3k/Tools/msi/merge.py ============================================================================== --- python/branches/py3k/Tools/msi/merge.py (original) +++ python/branches/py3k/Tools/msi/merge.py Mon Mar 8 23:17:58 2010 @@ -1,84 +1,84 @@ -import msilib,os,win32com,tempfile,sys -PCBUILD="PCBuild" -certname = None -from config import * - -Win64 = "amd64" in PCBUILD - -mod_dir = os.path.join(os.environ["ProgramFiles"], "Common Files", "Merge Modules") -msi = None -if len(sys.argv)==2: - msi = sys.argv[1] -if Win64: - modules = ["Microsoft_VC90_CRT_x86_x64.msm", "policy_9_0_Microsoft_VC90_CRT_x86_x64.msm"] - if not msi: msi = "python-%s.amd64.msi" % full_current_version -else: - modules = ["Microsoft_VC90_CRT_x86.msm","policy_9_0_Microsoft_VC90_CRT_x86.msm"] - if not msi: msi = "python-%s.msi" % full_current_version -for i, n in enumerate(modules): - modules[i] = os.path.join(mod_dir, n) - -def merge(msi, feature, rootdir, modules): - cab_and_filecount = [] - # Step 1: Merge databases, extract cabfiles - m = msilib.MakeMerge2() - m.OpenLog("merge.log") - print "Opened Log" - m.OpenDatabase(msi) - print "Opened DB" - for module in modules: - print module - m.OpenModule(module,0) - print "Opened Module",module - m.Merge(feature, rootdir) - print "Errors:" - for e in m.Errors: - print e.Type, e.ModuleTable, e.DatabaseTable - print " Modkeys:", - for s in e.ModuleKeys: print s, - print - print " DBKeys:", - for s in e.DatabaseKeys: print s, - print - cabname = tempfile.mktemp(suffix=".cab") - m.ExtractCAB(cabname) - cab_and_filecount.append((cabname, len(m.ModuleFiles))) - m.CloseModule() - m.CloseDatabase(True) - m.CloseLog() - - # Step 2: Add CAB files - i = msilib.MakeInstaller() - db = i.OpenDatabase(msi, win32com.client.constants.msiOpenDatabaseModeTransact) - - v = db.OpenView("SELECT LastSequence FROM Media") - v.Execute(None) - maxmedia = -1 - while 1: - r = v.Fetch() - if not r: break - seq = r.IntegerData(1) - if seq > maxmedia: - maxmedia = seq - print "Start of Media", maxmedia - - for cabname, count in cab_and_filecount: - stream = "merged%d" % maxmedia - msilib.add_data(db, "Media", - [(maxmedia+1, maxmedia+count, None, "#"+stream, None, None)]) - msilib.add_stream(db, stream, cabname) - os.unlink(cabname) - maxmedia += count - # The merge module sets ALLUSERS to 1 in the property table. - # This is undesired; delete that - v = db.OpenView("DELETE FROM Property WHERE Property='ALLUSERS'") - v.Execute(None) - v.Close() - db.Commit() - -merge(msi, "SharedCRT", "TARGETDIR", modules) - -# certname (from config.py) should be (a substring of) -# the certificate subject, e.g. "Python Software Foundation" -if certname: - os.system('signtool sign /n "%s" /t http://timestamp.verisign.com/scripts/timestamp.dll %s' % (certname, msi)) +import msilib,os,win32com,tempfile,sys +PCBUILD="PCBuild" +certname = None +from config import * + +Win64 = "amd64" in PCBUILD + +mod_dir = os.path.join(os.environ["ProgramFiles"], "Common Files", "Merge Modules") +msi = None +if len(sys.argv)==2: + msi = sys.argv[1] +if Win64: + modules = ["Microsoft_VC90_CRT_x86_x64.msm", "policy_9_0_Microsoft_VC90_CRT_x86_x64.msm"] + if not msi: msi = "python-%s.amd64.msi" % full_current_version +else: + modules = ["Microsoft_VC90_CRT_x86.msm","policy_9_0_Microsoft_VC90_CRT_x86.msm"] + if not msi: msi = "python-%s.msi" % full_current_version +for i, n in enumerate(modules): + modules[i] = os.path.join(mod_dir, n) + +def merge(msi, feature, rootdir, modules): + cab_and_filecount = [] + # Step 1: Merge databases, extract cabfiles + m = msilib.MakeMerge2() + m.OpenLog("merge.log") + print "Opened Log" + m.OpenDatabase(msi) + print "Opened DB" + for module in modules: + print module + m.OpenModule(module,0) + print "Opened Module",module + m.Merge(feature, rootdir) + print "Errors:" + for e in m.Errors: + print e.Type, e.ModuleTable, e.DatabaseTable + print " Modkeys:", + for s in e.ModuleKeys: print s, + print + print " DBKeys:", + for s in e.DatabaseKeys: print s, + print + cabname = tempfile.mktemp(suffix=".cab") + m.ExtractCAB(cabname) + cab_and_filecount.append((cabname, len(m.ModuleFiles))) + m.CloseModule() + m.CloseDatabase(True) + m.CloseLog() + + # Step 2: Add CAB files + i = msilib.MakeInstaller() + db = i.OpenDatabase(msi, win32com.client.constants.msiOpenDatabaseModeTransact) + + v = db.OpenView("SELECT LastSequence FROM Media") + v.Execute(None) + maxmedia = -1 + while 1: + r = v.Fetch() + if not r: break + seq = r.IntegerData(1) + if seq > maxmedia: + maxmedia = seq + print "Start of Media", maxmedia + + for cabname, count in cab_and_filecount: + stream = "merged%d" % maxmedia + msilib.add_data(db, "Media", + [(maxmedia+1, maxmedia+count, None, "#"+stream, None, None)]) + msilib.add_stream(db, stream, cabname) + os.unlink(cabname) + maxmedia += count + # The merge module sets ALLUSERS to 1 in the property table. + # This is undesired; delete that + v = db.OpenView("DELETE FROM Property WHERE Property='ALLUSERS'") + v.Execute(None) + v.Close() + db.Commit() + +merge(msi, "SharedCRT", "TARGETDIR", modules) + +# certname (from config.py) should be (a substring of) +# the certificate subject, e.g. "Python Software Foundation" +if certname: + os.system('signtool sign /n "%s" /t http://timestamp.verisign.com/scripts/timestamp.dll %s' % (certname, msi)) Modified: python/branches/py3k/Tools/unicode/genwincodec.py ============================================================================== --- python/branches/py3k/Tools/unicode/genwincodec.py (original) +++ python/branches/py3k/Tools/unicode/genwincodec.py Mon Mar 8 23:17:58 2010 @@ -1,61 +1,61 @@ -"""This script generates a Python codec module from a Windows Code Page. - -It uses the function MultiByteToWideChar to generate a decoding table. -""" - -import ctypes -from ctypes import wintypes -from gencodec import codegen -import unicodedata - -def genwinmap(codepage): - MultiByteToWideChar = ctypes.windll.kernel32.MultiByteToWideChar - MultiByteToWideChar.argtypes = [wintypes.UINT, wintypes.DWORD, - wintypes.LPCSTR, ctypes.c_int, - wintypes.LPWSTR, ctypes.c_int] - MultiByteToWideChar.restype = ctypes.c_int - - enc2uni = {} - - for i in list(range(32)) + [127]: - enc2uni[i] = (i, 'CONTROL CHARACTER') - - for i in range(256): - buf = ctypes.create_unicode_buffer(2) - ret = MultiByteToWideChar( - codepage, 0, - bytes([i]), 1, - buf, 2) - assert ret == 1, "invalid code page" - assert buf[1] == '\x00' - try: - name = unicodedata.name(buf[0]) - except ValueError: - try: - name = enc2uni[i][1] - except KeyError: - name = '' - - enc2uni[i] = (ord(buf[0]), name) - - return enc2uni - -def genwincodec(codepage): - import platform - map = genwinmap(codepage) - encodingname = 'cp%d' % codepage - code = codegen("", map, encodingname) - # Replace first lines with our own docstring - code = '''\ -"""Python Character Mapping Codec %s generated on Windows: -%s with the command: - python Tools/unicode/genwincodec.py %s -"""#" -''' % (encodingname, ' '.join(platform.win32_ver()), codepage - ) + code.split('"""#"', 1)[1] - - print(code) - -if __name__ == '__main__': - import sys - genwincodec(int(sys.argv[1])) +"""This script generates a Python codec module from a Windows Code Page. + +It uses the function MultiByteToWideChar to generate a decoding table. +""" + +import ctypes +from ctypes import wintypes +from gencodec import codegen +import unicodedata + +def genwinmap(codepage): + MultiByteToWideChar = ctypes.windll.kernel32.MultiByteToWideChar + MultiByteToWideChar.argtypes = [wintypes.UINT, wintypes.DWORD, + wintypes.LPCSTR, ctypes.c_int, + wintypes.LPWSTR, ctypes.c_int] + MultiByteToWideChar.restype = ctypes.c_int + + enc2uni = {} + + for i in list(range(32)) + [127]: + enc2uni[i] = (i, 'CONTROL CHARACTER') + + for i in range(256): + buf = ctypes.create_unicode_buffer(2) + ret = MultiByteToWideChar( + codepage, 0, + bytes([i]), 1, + buf, 2) + assert ret == 1, "invalid code page" + assert buf[1] == '\x00' + try: + name = unicodedata.name(buf[0]) + except ValueError: + try: + name = enc2uni[i][1] + except KeyError: + name = '' + + enc2uni[i] = (ord(buf[0]), name) + + return enc2uni + +def genwincodec(codepage): + import platform + map = genwinmap(codepage) + encodingname = 'cp%d' % codepage + code = codegen("", map, encodingname) + # Replace first lines with our own docstring + code = '''\ +"""Python Character Mapping Codec %s generated on Windows: +%s with the command: + python Tools/unicode/genwincodec.py %s +"""#" +''' % (encodingname, ' '.join(platform.win32_ver()), codepage + ) + code.split('"""#"', 1)[1] + + print(code) + +if __name__ == '__main__': + import sys + genwincodec(int(sys.argv[1])) From solipsis at pitrou.net Tue Mar 9 01:03:02 2010 From: solipsis at pitrou.net (solipsis at pitrou.net) Date: Tue, 9 Mar 2010 01:03:02 +0100 (CET) Subject: [Python-checkins] Daily py3k reference leaks (r78804): sum=0 Message-ID: <20100309000302.91C661770B@ns6635.ovh.net> py3k results for svn r78804 (hg cset 223e60a66443) -------------------------------------------------- Command line was: ['./python', '-m', 'test.regrtest', '-uall', '-R', '3:3:/home/antoine/py3k/refleaks/reflogcKcQgg', '-x', 'test_httpservers'] From python-checkins at python.org Tue Mar 9 07:40:19 2010 From: python-checkins at python.org (ronald.oussoren) Date: Tue, 9 Mar 2010 07:40:19 +0100 (CET) Subject: [Python-checkins] r78808 - in python/branches/py3k: configure configure.in Message-ID: <20100309064019.A2644FB8E@mail.python.org> Author: ronald.oussoren Date: Tue Mar 9 07:40:19 2010 New Revision: 78808 Log: Bugfix for the fix for issue 8067 Modified: python/branches/py3k/configure python/branches/py3k/configure.in Modified: python/branches/py3k/configure ============================================================================== --- python/branches/py3k/configure (original) +++ python/branches/py3k/configure Tue Mar 9 07:40:19 2010 @@ -1,5 +1,5 @@ #! /bin/sh -# From configure.in Revision: 78476 . +# From configure.in Revision: 78782 . # Guess values for system-dependent variables and create Makefiles. # Generated by GNU Autoconf 2.61 for python 3.2. # @@ -2154,7 +2154,7 @@ # has no effect, don't bother defining them Darwin/[6789].*) define_xopen_source=no;; - Darwin/1[6789].*) + Darwin/1[0-9].*) define_xopen_source=no;; # On AIX 4 and 5.1, mbstate_t is defined only when _XOPEN_SOURCE == 500 but # used in wcsnrtombs() and mbsnrtowcs() even if _XOPEN_SOURCE is not defined Modified: python/branches/py3k/configure.in ============================================================================== --- python/branches/py3k/configure.in (original) +++ python/branches/py3k/configure.in Tue Mar 9 07:40:19 2010 @@ -319,7 +319,7 @@ # has no effect, don't bother defining them Darwin/@<:@6789@:>@.*) define_xopen_source=no;; - Darwin/1@<:@6789@:>@.*) + Darwin/1@<:@0-9@:>@.*) define_xopen_source=no;; # On AIX 4 and 5.1, mbstate_t is defined only when _XOPEN_SOURCE == 500 but # used in wcsnrtombs() and mbsnrtowcs() even if _XOPEN_SOURCE is not defined From python-checkins at python.org Tue Mar 9 07:41:58 2010 From: python-checkins at python.org (ronald.oussoren) Date: Tue, 9 Mar 2010 07:41:58 +0100 (CET) Subject: [Python-checkins] r78809 - in python/branches/release31-maint: configure configure.in Message-ID: <20100309064158.D0E74FBCC@mail.python.org> Author: ronald.oussoren Date: Tue Mar 9 07:41:58 2010 New Revision: 78809 Log: Merged revisions 78808 via svnmerge from svn+ssh://pythondev at svn.python.org/python/branches/py3k ........ r78808 | ronald.oussoren | 2010-03-09 07:40:19 +0100 (Tue, 09 Mar 2010) | 2 lines Bugfix for the fix for issue 8067 ........ Modified: python/branches/release31-maint/ (props changed) python/branches/release31-maint/configure python/branches/release31-maint/configure.in Modified: python/branches/release31-maint/configure ============================================================================== --- python/branches/release31-maint/configure (original) +++ python/branches/release31-maint/configure Tue Mar 9 07:41:58 2010 @@ -1,5 +1,5 @@ #! /bin/sh -# From configure.in Revision: 78477 . +# From configure.in Revision: 78783 . # Guess values for system-dependent variables and create Makefiles. # Generated by GNU Autoconf 2.61 for python 3.1. # @@ -2160,7 +2160,7 @@ # has no effect, don't bother defining them Darwin/[6789].*) define_xopen_source=no;; - Darwin/1[6789].*) + Darwin/1[0-9].*) define_xopen_source=no;; # On AIX 4 and 5.1, mbstate_t is defined only when _XOPEN_SOURCE == 500 but # used in wcsnrtombs() and mbsnrtowcs() even if _XOPEN_SOURCE is not defined Modified: python/branches/release31-maint/configure.in ============================================================================== --- python/branches/release31-maint/configure.in (original) +++ python/branches/release31-maint/configure.in Tue Mar 9 07:41:58 2010 @@ -322,7 +322,7 @@ # has no effect, don't bother defining them Darwin/@<:@6789@:>@.*) define_xopen_source=no;; - Darwin/1@<:@6789@:>@.*) + Darwin/1@<:@0-9@:>@.*) define_xopen_source=no;; # On AIX 4 and 5.1, mbstate_t is defined only when _XOPEN_SOURCE == 500 but # used in wcsnrtombs() and mbsnrtowcs() even if _XOPEN_SOURCE is not defined From python-checkins at python.org Tue Mar 9 09:44:18 2010 From: python-checkins at python.org (raymond.hettinger) Date: Tue, 9 Mar 2010 09:44:18 +0100 (CET) Subject: [Python-checkins] r78810 - python/trunk/Doc/library/unittest.rst Message-ID: <20100309084418.32617FBAC@mail.python.org> Author: raymond.hettinger Date: Tue Mar 9 09:44:18 2010 New Revision: 78810 Log: Improve the basic example. * Show both the decorator and regular form for assertRaises() * Use assertTrue() instead of assertIn() to teach useful minimal subset of the API Modified: python/trunk/Doc/library/unittest.rst Modified: python/trunk/Doc/library/unittest.rst ============================================================================== --- python/trunk/Doc/library/unittest.rst (original) +++ python/trunk/Doc/library/unittest.rst Tue Mar 9 09:44:18 2010 @@ -116,14 +116,18 @@ self.seq.sort() self.assertEqual(self.seq, range(10)) + # should raise an exception for an immutable sequence + self.assertRaises(TypeError, random.shuffle, (1,2,3)) + def test_choice(self): element = random.choice(self.seq) - self.assertIn(element, self.seq) + self.assertTrue(element in self.seq) def test_sample(self): - self.assertRaises(ValueError, random.sample, self.seq, 20) + with self.assertRaises(ValueError): + random.sample(self.seq, 20) for element in random.sample(self.seq, 5): - self.assertIn(element, self.seq) + self.assertTrue(element in self.seq) if __name__ == '__main__': unittest.main() From python-checkins at python.org Tue Mar 9 10:01:46 2010 From: python-checkins at python.org (raymond.hettinger) Date: Tue, 9 Mar 2010 10:01:46 +0100 (CET) Subject: [Python-checkins] r78811 - in python/trunk: Doc/library/collections.rst Lib/collections.py Message-ID: <20100309090146.8FC7AFCCB@mail.python.org> Author: raymond.hettinger Date: Tue Mar 9 10:01:46 2010 New Revision: 78811 Log: Add nicer docstrings to namedtuples(). Provides better tooltips and looks better in help(). Modified: python/trunk/Doc/library/collections.rst python/trunk/Lib/collections.py Modified: python/trunk/Doc/library/collections.rst ============================================================================== --- python/trunk/Doc/library/collections.rst (original) +++ python/trunk/Doc/library/collections.rst Tue Mar 9 10:01:46 2010 @@ -679,6 +679,7 @@ _fields = ('x', 'y') def __new__(_cls, x, y): + 'Create a new instance of Point(x, y)' return _tuple.__new__(_cls, (x, y)) @classmethod @@ -690,6 +691,7 @@ return result def __repr__(self): + 'Return a nicely formatted representation string' return 'Point(x=%r, y=%r)' % self def _asdict(self): @@ -704,10 +706,11 @@ return result def __getnewargs__(self): + 'Return self as a plain tuple. Used by copy and pickle.' return tuple(self) - x = _property(_itemgetter(0)) - y = _property(_itemgetter(1)) + x = _property(_itemgetter(0), doc='Alias for field number 0') + y = _property(_itemgetter(1), doc='Alias for field number 1') >>> p = Point(11, y=22) # instantiate with positional or keyword arguments >>> p[0] + p[1] # indexable like the plain tuple (11, 22) Modified: python/trunk/Lib/collections.py ============================================================================== --- python/trunk/Lib/collections.py (original) +++ python/trunk/Lib/collections.py Tue Mar 9 10:01:46 2010 @@ -230,6 +230,7 @@ __slots__ = () \n _fields = %(field_names)r \n def __new__(_cls, %(argtxt)s): + 'Create new instance of %(typename)s(%(argtxt)s)' return _tuple.__new__(_cls, (%(argtxt)s)) \n @classmethod def _make(cls, iterable, new=tuple.__new__, len=len): @@ -239,6 +240,7 @@ raise TypeError('Expected %(numfields)d arguments, got %%d' %% len(result)) return result \n def __repr__(self): + 'Return a nicely formatted representation string' return '%(typename)s(%(reprtxt)s)' %% self \n def _asdict(self): 'Return a new OrderedDict which maps field names to their values' @@ -250,9 +252,10 @@ raise ValueError('Got unexpected field names: %%r' %% kwds.keys()) return result \n def __getnewargs__(self): + 'Return self as a plain tuple. Used by copy and pickle.' return tuple(self) \n\n''' % locals() for i, name in enumerate(field_names): - template += ' %s = _property(_itemgetter(%d))\n' % (name, i) + template += " %s = _property(_itemgetter(%d), doc='Alias for field number %d')\n" % (name, i, i) if verbose: print template From python-checkins at python.org Tue Mar 9 10:58:53 2010 From: python-checkins at python.org (raymond.hettinger) Date: Tue, 9 Mar 2010 10:58:53 +0100 (CET) Subject: [Python-checkins] r78812 - python/trunk/Lib/collections.py Message-ID: <20100309095853.A32D3DD1E@mail.python.org> Author: raymond.hettinger Date: Tue Mar 9 10:58:53 2010 New Revision: 78812 Log: Have links in OrderedDicts be native Python lists instead of a custom class with __slots__. This simplifies the code a bit, reduces memory consumption, improves speed, and eliminates the need for weak reference proxies. Modified: python/trunk/Lib/collections.py Modified: python/trunk/Lib/collections.py ============================================================================== --- python/trunk/Lib/collections.py (original) +++ python/trunk/Lib/collections.py Tue Mar 9 10:58:53 2010 @@ -10,7 +10,6 @@ from keyword import iskeyword as _iskeyword import sys as _sys import heapq as _heapq -from weakref import proxy as _proxy from itertools import repeat as _repeat, chain as _chain, starmap as _starmap, \ ifilter as _ifilter, imap as _imap @@ -18,9 +17,6 @@ ### OrderedDict ################################################################################ -class _Link(object): - __slots__ = 'prev', 'next', 'key', '__weakref__' - class OrderedDict(dict, MutableMapping): 'Dictionary that remembers insertion order' # An inherited dict maps keys to values. @@ -31,9 +27,7 @@ # The internal self.__map dictionary maps keys to links in a doubly linked list. # The circular doubly linked list starts and ends with a sentinel element. # The sentinel element never gets deleted (this simplifies the algorithm). - # The prev/next links are weakref proxies (to prevent circular references). - # Individual links are kept alive by the hard reference in self.__map. - # Those hard references disappear when a key is deleted from an OrderedDict. + # Each link is stored as a list of length three: [PREV, NEXT, KEY]. def __init__(self, *args, **kwds): '''Initialize an ordered dictionary. Signature is the same as for @@ -46,28 +40,21 @@ try: self.__root except AttributeError: - self.__root = root = _Link() # sentinel node for the doubly linked list - root.prev = root.next = root + self.__root = root = [None, None, None] # sentinel node + PREV, NEXT = 0, 1 + root[PREV] = root[NEXT] = root self.__map = {} self.update(*args, **kwds) - def clear(self): - 'od.clear() -> None. Remove all items from od.' - root = self.__root - root.prev = root.next = root - self.__map.clear() - dict.clear(self) - def __setitem__(self, key, value): 'od.__setitem__(i, y) <==> od[i]=y' # Setting a new item creates a new link which goes at the end of the linked # list, and the inherited dictionary is updated with the new key/value pair. if key not in self: - self.__map[key] = link = _Link() + PREV, NEXT = 0, 1 root = self.__root - last = root.prev - link.prev, link.next, link.key = last, root, key - last.next = root.prev = _proxy(link) + last = root[PREV] + last[NEXT] = root[PREV] = self.__map[key] = [last, root, key] dict.__setitem__(self, key, value) def __delitem__(self, key): @@ -75,27 +62,30 @@ # Deleting an existing item uses self.__map to find the link which is # then removed by updating the links in the predecessor and successor nodes. dict.__delitem__(self, key) + PREV, NEXT = 0, 1 link = self.__map.pop(key) - link.prev.next = link.next - link.next.prev = link.prev + link[PREV][NEXT] = link[NEXT] + link[NEXT][PREV] = link[PREV] def __iter__(self): 'od.__iter__() <==> iter(od)' # Traverse the linked list in order. + NEXT, KEY = 1, 2 root = self.__root - curr = root.next + curr = root[NEXT] while curr is not root: - yield curr.key - curr = curr.next + yield curr[KEY] + curr = curr[NEXT] def __reversed__(self): 'od.__reversed__() <==> reversed(od)' # Traverse the linked list in reverse order. + PREV, KEY = 0, 2 root = self.__root - curr = root.prev + curr = root[PREV] while curr is not root: - yield curr.key - curr = curr.prev + yield curr[KEY] + curr = curr[PREV] def __reduce__(self): 'Return state information for pickling' @@ -108,6 +98,7 @@ return (self.__class__, (items,), inst_dict) return self.__class__, (items,) + clear = MutableMapping.clear setdefault = MutableMapping.setdefault update = MutableMapping.update pop = MutableMapping.pop From python-checkins at python.org Tue Mar 9 11:36:28 2010 From: python-checkins at python.org (ronald.oussoren) Date: Tue, 9 Mar 2010 11:36:28 +0100 (CET) Subject: [Python-checkins] r78813 - in python/branches/release26-maint: Mac/Makefile.in Mac/README configure configure.in Message-ID: <20100309103628.4E214DE17@mail.python.org> Author: ronald.oussoren Date: Tue Mar 9 11:36:28 2010 New Revision: 78813 Log: Fix for issue8089: a framework build with --with-universal-archs=3-way|intel had no way to select a 32-bit executable (which is needed because not all (GUI) libraries are available in 64-bit mode) Also fixes a typo in Mac/README Modified: python/branches/release26-maint/Mac/Makefile.in python/branches/release26-maint/Mac/README python/branches/release26-maint/configure python/branches/release26-maint/configure.in Modified: python/branches/release26-maint/Mac/Makefile.in ============================================================================== --- python/branches/release26-maint/Mac/Makefile.in (original) +++ python/branches/release26-maint/Mac/Makefile.in Tue Mar 9 11:36:28 2010 @@ -150,11 +150,11 @@ -DPYTHONWEXECUTABLE='"$(APPINSTALLDIR)/Contents/MacOS/$(PYTHONFRAMEWORK)"' pythonw-32: $(srcdir)/Tools/pythonw.c Makefile - $(CC) $(LDFLAGS) -o $@ -arch i386 -arch ppc $(srcdir)/Tools/pythonw.c \ + $(CC) $(subst -arch x86_64,,$(subst -arch ppc64,,$(LDFLAGS))) -o $@ @UNIVERSAL_ARCH32_FLAGS@ $(srcdir)/Tools/pythonw.c \ -DPYTHONWEXECUTABLE='"$(APPINSTALLDIR)/Contents/MacOS/$(PYTHONFRAMEWORK)-32"' pythonw-64: $(srcdir)/Tools/pythonw.c Makefile - $(CC) $(LDFLAGS) -o $@ -arch x86_64 -arch ppc64 $(srcdir)/Tools/pythonw.c \ + $(CC) $(subst -arch i386,,$(subst -arch ppc,,$(LDFLAGS))) -o $@ @UNIVERSAL_ARCH64_FLAGS@ $(srcdir)/Tools/pythonw.c \ -DPYTHONWEXECUTABLE='"$(APPINSTALLDIR)/Contents/MacOS/$(PYTHONFRAMEWORK)-64"' install_PythonLauncher: @@ -215,8 +215,8 @@ rm "$(DESTDIR)$(APPINSTALLDIR)/Contents/Info.plist.in" install_Python4way: install_Python - lipo -extract i386 -extract ppc7400 -output "$(DESTDIR)$(APPINSTALLDIR)/Contents/MacOS/$(PYTHONFRAMEWORK)-32" "$(DESTDIR)$(APPINSTALLDIR)/Contents/MacOS/$(PYTHONFRAMEWORK)" - lipo -extract x86_64 -extract ppc64 -output "$(DESTDIR)$(APPINSTALLDIR)/Contents/MacOS/$(PYTHONFRAMEWORK)-64" "$(DESTDIR)$(APPINSTALLDIR)/Contents/MacOS/$(PYTHONFRAMEWORK)" + lipo @LIPO_32BIT_FLAGS@ -output "$(DESTDIR)$(APPINSTALLDIR)/Contents/MacOS/$(PYTHONFRAMEWORK)-32" "$(DESTDIR)$(APPINSTALLDIR)/Contents/MacOS/$(PYTHONFRAMEWORK)" + lipo @LIPO_64BIT_FLAGS@ -output "$(DESTDIR)$(APPINSTALLDIR)/Contents/MacOS/$(PYTHONFRAMEWORK)-64" "$(DESTDIR)$(APPINSTALLDIR)/Contents/MacOS/$(PYTHONFRAMEWORK)" Modified: python/branches/release26-maint/Mac/README ============================================================================== --- python/branches/release26-maint/Mac/README (original) +++ python/branches/release26-maint/Mac/README Tue Mar 9 11:36:28 2010 @@ -32,7 +32,7 @@ See the section _`Building and using a universal binary of Python on Mac OS X` for more information. -* ``--with-univeral-archs=VALUE`` +* ``--with-universal-archs=VALUE`` Specify the kind of universal binary that should be created. This option is only valid when ``--enable-universalsdk`` is specified. Modified: python/branches/release26-maint/configure ============================================================================== --- python/branches/release26-maint/configure (original) +++ python/branches/release26-maint/configure Tue Mar 9 11:36:28 2010 @@ -1,5 +1,5 @@ #! /bin/sh -# From configure.in Revision: 78781 . +# From configure.in Revision: 78805 . # Guess values for system-dependent variables and create Makefiles. # Generated by GNU Autoconf 2.61 for python 2.6. # @@ -658,6 +658,10 @@ CONFIG_ARGS UNIVERSALSDK ARCH_RUN_32BIT +LIPO_32BIT_FLAGS +LIPO_64BIT_FLAGS +UNIVERSAL_ARCH32_FLAGS +UNIVERSAL_ARCH64_FLAGS PYTHONFRAMEWORK PYTHONFRAMEWORKIDENTIFIER PYTHONFRAMEWORKDIR @@ -1922,6 +1926,10 @@ UNIVERSAL_ARCHS="32-bit" + + + + { echo "$as_me:$LINENO: checking for --with-universal-archs" >&5 echo $ECHO_N "checking for --with-universal-archs... $ECHO_C" >&6; } @@ -2001,14 +2009,16 @@ PYTHONFRAMEWORKINSTALLDIR=$PYTHONFRAMEWORKPREFIX/$PYTHONFRAMEWORKDIR FRAMEWORKINSTALLFIRST="frameworkinstallstructure" FRAMEWORKALTINSTALLFIRST="frameworkinstallstructure bininstall maninstall" - if test "$UNIVERSAL_ARCHS" = "all" - then + case "${UNIVERSAL_ARCHS}" in + all|3-way|intel) FRAMEWORKINSTALLLAST="frameworkinstallmaclib frameworkinstallapps4way frameworkinstallunixtools4way" FRAMEWORKALTINSTALLLAST="frameworkinstallmaclib frameworkinstallapps4way frameworkaltinstallunixtools4way" - else + ;; + *) FRAMEWORKINSTALLLAST="frameworkinstallmaclib frameworkinstallapps frameworkinstallunixtools" FRAMEWORKALTINSTALLLAST="frameworkinstallmaclib frameworkinstallapps frameworkaltinstallunixtools" - fi + ;; + esac if test "x${prefix}" = "xNONE" ; then FRAMEWORKUNIXTOOLSPREFIX="${ac_default_prefix}" @@ -4700,28 +4710,39 @@ # -Wno-long-double, -no-cpp-precomp, and -mno-fused-madd # used to be here, but non-Apple gcc doesn't accept them. - if test "${enable_universalsdk}"; then UNIVERSAL_ARCH_FLAGS="" if test "$UNIVERSAL_ARCHS" = "32-bit" ; then - UNIVERSAL_ARCH_FLAGS="-arch ppc -arch i386" ARCH_RUN_32BIT="" + UNIVERSAL_ARCH_FLAGS="-arch ppc -arch i386" elif test "$UNIVERSAL_ARCHS" = "64-bit" ; then - UNIVERSAL_ARCH_FLAGS="-arch ppc64 -arch x86_64" ARCH_RUN_32BIT="true" + UNIVERSAL_ARCH_FLAGS="-arch ppc64 -arch x86_64" elif test "$UNIVERSAL_ARCHS" = "all" ; then - UNIVERSAL_ARCH_FLAGS="-arch i386 -arch ppc -arch ppc64 -arch x86_64" ARCH_RUN_32BIT="/usr/bin/arch -i386 -ppc" + UNIVERSAL_ARCH_FLAGS="-arch i386 -arch ppc -arch ppc64 -arch x86_64" + UNIVERSAL_ARCH32_FLAGS="-arch i386 -arch ppc" + UNIVERSAL_ARCH64_FLAGS="-arch x86_64 -arch x86_64" + LIPO_32BIT_FLAGS="-extract i386 -extract ppc7400" + LIPO_64BIT_FLAGS="-extract x86_64 -extract ppc64" elif test "$UNIVERSAL_ARCHS" = "intel" ; then - UNIVERSAL_ARCH_FLAGS="-arch i386 -arch x86_64" ARCH_RUN_32BIT="/usr/bin/arch -i386" + UNIVERSAL_ARCH_FLAGS="-arch i386 -arch x86_64" + UNIVERSAL_ARCH32_FLAGS="-arch i386" + UNIVERSAL_ARCH64_FLAGS="-arch x86_64" + LIPO_32BIT_FLAGS="-extract i386" + LIPO_64BIT_FLAGS="-extract x86_64" elif test "$UNIVERSAL_ARCHS" = "3-way" ; then - UNIVERSAL_ARCH_FLAGS="-arch i386 -arch ppc -arch x86_64" ARCH_RUN_32BIT="/usr/bin/arch -i386 -ppc" + UNIVERSAL_ARCH_FLAGS="-arch i386 -arch ppc -arch x86_64" + UNIVERSAL_ARCH32_FLAGS="-arch i386 -arch ppc" + UNIVERSAL_ARCH64_FLAGS="-arch x86_64" + LIPO_32BIT_FLAGS="-extract i386 -extract ppc7400" + LIPO_64BIT_FLAGS="-extract x86_64" else { { echo "$as_me:$LINENO: error: proper usage is --with-universal-arch=32-bit|64-bit|all|intel|3-way" >&5 @@ -25849,6 +25870,10 @@ CONFIG_ARGS!$CONFIG_ARGS$ac_delim UNIVERSALSDK!$UNIVERSALSDK$ac_delim ARCH_RUN_32BIT!$ARCH_RUN_32BIT$ac_delim +LIPO_32BIT_FLAGS!$LIPO_32BIT_FLAGS$ac_delim +LIPO_64BIT_FLAGS!$LIPO_64BIT_FLAGS$ac_delim +UNIVERSAL_ARCH32_FLAGS!$UNIVERSAL_ARCH32_FLAGS$ac_delim +UNIVERSAL_ARCH64_FLAGS!$UNIVERSAL_ARCH64_FLAGS$ac_delim PYTHONFRAMEWORK!$PYTHONFRAMEWORK$ac_delim PYTHONFRAMEWORKIDENTIFIER!$PYTHONFRAMEWORKIDENTIFIER$ac_delim PYTHONFRAMEWORKDIR!$PYTHONFRAMEWORKDIR$ac_delim @@ -25900,10 +25925,6 @@ LIBTOOL_CRUFT!$LIBTOOL_CRUFT$ac_delim SO!$SO$ac_delim LDSHARED!$LDSHARED$ac_delim -BLDSHARED!$BLDSHARED$ac_delim -CCSHARED!$CCSHARED$ac_delim -LINKFORSHARED!$LINKFORSHARED$ac_delim -CFLAGSFORSHARED!$CFLAGSFORSHARED$ac_delim _ACEOF if test `sed -n "s/.*$ac_delim\$/X/p" conf$$subs.sed | grep -c X` = 97; then @@ -25945,6 +25966,10 @@ ac_delim='%!_!# ' for ac_last_try in false false false false false :; do cat >conf$$subs.sed <<_ACEOF +BLDSHARED!$BLDSHARED$ac_delim +CCSHARED!$CCSHARED$ac_delim +LINKFORSHARED!$LINKFORSHARED$ac_delim +CFLAGSFORSHARED!$CFLAGSFORSHARED$ac_delim SHLIBS!$SHLIBS$ac_delim USE_SIGNAL_MODULE!$USE_SIGNAL_MODULE$ac_delim SIGNAL_OBJS!$SIGNAL_OBJS$ac_delim @@ -25969,7 +25994,7 @@ LTLIBOBJS!$LTLIBOBJS$ac_delim _ACEOF - if test `sed -n "s/.*$ac_delim\$/X/p" conf$$subs.sed | grep -c X` = 22; then + if test `sed -n "s/.*$ac_delim\$/X/p" conf$$subs.sed | grep -c X` = 26; then break elif $ac_last_try; then { { echo "$as_me:$LINENO: error: could not make $CONFIG_STATUS" >&5 Modified: python/branches/release26-maint/configure.in ============================================================================== --- python/branches/release26-maint/configure.in (original) +++ python/branches/release26-maint/configure.in Tue Mar 9 11:36:28 2010 @@ -111,6 +111,10 @@ AC_SUBST(ARCH_RUN_32BIT) UNIVERSAL_ARCHS="32-bit" +AC_SUBST(LIPO_32BIT_FLAGS) +AC_SUBST(LIPO_64BIT_FLAGS) +AC_SUBST(UNIVERSAL_ARCH32_FLAGS) +AC_SUBST(UNIVERSAL_ARCH64_FLAGS) AC_MSG_CHECKING(for --with-universal-archs) AC_ARG_WITH(universal-archs, AC_HELP_STRING(--with-universal-archs=ARCH, select architectures for universal build ("32-bit", "64-bit", "3-way", "intel" or "all")), @@ -176,14 +180,16 @@ PYTHONFRAMEWORKINSTALLDIR=$PYTHONFRAMEWORKPREFIX/$PYTHONFRAMEWORKDIR FRAMEWORKINSTALLFIRST="frameworkinstallstructure" FRAMEWORKALTINSTALLFIRST="frameworkinstallstructure bininstall maninstall" - if test "$UNIVERSAL_ARCHS" = "all" - then + case "${UNIVERSAL_ARCHS}" in + all|3-way|intel) FRAMEWORKINSTALLLAST="frameworkinstallmaclib frameworkinstallapps4way frameworkinstallunixtools4way" FRAMEWORKALTINSTALLLAST="frameworkinstallmaclib frameworkinstallapps4way frameworkaltinstallunixtools4way" - else + ;; + *) FRAMEWORKINSTALLLAST="frameworkinstallmaclib frameworkinstallapps frameworkinstallunixtools" FRAMEWORKALTINSTALLLAST="frameworkinstallmaclib frameworkinstallapps frameworkaltinstallunixtools" - fi + ;; + esac if test "x${prefix}" = "xNONE" ; then FRAMEWORKUNIXTOOLSPREFIX="${ac_default_prefix}" @@ -947,28 +953,39 @@ # -Wno-long-double, -no-cpp-precomp, and -mno-fused-madd # used to be here, but non-Apple gcc doesn't accept them. - if test "${enable_universalsdk}"; then UNIVERSAL_ARCH_FLAGS="" if test "$UNIVERSAL_ARCHS" = "32-bit" ; then - UNIVERSAL_ARCH_FLAGS="-arch ppc -arch i386" ARCH_RUN_32BIT="" + UNIVERSAL_ARCH_FLAGS="-arch ppc -arch i386" elif test "$UNIVERSAL_ARCHS" = "64-bit" ; then - UNIVERSAL_ARCH_FLAGS="-arch ppc64 -arch x86_64" ARCH_RUN_32BIT="true" + UNIVERSAL_ARCH_FLAGS="-arch ppc64 -arch x86_64" elif test "$UNIVERSAL_ARCHS" = "all" ; then - UNIVERSAL_ARCH_FLAGS="-arch i386 -arch ppc -arch ppc64 -arch x86_64" ARCH_RUN_32BIT="/usr/bin/arch -i386 -ppc" + UNIVERSAL_ARCH_FLAGS="-arch i386 -arch ppc -arch ppc64 -arch x86_64" + UNIVERSAL_ARCH32_FLAGS="-arch i386 -arch ppc" + UNIVERSAL_ARCH64_FLAGS="-arch x86_64 -arch x86_64" + LIPO_32BIT_FLAGS="-extract i386 -extract ppc7400" + LIPO_64BIT_FLAGS="-extract x86_64 -extract ppc64" elif test "$UNIVERSAL_ARCHS" = "intel" ; then - UNIVERSAL_ARCH_FLAGS="-arch i386 -arch x86_64" ARCH_RUN_32BIT="/usr/bin/arch -i386" + UNIVERSAL_ARCH_FLAGS="-arch i386 -arch x86_64" + UNIVERSAL_ARCH32_FLAGS="-arch i386" + UNIVERSAL_ARCH64_FLAGS="-arch x86_64" + LIPO_32BIT_FLAGS="-extract i386" + LIPO_64BIT_FLAGS="-extract x86_64" elif test "$UNIVERSAL_ARCHS" = "3-way" ; then - UNIVERSAL_ARCH_FLAGS="-arch i386 -arch ppc -arch x86_64" ARCH_RUN_32BIT="/usr/bin/arch -i386 -ppc" + UNIVERSAL_ARCH_FLAGS="-arch i386 -arch ppc -arch x86_64" + UNIVERSAL_ARCH32_FLAGS="-arch i386 -arch ppc" + UNIVERSAL_ARCH64_FLAGS="-arch x86_64" + LIPO_32BIT_FLAGS="-extract i386 -extract ppc7400" + LIPO_64BIT_FLAGS="-extract x86_64" else AC_MSG_ERROR([proper usage is --with-universal-arch=32-bit|64-bit|all|intel|3-way]) From python-checkins at python.org Tue Mar 9 12:29:10 2010 From: python-checkins at python.org (raymond.hettinger) Date: Tue, 9 Mar 2010 12:29:10 +0100 (CET) Subject: [Python-checkins] r78814 - python/trunk/Lib/collections.py Message-ID: <20100309112910.5AC53DE47@mail.python.org> Author: raymond.hettinger Date: Tue Mar 9 12:29:10 2010 New Revision: 78814 Log: Improve code clarity a bit. Modified: python/trunk/Lib/collections.py Modified: python/trunk/Lib/collections.py ============================================================================== --- python/trunk/Lib/collections.py (original) +++ python/trunk/Lib/collections.py Tue Mar 9 12:29:10 2010 @@ -41,7 +41,8 @@ self.__root except AttributeError: self.__root = root = [None, None, None] # sentinel node - PREV, NEXT = 0, 1 + PREV = 0 + NEXT = 1 root[PREV] = root[NEXT] = root self.__map = {} self.update(*args, **kwds) @@ -51,7 +52,8 @@ # Setting a new item creates a new link which goes at the end of the linked # list, and the inherited dictionary is updated with the new key/value pair. if key not in self: - PREV, NEXT = 0, 1 + PREV = 0 + NEXT = 1 root = self.__root last = root[PREV] last[NEXT] = root[PREV] = self.__map[key] = [last, root, key] @@ -62,7 +64,8 @@ # Deleting an existing item uses self.__map to find the link which is # then removed by updating the links in the predecessor and successor nodes. dict.__delitem__(self, key) - PREV, NEXT = 0, 1 + PREV = 0 + NEXT = 1 link = self.__map.pop(key) link[PREV][NEXT] = link[NEXT] link[NEXT][PREV] = link[PREV] @@ -70,7 +73,8 @@ def __iter__(self): 'od.__iter__() <==> iter(od)' # Traverse the linked list in order. - NEXT, KEY = 1, 2 + NEXT = 1 + KEY = 2 root = self.__root curr = root[NEXT] while curr is not root: @@ -80,7 +84,8 @@ def __reversed__(self): 'od.__reversed__() <==> reversed(od)' # Traverse the linked list in reverse order. - PREV, KEY = 0, 2 + PREV = 0 + KEY = 2 root = self.__root curr = root[PREV] while curr is not root: From python-checkins at python.org Tue Mar 9 20:57:02 2010 From: python-checkins at python.org (florent.xicluna) Date: Tue, 9 Mar 2010 20:57:02 +0100 (CET) Subject: [Python-checkins] r78815 - in python/trunk/Lib/test: test_py3kwarn.py test_support.py Message-ID: <20100309195702.26EA1DD8E@mail.python.org> Author: florent.xicluna Date: Tue Mar 9 20:57:01 2010 New Revision: 78815 Log: #7772: Fix test_py3kwarn. Now the test suite could pass with "-3" flag. Modified: python/trunk/Lib/test/test_py3kwarn.py python/trunk/Lib/test/test_support.py Modified: python/trunk/Lib/test/test_py3kwarn.py ============================================================================== --- python/trunk/Lib/test/test_py3kwarn.py (original) +++ python/trunk/Lib/test/test_py3kwarn.py Tue Mar 9 20:57:01 2010 @@ -3,11 +3,26 @@ from test.test_support import check_warnings, CleanImport, run_unittest import warnings -from contextlib import nested - if not sys.py3kwarning: raise unittest.SkipTest('%s must be run with the -3 flag' % __name__) +try: + from test.test_support import __warningregistry__ as _registry +except ImportError: + def check_deprecated_module(module_name): + return False +else: + past_warnings = _registry.keys() + del _registry + def check_deprecated_module(module_name): + """Lookup the past warnings for module already loaded using + test_support.import_module(..., deprecated=True) + """ + return any(module_name in msg and ' removed' in msg + and issubclass(cls, DeprecationWarning) + and (' module' in msg or ' package' in msg) + for (msg, cls, line) in past_warnings) + def reset_module_registry(module): try: registry = module.__warningregistry__ @@ -341,11 +356,10 @@ def check_removal(self, module_name, optional=False): """Make sure the specified module, when imported, raises a DeprecationWarning and specifies itself in the message.""" - with nested(CleanImport(module_name), warnings.catch_warnings()): - # XXX: This is not quite enough for extension modules - those - # won't rerun their init code even with CleanImport. - # You can see this easily by running the whole test suite with -3 - warnings.filterwarnings("error", ".+ removed", + with CleanImport(module_name), warnings.catch_warnings(): + warnings.filterwarnings("error", ".+ (module|package) .+ removed", + DeprecationWarning, __name__) + warnings.filterwarnings("error", ".+ removed .+ (module|package)", DeprecationWarning, __name__) try: __import__(module_name, level=0) @@ -358,8 +372,11 @@ self.fail("Non-optional module {0} raised an " "ImportError.".format(module_name)) else: - self.fail("DeprecationWarning not raised for {0}" - .format(module_name)) + # For extension modules, check the __warningregistry__. + # They won't rerun their init code even with CleanImport. + if not check_deprecated_module(module_name): + self.fail("DeprecationWarning not raised for {0}" + .format(module_name)) def test_platform_independent_removals(self): # Make sure that the modules that are available on all platforms raise @@ -390,7 +407,7 @@ def test_reduce_move(self): from operator import add # reduce tests may have already triggered this warning - reset_module_registry(unittest) + reset_module_registry(unittest.case) with warnings.catch_warnings(): warnings.filterwarnings("error", "reduce") self.assertRaises(DeprecationWarning, reduce, add, range(10)) @@ -407,10 +424,8 @@ def test_main(): - with check_warnings(): - warnings.simplefilter("always") - run_unittest(TestPy3KWarnings, - TestStdlibRemovals) + run_unittest(TestPy3KWarnings, + TestStdlibRemovals) if __name__ == '__main__': test_main() Modified: python/trunk/Lib/test/test_support.py ============================================================================== --- python/trunk/Lib/test/test_support.py (original) +++ python/trunk/Lib/test/test_support.py Tue Mar 9 20:57:01 2010 @@ -519,10 +519,10 @@ if registry: registry.clear() with warnings.catch_warnings(record=True) as w: - # Disable filters, to record all warnings. Because - # test_warnings swap the module, we need to look up - # in the sys.modules dictionary. - sys.modules['warnings'].resetwarnings() + # Set filter "always" to record all warnings. Because + # test_warnings swap the module, we need to look up in + # the sys.modules dictionary. + sys.modules['warnings'].simplefilter("always") yield WarningsRecorder(w) # Filter the recorded warnings reraise = [warning.message for warning in w] From python-checkins at python.org Tue Mar 9 22:33:59 2010 From: python-checkins at python.org (ronald.oussoren) Date: Tue, 9 Mar 2010 22:33:59 +0100 (CET) Subject: [Python-checkins] r78816 - in python/branches/release26-maint: configure configure.in Message-ID: <20100309213359.61129E0C6@mail.python.org> Author: ronald.oussoren Date: Tue Mar 9 22:33:59 2010 New Revision: 78816 Log: Fix copy&paste error in fix for Issue8089 Modified: python/branches/release26-maint/configure python/branches/release26-maint/configure.in Modified: python/branches/release26-maint/configure ============================================================================== --- python/branches/release26-maint/configure (original) +++ python/branches/release26-maint/configure Tue Mar 9 22:33:59 2010 @@ -1,5 +1,5 @@ #! /bin/sh -# From configure.in Revision: 78805 . +# From configure.in Revision: 78813 . # Guess values for system-dependent variables and create Makefiles. # Generated by GNU Autoconf 2.61 for python 2.6. # @@ -4724,7 +4724,7 @@ ARCH_RUN_32BIT="/usr/bin/arch -i386 -ppc" UNIVERSAL_ARCH_FLAGS="-arch i386 -arch ppc -arch ppc64 -arch x86_64" UNIVERSAL_ARCH32_FLAGS="-arch i386 -arch ppc" - UNIVERSAL_ARCH64_FLAGS="-arch x86_64 -arch x86_64" + UNIVERSAL_ARCH64_FLAGS="-arch x86_64 -arch ppc64" LIPO_32BIT_FLAGS="-extract i386 -extract ppc7400" LIPO_64BIT_FLAGS="-extract x86_64 -extract ppc64" Modified: python/branches/release26-maint/configure.in ============================================================================== --- python/branches/release26-maint/configure.in (original) +++ python/branches/release26-maint/configure.in Tue Mar 9 22:33:59 2010 @@ -967,7 +967,7 @@ ARCH_RUN_32BIT="/usr/bin/arch -i386 -ppc" UNIVERSAL_ARCH_FLAGS="-arch i386 -arch ppc -arch ppc64 -arch x86_64" UNIVERSAL_ARCH32_FLAGS="-arch i386 -arch ppc" - UNIVERSAL_ARCH64_FLAGS="-arch x86_64 -arch x86_64" + UNIVERSAL_ARCH64_FLAGS="-arch x86_64 -arch ppc64" LIPO_32BIT_FLAGS="-extract i386 -extract ppc7400" LIPO_64BIT_FLAGS="-extract x86_64 -extract ppc64" From python-checkins at python.org Tue Mar 9 22:43:36 2010 From: python-checkins at python.org (benjamin.peterson) Date: Tue, 9 Mar 2010 22:43:36 +0100 (CET) Subject: [Python-checkins] r78817 - in python/trunk: configure configure.in Message-ID: <20100309214336.58499C608@mail.python.org> Author: benjamin.peterson Date: Tue Mar 9 22:43:36 2010 New Revision: 78817 Log: handle an empty OPT variable correctly #8100 Modified: python/trunk/configure python/trunk/configure.in Modified: python/trunk/configure ============================================================================== --- python/trunk/configure (original) +++ python/trunk/configure Tue Mar 9 22:43:36 2010 @@ -4596,7 +4596,7 @@ # tweak OPT based on compiler and platform, only if the user didn't set # it on the command line -if test -z "$OPT" +if test "${OPT-unset}" == "unset" then case $GCC in yes) Modified: python/trunk/configure.in ============================================================================== --- python/trunk/configure.in (original) +++ python/trunk/configure.in Tue Mar 9 22:43:36 2010 @@ -881,7 +881,7 @@ # tweak OPT based on compiler and platform, only if the user didn't set # it on the command line AC_SUBST(OPT) -if test -z "$OPT" +if test "${OPT-unset}" == "unset" then case $GCC in yes) From python-checkins at python.org Tue Mar 9 22:46:49 2010 From: python-checkins at python.org (benjamin.peterson) Date: Tue, 9 Mar 2010 22:46:49 +0100 (CET) Subject: [Python-checkins] r78818 - in python/branches/py3k: configure configure.in Message-ID: <20100309214649.E4786DE55@mail.python.org> Author: benjamin.peterson Date: Tue Mar 9 22:46:49 2010 New Revision: 78818 Log: Merged revisions 78817 via svnmerge from svn+ssh://pythondev at svn.python.org/python/trunk ........ r78817 | benjamin.peterson | 2010-03-09 15:43:36 -0600 (Tue, 09 Mar 2010) | 1 line handle an empty OPT variable correctly #8100 ........ Modified: python/branches/py3k/ (props changed) python/branches/py3k/configure python/branches/py3k/configure.in Modified: python/branches/py3k/configure ============================================================================== --- python/branches/py3k/configure (original) +++ python/branches/py3k/configure Tue Mar 9 22:46:49 2010 @@ -4521,7 +4521,7 @@ # tweak OPT based on compiler and platform, only if the user didn't set # it on the command line -if test -z "$OPT" +if test "${OPT-unset}" == "unset" then case $GCC in yes) Modified: python/branches/py3k/configure.in ============================================================================== --- python/branches/py3k/configure.in (original) +++ python/branches/py3k/configure.in Tue Mar 9 22:46:49 2010 @@ -819,7 +819,7 @@ # tweak OPT based on compiler and platform, only if the user didn't set # it on the command line AC_SUBST(OPT) -if test -z "$OPT" +if test "${OPT-unset}" == "unset" then case $GCC in yes) From python-checkins at python.org Tue Mar 9 22:46:54 2010 From: python-checkins at python.org (benjamin.peterson) Date: Tue, 9 Mar 2010 22:46:54 +0100 (CET) Subject: [Python-checkins] r78819 - in python/trunk: configure configure.in Message-ID: <20100309214654.F0931DCF0@mail.python.org> Author: benjamin.peterson Date: Tue Mar 9 22:46:54 2010 New Revision: 78819 Log: fix ugly configure output (follow up to #6943) Modified: python/trunk/configure python/trunk/configure.in Modified: python/trunk/configure ============================================================================== --- python/trunk/configure (original) +++ python/trunk/configure Tue Mar 9 22:46:54 2010 @@ -1,5 +1,5 @@ #! /bin/sh -# From configure.in Revision: 78467 . +# From configure.in Revision: 78817 . # Guess values for system-dependent variables and create Makefiles. # Generated by GNU Autoconf 2.61 for python 2.7. # @@ -15610,31 +15610,7 @@ fi -# Check for use of the system expat library -{ echo "$as_me:$LINENO: checking for --with-system-expat" >&5 -echo $ECHO_N "checking for --with-system-expat... $ECHO_C" >&6; } - -# Check whether --with-system_expat was given. -if test "${with_system_expat+set}" = set; then - withval=$with_system_expat; -fi - - -{ echo "$as_me:$LINENO: result: $with_system_expat" >&5 -echo "${ECHO_T}$with_system_expat" >&6; } - -# Check for use of the system libffi library -{ echo "$as_me:$LINENO: checking for --with-system-ffi" >&5 -echo $ECHO_N "checking for --with-system-ffi... $ECHO_C" >&6; } - -# Check whether --with-system_ffi was given. -if test "${with_system_ffi+set}" = set; then - withval=$with_system_ffi; -fi - - -if test "$with_system_ffi" = "yes"; then - if test -n "$ac_tool_prefix"; then +if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}pkg-config", so it can be a program name with args. set dummy ${ac_tool_prefix}pkg-config; ac_word=$2 { echo "$as_me:$LINENO: checking for $ac_word" >&5 @@ -15736,6 +15712,31 @@ PKG_CONFIG="$ac_cv_path_PKG_CONFIG" fi + +# Check for use of the system expat library +{ echo "$as_me:$LINENO: checking for --with-system-expat" >&5 +echo $ECHO_N "checking for --with-system-expat... $ECHO_C" >&6; } + +# Check whether --with-system_expat was given. +if test "${with_system_expat+set}" = set; then + withval=$with_system_expat; +fi + + +{ echo "$as_me:$LINENO: result: $with_system_expat" >&5 +echo "${ECHO_T}$with_system_expat" >&6; } + +# Check for use of the system libffi library +{ echo "$as_me:$LINENO: checking for --with-system-ffi" >&5 +echo $ECHO_N "checking for --with-system-ffi... $ECHO_C" >&6; } + +# Check whether --with-system_ffi was given. +if test "${with_system_ffi+set}" = set; then + withval=$with_system_ffi; +fi + + +if test "$with_system_ffi" = "yes" && test -n "$PKG_CONFIG"; then LIBFFI_INCLUDEDIR="`"$PKG_CONFIG" libffi --cflags-only-I 2>/dev/null | sed -e 's/^-I//;s/ *$//'`" else LIBFFI_INCLUDEDIR="" Modified: python/trunk/configure.in ============================================================================== --- python/trunk/configure.in (original) +++ python/trunk/configure.in Tue Mar 9 22:46:54 2010 @@ -2039,6 +2039,8 @@ ], [AC_MSG_RESULT(no)]) +AC_PATH_TOOL([PKG_CONFIG], [pkg-config]) + # Check for use of the system expat library AC_MSG_CHECKING(for --with-system-expat) AC_ARG_WITH(system_expat, @@ -2051,8 +2053,7 @@ AC_ARG_WITH(system_ffi, AC_HELP_STRING(--with-system-ffi, build _ctypes module using an installed ffi library)) -if test "$with_system_ffi" = "yes"; then - AC_PATH_TOOL([PKG_CONFIG], [pkg-config]) +if test "$with_system_ffi" = "yes" && test -n "$PKG_CONFIG"; then LIBFFI_INCLUDEDIR="`"$PKG_CONFIG" libffi --cflags-only-I 2>/dev/null | sed -e 's/^-I//;s/ *$//'`" else LIBFFI_INCLUDEDIR="" From python-checkins at python.org Tue Mar 9 22:47:29 2010 From: python-checkins at python.org (benjamin.peterson) Date: Tue, 9 Mar 2010 22:47:29 +0100 (CET) Subject: [Python-checkins] r78820 - in python/branches/release26-maint: configure configure.in Message-ID: <20100309214729.280BAE2BA@mail.python.org> Author: benjamin.peterson Date: Tue Mar 9 22:47:28 2010 New Revision: 78820 Log: Merged revisions 78817 via svnmerge from svn+ssh://pythondev at svn.python.org/python/trunk ........ r78817 | benjamin.peterson | 2010-03-09 15:43:36 -0600 (Tue, 09 Mar 2010) | 1 line handle an empty OPT variable correctly #8100 ........ Modified: python/branches/release26-maint/ (props changed) python/branches/release26-maint/configure python/branches/release26-maint/configure.in Modified: python/branches/release26-maint/configure ============================================================================== --- python/branches/release26-maint/configure (original) +++ python/branches/release26-maint/configure Tue Mar 9 22:47:28 2010 @@ -4578,7 +4578,7 @@ # tweak OPT based on compiler and platform, only if the user didn't set # it on the command line -if test -z "$OPT" +if test "${OPT-unset}" == "unset" then case $GCC in yes) Modified: python/branches/release26-maint/configure.in ============================================================================== --- python/branches/release26-maint/configure.in (original) +++ python/branches/release26-maint/configure.in Tue Mar 9 22:47:28 2010 @@ -863,7 +863,7 @@ # tweak OPT based on compiler and platform, only if the user didn't set # it on the command line AC_SUBST(OPT) -if test -z "$OPT" +if test "${OPT-unset}" == "unset" then case $GCC in yes) From python-checkins at python.org Tue Mar 9 22:49:52 2010 From: python-checkins at python.org (benjamin.peterson) Date: Tue, 9 Mar 2010 22:49:52 +0100 (CET) Subject: [Python-checkins] r78821 - in python/branches/py3k: configure configure.in Message-ID: <20100309214952.51F6CDB83@mail.python.org> Author: benjamin.peterson Date: Tue Mar 9 22:49:52 2010 New Revision: 78821 Log: Merged revisions 78819 via svnmerge from svn+ssh://pythondev at svn.python.org/python/trunk ........ r78819 | benjamin.peterson | 2010-03-09 15:46:54 -0600 (Tue, 09 Mar 2010) | 1 line fix ugly configure output (follow up to #6943) ........ Modified: python/branches/py3k/ (props changed) python/branches/py3k/configure python/branches/py3k/configure.in Modified: python/branches/py3k/configure ============================================================================== --- python/branches/py3k/configure (original) +++ python/branches/py3k/configure Tue Mar 9 22:49:52 2010 @@ -1,5 +1,5 @@ #! /bin/sh -# From configure.in Revision: 78782 . +# From configure.in Revision: 78818 . # Guess values for system-dependent variables and create Makefiles. # Generated by GNU Autoconf 2.61 for python 3.2. # @@ -3831,7 +3831,7 @@ { echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6; } fi -rm -f -r conftest* +rm -f conftest* @@ -5406,7 +5406,7 @@ else ac_cv_header_stdc=no fi -rm -f -r conftest* +rm -f conftest* fi @@ -5427,7 +5427,7 @@ else ac_cv_header_stdc=no fi -rm -f -r conftest* +rm -f conftest* fi @@ -6527,7 +6527,7 @@ fi -rm -f -r conftest* +rm -f conftest* { echo "$as_me:$LINENO: result: $was_it_defined" >&5 echo "${ECHO_T}$was_it_defined" >&6; } @@ -7057,7 +7057,7 @@ else ac_cv_type_uid_t=no fi -rm -f -r conftest* +rm -f conftest* fi { echo "$as_me:$LINENO: result: $ac_cv_type_uid_t" >&5 @@ -15398,31 +15398,7 @@ fi -# Check for use of the system expat library -{ echo "$as_me:$LINENO: checking for --with-system-expat" >&5 -echo $ECHO_N "checking for --with-system-expat... $ECHO_C" >&6; } - -# Check whether --with-system_expat was given. -if test "${with_system_expat+set}" = set; then - withval=$with_system_expat; -fi - - -{ echo "$as_me:$LINENO: result: $with_system_expat" >&5 -echo "${ECHO_T}$with_system_expat" >&6; } - -# Check for use of the system libffi library -{ echo "$as_me:$LINENO: checking for --with-system-ffi" >&5 -echo $ECHO_N "checking for --with-system-ffi... $ECHO_C" >&6; } - -# Check whether --with-system_ffi was given. -if test "${with_system_ffi+set}" = set; then - withval=$with_system_ffi; -fi - - -if test "$with_system_ffi" = "yes"; then - if test -n "$ac_tool_prefix"; then +if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}pkg-config", so it can be a program name with args. set dummy ${ac_tool_prefix}pkg-config; ac_word=$2 { echo "$as_me:$LINENO: checking for $ac_word" >&5 @@ -15524,6 +15500,31 @@ PKG_CONFIG="$ac_cv_path_PKG_CONFIG" fi + +# Check for use of the system expat library +{ echo "$as_me:$LINENO: checking for --with-system-expat" >&5 +echo $ECHO_N "checking for --with-system-expat... $ECHO_C" >&6; } + +# Check whether --with-system_expat was given. +if test "${with_system_expat+set}" = set; then + withval=$with_system_expat; +fi + + +{ echo "$as_me:$LINENO: result: $with_system_expat" >&5 +echo "${ECHO_T}$with_system_expat" >&6; } + +# Check for use of the system libffi library +{ echo "$as_me:$LINENO: checking for --with-system-ffi" >&5 +echo $ECHO_N "checking for --with-system-ffi... $ECHO_C" >&6; } + +# Check whether --with-system_ffi was given. +if test "${with_system_ffi+set}" = set; then + withval=$with_system_ffi; +fi + + +if test "$with_system_ffi" = "yes" && test -n "$PKG_CONFIG"; then LIBFFI_INCLUDEDIR="`"$PKG_CONFIG" libffi --cflags-only-I 2>/dev/null | sed -e 's/^-I//;s/ *$//'`" else LIBFFI_INCLUDEDIR="" @@ -15726,7 +15727,7 @@ else unistd_defines_pthreads=no fi -rm -f -r conftest* +rm -f conftest* { echo "$as_me:$LINENO: result: $unistd_defines_pthreads" >&5 echo "${ECHO_T}$unistd_defines_pthreads" >&6; } @@ -17024,7 +17025,7 @@ $EGREP "yes" >/dev/null 2>&1; then ipv6type=$i fi -rm -f -r conftest* +rm -f conftest* ;; kame) @@ -17047,7 +17048,7 @@ ipv6libdir=/usr/local/v6/lib ipv6trylibc=yes fi -rm -f -r conftest* +rm -f conftest* ;; linux-glibc) @@ -17068,7 +17069,7 @@ ipv6type=$i; ipv6trylibc=yes fi -rm -f -r conftest* +rm -f conftest* ;; linux-inet6) @@ -17106,7 +17107,7 @@ ipv6lib=inet6; ipv6libdir=/usr/local/v6/lib fi -rm -f -r conftest* +rm -f conftest* ;; v6d) @@ -17129,7 +17130,7 @@ ipv6libdir=/usr/local/v6/lib; BASECFLAGS="-I/usr/local/v6/include $BASECFLAGS" fi -rm -f -r conftest* +rm -f conftest* ;; zeta) @@ -17151,7 +17152,7 @@ ipv6lib=inet6; ipv6libdir=/usr/local/v6/lib fi -rm -f -r conftest* +rm -f conftest* ;; esac @@ -25666,7 +25667,7 @@ _ACEOF fi -rm -f -r conftest* +rm -f conftest* cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ @@ -25685,7 +25686,7 @@ _ACEOF fi -rm -f -r conftest* +rm -f conftest* fi @@ -25955,7 +25956,7 @@ _ACEOF fi -rm -f -r conftest* +rm -f conftest* fi Modified: python/branches/py3k/configure.in ============================================================================== --- python/branches/py3k/configure.in (original) +++ python/branches/py3k/configure.in Tue Mar 9 22:49:52 2010 @@ -1914,6 +1914,8 @@ ], [AC_MSG_RESULT(no)]) +AC_PATH_TOOL([PKG_CONFIG], [pkg-config]) + # Check for use of the system expat library AC_MSG_CHECKING(for --with-system-expat) AC_ARG_WITH(system_expat, @@ -1926,8 +1928,7 @@ AC_ARG_WITH(system_ffi, AC_HELP_STRING(--with-system-ffi, build _ctypes module using an installed ffi library)) -if test "$with_system_ffi" = "yes"; then - AC_PATH_TOOL([PKG_CONFIG], [pkg-config]) +if test "$with_system_ffi" = "yes" && test -n "$PKG_CONFIG"; then LIBFFI_INCLUDEDIR="`"$PKG_CONFIG" libffi --cflags-only-I 2>/dev/null | sed -e 's/^-I//;s/ *$//'`" else LIBFFI_INCLUDEDIR="" From python-checkins at python.org Tue Mar 9 23:31:52 2010 From: python-checkins at python.org (barry.warsaw) Date: Tue, 9 Mar 2010 23:31:52 +0100 (CET) Subject: [Python-checkins] r78822 - in python/branches/release26-maint: Include/patchlevel.h Lib/distutils/__init__.py Lib/idlelib/idlever.py Lib/pydoc_topics.py Misc/NEWS Misc/RPM/python-2.6.spec README Message-ID: <20100309223152.EED1CDE78@mail.python.org> Author: barry.warsaw Date: Tue Mar 9 23:31:52 2010 New Revision: 78822 Log: Bumping to 2.6.5rc2 Modified: python/branches/release26-maint/Include/patchlevel.h python/branches/release26-maint/Lib/distutils/__init__.py python/branches/release26-maint/Lib/idlelib/idlever.py python/branches/release26-maint/Lib/pydoc_topics.py python/branches/release26-maint/Misc/NEWS python/branches/release26-maint/Misc/RPM/python-2.6.spec python/branches/release26-maint/README Modified: python/branches/release26-maint/Include/patchlevel.h ============================================================================== --- python/branches/release26-maint/Include/patchlevel.h (original) +++ python/branches/release26-maint/Include/patchlevel.h Tue Mar 9 23:31:52 2010 @@ -24,10 +24,10 @@ #define PY_MINOR_VERSION 6 #define PY_MICRO_VERSION 5 #define PY_RELEASE_LEVEL PY_RELEASE_LEVEL_GAMMA -#define PY_RELEASE_SERIAL 1 +#define PY_RELEASE_SERIAL 2 /* Version as a string */ -#define PY_VERSION "2.6.5rc1+" +#define PY_VERSION "2.6.5rc2" /*--end constants--*/ /* Subversion Revision number of this file (not of the repository) */ Modified: python/branches/release26-maint/Lib/distutils/__init__.py ============================================================================== --- python/branches/release26-maint/Lib/distutils/__init__.py (original) +++ python/branches/release26-maint/Lib/distutils/__init__.py Tue Mar 9 23:31:52 2010 @@ -22,5 +22,5 @@ # #--start constants-- -__version__ = "2.6.5rc1" +__version__ = "2.6.5rc2" #--end constants-- Modified: python/branches/release26-maint/Lib/idlelib/idlever.py ============================================================================== --- python/branches/release26-maint/Lib/idlelib/idlever.py (original) +++ python/branches/release26-maint/Lib/idlelib/idlever.py Tue Mar 9 23:31:52 2010 @@ -1 +1 @@ -IDLE_VERSION = "2.6.5rc1" +IDLE_VERSION = "2.6.5rc2" Modified: python/branches/release26-maint/Lib/pydoc_topics.py ============================================================================== --- python/branches/release26-maint/Lib/pydoc_topics.py (original) +++ python/branches/release26-maint/Lib/pydoc_topics.py Tue Mar 9 23:31:52 2010 @@ -1,4 +1,4 @@ -# Autogenerated by Sphinx on Mon Mar 1 17:02:30 2010 +# Autogenerated by Sphinx on Tue Mar 9 17:06:31 2010 topics = {'assert': u'\nThe ``assert`` statement\n************************\n\nAssert statements are a convenient way to insert debugging assertions\ninto a program:\n\n assert_stmt ::= "assert" expression ["," expression]\n\nThe simple form, ``assert expression``, is equivalent to\n\n if __debug__:\n if not expression: raise AssertionError\n\nThe extended form, ``assert expression1, expression2``, is equivalent\nto\n\n if __debug__:\n if not expression1: raise AssertionError(expression2)\n\nThese equivalences assume that ``__debug__`` and ``AssertionError``\nrefer to the built-in variables with those names. In the current\nimplementation, the built-in variable ``__debug__`` is ``True`` under\nnormal circumstances, ``False`` when optimization is requested\n(command line option -O). The current code generator emits no code\nfor an assert statement when optimization is requested at compile\ntime. Note that it is unnecessary to include the source code for the\nexpression that failed in the error message; it will be displayed as\npart of the stack trace.\n\nAssignments to ``__debug__`` are illegal. The value for the built-in\nvariable is determined when the interpreter starts.\n', 'assignment': u'\nAssignment statements\n*********************\n\nAssignment statements are used to (re)bind names to values and to\nmodify attributes or items of mutable objects:\n\n assignment_stmt ::= (target_list "=")+ (expression_list | yield_expression)\n target_list ::= target ("," target)* [","]\n target ::= identifier\n | "(" target_list ")"\n | "[" target_list "]"\n | attributeref\n | subscription\n | slicing\n\n(See section *Primaries* for the syntax definitions for the last three\nsymbols.)\n\nAn assignment statement evaluates the expression list (remember that\nthis can be a single expression or a comma-separated list, the latter\nyielding a tuple) and assigns the single resulting object to each of\nthe target lists, from left to right.\n\nAssignment is defined recursively depending on the form of the target\n(list). When a target is part of a mutable object (an attribute\nreference, subscription or slicing), the mutable object must\nultimately perform the assignment and decide about its validity, and\nmay raise an exception if the assignment is unacceptable. The rules\nobserved by various types and the exceptions raised are given with the\ndefinition of the object types (see section *The standard type\nhierarchy*).\n\nAssignment of an object to a target list is recursively defined as\nfollows.\n\n* If the target list is a single target: The object is assigned to\n that target.\n\n* If the target list is a comma-separated list of targets: The object\n must be an iterable with the same number of items as there are\n targets in the target list, and the items are assigned, from left to\n right, to the corresponding targets. (This rule is relaxed as of\n Python 1.5; in earlier versions, the object had to be a tuple.\n Since strings are sequences, an assignment like ``a, b = "xy"`` is\n now legal as long as the string has the right length.)\n\nAssignment of an object to a single target is recursively defined as\nfollows.\n\n* If the target is an identifier (name):\n\n * If the name does not occur in a ``global`` statement in the\n current code block: the name is bound to the object in the current\n local namespace.\n\n * Otherwise: the name is bound to the object in the current global\n namespace.\n\n The name is rebound if it was already bound. This may cause the\n reference count for the object previously bound to the name to reach\n zero, causing the object to be deallocated and its destructor (if it\n has one) to be called.\n\n* If the target is a target list enclosed in parentheses or in square\n brackets: The object must be an iterable with the same number of\n items as there are targets in the target list, and its items are\n assigned, from left to right, to the corresponding targets.\n\n* If the target is an attribute reference: The primary expression in\n the reference is evaluated. It should yield an object with\n assignable attributes; if this is not the case, ``TypeError`` is\n raised. That object is then asked to assign the assigned object to\n the given attribute; if it cannot perform the assignment, it raises\n an exception (usually but not necessarily ``AttributeError``).\n\n Note: If the object is a class instance and the attribute reference\n occurs on both sides of the assignment operator, the RHS expression,\n ``a.x`` can access either an instance attribute or (if no instance\n attribute exists) a class attribute. The LHS target ``a.x`` is\n always set as an instance attribute, creating it if necessary.\n Thus, the two occurrences of ``a.x`` do not necessarily refer to the\n same attribute: if the RHS expression refers to a class attribute,\n the LHS creates a new instance attribute as the target of the\n assignment:\n\n class Cls:\n x = 3 # class variable\n inst = Cls()\n inst.x = inst.x + 1 # writes inst.x as 4 leaving Cls.x as 3\n\n This description does not necessarily apply to descriptor\n attributes, such as properties created with ``property()``.\n\n* If the target is a subscription: The primary expression in the\n reference is evaluated. It should yield either a mutable sequence\n object (such as a list) or a mapping object (such as a dictionary).\n Next, the subscript expression is evaluated.\n\n If the primary is a mutable sequence object (such as a list), the\n subscript must yield a plain integer. If it is negative, the\n sequence\'s length is added to it. The resulting value must be a\n nonnegative integer less than the sequence\'s length, and the\n sequence is asked to assign the assigned object to its item with\n that index. If the index is out of range, ``IndexError`` is raised\n (assignment to a subscripted sequence cannot add new items to a\n list).\n\n If the primary is a mapping object (such as a dictionary), the\n subscript must have a type compatible with the mapping\'s key type,\n and the mapping is then asked to create a key/datum pair which maps\n the subscript to the assigned object. This can either replace an\n existing key/value pair with the same key value, or insert a new\n key/value pair (if no key with the same value existed).\n\n* If the target is a slicing: The primary expression in the reference\n is evaluated. It should yield a mutable sequence object (such as a\n list). The assigned object should be a sequence object of the same\n type. Next, the lower and upper bound expressions are evaluated,\n insofar they are present; defaults are zero and the sequence\'s\n length. The bounds should evaluate to (small) integers. If either\n bound is negative, the sequence\'s length is added to it. The\n resulting bounds are clipped to lie between zero and the sequence\'s\n length, inclusive. Finally, the sequence object is asked to replace\n the slice with the items of the assigned sequence. The length of\n the slice may be different from the length of the assigned sequence,\n thus changing the length of the target sequence, if the object\n allows it.\n\n**CPython implementation detail:** In the current implementation, the\nsyntax for targets is taken to be the same as for expressions, and\ninvalid syntax is rejected during the code generation phase, causing\nless detailed error messages.\n\nWARNING: Although the definition of assignment implies that overlaps\nbetween the left-hand side and the right-hand side are \'safe\' (for\nexample ``a, b = b, a`` swaps two variables), overlaps *within* the\ncollection of assigned-to variables are not safe! For instance, the\nfollowing program prints ``[0, 2]``:\n\n x = [0, 1]\n i = 0\n i, x[i] = 1, 2\n print x\n\n\nAugmented assignment statements\n===============================\n\nAugmented assignment is the combination, in a single statement, of a\nbinary operation and an assignment statement:\n\n augmented_assignment_stmt ::= augtarget augop (expression_list | yield_expression)\n augtarget ::= identifier | attributeref | subscription | slicing\n augop ::= "+=" | "-=" | "*=" | "/=" | "//=" | "%=" | "**="\n | ">>=" | "<<=" | "&=" | "^=" | "|="\n\n(See section *Primaries* for the syntax definitions for the last three\nsymbols.)\n\nAn augmented assignment evaluates the target (which, unlike normal\nassignment statements, cannot be an unpacking) and the expression\nlist, performs the binary operation specific to the type of assignment\non the two operands, and assigns the result to the original target.\nThe target is only evaluated once.\n\nAn augmented assignment expression like ``x += 1`` can be rewritten as\n``x = x + 1`` to achieve a similar, but not exactly equal effect. In\nthe augmented version, ``x`` is only evaluated once. Also, when\npossible, the actual operation is performed *in-place*, meaning that\nrather than creating a new object and assigning that to the target,\nthe old object is modified instead.\n\nWith the exception of assigning to tuples and multiple targets in a\nsingle statement, the assignment done by augmented assignment\nstatements is handled the same way as normal assignments. Similarly,\nwith the exception of the possible *in-place* behavior, the binary\noperation performed by augmented assignment is the same as the normal\nbinary operations.\n\nFor targets which are attribute references, the same *caveat about\nclass and instance attributes* applies as for regular assignments.\n', 'atom-identifiers': u'\nIdentifiers (Names)\n*******************\n\nAn identifier occurring as an atom is a name. See section\n*Identifiers and keywords* for lexical definition and section *Naming\nand binding* for documentation of naming and binding.\n\nWhen the name is bound to an object, evaluation of the atom yields\nthat object. When a name is not bound, an attempt to evaluate it\nraises a ``NameError`` exception.\n\n**Private name mangling:** When an identifier that textually occurs in\na class definition begins with two or more underscore characters and\ndoes not end in two or more underscores, it is considered a *private\nname* of that class. Private names are transformed to a longer form\nbefore code is generated for them. The transformation inserts the\nclass name in front of the name, with leading underscores removed, and\na single underscore inserted in front of the class name. For example,\nthe identifier ``__spam`` occurring in a class named ``Ham`` will be\ntransformed to ``_Ham__spam``. This transformation is independent of\nthe syntactical context in which the identifier is used. If the\ntransformed name is extremely long (longer than 255 characters),\nimplementation defined truncation may happen. If the class name\nconsists only of underscores, no transformation is done.\n', Modified: python/branches/release26-maint/Misc/NEWS ============================================================================== --- python/branches/release26-maint/Misc/NEWS (original) +++ python/branches/release26-maint/Misc/NEWS Tue Mar 9 23:31:52 2010 @@ -4,22 +4,33 @@ (editors: check NEWS.help for information about editing NEWS using ReST.) -What's New in Python 2.6.5 final? -================================= +What's New in Python 2.6.5 rc 2? +================================ -*Release date: 2010-03-XX* +*Release date: 2010-03-09* Core and Builtins ----------------- +- Issue #8089: a OS X framework build with --with-universal-archs=3-way|intel + had no way to select a 32-bit executable. + +- Issue #8084: fixes build issues on OSX 10.6 when targetting OSX 10.4. + Library ------- +- Reverting the changes made in r78432. Discussed in the tracker issue #7540. + Extension Modules ----------------- - Issue #7670: sqlite3: Fixed crashes when operating on closed connections. +- Issue #8053: logic was inverted on which platforms to run a test on. + caused test_thread to fail on Windows. + + What's New in Python 2.6.5 rc 1? ================================ Modified: python/branches/release26-maint/Misc/RPM/python-2.6.spec ============================================================================== --- python/branches/release26-maint/Misc/RPM/python-2.6.spec (original) +++ python/branches/release26-maint/Misc/RPM/python-2.6.spec Tue Mar 9 23:31:52 2010 @@ -39,7 +39,7 @@ %define name python #--start constants-- -%define version 2.6.5rc1 +%define version 2.6.5rc2 %define libver 2.6 #--end constants-- %define release 1pydotorg Modified: python/branches/release26-maint/README ============================================================================== --- python/branches/release26-maint/README (original) +++ python/branches/release26-maint/README Tue Mar 9 23:31:52 2010 @@ -1,4 +1,4 @@ -This is Python version 2.6.5 rc 1 +This is Python version 2.6.5 rc 2 ================================= Copyright (c) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010 From python-checkins at python.org Tue Mar 9 23:32:26 2010 From: python-checkins at python.org (barry.warsaw) Date: Tue, 9 Mar 2010 23:32:26 +0100 (CET) Subject: [Python-checkins] r78823 - python/tags/r265rc2 Message-ID: <20100309223226.AC131DD32@mail.python.org> Author: barry.warsaw Date: Tue Mar 9 23:32:26 2010 New Revision: 78823 Log: Tagging for 2.6.5 rc 2. Added: python/tags/r265rc2/ - copied from r78822, /python/branches/release26-maint/ From solipsis at pitrou.net Wed Mar 10 01:03:47 2010 From: solipsis at pitrou.net (solipsis at pitrou.net) Date: Wed, 10 Mar 2010 01:03:47 +0100 (CET) Subject: [Python-checkins] Daily py3k reference leaks (r78821): sum=0 Message-ID: <20100310000347.58C7F1770D@ns6635.ovh.net> py3k results for svn r78821 (hg cset c1643e9d3b1d) -------------------------------------------------- Command line was: ['./python', '-m', 'test.regrtest', '-uall', '-R', '3:3:/home/antoine/py3k/refleaks/reflogHVlkIP', '-x', 'test_httpservers'] From python-checkins at python.org Wed Mar 10 20:13:43 2010 From: python-checkins at python.org (collin.winter) Date: Wed, 10 Mar 2010 20:13:43 +0100 (CET) Subject: [Python-checkins] r78824 - python/branches/py3k-jit Message-ID: <20100310191343.01854DE60@mail.python.org> Author: collin.winter Date: Wed Mar 10 20:13:42 2010 New Revision: 78824 Log: Create a py3k-jit branch for implementing PEP 3146. Added: python/branches/py3k-jit/ - copied from r78823, /python/branches/py3k/ From python-checkins at python.org Wed Mar 10 23:28:52 2010 From: python-checkins at python.org (benjamin.peterson) Date: Wed, 10 Mar 2010 23:28:52 +0100 (CET) Subject: [Python-checkins] r78825 - in python/branches/release31-maint: configure configure.in Message-ID: <20100310222852.81E17E0AB@mail.python.org> Author: benjamin.peterson Date: Wed Mar 10 23:28:52 2010 New Revision: 78825 Log: Merged revisions 78818 via svnmerge from svn+ssh://pythondev at svn.python.org/python/branches/py3k ................ r78818 | benjamin.peterson | 2010-03-09 15:46:49 -0600 (Tue, 09 Mar 2010) | 9 lines Merged revisions 78817 via svnmerge from svn+ssh://pythondev at svn.python.org/python/trunk ........ r78817 | benjamin.peterson | 2010-03-09 15:43:36 -0600 (Tue, 09 Mar 2010) | 1 line handle an empty OPT variable correctly #8100 ........ ................ Modified: python/branches/release31-maint/ (props changed) python/branches/release31-maint/configure python/branches/release31-maint/configure.in Modified: python/branches/release31-maint/configure ============================================================================== --- python/branches/release31-maint/configure (original) +++ python/branches/release31-maint/configure Wed Mar 10 23:28:52 2010 @@ -4533,7 +4533,7 @@ # tweak OPT based on compiler and platform, only if the user didn't set # it on the command line -if test -z "$OPT" +if test "${OPT-unset}" == "unset" then case $GCC in yes) Modified: python/branches/release31-maint/configure.in ============================================================================== --- python/branches/release31-maint/configure.in (original) +++ python/branches/release31-maint/configure.in Wed Mar 10 23:28:52 2010 @@ -828,7 +828,7 @@ # tweak OPT based on compiler and platform, only if the user didn't set # it on the command line AC_SUBST(OPT) -if test -z "$OPT" +if test "${OPT-unset}" == "unset" then case $GCC in yes) From python-checkins at python.org Wed Mar 10 23:30:20 2010 From: python-checkins at python.org (victor.stinner) Date: Wed, 10 Mar 2010 23:30:20 +0100 (CET) Subject: [Python-checkins] r78826 - in python/trunk: Lib/site.py Misc/NEWS Modules/main.c Parser/tokenizer.c Python/import.c Python/pythonrun.c Message-ID: <20100310223020.425EDC6D0@mail.python.org> Author: victor.stinner Date: Wed Mar 10 23:30:19 2010 New Revision: 78826 Log: Issue #3137: Don't ignore errors at startup, especially a keyboard interrupt (SIGINT). If an error occurs while importing the site module, the error is printed and Python exits. Initialize the GIL before importing the site module. Modified: python/trunk/Lib/site.py python/trunk/Misc/NEWS python/trunk/Modules/main.c python/trunk/Parser/tokenizer.c python/trunk/Python/import.c python/trunk/Python/pythonrun.c Modified: python/trunk/Lib/site.py ============================================================================== --- python/trunk/Lib/site.py (original) +++ python/trunk/Lib/site.py Wed Mar 10 23:30:19 2010 @@ -489,6 +489,12 @@ import sitecustomize except ImportError: pass + except Exception: + if sys.flags.verbose: + sys.excepthook(*sys.exc_info()) + else: + print >>sys.stderr, \ + "'import sitecustomize' failed; use -v for traceback" def execusercustomize(): @@ -497,6 +503,12 @@ import usercustomize except ImportError: pass + except Exception: + if sys.flags.verbose: + sys.excepthook(*sys.exc_info()) + else: + print>>sys.stderr, \ + "'import sitecustomize' failed; use -v for traceback" def main(): Modified: python/trunk/Misc/NEWS ============================================================================== --- python/trunk/Misc/NEWS (original) +++ python/trunk/Misc/NEWS Wed Mar 10 23:30:19 2010 @@ -12,6 +12,11 @@ Core and Builtins ----------------- +- Issue #3137: Don't ignore errors at startup, especially a keyboard interrupt + (SIGINT). If an error occurs while importing the site module, the error is + printed and Python exits. Initialize the GIL before importing the site + module. + Library ------- Modified: python/trunk/Modules/main.c ============================================================================== --- python/trunk/Modules/main.c (original) +++ python/trunk/Modules/main.c Wed Mar 10 23:30:19 2010 @@ -573,10 +573,16 @@ } if (sts==-1) { - sts = PyRun_AnyFileExFlags( - fp, - filename == NULL ? "" : filename, - filename != NULL, &cf) != 0; + /* call pending calls like signal handlers (SIGINT) */ + if (Py_MakePendingCalls() == -1) { + PyErr_Print(); + sts = 1; + } else { + sts = PyRun_AnyFileExFlags( + fp, + filename == NULL ? "" : filename, + filename != NULL, &cf) != 0; + } } } Modified: python/trunk/Parser/tokenizer.c ============================================================================== --- python/trunk/Parser/tokenizer.c (original) +++ python/trunk/Parser/tokenizer.c Wed Mar 10 23:30:19 2010 @@ -817,8 +817,12 @@ return -1; error_clear: - /* Fallback to iso-8859-1: for backward compatibility */ Py_DECREF(enc); + if (!PyErr_ExceptionMatches(PyExc_UnicodeDecodeError)) { + tok->done = E_ERROR; + return -1; + } + /* Fallback to iso-8859-1: for backward compatibility */ PyErr_Clear(); return 0; } Modified: python/trunk/Python/import.c ============================================================================== --- python/trunk/Python/import.c (original) +++ python/trunk/Python/import.c Wed Mar 10 23:30:19 2010 @@ -2748,8 +2748,6 @@ } else { /* No globals -- use standard builtins, and fake globals */ - PyErr_Clear(); - builtins = PyImport_ImportModuleLevel("__builtin__", NULL, NULL, NULL, 0); if (builtins == NULL) Modified: python/trunk/Python/pythonrun.c ============================================================================== --- python/trunk/Python/pythonrun.c (original) +++ python/trunk/Python/pythonrun.c Wed Mar 10 23:30:19 2010 @@ -248,14 +248,15 @@ } initmain(); /* Module __main__ */ - if (!Py_NoSiteFlag) - initsite(); /* Module site */ /* auto-thread-state API, if available */ #ifdef WITH_THREAD _PyGILState_Init(interp, tstate); #endif /* WITH_THREAD */ + if (!Py_NoSiteFlag) + initsite(); /* Module site */ + if ((p = Py_GETENV("PYTHONIOENCODING")) && *p != '\0') { p = icodeset = codeset = strdup(p); free_codeset = 1; @@ -284,8 +285,13 @@ loc_codeset = strdup(loc_codeset); Py_DECREF(enc); } else { - loc_codeset = NULL; - PyErr_Clear(); + if (PyErr_ExceptionMatches(PyExc_LookupError)) { + PyErr_Clear(); + loc_codeset = NULL; + } else { + PyErr_Print(); + exit(1); + } } } else loc_codeset = NULL; @@ -704,20 +710,12 @@ static void initsite(void) { - PyObject *m, *f; + PyObject *m; m = PyImport_ImportModule("site"); if (m == NULL) { - f = PySys_GetObject("stderr"); - if (Py_VerboseFlag) { - PyFile_WriteString( - "'import site' failed; traceback:\n", f); - PyErr_Print(); - } - else { - PyFile_WriteString( - "'import site' failed; use -v for traceback\n", f); - PyErr_Clear(); - } + PyErr_Print(); + Py_Finalize(); + exit(1); } else { Py_DECREF(m); @@ -1546,6 +1544,8 @@ char *msg = NULL; errtype = PyExc_SyntaxError; switch (err->error) { + case E_ERROR: + return; case E_SYNTAX: errtype = PyExc_IndentationError; if (err->expected == INDENT) From python-checkins at python.org Wed Mar 10 23:45:04 2010 From: python-checkins at python.org (victor.stinner) Date: Wed, 10 Mar 2010 23:45:04 +0100 (CET) Subject: [Python-checkins] r78827 - python/trunk/Lib/site.py Message-ID: <20100310224504.2CA90C6C8@mail.python.org> Author: victor.stinner Date: Wed Mar 10 23:45:04 2010 New Revision: 78827 Log: ooops, fix error message in execusercustomize() Copy/paste failure :-) Modified: python/trunk/Lib/site.py Modified: python/trunk/Lib/site.py ============================================================================== --- python/trunk/Lib/site.py (original) +++ python/trunk/Lib/site.py Wed Mar 10 23:45:04 2010 @@ -508,7 +508,7 @@ sys.excepthook(*sys.exc_info()) else: print>>sys.stderr, \ - "'import sitecustomize' failed; use -v for traceback" + "'import usercustomize' failed; use -v for traceback" def main(): From python-checkins at python.org Thu Mar 11 00:58:42 2010 From: python-checkins at python.org (florent.xicluna) Date: Thu, 11 Mar 2010 00:58:42 +0100 (CET) Subject: [Python-checkins] r78828 - in python/trunk: Lib/sysconfig.py Lib/test/test_sysconfig.py Misc/NEWS Message-ID: <20100310235842.D1EE2D81F@mail.python.org> Author: florent.xicluna Date: Thu Mar 11 00:58:42 2010 New Revision: 78828 Log: Issue #7880: Fix sysconfig when the python executable is a symbolic link. Modified: python/trunk/Lib/sysconfig.py python/trunk/Lib/test/test_sysconfig.py python/trunk/Misc/NEWS Modified: python/trunk/Lib/sysconfig.py ============================================================================== --- python/trunk/Lib/sysconfig.py (original) +++ python/trunk/Lib/sysconfig.py Thu Mar 11 00:58:42 2010 @@ -3,7 +3,7 @@ """ import sys import os -from os.path import pardir, abspath +from os.path import pardir, realpath _INSTALL_SCHEMES = { 'posix_prefix': { @@ -84,16 +84,16 @@ _EXEC_PREFIX = os.path.normpath(sys.exec_prefix) _CONFIG_VARS = None _USER_BASE = None -_PROJECT_BASE = abspath(os.path.dirname(sys.executable)) +_PROJECT_BASE = os.path.dirname(realpath(sys.executable)) if os.name == "nt" and "pcbuild" in _PROJECT_BASE[-8:].lower(): - _PROJECT_BASE = abspath(os.path.join(_PROJECT_BASE, pardir)) + _PROJECT_BASE = realpath(os.path.join(_PROJECT_BASE, pardir)) # PC/VS7.1 if os.name == "nt" and "\\pc\\v" in _PROJECT_BASE[-10:].lower(): - _PROJECT_BASE = abspath(os.path.join(_PROJECT_BASE, pardir, pardir)) + _PROJECT_BASE = realpath(os.path.join(_PROJECT_BASE, pardir, pardir)) # PC/AMD64 if os.name == "nt" and "\\pcbuild\\amd64" in _PROJECT_BASE[-14:].lower(): - _PROJECT_BASE = abspath(os.path.join(_PROJECT_BASE, pardir, pardir)) + _PROJECT_BASE = realpath(os.path.join(_PROJECT_BASE, pardir, pardir)) def is_python_build(): for fn in ("Setup.dist", "Setup.local"): @@ -294,7 +294,7 @@ vars['SO'] = '.pyd' vars['EXE'] = '.exe' vars['VERSION'] = _PY_VERSION_SHORT_NO_DOT - vars['BINDIR'] = os.path.dirname(os.path.abspath(sys.executable)) + vars['BINDIR'] = os.path.dirname(realpath(sys.executable)) # # public APIs Modified: python/trunk/Lib/test/test_sysconfig.py ============================================================================== --- python/trunk/Lib/test/test_sysconfig.py (original) +++ python/trunk/Lib/test/test_sysconfig.py Thu Mar 11 00:58:42 2010 @@ -8,9 +8,10 @@ import sys import os import shutil +import subprocess from copy import copy, deepcopy -from test.test_support import run_unittest, TESTFN +from test.test_support import run_unittest, TESTFN, unlink, get_attribute import sysconfig from sysconfig import (get_paths, get_platform, get_config_vars, @@ -238,6 +239,23 @@ 'posix_prefix', 'posix_user') self.assertEquals(get_scheme_names(), wanted) + def test_symlink(self): + # Issue 7880 + symlink = get_attribute(os, "symlink") + def get(python): + cmd = [python, '-c', + 'import sysconfig; print sysconfig.get_platform()'] + p = subprocess.Popen(cmd, stdout=subprocess.PIPE, + stderr=subprocess.PIPE) + return p.communicate() + real = os.path.realpath(sys.executable) + link = os.path.abspath(TESTFN) + symlink(real, link) + try: + self.assertEqual(get(real), get(link)) + finally: + unlink(link) + def test_main(): run_unittest(TestSysConfig) Modified: python/trunk/Misc/NEWS ============================================================================== --- python/trunk/Misc/NEWS (original) +++ python/trunk/Misc/NEWS Thu Mar 11 00:58:42 2010 @@ -20,6 +20,8 @@ Library ------- +- Issue #7880: Fix sysconfig when the python executable is a symbolic link. + - Issue #7624: Fix isinstance(foo(), collections.Callable) for old-style classes. From solipsis at pitrou.net Thu Mar 11 01:03:44 2010 From: solipsis at pitrou.net (solipsis at pitrou.net) Date: Thu, 11 Mar 2010 01:03:44 +0100 (CET) Subject: [Python-checkins] Daily py3k reference leaks (r78821): sum=0 Message-ID: <20100311000344.495671770B@ns6635.ovh.net> py3k results for svn r78821 (hg cset c1643e9d3b1d) -------------------------------------------------- Command line was: ['./python', '-m', 'test.regrtest', '-uall', '-R', '3:3:/home/antoine/py3k/refleaks/reflognG6xqO', '-x', 'test_httpservers'] From python-checkins at python.org Thu Mar 11 01:05:18 2010 From: python-checkins at python.org (florent.xicluna) Date: Thu, 11 Mar 2010 01:05:18 +0100 (CET) Subject: [Python-checkins] r78829 - in python/branches/py3k: Lib/sysconfig.py Lib/test/test_sysconfig.py Misc/NEWS Message-ID: <20100311000518.15EF2DC2A@mail.python.org> Author: florent.xicluna Date: Thu Mar 11 01:05:17 2010 New Revision: 78829 Log: Merged revisions 78828 via svnmerge from svn+ssh://pythondev at svn.python.org/python/trunk ........ r78828 | florent.xicluna | 2010-03-11 00:58:42 +0100 (jeu, 11 mar 2010) | 2 lines Issue #7880: Fix sysconfig when the python executable is a symbolic link. ........ Modified: python/branches/py3k/Lib/sysconfig.py python/branches/py3k/Lib/test/test_sysconfig.py python/branches/py3k/Misc/NEWS Modified: python/branches/py3k/Lib/sysconfig.py ============================================================================== --- python/branches/py3k/Lib/sysconfig.py (original) +++ python/branches/py3k/Lib/sysconfig.py Thu Mar 11 01:05:17 2010 @@ -3,7 +3,7 @@ """ import sys import os -from os.path import pardir, abspath +from os.path import pardir, realpath _INSTALL_SCHEMES = { 'posix_prefix': { @@ -84,16 +84,16 @@ _EXEC_PREFIX = os.path.normpath(sys.exec_prefix) _CONFIG_VARS = None _USER_BASE = None -_PROJECT_BASE = abspath(os.path.dirname(sys.executable)) +_PROJECT_BASE = os.path.dirname(realpath(sys.executable)) if os.name == "nt" and "pcbuild" in _PROJECT_BASE[-8:].lower(): - _PROJECT_BASE = abspath(os.path.join(_PROJECT_BASE, pardir)) + _PROJECT_BASE = realpath(os.path.join(_PROJECT_BASE, pardir)) # PC/VS7.1 if os.name == "nt" and "\\pc\\v" in _PROJECT_BASE[-10:].lower(): - _PROJECT_BASE = abspath(os.path.join(_PROJECT_BASE, pardir, pardir)) + _PROJECT_BASE = realpath(os.path.join(_PROJECT_BASE, pardir, pardir)) # PC/AMD64 if os.name == "nt" and "\\pcbuild\\amd64" in _PROJECT_BASE[-14:].lower(): - _PROJECT_BASE = abspath(os.path.join(_PROJECT_BASE, pardir, pardir)) + _PROJECT_BASE = realpath(os.path.join(_PROJECT_BASE, pardir, pardir)) def is_python_build(): for fn in ("Setup.dist", "Setup.local"): @@ -296,7 +296,7 @@ vars['SO'] = '.pyd' vars['EXE'] = '.exe' vars['VERSION'] = _PY_VERSION_SHORT_NO_DOT - vars['BINDIR'] = os.path.dirname(os.path.abspath(sys.executable)) + vars['BINDIR'] = os.path.dirname(realpath(sys.executable)) # # public APIs Modified: python/branches/py3k/Lib/test/test_sysconfig.py ============================================================================== --- python/branches/py3k/Lib/test/test_sysconfig.py (original) +++ python/branches/py3k/Lib/test/test_sysconfig.py Thu Mar 11 01:05:17 2010 @@ -8,9 +8,10 @@ import sys import test import os +import subprocess from copy import copy, deepcopy -from test.support import run_unittest, TESTFN +from test.support import run_unittest, TESTFN, unlink, get_attribute import sysconfig from sysconfig import (get_paths, get_platform, get_config_vars, @@ -237,6 +238,23 @@ 'posix_prefix', 'posix_user') self.assertEquals(get_scheme_names(), wanted) + def test_symlink(self): + # Issue 7880 + symlink = get_attribute(os, "symlink") + def get(python): + cmd = [python, '-c', + 'import sysconfig; print sysconfig.get_platform()'] + p = subprocess.Popen(cmd, stdout=subprocess.PIPE, + stderr=subprocess.PIPE) + return p.communicate() + real = os.path.realpath(sys.executable) + link = os.path.abspath(TESTFN) + symlink(real, link) + try: + self.assertEqual(get(real), get(link)) + finally: + unlink(link) + def test_main(): run_unittest(TestSysConfig) Modified: python/branches/py3k/Misc/NEWS ============================================================================== --- python/branches/py3k/Misc/NEWS (original) +++ python/branches/py3k/Misc/NEWS Thu Mar 11 01:05:17 2010 @@ -270,6 +270,8 @@ Library ------- +- Issue #7880: Fix sysconfig when the python executable is a symbolic link. + - Issue #6509: fix re.sub to work properly when the pattern, the string, and the replacement were all bytes. Patch by Antoine Pitrou. From python-checkins at python.org Thu Mar 11 01:56:59 2010 From: python-checkins at python.org (florent.xicluna) Date: Thu, 11 Mar 2010 01:56:59 +0100 (CET) Subject: [Python-checkins] r78830 - in python/trunk/Lib: sysconfig.py test/test_subprocess.py Message-ID: <20100311005659.B286BDC0B@mail.python.org> Author: florent.xicluna Date: Thu Mar 11 01:56:59 2010 New Revision: 78830 Log: Fix the test_subprocess failure when sys.executable is meaningless: '' or a directory. It does not fix #7774. Modified: python/trunk/Lib/sysconfig.py python/trunk/Lib/test/test_subprocess.py Modified: python/trunk/Lib/sysconfig.py ============================================================================== --- python/trunk/Lib/sysconfig.py (original) +++ python/trunk/Lib/sysconfig.py Thu Mar 11 01:56:59 2010 @@ -84,7 +84,8 @@ _EXEC_PREFIX = os.path.normpath(sys.exec_prefix) _CONFIG_VARS = None _USER_BASE = None -_PROJECT_BASE = os.path.dirname(realpath(sys.executable)) +# Note: sys.executable can be '' or even a directory, until #7774 is fixed. +_PROJECT_BASE = realpath(os.path.dirname(sys.executable)) if os.name == "nt" and "pcbuild" in _PROJECT_BASE[-8:].lower(): _PROJECT_BASE = realpath(os.path.join(_PROJECT_BASE, pardir)) @@ -294,7 +295,7 @@ vars['SO'] = '.pyd' vars['EXE'] = '.exe' vars['VERSION'] = _PY_VERSION_SHORT_NO_DOT - vars['BINDIR'] = os.path.dirname(realpath(sys.executable)) + vars['BINDIR'] = realpath(os.path.dirname(sys.executable)) # # public APIs Modified: python/trunk/Lib/test/test_subprocess.py ============================================================================== --- python/trunk/Lib/test/test_subprocess.py (original) +++ python/trunk/Lib/test/test_subprocess.py Thu Mar 11 01:56:59 2010 @@ -135,7 +135,7 @@ self.assertEqual(p.stderr, None) def test_executable_with_cwd(self): - python_dir = os.path.dirname(os.path.realpath(sys.executable)) + python_dir = os.path.realpath(os.path.dirname(sys.executable)) p = subprocess.Popen(["somethingyoudonthave", "-c", "import sys; sys.exit(47)"], executable=sys.executable, cwd=python_dir) From python-checkins at python.org Thu Mar 11 02:00:26 2010 From: python-checkins at python.org (florent.xicluna) Date: Thu, 11 Mar 2010 02:00:26 +0100 (CET) Subject: [Python-checkins] r78831 - in python/branches/py3k: Lib/sysconfig.py Lib/test/test_subprocess.py Message-ID: <20100311010026.D73BBDC3B@mail.python.org> Author: florent.xicluna Date: Thu Mar 11 02:00:26 2010 New Revision: 78831 Log: Merged revisions 78830 via svnmerge from svn+ssh://pythondev at svn.python.org/python/trunk ........ r78830 | florent.xicluna | 2010-03-11 01:56:59 +0100 (jeu, 11 mar 2010) | 3 lines Fix the test_subprocess failure when sys.executable is meaningless: '' or a directory. It does not fix #7774. ........ Modified: python/branches/py3k/ (props changed) python/branches/py3k/Lib/sysconfig.py python/branches/py3k/Lib/test/test_subprocess.py Modified: python/branches/py3k/Lib/sysconfig.py ============================================================================== --- python/branches/py3k/Lib/sysconfig.py (original) +++ python/branches/py3k/Lib/sysconfig.py Thu Mar 11 02:00:26 2010 @@ -84,7 +84,8 @@ _EXEC_PREFIX = os.path.normpath(sys.exec_prefix) _CONFIG_VARS = None _USER_BASE = None -_PROJECT_BASE = os.path.dirname(realpath(sys.executable)) +# Note: sys.executable can be '' or even a directory, until #7774 is fixed. +_PROJECT_BASE = realpath(os.path.dirname(sys.executable)) if os.name == "nt" and "pcbuild" in _PROJECT_BASE[-8:].lower(): _PROJECT_BASE = realpath(os.path.join(_PROJECT_BASE, pardir)) @@ -296,7 +297,7 @@ vars['SO'] = '.pyd' vars['EXE'] = '.exe' vars['VERSION'] = _PY_VERSION_SHORT_NO_DOT - vars['BINDIR'] = os.path.dirname(realpath(sys.executable)) + vars['BINDIR'] = realpath(os.path.dirname(sys.executable)) # # public APIs Modified: python/branches/py3k/Lib/test/test_subprocess.py ============================================================================== --- python/branches/py3k/Lib/test/test_subprocess.py (original) +++ python/branches/py3k/Lib/test/test_subprocess.py Thu Mar 11 02:00:26 2010 @@ -135,7 +135,7 @@ self.assertEqual(p.stderr, None) def test_executable_with_cwd(self): - python_dir = os.path.dirname(os.path.realpath(sys.executable)) + python_dir = os.path.realpath(os.path.dirname(sys.executable)) p = subprocess.Popen(["somethingyoudonthave", "-c", "import sys; sys.exit(47)"], executable=sys.executable, cwd=python_dir) From python-checkins at python.org Thu Mar 11 02:39:55 2010 From: python-checkins at python.org (florent.xicluna) Date: Thu, 11 Mar 2010 02:39:55 +0100 (CET) Subject: [Python-checkins] r78832 - python/trunk/Lib/test/test_sysconfig.py Message-ID: <20100311013955.DBAE0DEAE@mail.python.org> Author: florent.xicluna Date: Thu Mar 11 02:39:55 2010 New Revision: 78832 Log: It is not optimal to test sys.stderr on a debug build. Modified: python/trunk/Lib/test/test_sysconfig.py Modified: python/trunk/Lib/test/test_sysconfig.py ============================================================================== --- python/trunk/Lib/test/test_sysconfig.py (original) +++ python/trunk/Lib/test/test_sysconfig.py Thu Mar 11 02:39:55 2010 @@ -245,8 +245,7 @@ def get(python): cmd = [python, '-c', 'import sysconfig; print sysconfig.get_platform()'] - p = subprocess.Popen(cmd, stdout=subprocess.PIPE, - stderr=subprocess.PIPE) + p = subprocess.Popen(cmd, stdout=subprocess.PIPE) return p.communicate() real = os.path.realpath(sys.executable) link = os.path.abspath(TESTFN) From python-checkins at python.org Thu Mar 11 02:50:48 2010 From: python-checkins at python.org (florent.xicluna) Date: Thu, 11 Mar 2010 02:50:48 +0100 (CET) Subject: [Python-checkins] r78833 - in python/trunk/Lib: sysconfig.py test/test_subprocess.py Message-ID: <20100311015048.D6611E44A@mail.python.org> Author: florent.xicluna Date: Thu Mar 11 02:50:48 2010 New Revision: 78833 Log: Revert r78830: realpath() should really be applied to sys.executable. Modified: python/trunk/Lib/sysconfig.py python/trunk/Lib/test/test_subprocess.py Modified: python/trunk/Lib/sysconfig.py ============================================================================== --- python/trunk/Lib/sysconfig.py (original) +++ python/trunk/Lib/sysconfig.py Thu Mar 11 02:50:48 2010 @@ -84,8 +84,7 @@ _EXEC_PREFIX = os.path.normpath(sys.exec_prefix) _CONFIG_VARS = None _USER_BASE = None -# Note: sys.executable can be '' or even a directory, until #7774 is fixed. -_PROJECT_BASE = realpath(os.path.dirname(sys.executable)) +_PROJECT_BASE = os.path.dirname(realpath(sys.executable)) if os.name == "nt" and "pcbuild" in _PROJECT_BASE[-8:].lower(): _PROJECT_BASE = realpath(os.path.join(_PROJECT_BASE, pardir)) @@ -295,7 +294,7 @@ vars['SO'] = '.pyd' vars['EXE'] = '.exe' vars['VERSION'] = _PY_VERSION_SHORT_NO_DOT - vars['BINDIR'] = realpath(os.path.dirname(sys.executable)) + vars['BINDIR'] = os.path.dirname(realpath(sys.executable)) # # public APIs Modified: python/trunk/Lib/test/test_subprocess.py ============================================================================== --- python/trunk/Lib/test/test_subprocess.py (original) +++ python/trunk/Lib/test/test_subprocess.py Thu Mar 11 02:50:48 2010 @@ -135,7 +135,7 @@ self.assertEqual(p.stderr, None) def test_executable_with_cwd(self): - python_dir = os.path.realpath(os.path.dirname(sys.executable)) + python_dir = os.path.dirname(os.path.realpath(sys.executable)) p = subprocess.Popen(["somethingyoudonthave", "-c", "import sys; sys.exit(47)"], executable=sys.executable, cwd=python_dir) From python-checkins at python.org Thu Mar 11 02:53:10 2010 From: python-checkins at python.org (florent.xicluna) Date: Thu, 11 Mar 2010 02:53:10 +0100 (CET) Subject: [Python-checkins] r78834 - in python/branches/py3k: Lib/sysconfig.py Lib/test/test_subprocess.py Message-ID: <20100311015310.8FFE8E904@mail.python.org> Author: florent.xicluna Date: Thu Mar 11 02:53:10 2010 New Revision: 78834 Log: Merged revisions 78833 via svnmerge from svn+ssh://pythondev at svn.python.org/python/trunk ........ r78833 | florent.xicluna | 2010-03-11 02:50:48 +0100 (jeu, 11 mar 2010) | 2 lines Revert r78830: realpath() should really be applied to sys.executable. ........ Modified: python/branches/py3k/ (props changed) python/branches/py3k/Lib/sysconfig.py python/branches/py3k/Lib/test/test_subprocess.py Modified: python/branches/py3k/Lib/sysconfig.py ============================================================================== --- python/branches/py3k/Lib/sysconfig.py (original) +++ python/branches/py3k/Lib/sysconfig.py Thu Mar 11 02:53:10 2010 @@ -84,8 +84,7 @@ _EXEC_PREFIX = os.path.normpath(sys.exec_prefix) _CONFIG_VARS = None _USER_BASE = None -# Note: sys.executable can be '' or even a directory, until #7774 is fixed. -_PROJECT_BASE = realpath(os.path.dirname(sys.executable)) +_PROJECT_BASE = os.path.dirname(realpath(sys.executable)) if os.name == "nt" and "pcbuild" in _PROJECT_BASE[-8:].lower(): _PROJECT_BASE = realpath(os.path.join(_PROJECT_BASE, pardir)) @@ -297,7 +296,7 @@ vars['SO'] = '.pyd' vars['EXE'] = '.exe' vars['VERSION'] = _PY_VERSION_SHORT_NO_DOT - vars['BINDIR'] = realpath(os.path.dirname(sys.executable)) + vars['BINDIR'] = os.path.dirname(realpath(sys.executable)) # # public APIs Modified: python/branches/py3k/Lib/test/test_subprocess.py ============================================================================== --- python/branches/py3k/Lib/test/test_subprocess.py (original) +++ python/branches/py3k/Lib/test/test_subprocess.py Thu Mar 11 02:53:10 2010 @@ -135,7 +135,7 @@ self.assertEqual(p.stderr, None) def test_executable_with_cwd(self): - python_dir = os.path.realpath(os.path.dirname(sys.executable)) + python_dir = os.path.dirname(os.path.realpath(sys.executable)) p = subprocess.Popen(["somethingyoudonthave", "-c", "import sys; sys.exit(47)"], executable=sys.executable, cwd=python_dir) From python-checkins at python.org Thu Mar 11 13:34:45 2010 From: python-checkins at python.org (victor.stinner) Date: Thu, 11 Mar 2010 13:34:45 +0100 (CET) Subject: [Python-checkins] r78835 - in python/trunk: Lib/sysconfig.py Lib/test/test_sys.py Misc/NEWS Modules/getpath.c Message-ID: <20100311123445.21BA7D7F1@mail.python.org> Author: victor.stinner Date: Thu Mar 11 13:34:39 2010 New Revision: 78835 Log: Issue #7774: Set sys.executable to an empty string if argv[0] has been set to an non existent program name and Python is unable to retrieve the real program name. Fix also sysconfig: if sys.executable is an empty string, use the current working directory. Modified: python/trunk/Lib/sysconfig.py python/trunk/Lib/test/test_sys.py python/trunk/Misc/NEWS python/trunk/Modules/getpath.c Modified: python/trunk/Lib/sysconfig.py ============================================================================== --- python/trunk/Lib/sysconfig.py (original) +++ python/trunk/Lib/sysconfig.py Thu Mar 11 13:34:39 2010 @@ -84,7 +84,12 @@ _EXEC_PREFIX = os.path.normpath(sys.exec_prefix) _CONFIG_VARS = None _USER_BASE = None -_PROJECT_BASE = os.path.dirname(realpath(sys.executable)) +if sys.executable: + _PROJECT_BASE = os.path.dirname(realpath(sys.executable)) +else: + # sys.executable can be empty if argv[0] has been changed and Python is + # unable to retrieve the real program name + _PROJECT_BASE = realpath(os.getcwd()) if os.name == "nt" and "pcbuild" in _PROJECT_BASE[-8:].lower(): _PROJECT_BASE = realpath(os.path.join(_PROJECT_BASE, pardir)) Modified: python/trunk/Lib/test/test_sys.py ============================================================================== --- python/trunk/Lib/test/test_sys.py (original) +++ python/trunk/Lib/test/test_sys.py Thu Mar 11 13:34:39 2010 @@ -437,6 +437,17 @@ self.assertEqual(sys.call_tracing(str, (2,)), "2") self.assertRaises(TypeError, sys.call_tracing, str, 2) + def test_executable(self): + # Issue #7774: Ensure that sys.executable is an empty string if argv[0] + # has been set to an non existent program name and Python is unable to + # retrieve the real program name + import subprocess + p = subprocess.Popen( + ["nonexistent", "-c", 'import sys; print "executable=%r" % sys.executable'], + executable=sys.executable, stdout=subprocess.PIPE) + executable = p.communicate()[0].strip() + p.wait() + self.assertEqual(executable, "executable=''") class SizeofTest(unittest.TestCase): Modified: python/trunk/Misc/NEWS ============================================================================== --- python/trunk/Misc/NEWS (original) +++ python/trunk/Misc/NEWS Thu Mar 11 13:34:39 2010 @@ -12,6 +12,10 @@ Core and Builtins ----------------- +- Issue #7774: Set sys.executable to an empty string if argv[0] has been + set to an non existent program name and Python is unable to retrieve the real + program name + - Issue #3137: Don't ignore errors at startup, especially a keyboard interrupt (SIGINT). If an error occurs while importing the site module, the error is printed and Python exits. Initialize the GIL before importing the site Modified: python/trunk/Modules/getpath.c ============================================================================== --- python/trunk/Modules/getpath.c (original) +++ python/trunk/Modules/getpath.c Thu Mar 11 13:34:39 2010 @@ -441,7 +441,7 @@ } else progpath[0] = '\0'; - if (progpath[0] != SEP) + if (progpath[0] != SEP && progpath[0] != '\0') absolutize(progpath); strncpy(argv0_path, progpath, MAXPATHLEN); argv0_path[MAXPATHLEN] = '\0'; From python-checkins at python.org Thu Mar 11 14:27:35 2010 From: python-checkins at python.org (victor.stinner) Date: Thu, 11 Mar 2010 14:27:35 +0100 (CET) Subject: [Python-checkins] r78836 - python/trunk/Lib/test/test_sys.py Message-ID: <20100311132735.F203DDE7C@mail.python.org> Author: victor.stinner Date: Thu Mar 11 14:27:35 2010 New Revision: 78836 Log: Fix test_executable introduce in previous commit (r78835): Windows is able to retrieve the absolute Python path even if argv[0] has been set to a non existent program name. Modified: python/trunk/Lib/test/test_sys.py Modified: python/trunk/Lib/test/test_sys.py ============================================================================== --- python/trunk/Lib/test/test_sys.py (original) +++ python/trunk/Lib/test/test_sys.py Thu Mar 11 14:27:35 2010 @@ -443,11 +443,11 @@ # retrieve the real program name import subprocess p = subprocess.Popen( - ["nonexistent", "-c", 'import sys; print "executable=%r" % sys.executable'], + ["nonexistent", "-c", 'import sys; print repr(sys.executable)'], executable=sys.executable, stdout=subprocess.PIPE) executable = p.communicate()[0].strip() p.wait() - self.assertEqual(executable, "executable=''") + self.assertIn(executable, ["''", repr(sys.executable)]) class SizeofTest(unittest.TestCase): From python-checkins at python.org Thu Mar 11 14:46:07 2010 From: python-checkins at python.org (victor.stinner) Date: Thu, 11 Mar 2010 14:46:07 +0100 (CET) Subject: [Python-checkins] r78837 - python/trunk/Lib/test/test_sys.py Message-ID: <20100311134607.2E973DCF0@mail.python.org> Author: victor.stinner Date: Thu Mar 11 14:46:06 2010 New Revision: 78837 Log: Another fix to test_executable() of test_sys: set the current working to avoid the #7774 bug. Modified: python/trunk/Lib/test/test_sys.py Modified: python/trunk/Lib/test/test_sys.py ============================================================================== --- python/trunk/Lib/test/test_sys.py (original) +++ python/trunk/Lib/test/test_sys.py Thu Mar 11 14:46:06 2010 @@ -442,9 +442,12 @@ # has been set to an non existent program name and Python is unable to # retrieve the real program name import subprocess + # For a normal installation, it should work without 'cwd' + # argument. For test runs in the build directory, see #7774. + python_dir = os.path.dirname(os.path.realpath(sys.executable)) p = subprocess.Popen( ["nonexistent", "-c", 'import sys; print repr(sys.executable)'], - executable=sys.executable, stdout=subprocess.PIPE) + executable=sys.executable, stdout=subprocess.PIPE, cwd=python_dir) executable = p.communicate()[0].strip() p.wait() self.assertIn(executable, ["''", repr(sys.executable)]) From python-checkins at python.org Thu Mar 11 15:36:23 2010 From: python-checkins at python.org (florent.xicluna) Date: Thu, 11 Mar 2010 15:36:23 +0100 (CET) Subject: [Python-checkins] r78838 - in python/trunk: Doc/library/xml.etree.elementtree.rst Lib/test/samples Lib/test/samples/simple-ns.xml Lib/test/samples/simple.xml Lib/test/test_xml_etree.py Lib/test/test_xml_etree_c.py Lib/xml/etree/ElementInclude.py Lib/xml/etree/ElementPath.py Lib/xml/etree/ElementTree.py Lib/xml/etree/__init__.py Misc/NEWS Modules/_elementtree.c Message-ID: <20100311143623.B8049DCE9@mail.python.org> Author: florent.xicluna Date: Thu Mar 11 15:36:19 2010 New Revision: 78838 Log: Issue #6472: The xml.etree package is updated to ElementTree 1.3. The cElementTree module is updated too. Added: python/trunk/Lib/test/samples/ python/trunk/Lib/test/samples/simple-ns.xml (contents, props changed) python/trunk/Lib/test/samples/simple.xml (contents, props changed) Modified: python/trunk/Doc/library/xml.etree.elementtree.rst python/trunk/Lib/test/test_xml_etree.py python/trunk/Lib/test/test_xml_etree_c.py python/trunk/Lib/xml/etree/ElementInclude.py python/trunk/Lib/xml/etree/ElementPath.py python/trunk/Lib/xml/etree/ElementTree.py python/trunk/Lib/xml/etree/__init__.py python/trunk/Misc/NEWS python/trunk/Modules/_elementtree.c Modified: python/trunk/Doc/library/xml.etree.elementtree.rst ============================================================================== --- python/trunk/Doc/library/xml.etree.elementtree.rst (original) +++ python/trunk/Doc/library/xml.etree.elementtree.rst Thu Mar 11 15:36:19 2010 @@ -26,7 +26,8 @@ * a number of child elements, stored in a Python sequence -To create an element instance, use the Element or SubElement factory functions. +To create an element instance, use the :class:`Element` constructor or the +:func:`SubElement` factory function. The :class:`ElementTree` class can be used to wrap an element structure, and convert it from and to XML. @@ -46,9 +47,10 @@ .. function:: Comment([text]) Comment element factory. This factory function creates a special element that - will be serialized as an XML comment. The comment string can be either an 8-bit - ASCII string or a Unicode string. *text* is a string containing the comment - string. Returns an element instance representing a comment. + will be serialized as an XML comment by the standard serializer. The comment + string can be either an 8-bit ASCII string or a Unicode string. *text* is a + string containing the comment string. Returns an element instance representing + a comment. .. function:: dump(elem) @@ -62,23 +64,20 @@ *elem* is an element tree or an individual element. -.. function:: Element(tag[, attrib][, **extra]) +.. function:: fromstring(text) - Element factory. This function returns an object implementing the standard - Element interface. The exact class or type of that object is implementation - dependent, but it will always be compatible with the _ElementInterface class in - this module. + Parses an XML section from a string constant. Same as XML. *text* is a string + containing XML data. Returns an Element instance. - The element name, attribute names, and attribute values can be either 8-bit - ASCII strings or Unicode strings. *tag* is the element name. *attrib* is an - optional dictionary, containing element attributes. *extra* contains additional - attributes, given as keyword arguments. Returns an element instance. +.. function:: fromstringlist(sequence[, parser]) -.. function:: fromstring(text) + Parses an XML document from a sequence of string fragments. *sequence* is a list + or other sequence containing XML data fragments. *parser* is an optional parser + instance. If not given, the standard :class:`XMLParser` parser is used. + Returns an Element instance. - Parses an XML section from a string constant. Same as XML. *text* is a string - containing XML data. Returns an Element instance. + .. versionadded:: 2.7 .. function:: iselement(element) @@ -87,12 +86,14 @@ element instance. Returns a true value if this is an element object. -.. function:: iterparse(source[, events]) +.. function:: iterparse(source[, events[, parser]]) Parses an XML section into an element tree incrementally, and reports what's going on to the user. *source* is a filename or file object containing XML data. *events* is a list of events to report back. If omitted, only "end" events are - reported. Returns an :term:`iterator` providing ``(event, elem)`` pairs. + reported. *parser* is an optional parser instance. If not given, the standard + :class:`XMLParser` parser is used. Returns an :term:`iterator` + providing ``(event, elem)`` pairs. .. note:: @@ -109,8 +110,8 @@ Parses an XML section into an element tree. *source* is a filename or file object containing XML data. *parser* is an optional parser instance. If not - given, the standard XMLTreeBuilder parser is used. Returns an ElementTree - instance. + given, the standard :class:`XMLParser` parser is used. Returns an + :class:`ElementTree` instance. .. function:: ProcessingInstruction(target[, text]) @@ -121,6 +122,16 @@ an element instance, representing a processing instruction. +.. function:: register_namespace(prefix, uri) + + Registers a namespace prefix. The registry is global, and any existing mapping + for either the given prefix or the namespace URI will be removed. *prefix* is a + namespace prefix. *uri* is a namespace uri. Tags and attributes in this namespace + will be serialized with the given prefix, if at all possible. + + .. versionadded:: 2.7 + + .. function:: SubElement(parent, tag[, attrib[, **extra]]) Subelement factory. This function creates an element instance, and appends it @@ -140,163 +151,201 @@ US-ASCII). Returns an encoded string containing the XML data. -.. function:: XML(text) +.. function:: tostringlist(element[, encoding]) + + Generates a string representation of an XML element, including all subelements. + *element* is an Element instance. *encoding* is the output encoding (default is + US-ASCII). Returns a sequence object containing the XML data. + + .. versionadded:: 2.7 + + +.. function:: XML(text[, parser]) Parses an XML section from a string constant. This function can be used to embed "XML literals" in Python code. *text* is a string containing XML data. - Returns an Element instance. + *parser* is an optional parser instance. If not given, the standard + :class:`XMLParser` parser is used. Returns an Element instance. -.. function:: XMLID(text) +.. function:: XMLID(text[, parser]) Parses an XML section from a string constant, and also returns a dictionary which maps from element id:s to elements. *text* is a string containing XML - data. Returns a tuple containing an Element instance and a dictionary. + data. *parser* is an optional parser instance. If not given, the standard + :class:`XMLParser` parser is used. Returns a tuple containing an Element + instance and a dictionary. -.. _elementtree-element-interface: +.. _elementtree-element-objects: -The Element Interface ---------------------- +Element Objects +--------------- -Element objects returned by Element or SubElement have the following methods -and attributes. +.. class:: Element(tag[, attrib[, **extra]]) -.. attribute:: Element.tag + Element class. This class defines the Element interface, and provides a + reference implementation of this interface. - A string identifying what kind of data this element represents (the element - type, in other words). + The element name, attribute names, and attribute values can be either 8-bit + ASCII strings or Unicode strings. *tag* is the element name. *attrib* is an + optional dictionary, containing element attributes. *extra* contains additional + attributes, given as keyword arguments. -.. attribute:: Element.text + .. attribute:: tag - The *text* attribute can be used to hold additional data associated with the - element. As the name implies this attribute is usually a string but may be any - application-specific object. If the element is created from an XML file the - attribute will contain any text found between the element tags. + A string identifying what kind of data this element represents (the element + type, in other words). -.. attribute:: Element.tail + .. attribute:: text - The *tail* attribute can be used to hold additional data associated with the - element. This attribute is usually a string but may be any application-specific - object. If the element is created from an XML file the attribute will contain - any text found after the element's end tag and before the next tag. + The *text* attribute can be used to hold additional data associated with the + element. As the name implies this attribute is usually a string but may be + any application-specific object. If the element is created from an XML file + the attribute will contain any text found between the element tags. -.. attribute:: Element.attrib + .. attribute:: tail - A dictionary containing the element's attributes. Note that while the *attrib* - value is always a real mutable Python dictionary, an ElementTree implementation - may choose to use another internal representation, and create the dictionary - only if someone asks for it. To take advantage of such implementations, use the - dictionary methods below whenever possible. + The *tail* attribute can be used to hold additional data associated with the + element. This attribute is usually a string but may be any + application-specific object. If the element is created from an XML file the + attribute will contain any text found after the element's end tag and before + the next tag. -The following dictionary-like methods work on the element attributes. + .. attribute:: attrib -.. method:: Element.clear() + A dictionary containing the element's attributes. Note that while the + *attrib* value is always a real mutable Python dictionary, an ElementTree + implementation may choose to use another internal representation, and create + the dictionary only if someone asks for it. To take advantage of such + implementations, use the dictionary methods below whenever possible. - Resets an element. This function removes all subelements, clears all - attributes, and sets the text and tail attributes to None. + The following dictionary-like methods work on the element attributes. -.. method:: Element.get(key[, default=None]) + .. method:: clear() - Gets the element attribute named *key*. + Resets an element. This function removes all subelements, clears all + attributes, and sets the text and tail attributes to None. - Returns the attribute value, or *default* if the attribute was not found. + .. method:: get(key[, default]) -.. method:: Element.items() + Gets the element attribute named *key*. - Returns the element attributes as a sequence of (name, value) pairs. The - attributes are returned in an arbitrary order. + Returns the attribute value, or *default* if the attribute was not found. -.. method:: Element.keys() + .. method:: items() - Returns the elements attribute names as a list. The names are returned in an - arbitrary order. + Returns the element attributes as a sequence of (name, value) pairs. The + attributes are returned in an arbitrary order. -.. method:: Element.set(key, value) + .. method:: keys() - Set the attribute *key* on the element to *value*. + Returns the elements attribute names as a list. The names are returned in an + arbitrary order. -The following methods work on the element's children (subelements). + .. method:: set(key, value) -.. method:: Element.append(subelement) + Set the attribute *key* on the element to *value*. - Adds the element *subelement* to the end of this elements internal list of - subelements. + The following methods work on the element's children (subelements). -.. method:: Element.find(match) + .. method:: append(subelement) - Finds the first subelement matching *match*. *match* may be a tag name or path. - Returns an element instance or ``None``. + Adds the element *subelement* to the end of this elements internal list of + subelements. -.. method:: Element.findall(match) + .. method:: extend(subelements) - Finds all subelements matching *match*. *match* may be a tag name or path. - Returns an iterable yielding all matching elements in document order. + Appends *subelements* from a sequence object with zero or more elements. + Raises :exc:`AssertionError` if a subelement is not a valid object. + .. versionadded:: 2.7 -.. method:: Element.findtext(condition[, default=None]) - Finds text for the first subelement matching *condition*. *condition* may be a - tag name or path. Returns the text content of the first matching element, or - *default* if no element was found. Note that if the matching element has no - text content an empty string is returned. + .. method:: find(match) + Finds the first subelement matching *match*. *match* may be a tag name or path. + Returns an element instance or ``None``. -.. method:: Element.getchildren() - Returns all subelements. The elements are returned in document order. + .. method:: findall(match) + Finds all subelements matching *match*. *match* may be a tag name or path. + Returns an iterable yielding all matching elements in document order. -.. method:: Element.getiterator([tag=None]) - Creates a tree iterator with the current element as the root. The iterator - iterates over this element and all elements below it, in document (depth first) - order. If *tag* is not ``None`` or ``'*'``, only elements whose tag equals - *tag* are returned from the iterator. + .. method:: findtext(condition[, default]) + Finds text for the first subelement matching *condition*. *condition* may be + a tag name or path. Returns the text content of the first matching element, + or *default* if no element was found. Note that if the matching element has + no text content an empty string is returned. -.. method:: Element.insert(index, element) - Inserts a subelement at the given position in this element. + .. method:: getchildren() + .. deprecated:: 2.7 + Use ``list(elem)`` or iteration. + + + .. method:: getiterator([tag]) -.. method:: Element.makeelement(tag, attrib) + .. deprecated:: 2.7 + Use method :meth:`Element.iter` instead. - Creates a new element object of the same type as this element. Do not call this - method, use the SubElement factory function instead. + .. method:: insert(index, element) -.. method:: Element.remove(subelement) + Inserts a subelement at the given position in this element. - Removes *subelement* from the element. Unlike the findXYZ methods this method - compares elements based on the instance identity, not on tag value or contents. -Element objects also support the following sequence type methods for working -with subelements: :meth:`__delitem__`, :meth:`__getitem__`, :meth:`__setitem__`, -:meth:`__len__`. + .. method:: iter([tag]) -Caution: Because Element objects do not define a :meth:`__nonzero__` method, -elements with no subelements will test as ``False``. :: + Creates a tree iterator with the current element as the root. The iterator + iterates over this element and all elements below it, in document (depth + first) order. If *tag* is not ``None`` or ``'*'``, only elements whose tag + equals *tag* are returned from the iterator. If the tree structure is + modified during iteration, the result is undefined. - element = root.find('foo') - if not element: # careful! - print "element not found, or element has no subelements" + .. method:: makeelement(tag, attrib) - if element is None: - print "element not found" + Creates a new element object of the same type as this element. Do not call + this method, use the SubElement factory function instead. + + + .. method:: remove(subelement) + + Removes *subelement* from the element. Unlike the findXYZ methods this + method compares elements based on the instance identity, not on tag value + or contents. + + Element objects also support the following sequence type methods for working + with subelements: :meth:`__delitem__`, :meth:`__getitem__`, :meth:`__setitem__`, + :meth:`__len__`. + + Caution: Because Element objects do not define a :meth:`__nonzero__` method, + elements with no subelements will test as ``False``. :: + + element = root.find('foo') + + if not element: # careful! + print "element not found, or element has no subelements" + + if element is None: + print "element not found" .. _elementtree-elementtree-objects: @@ -348,9 +397,8 @@ .. method:: getiterator([tag]) - Creates and returns a tree iterator for the root element. The iterator - loops over all elements in this tree, in section order. *tag* is the tag - to look for (default is to return all elements) + .. deprecated:: 2.7 + Use method :meth:`ElementTree.iter` instead. .. method:: getroot() @@ -358,19 +406,28 @@ Returns the root element for this tree. + .. method:: iter([tag]) + + Creates and returns a tree iterator for the root element. The iterator + loops over all elements in this tree, in section order. *tag* is the tag + to look for (default is to return all elements) + + .. method:: parse(source[, parser]) Loads an external XML section into this element tree. *source* is a file name or file object. *parser* is an optional parser instance. If not - given, the standard XMLTreeBuilder parser is used. Returns the section + given, the standard XMLParser parser is used. Returns the section root element. - .. method:: write(file[, encoding]) + .. method:: write(file[, encoding[, xml_declaration]]) Writes the element tree to a file, as XML. *file* is a file name, or a file object opened for writing. *encoding* [1]_ is the output encoding - (default is US-ASCII). + (default is US-ASCII). *xml_declaration* controls if an XML declaration + should be added to the file. Use False for never, True for always, None + for only if not US-ASCII or UTF-8. None is default. This is the XML file that is going to be manipulated:: @@ -389,13 +446,13 @@ >>> from xml.etree.ElementTree import ElementTree >>> tree = ElementTree() >>> tree.parse("index.xhtml") - + >>> p = tree.find("body/p") # Finds first occurrence of tag p in body >>> p - - >>> links = p.getiterator("a") # Returns list of all links + + >>> links = list(p.iter("a")) # Returns list of all links >>> links - [, ] + [, ] >>> for i in links: # Iterates through all found links ... i.attrib["target"] = "blank" >>> tree.write("output.xhtml") @@ -433,7 +490,7 @@ .. method:: close() - Flushes the parser buffers, and returns the toplevel document + Flushes the builder buffers, and returns the toplevel document element. Returns an Element instance. @@ -455,18 +512,31 @@ containing element attributes. Returns the opened element. -.. _elementtree-xmltreebuilder-objects: + In addition, a custom :class:`TreeBuilder` object can provide the + following method: -XMLTreeBuilder Objects ----------------------- + .. method:: doctype(name, pubid, system) + + Handles a doctype declaration. *name* is the doctype name. *pubid* is the + public identifier. *system* is the system identifier. This method does not + exist on the default :class:`TreeBuilder` class. + .. versionadded:: 2.7 -.. class:: XMLTreeBuilder([html,] [target]) + +.. _elementtree-xmlparser-objects: + +XMLParser Objects +----------------- + + +.. class:: XMLParser([html [, target[, encoding]]]) Element structure builder for XML source data, based on the expat parser. *html* are predefined HTML entities. This flag is not supported by the current implementation. *target* is the target object. If omitted, the builder uses an - instance of the standard TreeBuilder class. + instance of the standard TreeBuilder class. *encoding* [1]_ is optional. + If given, the value overrides the encoding specified in the XML file. .. method:: close() @@ -476,22 +546,23 @@ .. method:: doctype(name, pubid, system) - Handles a doctype declaration. *name* is the doctype name. *pubid* is the - public identifier. *system* is the system identifier. + .. deprecated:: 2.7 + Define the :meth:`TreeBuilder.doctype` method on a custom TreeBuilder + target. .. method:: feed(data) Feeds data to the parser. *data* is encoded data. -:meth:`XMLTreeBuilder.feed` calls *target*\'s :meth:`start` method +:meth:`XMLParser.feed` calls *target*\'s :meth:`start` method for each opening tag, its :meth:`end` method for each closing tag, -and data is processed by method :meth:`data`. :meth:`XMLTreeBuilder.close` +and data is processed by method :meth:`data`. :meth:`XMLParser.close` calls *target*\'s method :meth:`close`. -:class:`XMLTreeBuilder` can be used not only for building a tree structure. +:class:`XMLParser` can be used not only for building a tree structure. This is an example of counting the maximum depth of an XML file:: - >>> from xml.etree.ElementTree import XMLTreeBuilder + >>> from xml.etree.ElementTree import XMLParser >>> class MaxDepth: # The target object of the parser ... maxDepth = 0 ... depth = 0 @@ -507,7 +578,7 @@ ... return self.maxDepth ... >>> target = MaxDepth() - >>> parser = XMLTreeBuilder(target=target) + >>> parser = XMLParser(target=target) >>> exampleXml = """ ... ... @@ -530,4 +601,3 @@ appropriate standards. For example, "UTF-8" is valid, but "UTF8" is not. See http://www.w3.org/TR/2006/REC-xml11-20060816/#NT-EncodingDecl and http://www.iana.org/assignments/character-sets. - Added: python/trunk/Lib/test/samples/simple-ns.xml ============================================================================== --- (empty file) +++ python/trunk/Lib/test/samples/simple-ns.xml Thu Mar 11 15:36:19 2010 @@ -0,0 +1,7 @@ + + + + text + texttail + + Added: python/trunk/Lib/test/samples/simple.xml ============================================================================== --- (empty file) +++ python/trunk/Lib/test/samples/simple.xml Thu Mar 11 15:36:19 2010 @@ -0,0 +1,6 @@ + + + text + texttail + + Modified: python/trunk/Lib/test/test_xml_etree.py ============================================================================== --- python/trunk/Lib/test/test_xml_etree.py (original) +++ python/trunk/Lib/test/test_xml_etree.py Thu Mar 11 15:36:19 2010 @@ -1,21 +1,42 @@ # xml.etree test. This file contains enough tests to make sure that -# all included components work as they should. For a more extensive -# test suite, see the selftest script in the ElementTree distribution. +# all included components work as they should. +# Large parts are extracted from the upstream test suite. + +# IMPORTANT: the same doctests are run from "test_xml_etree_c" in +# order to ensure consistency between the C implementation and the +# Python implementation. +# +# For this purpose, the module-level "ET" symbol is temporarily +# monkey-patched when running the "test_xml_etree_c" test suite. +# Don't re-import "xml.etree.ElementTree" module in the docstring, +# except if the test is specific to the Python implementation. import sys from test import test_support -SAMPLE_XML = """ +from xml.etree import ElementTree as ET + +SAMPLE_XML = """\ - text - + text +
- subtext + subtext
""" +SAMPLE_SECTION = """\ +
+ subtext + + + + +
+""" + SAMPLE_XML_NS = """ text @@ -26,6 +47,7 @@ """ + def sanity(): """ Import sanity. @@ -39,38 +61,98 @@ if not hasattr(method, '__call__'): print method, "not callable" -def serialize(ET, elem, encoding=None): +def serialize(elem, to_string=True, **options): import StringIO file = StringIO.StringIO() tree = ET.ElementTree(elem) - if encoding: - tree.write(file, encoding) + tree.write(file, **options) + if to_string: + return file.getvalue() else: - tree.write(file) - return file.getvalue() + file.seek(0) + return file def summarize(elem): + if elem.tag == ET.Comment: + return "" return elem.tag def summarize_list(seq): - return map(summarize, seq) + return [summarize(elem) for elem in seq] + +def normalize_crlf(tree): + for elem in tree.iter(): + if elem.text: + elem.text = elem.text.replace("\r\n", "\n") + if elem.tail: + elem.tail = elem.tail.replace("\r\n", "\n") + +def check_string(string): + len(string) + for char in string: + if len(char) != 1: + print "expected one-character string, got %r" % char + new_string = string + "" + new_string = string + " " + string[:0] + +def check_mapping(mapping): + len(mapping) + keys = mapping.keys() + items = mapping.items() + for key in keys: + item = mapping[key] + mapping["key"] = "value" + if mapping["key"] != "value": + print "expected value string, got %r" % mapping["key"] + +def check_element(element): + if not ET.iselement(element): + print "not an element" + if not hasattr(element, "tag"): + print "no tag member" + if not hasattr(element, "attrib"): + print "no attrib member" + if not hasattr(element, "text"): + print "no text member" + if not hasattr(element, "tail"): + print "no tail member" + + check_string(element.tag) + check_mapping(element.attrib) + if element.text is not None: + check_string(element.text) + if element.tail is not None: + check_string(element.tail) + for elem in element: + check_element(elem) + +# -------------------------------------------------------------------- +# element tree tests def interface(): """ Test element tree interface. - >>> from xml.etree import ElementTree as ET + >>> element = ET.Element("tag") + >>> check_element(element) + >>> tree = ET.ElementTree(element) + >>> check_element(tree.getroot()) >>> element = ET.Element("tag", key="value") >>> tree = ET.ElementTree(element) + >>> repr(element) # doctest: +ELLIPSIS + "" Make sure all standard element methods exist. >>> check_method(element.append) + >>> check_method(element.extend) >>> check_method(element.insert) >>> check_method(element.remove) >>> check_method(element.getchildren) >>> check_method(element.find) + >>> check_method(element.iterfind) >>> check_method(element.findall) >>> check_method(element.findtext) >>> check_method(element.clear) @@ -78,38 +160,134 @@ >>> check_method(element.set) >>> check_method(element.keys) >>> check_method(element.items) + >>> check_method(element.iter) + >>> check_method(element.itertext) >>> check_method(element.getiterator) + These methods return an iterable. See bug 6472. + + >>> check_method(element.iter("tag").next) + >>> check_method(element.iterfind("tag").next) + >>> check_method(element.iterfind("*").next) + >>> check_method(tree.iter("tag").next) + >>> check_method(tree.iterfind("tag").next) + >>> check_method(tree.iterfind("*").next) + + These aliases are provided: + + >>> assert ET.XML == ET.fromstring + >>> assert ET.PI == ET.ProcessingInstruction + >>> assert ET.XMLParser == ET.XMLTreeBuilder + """ + +def simpleops(): + """ Basic method sanity checks. - >>> serialize(ET, element) # 1 + >>> elem = ET.XML("") + >>> serialize(elem) + '' + >>> e = ET.Element("tag2") + >>> elem.append(e) + >>> serialize(elem) + '' + >>> elem.remove(e) + >>> serialize(elem) + '' + >>> elem.insert(0, e) + >>> serialize(elem) + '' + >>> elem.remove(e) + >>> elem.extend([e]) + >>> serialize(elem) + '' + >>> elem.remove(e) + + >>> element = ET.Element("tag", key="value") + >>> serialize(element) # 1 '' >>> subelement = ET.Element("subtag") >>> element.append(subelement) - >>> serialize(ET, element) # 2 + >>> serialize(element) # 2 '' >>> element.insert(0, subelement) - >>> serialize(ET, element) # 3 + >>> serialize(element) # 3 '' >>> element.remove(subelement) - >>> serialize(ET, element) # 4 + >>> serialize(element) # 4 '' >>> element.remove(subelement) - >>> serialize(ET, element) # 5 + >>> serialize(element) # 5 '' >>> element.remove(subelement) Traceback (most recent call last): ValueError: list.remove(x): x not in list - >>> serialize(ET, element) # 6 + >>> serialize(element) # 6 '' + >>> element[0:0] = [subelement, subelement, subelement] + >>> serialize(element[1]) + '' + >>> element[1:9] == [element[1], element[2]] + True + >>> element[:9:2] == [element[0], element[2]] + True + >>> del element[1:2] + >>> serialize(element) + '' + """ + +def cdata(): + """ + Test CDATA handling (etc). + + >>> serialize(ET.XML("hello")) + 'hello' + >>> serialize(ET.XML("hello")) + 'hello' + >>> serialize(ET.XML("")) + 'hello' + """ + +# Only with Python implementation +def simplefind(): + """ + Test find methods using the elementpath fallback. + + >>> from xml.etree import ElementTree + + >>> CurrentElementPath = ElementTree.ElementPath + >>> ElementTree.ElementPath = ElementTree._SimpleElementPath() + >>> elem = ElementTree.XML(SAMPLE_XML) + >>> elem.find("tag").tag + 'tag' + >>> ElementTree.ElementTree(elem).find("tag").tag + 'tag' + >>> elem.findtext("tag") + 'text' + >>> elem.findtext("tog") + >>> elem.findtext("tog", "default") + 'default' + >>> ElementTree.ElementTree(elem).findtext("tag") + 'text' + >>> summarize_list(elem.findall("tag")) + ['tag', 'tag'] + >>> summarize_list(elem.findall(".//tag")) + ['tag', 'tag', 'tag'] + + Path syntax doesn't work in this case. + + >>> elem.find("section/tag") + >>> elem.findtext("section/tag") + >>> summarize_list(elem.findall("section/tag")) + [] + + >>> ElementTree.ElementPath = CurrentElementPath """ def find(): """ Test find methods (including xpath syntax). - >>> from xml.etree import ElementTree as ET - >>> elem = ET.XML(SAMPLE_XML) >>> elem.find("tag").tag 'tag' @@ -117,39 +295,67 @@ 'tag' >>> elem.find("section/tag").tag 'tag' + >>> elem.find("./tag").tag + 'tag' + >>> ET.ElementTree(elem).find("./tag").tag + 'tag' + >>> ET.ElementTree(elem).find("/tag").tag + 'tag' + >>> elem[2] = ET.XML(SAMPLE_SECTION) + >>> elem.find("section/nexttag").tag + 'nexttag' >>> ET.ElementTree(elem).find("section/tag").tag 'tag' + >>> ET.ElementTree(elem).find("tog") + >>> ET.ElementTree(elem).find("tog/foo") >>> elem.findtext("tag") 'text' + >>> elem.findtext("section/nexttag") + '' + >>> elem.findtext("section/nexttag", "default") + '' >>> elem.findtext("tog") >>> elem.findtext("tog", "default") 'default' >>> ET.ElementTree(elem).findtext("tag") 'text' + >>> ET.ElementTree(elem).findtext("tog/foo") + >>> ET.ElementTree(elem).findtext("tog/foo", "default") + 'default' + >>> ET.ElementTree(elem).findtext("./tag") + 'text' + >>> ET.ElementTree(elem).findtext("/tag") + 'text' >>> elem.findtext("section/tag") 'subtext' >>> ET.ElementTree(elem).findtext("section/tag") 'subtext' + >>> summarize_list(elem.findall(".")) + ['body'] >>> summarize_list(elem.findall("tag")) ['tag', 'tag'] + >>> summarize_list(elem.findall("tog")) + [] + >>> summarize_list(elem.findall("tog/foo")) + [] >>> summarize_list(elem.findall("*")) ['tag', 'tag', 'section'] >>> summarize_list(elem.findall(".//tag")) - ['tag', 'tag', 'tag'] + ['tag', 'tag', 'tag', 'tag'] >>> summarize_list(elem.findall("section/tag")) ['tag'] >>> summarize_list(elem.findall("section//tag")) - ['tag'] + ['tag', 'tag'] >>> summarize_list(elem.findall("section/*")) - ['tag'] + ['tag', 'nexttag', 'nextsection'] >>> summarize_list(elem.findall("section//*")) - ['tag'] + ['tag', 'nexttag', 'nextsection', 'tag'] >>> summarize_list(elem.findall("section/.//*")) - ['tag'] + ['tag', 'nexttag', 'nextsection', 'tag'] >>> summarize_list(elem.findall("*/*")) - ['tag'] + ['tag', 'nexttag', 'nextsection'] >>> summarize_list(elem.findall("*//*")) - ['tag'] + ['tag', 'nexttag', 'nextsection', 'tag'] >>> summarize_list(elem.findall("*/tag")) ['tag'] >>> summarize_list(elem.findall("*/./tag")) @@ -157,13 +363,40 @@ >>> summarize_list(elem.findall("./tag")) ['tag', 'tag'] >>> summarize_list(elem.findall(".//tag")) - ['tag', 'tag', 'tag'] + ['tag', 'tag', 'tag', 'tag'] >>> summarize_list(elem.findall("././tag")) ['tag', 'tag'] - >>> summarize_list(ET.ElementTree(elem).findall("/tag")) + >>> summarize_list(elem.findall(".//tag[@class]")) + ['tag', 'tag', 'tag'] + >>> summarize_list(elem.findall(".//tag[@class='a']")) + ['tag'] + >>> summarize_list(elem.findall(".//tag[@class='b']")) + ['tag', 'tag'] + >>> summarize_list(elem.findall(".//tag[@id]")) + ['tag'] + >>> summarize_list(elem.findall(".//section[tag]")) + ['section'] + >>> summarize_list(elem.findall(".//section[element]")) + [] + >>> summarize_list(elem.findall("../tag")) + [] + >>> summarize_list(elem.findall("section/../tag")) ['tag', 'tag'] >>> summarize_list(ET.ElementTree(elem).findall("./tag")) ['tag', 'tag'] + + Following example is invalid in 1.2. + A leading '*' is assumed in 1.3. + + >>> elem.findall("section//") == elem.findall("section//*") + True + + ET's Path module handles this case incorrectly; this gives + a warning in 1.3, and the behaviour will be modified in 1.4. + + >>> summarize_list(ET.ElementTree(elem).findall("/tag")) + ['tag', 'tag'] + >>> elem = ET.XML(SAMPLE_XML_NS) >>> summarize_list(elem.findall("tag")) [] @@ -173,22 +406,227 @@ ['{http://effbot.org/ns}tag', '{http://effbot.org/ns}tag', '{http://effbot.org/ns}tag'] """ -def parseliteral(): - r""" +def file_init(): + """ + >>> import StringIO - >>> from xml.etree import ElementTree as ET + >>> stringfile = StringIO.StringIO(SAMPLE_XML) + >>> tree = ET.ElementTree(file=stringfile) + >>> tree.find("tag").tag + 'tag' + >>> tree.find("section/tag").tag + 'tag' + + >>> tree = ET.ElementTree(file="samples/simple.xml") + >>> tree.find("element").tag + 'element' + >>> tree.find("element/../empty-element").tag + 'empty-element' + """ + +def bad_find(): + """ + Check bad or unsupported path expressions. + + >>> elem = ET.XML(SAMPLE_XML) + >>> elem.findall("/tag") + Traceback (most recent call last): + SyntaxError: cannot use absolute path on element + """ + +def path_cache(): + """ + Check that the path cache behaves sanely. + + >>> elem = ET.XML(SAMPLE_XML) + >>> for i in range(10): ET.ElementTree(elem).find('./'+str(i)) + >>> cache_len_10 = len(ET.ElementPath._cache) + >>> for i in range(10): ET.ElementTree(elem).find('./'+str(i)) + >>> len(ET.ElementPath._cache) == cache_len_10 + True + >>> for i in range(20): ET.ElementTree(elem).find('./'+str(i)) + >>> len(ET.ElementPath._cache) > cache_len_10 + True + >>> for i in range(600): ET.ElementTree(elem).find('./'+str(i)) + >>> len(ET.ElementPath._cache) < 500 + True + """ +def copy(): + """ + Test copy handling (etc). + + >>> import copy + >>> e1 = ET.XML("hello") + >>> e2 = copy.copy(e1) + >>> e3 = copy.deepcopy(e1) + >>> e1.find("foo").tag = "bar" + >>> serialize(e1) + 'hello' + >>> serialize(e2) + 'hello' + >>> serialize(e3) + 'hello' + + """ + +def attrib(): + """ + Test attribute handling. + + >>> elem = ET.Element("tag") + >>> elem.get("key") # 1.1 + >>> elem.get("key", "default") # 1.2 + 'default' + >>> elem.set("key", "value") + >>> elem.get("key") # 1.3 + 'value' + + >>> elem = ET.Element("tag", key="value") + >>> elem.get("key") # 2.1 + 'value' + >>> elem.attrib # 2.2 + {'key': 'value'} + + >>> attrib = {"key": "value"} + >>> elem = ET.Element("tag", attrib) + >>> attrib.clear() # check for aliasing issues + >>> elem.get("key") # 3.1 + 'value' + >>> elem.attrib # 3.2 + {'key': 'value'} + + >>> attrib = {"key": "value"} + >>> elem = ET.Element("tag", **attrib) + >>> attrib.clear() # check for aliasing issues + >>> elem.get("key") # 4.1 + 'value' + >>> elem.attrib # 4.2 + {'key': 'value'} + + >>> elem = ET.Element("tag", {"key": "other"}, key="value") + >>> elem.get("key") # 5.1 + 'value' + >>> elem.attrib # 5.2 + {'key': 'value'} + + >>> elem = ET.Element('test') + >>> elem.text = "aa" + >>> elem.set('testa', 'testval') + >>> elem.set('testb', 'test2') + >>> ET.tostring(elem) + 'aa' + >>> sorted(elem.keys()) + ['testa', 'testb'] + >>> sorted(elem.items()) + [('testa', 'testval'), ('testb', 'test2')] + >>> elem.attrib['testb'] + 'test2' + >>> elem.attrib['testb'] = 'test1' + >>> elem.attrib['testc'] = 'test2' + >>> ET.tostring(elem) + 'aa' + """ + +def makeelement(): + """ + Test makeelement handling. + + >>> elem = ET.Element("tag") + >>> attrib = {"key": "value"} + >>> subelem = elem.makeelement("subtag", attrib) + >>> if subelem.attrib is attrib: + ... print "attrib aliasing" + >>> elem.append(subelem) + >>> serialize(elem) + '' + + >>> elem.clear() + >>> serialize(elem) + '' + >>> elem.append(subelem) + >>> serialize(elem) + '' + >>> elem.extend([subelem, subelem]) + >>> serialize(elem) + '' + >>> elem[:] = [subelem] + >>> serialize(elem) + '' + >>> elem[:] = tuple([subelem]) + >>> serialize(elem) + '' + + """ + +def parsefile(): + """ + Test parsing from file. + + >>> tree = ET.parse("samples/simple.xml") + >>> normalize_crlf(tree) + >>> tree.write(sys.stdout) + + text + texttail + + + >>> tree = ET.parse("samples/simple-ns.xml") + >>> normalize_crlf(tree) + >>> tree.write(sys.stdout) + + text + texttail + + + + >>> parser = ET.XMLParser() + >>> parser.version # XXX: Upgrade to 2.0.1? + 'Expat 2.0.0' + >>> parser.feed(open("samples/simple.xml").read()) + >>> print serialize(parser.close()) + + text + texttail + + + + >>> parser = ET.XMLTreeBuilder() # 1.2 compatibility + >>> parser.feed(open("samples/simple.xml").read()) + >>> print serialize(parser.close()) + + text + texttail + + + + >>> target = ET.TreeBuilder() + >>> parser = ET.XMLParser(target=target) + >>> parser.feed(open("samples/simple.xml").read()) + >>> print serialize(parser.close()) + + text + texttail + + + """ + +def parseliteral(): + r""" >>> element = ET.XML("text") >>> ET.ElementTree(element).write(sys.stdout) text >>> element = ET.fromstring("text") >>> ET.ElementTree(element).write(sys.stdout) text + >>> sequence = ["", "text"] + >>> element = ET.fromstringlist(sequence) >>> print ET.tostring(element) text - >>> print ET.tostring(element, "ascii") - + >>> print "".join(ET.tostringlist(element)) text + >>> ET.tostring(element, "ascii") + "\ntext" >>> _, ids = ET.XMLID("text") >>> len(ids) 0 @@ -199,26 +637,577 @@ 'body' """ +def iterparse(): + """ + Test iterparse interface. + + >>> iterparse = ET.iterparse + + >>> context = iterparse("samples/simple.xml") + >>> action, elem = next(context) + >>> print action, elem.tag + end element + >>> for action, elem in context: + ... print action, elem.tag + end element + end empty-element + end root + >>> context.root.tag + 'root' + + >>> context = iterparse("samples/simple-ns.xml") + >>> for action, elem in context: + ... print action, elem.tag + end {namespace}element + end {namespace}element + end {namespace}empty-element + end {namespace}root + + >>> events = () + >>> context = iterparse("samples/simple.xml", events) + >>> for action, elem in context: + ... print action, elem.tag + + >>> events = () + >>> context = iterparse("samples/simple.xml", events=events) + >>> for action, elem in context: + ... print action, elem.tag + + >>> events = ("start", "end") + >>> context = iterparse("samples/simple.xml", events) + >>> for action, elem in context: + ... print action, elem.tag + start root + start element + end element + start element + end element + start empty-element + end empty-element + end root + + >>> events = ("start", "end", "start-ns", "end-ns") + >>> context = iterparse("samples/simple-ns.xml", events) + >>> for action, elem in context: + ... if action in ("start", "end"): + ... print action, elem.tag + ... else: + ... print action, elem + start-ns ('', 'namespace') + start {namespace}root + start {namespace}element + end {namespace}element + start {namespace}element + end {namespace}element + start {namespace}empty-element + end {namespace}empty-element + end {namespace}root + end-ns None + + >>> events = ("start", "end", "bogus") + >>> context = iterparse("samples/simple.xml", events) + Traceback (most recent call last): + ValueError: unknown event 'bogus' + + >>> import StringIO + + >>> source = StringIO.StringIO( + ... "\\n" + ... "text\\n") + >>> events = ("start-ns",) + >>> context = iterparse(source, events) + >>> for action, elem in context: + ... print action, elem + start-ns ('', u'http://\\xe9ffbot.org/ns') + start-ns (u'cl\\xe9', 'http://effbot.org/ns') + + >>> source = StringIO.StringIO("junk") + >>> try: + ... for action, elem in iterparse(source): + ... print action, elem.tag + ... except ET.ParseError, v: + ... print v + junk after document element: line 1, column 12 + """ + +def writefile(): + """ + >>> elem = ET.Element("tag") + >>> elem.text = "text" + >>> serialize(elem) + 'text' + >>> ET.SubElement(elem, "subtag").text = "subtext" + >>> serialize(elem) + 'textsubtext' + + Test tag suppression + >>> elem.tag = None + >>> serialize(elem) + 'textsubtext' + >>> elem.insert(0, ET.Comment("comment")) + >>> serialize(elem) # assumes 1.3 + 'textsubtext' + >>> elem[0] = ET.PI("key", "value") + >>> serialize(elem) + 'textsubtext' + """ -def check_encoding(ET, encoding): +def custom_builder(): + """ + Test parser w. custom builder. + + >>> class Builder: + ... def start(self, tag, attrib): + ... print "start", tag + ... def end(self, tag): + ... print "end", tag + ... def data(self, text): + ... pass + >>> builder = Builder() + >>> parser = ET.XMLParser(target=builder) + >>> parser.feed(open("samples/simple.xml", "r").read()) + start root + start element + end element + start element + end element + start empty-element + end empty-element + end root + + >>> class Builder: + ... def start(self, tag, attrib): + ... print "start", tag + ... def end(self, tag): + ... print "end", tag + ... def data(self, text): + ... pass + ... def pi(self, target, data): + ... print "pi", target, repr(data) + ... def comment(self, data): + ... print "comment", repr(data) + >>> builder = Builder() + >>> parser = ET.XMLParser(target=builder) + >>> parser.feed(open("samples/simple-ns.xml", "r").read()) + pi pi 'data' + comment ' comment ' + start {namespace}root + start {namespace}element + end {namespace}element + start {namespace}element + end {namespace}element + start {namespace}empty-element + end {namespace}empty-element + end {namespace}root + + """ + +def getchildren(): + """ + Test Element.getchildren() + + >>> tree = ET.parse(open("samples/simple.xml", "r")) + >>> for elem in tree.getroot().iter(): + ... summarize_list(elem.getchildren()) + ['element', 'element', 'empty-element'] + [] + [] + [] + >>> for elem in tree.getiterator(): + ... summarize_list(elem.getchildren()) + ['element', 'element', 'empty-element'] + [] + [] + [] + + >>> elem = ET.XML(SAMPLE_XML) + >>> len(elem.getchildren()) + 3 + >>> len(elem[2].getchildren()) + 1 + >>> elem[:] == elem.getchildren() + True + >>> child1 = elem[0] + >>> child2 = elem[2] + >>> del elem[1:2] + >>> len(elem.getchildren()) + 2 + >>> child1 == elem[0] + True + >>> child2 == elem[1] + True + >>> elem[0:2] = [child2, child1] + >>> child2 == elem[0] + True + >>> child1 == elem[1] + True + >>> child1 == elem[0] + False + >>> elem.clear() + >>> elem.getchildren() + [] """ - >>> from xml.etree import ElementTree as ET - >>> check_encoding(ET, "ascii") - >>> check_encoding(ET, "us-ascii") - >>> check_encoding(ET, "iso-8859-1") - >>> check_encoding(ET, "iso-8859-15") - >>> check_encoding(ET, "cp437") - >>> check_encoding(ET, "mac-roman") +def writestring(): + """ + >>> elem = ET.XML("text") + >>> ET.tostring(elem) + 'text' + >>> elem = ET.fromstring("text") + >>> ET.tostring(elem) + 'text' + """ + +def check_encoding(encoding): + """ + >>> check_encoding("ascii") + >>> check_encoding("us-ascii") + >>> check_encoding("iso-8859-1") + >>> check_encoding("iso-8859-15") + >>> check_encoding("cp437") + >>> check_encoding("mac-roman") """ ET.XML("" % encoding) +def encoding(): + r""" + Test encoding issues. + + >>> elem = ET.Element("tag") + >>> elem.text = u"abc" + >>> serialize(elem) + 'abc' + >>> serialize(elem, encoding="utf-8") + 'abc' + >>> serialize(elem, encoding="us-ascii") + 'abc' + >>> serialize(elem, encoding="iso-8859-1") + "\nabc" + + >>> elem.text = "<&\"\'>" + >>> serialize(elem) + '<&"\'>' + >>> serialize(elem, encoding="utf-8") + '<&"\'>' + >>> serialize(elem, encoding="us-ascii") # cdata characters + '<&"\'>' + >>> serialize(elem, encoding="iso-8859-1") + '\n<&"\'>' + + >>> elem.attrib["key"] = "<&\"\'>" + >>> elem.text = None + >>> serialize(elem) + '' + >>> serialize(elem, encoding="utf-8") + '' + >>> serialize(elem, encoding="us-ascii") + '' + >>> serialize(elem, encoding="iso-8859-1") + '\n' + + >>> elem.text = u'\xe5\xf6\xf6<>' + >>> elem.attrib.clear() + >>> serialize(elem) + 'åöö<>' + >>> serialize(elem, encoding="utf-8") + '\xc3\xa5\xc3\xb6\xc3\xb6<>' + >>> serialize(elem, encoding="us-ascii") + 'åöö<>' + >>> serialize(elem, encoding="iso-8859-1") + "\n\xe5\xf6\xf6<>" + + >>> elem.attrib["key"] = u'\xe5\xf6\xf6<>' + >>> elem.text = None + >>> serialize(elem) + '' + >>> serialize(elem, encoding="utf-8") + '' + >>> serialize(elem, encoding="us-ascii") + '' + >>> serialize(elem, encoding="iso-8859-1") + '\n' + """ + +def methods(): + r""" + Test serialization methods. + + >>> e = ET.XML("") + >>> e.tail = "\n" + >>> serialize(e) + '\n' + >>> serialize(e, method=None) + '\n' + >>> serialize(e, method="xml") + '\n' + >>> serialize(e, method="html") + '\n' + >>> serialize(e, method="text") + '1 < 2\n' + """ + +def iterators(): + """ + Test iterators. + + >>> e = ET.XML("this is a paragraph...") + >>> summarize_list(e.iter()) + ['html', 'body', 'i'] + >>> summarize_list(e.find("body").iter()) + ['body', 'i'] + >>> summarize(next(e.iter())) + 'html' + >>> "".join(e.itertext()) + 'this is a paragraph...' + >>> "".join(e.find("body").itertext()) + 'this is a paragraph.' + >>> next(e.itertext()) + 'this is a ' + + Method iterparse should return an iterator. See bug 6472. + + >>> sourcefile = serialize(e, to_string=False) + >>> next(ET.iterparse(sourcefile)) # doctest: +ELLIPSIS + ('end', ) + + >>> tree = ET.ElementTree(None) + >>> tree.iter() + Traceback (most recent call last): + AttributeError: 'NoneType' object has no attribute 'iter' + """ + +ENTITY_XML = """\ + +%user-entities; +]> +&entity; +""" + +def entity(): + """ + Test entity handling. + + 1) good entities + + >>> e = ET.XML("test") + >>> serialize(e) + 'test' + + 2) bad entities + + >>> ET.XML("&entity;") + Traceback (most recent call last): + ParseError: undefined entity: line 1, column 10 + + >>> ET.XML(ENTITY_XML) + Traceback (most recent call last): + ParseError: undefined entity &entity;: line 5, column 10 + + 3) custom entity + + >>> parser = ET.XMLParser() + >>> parser.entity["entity"] = "text" + >>> parser.feed(ENTITY_XML) + >>> root = parser.close() + >>> serialize(root) + 'text' + """ + +def error(xml): + """ + + Test error handling. + + >>> issubclass(ET.ParseError, SyntaxError) + True + >>> error("foo").position + (1, 0) + >>> error("&foo;").position + (1, 5) + >>> error("foobar<").position + (1, 6) + + """ + try: + ET.XML(xml) + except ET.ParseError: + return sys.exc_value + +def namespace(): + """ + Test namespace issues. + + 1) xml namespace + + >>> elem = ET.XML("") + >>> serialize(elem) # 1.1 + '' + + 2) other "well-known" namespaces + + >>> elem = ET.XML("") + >>> serialize(elem) # 2.1 + '' + + >>> elem = ET.XML("") + >>> serialize(elem) # 2.2 + '' + + >>> elem = ET.XML("") + >>> serialize(elem) # 2.3 + '' + + 3) unknown namespaces + >>> elem = ET.XML(SAMPLE_XML_NS) + >>> print serialize(elem) + + text + + + subtext + + + """ + +def qname(): + """ + Test QName handling. + + 1) decorated tags + + >>> elem = ET.Element("{uri}tag") + >>> serialize(elem) # 1.1 + '' + >>> elem = ET.Element(ET.QName("{uri}tag")) + >>> serialize(elem) # 1.2 + '' + >>> elem = ET.Element(ET.QName("uri", "tag")) + >>> serialize(elem) # 1.3 + '' + + 2) decorated attributes + + >>> elem.clear() + >>> elem.attrib["{uri}key"] = "value" + >>> serialize(elem) # 2.1 + '' + + >>> elem.clear() + >>> elem.attrib[ET.QName("{uri}key")] = "value" + >>> serialize(elem) # 2.2 + '' + + 3) decorated values are not converted by default, but the + QName wrapper can be used for values + + >>> elem.clear() + >>> elem.attrib["{uri}key"] = "{uri}value" + >>> serialize(elem) # 3.1 + '' + + >>> elem.clear() + >>> elem.attrib["{uri}key"] = ET.QName("{uri}value") + >>> serialize(elem) # 3.2 + '' + + >>> elem.clear() + >>> subelem = ET.Element("tag") + >>> subelem.attrib["{uri1}key"] = ET.QName("{uri2}value") + >>> elem.append(subelem) + >>> elem.append(subelem) + >>> serialize(elem) # 3.3 + '' + + 4) Direct QName tests + + >>> str(ET.QName('ns', 'tag')) + '{ns}tag' + >>> str(ET.QName('{ns}tag')) + '{ns}tag' + >>> q1 = ET.QName('ns', 'tag') + >>> q2 = ET.QName('ns', 'tag') + >>> q1 == q2 + True + >>> q2 = ET.QName('ns', 'other-tag') + >>> q1 == q2 + False + >>> q1 == 'ns:tag' + False + >>> q1 == '{ns}tag' + True + """ + +def doctype_public(): + """ + Test PUBLIC doctype. + + >>> elem = ET.XML('' + ... 'text') + + """ + +def xpath_tokenizer(p): + """ + Test the XPath tokenizer. + + >>> # tests from the xml specification + >>> xpath_tokenizer("*") + ['*'] + >>> xpath_tokenizer("text()") + ['text', '()'] + >>> xpath_tokenizer("@name") + ['@', 'name'] + >>> xpath_tokenizer("@*") + ['@', '*'] + >>> xpath_tokenizer("para[1]") + ['para', '[', '1', ']'] + >>> xpath_tokenizer("para[last()]") + ['para', '[', 'last', '()', ']'] + >>> xpath_tokenizer("*/para") + ['*', '/', 'para'] + >>> xpath_tokenizer("/doc/chapter[5]/section[2]") + ['/', 'doc', '/', 'chapter', '[', '5', ']', '/', 'section', '[', '2', ']'] + >>> xpath_tokenizer("chapter//para") + ['chapter', '//', 'para'] + >>> xpath_tokenizer("//para") + ['//', 'para'] + >>> xpath_tokenizer("//olist/item") + ['//', 'olist', '/', 'item'] + >>> xpath_tokenizer(".") + ['.'] + >>> xpath_tokenizer(".//para") + ['.', '//', 'para'] + >>> xpath_tokenizer("..") + ['..'] + >>> xpath_tokenizer("../@lang") + ['..', '/', '@', 'lang'] + >>> xpath_tokenizer("chapter[title]") + ['chapter', '[', 'title', ']'] + >>> xpath_tokenizer("employee[@secretary and @assistant]") + ['employee', '[', '@', 'secretary', '', 'and', '', '@', 'assistant', ']'] + + >>> # additional tests + >>> xpath_tokenizer("{http://spam}egg") + ['{http://spam}egg'] + >>> xpath_tokenizer("./spam.egg") + ['.', '/', 'spam.egg'] + >>> xpath_tokenizer(".//{http://spam}egg") + ['.', '//', '{http://spam}egg'] + """ + from xml.etree import ElementPath + out = [] + for op, tag in ElementPath.xpath_tokenizer(p): + out.append(op or tag) + return out + def processinginstruction(): """ Test ProcessingInstruction directly - >>> from xml.etree import ElementTree as ET - >>> ET.tostring(ET.ProcessingInstruction('test', 'instruction')) '' >>> ET.tostring(ET.PI('test', 'instruction')) @@ -228,7 +1217,8 @@ >>> ET.tostring(ET.PI('test', '')) '?>' - + >>> ET.tostring(ET.PI('test', u'\xe3'), 'latin1') + "\\n\\xe3?>" """ # @@ -318,7 +1308,7 @@ >>> document = xinclude_loader("C1.xml") >>> ElementInclude.include(document, xinclude_loader) - >>> print serialize(ET, document) # C1 + >>> print serialize(document) # C1

120 Mz is adequate for an average home user.

@@ -332,7 +1322,7 @@ >>> document = xinclude_loader("C2.xml") >>> ElementInclude.include(document, xinclude_loader) - >>> print serialize(ET, document) # C2 + >>> print serialize(document) # C2

This document has been accessed 324387 times.

@@ -342,7 +1332,7 @@ >>> document = xinclude_loader("C3.xml") >>> ElementInclude.include(document, xinclude_loader) - >>> print serialize(ET, document) # C3 + >>> print serialize(document) # C3

The following is the source of the "data.xml" resource:

<?xml version='1.0'?> @@ -359,13 +1349,496 @@ >>> ElementInclude.include(document, xinclude_loader) Traceback (most recent call last): IOError: resource not found - >>> # print serialize(ET, document) # C5 + >>> # print serialize(document) # C5 + """ +def xinclude_default(): """ + >>> from xml.etree import ElementInclude + + >>> document = xinclude_loader("default.xml") + >>> ElementInclude.include(document) + >>> print serialize(document) # default + +

Example.

+ + text + texttail + + +
+ """ + +# +# badly formatted xi:include tags + +XINCLUDE_BAD = {} + +XINCLUDE_BAD["B1.xml"] = """\ + + +

120 Mz is adequate for an average home user.

+ +
+""" + +XINCLUDE_BAD["B2.xml"] = """\ + +
+ +
+""" + +def xinclude_failures(): + r""" + Test failure to locate included XML file. + + >>> from xml.etree import ElementInclude + + >>> def none_loader(href, parser, encoding=None): + ... return None + + >>> document = ET.XML(XINCLUDE["C1.xml"]) + >>> ElementInclude.include(document, loader=none_loader) + Traceback (most recent call last): + FatalIncludeError: cannot load 'disclaimer.xml' as 'xml' + + Test failure to locate included text file. + + >>> document = ET.XML(XINCLUDE["C2.xml"]) + >>> ElementInclude.include(document, loader=none_loader) + Traceback (most recent call last): + FatalIncludeError: cannot load 'count.txt' as 'text' + + Test bad parse type. + + >>> document = ET.XML(XINCLUDE_BAD["B1.xml"]) + >>> ElementInclude.include(document, loader=none_loader) + Traceback (most recent call last): + FatalIncludeError: unknown parse type in xi:include tag ('BAD_TYPE') + + Test xi:fallback outside xi:include. -def test_main(): + >>> document = ET.XML(XINCLUDE_BAD["B2.xml"]) + >>> ElementInclude.include(document, loader=none_loader) + Traceback (most recent call last): + FatalIncludeError: xi:fallback tag must be child of xi:include ('{http://www.w3.org/2001/XInclude}fallback') + """ + +# -------------------------------------------------------------------- +# reported bugs + +def bug_xmltoolkit21(): + """ + + marshaller gives obscure errors for non-string values + + >>> elem = ET.Element(123) + >>> serialize(elem) # tag + Traceback (most recent call last): + TypeError: cannot serialize 123 (type int) + >>> elem = ET.Element("elem") + >>> elem.text = 123 + >>> serialize(elem) # text + Traceback (most recent call last): + TypeError: cannot serialize 123 (type int) + >>> elem = ET.Element("elem") + >>> elem.tail = 123 + >>> serialize(elem) # tail + Traceback (most recent call last): + TypeError: cannot serialize 123 (type int) + >>> elem = ET.Element("elem") + >>> elem.set(123, "123") + >>> serialize(elem) # attribute key + Traceback (most recent call last): + TypeError: cannot serialize 123 (type int) + >>> elem = ET.Element("elem") + >>> elem.set("123", 123) + >>> serialize(elem) # attribute value + Traceback (most recent call last): + TypeError: cannot serialize 123 (type int) + + """ + +def bug_xmltoolkit25(): + """ + + typo in ElementTree.findtext + + >>> elem = ET.XML(SAMPLE_XML) + >>> tree = ET.ElementTree(elem) + >>> tree.findtext("tag") + 'text' + >>> tree.findtext("section/tag") + 'subtext' + + """ + +def bug_xmltoolkit28(): + """ + + .//tag causes exceptions + + >>> tree = ET.XML("
") + >>> summarize_list(tree.findall(".//thead")) + [] + >>> summarize_list(tree.findall(".//tbody")) + ['tbody'] + + """ + +def bug_xmltoolkitX1(): + """ + + dump() doesn't flush the output buffer + + >>> tree = ET.XML("
") + >>> ET.dump(tree); sys.stdout.write("tail") +
+ tail + + """ + +def bug_xmltoolkit39(): + """ + + non-ascii element and attribute names doesn't work + + >>> tree = ET.XML("") + >>> ET.tostring(tree, "utf-8") + '' + + >>> tree = ET.XML("") + >>> tree.attrib + {u'\\xe4ttr': u'v\\xe4lue'} + >>> ET.tostring(tree, "utf-8") + '' + + >>> tree = ET.XML("text") + >>> ET.tostring(tree, "utf-8") + 'text' + + >>> tree = ET.Element(u"t\u00e4g") + >>> ET.tostring(tree, "utf-8") + '' + + >>> tree = ET.Element("tag") + >>> tree.set(u"\u00e4ttr", u"v\u00e4lue") + >>> ET.tostring(tree, "utf-8") + '' + + """ + +def bug_xmltoolkit54(): + """ + + problems handling internally defined entities + + >>> e = ET.XML("]>&ldots;") + >>> serialize(e) + '' + + """ + +def bug_xmltoolkit55(): + """ + + make sure we're reporting the first error, not the last + + >>> e = ET.XML("&ldots;&ndots;&rdots;") + Traceback (most recent call last): + ParseError: undefined entity &ldots;: line 1, column 36 + + """ + +class ExceptionFile: + def read(self, x): + raise IOError + +def xmltoolkit60(): + """ + + Handle crash in stream source. + >>> tree = ET.parse(ExceptionFile()) + Traceback (most recent call last): + IOError + + """ + +XMLTOOLKIT62_DOC = """ + + + +A new cultivar of Begonia plant named ‘BCT9801BEG’. + +""" + + +def xmltoolkit62(): + """ + + Don't crash when using custom entities. + + >>> xmltoolkit62() + u'A new cultivar of Begonia plant named \u2018BCT9801BEG\u2019.' + + """ + ENTITIES = {u'rsquo': u'\u2019', u'lsquo': u'\u2018'} + parser = ET.XMLTreeBuilder() + parser.entity.update(ENTITIES) + parser.feed(XMLTOOLKIT62_DOC) + t = parser.close() + return t.find('.//paragraph').text + +def xmltoolkit63(): + """ + + Check reference leak. + >>> xmltoolkit63() + >>> count = sys.getrefcount(None) + >>> for i in range(1000): + ... xmltoolkit63() + >>> sys.getrefcount(None) - count + 0 + + """ + tree = ET.TreeBuilder() + tree.start("tag", {}) + tree.data("text") + tree.end("tag") + +# -------------------------------------------------------------------- + + +def bug_200708_newline(): + r""" + + Preserve newlines in attributes. + + >>> e = ET.Element('SomeTag', text="def _f():\n return 3\n") + >>> ET.tostring(e) + '' + >>> ET.XML(ET.tostring(e)).get("text") + 'def _f():\n return 3\n' + >>> ET.tostring(ET.XML(ET.tostring(e))) + '' + + """ + +def bug_200708_close(): + """ + + Test default builder. + >>> parser = ET.XMLParser() # default + >>> parser.feed("some text") + >>> summarize(parser.close()) + 'element' + + Test custom builder. + >>> class EchoTarget: + ... def close(self): + ... return ET.Element("element") # simulate root + >>> parser = ET.XMLParser(EchoTarget()) + >>> parser.feed("some text") + >>> summarize(parser.close()) + 'element' + + """ + +def bug_200709_default_namespace(): + """ + + >>> e = ET.Element("{default}elem") + >>> s = ET.SubElement(e, "{default}elem") + >>> serialize(e, default_namespace="default") # 1 + '' + + >>> e = ET.Element("{default}elem") + >>> s = ET.SubElement(e, "{default}elem") + >>> s = ET.SubElement(e, "{not-default}elem") + >>> serialize(e, default_namespace="default") # 2 + '' + + >>> e = ET.Element("{default}elem") + >>> s = ET.SubElement(e, "{default}elem") + >>> s = ET.SubElement(e, "elem") # unprefixed name + >>> serialize(e, default_namespace="default") # 3 + Traceback (most recent call last): + ValueError: cannot use non-qualified names with default_namespace option + + """ + +def bug_200709_register_namespace(): + """ + + >>> ET.tostring(ET.Element("{http://namespace.invalid/does/not/exist/}title")) + '' + >>> ET.register_namespace("foo", "http://namespace.invalid/does/not/exist/") + >>> ET.tostring(ET.Element("{http://namespace.invalid/does/not/exist/}title")) + '' + + And the Dublin Core namespace is in the default list: + + >>> ET.tostring(ET.Element("{http://purl.org/dc/elements/1.1/}title")) + '' + + """ + +def bug_200709_element_comment(): + """ + + Not sure if this can be fixed, really (since the serializer needs + ET.Comment, not cET.comment). + + >>> a = ET.Element('a') + >>> a.append(ET.Comment('foo')) + >>> a[0].tag == ET.Comment + True + + >>> a = ET.Element('a') + >>> a.append(ET.PI('foo')) + >>> a[0].tag == ET.PI + True + + """ + +def bug_200709_element_insert(): + """ + + >>> a = ET.Element('a') + >>> b = ET.SubElement(a, 'b') + >>> c = ET.SubElement(a, 'c') + >>> d = ET.Element('d') + >>> a.insert(0, d) + >>> summarize_list(a) + ['d', 'b', 'c'] + >>> a.insert(-1, d) + >>> summarize_list(a) + ['d', 'b', 'd', 'c'] + + """ + +def bug_200709_iter_comment(): + """ + + >>> a = ET.Element('a') + >>> b = ET.SubElement(a, 'b') + >>> comment_b = ET.Comment("TEST-b") + >>> b.append(comment_b) + >>> summarize_list(a.iter(ET.Comment)) + [''] + + """ + +# -------------------------------------------------------------------- +# reported on bugs.python.org + +def bug_1534630(): + """ + + >>> bob = ET.TreeBuilder() + >>> e = bob.data("data") + >>> e = bob.start("tag", {}) + >>> e = bob.end("tag") + >>> e = bob.close() + >>> serialize(e) + '' + + """ + +def check_issue6233(): + """ + + >>> e = ET.XML("t\\xc3\\xa3g") + >>> ET.tostring(e, 'ascii') + "\\ntãg" + >>> e = ET.XML("t\\xe3g") + >>> ET.tostring(e, 'ascii') + "\\ntãg" + + """ + +def check_issue3151(): + """ + + >>> e = ET.XML('') + >>> e.tag + '{${stuff}}localname' + >>> t = ET.ElementTree(e) + >>> ET.tostring(e) + '' + + """ + +def check_issue6565(): + """ + + >>> elem = ET.XML("") + >>> summarize_list(elem) + ['tag'] + >>> newelem = ET.XML(SAMPLE_XML) + >>> elem[:] = newelem[:] + >>> summarize_list(elem) + ['tag', 'tag', 'section'] + + """ + +# -------------------------------------------------------------------- + + +class CleanContext(object): + """Provide default namespace mapping, path cache and working directory. + + Save and restore the default namespace mapping and the path cache. + Change directory to the "Lib/test/" directory: some tests open + xml files in the "samples/" directory relative to the test module. + """ + def __enter__(self): + import os + from xml.etree import ElementTree + self._nsmap = ElementTree._namespace_map + self._path_cache = ElementTree.ElementPath._cache + self._previous_cwd = os.getcwd() + # Copy the default namespace mapping + ElementTree._namespace_map = self._nsmap.copy() + # Copy the path cache (should be empty) + ElementTree.ElementPath._cache = self._path_cache.copy() + # Change directory to Lib/test/ + os.chdir(os.path.dirname(__file__)) + + def __exit__(self, *args): + import os + from xml.etree import ElementTree + # Restore working directory + os.chdir(self._previous_cwd) + # Restore mapping and path cache + ElementTree._namespace_map = self._nsmap + ElementTree.ElementPath._cache = self._path_cache + + +def test_main(module_name='xml.etree.ElementTree'): + import warnings from test import test_xml_etree - test_support.run_doctest(test_xml_etree, verbosity=True) + def ignore(message, category=DeprecationWarning): + warnings.filterwarnings("ignore", message, category) + # The same doctests are used for both the Python and the C implementations + assert test_xml_etree.ET.__name__ == module_name + with warnings.catch_warnings(), CleanContext(): + # Search behaviour is broken if search path starts with "/". + ignore("This search is broken in 1.3 and earlier, and will be fixed " + "in a future version. If you rely on the current behaviour, " + "change it to '.+'", FutureWarning) + # Element.getchildren() and Element.getiterator() are deprecated. + ignore("This method will be removed in future versions. " + "Use .+ instead.") + # XMLParser.doctype() is deprecated. + ignore("This method of XMLParser is deprecated. " + "Define doctype.. method on the TreeBuilder target.") + + test_support.run_doctest(test_xml_etree, verbosity=True) + + # The module should not be changed by the tests + assert test_xml_etree.ET.__name__ == module_name if __name__ == '__main__': test_main() Modified: python/trunk/Lib/test/test_xml_etree_c.py ============================================================================== --- python/trunk/Lib/test/test_xml_etree_c.py (original) +++ python/trunk/Lib/test/test_xml_etree_c.py Thu Mar 11 15:36:19 2010 @@ -1,30 +1,11 @@ # xml.etree test for cElementTree -import sys - from test import test_support -ET = test_support.import_module('xml.etree.cElementTree') +cET = test_support.import_module('xml.etree.cElementTree') + -SAMPLE_XML = """ - - text - -
- subtext -
- -""" - -SAMPLE_XML_NS = """ - - text - -
- subtext -
- -""" +# cElementTree specific tests def sanity(): """ @@ -33,191 +14,21 @@ >>> from xml.etree import cElementTree """ -def check_method(method): - if not hasattr(method, '__call__'): - print method, "not callable" - -def serialize(ET, elem, encoding=None): - import StringIO - file = StringIO.StringIO() - tree = ET.ElementTree(elem) - if encoding: - tree.write(file, encoding) - else: - tree.write(file) - return file.getvalue() - -def summarize(elem): - return elem.tag - -def summarize_list(seq): - return map(summarize, seq) - -def interface(): - """ - Test element tree interface. - - >>> element = ET.Element("tag", key="value") - >>> tree = ET.ElementTree(element) - - Make sure all standard element methods exist. - - >>> check_method(element.append) - >>> check_method(element.insert) - >>> check_method(element.remove) - >>> check_method(element.getchildren) - >>> check_method(element.find) - >>> check_method(element.findall) - >>> check_method(element.findtext) - >>> check_method(element.clear) - >>> check_method(element.get) - >>> check_method(element.set) - >>> check_method(element.keys) - >>> check_method(element.items) - >>> check_method(element.getiterator) - - Basic method sanity checks. - - >>> serialize(ET, element) # 1 - '' - >>> subelement = ET.Element("subtag") - >>> element.append(subelement) - >>> serialize(ET, element) # 2 - '' - >>> element.insert(0, subelement) - >>> serialize(ET, element) # 3 - '' - >>> element.remove(subelement) - >>> serialize(ET, element) # 4 - '' - >>> element.remove(subelement) - >>> serialize(ET, element) # 5 - '' - >>> element.remove(subelement) - Traceback (most recent call last): - ValueError: list.remove(x): x not in list - >>> serialize(ET, element) # 6 - '' - """ - -def find(): - """ - Test find methods (including xpath syntax). - - >>> elem = ET.XML(SAMPLE_XML) - >>> elem.find("tag").tag - 'tag' - >>> ET.ElementTree(elem).find("tag").tag - 'tag' - >>> elem.find("section/tag").tag - 'tag' - >>> ET.ElementTree(elem).find("section/tag").tag - 'tag' - >>> elem.findtext("tag") - 'text' - >>> elem.findtext("tog") - >>> elem.findtext("tog", "default") - 'default' - >>> ET.ElementTree(elem).findtext("tag") - 'text' - >>> elem.findtext("section/tag") - 'subtext' - >>> ET.ElementTree(elem).findtext("section/tag") - 'subtext' - >>> summarize_list(elem.findall("tag")) - ['tag', 'tag'] - >>> summarize_list(elem.findall("*")) - ['tag', 'tag', 'section'] - >>> summarize_list(elem.findall(".//tag")) - ['tag', 'tag', 'tag'] - >>> summarize_list(elem.findall("section/tag")) - ['tag'] - >>> summarize_list(elem.findall("section//tag")) - ['tag'] - >>> summarize_list(elem.findall("section/*")) - ['tag'] - >>> summarize_list(elem.findall("section//*")) - ['tag'] - >>> summarize_list(elem.findall("section/.//*")) - ['tag'] - >>> summarize_list(elem.findall("*/*")) - ['tag'] - >>> summarize_list(elem.findall("*//*")) - ['tag'] - >>> summarize_list(elem.findall("*/tag")) - ['tag'] - >>> summarize_list(elem.findall("*/./tag")) - ['tag'] - >>> summarize_list(elem.findall("./tag")) - ['tag', 'tag'] - >>> summarize_list(elem.findall(".//tag")) - ['tag', 'tag', 'tag'] - >>> summarize_list(elem.findall("././tag")) - ['tag', 'tag'] - >>> summarize_list(ET.ElementTree(elem).findall("/tag")) - ['tag', 'tag'] - >>> summarize_list(ET.ElementTree(elem).findall("./tag")) - ['tag', 'tag'] - >>> elem = ET.XML(SAMPLE_XML_NS) - >>> summarize_list(elem.findall("tag")) - [] - >>> summarize_list(elem.findall("{http://effbot.org/ns}tag")) - ['{http://effbot.org/ns}tag', '{http://effbot.org/ns}tag'] - >>> summarize_list(elem.findall(".//{http://effbot.org/ns}tag")) - ['{http://effbot.org/ns}tag', '{http://effbot.org/ns}tag', '{http://effbot.org/ns}tag'] - """ - -def parseliteral(): - r""" - - >>> element = ET.XML("text") - >>> ET.ElementTree(element).write(sys.stdout) - text - >>> element = ET.fromstring("text") - >>> ET.ElementTree(element).write(sys.stdout) - text - >>> print ET.tostring(element) - text - >>> print ET.tostring(element, "ascii") - - text - >>> _, ids = ET.XMLID("text") - >>> len(ids) - 0 - >>> _, ids = ET.XMLID("text") - >>> len(ids) - 1 - >>> ids["body"].tag - 'body' - """ - -def check_encoding(encoding): - """ - >>> check_encoding("ascii") - >>> check_encoding("us-ascii") - >>> check_encoding("iso-8859-1") - >>> check_encoding("iso-8859-15") - >>> check_encoding("cp437") - >>> check_encoding("mac-roman") - """ - ET.XML( - "" % encoding - ) - -def bug_1534630(): - """ - >>> bob = ET.TreeBuilder() - >>> e = bob.data("data") - >>> e = bob.start("tag", {}) - >>> e = bob.end("tag") - >>> e = bob.close() - >>> serialize(ET, e) - '' - """ def test_main(): - from test import test_xml_etree_c + from test import test_xml_etree, test_xml_etree_c + + # Run the tests specific to the C implementation test_support.run_doctest(test_xml_etree_c, verbosity=True) + # Assign the C implementation before running the doctests + pyET = test_xml_etree.ET + test_xml_etree.ET = cET + try: + # Run the same test suite as xml.etree.ElementTree + test_xml_etree.test_main(module_name='xml.etree.cElementTree') + finally: + test_xml_etree.ET = pyET + if __name__ == '__main__': test_main() Modified: python/trunk/Lib/xml/etree/ElementInclude.py ============================================================================== --- python/trunk/Lib/xml/etree/ElementInclude.py (original) +++ python/trunk/Lib/xml/etree/ElementInclude.py Thu Mar 11 15:36:19 2010 @@ -1,6 +1,6 @@ # # ElementTree -# $Id: ElementInclude.py 1862 2004-06-18 07:31:02Z Fredrik $ +# $Id: ElementInclude.py 3375 2008-02-13 08:05:08Z fredrik $ # # limited xinclude support for element trees # @@ -16,7 +16,7 @@ # -------------------------------------------------------------------- # The ElementTree toolkit is # -# Copyright (c) 1999-2004 by Fredrik Lundh +# Copyright (c) 1999-2008 by Fredrik Lundh # # By obtaining, using, and/or copying this software and/or its # associated documentation, you agree that you have read, understood, @@ -42,14 +42,14 @@ # -------------------------------------------------------------------- # Licensed to PSF under a Contributor Agreement. -# See http://www.python.org/2.4/license for licensing details. +# See http://www.python.org/psf/license for licensing details. ## # Limited XInclude support for the ElementTree package. ## import copy -import ElementTree +from . import ElementTree XINCLUDE = "{http://www.w3.org/2001/XInclude}" Modified: python/trunk/Lib/xml/etree/ElementPath.py ============================================================================== --- python/trunk/Lib/xml/etree/ElementPath.py (original) +++ python/trunk/Lib/xml/etree/ElementPath.py Thu Mar 11 15:36:19 2010 @@ -1,6 +1,6 @@ # # ElementTree -# $Id: ElementPath.py 1858 2004-06-17 21:31:41Z Fredrik $ +# $Id: ElementPath.py 3375 2008-02-13 08:05:08Z fredrik $ # # limited xpath support for element trees # @@ -8,8 +8,13 @@ # 2003-05-23 fl created # 2003-05-28 fl added support for // etc # 2003-08-27 fl fixed parsing of periods in element names +# 2007-09-10 fl new selection engine +# 2007-09-12 fl fixed parent selector +# 2007-09-13 fl added iterfind; changed findall to return a list +# 2007-11-30 fl added namespaces support +# 2009-10-30 fl added child element value filter # -# Copyright (c) 2003-2004 by Fredrik Lundh. All rights reserved. +# Copyright (c) 2003-2009 by Fredrik Lundh. All rights reserved. # # fredrik at pythonware.com # http://www.pythonware.com @@ -17,7 +22,7 @@ # -------------------------------------------------------------------- # The ElementTree toolkit is # -# Copyright (c) 1999-2004 by Fredrik Lundh +# Copyright (c) 1999-2009 by Fredrik Lundh # # By obtaining, using, and/or copying this software and/or its # associated documentation, you agree that you have read, understood, @@ -43,7 +48,7 @@ # -------------------------------------------------------------------- # Licensed to PSF under a Contributor Agreement. -# See http://www.python.org/2.4/license for licensing details. +# See http://www.python.org/psf/license for licensing details. ## # Implementation module for XPath support. There's usually no reason @@ -53,146 +58,246 @@ import re -xpath_tokenizer = re.compile( - "(::|\.\.|\(\)|[/.*:\[\]\(\)@=])|((?:\{[^}]+\})?[^/:\[\]\(\)@=\s]+)|\s+" - ).findall - -class xpath_descendant_or_self: - pass - -## -# Wrapper for a compiled XPath. - -class Path: - - ## - # Create an Path instance from an XPath expression. - - def __init__(self, path): - tokens = xpath_tokenizer(path) - # the current version supports 'path/path'-style expressions only - self.path = [] - self.tag = None - if tokens and tokens[0][0] == "/": - raise SyntaxError("cannot use absolute path on element") - while tokens: - op, tag = tokens.pop(0) - if tag or op == "*": - self.path.append(tag or op) - elif op == ".": - pass - elif op == "/": - self.path.append(xpath_descendant_or_self()) - continue - else: - raise SyntaxError("unsupported path syntax (%s)" % op) - if tokens: - op, tag = tokens.pop(0) - if op != "/": - raise SyntaxError( - "expected path separator (%s)" % (op or tag) - ) - if self.path and isinstance(self.path[-1], xpath_descendant_or_self): - raise SyntaxError("path cannot end with //") - if len(self.path) == 1 and isinstance(self.path[0], type("")): - self.tag = self.path[0] - - ## - # Find first matching object. - - def find(self, element): - tag = self.tag - if tag is None: - nodeset = self.findall(element) - if not nodeset: - return None - return nodeset[0] - for elem in element: - if elem.tag == tag: - return elem - return None - - ## - # Find text for first matching object. - - def findtext(self, element, default=None): - tag = self.tag - if tag is None: - nodeset = self.findall(element) - if not nodeset: - return default - return nodeset[0].text or "" - for elem in element: - if elem.tag == tag: - return elem.text or "" - return default - - ## - # Find all matching objects. - - def findall(self, element): - nodeset = [element] - index = 0 - while 1: +xpath_tokenizer_re = re.compile( + "(" + "'[^']*'|\"[^\"]*\"|" + "::|" + "//?|" + "\.\.|" + "\(\)|" + "[/.*:\[\]\(\)@=])|" + "((?:\{[^}]+\})?[^/\[\]\(\)@=\s]+)|" + "\s+" + ) + +def xpath_tokenizer(pattern, namespaces=None): + for token in xpath_tokenizer_re.findall(pattern): + tag = token[1] + if tag and tag[0] != "{" and ":" in tag: try: - path = self.path[index] - index = index + 1 - except IndexError: - return nodeset - set = [] - if isinstance(path, xpath_descendant_or_self): + prefix, uri = tag.split(":", 1) + if not namespaces: + raise KeyError + yield token[0], "{%s}%s" % (namespaces[prefix], uri) + except KeyError: + raise SyntaxError("prefix %r not found in prefix map" % prefix) + else: + yield token + +def get_parent_map(context): + parent_map = context.parent_map + if parent_map is None: + context.parent_map = parent_map = {} + for p in context.root.iter(): + for e in p: + parent_map[e] = p + return parent_map + +def prepare_child(next, token): + tag = token[1] + def select(context, result): + for elem in result: + for e in elem: + if e.tag == tag: + yield e + return select + +def prepare_star(next, token): + def select(context, result): + for elem in result: + for e in elem: + yield e + return select + +def prepare_self(next, token): + def select(context, result): + for elem in result: + yield elem + return select + +def prepare_descendant(next, token): + token = next() + if token[0] == "*": + tag = "*" + elif not token[0]: + tag = token[1] + else: + raise SyntaxError("invalid descendant") + def select(context, result): + for elem in result: + for e in elem.iter(tag): + if e is not elem: + yield e + return select + +def prepare_parent(next, token): + def select(context, result): + # FIXME: raise error if .. is applied at toplevel? + parent_map = get_parent_map(context) + result_map = {} + for elem in result: + if elem in parent_map: + parent = parent_map[elem] + if parent not in result_map: + result_map[parent] = None + yield parent + return select + +def prepare_predicate(next, token): + # FIXME: replace with real parser!!! refs: + # http://effbot.org/zone/simple-iterator-parser.htm + # http://javascript.crockford.com/tdop/tdop.html + signature = [] + predicate = [] + while 1: + token = next() + if token[0] == "]": + break + if token[0] and token[0][:1] in "'\"": + token = "'", token[0][1:-1] + signature.append(token[0] or "-") + predicate.append(token[1]) + signature = "".join(signature) + # use signature to determine predicate type + if signature == "@-": + # [@attribute] predicate + key = predicate[1] + def select(context, result): + for elem in result: + if elem.get(key) is not None: + yield elem + return select + if signature == "@-='": + # [@attribute='value'] + key = predicate[1] + value = predicate[-1] + def select(context, result): + for elem in result: + if elem.get(key) == value: + yield elem + return select + if signature == "-" and not re.match("\d+$", predicate[0]): + # [tag] + tag = predicate[0] + def select(context, result): + for elem in result: + if elem.find(tag) is not None: + yield elem + return select + if signature == "-='" and not re.match("\d+$", predicate[0]): + # [tag='value'] + tag = predicate[0] + value = predicate[-1] + def select(context, result): + for elem in result: + for e in elem.findall(tag): + if "".join(e.itertext()) == value: + yield elem + break + return select + if signature == "-" or signature == "-()" or signature == "-()-": + # [index] or [last()] or [last()-index] + if signature == "-": + index = int(predicate[0]) - 1 + else: + if predicate[0] != "last": + raise SyntaxError("unsupported function") + if signature == "-()-": try: - tag = self.path[index] - if not isinstance(tag, type("")): - tag = None - else: - index = index + 1 - except IndexError: - tag = None # invalid path - for node in nodeset: - new = list(node.getiterator(tag)) - if new and new[0] is node: - set.extend(new[1:]) - else: - set.extend(new) + index = int(predicate[2]) - 1 + except ValueError: + raise SyntaxError("unsupported expression") else: - for node in nodeset: - for node in node: - if path == "*" or node.tag == path: - set.append(node) - if not set: - return [] - nodeset = set + index = -1 + def select(context, result): + parent_map = get_parent_map(context) + for elem in result: + try: + parent = parent_map[elem] + # FIXME: what if the selector is "*" ? + elems = list(parent.findall(elem.tag)) + if elems[index] is elem: + yield elem + except (IndexError, KeyError): + pass + return select + raise SyntaxError("invalid predicate") + +ops = { + "": prepare_child, + "*": prepare_star, + ".": prepare_self, + "..": prepare_parent, + "//": prepare_descendant, + "[": prepare_predicate, + } _cache = {} +class _SelectorContext: + parent_map = None + def __init__(self, root): + self.root = root + +# -------------------------------------------------------------------- + ## -# (Internal) Compile path. +# Generate all matching objects. -def _compile(path): - p = _cache.get(path) - if p is not None: - return p - p = Path(path) - if len(_cache) >= 100: - _cache.clear() - _cache[path] = p - return p +def iterfind(elem, path, namespaces=None): + # compile selector pattern + if path[-1:] == "/": + path = path + "*" # implicit all (FIXME: keep this?) + try: + selector = _cache[path] + except KeyError: + if len(_cache) > 100: + _cache.clear() + if path[:1] == "/": + raise SyntaxError("cannot use absolute path on element") + next = iter(xpath_tokenizer(path, namespaces)).next + token = next() + selector = [] + while 1: + try: + selector.append(ops[token[0]](next, token)) + except StopIteration: + raise SyntaxError("invalid path") + try: + token = next() + if token[0] == "/": + token = next() + except StopIteration: + break + _cache[path] = selector + # execute selector pattern + result = [elem] + context = _SelectorContext(elem) + for select in selector: + result = select(context, result) + return result ## # Find first matching object. -def find(element, path): - return _compile(path).find(element) +def find(elem, path, namespaces=None): + try: + return iterfind(elem, path, namespaces).next() + except StopIteration: + return None ## -# Find text for first matching object. +# Find all matching objects. -def findtext(element, path, default=None): - return _compile(path).findtext(element, default) +def findall(elem, path, namespaces=None): + return list(iterfind(elem, path, namespaces)) ## -# Find all matching objects. +# Find text for first matching object. -def findall(element, path): - return _compile(path).findall(element) +def findtext(elem, path, default=None, namespaces=None): + try: + elem = iterfind(elem, path, namespaces).next() + return elem.text or "" + except StopIteration: + return default Modified: python/trunk/Lib/xml/etree/ElementTree.py ============================================================================== --- python/trunk/Lib/xml/etree/ElementTree.py (original) +++ python/trunk/Lib/xml/etree/ElementTree.py Thu Mar 11 15:36:19 2010 @@ -1,40 +1,24 @@ # # ElementTree -# $Id: ElementTree.py 2326 2005-03-17 07:45:21Z fredrik $ +# $Id: ElementTree.py 3440 2008-07-18 14:45:01Z fredrik $ # -# light-weight XML support for Python 1.5.2 and later. +# light-weight XML support for Python 2.3 and later. # -# history: -# 2001-10-20 fl created (from various sources) -# 2001-11-01 fl return root from parse method -# 2002-02-16 fl sort attributes in lexical order -# 2002-04-06 fl TreeBuilder refactoring, added PythonDoc markup -# 2002-05-01 fl finished TreeBuilder refactoring -# 2002-07-14 fl added basic namespace support to ElementTree.write -# 2002-07-25 fl added QName attribute support -# 2002-10-20 fl fixed encoding in write -# 2002-11-24 fl changed default encoding to ascii; fixed attribute encoding -# 2002-11-27 fl accept file objects or file names for parse/write -# 2002-12-04 fl moved XMLTreeBuilder back to this module -# 2003-01-11 fl fixed entity encoding glitch for us-ascii -# 2003-02-13 fl added XML literal factory -# 2003-02-21 fl added ProcessingInstruction/PI factory -# 2003-05-11 fl added tostring/fromstring helpers -# 2003-05-26 fl added ElementPath support -# 2003-07-05 fl added makeelement factory method -# 2003-07-28 fl added more well-known namespace prefixes -# 2003-08-15 fl fixed typo in ElementTree.findtext (Thomas Dartsch) -# 2003-09-04 fl fall back on emulator if ElementPath is not installed -# 2003-10-31 fl markup updates -# 2003-11-15 fl fixed nested namespace bug -# 2004-03-28 fl added XMLID helper -# 2004-06-02 fl added default support to findtext -# 2004-06-08 fl fixed encoding of non-ascii element/attribute names -# 2004-08-23 fl take advantage of post-2.1 expat features -# 2005-02-01 fl added iterparse implementation -# 2005-03-02 fl fixed iterparse support for pre-2.2 versions +# history (since 1.2.6): +# 2005-11-12 fl added tostringlist/fromstringlist helpers +# 2006-07-05 fl merged in selected changes from the 1.3 sandbox +# 2006-07-05 fl removed support for 2.1 and earlier +# 2007-06-21 fl added deprecation/future warnings +# 2007-08-25 fl added doctype hook, added parser version attribute etc +# 2007-08-26 fl added new serializer code (better namespace handling, etc) +# 2007-08-27 fl warn for broken /tag searches on tree level +# 2007-09-02 fl added html/text methods to serializer (experimental) +# 2007-09-05 fl added method argument to tostring/tostringlist +# 2007-09-06 fl improved error handling +# 2007-09-13 fl added itertext, iterfind; assorted cleanups +# 2007-12-15 fl added C14N hooks, copy method (experimental) # -# Copyright (c) 1999-2005 by Fredrik Lundh. All rights reserved. +# Copyright (c) 1999-2008 by Fredrik Lundh. All rights reserved. # # fredrik at pythonware.com # http://www.pythonware.com @@ -42,7 +26,7 @@ # -------------------------------------------------------------------- # The ElementTree toolkit is # -# Copyright (c) 1999-2005 by Fredrik Lundh +# Copyright (c) 1999-2008 by Fredrik Lundh # # By obtaining, using, and/or copying this software and/or its # associated documentation, you agree that you have read, understood, @@ -68,25 +52,28 @@ # -------------------------------------------------------------------- # Licensed to PSF under a Contributor Agreement. -# See http://www.python.org/2.4/license for licensing details. +# See http://www.python.org/psf/license for licensing details. __all__ = [ # public symbols "Comment", "dump", "Element", "ElementTree", - "fromstring", + "fromstring", "fromstringlist", "iselement", "iterparse", - "parse", + "parse", "ParseError", "PI", "ProcessingInstruction", "QName", "SubElement", - "tostring", + "tostring", "tostringlist", "TreeBuilder", - "VERSION", "XML", + "VERSION", + "XML", "XMLParser", "XMLTreeBuilder", ] +VERSION = "1.3.0" + ## # The Element type is a flexible container object, designed to # store hierarchical data structures in memory. The type can be @@ -102,61 +89,86 @@ #
  • a number of child elements, stored in a Python sequence
  • # # -# To create an element instance, use the {@link #Element} or {@link -# #SubElement} factory functions. +# To create an element instance, use the {@link #Element} constructor +# or the {@link #SubElement} factory function. #

    # The {@link #ElementTree} class can be used to wrap an element # structure, and convert it from and to XML. ## -import string, sys, re +import sys +import re +import warnings + -class _SimpleElementPath: +class _SimpleElementPath(object): # emulate pre-1.2 find/findtext/findall behaviour - def find(self, element, tag): + def find(self, element, tag, namespaces=None): for elem in element: if elem.tag == tag: return elem return None - def findtext(self, element, tag, default=None): - for elem in element: - if elem.tag == tag: - return elem.text or "" - return default - def findall(self, element, tag): + def findtext(self, element, tag, default=None, namespaces=None): + elem = self.find(element, tag) + if elem is None: + return default + return elem.text or "" + def iterfind(self, element, tag, namespaces=None): if tag[:3] == ".//": - return element.getiterator(tag[3:]) - result = [] + for elem in element.iter(tag[3:]): + yield elem for elem in element: if elem.tag == tag: - result.append(elem) - return result + yield elem + def findall(self, element, tag, namespaces=None): + return list(self.iterfind(element, tag, namespaces)) try: - import ElementPath + from . import ElementPath except ImportError: - # FIXME: issue warning in this case? ElementPath = _SimpleElementPath() -# TODO: add support for custom namespace resolvers/default namespaces -# TODO: add improved support for incremental parsing +## +# Parser error. This is a subclass of SyntaxError. +#

    +# In addition to the exception value, an exception instance contains a +# specific exception code in the code attribute, and the line and +# column of the error in the position attribute. -VERSION = "1.2.6" +class ParseError(SyntaxError): + pass + +# -------------------------------------------------------------------- ## -# Internal element class. This class defines the Element interface, -# and provides a reference implementation of this interface. +# Checks if an object appears to be a valid element object. +# +# @param An element instance. +# @return A true value if this is an element object. +# @defreturn flag + +def iselement(element): + # FIXME: not sure about this; might be a better idea to look + # for tag/attrib/text attributes + return isinstance(element, Element) or hasattr(element, "tag") + +## +# Element class. This class defines the Element interface, and +# provides a reference implementation of this interface. #

    -# You should not create instances of this class directly. Use the -# appropriate factory functions instead, such as {@link #Element} -# and {@link #SubElement}. +# The element name, attribute names, and attribute values can be +# either ASCII strings (ordinary Python strings containing only 7-bit +# ASCII characters) or Unicode strings. # +# @param tag The element name. +# @param attrib An optional dictionary, containing element attributes. +# @param **extra Additional attributes, given as keyword arguments. # @see Element # @see SubElement # @see Comment # @see ProcessingInstruction -class _ElementInterface: +class Element(object): # text...tail ## @@ -166,34 +178,41 @@ ## # (Attribute) Element attribute dictionary. Where possible, use - # {@link #_ElementInterface.get}, - # {@link #_ElementInterface.set}, - # {@link #_ElementInterface.keys}, and - # {@link #_ElementInterface.items} to access + # {@link #Element.get}, + # {@link #Element.set}, + # {@link #Element.keys}, and + # {@link #Element.items} to access # element attributes. attrib = None ## # (Attribute) Text before first subelement. This is either a - # string or the value None, if there was no text. + # string or the value None. Note that if there was no text, this + # attribute may be either None or an empty string, depending on + # the parser. text = None ## # (Attribute) Text after this element's end tag, but before the # next sibling element's start tag. This is either a string or - # the value None, if there was no text. + # the value None. Note that if there was no text, this attribute + # may be either None or an empty string, depending on the parser. tail = None # text after end tag, if any - def __init__(self, tag, attrib): + # constructor + + def __init__(self, tag, attrib={}, **extra): + attrib = attrib.copy() + attrib.update(extra) self.tag = tag self.attrib = attrib self._children = [] def __repr__(self): - return "" % (self.tag, id(self)) + return "" % (repr(self.tag), id(self)) ## # Creates a new element object of the same type as this element. @@ -203,18 +222,41 @@ # @return A new element instance. def makeelement(self, tag, attrib): - return Element(tag, attrib) + return self.__class__(tag, attrib) ## - # Returns the number of subelements. + # (Experimental) Copies the current element. This creates a + # shallow copy; subelements will be shared with the original tree. + # + # @return A new element instance. + + def copy(self): + elem = self.makeelement(self.tag, self.attrib) + elem.text = self.text + elem.tail = self.tail + elem[:] = self + return elem + + ## + # Returns the number of subelements. Note that this only counts + # full elements; to check if there's any content in an element, you + # have to check both the length and the text attribute. # # @return The number of subelements. def __len__(self): return len(self._children) + def __nonzero__(self): + warnings.warn( + "The behavior of this method will change in future versions. " + "Use specific 'len(elem)' or 'elem is not None' test instead.", + FutureWarning, stacklevel=2 + ) + return len(self._children) != 0 # emulate old behaviour, for now + ## - # Returns the given subelement. + # Returns the given subelement, by index. # # @param index What subelement to return. # @return The given subelement. @@ -224,19 +266,22 @@ return self._children[index] ## - # Replaces the given subelement. + # Replaces the given subelement, by index. # # @param index What subelement to replace. # @param element The new element value. # @exception IndexError If the given element does not exist. - # @exception AssertionError If element is not a valid object. def __setitem__(self, index, element): - assert iselement(element) + # if isinstance(index, slice): + # for elt in element: + # assert iselement(elt) + # else: + # assert iselement(element) self._children[index] = element ## - # Deletes the given subelement. + # Deletes the given subelement, by index. # # @param index What subelement to delete. # @exception IndexError If the given element does not exist. @@ -245,118 +290,121 @@ del self._children[index] ## - # Returns a list containing subelements in the given range. + # Adds a subelement to the end of this element. In document order, + # the new element will appear after the last existing subelement (or + # directly after the text, if it's the first subelement), but before + # the end tag for this element. # - # @param start The first subelement to return. - # @param stop The first subelement that shouldn't be returned. - # @return A sequence object containing subelements. + # @param element The element to add. - def __getslice__(self, start, stop): - return self._children[start:stop] + def append(self, element): + # assert iselement(element) + self._children.append(element) ## - # Replaces a number of subelements with elements from a sequence. + # Appends subelements from a sequence. # - # @param start The first subelement to replace. - # @param stop The first subelement that shouldn't be replaced. # @param elements A sequence object with zero or more elements. - # @exception AssertionError If a sequence member is not a valid object. - - def __setslice__(self, start, stop, elements): - for element in elements: - assert iselement(element) - self._children[start:stop] = list(elements) - - ## - # Deletes a number of subelements. - # - # @param start The first subelement to delete. - # @param stop The first subelement to leave in there. - - def __delslice__(self, start, stop): - del self._children[start:stop] + # @since 1.3 - ## - # Adds a subelement to the end of this element. - # - # @param element The element to add. - # @exception AssertionError If a sequence member is not a valid object. - - def append(self, element): - assert iselement(element) - self._children.append(element) + def extend(self, elements): + # for element in elements: + # assert iselement(element) + self._children.extend(elements) ## # Inserts a subelement at the given position in this element. # # @param index Where to insert the new subelement. - # @exception AssertionError If the element is not a valid object. def insert(self, index, element): - assert iselement(element) + # assert iselement(element) self._children.insert(index, element) ## # Removes a matching subelement. Unlike the find methods, # this method compares elements based on identity, not on tag - # value or contents. + # value or contents. To remove subelements by other means, the + # easiest way is often to use a list comprehension to select what + # elements to keep, and use slice assignment to update the parent + # element. # # @param element What element to remove. # @exception ValueError If a matching element could not be found. - # @exception AssertionError If the element is not a valid object. def remove(self, element): - assert iselement(element) + # assert iselement(element) self._children.remove(element) ## - # Returns all subelements. The elements are returned in document - # order. + # (Deprecated) Returns all subelements. The elements are returned + # in document order. # # @return A list of subelements. # @defreturn list of Element instances def getchildren(self): + warnings.warn( + "This method will be removed in future versions. " + "Use 'list(elem)' or iteration over elem instead.", + DeprecationWarning, stacklevel=2 + ) return self._children ## # Finds the first matching subelement, by tag name or path. # # @param path What element to look for. + # @keyparam namespaces Optional namespace prefix map. # @return The first matching element, or None if no element was found. # @defreturn Element or None - def find(self, path): - return ElementPath.find(self, path) + def find(self, path, namespaces=None): + return ElementPath.find(self, path, namespaces) ## # Finds text for the first matching subelement, by tag name or path. # # @param path What element to look for. # @param default What to return if the element was not found. + # @keyparam namespaces Optional namespace prefix map. # @return The text content of the first matching element, or the # default value no element was found. Note that if the element - # has is found, but has no text content, this method returns an + # is found, but has no text content, this method returns an # empty string. # @defreturn string - def findtext(self, path, default=None): - return ElementPath.findtext(self, path, default) + def findtext(self, path, default=None, namespaces=None): + return ElementPath.findtext(self, path, default, namespaces) ## # Finds all matching subelements, by tag name or path. # # @param path What element to look for. - # @return A list or iterator containing all matching elements, + # @keyparam namespaces Optional namespace prefix map. + # @return A list or other sequence containing all matching elements, # in document order. # @defreturn list of Element instances - def findall(self, path): - return ElementPath.findall(self, path) + def findall(self, path, namespaces=None): + return ElementPath.findall(self, path, namespaces) + + ## + # Finds all matching subelements, by tag name or path. + # + # @param path What element to look for. + # @keyparam namespaces Optional namespace prefix map. + # @return An iterator or sequence containing all matching elements, + # in document order. + # @defreturn a generated sequence of Element instances + + def iterfind(self, path, namespaces=None): + return ElementPath.iterfind(self, path, namespaces) ## # Resets an element. This function removes all subelements, clears - # all attributes, and sets the text and tail attributes to None. + # all attributes, and sets the text and tail attributes + # to None. def clear(self): self.attrib.clear() @@ -364,7 +412,8 @@ self.text = self.tail = None ## - # Gets an element attribute. + # Gets an element attribute. Equivalent to attrib.get, but + # some implementations may handle this a bit more efficiently. # # @param key What attribute to look for. # @param default What to return if the attribute was not found. @@ -376,7 +425,8 @@ return self.attrib.get(key, default) ## - # Sets an element attribute. + # Sets an element attribute. Equivalent to attrib[key] = value, + # but some implementations may handle this a bit more efficiently. # # @param key What attribute to set. # @param value The attribute value. @@ -387,6 +437,7 @@ ## # Gets a list of attribute names. The names are returned in an # arbitrary order (just like for an ordinary Python dictionary). + # Equivalent to attrib.keys(). # # @return A list of element attribute names. # @defreturn list of strings @@ -396,7 +447,7 @@ ## # Gets element attributes, as a sequence. The attributes are - # returned in an arbitrary order. + # returned in an arbitrary order. Equivalent to attrib.items(). # # @return A list of (name, value) tuples for all attributes. # @defreturn list of (string, string) tuples @@ -409,45 +460,55 @@ # and all subelements, in document order, and returns all elements # with a matching tag. #

    - # If the tree structure is modified during iteration, the result - # is undefined. + # If the tree structure is modified during iteration, new or removed + # elements may or may not be included. To get a stable set, use the + # list() function on the iterator, and loop over the resulting list. # # @param tag What tags to look for (default is to return all elements). - # @return A list or iterator containing all the matching elements. - # @defreturn list or iterator + # @return An iterator containing all the matching elements. + # @defreturn iterator - def getiterator(self, tag=None): - nodes = [] + def iter(self, tag=None): if tag == "*": tag = None if tag is None or self.tag == tag: - nodes.append(self) - for node in self._children: - nodes.extend(node.getiterator(tag)) - return nodes + yield self + for e in self._children: + for e in e.iter(tag): + yield e -# compatibility -_Element = _ElementInterface + # compatibility + def getiterator(self, tag=None): + # Change for a DeprecationWarning in 1.4 + warnings.warn( + "This method will be removed in future versions. " + "Use 'elem.iter()' or 'list(elem.iter())' instead.", + PendingDeprecationWarning, stacklevel=2 + ) + return list(self.iter(tag)) -## -# Element factory. This function returns an object implementing the -# standard Element interface. The exact class or type of that object -# is implementation dependent, but it will always be compatible with -# the {@link #_ElementInterface} class in this module. -#

    -# The element name, attribute names, and attribute values can be -# either 8-bit ASCII strings or Unicode strings. -# -# @param tag The element name. -# @param attrib An optional dictionary, containing element attributes. -# @param **extra Additional attributes, given as keyword arguments. -# @return An element instance. -# @defreturn Element + ## + # Creates a text iterator. The iterator loops over this element + # and all subelements, in document order, and returns all inner + # text. + # + # @return An iterator containing all inner text. + # @defreturn iterator -def Element(tag, attrib={}, **extra): - attrib = attrib.copy() - attrib.update(extra) - return _ElementInterface(tag, attrib) + def itertext(self): + tag = self.tag + if not isinstance(tag, basestring) and tag is not None: + return + if self.text: + yield self.text + for e in self: + for s in e.itertext(): + yield s + if e.tail: + yield e.tail + +# compatibility +_Element = _ElementInterface = Element ## # Subelement factory. This function creates an element instance, and @@ -472,7 +533,8 @@ ## # Comment element factory. This factory function creates a special -# element that will be serialized as an XML comment. +# element that will be serialized as an XML comment by the standard +# serializer. #

    # The comment string can be either an 8-bit ASCII string or a Unicode # string. @@ -488,7 +550,8 @@ ## # PI element factory. This factory function creates a special element -# that will be serialized as an XML processing instruction. +# that will be serialized as an XML processing instruction by the standard +# serializer. # # @param target A string containing the PI target. # @param text A string containing the PI contents, if any. @@ -514,7 +577,7 @@ # an URI, and this argument is interpreted as a local name. # @return An opaque object, representing the QName. -class QName: +class QName(object): def __init__(self, text_or_uri, tag=None): if tag: text_or_uri = "{%s}%s" % (text_or_uri, tag) @@ -528,19 +591,21 @@ return cmp(self.text, other.text) return cmp(self.text, other) +# -------------------------------------------------------------------- + ## # ElementTree wrapper class. This class represents an entire element # hierarchy, and adds some extra support for serialization to and from # standard XML. # # @param element Optional root element. -# @keyparam file Optional file handle or name. If given, the +# @keyparam file Optional file handle or file name. If given, the # tree is initialized with the contents of this XML file. -class ElementTree: +class ElementTree(object): def __init__(self, element=None, file=None): - assert element is None or iselement(element) + # assert element is None or iselement(element) self._root = element # first node if file: self.parse(file) @@ -562,25 +627,27 @@ # @param element An element instance. def _setroot(self, element): - assert iselement(element) + # assert iselement(element) self._root = element ## # Loads an external XML document into this element tree. # - # @param source A file name or file object. - # @param parser An optional parser instance. If not given, the - # standard {@link XMLTreeBuilder} parser is used. + # @param source A file name or file object. If a file object is + # given, it only has to implement a read(n) method. + # @keyparam parser An optional parser instance. If not given, the + # standard {@link XMLParser} parser is used. # @return The document root element. # @defreturn Element + # @exception ParseError If the parser fails to parse the document. def parse(self, source, parser=None): if not hasattr(source, "read"): source = open(source, "rb") if not parser: - parser = XMLTreeBuilder() + parser = XMLParser(target=TreeBuilder()) while 1: - data = source.read(32768) + data = source.read(65536) if not data: break parser.feed(data) @@ -595,23 +662,40 @@ # @return An iterator. # @defreturn iterator + def iter(self, tag=None): + # assert self._root is not None + return self._root.iter(tag) + + # compatibility def getiterator(self, tag=None): - assert self._root is not None - return self._root.getiterator(tag) + # Change for a DeprecationWarning in 1.4 + warnings.warn( + "This method will be removed in future versions. " + "Use 'tree.iter()' or 'list(tree.iter())' instead.", + PendingDeprecationWarning, stacklevel=2 + ) + return list(self.iter(tag)) ## # Finds the first toplevel element with given tag. # Same as getroot().find(path). # # @param path What element to look for. + # @keyparam namespaces Optional namespace prefix map. # @return The first matching element, or None if no element was found. # @defreturn Element or None - def find(self, path): - assert self._root is not None + def find(self, path, namespaces=None): + # assert self._root is not None if path[:1] == "/": path = "." + path - return self._root.find(path) + warnings.warn( + "This search is broken in 1.3 and earlier, and will be " + "fixed in a future version. If you rely on the current " + "behaviour, change it to %r" % path, + FutureWarning, stacklevel=2 + ) + return self._root.find(path, namespaces) ## # Finds the element text for the first toplevel element with given @@ -619,157 +703,342 @@ # # @param path What toplevel element to look for. # @param default What to return if the element was not found. + # @keyparam namespaces Optional namespace prefix map. # @return The text content of the first matching element, or the # default value no element was found. Note that if the element - # has is found, but has no text content, this method returns an + # is found, but has no text content, this method returns an # empty string. # @defreturn string - def findtext(self, path, default=None): - assert self._root is not None + def findtext(self, path, default=None, namespaces=None): + # assert self._root is not None if path[:1] == "/": path = "." + path - return self._root.findtext(path, default) + warnings.warn( + "This search is broken in 1.3 and earlier, and will be " + "fixed in a future version. If you rely on the current " + "behaviour, change it to %r" % path, + FutureWarning, stacklevel=2 + ) + return self._root.findtext(path, default, namespaces) ## # Finds all toplevel elements with the given tag. # Same as getroot().findall(path). # # @param path What element to look for. + # @keyparam namespaces Optional namespace prefix map. # @return A list or iterator containing all matching elements, # in document order. # @defreturn list of Element instances - def findall(self, path): - assert self._root is not None + def findall(self, path, namespaces=None): + # assert self._root is not None if path[:1] == "/": path = "." + path - return self._root.findall(path) + warnings.warn( + "This search is broken in 1.3 and earlier, and will be " + "fixed in a future version. If you rely on the current " + "behaviour, change it to %r" % path, + FutureWarning, stacklevel=2 + ) + return self._root.findall(path, namespaces) + + ## + # Finds all matching subelements, by tag name or path. + # Same as getroot().iterfind(path). + # + # @param path What element to look for. + # @keyparam namespaces Optional namespace prefix map. + # @return An iterator or sequence containing all matching elements, + # in document order. + # @defreturn a generated sequence of Element instances + + def iterfind(self, path, namespaces=None): + # assert self._root is not None + if path[:1] == "/": + path = "." + path + warnings.warn( + "This search is broken in 1.3 and earlier, and will be " + "fixed in a future version. If you rely on the current " + "behaviour, change it to %r" % path, + FutureWarning, stacklevel=2 + ) + return self._root.iterfind(path, namespaces) ## # Writes the element tree to a file, as XML. # + # @def write(file, **options) # @param file A file name, or a file object opened for writing. - # @param encoding Optional output encoding (default is US-ASCII). - - def write(self, file, encoding="us-ascii"): - assert self._root is not None - if not hasattr(file, "write"): - file = open(file, "wb") - if not encoding: - encoding = "us-ascii" - elif encoding != "utf-8" and encoding != "us-ascii": - file.write("\n" % encoding) - self._write(file, self._root, encoding, {}) - - def _write(self, file, node, encoding, namespaces): - # write XML to file - tag = node.tag - if tag is Comment: - file.write("" % _encode(node.text, encoding)) - elif tag is ProcessingInstruction: - file.write("" % _encode(node.text, encoding)) + # @param **options Options, given as keyword arguments. + # @keyparam encoding Optional output encoding (default is US-ASCII). + # @keyparam method Optional output method ("xml", "html", "text" or + # "c14n"; default is "xml"). + # @keyparam xml_declaration Controls if an XML declaration should + # be added to the file. Use False for never, True for always, + # None for only if not US-ASCII or UTF-8. None is default. + + def write(self, file_or_filename, + # keyword arguments + encoding=None, + xml_declaration=None, + default_namespace=None, + method=None): + # assert self._root is not None + if not method: + method = "xml" + elif method not in _serialize: + # FIXME: raise an ImportError for c14n if ElementC14N is missing? + raise ValueError("unknown method %r" % method) + if hasattr(file_or_filename, "write"): + file = file_or_filename else: - items = node.items() - xmlns_items = [] # new namespaces in this scope - try: - if isinstance(tag, QName) or tag[:1] == "{": - tag, xmlns = fixtag(tag, namespaces) - if xmlns: xmlns_items.append(xmlns) - except TypeError: - _raise_serialization_error(tag) - file.write("<" + _encode(tag, encoding)) - if items or xmlns_items: - items.sort() # lexical order - for k, v in items: - try: - if isinstance(k, QName) or k[:1] == "{": - k, xmlns = fixtag(k, namespaces) - if xmlns: xmlns_items.append(xmlns) - except TypeError: - _raise_serialization_error(k) - try: - if isinstance(v, QName): - v, xmlns = fixtag(v, namespaces) - if xmlns: xmlns_items.append(xmlns) - except TypeError: - _raise_serialization_error(v) - file.write(" %s=\"%s\"" % (_encode(k, encoding), - _escape_attrib(v, encoding))) - for k, v in xmlns_items: - file.write(" %s=\"%s\"" % (_encode(k, encoding), - _escape_attrib(v, encoding))) - if node.text or len(node): - file.write(">") - if node.text: - file.write(_escape_cdata(node.text, encoding)) - for n in node: - self._write(file, n, encoding, namespaces) - file.write("") + file = open(file_or_filename, "wb") + write = file.write + if not encoding: + if method == "c14n": + encoding = "utf-8" else: - file.write(" />") - for k, v in xmlns_items: - del namespaces[v] - if node.tail: - file.write(_escape_cdata(node.tail, encoding)) + encoding = "us-ascii" + elif xml_declaration or (xml_declaration is None and + encoding not in ("utf-8", "us-ascii")): + if method == "xml": + write("\n" % encoding) + if method == "text": + _serialize_text(write, self._root, encoding) + else: + qnames, namespaces = _namespaces( + self._root, encoding, default_namespace + ) + serialize = _serialize[method] + serialize(write, self._root, encoding, qnames, namespaces) + if file_or_filename is not file: + file.close() + + def write_c14n(self, file): + # lxml.etree compatibility. use output method instead + return self.write(file, method="c14n") # -------------------------------------------------------------------- -# helpers +# serialization support -## -# Checks if an object appears to be a valid element object. -# -# @param An element instance. -# @return A true value if this is an element object. -# @defreturn flag +def _namespaces(elem, encoding, default_namespace=None): + # identify namespaces used in this tree -def iselement(element): - # FIXME: not sure about this; might be a better idea to look - # for tag/attrib/text attributes - return isinstance(element, _ElementInterface) or hasattr(element, "tag") + # maps qnames to *encoded* prefix:local names + qnames = {None: None} -## -# Writes an element tree or element structure to sys.stdout. This -# function should be used for debugging only. -#

    -# The exact output format is implementation dependent. In this -# version, it's written as an ordinary XML file. -# -# @param elem An element tree or an individual element. + # maps uri:s to prefixes + namespaces = {} + if default_namespace: + namespaces[default_namespace] = "" -def dump(elem): - # debugging - if not isinstance(elem, ElementTree): - elem = ElementTree(elem) - elem.write(sys.stdout) - tail = elem.getroot().tail - if not tail or tail[-1] != "\n": - sys.stdout.write("\n") + def encode(text): + return text.encode(encoding) + + def add_qname(qname): + # calculate serialized qname representation + try: + if qname[:1] == "{": + uri, tag = qname[1:].rsplit("}", 1) + prefix = namespaces.get(uri) + if prefix is None: + prefix = _namespace_map.get(uri) + if prefix is None: + prefix = "ns%d" % len(namespaces) + if prefix != "xml": + namespaces[uri] = prefix + if prefix: + qnames[qname] = encode("%s:%s" % (prefix, tag)) + else: + qnames[qname] = encode(tag) # default element + else: + if default_namespace: + # FIXME: can this be handled in XML 1.0? + raise ValueError( + "cannot use non-qualified names with " + "default_namespace option" + ) + qnames[qname] = encode(qname) + except TypeError: + _raise_serialization_error(qname) -def _encode(s, encoding): + # populate qname and namespaces table try: - return s.encode(encoding) + iterate = elem.iter except AttributeError: - return s # 1.5.2: assume the string uses the right encoding + iterate = elem.getiterator # cET compatibility + for elem in iterate(): + tag = elem.tag + if isinstance(tag, QName) and tag.text not in qnames: + add_qname(tag.text) + elif isinstance(tag, basestring): + if tag not in qnames: + add_qname(tag) + elif tag is not None and tag is not Comment and tag is not PI: + _raise_serialization_error(tag) + for key, value in elem.items(): + if isinstance(key, QName): + key = key.text + if key not in qnames: + add_qname(key) + if isinstance(value, QName) and value.text not in qnames: + add_qname(value.text) + text = elem.text + if isinstance(text, QName) and text.text not in qnames: + add_qname(text.text) + return qnames, namespaces + +def _serialize_xml(write, elem, encoding, qnames, namespaces): + tag = elem.tag + text = elem.text + if tag is Comment: + write("" % _encode(text, encoding)) + elif tag is ProcessingInstruction: + write("" % _encode(text, encoding)) + else: + tag = qnames[tag] + if tag is None: + if text: + write(_escape_cdata(text, encoding)) + for e in elem: + _serialize_xml(write, e, encoding, qnames, None) + else: + write("<" + tag) + items = elem.items() + if items or namespaces: + if namespaces: + for v, k in sorted(namespaces.items(), + key=lambda x: x[1]): # sort on prefix + if k: + k = ":" + k + write(" xmlns%s=\"%s\"" % ( + k.encode(encoding), + _escape_attrib(v, encoding) + )) + for k, v in sorted(items): # lexical order + if isinstance(k, QName): + k = k.text + if isinstance(v, QName): + v = qnames[v.text] + else: + v = _escape_attrib(v, encoding) + write(" %s=\"%s\"" % (qnames[k], v)) + if text or len(elem): + write(">") + if text: + write(_escape_cdata(text, encoding)) + for e in elem: + _serialize_xml(write, e, encoding, qnames, None) + write("") + else: + write(" />") + if elem.tail: + write(_escape_cdata(elem.tail, encoding)) -if sys.version[:3] == "1.5": - _escape = re.compile(r"[&<>\"\x80-\xff]+") # 1.5.2 -else: - _escape = re.compile(eval(r'u"[&<>\"\u0080-\uffff]+"')) - -_escape_map = { - "&": "&", - "<": "<", - ">": ">", - '"': """, +HTML_EMPTY = ("area", "base", "basefont", "br", "col", "frame", "hr", + "img", "input", "isindex", "link", "meta" "param") + +try: + HTML_EMPTY = set(HTML_EMPTY) +except NameError: + pass + +def _serialize_html(write, elem, encoding, qnames, namespaces): + tag = elem.tag + text = elem.text + if tag is Comment: + write("" % _escape_cdata(text, encoding)) + elif tag is ProcessingInstruction: + write("" % _escape_cdata(text, encoding)) + else: + tag = qnames[tag] + if tag is None: + if text: + write(_escape_cdata(text, encoding)) + for e in elem: + _serialize_html(write, e, encoding, qnames, None) + else: + write("<" + tag) + items = elem.items() + if items or namespaces: + if namespaces: + for v, k in sorted(namespaces.items(), + key=lambda x: x[1]): # sort on prefix + if k: + k = ":" + k + write(" xmlns%s=\"%s\"" % ( + k.encode(encoding), + _escape_attrib(v, encoding) + )) + for k, v in sorted(items): # lexical order + if isinstance(k, QName): + k = k.text + if isinstance(v, QName): + v = qnames[v.text] + else: + v = _escape_attrib_html(v, encoding) + # FIXME: handle boolean attributes + write(" %s=\"%s\"" % (qnames[k], v)) + write(">") + tag = tag.lower() + if text: + if tag == "script" or tag == "style": + write(_encode(text, encoding)) + else: + write(_escape_cdata(text, encoding)) + for e in elem: + _serialize_html(write, e, encoding, qnames, None) + if tag not in HTML_EMPTY: + write("") + if elem.tail: + write(_escape_cdata(elem.tail, encoding)) + +def _serialize_text(write, elem, encoding): + for part in elem.itertext(): + write(part.encode(encoding)) + if elem.tail: + write(elem.tail.encode(encoding)) + +_serialize = { + "xml": _serialize_xml, + "html": _serialize_html, + "text": _serialize_text, +# this optional method is imported at the end of the module +# "c14n": _serialize_c14n, } +## +# Registers a namespace prefix. The registry is global, and any +# existing mapping for either the given prefix or the namespace URI +# will be removed. +# +# @param prefix Namespace prefix. +# @param uri Namespace uri. Tags and attributes in this namespace +# will be serialized with the given prefix, if at all possible. +# @exception ValueError If the prefix is reserved, or is otherwise +# invalid. + +def register_namespace(prefix, uri): + if re.match("ns\d+$", prefix): + raise ValueError("Prefix format reserved for internal use") + for k, v in _namespace_map.items(): + if k == uri or v == prefix: + del _namespace_map[k] + _namespace_map[uri] = prefix + _namespace_map = { # "well-known" namespace prefixes "http://www.w3.org/XML/1998/namespace": "xml", "http://www.w3.org/1999/xhtml": "html", "http://www.w3.org/1999/02/22-rdf-syntax-ns#": "rdf", "http://schemas.xmlsoap.org/wsdl/": "wsdl", + # xml schema + "http://www.w3.org/2001/XMLSchema": "xs", + "http://www.w3.org/2001/XMLSchema-instance": "xsi", + # dublin core + "http://purl.org/dc/elements/1.1/": "dc", } def _raise_serialization_error(text): @@ -777,84 +1046,129 @@ "cannot serialize %r (type %s)" % (text, type(text).__name__) ) -def _encode_entity(text, pattern=_escape): - # map reserved and non-ascii characters to numerical entities - def escape_entities(m, map=_escape_map): - out = [] - append = out.append - for char in m.group(): - text = map.get(char) - if text is None: - text = "&#%d;" % ord(char) - append(text) - return string.join(out, "") +def _encode(text, encoding): try: - return _encode(pattern.sub(escape_entities, text), "ascii") - except TypeError: + return text.encode(encoding, "xmlcharrefreplace") + except (TypeError, AttributeError): _raise_serialization_error(text) -# -# the following functions assume an ascii-compatible encoding -# (or "utf-16") - -def _escape_cdata(text, encoding=None, replace=string.replace): +def _escape_cdata(text, encoding): # escape character data try: - if encoding: - try: - text = _encode(text, encoding) - except UnicodeError: - return _encode_entity(text) - text = replace(text, "&", "&") - text = replace(text, "<", "<") - text = replace(text, ">", ">") - return text + # it's worth avoiding do-nothing calls for strings that are + # shorter than 500 character, or so. assume that's, by far, + # the most common case in most applications. + if "&" in text: + text = text.replace("&", "&") + if "<" in text: + text = text.replace("<", "<") + if ">" in text: + text = text.replace(">", ">") + return text.encode(encoding, "xmlcharrefreplace") except (TypeError, AttributeError): _raise_serialization_error(text) -def _escape_attrib(text, encoding=None, replace=string.replace): +def _escape_attrib(text, encoding): # escape attribute value try: - if encoding: - try: - text = _encode(text, encoding) - except UnicodeError: - return _encode_entity(text) - text = replace(text, "&", "&") - text = replace(text, "'", "'") # FIXME: overkill - text = replace(text, "\"", """) - text = replace(text, "<", "<") - text = replace(text, ">", ">") - return text + if "&" in text: + text = text.replace("&", "&") + if "<" in text: + text = text.replace("<", "<") + if ">" in text: + text = text.replace(">", ">") + if "\"" in text: + text = text.replace("\"", """) + if "\n" in text: + text = text.replace("\n", " ") + return text.encode(encoding, "xmlcharrefreplace") except (TypeError, AttributeError): _raise_serialization_error(text) -def fixtag(tag, namespaces): - # given a decorated tag (of the form {uri}tag), return prefixed - # tag and namespace declaration, if any - if isinstance(tag, QName): - tag = tag.text - namespace_uri, tag = string.split(tag[1:], "}", 1) - prefix = namespaces.get(namespace_uri) - if prefix is None: - prefix = _namespace_map.get(namespace_uri) - if prefix is None: - prefix = "ns%d" % len(namespaces) - namespaces[namespace_uri] = prefix - if prefix == "xml": - xmlns = None - else: - xmlns = ("xmlns:%s" % prefix, namespace_uri) - else: - xmlns = None - return "%s:%s" % (prefix, tag), xmlns +def _escape_attrib_html(text, encoding): + # escape attribute value + try: + if "&" in text: + text = text.replace("&", "&") + if ">" in text: + text = text.replace(">", ">") + if "\"" in text: + text = text.replace("\"", """) + return text.encode(encoding, "xmlcharrefreplace") + except (TypeError, AttributeError): + _raise_serialization_error(text) + +# -------------------------------------------------------------------- + +## +# Generates a string representation of an XML element, including all +# subelements. +# +# @param element An Element instance. +# @keyparam encoding Optional output encoding (default is US-ASCII). +# @keyparam method Optional output method ("xml", "html", "text" or +# "c14n"; default is "xml"). +# @return An encoded string containing the XML data. +# @defreturn string + +def tostring(element, encoding=None, method=None): + class dummy: + pass + data = [] + file = dummy() + file.write = data.append + ElementTree(element).write(file, encoding, method=method) + return "".join(data) + +## +# Generates a string representation of an XML element, including all +# subelements. The string is returned as a sequence of string fragments. +# +# @param element An Element instance. +# @keyparam encoding Optional output encoding (default is US-ASCII). +# @keyparam method Optional output method ("xml", "html", "text" or +# "c14n"; default is "xml"). +# @return A sequence object containing the XML data. +# @defreturn sequence +# @since 1.3 + +def tostringlist(element, encoding=None, method=None): + class dummy: + pass + data = [] + file = dummy() + file.write = data.append + ElementTree(element).write(file, encoding, method=method) + # FIXME: merge small fragments into larger parts + return data + +## +# Writes an element tree or element structure to sys.stdout. This +# function should be used for debugging only. +#

    +# The exact output format is implementation dependent. In this +# version, it's written as an ordinary XML file. +# +# @param elem An element tree or an individual element. + +def dump(elem): + # debugging + if not isinstance(elem, ElementTree): + elem = ElementTree(elem) + elem.write(sys.stdout) + tail = elem.getroot().tail + if not tail or tail[-1] != "\n": + sys.stdout.write("\n") + +# -------------------------------------------------------------------- +# parsing ## # Parses an XML document into an element tree. # # @param source A filename or file object containing XML data. # @param parser An optional parser instance. If not given, the -# standard {@link XMLTreeBuilder} parser is used. +# standard {@link XMLParser} parser is used. # @return An ElementTree instance def parse(source, parser=None): @@ -869,18 +1183,25 @@ # @param source A filename or file object containing XML data. # @param events A list of events to report back. If omitted, only "end" # events are reported. +# @param parser An optional parser instance. If not given, the +# standard {@link XMLParser} parser is used. # @return A (event, elem) iterator. -class iterparse: +def iterparse(source, events=None, parser=None): + if not hasattr(source, "read"): + source = open(source, "rb") + if not parser: + parser = XMLParser(target=TreeBuilder()) + return _IterParseIterator(source, events, parser) - def __init__(self, source, events=None): - if not hasattr(source, "read"): - source = open(source, "rb") +class _IterParseIterator(object): + + def __init__(self, source, events, parser): self._file = source self._events = [] self._index = 0 self.root = self._root = None - self._parser = XMLTreeBuilder() + self._parser = parser # wire up the parser for event reporting parser = self._parser._parser append = self._events.append @@ -908,15 +1229,17 @@ elif event == "start-ns": def handler(prefix, uri, event=event, append=append): try: - uri = _encode(uri, "ascii") + uri = (uri or "").encode("ascii") except UnicodeError: pass - append((event, (prefix or "", uri))) + append((event, (prefix or "", uri or ""))) parser.StartNamespaceDeclHandler = handler elif event == "end-ns": def handler(prefix, event=event, append=append): append((event, None)) parser.EndNamespaceDeclHandler = handler + else: + raise ValueError("unknown event %r" % event) def next(self): while 1: @@ -925,10 +1248,7 @@ except IndexError: if self._parser is None: self.root = self._root - try: - raise StopIteration - except NameError: - raise IndexError + raise StopIteration # load event buffer del self._events[:] self._index = 0 @@ -942,24 +1262,22 @@ self._index = self._index + 1 return item - try: - iter - def __iter__(self): - return self - except NameError: - def __getitem__(self, index): - return self.next() + def __iter__(self): + return self ## # Parses an XML document from a string constant. This function can # be used to embed "XML literals" in Python code. # # @param source A string containing XML data. +# @param parser An optional parser instance. If not given, the +# standard {@link XMLParser} parser is used. # @return An Element instance. # @defreturn Element -def XML(text): - parser = XMLTreeBuilder() +def XML(text, parser=None): + if not parser: + parser = XMLParser(target=TreeBuilder()) parser.feed(text) return parser.close() @@ -968,15 +1286,18 @@ # a dictionary which maps from element id:s to elements. # # @param source A string containing XML data. +# @param parser An optional parser instance. If not given, the +# standard {@link XMLParser} parser is used. # @return A tuple containing an Element instance and a dictionary. # @defreturn (Element, dictionary) -def XMLID(text): - parser = XMLTreeBuilder() +def XMLID(text, parser=None): + if not parser: + parser = XMLParser(target=TreeBuilder()) parser.feed(text) tree = parser.close() ids = {} - for elem in tree.getiterator(): + for elem in tree.iter(): id = elem.get("id") if id: ids[id] = elem @@ -993,21 +1314,23 @@ fromstring = XML ## -# Generates a string representation of an XML element, including all -# subelements. +# Parses an XML document from a sequence of string fragments. # -# @param element An Element instance. -# @return An encoded string containing the XML data. -# @defreturn string +# @param sequence A list or other sequence containing XML data fragments. +# @param parser An optional parser instance. If not given, the +# standard {@link XMLParser} parser is used. +# @return An Element instance. +# @defreturn Element +# @since 1.3 -def tostring(element, encoding=None): - class dummy: - pass - data = [] - file = dummy() - file.write = data.append - ElementTree(element).write(file, encoding) - return string.join(data, "") +def fromstringlist(sequence, parser=None): + if not parser: + parser = XMLParser(target=TreeBuilder()) + for text in sequence: + parser.feed(text) + return parser.close() + +# -------------------------------------------------------------------- ## # Generic element structure builder. This builder converts a sequence @@ -1020,7 +1343,7 @@ # @param element_factory Optional element factory. This factory # is called to create new Element instances, as necessary. -class TreeBuilder: +class TreeBuilder(object): def __init__(self, element_factory=None): self._data = [] # data collector @@ -1028,11 +1351,11 @@ self._last = None # last element self._tail = None # true if we're after an end tag if element_factory is None: - element_factory = _ElementInterface + element_factory = Element self._factory = element_factory ## - # Flushes the parser buffers, and returns the toplevel documen + # Flushes the builder buffers, and returns the toplevel document # element. # # @return An Element instance. @@ -1040,13 +1363,13 @@ def close(self): assert len(self._elem) == 0, "missing end tags" - assert self._last != None, "missing toplevel element" + assert self._last is not None, "missing toplevel element" return self._last def _flush(self): if self._data: if self._last is not None: - text = string.join(self._data, "") + text = "".join(self._data) if self._tail: assert self._last.tail is None, "internal error (tail)" self._last.tail = text @@ -1105,28 +1428,39 @@ # instance of the standard {@link #TreeBuilder} class. # @keyparam html Predefine HTML entities. This flag is not supported # by the current implementation. +# @keyparam encoding Optional encoding. If given, the value overrides +# the encoding specified in the XML file. # @see #ElementTree # @see #TreeBuilder -class XMLTreeBuilder: +class XMLParser(object): - def __init__(self, html=0, target=None): + def __init__(self, html=0, target=None, encoding=None): try: from xml.parsers import expat except ImportError: - raise ImportError( - "No module named expat; use SimpleXMLTreeBuilder instead" - ) - self._parser = parser = expat.ParserCreate(None, "}") + try: + import pyexpat as expat + except ImportError: + raise ImportError( + "No module named expat; use SimpleXMLTreeBuilder instead" + ) + parser = expat.ParserCreate(encoding, "}") if target is None: target = TreeBuilder() - self._target = target + # underscored names are provided for compatibility only + self.parser = self._parser = parser + self.target = self._target = target + self._error = expat.error self._names = {} # name memo cache # callbacks parser.DefaultHandlerExpand = self._default parser.StartElementHandler = self._start parser.EndElementHandler = self._end parser.CharacterDataHandler = self._data + # optional callbacks + parser.CommentHandler = self._comment + parser.ProcessingInstructionHandler = self._pi # let expat do the buffering, if supported try: self._parser.buffer_text = 1 @@ -1139,17 +1473,23 @@ parser.StartElementHandler = self._start_list except AttributeError: pass - encoding = None - if not parser.returns_unicode: - encoding = "utf-8" - # target.xml(encoding, None) self._doctype = None self.entity = {} + try: + self.version = "Expat %d.%d.%d" % expat.version_info + except AttributeError: + pass # unknown + + def _raiseerror(self, value): + err = ParseError(value) + err.code = value.code + err.position = value.lineno, value.offset + raise err def _fixtext(self, text): # convert text string to ascii, if possible try: - return _encode(text, "ascii") + return text.encode("ascii") except UnicodeError: return text @@ -1166,40 +1506,62 @@ def _start(self, tag, attrib_in): fixname = self._fixname + fixtext = self._fixtext tag = fixname(tag) attrib = {} for key, value in attrib_in.items(): - attrib[fixname(key)] = self._fixtext(value) - return self._target.start(tag, attrib) + attrib[fixname(key)] = fixtext(value) + return self.target.start(tag, attrib) def _start_list(self, tag, attrib_in): fixname = self._fixname + fixtext = self._fixtext tag = fixname(tag) attrib = {} if attrib_in: for i in range(0, len(attrib_in), 2): - attrib[fixname(attrib_in[i])] = self._fixtext(attrib_in[i+1]) - return self._target.start(tag, attrib) + attrib[fixname(attrib_in[i])] = fixtext(attrib_in[i+1]) + return self.target.start(tag, attrib) def _data(self, text): - return self._target.data(self._fixtext(text)) + return self.target.data(self._fixtext(text)) def _end(self, tag): - return self._target.end(self._fixname(tag)) + return self.target.end(self._fixname(tag)) + + def _comment(self, data): + try: + comment = self.target.comment + except AttributeError: + pass + else: + return comment(self._fixtext(data)) + + def _pi(self, target, data): + try: + pi = self.target.pi + except AttributeError: + pass + else: + return pi(self._fixtext(target), self._fixtext(data)) def _default(self, text): prefix = text[:1] if prefix == "&": # deal with undefined entities try: - self._target.data(self.entity[text[1:-1]]) + self.target.data(self.entity[text[1:-1]]) except KeyError: from xml.parsers import expat - raise expat.error( + err = expat.error( "undefined entity %s: line %d, column %d" % (text, self._parser.ErrorLineNumber, self._parser.ErrorColumnNumber) ) + err.code = 11 # XML_ERROR_UNDEFINED_ENTITY + err.lineno = self._parser.ErrorLineNumber + err.offset = self._parser.ErrorColumnNumber + raise err elif prefix == "<" and text[:9] == "": self._doctype = None return - text = string.strip(text) + text = text.strip() if not text: return self._doctype.append(text) @@ -1223,18 +1585,31 @@ return if pubid: pubid = pubid[1:-1] - self.doctype(name, pubid, system[1:-1]) + if hasattr(self.target, "doctype"): + self.target.doctype(name, pubid, system[1:-1]) + elif self.doctype is not self._XMLParser__doctype: + # warn about deprecated call + self._XMLParser__doctype(name, pubid, system[1:-1]) + self.doctype(name, pubid, system[1:-1]) self._doctype = None ## - # Handles a doctype declaration. + # (Deprecated) Handles a doctype declaration. # # @param name Doctype name. # @param pubid Public identifier. # @param system System identifier. def doctype(self, name, pubid, system): - pass + """This method of XMLParser is deprecated.""" + warnings.warn( + "This method of XMLParser is deprecated. Define doctype() " + "method on the TreeBuilder target.", + DeprecationWarning, + ) + + # sentinel, if doctype is redefined in a subclass + __doctype = doctype ## # Feeds data to the parser. @@ -1242,7 +1617,10 @@ # @param data Encoded data. def feed(self, data): - self._parser.Parse(data, 0) + try: + self._parser.Parse(data, 0) + except self._error, v: + self._raiseerror(v) ## # Finishes feeding data to the parser. @@ -1251,10 +1629,20 @@ # @defreturn Element def close(self): - self._parser.Parse("", 1) # end of data - tree = self._target.close() - del self._target, self._parser # get rid of circular references + try: + self._parser.Parse("", 1) # end of data + except self._error, v: + self._raiseerror(v) + tree = self.target.close() + del self.target, self._parser # get rid of circular references return tree # compatibility -XMLParser = XMLTreeBuilder +XMLTreeBuilder = XMLParser + +# workaround circular import. +try: + from ElementC14N import _serialize_c14n + _serialize["c14n"] = _serialize_c14n +except ImportError: + pass Modified: python/trunk/Lib/xml/etree/__init__.py ============================================================================== --- python/trunk/Lib/xml/etree/__init__.py (original) +++ python/trunk/Lib/xml/etree/__init__.py Thu Mar 11 15:36:19 2010 @@ -1,10 +1,10 @@ -# $Id: __init__.py 1821 2004-06-03 16:57:49Z fredrik $ +# $Id: __init__.py 3375 2008-02-13 08:05:08Z fredrik $ # elementtree package # -------------------------------------------------------------------- # The ElementTree toolkit is # -# Copyright (c) 1999-2004 by Fredrik Lundh +# Copyright (c) 1999-2008 by Fredrik Lundh # # By obtaining, using, and/or copying this software and/or its # associated documentation, you agree that you have read, understood, @@ -30,4 +30,4 @@ # -------------------------------------------------------------------- # Licensed to PSF under a Contributor Agreement. -# See http://www.python.org/2.4/license for licensing details. +# See http://www.python.org/psf/license for licensing details. Modified: python/trunk/Misc/NEWS ============================================================================== --- python/trunk/Misc/NEWS (original) +++ python/trunk/Misc/NEWS Thu Mar 11 15:36:19 2010 @@ -24,6 +24,9 @@ Library ------- +- Issue #6472: The xml.etree package is updated to ElementTree 1.3. The + cElementTree module is updated too. + - Issue #7880: Fix sysconfig when the python executable is a symbolic link. - Issue #7624: Fix isinstance(foo(), collections.Callable) for old-style Modified: python/trunk/Modules/_elementtree.c ============================================================================== --- python/trunk/Modules/_elementtree.c (original) +++ python/trunk/Modules/_elementtree.c Thu Mar 11 15:36:19 2010 @@ -1,21 +1,15 @@ /* * ElementTree - * $Id: _elementtree.c 2657 2006-03-12 20:50:32Z fredrik $ + * $Id: _elementtree.c 3473 2009-01-11 22:53:55Z fredrik $ * * elementtree accelerator * * History: * 1999-06-20 fl created (as part of sgmlop) * 2001-05-29 fl effdom edition - * 2001-06-05 fl backported to unix; fixed bogus free in clear - * 2001-07-10 fl added findall helper * 2003-02-27 fl elementtree edition (alpha) * 2004-06-03 fl updates for elementtree 1.2 - * 2005-01-05 fl added universal name cache, Element/SubElement factories - * 2005-01-06 fl moved python helpers into C module; removed 1.5.2 support - * 2005-01-07 fl added 2.1 support; work around broken __copy__ in 2.3 - * 2005-01-08 fl added makeelement method; fixed path support - * 2005-01-10 fl optimized memory usage + * 2005-01-05 fl major optimization effort * 2005-01-11 fl first public release (cElementTree 0.8) * 2005-01-12 fl split element object into base and extras * 2005-01-13 fl use tagged pointers for tail/text (cElementTree 0.9) @@ -35,16 +29,23 @@ * 2005-12-16 fl added support for non-standard encodings * 2006-03-08 fl fixed a couple of potential null-refs and leaks * 2006-03-12 fl merge in 2.5 ssize_t changes + * 2007-08-25 fl call custom builder's close method from XMLParser + * 2007-08-31 fl added iter, extend from ET 1.3 + * 2007-09-01 fl fixed ParseError exception, setslice source type, etc + * 2007-09-03 fl fixed handling of negative insert indexes + * 2007-09-04 fl added itertext from ET 1.3 + * 2007-09-06 fl added position attribute to ParseError exception + * 2008-06-06 fl delay error reporting in iterparse (from Hrvoje Niksic) * - * Copyright (c) 1999-2006 by Secret Labs AB. All rights reserved. - * Copyright (c) 1999-2006 by Fredrik Lundh. + * Copyright (c) 1999-2009 by Secret Labs AB. All rights reserved. + * Copyright (c) 1999-2009 by Fredrik Lundh. * * info at pythonware.com * http://www.pythonware.com */ /* Licensed to PSF under a Contributor Agreement. */ -/* See http://www.python.org/2.4/license for licensing details. */ +/* See http://www.python.org/psf/license for licensing details. */ #include "Python.h" @@ -56,7 +57,7 @@ /* Leave defined to include the expat-based XMLParser type */ #define USE_EXPAT -/* Define to to all expat calls via pyexpat's embedded expat library */ +/* Define to do all expat calls via pyexpat's embedded expat library */ /* #define USE_PYEXPAT_CAPI */ /* An element can hold this many children without extra memory @@ -94,6 +95,11 @@ #endif /* compatibility macros */ +#if (PY_VERSION_HEX < 0x02060000) +#define Py_REFCNT(ob) (((PyObject*)(ob))->ob_refcnt) +#define Py_TYPE(ob) (((PyObject*)(ob))->ob_type) +#endif + #if (PY_VERSION_HEX < 0x02050000) typedef int Py_ssize_t; #define lenfunc inquiry @@ -101,18 +107,11 @@ #if (PY_VERSION_HEX < 0x02040000) #define PyDict_CheckExact PyDict_Check -#if (PY_VERSION_HEX < 0x02020000) -#define PyList_CheckExact PyList_Check -#define PyString_CheckExact PyString_Check -#if (PY_VERSION_HEX >= 0x01060000) -#define Py_USING_UNICODE /* always enabled for 2.0 and 2.1 */ -#endif -#endif -#endif #if !defined(Py_RETURN_NONE) #define Py_RETURN_NONE return Py_INCREF(Py_None), Py_None #endif +#endif /* macros used to store 'join' flags in string object pointers. note that all use of text and tail as object pointers must be wrapped in @@ -123,9 +122,11 @@ #define JOIN_OBJ(p) ((PyObject*) ((Py_uintptr_t) (p) & ~1)) /* glue functions (see the init function for details) */ +static PyObject* elementtree_parseerror_obj; static PyObject* elementtree_copyelement_obj; static PyObject* elementtree_deepcopy_obj; -static PyObject* elementtree_getiterator_obj; +static PyObject* elementtree_iter_obj; +static PyObject* elementtree_itertext_obj; static PyObject* elementpath_obj; /* helpers */ @@ -209,23 +210,6 @@ return result; } -#if (PY_VERSION_HEX < 0x02020000) -LOCAL(int) -PyDict_Update(PyObject* dict, PyObject* other) -{ - /* PyDict_Update emulation for 2.1 and earlier */ - - PyObject* res; - - res = PyObject_CallMethod(dict, "update", "O", other); - if (!res) - return -1; - - Py_DECREF(res); - return 0; -} -#endif - /* -------------------------------------------------------------------- */ /* the element type */ @@ -330,7 +314,7 @@ if (element_new_extra(self, attrib) < 0) { PyObject_Del(self); return NULL; - } + } self->extra->length = 0; self->extra->allocated = STATIC_CHILDREN; @@ -428,6 +412,7 @@ PyObject* res = self->extra->attrib; if (res == Py_None) { + Py_DECREF(res); /* create missing dictionary */ res = PyDict_New(); if (!res) @@ -709,6 +694,8 @@ /* add object to memo dictionary (so deepcopy won't visit it again) */ id = PyInt_FromLong((Py_uintptr_t) self); + if (!id) + goto error; i = PyDict_SetItem(memo, id, (PyObject*) element); @@ -732,7 +719,8 @@ /* check if a tag contains an xpath character */ -#define PATHCHAR(ch) (ch == '/' || ch == '*' || ch == '[' || ch == '@') +#define PATHCHAR(ch) \ + (ch == '/' || ch == '*' || ch == '[' || ch == '@' || ch == '.') #if defined(Py_USING_UNICODE) if (PyUnicode_Check(tag)) { @@ -765,17 +753,51 @@ } static PyObject* +element_extend(ElementObject* self, PyObject* args) +{ + 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, ""); + if (!seq) { + PyErr_Format( + PyExc_TypeError, + "expected sequence, not \"%.200s\"", Py_TYPE(seq_in)->tp_name + ); + return NULL; + } + + seqlen = PySequence_Size(seq); + for (i = 0; i < seqlen; i++) { + PyObject* element = PySequence_Fast_GET_ITEM(seq, i); + if (element_add_subelement(self, element) < 0) { + Py_DECREF(seq); + return NULL; + } + } + + Py_DECREF(seq); + + Py_RETURN_NONE; +} + +static PyObject* element_find(ElementObject* self, PyObject* args) { int i; PyObject* tag; - if (!PyArg_ParseTuple(args, "O:find", &tag)) + PyObject* namespaces = Py_None; + if (!PyArg_ParseTuple(args, "O|O:find", &tag, &namespaces)) return NULL; - if (checkpath(tag)) + if (checkpath(tag) || namespaces != Py_None) return PyObject_CallMethod( - elementpath_obj, "find", "OO", self, tag + elementpath_obj, "find", "OOO", self, tag, namespaces ); if (!self->extra) @@ -800,12 +822,13 @@ PyObject* tag; PyObject* default_value = Py_None; - if (!PyArg_ParseTuple(args, "O|O:findtext", &tag, &default_value)) + PyObject* namespaces = Py_None; + if (!PyArg_ParseTuple(args, "O|OO:findtext", &tag, &default_value, &namespaces)) return NULL; - if (checkpath(tag)) + if (checkpath(tag) || namespaces != Py_None) return PyObject_CallMethod( - elementpath_obj, "findtext", "OOO", self, tag, default_value + elementpath_obj, "findtext", "OOOO", self, tag, default_value, namespaces ); if (!self->extra) { @@ -835,12 +858,13 @@ PyObject* out; PyObject* tag; - if (!PyArg_ParseTuple(args, "O:findall", &tag)) + PyObject* namespaces = Py_None; + if (!PyArg_ParseTuple(args, "O|O:findall", &tag, &namespaces)) return NULL; - if (checkpath(tag)) + if (checkpath(tag) || namespaces != Py_None) return PyObject_CallMethod( - elementpath_obj, "findall", "OO", self, tag + elementpath_obj, "findall", "OOO", self, tag, namespaces ); out = PyList_New(0); @@ -865,6 +889,19 @@ } static PyObject* +element_iterfind(ElementObject* self, PyObject* args) +{ + PyObject* tag; + PyObject* namespaces = Py_None; + if (!PyArg_ParseTuple(args, "O|O:iterfind", &tag, &namespaces)) + return NULL; + + return PyObject_CallMethod( + elementpath_obj, "iterfind", "OOO", self, tag, namespaces + ); +} + +static PyObject* element_get(ElementObject* self, PyObject* args) { PyObject* value; @@ -892,6 +929,8 @@ int i; PyObject* list; + /* FIXME: report as deprecated? */ + if (!PyArg_ParseTuple(args, ":getchildren")) return NULL; @@ -912,18 +951,18 @@ } static PyObject* -element_getiterator(ElementObject* self, PyObject* args) +element_iter(ElementObject* self, PyObject* args) { PyObject* result; PyObject* tag = Py_None; - if (!PyArg_ParseTuple(args, "|O:getiterator", &tag)) + if (!PyArg_ParseTuple(args, "|O:iter", &tag)) return NULL; - if (!elementtree_getiterator_obj) { + if (!elementtree_iter_obj) { PyErr_SetString( PyExc_RuntimeError, - "getiterator helper not found" + "iter helper not found" ); return NULL; } @@ -935,61 +974,58 @@ Py_INCREF(self); PyTuple_SET_ITEM(args, 0, (PyObject*) self); Py_INCREF(tag); PyTuple_SET_ITEM(args, 1, (PyObject*) tag); - result = PyObject_CallObject(elementtree_getiterator_obj, args); + result = PyObject_CallObject(elementtree_iter_obj, args); Py_DECREF(args); return result; } + static PyObject* -element_getitem(PyObject* self_, Py_ssize_t index) +element_itertext(ElementObject* self, PyObject* args) { - ElementObject* self = (ElementObject*) self_; + PyObject* result; + + if (!PyArg_ParseTuple(args, ":itertext")) + return NULL; - if (!self->extra || index < 0 || index >= self->extra->length) { + if (!elementtree_itertext_obj) { PyErr_SetString( - PyExc_IndexError, - "child index out of range" + PyExc_RuntimeError, + "itertext helper not found" ); return NULL; } - Py_INCREF(self->extra->children[index]); - return self->extra->children[index]; + args = PyTuple_New(1); + if (!args) + return NULL; + + Py_INCREF(self); PyTuple_SET_ITEM(args, 0, (PyObject*) self); + + result = PyObject_CallObject(elementtree_itertext_obj, args); + + Py_DECREF(args); + + return result; } static PyObject* -element_getslice(PyObject* self_, Py_ssize_t start, Py_ssize_t end) +element_getitem(PyObject* self_, Py_ssize_t index) { ElementObject* self = (ElementObject*) self_; - Py_ssize_t i; - PyObject* list; - if (!self->extra) - return PyList_New(0); - - /* standard clamping */ - if (start < 0) - start = 0; - if (end < 0) - end = 0; - if (end > self->extra->length) - end = self->extra->length; - if (start > end) - start = end; - - list = PyList_New(end - start); - if (!list) + if (!self->extra || index < 0 || index >= self->extra->length) { + PyErr_SetString( + PyExc_IndexError, + "child index out of range" + ); return NULL; - - for (i = start; i < end; i++) { - PyObject* item = self->extra->children[i]; - Py_INCREF(item); - PyList_SET_ITEM(list, i - start, item); } - return list; + Py_INCREF(self->extra->children[index]); + return self->extra->children[index]; } static PyObject* @@ -1006,8 +1042,11 @@ if (!self->extra) element_new_extra(self, NULL); - if (index < 0) - index = 0; + if (index < 0) { + index += self->extra->length; + if (index < 0) + index = 0; + } if (index > self->extra->length) index = self->extra->length; @@ -1188,77 +1227,6 @@ } static int -element_setslice(PyObject* self_, Py_ssize_t start, Py_ssize_t end, PyObject* item) -{ - ElementObject* self = (ElementObject*) self_; - Py_ssize_t i, new, old; - PyObject* recycle = NULL; - - if (!self->extra) - element_new_extra(self, NULL); - - /* standard clamping */ - if (start < 0) - start = 0; - if (end < 0) - end = 0; - if (end > self->extra->length) - end = self->extra->length; - if (start > end) - start = end; - - old = end - start; - - if (item == NULL) - new = 0; - else if (PyList_CheckExact(item)) { - new = PyList_GET_SIZE(item); - } else { - /* FIXME: support arbitrary sequences? */ - PyErr_Format( - PyExc_TypeError, - "expected list, not \"%.200s\"", Py_TYPE(item)->tp_name - ); - return -1; - } - - if (old > 0) { - /* to avoid recursive calls to this method (via decref), move - old items to the recycle bin here, and get rid of them when - we're done modifying the element */ - recycle = PyList_New(old); - for (i = 0; i < old; i++) - PyList_SET_ITEM(recycle, i, self->extra->children[i + start]); - } - - if (new < old) { - /* delete slice */ - for (i = end; i < self->extra->length; i++) - self->extra->children[i + new - old] = self->extra->children[i]; - } else if (new > old) { - /* insert slice */ - if (element_resize(self, new - old) < 0) - return -1; - for (i = self->extra->length-1; i >= end; i--) - self->extra->children[i + new - old] = self->extra->children[i]; - } - - /* replace the slice */ - for (i = 0; i < new; i++) { - PyObject* element = PyList_GET_ITEM(item, i); - Py_INCREF(element); - self->extra->children[i + start] = element; - } - - self->extra->length += new - old; - - /* discard the recycle bin, and everything in it */ - Py_XDECREF(recycle); - - return 0; -} - -static int element_setitem(PyObject* self_, Py_ssize_t index, PyObject* item) { ElementObject* self = (ElementObject*) self_; @@ -1288,6 +1256,190 @@ return 0; } +static PyObject* +element_subscr(PyObject* self_, PyObject* item) +{ + ElementObject* self = (ElementObject*) self_; + +#if (PY_VERSION_HEX < 0x02050000) + if (PyInt_Check(item) || PyLong_Check(item)) { + long i = PyInt_AsLong(item); +#else + if (PyIndex_Check(item)) { + Py_ssize_t i = PyNumber_AsSsize_t(item, PyExc_IndexError); +#endif + + if (i == -1 && PyErr_Occurred()) { + return NULL; + } + if (i < 0 && self->extra) + i += self->extra->length; + return element_getitem(self_, i); + } + else if (PySlice_Check(item)) { + Py_ssize_t start, stop, step, slicelen, cur, i; + PyObject* list; + + if (!self->extra) + return PyList_New(0); + + if (PySlice_GetIndicesEx((PySliceObject *)item, + self->extra->length, + &start, &stop, &step, &slicelen) < 0) { + return NULL; + } + + if (slicelen <= 0) + return PyList_New(0); + else { + list = PyList_New(slicelen); + if (!list) + return NULL; + + for (cur = start, i = 0; i < slicelen; + cur += step, i++) { + PyObject* item = self->extra->children[cur]; + Py_INCREF(item); + PyList_SET_ITEM(list, i, item); + } + + return list; + } + } + else { + PyErr_SetString(PyExc_TypeError, + "element indices must be integers"); + return NULL; + } +} + +static int +element_ass_subscr(PyObject* self_, PyObject* item, PyObject* value) +{ + ElementObject* self = (ElementObject*) self_; + +#if (PY_VERSION_HEX < 0x02050000) + if (PyInt_Check(item) || PyLong_Check(item)) { + long i = PyInt_AsLong(item); +#else + if (PyIndex_Check(item)) { + Py_ssize_t i = PyNumber_AsSsize_t(item, PyExc_IndexError); +#endif + + if (i == -1 && PyErr_Occurred()) { + return -1; + } + if (i < 0 && self->extra) + i += self->extra->length; + return element_setitem(self_, i, value); + } + else if (PySlice_Check(item)) { + Py_ssize_t start, stop, step, slicelen, newlen, cur, i; + + PyObject* recycle = NULL; + PyObject* seq = NULL; + + if (!self->extra) + element_new_extra(self, NULL); + + if (PySlice_GetIndicesEx((PySliceObject *)item, + self->extra->length, + &start, &stop, &step, &slicelen) < 0) { + return -1; + } + + if (value == NULL) + newlen = 0; + else { + seq = PySequence_Fast(value, ""); + if (!seq) { + PyErr_Format( + PyExc_TypeError, + "expected sequence, not \"%.200s\"", Py_TYPE(value)->tp_name + ); + return -1; + } + newlen = PySequence_Size(seq); + } + + if (step != 1 && newlen != slicelen) + { + PyErr_Format(PyExc_ValueError, +#if (PY_VERSION_HEX < 0x02050000) + "attempt to assign sequence of size %d " + "to extended slice of size %d", +#else + "attempt to assign sequence of size %zd " + "to extended slice of size %zd", +#endif + newlen, slicelen + ); + return -1; + } + + + /* Resize before creating the recycle bin, to prevent refleaks. */ + if (newlen > slicelen) { + if (element_resize(self, newlen - slicelen) < 0) { + if (seq) { + Py_DECREF(seq); + } + return -1; + } + } + + if (slicelen > 0) { + /* to avoid recursive calls to this method (via decref), move + old items to the recycle bin here, and get rid of them when + we're done modifying the element */ + recycle = PyList_New(slicelen); + if (!recycle) { + if (seq) { + Py_DECREF(seq); + } + return -1; + } + for (cur = start, i = 0; i < slicelen; + cur += step, i++) + PyList_SET_ITEM(recycle, i, self->extra->children[cur]); + } + + if (newlen < slicelen) { + /* delete slice */ + for (i = stop; i < self->extra->length; i++) + self->extra->children[i + newlen - slicelen] = self->extra->children[i]; + } else if (newlen > slicelen) { + /* insert slice */ + for (i = self->extra->length-1; i >= stop; i--) + self->extra->children[i + newlen - slicelen] = self->extra->children[i]; + } + + /* replace the slice */ + for (cur = start, i = 0; i < newlen; + cur += step, i++) { + PyObject* element = PySequence_Fast_GET_ITEM(seq, i); + Py_INCREF(element); + self->extra->children[cur] = element; + } + + self->extra->length += newlen - slicelen; + + if (seq) { + Py_DECREF(seq); + } + + /* discard the recycle bin, and everything in it */ + Py_XDECREF(recycle); + + return 0; + } + else { + PyErr_SetString(PyExc_TypeError, + "element indices must be integers"); + return -1; + } +} + static PyMethodDef element_methods[] = { {"clear", (PyCFunction) element_clear, METH_VARARGS}, @@ -1300,10 +1452,15 @@ {"findall", (PyCFunction) element_findall, METH_VARARGS}, {"append", (PyCFunction) element_append, METH_VARARGS}, + {"extend", (PyCFunction) element_extend, METH_VARARGS}, {"insert", (PyCFunction) element_insert, METH_VARARGS}, {"remove", (PyCFunction) element_remove, METH_VARARGS}, - {"getiterator", (PyCFunction) element_getiterator, METH_VARARGS}, + {"iter", (PyCFunction) element_iter, METH_VARARGS}, + {"itertext", (PyCFunction) element_itertext, METH_VARARGS}, + {"iterfind", (PyCFunction) element_iterfind, METH_VARARGS}, + + {"getiterator", (PyCFunction) element_iter, METH_VARARGS}, {"getchildren", (PyCFunction) element_getchildren, METH_VARARGS}, {"items", (PyCFunction) element_items, METH_VARARGS}, @@ -1334,22 +1491,31 @@ { PyObject* 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_INCREF(res); + return res; + } + + /* methods */ res = Py_FindMethod(element_methods, (PyObject*) self, name); if (res) - return res; + return res; PyErr_Clear(); - if (strcmp(name, "tag") == 0) - res = self->tag; - else if (strcmp(name, "text") == 0) - res = element_get_text(self); - else if (strcmp(name, "tail") == 0) { + /* less common attributes */ + if (strcmp(name, "tail") == 0) { res = element_get_tail(self); } else if (strcmp(name, "attrib") == 0) { if (!self->extra) element_new_extra(self, NULL); - res = element_get_attrib(self); + res = element_get_attrib(self); } else { PyErr_SetString(PyExc_AttributeError, name); return NULL; @@ -1404,9 +1570,15 @@ 0, /* sq_concat */ 0, /* sq_repeat */ element_getitem, - element_getslice, + 0, element_setitem, - element_setslice, + 0, +}; + +static PyMappingMethods element_as_mapping = { + (lenfunc) element_length, + (binaryfunc) element_subscr, + (objobjargproc) element_ass_subscr, }; statichere PyTypeObject Element_Type = { @@ -1421,6 +1593,7 @@ (reprfunc)element_repr, /* tp_repr */ 0, /* tp_as_number */ &element_as_sequence, /* tp_as_sequence */ + &element_as_mapping, /* tp_as_mapping */ }; /* ==================================================================== */ @@ -1558,7 +1731,7 @@ } else { if (self->root) { PyErr_SetString( - PyExc_SyntaxError, + elementtree_parseerror_obj, "multiple elements on top level" ); goto error; @@ -1699,7 +1872,7 @@ LOCAL(void) treebuilder_handle_namespace(TreeBuilderObject* self, int start, - const char* prefix, const char *uri) + PyObject *prefix, PyObject *uri) { PyObject* res; PyObject* action; @@ -1712,8 +1885,7 @@ if (!self->start_ns_event_obj) return; action = self->start_ns_event_obj; - /* FIXME: prefix and uri use utf-8 encoding! */ - parcel = Py_BuildValue("ss", (prefix) ? prefix : "", uri); + parcel = Py_BuildValue("OO", prefix, uri); if (!parcel) return; Py_INCREF(action); @@ -1857,6 +2029,7 @@ PyObject* names; PyObject* handle_xml; + PyObject* handle_start; PyObject* handle_data; PyObject* handle_end; @@ -1864,6 +2037,8 @@ PyObject* handle_comment; PyObject* handle_pi; + PyObject* handle_close; + } XMLParserObject; staticforward PyTypeObject XMLParser_Type; @@ -1971,6 +2146,36 @@ return value; } +static void +expat_set_error(const char* message, int line, int column) +{ + PyObject *error; + PyObject *position; + char buffer[256]; + + sprintf(buffer, "%s: line %d, column %d", message, line, column); + + error = PyObject_CallFunction(elementtree_parseerror_obj, "s", buffer); + if (!error) + return; + + /* add position attribute */ + position = Py_BuildValue("(ii)", line, column); + if (!position) { + Py_DECREF(error); + return; + } + if (PyObject_SetAttrString(error, "position", position) == -1) { + Py_DECREF(error); + Py_DECREF(position); + return; + } + Py_DECREF(position); + + PyErr_SetObject(elementtree_parseerror_obj, error); + Py_DECREF(error); +} + /* -------------------------------------------------------------------- */ /* handlers */ @@ -2001,10 +2206,12 @@ else res = NULL; Py_XDECREF(res); - } else { - PyErr_Format( - PyExc_SyntaxError, "undefined entity &%s;: line %ld, column %ld", - PyString_AS_STRING(key), + } else if (!PyErr_Occurred()) { + /* Report the first error, not the last */ + char message[128]; + sprintf(message, "undefined entity &%.100s;", PyString_AS_STRING(key)); + expat_set_error( + message, EXPAT(GetErrorLineNumber)(self->parser), EXPAT(GetErrorColumnNumber)(self->parser) ); @@ -2059,9 +2266,15 @@ /* shortcut */ res = treebuilder_handle_start((TreeBuilderObject*) self->target, tag, attrib); - else if (self->handle_start) + else if (self->handle_start) { + if (attrib == Py_None) { + Py_DECREF(attrib); + attrib = PyDict_New(); + if (!attrib) + return; + } res = PyObject_CallFunction(self->handle_start, "OO", tag, attrib); - else + } else res = NULL; Py_DECREF(tag); @@ -2121,9 +2334,28 @@ expat_start_ns_handler(XMLParserObject* self, const XML_Char* prefix, const XML_Char *uri) { + PyObject* sprefix = NULL; + PyObject* suri = NULL; + + suri = makestring(uri, strlen(uri)); + if (!suri) + return; + + if (prefix) + sprefix = makestring(prefix, strlen(prefix)); + else + sprefix = PyString_FromStringAndSize("", 0); + if (!sprefix) { + Py_DECREF(suri); + return; + } + treebuilder_handle_namespace( - (TreeBuilderObject*) self->target, 1, prefix, uri + (TreeBuilderObject*) self->target, 1, sprefix, suri ); + + Py_DECREF(sprefix); + Py_DECREF(suri); } static void @@ -2200,10 +2432,10 @@ p = PyUnicode_AS_UNICODE(u); for (i = 0; i < 256; i++) { - if (p[i] != Py_UNICODE_REPLACEMENT_CHARACTER) - info->map[i] = p[i]; + if (p[i] != Py_UNICODE_REPLACEMENT_CHARACTER) + info->map[i] = p[i]; else - info->map[i] = -1; + info->map[i] = -1; } Py_DECREF(u); @@ -2288,6 +2520,7 @@ 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"); PyErr_Clear(); @@ -2333,6 +2566,7 @@ { EXPAT(ParserFree)(self->parser); + Py_XDECREF(self->handle_close); Py_XDECREF(self->handle_pi); Py_XDECREF(self->handle_comment); Py_XDECREF(self->handle_end); @@ -2363,8 +2597,7 @@ return NULL; if (!ok) { - PyErr_Format( - PyExc_SyntaxError, "%s: line %ld, column %ld", + expat_set_error( EXPAT(ErrorString)(EXPAT(GetErrorCode)(self->parser)), EXPAT(GetErrorLineNumber)(self->parser), EXPAT(GetErrorColumnNumber)(self->parser) @@ -2385,13 +2618,17 @@ return NULL; res = expat_parse(self, "", 0, 1); + if (!res) + return NULL; - if (res && TreeBuilder_CheckExact(self->target)) { + if (TreeBuilder_CheckExact(self->target)) { Py_DECREF(res); return treebuilder_done((TreeBuilderObject*) self->target); - } - - return res; + } if (self->handle_close) { + Py_DECREF(res); + return PyObject_CallFunction(self->handle_close, ""); + } else + return res; } static PyObject* @@ -2575,14 +2812,14 @@ res = Py_FindMethod(xmlparser_methods, (PyObject*) self, name); if (res) - return res; + return res; PyErr_Clear(); if (strcmp(name, "entity") == 0) - res = self->entity; + res = self->entity; else if (strcmp(name, "target") == 0) - res = self->target; + res = self->target; else if (strcmp(name, "version") == 0) { char buffer[100]; sprintf(buffer, "Expat %d.%d.%d", XML_MAJOR_VERSION, @@ -2628,9 +2865,6 @@ PyObject* m; PyObject* g; char* bootstrap; -#if defined(USE_PYEXPAT_CAPI) - struct PyExpat_CAPI* capi; -#endif /* Patch object type */ Py_TYPE(&Element_Type) = Py_TYPE(&TreeBuilder_Type) = &PyType_Type; @@ -2652,10 +2886,6 @@ bootstrap = ( -#if (PY_VERSION_HEX >= 0x02020000 && PY_VERSION_HEX < 0x02030000) - "from __future__ import generators\n" /* enable yield under 2.2 */ -#endif - "from copy import copy, deepcopy\n" "try:\n" @@ -2673,11 +2903,14 @@ " def copyelement(elem):\n" " return elem\n" - "def Comment(text=None):\n" /* public */ + "class CommentProxy:\n" + " def __call__(self, text=None):\n" " element = cElementTree.Element(ET.Comment)\n" " element.text = text\n" " return element\n" - "cElementTree.Comment = Comment\n" + " def __cmp__(self, other):\n" + " return cmp(ET.Comment, other)\n" + "cElementTree.Comment = CommentProxy()\n" "class ElementTree(ET.ElementTree):\n" /* public */ " def parse(self, source, parser=None):\n" @@ -2696,23 +2929,23 @@ " return self._root\n" "cElementTree.ElementTree = ElementTree\n" - "def getiterator(node, tag=None):\n" /* helper */ + "def iter(node, tag=None):\n" /* helper */ " if tag == '*':\n" " tag = None\n" -#if (PY_VERSION_HEX < 0x02020000) - " nodes = []\n" /* 2.1 doesn't have yield */ - " if tag is None or node.tag == tag:\n" - " nodes.append(node)\n" - " for node in node:\n" - " nodes.extend(getiterator(node, tag))\n" - " return nodes\n" -#else " if tag is None or node.tag == tag:\n" " yield node\n" " for node in node:\n" - " for node in getiterator(node, tag):\n" + " for node in iter(node, tag):\n" " yield node\n" -#endif + + "def itertext(node):\n" /* helper */ + " if node.text:\n" + " yield node.text\n" + " for e in node:\n" + " for s in e.itertext():\n" + " yield s\n" + " if e.tail:\n" + " yield e.tail\n" "def parse(source, parser=None):\n" /* public */ " tree = ElementTree()\n" @@ -2720,48 +2953,52 @@ " return tree\n" "cElementTree.parse = parse\n" -#if (PY_VERSION_HEX < 0x02020000) - "if hasattr(ET, 'iterparse'):\n" - " cElementTree.iterparse = ET.iterparse\n" /* delegate on 2.1 */ -#else "class iterparse(object):\n" " root = None\n" " def __init__(self, file, events=None):\n" " if not hasattr(file, 'read'):\n" " file = open(file, 'rb')\n" " self._file = file\n" - " self._events = events\n" - " def __iter__(self):\n" - " events = []\n" + " self._events = []\n" + " self._index = 0\n" + " self.root = self._root = None\n" " b = cElementTree.TreeBuilder()\n" - " p = cElementTree.XMLParser(b)\n" - " p._setevents(events, self._events)\n" + " self._parser = cElementTree.XMLParser(b)\n" + " self._parser._setevents(self._events, events)\n" + " def next(self):\n" " while 1:\n" - " data = self._file.read(16384)\n" - " if not data:\n" - " break\n" - " p.feed(data)\n" - " for event in events:\n" - " yield event\n" - " del events[:]\n" - " root = p.close()\n" - " for event in events:\n" - " yield event\n" - " self.root = root\n" + " try:\n" + " item = self._events[self._index]\n" + " except IndexError:\n" + " if self._parser is None:\n" + " self.root = self._root\n" + " raise StopIteration\n" + " # load event buffer\n" + " del self._events[:]\n" + " self._index = 0\n" + " data = self._file.read(16384)\n" + " if data:\n" + " self._parser.feed(data)\n" + " else:\n" + " self._root = self._parser.close()\n" + " self._parser = None\n" + " else:\n" + " self._index = self._index + 1\n" + " return item\n" + " def __iter__(self):\n" + " return self\n" "cElementTree.iterparse = iterparse\n" -#endif - "def PI(target, text=None):\n" /* public */ - " element = cElementTree.Element(ET.ProcessingInstruction)\n" + "class PIProxy:\n" + " def __call__(self, target, text=None):\n" + " element = cElementTree.Element(ET.PI)\n" " element.text = target\n" " if text:\n" " element.text = element.text + ' ' + text\n" " return element\n" - - " elem = cElementTree.Element(ET.PI)\n" - " elem.text = text\n" - " return elem\n" - "cElementTree.PI = cElementTree.ProcessingInstruction = PI\n" + " def __cmp__(self, other):\n" + " return cmp(ET.PI, other)\n" + "cElementTree.PI = cElementTree.ProcessingInstruction = PIProxy()\n" "def XML(text):\n" /* public */ " parser = cElementTree.XMLParser()\n" @@ -2772,25 +3009,34 @@ "def XMLID(text):\n" /* public */ " tree = XML(text)\n" " ids = {}\n" - " for elem in tree.getiterator():\n" + " for elem in tree.iter():\n" " id = elem.get('id')\n" " if id:\n" " ids[id] = elem\n" " return tree, ids\n" "cElementTree.XMLID = XMLID\n" + "try:\n" + " register_namespace = ET.register_namespace\n" + "except AttributeError:\n" + " def register_namespace(prefix, uri):\n" + " ET._namespace_map[uri] = prefix\n" + "cElementTree.register_namespace = register_namespace\n" + "cElementTree.dump = ET.dump\n" "cElementTree.ElementPath = ElementPath = ET.ElementPath\n" "cElementTree.iselement = ET.iselement\n" "cElementTree.QName = ET.QName\n" "cElementTree.tostring = ET.tostring\n" + "cElementTree.fromstringlist = ET.fromstringlist\n" + "cElementTree.tostringlist = ET.tostringlist\n" "cElementTree.VERSION = '" VERSION "'\n" "cElementTree.__version__ = '" VERSION "'\n" - "cElementTree.XMLParserError = SyntaxError\n" ); - PyRun_String(bootstrap, Py_file_input, g, NULL); + if (!PyRun_String(bootstrap, Py_file_input, g, NULL)) + return; elementpath_obj = PyDict_GetItemString(g, "ElementPath"); @@ -2805,21 +3051,28 @@ } } else PyErr_Clear(); + elementtree_deepcopy_obj = PyDict_GetItemString(g, "deepcopy"); - elementtree_getiterator_obj = PyDict_GetItemString(g, "getiterator"); + elementtree_iter_obj = PyDict_GetItemString(g, "iter"); + elementtree_itertext_obj = PyDict_GetItemString(g, "itertext"); #if defined(USE_PYEXPAT_CAPI) /* link against pyexpat, if possible */ - capi = PyCObject_Import("pyexpat", "expat_CAPI"); - if (capi && - strcmp(capi->magic, PyExpat_CAPI_MAGIC) == 0 && - capi->size <= sizeof(*expat_capi) && - capi->MAJOR_VERSION == XML_MAJOR_VERSION && - capi->MINOR_VERSION == XML_MINOR_VERSION && - capi->MICRO_VERSION == XML_MICRO_VERSION) - expat_capi = capi; - else - expat_capi = NULL; + expat_capi = PyCObject_Import("pyexpat", "expat_CAPI"); + if (expat_capi) { + /* check that it's usable */ + if (strcmp(expat_capi->magic, PyExpat_CAPI_MAGIC) != 0 || + 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) + expat_capi = NULL; + } #endif + elementtree_parseerror_obj = PyErr_NewException( + "cElementTree.ParseError", PyExc_SyntaxError, NULL + ); + Py_INCREF(elementtree_parseerror_obj); + PyModule_AddObject(m, "ParseError", elementtree_parseerror_obj); } From python-checkins at python.org Thu Mar 11 16:55:11 2010 From: python-checkins at python.org (florent.xicluna) Date: Thu, 11 Mar 2010 16:55:11 +0100 (CET) Subject: [Python-checkins] r78839 - in python/trunk: Lib/test/test_xml_etree.py Modules/_elementtree.c Message-ID: <20100311155511.5F1EBF627@mail.python.org> Author: florent.xicluna Date: Thu Mar 11 16:55:11 2010 New Revision: 78839 Log: Fix repr of tree Element on windows. Modified: python/trunk/Lib/test/test_xml_etree.py python/trunk/Modules/_elementtree.c Modified: python/trunk/Lib/test/test_xml_etree.py ============================================================================== --- python/trunk/Lib/test/test_xml_etree.py (original) +++ python/trunk/Lib/test/test_xml_etree.py Thu Mar 11 16:55:11 2010 @@ -131,7 +131,7 @@ # element tree tests def interface(): - """ + r""" Test element tree interface. >>> element = ET.Element("tag") @@ -139,10 +139,11 @@ >>> tree = ET.ElementTree(element) >>> check_element(tree.getroot()) - >>> element = ET.Element("tag", key="value") + >>> element = ET.Element("t\xe4g", key="value") >>> tree = ET.ElementTree(element) >>> repr(element) # doctest: +ELLIPSIS - "" + "" + >>> element = ET.Element("tag", key="value") Make sure all standard element methods exist. Modified: python/trunk/Modules/_elementtree.c ============================================================================== --- python/trunk/Modules/_elementtree.c (original) +++ python/trunk/Modules/_elementtree.c Thu Mar 11 16:55:11 2010 @@ -1190,15 +1190,16 @@ static PyObject* element_repr(ElementObject* self) { - PyObject* repr; - char buffer[100]; - - repr = PyString_FromString("tag)); + tag = PyObject_Repr(self->tag); + if (!tag) + return NULL; - sprintf(buffer, " at %p>", self); - PyString_ConcatAndDel(&repr, PyString_FromString(buffer)); + repr = PyString_FromFormat("", + PyString_AS_STRING(tag), self); + + Py_DECREF(tag); return repr; } From python-checkins at python.org Thu Mar 11 20:47:09 2010 From: python-checkins at python.org (brett.cannon) Date: Thu, 11 Mar 2010 20:47:09 +0100 (CET) Subject: [Python-checkins] r78840 - in sandbox/trunk/importlib: MANIFEST.in setup.py Message-ID: <20100311194709.90780C634@mail.python.org> Author: brett.cannon Date: Thu Mar 11 20:47:09 2010 New Revision: 78840 Log: Bump version to 1.0.2 for importlib's external release. Don't install the README, simply include it in the source archive. Added: sandbox/trunk/importlib/MANIFEST.in Modified: sandbox/trunk/importlib/setup.py Added: sandbox/trunk/importlib/MANIFEST.in ============================================================================== --- (empty file) +++ sandbox/trunk/importlib/MANIFEST.in Thu Mar 11 20:47:09 2010 @@ -0,0 +1,3 @@ +include README +include setup.py +recursive-include importlib *.py Modified: sandbox/trunk/importlib/setup.py ============================================================================== --- sandbox/trunk/importlib/setup.py (original) +++ sandbox/trunk/importlib/setup.py Thu Mar 11 20:47:09 2010 @@ -9,7 +9,8 @@ version_classifiers = ['Programming Language :: Python :: %s' % version - for version in ['2.3', '2.4', '2.5', '2.6', '3.0']] + for version in ['2', '2.3', '2.4', '2.5', '2.6', + '3', '3.0']] other_classifiers = [ 'Development Status :: 5 - Production/Stable', 'License :: OSI Approved :: Python Software Foundation License', @@ -24,13 +25,12 @@ setup( name='importlib', - version='1.0.1', + version='1.0.2', description='Backport of importlib.import_module() from Python 2.7', long_description=detailed_description, author='Brett Cannon', author_email='brett at python.org', url='http://svn.python.org/view/sandbox/trunk/importlib/', packages=['importlib'], - data_files=['README'], classifiers=version_classifiers + other_classifiers, ) From brett at python.org Thu Mar 11 21:55:28 2010 From: brett at python.org (Brett Cannon) Date: Thu, 11 Mar 2010 12:55:28 -0800 Subject: [Python-checkins] r78826 - in python/trunk: Lib/site.py Misc/NEWS Modules/main.c Parser/tokenizer.c Python/import.c Python/pythonrun.c In-Reply-To: <20100310223020.425EDC6D0@mail.python.org> References: <20100310223020.425EDC6D0@mail.python.org> Message-ID: Are you planning to forward-port this to py3k, Victor? On Wed, Mar 10, 2010 at 14:30, victor.stinner wrote: > Author: victor.stinner > Date: Wed Mar 10 23:30:19 2010 > New Revision: 78826 > > Log: > Issue #3137: Don't ignore errors at startup, especially a keyboard > interrupt > (SIGINT). If an error occurs while importing the site module, the error is > printed and Python exits. Initialize the GIL before importing the site > module. > > > Modified: > python/trunk/Lib/site.py > python/trunk/Misc/NEWS > python/trunk/Modules/main.c > python/trunk/Parser/tokenizer.c > python/trunk/Python/import.c > python/trunk/Python/pythonrun.c > > Modified: python/trunk/Lib/site.py > > ============================================================================== > --- python/trunk/Lib/site.py (original) > +++ python/trunk/Lib/site.py Wed Mar 10 23:30:19 2010 > @@ -489,6 +489,12 @@ > import sitecustomize > except ImportError: > pass > + except Exception: > + if sys.flags.verbose: > + sys.excepthook(*sys.exc_info()) > + else: > + print >>sys.stderr, \ > + "'import sitecustomize' failed; use -v for traceback" > > > def execusercustomize(): > @@ -497,6 +503,12 @@ > import usercustomize > except ImportError: > pass > + except Exception: > + if sys.flags.verbose: > + sys.excepthook(*sys.exc_info()) > + else: > + print>>sys.stderr, \ > + "'import sitecustomize' failed; use -v for traceback" > > > def main(): > > Modified: python/trunk/Misc/NEWS > > ============================================================================== > --- python/trunk/Misc/NEWS (original) > +++ python/trunk/Misc/NEWS Wed Mar 10 23:30:19 2010 > @@ -12,6 +12,11 @@ > Core and Builtins > ----------------- > > +- Issue #3137: Don't ignore errors at startup, especially a keyboard > interrupt > + (SIGINT). If an error occurs while importing the site module, the error > is > + printed and Python exits. Initialize the GIL before importing the site > + module. > + > Library > ------- > > > Modified: python/trunk/Modules/main.c > > ============================================================================== > --- python/trunk/Modules/main.c (original) > +++ python/trunk/Modules/main.c Wed Mar 10 23:30:19 2010 > @@ -573,10 +573,16 @@ > } > > if (sts==-1) { > - sts = PyRun_AnyFileExFlags( > - fp, > - filename == NULL ? "" : filename, > - filename != NULL, &cf) != 0; > + /* call pending calls like signal handlers (SIGINT) > */ > + if (Py_MakePendingCalls() == -1) { > + PyErr_Print(); > + sts = 1; > + } else { > + sts = PyRun_AnyFileExFlags( > + fp, > + filename == NULL ? "" : > filename, > + filename != NULL, &cf) != 0; > + } > } > > } > > Modified: python/trunk/Parser/tokenizer.c > > ============================================================================== > --- python/trunk/Parser/tokenizer.c (original) > +++ python/trunk/Parser/tokenizer.c Wed Mar 10 23:30:19 2010 > @@ -817,8 +817,12 @@ > return -1; > > error_clear: > - /* Fallback to iso-8859-1: for backward compatibility */ > Py_DECREF(enc); > + if (!PyErr_ExceptionMatches(PyExc_UnicodeDecodeError)) { > + tok->done = E_ERROR; > + return -1; > + } > + /* Fallback to iso-8859-1: for backward compatibility */ > PyErr_Clear(); > return 0; > } > > Modified: python/trunk/Python/import.c > > ============================================================================== > --- python/trunk/Python/import.c (original) > +++ python/trunk/Python/import.c Wed Mar 10 23:30:19 2010 > @@ -2748,8 +2748,6 @@ > } > else { > /* No globals -- use standard builtins, and fake globals */ > - PyErr_Clear(); > - > builtins = PyImport_ImportModuleLevel("__builtin__", > NULL, NULL, NULL, 0); > if (builtins == NULL) > > Modified: python/trunk/Python/pythonrun.c > > ============================================================================== > --- python/trunk/Python/pythonrun.c (original) > +++ python/trunk/Python/pythonrun.c Wed Mar 10 23:30:19 2010 > @@ -248,14 +248,15 @@ > } > > initmain(); /* Module __main__ */ > - if (!Py_NoSiteFlag) > - initsite(); /* Module site */ > > /* auto-thread-state API, if available */ > #ifdef WITH_THREAD > _PyGILState_Init(interp, tstate); > #endif /* WITH_THREAD */ > > + if (!Py_NoSiteFlag) > + initsite(); /* Module site */ > + > if ((p = Py_GETENV("PYTHONIOENCODING")) && *p != '\0') { > p = icodeset = codeset = strdup(p); > free_codeset = 1; > @@ -284,8 +285,13 @@ > loc_codeset = strdup(loc_codeset); > Py_DECREF(enc); > } else { > - loc_codeset = NULL; > - PyErr_Clear(); > + if > (PyErr_ExceptionMatches(PyExc_LookupError)) { > + PyErr_Clear(); > + loc_codeset = NULL; > + } else { > + PyErr_Print(); > + exit(1); > + } > } > } else > loc_codeset = NULL; > @@ -704,20 +710,12 @@ > static void > initsite(void) > { > - PyObject *m, *f; > + PyObject *m; > m = PyImport_ImportModule("site"); > if (m == NULL) { > - f = PySys_GetObject("stderr"); > - if (Py_VerboseFlag) { > - PyFile_WriteString( > - "'import site' failed; traceback:\n", f); > - PyErr_Print(); > - } > - else { > - PyFile_WriteString( > - "'import site' failed; use -v for traceback\n", > f); > - PyErr_Clear(); > - } > + PyErr_Print(); > + Py_Finalize(); > + exit(1); > } > else { > Py_DECREF(m); > @@ -1546,6 +1544,8 @@ > char *msg = NULL; > errtype = PyExc_SyntaxError; > switch (err->error) { > + case E_ERROR: > + return; > case E_SYNTAX: > errtype = PyExc_IndentationError; > if (err->expected == INDENT) > _______________________________________________ > Python-checkins mailing list > Python-checkins at python.org > http://mail.python.org/mailman/listinfo/python-checkins > -------------- next part -------------- An HTML attachment was scrubbed... URL: From brett at python.org Thu Mar 11 21:59:46 2010 From: brett at python.org (Brett Cannon) Date: Thu, 11 Mar 2010 12:59:46 -0800 Subject: [Python-checkins] r78826 - in python/trunk: Lib/site.py Misc/NEWS Modules/main.c Parser/tokenizer.c Python/import.c Python/pythonrun.c In-Reply-To: References: <20100310223020.425EDC6D0@mail.python.org> Message-ID: nm, I just saw your email to python-dev asking about this. On Thu, Mar 11, 2010 at 12:55, Brett Cannon wrote: > Are you planning to forward-port this to py3k, Victor? > > > On Wed, Mar 10, 2010 at 14:30, victor.stinner wrote: > >> Author: victor.stinner >> Date: Wed Mar 10 23:30:19 2010 >> New Revision: 78826 >> >> Log: >> Issue #3137: Don't ignore errors at startup, especially a keyboard >> interrupt >> (SIGINT). If an error occurs while importing the site module, the error is >> printed and Python exits. Initialize the GIL before importing the site >> module. >> >> >> Modified: >> python/trunk/Lib/site.py >> python/trunk/Misc/NEWS >> python/trunk/Modules/main.c >> python/trunk/Parser/tokenizer.c >> python/trunk/Python/import.c >> python/trunk/Python/pythonrun.c >> >> Modified: python/trunk/Lib/site.py >> >> ============================================================================== >> --- python/trunk/Lib/site.py (original) >> +++ python/trunk/Lib/site.py Wed Mar 10 23:30:19 2010 >> @@ -489,6 +489,12 @@ >> import sitecustomize >> except ImportError: >> pass >> + except Exception: >> + if sys.flags.verbose: >> + sys.excepthook(*sys.exc_info()) >> + else: >> + print >>sys.stderr, \ >> + "'import sitecustomize' failed; use -v for traceback" >> >> >> def execusercustomize(): >> @@ -497,6 +503,12 @@ >> import usercustomize >> except ImportError: >> pass >> + except Exception: >> + if sys.flags.verbose: >> + sys.excepthook(*sys.exc_info()) >> + else: >> + print>>sys.stderr, \ >> + "'import sitecustomize' failed; use -v for traceback" >> >> >> def main(): >> >> Modified: python/trunk/Misc/NEWS >> >> ============================================================================== >> --- python/trunk/Misc/NEWS (original) >> +++ python/trunk/Misc/NEWS Wed Mar 10 23:30:19 2010 >> @@ -12,6 +12,11 @@ >> Core and Builtins >> ----------------- >> >> +- Issue #3137: Don't ignore errors at startup, especially a keyboard >> interrupt >> + (SIGINT). If an error occurs while importing the site module, the error >> is >> + printed and Python exits. Initialize the GIL before importing the site >> + module. >> + >> Library >> ------- >> >> >> Modified: python/trunk/Modules/main.c >> >> ============================================================================== >> --- python/trunk/Modules/main.c (original) >> +++ python/trunk/Modules/main.c Wed Mar 10 23:30:19 2010 >> @@ -573,10 +573,16 @@ >> } >> >> if (sts==-1) { >> - sts = PyRun_AnyFileExFlags( >> - fp, >> - filename == NULL ? "" : filename, >> - filename != NULL, &cf) != 0; >> + /* call pending calls like signal handlers >> (SIGINT) */ >> + if (Py_MakePendingCalls() == -1) { >> + PyErr_Print(); >> + sts = 1; >> + } else { >> + sts = PyRun_AnyFileExFlags( >> + fp, >> + filename == NULL ? "" : >> filename, >> + filename != NULL, &cf) != 0; >> + } >> } >> >> } >> >> Modified: python/trunk/Parser/tokenizer.c >> >> ============================================================================== >> --- python/trunk/Parser/tokenizer.c (original) >> +++ python/trunk/Parser/tokenizer.c Wed Mar 10 23:30:19 2010 >> @@ -817,8 +817,12 @@ >> return -1; >> >> error_clear: >> - /* Fallback to iso-8859-1: for backward compatibility */ >> Py_DECREF(enc); >> + if (!PyErr_ExceptionMatches(PyExc_UnicodeDecodeError)) { >> + tok->done = E_ERROR; >> + return -1; >> + } >> + /* Fallback to iso-8859-1: for backward compatibility */ >> PyErr_Clear(); >> return 0; >> } >> >> Modified: python/trunk/Python/import.c >> >> ============================================================================== >> --- python/trunk/Python/import.c (original) >> +++ python/trunk/Python/import.c Wed Mar 10 23:30:19 2010 >> @@ -2748,8 +2748,6 @@ >> } >> else { >> /* No globals -- use standard builtins, and fake globals */ >> - PyErr_Clear(); >> - >> builtins = PyImport_ImportModuleLevel("__builtin__", >> NULL, NULL, NULL, 0); >> if (builtins == NULL) >> >> Modified: python/trunk/Python/pythonrun.c >> >> ============================================================================== >> --- python/trunk/Python/pythonrun.c (original) >> +++ python/trunk/Python/pythonrun.c Wed Mar 10 23:30:19 2010 >> @@ -248,14 +248,15 @@ >> } >> >> initmain(); /* Module __main__ */ >> - if (!Py_NoSiteFlag) >> - initsite(); /* Module site */ >> >> /* auto-thread-state API, if available */ >> #ifdef WITH_THREAD >> _PyGILState_Init(interp, tstate); >> #endif /* WITH_THREAD */ >> >> + if (!Py_NoSiteFlag) >> + initsite(); /* Module site */ >> + >> if ((p = Py_GETENV("PYTHONIOENCODING")) && *p != '\0') { >> p = icodeset = codeset = strdup(p); >> free_codeset = 1; >> @@ -284,8 +285,13 @@ >> loc_codeset = strdup(loc_codeset); >> Py_DECREF(enc); >> } else { >> - loc_codeset = NULL; >> - PyErr_Clear(); >> + if >> (PyErr_ExceptionMatches(PyExc_LookupError)) { >> + PyErr_Clear(); >> + loc_codeset = NULL; >> + } else { >> + PyErr_Print(); >> + exit(1); >> + } >> } >> } else >> loc_codeset = NULL; >> @@ -704,20 +710,12 @@ >> static void >> initsite(void) >> { >> - PyObject *m, *f; >> + PyObject *m; >> m = PyImport_ImportModule("site"); >> if (m == NULL) { >> - f = PySys_GetObject("stderr"); >> - if (Py_VerboseFlag) { >> - PyFile_WriteString( >> - "'import site' failed; traceback:\n", f); >> - PyErr_Print(); >> - } >> - else { >> - PyFile_WriteString( >> - "'import site' failed; use -v for traceback\n", >> f); >> - PyErr_Clear(); >> - } >> + PyErr_Print(); >> + Py_Finalize(); >> + exit(1); >> } >> else { >> Py_DECREF(m); >> @@ -1546,6 +1544,8 @@ >> char *msg = NULL; >> errtype = PyExc_SyntaxError; >> switch (err->error) { >> + case E_ERROR: >> + return; >> case E_SYNTAX: >> errtype = PyExc_IndentationError; >> if (err->expected == INDENT) >> _______________________________________________ >> Python-checkins mailing list >> Python-checkins at python.org >> http://mail.python.org/mailman/listinfo/python-checkins >> > > -------------- next part -------------- An HTML attachment was scrubbed... URL: From nnorwitz at gmail.com Thu Mar 11 22:16:35 2010 From: nnorwitz at gmail.com (Neal Norwitz) Date: Thu, 11 Mar 2010 16:16:35 -0500 Subject: [Python-checkins] Python Regression Test Failures basics (2) Message-ID: <20100311211635.GA28295@kbk-i386-bb.psfb.org> 345 tests OK. 2 tests failed: test_xml_etree test_xml_etree_c 35 tests skipped: test_aepack test_al test_applesingle test_bsddb185 test_bsddb3 test_cd test_cl test_curses test_epoll test_gl test_imgfile test_ioctl test_kqueue test_linuxaudiodev test_macos test_macostools test_multiprocessing test_ossaudiodev test_py3kwarn test_scriptpackages test_smtpnet test_socketserver test_startfile test_sunaudiodev test_tcl test_timeout test_tk test_ttk_guionly test_ttk_textonly test_unicode_file test_urllib2net test_urllibnet test_winreg test_winsound test_zipfile64 6 skips unexpected on linux2: test_multiprocessing test_ttk_guionly test_epoll test_tk test_ioctl test_ttk_textonly == CPython 2.7a4+ (trunk:78840M, Mar 11 2010, 16:01:44) [GCC 3.3.4 20040623 (Gentoo Linux 3.3.4-r1, ssp-3.3.2-2, pie-8.7.6)] == Linux-2.6.9-gentoo-r1-i686-AMD_Athlon-tm-_XP_3000+-with-gentoo-1.4.16 == /tmp/test_python_24184 test_grammar test_opcodes test_dict test_builtin test_exceptions test_types test_unittest test_doctest test_doctest2 test_MimeWriter test_SimpleHTTPServer test_StringIO test___all__ test___future__ test__locale test_abc test_abstract_numbers test_aepack test_aepack skipped -- No module named aetypes test_aifc test_al test_al skipped -- No module named al test_anydbm test_applesingle test_applesingle skipped -- No module named MacOS test_argparse test_array test_ascii_formatd test_ast test_asynchat test_asyncore test_atexit test_audioop test_augassign test_base64 test_bastion test_bigaddrspace test_bigmem test_binascii test_binhex test_binop test_bisect test_bool test_bsddb test_bsddb185 test_bsddb185 skipped -- No module named bsddb185 test_bsddb3 test_bsddb3 skipped -- Use of the `bsddb' resource not enabled test_buffer test_bufio test_bytes test_bz2 test_calendar test_call test_capi test_cd test_cd skipped -- No module named cd test_cfgparser test_cgi test_charmapcodec test_cl test_cl skipped -- No module named cl test_class test_cmath test_cmd test_cmd_line test_cmd_line_script test_code test_codeccallbacks test_codecencodings_cn test_codecencodings_hk test_codecencodings_jp test_codecencodings_kr test_codecencodings_tw test_codecmaps_cn fetching http://source.icu-project.org/repos/icu/data/trunk/charset/data/xml/gb-18030-2000.xml ... fetching http://people.freebsd.org/~perky/i18n/EUC-CN.TXT ... fetching http://www.unicode.org/Public/MAPPINGS/VENDORS/MICSFT/WINDOWS/CP936.TXT ... test_codecmaps_hk fetching http://people.freebsd.org/~perky/i18n/BIG5HKSCS-2004.TXT ... test_codecmaps_jp fetching http://www.unicode.org/Public/MAPPINGS/VENDORS/MICSFT/WINDOWS/CP932.TXT ... fetching http://people.freebsd.org/~perky/i18n/EUC-JISX0213.TXT ... fetching http://people.freebsd.org/~perky/i18n/EUC-JP.TXT ... fetching http://www.unicode.org/Public/MAPPINGS/OBSOLETE/EASTASIA/JIS/SHIFTJIS.TXT ... fetching http://people.freebsd.org/~perky/i18n/SHIFT_JISX0213.TXT ... test_codecmaps_kr fetching http://www.unicode.org/Public/MAPPINGS/VENDORS/MICSFT/WINDOWS/CP949.TXT ... fetching http://people.freebsd.org/~perky/i18n/EUC-KR.TXT ... fetching http://www.unicode.org/Public/MAPPINGS/OBSOLETE/EASTASIA/KSC/JOHAB.TXT ... test_codecmaps_tw fetching http://www.unicode.org/Public/MAPPINGS/OBSOLETE/EASTASIA/OTHER/BIG5.TXT ... fetching http://www.unicode.org/Public/MAPPINGS/VENDORS/MICSFT/WINDOWS/CP950.TXT ... test_codecs test_codeop test_coding test_coercion test_collections test_colorsys test_commands test_compare test_compile test_compileall test_compiler test_complex test_complex_args test_contains test_contextlib test_cookie test_cookielib test_copy test_copy_reg test_cpickle test_cprofile test_crypt test_csv test_ctypes test_curses test_curses skipped -- Use of the `curses' resource not enabled test_datetime test_dbm test_decimal test_decorators test_defaultdict test_deque test_descr test_descrtut test_dictcomps test_dictviews test_difflib test_dircache test_dis test_distutils [20620 refs] test_dl test_docxmlrpc test_dumbdbm test_dummy_thread test_dummy_threading test_email test_email_codecs test_email_renamed test_enumerate test_eof test_epoll test_epoll skipped -- kernel doesn't support epoll() test_errno test_exception_variations test_extcall test_fcntl test_file test_file2k test_filecmp test_fileinput test_fileio test_float test_fnmatch test_fork1 test_format test_fpformat test_fractions test_frozen test_ftplib test_funcattrs test_functools test_future test_future3 test_future4 test_future5 test_future_builtins test_gc test_gdbm test_generators test_genericpath test_genexps test_getargs test_getargs2 test_getopt test_gettext test_gl test_gl skipped -- No module named gl test_glob test_global test_grp test_gzip test_hash test_hashlib test_heapq test_hmac test_hotshot test_htmllib test_htmlparser test_httplib test_httpservers [16621 refs] [16621 refs] [16621 refs] [26870 refs] test_imageop test_imaplib test_imgfile test_imgfile skipped -- No module named imgfile test_imp test_import test_importhooks test_importlib test_index test_inspect test_int test_int_literal test_io test_ioctl test_ioctl skipped -- Unable to open /dev/tty test_isinstance test_iter test_iterlen test_itertools test_json test_kqueue test_kqueue skipped -- test works only on BSD test_largefile test_lib2to3 test_linecache test_linuxaudiodev test_linuxaudiodev skipped -- Use of the `audio' resource not enabled test_list test_locale test_logging test_long test_long_future test_longexp test_macos test_macos skipped -- No module named MacOS test_macostools test_macostools skipped -- No module named MacOS test_macpath test_mailbox test_marshal test_math test_md5 test_memoryio test_memoryview test_mhlib test_mimetools test_mimetypes test_minidom test_mmap test_module test_modulefinder test_multibytecodec test_multibytecodec_support test_multifile test_multiprocessing test_multiprocessing skipped -- This platform lacks a functioning sem_open implementation, therefore, the required synchronization primitives needed will not function, see issue 3770. test_mutants test_mutex test_netrc test_new test_nis test_normalization fetching http://www.unicode.org/Public/5.1.0/ucd/NormalizationTest.txt ... test_ntpath test_old_mailbox test_openpty test_operator test_optparse test_os [16621 refs] [16621 refs] test_ossaudiodev test_ossaudiodev skipped -- Use of the `audio' resource not enabled test_parser Expecting 's_push: parser stack overflow' in next line s_push: parser stack overflow test_pdb test_peepholer test_pep247 test_pep263 test_pep277 test_pep292 test_pep352 test_pickle test_pickletools test_pipes test_pkg test_pkgimport test_pkgutil test_platform [18017 refs] [18017 refs] test_plistlib test_poll test_popen [16626 refs] [16626 refs] [16626 refs] test_popen2 test_poplib test_posix test_posixpath test_pow test_pprint test_print test_profile test_profilehooks test_property test_pstats test_pty test_pwd test_py3kwarn test_py3kwarn skipped -- test.test_py3kwarn must be run with the -3 flag test_pyclbr test_pydoc [21734 refs] [21734 refs] [21734 refs] [21734 refs] [21734 refs] [21733 refs] [21733 refs] test_pyexpat test_queue test_quopri [19449 refs] [19449 refs] test_random test_re test_readline test_repr test_resource test_rfc822 test_richcmp test_robotparser test_runpy test_sax test_scope test_scriptpackages test_scriptpackages skipped -- No module named aetools test_select test_set test_setcomps test_sets test_sgmllib test_sha test_shelve test_shlex test_shutil test_signal test_site [16621 refs] [16621 refs] [16621 refs] [16621 refs] test_slice test_smtplib test_smtpnet test_smtpnet skipped -- Use of the `network' resource not enabled test_socket test_socketserver test_socketserver skipped -- Use of the `network' resource not enabled test_softspace test_sort test_sqlite test_ssl test_startfile test_startfile skipped -- module os has no attribute startfile test_str test_strftime test_string test_stringprep test_strop test_strptime test_strtod test_struct test_structmembers test_structseq test_subprocess [16621 refs] [16621 refs] [16621 refs] [16621 refs] [16621 refs] [16621 refs] [16621 refs] [16621 refs] [16621 refs] [16621 refs] [16621 refs] [16621 refs] [16621 refs] [16621 refs] [16836 refs] [16621 refs] [16621 refs] [16621 refs] [16621 refs] [16621 refs] . [16621 refs] [16621 refs] this bit of output is from a test of stdout in a different process ... [16621 refs] [16621 refs] [16836 refs] [16621 refs] [16621 refs] [16621 refs] Traceback (most recent call last): File "", line 1, in KeyboardInterrupt [16621 refs] [16621 refs] [16621 refs] [16621 refs] [16621 refs] [16621 refs] [16621 refs] [16621 refs] [16621 refs] [16621 refs] [16621 refs] [16621 refs] [16621 refs] [16621 refs] [16621 refs] [16836 refs] [16621 refs] [16621 refs] [16621 refs] [16621 refs] [16621 refs] . [16621 refs] [16621 refs] this bit of output is from a test of stdout in a different process ... [16621 refs] [16621 refs] [16836 refs] test_sunaudiodev test_sunaudiodev skipped -- No module named sunaudiodev test_sundry test_symtable test_syntax test_sys [16621 refs] [16621 refs] [16621 refs] [16850 refs] [16644 refs] test_sysconfig [16621 refs] [16621 refs] test_tarfile test_tcl test_tcl skipped -- No module named _tkinter test_telnetlib test_tempfile [16621 refs] test_textwrap test_thread test_threaded_import Unhandled exception in thread started by Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/test/test_thread.py", line 218, in thread1 os.close(self.write_fd) OSError: [Errno 9] Bad file descriptor test_threadedtempfile test_threading [19921 refs] [21092 refs] [20906 refs] [20906 refs] [20906 refs] [20906 refs] test_threading_local test_threadsignals test_time test_timeout test_timeout skipped -- Use of the `network' resource not enabled test_tk test_tk skipped -- No module named _tkinter test_tokenize test_trace test_traceback test_transformer test_ttk_guionly test_ttk_guionly skipped -- No module named _tkinter test_ttk_textonly test_ttk_textonly skipped -- No module named _tkinter test_tuple test_typechecks test_ucn test_unary test_undocumented_details test_unicode test_unicode_file test_unicode_file skipped -- No Unicode filesystem semantics on this platform. test_unicodedata test_univnewlines test_univnewlines2k test_unpack test_urllib test_urllib2 test_urllib2_localnet test_urllib2net test_urllib2net skipped -- Use of the `network' resource not enabled test_urllibnet test_urllibnet skipped -- Use of the `network' resource not enabled test_urlparse test_userdict test_userlist test_userstring test_uu test_uuid WARNING: uuid.getnode is unreliable on many platforms. It is disabled until the code and/or test can be fixed properly. WARNING: uuid._ifconfig_getnode is unreliable on many platforms. It is disabled until the code and/or test can be fixed properly. WARNING: uuid._unixdll_getnode is unreliable on many platforms. It is disabled until the code and/or test can be fixed properly. test_wait3 test_wait4 test_warnings test_wave test_weakref test_whichdb test_winreg test_winreg skipped -- No module named _winreg test_winsound test_winsound skipped -- No module named winsound test_with test_wsgiref test_xdrlib test_xml_etree ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 770, in test.test_xml_etree.custom_builder Failed example: parser.feed(open("samples/simple.xml", "r").read()) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in parser.feed(open("samples/simple.xml", "r").read()) IOError: [Errno 2] No such file or directory: 'samples/simple.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 793, in test.test_xml_etree.custom_builder Failed example: parser.feed(open("samples/simple-ns.xml", "r").read()) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in parser.feed(open("samples/simple-ns.xml", "r").read()) IOError: [Errno 2] No such file or directory: 'samples/simple-ns.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 421, in test.test_xml_etree.file_init Failed example: tree = ET.ElementTree(file="samples/simple.xml") Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in tree = ET.ElementTree(file="samples/simple.xml") File "/tmp/python-test/local/lib/python2.7/xml/etree/ElementTree.py", line 611, in __init__ self.parse(file) File "/tmp/python-test/local/lib/python2.7/xml/etree/ElementTree.py", line 646, in parse source = open(source, "rb") IOError: [Errno 2] No such file or directory: 'samples/simple.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 422, in test.test_xml_etree.file_init Failed example: tree.find("element").tag Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in tree.find("element").tag AttributeError: 'NoneType' object has no attribute 'tag' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 424, in test.test_xml_etree.file_init Failed example: tree.find("element/../empty-element").tag Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in tree.find("element/../empty-element").tag AttributeError: 'NoneType' object has no attribute 'tag' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 811, in test.test_xml_etree.getchildren Failed example: tree = ET.parse(open("samples/simple.xml", "r")) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in tree = ET.parse(open("samples/simple.xml", "r")) IOError: [Errno 2] No such file or directory: 'samples/simple.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 812, in test.test_xml_etree.getchildren Failed example: for elem in tree.getroot().iter(): summarize_list(elem.getchildren()) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in for elem in tree.getroot().iter(): NameError: name 'tree' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 818, in test.test_xml_etree.getchildren Failed example: for elem in tree.getiterator(): summarize_list(elem.getchildren()) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in for elem in tree.getiterator(): NameError: name 'tree' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 647, in test.test_xml_etree.iterparse Failed example: context = iterparse("samples/simple.xml") Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in context = iterparse("samples/simple.xml") File "/tmp/python-test/local/lib/python2.7/xml/etree/ElementTree.py", line 1192, in iterparse source = open(source, "rb") IOError: [Errno 2] No such file or directory: 'samples/simple.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 648, in test.test_xml_etree.iterparse Failed example: action, elem = next(context) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in action, elem = next(context) NameError: name 'context' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 649, in test.test_xml_etree.iterparse Failed example: print action, elem.tag Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in print action, elem.tag NameError: name 'action' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 651, in test.test_xml_etree.iterparse Failed example: for action, elem in context: print action, elem.tag Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in for action, elem in context: NameError: name 'context' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 656, in test.test_xml_etree.iterparse Failed example: context.root.tag Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in context.root.tag NameError: name 'context' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 659, in test.test_xml_etree.iterparse Failed example: context = iterparse("samples/simple-ns.xml") Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in context = iterparse("samples/simple-ns.xml") File "/tmp/python-test/local/lib/python2.7/xml/etree/ElementTree.py", line 1192, in iterparse source = open(source, "rb") IOError: [Errno 2] No such file or directory: 'samples/simple-ns.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 660, in test.test_xml_etree.iterparse Failed example: for action, elem in context: print action, elem.tag Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in for action, elem in context: NameError: name 'context' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 668, in test.test_xml_etree.iterparse Failed example: context = iterparse("samples/simple.xml", events) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in context = iterparse("samples/simple.xml", events) File "/tmp/python-test/local/lib/python2.7/xml/etree/ElementTree.py", line 1192, in iterparse source = open(source, "rb") IOError: [Errno 2] No such file or directory: 'samples/simple.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 669, in test.test_xml_etree.iterparse Failed example: for action, elem in context: print action, elem.tag Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in for action, elem in context: NameError: name 'context' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 673, in test.test_xml_etree.iterparse Failed example: context = iterparse("samples/simple.xml", events=events) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in context = iterparse("samples/simple.xml", events=events) File "/tmp/python-test/local/lib/python2.7/xml/etree/ElementTree.py", line 1192, in iterparse source = open(source, "rb") IOError: [Errno 2] No such file or directory: 'samples/simple.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 674, in test.test_xml_etree.iterparse Failed example: for action, elem in context: print action, elem.tag Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in for action, elem in context: NameError: name 'context' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 678, in test.test_xml_etree.iterparse Failed example: context = iterparse("samples/simple.xml", events) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in context = iterparse("samples/simple.xml", events) File "/tmp/python-test/local/lib/python2.7/xml/etree/ElementTree.py", line 1192, in iterparse source = open(source, "rb") IOError: [Errno 2] No such file or directory: 'samples/simple.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 679, in test.test_xml_etree.iterparse Failed example: for action, elem in context: print action, elem.tag Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in for action, elem in context: NameError: name 'context' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 691, in test.test_xml_etree.iterparse Failed example: context = iterparse("samples/simple-ns.xml", events) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in context = iterparse("samples/simple-ns.xml", events) File "/tmp/python-test/local/lib/python2.7/xml/etree/ElementTree.py", line 1192, in iterparse source = open(source, "rb") IOError: [Errno 2] No such file or directory: 'samples/simple-ns.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 692, in test.test_xml_etree.iterparse Failed example: for action, elem in context: if action in ("start", "end"): print action, elem.tag else: print action, elem Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in for action, elem in context: NameError: name 'context' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 709, in test.test_xml_etree.iterparse Failed example: context = iterparse("samples/simple.xml", events) Expected: Traceback (most recent call last): ValueError: unknown event 'bogus' Got: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in context = iterparse("samples/simple.xml", events) File "/tmp/python-test/local/lib/python2.7/xml/etree/ElementTree.py", line 1192, in iterparse source = open(source, "rb") IOError: [Errno 2] No such file or directory: 'samples/simple.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 567, in test.test_xml_etree.parsefile Failed example: tree = ET.parse("samples/simple.xml") Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in tree = ET.parse("samples/simple.xml") File "/tmp/python-test/local/lib/python2.7/xml/etree/ElementTree.py", line 1176, in parse tree.parse(source, parser) File "/tmp/python-test/local/lib/python2.7/xml/etree/ElementTree.py", line 646, in parse source = open(source, "rb") IOError: [Errno 2] No such file or directory: 'samples/simple.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 568, in test.test_xml_etree.parsefile Failed example: normalize_crlf(tree) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in normalize_crlf(tree) NameError: name 'tree' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 569, in test.test_xml_etree.parsefile Failed example: tree.write(sys.stdout) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in tree.write(sys.stdout) NameError: name 'tree' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 575, in test.test_xml_etree.parsefile Failed example: tree = ET.parse("samples/simple-ns.xml") Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in tree = ET.parse("samples/simple-ns.xml") File "/tmp/python-test/local/lib/python2.7/xml/etree/ElementTree.py", line 1176, in parse tree.parse(source, parser) File "/tmp/python-test/local/lib/python2.7/xml/etree/ElementTree.py", line 646, in parse source = open(source, "rb") IOError: [Errno 2] No such file or directory: 'samples/simple-ns.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 576, in test.test_xml_etree.parsefile Failed example: normalize_crlf(tree) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in normalize_crlf(tree) NameError: name 'tree' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 577, in test.test_xml_etree.parsefile Failed example: tree.write(sys.stdout) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in tree.write(sys.stdout) NameError: name 'tree' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 587, in test.test_xml_etree.parsefile Failed example: parser.feed(open("samples/simple.xml").read()) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in parser.feed(open("samples/simple.xml").read()) IOError: [Errno 2] No such file or directory: 'samples/simple.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 588, in test.test_xml_etree.parsefile Failed example: print serialize(parser.close()) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in print serialize(parser.close()) File "/tmp/python-test/local/lib/python2.7/xml/etree/ElementTree.py", line 1635, in close self._raiseerror(v) File "/tmp/python-test/local/lib/python2.7/xml/etree/ElementTree.py", line 1487, in _raiseerror raise err ParseError: no element found: line 1, column 0 ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 596, in test.test_xml_etree.parsefile Failed example: parser.feed(open("samples/simple.xml").read()) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in parser.feed(open("samples/simple.xml").read()) IOError: [Errno 2] No such file or directory: 'samples/simple.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 597, in test.test_xml_etree.parsefile Failed example: print serialize(parser.close()) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in print serialize(parser.close()) File "/tmp/python-test/local/lib/python2.7/xml/etree/ElementTree.py", line 1635, in close self._raiseerror(v) File "/tmp/python-test/local/lib/python2.7/xml/etree/ElementTree.py", line 1487, in _raiseerror raise err ParseError: no element found: line 1, column 0 ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 606, in test.test_xml_etree.parsefile Failed example: parser.feed(open("samples/simple.xml").read()) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in parser.feed(open("samples/simple.xml").read()) IOError: [Errno 2] No such file or directory: 'samples/simple.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 607, in test.test_xml_etree.parsefile Failed example: print serialize(parser.close()) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in print serialize(parser.close()) File "/tmp/python-test/local/lib/python2.7/xml/etree/ElementTree.py", line 1635, in close self._raiseerror(v) File "/tmp/python-test/local/lib/python2.7/xml/etree/ElementTree.py", line 1487, in _raiseerror raise err ParseError: no element found: line 1, column 0 ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 1361, in test.test_xml_etree.xinclude_default Failed example: ElementInclude.include(document) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in ElementInclude.include(document) File "/tmp/python-test/local/lib/python2.7/xml/etree/ElementInclude.py", line 111, in include node = loader(href, parse) File "/tmp/python-test/local/lib/python2.7/xml/etree/ElementInclude.py", line 78, in default_loader file = open(href) IOError: [Errno 2] No such file or directory: 'samples/simple.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 1362, in test.test_xml_etree.xinclude_default Failed example: print serialize(document) # default Expected:

    Example.

    text texttail
    Got:

    Example.

    ********************************************************************** 6 items had failures: 2 of 8 in test.test_xml_etree.custom_builder 3 of 8 in test.test_xml_etree.file_init 3 of 19 in test.test_xml_etree.getchildren 16 of 29 in test.test_xml_etree.iterparse 12 of 17 in test.test_xml_etree.parsefile 2 of 4 in test.test_xml_etree.xinclude_default ***Test Failed*** 38 failures. test test_xml_etree failed -- 38 of 591 doctests failed Re-running test 'test_xml_etree' in verbose mode ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 770, in test.test_xml_etree.custom_builder Failed example: parser.feed(open("samples/simple.xml", "r").read()) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in parser.feed(open("samples/simple.xml", "r").read()) IOError: [Errno 2] No such file or directory: 'samples/simple.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 793, in test.test_xml_etree.custom_builder Failed example: parser.feed(open("samples/simple-ns.xml", "r").read()) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in parser.feed(open("samples/simple-ns.xml", "r").read()) IOError: [Errno 2] No such file or directory: 'samples/simple-ns.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 421, in test.test_xml_etree.file_init Failed example: tree = ET.ElementTree(file="samples/simple.xml") Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in tree = ET.ElementTree(file="samples/simple.xml") File "/tmp/python-test/local/lib/python2.7/xml/etree/ElementTree.py", line 611, in __init__ self.parse(file) File "/tmp/python-test/local/lib/python2.7/xml/etree/ElementTree.py", line 646, in parse source = open(source, "rb") IOError: [Errno 2] No such file or directory: 'samples/simple.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 422, in test.test_xml_etree.file_init Failed example: tree.find("element").tag Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in tree.find("element").tag AttributeError: 'NoneType' object has no attribute 'tag' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 424, in test.test_xml_etree.file_init Failed example: tree.find("element/../empty-element").tag Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in tree.find("element/../empty-element").tag AttributeError: 'NoneType' object has no attribute 'tag' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 811, in test.test_xml_etree.getchildren Failed example: tree = ET.parse(open("samples/simple.xml", "r")) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in tree = ET.parse(open("samples/simple.xml", "r")) IOError: [Errno 2] No such file or directory: 'samples/simple.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 812, in test.test_xml_etree.getchildren Failed example: for elem in tree.getroot().iter(): summarize_list(elem.getchildren()) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in for elem in tree.getroot().iter(): NameError: name 'tree' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 818, in test.test_xml_etree.getchildren Failed example: for elem in tree.getiterator(): summarize_list(elem.getchildren()) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in for elem in tree.getiterator(): NameError: name 'tree' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 647, in test.test_xml_etree.iterparse Failed example: context = iterparse("samples/simple.xml") Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in context = iterparse("samples/simple.xml") File "/tmp/python-test/local/lib/python2.7/xml/etree/ElementTree.py", line 1192, in iterparse source = open(source, "rb") IOError: [Errno 2] No such file or directory: 'samples/simple.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 648, in test.test_xml_etree.iterparse Failed example: action, elem = next(context) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in action, elem = next(context) NameError: name 'context' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 649, in test.test_xml_etree.iterparse Failed example: print action, elem.tag Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in print action, elem.tag NameError: name 'action' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 651, in test.test_xml_etree.iterparse Failed example: for action, elem in context: print action, elem.tag Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in for action, elem in context: NameError: name 'context' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 656, in test.test_xml_etree.iterparse Failed example: context.root.tag Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in context.root.tag NameError: name 'context' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 659, in test.test_xml_etree.iterparse Failed example: context = iterparse("samples/simple-ns.xml") Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in context = iterparse("samples/simple-ns.xml") File "/tmp/python-test/local/lib/python2.7/xml/etree/ElementTree.py", line 1192, in iterparse source = open(source, "rb") IOError: [Errno 2] No such file or directory: 'samples/simple-ns.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 660, in test.test_xml_etree.iterparse Failed example: for action, elem in context: print action, elem.tag Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in for action, elem in context: NameError: name 'context' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 668, in test.test_xml_etree.iterparse Failed example: context = iterparse("samples/simple.xml", events) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in context = iterparse("samples/simple.xml", events) File "/tmp/python-test/local/lib/python2.7/xml/etree/ElementTree.py", line 1192, in iterparse source = open(source, "rb") IOError: [Errno 2] No such file or directory: 'samples/simple.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 669, in test.test_xml_etree.iterparse Failed example: for action, elem in context: print action, elem.tag Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in for action, elem in context: NameError: name 'context' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 673, in test.test_xml_etree.iterparse Failed example: context = iterparse("samples/simple.xml", events=events) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in context = iterparse("samples/simple.xml", events=events) File "/tmp/python-test/local/lib/python2.7/xml/etree/ElementTree.py", line 1192, in iterparse source = open(source, "rb") IOError: [Errno 2] No such file or directory: 'samples/simple.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 674, in test.test_xml_etree.iterparse Failed example: for action, elem in context: print action, elem.tag Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in for action, elem in context: NameError: name 'context' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 678, in test.test_xml_etree.iterparse Failed example: context = iterparse("samples/simple.xml", events) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in context = iterparse("samples/simple.xml", events) File "/tmp/python-test/local/lib/python2.7/xml/etree/ElementTree.py", line 1192, in iterparse source = open(source, "rb") IOError: [Errno 2] No such file or directory: 'samples/simple.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 679, in test.test_xml_etree.iterparse Failed example: for action, elem in context: print action, elem.tag Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in for action, elem in context: NameError: name 'context' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 691, in test.test_xml_etree.iterparse Failed example: context = iterparse("samples/simple-ns.xml", events) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in context = iterparse("samples/simple-ns.xml", events) File "/tmp/python-test/local/lib/python2.7/xml/etree/ElementTree.py", line 1192, in iterparse source = open(source, "rb") IOError: [Errno 2] No such file or directory: 'samples/simple-ns.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 692, in test.test_xml_etree.iterparse Failed example: for action, elem in context: if action in ("start", "end"): print action, elem.tag else: print action, elem Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in for action, elem in context: NameError: name 'context' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 709, in test.test_xml_etree.iterparse Failed example: context = iterparse("samples/simple.xml", events) Expected: Traceback (most recent call last): ValueError: unknown event 'bogus' Got: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in context = iterparse("samples/simple.xml", events) File "/tmp/python-test/local/lib/python2.7/xml/etree/ElementTree.py", line 1192, in iterparse source = open(source, "rb") IOError: [Errno 2] No such file or directory: 'samples/simple.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 567, in test.test_xml_etree.parsefile Failed example: tree = ET.parse("samples/simple.xml") Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in tree = ET.parse("samples/simple.xml") File "/tmp/python-test/local/lib/python2.7/xml/etree/ElementTree.py", line 1176, in parse tree.parse(source, parser) File "/tmp/python-test/local/lib/python2.7/xml/etree/ElementTree.py", line 646, in parse source = open(source, "rb") IOError: [Errno 2] No such file or directory: 'samples/simple.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 568, in test.test_xml_etree.parsefile Failed example: normalize_crlf(tree) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in normalize_crlf(tree) NameError: name 'tree' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 569, in test.test_xml_etree.parsefile Failed example: tree.write(sys.stdout) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in tree.write(sys.stdout) NameError: name 'tree' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 575, in test.test_xml_etree.parsefile Failed example: tree = ET.parse("samples/simple-ns.xml") Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in tree = ET.parse("samples/simple-ns.xml") File "/tmp/python-test/local/lib/python2.7/xml/etree/ElementTree.py", line 1176, in parse tree.parse(source, parser) File "/tmp/python-test/local/lib/python2.7/xml/etree/ElementTree.py", line 646, in parse source = open(source, "rb") IOError: [Errno 2] No such file or directory: 'samples/simple-ns.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 576, in test.test_xml_etree.parsefile Failed example: normalize_crlf(tree) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in normalize_crlf(tree) NameError: name 'tree' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 577, in test.test_xml_etree.parsefile Failed example: tree.write(sys.stdout) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in tree.write(sys.stdout) NameError: name 'tree' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 587, in test.test_xml_etree.parsefile Failed example: parser.feed(open("samples/simple.xml").read()) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in parser.feed(open("samples/simple.xml").read()) IOError: [Errno 2] No such file or directory: 'samples/simple.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 588, in test.test_xml_etree.parsefile Failed example: print serialize(parser.close()) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in print serialize(parser.close()) File "/tmp/python-test/local/lib/python2.7/xml/etree/ElementTree.py", line 1635, in close self._raiseerror(v) File "/tmp/python-test/local/lib/python2.7/xml/etree/ElementTree.py", line 1487, in _raiseerror raise err ParseError: no element found: line 1, column 0 ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 596, in test.test_xml_etree.parsefile Failed example: parser.feed(open("samples/simple.xml").read()) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in parser.feed(open("samples/simple.xml").read()) IOError: [Errno 2] No such file or directory: 'samples/simple.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 597, in test.test_xml_etree.parsefile Failed example: print serialize(parser.close()) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in print serialize(parser.close()) File "/tmp/python-test/local/lib/python2.7/xml/etree/ElementTree.py", line 1635, in close self._raiseerror(v) File "/tmp/python-test/local/lib/python2.7/xml/etree/ElementTree.py", line 1487, in _raiseerror raise err ParseError: no element found: line 1, column 0 ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 606, in test.test_xml_etree.parsefile Failed example: parser.feed(open("samples/simple.xml").read()) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in parser.feed(open("samples/simple.xml").read()) IOError: [Errno 2] No such file or directory: 'samples/simple.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 607, in test.test_xml_etree.parsefile Failed example: print serialize(parser.close()) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in print serialize(parser.close()) File "/tmp/python-test/local/lib/python2.7/xml/etree/ElementTree.py", line 1635, in close self._raiseerror(v) File "/tmp/python-test/local/lib/python2.7/xml/etree/ElementTree.py", line 1487, in _raiseerror raise err ParseError: no element found: line 1, column 0 ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 1361, in test.test_xml_etree.xinclude_default Failed example: ElementInclude.include(document) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in ElementInclude.include(document) File "/tmp/python-test/local/lib/python2.7/xml/etree/ElementInclude.py", line 111, in include node = loader(href, parse) File "/tmp/python-test/local/lib/python2.7/xml/etree/ElementInclude.py", line 78, in default_loader file = open(href) IOError: [Errno 2] No such file or directory: 'samples/simple.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 1362, in test.test_xml_etree.xinclude_default Failed example: print serialize(document) # default Expected:

    Example.

    text texttail
    Got:

    Example.

    ********************************************************************** 6 items had failures: 2 of 8 in test.test_xml_etree.custom_builder 3 of 8 in test.test_xml_etree.file_init 3 of 19 in test.test_xml_etree.getchildren 16 of 29 in test.test_xml_etree.iterparse 12 of 17 in test.test_xml_etree.parsefile 2 of 4 in test.test_xml_etree.xinclude_default ***Test Failed*** 38 failures. test test_xml_etree failed -- 38 of 591 doctests failed test_xml_etree_c ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 770, in test.test_xml_etree.custom_builder Failed example: parser.feed(open("samples/simple.xml", "r").read()) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in parser.feed(open("samples/simple.xml", "r").read()) IOError: [Errno 2] No such file or directory: 'samples/simple.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 793, in test.test_xml_etree.custom_builder Failed example: parser.feed(open("samples/simple-ns.xml", "r").read()) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in parser.feed(open("samples/simple-ns.xml", "r").read()) IOError: [Errno 2] No such file or directory: 'samples/simple-ns.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 421, in test.test_xml_etree.file_init Failed example: tree = ET.ElementTree(file="samples/simple.xml") Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in tree = ET.ElementTree(file="samples/simple.xml") File "/tmp/python-test/local/lib/python2.7/xml/etree/ElementTree.py", line 611, in __init__ self.parse(file) File "", line 25, in parse IOError: [Errno 2] No such file or directory: 'samples/simple.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 422, in test.test_xml_etree.file_init Failed example: tree.find("element").tag Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in tree.find("element").tag AttributeError: 'NoneType' object has no attribute 'tag' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 424, in test.test_xml_etree.file_init Failed example: tree.find("element/../empty-element").tag Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in tree.find("element/../empty-element").tag AttributeError: 'NoneType' object has no attribute 'tag' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 811, in test.test_xml_etree.getchildren Failed example: tree = ET.parse(open("samples/simple.xml", "r")) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in tree = ET.parse(open("samples/simple.xml", "r")) IOError: [Errno 2] No such file or directory: 'samples/simple.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 812, in test.test_xml_etree.getchildren Failed example: for elem in tree.getroot().iter(): summarize_list(elem.getchildren()) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in for elem in tree.getroot().iter(): NameError: name 'tree' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 818, in test.test_xml_etree.getchildren Failed example: for elem in tree.getiterator(): summarize_list(elem.getchildren()) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in for elem in tree.getiterator(): NameError: name 'tree' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 647, in test.test_xml_etree.iterparse Failed example: context = iterparse("samples/simple.xml") Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in context = iterparse("samples/simple.xml") File "", line 63, in __init__ IOError: [Errno 2] No such file or directory: 'samples/simple.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 648, in test.test_xml_etree.iterparse Failed example: action, elem = next(context) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in action, elem = next(context) NameError: name 'context' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 649, in test.test_xml_etree.iterparse Failed example: print action, elem.tag Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in print action, elem.tag NameError: name 'action' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 651, in test.test_xml_etree.iterparse Failed example: for action, elem in context: print action, elem.tag Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in for action, elem in context: NameError: name 'context' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 656, in test.test_xml_etree.iterparse Failed example: context.root.tag Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in context.root.tag NameError: name 'context' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 659, in test.test_xml_etree.iterparse Failed example: context = iterparse("samples/simple-ns.xml") Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in context = iterparse("samples/simple-ns.xml") File "", line 63, in __init__ IOError: [Errno 2] No such file or directory: 'samples/simple-ns.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 660, in test.test_xml_etree.iterparse Failed example: for action, elem in context: print action, elem.tag Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in for action, elem in context: NameError: name 'context' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 668, in test.test_xml_etree.iterparse Failed example: context = iterparse("samples/simple.xml", events) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in context = iterparse("samples/simple.xml", events) File "", line 63, in __init__ IOError: [Errno 2] No such file or directory: 'samples/simple.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 669, in test.test_xml_etree.iterparse Failed example: for action, elem in context: print action, elem.tag Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in for action, elem in context: NameError: name 'context' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 673, in test.test_xml_etree.iterparse Failed example: context = iterparse("samples/simple.xml", events=events) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in context = iterparse("samples/simple.xml", events=events) File "", line 63, in __init__ IOError: [Errno 2] No such file or directory: 'samples/simple.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 674, in test.test_xml_etree.iterparse Failed example: for action, elem in context: print action, elem.tag Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in for action, elem in context: NameError: name 'context' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 678, in test.test_xml_etree.iterparse Failed example: context = iterparse("samples/simple.xml", events) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in context = iterparse("samples/simple.xml", events) File "", line 63, in __init__ IOError: [Errno 2] No such file or directory: 'samples/simple.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 679, in test.test_xml_etree.iterparse Failed example: for action, elem in context: print action, elem.tag Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in for action, elem in context: NameError: name 'context' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 691, in test.test_xml_etree.iterparse Failed example: context = iterparse("samples/simple-ns.xml", events) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in context = iterparse("samples/simple-ns.xml", events) File "", line 63, in __init__ IOError: [Errno 2] No such file or directory: 'samples/simple-ns.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 692, in test.test_xml_etree.iterparse Failed example: for action, elem in context: if action in ("start", "end"): print action, elem.tag else: print action, elem Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in for action, elem in context: NameError: name 'context' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 709, in test.test_xml_etree.iterparse Failed example: context = iterparse("samples/simple.xml", events) Expected: Traceback (most recent call last): ValueError: unknown event 'bogus' Got: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in context = iterparse("samples/simple.xml", events) File "", line 63, in __init__ IOError: [Errno 2] No such file or directory: 'samples/simple.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 567, in test.test_xml_etree.parsefile Failed example: tree = ET.parse("samples/simple.xml") Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in tree = ET.parse("samples/simple.xml") File "", line 56, in parse File "", line 25, in parse IOError: [Errno 2] No such file or directory: 'samples/simple.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 568, in test.test_xml_etree.parsefile Failed example: normalize_crlf(tree) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in normalize_crlf(tree) NameError: name 'tree' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 569, in test.test_xml_etree.parsefile Failed example: tree.write(sys.stdout) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in tree.write(sys.stdout) NameError: name 'tree' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 575, in test.test_xml_etree.parsefile Failed example: tree = ET.parse("samples/simple-ns.xml") Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in tree = ET.parse("samples/simple-ns.xml") File "", line 56, in parse File "", line 25, in parse IOError: [Errno 2] No such file or directory: 'samples/simple-ns.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 576, in test.test_xml_etree.parsefile Failed example: normalize_crlf(tree) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in normalize_crlf(tree) NameError: name 'tree' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 577, in test.test_xml_etree.parsefile Failed example: tree.write(sys.stdout) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in tree.write(sys.stdout) NameError: name 'tree' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 587, in test.test_xml_etree.parsefile Failed example: parser.feed(open("samples/simple.xml").read()) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in parser.feed(open("samples/simple.xml").read()) IOError: [Errno 2] No such file or directory: 'samples/simple.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 588, in test.test_xml_etree.parsefile Failed example: print serialize(parser.close()) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in print serialize(parser.close()) ParseError: no element found: line 1, column 0 ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 596, in test.test_xml_etree.parsefile Failed example: parser.feed(open("samples/simple.xml").read()) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in parser.feed(open("samples/simple.xml").read()) IOError: [Errno 2] No such file or directory: 'samples/simple.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 597, in test.test_xml_etree.parsefile Failed example: print serialize(parser.close()) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in print serialize(parser.close()) ParseError: no element found: line 1, column 0 ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 606, in test.test_xml_etree.parsefile Failed example: parser.feed(open("samples/simple.xml").read()) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in parser.feed(open("samples/simple.xml").read()) IOError: [Errno 2] No such file or directory: 'samples/simple.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 607, in test.test_xml_etree.parsefile Failed example: print serialize(parser.close()) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in print serialize(parser.close()) ParseError: no element found: line 1, column 0 ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 1361, in test.test_xml_etree.xinclude_default Failed example: ElementInclude.include(document) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in ElementInclude.include(document) File "/tmp/python-test/local/lib/python2.7/xml/etree/ElementInclude.py", line 111, in include node = loader(href, parse) File "/tmp/python-test/local/lib/python2.7/xml/etree/ElementInclude.py", line 78, in default_loader file = open(href) IOError: [Errno 2] No such file or directory: 'samples/simple.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 1362, in test.test_xml_etree.xinclude_default Failed example: print serialize(document) # default Expected:

    Example.

    text texttail
    Got:

    Example.

    ********************************************************************** 6 items had failures: 2 of 8 in test.test_xml_etree.custom_builder 3 of 8 in test.test_xml_etree.file_init 3 of 19 in test.test_xml_etree.getchildren 16 of 29 in test.test_xml_etree.iterparse 12 of 17 in test.test_xml_etree.parsefile 2 of 4 in test.test_xml_etree.xinclude_default ***Test Failed*** 38 failures. test test_xml_etree_c failed -- 38 of 591 doctests failed Re-running test 'test_xml_etree_c' in verbose mode doctest (test.test_xml_etree_c) ... 1 tests with zero failures ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 770, in test.test_xml_etree.custom_builder Failed example: parser.feed(open("samples/simple.xml", "r").read()) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in parser.feed(open("samples/simple.xml", "r").read()) IOError: [Errno 2] No such file or directory: 'samples/simple.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 793, in test.test_xml_etree.custom_builder Failed example: parser.feed(open("samples/simple-ns.xml", "r").read()) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in parser.feed(open("samples/simple-ns.xml", "r").read()) IOError: [Errno 2] No such file or directory: 'samples/simple-ns.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 421, in test.test_xml_etree.file_init Failed example: tree = ET.ElementTree(file="samples/simple.xml") Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in tree = ET.ElementTree(file="samples/simple.xml") File "/tmp/python-test/local/lib/python2.7/xml/etree/ElementTree.py", line 611, in __init__ self.parse(file) File "", line 25, in parse IOError: [Errno 2] No such file or directory: 'samples/simple.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 422, in test.test_xml_etree.file_init Failed example: tree.find("element").tag Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in tree.find("element").tag AttributeError: 'NoneType' object has no attribute 'tag' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 424, in test.test_xml_etree.file_init Failed example: tree.find("element/../empty-element").tag Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in tree.find("element/../empty-element").tag AttributeError: 'NoneType' object has no attribute 'tag' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 811, in test.test_xml_etree.getchildren Failed example: tree = ET.parse(open("samples/simple.xml", "r")) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in tree = ET.parse(open("samples/simple.xml", "r")) IOError: [Errno 2] No such file or directory: 'samples/simple.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 812, in test.test_xml_etree.getchildren Failed example: for elem in tree.getroot().iter(): summarize_list(elem.getchildren()) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in for elem in tree.getroot().iter(): NameError: name 'tree' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 818, in test.test_xml_etree.getchildren Failed example: for elem in tree.getiterator(): summarize_list(elem.getchildren()) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in for elem in tree.getiterator(): NameError: name 'tree' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 647, in test.test_xml_etree.iterparse Failed example: context = iterparse("samples/simple.xml") Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in context = iterparse("samples/simple.xml") File "", line 63, in __init__ IOError: [Errno 2] No such file or directory: 'samples/simple.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 648, in test.test_xml_etree.iterparse Failed example: action, elem = next(context) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in action, elem = next(context) NameError: name 'context' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 649, in test.test_xml_etree.iterparse Failed example: print action, elem.tag Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in print action, elem.tag NameError: name 'action' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 651, in test.test_xml_etree.iterparse Failed example: for action, elem in context: print action, elem.tag Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in for action, elem in context: NameError: name 'context' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 656, in test.test_xml_etree.iterparse Failed example: context.root.tag Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in context.root.tag NameError: name 'context' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 659, in test.test_xml_etree.iterparse Failed example: context = iterparse("samples/simple-ns.xml") Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in context = iterparse("samples/simple-ns.xml") File "", line 63, in __init__ IOError: [Errno 2] No such file or directory: 'samples/simple-ns.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 660, in test.test_xml_etree.iterparse Failed example: for action, elem in context: print action, elem.tag Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in for action, elem in context: NameError: name 'context' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 668, in test.test_xml_etree.iterparse Failed example: context = iterparse("samples/simple.xml", events) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in context = iterparse("samples/simple.xml", events) File "", line 63, in __init__ IOError: [Errno 2] No such file or directory: 'samples/simple.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 669, in test.test_xml_etree.iterparse Failed example: for action, elem in context: print action, elem.tag Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in for action, elem in context: NameError: name 'context' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 673, in test.test_xml_etree.iterparse Failed example: context = iterparse("samples/simple.xml", events=events) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in context = iterparse("samples/simple.xml", events=events) File "", line 63, in __init__ IOError: [Errno 2] No such file or directory: 'samples/simple.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 674, in test.test_xml_etree.iterparse Failed example: for action, elem in context: print action, elem.tag Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in for action, elem in context: NameError: name 'context' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 678, in test.test_xml_etree.iterparse Failed example: context = iterparse("samples/simple.xml", events) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in context = iterparse("samples/simple.xml", events) File "", line 63, in __init__ IOError: [Errno 2] No such file or directory: 'samples/simple.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 679, in test.test_xml_etree.iterparse Failed example: for action, elem in context: print action, elem.tag Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in for action, elem in context: NameError: name 'context' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 691, in test.test_xml_etree.iterparse Failed example: context = iterparse("samples/simple-ns.xml", events) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in context = iterparse("samples/simple-ns.xml", events) File "", line 63, in __init__ IOError: [Errno 2] No such file or directory: 'samples/simple-ns.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 692, in test.test_xml_etree.iterparse Failed example: for action, elem in context: if action in ("start", "end"): print action, elem.tag else: print action, elem Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in for action, elem in context: NameError: name 'context' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 709, in test.test_xml_etree.iterparse Failed example: context = iterparse("samples/simple.xml", events) Expected: Traceback (most recent call last): ValueError: unknown event 'bogus' Got: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in context = iterparse("samples/simple.xml", events) File "", line 63, in __init__ IOError: [Errno 2] No such file or directory: 'samples/simple.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 567, in test.test_xml_etree.parsefile Failed example: tree = ET.parse("samples/simple.xml") Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in tree = ET.parse("samples/simple.xml") File "", line 56, in parse File "", line 25, in parse IOError: [Errno 2] No such file or directory: 'samples/simple.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 568, in test.test_xml_etree.parsefile Failed example: normalize_crlf(tree) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in normalize_crlf(tree) NameError: name 'tree' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 569, in test.test_xml_etree.parsefile Failed example: tree.write(sys.stdout) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in tree.write(sys.stdout) NameError: name 'tree' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 575, in test.test_xml_etree.parsefile Failed example: tree = ET.parse("samples/simple-ns.xml") Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in tree = ET.parse("samples/simple-ns.xml") File "", line 56, in parse File "", line 25, in parse IOError: [Errno 2] No such file or directory: 'samples/simple-ns.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 576, in test.test_xml_etree.parsefile Failed example: normalize_crlf(tree) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in normalize_crlf(tree) NameError: name 'tree' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 577, in test.test_xml_etree.parsefile Failed example: tree.write(sys.stdout) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in tree.write(sys.stdout) NameError: name 'tree' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 587, in test.test_xml_etree.parsefile Failed example: parser.feed(open("samples/simple.xml").read()) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in parser.feed(open("samples/simple.xml").read()) IOError: [Errno 2] No such file or directory: 'samples/simple.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 588, in test.test_xml_etree.parsefile Failed example: print serialize(parser.close()) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in print serialize(parser.close()) ParseError: no element found: line 1, column 0 ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 596, in test.test_xml_etree.parsefile Failed example: parser.feed(open("samples/simple.xml").read()) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in parser.feed(open("samples/simple.xml").read()) IOError: [Errno 2] No such file or directory: 'samples/simple.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 597, in test.test_xml_etree.parsefile Failed example: print serialize(parser.close()) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in print serialize(parser.close()) ParseError: no element found: line 1, column 0 ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 606, in test.test_xml_etree.parsefile Failed example: parser.feed(open("samples/simple.xml").read()) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in parser.feed(open("samples/simple.xml").read()) IOError: [Errno 2] No such file or directory: 'samples/simple.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 607, in test.test_xml_etree.parsefile Failed example: print serialize(parser.close()) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in print serialize(parser.close()) ParseError: no element found: line 1, column 0 ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 1361, in test.test_xml_etree.xinclude_default Failed example: ElementInclude.include(document) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in ElementInclude.include(document) File "/tmp/python-test/local/lib/python2.7/xml/etree/ElementInclude.py", line 111, in include node = loader(href, parse) File "/tmp/python-test/local/lib/python2.7/xml/etree/ElementInclude.py", line 78, in default_loader file = open(href) IOError: [Errno 2] No such file or directory: 'samples/simple.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 1362, in test.test_xml_etree.xinclude_default Failed example: print serialize(document) # default Expected:

    Example.

    text texttail
    Got:

    Example.

    ********************************************************************** 6 items had failures: 2 of 8 in test.test_xml_etree.custom_builder 3 of 8 in test.test_xml_etree.file_init 3 of 19 in test.test_xml_etree.getchildren 16 of 29 in test.test_xml_etree.iterparse 12 of 17 in test.test_xml_etree.parsefile 2 of 4 in test.test_xml_etree.xinclude_default ***Test Failed*** 38 failures. test test_xml_etree_c failed -- 38 of 591 doctests failed test_xmllib test_xmlrpc test_xpickle test_xpickle -- skipping backwards compat tests. Use 'regrtest.py -u xpickle' to run them. test_xrange test_zipfile test_zipfile64 test_zipfile64 skipped -- test requires loads of disk-space bytes and a long time to run test_zipimport test_zipimport_support test_zlib 345 tests OK. 2 tests failed: test_xml_etree test_xml_etree_c 35 tests skipped: test_aepack test_al test_applesingle test_bsddb185 test_bsddb3 test_cd test_cl test_curses test_epoll test_gl test_imgfile test_ioctl test_kqueue test_linuxaudiodev test_macos test_macostools test_multiprocessing test_ossaudiodev test_py3kwarn test_scriptpackages test_smtpnet test_socketserver test_startfile test_sunaudiodev test_tcl test_timeout test_tk test_ttk_guionly test_ttk_textonly test_unicode_file test_urllib2net test_urllibnet test_winreg test_winsound test_zipfile64 6 skips unexpected on linux2: test_multiprocessing test_ttk_guionly test_epoll test_tk test_ioctl test_ttk_textonly [947558 refs] From nnorwitz at gmail.com Thu Mar 11 22:28:45 2010 From: nnorwitz at gmail.com (Neal Norwitz) Date: Thu, 11 Mar 2010 16:28:45 -0500 Subject: [Python-checkins] Python Regression Test Failures opt (2) Message-ID: <20100311212845.GA32406@kbk-i386-bb.psfb.org> 345 tests OK. 2 tests failed: test_xml_etree test_xml_etree_c 35 tests skipped: test_aepack test_al test_applesingle test_bsddb185 test_bsddb3 test_cd test_cl test_curses test_epoll test_gl test_imgfile test_ioctl test_kqueue test_linuxaudiodev test_macos test_macostools test_multiprocessing test_ossaudiodev test_py3kwarn test_scriptpackages test_smtpnet test_socketserver test_startfile test_sunaudiodev test_tcl test_timeout test_tk test_ttk_guionly test_ttk_textonly test_unicode_file test_urllib2net test_urllibnet test_winreg test_winsound test_zipfile64 6 skips unexpected on linux2: test_multiprocessing test_ttk_guionly test_epoll test_tk test_ioctl test_ttk_textonly == CPython 2.7a4+ (trunk:78840M, Mar 11 2010, 16:01:44) [GCC 3.3.4 20040623 (Gentoo Linux 3.3.4-r1, ssp-3.3.2-2, pie-8.7.6)] == Linux-2.6.9-gentoo-r1-i686-AMD_Athlon-tm-_XP_3000+-with-gentoo-1.4.16 == /tmp/test_python_28303 test_grammar test_opcodes test_dict test_builtin test_exceptions test_types test_unittest test_doctest test_doctest2 test_MimeWriter test_SimpleHTTPServer test_StringIO test___all__ test___future__ test__locale test_abc test_abstract_numbers test_aepack test_aepack skipped -- No module named aetypes test_aifc test_al test_al skipped -- No module named al test_anydbm test_applesingle test_applesingle skipped -- No module named MacOS test_argparse test_array test_ascii_formatd test_ast test_asynchat test_asyncore test_atexit test_audioop test_augassign test_base64 test_bastion test_bigaddrspace test_bigmem test_binascii test_binhex test_binop test_bisect test_bool test_bsddb test_bsddb185 test_bsddb185 skipped -- No module named bsddb185 test_bsddb3 test_bsddb3 skipped -- Use of the `bsddb' resource not enabled test_buffer test_bufio test_bytes test_bz2 test_calendar test_call test_capi test_cd test_cd skipped -- No module named cd test_cfgparser test_cgi test_charmapcodec test_cl test_cl skipped -- No module named cl test_class test_cmath test_cmd test_cmd_line test_cmd_line_script test_code test_codeccallbacks test_codecencodings_cn test_codecencodings_hk test_codecencodings_jp test_codecencodings_kr test_codecencodings_tw test_codecmaps_cn test_codecmaps_hk test_codecmaps_jp test_codecmaps_kr test_codecmaps_tw test_codecs test_codeop test_coding test_coercion test_collections test_colorsys test_commands test_compare test_compile test_compileall test_compiler test_complex test_complex_args test_contains test_contextlib test_cookie test_cookielib test_copy test_copy_reg test_cpickle test_cprofile test_crypt test_csv test_ctypes test_curses test_curses skipped -- Use of the `curses' resource not enabled test_datetime test_dbm test_decimal test_decorators test_defaultdict test_deque test_descr test_descrtut test_dictcomps test_dictviews test_difflib test_dircache test_dis test_distutils [20623 refs] [20623 refs] [20623 refs] [20623 refs] [20620 refs] test_dl test_docxmlrpc test_dumbdbm test_dummy_thread test_dummy_threading test_email test_email_codecs test_email_renamed test_enumerate test_eof test_epoll test_epoll skipped -- kernel doesn't support epoll() test_errno test_exception_variations test_extcall test_fcntl test_file test_file2k test_filecmp test_fileinput test_fileio test_float test_fnmatch test_fork1 test_format test_fpformat test_fractions test_frozen test_ftplib test_funcattrs test_functools test_future test_future3 test_future4 test_future5 test_future_builtins test_gc test_gdbm test_generators test_genericpath test_genexps test_getargs test_getargs2 test_getopt test_gettext test_gl test_gl skipped -- No module named gl test_glob test_global test_grp test_gzip test_hash test_hashlib test_heapq test_hmac test_hotshot test_htmllib test_htmlparser test_httplib test_httpservers [16621 refs] [16621 refs] [16621 refs] [26870 refs] test_imageop test_imaplib test_imgfile test_imgfile skipped -- No module named imgfile test_imp test_import test_importhooks test_importlib test_index test_inspect test_int test_int_literal test_io test_ioctl test_ioctl skipped -- Unable to open /dev/tty test_isinstance test_iter test_iterlen test_itertools test_json test_kqueue test_kqueue skipped -- test works only on BSD test_largefile test_lib2to3 test_linecache test_linuxaudiodev test_linuxaudiodev skipped -- Use of the `audio' resource not enabled test_list test_locale test_logging test_long test_long_future test_longexp test_macos test_macos skipped -- No module named MacOS test_macostools test_macostools skipped -- No module named MacOS test_macpath test_mailbox test_marshal test_math test_md5 test_memoryio test_memoryview test_mhlib test_mimetools test_mimetypes test_minidom test_mmap test_module test_modulefinder test_multibytecodec test_multibytecodec_support test_multifile test_multiprocessing test_multiprocessing skipped -- This platform lacks a functioning sem_open implementation, therefore, the required synchronization primitives needed will not function, see issue 3770. test_mutants test_mutex test_netrc test_new test_nis test_normalization test_ntpath test_old_mailbox test_openpty test_operator test_optparse test_os [16621 refs] [16621 refs] test_ossaudiodev test_ossaudiodev skipped -- Use of the `audio' resource not enabled test_parser Expecting 's_push: parser stack overflow' in next line s_push: parser stack overflow test_pdb test_peepholer test_pep247 test_pep263 test_pep277 test_pep292 test_pep352 test_pickle test_pickletools test_pipes test_pkg test_pkgimport test_pkgutil test_platform [18017 refs] [18017 refs] test_plistlib test_poll test_popen [16626 refs] [16626 refs] [16626 refs] test_popen2 test_poplib test_posix test_posixpath test_pow test_pprint test_print test_profile test_profilehooks test_property test_pstats test_pty test_pwd test_py3kwarn test_py3kwarn skipped -- test.test_py3kwarn must be run with the -3 flag test_pyclbr test_pydoc [21734 refs] [21734 refs] [21734 refs] [21734 refs] [21734 refs] [21733 refs] [21733 refs] test_pyexpat test_queue test_quopri [19449 refs] [19449 refs] test_random test_re test_readline test_repr test_resource test_rfc822 test_richcmp test_robotparser test_runpy test_sax test_scope test_scriptpackages test_scriptpackages skipped -- No module named aetools test_select test_set test_setcomps test_sets test_sgmllib test_sha test_shelve test_shlex test_shutil test_signal test_site [16621 refs] [16621 refs] [16621 refs] [16621 refs] test_slice test_smtplib test_smtpnet test_smtpnet skipped -- Use of the `network' resource not enabled test_socket test_socketserver test_socketserver skipped -- Use of the `network' resource not enabled test_softspace test_sort test_sqlite test_ssl test_startfile test_startfile skipped -- module os has no attribute startfile test_str test_strftime test_string test_stringprep test_strop test_strptime test_strtod test_struct test_structmembers test_structseq test_subprocess [16621 refs] [16621 refs] [16621 refs] [16621 refs] [16621 refs] [16621 refs] [16621 refs] [16621 refs] [16621 refs] [16621 refs] [16621 refs] [16621 refs] [16621 refs] [16621 refs] [16836 refs] [16621 refs] [16621 refs] [16621 refs] [16621 refs] [16621 refs] . [16621 refs] [16621 refs] this bit of output is from a test of stdout in a different process ... [16621 refs] [16621 refs] [16836 refs] [16621 refs] [16621 refs] [16621 refs] Traceback (most recent call last): File "", line 1, in KeyboardInterrupt [16621 refs] [16621 refs] [16621 refs] [16621 refs] [16621 refs] [16621 refs] [16621 refs] [16621 refs] [16621 refs] [16621 refs] [16621 refs] [16621 refs] [16621 refs] [16621 refs] [16621 refs] [16836 refs] [16621 refs] [16621 refs] [16621 refs] [16621 refs] [16621 refs] . [16621 refs] [16621 refs] this bit of output is from a test of stdout in a different process ... [16621 refs] [16621 refs] [16836 refs] test_sunaudiodev test_sunaudiodev skipped -- No module named sunaudiodev test_sundry test_symtable test_syntax test_sys [16621 refs] [16621 refs] [16621 refs] [16850 refs] [16644 refs] test_sysconfig [16621 refs] [16621 refs] test_tarfile test_tcl test_tcl skipped -- No module named _tkinter test_telnetlib test_tempfile [16621 refs] test_textwrap test_thread test_threaded_import Unhandled exception in thread started by Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/test/test_thread.py", line 218, in thread1 os.close(self.write_fd) OSError: [Errno 9] Bad file descriptor test_threadedtempfile test_threading [19921 refs] [21092 refs] [20906 refs] [20906 refs] [20906 refs] [20906 refs] test_threading_local test_threadsignals test_time test_timeout test_timeout skipped -- Use of the `network' resource not enabled test_tk test_tk skipped -- No module named _tkinter test_tokenize test_trace test_traceback test_transformer test_ttk_guionly test_ttk_guionly skipped -- No module named _tkinter test_ttk_textonly test_ttk_textonly skipped -- No module named _tkinter test_tuple test_typechecks test_ucn test_unary test_undocumented_details test_unicode test_unicode_file test_unicode_file skipped -- No Unicode filesystem semantics on this platform. test_unicodedata test_univnewlines test_univnewlines2k test_unpack test_urllib test_urllib2 test_urllib2_localnet test_urllib2net test_urllib2net skipped -- Use of the `network' resource not enabled test_urllibnet test_urllibnet skipped -- Use of the `network' resource not enabled test_urlparse test_userdict test_userlist test_userstring test_uu test_uuid WARNING: uuid.getnode is unreliable on many platforms. It is disabled until the code and/or test can be fixed properly. WARNING: uuid._ifconfig_getnode is unreliable on many platforms. It is disabled until the code and/or test can be fixed properly. WARNING: uuid._unixdll_getnode is unreliable on many platforms. It is disabled until the code and/or test can be fixed properly. test_wait3 test_wait4 test_warnings test_wave test_weakref test_whichdb test_winreg test_winreg skipped -- No module named _winreg test_winsound test_winsound skipped -- No module named winsound test_with test_wsgiref test_xdrlib test_xml_etree ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 770, in test.test_xml_etree.custom_builder Failed example: parser.feed(open("samples/simple.xml", "r").read()) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in parser.feed(open("samples/simple.xml", "r").read()) IOError: [Errno 2] No such file or directory: 'samples/simple.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 793, in test.test_xml_etree.custom_builder Failed example: parser.feed(open("samples/simple-ns.xml", "r").read()) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in parser.feed(open("samples/simple-ns.xml", "r").read()) IOError: [Errno 2] No such file or directory: 'samples/simple-ns.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 421, in test.test_xml_etree.file_init Failed example: tree = ET.ElementTree(file="samples/simple.xml") Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in tree = ET.ElementTree(file="samples/simple.xml") File "/tmp/python-test/local/lib/python2.7/xml/etree/ElementTree.py", line 611, in __init__ self.parse(file) File "/tmp/python-test/local/lib/python2.7/xml/etree/ElementTree.py", line 646, in parse source = open(source, "rb") IOError: [Errno 2] No such file or directory: 'samples/simple.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 422, in test.test_xml_etree.file_init Failed example: tree.find("element").tag Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in tree.find("element").tag AttributeError: 'NoneType' object has no attribute 'tag' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 424, in test.test_xml_etree.file_init Failed example: tree.find("element/../empty-element").tag Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in tree.find("element/../empty-element").tag AttributeError: 'NoneType' object has no attribute 'tag' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 811, in test.test_xml_etree.getchildren Failed example: tree = ET.parse(open("samples/simple.xml", "r")) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in tree = ET.parse(open("samples/simple.xml", "r")) IOError: [Errno 2] No such file or directory: 'samples/simple.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 812, in test.test_xml_etree.getchildren Failed example: for elem in tree.getroot().iter(): summarize_list(elem.getchildren()) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in for elem in tree.getroot().iter(): NameError: name 'tree' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 818, in test.test_xml_etree.getchildren Failed example: for elem in tree.getiterator(): summarize_list(elem.getchildren()) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in for elem in tree.getiterator(): NameError: name 'tree' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 647, in test.test_xml_etree.iterparse Failed example: context = iterparse("samples/simple.xml") Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in context = iterparse("samples/simple.xml") File "/tmp/python-test/local/lib/python2.7/xml/etree/ElementTree.py", line 1192, in iterparse source = open(source, "rb") IOError: [Errno 2] No such file or directory: 'samples/simple.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 648, in test.test_xml_etree.iterparse Failed example: action, elem = next(context) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in action, elem = next(context) NameError: name 'context' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 649, in test.test_xml_etree.iterparse Failed example: print action, elem.tag Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in print action, elem.tag NameError: name 'action' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 651, in test.test_xml_etree.iterparse Failed example: for action, elem in context: print action, elem.tag Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in for action, elem in context: NameError: name 'context' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 656, in test.test_xml_etree.iterparse Failed example: context.root.tag Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in context.root.tag NameError: name 'context' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 659, in test.test_xml_etree.iterparse Failed example: context = iterparse("samples/simple-ns.xml") Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in context = iterparse("samples/simple-ns.xml") File "/tmp/python-test/local/lib/python2.7/xml/etree/ElementTree.py", line 1192, in iterparse source = open(source, "rb") IOError: [Errno 2] No such file or directory: 'samples/simple-ns.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 660, in test.test_xml_etree.iterparse Failed example: for action, elem in context: print action, elem.tag Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in for action, elem in context: NameError: name 'context' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 668, in test.test_xml_etree.iterparse Failed example: context = iterparse("samples/simple.xml", events) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in context = iterparse("samples/simple.xml", events) File "/tmp/python-test/local/lib/python2.7/xml/etree/ElementTree.py", line 1192, in iterparse source = open(source, "rb") IOError: [Errno 2] No such file or directory: 'samples/simple.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 669, in test.test_xml_etree.iterparse Failed example: for action, elem in context: print action, elem.tag Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in for action, elem in context: NameError: name 'context' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 673, in test.test_xml_etree.iterparse Failed example: context = iterparse("samples/simple.xml", events=events) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in context = iterparse("samples/simple.xml", events=events) File "/tmp/python-test/local/lib/python2.7/xml/etree/ElementTree.py", line 1192, in iterparse source = open(source, "rb") IOError: [Errno 2] No such file or directory: 'samples/simple.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 674, in test.test_xml_etree.iterparse Failed example: for action, elem in context: print action, elem.tag Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in for action, elem in context: NameError: name 'context' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 678, in test.test_xml_etree.iterparse Failed example: context = iterparse("samples/simple.xml", events) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in context = iterparse("samples/simple.xml", events) File "/tmp/python-test/local/lib/python2.7/xml/etree/ElementTree.py", line 1192, in iterparse source = open(source, "rb") IOError: [Errno 2] No such file or directory: 'samples/simple.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 679, in test.test_xml_etree.iterparse Failed example: for action, elem in context: print action, elem.tag Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in for action, elem in context: NameError: name 'context' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 691, in test.test_xml_etree.iterparse Failed example: context = iterparse("samples/simple-ns.xml", events) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in context = iterparse("samples/simple-ns.xml", events) File "/tmp/python-test/local/lib/python2.7/xml/etree/ElementTree.py", line 1192, in iterparse source = open(source, "rb") IOError: [Errno 2] No such file or directory: 'samples/simple-ns.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 692, in test.test_xml_etree.iterparse Failed example: for action, elem in context: if action in ("start", "end"): print action, elem.tag else: print action, elem Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in for action, elem in context: NameError: name 'context' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 709, in test.test_xml_etree.iterparse Failed example: context = iterparse("samples/simple.xml", events) Expected: Traceback (most recent call last): ValueError: unknown event 'bogus' Got: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in context = iterparse("samples/simple.xml", events) File "/tmp/python-test/local/lib/python2.7/xml/etree/ElementTree.py", line 1192, in iterparse source = open(source, "rb") IOError: [Errno 2] No such file or directory: 'samples/simple.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 567, in test.test_xml_etree.parsefile Failed example: tree = ET.parse("samples/simple.xml") Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in tree = ET.parse("samples/simple.xml") File "/tmp/python-test/local/lib/python2.7/xml/etree/ElementTree.py", line 1176, in parse tree.parse(source, parser) File "/tmp/python-test/local/lib/python2.7/xml/etree/ElementTree.py", line 646, in parse source = open(source, "rb") IOError: [Errno 2] No such file or directory: 'samples/simple.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 568, in test.test_xml_etree.parsefile Failed example: normalize_crlf(tree) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in normalize_crlf(tree) NameError: name 'tree' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 569, in test.test_xml_etree.parsefile Failed example: tree.write(sys.stdout) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in tree.write(sys.stdout) NameError: name 'tree' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 575, in test.test_xml_etree.parsefile Failed example: tree = ET.parse("samples/simple-ns.xml") Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in tree = ET.parse("samples/simple-ns.xml") File "/tmp/python-test/local/lib/python2.7/xml/etree/ElementTree.py", line 1176, in parse tree.parse(source, parser) File "/tmp/python-test/local/lib/python2.7/xml/etree/ElementTree.py", line 646, in parse source = open(source, "rb") IOError: [Errno 2] No such file or directory: 'samples/simple-ns.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 576, in test.test_xml_etree.parsefile Failed example: normalize_crlf(tree) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in normalize_crlf(tree) NameError: name 'tree' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 577, in test.test_xml_etree.parsefile Failed example: tree.write(sys.stdout) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in tree.write(sys.stdout) NameError: name 'tree' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 587, in test.test_xml_etree.parsefile Failed example: parser.feed(open("samples/simple.xml").read()) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in parser.feed(open("samples/simple.xml").read()) IOError: [Errno 2] No such file or directory: 'samples/simple.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 588, in test.test_xml_etree.parsefile Failed example: print serialize(parser.close()) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in print serialize(parser.close()) File "/tmp/python-test/local/lib/python2.7/xml/etree/ElementTree.py", line 1635, in close self._raiseerror(v) File "/tmp/python-test/local/lib/python2.7/xml/etree/ElementTree.py", line 1487, in _raiseerror raise err ParseError: no element found: line 1, column 0 ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 596, in test.test_xml_etree.parsefile Failed example: parser.feed(open("samples/simple.xml").read()) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in parser.feed(open("samples/simple.xml").read()) IOError: [Errno 2] No such file or directory: 'samples/simple.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 597, in test.test_xml_etree.parsefile Failed example: print serialize(parser.close()) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in print serialize(parser.close()) File "/tmp/python-test/local/lib/python2.7/xml/etree/ElementTree.py", line 1635, in close self._raiseerror(v) File "/tmp/python-test/local/lib/python2.7/xml/etree/ElementTree.py", line 1487, in _raiseerror raise err ParseError: no element found: line 1, column 0 ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 606, in test.test_xml_etree.parsefile Failed example: parser.feed(open("samples/simple.xml").read()) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in parser.feed(open("samples/simple.xml").read()) IOError: [Errno 2] No such file or directory: 'samples/simple.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 607, in test.test_xml_etree.parsefile Failed example: print serialize(parser.close()) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in print serialize(parser.close()) File "/tmp/python-test/local/lib/python2.7/xml/etree/ElementTree.py", line 1635, in close self._raiseerror(v) File "/tmp/python-test/local/lib/python2.7/xml/etree/ElementTree.py", line 1487, in _raiseerror raise err ParseError: no element found: line 1, column 0 ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 1361, in test.test_xml_etree.xinclude_default Failed example: ElementInclude.include(document) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in ElementInclude.include(document) File "/tmp/python-test/local/lib/python2.7/xml/etree/ElementInclude.py", line 111, in include node = loader(href, parse) File "/tmp/python-test/local/lib/python2.7/xml/etree/ElementInclude.py", line 78, in default_loader file = open(href) IOError: [Errno 2] No such file or directory: 'samples/simple.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 1362, in test.test_xml_etree.xinclude_default Failed example: print serialize(document) # default Expected:

    Example.

    text texttail
    Got:

    Example.

    ********************************************************************** 6 items had failures: 2 of 8 in test.test_xml_etree.custom_builder 3 of 8 in test.test_xml_etree.file_init 3 of 19 in test.test_xml_etree.getchildren 16 of 29 in test.test_xml_etree.iterparse 12 of 17 in test.test_xml_etree.parsefile 2 of 4 in test.test_xml_etree.xinclude_default ***Test Failed*** 38 failures. test test_xml_etree failed -- 38 of 591 doctests failed Re-running test 'test_xml_etree' in verbose mode ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 770, in test.test_xml_etree.custom_builder Failed example: parser.feed(open("samples/simple.xml", "r").read()) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in parser.feed(open("samples/simple.xml", "r").read()) IOError: [Errno 2] No such file or directory: 'samples/simple.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 793, in test.test_xml_etree.custom_builder Failed example: parser.feed(open("samples/simple-ns.xml", "r").read()) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in parser.feed(open("samples/simple-ns.xml", "r").read()) IOError: [Errno 2] No such file or directory: 'samples/simple-ns.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 421, in test.test_xml_etree.file_init Failed example: tree = ET.ElementTree(file="samples/simple.xml") Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in tree = ET.ElementTree(file="samples/simple.xml") File "/tmp/python-test/local/lib/python2.7/xml/etree/ElementTree.py", line 611, in __init__ self.parse(file) File "/tmp/python-test/local/lib/python2.7/xml/etree/ElementTree.py", line 646, in parse source = open(source, "rb") IOError: [Errno 2] No such file or directory: 'samples/simple.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 422, in test.test_xml_etree.file_init Failed example: tree.find("element").tag Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in tree.find("element").tag AttributeError: 'NoneType' object has no attribute 'tag' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 424, in test.test_xml_etree.file_init Failed example: tree.find("element/../empty-element").tag Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in tree.find("element/../empty-element").tag AttributeError: 'NoneType' object has no attribute 'tag' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 811, in test.test_xml_etree.getchildren Failed example: tree = ET.parse(open("samples/simple.xml", "r")) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in tree = ET.parse(open("samples/simple.xml", "r")) IOError: [Errno 2] No such file or directory: 'samples/simple.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 812, in test.test_xml_etree.getchildren Failed example: for elem in tree.getroot().iter(): summarize_list(elem.getchildren()) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in for elem in tree.getroot().iter(): NameError: name 'tree' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 818, in test.test_xml_etree.getchildren Failed example: for elem in tree.getiterator(): summarize_list(elem.getchildren()) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in for elem in tree.getiterator(): NameError: name 'tree' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 647, in test.test_xml_etree.iterparse Failed example: context = iterparse("samples/simple.xml") Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in context = iterparse("samples/simple.xml") File "/tmp/python-test/local/lib/python2.7/xml/etree/ElementTree.py", line 1192, in iterparse source = open(source, "rb") IOError: [Errno 2] No such file or directory: 'samples/simple.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 648, in test.test_xml_etree.iterparse Failed example: action, elem = next(context) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in action, elem = next(context) NameError: name 'context' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 649, in test.test_xml_etree.iterparse Failed example: print action, elem.tag Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in print action, elem.tag NameError: name 'action' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 651, in test.test_xml_etree.iterparse Failed example: for action, elem in context: print action, elem.tag Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in for action, elem in context: NameError: name 'context' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 656, in test.test_xml_etree.iterparse Failed example: context.root.tag Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in context.root.tag NameError: name 'context' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 659, in test.test_xml_etree.iterparse Failed example: context = iterparse("samples/simple-ns.xml") Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in context = iterparse("samples/simple-ns.xml") File "/tmp/python-test/local/lib/python2.7/xml/etree/ElementTree.py", line 1192, in iterparse source = open(source, "rb") IOError: [Errno 2] No such file or directory: 'samples/simple-ns.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 660, in test.test_xml_etree.iterparse Failed example: for action, elem in context: print action, elem.tag Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in for action, elem in context: NameError: name 'context' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 668, in test.test_xml_etree.iterparse Failed example: context = iterparse("samples/simple.xml", events) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in context = iterparse("samples/simple.xml", events) File "/tmp/python-test/local/lib/python2.7/xml/etree/ElementTree.py", line 1192, in iterparse source = open(source, "rb") IOError: [Errno 2] No such file or directory: 'samples/simple.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 669, in test.test_xml_etree.iterparse Failed example: for action, elem in context: print action, elem.tag Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in for action, elem in context: NameError: name 'context' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 673, in test.test_xml_etree.iterparse Failed example: context = iterparse("samples/simple.xml", events=events) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in context = iterparse("samples/simple.xml", events=events) File "/tmp/python-test/local/lib/python2.7/xml/etree/ElementTree.py", line 1192, in iterparse source = open(source, "rb") IOError: [Errno 2] No such file or directory: 'samples/simple.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 674, in test.test_xml_etree.iterparse Failed example: for action, elem in context: print action, elem.tag Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in for action, elem in context: NameError: name 'context' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 678, in test.test_xml_etree.iterparse Failed example: context = iterparse("samples/simple.xml", events) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in context = iterparse("samples/simple.xml", events) File "/tmp/python-test/local/lib/python2.7/xml/etree/ElementTree.py", line 1192, in iterparse source = open(source, "rb") IOError: [Errno 2] No such file or directory: 'samples/simple.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 679, in test.test_xml_etree.iterparse Failed example: for action, elem in context: print action, elem.tag Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in for action, elem in context: NameError: name 'context' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 691, in test.test_xml_etree.iterparse Failed example: context = iterparse("samples/simple-ns.xml", events) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in context = iterparse("samples/simple-ns.xml", events) File "/tmp/python-test/local/lib/python2.7/xml/etree/ElementTree.py", line 1192, in iterparse source = open(source, "rb") IOError: [Errno 2] No such file or directory: 'samples/simple-ns.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 692, in test.test_xml_etree.iterparse Failed example: for action, elem in context: if action in ("start", "end"): print action, elem.tag else: print action, elem Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in for action, elem in context: NameError: name 'context' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 709, in test.test_xml_etree.iterparse Failed example: context = iterparse("samples/simple.xml", events) Expected: Traceback (most recent call last): ValueError: unknown event 'bogus' Got: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in context = iterparse("samples/simple.xml", events) File "/tmp/python-test/local/lib/python2.7/xml/etree/ElementTree.py", line 1192, in iterparse source = open(source, "rb") IOError: [Errno 2] No such file or directory: 'samples/simple.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 567, in test.test_xml_etree.parsefile Failed example: tree = ET.parse("samples/simple.xml") Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in tree = ET.parse("samples/simple.xml") File "/tmp/python-test/local/lib/python2.7/xml/etree/ElementTree.py", line 1176, in parse tree.parse(source, parser) File "/tmp/python-test/local/lib/python2.7/xml/etree/ElementTree.py", line 646, in parse source = open(source, "rb") IOError: [Errno 2] No such file or directory: 'samples/simple.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 568, in test.test_xml_etree.parsefile Failed example: normalize_crlf(tree) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in normalize_crlf(tree) NameError: name 'tree' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 569, in test.test_xml_etree.parsefile Failed example: tree.write(sys.stdout) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in tree.write(sys.stdout) NameError: name 'tree' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 575, in test.test_xml_etree.parsefile Failed example: tree = ET.parse("samples/simple-ns.xml") Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in tree = ET.parse("samples/simple-ns.xml") File "/tmp/python-test/local/lib/python2.7/xml/etree/ElementTree.py", line 1176, in parse tree.parse(source, parser) File "/tmp/python-test/local/lib/python2.7/xml/etree/ElementTree.py", line 646, in parse source = open(source, "rb") IOError: [Errno 2] No such file or directory: 'samples/simple-ns.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 576, in test.test_xml_etree.parsefile Failed example: normalize_crlf(tree) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in normalize_crlf(tree) NameError: name 'tree' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 577, in test.test_xml_etree.parsefile Failed example: tree.write(sys.stdout) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in tree.write(sys.stdout) NameError: name 'tree' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 587, in test.test_xml_etree.parsefile Failed example: parser.feed(open("samples/simple.xml").read()) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in parser.feed(open("samples/simple.xml").read()) IOError: [Errno 2] No such file or directory: 'samples/simple.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 588, in test.test_xml_etree.parsefile Failed example: print serialize(parser.close()) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in print serialize(parser.close()) File "/tmp/python-test/local/lib/python2.7/xml/etree/ElementTree.py", line 1635, in close self._raiseerror(v) File "/tmp/python-test/local/lib/python2.7/xml/etree/ElementTree.py", line 1487, in _raiseerror raise err ParseError: no element found: line 1, column 0 ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 596, in test.test_xml_etree.parsefile Failed example: parser.feed(open("samples/simple.xml").read()) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in parser.feed(open("samples/simple.xml").read()) IOError: [Errno 2] No such file or directory: 'samples/simple.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 597, in test.test_xml_etree.parsefile Failed example: print serialize(parser.close()) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in print serialize(parser.close()) File "/tmp/python-test/local/lib/python2.7/xml/etree/ElementTree.py", line 1635, in close self._raiseerror(v) File "/tmp/python-test/local/lib/python2.7/xml/etree/ElementTree.py", line 1487, in _raiseerror raise err ParseError: no element found: line 1, column 0 ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 606, in test.test_xml_etree.parsefile Failed example: parser.feed(open("samples/simple.xml").read()) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in parser.feed(open("samples/simple.xml").read()) IOError: [Errno 2] No such file or directory: 'samples/simple.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 607, in test.test_xml_etree.parsefile Failed example: print serialize(parser.close()) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in print serialize(parser.close()) File "/tmp/python-test/local/lib/python2.7/xml/etree/ElementTree.py", line 1635, in close self._raiseerror(v) File "/tmp/python-test/local/lib/python2.7/xml/etree/ElementTree.py", line 1487, in _raiseerror raise err ParseError: no element found: line 1, column 0 ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 1361, in test.test_xml_etree.xinclude_default Failed example: ElementInclude.include(document) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in ElementInclude.include(document) File "/tmp/python-test/local/lib/python2.7/xml/etree/ElementInclude.py", line 111, in include node = loader(href, parse) File "/tmp/python-test/local/lib/python2.7/xml/etree/ElementInclude.py", line 78, in default_loader file = open(href) IOError: [Errno 2] No such file or directory: 'samples/simple.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 1362, in test.test_xml_etree.xinclude_default Failed example: print serialize(document) # default Expected:

    Example.

    text texttail
    Got:

    Example.

    ********************************************************************** 6 items had failures: 2 of 8 in test.test_xml_etree.custom_builder 3 of 8 in test.test_xml_etree.file_init 3 of 19 in test.test_xml_etree.getchildren 16 of 29 in test.test_xml_etree.iterparse 12 of 17 in test.test_xml_etree.parsefile 2 of 4 in test.test_xml_etree.xinclude_default ***Test Failed*** 38 failures. test test_xml_etree failed -- 38 of 591 doctests failed test_xml_etree_c ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 770, in test.test_xml_etree.custom_builder Failed example: parser.feed(open("samples/simple.xml", "r").read()) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in parser.feed(open("samples/simple.xml", "r").read()) IOError: [Errno 2] No such file or directory: 'samples/simple.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 793, in test.test_xml_etree.custom_builder Failed example: parser.feed(open("samples/simple-ns.xml", "r").read()) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in parser.feed(open("samples/simple-ns.xml", "r").read()) IOError: [Errno 2] No such file or directory: 'samples/simple-ns.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 421, in test.test_xml_etree.file_init Failed example: tree = ET.ElementTree(file="samples/simple.xml") Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in tree = ET.ElementTree(file="samples/simple.xml") File "/tmp/python-test/local/lib/python2.7/xml/etree/ElementTree.py", line 611, in __init__ self.parse(file) File "", line 25, in parse IOError: [Errno 2] No such file or directory: 'samples/simple.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 422, in test.test_xml_etree.file_init Failed example: tree.find("element").tag Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in tree.find("element").tag AttributeError: 'NoneType' object has no attribute 'tag' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 424, in test.test_xml_etree.file_init Failed example: tree.find("element/../empty-element").tag Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in tree.find("element/../empty-element").tag AttributeError: 'NoneType' object has no attribute 'tag' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 811, in test.test_xml_etree.getchildren Failed example: tree = ET.parse(open("samples/simple.xml", "r")) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in tree = ET.parse(open("samples/simple.xml", "r")) IOError: [Errno 2] No such file or directory: 'samples/simple.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 812, in test.test_xml_etree.getchildren Failed example: for elem in tree.getroot().iter(): summarize_list(elem.getchildren()) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in for elem in tree.getroot().iter(): NameError: name 'tree' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 818, in test.test_xml_etree.getchildren Failed example: for elem in tree.getiterator(): summarize_list(elem.getchildren()) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in for elem in tree.getiterator(): NameError: name 'tree' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 647, in test.test_xml_etree.iterparse Failed example: context = iterparse("samples/simple.xml") Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in context = iterparse("samples/simple.xml") File "", line 63, in __init__ IOError: [Errno 2] No such file or directory: 'samples/simple.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 648, in test.test_xml_etree.iterparse Failed example: action, elem = next(context) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in action, elem = next(context) NameError: name 'context' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 649, in test.test_xml_etree.iterparse Failed example: print action, elem.tag Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in print action, elem.tag NameError: name 'action' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 651, in test.test_xml_etree.iterparse Failed example: for action, elem in context: print action, elem.tag Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in for action, elem in context: NameError: name 'context' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 656, in test.test_xml_etree.iterparse Failed example: context.root.tag Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in context.root.tag NameError: name 'context' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 659, in test.test_xml_etree.iterparse Failed example: context = iterparse("samples/simple-ns.xml") Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in context = iterparse("samples/simple-ns.xml") File "", line 63, in __init__ IOError: [Errno 2] No such file or directory: 'samples/simple-ns.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 660, in test.test_xml_etree.iterparse Failed example: for action, elem in context: print action, elem.tag Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in for action, elem in context: NameError: name 'context' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 668, in test.test_xml_etree.iterparse Failed example: context = iterparse("samples/simple.xml", events) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in context = iterparse("samples/simple.xml", events) File "", line 63, in __init__ IOError: [Errno 2] No such file or directory: 'samples/simple.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 669, in test.test_xml_etree.iterparse Failed example: for action, elem in context: print action, elem.tag Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in for action, elem in context: NameError: name 'context' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 673, in test.test_xml_etree.iterparse Failed example: context = iterparse("samples/simple.xml", events=events) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in context = iterparse("samples/simple.xml", events=events) File "", line 63, in __init__ IOError: [Errno 2] No such file or directory: 'samples/simple.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 674, in test.test_xml_etree.iterparse Failed example: for action, elem in context: print action, elem.tag Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in for action, elem in context: NameError: name 'context' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 678, in test.test_xml_etree.iterparse Failed example: context = iterparse("samples/simple.xml", events) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in context = iterparse("samples/simple.xml", events) File "", line 63, in __init__ IOError: [Errno 2] No such file or directory: 'samples/simple.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 679, in test.test_xml_etree.iterparse Failed example: for action, elem in context: print action, elem.tag Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in for action, elem in context: NameError: name 'context' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 691, in test.test_xml_etree.iterparse Failed example: context = iterparse("samples/simple-ns.xml", events) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in context = iterparse("samples/simple-ns.xml", events) File "", line 63, in __init__ IOError: [Errno 2] No such file or directory: 'samples/simple-ns.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 692, in test.test_xml_etree.iterparse Failed example: for action, elem in context: if action in ("start", "end"): print action, elem.tag else: print action, elem Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in for action, elem in context: NameError: name 'context' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 709, in test.test_xml_etree.iterparse Failed example: context = iterparse("samples/simple.xml", events) Expected: Traceback (most recent call last): ValueError: unknown event 'bogus' Got: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in context = iterparse("samples/simple.xml", events) File "", line 63, in __init__ IOError: [Errno 2] No such file or directory: 'samples/simple.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 567, in test.test_xml_etree.parsefile Failed example: tree = ET.parse("samples/simple.xml") Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in tree = ET.parse("samples/simple.xml") File "", line 56, in parse File "", line 25, in parse IOError: [Errno 2] No such file or directory: 'samples/simple.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 568, in test.test_xml_etree.parsefile Failed example: normalize_crlf(tree) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in normalize_crlf(tree) NameError: name 'tree' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 569, in test.test_xml_etree.parsefile Failed example: tree.write(sys.stdout) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in tree.write(sys.stdout) NameError: name 'tree' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 575, in test.test_xml_etree.parsefile Failed example: tree = ET.parse("samples/simple-ns.xml") Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in tree = ET.parse("samples/simple-ns.xml") File "", line 56, in parse File "", line 25, in parse IOError: [Errno 2] No such file or directory: 'samples/simple-ns.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 576, in test.test_xml_etree.parsefile Failed example: normalize_crlf(tree) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in normalize_crlf(tree) NameError: name 'tree' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 577, in test.test_xml_etree.parsefile Failed example: tree.write(sys.stdout) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in tree.write(sys.stdout) NameError: name 'tree' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 587, in test.test_xml_etree.parsefile Failed example: parser.feed(open("samples/simple.xml").read()) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in parser.feed(open("samples/simple.xml").read()) IOError: [Errno 2] No such file or directory: 'samples/simple.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 588, in test.test_xml_etree.parsefile Failed example: print serialize(parser.close()) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in print serialize(parser.close()) ParseError: no element found: line 1, column 0 ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 596, in test.test_xml_etree.parsefile Failed example: parser.feed(open("samples/simple.xml").read()) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in parser.feed(open("samples/simple.xml").read()) IOError: [Errno 2] No such file or directory: 'samples/simple.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 597, in test.test_xml_etree.parsefile Failed example: print serialize(parser.close()) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in print serialize(parser.close()) ParseError: no element found: line 1, column 0 ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 606, in test.test_xml_etree.parsefile Failed example: parser.feed(open("samples/simple.xml").read()) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in parser.feed(open("samples/simple.xml").read()) IOError: [Errno 2] No such file or directory: 'samples/simple.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 607, in test.test_xml_etree.parsefile Failed example: print serialize(parser.close()) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in print serialize(parser.close()) ParseError: no element found: line 1, column 0 ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 1361, in test.test_xml_etree.xinclude_default Failed example: ElementInclude.include(document) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in ElementInclude.include(document) File "/tmp/python-test/local/lib/python2.7/xml/etree/ElementInclude.py", line 111, in include node = loader(href, parse) File "/tmp/python-test/local/lib/python2.7/xml/etree/ElementInclude.py", line 78, in default_loader file = open(href) IOError: [Errno 2] No such file or directory: 'samples/simple.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 1362, in test.test_xml_etree.xinclude_default Failed example: print serialize(document) # default Expected:

    Example.

    text texttail
    Got:

    Example.

    ********************************************************************** 6 items had failures: 2 of 8 in test.test_xml_etree.custom_builder 3 of 8 in test.test_xml_etree.file_init 3 of 19 in test.test_xml_etree.getchildren 16 of 29 in test.test_xml_etree.iterparse 12 of 17 in test.test_xml_etree.parsefile 2 of 4 in test.test_xml_etree.xinclude_default ***Test Failed*** 38 failures. test test_xml_etree_c failed -- 38 of 591 doctests failed Re-running test 'test_xml_etree_c' in verbose mode doctest (test.test_xml_etree_c) ... 1 tests with zero failures ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 770, in test.test_xml_etree.custom_builder Failed example: parser.feed(open("samples/simple.xml", "r").read()) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in parser.feed(open("samples/simple.xml", "r").read()) IOError: [Errno 2] No such file or directory: 'samples/simple.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 793, in test.test_xml_etree.custom_builder Failed example: parser.feed(open("samples/simple-ns.xml", "r").read()) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in parser.feed(open("samples/simple-ns.xml", "r").read()) IOError: [Errno 2] No such file or directory: 'samples/simple-ns.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 421, in test.test_xml_etree.file_init Failed example: tree = ET.ElementTree(file="samples/simple.xml") Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in tree = ET.ElementTree(file="samples/simple.xml") File "/tmp/python-test/local/lib/python2.7/xml/etree/ElementTree.py", line 611, in __init__ self.parse(file) File "", line 25, in parse IOError: [Errno 2] No such file or directory: 'samples/simple.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 422, in test.test_xml_etree.file_init Failed example: tree.find("element").tag Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in tree.find("element").tag AttributeError: 'NoneType' object has no attribute 'tag' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 424, in test.test_xml_etree.file_init Failed example: tree.find("element/../empty-element").tag Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in tree.find("element/../empty-element").tag AttributeError: 'NoneType' object has no attribute 'tag' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 811, in test.test_xml_etree.getchildren Failed example: tree = ET.parse(open("samples/simple.xml", "r")) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in tree = ET.parse(open("samples/simple.xml", "r")) IOError: [Errno 2] No such file or directory: 'samples/simple.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 812, in test.test_xml_etree.getchildren Failed example: for elem in tree.getroot().iter(): summarize_list(elem.getchildren()) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in for elem in tree.getroot().iter(): NameError: name 'tree' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 818, in test.test_xml_etree.getchildren Failed example: for elem in tree.getiterator(): summarize_list(elem.getchildren()) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in for elem in tree.getiterator(): NameError: name 'tree' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 647, in test.test_xml_etree.iterparse Failed example: context = iterparse("samples/simple.xml") Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in context = iterparse("samples/simple.xml") File "", line 63, in __init__ IOError: [Errno 2] No such file or directory: 'samples/simple.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 648, in test.test_xml_etree.iterparse Failed example: action, elem = next(context) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in action, elem = next(context) NameError: name 'context' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 649, in test.test_xml_etree.iterparse Failed example: print action, elem.tag Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in print action, elem.tag NameError: name 'action' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 651, in test.test_xml_etree.iterparse Failed example: for action, elem in context: print action, elem.tag Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in for action, elem in context: NameError: name 'context' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 656, in test.test_xml_etree.iterparse Failed example: context.root.tag Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in context.root.tag NameError: name 'context' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 659, in test.test_xml_etree.iterparse Failed example: context = iterparse("samples/simple-ns.xml") Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in context = iterparse("samples/simple-ns.xml") File "", line 63, in __init__ IOError: [Errno 2] No such file or directory: 'samples/simple-ns.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 660, in test.test_xml_etree.iterparse Failed example: for action, elem in context: print action, elem.tag Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in for action, elem in context: NameError: name 'context' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 668, in test.test_xml_etree.iterparse Failed example: context = iterparse("samples/simple.xml", events) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in context = iterparse("samples/simple.xml", events) File "", line 63, in __init__ IOError: [Errno 2] No such file or directory: 'samples/simple.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 669, in test.test_xml_etree.iterparse Failed example: for action, elem in context: print action, elem.tag Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in for action, elem in context: NameError: name 'context' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 673, in test.test_xml_etree.iterparse Failed example: context = iterparse("samples/simple.xml", events=events) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in context = iterparse("samples/simple.xml", events=events) File "", line 63, in __init__ IOError: [Errno 2] No such file or directory: 'samples/simple.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 674, in test.test_xml_etree.iterparse Failed example: for action, elem in context: print action, elem.tag Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in for action, elem in context: NameError: name 'context' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 678, in test.test_xml_etree.iterparse Failed example: context = iterparse("samples/simple.xml", events) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in context = iterparse("samples/simple.xml", events) File "", line 63, in __init__ IOError: [Errno 2] No such file or directory: 'samples/simple.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 679, in test.test_xml_etree.iterparse Failed example: for action, elem in context: print action, elem.tag Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in for action, elem in context: NameError: name 'context' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 691, in test.test_xml_etree.iterparse Failed example: context = iterparse("samples/simple-ns.xml", events) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in context = iterparse("samples/simple-ns.xml", events) File "", line 63, in __init__ IOError: [Errno 2] No such file or directory: 'samples/simple-ns.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 692, in test.test_xml_etree.iterparse Failed example: for action, elem in context: if action in ("start", "end"): print action, elem.tag else: print action, elem Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in for action, elem in context: NameError: name 'context' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 709, in test.test_xml_etree.iterparse Failed example: context = iterparse("samples/simple.xml", events) Expected: Traceback (most recent call last): ValueError: unknown event 'bogus' Got: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in context = iterparse("samples/simple.xml", events) File "", line 63, in __init__ IOError: [Errno 2] No such file or directory: 'samples/simple.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 567, in test.test_xml_etree.parsefile Failed example: tree = ET.parse("samples/simple.xml") Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in tree = ET.parse("samples/simple.xml") File "", line 56, in parse File "", line 25, in parse IOError: [Errno 2] No such file or directory: 'samples/simple.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 568, in test.test_xml_etree.parsefile Failed example: normalize_crlf(tree) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in normalize_crlf(tree) NameError: name 'tree' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 569, in test.test_xml_etree.parsefile Failed example: tree.write(sys.stdout) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in tree.write(sys.stdout) NameError: name 'tree' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 575, in test.test_xml_etree.parsefile Failed example: tree = ET.parse("samples/simple-ns.xml") Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in tree = ET.parse("samples/simple-ns.xml") File "", line 56, in parse File "", line 25, in parse IOError: [Errno 2] No such file or directory: 'samples/simple-ns.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 576, in test.test_xml_etree.parsefile Failed example: normalize_crlf(tree) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in normalize_crlf(tree) NameError: name 'tree' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 577, in test.test_xml_etree.parsefile Failed example: tree.write(sys.stdout) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in tree.write(sys.stdout) NameError: name 'tree' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 587, in test.test_xml_etree.parsefile Failed example: parser.feed(open("samples/simple.xml").read()) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in parser.feed(open("samples/simple.xml").read()) IOError: [Errno 2] No such file or directory: 'samples/simple.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 588, in test.test_xml_etree.parsefile Failed example: print serialize(parser.close()) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in print serialize(parser.close()) ParseError: no element found: line 1, column 0 ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 596, in test.test_xml_etree.parsefile Failed example: parser.feed(open("samples/simple.xml").read()) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in parser.feed(open("samples/simple.xml").read()) IOError: [Errno 2] No such file or directory: 'samples/simple.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 597, in test.test_xml_etree.parsefile Failed example: print serialize(parser.close()) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in print serialize(parser.close()) ParseError: no element found: line 1, column 0 ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 606, in test.test_xml_etree.parsefile Failed example: parser.feed(open("samples/simple.xml").read()) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in parser.feed(open("samples/simple.xml").read()) IOError: [Errno 2] No such file or directory: 'samples/simple.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 607, in test.test_xml_etree.parsefile Failed example: print serialize(parser.close()) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in print serialize(parser.close()) ParseError: no element found: line 1, column 0 ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 1361, in test.test_xml_etree.xinclude_default Failed example: ElementInclude.include(document) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in ElementInclude.include(document) File "/tmp/python-test/local/lib/python2.7/xml/etree/ElementInclude.py", line 111, in include node = loader(href, parse) File "/tmp/python-test/local/lib/python2.7/xml/etree/ElementInclude.py", line 78, in default_loader file = open(href) IOError: [Errno 2] No such file or directory: 'samples/simple.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 1362, in test.test_xml_etree.xinclude_default Failed example: print serialize(document) # default Expected:

    Example.

    text texttail
    Got:

    Example.

    ********************************************************************** 6 items had failures: 2 of 8 in test.test_xml_etree.custom_builder 3 of 8 in test.test_xml_etree.file_init 3 of 19 in test.test_xml_etree.getchildren 16 of 29 in test.test_xml_etree.iterparse 12 of 17 in test.test_xml_etree.parsefile 2 of 4 in test.test_xml_etree.xinclude_default ***Test Failed*** 38 failures. test test_xml_etree_c failed -- 38 of 591 doctests failed test_xmllib test_xmlrpc test_xpickle test_xpickle -- skipping backwards compat tests. Use 'regrtest.py -u xpickle' to run them. test_xrange test_zipfile test_zipfile64 test_zipfile64 skipped -- test requires loads of disk-space bytes and a long time to run test_zipimport test_zipimport_support test_zlib 345 tests OK. 2 tests failed: test_xml_etree test_xml_etree_c 35 tests skipped: test_aepack test_al test_applesingle test_bsddb185 test_bsddb3 test_cd test_cl test_curses test_epoll test_gl test_imgfile test_ioctl test_kqueue test_linuxaudiodev test_macos test_macostools test_multiprocessing test_ossaudiodev test_py3kwarn test_scriptpackages test_smtpnet test_socketserver test_startfile test_sunaudiodev test_tcl test_timeout test_tk test_ttk_guionly test_ttk_textonly test_unicode_file test_urllib2net test_urllibnet test_winreg test_winsound test_zipfile64 6 skips unexpected on linux2: test_multiprocessing test_ttk_guionly test_epoll test_tk test_ioctl test_ttk_textonly [946412 refs] From python-checkins at python.org Thu Mar 11 22:50:45 2010 From: python-checkins at python.org (benjamin.peterson) Date: Thu, 11 Mar 2010 22:50:45 +0100 (CET) Subject: [Python-checkins] r78841 - in python/trunk/Lib/plat-irix5: flp.doc readcd.doc Message-ID: <20100311215045.3536AD9F5@mail.python.org> Author: benjamin.peterson Date: Thu Mar 11 22:50:45 2010 New Revision: 78841 Log: remove executable property from doc files Modified: python/trunk/Lib/plat-irix5/flp.doc (props changed) python/trunk/Lib/plat-irix5/readcd.doc (props changed) From python-checkins at python.org Thu Mar 11 22:53:25 2010 From: python-checkins at python.org (benjamin.peterson) Date: Thu, 11 Mar 2010 22:53:25 +0100 (CET) Subject: [Python-checkins] r78842 - in python/trunk/Lib: bsddb/dbshelve.py cgi.py Message-ID: <20100311215325.6847CD9F5@mail.python.org> Author: benjamin.peterson Date: Thu Mar 11 22:53:25 2010 New Revision: 78842 Log: use proper shebang lines Modified: python/trunk/Lib/bsddb/dbshelve.py python/trunk/Lib/cgi.py Modified: python/trunk/Lib/bsddb/dbshelve.py ============================================================================== --- python/trunk/Lib/bsddb/dbshelve.py (original) +++ python/trunk/Lib/bsddb/dbshelve.py Thu Mar 11 22:53:25 2010 @@ -1,4 +1,4 @@ -#!/bin/env python +#!/usr/bin/env python #------------------------------------------------------------------------ # Copyright (c) 1997-2001 by Total Control Software # All Rights Reserved Modified: python/trunk/Lib/cgi.py ============================================================================== --- python/trunk/Lib/cgi.py (original) +++ python/trunk/Lib/cgi.py Thu Mar 11 22:53:25 2010 @@ -1,4 +1,4 @@ -#! /usr/local/bin/python +#! /usr/bin/env python # NOTE: the above "/usr/local/bin/python" is NOT a mistake. It is # intentionally NOT "/usr/bin/env python". On many systems From python-checkins at python.org Thu Mar 11 22:55:56 2010 From: python-checkins at python.org (benjamin.peterson) Date: Thu, 11 Mar 2010 22:55:56 +0100 (CET) Subject: [Python-checkins] r78843 - in python/branches/py3k: Lib/cgi.py Message-ID: <20100311215556.85705C690@mail.python.org> Author: benjamin.peterson Date: Thu Mar 11 22:55:56 2010 New Revision: 78843 Log: Merged revisions 78841-78842 via svnmerge from svn+ssh://pythondev at svn.python.org/python/trunk ........ r78841 | benjamin.peterson | 2010-03-11 15:50:45 -0600 (Thu, 11 Mar 2010) | 1 line remove executable property from doc files ........ r78842 | benjamin.peterson | 2010-03-11 15:53:25 -0600 (Thu, 11 Mar 2010) | 1 line use proper shebang lines ........ Modified: python/branches/py3k/ (props changed) python/branches/py3k/Lib/cgi.py Modified: python/branches/py3k/Lib/cgi.py ============================================================================== --- python/branches/py3k/Lib/cgi.py (original) +++ python/branches/py3k/Lib/cgi.py Thu Mar 11 22:55:56 2010 @@ -1,4 +1,4 @@ -#! /usr/local/bin/python +#! /usr/bin/env python # NOTE: the above "/usr/local/bin/python" is NOT a mistake. It is # intentionally NOT "/usr/bin/env python". On many systems From python-checkins at python.org Thu Mar 11 23:03:45 2010 From: python-checkins at python.org (benjamin.peterson) Date: Thu, 11 Mar 2010 23:03:45 +0100 (CET) Subject: [Python-checkins] r78844 - python/trunk/Lib/cgi.py Message-ID: <20100311220345.88A4ADE55@mail.python.org> Author: benjamin.peterson Date: Thu Mar 11 23:03:45 2010 New Revision: 78844 Log: revert r78842 cgi.py change Modified: python/trunk/Lib/cgi.py Modified: python/trunk/Lib/cgi.py ============================================================================== --- python/trunk/Lib/cgi.py (original) +++ python/trunk/Lib/cgi.py Thu Mar 11 23:03:45 2010 @@ -1,4 +1,4 @@ -#! /usr/bin/env python +#! /usr/local/bin/python # NOTE: the above "/usr/local/bin/python" is NOT a mistake. It is # intentionally NOT "/usr/bin/env python". On many systems From python-checkins at python.org Thu Mar 11 23:05:59 2010 From: python-checkins at python.org (benjamin.peterson) Date: Thu, 11 Mar 2010 23:05:59 +0100 (CET) Subject: [Python-checkins] r78845 - in python/branches/py3k: Lib/cgi.py Message-ID: <20100311220559.08702DEF2@mail.python.org> Author: benjamin.peterson Date: Thu Mar 11 23:05:58 2010 New Revision: 78845 Log: Merged revisions 78844 via svnmerge from svn+ssh://pythondev at svn.python.org/python/trunk ........ r78844 | benjamin.peterson | 2010-03-11 16:03:45 -0600 (Thu, 11 Mar 2010) | 1 line revert r78842 cgi.py change ........ Modified: python/branches/py3k/ (props changed) python/branches/py3k/Lib/cgi.py Modified: python/branches/py3k/Lib/cgi.py ============================================================================== --- python/branches/py3k/Lib/cgi.py (original) +++ python/branches/py3k/Lib/cgi.py Thu Mar 11 23:05:58 2010 @@ -1,4 +1,4 @@ -#! /usr/bin/env python +#! /usr/local/bin/python # NOTE: the above "/usr/local/bin/python" is NOT a mistake. It is # intentionally NOT "/usr/bin/env python". On many systems From python-checkins at python.org Thu Mar 11 23:33:26 2010 From: python-checkins at python.org (benjamin.peterson) Date: Thu, 11 Mar 2010 23:33:26 +0100 (CET) Subject: [Python-checkins] r78846 - in python/trunk: Demo/cgi/cgi1.py Demo/cgi/cgi2.py Demo/cgi/cgi3.py Demo/turtle/tdemo_I_dontlike_tiltdemo.py Demo/turtle/tdemo_bytedesign.py Demo/turtle/tdemo_clock.py Demo/turtle/tdemo_fractalcurves.py Demo/turtle/tdemo_lindenmayer_indian.py Demo/turtle/tdemo_minimal_hanoi.py Demo/turtle/tdemo_paint.py Demo/turtle/tdemo_peace.py Demo/turtle/tdemo_penrose.py Demo/turtle/tdemo_planet_and_moon.py Demo/turtle/tdemo_tree.py Demo/turtle/tdemo_yinyang.py Demo/turtle/turtleDemo.py Demo/turtle/turtledemo_two_canvases.py Doc/includes/email-alternative.py Lib/test/test_bz2.py Lib/test/test_optparse.py Mac/BuildScript/build-installer.py Mac/Tools/fixapplepython23.py Mac/scripts/zappycfiles.py Tools/faqwiz/faqw.py Tools/pybench/Setup.py Tools/scripts/parseentities.py Message-ID: <20100311223326.1E74DC6CF@mail.python.org> Author: benjamin.peterson Date: Thu Mar 11 23:33:25 2010 New Revision: 78846 Log: normalize shebang lines to #!/usr/bin/env python Modified: python/trunk/Demo/cgi/cgi1.py python/trunk/Demo/cgi/cgi2.py python/trunk/Demo/cgi/cgi3.py python/trunk/Demo/turtle/tdemo_I_dontlike_tiltdemo.py python/trunk/Demo/turtle/tdemo_bytedesign.py python/trunk/Demo/turtle/tdemo_clock.py python/trunk/Demo/turtle/tdemo_fractalcurves.py python/trunk/Demo/turtle/tdemo_lindenmayer_indian.py python/trunk/Demo/turtle/tdemo_minimal_hanoi.py python/trunk/Demo/turtle/tdemo_paint.py python/trunk/Demo/turtle/tdemo_peace.py python/trunk/Demo/turtle/tdemo_penrose.py python/trunk/Demo/turtle/tdemo_planet_and_moon.py python/trunk/Demo/turtle/tdemo_tree.py python/trunk/Demo/turtle/tdemo_yinyang.py python/trunk/Demo/turtle/turtleDemo.py python/trunk/Demo/turtle/turtledemo_two_canvases.py python/trunk/Doc/includes/email-alternative.py python/trunk/Lib/test/test_bz2.py python/trunk/Lib/test/test_optparse.py python/trunk/Mac/BuildScript/build-installer.py python/trunk/Mac/Tools/fixapplepython23.py python/trunk/Mac/scripts/zappycfiles.py python/trunk/Tools/faqwiz/faqw.py python/trunk/Tools/pybench/Setup.py python/trunk/Tools/scripts/parseentities.py Modified: python/trunk/Demo/cgi/cgi1.py ============================================================================== --- python/trunk/Demo/cgi/cgi1.py (original) +++ python/trunk/Demo/cgi/cgi1.py Thu Mar 11 23:33:25 2010 @@ -1,4 +1,4 @@ -#!/usr/local/bin/python +#!/usr/bin/env python """CGI test 1 - check server setup.""" Modified: python/trunk/Demo/cgi/cgi2.py ============================================================================== --- python/trunk/Demo/cgi/cgi2.py (original) +++ python/trunk/Demo/cgi/cgi2.py Thu Mar 11 23:33:25 2010 @@ -1,4 +1,4 @@ -#!/usr/local/bin/python +#!/usr/bin/env python """CGI test 2 - basic use of cgi module.""" Modified: python/trunk/Demo/cgi/cgi3.py ============================================================================== --- python/trunk/Demo/cgi/cgi3.py (original) +++ python/trunk/Demo/cgi/cgi3.py Thu Mar 11 23:33:25 2010 @@ -1,4 +1,4 @@ -#!/usr/local/bin/python +#!/usr/bin/env python """CGI test 3 (persistent data).""" Modified: python/trunk/Demo/turtle/tdemo_I_dontlike_tiltdemo.py ============================================================================== --- python/trunk/Demo/turtle/tdemo_I_dontlike_tiltdemo.py (original) +++ python/trunk/Demo/turtle/tdemo_I_dontlike_tiltdemo.py Thu Mar 11 23:33:25 2010 @@ -1,4 +1,4 @@ -#!/usr/bin/python +#!/usr/bin/env python """ turtle-example-suite: tdemo-I_dont_like_tiltdemo.py Modified: python/trunk/Demo/turtle/tdemo_bytedesign.py ============================================================================== --- python/trunk/Demo/turtle/tdemo_bytedesign.py (original) +++ python/trunk/Demo/turtle/tdemo_bytedesign.py Thu Mar 11 23:33:25 2010 @@ -1,4 +1,4 @@ -#!/usr/bin/python +#!/usr/bin/env python """ turtle-example-suite: tdemo_bytedesign.py Modified: python/trunk/Demo/turtle/tdemo_clock.py ============================================================================== --- python/trunk/Demo/turtle/tdemo_clock.py (original) +++ python/trunk/Demo/turtle/tdemo_clock.py Thu Mar 11 23:33:25 2010 @@ -1,4 +1,4 @@ -#!/usr/bin/python +#!/usr/bin/env python # -*- coding: cp1252 -*- """ turtle-example-suite: Modified: python/trunk/Demo/turtle/tdemo_fractalcurves.py ============================================================================== --- python/trunk/Demo/turtle/tdemo_fractalcurves.py (original) +++ python/trunk/Demo/turtle/tdemo_fractalcurves.py Thu Mar 11 23:33:25 2010 @@ -1,4 +1,4 @@ -#!/usr/bin/python +#!/usr/bin/env python """ turtle-example-suite: tdemo_fractalCurves.py Modified: python/trunk/Demo/turtle/tdemo_lindenmayer_indian.py ============================================================================== --- python/trunk/Demo/turtle/tdemo_lindenmayer_indian.py (original) +++ python/trunk/Demo/turtle/tdemo_lindenmayer_indian.py Thu Mar 11 23:33:25 2010 @@ -1,4 +1,4 @@ -#!/usr/bin/python +#!/usr/bin/env python """ turtle-example-suite: xtx_lindenmayer_indian.py Modified: python/trunk/Demo/turtle/tdemo_minimal_hanoi.py ============================================================================== --- python/trunk/Demo/turtle/tdemo_minimal_hanoi.py (original) +++ python/trunk/Demo/turtle/tdemo_minimal_hanoi.py Thu Mar 11 23:33:25 2010 @@ -1,4 +1,4 @@ -#!/usr/bin/python +#!/usr/bin/env python """ turtle-example-suite: tdemo_minimal_hanoi.py Modified: python/trunk/Demo/turtle/tdemo_paint.py ============================================================================== --- python/trunk/Demo/turtle/tdemo_paint.py (original) +++ python/trunk/Demo/turtle/tdemo_paint.py Thu Mar 11 23:33:25 2010 @@ -1,4 +1,4 @@ -#!/usr/bin/python +#!/usr/bin/env python """ turtle-example-suite: tdemo_paint.py Modified: python/trunk/Demo/turtle/tdemo_peace.py ============================================================================== --- python/trunk/Demo/turtle/tdemo_peace.py (original) +++ python/trunk/Demo/turtle/tdemo_peace.py Thu Mar 11 23:33:25 2010 @@ -1,4 +1,4 @@ -#!/usr/bin/python +#!/usr/bin/env python """ turtle-example-suite: tdemo_peace.py Modified: python/trunk/Demo/turtle/tdemo_penrose.py ============================================================================== --- python/trunk/Demo/turtle/tdemo_penrose.py (original) +++ python/trunk/Demo/turtle/tdemo_penrose.py Thu Mar 11 23:33:25 2010 @@ -1,4 +1,4 @@ -#!/usr/bin/python +#!/usr/bin/env python """ xturtle-example-suite: xtx_kites_and_darts.py Modified: python/trunk/Demo/turtle/tdemo_planet_and_moon.py ============================================================================== --- python/trunk/Demo/turtle/tdemo_planet_and_moon.py (original) +++ python/trunk/Demo/turtle/tdemo_planet_and_moon.py Thu Mar 11 23:33:25 2010 @@ -1,4 +1,4 @@ -#!/usr/bin/python +#!/usr/bin/env python """ turtle-example-suite: tdemo_planets_and_moon.py Modified: python/trunk/Demo/turtle/tdemo_tree.py ============================================================================== --- python/trunk/Demo/turtle/tdemo_tree.py (original) +++ python/trunk/Demo/turtle/tdemo_tree.py Thu Mar 11 23:33:25 2010 @@ -1,4 +1,4 @@ -#!/usr/bin/python +#!/usr/bin/env python """ turtle-example-suite: tdemo_tree.py Modified: python/trunk/Demo/turtle/tdemo_yinyang.py ============================================================================== --- python/trunk/Demo/turtle/tdemo_yinyang.py (original) +++ python/trunk/Demo/turtle/tdemo_yinyang.py Thu Mar 11 23:33:25 2010 @@ -1,4 +1,4 @@ -#!/usr/bin/python +#!/usr/bin/env python """ turtle-example-suite: tdemo_yinyang.py Modified: python/trunk/Demo/turtle/turtleDemo.py ============================================================================== --- python/trunk/Demo/turtle/turtleDemo.py (original) +++ python/trunk/Demo/turtle/turtleDemo.py Thu Mar 11 23:33:25 2010 @@ -1,4 +1,4 @@ -#!/usr/bin/python +#!/usr/bin/env python import sys import os Modified: python/trunk/Demo/turtle/turtledemo_two_canvases.py ============================================================================== --- python/trunk/Demo/turtle/turtledemo_two_canvases.py (original) +++ python/trunk/Demo/turtle/turtledemo_two_canvases.py Thu Mar 11 23:33:25 2010 @@ -1,4 +1,4 @@ -#!/usr/bin/python +#!/usr/bin/env python ## DEMONSTRATES USE OF 2 CANVASES, SO CANNOT BE RUN IN DEMOVIEWER! """turtle example: Using TurtleScreen and RawTurtle for drawing on two distinct canvases. Modified: python/trunk/Doc/includes/email-alternative.py ============================================================================== --- python/trunk/Doc/includes/email-alternative.py (original) +++ python/trunk/Doc/includes/email-alternative.py Thu Mar 11 23:33:25 2010 @@ -1,4 +1,4 @@ -#! /usr/bin/python +#!/usr/bin/env python import smtplib Modified: python/trunk/Lib/test/test_bz2.py ============================================================================== --- python/trunk/Lib/test/test_bz2.py (original) +++ python/trunk/Lib/test/test_bz2.py Thu Mar 11 23:33:25 2010 @@ -1,4 +1,4 @@ -#!/usr/bin/python +#!/usr/bin/env python from test import test_support from test.test_support import TESTFN, import_module Modified: python/trunk/Lib/test/test_optparse.py ============================================================================== --- python/trunk/Lib/test/test_optparse.py (original) +++ python/trunk/Lib/test/test_optparse.py Thu Mar 11 23:33:25 2010 @@ -1,4 +1,4 @@ -#!/usr/bin/python +#!/usr/bin/env python # # Test suite for Optik. Supplied by Johannes Gijsbers Modified: python/trunk/Mac/BuildScript/build-installer.py ============================================================================== --- python/trunk/Mac/BuildScript/build-installer.py (original) +++ python/trunk/Mac/BuildScript/build-installer.py Thu Mar 11 23:33:25 2010 @@ -1,4 +1,4 @@ -#!/usr/bin/python +#!/usr/bin/env python """ This script is used to build the "official unofficial" universal build on Mac OS X. It requires Mac OS X 10.4, Xcode 2.2 and the 10.4u SDK to do its Modified: python/trunk/Mac/Tools/fixapplepython23.py ============================================================================== --- python/trunk/Mac/Tools/fixapplepython23.py (original) +++ python/trunk/Mac/Tools/fixapplepython23.py Thu Mar 11 23:33:25 2010 @@ -1,4 +1,4 @@ -#!/usr/bin/python +#!/usr/bin/env python """fixapplepython23 - Fix Apple-installed Python 2.3 (on Mac OS X 10.3) Python 2.3 (and 2.3.X for X<5) have the problem that building an extension Modified: python/trunk/Mac/scripts/zappycfiles.py ============================================================================== --- python/trunk/Mac/scripts/zappycfiles.py (original) +++ python/trunk/Mac/scripts/zappycfiles.py Thu Mar 11 23:33:25 2010 @@ -1,4 +1,4 @@ -#!/usr/local/bin/python +#!/usr/bin/env python """Recursively zap all .pyc and .pyo files""" import os import sys Modified: python/trunk/Tools/faqwiz/faqw.py ============================================================================== --- python/trunk/Tools/faqwiz/faqw.py (original) +++ python/trunk/Tools/faqwiz/faqw.py Thu Mar 11 23:33:25 2010 @@ -1,4 +1,4 @@ -#! /usr/local/bin/python +#!/usr/bin/env python """FAQ wizard bootstrap.""" Modified: python/trunk/Tools/pybench/Setup.py ============================================================================== --- python/trunk/Tools/pybench/Setup.py (original) +++ python/trunk/Tools/pybench/Setup.py Thu Mar 11 23:33:25 2010 @@ -1,4 +1,4 @@ -#!python +#!/usr/bin/env python # Setup file for pybench # Modified: python/trunk/Tools/scripts/parseentities.py ============================================================================== --- python/trunk/Tools/scripts/parseentities.py (original) +++ python/trunk/Tools/scripts/parseentities.py Thu Mar 11 23:33:25 2010 @@ -1,4 +1,4 @@ -#!/usr/local/bin/python +#!/usr/bin/env python """ Utility for parsing HTML entity definitions available from: http://www.w3.org/ as e.g. From python-checkins at python.org Thu Mar 11 23:34:12 2010 From: python-checkins at python.org (benjamin.peterson) Date: Thu, 11 Mar 2010 23:34:12 +0100 (CET) Subject: [Python-checkins] r78847 - python/trunk/Lib/test/test_optparse.py Message-ID: <20100311223412.CD483C6CF@mail.python.org> Author: benjamin.peterson Date: Thu Mar 11 23:34:12 2010 New Revision: 78847 Log: remove shebang line from non-executable test Modified: python/trunk/Lib/test/test_optparse.py Modified: python/trunk/Lib/test/test_optparse.py ============================================================================== --- python/trunk/Lib/test/test_optparse.py (original) +++ python/trunk/Lib/test/test_optparse.py Thu Mar 11 23:34:12 2010 @@ -1,5 +1,3 @@ -#!/usr/bin/env python - # # Test suite for Optik. Supplied by Johannes Gijsbers # (taradino at softhome.net) -- translated from the original Optik From python-checkins at python.org Thu Mar 11 23:36:36 2010 From: python-checkins at python.org (benjamin.peterson) Date: Thu, 11 Mar 2010 23:36:36 +0100 (CET) Subject: [Python-checkins] r78848 - python/branches/py3k Message-ID: <20100311223636.3054EDBF9@mail.python.org> Author: benjamin.peterson Date: Thu Mar 11 23:36:36 2010 New Revision: 78848 Log: Blocked revisions 78846 via svnmerge ........ r78846 | benjamin.peterson | 2010-03-11 16:33:25 -0600 (Thu, 11 Mar 2010) | 1 line normalize shebang lines to #!/usr/bin/env python ........ Modified: python/branches/py3k/ (props changed) From python-checkins at python.org Thu Mar 11 23:40:40 2010 From: python-checkins at python.org (benjamin.peterson) Date: Thu, 11 Mar 2010 23:40:40 +0100 (CET) Subject: [Python-checkins] r78849 - in python/branches/py3k: Lib/test/test_optparse.py Message-ID: <20100311224040.66025DE94@mail.python.org> Author: benjamin.peterson Date: Thu Mar 11 23:40:40 2010 New Revision: 78849 Log: Merged revisions 78847 via svnmerge from svn+ssh://pythondev at svn.python.org/python/trunk ........ r78847 | benjamin.peterson | 2010-03-11 16:34:12 -0600 (Thu, 11 Mar 2010) | 1 line remove shebang line from non-executable test ........ Modified: python/branches/py3k/ (props changed) python/branches/py3k/Lib/test/test_optparse.py Modified: python/branches/py3k/Lib/test/test_optparse.py ============================================================================== --- python/branches/py3k/Lib/test/test_optparse.py (original) +++ python/branches/py3k/Lib/test/test_optparse.py Thu Mar 11 23:40:40 2010 @@ -1,5 +1,3 @@ -#!/usr/bin/python - # # Test suite for Optik. Supplied by Johannes Gijsbers # (taradino at softhome.net) -- translated from the original Optik From python-checkins at python.org Thu Mar 11 23:53:47 2010 From: python-checkins at python.org (benjamin.peterson) Date: Thu, 11 Mar 2010 23:53:47 +0100 (CET) Subject: [Python-checkins] r78850 - in python/branches/py3k: Demo/cgi/cgi1.py Demo/cgi/cgi2.py Demo/cgi/cgi3.py Demo/comparisons/regextest.py Demo/comparisons/sortingtest.py Demo/comparisons/systemtest.py Demo/curses/life.py Demo/curses/ncurses.py Demo/curses/rain.py Demo/curses/repeat.py Demo/curses/tclock.py Demo/distutils/test2to3/maintest.py Demo/parser/test_parser.py Demo/pdist/RCSProxy.py Demo/pdist/makechangelog.py Demo/pdist/rcvs.py Demo/pdist/rrcs.py Demo/pysvr/pysvr.py Demo/scripts/beer.py Demo/scripts/eqfix.py Demo/scripts/fact.py Demo/scripts/find-uname.py Demo/scripts/from.py Demo/scripts/lpwatch.py Demo/scripts/makedir.py Demo/scripts/markov.py Demo/scripts/mboxconvert.py Demo/scripts/morse.py Demo/scripts/newslist.py Demo/scripts/pi.py Demo/scripts/pp.py Demo/scripts/primes.py Demo/scripts/queens.py Demo/scripts/script.py Demo/scripts/unbirthday.py Demo/scripts/update.py Demo/sockets/echosvr.py Demo/sockets/finger.py Demo/sockets/gopher.py Demo/sockets/mcast.py Demo/sockets/rpython.py Demo/sockets/rpythond.py Demo/sockets/telnet.py Demo/sockets/throughput.py Demo/sockets/udpecho.py Demo/tkinter/guido/MimeViewer.py Demo/tkinter/guido/canvasevents.py Demo/tkinter/guido/dialog.py Demo/tkinter/guido/electrons.py Demo/tkinter/guido/kill.py Demo/tkinter/guido/mbox.py Demo/tkinter/guido/newmenubardemo.py Demo/tkinter/guido/rmt.py Demo/tkinter/guido/solitaire.py Demo/tkinter/guido/sortvisu.py Demo/tkinter/guido/svkill.py Demo/tkinter/guido/tkman.py Demo/turtle/tdemo_I_dontlike_tiltdemo.py Demo/turtle/tdemo_bytedesign.py Demo/turtle/tdemo_clock.py Demo/turtle/tdemo_forest.py Demo/turtle/tdemo_fractalcurves.py Demo/turtle/tdemo_lindenmayer_indian.py Demo/turtle/tdemo_minimal_hanoi.py Demo/turtle/tdemo_paint.py Demo/turtle/tdemo_peace.py Demo/turtle/tdemo_penrose.py Demo/turtle/tdemo_planet_and_moon.py Demo/turtle/tdemo_tree.py Demo/turtle/tdemo_yinyang.py Demo/turtle/turtleDemo.py Demo/turtle/turtledemo_two_canvases.py Demo/zlib/minigzip.py Demo/zlib/zlibdemo.py Doc/includes/email-alternative.py Doc/includes/email-dir.py Doc/includes/email-unpack.py Doc/tools/rstlint.py Lib/base64.py Lib/cProfile.py Lib/difflib.py Lib/http/cookies.py Lib/idlelib/PyShell.py Lib/keyword.py Lib/lib2to3/pgen2/token.py Lib/lib2to3/tests/pytree_idempotency.py Lib/mailbox.py Lib/pdb.py Lib/platform.py Lib/profile.py Lib/pydoc.py Lib/quopri.py Lib/smtpd.py Lib/smtplib.py Lib/symbol.py Lib/tabnanny.py Lib/tarfile.py Lib/test/crashers/recursive_call.py Lib/test/curses_tests.py Lib/test/pystone.py Lib/test/re_tests.py Lib/test/regrtest.py Lib/test/test___future__.py Lib/test/test_array.py Lib/test/test_binhex.py Lib/test/test_bz2.py Lib/test/test_cmd.py Lib/test/test_codecencodings_cn.py Lib/test/test_codecencodings_hk.py Lib/test/test_codecencodings_jp.py Lib/test/test_codecencodings_kr.py Lib/test/test_codecencodings_tw.py Lib/test/test_codecmaps_cn.py Lib/test/test_codecmaps_hk.py Lib/test/test_codecmaps_jp.py Lib/test/test_codecmaps_kr.py Lib/test/test_codecmaps_tw.py Lib/test/test_dbm.py Lib/test/test_dbm_dumb.py Lib/test/test_eof.py Lib/test/test_errno.py Lib/test/test_gzip.py Lib/test/test_keywordonlyarg.py Lib/test/test_logging.py Lib/test/test_marshal.py Lib/test/test_multibytecodec.py Lib/test/test_multibytecodec_support.py Lib/test/test_multiprocessing.py Lib/test/test_popen.py Lib/test/test_random.py Lib/test/test_smtpnet.py Lib/test/test_socket.py Lib/test/test_tcl.py Lib/test/test_urllib2_localnet.py Lib/test/test_urllib2net.py Lib/test/test_urllibnet.py Lib/test/test_urlparse.py Lib/test/test_userstring.py Lib/test/test_with.py Lib/test/test_xmlrpc_net.py Lib/timeit.py Lib/token.py Lib/trace.py Lib/uu.py Lib/webbrowser.py Python/makeopcodetargets.py Tools/faqwiz/faqw.py Tools/freeze/freeze.py Tools/i18n/makelocalealias.py Tools/i18n/msgfmt.py Tools/i18n/pygettext.py Tools/modulator/Tkextra.py Tools/modulator/modulator.py Tools/scripts/byteyears.py Tools/scripts/checkappend.py Tools/scripts/checkpyc.py Tools/scripts/classfix.py Tools/scripts/cleanfuture.py Tools/scripts/combinerefs.py Tools/scripts/copytime.py Tools/scripts/crlf.py Tools/scripts/cvsfiles.py Tools/scripts/db2pickle.py Tools/scripts/dutree.py Tools/scripts/eptags.py Tools/scripts/find_recursionlimit.py Tools/scripts/finddiv.py Tools/scripts/findlinksto.py Tools/scripts/findnocoding.py Tools/scripts/fixcid.py Tools/scripts/fixdiv.py Tools/scripts/fixheader.py Tools/scripts/fixnotice.py Tools/scripts/fixps.py Tools/scripts/ftpmirror.py Tools/scripts/google.py Tools/scripts/gprof2html.py Tools/scripts/h2py.py Tools/scripts/ifdef.py Tools/scripts/lfcr.py Tools/scripts/linktree.py Tools/scripts/lll.py Tools/scripts/logmerge.py Tools/scripts/md5sum.py Tools/scripts/methfix.py Tools/scripts/mkreal.py Tools/scripts/ndiff.py Tools/scripts/nm2def.py Tools/scripts/objgraph.py Tools/scripts/parseentities.py Tools/scripts/pdeps.py Tools/scripts/pickle2db.py Tools/scripts/pindent.py Tools/scripts/ptags.py Tools/scripts/pysource.py Tools/scripts/reindent-rst.py Tools/scripts/reindent.py Tools/scripts/rgrep.py Tools/scripts/serve.py Tools/scripts/suff.py Tools/scripts/svneol.py Tools/scripts/texi2html.py Tools/scripts/treesync.py Tools/scripts/untabify.py Tools/scripts/which.py Tools/scripts/xxci.py Tools/ssl/get-remote-certificate.py Tools/unicode/comparecodecs.py Tools/webchecker/wcgui.py Tools/webchecker/webchecker.py Tools/webchecker/websucker.py Tools/webchecker/wsgui.py Message-ID: <20100311225347.6F02AC656@mail.python.org> Author: benjamin.peterson Date: Thu Mar 11 23:53:45 2010 New Revision: 78850 Log: convert shebang lines: python -> python3 Modified: python/branches/py3k/Demo/cgi/cgi1.py python/branches/py3k/Demo/cgi/cgi2.py python/branches/py3k/Demo/cgi/cgi3.py python/branches/py3k/Demo/comparisons/regextest.py python/branches/py3k/Demo/comparisons/sortingtest.py python/branches/py3k/Demo/comparisons/systemtest.py python/branches/py3k/Demo/curses/life.py python/branches/py3k/Demo/curses/ncurses.py python/branches/py3k/Demo/curses/rain.py python/branches/py3k/Demo/curses/repeat.py python/branches/py3k/Demo/curses/tclock.py python/branches/py3k/Demo/distutils/test2to3/maintest.py python/branches/py3k/Demo/parser/test_parser.py python/branches/py3k/Demo/pdist/RCSProxy.py python/branches/py3k/Demo/pdist/makechangelog.py python/branches/py3k/Demo/pdist/rcvs.py python/branches/py3k/Demo/pdist/rrcs.py python/branches/py3k/Demo/pysvr/pysvr.py python/branches/py3k/Demo/scripts/beer.py python/branches/py3k/Demo/scripts/eqfix.py python/branches/py3k/Demo/scripts/fact.py python/branches/py3k/Demo/scripts/find-uname.py python/branches/py3k/Demo/scripts/from.py python/branches/py3k/Demo/scripts/lpwatch.py python/branches/py3k/Demo/scripts/makedir.py python/branches/py3k/Demo/scripts/markov.py python/branches/py3k/Demo/scripts/mboxconvert.py python/branches/py3k/Demo/scripts/morse.py python/branches/py3k/Demo/scripts/newslist.py python/branches/py3k/Demo/scripts/pi.py python/branches/py3k/Demo/scripts/pp.py python/branches/py3k/Demo/scripts/primes.py python/branches/py3k/Demo/scripts/queens.py python/branches/py3k/Demo/scripts/script.py python/branches/py3k/Demo/scripts/unbirthday.py python/branches/py3k/Demo/scripts/update.py python/branches/py3k/Demo/sockets/echosvr.py python/branches/py3k/Demo/sockets/finger.py python/branches/py3k/Demo/sockets/gopher.py python/branches/py3k/Demo/sockets/mcast.py python/branches/py3k/Demo/sockets/rpython.py python/branches/py3k/Demo/sockets/rpythond.py python/branches/py3k/Demo/sockets/telnet.py python/branches/py3k/Demo/sockets/throughput.py python/branches/py3k/Demo/sockets/udpecho.py python/branches/py3k/Demo/tkinter/guido/MimeViewer.py python/branches/py3k/Demo/tkinter/guido/canvasevents.py python/branches/py3k/Demo/tkinter/guido/dialog.py python/branches/py3k/Demo/tkinter/guido/electrons.py python/branches/py3k/Demo/tkinter/guido/kill.py python/branches/py3k/Demo/tkinter/guido/mbox.py python/branches/py3k/Demo/tkinter/guido/newmenubardemo.py python/branches/py3k/Demo/tkinter/guido/rmt.py python/branches/py3k/Demo/tkinter/guido/solitaire.py python/branches/py3k/Demo/tkinter/guido/sortvisu.py python/branches/py3k/Demo/tkinter/guido/svkill.py python/branches/py3k/Demo/tkinter/guido/tkman.py python/branches/py3k/Demo/turtle/tdemo_I_dontlike_tiltdemo.py python/branches/py3k/Demo/turtle/tdemo_bytedesign.py python/branches/py3k/Demo/turtle/tdemo_clock.py python/branches/py3k/Demo/turtle/tdemo_forest.py python/branches/py3k/Demo/turtle/tdemo_fractalcurves.py python/branches/py3k/Demo/turtle/tdemo_lindenmayer_indian.py python/branches/py3k/Demo/turtle/tdemo_minimal_hanoi.py python/branches/py3k/Demo/turtle/tdemo_paint.py python/branches/py3k/Demo/turtle/tdemo_peace.py python/branches/py3k/Demo/turtle/tdemo_penrose.py python/branches/py3k/Demo/turtle/tdemo_planet_and_moon.py python/branches/py3k/Demo/turtle/tdemo_tree.py python/branches/py3k/Demo/turtle/tdemo_yinyang.py python/branches/py3k/Demo/turtle/turtleDemo.py python/branches/py3k/Demo/turtle/turtledemo_two_canvases.py python/branches/py3k/Demo/zlib/minigzip.py python/branches/py3k/Demo/zlib/zlibdemo.py python/branches/py3k/Doc/includes/email-alternative.py python/branches/py3k/Doc/includes/email-dir.py python/branches/py3k/Doc/includes/email-unpack.py python/branches/py3k/Doc/tools/rstlint.py python/branches/py3k/Lib/base64.py python/branches/py3k/Lib/cProfile.py python/branches/py3k/Lib/difflib.py python/branches/py3k/Lib/http/cookies.py python/branches/py3k/Lib/idlelib/PyShell.py python/branches/py3k/Lib/keyword.py python/branches/py3k/Lib/lib2to3/pgen2/token.py python/branches/py3k/Lib/lib2to3/tests/pytree_idempotency.py python/branches/py3k/Lib/mailbox.py python/branches/py3k/Lib/pdb.py python/branches/py3k/Lib/platform.py python/branches/py3k/Lib/profile.py python/branches/py3k/Lib/pydoc.py python/branches/py3k/Lib/quopri.py python/branches/py3k/Lib/smtpd.py python/branches/py3k/Lib/smtplib.py python/branches/py3k/Lib/symbol.py python/branches/py3k/Lib/tabnanny.py python/branches/py3k/Lib/tarfile.py python/branches/py3k/Lib/test/crashers/recursive_call.py python/branches/py3k/Lib/test/curses_tests.py python/branches/py3k/Lib/test/pystone.py python/branches/py3k/Lib/test/re_tests.py python/branches/py3k/Lib/test/regrtest.py python/branches/py3k/Lib/test/test___future__.py python/branches/py3k/Lib/test/test_array.py python/branches/py3k/Lib/test/test_binhex.py python/branches/py3k/Lib/test/test_bz2.py python/branches/py3k/Lib/test/test_cmd.py python/branches/py3k/Lib/test/test_codecencodings_cn.py python/branches/py3k/Lib/test/test_codecencodings_hk.py python/branches/py3k/Lib/test/test_codecencodings_jp.py python/branches/py3k/Lib/test/test_codecencodings_kr.py python/branches/py3k/Lib/test/test_codecencodings_tw.py python/branches/py3k/Lib/test/test_codecmaps_cn.py python/branches/py3k/Lib/test/test_codecmaps_hk.py python/branches/py3k/Lib/test/test_codecmaps_jp.py python/branches/py3k/Lib/test/test_codecmaps_kr.py python/branches/py3k/Lib/test/test_codecmaps_tw.py python/branches/py3k/Lib/test/test_dbm.py python/branches/py3k/Lib/test/test_dbm_dumb.py python/branches/py3k/Lib/test/test_eof.py python/branches/py3k/Lib/test/test_errno.py python/branches/py3k/Lib/test/test_gzip.py python/branches/py3k/Lib/test/test_keywordonlyarg.py python/branches/py3k/Lib/test/test_logging.py python/branches/py3k/Lib/test/test_marshal.py python/branches/py3k/Lib/test/test_multibytecodec.py python/branches/py3k/Lib/test/test_multibytecodec_support.py python/branches/py3k/Lib/test/test_multiprocessing.py python/branches/py3k/Lib/test/test_popen.py python/branches/py3k/Lib/test/test_random.py python/branches/py3k/Lib/test/test_smtpnet.py python/branches/py3k/Lib/test/test_socket.py python/branches/py3k/Lib/test/test_tcl.py python/branches/py3k/Lib/test/test_urllib2_localnet.py python/branches/py3k/Lib/test/test_urllib2net.py python/branches/py3k/Lib/test/test_urllibnet.py python/branches/py3k/Lib/test/test_urlparse.py python/branches/py3k/Lib/test/test_userstring.py python/branches/py3k/Lib/test/test_with.py python/branches/py3k/Lib/test/test_xmlrpc_net.py python/branches/py3k/Lib/timeit.py python/branches/py3k/Lib/token.py python/branches/py3k/Lib/trace.py python/branches/py3k/Lib/uu.py python/branches/py3k/Lib/webbrowser.py python/branches/py3k/Python/makeopcodetargets.py python/branches/py3k/Tools/faqwiz/faqw.py python/branches/py3k/Tools/freeze/freeze.py python/branches/py3k/Tools/i18n/makelocalealias.py python/branches/py3k/Tools/i18n/msgfmt.py python/branches/py3k/Tools/i18n/pygettext.py python/branches/py3k/Tools/modulator/Tkextra.py python/branches/py3k/Tools/modulator/modulator.py python/branches/py3k/Tools/scripts/byteyears.py python/branches/py3k/Tools/scripts/checkappend.py python/branches/py3k/Tools/scripts/checkpyc.py python/branches/py3k/Tools/scripts/classfix.py python/branches/py3k/Tools/scripts/cleanfuture.py python/branches/py3k/Tools/scripts/combinerefs.py python/branches/py3k/Tools/scripts/copytime.py python/branches/py3k/Tools/scripts/crlf.py python/branches/py3k/Tools/scripts/cvsfiles.py python/branches/py3k/Tools/scripts/db2pickle.py python/branches/py3k/Tools/scripts/dutree.py python/branches/py3k/Tools/scripts/eptags.py python/branches/py3k/Tools/scripts/find_recursionlimit.py python/branches/py3k/Tools/scripts/finddiv.py python/branches/py3k/Tools/scripts/findlinksto.py python/branches/py3k/Tools/scripts/findnocoding.py python/branches/py3k/Tools/scripts/fixcid.py python/branches/py3k/Tools/scripts/fixdiv.py python/branches/py3k/Tools/scripts/fixheader.py python/branches/py3k/Tools/scripts/fixnotice.py python/branches/py3k/Tools/scripts/fixps.py python/branches/py3k/Tools/scripts/ftpmirror.py python/branches/py3k/Tools/scripts/google.py python/branches/py3k/Tools/scripts/gprof2html.py python/branches/py3k/Tools/scripts/h2py.py python/branches/py3k/Tools/scripts/ifdef.py python/branches/py3k/Tools/scripts/lfcr.py python/branches/py3k/Tools/scripts/linktree.py python/branches/py3k/Tools/scripts/lll.py python/branches/py3k/Tools/scripts/logmerge.py python/branches/py3k/Tools/scripts/md5sum.py python/branches/py3k/Tools/scripts/methfix.py python/branches/py3k/Tools/scripts/mkreal.py python/branches/py3k/Tools/scripts/ndiff.py python/branches/py3k/Tools/scripts/nm2def.py python/branches/py3k/Tools/scripts/objgraph.py python/branches/py3k/Tools/scripts/parseentities.py python/branches/py3k/Tools/scripts/pdeps.py python/branches/py3k/Tools/scripts/pickle2db.py python/branches/py3k/Tools/scripts/pindent.py python/branches/py3k/Tools/scripts/ptags.py python/branches/py3k/Tools/scripts/pysource.py python/branches/py3k/Tools/scripts/reindent-rst.py python/branches/py3k/Tools/scripts/reindent.py python/branches/py3k/Tools/scripts/rgrep.py python/branches/py3k/Tools/scripts/serve.py python/branches/py3k/Tools/scripts/suff.py python/branches/py3k/Tools/scripts/svneol.py python/branches/py3k/Tools/scripts/texi2html.py python/branches/py3k/Tools/scripts/treesync.py python/branches/py3k/Tools/scripts/untabify.py python/branches/py3k/Tools/scripts/which.py python/branches/py3k/Tools/scripts/xxci.py python/branches/py3k/Tools/ssl/get-remote-certificate.py python/branches/py3k/Tools/unicode/comparecodecs.py python/branches/py3k/Tools/webchecker/wcgui.py python/branches/py3k/Tools/webchecker/webchecker.py python/branches/py3k/Tools/webchecker/websucker.py python/branches/py3k/Tools/webchecker/wsgui.py Modified: python/branches/py3k/Demo/cgi/cgi1.py ============================================================================== --- python/branches/py3k/Demo/cgi/cgi1.py (original) +++ python/branches/py3k/Demo/cgi/cgi1.py Thu Mar 11 23:53:45 2010 @@ -1,4 +1,4 @@ -#!/usr/local/bin/python +#!/usr/bin/env python3 """CGI test 1 - check server setup.""" Modified: python/branches/py3k/Demo/cgi/cgi2.py ============================================================================== --- python/branches/py3k/Demo/cgi/cgi2.py (original) +++ python/branches/py3k/Demo/cgi/cgi2.py Thu Mar 11 23:53:45 2010 @@ -1,4 +1,4 @@ -#!/usr/local/bin/python +#!/usr/bin/env python3 """CGI test 2 - basic use of cgi module.""" Modified: python/branches/py3k/Demo/cgi/cgi3.py ============================================================================== --- python/branches/py3k/Demo/cgi/cgi3.py (original) +++ python/branches/py3k/Demo/cgi/cgi3.py Thu Mar 11 23:53:45 2010 @@ -1,4 +1,4 @@ -#!/usr/local/bin/python +#!/usr/bin/env python3 """CGI test 3 (persistent data).""" Modified: python/branches/py3k/Demo/comparisons/regextest.py ============================================================================== --- python/branches/py3k/Demo/comparisons/regextest.py (original) +++ python/branches/py3k/Demo/comparisons/regextest.py Thu Mar 11 23:53:45 2010 @@ -1,4 +1,4 @@ -#! /usr/bin/env python +#! /usr/bin/env python3 # 1) Regular Expressions Test # Modified: python/branches/py3k/Demo/comparisons/sortingtest.py ============================================================================== --- python/branches/py3k/Demo/comparisons/sortingtest.py (original) +++ python/branches/py3k/Demo/comparisons/sortingtest.py Thu Mar 11 23:53:45 2010 @@ -1,4 +1,4 @@ -#! /usr/bin/env python +#! /usr/bin/env python3 # 2) Sorting Test # Modified: python/branches/py3k/Demo/comparisons/systemtest.py ============================================================================== --- python/branches/py3k/Demo/comparisons/systemtest.py (original) +++ python/branches/py3k/Demo/comparisons/systemtest.py Thu Mar 11 23:53:45 2010 @@ -1,4 +1,4 @@ -#! /usr/bin/env python +#! /usr/bin/env python3 # 3) System Test # Modified: python/branches/py3k/Demo/curses/life.py ============================================================================== --- python/branches/py3k/Demo/curses/life.py (original) +++ python/branches/py3k/Demo/curses/life.py Thu Mar 11 23:53:45 2010 @@ -1,4 +1,4 @@ -#!/usr/bin/env python +#!/usr/bin/env python3 # life.py -- A curses-based version of Conway's Game of Life. # Contributed by AMK # Modified: python/branches/py3k/Demo/curses/ncurses.py ============================================================================== --- python/branches/py3k/Demo/curses/ncurses.py (original) +++ python/branches/py3k/Demo/curses/ncurses.py Thu Mar 11 23:53:45 2010 @@ -1,4 +1,4 @@ -#!/usr/bin/env python +#!/usr/bin/env python3 # # $Id$ # Modified: python/branches/py3k/Demo/curses/rain.py ============================================================================== --- python/branches/py3k/Demo/curses/rain.py (original) +++ python/branches/py3k/Demo/curses/rain.py Thu Mar 11 23:53:45 2010 @@ -1,4 +1,4 @@ -#!/usr/bin/env python +#!/usr/bin/env python3 # # $Id$ # Modified: python/branches/py3k/Demo/curses/repeat.py ============================================================================== --- python/branches/py3k/Demo/curses/repeat.py (original) +++ python/branches/py3k/Demo/curses/repeat.py Thu Mar 11 23:53:45 2010 @@ -1,4 +1,4 @@ -#! /usr/bin/env python +#! /usr/bin/env python3 """repeat [-i SECONDS] Modified: python/branches/py3k/Demo/curses/tclock.py ============================================================================== --- python/branches/py3k/Demo/curses/tclock.py (original) +++ python/branches/py3k/Demo/curses/tclock.py Thu Mar 11 23:53:45 2010 @@ -1,4 +1,4 @@ -#!/usr/bin/env python +#!/usr/bin/env python3 # # $Id$ # Modified: python/branches/py3k/Demo/distutils/test2to3/maintest.py ============================================================================== --- python/branches/py3k/Demo/distutils/test2to3/maintest.py (original) +++ python/branches/py3k/Demo/distutils/test2to3/maintest.py Thu Mar 11 23:53:45 2010 @@ -1,4 +1,4 @@ -#!/usr/bin/env python +#!/usr/bin/env python3 # The above line should get replaced with the path to the Python # interpreter; the block below should get 2to3-converted. Modified: python/branches/py3k/Demo/parser/test_parser.py ============================================================================== --- python/branches/py3k/Demo/parser/test_parser.py (original) +++ python/branches/py3k/Demo/parser/test_parser.py Thu Mar 11 23:53:45 2010 @@ -1,4 +1,4 @@ -#! /usr/bin/env python +#! /usr/bin/env python3 # (Force the script to use the latest build.) # # test_parser.py Modified: python/branches/py3k/Demo/pdist/RCSProxy.py ============================================================================== --- python/branches/py3k/Demo/pdist/RCSProxy.py (original) +++ python/branches/py3k/Demo/pdist/RCSProxy.py Thu Mar 11 23:53:45 2010 @@ -1,4 +1,4 @@ -#! /usr/bin/env python +#! /usr/bin/env python3 """RCS Proxy. Modified: python/branches/py3k/Demo/pdist/makechangelog.py ============================================================================== --- python/branches/py3k/Demo/pdist/makechangelog.py (original) +++ python/branches/py3k/Demo/pdist/makechangelog.py Thu Mar 11 23:53:45 2010 @@ -1,4 +1,4 @@ -#! /usr/bin/env python +#! /usr/bin/env python3 """Turn a pile of RCS log output into ChangeLog file entries. Modified: python/branches/py3k/Demo/pdist/rcvs.py ============================================================================== --- python/branches/py3k/Demo/pdist/rcvs.py (original) +++ python/branches/py3k/Demo/pdist/rcvs.py Thu Mar 11 23:53:45 2010 @@ -1,4 +1,4 @@ -#! /usr/bin/env python +#! /usr/bin/env python3 """Remote CVS -- command line interface""" Modified: python/branches/py3k/Demo/pdist/rrcs.py ============================================================================== --- python/branches/py3k/Demo/pdist/rrcs.py (original) +++ python/branches/py3k/Demo/pdist/rrcs.py Thu Mar 11 23:53:45 2010 @@ -1,4 +1,4 @@ -#! /usr/bin/env python +#! /usr/bin/env python3 "Remote RCS -- command line interface" Modified: python/branches/py3k/Demo/pysvr/pysvr.py ============================================================================== --- python/branches/py3k/Demo/pysvr/pysvr.py (original) +++ python/branches/py3k/Demo/pysvr/pysvr.py Thu Mar 11 23:53:45 2010 @@ -1,4 +1,4 @@ -#! /usr/bin/env python +#! /usr/bin/env python3 """A multi-threaded telnet-like server that gives a Python prompt. Modified: python/branches/py3k/Demo/scripts/beer.py ============================================================================== --- python/branches/py3k/Demo/scripts/beer.py (original) +++ python/branches/py3k/Demo/scripts/beer.py Thu Mar 11 23:53:45 2010 @@ -1,4 +1,4 @@ -#! /usr/bin/env python +#! /usr/bin/env python3 # By GvR, demystified after a version by Fredrik Lundh. Modified: python/branches/py3k/Demo/scripts/eqfix.py ============================================================================== --- python/branches/py3k/Demo/scripts/eqfix.py (original) +++ python/branches/py3k/Demo/scripts/eqfix.py Thu Mar 11 23:53:45 2010 @@ -1,4 +1,4 @@ -#! /usr/bin/env python +#! /usr/bin/env python3 # Fix Python source files to use the new equality test operator, i.e., # if x = y: ... Modified: python/branches/py3k/Demo/scripts/fact.py ============================================================================== --- python/branches/py3k/Demo/scripts/fact.py (original) +++ python/branches/py3k/Demo/scripts/fact.py Thu Mar 11 23:53:45 2010 @@ -1,4 +1,4 @@ -#! /usr/bin/env python +#! /usr/bin/env python3 # Factorize numbers. # The algorithm is not efficient, but easy to understand. Modified: python/branches/py3k/Demo/scripts/find-uname.py ============================================================================== --- python/branches/py3k/Demo/scripts/find-uname.py (original) +++ python/branches/py3k/Demo/scripts/find-uname.py Thu Mar 11 23:53:45 2010 @@ -1,4 +1,4 @@ -#!/usr/bin/env python +#!/usr/bin/env python3 """ For each argument on the command line, look for it in the set of all Unicode Modified: python/branches/py3k/Demo/scripts/from.py ============================================================================== --- python/branches/py3k/Demo/scripts/from.py (original) +++ python/branches/py3k/Demo/scripts/from.py Thu Mar 11 23:53:45 2010 @@ -1,4 +1,4 @@ -#! /usr/bin/env python +#! /usr/bin/env python3 # Print From and Subject of messages in $MAIL. # Extension to multiple mailboxes and other bells & whistles are left Modified: python/branches/py3k/Demo/scripts/lpwatch.py ============================================================================== --- python/branches/py3k/Demo/scripts/lpwatch.py (original) +++ python/branches/py3k/Demo/scripts/lpwatch.py Thu Mar 11 23:53:45 2010 @@ -1,4 +1,4 @@ -#! /usr/bin/env python +#! /usr/bin/env python3 # Watch line printer queue(s). # Intended for BSD 4.3 lpq. Modified: python/branches/py3k/Demo/scripts/makedir.py ============================================================================== --- python/branches/py3k/Demo/scripts/makedir.py (original) +++ python/branches/py3k/Demo/scripts/makedir.py Thu Mar 11 23:53:45 2010 @@ -1,4 +1,4 @@ -#! /usr/bin/env python +#! /usr/bin/env python3 # Like mkdir, but also make intermediate directories if necessary. # It is not an error if the given directory already exists (as long Modified: python/branches/py3k/Demo/scripts/markov.py ============================================================================== --- python/branches/py3k/Demo/scripts/markov.py (original) +++ python/branches/py3k/Demo/scripts/markov.py Thu Mar 11 23:53:45 2010 @@ -1,4 +1,4 @@ -#! /usr/bin/env python +#! /usr/bin/env python3 class Markov: def __init__(self, histsize, choice): Modified: python/branches/py3k/Demo/scripts/mboxconvert.py ============================================================================== --- python/branches/py3k/Demo/scripts/mboxconvert.py (original) +++ python/branches/py3k/Demo/scripts/mboxconvert.py Thu Mar 11 23:53:45 2010 @@ -1,4 +1,4 @@ -#! /usr/bin/env python +#! /usr/bin/env python3 # Convert MH directories (1 message per file) or MMDF mailboxes (4x^A # delimited) to unix mailbox (From ... delimited) on stdout. Modified: python/branches/py3k/Demo/scripts/morse.py ============================================================================== --- python/branches/py3k/Demo/scripts/morse.py (original) +++ python/branches/py3k/Demo/scripts/morse.py Thu Mar 11 23:53:45 2010 @@ -1,4 +1,4 @@ -#! /usr/bin/env python +#! /usr/bin/env python3 # DAH should be three DOTs. # Space between DOTs and DAHs should be one DOT. Modified: python/branches/py3k/Demo/scripts/newslist.py ============================================================================== --- python/branches/py3k/Demo/scripts/newslist.py (original) +++ python/branches/py3k/Demo/scripts/newslist.py Thu Mar 11 23:53:45 2010 @@ -1,4 +1,4 @@ -#! /usr/bin/env python +#! /usr/bin/env python3 ####################################################################### # Newslist $Revision$ # Modified: python/branches/py3k/Demo/scripts/pi.py ============================================================================== --- python/branches/py3k/Demo/scripts/pi.py (original) +++ python/branches/py3k/Demo/scripts/pi.py Thu Mar 11 23:53:45 2010 @@ -1,4 +1,4 @@ -#! /usr/bin/env python +#! /usr/bin/env python3 # Print digits of pi forever. # Modified: python/branches/py3k/Demo/scripts/pp.py ============================================================================== --- python/branches/py3k/Demo/scripts/pp.py (original) +++ python/branches/py3k/Demo/scripts/pp.py Thu Mar 11 23:53:45 2010 @@ -1,4 +1,4 @@ -#! /usr/bin/env python +#! /usr/bin/env python3 # Emulate some Perl command line options. # Usage: pp [-a] [-c] [-d] [-e scriptline] [-F fieldsep] [-n] [-p] [file] ... Modified: python/branches/py3k/Demo/scripts/primes.py ============================================================================== --- python/branches/py3k/Demo/scripts/primes.py (original) +++ python/branches/py3k/Demo/scripts/primes.py Thu Mar 11 23:53:45 2010 @@ -1,4 +1,4 @@ -#! /usr/bin/env python +#! /usr/bin/env python3 # Print prime numbers in a given range Modified: python/branches/py3k/Demo/scripts/queens.py ============================================================================== --- python/branches/py3k/Demo/scripts/queens.py (original) +++ python/branches/py3k/Demo/scripts/queens.py Thu Mar 11 23:53:45 2010 @@ -1,4 +1,4 @@ -#! /usr/bin/env python +#! /usr/bin/env python3 """N queens problem. Modified: python/branches/py3k/Demo/scripts/script.py ============================================================================== --- python/branches/py3k/Demo/scripts/script.py (original) +++ python/branches/py3k/Demo/scripts/script.py Thu Mar 11 23:53:45 2010 @@ -1,4 +1,4 @@ -#! /usr/bin/env python +#! /usr/bin/env python3 # script.py -- Make typescript of terminal session. # Usage: Modified: python/branches/py3k/Demo/scripts/unbirthday.py ============================================================================== --- python/branches/py3k/Demo/scripts/unbirthday.py (original) +++ python/branches/py3k/Demo/scripts/unbirthday.py Thu Mar 11 23:53:45 2010 @@ -1,4 +1,4 @@ -#! /usr/bin/env python +#! /usr/bin/env python3 # Calculate your unbirthday count (see Alice in Wonderland). # This is defined as the number of days from your birth until today Modified: python/branches/py3k/Demo/scripts/update.py ============================================================================== --- python/branches/py3k/Demo/scripts/update.py (original) +++ python/branches/py3k/Demo/scripts/update.py Thu Mar 11 23:53:45 2010 @@ -1,4 +1,4 @@ -#! /usr/bin/env python +#! /usr/bin/env python3 # Update a bunch of files according to a script. # The input file contains lines of the form ::, Modified: python/branches/py3k/Demo/sockets/echosvr.py ============================================================================== --- python/branches/py3k/Demo/sockets/echosvr.py (original) +++ python/branches/py3k/Demo/sockets/echosvr.py Thu Mar 11 23:53:45 2010 @@ -1,4 +1,4 @@ -#! /usr/bin/env python +#! /usr/bin/env python3 # Python implementation of an 'echo' tcp server: echo all data it receives. # Modified: python/branches/py3k/Demo/sockets/finger.py ============================================================================== --- python/branches/py3k/Demo/sockets/finger.py (original) +++ python/branches/py3k/Demo/sockets/finger.py Thu Mar 11 23:53:45 2010 @@ -1,4 +1,4 @@ -#! /usr/bin/env python +#! /usr/bin/env python3 # Python interface to the Internet finger daemon. # Modified: python/branches/py3k/Demo/sockets/gopher.py ============================================================================== --- python/branches/py3k/Demo/sockets/gopher.py (original) +++ python/branches/py3k/Demo/sockets/gopher.py Thu Mar 11 23:53:45 2010 @@ -1,4 +1,4 @@ -#! /usr/bin/env python +#! /usr/bin/env python3 # A simple gopher client. # Modified: python/branches/py3k/Demo/sockets/mcast.py ============================================================================== --- python/branches/py3k/Demo/sockets/mcast.py (original) +++ python/branches/py3k/Demo/sockets/mcast.py Thu Mar 11 23:53:45 2010 @@ -1,4 +1,4 @@ -#!/usr/bin/env python +#!/usr/bin/env python3 # # Send/receive UDP multicast packets. # Requires that your OS kernel supports IP multicast. Modified: python/branches/py3k/Demo/sockets/rpython.py ============================================================================== --- python/branches/py3k/Demo/sockets/rpython.py (original) +++ python/branches/py3k/Demo/sockets/rpython.py Thu Mar 11 23:53:45 2010 @@ -1,4 +1,4 @@ -#! /usr/bin/env python +#! /usr/bin/env python3 # Remote python client. # Execute Python commands remotely and send output back. Modified: python/branches/py3k/Demo/sockets/rpythond.py ============================================================================== --- python/branches/py3k/Demo/sockets/rpythond.py (original) +++ python/branches/py3k/Demo/sockets/rpythond.py Thu Mar 11 23:53:45 2010 @@ -1,4 +1,4 @@ -#! /usr/bin/env python +#! /usr/bin/env python3 # Remote python server. # Execute Python commands remotely and send output back. Modified: python/branches/py3k/Demo/sockets/telnet.py ============================================================================== --- python/branches/py3k/Demo/sockets/telnet.py (original) +++ python/branches/py3k/Demo/sockets/telnet.py Thu Mar 11 23:53:45 2010 @@ -1,4 +1,4 @@ -#! /usr/bin/env python +#! /usr/bin/env python3 # Minimal interface to the Internet telnet protocol. # Modified: python/branches/py3k/Demo/sockets/throughput.py ============================================================================== --- python/branches/py3k/Demo/sockets/throughput.py (original) +++ python/branches/py3k/Demo/sockets/throughput.py Thu Mar 11 23:53:45 2010 @@ -1,4 +1,4 @@ -#! /usr/bin/env python +#! /usr/bin/env python3 # Test network throughput. # Modified: python/branches/py3k/Demo/sockets/udpecho.py ============================================================================== --- python/branches/py3k/Demo/sockets/udpecho.py (original) +++ python/branches/py3k/Demo/sockets/udpecho.py Thu Mar 11 23:53:45 2010 @@ -1,4 +1,4 @@ -#! /usr/bin/env python +#! /usr/bin/env python3 # Client and server for udp (datagram) echo. # Modified: python/branches/py3k/Demo/tkinter/guido/MimeViewer.py ============================================================================== --- python/branches/py3k/Demo/tkinter/guido/MimeViewer.py (original) +++ python/branches/py3k/Demo/tkinter/guido/MimeViewer.py Thu Mar 11 23:53:45 2010 @@ -1,4 +1,4 @@ -#! /usr/bin/env python +#! /usr/bin/env python3 # View a single MIME multipart message. # Display each part as a box. Modified: python/branches/py3k/Demo/tkinter/guido/canvasevents.py ============================================================================== --- python/branches/py3k/Demo/tkinter/guido/canvasevents.py (original) +++ python/branches/py3k/Demo/tkinter/guido/canvasevents.py Thu Mar 11 23:53:45 2010 @@ -1,4 +1,4 @@ -#! /usr/bin/env python +#! /usr/bin/env python3 from tkinter import * from Canvas import Oval, Group, CanvasText Modified: python/branches/py3k/Demo/tkinter/guido/dialog.py ============================================================================== --- python/branches/py3k/Demo/tkinter/guido/dialog.py (original) +++ python/branches/py3k/Demo/tkinter/guido/dialog.py Thu Mar 11 23:53:45 2010 @@ -1,4 +1,4 @@ -#! /usr/bin/env python +#! /usr/bin/env python3 # A Python function that generates dialog boxes with a text message, # optional bitmap, and any number of buttons. Modified: python/branches/py3k/Demo/tkinter/guido/electrons.py ============================================================================== --- python/branches/py3k/Demo/tkinter/guido/electrons.py (original) +++ python/branches/py3k/Demo/tkinter/guido/electrons.py Thu Mar 11 23:53:45 2010 @@ -1,4 +1,4 @@ -#! /usr/bin/env python +#! /usr/bin/env python3 # Simulate "electrons" migrating across the screen. # An optional bitmap file in can be in the background. Modified: python/branches/py3k/Demo/tkinter/guido/kill.py ============================================================================== --- python/branches/py3k/Demo/tkinter/guido/kill.py (original) +++ python/branches/py3k/Demo/tkinter/guido/kill.py Thu Mar 11 23:53:45 2010 @@ -1,4 +1,4 @@ -#! /usr/bin/env python +#! /usr/bin/env python3 # Tkinter interface to Linux `kill' command. from tkinter import * Modified: python/branches/py3k/Demo/tkinter/guido/mbox.py ============================================================================== --- python/branches/py3k/Demo/tkinter/guido/mbox.py (original) +++ python/branches/py3k/Demo/tkinter/guido/mbox.py Thu Mar 11 23:53:45 2010 @@ -1,4 +1,4 @@ -#! /usr/bin/env python +#! /usr/bin/env python3 # Scan MH folder, display results in window Modified: python/branches/py3k/Demo/tkinter/guido/newmenubardemo.py ============================================================================== --- python/branches/py3k/Demo/tkinter/guido/newmenubardemo.py (original) +++ python/branches/py3k/Demo/tkinter/guido/newmenubardemo.py Thu Mar 11 23:53:45 2010 @@ -1,4 +1,4 @@ -#! /usr/bin/env python +#! /usr/bin/env python3 """Play with the new Tk 8.0 toplevel menu option.""" Modified: python/branches/py3k/Demo/tkinter/guido/rmt.py ============================================================================== --- python/branches/py3k/Demo/tkinter/guido/rmt.py (original) +++ python/branches/py3k/Demo/tkinter/guido/rmt.py Thu Mar 11 23:53:45 2010 @@ -1,4 +1,4 @@ -#! /usr/bin/env python +#! /usr/bin/env python3 # A Python program implementing rmt, an application for remotely # controlling other Tk applications. Modified: python/branches/py3k/Demo/tkinter/guido/solitaire.py ============================================================================== --- python/branches/py3k/Demo/tkinter/guido/solitaire.py (original) +++ python/branches/py3k/Demo/tkinter/guido/solitaire.py Thu Mar 11 23:53:45 2010 @@ -1,4 +1,4 @@ -#! /usr/bin/env python +#! /usr/bin/env python3 """Solitaire game, much like the one that comes with MS Windows. Modified: python/branches/py3k/Demo/tkinter/guido/sortvisu.py ============================================================================== --- python/branches/py3k/Demo/tkinter/guido/sortvisu.py (original) +++ python/branches/py3k/Demo/tkinter/guido/sortvisu.py Thu Mar 11 23:53:45 2010 @@ -1,4 +1,4 @@ -#! /usr/bin/env python +#! /usr/bin/env python3 """Sorting algorithms visualizer using Tkinter. Modified: python/branches/py3k/Demo/tkinter/guido/svkill.py ============================================================================== --- python/branches/py3k/Demo/tkinter/guido/svkill.py (original) +++ python/branches/py3k/Demo/tkinter/guido/svkill.py Thu Mar 11 23:53:45 2010 @@ -1,4 +1,4 @@ -#! /usr/bin/env python +#! /usr/bin/env python3 # Tkinter interface to SYSV `ps' and `kill' commands. Modified: python/branches/py3k/Demo/tkinter/guido/tkman.py ============================================================================== --- python/branches/py3k/Demo/tkinter/guido/tkman.py (original) +++ python/branches/py3k/Demo/tkinter/guido/tkman.py Thu Mar 11 23:53:45 2010 @@ -1,4 +1,4 @@ -#! /usr/bin/env python +#! /usr/bin/env python3 # Tk man page browser -- currently only shows the Tcl/Tk man pages Modified: python/branches/py3k/Demo/turtle/tdemo_I_dontlike_tiltdemo.py ============================================================================== --- python/branches/py3k/Demo/turtle/tdemo_I_dontlike_tiltdemo.py (original) +++ python/branches/py3k/Demo/turtle/tdemo_I_dontlike_tiltdemo.py Thu Mar 11 23:53:45 2010 @@ -1,4 +1,4 @@ -#!/usr/bin/python +#!/usr/bin/env python3 """ turtle-example-suite: tdemo-I_dont_like_tiltdemo.py Modified: python/branches/py3k/Demo/turtle/tdemo_bytedesign.py ============================================================================== --- python/branches/py3k/Demo/turtle/tdemo_bytedesign.py (original) +++ python/branches/py3k/Demo/turtle/tdemo_bytedesign.py Thu Mar 11 23:53:45 2010 @@ -1,4 +1,4 @@ -#!/usr/bin/python +#!/usr/bin/env python3 """ turtle-example-suite: tdemo_bytedesign.py Modified: python/branches/py3k/Demo/turtle/tdemo_clock.py ============================================================================== --- python/branches/py3k/Demo/turtle/tdemo_clock.py (original) +++ python/branches/py3k/Demo/turtle/tdemo_clock.py Thu Mar 11 23:53:45 2010 @@ -1,4 +1,4 @@ -#!/usr/bin/python +#!/usr/bin/env python3 # -*- coding: cp1252 -*- """ turtle-example-suite: Modified: python/branches/py3k/Demo/turtle/tdemo_forest.py ============================================================================== --- python/branches/py3k/Demo/turtle/tdemo_forest.py (original) +++ python/branches/py3k/Demo/turtle/tdemo_forest.py Thu Mar 11 23:53:45 2010 @@ -1,4 +1,4 @@ -#!/usr/bin/python +#!/usr/bin/env python3 """ turtlegraphics-example-suite: tdemo_forest.py Modified: python/branches/py3k/Demo/turtle/tdemo_fractalcurves.py ============================================================================== --- python/branches/py3k/Demo/turtle/tdemo_fractalcurves.py (original) +++ python/branches/py3k/Demo/turtle/tdemo_fractalcurves.py Thu Mar 11 23:53:45 2010 @@ -1,4 +1,4 @@ -#!/usr/bin/python +#!/usr/bin/env python3 """ turtle-example-suite: tdemo_fractalCurves.py Modified: python/branches/py3k/Demo/turtle/tdemo_lindenmayer_indian.py ============================================================================== --- python/branches/py3k/Demo/turtle/tdemo_lindenmayer_indian.py (original) +++ python/branches/py3k/Demo/turtle/tdemo_lindenmayer_indian.py Thu Mar 11 23:53:45 2010 @@ -1,4 +1,4 @@ -#!/usr/bin/python +#!/usr/bin/env python3 """ turtle-example-suite: xtx_lindenmayer_indian.py Modified: python/branches/py3k/Demo/turtle/tdemo_minimal_hanoi.py ============================================================================== --- python/branches/py3k/Demo/turtle/tdemo_minimal_hanoi.py (original) +++ python/branches/py3k/Demo/turtle/tdemo_minimal_hanoi.py Thu Mar 11 23:53:45 2010 @@ -1,4 +1,4 @@ -#!/usr/bin/python +#!/usr/bin/env python3 """ turtle-example-suite: tdemo_minimal_hanoi.py Modified: python/branches/py3k/Demo/turtle/tdemo_paint.py ============================================================================== --- python/branches/py3k/Demo/turtle/tdemo_paint.py (original) +++ python/branches/py3k/Demo/turtle/tdemo_paint.py Thu Mar 11 23:53:45 2010 @@ -1,4 +1,4 @@ -#!/usr/bin/python +#!/usr/bin/env python3 """ turtle-example-suite: tdemo_paint.py Modified: python/branches/py3k/Demo/turtle/tdemo_peace.py ============================================================================== --- python/branches/py3k/Demo/turtle/tdemo_peace.py (original) +++ python/branches/py3k/Demo/turtle/tdemo_peace.py Thu Mar 11 23:53:45 2010 @@ -1,4 +1,4 @@ -#!/usr/bin/python +#!/usr/bin/env python3 """ turtle-example-suite: tdemo_peace.py Modified: python/branches/py3k/Demo/turtle/tdemo_penrose.py ============================================================================== --- python/branches/py3k/Demo/turtle/tdemo_penrose.py (original) +++ python/branches/py3k/Demo/turtle/tdemo_penrose.py Thu Mar 11 23:53:45 2010 @@ -1,4 +1,4 @@ -#!/usr/bin/python +#!/usr/bin/env python3 """ xturtle-example-suite: xtx_kites_and_darts.py Modified: python/branches/py3k/Demo/turtle/tdemo_planet_and_moon.py ============================================================================== --- python/branches/py3k/Demo/turtle/tdemo_planet_and_moon.py (original) +++ python/branches/py3k/Demo/turtle/tdemo_planet_and_moon.py Thu Mar 11 23:53:45 2010 @@ -1,4 +1,4 @@ -#!/usr/bin/python +#!/usr/bin/env python3 """ turtle-example-suite: tdemo_planets_and_moon.py Modified: python/branches/py3k/Demo/turtle/tdemo_tree.py ============================================================================== --- python/branches/py3k/Demo/turtle/tdemo_tree.py (original) +++ python/branches/py3k/Demo/turtle/tdemo_tree.py Thu Mar 11 23:53:45 2010 @@ -1,4 +1,4 @@ -#!/usr/bin/python +#!/usr/bin/env python3 """ turtle-example-suite: tdemo_tree.py Modified: python/branches/py3k/Demo/turtle/tdemo_yinyang.py ============================================================================== --- python/branches/py3k/Demo/turtle/tdemo_yinyang.py (original) +++ python/branches/py3k/Demo/turtle/tdemo_yinyang.py Thu Mar 11 23:53:45 2010 @@ -1,4 +1,4 @@ -#!/usr/bin/python +#!/usr/bin/env python3 """ turtle-example-suite: tdemo_yinyang.py Modified: python/branches/py3k/Demo/turtle/turtleDemo.py ============================================================================== --- python/branches/py3k/Demo/turtle/turtleDemo.py (original) +++ python/branches/py3k/Demo/turtle/turtleDemo.py Thu Mar 11 23:53:45 2010 @@ -1,4 +1,4 @@ -#!/usr/bin/python +#!/usr/bin/env python3 import sys import os Modified: python/branches/py3k/Demo/turtle/turtledemo_two_canvases.py ============================================================================== --- python/branches/py3k/Demo/turtle/turtledemo_two_canvases.py (original) +++ python/branches/py3k/Demo/turtle/turtledemo_two_canvases.py Thu Mar 11 23:53:45 2010 @@ -1,4 +1,4 @@ -#!/usr/bin/python +#!/usr/bin/env python3 ## DEMONSTRATES USE OF 2 CANVASES, SO CANNOT BE RUN IN DEMOVIEWER! """turtle example: Using TurtleScreen and RawTurtle for drawing on two distinct canvases. Modified: python/branches/py3k/Demo/zlib/minigzip.py ============================================================================== --- python/branches/py3k/Demo/zlib/minigzip.py (original) +++ python/branches/py3k/Demo/zlib/minigzip.py Thu Mar 11 23:53:45 2010 @@ -1,4 +1,4 @@ -#!/usr/bin/env python +#!/usr/bin/env python3 # Demo program for zlib; it compresses or decompresses files, but *doesn't* # delete the original. This doesn't support all of gzip's options. # Modified: python/branches/py3k/Demo/zlib/zlibdemo.py ============================================================================== --- python/branches/py3k/Demo/zlib/zlibdemo.py (original) +++ python/branches/py3k/Demo/zlib/zlibdemo.py Thu Mar 11 23:53:45 2010 @@ -1,4 +1,4 @@ -#!/usr/bin/env python +#!/usr/bin/env python3 # Takes an optional filename, defaulting to this file itself. # Reads the file and compresses the content using level 1 and level 9 Modified: python/branches/py3k/Doc/includes/email-alternative.py ============================================================================== --- python/branches/py3k/Doc/includes/email-alternative.py (original) +++ python/branches/py3k/Doc/includes/email-alternative.py Thu Mar 11 23:53:45 2010 @@ -1,4 +1,4 @@ -#! /usr/bin/python +#!/usr/bin/env python3 import smtplib Modified: python/branches/py3k/Doc/includes/email-dir.py ============================================================================== --- python/branches/py3k/Doc/includes/email-dir.py (original) +++ python/branches/py3k/Doc/includes/email-dir.py Thu Mar 11 23:53:45 2010 @@ -1,4 +1,4 @@ -#!/usr/bin/env python +#!/usr/bin/env python3 """Send the contents of a directory as a MIME message.""" Modified: python/branches/py3k/Doc/includes/email-unpack.py ============================================================================== --- python/branches/py3k/Doc/includes/email-unpack.py (original) +++ python/branches/py3k/Doc/includes/email-unpack.py Thu Mar 11 23:53:45 2010 @@ -1,4 +1,4 @@ -#!/usr/bin/env python +#!/usr/bin/env python3 """Unpack a MIME message into a directory of files.""" Modified: python/branches/py3k/Doc/tools/rstlint.py ============================================================================== --- python/branches/py3k/Doc/tools/rstlint.py (original) +++ python/branches/py3k/Doc/tools/rstlint.py Thu Mar 11 23:53:45 2010 @@ -1,4 +1,4 @@ -#!/usr/bin/env python +#!/usr/bin/env python3 # -*- coding: utf-8 -*- # Check for stylistic and formal issues in .rst and .py Modified: python/branches/py3k/Lib/base64.py ============================================================================== --- python/branches/py3k/Lib/base64.py (original) +++ python/branches/py3k/Lib/base64.py Thu Mar 11 23:53:45 2010 @@ -1,4 +1,4 @@ -#! /usr/bin/env python +#! /usr/bin/env python3 """RFC 3548: Base16, Base32, Base64 Data Encodings""" Modified: python/branches/py3k/Lib/cProfile.py ============================================================================== --- python/branches/py3k/Lib/cProfile.py (original) +++ python/branches/py3k/Lib/cProfile.py Thu Mar 11 23:53:45 2010 @@ -1,4 +1,4 @@ -#! /usr/bin/env python +#! /usr/bin/env python3 """Python interface for the 'lsprof' profiler. Compatible with the 'profile' module. Modified: python/branches/py3k/Lib/difflib.py ============================================================================== --- python/branches/py3k/Lib/difflib.py (original) +++ python/branches/py3k/Lib/difflib.py Thu Mar 11 23:53:45 2010 @@ -1,4 +1,4 @@ -#! /usr/bin/env python +#! /usr/bin/env python3 """ Module difflib -- helpers for computing deltas between objects. Modified: python/branches/py3k/Lib/http/cookies.py ============================================================================== --- python/branches/py3k/Lib/http/cookies.py (original) +++ python/branches/py3k/Lib/http/cookies.py Thu Mar 11 23:53:45 2010 @@ -1,4 +1,4 @@ -#!/usr/bin/env python +#!/usr/bin/env python3 # #### Modified: python/branches/py3k/Lib/idlelib/PyShell.py ============================================================================== --- python/branches/py3k/Lib/idlelib/PyShell.py (original) +++ python/branches/py3k/Lib/idlelib/PyShell.py Thu Mar 11 23:53:45 2010 @@ -1,4 +1,4 @@ -#! /usr/bin/env python +#! /usr/bin/env python3 import os import os.path Modified: python/branches/py3k/Lib/keyword.py ============================================================================== --- python/branches/py3k/Lib/keyword.py (original) +++ python/branches/py3k/Lib/keyword.py Thu Mar 11 23:53:45 2010 @@ -1,4 +1,4 @@ -#! /usr/bin/env python +#! /usr/bin/env python3 """Keywords (from "graminit.c") Modified: python/branches/py3k/Lib/lib2to3/pgen2/token.py ============================================================================== --- python/branches/py3k/Lib/lib2to3/pgen2/token.py (original) +++ python/branches/py3k/Lib/lib2to3/pgen2/token.py Thu Mar 11 23:53:45 2010 @@ -1,4 +1,4 @@ -#! /usr/bin/env python +#! /usr/bin/env python3 """Token constants (from "token.h").""" Modified: python/branches/py3k/Lib/lib2to3/tests/pytree_idempotency.py ============================================================================== --- python/branches/py3k/Lib/lib2to3/tests/pytree_idempotency.py (original) +++ python/branches/py3k/Lib/lib2to3/tests/pytree_idempotency.py Thu Mar 11 23:53:45 2010 @@ -1,4 +1,4 @@ -#!/usr/bin/env python +#!/usr/bin/env python3 # Copyright 2006 Google, Inc. All Rights Reserved. # Licensed to PSF under a Contributor Agreement. Modified: python/branches/py3k/Lib/mailbox.py ============================================================================== --- python/branches/py3k/Lib/mailbox.py (original) +++ python/branches/py3k/Lib/mailbox.py Thu Mar 11 23:53:45 2010 @@ -1,4 +1,4 @@ -#! /usr/bin/env python +#! /usr/bin/env python3 """Read/write support for Maildir, mbox, MH, Babyl, and MMDF mailboxes.""" Modified: python/branches/py3k/Lib/pdb.py ============================================================================== --- python/branches/py3k/Lib/pdb.py (original) +++ python/branches/py3k/Lib/pdb.py Thu Mar 11 23:53:45 2010 @@ -1,4 +1,4 @@ -#! /usr/bin/env python +#! /usr/bin/env python3 """A Python debugger.""" Modified: python/branches/py3k/Lib/platform.py ============================================================================== --- python/branches/py3k/Lib/platform.py (original) +++ python/branches/py3k/Lib/platform.py Thu Mar 11 23:53:45 2010 @@ -1,4 +1,4 @@ -#!/usr/bin/env python +#!/usr/bin/env python3 """ This module tries to retrieve as much platform-identifying data as possible. It makes this information available via function APIs. Modified: python/branches/py3k/Lib/profile.py ============================================================================== --- python/branches/py3k/Lib/profile.py (original) +++ python/branches/py3k/Lib/profile.py Thu Mar 11 23:53:45 2010 @@ -1,4 +1,4 @@ -#! /usr/bin/env python +#! /usr/bin/env python3 # # Class for profiling python code. rev 1.0 6/2/94 # Modified: python/branches/py3k/Lib/pydoc.py ============================================================================== --- python/branches/py3k/Lib/pydoc.py (original) +++ python/branches/py3k/Lib/pydoc.py Thu Mar 11 23:53:45 2010 @@ -1,4 +1,4 @@ -#!/usr/bin/env python +#!/usr/bin/env python3 # -*- coding: latin-1 -*- """Generate Python documentation in HTML or text for interactive use. Modified: python/branches/py3k/Lib/quopri.py ============================================================================== --- python/branches/py3k/Lib/quopri.py (original) +++ python/branches/py3k/Lib/quopri.py Thu Mar 11 23:53:45 2010 @@ -1,4 +1,4 @@ -#! /usr/bin/env python +#! /usr/bin/env python3 """Conversions to/from quoted-printable transport encoding as per RFC 1521.""" Modified: python/branches/py3k/Lib/smtpd.py ============================================================================== --- python/branches/py3k/Lib/smtpd.py (original) +++ python/branches/py3k/Lib/smtpd.py Thu Mar 11 23:53:45 2010 @@ -1,4 +1,4 @@ -#! /usr/bin/env python +#! /usr/bin/env python3 """An RFC 2821 smtp proxy. Usage: %(program)s [options] [localhost:localport [remotehost:remoteport]] Modified: python/branches/py3k/Lib/smtplib.py ============================================================================== --- python/branches/py3k/Lib/smtplib.py (original) +++ python/branches/py3k/Lib/smtplib.py Thu Mar 11 23:53:45 2010 @@ -1,4 +1,4 @@ -#! /usr/bin/env python +#! /usr/bin/env python3 '''SMTP/ESMTP client class. Modified: python/branches/py3k/Lib/symbol.py ============================================================================== --- python/branches/py3k/Lib/symbol.py (original) +++ python/branches/py3k/Lib/symbol.py Thu Mar 11 23:53:45 2010 @@ -1,4 +1,4 @@ -#! /usr/bin/env python +#! /usr/bin/env python3 """Non-terminal symbols of Python grammar (from "graminit.h").""" Modified: python/branches/py3k/Lib/tabnanny.py ============================================================================== --- python/branches/py3k/Lib/tabnanny.py (original) +++ python/branches/py3k/Lib/tabnanny.py Thu Mar 11 23:53:45 2010 @@ -1,4 +1,4 @@ -#! /usr/bin/env python +#! /usr/bin/env python3 """The Tab Nanny despises ambiguous indentation. She knows no mercy. Modified: python/branches/py3k/Lib/tarfile.py ============================================================================== --- python/branches/py3k/Lib/tarfile.py (original) +++ python/branches/py3k/Lib/tarfile.py Thu Mar 11 23:53:45 2010 @@ -1,4 +1,4 @@ -#!/usr/bin/env python +#!/usr/bin/env python3 #------------------------------------------------------------------- # tarfile.py #------------------------------------------------------------------- Modified: python/branches/py3k/Lib/test/crashers/recursive_call.py ============================================================================== --- python/branches/py3k/Lib/test/crashers/recursive_call.py (original) +++ python/branches/py3k/Lib/test/crashers/recursive_call.py Thu Mar 11 23:53:45 2010 @@ -1,4 +1,4 @@ -#!/usr/bin/env python +#!/usr/bin/env python3 # No bug report AFAIK, mail on python-dev on 2006-01-10 Modified: python/branches/py3k/Lib/test/curses_tests.py ============================================================================== --- python/branches/py3k/Lib/test/curses_tests.py (original) +++ python/branches/py3k/Lib/test/curses_tests.py Thu Mar 11 23:53:45 2010 @@ -1,4 +1,4 @@ -#!/usr/bin/env python +#!/usr/bin/env python3 # # $Id: ncurses.py 36559 2004-07-18 05:56:09Z tim_one $ # Modified: python/branches/py3k/Lib/test/pystone.py ============================================================================== --- python/branches/py3k/Lib/test/pystone.py (original) +++ python/branches/py3k/Lib/test/pystone.py Thu Mar 11 23:53:45 2010 @@ -1,4 +1,4 @@ -#! /usr/bin/env python +#! /usr/bin/env python3 """ "PYSTONE" Benchmark Program Modified: python/branches/py3k/Lib/test/re_tests.py ============================================================================== --- python/branches/py3k/Lib/test/re_tests.py (original) +++ python/branches/py3k/Lib/test/re_tests.py Thu Mar 11 23:53:45 2010 @@ -1,4 +1,4 @@ -#!/usr/bin/env python +#!/usr/bin/env python3 # -*- mode: python -*- # Re test suite and benchmark suite v1.5 Modified: python/branches/py3k/Lib/test/regrtest.py ============================================================================== --- python/branches/py3k/Lib/test/regrtest.py (original) +++ python/branches/py3k/Lib/test/regrtest.py Thu Mar 11 23:53:45 2010 @@ -1,4 +1,4 @@ -#! /usr/bin/env python +#! /usr/bin/env python3 """Regression test. Modified: python/branches/py3k/Lib/test/test___future__.py ============================================================================== --- python/branches/py3k/Lib/test/test___future__.py (original) +++ python/branches/py3k/Lib/test/test___future__.py Thu Mar 11 23:53:45 2010 @@ -1,4 +1,4 @@ -#! /usr/bin/env python +#! /usr/bin/env python3 import unittest from test import support import __future__ Modified: python/branches/py3k/Lib/test/test_array.py ============================================================================== --- python/branches/py3k/Lib/test/test_array.py (original) +++ python/branches/py3k/Lib/test/test_array.py Thu Mar 11 23:53:45 2010 @@ -1,4 +1,4 @@ -#! /usr/bin/env python +#! /usr/bin/env python3 """Test the arraymodule. Roger E. Masse """ Modified: python/branches/py3k/Lib/test/test_binhex.py ============================================================================== --- python/branches/py3k/Lib/test/test_binhex.py (original) +++ python/branches/py3k/Lib/test/test_binhex.py Thu Mar 11 23:53:45 2010 @@ -1,4 +1,4 @@ -#! /usr/bin/env python +#! /usr/bin/env python3 """Test script for the binhex C module Uses the mechanism of the python binhex module Modified: python/branches/py3k/Lib/test/test_bz2.py ============================================================================== --- python/branches/py3k/Lib/test/test_bz2.py (original) +++ python/branches/py3k/Lib/test/test_bz2.py Thu Mar 11 23:53:45 2010 @@ -1,4 +1,4 @@ -#!/usr/bin/python +#!/usr/bin/env python3 from test import support from test.support import TESTFN Modified: python/branches/py3k/Lib/test/test_cmd.py ============================================================================== --- python/branches/py3k/Lib/test/test_cmd.py (original) +++ python/branches/py3k/Lib/test/test_cmd.py Thu Mar 11 23:53:45 2010 @@ -1,4 +1,4 @@ -#!/usr/bin/env python +#!/usr/bin/env python3 """ Test script for the 'cmd' module Original by Michael Schneider Modified: python/branches/py3k/Lib/test/test_codecencodings_cn.py ============================================================================== --- python/branches/py3k/Lib/test/test_codecencodings_cn.py (original) +++ python/branches/py3k/Lib/test/test_codecencodings_cn.py Thu Mar 11 23:53:45 2010 @@ -1,4 +1,4 @@ -#!/usr/bin/env python +#!/usr/bin/env python3 # # test_codecencodings_cn.py # Codec encoding tests for PRC encodings. Modified: python/branches/py3k/Lib/test/test_codecencodings_hk.py ============================================================================== --- python/branches/py3k/Lib/test/test_codecencodings_hk.py (original) +++ python/branches/py3k/Lib/test/test_codecencodings_hk.py Thu Mar 11 23:53:45 2010 @@ -1,4 +1,4 @@ -#!/usr/bin/env python +#!/usr/bin/env python3 # # test_codecencodings_hk.py # Codec encoding tests for HongKong encodings. Modified: python/branches/py3k/Lib/test/test_codecencodings_jp.py ============================================================================== --- python/branches/py3k/Lib/test/test_codecencodings_jp.py (original) +++ python/branches/py3k/Lib/test/test_codecencodings_jp.py Thu Mar 11 23:53:45 2010 @@ -1,4 +1,4 @@ -#!/usr/bin/env python +#!/usr/bin/env python3 # # test_codecencodings_jp.py # Codec encoding tests for Japanese encodings. Modified: python/branches/py3k/Lib/test/test_codecencodings_kr.py ============================================================================== --- python/branches/py3k/Lib/test/test_codecencodings_kr.py (original) +++ python/branches/py3k/Lib/test/test_codecencodings_kr.py Thu Mar 11 23:53:45 2010 @@ -1,4 +1,4 @@ -#!/usr/bin/env python +#!/usr/bin/env python3 # # test_codecencodings_kr.py # Codec encoding tests for ROK encodings. Modified: python/branches/py3k/Lib/test/test_codecencodings_tw.py ============================================================================== --- python/branches/py3k/Lib/test/test_codecencodings_tw.py (original) +++ python/branches/py3k/Lib/test/test_codecencodings_tw.py Thu Mar 11 23:53:45 2010 @@ -1,4 +1,4 @@ -#!/usr/bin/env python +#!/usr/bin/env python3 # # test_codecencodings_tw.py # Codec encoding tests for ROC encodings. Modified: python/branches/py3k/Lib/test/test_codecmaps_cn.py ============================================================================== --- python/branches/py3k/Lib/test/test_codecmaps_cn.py (original) +++ python/branches/py3k/Lib/test/test_codecmaps_cn.py Thu Mar 11 23:53:45 2010 @@ -1,4 +1,4 @@ -#!/usr/bin/env python +#!/usr/bin/env python3 # # test_codecmaps_cn.py # Codec mapping tests for PRC encodings Modified: python/branches/py3k/Lib/test/test_codecmaps_hk.py ============================================================================== --- python/branches/py3k/Lib/test/test_codecmaps_hk.py (original) +++ python/branches/py3k/Lib/test/test_codecmaps_hk.py Thu Mar 11 23:53:45 2010 @@ -1,4 +1,4 @@ -#!/usr/bin/env python +#!/usr/bin/env python3 # # test_codecmaps_hk.py # Codec mapping tests for HongKong encodings Modified: python/branches/py3k/Lib/test/test_codecmaps_jp.py ============================================================================== --- python/branches/py3k/Lib/test/test_codecmaps_jp.py (original) +++ python/branches/py3k/Lib/test/test_codecmaps_jp.py Thu Mar 11 23:53:45 2010 @@ -1,4 +1,4 @@ -#!/usr/bin/env python +#!/usr/bin/env python3 # # test_codecmaps_jp.py # Codec mapping tests for Japanese encodings Modified: python/branches/py3k/Lib/test/test_codecmaps_kr.py ============================================================================== --- python/branches/py3k/Lib/test/test_codecmaps_kr.py (original) +++ python/branches/py3k/Lib/test/test_codecmaps_kr.py Thu Mar 11 23:53:45 2010 @@ -1,4 +1,4 @@ -#!/usr/bin/env python +#!/usr/bin/env python3 # # test_codecmaps_kr.py # Codec mapping tests for ROK encodings Modified: python/branches/py3k/Lib/test/test_codecmaps_tw.py ============================================================================== --- python/branches/py3k/Lib/test/test_codecmaps_tw.py (original) +++ python/branches/py3k/Lib/test/test_codecmaps_tw.py Thu Mar 11 23:53:45 2010 @@ -1,4 +1,4 @@ -#!/usr/bin/env python +#!/usr/bin/env python3 # # test_codecmaps_tw.py # Codec mapping tests for ROC encodings Modified: python/branches/py3k/Lib/test/test_dbm.py ============================================================================== --- python/branches/py3k/Lib/test/test_dbm.py (original) +++ python/branches/py3k/Lib/test/test_dbm.py Thu Mar 11 23:53:45 2010 @@ -1,4 +1,4 @@ -#! /usr/bin/env python +#! /usr/bin/env python3 """Test script for the dbm.open function based on testdumbdbm.py""" import os Modified: python/branches/py3k/Lib/test/test_dbm_dumb.py ============================================================================== --- python/branches/py3k/Lib/test/test_dbm_dumb.py (original) +++ python/branches/py3k/Lib/test/test_dbm_dumb.py Thu Mar 11 23:53:45 2010 @@ -1,4 +1,4 @@ -#! /usr/bin/env python +#! /usr/bin/env python3 """Test script for the dumbdbm module Original by Roger E. Masse """ Modified: python/branches/py3k/Lib/test/test_eof.py ============================================================================== --- python/branches/py3k/Lib/test/test_eof.py (original) +++ python/branches/py3k/Lib/test/test_eof.py Thu Mar 11 23:53:45 2010 @@ -1,4 +1,4 @@ -#! /usr/bin/env python +#! /usr/bin/env python3 """test script for a few new invalid token catches""" import unittest Modified: python/branches/py3k/Lib/test/test_errno.py ============================================================================== --- python/branches/py3k/Lib/test/test_errno.py (original) +++ python/branches/py3k/Lib/test/test_errno.py Thu Mar 11 23:53:45 2010 @@ -1,4 +1,4 @@ -#! /usr/bin/env python +#! /usr/bin/env python3 """Test the errno module Roger E. Masse """ Modified: python/branches/py3k/Lib/test/test_gzip.py ============================================================================== --- python/branches/py3k/Lib/test/test_gzip.py (original) +++ python/branches/py3k/Lib/test/test_gzip.py Thu Mar 11 23:53:45 2010 @@ -1,4 +1,4 @@ -#! /usr/bin/env python +#! /usr/bin/env python3 """Test script for the gzip module. """ Modified: python/branches/py3k/Lib/test/test_keywordonlyarg.py ============================================================================== --- python/branches/py3k/Lib/test/test_keywordonlyarg.py (original) +++ python/branches/py3k/Lib/test/test_keywordonlyarg.py Thu Mar 11 23:53:45 2010 @@ -1,4 +1,4 @@ -#!/usr/bin/env python +#!/usr/bin/env python3 """Unit tests for the keyword only argument specified in PEP 3102.""" Modified: python/branches/py3k/Lib/test/test_logging.py ============================================================================== --- python/branches/py3k/Lib/test/test_logging.py (original) +++ python/branches/py3k/Lib/test/test_logging.py Thu Mar 11 23:53:45 2010 @@ -1,4 +1,4 @@ -#!/usr/bin/env python +#!/usr/bin/env python3 # # Copyright 2001-2010 by Vinay Sajip. All Rights Reserved. # Modified: python/branches/py3k/Lib/test/test_marshal.py ============================================================================== --- python/branches/py3k/Lib/test/test_marshal.py (original) +++ python/branches/py3k/Lib/test/test_marshal.py Thu Mar 11 23:53:45 2010 @@ -1,4 +1,4 @@ -#!/usr/bin/env python +#!/usr/bin/env python3 from test import support import marshal Modified: python/branches/py3k/Lib/test/test_multibytecodec.py ============================================================================== --- python/branches/py3k/Lib/test/test_multibytecodec.py (original) +++ python/branches/py3k/Lib/test/test_multibytecodec.py Thu Mar 11 23:53:45 2010 @@ -1,4 +1,4 @@ -#!/usr/bin/env python +#!/usr/bin/env python3 # # test_multibytecodec.py # Unit test for multibytecodec itself Modified: python/branches/py3k/Lib/test/test_multibytecodec_support.py ============================================================================== --- python/branches/py3k/Lib/test/test_multibytecodec_support.py (original) +++ python/branches/py3k/Lib/test/test_multibytecodec_support.py Thu Mar 11 23:53:45 2010 @@ -1,4 +1,4 @@ -#!/usr/bin/env python +#!/usr/bin/env python3 # # test_multibytecodec_support.py # Common Unittest Routines for CJK codecs Modified: python/branches/py3k/Lib/test/test_multiprocessing.py ============================================================================== --- python/branches/py3k/Lib/test/test_multiprocessing.py (original) +++ python/branches/py3k/Lib/test/test_multiprocessing.py Thu Mar 11 23:53:45 2010 @@ -1,4 +1,4 @@ -#!/usr/bin/env python +#!/usr/bin/env python3 # # Unit tests for the multiprocessing package Modified: python/branches/py3k/Lib/test/test_popen.py ============================================================================== --- python/branches/py3k/Lib/test/test_popen.py (original) +++ python/branches/py3k/Lib/test/test_popen.py Thu Mar 11 23:53:45 2010 @@ -1,4 +1,4 @@ -#! /usr/bin/env python +#! /usr/bin/env python3 """Basic tests for os.popen() Particularly useful for platforms that fake popen. Modified: python/branches/py3k/Lib/test/test_random.py ============================================================================== --- python/branches/py3k/Lib/test/test_random.py (original) +++ python/branches/py3k/Lib/test/test_random.py Thu Mar 11 23:53:45 2010 @@ -1,4 +1,4 @@ -#!/usr/bin/env python +#!/usr/bin/env python3 import unittest import random Modified: python/branches/py3k/Lib/test/test_smtpnet.py ============================================================================== --- python/branches/py3k/Lib/test/test_smtpnet.py (original) +++ python/branches/py3k/Lib/test/test_smtpnet.py Thu Mar 11 23:53:45 2010 @@ -1,4 +1,4 @@ -#!/usr/bin/env python +#!/usr/bin/env python3 import unittest from test import support Modified: python/branches/py3k/Lib/test/test_socket.py ============================================================================== --- python/branches/py3k/Lib/test/test_socket.py (original) +++ python/branches/py3k/Lib/test/test_socket.py Thu Mar 11 23:53:45 2010 @@ -1,4 +1,4 @@ -#!/usr/bin/env python +#!/usr/bin/env python3 import unittest from test import support Modified: python/branches/py3k/Lib/test/test_tcl.py ============================================================================== --- python/branches/py3k/Lib/test/test_tcl.py (original) +++ python/branches/py3k/Lib/test/test_tcl.py Thu Mar 11 23:53:45 2010 @@ -1,4 +1,4 @@ -#!/usr/bin/env python +#!/usr/bin/env python3 import unittest import os Modified: python/branches/py3k/Lib/test/test_urllib2_localnet.py ============================================================================== --- python/branches/py3k/Lib/test/test_urllib2_localnet.py (original) +++ python/branches/py3k/Lib/test/test_urllib2_localnet.py Thu Mar 11 23:53:45 2010 @@ -1,4 +1,4 @@ -#!/usr/bin/env python +#!/usr/bin/env python3 import email import threading Modified: python/branches/py3k/Lib/test/test_urllib2net.py ============================================================================== --- python/branches/py3k/Lib/test/test_urllib2net.py (original) +++ python/branches/py3k/Lib/test/test_urllib2net.py Thu Mar 11 23:53:45 2010 @@ -1,4 +1,4 @@ -#!/usr/bin/env python +#!/usr/bin/env python3 import unittest from test import support Modified: python/branches/py3k/Lib/test/test_urllibnet.py ============================================================================== --- python/branches/py3k/Lib/test/test_urllibnet.py (original) +++ python/branches/py3k/Lib/test/test_urllibnet.py Thu Mar 11 23:53:45 2010 @@ -1,4 +1,4 @@ -#!/usr/bin/env python +#!/usr/bin/env python3 import unittest from test import support Modified: python/branches/py3k/Lib/test/test_urlparse.py ============================================================================== --- python/branches/py3k/Lib/test/test_urlparse.py (original) +++ python/branches/py3k/Lib/test/test_urlparse.py Thu Mar 11 23:53:45 2010 @@ -1,4 +1,4 @@ -#! /usr/bin/env python +#! /usr/bin/env python3 from test import support import unittest Modified: python/branches/py3k/Lib/test/test_userstring.py ============================================================================== --- python/branches/py3k/Lib/test/test_userstring.py (original) +++ python/branches/py3k/Lib/test/test_userstring.py Thu Mar 11 23:53:45 2010 @@ -1,4 +1,4 @@ -#!/usr/bin/env python +#!/usr/bin/env python3 # UserString is a wrapper around the native builtin string type. # UserString instances should behave similar to builtin string objects. Modified: python/branches/py3k/Lib/test/test_with.py ============================================================================== --- python/branches/py3k/Lib/test/test_with.py (original) +++ python/branches/py3k/Lib/test/test_with.py Thu Mar 11 23:53:45 2010 @@ -1,4 +1,4 @@ -#!/usr/bin/env python +#!/usr/bin/env python3 """Unit tests for the with statement specified in PEP 343.""" Modified: python/branches/py3k/Lib/test/test_xmlrpc_net.py ============================================================================== --- python/branches/py3k/Lib/test/test_xmlrpc_net.py (original) +++ python/branches/py3k/Lib/test/test_xmlrpc_net.py Thu Mar 11 23:53:45 2010 @@ -1,4 +1,4 @@ -#!/usr/bin/env python +#!/usr/bin/env python3 import collections import errno Modified: python/branches/py3k/Lib/timeit.py ============================================================================== --- python/branches/py3k/Lib/timeit.py (original) +++ python/branches/py3k/Lib/timeit.py Thu Mar 11 23:53:45 2010 @@ -1,4 +1,4 @@ -#! /usr/bin/env python +#! /usr/bin/env python3 """Tool for measuring execution time of small code snippets. Modified: python/branches/py3k/Lib/token.py ============================================================================== --- python/branches/py3k/Lib/token.py (original) +++ python/branches/py3k/Lib/token.py Thu Mar 11 23:53:45 2010 @@ -1,4 +1,4 @@ -#! /usr/bin/env python +#! /usr/bin/env python3 """Token constants (from "token.h").""" Modified: python/branches/py3k/Lib/trace.py ============================================================================== --- python/branches/py3k/Lib/trace.py (original) +++ python/branches/py3k/Lib/trace.py Thu Mar 11 23:53:45 2010 @@ -1,4 +1,4 @@ -#!/usr/bin/env python +#!/usr/bin/env python3 # portions copyright 2001, Autonomous Zones Industries, Inc., all rights... # err... reserved and offered to the public under the terms of the Modified: python/branches/py3k/Lib/uu.py ============================================================================== --- python/branches/py3k/Lib/uu.py (original) +++ python/branches/py3k/Lib/uu.py Thu Mar 11 23:53:45 2010 @@ -1,4 +1,4 @@ -#! /usr/bin/env python +#! /usr/bin/env python3 # Copyright 1994 by Lance Ellinghouse # Cathedral City, California Republic, United States of America. Modified: python/branches/py3k/Lib/webbrowser.py ============================================================================== --- python/branches/py3k/Lib/webbrowser.py (original) +++ python/branches/py3k/Lib/webbrowser.py Thu Mar 11 23:53:45 2010 @@ -1,4 +1,4 @@ -#! /usr/bin/env python +#! /usr/bin/env python3 """Interfaces for launching and remotely controlling Web browsers.""" # Maintained by Georg Brandl. Modified: python/branches/py3k/Python/makeopcodetargets.py ============================================================================== --- python/branches/py3k/Python/makeopcodetargets.py (original) +++ python/branches/py3k/Python/makeopcodetargets.py Thu Mar 11 23:53:45 2010 @@ -1,4 +1,4 @@ -#! /usr/bin/env python +#! /usr/bin/env python3 """Generate C code for the jump table of the threaded code interpreter (for compilers supporting computed gotos or "labels-as-values", such as gcc). """ Modified: python/branches/py3k/Tools/faqwiz/faqw.py ============================================================================== --- python/branches/py3k/Tools/faqwiz/faqw.py (original) +++ python/branches/py3k/Tools/faqwiz/faqw.py Thu Mar 11 23:53:45 2010 @@ -1,4 +1,4 @@ -#! /usr/local/bin/python +#!/usr/bin/env python3 """FAQ wizard bootstrap.""" Modified: python/branches/py3k/Tools/freeze/freeze.py ============================================================================== --- python/branches/py3k/Tools/freeze/freeze.py (original) +++ python/branches/py3k/Tools/freeze/freeze.py Thu Mar 11 23:53:45 2010 @@ -1,4 +1,4 @@ -#! /usr/bin/env python +#! /usr/bin/env python3 """Freeze a Python script into a binary. Modified: python/branches/py3k/Tools/i18n/makelocalealias.py ============================================================================== --- python/branches/py3k/Tools/i18n/makelocalealias.py (original) +++ python/branches/py3k/Tools/i18n/makelocalealias.py Thu Mar 11 23:53:45 2010 @@ -1,4 +1,4 @@ -#!/usr/bin/env python +#!/usr/bin/env python3 """ Convert the X11 locale.alias file into a mapping dictionary suitable for locale.py. Modified: python/branches/py3k/Tools/i18n/msgfmt.py ============================================================================== --- python/branches/py3k/Tools/i18n/msgfmt.py (original) +++ python/branches/py3k/Tools/i18n/msgfmt.py Thu Mar 11 23:53:45 2010 @@ -1,4 +1,4 @@ -#! /usr/bin/env python +#! /usr/bin/env python3 # -*- coding: iso-8859-1 -*- # Written by Martin v. L?wis Modified: python/branches/py3k/Tools/i18n/pygettext.py ============================================================================== --- python/branches/py3k/Tools/i18n/pygettext.py (original) +++ python/branches/py3k/Tools/i18n/pygettext.py Thu Mar 11 23:53:45 2010 @@ -1,4 +1,4 @@ -#! /usr/bin/env python +#! /usr/bin/env python3 # -*- coding: iso-8859-1 -*- # Originally written by Barry Warsaw # Modified: python/branches/py3k/Tools/modulator/Tkextra.py ============================================================================== --- python/branches/py3k/Tools/modulator/Tkextra.py (original) +++ python/branches/py3k/Tools/modulator/Tkextra.py Thu Mar 11 23:53:45 2010 @@ -1,4 +1,4 @@ -#! /usr/bin/env python +#! /usr/bin/env python3 # A Python function that generates dialog boxes with a text message, # optional bitmap, and any number of buttons. Modified: python/branches/py3k/Tools/modulator/modulator.py ============================================================================== --- python/branches/py3k/Tools/modulator/modulator.py (original) +++ python/branches/py3k/Tools/modulator/modulator.py Thu Mar 11 23:53:45 2010 @@ -1,4 +1,4 @@ -#! /usr/bin/env python +#! /usr/bin/env python3 # # Modulator - Generate skeleton modules. # Modified: python/branches/py3k/Tools/scripts/byteyears.py ============================================================================== --- python/branches/py3k/Tools/scripts/byteyears.py (original) +++ python/branches/py3k/Tools/scripts/byteyears.py Thu Mar 11 23:53:45 2010 @@ -1,4 +1,4 @@ -#! /usr/bin/env python +#! /usr/bin/env python3 # Print the product of age and size of each file, in suitable units. # Modified: python/branches/py3k/Tools/scripts/checkappend.py ============================================================================== --- python/branches/py3k/Tools/scripts/checkappend.py (original) +++ python/branches/py3k/Tools/scripts/checkappend.py Thu Mar 11 23:53:45 2010 @@ -1,4 +1,4 @@ -#! /usr/bin/env python +#! /usr/bin/env python3 # Released to the public domain, by Tim Peters, 28 February 2000. Modified: python/branches/py3k/Tools/scripts/checkpyc.py ============================================================================== --- python/branches/py3k/Tools/scripts/checkpyc.py (original) +++ python/branches/py3k/Tools/scripts/checkpyc.py Thu Mar 11 23:53:45 2010 @@ -1,4 +1,4 @@ -#! /usr/bin/env python +#! /usr/bin/env python3 # Check that all ".pyc" files exist and are up-to-date # Uses module 'os' Modified: python/branches/py3k/Tools/scripts/classfix.py ============================================================================== --- python/branches/py3k/Tools/scripts/classfix.py (original) +++ python/branches/py3k/Tools/scripts/classfix.py Thu Mar 11 23:53:45 2010 @@ -1,4 +1,4 @@ -#! /usr/bin/env python +#! /usr/bin/env python3 # This script is obsolete -- it is kept for historical purposes only. # Modified: python/branches/py3k/Tools/scripts/cleanfuture.py ============================================================================== --- python/branches/py3k/Tools/scripts/cleanfuture.py (original) +++ python/branches/py3k/Tools/scripts/cleanfuture.py Thu Mar 11 23:53:45 2010 @@ -1,4 +1,4 @@ -#! /usr/bin/env python +#! /usr/bin/env python3 """cleanfuture [-d][-r][-v] path ... Modified: python/branches/py3k/Tools/scripts/combinerefs.py ============================================================================== --- python/branches/py3k/Tools/scripts/combinerefs.py (original) +++ python/branches/py3k/Tools/scripts/combinerefs.py Thu Mar 11 23:53:45 2010 @@ -1,4 +1,4 @@ -#! /usr/bin/env python +#! /usr/bin/env python3 """ combinerefs path Modified: python/branches/py3k/Tools/scripts/copytime.py ============================================================================== --- python/branches/py3k/Tools/scripts/copytime.py (original) +++ python/branches/py3k/Tools/scripts/copytime.py Thu Mar 11 23:53:45 2010 @@ -1,4 +1,4 @@ -#! /usr/bin/env python +#! /usr/bin/env python3 # Copy one file's atime and mtime to another Modified: python/branches/py3k/Tools/scripts/crlf.py ============================================================================== --- python/branches/py3k/Tools/scripts/crlf.py (original) +++ python/branches/py3k/Tools/scripts/crlf.py Thu Mar 11 23:53:45 2010 @@ -1,4 +1,4 @@ -#! /usr/bin/env python +#! /usr/bin/env python3 "Replace CRLF with LF in argument files. Print names of changed files." import sys, os Modified: python/branches/py3k/Tools/scripts/cvsfiles.py ============================================================================== --- python/branches/py3k/Tools/scripts/cvsfiles.py (original) +++ python/branches/py3k/Tools/scripts/cvsfiles.py Thu Mar 11 23:53:45 2010 @@ -1,4 +1,4 @@ -#! /usr/bin/env python +#! /usr/bin/env python3 """Print a list of files that are mentioned in CVS directories. Modified: python/branches/py3k/Tools/scripts/db2pickle.py ============================================================================== --- python/branches/py3k/Tools/scripts/db2pickle.py (original) +++ python/branches/py3k/Tools/scripts/db2pickle.py Thu Mar 11 23:53:45 2010 @@ -1,4 +1,4 @@ -#!/usr/bin/env python +#!/usr/bin/env python3 """ Synopsis: %(prog)s [-h|-g|-b|-r|-a] dbfile [ picklefile ] Modified: python/branches/py3k/Tools/scripts/dutree.py ============================================================================== --- python/branches/py3k/Tools/scripts/dutree.py (original) +++ python/branches/py3k/Tools/scripts/dutree.py Thu Mar 11 23:53:45 2010 @@ -1,4 +1,4 @@ -#! /usr/bin/env python +#! /usr/bin/env python3 # Format du output in a tree shape import os, sys, errno Modified: python/branches/py3k/Tools/scripts/eptags.py ============================================================================== --- python/branches/py3k/Tools/scripts/eptags.py (original) +++ python/branches/py3k/Tools/scripts/eptags.py Thu Mar 11 23:53:45 2010 @@ -1,4 +1,4 @@ -#! /usr/bin/env python +#! /usr/bin/env python3 """Create a TAGS file for Python programs, usable with GNU Emacs. usage: eptags pyfiles... Modified: python/branches/py3k/Tools/scripts/find_recursionlimit.py ============================================================================== --- python/branches/py3k/Tools/scripts/find_recursionlimit.py (original) +++ python/branches/py3k/Tools/scripts/find_recursionlimit.py Thu Mar 11 23:53:45 2010 @@ -1,4 +1,4 @@ -#! /usr/bin/env python +#! /usr/bin/env python3 """Find the maximum recursion limit that prevents interpreter termination. This script finds the maximum safe recursion limit on a particular Modified: python/branches/py3k/Tools/scripts/finddiv.py ============================================================================== --- python/branches/py3k/Tools/scripts/finddiv.py (original) +++ python/branches/py3k/Tools/scripts/finddiv.py Thu Mar 11 23:53:45 2010 @@ -1,4 +1,4 @@ -#! /usr/bin/env python +#! /usr/bin/env python3 """finddiv - a grep-like tool that looks for division operators. Modified: python/branches/py3k/Tools/scripts/findlinksto.py ============================================================================== --- python/branches/py3k/Tools/scripts/findlinksto.py (original) +++ python/branches/py3k/Tools/scripts/findlinksto.py Thu Mar 11 23:53:45 2010 @@ -1,4 +1,4 @@ -#! /usr/bin/env python +#! /usr/bin/env python3 # findlinksto # Modified: python/branches/py3k/Tools/scripts/findnocoding.py ============================================================================== --- python/branches/py3k/Tools/scripts/findnocoding.py (original) +++ python/branches/py3k/Tools/scripts/findnocoding.py Thu Mar 11 23:53:45 2010 @@ -1,4 +1,4 @@ -#!/usr/bin/env python +#!/usr/bin/env python3 """List all those Python files that require a coding directive Modified: python/branches/py3k/Tools/scripts/fixcid.py ============================================================================== --- python/branches/py3k/Tools/scripts/fixcid.py (original) +++ python/branches/py3k/Tools/scripts/fixcid.py Thu Mar 11 23:53:45 2010 @@ -1,4 +1,4 @@ -#! /usr/bin/env python +#! /usr/bin/env python3 # Perform massive identifier substitution on C source files. # This actually tokenizes the files (to some extent) so it can Modified: python/branches/py3k/Tools/scripts/fixdiv.py ============================================================================== --- python/branches/py3k/Tools/scripts/fixdiv.py (original) +++ python/branches/py3k/Tools/scripts/fixdiv.py Thu Mar 11 23:53:45 2010 @@ -1,4 +1,4 @@ -#! /usr/bin/env python +#! /usr/bin/env python3 """fixdiv - tool to fix division operators. Modified: python/branches/py3k/Tools/scripts/fixheader.py ============================================================================== --- python/branches/py3k/Tools/scripts/fixheader.py (original) +++ python/branches/py3k/Tools/scripts/fixheader.py Thu Mar 11 23:53:45 2010 @@ -1,4 +1,4 @@ -#! /usr/bin/env python +#! /usr/bin/env python3 # Add some standard cpp magic to a header file Modified: python/branches/py3k/Tools/scripts/fixnotice.py ============================================================================== --- python/branches/py3k/Tools/scripts/fixnotice.py (original) +++ python/branches/py3k/Tools/scripts/fixnotice.py Thu Mar 11 23:53:45 2010 @@ -1,4 +1,4 @@ -#! /usr/bin/env python +#! /usr/bin/env python3 """(Ostensibly) fix copyright notices in files. Modified: python/branches/py3k/Tools/scripts/fixps.py ============================================================================== --- python/branches/py3k/Tools/scripts/fixps.py (original) +++ python/branches/py3k/Tools/scripts/fixps.py Thu Mar 11 23:53:45 2010 @@ -1,4 +1,4 @@ -#!/usr/bin/env python +#!/usr/bin/env python3 # Fix Python script(s) to reference the interpreter via /usr/bin/env python. # Warning: this overwrites the file without making a backup. Modified: python/branches/py3k/Tools/scripts/ftpmirror.py ============================================================================== --- python/branches/py3k/Tools/scripts/ftpmirror.py (original) +++ python/branches/py3k/Tools/scripts/ftpmirror.py Thu Mar 11 23:53:45 2010 @@ -1,4 +1,4 @@ -#! /usr/bin/env python +#! /usr/bin/env python3 """Mirror a remote ftp subtree into a local directory tree. Modified: python/branches/py3k/Tools/scripts/google.py ============================================================================== --- python/branches/py3k/Tools/scripts/google.py (original) +++ python/branches/py3k/Tools/scripts/google.py Thu Mar 11 23:53:45 2010 @@ -1,4 +1,4 @@ -#! /usr/bin/env python +#! /usr/bin/env python3 import sys, webbrowser Modified: python/branches/py3k/Tools/scripts/gprof2html.py ============================================================================== --- python/branches/py3k/Tools/scripts/gprof2html.py (original) +++ python/branches/py3k/Tools/scripts/gprof2html.py Thu Mar 11 23:53:45 2010 @@ -1,4 +1,4 @@ -#! /usr/bin/env python2.3 +#! /usr/bin/env python32.3 """Transform gprof(1) output into useful HTML.""" Modified: python/branches/py3k/Tools/scripts/h2py.py ============================================================================== --- python/branches/py3k/Tools/scripts/h2py.py (original) +++ python/branches/py3k/Tools/scripts/h2py.py Thu Mar 11 23:53:45 2010 @@ -1,4 +1,4 @@ -#! /usr/bin/env python +#! /usr/bin/env python3 # Read #define's and translate to Python code. # Handle #include statements. Modified: python/branches/py3k/Tools/scripts/ifdef.py ============================================================================== --- python/branches/py3k/Tools/scripts/ifdef.py (original) +++ python/branches/py3k/Tools/scripts/ifdef.py Thu Mar 11 23:53:45 2010 @@ -1,4 +1,4 @@ -#! /usr/bin/env python +#! /usr/bin/env python3 # Selectively preprocess #ifdef / #ifndef statements. # Usage: Modified: python/branches/py3k/Tools/scripts/lfcr.py ============================================================================== --- python/branches/py3k/Tools/scripts/lfcr.py (original) +++ python/branches/py3k/Tools/scripts/lfcr.py Thu Mar 11 23:53:45 2010 @@ -1,4 +1,4 @@ -#! /usr/bin/env python +#! /usr/bin/env python3 "Replace LF with CRLF in argument files. Print names of changed files." Modified: python/branches/py3k/Tools/scripts/linktree.py ============================================================================== --- python/branches/py3k/Tools/scripts/linktree.py (original) +++ python/branches/py3k/Tools/scripts/linktree.py Thu Mar 11 23:53:45 2010 @@ -1,4 +1,4 @@ -#! /usr/bin/env python +#! /usr/bin/env python3 # linktree # Modified: python/branches/py3k/Tools/scripts/lll.py ============================================================================== --- python/branches/py3k/Tools/scripts/lll.py (original) +++ python/branches/py3k/Tools/scripts/lll.py Thu Mar 11 23:53:45 2010 @@ -1,4 +1,4 @@ -#! /usr/bin/env python +#! /usr/bin/env python3 # Find symbolic links and show where they point to. # Arguments are directories to search; default is current directory. Modified: python/branches/py3k/Tools/scripts/logmerge.py ============================================================================== --- python/branches/py3k/Tools/scripts/logmerge.py (original) +++ python/branches/py3k/Tools/scripts/logmerge.py Thu Mar 11 23:53:45 2010 @@ -1,4 +1,4 @@ -#! /usr/bin/env python +#! /usr/bin/env python3 """Consolidate a bunch of CVS or RCS logs read from stdin. Modified: python/branches/py3k/Tools/scripts/md5sum.py ============================================================================== --- python/branches/py3k/Tools/scripts/md5sum.py (original) +++ python/branches/py3k/Tools/scripts/md5sum.py Thu Mar 11 23:53:45 2010 @@ -1,4 +1,4 @@ -#! /usr/bin/env python +#! /usr/bin/env python3 """Python utility to print MD5 checksums of argument files. """ Modified: python/branches/py3k/Tools/scripts/methfix.py ============================================================================== --- python/branches/py3k/Tools/scripts/methfix.py (original) +++ python/branches/py3k/Tools/scripts/methfix.py Thu Mar 11 23:53:45 2010 @@ -1,4 +1,4 @@ -#! /usr/bin/env python +#! /usr/bin/env python3 # Fix Python source files to avoid using # def method(self, (arg1, ..., argn)): Modified: python/branches/py3k/Tools/scripts/mkreal.py ============================================================================== --- python/branches/py3k/Tools/scripts/mkreal.py (original) +++ python/branches/py3k/Tools/scripts/mkreal.py Thu Mar 11 23:53:45 2010 @@ -1,4 +1,4 @@ -#! /usr/bin/env python +#! /usr/bin/env python3 # mkreal # Modified: python/branches/py3k/Tools/scripts/ndiff.py ============================================================================== --- python/branches/py3k/Tools/scripts/ndiff.py (original) +++ python/branches/py3k/Tools/scripts/ndiff.py Thu Mar 11 23:53:45 2010 @@ -1,4 +1,4 @@ -#! /usr/bin/env python +#! /usr/bin/env python3 # Module ndiff version 1.7.0 # Released to the public domain 08-Dec-2000, Modified: python/branches/py3k/Tools/scripts/nm2def.py ============================================================================== --- python/branches/py3k/Tools/scripts/nm2def.py (original) +++ python/branches/py3k/Tools/scripts/nm2def.py Thu Mar 11 23:53:45 2010 @@ -1,4 +1,4 @@ -#! /usr/bin/env python +#! /usr/bin/env python3 """nm2def.py Helpers to extract symbols from Unix libs and auto-generate Modified: python/branches/py3k/Tools/scripts/objgraph.py ============================================================================== --- python/branches/py3k/Tools/scripts/objgraph.py (original) +++ python/branches/py3k/Tools/scripts/objgraph.py Thu Mar 11 23:53:45 2010 @@ -1,4 +1,4 @@ -#! /usr/bin/env python +#! /usr/bin/env python3 # objgraph # Modified: python/branches/py3k/Tools/scripts/parseentities.py ============================================================================== --- python/branches/py3k/Tools/scripts/parseentities.py (original) +++ python/branches/py3k/Tools/scripts/parseentities.py Thu Mar 11 23:53:45 2010 @@ -1,4 +1,4 @@ -#!/usr/local/bin/python +#!/usr/bin/env python3 """ Utility for parsing HTML entity definitions available from: http://www.w3.org/ as e.g. Modified: python/branches/py3k/Tools/scripts/pdeps.py ============================================================================== --- python/branches/py3k/Tools/scripts/pdeps.py (original) +++ python/branches/py3k/Tools/scripts/pdeps.py Thu Mar 11 23:53:45 2010 @@ -1,4 +1,4 @@ -#! /usr/bin/env python +#! /usr/bin/env python3 # pdeps # Modified: python/branches/py3k/Tools/scripts/pickle2db.py ============================================================================== --- python/branches/py3k/Tools/scripts/pickle2db.py (original) +++ python/branches/py3k/Tools/scripts/pickle2db.py Thu Mar 11 23:53:45 2010 @@ -1,4 +1,4 @@ -#!/usr/bin/env python +#!/usr/bin/env python3 """ Synopsis: %(prog)s [-h|-b|-g|-r|-a|-d] [ picklefile ] dbfile Modified: python/branches/py3k/Tools/scripts/pindent.py ============================================================================== --- python/branches/py3k/Tools/scripts/pindent.py (original) +++ python/branches/py3k/Tools/scripts/pindent.py Thu Mar 11 23:53:45 2010 @@ -1,4 +1,4 @@ -#! /usr/bin/env python +#! /usr/bin/env python3 # This file contains a class and a main program that perform three # related (though complimentary) formatting operations on Python Modified: python/branches/py3k/Tools/scripts/ptags.py ============================================================================== --- python/branches/py3k/Tools/scripts/ptags.py (original) +++ python/branches/py3k/Tools/scripts/ptags.py Thu Mar 11 23:53:45 2010 @@ -1,4 +1,4 @@ -#! /usr/bin/env python +#! /usr/bin/env python3 # ptags # Modified: python/branches/py3k/Tools/scripts/pysource.py ============================================================================== --- python/branches/py3k/Tools/scripts/pysource.py (original) +++ python/branches/py3k/Tools/scripts/pysource.py Thu Mar 11 23:53:45 2010 @@ -1,4 +1,4 @@ -#!/usr/bin/env python +#!/usr/bin/env python3 """\ List python source files. Modified: python/branches/py3k/Tools/scripts/reindent-rst.py ============================================================================== --- python/branches/py3k/Tools/scripts/reindent-rst.py (original) +++ python/branches/py3k/Tools/scripts/reindent-rst.py Thu Mar 11 23:53:45 2010 @@ -1,4 +1,4 @@ -#!/usr/bin/env python +#!/usr/bin/env python3 # Make a reST file compliant to our pre-commit hook. # Currently just remove trailing whitespace. Modified: python/branches/py3k/Tools/scripts/reindent.py ============================================================================== --- python/branches/py3k/Tools/scripts/reindent.py (original) +++ python/branches/py3k/Tools/scripts/reindent.py Thu Mar 11 23:53:45 2010 @@ -1,4 +1,4 @@ -#! /usr/bin/env python +#! /usr/bin/env python3 # Released to the public domain, by Tim Peters, 03 October 2000. Modified: python/branches/py3k/Tools/scripts/rgrep.py ============================================================================== --- python/branches/py3k/Tools/scripts/rgrep.py (original) +++ python/branches/py3k/Tools/scripts/rgrep.py Thu Mar 11 23:53:45 2010 @@ -1,4 +1,4 @@ -#! /usr/bin/env python +#! /usr/bin/env python3 """Reverse grep. Modified: python/branches/py3k/Tools/scripts/serve.py ============================================================================== --- python/branches/py3k/Tools/scripts/serve.py (original) +++ python/branches/py3k/Tools/scripts/serve.py Thu Mar 11 23:53:45 2010 @@ -1,4 +1,4 @@ -#!/usr/bin/env python +#!/usr/bin/env python3 ''' Small wsgiref based web server. Takes a path to serve from and an optional port number (defaults to 8000), then tries to serve files. Modified: python/branches/py3k/Tools/scripts/suff.py ============================================================================== --- python/branches/py3k/Tools/scripts/suff.py (original) +++ python/branches/py3k/Tools/scripts/suff.py Thu Mar 11 23:53:45 2010 @@ -1,4 +1,4 @@ -#! /usr/bin/env python +#! /usr/bin/env python3 # suff # Modified: python/branches/py3k/Tools/scripts/svneol.py ============================================================================== --- python/branches/py3k/Tools/scripts/svneol.py (original) +++ python/branches/py3k/Tools/scripts/svneol.py Thu Mar 11 23:53:45 2010 @@ -1,4 +1,4 @@ -#! /usr/bin/env python +#! /usr/bin/env python3 """ SVN helper script. Modified: python/branches/py3k/Tools/scripts/texi2html.py ============================================================================== --- python/branches/py3k/Tools/scripts/texi2html.py (original) +++ python/branches/py3k/Tools/scripts/texi2html.py Thu Mar 11 23:53:45 2010 @@ -1,4 +1,4 @@ -#! /usr/bin/env python +#! /usr/bin/env python3 # Convert GNU texinfo files into HTML, one file per node. # Based on Texinfo 2.14. Modified: python/branches/py3k/Tools/scripts/treesync.py ============================================================================== --- python/branches/py3k/Tools/scripts/treesync.py (original) +++ python/branches/py3k/Tools/scripts/treesync.py Thu Mar 11 23:53:45 2010 @@ -1,4 +1,4 @@ -#! /usr/bin/env python +#! /usr/bin/env python3 """Script to synchronize two source trees. Modified: python/branches/py3k/Tools/scripts/untabify.py ============================================================================== --- python/branches/py3k/Tools/scripts/untabify.py (original) +++ python/branches/py3k/Tools/scripts/untabify.py Thu Mar 11 23:53:45 2010 @@ -1,4 +1,4 @@ -#! /usr/bin/env python +#! /usr/bin/env python3 "Replace tabs with spaces in argument files. Print names of changed files." Modified: python/branches/py3k/Tools/scripts/which.py ============================================================================== --- python/branches/py3k/Tools/scripts/which.py (original) +++ python/branches/py3k/Tools/scripts/which.py Thu Mar 11 23:53:45 2010 @@ -1,4 +1,4 @@ -#! /usr/bin/env python +#! /usr/bin/env python3 # Variant of "which". # On stderr, near and total misses are reported. Modified: python/branches/py3k/Tools/scripts/xxci.py ============================================================================== --- python/branches/py3k/Tools/scripts/xxci.py (original) +++ python/branches/py3k/Tools/scripts/xxci.py Thu Mar 11 23:53:45 2010 @@ -1,4 +1,4 @@ -#! /usr/bin/env python +#! /usr/bin/env python3 # xxci # Modified: python/branches/py3k/Tools/ssl/get-remote-certificate.py ============================================================================== --- python/branches/py3k/Tools/ssl/get-remote-certificate.py (original) +++ python/branches/py3k/Tools/ssl/get-remote-certificate.py Thu Mar 11 23:53:45 2010 @@ -1,4 +1,4 @@ -#!/usr/bin/env python +#!/usr/bin/env python3 # # fetch the certificate that the server(s) are providing in PEM form # Modified: python/branches/py3k/Tools/unicode/comparecodecs.py ============================================================================== --- python/branches/py3k/Tools/unicode/comparecodecs.py (original) +++ python/branches/py3k/Tools/unicode/comparecodecs.py Thu Mar 11 23:53:45 2010 @@ -1,4 +1,4 @@ -#!/usr/bin/env python +#!/usr/bin/env python3 """ Compare the output of two codecs. Modified: python/branches/py3k/Tools/webchecker/wcgui.py ============================================================================== --- python/branches/py3k/Tools/webchecker/wcgui.py (original) +++ python/branches/py3k/Tools/webchecker/wcgui.py Thu Mar 11 23:53:45 2010 @@ -1,4 +1,4 @@ -#! /usr/bin/env python +#! /usr/bin/env python3 """GUI interface to webchecker. Modified: python/branches/py3k/Tools/webchecker/webchecker.py ============================================================================== --- python/branches/py3k/Tools/webchecker/webchecker.py (original) +++ python/branches/py3k/Tools/webchecker/webchecker.py Thu Mar 11 23:53:45 2010 @@ -1,4 +1,4 @@ -#! /usr/bin/env python +#! /usr/bin/env python3 # Original code by Guido van Rossum; extensive changes by Sam Bayer, # including code to check URL fragments. Modified: python/branches/py3k/Tools/webchecker/websucker.py ============================================================================== --- python/branches/py3k/Tools/webchecker/websucker.py (original) +++ python/branches/py3k/Tools/webchecker/websucker.py Thu Mar 11 23:53:45 2010 @@ -1,4 +1,4 @@ -#! /usr/bin/env python +#! /usr/bin/env python3 """A variant on webchecker that creates a mirror copy of a remote site.""" Modified: python/branches/py3k/Tools/webchecker/wsgui.py ============================================================================== --- python/branches/py3k/Tools/webchecker/wsgui.py (original) +++ python/branches/py3k/Tools/webchecker/wsgui.py Thu Mar 11 23:53:45 2010 @@ -1,4 +1,4 @@ -#! /usr/bin/env python +#! /usr/bin/env python3 """Tkinter-based GUI for websucker. From python-checkins at python.org Fri Mar 12 00:39:40 2010 From: python-checkins at python.org (benjamin.peterson) Date: Fri, 12 Mar 2010 00:39:40 +0100 (CET) Subject: [Python-checkins] r78851 - python/branches/py3k/Python/makeopcodetargets.py Message-ID: <20100311233940.C444EE44A@mail.python.org> Author: benjamin.peterson Date: Fri Mar 12 00:39:40 2010 New Revision: 78851 Log: fix bootstrapping on machines with only 2.x installed Modified: python/branches/py3k/Python/makeopcodetargets.py Modified: python/branches/py3k/Python/makeopcodetargets.py ============================================================================== --- python/branches/py3k/Python/makeopcodetargets.py (original) +++ python/branches/py3k/Python/makeopcodetargets.py Fri Mar 12 00:39:40 2010 @@ -1,4 +1,4 @@ -#! /usr/bin/env python3 +#! /usr/bin/env python """Generate C code for the jump table of the threaded code interpreter (for compilers supporting computed gotos or "labels-as-values", such as gcc). """ From python-checkins at python.org Fri Mar 12 00:59:55 2010 From: python-checkins at python.org (benjamin.peterson) Date: Fri, 12 Mar 2010 00:59:55 +0100 (CET) Subject: [Python-checkins] r78852 - python/branches/py3k/Lib/test/test_imp.py Message-ID: <20100311235955.58102C662@mail.python.org> Author: benjamin.peterson Date: Fri Mar 12 00:59:55 2010 New Revision: 78852 Log: take into account shebang line change Modified: python/branches/py3k/Lib/test/test_imp.py Modified: python/branches/py3k/Lib/test/test_imp.py ============================================================================== --- python/branches/py3k/Lib/test/test_imp.py (original) +++ python/branches/py3k/Lib/test/test_imp.py Fri Mar 12 00:59:55 2010 @@ -51,7 +51,7 @@ self.assertNotEqual(fp, None) self.assertEqual(fp.encoding, "iso-8859-1") self.assertEqual(fp.tell(), 0) - self.assertEqual(fp.readline(), '#!/usr/bin/env python\n') + self.assertEqual(fp.readline(), '#!/usr/bin/env python3\n') fp.close() fp, filename, info = imp.find_module("tokenize") From solipsis at pitrou.net Fri Mar 12 01:03:39 2010 From: solipsis at pitrou.net (solipsis at pitrou.net) Date: Fri, 12 Mar 2010 01:03:39 +0100 (CET) Subject: [Python-checkins] Daily py3k reference leaks (r78845): sum=0 Message-ID: <20100312000339.144951770B@ns6635.ovh.net> py3k results for svn r78845 (hg cset 3d7379f103c6) -------------------------------------------------- Command line was: ['./python', '-m', 'test.regrtest', '-uall', '-R', '3:3:/home/antoine/py3k/refleaks/reflogVxI6Xn', '-x', 'test_httpservers'] From python-checkins at python.org Fri Mar 12 07:01:21 2010 From: python-checkins at python.org (vinay.sajip) Date: Fri, 12 Mar 2010 07:01:21 +0100 (CET) Subject: [Python-checkins] r78853 - in python/trunk: Lib/logging/handlers.py Misc/NEWS Message-ID: <20100312060121.3F3FBE1F5@mail.python.org> Author: vinay.sajip Date: Fri Mar 12 07:01:21 2010 New Revision: 78853 Log: Issue #8117: logging: Improved algorithm for computing initial rollover time. Modified: python/trunk/Lib/logging/handlers.py python/trunk/Misc/NEWS Modified: python/trunk/Lib/logging/handlers.py ============================================================================== --- python/trunk/Lib/logging/handlers.py (original) +++ python/trunk/Lib/logging/handlers.py Fri Mar 12 07:01:21 2010 @@ -25,7 +25,7 @@ """ import logging, socket, os, cPickle, struct, time, re -from stat import ST_DEV, ST_INO +from stat import ST_DEV, ST_INO, ST_MTIME try: import codecs @@ -208,7 +208,11 @@ self.extMatch = re.compile(self.extMatch) self.interval = self.interval * interval # multiply by units requested - self.rolloverAt = self.computeRollover(int(time.time())) + if os.path.exists(filename): + t = os.stat(filename)[ST_MTIME] + else: + t = int(time.time()) + self.rolloverAt = self.computeRollover(t) def computeRollover(self, currentTime): """ Modified: python/trunk/Misc/NEWS ============================================================================== --- python/trunk/Misc/NEWS (original) +++ python/trunk/Misc/NEWS Fri Mar 12 07:01:21 2010 @@ -24,6 +24,8 @@ Library ------- +- Issue #8117: logging: Improved algorithm for computing initial rollover time. + - Issue #6472: The xml.etree package is updated to ElementTree 1.3. The cElementTree module is updated too. From python-checkins at python.org Fri Mar 12 10:16:10 2010 From: python-checkins at python.org (vinay.sajip) Date: Fri, 12 Mar 2010 10:16:10 +0100 (CET) Subject: [Python-checkins] r78855 - in python/trunk: Doc/library/logging.rst Misc/NEWS Message-ID: <20100312091610.98E7EF6AC@mail.python.org> Author: vinay.sajip Date: Fri Mar 12 10:16:10 2010 New Revision: 78855 Log: Issue #8117: Updated NEWS entry and added to logging documentation. Modified: python/trunk/Doc/library/logging.rst python/trunk/Misc/NEWS Modified: python/trunk/Doc/library/logging.rst ============================================================================== --- python/trunk/Doc/library/logging.rst (original) +++ python/trunk/Doc/library/logging.rst Fri Mar 12 10:16:10 2010 @@ -1894,6 +1894,11 @@ The extensions are date-and-time based, using the strftime format ``%Y-%m-%d_%H-%M-%S`` or a leading portion thereof, depending on the rollover interval. + + When computing the next rollover time for the first time (when the handler + is created), the last modification time of an existing log file, or else + the current time, is used to compute when the next rotation will occur. + If the *utc* argument is true, times in UTC will be used; otherwise local time is used. Modified: python/trunk/Misc/NEWS ============================================================================== --- python/trunk/Misc/NEWS (original) +++ python/trunk/Misc/NEWS Fri Mar 12 10:16:10 2010 @@ -24,7 +24,10 @@ Library ------- -- Issue #8117: logging: Improved algorithm for computing initial rollover time. +- Issue #8117: logging: Improved algorithm for computing initial rollover time + for TimedRotatingFileHandler by using the modification time of an existing + log file to compute the next rollover time. If the log file does not exist, + the current time is used as the basis for the computation. - Issue #6472: The xml.etree package is updated to ElementTree 1.3. The cElementTree module is updated too. From nnorwitz at gmail.com Fri Mar 12 10:16:55 2010 From: nnorwitz at gmail.com (Neal Norwitz) Date: Fri, 12 Mar 2010 04:16:55 -0500 Subject: [Python-checkins] Python Regression Test Failures basics (2) Message-ID: <20100312091655.GA28678@kbk-i386-bb.psfb.org> 345 tests OK. 2 tests failed: test_xml_etree test_xml_etree_c 35 tests skipped: test_aepack test_al test_applesingle test_bsddb185 test_bsddb3 test_cd test_cl test_curses test_epoll test_gl test_imgfile test_ioctl test_kqueue test_linuxaudiodev test_macos test_macostools test_multiprocessing test_ossaudiodev test_py3kwarn test_scriptpackages test_smtpnet test_socketserver test_startfile test_sunaudiodev test_tcl test_timeout test_tk test_ttk_guionly test_ttk_textonly test_unicode_file test_urllib2net test_urllibnet test_winreg test_winsound test_zipfile64 6 skips unexpected on linux2: test_multiprocessing test_ttk_guionly test_epoll test_tk test_ioctl test_ttk_textonly == CPython 2.7a4+ (trunk:78854M, Mar 12 2010, 04:01:49) [GCC 3.3.4 20040623 (Gentoo Linux 3.3.4-r1, ssp-3.3.2-2, pie-8.7.6)] == Linux-2.6.9-gentoo-r1-i686-AMD_Athlon-tm-_XP_3000+-with-gentoo-1.4.16 == /tmp/test_python_24565 test_grammar test_opcodes test_dict test_builtin test_exceptions test_types test_unittest test_doctest test_doctest2 test_MimeWriter test_SimpleHTTPServer test_StringIO test___all__ test___future__ test__locale test_abc test_abstract_numbers test_aepack test_aepack skipped -- No module named aetypes test_aifc test_al test_al skipped -- No module named al test_anydbm test_applesingle test_applesingle skipped -- No module named MacOS test_argparse test_array test_ascii_formatd test_ast test_asynchat test_asyncore test_atexit test_audioop test_augassign test_base64 test_bastion test_bigaddrspace test_bigmem test_binascii test_binhex test_binop test_bisect test_bool test_bsddb test_bsddb185 test_bsddb185 skipped -- No module named bsddb185 test_bsddb3 test_bsddb3 skipped -- Use of the `bsddb' resource not enabled test_buffer test_bufio test_bytes test_bz2 test_calendar test_call test_capi test_cd test_cd skipped -- No module named cd test_cfgparser test_cgi test_charmapcodec test_cl test_cl skipped -- No module named cl test_class test_cmath test_cmd test_cmd_line test_cmd_line_script test_code test_codeccallbacks test_codecencodings_cn test_codecencodings_hk test_codecencodings_jp test_codecencodings_kr test_codecencodings_tw test_codecmaps_cn fetching http://source.icu-project.org/repos/icu/data/trunk/charset/data/xml/gb-18030-2000.xml ... fetching http://people.freebsd.org/~perky/i18n/EUC-CN.TXT ... fetching http://www.unicode.org/Public/MAPPINGS/VENDORS/MICSFT/WINDOWS/CP936.TXT ... test_codecmaps_hk fetching http://people.freebsd.org/~perky/i18n/BIG5HKSCS-2004.TXT ... test_codecmaps_jp fetching http://www.unicode.org/Public/MAPPINGS/VENDORS/MICSFT/WINDOWS/CP932.TXT ... fetching http://people.freebsd.org/~perky/i18n/EUC-JISX0213.TXT ... fetching http://people.freebsd.org/~perky/i18n/EUC-JP.TXT ... fetching http://www.unicode.org/Public/MAPPINGS/OBSOLETE/EASTASIA/JIS/SHIFTJIS.TXT ... fetching http://people.freebsd.org/~perky/i18n/SHIFT_JISX0213.TXT ... test_codecmaps_kr fetching http://www.unicode.org/Public/MAPPINGS/VENDORS/MICSFT/WINDOWS/CP949.TXT ... fetching http://people.freebsd.org/~perky/i18n/EUC-KR.TXT ... fetching http://www.unicode.org/Public/MAPPINGS/OBSOLETE/EASTASIA/KSC/JOHAB.TXT ... test_codecmaps_tw fetching http://www.unicode.org/Public/MAPPINGS/OBSOLETE/EASTASIA/OTHER/BIG5.TXT ... fetching http://www.unicode.org/Public/MAPPINGS/VENDORS/MICSFT/WINDOWS/CP950.TXT ... test_codecs test_codeop test_coding test_coercion test_collections test_colorsys test_commands test_compare test_compile test_compileall test_compiler test_complex test_complex_args test_contains test_contextlib test_cookie test_cookielib test_copy test_copy_reg test_cpickle test_cprofile test_crypt test_csv test_ctypes test_curses test_curses skipped -- Use of the `curses' resource not enabled test_datetime test_dbm test_decimal test_decorators test_defaultdict test_deque test_descr test_descrtut test_dictcomps test_dictviews test_difflib test_dircache test_dis test_distutils [20620 refs] test_dl test_docxmlrpc test_dumbdbm test_dummy_thread test_dummy_threading test_email test_email_codecs test_email_renamed test_enumerate test_eof test_epoll test_epoll skipped -- kernel doesn't support epoll() test_errno test_exception_variations test_extcall test_fcntl test_file test_file2k test_filecmp test_fileinput test_fileio test_float test_fnmatch test_fork1 test_format test_fpformat test_fractions test_frozen test_ftplib test_funcattrs test_functools test_future test_future3 test_future4 test_future5 test_future_builtins test_gc test_gdbm test_generators test_genericpath test_genexps test_getargs test_getargs2 test_getopt test_gettext test_gl test_gl skipped -- No module named gl test_glob test_global test_grp test_gzip test_hash test_hashlib test_heapq test_hmac test_hotshot test_htmllib test_htmlparser test_httplib test_httpservers [16621 refs] [16621 refs] [16621 refs] [26870 refs] test_imageop test_imaplib test_imgfile test_imgfile skipped -- No module named imgfile test_imp test_import test_importhooks test_importlib test_index test_inspect test_int test_int_literal test_io test_ioctl test_ioctl skipped -- Unable to open /dev/tty test_isinstance test_iter test_iterlen test_itertools test_json test_kqueue test_kqueue skipped -- test works only on BSD test_largefile test_lib2to3 test_linecache test_linuxaudiodev test_linuxaudiodev skipped -- Use of the `audio' resource not enabled test_list test_locale test_logging test_long test_long_future test_longexp test_macos test_macos skipped -- No module named MacOS test_macostools test_macostools skipped -- No module named MacOS test_macpath test_mailbox test_marshal test_math test_md5 test_memoryio test_memoryview test_mhlib test_mimetools test_mimetypes test_minidom test_mmap test_module test_modulefinder test_multibytecodec test_multibytecodec_support test_multifile test_multiprocessing test_multiprocessing skipped -- This platform lacks a functioning sem_open implementation, therefore, the required synchronization primitives needed will not function, see issue 3770. test_mutants test_mutex test_netrc test_new test_nis test_normalization fetching http://www.unicode.org/Public/5.1.0/ucd/NormalizationTest.txt ... test_ntpath test_old_mailbox test_openpty test_operator test_optparse test_os [16621 refs] [16621 refs] test_ossaudiodev test_ossaudiodev skipped -- Use of the `audio' resource not enabled test_parser Expecting 's_push: parser stack overflow' in next line s_push: parser stack overflow test_pdb test_peepholer test_pep247 test_pep263 test_pep277 test_pep292 test_pep352 test_pickle test_pickletools test_pipes test_pkg test_pkgimport test_pkgutil test_platform [18017 refs] [18017 refs] test_plistlib test_poll test_popen [16626 refs] [16626 refs] [16626 refs] test_popen2 test_poplib test_posix test_posixpath test_pow test_pprint test_print test_profile test_profilehooks test_property test_pstats test_pty test_pwd test_py3kwarn test_py3kwarn skipped -- test.test_py3kwarn must be run with the -3 flag test_pyclbr test_pydoc [21734 refs] [21734 refs] [21734 refs] [21734 refs] [21734 refs] [21733 refs] [21733 refs] test_pyexpat test_queue test_quopri [19449 refs] [19449 refs] test_random test_re test_readline test_repr test_resource test_rfc822 test_richcmp test_robotparser test_runpy test_sax test_scope test_scriptpackages test_scriptpackages skipped -- No module named aetools test_select test_set test_setcomps test_sets test_sgmllib test_sha test_shelve test_shlex test_shutil test_signal test_site [16621 refs] [16621 refs] [16621 refs] [16621 refs] test_slice test_smtplib test_smtpnet test_smtpnet skipped -- Use of the `network' resource not enabled test_socket test_socketserver test_socketserver skipped -- Use of the `network' resource not enabled test_softspace test_sort test_sqlite test_ssl test_startfile test_startfile skipped -- module os has no attribute startfile test_str test_strftime test_string test_stringprep test_strop test_strptime test_strtod test_struct test_structmembers test_structseq test_subprocess [16621 refs] [16621 refs] [16621 refs] [16621 refs] [16621 refs] [16621 refs] [16621 refs] [16621 refs] [16621 refs] [16621 refs] [16621 refs] [16621 refs] [16621 refs] [16621 refs] [16836 refs] [16621 refs] [16621 refs] [16621 refs] [16621 refs] [16621 refs] . [16621 refs] [16621 refs] this bit of output is from a test of stdout in a different process ... [16621 refs] [16621 refs] [16836 refs] [16621 refs] [16621 refs] [16621 refs] Traceback (most recent call last): File "", line 1, in KeyboardInterrupt [16621 refs] [16621 refs] [16621 refs] [16621 refs] [16621 refs] [16621 refs] [16621 refs] [16621 refs] [16621 refs] [16621 refs] [16621 refs] [16621 refs] [16621 refs] [16621 refs] [16621 refs] [16836 refs] [16621 refs] [16621 refs] [16621 refs] [16621 refs] [16621 refs] . [16621 refs] [16621 refs] this bit of output is from a test of stdout in a different process ... [16621 refs] [16621 refs] [16836 refs] test_sunaudiodev test_sunaudiodev skipped -- No module named sunaudiodev test_sundry test_symtable test_syntax test_sys [16621 refs] [16621 refs] [16621 refs] [16850 refs] [16644 refs] test_sysconfig [16621 refs] [16621 refs] test_tarfile test_tcl test_tcl skipped -- No module named _tkinter test_telnetlib test_tempfile [16621 refs] test_textwrap test_thread test_threaded_import test_threadedtempfile test_threading [19921 refs] [21092 refs] [20906 refs] [20906 refs] [20906 refs] [20906 refs] test_threading_local test_threadsignals test_time test_timeout test_timeout skipped -- Use of the `network' resource not enabled test_tk test_tk skipped -- No module named _tkinter test_tokenize test_trace test_traceback test_transformer test_ttk_guionly test_ttk_guionly skipped -- No module named _tkinter test_ttk_textonly test_ttk_textonly skipped -- No module named _tkinter test_tuple test_typechecks test_ucn test_unary test_undocumented_details test_unicode test_unicode_file test_unicode_file skipped -- No Unicode filesystem semantics on this platform. test_unicodedata test_univnewlines test_univnewlines2k test_unpack test_urllib test_urllib2 test_urllib2_localnet test_urllib2net test_urllib2net skipped -- Use of the `network' resource not enabled test_urllibnet test_urllibnet skipped -- Use of the `network' resource not enabled test_urlparse test_userdict test_userlist test_userstring test_uu test_uuid WARNING: uuid.getnode is unreliable on many platforms. It is disabled until the code and/or test can be fixed properly. WARNING: uuid._ifconfig_getnode is unreliable on many platforms. It is disabled until the code and/or test can be fixed properly. WARNING: uuid._unixdll_getnode is unreliable on many platforms. It is disabled until the code and/or test can be fixed properly. test_wait3 test_wait4 test_warnings test_wave test_weakref test_whichdb test_winreg test_winreg skipped -- No module named _winreg test_winsound test_winsound skipped -- No module named winsound test_with test_wsgiref test_xdrlib test_xml_etree ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 770, in test.test_xml_etree.custom_builder Failed example: parser.feed(open("samples/simple.xml", "r").read()) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in parser.feed(open("samples/simple.xml", "r").read()) IOError: [Errno 2] No such file or directory: 'samples/simple.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 793, in test.test_xml_etree.custom_builder Failed example: parser.feed(open("samples/simple-ns.xml", "r").read()) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in parser.feed(open("samples/simple-ns.xml", "r").read()) IOError: [Errno 2] No such file or directory: 'samples/simple-ns.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 421, in test.test_xml_etree.file_init Failed example: tree = ET.ElementTree(file="samples/simple.xml") Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in tree = ET.ElementTree(file="samples/simple.xml") File "/tmp/python-test/local/lib/python2.7/xml/etree/ElementTree.py", line 611, in __init__ self.parse(file) File "/tmp/python-test/local/lib/python2.7/xml/etree/ElementTree.py", line 646, in parse source = open(source, "rb") IOError: [Errno 2] No such file or directory: 'samples/simple.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 422, in test.test_xml_etree.file_init Failed example: tree.find("element").tag Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in tree.find("element").tag AttributeError: 'NoneType' object has no attribute 'tag' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 424, in test.test_xml_etree.file_init Failed example: tree.find("element/../empty-element").tag Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in tree.find("element/../empty-element").tag AttributeError: 'NoneType' object has no attribute 'tag' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 811, in test.test_xml_etree.getchildren Failed example: tree = ET.parse(open("samples/simple.xml", "r")) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in tree = ET.parse(open("samples/simple.xml", "r")) IOError: [Errno 2] No such file or directory: 'samples/simple.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 812, in test.test_xml_etree.getchildren Failed example: for elem in tree.getroot().iter(): summarize_list(elem.getchildren()) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in for elem in tree.getroot().iter(): NameError: name 'tree' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 818, in test.test_xml_etree.getchildren Failed example: for elem in tree.getiterator(): summarize_list(elem.getchildren()) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in for elem in tree.getiterator(): NameError: name 'tree' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 647, in test.test_xml_etree.iterparse Failed example: context = iterparse("samples/simple.xml") Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in context = iterparse("samples/simple.xml") File "/tmp/python-test/local/lib/python2.7/xml/etree/ElementTree.py", line 1192, in iterparse source = open(source, "rb") IOError: [Errno 2] No such file or directory: 'samples/simple.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 648, in test.test_xml_etree.iterparse Failed example: action, elem = next(context) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in action, elem = next(context) NameError: name 'context' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 649, in test.test_xml_etree.iterparse Failed example: print action, elem.tag Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in print action, elem.tag NameError: name 'action' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 651, in test.test_xml_etree.iterparse Failed example: for action, elem in context: print action, elem.tag Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in for action, elem in context: NameError: name 'context' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 656, in test.test_xml_etree.iterparse Failed example: context.root.tag Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in context.root.tag NameError: name 'context' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 659, in test.test_xml_etree.iterparse Failed example: context = iterparse("samples/simple-ns.xml") Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in context = iterparse("samples/simple-ns.xml") File "/tmp/python-test/local/lib/python2.7/xml/etree/ElementTree.py", line 1192, in iterparse source = open(source, "rb") IOError: [Errno 2] No such file or directory: 'samples/simple-ns.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 660, in test.test_xml_etree.iterparse Failed example: for action, elem in context: print action, elem.tag Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in for action, elem in context: NameError: name 'context' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 668, in test.test_xml_etree.iterparse Failed example: context = iterparse("samples/simple.xml", events) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in context = iterparse("samples/simple.xml", events) File "/tmp/python-test/local/lib/python2.7/xml/etree/ElementTree.py", line 1192, in iterparse source = open(source, "rb") IOError: [Errno 2] No such file or directory: 'samples/simple.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 669, in test.test_xml_etree.iterparse Failed example: for action, elem in context: print action, elem.tag Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in for action, elem in context: NameError: name 'context' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 673, in test.test_xml_etree.iterparse Failed example: context = iterparse("samples/simple.xml", events=events) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in context = iterparse("samples/simple.xml", events=events) File "/tmp/python-test/local/lib/python2.7/xml/etree/ElementTree.py", line 1192, in iterparse source = open(source, "rb") IOError: [Errno 2] No such file or directory: 'samples/simple.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 674, in test.test_xml_etree.iterparse Failed example: for action, elem in context: print action, elem.tag Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in for action, elem in context: NameError: name 'context' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 678, in test.test_xml_etree.iterparse Failed example: context = iterparse("samples/simple.xml", events) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in context = iterparse("samples/simple.xml", events) File "/tmp/python-test/local/lib/python2.7/xml/etree/ElementTree.py", line 1192, in iterparse source = open(source, "rb") IOError: [Errno 2] No such file or directory: 'samples/simple.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 679, in test.test_xml_etree.iterparse Failed example: for action, elem in context: print action, elem.tag Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in for action, elem in context: NameError: name 'context' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 691, in test.test_xml_etree.iterparse Failed example: context = iterparse("samples/simple-ns.xml", events) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in context = iterparse("samples/simple-ns.xml", events) File "/tmp/python-test/local/lib/python2.7/xml/etree/ElementTree.py", line 1192, in iterparse source = open(source, "rb") IOError: [Errno 2] No such file or directory: 'samples/simple-ns.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 692, in test.test_xml_etree.iterparse Failed example: for action, elem in context: if action in ("start", "end"): print action, elem.tag else: print action, elem Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in for action, elem in context: NameError: name 'context' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 709, in test.test_xml_etree.iterparse Failed example: context = iterparse("samples/simple.xml", events) Expected: Traceback (most recent call last): ValueError: unknown event 'bogus' Got: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in context = iterparse("samples/simple.xml", events) File "/tmp/python-test/local/lib/python2.7/xml/etree/ElementTree.py", line 1192, in iterparse source = open(source, "rb") IOError: [Errno 2] No such file or directory: 'samples/simple.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 567, in test.test_xml_etree.parsefile Failed example: tree = ET.parse("samples/simple.xml") Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in tree = ET.parse("samples/simple.xml") File "/tmp/python-test/local/lib/python2.7/xml/etree/ElementTree.py", line 1176, in parse tree.parse(source, parser) File "/tmp/python-test/local/lib/python2.7/xml/etree/ElementTree.py", line 646, in parse source = open(source, "rb") IOError: [Errno 2] No such file or directory: 'samples/simple.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 568, in test.test_xml_etree.parsefile Failed example: normalize_crlf(tree) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in normalize_crlf(tree) NameError: name 'tree' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 569, in test.test_xml_etree.parsefile Failed example: tree.write(sys.stdout) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in tree.write(sys.stdout) NameError: name 'tree' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 575, in test.test_xml_etree.parsefile Failed example: tree = ET.parse("samples/simple-ns.xml") Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in tree = ET.parse("samples/simple-ns.xml") File "/tmp/python-test/local/lib/python2.7/xml/etree/ElementTree.py", line 1176, in parse tree.parse(source, parser) File "/tmp/python-test/local/lib/python2.7/xml/etree/ElementTree.py", line 646, in parse source = open(source, "rb") IOError: [Errno 2] No such file or directory: 'samples/simple-ns.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 576, in test.test_xml_etree.parsefile Failed example: normalize_crlf(tree) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in normalize_crlf(tree) NameError: name 'tree' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 577, in test.test_xml_etree.parsefile Failed example: tree.write(sys.stdout) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in tree.write(sys.stdout) NameError: name 'tree' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 587, in test.test_xml_etree.parsefile Failed example: parser.feed(open("samples/simple.xml").read()) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in parser.feed(open("samples/simple.xml").read()) IOError: [Errno 2] No such file or directory: 'samples/simple.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 588, in test.test_xml_etree.parsefile Failed example: print serialize(parser.close()) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in print serialize(parser.close()) File "/tmp/python-test/local/lib/python2.7/xml/etree/ElementTree.py", line 1635, in close self._raiseerror(v) File "/tmp/python-test/local/lib/python2.7/xml/etree/ElementTree.py", line 1487, in _raiseerror raise err ParseError: no element found: line 1, column 0 ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 596, in test.test_xml_etree.parsefile Failed example: parser.feed(open("samples/simple.xml").read()) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in parser.feed(open("samples/simple.xml").read()) IOError: [Errno 2] No such file or directory: 'samples/simple.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 597, in test.test_xml_etree.parsefile Failed example: print serialize(parser.close()) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in print serialize(parser.close()) File "/tmp/python-test/local/lib/python2.7/xml/etree/ElementTree.py", line 1635, in close self._raiseerror(v) File "/tmp/python-test/local/lib/python2.7/xml/etree/ElementTree.py", line 1487, in _raiseerror raise err ParseError: no element found: line 1, column 0 ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 606, in test.test_xml_etree.parsefile Failed example: parser.feed(open("samples/simple.xml").read()) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in parser.feed(open("samples/simple.xml").read()) IOError: [Errno 2] No such file or directory: 'samples/simple.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 607, in test.test_xml_etree.parsefile Failed example: print serialize(parser.close()) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in print serialize(parser.close()) File "/tmp/python-test/local/lib/python2.7/xml/etree/ElementTree.py", line 1635, in close self._raiseerror(v) File "/tmp/python-test/local/lib/python2.7/xml/etree/ElementTree.py", line 1487, in _raiseerror raise err ParseError: no element found: line 1, column 0 ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 1361, in test.test_xml_etree.xinclude_default Failed example: ElementInclude.include(document) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in ElementInclude.include(document) File "/tmp/python-test/local/lib/python2.7/xml/etree/ElementInclude.py", line 111, in include node = loader(href, parse) File "/tmp/python-test/local/lib/python2.7/xml/etree/ElementInclude.py", line 78, in default_loader file = open(href) IOError: [Errno 2] No such file or directory: 'samples/simple.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 1362, in test.test_xml_etree.xinclude_default Failed example: print serialize(document) # default Expected:

    Example.

    text texttail
    Got:

    Example.

    ********************************************************************** 6 items had failures: 2 of 8 in test.test_xml_etree.custom_builder 3 of 8 in test.test_xml_etree.file_init 3 of 19 in test.test_xml_etree.getchildren 16 of 29 in test.test_xml_etree.iterparse 12 of 17 in test.test_xml_etree.parsefile 2 of 4 in test.test_xml_etree.xinclude_default ***Test Failed*** 38 failures. test test_xml_etree failed -- 38 of 591 doctests failed Re-running test 'test_xml_etree' in verbose mode ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 770, in test.test_xml_etree.custom_builder Failed example: parser.feed(open("samples/simple.xml", "r").read()) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in parser.feed(open("samples/simple.xml", "r").read()) IOError: [Errno 2] No such file or directory: 'samples/simple.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 793, in test.test_xml_etree.custom_builder Failed example: parser.feed(open("samples/simple-ns.xml", "r").read()) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in parser.feed(open("samples/simple-ns.xml", "r").read()) IOError: [Errno 2] No such file or directory: 'samples/simple-ns.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 421, in test.test_xml_etree.file_init Failed example: tree = ET.ElementTree(file="samples/simple.xml") Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in tree = ET.ElementTree(file="samples/simple.xml") File "/tmp/python-test/local/lib/python2.7/xml/etree/ElementTree.py", line 611, in __init__ self.parse(file) File "/tmp/python-test/local/lib/python2.7/xml/etree/ElementTree.py", line 646, in parse source = open(source, "rb") IOError: [Errno 2] No such file or directory: 'samples/simple.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 422, in test.test_xml_etree.file_init Failed example: tree.find("element").tag Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in tree.find("element").tag AttributeError: 'NoneType' object has no attribute 'tag' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 424, in test.test_xml_etree.file_init Failed example: tree.find("element/../empty-element").tag Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in tree.find("element/../empty-element").tag AttributeError: 'NoneType' object has no attribute 'tag' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 811, in test.test_xml_etree.getchildren Failed example: tree = ET.parse(open("samples/simple.xml", "r")) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in tree = ET.parse(open("samples/simple.xml", "r")) IOError: [Errno 2] No such file or directory: 'samples/simple.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 812, in test.test_xml_etree.getchildren Failed example: for elem in tree.getroot().iter(): summarize_list(elem.getchildren()) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in for elem in tree.getroot().iter(): NameError: name 'tree' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 818, in test.test_xml_etree.getchildren Failed example: for elem in tree.getiterator(): summarize_list(elem.getchildren()) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in for elem in tree.getiterator(): NameError: name 'tree' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 647, in test.test_xml_etree.iterparse Failed example: context = iterparse("samples/simple.xml") Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in context = iterparse("samples/simple.xml") File "/tmp/python-test/local/lib/python2.7/xml/etree/ElementTree.py", line 1192, in iterparse source = open(source, "rb") IOError: [Errno 2] No such file or directory: 'samples/simple.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 648, in test.test_xml_etree.iterparse Failed example: action, elem = next(context) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in action, elem = next(context) NameError: name 'context' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 649, in test.test_xml_etree.iterparse Failed example: print action, elem.tag Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in print action, elem.tag NameError: name 'action' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 651, in test.test_xml_etree.iterparse Failed example: for action, elem in context: print action, elem.tag Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in for action, elem in context: NameError: name 'context' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 656, in test.test_xml_etree.iterparse Failed example: context.root.tag Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in context.root.tag NameError: name 'context' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 659, in test.test_xml_etree.iterparse Failed example: context = iterparse("samples/simple-ns.xml") Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in context = iterparse("samples/simple-ns.xml") File "/tmp/python-test/local/lib/python2.7/xml/etree/ElementTree.py", line 1192, in iterparse source = open(source, "rb") IOError: [Errno 2] No such file or directory: 'samples/simple-ns.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 660, in test.test_xml_etree.iterparse Failed example: for action, elem in context: print action, elem.tag Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in for action, elem in context: NameError: name 'context' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 668, in test.test_xml_etree.iterparse Failed example: context = iterparse("samples/simple.xml", events) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in context = iterparse("samples/simple.xml", events) File "/tmp/python-test/local/lib/python2.7/xml/etree/ElementTree.py", line 1192, in iterparse source = open(source, "rb") IOError: [Errno 2] No such file or directory: 'samples/simple.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 669, in test.test_xml_etree.iterparse Failed example: for action, elem in context: print action, elem.tag Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in for action, elem in context: NameError: name 'context' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 673, in test.test_xml_etree.iterparse Failed example: context = iterparse("samples/simple.xml", events=events) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in context = iterparse("samples/simple.xml", events=events) File "/tmp/python-test/local/lib/python2.7/xml/etree/ElementTree.py", line 1192, in iterparse source = open(source, "rb") IOError: [Errno 2] No such file or directory: 'samples/simple.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 674, in test.test_xml_etree.iterparse Failed example: for action, elem in context: print action, elem.tag Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in for action, elem in context: NameError: name 'context' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 678, in test.test_xml_etree.iterparse Failed example: context = iterparse("samples/simple.xml", events) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in context = iterparse("samples/simple.xml", events) File "/tmp/python-test/local/lib/python2.7/xml/etree/ElementTree.py", line 1192, in iterparse source = open(source, "rb") IOError: [Errno 2] No such file or directory: 'samples/simple.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 679, in test.test_xml_etree.iterparse Failed example: for action, elem in context: print action, elem.tag Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in for action, elem in context: NameError: name 'context' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 691, in test.test_xml_etree.iterparse Failed example: context = iterparse("samples/simple-ns.xml", events) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in context = iterparse("samples/simple-ns.xml", events) File "/tmp/python-test/local/lib/python2.7/xml/etree/ElementTree.py", line 1192, in iterparse source = open(source, "rb") IOError: [Errno 2] No such file or directory: 'samples/simple-ns.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 692, in test.test_xml_etree.iterparse Failed example: for action, elem in context: if action in ("start", "end"): print action, elem.tag else: print action, elem Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in for action, elem in context: NameError: name 'context' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 709, in test.test_xml_etree.iterparse Failed example: context = iterparse("samples/simple.xml", events) Expected: Traceback (most recent call last): ValueError: unknown event 'bogus' Got: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in context = iterparse("samples/simple.xml", events) File "/tmp/python-test/local/lib/python2.7/xml/etree/ElementTree.py", line 1192, in iterparse source = open(source, "rb") IOError: [Errno 2] No such file or directory: 'samples/simple.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 567, in test.test_xml_etree.parsefile Failed example: tree = ET.parse("samples/simple.xml") Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in tree = ET.parse("samples/simple.xml") File "/tmp/python-test/local/lib/python2.7/xml/etree/ElementTree.py", line 1176, in parse tree.parse(source, parser) File "/tmp/python-test/local/lib/python2.7/xml/etree/ElementTree.py", line 646, in parse source = open(source, "rb") IOError: [Errno 2] No such file or directory: 'samples/simple.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 568, in test.test_xml_etree.parsefile Failed example: normalize_crlf(tree) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in normalize_crlf(tree) NameError: name 'tree' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 569, in test.test_xml_etree.parsefile Failed example: tree.write(sys.stdout) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in tree.write(sys.stdout) NameError: name 'tree' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 575, in test.test_xml_etree.parsefile Failed example: tree = ET.parse("samples/simple-ns.xml") Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in tree = ET.parse("samples/simple-ns.xml") File "/tmp/python-test/local/lib/python2.7/xml/etree/ElementTree.py", line 1176, in parse tree.parse(source, parser) File "/tmp/python-test/local/lib/python2.7/xml/etree/ElementTree.py", line 646, in parse source = open(source, "rb") IOError: [Errno 2] No such file or directory: 'samples/simple-ns.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 576, in test.test_xml_etree.parsefile Failed example: normalize_crlf(tree) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in normalize_crlf(tree) NameError: name 'tree' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 577, in test.test_xml_etree.parsefile Failed example: tree.write(sys.stdout) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in tree.write(sys.stdout) NameError: name 'tree' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 587, in test.test_xml_etree.parsefile Failed example: parser.feed(open("samples/simple.xml").read()) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in parser.feed(open("samples/simple.xml").read()) IOError: [Errno 2] No such file or directory: 'samples/simple.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 588, in test.test_xml_etree.parsefile Failed example: print serialize(parser.close()) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in print serialize(parser.close()) File "/tmp/python-test/local/lib/python2.7/xml/etree/ElementTree.py", line 1635, in close self._raiseerror(v) File "/tmp/python-test/local/lib/python2.7/xml/etree/ElementTree.py", line 1487, in _raiseerror raise err ParseError: no element found: line 1, column 0 ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 596, in test.test_xml_etree.parsefile Failed example: parser.feed(open("samples/simple.xml").read()) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in parser.feed(open("samples/simple.xml").read()) IOError: [Errno 2] No such file or directory: 'samples/simple.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 597, in test.test_xml_etree.parsefile Failed example: print serialize(parser.close()) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in print serialize(parser.close()) File "/tmp/python-test/local/lib/python2.7/xml/etree/ElementTree.py", line 1635, in close self._raiseerror(v) File "/tmp/python-test/local/lib/python2.7/xml/etree/ElementTree.py", line 1487, in _raiseerror raise err ParseError: no element found: line 1, column 0 ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 606, in test.test_xml_etree.parsefile Failed example: parser.feed(open("samples/simple.xml").read()) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in parser.feed(open("samples/simple.xml").read()) IOError: [Errno 2] No such file or directory: 'samples/simple.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 607, in test.test_xml_etree.parsefile Failed example: print serialize(parser.close()) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in print serialize(parser.close()) File "/tmp/python-test/local/lib/python2.7/xml/etree/ElementTree.py", line 1635, in close self._raiseerror(v) File "/tmp/python-test/local/lib/python2.7/xml/etree/ElementTree.py", line 1487, in _raiseerror raise err ParseError: no element found: line 1, column 0 ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 1361, in test.test_xml_etree.xinclude_default Failed example: ElementInclude.include(document) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in ElementInclude.include(document) File "/tmp/python-test/local/lib/python2.7/xml/etree/ElementInclude.py", line 111, in include node = loader(href, parse) File "/tmp/python-test/local/lib/python2.7/xml/etree/ElementInclude.py", line 78, in default_loader file = open(href) IOError: [Errno 2] No such file or directory: 'samples/simple.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 1362, in test.test_xml_etree.xinclude_default Failed example: print serialize(document) # default Expected:

    Example.

    text texttail
    Got:

    Example.

    ********************************************************************** 6 items had failures: 2 of 8 in test.test_xml_etree.custom_builder 3 of 8 in test.test_xml_etree.file_init 3 of 19 in test.test_xml_etree.getchildren 16 of 29 in test.test_xml_etree.iterparse 12 of 17 in test.test_xml_etree.parsefile 2 of 4 in test.test_xml_etree.xinclude_default ***Test Failed*** 38 failures. test test_xml_etree failed -- 38 of 591 doctests failed test_xml_etree_c ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 770, in test.test_xml_etree.custom_builder Failed example: parser.feed(open("samples/simple.xml", "r").read()) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in parser.feed(open("samples/simple.xml", "r").read()) IOError: [Errno 2] No such file or directory: 'samples/simple.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 793, in test.test_xml_etree.custom_builder Failed example: parser.feed(open("samples/simple-ns.xml", "r").read()) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in parser.feed(open("samples/simple-ns.xml", "r").read()) IOError: [Errno 2] No such file or directory: 'samples/simple-ns.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 421, in test.test_xml_etree.file_init Failed example: tree = ET.ElementTree(file="samples/simple.xml") Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in tree = ET.ElementTree(file="samples/simple.xml") File "/tmp/python-test/local/lib/python2.7/xml/etree/ElementTree.py", line 611, in __init__ self.parse(file) File "", line 25, in parse IOError: [Errno 2] No such file or directory: 'samples/simple.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 422, in test.test_xml_etree.file_init Failed example: tree.find("element").tag Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in tree.find("element").tag AttributeError: 'NoneType' object has no attribute 'tag' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 424, in test.test_xml_etree.file_init Failed example: tree.find("element/../empty-element").tag Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in tree.find("element/../empty-element").tag AttributeError: 'NoneType' object has no attribute 'tag' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 811, in test.test_xml_etree.getchildren Failed example: tree = ET.parse(open("samples/simple.xml", "r")) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in tree = ET.parse(open("samples/simple.xml", "r")) IOError: [Errno 2] No such file or directory: 'samples/simple.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 812, in test.test_xml_etree.getchildren Failed example: for elem in tree.getroot().iter(): summarize_list(elem.getchildren()) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in for elem in tree.getroot().iter(): NameError: name 'tree' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 818, in test.test_xml_etree.getchildren Failed example: for elem in tree.getiterator(): summarize_list(elem.getchildren()) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in for elem in tree.getiterator(): NameError: name 'tree' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 647, in test.test_xml_etree.iterparse Failed example: context = iterparse("samples/simple.xml") Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in context = iterparse("samples/simple.xml") File "", line 63, in __init__ IOError: [Errno 2] No such file or directory: 'samples/simple.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 648, in test.test_xml_etree.iterparse Failed example: action, elem = next(context) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in action, elem = next(context) NameError: name 'context' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 649, in test.test_xml_etree.iterparse Failed example: print action, elem.tag Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in print action, elem.tag NameError: name 'action' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 651, in test.test_xml_etree.iterparse Failed example: for action, elem in context: print action, elem.tag Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in for action, elem in context: NameError: name 'context' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 656, in test.test_xml_etree.iterparse Failed example: context.root.tag Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in context.root.tag NameError: name 'context' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 659, in test.test_xml_etree.iterparse Failed example: context = iterparse("samples/simple-ns.xml") Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in context = iterparse("samples/simple-ns.xml") File "", line 63, in __init__ IOError: [Errno 2] No such file or directory: 'samples/simple-ns.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 660, in test.test_xml_etree.iterparse Failed example: for action, elem in context: print action, elem.tag Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in for action, elem in context: NameError: name 'context' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 668, in test.test_xml_etree.iterparse Failed example: context = iterparse("samples/simple.xml", events) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in context = iterparse("samples/simple.xml", events) File "", line 63, in __init__ IOError: [Errno 2] No such file or directory: 'samples/simple.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 669, in test.test_xml_etree.iterparse Failed example: for action, elem in context: print action, elem.tag Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in for action, elem in context: NameError: name 'context' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 673, in test.test_xml_etree.iterparse Failed example: context = iterparse("samples/simple.xml", events=events) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in context = iterparse("samples/simple.xml", events=events) File "", line 63, in __init__ IOError: [Errno 2] No such file or directory: 'samples/simple.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 674, in test.test_xml_etree.iterparse Failed example: for action, elem in context: print action, elem.tag Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in for action, elem in context: NameError: name 'context' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 678, in test.test_xml_etree.iterparse Failed example: context = iterparse("samples/simple.xml", events) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in context = iterparse("samples/simple.xml", events) File "", line 63, in __init__ IOError: [Errno 2] No such file or directory: 'samples/simple.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 679, in test.test_xml_etree.iterparse Failed example: for action, elem in context: print action, elem.tag Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in for action, elem in context: NameError: name 'context' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 691, in test.test_xml_etree.iterparse Failed example: context = iterparse("samples/simple-ns.xml", events) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in context = iterparse("samples/simple-ns.xml", events) File "", line 63, in __init__ IOError: [Errno 2] No such file or directory: 'samples/simple-ns.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 692, in test.test_xml_etree.iterparse Failed example: for action, elem in context: if action in ("start", "end"): print action, elem.tag else: print action, elem Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in for action, elem in context: NameError: name 'context' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 709, in test.test_xml_etree.iterparse Failed example: context = iterparse("samples/simple.xml", events) Expected: Traceback (most recent call last): ValueError: unknown event 'bogus' Got: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in context = iterparse("samples/simple.xml", events) File "", line 63, in __init__ IOError: [Errno 2] No such file or directory: 'samples/simple.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 567, in test.test_xml_etree.parsefile Failed example: tree = ET.parse("samples/simple.xml") Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in tree = ET.parse("samples/simple.xml") File "", line 56, in parse File "", line 25, in parse IOError: [Errno 2] No such file or directory: 'samples/simple.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 568, in test.test_xml_etree.parsefile Failed example: normalize_crlf(tree) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in normalize_crlf(tree) NameError: name 'tree' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 569, in test.test_xml_etree.parsefile Failed example: tree.write(sys.stdout) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in tree.write(sys.stdout) NameError: name 'tree' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 575, in test.test_xml_etree.parsefile Failed example: tree = ET.parse("samples/simple-ns.xml") Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in tree = ET.parse("samples/simple-ns.xml") File "", line 56, in parse File "", line 25, in parse IOError: [Errno 2] No such file or directory: 'samples/simple-ns.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 576, in test.test_xml_etree.parsefile Failed example: normalize_crlf(tree) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in normalize_crlf(tree) NameError: name 'tree' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 577, in test.test_xml_etree.parsefile Failed example: tree.write(sys.stdout) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in tree.write(sys.stdout) NameError: name 'tree' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 587, in test.test_xml_etree.parsefile Failed example: parser.feed(open("samples/simple.xml").read()) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in parser.feed(open("samples/simple.xml").read()) IOError: [Errno 2] No such file or directory: 'samples/simple.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 588, in test.test_xml_etree.parsefile Failed example: print serialize(parser.close()) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in print serialize(parser.close()) ParseError: no element found: line 1, column 0 ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 596, in test.test_xml_etree.parsefile Failed example: parser.feed(open("samples/simple.xml").read()) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in parser.feed(open("samples/simple.xml").read()) IOError: [Errno 2] No such file or directory: 'samples/simple.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 597, in test.test_xml_etree.parsefile Failed example: print serialize(parser.close()) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in print serialize(parser.close()) ParseError: no element found: line 1, column 0 ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 606, in test.test_xml_etree.parsefile Failed example: parser.feed(open("samples/simple.xml").read()) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in parser.feed(open("samples/simple.xml").read()) IOError: [Errno 2] No such file or directory: 'samples/simple.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 607, in test.test_xml_etree.parsefile Failed example: print serialize(parser.close()) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in print serialize(parser.close()) ParseError: no element found: line 1, column 0 ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 1361, in test.test_xml_etree.xinclude_default Failed example: ElementInclude.include(document) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in ElementInclude.include(document) File "/tmp/python-test/local/lib/python2.7/xml/etree/ElementInclude.py", line 111, in include node = loader(href, parse) File "/tmp/python-test/local/lib/python2.7/xml/etree/ElementInclude.py", line 78, in default_loader file = open(href) IOError: [Errno 2] No such file or directory: 'samples/simple.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 1362, in test.test_xml_etree.xinclude_default Failed example: print serialize(document) # default Expected:

    Example.

    text texttail
    Got:

    Example.

    ********************************************************************** 6 items had failures: 2 of 8 in test.test_xml_etree.custom_builder 3 of 8 in test.test_xml_etree.file_init 3 of 19 in test.test_xml_etree.getchildren 16 of 29 in test.test_xml_etree.iterparse 12 of 17 in test.test_xml_etree.parsefile 2 of 4 in test.test_xml_etree.xinclude_default ***Test Failed*** 38 failures. test test_xml_etree_c failed -- 38 of 591 doctests failed Re-running test 'test_xml_etree_c' in verbose mode doctest (test.test_xml_etree_c) ... 1 tests with zero failures ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 770, in test.test_xml_etree.custom_builder Failed example: parser.feed(open("samples/simple.xml", "r").read()) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in parser.feed(open("samples/simple.xml", "r").read()) IOError: [Errno 2] No such file or directory: 'samples/simple.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 793, in test.test_xml_etree.custom_builder Failed example: parser.feed(open("samples/simple-ns.xml", "r").read()) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in parser.feed(open("samples/simple-ns.xml", "r").read()) IOError: [Errno 2] No such file or directory: 'samples/simple-ns.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 421, in test.test_xml_etree.file_init Failed example: tree = ET.ElementTree(file="samples/simple.xml") Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in tree = ET.ElementTree(file="samples/simple.xml") File "/tmp/python-test/local/lib/python2.7/xml/etree/ElementTree.py", line 611, in __init__ self.parse(file) File "", line 25, in parse IOError: [Errno 2] No such file or directory: 'samples/simple.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 422, in test.test_xml_etree.file_init Failed example: tree.find("element").tag Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in tree.find("element").tag AttributeError: 'NoneType' object has no attribute 'tag' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 424, in test.test_xml_etree.file_init Failed example: tree.find("element/../empty-element").tag Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in tree.find("element/../empty-element").tag AttributeError: 'NoneType' object has no attribute 'tag' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 811, in test.test_xml_etree.getchildren Failed example: tree = ET.parse(open("samples/simple.xml", "r")) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in tree = ET.parse(open("samples/simple.xml", "r")) IOError: [Errno 2] No such file or directory: 'samples/simple.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 812, in test.test_xml_etree.getchildren Failed example: for elem in tree.getroot().iter(): summarize_list(elem.getchildren()) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in for elem in tree.getroot().iter(): NameError: name 'tree' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 818, in test.test_xml_etree.getchildren Failed example: for elem in tree.getiterator(): summarize_list(elem.getchildren()) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in for elem in tree.getiterator(): NameError: name 'tree' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 647, in test.test_xml_etree.iterparse Failed example: context = iterparse("samples/simple.xml") Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in context = iterparse("samples/simple.xml") File "", line 63, in __init__ IOError: [Errno 2] No such file or directory: 'samples/simple.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 648, in test.test_xml_etree.iterparse Failed example: action, elem = next(context) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in action, elem = next(context) NameError: name 'context' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 649, in test.test_xml_etree.iterparse Failed example: print action, elem.tag Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in print action, elem.tag NameError: name 'action' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 651, in test.test_xml_etree.iterparse Failed example: for action, elem in context: print action, elem.tag Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in for action, elem in context: NameError: name 'context' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 656, in test.test_xml_etree.iterparse Failed example: context.root.tag Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in context.root.tag NameError: name 'context' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 659, in test.test_xml_etree.iterparse Failed example: context = iterparse("samples/simple-ns.xml") Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in context = iterparse("samples/simple-ns.xml") File "", line 63, in __init__ IOError: [Errno 2] No such file or directory: 'samples/simple-ns.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 660, in test.test_xml_etree.iterparse Failed example: for action, elem in context: print action, elem.tag Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in for action, elem in context: NameError: name 'context' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 668, in test.test_xml_etree.iterparse Failed example: context = iterparse("samples/simple.xml", events) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in context = iterparse("samples/simple.xml", events) File "", line 63, in __init__ IOError: [Errno 2] No such file or directory: 'samples/simple.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 669, in test.test_xml_etree.iterparse Failed example: for action, elem in context: print action, elem.tag Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in for action, elem in context: NameError: name 'context' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 673, in test.test_xml_etree.iterparse Failed example: context = iterparse("samples/simple.xml", events=events) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in context = iterparse("samples/simple.xml", events=events) File "", line 63, in __init__ IOError: [Errno 2] No such file or directory: 'samples/simple.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 674, in test.test_xml_etree.iterparse Failed example: for action, elem in context: print action, elem.tag Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in for action, elem in context: NameError: name 'context' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 678, in test.test_xml_etree.iterparse Failed example: context = iterparse("samples/simple.xml", events) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in context = iterparse("samples/simple.xml", events) File "", line 63, in __init__ IOError: [Errno 2] No such file or directory: 'samples/simple.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 679, in test.test_xml_etree.iterparse Failed example: for action, elem in context: print action, elem.tag Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in for action, elem in context: NameError: name 'context' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 691, in test.test_xml_etree.iterparse Failed example: context = iterparse("samples/simple-ns.xml", events) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in context = iterparse("samples/simple-ns.xml", events) File "", line 63, in __init__ IOError: [Errno 2] No such file or directory: 'samples/simple-ns.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 692, in test.test_xml_etree.iterparse Failed example: for action, elem in context: if action in ("start", "end"): print action, elem.tag else: print action, elem Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in for action, elem in context: NameError: name 'context' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 709, in test.test_xml_etree.iterparse Failed example: context = iterparse("samples/simple.xml", events) Expected: Traceback (most recent call last): ValueError: unknown event 'bogus' Got: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in context = iterparse("samples/simple.xml", events) File "", line 63, in __init__ IOError: [Errno 2] No such file or directory: 'samples/simple.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 567, in test.test_xml_etree.parsefile Failed example: tree = ET.parse("samples/simple.xml") Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in tree = ET.parse("samples/simple.xml") File "", line 56, in parse File "", line 25, in parse IOError: [Errno 2] No such file or directory: 'samples/simple.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 568, in test.test_xml_etree.parsefile Failed example: normalize_crlf(tree) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in normalize_crlf(tree) NameError: name 'tree' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 569, in test.test_xml_etree.parsefile Failed example: tree.write(sys.stdout) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in tree.write(sys.stdout) NameError: name 'tree' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 575, in test.test_xml_etree.parsefile Failed example: tree = ET.parse("samples/simple-ns.xml") Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in tree = ET.parse("samples/simple-ns.xml") File "", line 56, in parse File "", line 25, in parse IOError: [Errno 2] No such file or directory: 'samples/simple-ns.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 576, in test.test_xml_etree.parsefile Failed example: normalize_crlf(tree) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in normalize_crlf(tree) NameError: name 'tree' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 577, in test.test_xml_etree.parsefile Failed example: tree.write(sys.stdout) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in tree.write(sys.stdout) NameError: name 'tree' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 587, in test.test_xml_etree.parsefile Failed example: parser.feed(open("samples/simple.xml").read()) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in parser.feed(open("samples/simple.xml").read()) IOError: [Errno 2] No such file or directory: 'samples/simple.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 588, in test.test_xml_etree.parsefile Failed example: print serialize(parser.close()) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in print serialize(parser.close()) ParseError: no element found: line 1, column 0 ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 596, in test.test_xml_etree.parsefile Failed example: parser.feed(open("samples/simple.xml").read()) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in parser.feed(open("samples/simple.xml").read()) IOError: [Errno 2] No such file or directory: 'samples/simple.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 597, in test.test_xml_etree.parsefile Failed example: print serialize(parser.close()) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in print serialize(parser.close()) ParseError: no element found: line 1, column 0 ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 606, in test.test_xml_etree.parsefile Failed example: parser.feed(open("samples/simple.xml").read()) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in parser.feed(open("samples/simple.xml").read()) IOError: [Errno 2] No such file or directory: 'samples/simple.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 607, in test.test_xml_etree.parsefile Failed example: print serialize(parser.close()) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in print serialize(parser.close()) ParseError: no element found: line 1, column 0 ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 1361, in test.test_xml_etree.xinclude_default Failed example: ElementInclude.include(document) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in ElementInclude.include(document) File "/tmp/python-test/local/lib/python2.7/xml/etree/ElementInclude.py", line 111, in include node = loader(href, parse) File "/tmp/python-test/local/lib/python2.7/xml/etree/ElementInclude.py", line 78, in default_loader file = open(href) IOError: [Errno 2] No such file or directory: 'samples/simple.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 1362, in test.test_xml_etree.xinclude_default Failed example: print serialize(document) # default Expected:

    Example.

    text texttail
    Got:

    Example.

    ********************************************************************** 6 items had failures: 2 of 8 in test.test_xml_etree.custom_builder 3 of 8 in test.test_xml_etree.file_init 3 of 19 in test.test_xml_etree.getchildren 16 of 29 in test.test_xml_etree.iterparse 12 of 17 in test.test_xml_etree.parsefile 2 of 4 in test.test_xml_etree.xinclude_default ***Test Failed*** 38 failures. test test_xml_etree_c failed -- 38 of 591 doctests failed test_xmllib test_xmlrpc test_xpickle test_xpickle -- skipping backwards compat tests. Use 'regrtest.py -u xpickle' to run them. test_xrange test_zipfile test_zipfile64 test_zipfile64 skipped -- test requires loads of disk-space bytes and a long time to run test_zipimport test_zipimport_support test_zlib 345 tests OK. 2 tests failed: test_xml_etree test_xml_etree_c 35 tests skipped: test_aepack test_al test_applesingle test_bsddb185 test_bsddb3 test_cd test_cl test_curses test_epoll test_gl test_imgfile test_ioctl test_kqueue test_linuxaudiodev test_macos test_macostools test_multiprocessing test_ossaudiodev test_py3kwarn test_scriptpackages test_smtpnet test_socketserver test_startfile test_sunaudiodev test_tcl test_timeout test_tk test_ttk_guionly test_ttk_textonly test_unicode_file test_urllib2net test_urllibnet test_winreg test_winsound test_zipfile64 6 skips unexpected on linux2: test_multiprocessing test_ttk_guionly test_epoll test_tk test_ioctl test_ttk_textonly [947570 refs] From nnorwitz at gmail.com Fri Mar 12 10:29:12 2010 From: nnorwitz at gmail.com (Neal Norwitz) Date: Fri, 12 Mar 2010 04:29:12 -0500 Subject: [Python-checkins] Python Regression Test Failures opt (2) Message-ID: <20100312092912.GA319@kbk-i386-bb.psfb.org> 345 tests OK. 2 tests failed: test_xml_etree test_xml_etree_c 35 tests skipped: test_aepack test_al test_applesingle test_bsddb185 test_bsddb3 test_cd test_cl test_curses test_epoll test_gl test_imgfile test_ioctl test_kqueue test_linuxaudiodev test_macos test_macostools test_multiprocessing test_ossaudiodev test_py3kwarn test_scriptpackages test_smtpnet test_socketserver test_startfile test_sunaudiodev test_tcl test_timeout test_tk test_ttk_guionly test_ttk_textonly test_unicode_file test_urllib2net test_urllibnet test_winreg test_winsound test_zipfile64 6 skips unexpected on linux2: test_multiprocessing test_ttk_guionly test_epoll test_tk test_ioctl test_ttk_textonly == CPython 2.7a4+ (trunk:78854M, Mar 12 2010, 04:01:49) [GCC 3.3.4 20040623 (Gentoo Linux 3.3.4-r1, ssp-3.3.2-2, pie-8.7.6)] == Linux-2.6.9-gentoo-r1-i686-AMD_Athlon-tm-_XP_3000+-with-gentoo-1.4.16 == /tmp/test_python_28686 test_grammar test_opcodes test_dict test_builtin test_exceptions test_types test_unittest test_doctest test_doctest2 test_MimeWriter test_SimpleHTTPServer test_StringIO test___all__ test___future__ test__locale test_abc test_abstract_numbers test_aepack test_aepack skipped -- No module named aetypes test_aifc test_al test_al skipped -- No module named al test_anydbm test_applesingle test_applesingle skipped -- No module named MacOS test_argparse test_array test_ascii_formatd test_ast test_asynchat test_asyncore test_atexit test_audioop test_augassign test_base64 test_bastion test_bigaddrspace test_bigmem test_binascii test_binhex test_binop test_bisect test_bool test_bsddb test_bsddb185 test_bsddb185 skipped -- No module named bsddb185 test_bsddb3 test_bsddb3 skipped -- Use of the `bsddb' resource not enabled test_buffer test_bufio test_bytes test_bz2 test_calendar test_call test_capi test_cd test_cd skipped -- No module named cd test_cfgparser test_cgi test_charmapcodec test_cl test_cl skipped -- No module named cl test_class test_cmath test_cmd test_cmd_line test_cmd_line_script test_code test_codeccallbacks test_codecencodings_cn test_codecencodings_hk test_codecencodings_jp test_codecencodings_kr test_codecencodings_tw test_codecmaps_cn test_codecmaps_hk test_codecmaps_jp test_codecmaps_kr test_codecmaps_tw test_codecs test_codeop test_coding test_coercion test_collections test_colorsys test_commands test_compare test_compile test_compileall test_compiler test_complex test_complex_args test_contains test_contextlib test_cookie test_cookielib test_copy test_copy_reg test_cpickle test_cprofile test_crypt test_csv test_ctypes test_curses test_curses skipped -- Use of the `curses' resource not enabled test_datetime test_dbm test_decimal test_decorators test_defaultdict test_deque test_descr test_descrtut test_dictcomps test_dictviews test_difflib test_dircache test_dis test_distutils [20623 refs] [20623 refs] [20623 refs] [20623 refs] [20620 refs] test_dl test_docxmlrpc test_dumbdbm test_dummy_thread test_dummy_threading test_email test_email_codecs test_email_renamed test_enumerate test_eof test_epoll test_epoll skipped -- kernel doesn't support epoll() test_errno test_exception_variations test_extcall test_fcntl test_file test_file2k test_filecmp test_fileinput test_fileio test_float test_fnmatch test_fork1 test_format test_fpformat test_fractions test_frozen test_ftplib test_funcattrs test_functools test_future test_future3 test_future4 test_future5 test_future_builtins test_gc test_gdbm test_generators test_genericpath test_genexps test_getargs test_getargs2 test_getopt test_gettext test_gl test_gl skipped -- No module named gl test_glob test_global test_grp test_gzip test_hash test_hashlib test_heapq test_hmac test_hotshot test_htmllib test_htmlparser test_httplib test_httpservers [16621 refs] [16621 refs] [16621 refs] [26870 refs] test_imageop test_imaplib test_imgfile test_imgfile skipped -- No module named imgfile test_imp test_import test_importhooks test_importlib test_index test_inspect test_int test_int_literal test_io test_ioctl test_ioctl skipped -- Unable to open /dev/tty test_isinstance test_iter test_iterlen test_itertools test_json test_kqueue test_kqueue skipped -- test works only on BSD test_largefile test_lib2to3 test_linecache test_linuxaudiodev test_linuxaudiodev skipped -- Use of the `audio' resource not enabled test_list test_locale test_logging test_long test_long_future test_longexp test_macos test_macos skipped -- No module named MacOS test_macostools test_macostools skipped -- No module named MacOS test_macpath test_mailbox test_marshal test_math test_md5 test_memoryio test_memoryview test_mhlib test_mimetools test_mimetypes test_minidom test_mmap test_module test_modulefinder test_multibytecodec test_multibytecodec_support test_multifile test_multiprocessing test_multiprocessing skipped -- This platform lacks a functioning sem_open implementation, therefore, the required synchronization primitives needed will not function, see issue 3770. test_mutants test_mutex test_netrc test_new test_nis test_normalization test_ntpath test_old_mailbox test_openpty test_operator test_optparse test_os [16621 refs] [16621 refs] test_ossaudiodev test_ossaudiodev skipped -- Use of the `audio' resource not enabled test_parser Expecting 's_push: parser stack overflow' in next line s_push: parser stack overflow test_pdb test_peepholer test_pep247 test_pep263 test_pep277 test_pep292 test_pep352 test_pickle test_pickletools test_pipes test_pkg test_pkgimport test_pkgutil test_platform [18017 refs] [18017 refs] test_plistlib test_poll test_popen [16626 refs] [16626 refs] [16626 refs] test_popen2 test_poplib test_posix test_posixpath test_pow test_pprint test_print test_profile test_profilehooks test_property test_pstats test_pty test_pwd test_py3kwarn test_py3kwarn skipped -- test.test_py3kwarn must be run with the -3 flag test_pyclbr test_pydoc [21734 refs] [21734 refs] [21734 refs] [21734 refs] [21734 refs] [21733 refs] [21733 refs] test_pyexpat test_queue test_quopri [19449 refs] [19449 refs] test_random test_re test_readline test_repr test_resource test_rfc822 test_richcmp test_robotparser test_runpy test_sax test_scope test_scriptpackages test_scriptpackages skipped -- No module named aetools test_select test_set test_setcomps test_sets test_sgmllib test_sha test_shelve test_shlex test_shutil test_signal test_site [16621 refs] [16621 refs] [16621 refs] [16621 refs] test_slice test_smtplib test_smtpnet test_smtpnet skipped -- Use of the `network' resource not enabled test_socket test_socketserver test_socketserver skipped -- Use of the `network' resource not enabled test_softspace test_sort test_sqlite test_ssl test_startfile test_startfile skipped -- module os has no attribute startfile test_str test_strftime test_string test_stringprep test_strop test_strptime test_strtod test_struct test_structmembers test_structseq test_subprocess [16621 refs] [16621 refs] [16621 refs] [16621 refs] [16621 refs] [16621 refs] [16621 refs] [16621 refs] [16621 refs] [16621 refs] [16621 refs] [16621 refs] [16621 refs] [16621 refs] [16836 refs] [16621 refs] [16621 refs] [16621 refs] [16621 refs] [16621 refs] . [16621 refs] [16621 refs] this bit of output is from a test of stdout in a different process ... [16621 refs] [16621 refs] [16836 refs] [16621 refs] [16621 refs] [16621 refs] Traceback (most recent call last): File "", line 1, in KeyboardInterrupt [16621 refs] [16621 refs] [16621 refs] [16621 refs] [16621 refs] [16621 refs] [16621 refs] [16621 refs] [16621 refs] [16621 refs] [16621 refs] [16621 refs] [16621 refs] [16621 refs] [16621 refs] [16836 refs] [16621 refs] [16621 refs] [16621 refs] [16621 refs] [16621 refs] . [16621 refs] [16621 refs] this bit of output is from a test of stdout in a different process ... [16621 refs] [16621 refs] [16836 refs] test_sunaudiodev test_sunaudiodev skipped -- No module named sunaudiodev test_sundry test_symtable test_syntax test_sys [16621 refs] [16621 refs] [16621 refs] [16850 refs] [16644 refs] test_sysconfig [16621 refs] [16621 refs] test_tarfile test_tcl test_tcl skipped -- No module named _tkinter test_telnetlib test_tempfile [16621 refs] test_textwrap test_thread test_threaded_import Unhandled exception in thread started by Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/test/test_thread.py", line 218, in thread1 os.close(self.write_fd) OSError: [Errno 9] Bad file descriptor test_threadedtempfile test_threading [19921 refs] [21994 refs] [20906 refs] [20906 refs] [20906 refs] [20906 refs] test_threading_local test_threadsignals test_time test_timeout test_timeout skipped -- Use of the `network' resource not enabled test_tk test_tk skipped -- No module named _tkinter test_tokenize test_trace test_traceback test_transformer test_ttk_guionly test_ttk_guionly skipped -- No module named _tkinter test_ttk_textonly test_ttk_textonly skipped -- No module named _tkinter test_tuple test_typechecks test_ucn test_unary test_undocumented_details test_unicode test_unicode_file test_unicode_file skipped -- No Unicode filesystem semantics on this platform. test_unicodedata test_univnewlines test_univnewlines2k test_unpack test_urllib test_urllib2 test_urllib2_localnet test_urllib2net test_urllib2net skipped -- Use of the `network' resource not enabled test_urllibnet test_urllibnet skipped -- Use of the `network' resource not enabled test_urlparse test_userdict test_userlist test_userstring test_uu test_uuid WARNING: uuid.getnode is unreliable on many platforms. It is disabled until the code and/or test can be fixed properly. WARNING: uuid._ifconfig_getnode is unreliable on many platforms. It is disabled until the code and/or test can be fixed properly. WARNING: uuid._unixdll_getnode is unreliable on many platforms. It is disabled until the code and/or test can be fixed properly. test_wait3 test_wait4 test_warnings test_wave test_weakref test_whichdb test_winreg test_winreg skipped -- No module named _winreg test_winsound test_winsound skipped -- No module named winsound test_with test_wsgiref test_xdrlib test_xml_etree ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 770, in test.test_xml_etree.custom_builder Failed example: parser.feed(open("samples/simple.xml", "r").read()) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in parser.feed(open("samples/simple.xml", "r").read()) IOError: [Errno 2] No such file or directory: 'samples/simple.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 793, in test.test_xml_etree.custom_builder Failed example: parser.feed(open("samples/simple-ns.xml", "r").read()) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in parser.feed(open("samples/simple-ns.xml", "r").read()) IOError: [Errno 2] No such file or directory: 'samples/simple-ns.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 421, in test.test_xml_etree.file_init Failed example: tree = ET.ElementTree(file="samples/simple.xml") Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in tree = ET.ElementTree(file="samples/simple.xml") File "/tmp/python-test/local/lib/python2.7/xml/etree/ElementTree.py", line 611, in __init__ self.parse(file) File "/tmp/python-test/local/lib/python2.7/xml/etree/ElementTree.py", line 646, in parse source = open(source, "rb") IOError: [Errno 2] No such file or directory: 'samples/simple.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 422, in test.test_xml_etree.file_init Failed example: tree.find("element").tag Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in tree.find("element").tag AttributeError: 'NoneType' object has no attribute 'tag' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 424, in test.test_xml_etree.file_init Failed example: tree.find("element/../empty-element").tag Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in tree.find("element/../empty-element").tag AttributeError: 'NoneType' object has no attribute 'tag' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 811, in test.test_xml_etree.getchildren Failed example: tree = ET.parse(open("samples/simple.xml", "r")) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in tree = ET.parse(open("samples/simple.xml", "r")) IOError: [Errno 2] No such file or directory: 'samples/simple.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 812, in test.test_xml_etree.getchildren Failed example: for elem in tree.getroot().iter(): summarize_list(elem.getchildren()) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in for elem in tree.getroot().iter(): NameError: name 'tree' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 818, in test.test_xml_etree.getchildren Failed example: for elem in tree.getiterator(): summarize_list(elem.getchildren()) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in for elem in tree.getiterator(): NameError: name 'tree' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 647, in test.test_xml_etree.iterparse Failed example: context = iterparse("samples/simple.xml") Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in context = iterparse("samples/simple.xml") File "/tmp/python-test/local/lib/python2.7/xml/etree/ElementTree.py", line 1192, in iterparse source = open(source, "rb") IOError: [Errno 2] No such file or directory: 'samples/simple.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 648, in test.test_xml_etree.iterparse Failed example: action, elem = next(context) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in action, elem = next(context) NameError: name 'context' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 649, in test.test_xml_etree.iterparse Failed example: print action, elem.tag Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in print action, elem.tag NameError: name 'action' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 651, in test.test_xml_etree.iterparse Failed example: for action, elem in context: print action, elem.tag Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in for action, elem in context: NameError: name 'context' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 656, in test.test_xml_etree.iterparse Failed example: context.root.tag Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in context.root.tag NameError: name 'context' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 659, in test.test_xml_etree.iterparse Failed example: context = iterparse("samples/simple-ns.xml") Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in context = iterparse("samples/simple-ns.xml") File "/tmp/python-test/local/lib/python2.7/xml/etree/ElementTree.py", line 1192, in iterparse source = open(source, "rb") IOError: [Errno 2] No such file or directory: 'samples/simple-ns.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 660, in test.test_xml_etree.iterparse Failed example: for action, elem in context: print action, elem.tag Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in for action, elem in context: NameError: name 'context' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 668, in test.test_xml_etree.iterparse Failed example: context = iterparse("samples/simple.xml", events) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in context = iterparse("samples/simple.xml", events) File "/tmp/python-test/local/lib/python2.7/xml/etree/ElementTree.py", line 1192, in iterparse source = open(source, "rb") IOError: [Errno 2] No such file or directory: 'samples/simple.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 669, in test.test_xml_etree.iterparse Failed example: for action, elem in context: print action, elem.tag Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in for action, elem in context: NameError: name 'context' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 673, in test.test_xml_etree.iterparse Failed example: context = iterparse("samples/simple.xml", events=events) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in context = iterparse("samples/simple.xml", events=events) File "/tmp/python-test/local/lib/python2.7/xml/etree/ElementTree.py", line 1192, in iterparse source = open(source, "rb") IOError: [Errno 2] No such file or directory: 'samples/simple.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 674, in test.test_xml_etree.iterparse Failed example: for action, elem in context: print action, elem.tag Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in for action, elem in context: NameError: name 'context' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 678, in test.test_xml_etree.iterparse Failed example: context = iterparse("samples/simple.xml", events) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in context = iterparse("samples/simple.xml", events) File "/tmp/python-test/local/lib/python2.7/xml/etree/ElementTree.py", line 1192, in iterparse source = open(source, "rb") IOError: [Errno 2] No such file or directory: 'samples/simple.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 679, in test.test_xml_etree.iterparse Failed example: for action, elem in context: print action, elem.tag Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in for action, elem in context: NameError: name 'context' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 691, in test.test_xml_etree.iterparse Failed example: context = iterparse("samples/simple-ns.xml", events) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in context = iterparse("samples/simple-ns.xml", events) File "/tmp/python-test/local/lib/python2.7/xml/etree/ElementTree.py", line 1192, in iterparse source = open(source, "rb") IOError: [Errno 2] No such file or directory: 'samples/simple-ns.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 692, in test.test_xml_etree.iterparse Failed example: for action, elem in context: if action in ("start", "end"): print action, elem.tag else: print action, elem Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in for action, elem in context: NameError: name 'context' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 709, in test.test_xml_etree.iterparse Failed example: context = iterparse("samples/simple.xml", events) Expected: Traceback (most recent call last): ValueError: unknown event 'bogus' Got: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in context = iterparse("samples/simple.xml", events) File "/tmp/python-test/local/lib/python2.7/xml/etree/ElementTree.py", line 1192, in iterparse source = open(source, "rb") IOError: [Errno 2] No such file or directory: 'samples/simple.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 567, in test.test_xml_etree.parsefile Failed example: tree = ET.parse("samples/simple.xml") Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in tree = ET.parse("samples/simple.xml") File "/tmp/python-test/local/lib/python2.7/xml/etree/ElementTree.py", line 1176, in parse tree.parse(source, parser) File "/tmp/python-test/local/lib/python2.7/xml/etree/ElementTree.py", line 646, in parse source = open(source, "rb") IOError: [Errno 2] No such file or directory: 'samples/simple.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 568, in test.test_xml_etree.parsefile Failed example: normalize_crlf(tree) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in normalize_crlf(tree) NameError: name 'tree' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 569, in test.test_xml_etree.parsefile Failed example: tree.write(sys.stdout) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in tree.write(sys.stdout) NameError: name 'tree' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 575, in test.test_xml_etree.parsefile Failed example: tree = ET.parse("samples/simple-ns.xml") Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in tree = ET.parse("samples/simple-ns.xml") File "/tmp/python-test/local/lib/python2.7/xml/etree/ElementTree.py", line 1176, in parse tree.parse(source, parser) File "/tmp/python-test/local/lib/python2.7/xml/etree/ElementTree.py", line 646, in parse source = open(source, "rb") IOError: [Errno 2] No such file or directory: 'samples/simple-ns.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 576, in test.test_xml_etree.parsefile Failed example: normalize_crlf(tree) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in normalize_crlf(tree) NameError: name 'tree' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 577, in test.test_xml_etree.parsefile Failed example: tree.write(sys.stdout) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in tree.write(sys.stdout) NameError: name 'tree' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 587, in test.test_xml_etree.parsefile Failed example: parser.feed(open("samples/simple.xml").read()) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in parser.feed(open("samples/simple.xml").read()) IOError: [Errno 2] No such file or directory: 'samples/simple.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 588, in test.test_xml_etree.parsefile Failed example: print serialize(parser.close()) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in print serialize(parser.close()) File "/tmp/python-test/local/lib/python2.7/xml/etree/ElementTree.py", line 1635, in close self._raiseerror(v) File "/tmp/python-test/local/lib/python2.7/xml/etree/ElementTree.py", line 1487, in _raiseerror raise err ParseError: no element found: line 1, column 0 ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 596, in test.test_xml_etree.parsefile Failed example: parser.feed(open("samples/simple.xml").read()) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in parser.feed(open("samples/simple.xml").read()) IOError: [Errno 2] No such file or directory: 'samples/simple.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 597, in test.test_xml_etree.parsefile Failed example: print serialize(parser.close()) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in print serialize(parser.close()) File "/tmp/python-test/local/lib/python2.7/xml/etree/ElementTree.py", line 1635, in close self._raiseerror(v) File "/tmp/python-test/local/lib/python2.7/xml/etree/ElementTree.py", line 1487, in _raiseerror raise err ParseError: no element found: line 1, column 0 ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 606, in test.test_xml_etree.parsefile Failed example: parser.feed(open("samples/simple.xml").read()) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in parser.feed(open("samples/simple.xml").read()) IOError: [Errno 2] No such file or directory: 'samples/simple.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 607, in test.test_xml_etree.parsefile Failed example: print serialize(parser.close()) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in print serialize(parser.close()) File "/tmp/python-test/local/lib/python2.7/xml/etree/ElementTree.py", line 1635, in close self._raiseerror(v) File "/tmp/python-test/local/lib/python2.7/xml/etree/ElementTree.py", line 1487, in _raiseerror raise err ParseError: no element found: line 1, column 0 ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 1361, in test.test_xml_etree.xinclude_default Failed example: ElementInclude.include(document) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in ElementInclude.include(document) File "/tmp/python-test/local/lib/python2.7/xml/etree/ElementInclude.py", line 111, in include node = loader(href, parse) File "/tmp/python-test/local/lib/python2.7/xml/etree/ElementInclude.py", line 78, in default_loader file = open(href) IOError: [Errno 2] No such file or directory: 'samples/simple.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 1362, in test.test_xml_etree.xinclude_default Failed example: print serialize(document) # default Expected:

    Example.

    text texttail
    Got:

    Example.

    ********************************************************************** 6 items had failures: 2 of 8 in test.test_xml_etree.custom_builder 3 of 8 in test.test_xml_etree.file_init 3 of 19 in test.test_xml_etree.getchildren 16 of 29 in test.test_xml_etree.iterparse 12 of 17 in test.test_xml_etree.parsefile 2 of 4 in test.test_xml_etree.xinclude_default ***Test Failed*** 38 failures. test test_xml_etree failed -- 38 of 591 doctests failed Re-running test 'test_xml_etree' in verbose mode ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 770, in test.test_xml_etree.custom_builder Failed example: parser.feed(open("samples/simple.xml", "r").read()) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in parser.feed(open("samples/simple.xml", "r").read()) IOError: [Errno 2] No such file or directory: 'samples/simple.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 793, in test.test_xml_etree.custom_builder Failed example: parser.feed(open("samples/simple-ns.xml", "r").read()) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in parser.feed(open("samples/simple-ns.xml", "r").read()) IOError: [Errno 2] No such file or directory: 'samples/simple-ns.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 421, in test.test_xml_etree.file_init Failed example: tree = ET.ElementTree(file="samples/simple.xml") Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in tree = ET.ElementTree(file="samples/simple.xml") File "/tmp/python-test/local/lib/python2.7/xml/etree/ElementTree.py", line 611, in __init__ self.parse(file) File "/tmp/python-test/local/lib/python2.7/xml/etree/ElementTree.py", line 646, in parse source = open(source, "rb") IOError: [Errno 2] No such file or directory: 'samples/simple.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 422, in test.test_xml_etree.file_init Failed example: tree.find("element").tag Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in tree.find("element").tag AttributeError: 'NoneType' object has no attribute 'tag' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 424, in test.test_xml_etree.file_init Failed example: tree.find("element/../empty-element").tag Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in tree.find("element/../empty-element").tag AttributeError: 'NoneType' object has no attribute 'tag' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 811, in test.test_xml_etree.getchildren Failed example: tree = ET.parse(open("samples/simple.xml", "r")) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in tree = ET.parse(open("samples/simple.xml", "r")) IOError: [Errno 2] No such file or directory: 'samples/simple.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 812, in test.test_xml_etree.getchildren Failed example: for elem in tree.getroot().iter(): summarize_list(elem.getchildren()) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in for elem in tree.getroot().iter(): NameError: name 'tree' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 818, in test.test_xml_etree.getchildren Failed example: for elem in tree.getiterator(): summarize_list(elem.getchildren()) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in for elem in tree.getiterator(): NameError: name 'tree' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 647, in test.test_xml_etree.iterparse Failed example: context = iterparse("samples/simple.xml") Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in context = iterparse("samples/simple.xml") File "/tmp/python-test/local/lib/python2.7/xml/etree/ElementTree.py", line 1192, in iterparse source = open(source, "rb") IOError: [Errno 2] No such file or directory: 'samples/simple.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 648, in test.test_xml_etree.iterparse Failed example: action, elem = next(context) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in action, elem = next(context) NameError: name 'context' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 649, in test.test_xml_etree.iterparse Failed example: print action, elem.tag Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in print action, elem.tag NameError: name 'action' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 651, in test.test_xml_etree.iterparse Failed example: for action, elem in context: print action, elem.tag Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in for action, elem in context: NameError: name 'context' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 656, in test.test_xml_etree.iterparse Failed example: context.root.tag Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in context.root.tag NameError: name 'context' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 659, in test.test_xml_etree.iterparse Failed example: context = iterparse("samples/simple-ns.xml") Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in context = iterparse("samples/simple-ns.xml") File "/tmp/python-test/local/lib/python2.7/xml/etree/ElementTree.py", line 1192, in iterparse source = open(source, "rb") IOError: [Errno 2] No such file or directory: 'samples/simple-ns.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 660, in test.test_xml_etree.iterparse Failed example: for action, elem in context: print action, elem.tag Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in for action, elem in context: NameError: name 'context' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 668, in test.test_xml_etree.iterparse Failed example: context = iterparse("samples/simple.xml", events) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in context = iterparse("samples/simple.xml", events) File "/tmp/python-test/local/lib/python2.7/xml/etree/ElementTree.py", line 1192, in iterparse source = open(source, "rb") IOError: [Errno 2] No such file or directory: 'samples/simple.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 669, in test.test_xml_etree.iterparse Failed example: for action, elem in context: print action, elem.tag Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in for action, elem in context: NameError: name 'context' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 673, in test.test_xml_etree.iterparse Failed example: context = iterparse("samples/simple.xml", events=events) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in context = iterparse("samples/simple.xml", events=events) File "/tmp/python-test/local/lib/python2.7/xml/etree/ElementTree.py", line 1192, in iterparse source = open(source, "rb") IOError: [Errno 2] No such file or directory: 'samples/simple.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 674, in test.test_xml_etree.iterparse Failed example: for action, elem in context: print action, elem.tag Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in for action, elem in context: NameError: name 'context' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 678, in test.test_xml_etree.iterparse Failed example: context = iterparse("samples/simple.xml", events) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in context = iterparse("samples/simple.xml", events) File "/tmp/python-test/local/lib/python2.7/xml/etree/ElementTree.py", line 1192, in iterparse source = open(source, "rb") IOError: [Errno 2] No such file or directory: 'samples/simple.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 679, in test.test_xml_etree.iterparse Failed example: for action, elem in context: print action, elem.tag Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in for action, elem in context: NameError: name 'context' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 691, in test.test_xml_etree.iterparse Failed example: context = iterparse("samples/simple-ns.xml", events) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in context = iterparse("samples/simple-ns.xml", events) File "/tmp/python-test/local/lib/python2.7/xml/etree/ElementTree.py", line 1192, in iterparse source = open(source, "rb") IOError: [Errno 2] No such file or directory: 'samples/simple-ns.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 692, in test.test_xml_etree.iterparse Failed example: for action, elem in context: if action in ("start", "end"): print action, elem.tag else: print action, elem Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in for action, elem in context: NameError: name 'context' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 709, in test.test_xml_etree.iterparse Failed example: context = iterparse("samples/simple.xml", events) Expected: Traceback (most recent call last): ValueError: unknown event 'bogus' Got: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in context = iterparse("samples/simple.xml", events) File "/tmp/python-test/local/lib/python2.7/xml/etree/ElementTree.py", line 1192, in iterparse source = open(source, "rb") IOError: [Errno 2] No such file or directory: 'samples/simple.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 567, in test.test_xml_etree.parsefile Failed example: tree = ET.parse("samples/simple.xml") Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in tree = ET.parse("samples/simple.xml") File "/tmp/python-test/local/lib/python2.7/xml/etree/ElementTree.py", line 1176, in parse tree.parse(source, parser) File "/tmp/python-test/local/lib/python2.7/xml/etree/ElementTree.py", line 646, in parse source = open(source, "rb") IOError: [Errno 2] No such file or directory: 'samples/simple.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 568, in test.test_xml_etree.parsefile Failed example: normalize_crlf(tree) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in normalize_crlf(tree) NameError: name 'tree' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 569, in test.test_xml_etree.parsefile Failed example: tree.write(sys.stdout) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in tree.write(sys.stdout) NameError: name 'tree' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 575, in test.test_xml_etree.parsefile Failed example: tree = ET.parse("samples/simple-ns.xml") Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in tree = ET.parse("samples/simple-ns.xml") File "/tmp/python-test/local/lib/python2.7/xml/etree/ElementTree.py", line 1176, in parse tree.parse(source, parser) File "/tmp/python-test/local/lib/python2.7/xml/etree/ElementTree.py", line 646, in parse source = open(source, "rb") IOError: [Errno 2] No such file or directory: 'samples/simple-ns.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 576, in test.test_xml_etree.parsefile Failed example: normalize_crlf(tree) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in normalize_crlf(tree) NameError: name 'tree' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 577, in test.test_xml_etree.parsefile Failed example: tree.write(sys.stdout) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in tree.write(sys.stdout) NameError: name 'tree' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 587, in test.test_xml_etree.parsefile Failed example: parser.feed(open("samples/simple.xml").read()) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in parser.feed(open("samples/simple.xml").read()) IOError: [Errno 2] No such file or directory: 'samples/simple.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 588, in test.test_xml_etree.parsefile Failed example: print serialize(parser.close()) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in print serialize(parser.close()) File "/tmp/python-test/local/lib/python2.7/xml/etree/ElementTree.py", line 1635, in close self._raiseerror(v) File "/tmp/python-test/local/lib/python2.7/xml/etree/ElementTree.py", line 1487, in _raiseerror raise err ParseError: no element found: line 1, column 0 ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 596, in test.test_xml_etree.parsefile Failed example: parser.feed(open("samples/simple.xml").read()) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in parser.feed(open("samples/simple.xml").read()) IOError: [Errno 2] No such file or directory: 'samples/simple.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 597, in test.test_xml_etree.parsefile Failed example: print serialize(parser.close()) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in print serialize(parser.close()) File "/tmp/python-test/local/lib/python2.7/xml/etree/ElementTree.py", line 1635, in close self._raiseerror(v) File "/tmp/python-test/local/lib/python2.7/xml/etree/ElementTree.py", line 1487, in _raiseerror raise err ParseError: no element found: line 1, column 0 ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 606, in test.test_xml_etree.parsefile Failed example: parser.feed(open("samples/simple.xml").read()) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in parser.feed(open("samples/simple.xml").read()) IOError: [Errno 2] No such file or directory: 'samples/simple.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 607, in test.test_xml_etree.parsefile Failed example: print serialize(parser.close()) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in print serialize(parser.close()) File "/tmp/python-test/local/lib/python2.7/xml/etree/ElementTree.py", line 1635, in close self._raiseerror(v) File "/tmp/python-test/local/lib/python2.7/xml/etree/ElementTree.py", line 1487, in _raiseerror raise err ParseError: no element found: line 1, column 0 ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 1361, in test.test_xml_etree.xinclude_default Failed example: ElementInclude.include(document) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in ElementInclude.include(document) File "/tmp/python-test/local/lib/python2.7/xml/etree/ElementInclude.py", line 111, in include node = loader(href, parse) File "/tmp/python-test/local/lib/python2.7/xml/etree/ElementInclude.py", line 78, in default_loader file = open(href) IOError: [Errno 2] No such file or directory: 'samples/simple.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 1362, in test.test_xml_etree.xinclude_default Failed example: print serialize(document) # default Expected:

    Example.

    text texttail
    Got:

    Example.

    ********************************************************************** 6 items had failures: 2 of 8 in test.test_xml_etree.custom_builder 3 of 8 in test.test_xml_etree.file_init 3 of 19 in test.test_xml_etree.getchildren 16 of 29 in test.test_xml_etree.iterparse 12 of 17 in test.test_xml_etree.parsefile 2 of 4 in test.test_xml_etree.xinclude_default ***Test Failed*** 38 failures. test test_xml_etree failed -- 38 of 591 doctests failed test_xml_etree_c ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 770, in test.test_xml_etree.custom_builder Failed example: parser.feed(open("samples/simple.xml", "r").read()) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in parser.feed(open("samples/simple.xml", "r").read()) IOError: [Errno 2] No such file or directory: 'samples/simple.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 793, in test.test_xml_etree.custom_builder Failed example: parser.feed(open("samples/simple-ns.xml", "r").read()) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in parser.feed(open("samples/simple-ns.xml", "r").read()) IOError: [Errno 2] No such file or directory: 'samples/simple-ns.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 421, in test.test_xml_etree.file_init Failed example: tree = ET.ElementTree(file="samples/simple.xml") Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in tree = ET.ElementTree(file="samples/simple.xml") File "/tmp/python-test/local/lib/python2.7/xml/etree/ElementTree.py", line 611, in __init__ self.parse(file) File "", line 25, in parse IOError: [Errno 2] No such file or directory: 'samples/simple.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 422, in test.test_xml_etree.file_init Failed example: tree.find("element").tag Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in tree.find("element").tag AttributeError: 'NoneType' object has no attribute 'tag' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 424, in test.test_xml_etree.file_init Failed example: tree.find("element/../empty-element").tag Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in tree.find("element/../empty-element").tag AttributeError: 'NoneType' object has no attribute 'tag' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 811, in test.test_xml_etree.getchildren Failed example: tree = ET.parse(open("samples/simple.xml", "r")) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in tree = ET.parse(open("samples/simple.xml", "r")) IOError: [Errno 2] No such file or directory: 'samples/simple.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 812, in test.test_xml_etree.getchildren Failed example: for elem in tree.getroot().iter(): summarize_list(elem.getchildren()) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in for elem in tree.getroot().iter(): NameError: name 'tree' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 818, in test.test_xml_etree.getchildren Failed example: for elem in tree.getiterator(): summarize_list(elem.getchildren()) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in for elem in tree.getiterator(): NameError: name 'tree' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 647, in test.test_xml_etree.iterparse Failed example: context = iterparse("samples/simple.xml") Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in context = iterparse("samples/simple.xml") File "", line 63, in __init__ IOError: [Errno 2] No such file or directory: 'samples/simple.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 648, in test.test_xml_etree.iterparse Failed example: action, elem = next(context) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in action, elem = next(context) NameError: name 'context' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 649, in test.test_xml_etree.iterparse Failed example: print action, elem.tag Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in print action, elem.tag NameError: name 'action' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 651, in test.test_xml_etree.iterparse Failed example: for action, elem in context: print action, elem.tag Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in for action, elem in context: NameError: name 'context' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 656, in test.test_xml_etree.iterparse Failed example: context.root.tag Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in context.root.tag NameError: name 'context' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 659, in test.test_xml_etree.iterparse Failed example: context = iterparse("samples/simple-ns.xml") Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in context = iterparse("samples/simple-ns.xml") File "", line 63, in __init__ IOError: [Errno 2] No such file or directory: 'samples/simple-ns.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 660, in test.test_xml_etree.iterparse Failed example: for action, elem in context: print action, elem.tag Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in for action, elem in context: NameError: name 'context' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 668, in test.test_xml_etree.iterparse Failed example: context = iterparse("samples/simple.xml", events) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in context = iterparse("samples/simple.xml", events) File "", line 63, in __init__ IOError: [Errno 2] No such file or directory: 'samples/simple.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 669, in test.test_xml_etree.iterparse Failed example: for action, elem in context: print action, elem.tag Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in for action, elem in context: NameError: name 'context' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 673, in test.test_xml_etree.iterparse Failed example: context = iterparse("samples/simple.xml", events=events) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in context = iterparse("samples/simple.xml", events=events) File "", line 63, in __init__ IOError: [Errno 2] No such file or directory: 'samples/simple.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 674, in test.test_xml_etree.iterparse Failed example: for action, elem in context: print action, elem.tag Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in for action, elem in context: NameError: name 'context' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 678, in test.test_xml_etree.iterparse Failed example: context = iterparse("samples/simple.xml", events) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in context = iterparse("samples/simple.xml", events) File "", line 63, in __init__ IOError: [Errno 2] No such file or directory: 'samples/simple.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 679, in test.test_xml_etree.iterparse Failed example: for action, elem in context: print action, elem.tag Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in for action, elem in context: NameError: name 'context' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 691, in test.test_xml_etree.iterparse Failed example: context = iterparse("samples/simple-ns.xml", events) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in context = iterparse("samples/simple-ns.xml", events) File "", line 63, in __init__ IOError: [Errno 2] No such file or directory: 'samples/simple-ns.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 692, in test.test_xml_etree.iterparse Failed example: for action, elem in context: if action in ("start", "end"): print action, elem.tag else: print action, elem Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in for action, elem in context: NameError: name 'context' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 709, in test.test_xml_etree.iterparse Failed example: context = iterparse("samples/simple.xml", events) Expected: Traceback (most recent call last): ValueError: unknown event 'bogus' Got: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in context = iterparse("samples/simple.xml", events) File "", line 63, in __init__ IOError: [Errno 2] No such file or directory: 'samples/simple.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 567, in test.test_xml_etree.parsefile Failed example: tree = ET.parse("samples/simple.xml") Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in tree = ET.parse("samples/simple.xml") File "", line 56, in parse File "", line 25, in parse IOError: [Errno 2] No such file or directory: 'samples/simple.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 568, in test.test_xml_etree.parsefile Failed example: normalize_crlf(tree) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in normalize_crlf(tree) NameError: name 'tree' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 569, in test.test_xml_etree.parsefile Failed example: tree.write(sys.stdout) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in tree.write(sys.stdout) NameError: name 'tree' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 575, in test.test_xml_etree.parsefile Failed example: tree = ET.parse("samples/simple-ns.xml") Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in tree = ET.parse("samples/simple-ns.xml") File "", line 56, in parse File "", line 25, in parse IOError: [Errno 2] No such file or directory: 'samples/simple-ns.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 576, in test.test_xml_etree.parsefile Failed example: normalize_crlf(tree) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in normalize_crlf(tree) NameError: name 'tree' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 577, in test.test_xml_etree.parsefile Failed example: tree.write(sys.stdout) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in tree.write(sys.stdout) NameError: name 'tree' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 587, in test.test_xml_etree.parsefile Failed example: parser.feed(open("samples/simple.xml").read()) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in parser.feed(open("samples/simple.xml").read()) IOError: [Errno 2] No such file or directory: 'samples/simple.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 588, in test.test_xml_etree.parsefile Failed example: print serialize(parser.close()) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in print serialize(parser.close()) ParseError: no element found: line 1, column 0 ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 596, in test.test_xml_etree.parsefile Failed example: parser.feed(open("samples/simple.xml").read()) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in parser.feed(open("samples/simple.xml").read()) IOError: [Errno 2] No such file or directory: 'samples/simple.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 597, in test.test_xml_etree.parsefile Failed example: print serialize(parser.close()) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in print serialize(parser.close()) ParseError: no element found: line 1, column 0 ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 606, in test.test_xml_etree.parsefile Failed example: parser.feed(open("samples/simple.xml").read()) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in parser.feed(open("samples/simple.xml").read()) IOError: [Errno 2] No such file or directory: 'samples/simple.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 607, in test.test_xml_etree.parsefile Failed example: print serialize(parser.close()) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in print serialize(parser.close()) ParseError: no element found: line 1, column 0 ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 1361, in test.test_xml_etree.xinclude_default Failed example: ElementInclude.include(document) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in ElementInclude.include(document) File "/tmp/python-test/local/lib/python2.7/xml/etree/ElementInclude.py", line 111, in include node = loader(href, parse) File "/tmp/python-test/local/lib/python2.7/xml/etree/ElementInclude.py", line 78, in default_loader file = open(href) IOError: [Errno 2] No such file or directory: 'samples/simple.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 1362, in test.test_xml_etree.xinclude_default Failed example: print serialize(document) # default Expected:

    Example.

    text texttail
    Got:

    Example.

    ********************************************************************** 6 items had failures: 2 of 8 in test.test_xml_etree.custom_builder 3 of 8 in test.test_xml_etree.file_init 3 of 19 in test.test_xml_etree.getchildren 16 of 29 in test.test_xml_etree.iterparse 12 of 17 in test.test_xml_etree.parsefile 2 of 4 in test.test_xml_etree.xinclude_default ***Test Failed*** 38 failures. test test_xml_etree_c failed -- 38 of 591 doctests failed Re-running test 'test_xml_etree_c' in verbose mode doctest (test.test_xml_etree_c) ... 1 tests with zero failures ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 770, in test.test_xml_etree.custom_builder Failed example: parser.feed(open("samples/simple.xml", "r").read()) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in parser.feed(open("samples/simple.xml", "r").read()) IOError: [Errno 2] No such file or directory: 'samples/simple.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 793, in test.test_xml_etree.custom_builder Failed example: parser.feed(open("samples/simple-ns.xml", "r").read()) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in parser.feed(open("samples/simple-ns.xml", "r").read()) IOError: [Errno 2] No such file or directory: 'samples/simple-ns.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 421, in test.test_xml_etree.file_init Failed example: tree = ET.ElementTree(file="samples/simple.xml") Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in tree = ET.ElementTree(file="samples/simple.xml") File "/tmp/python-test/local/lib/python2.7/xml/etree/ElementTree.py", line 611, in __init__ self.parse(file) File "", line 25, in parse IOError: [Errno 2] No such file or directory: 'samples/simple.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 422, in test.test_xml_etree.file_init Failed example: tree.find("element").tag Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in tree.find("element").tag AttributeError: 'NoneType' object has no attribute 'tag' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 424, in test.test_xml_etree.file_init Failed example: tree.find("element/../empty-element").tag Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in tree.find("element/../empty-element").tag AttributeError: 'NoneType' object has no attribute 'tag' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 811, in test.test_xml_etree.getchildren Failed example: tree = ET.parse(open("samples/simple.xml", "r")) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in tree = ET.parse(open("samples/simple.xml", "r")) IOError: [Errno 2] No such file or directory: 'samples/simple.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 812, in test.test_xml_etree.getchildren Failed example: for elem in tree.getroot().iter(): summarize_list(elem.getchildren()) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in for elem in tree.getroot().iter(): NameError: name 'tree' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 818, in test.test_xml_etree.getchildren Failed example: for elem in tree.getiterator(): summarize_list(elem.getchildren()) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in for elem in tree.getiterator(): NameError: name 'tree' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 647, in test.test_xml_etree.iterparse Failed example: context = iterparse("samples/simple.xml") Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in context = iterparse("samples/simple.xml") File "", line 63, in __init__ IOError: [Errno 2] No such file or directory: 'samples/simple.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 648, in test.test_xml_etree.iterparse Failed example: action, elem = next(context) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in action, elem = next(context) NameError: name 'context' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 649, in test.test_xml_etree.iterparse Failed example: print action, elem.tag Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in print action, elem.tag NameError: name 'action' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 651, in test.test_xml_etree.iterparse Failed example: for action, elem in context: print action, elem.tag Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in for action, elem in context: NameError: name 'context' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 656, in test.test_xml_etree.iterparse Failed example: context.root.tag Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in context.root.tag NameError: name 'context' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 659, in test.test_xml_etree.iterparse Failed example: context = iterparse("samples/simple-ns.xml") Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in context = iterparse("samples/simple-ns.xml") File "", line 63, in __init__ IOError: [Errno 2] No such file or directory: 'samples/simple-ns.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 660, in test.test_xml_etree.iterparse Failed example: for action, elem in context: print action, elem.tag Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in for action, elem in context: NameError: name 'context' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 668, in test.test_xml_etree.iterparse Failed example: context = iterparse("samples/simple.xml", events) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in context = iterparse("samples/simple.xml", events) File "", line 63, in __init__ IOError: [Errno 2] No such file or directory: 'samples/simple.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 669, in test.test_xml_etree.iterparse Failed example: for action, elem in context: print action, elem.tag Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in for action, elem in context: NameError: name 'context' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 673, in test.test_xml_etree.iterparse Failed example: context = iterparse("samples/simple.xml", events=events) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in context = iterparse("samples/simple.xml", events=events) File "", line 63, in __init__ IOError: [Errno 2] No such file or directory: 'samples/simple.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 674, in test.test_xml_etree.iterparse Failed example: for action, elem in context: print action, elem.tag Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in for action, elem in context: NameError: name 'context' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 678, in test.test_xml_etree.iterparse Failed example: context = iterparse("samples/simple.xml", events) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in context = iterparse("samples/simple.xml", events) File "", line 63, in __init__ IOError: [Errno 2] No such file or directory: 'samples/simple.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 679, in test.test_xml_etree.iterparse Failed example: for action, elem in context: print action, elem.tag Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in for action, elem in context: NameError: name 'context' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 691, in test.test_xml_etree.iterparse Failed example: context = iterparse("samples/simple-ns.xml", events) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in context = iterparse("samples/simple-ns.xml", events) File "", line 63, in __init__ IOError: [Errno 2] No such file or directory: 'samples/simple-ns.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 692, in test.test_xml_etree.iterparse Failed example: for action, elem in context: if action in ("start", "end"): print action, elem.tag else: print action, elem Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in for action, elem in context: NameError: name 'context' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 709, in test.test_xml_etree.iterparse Failed example: context = iterparse("samples/simple.xml", events) Expected: Traceback (most recent call last): ValueError: unknown event 'bogus' Got: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in context = iterparse("samples/simple.xml", events) File "", line 63, in __init__ IOError: [Errno 2] No such file or directory: 'samples/simple.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 567, in test.test_xml_etree.parsefile Failed example: tree = ET.parse("samples/simple.xml") Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in tree = ET.parse("samples/simple.xml") File "", line 56, in parse File "", line 25, in parse IOError: [Errno 2] No such file or directory: 'samples/simple.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 568, in test.test_xml_etree.parsefile Failed example: normalize_crlf(tree) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in normalize_crlf(tree) NameError: name 'tree' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 569, in test.test_xml_etree.parsefile Failed example: tree.write(sys.stdout) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in tree.write(sys.stdout) NameError: name 'tree' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 575, in test.test_xml_etree.parsefile Failed example: tree = ET.parse("samples/simple-ns.xml") Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in tree = ET.parse("samples/simple-ns.xml") File "", line 56, in parse File "", line 25, in parse IOError: [Errno 2] No such file or directory: 'samples/simple-ns.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 576, in test.test_xml_etree.parsefile Failed example: normalize_crlf(tree) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in normalize_crlf(tree) NameError: name 'tree' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 577, in test.test_xml_etree.parsefile Failed example: tree.write(sys.stdout) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in tree.write(sys.stdout) NameError: name 'tree' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 587, in test.test_xml_etree.parsefile Failed example: parser.feed(open("samples/simple.xml").read()) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in parser.feed(open("samples/simple.xml").read()) IOError: [Errno 2] No such file or directory: 'samples/simple.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 588, in test.test_xml_etree.parsefile Failed example: print serialize(parser.close()) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in print serialize(parser.close()) ParseError: no element found: line 1, column 0 ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 596, in test.test_xml_etree.parsefile Failed example: parser.feed(open("samples/simple.xml").read()) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in parser.feed(open("samples/simple.xml").read()) IOError: [Errno 2] No such file or directory: 'samples/simple.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 597, in test.test_xml_etree.parsefile Failed example: print serialize(parser.close()) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in print serialize(parser.close()) ParseError: no element found: line 1, column 0 ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 606, in test.test_xml_etree.parsefile Failed example: parser.feed(open("samples/simple.xml").read()) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in parser.feed(open("samples/simple.xml").read()) IOError: [Errno 2] No such file or directory: 'samples/simple.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 607, in test.test_xml_etree.parsefile Failed example: print serialize(parser.close()) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in print serialize(parser.close()) ParseError: no element found: line 1, column 0 ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 1361, in test.test_xml_etree.xinclude_default Failed example: ElementInclude.include(document) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in ElementInclude.include(document) File "/tmp/python-test/local/lib/python2.7/xml/etree/ElementInclude.py", line 111, in include node = loader(href, parse) File "/tmp/python-test/local/lib/python2.7/xml/etree/ElementInclude.py", line 78, in default_loader file = open(href) IOError: [Errno 2] No such file or directory: 'samples/simple.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 1362, in test.test_xml_etree.xinclude_default Failed example: print serialize(document) # default Expected:

    Example.

    text texttail
    Got:

    Example.

    ********************************************************************** 6 items had failures: 2 of 8 in test.test_xml_etree.custom_builder 3 of 8 in test.test_xml_etree.file_init 3 of 19 in test.test_xml_etree.getchildren 16 of 29 in test.test_xml_etree.iterparse 12 of 17 in test.test_xml_etree.parsefile 2 of 4 in test.test_xml_etree.xinclude_default ***Test Failed*** 38 failures. test test_xml_etree_c failed -- 38 of 591 doctests failed test_xmllib test_xmlrpc test_xpickle test_xpickle -- skipping backwards compat tests. Use 'regrtest.py -u xpickle' to run them. test_xrange test_zipfile test_zipfile64 test_zipfile64 skipped -- test requires loads of disk-space bytes and a long time to run test_zipimport test_zipimport_support test_zlib 345 tests OK. 2 tests failed: test_xml_etree test_xml_etree_c 35 tests skipped: test_aepack test_al test_applesingle test_bsddb185 test_bsddb3 test_cd test_cl test_curses test_epoll test_gl test_imgfile test_ioctl test_kqueue test_linuxaudiodev test_macos test_macostools test_multiprocessing test_ossaudiodev test_py3kwarn test_scriptpackages test_smtpnet test_socketserver test_startfile test_sunaudiodev test_tcl test_timeout test_tk test_ttk_guionly test_ttk_textonly test_unicode_file test_urllib2net test_urllibnet test_winreg test_winsound test_zipfile64 6 skips unexpected on linux2: test_multiprocessing test_ttk_guionly test_epoll test_tk test_ioctl test_ttk_textonly [946429 refs] From python-checkins at python.org Fri Mar 12 10:57:44 2010 From: python-checkins at python.org (georg.brandl) Date: Fri, 12 Mar 2010 10:57:44 +0100 (CET) Subject: [Python-checkins] r78859 - python/trunk/Doc/faq/library.rst Message-ID: <20100312095744.19AA8DBF9@mail.python.org> Author: georg.brandl Date: Fri Mar 12 10:57:43 2010 New Revision: 78859 Log: Get rid of backticks. Modified: python/trunk/Doc/faq/library.rst Modified: python/trunk/Doc/faq/library.rst ============================================================================== --- python/trunk/Doc/faq/library.rst (original) +++ python/trunk/Doc/faq/library.rst Fri Mar 12 10:57:43 2010 @@ -205,7 +205,7 @@ while 1: try: c = sys.stdin.read(1) - print "Got character", `c` + print "Got character", repr(c) except IOError: pass finally: termios.tcsetattr(fd, termios.TCSAFLUSH, oldterm) From python-checkins at python.org Fri Mar 12 11:02:06 2010 From: python-checkins at python.org (georg.brandl) Date: Fri, 12 Mar 2010 11:02:06 +0100 (CET) Subject: [Python-checkins] r78860 - in python/trunk/Doc: c-api/exceptions.rst c-api/string.rst distutils/examples.rst distutils/uploading.rst library/logging.rst library/site.rst library/sys.rst whatsnew/2.2.rst whatsnew/2.7.rst Message-ID: <20100312100206.22FDBDF4A@mail.python.org> Author: georg.brandl Date: Fri Mar 12 11:02:03 2010 New Revision: 78860 Log: Fix warnings from "make check". Modified: python/trunk/Doc/c-api/exceptions.rst python/trunk/Doc/c-api/string.rst python/trunk/Doc/distutils/examples.rst python/trunk/Doc/distutils/uploading.rst python/trunk/Doc/library/logging.rst python/trunk/Doc/library/site.rst python/trunk/Doc/library/sys.rst python/trunk/Doc/whatsnew/2.2.rst python/trunk/Doc/whatsnew/2.7.rst Modified: python/trunk/Doc/c-api/exceptions.rst ============================================================================== --- python/trunk/Doc/c-api/exceptions.rst (original) +++ python/trunk/Doc/c-api/exceptions.rst Fri Mar 12 11:02:03 2010 @@ -221,7 +221,7 @@ .. note:: The `"%lld"` and `"%llu"` format specifiers are only available - when `HAVE_LONG_LONG` is defined. + when :const:`HAVE_LONG_LONG` is defined. .. versionchanged:: 2.7 Support for `"%lld"` and `"%llu"` added. Modified: python/trunk/Doc/c-api/string.rst ============================================================================== --- python/trunk/Doc/c-api/string.rst (original) +++ python/trunk/Doc/c-api/string.rst Fri Mar 12 11:02:03 2010 @@ -138,7 +138,7 @@ .. note:: The `"%lld"` and `"%llu"` format specifiers are only available - when `HAVE_LONG_LONG` is defined. + when :const:`HAVE_LONG_LONG` is defined. .. versionchanged:: 2.7 Support for `"%lld"` and `"%llu"` added. Modified: python/trunk/Doc/distutils/examples.rst ============================================================================== --- python/trunk/Doc/distutils/examples.rst (original) +++ python/trunk/Doc/distutils/examples.rst Fri Mar 12 11:02:03 2010 @@ -257,9 +257,9 @@ (maintainer and maintainer_email) must be supplied -If you use the reStructuredText syntax in the `long_description` field and +If you use the reStructuredText syntax in the ``long_description`` field and `docutils `_ is installed you can check if -the syntax is fine with the ``check`` command, using the `restructuredtext` +the syntax is fine with the ``check`` command, using the ``restructuredtext`` option. For example, if the :file:`setup.py` script is changed like this:: @@ -278,7 +278,7 @@ url='http://example.com', long_description=desc) Where the long description is broken, ``check`` will be able to detect it -by using the `docutils` parser:: +by using the :mod:`docutils` parser:: $ pythontrunk setup.py check --restructuredtext running check @@ -293,20 +293,20 @@ The :func:`distutils.core.setup` function provides a command-line interface that allows you to query the metadata fields of a project through the -`setup.py` script of a given project:: +:file:`setup.py` script of a given project:: $ python setup.py --name distribute -This call reads the `name` metadata by running the +This call reads the ``name`` metadata by running the :func:`distutils.core.setup` function. Although, when a source or binary distribution is created with Distutils, the metadata fields are written in a static file called :file:`PKG-INFO`. When a Distutils-based project is installed in Python, the :file:`PKG-INFO` file is copied alongside the modules and packages of the distribution under :file:`NAME-VERSION-pyX.X.egg-info`, -where `NAME` is the name of the project, `VERSION` its version as defined -in the Metadata, and `pyX.X` the major and minor version of Python like -`2.7` or `3.2`. +where ``NAME`` is the name of the project, ``VERSION`` its version as defined +in the Metadata, and ``pyX.X`` the major and minor version of Python like +``2.7`` or ``3.2``. You can read back this static file, by using the :class:`distutils.dist.DistributionMetadata` class and its Modified: python/trunk/Doc/distutils/uploading.rst ============================================================================== --- python/trunk/Doc/distutils/uploading.rst (original) +++ python/trunk/Doc/distutils/uploading.rst Fri Mar 12 11:02:03 2010 @@ -62,13 +62,13 @@ setup(name='Distutils', long_description=open('README.txt')) -In that case, `README.txt` is a regular reStructuredText text file located -in the root of the package besides `setup.py`. +In that case, :file:`README.txt` is a regular reStructuredText text file located +in the root of the package besides :file:`setup.py`. To prevent registering broken reStructuredText content, you can use the -:program:`rst2html` program that is provided by the `docutils` package +:program:`rst2html` program that is provided by the :mod:`docutils` package and check the ``long_description`` from the command line:: $ python setup.py --long-description | rst2html.py > output.html -`docutils` will display a warning if there's something wrong with your syntax. +:mod:`docutils` will display a warning if there's something wrong with your syntax. Modified: python/trunk/Doc/library/logging.rst ============================================================================== --- python/trunk/Doc/library/logging.rst (original) +++ python/trunk/Doc/library/logging.rst Fri Mar 12 11:02:03 2010 @@ -424,10 +424,10 @@ Note that the class names referenced in config files need to be either relative to the logging module, or absolute values which can be resolved using normal -import mechanisms. Thus, you could use either `handlers.WatchedFileHandler` -(relative to the logging module) or `mypackage.mymodule.MyHandler` (for a -class defined in package `mypackage` and module `mymodule`, where `mypackage` -is available on the Python import path). +import mechanisms. Thus, you could use either :class:`handlers.WatchedFileHandler` +(relative to the logging module) or :class:`mypackage.mymodule.MyHandler` (for a +class defined in package :mod:`mypackage` and module :mod:`mymodule`, where +:mod:`mypackage` is available on the Python import path). .. _library-config: @@ -1233,12 +1233,12 @@ :class:`Handler` subclass are passed to its :meth:`handleError` method. The default implementation of :meth:`handleError` in :class:`Handler` checks -to see if a module-level variable, `raiseExceptions`, is set. If set, a -traceback is printed to `sys.stderr`. If not set, the exception is swallowed. +to see if a module-level variable, :data:`raiseExceptions`, is set. If set, a +traceback is printed to :data:`sys.stderr`. If not set, the exception is swallowed. -**Note:** The default value of `raiseExceptions` is `True`. This is because +**Note:** The default value of :data:`raiseExceptions` is ``True``. This is because during development, you typically want to be notified of any exceptions that -occur. It's advised that you set `raiseExceptions` to `False` for production +occur. It's advised that you set :data:`raiseExceptions` to ``False`` for production usage. .. _context-info: @@ -2494,14 +2494,14 @@ This function is used to turn the capture of warnings by logging on and off. - If `capture` is `True`, warnings issued by the :mod:`warnings` module + If *capture* is ``True``, warnings issued by the :mod:`warnings` module will be redirected to the logging system. Specifically, a warning will be formatted using :func:`warnings.formatwarning` and the resulting string - logged to a logger named "py.warnings" with a severity of `WARNING`. + logged to a logger named "py.warnings" with a severity of ``WARNING``. - If `capture` is `False`, the redirection of warnings to the logging system + If *capture* is ``False``, the redirection of warnings to the logging system will stop, and warnings will be redirected to their original destinations - (i.e. those in effect before `captureWarnings(True)` was called). + (i.e. those in effect before ``captureWarnings(True)`` was called). Configuration Modified: python/trunk/Doc/library/site.rst ============================================================================== --- python/trunk/Doc/library/site.rst (original) +++ python/trunk/Doc/library/site.rst Fri Mar 12 11:02:03 2010 @@ -140,9 +140,9 @@ .. function:: getuserbase() - Returns the `user base` directory path. + Returns the "user base" directory path. - The `user base` directory can be used to store data. If the global + The "user base" directory can be used to store data. If the global variable ``USER_BASE`` is not initialized yet, this function will also set it. Modified: python/trunk/Doc/library/sys.rst ============================================================================== --- python/trunk/Doc/library/sys.rst (original) +++ python/trunk/Doc/library/sys.rst Fri Mar 12 11:02:03 2010 @@ -417,7 +417,7 @@ specific. If given, *default* will be returned if the object does not provide means to - retrieve the size. Otherwise a `TypeError` will be raised. + retrieve the size. Otherwise a :exc:`TypeError` will be raised. :func:`getsizeof` calls the object's ``__sizeof__`` method and adds an additional garbage collector overhead if the object is managed by the garbage Modified: python/trunk/Doc/whatsnew/2.2.rst ============================================================================== --- python/trunk/Doc/whatsnew/2.2.rst (original) +++ python/trunk/Doc/whatsnew/2.2.rst Fri Mar 12 11:02:03 2010 @@ -30,7 +30,7 @@ to the PEP for a particular new feature. -.. seealso (now defunct) +.. see also, now defunct http://www.unixreview.com/documents/s=1356/urm0109h/0109h.htm "What's So Special About Python 2.2?" is also about the new 2.2 features, and Modified: python/trunk/Doc/whatsnew/2.7.rst ============================================================================== --- python/trunk/Doc/whatsnew/2.7.rst (original) +++ python/trunk/Doc/whatsnew/2.7.rst Fri Mar 12 11:02:03 2010 @@ -609,7 +609,7 @@ Contributed by Raymond Hettinger; :issue:`1696199`. - The new `OrderedDict` class is described in the earlier section + The new `~collections.OrderedDict` class is described in the earlier section :ref:`pep-0372`. The :class:`namedtuple` class now has an optional *rename* parameter. From python-checkins at python.org Fri Mar 12 11:04:37 2010 From: python-checkins at python.org (georg.brandl) Date: Fri, 12 Mar 2010 11:04:37 +0100 (CET) Subject: [Python-checkins] r78861 - python/branches/py3k/Doc/tools/rstlint.py Message-ID: <20100312100437.4F5E1F4D2@mail.python.org> Author: georg.brandl Date: Fri Mar 12 11:04:37 2010 New Revision: 78861 Log: Make tool compatible with 2.x and 3.x. Modified: python/branches/py3k/Doc/tools/rstlint.py Modified: python/branches/py3k/Doc/tools/rstlint.py ============================================================================== --- python/branches/py3k/Doc/tools/rstlint.py (original) +++ python/branches/py3k/Doc/tools/rstlint.py Fri Mar 12 11:04:37 2010 @@ -169,7 +169,6 @@ return 2 count = defaultdict(int) - out = sys.stdout for root, dirs, files in os.walk(path): # ignore subdirs controlled by svn @@ -212,8 +211,7 @@ csev = checker.severity if csev >= severity: for lno, msg in checker(fn, lines): - print('[%d] %s:%d: %s' % (csev, fn, lno, msg), - file=out) + print('[%d] %s:%d: %s' % (csev, fn, lno, msg)) count[csev] += 1 if verbose: print() From python-checkins at python.org Fri Mar 12 11:06:40 2010 From: python-checkins at python.org (georg.brandl) Date: Fri, 12 Mar 2010 11:06:40 +0100 (CET) Subject: [Python-checkins] r78862 - in python/branches/py3k/Doc: c-api/exceptions.rst c-api/unicode.rst distutils/examples.rst distutils/uploading.rst library/http.client.rst library/logging.rst library/site.rst library/sys.rst whatsnew/2.2.rst whatsnew/2.7.rst Message-ID: <20100312100640.62A36BF1D@mail.python.org> Author: georg.brandl Date: Fri Mar 12 11:06:40 2010 New Revision: 78862 Log: Merged revisions 78859-78860 via svnmerge from svn+ssh://pythondev at svn.python.org/python/trunk ........ r78859 | georg.brandl | 2010-03-12 10:57:43 +0100 (Fr, 12 M?r 2010) | 1 line Get rid of backticks. ........ r78860 | georg.brandl | 2010-03-12 11:02:03 +0100 (Fr, 12 M?r 2010) | 1 line Fix warnings from "make check". ........ Modified: python/branches/py3k/Doc/c-api/exceptions.rst python/branches/py3k/Doc/c-api/unicode.rst python/branches/py3k/Doc/distutils/examples.rst python/branches/py3k/Doc/distutils/uploading.rst python/branches/py3k/Doc/library/http.client.rst python/branches/py3k/Doc/library/logging.rst python/branches/py3k/Doc/library/site.rst python/branches/py3k/Doc/library/sys.rst python/branches/py3k/Doc/whatsnew/2.2.rst python/branches/py3k/Doc/whatsnew/2.7.rst Modified: python/branches/py3k/Doc/c-api/exceptions.rst ============================================================================== --- python/branches/py3k/Doc/c-api/exceptions.rst (original) +++ python/branches/py3k/Doc/c-api/exceptions.rst Fri Mar 12 11:06:40 2010 @@ -214,7 +214,7 @@ .. note:: The `"%lld"` and `"%llu"` format specifiers are only available - when `HAVE_LONG_LONG` is defined. + when :const:`HAVE_LONG_LONG` is defined. .. versionchanged:: 3.2 Support for `"%lld"` and `"%llu"` added. Modified: python/branches/py3k/Doc/c-api/unicode.rst ============================================================================== --- python/branches/py3k/Doc/c-api/unicode.rst (original) +++ python/branches/py3k/Doc/c-api/unicode.rst Fri Mar 12 11:06:40 2010 @@ -313,7 +313,7 @@ .. note:: The `"%lld"` and `"%llu"` format specifiers are only available - when `HAVE_LONG_LONG` is defined. + when :const:`HAVE_LONG_LONG` is defined. .. versionchanged:: 3.2 Support for `"%lld"` and `"%llu"` added. Modified: python/branches/py3k/Doc/distutils/examples.rst ============================================================================== --- python/branches/py3k/Doc/distutils/examples.rst (original) +++ python/branches/py3k/Doc/distutils/examples.rst Fri Mar 12 11:06:40 2010 @@ -257,9 +257,9 @@ (maintainer and maintainer_email) must be supplied -If you use the reStructuredText syntax in the `long_description` field and +If you use the reStructuredText syntax in the ``long_description`` field and `docutils `_ is installed you can check if -the syntax is fine with the ``check`` command, using the `restructuredtext` +the syntax is fine with the ``check`` command, using the ``restructuredtext`` option. For example, if the :file:`setup.py` script is changed like this:: @@ -278,7 +278,7 @@ url='http://example.com', long_description=desc) Where the long description is broken, ``check`` will be able to detect it -by using the `docutils` parser:: +by using the :mod:`docutils` parser:: $ pythontrunk setup.py check --restructuredtext running check @@ -293,20 +293,20 @@ The :func:`distutils.core.setup` function provides a command-line interface that allows you to query the metadata fields of a project through the -`setup.py` script of a given project:: +:file:`setup.py` script of a given project:: $ python setup.py --name distribute -This call reads the `name` metadata by running the +This call reads the ``name`` metadata by running the :func:`distutils.core.setup` function. Although, when a source or binary distribution is created with Distutils, the metadata fields are written in a static file called :file:`PKG-INFO`. When a Distutils-based project is installed in Python, the :file:`PKG-INFO` file is copied alongside the modules and packages of the distribution under :file:`NAME-VERSION-pyX.X.egg-info`, -where `NAME` is the name of the project, `VERSION` its version as defined -in the Metadata, and `pyX.X` the major and minor version of Python like -`2.7` or `3.2`. +where ``NAME`` is the name of the project, ``VERSION`` its version as defined +in the Metadata, and ``pyX.X`` the major and minor version of Python like +``2.7`` or ``3.2``. You can read back this static file, by using the :class:`distutils.dist.DistributionMetadata` class and its Modified: python/branches/py3k/Doc/distutils/uploading.rst ============================================================================== --- python/branches/py3k/Doc/distutils/uploading.rst (original) +++ python/branches/py3k/Doc/distutils/uploading.rst Fri Mar 12 11:06:40 2010 @@ -60,13 +60,13 @@ setup(name='Distutils', long_description=open('README.txt')) -In that case, `README.txt` is a regular reStructuredText text file located -in the root of the package besides `setup.py`. +In that case, :file:`README.txt` is a regular reStructuredText text file located +in the root of the package besides :file:`setup.py`. To prevent registering broken reStructuredText content, you can use the -:program:`rst2html` program that is provided by the `docutils` package +:program:`rst2html` program that is provided by the :mod:`docutils` package and check the ``long_description`` from the command line:: $ python setup.py --long-description | rst2html.py > output.html -`docutils` will display a warning if there's something wrong with your syntax. +:mod:`docutils` will display a warning if there's something wrong with your syntax. Modified: python/branches/py3k/Doc/library/http.client.rst ============================================================================== --- python/branches/py3k/Doc/library/http.client.rst (original) +++ python/branches/py3k/Doc/library/http.client.rst Fri Mar 12 11:06:40 2010 @@ -498,7 +498,7 @@ .. attribute:: HTTPResponse.debuglevel - A debugging hook. If `debuglevel` is greater than zero, messages + A debugging hook. If :attr:`debuglevel` is greater than zero, messages will be printed to stdout as the response is read and parsed. Modified: python/branches/py3k/Doc/library/logging.rst ============================================================================== --- python/branches/py3k/Doc/library/logging.rst (original) +++ python/branches/py3k/Doc/library/logging.rst Fri Mar 12 11:06:40 2010 @@ -1210,12 +1210,12 @@ :class:`Handler` subclass are passed to its :meth:`handleError` method. The default implementation of :meth:`handleError` in :class:`Handler` checks -to see if a module-level variable, `raiseExceptions`, is set. If set, a -traceback is printed to `sys.stderr`. If not set, the exception is swallowed. +to see if a module-level variable, :data:`raiseExceptions`, is set. If set, a +traceback is printed to :data:`sys.stderr`. If not set, the exception is swallowed. -**Note:** The default value of `raiseExceptions` is `True`. This is because +**Note:** The default value of :data:`raiseExceptions` is ``True``. This is because during development, you typically want to be notified of any exceptions that -occur. It's advised that you set `raiseExceptions` to `False` for production +occur. It's advised that you set :data:`raiseExceptions` to ``False`` for production usage. .. _context-info: Modified: python/branches/py3k/Doc/library/site.rst ============================================================================== --- python/branches/py3k/Doc/library/site.rst (original) +++ python/branches/py3k/Doc/library/site.rst Fri Mar 12 11:06:40 2010 @@ -124,9 +124,9 @@ .. function:: getuserbase() - Returns the `user base` directory path. + Returns the "user base" directory path. - The `user base` directory can be used to store data. If the global + The "user base" directory can be used to store data. If the global variable ``USER_BASE`` is not initialized yet, this function will also set it. Modified: python/branches/py3k/Doc/library/sys.rst ============================================================================== --- python/branches/py3k/Doc/library/sys.rst (original) +++ python/branches/py3k/Doc/library/sys.rst Fri Mar 12 11:06:40 2010 @@ -339,7 +339,7 @@ specific. If given, *default* will be returned if the object does not provide means to - retrieve the size. Otherwise a `TypeError` will be raised. + retrieve the size. Otherwise a :exc:`TypeError` will be raised. :func:`getsizeof` calls the object's ``__sizeof__`` method and adds an additional garbage collector overhead if the object is managed by the garbage Modified: python/branches/py3k/Doc/whatsnew/2.2.rst ============================================================================== --- python/branches/py3k/Doc/whatsnew/2.2.rst (original) +++ python/branches/py3k/Doc/whatsnew/2.2.rst Fri Mar 12 11:06:40 2010 @@ -30,7 +30,7 @@ to the PEP for a particular new feature. -.. seealso (now defunct) +.. see also, now defunct http://www.unixreview.com/documents/s=1356/urm0109h/0109h.htm "What's So Special About Python 2.2?" is also about the new 2.2 features, and Modified: python/branches/py3k/Doc/whatsnew/2.7.rst ============================================================================== --- python/branches/py3k/Doc/whatsnew/2.7.rst (original) +++ python/branches/py3k/Doc/whatsnew/2.7.rst Fri Mar 12 11:06:40 2010 @@ -539,7 +539,7 @@ Contributed by Raymond Hettinger; :issue:`1696199`. - The new `OrderedDict` class is described in the earlier section + The new `~collections.OrderedDict` class is described in the earlier section :ref:`pep-0372`. The :class:`namedtuple` class now has an optional *rename* parameter. From python-checkins at python.org Fri Mar 12 11:07:31 2010 From: python-checkins at python.org (georg.brandl) Date: Fri, 12 Mar 2010 11:07:31 +0100 (CET) Subject: [Python-checkins] r78863 - python/branches/py3k Message-ID: <20100312100731.F168DBF1D@mail.python.org> Author: georg.brandl Date: Fri Mar 12 11:07:31 2010 New Revision: 78863 Log: Commit merge properties (missing from r78862). Merged revisions 78859-78860 via svnmerge from svn+ssh://pythondev at svn.python.org/python/trunk ........ r78859 | georg.brandl | 2010-03-12 10:57:43 +0100 (Fr, 12 M?r 2010) | 1 line Get rid of backticks. ........ r78860 | georg.brandl | 2010-03-12 11:02:03 +0100 (Fr, 12 M?r 2010) | 1 line Fix warnings from "make check". ........ Modified: python/branches/py3k/ (props changed) From python-checkins at python.org Fri Mar 12 15:20:59 2010 From: python-checkins at python.org (victor.stinner) Date: Fri, 12 Mar 2010 15:20:59 +0100 (CET) Subject: [Python-checkins] r78868 - in python/branches/py3k: Lib/sysconfig.py Lib/test/test_sys.py Modules/getpath.c Message-ID: <20100312142059.C0570F65E@mail.python.org> Author: victor.stinner Date: Fri Mar 12 15:20:59 2010 New Revision: 78868 Log: Merged revisions 78835-78837 via svnmerge from svn+ssh://pythondev at svn.python.org/python/trunk ........ r78835 | victor.stinner | 2010-03-11 13:34:39 +0100 (jeu., 11 mars 2010) | 7 lines Issue #7774: Set sys.executable to an empty string if argv[0] has been set to an non existent program name and Python is unable to retrieve the real program name. Fix also sysconfig: if sys.executable is an empty string, use the current working directory. ........ r78836 | victor.stinner | 2010-03-11 14:27:35 +0100 (jeu., 11 mars 2010) | 4 lines Fix test_executable introduce in previous commit (r78835): Windows is able to retrieve the absolute Python path even if argv[0] has been set to a non existent program name. ........ r78837 | victor.stinner | 2010-03-11 14:46:06 +0100 (jeu., 11 mars 2010) | 3 lines Another fix to test_executable() of test_sys: set the current working to avoid the #7774 bug. ........ Modified: python/branches/py3k/ (props changed) python/branches/py3k/Lib/sysconfig.py python/branches/py3k/Lib/test/test_sys.py python/branches/py3k/Modules/getpath.c Modified: python/branches/py3k/Lib/sysconfig.py ============================================================================== --- python/branches/py3k/Lib/sysconfig.py (original) +++ python/branches/py3k/Lib/sysconfig.py Fri Mar 12 15:20:59 2010 @@ -84,7 +84,12 @@ _EXEC_PREFIX = os.path.normpath(sys.exec_prefix) _CONFIG_VARS = None _USER_BASE = None -_PROJECT_BASE = os.path.dirname(realpath(sys.executable)) +if sys.executable: + _PROJECT_BASE = os.path.dirname(realpath(sys.executable)) +else: + # sys.executable can be empty if argv[0] has been changed and Python is + # unable to retrieve the real program name + _PROJECT_BASE = realpath(os.getcwd()) if os.name == "nt" and "pcbuild" in _PROJECT_BASE[-8:].lower(): _PROJECT_BASE = realpath(os.path.join(_PROJECT_BASE, pardir)) Modified: python/branches/py3k/Lib/test/test_sys.py ============================================================================== --- python/branches/py3k/Lib/test/test_sys.py (original) +++ python/branches/py3k/Lib/test/test_sys.py Fri Mar 12 15:20:59 2010 @@ -479,6 +479,23 @@ out = p.communicate()[0].strip() self.assertEqual(out, b'?') + def test_executable(self): + # Issue #7774: Ensure that sys.executable is an empty string if argv[0] + # has been set to an non existent program name and Python is unable to + # retrieve the real program name + import subprocess + # For a normal installation, it should work without 'cwd' + # argument. For test runs in the build directory, see #7774. + python_dir = os.path.dirname(os.path.realpath(sys.executable)) + p = subprocess.Popen( + ["nonexistent", "-c", + 'import sys; print(sys.executable.encode("ascii", "backslashreplace"))'], + executable=sys.executable, stdout=subprocess.PIPE, cwd=python_dir) + stdout = p.communicate()[0] + executable = stdout.strip().decode("ASCII") + p.wait() + self.assertIn(executable, ["b''", repr(sys.executable.encode("ascii", "backslashreplace"))]) + class SizeofTest(unittest.TestCase): Modified: python/branches/py3k/Modules/getpath.c ============================================================================== --- python/branches/py3k/Modules/getpath.c (original) +++ python/branches/py3k/Modules/getpath.c Fri Mar 12 15:20:59 2010 @@ -522,7 +522,7 @@ } else progpath[0] = '\0'; - if (progpath[0] != SEP) + if (progpath[0] != SEP && progpath[0] != '\0') absolutize(progpath); wcsncpy(argv0_path, progpath, MAXPATHLEN); argv0_path[MAXPATHLEN] = '\0'; From python-checkins at python.org Fri Mar 12 15:27:16 2010 From: python-checkins at python.org (victor.stinner) Date: Fri, 12 Mar 2010 15:27:16 +0100 (CET) Subject: [Python-checkins] r78869 - python/branches/py3k/Misc/NEWS Message-ID: <20100312142716.52B18C634@mail.python.org> Author: victor.stinner Date: Fri Mar 12 15:27:16 2010 New Revision: 78869 Log: Oops, I loose the NEWS change in my previous backport (r78868) of r78835. Modified: python/branches/py3k/Misc/NEWS Modified: python/branches/py3k/Misc/NEWS ============================================================================== --- python/branches/py3k/Misc/NEWS (original) +++ python/branches/py3k/Misc/NEWS Fri Mar 12 15:27:16 2010 @@ -270,6 +270,10 @@ Library ------- +- Issue #7774: Set sys.executable to an empty string if argv[0] has been set to + an non existent program name and Python is unable to retrieve the real + program name + - Issue #7880: Fix sysconfig when the python executable is a symbolic link. - Issue #6509: fix re.sub to work properly when the pattern, the string, and From python-checkins at python.org Fri Mar 12 15:30:26 2010 From: python-checkins at python.org (victor.stinner) Date: Fri, 12 Mar 2010 15:30:26 +0100 (CET) Subject: [Python-checkins] r78870 - python/trunk/Misc/NEWS Message-ID: <20100312143026.2DE0EDFCE@mail.python.org> Author: victor.stinner Date: Fri Mar 12 15:30:26 2010 New Revision: 78870 Log: NEWS: issue #7774 is related to Library (sys), not Core and Builtins Modified: python/trunk/Misc/NEWS Modified: python/trunk/Misc/NEWS ============================================================================== --- python/trunk/Misc/NEWS (original) +++ python/trunk/Misc/NEWS Fri Mar 12 15:30:26 2010 @@ -12,10 +12,6 @@ Core and Builtins ----------------- -- Issue #7774: Set sys.executable to an empty string if argv[0] has been - set to an non existent program name and Python is unable to retrieve the real - program name - - Issue #3137: Don't ignore errors at startup, especially a keyboard interrupt (SIGINT). If an error occurs while importing the site module, the error is printed and Python exits. Initialize the GIL before importing the site @@ -24,6 +20,10 @@ Library ------- +- Issue #7774: Set sys.executable to an empty string if argv[0] has been + set to an non existent program name and Python is unable to retrieve the real + program name + - Issue #8117: logging: Improved algorithm for computing initial rollover time for TimedRotatingFileHandler by using the modification time of an existing log file to compute the next rollover time. If the log file does not exist, From python-checkins at python.org Fri Mar 12 15:31:06 2010 From: python-checkins at python.org (victor.stinner) Date: Fri, 12 Mar 2010 15:31:06 +0100 (CET) Subject: [Python-checkins] r78871 - python/branches/py3k Message-ID: <20100312143106.CBF3EF304@mail.python.org> Author: victor.stinner Date: Fri Mar 12 15:31:06 2010 New Revision: 78871 Log: Blocked revisions 78870 via svnmerge ........ r78870 | victor.stinner | 2010-03-12 15:30:26 +0100 (ven., 12 mars 2010) | 1 line NEWS: issue #7774 is related to Library (sys), not Core and Builtins ........ Modified: python/branches/py3k/ (props changed) From python-checkins at python.org Fri Mar 12 15:45:56 2010 From: python-checkins at python.org (victor.stinner) Date: Fri, 12 Mar 2010 15:45:56 +0100 (CET) Subject: [Python-checkins] r78872 - in python/branches/py3k: Lib/site.py Misc/NEWS Modules/main.c Parser/tokenizer.c Python/import.c Python/pythonrun.c Message-ID: <20100312144556.62C7DF4FB@mail.python.org> Author: victor.stinner Date: Fri Mar 12 15:45:56 2010 New Revision: 78872 Log: Merged revisions 78826 via svnmerge from svn+ssh://pythondev at svn.python.org/python/trunk ........ r78826 | victor.stinner | 2010-03-10 23:30:19 +0100 (mer., 10 mars 2010) | 5 lines Issue #3137: Don't ignore errors at startup, especially a keyboard interrupt (SIGINT). If an error occurs while importing the site module, the error is printed and Python exits. Initialize the GIL before importing the site module. ........ Modified: python/branches/py3k/ (props changed) python/branches/py3k/Lib/site.py python/branches/py3k/Misc/NEWS python/branches/py3k/Modules/main.c python/branches/py3k/Parser/tokenizer.c python/branches/py3k/Python/import.c python/branches/py3k/Python/pythonrun.c Modified: python/branches/py3k/Lib/site.py ============================================================================== --- python/branches/py3k/Lib/site.py (original) +++ python/branches/py3k/Lib/site.py Fri Mar 12 15:45:56 2010 @@ -489,11 +489,12 @@ pass except Exception as err: if os.environ.get("PYTHONVERBOSE"): - raise - sys.stderr.write( - "Error in sitecustomize; set PYTHONVERBOSE for traceback:\n" - "%s: %s\n" % - (err.__class__.__name__, err)) + sys.excepthook(*sys.exc_info()) + else: + sys.stderr.write( + "Error in sitecustomize; set PYTHONVERBOSE for traceback:\n" + "%s: %s\n" % + (err.__class__.__name__, err)) def execusercustomize(): @@ -502,6 +503,14 @@ import usercustomize except ImportError: pass + except Exception as err: + if os.environ.get("PYTHONVERBOSE"): + sys.excepthook(*sys.exc_info()) + else: + sys.stderr.write( + "Error in usercustomize; set PYTHONVERBOSE for traceback:\n" + "%s: %s\n" % + (err.__class__.__name__, err)) def main(): Modified: python/branches/py3k/Misc/NEWS ============================================================================== --- python/branches/py3k/Misc/NEWS (original) +++ python/branches/py3k/Misc/NEWS Fri Mar 12 15:45:56 2010 @@ -12,6 +12,11 @@ Core and Builtins ----------------- +- Issue #3137: Don't ignore errors at startup, especially a keyboard interrupt + (SIGINT). If an error occurs while importing the site module, the error is + printed and Python exits. Initialize the GIL before importing the site + module. + - Issue #7173: Generator finalization could invalidate sys.exc_info(). - Issue #7544: Preallocate thread memory before creating the thread to avoid Modified: python/branches/py3k/Modules/main.c ============================================================================== --- python/branches/py3k/Modules/main.c (original) +++ python/branches/py3k/Modules/main.c Fri Mar 12 15:45:56 2010 @@ -595,10 +595,16 @@ else p_cfilename = ""; } - sts = PyRun_AnyFileExFlags( - fp, - p_cfilename, - filename != NULL, &cf) != 0; + /* call pending calls like signal handlers (SIGINT) */ + if (Py_MakePendingCalls() == -1) { + PyErr_Print(); + sts = 1; + } else { + sts = PyRun_AnyFileExFlags( + fp, + p_cfilename, + filename != NULL, &cf) != 0; + } Py_XDECREF(filenameObj); } Modified: python/branches/py3k/Parser/tokenizer.c ============================================================================== --- python/branches/py3k/Parser/tokenizer.c (original) +++ python/branches/py3k/Parser/tokenizer.c Fri Mar 12 15:45:56 2010 @@ -1242,21 +1242,28 @@ } #ifdef PGEN -#define verify_identifier(s,e) 1 +#define verify_identifier(tok) 1 #else /* Verify that the identifier follows PEP 3131. */ static int -verify_identifier(char *start, char *end) +verify_identifier(struct tok_state *tok) { PyObject *s; int result; - s = PyUnicode_DecodeUTF8(start, end-start, NULL); + s = PyUnicode_DecodeUTF8(tok->start, tok->cur - tok->start, NULL); if (s == NULL) { - PyErr_Clear(); + if (PyErr_ExceptionMatches(PyExc_UnicodeDecodeError)) { + PyErr_Clear(); + tok->done = E_IDENTIFIER; + } else { + tok->done = E_ERROR; + } return 0; } result = PyUnicode_IsIdentifier(s); Py_DECREF(s); + if (result == 0) + tok->done = E_IDENTIFIER; return result; } #endif @@ -1405,7 +1412,7 @@ } tok_backup(tok, c); if (nonascii && - !verify_identifier(tok->start, tok->cur)) { + !verify_identifier(tok)) { tok->done = E_IDENTIFIER; return ERRORTOKEN; } Modified: python/branches/py3k/Python/import.c ============================================================================== --- python/branches/py3k/Python/import.c (original) +++ python/branches/py3k/Python/import.c Fri Mar 12 15:45:56 2010 @@ -2774,8 +2774,6 @@ } else { /* No globals -- use standard builtins, and fake globals */ - PyErr_Clear(); - builtins = PyImport_ImportModuleLevel("builtins", NULL, NULL, NULL, 0); if (builtins == NULL) Modified: python/branches/py3k/Python/pythonrun.c ============================================================================== --- python/branches/py3k/Python/pythonrun.c (original) +++ python/branches/py3k/Python/pythonrun.c Fri Mar 12 15:45:56 2010 @@ -296,13 +296,14 @@ if (initstdio() < 0) Py_FatalError( "Py_Initialize: can't initialize sys standard streams"); - if (!Py_NoSiteFlag) - initsite(); /* Module site */ /* auto-thread-state API, if available */ #ifdef WITH_THREAD _PyGILState_Init(interp, tstate); #endif /* WITH_THREAD */ + + if (!Py_NoSiteFlag) + initsite(); /* Module site */ } void @@ -711,22 +712,12 @@ static void initsite(void) { - PyObject *m, *f; + PyObject *m; m = PyImport_ImportModule("site"); if (m == NULL) { - f = PySys_GetObject("stderr"); - if (f == NULL || f == Py_None) - return; - if (Py_VerboseFlag) { - PyFile_WriteString( - "'import site' failed; traceback:\n", f); - PyErr_Print(); - } - else { - PyFile_WriteString( - "'import site' failed; use -v for traceback\n", f); - PyErr_Clear(); - } + PyErr_Print(); + Py_Finalize(); + exit(1); } else { Py_DECREF(m); @@ -1907,6 +1898,8 @@ char *msg = NULL; errtype = PyExc_SyntaxError; switch (err->error) { + case E_ERROR: + return; case E_SYNTAX: errtype = PyExc_IndentationError; if (err->expected == INDENT) From python-checkins at python.org Fri Mar 12 15:47:28 2010 From: python-checkins at python.org (victor.stinner) Date: Fri, 12 Mar 2010 15:47:28 +0100 (CET) Subject: [Python-checkins] r78873 - python/branches/py3k Message-ID: <20100312144728.92B66C547@mail.python.org> Author: victor.stinner Date: Fri Mar 12 15:47:28 2010 New Revision: 78873 Log: Blocked revisions 78827 via svnmerge ........ r78827 | victor.stinner | 2010-03-10 23:45:04 +0100 (mer., 10 mars 2010) | 4 lines ooops, fix error message in execusercustomize() Copy/paste failure :-) ........ Modified: python/branches/py3k/ (props changed) From ncoghlan at gmail.com Fri Mar 12 17:16:57 2010 From: ncoghlan at gmail.com (Nick Coghlan) Date: Sat, 13 Mar 2010 02:16:57 +1000 Subject: [Python-checkins] r78846 - in python/trunk: Demo/cgi/cgi1.py Demo/cgi/cgi2.py Demo/cgi/cgi3.py Demo/turtle/tdemo_I_dontlike_tiltdemo.py Demo/turtle/tdemo_bytedesign.py Demo/turtle/tdemo_clock.py Demo/turtle/tdemo_fractalcurves.py Demo/turtle/tdemo_lindenmayer_indian.py Demo/turtle/tdemo_minimal_hanoi.py Demo/turtle/tdemo_paint.py Demo/turtle/tdemo_peace.py Demo/turtle/tdemo_penrose.py Demo/turtle/tdemo_planet_and_moon.py Demo/turtle/tdemo_tree.py Demo/turtle/tdemo_yinyang.py Demo/turtle/turtleDemo.py Demo/turtle/turtledemo_two_canvases.py Doc/includes/email-alternative.py Lib/test/test_bz2.py Lib/test/test_optparse.py Mac/BuildScript/build-installer.py Mac/Tools/fixapplepython23.py Mac/scripts/zappycfiles.py Tools/faqwiz/faqw.py Tools/pybench/Setup.py Tools/scripts/parseentities.py In-Reply-To: <20100311223326.1E74DC6CF@mail.python.org> References: <20100311223326.1E74DC6CF@mail.python.org> Message-ID: <4B9A68F9.3010703@gmail.com> benjamin.peterson wrote: > Author: benjamin.peterson > Date: Thu Mar 11 23:33:25 2010 > New Revision: 78846 > > Log: > normalize shebang lines to #!/usr/bin/env python > > Modified: > python/trunk/Demo/cgi/cgi1.py > python/trunk/Demo/cgi/cgi2.py > python/trunk/Demo/cgi/cgi3.py Wouldn't the cgi.py comment apply to the cgi demo scripts as well? Cheers, Nick. -- Nick Coghlan | ncoghlan at gmail.com | Brisbane, Australia --------------------------------------------------------------- From benjamin at python.org Fri Mar 12 17:20:44 2010 From: benjamin at python.org (Benjamin Peterson) Date: Fri, 12 Mar 2010 10:20:44 -0600 Subject: [Python-checkins] r78846 - in python/trunk: Demo/cgi/cgi1.py Demo/cgi/cgi2.py Demo/cgi/cgi3.py Demo/turtle/tdemo_I_dontlike_tiltdemo.py Demo/turtle/tdemo_bytedesign.py Demo/turtle/tdemo_clock.py Demo/turtle/tdemo_fractalcurves.py Demo/turtle/tdem Message-ID: <1afaf6161003120820pf6800acg3c469bad73449f24@mail.gmail.com> 2010/3/12 Nick Coghlan : > benjamin.peterson wrote: >> Author: benjamin.peterson >> Date: Thu Mar 11 23:33:25 2010 >> New Revision: 78846 >> >> Log: >> normalize shebang lines to #!/usr/bin/env python >> >> Modified: >> ? ?python/trunk/Demo/cgi/cgi1.py >> ? ?python/trunk/Demo/cgi/cgi2.py >> ? ?python/trunk/Demo/cgi/cgi3.py > > Wouldn't the cgi.py comment apply to the cgi demo scripts as well? I would expect that those wouldn't be used in many production settings. -- Regards, Benjamin From ncoghlan at gmail.com Fri Mar 12 17:21:26 2010 From: ncoghlan at gmail.com (Nick Coghlan) Date: Sat, 13 Mar 2010 02:21:26 +1000 Subject: [Python-checkins] r78869 - python/branches/py3k/Misc/NEWS In-Reply-To: <20100312142716.52B18C634@mail.python.org> References: <20100312142716.52B18C634@mail.python.org> Message-ID: <4B9A6A06.3030405@gmail.com> victor.stinner wrote: > Author: victor.stinner > Date: Fri Mar 12 15:27:16 2010 > New Revision: 78869 > > Log: > Oops, I loose the NEWS change in my previous backport (r78868) of r78835. Clearing up a terminology nit here since I can see it getting ingrained otherwise: moving code from 2.x -> 3.x (i.e. trunk to the py3k branch) is a forward port. We can't backport anything to py3k - it's the most forward point of development. Cheers, Nick. -- Nick Coghlan | ncoghlan at gmail.com | Brisbane, Australia --------------------------------------------------------------- From python-checkins at python.org Fri Mar 12 18:00:41 2010 From: python-checkins at python.org (victor.stinner) Date: Fri, 12 Mar 2010 18:00:41 +0100 (CET) Subject: [Python-checkins] r78875 - in python/branches/py3k: Modules/_hashopenssl.c Modules/zipimport.c Objects/funcobject.c Objects/typeobject.c Python/ceval.c Python/import.c Message-ID: <20100312170041.C8C16ED77@mail.python.org> Author: victor.stinner Date: Fri Mar 12 18:00:41 2010 New Revision: 78875 Log: Issue #6697: use %U format instead of _PyUnicode_AsString(), because _PyUnicode_AsString() was not checked for error (NULL). The unicode string is no more truncated to 200 or 400 *bytes*. Modified: python/branches/py3k/Modules/_hashopenssl.c python/branches/py3k/Modules/zipimport.c python/branches/py3k/Objects/funcobject.c python/branches/py3k/Objects/typeobject.c python/branches/py3k/Python/ceval.c python/branches/py3k/Python/import.c Modified: python/branches/py3k/Modules/_hashopenssl.c ============================================================================== --- python/branches/py3k/Modules/_hashopenssl.c (original) +++ python/branches/py3k/Modules/_hashopenssl.c Fri Mar 12 18:00:41 2010 @@ -294,10 +294,7 @@ static PyObject * EVP_repr(EVPobject *self) { - char buf[100]; - PyOS_snprintf(buf, sizeof(buf), "<%s HASH object @ %p>", - _PyUnicode_AsString(self->name), self); - return PyUnicode_FromString(buf); + return PyUnicode_FromFormat("<%U HASH object @ %p>", self->name, self); } #if HASH_OBJ_CONSTRUCTOR Modified: python/branches/py3k/Modules/zipimport.c ============================================================================== --- python/branches/py3k/Modules/zipimport.c (original) +++ python/branches/py3k/Modules/zipimport.c Fri Mar 12 18:00:41 2010 @@ -321,15 +321,12 @@ /* add __path__ to the module *before* the code gets executed */ PyObject *pkgpath, *fullpath; - char *prefix = _PyUnicode_AsString(self->prefix); char *subname = get_subname(fullname); int err; - fullpath = PyUnicode_FromFormat("%s%c%s%s", - _PyUnicode_AsString(self->archive), - SEP, - prefix ? prefix : "", - subname); + fullpath = PyUnicode_FromFormat("%U%c%U%s", + self->archive, SEP, + self->prefix, subname); if (fullpath == NULL) goto error; Modified: python/branches/py3k/Objects/funcobject.c ============================================================================== --- python/branches/py3k/Objects/funcobject.c (original) +++ python/branches/py3k/Objects/funcobject.c Fri Mar 12 18:00:41 2010 @@ -295,9 +295,9 @@ PyTuple_GET_SIZE(op->func_closure)); if (nclosure != nfree) { PyErr_Format(PyExc_ValueError, - "%s() requires a code object with %zd free vars," + "%U() requires a code object with %zd free vars," " not %zd", - _PyUnicode_AsString(op->func_name), + op->func_name, nclosure, nfree); return -1; } Modified: python/branches/py3k/Objects/typeobject.c ============================================================================== --- python/branches/py3k/Objects/typeobject.c (original) +++ python/branches/py3k/Objects/typeobject.c Fri Mar 12 18:00:41 2010 @@ -1295,10 +1295,15 @@ for (j = i + 1; j < n; j++) { if (PyList_GET_ITEM(list, j) == o) { o = class_name(o); - PyErr_Format(PyExc_TypeError, - "duplicate base class %.400s", - o ? _PyUnicode_AsString(o) : "?"); - Py_XDECREF(o); + if (o != NULL) { + PyErr_Format(PyExc_TypeError, + "duplicate base class %U", + o); + Py_DECREF(o); + } else { + PyErr_SetString(PyExc_TypeError, + "duplicate base class"); + } return -1; } } Modified: python/branches/py3k/Python/ceval.c ============================================================================== --- python/branches/py3k/Python/ceval.c (original) +++ python/branches/py3k/Python/ceval.c Fri Mar 12 18:00:41 2010 @@ -3989,10 +3989,10 @@ if (PyDict_GetItem(kwdict, key) != NULL) { PyErr_Format(PyExc_TypeError, "%.200s%s got multiple values " - "for keyword argument '%.200s'", + "for keyword argument '%U'", PyEval_GetFuncName(func), PyEval_GetFuncDesc(func), - _PyUnicode_AsString(key)); + key); Py_DECREF(key); Py_DECREF(value); Py_DECREF(kwdict); Modified: python/branches/py3k/Python/import.c ============================================================================== --- python/branches/py3k/Python/import.c (original) +++ python/branches/py3k/Python/import.c Fri Mar 12 18:00:41 2010 @@ -2691,8 +2691,8 @@ parent = PyDict_GetItem(modules, parentname); if (parent == NULL) { PyErr_Format(PyExc_ImportError, - "reload(): parent %.200s not in sys.modules", - _PyUnicode_AsString(parentname)); + "reload(): parent %U not in sys.modules", + parentname); Py_DECREF(parentname); imp_modules_reloading_clear(); return NULL; From ncoghlan at gmail.com Fri Mar 12 18:07:22 2010 From: ncoghlan at gmail.com (Nick Coghlan) Date: Sat, 13 Mar 2010 03:07:22 +1000 Subject: [Python-checkins] r78846 - in python/trunk: Demo/cgi/cgi1.py Demo/cgi/cgi2.py Demo/cgi/cgi3.py Demo/turtle/tdemo_I_dontlike_tiltdemo.py Demo/turtle/tdemo_bytedesign.py Demo/turtle/tdemo_clock.py Demo/turtle/tdemo_fractalcurves.py Demo/turtle/tdem In-Reply-To: <1afaf6161003120820pf6800acg3c469bad73449f24@mail.gmail.com> References: <1afaf6161003120820pf6800acg3c469bad73449f24@mail.gmail.com> Message-ID: <4B9A74CA.2060200@gmail.com> Benjamin Peterson wrote: > 2010/3/12 Nick Coghlan : >> Wouldn't the cgi.py comment apply to the cgi demo scripts as well? > > I would expect that those wouldn't be used in many production settings. Fair point. -- Nick Coghlan | ncoghlan at gmail.com | Brisbane, Australia --------------------------------------------------------------- From python-checkins at python.org Fri Mar 12 18:17:58 2010 From: python-checkins at python.org (victor.stinner) Date: Fri, 12 Mar 2010 18:17:58 +0100 (CET) Subject: [Python-checkins] r78876 - in python/branches/py3k: Lib/test/test_builtin.py Objects/object.c Message-ID: <20100312171758.6DF1FE222@mail.python.org> Author: victor.stinner Date: Fri Mar 12 18:17:58 2010 New Revision: 78876 Log: Issue #6697: catch _PyUnicode_AsString() errors in getattr() and setattr() builtin functions. Modified: python/branches/py3k/Lib/test/test_builtin.py python/branches/py3k/Objects/object.c Modified: python/branches/py3k/Lib/test/test_builtin.py ============================================================================== --- python/branches/py3k/Lib/test/test_builtin.py (original) +++ python/branches/py3k/Lib/test/test_builtin.py Fri Mar 12 18:17:58 2010 @@ -479,6 +479,8 @@ self.assertRaises(TypeError, getattr, sys, 1, "foo") self.assertRaises(TypeError, getattr) self.assertRaises(AttributeError, getattr, sys, chr(sys.maxunicode)) + # unicode surrogates are not encodable to the default encoding (utf8) + self.assertRaises(AttributeError, getattr, 1, "\uDAD1\uD51E") def test_hasattr(self): import sys Modified: python/branches/py3k/Objects/object.c ============================================================================== --- python/branches/py3k/Objects/object.c (original) +++ python/branches/py3k/Objects/object.c Fri Mar 12 18:17:58 2010 @@ -799,8 +799,12 @@ } if (tp->tp_getattro != NULL) return (*tp->tp_getattro)(v, name); - if (tp->tp_getattr != NULL) - return (*tp->tp_getattr)(v, _PyUnicode_AsString(name)); + if (tp->tp_getattr != NULL) { + char *name_str = _PyUnicode_AsString(name); + if (name_str == NULL) + return NULL; + return (*tp->tp_getattr)(v, name_str); + } PyErr_Format(PyExc_AttributeError, "'%.50s' object has no attribute '%U'", tp->tp_name, name); @@ -840,7 +844,10 @@ return err; } if (tp->tp_setattr != NULL) { - err = (*tp->tp_setattr)(v, _PyUnicode_AsString(name), value); + char *name_str = _PyUnicode_AsString(name); + if (name_str == NULL) + return -1; + err = (*tp->tp_setattr)(v, name_str, value); Py_DECREF(name); return err; } @@ -1019,8 +1026,8 @@ } PyErr_Format(PyExc_AttributeError, - "'%.50s' object has no attribute '%.400s'", - tp->tp_name, _PyUnicode_AsString(name)); + "'%.50s' object has no attribute '%U'", + tp->tp_name, name); done: Py_DECREF(name); return res; From python-checkins at python.org Fri Mar 12 19:27:14 2010 From: python-checkins at python.org (tarek.ziade) Date: Fri, 12 Mar 2010 19:27:14 +0100 (CET) Subject: [Python-checkins] r78877 - in python/branches/release26-maint: Lib/distutils/tests/test_build_ext.py Lib/distutils/tests/xxmodule.c Misc/NEWS Message-ID: <20100312182714.1669BED77@mail.python.org> Author: tarek.ziade Date: Fri Mar 12 19:27:13 2010 New Revision: 78877 Log: Merged revisions 78707,78709 via svnmerge from svn+ssh://pythondev at svn.python.org/python/trunk ........ r78707 | tarek.ziade | 2010-03-05 20:18:27 -0500 (Fri, 05 Mar 2010) | 1 line provide a fallback for xxmodule.c in case the buildir is not present ........ r78709 | tarek.ziade | 2010-03-05 20:23:21 -0500 (Fri, 05 Mar 2010) | 1 line simplified the fallback case ........ Added: python/branches/release26-maint/Lib/distutils/tests/xxmodule.c - copied unchanged from r78709, /python/trunk/Lib/distutils/tests/xxmodule.c Modified: python/branches/release26-maint/ (props changed) python/branches/release26-maint/Lib/distutils/tests/test_build_ext.py python/branches/release26-maint/Misc/NEWS Modified: python/branches/release26-maint/Lib/distutils/tests/test_build_ext.py ============================================================================== --- python/branches/release26-maint/Lib/distutils/tests/test_build_ext.py (original) +++ python/branches/release26-maint/Lib/distutils/tests/test_build_ext.py Fri Mar 12 19:27:13 2010 @@ -18,8 +18,7 @@ ALREADY_TESTED = False def _get_source_filename(): - srcdir = sysconfig.get_config_var('srcdir') - return os.path.join(srcdir, 'Modules', 'xxmodule.c') + return os.path.join(os.path.dirname(__file__), 'xxmodule.c') class BuildExtTestCase(support.TempdirManager, support.LoggingSilencer, Modified: python/branches/release26-maint/Misc/NEWS ============================================================================== --- python/branches/release26-maint/Misc/NEWS (original) +++ python/branches/release26-maint/Misc/NEWS Fri Mar 12 19:27:13 2010 @@ -21,6 +21,7 @@ ------- - Reverting the changes made in r78432. Discussed in the tracker issue #7540. +- Issue #8107: Fixed test_distutils so it uses a local xxmodule.c file. Extension Modules ----------------- From python-checkins at python.org Fri Mar 12 19:32:53 2010 From: python-checkins at python.org (tarek.ziade) Date: Fri, 12 Mar 2010 19:32:53 +0100 Subject: [Python-checkins] distutils2: now checking Requires-Python and Name Message-ID: tarek.ziade pushed 29e64afc676d to distutils2: http://hg.python.org/distutils2/rev/29e64afc676d changeset: 73:29e64afc676d tag: tip user: Tarek Ziade date: Fri Mar 12 13:26:01 2010 -0500 summary: now checking Requires-Python and Name files: src/distutils2/metadata.py, src/distutils2/tests/test_metadata.py, src/distutils2/version.py diff --git a/src/distutils2/metadata.py b/src/distutils2/metadata.py --- a/src/distutils2/metadata.py +++ b/src/distutils2/metadata.py @@ -1,55 +1,9 @@ """ -================================================== Implementation of the Metadata for Python packages -================================================== -The file format is RFC 822 and there are currently three implementations. -We only support reading/writing Metadata v1.0 or v1.2. If 1.1 is encountered -1.1 extra fields will be ignored. +Supports all Metadata formats (1.0, 1.1, 1.2). +""" -PEP 241 - Metadata v1.0 -======================= - -- Metadata-Version -- Name -- Version -- Platform (multiple) -- Summary -- Description (optional) -- Keywords (optional) -- Home-page (optional) -- Author (optional) -- Author-email (optional) -- License (optional) - -PEP 345 - Metadata v1.2 -======================= - -# XXX adding codename ? multiple email rfc232 ? - -- Metadata-Version -- Name -- Version -- Platform (multiple) -- Supported-Platform (multiple) -- Summary -- Description (optional) -- changed format -- Keywords (optional) -- Home-page (optional) -- Download-URL -- Author (optional) -- Author-email (optional) -- Maintainer (optional) -- Maintainer-email (optional) -- License (optional) -- Classifier (multiple) -- see PEP 241 -- Requires-Python -- Requires-External (multiple) -- Requires-Dist (multiple) -- Provides-Dist (multiple) -- Obsoletes-Dist (multiple) - -""" import re import os import sys @@ -60,7 +14,8 @@ from distutils2.log import warn from distutils2.util import rfc822_escape -from distutils2.version import is_valid_predicate +from distutils2.version import (is_valid_predicate, is_valid_version, + is_valid_versions) from distutils2.errors import (MetadataConflictError, MetadataUnrecognizedVersionError) @@ -122,10 +77,11 @@ 'Requires-External') _345_MARKERS = ('Provides-Dist', 'Requires-Dist', 'Requires-Python', - 'Obsoletes-Dist', 'Requires-External', 'Maintainer', - 'Maintainer-email') + 'Obsoletes-Dist', 'Requires-External', 'Maintainer', + 'Maintainer-email') _ALL_FIELDS = [] + for field in _241_FIELDS + _314_FIELDS + _345_FIELDS: if field in _ALL_FIELDS: continue @@ -164,37 +120,37 @@ return '1.2' _ATTR2FIELD = {'metadata_version': 'Metadata-Version', - 'name': 'Name', - 'version': 'Version', - 'platform': 'Platform', - 'supported_platform': 'Supported-Platform', - 'description': 'Summary', - 'long_description': 'Description', - 'keywords': 'Keywords', - 'url': 'Home-page', - 'author': 'Author', - 'author_email': 'Author-email', - 'maintainer': 'Maintainer', - 'maintainer_email': 'Maintainer-email', - 'licence': 'License', - 'classifier': 'Classifier', - 'download_url': 'Download-URL', - 'obsoletes_dist': 'Obsoletes-Dist', - 'provides_dist': 'Provides-Dist', - 'requires_dist': 'Requires-Dist', - 'requires_python': 'Requires-Python', - 'requires_external': 'Requires-External', - 'requires': 'Requires', - 'provides': 'Provides', - 'obsoletes': 'Obsoletes', - } + 'name': 'Name', + 'version': 'Version', + 'platform': 'Platform', + 'supported_platform': 'Supported-Platform', + 'description': 'Summary', + 'long_description': 'Description', + 'keywords': 'Keywords', + 'url': 'Home-page', + 'author': 'Author', + 'author_email': 'Author-email', + 'maintainer': 'Maintainer', + 'maintainer_email': 'Maintainer-email', + 'licence': 'License', + 'classifier': 'Classifier', + 'download_url': 'Download-URL', + 'obsoletes_dist': 'Obsoletes-Dist', + 'provides_dist': 'Provides-Dist', + 'requires_dist': 'Requires-Dist', + 'requires_python': 'Requires-Python', + 'requires_external': 'Requires-External', + 'requires': 'Requires', + 'provides': 'Provides', + 'obsoletes': 'Obsoletes', + } _PREDICATE_FIELDS = ('Requires-Dist', 'Obsoletes-Dist', 'Provides-Dist') - +_VERSIONS_FIELDS = ('Requires-Python',) +_VERSION_FIELDS = ('Version',) _LISTFIELDS = ('Platform', 'Classifier', 'Obsoletes', - 'Requires', 'Provides', 'Obsoletes-Dist', - 'Provides-Dist', 'Requires-Dist', 'Requires-Python', - 'Requires-External') + 'Requires', 'Provides', 'Obsoletes-Dist', + 'Provides-Dist', 'Requires-Dist', 'Requires-External') _ELEMENTSFIELD = ('Keywords',) @@ -347,23 +303,37 @@ """Controls then sets a metadata field""" name = self._convert_name(name) - # XXX need to parse the Requires-Python value - # + if (name in _ELEMENTSFIELD + ('Platform',) and + not isinstance(value, (list, tuple))): + if isinstance(value, str): + value = value.split(',') + else: + value = [] + elif (name in _LISTFIELDS and + not isinstance(value, (list, tuple))): + if isinstance(value, str): + value = [value] + else: + value = None + if name in _PREDICATE_FIELDS and value is not None: for v in value: # check that the values are valid predicates if not is_valid_predicate(v.split(';')[0]): warn('"%s" is not a valid predicate' % v) - if name in _LISTFIELDS + _ELEMENTSFIELD: - if isinstance(value, str): - value = value.split(',') - elif name in _UNICODEFIELDS: + elif name in _VERSIONS_FIELDS and value is not None: + if not is_valid_versions(value): + warn('"%s" is not a valid predicate' % value) + elif name in _VERSION_FIELDS and value is not None: + if not is_valid_version(value): + warn('"%s" is not a valid version' % value) + + if name in _UNICODEFIELDS: value = self._encode_field(value) if name == 'Description': value = self._remove_line_prefix(value) + self._fields[name] = value - # will trigger an error in case the user - # tries to set incompatible versions fields self._set_best_version() def get(self, name): diff --git a/src/distutils2/tests/test_metadata.py b/src/distutils2/tests/test_metadata.py --- a/src/distutils2/tests/test_metadata.py +++ b/src/distutils2/tests/test_metadata.py @@ -137,11 +137,53 @@ def test_warnings(self): metadata = DistributionMetadata() - # this should raise a warning - # XXX how to test this on 2.4 ? - metadata['Requires-Dist'] = ['Funky (Groovie)'] + # these should raise a warning + values = (('Requires-Dist', 'Funky (Groovie)'), + ('Requires-Python', '1-4')) + from distutils2 import metadata as m + old = m.warn + m.warns = 0 + def _warn(*args): + m.warns += 1 + + m.warn = _warn + + try: + for name, value in values: + metadata.set(name, value) + finally: + m.warn = old + res = m.warns + del m.warns + + # we should have a certain amount of warnings + num_wanted = len(values) + self.assertEquals(num_wanted, res) + + def test_multiple_predicates(self): + metadata = DistributionMetadata() + + from distutils2 import metadata as m + old = m.warn + m.warns = 0 + + def _warn(*args): + m.warns += 1 + + # see for "3" instead of "3.0" ??? + # its seems like the MINOR VERSION can be omitted + m.warn = _warn + try: + metadata['Requires-Python'] = '>=2.6, <3.0' + metadata['Requires-Dist'] = ['Foo (>=2.6, <3.0)'] + finally: + m.warn = old + res = m.warns + del m.warns + + self.assertEquals(res, 0) def test_suite(): return unittest2.makeSuite(DistributionMetadataTestCase) diff --git a/src/distutils2/version.py b/src/distutils2/version.py --- a/src/distutils2/version.py +++ b/src/distutils2/version.py @@ -312,6 +312,7 @@ _PREDICATE = re.compile(r"(?i)^\s*([a-z_]\w*(?:\.[a-z_]\w*)*)(.*)") _VERSIONS = re.compile(r"^\s*\((.*)\)\s*$") +_PLAIN_VERSIONS = re.compile(r"^\s*(.*)\s*$") _SPLIT_CMP = re.compile(r"^\s*(<=|>=|<|>|!=|==)\s*([^\s,]+)\s*$") def _split_predicate(predicate): @@ -323,6 +324,7 @@ comp, version = match.groups() return comp, NormalizedVersion(version) + class VersionPredicate(object): """Defines a predicate: ProjectName (>ver1,ver2, ..)""" @@ -341,7 +343,6 @@ self.name, predicates = match.groups() predicates = predicates.strip() - predicates = _VERSIONS.match(predicates) if predicates is not None: predicates = predicates.groups()[0] @@ -359,6 +360,26 @@ return False return True +class Versions(VersionPredicate): + def __init__(self, predicate): + predicate = predicate.strip() + match = _PLAIN_VERSIONS.match(predicate) + if match is None: + raise ValueError('Bad predicate "%s"' % predicate) + self.name = None + predicates = match.groups()[0] + self.predicates = [_split_predicate(pred.strip()) + for pred in predicates.split(',')] + +class Version(VersionPredicate): + def __init__(self, predicate): + predicate = predicate.strip() + match = _PLAIN_VERSIONS.match(predicate) + if match is None: + raise ValueError('Bad predicate "%s"' % predicate) + self.name = None + self.predicates = _split_predicate(match.groups()[0]) + def is_valid_predicate(predicate): try: VersionPredicate(predicate) @@ -367,3 +388,19 @@ else: return True +def is_valid_versions(predicate): + try: + Versions(predicate) + except (ValueError, IrrationalVersionError): + return False + else: + return True + +def is_valid_version(predicate): + try: + Version(predicate) + except (ValueError, IrrationalVersionError): + return False + else: + return True + -- Repository URL: http://hg.python.org/distutils2 From python-checkins at python.org Fri Mar 12 19:40:12 2010 From: python-checkins at python.org (phillip.eby) Date: Fri, 12 Mar 2010 19:40:12 +0100 (CET) Subject: [Python-checkins] r78878 - sandbox/trunk/setuptools/setuptools/command/test.py Message-ID: <20100312184012.2037DE229@mail.python.org> Author: phillip.eby Date: Fri Mar 12 19:40:11 2010 New Revision: 78878 Log: Fix wrong keyword argument for specifying test tunner to unittest Modified: sandbox/trunk/setuptools/setuptools/command/test.py Modified: sandbox/trunk/setuptools/setuptools/command/test.py ============================================================================== --- sandbox/trunk/setuptools/setuptools/command/test.py (original) +++ sandbox/trunk/setuptools/setuptools/command/test.py Fri Mar 12 19:40:11 2010 @@ -129,7 +129,7 @@ if self.test_runner is not None: runner_ep = EntryPoint.parse("x="+self.test_runner) runner_class = runner_ep.load(require=False) - kw['runner'] = runner_class() + kw['testRunner'] = runner_class() unittest.main( None, None, [unittest.__file__]+self.test_args, testLoader = loader_class(), **kw From python-checkins at python.org Fri Mar 12 21:38:41 2010 From: python-checkins at python.org (martin.v.loewis) Date: Fri, 12 Mar 2010 21:38:41 +0100 (CET) Subject: [Python-checkins] r78879 - tracker/instances/jython/schema.py Message-ID: <20100312203841.2914CEDCF@mail.python.org> Author: martin.v.loewis Date: Fri Mar 12 21:38:41 2010 New Revision: 78879 Log: Issue #316: Work around 1.4.10 bug requiring users to have Edit permission on files in order to create attachments. Modified: tracker/instances/jython/schema.py Modified: tracker/instances/jython/schema.py ============================================================================== --- tracker/instances/jython/schema.py (original) +++ tracker/instances/jython/schema.py Fri Mar 12 21:38:41 2010 @@ -208,6 +208,11 @@ db.security.addPermissionToRole('Anonymous', spamcheck) +def may_edit_file(db, userid, itemid): + return userid == db.file.get(itemid, "creator") +p = db.security.addPermission(name='Edit', klass='file', check=may_edit_file, + description="User is allowed to remove their own files") +db.security.addPermissionToRole('User', p) p = db.security.addPermission(name='Create', klass='issue', properties=('title', 'type', From nnorwitz at gmail.com Fri Mar 12 22:16:52 2010 From: nnorwitz at gmail.com (Neal Norwitz) Date: Fri, 12 Mar 2010 16:16:52 -0500 Subject: [Python-checkins] Python Regression Test Failures basics (2) Message-ID: <20100312211652.GA3753@kbk-i386-bb.psfb.org> 345 tests OK. 2 tests failed: test_xml_etree test_xml_etree_c 35 tests skipped: test_aepack test_al test_applesingle test_bsddb185 test_bsddb3 test_cd test_cl test_curses test_epoll test_gl test_imgfile test_ioctl test_kqueue test_linuxaudiodev test_macos test_macostools test_multiprocessing test_ossaudiodev test_py3kwarn test_scriptpackages test_smtpnet test_socketserver test_startfile test_sunaudiodev test_tcl test_timeout test_tk test_ttk_guionly test_ttk_textonly test_unicode_file test_urllib2net test_urllibnet test_winreg test_winsound test_zipfile64 6 skips unexpected on linux2: test_multiprocessing test_ttk_guionly test_epoll test_tk test_ioctl test_ttk_textonly == CPython 2.7a4+ (trunk:78879M, Mar 12 2010, 16:01:51) [GCC 3.3.4 20040623 (Gentoo Linux 3.3.4-r1, ssp-3.3.2-2, pie-8.7.6)] == Linux-2.6.9-gentoo-r1-i686-AMD_Athlon-tm-_XP_3000+-with-gentoo-1.4.16 == /tmp/test_python_32099 test_grammar test_opcodes test_dict test_builtin test_exceptions test_types test_unittest test_doctest test_doctest2 test_MimeWriter test_SimpleHTTPServer test_StringIO test___all__ test___future__ test__locale test_abc test_abstract_numbers test_aepack test_aepack skipped -- No module named aetypes test_aifc test_al test_al skipped -- No module named al test_anydbm test_applesingle test_applesingle skipped -- No module named MacOS test_argparse test_array test_ascii_formatd test_ast test_asynchat test_asyncore test_atexit test_audioop test_augassign test_base64 test_bastion test_bigaddrspace test_bigmem test_binascii test_binhex test_binop test_bisect test_bool test_bsddb test_bsddb185 test_bsddb185 skipped -- No module named bsddb185 test_bsddb3 test_bsddb3 skipped -- Use of the `bsddb' resource not enabled test_buffer test_bufio test_bytes test_bz2 test_calendar test_call test_capi test_cd test_cd skipped -- No module named cd test_cfgparser test_cgi test_charmapcodec test_cl test_cl skipped -- No module named cl test_class test_cmath test_cmd test_cmd_line test_cmd_line_script test_code test_codeccallbacks test_codecencodings_cn test_codecencodings_hk test_codecencodings_jp test_codecencodings_kr test_codecencodings_tw test_codecmaps_cn fetching http://source.icu-project.org/repos/icu/data/trunk/charset/data/xml/gb-18030-2000.xml ... fetching http://people.freebsd.org/~perky/i18n/EUC-CN.TXT ... fetching http://www.unicode.org/Public/MAPPINGS/VENDORS/MICSFT/WINDOWS/CP936.TXT ... test_codecmaps_hk fetching http://people.freebsd.org/~perky/i18n/BIG5HKSCS-2004.TXT ... test_codecmaps_jp fetching http://www.unicode.org/Public/MAPPINGS/VENDORS/MICSFT/WINDOWS/CP932.TXT ... fetching http://people.freebsd.org/~perky/i18n/EUC-JISX0213.TXT ... fetching http://people.freebsd.org/~perky/i18n/EUC-JP.TXT ... fetching http://www.unicode.org/Public/MAPPINGS/OBSOLETE/EASTASIA/JIS/SHIFTJIS.TXT ... fetching http://people.freebsd.org/~perky/i18n/SHIFT_JISX0213.TXT ... test_codecmaps_kr fetching http://www.unicode.org/Public/MAPPINGS/VENDORS/MICSFT/WINDOWS/CP949.TXT ... fetching http://people.freebsd.org/~perky/i18n/EUC-KR.TXT ... fetching http://www.unicode.org/Public/MAPPINGS/OBSOLETE/EASTASIA/KSC/JOHAB.TXT ... test_codecmaps_tw fetching http://www.unicode.org/Public/MAPPINGS/OBSOLETE/EASTASIA/OTHER/BIG5.TXT ... fetching http://www.unicode.org/Public/MAPPINGS/VENDORS/MICSFT/WINDOWS/CP950.TXT ... test_codecs test_codeop test_coding test_coercion test_collections test_colorsys test_commands test_compare test_compile test_compileall test_compiler test_complex test_complex_args test_contains test_contextlib test_cookie test_cookielib test_copy test_copy_reg test_cpickle test_cprofile test_crypt test_csv test_ctypes test_curses test_curses skipped -- Use of the `curses' resource not enabled test_datetime test_dbm test_decimal test_decorators test_defaultdict test_deque test_descr test_descrtut test_dictcomps test_dictviews test_difflib test_dircache test_dis test_distutils [20620 refs] test_dl test_docxmlrpc test_dumbdbm test_dummy_thread test_dummy_threading test_email test_email_codecs test_email_renamed test_enumerate test_eof test_epoll test_epoll skipped -- kernel doesn't support epoll() test_errno test_exception_variations test_extcall test_fcntl test_file test_file2k test_filecmp test_fileinput test_fileio test_float test_fnmatch test_fork1 test_format test_fpformat test_fractions test_frozen test_ftplib test_funcattrs test_functools test_future test_future3 test_future4 test_future5 test_future_builtins test_gc test_gdbm test_generators test_genericpath test_genexps test_getargs test_getargs2 test_getopt test_gettext test_gl test_gl skipped -- No module named gl test_glob test_global test_grp test_gzip test_hash test_hashlib test_heapq test_hmac test_hotshot test_htmllib test_htmlparser test_httplib test_httpservers [16621 refs] [16621 refs] [16621 refs] [26870 refs] test_imageop test_imaplib test_imgfile test_imgfile skipped -- No module named imgfile test_imp test_import test_importhooks test_importlib test_index test_inspect test_int test_int_literal test_io test_ioctl test_ioctl skipped -- Unable to open /dev/tty test_isinstance test_iter test_iterlen test_itertools test_json test_kqueue test_kqueue skipped -- test works only on BSD test_largefile test_lib2to3 test_linecache test_linuxaudiodev test_linuxaudiodev skipped -- Use of the `audio' resource not enabled test_list test_locale test_logging test_long test_long_future test_longexp test_macos test_macos skipped -- No module named MacOS test_macostools test_macostools skipped -- No module named MacOS test_macpath test_mailbox test_marshal test_math test_md5 test_memoryio test_memoryview test_mhlib test_mimetools test_mimetypes test_minidom test_mmap test_module test_modulefinder test_multibytecodec test_multibytecodec_support test_multifile test_multiprocessing test_multiprocessing skipped -- This platform lacks a functioning sem_open implementation, therefore, the required synchronization primitives needed will not function, see issue 3770. test_mutants test_mutex test_netrc test_new test_nis test_normalization fetching http://www.unicode.org/Public/5.1.0/ucd/NormalizationTest.txt ... test_ntpath test_old_mailbox test_openpty test_operator test_optparse test_os [16621 refs] [16621 refs] test_ossaudiodev test_ossaudiodev skipped -- Use of the `audio' resource not enabled test_parser Expecting 's_push: parser stack overflow' in next line s_push: parser stack overflow test_pdb test_peepholer test_pep247 test_pep263 test_pep277 test_pep292 test_pep352 test_pickle test_pickletools test_pipes test_pkg test_pkgimport test_pkgutil test_platform [18017 refs] [18017 refs] test_plistlib test_poll test_popen [16626 refs] [16626 refs] [16626 refs] test_popen2 test_poplib test_posix test_posixpath test_pow test_pprint test_print test_profile test_profilehooks test_property test_pstats test_pty test_pwd test_py3kwarn test_py3kwarn skipped -- test.test_py3kwarn must be run with the -3 flag test_pyclbr test_pydoc [21734 refs] [21734 refs] [21734 refs] [21734 refs] [21734 refs] [21733 refs] [21733 refs] test_pyexpat test_queue test_quopri [19449 refs] [19449 refs] test_random test_re test_readline test_repr test_resource test_rfc822 test_richcmp test_robotparser test_runpy test_sax test_scope test_scriptpackages test_scriptpackages skipped -- No module named aetools test_select test_set test_setcomps test_sets test_sgmllib test_sha test_shelve test_shlex test_shutil test_signal test_site [16621 refs] [16621 refs] [16621 refs] [16621 refs] test_slice test_smtplib test_smtpnet test_smtpnet skipped -- Use of the `network' resource not enabled test_socket test_socketserver test_socketserver skipped -- Use of the `network' resource not enabled test_softspace test_sort test_sqlite test_ssl test_startfile test_startfile skipped -- module os has no attribute startfile test_str test_strftime test_string test_stringprep test_strop test_strptime test_strtod test_struct test_structmembers test_structseq test_subprocess [16621 refs] [16621 refs] [16621 refs] [16621 refs] [16621 refs] [16621 refs] [16621 refs] [16621 refs] [16621 refs] [16621 refs] [16621 refs] [16621 refs] [16621 refs] [16621 refs] [16836 refs] [16621 refs] [16621 refs] [16621 refs] [16621 refs] [16621 refs] . [16621 refs] [16621 refs] this bit of output is from a test of stdout in a different process ... [16621 refs] [16621 refs] [16836 refs] [16621 refs] [16621 refs] [16621 refs] Traceback (most recent call last): File "", line 1, in KeyboardInterrupt [16621 refs] [16621 refs] [16621 refs] [16621 refs] [16621 refs] [16621 refs] [16621 refs] [16621 refs] [16621 refs] [16621 refs] [16621 refs] [16621 refs] [16621 refs] [16621 refs] [16621 refs] [16836 refs] [16621 refs] [16621 refs] [16621 refs] [16621 refs] [16621 refs] . [16621 refs] [16621 refs] this bit of output is from a test of stdout in a different process ... [16621 refs] [16621 refs] [16836 refs] test_sunaudiodev test_sunaudiodev skipped -- No module named sunaudiodev test_sundry test_symtable test_syntax test_sys [16621 refs] [16621 refs] [16621 refs] [16850 refs] [16644 refs] test_sysconfig [16621 refs] [16621 refs] test_tarfile test_tcl test_tcl skipped -- No module named _tkinter test_telnetlib test_tempfile [16621 refs] test_textwrap test_thread test_threaded_import test_threadedtempfile test_threading [19921 refs] [21092 refs] [20906 refs] [20906 refs] [20906 refs] [20906 refs] test_threading_local test_threadsignals test_time test_timeout test_timeout skipped -- Use of the `network' resource not enabled test_tk test_tk skipped -- No module named _tkinter test_tokenize test_trace test_traceback test_transformer test_ttk_guionly test_ttk_guionly skipped -- No module named _tkinter test_ttk_textonly test_ttk_textonly skipped -- No module named _tkinter test_tuple test_typechecks test_ucn test_unary test_undocumented_details test_unicode test_unicode_file test_unicode_file skipped -- No Unicode filesystem semantics on this platform. test_unicodedata test_univnewlines test_univnewlines2k test_unpack test_urllib test_urllib2 test_urllib2_localnet test_urllib2net test_urllib2net skipped -- Use of the `network' resource not enabled test_urllibnet test_urllibnet skipped -- Use of the `network' resource not enabled test_urlparse test_userdict test_userlist test_userstring test_uu test_uuid WARNING: uuid.getnode is unreliable on many platforms. It is disabled until the code and/or test can be fixed properly. WARNING: uuid._ifconfig_getnode is unreliable on many platforms. It is disabled until the code and/or test can be fixed properly. WARNING: uuid._unixdll_getnode is unreliable on many platforms. It is disabled until the code and/or test can be fixed properly. test_wait3 test_wait4 test_warnings test_wave test_weakref test_whichdb test_winreg test_winreg skipped -- No module named _winreg test_winsound test_winsound skipped -- No module named winsound test_with test_wsgiref test_xdrlib test_xml_etree ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 770, in test.test_xml_etree.custom_builder Failed example: parser.feed(open("samples/simple.xml", "r").read()) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in parser.feed(open("samples/simple.xml", "r").read()) IOError: [Errno 2] No such file or directory: 'samples/simple.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 793, in test.test_xml_etree.custom_builder Failed example: parser.feed(open("samples/simple-ns.xml", "r").read()) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in parser.feed(open("samples/simple-ns.xml", "r").read()) IOError: [Errno 2] No such file or directory: 'samples/simple-ns.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 421, in test.test_xml_etree.file_init Failed example: tree = ET.ElementTree(file="samples/simple.xml") Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in tree = ET.ElementTree(file="samples/simple.xml") File "/tmp/python-test/local/lib/python2.7/xml/etree/ElementTree.py", line 611, in __init__ self.parse(file) File "/tmp/python-test/local/lib/python2.7/xml/etree/ElementTree.py", line 646, in parse source = open(source, "rb") IOError: [Errno 2] No such file or directory: 'samples/simple.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 422, in test.test_xml_etree.file_init Failed example: tree.find("element").tag Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in tree.find("element").tag AttributeError: 'NoneType' object has no attribute 'tag' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 424, in test.test_xml_etree.file_init Failed example: tree.find("element/../empty-element").tag Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in tree.find("element/../empty-element").tag AttributeError: 'NoneType' object has no attribute 'tag' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 811, in test.test_xml_etree.getchildren Failed example: tree = ET.parse(open("samples/simple.xml", "r")) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in tree = ET.parse(open("samples/simple.xml", "r")) IOError: [Errno 2] No such file or directory: 'samples/simple.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 812, in test.test_xml_etree.getchildren Failed example: for elem in tree.getroot().iter(): summarize_list(elem.getchildren()) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in for elem in tree.getroot().iter(): NameError: name 'tree' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 818, in test.test_xml_etree.getchildren Failed example: for elem in tree.getiterator(): summarize_list(elem.getchildren()) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in for elem in tree.getiterator(): NameError: name 'tree' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 647, in test.test_xml_etree.iterparse Failed example: context = iterparse("samples/simple.xml") Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in context = iterparse("samples/simple.xml") File "/tmp/python-test/local/lib/python2.7/xml/etree/ElementTree.py", line 1192, in iterparse source = open(source, "rb") IOError: [Errno 2] No such file or directory: 'samples/simple.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 648, in test.test_xml_etree.iterparse Failed example: action, elem = next(context) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in action, elem = next(context) NameError: name 'context' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 649, in test.test_xml_etree.iterparse Failed example: print action, elem.tag Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in print action, elem.tag NameError: name 'action' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 651, in test.test_xml_etree.iterparse Failed example: for action, elem in context: print action, elem.tag Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in for action, elem in context: NameError: name 'context' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 656, in test.test_xml_etree.iterparse Failed example: context.root.tag Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in context.root.tag NameError: name 'context' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 659, in test.test_xml_etree.iterparse Failed example: context = iterparse("samples/simple-ns.xml") Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in context = iterparse("samples/simple-ns.xml") File "/tmp/python-test/local/lib/python2.7/xml/etree/ElementTree.py", line 1192, in iterparse source = open(source, "rb") IOError: [Errno 2] No such file or directory: 'samples/simple-ns.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 660, in test.test_xml_etree.iterparse Failed example: for action, elem in context: print action, elem.tag Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in for action, elem in context: NameError: name 'context' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 668, in test.test_xml_etree.iterparse Failed example: context = iterparse("samples/simple.xml", events) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in context = iterparse("samples/simple.xml", events) File "/tmp/python-test/local/lib/python2.7/xml/etree/ElementTree.py", line 1192, in iterparse source = open(source, "rb") IOError: [Errno 2] No such file or directory: 'samples/simple.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 669, in test.test_xml_etree.iterparse Failed example: for action, elem in context: print action, elem.tag Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in for action, elem in context: NameError: name 'context' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 673, in test.test_xml_etree.iterparse Failed example: context = iterparse("samples/simple.xml", events=events) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in context = iterparse("samples/simple.xml", events=events) File "/tmp/python-test/local/lib/python2.7/xml/etree/ElementTree.py", line 1192, in iterparse source = open(source, "rb") IOError: [Errno 2] No such file or directory: 'samples/simple.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 674, in test.test_xml_etree.iterparse Failed example: for action, elem in context: print action, elem.tag Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in for action, elem in context: NameError: name 'context' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 678, in test.test_xml_etree.iterparse Failed example: context = iterparse("samples/simple.xml", events) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in context = iterparse("samples/simple.xml", events) File "/tmp/python-test/local/lib/python2.7/xml/etree/ElementTree.py", line 1192, in iterparse source = open(source, "rb") IOError: [Errno 2] No such file or directory: 'samples/simple.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 679, in test.test_xml_etree.iterparse Failed example: for action, elem in context: print action, elem.tag Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in for action, elem in context: NameError: name 'context' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 691, in test.test_xml_etree.iterparse Failed example: context = iterparse("samples/simple-ns.xml", events) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in context = iterparse("samples/simple-ns.xml", events) File "/tmp/python-test/local/lib/python2.7/xml/etree/ElementTree.py", line 1192, in iterparse source = open(source, "rb") IOError: [Errno 2] No such file or directory: 'samples/simple-ns.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 692, in test.test_xml_etree.iterparse Failed example: for action, elem in context: if action in ("start", "end"): print action, elem.tag else: print action, elem Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in for action, elem in context: NameError: name 'context' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 709, in test.test_xml_etree.iterparse Failed example: context = iterparse("samples/simple.xml", events) Expected: Traceback (most recent call last): ValueError: unknown event 'bogus' Got: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in context = iterparse("samples/simple.xml", events) File "/tmp/python-test/local/lib/python2.7/xml/etree/ElementTree.py", line 1192, in iterparse source = open(source, "rb") IOError: [Errno 2] No such file or directory: 'samples/simple.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 567, in test.test_xml_etree.parsefile Failed example: tree = ET.parse("samples/simple.xml") Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in tree = ET.parse("samples/simple.xml") File "/tmp/python-test/local/lib/python2.7/xml/etree/ElementTree.py", line 1176, in parse tree.parse(source, parser) File "/tmp/python-test/local/lib/python2.7/xml/etree/ElementTree.py", line 646, in parse source = open(source, "rb") IOError: [Errno 2] No such file or directory: 'samples/simple.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 568, in test.test_xml_etree.parsefile Failed example: normalize_crlf(tree) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in normalize_crlf(tree) NameError: name 'tree' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 569, in test.test_xml_etree.parsefile Failed example: tree.write(sys.stdout) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in tree.write(sys.stdout) NameError: name 'tree' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 575, in test.test_xml_etree.parsefile Failed example: tree = ET.parse("samples/simple-ns.xml") Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in tree = ET.parse("samples/simple-ns.xml") File "/tmp/python-test/local/lib/python2.7/xml/etree/ElementTree.py", line 1176, in parse tree.parse(source, parser) File "/tmp/python-test/local/lib/python2.7/xml/etree/ElementTree.py", line 646, in parse source = open(source, "rb") IOError: [Errno 2] No such file or directory: 'samples/simple-ns.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 576, in test.test_xml_etree.parsefile Failed example: normalize_crlf(tree) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in normalize_crlf(tree) NameError: name 'tree' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 577, in test.test_xml_etree.parsefile Failed example: tree.write(sys.stdout) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in tree.write(sys.stdout) NameError: name 'tree' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 587, in test.test_xml_etree.parsefile Failed example: parser.feed(open("samples/simple.xml").read()) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in parser.feed(open("samples/simple.xml").read()) IOError: [Errno 2] No such file or directory: 'samples/simple.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 588, in test.test_xml_etree.parsefile Failed example: print serialize(parser.close()) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in print serialize(parser.close()) File "/tmp/python-test/local/lib/python2.7/xml/etree/ElementTree.py", line 1635, in close self._raiseerror(v) File "/tmp/python-test/local/lib/python2.7/xml/etree/ElementTree.py", line 1487, in _raiseerror raise err ParseError: no element found: line 1, column 0 ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 596, in test.test_xml_etree.parsefile Failed example: parser.feed(open("samples/simple.xml").read()) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in parser.feed(open("samples/simple.xml").read()) IOError: [Errno 2] No such file or directory: 'samples/simple.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 597, in test.test_xml_etree.parsefile Failed example: print serialize(parser.close()) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in print serialize(parser.close()) File "/tmp/python-test/local/lib/python2.7/xml/etree/ElementTree.py", line 1635, in close self._raiseerror(v) File "/tmp/python-test/local/lib/python2.7/xml/etree/ElementTree.py", line 1487, in _raiseerror raise err ParseError: no element found: line 1, column 0 ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 606, in test.test_xml_etree.parsefile Failed example: parser.feed(open("samples/simple.xml").read()) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in parser.feed(open("samples/simple.xml").read()) IOError: [Errno 2] No such file or directory: 'samples/simple.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 607, in test.test_xml_etree.parsefile Failed example: print serialize(parser.close()) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in print serialize(parser.close()) File "/tmp/python-test/local/lib/python2.7/xml/etree/ElementTree.py", line 1635, in close self._raiseerror(v) File "/tmp/python-test/local/lib/python2.7/xml/etree/ElementTree.py", line 1487, in _raiseerror raise err ParseError: no element found: line 1, column 0 ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 1361, in test.test_xml_etree.xinclude_default Failed example: ElementInclude.include(document) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in ElementInclude.include(document) File "/tmp/python-test/local/lib/python2.7/xml/etree/ElementInclude.py", line 111, in include node = loader(href, parse) File "/tmp/python-test/local/lib/python2.7/xml/etree/ElementInclude.py", line 78, in default_loader file = open(href) IOError: [Errno 2] No such file or directory: 'samples/simple.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 1362, in test.test_xml_etree.xinclude_default Failed example: print serialize(document) # default Expected:

    Example.

    text texttail
    Got:

    Example.

    ********************************************************************** 6 items had failures: 2 of 8 in test.test_xml_etree.custom_builder 3 of 8 in test.test_xml_etree.file_init 3 of 19 in test.test_xml_etree.getchildren 16 of 29 in test.test_xml_etree.iterparse 12 of 17 in test.test_xml_etree.parsefile 2 of 4 in test.test_xml_etree.xinclude_default ***Test Failed*** 38 failures. test test_xml_etree failed -- 38 of 591 doctests failed Re-running test 'test_xml_etree' in verbose mode ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 770, in test.test_xml_etree.custom_builder Failed example: parser.feed(open("samples/simple.xml", "r").read()) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in parser.feed(open("samples/simple.xml", "r").read()) IOError: [Errno 2] No such file or directory: 'samples/simple.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 793, in test.test_xml_etree.custom_builder Failed example: parser.feed(open("samples/simple-ns.xml", "r").read()) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in parser.feed(open("samples/simple-ns.xml", "r").read()) IOError: [Errno 2] No such file or directory: 'samples/simple-ns.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 421, in test.test_xml_etree.file_init Failed example: tree = ET.ElementTree(file="samples/simple.xml") Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in tree = ET.ElementTree(file="samples/simple.xml") File "/tmp/python-test/local/lib/python2.7/xml/etree/ElementTree.py", line 611, in __init__ self.parse(file) File "/tmp/python-test/local/lib/python2.7/xml/etree/ElementTree.py", line 646, in parse source = open(source, "rb") IOError: [Errno 2] No such file or directory: 'samples/simple.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 422, in test.test_xml_etree.file_init Failed example: tree.find("element").tag Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in tree.find("element").tag AttributeError: 'NoneType' object has no attribute 'tag' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 424, in test.test_xml_etree.file_init Failed example: tree.find("element/../empty-element").tag Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in tree.find("element/../empty-element").tag AttributeError: 'NoneType' object has no attribute 'tag' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 811, in test.test_xml_etree.getchildren Failed example: tree = ET.parse(open("samples/simple.xml", "r")) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in tree = ET.parse(open("samples/simple.xml", "r")) IOError: [Errno 2] No such file or directory: 'samples/simple.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 812, in test.test_xml_etree.getchildren Failed example: for elem in tree.getroot().iter(): summarize_list(elem.getchildren()) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in for elem in tree.getroot().iter(): NameError: name 'tree' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 818, in test.test_xml_etree.getchildren Failed example: for elem in tree.getiterator(): summarize_list(elem.getchildren()) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in for elem in tree.getiterator(): NameError: name 'tree' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 647, in test.test_xml_etree.iterparse Failed example: context = iterparse("samples/simple.xml") Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in context = iterparse("samples/simple.xml") File "/tmp/python-test/local/lib/python2.7/xml/etree/ElementTree.py", line 1192, in iterparse source = open(source, "rb") IOError: [Errno 2] No such file or directory: 'samples/simple.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 648, in test.test_xml_etree.iterparse Failed example: action, elem = next(context) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in action, elem = next(context) NameError: name 'context' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 649, in test.test_xml_etree.iterparse Failed example: print action, elem.tag Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in print action, elem.tag NameError: name 'action' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 651, in test.test_xml_etree.iterparse Failed example: for action, elem in context: print action, elem.tag Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in for action, elem in context: NameError: name 'context' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 656, in test.test_xml_etree.iterparse Failed example: context.root.tag Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in context.root.tag NameError: name 'context' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 659, in test.test_xml_etree.iterparse Failed example: context = iterparse("samples/simple-ns.xml") Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in context = iterparse("samples/simple-ns.xml") File "/tmp/python-test/local/lib/python2.7/xml/etree/ElementTree.py", line 1192, in iterparse source = open(source, "rb") IOError: [Errno 2] No such file or directory: 'samples/simple-ns.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 660, in test.test_xml_etree.iterparse Failed example: for action, elem in context: print action, elem.tag Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in for action, elem in context: NameError: name 'context' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 668, in test.test_xml_etree.iterparse Failed example: context = iterparse("samples/simple.xml", events) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in context = iterparse("samples/simple.xml", events) File "/tmp/python-test/local/lib/python2.7/xml/etree/ElementTree.py", line 1192, in iterparse source = open(source, "rb") IOError: [Errno 2] No such file or directory: 'samples/simple.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 669, in test.test_xml_etree.iterparse Failed example: for action, elem in context: print action, elem.tag Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in for action, elem in context: NameError: name 'context' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 673, in test.test_xml_etree.iterparse Failed example: context = iterparse("samples/simple.xml", events=events) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in context = iterparse("samples/simple.xml", events=events) File "/tmp/python-test/local/lib/python2.7/xml/etree/ElementTree.py", line 1192, in iterparse source = open(source, "rb") IOError: [Errno 2] No such file or directory: 'samples/simple.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 674, in test.test_xml_etree.iterparse Failed example: for action, elem in context: print action, elem.tag Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in for action, elem in context: NameError: name 'context' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 678, in test.test_xml_etree.iterparse Failed example: context = iterparse("samples/simple.xml", events) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in context = iterparse("samples/simple.xml", events) File "/tmp/python-test/local/lib/python2.7/xml/etree/ElementTree.py", line 1192, in iterparse source = open(source, "rb") IOError: [Errno 2] No such file or directory: 'samples/simple.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 679, in test.test_xml_etree.iterparse Failed example: for action, elem in context: print action, elem.tag Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in for action, elem in context: NameError: name 'context' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 691, in test.test_xml_etree.iterparse Failed example: context = iterparse("samples/simple-ns.xml", events) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in context = iterparse("samples/simple-ns.xml", events) File "/tmp/python-test/local/lib/python2.7/xml/etree/ElementTree.py", line 1192, in iterparse source = open(source, "rb") IOError: [Errno 2] No such file or directory: 'samples/simple-ns.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 692, in test.test_xml_etree.iterparse Failed example: for action, elem in context: if action in ("start", "end"): print action, elem.tag else: print action, elem Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in for action, elem in context: NameError: name 'context' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 709, in test.test_xml_etree.iterparse Failed example: context = iterparse("samples/simple.xml", events) Expected: Traceback (most recent call last): ValueError: unknown event 'bogus' Got: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in context = iterparse("samples/simple.xml", events) File "/tmp/python-test/local/lib/python2.7/xml/etree/ElementTree.py", line 1192, in iterparse source = open(source, "rb") IOError: [Errno 2] No such file or directory: 'samples/simple.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 567, in test.test_xml_etree.parsefile Failed example: tree = ET.parse("samples/simple.xml") Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in tree = ET.parse("samples/simple.xml") File "/tmp/python-test/local/lib/python2.7/xml/etree/ElementTree.py", line 1176, in parse tree.parse(source, parser) File "/tmp/python-test/local/lib/python2.7/xml/etree/ElementTree.py", line 646, in parse source = open(source, "rb") IOError: [Errno 2] No such file or directory: 'samples/simple.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 568, in test.test_xml_etree.parsefile Failed example: normalize_crlf(tree) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in normalize_crlf(tree) NameError: name 'tree' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 569, in test.test_xml_etree.parsefile Failed example: tree.write(sys.stdout) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in tree.write(sys.stdout) NameError: name 'tree' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 575, in test.test_xml_etree.parsefile Failed example: tree = ET.parse("samples/simple-ns.xml") Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in tree = ET.parse("samples/simple-ns.xml") File "/tmp/python-test/local/lib/python2.7/xml/etree/ElementTree.py", line 1176, in parse tree.parse(source, parser) File "/tmp/python-test/local/lib/python2.7/xml/etree/ElementTree.py", line 646, in parse source = open(source, "rb") IOError: [Errno 2] No such file or directory: 'samples/simple-ns.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 576, in test.test_xml_etree.parsefile Failed example: normalize_crlf(tree) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in normalize_crlf(tree) NameError: name 'tree' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 577, in test.test_xml_etree.parsefile Failed example: tree.write(sys.stdout) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in tree.write(sys.stdout) NameError: name 'tree' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 587, in test.test_xml_etree.parsefile Failed example: parser.feed(open("samples/simple.xml").read()) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in parser.feed(open("samples/simple.xml").read()) IOError: [Errno 2] No such file or directory: 'samples/simple.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 588, in test.test_xml_etree.parsefile Failed example: print serialize(parser.close()) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in print serialize(parser.close()) File "/tmp/python-test/local/lib/python2.7/xml/etree/ElementTree.py", line 1635, in close self._raiseerror(v) File "/tmp/python-test/local/lib/python2.7/xml/etree/ElementTree.py", line 1487, in _raiseerror raise err ParseError: no element found: line 1, column 0 ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 596, in test.test_xml_etree.parsefile Failed example: parser.feed(open("samples/simple.xml").read()) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in parser.feed(open("samples/simple.xml").read()) IOError: [Errno 2] No such file or directory: 'samples/simple.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 597, in test.test_xml_etree.parsefile Failed example: print serialize(parser.close()) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in print serialize(parser.close()) File "/tmp/python-test/local/lib/python2.7/xml/etree/ElementTree.py", line 1635, in close self._raiseerror(v) File "/tmp/python-test/local/lib/python2.7/xml/etree/ElementTree.py", line 1487, in _raiseerror raise err ParseError: no element found: line 1, column 0 ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 606, in test.test_xml_etree.parsefile Failed example: parser.feed(open("samples/simple.xml").read()) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in parser.feed(open("samples/simple.xml").read()) IOError: [Errno 2] No such file or directory: 'samples/simple.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 607, in test.test_xml_etree.parsefile Failed example: print serialize(parser.close()) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in print serialize(parser.close()) File "/tmp/python-test/local/lib/python2.7/xml/etree/ElementTree.py", line 1635, in close self._raiseerror(v) File "/tmp/python-test/local/lib/python2.7/xml/etree/ElementTree.py", line 1487, in _raiseerror raise err ParseError: no element found: line 1, column 0 ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 1361, in test.test_xml_etree.xinclude_default Failed example: ElementInclude.include(document) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in ElementInclude.include(document) File "/tmp/python-test/local/lib/python2.7/xml/etree/ElementInclude.py", line 111, in include node = loader(href, parse) File "/tmp/python-test/local/lib/python2.7/xml/etree/ElementInclude.py", line 78, in default_loader file = open(href) IOError: [Errno 2] No such file or directory: 'samples/simple.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 1362, in test.test_xml_etree.xinclude_default Failed example: print serialize(document) # default Expected:

    Example.

    text texttail
    Got:

    Example.

    ********************************************************************** 6 items had failures: 2 of 8 in test.test_xml_etree.custom_builder 3 of 8 in test.test_xml_etree.file_init 3 of 19 in test.test_xml_etree.getchildren 16 of 29 in test.test_xml_etree.iterparse 12 of 17 in test.test_xml_etree.parsefile 2 of 4 in test.test_xml_etree.xinclude_default ***Test Failed*** 38 failures. test test_xml_etree failed -- 38 of 591 doctests failed test_xml_etree_c ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 770, in test.test_xml_etree.custom_builder Failed example: parser.feed(open("samples/simple.xml", "r").read()) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in parser.feed(open("samples/simple.xml", "r").read()) IOError: [Errno 2] No such file or directory: 'samples/simple.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 793, in test.test_xml_etree.custom_builder Failed example: parser.feed(open("samples/simple-ns.xml", "r").read()) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in parser.feed(open("samples/simple-ns.xml", "r").read()) IOError: [Errno 2] No such file or directory: 'samples/simple-ns.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 421, in test.test_xml_etree.file_init Failed example: tree = ET.ElementTree(file="samples/simple.xml") Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in tree = ET.ElementTree(file="samples/simple.xml") File "/tmp/python-test/local/lib/python2.7/xml/etree/ElementTree.py", line 611, in __init__ self.parse(file) File "", line 25, in parse IOError: [Errno 2] No such file or directory: 'samples/simple.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 422, in test.test_xml_etree.file_init Failed example: tree.find("element").tag Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in tree.find("element").tag AttributeError: 'NoneType' object has no attribute 'tag' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 424, in test.test_xml_etree.file_init Failed example: tree.find("element/../empty-element").tag Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in tree.find("element/../empty-element").tag AttributeError: 'NoneType' object has no attribute 'tag' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 811, in test.test_xml_etree.getchildren Failed example: tree = ET.parse(open("samples/simple.xml", "r")) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in tree = ET.parse(open("samples/simple.xml", "r")) IOError: [Errno 2] No such file or directory: 'samples/simple.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 812, in test.test_xml_etree.getchildren Failed example: for elem in tree.getroot().iter(): summarize_list(elem.getchildren()) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in for elem in tree.getroot().iter(): NameError: name 'tree' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 818, in test.test_xml_etree.getchildren Failed example: for elem in tree.getiterator(): summarize_list(elem.getchildren()) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in for elem in tree.getiterator(): NameError: name 'tree' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 647, in test.test_xml_etree.iterparse Failed example: context = iterparse("samples/simple.xml") Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in context = iterparse("samples/simple.xml") File "", line 63, in __init__ IOError: [Errno 2] No such file or directory: 'samples/simple.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 648, in test.test_xml_etree.iterparse Failed example: action, elem = next(context) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in action, elem = next(context) NameError: name 'context' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 649, in test.test_xml_etree.iterparse Failed example: print action, elem.tag Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in print action, elem.tag NameError: name 'action' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 651, in test.test_xml_etree.iterparse Failed example: for action, elem in context: print action, elem.tag Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in for action, elem in context: NameError: name 'context' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 656, in test.test_xml_etree.iterparse Failed example: context.root.tag Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in context.root.tag NameError: name 'context' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 659, in test.test_xml_etree.iterparse Failed example: context = iterparse("samples/simple-ns.xml") Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in context = iterparse("samples/simple-ns.xml") File "", line 63, in __init__ IOError: [Errno 2] No such file or directory: 'samples/simple-ns.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 660, in test.test_xml_etree.iterparse Failed example: for action, elem in context: print action, elem.tag Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in for action, elem in context: NameError: name 'context' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 668, in test.test_xml_etree.iterparse Failed example: context = iterparse("samples/simple.xml", events) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in context = iterparse("samples/simple.xml", events) File "", line 63, in __init__ IOError: [Errno 2] No such file or directory: 'samples/simple.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 669, in test.test_xml_etree.iterparse Failed example: for action, elem in context: print action, elem.tag Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in for action, elem in context: NameError: name 'context' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 673, in test.test_xml_etree.iterparse Failed example: context = iterparse("samples/simple.xml", events=events) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in context = iterparse("samples/simple.xml", events=events) File "", line 63, in __init__ IOError: [Errno 2] No such file or directory: 'samples/simple.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 674, in test.test_xml_etree.iterparse Failed example: for action, elem in context: print action, elem.tag Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in for action, elem in context: NameError: name 'context' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 678, in test.test_xml_etree.iterparse Failed example: context = iterparse("samples/simple.xml", events) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in context = iterparse("samples/simple.xml", events) File "", line 63, in __init__ IOError: [Errno 2] No such file or directory: 'samples/simple.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 679, in test.test_xml_etree.iterparse Failed example: for action, elem in context: print action, elem.tag Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in for action, elem in context: NameError: name 'context' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 691, in test.test_xml_etree.iterparse Failed example: context = iterparse("samples/simple-ns.xml", events) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in context = iterparse("samples/simple-ns.xml", events) File "", line 63, in __init__ IOError: [Errno 2] No such file or directory: 'samples/simple-ns.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 692, in test.test_xml_etree.iterparse Failed example: for action, elem in context: if action in ("start", "end"): print action, elem.tag else: print action, elem Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in for action, elem in context: NameError: name 'context' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 709, in test.test_xml_etree.iterparse Failed example: context = iterparse("samples/simple.xml", events) Expected: Traceback (most recent call last): ValueError: unknown event 'bogus' Got: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in context = iterparse("samples/simple.xml", events) File "", line 63, in __init__ IOError: [Errno 2] No such file or directory: 'samples/simple.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 567, in test.test_xml_etree.parsefile Failed example: tree = ET.parse("samples/simple.xml") Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in tree = ET.parse("samples/simple.xml") File "", line 56, in parse File "", line 25, in parse IOError: [Errno 2] No such file or directory: 'samples/simple.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 568, in test.test_xml_etree.parsefile Failed example: normalize_crlf(tree) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in normalize_crlf(tree) NameError: name 'tree' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 569, in test.test_xml_etree.parsefile Failed example: tree.write(sys.stdout) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in tree.write(sys.stdout) NameError: name 'tree' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 575, in test.test_xml_etree.parsefile Failed example: tree = ET.parse("samples/simple-ns.xml") Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in tree = ET.parse("samples/simple-ns.xml") File "", line 56, in parse File "", line 25, in parse IOError: [Errno 2] No such file or directory: 'samples/simple-ns.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 576, in test.test_xml_etree.parsefile Failed example: normalize_crlf(tree) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in normalize_crlf(tree) NameError: name 'tree' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 577, in test.test_xml_etree.parsefile Failed example: tree.write(sys.stdout) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in tree.write(sys.stdout) NameError: name 'tree' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 587, in test.test_xml_etree.parsefile Failed example: parser.feed(open("samples/simple.xml").read()) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in parser.feed(open("samples/simple.xml").read()) IOError: [Errno 2] No such file or directory: 'samples/simple.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 588, in test.test_xml_etree.parsefile Failed example: print serialize(parser.close()) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in print serialize(parser.close()) ParseError: no element found: line 1, column 0 ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 596, in test.test_xml_etree.parsefile Failed example: parser.feed(open("samples/simple.xml").read()) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in parser.feed(open("samples/simple.xml").read()) IOError: [Errno 2] No such file or directory: 'samples/simple.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 597, in test.test_xml_etree.parsefile Failed example: print serialize(parser.close()) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in print serialize(parser.close()) ParseError: no element found: line 1, column 0 ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 606, in test.test_xml_etree.parsefile Failed example: parser.feed(open("samples/simple.xml").read()) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in parser.feed(open("samples/simple.xml").read()) IOError: [Errno 2] No such file or directory: 'samples/simple.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 607, in test.test_xml_etree.parsefile Failed example: print serialize(parser.close()) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in print serialize(parser.close()) ParseError: no element found: line 1, column 0 ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 1361, in test.test_xml_etree.xinclude_default Failed example: ElementInclude.include(document) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in ElementInclude.include(document) File "/tmp/python-test/local/lib/python2.7/xml/etree/ElementInclude.py", line 111, in include node = loader(href, parse) File "/tmp/python-test/local/lib/python2.7/xml/etree/ElementInclude.py", line 78, in default_loader file = open(href) IOError: [Errno 2] No such file or directory: 'samples/simple.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 1362, in test.test_xml_etree.xinclude_default Failed example: print serialize(document) # default Expected:

    Example.

    text texttail
    Got:

    Example.

    ********************************************************************** 6 items had failures: 2 of 8 in test.test_xml_etree.custom_builder 3 of 8 in test.test_xml_etree.file_init 3 of 19 in test.test_xml_etree.getchildren 16 of 29 in test.test_xml_etree.iterparse 12 of 17 in test.test_xml_etree.parsefile 2 of 4 in test.test_xml_etree.xinclude_default ***Test Failed*** 38 failures. test test_xml_etree_c failed -- 38 of 591 doctests failed Re-running test 'test_xml_etree_c' in verbose mode doctest (test.test_xml_etree_c) ... 1 tests with zero failures ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 770, in test.test_xml_etree.custom_builder Failed example: parser.feed(open("samples/simple.xml", "r").read()) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in parser.feed(open("samples/simple.xml", "r").read()) IOError: [Errno 2] No such file or directory: 'samples/simple.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 793, in test.test_xml_etree.custom_builder Failed example: parser.feed(open("samples/simple-ns.xml", "r").read()) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in parser.feed(open("samples/simple-ns.xml", "r").read()) IOError: [Errno 2] No such file or directory: 'samples/simple-ns.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 421, in test.test_xml_etree.file_init Failed example: tree = ET.ElementTree(file="samples/simple.xml") Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in tree = ET.ElementTree(file="samples/simple.xml") File "/tmp/python-test/local/lib/python2.7/xml/etree/ElementTree.py", line 611, in __init__ self.parse(file) File "", line 25, in parse IOError: [Errno 2] No such file or directory: 'samples/simple.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 422, in test.test_xml_etree.file_init Failed example: tree.find("element").tag Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in tree.find("element").tag AttributeError: 'NoneType' object has no attribute 'tag' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 424, in test.test_xml_etree.file_init Failed example: tree.find("element/../empty-element").tag Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in tree.find("element/../empty-element").tag AttributeError: 'NoneType' object has no attribute 'tag' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 811, in test.test_xml_etree.getchildren Failed example: tree = ET.parse(open("samples/simple.xml", "r")) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in tree = ET.parse(open("samples/simple.xml", "r")) IOError: [Errno 2] No such file or directory: 'samples/simple.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 812, in test.test_xml_etree.getchildren Failed example: for elem in tree.getroot().iter(): summarize_list(elem.getchildren()) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in for elem in tree.getroot().iter(): NameError: name 'tree' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 818, in test.test_xml_etree.getchildren Failed example: for elem in tree.getiterator(): summarize_list(elem.getchildren()) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in for elem in tree.getiterator(): NameError: name 'tree' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 647, in test.test_xml_etree.iterparse Failed example: context = iterparse("samples/simple.xml") Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in context = iterparse("samples/simple.xml") File "", line 63, in __init__ IOError: [Errno 2] No such file or directory: 'samples/simple.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 648, in test.test_xml_etree.iterparse Failed example: action, elem = next(context) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in action, elem = next(context) NameError: name 'context' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 649, in test.test_xml_etree.iterparse Failed example: print action, elem.tag Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in print action, elem.tag NameError: name 'action' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 651, in test.test_xml_etree.iterparse Failed example: for action, elem in context: print action, elem.tag Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in for action, elem in context: NameError: name 'context' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 656, in test.test_xml_etree.iterparse Failed example: context.root.tag Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in context.root.tag NameError: name 'context' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 659, in test.test_xml_etree.iterparse Failed example: context = iterparse("samples/simple-ns.xml") Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in context = iterparse("samples/simple-ns.xml") File "", line 63, in __init__ IOError: [Errno 2] No such file or directory: 'samples/simple-ns.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 660, in test.test_xml_etree.iterparse Failed example: for action, elem in context: print action, elem.tag Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in for action, elem in context: NameError: name 'context' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 668, in test.test_xml_etree.iterparse Failed example: context = iterparse("samples/simple.xml", events) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in context = iterparse("samples/simple.xml", events) File "", line 63, in __init__ IOError: [Errno 2] No such file or directory: 'samples/simple.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 669, in test.test_xml_etree.iterparse Failed example: for action, elem in context: print action, elem.tag Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in for action, elem in context: NameError: name 'context' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 673, in test.test_xml_etree.iterparse Failed example: context = iterparse("samples/simple.xml", events=events) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in context = iterparse("samples/simple.xml", events=events) File "", line 63, in __init__ IOError: [Errno 2] No such file or directory: 'samples/simple.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 674, in test.test_xml_etree.iterparse Failed example: for action, elem in context: print action, elem.tag Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in for action, elem in context: NameError: name 'context' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 678, in test.test_xml_etree.iterparse Failed example: context = iterparse("samples/simple.xml", events) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in context = iterparse("samples/simple.xml", events) File "", line 63, in __init__ IOError: [Errno 2] No such file or directory: 'samples/simple.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 679, in test.test_xml_etree.iterparse Failed example: for action, elem in context: print action, elem.tag Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in for action, elem in context: NameError: name 'context' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 691, in test.test_xml_etree.iterparse Failed example: context = iterparse("samples/simple-ns.xml", events) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in context = iterparse("samples/simple-ns.xml", events) File "", line 63, in __init__ IOError: [Errno 2] No such file or directory: 'samples/simple-ns.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 692, in test.test_xml_etree.iterparse Failed example: for action, elem in context: if action in ("start", "end"): print action, elem.tag else: print action, elem Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in for action, elem in context: NameError: name 'context' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 709, in test.test_xml_etree.iterparse Failed example: context = iterparse("samples/simple.xml", events) Expected: Traceback (most recent call last): ValueError: unknown event 'bogus' Got: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in context = iterparse("samples/simple.xml", events) File "", line 63, in __init__ IOError: [Errno 2] No such file or directory: 'samples/simple.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 567, in test.test_xml_etree.parsefile Failed example: tree = ET.parse("samples/simple.xml") Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in tree = ET.parse("samples/simple.xml") File "", line 56, in parse File "", line 25, in parse IOError: [Errno 2] No such file or directory: 'samples/simple.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 568, in test.test_xml_etree.parsefile Failed example: normalize_crlf(tree) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in normalize_crlf(tree) NameError: name 'tree' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 569, in test.test_xml_etree.parsefile Failed example: tree.write(sys.stdout) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in tree.write(sys.stdout) NameError: name 'tree' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 575, in test.test_xml_etree.parsefile Failed example: tree = ET.parse("samples/simple-ns.xml") Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in tree = ET.parse("samples/simple-ns.xml") File "", line 56, in parse File "", line 25, in parse IOError: [Errno 2] No such file or directory: 'samples/simple-ns.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 576, in test.test_xml_etree.parsefile Failed example: normalize_crlf(tree) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in normalize_crlf(tree) NameError: name 'tree' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 577, in test.test_xml_etree.parsefile Failed example: tree.write(sys.stdout) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in tree.write(sys.stdout) NameError: name 'tree' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 587, in test.test_xml_etree.parsefile Failed example: parser.feed(open("samples/simple.xml").read()) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in parser.feed(open("samples/simple.xml").read()) IOError: [Errno 2] No such file or directory: 'samples/simple.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 588, in test.test_xml_etree.parsefile Failed example: print serialize(parser.close()) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in print serialize(parser.close()) ParseError: no element found: line 1, column 0 ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 596, in test.test_xml_etree.parsefile Failed example: parser.feed(open("samples/simple.xml").read()) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in parser.feed(open("samples/simple.xml").read()) IOError: [Errno 2] No such file or directory: 'samples/simple.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 597, in test.test_xml_etree.parsefile Failed example: print serialize(parser.close()) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in print serialize(parser.close()) ParseError: no element found: line 1, column 0 ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 606, in test.test_xml_etree.parsefile Failed example: parser.feed(open("samples/simple.xml").read()) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in parser.feed(open("samples/simple.xml").read()) IOError: [Errno 2] No such file or directory: 'samples/simple.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 607, in test.test_xml_etree.parsefile Failed example: print serialize(parser.close()) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in print serialize(parser.close()) ParseError: no element found: line 1, column 0 ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 1361, in test.test_xml_etree.xinclude_default Failed example: ElementInclude.include(document) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in ElementInclude.include(document) File "/tmp/python-test/local/lib/python2.7/xml/etree/ElementInclude.py", line 111, in include node = loader(href, parse) File "/tmp/python-test/local/lib/python2.7/xml/etree/ElementInclude.py", line 78, in default_loader file = open(href) IOError: [Errno 2] No such file or directory: 'samples/simple.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 1362, in test.test_xml_etree.xinclude_default Failed example: print serialize(document) # default Expected:

    Example.

    text texttail
    Got:

    Example.

    ********************************************************************** 6 items had failures: 2 of 8 in test.test_xml_etree.custom_builder 3 of 8 in test.test_xml_etree.file_init 3 of 19 in test.test_xml_etree.getchildren 16 of 29 in test.test_xml_etree.iterparse 12 of 17 in test.test_xml_etree.parsefile 2 of 4 in test.test_xml_etree.xinclude_default ***Test Failed*** 38 failures. test test_xml_etree_c failed -- 38 of 591 doctests failed test_xmllib test_xmlrpc test_xpickle test_xpickle -- skipping backwards compat tests. Use 'regrtest.py -u xpickle' to run them. test_xrange test_zipfile test_zipfile64 test_zipfile64 skipped -- test requires loads of disk-space bytes and a long time to run test_zipimport test_zipimport_support test_zlib 345 tests OK. 2 tests failed: test_xml_etree test_xml_etree_c 35 tests skipped: test_aepack test_al test_applesingle test_bsddb185 test_bsddb3 test_cd test_cl test_curses test_epoll test_gl test_imgfile test_ioctl test_kqueue test_linuxaudiodev test_macos test_macostools test_multiprocessing test_ossaudiodev test_py3kwarn test_scriptpackages test_smtpnet test_socketserver test_startfile test_sunaudiodev test_tcl test_timeout test_tk test_ttk_guionly test_ttk_textonly test_unicode_file test_urllib2net test_urllibnet test_winreg test_winsound test_zipfile64 6 skips unexpected on linux2: test_multiprocessing test_ttk_guionly test_epoll test_tk test_ioctl test_ttk_textonly [947561 refs] From python-checkins at python.org Fri Mar 12 22:27:23 2010 From: python-checkins at python.org (georg.brandl) Date: Fri, 12 Mar 2010 22:27:23 +0100 (CET) Subject: [Python-checkins] r78880 - python/trunk/Misc/build.sh Message-ID: <20100312212723.CB563F304@mail.python.org> Author: georg.brandl Date: Fri Mar 12 22:27:23 2010 New Revision: 78880 Log: Deactivate automatic upload of the docs to python.org, they will now be built by a job on that machine. Modified: python/trunk/Misc/build.sh Modified: python/trunk/Misc/build.sh ============================================================================== --- python/trunk/Misc/build.sh (original) +++ python/trunk/Misc/build.sh Fri Mar 12 22:27:23 2010 @@ -271,8 +271,9 @@ echo "" >> $RESULT_FILE ## copy results -chgrp -R webmaster build/html -chmod -R g+w build/html -rsync $RSYNC_OPTS build/html/* $REMOTE_SYSTEM:$REMOTE_DIR -cd ../build -rsync $RSYNC_OPTS index.html *.out $REMOTE_SYSTEM:$REMOTE_DIR/results/ +## (not used anymore, the daily build is now done directly on the server) +#chgrp -R webmaster build/html +#chmod -R g+w build/html +#rsync $RSYNC_OPTS build/html/* $REMOTE_SYSTEM:$REMOTE_DIR +#cd ../build +#rsync $RSYNC_OPTS index.html *.out $REMOTE_SYSTEM:$REMOTE_DIR/results/ From python-checkins at python.org Fri Mar 12 22:29:25 2010 From: python-checkins at python.org (georg.brandl) Date: Fri, 12 Mar 2010 22:29:25 +0100 (CET) Subject: [Python-checkins] r78881 - in python/branches/release26-maint: Misc/build.sh Message-ID: <20100312212925.AA180F304@mail.python.org> Author: georg.brandl Date: Fri Mar 12 22:29:25 2010 New Revision: 78881 Log: Merged revisions 78880 via svnmerge from svn+ssh://pythondev at svn.python.org/python/trunk ........ r78880 | georg.brandl | 2010-03-12 22:27:23 +0100 (Fr, 12 M?r 2010) | 1 line Deactivate automatic upload of the docs to python.org, they will now be built by a job on that machine. ........ Modified: python/branches/release26-maint/ (props changed) python/branches/release26-maint/Misc/build.sh Modified: python/branches/release26-maint/Misc/build.sh ============================================================================== --- python/branches/release26-maint/Misc/build.sh (original) +++ python/branches/release26-maint/Misc/build.sh Fri Mar 12 22:29:25 2010 @@ -284,9 +284,10 @@ echo "" >> $RESULT_FILE ## copy results -chgrp -R webmaster build/html -chmod -R g+w build/html -rsync $RSYNC_OPTS build/html/* $REMOTE_SYSTEM:$REMOTE_DIR -rsync $RSYNC_OPTS dist/* $REMOTE_SYSTEM:$REMOTE_DIR_DIST -cd ../build -rsync $RSYNC_OPTS index.html *.out $REMOTE_SYSTEM:$REMOTE_DIR/results/ +## (not used anymore, the daily build is now done directly on the server) +#chgrp -R webmaster build/html +#chmod -R g+w build/html +#rsync $RSYNC_OPTS build/html/* $REMOTE_SYSTEM:$REMOTE_DIR +#rsync $RSYNC_OPTS dist/* $REMOTE_SYSTEM:$REMOTE_DIR_DIST +#cd ../build +#rsync $RSYNC_OPTS index.html *.out $REMOTE_SYSTEM:$REMOTE_DIR/results/ From python-checkins at python.org Fri Mar 12 22:29:28 2010 From: python-checkins at python.org (georg.brandl) Date: Fri, 12 Mar 2010 22:29:28 +0100 (CET) Subject: [Python-checkins] r78882 - in python/branches/py3k: Misc/build.sh Message-ID: <20100312212928.5B501F6F9@mail.python.org> Author: georg.brandl Date: Fri Mar 12 22:29:28 2010 New Revision: 78882 Log: Merged revisions 78880 via svnmerge from svn+ssh://pythondev at svn.python.org/python/trunk ........ r78880 | georg.brandl | 2010-03-12 22:27:23 +0100 (Fr, 12 M?r 2010) | 1 line Deactivate automatic upload of the docs to python.org, they will now be built by a job on that machine. ........ Modified: python/branches/py3k/ (props changed) python/branches/py3k/Misc/build.sh Modified: python/branches/py3k/Misc/build.sh ============================================================================== --- python/branches/py3k/Misc/build.sh (original) +++ python/branches/py3k/Misc/build.sh Fri Mar 12 22:29:28 2010 @@ -273,8 +273,9 @@ echo "" >> $RESULT_FILE ## copy results -chgrp -R webmaster build/html -chmod -R g+w build/html -rsync $RSYNC_OPTS build/html/* $REMOTE_SYSTEM:$REMOTE_DIR -cd ../build -rsync $RSYNC_OPTS index.html *.out $REMOTE_SYSTEM:$REMOTE_DIR/results/ +## (not used anymore, the daily build is now done directly on the server) +#chgrp -R webmaster build/html +#chmod -R g+w build/html +#rsync $RSYNC_OPTS build/html/* $REMOTE_SYSTEM:$REMOTE_DIR +#cd ../build +#rsync $RSYNC_OPTS index.html *.out $REMOTE_SYSTEM:$REMOTE_DIR/results/ From nnorwitz at gmail.com Fri Mar 12 22:29:14 2010 From: nnorwitz at gmail.com (Neal Norwitz) Date: Fri, 12 Mar 2010 16:29:14 -0500 Subject: [Python-checkins] Python Regression Test Failures opt (2) Message-ID: <20100312212914.GA7883@kbk-i386-bb.psfb.org> 345 tests OK. 2 tests failed: test_xml_etree test_xml_etree_c 35 tests skipped: test_aepack test_al test_applesingle test_bsddb185 test_bsddb3 test_cd test_cl test_curses test_epoll test_gl test_imgfile test_ioctl test_kqueue test_linuxaudiodev test_macos test_macostools test_multiprocessing test_ossaudiodev test_py3kwarn test_scriptpackages test_smtpnet test_socketserver test_startfile test_sunaudiodev test_tcl test_timeout test_tk test_ttk_guionly test_ttk_textonly test_unicode_file test_urllib2net test_urllibnet test_winreg test_winsound test_zipfile64 6 skips unexpected on linux2: test_multiprocessing test_ttk_guionly test_epoll test_tk test_ioctl test_ttk_textonly == CPython 2.7a4+ (trunk:78879M, Mar 12 2010, 16:01:51) [GCC 3.3.4 20040623 (Gentoo Linux 3.3.4-r1, ssp-3.3.2-2, pie-8.7.6)] == Linux-2.6.9-gentoo-r1-i686-AMD_Athlon-tm-_XP_3000+-with-gentoo-1.4.16 == /tmp/test_python_3761 test_grammar test_opcodes test_dict test_builtin test_exceptions test_types test_unittest test_doctest test_doctest2 test_MimeWriter test_SimpleHTTPServer test_StringIO test___all__ test___future__ test__locale test_abc test_abstract_numbers test_aepack test_aepack skipped -- No module named aetypes test_aifc test_al test_al skipped -- No module named al test_anydbm test_applesingle test_applesingle skipped -- No module named MacOS test_argparse test_array test_ascii_formatd test_ast test_asynchat test_asyncore test_atexit test_audioop test_augassign test_base64 test_bastion test_bigaddrspace test_bigmem test_binascii test_binhex test_binop test_bisect test_bool test_bsddb test_bsddb185 test_bsddb185 skipped -- No module named bsddb185 test_bsddb3 test_bsddb3 skipped -- Use of the `bsddb' resource not enabled test_buffer test_bufio test_bytes test_bz2 test_calendar test_call test_capi test_cd test_cd skipped -- No module named cd test_cfgparser test_cgi test_charmapcodec test_cl test_cl skipped -- No module named cl test_class test_cmath test_cmd test_cmd_line test_cmd_line_script test_code test_codeccallbacks test_codecencodings_cn test_codecencodings_hk test_codecencodings_jp test_codecencodings_kr test_codecencodings_tw test_codecmaps_cn test_codecmaps_hk test_codecmaps_jp test_codecmaps_kr test_codecmaps_tw test_codecs test_codeop test_coding test_coercion test_collections test_colorsys test_commands test_compare test_compile test_compileall test_compiler test_complex test_complex_args test_contains test_contextlib test_cookie test_cookielib test_copy test_copy_reg test_cpickle test_cprofile test_crypt test_csv test_ctypes test_curses test_curses skipped -- Use of the `curses' resource not enabled test_datetime test_dbm test_decimal test_decorators test_defaultdict test_deque test_descr test_descrtut test_dictcomps test_dictviews test_difflib test_dircache test_dis test_distutils [20623 refs] [20623 refs] [20623 refs] [20623 refs] [20620 refs] test_dl test_docxmlrpc test_dumbdbm test_dummy_thread test_dummy_threading test_email test_email_codecs test_email_renamed test_enumerate test_eof test_epoll test_epoll skipped -- kernel doesn't support epoll() test_errno test_exception_variations test_extcall test_fcntl test_file test_file2k test_filecmp test_fileinput test_fileio test_float test_fnmatch test_fork1 test_format test_fpformat test_fractions test_frozen test_ftplib test_funcattrs test_functools test_future test_future3 test_future4 test_future5 test_future_builtins test_gc test_gdbm test_generators test_genericpath test_genexps test_getargs test_getargs2 test_getopt test_gettext test_gl test_gl skipped -- No module named gl test_glob test_global test_grp test_gzip test_hash test_hashlib test_heapq test_hmac test_hotshot test_htmllib test_htmlparser test_httplib test_httpservers [16621 refs] [16621 refs] [16621 refs] [26870 refs] test_imageop test_imaplib test_imgfile test_imgfile skipped -- No module named imgfile test_imp test_import test_importhooks test_importlib test_index test_inspect test_int test_int_literal test_io test_ioctl test_ioctl skipped -- Unable to open /dev/tty test_isinstance test_iter test_iterlen test_itertools test_json test_kqueue test_kqueue skipped -- test works only on BSD test_largefile test_lib2to3 test_linecache test_linuxaudiodev test_linuxaudiodev skipped -- Use of the `audio' resource not enabled test_list test_locale test_logging test_long test_long_future test_longexp test_macos test_macos skipped -- No module named MacOS test_macostools test_macostools skipped -- No module named MacOS test_macpath test_mailbox test_marshal test_math test_md5 test_memoryio test_memoryview test_mhlib test_mimetools test_mimetypes test_minidom test_mmap test_module test_modulefinder test_multibytecodec test_multibytecodec_support test_multifile test_multiprocessing test_multiprocessing skipped -- This platform lacks a functioning sem_open implementation, therefore, the required synchronization primitives needed will not function, see issue 3770. test_mutants test_mutex test_netrc test_new test_nis test_normalization test_ntpath test_old_mailbox test_openpty test_operator test_optparse test_os [16621 refs] [16621 refs] test_ossaudiodev test_ossaudiodev skipped -- Use of the `audio' resource not enabled test_parser Expecting 's_push: parser stack overflow' in next line s_push: parser stack overflow test_pdb test_peepholer test_pep247 test_pep263 test_pep277 test_pep292 test_pep352 test_pickle test_pickletools test_pipes test_pkg test_pkgimport test_pkgutil test_platform [18017 refs] [18017 refs] test_plistlib test_poll test_popen [16626 refs] [16626 refs] [16626 refs] test_popen2 test_poplib test_posix test_posixpath test_pow test_pprint test_print test_profile test_profilehooks test_property test_pstats test_pty test_pwd test_py3kwarn test_py3kwarn skipped -- test.test_py3kwarn must be run with the -3 flag test_pyclbr test_pydoc [21734 refs] [21734 refs] [21734 refs] [21734 refs] [21734 refs] [21733 refs] [21733 refs] test_pyexpat test_queue test_quopri [19449 refs] [19449 refs] test_random test_re test_readline test_repr test_resource test_rfc822 test_richcmp test_robotparser test_runpy test_sax test_scope test_scriptpackages test_scriptpackages skipped -- No module named aetools test_select test_set test_setcomps test_sets test_sgmllib test_sha test_shelve test_shlex test_shutil test_signal test_site [16621 refs] [16621 refs] [16621 refs] [16621 refs] test_slice test_smtplib test_smtpnet test_smtpnet skipped -- Use of the `network' resource not enabled test_socket test_socketserver test_socketserver skipped -- Use of the `network' resource not enabled test_softspace test_sort test_sqlite test_ssl test_startfile test_startfile skipped -- module os has no attribute startfile test_str test_strftime test_string test_stringprep test_strop test_strptime test_strtod test_struct test_structmembers test_structseq test_subprocess [16621 refs] [16621 refs] [16621 refs] [16621 refs] [16621 refs] [16621 refs] [16621 refs] [16621 refs] [16621 refs] [16621 refs] [16621 refs] [16621 refs] [16621 refs] [16621 refs] [16836 refs] [16621 refs] [16621 refs] [16621 refs] [16621 refs] [16621 refs] . [16621 refs] [16621 refs] this bit of output is from a test of stdout in a different process ... [16621 refs] [16621 refs] [16836 refs] [16621 refs] [16621 refs] [16621 refs] Traceback (most recent call last): File "", line 1, in KeyboardInterrupt [16621 refs] [16621 refs] [16621 refs] [16621 refs] [16621 refs] [16621 refs] [16621 refs] [16621 refs] [16621 refs] [16621 refs] [16621 refs] [16621 refs] [16621 refs] [16621 refs] [16621 refs] [16836 refs] [16621 refs] [16621 refs] [16621 refs] [16621 refs] [16621 refs] . [16621 refs] [16621 refs] this bit of output is from a test of stdout in a different process ... [16621 refs] [16621 refs] [16836 refs] test_sunaudiodev test_sunaudiodev skipped -- No module named sunaudiodev test_sundry test_symtable test_syntax test_sys [16621 refs] [16621 refs] [16621 refs] [16850 refs] [16644 refs] test_sysconfig [16621 refs] [16621 refs] test_tarfile test_tcl test_tcl skipped -- No module named _tkinter test_telnetlib test_tempfile [16621 refs] test_textwrap test_thread test_threaded_import test_threadedtempfile test_threading [19921 refs] [21092 refs] [20906 refs] [20906 refs] [20906 refs] [20906 refs] test_threading_local test_threadsignals test_time test_timeout test_timeout skipped -- Use of the `network' resource not enabled test_tk test_tk skipped -- No module named _tkinter test_tokenize test_trace test_traceback test_transformer test_ttk_guionly test_ttk_guionly skipped -- No module named _tkinter test_ttk_textonly test_ttk_textonly skipped -- No module named _tkinter test_tuple test_typechecks test_ucn test_unary test_undocumented_details test_unicode test_unicode_file test_unicode_file skipped -- No Unicode filesystem semantics on this platform. test_unicodedata test_univnewlines test_univnewlines2k test_unpack test_urllib test_urllib2 test_urllib2_localnet test_urllib2net test_urllib2net skipped -- Use of the `network' resource not enabled test_urllibnet test_urllibnet skipped -- Use of the `network' resource not enabled test_urlparse test_userdict test_userlist test_userstring test_uu test_uuid WARNING: uuid.getnode is unreliable on many platforms. It is disabled until the code and/or test can be fixed properly. WARNING: uuid._ifconfig_getnode is unreliable on many platforms. It is disabled until the code and/or test can be fixed properly. WARNING: uuid._unixdll_getnode is unreliable on many platforms. It is disabled until the code and/or test can be fixed properly. test_wait3 test_wait4 test_warnings test_wave test_weakref test_whichdb test_winreg test_winreg skipped -- No module named _winreg test_winsound test_winsound skipped -- No module named winsound test_with test_wsgiref test_xdrlib test_xml_etree ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 770, in test.test_xml_etree.custom_builder Failed example: parser.feed(open("samples/simple.xml", "r").read()) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in parser.feed(open("samples/simple.xml", "r").read()) IOError: [Errno 2] No such file or directory: 'samples/simple.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 793, in test.test_xml_etree.custom_builder Failed example: parser.feed(open("samples/simple-ns.xml", "r").read()) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in parser.feed(open("samples/simple-ns.xml", "r").read()) IOError: [Errno 2] No such file or directory: 'samples/simple-ns.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 421, in test.test_xml_etree.file_init Failed example: tree = ET.ElementTree(file="samples/simple.xml") Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in tree = ET.ElementTree(file="samples/simple.xml") File "/tmp/python-test/local/lib/python2.7/xml/etree/ElementTree.py", line 611, in __init__ self.parse(file) File "/tmp/python-test/local/lib/python2.7/xml/etree/ElementTree.py", line 646, in parse source = open(source, "rb") IOError: [Errno 2] No such file or directory: 'samples/simple.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 422, in test.test_xml_etree.file_init Failed example: tree.find("element").tag Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in tree.find("element").tag AttributeError: 'NoneType' object has no attribute 'tag' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 424, in test.test_xml_etree.file_init Failed example: tree.find("element/../empty-element").tag Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in tree.find("element/../empty-element").tag AttributeError: 'NoneType' object has no attribute 'tag' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 811, in test.test_xml_etree.getchildren Failed example: tree = ET.parse(open("samples/simple.xml", "r")) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in tree = ET.parse(open("samples/simple.xml", "r")) IOError: [Errno 2] No such file or directory: 'samples/simple.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 812, in test.test_xml_etree.getchildren Failed example: for elem in tree.getroot().iter(): summarize_list(elem.getchildren()) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in for elem in tree.getroot().iter(): NameError: name 'tree' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 818, in test.test_xml_etree.getchildren Failed example: for elem in tree.getiterator(): summarize_list(elem.getchildren()) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in for elem in tree.getiterator(): NameError: name 'tree' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 647, in test.test_xml_etree.iterparse Failed example: context = iterparse("samples/simple.xml") Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in context = iterparse("samples/simple.xml") File "/tmp/python-test/local/lib/python2.7/xml/etree/ElementTree.py", line 1192, in iterparse source = open(source, "rb") IOError: [Errno 2] No such file or directory: 'samples/simple.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 648, in test.test_xml_etree.iterparse Failed example: action, elem = next(context) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in action, elem = next(context) NameError: name 'context' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 649, in test.test_xml_etree.iterparse Failed example: print action, elem.tag Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in print action, elem.tag NameError: name 'action' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 651, in test.test_xml_etree.iterparse Failed example: for action, elem in context: print action, elem.tag Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in for action, elem in context: NameError: name 'context' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 656, in test.test_xml_etree.iterparse Failed example: context.root.tag Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in context.root.tag NameError: name 'context' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 659, in test.test_xml_etree.iterparse Failed example: context = iterparse("samples/simple-ns.xml") Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in context = iterparse("samples/simple-ns.xml") File "/tmp/python-test/local/lib/python2.7/xml/etree/ElementTree.py", line 1192, in iterparse source = open(source, "rb") IOError: [Errno 2] No such file or directory: 'samples/simple-ns.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 660, in test.test_xml_etree.iterparse Failed example: for action, elem in context: print action, elem.tag Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in for action, elem in context: NameError: name 'context' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 668, in test.test_xml_etree.iterparse Failed example: context = iterparse("samples/simple.xml", events) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in context = iterparse("samples/simple.xml", events) File "/tmp/python-test/local/lib/python2.7/xml/etree/ElementTree.py", line 1192, in iterparse source = open(source, "rb") IOError: [Errno 2] No such file or directory: 'samples/simple.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 669, in test.test_xml_etree.iterparse Failed example: for action, elem in context: print action, elem.tag Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in for action, elem in context: NameError: name 'context' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 673, in test.test_xml_etree.iterparse Failed example: context = iterparse("samples/simple.xml", events=events) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in context = iterparse("samples/simple.xml", events=events) File "/tmp/python-test/local/lib/python2.7/xml/etree/ElementTree.py", line 1192, in iterparse source = open(source, "rb") IOError: [Errno 2] No such file or directory: 'samples/simple.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 674, in test.test_xml_etree.iterparse Failed example: for action, elem in context: print action, elem.tag Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in for action, elem in context: NameError: name 'context' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 678, in test.test_xml_etree.iterparse Failed example: context = iterparse("samples/simple.xml", events) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in context = iterparse("samples/simple.xml", events) File "/tmp/python-test/local/lib/python2.7/xml/etree/ElementTree.py", line 1192, in iterparse source = open(source, "rb") IOError: [Errno 2] No such file or directory: 'samples/simple.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 679, in test.test_xml_etree.iterparse Failed example: for action, elem in context: print action, elem.tag Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in for action, elem in context: NameError: name 'context' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 691, in test.test_xml_etree.iterparse Failed example: context = iterparse("samples/simple-ns.xml", events) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in context = iterparse("samples/simple-ns.xml", events) File "/tmp/python-test/local/lib/python2.7/xml/etree/ElementTree.py", line 1192, in iterparse source = open(source, "rb") IOError: [Errno 2] No such file or directory: 'samples/simple-ns.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 692, in test.test_xml_etree.iterparse Failed example: for action, elem in context: if action in ("start", "end"): print action, elem.tag else: print action, elem Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in for action, elem in context: NameError: name 'context' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 709, in test.test_xml_etree.iterparse Failed example: context = iterparse("samples/simple.xml", events) Expected: Traceback (most recent call last): ValueError: unknown event 'bogus' Got: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in context = iterparse("samples/simple.xml", events) File "/tmp/python-test/local/lib/python2.7/xml/etree/ElementTree.py", line 1192, in iterparse source = open(source, "rb") IOError: [Errno 2] No such file or directory: 'samples/simple.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 567, in test.test_xml_etree.parsefile Failed example: tree = ET.parse("samples/simple.xml") Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in tree = ET.parse("samples/simple.xml") File "/tmp/python-test/local/lib/python2.7/xml/etree/ElementTree.py", line 1176, in parse tree.parse(source, parser) File "/tmp/python-test/local/lib/python2.7/xml/etree/ElementTree.py", line 646, in parse source = open(source, "rb") IOError: [Errno 2] No such file or directory: 'samples/simple.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 568, in test.test_xml_etree.parsefile Failed example: normalize_crlf(tree) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in normalize_crlf(tree) NameError: name 'tree' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 569, in test.test_xml_etree.parsefile Failed example: tree.write(sys.stdout) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in tree.write(sys.stdout) NameError: name 'tree' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 575, in test.test_xml_etree.parsefile Failed example: tree = ET.parse("samples/simple-ns.xml") Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in tree = ET.parse("samples/simple-ns.xml") File "/tmp/python-test/local/lib/python2.7/xml/etree/ElementTree.py", line 1176, in parse tree.parse(source, parser) File "/tmp/python-test/local/lib/python2.7/xml/etree/ElementTree.py", line 646, in parse source = open(source, "rb") IOError: [Errno 2] No such file or directory: 'samples/simple-ns.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 576, in test.test_xml_etree.parsefile Failed example: normalize_crlf(tree) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in normalize_crlf(tree) NameError: name 'tree' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 577, in test.test_xml_etree.parsefile Failed example: tree.write(sys.stdout) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in tree.write(sys.stdout) NameError: name 'tree' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 587, in test.test_xml_etree.parsefile Failed example: parser.feed(open("samples/simple.xml").read()) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in parser.feed(open("samples/simple.xml").read()) IOError: [Errno 2] No such file or directory: 'samples/simple.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 588, in test.test_xml_etree.parsefile Failed example: print serialize(parser.close()) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in print serialize(parser.close()) File "/tmp/python-test/local/lib/python2.7/xml/etree/ElementTree.py", line 1635, in close self._raiseerror(v) File "/tmp/python-test/local/lib/python2.7/xml/etree/ElementTree.py", line 1487, in _raiseerror raise err ParseError: no element found: line 1, column 0 ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 596, in test.test_xml_etree.parsefile Failed example: parser.feed(open("samples/simple.xml").read()) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in parser.feed(open("samples/simple.xml").read()) IOError: [Errno 2] No such file or directory: 'samples/simple.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 597, in test.test_xml_etree.parsefile Failed example: print serialize(parser.close()) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in print serialize(parser.close()) File "/tmp/python-test/local/lib/python2.7/xml/etree/ElementTree.py", line 1635, in close self._raiseerror(v) File "/tmp/python-test/local/lib/python2.7/xml/etree/ElementTree.py", line 1487, in _raiseerror raise err ParseError: no element found: line 1, column 0 ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 606, in test.test_xml_etree.parsefile Failed example: parser.feed(open("samples/simple.xml").read()) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in parser.feed(open("samples/simple.xml").read()) IOError: [Errno 2] No such file or directory: 'samples/simple.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 607, in test.test_xml_etree.parsefile Failed example: print serialize(parser.close()) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in print serialize(parser.close()) File "/tmp/python-test/local/lib/python2.7/xml/etree/ElementTree.py", line 1635, in close self._raiseerror(v) File "/tmp/python-test/local/lib/python2.7/xml/etree/ElementTree.py", line 1487, in _raiseerror raise err ParseError: no element found: line 1, column 0 ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 1361, in test.test_xml_etree.xinclude_default Failed example: ElementInclude.include(document) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in ElementInclude.include(document) File "/tmp/python-test/local/lib/python2.7/xml/etree/ElementInclude.py", line 111, in include node = loader(href, parse) File "/tmp/python-test/local/lib/python2.7/xml/etree/ElementInclude.py", line 78, in default_loader file = open(href) IOError: [Errno 2] No such file or directory: 'samples/simple.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 1362, in test.test_xml_etree.xinclude_default Failed example: print serialize(document) # default Expected:

    Example.

    text texttail
    Got:

    Example.

    ********************************************************************** 6 items had failures: 2 of 8 in test.test_xml_etree.custom_builder 3 of 8 in test.test_xml_etree.file_init 3 of 19 in test.test_xml_etree.getchildren 16 of 29 in test.test_xml_etree.iterparse 12 of 17 in test.test_xml_etree.parsefile 2 of 4 in test.test_xml_etree.xinclude_default ***Test Failed*** 38 failures. test test_xml_etree failed -- 38 of 591 doctests failed Re-running test 'test_xml_etree' in verbose mode ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 770, in test.test_xml_etree.custom_builder Failed example: parser.feed(open("samples/simple.xml", "r").read()) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in parser.feed(open("samples/simple.xml", "r").read()) IOError: [Errno 2] No such file or directory: 'samples/simple.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 793, in test.test_xml_etree.custom_builder Failed example: parser.feed(open("samples/simple-ns.xml", "r").read()) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in parser.feed(open("samples/simple-ns.xml", "r").read()) IOError: [Errno 2] No such file or directory: 'samples/simple-ns.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 421, in test.test_xml_etree.file_init Failed example: tree = ET.ElementTree(file="samples/simple.xml") Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in tree = ET.ElementTree(file="samples/simple.xml") File "/tmp/python-test/local/lib/python2.7/xml/etree/ElementTree.py", line 611, in __init__ self.parse(file) File "/tmp/python-test/local/lib/python2.7/xml/etree/ElementTree.py", line 646, in parse source = open(source, "rb") IOError: [Errno 2] No such file or directory: 'samples/simple.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 422, in test.test_xml_etree.file_init Failed example: tree.find("element").tag Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in tree.find("element").tag AttributeError: 'NoneType' object has no attribute 'tag' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 424, in test.test_xml_etree.file_init Failed example: tree.find("element/../empty-element").tag Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in tree.find("element/../empty-element").tag AttributeError: 'NoneType' object has no attribute 'tag' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 811, in test.test_xml_etree.getchildren Failed example: tree = ET.parse(open("samples/simple.xml", "r")) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in tree = ET.parse(open("samples/simple.xml", "r")) IOError: [Errno 2] No such file or directory: 'samples/simple.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 812, in test.test_xml_etree.getchildren Failed example: for elem in tree.getroot().iter(): summarize_list(elem.getchildren()) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in for elem in tree.getroot().iter(): NameError: name 'tree' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 818, in test.test_xml_etree.getchildren Failed example: for elem in tree.getiterator(): summarize_list(elem.getchildren()) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in for elem in tree.getiterator(): NameError: name 'tree' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 647, in test.test_xml_etree.iterparse Failed example: context = iterparse("samples/simple.xml") Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in context = iterparse("samples/simple.xml") File "/tmp/python-test/local/lib/python2.7/xml/etree/ElementTree.py", line 1192, in iterparse source = open(source, "rb") IOError: [Errno 2] No such file or directory: 'samples/simple.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 648, in test.test_xml_etree.iterparse Failed example: action, elem = next(context) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in action, elem = next(context) NameError: name 'context' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 649, in test.test_xml_etree.iterparse Failed example: print action, elem.tag Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in print action, elem.tag NameError: name 'action' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 651, in test.test_xml_etree.iterparse Failed example: for action, elem in context: print action, elem.tag Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in for action, elem in context: NameError: name 'context' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 656, in test.test_xml_etree.iterparse Failed example: context.root.tag Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in context.root.tag NameError: name 'context' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 659, in test.test_xml_etree.iterparse Failed example: context = iterparse("samples/simple-ns.xml") Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in context = iterparse("samples/simple-ns.xml") File "/tmp/python-test/local/lib/python2.7/xml/etree/ElementTree.py", line 1192, in iterparse source = open(source, "rb") IOError: [Errno 2] No such file or directory: 'samples/simple-ns.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 660, in test.test_xml_etree.iterparse Failed example: for action, elem in context: print action, elem.tag Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in for action, elem in context: NameError: name 'context' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 668, in test.test_xml_etree.iterparse Failed example: context = iterparse("samples/simple.xml", events) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in context = iterparse("samples/simple.xml", events) File "/tmp/python-test/local/lib/python2.7/xml/etree/ElementTree.py", line 1192, in iterparse source = open(source, "rb") IOError: [Errno 2] No such file or directory: 'samples/simple.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 669, in test.test_xml_etree.iterparse Failed example: for action, elem in context: print action, elem.tag Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in for action, elem in context: NameError: name 'context' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 673, in test.test_xml_etree.iterparse Failed example: context = iterparse("samples/simple.xml", events=events) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in context = iterparse("samples/simple.xml", events=events) File "/tmp/python-test/local/lib/python2.7/xml/etree/ElementTree.py", line 1192, in iterparse source = open(source, "rb") IOError: [Errno 2] No such file or directory: 'samples/simple.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 674, in test.test_xml_etree.iterparse Failed example: for action, elem in context: print action, elem.tag Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in for action, elem in context: NameError: name 'context' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 678, in test.test_xml_etree.iterparse Failed example: context = iterparse("samples/simple.xml", events) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in context = iterparse("samples/simple.xml", events) File "/tmp/python-test/local/lib/python2.7/xml/etree/ElementTree.py", line 1192, in iterparse source = open(source, "rb") IOError: [Errno 2] No such file or directory: 'samples/simple.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 679, in test.test_xml_etree.iterparse Failed example: for action, elem in context: print action, elem.tag Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in for action, elem in context: NameError: name 'context' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 691, in test.test_xml_etree.iterparse Failed example: context = iterparse("samples/simple-ns.xml", events) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in context = iterparse("samples/simple-ns.xml", events) File "/tmp/python-test/local/lib/python2.7/xml/etree/ElementTree.py", line 1192, in iterparse source = open(source, "rb") IOError: [Errno 2] No such file or directory: 'samples/simple-ns.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 692, in test.test_xml_etree.iterparse Failed example: for action, elem in context: if action in ("start", "end"): print action, elem.tag else: print action, elem Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in for action, elem in context: NameError: name 'context' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 709, in test.test_xml_etree.iterparse Failed example: context = iterparse("samples/simple.xml", events) Expected: Traceback (most recent call last): ValueError: unknown event 'bogus' Got: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in context = iterparse("samples/simple.xml", events) File "/tmp/python-test/local/lib/python2.7/xml/etree/ElementTree.py", line 1192, in iterparse source = open(source, "rb") IOError: [Errno 2] No such file or directory: 'samples/simple.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 567, in test.test_xml_etree.parsefile Failed example: tree = ET.parse("samples/simple.xml") Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in tree = ET.parse("samples/simple.xml") File "/tmp/python-test/local/lib/python2.7/xml/etree/ElementTree.py", line 1176, in parse tree.parse(source, parser) File "/tmp/python-test/local/lib/python2.7/xml/etree/ElementTree.py", line 646, in parse source = open(source, "rb") IOError: [Errno 2] No such file or directory: 'samples/simple.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 568, in test.test_xml_etree.parsefile Failed example: normalize_crlf(tree) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in normalize_crlf(tree) NameError: name 'tree' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 569, in test.test_xml_etree.parsefile Failed example: tree.write(sys.stdout) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in tree.write(sys.stdout) NameError: name 'tree' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 575, in test.test_xml_etree.parsefile Failed example: tree = ET.parse("samples/simple-ns.xml") Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in tree = ET.parse("samples/simple-ns.xml") File "/tmp/python-test/local/lib/python2.7/xml/etree/ElementTree.py", line 1176, in parse tree.parse(source, parser) File "/tmp/python-test/local/lib/python2.7/xml/etree/ElementTree.py", line 646, in parse source = open(source, "rb") IOError: [Errno 2] No such file or directory: 'samples/simple-ns.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 576, in test.test_xml_etree.parsefile Failed example: normalize_crlf(tree) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in normalize_crlf(tree) NameError: name 'tree' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 577, in test.test_xml_etree.parsefile Failed example: tree.write(sys.stdout) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in tree.write(sys.stdout) NameError: name 'tree' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 587, in test.test_xml_etree.parsefile Failed example: parser.feed(open("samples/simple.xml").read()) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in parser.feed(open("samples/simple.xml").read()) IOError: [Errno 2] No such file or directory: 'samples/simple.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 588, in test.test_xml_etree.parsefile Failed example: print serialize(parser.close()) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in print serialize(parser.close()) File "/tmp/python-test/local/lib/python2.7/xml/etree/ElementTree.py", line 1635, in close self._raiseerror(v) File "/tmp/python-test/local/lib/python2.7/xml/etree/ElementTree.py", line 1487, in _raiseerror raise err ParseError: no element found: line 1, column 0 ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 596, in test.test_xml_etree.parsefile Failed example: parser.feed(open("samples/simple.xml").read()) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in parser.feed(open("samples/simple.xml").read()) IOError: [Errno 2] No such file or directory: 'samples/simple.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 597, in test.test_xml_etree.parsefile Failed example: print serialize(parser.close()) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in print serialize(parser.close()) File "/tmp/python-test/local/lib/python2.7/xml/etree/ElementTree.py", line 1635, in close self._raiseerror(v) File "/tmp/python-test/local/lib/python2.7/xml/etree/ElementTree.py", line 1487, in _raiseerror raise err ParseError: no element found: line 1, column 0 ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 606, in test.test_xml_etree.parsefile Failed example: parser.feed(open("samples/simple.xml").read()) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in parser.feed(open("samples/simple.xml").read()) IOError: [Errno 2] No such file or directory: 'samples/simple.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 607, in test.test_xml_etree.parsefile Failed example: print serialize(parser.close()) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in print serialize(parser.close()) File "/tmp/python-test/local/lib/python2.7/xml/etree/ElementTree.py", line 1635, in close self._raiseerror(v) File "/tmp/python-test/local/lib/python2.7/xml/etree/ElementTree.py", line 1487, in _raiseerror raise err ParseError: no element found: line 1, column 0 ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 1361, in test.test_xml_etree.xinclude_default Failed example: ElementInclude.include(document) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in ElementInclude.include(document) File "/tmp/python-test/local/lib/python2.7/xml/etree/ElementInclude.py", line 111, in include node = loader(href, parse) File "/tmp/python-test/local/lib/python2.7/xml/etree/ElementInclude.py", line 78, in default_loader file = open(href) IOError: [Errno 2] No such file or directory: 'samples/simple.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 1362, in test.test_xml_etree.xinclude_default Failed example: print serialize(document) # default Expected:

    Example.

    text texttail
    Got:

    Example.

    ********************************************************************** 6 items had failures: 2 of 8 in test.test_xml_etree.custom_builder 3 of 8 in test.test_xml_etree.file_init 3 of 19 in test.test_xml_etree.getchildren 16 of 29 in test.test_xml_etree.iterparse 12 of 17 in test.test_xml_etree.parsefile 2 of 4 in test.test_xml_etree.xinclude_default ***Test Failed*** 38 failures. test test_xml_etree failed -- 38 of 591 doctests failed test_xml_etree_c ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 770, in test.test_xml_etree.custom_builder Failed example: parser.feed(open("samples/simple.xml", "r").read()) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in parser.feed(open("samples/simple.xml", "r").read()) IOError: [Errno 2] No such file or directory: 'samples/simple.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 793, in test.test_xml_etree.custom_builder Failed example: parser.feed(open("samples/simple-ns.xml", "r").read()) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in parser.feed(open("samples/simple-ns.xml", "r").read()) IOError: [Errno 2] No such file or directory: 'samples/simple-ns.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 421, in test.test_xml_etree.file_init Failed example: tree = ET.ElementTree(file="samples/simple.xml") Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in tree = ET.ElementTree(file="samples/simple.xml") File "/tmp/python-test/local/lib/python2.7/xml/etree/ElementTree.py", line 611, in __init__ self.parse(file) File "", line 25, in parse IOError: [Errno 2] No such file or directory: 'samples/simple.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 422, in test.test_xml_etree.file_init Failed example: tree.find("element").tag Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in tree.find("element").tag AttributeError: 'NoneType' object has no attribute 'tag' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 424, in test.test_xml_etree.file_init Failed example: tree.find("element/../empty-element").tag Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in tree.find("element/../empty-element").tag AttributeError: 'NoneType' object has no attribute 'tag' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 811, in test.test_xml_etree.getchildren Failed example: tree = ET.parse(open("samples/simple.xml", "r")) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in tree = ET.parse(open("samples/simple.xml", "r")) IOError: [Errno 2] No such file or directory: 'samples/simple.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 812, in test.test_xml_etree.getchildren Failed example: for elem in tree.getroot().iter(): summarize_list(elem.getchildren()) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in for elem in tree.getroot().iter(): NameError: name 'tree' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 818, in test.test_xml_etree.getchildren Failed example: for elem in tree.getiterator(): summarize_list(elem.getchildren()) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in for elem in tree.getiterator(): NameError: name 'tree' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 647, in test.test_xml_etree.iterparse Failed example: context = iterparse("samples/simple.xml") Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in context = iterparse("samples/simple.xml") File "", line 63, in __init__ IOError: [Errno 2] No such file or directory: 'samples/simple.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 648, in test.test_xml_etree.iterparse Failed example: action, elem = next(context) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in action, elem = next(context) NameError: name 'context' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 649, in test.test_xml_etree.iterparse Failed example: print action, elem.tag Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in print action, elem.tag NameError: name 'action' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 651, in test.test_xml_etree.iterparse Failed example: for action, elem in context: print action, elem.tag Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in for action, elem in context: NameError: name 'context' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 656, in test.test_xml_etree.iterparse Failed example: context.root.tag Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in context.root.tag NameError: name 'context' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 659, in test.test_xml_etree.iterparse Failed example: context = iterparse("samples/simple-ns.xml") Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in context = iterparse("samples/simple-ns.xml") File "", line 63, in __init__ IOError: [Errno 2] No such file or directory: 'samples/simple-ns.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 660, in test.test_xml_etree.iterparse Failed example: for action, elem in context: print action, elem.tag Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in for action, elem in context: NameError: name 'context' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 668, in test.test_xml_etree.iterparse Failed example: context = iterparse("samples/simple.xml", events) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in context = iterparse("samples/simple.xml", events) File "", line 63, in __init__ IOError: [Errno 2] No such file or directory: 'samples/simple.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 669, in test.test_xml_etree.iterparse Failed example: for action, elem in context: print action, elem.tag Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in for action, elem in context: NameError: name 'context' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 673, in test.test_xml_etree.iterparse Failed example: context = iterparse("samples/simple.xml", events=events) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in context = iterparse("samples/simple.xml", events=events) File "", line 63, in __init__ IOError: [Errno 2] No such file or directory: 'samples/simple.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 674, in test.test_xml_etree.iterparse Failed example: for action, elem in context: print action, elem.tag Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in for action, elem in context: NameError: name 'context' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 678, in test.test_xml_etree.iterparse Failed example: context = iterparse("samples/simple.xml", events) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in context = iterparse("samples/simple.xml", events) File "", line 63, in __init__ IOError: [Errno 2] No such file or directory: 'samples/simple.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 679, in test.test_xml_etree.iterparse Failed example: for action, elem in context: print action, elem.tag Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in for action, elem in context: NameError: name 'context' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 691, in test.test_xml_etree.iterparse Failed example: context = iterparse("samples/simple-ns.xml", events) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in context = iterparse("samples/simple-ns.xml", events) File "", line 63, in __init__ IOError: [Errno 2] No such file or directory: 'samples/simple-ns.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 692, in test.test_xml_etree.iterparse Failed example: for action, elem in context: if action in ("start", "end"): print action, elem.tag else: print action, elem Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in for action, elem in context: NameError: name 'context' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 709, in test.test_xml_etree.iterparse Failed example: context = iterparse("samples/simple.xml", events) Expected: Traceback (most recent call last): ValueError: unknown event 'bogus' Got: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in context = iterparse("samples/simple.xml", events) File "", line 63, in __init__ IOError: [Errno 2] No such file or directory: 'samples/simple.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 567, in test.test_xml_etree.parsefile Failed example: tree = ET.parse("samples/simple.xml") Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in tree = ET.parse("samples/simple.xml") File "", line 56, in parse File "", line 25, in parse IOError: [Errno 2] No such file or directory: 'samples/simple.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 568, in test.test_xml_etree.parsefile Failed example: normalize_crlf(tree) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in normalize_crlf(tree) NameError: name 'tree' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 569, in test.test_xml_etree.parsefile Failed example: tree.write(sys.stdout) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in tree.write(sys.stdout) NameError: name 'tree' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 575, in test.test_xml_etree.parsefile Failed example: tree = ET.parse("samples/simple-ns.xml") Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in tree = ET.parse("samples/simple-ns.xml") File "", line 56, in parse File "", line 25, in parse IOError: [Errno 2] No such file or directory: 'samples/simple-ns.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 576, in test.test_xml_etree.parsefile Failed example: normalize_crlf(tree) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in normalize_crlf(tree) NameError: name 'tree' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 577, in test.test_xml_etree.parsefile Failed example: tree.write(sys.stdout) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in tree.write(sys.stdout) NameError: name 'tree' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 587, in test.test_xml_etree.parsefile Failed example: parser.feed(open("samples/simple.xml").read()) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in parser.feed(open("samples/simple.xml").read()) IOError: [Errno 2] No such file or directory: 'samples/simple.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 588, in test.test_xml_etree.parsefile Failed example: print serialize(parser.close()) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in print serialize(parser.close()) ParseError: no element found: line 1, column 0 ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 596, in test.test_xml_etree.parsefile Failed example: parser.feed(open("samples/simple.xml").read()) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in parser.feed(open("samples/simple.xml").read()) IOError: [Errno 2] No such file or directory: 'samples/simple.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 597, in test.test_xml_etree.parsefile Failed example: print serialize(parser.close()) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in print serialize(parser.close()) ParseError: no element found: line 1, column 0 ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 606, in test.test_xml_etree.parsefile Failed example: parser.feed(open("samples/simple.xml").read()) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in parser.feed(open("samples/simple.xml").read()) IOError: [Errno 2] No such file or directory: 'samples/simple.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 607, in test.test_xml_etree.parsefile Failed example: print serialize(parser.close()) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in print serialize(parser.close()) ParseError: no element found: line 1, column 0 ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 1361, in test.test_xml_etree.xinclude_default Failed example: ElementInclude.include(document) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in ElementInclude.include(document) File "/tmp/python-test/local/lib/python2.7/xml/etree/ElementInclude.py", line 111, in include node = loader(href, parse) File "/tmp/python-test/local/lib/python2.7/xml/etree/ElementInclude.py", line 78, in default_loader file = open(href) IOError: [Errno 2] No such file or directory: 'samples/simple.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 1362, in test.test_xml_etree.xinclude_default Failed example: print serialize(document) # default Expected:

    Example.

    text texttail
    Got:

    Example.

    ********************************************************************** 6 items had failures: 2 of 8 in test.test_xml_etree.custom_builder 3 of 8 in test.test_xml_etree.file_init 3 of 19 in test.test_xml_etree.getchildren 16 of 29 in test.test_xml_etree.iterparse 12 of 17 in test.test_xml_etree.parsefile 2 of 4 in test.test_xml_etree.xinclude_default ***Test Failed*** 38 failures. test test_xml_etree_c failed -- 38 of 591 doctests failed Re-running test 'test_xml_etree_c' in verbose mode doctest (test.test_xml_etree_c) ... 1 tests with zero failures ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 770, in test.test_xml_etree.custom_builder Failed example: parser.feed(open("samples/simple.xml", "r").read()) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in parser.feed(open("samples/simple.xml", "r").read()) IOError: [Errno 2] No such file or directory: 'samples/simple.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 793, in test.test_xml_etree.custom_builder Failed example: parser.feed(open("samples/simple-ns.xml", "r").read()) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in parser.feed(open("samples/simple-ns.xml", "r").read()) IOError: [Errno 2] No such file or directory: 'samples/simple-ns.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 421, in test.test_xml_etree.file_init Failed example: tree = ET.ElementTree(file="samples/simple.xml") Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in tree = ET.ElementTree(file="samples/simple.xml") File "/tmp/python-test/local/lib/python2.7/xml/etree/ElementTree.py", line 611, in __init__ self.parse(file) File "", line 25, in parse IOError: [Errno 2] No such file or directory: 'samples/simple.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 422, in test.test_xml_etree.file_init Failed example: tree.find("element").tag Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in tree.find("element").tag AttributeError: 'NoneType' object has no attribute 'tag' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 424, in test.test_xml_etree.file_init Failed example: tree.find("element/../empty-element").tag Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in tree.find("element/../empty-element").tag AttributeError: 'NoneType' object has no attribute 'tag' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 811, in test.test_xml_etree.getchildren Failed example: tree = ET.parse(open("samples/simple.xml", "r")) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in tree = ET.parse(open("samples/simple.xml", "r")) IOError: [Errno 2] No such file or directory: 'samples/simple.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 812, in test.test_xml_etree.getchildren Failed example: for elem in tree.getroot().iter(): summarize_list(elem.getchildren()) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in for elem in tree.getroot().iter(): NameError: name 'tree' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 818, in test.test_xml_etree.getchildren Failed example: for elem in tree.getiterator(): summarize_list(elem.getchildren()) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in for elem in tree.getiterator(): NameError: name 'tree' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 647, in test.test_xml_etree.iterparse Failed example: context = iterparse("samples/simple.xml") Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in context = iterparse("samples/simple.xml") File "", line 63, in __init__ IOError: [Errno 2] No such file or directory: 'samples/simple.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 648, in test.test_xml_etree.iterparse Failed example: action, elem = next(context) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in action, elem = next(context) NameError: name 'context' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 649, in test.test_xml_etree.iterparse Failed example: print action, elem.tag Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in print action, elem.tag NameError: name 'action' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 651, in test.test_xml_etree.iterparse Failed example: for action, elem in context: print action, elem.tag Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in for action, elem in context: NameError: name 'context' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 656, in test.test_xml_etree.iterparse Failed example: context.root.tag Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in context.root.tag NameError: name 'context' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 659, in test.test_xml_etree.iterparse Failed example: context = iterparse("samples/simple-ns.xml") Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in context = iterparse("samples/simple-ns.xml") File "", line 63, in __init__ IOError: [Errno 2] No such file or directory: 'samples/simple-ns.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 660, in test.test_xml_etree.iterparse Failed example: for action, elem in context: print action, elem.tag Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in for action, elem in context: NameError: name 'context' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 668, in test.test_xml_etree.iterparse Failed example: context = iterparse("samples/simple.xml", events) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in context = iterparse("samples/simple.xml", events) File "", line 63, in __init__ IOError: [Errno 2] No such file or directory: 'samples/simple.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 669, in test.test_xml_etree.iterparse Failed example: for action, elem in context: print action, elem.tag Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in for action, elem in context: NameError: name 'context' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 673, in test.test_xml_etree.iterparse Failed example: context = iterparse("samples/simple.xml", events=events) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in context = iterparse("samples/simple.xml", events=events) File "", line 63, in __init__ IOError: [Errno 2] No such file or directory: 'samples/simple.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 674, in test.test_xml_etree.iterparse Failed example: for action, elem in context: print action, elem.tag Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in for action, elem in context: NameError: name 'context' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 678, in test.test_xml_etree.iterparse Failed example: context = iterparse("samples/simple.xml", events) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in context = iterparse("samples/simple.xml", events) File "", line 63, in __init__ IOError: [Errno 2] No such file or directory: 'samples/simple.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 679, in test.test_xml_etree.iterparse Failed example: for action, elem in context: print action, elem.tag Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in for action, elem in context: NameError: name 'context' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 691, in test.test_xml_etree.iterparse Failed example: context = iterparse("samples/simple-ns.xml", events) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in context = iterparse("samples/simple-ns.xml", events) File "", line 63, in __init__ IOError: [Errno 2] No such file or directory: 'samples/simple-ns.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 692, in test.test_xml_etree.iterparse Failed example: for action, elem in context: if action in ("start", "end"): print action, elem.tag else: print action, elem Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in for action, elem in context: NameError: name 'context' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 709, in test.test_xml_etree.iterparse Failed example: context = iterparse("samples/simple.xml", events) Expected: Traceback (most recent call last): ValueError: unknown event 'bogus' Got: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in context = iterparse("samples/simple.xml", events) File "", line 63, in __init__ IOError: [Errno 2] No such file or directory: 'samples/simple.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 567, in test.test_xml_etree.parsefile Failed example: tree = ET.parse("samples/simple.xml") Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in tree = ET.parse("samples/simple.xml") File "", line 56, in parse File "", line 25, in parse IOError: [Errno 2] No such file or directory: 'samples/simple.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 568, in test.test_xml_etree.parsefile Failed example: normalize_crlf(tree) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in normalize_crlf(tree) NameError: name 'tree' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 569, in test.test_xml_etree.parsefile Failed example: tree.write(sys.stdout) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in tree.write(sys.stdout) NameError: name 'tree' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 575, in test.test_xml_etree.parsefile Failed example: tree = ET.parse("samples/simple-ns.xml") Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in tree = ET.parse("samples/simple-ns.xml") File "", line 56, in parse File "", line 25, in parse IOError: [Errno 2] No such file or directory: 'samples/simple-ns.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 576, in test.test_xml_etree.parsefile Failed example: normalize_crlf(tree) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in normalize_crlf(tree) NameError: name 'tree' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 577, in test.test_xml_etree.parsefile Failed example: tree.write(sys.stdout) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in tree.write(sys.stdout) NameError: name 'tree' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 587, in test.test_xml_etree.parsefile Failed example: parser.feed(open("samples/simple.xml").read()) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in parser.feed(open("samples/simple.xml").read()) IOError: [Errno 2] No such file or directory: 'samples/simple.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 588, in test.test_xml_etree.parsefile Failed example: print serialize(parser.close()) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in print serialize(parser.close()) ParseError: no element found: line 1, column 0 ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 596, in test.test_xml_etree.parsefile Failed example: parser.feed(open("samples/simple.xml").read()) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in parser.feed(open("samples/simple.xml").read()) IOError: [Errno 2] No such file or directory: 'samples/simple.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 597, in test.test_xml_etree.parsefile Failed example: print serialize(parser.close()) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in print serialize(parser.close()) ParseError: no element found: line 1, column 0 ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 606, in test.test_xml_etree.parsefile Failed example: parser.feed(open("samples/simple.xml").read()) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in parser.feed(open("samples/simple.xml").read()) IOError: [Errno 2] No such file or directory: 'samples/simple.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 607, in test.test_xml_etree.parsefile Failed example: print serialize(parser.close()) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in print serialize(parser.close()) ParseError: no element found: line 1, column 0 ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 1361, in test.test_xml_etree.xinclude_default Failed example: ElementInclude.include(document) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in ElementInclude.include(document) File "/tmp/python-test/local/lib/python2.7/xml/etree/ElementInclude.py", line 111, in include node = loader(href, parse) File "/tmp/python-test/local/lib/python2.7/xml/etree/ElementInclude.py", line 78, in default_loader file = open(href) IOError: [Errno 2] No such file or directory: 'samples/simple.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 1362, in test.test_xml_etree.xinclude_default Failed example: print serialize(document) # default Expected:

    Example.

    text texttail
    Got:

    Example.

    ********************************************************************** 6 items had failures: 2 of 8 in test.test_xml_etree.custom_builder 3 of 8 in test.test_xml_etree.file_init 3 of 19 in test.test_xml_etree.getchildren 16 of 29 in test.test_xml_etree.iterparse 12 of 17 in test.test_xml_etree.parsefile 2 of 4 in test.test_xml_etree.xinclude_default ***Test Failed*** 38 failures. test test_xml_etree_c failed -- 38 of 591 doctests failed test_xmllib test_xmlrpc test_xpickle test_xpickle -- skipping backwards compat tests. Use 'regrtest.py -u xpickle' to run them. test_xrange test_zipfile test_zipfile64 test_zipfile64 skipped -- test requires loads of disk-space bytes and a long time to run test_zipimport test_zipimport_support test_zlib 345 tests OK. 2 tests failed: test_xml_etree test_xml_etree_c 35 tests skipped: test_aepack test_al test_applesingle test_bsddb185 test_bsddb3 test_cd test_cl test_curses test_epoll test_gl test_imgfile test_ioctl test_kqueue test_linuxaudiodev test_macos test_macostools test_multiprocessing test_ossaudiodev test_py3kwarn test_scriptpackages test_smtpnet test_socketserver test_startfile test_sunaudiodev test_tcl test_timeout test_tk test_ttk_guionly test_ttk_textonly test_unicode_file test_urllib2net test_urllibnet test_winreg test_winsound test_zipfile64 6 skips unexpected on linux2: test_multiprocessing test_ttk_guionly test_epoll test_tk test_ioctl test_ttk_textonly [946419 refs] From python-checkins at python.org Fri Mar 12 22:30:42 2010 From: python-checkins at python.org (georg.brandl) Date: Fri, 12 Mar 2010 22:30:42 +0100 (CET) Subject: [Python-checkins] r78883 - in python/branches/release31-maint: Misc/build.sh Message-ID: <20100312213042.26C2ADEA5@mail.python.org> Author: georg.brandl Date: Fri Mar 12 22:30:42 2010 New Revision: 78883 Log: Merged revisions 78882 via svnmerge from svn+ssh://svn.python.org/python/branches/py3k ................ r78882 | georg.brandl | 2010-03-12 22:29:28 +0100 (Fr, 12 M?r 2010) | 9 lines Merged revisions 78880 via svnmerge from svn+ssh://pythondev at svn.python.org/python/trunk ........ r78880 | georg.brandl | 2010-03-12 22:27:23 +0100 (Fr, 12 M?r 2010) | 1 line Deactivate automatic upload of the docs to python.org, they will now be built by a job on that machine. ........ ................ Modified: python/branches/release31-maint/ (props changed) python/branches/release31-maint/Misc/build.sh Modified: python/branches/release31-maint/Misc/build.sh ============================================================================== --- python/branches/release31-maint/Misc/build.sh (original) +++ python/branches/release31-maint/Misc/build.sh Fri Mar 12 22:30:42 2010 @@ -273,8 +273,9 @@ echo "" >> $RESULT_FILE ## copy results -chgrp -R webmaster build/html -chmod -R g+w build/html -rsync $RSYNC_OPTS build/html/* $REMOTE_SYSTEM:$REMOTE_DIR -cd ../build -rsync $RSYNC_OPTS index.html *.out $REMOTE_SYSTEM:$REMOTE_DIR/results/ +## (not used anymore, the daily build is now done directly on the server) +#chgrp -R webmaster build/html +#chmod -R g+w build/html +#rsync $RSYNC_OPTS build/html/* $REMOTE_SYSTEM:$REMOTE_DIR +#cd ../build +#rsync $RSYNC_OPTS index.html *.out $REMOTE_SYSTEM:$REMOTE_DIR/results/ From python-checkins at python.org Fri Mar 12 23:45:38 2010 From: python-checkins at python.org (ezio.melotti) Date: Fri, 12 Mar 2010 23:45:38 +0100 (CET) Subject: [Python-checkins] r78884 - python/branches/py3k/Doc/library/bz2.rst Message-ID: <20100312224538.C2636EEEA@mail.python.org> Author: ezio.melotti Date: Fri Mar 12 23:45:38 2010 New Revision: 78884 Log: #8057: fix strings -> byte strings Modified: python/branches/py3k/Doc/library/bz2.rst Modified: python/branches/py3k/Doc/library/bz2.rst ============================================================================== --- python/branches/py3k/Doc/library/bz2.rst (original) +++ python/branches/py3k/Doc/library/bz2.rst Fri Mar 12 23:45:38 2010 @@ -73,15 +73,16 @@ .. method:: read([size]) - Read at most *size* uncompressed bytes, returned as a string. If the + Read at most *size* uncompressed bytes, returned as a byte string. If the *size* argument is negative or omitted, read until EOF is reached. .. method:: readline([size]) - Return the next line from the file, as a string, retaining newline. A - non-negative *size* argument limits the maximum number of bytes to return - (an incomplete line may be returned then). Return an empty string at EOF. + Return the next line from the file, as a byte string, retaining newline. + A non-negative *size* argument limits the maximum number of bytes to + return (an incomplete line may be returned then). Return an empty byte + string at EOF. .. method:: readlines([size]) @@ -111,15 +112,16 @@ .. method:: write(data) - Write string *data* to file. Note that due to buffering, :meth:`close` may - be needed before the file on disk reflects the data written. + Write the byte string *data* to file. Note that due to buffering, + :meth:`close` may be needed before the file on disk reflects the data + written. - .. method:: writelines(sequence_of_strings) + .. method:: writelines(sequence_of_byte_strings) - Write the sequence of strings to the file. Note that newlines are not - added. The sequence can be any iterable object producing strings. This is - equivalent to calling write() for each string. + Write the sequence of byte strings to the file. Note that newlines are not + added. The sequence can be any iterable object producing byte strings. + This is equivalent to calling write() for each byte string. Sequential (de)compression From python-checkins at python.org Fri Mar 12 23:48:16 2010 From: python-checkins at python.org (ezio.melotti) Date: Fri, 12 Mar 2010 23:48:16 +0100 (CET) Subject: [Python-checkins] r78885 - in python/branches/release31-maint: Doc/library/bz2.rst Message-ID: <20100312224816.C2A34F654@mail.python.org> Author: ezio.melotti Date: Fri Mar 12 23:48:16 2010 New Revision: 78885 Log: Merged revisions 78884 via svnmerge from svn+ssh://pythondev at svn.python.org/python/branches/py3k ........ r78884 | ezio.melotti | 2010-03-13 00:45:38 +0200 (Sat, 13 Mar 2010) | 1 line #8057: fix strings -> byte strings ........ Modified: python/branches/release31-maint/ (props changed) python/branches/release31-maint/Doc/library/bz2.rst Modified: python/branches/release31-maint/Doc/library/bz2.rst ============================================================================== --- python/branches/release31-maint/Doc/library/bz2.rst (original) +++ python/branches/release31-maint/Doc/library/bz2.rst Fri Mar 12 23:48:16 2010 @@ -73,15 +73,16 @@ .. method:: read([size]) - Read at most *size* uncompressed bytes, returned as a string. If the + Read at most *size* uncompressed bytes, returned as a byte string. If the *size* argument is negative or omitted, read until EOF is reached. .. method:: readline([size]) - Return the next line from the file, as a string, retaining newline. A - non-negative *size* argument limits the maximum number of bytes to return - (an incomplete line may be returned then). Return an empty string at EOF. + Return the next line from the file, as a byte string, retaining newline. + A non-negative *size* argument limits the maximum number of bytes to + return (an incomplete line may be returned then). Return an empty byte + string at EOF. .. method:: readlines([size]) @@ -111,15 +112,16 @@ .. method:: write(data) - Write string *data* to file. Note that due to buffering, :meth:`close` may - be needed before the file on disk reflects the data written. + Write the byte string *data* to file. Note that due to buffering, + :meth:`close` may be needed before the file on disk reflects the data + written. - .. method:: writelines(sequence_of_strings) + .. method:: writelines(sequence_of_byte_strings) - Write the sequence of strings to the file. Note that newlines are not - added. The sequence can be any iterable object producing strings. This is - equivalent to calling write() for each string. + Write the sequence of byte strings to the file. Note that newlines are not + added. The sequence can be any iterable object producing byte strings. + This is equivalent to calling write() for each byte string. Sequential (de)compression From solipsis at pitrou.net Sat Mar 13 01:03:46 2010 From: solipsis at pitrou.net (solipsis at pitrou.net) Date: Sat, 13 Mar 2010 01:03:46 +0100 (CET) Subject: [Python-checkins] Daily py3k reference leaks (r78882): sum=0 Message-ID: <20100313000346.176411770B@ns6635.ovh.net> py3k results for svn r78882 (hg cset bbc5dce95f9b) -------------------------------------------------- Command line was: ['./python', '-m', 'test.regrtest', '-uall', '-R', '3:3:/home/antoine/py3k/refleaks/reflogoa7w2O', '-x', 'test_httpservers'] From python-checkins at python.org Sat Mar 13 01:13:22 2010 From: python-checkins at python.org (victor.stinner) Date: Sat, 13 Mar 2010 01:13:22 +0100 (CET) Subject: [Python-checkins] r78886 - in python/trunk: Lib/test/test_set.py Objects/setobject.c Message-ID: <20100313001322.7EF1AF647@mail.python.org> Author: victor.stinner Date: Sat Mar 13 01:13:22 2010 New Revision: 78886 Log: Issue #7818: set().test_c_api() doesn't expect a set('abc'), modify the set. Modified: python/trunk/Lib/test/test_set.py python/trunk/Objects/setobject.c Modified: python/trunk/Lib/test/test_set.py ============================================================================== --- python/trunk/Lib/test/test_set.py (original) +++ python/trunk/Lib/test/test_set.py Sat Mar 13 01:13:22 2010 @@ -562,7 +562,7 @@ # C API test only available in a debug build if hasattr(set, "test_c_api"): def test_c_api(self): - self.assertEqual(set('abc').test_c_api(), True) + self.assertEqual(set().test_c_api(), True) class SetSubclass(set): pass Modified: python/trunk/Objects/setobject.c ============================================================================== --- python/trunk/Objects/setobject.c (original) +++ python/trunk/Objects/setobject.c Sat Mar 13 01:13:22 2010 @@ -2387,11 +2387,25 @@ Py_ssize_t i; PyObject *elem=NULL, *dup=NULL, *t, *f, *dup2, *x; PyObject *ob = (PyObject *)so; + PyObject *str; - /* Verify preconditions and exercise type/size checks */ + /* Verify preconditions */ assert(PyAnySet_Check(ob)); assert(PyAnySet_CheckExact(ob)); assert(!PyFrozenSet_CheckExact(ob)); + + /* so.clear(); so |= set("abc"); */ + str = PyString_FromString("abc"); + if (str == NULL) + return NULL; + set_clear_internal(so); + if (set_update_internal(so, str) == -1) { + Py_DECREF(str); + return NULL; + } + Py_DECREF(str); + + /* Exercise type/size checks */ assert(PySet_Size(ob) == 3); assert(PySet_GET_SIZE(ob) == 3); From python-checkins at python.org Sat Mar 13 01:15:36 2010 From: python-checkins at python.org (ezio.melotti) Date: Sat, 13 Mar 2010 01:15:36 +0100 (CET) Subject: [Python-checkins] r78887 - python/trunk/Doc/library/bz2.rst Message-ID: <20100313001536.27677F654@mail.python.org> Author: ezio.melotti Date: Sat Mar 13 01:15:36 2010 New Revision: 78887 Log: fix broken links Modified: python/trunk/Doc/library/bz2.rst Modified: python/trunk/Doc/library/bz2.rst ============================================================================== --- python/trunk/Doc/library/bz2.rst (original) +++ python/trunk/Doc/library/bz2.rst Sat Mar 13 01:15:36 2010 @@ -20,9 +20,10 @@ Here is a summary of the features offered by the bz2 module: * :class:`BZ2File` class implements a complete file interface, including - :meth:`readline`, :meth:`readlines`, :meth:`writelines`, :meth:`seek`, etc; + :meth:`~BZ2File.readline`, :meth:`~BZ2File.readlines`, + :meth:`~BZ2File.writelines`, :meth:`~BZ2File.seek`, etc; -* :class:`BZ2File` class implements emulated :meth:`seek` support; +* :class:`BZ2File` class implements emulated :meth:`~BZ2File.seek` support; * :class:`BZ2File` class implements universal newline support; From python-checkins at python.org Sat Mar 13 01:19:17 2010 From: python-checkins at python.org (victor.stinner) Date: Sat, 13 Mar 2010 01:19:17 +0100 (CET) Subject: [Python-checkins] r78888 - in python/branches/py3k: Lib/test/test_set.py Objects/setobject.c Message-ID: <20100313001917.9B99DF654@mail.python.org> Author: victor.stinner Date: Sat Mar 13 01:19:17 2010 New Revision: 78888 Log: Merged revisions 78886 via svnmerge from svn+ssh://pythondev at svn.python.org/python/trunk ........ r78886 | victor.stinner | 2010-03-13 01:13:22 +0100 (sam., 13 mars 2010) | 2 lines Issue #7818: set().test_c_api() doesn't expect a set('abc'), modify the set. ........ Modified: python/branches/py3k/ (props changed) python/branches/py3k/Lib/test/test_set.py python/branches/py3k/Objects/setobject.c Modified: python/branches/py3k/Lib/test/test_set.py ============================================================================== --- python/branches/py3k/Lib/test/test_set.py (original) +++ python/branches/py3k/Lib/test/test_set.py Sat Mar 13 01:19:17 2010 @@ -607,7 +607,7 @@ # C API test only available in a debug build if hasattr(set, "test_c_api"): def test_c_api(self): - self.assertEqual(set('abc').test_c_api(), True) + self.assertEqual(set().test_c_api(), True) class SetSubclass(set): pass Modified: python/branches/py3k/Objects/setobject.c ============================================================================== --- python/branches/py3k/Objects/setobject.c (original) +++ python/branches/py3k/Objects/setobject.c Sat Mar 13 01:19:17 2010 @@ -2360,11 +2360,25 @@ PyObject *elem=NULL, *dup=NULL, *t, *f, *dup2, *x; PyObject *ob = (PyObject *)so; long hash; + PyObject *str; - /* Verify preconditions and exercise type/size checks */ + /* Verify preconditions */ assert(PyAnySet_Check(ob)); assert(PyAnySet_CheckExact(ob)); assert(!PyFrozenSet_CheckExact(ob)); + + /* so.clear(); so |= set("abc"); */ + str = PyUnicode_FromString("abc"); + if (str == NULL) + return NULL; + set_clear_internal(so); + if (set_update_internal(so, str) == -1) { + Py_DECREF(str); + return NULL; + } + Py_DECREF(str); + + /* Exercise type/size checks */ assert(PySet_Size(ob) == 3); assert(PySet_GET_SIZE(ob) == 3); From python-checkins at python.org Sat Mar 13 01:22:37 2010 From: python-checkins at python.org (victor.stinner) Date: Sat, 13 Mar 2010 01:22:37 +0100 (CET) Subject: [Python-checkins] r78889 - python/branches/release26-maint Message-ID: <20100313002237.3A539E1F5@mail.python.org> Author: victor.stinner Date: Sat Mar 13 01:22:37 2010 New Revision: 78889 Log: Blocked revisions 78886 via svnmerge ........ r78886 | victor.stinner | 2010-03-13 01:13:22 +0100 (sam., 13 mars 2010) | 2 lines Issue #7818: set().test_c_api() doesn't expect a set('abc'), modify the set. ........ Modified: python/branches/release26-maint/ (props changed) From python-checkins at python.org Sat Mar 13 01:23:46 2010 From: python-checkins at python.org (victor.stinner) Date: Sat, 13 Mar 2010 01:23:46 +0100 (CET) Subject: [Python-checkins] r78890 - python/branches/release31-maint Message-ID: <20100313002346.CAF9FF7BB@mail.python.org> Author: victor.stinner Date: Sat Mar 13 01:23:46 2010 New Revision: 78890 Log: Blocked revisions 78888 via svnmerge ................ r78888 | victor.stinner | 2010-03-13 01:19:17 +0100 (sam., 13 mars 2010) | 9 lines Merged revisions 78886 via svnmerge from svn+ssh://pythondev at svn.python.org/python/trunk ........ r78886 | victor.stinner | 2010-03-13 01:13:22 +0100 (sam., 13 mars 2010) | 2 lines Issue #7818: set().test_c_api() doesn't expect a set('abc'), modify the set. ........ ................ Modified: python/branches/release31-maint/ (props changed) From python-checkins at python.org Sat Mar 13 01:26:04 2010 From: python-checkins at python.org (ezio.melotti) Date: Sat, 13 Mar 2010 01:26:04 +0100 (CET) Subject: [Python-checkins] r78891 - in python/branches/py3k: Doc/library/bz2.rst Message-ID: <20100313002604.A805BE0AB@mail.python.org> Author: ezio.melotti Date: Sat Mar 13 01:26:04 2010 New Revision: 78891 Log: Merged revisions 78887 via svnmerge from svn+ssh://pythondev at svn.python.org/python/trunk ........ r78887 | ezio.melotti | 2010-03-13 02:15:36 +0200 (Sat, 13 Mar 2010) | 1 line fix broken links ........ Modified: python/branches/py3k/ (props changed) python/branches/py3k/Doc/library/bz2.rst Modified: python/branches/py3k/Doc/library/bz2.rst ============================================================================== --- python/branches/py3k/Doc/library/bz2.rst (original) +++ python/branches/py3k/Doc/library/bz2.rst Sat Mar 13 01:26:04 2010 @@ -18,9 +18,10 @@ Here is a summary of the features offered by the bz2 module: * :class:`BZ2File` class implements a complete file interface, including - :meth:`readline`, :meth:`readlines`, :meth:`writelines`, :meth:`seek`, etc; + :meth:`~BZ2File.readline`, :meth:`~BZ2File.readlines`, + :meth:`~BZ2File.writelines`, :meth:`~BZ2File.seek`, etc; -* :class:`BZ2File` class implements emulated :meth:`seek` support; +* :class:`BZ2File` class implements emulated :meth:`~BZ2File.seek` support; * :class:`BZ2File` class implements universal newline support; From python-checkins at python.org Sat Mar 13 01:27:49 2010 From: python-checkins at python.org (ezio.melotti) Date: Sat, 13 Mar 2010 01:27:49 +0100 (CET) Subject: [Python-checkins] r78892 - in python/branches/release31-maint: Doc/library/bz2.rst Message-ID: <20100313002749.0C39FD3D8@mail.python.org> Author: ezio.melotti Date: Sat Mar 13 01:27:48 2010 New Revision: 78892 Log: Merged revisions 78891 via svnmerge from svn+ssh://pythondev at svn.python.org/python/branches/py3k ................ r78891 | ezio.melotti | 2010-03-13 02:26:04 +0200 (Sat, 13 Mar 2010) | 9 lines Merged revisions 78887 via svnmerge from svn+ssh://pythondev at svn.python.org/python/trunk ........ r78887 | ezio.melotti | 2010-03-13 02:15:36 +0200 (Sat, 13 Mar 2010) | 1 line fix broken links ........ ................ Modified: python/branches/release31-maint/ (props changed) python/branches/release31-maint/Doc/library/bz2.rst Modified: python/branches/release31-maint/Doc/library/bz2.rst ============================================================================== --- python/branches/release31-maint/Doc/library/bz2.rst (original) +++ python/branches/release31-maint/Doc/library/bz2.rst Sat Mar 13 01:27:48 2010 @@ -18,9 +18,10 @@ Here is a summary of the features offered by the bz2 module: * :class:`BZ2File` class implements a complete file interface, including - :meth:`readline`, :meth:`readlines`, :meth:`writelines`, :meth:`seek`, etc; + :meth:`~BZ2File.readline`, :meth:`~BZ2File.readlines`, + :meth:`~BZ2File.writelines`, :meth:`~BZ2File.seek`, etc; -* :class:`BZ2File` class implements emulated :meth:`seek` support; +* :class:`BZ2File` class implements emulated :meth:`~BZ2File.seek` support; * :class:`BZ2File` class implements universal newline support; From python-checkins at python.org Sat Mar 13 01:39:49 2010 From: python-checkins at python.org (ezio.melotti) Date: Sat, 13 Mar 2010 01:39:49 +0100 (CET) Subject: [Python-checkins] r78893 - in python/branches/py3k: Doc/whatsnew/2.7.rst Message-ID: <20100313003949.B52EFE060@mail.python.org> Author: ezio.melotti Date: Sat Mar 13 01:39:49 2010 New Revision: 78893 Log: Fix wrong indentation that was causing a Sphinx warning and a typo. Merged revisions 78112 via svnmerge from svn+ssh://pythondev at svn.python.org/python/trunk ........ r78112 | ezio.melotti | 2010-02-09 00:22:41 +0200 (Tue, 09 Feb 2010) | 1 line Fix typo ........ Modified: python/branches/py3k/ (props changed) python/branches/py3k/Doc/whatsnew/2.7.rst Modified: python/branches/py3k/Doc/whatsnew/2.7.rst ============================================================================== --- python/branches/py3k/Doc/whatsnew/2.7.rst (original) +++ python/branches/py3k/Doc/whatsnew/2.7.rst Sat Mar 13 01:39:49 2010 @@ -830,8 +830,8 @@ Light; :issue:`4285`.) :func:`sys.getwindowsversion` also returns a named tuple, - with attributes named :attr:`major`, :attr:`minor`, :attr:`build`, - :attr:`platform`:, :attr:`service_pack`, :attr:`service_pack_major`, + with attributes named :attr:`major`, :attr:`minor`, :attr:`build`, + :attr:`platform`, :attr:`service_pack`, :attr:`service_pack_major`, :attr:`service_pack_minor`, :attr:`suite_mask`, and :attr:`product_type`. (Contributed by Brian Curtin; :issue:`7766`.) From python-checkins at python.org Sat Mar 13 01:57:22 2010 From: python-checkins at python.org (victor.stinner) Date: Sat, 13 Mar 2010 01:57:22 +0100 (CET) Subject: [Python-checkins] r78894 - python/branches/py3k/Modules/_sqlite/connection.c Message-ID: <20100313005722.D32F0DF8A@mail.python.org> Author: victor.stinner Date: Sat Mar 13 01:57:22 2010 New Revision: 78894 Log: sqlite3: Fix _PyUnicode_AsStringAndSize() error handler. Destroy begin_statement (not statement) on error. Modified: python/branches/py3k/Modules/_sqlite/connection.c Modified: python/branches/py3k/Modules/_sqlite/connection.c ============================================================================== --- python/branches/py3k/Modules/_sqlite/connection.c (original) +++ python/branches/py3k/Modules/_sqlite/connection.c Sat Mar 13 01:57:22 2010 @@ -1087,7 +1087,7 @@ statement = _PyUnicode_AsStringAndSize(begin_statement, &size); if (!statement) { - Py_DECREF(statement); + Py_DECREF(begin_statement); return -1; } self->begin_statement = PyMem_Malloc(size + 2); From python-checkins at python.org Sat Mar 13 02:21:34 2010 From: python-checkins at python.org (ezio.melotti) Date: Sat, 13 Mar 2010 02:21:34 +0100 (CET) Subject: [Python-checkins] r78895 - python/trunk/Doc/library/traceback.rst Message-ID: <20100313012134.42290EA0D@mail.python.org> Author: ezio.melotti Date: Sat Mar 13 02:21:34 2010 New Revision: 78895 Log: #8011: use exc.tb_lineno instead of traceback.tb_lineno() and pep8ify variable names. Modified: python/trunk/Doc/library/traceback.rst Modified: python/trunk/Doc/library/traceback.rst ============================================================================== --- python/trunk/Doc/library/traceback.rst (original) +++ python/trunk/Doc/library/traceback.rst Sat Mar 13 02:21:34 2010 @@ -175,12 +175,12 @@ try: lumberjack() - except: - exceptionType, exceptionValue, exceptionTraceback = sys.exc_info() + except IndexError: + exc_type, exc_value, exc_traceback = sys.exc_info() print "*** print_tb:" - traceback.print_tb(exceptionTraceback, limit=1, file=sys.stdout) + traceback.print_tb(exc_traceback, limit=1, file=sys.stdout) print "*** print_exception:" - traceback.print_exception(exceptionType, exceptionValue, exceptionTraceback, + traceback.print_exception(exc_type, exc_value, exc_traceback, limit=2, file=sys.stdout) print "*** print_exc:" traceback.print_exc() @@ -189,13 +189,13 @@ print formatted_lines[0] print formatted_lines[-1] print "*** format_exception:" - print repr(traceback.format_exception(exceptionType, exceptionValue, - exceptionTraceback)) + print repr(traceback.format_exception(exc_type, exc_value, + exc_traceback)) print "*** extract_tb:" - print repr(traceback.extract_tb(exceptionTraceback)) + print repr(traceback.extract_tb(exc_traceback)) print "*** format_tb:" - print repr(traceback.format_tb(exceptionTraceback)) - print "*** tb_lineno:", traceback.tb_lineno(exceptionTraceback) + print repr(traceback.format_tb(exc_traceback)) + print "*** tb_lineno:", exc_traceback.tb_lineno The output for the example would look similar to this:: From python-checkins at python.org Sat Mar 13 02:28:34 2010 From: python-checkins at python.org (ezio.melotti) Date: Sat, 13 Mar 2010 02:28:34 +0100 (CET) Subject: [Python-checkins] r78896 - in python/branches/py3k: Doc/library/traceback.rst Message-ID: <20100313012834.A02C7DD87@mail.python.org> Author: ezio.melotti Date: Sat Mar 13 02:28:34 2010 New Revision: 78896 Log: Merged revisions 78895 via svnmerge from svn+ssh://pythondev at svn.python.org/python/trunk ........ r78895 | ezio.melotti | 2010-03-13 03:21:34 +0200 (Sat, 13 Mar 2010) | 1 line #8011: use exc.tb_lineno instead of traceback.tb_lineno() and pep8ify variable names. ........ Modified: python/branches/py3k/ (props changed) python/branches/py3k/Doc/library/traceback.rst Modified: python/branches/py3k/Doc/library/traceback.rst ============================================================================== --- python/branches/py3k/Doc/library/traceback.rst (original) +++ python/branches/py3k/Doc/library/traceback.rst Sat Mar 13 02:28:34 2010 @@ -172,12 +172,12 @@ try: lumberjack() - except: - exceptionType, exceptionValue, exceptionTraceback = sys.exc_info() + except IndexError: + exc_type, exc_value, exc_traceback = sys.exc_info() print("*** print_tb:") - traceback.print_tb(exceptionTraceback, limit=1, file=sys.stdout) + traceback.print_tb(exc_traceback, limit=1, file=sys.stdout) print("*** print_exception:") - traceback.print_exception(exceptionType, exceptionValue, exceptionTraceback, + traceback.print_exception(exc_type, exc_value, exc_traceback, limit=2, file=sys.stdout) print("*** print_exc:") traceback.print_exc() @@ -186,13 +186,13 @@ print(formatted_lines[0]) print(formatted_lines[-1]) print("*** format_exception:") - print(repr(traceback.format_exception(exceptionType, exceptionValue, - exceptionTraceback))) + print(repr(traceback.format_exception(exc_type, exc_value, + exc_traceback))) print("*** extract_tb:") - print(repr(traceback.extract_tb(exceptionTraceback))) + print(repr(traceback.extract_tb(exc_traceback))) print("*** format_tb:") - print(repr(traceback.format_tb(exceptionTraceback))) - print("*** tb_lineno:", traceback.tb_lineno(exceptionTraceback)) + print(repr(traceback.format_tb(exc_traceback))) + print("*** tb_lineno:", exc_traceback.tb_lineno) The output for the example would look similar to this: From python-checkins at python.org Sat Mar 13 02:30:13 2010 From: python-checkins at python.org (ezio.melotti) Date: Sat, 13 Mar 2010 02:30:13 +0100 (CET) Subject: [Python-checkins] r78897 - in python/branches/release31-maint: Doc/library/traceback.rst Message-ID: <20100313013013.820B5DD87@mail.python.org> Author: ezio.melotti Date: Sat Mar 13 02:30:13 2010 New Revision: 78897 Log: Merged revisions 78896 via svnmerge from svn+ssh://pythondev at svn.python.org/python/branches/py3k ................ r78896 | ezio.melotti | 2010-03-13 03:28:34 +0200 (Sat, 13 Mar 2010) | 9 lines Merged revisions 78895 via svnmerge from svn+ssh://pythondev at svn.python.org/python/trunk ........ r78895 | ezio.melotti | 2010-03-13 03:21:34 +0200 (Sat, 13 Mar 2010) | 1 line #8011: use exc.tb_lineno instead of traceback.tb_lineno() and pep8ify variable names. ........ ................ Modified: python/branches/release31-maint/ (props changed) python/branches/release31-maint/Doc/library/traceback.rst Modified: python/branches/release31-maint/Doc/library/traceback.rst ============================================================================== --- python/branches/release31-maint/Doc/library/traceback.rst (original) +++ python/branches/release31-maint/Doc/library/traceback.rst Sat Mar 13 02:30:13 2010 @@ -172,12 +172,12 @@ try: lumberjack() - except: - exceptionType, exceptionValue, exceptionTraceback = sys.exc_info() + except IndexError: + exc_type, exc_value, exc_traceback = sys.exc_info() print("*** print_tb:") - traceback.print_tb(exceptionTraceback, limit=1, file=sys.stdout) + traceback.print_tb(exc_traceback, limit=1, file=sys.stdout) print("*** print_exception:") - traceback.print_exception(exceptionType, exceptionValue, exceptionTraceback, + traceback.print_exception(exc_type, exc_value, exc_traceback, limit=2, file=sys.stdout) print("*** print_exc:") traceback.print_exc() @@ -186,13 +186,13 @@ print(formatted_lines[0]) print(formatted_lines[-1]) print("*** format_exception:") - print(repr(traceback.format_exception(exceptionType, exceptionValue, - exceptionTraceback))) + print(repr(traceback.format_exception(exc_type, exc_value, + exc_traceback))) print("*** extract_tb:") - print(repr(traceback.extract_tb(exceptionTraceback))) + print(repr(traceback.extract_tb(exc_traceback))) print("*** format_tb:") - print(repr(traceback.format_tb(exceptionTraceback))) - print("*** tb_lineno:", traceback.tb_lineno(exceptionTraceback)) + print(repr(traceback.format_tb(exc_traceback))) + print("*** tb_lineno:", exc_traceback.tb_lineno) The output for the example would look similar to this: From nnorwitz at gmail.com Sat Mar 13 02:36:44 2010 From: nnorwitz at gmail.com (Neal Norwitz) Date: Fri, 12 Mar 2010 20:36:44 -0500 Subject: [Python-checkins] Python Regression Test Failures all (2) Message-ID: <20100313013644.GA24172@kbk-i386-bb.psfb.org> 351 tests OK. 2 tests failed: test_xml_etree test_xml_etree_c 26 tests skipped: test_aepack test_al test_applesingle test_bsddb185 test_cd test_cl test_epoll test_gl test_imgfile test_ioctl test_kqueue test_macos test_macostools test_multiprocessing test_py3kwarn test_scriptpackages test_startfile test_sunaudiodev test_tcl test_tk test_ttk_guionly test_ttk_textonly test_unicode_file test_winreg test_winsound test_zipfile64 6 skips unexpected on linux2: test_multiprocessing test_ttk_guionly test_epoll test_tk test_ioctl test_ttk_textonly == CPython 2.7a4+ (trunk:78879M, Mar 12 2010, 16:01:51) [GCC 3.3.4 20040623 (Gentoo Linux 3.3.4-r1, ssp-3.3.2-2, pie-8.7.6)] == Linux-2.6.9-gentoo-r1-i686-AMD_Athlon-tm-_XP_3000+-with-gentoo-1.4.16 == /tmp/test_python_19955 test_grammar test_opcodes test_dict test_builtin test_exceptions test_types test_unittest test_doctest test_doctest2 test_MimeWriter test_SimpleHTTPServer test_StringIO test___all__ test___future__ test__locale test_abc test_abstract_numbers test_aepack test_aepack skipped -- No module named aetypes test_aifc test_al test_al skipped -- No module named al test_anydbm test_applesingle test_applesingle skipped -- No module named MacOS test_argparse test_array test_ascii_formatd test_ast test_asynchat test_asyncore test_atexit test_audioop test_augassign test_base64 test_bastion test_bigaddrspace test_bigmem test_binascii test_binhex test_binop test_bisect test_bool test_bsddb test_bsddb185 test_bsddb185 skipped -- No module named bsddb185 test_bsddb3 Sleepycat Software: Berkeley DB 4.1.25: (December 19, 2002) Test path prefix: /tmp/z-test_bsddb3-19955 test_buffer test_bufio test_bytes test_bz2 test_calendar test_call test_capi test_cd test_cd skipped -- No module named cd test_cfgparser test_cgi test_charmapcodec test_cl test_cl skipped -- No module named cl test_class test_cmath test_cmd test_cmd_line test_cmd_line_script test_code test_codeccallbacks test_codecencodings_cn test_codecencodings_hk test_codecencodings_jp test_codecencodings_kr test_codecencodings_tw test_codecmaps_cn test_codecmaps_hk test_codecmaps_jp test_codecmaps_kr test_codecmaps_tw test_codecs test_codeop test_coding test_coercion test_collections test_colorsys test_commands test_compare test_compile test_compileall test_compiler testCompileLibrary still working, be patient... test_complex test_complex_args test_contains test_contextlib test_cookie test_cookielib test_copy test_copy_reg test_cpickle test_cprofile test_crypt test_csv test_ctypes test_datetime test_dbm test_decimal test_decorators test_defaultdict test_deque test_descr test_descrtut test_dictcomps test_dictviews test_difflib test_dircache test_dis test_distutils [20620 refs] test_dl test_docxmlrpc test_dumbdbm test_dummy_thread test_dummy_threading test_email test_email_codecs test_email_renamed test_enumerate test_eof test_epoll test_epoll skipped -- kernel doesn't support epoll() test_errno test_exception_variations test_extcall test_fcntl test_file test_file2k test_filecmp test_fileinput test_fileio test_float test_fnmatch test_fork1 test_format test_fpformat test_fractions test_frozen test_ftplib test_funcattrs test_functools test_future test_future3 test_future4 test_future5 test_future_builtins test_gc test_gdbm test_generators test_genericpath test_genexps test_getargs test_getargs2 test_getopt test_gettext test_gl test_gl skipped -- No module named gl test_glob test_global test_grp test_gzip test_hash test_hashlib test_heapq test_hmac test_hotshot test_htmllib test_htmlparser test_httplib test_httpservers [16621 refs] [16621 refs] [16621 refs] [26870 refs] test_imageop test_imaplib test_imgfile test_imgfile skipped -- No module named imgfile test_imp test_import test_importhooks test_importlib test_index test_inspect test_int test_int_literal test_io test_ioctl test_ioctl skipped -- Unable to open /dev/tty test_isinstance test_iter test_iterlen test_itertools test_json test_kqueue test_kqueue skipped -- test works only on BSD test_largefile test_lib2to3 test_linecache test_list test_locale test_logging test_long test_long_future test_longexp test_macos test_macos skipped -- No module named MacOS test_macostools test_macostools skipped -- No module named MacOS test_macpath test_mailbox test_marshal test_math test_md5 test_memoryio test_memoryview test_mhlib test_mimetools test_mimetypes test_minidom test_mmap test_module test_modulefinder test_multibytecodec test_multibytecodec_support test_multifile test_multiprocessing test_multiprocessing skipped -- This platform lacks a functioning sem_open implementation, therefore, the required synchronization primitives needed will not function, see issue 3770. test_mutants test_mutex test_netrc test_new test_nis test_normalization test_ntpath test_old_mailbox test_openpty test_operator test_optparse test_os [16621 refs] [16621 refs] test_parser Expecting 's_push: parser stack overflow' in next line s_push: parser stack overflow test_pdb test_peepholer test_pep247 test_pep263 test_pep277 test_pep292 test_pep352 test_pickle test_pickletools test_pipes test_pkg test_pkgimport test_pkgutil test_platform [18017 refs] [18017 refs] test_plistlib test_poll test_popen [16626 refs] [16626 refs] [16626 refs] test_popen2 test_poplib test_posix test_posixpath test_pow test_pprint test_print test_profile test_profilehooks test_property test_pstats test_pty test_pwd test_py3kwarn test_py3kwarn skipped -- test.test_py3kwarn must be run with the -3 flag test_pyclbr test_pydoc [21734 refs] [21734 refs] [21734 refs] [21734 refs] [21734 refs] [21733 refs] [21733 refs] test_pyexpat test_queue test_quopri [19449 refs] [19449 refs] test_random test_re test_readline test_repr test_resource test_rfc822 test_richcmp test_robotparser test_runpy test_sax test_scope test_scriptpackages test_scriptpackages skipped -- No module named aetools test_select test_set test_setcomps test_sets test_sgmllib test_sha test_shelve test_shlex test_shutil test_signal test_site [16621 refs] [16621 refs] [16621 refs] [16621 refs] test_slice test_smtplib test_smtpnet test_socket test_socketserver test_softspace test_sort test_sqlite test_ssl test_startfile test_startfile skipped -- module os has no attribute startfile test_str test_strftime test_string test_stringprep test_strop test_strptime test_strtod test_struct test_structmembers test_structseq test_subprocess [16621 refs] [16621 refs] [16621 refs] [16621 refs] [16621 refs] [16621 refs] [16621 refs] [16621 refs] [16621 refs] [16621 refs] [16621 refs] [16621 refs] [16621 refs] [16621 refs] [16836 refs] [16621 refs] [16621 refs] [16621 refs] [16621 refs] [16621 refs] . [16621 refs] [16621 refs] this bit of output is from a test of stdout in a different process ... [16621 refs] [16621 refs] [16836 refs] [16621 refs] [16621 refs] [16621 refs] Traceback (most recent call last): File "", line 1, in KeyboardInterrupt [16621 refs] [16621 refs] [16621 refs] [16621 refs] [16621 refs] [16621 refs] [16621 refs] [16621 refs] [16621 refs] [16621 refs] [16621 refs] [16621 refs] [16621 refs] [16621 refs] [16621 refs] [16836 refs] [16621 refs] [16621 refs] [16621 refs] [16621 refs] [16621 refs] . [16621 refs] [16621 refs] this bit of output is from a test of stdout in a different process ... [16621 refs] [16621 refs] [16836 refs] test_sunaudiodev test_sunaudiodev skipped -- No module named sunaudiodev test_sundry test_symtable test_syntax test_sys [16621 refs] [16621 refs] [16621 refs] [16850 refs] [16644 refs] test_sysconfig [16621 refs] [16621 refs] test_tarfile test_tcl test_tcl skipped -- No module named _tkinter test_telnetlib test_tempfile [16621 refs] test_textwrap test_thread test_threaded_import test_threadedtempfile test_threading [19921 refs] [21092 refs] [20906 refs] [20906 refs] [20906 refs] [20906 refs] test_threading_local test_threadsignals test_time test_timeout test_tk test_tk skipped -- No module named _tkinter test_tokenize test_trace test_traceback test_transformer test_ttk_guionly test_ttk_guionly skipped -- No module named _tkinter test_ttk_textonly test_ttk_textonly skipped -- No module named _tkinter test_tuple test_typechecks test_ucn test_unary test_undocumented_details test_unicode test_unicode_file test_unicode_file skipped -- No Unicode filesystem semantics on this platform. test_unicodedata test_univnewlines test_univnewlines2k test_unpack test_urllib test_urllib2 test_urllib2_localnet test_urllib2net test_urllibnet test_urlparse test_userdict test_userlist test_userstring test_uu test_uuid WARNING: uuid.getnode is unreliable on many platforms. It is disabled until the code and/or test can be fixed properly. WARNING: uuid._ifconfig_getnode is unreliable on many platforms. It is disabled until the code and/or test can be fixed properly. WARNING: uuid._unixdll_getnode is unreliable on many platforms. It is disabled until the code and/or test can be fixed properly. test_wait3 test_wait4 test_warnings test_wave test_weakref test_whichdb test_winreg test_winreg skipped -- No module named _winreg test_winsound test_winsound skipped -- No module named winsound test_with test_wsgiref test_xdrlib test_xml_etree ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 770, in test.test_xml_etree.custom_builder Failed example: parser.feed(open("samples/simple.xml", "r").read()) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in parser.feed(open("samples/simple.xml", "r").read()) IOError: [Errno 2] No such file or directory: 'samples/simple.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 793, in test.test_xml_etree.custom_builder Failed example: parser.feed(open("samples/simple-ns.xml", "r").read()) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in parser.feed(open("samples/simple-ns.xml", "r").read()) IOError: [Errno 2] No such file or directory: 'samples/simple-ns.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 421, in test.test_xml_etree.file_init Failed example: tree = ET.ElementTree(file="samples/simple.xml") Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in tree = ET.ElementTree(file="samples/simple.xml") File "/tmp/python-test/local/lib/python2.7/xml/etree/ElementTree.py", line 611, in __init__ self.parse(file) File "/tmp/python-test/local/lib/python2.7/xml/etree/ElementTree.py", line 646, in parse source = open(source, "rb") IOError: [Errno 2] No such file or directory: 'samples/simple.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 422, in test.test_xml_etree.file_init Failed example: tree.find("element").tag Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in tree.find("element").tag AttributeError: 'NoneType' object has no attribute 'tag' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 424, in test.test_xml_etree.file_init Failed example: tree.find("element/../empty-element").tag Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in tree.find("element/../empty-element").tag AttributeError: 'NoneType' object has no attribute 'tag' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 811, in test.test_xml_etree.getchildren Failed example: tree = ET.parse(open("samples/simple.xml", "r")) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in tree = ET.parse(open("samples/simple.xml", "r")) IOError: [Errno 2] No such file or directory: 'samples/simple.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 812, in test.test_xml_etree.getchildren Failed example: for elem in tree.getroot().iter(): summarize_list(elem.getchildren()) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in for elem in tree.getroot().iter(): NameError: name 'tree' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 818, in test.test_xml_etree.getchildren Failed example: for elem in tree.getiterator(): summarize_list(elem.getchildren()) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in for elem in tree.getiterator(): NameError: name 'tree' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 647, in test.test_xml_etree.iterparse Failed example: context = iterparse("samples/simple.xml") Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in context = iterparse("samples/simple.xml") File "/tmp/python-test/local/lib/python2.7/xml/etree/ElementTree.py", line 1192, in iterparse source = open(source, "rb") IOError: [Errno 2] No such file or directory: 'samples/simple.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 648, in test.test_xml_etree.iterparse Failed example: action, elem = next(context) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in action, elem = next(context) NameError: name 'context' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 649, in test.test_xml_etree.iterparse Failed example: print action, elem.tag Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in print action, elem.tag NameError: name 'action' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 651, in test.test_xml_etree.iterparse Failed example: for action, elem in context: print action, elem.tag Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in for action, elem in context: NameError: name 'context' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 656, in test.test_xml_etree.iterparse Failed example: context.root.tag Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in context.root.tag NameError: name 'context' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 659, in test.test_xml_etree.iterparse Failed example: context = iterparse("samples/simple-ns.xml") Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in context = iterparse("samples/simple-ns.xml") File "/tmp/python-test/local/lib/python2.7/xml/etree/ElementTree.py", line 1192, in iterparse source = open(source, "rb") IOError: [Errno 2] No such file or directory: 'samples/simple-ns.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 660, in test.test_xml_etree.iterparse Failed example: for action, elem in context: print action, elem.tag Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in for action, elem in context: NameError: name 'context' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 668, in test.test_xml_etree.iterparse Failed example: context = iterparse("samples/simple.xml", events) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in context = iterparse("samples/simple.xml", events) File "/tmp/python-test/local/lib/python2.7/xml/etree/ElementTree.py", line 1192, in iterparse source = open(source, "rb") IOError: [Errno 2] No such file or directory: 'samples/simple.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 669, in test.test_xml_etree.iterparse Failed example: for action, elem in context: print action, elem.tag Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in for action, elem in context: NameError: name 'context' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 673, in test.test_xml_etree.iterparse Failed example: context = iterparse("samples/simple.xml", events=events) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in context = iterparse("samples/simple.xml", events=events) File "/tmp/python-test/local/lib/python2.7/xml/etree/ElementTree.py", line 1192, in iterparse source = open(source, "rb") IOError: [Errno 2] No such file or directory: 'samples/simple.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 674, in test.test_xml_etree.iterparse Failed example: for action, elem in context: print action, elem.tag Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in for action, elem in context: NameError: name 'context' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 678, in test.test_xml_etree.iterparse Failed example: context = iterparse("samples/simple.xml", events) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in context = iterparse("samples/simple.xml", events) File "/tmp/python-test/local/lib/python2.7/xml/etree/ElementTree.py", line 1192, in iterparse source = open(source, "rb") IOError: [Errno 2] No such file or directory: 'samples/simple.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 679, in test.test_xml_etree.iterparse Failed example: for action, elem in context: print action, elem.tag Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in for action, elem in context: NameError: name 'context' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 691, in test.test_xml_etree.iterparse Failed example: context = iterparse("samples/simple-ns.xml", events) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in context = iterparse("samples/simple-ns.xml", events) File "/tmp/python-test/local/lib/python2.7/xml/etree/ElementTree.py", line 1192, in iterparse source = open(source, "rb") IOError: [Errno 2] No such file or directory: 'samples/simple-ns.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 692, in test.test_xml_etree.iterparse Failed example: for action, elem in context: if action in ("start", "end"): print action, elem.tag else: print action, elem Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in for action, elem in context: NameError: name 'context' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 709, in test.test_xml_etree.iterparse Failed example: context = iterparse("samples/simple.xml", events) Expected: Traceback (most recent call last): ValueError: unknown event 'bogus' Got: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in context = iterparse("samples/simple.xml", events) File "/tmp/python-test/local/lib/python2.7/xml/etree/ElementTree.py", line 1192, in iterparse source = open(source, "rb") IOError: [Errno 2] No such file or directory: 'samples/simple.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 567, in test.test_xml_etree.parsefile Failed example: tree = ET.parse("samples/simple.xml") Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in tree = ET.parse("samples/simple.xml") File "/tmp/python-test/local/lib/python2.7/xml/etree/ElementTree.py", line 1176, in parse tree.parse(source, parser) File "/tmp/python-test/local/lib/python2.7/xml/etree/ElementTree.py", line 646, in parse source = open(source, "rb") IOError: [Errno 2] No such file or directory: 'samples/simple.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 568, in test.test_xml_etree.parsefile Failed example: normalize_crlf(tree) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in normalize_crlf(tree) NameError: name 'tree' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 569, in test.test_xml_etree.parsefile Failed example: tree.write(sys.stdout) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in tree.write(sys.stdout) NameError: name 'tree' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 575, in test.test_xml_etree.parsefile Failed example: tree = ET.parse("samples/simple-ns.xml") Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in tree = ET.parse("samples/simple-ns.xml") File "/tmp/python-test/local/lib/python2.7/xml/etree/ElementTree.py", line 1176, in parse tree.parse(source, parser) File "/tmp/python-test/local/lib/python2.7/xml/etree/ElementTree.py", line 646, in parse source = open(source, "rb") IOError: [Errno 2] No such file or directory: 'samples/simple-ns.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 576, in test.test_xml_etree.parsefile Failed example: normalize_crlf(tree) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in normalize_crlf(tree) NameError: name 'tree' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 577, in test.test_xml_etree.parsefile Failed example: tree.write(sys.stdout) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in tree.write(sys.stdout) NameError: name 'tree' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 587, in test.test_xml_etree.parsefile Failed example: parser.feed(open("samples/simple.xml").read()) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in parser.feed(open("samples/simple.xml").read()) IOError: [Errno 2] No such file or directory: 'samples/simple.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 588, in test.test_xml_etree.parsefile Failed example: print serialize(parser.close()) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in print serialize(parser.close()) File "/tmp/python-test/local/lib/python2.7/xml/etree/ElementTree.py", line 1635, in close self._raiseerror(v) File "/tmp/python-test/local/lib/python2.7/xml/etree/ElementTree.py", line 1487, in _raiseerror raise err ParseError: no element found: line 1, column 0 ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 596, in test.test_xml_etree.parsefile Failed example: parser.feed(open("samples/simple.xml").read()) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in parser.feed(open("samples/simple.xml").read()) IOError: [Errno 2] No such file or directory: 'samples/simple.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 597, in test.test_xml_etree.parsefile Failed example: print serialize(parser.close()) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in print serialize(parser.close()) File "/tmp/python-test/local/lib/python2.7/xml/etree/ElementTree.py", line 1635, in close self._raiseerror(v) File "/tmp/python-test/local/lib/python2.7/xml/etree/ElementTree.py", line 1487, in _raiseerror raise err ParseError: no element found: line 1, column 0 ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 606, in test.test_xml_etree.parsefile Failed example: parser.feed(open("samples/simple.xml").read()) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in parser.feed(open("samples/simple.xml").read()) IOError: [Errno 2] No such file or directory: 'samples/simple.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 607, in test.test_xml_etree.parsefile Failed example: print serialize(parser.close()) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in print serialize(parser.close()) File "/tmp/python-test/local/lib/python2.7/xml/etree/ElementTree.py", line 1635, in close self._raiseerror(v) File "/tmp/python-test/local/lib/python2.7/xml/etree/ElementTree.py", line 1487, in _raiseerror raise err ParseError: no element found: line 1, column 0 ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 1361, in test.test_xml_etree.xinclude_default Failed example: ElementInclude.include(document) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in ElementInclude.include(document) File "/tmp/python-test/local/lib/python2.7/xml/etree/ElementInclude.py", line 111, in include node = loader(href, parse) File "/tmp/python-test/local/lib/python2.7/xml/etree/ElementInclude.py", line 78, in default_loader file = open(href) IOError: [Errno 2] No such file or directory: 'samples/simple.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 1362, in test.test_xml_etree.xinclude_default Failed example: print serialize(document) # default Expected:

    Example.

    text texttail
    Got:

    Example.

    ********************************************************************** 6 items had failures: 2 of 8 in test.test_xml_etree.custom_builder 3 of 8 in test.test_xml_etree.file_init 3 of 19 in test.test_xml_etree.getchildren 16 of 29 in test.test_xml_etree.iterparse 12 of 17 in test.test_xml_etree.parsefile 2 of 4 in test.test_xml_etree.xinclude_default ***Test Failed*** 38 failures. test test_xml_etree failed -- 38 of 591 doctests failed Re-running test 'test_xml_etree' in verbose mode ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 770, in test.test_xml_etree.custom_builder Failed example: parser.feed(open("samples/simple.xml", "r").read()) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in parser.feed(open("samples/simple.xml", "r").read()) IOError: [Errno 2] No such file or directory: 'samples/simple.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 793, in test.test_xml_etree.custom_builder Failed example: parser.feed(open("samples/simple-ns.xml", "r").read()) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in parser.feed(open("samples/simple-ns.xml", "r").read()) IOError: [Errno 2] No such file or directory: 'samples/simple-ns.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 421, in test.test_xml_etree.file_init Failed example: tree = ET.ElementTree(file="samples/simple.xml") Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in tree = ET.ElementTree(file="samples/simple.xml") File "/tmp/python-test/local/lib/python2.7/xml/etree/ElementTree.py", line 611, in __init__ self.parse(file) File "/tmp/python-test/local/lib/python2.7/xml/etree/ElementTree.py", line 646, in parse source = open(source, "rb") IOError: [Errno 2] No such file or directory: 'samples/simple.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 422, in test.test_xml_etree.file_init Failed example: tree.find("element").tag Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in tree.find("element").tag AttributeError: 'NoneType' object has no attribute 'tag' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 424, in test.test_xml_etree.file_init Failed example: tree.find("element/../empty-element").tag Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in tree.find("element/../empty-element").tag AttributeError: 'NoneType' object has no attribute 'tag' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 811, in test.test_xml_etree.getchildren Failed example: tree = ET.parse(open("samples/simple.xml", "r")) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in tree = ET.parse(open("samples/simple.xml", "r")) IOError: [Errno 2] No such file or directory: 'samples/simple.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 812, in test.test_xml_etree.getchildren Failed example: for elem in tree.getroot().iter(): summarize_list(elem.getchildren()) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in for elem in tree.getroot().iter(): NameError: name 'tree' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 818, in test.test_xml_etree.getchildren Failed example: for elem in tree.getiterator(): summarize_list(elem.getchildren()) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in for elem in tree.getiterator(): NameError: name 'tree' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 647, in test.test_xml_etree.iterparse Failed example: context = iterparse("samples/simple.xml") Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in context = iterparse("samples/simple.xml") File "/tmp/python-test/local/lib/python2.7/xml/etree/ElementTree.py", line 1192, in iterparse source = open(source, "rb") IOError: [Errno 2] No such file or directory: 'samples/simple.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 648, in test.test_xml_etree.iterparse Failed example: action, elem = next(context) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in action, elem = next(context) NameError: name 'context' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 649, in test.test_xml_etree.iterparse Failed example: print action, elem.tag Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in print action, elem.tag NameError: name 'action' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 651, in test.test_xml_etree.iterparse Failed example: for action, elem in context: print action, elem.tag Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in for action, elem in context: NameError: name 'context' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 656, in test.test_xml_etree.iterparse Failed example: context.root.tag Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in context.root.tag NameError: name 'context' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 659, in test.test_xml_etree.iterparse Failed example: context = iterparse("samples/simple-ns.xml") Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in context = iterparse("samples/simple-ns.xml") File "/tmp/python-test/local/lib/python2.7/xml/etree/ElementTree.py", line 1192, in iterparse source = open(source, "rb") IOError: [Errno 2] No such file or directory: 'samples/simple-ns.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 660, in test.test_xml_etree.iterparse Failed example: for action, elem in context: print action, elem.tag Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in for action, elem in context: NameError: name 'context' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 668, in test.test_xml_etree.iterparse Failed example: context = iterparse("samples/simple.xml", events) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in context = iterparse("samples/simple.xml", events) File "/tmp/python-test/local/lib/python2.7/xml/etree/ElementTree.py", line 1192, in iterparse source = open(source, "rb") IOError: [Errno 2] No such file or directory: 'samples/simple.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 669, in test.test_xml_etree.iterparse Failed example: for action, elem in context: print action, elem.tag Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in for action, elem in context: NameError: name 'context' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 673, in test.test_xml_etree.iterparse Failed example: context = iterparse("samples/simple.xml", events=events) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in context = iterparse("samples/simple.xml", events=events) File "/tmp/python-test/local/lib/python2.7/xml/etree/ElementTree.py", line 1192, in iterparse source = open(source, "rb") IOError: [Errno 2] No such file or directory: 'samples/simple.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 674, in test.test_xml_etree.iterparse Failed example: for action, elem in context: print action, elem.tag Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in for action, elem in context: NameError: name 'context' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 678, in test.test_xml_etree.iterparse Failed example: context = iterparse("samples/simple.xml", events) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in context = iterparse("samples/simple.xml", events) File "/tmp/python-test/local/lib/python2.7/xml/etree/ElementTree.py", line 1192, in iterparse source = open(source, "rb") IOError: [Errno 2] No such file or directory: 'samples/simple.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 679, in test.test_xml_etree.iterparse Failed example: for action, elem in context: print action, elem.tag Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in for action, elem in context: NameError: name 'context' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 691, in test.test_xml_etree.iterparse Failed example: context = iterparse("samples/simple-ns.xml", events) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in context = iterparse("samples/simple-ns.xml", events) File "/tmp/python-test/local/lib/python2.7/xml/etree/ElementTree.py", line 1192, in iterparse source = open(source, "rb") IOError: [Errno 2] No such file or directory: 'samples/simple-ns.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 692, in test.test_xml_etree.iterparse Failed example: for action, elem in context: if action in ("start", "end"): print action, elem.tag else: print action, elem Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in for action, elem in context: NameError: name 'context' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 709, in test.test_xml_etree.iterparse Failed example: context = iterparse("samples/simple.xml", events) Expected: Traceback (most recent call last): ValueError: unknown event 'bogus' Got: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in context = iterparse("samples/simple.xml", events) File "/tmp/python-test/local/lib/python2.7/xml/etree/ElementTree.py", line 1192, in iterparse source = open(source, "rb") IOError: [Errno 2] No such file or directory: 'samples/simple.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 567, in test.test_xml_etree.parsefile Failed example: tree = ET.parse("samples/simple.xml") Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in tree = ET.parse("samples/simple.xml") File "/tmp/python-test/local/lib/python2.7/xml/etree/ElementTree.py", line 1176, in parse tree.parse(source, parser) File "/tmp/python-test/local/lib/python2.7/xml/etree/ElementTree.py", line 646, in parse source = open(source, "rb") IOError: [Errno 2] No such file or directory: 'samples/simple.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 568, in test.test_xml_etree.parsefile Failed example: normalize_crlf(tree) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in normalize_crlf(tree) NameError: name 'tree' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 569, in test.test_xml_etree.parsefile Failed example: tree.write(sys.stdout) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in tree.write(sys.stdout) NameError: name 'tree' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 575, in test.test_xml_etree.parsefile Failed example: tree = ET.parse("samples/simple-ns.xml") Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in tree = ET.parse("samples/simple-ns.xml") File "/tmp/python-test/local/lib/python2.7/xml/etree/ElementTree.py", line 1176, in parse tree.parse(source, parser) File "/tmp/python-test/local/lib/python2.7/xml/etree/ElementTree.py", line 646, in parse source = open(source, "rb") IOError: [Errno 2] No such file or directory: 'samples/simple-ns.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 576, in test.test_xml_etree.parsefile Failed example: normalize_crlf(tree) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in normalize_crlf(tree) NameError: name 'tree' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 577, in test.test_xml_etree.parsefile Failed example: tree.write(sys.stdout) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in tree.write(sys.stdout) NameError: name 'tree' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 587, in test.test_xml_etree.parsefile Failed example: parser.feed(open("samples/simple.xml").read()) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in parser.feed(open("samples/simple.xml").read()) IOError: [Errno 2] No such file or directory: 'samples/simple.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 588, in test.test_xml_etree.parsefile Failed example: print serialize(parser.close()) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in print serialize(parser.close()) File "/tmp/python-test/local/lib/python2.7/xml/etree/ElementTree.py", line 1635, in close self._raiseerror(v) File "/tmp/python-test/local/lib/python2.7/xml/etree/ElementTree.py", line 1487, in _raiseerror raise err ParseError: no element found: line 1, column 0 ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 596, in test.test_xml_etree.parsefile Failed example: parser.feed(open("samples/simple.xml").read()) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in parser.feed(open("samples/simple.xml").read()) IOError: [Errno 2] No such file or directory: 'samples/simple.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 597, in test.test_xml_etree.parsefile Failed example: print serialize(parser.close()) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in print serialize(parser.close()) File "/tmp/python-test/local/lib/python2.7/xml/etree/ElementTree.py", line 1635, in close self._raiseerror(v) File "/tmp/python-test/local/lib/python2.7/xml/etree/ElementTree.py", line 1487, in _raiseerror raise err ParseError: no element found: line 1, column 0 ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 606, in test.test_xml_etree.parsefile Failed example: parser.feed(open("samples/simple.xml").read()) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in parser.feed(open("samples/simple.xml").read()) IOError: [Errno 2] No such file or directory: 'samples/simple.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 607, in test.test_xml_etree.parsefile Failed example: print serialize(parser.close()) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in print serialize(parser.close()) File "/tmp/python-test/local/lib/python2.7/xml/etree/ElementTree.py", line 1635, in close self._raiseerror(v) File "/tmp/python-test/local/lib/python2.7/xml/etree/ElementTree.py", line 1487, in _raiseerror raise err ParseError: no element found: line 1, column 0 ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 1361, in test.test_xml_etree.xinclude_default Failed example: ElementInclude.include(document) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in ElementInclude.include(document) File "/tmp/python-test/local/lib/python2.7/xml/etree/ElementInclude.py", line 111, in include node = loader(href, parse) File "/tmp/python-test/local/lib/python2.7/xml/etree/ElementInclude.py", line 78, in default_loader file = open(href) IOError: [Errno 2] No such file or directory: 'samples/simple.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 1362, in test.test_xml_etree.xinclude_default Failed example: print serialize(document) # default Expected:

    Example.

    text texttail
    Got:

    Example.

    ********************************************************************** 6 items had failures: 2 of 8 in test.test_xml_etree.custom_builder 3 of 8 in test.test_xml_etree.file_init 3 of 19 in test.test_xml_etree.getchildren 16 of 29 in test.test_xml_etree.iterparse 12 of 17 in test.test_xml_etree.parsefile 2 of 4 in test.test_xml_etree.xinclude_default ***Test Failed*** 38 failures. test test_xml_etree failed -- 38 of 591 doctests failed test_xml_etree_c ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 770, in test.test_xml_etree.custom_builder Failed example: parser.feed(open("samples/simple.xml", "r").read()) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in parser.feed(open("samples/simple.xml", "r").read()) IOError: [Errno 2] No such file or directory: 'samples/simple.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 793, in test.test_xml_etree.custom_builder Failed example: parser.feed(open("samples/simple-ns.xml", "r").read()) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in parser.feed(open("samples/simple-ns.xml", "r").read()) IOError: [Errno 2] No such file or directory: 'samples/simple-ns.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 421, in test.test_xml_etree.file_init Failed example: tree = ET.ElementTree(file="samples/simple.xml") Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in tree = ET.ElementTree(file="samples/simple.xml") File "/tmp/python-test/local/lib/python2.7/xml/etree/ElementTree.py", line 611, in __init__ self.parse(file) File "", line 25, in parse IOError: [Errno 2] No such file or directory: 'samples/simple.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 422, in test.test_xml_etree.file_init Failed example: tree.find("element").tag Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in tree.find("element").tag AttributeError: 'NoneType' object has no attribute 'tag' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 424, in test.test_xml_etree.file_init Failed example: tree.find("element/../empty-element").tag Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in tree.find("element/../empty-element").tag AttributeError: 'NoneType' object has no attribute 'tag' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 811, in test.test_xml_etree.getchildren Failed example: tree = ET.parse(open("samples/simple.xml", "r")) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in tree = ET.parse(open("samples/simple.xml", "r")) IOError: [Errno 2] No such file or directory: 'samples/simple.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 812, in test.test_xml_etree.getchildren Failed example: for elem in tree.getroot().iter(): summarize_list(elem.getchildren()) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in for elem in tree.getroot().iter(): NameError: name 'tree' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 818, in test.test_xml_etree.getchildren Failed example: for elem in tree.getiterator(): summarize_list(elem.getchildren()) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in for elem in tree.getiterator(): NameError: name 'tree' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 647, in test.test_xml_etree.iterparse Failed example: context = iterparse("samples/simple.xml") Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in context = iterparse("samples/simple.xml") File "", line 63, in __init__ IOError: [Errno 2] No such file or directory: 'samples/simple.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 648, in test.test_xml_etree.iterparse Failed example: action, elem = next(context) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in action, elem = next(context) NameError: name 'context' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 649, in test.test_xml_etree.iterparse Failed example: print action, elem.tag Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in print action, elem.tag NameError: name 'action' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 651, in test.test_xml_etree.iterparse Failed example: for action, elem in context: print action, elem.tag Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in for action, elem in context: NameError: name 'context' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 656, in test.test_xml_etree.iterparse Failed example: context.root.tag Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in context.root.tag NameError: name 'context' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 659, in test.test_xml_etree.iterparse Failed example: context = iterparse("samples/simple-ns.xml") Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in context = iterparse("samples/simple-ns.xml") File "", line 63, in __init__ IOError: [Errno 2] No such file or directory: 'samples/simple-ns.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 660, in test.test_xml_etree.iterparse Failed example: for action, elem in context: print action, elem.tag Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in for action, elem in context: NameError: name 'context' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 668, in test.test_xml_etree.iterparse Failed example: context = iterparse("samples/simple.xml", events) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in context = iterparse("samples/simple.xml", events) File "", line 63, in __init__ IOError: [Errno 2] No such file or directory: 'samples/simple.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 669, in test.test_xml_etree.iterparse Failed example: for action, elem in context: print action, elem.tag Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in for action, elem in context: NameError: name 'context' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 673, in test.test_xml_etree.iterparse Failed example: context = iterparse("samples/simple.xml", events=events) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in context = iterparse("samples/simple.xml", events=events) File "", line 63, in __init__ IOError: [Errno 2] No such file or directory: 'samples/simple.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 674, in test.test_xml_etree.iterparse Failed example: for action, elem in context: print action, elem.tag Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in for action, elem in context: NameError: name 'context' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 678, in test.test_xml_etree.iterparse Failed example: context = iterparse("samples/simple.xml", events) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in context = iterparse("samples/simple.xml", events) File "", line 63, in __init__ IOError: [Errno 2] No such file or directory: 'samples/simple.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 679, in test.test_xml_etree.iterparse Failed example: for action, elem in context: print action, elem.tag Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in for action, elem in context: NameError: name 'context' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 691, in test.test_xml_etree.iterparse Failed example: context = iterparse("samples/simple-ns.xml", events) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in context = iterparse("samples/simple-ns.xml", events) File "", line 63, in __init__ IOError: [Errno 2] No such file or directory: 'samples/simple-ns.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 692, in test.test_xml_etree.iterparse Failed example: for action, elem in context: if action in ("start", "end"): print action, elem.tag else: print action, elem Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in for action, elem in context: NameError: name 'context' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 709, in test.test_xml_etree.iterparse Failed example: context = iterparse("samples/simple.xml", events) Expected: Traceback (most recent call last): ValueError: unknown event 'bogus' Got: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in context = iterparse("samples/simple.xml", events) File "", line 63, in __init__ IOError: [Errno 2] No such file or directory: 'samples/simple.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 567, in test.test_xml_etree.parsefile Failed example: tree = ET.parse("samples/simple.xml") Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in tree = ET.parse("samples/simple.xml") File "", line 56, in parse File "", line 25, in parse IOError: [Errno 2] No such file or directory: 'samples/simple.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 568, in test.test_xml_etree.parsefile Failed example: normalize_crlf(tree) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in normalize_crlf(tree) NameError: name 'tree' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 569, in test.test_xml_etree.parsefile Failed example: tree.write(sys.stdout) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in tree.write(sys.stdout) NameError: name 'tree' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 575, in test.test_xml_etree.parsefile Failed example: tree = ET.parse("samples/simple-ns.xml") Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in tree = ET.parse("samples/simple-ns.xml") File "", line 56, in parse File "", line 25, in parse IOError: [Errno 2] No such file or directory: 'samples/simple-ns.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 576, in test.test_xml_etree.parsefile Failed example: normalize_crlf(tree) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in normalize_crlf(tree) NameError: name 'tree' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 577, in test.test_xml_etree.parsefile Failed example: tree.write(sys.stdout) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in tree.write(sys.stdout) NameError: name 'tree' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 587, in test.test_xml_etree.parsefile Failed example: parser.feed(open("samples/simple.xml").read()) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in parser.feed(open("samples/simple.xml").read()) IOError: [Errno 2] No such file or directory: 'samples/simple.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 588, in test.test_xml_etree.parsefile Failed example: print serialize(parser.close()) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in print serialize(parser.close()) ParseError: no element found: line 1, column 0 ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 596, in test.test_xml_etree.parsefile Failed example: parser.feed(open("samples/simple.xml").read()) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in parser.feed(open("samples/simple.xml").read()) IOError: [Errno 2] No such file or directory: 'samples/simple.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 597, in test.test_xml_etree.parsefile Failed example: print serialize(parser.close()) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in print serialize(parser.close()) ParseError: no element found: line 1, column 0 ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 606, in test.test_xml_etree.parsefile Failed example: parser.feed(open("samples/simple.xml").read()) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in parser.feed(open("samples/simple.xml").read()) IOError: [Errno 2] No such file or directory: 'samples/simple.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 607, in test.test_xml_etree.parsefile Failed example: print serialize(parser.close()) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in print serialize(parser.close()) ParseError: no element found: line 1, column 0 ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 1361, in test.test_xml_etree.xinclude_default Failed example: ElementInclude.include(document) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in ElementInclude.include(document) File "/tmp/python-test/local/lib/python2.7/xml/etree/ElementInclude.py", line 111, in include node = loader(href, parse) File "/tmp/python-test/local/lib/python2.7/xml/etree/ElementInclude.py", line 78, in default_loader file = open(href) IOError: [Errno 2] No such file or directory: 'samples/simple.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 1362, in test.test_xml_etree.xinclude_default Failed example: print serialize(document) # default Expected:

    Example.

    text texttail
    Got:

    Example.

    ********************************************************************** 6 items had failures: 2 of 8 in test.test_xml_etree.custom_builder 3 of 8 in test.test_xml_etree.file_init 3 of 19 in test.test_xml_etree.getchildren 16 of 29 in test.test_xml_etree.iterparse 12 of 17 in test.test_xml_etree.parsefile 2 of 4 in test.test_xml_etree.xinclude_default ***Test Failed*** 38 failures. test test_xml_etree_c failed -- 38 of 591 doctests failed Re-running test 'test_xml_etree_c' in verbose mode doctest (test.test_xml_etree_c) ... 1 tests with zero failures ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 770, in test.test_xml_etree.custom_builder Failed example: parser.feed(open("samples/simple.xml", "r").read()) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in parser.feed(open("samples/simple.xml", "r").read()) IOError: [Errno 2] No such file or directory: 'samples/simple.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 793, in test.test_xml_etree.custom_builder Failed example: parser.feed(open("samples/simple-ns.xml", "r").read()) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in parser.feed(open("samples/simple-ns.xml", "r").read()) IOError: [Errno 2] No such file or directory: 'samples/simple-ns.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 421, in test.test_xml_etree.file_init Failed example: tree = ET.ElementTree(file="samples/simple.xml") Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in tree = ET.ElementTree(file="samples/simple.xml") File "/tmp/python-test/local/lib/python2.7/xml/etree/ElementTree.py", line 611, in __init__ self.parse(file) File "", line 25, in parse IOError: [Errno 2] No such file or directory: 'samples/simple.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 422, in test.test_xml_etree.file_init Failed example: tree.find("element").tag Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in tree.find("element").tag AttributeError: 'NoneType' object has no attribute 'tag' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 424, in test.test_xml_etree.file_init Failed example: tree.find("element/../empty-element").tag Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in tree.find("element/../empty-element").tag AttributeError: 'NoneType' object has no attribute 'tag' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 811, in test.test_xml_etree.getchildren Failed example: tree = ET.parse(open("samples/simple.xml", "r")) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in tree = ET.parse(open("samples/simple.xml", "r")) IOError: [Errno 2] No such file or directory: 'samples/simple.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 812, in test.test_xml_etree.getchildren Failed example: for elem in tree.getroot().iter(): summarize_list(elem.getchildren()) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in for elem in tree.getroot().iter(): NameError: name 'tree' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 818, in test.test_xml_etree.getchildren Failed example: for elem in tree.getiterator(): summarize_list(elem.getchildren()) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in for elem in tree.getiterator(): NameError: name 'tree' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 647, in test.test_xml_etree.iterparse Failed example: context = iterparse("samples/simple.xml") Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in context = iterparse("samples/simple.xml") File "", line 63, in __init__ IOError: [Errno 2] No such file or directory: 'samples/simple.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 648, in test.test_xml_etree.iterparse Failed example: action, elem = next(context) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in action, elem = next(context) NameError: name 'context' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 649, in test.test_xml_etree.iterparse Failed example: print action, elem.tag Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in print action, elem.tag NameError: name 'action' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 651, in test.test_xml_etree.iterparse Failed example: for action, elem in context: print action, elem.tag Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in for action, elem in context: NameError: name 'context' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 656, in test.test_xml_etree.iterparse Failed example: context.root.tag Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in context.root.tag NameError: name 'context' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 659, in test.test_xml_etree.iterparse Failed example: context = iterparse("samples/simple-ns.xml") Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in context = iterparse("samples/simple-ns.xml") File "", line 63, in __init__ IOError: [Errno 2] No such file or directory: 'samples/simple-ns.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 660, in test.test_xml_etree.iterparse Failed example: for action, elem in context: print action, elem.tag Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in for action, elem in context: NameError: name 'context' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 668, in test.test_xml_etree.iterparse Failed example: context = iterparse("samples/simple.xml", events) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in context = iterparse("samples/simple.xml", events) File "", line 63, in __init__ IOError: [Errno 2] No such file or directory: 'samples/simple.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 669, in test.test_xml_etree.iterparse Failed example: for action, elem in context: print action, elem.tag Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in for action, elem in context: NameError: name 'context' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 673, in test.test_xml_etree.iterparse Failed example: context = iterparse("samples/simple.xml", events=events) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in context = iterparse("samples/simple.xml", events=events) File "", line 63, in __init__ IOError: [Errno 2] No such file or directory: 'samples/simple.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 674, in test.test_xml_etree.iterparse Failed example: for action, elem in context: print action, elem.tag Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in for action, elem in context: NameError: name 'context' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 678, in test.test_xml_etree.iterparse Failed example: context = iterparse("samples/simple.xml", events) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in context = iterparse("samples/simple.xml", events) File "", line 63, in __init__ IOError: [Errno 2] No such file or directory: 'samples/simple.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 679, in test.test_xml_etree.iterparse Failed example: for action, elem in context: print action, elem.tag Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in for action, elem in context: NameError: name 'context' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 691, in test.test_xml_etree.iterparse Failed example: context = iterparse("samples/simple-ns.xml", events) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in context = iterparse("samples/simple-ns.xml", events) File "", line 63, in __init__ IOError: [Errno 2] No such file or directory: 'samples/simple-ns.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 692, in test.test_xml_etree.iterparse Failed example: for action, elem in context: if action in ("start", "end"): print action, elem.tag else: print action, elem Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in for action, elem in context: NameError: name 'context' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 709, in test.test_xml_etree.iterparse Failed example: context = iterparse("samples/simple.xml", events) Expected: Traceback (most recent call last): ValueError: unknown event 'bogus' Got: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in context = iterparse("samples/simple.xml", events) File "", line 63, in __init__ IOError: [Errno 2] No such file or directory: 'samples/simple.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 567, in test.test_xml_etree.parsefile Failed example: tree = ET.parse("samples/simple.xml") Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in tree = ET.parse("samples/simple.xml") File "", line 56, in parse File "", line 25, in parse IOError: [Errno 2] No such file or directory: 'samples/simple.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 568, in test.test_xml_etree.parsefile Failed example: normalize_crlf(tree) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in normalize_crlf(tree) NameError: name 'tree' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 569, in test.test_xml_etree.parsefile Failed example: tree.write(sys.stdout) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in tree.write(sys.stdout) NameError: name 'tree' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 575, in test.test_xml_etree.parsefile Failed example: tree = ET.parse("samples/simple-ns.xml") Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in tree = ET.parse("samples/simple-ns.xml") File "", line 56, in parse File "", line 25, in parse IOError: [Errno 2] No such file or directory: 'samples/simple-ns.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 576, in test.test_xml_etree.parsefile Failed example: normalize_crlf(tree) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in normalize_crlf(tree) NameError: name 'tree' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 577, in test.test_xml_etree.parsefile Failed example: tree.write(sys.stdout) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in tree.write(sys.stdout) NameError: name 'tree' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 587, in test.test_xml_etree.parsefile Failed example: parser.feed(open("samples/simple.xml").read()) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in parser.feed(open("samples/simple.xml").read()) IOError: [Errno 2] No such file or directory: 'samples/simple.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 588, in test.test_xml_etree.parsefile Failed example: print serialize(parser.close()) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in print serialize(parser.close()) ParseError: no element found: line 1, column 0 ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 596, in test.test_xml_etree.parsefile Failed example: parser.feed(open("samples/simple.xml").read()) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in parser.feed(open("samples/simple.xml").read()) IOError: [Errno 2] No such file or directory: 'samples/simple.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 597, in test.test_xml_etree.parsefile Failed example: print serialize(parser.close()) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in print serialize(parser.close()) ParseError: no element found: line 1, column 0 ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 606, in test.test_xml_etree.parsefile Failed example: parser.feed(open("samples/simple.xml").read()) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in parser.feed(open("samples/simple.xml").read()) IOError: [Errno 2] No such file or directory: 'samples/simple.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 607, in test.test_xml_etree.parsefile Failed example: print serialize(parser.close()) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in print serialize(parser.close()) ParseError: no element found: line 1, column 0 ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 1361, in test.test_xml_etree.xinclude_default Failed example: ElementInclude.include(document) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in ElementInclude.include(document) File "/tmp/python-test/local/lib/python2.7/xml/etree/ElementInclude.py", line 111, in include node = loader(href, parse) File "/tmp/python-test/local/lib/python2.7/xml/etree/ElementInclude.py", line 78, in default_loader file = open(href) IOError: [Errno 2] No such file or directory: 'samples/simple.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 1362, in test.test_xml_etree.xinclude_default Failed example: print serialize(document) # default Expected:

    Example.

    text texttail
    Got:

    Example.

    ********************************************************************** 6 items had failures: 2 of 8 in test.test_xml_etree.custom_builder 3 of 8 in test.test_xml_etree.file_init 3 of 19 in test.test_xml_etree.getchildren 16 of 29 in test.test_xml_etree.iterparse 12 of 17 in test.test_xml_etree.parsefile 2 of 4 in test.test_xml_etree.xinclude_default ***Test Failed*** 38 failures. test test_xml_etree_c failed -- 38 of 591 doctests failed test_xmllib test_xmlrpc test_xpickle sh: line 1: python2.4: command not found sh: line 1: python2.6: command not found test_xrange test_zipfile test_zipfile64 test_zipfile64 skipped -- test requires loads of disk-space bytes and a long time to run test_zipimport test_zipimport_support test_zlib 351 tests OK. 2 tests failed: test_xml_etree test_xml_etree_c 26 tests skipped: test_aepack test_al test_applesingle test_bsddb185 test_cd test_cl test_epoll test_gl test_imgfile test_ioctl test_kqueue test_macos test_macostools test_multiprocessing test_py3kwarn test_scriptpackages test_startfile test_sunaudiodev test_tcl test_tk test_ttk_guionly test_ttk_textonly test_unicode_file test_winreg test_winsound test_zipfile64 6 skips unexpected on linux2: test_multiprocessing test_ttk_guionly test_epoll test_tk test_ioctl test_ttk_textonly [963439 refs] From python-checkins at python.org Sat Mar 13 04:27:07 2010 From: python-checkins at python.org (victor.stinner) Date: Sat, 13 Mar 2010 04:27:07 +0100 (CET) Subject: [Python-checkins] r78898 - in python/trunk: Lib/sqlite3/test/regression.py Modules/_sqlite/connection.c Message-ID: <20100313032707.56738E44A@mail.python.org> Author: victor.stinner Date: Sat Mar 13 04:27:07 2010 New Revision: 78898 Log: sqlite3: Fix a segfault on calling a connection with something else than a string. Initialize all attributes to be able to call the statement destructor on error. Avoid also a duplicate connection in some tests: setUp() does already open a connection (":memory:"). Modified: python/trunk/Lib/sqlite3/test/regression.py python/trunk/Modules/_sqlite/connection.c Modified: python/trunk/Lib/sqlite3/test/regression.py ============================================================================== --- python/trunk/Lib/sqlite3/test/regression.py (original) +++ python/trunk/Lib/sqlite3/test/regression.py Sat Mar 13 04:27:07 2010 @@ -232,8 +232,7 @@ Verifies that running a PRAGMA statement that does an autocommit does work. This did not work in 2.5.3/2.5.4. """ - con = sqlite.connect(":memory:") - cur = con.cursor() + cur = self.con.cursor() cur.execute("create table foo(bar)") cur.execute("insert into foo(bar) values (5)") @@ -253,11 +252,17 @@ def __hash__(self): raise TypeError() var = NotHashable() - con = sqlite.connect(":memory:") - self.assertRaises(TypeError, con.create_function, var) - self.assertRaises(TypeError, con.create_aggregate, var) - self.assertRaises(TypeError, con.set_authorizer, var) - self.assertRaises(TypeError, con.set_progress_handler, var) + self.assertRaises(TypeError, self.con.create_function, var) + self.assertRaises(TypeError, self.con.create_aggregate, var) + self.assertRaises(TypeError, self.con.set_authorizer, var) + self.assertRaises(TypeError, self.con.set_progress_handler, var) + + def CheckConnectionCall(self): + """ + Call a connection with a non-string SQL request: check error handling + of the statement constructor. + """ + self.assertRaises(sqlite.Warning, self.con, 1) def suite(): regression_suite = unittest.makeSuite(RegressionTests, "Check") Modified: python/trunk/Modules/_sqlite/connection.c ============================================================================== --- python/trunk/Modules/_sqlite/connection.c (original) +++ python/trunk/Modules/_sqlite/connection.c Sat Mar 13 04:27:07 2010 @@ -1197,6 +1197,12 @@ return NULL; } + statement->db = NULL; + statement->st = NULL; + statement->sql = NULL; + statement->in_use = 0; + statement->in_weakreflist = NULL; + rc = pysqlite_statement_create(statement, self, sql); if (rc != SQLITE_OK) { From python-checkins at python.org Sat Mar 13 04:28:34 2010 From: python-checkins at python.org (victor.stinner) Date: Sat, 13 Mar 2010 04:28:34 +0100 (CET) Subject: [Python-checkins] r78899 - in python/branches/py3k: Lib/sqlite3/test/regression.py Modules/_sqlite/connection.c Message-ID: <20100313032834.9C8DFE44A@mail.python.org> Author: victor.stinner Date: Sat Mar 13 04:28:34 2010 New Revision: 78899 Log: Merged revisions 78898 via svnmerge from svn+ssh://pythondev at svn.python.org/python/trunk ........ r78898 | victor.stinner | 2010-03-13 04:27:07 +0100 (sam., 13 mars 2010) | 7 lines sqlite3: Fix a segfault on calling a connection with something else than a string. Initialize all attributes to be able to call the statement destructor on error. Avoid also a duplicate connection in some tests: setUp() does already open a connection (":memory:"). ........ Modified: python/branches/py3k/ (props changed) python/branches/py3k/Lib/sqlite3/test/regression.py python/branches/py3k/Modules/_sqlite/connection.c Modified: python/branches/py3k/Lib/sqlite3/test/regression.py ============================================================================== --- python/branches/py3k/Lib/sqlite3/test/regression.py (original) +++ python/branches/py3k/Lib/sqlite3/test/regression.py Sat Mar 13 04:28:34 2010 @@ -242,8 +242,7 @@ Verifies that running a PRAGMA statement that does an autocommit does work. This did not work in 2.5.3/2.5.4. """ - con = sqlite.connect(":memory:") - cur = con.cursor() + cur = self.con.cursor() cur.execute("create table foo(bar)") cur.execute("insert into foo(bar) values (5)") @@ -263,11 +262,17 @@ def __hash__(self): raise TypeError() var = NotHashable() - con = sqlite.connect(":memory:") - self.assertRaises(TypeError, con.create_function, var) - self.assertRaises(TypeError, con.create_aggregate, var) - self.assertRaises(TypeError, con.set_authorizer, var) - self.assertRaises(TypeError, con.set_progress_handler, var) + self.assertRaises(TypeError, self.con.create_function, var) + self.assertRaises(TypeError, self.con.create_aggregate, var) + self.assertRaises(TypeError, self.con.set_authorizer, var) + self.assertRaises(TypeError, self.con.set_progress_handler, var) + + def CheckConnectionCall(self): + """ + Call a connection with a non-string SQL request: check error handling + of the statement constructor. + """ + self.assertRaises(sqlite.Warning, self.con, 1) def suite(): regression_suite = unittest.makeSuite(RegressionTests, "Check") Modified: python/branches/py3k/Modules/_sqlite/connection.c ============================================================================== --- python/branches/py3k/Modules/_sqlite/connection.c (original) +++ python/branches/py3k/Modules/_sqlite/connection.c Sat Mar 13 04:28:34 2010 @@ -1125,6 +1125,12 @@ return NULL; } + statement->db = NULL; + statement->st = NULL; + statement->sql = NULL; + statement->in_use = 0; + statement->in_weakreflist = NULL; + rc = pysqlite_statement_create(statement, self, sql); if (rc != SQLITE_OK) { From python-checkins at python.org Sat Mar 13 05:39:51 2010 From: python-checkins at python.org (ezio.melotti) Date: Sat, 13 Mar 2010 05:39:51 +0100 (CET) Subject: [Python-checkins] r78900 - python/trunk/Modules/_cursesmodule.c Message-ID: <20100313043951.6FEAFE624@mail.python.org> Author: ezio.melotti Date: Sat Mar 13 05:39:51 2010 New Revision: 78900 Log: Silence compiler warnings. Modified: python/trunk/Modules/_cursesmodule.c Modified: python/trunk/Modules/_cursesmodule.c ============================================================================== --- python/trunk/Modules/_cursesmodule.c (original) +++ python/trunk/Modules/_cursesmodule.c Sat Mar 13 05:39:51 2010 @@ -448,14 +448,14 @@ if (use_attr == TRUE) { attr_old = getattrs(self->win); - wattrset(self->win,attr); + (void)wattrset(self->win,attr); } if (use_xy == TRUE) rtn = mvwaddstr(self->win,y,x,str); else rtn = waddstr(self->win,str); if (use_attr == TRUE) - wattrset(self->win,attr_old); + (void)wattrset(self->win,attr_old); return PyCursesCheckERR(rtn, "addstr"); } @@ -497,14 +497,14 @@ if (use_attr == TRUE) { attr_old = getattrs(self->win); - wattrset(self->win,attr); + (void)wattrset(self->win,attr); } if (use_xy == TRUE) rtn = mvwaddnstr(self->win,y,x,str,n); else rtn = waddnstr(self->win,str,n); if (use_attr == TRUE) - wattrset(self->win,attr_old); + (void)wattrset(self->win,attr_old); return PyCursesCheckERR(rtn, "addnstr"); } @@ -1138,14 +1138,14 @@ if (use_attr == TRUE) { attr_old = getattrs(self->win); - wattrset(self->win,attr); + (void)wattrset(self->win,attr); } if (use_xy == TRUE) rtn = mvwinsstr(self->win,y,x,str); else rtn = winsstr(self->win,str); if (use_attr == TRUE) - wattrset(self->win,attr_old); + (void)wattrset(self->win,attr_old); return PyCursesCheckERR(rtn, "insstr"); } @@ -1187,14 +1187,14 @@ if (use_attr == TRUE) { attr_old = getattrs(self->win); - wattrset(self->win,attr); + (void)wattrset(self->win,attr); } if (use_xy == TRUE) rtn = mvwinsnstr(self->win,y,x,str,n); else rtn = winsnstr(self->win,str,n); if (use_attr == TRUE) - wattrset(self->win,attr_old); + (void)wattrset(self->win,attr_old); return PyCursesCheckERR(rtn, "insnstr"); } From python-checkins at python.org Sat Mar 13 05:42:07 2010 From: python-checkins at python.org (ezio.melotti) Date: Sat, 13 Mar 2010 05:42:07 +0100 (CET) Subject: [Python-checkins] r78901 - in python/branches/py3k: Modules/_cursesmodule.c Message-ID: <20100313044207.5FDB2F6CB@mail.python.org> Author: ezio.melotti Date: Sat Mar 13 05:42:07 2010 New Revision: 78901 Log: Merged revisions 78900 via svnmerge from svn+ssh://pythondev at svn.python.org/python/trunk ........ r78900 | ezio.melotti | 2010-03-13 06:39:51 +0200 (Sat, 13 Mar 2010) | 1 line Silence compiler warnings. ........ Modified: python/branches/py3k/ (props changed) python/branches/py3k/Modules/_cursesmodule.c Modified: python/branches/py3k/Modules/_cursesmodule.c ============================================================================== --- python/branches/py3k/Modules/_cursesmodule.c (original) +++ python/branches/py3k/Modules/_cursesmodule.c Sat Mar 13 05:42:07 2010 @@ -458,14 +458,14 @@ if (use_attr == TRUE) { attr_old = getattrs(self->win); - wattrset(self->win,attr); + (void)wattrset(self->win,attr); } if (use_xy == TRUE) rtn = mvwaddstr(self->win,y,x,str); else rtn = waddstr(self->win,str); if (use_attr == TRUE) - wattrset(self->win,attr_old); + (void)wattrset(self->win,attr_old); return PyCursesCheckERR(rtn, "addstr"); } @@ -507,14 +507,14 @@ if (use_attr == TRUE) { attr_old = getattrs(self->win); - wattrset(self->win,attr); + (void)wattrset(self->win,attr); } if (use_xy == TRUE) rtn = mvwaddnstr(self->win,y,x,str,n); else rtn = waddnstr(self->win,str,n); if (use_attr == TRUE) - wattrset(self->win,attr_old); + (void)wattrset(self->win,attr_old); return PyCursesCheckERR(rtn, "addnstr"); } @@ -1148,14 +1148,14 @@ if (use_attr == TRUE) { attr_old = getattrs(self->win); - wattrset(self->win,attr); + (void)wattrset(self->win,attr); } if (use_xy == TRUE) rtn = mvwinsstr(self->win,y,x,str); else rtn = winsstr(self->win,str); if (use_attr == TRUE) - wattrset(self->win,attr_old); + (void)wattrset(self->win,attr_old); return PyCursesCheckERR(rtn, "insstr"); } @@ -1197,14 +1197,14 @@ if (use_attr == TRUE) { attr_old = getattrs(self->win); - wattrset(self->win,attr); + (void)wattrset(self->win,attr); } if (use_xy == TRUE) rtn = mvwinsnstr(self->win,y,x,str,n); else rtn = winsnstr(self->win,str,n); if (use_attr == TRUE) - wattrset(self->win,attr_old); + (void)wattrset(self->win,attr_old); return PyCursesCheckERR(rtn, "insnstr"); } From nnorwitz at gmail.com Sat Mar 13 10:16:57 2010 From: nnorwitz at gmail.com (Neal Norwitz) Date: Sat, 13 Mar 2010 04:16:57 -0500 Subject: [Python-checkins] Python Regression Test Failures basics (2) Message-ID: <20100313091657.GA7768@kbk-i386-bb.psfb.org> 345 tests OK. 2 tests failed: test_xml_etree test_xml_etree_c 35 tests skipped: test_aepack test_al test_applesingle test_bsddb185 test_bsddb3 test_cd test_cl test_curses test_epoll test_gl test_imgfile test_ioctl test_kqueue test_linuxaudiodev test_macos test_macostools test_multiprocessing test_ossaudiodev test_py3kwarn test_scriptpackages test_smtpnet test_socketserver test_startfile test_sunaudiodev test_tcl test_timeout test_tk test_ttk_guionly test_ttk_textonly test_unicode_file test_urllib2net test_urllibnet test_winreg test_winsound test_zipfile64 6 skips unexpected on linux2: test_multiprocessing test_ttk_guionly test_epoll test_tk test_ioctl test_ttk_textonly == CPython 2.7a4+ (trunk:78901M, Mar 13 2010, 04:02:54) [GCC 3.3.4 20040623 (Gentoo Linux 3.3.4-r1, ssp-3.3.2-2, pie-8.7.6)] == Linux-2.6.9-gentoo-r1-i686-AMD_Athlon-tm-_XP_3000+-with-gentoo-1.4.16 == /tmp/test_python_3631 test_grammar test_opcodes test_dict test_builtin test_exceptions test_types test_unittest test_doctest test_doctest2 test_MimeWriter test_SimpleHTTPServer test_StringIO test___all__ test___future__ test__locale test_abc test_abstract_numbers test_aepack test_aepack skipped -- No module named aetypes test_aifc test_al test_al skipped -- No module named al test_anydbm test_applesingle test_applesingle skipped -- No module named MacOS test_argparse test_array test_ascii_formatd test_ast test_asynchat test_asyncore test_atexit test_audioop test_augassign test_base64 test_bastion test_bigaddrspace test_bigmem test_binascii test_binhex test_binop test_bisect test_bool test_bsddb test_bsddb185 test_bsddb185 skipped -- No module named bsddb185 test_bsddb3 test_bsddb3 skipped -- Use of the `bsddb' resource not enabled test_buffer test_bufio test_bytes test_bz2 test_calendar test_call test_capi test_cd test_cd skipped -- No module named cd test_cfgparser test_cgi test_charmapcodec test_cl test_cl skipped -- No module named cl test_class test_cmath test_cmd test_cmd_line test_cmd_line_script test_code test_codeccallbacks test_codecencodings_cn test_codecencodings_hk test_codecencodings_jp test_codecencodings_kr test_codecencodings_tw test_codecmaps_cn fetching http://source.icu-project.org/repos/icu/data/trunk/charset/data/xml/gb-18030-2000.xml ... fetching http://people.freebsd.org/~perky/i18n/EUC-CN.TXT ... fetching http://www.unicode.org/Public/MAPPINGS/VENDORS/MICSFT/WINDOWS/CP936.TXT ... test_codecmaps_hk fetching http://people.freebsd.org/~perky/i18n/BIG5HKSCS-2004.TXT ... test_codecmaps_jp fetching http://www.unicode.org/Public/MAPPINGS/VENDORS/MICSFT/WINDOWS/CP932.TXT ... fetching http://people.freebsd.org/~perky/i18n/EUC-JISX0213.TXT ... fetching http://people.freebsd.org/~perky/i18n/EUC-JP.TXT ... fetching http://www.unicode.org/Public/MAPPINGS/OBSOLETE/EASTASIA/JIS/SHIFTJIS.TXT ... fetching http://people.freebsd.org/~perky/i18n/SHIFT_JISX0213.TXT ... test_codecmaps_kr fetching http://www.unicode.org/Public/MAPPINGS/VENDORS/MICSFT/WINDOWS/CP949.TXT ... fetching http://people.freebsd.org/~perky/i18n/EUC-KR.TXT ... fetching http://www.unicode.org/Public/MAPPINGS/OBSOLETE/EASTASIA/KSC/JOHAB.TXT ... test_codecmaps_tw fetching http://www.unicode.org/Public/MAPPINGS/OBSOLETE/EASTASIA/OTHER/BIG5.TXT ... fetching http://www.unicode.org/Public/MAPPINGS/VENDORS/MICSFT/WINDOWS/CP950.TXT ... test_codecs test_codeop test_coding test_coercion test_collections test_colorsys test_commands test_compare test_compile test_compileall test_compiler test_complex test_complex_args test_contains test_contextlib test_cookie test_cookielib test_copy test_copy_reg test_cpickle test_cprofile test_crypt test_csv test_ctypes test_curses test_curses skipped -- Use of the `curses' resource not enabled test_datetime test_dbm test_decimal test_decorators test_defaultdict test_deque test_descr test_descrtut test_dictcomps test_dictviews test_difflib test_dircache test_dis test_distutils [20620 refs] test_dl test_docxmlrpc test_dumbdbm test_dummy_thread test_dummy_threading test_email test_email_codecs test_email_renamed test_enumerate test_eof test_epoll test_epoll skipped -- kernel doesn't support epoll() test_errno test_exception_variations test_extcall test_fcntl test_file test_file2k test_filecmp test_fileinput test_fileio test_float test_fnmatch test_fork1 test_format test_fpformat test_fractions test_frozen test_ftplib test_funcattrs test_functools test_future test_future3 test_future4 test_future5 test_future_builtins test_gc test_gdbm test_generators test_genericpath test_genexps test_getargs test_getargs2 test_getopt test_gettext test_gl test_gl skipped -- No module named gl test_glob test_global test_grp test_gzip test_hash test_hashlib test_heapq test_hmac test_hotshot test_htmllib test_htmlparser test_httplib test_httpservers [16621 refs] [16621 refs] [16621 refs] [26870 refs] test_imageop test_imaplib test_imgfile test_imgfile skipped -- No module named imgfile test_imp test_import test_importhooks test_importlib test_index test_inspect test_int test_int_literal test_io test_ioctl test_ioctl skipped -- Unable to open /dev/tty test_isinstance test_iter test_iterlen test_itertools test_json test_kqueue test_kqueue skipped -- test works only on BSD test_largefile test_lib2to3 test_linecache test_linuxaudiodev test_linuxaudiodev skipped -- Use of the `audio' resource not enabled test_list test_locale test_logging test_long test_long_future test_longexp test_macos test_macos skipped -- No module named MacOS test_macostools test_macostools skipped -- No module named MacOS test_macpath test_mailbox test_marshal test_math test_md5 test_memoryio test_memoryview test_mhlib test_mimetools test_mimetypes test_minidom test_mmap test_module test_modulefinder test_multibytecodec test_multibytecodec_support test_multifile test_multiprocessing test_multiprocessing skipped -- This platform lacks a functioning sem_open implementation, therefore, the required synchronization primitives needed will not function, see issue 3770. test_mutants test_mutex test_netrc test_new test_nis test_normalization fetching http://www.unicode.org/Public/5.1.0/ucd/NormalizationTest.txt ... test_ntpath test_old_mailbox test_openpty test_operator test_optparse test_os [16621 refs] [16621 refs] test_ossaudiodev test_ossaudiodev skipped -- Use of the `audio' resource not enabled test_parser Expecting 's_push: parser stack overflow' in next line s_push: parser stack overflow test_pdb test_peepholer test_pep247 test_pep263 test_pep277 test_pep292 test_pep352 test_pickle test_pickletools test_pipes test_pkg test_pkgimport test_pkgutil test_platform [18017 refs] [18017 refs] test_plistlib test_poll test_popen [16626 refs] [16626 refs] [16626 refs] test_popen2 test_poplib test_posix test_posixpath test_pow test_pprint test_print test_profile test_profilehooks test_property test_pstats test_pty test_pwd test_py3kwarn test_py3kwarn skipped -- test.test_py3kwarn must be run with the -3 flag test_pyclbr test_pydoc [21734 refs] [21734 refs] [21734 refs] [21734 refs] [21734 refs] [21733 refs] [21733 refs] test_pyexpat test_queue test_quopri [19449 refs] [19449 refs] test_random test_re test_readline test_repr test_resource test_rfc822 test_richcmp test_robotparser test_runpy test_sax test_scope test_scriptpackages test_scriptpackages skipped -- No module named aetools test_select test_set test_setcomps test_sets test_sgmllib test_sha test_shelve test_shlex test_shutil test_signal test_site [16621 refs] [16621 refs] [16621 refs] [16621 refs] test_slice test_smtplib test_smtpnet test_smtpnet skipped -- Use of the `network' resource not enabled test_socket test_socketserver test_socketserver skipped -- Use of the `network' resource not enabled test_softspace test_sort test_sqlite test_ssl test_startfile test_startfile skipped -- module os has no attribute startfile test_str test_strftime test_string test_stringprep test_strop test_strptime test_strtod test_struct test_structmembers test_structseq test_subprocess [16621 refs] [16621 refs] [16621 refs] [16621 refs] [16621 refs] [16621 refs] [16621 refs] [16621 refs] [16621 refs] [16621 refs] [16621 refs] [16621 refs] [16621 refs] [16621 refs] [16836 refs] [16621 refs] [16621 refs] [16621 refs] [16621 refs] [16621 refs] . [16621 refs] [16621 refs] this bit of output is from a test of stdout in a different process ... [16621 refs] [16621 refs] [16836 refs] [16621 refs] [16621 refs] [16621 refs] Traceback (most recent call last): File "", line 1, in KeyboardInterrupt [16621 refs] [16621 refs] [16621 refs] [16621 refs] [16621 refs] [16621 refs] [16621 refs] [16621 refs] [16621 refs] [16621 refs] [16621 refs] [16621 refs] [16621 refs] [16621 refs] [16621 refs] [16836 refs] [16621 refs] [16621 refs] [16621 refs] [16621 refs] [16621 refs] . [16621 refs] [16621 refs] this bit of output is from a test of stdout in a different process ... [16621 refs] [16621 refs] [16836 refs] test_sunaudiodev test_sunaudiodev skipped -- No module named sunaudiodev test_sundry test_symtable test_syntax test_sys [16621 refs] [16621 refs] [16621 refs] [16850 refs] [16644 refs] test_sysconfig [16621 refs] [16621 refs] test_tarfile test_tcl test_tcl skipped -- No module named _tkinter test_telnetlib test_tempfile [16621 refs] test_textwrap test_thread test_threaded_import test_threadedtempfile test_threading [19921 refs] [21092 refs] [20906 refs] [20906 refs] [20906 refs] [20906 refs] test_threading_local test_threadsignals test_time test_timeout test_timeout skipped -- Use of the `network' resource not enabled test_tk test_tk skipped -- No module named _tkinter test_tokenize test_trace test_traceback test_transformer test_ttk_guionly test_ttk_guionly skipped -- No module named _tkinter test_ttk_textonly test_ttk_textonly skipped -- No module named _tkinter test_tuple test_typechecks test_ucn test_unary test_undocumented_details test_unicode test_unicode_file test_unicode_file skipped -- No Unicode filesystem semantics on this platform. test_unicodedata test_univnewlines test_univnewlines2k test_unpack test_urllib test_urllib2 test_urllib2_localnet test_urllib2net test_urllib2net skipped -- Use of the `network' resource not enabled test_urllibnet test_urllibnet skipped -- Use of the `network' resource not enabled test_urlparse test_userdict test_userlist test_userstring test_uu test_uuid WARNING: uuid.getnode is unreliable on many platforms. It is disabled until the code and/or test can be fixed properly. WARNING: uuid._ifconfig_getnode is unreliable on many platforms. It is disabled until the code and/or test can be fixed properly. WARNING: uuid._unixdll_getnode is unreliable on many platforms. It is disabled until the code and/or test can be fixed properly. test_wait3 test_wait4 test_warnings test_wave test_weakref test_whichdb test_winreg test_winreg skipped -- No module named _winreg test_winsound test_winsound skipped -- No module named winsound test_with test_wsgiref test_xdrlib test_xml_etree ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 770, in test.test_xml_etree.custom_builder Failed example: parser.feed(open("samples/simple.xml", "r").read()) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in parser.feed(open("samples/simple.xml", "r").read()) IOError: [Errno 2] No such file or directory: 'samples/simple.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 793, in test.test_xml_etree.custom_builder Failed example: parser.feed(open("samples/simple-ns.xml", "r").read()) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in parser.feed(open("samples/simple-ns.xml", "r").read()) IOError: [Errno 2] No such file or directory: 'samples/simple-ns.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 421, in test.test_xml_etree.file_init Failed example: tree = ET.ElementTree(file="samples/simple.xml") Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in tree = ET.ElementTree(file="samples/simple.xml") File "/tmp/python-test/local/lib/python2.7/xml/etree/ElementTree.py", line 611, in __init__ self.parse(file) File "/tmp/python-test/local/lib/python2.7/xml/etree/ElementTree.py", line 646, in parse source = open(source, "rb") IOError: [Errno 2] No such file or directory: 'samples/simple.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 422, in test.test_xml_etree.file_init Failed example: tree.find("element").tag Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in tree.find("element").tag AttributeError: 'NoneType' object has no attribute 'tag' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 424, in test.test_xml_etree.file_init Failed example: tree.find("element/../empty-element").tag Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in tree.find("element/../empty-element").tag AttributeError: 'NoneType' object has no attribute 'tag' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 811, in test.test_xml_etree.getchildren Failed example: tree = ET.parse(open("samples/simple.xml", "r")) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in tree = ET.parse(open("samples/simple.xml", "r")) IOError: [Errno 2] No such file or directory: 'samples/simple.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 812, in test.test_xml_etree.getchildren Failed example: for elem in tree.getroot().iter(): summarize_list(elem.getchildren()) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in for elem in tree.getroot().iter(): NameError: name 'tree' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 818, in test.test_xml_etree.getchildren Failed example: for elem in tree.getiterator(): summarize_list(elem.getchildren()) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in for elem in tree.getiterator(): NameError: name 'tree' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 647, in test.test_xml_etree.iterparse Failed example: context = iterparse("samples/simple.xml") Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in context = iterparse("samples/simple.xml") File "/tmp/python-test/local/lib/python2.7/xml/etree/ElementTree.py", line 1192, in iterparse source = open(source, "rb") IOError: [Errno 2] No such file or directory: 'samples/simple.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 648, in test.test_xml_etree.iterparse Failed example: action, elem = next(context) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in action, elem = next(context) NameError: name 'context' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 649, in test.test_xml_etree.iterparse Failed example: print action, elem.tag Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in print action, elem.tag NameError: name 'action' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 651, in test.test_xml_etree.iterparse Failed example: for action, elem in context: print action, elem.tag Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in for action, elem in context: NameError: name 'context' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 656, in test.test_xml_etree.iterparse Failed example: context.root.tag Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in context.root.tag NameError: name 'context' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 659, in test.test_xml_etree.iterparse Failed example: context = iterparse("samples/simple-ns.xml") Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in context = iterparse("samples/simple-ns.xml") File "/tmp/python-test/local/lib/python2.7/xml/etree/ElementTree.py", line 1192, in iterparse source = open(source, "rb") IOError: [Errno 2] No such file or directory: 'samples/simple-ns.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 660, in test.test_xml_etree.iterparse Failed example: for action, elem in context: print action, elem.tag Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in for action, elem in context: NameError: name 'context' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 668, in test.test_xml_etree.iterparse Failed example: context = iterparse("samples/simple.xml", events) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in context = iterparse("samples/simple.xml", events) File "/tmp/python-test/local/lib/python2.7/xml/etree/ElementTree.py", line 1192, in iterparse source = open(source, "rb") IOError: [Errno 2] No such file or directory: 'samples/simple.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 669, in test.test_xml_etree.iterparse Failed example: for action, elem in context: print action, elem.tag Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in for action, elem in context: NameError: name 'context' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 673, in test.test_xml_etree.iterparse Failed example: context = iterparse("samples/simple.xml", events=events) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in context = iterparse("samples/simple.xml", events=events) File "/tmp/python-test/local/lib/python2.7/xml/etree/ElementTree.py", line 1192, in iterparse source = open(source, "rb") IOError: [Errno 2] No such file or directory: 'samples/simple.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 674, in test.test_xml_etree.iterparse Failed example: for action, elem in context: print action, elem.tag Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in for action, elem in context: NameError: name 'context' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 678, in test.test_xml_etree.iterparse Failed example: context = iterparse("samples/simple.xml", events) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in context = iterparse("samples/simple.xml", events) File "/tmp/python-test/local/lib/python2.7/xml/etree/ElementTree.py", line 1192, in iterparse source = open(source, "rb") IOError: [Errno 2] No such file or directory: 'samples/simple.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 679, in test.test_xml_etree.iterparse Failed example: for action, elem in context: print action, elem.tag Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in for action, elem in context: NameError: name 'context' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 691, in test.test_xml_etree.iterparse Failed example: context = iterparse("samples/simple-ns.xml", events) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in context = iterparse("samples/simple-ns.xml", events) File "/tmp/python-test/local/lib/python2.7/xml/etree/ElementTree.py", line 1192, in iterparse source = open(source, "rb") IOError: [Errno 2] No such file or directory: 'samples/simple-ns.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 692, in test.test_xml_etree.iterparse Failed example: for action, elem in context: if action in ("start", "end"): print action, elem.tag else: print action, elem Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in for action, elem in context: NameError: name 'context' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 709, in test.test_xml_etree.iterparse Failed example: context = iterparse("samples/simple.xml", events) Expected: Traceback (most recent call last): ValueError: unknown event 'bogus' Got: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in context = iterparse("samples/simple.xml", events) File "/tmp/python-test/local/lib/python2.7/xml/etree/ElementTree.py", line 1192, in iterparse source = open(source, "rb") IOError: [Errno 2] No such file or directory: 'samples/simple.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 567, in test.test_xml_etree.parsefile Failed example: tree = ET.parse("samples/simple.xml") Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in tree = ET.parse("samples/simple.xml") File "/tmp/python-test/local/lib/python2.7/xml/etree/ElementTree.py", line 1176, in parse tree.parse(source, parser) File "/tmp/python-test/local/lib/python2.7/xml/etree/ElementTree.py", line 646, in parse source = open(source, "rb") IOError: [Errno 2] No such file or directory: 'samples/simple.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 568, in test.test_xml_etree.parsefile Failed example: normalize_crlf(tree) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in normalize_crlf(tree) NameError: name 'tree' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 569, in test.test_xml_etree.parsefile Failed example: tree.write(sys.stdout) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in tree.write(sys.stdout) NameError: name 'tree' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 575, in test.test_xml_etree.parsefile Failed example: tree = ET.parse("samples/simple-ns.xml") Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in tree = ET.parse("samples/simple-ns.xml") File "/tmp/python-test/local/lib/python2.7/xml/etree/ElementTree.py", line 1176, in parse tree.parse(source, parser) File "/tmp/python-test/local/lib/python2.7/xml/etree/ElementTree.py", line 646, in parse source = open(source, "rb") IOError: [Errno 2] No such file or directory: 'samples/simple-ns.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 576, in test.test_xml_etree.parsefile Failed example: normalize_crlf(tree) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in normalize_crlf(tree) NameError: name 'tree' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 577, in test.test_xml_etree.parsefile Failed example: tree.write(sys.stdout) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in tree.write(sys.stdout) NameError: name 'tree' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 587, in test.test_xml_etree.parsefile Failed example: parser.feed(open("samples/simple.xml").read()) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in parser.feed(open("samples/simple.xml").read()) IOError: [Errno 2] No such file or directory: 'samples/simple.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 588, in test.test_xml_etree.parsefile Failed example: print serialize(parser.close()) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in print serialize(parser.close()) File "/tmp/python-test/local/lib/python2.7/xml/etree/ElementTree.py", line 1635, in close self._raiseerror(v) File "/tmp/python-test/local/lib/python2.7/xml/etree/ElementTree.py", line 1487, in _raiseerror raise err ParseError: no element found: line 1, column 0 ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 596, in test.test_xml_etree.parsefile Failed example: parser.feed(open("samples/simple.xml").read()) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in parser.feed(open("samples/simple.xml").read()) IOError: [Errno 2] No such file or directory: 'samples/simple.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 597, in test.test_xml_etree.parsefile Failed example: print serialize(parser.close()) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in print serialize(parser.close()) File "/tmp/python-test/local/lib/python2.7/xml/etree/ElementTree.py", line 1635, in close self._raiseerror(v) File "/tmp/python-test/local/lib/python2.7/xml/etree/ElementTree.py", line 1487, in _raiseerror raise err ParseError: no element found: line 1, column 0 ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 606, in test.test_xml_etree.parsefile Failed example: parser.feed(open("samples/simple.xml").read()) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in parser.feed(open("samples/simple.xml").read()) IOError: [Errno 2] No such file or directory: 'samples/simple.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 607, in test.test_xml_etree.parsefile Failed example: print serialize(parser.close()) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in print serialize(parser.close()) File "/tmp/python-test/local/lib/python2.7/xml/etree/ElementTree.py", line 1635, in close self._raiseerror(v) File "/tmp/python-test/local/lib/python2.7/xml/etree/ElementTree.py", line 1487, in _raiseerror raise err ParseError: no element found: line 1, column 0 ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 1361, in test.test_xml_etree.xinclude_default Failed example: ElementInclude.include(document) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in ElementInclude.include(document) File "/tmp/python-test/local/lib/python2.7/xml/etree/ElementInclude.py", line 111, in include node = loader(href, parse) File "/tmp/python-test/local/lib/python2.7/xml/etree/ElementInclude.py", line 78, in default_loader file = open(href) IOError: [Errno 2] No such file or directory: 'samples/simple.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 1362, in test.test_xml_etree.xinclude_default Failed example: print serialize(document) # default Expected:

    Example.

    text texttail
    Got:

    Example.

    ********************************************************************** 6 items had failures: 2 of 8 in test.test_xml_etree.custom_builder 3 of 8 in test.test_xml_etree.file_init 3 of 19 in test.test_xml_etree.getchildren 16 of 29 in test.test_xml_etree.iterparse 12 of 17 in test.test_xml_etree.parsefile 2 of 4 in test.test_xml_etree.xinclude_default ***Test Failed*** 38 failures. test test_xml_etree failed -- 38 of 591 doctests failed Re-running test 'test_xml_etree' in verbose mode ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 770, in test.test_xml_etree.custom_builder Failed example: parser.feed(open("samples/simple.xml", "r").read()) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in parser.feed(open("samples/simple.xml", "r").read()) IOError: [Errno 2] No such file or directory: 'samples/simple.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 793, in test.test_xml_etree.custom_builder Failed example: parser.feed(open("samples/simple-ns.xml", "r").read()) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in parser.feed(open("samples/simple-ns.xml", "r").read()) IOError: [Errno 2] No such file or directory: 'samples/simple-ns.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 421, in test.test_xml_etree.file_init Failed example: tree = ET.ElementTree(file="samples/simple.xml") Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in tree = ET.ElementTree(file="samples/simple.xml") File "/tmp/python-test/local/lib/python2.7/xml/etree/ElementTree.py", line 611, in __init__ self.parse(file) File "/tmp/python-test/local/lib/python2.7/xml/etree/ElementTree.py", line 646, in parse source = open(source, "rb") IOError: [Errno 2] No such file or directory: 'samples/simple.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 422, in test.test_xml_etree.file_init Failed example: tree.find("element").tag Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in tree.find("element").tag AttributeError: 'NoneType' object has no attribute 'tag' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 424, in test.test_xml_etree.file_init Failed example: tree.find("element/../empty-element").tag Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in tree.find("element/../empty-element").tag AttributeError: 'NoneType' object has no attribute 'tag' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 811, in test.test_xml_etree.getchildren Failed example: tree = ET.parse(open("samples/simple.xml", "r")) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in tree = ET.parse(open("samples/simple.xml", "r")) IOError: [Errno 2] No such file or directory: 'samples/simple.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 812, in test.test_xml_etree.getchildren Failed example: for elem in tree.getroot().iter(): summarize_list(elem.getchildren()) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in for elem in tree.getroot().iter(): NameError: name 'tree' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 818, in test.test_xml_etree.getchildren Failed example: for elem in tree.getiterator(): summarize_list(elem.getchildren()) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in for elem in tree.getiterator(): NameError: name 'tree' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 647, in test.test_xml_etree.iterparse Failed example: context = iterparse("samples/simple.xml") Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in context = iterparse("samples/simple.xml") File "/tmp/python-test/local/lib/python2.7/xml/etree/ElementTree.py", line 1192, in iterparse source = open(source, "rb") IOError: [Errno 2] No such file or directory: 'samples/simple.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 648, in test.test_xml_etree.iterparse Failed example: action, elem = next(context) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in action, elem = next(context) NameError: name 'context' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 649, in test.test_xml_etree.iterparse Failed example: print action, elem.tag Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in print action, elem.tag NameError: name 'action' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 651, in test.test_xml_etree.iterparse Failed example: for action, elem in context: print action, elem.tag Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in for action, elem in context: NameError: name 'context' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 656, in test.test_xml_etree.iterparse Failed example: context.root.tag Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in context.root.tag NameError: name 'context' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 659, in test.test_xml_etree.iterparse Failed example: context = iterparse("samples/simple-ns.xml") Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in context = iterparse("samples/simple-ns.xml") File "/tmp/python-test/local/lib/python2.7/xml/etree/ElementTree.py", line 1192, in iterparse source = open(source, "rb") IOError: [Errno 2] No such file or directory: 'samples/simple-ns.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 660, in test.test_xml_etree.iterparse Failed example: for action, elem in context: print action, elem.tag Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in for action, elem in context: NameError: name 'context' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 668, in test.test_xml_etree.iterparse Failed example: context = iterparse("samples/simple.xml", events) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in context = iterparse("samples/simple.xml", events) File "/tmp/python-test/local/lib/python2.7/xml/etree/ElementTree.py", line 1192, in iterparse source = open(source, "rb") IOError: [Errno 2] No such file or directory: 'samples/simple.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 669, in test.test_xml_etree.iterparse Failed example: for action, elem in context: print action, elem.tag Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in for action, elem in context: NameError: name 'context' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 673, in test.test_xml_etree.iterparse Failed example: context = iterparse("samples/simple.xml", events=events) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in context = iterparse("samples/simple.xml", events=events) File "/tmp/python-test/local/lib/python2.7/xml/etree/ElementTree.py", line 1192, in iterparse source = open(source, "rb") IOError: [Errno 2] No such file or directory: 'samples/simple.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 674, in test.test_xml_etree.iterparse Failed example: for action, elem in context: print action, elem.tag Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in for action, elem in context: NameError: name 'context' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 678, in test.test_xml_etree.iterparse Failed example: context = iterparse("samples/simple.xml", events) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in context = iterparse("samples/simple.xml", events) File "/tmp/python-test/local/lib/python2.7/xml/etree/ElementTree.py", line 1192, in iterparse source = open(source, "rb") IOError: [Errno 2] No such file or directory: 'samples/simple.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 679, in test.test_xml_etree.iterparse Failed example: for action, elem in context: print action, elem.tag Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in for action, elem in context: NameError: name 'context' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 691, in test.test_xml_etree.iterparse Failed example: context = iterparse("samples/simple-ns.xml", events) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in context = iterparse("samples/simple-ns.xml", events) File "/tmp/python-test/local/lib/python2.7/xml/etree/ElementTree.py", line 1192, in iterparse source = open(source, "rb") IOError: [Errno 2] No such file or directory: 'samples/simple-ns.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 692, in test.test_xml_etree.iterparse Failed example: for action, elem in context: if action in ("start", "end"): print action, elem.tag else: print action, elem Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in for action, elem in context: NameError: name 'context' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 709, in test.test_xml_etree.iterparse Failed example: context = iterparse("samples/simple.xml", events) Expected: Traceback (most recent call last): ValueError: unknown event 'bogus' Got: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in context = iterparse("samples/simple.xml", events) File "/tmp/python-test/local/lib/python2.7/xml/etree/ElementTree.py", line 1192, in iterparse source = open(source, "rb") IOError: [Errno 2] No such file or directory: 'samples/simple.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 567, in test.test_xml_etree.parsefile Failed example: tree = ET.parse("samples/simple.xml") Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in tree = ET.parse("samples/simple.xml") File "/tmp/python-test/local/lib/python2.7/xml/etree/ElementTree.py", line 1176, in parse tree.parse(source, parser) File "/tmp/python-test/local/lib/python2.7/xml/etree/ElementTree.py", line 646, in parse source = open(source, "rb") IOError: [Errno 2] No such file or directory: 'samples/simple.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 568, in test.test_xml_etree.parsefile Failed example: normalize_crlf(tree) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in normalize_crlf(tree) NameError: name 'tree' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 569, in test.test_xml_etree.parsefile Failed example: tree.write(sys.stdout) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in tree.write(sys.stdout) NameError: name 'tree' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 575, in test.test_xml_etree.parsefile Failed example: tree = ET.parse("samples/simple-ns.xml") Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in tree = ET.parse("samples/simple-ns.xml") File "/tmp/python-test/local/lib/python2.7/xml/etree/ElementTree.py", line 1176, in parse tree.parse(source, parser) File "/tmp/python-test/local/lib/python2.7/xml/etree/ElementTree.py", line 646, in parse source = open(source, "rb") IOError: [Errno 2] No such file or directory: 'samples/simple-ns.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 576, in test.test_xml_etree.parsefile Failed example: normalize_crlf(tree) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in normalize_crlf(tree) NameError: name 'tree' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 577, in test.test_xml_etree.parsefile Failed example: tree.write(sys.stdout) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in tree.write(sys.stdout) NameError: name 'tree' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 587, in test.test_xml_etree.parsefile Failed example: parser.feed(open("samples/simple.xml").read()) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in parser.feed(open("samples/simple.xml").read()) IOError: [Errno 2] No such file or directory: 'samples/simple.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 588, in test.test_xml_etree.parsefile Failed example: print serialize(parser.close()) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in print serialize(parser.close()) File "/tmp/python-test/local/lib/python2.7/xml/etree/ElementTree.py", line 1635, in close self._raiseerror(v) File "/tmp/python-test/local/lib/python2.7/xml/etree/ElementTree.py", line 1487, in _raiseerror raise err ParseError: no element found: line 1, column 0 ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 596, in test.test_xml_etree.parsefile Failed example: parser.feed(open("samples/simple.xml").read()) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in parser.feed(open("samples/simple.xml").read()) IOError: [Errno 2] No such file or directory: 'samples/simple.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 597, in test.test_xml_etree.parsefile Failed example: print serialize(parser.close()) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in print serialize(parser.close()) File "/tmp/python-test/local/lib/python2.7/xml/etree/ElementTree.py", line 1635, in close self._raiseerror(v) File "/tmp/python-test/local/lib/python2.7/xml/etree/ElementTree.py", line 1487, in _raiseerror raise err ParseError: no element found: line 1, column 0 ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 606, in test.test_xml_etree.parsefile Failed example: parser.feed(open("samples/simple.xml").read()) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in parser.feed(open("samples/simple.xml").read()) IOError: [Errno 2] No such file or directory: 'samples/simple.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 607, in test.test_xml_etree.parsefile Failed example: print serialize(parser.close()) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in print serialize(parser.close()) File "/tmp/python-test/local/lib/python2.7/xml/etree/ElementTree.py", line 1635, in close self._raiseerror(v) File "/tmp/python-test/local/lib/python2.7/xml/etree/ElementTree.py", line 1487, in _raiseerror raise err ParseError: no element found: line 1, column 0 ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 1361, in test.test_xml_etree.xinclude_default Failed example: ElementInclude.include(document) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in ElementInclude.include(document) File "/tmp/python-test/local/lib/python2.7/xml/etree/ElementInclude.py", line 111, in include node = loader(href, parse) File "/tmp/python-test/local/lib/python2.7/xml/etree/ElementInclude.py", line 78, in default_loader file = open(href) IOError: [Errno 2] No such file or directory: 'samples/simple.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 1362, in test.test_xml_etree.xinclude_default Failed example: print serialize(document) # default Expected:

    Example.

    text texttail
    Got:

    Example.

    ********************************************************************** 6 items had failures: 2 of 8 in test.test_xml_etree.custom_builder 3 of 8 in test.test_xml_etree.file_init 3 of 19 in test.test_xml_etree.getchildren 16 of 29 in test.test_xml_etree.iterparse 12 of 17 in test.test_xml_etree.parsefile 2 of 4 in test.test_xml_etree.xinclude_default ***Test Failed*** 38 failures. test test_xml_etree failed -- 38 of 591 doctests failed test_xml_etree_c ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 770, in test.test_xml_etree.custom_builder Failed example: parser.feed(open("samples/simple.xml", "r").read()) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in parser.feed(open("samples/simple.xml", "r").read()) IOError: [Errno 2] No such file or directory: 'samples/simple.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 793, in test.test_xml_etree.custom_builder Failed example: parser.feed(open("samples/simple-ns.xml", "r").read()) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in parser.feed(open("samples/simple-ns.xml", "r").read()) IOError: [Errno 2] No such file or directory: 'samples/simple-ns.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 421, in test.test_xml_etree.file_init Failed example: tree = ET.ElementTree(file="samples/simple.xml") Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in tree = ET.ElementTree(file="samples/simple.xml") File "/tmp/python-test/local/lib/python2.7/xml/etree/ElementTree.py", line 611, in __init__ self.parse(file) File "", line 25, in parse IOError: [Errno 2] No such file or directory: 'samples/simple.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 422, in test.test_xml_etree.file_init Failed example: tree.find("element").tag Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in tree.find("element").tag AttributeError: 'NoneType' object has no attribute 'tag' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 424, in test.test_xml_etree.file_init Failed example: tree.find("element/../empty-element").tag Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in tree.find("element/../empty-element").tag AttributeError: 'NoneType' object has no attribute 'tag' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 811, in test.test_xml_etree.getchildren Failed example: tree = ET.parse(open("samples/simple.xml", "r")) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in tree = ET.parse(open("samples/simple.xml", "r")) IOError: [Errno 2] No such file or directory: 'samples/simple.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 812, in test.test_xml_etree.getchildren Failed example: for elem in tree.getroot().iter(): summarize_list(elem.getchildren()) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in for elem in tree.getroot().iter(): NameError: name 'tree' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 818, in test.test_xml_etree.getchildren Failed example: for elem in tree.getiterator(): summarize_list(elem.getchildren()) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in for elem in tree.getiterator(): NameError: name 'tree' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 647, in test.test_xml_etree.iterparse Failed example: context = iterparse("samples/simple.xml") Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in context = iterparse("samples/simple.xml") File "", line 63, in __init__ IOError: [Errno 2] No such file or directory: 'samples/simple.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 648, in test.test_xml_etree.iterparse Failed example: action, elem = next(context) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in action, elem = next(context) NameError: name 'context' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 649, in test.test_xml_etree.iterparse Failed example: print action, elem.tag Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in print action, elem.tag NameError: name 'action' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 651, in test.test_xml_etree.iterparse Failed example: for action, elem in context: print action, elem.tag Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in for action, elem in context: NameError: name 'context' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 656, in test.test_xml_etree.iterparse Failed example: context.root.tag Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in context.root.tag NameError: name 'context' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 659, in test.test_xml_etree.iterparse Failed example: context = iterparse("samples/simple-ns.xml") Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in context = iterparse("samples/simple-ns.xml") File "", line 63, in __init__ IOError: [Errno 2] No such file or directory: 'samples/simple-ns.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 660, in test.test_xml_etree.iterparse Failed example: for action, elem in context: print action, elem.tag Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in for action, elem in context: NameError: name 'context' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 668, in test.test_xml_etree.iterparse Failed example: context = iterparse("samples/simple.xml", events) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in context = iterparse("samples/simple.xml", events) File "", line 63, in __init__ IOError: [Errno 2] No such file or directory: 'samples/simple.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 669, in test.test_xml_etree.iterparse Failed example: for action, elem in context: print action, elem.tag Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in for action, elem in context: NameError: name 'context' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 673, in test.test_xml_etree.iterparse Failed example: context = iterparse("samples/simple.xml", events=events) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in context = iterparse("samples/simple.xml", events=events) File "", line 63, in __init__ IOError: [Errno 2] No such file or directory: 'samples/simple.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 674, in test.test_xml_etree.iterparse Failed example: for action, elem in context: print action, elem.tag Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in for action, elem in context: NameError: name 'context' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 678, in test.test_xml_etree.iterparse Failed example: context = iterparse("samples/simple.xml", events) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in context = iterparse("samples/simple.xml", events) File "", line 63, in __init__ IOError: [Errno 2] No such file or directory: 'samples/simple.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 679, in test.test_xml_etree.iterparse Failed example: for action, elem in context: print action, elem.tag Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in for action, elem in context: NameError: name 'context' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 691, in test.test_xml_etree.iterparse Failed example: context = iterparse("samples/simple-ns.xml", events) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in context = iterparse("samples/simple-ns.xml", events) File "", line 63, in __init__ IOError: [Errno 2] No such file or directory: 'samples/simple-ns.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 692, in test.test_xml_etree.iterparse Failed example: for action, elem in context: if action in ("start", "end"): print action, elem.tag else: print action, elem Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in for action, elem in context: NameError: name 'context' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 709, in test.test_xml_etree.iterparse Failed example: context = iterparse("samples/simple.xml", events) Expected: Traceback (most recent call last): ValueError: unknown event 'bogus' Got: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in context = iterparse("samples/simple.xml", events) File "", line 63, in __init__ IOError: [Errno 2] No such file or directory: 'samples/simple.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 567, in test.test_xml_etree.parsefile Failed example: tree = ET.parse("samples/simple.xml") Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in tree = ET.parse("samples/simple.xml") File "", line 56, in parse File "", line 25, in parse IOError: [Errno 2] No such file or directory: 'samples/simple.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 568, in test.test_xml_etree.parsefile Failed example: normalize_crlf(tree) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in normalize_crlf(tree) NameError: name 'tree' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 569, in test.test_xml_etree.parsefile Failed example: tree.write(sys.stdout) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in tree.write(sys.stdout) NameError: name 'tree' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 575, in test.test_xml_etree.parsefile Failed example: tree = ET.parse("samples/simple-ns.xml") Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in tree = ET.parse("samples/simple-ns.xml") File "", line 56, in parse File "", line 25, in parse IOError: [Errno 2] No such file or directory: 'samples/simple-ns.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 576, in test.test_xml_etree.parsefile Failed example: normalize_crlf(tree) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in normalize_crlf(tree) NameError: name 'tree' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 577, in test.test_xml_etree.parsefile Failed example: tree.write(sys.stdout) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in tree.write(sys.stdout) NameError: name 'tree' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 587, in test.test_xml_etree.parsefile Failed example: parser.feed(open("samples/simple.xml").read()) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in parser.feed(open("samples/simple.xml").read()) IOError: [Errno 2] No such file or directory: 'samples/simple.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 588, in test.test_xml_etree.parsefile Failed example: print serialize(parser.close()) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in print serialize(parser.close()) ParseError: no element found: line 1, column 0 ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 596, in test.test_xml_etree.parsefile Failed example: parser.feed(open("samples/simple.xml").read()) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in parser.feed(open("samples/simple.xml").read()) IOError: [Errno 2] No such file or directory: 'samples/simple.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 597, in test.test_xml_etree.parsefile Failed example: print serialize(parser.close()) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in print serialize(parser.close()) ParseError: no element found: line 1, column 0 ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 606, in test.test_xml_etree.parsefile Failed example: parser.feed(open("samples/simple.xml").read()) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in parser.feed(open("samples/simple.xml").read()) IOError: [Errno 2] No such file or directory: 'samples/simple.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 607, in test.test_xml_etree.parsefile Failed example: print serialize(parser.close()) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in print serialize(parser.close()) ParseError: no element found: line 1, column 0 ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 1361, in test.test_xml_etree.xinclude_default Failed example: ElementInclude.include(document) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in ElementInclude.include(document) File "/tmp/python-test/local/lib/python2.7/xml/etree/ElementInclude.py", line 111, in include node = loader(href, parse) File "/tmp/python-test/local/lib/python2.7/xml/etree/ElementInclude.py", line 78, in default_loader file = open(href) IOError: [Errno 2] No such file or directory: 'samples/simple.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 1362, in test.test_xml_etree.xinclude_default Failed example: print serialize(document) # default Expected:

    Example.

    text texttail
    Got:

    Example.

    ********************************************************************** 6 items had failures: 2 of 8 in test.test_xml_etree.custom_builder 3 of 8 in test.test_xml_etree.file_init 3 of 19 in test.test_xml_etree.getchildren 16 of 29 in test.test_xml_etree.iterparse 12 of 17 in test.test_xml_etree.parsefile 2 of 4 in test.test_xml_etree.xinclude_default ***Test Failed*** 38 failures. test test_xml_etree_c failed -- 38 of 591 doctests failed Re-running test 'test_xml_etree_c' in verbose mode doctest (test.test_xml_etree_c) ... 1 tests with zero failures ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 770, in test.test_xml_etree.custom_builder Failed example: parser.feed(open("samples/simple.xml", "r").read()) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in parser.feed(open("samples/simple.xml", "r").read()) IOError: [Errno 2] No such file or directory: 'samples/simple.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 793, in test.test_xml_etree.custom_builder Failed example: parser.feed(open("samples/simple-ns.xml", "r").read()) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in parser.feed(open("samples/simple-ns.xml", "r").read()) IOError: [Errno 2] No such file or directory: 'samples/simple-ns.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 421, in test.test_xml_etree.file_init Failed example: tree = ET.ElementTree(file="samples/simple.xml") Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in tree = ET.ElementTree(file="samples/simple.xml") File "/tmp/python-test/local/lib/python2.7/xml/etree/ElementTree.py", line 611, in __init__ self.parse(file) File "", line 25, in parse IOError: [Errno 2] No such file or directory: 'samples/simple.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 422, in test.test_xml_etree.file_init Failed example: tree.find("element").tag Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in tree.find("element").tag AttributeError: 'NoneType' object has no attribute 'tag' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 424, in test.test_xml_etree.file_init Failed example: tree.find("element/../empty-element").tag Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in tree.find("element/../empty-element").tag AttributeError: 'NoneType' object has no attribute 'tag' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 811, in test.test_xml_etree.getchildren Failed example: tree = ET.parse(open("samples/simple.xml", "r")) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in tree = ET.parse(open("samples/simple.xml", "r")) IOError: [Errno 2] No such file or directory: 'samples/simple.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 812, in test.test_xml_etree.getchildren Failed example: for elem in tree.getroot().iter(): summarize_list(elem.getchildren()) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in for elem in tree.getroot().iter(): NameError: name 'tree' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 818, in test.test_xml_etree.getchildren Failed example: for elem in tree.getiterator(): summarize_list(elem.getchildren()) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in for elem in tree.getiterator(): NameError: name 'tree' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 647, in test.test_xml_etree.iterparse Failed example: context = iterparse("samples/simple.xml") Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in context = iterparse("samples/simple.xml") File "", line 63, in __init__ IOError: [Errno 2] No such file or directory: 'samples/simple.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 648, in test.test_xml_etree.iterparse Failed example: action, elem = next(context) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in action, elem = next(context) NameError: name 'context' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 649, in test.test_xml_etree.iterparse Failed example: print action, elem.tag Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in print action, elem.tag NameError: name 'action' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 651, in test.test_xml_etree.iterparse Failed example: for action, elem in context: print action, elem.tag Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in for action, elem in context: NameError: name 'context' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 656, in test.test_xml_etree.iterparse Failed example: context.root.tag Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in context.root.tag NameError: name 'context' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 659, in test.test_xml_etree.iterparse Failed example: context = iterparse("samples/simple-ns.xml") Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in context = iterparse("samples/simple-ns.xml") File "", line 63, in __init__ IOError: [Errno 2] No such file or directory: 'samples/simple-ns.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 660, in test.test_xml_etree.iterparse Failed example: for action, elem in context: print action, elem.tag Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in for action, elem in context: NameError: name 'context' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 668, in test.test_xml_etree.iterparse Failed example: context = iterparse("samples/simple.xml", events) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in context = iterparse("samples/simple.xml", events) File "", line 63, in __init__ IOError: [Errno 2] No such file or directory: 'samples/simple.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 669, in test.test_xml_etree.iterparse Failed example: for action, elem in context: print action, elem.tag Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in for action, elem in context: NameError: name 'context' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 673, in test.test_xml_etree.iterparse Failed example: context = iterparse("samples/simple.xml", events=events) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in context = iterparse("samples/simple.xml", events=events) File "", line 63, in __init__ IOError: [Errno 2] No such file or directory: 'samples/simple.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 674, in test.test_xml_etree.iterparse Failed example: for action, elem in context: print action, elem.tag Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in for action, elem in context: NameError: name 'context' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 678, in test.test_xml_etree.iterparse Failed example: context = iterparse("samples/simple.xml", events) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in context = iterparse("samples/simple.xml", events) File "", line 63, in __init__ IOError: [Errno 2] No such file or directory: 'samples/simple.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 679, in test.test_xml_etree.iterparse Failed example: for action, elem in context: print action, elem.tag Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in for action, elem in context: NameError: name 'context' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 691, in test.test_xml_etree.iterparse Failed example: context = iterparse("samples/simple-ns.xml", events) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in context = iterparse("samples/simple-ns.xml", events) File "", line 63, in __init__ IOError: [Errno 2] No such file or directory: 'samples/simple-ns.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 692, in test.test_xml_etree.iterparse Failed example: for action, elem in context: if action in ("start", "end"): print action, elem.tag else: print action, elem Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in for action, elem in context: NameError: name 'context' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 709, in test.test_xml_etree.iterparse Failed example: context = iterparse("samples/simple.xml", events) Expected: Traceback (most recent call last): ValueError: unknown event 'bogus' Got: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in context = iterparse("samples/simple.xml", events) File "", line 63, in __init__ IOError: [Errno 2] No such file or directory: 'samples/simple.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 567, in test.test_xml_etree.parsefile Failed example: tree = ET.parse("samples/simple.xml") Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in tree = ET.parse("samples/simple.xml") File "", line 56, in parse File "", line 25, in parse IOError: [Errno 2] No such file or directory: 'samples/simple.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 568, in test.test_xml_etree.parsefile Failed example: normalize_crlf(tree) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in normalize_crlf(tree) NameError: name 'tree' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 569, in test.test_xml_etree.parsefile Failed example: tree.write(sys.stdout) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in tree.write(sys.stdout) NameError: name 'tree' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 575, in test.test_xml_etree.parsefile Failed example: tree = ET.parse("samples/simple-ns.xml") Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in tree = ET.parse("samples/simple-ns.xml") File "", line 56, in parse File "", line 25, in parse IOError: [Errno 2] No such file or directory: 'samples/simple-ns.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 576, in test.test_xml_etree.parsefile Failed example: normalize_crlf(tree) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in normalize_crlf(tree) NameError: name 'tree' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 577, in test.test_xml_etree.parsefile Failed example: tree.write(sys.stdout) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in tree.write(sys.stdout) NameError: name 'tree' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 587, in test.test_xml_etree.parsefile Failed example: parser.feed(open("samples/simple.xml").read()) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in parser.feed(open("samples/simple.xml").read()) IOError: [Errno 2] No such file or directory: 'samples/simple.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 588, in test.test_xml_etree.parsefile Failed example: print serialize(parser.close()) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in print serialize(parser.close()) ParseError: no element found: line 1, column 0 ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 596, in test.test_xml_etree.parsefile Failed example: parser.feed(open("samples/simple.xml").read()) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in parser.feed(open("samples/simple.xml").read()) IOError: [Errno 2] No such file or directory: 'samples/simple.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 597, in test.test_xml_etree.parsefile Failed example: print serialize(parser.close()) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in print serialize(parser.close()) ParseError: no element found: line 1, column 0 ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 606, in test.test_xml_etree.parsefile Failed example: parser.feed(open("samples/simple.xml").read()) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in parser.feed(open("samples/simple.xml").read()) IOError: [Errno 2] No such file or directory: 'samples/simple.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 607, in test.test_xml_etree.parsefile Failed example: print serialize(parser.close()) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in print serialize(parser.close()) ParseError: no element found: line 1, column 0 ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 1361, in test.test_xml_etree.xinclude_default Failed example: ElementInclude.include(document) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in ElementInclude.include(document) File "/tmp/python-test/local/lib/python2.7/xml/etree/ElementInclude.py", line 111, in include node = loader(href, parse) File "/tmp/python-test/local/lib/python2.7/xml/etree/ElementInclude.py", line 78, in default_loader file = open(href) IOError: [Errno 2] No such file or directory: 'samples/simple.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 1362, in test.test_xml_etree.xinclude_default Failed example: print serialize(document) # default Expected:

    Example.

    text texttail
    Got:

    Example.

    ********************************************************************** 6 items had failures: 2 of 8 in test.test_xml_etree.custom_builder 3 of 8 in test.test_xml_etree.file_init 3 of 19 in test.test_xml_etree.getchildren 16 of 29 in test.test_xml_etree.iterparse 12 of 17 in test.test_xml_etree.parsefile 2 of 4 in test.test_xml_etree.xinclude_default ***Test Failed*** 38 failures. test test_xml_etree_c failed -- 38 of 591 doctests failed test_xmllib test_xmlrpc test_xpickle test_xpickle -- skipping backwards compat tests. Use 'regrtest.py -u xpickle' to run them. test_xrange test_zipfile test_zipfile64 test_zipfile64 skipped -- test requires loads of disk-space bytes and a long time to run test_zipimport test_zipimport_support test_zlib 345 tests OK. 2 tests failed: test_xml_etree test_xml_etree_c 35 tests skipped: test_aepack test_al test_applesingle test_bsddb185 test_bsddb3 test_cd test_cl test_curses test_epoll test_gl test_imgfile test_ioctl test_kqueue test_linuxaudiodev test_macos test_macostools test_multiprocessing test_ossaudiodev test_py3kwarn test_scriptpackages test_smtpnet test_socketserver test_startfile test_sunaudiodev test_tcl test_timeout test_tk test_ttk_guionly test_ttk_textonly test_unicode_file test_urllib2net test_urllibnet test_winreg test_winsound test_zipfile64 6 skips unexpected on linux2: test_multiprocessing test_ttk_guionly test_epoll test_tk test_ioctl test_ttk_textonly [947588 refs] From nnorwitz at gmail.com Sat Mar 13 10:29:44 2010 From: nnorwitz at gmail.com (Neal Norwitz) Date: Sat, 13 Mar 2010 04:29:44 -0500 Subject: [Python-checkins] Python Regression Test Failures opt (2) Message-ID: <20100313092944.GA17921@kbk-i386-bb.psfb.org> 345 tests OK. 2 tests failed: test_xml_etree test_xml_etree_c 35 tests skipped: test_aepack test_al test_applesingle test_bsddb185 test_bsddb3 test_cd test_cl test_curses test_epoll test_gl test_imgfile test_ioctl test_kqueue test_linuxaudiodev test_macos test_macostools test_multiprocessing test_ossaudiodev test_py3kwarn test_scriptpackages test_smtpnet test_socketserver test_startfile test_sunaudiodev test_tcl test_timeout test_tk test_ttk_guionly test_ttk_textonly test_unicode_file test_urllib2net test_urllibnet test_winreg test_winsound test_zipfile64 6 skips unexpected on linux2: test_multiprocessing test_ttk_guionly test_epoll test_tk test_ioctl test_ttk_textonly == CPython 2.7a4+ (trunk:78901M, Mar 13 2010, 04:02:54) [GCC 3.3.4 20040623 (Gentoo Linux 3.3.4-r1, ssp-3.3.2-2, pie-8.7.6)] == Linux-2.6.9-gentoo-r1-i686-AMD_Athlon-tm-_XP_3000+-with-gentoo-1.4.16 == /tmp/test_python_7776 test_grammar test_opcodes test_dict test_builtin test_exceptions test_types test_unittest test_doctest test_doctest2 test_MimeWriter test_SimpleHTTPServer test_StringIO test___all__ test___future__ test__locale test_abc test_abstract_numbers test_aepack test_aepack skipped -- No module named aetypes test_aifc test_al test_al skipped -- No module named al test_anydbm test_applesingle test_applesingle skipped -- No module named MacOS test_argparse test_array test_ascii_formatd test_ast test_asynchat test_asyncore test_atexit test_audioop test_augassign test_base64 test_bastion test_bigaddrspace test_bigmem test_binascii test_binhex test_binop test_bisect test_bool test_bsddb test_bsddb185 test_bsddb185 skipped -- No module named bsddb185 test_bsddb3 test_bsddb3 skipped -- Use of the `bsddb' resource not enabled test_buffer test_bufio test_bytes test_bz2 test_calendar test_call test_capi test_cd test_cd skipped -- No module named cd test_cfgparser test_cgi test_charmapcodec test_cl test_cl skipped -- No module named cl test_class test_cmath test_cmd test_cmd_line test_cmd_line_script test_code test_codeccallbacks test_codecencodings_cn test_codecencodings_hk test_codecencodings_jp test_codecencodings_kr test_codecencodings_tw test_codecmaps_cn test_codecmaps_hk test_codecmaps_jp test_codecmaps_kr test_codecmaps_tw test_codecs test_codeop test_coding test_coercion test_collections test_colorsys test_commands test_compare test_compile test_compileall test_compiler test_complex test_complex_args test_contains test_contextlib test_cookie test_cookielib test_copy test_copy_reg test_cpickle test_cprofile test_crypt test_csv test_ctypes test_curses test_curses skipped -- Use of the `curses' resource not enabled test_datetime test_dbm test_decimal test_decorators test_defaultdict test_deque test_descr test_descrtut test_dictcomps test_dictviews test_difflib test_dircache test_dis test_distutils [20623 refs] [20623 refs] [20623 refs] [20623 refs] [20620 refs] test_dl test_docxmlrpc test_dumbdbm test_dummy_thread test_dummy_threading test_email test_email_codecs test_email_renamed test_enumerate test_eof test_epoll test_epoll skipped -- kernel doesn't support epoll() test_errno test_exception_variations test_extcall test_fcntl test_file test_file2k test_filecmp test_fileinput test_fileio test_float test_fnmatch test_fork1 test_format test_fpformat test_fractions test_frozen test_ftplib test_funcattrs test_functools test_future test_future3 test_future4 test_future5 test_future_builtins test_gc test_gdbm test_generators test_genericpath test_genexps test_getargs test_getargs2 test_getopt test_gettext test_gl test_gl skipped -- No module named gl test_glob test_global test_grp test_gzip test_hash test_hashlib test_heapq test_hmac test_hotshot test_htmllib test_htmlparser test_httplib test_httpservers [16621 refs] [16621 refs] [16621 refs] [26870 refs] test_imageop test_imaplib test_imgfile test_imgfile skipped -- No module named imgfile test_imp test_import test_importhooks test_importlib test_index test_inspect test_int test_int_literal test_io test_ioctl test_ioctl skipped -- Unable to open /dev/tty test_isinstance test_iter test_iterlen test_itertools test_json test_kqueue test_kqueue skipped -- test works only on BSD test_largefile test_lib2to3 test_linecache test_linuxaudiodev test_linuxaudiodev skipped -- Use of the `audio' resource not enabled test_list test_locale test_logging test_long test_long_future test_longexp test_macos test_macos skipped -- No module named MacOS test_macostools test_macostools skipped -- No module named MacOS test_macpath test_mailbox test_marshal test_math test_md5 test_memoryio test_memoryview test_mhlib test_mimetools test_mimetypes test_minidom test_mmap test_module test_modulefinder test_multibytecodec test_multibytecodec_support test_multifile test_multiprocessing test_multiprocessing skipped -- This platform lacks a functioning sem_open implementation, therefore, the required synchronization primitives needed will not function, see issue 3770. test_mutants test_mutex test_netrc test_new test_nis test_normalization test_ntpath test_old_mailbox test_openpty test_operator test_optparse test_os [16621 refs] [16621 refs] test_ossaudiodev test_ossaudiodev skipped -- Use of the `audio' resource not enabled test_parser Expecting 's_push: parser stack overflow' in next line s_push: parser stack overflow test_pdb test_peepholer test_pep247 test_pep263 test_pep277 test_pep292 test_pep352 test_pickle test_pickletools test_pipes test_pkg test_pkgimport test_pkgutil test_platform [18017 refs] [18017 refs] test_plistlib test_poll test_popen [16626 refs] [16626 refs] [16626 refs] test_popen2 test_poplib test_posix test_posixpath test_pow test_pprint test_print test_profile test_profilehooks test_property test_pstats test_pty test_pwd test_py3kwarn test_py3kwarn skipped -- test.test_py3kwarn must be run with the -3 flag test_pyclbr test_pydoc [21734 refs] [21734 refs] [21734 refs] [21734 refs] [21734 refs] [21733 refs] [21733 refs] test_pyexpat test_queue test_quopri [19449 refs] [19449 refs] test_random test_re test_readline test_repr test_resource test_rfc822 test_richcmp test_robotparser test_runpy test_sax test_scope test_scriptpackages test_scriptpackages skipped -- No module named aetools test_select test_set test_setcomps test_sets test_sgmllib test_sha test_shelve test_shlex test_shutil test_signal test_site [16621 refs] [16621 refs] [16621 refs] [16621 refs] test_slice test_smtplib test_smtpnet test_smtpnet skipped -- Use of the `network' resource not enabled test_socket test_socketserver test_socketserver skipped -- Use of the `network' resource not enabled test_softspace test_sort test_sqlite test_ssl test_startfile test_startfile skipped -- module os has no attribute startfile test_str test_strftime test_string test_stringprep test_strop test_strptime test_strtod test_struct test_structmembers test_structseq test_subprocess [16621 refs] [16621 refs] [16621 refs] [16621 refs] [16621 refs] [16621 refs] [16621 refs] [16621 refs] [16621 refs] [16621 refs] [16621 refs] [16621 refs] [16621 refs] [16621 refs] [16836 refs] [16621 refs] [16621 refs] [16621 refs] [16621 refs] [16621 refs] . [16621 refs] [16621 refs] this bit of output is from a test of stdout in a different process ... [16621 refs] [16621 refs] [16836 refs] [16621 refs] [16621 refs] [16621 refs] Traceback (most recent call last): File "", line 1, in KeyboardInterrupt [16621 refs] [16621 refs] [16621 refs] [16621 refs] [16621 refs] [16621 refs] [16621 refs] [16621 refs] [16621 refs] [16621 refs] [16621 refs] [16621 refs] [16621 refs] [16621 refs] [16621 refs] [16836 refs] [16621 refs] [16621 refs] [16621 refs] [16621 refs] [16621 refs] . [16621 refs] [16621 refs] this bit of output is from a test of stdout in a different process ... [16621 refs] [16621 refs] [16836 refs] test_sunaudiodev test_sunaudiodev skipped -- No module named sunaudiodev test_sundry test_symtable test_syntax test_sys [16621 refs] [16621 refs] [16621 refs] [16850 refs] [16644 refs] test_sysconfig [16621 refs] [16621 refs] test_tarfile test_tcl test_tcl skipped -- No module named _tkinter test_telnetlib test_tempfile [16621 refs] test_textwrap test_thread test_threaded_import test_threadedtempfile test_threading [19921 refs] [21092 refs] [20906 refs] [20906 refs] [20906 refs] [20906 refs] test_threading_local test_threadsignals test_time test_timeout test_timeout skipped -- Use of the `network' resource not enabled test_tk test_tk skipped -- No module named _tkinter test_tokenize test_trace test_traceback test_transformer test_ttk_guionly test_ttk_guionly skipped -- No module named _tkinter test_ttk_textonly test_ttk_textonly skipped -- No module named _tkinter test_tuple test_typechecks test_ucn test_unary test_undocumented_details test_unicode test_unicode_file test_unicode_file skipped -- No Unicode filesystem semantics on this platform. test_unicodedata test_univnewlines test_univnewlines2k test_unpack test_urllib test_urllib2 test_urllib2_localnet test_urllib2net test_urllib2net skipped -- Use of the `network' resource not enabled test_urllibnet test_urllibnet skipped -- Use of the `network' resource not enabled test_urlparse test_userdict test_userlist test_userstring test_uu test_uuid WARNING: uuid.getnode is unreliable on many platforms. It is disabled until the code and/or test can be fixed properly. WARNING: uuid._ifconfig_getnode is unreliable on many platforms. It is disabled until the code and/or test can be fixed properly. WARNING: uuid._unixdll_getnode is unreliable on many platforms. It is disabled until the code and/or test can be fixed properly. test_wait3 test_wait4 test_warnings test_wave test_weakref test_whichdb test_winreg test_winreg skipped -- No module named _winreg test_winsound test_winsound skipped -- No module named winsound test_with test_wsgiref test_xdrlib test_xml_etree ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 770, in test.test_xml_etree.custom_builder Failed example: parser.feed(open("samples/simple.xml", "r").read()) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in parser.feed(open("samples/simple.xml", "r").read()) IOError: [Errno 2] No such file or directory: 'samples/simple.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 793, in test.test_xml_etree.custom_builder Failed example: parser.feed(open("samples/simple-ns.xml", "r").read()) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in parser.feed(open("samples/simple-ns.xml", "r").read()) IOError: [Errno 2] No such file or directory: 'samples/simple-ns.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 421, in test.test_xml_etree.file_init Failed example: tree = ET.ElementTree(file="samples/simple.xml") Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in tree = ET.ElementTree(file="samples/simple.xml") File "/tmp/python-test/local/lib/python2.7/xml/etree/ElementTree.py", line 611, in __init__ self.parse(file) File "/tmp/python-test/local/lib/python2.7/xml/etree/ElementTree.py", line 646, in parse source = open(source, "rb") IOError: [Errno 2] No such file or directory: 'samples/simple.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 422, in test.test_xml_etree.file_init Failed example: tree.find("element").tag Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in tree.find("element").tag AttributeError: 'NoneType' object has no attribute 'tag' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 424, in test.test_xml_etree.file_init Failed example: tree.find("element/../empty-element").tag Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in tree.find("element/../empty-element").tag AttributeError: 'NoneType' object has no attribute 'tag' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 811, in test.test_xml_etree.getchildren Failed example: tree = ET.parse(open("samples/simple.xml", "r")) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in tree = ET.parse(open("samples/simple.xml", "r")) IOError: [Errno 2] No such file or directory: 'samples/simple.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 812, in test.test_xml_etree.getchildren Failed example: for elem in tree.getroot().iter(): summarize_list(elem.getchildren()) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in for elem in tree.getroot().iter(): NameError: name 'tree' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 818, in test.test_xml_etree.getchildren Failed example: for elem in tree.getiterator(): summarize_list(elem.getchildren()) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in for elem in tree.getiterator(): NameError: name 'tree' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 647, in test.test_xml_etree.iterparse Failed example: context = iterparse("samples/simple.xml") Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in context = iterparse("samples/simple.xml") File "/tmp/python-test/local/lib/python2.7/xml/etree/ElementTree.py", line 1192, in iterparse source = open(source, "rb") IOError: [Errno 2] No such file or directory: 'samples/simple.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 648, in test.test_xml_etree.iterparse Failed example: action, elem = next(context) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in action, elem = next(context) NameError: name 'context' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 649, in test.test_xml_etree.iterparse Failed example: print action, elem.tag Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in print action, elem.tag NameError: name 'action' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 651, in test.test_xml_etree.iterparse Failed example: for action, elem in context: print action, elem.tag Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in for action, elem in context: NameError: name 'context' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 656, in test.test_xml_etree.iterparse Failed example: context.root.tag Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in context.root.tag NameError: name 'context' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 659, in test.test_xml_etree.iterparse Failed example: context = iterparse("samples/simple-ns.xml") Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in context = iterparse("samples/simple-ns.xml") File "/tmp/python-test/local/lib/python2.7/xml/etree/ElementTree.py", line 1192, in iterparse source = open(source, "rb") IOError: [Errno 2] No such file or directory: 'samples/simple-ns.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 660, in test.test_xml_etree.iterparse Failed example: for action, elem in context: print action, elem.tag Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in for action, elem in context: NameError: name 'context' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 668, in test.test_xml_etree.iterparse Failed example: context = iterparse("samples/simple.xml", events) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in context = iterparse("samples/simple.xml", events) File "/tmp/python-test/local/lib/python2.7/xml/etree/ElementTree.py", line 1192, in iterparse source = open(source, "rb") IOError: [Errno 2] No such file or directory: 'samples/simple.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 669, in test.test_xml_etree.iterparse Failed example: for action, elem in context: print action, elem.tag Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in for action, elem in context: NameError: name 'context' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 673, in test.test_xml_etree.iterparse Failed example: context = iterparse("samples/simple.xml", events=events) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in context = iterparse("samples/simple.xml", events=events) File "/tmp/python-test/local/lib/python2.7/xml/etree/ElementTree.py", line 1192, in iterparse source = open(source, "rb") IOError: [Errno 2] No such file or directory: 'samples/simple.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 674, in test.test_xml_etree.iterparse Failed example: for action, elem in context: print action, elem.tag Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in for action, elem in context: NameError: name 'context' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 678, in test.test_xml_etree.iterparse Failed example: context = iterparse("samples/simple.xml", events) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in context = iterparse("samples/simple.xml", events) File "/tmp/python-test/local/lib/python2.7/xml/etree/ElementTree.py", line 1192, in iterparse source = open(source, "rb") IOError: [Errno 2] No such file or directory: 'samples/simple.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 679, in test.test_xml_etree.iterparse Failed example: for action, elem in context: print action, elem.tag Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in for action, elem in context: NameError: name 'context' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 691, in test.test_xml_etree.iterparse Failed example: context = iterparse("samples/simple-ns.xml", events) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in context = iterparse("samples/simple-ns.xml", events) File "/tmp/python-test/local/lib/python2.7/xml/etree/ElementTree.py", line 1192, in iterparse source = open(source, "rb") IOError: [Errno 2] No such file or directory: 'samples/simple-ns.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 692, in test.test_xml_etree.iterparse Failed example: for action, elem in context: if action in ("start", "end"): print action, elem.tag else: print action, elem Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in for action, elem in context: NameError: name 'context' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 709, in test.test_xml_etree.iterparse Failed example: context = iterparse("samples/simple.xml", events) Expected: Traceback (most recent call last): ValueError: unknown event 'bogus' Got: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in context = iterparse("samples/simple.xml", events) File "/tmp/python-test/local/lib/python2.7/xml/etree/ElementTree.py", line 1192, in iterparse source = open(source, "rb") IOError: [Errno 2] No such file or directory: 'samples/simple.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 567, in test.test_xml_etree.parsefile Failed example: tree = ET.parse("samples/simple.xml") Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in tree = ET.parse("samples/simple.xml") File "/tmp/python-test/local/lib/python2.7/xml/etree/ElementTree.py", line 1176, in parse tree.parse(source, parser) File "/tmp/python-test/local/lib/python2.7/xml/etree/ElementTree.py", line 646, in parse source = open(source, "rb") IOError: [Errno 2] No such file or directory: 'samples/simple.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 568, in test.test_xml_etree.parsefile Failed example: normalize_crlf(tree) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in normalize_crlf(tree) NameError: name 'tree' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 569, in test.test_xml_etree.parsefile Failed example: tree.write(sys.stdout) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in tree.write(sys.stdout) NameError: name 'tree' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 575, in test.test_xml_etree.parsefile Failed example: tree = ET.parse("samples/simple-ns.xml") Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in tree = ET.parse("samples/simple-ns.xml") File "/tmp/python-test/local/lib/python2.7/xml/etree/ElementTree.py", line 1176, in parse tree.parse(source, parser) File "/tmp/python-test/local/lib/python2.7/xml/etree/ElementTree.py", line 646, in parse source = open(source, "rb") IOError: [Errno 2] No such file or directory: 'samples/simple-ns.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 576, in test.test_xml_etree.parsefile Failed example: normalize_crlf(tree) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in normalize_crlf(tree) NameError: name 'tree' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 577, in test.test_xml_etree.parsefile Failed example: tree.write(sys.stdout) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in tree.write(sys.stdout) NameError: name 'tree' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 587, in test.test_xml_etree.parsefile Failed example: parser.feed(open("samples/simple.xml").read()) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in parser.feed(open("samples/simple.xml").read()) IOError: [Errno 2] No such file or directory: 'samples/simple.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 588, in test.test_xml_etree.parsefile Failed example: print serialize(parser.close()) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in print serialize(parser.close()) File "/tmp/python-test/local/lib/python2.7/xml/etree/ElementTree.py", line 1635, in close self._raiseerror(v) File "/tmp/python-test/local/lib/python2.7/xml/etree/ElementTree.py", line 1487, in _raiseerror raise err ParseError: no element found: line 1, column 0 ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 596, in test.test_xml_etree.parsefile Failed example: parser.feed(open("samples/simple.xml").read()) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in parser.feed(open("samples/simple.xml").read()) IOError: [Errno 2] No such file or directory: 'samples/simple.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 597, in test.test_xml_etree.parsefile Failed example: print serialize(parser.close()) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in print serialize(parser.close()) File "/tmp/python-test/local/lib/python2.7/xml/etree/ElementTree.py", line 1635, in close self._raiseerror(v) File "/tmp/python-test/local/lib/python2.7/xml/etree/ElementTree.py", line 1487, in _raiseerror raise err ParseError: no element found: line 1, column 0 ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 606, in test.test_xml_etree.parsefile Failed example: parser.feed(open("samples/simple.xml").read()) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in parser.feed(open("samples/simple.xml").read()) IOError: [Errno 2] No such file or directory: 'samples/simple.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 607, in test.test_xml_etree.parsefile Failed example: print serialize(parser.close()) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in print serialize(parser.close()) File "/tmp/python-test/local/lib/python2.7/xml/etree/ElementTree.py", line 1635, in close self._raiseerror(v) File "/tmp/python-test/local/lib/python2.7/xml/etree/ElementTree.py", line 1487, in _raiseerror raise err ParseError: no element found: line 1, column 0 ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 1361, in test.test_xml_etree.xinclude_default Failed example: ElementInclude.include(document) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in ElementInclude.include(document) File "/tmp/python-test/local/lib/python2.7/xml/etree/ElementInclude.py", line 111, in include node = loader(href, parse) File "/tmp/python-test/local/lib/python2.7/xml/etree/ElementInclude.py", line 78, in default_loader file = open(href) IOError: [Errno 2] No such file or directory: 'samples/simple.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 1362, in test.test_xml_etree.xinclude_default Failed example: print serialize(document) # default Expected:

    Example.

    text texttail
    Got:

    Example.

    ********************************************************************** 6 items had failures: 2 of 8 in test.test_xml_etree.custom_builder 3 of 8 in test.test_xml_etree.file_init 3 of 19 in test.test_xml_etree.getchildren 16 of 29 in test.test_xml_etree.iterparse 12 of 17 in test.test_xml_etree.parsefile 2 of 4 in test.test_xml_etree.xinclude_default ***Test Failed*** 38 failures. test test_xml_etree failed -- 38 of 591 doctests failed Re-running test 'test_xml_etree' in verbose mode ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 770, in test.test_xml_etree.custom_builder Failed example: parser.feed(open("samples/simple.xml", "r").read()) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in parser.feed(open("samples/simple.xml", "r").read()) IOError: [Errno 2] No such file or directory: 'samples/simple.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 793, in test.test_xml_etree.custom_builder Failed example: parser.feed(open("samples/simple-ns.xml", "r").read()) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in parser.feed(open("samples/simple-ns.xml", "r").read()) IOError: [Errno 2] No such file or directory: 'samples/simple-ns.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 421, in test.test_xml_etree.file_init Failed example: tree = ET.ElementTree(file="samples/simple.xml") Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in tree = ET.ElementTree(file="samples/simple.xml") File "/tmp/python-test/local/lib/python2.7/xml/etree/ElementTree.py", line 611, in __init__ self.parse(file) File "/tmp/python-test/local/lib/python2.7/xml/etree/ElementTree.py", line 646, in parse source = open(source, "rb") IOError: [Errno 2] No such file or directory: 'samples/simple.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 422, in test.test_xml_etree.file_init Failed example: tree.find("element").tag Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in tree.find("element").tag AttributeError: 'NoneType' object has no attribute 'tag' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 424, in test.test_xml_etree.file_init Failed example: tree.find("element/../empty-element").tag Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in tree.find("element/../empty-element").tag AttributeError: 'NoneType' object has no attribute 'tag' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 811, in test.test_xml_etree.getchildren Failed example: tree = ET.parse(open("samples/simple.xml", "r")) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in tree = ET.parse(open("samples/simple.xml", "r")) IOError: [Errno 2] No such file or directory: 'samples/simple.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 812, in test.test_xml_etree.getchildren Failed example: for elem in tree.getroot().iter(): summarize_list(elem.getchildren()) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in for elem in tree.getroot().iter(): NameError: name 'tree' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 818, in test.test_xml_etree.getchildren Failed example: for elem in tree.getiterator(): summarize_list(elem.getchildren()) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in for elem in tree.getiterator(): NameError: name 'tree' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 647, in test.test_xml_etree.iterparse Failed example: context = iterparse("samples/simple.xml") Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in context = iterparse("samples/simple.xml") File "/tmp/python-test/local/lib/python2.7/xml/etree/ElementTree.py", line 1192, in iterparse source = open(source, "rb") IOError: [Errno 2] No such file or directory: 'samples/simple.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 648, in test.test_xml_etree.iterparse Failed example: action, elem = next(context) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in action, elem = next(context) NameError: name 'context' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 649, in test.test_xml_etree.iterparse Failed example: print action, elem.tag Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in print action, elem.tag NameError: name 'action' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 651, in test.test_xml_etree.iterparse Failed example: for action, elem in context: print action, elem.tag Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in for action, elem in context: NameError: name 'context' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 656, in test.test_xml_etree.iterparse Failed example: context.root.tag Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in context.root.tag NameError: name 'context' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 659, in test.test_xml_etree.iterparse Failed example: context = iterparse("samples/simple-ns.xml") Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in context = iterparse("samples/simple-ns.xml") File "/tmp/python-test/local/lib/python2.7/xml/etree/ElementTree.py", line 1192, in iterparse source = open(source, "rb") IOError: [Errno 2] No such file or directory: 'samples/simple-ns.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 660, in test.test_xml_etree.iterparse Failed example: for action, elem in context: print action, elem.tag Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in for action, elem in context: NameError: name 'context' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 668, in test.test_xml_etree.iterparse Failed example: context = iterparse("samples/simple.xml", events) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in context = iterparse("samples/simple.xml", events) File "/tmp/python-test/local/lib/python2.7/xml/etree/ElementTree.py", line 1192, in iterparse source = open(source, "rb") IOError: [Errno 2] No such file or directory: 'samples/simple.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 669, in test.test_xml_etree.iterparse Failed example: for action, elem in context: print action, elem.tag Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in for action, elem in context: NameError: name 'context' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 673, in test.test_xml_etree.iterparse Failed example: context = iterparse("samples/simple.xml", events=events) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in context = iterparse("samples/simple.xml", events=events) File "/tmp/python-test/local/lib/python2.7/xml/etree/ElementTree.py", line 1192, in iterparse source = open(source, "rb") IOError: [Errno 2] No such file or directory: 'samples/simple.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 674, in test.test_xml_etree.iterparse Failed example: for action, elem in context: print action, elem.tag Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in for action, elem in context: NameError: name 'context' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 678, in test.test_xml_etree.iterparse Failed example: context = iterparse("samples/simple.xml", events) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in context = iterparse("samples/simple.xml", events) File "/tmp/python-test/local/lib/python2.7/xml/etree/ElementTree.py", line 1192, in iterparse source = open(source, "rb") IOError: [Errno 2] No such file or directory: 'samples/simple.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 679, in test.test_xml_etree.iterparse Failed example: for action, elem in context: print action, elem.tag Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in for action, elem in context: NameError: name 'context' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 691, in test.test_xml_etree.iterparse Failed example: context = iterparse("samples/simple-ns.xml", events) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in context = iterparse("samples/simple-ns.xml", events) File "/tmp/python-test/local/lib/python2.7/xml/etree/ElementTree.py", line 1192, in iterparse source = open(source, "rb") IOError: [Errno 2] No such file or directory: 'samples/simple-ns.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 692, in test.test_xml_etree.iterparse Failed example: for action, elem in context: if action in ("start", "end"): print action, elem.tag else: print action, elem Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in for action, elem in context: NameError: name 'context' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 709, in test.test_xml_etree.iterparse Failed example: context = iterparse("samples/simple.xml", events) Expected: Traceback (most recent call last): ValueError: unknown event 'bogus' Got: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in context = iterparse("samples/simple.xml", events) File "/tmp/python-test/local/lib/python2.7/xml/etree/ElementTree.py", line 1192, in iterparse source = open(source, "rb") IOError: [Errno 2] No such file or directory: 'samples/simple.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 567, in test.test_xml_etree.parsefile Failed example: tree = ET.parse("samples/simple.xml") Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in tree = ET.parse("samples/simple.xml") File "/tmp/python-test/local/lib/python2.7/xml/etree/ElementTree.py", line 1176, in parse tree.parse(source, parser) File "/tmp/python-test/local/lib/python2.7/xml/etree/ElementTree.py", line 646, in parse source = open(source, "rb") IOError: [Errno 2] No such file or directory: 'samples/simple.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 568, in test.test_xml_etree.parsefile Failed example: normalize_crlf(tree) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in normalize_crlf(tree) NameError: name 'tree' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 569, in test.test_xml_etree.parsefile Failed example: tree.write(sys.stdout) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in tree.write(sys.stdout) NameError: name 'tree' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 575, in test.test_xml_etree.parsefile Failed example: tree = ET.parse("samples/simple-ns.xml") Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in tree = ET.parse("samples/simple-ns.xml") File "/tmp/python-test/local/lib/python2.7/xml/etree/ElementTree.py", line 1176, in parse tree.parse(source, parser) File "/tmp/python-test/local/lib/python2.7/xml/etree/ElementTree.py", line 646, in parse source = open(source, "rb") IOError: [Errno 2] No such file or directory: 'samples/simple-ns.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 576, in test.test_xml_etree.parsefile Failed example: normalize_crlf(tree) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in normalize_crlf(tree) NameError: name 'tree' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 577, in test.test_xml_etree.parsefile Failed example: tree.write(sys.stdout) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in tree.write(sys.stdout) NameError: name 'tree' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 587, in test.test_xml_etree.parsefile Failed example: parser.feed(open("samples/simple.xml").read()) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in parser.feed(open("samples/simple.xml").read()) IOError: [Errno 2] No such file or directory: 'samples/simple.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 588, in test.test_xml_etree.parsefile Failed example: print serialize(parser.close()) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in print serialize(parser.close()) File "/tmp/python-test/local/lib/python2.7/xml/etree/ElementTree.py", line 1635, in close self._raiseerror(v) File "/tmp/python-test/local/lib/python2.7/xml/etree/ElementTree.py", line 1487, in _raiseerror raise err ParseError: no element found: line 1, column 0 ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 596, in test.test_xml_etree.parsefile Failed example: parser.feed(open("samples/simple.xml").read()) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in parser.feed(open("samples/simple.xml").read()) IOError: [Errno 2] No such file or directory: 'samples/simple.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 597, in test.test_xml_etree.parsefile Failed example: print serialize(parser.close()) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in print serialize(parser.close()) File "/tmp/python-test/local/lib/python2.7/xml/etree/ElementTree.py", line 1635, in close self._raiseerror(v) File "/tmp/python-test/local/lib/python2.7/xml/etree/ElementTree.py", line 1487, in _raiseerror raise err ParseError: no element found: line 1, column 0 ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 606, in test.test_xml_etree.parsefile Failed example: parser.feed(open("samples/simple.xml").read()) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in parser.feed(open("samples/simple.xml").read()) IOError: [Errno 2] No such file or directory: 'samples/simple.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 607, in test.test_xml_etree.parsefile Failed example: print serialize(parser.close()) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in print serialize(parser.close()) File "/tmp/python-test/local/lib/python2.7/xml/etree/ElementTree.py", line 1635, in close self._raiseerror(v) File "/tmp/python-test/local/lib/python2.7/xml/etree/ElementTree.py", line 1487, in _raiseerror raise err ParseError: no element found: line 1, column 0 ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 1361, in test.test_xml_etree.xinclude_default Failed example: ElementInclude.include(document) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in ElementInclude.include(document) File "/tmp/python-test/local/lib/python2.7/xml/etree/ElementInclude.py", line 111, in include node = loader(href, parse) File "/tmp/python-test/local/lib/python2.7/xml/etree/ElementInclude.py", line 78, in default_loader file = open(href) IOError: [Errno 2] No such file or directory: 'samples/simple.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 1362, in test.test_xml_etree.xinclude_default Failed example: print serialize(document) # default Expected:

    Example.

    text texttail
    Got:

    Example.

    ********************************************************************** 6 items had failures: 2 of 8 in test.test_xml_etree.custom_builder 3 of 8 in test.test_xml_etree.file_init 3 of 19 in test.test_xml_etree.getchildren 16 of 29 in test.test_xml_etree.iterparse 12 of 17 in test.test_xml_etree.parsefile 2 of 4 in test.test_xml_etree.xinclude_default ***Test Failed*** 38 failures. test test_xml_etree failed -- 38 of 591 doctests failed test_xml_etree_c ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 770, in test.test_xml_etree.custom_builder Failed example: parser.feed(open("samples/simple.xml", "r").read()) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in parser.feed(open("samples/simple.xml", "r").read()) IOError: [Errno 2] No such file or directory: 'samples/simple.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 793, in test.test_xml_etree.custom_builder Failed example: parser.feed(open("samples/simple-ns.xml", "r").read()) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in parser.feed(open("samples/simple-ns.xml", "r").read()) IOError: [Errno 2] No such file or directory: 'samples/simple-ns.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 421, in test.test_xml_etree.file_init Failed example: tree = ET.ElementTree(file="samples/simple.xml") Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in tree = ET.ElementTree(file="samples/simple.xml") File "/tmp/python-test/local/lib/python2.7/xml/etree/ElementTree.py", line 611, in __init__ self.parse(file) File "", line 25, in parse IOError: [Errno 2] No such file or directory: 'samples/simple.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 422, in test.test_xml_etree.file_init Failed example: tree.find("element").tag Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in tree.find("element").tag AttributeError: 'NoneType' object has no attribute 'tag' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 424, in test.test_xml_etree.file_init Failed example: tree.find("element/../empty-element").tag Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in tree.find("element/../empty-element").tag AttributeError: 'NoneType' object has no attribute 'tag' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 811, in test.test_xml_etree.getchildren Failed example: tree = ET.parse(open("samples/simple.xml", "r")) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in tree = ET.parse(open("samples/simple.xml", "r")) IOError: [Errno 2] No such file or directory: 'samples/simple.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 812, in test.test_xml_etree.getchildren Failed example: for elem in tree.getroot().iter(): summarize_list(elem.getchildren()) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in for elem in tree.getroot().iter(): NameError: name 'tree' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 818, in test.test_xml_etree.getchildren Failed example: for elem in tree.getiterator(): summarize_list(elem.getchildren()) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in for elem in tree.getiterator(): NameError: name 'tree' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 647, in test.test_xml_etree.iterparse Failed example: context = iterparse("samples/simple.xml") Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in context = iterparse("samples/simple.xml") File "", line 63, in __init__ IOError: [Errno 2] No such file or directory: 'samples/simple.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 648, in test.test_xml_etree.iterparse Failed example: action, elem = next(context) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in action, elem = next(context) NameError: name 'context' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 649, in test.test_xml_etree.iterparse Failed example: print action, elem.tag Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in print action, elem.tag NameError: name 'action' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 651, in test.test_xml_etree.iterparse Failed example: for action, elem in context: print action, elem.tag Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in for action, elem in context: NameError: name 'context' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 656, in test.test_xml_etree.iterparse Failed example: context.root.tag Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in context.root.tag NameError: name 'context' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 659, in test.test_xml_etree.iterparse Failed example: context = iterparse("samples/simple-ns.xml") Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in context = iterparse("samples/simple-ns.xml") File "", line 63, in __init__ IOError: [Errno 2] No such file or directory: 'samples/simple-ns.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 660, in test.test_xml_etree.iterparse Failed example: for action, elem in context: print action, elem.tag Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in for action, elem in context: NameError: name 'context' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 668, in test.test_xml_etree.iterparse Failed example: context = iterparse("samples/simple.xml", events) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in context = iterparse("samples/simple.xml", events) File "", line 63, in __init__ IOError: [Errno 2] No such file or directory: 'samples/simple.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 669, in test.test_xml_etree.iterparse Failed example: for action, elem in context: print action, elem.tag Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in for action, elem in context: NameError: name 'context' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 673, in test.test_xml_etree.iterparse Failed example: context = iterparse("samples/simple.xml", events=events) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in context = iterparse("samples/simple.xml", events=events) File "", line 63, in __init__ IOError: [Errno 2] No such file or directory: 'samples/simple.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 674, in test.test_xml_etree.iterparse Failed example: for action, elem in context: print action, elem.tag Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in for action, elem in context: NameError: name 'context' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 678, in test.test_xml_etree.iterparse Failed example: context = iterparse("samples/simple.xml", events) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in context = iterparse("samples/simple.xml", events) File "", line 63, in __init__ IOError: [Errno 2] No such file or directory: 'samples/simple.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 679, in test.test_xml_etree.iterparse Failed example: for action, elem in context: print action, elem.tag Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in for action, elem in context: NameError: name 'context' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 691, in test.test_xml_etree.iterparse Failed example: context = iterparse("samples/simple-ns.xml", events) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in context = iterparse("samples/simple-ns.xml", events) File "", line 63, in __init__ IOError: [Errno 2] No such file or directory: 'samples/simple-ns.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 692, in test.test_xml_etree.iterparse Failed example: for action, elem in context: if action in ("start", "end"): print action, elem.tag else: print action, elem Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in for action, elem in context: NameError: name 'context' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 709, in test.test_xml_etree.iterparse Failed example: context = iterparse("samples/simple.xml", events) Expected: Traceback (most recent call last): ValueError: unknown event 'bogus' Got: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in context = iterparse("samples/simple.xml", events) File "", line 63, in __init__ IOError: [Errno 2] No such file or directory: 'samples/simple.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 567, in test.test_xml_etree.parsefile Failed example: tree = ET.parse("samples/simple.xml") Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in tree = ET.parse("samples/simple.xml") File "", line 56, in parse File "", line 25, in parse IOError: [Errno 2] No such file or directory: 'samples/simple.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 568, in test.test_xml_etree.parsefile Failed example: normalize_crlf(tree) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in normalize_crlf(tree) NameError: name 'tree' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 569, in test.test_xml_etree.parsefile Failed example: tree.write(sys.stdout) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in tree.write(sys.stdout) NameError: name 'tree' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 575, in test.test_xml_etree.parsefile Failed example: tree = ET.parse("samples/simple-ns.xml") Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in tree = ET.parse("samples/simple-ns.xml") File "", line 56, in parse File "", line 25, in parse IOError: [Errno 2] No such file or directory: 'samples/simple-ns.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 576, in test.test_xml_etree.parsefile Failed example: normalize_crlf(tree) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in normalize_crlf(tree) NameError: name 'tree' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 577, in test.test_xml_etree.parsefile Failed example: tree.write(sys.stdout) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in tree.write(sys.stdout) NameError: name 'tree' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 587, in test.test_xml_etree.parsefile Failed example: parser.feed(open("samples/simple.xml").read()) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in parser.feed(open("samples/simple.xml").read()) IOError: [Errno 2] No such file or directory: 'samples/simple.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 588, in test.test_xml_etree.parsefile Failed example: print serialize(parser.close()) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in print serialize(parser.close()) ParseError: no element found: line 1, column 0 ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 596, in test.test_xml_etree.parsefile Failed example: parser.feed(open("samples/simple.xml").read()) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in parser.feed(open("samples/simple.xml").read()) IOError: [Errno 2] No such file or directory: 'samples/simple.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 597, in test.test_xml_etree.parsefile Failed example: print serialize(parser.close()) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in print serialize(parser.close()) ParseError: no element found: line 1, column 0 ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 606, in test.test_xml_etree.parsefile Failed example: parser.feed(open("samples/simple.xml").read()) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in parser.feed(open("samples/simple.xml").read()) IOError: [Errno 2] No such file or directory: 'samples/simple.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 607, in test.test_xml_etree.parsefile Failed example: print serialize(parser.close()) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in print serialize(parser.close()) ParseError: no element found: line 1, column 0 ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 1361, in test.test_xml_etree.xinclude_default Failed example: ElementInclude.include(document) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in ElementInclude.include(document) File "/tmp/python-test/local/lib/python2.7/xml/etree/ElementInclude.py", line 111, in include node = loader(href, parse) File "/tmp/python-test/local/lib/python2.7/xml/etree/ElementInclude.py", line 78, in default_loader file = open(href) IOError: [Errno 2] No such file or directory: 'samples/simple.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 1362, in test.test_xml_etree.xinclude_default Failed example: print serialize(document) # default Expected:

    Example.

    text texttail
    Got:

    Example.

    ********************************************************************** 6 items had failures: 2 of 8 in test.test_xml_etree.custom_builder 3 of 8 in test.test_xml_etree.file_init 3 of 19 in test.test_xml_etree.getchildren 16 of 29 in test.test_xml_etree.iterparse 12 of 17 in test.test_xml_etree.parsefile 2 of 4 in test.test_xml_etree.xinclude_default ***Test Failed*** 38 failures. test test_xml_etree_c failed -- 38 of 591 doctests failed Re-running test 'test_xml_etree_c' in verbose mode doctest (test.test_xml_etree_c) ... 1 tests with zero failures ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 770, in test.test_xml_etree.custom_builder Failed example: parser.feed(open("samples/simple.xml", "r").read()) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in parser.feed(open("samples/simple.xml", "r").read()) IOError: [Errno 2] No such file or directory: 'samples/simple.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 793, in test.test_xml_etree.custom_builder Failed example: parser.feed(open("samples/simple-ns.xml", "r").read()) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in parser.feed(open("samples/simple-ns.xml", "r").read()) IOError: [Errno 2] No such file or directory: 'samples/simple-ns.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 421, in test.test_xml_etree.file_init Failed example: tree = ET.ElementTree(file="samples/simple.xml") Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in tree = ET.ElementTree(file="samples/simple.xml") File "/tmp/python-test/local/lib/python2.7/xml/etree/ElementTree.py", line 611, in __init__ self.parse(file) File "", line 25, in parse IOError: [Errno 2] No such file or directory: 'samples/simple.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 422, in test.test_xml_etree.file_init Failed example: tree.find("element").tag Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in tree.find("element").tag AttributeError: 'NoneType' object has no attribute 'tag' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 424, in test.test_xml_etree.file_init Failed example: tree.find("element/../empty-element").tag Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in tree.find("element/../empty-element").tag AttributeError: 'NoneType' object has no attribute 'tag' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 811, in test.test_xml_etree.getchildren Failed example: tree = ET.parse(open("samples/simple.xml", "r")) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in tree = ET.parse(open("samples/simple.xml", "r")) IOError: [Errno 2] No such file or directory: 'samples/simple.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 812, in test.test_xml_etree.getchildren Failed example: for elem in tree.getroot().iter(): summarize_list(elem.getchildren()) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in for elem in tree.getroot().iter(): NameError: name 'tree' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 818, in test.test_xml_etree.getchildren Failed example: for elem in tree.getiterator(): summarize_list(elem.getchildren()) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in for elem in tree.getiterator(): NameError: name 'tree' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 647, in test.test_xml_etree.iterparse Failed example: context = iterparse("samples/simple.xml") Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in context = iterparse("samples/simple.xml") File "", line 63, in __init__ IOError: [Errno 2] No such file or directory: 'samples/simple.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 648, in test.test_xml_etree.iterparse Failed example: action, elem = next(context) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in action, elem = next(context) NameError: name 'context' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 649, in test.test_xml_etree.iterparse Failed example: print action, elem.tag Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in print action, elem.tag NameError: name 'action' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 651, in test.test_xml_etree.iterparse Failed example: for action, elem in context: print action, elem.tag Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in for action, elem in context: NameError: name 'context' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 656, in test.test_xml_etree.iterparse Failed example: context.root.tag Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in context.root.tag NameError: name 'context' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 659, in test.test_xml_etree.iterparse Failed example: context = iterparse("samples/simple-ns.xml") Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in context = iterparse("samples/simple-ns.xml") File "", line 63, in __init__ IOError: [Errno 2] No such file or directory: 'samples/simple-ns.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 660, in test.test_xml_etree.iterparse Failed example: for action, elem in context: print action, elem.tag Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in for action, elem in context: NameError: name 'context' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 668, in test.test_xml_etree.iterparse Failed example: context = iterparse("samples/simple.xml", events) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in context = iterparse("samples/simple.xml", events) File "", line 63, in __init__ IOError: [Errno 2] No such file or directory: 'samples/simple.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 669, in test.test_xml_etree.iterparse Failed example: for action, elem in context: print action, elem.tag Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in for action, elem in context: NameError: name 'context' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 673, in test.test_xml_etree.iterparse Failed example: context = iterparse("samples/simple.xml", events=events) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in context = iterparse("samples/simple.xml", events=events) File "", line 63, in __init__ IOError: [Errno 2] No such file or directory: 'samples/simple.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 674, in test.test_xml_etree.iterparse Failed example: for action, elem in context: print action, elem.tag Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in for action, elem in context: NameError: name 'context' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 678, in test.test_xml_etree.iterparse Failed example: context = iterparse("samples/simple.xml", events) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in context = iterparse("samples/simple.xml", events) File "", line 63, in __init__ IOError: [Errno 2] No such file or directory: 'samples/simple.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 679, in test.test_xml_etree.iterparse Failed example: for action, elem in context: print action, elem.tag Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in for action, elem in context: NameError: name 'context' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 691, in test.test_xml_etree.iterparse Failed example: context = iterparse("samples/simple-ns.xml", events) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in context = iterparse("samples/simple-ns.xml", events) File "", line 63, in __init__ IOError: [Errno 2] No such file or directory: 'samples/simple-ns.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 692, in test.test_xml_etree.iterparse Failed example: for action, elem in context: if action in ("start", "end"): print action, elem.tag else: print action, elem Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in for action, elem in context: NameError: name 'context' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 709, in test.test_xml_etree.iterparse Failed example: context = iterparse("samples/simple.xml", events) Expected: Traceback (most recent call last): ValueError: unknown event 'bogus' Got: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in context = iterparse("samples/simple.xml", events) File "", line 63, in __init__ IOError: [Errno 2] No such file or directory: 'samples/simple.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 567, in test.test_xml_etree.parsefile Failed example: tree = ET.parse("samples/simple.xml") Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in tree = ET.parse("samples/simple.xml") File "", line 56, in parse File "", line 25, in parse IOError: [Errno 2] No such file or directory: 'samples/simple.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 568, in test.test_xml_etree.parsefile Failed example: normalize_crlf(tree) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in normalize_crlf(tree) NameError: name 'tree' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 569, in test.test_xml_etree.parsefile Failed example: tree.write(sys.stdout) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in tree.write(sys.stdout) NameError: name 'tree' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 575, in test.test_xml_etree.parsefile Failed example: tree = ET.parse("samples/simple-ns.xml") Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in tree = ET.parse("samples/simple-ns.xml") File "", line 56, in parse File "", line 25, in parse IOError: [Errno 2] No such file or directory: 'samples/simple-ns.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 576, in test.test_xml_etree.parsefile Failed example: normalize_crlf(tree) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in normalize_crlf(tree) NameError: name 'tree' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 577, in test.test_xml_etree.parsefile Failed example: tree.write(sys.stdout) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in tree.write(sys.stdout) NameError: name 'tree' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 587, in test.test_xml_etree.parsefile Failed example: parser.feed(open("samples/simple.xml").read()) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in parser.feed(open("samples/simple.xml").read()) IOError: [Errno 2] No such file or directory: 'samples/simple.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 588, in test.test_xml_etree.parsefile Failed example: print serialize(parser.close()) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in print serialize(parser.close()) ParseError: no element found: line 1, column 0 ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 596, in test.test_xml_etree.parsefile Failed example: parser.feed(open("samples/simple.xml").read()) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in parser.feed(open("samples/simple.xml").read()) IOError: [Errno 2] No such file or directory: 'samples/simple.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 597, in test.test_xml_etree.parsefile Failed example: print serialize(parser.close()) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in print serialize(parser.close()) ParseError: no element found: line 1, column 0 ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 606, in test.test_xml_etree.parsefile Failed example: parser.feed(open("samples/simple.xml").read()) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in parser.feed(open("samples/simple.xml").read()) IOError: [Errno 2] No such file or directory: 'samples/simple.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 607, in test.test_xml_etree.parsefile Failed example: print serialize(parser.close()) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in print serialize(parser.close()) ParseError: no element found: line 1, column 0 ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 1361, in test.test_xml_etree.xinclude_default Failed example: ElementInclude.include(document) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in ElementInclude.include(document) File "/tmp/python-test/local/lib/python2.7/xml/etree/ElementInclude.py", line 111, in include node = loader(href, parse) File "/tmp/python-test/local/lib/python2.7/xml/etree/ElementInclude.py", line 78, in default_loader file = open(href) IOError: [Errno 2] No such file or directory: 'samples/simple.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 1362, in test.test_xml_etree.xinclude_default Failed example: print serialize(document) # default Expected:

    Example.

    text texttail
    Got:

    Example.

    ********************************************************************** 6 items had failures: 2 of 8 in test.test_xml_etree.custom_builder 3 of 8 in test.test_xml_etree.file_init 3 of 19 in test.test_xml_etree.getchildren 16 of 29 in test.test_xml_etree.iterparse 12 of 17 in test.test_xml_etree.parsefile 2 of 4 in test.test_xml_etree.xinclude_default ***Test Failed*** 38 failures. test test_xml_etree_c failed -- 38 of 591 doctests failed test_xmllib test_xmlrpc test_xpickle test_xpickle -- skipping backwards compat tests. Use 'regrtest.py -u xpickle' to run them. test_xrange test_zipfile test_zipfile64 test_zipfile64 skipped -- test requires loads of disk-space bytes and a long time to run test_zipimport test_zipimport_support test_zlib 345 tests OK. 2 tests failed: test_xml_etree test_xml_etree_c 35 tests skipped: test_aepack test_al test_applesingle test_bsddb185 test_bsddb3 test_cd test_cl test_curses test_epoll test_gl test_imgfile test_ioctl test_kqueue test_linuxaudiodev test_macos test_macostools test_multiprocessing test_ossaudiodev test_py3kwarn test_scriptpackages test_smtpnet test_socketserver test_startfile test_sunaudiodev test_tcl test_timeout test_tk test_ttk_guionly test_ttk_textonly test_unicode_file test_urllib2net test_urllibnet test_winreg test_winsound test_zipfile64 6 skips unexpected on linux2: test_multiprocessing test_ttk_guionly test_epoll test_tk test_ioctl test_ttk_textonly [946448 refs] From python-checkins at python.org Sat Mar 13 10:48:40 2010 From: python-checkins at python.org (mark.dickinson) Date: Sat, 13 Mar 2010 10:48:40 +0100 (CET) Subject: [Python-checkins] r78902 - in python/branches/py3k: Doc/library/stdtypes.rst Lib/test/test_complex.py Misc/NEWS Objects/complexobject.c Message-ID: <20100313094840.1A13BE3C1@mail.python.org> Author: mark.dickinson Date: Sat Mar 13 10:48:39 2010 New Revision: 78902 Log: Issue #7845: Make 1j.__le__(2j) return NotImplemented rather than raising TypeError. Modified: python/branches/py3k/Doc/library/stdtypes.rst python/branches/py3k/Lib/test/test_complex.py python/branches/py3k/Misc/NEWS python/branches/py3k/Objects/complexobject.c Modified: python/branches/py3k/Doc/library/stdtypes.rst ============================================================================== --- python/branches/py3k/Doc/library/stdtypes.rst (original) +++ python/branches/py3k/Doc/library/stdtypes.rst Sat Mar 13 10:48:39 2010 @@ -168,8 +168,9 @@ Furthermore, some types (for example, function objects) support only a degenerate notion of comparison where any two objects of that type are unequal. The ``<``, ``<=``, ``>`` and ``>=`` operators will raise a :exc:`TypeError` exception when -any operand is a complex number, the objects are of different types that cannot -be compared, or other cases where there is no defined ordering. +comparing a complex number with another built-in numeric type, when the objects +are of different types that cannot be compared, or in other cases where there is +no defined ordering. .. index:: single: __eq__() (instance method) Modified: python/branches/py3k/Lib/test/test_complex.py ============================================================================== --- python/branches/py3k/Lib/test/test_complex.py (original) +++ python/branches/py3k/Lib/test/test_complex.py Sat Mar 13 10:48:39 2010 @@ -3,6 +3,7 @@ from random import random from math import atan2, isnan, copysign +import operator INF = float("inf") NAN = float("nan") @@ -110,15 +111,23 @@ def test_richcompare(self): self.assertRaises(OverflowError, complex.__eq__, 1+1j, 1<<10000) - self.assertEqual(complex.__lt__(1+1j, None), NotImplemented) + self.assertIs(complex.__lt__(1+1j, None), NotImplemented) self.assertIs(complex.__eq__(1+1j, 1+1j), True) self.assertIs(complex.__eq__(1+1j, 2+2j), False) self.assertIs(complex.__ne__(1+1j, 1+1j), False) self.assertIs(complex.__ne__(1+1j, 2+2j), True) - self.assertRaises(TypeError, complex.__lt__, 1+1j, 2+2j) - self.assertRaises(TypeError, complex.__le__, 1+1j, 2+2j) - self.assertRaises(TypeError, complex.__gt__, 1+1j, 2+2j) - self.assertRaises(TypeError, complex.__ge__, 1+1j, 2+2j) + self.assertIs(complex.__lt__(1+1j, 2+2j), NotImplemented) + self.assertIs(complex.__le__(1+1j, 2+2j), NotImplemented) + self.assertIs(complex.__gt__(1+1j, 2+2j), NotImplemented) + self.assertIs(complex.__ge__(1+1j, 2+2j), NotImplemented) + self.assertRaises(TypeError, operator.lt, 1+1j, 2+2j) + self.assertRaises(TypeError, operator.le, 1+1j, 2+2j) + self.assertRaises(TypeError, operator.gt, 1+1j, 2+2j) + self.assertRaises(TypeError, operator.ge, 1+1j, 2+2j) + self.assertIs(operator.eq(1+1j, 1+1j), True) + self.assertIs(operator.eq(1+1j, 2+2j), False) + self.assertIs(operator.ne(1+1j, 1+1j), False) + self.assertIs(operator.ne(1+1j, 2+2j), True) def test_mod(self): # % is no longer supported on complex numbers Modified: python/branches/py3k/Misc/NEWS ============================================================================== --- python/branches/py3k/Misc/NEWS (original) +++ python/branches/py3k/Misc/NEWS Sat Mar 13 10:48:39 2010 @@ -12,6 +12,11 @@ Core and Builtins ----------------- +- Issue #7845: Rich comparison methods on the complex type now return + NotImplemented rather than raising a TypeError when comparing with an + incompatible type; this allows user-defined classes to implement their own + comparisons with complex. + - Issue #3137: Don't ignore errors at startup, especially a keyboard interrupt (SIGINT). If an error occurs while importing the site module, the error is printed and Python exits. Initialize the GIL before importing the site Modified: python/branches/py3k/Objects/complexobject.c ============================================================================== --- python/branches/py3k/Objects/complexobject.c (original) +++ python/branches/py3k/Objects/complexobject.c Sat Mar 13 10:48:39 2010 @@ -625,10 +625,8 @@ TO_COMPLEX(w, j); if (op != Py_EQ && op != Py_NE) { - /* XXX Should eventually return NotImplemented */ - PyErr_SetString(PyExc_TypeError, - "no ordering relation is defined for complex numbers"); - return NULL; + Py_INCREF(Py_NotImplemented); + return Py_NotImplemented; } if ((i.real == j.real && i.imag == j.imag) == (op == Py_EQ)) From python-checkins at python.org Sat Mar 13 10:49:51 2010 From: python-checkins at python.org (mark.dickinson) Date: Sat, 13 Mar 2010 10:49:51 +0100 (CET) Subject: [Python-checkins] r78903 - python/branches/release31-maint Message-ID: <20100313094951.D9017EBA4@mail.python.org> Author: mark.dickinson Date: Sat Mar 13 10:49:51 2010 New Revision: 78903 Log: Blocked revisions 78902 via svnmerge ........ r78902 | mark.dickinson | 2010-03-13 09:48:39 +0000 (Sat, 13 Mar 2010) | 2 lines Issue #7845: Make 1j.__le__(2j) return NotImplemented rather than raising TypeError. ........ Modified: python/branches/release31-maint/ (props changed) From python-checkins at python.org Sat Mar 13 11:01:12 2010 From: python-checkins at python.org (georg.brandl) Date: Sat, 13 Mar 2010 11:01:12 +0100 (CET) Subject: [Python-checkins] r78904 - python/branches/release31-maint Message-ID: <20100313100112.ABED9F4F6@mail.python.org> Author: georg.brandl Date: Sat Mar 13 11:01:12 2010 New Revision: 78904 Log: Blocked revisions 78804 via svnmerge ................ r78804 | r.david.murray | 2010-03-08 18:48:38 +0100 (Mo, 08 M?r 2010) | 13 lines Merged revisions 78416,78430 via svnmerge from svn+ssh://pythondev at svn.python.org/python/trunk ........ r78416 | dirkjan.ochtman | 2010-02-23 23:12:11 -0500 (Tue, 23 Feb 2010) | 1 line Issue #8004: add a serve target to the Doc Makefile. ........ r78430 | dirkjan.ochtman | 2010-02-24 12:06:31 -0500 (Wed, 24 Feb 2010) | 1 line Add some notes about Tools/scripts/serve.py. ........ ................ Modified: python/branches/release31-maint/ (props changed) From python-checkins at python.org Sat Mar 13 11:01:17 2010 From: python-checkins at python.org (georg.brandl) Date: Sat, 13 Mar 2010 11:01:17 +0100 (CET) Subject: [Python-checkins] r78905 - python/branches/release26-maint Message-ID: <20100313100117.CEA95F689@mail.python.org> Author: georg.brandl Date: Sat Mar 13 11:01:17 2010 New Revision: 78905 Log: Blocked revisions 78416 via svnmerge ........ r78416 | dirkjan.ochtman | 2010-02-24 05:12:11 +0100 (Mi, 24 Feb 2010) | 1 line Issue #8004: add a serve target to the Doc Makefile. ........ Modified: python/branches/release26-maint/ (props changed) From python-checkins at python.org Sat Mar 13 11:02:01 2010 From: python-checkins at python.org (georg.brandl) Date: Sat, 13 Mar 2010 11:02:01 +0100 (CET) Subject: [Python-checkins] r78906 - in python/branches/release31-maint: Doc/Makefile Doc/README.txt Doc/make.bat Message-ID: <20100313100201.D2C74F4F6@mail.python.org> Author: georg.brandl Date: Sat Mar 13 11:02:01 2010 New Revision: 78906 Log: Merged revisions 77173 via svnmerge from svn+ssh://svn.python.org/python/branches/py3k ................ r77173 | benjamin.peterson | 2009-12-31 04:35:15 +0100 (Do, 31 Dez 2009) | 13 lines Merged revisions 77151-77152 via svnmerge from svn+ssh://pythondev at svn.python.org/python/trunk ........ r77151 | georg.brandl | 2009-12-30 12:32:50 -0600 (Wed, 30 Dec 2009) | 1 line #7487: update Pygments version. ........ r77152 | georg.brandl | 2009-12-30 12:36:09 -0600 (Wed, 30 Dec 2009) | 1 line #7602: improve "clean" and "checkout" targets now that all tools are in externals. ........ ................ Modified: python/branches/release31-maint/ (props changed) python/branches/release31-maint/Doc/Makefile python/branches/release31-maint/Doc/README.txt python/branches/release31-maint/Doc/make.bat Modified: python/branches/release31-maint/Doc/Makefile ============================================================================== --- python/branches/release31-maint/Doc/Makefile (original) +++ python/branches/release31-maint/Doc/Makefile Sat Mar 13 11:02:01 2010 @@ -47,11 +47,7 @@ svn checkout $(SVNROOT)/external/Pygments-1.1.1/pygments tools/pygments; \ fi -update: checkout - svn update tools/sphinx - svn update tools/docutils - svn update tools/jinja2 - svn update tools/pygments +update: clean checkout build: checkout mkdir -p build/$(BUILDER) build/doctrees @@ -111,6 +107,9 @@ clean: -rm -rf build/* -rm -rf tools/sphinx + -rm -rf tools/pygments + -rm -rf tools/jinja2 + -rm -rf tools/docutils dist: -rm -rf dist Modified: python/branches/release31-maint/Doc/README.txt ============================================================================== --- python/branches/release31-maint/Doc/README.txt (original) +++ python/branches/release31-maint/Doc/README.txt Sat Mar 13 11:02:01 2010 @@ -95,7 +95,7 @@ You can optionally also install Pygments, either as a checkout via :: - svn co http://svn.python.org/projects/external/Pygments-0.11.1/pygments tools/pygments + svn co http://svn.python.org/projects/external/Pygments-1.1.1/pygments tools/pygments or from PyPI at http://pypi.python.org/pypi/Pygments. Modified: python/branches/release31-maint/Doc/make.bat ============================================================================== --- python/branches/release31-maint/Doc/make.bat (original) +++ python/branches/release31-maint/Doc/make.bat Sat Mar 13 11:02:01 2010 @@ -37,7 +37,7 @@ svn co %SVNROOT%/external/Sphinx-0.6.3/sphinx tools/sphinx svn co %SVNROOT%/external/docutils-0.5/docutils tools/docutils svn co %SVNROOT%/external/Jinja-2.1.1/jinja2 tools/jinja2 -svn co %SVNROOT%/external/Pygments-0.11.1/pygments tools/pygments +svn co %SVNROOT%/external/Pygments-1.1.1/pygments tools/pygments goto end :update From python-checkins at python.org Sat Mar 13 11:02:10 2010 From: python-checkins at python.org (georg.brandl) Date: Sat, 13 Mar 2010 11:02:10 +0100 (CET) Subject: [Python-checkins] r78907 - in python/branches/release26-maint: Doc/Makefile Message-ID: <20100313100210.0E603F6E8@mail.python.org> Author: georg.brandl Date: Sat Mar 13 11:02:09 2010 New Revision: 78907 Log: Merged revisions 77152 via svnmerge from svn+ssh://pythondev at svn.python.org/python/trunk ........ r77152 | georg.brandl | 2009-12-30 19:36:09 +0100 (Mi, 30 Dez 2009) | 1 line #7602: improve "clean" and "checkout" targets now that all tools are in externals. ........ Modified: python/branches/release26-maint/ (props changed) python/branches/release26-maint/Doc/Makefile Modified: python/branches/release26-maint/Doc/Makefile ============================================================================== --- python/branches/release26-maint/Doc/Makefile (original) +++ python/branches/release26-maint/Doc/Makefile Sat Mar 13 11:02:09 2010 @@ -47,11 +47,7 @@ svn checkout $(SVNROOT)/external/Pygments-1.1.1/pygments tools/pygments; \ fi -update: checkout - svn update tools/sphinx - svn update tools/docutils - svn update tools/jinja2 - svn update tools/pygments +update: clean checkout build: checkout mkdir -p build/$(BUILDER) build/doctrees @@ -111,6 +107,9 @@ clean: -rm -rf build/* -rm -rf tools/sphinx + -rm -rf tools/pygments + -rm -rf tools/jinja2 + -rm -rf tools/docutils dist: -rm -rf dist From python-checkins at python.org Sat Mar 13 11:12:39 2010 From: python-checkins at python.org (georg.brandl) Date: Sat, 13 Mar 2010 11:12:39 +0100 (CET) Subject: [Python-checkins] r78908 - in python/trunk/Doc: Makefile tools/dailybuild.py Message-ID: <20100313101239.EDEA2F4F6@mail.python.org> Author: georg.brandl Date: Sat Mar 13 11:12:39 2010 New Revision: 78908 Log: Add Makefile targets for automatic doc build. Add script that will be used for daily build. Added: python/trunk/Doc/tools/dailybuild.py (contents, props changed) Modified: python/trunk/Doc/ (props changed) python/trunk/Doc/Makefile Modified: python/trunk/Doc/Makefile ============================================================================== --- python/trunk/Doc/Makefile (original) +++ python/trunk/Doc/Makefile Sat Mar 13 11:12:39 2010 @@ -14,20 +14,27 @@ ALLSPHINXOPTS = -b $(BUILDER) -d build/doctrees -D latex_paper_size=$(PAPER) \ $(SPHINXOPTS) . build/$(BUILDER) $(SOURCES) -.PHONY: help checkout update build html htmlhelp clean coverage dist check +.PHONY: help checkout update build html htmlhelp latex text changes linkcheck \ + suspicious coverage doctest pydoc-topics htmlview clean dist check serve \ + autobuild-dev autobuild-stable help: @echo "Please use \`make ' where is one of" - @echo " html to make standalone HTML files" - @echo " htmlhelp to make HTML files and a HTML help project" - @echo " latex to make LaTeX files, you can set PAPER=a4 or PAPER=letter" - @echo " text to make plain text files" - @echo " changes to make an overview over all changed/added/deprecated items" - @echo " linkcheck to check all external links for integrity" + @echo " clean to remove build files" + @echo " update to update build tools" + @echo " html to make standalone HTML files" + @echo " htmlhelp to make HTML files and a HTML help project" + @echo " latex to make LaTeX files, you can set PAPER=a4 or PAPER=letter" + @echo " text to make plain text files" + @echo " changes to make an overview over all changed/added/deprecated items" + @echo " linkcheck to check all external links for integrity" + @echo " coverage to check documentation coverage for library and C API" + @echo " doctest to run doctests in the documentation" + @echo " pydoc-topics to regenerate the pydoc topics file" + @echo " dist to create a \"dist\" directory with archived docs for download" @echo " suspicious to check for suspicious markup in output text" - @echo " coverage to check documentation coverage for library and C API" - @echo " dist to create a \"dist\" directory with archived docs for download" - @echo " serve to serve the documentation on the localhost (8000)" + @echo " check to run a check for frequent markup errors" + @echo " serve to serve the documentation on the localhost (8000)" # Note: if you update versions here, do the same in make.bat and README.txt checkout: @@ -153,3 +160,17 @@ serve: ../Tools/scripts/serve.py build/html + +# Targets for automatic doc build + +# for development releases: always build +autobuild-dev: + make update + make dist + +# for stable releases: only build if not in development mode +autobuild-stable: + @case $(DISTVERSION) in *[abc]*) \ + echo "Not building; not a release version."; exit 1;; \ + esac + @make autobuild-dev Added: python/trunk/Doc/tools/dailybuild.py ============================================================================== --- (empty file) +++ python/trunk/Doc/tools/dailybuild.py Sat Mar 13 11:12:39 2010 @@ -0,0 +1,81 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- + +# Runs the daily build of the Python docs on dinsdale.python.org. +# +# Usages: +# +# dailybuild.py +# +# without any arguments builds docs for all branches configured in the global +# BRANCHES value. +# +# dailybuild.py [-d] +# +# builds one version, where is an SVN checkout directory of the +# Python branch to build docs for, and is the directory where the +# result should be placed. If -d is given, the docs are built even if the +# branch is in development mode (i.e. version contains a, b or c). +# +# This script is not run from the checkout, so if you want to change how the +# daily build is run, you must replace it on dinsdale. This is necessary, for +# example, after the release of a new minor version. +# +# 03/2010, Georg Brandl + +import os +import sys +import getopt + + +BUILDROOT = '/home/gbrandl/docbuild' +WWWROOT = '/data/ftp.python.org/pub/docs.python.org' + +BRANCHES = [ + # checkout, target, isdev + (BUILDROOT + '/python26', WWWROOT, False), + (BUILDROOT + '/python31', WWWROOT + '/py3k', False), + (BUILDROOT + '/python27', WWWROOT + '/dev', True), + (BUILDROOT + '/python32', WWWROOT + '/dev/py3k', True), +] + + +def build_one(checkout, target, isdev): + print 'Doc autobuild started in %s' % checkout + os.chdir(checkout) + print 'Running svn update' + os.system('svn update') + print 'Running make autobuild' + if os.WEXITSTATUS(os.system( + 'cd Doc; make autobuild-%s' % (isdev and 'dev' or 'stable'))) == 2: + print '*' * 80 + return + print 'Copying HTML files' + os.system('cp -a Doc/build/html/* %s' % target) + print 'Copying dist files' + os.system('cp -a Doc/dist %s/dist' % target) + print 'Finished' + print '=' * 80 + +def usage(): + print 'Usage:' + print ' %s' % sys.argv[0] + print 'or' + print ' %s [-d] ' % sys.argv[0] + sys.exit(1) + + +if __name__ == '__main__': + try: + opts, args = getopt.getopt(sys.argv[1:], 'd') + except getopt.error: + usage() + if opts and not args: + usage() + if args: + if len(args) != 2: + usage() + build_one(args[0], args[1], bool(opts)) + else: + for branch in BRANCHES: + build_one(*branch) From python-checkins at python.org Sat Mar 13 11:54:12 2010 From: python-checkins at python.org (georg.brandl) Date: Sat, 13 Mar 2010 11:54:12 +0100 (CET) Subject: [Python-checkins] r78910 - in python/trunk/Doc: Makefile README.txt make.bat Message-ID: <20100313105412.E743ADF81@mail.python.org> Author: georg.brandl Date: Sat Mar 13 11:54:12 2010 New Revision: 78910 Log: Bump externals versions for doc build. Modified: python/trunk/Doc/Makefile python/trunk/Doc/README.txt python/trunk/Doc/make.bat Modified: python/trunk/Doc/Makefile ============================================================================== --- python/trunk/Doc/Makefile (original) +++ python/trunk/Doc/Makefile Sat Mar 13 11:54:12 2010 @@ -40,19 +40,19 @@ checkout: @if [ ! -d tools/sphinx ]; then \ echo "Checking out Sphinx..."; \ - svn checkout $(SVNROOT)/external/Sphinx-0.6.3/sphinx tools/sphinx; \ + svn checkout $(SVNROOT)/external/Sphinx-0.6.5/sphinx tools/sphinx; \ fi @if [ ! -d tools/docutils ]; then \ echo "Checking out Docutils..."; \ - svn checkout $(SVNROOT)/external/docutils-0.5/docutils tools/docutils; \ + svn checkout $(SVNROOT)/external/docutils-0.6/docutils tools/docutils; \ fi @if [ ! -d tools/jinja2 ]; then \ echo "Checking out Jinja..."; \ - svn checkout $(SVNROOT)/external/Jinja-2.1.1/jinja2 tools/jinja2; \ + svn checkout $(SVNROOT)/external/Jinja-2.3.1/jinja2 tools/jinja2; \ fi @if [ ! -d tools/pygments ]; then \ echo "Checking out Pygments..."; \ - svn checkout $(SVNROOT)/external/Pygments-1.1.1/pygments tools/pygments; \ + svn checkout $(SVNROOT)/external/Pygments-1.3.1/pygments tools/pygments; \ fi update: clean checkout Modified: python/trunk/Doc/README.txt ============================================================================== --- python/trunk/Doc/README.txt (original) +++ python/trunk/Doc/README.txt Sat Mar 13 11:54:12 2010 @@ -72,25 +72,27 @@ Without make ------------ -You'll need to checkout the Sphinx package to the `tools/` directory:: +You'll need to install the Sphinx package, either by checking it out via :: - svn co http://svn.python.org/projects/external/Sphinx-0.6.1/sphinx tools/sphinx + svn co http://svn.python.org/projects/external/Sphinx-0.6.5/sphinx tools/sphinx + +or by installing it from PyPI. Then, you need to install Docutils, either by checking it out via :: - svn co http://svn.python.org/projects/external/docutils-0.5/docutils tools/docutils + svn co http://svn.python.org/projects/external/docutils-0.6/docutils tools/docutils or by installing it from http://docutils.sf.net/. You also need Jinja2, either by checking it out via :: - svn co http://svn.python.org/projects/external/Jinja-2.1.1/jinja2 tools/jinja2 + svn co http://svn.python.org/projects/external/Jinja-2.3.1/jinja2 tools/jinja2 or by installing it from PyPI. You can optionally also install Pygments, either as a checkout via :: - svn co http://svn.python.org/projects/external/Pygments-1.1.1/pygments tools/pygments + svn co http://svn.python.org/projects/external/Pygments-1.3.1/pygments tools/pygments or from PyPI at http://pypi.python.org/pypi/Pygments. Modified: python/trunk/Doc/make.bat ============================================================================== --- python/trunk/Doc/make.bat (original) +++ python/trunk/Doc/make.bat Sat Mar 13 11:54:12 2010 @@ -34,10 +34,10 @@ goto end :checkout -svn co %SVNROOT%/external/Sphinx-0.6.3/sphinx tools/sphinx -svn co %SVNROOT%/external/docutils-0.5/docutils tools/docutils -svn co %SVNROOT%/external/Jinja-2.1.1/jinja2 tools/jinja2 -svn co %SVNROOT%/external/Pygments-1.1.1/pygments tools/pygments +svn co %SVNROOT%/external/Sphinx-0.6.5/sphinx tools/sphinx +svn co %SVNROOT%/external/docutils-0.6/docutils tools/docutils +svn co %SVNROOT%/external/Jinja-2.3.1/jinja2 tools/jinja2 +svn co %SVNROOT%/external/Pygments-1.3.1/pygments tools/pygments goto end :update From python-checkins at python.org Sat Mar 13 11:56:09 2010 From: python-checkins at python.org (georg.brandl) Date: Sat, 13 Mar 2010 11:56:09 +0100 (CET) Subject: [Python-checkins] r78911 - in python/branches/py3k: Doc/Makefile Doc/README.txt Doc/make.bat Message-ID: <20100313105609.9E919E27C@mail.python.org> Author: georg.brandl Date: Sat Mar 13 11:56:09 2010 New Revision: 78911 Log: Merged revisions 78910 via svnmerge from svn+ssh://pythondev at svn.python.org/python/trunk ........ r78910 | georg.brandl | 2010-03-13 11:54:12 +0100 (Sa, 13 M?r 2010) | 1 line Bump externals versions for doc build. ........ Modified: python/branches/py3k/ (props changed) python/branches/py3k/Doc/Makefile python/branches/py3k/Doc/README.txt python/branches/py3k/Doc/make.bat Modified: python/branches/py3k/Doc/Makefile ============================================================================== --- python/branches/py3k/Doc/Makefile (original) +++ python/branches/py3k/Doc/Makefile Sat Mar 13 11:56:09 2010 @@ -33,19 +33,19 @@ checkout: @if [ ! -d tools/sphinx ]; then \ echo "Checking out Sphinx..."; \ - svn checkout $(SVNROOT)/external/Sphinx-0.6.3/sphinx tools/sphinx; \ + svn checkout $(SVNROOT)/external/Sphinx-0.6.5/sphinx tools/sphinx; \ fi @if [ ! -d tools/docutils ]; then \ echo "Checking out Docutils..."; \ - svn checkout $(SVNROOT)/external/docutils-0.5/docutils tools/docutils; \ + svn checkout $(SVNROOT)/external/docutils-0.6/docutils tools/docutils; \ fi @if [ ! -d tools/jinja2 ]; then \ echo "Checking out Jinja..."; \ - svn checkout $(SVNROOT)/external/Jinja-2.1.1/jinja2 tools/jinja2; \ + svn checkout $(SVNROOT)/external/Jinja-2.3.1/jinja2 tools/jinja2; \ fi @if [ ! -d tools/pygments ]; then \ echo "Checking out Pygments..."; \ - svn checkout $(SVNROOT)/external/Pygments-1.1.1/pygments tools/pygments; \ + svn checkout $(SVNROOT)/external/Pygments-1.3.1/pygments tools/pygments; \ fi update: clean checkout Modified: python/branches/py3k/Doc/README.txt ============================================================================== --- python/branches/py3k/Doc/README.txt (original) +++ python/branches/py3k/Doc/README.txt Sat Mar 13 11:56:09 2010 @@ -77,25 +77,27 @@ Without make ------------ -You'll need to checkout the Sphinx package to the `tools/` directory:: +You'll need to install the Sphinx package, either by checking it out via :: - svn co http://svn.python.org/projects/external/Sphinx-0.6.1/sphinx tools/sphinx + svn co http://svn.python.org/projects/external/Sphinx-0.6.5/sphinx tools/sphinx + +or by installing it from PyPI. Then, you need to install Docutils, either by checking it out via :: - svn co http://svn.python.org/projects/external/docutils-0.5/docutils tools/docutils + svn co http://svn.python.org/projects/external/docutils-0.6/docutils tools/docutils or by installing it from http://docutils.sf.net/. You also need Jinja2, either by checking it out via :: - svn co http://svn.python.org/projects/external/Jinja-2.1.1/jinja2 tools/jinja2 + svn co http://svn.python.org/projects/external/Jinja-2.3.1/jinja2 tools/jinja2 or by installing it from PyPI. You can optionally also install Pygments, either as a checkout via :: - svn co http://svn.python.org/projects/external/Pygments-1.1.1/pygments tools/pygments + svn co http://svn.python.org/projects/external/Pygments-1.3.1/pygments tools/pygments or from PyPI at http://pypi.python.org/pypi/Pygments. Modified: python/branches/py3k/Doc/make.bat ============================================================================== --- python/branches/py3k/Doc/make.bat (original) +++ python/branches/py3k/Doc/make.bat Sat Mar 13 11:56:09 2010 @@ -34,10 +34,10 @@ goto end :checkout -svn co %SVNROOT%/external/Sphinx-0.6.3/sphinx tools/sphinx -svn co %SVNROOT%/external/docutils-0.5/docutils tools/docutils -svn co %SVNROOT%/external/Jinja-2.1.1/jinja2 tools/jinja2 -svn co %SVNROOT%/external/Pygments-1.1.1/pygments tools/pygments +svn co %SVNROOT%/external/Sphinx-0.6.5/sphinx tools/sphinx +svn co %SVNROOT%/external/docutils-0.6/docutils tools/docutils +svn co %SVNROOT%/external/Jinja-2.3.1/jinja2 tools/jinja2 +svn co %SVNROOT%/external/Pygments-1.3.1/pygments tools/pygments goto end :update From python-checkins at python.org Sat Mar 13 11:57:09 2010 From: python-checkins at python.org (georg.brandl) Date: Sat, 13 Mar 2010 11:57:09 +0100 (CET) Subject: [Python-checkins] r78912 - in python/branches/release31-maint: Doc/Makefile Doc/README.txt Doc/make.bat Message-ID: <20100313105709.AA7F7E229@mail.python.org> Author: georg.brandl Date: Sat Mar 13 11:57:09 2010 New Revision: 78912 Log: Merged revisions 78911 via svnmerge from svn+ssh://svn.python.org/python/branches/py3k ................ r78911 | georg.brandl | 2010-03-13 11:56:09 +0100 (Sa, 13 M?r 2010) | 9 lines Merged revisions 78910 via svnmerge from svn+ssh://pythondev at svn.python.org/python/trunk ........ r78910 | georg.brandl | 2010-03-13 11:54:12 +0100 (Sa, 13 M?r 2010) | 1 line Bump externals versions for doc build. ........ ................ Modified: python/branches/release31-maint/ (props changed) python/branches/release31-maint/Doc/Makefile python/branches/release31-maint/Doc/README.txt python/branches/release31-maint/Doc/make.bat Modified: python/branches/release31-maint/Doc/Makefile ============================================================================== --- python/branches/release31-maint/Doc/Makefile (original) +++ python/branches/release31-maint/Doc/Makefile Sat Mar 13 11:57:09 2010 @@ -32,19 +32,19 @@ checkout: @if [ ! -d tools/sphinx ]; then \ echo "Checking out Sphinx..."; \ - svn checkout $(SVNROOT)/external/Sphinx-0.6.3/sphinx tools/sphinx; \ + svn checkout $(SVNROOT)/external/Sphinx-0.6.5/sphinx tools/sphinx; \ fi @if [ ! -d tools/docutils ]; then \ echo "Checking out Docutils..."; \ - svn checkout $(SVNROOT)/external/docutils-0.5/docutils tools/docutils; \ + svn checkout $(SVNROOT)/external/docutils-0.6/docutils tools/docutils; \ fi @if [ ! -d tools/jinja2 ]; then \ echo "Checking out Jinja..."; \ - svn checkout $(SVNROOT)/external/Jinja-2.1.1/jinja2 tools/jinja2; \ + svn checkout $(SVNROOT)/external/Jinja-2.3.1/jinja2 tools/jinja2; \ fi @if [ ! -d tools/pygments ]; then \ echo "Checking out Pygments..."; \ - svn checkout $(SVNROOT)/external/Pygments-1.1.1/pygments tools/pygments; \ + svn checkout $(SVNROOT)/external/Pygments-1.3.1/pygments tools/pygments; \ fi update: clean checkout Modified: python/branches/release31-maint/Doc/README.txt ============================================================================== --- python/branches/release31-maint/Doc/README.txt (original) +++ python/branches/release31-maint/Doc/README.txt Sat Mar 13 11:57:09 2010 @@ -77,25 +77,27 @@ Without make ------------ -You'll need to checkout the Sphinx package to the `tools/` directory:: +You'll need to install the Sphinx package, either by checking it out via :: - svn co http://svn.python.org/projects/external/Sphinx-0.6.1/sphinx tools/sphinx + svn co http://svn.python.org/projects/external/Sphinx-0.6.5/sphinx tools/sphinx + +or by installing it from PyPI. Then, you need to install Docutils, either by checking it out via :: - svn co http://svn.python.org/projects/external/docutils-0.5/docutils tools/docutils + svn co http://svn.python.org/projects/external/docutils-0.6/docutils tools/docutils or by installing it from http://docutils.sf.net/. You also need Jinja2, either by checking it out via :: - svn co http://svn.python.org/projects/external/Jinja-2.1.1/jinja2 tools/jinja2 + svn co http://svn.python.org/projects/external/Jinja-2.3.1/jinja2 tools/jinja2 or by installing it from PyPI. You can optionally also install Pygments, either as a checkout via :: - svn co http://svn.python.org/projects/external/Pygments-1.1.1/pygments tools/pygments + svn co http://svn.python.org/projects/external/Pygments-1.3.1/pygments tools/pygments or from PyPI at http://pypi.python.org/pypi/Pygments. Modified: python/branches/release31-maint/Doc/make.bat ============================================================================== --- python/branches/release31-maint/Doc/make.bat (original) +++ python/branches/release31-maint/Doc/make.bat Sat Mar 13 11:57:09 2010 @@ -34,10 +34,10 @@ goto end :checkout -svn co %SVNROOT%/external/Sphinx-0.6.3/sphinx tools/sphinx -svn co %SVNROOT%/external/docutils-0.5/docutils tools/docutils -svn co %SVNROOT%/external/Jinja-2.1.1/jinja2 tools/jinja2 -svn co %SVNROOT%/external/Pygments-1.1.1/pygments tools/pygments +svn co %SVNROOT%/external/Sphinx-0.6.5/sphinx tools/sphinx +svn co %SVNROOT%/external/docutils-0.6/docutils tools/docutils +svn co %SVNROOT%/external/Jinja-2.3.1/jinja2 tools/jinja2 +svn co %SVNROOT%/external/Pygments-1.3.1/pygments tools/pygments goto end :update From python-checkins at python.org Sat Mar 13 11:59:09 2010 From: python-checkins at python.org (georg.brandl) Date: Sat, 13 Mar 2010 11:59:09 +0100 (CET) Subject: [Python-checkins] r78913 - in python/branches/release26-maint: Doc/Makefile Doc/README.txt Doc/make.bat Message-ID: <20100313105909.DF388F6CB@mail.python.org> Author: georg.brandl Date: Sat Mar 13 11:59:09 2010 New Revision: 78913 Log: Merged revisions 78910 via svnmerge from svn+ssh://pythondev at svn.python.org/python/trunk ........ r78910 | georg.brandl | 2010-03-13 11:54:12 +0100 (Sa, 13 M?r 2010) | 1 line Bump externals versions for doc build. ........ Modified: python/branches/release26-maint/ (props changed) python/branches/release26-maint/Doc/Makefile python/branches/release26-maint/Doc/README.txt python/branches/release26-maint/Doc/make.bat Modified: python/branches/release26-maint/Doc/Makefile ============================================================================== --- python/branches/release26-maint/Doc/Makefile (original) +++ python/branches/release26-maint/Doc/Makefile Sat Mar 13 11:59:09 2010 @@ -32,19 +32,19 @@ checkout: @if [ ! -d tools/sphinx ]; then \ echo "Checking out Sphinx..."; \ - svn checkout $(SVNROOT)/external/Sphinx-0.6.3/sphinx tools/sphinx; \ + svn checkout $(SVNROOT)/external/Sphinx-0.6.5/sphinx tools/sphinx; \ fi @if [ ! -d tools/docutils ]; then \ echo "Checking out Docutils..."; \ - svn checkout $(SVNROOT)/external/docutils-0.5/docutils tools/docutils; \ + svn checkout $(SVNROOT)/external/docutils-0.6/docutils tools/docutils; \ fi @if [ ! -d tools/jinja2 ]; then \ echo "Checking out Jinja..."; \ - svn checkout $(SVNROOT)/external/Jinja-2.1.1/jinja2 tools/jinja2; \ + svn checkout $(SVNROOT)/external/Jinja-2.3.1/jinja2 tools/jinja2; \ fi @if [ ! -d tools/pygments ]; then \ echo "Checking out Pygments..."; \ - svn checkout $(SVNROOT)/external/Pygments-1.1.1/pygments tools/pygments; \ + svn checkout $(SVNROOT)/external/Pygments-1.3.1/pygments tools/pygments; \ fi update: clean checkout Modified: python/branches/release26-maint/Doc/README.txt ============================================================================== --- python/branches/release26-maint/Doc/README.txt (original) +++ python/branches/release26-maint/Doc/README.txt Sat Mar 13 11:59:09 2010 @@ -72,25 +72,27 @@ Without make ------------ -You'll need to checkout the Sphinx package to the `tools/` directory:: +You'll need to install the Sphinx package, either by checking it out via :: - svn co http://svn.python.org/projects/external/Sphinx-0.6.1/sphinx tools/sphinx + svn co http://svn.python.org/projects/external/Sphinx-0.6.5/sphinx tools/sphinx + +or by installing it from PyPI. Then, you need to install Docutils, either by checking it out via :: - svn co http://svn.python.org/projects/external/docutils-0.5/docutils tools/docutils + svn co http://svn.python.org/projects/external/docutils-0.6/docutils tools/docutils or by installing it from http://docutils.sf.net/. You also need Jinja2, either by checking it out via :: - svn co http://svn.python.org/projects/external/Jinja-2.1.1/jinja2 tools/jinja2 + svn co http://svn.python.org/projects/external/Jinja-2.3.1/jinja2 tools/jinja2 or by installing it from PyPI. You can optionally also install Pygments, either as a checkout via :: - svn co http://svn.python.org/projects/external/Pygments-0.11.1/pygments tools/pygments + svn co http://svn.python.org/projects/external/Pygments-1.3.1/pygments tools/pygments or from PyPI at http://pypi.python.org/pypi/Pygments. Modified: python/branches/release26-maint/Doc/make.bat ============================================================================== --- python/branches/release26-maint/Doc/make.bat (original) +++ python/branches/release26-maint/Doc/make.bat Sat Mar 13 11:59:09 2010 @@ -34,10 +34,10 @@ goto end :checkout -svn co %SVNROOT%/external/Sphinx-0.6.3/sphinx tools/sphinx -svn co %SVNROOT%/external/docutils-0.5/docutils tools/docutils -svn co %SVNROOT%/external/Jinja-2.1.1/jinja2 tools/jinja2 -svn co %SVNROOT%/external/Pygments-0.11.1/pygments tools/pygments +svn co %SVNROOT%/external/Sphinx-0.6.5/sphinx tools/sphinx +svn co %SVNROOT%/external/docutils-0.6/docutils tools/docutils +svn co %SVNROOT%/external/Jinja-2.3.1/jinja2 tools/jinja2 +svn co %SVNROOT%/external/Pygments-1.3.1/pygments tools/pygments goto end :update From python-checkins at python.org Sat Mar 13 12:00:44 2010 From: python-checkins at python.org (georg.brandl) Date: Sat, 13 Mar 2010 12:00:44 +0100 (CET) Subject: [Python-checkins] r78914 - in python/branches/release26-maint: Doc Doc/Makefile Message-ID: <20100313110044.B2F27F209@mail.python.org> Author: georg.brandl Date: Sat Mar 13 12:00:44 2010 New Revision: 78914 Log: Merged revisions 78908 via svnmerge from svn+ssh://pythondev at svn.python.org/python/trunk ........ r78908 | georg.brandl | 2010-03-13 11:12:39 +0100 (Sa, 13 M?r 2010) | 1 line Add Makefile targets for automatic doc build. Add script that will be used for daily build. ........ Modified: python/branches/release26-maint/ (props changed) python/branches/release26-maint/Doc/ (props changed) python/branches/release26-maint/Doc/Makefile Modified: python/branches/release26-maint/Doc/Makefile ============================================================================== --- python/branches/release26-maint/Doc/Makefile (original) +++ python/branches/release26-maint/Doc/Makefile Sat Mar 13 12:00:44 2010 @@ -14,19 +14,26 @@ ALLSPHINXOPTS = -b $(BUILDER) -d build/doctrees -D latex_paper_size=$(PAPER) \ $(SPHINXOPTS) . build/$(BUILDER) $(SOURCES) -.PHONY: help checkout update build html htmlhelp clean coverage dist check +.PHONY: help checkout update build html htmlhelp latex text changes linkcheck \ + suspicious coverage doctest pydoc-topics htmlview clean dist check serve \ + autobuild-dev autobuild-stable help: @echo "Please use \`make ' where is one of" - @echo " html to make standalone HTML files" - @echo " htmlhelp to make HTML files and a HTML help project" - @echo " latex to make LaTeX files, you can set PAPER=a4 or PAPER=letter" - @echo " text to make plain text files" - @echo " changes to make an overview over all changed/added/deprecated items" - @echo " linkcheck to check all external links for integrity" + @echo " clean to remove build files" + @echo " update to update build tools" + @echo " html to make standalone HTML files" + @echo " htmlhelp to make HTML files and a HTML help project" + @echo " latex to make LaTeX files, you can set PAPER=a4 or PAPER=letter" + @echo " text to make plain text files" + @echo " changes to make an overview over all changed/added/deprecated items" + @echo " linkcheck to check all external links for integrity" + @echo " coverage to check documentation coverage for library and C API" + @echo " doctest to run doctests in the documentation" + @echo " pydoc-topics to regenerate the pydoc topics file" + @echo " dist to create a \"dist\" directory with archived docs for download" @echo " suspicious to check for suspicious markup in output text" - @echo " coverage to check documentation coverage for library and C API" - @echo " dist to create a \"dist\" directory with archived docs for download" + @echo " check to run a check for frequent markup errors" # Note: if you update versions here, do the same in make.bat and README.txt checkout: @@ -149,3 +156,17 @@ check: $(PYTHON) tools/rstlint.py -i tools + +# Targets for automatic doc build + +# for development releases: always build +autobuild-dev: + make update + make dist + +# for stable releases: only build if not in development mode +autobuild-stable: + @case $(DISTVERSION) in *[abc]*) \ + echo "Not building; not a release version."; exit 1;; \ + esac + @make autobuild-dev From python-checkins at python.org Sat Mar 13 12:02:07 2010 From: python-checkins at python.org (georg.brandl) Date: Sat, 13 Mar 2010 12:02:07 +0100 (CET) Subject: [Python-checkins] r78915 - in python/branches/py3k: Doc Doc/Makefile Message-ID: <20100313110207.74469F65A@mail.python.org> Author: georg.brandl Date: Sat Mar 13 12:02:07 2010 New Revision: 78915 Log: Merged revisions 78908 via svnmerge from svn+ssh://pythondev at svn.python.org/python/trunk ........ r78908 | georg.brandl | 2010-03-13 11:12:39 +0100 (Sa, 13 M?r 2010) | 1 line Add Makefile targets for automatic doc build. Add script that will be used for daily build. ........ Modified: python/branches/py3k/ (props changed) python/branches/py3k/Doc/ (props changed) python/branches/py3k/Doc/Makefile Modified: python/branches/py3k/Doc/Makefile ============================================================================== --- python/branches/py3k/Doc/Makefile (original) +++ python/branches/py3k/Doc/Makefile Sat Mar 13 12:02:07 2010 @@ -14,20 +14,27 @@ ALLSPHINXOPTS = -b $(BUILDER) -d build/doctrees -D latex_paper_size=$(PAPER) \ $(SPHINXOPTS) . build/$(BUILDER) $(SOURCES) -.PHONY: help checkout update build html htmlhelp clean coverage dist check +.PHONY: help checkout update build html htmlhelp latex text changes linkcheck \ + suspicious coverage doctest pydoc-topics htmlview clean dist check serve \ + autobuild-dev autobuild-stable help: @echo "Please use \`make ' where is one of" - @echo " html to make standalone HTML files" - @echo " htmlhelp to make HTML files and a HTML help project" - @echo " latex to make LaTeX files, you can set PAPER=a4 or PAPER=letter" - @echo " text to make plain text files" - @echo " changes to make an overview over all changed/added/deprecated items" - @echo " linkcheck to check all external links for integrity" + @echo " clean to remove build files" + @echo " update to update build tools" + @echo " html to make standalone HTML files" + @echo " htmlhelp to make HTML files and a HTML help project" + @echo " latex to make LaTeX files, you can set PAPER=a4 or PAPER=letter" + @echo " text to make plain text files" + @echo " changes to make an overview over all changed/added/deprecated items" + @echo " linkcheck to check all external links for integrity" + @echo " coverage to check documentation coverage for library and C API" + @echo " doctest to run doctests in the documentation" + @echo " pydoc-topics to regenerate the pydoc topics file" + @echo " dist to create a \"dist\" directory with archived docs for download" @echo " suspicious to check for suspicious markup in output text" - @echo " coverage to check documentation coverage for library and C API" - @echo " dist to create a \"dist\" directory with archived docs for download" - @echo " serve to serve the documentation on the localhost (8000)" + @echo " check to run a check for frequent markup errors" + @echo " serve to serve the documentation on the localhost (8000)" # Note: if you update versions here, do the same in make.bat and README.txt checkout: @@ -153,3 +160,17 @@ serve: ../Tools/scripts/serve.py build/html + +# Targets for automatic doc build + +# for development releases: always build +autobuild-dev: + make update + make dist + +# for stable releases: only build if not in development mode +autobuild-stable: + @case $(DISTVERSION) in *[abc]*) \ + echo "Not building; not a release version."; exit 1;; \ + esac + @make autobuild-dev From python-checkins at python.org Sat Mar 13 12:03:05 2010 From: python-checkins at python.org (georg.brandl) Date: Sat, 13 Mar 2010 12:03:05 +0100 (CET) Subject: [Python-checkins] r78916 - in python/branches/release31-maint: Doc Doc/Makefile Message-ID: <20100313110305.5F240F6CB@mail.python.org> Author: georg.brandl Date: Sat Mar 13 12:03:05 2010 New Revision: 78916 Log: Merged revisions 78915 via svnmerge from svn+ssh://svn.python.org/python/branches/py3k ................ r78915 | georg.brandl | 2010-03-13 12:02:07 +0100 (Sa, 13 M?r 2010) | 9 lines Merged revisions 78908 via svnmerge from svn+ssh://pythondev at svn.python.org/python/trunk ........ r78908 | georg.brandl | 2010-03-13 11:12:39 +0100 (Sa, 13 M?r 2010) | 1 line Add Makefile targets for automatic doc build. Add script that will be used for daily build. ........ ................ Modified: python/branches/release31-maint/ (props changed) python/branches/release31-maint/Doc/ (props changed) python/branches/release31-maint/Doc/Makefile Modified: python/branches/release31-maint/Doc/Makefile ============================================================================== --- python/branches/release31-maint/Doc/Makefile (original) +++ python/branches/release31-maint/Doc/Makefile Sat Mar 13 12:03:05 2010 @@ -14,19 +14,26 @@ ALLSPHINXOPTS = -b $(BUILDER) -d build/doctrees -D latex_paper_size=$(PAPER) \ $(SPHINXOPTS) . build/$(BUILDER) $(SOURCES) -.PHONY: help checkout update build html htmlhelp clean coverage dist check +.PHONY: help checkout update build html htmlhelp latex text changes linkcheck \ + suspicious coverage doctest pydoc-topics htmlview clean dist check serve \ + autobuild-dev autobuild-stable help: @echo "Please use \`make ' where is one of" - @echo " html to make standalone HTML files" - @echo " htmlhelp to make HTML files and a HTML help project" - @echo " latex to make LaTeX files, you can set PAPER=a4 or PAPER=letter" - @echo " text to make plain text files" - @echo " changes to make an overview over all changed/added/deprecated items" - @echo " linkcheck to check all external links for integrity" + @echo " clean to remove build files" + @echo " update to update build tools" + @echo " html to make standalone HTML files" + @echo " htmlhelp to make HTML files and a HTML help project" + @echo " latex to make LaTeX files, you can set PAPER=a4 or PAPER=letter" + @echo " text to make plain text files" + @echo " changes to make an overview over all changed/added/deprecated items" + @echo " linkcheck to check all external links for integrity" + @echo " coverage to check documentation coverage for library and C API" + @echo " doctest to run doctests in the documentation" + @echo " pydoc-topics to regenerate the pydoc topics file" + @echo " dist to create a \"dist\" directory with archived docs for download" @echo " suspicious to check for suspicious markup in output text" - @echo " coverage to check documentation coverage for library and C API" - @echo " dist to create a \"dist\" directory with archived docs for download" + @echo " check to run a check for frequent markup errors" # Note: if you update versions here, do the same in make.bat and README.txt checkout: @@ -149,3 +156,17 @@ check: $(PYTHON) tools/rstlint.py -i tools + +# Targets for automatic doc build + +# for development releases: always build +autobuild-dev: + make update + make dist + +# for stable releases: only build if not in development mode +autobuild-stable: + @case $(DISTVERSION) in *[abc]*) \ + echo "Not building; not a release version."; exit 1;; \ + esac + @make autobuild-dev From python-checkins at python.org Sat Mar 13 12:18:49 2010 From: python-checkins at python.org (florent.xicluna) Date: Sat, 13 Mar 2010 12:18:49 +0100 (CET) Subject: [Python-checkins] r78917 - in python/trunk: Lib/test/samples Lib/test/test.xml Lib/test/test.xml.out Lib/test/test_minidom.py Lib/test/test_sax.py Lib/test/test_xml_etree.py Lib/test/test_xml_etree_c.py Lib/test/xmltestdata Lib/test/xmltestdata/test.xml Lib/test/xmltestdata/test.xml.out Makefile.pre.in Tools/msi/msi.py Message-ID: <20100313111849.63E1AE27C@mail.python.org> Author: florent.xicluna Date: Sat Mar 13 12:18:49 2010 New Revision: 78917 Log: Move the xml test data to their own directory. Added: python/trunk/Lib/test/xmltestdata/ - copied from r78869, /python/trunk/Lib/test/samples/ python/trunk/Lib/test/xmltestdata/test.xml - copied unchanged from r78909, /python/trunk/Lib/test/test.xml python/trunk/Lib/test/xmltestdata/test.xml.out - copied unchanged from r78909, /python/trunk/Lib/test/test.xml.out Removed: python/trunk/Lib/test/samples/ python/trunk/Lib/test/test.xml python/trunk/Lib/test/test.xml.out Modified: python/trunk/Lib/test/test_minidom.py python/trunk/Lib/test/test_sax.py python/trunk/Lib/test/test_xml_etree.py python/trunk/Lib/test/test_xml_etree_c.py python/trunk/Makefile.pre.in python/trunk/Tools/msi/msi.py Deleted: python/trunk/Lib/test/test.xml ============================================================================== --- python/trunk/Lib/test/test.xml Sat Mar 13 12:18:49 2010 +++ (empty file) @@ -1,115 +0,0 @@ - - -Introduction to XSL -

    Introduction to XSL

    - - - -
    -

    Overview -

    -
      - -
    • 1.Intro
    • - -
    • 2.History
    • - -
    • 3.XSL Basics
    • - -
    • Lunch
    • - -
    • 4.An XML Data Model
    • - -
    • 5.XSL Patterns
    • - -
    • 6.XSL Templates
    • - -
    • 7.XSL Formatting Model -
    • - -
    - - - - - - -
    -

    Intro

    -
      - -
    • Who am I?
    • - -
    • Who are you?
    • - -
    • Why are we here? -
    • - -
    - - - - - - -
    -

    History: XML and SGML

    -
      - -
    • XML is a subset of SGML.
    • - -
    • SGML allows the separation of abstract content from formatting.
    • - -
    • Also one of XML's primary virtues (in the doc publishing domain). -
    • - -
    - - - - - - -
    -

    History: What are stylesheets?

    -
      - -
    • Stylesheets specify the formatting of SGML/XML documents.
    • - -
    • Stylesheets put the "style" back into documents.
    • - -
    • New York Times content+NYT Stylesheet = NYT paper -
    • - -
    - - - - - - -
    -

    History: FOSI

    -
      - -
    • FOSI: "Formatted Output Specification Instance" -
        -
      • MIL-STD-28001 -
      • - -
      • FOSI's are SGML documents -
      • - -
      • A stylesheet for another document -
      • -
    • - -
    • Obsolete but implemented... -
    • - -
    - - - - - Deleted: python/trunk/Lib/test/test.xml.out ============================================================================== --- python/trunk/Lib/test/test.xml.out Sat Mar 13 12:18:49 2010 +++ (empty file) @@ -1,115 +0,0 @@ - - -Introduction to XSL -

    Introduction to XSL

    - - - -
    -

    Overview -

    -
      - -
    • 1.Intro
    • - -
    • 2.History
    • - -
    • 3.XSL Basics
    • - -
    • Lunch
    • - -
    • 4.An XML Data Model
    • - -
    • 5.XSL Patterns
    • - -
    • 6.XSL Templates
    • - -
    • 7.XSL Formatting Model -
    • - -
    - - - - - - -
    -

    Intro

    -
      - -
    • Who am I?
    • - -
    • Who are you?
    • - -
    • Why are we here? -
    • - -
    - - - - - - -
    -

    History: XML and SGML

    -
      - -
    • XML is a subset of SGML.
    • - -
    • SGML allows the separation of abstract content from formatting.
    • - -
    • Also one of XML's primary virtues (in the doc publishing domain). -
    • - -
    - - - - - - -
    -

    History: What are stylesheets?

    -
      - -
    • Stylesheets specify the formatting of SGML/XML documents.
    • - -
    • Stylesheets put the "style" back into documents.
    • - -
    • New York Times content+NYT Stylesheet = NYT paper -
    • - -
    - - - - - - -
    -

    History: FOSI

    -
      - -
    • FOSI: "Formatted Output Specification Instance" -
        -
      • MIL-STD-28001 -
      • - -
      • FOSI's are SGML documents -
      • - -
      • A stylesheet for another document -
      • -
    • - -
    • Obsolete but implemented... -
    • - -
    - - - - - \ No newline at end of file Modified: python/trunk/Lib/test/test_minidom.py ============================================================================== --- python/trunk/Lib/test/test_minidom.py (original) +++ python/trunk/Lib/test/test_minidom.py Sat Mar 13 12:18:49 2010 @@ -19,7 +19,7 @@ base = sys.argv[0] else: base = __file__ -tstfile = os.path.join(os.path.dirname(base), "test"+os.extsep+"xml") +tstfile = os.path.join(os.path.dirname(base), "xmltestdata", "test.xml") del base # The tests of DocumentType importing use these helpers to construct Modified: python/trunk/Lib/test/test_sax.py ============================================================================== --- python/trunk/Lib/test/test_sax.py (original) +++ python/trunk/Lib/test/test_sax.py Sat Mar 13 12:18:49 2010 @@ -17,6 +17,9 @@ import unittest import os +TEST_XMLFILE = findfile(os.path.join("xmltestdata", "test.xml")) +TEST_XMLFILE_OUT = findfile(os.path.join("xmltestdata", "test.xml.out")) + ns_uri = "http://www.python.org/xml-ns/saxtest/" class XmlTestBase(unittest.TestCase): @@ -311,7 +314,7 @@ # # =========================================================================== -xml_test_out = open(findfile("test"+os.extsep+"xml"+os.extsep+"out")).read() +xml_test_out = open(TEST_XMLFILE_OUT).read() class ExpatReaderTest(XmlTestBase): @@ -323,7 +326,7 @@ xmlgen = XMLGenerator(result) parser.setContentHandler(xmlgen) - parser.parse(open(findfile("test"+os.extsep+"xml"))) + parser.parse(open(TEST_XMLFILE)) self.assertEquals(result.getvalue(), xml_test_out) @@ -452,7 +455,7 @@ xmlgen = XMLGenerator(result) parser.setContentHandler(xmlgen) - parser.parse(findfile("test"+os.extsep+"xml")) + parser.parse(TEST_XMLFILE) self.assertEquals(result.getvalue(), xml_test_out) @@ -462,7 +465,7 @@ xmlgen = XMLGenerator(result) parser.setContentHandler(xmlgen) - parser.parse(InputSource(findfile("test"+os.extsep+"xml"))) + parser.parse(InputSource(TEST_XMLFILE)) self.assertEquals(result.getvalue(), xml_test_out) @@ -473,7 +476,7 @@ parser.setContentHandler(xmlgen) inpsrc = InputSource() - inpsrc.setByteStream(open(findfile("test"+os.extsep+"xml"))) + inpsrc.setByteStream(open(TEST_XMLFILE)) parser.parse(inpsrc) self.assertEquals(result.getvalue(), xml_test_out) @@ -534,9 +537,9 @@ xmlgen = XMLGenerator(result) parser = create_parser() parser.setContentHandler(xmlgen) - parser.parse(findfile("test.xml")) + parser.parse(TEST_XMLFILE) - self.assertEquals(parser.getSystemId(), findfile("test.xml")) + self.assertEquals(parser.getSystemId(), TEST_XMLFILE) self.assertEquals(parser.getPublicId(), None) Modified: python/trunk/Lib/test/test_xml_etree.py ============================================================================== --- python/trunk/Lib/test/test_xml_etree.py (original) +++ python/trunk/Lib/test/test_xml_etree.py Sat Mar 13 12:18:49 2010 @@ -17,6 +17,9 @@ from xml.etree import ElementTree as ET +SIMPLE_XMLFILE = "xmltestdata/simple.xml" +SIMPLE_NS_XMLFILE = "xmltestdata/simple-ns.xml" + SAMPLE_XML = """\ text @@ -418,7 +421,7 @@ >>> tree.find("section/tag").tag 'tag' - >>> tree = ET.ElementTree(file="samples/simple.xml") + >>> tree = ET.ElementTree(file=SIMPLE_XMLFILE) >>> tree.find("element").tag 'element' >>> tree.find("element/../empty-element").tag @@ -564,7 +567,7 @@ """ Test parsing from file. - >>> tree = ET.parse("samples/simple.xml") + >>> tree = ET.parse(SIMPLE_XMLFILE) >>> normalize_crlf(tree) >>> tree.write(sys.stdout) @@ -572,7 +575,7 @@ texttail - >>> tree = ET.parse("samples/simple-ns.xml") + >>> tree = ET.parse(SIMPLE_NS_XMLFILE) >>> normalize_crlf(tree) >>> tree.write(sys.stdout) @@ -584,7 +587,7 @@ >>> parser = ET.XMLParser() >>> parser.version # XXX: Upgrade to 2.0.1? 'Expat 2.0.0' - >>> parser.feed(open("samples/simple.xml").read()) + >>> parser.feed(open(SIMPLE_XMLFILE).read()) >>> print serialize(parser.close()) text @@ -593,7 +596,7 @@ >>> parser = ET.XMLTreeBuilder() # 1.2 compatibility - >>> parser.feed(open("samples/simple.xml").read()) + >>> parser.feed(open(SIMPLE_XMLFILE).read()) >>> print serialize(parser.close()) text @@ -603,7 +606,7 @@ >>> target = ET.TreeBuilder() >>> parser = ET.XMLParser(target=target) - >>> parser.feed(open("samples/simple.xml").read()) + >>> parser.feed(open(SIMPLE_XMLFILE).read()) >>> print serialize(parser.close()) text @@ -644,7 +647,7 @@ >>> iterparse = ET.iterparse - >>> context = iterparse("samples/simple.xml") + >>> context = iterparse(SIMPLE_XMLFILE) >>> action, elem = next(context) >>> print action, elem.tag end element @@ -656,7 +659,7 @@ >>> context.root.tag 'root' - >>> context = iterparse("samples/simple-ns.xml") + >>> context = iterparse(SIMPLE_NS_XMLFILE) >>> for action, elem in context: ... print action, elem.tag end {namespace}element @@ -665,17 +668,17 @@ end {namespace}root >>> events = () - >>> context = iterparse("samples/simple.xml", events) + >>> context = iterparse(SIMPLE_XMLFILE, events) >>> for action, elem in context: ... print action, elem.tag >>> events = () - >>> context = iterparse("samples/simple.xml", events=events) + >>> context = iterparse(SIMPLE_XMLFILE, events=events) >>> for action, elem in context: ... print action, elem.tag >>> events = ("start", "end") - >>> context = iterparse("samples/simple.xml", events) + >>> context = iterparse(SIMPLE_XMLFILE, events) >>> for action, elem in context: ... print action, elem.tag start root @@ -688,7 +691,7 @@ end root >>> events = ("start", "end", "start-ns", "end-ns") - >>> context = iterparse("samples/simple-ns.xml", events) + >>> context = iterparse(SIMPLE_NS_XMLFILE, events) >>> for action, elem in context: ... if action in ("start", "end"): ... print action, elem.tag @@ -706,7 +709,7 @@ end-ns None >>> events = ("start", "end", "bogus") - >>> context = iterparse("samples/simple.xml", events) + >>> context = iterparse(SIMPLE_XMLFILE, events) Traceback (most recent call last): ValueError: unknown event 'bogus' @@ -767,7 +770,7 @@ ... pass >>> builder = Builder() >>> parser = ET.XMLParser(target=builder) - >>> parser.feed(open("samples/simple.xml", "r").read()) + >>> parser.feed(open(SIMPLE_XMLFILE, "r").read()) start root start element end element @@ -790,7 +793,7 @@ ... print "comment", repr(data) >>> builder = Builder() >>> parser = ET.XMLParser(target=builder) - >>> parser.feed(open("samples/simple-ns.xml", "r").read()) + >>> parser.feed(open(SIMPLE_NS_XMLFILE, "r").read()) pi pi 'data' comment ' comment ' start {namespace}root @@ -808,7 +811,7 @@ """ Test Element.getchildren() - >>> tree = ET.parse(open("samples/simple.xml", "r")) + >>> tree = ET.parse(open(SIMPLE_XMLFILE, "r")) >>> for elem in tree.getroot().iter(): ... summarize_list(elem.getchildren()) ['element', 'element', 'empty-element'] @@ -1286,9 +1289,9 @@

    Example.

    - +
    -""" +""".format(SIMPLE_XMLFILE) def xinclude_loader(href, parse="xml", encoding=None): try: @@ -1822,8 +1825,10 @@ from test import test_xml_etree def ignore(message, category=DeprecationWarning): warnings.filterwarnings("ignore", message, category) + # The same doctests are used for both the Python and the C implementations assert test_xml_etree.ET.__name__ == module_name + with warnings.catch_warnings(), CleanContext(): # Search behaviour is broken if search path starts with "/". ignore("This search is broken in 1.3 and earlier, and will be fixed " @@ -1838,8 +1843,8 @@ test_support.run_doctest(test_xml_etree, verbosity=True) - # The module should not be changed by the tests - assert test_xml_etree.ET.__name__ == module_name + # The module should not be changed by the tests + assert test_xml_etree.ET.__name__ == module_name if __name__ == '__main__': test_main() Modified: python/trunk/Lib/test/test_xml_etree_c.py ============================================================================== --- python/trunk/Lib/test/test_xml_etree_c.py (original) +++ python/trunk/Lib/test/test_xml_etree_c.py Sat Mar 13 12:18:49 2010 @@ -22,13 +22,18 @@ test_support.run_doctest(test_xml_etree_c, verbosity=True) # Assign the C implementation before running the doctests + # Patch the __name__, to prevent confusion with the pure Python test pyET = test_xml_etree.ET + py__name__ = test_xml_etree.__name__ test_xml_etree.ET = cET + if __name__ != '__main__': + test_xml_etree.__name__ = __name__ try: # Run the same test suite as xml.etree.ElementTree test_xml_etree.test_main(module_name='xml.etree.cElementTree') finally: test_xml_etree.ET = pyET + test_xml_etree.__name__ = py__name__ if __name__ == '__main__': test_main() Modified: python/trunk/Makefile.pre.in ============================================================================== --- python/trunk/Makefile.pre.in (original) +++ python/trunk/Makefile.pre.in Sat Mar 13 12:18:49 2010 @@ -833,7 +833,7 @@ plat-mac/lib-scriptpackages/Terminal PLATMACPATH=:plat-mac:plat-mac/lib-scriptpackages LIBSUBDIRS= lib-tk site-packages test test/output test/data \ - test/decimaltestdata \ + test/decimaltestdata test/xmltestdata \ encodings compiler hotshot \ email email/mime email/test email/test/data \ json json/tests \ Modified: python/trunk/Tools/msi/msi.py ============================================================================== --- python/trunk/Tools/msi/msi.py (original) +++ python/trunk/Tools/msi/msi.py Sat Mar 13 12:18:49 2010 @@ -1005,8 +1005,6 @@ lib.add_file("audiotest.au") lib.add_file("cfgparser.1") lib.add_file("sgml_input.html") - lib.add_file("test.xml") - lib.add_file("test.xml.out") lib.add_file("testtar.tar") lib.add_file("test_difflib_expect.html") lib.add_file("check_soundcard.vbs") @@ -1018,6 +1016,9 @@ lib.add_file("zipdir.zip") if dir=='decimaltestdata': lib.glob("*.decTest") + if dir=='xmltestdata': + lib.glob("*.xml") + lib.add_file("test.xml.out") if dir=='output': lib.glob("test_*") if dir=='idlelib': From python-checkins at python.org Sat Mar 13 12:34:40 2010 From: python-checkins at python.org (mark.dickinson) Date: Sat, 13 Mar 2010 12:34:40 +0100 (CET) Subject: [Python-checkins] r78918 - in python/branches/py3k: Lib/test/test_structmembers.py Misc/NEWS Modules/_testcapimodule.c Objects/longobject.c Message-ID: <20100313113440.6B318EDCF@mail.python.org> Author: mark.dickinson Date: Sat Mar 13 12:34:40 2010 New Revision: 78918 Log: Issue #8014: Fix PyLong_As methods not to produce an internal error on non-integer input: they now raise TypeError instead. This is needed for attributes declared via PyMemberDefs. Modified: python/branches/py3k/Lib/test/test_structmembers.py python/branches/py3k/Misc/NEWS python/branches/py3k/Modules/_testcapimodule.c python/branches/py3k/Objects/longobject.c Modified: python/branches/py3k/Lib/test/test_structmembers.py ============================================================================== --- python/branches/py3k/Lib/test/test_structmembers.py (original) +++ python/branches/py3k/Lib/test/test_structmembers.py Sat Mar 13 12:34:40 2010 @@ -3,13 +3,25 @@ SHRT_MAX, SHRT_MIN, USHRT_MAX, \ INT_MAX, INT_MIN, UINT_MAX, \ LONG_MAX, LONG_MIN, ULONG_MAX, \ - LLONG_MAX, LLONG_MIN, ULLONG_MAX + LLONG_MAX, LLONG_MIN, ULLONG_MAX, \ + PY_SSIZE_T_MAX, PY_SSIZE_T_MIN import warnings, unittest, sys from test import support -ts=test_structmembersType(False, 1, 2, 3, 4, 5, 6, 7, 8, - 9.99999, 10.1010101010) +ts=test_structmembersType(False, # T_BOOL + 1, # T_BYTE + 2, # T_UBYTE + 3, # T_SHORT + 4, # T_USHORT + 5, # T_INT + 6, # T_UINT + 7, # T_LONG + 8, # T_ULONG + 23, # T_PYSSIZET + 9.99999,# T_FLOAT + 10.1010101010 # T_DOUBLE + ) class ReadWriteTests(unittest.TestCase): def test_types(self): @@ -47,6 +59,11 @@ ts.T_ULONG = ULONG_MAX self.assertEquals(ts.T_ULONG, ULONG_MAX) + ts.T_PYSSIZET = PY_SSIZE_T_MAX + self.assertEquals(ts.T_PYSSIZET, PY_SSIZE_T_MAX) + ts.T_PYSSIZET = PY_SSIZE_T_MIN + self.assertEquals(ts.T_PYSSIZET, PY_SSIZE_T_MIN) + ## T_LONGLONG and T_ULONGLONG may not be present on some platforms if hasattr(ts, 'T_LONGLONG'): ts.T_LONGLONG = LLONG_MAX @@ -63,6 +80,27 @@ ts.T_ULONGLONG = 4 self.assertEquals(ts.T_ULONGLONG, 4) + def test_bad_assignments(self): + # XXX testing of T_UINT and T_ULONG temporarily disabled; + # see issue 8014. + integer_attributes = [ + 'T_BOOL', + 'T_BYTE', 'T_UBYTE', + 'T_SHORT', 'T_USHORT', + 'T_INT', #'T_UINT', + 'T_LONG', #'T_ULONG', + 'T_PYSSIZET' + ] + + if hasattr(ts, 'T_LONGLONG'): + integer_attributes.extend(['T_LONGLONG', 'T_ULONGLONG']) + + # issue8014: this produced 'bad argument to internal function' + # internal error + for nonint in None, 3.2j, "full of eels", {}, []: + for attr in integer_attributes: + self.assertRaises(TypeError, setattr, ts, attr, nonint) + class TestWarnings(unittest.TestCase): def has_warned(self, w): Modified: python/branches/py3k/Misc/NEWS ============================================================================== --- python/branches/py3k/Misc/NEWS (original) +++ python/branches/py3k/Misc/NEWS Sat Mar 13 12:34:40 2010 @@ -12,6 +12,9 @@ Core and Builtins ----------------- +- Issue #8014: Setting a T_UINT or T_PYSSIZET attribute of an object with + PyMemberDefs could produce an internal error; raise TypeError instead. + - Issue #7845: Rich comparison methods on the complex type now return NotImplemented rather than raising a TypeError when comparing with an incompatible type; this allows user-defined classes to implement their own Modified: python/branches/py3k/Modules/_testcapimodule.c ============================================================================== --- python/branches/py3k/Modules/_testcapimodule.c (original) +++ python/branches/py3k/Modules/_testcapimodule.c Sat Mar 13 12:34:40 2010 @@ -2084,6 +2084,7 @@ unsigned int uint_member; long long_member; unsigned long ulong_member; + Py_ssize_t pyssizet_member; float float_member; double double_member; #ifdef HAVE_LONG_LONG @@ -2107,6 +2108,7 @@ {"T_UINT", T_UINT, offsetof(test_structmembers, structmembers.uint_member), 0, NULL}, {"T_LONG", T_LONG, offsetof(test_structmembers, structmembers.long_member), 0, NULL}, {"T_ULONG", T_ULONG, offsetof(test_structmembers, structmembers.ulong_member), 0, NULL}, + {"T_PYSSIZET", T_PYSSIZET, offsetof(test_structmembers, structmembers.pyssizet_member), 0, NULL}, {"T_FLOAT", T_FLOAT, offsetof(test_structmembers, structmembers.float_member), 0, NULL}, {"T_DOUBLE", T_DOUBLE, offsetof(test_structmembers, structmembers.double_member), 0, NULL}, #ifdef HAVE_LONG_LONG @@ -2122,13 +2124,13 @@ { static char *keywords[] = { "T_BOOL", "T_BYTE", "T_UBYTE", "T_SHORT", "T_USHORT", - "T_INT", "T_UINT", "T_LONG", "T_ULONG", + "T_INT", "T_UINT", "T_LONG", "T_ULONG", "T_PYSSIZET", "T_FLOAT", "T_DOUBLE", -#ifdef HAVE_LONG_LONG +#ifdef HAVE_LONG_LONG "T_LONGLONG", "T_ULONGLONG", #endif NULL}; - static char *fmt = "|bbBhHiIlkfd" + static char *fmt = "|bbBhHiIlknfd" #ifdef HAVE_LONG_LONG "LK" #endif @@ -2145,9 +2147,10 @@ &ob->structmembers.short_member, &ob->structmembers.ushort_member, &ob->structmembers.int_member, - &ob->structmembers.uint_member, + &ob->structmembers.uint_member, &ob->structmembers.long_member, &ob->structmembers.ulong_member, + &ob->structmembers.pyssizet_member, &ob->structmembers.float_member, &ob->structmembers.double_member #ifdef HAVE_LONG_LONG Modified: python/branches/py3k/Objects/longobject.c ============================================================================== --- python/branches/py3k/Objects/longobject.c (original) +++ python/branches/py3k/Objects/longobject.c Sat Mar 13 12:34:40 2010 @@ -435,10 +435,15 @@ Py_ssize_t i; int sign; - if (vv == NULL || !PyLong_Check(vv)) { + if (vv == NULL) { PyErr_BadInternalCall(); return -1; } + if (!PyLong_Check(vv)) { + PyErr_SetString(PyExc_TypeError, "an integer is required"); + return -1; + } + v = (PyLongObject *)vv; i = Py_SIZE(v); switch (i) { @@ -485,10 +490,15 @@ unsigned long x, prev; Py_ssize_t i; - if (vv == NULL || !PyLong_Check(vv)) { + if (vv == NULL) { PyErr_BadInternalCall(); - return (unsigned long) -1; + return (unsigned long)-1; + } + if (!PyLong_Check(vv)) { + PyErr_SetString(PyExc_TypeError, "an integer is required"); + return (unsigned long)-1; } + v = (PyLongObject *)vv; i = Py_SIZE(v); x = 0; @@ -523,10 +533,15 @@ size_t x, prev; Py_ssize_t i; - if (vv == NULL || !PyLong_Check(vv)) { + if (vv == NULL) { PyErr_BadInternalCall(); - return (unsigned long) -1; + return (size_t) -1; + } + if (!PyLong_Check(vv)) { + PyErr_SetString(PyExc_TypeError, "an integer is required"); + return (size_t)-1; } + v = (PyLongObject *)vv; i = Py_SIZE(v); x = 0; From python-checkins at python.org Sat Mar 13 13:41:48 2010 From: python-checkins at python.org (florent.xicluna) Date: Sat, 13 Mar 2010 13:41:48 +0100 (CET) Subject: [Python-checkins] r78919 - in python/trunk/Lib/test: test_minidom.py test_sax.py test_support.py test_xml_etree.py Message-ID: <20100313124148.555F2F209@mail.python.org> Author: florent.xicluna Date: Sat Mar 13 13:41:48 2010 New Revision: 78919 Log: Do not chdir when running test_xml_etree, and enhance the findfile helper. Modified: python/trunk/Lib/test/test_minidom.py python/trunk/Lib/test/test_sax.py python/trunk/Lib/test/test_support.py python/trunk/Lib/test/test_xml_etree.py Modified: python/trunk/Lib/test/test_minidom.py ============================================================================== --- python/trunk/Lib/test/test_minidom.py (original) +++ python/trunk/Lib/test/test_minidom.py Sat Mar 13 13:41:48 2010 @@ -1,10 +1,8 @@ # test for xml.dom.minidom -import os -import sys import pickle from StringIO import StringIO -from test.test_support import verbose, run_unittest +from test.test_support import verbose, run_unittest, findfile import unittest import xml.dom @@ -15,12 +13,8 @@ from xml.dom.minidom import getDOMImplementation -if __name__ == "__main__": - base = sys.argv[0] -else: - base = __file__ -tstfile = os.path.join(os.path.dirname(base), "xmltestdata", "test.xml") -del base +tstfile = findfile("test.xml", subdir="xmltestdata") + # The tests of DocumentType importing use these helpers to construct # the documents to work with, since not all DOM builders actually Modified: python/trunk/Lib/test/test_sax.py ============================================================================== --- python/trunk/Lib/test/test_sax.py (original) +++ python/trunk/Lib/test/test_sax.py Sat Mar 13 13:41:48 2010 @@ -15,10 +15,9 @@ from cStringIO import StringIO from test.test_support import findfile, run_unittest import unittest -import os -TEST_XMLFILE = findfile(os.path.join("xmltestdata", "test.xml")) -TEST_XMLFILE_OUT = findfile(os.path.join("xmltestdata", "test.xml.out")) +TEST_XMLFILE = findfile("test.xml", subdir="xmltestdata") +TEST_XMLFILE_OUT = findfile("test.xml.out", subdir="xmltestdata") ns_uri = "http://www.python.org/xml-ns/saxtest/" Modified: python/trunk/Lib/test/test_support.py ============================================================================== --- python/trunk/Lib/test/test_support.py (original) +++ python/trunk/Lib/test/test_support.py Sat Mar 13 13:41:48 2010 @@ -424,12 +424,14 @@ rmtree(name) -def findfile(file, here=__file__): +def findfile(file, here=__file__, subdir=None): """Try to find a file on sys.path and the working directory. If it is not found the argument passed to the function is returned (this does not necessarily signal failure; could still be the legitimate path).""" if os.path.isabs(file): return file + if subdir is not None: + file = os.path.join(subdir, file) path = sys.path path = [os.path.dirname(here)] + path for dn in path: Modified: python/trunk/Lib/test/test_xml_etree.py ============================================================================== --- python/trunk/Lib/test/test_xml_etree.py (original) +++ python/trunk/Lib/test/test_xml_etree.py Sat Mar 13 13:41:48 2010 @@ -14,11 +14,12 @@ import sys from test import test_support +from test.test_support import findfile from xml.etree import ElementTree as ET -SIMPLE_XMLFILE = "xmltestdata/simple.xml" -SIMPLE_NS_XMLFILE = "xmltestdata/simple-ns.xml" +SIMPLE_XMLFILE = findfile("simple.xml", subdir="xmltestdata") +SIMPLE_NS_XMLFILE = findfile("simple-ns.xml", subdir="xmltestdata") SAMPLE_XML = """\ @@ -1791,30 +1792,19 @@ class CleanContext(object): - """Provide default namespace mapping, path cache and working directory. + """Provide default namespace mapping and path cache.""" - Save and restore the default namespace mapping and the path cache. - Change directory to the "Lib/test/" directory: some tests open - xml files in the "samples/" directory relative to the test module. - """ def __enter__(self): - import os from xml.etree import ElementTree self._nsmap = ElementTree._namespace_map self._path_cache = ElementTree.ElementPath._cache - self._previous_cwd = os.getcwd() # Copy the default namespace mapping ElementTree._namespace_map = self._nsmap.copy() # Copy the path cache (should be empty) ElementTree.ElementPath._cache = self._path_cache.copy() - # Change directory to Lib/test/ - os.chdir(os.path.dirname(__file__)) def __exit__(self, *args): - import os from xml.etree import ElementTree - # Restore working directory - os.chdir(self._previous_cwd) # Restore mapping and path cache ElementTree._namespace_map = self._nsmap ElementTree.ElementPath._cache = self._path_cache From nnorwitz at gmail.com Sat Mar 13 14:16:42 2010 From: nnorwitz at gmail.com (Neal Norwitz) Date: Sat, 13 Mar 2010 08:16:42 -0500 Subject: [Python-checkins] Python Regression Test Failures refleak (1) Message-ID: <20100313131642.GA25613@kbk-i386-bb.psfb.org> More important issues: ---------------------- test_itertools leaked [0, 0, 32] references, sum=32 Less important issues: ---------------------- From python-checkins at python.org Sat Mar 13 14:23:05 2010 From: python-checkins at python.org (mark.dickinson) Date: Sat, 13 Mar 2010 14:23:05 +0100 (CET) Subject: [Python-checkins] r78920 - in python/branches/py3k: Lib/test/test_structmembers.py Python/structmember.c Message-ID: <20100313132305.E7889F74B@mail.python.org> Author: mark.dickinson Date: Sat Mar 13 14:23:05 2010 New Revision: 78920 Log: Issue #8014: Fix incorrect error checks in structmember.c, and re-enable previously failing test_structmember.py tests. Modified: python/branches/py3k/Lib/test/test_structmembers.py python/branches/py3k/Python/structmember.c Modified: python/branches/py3k/Lib/test/test_structmembers.py ============================================================================== --- python/branches/py3k/Lib/test/test_structmembers.py (original) +++ python/branches/py3k/Lib/test/test_structmembers.py Sat Mar 13 14:23:05 2010 @@ -87,8 +87,8 @@ 'T_BOOL', 'T_BYTE', 'T_UBYTE', 'T_SHORT', 'T_USHORT', - 'T_INT', #'T_UINT', - 'T_LONG', #'T_ULONG', + 'T_INT', 'T_UINT', + 'T_LONG', 'T_ULONG', 'T_PYSSIZET' ] Modified: python/branches/py3k/Python/structmember.c ============================================================================== --- python/branches/py3k/Python/structmember.c (original) +++ python/branches/py3k/Python/structmember.c Sat Mar 13 14:23:05 2010 @@ -187,12 +187,13 @@ } case T_UINT:{ unsigned long ulong_val = PyLong_AsUnsignedLong(v); - if ((ulong_val == (unsigned int)-1) && PyErr_Occurred()) { + if ((ulong_val == (unsigned long)-1) && PyErr_Occurred()) { /* XXX: For compatibility, accept negative int values as well. */ PyErr_Clear(); ulong_val = PyLong_AsLong(v); - if ((ulong_val == (unsigned int)-1) && PyErr_Occurred()) + if ((ulong_val == (unsigned long)-1) && + PyErr_Occurred()) return -1; *(unsigned int *)addr = (unsigned int)ulong_val; WARN("Writing negative value into unsigned field"); @@ -216,7 +217,7 @@ as well. */ PyErr_Clear(); *(unsigned long*)addr = PyLong_AsLong(v); - if ((*(unsigned long*)addr == (unsigned int)-1) + if ((*(unsigned long*)addr == (unsigned long)-1) && PyErr_Occurred()) return -1; WARN("Writing negative value into unsigned field"); From python-checkins at python.org Sat Mar 13 14:39:46 2010 From: python-checkins at python.org (georg.brandl) Date: Sat, 13 Mar 2010 14:39:46 +0100 (CET) Subject: [Python-checkins] r78921 - in python/trunk/Doc: Makefile tools/sphinxext/download.html Message-ID: <20100313133946.86450E185@mail.python.org> Author: georg.brandl Date: Sat Mar 13 14:39:46 2010 New Revision: 78921 Log: Change/fix handling of docs download location: for daily builds, put them right next to the HTML. Modified: python/trunk/Doc/Makefile python/trunk/Doc/tools/sphinxext/download.html Modified: python/trunk/Doc/Makefile ============================================================================== --- python/trunk/Doc/Makefile (original) +++ python/trunk/Doc/Makefile Sat Mar 13 14:39:46 2010 @@ -161,16 +161,17 @@ serve: ../Tools/scripts/serve.py build/html -# Targets for automatic doc build +# Targets for daily automated doc build # for development releases: always build autobuild-dev: make update - make dist + make dist SPHINXOPTS='-A daily=1' -# for stable releases: only build if not in development mode +# for stable releases: only build if not in pre-release stage (alpha, beta, rc) autobuild-stable: @case $(DISTVERSION) in *[abc]*) \ - echo "Not building; not a release version."; exit 1;; \ + echo "Not building; $(DISTVERSION) is not a release version."; \ + exit 1;; \ esac @make autobuild-dev Modified: python/trunk/Doc/tools/sphinxext/download.html ============================================================================== --- python/trunk/Doc/tools/sphinxext/download.html (original) +++ python/trunk/Doc/tools/sphinxext/download.html Sat Mar 13 14:39:46 2010 @@ -1,15 +1,14 @@ {% extends "layout.html" %} {% set title = 'Download' %} -{% set dlbase = 'http://docs.python.org/ftp/python/doc/' + release %} -{% block body %} +{% if daily is defined %} + {% set dlbase = pathto('archives', 1) %} +{% else %} + {% set dlbase = 'http://docs.python.org/ftp/python/doc/' + release %} +{% endif %} +{% block body %}

    Download Python {{ release }} Documentation

    -{% if 'a' in release or 'b' in release or 'c' in release %} -

    We don't package the documentation for development releases for download. - Downloads will be available for the final release.

    - -{% else %} {% if last_updated %}

    Last updated on: {{ last_updated }}.

    {% endif %}

    To download an archive containing all the documents for this version of @@ -55,6 +54,4 @@

    -{% endif %} - {% endblock %} From python-checkins at python.org Sat Mar 13 14:41:58 2010 From: python-checkins at python.org (georg.brandl) Date: Sat, 13 Mar 2010 14:41:58 +0100 (CET) Subject: [Python-checkins] r78922 - python/trunk/Doc/tools/dailybuild.py Message-ID: <20100313134158.52B8CE3C1@mail.python.org> Author: georg.brandl Date: Sat Mar 13 14:41:58 2010 New Revision: 78922 Log: Update for new download location. Modified: python/trunk/Doc/tools/dailybuild.py Modified: python/trunk/Doc/tools/dailybuild.py ============================================================================== --- python/trunk/Doc/tools/dailybuild.py (original) +++ python/trunk/Doc/tools/dailybuild.py Sat Mar 13 14:41:58 2010 @@ -53,7 +53,8 @@ print 'Copying HTML files' os.system('cp -a Doc/build/html/* %s' % target) print 'Copying dist files' - os.system('cp -a Doc/dist %s/dist' % target) + os.system('mkdir %s/archives' % target) + os.system('cp -a Doc/dist/* %s/archives' % target) print 'Finished' print '=' * 80 From python-checkins at python.org Sat Mar 13 14:42:13 2010 From: python-checkins at python.org (georg.brandl) Date: Sat, 13 Mar 2010 14:42:13 +0100 (CET) Subject: [Python-checkins] r78923 - in python/branches/release26-maint: Doc/Makefile Doc/tools/sphinxext/download.html Message-ID: <20100313134213.9030CE3C1@mail.python.org> Author: georg.brandl Date: Sat Mar 13 14:42:13 2010 New Revision: 78923 Log: Merged revisions 78921 via svnmerge from svn+ssh://pythondev at svn.python.org/python/trunk ........ r78921 | georg.brandl | 2010-03-13 14:39:46 +0100 (Sa, 13 M?r 2010) | 1 line Change/fix handling of docs download location: for daily builds, put them right next to the HTML. ........ Modified: python/branches/release26-maint/ (props changed) python/branches/release26-maint/Doc/Makefile python/branches/release26-maint/Doc/tools/sphinxext/download.html Modified: python/branches/release26-maint/Doc/Makefile ============================================================================== --- python/branches/release26-maint/Doc/Makefile (original) +++ python/branches/release26-maint/Doc/Makefile Sat Mar 13 14:42:13 2010 @@ -157,16 +157,17 @@ check: $(PYTHON) tools/rstlint.py -i tools -# Targets for automatic doc build +# Targets for daily automated doc build # for development releases: always build autobuild-dev: make update - make dist + make dist SPHINXOPTS='-A daily=1' -# for stable releases: only build if not in development mode +# for stable releases: only build if not in pre-release stage (alpha, beta, rc) autobuild-stable: @case $(DISTVERSION) in *[abc]*) \ - echo "Not building; not a release version."; exit 1;; \ + echo "Not building; $(DISTVERSION) is not a release version."; \ + exit 1;; \ esac @make autobuild-dev Modified: python/branches/release26-maint/Doc/tools/sphinxext/download.html ============================================================================== --- python/branches/release26-maint/Doc/tools/sphinxext/download.html (original) +++ python/branches/release26-maint/Doc/tools/sphinxext/download.html Sat Mar 13 14:42:13 2010 @@ -1,15 +1,14 @@ {% extends "layout.html" %} {% set title = 'Download' %} -{% set dlbase = 'http://docs.python.org/ftp/python/doc/current' %} -{% block body %} +{% if daily is defined %} + {% set dlbase = pathto('archives', 1) %} +{% else %} + {% set dlbase = 'http://docs.python.org/ftp/python/doc/' + release %} +{% endif %} +{% block body %}

    Download Python {{ release }} Documentation

    -{% if 'a' in release or 'b' in release or 'c' in release %} -

    We don't package the documentation for development releases for download. - Downloads will be available for the final release.

    - -{% else %} {% if last_updated %}

    Last updated on: {{ last_updated }}.

    {% endif %}

    To download an archive containing all the documents for this version of @@ -55,6 +54,4 @@

    If you have comments or suggestions for the Python documentation, please send email to docs at python.org.

    -{% endif %} - {% endblock %} From python-checkins at python.org Sat Mar 13 14:42:17 2010 From: python-checkins at python.org (georg.brandl) Date: Sat, 13 Mar 2010 14:42:17 +0100 (CET) Subject: [Python-checkins] r78924 - in python/branches/py3k: Doc/Makefile Doc/tools/sphinxext/download.html Message-ID: <20100313134217.23C6FF461@mail.python.org> Author: georg.brandl Date: Sat Mar 13 14:42:16 2010 New Revision: 78924 Log: Merged revisions 78921 via svnmerge from svn+ssh://pythondev at svn.python.org/python/trunk ........ r78921 | georg.brandl | 2010-03-13 14:39:46 +0100 (Sa, 13 M?r 2010) | 1 line Change/fix handling of docs download location: for daily builds, put them right next to the HTML. ........ Modified: python/branches/py3k/ (props changed) python/branches/py3k/Doc/Makefile python/branches/py3k/Doc/tools/sphinxext/download.html Modified: python/branches/py3k/Doc/Makefile ============================================================================== --- python/branches/py3k/Doc/Makefile (original) +++ python/branches/py3k/Doc/Makefile Sat Mar 13 14:42:16 2010 @@ -161,16 +161,17 @@ serve: ../Tools/scripts/serve.py build/html -# Targets for automatic doc build +# Targets for daily automated doc build # for development releases: always build autobuild-dev: make update - make dist + make dist SPHINXOPTS='-A daily=1' -# for stable releases: only build if not in development mode +# for stable releases: only build if not in pre-release stage (alpha, beta, rc) autobuild-stable: @case $(DISTVERSION) in *[abc]*) \ - echo "Not building; not a release version."; exit 1;; \ + echo "Not building; $(DISTVERSION) is not a release version."; \ + exit 1;; \ esac @make autobuild-dev Modified: python/branches/py3k/Doc/tools/sphinxext/download.html ============================================================================== --- python/branches/py3k/Doc/tools/sphinxext/download.html (original) +++ python/branches/py3k/Doc/tools/sphinxext/download.html Sat Mar 13 14:42:16 2010 @@ -1,15 +1,14 @@ {% extends "layout.html" %} {% set title = 'Download' %} -{% set dlbase = 'http://docs.python.org/ftp/python/doc/' + release %} -{% block body %} +{% if daily is defined %} + {% set dlbase = pathto('archives', 1) %} +{% else %} + {% set dlbase = 'http://docs.python.org/ftp/python/doc/' + release %} +{% endif %} +{% block body %}

    Download Python {{ release }} Documentation

    -{% if 'a' in release or 'b' in release or 'c' in release %} -

    We don't package the documentation for development releases for download. - Downloads will be available for the final release.

    - -{% else %} {% if last_updated %}

    Last updated on: {{ last_updated }}.

    {% endif %}

    To download an archive containing all the documents for this version of @@ -55,6 +54,4 @@

    If you have comments or suggestions for the Python documentation, please send email to docs at python.org.

    -{% endif %} - {% endblock %} From python-checkins at python.org Sat Mar 13 14:43:01 2010 From: python-checkins at python.org (georg.brandl) Date: Sat, 13 Mar 2010 14:43:01 +0100 (CET) Subject: [Python-checkins] r78925 - in python/branches/release31-maint: Doc/Makefile Doc/tools/sphinxext/download.html Message-ID: <20100313134301.C572CE3C1@mail.python.org> Author: georg.brandl Date: Sat Mar 13 14:43:01 2010 New Revision: 78925 Log: Merged revisions 78924 via svnmerge from svn+ssh://svn.python.org/python/branches/py3k ................ r78924 | georg.brandl | 2010-03-13 14:42:16 +0100 (Sa, 13 M?r 2010) | 9 lines Merged revisions 78921 via svnmerge from svn+ssh://pythondev at svn.python.org/python/trunk ........ r78921 | georg.brandl | 2010-03-13 14:39:46 +0100 (Sa, 13 M?r 2010) | 1 line Change/fix handling of docs download location: for daily builds, put them right next to the HTML. ........ ................ Modified: python/branches/release31-maint/ (props changed) python/branches/release31-maint/Doc/Makefile python/branches/release31-maint/Doc/tools/sphinxext/download.html Modified: python/branches/release31-maint/Doc/Makefile ============================================================================== --- python/branches/release31-maint/Doc/Makefile (original) +++ python/branches/release31-maint/Doc/Makefile Sat Mar 13 14:43:01 2010 @@ -157,16 +157,17 @@ check: $(PYTHON) tools/rstlint.py -i tools -# Targets for automatic doc build +# Targets for daily automated doc build # for development releases: always build autobuild-dev: make update - make dist + make dist SPHINXOPTS='-A daily=1' -# for stable releases: only build if not in development mode +# for stable releases: only build if not in pre-release stage (alpha, beta, rc) autobuild-stable: @case $(DISTVERSION) in *[abc]*) \ - echo "Not building; not a release version."; exit 1;; \ + echo "Not building; $(DISTVERSION) is not a release version."; \ + exit 1;; \ esac @make autobuild-dev Modified: python/branches/release31-maint/Doc/tools/sphinxext/download.html ============================================================================== --- python/branches/release31-maint/Doc/tools/sphinxext/download.html (original) +++ python/branches/release31-maint/Doc/tools/sphinxext/download.html Sat Mar 13 14:43:01 2010 @@ -1,15 +1,14 @@ {% extends "layout.html" %} {% set title = 'Download' %} -{% set dlbase = 'http://docs.python.org/ftp/python/doc/' + release %} -{% block body %} +{% if daily is defined %} + {% set dlbase = pathto('archives', 1) %} +{% else %} + {% set dlbase = 'http://docs.python.org/ftp/python/doc/' + release %} +{% endif %} +{% block body %}

    Download Python {{ release }} Documentation

    -{% if 'a' in release or 'b' in release or 'c' in release %} -

    We don't package the documentation for development releases for download. - Downloads will be available for the final release.

    - -{% else %} {% if last_updated %}

    Last updated on: {{ last_updated }}.

    {% endif %}

    To download an archive containing all the documents for this version of @@ -55,6 +54,4 @@

    If you have comments or suggestions for the Python documentation, please send email to docs at python.org.

    -{% endif %} - {% endblock %} From nnorwitz at gmail.com Sat Mar 13 14:58:16 2010 From: nnorwitz at gmail.com (Neal Norwitz) Date: Sat, 13 Mar 2010 08:58:16 -0500 Subject: [Python-checkins] Python Regression Test Failures all (2) Message-ID: <20100313135816.GA19469@kbk-i386-bb.psfb.org> 351 tests OK. 2 tests failed: test_xml_etree test_xml_etree_c 26 tests skipped: test_aepack test_al test_applesingle test_bsddb185 test_cd test_cl test_epoll test_gl test_imgfile test_ioctl test_kqueue test_macos test_macostools test_multiprocessing test_py3kwarn test_scriptpackages test_startfile test_sunaudiodev test_tcl test_tk test_ttk_guionly test_ttk_textonly test_unicode_file test_winreg test_winsound test_zipfile64 6 skips unexpected on linux2: test_multiprocessing test_ttk_guionly test_epoll test_tk test_ioctl test_ttk_textonly == CPython 2.7a4+ (trunk:78901M, Mar 13 2010, 04:02:54) [GCC 3.3.4 20040623 (Gentoo Linux 3.3.4-r1, ssp-3.3.2-2, pie-8.7.6)] == Linux-2.6.9-gentoo-r1-i686-AMD_Athlon-tm-_XP_3000+-with-gentoo-1.4.16 == /tmp/test_python_25621 test_grammar test_opcodes test_dict test_builtin test_exceptions test_types test_unittest test_doctest test_doctest2 test_MimeWriter test_SimpleHTTPServer test_StringIO test___all__ test___future__ test__locale test_abc test_abstract_numbers test_aepack test_aepack skipped -- No module named aetypes test_aifc test_al test_al skipped -- No module named al test_anydbm test_applesingle test_applesingle skipped -- No module named MacOS test_argparse test_array test_ascii_formatd test_ast test_asynchat test_asyncore test_atexit test_audioop test_augassign test_base64 test_bastion test_bigaddrspace test_bigmem test_binascii test_binhex test_binop test_bisect test_bool test_bsddb test_bsddb185 test_bsddb185 skipped -- No module named bsddb185 test_bsddb3 Sleepycat Software: Berkeley DB 4.1.25: (December 19, 2002) Test path prefix: /tmp/z-test_bsddb3-25621 test_buffer test_bufio test_bytes test_bz2 test_calendar test_call test_capi test_cd test_cd skipped -- No module named cd test_cfgparser test_cgi test_charmapcodec test_cl test_cl skipped -- No module named cl test_class test_cmath test_cmd test_cmd_line test_cmd_line_script test_code test_codeccallbacks test_codecencodings_cn test_codecencodings_hk test_codecencodings_jp test_codecencodings_kr test_codecencodings_tw test_codecmaps_cn test_codecmaps_hk test_codecmaps_jp test_codecmaps_kr test_codecmaps_tw test_codecs test_codeop test_coding test_coercion test_collections test_colorsys test_commands test_compare test_compile test_compileall test_compiler testCompileLibrary still working, be patient... test_complex test_complex_args test_contains test_contextlib test_cookie test_cookielib test_copy test_copy_reg test_cpickle test_cprofile test_crypt test_csv test_ctypes test_datetime test_dbm test_decimal test_decorators test_defaultdict test_deque test_descr test_descrtut test_dictcomps test_dictviews test_difflib test_dircache test_dis test_distutils [20620 refs] test_dl test_docxmlrpc test_dumbdbm test_dummy_thread test_dummy_threading test_email test_email_codecs test_email_renamed test_enumerate test_eof test_epoll test_epoll skipped -- kernel doesn't support epoll() test_errno test_exception_variations test_extcall test_fcntl test_file test_file2k test_filecmp test_fileinput test_fileio test_float test_fnmatch test_fork1 test_format test_fpformat test_fractions test_frozen test_ftplib test_funcattrs test_functools test_future test_future3 test_future4 test_future5 test_future_builtins test_gc test_gdbm test_generators test_genericpath test_genexps test_getargs test_getargs2 test_getopt test_gettext test_gl test_gl skipped -- No module named gl test_glob test_global test_grp test_gzip test_hash test_hashlib test_heapq test_hmac test_hotshot test_htmllib test_htmlparser test_httplib test_httpservers [16621 refs] [16621 refs] [16621 refs] [26870 refs] test_imageop test_imaplib test_imgfile test_imgfile skipped -- No module named imgfile test_imp test_import test_importhooks test_importlib test_index test_inspect test_int test_int_literal test_io test_ioctl test_ioctl skipped -- Unable to open /dev/tty test_isinstance test_iter test_iterlen test_itertools test_json test_kqueue test_kqueue skipped -- test works only on BSD test_largefile test_lib2to3 test_linecache test_list test_locale test_logging test_long test_long_future test_longexp test_macos test_macos skipped -- No module named MacOS test_macostools test_macostools skipped -- No module named MacOS test_macpath test_mailbox test_marshal test_math test_md5 test_memoryio test_memoryview test_mhlib test_mimetools test_mimetypes test_minidom test_mmap test_module test_modulefinder test_multibytecodec test_multibytecodec_support test_multifile test_multiprocessing test_multiprocessing skipped -- This platform lacks a functioning sem_open implementation, therefore, the required synchronization primitives needed will not function, see issue 3770. test_mutants test_mutex test_netrc test_new test_nis test_normalization test_ntpath test_old_mailbox test_openpty test_operator test_optparse test_os [16621 refs] [16621 refs] test_parser Expecting 's_push: parser stack overflow' in next line s_push: parser stack overflow test_pdb test_peepholer test_pep247 test_pep263 test_pep277 test_pep292 test_pep352 test_pickle test_pickletools test_pipes test_pkg test_pkgimport test_pkgutil test_platform [18017 refs] [18017 refs] test_plistlib test_poll test_popen [16626 refs] [16626 refs] [16626 refs] test_popen2 test_poplib test_posix test_posixpath test_pow test_pprint test_print test_profile test_profilehooks test_property test_pstats test_pty test_pwd test_py3kwarn test_py3kwarn skipped -- test.test_py3kwarn must be run with the -3 flag test_pyclbr test_pydoc [21734 refs] [21734 refs] [21734 refs] [21734 refs] [21734 refs] [21733 refs] [21733 refs] test_pyexpat test_queue test_quopri [19449 refs] [19449 refs] test_random test_re test_readline test_repr test_resource test_rfc822 test_richcmp test_robotparser test_runpy test_sax test_scope test_scriptpackages test_scriptpackages skipped -- No module named aetools test_select test_set test_setcomps test_sets test_sgmllib test_sha test_shelve test_shlex test_shutil test_signal test_site [16621 refs] [16621 refs] [16621 refs] [16621 refs] test_slice test_smtplib test_smtpnet test_socket test_socketserver test_softspace test_sort test_sqlite test_ssl test_startfile test_startfile skipped -- module os has no attribute startfile test_str test_strftime test_string test_stringprep test_strop test_strptime test_strtod test_struct test_structmembers test_structseq test_subprocess [16621 refs] [16621 refs] [16621 refs] [16621 refs] [16621 refs] [16621 refs] [16621 refs] [16621 refs] [16621 refs] [16621 refs] [16621 refs] [16621 refs] [16621 refs] [16621 refs] [16836 refs] [16621 refs] [16621 refs] [16621 refs] [16621 refs] [16621 refs] . [16621 refs] [16621 refs] this bit of output is from a test of stdout in a different process ... [16621 refs] [16621 refs] [16836 refs] [16621 refs] [16621 refs] [16621 refs] Traceback (most recent call last): File "", line 1, in KeyboardInterrupt [16621 refs] [16621 refs] [16621 refs] [16621 refs] [16621 refs] [16621 refs] [16621 refs] [16621 refs] [16621 refs] [16621 refs] [16621 refs] [16621 refs] [16621 refs] [16621 refs] [16621 refs] [16836 refs] [16621 refs] [16621 refs] [16621 refs] [16621 refs] [16621 refs] . [16621 refs] [16621 refs] this bit of output is from a test of stdout in a different process ... [16621 refs] [16621 refs] [16836 refs] test_sunaudiodev test_sunaudiodev skipped -- No module named sunaudiodev test_sundry test_symtable test_syntax test_sys [16621 refs] [16621 refs] [16621 refs] [16850 refs] [16644 refs] test_sysconfig [16621 refs] [16621 refs] test_tarfile test_tcl test_tcl skipped -- No module named _tkinter test_telnetlib test_tempfile [16621 refs] test_textwrap test_thread test_threaded_import test_threadedtempfile test_threading [19921 refs] [21092 refs] [20906 refs] [20906 refs] [20906 refs] [20906 refs] test_threading_local test_threadsignals test_time test_timeout test_tk test_tk skipped -- No module named _tkinter test_tokenize test_trace test_traceback test_transformer test_ttk_guionly test_ttk_guionly skipped -- No module named _tkinter test_ttk_textonly test_ttk_textonly skipped -- No module named _tkinter test_tuple test_typechecks test_ucn test_unary test_undocumented_details test_unicode test_unicode_file test_unicode_file skipped -- No Unicode filesystem semantics on this platform. test_unicodedata test_univnewlines test_univnewlines2k test_unpack test_urllib test_urllib2 test_urllib2_localnet test_urllib2net test_urllibnet test_urlparse test_userdict test_userlist test_userstring test_uu test_uuid WARNING: uuid.getnode is unreliable on many platforms. It is disabled until the code and/or test can be fixed properly. WARNING: uuid._ifconfig_getnode is unreliable on many platforms. It is disabled until the code and/or test can be fixed properly. WARNING: uuid._unixdll_getnode is unreliable on many platforms. It is disabled until the code and/or test can be fixed properly. test_wait3 test_wait4 test_warnings test_wave test_weakref test_whichdb test_winreg test_winreg skipped -- No module named _winreg test_winsound test_winsound skipped -- No module named winsound test_with test_wsgiref test_xdrlib test_xml_etree ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 770, in test.test_xml_etree.custom_builder Failed example: parser.feed(open("samples/simple.xml", "r").read()) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in parser.feed(open("samples/simple.xml", "r").read()) IOError: [Errno 2] No such file or directory: 'samples/simple.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 793, in test.test_xml_etree.custom_builder Failed example: parser.feed(open("samples/simple-ns.xml", "r").read()) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in parser.feed(open("samples/simple-ns.xml", "r").read()) IOError: [Errno 2] No such file or directory: 'samples/simple-ns.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 421, in test.test_xml_etree.file_init Failed example: tree = ET.ElementTree(file="samples/simple.xml") Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in tree = ET.ElementTree(file="samples/simple.xml") File "/tmp/python-test/local/lib/python2.7/xml/etree/ElementTree.py", line 611, in __init__ self.parse(file) File "/tmp/python-test/local/lib/python2.7/xml/etree/ElementTree.py", line 646, in parse source = open(source, "rb") IOError: [Errno 2] No such file or directory: 'samples/simple.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 422, in test.test_xml_etree.file_init Failed example: tree.find("element").tag Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in tree.find("element").tag AttributeError: 'NoneType' object has no attribute 'tag' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 424, in test.test_xml_etree.file_init Failed example: tree.find("element/../empty-element").tag Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in tree.find("element/../empty-element").tag AttributeError: 'NoneType' object has no attribute 'tag' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 811, in test.test_xml_etree.getchildren Failed example: tree = ET.parse(open("samples/simple.xml", "r")) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in tree = ET.parse(open("samples/simple.xml", "r")) IOError: [Errno 2] No such file or directory: 'samples/simple.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 812, in test.test_xml_etree.getchildren Failed example: for elem in tree.getroot().iter(): summarize_list(elem.getchildren()) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in for elem in tree.getroot().iter(): NameError: name 'tree' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 818, in test.test_xml_etree.getchildren Failed example: for elem in tree.getiterator(): summarize_list(elem.getchildren()) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in for elem in tree.getiterator(): NameError: name 'tree' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 647, in test.test_xml_etree.iterparse Failed example: context = iterparse("samples/simple.xml") Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in context = iterparse("samples/simple.xml") File "/tmp/python-test/local/lib/python2.7/xml/etree/ElementTree.py", line 1192, in iterparse source = open(source, "rb") IOError: [Errno 2] No such file or directory: 'samples/simple.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 648, in test.test_xml_etree.iterparse Failed example: action, elem = next(context) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in action, elem = next(context) NameError: name 'context' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 649, in test.test_xml_etree.iterparse Failed example: print action, elem.tag Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in print action, elem.tag NameError: name 'action' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 651, in test.test_xml_etree.iterparse Failed example: for action, elem in context: print action, elem.tag Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in for action, elem in context: NameError: name 'context' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 656, in test.test_xml_etree.iterparse Failed example: context.root.tag Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in context.root.tag NameError: name 'context' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 659, in test.test_xml_etree.iterparse Failed example: context = iterparse("samples/simple-ns.xml") Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in context = iterparse("samples/simple-ns.xml") File "/tmp/python-test/local/lib/python2.7/xml/etree/ElementTree.py", line 1192, in iterparse source = open(source, "rb") IOError: [Errno 2] No such file or directory: 'samples/simple-ns.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 660, in test.test_xml_etree.iterparse Failed example: for action, elem in context: print action, elem.tag Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in for action, elem in context: NameError: name 'context' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 668, in test.test_xml_etree.iterparse Failed example: context = iterparse("samples/simple.xml", events) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in context = iterparse("samples/simple.xml", events) File "/tmp/python-test/local/lib/python2.7/xml/etree/ElementTree.py", line 1192, in iterparse source = open(source, "rb") IOError: [Errno 2] No such file or directory: 'samples/simple.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 669, in test.test_xml_etree.iterparse Failed example: for action, elem in context: print action, elem.tag Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in for action, elem in context: NameError: name 'context' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 673, in test.test_xml_etree.iterparse Failed example: context = iterparse("samples/simple.xml", events=events) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in context = iterparse("samples/simple.xml", events=events) File "/tmp/python-test/local/lib/python2.7/xml/etree/ElementTree.py", line 1192, in iterparse source = open(source, "rb") IOError: [Errno 2] No such file or directory: 'samples/simple.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 674, in test.test_xml_etree.iterparse Failed example: for action, elem in context: print action, elem.tag Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in for action, elem in context: NameError: name 'context' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 678, in test.test_xml_etree.iterparse Failed example: context = iterparse("samples/simple.xml", events) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in context = iterparse("samples/simple.xml", events) File "/tmp/python-test/local/lib/python2.7/xml/etree/ElementTree.py", line 1192, in iterparse source = open(source, "rb") IOError: [Errno 2] No such file or directory: 'samples/simple.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 679, in test.test_xml_etree.iterparse Failed example: for action, elem in context: print action, elem.tag Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in for action, elem in context: NameError: name 'context' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 691, in test.test_xml_etree.iterparse Failed example: context = iterparse("samples/simple-ns.xml", events) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in context = iterparse("samples/simple-ns.xml", events) File "/tmp/python-test/local/lib/python2.7/xml/etree/ElementTree.py", line 1192, in iterparse source = open(source, "rb") IOError: [Errno 2] No such file or directory: 'samples/simple-ns.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 692, in test.test_xml_etree.iterparse Failed example: for action, elem in context: if action in ("start", "end"): print action, elem.tag else: print action, elem Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in for action, elem in context: NameError: name 'context' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 709, in test.test_xml_etree.iterparse Failed example: context = iterparse("samples/simple.xml", events) Expected: Traceback (most recent call last): ValueError: unknown event 'bogus' Got: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in context = iterparse("samples/simple.xml", events) File "/tmp/python-test/local/lib/python2.7/xml/etree/ElementTree.py", line 1192, in iterparse source = open(source, "rb") IOError: [Errno 2] No such file or directory: 'samples/simple.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 567, in test.test_xml_etree.parsefile Failed example: tree = ET.parse("samples/simple.xml") Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in tree = ET.parse("samples/simple.xml") File "/tmp/python-test/local/lib/python2.7/xml/etree/ElementTree.py", line 1176, in parse tree.parse(source, parser) File "/tmp/python-test/local/lib/python2.7/xml/etree/ElementTree.py", line 646, in parse source = open(source, "rb") IOError: [Errno 2] No such file or directory: 'samples/simple.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 568, in test.test_xml_etree.parsefile Failed example: normalize_crlf(tree) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in normalize_crlf(tree) NameError: name 'tree' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 569, in test.test_xml_etree.parsefile Failed example: tree.write(sys.stdout) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in tree.write(sys.stdout) NameError: name 'tree' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 575, in test.test_xml_etree.parsefile Failed example: tree = ET.parse("samples/simple-ns.xml") Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in tree = ET.parse("samples/simple-ns.xml") File "/tmp/python-test/local/lib/python2.7/xml/etree/ElementTree.py", line 1176, in parse tree.parse(source, parser) File "/tmp/python-test/local/lib/python2.7/xml/etree/ElementTree.py", line 646, in parse source = open(source, "rb") IOError: [Errno 2] No such file or directory: 'samples/simple-ns.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 576, in test.test_xml_etree.parsefile Failed example: normalize_crlf(tree) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in normalize_crlf(tree) NameError: name 'tree' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 577, in test.test_xml_etree.parsefile Failed example: tree.write(sys.stdout) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in tree.write(sys.stdout) NameError: name 'tree' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 587, in test.test_xml_etree.parsefile Failed example: parser.feed(open("samples/simple.xml").read()) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in parser.feed(open("samples/simple.xml").read()) IOError: [Errno 2] No such file or directory: 'samples/simple.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 588, in test.test_xml_etree.parsefile Failed example: print serialize(parser.close()) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in print serialize(parser.close()) File "/tmp/python-test/local/lib/python2.7/xml/etree/ElementTree.py", line 1635, in close self._raiseerror(v) File "/tmp/python-test/local/lib/python2.7/xml/etree/ElementTree.py", line 1487, in _raiseerror raise err ParseError: no element found: line 1, column 0 ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 596, in test.test_xml_etree.parsefile Failed example: parser.feed(open("samples/simple.xml").read()) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in parser.feed(open("samples/simple.xml").read()) IOError: [Errno 2] No such file or directory: 'samples/simple.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 597, in test.test_xml_etree.parsefile Failed example: print serialize(parser.close()) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in print serialize(parser.close()) File "/tmp/python-test/local/lib/python2.7/xml/etree/ElementTree.py", line 1635, in close self._raiseerror(v) File "/tmp/python-test/local/lib/python2.7/xml/etree/ElementTree.py", line 1487, in _raiseerror raise err ParseError: no element found: line 1, column 0 ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 606, in test.test_xml_etree.parsefile Failed example: parser.feed(open("samples/simple.xml").read()) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in parser.feed(open("samples/simple.xml").read()) IOError: [Errno 2] No such file or directory: 'samples/simple.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 607, in test.test_xml_etree.parsefile Failed example: print serialize(parser.close()) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in print serialize(parser.close()) File "/tmp/python-test/local/lib/python2.7/xml/etree/ElementTree.py", line 1635, in close self._raiseerror(v) File "/tmp/python-test/local/lib/python2.7/xml/etree/ElementTree.py", line 1487, in _raiseerror raise err ParseError: no element found: line 1, column 0 ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 1361, in test.test_xml_etree.xinclude_default Failed example: ElementInclude.include(document) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in ElementInclude.include(document) File "/tmp/python-test/local/lib/python2.7/xml/etree/ElementInclude.py", line 111, in include node = loader(href, parse) File "/tmp/python-test/local/lib/python2.7/xml/etree/ElementInclude.py", line 78, in default_loader file = open(href) IOError: [Errno 2] No such file or directory: 'samples/simple.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 1362, in test.test_xml_etree.xinclude_default Failed example: print serialize(document) # default Expected:

    Example.

    text texttail
    Got:

    Example.

    ********************************************************************** 6 items had failures: 2 of 8 in test.test_xml_etree.custom_builder 3 of 8 in test.test_xml_etree.file_init 3 of 19 in test.test_xml_etree.getchildren 16 of 29 in test.test_xml_etree.iterparse 12 of 17 in test.test_xml_etree.parsefile 2 of 4 in test.test_xml_etree.xinclude_default ***Test Failed*** 38 failures. test test_xml_etree failed -- 38 of 591 doctests failed Re-running test 'test_xml_etree' in verbose mode ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 770, in test.test_xml_etree.custom_builder Failed example: parser.feed(open("samples/simple.xml", "r").read()) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in parser.feed(open("samples/simple.xml", "r").read()) IOError: [Errno 2] No such file or directory: 'samples/simple.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 793, in test.test_xml_etree.custom_builder Failed example: parser.feed(open("samples/simple-ns.xml", "r").read()) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in parser.feed(open("samples/simple-ns.xml", "r").read()) IOError: [Errno 2] No such file or directory: 'samples/simple-ns.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 421, in test.test_xml_etree.file_init Failed example: tree = ET.ElementTree(file="samples/simple.xml") Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in tree = ET.ElementTree(file="samples/simple.xml") File "/tmp/python-test/local/lib/python2.7/xml/etree/ElementTree.py", line 611, in __init__ self.parse(file) File "/tmp/python-test/local/lib/python2.7/xml/etree/ElementTree.py", line 646, in parse source = open(source, "rb") IOError: [Errno 2] No such file or directory: 'samples/simple.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 422, in test.test_xml_etree.file_init Failed example: tree.find("element").tag Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in tree.find("element").tag AttributeError: 'NoneType' object has no attribute 'tag' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 424, in test.test_xml_etree.file_init Failed example: tree.find("element/../empty-element").tag Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in tree.find("element/../empty-element").tag AttributeError: 'NoneType' object has no attribute 'tag' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 811, in test.test_xml_etree.getchildren Failed example: tree = ET.parse(open("samples/simple.xml", "r")) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in tree = ET.parse(open("samples/simple.xml", "r")) IOError: [Errno 2] No such file or directory: 'samples/simple.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 812, in test.test_xml_etree.getchildren Failed example: for elem in tree.getroot().iter(): summarize_list(elem.getchildren()) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in for elem in tree.getroot().iter(): NameError: name 'tree' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 818, in test.test_xml_etree.getchildren Failed example: for elem in tree.getiterator(): summarize_list(elem.getchildren()) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in for elem in tree.getiterator(): NameError: name 'tree' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 647, in test.test_xml_etree.iterparse Failed example: context = iterparse("samples/simple.xml") Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in context = iterparse("samples/simple.xml") File "/tmp/python-test/local/lib/python2.7/xml/etree/ElementTree.py", line 1192, in iterparse source = open(source, "rb") IOError: [Errno 2] No such file or directory: 'samples/simple.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 648, in test.test_xml_etree.iterparse Failed example: action, elem = next(context) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in action, elem = next(context) NameError: name 'context' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 649, in test.test_xml_etree.iterparse Failed example: print action, elem.tag Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in print action, elem.tag NameError: name 'action' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 651, in test.test_xml_etree.iterparse Failed example: for action, elem in context: print action, elem.tag Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in for action, elem in context: NameError: name 'context' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 656, in test.test_xml_etree.iterparse Failed example: context.root.tag Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in context.root.tag NameError: name 'context' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 659, in test.test_xml_etree.iterparse Failed example: context = iterparse("samples/simple-ns.xml") Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in context = iterparse("samples/simple-ns.xml") File "/tmp/python-test/local/lib/python2.7/xml/etree/ElementTree.py", line 1192, in iterparse source = open(source, "rb") IOError: [Errno 2] No such file or directory: 'samples/simple-ns.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 660, in test.test_xml_etree.iterparse Failed example: for action, elem in context: print action, elem.tag Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in for action, elem in context: NameError: name 'context' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 668, in test.test_xml_etree.iterparse Failed example: context = iterparse("samples/simple.xml", events) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in context = iterparse("samples/simple.xml", events) File "/tmp/python-test/local/lib/python2.7/xml/etree/ElementTree.py", line 1192, in iterparse source = open(source, "rb") IOError: [Errno 2] No such file or directory: 'samples/simple.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 669, in test.test_xml_etree.iterparse Failed example: for action, elem in context: print action, elem.tag Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in for action, elem in context: NameError: name 'context' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 673, in test.test_xml_etree.iterparse Failed example: context = iterparse("samples/simple.xml", events=events) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in context = iterparse("samples/simple.xml", events=events) File "/tmp/python-test/local/lib/python2.7/xml/etree/ElementTree.py", line 1192, in iterparse source = open(source, "rb") IOError: [Errno 2] No such file or directory: 'samples/simple.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 674, in test.test_xml_etree.iterparse Failed example: for action, elem in context: print action, elem.tag Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in for action, elem in context: NameError: name 'context' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 678, in test.test_xml_etree.iterparse Failed example: context = iterparse("samples/simple.xml", events) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in context = iterparse("samples/simple.xml", events) File "/tmp/python-test/local/lib/python2.7/xml/etree/ElementTree.py", line 1192, in iterparse source = open(source, "rb") IOError: [Errno 2] No such file or directory: 'samples/simple.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 679, in test.test_xml_etree.iterparse Failed example: for action, elem in context: print action, elem.tag Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in for action, elem in context: NameError: name 'context' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 691, in test.test_xml_etree.iterparse Failed example: context = iterparse("samples/simple-ns.xml", events) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in context = iterparse("samples/simple-ns.xml", events) File "/tmp/python-test/local/lib/python2.7/xml/etree/ElementTree.py", line 1192, in iterparse source = open(source, "rb") IOError: [Errno 2] No such file or directory: 'samples/simple-ns.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 692, in test.test_xml_etree.iterparse Failed example: for action, elem in context: if action in ("start", "end"): print action, elem.tag else: print action, elem Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in for action, elem in context: NameError: name 'context' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 709, in test.test_xml_etree.iterparse Failed example: context = iterparse("samples/simple.xml", events) Expected: Traceback (most recent call last): ValueError: unknown event 'bogus' Got: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in context = iterparse("samples/simple.xml", events) File "/tmp/python-test/local/lib/python2.7/xml/etree/ElementTree.py", line 1192, in iterparse source = open(source, "rb") IOError: [Errno 2] No such file or directory: 'samples/simple.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 567, in test.test_xml_etree.parsefile Failed example: tree = ET.parse("samples/simple.xml") Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in tree = ET.parse("samples/simple.xml") File "/tmp/python-test/local/lib/python2.7/xml/etree/ElementTree.py", line 1176, in parse tree.parse(source, parser) File "/tmp/python-test/local/lib/python2.7/xml/etree/ElementTree.py", line 646, in parse source = open(source, "rb") IOError: [Errno 2] No such file or directory: 'samples/simple.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 568, in test.test_xml_etree.parsefile Failed example: normalize_crlf(tree) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in normalize_crlf(tree) NameError: name 'tree' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 569, in test.test_xml_etree.parsefile Failed example: tree.write(sys.stdout) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in tree.write(sys.stdout) NameError: name 'tree' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 575, in test.test_xml_etree.parsefile Failed example: tree = ET.parse("samples/simple-ns.xml") Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in tree = ET.parse("samples/simple-ns.xml") File "/tmp/python-test/local/lib/python2.7/xml/etree/ElementTree.py", line 1176, in parse tree.parse(source, parser) File "/tmp/python-test/local/lib/python2.7/xml/etree/ElementTree.py", line 646, in parse source = open(source, "rb") IOError: [Errno 2] No such file or directory: 'samples/simple-ns.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 576, in test.test_xml_etree.parsefile Failed example: normalize_crlf(tree) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in normalize_crlf(tree) NameError: name 'tree' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 577, in test.test_xml_etree.parsefile Failed example: tree.write(sys.stdout) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in tree.write(sys.stdout) NameError: name 'tree' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 587, in test.test_xml_etree.parsefile Failed example: parser.feed(open("samples/simple.xml").read()) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in parser.feed(open("samples/simple.xml").read()) IOError: [Errno 2] No such file or directory: 'samples/simple.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 588, in test.test_xml_etree.parsefile Failed example: print serialize(parser.close()) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in print serialize(parser.close()) File "/tmp/python-test/local/lib/python2.7/xml/etree/ElementTree.py", line 1635, in close self._raiseerror(v) File "/tmp/python-test/local/lib/python2.7/xml/etree/ElementTree.py", line 1487, in _raiseerror raise err ParseError: no element found: line 1, column 0 ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 596, in test.test_xml_etree.parsefile Failed example: parser.feed(open("samples/simple.xml").read()) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in parser.feed(open("samples/simple.xml").read()) IOError: [Errno 2] No such file or directory: 'samples/simple.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 597, in test.test_xml_etree.parsefile Failed example: print serialize(parser.close()) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in print serialize(parser.close()) File "/tmp/python-test/local/lib/python2.7/xml/etree/ElementTree.py", line 1635, in close self._raiseerror(v) File "/tmp/python-test/local/lib/python2.7/xml/etree/ElementTree.py", line 1487, in _raiseerror raise err ParseError: no element found: line 1, column 0 ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 606, in test.test_xml_etree.parsefile Failed example: parser.feed(open("samples/simple.xml").read()) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in parser.feed(open("samples/simple.xml").read()) IOError: [Errno 2] No such file or directory: 'samples/simple.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 607, in test.test_xml_etree.parsefile Failed example: print serialize(parser.close()) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in print serialize(parser.close()) File "/tmp/python-test/local/lib/python2.7/xml/etree/ElementTree.py", line 1635, in close self._raiseerror(v) File "/tmp/python-test/local/lib/python2.7/xml/etree/ElementTree.py", line 1487, in _raiseerror raise err ParseError: no element found: line 1, column 0 ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 1361, in test.test_xml_etree.xinclude_default Failed example: ElementInclude.include(document) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in ElementInclude.include(document) File "/tmp/python-test/local/lib/python2.7/xml/etree/ElementInclude.py", line 111, in include node = loader(href, parse) File "/tmp/python-test/local/lib/python2.7/xml/etree/ElementInclude.py", line 78, in default_loader file = open(href) IOError: [Errno 2] No such file or directory: 'samples/simple.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 1362, in test.test_xml_etree.xinclude_default Failed example: print serialize(document) # default Expected:

    Example.

    text texttail
    Got:

    Example.

    ********************************************************************** 6 items had failures: 2 of 8 in test.test_xml_etree.custom_builder 3 of 8 in test.test_xml_etree.file_init 3 of 19 in test.test_xml_etree.getchildren 16 of 29 in test.test_xml_etree.iterparse 12 of 17 in test.test_xml_etree.parsefile 2 of 4 in test.test_xml_etree.xinclude_default ***Test Failed*** 38 failures. test test_xml_etree failed -- 38 of 591 doctests failed test_xml_etree_c ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 770, in test.test_xml_etree.custom_builder Failed example: parser.feed(open("samples/simple.xml", "r").read()) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in parser.feed(open("samples/simple.xml", "r").read()) IOError: [Errno 2] No such file or directory: 'samples/simple.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 793, in test.test_xml_etree.custom_builder Failed example: parser.feed(open("samples/simple-ns.xml", "r").read()) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in parser.feed(open("samples/simple-ns.xml", "r").read()) IOError: [Errno 2] No such file or directory: 'samples/simple-ns.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 421, in test.test_xml_etree.file_init Failed example: tree = ET.ElementTree(file="samples/simple.xml") Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in tree = ET.ElementTree(file="samples/simple.xml") File "/tmp/python-test/local/lib/python2.7/xml/etree/ElementTree.py", line 611, in __init__ self.parse(file) File "", line 25, in parse IOError: [Errno 2] No such file or directory: 'samples/simple.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 422, in test.test_xml_etree.file_init Failed example: tree.find("element").tag Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in tree.find("element").tag AttributeError: 'NoneType' object has no attribute 'tag' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 424, in test.test_xml_etree.file_init Failed example: tree.find("element/../empty-element").tag Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in tree.find("element/../empty-element").tag AttributeError: 'NoneType' object has no attribute 'tag' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 811, in test.test_xml_etree.getchildren Failed example: tree = ET.parse(open("samples/simple.xml", "r")) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in tree = ET.parse(open("samples/simple.xml", "r")) IOError: [Errno 2] No such file or directory: 'samples/simple.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 812, in test.test_xml_etree.getchildren Failed example: for elem in tree.getroot().iter(): summarize_list(elem.getchildren()) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in for elem in tree.getroot().iter(): NameError: name 'tree' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 818, in test.test_xml_etree.getchildren Failed example: for elem in tree.getiterator(): summarize_list(elem.getchildren()) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in for elem in tree.getiterator(): NameError: name 'tree' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 647, in test.test_xml_etree.iterparse Failed example: context = iterparse("samples/simple.xml") Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in context = iterparse("samples/simple.xml") File "", line 63, in __init__ IOError: [Errno 2] No such file or directory: 'samples/simple.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 648, in test.test_xml_etree.iterparse Failed example: action, elem = next(context) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in action, elem = next(context) NameError: name 'context' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 649, in test.test_xml_etree.iterparse Failed example: print action, elem.tag Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in print action, elem.tag NameError: name 'action' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 651, in test.test_xml_etree.iterparse Failed example: for action, elem in context: print action, elem.tag Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in for action, elem in context: NameError: name 'context' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 656, in test.test_xml_etree.iterparse Failed example: context.root.tag Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in context.root.tag NameError: name 'context' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 659, in test.test_xml_etree.iterparse Failed example: context = iterparse("samples/simple-ns.xml") Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in context = iterparse("samples/simple-ns.xml") File "", line 63, in __init__ IOError: [Errno 2] No such file or directory: 'samples/simple-ns.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 660, in test.test_xml_etree.iterparse Failed example: for action, elem in context: print action, elem.tag Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in for action, elem in context: NameError: name 'context' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 668, in test.test_xml_etree.iterparse Failed example: context = iterparse("samples/simple.xml", events) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in context = iterparse("samples/simple.xml", events) File "", line 63, in __init__ IOError: [Errno 2] No such file or directory: 'samples/simple.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 669, in test.test_xml_etree.iterparse Failed example: for action, elem in context: print action, elem.tag Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in for action, elem in context: NameError: name 'context' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 673, in test.test_xml_etree.iterparse Failed example: context = iterparse("samples/simple.xml", events=events) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in context = iterparse("samples/simple.xml", events=events) File "", line 63, in __init__ IOError: [Errno 2] No such file or directory: 'samples/simple.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 674, in test.test_xml_etree.iterparse Failed example: for action, elem in context: print action, elem.tag Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in for action, elem in context: NameError: name 'context' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 678, in test.test_xml_etree.iterparse Failed example: context = iterparse("samples/simple.xml", events) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in context = iterparse("samples/simple.xml", events) File "", line 63, in __init__ IOError: [Errno 2] No such file or directory: 'samples/simple.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 679, in test.test_xml_etree.iterparse Failed example: for action, elem in context: print action, elem.tag Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in for action, elem in context: NameError: name 'context' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 691, in test.test_xml_etree.iterparse Failed example: context = iterparse("samples/simple-ns.xml", events) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in context = iterparse("samples/simple-ns.xml", events) File "", line 63, in __init__ IOError: [Errno 2] No such file or directory: 'samples/simple-ns.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 692, in test.test_xml_etree.iterparse Failed example: for action, elem in context: if action in ("start", "end"): print action, elem.tag else: print action, elem Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in for action, elem in context: NameError: name 'context' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 709, in test.test_xml_etree.iterparse Failed example: context = iterparse("samples/simple.xml", events) Expected: Traceback (most recent call last): ValueError: unknown event 'bogus' Got: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in context = iterparse("samples/simple.xml", events) File "", line 63, in __init__ IOError: [Errno 2] No such file or directory: 'samples/simple.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 567, in test.test_xml_etree.parsefile Failed example: tree = ET.parse("samples/simple.xml") Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in tree = ET.parse("samples/simple.xml") File "", line 56, in parse File "", line 25, in parse IOError: [Errno 2] No such file or directory: 'samples/simple.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 568, in test.test_xml_etree.parsefile Failed example: normalize_crlf(tree) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in normalize_crlf(tree) NameError: name 'tree' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 569, in test.test_xml_etree.parsefile Failed example: tree.write(sys.stdout) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in tree.write(sys.stdout) NameError: name 'tree' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 575, in test.test_xml_etree.parsefile Failed example: tree = ET.parse("samples/simple-ns.xml") Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in tree = ET.parse("samples/simple-ns.xml") File "", line 56, in parse File "", line 25, in parse IOError: [Errno 2] No such file or directory: 'samples/simple-ns.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 576, in test.test_xml_etree.parsefile Failed example: normalize_crlf(tree) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in normalize_crlf(tree) NameError: name 'tree' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 577, in test.test_xml_etree.parsefile Failed example: tree.write(sys.stdout) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in tree.write(sys.stdout) NameError: name 'tree' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 587, in test.test_xml_etree.parsefile Failed example: parser.feed(open("samples/simple.xml").read()) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in parser.feed(open("samples/simple.xml").read()) IOError: [Errno 2] No such file or directory: 'samples/simple.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 588, in test.test_xml_etree.parsefile Failed example: print serialize(parser.close()) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in print serialize(parser.close()) ParseError: no element found: line 1, column 0 ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 596, in test.test_xml_etree.parsefile Failed example: parser.feed(open("samples/simple.xml").read()) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in parser.feed(open("samples/simple.xml").read()) IOError: [Errno 2] No such file or directory: 'samples/simple.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 597, in test.test_xml_etree.parsefile Failed example: print serialize(parser.close()) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in print serialize(parser.close()) ParseError: no element found: line 1, column 0 ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 606, in test.test_xml_etree.parsefile Failed example: parser.feed(open("samples/simple.xml").read()) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in parser.feed(open("samples/simple.xml").read()) IOError: [Errno 2] No such file or directory: 'samples/simple.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 607, in test.test_xml_etree.parsefile Failed example: print serialize(parser.close()) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in print serialize(parser.close()) ParseError: no element found: line 1, column 0 ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 1361, in test.test_xml_etree.xinclude_default Failed example: ElementInclude.include(document) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in ElementInclude.include(document) File "/tmp/python-test/local/lib/python2.7/xml/etree/ElementInclude.py", line 111, in include node = loader(href, parse) File "/tmp/python-test/local/lib/python2.7/xml/etree/ElementInclude.py", line 78, in default_loader file = open(href) IOError: [Errno 2] No such file or directory: 'samples/simple.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 1362, in test.test_xml_etree.xinclude_default Failed example: print serialize(document) # default Expected:

    Example.

    text texttail
    Got:

    Example.

    ********************************************************************** 6 items had failures: 2 of 8 in test.test_xml_etree.custom_builder 3 of 8 in test.test_xml_etree.file_init 3 of 19 in test.test_xml_etree.getchildren 16 of 29 in test.test_xml_etree.iterparse 12 of 17 in test.test_xml_etree.parsefile 2 of 4 in test.test_xml_etree.xinclude_default ***Test Failed*** 38 failures. test test_xml_etree_c failed -- 38 of 591 doctests failed Re-running test 'test_xml_etree_c' in verbose mode doctest (test.test_xml_etree_c) ... 1 tests with zero failures ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 770, in test.test_xml_etree.custom_builder Failed example: parser.feed(open("samples/simple.xml", "r").read()) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in parser.feed(open("samples/simple.xml", "r").read()) IOError: [Errno 2] No such file or directory: 'samples/simple.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 793, in test.test_xml_etree.custom_builder Failed example: parser.feed(open("samples/simple-ns.xml", "r").read()) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in parser.feed(open("samples/simple-ns.xml", "r").read()) IOError: [Errno 2] No such file or directory: 'samples/simple-ns.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 421, in test.test_xml_etree.file_init Failed example: tree = ET.ElementTree(file="samples/simple.xml") Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in tree = ET.ElementTree(file="samples/simple.xml") File "/tmp/python-test/local/lib/python2.7/xml/etree/ElementTree.py", line 611, in __init__ self.parse(file) File "", line 25, in parse IOError: [Errno 2] No such file or directory: 'samples/simple.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 422, in test.test_xml_etree.file_init Failed example: tree.find("element").tag Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in tree.find("element").tag AttributeError: 'NoneType' object has no attribute 'tag' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 424, in test.test_xml_etree.file_init Failed example: tree.find("element/../empty-element").tag Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in tree.find("element/../empty-element").tag AttributeError: 'NoneType' object has no attribute 'tag' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 811, in test.test_xml_etree.getchildren Failed example: tree = ET.parse(open("samples/simple.xml", "r")) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in tree = ET.parse(open("samples/simple.xml", "r")) IOError: [Errno 2] No such file or directory: 'samples/simple.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 812, in test.test_xml_etree.getchildren Failed example: for elem in tree.getroot().iter(): summarize_list(elem.getchildren()) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in for elem in tree.getroot().iter(): NameError: name 'tree' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 818, in test.test_xml_etree.getchildren Failed example: for elem in tree.getiterator(): summarize_list(elem.getchildren()) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in for elem in tree.getiterator(): NameError: name 'tree' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 647, in test.test_xml_etree.iterparse Failed example: context = iterparse("samples/simple.xml") Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in context = iterparse("samples/simple.xml") File "", line 63, in __init__ IOError: [Errno 2] No such file or directory: 'samples/simple.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 648, in test.test_xml_etree.iterparse Failed example: action, elem = next(context) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in action, elem = next(context) NameError: name 'context' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 649, in test.test_xml_etree.iterparse Failed example: print action, elem.tag Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in print action, elem.tag NameError: name 'action' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 651, in test.test_xml_etree.iterparse Failed example: for action, elem in context: print action, elem.tag Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in for action, elem in context: NameError: name 'context' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 656, in test.test_xml_etree.iterparse Failed example: context.root.tag Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in context.root.tag NameError: name 'context' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 659, in test.test_xml_etree.iterparse Failed example: context = iterparse("samples/simple-ns.xml") Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in context = iterparse("samples/simple-ns.xml") File "", line 63, in __init__ IOError: [Errno 2] No such file or directory: 'samples/simple-ns.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 660, in test.test_xml_etree.iterparse Failed example: for action, elem in context: print action, elem.tag Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in for action, elem in context: NameError: name 'context' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 668, in test.test_xml_etree.iterparse Failed example: context = iterparse("samples/simple.xml", events) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in context = iterparse("samples/simple.xml", events) File "", line 63, in __init__ IOError: [Errno 2] No such file or directory: 'samples/simple.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 669, in test.test_xml_etree.iterparse Failed example: for action, elem in context: print action, elem.tag Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in for action, elem in context: NameError: name 'context' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 673, in test.test_xml_etree.iterparse Failed example: context = iterparse("samples/simple.xml", events=events) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in context = iterparse("samples/simple.xml", events=events) File "", line 63, in __init__ IOError: [Errno 2] No such file or directory: 'samples/simple.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 674, in test.test_xml_etree.iterparse Failed example: for action, elem in context: print action, elem.tag Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in for action, elem in context: NameError: name 'context' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 678, in test.test_xml_etree.iterparse Failed example: context = iterparse("samples/simple.xml", events) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in context = iterparse("samples/simple.xml", events) File "", line 63, in __init__ IOError: [Errno 2] No such file or directory: 'samples/simple.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 679, in test.test_xml_etree.iterparse Failed example: for action, elem in context: print action, elem.tag Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in for action, elem in context: NameError: name 'context' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 691, in test.test_xml_etree.iterparse Failed example: context = iterparse("samples/simple-ns.xml", events) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in context = iterparse("samples/simple-ns.xml", events) File "", line 63, in __init__ IOError: [Errno 2] No such file or directory: 'samples/simple-ns.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 692, in test.test_xml_etree.iterparse Failed example: for action, elem in context: if action in ("start", "end"): print action, elem.tag else: print action, elem Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in for action, elem in context: NameError: name 'context' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 709, in test.test_xml_etree.iterparse Failed example: context = iterparse("samples/simple.xml", events) Expected: Traceback (most recent call last): ValueError: unknown event 'bogus' Got: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in context = iterparse("samples/simple.xml", events) File "", line 63, in __init__ IOError: [Errno 2] No such file or directory: 'samples/simple.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 567, in test.test_xml_etree.parsefile Failed example: tree = ET.parse("samples/simple.xml") Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in tree = ET.parse("samples/simple.xml") File "", line 56, in parse File "", line 25, in parse IOError: [Errno 2] No such file or directory: 'samples/simple.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 568, in test.test_xml_etree.parsefile Failed example: normalize_crlf(tree) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in normalize_crlf(tree) NameError: name 'tree' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 569, in test.test_xml_etree.parsefile Failed example: tree.write(sys.stdout) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in tree.write(sys.stdout) NameError: name 'tree' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 575, in test.test_xml_etree.parsefile Failed example: tree = ET.parse("samples/simple-ns.xml") Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in tree = ET.parse("samples/simple-ns.xml") File "", line 56, in parse File "", line 25, in parse IOError: [Errno 2] No such file or directory: 'samples/simple-ns.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 576, in test.test_xml_etree.parsefile Failed example: normalize_crlf(tree) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in normalize_crlf(tree) NameError: name 'tree' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 577, in test.test_xml_etree.parsefile Failed example: tree.write(sys.stdout) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in tree.write(sys.stdout) NameError: name 'tree' is not defined ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 587, in test.test_xml_etree.parsefile Failed example: parser.feed(open("samples/simple.xml").read()) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in parser.feed(open("samples/simple.xml").read()) IOError: [Errno 2] No such file or directory: 'samples/simple.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 588, in test.test_xml_etree.parsefile Failed example: print serialize(parser.close()) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in print serialize(parser.close()) ParseError: no element found: line 1, column 0 ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 596, in test.test_xml_etree.parsefile Failed example: parser.feed(open("samples/simple.xml").read()) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in parser.feed(open("samples/simple.xml").read()) IOError: [Errno 2] No such file or directory: 'samples/simple.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 597, in test.test_xml_etree.parsefile Failed example: print serialize(parser.close()) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in print serialize(parser.close()) ParseError: no element found: line 1, column 0 ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 606, in test.test_xml_etree.parsefile Failed example: parser.feed(open("samples/simple.xml").read()) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in parser.feed(open("samples/simple.xml").read()) IOError: [Errno 2] No such file or directory: 'samples/simple.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 607, in test.test_xml_etree.parsefile Failed example: print serialize(parser.close()) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in print serialize(parser.close()) ParseError: no element found: line 1, column 0 ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 1361, in test.test_xml_etree.xinclude_default Failed example: ElementInclude.include(document) Exception raised: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/doctest.py", line 1248, in __run compileflags, 1) in test.globs File "", line 1, in ElementInclude.include(document) File "/tmp/python-test/local/lib/python2.7/xml/etree/ElementInclude.py", line 111, in include node = loader(href, parse) File "/tmp/python-test/local/lib/python2.7/xml/etree/ElementInclude.py", line 78, in default_loader file = open(href) IOError: [Errno 2] No such file or directory: 'samples/simple.xml' ********************************************************************** File "/tmp/python-test/local/lib/python2.7/test/test_xml_etree.py", line 1362, in test.test_xml_etree.xinclude_default Failed example: print serialize(document) # default Expected:

    Example.

    text texttail
    Got:

    Example.

    ********************************************************************** 6 items had failures: 2 of 8 in test.test_xml_etree.custom_builder 3 of 8 in test.test_xml_etree.file_init 3 of 19 in test.test_xml_etree.getchildren 16 of 29 in test.test_xml_etree.iterparse 12 of 17 in test.test_xml_etree.parsefile 2 of 4 in test.test_xml_etree.xinclude_default ***Test Failed*** 38 failures. test test_xml_etree_c failed -- 38 of 591 doctests failed test_xmllib test_xmlrpc test_xpickle sh: line 1: python2.4: command not found sh: line 1: python2.6: command not found test_xrange test_zipfile test_zipfile64 test_zipfile64 skipped -- test requires loads of disk-space bytes and a long time to run test_zipimport test_zipimport_support test_zlib 351 tests OK. 2 tests failed: test_xml_etree test_xml_etree_c 26 tests skipped: test_aepack test_al test_applesingle test_bsddb185 test_cd test_cl test_epoll test_gl test_imgfile test_ioctl test_kqueue test_macos test_macostools test_multiprocessing test_py3kwarn test_scriptpackages test_startfile test_sunaudiodev test_tcl test_tk test_ttk_guionly test_ttk_textonly test_unicode_file test_winreg test_winsound test_zipfile64 6 skips unexpected on linux2: test_multiprocessing test_ttk_guionly test_epoll test_tk test_ioctl test_ttk_textonly [963464 refs] From python-checkins at python.org Sat Mar 13 15:18:35 2010 From: python-checkins at python.org (mark.dickinson) Date: Sat, 13 Mar 2010 15:18:35 +0100 (CET) Subject: [Python-checkins] r78926 - python/trunk/Python/structmember.c Message-ID: <20100313141835.14F25E1DF@mail.python.org> Author: mark.dickinson Date: Sat Mar 13 15:18:34 2010 New Revision: 78926 Log: Fix incorrect error checks in structmember.c (backport of r78920 from py3k). Modified: python/trunk/Python/structmember.c Modified: python/trunk/Python/structmember.c ============================================================================== --- python/trunk/Python/structmember.c (original) +++ python/trunk/Python/structmember.c Sat Mar 13 15:18:34 2010 @@ -257,12 +257,13 @@ } case T_UINT:{ unsigned long ulong_val = PyLong_AsUnsignedLong(v); - if ((ulong_val == (unsigned int)-1) && PyErr_Occurred()) { + if ((ulong_val == (unsigned long)-1) && PyErr_Occurred()) { /* XXX: For compatibility, accept negative int values as well. */ PyErr_Clear(); ulong_val = PyLong_AsLong(v); - if ((ulong_val == (unsigned int)-1) && PyErr_Occurred()) + if ((ulong_val == (unsigned long)-1) && + PyErr_Occurred()) return -1; *(unsigned int *)addr = (unsigned int)ulong_val; WARN("Writing negative value into unsigned field"); @@ -286,7 +287,7 @@ as well. */ PyErr_Clear(); *(unsigned long*)addr = PyLong_AsLong(v); - if ((*(unsigned long*)addr == (unsigned int)-1) + if ((*(unsigned long*)addr == (unsigned long)-1) && PyErr_Occurred()) return -1; WARN("Writing negative value into unsigned field"); From python-checkins at python.org Sat Mar 13 15:24:41 2010 From: python-checkins at python.org (mark.dickinson) Date: Sat, 13 Mar 2010 15:24:41 +0100 (CET) Subject: [Python-checkins] r78927 - python/branches/py3k Message-ID: <20100313142441.A125FF1CC@mail.python.org> Author: mark.dickinson Date: Sat Mar 13 15:24:41 2010 New Revision: 78927 Log: Blocked revisions 78926 via svnmerge ........ r78926 | mark.dickinson | 2010-03-13 14:18:34 +0000 (Sat, 13 Mar 2010) | 1 line Fix incorrect error checks in structmember.c (backport of r78920 from py3k). ........ Modified: python/branches/py3k/ (props changed) From python-checkins at python.org Sat Mar 13 15:39:14 2010 From: python-checkins at python.org (georg.brandl) Date: Sat, 13 Mar 2010 15:39:14 +0100 (CET) Subject: [Python-checkins] r78928 - peps/trunk/pep-0101.txt Message-ID: <20100313143914.BFDAFF670@mail.python.org> Author: georg.brandl Date: Sat Mar 13 15:39:14 2010 New Revision: 78928 Log: Update documentation-related steps. Modified: peps/trunk/pep-0101.txt Modified: peps/trunk/pep-0101.txt ============================================================================== --- peps/trunk/pep-0101.txt (original) +++ peps/trunk/pep-0101.txt Sat Mar 13 15:39:14 2010 @@ -295,7 +295,8 @@ .../sandbox/release/release.py --export X.YaZ - This will leave all the relevant files in a subdirectory called 'dist'. + This will leave all the relevant files in a subdirectory called 'dist', + and the built docs in 'dist/docs'. ___ scp the files to your home directory on dinsdale.python.org. @@ -377,15 +378,21 @@ ___ md5sum the files and make sure they got uploaded intact. - ___ If this is a final release: Move the built docs to + ___ If this is a final release: Move the doc zips and tarballs to /data/ftp.python.org/pub/python/doc/X.Y[.Z], and adapt the "current" symlink in that directory. ___ If this is a final release, also unpack the HTML docs to - /data/ftp.python.org/pub/www.python.org/doc/X.Y[.Z]. + /data/ftp.python.org/pub/docs.python.org/release/X.Y[.Z]. ___ Let the DE check if the docs are built and work all right. + ___ If this is a major release: Tell the DE to adapt redirects for + docs.python.org/X.Y in the Apache config for docs.python.org, update + the script Doc/tools/dailybuild.py to point to the right + stable/development branches, and to install it and make the initial + checkout. + Now it's time to twiddle the web site. To do these steps, you must have the permission to edit the website. If you @@ -452,6 +459,8 @@ ___ cd to download/releases/X.Y.Z ___ Edit the version numbers in content.ht + ___ Comment out the link to the documentation if this is not a final, + remove the comment if it is. ___ Copy the new .asc files into place ___ Update the md5 checksums From python-checkins at python.org Sat Mar 13 16:26:44 2010 From: python-checkins at python.org (florent.xicluna) Date: Sat, 13 Mar 2010 16:26:44 +0100 (CET) Subject: [Python-checkins] r78929 - in python/branches/py3k: Doc/library/test.rst Lib/_pyio.py Lib/test/support.py Lib/test/test_fileio.py Misc/NEWS Message-ID: <20100313152644.6D205E1F5@mail.python.org> Author: florent.xicluna Date: Sat Mar 13 16:26:44 2010 New Revision: 78929 Log: Only the parts which are relevant for 3.x branch. Merged revisions 78757-78758,78769,78815 via svnmerge from svn+ssh://pythondev at svn.python.org/python/trunk ........ r78757 | florent.xicluna | 2010-03-07 13:14:25 +0100 (dim, 07 mar 2010) | 2 lines Fix some py3k warnings in the standard library. ........ r78758 | florent.xicluna | 2010-03-07 13:18:33 +0100 (dim, 07 mar 2010) | 4 lines Issue #7849: Now the utility ``check_warnings`` verifies if the warnings are effectively raised. A new utility ``check_py3k_warnings`` deals with py3k warnings. ........ r78769 | florent.xicluna | 2010-03-07 20:14:12 +0100 (dim, 07 mar 2010) | 2 lines Refresh the documentation for the test.test_support module. ........ r78815 | florent.xicluna | 2010-03-09 20:57:01 +0100 (mar, 09 mar 2010) | 2 lines #7772: Fix test_py3kwarn. Now the test suite could pass with "-3" flag. ........ Modified: python/branches/py3k/ (props changed) python/branches/py3k/Doc/library/test.rst python/branches/py3k/Lib/_pyio.py python/branches/py3k/Lib/test/support.py python/branches/py3k/Lib/test/test_fileio.py python/branches/py3k/Misc/NEWS Modified: python/branches/py3k/Doc/library/test.rst ============================================================================== --- python/branches/py3k/Doc/library/test.rst (original) +++ python/branches/py3k/Doc/library/test.rst Sat Mar 13 16:26:44 2010 @@ -130,13 +130,13 @@ self.func(self.arg) class AcceptLists(TestFuncAcceptsSequences): - arg = [1,2,3] + arg = [1, 2, 3] class AcceptStrings(TestFuncAcceptsSequences): arg = 'abc' class AcceptTuples(TestFuncAcceptsSequences): - arg = (1,2,3) + arg = (1, 2, 3) .. seealso:: @@ -198,16 +198,9 @@ methods. -.. exception:: TestSkipped - - Subclass of :exc:`TestFailed`. Raised when a test is skipped. This occurs when a - needed resource (such as a network connection) is not available at the time of - testing. - - .. exception:: ResourceDenied - Subclass of :exc:`TestSkipped`. Raised when a resource (such as a network + Subclass of :exc:`unittest.SkipTest`. Raised when a resource (such as a network connection) is not available. Raised by the :func:`requires` function. The :mod:`test.support` module defines the following constants: @@ -227,7 +220,7 @@ .. data:: TESTFN - Set to the path that a temporary file may be created at. Any temporary that is + Set to the name that a temporary file could use. Any temporary file that is created should be closed and unlinked (removed). The :mod:`test.support` module defines the following functions: @@ -235,21 +228,21 @@ .. function:: forget(module_name) - Removes the module named *module_name* from ``sys.modules`` and deletes any + Remove the module named *module_name* from ``sys.modules`` and deletes any byte-compiled files of the module. .. function:: is_resource_enabled(resource) - Returns :const:`True` if *resource* is enabled and available. The list of + Return :const:`True` if *resource* is enabled and available. The list of available resources is only set when :mod:`test.regrtest` is executing the tests. .. function:: requires(resource, msg=None) - Raises :exc:`ResourceDenied` if *resource* is not available. *msg* is the - argument to :exc:`ResourceDenied` if it is raised. Always returns true if called + Raise :exc:`ResourceDenied` if *resource* is not available. *msg* is the + argument to :exc:`ResourceDenied` if it is raised. Always returns True if called by a function whose ``__name__`` is ``'__main__'``. Used when tests are executed by :mod:`test.regrtest`. @@ -277,14 +270,24 @@ This will run all tests defined in the named module. -.. function:: check_warnings() +.. function:: check_warnings(*filters, quiet=False) A convenience wrapper for ``warnings.catch_warnings()`` that makes it easier to test that a warning was correctly raised with a single assertion. It is approximately equivalent to calling ``warnings.catch_warnings(record=True)``. - The main difference is that on entry to the context manager, a + It accepts 2-tuples ``("message regexp", WarningCategory)`` as positional + arguments. When the optional keyword argument ``quiet`` is True, it does + not fail if a filter catches nothing. Without argument, it defaults to:: + + check_warnings(("", Warning), quiet=False) + + The main difference is that it verifies the warnings raised. If some filter + did not catch any warning, the test fails. If some warnings are not caught, + the test fails, too. To disable these checks, use argument ``quiet=True``. + + Another significant difference is that on entry to the context manager, a :class:`WarningRecorder` instance is returned instead of a simple list. The underlying warnings list is available via the recorder object's :attr:`warnings` attribute, while the attributes of the last raised @@ -294,19 +297,34 @@ A :meth:`reset` method is also provided on the recorder object. This method simply clears the warning list. - The context manager is used like this:: + The context manager may be used like this:: + + import warnings + + with check_warnings(): + exec('assert(False, "Hey!")') + warnings.warn(UserWarning("Hide me!")) - with check_warnings() as w: + with check_warnings(("assertion is always true", SyntaxWarning), + ("", UserWarning)): + exec('assert(False, "Hey!")') + warnings.warn(UserWarning("Hide me!")) + + with check_warnings(quiet=True) as w: warnings.simplefilter("always") warnings.warn("foo") - assert str(w.message) == "foo" + assert str(w.args[0]) == "foo" warnings.warn("bar") - assert str(w.message) == "bar" - assert str(w.warnings[0].message) == "foo" - assert str(w.warnings[1].message) == "bar" + assert str(w.args[0]) == "bar" + assert str(w.warnings[0].args[0]) == "foo" + assert str(w.warnings[1].args[0]) == "bar" w.reset() assert len(w.warnings) == 0 + .. versionchanged:: 2.7 + The test fails when the context manager do not catch any warning. + New optional attributes ``*filters`` and ``quiet``. + .. function:: captured_stdout() Modified: python/branches/py3k/Lib/_pyio.py ============================================================================== --- python/branches/py3k/Lib/_pyio.py (original) +++ python/branches/py3k/Lib/_pyio.py Sat Mar 13 16:26:44 2010 @@ -828,7 +828,7 @@ if self.closed: raise ValueError("seek on closed file") try: - pos = pos.__index__() + pos.__index__ except AttributeError as err: raise TypeError("an integer is required") from err if whence == 0: @@ -853,8 +853,13 @@ raise ValueError("truncate on closed file") if pos is None: pos = self._pos - elif pos < 0: - raise ValueError("negative truncate position %r" % (pos,)) + else: + try: + pos.__index__ + except AttributeError as err: + raise TypeError("an integer is required") from err + if pos < 0: + raise ValueError("negative truncate position %r" % (pos,)) del self._buffer[pos:] return pos @@ -1803,6 +1808,10 @@ if n is None: n = -1 decoder = self._decoder or self._get_decoder() + try: + n.__index__ + except AttributeError as err: + raise TypeError("an integer is required") from err if n < 0: # Read everything. result = (self._get_decoded_chars() + Modified: python/branches/py3k/Lib/test/support.py ============================================================================== --- python/branches/py3k/Lib/test/support.py (original) +++ python/branches/py3k/Lib/test/support.py Sat Mar 13 16:26:44 2010 @@ -16,6 +16,7 @@ import unittest import importlib import collections +import re __all__ = ["Error", "TestFailed", "ResourceDenied", "import_module", "verbose", "use_resources", "max_memuse", "record_original_stdout", @@ -464,22 +465,80 @@ entry to the warnings.catch_warnings() context manager. """ def __init__(self, warnings_list): - self.warnings = warnings_list + self._warnings = warnings_list + self._last = 0 def __getattr__(self, attr): - if self.warnings: - return getattr(self.warnings[-1], attr) + if len(self._warnings) > self._last: + return getattr(self._warnings[-1], attr) elif attr in warnings.WarningMessage._WARNING_DETAILS: return None raise AttributeError("%r has no attribute %r" % (self, attr)) + @property + def warnings(self): + return self._warnings[self._last:] + def reset(self): - del self.warnings[:] + self._last = len(self._warnings) - at contextlib.contextmanager -def check_warnings(): + +def _filterwarnings(filters, quiet=False): + """Catch the warnings, then check if all the expected + warnings have been raised and re-raise unexpected warnings. + If 'quiet' is True, only re-raise the unexpected warnings. + """ + # Clear the warning registry of the calling module + # in order to re-raise the warnings. + frame = sys._getframe(2) + registry = frame.f_globals.get('__warningregistry__') + if registry: + registry.clear() with warnings.catch_warnings(record=True) as w: + # Set filter "always" to record all warnings. Because + # test_warnings swap the module, we need to look up in + # the sys.modules dictionary. + sys.modules['warnings'].simplefilter("always") yield WarningsRecorder(w) + # Filter the recorded warnings + reraise = [warning.message for warning in w] + missing = [] + for msg, cat in filters: + seen = False + for exc in reraise[:]: + message = str(exc) + # Filter out the matching messages + if (re.match(msg, message, re.I) and + issubclass(exc.__class__, cat)): + seen = True + reraise.remove(exc) + if not seen and not quiet: + # This filter caught nothing + missing.append((msg, cat.__name__)) + if reraise: + raise AssertionError("unhandled warning %r" % reraise[0]) + if missing: + raise AssertionError("filter (%r, %s) did not catch any warning" % + missing[0]) + + + at contextlib.contextmanager +def check_warnings(*filters, **kwargs): + """Context manager to silence warnings. + + Accept 2-tuples as positional arguments: + ("message regexp", WarningCategory) + + Optional argument: + - if 'quiet' is True, it does not fail if a filter catches nothing + (default False) + + Without argument, it defaults to: + check_warnings(("", Warning), quiet=False) + """ + if not filters: + filters = (("", Warning),) + return _filterwarnings(filters, kwargs.get('quiet')) class CleanImport(object): @@ -714,7 +773,6 @@ MAX_Py_ssize_t = sys.maxsize def set_memlimit(limit): - import re global max_memuse global real_max_memuse sizes = { Modified: python/branches/py3k/Lib/test/test_fileio.py ============================================================================== --- python/branches/py3k/Lib/test/test_fileio.py (original) +++ python/branches/py3k/Lib/test/test_fileio.py Sat Mar 13 16:26:44 2010 @@ -390,7 +390,7 @@ self.assertRaises(TypeError, _FileIO, "1", 0, 0) def testWarnings(self): - with check_warnings() as w: + with check_warnings(quiet=True) as w: self.assertEqual(w.warnings, []) self.assertRaises(TypeError, _FileIO, []) self.assertEqual(w.warnings, []) Modified: python/branches/py3k/Misc/NEWS ============================================================================== --- python/branches/py3k/Misc/NEWS (original) +++ python/branches/py3k/Misc/NEWS Sat Mar 13 16:26:44 2010 @@ -869,6 +869,9 @@ Tests ----- +- Issue #7849: Now the utility ``check_warnings`` verifies if the warnings are + effectively raised. + - The four path modules (genericpath, macpath, ntpath, posixpath) share a common TestCase for some tests: test_genericpath.CommonTest. From python-checkins at python.org Sat Mar 13 16:35:12 2010 From: python-checkins at python.org (florent.xicluna) Date: Sat, 13 Mar 2010 16:35:12 +0100 (CET) Subject: [Python-checkins] r78930 - in python/branches/py3k: Lib/test/test_sysconfig.py Message-ID: <20100313153512.A6B88F8AD@mail.python.org> Author: florent.xicluna Date: Sat Mar 13 16:35:12 2010 New Revision: 78930 Log: Merged revisions 78832 via svnmerge from svn+ssh://pythondev at svn.python.org/python/trunk ........ r78832 | florent.xicluna | 2010-03-11 02:39:55 +0100 (jeu, 11 mar 2010) | 2 lines It is not optimal to test sys.stderr on a debug build. ........ Modified: python/branches/py3k/ (props changed) python/branches/py3k/Lib/test/test_sysconfig.py Modified: python/branches/py3k/Lib/test/test_sysconfig.py ============================================================================== --- python/branches/py3k/Lib/test/test_sysconfig.py (original) +++ python/branches/py3k/Lib/test/test_sysconfig.py Sat Mar 13 16:35:12 2010 @@ -243,9 +243,8 @@ symlink = get_attribute(os, "symlink") def get(python): cmd = [python, '-c', - 'import sysconfig; print sysconfig.get_platform()'] - p = subprocess.Popen(cmd, stdout=subprocess.PIPE, - stderr=subprocess.PIPE) + 'import sysconfig; print(sysconfig.get_platform())'] + p = subprocess.Popen(cmd, stdout=subprocess.PIPE) return p.communicate() real = os.path.realpath(sys.executable) link = os.path.abspath(TESTFN) From python-checkins at python.org Sat Mar 13 18:45:27 2010 From: python-checkins at python.org (martin.v.loewis) Date: Sat, 13 Mar 2010 18:45:27 +0100 (CET) Subject: [Python-checkins] r78931 - python/branches/release26-maint/Tools/msi/uuids.py Message-ID: <20100313174527.B2115F95E@mail.python.org> Author: martin.v.loewis Date: Sat Mar 13 18:45:27 2010 New Revision: 78931 Log: Add 2.6.5rc2. Modified: python/branches/release26-maint/Tools/msi/uuids.py Modified: python/branches/release26-maint/Tools/msi/uuids.py ============================================================================== --- python/branches/release26-maint/Tools/msi/uuids.py (original) +++ python/branches/release26-maint/Tools/msi/uuids.py Sat Mar 13 18:45:27 2010 @@ -56,5 +56,6 @@ '2.6.4122':'{4f7603c6-6352-4299-a398-150a31b19acc}', # 2.6.4c2 '2.6.4150':'{e7394a0f-3f80-45b1-87fc-abcd51893246}', # 2.6.4 '2.6.5121':'{e0e273d7-7598-4701-8325-c90c069fd5ff}', # 2.6.5c1 + '2.6.5122':'{fa227b76-0671-4dc6-b826-c2ff2a70dfd5}', # 2.6.5c2 '2.6.5150':'{4723f199-fa64-4233-8e6e-9fccc95a18ee}', # 2.6.5 } From python-checkins at python.org Sat Mar 13 18:53:02 2010 From: python-checkins at python.org (martin.v.loewis) Date: Sat, 13 Mar 2010 18:53:02 +0100 (CET) Subject: [Python-checkins] r78932 - python/trunk/Tools/msi/uuids.py Message-ID: <20100313175302.70AFFF74F@mail.python.org> Author: martin.v.loewis Date: Sat Mar 13 18:53:02 2010 New Revision: 78932 Log: Add 2.6 uuids. Modified: python/trunk/Tools/msi/uuids.py Modified: python/trunk/Tools/msi/uuids.py ============================================================================== --- python/trunk/Tools/msi/uuids.py (original) +++ python/trunk/Tools/msi/uuids.py Sat Mar 13 18:53:02 2010 @@ -33,6 +33,14 @@ '2.6.1150':'{9cc89170-000b-457d-91f1-53691f85b223}', # 2.6.1 '2.6.2121':'{adac412b-b209-4c15-b6ab-dca1b6e47144}', # 2.6.2c1 '2.6.2150':'{24aab420-4e30-4496-9739-3e216f3de6ae}', # 2.6.2 + '2.6.3121':'{a73e0254-dcda-4fe4-bf37-c7e1c4f4ebb6}', # 2.6.3c1 + '2.6.3150':'{3d9ac095-e115-4e94-bdef-7f7edf17697d}', # 2.6.3 + '2.6.4121':'{727de605-0359-4606-a94b-c2033652379b}', # 2.6.4c1 + '2.6.4122':'{4f7603c6-6352-4299-a398-150a31b19acc}', # 2.6.4c2 + '2.6.4150':'{e7394a0f-3f80-45b1-87fc-abcd51893246}', # 2.6.4 + '2.6.5121':'{e0e273d7-7598-4701-8325-c90c069fd5ff}', # 2.6.5c1 + '2.6.5122':'{fa227b76-0671-4dc6-b826-c2ff2a70dfd5}', # 2.6.5c2 + '2.6.5150':'{4723f199-fa64-4233-8e6e-9fccc95a18ee}', # 2.6.5 '2.7.101': '{eca1bbef-432c-49ae-a667-c213cc7bbf22}', # 2.7a1 '2.7.102': '{21ce16ed-73c4-460d-9b11-522f417b2090}', # 2.7a2 '2.7.103': '{6e7dbd55-ba4a-48ac-a688-6c75db4d7500}', # 2.7a3 From python-checkins at python.org Sat Mar 13 18:55:57 2010 From: python-checkins at python.org (martin.v.loewis) Date: Sat, 13 Mar 2010 18:55:57 +0100 (CET) Subject: [Python-checkins] r78933 - in python/branches/py3k: Tools/msi/uuids.py Message-ID: <20100313175557.D440BF4F6@mail.python.org> Author: martin.v.loewis Date: Sat Mar 13 18:55:57 2010 New Revision: 78933 Log: Merged revisions 78932 via svnmerge from svn+ssh://pythondev at svn.python.org/python/trunk ........ r78932 | martin.v.loewis | 2010-03-13 18:53:02 +0100 (Sa, 13 M?r 2010) | 2 lines Add 2.6 uuids. ........ Modified: python/branches/py3k/ (props changed) python/branches/py3k/Tools/msi/uuids.py Modified: python/branches/py3k/Tools/msi/uuids.py ============================================================================== --- python/branches/py3k/Tools/msi/uuids.py (original) +++ python/branches/py3k/Tools/msi/uuids.py Sat Mar 13 18:55:57 2010 @@ -33,6 +33,14 @@ '2.6.1150':'{9cc89170-000b-457d-91f1-53691f85b223}', # 2.6.1 '2.6.2121':'{adac412b-b209-4c15-b6ab-dca1b6e47144}', # 2.6.2c1 '2.6.2150':'{24aab420-4e30-4496-9739-3e216f3de6ae}', # 2.6.2 + '2.6.3121':'{a73e0254-dcda-4fe4-bf37-c7e1c4f4ebb6}', # 2.6.3c1 + '2.6.3150':'{3d9ac095-e115-4e94-bdef-7f7edf17697d}', # 2.6.3 + '2.6.4121':'{727de605-0359-4606-a94b-c2033652379b}', # 2.6.4c1 + '2.6.4122':'{4f7603c6-6352-4299-a398-150a31b19acc}', # 2.6.4c2 + '2.6.4150':'{e7394a0f-3f80-45b1-87fc-abcd51893246}', # 2.6.4 + '2.6.5121':'{e0e273d7-7598-4701-8325-c90c069fd5ff}', # 2.6.5c1 + '2.6.5122':'{fa227b76-0671-4dc6-b826-c2ff2a70dfd5}', # 2.6.5c2 + '2.6.5150':'{4723f199-fa64-4233-8e6e-9fccc95a18ee}', # 2.6.5 '2.7.101': '{eca1bbef-432c-49ae-a667-c213cc7bbf22}', # 2.7a1 '2.7.102': '{21ce16ed-73c4-460d-9b11-522f417b2090}', # 2.7a2 '2.7.103': '{6e7dbd55-ba4a-48ac-a688-6c75db4d7500}', # 2.7a3 From python-checkins at python.org Sat Mar 13 18:56:19 2010 From: python-checkins at python.org (florent.xicluna) Date: Sat, 13 Mar 2010 18:56:19 +0100 (CET) Subject: [Python-checkins] r78934 - in python/trunk/Doc/library: xml.etree.elementtree.rst xml.etree.rst Message-ID: <20100313175619.433D5D7C9@mail.python.org> Author: florent.xicluna Date: Sat Mar 13 18:56:19 2010 New Revision: 78934 Log: Update some parts of the xml.etree documentation. Removed: python/trunk/Doc/library/xml.etree.rst Modified: python/trunk/Doc/library/xml.etree.elementtree.rst Modified: python/trunk/Doc/library/xml.etree.elementtree.rst ============================================================================== --- python/trunk/Doc/library/xml.etree.elementtree.rst (original) +++ python/trunk/Doc/library/xml.etree.elementtree.rst Sat Mar 13 18:56:19 2010 @@ -9,9 +9,9 @@ .. versionadded:: 2.5 -The Element type is a flexible container object, designed to store hierarchical -data structures in memory. The type can be described as a cross between a list -and a dictionary. +The :class:`Element` type is a flexible container object, designed to store +hierarchical data structures in memory. The type can be described as a cross +between a list and a dictionary. Each element has a number of properties associated with it: @@ -35,8 +35,14 @@ A C implementation of this API is available as :mod:`xml.etree.cElementTree`. See http://effbot.org/zone/element-index.htm for tutorials and links to other -docs. Fredrik Lundh's page is also the location of the development version of the -xml.etree.ElementTree. +docs. Fredrik Lundh's page is also the location of the development version of +the xml.etree.ElementTree. + +.. versionchanged:: 2.7 + The ElementTree API is updated to 1.3. For more information, see + `Introducing ElementTree 1.3 + `_. + .. _elementtree-functions: @@ -46,17 +52,17 @@ .. function:: Comment([text]) - Comment element factory. This factory function creates a special element that - will be serialized as an XML comment by the standard serializer. The comment - string can be either an 8-bit ASCII string or a Unicode string. *text* is a - string containing the comment string. Returns an element instance representing - a comment. + Comment element factory. This factory function creates a special element + that will be serialized as an XML comment by the standard serializer. The + comment string can be either a bytestring or a Unicode string. *text* is a + string containing the comment string. Returns an element instance + representing a comment. .. function:: dump(elem) - Writes an element tree or element structure to sys.stdout. This function should - be used for debugging only. + Writes an element tree or element structure to sys.stdout. This function + should be used for debugging only. The exact output format is implementation dependent. In this version, it's written as an ordinary XML file. @@ -66,34 +72,34 @@ .. function:: fromstring(text) - Parses an XML section from a string constant. Same as XML. *text* is a string - containing XML data. Returns an Element instance. + Parses an XML section from a string constant. Same as XML. *text* is a + string containing XML data. Returns an :class:`Element` instance. .. function:: fromstringlist(sequence[, parser]) - Parses an XML document from a sequence of string fragments. *sequence* is a list - or other sequence containing XML data fragments. *parser* is an optional parser - instance. If not given, the standard :class:`XMLParser` parser is used. - Returns an Element instance. + Parses an XML document from a sequence of string fragments. *sequence* is a + list or other sequence containing XML data fragments. *parser* is an + optional parser instance. If not given, the standard :class:`XMLParser` + parser is used. Returns an :class:`Element` instance. .. versionadded:: 2.7 .. function:: iselement(element) - Checks if an object appears to be a valid element object. *element* is an - element instance. Returns a true value if this is an element object. + Checks if an object appears to be a valid element object. *element* is an + element instance. Returns a true value if this is an element object. .. function:: iterparse(source[, events[, parser]]) Parses an XML section into an element tree incrementally, and reports what's - going on to the user. *source* is a filename or file object containing XML data. - *events* is a list of events to report back. If omitted, only "end" events are - reported. *parser* is an optional parser instance. If not given, the standard - :class:`XMLParser` parser is used. Returns an :term:`iterator` - providing ``(event, elem)`` pairs. + going on to the user. *source* is a filename or file object containing XML + data. *events* is a list of events to report back. If omitted, only "end" + events are reported. *parser* is an optional parser instance. If not + given, the standard :class:`XMLParser` parser is used. Returns an + :term:`iterator` providing ``(event, elem)`` pairs. .. note:: @@ -108,54 +114,57 @@ .. function:: parse(source[, parser]) - Parses an XML section into an element tree. *source* is a filename or file - object containing XML data. *parser* is an optional parser instance. If not - given, the standard :class:`XMLParser` parser is used. Returns an + Parses an XML section into an element tree. *source* is a filename or file + object containing XML data. *parser* is an optional parser instance. If + not given, the standard :class:`XMLParser` parser is used. Returns an :class:`ElementTree` instance. .. function:: ProcessingInstruction(target[, text]) - PI element factory. This factory function creates a special element that will - be serialized as an XML processing instruction. *target* is a string containing - the PI target. *text* is a string containing the PI contents, if given. Returns - an element instance, representing a processing instruction. + PI element factory. This factory function creates a special element that + will be serialized as an XML processing instruction. *target* is a string + containing the PI target. *text* is a string containing the PI contents, if + given. Returns an element instance, representing a processing instruction. .. function:: register_namespace(prefix, uri) - Registers a namespace prefix. The registry is global, and any existing mapping - for either the given prefix or the namespace URI will be removed. *prefix* is a - namespace prefix. *uri* is a namespace uri. Tags and attributes in this namespace - will be serialized with the given prefix, if at all possible. + Registers a namespace prefix. The registry is global, and any existing + mapping for either the given prefix or the namespace URI will be removed. + *prefix* is a namespace prefix. *uri* is a namespace uri. Tags and + attributes in this namespace will be serialized with the given prefix, if at + all possible. .. versionadded:: 2.7 .. function:: SubElement(parent, tag[, attrib[, **extra]]) - Subelement factory. This function creates an element instance, and appends it - to an existing element. + Subelement factory. This function creates an element instance, and appends + it to an existing element. - The element name, attribute names, and attribute values can be either 8-bit - ASCII strings or Unicode strings. *parent* is the parent element. *tag* is the - subelement name. *attrib* is an optional dictionary, containing element - attributes. *extra* contains additional attributes, given as keyword arguments. - Returns an element instance. + The element name, attribute names, and attribute values can be either + bytestrings or Unicode strings. *parent* is the parent element. *tag* is + the subelement name. *attrib* is an optional dictionary, containing element + attributes. *extra* contains additional attributes, given as keyword + arguments. Returns an element instance. .. function:: tostring(element[, encoding]) - Generates a string representation of an XML element, including all subelements. - *element* is an Element instance. *encoding* is the output encoding (default is - US-ASCII). Returns an encoded string containing the XML data. + Generates a string representation of an XML element, including all + subelements. *element* is an :class:`Element` instance. *encoding* is the + output encoding (default is US-ASCII). Returns an encoded string containing + the XML data. .. function:: tostringlist(element[, encoding]) - Generates a string representation of an XML element, including all subelements. - *element* is an Element instance. *encoding* is the output encoding (default is - US-ASCII). Returns a sequence object containing the XML data. + Generates a string representation of an XML element, including all + subelements. *element* is an :class:`Element` instance. *encoding* is the + output encoding (default is US-ASCII). Returns a sequence object containing + the XML data. .. versionadded:: 2.7 @@ -163,18 +172,18 @@ .. function:: XML(text[, parser]) Parses an XML section from a string constant. This function can be used to - embed "XML literals" in Python code. *text* is a string containing XML data. - *parser* is an optional parser instance. If not given, the standard - :class:`XMLParser` parser is used. Returns an Element instance. + embed "XML literals" in Python code. *text* is a string containing XML + data. *parser* is an optional parser instance. If not given, the standard + :class:`XMLParser` parser is used. Returns an :class:`Element` instance. .. function:: XMLID(text[, parser]) Parses an XML section from a string constant, and also returns a dictionary - which maps from element id:s to elements. *text* is a string containing XML - data. *parser* is an optional parser instance. If not given, the standard - :class:`XMLParser` parser is used. Returns a tuple containing an Element - instance and a dictionary. + which maps from element id:s to elements. *text* is a string containing XML + data. *parser* is an optional parser instance. If not given, the standard + :class:`XMLParser` parser is used. Returns a tuple containing an + :class:`Element` instance and a dictionary. .. _elementtree-element-objects: @@ -185,45 +194,46 @@ .. class:: Element(tag[, attrib[, **extra]]) - Element class. This class defines the Element interface, and provides a + Element class. This class defines the Element interface, and provides a reference implementation of this interface. - The element name, attribute names, and attribute values can be either 8-bit - ASCII strings or Unicode strings. *tag* is the element name. *attrib* is an - optional dictionary, containing element attributes. *extra* contains additional - attributes, given as keyword arguments. + The element name, attribute names, and attribute values can be either + bytestrings or Unicode strings. *tag* is the element name. *attrib* is + an optional dictionary, containing element attributes. *extra* contains + additional attributes, given as keyword arguments. .. attribute:: tag - A string identifying what kind of data this element represents (the element - type, in other words). + A string identifying what kind of data this element represents (the + element type, in other words). .. attribute:: text - The *text* attribute can be used to hold additional data associated with the - element. As the name implies this attribute is usually a string but may be - any application-specific object. If the element is created from an XML file - the attribute will contain any text found between the element tags. + The *text* attribute can be used to hold additional data associated with + the element. As the name implies this attribute is usually a string but + may be any application-specific object. If the element is created from + an XML file the attribute will contain any text found between the element + tags. .. attribute:: tail - The *tail* attribute can be used to hold additional data associated with the - element. This attribute is usually a string but may be any - application-specific object. If the element is created from an XML file the - attribute will contain any text found after the element's end tag and before - the next tag. + The *tail* attribute can be used to hold additional data associated with + the element. This attribute is usually a string but may be any + application-specific object. If the element is created from an XML file + the attribute will contain any text found after the element's end tag and + before the next tag. .. attribute:: attrib - A dictionary containing the element's attributes. Note that while the + A dictionary containing the element's attributes. Note that while the *attrib* value is always a real mutable Python dictionary, an ElementTree - implementation may choose to use another internal representation, and create - the dictionary only if someone asks for it. To take advantage of such - implementations, use the dictionary methods below whenever possible. + implementation may choose to use another internal representation, and + create the dictionary only if someone asks for it. To take advantage of + such implementations, use the dictionary methods below whenever possible. The following dictionary-like methods work on the element attributes. @@ -243,14 +253,14 @@ .. method:: items() - Returns the element attributes as a sequence of (name, value) pairs. The + Returns the element attributes as a sequence of (name, value) pairs. The attributes are returned in an arbitrary order. .. method:: keys() - Returns the elements attribute names as a list. The names are returned in an - arbitrary order. + Returns the elements attribute names as a list. The names are returned + in an arbitrary order. .. method:: set(key, value) @@ -262,8 +272,8 @@ .. method:: append(subelement) - Adds the element *subelement* to the end of this elements internal list of - subelements. + Adds the element *subelement* to the end of this elements internal list + of subelements. .. method:: extend(subelements) @@ -276,22 +286,22 @@ .. method:: find(match) - Finds the first subelement matching *match*. *match* may be a tag name or path. - Returns an element instance or ``None``. + Finds the first subelement matching *match*. *match* may be a tag name + or path. Returns an element instance or ``None``. .. method:: findall(match) - Finds all subelements matching *match*. *match* may be a tag name or path. - Returns an iterable yielding all matching elements in document order. + Finds all matching subelements, by tag name or path. Returns a list + containing all matching elements in document order. - .. method:: findtext(condition[, default]) + .. method:: findtext(match[, default]) - Finds text for the first subelement matching *condition*. *condition* may be - a tag name or path. Returns the text content of the first matching element, - or *default* if no element was found. Note that if the matching element has - no text content an empty string is returned. + Finds text for the first subelement matching *match*. *match* may be + a tag name or path. Returns the text content of the first matching + element, or *default* if no element was found. Note that if the matching + element has no text content an empty string is returned. .. method:: getchildren() @@ -313,31 +323,48 @@ .. method:: iter([tag]) - Creates a tree iterator with the current element as the root. The iterator - iterates over this element and all elements below it, in document (depth - first) order. If *tag* is not ``None`` or ``'*'``, only elements whose tag - equals *tag* are returned from the iterator. If the tree structure is - modified during iteration, the result is undefined. + Creates a tree :term:`iterator` with the current element as the root. + The iterator iterates over this element and all elements below it, in + document (depth first) order. If *tag* is not ``None`` or ``'*'``, only + elements whose tag equals *tag* are returned from the iterator. If the + tree structure is modified during iteration, the result is undefined. + + + .. method:: iterfind(match) + + Finds all matching subelements, by tag name or path. Returns an iterable + yielding all matching elements in document order. + + .. versionadded:: 2.7 + + + .. method:: itertext() + + Creates a text iterator. The iterator loops over this element and all + subelements, in document order, and returns all inner text. + + .. versionadded:: 2.7 .. method:: makeelement(tag, attrib) - Creates a new element object of the same type as this element. Do not call - this method, use the SubElement factory function instead. + Creates a new element object of the same type as this element. Do not + call this method, use the :func:`SubElement` factory function instead. .. method:: remove(subelement) - Removes *subelement* from the element. Unlike the findXYZ methods this - method compares elements based on the instance identity, not on tag value + Removes *subelement* from the element. Unlike the find\* methods this + method compares elements based on the instance identity, not on tag value or contents. - Element objects also support the following sequence type methods for working - with subelements: :meth:`__delitem__`, :meth:`__getitem__`, :meth:`__setitem__`, - :meth:`__len__`. - - Caution: Because Element objects do not define a :meth:`__nonzero__` method, - elements with no subelements will test as ``False``. :: + :class:`Element` objects also support the following sequence type methods + for working with subelements: :meth:`__delitem__`, :meth:`__getitem__`, + :meth:`__setitem__`, :meth:`__len__`. + + Caution: Elements with no subelements will test as ``False``. This behavior + will change in future versions. Use specific ``len(elem)`` or ``elem is + None`` test instead. :: element = root.find('foo') @@ -356,43 +383,43 @@ .. class:: ElementTree([element,] [file]) - ElementTree wrapper class. This class represents an entire element hierarchy, - and adds some extra support for serialization to and from standard XML. + ElementTree wrapper class. This class represents an entire element + hierarchy, and adds some extra support for serialization to and from + standard XML. - *element* is the root element. The tree is initialized with the contents of the - XML *file* if given. + *element* is the root element. The tree is initialized with the contents + of the XML *file* if given. .. method:: _setroot(element) Replaces the root element for this tree. This discards the current contents of the tree, and replaces it with the given element. Use with - care. *element* is an element instance. + care. *element* is an element instance. - .. method:: find(path) + .. method:: find(match) - Finds the first toplevel element with given tag. Same as - getroot().find(path). *path* is the element to look for. Returns the - first matching element, or ``None`` if no element was found. + Finds the first toplevel element matching *match*. *match* may be a tag + name or path. Same as getroot().find(match). Returns the first matching + element, or ``None`` if no element was found. - .. method:: findall(path) + .. method:: findall(match) - Finds all toplevel elements with the given tag. Same as - getroot().findall(path). *path* is the element to look for. Returns a - list or :term:`iterator` containing all matching elements, in document - order. + Finds all matching subelements, by tag name or path. Same as + getroot().findall(match). *match* may be a tag name or path. Returns a + list containing all matching elements, in document order. - .. method:: findtext(path[, default]) + .. method:: findtext(match[, default]) Finds the element text for the first toplevel element with given tag. - Same as getroot().findtext(path). *path* is the toplevel element to look - for. *default* is the value to return if the element was not - found. Returns the text content of the first matching element, or the - default value no element was found. Note that if the element has is - found, but has no text content, this method returns an empty string. + Same as getroot().findtext(match). *match* may be a tag name or path. + *default* is the value to return if the element was not found. Returns + the text content of the first matching element, or the default value no + element was found. Note that if the element is found, but has no text + content, this method returns an empty string. .. method:: getiterator([tag]) @@ -409,23 +436,32 @@ .. method:: iter([tag]) Creates and returns a tree iterator for the root element. The iterator - loops over all elements in this tree, in section order. *tag* is the tag + loops over all elements in this tree, in section order. *tag* is the tag to look for (default is to return all elements) + .. method:: iterfind(match) + + Finds all matching subelements, by tag name or path. Same as + getroot().iterfind(match). Returns an iterable yielding all matching + elements in document order. + + .. versionadded:: 2.7 + + .. method:: parse(source[, parser]) - Loads an external XML section into this element tree. *source* is a file - name or file object. *parser* is an optional parser instance. If not - given, the standard XMLParser parser is used. Returns the section + Loads an external XML section into this element tree. *source* is a file + name or file object. *parser* is an optional parser instance. If not + given, the standard XMLParser parser is used. Returns the section root element. .. method:: write(file[, encoding[, xml_declaration]]) - Writes the element tree to a file, as XML. *file* is a file name, or a - file object opened for writing. *encoding* [1]_ is the output encoding - (default is US-ASCII). *xml_declaration* controls if an XML declaration + Writes the element tree to a file, as XML. *file* is a file name, or a + file object opened for writing. *encoding* [1]_ is the output encoding + (default is US-ASCII). *xml_declaration* controls if an XML declaration should be added to the file. Use False for never, True for always, None for only if not US-ASCII or UTF-8. None is default. @@ -446,13 +482,13 @@ >>> from xml.etree.ElementTree import ElementTree >>> tree = ElementTree() >>> tree.parse("index.xhtml") - + >>> p = tree.find("body/p") # Finds first occurrence of tag p in body >>> p - + >>> links = list(p.iter("a")) # Returns list of all links >>> links - [, ] + [, ] >>> for i in links: # Iterates through all found links ... i.attrib["target"] = "blank" >>> tree.write("output.xhtml") @@ -465,12 +501,12 @@ .. class:: QName(text_or_uri[, tag]) - QName wrapper. This can be used to wrap a QName attribute value, in order to - get proper namespace handling on output. *text_or_uri* is a string containing - the QName value, in the form {uri}local, or, if the tag argument is given, the - URI part of a QName. If *tag* is given, the first argument is interpreted as an - URI, and this argument is interpreted as a local name. :class:`QName` instances - are opaque. + QName wrapper. This can be used to wrap a QName attribute value, in order + to get proper namespace handling on output. *text_or_uri* is a string + containing the QName value, in the form {uri}local, or, if the tag argument + is given, the URI part of a QName. If *tag* is given, the first argument is + interpreted as an URI, and this argument is interpreted as a local name. + :class:`QName` instances are opaque. .. _elementtree-treebuilder-objects: @@ -481,35 +517,35 @@ .. class:: TreeBuilder([element_factory]) - Generic element structure builder. This builder converts a sequence of start, - data, and end method calls to a well-formed element structure. You can use this - class to build an element structure using a custom XML parser, or a parser for - some other XML-like format. The *element_factory* is called to create new - Element instances when given. + Generic element structure builder. This builder converts a sequence of + start, data, and end method calls to a well-formed element structure. You + can use this class to build an element structure using a custom XML parser, + or a parser for some other XML-like format. The *element_factory* is called + to create new :class:`Element` instances when given. .. method:: close() Flushes the builder buffers, and returns the toplevel document - element. Returns an Element instance. + element. Returns an :class:`Element` instance. .. method:: data(data) - Adds text to the current element. *data* is a string. This should be - either an 8-bit string containing ASCII text, or a Unicode string. + Adds text to the current element. *data* is a string. This should be + either a bytestring, or a Unicode string. .. method:: end(tag) - Closes the current element. *tag* is the element name. Returns the closed - element. + Closes the current element. *tag* is the element name. Returns the + closed element. .. method:: start(tag, attrs) - Opens a new element. *tag* is the element name. *attrs* is a dictionary - containing element attributes. Returns the opened element. + Opens a new element. *tag* is the element name. *attrs* is a dictionary + containing element attributes. Returns the opened element. In addition, a custom :class:`TreeBuilder` object can provide the @@ -517,9 +553,9 @@ .. method:: doctype(name, pubid, system) - Handles a doctype declaration. *name* is the doctype name. *pubid* is the - public identifier. *system* is the system identifier. This method does not - exist on the default :class:`TreeBuilder` class. + Handles a doctype declaration. *name* is the doctype name. *pubid* is + the public identifier. *system* is the system identifier. This method + does not exist on the default :class:`TreeBuilder` class. .. versionadded:: 2.7 @@ -532,16 +568,17 @@ .. class:: XMLParser([html [, target[, encoding]]]) - Element structure builder for XML source data, based on the expat parser. *html* - are predefined HTML entities. This flag is not supported by the current - implementation. *target* is the target object. If omitted, the builder uses an - instance of the standard TreeBuilder class. *encoding* [1]_ is optional. - If given, the value overrides the encoding specified in the XML file. + :class:`Element` structure builder for XML source data, based on the expat + parser. *html* are predefined HTML entities. This flag is not supported by + the current implementation. *target* is the target object. If omitted, the + builder uses an instance of the standard TreeBuilder class. *encoding* [1]_ + is optional. If given, the value overrides the encoding specified in the + XML file. .. method:: close() - Finishes feeding data to the parser. Returns an element structure. + Finishes feeding data to the parser. Returns an element structure. .. method:: doctype(name, pubid, system) @@ -553,11 +590,11 @@ .. method:: feed(data) - Feeds data to the parser. *data* is encoded data. + Feeds data to the parser. *data* is encoded data. :meth:`XMLParser.feed` calls *target*\'s :meth:`start` method for each opening tag, its :meth:`end` method for each closing tag, -and data is processed by method :meth:`data`. :meth:`XMLParser.close` +and data is processed by method :meth:`data`. :meth:`XMLParser.close` calls *target*\'s method :meth:`close`. :class:`XMLParser` can be used not only for building a tree structure. This is an example of counting the maximum depth of an XML file:: @@ -598,6 +635,6 @@ .. rubric:: Footnotes .. [#] The encoding string included in XML output should conform to the - appropriate standards. For example, "UTF-8" is valid, but "UTF8" is - not. See http://www.w3.org/TR/2006/REC-xml11-20060816/#NT-EncodingDecl + appropriate standards. For example, "UTF-8" is valid, but "UTF8" is + not. See http://www.w3.org/TR/2006/REC-xml11-20060816/#NT-EncodingDecl and http://www.iana.org/assignments/character-sets. Deleted: python/trunk/Doc/library/xml.etree.rst ============================================================================== --- python/trunk/Doc/library/xml.etree.rst Sat Mar 13 18:56:19 2010 +++ (empty file) @@ -1,24 +0,0 @@ -:mod:`xml.etree` --- The ElementTree API for XML -================================================ - -.. module:: xml.etree - :synopsis: Package containing common ElementTree modules. -.. moduleauthor:: Fredrik Lundh - - -.. versionadded:: 2.5 - -The ElementTree package is a simple, efficient, and quite popular library for -XML manipulation in Python. The :mod:`xml.etree` package contains the most -common components from the ElementTree API library. In the current release, -this package contains the :mod:`ElementTree`, :mod:`ElementPath`, and -:mod:`ElementInclude` modules from the full ElementTree distribution. - -.. XXX To be continued! - - -.. seealso:: - - `ElementTree Overview `_ - The home page for :mod:`ElementTree`. This includes links to additional - documentation, alternative implementations, and other add-ons. From python-checkins at python.org Sat Mar 13 19:37:31 2010 From: python-checkins at python.org (tarek.ziade) Date: Sat, 13 Mar 2010 19:37:31 +0100 (CET) Subject: [Python-checkins] r78935 - in python/branches/release26-maint/Lib/distutils/tests: test_build_ext.py xxmodule.c Message-ID: <20100313183731.0FB62DEA5@mail.python.org> Author: tarek.ziade Date: Sat Mar 13 19:37:30 2010 New Revision: 78935 Log: following Barry suggestion for test_build_ext (see #8107) Removed: python/branches/release26-maint/Lib/distutils/tests/xxmodule.c Modified: python/branches/release26-maint/Lib/distutils/tests/test_build_ext.py Modified: python/branches/release26-maint/Lib/distutils/tests/test_build_ext.py ============================================================================== --- python/branches/release26-maint/Lib/distutils/tests/test_build_ext.py (original) +++ python/branches/release26-maint/Lib/distutils/tests/test_build_ext.py Sat Mar 13 19:37:30 2010 @@ -18,7 +18,10 @@ ALREADY_TESTED = False def _get_source_filename(): - return os.path.join(os.path.dirname(__file__), 'xxmodule.c') + srcdir = sysconfig.get_config_var('srcdir') + if srcdir is None: + return os.path.join(sysconfig.project_base, 'Modules', 'xxmodule.c') + return os.path.join(srcdir, 'Modules', 'xxmodule.c') class BuildExtTestCase(support.TempdirManager, support.LoggingSilencer, Deleted: python/branches/release26-maint/Lib/distutils/tests/xxmodule.c ============================================================================== --- python/branches/release26-maint/Lib/distutils/tests/xxmodule.c Sat Mar 13 19:37:30 2010 +++ (empty file) @@ -1,379 +0,0 @@ - -/* Use this file as a template to start implementing a module that - also declares object types. All occurrences of 'Xxo' should be changed - to something reasonable for your objects. After that, all other - occurrences of 'xx' should be changed to something reasonable for your - module. If your module is named foo your sourcefile should be named - foomodule.c. - - You will probably want to delete all references to 'x_attr' and add - your own types of attributes instead. Maybe you want to name your - local variables other than 'self'. If your object type is needed in - other files, you'll have to create a file "foobarobject.h"; see - intobject.h for an example. */ - -/* Xxo objects */ - -#include "Python.h" - -static PyObject *ErrorObject; - -typedef struct { - PyObject_HEAD - PyObject *x_attr; /* Attributes dictionary */ -} XxoObject; - -static PyTypeObject Xxo_Type; - -#define XxoObject_Check(v) (Py_TYPE(v) == &Xxo_Type) - -static XxoObject * -newXxoObject(PyObject *arg) -{ - XxoObject *self; - self = PyObject_New(XxoObject, &Xxo_Type); - if (self == NULL) - return NULL; - self->x_attr = NULL; - return self; -} - -/* Xxo methods */ - -static void -Xxo_dealloc(XxoObject *self) -{ - Py_XDECREF(self->x_attr); - PyObject_Del(self); -} - -static PyObject * -Xxo_demo(XxoObject *self, PyObject *args) -{ - if (!PyArg_ParseTuple(args, ":demo")) - return NULL; - Py_INCREF(Py_None); - return Py_None; -} - -static PyMethodDef Xxo_methods[] = { - {"demo", (PyCFunction)Xxo_demo, METH_VARARGS, - PyDoc_STR("demo() -> None")}, - {NULL, NULL} /* sentinel */ -}; - -static PyObject * -Xxo_getattr(XxoObject *self, char *name) -{ - if (self->x_attr != NULL) { - PyObject *v = PyDict_GetItemString(self->x_attr, name); - if (v != NULL) { - Py_INCREF(v); - return v; - } - } - return Py_FindMethod(Xxo_methods, (PyObject *)self, name); -} - -static int -Xxo_setattr(XxoObject *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 Xxo attribute"); - return rv; - } - else - return PyDict_SetItemString(self->x_attr, name, v); -} - -static PyTypeObject Xxo_Type = { - /* The ob_type field must be initialized in the module init function - * to be portable to Windows without using C++. */ - PyVarObject_HEAD_INIT(NULL, 0) - "xxmodule.Xxo", /*tp_name*/ - sizeof(XxoObject), /*tp_basicsize*/ - 0, /*tp_itemsize*/ - /* methods */ - (destructor)Xxo_dealloc, /*tp_dealloc*/ - 0, /*tp_print*/ - (getattrfunc)Xxo_getattr, /*tp_getattr*/ - (setattrfunc)Xxo_setattr, /*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*/ - 0, /*tp_iter*/ - 0, /*tp_iternext*/ - 0, /*tp_methods*/ - 0, /*tp_members*/ - 0, /*tp_getset*/ - 0, /*tp_base*/ - 0, /*tp_dict*/ - 0, /*tp_descr_get*/ - 0, /*tp_descr_set*/ - 0, /*tp_dictoffset*/ - 0, /*tp_init*/ - 0, /*tp_alloc*/ - 0, /*tp_new*/ - 0, /*tp_free*/ - 0, /*tp_is_gc*/ -}; -/* --------------------------------------------------------------------- */ - -/* Function of two integers returning integer */ - -PyDoc_STRVAR(xx_foo_doc, -"foo(i,j)\n\ -\n\ -Return the sum of i and j."); - -static PyObject * -xx_foo(PyObject *self, PyObject *args) -{ - long i, j; - long res; - if (!PyArg_ParseTuple(args, "ll:foo", &i, &j)) - return NULL; - res = i+j; /* XXX Do something here */ - return PyInt_FromLong(res); -} - - -/* Function of no arguments returning new Xxo object */ - -static PyObject * -xx_new(PyObject *self, PyObject *args) -{ - XxoObject *rv; - - if (!PyArg_ParseTuple(args, ":new")) - return NULL; - rv = newXxoObject(args); - if (rv == NULL) - return NULL; - return (PyObject *)rv; -} - -/* Example with subtle bug from extensions manual ("Thin Ice"). */ - -static PyObject * -xx_bug(PyObject *self, PyObject *args) -{ - PyObject *list, *item; - - if (!PyArg_ParseTuple(args, "O:bug", &list)) - return NULL; - - item = PyList_GetItem(list, 0); - /* Py_INCREF(item); */ - PyList_SetItem(list, 1, PyInt_FromLong(0L)); - PyObject_Print(item, stdout, 0); - printf("\n"); - /* Py_DECREF(item); */ - - Py_INCREF(Py_None); - return Py_None; -} - -/* Test bad format character */ - -static PyObject * -xx_roj(PyObject *self, PyObject *args) -{ - PyObject *a; - long b; - if (!PyArg_ParseTuple(args, "O#:roj", &a, &b)) - return NULL; - Py_INCREF(Py_None); - return Py_None; -} - - -/* ---------- */ - -static PyTypeObject Str_Type = { - /* The ob_type field must be initialized in the module init function - * to be portable to Windows without using C++. */ - PyVarObject_HEAD_INIT(NULL, 0) - "xxmodule.Str", /*tp_name*/ - 0, /*tp_basicsize*/ - 0, /*tp_itemsize*/ - /* methods */ - 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, /*tp_flags*/ - 0, /*tp_doc*/ - 0, /*tp_traverse*/ - 0, /*tp_clear*/ - 0, /*tp_richcompare*/ - 0, /*tp_weaklistoffset*/ - 0, /*tp_iter*/ - 0, /*tp_iternext*/ - 0, /*tp_methods*/ - 0, /*tp_members*/ - 0, /*tp_getset*/ - 0, /* see initxx */ /*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*/ -}; - -/* ---------- */ - -static PyObject * -null_richcompare(PyObject *self, PyObject *other, int op) -{ - Py_INCREF(Py_NotImplemented); - return Py_NotImplemented; -} - -static PyTypeObject Null_Type = { - /* The ob_type field must be initialized in the module init function - * to be portable to Windows without using C++. */ - PyVarObject_HEAD_INIT(NULL, 0) - "xxmodule.Null", /*tp_name*/ - 0, /*tp_basicsize*/ - 0, /*tp_itemsize*/ - /* methods */ - 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, /*tp_flags*/ - 0, /*tp_doc*/ - 0, /*tp_traverse*/ - 0, /*tp_clear*/ - null_richcompare, /*tp_richcompare*/ - 0, /*tp_weaklistoffset*/ - 0, /*tp_iter*/ - 0, /*tp_iternext*/ - 0, /*tp_methods*/ - 0, /*tp_members*/ - 0, /*tp_getset*/ - 0, /* see initxx */ /*tp_base*/ - 0, /*tp_dict*/ - 0, /*tp_descr_get*/ - 0, /*tp_descr_set*/ - 0, /*tp_dictoffset*/ - 0, /*tp_init*/ - 0, /*tp_alloc*/ - 0, /* see initxx */ /*tp_new*/ - 0, /*tp_free*/ - 0, /*tp_is_gc*/ -}; - - -/* ---------- */ - - -/* List of functions defined in the module */ - -static PyMethodDef xx_methods[] = { - {"roj", xx_roj, METH_VARARGS, - PyDoc_STR("roj(a,b) -> None")}, - {"foo", xx_foo, METH_VARARGS, - xx_foo_doc}, - {"new", xx_new, METH_VARARGS, - PyDoc_STR("new() -> new Xx object")}, - {"bug", xx_bug, METH_VARARGS, - PyDoc_STR("bug(o) -> None")}, - {NULL, NULL} /* sentinel */ -}; - -PyDoc_STRVAR(module_doc, -"This is a template module just for instruction."); - -/* Initialization function for the module (*must* be called initxx) */ - -PyMODINIT_FUNC -initxx(void) -{ - PyObject *m; - - /* Due to cross platform compiler issues the slots must be filled - * here. It's required for portability to Windows without requiring - * C++. */ - Null_Type.tp_base = &PyBaseObject_Type; - Null_Type.tp_new = PyType_GenericNew; - Str_Type.tp_base = &PyUnicode_Type; - - /* Finalize the type object including setting type of the new type - * object; doing it here is required for portability, too. */ - if (PyType_Ready(&Xxo_Type) < 0) - return; - - /* Create the module and add the functions */ - m = Py_InitModule3("xx", xx_methods, module_doc); - if (m == NULL) - return; - - /* Add some symbolic constants to the module */ - if (ErrorObject == NULL) { - ErrorObject = PyErr_NewException("xx.error", NULL, NULL); - if (ErrorObject == NULL) - return; - } - Py_INCREF(ErrorObject); - PyModule_AddObject(m, "error", ErrorObject); - - /* Add Str */ - if (PyType_Ready(&Str_Type) < 0) - return; - PyModule_AddObject(m, "Str", (PyObject *)&Str_Type); - - /* Add Null */ - if (PyType_Ready(&Null_Type) < 0) - return; - PyModule_AddObject(m, "Null", (PyObject *)&Null_Type); -} From python-checkins at python.org Sat Mar 13 19:38:59 2010 From: python-checkins at python.org (tarek.ziade) Date: Sat, 13 Mar 2010 19:38:59 +0100 (CET) Subject: [Python-checkins] r78936 - python/branches/release26-maint/Misc/NEWS Message-ID: <20100313183859.C932FF9C5@mail.python.org> Author: tarek.ziade Date: Sat Mar 13 19:38:59 2010 New Revision: 78936 Log: fixed #8107 description in Misc/NEWS Modified: python/branches/release26-maint/Misc/NEWS Modified: python/branches/release26-maint/Misc/NEWS ============================================================================== --- python/branches/release26-maint/Misc/NEWS (original) +++ python/branches/release26-maint/Misc/NEWS Sat Mar 13 19:38:59 2010 @@ -21,7 +21,9 @@ ------- - Reverting the changes made in r78432. Discussed in the tracker issue #7540. -- Issue #8107: Fixed test_distutils so it uses a local xxmodule.c file. + +- Issue #8107: Fixed test_distutils so it doesn't crash when the source + directory cannot be found. Extension Modules ----------------- From python-checkins at python.org Sat Mar 13 21:30:15 2010 From: python-checkins at python.org (florent.xicluna) Date: Sat, 13 Mar 2010 21:30:15 +0100 (CET) Subject: [Python-checkins] r78937 - python/trunk/Doc/library/xml.etree.elementtree.rst Message-ID: <20100313203015.4188CDEA5@mail.python.org> Author: florent.xicluna Date: Sat Mar 13 21:30:15 2010 New Revision: 78937 Log: Add the keyword argument "method=None" to the .write() method and the tostring/tostringlist functions. Update the function, class and method signatures, according to the new convention. Modified: python/trunk/Doc/library/xml.etree.elementtree.rst Modified: python/trunk/Doc/library/xml.etree.elementtree.rst ============================================================================== --- python/trunk/Doc/library/xml.etree.elementtree.rst (original) +++ python/trunk/Doc/library/xml.etree.elementtree.rst Sat Mar 13 21:30:15 2010 @@ -50,7 +50,7 @@ --------- -.. function:: Comment([text]) +.. function:: Comment(text=None) Comment element factory. This factory function creates a special element that will be serialized as an XML comment by the standard serializer. The @@ -76,7 +76,7 @@ string containing XML data. Returns an :class:`Element` instance. -.. function:: fromstringlist(sequence[, parser]) +.. function:: fromstringlist(sequence, parser=None) Parses an XML document from a sequence of string fragments. *sequence* is a list or other sequence containing XML data fragments. *parser* is an @@ -92,7 +92,7 @@ element instance. Returns a true value if this is an element object. -.. function:: iterparse(source[, events[, parser]]) +.. function:: iterparse(source, events=None, parser=None) Parses an XML section into an element tree incrementally, and reports what's going on to the user. *source* is a filename or file object containing XML @@ -112,7 +112,7 @@ If you need a fully populated element, look for "end" events instead. -.. function:: parse(source[, parser]) +.. function:: parse(source, parser=None) Parses an XML section into an element tree. *source* is a filename or file object containing XML data. *parser* is an optional parser instance. If @@ -120,7 +120,7 @@ :class:`ElementTree` instance. -.. function:: ProcessingInstruction(target[, text]) +.. function:: ProcessingInstruction(target, text=None) PI element factory. This factory function creates a special element that will be serialized as an XML processing instruction. *target* is a string @@ -139,7 +139,7 @@ .. versionadded:: 2.7 -.. function:: SubElement(parent, tag[, attrib[, **extra]]) +.. function:: SubElement(parent, tag, attrib={}, **extra) Subelement factory. This function creates an element instance, and appends it to an existing element. @@ -151,25 +151,27 @@ arguments. Returns an element instance. -.. function:: tostring(element[, encoding]) +.. function:: tostring(element, encoding=None, method=None) Generates a string representation of an XML element, including all subelements. *element* is an :class:`Element` instance. *encoding* is the - output encoding (default is US-ASCII). Returns an encoded string containing - the XML data. + output encoding (default is US-ASCII). *method* is either ``"xml"``, + ``"html"`` or ``"text"`` (default is ``"xml"``). Returns an encoded string + containing the XML data. -.. function:: tostringlist(element[, encoding]) +.. function:: tostringlist(element, encoding=None, method=None) Generates a string representation of an XML element, including all subelements. *element* is an :class:`Element` instance. *encoding* is the - output encoding (default is US-ASCII). Returns a sequence object containing - the XML data. + output encoding (default is US-ASCII). *method* is either ``"xml"``, + ``"html"`` or ``"text"`` (default is ``"xml"``). Returns a sequence object + containing the XML data. .. versionadded:: 2.7 -.. function:: XML(text[, parser]) +.. function:: XML(text, parser=None) Parses an XML section from a string constant. This function can be used to embed "XML literals" in Python code. *text* is a string containing XML @@ -177,7 +179,7 @@ :class:`XMLParser` parser is used. Returns an :class:`Element` instance. -.. function:: XMLID(text[, parser]) +.. function:: XMLID(text, parser=None) Parses an XML section from a string constant, and also returns a dictionary which maps from element id:s to elements. *text* is a string containing XML @@ -192,7 +194,7 @@ --------------- -.. class:: Element(tag[, attrib[, **extra]]) +.. class:: Element(tag, attrib={}, **extra) Element class. This class defines the Element interface, and provides a reference implementation of this interface. @@ -244,7 +246,7 @@ attributes, and sets the text and tail attributes to None. - .. method:: get(key[, default]) + .. method:: get(key, default=None) Gets the element attribute named *key*. @@ -296,7 +298,7 @@ containing all matching elements in document order. - .. method:: findtext(match[, default]) + .. method:: findtext(match, default=None) Finds text for the first subelement matching *match*. *match* may be a tag name or path. Returns the text content of the first matching @@ -310,7 +312,7 @@ Use ``list(elem)`` or iteration. - .. method:: getiterator([tag]) + .. method:: getiterator(tag=None) .. deprecated:: 2.7 Use method :meth:`Element.iter` instead. @@ -321,7 +323,7 @@ Inserts a subelement at the given position in this element. - .. method:: iter([tag]) + .. method:: iter(tag=None) Creates a tree :term:`iterator` with the current element as the root. The iterator iterates over this element and all elements below it, in @@ -381,7 +383,7 @@ ------------------- -.. class:: ElementTree([element,] [file]) +.. class:: ElementTree(element=None, file=None) ElementTree wrapper class. This class represents an entire element hierarchy, and adds some extra support for serialization to and from @@ -412,7 +414,7 @@ list containing all matching elements, in document order. - .. method:: findtext(match[, default]) + .. method:: findtext(match, default=None) Finds the element text for the first toplevel element with given tag. Same as getroot().findtext(match). *match* may be a tag name or path. @@ -422,7 +424,7 @@ content, this method returns an empty string. - .. method:: getiterator([tag]) + .. method:: getiterator(tag=None) .. deprecated:: 2.7 Use method :meth:`ElementTree.iter` instead. @@ -433,7 +435,7 @@ Returns the root element for this tree. - .. method:: iter([tag]) + .. method:: iter(tag=None) Creates and returns a tree iterator for the root element. The iterator loops over all elements in this tree, in section order. *tag* is the tag @@ -449,7 +451,7 @@ .. versionadded:: 2.7 - .. method:: parse(source[, parser]) + .. method:: parse(source, parser=None) Loads an external XML section into this element tree. *source* is a file name or file object. *parser* is an optional parser instance. If not @@ -457,13 +459,15 @@ root element. - .. method:: write(file[, encoding[, xml_declaration]]) + .. method:: write(file, encoding=None, xml_declaration=None, method=None) Writes the element tree to a file, as XML. *file* is a file name, or a file object opened for writing. *encoding* [1]_ is the output encoding (default is US-ASCII). *xml_declaration* controls if an XML declaration should be added to the file. Use False for never, True for always, None - for only if not US-ASCII or UTF-8. None is default. + for only if not US-ASCII or UTF-8 (default is None). *method* is either + ``"xml"``, ``"html"`` or ``"text"`` (default is ``"xml"``). Returns an + encoded string. This is the XML file that is going to be manipulated:: @@ -499,7 +503,7 @@ ------------- -.. class:: QName(text_or_uri[, tag]) +.. class:: QName(text_or_uri, tag=None) QName wrapper. This can be used to wrap a QName attribute value, in order to get proper namespace handling on output. *text_or_uri* is a string @@ -515,7 +519,7 @@ ------------------- -.. class:: TreeBuilder([element_factory]) +.. class:: TreeBuilder(element_factory=None) Generic element structure builder. This builder converts a sequence of start, data, and end method calls to a well-formed element structure. You @@ -566,7 +570,7 @@ ----------------- -.. class:: XMLParser([html [, target[, encoding]]]) +.. class:: XMLParser(html=0, target=None, encoding=None) :class:`Element` structure builder for XML source data, based on the expat parser. *html* are predefined HTML entities. This flag is not supported by From python-checkins at python.org Sat Mar 13 22:20:06 2010 From: python-checkins at python.org (benjamin.peterson) Date: Sat, 13 Mar 2010 22:20:06 +0100 (CET) Subject: [Python-checkins] r78938 - python/branches/py3k Message-ID: <20100313212006.CE456F8AA@mail.python.org> Author: benjamin.peterson Date: Sat Mar 13 22:20:06 2010 New Revision: 78938 Log: Blocked revisions 77942,78053,78061,78113-78114,78150,78215,78247,78385,78467,78563,78652,78726,78751,78812,78814 via svnmerge ........ r77942 | ezio.melotti | 2010-02-02 23:37:26 -0600 (Tue, 02 Feb 2010) | 1 line #7092: Silence more py3k warnings. Patch by Florent Xicluna. ........ r78053 | georg.brandl | 2010-02-06 17:54:43 -0600 (Sat, 06 Feb 2010) | 1 line Fix some name errors in Mac modules. ........ r78061 | ronald.oussoren | 2010-02-07 05:38:28 -0600 (Sun, 07 Feb 2010) | 10 lines A number of APIs in macostools cannot work in 64-bit mode because they use Carbon APIs that aren't available there. This patch disables tests for the affected entrypoints in macostools and mentions this in the documentation. In theory it is possible to replace the implementation by code that does work in 64-bit mode, but that would require further updates to the Carbon wrappers because the modern APIs aren't wrapped properly. ........ r78113 | georg.brandl | 2010-02-08 16:37:20 -0600 (Mon, 08 Feb 2010) | 1 line Fix missing string formatting argument. ........ r78114 | georg.brandl | 2010-02-08 16:37:52 -0600 (Mon, 08 Feb 2010) | 1 line Fix undefined local. ........ r78150 | ronald.oussoren | 2010-02-11 07:19:34 -0600 (Thu, 11 Feb 2010) | 3 lines Fix copy&paste error in the definition of ARCH_RUN_32BIT for a 3-way universal build (all other definition where correct). ........ r78215 | martin.v.loewis | 2010-02-18 06:45:45 -0600 (Thu, 18 Feb 2010) | 1 line Move bsddb47 macros before their use, to make VS 2010 happy. ........ r78247 | ezio.melotti | 2010-02-20 02:09:39 -0600 (Sat, 20 Feb 2010) | 1 line #3426: os.path.abspath now returns unicode when its arg is unicode. ........ r78385 | georg.brandl | 2010-02-23 15:33:17 -0600 (Tue, 23 Feb 2010) | 1 line #8000: fix deprecated directive. What a shame to lose that glorious issue number to such a minor bug :) ........ r78467 | ezio.melotti | 2010-02-26 18:05:42 -0600 (Fri, 26 Feb 2010) | 1 line Show an error when the value passed to --enable-unicode is not ucs2 or ucs4 (lowercase). ........ r78563 | florent.xicluna | 2010-03-01 14:45:01 -0600 (Mon, 01 Mar 2010) | 2 lines #7808: Fix reference leaks in _bsddb and related tests. ........ r78652 | florent.xicluna | 2010-03-04 09:57:20 -0600 (Thu, 04 Mar 2010) | 2 lines Fix transient refleak in test_popen2. ........ r78726 | florent.xicluna | 2010-03-06 08:38:09 -0600 (Sat, 06 Mar 2010) | 2 lines Backport "test.regrtest -R 2:3" syntax from py3k branch, and other minor adjustments. ........ r78751 | senthil.kumaran | 2010-03-06 22:09:30 -0600 (Sat, 06 Mar 2010) | 3 lines Reverting the change made in r78431. ........ r78812 | raymond.hettinger | 2010-03-09 03:58:53 -0600 (Tue, 09 Mar 2010) | 6 lines Have links in OrderedDicts be native Python lists instead of a custom class with __slots__. This simplifies the code a bit, reduces memory consumption, improves speed, and eliminates the need for weak reference proxies. ........ r78814 | raymond.hettinger | 2010-03-09 05:29:10 -0600 (Tue, 09 Mar 2010) | 1 line Improve code clarity a bit. ........ Modified: python/branches/py3k/ (props changed) From python-checkins at python.org Sat Mar 13 22:21:30 2010 From: python-checkins at python.org (antoine.pitrou) Date: Sat, 13 Mar 2010 22:21:30 +0100 (CET) Subject: [Python-checkins] r78939 - in python/trunk: Misc/NEWS Tools/ccbench/ccbench.py Message-ID: <20100313212130.88C40F9F6@mail.python.org> Author: antoine.pitrou Date: Sat Mar 13 22:21:30 2010 New Revision: 78939 Log: Issue #7993: Add a test of IO packet processing bandwidth to ccbench. It measures the number of UDP packets processed per second depending on the number of background CPU-bound Python threads. Modified: python/trunk/Misc/NEWS python/trunk/Tools/ccbench/ccbench.py Modified: python/trunk/Misc/NEWS ============================================================================== --- python/trunk/Misc/NEWS (original) +++ python/trunk/Misc/NEWS Sat Mar 13 22:21:30 2010 @@ -54,6 +54,12 @@ integer codes for which it was used differed between native packing and standard packing.) +Tools/Demos +----------- + +- Issue #7993: Add a test of IO packet processing bandwidth to ccbench. + It measures the number of UDP packets processed per second depending on + the number of background CPU-bound Python threads. What's New in Python 2.7 alpha 4? Modified: python/trunk/Tools/ccbench/ccbench.py ============================================================================== --- python/trunk/Tools/ccbench/ccbench.py (original) +++ python/trunk/Tools/ccbench/ccbench.py Sat Mar 13 22:21:30 2010 @@ -36,6 +36,9 @@ LATENCY_PING_INTERVAL = 0.1 LATENCY_DURATION = 2.0 +BANDWIDTH_PACKET_SIZE = 1024 +BANDWIDTH_DURATION = 2.0 + def task_pidigits(): """Pi calculation (Python)""" @@ -149,6 +152,7 @@ throughput_tasks.append(task_compress_zlib) latency_tasks = throughput_tasks +bandwidth_tasks = [task_pidigits] class TimedLoop: @@ -394,6 +398,133 @@ print() +BW_END = "END" + +def bandwidth_client(addr, packet_size, duration): + sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) + sock.bind(("127.0.0.1", 0)) + local_addr = sock.getsockname() + _time = time.time + _sleep = time.sleep + def _send_chunk(msg): + _sendto(sock, ("%r#%s\n" % (local_addr, msg)).rjust(packet_size), addr) + # We give the parent some time to be ready. + _sleep(1.0) + try: + start_time = _time() + end_time = start_time + duration * 2.0 + i = 0 + while _time() < end_time: + _send_chunk(str(i)) + s = _recv(sock, packet_size) + assert len(s) == packet_size + i += 1 + _send_chunk(BW_END) + finally: + sock.close() + +def run_bandwidth_client(**kwargs): + cmd_line = [sys.executable, '-E', os.path.abspath(__file__)] + cmd_line.extend(['--bwclient', repr(kwargs)]) + return subprocess.Popen(cmd_line) #, stdin=subprocess.PIPE, + #stdout=subprocess.PIPE, stderr=subprocess.STDOUT) + +def run_bandwidth_test(func, args, nthreads): + # Create a listening socket to receive the packets. We use UDP which should + # be painlessly cross-platform. + sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) + sock.bind(("127.0.0.1", 0)) + addr = sock.getsockname() + + duration = BANDWIDTH_DURATION + packet_size = BANDWIDTH_PACKET_SIZE + + results = [] + threads = [] + end_event = [] + start_cond = threading.Condition() + started = False + if nthreads > 0: + # Warm up + func(*args) + + results = [] + loop = TimedLoop(func, args) + ready = [] + ready_cond = threading.Condition() + + def run(): + with ready_cond: + ready.append(None) + ready_cond.notify() + with start_cond: + while not started: + start_cond.wait() + loop(start_time, duration * 1.5, end_event, do_yield=False) + + for i in range(nthreads): + threads.append(threading.Thread(target=run)) + for t in threads: + t.setDaemon(True) + t.start() + # Wait for threads to be ready + with ready_cond: + while len(ready) < nthreads: + ready_cond.wait() + + # Run the client and wait for the first packet to arrive before + # unblocking the background threads. + process = run_bandwidth_client(addr=addr, + packet_size=packet_size, + duration=duration) + _time = time.time + # This will also wait for the parent to be ready + s = _recv(sock, packet_size) + remote_addr = eval(s.partition('#')[0]) + + with start_cond: + start_time = _time() + started = True + start_cond.notify(nthreads) + + n = 0 + first_time = None + while not end_event and BW_END not in s: + _sendto(sock, s, remote_addr) + s = _recv(sock, packet_size) + if first_time is None: + first_time = _time() + n += 1 + end_time = _time() + + end_event.append(None) + for t in threads: + t.join() + process.kill() + + return (n - 1) / (end_time - first_time) + +def run_bandwidth_tests(max_threads): + for task in bandwidth_tasks: + print("Background CPU task:", task.__doc__) + print() + func, args = task() + nthreads = 0 + baseline_speed = None + while nthreads <= max_threads: + results = run_bandwidth_test(func, args, nthreads) + speed = results + #speed = len(results) * 1.0 / results[-1][0] + print("CPU threads=%d: %.1f" % (nthreads, speed), end="") + if baseline_speed is None: + print(" packets/s.") + baseline_speed = speed + else: + print(" ( %d %%)" % (speed / baseline_speed * 100)) + nthreads += 1 + print() + + def main(): usage = "usage: %prog [-h|--help] [options]" parser = OptionParser(usage=usage) @@ -403,6 +534,9 @@ parser.add_option("-l", "--latency", action="store_true", dest="latency", default=False, help="run latency tests") + parser.add_option("-b", "--bandwidth", + action="store_true", dest="bandwidth", default=False, + help="run I/O bandwidth tests") parser.add_option("-i", "--interval", action="store", type="int", dest="check_interval", default=None, help="sys.setcheckinterval() value") @@ -413,10 +547,13 @@ action="store", type="int", dest="nthreads", default=4, help="max number of threads in tests") - # Hidden option to run the pinging client + # Hidden option to run the pinging and bandwidth clients parser.add_option("", "--latclient", action="store", dest="latclient", default=None, help=SUPPRESS_HELP) + parser.add_option("", "--bwclient", + action="store", dest="bwclient", default=None, + help=SUPPRESS_HELP) options, args = parser.parse_args() if args: @@ -427,8 +564,13 @@ latency_client(**kwargs) return - if not options.throughput and not options.latency: - options.throughput = options.latency = True + if options.bwclient: + kwargs = eval(options.bwclient) + bandwidth_client(**kwargs) + return + + if not options.throughput and not options.latency and not options.bandwidth: + options.throughput = options.latency = options.bandwidth = True if options.check_interval: sys.setcheckinterval(options.check_interval) if options.switch_interval: @@ -458,5 +600,10 @@ print() run_latency_tests(options.nthreads) + if options.bandwidth: + print("--- I/O bandwidth ---") + print() + run_bandwidth_tests(options.nthreads) + if __name__ == "__main__": main() From python-checkins at python.org Sat Mar 13 22:27:21 2010 From: python-checkins at python.org (antoine.pitrou) Date: Sat, 13 Mar 2010 22:27:21 +0100 (CET) Subject: [Python-checkins] r78940 - in python/branches/py3k: Tools/ccbench/ccbench.py Message-ID: <20100313212721.573F5F8B6@mail.python.org> Author: antoine.pitrou Date: Sat Mar 13 22:27:21 2010 New Revision: 78940 Log: Merged revisions 78939 via svnmerge from svn+ssh://pythondev at svn.python.org/python/trunk ........ r78939 | antoine.pitrou | 2010-03-13 22:21:30 +0100 (Sat, 13 Mar 2010) | 5 lines Issue #7993: Add a test of IO packet processing bandwidth to ccbench. It measures the number of UDP packets processed per second depending on the number of background CPU-bound Python threads. ........ Modified: python/branches/py3k/ (props changed) python/branches/py3k/Tools/ccbench/ccbench.py Modified: python/branches/py3k/Tools/ccbench/ccbench.py ============================================================================== --- python/branches/py3k/Tools/ccbench/ccbench.py (original) +++ python/branches/py3k/Tools/ccbench/ccbench.py Sat Mar 13 22:27:21 2010 @@ -36,6 +36,9 @@ LATENCY_PING_INTERVAL = 0.1 LATENCY_DURATION = 2.0 +BANDWIDTH_PACKET_SIZE = 1024 +BANDWIDTH_DURATION = 2.0 + def task_pidigits(): """Pi calculation (Python)""" @@ -149,6 +152,7 @@ throughput_tasks.append(task_compress_zlib) latency_tasks = throughput_tasks +bandwidth_tasks = [task_pidigits] class TimedLoop: @@ -394,6 +398,133 @@ print() +BW_END = "END" + +def bandwidth_client(addr, packet_size, duration): + sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) + sock.bind(("127.0.0.1", 0)) + local_addr = sock.getsockname() + _time = time.time + _sleep = time.sleep + def _send_chunk(msg): + _sendto(sock, ("%r#%s\n" % (local_addr, msg)).rjust(packet_size), addr) + # We give the parent some time to be ready. + _sleep(1.0) + try: + start_time = _time() + end_time = start_time + duration * 2.0 + i = 0 + while _time() < end_time: + _send_chunk(str(i)) + s = _recv(sock, packet_size) + assert len(s) == packet_size + i += 1 + _send_chunk(BW_END) + finally: + sock.close() + +def run_bandwidth_client(**kwargs): + cmd_line = [sys.executable, '-E', os.path.abspath(__file__)] + cmd_line.extend(['--bwclient', repr(kwargs)]) + return subprocess.Popen(cmd_line) #, stdin=subprocess.PIPE, + #stdout=subprocess.PIPE, stderr=subprocess.STDOUT) + +def run_bandwidth_test(func, args, nthreads): + # Create a listening socket to receive the packets. We use UDP which should + # be painlessly cross-platform. + sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) + sock.bind(("127.0.0.1", 0)) + addr = sock.getsockname() + + duration = BANDWIDTH_DURATION + packet_size = BANDWIDTH_PACKET_SIZE + + results = [] + threads = [] + end_event = [] + start_cond = threading.Condition() + started = False + if nthreads > 0: + # Warm up + func(*args) + + results = [] + loop = TimedLoop(func, args) + ready = [] + ready_cond = threading.Condition() + + def run(): + with ready_cond: + ready.append(None) + ready_cond.notify() + with start_cond: + while not started: + start_cond.wait() + loop(start_time, duration * 1.5, end_event, do_yield=False) + + for i in range(nthreads): + threads.append(threading.Thread(target=run)) + for t in threads: + t.setDaemon(True) + t.start() + # Wait for threads to be ready + with ready_cond: + while len(ready) < nthreads: + ready_cond.wait() + + # Run the client and wait for the first packet to arrive before + # unblocking the background threads. + process = run_bandwidth_client(addr=addr, + packet_size=packet_size, + duration=duration) + _time = time.time + # This will also wait for the parent to be ready + s = _recv(sock, packet_size) + remote_addr = eval(s.partition('#')[0]) + + with start_cond: + start_time = _time() + started = True + start_cond.notify(nthreads) + + n = 0 + first_time = None + while not end_event and BW_END not in s: + _sendto(sock, s, remote_addr) + s = _recv(sock, packet_size) + if first_time is None: + first_time = _time() + n += 1 + end_time = _time() + + end_event.append(None) + for t in threads: + t.join() + process.kill() + + return (n - 1) / (end_time - first_time) + +def run_bandwidth_tests(max_threads): + for task in bandwidth_tasks: + print("Background CPU task:", task.__doc__) + print() + func, args = task() + nthreads = 0 + baseline_speed = None + while nthreads <= max_threads: + results = run_bandwidth_test(func, args, nthreads) + speed = results + #speed = len(results) * 1.0 / results[-1][0] + print("CPU threads=%d: %.1f" % (nthreads, speed), end="") + if baseline_speed is None: + print(" packets/s.") + baseline_speed = speed + else: + print(" ( %d %%)" % (speed / baseline_speed * 100)) + nthreads += 1 + print() + + def main(): usage = "usage: %prog [-h|--help] [options]" parser = OptionParser(usage=usage) @@ -403,6 +534,9 @@ parser.add_option("-l", "--latency", action="store_true", dest="latency", default=False, help="run latency tests") + parser.add_option("-b", "--bandwidth", + action="store_true", dest="bandwidth", default=False, + help="run I/O bandwidth tests") parser.add_option("-i", "--interval", action="store", type="int", dest="check_interval", default=None, help="sys.setcheckinterval() value") @@ -413,10 +547,13 @@ action="store", type="int", dest="nthreads", default=4, help="max number of threads in tests") - # Hidden option to run the pinging client + # Hidden option to run the pinging and bandwidth clients parser.add_option("", "--latclient", action="store", dest="latclient", default=None, help=SUPPRESS_HELP) + parser.add_option("", "--bwclient", + action="store", dest="bwclient", default=None, + help=SUPPRESS_HELP) options, args = parser.parse_args() if args: @@ -427,8 +564,13 @@ latency_client(**kwargs) return - if not options.throughput and not options.latency: - options.throughput = options.latency = True + if options.bwclient: + kwargs = eval(options.bwclient) + bandwidth_client(**kwargs) + return + + if not options.throughput and not options.latency and not options.bandwidth: + options.throughput = options.latency = options.bandwidth = True if options.check_interval: sys.setcheckinterval(options.check_interval) if options.switch_interval: @@ -458,5 +600,10 @@ print() run_latency_tests(options.nthreads) + if options.bandwidth: + print("--- I/O bandwidth ---") + print() + run_bandwidth_tests(options.nthreads) + if __name__ == "__main__": main() From python-checkins at python.org Sat Mar 13 23:30:35 2010 From: python-checkins at python.org (benjamin.peterson) Date: Sat, 13 Mar 2010 23:30:35 +0100 (CET) Subject: [Python-checkins] r78941 - in python/branches/py3k: Doc/library/logging.rst Lib/logging/__init__.py Lib/logging/config.py Lib/logging/handlers.py Lib/test/test_logging.py Message-ID: <20100313223035.261EDF707@mail.python.org> Author: benjamin.peterson Date: Sat Mar 13 23:30:34 2010 New Revision: 78941 Log: Merged revisions 77967,77969,77973,77979,77985-77986,78009,78029,78031-78033,78081,78085,78103,78105-78106,78108,78246,78703,78728,78731,78853,78855 via svnmerge from svn+ssh://pythondev at svn.python.org/python/trunk ........ r77967 | vinay.sajip | 2010-02-04 12:48:53 -0600 (Thu, 04 Feb 2010) | 1 line Logging: Implemented PEP 391. ........ r77969 | vinay.sajip | 2010-02-04 14:18:28 -0600 (Thu, 04 Feb 2010) | 1 line Removed spurious print statement. ........ r77973 | vinay.sajip | 2010-02-04 14:23:45 -0600 (Thu, 04 Feb 2010) | 1 line Issue #7851: logging: clarification on logging configuration files. ........ r77979 | vinay.sajip | 2010-02-04 15:40:56 -0600 (Thu, 04 Feb 2010) | 1 line Added unit test for cfg:// resolution. ........ r77985 | vinay.sajip | 2010-02-05 08:52:05 -0600 (Fri, 05 Feb 2010) | 1 line Issue #7857: test_logging: listener test now uses find_unused_port(). ........ r77986 | vinay.sajip | 2010-02-05 09:40:20 -0600 (Fri, 05 Feb 2010) | 1 line Issue #7857: test_logging: listener tests disabled for now. ........ r78009 | vinay.sajip | 2010-02-05 17:43:11 -0600 (Fri, 05 Feb 2010) | 1 line test_logging: minor tweaks to timeouts, listening tests marked as skipped. ........ r78029 | vinay.sajip | 2010-02-06 14:00:43 -0600 (Sat, 06 Feb 2010) | 1 line Issue #7857: Tentatively re-enabling one test to see effect on buildbots. ........ r78031 | vinay.sajip | 2010-02-06 14:28:36 -0600 (Sat, 06 Feb 2010) | 1 line Issue #7857: Gave server thread more time to get ready, and re-enabled a skipped test. ........ r78032 | georg.brandl | 2010-02-06 15:54:40 -0600 (Sat, 06 Feb 2010) | 1 line Remove unused imports from test_logging. ........ r78033 | benjamin.peterson | 2010-02-06 16:08:15 -0600 (Sat, 06 Feb 2010) | 1 line make waiting for the server to start robust ........ r78081 | vinay.sajip | 2010-02-07 06:56:54 -0600 (Sun, 07 Feb 2010) | 1 line Issue #7869: logging: improved format-time diagnostics and removed some 1.5.2 support code. ........ r78085 | vinay.sajip | 2010-02-07 07:06:51 -0600 (Sun, 07 Feb 2010) | 1 line logging: Removed some more 1.5.2 support code. ........ r78103 | vinay.sajip | 2010-02-08 00:50:14 -0600 (Mon, 08 Feb 2010) | 1 line Removed spurious print statement in test. ........ r78105 | vinay.sajip | 2010-02-08 09:32:08 -0600 (Mon, 08 Feb 2010) | 1 line logging: skipped listening tests because they're not working reliably. ........ r78106 | vinay.sajip | 2010-02-08 10:05:50 -0600 (Mon, 08 Feb 2010) | 1 line Issue #7857: Another attempt to keep the buildbots happy. ........ r78108 | vinay.sajip | 2010-02-08 15:18:15 -0600 (Mon, 08 Feb 2010) | 1 line logging: gingerly re-enabling skipped tests after improving thread sync code in configurator. ........ r78246 | vinay.sajip | 2010-02-19 17:53:17 -0600 (Fri, 19 Feb 2010) | 1 line logging: Documented warnings module integration. ........ r78703 | vinay.sajip | 2010-03-05 16:11:24 -0600 (Fri, 05 Mar 2010) | 1 line Factored out time usage determination into a method, to facilitate alternative formatting implementations in the future. ........ r78728 | vinay.sajip | 2010-03-06 09:12:08 -0600 (Sat, 06 Mar 2010) | 1 line Added schema version test in dictConfig. ........ r78731 | vinay.sajip | 2010-03-06 09:56:03 -0600 (Sat, 06 Mar 2010) | 1 line Added checks for tuples in dictConfig. ........ r78853 | vinay.sajip | 2010-03-12 00:01:21 -0600 (Fri, 12 Mar 2010) | 1 line Issue #8117: logging: Improved algorithm for computing initial rollover time. ........ r78855 | vinay.sajip | 2010-03-12 03:16:10 -0600 (Fri, 12 Mar 2010) | 1 line Issue #8117: Updated NEWS entry and added to logging documentation. ........ Modified: python/branches/py3k/ (props changed) python/branches/py3k/Doc/library/logging.rst python/branches/py3k/Lib/logging/__init__.py python/branches/py3k/Lib/logging/config.py python/branches/py3k/Lib/logging/handlers.py python/branches/py3k/Lib/test/test_logging.py Modified: python/branches/py3k/Doc/library/logging.rst ============================================================================== --- python/branches/py3k/Doc/library/logging.rst (original) +++ python/branches/py3k/Doc/library/logging.rst Sat Mar 13 23:30:34 2010 @@ -420,6 +420,13 @@ code approach, mainly separation of configuration and code and the ability of noncoders to easily modify the logging properties. +Note that the class names referenced in config files need to be either relative +to the logging module, or absolute values which can be resolved using normal +import mechanisms. Thus, you could use either `handlers.WatchedFileHandler` +(relative to the logging module) or `mypackage.mymodule.MyHandler` (for a +class defined in package `mypackage` and module `mymodule`, where `mypackage` +is available on the Python import path). + .. _library-config: Configuring Logging for a Library @@ -1849,6 +1856,11 @@ The extensions are date-and-time based, using the strftime format ``%Y-%m-%d_%H-%M-%S`` or a leading portion thereof, depending on the rollover interval. + + When computing the next rollover time for the first time (when the handler + is created), the last modification time of an existing log file, or else + the current time, is used to compute when the next rotation will occur. + If the *utc* argument is true, times in UTC will be used; otherwise local time is used. @@ -2401,6 +2413,28 @@ because lock implementations in the :mod:`threading` module are not always re-entrant, and so cannot be invoked from such signal handlers. + +Integration with the warnings module +------------------------------------ + +The :func:`captureWarnings` function can be used to integrate :mod:`logging` +with the :mod:`warnings` module. + +.. function:: captureWarnings(capture) + + This function is used to turn the capture of warnings by logging on and + off. + + If `capture` is `True`, warnings issued by the :mod:`warnings` module + will be redirected to the logging system. Specifically, a warning will be + formatted using :func:`warnings.formatwarning` and the resulting string + logged to a logger named "py.warnings" with a severity of `WARNING`. + + If `capture` is `False`, the redirection of warnings to the logging system + will stop, and warnings will be redirected to their original destinations + (i.e. those in effect before `captureWarnings(True)` was called). + + Configuration ------------- Modified: python/branches/py3k/Lib/logging/__init__.py ============================================================================== --- python/branches/py3k/Lib/logging/__init__.py (original) +++ python/branches/py3k/Lib/logging/__init__.py Sat Mar 13 23:30:34 2010 @@ -432,6 +432,12 @@ s = s[:-1] return s + def usesTime(self): + """ + Check if the format uses the creation time of the record. + """ + return self._fmt.find("%(asctime)") >= 0 + def format(self, record): """ Format the specified record as text. @@ -440,13 +446,13 @@ string formatting operation which yields the returned string. Before formatting the dictionary, a couple of preparatory steps are carried out. The message attribute of the record is computed - using LogRecord.getMessage(). If the formatting string contains - "%(asctime)", formatTime() is called to format the event time. - If there is exception information, it is formatted using - formatException() and appended to the message. + using LogRecord.getMessage(). If the formatting string uses the + time (as determined by a call to usesTime(), formatTime() is + called to format the event time. If there is exception information, + it is formatted using formatException() and appended to the message. """ record.message = record.getMessage() - if self._fmt.find("%(asctime)") >= 0: + if self.usesTime(): record.asctime = self.formatTime(record, self.datefmt) s = self._fmt % record.__dict__ if record.exc_info: Modified: python/branches/py3k/Lib/logging/config.py ============================================================================== --- python/branches/py3k/Lib/logging/config.py (original) +++ python/branches/py3k/Lib/logging/config.py Sat Mar 13 23:30:34 2010 @@ -261,7 +261,6 @@ logger.disabled = 1 - IDENTIFIER = re.compile('^[a-z_][a-z0-9_]*$', re.I) @@ -448,7 +447,7 @@ isinstance(value, tuple): value = ConvertingTuple(value) value.configurator = self - elif isinstance(value, str): + elif isinstance(value, str): # str for py3k m = self.CONVERT_PATTERN.match(value) if m: d = m.groupdict() @@ -474,6 +473,12 @@ setattr(result, name, value) return result + def as_tuple(self, value): + """Utility function which converts lists to tuples.""" + if isinstance(value, list): + value = tuple(value) + return value + class DictConfigurator(BaseConfigurator): """ Configure logging using a dictionary-like object to describe the @@ -484,6 +489,10 @@ """Do the configuration.""" config = self.config + if 'version' not in config: + raise ValueError("dictionary doesn't specify a version") + if config['version'] != 1: + raise ValueError("Unsupported version: %s" % config['version']) incremental = config.pop('incremental', False) EMPTY_DICT = {} logging._acquireLock() @@ -684,6 +693,12 @@ except Exception as e: raise ValueError('Unable to set target handler ' '%r: %s' % (config['target'], e)) + elif issubclass(klass, logging.handlers.SMTPHandler) and\ + 'mailhost' in config: + config['mailhost'] = self.as_tuple(config['mailhost']) + elif issubclass(klass, logging.handlers.SysLogHandler) and\ + 'address' in config: + config['address'] = self.as_tuple(config['address']) factory = klass kwargs = dict([(k, config[k]) for k in config if valid_ident(k)]) try: @@ -788,7 +803,7 @@ chunk = self.connection.recv(slen) while len(chunk) < slen: chunk = chunk + conn.recv(slen - len(chunk)) - chunk = chunk.decode('utf-8') + chunk = chunk.decode("utf-8") try: import json d =json.loads(chunk) Modified: python/branches/py3k/Lib/logging/handlers.py ============================================================================== --- python/branches/py3k/Lib/logging/handlers.py (original) +++ python/branches/py3k/Lib/logging/handlers.py Sat Mar 13 23:30:34 2010 @@ -25,7 +25,7 @@ """ import logging, socket, os, pickle, struct, time, re -from stat import ST_DEV, ST_INO +from stat import ST_DEV, ST_INO, ST_MTIME try: import codecs @@ -203,7 +203,11 @@ self.extMatch = re.compile(self.extMatch, re.ASCII) self.interval = self.interval * interval # multiply by units requested - self.rolloverAt = self.computeRollover(int(time.time())) + if os.path.exists(filename): + t = os.stat(filename)[ST_MTIME] + else: + t = int(time.time()) + self.rolloverAt = self.computeRollover(t) def computeRollover(self, currentTime): """ Modified: python/branches/py3k/Lib/test/test_logging.py ============================================================================== --- python/branches/py3k/Lib/test/test_logging.py (original) +++ python/branches/py3k/Lib/test/test_logging.py Sat Mar 13 23:30:34 2010 @@ -1,4 +1,4 @@ -#!/usr/bin/env python3 +#!/usr/bin/env python # # Copyright 2001-2010 by Vinay Sajip. All Rights Reserved. # @@ -26,7 +26,6 @@ import logging.config import codecs -import copy import pickle import io import gc @@ -36,7 +35,6 @@ import select import socket from socketserver import ThreadingTCPServer, StreamRequestHandler -import string import struct import sys import tempfile @@ -44,8 +42,6 @@ find_unused_port import textwrap import threading -import time -import types import unittest import warnings import weakref @@ -361,7 +357,7 @@ def setUp(self): BaseTest.setUp(self) - for k, v in list(my_logging_levels.items()): + for k, v in my_logging_levels.items(): logging.addLevelName(k, v) def log_at_all_levels(self, logger): @@ -831,7 +827,7 @@ # Trigger cycle breaking. gc.collect() dead = [] - for (id_, repr_), ref in list(self._survivors.items()): + for (id_, repr_), ref in self._survivors.items(): if ref() is None: dead.append(repr_) if dead: @@ -870,7 +866,7 @@ # the non-ascii data we write to the log. data = "foo\x80" try: - handler = logging.FileHandler(fn, encoding="utf8") + handler = logging.FileHandler(fn, encoding="utf-8") log.addHandler(handler) try: # write non-ascii data to the log. @@ -879,7 +875,7 @@ log.removeHandler(handler) handler.close() # check we wrote exactly those bytes, ignoring trailing \n etc - f = open(fn, encoding="utf8") + f = open(fn, encoding="utf-8") try: self.assertEqual(f.read().rstrip(), data) finally: @@ -956,6 +952,7 @@ # config0 is a standard configuration. config0 = { + 'version': 1, 'formatters': { 'form1' : { 'format' : '%(levelname)s ++ %(message)s', @@ -977,6 +974,7 @@ # config1 adds a little to the standard configuration. config1 = { + 'version': 1, 'formatters': { 'form1' : { 'format' : '%(levelname)s ++ %(message)s', @@ -1003,6 +1001,7 @@ # config2 has a subtle configuration error that should be reported config2 = { + 'version': 1, 'formatters': { 'form1' : { 'format' : '%(levelname)s ++ %(message)s', @@ -1029,6 +1028,7 @@ #As config1 but with a misspelt level on a handler config2a = { + 'version': 1, 'formatters': { 'form1' : { 'format' : '%(levelname)s ++ %(message)s', @@ -1056,6 +1056,7 @@ #As config1 but with a misspelt level on a logger config2b = { + 'version': 1, 'formatters': { 'form1' : { 'format' : '%(levelname)s ++ %(message)s', @@ -1082,6 +1083,7 @@ # config3 has a less subtle configuration error config3 = { + 'version': 1, 'formatters': { 'form1' : { 'format' : '%(levelname)s ++ %(message)s', @@ -1108,6 +1110,7 @@ # config4 specifies a custom formatter class to be loaded config4 = { + 'version': 1, 'formatters': { 'form1' : { '()' : __name__ + '.ExceptionFormatter', @@ -1130,6 +1133,7 @@ # As config4 but using an actual callable rather than a string config4a = { + 'version': 1, 'formatters': { 'form1' : { '()' : ExceptionFormatter, @@ -1163,6 +1167,7 @@ # config5 specifies a custom handler class to be loaded config5 = { + 'version': 1, 'formatters': { 'form1' : { 'format' : '%(levelname)s ++ %(message)s', @@ -1190,6 +1195,7 @@ # config6 specifies a custom handler class to be loaded # but has bad arguments config6 = { + 'version': 1, 'formatters': { 'form1' : { 'format' : '%(levelname)s ++ %(message)s', @@ -1218,6 +1224,7 @@ #config 7 does not define compiler.parser but defines compiler.lexer #so compiler.parser should be disabled after applying it config7 = { + 'version': 1, 'formatters': { 'form1' : { 'format' : '%(levelname)s ++ %(message)s', @@ -1243,6 +1250,7 @@ } config8 = { + 'version': 1, 'disable_existing_loggers' : False, 'formatters': { 'form1' : { @@ -1271,6 +1279,7 @@ } config9 = { + 'version': 1, 'formatters': { 'form1' : { 'format' : '%(levelname)s ++ %(message)s', @@ -1296,6 +1305,7 @@ } config9a = { + 'version': 1, 'incremental' : True, 'handlers' : { 'hand1' : { @@ -1310,6 +1320,7 @@ } config9b = { + 'version': 1, 'incremental' : True, 'handlers' : { 'hand1' : { @@ -1325,6 +1336,7 @@ #As config1 but with a filter added config10 = { + 'version': 1, 'formatters': { 'form1' : { 'format' : '%(levelname)s ++ %(message)s', @@ -1358,6 +1370,68 @@ #As config1 but using cfg:// references config11 = { + 'version': 1, + 'true_formatters': { + 'form1' : { + 'format' : '%(levelname)s ++ %(message)s', + }, + }, + 'handler_configs': { + 'hand1' : { + 'class' : 'logging.StreamHandler', + 'formatter' : 'form1', + 'level' : 'NOTSET', + 'stream' : 'ext://sys.stdout', + }, + }, + 'formatters' : 'cfg://true_formatters', + 'handlers' : { + 'hand1' : 'cfg://handler_configs[hand1]', + }, + 'loggers' : { + 'compiler.parser' : { + 'level' : 'DEBUG', + 'handlers' : ['hand1'], + }, + }, + 'root' : { + 'level' : 'WARNING', + }, + } + + #As config11 but missing the version key + config12 = { + 'true_formatters': { + 'form1' : { + 'format' : '%(levelname)s ++ %(message)s', + }, + }, + 'handler_configs': { + 'hand1' : { + 'class' : 'logging.StreamHandler', + 'formatter' : 'form1', + 'level' : 'NOTSET', + 'stream' : 'ext://sys.stdout', + }, + }, + 'formatters' : 'cfg://true_formatters', + 'handlers' : { + 'hand1' : 'cfg://handler_configs[hand1]', + }, + 'loggers' : { + 'compiler.parser' : { + 'level' : 'DEBUG', + 'handlers' : ['hand1'], + }, + }, + 'root' : { + 'level' : 'WARNING', + }, + } + + #As config11 but using an unsupported version + config13 = { + 'version': 2, 'true_formatters': { 'form1' : { 'format' : '%(levelname)s ++ %(message)s', @@ -1573,13 +1647,19 @@ def test_config11_ok(self): self.test_config1_ok(self.config11) + def test_config12_failure(self): + self.assertRaises(Exception, self.apply_config, self.config12) + + def test_config13_failure(self): + self.assertRaises(Exception, self.apply_config, self.config13) + def setup_via_listener(self, text): + text = text.encode("utf-8") port = find_unused_port() t = logging.config.listen(port) t.start() t.ready.wait() t.ready.clear() - text = text.encode('utf-8') try: sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) sock.settimeout(2.0) From python-checkins at python.org Sun Mar 14 00:24:32 2010 From: python-checkins at python.org (florent.xicluna) Date: Sun, 14 Mar 2010 00:24:32 +0100 (CET) Subject: [Python-checkins] r78942 - in python/branches/py3k: Doc/library/xml.etree.elementtree.rst Doc/library/xml.etree.rst Lib/test/support.py Lib/test/test.xml Lib/test/test.xml.out Lib/test/test_minidom.py Lib/test/test_sax.py Lib/test/test_xml_etree.py Lib/test/test_xml_etree_c.py Lib/test/xmltestdata Lib/test/xmltestdata/test.xml Lib/test/xmltestdata/test.xml.out Lib/xml/etree/ElementInclude.py Lib/xml/etree/ElementPath.py Lib/xml/etree/ElementTree.py Lib/xml/etree/__init__.py Makefile.pre.in Misc/NEWS Modules/_elementtree.c Tools/msi/msi.py Message-ID: <20100313232432.07AC7FA1E@mail.python.org> Author: florent.xicluna Date: Sun Mar 14 00:24:31 2010 New Revision: 78942 Log: Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from svn+ssh://pythondev at svn.python.org/python/trunk ........ r78838 | florent.xicluna | 2010-03-11 15:36:19 +0100 (jeu, 11 mar 2010) | 2 lines Issue #6472: The xml.etree package is updated to ElementTree 1.3. The cElementTree module is updated too. ........ r78839 | florent.xicluna | 2010-03-11 16:55:11 +0100 (jeu, 11 mar 2010) | 2 lines Fix repr of tree Element on windows. ........ r78917 | florent.xicluna | 2010-03-13 12:18:49 +0100 (sam, 13 mar 2010) | 2 lines Move the xml test data to their own directory. ........ r78919 | florent.xicluna | 2010-03-13 13:41:48 +0100 (sam, 13 mar 2010) | 2 lines Do not chdir when running test_xml_etree, and enhance the findfile helper. ........ r78934 | florent.xicluna | 2010-03-13 18:56:19 +0100 (sam, 13 mar 2010) | 2 lines Update some parts of the xml.etree documentation. ........ r78937 | florent.xicluna | 2010-03-13 21:30:15 +0100 (sam, 13 mar 2010) | 3 lines Add the keyword argument "method=None" to the .write() method and the tostring/tostringlist functions. Update the function, class and method signatures, according to the new convention. ........ Added: python/branches/py3k/Lib/test/xmltestdata/ - copied from r78840, /python/trunk/Lib/test/samples/ python/branches/py3k/Lib/test/xmltestdata/test.xml - copied unchanged from r78936, /python/branches/py3k/Lib/test/test.xml python/branches/py3k/Lib/test/xmltestdata/test.xml.out - copied unchanged from r78936, /python/branches/py3k/Lib/test/test.xml.out Removed: python/branches/py3k/Doc/library/xml.etree.rst python/branches/py3k/Lib/test/test.xml python/branches/py3k/Lib/test/test.xml.out Modified: python/branches/py3k/ (props changed) python/branches/py3k/Doc/library/xml.etree.elementtree.rst python/branches/py3k/Lib/test/support.py python/branches/py3k/Lib/test/test_minidom.py python/branches/py3k/Lib/test/test_sax.py python/branches/py3k/Lib/test/test_xml_etree.py python/branches/py3k/Lib/test/test_xml_etree_c.py python/branches/py3k/Lib/xml/etree/ElementInclude.py python/branches/py3k/Lib/xml/etree/ElementPath.py python/branches/py3k/Lib/xml/etree/ElementTree.py python/branches/py3k/Lib/xml/etree/__init__.py python/branches/py3k/Makefile.pre.in python/branches/py3k/Misc/NEWS python/branches/py3k/Modules/_elementtree.c python/branches/py3k/Tools/msi/msi.py Modified: python/branches/py3k/Doc/library/xml.etree.elementtree.rst ============================================================================== --- python/branches/py3k/Doc/library/xml.etree.elementtree.rst (original) +++ python/branches/py3k/Doc/library/xml.etree.elementtree.rst Sun Mar 14 00:24:31 2010 @@ -6,9 +6,9 @@ .. moduleauthor:: Fredrik Lundh -The Element type is a flexible container object, designed to store hierarchical -data structures in memory. The type can be described as a cross between a list -and a dictionary. +The :class:`Element` type is a flexible container object, designed to store +hierarchical data structures in memory. The type can be described as a cross +between a list and a dictionary. Each element has a number of properties associated with it: @@ -23,7 +23,8 @@ * a number of child elements, stored in a Python sequence -To create an element instance, use the Element or SubElement factory functions. +To create an element instance, use the :class:`Element` constructor or the +:func:`SubElement` factory function. The :class:`ElementTree` class can be used to wrap an element structure, and convert it from and to XML. @@ -31,8 +32,14 @@ A C implementation of this API is available as :mod:`xml.etree.cElementTree`. See http://effbot.org/zone/element-index.htm for tutorials and links to other -docs. Fredrik Lundh's page is also the location of the development version of the -xml.etree.ElementTree. +docs. Fredrik Lundh's page is also the location of the development version of +the xml.etree.ElementTree. + +.. versionchanged:: 2.7 + The ElementTree API is updated to 1.3. For more information, see + `Introducing ElementTree 1.3 + `_. + .. _elementtree-functions: @@ -43,16 +50,16 @@ .. function:: Comment(text=None) Comment element factory. This factory function creates a special element - that will be serialized as an XML comment. The comment string can be either - an ASCII-only :class:`bytes` object or a :class:`str` object. *text* is a - string containing the comment string. Returns an element instance + that will be serialized as an XML comment by the standard serializer. The + comment string can be either a bytestring or a Unicode string. *text* is a + string containing the comment string. Returns an element instance representing a comment. .. function:: dump(elem) - Writes an element tree or element structure to sys.stdout. This function should - be used for debugging only. + Writes an element tree or element structure to sys.stdout. This function + should be used for debugging only. The exact output format is implementation dependent. In this version, it's written as an ordinary XML file. @@ -60,38 +67,36 @@ *elem* is an element tree or an individual element. -.. function:: Element(tag, attrib={}, **extra) +.. function:: fromstring(text) - Element factory. This function returns an object implementing the standard - Element interface. The exact class or type of that object is implementation - dependent, but it will always be compatible with the _ElementInterface class in - this module. - - The element name, attribute names, and attribute values can be either an - ASCII-only :class:`bytes` object or a :class:`str` object. *tag* is the - element name. *attrib* is an optional dictionary, containing element - attributes. *extra* contains additional attributes, given as keyword - arguments. Returns an element instance. + Parses an XML section from a string constant. Same as XML. *text* is a + string containing XML data. Returns an :class:`Element` instance. -.. function:: fromstring(text) +.. function:: fromstringlist(sequence, parser=None) - Parses an XML section from a string constant. Same as XML. *text* is a string - containing XML data. Returns an Element instance. + Parses an XML document from a sequence of string fragments. *sequence* is a + list or other sequence containing XML data fragments. *parser* is an + optional parser instance. If not given, the standard :class:`XMLParser` + parser is used. Returns an :class:`Element` instance. + + .. versionadded:: 2.7 .. function:: iselement(element) - Checks if an object appears to be a valid element object. *element* is an - element instance. Returns a true value if this is an element object. + Checks if an object appears to be a valid element object. *element* is an + element instance. Returns a true value if this is an element object. -.. function:: iterparse(source, events=None) +.. function:: iterparse(source, events=None, parser=None) Parses an XML section into an element tree incrementally, and reports what's - going on to the user. *source* is a filename or file object containing XML data. - *events* is a list of events to report back. If omitted, only "end" events are - reported. Returns an :term:`iterator` providing ``(event, elem)`` pairs. + going on to the user. *source* is a filename or file object containing XML + data. *events* is a list of events to report back. If omitted, only "end" + events are reported. *parser* is an optional parser instance. If not + given, the standard :class:`XMLParser` parser is used. Returns an + :term:`iterator` providing ``(event, elem)`` pairs. .. note:: @@ -106,196 +111,267 @@ .. function:: parse(source, parser=None) - Parses an XML section into an element tree. *source* is a filename or file - object containing XML data. *parser* is an optional parser instance. If not - given, the standard XMLTreeBuilder parser is used. Returns an ElementTree - instance. + Parses an XML section into an element tree. *source* is a filename or file + object containing XML data. *parser* is an optional parser instance. If + not given, the standard :class:`XMLParser` parser is used. Returns an + :class:`ElementTree` instance. .. function:: ProcessingInstruction(target, text=None) - PI element factory. This factory function creates a special element that will - be serialized as an XML processing instruction. *target* is a string containing - the PI target. *text* is a string containing the PI contents, if given. Returns - an element instance, representing a processing instruction. + PI element factory. This factory function creates a special element that + will be serialized as an XML processing instruction. *target* is a string + containing the PI target. *text* is a string containing the PI contents, if + given. Returns an element instance, representing a processing instruction. + + +.. function:: register_namespace(prefix, uri) + + Registers a namespace prefix. The registry is global, and any existing + mapping for either the given prefix or the namespace URI will be removed. + *prefix* is a namespace prefix. *uri* is a namespace uri. Tags and + attributes in this namespace will be serialized with the given prefix, if at + all possible. + + .. versionadded:: 2.7 .. function:: SubElement(parent, tag, attrib={}, **extra) - Subelement factory. This function creates an element instance, and appends it - to an existing element. + Subelement factory. This function creates an element instance, and appends + it to an existing element. + + The element name, attribute names, and attribute values can be either + bytestrings or Unicode strings. *parent* is the parent element. *tag* is + the subelement name. *attrib* is an optional dictionary, containing element + attributes. *extra* contains additional attributes, given as keyword + arguments. Returns an element instance. + + +.. function:: tostring(element, encoding=None, method=None) + + Generates a string representation of an XML element, including all + subelements. *element* is an :class:`Element` instance. *encoding* is the + output encoding (default is None). *method* is either ``"xml"``, + ``"html"`` or ``"text"`` (default is ``"xml"``). Returns an (optionally) + encoded string containing the XML data. - The element name, attribute names, and attribute values can be an ASCII-only - :class:`bytes` object or a :class:`str` object. *parent* is the parent - element. *tag* is the subelement name. *attrib* is an optional dictionary, - containing element attributes. *extra* contains additional attributes, given - as keyword arguments. Returns an element instance. +.. function:: tostringlist(element, encoding=None, method=None) -.. function:: tostring(element, encoding=None) + Generates a string representation of an XML element, including all + subelements. *element* is an :class:`Element` instance. *encoding* is the + output encoding (default is None). *method* is either ``"xml"``, + ``"html"`` or ``"text"`` (default is ``"xml"``). Returns a sequence object + containing the XML data. - Generates a string representation of an XML element, including all subelements. - *element* is an Element instance. *encoding* is the output encoding (default is - US-ASCII). Returns an encoded string containing the XML data. + .. versionadded:: 2.7 -.. function:: XML(text) +.. function:: XML(text, parser=None) Parses an XML section from a string constant. This function can be used to - embed "XML literals" in Python code. *text* is a string containing XML data. - Returns an Element instance. + embed "XML literals" in Python code. *text* is a string containing XML + data. *parser* is an optional parser instance. If not given, the standard + :class:`XMLParser` parser is used. Returns an :class:`Element` instance. -.. function:: XMLID(text) +.. function:: XMLID(text, parser=None) Parses an XML section from a string constant, and also returns a dictionary - which maps from element id:s to elements. *text* is a string containing XML - data. Returns a tuple containing an Element instance and a dictionary. + which maps from element id:s to elements. *text* is a string containing XML + data. *parser* is an optional parser instance. If not given, the standard + :class:`XMLParser` parser is used. Returns a tuple containing an + :class:`Element` instance and a dictionary. -.. _elementtree-element-interface: +.. _elementtree-element-objects: -The Element Interface ---------------------- +Element Objects +--------------- -Element objects returned by Element or SubElement have the following methods -and attributes. +.. class:: Element(tag, attrib={}, **extra) -.. attribute:: Element.tag + Element class. This class defines the Element interface, and provides a + reference implementation of this interface. - A string identifying what kind of data this element represents (the element - type, in other words). + The element name, attribute names, and attribute values can be either + bytestrings or Unicode strings. *tag* is the element name. *attrib* is + an optional dictionary, containing element attributes. *extra* contains + additional attributes, given as keyword arguments. -.. attribute:: Element.text + .. attribute:: tag - The *text* attribute can be used to hold additional data associated with the - element. As the name implies this attribute is usually a string but may be any - application-specific object. If the element is created from an XML file the - attribute will contain any text found between the element tags. + A string identifying what kind of data this element represents (the + element type, in other words). -.. attribute:: Element.tail + .. attribute:: text - The *tail* attribute can be used to hold additional data associated with the - element. This attribute is usually a string but may be any application-specific - object. If the element is created from an XML file the attribute will contain - any text found after the element's end tag and before the next tag. + The *text* attribute can be used to hold additional data associated with + the element. As the name implies this attribute is usually a string but + may be any application-specific object. If the element is created from + an XML file the attribute will contain any text found between the element + tags. -.. attribute:: Element.attrib + .. attribute:: tail - A dictionary containing the element's attributes. Note that while the *attrib* - value is always a real mutable Python dictionary, an ElementTree implementation - may choose to use another internal representation, and create the dictionary - only if someone asks for it. To take advantage of such implementations, use the - dictionary methods below whenever possible. + The *tail* attribute can be used to hold additional data associated with + the element. This attribute is usually a string but may be any + application-specific object. If the element is created from an XML file + the attribute will contain any text found after the element's end tag and + before the next tag. -The following dictionary-like methods work on the element attributes. + .. attribute:: attrib -.. method:: Element.clear() + A dictionary containing the element's attributes. Note that while the + *attrib* value is always a real mutable Python dictionary, an ElementTree + implementation may choose to use another internal representation, and + create the dictionary only if someone asks for it. To take advantage of + such implementations, use the dictionary methods below whenever possible. - Resets an element. This function removes all subelements, clears all - attributes, and sets the text and tail attributes to None. + The following dictionary-like methods work on the element attributes. -.. method:: Element.get(key, default=None) + .. method:: clear() - Gets the element attribute named *key*. + Resets an element. This function removes all subelements, clears all + attributes, and sets the text and tail attributes to None. - Returns the attribute value, or *default* if the attribute was not found. + .. method:: get(key, default=None) -.. method:: Element.items() + Gets the element attribute named *key*. - Returns the element attributes as a sequence of (name, value) pairs. The - attributes are returned in an arbitrary order. + Returns the attribute value, or *default* if the attribute was not found. -.. method:: Element.keys() + .. method:: items() - Returns the elements attribute names as a list. The names are returned in an - arbitrary order. + Returns the element attributes as a sequence of (name, value) pairs. The + attributes are returned in an arbitrary order. -.. method:: Element.set(key, value) + .. method:: keys() - Set the attribute *key* on the element to *value*. + Returns the elements attribute names as a list. The names are returned + in an arbitrary order. -The following methods work on the element's children (subelements). + .. method:: set(key, value) -.. method:: Element.append(subelement) + Set the attribute *key* on the element to *value*. - Adds the element *subelement* to the end of this elements internal list of - subelements. + The following methods work on the element's children (subelements). -.. method:: Element.find(match) + .. method:: append(subelement) - Finds the first subelement matching *match*. *match* may be a tag name or path. - Returns an element instance or ``None``. + Adds the element *subelement* to the end of this elements internal list + of subelements. -.. method:: Element.findall(match) + .. method:: extend(subelements) - Finds all subelements matching *match*. *match* may be a tag name or path. - Returns an iterable yielding all matching elements in document order. + Appends *subelements* from a sequence object with zero or more elements. + Raises :exc:`AssertionError` if a subelement is not a valid object. + .. versionadded:: 2.7 -.. method:: Element.findtext(condition, default=None) - Finds text for the first subelement matching *condition*. *condition* may be a - tag name or path. Returns the text content of the first matching element, or - *default* if no element was found. Note that if the matching element has no - text content an empty string is returned. + .. method:: find(match) + Finds the first subelement matching *match*. *match* may be a tag name + or path. Returns an element instance or ``None``. + + + .. method:: findall(match) + + Finds all matching subelements, by tag name or path. Returns a list + containing all matching elements in document order. + + + .. method:: findtext(match, default=None) + + Finds text for the first subelement matching *match*. *match* may be + a tag name or path. Returns the text content of the first matching + element, or *default* if no element was found. Note that if the matching + element has no text content an empty string is returned. + + + .. method:: getchildren() + + .. deprecated:: 2.7 + Use ``list(elem)`` or iteration. + + + .. method:: getiterator(tag=None) -.. method:: Element.getchildren() + .. deprecated:: 2.7 + Use method :meth:`Element.iter` instead. - Returns all subelements. The elements are returned in document order. + .. method:: insert(index, element) -.. method:: Element.getiterator(tag=None) + Inserts a subelement at the given position in this element. - Creates a tree iterator with the current element as the root. The iterator - iterates over this element and all elements below it, in document (depth first) - order. If *tag* is not ``None`` or ``'*'``, only elements whose tag equals - *tag* are returned from the iterator. + .. method:: iter(tag=None) -.. method:: Element.insert(index, element) + Creates a tree :term:`iterator` with the current element as the root. + The iterator iterates over this element and all elements below it, in + document (depth first) order. If *tag* is not ``None`` or ``'*'``, only + elements whose tag equals *tag* are returned from the iterator. If the + tree structure is modified during iteration, the result is undefined. - Inserts a subelement at the given position in this element. + .. method:: iterfind(match) -.. method:: Element.makeelement(tag, attrib) + Finds all matching subelements, by tag name or path. Returns an iterable + yielding all matching elements in document order. - Creates a new element object of the same type as this element. Do not call this - method, use the SubElement factory function instead. + .. versionadded:: 2.7 -.. method:: Element.remove(subelement) + .. method:: itertext() - Removes *subelement* from the element. Unlike the findXYZ methods this method - compares elements based on the instance identity, not on tag value or contents. + Creates a text iterator. The iterator loops over this element and all + subelements, in document order, and returns all inner text. -Element objects also support the following sequence type methods for working -with subelements: :meth:`__delitem__`, :meth:`__getitem__`, :meth:`__setitem__`, -:meth:`__len__`. + .. versionadded:: 2.7 -Caution: Because Element objects do not define a :meth:`__bool__` method, -elements with no subelements will test as ``False``. :: - element = root.find('foo') + .. method:: makeelement(tag, attrib) - if not element: # careful! - print("element not found, or element has no subelements") + Creates a new element object of the same type as this element. Do not + call this method, use the :func:`SubElement` factory function instead. - if element is None: - print("element not found") + + .. method:: remove(subelement) + + Removes *subelement* from the element. Unlike the find\* methods this + method compares elements based on the instance identity, not on tag value + or contents. + + :class:`Element` objects also support the following sequence type methods + for working with subelements: :meth:`__delitem__`, :meth:`__getitem__`, + :meth:`__setitem__`, :meth:`__len__`. + + Caution: Elements with no subelements will test as ``False``. This behavior + will change in future versions. Use specific ``len(elem)`` or ``elem is + None`` test instead. :: + + element = root.find('foo') + + if not element: # careful! + print("element not found, or element has no subelements") + + if element is None: + print("element not found") .. _elementtree-elementtree-objects: @@ -306,70 +382,88 @@ .. class:: ElementTree(element=None, file=None) - ElementTree wrapper class. This class represents an entire element hierarchy, - and adds some extra support for serialization to and from standard XML. + ElementTree wrapper class. This class represents an entire element + hierarchy, and adds some extra support for serialization to and from + standard XML. - *element* is the root element. The tree is initialized with the contents of the - XML *file* if given. + *element* is the root element. The tree is initialized with the contents + of the XML *file* if given. .. method:: _setroot(element) Replaces the root element for this tree. This discards the current contents of the tree, and replaces it with the given element. Use with - care. *element* is an element instance. + care. *element* is an element instance. - .. method:: find(path) + .. method:: find(match) - Finds the first toplevel element with given tag. Same as - getroot().find(path). *path* is the element to look for. Returns the - first matching element, or ``None`` if no element was found. + Finds the first toplevel element matching *match*. *match* may be a tag + name or path. Same as getroot().find(match). Returns the first matching + element, or ``None`` if no element was found. - .. method:: findall(path) + .. method:: findall(match) - Finds all toplevel elements with the given tag. Same as - getroot().findall(path). *path* is the element to look for. Returns a - list or :term:`iterator` containing all matching elements, in document - order. + Finds all matching subelements, by tag name or path. Same as + getroot().findall(match). *match* may be a tag name or path. Returns a + list containing all matching elements, in document order. - .. method:: findtext(path, default=None) + .. method:: findtext(match, default=None) Finds the element text for the first toplevel element with given tag. - Same as getroot().findtext(path). *path* is the toplevel element to look - for. *default* is the value to return if the element was not - found. Returns the text content of the first matching element, or the - default value no element was found. Note that if the element has is - found, but has no text content, this method returns an empty string. + Same as getroot().findtext(match). *match* may be a tag name or path. + *default* is the value to return if the element was not found. Returns + the text content of the first matching element, or the default value no + element was found. Note that if the element is found, but has no text + content, this method returns an empty string. .. method:: getiterator(tag=None) + .. deprecated:: 2.7 + Use method :meth:`ElementTree.iter` instead. + + + .. method:: getroot() + Returns the root element for this tree. + + + .. method:: iter(tag=None) + Creates and returns a tree iterator for the root element. The iterator - loops over all elements in this tree, in section order. *tag* is the tag + loops over all elements in this tree, in section order. *tag* is the tag to look for (default is to return all elements) - .. method:: getroot() + .. method:: iterfind(match) - Returns the root element for this tree. + Finds all matching subelements, by tag name or path. Same as + getroot().iterfind(match). Returns an iterable yielding all matching + elements in document order. + + .. versionadded:: 2.7 .. method:: parse(source, parser=None) - Loads an external XML section into this element tree. *source* is a file - name or file object. *parser* is an optional parser instance. If not - given, the standard XMLTreeBuilder parser is used. Returns the section + Loads an external XML section into this element tree. *source* is a file + name or file object. *parser* is an optional parser instance. If not + given, the standard XMLParser parser is used. Returns the section root element. - .. method:: write(file, encoding=None) + .. method:: write(file, encoding=None, xml_declaration=None, method=None) - Writes the element tree to a file, as XML. *file* is a file name, or a - file object opened for writing. *encoding* [1]_ is the output encoding - (default is US-ASCII). + Writes the element tree to a file, as XML. *file* is a file name, or a + file object opened for writing. *encoding* [1]_ is the output encoding + (default is None). *xml_declaration* controls if an XML declaration + should be added to the file. Use False for never, True for always, None + for only if not US-ASCII or UTF-8 (default is None). *method* is either + ``"xml"``, ``"html"`` or ``"text"`` (default is ``"xml"``). Returns an + (optionally) encoded string. This is the XML file that is going to be manipulated:: @@ -388,13 +482,13 @@ >>> from xml.etree.ElementTree import ElementTree >>> tree = ElementTree() >>> tree.parse("index.xhtml") - + >>> p = tree.find("body/p") # Finds first occurrence of tag p in body >>> p - - >>> links = p.getiterator("a") # Returns list of all links + + >>> links = list(p.iter("a")) # Returns list of all links >>> links - [, ] + [, ] >>> for i in links: # Iterates through all found links ... i.attrib["target"] = "blank" >>> tree.write("output.xhtml") @@ -407,12 +501,12 @@ .. class:: QName(text_or_uri, tag=None) - QName wrapper. This can be used to wrap a QName attribute value, in order to - get proper namespace handling on output. *text_or_uri* is a string containing - the QName value, in the form {uri}local, or, if the tag argument is given, the - URI part of a QName. If *tag* is given, the first argument is interpreted as an - URI, and this argument is interpreted as a local name. :class:`QName` instances - are opaque. + QName wrapper. This can be used to wrap a QName attribute value, in order + to get proper namespace handling on output. *text_or_uri* is a string + containing the QName value, in the form {uri}local, or, if the tag argument + is given, the URI part of a QName. If *tag* is given, the first argument is + interpreted as an URI, and this argument is interpreted as a local name. + :class:`QName` instances are opaque. .. _elementtree-treebuilder-objects: @@ -423,74 +517,89 @@ .. class:: TreeBuilder(element_factory=None) - Generic element structure builder. This builder converts a sequence of start, - data, and end method calls to a well-formed element structure. You can use this - class to build an element structure using a custom XML parser, or a parser for - some other XML-like format. The *element_factory* is called to create new - Element instances when given. + Generic element structure builder. This builder converts a sequence of + start, data, and end method calls to a well-formed element structure. You + can use this class to build an element structure using a custom XML parser, + or a parser for some other XML-like format. The *element_factory* is called + to create new :class:`Element` instances when given. .. method:: close() - Flushes the parser buffers, and returns the toplevel document - element. Returns an Element instance. + Flushes the builder buffers, and returns the toplevel document + element. Returns an :class:`Element` instance. .. method:: data(data) - Adds text to the current element. *data* is a string. This should be - either an ASCII-only :class:`bytes` object or a :class:`str` object. + Adds text to the current element. *data* is a string. This should be + either a bytestring, or a Unicode string. .. method:: end(tag) - Closes the current element. *tag* is the element name. Returns the closed - element. + Closes the current element. *tag* is the element name. Returns the + closed element. .. method:: start(tag, attrs) - Opens a new element. *tag* is the element name. *attrs* is a dictionary - containing element attributes. Returns the opened element. + Opens a new element. *tag* is the element name. *attrs* is a dictionary + containing element attributes. Returns the opened element. + + In addition, a custom :class:`TreeBuilder` object can provide the + following method: -.. _elementtree-xmltreebuilder-objects: + .. method:: doctype(name, pubid, system) + + Handles a doctype declaration. *name* is the doctype name. *pubid* is + the public identifier. *system* is the system identifier. This method + does not exist on the default :class:`TreeBuilder` class. + + .. versionadded:: 2.7 -XMLTreeBuilder Objects ----------------------- +.. _elementtree-xmlparser-objects: -.. class:: XMLTreeBuilder(html=0, target=None) +XMLParser Objects +----------------- - Element structure builder for XML source data, based on the expat parser. *html* - are predefined HTML entities. This flag is not supported by the current - implementation. *target* is the target object. If omitted, the builder uses an - instance of the standard TreeBuilder class. + +.. class:: XMLParser(html=0, target=None, encoding=None) + + :class:`Element` structure builder for XML source data, based on the expat + parser. *html* are predefined HTML entities. This flag is not supported by + the current implementation. *target* is the target object. If omitted, the + builder uses an instance of the standard TreeBuilder class. *encoding* [1]_ + is optional. If given, the value overrides the encoding specified in the + XML file. .. method:: close() - Finishes feeding data to the parser. Returns an element structure. + Finishes feeding data to the parser. Returns an element structure. .. method:: doctype(name, pubid, system) - Handles a doctype declaration. *name* is the doctype name. *pubid* is the - public identifier. *system* is the system identifier. + .. deprecated:: 2.7 + Define the :meth:`TreeBuilder.doctype` method on a custom TreeBuilder + target. .. method:: feed(data) - Feeds data to the parser. *data* is encoded data. + Feeds data to the parser. *data* is encoded data. -:meth:`XMLTreeBuilder.feed` calls *target*\'s :meth:`start` method +:meth:`XMLParser.feed` calls *target*\'s :meth:`start` method for each opening tag, its :meth:`end` method for each closing tag, -and data is processed by method :meth:`data`. :meth:`XMLTreeBuilder.close` +and data is processed by method :meth:`data`. :meth:`XMLParser.close` calls *target*\'s method :meth:`close`. -:class:`XMLTreeBuilder` can be used not only for building a tree structure. +:class:`XMLParser` can be used not only for building a tree structure. This is an example of counting the maximum depth of an XML file:: - >>> from xml.etree.ElementTree import XMLTreeBuilder + >>> from xml.etree.ElementTree import XMLParser >>> class MaxDepth: # The target object of the parser ... maxDepth = 0 ... depth = 0 @@ -506,7 +615,7 @@ ... return self.maxDepth ... >>> target = MaxDepth() - >>> parser = XMLTreeBuilder(target=target) + >>> parser = XMLParser(target=target) >>> exampleXml = """ ... ... @@ -526,7 +635,6 @@ .. rubric:: Footnotes .. [#] The encoding string included in XML output should conform to the - appropriate standards. For example, "UTF-8" is valid, but "UTF8" is - not. See http://www.w3.org/TR/2006/REC-xml11-20060816/#NT-EncodingDecl + appropriate standards. For example, "UTF-8" is valid, but "UTF8" is + not. See http://www.w3.org/TR/2006/REC-xml11-20060816/#NT-EncodingDecl and http://www.iana.org/assignments/character-sets. - Deleted: python/branches/py3k/Doc/library/xml.etree.rst ============================================================================== --- python/branches/py3k/Doc/library/xml.etree.rst Sun Mar 14 00:24:31 2010 +++ (empty file) @@ -1,23 +0,0 @@ -:mod:`xml.etree` --- The ElementTree API for XML -================================================ - -.. module:: xml.etree - :synopsis: Package containing common ElementTree modules. -.. moduleauthor:: Fredrik Lundh - - -The ElementTree package is a simple, efficient, and quite popular library for -XML manipulation in Python. The :mod:`xml.etree` package contains the most -common components from the ElementTree API library. In the current release, -this package contains the :mod:`ElementTree`, :mod:`ElementPath`, and -:mod:`ElementInclude` modules from the full ElementTree distribution. - -.. XXX To be continued! - - -.. seealso:: - - `ElementTree Overview `_ - The home page for :mod:`ElementTree`. This includes links to additional - documentation, alternative implementations, and other add-ons. - Modified: python/branches/py3k/Lib/test/support.py ============================================================================== --- python/branches/py3k/Lib/test/support.py (original) +++ python/branches/py3k/Lib/test/support.py Sun Mar 14 00:24:31 2010 @@ -402,12 +402,14 @@ rmtree(name) -def findfile(file, here=__file__): +def findfile(file, here=__file__, subdir=None): """Try to find a file on sys.path and the working directory. If it is not found the argument passed to the function is returned (this does not necessarily signal failure; could still be the legitimate path).""" if os.path.isabs(file): return file + if subdir is not None: + file = os.path.join(subdir, file) path = sys.path path = [os.path.dirname(here)] + path for dn in path: Deleted: python/branches/py3k/Lib/test/test.xml ============================================================================== --- python/branches/py3k/Lib/test/test.xml Sun Mar 14 00:24:31 2010 +++ (empty file) @@ -1,115 +0,0 @@ - - -Introduction to XSL -

    Introduction to XSL

    - - - -
    -

    Overview -

    -
      - -
    • 1.Intro
    • - -
    • 2.History
    • - -
    • 3.XSL Basics
    • - -
    • Lunch
    • - -
    • 4.An XML Data Model
    • - -
    • 5.XSL Patterns
    • - -
    • 6.XSL Templates
    • - -
    • 7.XSL Formatting Model -
    • - -
    - - - - - - -
    -

    Intro

    -
      - -
    • Who am I?
    • - -
    • Who are you?
    • - -
    • Why are we here? -
    • - -
    - - - - - - -
    -

    History: XML and SGML

    -
      - -
    • XML is a subset of SGML.
    • - -
    • SGML allows the separation of abstract content from formatting.
    • - -
    • Also one of XML's primary virtues (in the doc publishing domain). -
    • - -
    - - - - - - -
    -

    History: What are stylesheets?

    -
      - -
    • Stylesheets specify the formatting of SGML/XML documents.
    • - -
    • Stylesheets put the "style" back into documents.
    • - -
    • New York Times content+NYT Stylesheet = NYT paper -
    • - -
    - - - - - - -
    -

    History: FOSI

    -
      - -
    • FOSI: "Formatted Output Specification Instance" -
        -
      • MIL-STD-28001 -
      • - -
      • FOSI's are SGML documents -
      • - -
      • A stylesheet for another document -
      • -
    • - -
    • Obsolete but implemented... -
    • - -
    - - - - - Deleted: python/branches/py3k/Lib/test/test.xml.out ============================================================================== --- python/branches/py3k/Lib/test/test.xml.out Sun Mar 14 00:24:31 2010 +++ (empty file) @@ -1,115 +0,0 @@ - - -Introduction to XSL -

    Introduction to XSL

    - - - -
    -

    Overview -

    -
      - -
    • 1.Intro
    • - -
    • 2.History
    • - -
    • 3.XSL Basics
    • - -
    • Lunch
    • - -
    • 4.An XML Data Model
    • - -
    • 5.XSL Patterns
    • - -
    • 6.XSL Templates
    • - -
    • 7.XSL Formatting Model -
    • - -
    - - - - - - -
    -

    Intro

    -
      - -
    • Who am I?
    • - -
    • Who are you?
    • - -
    • Why are we here? -
    • - -
    - - - - - - -
    -

    History: XML and SGML

    -
      - -
    • XML is a subset of SGML.
    • - -
    • SGML allows the separation of abstract content from formatting.
    • - -
    • Also one of XML's primary virtues (in the doc publishing domain). -
    • - -
    - - - - - - -
    -

    History: What are stylesheets?

    -
      - -
    • Stylesheets specify the formatting of SGML/XML documents.
    • - -
    • Stylesheets put the "style" back into documents.
    • - -
    • New York Times content+NYT Stylesheet = NYT paper -
    • - -
    - - - - - - -
    -

    History: FOSI

    -
      - -
    • FOSI: "Formatted Output Specification Instance" -
        -
      • MIL-STD-28001 -
      • - -
      • FOSI's are SGML documents -
      • - -
      • A stylesheet for another document -
      • -
    • - -
    • Obsolete but implemented... -
    • - -
    - - - - - \ No newline at end of file Modified: python/branches/py3k/Lib/test/test_minidom.py ============================================================================== --- python/branches/py3k/Lib/test/test_minidom.py (original) +++ python/branches/py3k/Lib/test/test_minidom.py Sun Mar 14 00:24:31 2010 @@ -1,9 +1,7 @@ # test for xml.dom.minidom -import os -import sys import pickle -from test.support import verbose, run_unittest +from test.support import verbose, run_unittest, findfile import unittest import xml.dom @@ -14,12 +12,8 @@ from xml.dom.minidom import getDOMImplementation -if __name__ == "__main__": - base = sys.argv[0] -else: - base = __file__ -tstfile = os.path.join(os.path.dirname(base), "test.xml") -del base +tstfile = findfile("test.xml", subdir="xmltestdata") + # The tests of DocumentType importing use these helpers to construct # the documents to work with, since not all DOM builders actually Modified: python/branches/py3k/Lib/test/test_sax.py ============================================================================== --- python/branches/py3k/Lib/test/test_sax.py (original) +++ python/branches/py3k/Lib/test/test_sax.py Sun Mar 14 00:24:31 2010 @@ -15,7 +15,9 @@ from io import StringIO from test.support import findfile, run_unittest import unittest -import os + +TEST_XMLFILE = findfile("test.xml", subdir="xmltestdata") +TEST_XMLFILE_OUT = findfile("test.xml.out", subdir="xmltestdata") ns_uri = "http://www.python.org/xml-ns/saxtest/" @@ -311,7 +313,7 @@ # # =========================================================================== -xml_test_out = open(findfile("test.xml.out")).read() +xml_test_out = open(TEST_XMLFILE_OUT).read() class ExpatReaderTest(XmlTestBase): @@ -323,7 +325,7 @@ xmlgen = XMLGenerator(result) parser.setContentHandler(xmlgen) - parser.parse(open(findfile("test.xml"))) + parser.parse(open(TEST_XMLFILE)) self.assertEquals(result.getvalue(), xml_test_out) @@ -452,7 +454,7 @@ xmlgen = XMLGenerator(result) parser.setContentHandler(xmlgen) - parser.parse(findfile("test.xml")) + parser.parse(TEST_XMLFILE) self.assertEquals(result.getvalue(), xml_test_out) @@ -462,7 +464,7 @@ xmlgen = XMLGenerator(result) parser.setContentHandler(xmlgen) - parser.parse(InputSource(findfile("test.xml"))) + parser.parse(InputSource(TEST_XMLFILE)) self.assertEquals(result.getvalue(), xml_test_out) @@ -473,7 +475,7 @@ parser.setContentHandler(xmlgen) inpsrc = InputSource() - inpsrc.setByteStream(open(findfile("test.xml"))) + inpsrc.setByteStream(open(TEST_XMLFILE)) parser.parse(inpsrc) self.assertEquals(result.getvalue(), xml_test_out) @@ -534,9 +536,9 @@ xmlgen = XMLGenerator(result) parser = create_parser() parser.setContentHandler(xmlgen) - parser.parse(findfile("test.xml")) + parser.parse(TEST_XMLFILE) - self.assertEquals(parser.getSystemId(), findfile("test.xml")) + self.assertEquals(parser.getSystemId(), TEST_XMLFILE) self.assertEquals(parser.getPublicId(), None) Modified: python/branches/py3k/Lib/test/test_xml_etree.py ============================================================================== --- python/branches/py3k/Lib/test/test_xml_etree.py (original) +++ python/branches/py3k/Lib/test/test_xml_etree.py Sun Mar 14 00:24:31 2010 @@ -1,22 +1,46 @@ # xml.etree test. This file contains enough tests to make sure that -# all included components work as they should. For a more extensive -# test suite, see the selftest script in the ElementTree distribution. +# all included components work as they should. +# Large parts are extracted from the upstream test suite. + +# IMPORTANT: the same doctests are run from "test_xml_etree_c" in +# order to ensure consistency between the C implementation and the +# Python implementation. +# +# For this purpose, the module-level "ET" symbol is temporarily +# monkey-patched when running the "test_xml_etree_c" test suite. +# Don't re-import "xml.etree.ElementTree" module in the docstring, +# except if the test is specific to the Python implementation. -import doctest import sys from test import support +from test.support import findfile + +from xml.etree import ElementTree as ET + +SIMPLE_XMLFILE = findfile("simple.xml", subdir="xmltestdata") +SIMPLE_NS_XMLFILE = findfile("simple-ns.xml", subdir="xmltestdata") -SAMPLE_XML = """ +SAMPLE_XML = """\ - text - + text +
    - subtext + subtext
    """ +SAMPLE_SECTION = """\ +
    + subtext + + + + +
    +""" + SAMPLE_XML_NS = """ text @@ -27,6 +51,7 @@ """ + def sanity(): """ Import sanity. @@ -40,35 +65,110 @@ if not hasattr(method, '__call__'): print(method, "not callable") -def serialize(ET, elem): +def serialize(elem, to_string=True, **options): import io + if options.get("encoding"): + file = io.BytesIO() + else: + file = io.StringIO() tree = ET.ElementTree(elem) - file = io.StringIO() - tree.write(file) - return file.getvalue() + tree.write(file, **options) + if to_string: + return file.getvalue() + else: + file.seek(0) + return file def summarize(elem): + if elem.tag == ET.Comment: + return "" return elem.tag def summarize_list(seq): - return list(map(summarize, seq)) + return [summarize(elem) for elem in seq] + +def normalize_crlf(tree): + for elem in tree.iter(): + if elem.text: + elem.text = elem.text.replace("\r\n", "\n") + if elem.tail: + elem.tail = elem.tail.replace("\r\n", "\n") + +def normalize_exception(func, *args, **kwargs): + # Ignore the exception __module__ + try: + func(*args, **kwargs) + except Exception as err: + print("Traceback (most recent call last):") + print("{}: {}".format(err.__class__.__name__, err)) + +def check_string(string): + len(string) + for char in string: + if len(char) != 1: + print("expected one-character string, got %r" % char) + new_string = string + "" + new_string = string + " " + string[:0] + +def check_mapping(mapping): + len(mapping) + keys = mapping.keys() + items = mapping.items() + for key in keys: + item = mapping[key] + mapping["key"] = "value" + if mapping["key"] != "value": + print("expected value string, got %r" % mapping["key"]) + +def check_element(element): + if not ET.iselement(element): + print("not an element") + if not hasattr(element, "tag"): + print("no tag member") + if not hasattr(element, "attrib"): + print("no attrib member") + if not hasattr(element, "text"): + print("no text member") + if not hasattr(element, "tail"): + print("no tail member") + + check_string(element.tag) + check_mapping(element.attrib) + if element.text is not None: + check_string(element.text) + if element.tail is not None: + check_string(element.tail) + for elem in element: + check_element(elem) + +# -------------------------------------------------------------------- +# element tree tests def interface(): """ Test element tree interface. - >>> from xml.etree import ElementTree as ET + >>> element = ET.Element("tag") + >>> check_element(element) + >>> tree = ET.ElementTree(element) + >>> check_element(tree.getroot()) - >>> element = ET.Element("tag", key="value") + >>> element = ET.Element("t\\xe4g", key="value") >>> tree = ET.ElementTree(element) + >>> repr(element) # doctest: +ELLIPSIS + "" + >>> element = ET.Element("tag", key="value") Make sure all standard element methods exist. >>> check_method(element.append) + >>> check_method(element.extend) >>> check_method(element.insert) >>> check_method(element.remove) >>> check_method(element.getchildren) >>> check_method(element.find) + >>> check_method(element.iterfind) >>> check_method(element.findall) >>> check_method(element.findtext) >>> check_method(element.clear) @@ -76,38 +176,134 @@ >>> check_method(element.set) >>> check_method(element.keys) >>> check_method(element.items) + >>> check_method(element.iter) + >>> check_method(element.itertext) >>> check_method(element.getiterator) + These methods return an iterable. See bug 6472. + + >>> check_method(element.iter("tag").__next__) + >>> check_method(element.iterfind("tag").__next__) + >>> check_method(element.iterfind("*").__next__) + >>> check_method(tree.iter("tag").__next__) + >>> check_method(tree.iterfind("tag").__next__) + >>> check_method(tree.iterfind("*").__next__) + + These aliases are provided: + + >>> assert ET.XML == ET.fromstring + >>> assert ET.PI == ET.ProcessingInstruction + >>> assert ET.XMLParser == ET.XMLTreeBuilder + """ + +def simpleops(): + """ Basic method sanity checks. - >>> serialize(ET, element) # 1 + >>> elem = ET.XML("") + >>> serialize(elem) + '' + >>> e = ET.Element("tag2") + >>> elem.append(e) + >>> serialize(elem) + '' + >>> elem.remove(e) + >>> serialize(elem) + '' + >>> elem.insert(0, e) + >>> serialize(elem) + '' + >>> elem.remove(e) + >>> elem.extend([e]) + >>> serialize(elem) + '' + >>> elem.remove(e) + + >>> element = ET.Element("tag", key="value") + >>> serialize(element) # 1 '' >>> subelement = ET.Element("subtag") >>> element.append(subelement) - >>> serialize(ET, element) # 2 + >>> serialize(element) # 2 '' >>> element.insert(0, subelement) - >>> serialize(ET, element) # 3 + >>> serialize(element) # 3 '' >>> element.remove(subelement) - >>> serialize(ET, element) # 4 + >>> serialize(element) # 4 '' >>> element.remove(subelement) - >>> serialize(ET, element) # 5 + >>> serialize(element) # 5 '' >>> element.remove(subelement) Traceback (most recent call last): ValueError: list.remove(x): x not in list - >>> serialize(ET, element) # 6 + >>> serialize(element) # 6 '' + >>> element[0:0] = [subelement, subelement, subelement] + >>> serialize(element[1]) + '' + >>> element[1:9] == [element[1], element[2]] + True + >>> element[:9:2] == [element[0], element[2]] + True + >>> del element[1:2] + >>> serialize(element) + '' + """ + +def cdata(): + """ + Test CDATA handling (etc). + + >>> serialize(ET.XML("hello")) + 'hello' + >>> serialize(ET.XML("hello")) + 'hello' + >>> serialize(ET.XML("")) + 'hello' + """ + +# Only with Python implementation +def simplefind(): + """ + Test find methods using the elementpath fallback. + + >>> from xml.etree import ElementTree + + >>> CurrentElementPath = ElementTree.ElementPath + >>> ElementTree.ElementPath = ElementTree._SimpleElementPath() + >>> elem = ElementTree.XML(SAMPLE_XML) + >>> elem.find("tag").tag + 'tag' + >>> ElementTree.ElementTree(elem).find("tag").tag + 'tag' + >>> elem.findtext("tag") + 'text' + >>> elem.findtext("tog") + >>> elem.findtext("tog", "default") + 'default' + >>> ElementTree.ElementTree(elem).findtext("tag") + 'text' + >>> summarize_list(elem.findall("tag")) + ['tag', 'tag'] + >>> summarize_list(elem.findall(".//tag")) + ['tag', 'tag', 'tag'] + + Path syntax doesn't work in this case. + + >>> elem.find("section/tag") + >>> elem.findtext("section/tag") + >>> summarize_list(elem.findall("section/tag")) + [] + + >>> ElementTree.ElementPath = CurrentElementPath """ def find(): """ Test find methods (including xpath syntax). - >>> from xml.etree import ElementTree as ET - >>> elem = ET.XML(SAMPLE_XML) >>> elem.find("tag").tag 'tag' @@ -115,39 +311,67 @@ 'tag' >>> elem.find("section/tag").tag 'tag' + >>> elem.find("./tag").tag + 'tag' + >>> ET.ElementTree(elem).find("./tag").tag + 'tag' + >>> ET.ElementTree(elem).find("/tag").tag + 'tag' + >>> elem[2] = ET.XML(SAMPLE_SECTION) + >>> elem.find("section/nexttag").tag + 'nexttag' >>> ET.ElementTree(elem).find("section/tag").tag 'tag' + >>> ET.ElementTree(elem).find("tog") + >>> ET.ElementTree(elem).find("tog/foo") >>> elem.findtext("tag") 'text' + >>> elem.findtext("section/nexttag") + '' + >>> elem.findtext("section/nexttag", "default") + '' >>> elem.findtext("tog") >>> elem.findtext("tog", "default") 'default' >>> ET.ElementTree(elem).findtext("tag") 'text' + >>> ET.ElementTree(elem).findtext("tog/foo") + >>> ET.ElementTree(elem).findtext("tog/foo", "default") + 'default' + >>> ET.ElementTree(elem).findtext("./tag") + 'text' + >>> ET.ElementTree(elem).findtext("/tag") + 'text' >>> elem.findtext("section/tag") 'subtext' >>> ET.ElementTree(elem).findtext("section/tag") 'subtext' + >>> summarize_list(elem.findall(".")) + ['body'] >>> summarize_list(elem.findall("tag")) ['tag', 'tag'] + >>> summarize_list(elem.findall("tog")) + [] + >>> summarize_list(elem.findall("tog/foo")) + [] >>> summarize_list(elem.findall("*")) ['tag', 'tag', 'section'] >>> summarize_list(elem.findall(".//tag")) - ['tag', 'tag', 'tag'] + ['tag', 'tag', 'tag', 'tag'] >>> summarize_list(elem.findall("section/tag")) ['tag'] >>> summarize_list(elem.findall("section//tag")) - ['tag'] + ['tag', 'tag'] >>> summarize_list(elem.findall("section/*")) - ['tag'] + ['tag', 'nexttag', 'nextsection'] >>> summarize_list(elem.findall("section//*")) - ['tag'] + ['tag', 'nexttag', 'nextsection', 'tag'] >>> summarize_list(elem.findall("section/.//*")) - ['tag'] + ['tag', 'nexttag', 'nextsection', 'tag'] >>> summarize_list(elem.findall("*/*")) - ['tag'] + ['tag', 'nexttag', 'nextsection'] >>> summarize_list(elem.findall("*//*")) - ['tag'] + ['tag', 'nexttag', 'nextsection', 'tag'] >>> summarize_list(elem.findall("*/tag")) ['tag'] >>> summarize_list(elem.findall("*/./tag")) @@ -155,13 +379,40 @@ >>> summarize_list(elem.findall("./tag")) ['tag', 'tag'] >>> summarize_list(elem.findall(".//tag")) - ['tag', 'tag', 'tag'] + ['tag', 'tag', 'tag', 'tag'] >>> summarize_list(elem.findall("././tag")) ['tag', 'tag'] - >>> summarize_list(ET.ElementTree(elem).findall("/tag")) + >>> summarize_list(elem.findall(".//tag[@class]")) + ['tag', 'tag', 'tag'] + >>> summarize_list(elem.findall(".//tag[@class='a']")) + ['tag'] + >>> summarize_list(elem.findall(".//tag[@class='b']")) + ['tag', 'tag'] + >>> summarize_list(elem.findall(".//tag[@id]")) + ['tag'] + >>> summarize_list(elem.findall(".//section[tag]")) + ['section'] + >>> summarize_list(elem.findall(".//section[element]")) + [] + >>> summarize_list(elem.findall("../tag")) + [] + >>> summarize_list(elem.findall("section/../tag")) ['tag', 'tag'] >>> summarize_list(ET.ElementTree(elem).findall("./tag")) ['tag', 'tag'] + + Following example is invalid in 1.2. + A leading '*' is assumed in 1.3. + + >>> elem.findall("section//") == elem.findall("section//*") + True + + ET's Path module handles this case incorrectly; this gives + a warning in 1.3, and the behaviour will be modified in 1.4. + + >>> summarize_list(ET.ElementTree(elem).findall("/tag")) + ['tag', 'tag'] + >>> elem = ET.XML(SAMPLE_XML_NS) >>> summarize_list(elem.findall("tag")) [] @@ -171,21 +422,227 @@ ['{http://effbot.org/ns}tag', '{http://effbot.org/ns}tag', '{http://effbot.org/ns}tag'] """ -def parseliteral(): - r""" +def file_init(): + """ + >>> import io - >>> from xml.etree import ElementTree as ET + >>> stringfile = io.BytesIO(SAMPLE_XML.encode("utf-8")) + >>> tree = ET.ElementTree(file=stringfile) + >>> tree.find("tag").tag + 'tag' + >>> tree.find("section/tag").tag + 'tag' + + >>> tree = ET.ElementTree(file=SIMPLE_XMLFILE) + >>> tree.find("element").tag + 'element' + >>> tree.find("element/../empty-element").tag + 'empty-element' + """ + +def bad_find(): + """ + Check bad or unsupported path expressions. + + >>> elem = ET.XML(SAMPLE_XML) + >>> elem.findall("/tag") + Traceback (most recent call last): + SyntaxError: cannot use absolute path on element + """ + +def path_cache(): + """ + Check that the path cache behaves sanely. + + >>> elem = ET.XML(SAMPLE_XML) + >>> for i in range(10): ET.ElementTree(elem).find('./'+str(i)) + >>> cache_len_10 = len(ET.ElementPath._cache) + >>> for i in range(10): ET.ElementTree(elem).find('./'+str(i)) + >>> len(ET.ElementPath._cache) == cache_len_10 + True + >>> for i in range(20): ET.ElementTree(elem).find('./'+str(i)) + >>> len(ET.ElementPath._cache) > cache_len_10 + True + >>> for i in range(600): ET.ElementTree(elem).find('./'+str(i)) + >>> len(ET.ElementPath._cache) < 500 + True + """ + +def copy(): + """ + Test copy handling (etc). + + >>> import copy + >>> e1 = ET.XML("hello") + >>> e2 = copy.copy(e1) + >>> e3 = copy.deepcopy(e1) + >>> e1.find("foo").tag = "bar" + >>> serialize(e1) + 'hello' + >>> serialize(e2) + 'hello' + >>> serialize(e3) + 'hello' + + """ + +def attrib(): + """ + Test attribute handling. + + >>> elem = ET.Element("tag") + >>> elem.get("key") # 1.1 + >>> elem.get("key", "default") # 1.2 + 'default' + >>> elem.set("key", "value") + >>> elem.get("key") # 1.3 + 'value' + + >>> elem = ET.Element("tag", key="value") + >>> elem.get("key") # 2.1 + 'value' + >>> elem.attrib # 2.2 + {'key': 'value'} + + >>> attrib = {"key": "value"} + >>> elem = ET.Element("tag", attrib) + >>> attrib.clear() # check for aliasing issues + >>> elem.get("key") # 3.1 + 'value' + >>> elem.attrib # 3.2 + {'key': 'value'} + + >>> attrib = {"key": "value"} + >>> elem = ET.Element("tag", **attrib) + >>> attrib.clear() # check for aliasing issues + >>> elem.get("key") # 4.1 + 'value' + >>> elem.attrib # 4.2 + {'key': 'value'} + + >>> elem = ET.Element("tag", {"key": "other"}, key="value") + >>> elem.get("key") # 5.1 + 'value' + >>> elem.attrib # 5.2 + {'key': 'value'} + + >>> elem = ET.Element('test') + >>> elem.text = "aa" + >>> elem.set('testa', 'testval') + >>> elem.set('testb', 'test2') + >>> ET.tostring(elem) + 'aa' + >>> sorted(elem.keys()) + ['testa', 'testb'] + >>> sorted(elem.items()) + [('testa', 'testval'), ('testb', 'test2')] + >>> elem.attrib['testb'] + 'test2' + >>> elem.attrib['testb'] = 'test1' + >>> elem.attrib['testc'] = 'test2' + >>> ET.tostring(elem) + 'aa' + """ + +def makeelement(): + """ + Test makeelement handling. + + >>> elem = ET.Element("tag") + >>> attrib = {"key": "value"} + >>> subelem = elem.makeelement("subtag", attrib) + >>> if subelem.attrib is attrib: + ... print("attrib aliasing") + >>> elem.append(subelem) + >>> serialize(elem) + '' + + >>> elem.clear() + >>> serialize(elem) + '' + >>> elem.append(subelem) + >>> serialize(elem) + '' + >>> elem.extend([subelem, subelem]) + >>> serialize(elem) + '' + >>> elem[:] = [subelem] + >>> serialize(elem) + '' + >>> elem[:] = tuple([subelem]) + >>> serialize(elem) + '' + + """ +def parsefile(): + """ + Test parsing from file. + + >>> tree = ET.parse(SIMPLE_XMLFILE) + >>> normalize_crlf(tree) + >>> tree.write(sys.stdout) + + text + texttail + + + >>> tree = ET.parse(SIMPLE_NS_XMLFILE) + >>> normalize_crlf(tree) + >>> tree.write(sys.stdout) + + text + texttail + + + + >>> parser = ET.XMLParser() + >>> parser.version # XXX: Upgrade to 2.0.1? + 'Expat 2.0.0' + >>> parser.feed(open(SIMPLE_XMLFILE).read()) + >>> print(serialize(parser.close())) + + text + texttail + + + + >>> parser = ET.XMLTreeBuilder() # 1.2 compatibility + >>> parser.feed(open(SIMPLE_XMLFILE).read()) + >>> print(serialize(parser.close())) + + text + texttail + + + + >>> target = ET.TreeBuilder() + >>> parser = ET.XMLParser(target=target) + >>> parser.feed(open(SIMPLE_XMLFILE).read()) + >>> print(serialize(parser.close())) + + text + texttail + + + """ + +def parseliteral(): + """ >>> element = ET.XML("text") >>> ET.ElementTree(element).write(sys.stdout) text >>> element = ET.fromstring("text") >>> ET.ElementTree(element).write(sys.stdout) text + >>> sequence = ["", "text"] + >>> element = ET.fromstringlist(sequence) >>> print(ET.tostring(element)) text - >>> print(repr(ET.tostring(element, "ascii"))) - b"\ntext" + >>> print("".join(ET.tostringlist(element))) + text + >>> ET.tostring(element, "ascii") + b"\\ntext" >>> _, ids = ET.XMLID("text") >>> len(ids) 0 @@ -196,25 +653,578 @@ 'body' """ +def iterparse(): + """ + Test iterparse interface. + + >>> iterparse = ET.iterparse + + >>> context = iterparse(SIMPLE_XMLFILE) + >>> action, elem = next(context) + >>> print(action, elem.tag) + end element + >>> for action, elem in context: + ... print(action, elem.tag) + end element + end empty-element + end root + >>> context.root.tag + 'root' + + >>> context = iterparse(SIMPLE_NS_XMLFILE) + >>> for action, elem in context: + ... print(action, elem.tag) + end {namespace}element + end {namespace}element + end {namespace}empty-element + end {namespace}root + + >>> events = () + >>> context = iterparse(SIMPLE_XMLFILE, events) + >>> for action, elem in context: + ... print(action, elem.tag) + + >>> events = () + >>> context = iterparse(SIMPLE_XMLFILE, events=events) + >>> for action, elem in context: + ... print(action, elem.tag) + + >>> events = ("start", "end") + >>> context = iterparse(SIMPLE_XMLFILE, events) + >>> for action, elem in context: + ... print(action, elem.tag) + start root + start element + end element + start element + end element + start empty-element + end empty-element + end root + + >>> events = ("start", "end", "start-ns", "end-ns") + >>> context = iterparse(SIMPLE_NS_XMLFILE, events) + >>> for action, elem in context: + ... if action in ("start", "end"): + ... print(action, elem.tag) + ... else: + ... print(action, elem) + start-ns ('', 'namespace') + start {namespace}root + start {namespace}element + end {namespace}element + start {namespace}element + end {namespace}element + start {namespace}empty-element + end {namespace}empty-element + end {namespace}root + end-ns None + + >>> events = ("start", "end", "bogus") + >>> context = iterparse(SIMPLE_XMLFILE, events) + Traceback (most recent call last): + ValueError: unknown event 'bogus' + + >>> import io + + >>> source = io.BytesIO( + ... b"\\n" + ... b"text\\n") + >>> events = ("start-ns",) + >>> context = iterparse(source, events) + >>> for action, elem in context: + ... print(action, elem) + start-ns ('', 'http://\\xe9ffbot.org/ns') + start-ns ('cl\\xe9', 'http://effbot.org/ns') + + >>> source = io.StringIO("junk") + >>> try: + ... for action, elem in iterparse(source): + ... print(action, elem.tag) + ... except ET.ParseError as v: + ... print(v) + junk after document element: line 1, column 12 + """ + +def writefile(): + """ + >>> elem = ET.Element("tag") + >>> elem.text = "text" + >>> serialize(elem) + 'text' + >>> ET.SubElement(elem, "subtag").text = "subtext" + >>> serialize(elem) + 'textsubtext' + + Test tag suppression + >>> elem.tag = None + >>> serialize(elem) + 'textsubtext' + >>> elem.insert(0, ET.Comment("comment")) + >>> serialize(elem) # assumes 1.3 + 'textsubtext' + >>> elem[0] = ET.PI("key", "value") + >>> serialize(elem) + 'textsubtext' + """ -def check_encoding(ET, encoding): +def custom_builder(): """ - >>> from xml.etree import ElementTree as ET + Test parser w. custom builder. + + >>> class Builder: + ... def start(self, tag, attrib): + ... print("start", tag) + ... def end(self, tag): + ... print("end", tag) + ... def data(self, text): + ... pass + >>> builder = Builder() + >>> parser = ET.XMLParser(target=builder) + >>> parser.feed(open(SIMPLE_XMLFILE, "r").read()) + start root + start element + end element + start element + end element + start empty-element + end empty-element + end root + + >>> class Builder: + ... def start(self, tag, attrib): + ... print("start", tag) + ... def end(self, tag): + ... print("end", tag) + ... def data(self, text): + ... pass + ... def pi(self, target, data): + ... print("pi", target, repr(data)) + ... def comment(self, data): + ... print("comment", repr(data)) + >>> builder = Builder() + >>> parser = ET.XMLParser(target=builder) + >>> parser.feed(open(SIMPLE_NS_XMLFILE, "r").read()) + pi pi 'data' + comment ' comment ' + start {namespace}root + start {namespace}element + end {namespace}element + start {namespace}element + end {namespace}element + start {namespace}empty-element + end {namespace}empty-element + end {namespace}root - >>> check_encoding(ET, "ascii") - >>> check_encoding(ET, "us-ascii") - >>> check_encoding(ET, "iso-8859-1") - >>> check_encoding(ET, "iso-8859-15") - >>> check_encoding(ET, "cp437") - >>> check_encoding(ET, "mac-roman") + """ + +def getchildren(): + """ + Test Element.getchildren() + + >>> tree = ET.parse(open(SIMPLE_XMLFILE, "rb")) + >>> for elem in tree.getroot().iter(): + ... summarize_list(elem.getchildren()) + ['element', 'element', 'empty-element'] + [] + [] + [] + >>> for elem in tree.getiterator(): + ... summarize_list(elem.getchildren()) + ['element', 'element', 'empty-element'] + [] + [] + [] + + >>> elem = ET.XML(SAMPLE_XML) + >>> len(elem.getchildren()) + 3 + >>> len(elem[2].getchildren()) + 1 + >>> elem[:] == elem.getchildren() + True + >>> child1 = elem[0] + >>> child2 = elem[2] + >>> del elem[1:2] + >>> len(elem.getchildren()) + 2 + >>> child1 == elem[0] + True + >>> child2 == elem[1] + True + >>> elem[0:2] = [child2, child1] + >>> child2 == elem[0] + True + >>> child1 == elem[1] + True + >>> child1 == elem[0] + False + >>> elem.clear() + >>> elem.getchildren() + [] + """ + +def writestring(): + """ + >>> elem = ET.XML("text") + >>> ET.tostring(elem) + 'text' + >>> elem = ET.fromstring("text") + >>> ET.tostring(elem) + 'text' + """ + +def check_encoding(encoding): + """ + >>> check_encoding("ascii") + >>> check_encoding("us-ascii") + >>> check_encoding("iso-8859-1") + >>> check_encoding("iso-8859-15") + >>> check_encoding("cp437") + >>> check_encoding("mac-roman") """ ET.XML("" % encoding) -def processinginstruction(): +def encoding(): r""" - Test ProcessingInstruction directly + Test encoding issues. - >>> from xml.etree import ElementTree as ET + >>> elem = ET.Element("tag") + >>> elem.text = "abc" + >>> serialize(elem) + 'abc' + >>> serialize(elem, encoding="utf-8") + b'abc' + >>> serialize(elem, encoding="us-ascii") + b'abc' + >>> serialize(elem, encoding="iso-8859-1") + b"\nabc" + + >>> elem.text = "<&\"\'>" + >>> serialize(elem) + '<&"\'>' + >>> serialize(elem, encoding="utf-8") + b'<&"\'>' + >>> serialize(elem, encoding="us-ascii") # cdata characters + b'<&"\'>' + >>> serialize(elem, encoding="iso-8859-1") + b'\n<&"\'>' + + >>> elem.attrib["key"] = "<&\"\'>" + >>> elem.text = None + >>> serialize(elem) + '' + >>> serialize(elem, encoding="utf-8") + b'' + >>> serialize(elem, encoding="us-ascii") + b'' + >>> serialize(elem, encoding="iso-8859-1") + b'\n' + + >>> elem.text = '\xe5\xf6\xf6<>' + >>> elem.attrib.clear() + >>> serialize(elem) + '\xe5\xf6\xf6<>' + >>> serialize(elem, encoding="utf-8") + b'\xc3\xa5\xc3\xb6\xc3\xb6<>' + >>> serialize(elem, encoding="us-ascii") + b'åöö<>' + >>> serialize(elem, encoding="iso-8859-1") + b"\n\xe5\xf6\xf6<>" + + >>> elem.attrib["key"] = '\xe5\xf6\xf6<>' + >>> elem.text = None + >>> serialize(elem) + '' + >>> serialize(elem, encoding="utf-8") + b'' + >>> serialize(elem, encoding="us-ascii") + b'' + >>> serialize(elem, encoding="iso-8859-1") + b'\n' + """ + +def methods(): + r""" + Test serialization methods. + + >>> e = ET.XML("") + >>> e.tail = "\n" + >>> serialize(e) + '\n' + >>> serialize(e, method=None) + '\n' + >>> serialize(e, method="xml") + '\n' + >>> serialize(e, method="html") + '\n' + >>> serialize(e, method="text") + '1 < 2\n' + """ + +def iterators(): + """ + Test iterators. + + >>> e = ET.XML("this is a paragraph...") + >>> summarize_list(e.iter()) + ['html', 'body', 'i'] + >>> summarize_list(e.find("body").iter()) + ['body', 'i'] + >>> summarize(next(e.iter())) + 'html' + >>> "".join(e.itertext()) + 'this is a paragraph...' + >>> "".join(e.find("body").itertext()) + 'this is a paragraph.' + >>> next(e.itertext()) + 'this is a ' + + Method iterparse should return an iterator. See bug 6472. + + >>> sourcefile = serialize(e, to_string=False) + >>> next(ET.iterparse(sourcefile)) # doctest: +ELLIPSIS + ('end', ) + + >>> tree = ET.ElementTree(None) + >>> tree.iter() + Traceback (most recent call last): + AttributeError: 'NoneType' object has no attribute 'iter' + """ + +ENTITY_XML = """\ + +%user-entities; +]> +&entity; +""" + +def entity(): + """ + Test entity handling. + + 1) good entities + + >>> e = ET.XML("test") + >>> serialize(e, encoding="us-ascii") + b'test' + >>> serialize(e) + 'test' + + 2) bad entities + + >>> normalize_exception(ET.XML, "&entity;") + Traceback (most recent call last): + ParseError: undefined entity: line 1, column 10 + + >>> normalize_exception(ET.XML, ENTITY_XML) + Traceback (most recent call last): + ParseError: undefined entity &entity;: line 5, column 10 + + 3) custom entity + + >>> parser = ET.XMLParser() + >>> parser.entity["entity"] = "text" + >>> parser.feed(ENTITY_XML) + >>> root = parser.close() + >>> serialize(root) + 'text' + """ + +def error(xml): + """ + + Test error handling. + + >>> issubclass(ET.ParseError, SyntaxError) + True + >>> error("foo").position + (1, 0) + >>> error("&foo;").position + (1, 5) + >>> error("foobar<").position + (1, 6) + + """ + try: + ET.XML(xml) + except ET.ParseError: + return sys.exc_info()[1] + +def namespace(): + """ + Test namespace issues. + + 1) xml namespace + + >>> elem = ET.XML("") + >>> serialize(elem) # 1.1 + '' + + 2) other "well-known" namespaces + + >>> elem = ET.XML("") + >>> serialize(elem) # 2.1 + '' + + >>> elem = ET.XML("") + >>> serialize(elem) # 2.2 + '' + + >>> elem = ET.XML("") + >>> serialize(elem) # 2.3 + '' + + 3) unknown namespaces + >>> elem = ET.XML(SAMPLE_XML_NS) + >>> print(serialize(elem)) + + text + + + subtext + + + """ + +def qname(): + """ + Test QName handling. + + 1) decorated tags + + >>> elem = ET.Element("{uri}tag") + >>> serialize(elem) # 1.1 + '' + >>> elem = ET.Element(ET.QName("{uri}tag")) + >>> serialize(elem) # 1.2 + '' + >>> elem = ET.Element(ET.QName("uri", "tag")) + >>> serialize(elem) # 1.3 + '' + + 2) decorated attributes + + >>> elem.clear() + >>> elem.attrib["{uri}key"] = "value" + >>> serialize(elem) # 2.1 + '' + + >>> elem.clear() + >>> elem.attrib[ET.QName("{uri}key")] = "value" + >>> serialize(elem) # 2.2 + '' + + 3) decorated values are not converted by default, but the + QName wrapper can be used for values + + >>> elem.clear() + >>> elem.attrib["{uri}key"] = "{uri}value" + >>> serialize(elem) # 3.1 + '' + + >>> elem.clear() + >>> elem.attrib["{uri}key"] = ET.QName("{uri}value") + >>> serialize(elem) # 3.2 + '' + + >>> elem.clear() + >>> subelem = ET.Element("tag") + >>> subelem.attrib["{uri1}key"] = ET.QName("{uri2}value") + >>> elem.append(subelem) + >>> elem.append(subelem) + >>> serialize(elem) # 3.3 + '' + + 4) Direct QName tests + + >>> str(ET.QName('ns', 'tag')) + '{ns}tag' + >>> str(ET.QName('{ns}tag')) + '{ns}tag' + >>> q1 = ET.QName('ns', 'tag') + >>> q2 = ET.QName('ns', 'tag') + >>> q1 == q2 + True + >>> q2 = ET.QName('ns', 'other-tag') + >>> q1 == q2 + False + >>> q1 == 'ns:tag' + False + >>> q1 == '{ns}tag' + True + """ + +def doctype_public(): + """ + Test PUBLIC doctype. + + >>> elem = ET.XML('' + ... 'text') + + """ + +def xpath_tokenizer(p): + """ + Test the XPath tokenizer. + + >>> # tests from the xml specification + >>> xpath_tokenizer("*") + ['*'] + >>> xpath_tokenizer("text()") + ['text', '()'] + >>> xpath_tokenizer("@name") + ['@', 'name'] + >>> xpath_tokenizer("@*") + ['@', '*'] + >>> xpath_tokenizer("para[1]") + ['para', '[', '1', ']'] + >>> xpath_tokenizer("para[last()]") + ['para', '[', 'last', '()', ']'] + >>> xpath_tokenizer("*/para") + ['*', '/', 'para'] + >>> xpath_tokenizer("/doc/chapter[5]/section[2]") + ['/', 'doc', '/', 'chapter', '[', '5', ']', '/', 'section', '[', '2', ']'] + >>> xpath_tokenizer("chapter//para") + ['chapter', '//', 'para'] + >>> xpath_tokenizer("//para") + ['//', 'para'] + >>> xpath_tokenizer("//olist/item") + ['//', 'olist', '/', 'item'] + >>> xpath_tokenizer(".") + ['.'] + >>> xpath_tokenizer(".//para") + ['.', '//', 'para'] + >>> xpath_tokenizer("..") + ['..'] + >>> xpath_tokenizer("../@lang") + ['..', '/', '@', 'lang'] + >>> xpath_tokenizer("chapter[title]") + ['chapter', '[', 'title', ']'] + >>> xpath_tokenizer("employee[@secretary and @assistant]") + ['employee', '[', '@', 'secretary', '', 'and', '', '@', 'assistant', ']'] + + >>> # additional tests + >>> xpath_tokenizer("{http://spam}egg") + ['{http://spam}egg'] + >>> xpath_tokenizer("./spam.egg") + ['.', '/', 'spam.egg'] + >>> xpath_tokenizer(".//{http://spam}egg") + ['.', '//', '{http://spam}egg'] + """ + from xml.etree import ElementPath + out = [] + for op, tag in ElementPath.xpath_tokenizer(p): + out.append(op or tag) + return out + +def processinginstruction(): + """ + Test ProcessingInstruction directly >>> ET.tostring(ET.ProcessingInstruction('test', 'instruction')) '' @@ -226,20 +1236,7 @@ >>> ET.tostring(ET.PI('test', '')) '?>' >>> ET.tostring(ET.PI('test', '\xe3'), 'latin1') - b"\n\xe3?>" - - """ - -def check_issue6233(): - """ - >>> from xml.etree import ElementTree as ET - - >>> e = ET.XML("t\xe3g") - >>> ET.tostring(e, 'ascii') - b"\\ntãg" - >>> e = ET.XML("t\xe3g".encode('iso-8859-1')) # create byte string with the right encoding - >>> ET.tostring(e, 'ascii') - b"\\ntãg" + b"\\n\\xe3?>" """ # @@ -306,9 +1303,9 @@

    Example.

    - +
    -""" +""".format(SIMPLE_XMLFILE) def xinclude_loader(href, parse="xml", encoding=None): try: @@ -329,7 +1326,7 @@ >>> document = xinclude_loader("C1.xml") >>> ElementInclude.include(document, xinclude_loader) - >>> print(serialize(ET, document)) # C1 + >>> print(serialize(document)) # C1

    120 Mz is adequate for an average home user.

    @@ -343,7 +1340,7 @@ >>> document = xinclude_loader("C2.xml") >>> ElementInclude.include(document, xinclude_loader) - >>> print(serialize(ET, document)) # C2 + >>> print(serialize(document)) # C2

    This document has been accessed 324387 times.

    @@ -353,7 +1350,7 @@ >>> document = xinclude_loader("C3.xml") >>> ElementInclude.include(document, xinclude_loader) - >>> print(serialize(ET, document)) # C3 + >>> print(serialize(document)) # C3

    The following is the source of the "data.xml" resource:

    <?xml version='1.0'?> @@ -370,13 +1367,489 @@ >>> ElementInclude.include(document, xinclude_loader) Traceback (most recent call last): IOError: resource not found - >>> # print serialize(ET, document) # C5 + >>> # print(serialize(document)) # C5 + """ + +def xinclude_default(): + """ + >>> from xml.etree import ElementInclude + >>> document = xinclude_loader("default.xml") + >>> ElementInclude.include(document) + >>> print(serialize(document)) # default + +

    Example.

    + + text + texttail + + +
    """ -def test_main(): +# +# badly formatted xi:include tags + +XINCLUDE_BAD = {} + +XINCLUDE_BAD["B1.xml"] = """\ + + +

    120 Mz is adequate for an average home user.

    + +
    +""" + +XINCLUDE_BAD["B2.xml"] = """\ + +
    + +
    +""" + +def xinclude_failures(): + r""" + Test failure to locate included XML file. + + >>> from xml.etree import ElementInclude + + >>> def none_loader(href, parser, encoding=None): + ... return None + + >>> document = ET.XML(XINCLUDE["C1.xml"]) + >>> ElementInclude.include(document, loader=none_loader) + Traceback (most recent call last): + xml.etree.ElementInclude.FatalIncludeError: cannot load 'disclaimer.xml' as 'xml' + + Test failure to locate included text file. + + >>> document = ET.XML(XINCLUDE["C2.xml"]) + >>> ElementInclude.include(document, loader=none_loader) + Traceback (most recent call last): + xml.etree.ElementInclude.FatalIncludeError: cannot load 'count.txt' as 'text' + + Test bad parse type. + + >>> document = ET.XML(XINCLUDE_BAD["B1.xml"]) + >>> ElementInclude.include(document, loader=none_loader) + Traceback (most recent call last): + xml.etree.ElementInclude.FatalIncludeError: unknown parse type in xi:include tag ('BAD_TYPE') + + Test xi:fallback outside xi:include. + + >>> document = ET.XML(XINCLUDE_BAD["B2.xml"]) + >>> ElementInclude.include(document, loader=none_loader) + Traceback (most recent call last): + xml.etree.ElementInclude.FatalIncludeError: xi:fallback tag must be child of xi:include ('{http://www.w3.org/2001/XInclude}fallback') + """ + +# -------------------------------------------------------------------- +# reported bugs + +def bug_xmltoolkit21(): + """ + + marshaller gives obscure errors for non-string values + + >>> elem = ET.Element(123) + >>> serialize(elem) # tag + Traceback (most recent call last): + TypeError: cannot serialize 123 (type int) + >>> elem = ET.Element("elem") + >>> elem.text = 123 + >>> serialize(elem) # text + Traceback (most recent call last): + TypeError: cannot serialize 123 (type int) + >>> elem = ET.Element("elem") + >>> elem.tail = 123 + >>> serialize(elem) # tail + Traceback (most recent call last): + TypeError: cannot serialize 123 (type int) + >>> elem = ET.Element("elem") + >>> elem.set(123, "123") + >>> serialize(elem) # attribute key + Traceback (most recent call last): + TypeError: cannot serialize 123 (type int) + >>> elem = ET.Element("elem") + >>> elem.set("123", 123) + >>> serialize(elem) # attribute value + Traceback (most recent call last): + TypeError: cannot serialize 123 (type int) + + """ + +def bug_xmltoolkit25(): + """ + + typo in ElementTree.findtext + + >>> elem = ET.XML(SAMPLE_XML) + >>> tree = ET.ElementTree(elem) + >>> tree.findtext("tag") + 'text' + >>> tree.findtext("section/tag") + 'subtext' + + """ + +def bug_xmltoolkit28(): + """ + + .//tag causes exceptions + + >>> tree = ET.XML("
    ") + >>> summarize_list(tree.findall(".//thead")) + [] + >>> summarize_list(tree.findall(".//tbody")) + ['tbody'] + + """ + +def bug_xmltoolkitX1(): + """ + + dump() doesn't flush the output buffer + + >>> tree = ET.XML("
    ") + >>> ET.dump(tree); print("tail") +
    + tail + + """ + +def bug_xmltoolkit39(): + """ + + non-ascii element and attribute names doesn't work + + >>> tree = ET.XML(b"") + >>> ET.tostring(tree, "utf-8") + b'' + + >>> tree = ET.XML(b"") + >>> tree.attrib + {'\\xe4ttr': 'v\\xe4lue'} + >>> ET.tostring(tree, "utf-8") + b'' + + >>> tree = ET.XML(b"text") + >>> ET.tostring(tree, "utf-8") + b'text' + + >>> tree = ET.Element("t\u00e4g") + >>> ET.tostring(tree, "utf-8") + b'' + + >>> tree = ET.Element("tag") + >>> tree.set("\u00e4ttr", "v\u00e4lue") + >>> ET.tostring(tree, "utf-8") + b'' + + """ + +def bug_xmltoolkit54(): + """ + + problems handling internally defined entities + + >>> e = ET.XML("]>&ldots;") + >>> serialize(e, encoding="us-ascii") + b'' + >>> serialize(e) + '\u8230' + + """ + +def bug_xmltoolkit55(): + """ + + make sure we're reporting the first error, not the last + + >>> normalize_exception(ET.XML, b"&ldots;&ndots;&rdots;") + Traceback (most recent call last): + ParseError: undefined entity &ldots;: line 1, column 36 + + """ + +class ExceptionFile: + def read(self, x): + raise IOError + +def xmltoolkit60(): + """ + + Handle crash in stream source. + >>> tree = ET.parse(ExceptionFile()) + Traceback (most recent call last): + IOError + + """ + +XMLTOOLKIT62_DOC = """ + + + +A new cultivar of Begonia plant named ‘BCT9801BEG’. + +""" + + +def xmltoolkit62(): + """ + + Don't crash when using custom entities. + + >>> xmltoolkit62() + 'A new cultivar of Begonia plant named \u2018BCT9801BEG\u2019.' + + """ + ENTITIES = {'rsquo': '\u2019', 'lsquo': '\u2018'} + parser = ET.XMLTreeBuilder() + parser.entity.update(ENTITIES) + parser.feed(XMLTOOLKIT62_DOC) + t = parser.close() + return t.find('.//paragraph').text + +def xmltoolkit63(): + """ + + Check reference leak. + >>> xmltoolkit63() + >>> count = sys.getrefcount(None) + >>> for i in range(1000): + ... xmltoolkit63() + >>> sys.getrefcount(None) - count + 0 + + """ + tree = ET.TreeBuilder() + tree.start("tag", {}) + tree.data("text") + tree.end("tag") + +# -------------------------------------------------------------------- + + +def bug_200708_newline(): + r""" + + Preserve newlines in attributes. + + >>> e = ET.Element('SomeTag', text="def _f():\n return 3\n") + >>> ET.tostring(e) + '' + >>> ET.XML(ET.tostring(e)).get("text") + 'def _f():\n return 3\n' + >>> ET.tostring(ET.XML(ET.tostring(e))) + '' + + """ + +def bug_200708_close(): + """ + + Test default builder. + >>> parser = ET.XMLParser() # default + >>> parser.feed("some text") + >>> summarize(parser.close()) + 'element' + + Test custom builder. + >>> class EchoTarget: + ... def close(self): + ... return ET.Element("element") # simulate root + >>> parser = ET.XMLParser(EchoTarget()) + >>> parser.feed("some text") + >>> summarize(parser.close()) + 'element' + + """ + +def bug_200709_default_namespace(): + """ + + >>> e = ET.Element("{default}elem") + >>> s = ET.SubElement(e, "{default}elem") + >>> serialize(e, default_namespace="default") # 1 + '' + + >>> e = ET.Element("{default}elem") + >>> s = ET.SubElement(e, "{default}elem") + >>> s = ET.SubElement(e, "{not-default}elem") + >>> serialize(e, default_namespace="default") # 2 + '' + + >>> e = ET.Element("{default}elem") + >>> s = ET.SubElement(e, "{default}elem") + >>> s = ET.SubElement(e, "elem") # unprefixed name + >>> serialize(e, default_namespace="default") # 3 + Traceback (most recent call last): + ValueError: cannot use non-qualified names with default_namespace option + + """ + +def bug_200709_register_namespace(): + """ + + >>> ET.tostring(ET.Element("{http://namespace.invalid/does/not/exist/}title")) + '' + >>> ET.register_namespace("foo", "http://namespace.invalid/does/not/exist/") + >>> ET.tostring(ET.Element("{http://namespace.invalid/does/not/exist/}title")) + '' + + And the Dublin Core namespace is in the default list: + + >>> ET.tostring(ET.Element("{http://purl.org/dc/elements/1.1/}title")) + '' + + """ + +def bug_200709_element_comment(): + """ + + Not sure if this can be fixed, really (since the serializer needs + ET.Comment, not cET.comment). + + >>> a = ET.Element('a') + >>> a.append(ET.Comment('foo')) + >>> a[0].tag == ET.Comment + True + + >>> a = ET.Element('a') + >>> a.append(ET.PI('foo')) + >>> a[0].tag == ET.PI + True + + """ + +def bug_200709_element_insert(): + """ + + >>> a = ET.Element('a') + >>> b = ET.SubElement(a, 'b') + >>> c = ET.SubElement(a, 'c') + >>> d = ET.Element('d') + >>> a.insert(0, d) + >>> summarize_list(a) + ['d', 'b', 'c'] + >>> a.insert(-1, d) + >>> summarize_list(a) + ['d', 'b', 'd', 'c'] + + """ + +def bug_200709_iter_comment(): + """ + + >>> a = ET.Element('a') + >>> b = ET.SubElement(a, 'b') + >>> comment_b = ET.Comment("TEST-b") + >>> b.append(comment_b) + >>> summarize_list(a.iter(ET.Comment)) + [''] + + """ + +# -------------------------------------------------------------------- +# reported on bugs.python.org + +def bug_1534630(): + """ + + >>> bob = ET.TreeBuilder() + >>> e = bob.data("data") + >>> e = bob.start("tag", {}) + >>> e = bob.end("tag") + >>> e = bob.close() + >>> serialize(e) + '' + + """ + +def check_issue6233(): + """ + + >>> e = ET.XML(b"t\\xc3\\xa3g") + >>> ET.tostring(e, 'ascii') + b"\\ntãg" + >>> e = ET.XML(b"t\\xe3g") + >>> ET.tostring(e, 'ascii') + b"\\ntãg" + + """ + +def check_issue3151(): + """ + + >>> e = ET.XML('') + >>> e.tag + '{${stuff}}localname' + >>> t = ET.ElementTree(e) + >>> ET.tostring(e) + '' + + """ + +def check_issue6565(): + """ + + >>> elem = ET.XML("") + >>> summarize_list(elem) + ['tag'] + >>> newelem = ET.XML(SAMPLE_XML) + >>> elem[:] = newelem[:] + >>> summarize_list(elem) + ['tag', 'tag', 'section'] + + """ + +# -------------------------------------------------------------------- + + +class CleanContext(object): + """Provide default namespace mapping and path cache.""" + + def __enter__(self): + from xml.etree import ElementTree + self._nsmap = ElementTree._namespace_map + self._path_cache = ElementTree.ElementPath._cache + # Copy the default namespace mapping + ElementTree._namespace_map = self._nsmap.copy() + # Copy the path cache (should be empty) + ElementTree.ElementPath._cache = self._path_cache.copy() + + def __exit__(self, *args): + from xml.etree import ElementTree + # Restore mapping and path cache + ElementTree._namespace_map = self._nsmap + ElementTree.ElementPath._cache = self._path_cache + + +def test_main(module_name='xml.etree.ElementTree'): + import warnings from test import test_xml_etree - support.run_doctest(test_xml_etree, verbosity=True) + def ignore(message, category=DeprecationWarning): + warnings.filterwarnings("ignore", message, category) + + # The same doctests are used for both the Python and the C implementations + assert test_xml_etree.ET.__name__ == module_name + + with warnings.catch_warnings(), CleanContext(): + # Search behaviour is broken if search path starts with "/". + ignore("This search is broken in 1.3 and earlier, and will be fixed " + "in a future version. If you rely on the current behaviour, " + "change it to '.+'", FutureWarning) + # Element.getchildren() and Element.getiterator() are deprecated. + ignore("This method will be removed in future versions. " + "Use .+ instead.") + # XMLParser.doctype() is deprecated. + ignore("This method of XMLParser is deprecated. " + "Define doctype.. method on the TreeBuilder target.") + + support.run_doctest(test_xml_etree, verbosity=True) + + # The module should not be changed by the tests + assert test_xml_etree.ET.__name__ == module_name if __name__ == '__main__': test_main() Modified: python/branches/py3k/Lib/test/test_xml_etree_c.py ============================================================================== --- python/branches/py3k/Lib/test/test_xml_etree_c.py (original) +++ python/branches/py3k/Lib/test/test_xml_etree_c.py Sun Mar 14 00:24:31 2010 @@ -1,31 +1,11 @@ # xml.etree test for cElementTree -import doctest -import sys - from test import support -ET = support.import_module('xml.etree.cElementTree') +cET = support.import_module('xml.etree.cElementTree') + -SAMPLE_XML = """ - - text - -
    - subtext -
    - -""" - -SAMPLE_XML_NS = """ - - text - -
    - subtext -
    - -""" +# cElementTree specific tests def sanity(): """ @@ -34,187 +14,26 @@ >>> from xml.etree import cElementTree """ -def check_method(method): - if not hasattr(method, '__call__'): - print(method, "not callable") - -def serialize(ET, elem): - import io - file = io.StringIO() - tree = ET.ElementTree(elem) - tree.write(file) - return file.getvalue() - -def summarize(elem): - return elem.tag - -def summarize_list(seq): - return list(map(summarize, seq)) - -def interface(): - """ - Test element tree interface. - - >>> element = ET.Element("tag", key="value") - >>> tree = ET.ElementTree(element) - - Make sure all standard element methods exist. - - >>> check_method(element.append) - >>> check_method(element.insert) - >>> check_method(element.remove) - >>> check_method(element.getchildren) - >>> check_method(element.find) - >>> check_method(element.findall) - >>> check_method(element.findtext) - >>> check_method(element.clear) - >>> check_method(element.get) - >>> check_method(element.set) - >>> check_method(element.keys) - >>> check_method(element.items) - >>> check_method(element.getiterator) - - Basic method sanity checks. - - >>> serialize(ET, element) # 1 - '' - >>> subelement = ET.Element("subtag") - >>> element.append(subelement) - >>> serialize(ET, element) # 2 - '' - >>> element.insert(0, subelement) - >>> serialize(ET, element) # 3 - '' - >>> element.remove(subelement) - >>> serialize(ET, element) # 4 - '' - >>> element.remove(subelement) - >>> serialize(ET, element) # 5 - '' - >>> element.remove(subelement) - Traceback (most recent call last): - ValueError: list.remove(x): x not in list - >>> serialize(ET, element) # 6 - '' - """ - -def find(): - """ - Test find methods (including xpath syntax). - - >>> elem = ET.XML(SAMPLE_XML) - >>> elem.find("tag").tag - 'tag' - >>> ET.ElementTree(elem).find("tag").tag - 'tag' - >>> elem.find("section/tag").tag - 'tag' - >>> ET.ElementTree(elem).find("section/tag").tag - 'tag' - >>> elem.findtext("tag") - 'text' - >>> elem.findtext("tog") - >>> elem.findtext("tog", "default") - 'default' - >>> ET.ElementTree(elem).findtext("tag") - 'text' - >>> elem.findtext("section/tag") - 'subtext' - >>> ET.ElementTree(elem).findtext("section/tag") - 'subtext' - >>> summarize_list(elem.findall("tag")) - ['tag', 'tag'] - >>> summarize_list(elem.findall("*")) - ['tag', 'tag', 'section'] - >>> summarize_list(elem.findall(".//tag")) - ['tag', 'tag', 'tag'] - >>> summarize_list(elem.findall("section/tag")) - ['tag'] - >>> summarize_list(elem.findall("section//tag")) - ['tag'] - >>> summarize_list(elem.findall("section/*")) - ['tag'] - >>> summarize_list(elem.findall("section//*")) - ['tag'] - >>> summarize_list(elem.findall("section/.//*")) - ['tag'] - >>> summarize_list(elem.findall("*/*")) - ['tag'] - >>> summarize_list(elem.findall("*//*")) - ['tag'] - >>> summarize_list(elem.findall("*/tag")) - ['tag'] - >>> summarize_list(elem.findall("*/./tag")) - ['tag'] - >>> summarize_list(elem.findall("./tag")) - ['tag', 'tag'] - >>> summarize_list(elem.findall(".//tag")) - ['tag', 'tag', 'tag'] - >>> summarize_list(elem.findall("././tag")) - ['tag', 'tag'] - >>> summarize_list(ET.ElementTree(elem).findall("/tag")) - ['tag', 'tag'] - >>> summarize_list(ET.ElementTree(elem).findall("./tag")) - ['tag', 'tag'] - >>> elem = ET.XML(SAMPLE_XML_NS) - >>> summarize_list(elem.findall("tag")) - [] - >>> summarize_list(elem.findall("{http://effbot.org/ns}tag")) - ['{http://effbot.org/ns}tag', '{http://effbot.org/ns}tag'] - >>> summarize_list(elem.findall(".//{http://effbot.org/ns}tag")) - ['{http://effbot.org/ns}tag', '{http://effbot.org/ns}tag', '{http://effbot.org/ns}tag'] - """ - -def parseliteral(): - r""" - - >>> element = ET.XML("text") - >>> ET.ElementTree(element).write(sys.stdout) - text - >>> element = ET.fromstring("text") - >>> ET.ElementTree(element).write(sys.stdout) - text - >>> print(ET.tostring(element)) - text - >>> print(repr(ET.tostring(element, "ascii"))) - b"\ntext" - >>> _, ids = ET.XMLID("text") - >>> len(ids) - 0 - >>> _, ids = ET.XMLID("text") - >>> len(ids) - 1 - >>> ids["body"].tag - 'body' - """ - -def check_encoding(encoding): - """ - >>> check_encoding("ascii") - >>> check_encoding("us-ascii") - >>> check_encoding("iso-8859-1") - >>> check_encoding("iso-8859-15") - >>> check_encoding("cp437") - >>> check_encoding("mac-roman") - """ - ET.XML( - "" % encoding - ) - -def bug_1534630(): - """ - >>> bob = ET.TreeBuilder() - >>> e = bob.data("data") - >>> e = bob.start("tag", {}) - >>> e = bob.end("tag") - >>> e = bob.close() - >>> serialize(ET, e) - '' - """ def test_main(): - from test import test_xml_etree_c + from test import test_xml_etree, test_xml_etree_c + + # Run the tests specific to the C implementation support.run_doctest(test_xml_etree_c, verbosity=True) + # Assign the C implementation before running the doctests + # Patch the __name__, to prevent confusion with the pure Python test + pyET = test_xml_etree.ET + py__name__ = test_xml_etree.__name__ + test_xml_etree.ET = cET + if __name__ != '__main__': + test_xml_etree.__name__ = __name__ + try: + # Run the same test suite as xml.etree.ElementTree + test_xml_etree.test_main(module_name='xml.etree.cElementTree') + finally: + test_xml_etree.ET = pyET + test_xml_etree.__name__ = py__name__ + if __name__ == '__main__': test_main() Modified: python/branches/py3k/Lib/xml/etree/ElementInclude.py ============================================================================== --- python/branches/py3k/Lib/xml/etree/ElementInclude.py (original) +++ python/branches/py3k/Lib/xml/etree/ElementInclude.py Sun Mar 14 00:24:31 2010 @@ -1,6 +1,6 @@ # # ElementTree -# $Id: ElementInclude.py 1862 2004-06-18 07:31:02Z Fredrik $ +# $Id: ElementInclude.py 3375 2008-02-13 08:05:08Z fredrik $ # # limited xinclude support for element trees # @@ -16,7 +16,7 @@ # -------------------------------------------------------------------- # The ElementTree toolkit is # -# Copyright (c) 1999-2004 by Fredrik Lundh +# Copyright (c) 1999-2008 by Fredrik Lundh # # By obtaining, using, and/or copying this software and/or its # associated documentation, you agree that you have read, understood, @@ -42,7 +42,7 @@ # -------------------------------------------------------------------- # Licensed to PSF under a Contributor Agreement. -# See http://www.python.org/2.4/license for licensing details. +# See http://www.python.org/psf/license for licensing details. ## # Limited XInclude support for the ElementTree package. Modified: python/branches/py3k/Lib/xml/etree/ElementPath.py ============================================================================== --- python/branches/py3k/Lib/xml/etree/ElementPath.py (original) +++ python/branches/py3k/Lib/xml/etree/ElementPath.py Sun Mar 14 00:24:31 2010 @@ -1,6 +1,6 @@ # # ElementTree -# $Id: ElementPath.py 1858 2004-06-17 21:31:41Z Fredrik $ +# $Id: ElementPath.py 3375 2008-02-13 08:05:08Z fredrik $ # # limited xpath support for element trees # @@ -8,8 +8,13 @@ # 2003-05-23 fl created # 2003-05-28 fl added support for // etc # 2003-08-27 fl fixed parsing of periods in element names +# 2007-09-10 fl new selection engine +# 2007-09-12 fl fixed parent selector +# 2007-09-13 fl added iterfind; changed findall to return a list +# 2007-11-30 fl added namespaces support +# 2009-10-30 fl added child element value filter # -# Copyright (c) 2003-2004 by Fredrik Lundh. All rights reserved. +# Copyright (c) 2003-2009 by Fredrik Lundh. All rights reserved. # # fredrik at pythonware.com # http://www.pythonware.com @@ -17,7 +22,7 @@ # -------------------------------------------------------------------- # The ElementTree toolkit is # -# Copyright (c) 1999-2004 by Fredrik Lundh +# Copyright (c) 1999-2009 by Fredrik Lundh # # By obtaining, using, and/or copying this software and/or its # associated documentation, you agree that you have read, understood, @@ -43,7 +48,7 @@ # -------------------------------------------------------------------- # Licensed to PSF under a Contributor Agreement. -# See http://www.python.org/2.4/license for licensing details. +# See http://www.python.org/psf/license for licensing details. ## # Implementation module for XPath support. There's usually no reason @@ -53,146 +58,246 @@ import re -xpath_tokenizer = re.compile( - "(::|\.\.|\(\)|[/.*:\[\]\(\)@=])|((?:\{[^}]+\})?[^/:\[\]\(\)@=\s]+)|\s+" - ).findall - -class xpath_descendant_or_self: - pass - -## -# Wrapper for a compiled XPath. - -class Path: - - ## - # Create an Path instance from an XPath expression. - - def __init__(self, path): - tokens = xpath_tokenizer(path) - # the current version supports 'path/path'-style expressions only - self.path = [] - self.tag = None - if tokens and tokens[0][0] == "/": - raise SyntaxError("cannot use absolute path on element") - while tokens: - op, tag = tokens.pop(0) - if tag or op == "*": - self.path.append(tag or op) - elif op == ".": - pass - elif op == "/": - self.path.append(xpath_descendant_or_self()) - continue - else: - raise SyntaxError("unsupported path syntax (%s)" % op) - if tokens: - op, tag = tokens.pop(0) - if op != "/": - raise SyntaxError( - "expected path separator (%s)" % (op or tag) - ) - if self.path and isinstance(self.path[-1], xpath_descendant_or_self): - raise SyntaxError("path cannot end with //") - if len(self.path) == 1 and isinstance(self.path[0], type("")): - self.tag = self.path[0] - - ## - # Find first matching object. - - def find(self, element): - tag = self.tag - if tag is None: - nodeset = self.findall(element) - if not nodeset: - return None - return nodeset[0] - for elem in element: - if elem.tag == tag: - return elem - return None - - ## - # Find text for first matching object. - - def findtext(self, element, default=None): - tag = self.tag - if tag is None: - nodeset = self.findall(element) - if not nodeset: - return default - return nodeset[0].text or "" - for elem in element: - if elem.tag == tag: - return elem.text or "" - return default - - ## - # Find all matching objects. - - def findall(self, element): - nodeset = [element] - index = 0 - while 1: +xpath_tokenizer_re = re.compile( + "(" + "'[^']*'|\"[^\"]*\"|" + "::|" + "//?|" + "\.\.|" + "\(\)|" + "[/.*:\[\]\(\)@=])|" + "((?:\{[^}]+\})?[^/\[\]\(\)@=\s]+)|" + "\s+" + ) + +def xpath_tokenizer(pattern, namespaces=None): + for token in xpath_tokenizer_re.findall(pattern): + tag = token[1] + if tag and tag[0] != "{" and ":" in tag: try: - path = self.path[index] - index = index + 1 - except IndexError: - return nodeset - set = [] - if isinstance(path, xpath_descendant_or_self): + prefix, uri = tag.split(":", 1) + if not namespaces: + raise KeyError + yield token[0], "{%s}%s" % (namespaces[prefix], uri) + except KeyError: + raise SyntaxError("prefix %r not found in prefix map" % prefix) + else: + yield token + +def get_parent_map(context): + parent_map = context.parent_map + if parent_map is None: + context.parent_map = parent_map = {} + for p in context.root.iter(): + for e in p: + parent_map[e] = p + return parent_map + +def prepare_child(next, token): + tag = token[1] + def select(context, result): + for elem in result: + for e in elem: + if e.tag == tag: + yield e + return select + +def prepare_star(next, token): + def select(context, result): + for elem in result: + for e in elem: + yield e + return select + +def prepare_self(next, token): + def select(context, result): + for elem in result: + yield elem + return select + +def prepare_descendant(next, token): + token = next() + if token[0] == "*": + tag = "*" + elif not token[0]: + tag = token[1] + else: + raise SyntaxError("invalid descendant") + def select(context, result): + for elem in result: + for e in elem.iter(tag): + if e is not elem: + yield e + return select + +def prepare_parent(next, token): + def select(context, result): + # FIXME: raise error if .. is applied at toplevel? + parent_map = get_parent_map(context) + result_map = {} + for elem in result: + if elem in parent_map: + parent = parent_map[elem] + if parent not in result_map: + result_map[parent] = None + yield parent + return select + +def prepare_predicate(next, token): + # FIXME: replace with real parser!!! refs: + # http://effbot.org/zone/simple-iterator-parser.htm + # http://javascript.crockford.com/tdop/tdop.html + signature = [] + predicate = [] + while 1: + token = next() + if token[0] == "]": + break + if token[0] and token[0][:1] in "'\"": + token = "'", token[0][1:-1] + signature.append(token[0] or "-") + predicate.append(token[1]) + signature = "".join(signature) + # use signature to determine predicate type + if signature == "@-": + # [@attribute] predicate + key = predicate[1] + def select(context, result): + for elem in result: + if elem.get(key) is not None: + yield elem + return select + if signature == "@-='": + # [@attribute='value'] + key = predicate[1] + value = predicate[-1] + def select(context, result): + for elem in result: + if elem.get(key) == value: + yield elem + return select + if signature == "-" and not re.match("\d+$", predicate[0]): + # [tag] + tag = predicate[0] + def select(context, result): + for elem in result: + if elem.find(tag) is not None: + yield elem + return select + if signature == "-='" and not re.match("\d+$", predicate[0]): + # [tag='value'] + tag = predicate[0] + value = predicate[-1] + def select(context, result): + for elem in result: + for e in elem.findall(tag): + if "".join(e.itertext()) == value: + yield elem + break + return select + if signature == "-" or signature == "-()" or signature == "-()-": + # [index] or [last()] or [last()-index] + if signature == "-": + index = int(predicate[0]) - 1 + else: + if predicate[0] != "last": + raise SyntaxError("unsupported function") + if signature == "-()-": try: - tag = self.path[index] - if not isinstance(tag, type("")): - tag = None - else: - index = index + 1 - except IndexError: - tag = None # invalid path - for node in nodeset: - new = list(node.getiterator(tag)) - if new and new[0] is node: - set.extend(new[1:]) - else: - set.extend(new) + index = int(predicate[2]) - 1 + except ValueError: + raise SyntaxError("unsupported expression") else: - for node in nodeset: - for node in node: - if path == "*" or node.tag == path: - set.append(node) - if not set: - return [] - nodeset = set + index = -1 + def select(context, result): + parent_map = get_parent_map(context) + for elem in result: + try: + parent = parent_map[elem] + # FIXME: what if the selector is "*" ? + elems = list(parent.findall(elem.tag)) + if elems[index] is elem: + yield elem + except (IndexError, KeyError): + pass + return select + raise SyntaxError("invalid predicate") + +ops = { + "": prepare_child, + "*": prepare_star, + ".": prepare_self, + "..": prepare_parent, + "//": prepare_descendant, + "[": prepare_predicate, + } _cache = {} +class _SelectorContext: + parent_map = None + def __init__(self, root): + self.root = root + +# -------------------------------------------------------------------- + ## -# (Internal) Compile path. +# Generate all matching objects. -def _compile(path): - p = _cache.get(path) - if p is not None: - return p - p = Path(path) - if len(_cache) >= 100: - _cache.clear() - _cache[path] = p - return p +def iterfind(elem, path, namespaces=None): + # compile selector pattern + if path[-1:] == "/": + path = path + "*" # implicit all (FIXME: keep this?) + try: + selector = _cache[path] + except KeyError: + if len(_cache) > 100: + _cache.clear() + if path[:1] == "/": + raise SyntaxError("cannot use absolute path on element") + next = iter(xpath_tokenizer(path, namespaces)).__next__ + token = next() + selector = [] + while 1: + try: + selector.append(ops[token[0]](next, token)) + except StopIteration: + raise SyntaxError("invalid path") + try: + token = next() + if token[0] == "/": + token = next() + except StopIteration: + break + _cache[path] = selector + # execute selector pattern + result = [elem] + context = _SelectorContext(elem) + for select in selector: + result = select(context, result) + return result ## # Find first matching object. -def find(element, path): - return _compile(path).find(element) +def find(elem, path, namespaces=None): + try: + return next(iterfind(elem, path, namespaces)) + except StopIteration: + return None ## -# Find text for first matching object. +# Find all matching objects. -def findtext(element, path, default=None): - return _compile(path).findtext(element, default) +def findall(elem, path, namespaces=None): + return list(iterfind(elem, path, namespaces)) ## -# Find all matching objects. +# Find text for first matching object. -def findall(element, path): - return _compile(path).findall(element) +def findtext(elem, path, default=None, namespaces=None): + try: + elem = next(iterfind(elem, path, namespaces)) + return elem.text or "" + except StopIteration: + return default Modified: python/branches/py3k/Lib/xml/etree/ElementTree.py ============================================================================== --- python/branches/py3k/Lib/xml/etree/ElementTree.py (original) +++ python/branches/py3k/Lib/xml/etree/ElementTree.py Sun Mar 14 00:24:31 2010 @@ -1,40 +1,24 @@ # # ElementTree -# $Id: ElementTree.py 2326 2005-03-17 07:45:21Z fredrik $ +# $Id: ElementTree.py 3440 2008-07-18 14:45:01Z fredrik $ # -# light-weight XML support for Python 1.5.2 and later. +# light-weight XML support for Python 2.3 and later. # -# history: -# 2001-10-20 fl created (from various sources) -# 2001-11-01 fl return root from parse method -# 2002-02-16 fl sort attributes in lexical order -# 2002-04-06 fl TreeBuilder refactoring, added PythonDoc markup -# 2002-05-01 fl finished TreeBuilder refactoring -# 2002-07-14 fl added basic namespace support to ElementTree.write -# 2002-07-25 fl added QName attribute support -# 2002-10-20 fl fixed encoding in write -# 2002-11-24 fl changed default encoding to ascii; fixed attribute encoding -# 2002-11-27 fl accept file objects or file names for parse/write -# 2002-12-04 fl moved XMLTreeBuilder back to this module -# 2003-01-11 fl fixed entity encoding glitch for us-ascii -# 2003-02-13 fl added XML literal factory -# 2003-02-21 fl added ProcessingInstruction/PI factory -# 2003-05-11 fl added tostring/fromstring helpers -# 2003-05-26 fl added ElementPath support -# 2003-07-05 fl added makeelement factory method -# 2003-07-28 fl added more well-known namespace prefixes -# 2003-08-15 fl fixed typo in ElementTree.findtext (Thomas Dartsch) -# 2003-09-04 fl fall back on emulator if ElementPath is not installed -# 2003-10-31 fl markup updates -# 2003-11-15 fl fixed nested namespace bug -# 2004-03-28 fl added XMLID helper -# 2004-06-02 fl added default support to findtext -# 2004-06-08 fl fixed encoding of non-ascii element/attribute names -# 2004-08-23 fl take advantage of post-2.1 expat features -# 2005-02-01 fl added iterparse implementation -# 2005-03-02 fl fixed iterparse support for pre-2.2 versions +# history (since 1.2.6): +# 2005-11-12 fl added tostringlist/fromstringlist helpers +# 2006-07-05 fl merged in selected changes from the 1.3 sandbox +# 2006-07-05 fl removed support for 2.1 and earlier +# 2007-06-21 fl added deprecation/future warnings +# 2007-08-25 fl added doctype hook, added parser version attribute etc +# 2007-08-26 fl added new serializer code (better namespace handling, etc) +# 2007-08-27 fl warn for broken /tag searches on tree level +# 2007-09-02 fl added html/text methods to serializer (experimental) +# 2007-09-05 fl added method argument to tostring/tostringlist +# 2007-09-06 fl improved error handling +# 2007-09-13 fl added itertext, iterfind; assorted cleanups +# 2007-12-15 fl added C14N hooks, copy method (experimental) # -# Copyright (c) 1999-2005 by Fredrik Lundh. All rights reserved. +# Copyright (c) 1999-2008 by Fredrik Lundh. All rights reserved. # # fredrik at pythonware.com # http://www.pythonware.com @@ -42,7 +26,7 @@ # -------------------------------------------------------------------- # The ElementTree toolkit is # -# Copyright (c) 1999-2005 by Fredrik Lundh +# Copyright (c) 1999-2008 by Fredrik Lundh # # By obtaining, using, and/or copying this software and/or its # associated documentation, you agree that you have read, understood, @@ -68,25 +52,28 @@ # -------------------------------------------------------------------- # Licensed to PSF under a Contributor Agreement. -# See http://www.python.org/2.4/license for licensing details. +# See http://www.python.org/psf/license for licensing details. __all__ = [ # public symbols "Comment", "dump", "Element", "ElementTree", - "fromstring", + "fromstring", "fromstringlist", "iselement", "iterparse", - "parse", + "parse", "ParseError", "PI", "ProcessingInstruction", "QName", "SubElement", - "tostring", + "tostring", "tostringlist", "TreeBuilder", - "VERSION", "XML", + "VERSION", + "XML", "XMLParser", "XMLTreeBuilder", ] +VERSION = "1.3.0" + ## # The Element type is a flexible container object, designed to # store hierarchical data structures in memory. The type can be @@ -102,36 +89,86 @@ #
  • a number of child elements, stored in a Python sequence
  • # # -# To create an element instance, use the {@link #Element} or {@link -# #SubElement} factory functions. +# To create an element instance, use the {@link #Element} constructor +# or the {@link #SubElement} factory function. #

    # The {@link #ElementTree} class can be used to wrap an element # structure, and convert it from and to XML. ## -import sys, re +import sys +import re +import warnings + + +class _SimpleElementPath: + # emulate pre-1.2 find/findtext/findall behaviour + def find(self, element, tag, namespaces=None): + for elem in element: + if elem.tag == tag: + return elem + return None + def findtext(self, element, tag, default=None, namespaces=None): + elem = self.find(element, tag) + if elem is None: + return default + return elem.text or "" + def iterfind(self, element, tag, namespaces=None): + if tag[:3] == ".//": + for elem in element.iter(tag[3:]): + yield elem + for elem in element: + if elem.tag == tag: + yield elem + def findall(self, element, tag, namespaces=None): + return list(self.iterfind(element, tag, namespaces)) + +try: + from . import ElementPath +except ImportError: + ElementPath = _SimpleElementPath() + +## +# Parser error. This is a subclass of SyntaxError. +#

    +# In addition to the exception value, an exception instance contains a +# specific exception code in the code attribute, and the line and +# column of the error in the position attribute. + +class ParseError(SyntaxError): + pass -from . import ElementPath +# -------------------------------------------------------------------- -# TODO: add support for custom namespace resolvers/default namespaces -# TODO: add improved support for incremental parsing +## +# Checks if an object appears to be a valid element object. +# +# @param An element instance. +# @return A true value if this is an element object. +# @defreturn flag -VERSION = "1.2.6" +def iselement(element): + # FIXME: not sure about this; might be a better idea to look + # for tag/attrib/text attributes + return isinstance(element, Element) or hasattr(element, "tag") ## -# Internal element class. This class defines the Element interface, -# and provides a reference implementation of this interface. +# Element class. This class defines the Element interface, and +# provides a reference implementation of this interface. #

    -# You should not create instances of this class directly. Use the -# appropriate factory functions instead, such as {@link #Element} -# and {@link #SubElement}. +# The element name, attribute names, and attribute values can be +# either ASCII strings (ordinary Python strings containing only 7-bit +# ASCII characters) or Unicode strings. # +# @param tag The element name. +# @param attrib An optional dictionary, containing element attributes. +# @param **extra Additional attributes, given as keyword arguments. # @see Element # @see SubElement # @see Comment # @see ProcessingInstruction -class _ElementInterface: +class Element: # text...tail ## @@ -141,34 +178,41 @@ ## # (Attribute) Element attribute dictionary. Where possible, use - # {@link #_ElementInterface.get}, - # {@link #_ElementInterface.set}, - # {@link #_ElementInterface.keys}, and - # {@link #_ElementInterface.items} to access + # {@link #Element.get}, + # {@link #Element.set}, + # {@link #Element.keys}, and + # {@link #Element.items} to access # element attributes. attrib = None ## # (Attribute) Text before first subelement. This is either a - # string or the value None, if there was no text. + # string or the value None. Note that if there was no text, this + # attribute may be either None or an empty string, depending on + # the parser. text = None ## # (Attribute) Text after this element's end tag, but before the # next sibling element's start tag. This is either a string or - # the value None, if there was no text. + # the value None. Note that if there was no text, this attribute + # may be either None or an empty string, depending on the parser. tail = None # text after end tag, if any - def __init__(self, tag, attrib): + # constructor + + def __init__(self, tag, attrib={}, **extra): + attrib = attrib.copy() + attrib.update(extra) self.tag = tag self.attrib = attrib self._children = [] def __repr__(self): - return "" % (self.tag, id(self)) + return "" % (repr(self.tag), id(self)) ## # Creates a new element object of the same type as this element. @@ -178,18 +222,41 @@ # @return A new element instance. def makeelement(self, tag, attrib): - return Element(tag, attrib) + return self.__class__(tag, attrib) ## - # Returns the number of subelements. + # (Experimental) Copies the current element. This creates a + # shallow copy; subelements will be shared with the original tree. + # + # @return A new element instance. + + def copy(self): + elem = self.makeelement(self.tag, self.attrib) + elem.text = self.text + elem.tail = self.tail + elem[:] = self + return elem + + ## + # Returns the number of subelements. Note that this only counts + # full elements; to check if there's any content in an element, you + # have to check both the length and the text attribute. # # @return The number of subelements. def __len__(self): return len(self._children) + def __bool__(self): + warnings.warn( + "The behavior of this method will change in future versions. " + "Use specific 'len(elem)' or 'elem is not None' test instead.", + FutureWarning, stacklevel=2 + ) + return len(self._children) != 0 # emulate old behaviour, for now + ## - # Returns the given subelement. + # Returns the given subelement, by index. # # @param index What subelement to return. # @return The given subelement. @@ -199,19 +266,22 @@ return self._children[index] ## - # Replaces the given subelement. + # Replaces the given subelement, by index. # # @param index What subelement to replace. # @param element The new element value. # @exception IndexError If the given element does not exist. - # @exception AssertionError If element is not a valid object. def __setitem__(self, index, element): - assert iselement(element) + # if isinstance(index, slice): + # for elt in element: + # assert iselement(elt) + # else: + # assert iselement(element) self._children[index] = element ## - # Deletes the given subelement. + # Deletes the given subelement, by index. # # @param index What subelement to delete. # @exception IndexError If the given element does not exist. @@ -220,118 +290,121 @@ del self._children[index] ## - # Returns a list containing subelements in the given range. + # Adds a subelement to the end of this element. In document order, + # the new element will appear after the last existing subelement (or + # directly after the text, if it's the first subelement), but before + # the end tag for this element. # - # @param start The first subelement to return. - # @param stop The first subelement that shouldn't be returned. - # @return A sequence object containing subelements. + # @param element The element to add. - def __getslice__(self, start, stop): - return self._children[start:stop] + def append(self, element): + # assert iselement(element) + self._children.append(element) ## - # Replaces a number of subelements with elements from a sequence. + # Appends subelements from a sequence. # - # @param start The first subelement to replace. - # @param stop The first subelement that shouldn't be replaced. # @param elements A sequence object with zero or more elements. - # @exception AssertionError If a sequence member is not a valid object. - - def __setslice__(self, start, stop, elements): - for element in elements: - assert iselement(element) - self._children[start:stop] = list(elements) + # @since 1.3 - ## - # Deletes a number of subelements. - # - # @param start The first subelement to delete. - # @param stop The first subelement to leave in there. - - def __delslice__(self, start, stop): - del self._children[start:stop] - - ## - # Adds a subelement to the end of this element. - # - # @param element The element to add. - # @exception AssertionError If a sequence member is not a valid object. - - def append(self, element): - assert iselement(element) - self._children.append(element) + def extend(self, elements): + # for element in elements: + # assert iselement(element) + self._children.extend(elements) ## # Inserts a subelement at the given position in this element. # # @param index Where to insert the new subelement. - # @exception AssertionError If the element is not a valid object. def insert(self, index, element): - assert iselement(element) + # assert iselement(element) self._children.insert(index, element) ## # Removes a matching subelement. Unlike the find methods, # this method compares elements based on identity, not on tag - # value or contents. + # value or contents. To remove subelements by other means, the + # easiest way is often to use a list comprehension to select what + # elements to keep, and use slice assignment to update the parent + # element. # # @param element What element to remove. # @exception ValueError If a matching element could not be found. - # @exception AssertionError If the element is not a valid object. def remove(self, element): - assert iselement(element) + # assert iselement(element) self._children.remove(element) ## - # Returns all subelements. The elements are returned in document - # order. + # (Deprecated) Returns all subelements. The elements are returned + # in document order. # # @return A list of subelements. # @defreturn list of Element instances def getchildren(self): + warnings.warn( + "This method will be removed in future versions. " + "Use 'list(elem)' or iteration over elem instead.", + DeprecationWarning, stacklevel=2 + ) return self._children ## # Finds the first matching subelement, by tag name or path. # # @param path What element to look for. + # @keyparam namespaces Optional namespace prefix map. # @return The first matching element, or None if no element was found. # @defreturn Element or None - def find(self, path): - return ElementPath.find(self, path) + def find(self, path, namespaces=None): + return ElementPath.find(self, path, namespaces) ## # Finds text for the first matching subelement, by tag name or path. # # @param path What element to look for. # @param default What to return if the element was not found. + # @keyparam namespaces Optional namespace prefix map. # @return The text content of the first matching element, or the # default value no element was found. Note that if the element - # has is found, but has no text content, this method returns an + # is found, but has no text content, this method returns an # empty string. # @defreturn string - def findtext(self, path, default=None): - return ElementPath.findtext(self, path, default) + def findtext(self, path, default=None, namespaces=None): + return ElementPath.findtext(self, path, default, namespaces) ## # Finds all matching subelements, by tag name or path. # # @param path What element to look for. - # @return A list or iterator containing all matching elements, + # @keyparam namespaces Optional namespace prefix map. + # @return A list or other sequence containing all matching elements, # in document order. # @defreturn list of Element instances - def findall(self, path): - return ElementPath.findall(self, path) + def findall(self, path, namespaces=None): + return ElementPath.findall(self, path, namespaces) + + ## + # Finds all matching subelements, by tag name or path. + # + # @param path What element to look for. + # @keyparam namespaces Optional namespace prefix map. + # @return An iterator or sequence containing all matching elements, + # in document order. + # @defreturn a generated sequence of Element instances + + def iterfind(self, path, namespaces=None): + return ElementPath.iterfind(self, path, namespaces) ## # Resets an element. This function removes all subelements, clears - # all attributes, and sets the text and tail attributes to None. + # all attributes, and sets the text and tail attributes + # to None. def clear(self): self.attrib.clear() @@ -339,7 +412,8 @@ self.text = self.tail = None ## - # Gets an element attribute. + # Gets an element attribute. Equivalent to attrib.get, but + # some implementations may handle this a bit more efficiently. # # @param key What attribute to look for. # @param default What to return if the attribute was not found. @@ -351,7 +425,8 @@ return self.attrib.get(key, default) ## - # Sets an element attribute. + # Sets an element attribute. Equivalent to attrib[key] = value, + # but some implementations may handle this a bit more efficiently. # # @param key What attribute to set. # @param value The attribute value. @@ -362,6 +437,7 @@ ## # Gets a list of attribute names. The names are returned in an # arbitrary order (just like for an ordinary Python dictionary). + # Equivalent to attrib.keys(). # # @return A list of element attribute names. # @defreturn list of strings @@ -371,7 +447,7 @@ ## # Gets element attributes, as a sequence. The attributes are - # returned in an arbitrary order. + # returned in an arbitrary order. Equivalent to attrib.items(). # # @return A list of (name, value) tuples for all attributes. # @defreturn list of (string, string) tuples @@ -384,45 +460,55 @@ # and all subelements, in document order, and returns all elements # with a matching tag. #

    - # If the tree structure is modified during iteration, the result - # is undefined. + # If the tree structure is modified during iteration, new or removed + # elements may or may not be included. To get a stable set, use the + # list() function on the iterator, and loop over the resulting list. # # @param tag What tags to look for (default is to return all elements). - # @return A list or iterator containing all the matching elements. - # @defreturn list or iterator + # @return An iterator containing all the matching elements. + # @defreturn iterator - def getiterator(self, tag=None): - nodes = [] + def iter(self, tag=None): if tag == "*": tag = None if tag is None or self.tag == tag: - nodes.append(self) - for node in self._children: - nodes.extend(node.getiterator(tag)) - return nodes + yield self + for e in self._children: + for e in e.iter(tag): + yield e -# compatibility -_Element = _ElementInterface + # compatibility + def getiterator(self, tag=None): + # Change for a DeprecationWarning in 1.4 + warnings.warn( + "This method will be removed in future versions. " + "Use 'elem.iter()' or 'list(elem.iter())' instead.", + PendingDeprecationWarning, stacklevel=2 + ) + return list(self.iter(tag)) -## -# Element factory. This function returns an object implementing the -# standard Element interface. The exact class or type of that object -# is implementation dependent, but it will always be compatible with -# the {@link #_ElementInterface} class in this module. -#

    -# The element name, attribute names, and attribute values can be -# either 8-bit ASCII strings or Unicode strings. -# -# @param tag The element name. -# @param attrib An optional dictionary, containing element attributes. -# @param **extra Additional attributes, given as keyword arguments. -# @return An element instance. -# @defreturn Element + ## + # Creates a text iterator. The iterator loops over this element + # and all subelements, in document order, and returns all inner + # text. + # + # @return An iterator containing all inner text. + # @defreturn iterator -def Element(tag, attrib={}, **extra): - attrib = attrib.copy() - attrib.update(extra) - return _ElementInterface(tag, attrib) + def itertext(self): + tag = self.tag + if not isinstance(tag, str) and tag is not None: + return + if self.text: + yield self.text + for e in self: + for s in e.itertext(): + yield s + if e.tail: + yield e.tail + +# compatibility +_Element = _ElementInterface = Element ## # Subelement factory. This function creates an element instance, and @@ -447,7 +533,8 @@ ## # Comment element factory. This factory function creates a special -# element that will be serialized as an XML comment. +# element that will be serialized as an XML comment by the standard +# serializer. #

    # The comment string can be either an 8-bit ASCII string or a Unicode # string. @@ -463,7 +550,8 @@ ## # PI element factory. This factory function creates a special element -# that will be serialized as an XML processing instruction. +# that will be serialized as an XML processing instruction by the standard +# serializer. # # @param target A string containing the PI target. # @param text A string containing the PI contents, if any. @@ -523,19 +611,21 @@ return self.text != other.text return self.text != other +# -------------------------------------------------------------------- + ## # ElementTree wrapper class. This class represents an entire element # hierarchy, and adds some extra support for serialization to and from # standard XML. # # @param element Optional root element. -# @keyparam file Optional file handle or name. If given, the +# @keyparam file Optional file handle or file name. If given, the # tree is initialized with the contents of this XML file. class ElementTree: def __init__(self, element=None, file=None): - assert element is None or iselement(element) + # assert element is None or iselement(element) self._root = element # first node if file: self.parse(file) @@ -557,25 +647,27 @@ # @param element An element instance. def _setroot(self, element): - assert iselement(element) + # assert iselement(element) self._root = element ## # Loads an external XML document into this element tree. # - # @param source A file name or file object. - # @param parser An optional parser instance. If not given, the - # standard {@link XMLTreeBuilder} parser is used. + # @param source A file name or file object. If a file object is + # given, it only has to implement a read(n) method. + # @keyparam parser An optional parser instance. If not given, the + # standard {@link XMLParser} parser is used. # @return The document root element. # @defreturn Element + # @exception ParseError If the parser fails to parse the document. def parse(self, source, parser=None): if not hasattr(source, "read"): source = open(source, "rb") if not parser: - parser = XMLTreeBuilder() + parser = XMLParser(target=TreeBuilder()) while 1: - data = source.read(32768) + data = source.read(65536) if not data: break parser.feed(data) @@ -590,23 +682,40 @@ # @return An iterator. # @defreturn iterator + def iter(self, tag=None): + # assert self._root is not None + return self._root.iter(tag) + + # compatibility def getiterator(self, tag=None): - assert self._root is not None - return self._root.getiterator(tag) + # Change for a DeprecationWarning in 1.4 + warnings.warn( + "This method will be removed in future versions. " + "Use 'tree.iter()' or 'list(tree.iter())' instead.", + PendingDeprecationWarning, stacklevel=2 + ) + return list(self.iter(tag)) ## # Finds the first toplevel element with given tag. # Same as getroot().find(path). # # @param path What element to look for. + # @keyparam namespaces Optional namespace prefix map. # @return The first matching element, or None if no element was found. # @defreturn Element or None - def find(self, path): - assert self._root is not None + def find(self, path, namespaces=None): + # assert self._root is not None if path[:1] == "/": path = "." + path - return self._root.find(path) + warnings.warn( + "This search is broken in 1.3 and earlier, and will be " + "fixed in a future version. If you rely on the current " + "behaviour, change it to %r" % path, + FutureWarning, stacklevel=2 + ) + return self._root.find(path, namespaces) ## # Finds the element text for the first toplevel element with given @@ -614,153 +723,353 @@ # # @param path What toplevel element to look for. # @param default What to return if the element was not found. + # @keyparam namespaces Optional namespace prefix map. # @return The text content of the first matching element, or the # default value no element was found. Note that if the element - # has is found, but has no text content, this method returns an + # is found, but has no text content, this method returns an # empty string. # @defreturn string - def findtext(self, path, default=None): - assert self._root is not None + def findtext(self, path, default=None, namespaces=None): + # assert self._root is not None if path[:1] == "/": path = "." + path - return self._root.findtext(path, default) + warnings.warn( + "This search is broken in 1.3 and earlier, and will be " + "fixed in a future version. If you rely on the current " + "behaviour, change it to %r" % path, + FutureWarning, stacklevel=2 + ) + return self._root.findtext(path, default, namespaces) ## # Finds all toplevel elements with the given tag. # Same as getroot().findall(path). # # @param path What element to look for. + # @keyparam namespaces Optional namespace prefix map. # @return A list or iterator containing all matching elements, # in document order. # @defreturn list of Element instances - def findall(self, path): - assert self._root is not None + def findall(self, path, namespaces=None): + # assert self._root is not None if path[:1] == "/": path = "." + path - return self._root.findall(path) + warnings.warn( + "This search is broken in 1.3 and earlier, and will be " + "fixed in a future version. If you rely on the current " + "behaviour, change it to %r" % path, + FutureWarning, stacklevel=2 + ) + return self._root.findall(path, namespaces) + + ## + # Finds all matching subelements, by tag name or path. + # Same as getroot().iterfind(path). + # + # @param path What element to look for. + # @keyparam namespaces Optional namespace prefix map. + # @return An iterator or sequence containing all matching elements, + # in document order. + # @defreturn a generated sequence of Element instances + + def iterfind(self, path, namespaces=None): + # assert self._root is not None + if path[:1] == "/": + path = "." + path + warnings.warn( + "This search is broken in 1.3 and earlier, and will be " + "fixed in a future version. If you rely on the current " + "behaviour, change it to %r" % path, + FutureWarning, stacklevel=2 + ) + return self._root.iterfind(path, namespaces) ## # Writes the element tree to a file, as XML. # + # @def write(file, **options) # @param file A file name, or a file object opened for writing. - # @param encoding Optional output encoding (default is None) - - def write(self, file, encoding=None): - assert self._root is not None - if not hasattr(file, "write"): + # @param **options Options, given as keyword arguments. + # @keyparam encoding Optional output encoding (default is None). + # @keyparam method Optional output method ("xml", "html", "text" or + # "c14n"; default is "xml"). + # @keyparam xml_declaration Controls if an XML declaration should + # be added to the file. Use False for never, True for always, + # None for only if not US-ASCII or UTF-8. None is default. + + def write(self, file_or_filename, + # keyword arguments + encoding=None, + xml_declaration=None, + default_namespace=None, + method=None): + # assert self._root is not None + if not method: + method = "xml" + elif method not in _serialize: + # FIXME: raise an ImportError for c14n if ElementC14N is missing? + raise ValueError("unknown method %r" % method) + if hasattr(file_or_filename, "write"): + file = file_or_filename + else: if encoding: - file = open(file, "wb") + file = open(file_or_filename, "wb") else: - file = open(file, "w") - if encoding and encoding != "utf-8": - file.write(_encode("\n" % encoding, encoding)) - self._write(file, self._root, encoding, {}) - - def _write(self, file, node, encoding, namespaces): - # write XML to file - tag = node.tag - if tag is Comment: - file.write(_encode("" % node.text, encoding)) - elif tag is ProcessingInstruction: - file.write(_encode("" % node.text, encoding)) + file = open(file_or_filename, "w") + if encoding: + def write(text): + try: + return file.write(text.encode(encoding, + "xmlcharrefreplace")) + except (TypeError, AttributeError): + _raise_serialization_error(text) else: - items = list(node.items()) - xmlns_items = [] # new namespaces in this scope - try: - if isinstance(tag, QName) or tag[:1] == "{": - tag, xmlns = fixtag(tag, namespaces) - if xmlns: xmlns_items.append(xmlns) - except TypeError: - _raise_serialization_error(tag) - file.write(_encode("<" + tag, encoding)) - if items or xmlns_items: - items.sort() # lexical order - for k, v in items: - try: - if isinstance(k, QName) or k[:1] == "{": - k, xmlns = fixtag(k, namespaces) - if xmlns: xmlns_items.append(xmlns) - except TypeError: - _raise_serialization_error(k) - try: - if isinstance(v, QName): - v, xmlns = fixtag(v, namespaces) - if xmlns: xmlns_items.append(xmlns) - except TypeError: - _raise_serialization_error(v) - file.write(_encode(" %s=\"%s\"" % (k, _escape_attrib(v)), encoding)) - for k, v in xmlns_items: - file.write(_encode(" %s=\"%s\"" % (k, _escape_attrib(v)), encoding)) - if node.text or len(node): - file.write(_encode(">", encoding)) - if node.text: - file.write(_encode_cdata(node.text, encoding)) - for n in node: - self._write(file, n, encoding, namespaces) - file.write(_encode("", encoding)) + write = file.write + if not encoding: + if method == "c14n": + encoding = "utf-8" else: - file.write(_encode(" />", encoding)) - for k, v in xmlns_items: - del namespaces[v] - if node.tail: - file.write(_encode_cdata(node.tail, encoding)) + encoding = None + elif xml_declaration or (xml_declaration is None and + encoding not in ("utf-8", "us-ascii")): + if method == "xml": + encoding_ = encoding + if not encoding: + # Retrieve the default encoding for the xml declaration + import locale + encoding_ = locale.getpreferredencoding() + write("\n" % encoding_) + if method == "text": + _serialize_text(write, self._root) + else: + qnames, namespaces = _namespaces(self._root, default_namespace) + serialize = _serialize[method] + serialize(write, self._root, qnames, namespaces) + if file_or_filename is not file: + file.close() + + def write_c14n(self, file): + # lxml.etree compatibility. use output method instead + return self.write(file, method="c14n") # -------------------------------------------------------------------- -# helpers +# serialization support -## -# Checks if an object appears to be a valid element object. -# -# @param An element instance. -# @return A true value if this is an element object. -# @defreturn flag +def _namespaces(elem, default_namespace=None): + # identify namespaces used in this tree -def iselement(element): - # FIXME: not sure about this; might be a better idea to look - # for tag/attrib/text attributes - return isinstance(element, _ElementInterface) or hasattr(element, "tag") + # maps qnames to *encoded* prefix:local names + qnames = {None: None} -## -# Writes an element tree or element structure to sys.stdout. This -# function should be used for debugging only. -#

    -# The exact output format is implementation dependent. In this -# version, it's written as an ordinary XML file. -# -# @param elem An element tree or an individual element. + # maps uri:s to prefixes + namespaces = {} + if default_namespace: + namespaces[default_namespace] = "" -def dump(elem): - # debugging - if not isinstance(elem, ElementTree): - elem = ElementTree(elem) - elem.write(sys.stdout) - tail = elem.getroot().tail - if not tail or tail[-1] != "\n": - sys.stdout.write("\n") + def add_qname(qname): + # calculate serialized qname representation + try: + if qname[:1] == "{": + uri, tag = qname[1:].rsplit("}", 1) + prefix = namespaces.get(uri) + if prefix is None: + prefix = _namespace_map.get(uri) + if prefix is None: + prefix = "ns%d" % len(namespaces) + if prefix != "xml": + namespaces[uri] = prefix + if prefix: + qnames[qname] = "%s:%s" % (prefix, tag) + else: + qnames[qname] = tag # default element + else: + if default_namespace: + # FIXME: can this be handled in XML 1.0? + raise ValueError( + "cannot use non-qualified names with " + "default_namespace option" + ) + qnames[qname] = qname + except TypeError: + _raise_serialization_error(qname) -def _encode(s, encoding): - if encoding: - return s.encode(encoding) + # populate qname and namespaces table + try: + iterate = elem.iter + except AttributeError: + iterate = elem.getiterator # cET compatibility + for elem in iterate(): + tag = elem.tag + if isinstance(tag, QName) and tag.text not in qnames: + add_qname(tag.text) + elif isinstance(tag, str): + if tag not in qnames: + add_qname(tag) + elif tag is not None and tag is not Comment and tag is not PI: + _raise_serialization_error(tag) + for key, value in elem.items(): + if isinstance(key, QName): + key = key.text + if key not in qnames: + add_qname(key) + if isinstance(value, QName) and value.text not in qnames: + add_qname(value.text) + text = elem.text + if isinstance(text, QName) and text.text not in qnames: + add_qname(text.text) + return qnames, namespaces + +def _serialize_xml(write, elem, qnames, namespaces): + tag = elem.tag + text = elem.text + if tag is Comment: + write("" % text) + elif tag is ProcessingInstruction: + write("" % text) else: - return s - -_escape = re.compile(r"[&<>\"\u0080-\uffff]+") - -_escape_map = { - "&": "&", - "<": "<", - ">": ">", - '"': """, + tag = qnames[tag] + if tag is None: + if text: + write(_escape_cdata(text)) + for e in elem: + _serialize_xml(write, e, qnames, None) + else: + write("<" + tag) + items = list(elem.items()) + if items or namespaces: + if namespaces: + for v, k in sorted(namespaces.items(), + key=lambda x: x[1]): # sort on prefix + if k: + k = ":" + k + write(" xmlns%s=\"%s\"" % ( + k, + _escape_attrib(v) + )) + for k, v in sorted(items): # lexical order + if isinstance(k, QName): + k = k.text + if isinstance(v, QName): + v = qnames[v.text] + else: + v = _escape_attrib(v) + write(" %s=\"%s\"" % (qnames[k], v)) + if text or len(elem): + write(">") + if text: + write(_escape_cdata(text)) + for e in elem: + _serialize_xml(write, e, qnames, None) + write("") + else: + write(" />") + if elem.tail: + write(_escape_cdata(elem.tail)) + +HTML_EMPTY = ("area", "base", "basefont", "br", "col", "frame", "hr", + "img", "input", "isindex", "link", "meta" "param") + +try: + HTML_EMPTY = set(HTML_EMPTY) +except NameError: + pass + +def _serialize_html(write, elem, qnames, namespaces): + tag = elem.tag + text = elem.text + if tag is Comment: + write("" % _escape_cdata(text)) + elif tag is ProcessingInstruction: + write("" % _escape_cdata(text)) + else: + tag = qnames[tag] + if tag is None: + if text: + write(_escape_cdata(text)) + for e in elem: + _serialize_html(write, e, qnames, None) + else: + write("<" + tag) + items = list(elem.items()) + if items or namespaces: + if namespaces: + for v, k in sorted(namespaces.items(), + key=lambda x: x[1]): # sort on prefix + if k: + k = ":" + k + write(" xmlns%s=\"%s\"" % ( + k, + _escape_attrib(v) + )) + for k, v in sorted(items): # lexical order + if isinstance(k, QName): + k = k.text + if isinstance(v, QName): + v = qnames[v.text] + else: + v = _escape_attrib_html(v) + # FIXME: handle boolean attributes + write(" %s=\"%s\"" % (qnames[k], v)) + write(">") + tag = tag.lower() + if text: + if tag == "script" or tag == "style": + write(text) + else: + write(_escape_cdata(text)) + for e in elem: + _serialize_html(write, e, qnames, None) + if tag not in HTML_EMPTY: + write("") + if elem.tail: + write(_escape_cdata(elem.tail)) + +def _serialize_text(write, elem): + for part in elem.itertext(): + write(part) + if elem.tail: + write(elem.tail) + +_serialize = { + "xml": _serialize_xml, + "html": _serialize_html, + "text": _serialize_text, +# this optional method is imported at the end of the module +# "c14n": _serialize_c14n, } +## +# Registers a namespace prefix. The registry is global, and any +# existing mapping for either the given prefix or the namespace URI +# will be removed. +# +# @param prefix Namespace prefix. +# @param uri Namespace uri. Tags and attributes in this namespace +# will be serialized with the given prefix, if at all possible. +# @exception ValueError If the prefix is reserved, or is otherwise +# invalid. + +def register_namespace(prefix, uri): + if re.match("ns\d+$", prefix): + raise ValueError("Prefix format reserved for internal use") + for k, v in _namespace_map.items(): + if k == uri or v == prefix: + del _namespace_map[k] + _namespace_map[uri] = prefix + _namespace_map = { # "well-known" namespace prefixes "http://www.w3.org/XML/1998/namespace": "xml", "http://www.w3.org/1999/xhtml": "html", "http://www.w3.org/1999/02/22-rdf-syntax-ns#": "rdf", "http://schemas.xmlsoap.org/wsdl/": "wsdl", + # xml schema + "http://www.w3.org/2001/XMLSchema": "xs", + "http://www.w3.org/2001/XMLSchema-instance": "xsi", + # dublin core + "http://purl.org/dc/elements/1.1/": "dc", } def _raise_serialization_error(text): @@ -768,77 +1077,127 @@ "cannot serialize %r (type %s)" % (text, type(text).__name__) ) -def _encode_entity(text, pattern=_escape): - # map reserved and non-ascii characters to numerical entities - def escape_entities(m, map=_escape_map): - out = [] - append = out.append - for char in m.group(): - text = map.get(char) - if text is None: - text = "&#%d;" % ord(char) - append(text) - return "".join(out) +def _escape_cdata(text): + # escape character data try: - return _encode(pattern.sub(escape_entities, text), "ascii") - except TypeError: + # it's worth avoiding do-nothing calls for strings that are + # shorter than 500 character, or so. assume that's, by far, + # the most common case in most applications. + if "&" in text: + text = text.replace("&", "&") + if "<" in text: + text = text.replace("<", "<") + if ">" in text: + text = text.replace(">", ">") + return text + except (TypeError, AttributeError): _raise_serialization_error(text) -# -# the following functions assume an ascii-compatible encoding -# (or "utf-16") - -def _encode_cdata(text, encoding): - # escape character data +def _escape_attrib(text): + # escape attribute value try: - text = text.replace("&", "&") - text = text.replace("<", "<") - text = text.replace(">", ">") - if encoding: - return text.encode(encoding, "xmlcharrefreplace") - else: - return text + if "&" in text: + text = text.replace("&", "&") + if "<" in text: + text = text.replace("<", "<") + if ">" in text: + text = text.replace(">", ">") + if "\"" in text: + text = text.replace("\"", """) + if "\n" in text: + text = text.replace("\n", " ") + return text except (TypeError, AttributeError): _raise_serialization_error(text) -def _escape_attrib(text): +def _escape_attrib_html(text): # escape attribute value try: - text = text.replace("&", "&") - text = text.replace("'", "'") # FIXME: overkill - text = text.replace("\"", """) - text = text.replace("<", "<") - text = text.replace(">", ">") + if "&" in text: + text = text.replace("&", "&") + if ">" in text: + text = text.replace(">", ">") + if "\"" in text: + text = text.replace("\"", """) return text except (TypeError, AttributeError): _raise_serialization_error(text) -def fixtag(tag, namespaces): - # given a decorated tag (of the form {uri}tag), return prefixed - # tag and namespace declaration, if any - if isinstance(tag, QName): - tag = tag.text - namespace_uri, tag = tag[1:].split("}", 1) - prefix = namespaces.get(namespace_uri) - if prefix is None: - prefix = _namespace_map.get(namespace_uri) - if prefix is None: - prefix = "ns%d" % len(namespaces) - namespaces[namespace_uri] = prefix - if prefix == "xml": - xmlns = None - else: - xmlns = ("xmlns:%s" % prefix, namespace_uri) +# -------------------------------------------------------------------- + +## +# Generates a string representation of an XML element, including all +# subelements. If encoding is None, the return type is a string; +# otherwise it is a bytes array. +# +# @param element An Element instance. +# @keyparam encoding Optional output encoding (default is None). +# @keyparam method Optional output method ("xml", "html", "text" or +# "c14n"; default is "xml"). +# @return An (optionally) encoded string containing the XML data. +# @defreturn string + +def tostring(element, encoding=None, method=None): + class dummy: + pass + data = [] + file = dummy() + file.write = data.append + ElementTree(element).write(file, encoding, method=method) + if encoding: + return b"".join(data) else: - xmlns = None - return "%s:%s" % (prefix, tag), xmlns + return "".join(data) + +## +# Generates a string representation of an XML element, including all +# subelements. The string is returned as a sequence of string fragments. +# +# @param element An Element instance. +# @keyparam encoding Optional output encoding (default is US-ASCII). +# @keyparam method Optional output method ("xml", "html", "text" or +# "c14n"; default is "xml"). +# @return A sequence object containing the XML data. +# @defreturn sequence +# @since 1.3 + +def tostringlist(element, encoding=None, method=None): + class dummy: + pass + data = [] + file = dummy() + file.write = data.append + ElementTree(element).write(file, encoding, method=method) + # FIXME: merge small fragments into larger parts + return data + +## +# Writes an element tree or element structure to sys.stdout. This +# function should be used for debugging only. +#

    Download Python {{ release }} Documentation

    -{% if 'a' in release or 'b' in release or 'c' in release %} -

    We don't package the documentation for development releases for download. - Downloads will be available for the final release.

    - -{% else %} {% if last_updated %}

    Last updated on: {{ last_updated }}.

    {% endif %}

    To download an archive containing all the documents for this version of @@ -55,6 +54,4 @@

    If you have comments or suggestions for the Python documentation, please send email to docs at python.org.

    -{% endif %} - {% endblock %} Modified: python/branches/py3k-jit/Doc/using/mac.rst ============================================================================== --- python/branches/py3k-jit/Doc/using/mac.rst (original) +++ python/branches/py3k-jit/Doc/using/mac.rst Tue Mar 16 21:40:29 2010 @@ -143,7 +143,7 @@ the foundation of most modern Mac development. Information on PyObjC is available from http://pyobjc.sourceforge.net. -The standard Python GUI toolkit is :mod:`Tkinter`, based on the cross-platform +The standard Python GUI toolkit is :mod:`tkinter`, based on the cross-platform Tk toolkit (http://www.tcl.tk). An Aqua-native version of Tk is bundled with OS X by Apple, and the latest version can be downloaded and installed from http://www.activestate.com; it can also be built from source. Modified: python/branches/py3k-jit/Doc/whatsnew/2.2.rst ============================================================================== --- python/branches/py3k-jit/Doc/whatsnew/2.2.rst (original) +++ python/branches/py3k-jit/Doc/whatsnew/2.2.rst Tue Mar 16 21:40:29 2010 @@ -30,7 +30,7 @@ to the PEP for a particular new feature. -.. seealso (now defunct) +.. see also, now defunct http://www.unixreview.com/documents/s=1356/urm0109h/0109h.htm "What's So Special About Python 2.2?" is also about the new 2.2 features, and Modified: python/branches/py3k-jit/Doc/whatsnew/2.6.rst ============================================================================== --- python/branches/py3k-jit/Doc/whatsnew/2.6.rst (original) +++ python/branches/py3k-jit/Doc/whatsnew/2.6.rst Tue Mar 16 21:40:29 2010 @@ -111,9 +111,9 @@ :func:`reduce` function. Python 3.0 adds several new built-in functions and changes the -semantics of some existing built-ins. Functions that are new in 3.0 +semantics of some existing builtins. Functions that are new in 3.0 such as :func:`bin` have simply been added to Python 2.6, but existing -built-ins haven't been changed; instead, the :mod:`future_builtins` +builtins haven't been changed; instead, the :mod:`future_builtins` module has versions with the new 3.0 semantics. Code written to be compatible with 3.0 can do ``from future_builtins import hex, map`` as necessary. @@ -350,9 +350,10 @@ * The code in *BLOCK* is executed. -* If *BLOCK* raises an exception, the :meth:`__exit__(type, value, traceback)` - is called with the exception details, the same values returned by - :func:`sys.exc_info`. The method's return value controls whether the exception +* If *BLOCK* raises an exception, the context manager's :meth:`__exit__` method + is called with three arguments, the exception details (``type, value, traceback``, + the same values returned by :func:`sys.exc_info`, which can also be ``None`` + if no exception occurred). The method's return value controls whether an exception is re-raised: any false value re-raises the exception, and ``True`` will result in suppressing it. You'll only rarely want to suppress the exception, because if you do the author of the code containing the ':keyword:`with`' statement will @@ -463,7 +464,7 @@ with db_transaction(db) as cursor: ... -The :mod:`contextlib` module also has a :func:`nested(mgr1, mgr2, ...)` function +The :mod:`contextlib` module also has a ``nested(mgr1, mgr2, ...)`` function that combines a number of context managers so you don't need to write nested ':keyword:`with`' statements. In this example, the single ':keyword:`with`' statement both starts a database transaction and acquires a thread lock:: @@ -472,8 +473,9 @@ with nested (db_transaction(db), lock) as (cursor, locked): ... -Finally, the :func:`closing(object)` function returns *object* so that it can be -bound to a variable, and calls ``object.close`` at the end of the block. :: +Finally, the :func:`closing` function returns its argument so that it can be +bound to a variable, and calls the argument's ``.close()`` method at the end +of the block. :: import urllib, sys from contextlib import closing @@ -835,7 +837,7 @@ else: return str(self) -There's also a :func:`format` built-in that will format a single +There's also a :func:`format` builtin that will format a single value. It calls the type's :meth:`__format__` method with the provided specifier:: @@ -1166,7 +1168,7 @@ feature for Python. The ABC support consists of an :mod:`abc` module containing a metaclass called :class:`ABCMeta`, special handling of this metaclass by the :func:`isinstance` and :func:`issubclass` -built-ins, and a collection of basic ABCs that the Python developers +builtins, and a collection of basic ABCs that the Python developers think will be widely useful. Future versions of Python will probably add more ABCs. @@ -1320,9 +1322,9 @@ >>> 0b101111 47 -The :func:`oct` built-in still returns numbers +The :func:`oct` builtin still returns numbers prefixed with a leading zero, and a new :func:`bin` -built-in returns the binary representation for a number:: +builtin returns the binary representation for a number:: >>> oct(42) '052' @@ -1331,7 +1333,7 @@ >>> bin(173) '0b10101101' -The :func:`int` and :func:`long` built-ins will now accept the "0o" +The :func:`int` and :func:`long` builtins will now accept the "0o" and "0b" prefixes when base-8 or base-2 are requested, or when the *base* argument is zero (signalling that the base used should be determined from the string):: @@ -1417,7 +1419,7 @@ combined using bitwise operations such as ``&`` and ``|``, and can be used as array indexes and slice boundaries. -In Python 3.0, the PEP slightly redefines the existing built-ins +In Python 3.0, the PEP slightly redefines the existing builtins :func:`round`, :func:`math.floor`, :func:`math.ceil`, and adds a new one, :func:`math.trunc`, that's been backported to Python 2.6. :func:`math.trunc` rounds toward zero, returning the closest @@ -1525,7 +1527,7 @@ Previously this would have been a syntax error. (Contributed by Amaury Forgeot d'Arc; :issue:`3473`.) -* A new built-in, ``next(iterator, [default])`` returns the next item +* A new builtin, ``next(iterator, [default])`` returns the next item from the specified iterator. If the *default* argument is supplied, it will be returned if *iterator* has been exhausted; otherwise, the :exc:`StopIteration` exception will be raised. (Backported @@ -1954,9 +1956,9 @@ (Contributed by Phil Schwartz; :issue:`1221598`.) * The :func:`reduce` built-in function is also available in the - :mod:`functools` module. In Python 3.0, the built-in has been + :mod:`functools` module. In Python 3.0, the builtin has been dropped and :func:`reduce` is only available from :mod:`functools`; - currently there are no plans to drop the built-in in the 2.x series. + currently there are no plans to drop the builtin in the 2.x series. (Patched by Christian Heimes; :issue:`1739906`.) * When possible, the :mod:`getpass` module will now use @@ -2758,7 +2760,7 @@ * ``filter(predicate, iterable)``, ``map(func, iterable1, ...)``: the 3.0 versions - return iterators, unlike the 2.x built-ins which return lists. + return iterators, unlike the 2.x builtins which return lists. * ``hex(value)``, ``oct(value)``: instead of calling the :meth:`__hex__` or :meth:`__oct__` methods, these versions will Modified: python/branches/py3k-jit/Doc/whatsnew/2.7.rst ============================================================================== --- python/branches/py3k-jit/Doc/whatsnew/2.7.rst (original) +++ python/branches/py3k-jit/Doc/whatsnew/2.7.rst Tue Mar 16 21:40:29 2010 @@ -539,7 +539,7 @@ Contributed by Raymond Hettinger; :issue:`1696199`. - The new `OrderedDict` class is described in the earlier section + The new `~collections.OrderedDict` class is described in the earlier section :ref:`pep-0372`. The :class:`namedtuple` class now has an optional *rename* parameter. @@ -830,8 +830,8 @@ Light; :issue:`4285`.) :func:`sys.getwindowsversion` also returns a named tuple, - with attributes named :attr:`major`, :attr:`minor`, :attr:`build`, - :attr:`platform`:, :attr:`service_pack`, :attr:`service_pack_major`, + with attributes named :attr:`major`, :attr:`minor`, :attr:`build`, + :attr:`platform`, :attr:`service_pack`, :attr:`service_pack_major`, :attr:`service_pack_minor`, :attr:`suite_mask`, and :attr:`product_type`. (Contributed by Brian Curtin; :issue:`7766`.) Modified: python/branches/py3k-jit/Include/abstract.h ============================================================================== --- python/branches/py3k-jit/Include/abstract.h (original) +++ python/branches/py3k-jit/Include/abstract.h Tue Mar 16 21:40:29 2010 @@ -1232,6 +1232,9 @@ PyAPI_FUNC(int) _PyObject_RealIsSubclass(PyObject *derived, PyObject *cls); +PyAPI_FUNC(char *const *) _PySequence_BytesToCharpArray(PyObject* self); + +PyAPI_FUNC(void) _Py_FreeCharPArray(char *const array[]); #ifdef __cplusplus } Modified: python/branches/py3k-jit/Include/longobject.h ============================================================================== --- python/branches/py3k-jit/Include/longobject.h (original) +++ python/branches/py3k-jit/Include/longobject.h Tue Mar 16 21:40:29 2010 @@ -41,6 +41,23 @@ #define PyLong_AsSocket_t(fd) (SOCKET_T)PyLong_AsLongLong(fd) #endif +/* Issue #1983: pid_t can be longer than a C long on some systems */ +#if !defined(SIZEOF_PID_T) || SIZEOF_PID_T == SIZEOF_INT +#define _Py_PARSE_PID "i" +#define PyLong_FromPid PyLong_FromLong +#define PyLong_AsPid PyLong_AsLong +#elif SIZEOF_PID_T == SIZEOF_LONG +#define _Py_PARSE_PID "l" +#define PyLong_FromPid PyLong_FromLong +#define PyLong_AsPid PyLong_AsLong +#elif defined(SIZEOF_LONG_LONG) && SIZEOF_PID_T == SIZEOF_LONG_LONG +#define _Py_PARSE_PID "L" +#define PyLong_FromPid PyLong_FromLongLong +#define PyLong_AsPid PyLong_AsLongLong +#else +#error "sizeof(pid_t) is neither sizeof(int), sizeof(long) or sizeof(long long)" +#endif /* SIZEOF_PID_T */ + /* For use by intobject.c only */ PyAPI_DATA(unsigned char) _PyLong_DigitValue[256]; Modified: python/branches/py3k-jit/Include/pythonrun.h ============================================================================== --- python/branches/py3k-jit/Include/pythonrun.h (original) +++ python/branches/py3k-jit/Include/pythonrun.h Tue Mar 16 21:40:29 2010 @@ -81,6 +81,9 @@ PyAPI_FUNC(void) Py_Exit(int); +/* Restore signals that the interpreter has called SIG_IGN on to SIG_DFL. */ +PyAPI_FUNC(void) _Py_RestoreSignals(void); + PyAPI_FUNC(int) Py_FdIsInteractive(FILE *, const char *); /* Bootstrap */ Modified: python/branches/py3k-jit/Lib/_pyio.py ============================================================================== --- python/branches/py3k-jit/Lib/_pyio.py (original) +++ python/branches/py3k-jit/Lib/_pyio.py Tue Mar 16 21:40:29 2010 @@ -828,7 +828,7 @@ if self.closed: raise ValueError("seek on closed file") try: - pos = pos.__index__() + pos.__index__ except AttributeError as err: raise TypeError("an integer is required") from err if whence == 0: @@ -853,8 +853,13 @@ raise ValueError("truncate on closed file") if pos is None: pos = self._pos - elif pos < 0: - raise ValueError("negative truncate position %r" % (pos,)) + else: + try: + pos.__index__ + except AttributeError as err: + raise TypeError("an integer is required") from err + if pos < 0: + raise ValueError("negative truncate position %r" % (pos,)) del self._buffer[pos:] return pos @@ -1803,6 +1808,10 @@ if n is None: n = -1 decoder = self._decoder or self._get_decoder() + try: + n.__index__ + except AttributeError as err: + raise TypeError("an integer is required") from err if n < 0: # Read everything. result = (self._get_decoded_chars() + Modified: python/branches/py3k-jit/Lib/base64.py ============================================================================== --- python/branches/py3k-jit/Lib/base64.py (original) +++ python/branches/py3k-jit/Lib/base64.py Tue Mar 16 21:40:29 2010 @@ -1,4 +1,4 @@ -#! /usr/bin/env python +#! /usr/bin/env python3 """RFC 3548: Base16, Base32, Base64 Data Encodings""" Modified: python/branches/py3k-jit/Lib/cProfile.py ============================================================================== --- python/branches/py3k-jit/Lib/cProfile.py (original) +++ python/branches/py3k-jit/Lib/cProfile.py Tue Mar 16 21:40:29 2010 @@ -1,4 +1,4 @@ -#! /usr/bin/env python +#! /usr/bin/env python3 """Python interface for the 'lsprof' profiler. Compatible with the 'profile' module. Modified: python/branches/py3k-jit/Lib/compileall.py ============================================================================== --- python/branches/py3k-jit/Lib/compileall.py (original) +++ python/branches/py3k-jit/Lib/compileall.py Tue Mar 16 21:40:29 2010 @@ -17,7 +17,7 @@ import struct import imp -__all__ = ["compile_dir","compile_path"] +__all__ = ["compile_dir","compile_file","compile_path"] def compile_dir(dir, maxlevels=10, ddir=None, force=0, rx=None, quiet=0): @@ -48,47 +48,9 @@ dfile = os.path.join(ddir, name) else: dfile = None - if rx is not None: - mo = rx.search(fullname) - if mo: - continue - if os.path.isfile(fullname): - head, tail = name[:-3], name[-3:] - if tail == '.py': - if not force: - try: - mtime = int(os.stat(fullname).st_mtime) - expect = struct.pack('<4sl', imp.get_magic(), mtime) - cfile = fullname + (__debug__ and 'c' or 'o') - with open(cfile, 'rb') as chandle: - actual = chandle.read(8) - if expect == actual: - continue - except IOError: - pass - if not quiet: - print('Compiling', fullname, '...') - try: - ok = py_compile.compile(fullname, None, dfile, True) - except KeyboardInterrupt: - raise KeyboardInterrupt - except py_compile.PyCompileError as err: - if quiet: - print('*** Error compiling', fullname, '...') - else: - print('*** ', end='') - print(err.msg) - success = 0 - except (SyntaxError, UnicodeError, IOError) as e: - if quiet: - print('*** Error compiling', fullname, '...') - else: - print('*** ', end='') - print(e.__class__.__name__ + ':', e) - success = 0 - else: - if ok == 0: - success = 0 + if not os.path.isdir(fullname): + if not compile_file(fullname, ddir, force, rx, quiet): + success = 0 elif maxlevels > 0 and \ name != os.curdir and name != os.pardir and \ os.path.isdir(fullname) and \ @@ -98,6 +60,67 @@ success = 0 return success +def compile_file(fullname, ddir=None, force=0, rx=None, quiet=0): + """Byte-compile file. + file: the file to byte-compile + ddir: if given, purported directory name (this is the + directory name that will show up in error messages) + force: if 1, force compilation, even if timestamps are up-to-date + quiet: if 1, be quiet during compilation + + """ + success = 1 + name = os.path.basename(fullname) + if ddir is not None: + dfile = os.path.join(ddir, name) + else: + dfile = None + if rx is not None: + mo = rx.search(fullname) + if mo: + return success + if os.path.isfile(fullname): + head, tail = name[:-3], name[-3:] + if tail == '.py': + if not force: + try: + mtime = int(os.stat(fullname).st_mtime) + expect = struct.pack('<4sl', imp.get_magic(), mtime) + cfile = fullname + (__debug__ and 'c' or 'o') + with open(cfile, 'rb') as chandle: + actual = chandle.read(8) + if expect == actual: + return success + except IOError: + pass + if not quiet: + print('Compiling', fullname, '...') + try: + ok = py_compile.compile(fullname, None, dfile, True) + except KeyboardInterrupt: + raise KeyboardInterrupt + except py_compile.PyCompileError as err: + if quiet: + print('*** Error compiling', fullname, '...') + else: + print('*** ', end='') + # escape non-printable characters in msg + msg = err.msg.encode(sys.stdout.encoding, errors='backslashreplace') + msg = msg.decode(sys.stdout.encoding) + print(msg) + success = 0 + except (SyntaxError, UnicodeError, IOError) as e: + if quiet: + print('*** Error compiling', fullname, '...') + else: + print('*** ', end='') + print(e.__class__.__name__ + ':', e) + success = 0 + else: + if ok == 0: + success = 0 + return success + def compile_path(skip_curdir=1, maxlevels=0, force=0, quiet=0): """Byte-compile all module on sys.path. @@ -118,15 +141,34 @@ force, quiet=quiet) return success +def expand_args(args, flist): + """read names in flist and append to args""" + expanded = args[:] + if flist: + try: + if flist == '-': + fd = sys.stdin + else: + fd = open(flist) + while 1: + line = fd.readline() + if not line: + break + expanded.append(line[:-1]) + except IOError: + print("Error reading file list %s" % flist) + raise + return expanded + def main(): """Script main program.""" import getopt try: - opts, args = getopt.getopt(sys.argv[1:], 'lfqd:x:') + opts, args = getopt.getopt(sys.argv[1:], 'lfqd:x:i:') except getopt.error as msg: print(msg) print("usage: python compileall.py [-l] [-f] [-q] [-d destdir] " \ - "[-x regexp] [directory ...]") + "[-x regexp] [-i list] [directory|file ...]") print("-l: don't recurse down") print("-f: force rebuild even if timestamps are up-to-date") print("-q: quiet operation") @@ -134,12 +176,14 @@ print(" if no directory arguments, -l sys.path is assumed") print("-x regexp: skip files matching the regular expression regexp") print(" the regexp is searched for in the full path of the file") + print("-i list: expand list with its content (file and directory names)") sys.exit(2) maxlevels = 10 ddir = None force = 0 quiet = 0 rx = None + flist = None for o, a in opts: if o == '-l': maxlevels = 0 if o == '-d': ddir = a @@ -148,17 +192,28 @@ if o == '-x': import re rx = re.compile(a) + if o == '-i': flist = a if ddir: - if len(args) != 1: + if len(args) != 1 and not os.path.isdir(args[0]): print("-d destdir require exactly one directory argument") sys.exit(2) success = 1 try: - if args: - for dir in args: - if not compile_dir(dir, maxlevels, ddir, - force, rx, quiet): - success = 0 + if args or flist: + try: + if flist: + args = expand_args(args, flist) + except IOError: + success = 0 + if success: + for arg in args: + if os.path.isdir(arg): + if not compile_dir(arg, maxlevels, ddir, + force, rx, quiet): + success = 0 + else: + if not compile_file(arg, ddir, force, rx, quiet): + success = 0 else: success = compile_path() except KeyboardInterrupt: Modified: python/branches/py3k-jit/Lib/ctypes/util.py ============================================================================== --- python/branches/py3k-jit/Lib/ctypes/util.py (original) +++ python/branches/py3k-jit/Lib/ctypes/util.py Tue Mar 16 21:40:29 2010 @@ -205,7 +205,7 @@ # XXX assuming GLIBC's ldconfig (with option -p) expr = r'(\S+)\s+\((%s(?:, OS ABI:[^\)]*)?)\)[^/]*(/[^\(\)\s]*lib%s\.[^\(\)\s]*)' \ % (abi_type, re.escape(name)) - with contextlib.closing(os.popen('/sbin/ldconfig -p 2>/dev/null')) as f: + with contextlib.closing(os.popen('LANG=C /sbin/ldconfig -p 2>/dev/null')) as f: data = f.read() res = re.search(expr, data) if not res: Modified: python/branches/py3k-jit/Lib/difflib.py ============================================================================== --- python/branches/py3k-jit/Lib/difflib.py (original) +++ python/branches/py3k-jit/Lib/difflib.py Tue Mar 16 21:40:29 2010 @@ -1,4 +1,4 @@ -#! /usr/bin/env python +#! /usr/bin/env python3 """ Module difflib -- helpers for computing deltas between objects. Modified: python/branches/py3k-jit/Lib/distutils/tests/test_bdist.py ============================================================================== --- python/branches/py3k-jit/Lib/distutils/tests/test_bdist.py (original) +++ python/branches/py3k-jit/Lib/distutils/tests/test_bdist.py Tue Mar 16 21:40:29 2010 @@ -5,6 +5,8 @@ import tempfile import shutil +from test.support import run_unittest + from distutils.core import Distribution from distutils.command.bdist import bdist from distutils.tests import support @@ -40,4 +42,4 @@ return unittest.makeSuite(BuildTestCase) if __name__ == '__main__': - test_support.run_unittest(test_suite()) + run_unittest(test_suite()) Modified: python/branches/py3k-jit/Lib/distutils/tests/test_bdist_dumb.py ============================================================================== --- python/branches/py3k-jit/Lib/distutils/tests/test_bdist_dumb.py (original) +++ python/branches/py3k-jit/Lib/distutils/tests/test_bdist_dumb.py Tue Mar 16 21:40:29 2010 @@ -11,6 +11,8 @@ except ImportError: zlib = None +from test.support import run_unittest + from distutils.core import Distribution from distutils.command.bdist_dumb import bdist_dumb from distutils.tests import support @@ -100,4 +102,4 @@ return unittest.makeSuite(BuildDumbTestCase) if __name__ == '__main__': - test_support.run_unittest(test_suite()) + run_unittest(test_suite()) Modified: python/branches/py3k-jit/Lib/distutils/tests/test_bdist_msi.py ============================================================================== --- python/branches/py3k-jit/Lib/distutils/tests/test_bdist_msi.py (original) +++ python/branches/py3k-jit/Lib/distutils/tests/test_bdist_msi.py Tue Mar 16 21:40:29 2010 @@ -2,6 +2,8 @@ import unittest import sys +from test.support import run_unittest + from distutils.tests import support @unittest.skipUnless(sys.platform=="win32", "These tests are only for win32") @@ -20,4 +22,4 @@ return unittest.makeSuite(BDistMSITestCase) if __name__ == '__main__': - test_support.run_unittest(test_suite()) + run_unittest(test_suite()) Modified: python/branches/py3k-jit/Lib/distutils/tests/test_bdist_rpm.py ============================================================================== --- python/branches/py3k-jit/Lib/distutils/tests/test_bdist_rpm.py (original) +++ python/branches/py3k-jit/Lib/distutils/tests/test_bdist_rpm.py Tue Mar 16 21:40:29 2010 @@ -6,6 +6,8 @@ import tempfile import shutil +from test.support import run_unittest + from distutils.core import Distribution from distutils.command.bdist_rpm import bdist_rpm from distutils.tests import support @@ -122,4 +124,4 @@ return unittest.makeSuite(BuildRpmTestCase) if __name__ == '__main__': - test_support.run_unittest(test_suite()) + run_unittest(test_suite()) Modified: python/branches/py3k-jit/Lib/distutils/tests/test_bdist_wininst.py ============================================================================== --- python/branches/py3k-jit/Lib/distutils/tests/test_bdist_wininst.py (original) +++ python/branches/py3k-jit/Lib/distutils/tests/test_bdist_wininst.py Tue Mar 16 21:40:29 2010 @@ -1,6 +1,8 @@ """Tests for distutils.command.bdist_wininst.""" import unittest +from test.support import run_unittest + from distutils.command.bdist_wininst import bdist_wininst from distutils.tests import support @@ -27,4 +29,4 @@ return unittest.makeSuite(BuildWinInstTestCase) if __name__ == '__main__': - test_support.run_unittest(test_suite()) + run_unittest(test_suite()) Modified: python/branches/py3k-jit/Lib/distutils/tests/test_cmd.py ============================================================================== --- python/branches/py3k-jit/Lib/distutils/tests/test_cmd.py (original) +++ python/branches/py3k-jit/Lib/distutils/tests/test_cmd.py Tue Mar 16 21:40:29 2010 @@ -1,7 +1,7 @@ """Tests for distutils.cmd.""" import unittest import os -from test.support import captured_stdout +from test.support import captured_stdout, run_unittest from distutils.cmd import Command from distutils.dist import Distribution @@ -124,4 +124,4 @@ return unittest.makeSuite(CommandTestCase) if __name__ == '__main__': - test_support.run_unittest(test_suite()) + run_unittest(test_suite()) Modified: python/branches/py3k-jit/Lib/distutils/tests/test_cygwinccompiler.py ============================================================================== --- python/branches/py3k-jit/Lib/distutils/tests/test_cygwinccompiler.py (original) +++ python/branches/py3k-jit/Lib/distutils/tests/test_cygwinccompiler.py Tue Mar 16 21:40:29 2010 @@ -6,7 +6,7 @@ import warnings import sysconfig -from test.support import check_warnings +from test.support import check_warnings, run_unittest from test.support import captured_stdout from distutils import cygwinccompiler @@ -109,4 +109,4 @@ return unittest.makeSuite(CygwinCCompilerTestCase) if __name__ == '__main__': - test_support.run_unittest(test_suite()) + run_unittest(test_suite()) Modified: python/branches/py3k-jit/Lib/distutils/tests/test_emxccompiler.py ============================================================================== --- python/branches/py3k-jit/Lib/distutils/tests/test_emxccompiler.py (original) +++ python/branches/py3k-jit/Lib/distutils/tests/test_emxccompiler.py Tue Mar 16 21:40:29 2010 @@ -4,7 +4,7 @@ import os import warnings -from test.support import check_warnings +from test.support import check_warnings, run_unittest from test.support import captured_stdout from distutils.emxccompiler import get_versions @@ -30,4 +30,4 @@ return unittest.makeSuite(EmxCCompilerTestCase) if __name__ == '__main__': - test_support.run_unittest(test_suite()) + run_unittest(test_suite()) Modified: python/branches/py3k-jit/Lib/distutils/tests/test_sysconfig.py ============================================================================== --- python/branches/py3k-jit/Lib/distutils/tests/test_sysconfig.py (original) +++ python/branches/py3k-jit/Lib/distutils/tests/test_sysconfig.py Tue Mar 16 21:40:29 2010 @@ -2,6 +2,7 @@ import os import test import unittest +import shutil from distutils import sysconfig from distutils.tests import support Modified: python/branches/py3k-jit/Lib/email/test/test_email_torture.py ============================================================================== --- python/branches/py3k-jit/Lib/email/test/test_email_torture.py (original) +++ python/branches/py3k-jit/Lib/email/test/test_email_torture.py Tue Mar 16 21:40:29 2010 @@ -13,7 +13,7 @@ from types import ListType from email.test.test_email import TestEmailBase -from test.support import TestSkipped +from test.support import TestSkipped, run_unittest import email from email import __file__ as testfile @@ -128,7 +128,7 @@ def test_main(): for testclass in _testclasses(): - support.run_unittest(testclass) + run_unittest(testclass) Modified: python/branches/py3k-jit/Lib/genericpath.py ============================================================================== --- python/branches/py3k-jit/Lib/genericpath.py (original) +++ python/branches/py3k-jit/Lib/genericpath.py Tue Mar 16 21:40:29 2010 @@ -15,7 +15,7 @@ def exists(path): """Test whether a path exists. Returns False for broken symbolic links""" try: - st = os.stat(path) + os.stat(path) except os.error: return False return True Modified: python/branches/py3k-jit/Lib/http/cookies.py ============================================================================== --- python/branches/py3k-jit/Lib/http/cookies.py (original) +++ python/branches/py3k-jit/Lib/http/cookies.py Tue Mar 16 21:40:29 2010 @@ -1,4 +1,4 @@ -#!/usr/bin/env python +#!/usr/bin/env python3 # #### Modified: python/branches/py3k-jit/Lib/idlelib/PyShell.py ============================================================================== --- python/branches/py3k-jit/Lib/idlelib/PyShell.py (original) +++ python/branches/py3k-jit/Lib/idlelib/PyShell.py Tue Mar 16 21:40:29 2010 @@ -1,4 +1,4 @@ -#! /usr/bin/env python +#! /usr/bin/env python3 import os import os.path Modified: python/branches/py3k-jit/Lib/keyword.py ============================================================================== --- python/branches/py3k-jit/Lib/keyword.py (original) +++ python/branches/py3k-jit/Lib/keyword.py Tue Mar 16 21:40:29 2010 @@ -1,4 +1,4 @@ -#! /usr/bin/env python +#! /usr/bin/env python3 """Keywords (from "graminit.c") Modified: python/branches/py3k-jit/Lib/lib2to3/pgen2/token.py ============================================================================== --- python/branches/py3k-jit/Lib/lib2to3/pgen2/token.py (original) +++ python/branches/py3k-jit/Lib/lib2to3/pgen2/token.py Tue Mar 16 21:40:29 2010 @@ -1,4 +1,4 @@ -#! /usr/bin/env python +#! /usr/bin/env python3 """Token constants (from "token.h").""" Modified: python/branches/py3k-jit/Lib/lib2to3/tests/pytree_idempotency.py ============================================================================== --- python/branches/py3k-jit/Lib/lib2to3/tests/pytree_idempotency.py (original) +++ python/branches/py3k-jit/Lib/lib2to3/tests/pytree_idempotency.py Tue Mar 16 21:40:29 2010 @@ -1,4 +1,4 @@ -#!/usr/bin/env python +#!/usr/bin/env python3 # Copyright 2006 Google, Inc. All Rights Reserved. # Licensed to PSF under a Contributor Agreement. Modified: python/branches/py3k-jit/Lib/logging/__init__.py ============================================================================== --- python/branches/py3k-jit/Lib/logging/__init__.py (original) +++ python/branches/py3k-jit/Lib/logging/__init__.py Tue Mar 16 21:40:29 2010 @@ -432,6 +432,12 @@ s = s[:-1] return s + def usesTime(self): + """ + Check if the format uses the creation time of the record. + """ + return self._fmt.find("%(asctime)") >= 0 + def format(self, record): """ Format the specified record as text. @@ -440,13 +446,13 @@ string formatting operation which yields the returned string. Before formatting the dictionary, a couple of preparatory steps are carried out. The message attribute of the record is computed - using LogRecord.getMessage(). If the formatting string contains - "%(asctime)", formatTime() is called to format the event time. - If there is exception information, it is formatted using - formatException() and appended to the message. + using LogRecord.getMessage(). If the formatting string uses the + time (as determined by a call to usesTime(), formatTime() is + called to format the event time. If there is exception information, + it is formatted using formatException() and appended to the message. """ record.message = record.getMessage() - if self._fmt.find("%(asctime)") >= 0: + if self.usesTime(): record.asctime = self.formatTime(record, self.datefmt) s = self._fmt % record.__dict__ if record.exc_info: Modified: python/branches/py3k-jit/Lib/logging/config.py ============================================================================== --- python/branches/py3k-jit/Lib/logging/config.py (original) +++ python/branches/py3k-jit/Lib/logging/config.py Tue Mar 16 21:40:29 2010 @@ -261,7 +261,6 @@ logger.disabled = 1 - IDENTIFIER = re.compile('^[a-z_][a-z0-9_]*$', re.I) @@ -448,7 +447,7 @@ isinstance(value, tuple): value = ConvertingTuple(value) value.configurator = self - elif isinstance(value, str): + elif isinstance(value, str): # str for py3k m = self.CONVERT_PATTERN.match(value) if m: d = m.groupdict() @@ -474,6 +473,12 @@ setattr(result, name, value) return result + def as_tuple(self, value): + """Utility function which converts lists to tuples.""" + if isinstance(value, list): + value = tuple(value) + return value + class DictConfigurator(BaseConfigurator): """ Configure logging using a dictionary-like object to describe the @@ -484,6 +489,10 @@ """Do the configuration.""" config = self.config + if 'version' not in config: + raise ValueError("dictionary doesn't specify a version") + if config['version'] != 1: + raise ValueError("Unsupported version: %s" % config['version']) incremental = config.pop('incremental', False) EMPTY_DICT = {} logging._acquireLock() @@ -684,6 +693,12 @@ except Exception as e: raise ValueError('Unable to set target handler ' '%r: %s' % (config['target'], e)) + elif issubclass(klass, logging.handlers.SMTPHandler) and\ + 'mailhost' in config: + config['mailhost'] = self.as_tuple(config['mailhost']) + elif issubclass(klass, logging.handlers.SysLogHandler) and\ + 'address' in config: + config['address'] = self.as_tuple(config['address']) factory = klass kwargs = dict([(k, config[k]) for k in config if valid_ident(k)]) try: @@ -788,7 +803,7 @@ chunk = self.connection.recv(slen) while len(chunk) < slen: chunk = chunk + conn.recv(slen - len(chunk)) - chunk = chunk.decode('utf-8') + chunk = chunk.decode("utf-8") try: import json d =json.loads(chunk) Modified: python/branches/py3k-jit/Lib/logging/handlers.py ============================================================================== --- python/branches/py3k-jit/Lib/logging/handlers.py (original) +++ python/branches/py3k-jit/Lib/logging/handlers.py Tue Mar 16 21:40:29 2010 @@ -25,7 +25,7 @@ """ import logging, socket, os, pickle, struct, time, re -from stat import ST_DEV, ST_INO +from stat import ST_DEV, ST_INO, ST_MTIME try: import codecs @@ -203,7 +203,11 @@ self.extMatch = re.compile(self.extMatch, re.ASCII) self.interval = self.interval * interval # multiply by units requested - self.rolloverAt = self.computeRollover(int(time.time())) + if os.path.exists(filename): + t = os.stat(filename)[ST_MTIME] + else: + t = int(time.time()) + self.rolloverAt = self.computeRollover(t) def computeRollover(self, currentTime): """ Modified: python/branches/py3k-jit/Lib/mailbox.py ============================================================================== --- python/branches/py3k-jit/Lib/mailbox.py (original) +++ python/branches/py3k-jit/Lib/mailbox.py Tue Mar 16 21:40:29 2010 @@ -1,4 +1,4 @@ -#! /usr/bin/env python +#! /usr/bin/env python3 """Read/write support for Maildir, mbox, MH, Babyl, and MMDF mailboxes.""" Modified: python/branches/py3k-jit/Lib/mimetypes.py ============================================================================== --- python/branches/py3k-jit/Lib/mimetypes.py (original) +++ python/branches/py3k-jit/Lib/mimetypes.py Tue Mar 16 21:40:29 2010 @@ -538,7 +538,6 @@ if __name__ == '__main__': - import sys import getopt USAGE = """\ Modified: python/branches/py3k-jit/Lib/pdb.py ============================================================================== --- python/branches/py3k-jit/Lib/pdb.py (original) +++ python/branches/py3k-jit/Lib/pdb.py Tue Mar 16 21:40:29 2010 @@ -1,4 +1,4 @@ -#! /usr/bin/env python +#! /usr/bin/env python3 """A Python debugger.""" Modified: python/branches/py3k-jit/Lib/platform.py ============================================================================== --- python/branches/py3k-jit/Lib/platform.py (original) +++ python/branches/py3k-jit/Lib/platform.py Tue Mar 16 21:40:29 2010 @@ -1,4 +1,4 @@ -#!/usr/bin/env python +#!/usr/bin/env python3 """ This module tries to retrieve as much platform-identifying data as possible. It makes this information available via function APIs. Modified: python/branches/py3k-jit/Lib/posixpath.py ============================================================================== --- python/branches/py3k-jit/Lib/posixpath.py (original) +++ python/branches/py3k-jit/Lib/posixpath.py Tue Mar 16 21:40:29 2010 @@ -158,7 +158,7 @@ def lexists(path): """Test whether a path exists. Returns True for broken symbolic links""" try: - st = os.lstat(path) + os.lstat(path) except os.error: return False return True Modified: python/branches/py3k-jit/Lib/profile.py ============================================================================== --- python/branches/py3k-jit/Lib/profile.py (original) +++ python/branches/py3k-jit/Lib/profile.py Tue Mar 16 21:40:29 2010 @@ -1,4 +1,4 @@ -#! /usr/bin/env python +#! /usr/bin/env python3 # # Class for profiling python code. rev 1.0 6/2/94 # Modified: python/branches/py3k-jit/Lib/pydoc.py ============================================================================== --- python/branches/py3k-jit/Lib/pydoc.py (original) +++ python/branches/py3k-jit/Lib/pydoc.py Tue Mar 16 21:40:29 2010 @@ -1,4 +1,4 @@ -#!/usr/bin/env python +#!/usr/bin/env python3 # -*- coding: latin-1 -*- """Generate Python documentation in HTML or text for interactive use. Modified: python/branches/py3k-jit/Lib/quopri.py ============================================================================== --- python/branches/py3k-jit/Lib/quopri.py (original) +++ python/branches/py3k-jit/Lib/quopri.py Tue Mar 16 21:40:29 2010 @@ -1,4 +1,4 @@ -#! /usr/bin/env python +#! /usr/bin/env python3 """Conversions to/from quoted-printable transport encoding as per RFC 1521.""" Modified: python/branches/py3k-jit/Lib/site.py ============================================================================== --- python/branches/py3k-jit/Lib/site.py (original) +++ python/branches/py3k-jit/Lib/site.py Tue Mar 16 21:40:29 2010 @@ -489,11 +489,12 @@ pass except Exception as err: if os.environ.get("PYTHONVERBOSE"): - raise - sys.stderr.write( - "Error in sitecustomize; set PYTHONVERBOSE for traceback:\n" - "%s: %s\n" % - (err.__class__.__name__, err)) + sys.excepthook(*sys.exc_info()) + else: + sys.stderr.write( + "Error in sitecustomize; set PYTHONVERBOSE for traceback:\n" + "%s: %s\n" % + (err.__class__.__name__, err)) def execusercustomize(): @@ -502,6 +503,14 @@ import usercustomize except ImportError: pass + except Exception as err: + if os.environ.get("PYTHONVERBOSE"): + sys.excepthook(*sys.exc_info()) + else: + sys.stderr.write( + "Error in usercustomize; set PYTHONVERBOSE for traceback:\n" + "%s: %s\n" % + (err.__class__.__name__, err)) def main(): Modified: python/branches/py3k-jit/Lib/smtpd.py ============================================================================== --- python/branches/py3k-jit/Lib/smtpd.py (original) +++ python/branches/py3k-jit/Lib/smtpd.py Tue Mar 16 21:40:29 2010 @@ -1,4 +1,4 @@ -#! /usr/bin/env python +#! /usr/bin/env python3 """An RFC 2821 smtp proxy. Usage: %(program)s [options] [localhost:localport [remotehost:remoteport]] Modified: python/branches/py3k-jit/Lib/smtplib.py ============================================================================== --- python/branches/py3k-jit/Lib/smtplib.py (original) +++ python/branches/py3k-jit/Lib/smtplib.py Tue Mar 16 21:40:29 2010 @@ -1,4 +1,4 @@ -#! /usr/bin/env python +#! /usr/bin/env python3 '''SMTP/ESMTP client class. Modified: python/branches/py3k-jit/Lib/sqlite3/test/regression.py ============================================================================== --- python/branches/py3k-jit/Lib/sqlite3/test/regression.py (original) +++ python/branches/py3k-jit/Lib/sqlite3/test/regression.py Tue Mar 16 21:40:29 2010 @@ -242,8 +242,7 @@ Verifies that running a PRAGMA statement that does an autocommit does work. This did not work in 2.5.3/2.5.4. """ - con = sqlite.connect(":memory:") - cur = con.cursor() + cur = self.con.cursor() cur.execute("create table foo(bar)") cur.execute("insert into foo(bar) values (5)") @@ -263,11 +262,17 @@ def __hash__(self): raise TypeError() var = NotHashable() - con = sqlite.connect(":memory:") - self.assertRaises(TypeError, con.create_function, var) - self.assertRaises(TypeError, con.create_aggregate, var) - self.assertRaises(TypeError, con.set_authorizer, var) - self.assertRaises(TypeError, con.set_progress_handler, var) + self.assertRaises(TypeError, self.con.create_function, var) + self.assertRaises(TypeError, self.con.create_aggregate, var) + self.assertRaises(TypeError, self.con.set_authorizer, var) + self.assertRaises(TypeError, self.con.set_progress_handler, var) + + def CheckConnectionCall(self): + """ + Call a connection with a non-string SQL request: check error handling + of the statement constructor. + """ + self.assertRaises(sqlite.Warning, self.con, 1) def suite(): regression_suite = unittest.makeSuite(RegressionTests, "Check") Modified: python/branches/py3k-jit/Lib/subprocess.py ============================================================================== --- python/branches/py3k-jit/Lib/subprocess.py (original) +++ python/branches/py3k-jit/Lib/subprocess.py Tue Mar 16 21:40:29 2010 @@ -29,7 +29,8 @@ stdin=None, stdout=None, stderr=None, preexec_fn=None, close_fds=False, shell=False, cwd=None, env=None, universal_newlines=False, - startupinfo=None, creationflags=0): + startupinfo=None, creationflags=0, + restore_signals=True, start_new_session=False): Arguments are: @@ -72,8 +73,11 @@ stderr data from the applications should be captured into the same file handle as for stdout. -If preexec_fn is set to a callable object, this object will be called -in the child process just before the child is executed. +On UNIX, if preexec_fn is set to a callable object, this object will be +called in the child process just before the child is executed. The use +of preexec_fn is not thread safe, using it in the presence of threads +could lead to a deadlock in the child process before the new executable +is executed. If close_fds is true, all file descriptors except 0, 1 and 2 will be closed before the child process is executed. @@ -84,6 +88,14 @@ If cwd is not None, the current directory will be changed to cwd before the child is executed. +On UNIX, if restore_signals is True all signals that Python sets to +SIG_IGN are restored to SIG_DFL in the child process before the exec. +Currently this includes the SIGPIPE, SIGXFZ and SIGXFSZ signals. This +parameter does nothing on Windows. + +On UNIX, if start_new_session is True, the setsid() system call will be made +in the child process prior to executing the command. + If env is not None, it defines the environment variables for the new process. @@ -326,6 +338,7 @@ import traceback import gc import signal +import builtins # Exception classes used by this module. class CalledProcessError(Exception): @@ -375,6 +388,15 @@ import fcntl import pickle + try: + import _posixsubprocess + except ImportError: + _posixsubprocess = None + import warnings + warnings.warn("The _posixsubprocess module is not being used. " + "Child process reliability may suffer if your " + "program uses threads.", RuntimeWarning) + # When select or poll has indicated that the file is writable, # we can write up to _PIPE_BUF bytes without risk of blocking. # POSIX defines PIPE_BUF as >= 512. @@ -596,7 +618,8 @@ stdin=None, stdout=None, stderr=None, preexec_fn=None, close_fds=False, shell=False, cwd=None, env=None, universal_newlines=False, - startupinfo=None, creationflags=0): + startupinfo=None, creationflags=0, + restore_signals=True, start_new_session=False): """Create new Popen instance.""" _cleanup() @@ -642,7 +665,7 @@ # On POSIX, the child objects are file descriptors. On # Windows, these are Windows file handles. The parent objects # are file descriptors on both platforms. The parent objects - # are None when not using PIPEs. The child objects are None + # are -1 when not using PIPEs. The child objects are -1 # when not redirecting. (p2cread, p2cwrite, @@ -654,27 +677,28 @@ startupinfo, creationflags, shell, p2cread, p2cwrite, c2pread, c2pwrite, - errread, errwrite) + errread, errwrite, + restore_signals, start_new_session) if mswindows: - if p2cwrite is not None: + if p2cwrite != -1: p2cwrite = msvcrt.open_osfhandle(p2cwrite.Detach(), 0) - if c2pread is not None: + if c2pread != -1: c2pread = msvcrt.open_osfhandle(c2pread.Detach(), 0) - if errread is not None: + if errread != -1: errread = msvcrt.open_osfhandle(errread.Detach(), 0) if bufsize == 0: bufsize = 1 # Nearly unbuffered (XXX for now) - if p2cwrite is not None: + if p2cwrite != -1: self.stdin = io.open(p2cwrite, 'wb', bufsize) if self.universal_newlines: self.stdin = io.TextIOWrapper(self.stdin) - if c2pread is not None: + if c2pread != -1: self.stdout = io.open(c2pread, 'rb', bufsize) if universal_newlines: self.stdout = io.TextIOWrapper(self.stdout) - if errread is not None: + if errread != -1: self.stderr = io.open(errread, 'rb', bufsize) if universal_newlines: self.stderr = io.TextIOWrapper(self.stderr) @@ -739,11 +763,11 @@ p2cread, p2cwrite, c2pread, c2pwrite, errread, errwrite """ if stdin is None and stdout is None and stderr is None: - return (None, None, None, None, None, None) + return (-1, -1, -1, -1, -1, -1) - p2cread, p2cwrite = None, None - c2pread, c2pwrite = None, None - errread, errwrite = None, None + p2cread, p2cwrite = -1, -1 + c2pread, c2pwrite = -1, -1 + errread, errwrite = -1, -1 if stdin is None: p2cread = GetStdHandle(STD_INPUT_HANDLE) @@ -819,7 +843,8 @@ startupinfo, creationflags, shell, p2cread, p2cwrite, c2pread, c2pwrite, - errread, errwrite): + errread, errwrite, + unused_restore_signals, unused_start_new_session): """Execute program (MS Windows version)""" if not isinstance(args, str): @@ -884,11 +909,11 @@ # output pipe are maintained in this process or else the # pipe will not close when the child process exits and the # ReadFile will hang. - if p2cread is not None: + if p2cread != -1: p2cread.Close() - if c2pwrite is not None: + if c2pwrite != -1: c2pwrite.Close() - if errwrite is not None: + if errwrite != -1: errwrite.Close() @@ -905,7 +930,7 @@ """Wait for child process to terminate. Returns returncode attribute.""" if self.returncode is None: - obj = WaitForSingleObject(self._handle, INFINITE) + WaitForSingleObject(self._handle, INFINITE) self.returncode = GetExitCodeProcess(self._handle) return self.returncode @@ -973,9 +998,9 @@ """Construct and return tuple with IO objects: p2cread, p2cwrite, c2pread, c2pwrite, errread, errwrite """ - p2cread, p2cwrite = None, None - c2pread, c2pwrite = None, None - errread, errwrite = None, None + p2cread, p2cwrite = -1, -1 + c2pread, c2pwrite = -1, -1 + errread, errwrite = -1, -1 if stdin is None: pass @@ -1034,7 +1059,8 @@ startupinfo, creationflags, shell, p2cread, p2cwrite, c2pread, c2pwrite, - errread, errwrite): + errread, errwrite, + restore_signals, start_new_session): """Execute program (POSIX version)""" if isinstance(args, str): @@ -1048,113 +1074,190 @@ if executable is None: executable = args[0] - # For transferring possible exec failure from child to parent - # The first char specifies the exception type: 0 means - # OSError, 1 means some other error. + # For transferring possible exec failure from child to parent. + # Data format: "exception name:hex errno:description" + # Pickle is not used; it is complex and involves memory allocation. errpipe_read, errpipe_write = os.pipe() try: try: self._set_cloexec_flag(errpipe_write) - gc_was_enabled = gc.isenabled() - # Disable gc to avoid bug where gc -> file_dealloc -> - # write to stderr -> hang. http://bugs.python.org/issue1336 - gc.disable() - try: - self.pid = os.fork() - except: - if gc_was_enabled: - gc.enable() - raise - self._child_created = True - if self.pid == 0: - # Child + if _posixsubprocess: + fs_encoding = sys.getfilesystemencoding() + def fs_encode(s): + """Encode s for use in the env, fs or cmdline.""" + return s.encode(fs_encoding, 'surrogateescape') + + # We must avoid complex work that could involve + # malloc or free in the child process to avoid + # potential deadlocks, thus we do all this here. + # and pass it to fork_exec() + + if env: + env_list = [fs_encode(k) + b'=' + fs_encode(v) + for k, v in env.items()] + else: + env_list = None # Use execv instead of execve. + if os.path.dirname(executable): + executable_list = (fs_encode(executable),) + else: + # This matches the behavior of os._execvpe(). + path_list = os.get_exec_path(env) + executable_list = (os.path.join(dir, executable) + for dir in path_list) + executable_list = tuple(fs_encode(exe) + for exe in executable_list) + self.pid = _posixsubprocess.fork_exec( + args, executable_list, + close_fds, cwd, env_list, + p2cread, p2cwrite, c2pread, c2pwrite, + errread, errwrite, + errpipe_read, errpipe_write, + restore_signals, start_new_session, preexec_fn) + else: + # Pure Python implementation: It is not thread safe. + # This implementation may deadlock in the child if your + # parent process has any other threads running. + + gc_was_enabled = gc.isenabled() + # Disable gc to avoid bug where gc -> file_dealloc -> + # write to stderr -> hang. See issue1336 + gc.disable() try: - # Close parent's pipe ends - if p2cwrite is not None: - os.close(p2cwrite) - if c2pread is not None: - os.close(c2pread) - if errread is not None: - os.close(errread) - os.close(errpipe_read) - - # Dup fds for child - if p2cread is not None: - os.dup2(p2cread, 0) - if c2pwrite is not None: - os.dup2(c2pwrite, 1) - if errwrite is not None: - os.dup2(errwrite, 2) - - # Close pipe fds. Make sure we don't close the - # same fd more than once, or standard fds. - if p2cread is not None and p2cread not in (0,): - os.close(p2cread) - if c2pwrite is not None and \ - c2pwrite not in (p2cread, 1): - os.close(c2pwrite) - if (errwrite is not None and - errwrite not in (p2cread, c2pwrite, 2)): - os.close(errwrite) - - # Close all other fds, if asked for - if close_fds: - self._close_fds(but=errpipe_write) - - if cwd is not None: - os.chdir(cwd) - - if preexec_fn: - preexec_fn() - - if env is None: - os.execvp(executable, args) - else: - os.execvpe(executable, args, env) - + self.pid = os.fork() except: - exc_type, exc_value, tb = sys.exc_info() - # Save the traceback and attach it to the exception - # object - exc_lines = traceback.format_exception(exc_type, - exc_value, - tb) - exc_value.child_traceback = ''.join(exc_lines) - os.write(errpipe_write, pickle.dumps(exc_value)) - - # This exitcode won't be reported to applications, so - # it really doesn't matter what we return. - os._exit(255) - - # Parent - if gc_was_enabled: - gc.enable() + if gc_was_enabled: + gc.enable() + raise + self._child_created = True + if self.pid == 0: + # Child + try: + # Close parent's pipe ends + if p2cwrite != -1: + os.close(p2cwrite) + if c2pread != -1: + os.close(c2pread) + if errread != -1: + os.close(errread) + os.close(errpipe_read) + + # Dup fds for child + if p2cread != -1: + os.dup2(p2cread, 0) + if c2pwrite != -1: + os.dup2(c2pwrite, 1) + if errwrite != -1: + os.dup2(errwrite, 2) + + # Close pipe fds. Make sure we don't close the + # same fd more than once, or standard fds. + if p2cread != -1 and p2cread not in (0,): + os.close(p2cread) + if (c2pwrite != -1 and + c2pwrite not in (p2cread, 1)): + os.close(c2pwrite) + if (errwrite != -1 and + errwrite not in (p2cread, c2pwrite, 2)): + os.close(errwrite) + + # Close all other fds, if asked for + if close_fds: + self._close_fds(but=errpipe_write) + + if cwd is not None: + os.chdir(cwd) + + # This is a copy of Python/pythonrun.c + # _Py_RestoreSignals(). If that were exposed + # as a sys._py_restoresignals func it would be + # better.. but this pure python implementation + # isn't likely to be used much anymore. + if restore_signals: + signals = ('SIGPIPE', 'SIGXFZ', 'SIGXFSZ') + for sig in signals: + if hasattr(signal, sig): + signal.signal(getattr(signal, sig), + signal.SIG_DFL) + + if start_new_session and hasattr(os, 'setsid'): + os.setsid() + + if preexec_fn: + preexec_fn() + + if env is None: + os.execvp(executable, args) + else: + os.execvpe(executable, args, env) + + except: + try: + exc_type, exc_value = sys.exc_info()[:2] + if isinstance(exc_value, OSError): + errno = exc_value.errno + else: + errno = 0 + message = '%s:%x:%s' % (exc_type.__name__, + errno, exc_value) + os.write(errpipe_write, message.encode()) + except: + # We MUST not allow anything odd happening + # above to prevent us from exiting below. + pass + + # This exitcode won't be reported to applications + # so it really doesn't matter what we return. + os._exit(255) + + # Parent + if gc_was_enabled: + gc.enable() finally: # be sure the FD is closed no matter what os.close(errpipe_write) - if p2cread is not None and p2cwrite is not None: + if p2cread != -1 and p2cwrite != -1: os.close(p2cread) - if c2pwrite is not None and c2pread is not None: + if c2pwrite != -1 and c2pread != -1: os.close(c2pwrite) - if errwrite is not None and errread is not None: + if errwrite != -1 and errread != -1: os.close(errwrite) # Wait for exec to fail or succeed; possibly raising an - # exception (limited to 1 MB) - data = _eintr_retry_call(os.read, errpipe_read, 1048576) + # exception (limited in size) + data = bytearray() + while True: + part = _eintr_retry_call(os.read, errpipe_read, 50000) + data += part + if not part or len(data) > 50000: + break finally: # be sure the FD is closed no matter what os.close(errpipe_read) if data: _eintr_retry_call(os.waitpid, self.pid, 0) - child_exception = pickle.loads(data) + try: + exception_name, hex_errno, err_msg = data.split(b':', 2) + except ValueError: + print('Bad exception data:', repr(data)) + exception_name = b'RuntimeError' + hex_errno = b'0' + err_msg = b'Unknown' + child_exception_type = getattr( + builtins, exception_name.decode('ascii'), + RuntimeError) for fd in (p2cwrite, c2pread, errread): - if fd is not None: + if fd != -1: os.close(fd) - raise child_exception + err_msg = err_msg.decode() + if issubclass(child_exception_type, OSError) and hex_errno: + errno = int(hex_errno, 16) + if errno != 0: + err_msg = os.strerror(errno) + raise child_exception_type(errno, err_msg) + raise child_exception_type(err_msg) def _handle_exitstatus(self, sts): Modified: python/branches/py3k-jit/Lib/symbol.py ============================================================================== --- python/branches/py3k-jit/Lib/symbol.py (original) +++ python/branches/py3k-jit/Lib/symbol.py Tue Mar 16 21:40:29 2010 @@ -1,4 +1,4 @@ -#! /usr/bin/env python +#! /usr/bin/env python3 """Non-terminal symbols of Python grammar (from "graminit.h").""" Modified: python/branches/py3k-jit/Lib/sysconfig.py ============================================================================== --- python/branches/py3k-jit/Lib/sysconfig.py (original) +++ python/branches/py3k-jit/Lib/sysconfig.py Tue Mar 16 21:40:29 2010 @@ -3,7 +3,7 @@ """ import sys import os -from os.path import pardir, abspath +from os.path import pardir, realpath _INSTALL_SCHEMES = { 'posix_prefix': { @@ -84,16 +84,21 @@ _EXEC_PREFIX = os.path.normpath(sys.exec_prefix) _CONFIG_VARS = None _USER_BASE = None -_PROJECT_BASE = abspath(os.path.dirname(sys.executable)) +if sys.executable: + _PROJECT_BASE = os.path.dirname(realpath(sys.executable)) +else: + # sys.executable can be empty if argv[0] has been changed and Python is + # unable to retrieve the real program name + _PROJECT_BASE = realpath(os.getcwd()) if os.name == "nt" and "pcbuild" in _PROJECT_BASE[-8:].lower(): - _PROJECT_BASE = abspath(os.path.join(_PROJECT_BASE, pardir)) + _PROJECT_BASE = realpath(os.path.join(_PROJECT_BASE, pardir)) # PC/VS7.1 if os.name == "nt" and "\\pc\\v" in _PROJECT_BASE[-10:].lower(): - _PROJECT_BASE = abspath(os.path.join(_PROJECT_BASE, pardir, pardir)) + _PROJECT_BASE = realpath(os.path.join(_PROJECT_BASE, pardir, pardir)) # PC/AMD64 if os.name == "nt" and "\\pcbuild\\amd64" in _PROJECT_BASE[-14:].lower(): - _PROJECT_BASE = abspath(os.path.join(_PROJECT_BASE, pardir, pardir)) + _PROJECT_BASE = realpath(os.path.join(_PROJECT_BASE, pardir, pardir)) def is_python_build(): for fn in ("Setup.dist", "Setup.local"): @@ -296,7 +301,7 @@ vars['SO'] = '.pyd' vars['EXE'] = '.exe' vars['VERSION'] = _PY_VERSION_SHORT_NO_DOT - vars['BINDIR'] = os.path.dirname(os.path.abspath(sys.executable)) + vars['BINDIR'] = os.path.dirname(realpath(sys.executable)) # # public APIs Modified: python/branches/py3k-jit/Lib/tabnanny.py ============================================================================== --- python/branches/py3k-jit/Lib/tabnanny.py (original) +++ python/branches/py3k-jit/Lib/tabnanny.py Tue Mar 16 21:40:29 2010 @@ -1,4 +1,4 @@ -#! /usr/bin/env python +#! /usr/bin/env python3 """The Tab Nanny despises ambiguous indentation. She knows no mercy. Modified: python/branches/py3k-jit/Lib/tarfile.py ============================================================================== --- python/branches/py3k-jit/Lib/tarfile.py (original) +++ python/branches/py3k-jit/Lib/tarfile.py Tue Mar 16 21:40:29 2010 @@ -1,4 +1,4 @@ -#!/usr/bin/env python +#!/usr/bin/env python3 #------------------------------------------------------------------- # tarfile.py #------------------------------------------------------------------- Modified: python/branches/py3k-jit/Lib/test/crashers/recursive_call.py ============================================================================== --- python/branches/py3k-jit/Lib/test/crashers/recursive_call.py (original) +++ python/branches/py3k-jit/Lib/test/crashers/recursive_call.py Tue Mar 16 21:40:29 2010 @@ -1,4 +1,4 @@ -#!/usr/bin/env python +#!/usr/bin/env python3 # No bug report AFAIK, mail on python-dev on 2006-01-10 Modified: python/branches/py3k-jit/Lib/test/curses_tests.py ============================================================================== --- python/branches/py3k-jit/Lib/test/curses_tests.py (original) +++ python/branches/py3k-jit/Lib/test/curses_tests.py Tue Mar 16 21:40:29 2010 @@ -1,4 +1,4 @@ -#!/usr/bin/env python +#!/usr/bin/env python3 # # $Id: ncurses.py 36559 2004-07-18 05:56:09Z tim_one $ # Modified: python/branches/py3k-jit/Lib/test/pystone.py ============================================================================== --- python/branches/py3k-jit/Lib/test/pystone.py (original) +++ python/branches/py3k-jit/Lib/test/pystone.py Tue Mar 16 21:40:29 2010 @@ -1,4 +1,4 @@ -#! /usr/bin/env python +#! /usr/bin/env python3 """ "PYSTONE" Benchmark Program Modified: python/branches/py3k-jit/Lib/test/re_tests.py ============================================================================== --- python/branches/py3k-jit/Lib/test/re_tests.py (original) +++ python/branches/py3k-jit/Lib/test/re_tests.py Tue Mar 16 21:40:29 2010 @@ -1,4 +1,4 @@ -#!/usr/bin/env python +#!/usr/bin/env python3 # -*- mode: python -*- # Re test suite and benchmark suite v1.5 Modified: python/branches/py3k-jit/Lib/test/regrtest.py ============================================================================== --- python/branches/py3k-jit/Lib/test/regrtest.py (original) +++ python/branches/py3k-jit/Lib/test/regrtest.py Tue Mar 16 21:40:29 2010 @@ -1,4 +1,4 @@ -#! /usr/bin/env python +#! /usr/bin/env python3 """Regression test. @@ -146,7 +146,6 @@ """ import getopt -import itertools import json import os import random @@ -509,8 +508,8 @@ if use_mp: from threading import Thread - from queue import Queue, Empty - from subprocess import Popen, PIPE, STDOUT + from queue import Queue + from subprocess import Popen, PIPE from collections import deque debug_output_pat = re.compile(r"\[\d+ refs\]$") pending = deque() Modified: python/branches/py3k-jit/Lib/test/support.py ============================================================================== --- python/branches/py3k-jit/Lib/test/support.py (original) +++ python/branches/py3k-jit/Lib/test/support.py Tue Mar 16 21:40:29 2010 @@ -16,6 +16,7 @@ import unittest import importlib import collections +import re __all__ = ["Error", "TestFailed", "ResourceDenied", "import_module", "verbose", "use_resources", "max_memuse", "record_original_stdout", @@ -401,12 +402,14 @@ rmtree(name) -def findfile(file, here=__file__): +def findfile(file, here=__file__, subdir=None): """Try to find a file on sys.path and the working directory. If it is not found the argument passed to the function is returned (this does not necessarily signal failure; could still be the legitimate path).""" if os.path.isabs(file): return file + if subdir is not None: + file = os.path.join(subdir, file) path = sys.path path = [os.path.dirname(here)] + path for dn in path: @@ -464,22 +467,80 @@ entry to the warnings.catch_warnings() context manager. """ def __init__(self, warnings_list): - self.warnings = warnings_list + self._warnings = warnings_list + self._last = 0 def __getattr__(self, attr): - if self.warnings: - return getattr(self.warnings[-1], attr) + if len(self._warnings) > self._last: + return getattr(self._warnings[-1], attr) elif attr in warnings.WarningMessage._WARNING_DETAILS: return None raise AttributeError("%r has no attribute %r" % (self, attr)) + @property + def warnings(self): + return self._warnings[self._last:] + def reset(self): - del self.warnings[:] + self._last = len(self._warnings) - at contextlib.contextmanager -def check_warnings(): + +def _filterwarnings(filters, quiet=False): + """Catch the warnings, then check if all the expected + warnings have been raised and re-raise unexpected warnings. + If 'quiet' is True, only re-raise the unexpected warnings. + """ + # Clear the warning registry of the calling module + # in order to re-raise the warnings. + frame = sys._getframe(2) + registry = frame.f_globals.get('__warningregistry__') + if registry: + registry.clear() with warnings.catch_warnings(record=True) as w: + # Set filter "always" to record all warnings. Because + # test_warnings swap the module, we need to look up in + # the sys.modules dictionary. + sys.modules['warnings'].simplefilter("always") yield WarningsRecorder(w) + # Filter the recorded warnings + reraise = [warning.message for warning in w] + missing = [] + for msg, cat in filters: + seen = False + for exc in reraise[:]: + message = str(exc) + # Filter out the matching messages + if (re.match(msg, message, re.I) and + issubclass(exc.__class__, cat)): + seen = True + reraise.remove(exc) + if not seen and not quiet: + # This filter caught nothing + missing.append((msg, cat.__name__)) + if reraise: + raise AssertionError("unhandled warning %r" % reraise[0]) + if missing: + raise AssertionError("filter (%r, %s) did not catch any warning" % + missing[0]) + + + at contextlib.contextmanager +def check_warnings(*filters, **kwargs): + """Context manager to silence warnings. + + Accept 2-tuples as positional arguments: + ("message regexp", WarningCategory) + + Optional argument: + - if 'quiet' is True, it does not fail if a filter catches nothing + (default False) + + Without argument, it defaults to: + check_warnings(("", Warning), quiet=False) + """ + if not filters: + filters = (("", Warning),) + return _filterwarnings(filters, kwargs.get('quiet')) class CleanImport(object): @@ -714,7 +775,6 @@ MAX_Py_ssize_t = sys.maxsize def set_memlimit(limit): - import re global max_memuse global real_max_memuse sizes = { Deleted: python/branches/py3k-jit/Lib/test/test.xml ============================================================================== --- python/branches/py3k-jit/Lib/test/test.xml Tue Mar 16 21:40:29 2010 +++ (empty file) @@ -1,115 +0,0 @@ - - -Introduction to XSL -

    Introduction to XSL

    - - - -
    -

    Overview -

    -
      - -
    • 1.Intro
    • - -
    • 2.History
    • - -
    • 3.XSL Basics
    • - -
    • Lunch
    • - -
    • 4.An XML Data Model
    • - -
    • 5.XSL Patterns
    • - -
    • 6.XSL Templates
    • - -
    • 7.XSL Formatting Model -
    • - -
    - - - - - - -
    -

    Intro

    -
      - -
    • Who am I?
    • - -
    • Who are you?
    • - -
    • Why are we here? -
    • - -
    - - - - - - -
    -

    History: XML and SGML

    -
      - -
    • XML is a subset of SGML.
    • - -
    • SGML allows the separation of abstract content from formatting.
    • - -
    • Also one of XML's primary virtues (in the doc publishing domain). -
    • - -
    - - - - - - -
    -

    History: What are stylesheets?

    -
      - -
    • Stylesheets specify the formatting of SGML/XML documents.
    • - -
    • Stylesheets put the "style" back into documents.
    • - -
    • New York Times content+NYT Stylesheet = NYT paper -
    • - -
    - - - - - - -
    -

    History: FOSI

    -
      - -
    • FOSI: "Formatted Output Specification Instance" -
        -
      • MIL-STD-28001 -
      • - -
      • FOSI's are SGML documents -
      • - -
      • A stylesheet for another document -
      • -
    • - -
    • Obsolete but implemented... -
    • - -
    - - - - - Deleted: python/branches/py3k-jit/Lib/test/test.xml.out ============================================================================== --- python/branches/py3k-jit/Lib/test/test.xml.out Tue Mar 16 21:40:29 2010 +++ (empty file) @@ -1,115 +0,0 @@ - - -Introduction to XSL -

    Introduction to XSL

    - - - -
    -

    Overview -

    -
      - -
    • 1.Intro
    • - -
    • 2.History
    • - -
    • 3.XSL Basics
    • - -
    • Lunch
    • - -
    • 4.An XML Data Model
    • - -
    • 5.XSL Patterns
    • - -
    • 6.XSL Templates
    • - -
    • 7.XSL Formatting Model -
    • - -
    - - - - - - -
    -

    Intro

    -
      - -
    • Who am I?
    • - -
    • Who are you?
    • - -
    • Why are we here? -
    • - -
    - - - - - - -
    -

    History: XML and SGML

    -
      - -
    • XML is a subset of SGML.
    • - -
    • SGML allows the separation of abstract content from formatting.
    • - -
    • Also one of XML's primary virtues (in the doc publishing domain). -
    • - -
    - - - - - - -
    -

    History: What are stylesheets?

    -
      - -
    • Stylesheets specify the formatting of SGML/XML documents.
    • - -
    • Stylesheets put the "style" back into documents.
    • - -
    • New York Times content+NYT Stylesheet = NYT paper -
    • - -
    - - - - - - -
    -

    History: FOSI

    -
      - -
    • FOSI: "Formatted Output Specification Instance" -
        -
      • MIL-STD-28001 -
      • - -
      • FOSI's are SGML documents -
      • - -
      • A stylesheet for another document -
      • -
    • - -
    • Obsolete but implemented... -
    • - -
    - - - - - \ No newline at end of file Modified: python/branches/py3k-jit/Lib/test/test___future__.py ============================================================================== --- python/branches/py3k-jit/Lib/test/test___future__.py (original) +++ python/branches/py3k-jit/Lib/test/test___future__.py Tue Mar 16 21:40:29 2010 @@ -1,4 +1,4 @@ -#! /usr/bin/env python +#! /usr/bin/env python3 import unittest from test import support import __future__ Modified: python/branches/py3k-jit/Lib/test/test__locale.py ============================================================================== --- python/branches/py3k-jit/Lib/test/test__locale.py (original) +++ python/branches/py3k-jit/Lib/test/test__locale.py Tue Mar 16 21:40:29 2010 @@ -1,4 +1,4 @@ -from test.support import verbose, run_unittest +from test.support import run_unittest from _locale import (setlocale, LC_ALL, LC_CTYPE, LC_NUMERIC, localeconv, Error) try: from _locale import (RADIXCHAR, THOUSEP, nl_langinfo) Modified: python/branches/py3k-jit/Lib/test/test_abstract_numbers.py ============================================================================== --- python/branches/py3k-jit/Lib/test/test_abstract_numbers.py (original) +++ python/branches/py3k-jit/Lib/test/test_abstract_numbers.py Tue Mar 16 21:40:29 2010 @@ -4,7 +4,6 @@ import operator import unittest from numbers import Complex, Real, Rational, Integral -from numbers import Number from test import support class TestNumbers(unittest.TestCase): Modified: python/branches/py3k-jit/Lib/test/test_array.py ============================================================================== --- python/branches/py3k-jit/Lib/test/test_array.py (original) +++ python/branches/py3k-jit/Lib/test/test_array.py Tue Mar 16 21:40:29 2010 @@ -1,4 +1,4 @@ -#! /usr/bin/env python +#! /usr/bin/env python3 """Test the arraymodule. Roger E. Masse """ Modified: python/branches/py3k-jit/Lib/test/test_binhex.py ============================================================================== --- python/branches/py3k-jit/Lib/test/test_binhex.py (original) +++ python/branches/py3k-jit/Lib/test/test_binhex.py Tue Mar 16 21:40:29 2010 @@ -1,4 +1,4 @@ -#! /usr/bin/env python +#! /usr/bin/env python3 """Test script for the binhex C module Uses the mechanism of the python binhex module Modified: python/branches/py3k-jit/Lib/test/test_builtin.py ============================================================================== --- python/branches/py3k-jit/Lib/test/test_builtin.py (original) +++ python/branches/py3k-jit/Lib/test/test_builtin.py Tue Mar 16 21:40:29 2010 @@ -1,12 +1,12 @@ # Python test set -- built-in functions import platform -import test.support, unittest -from test.support import fcmp, TESTFN, unlink, run_unittest, \ - run_with_locale +import unittest +from test.support import fcmp, TESTFN, unlink, run_unittest from operator import neg -import sys, warnings, random, collections, io, fractions +import sys, warnings, random, collections, io + warnings.filterwarnings("ignore", "hex../oct.. of negative int", FutureWarning, __name__) warnings.filterwarnings("ignore", "integer argument expected", @@ -479,6 +479,8 @@ self.assertRaises(TypeError, getattr, sys, 1, "foo") self.assertRaises(TypeError, getattr) self.assertRaises(AttributeError, getattr, sys, chr(sys.maxunicode)) + # unicode surrogates are not encodable to the default encoding (utf8) + self.assertRaises(AttributeError, getattr, 1, "\uDAD1\uD51E") def test_hasattr(self): import sys Modified: python/branches/py3k-jit/Lib/test/test_bz2.py ============================================================================== --- python/branches/py3k-jit/Lib/test/test_bz2.py (original) +++ python/branches/py3k-jit/Lib/test/test_bz2.py Tue Mar 16 21:40:29 2010 @@ -1,4 +1,4 @@ -#!/usr/bin/python +#!/usr/bin/env python3 from test import support from test.support import TESTFN Modified: python/branches/py3k-jit/Lib/test/test_cmath.py ============================================================================== --- python/branches/py3k-jit/Lib/test/test_cmath.py (original) +++ python/branches/py3k-jit/Lib/test/test_cmath.py Tue Mar 16 21:40:29 2010 @@ -1,7 +1,6 @@ from test.support import run_unittest from test.test_math import parse_testfile, test_file import unittest -import os, sys import cmath, math from cmath import phase, polar, rect, pi Modified: python/branches/py3k-jit/Lib/test/test_cmd.py ============================================================================== --- python/branches/py3k-jit/Lib/test/test_cmd.py (original) +++ python/branches/py3k-jit/Lib/test/test_cmd.py Tue Mar 16 21:40:29 2010 @@ -1,4 +1,4 @@ -#!/usr/bin/env python +#!/usr/bin/env python3 """ Test script for the 'cmd' module Original by Michael Schneider Modified: python/branches/py3k-jit/Lib/test/test_cmd_line.py ============================================================================== --- python/branches/py3k-jit/Lib/test/test_cmd_line.py (original) +++ python/branches/py3k-jit/Lib/test/test_cmd_line.py Tue Mar 16 21:40:29 2010 @@ -2,7 +2,6 @@ # All tests are executed with environment variables ignored # See test_cmd_line_script.py for testing of script execution -import os import test.support, unittest import os import sys Modified: python/branches/py3k-jit/Lib/test/test_cmd_line_script.py ============================================================================== --- python/branches/py3k-jit/Lib/test/test_cmd_line_script.py (original) +++ python/branches/py3k-jit/Lib/test/test_cmd_line_script.py Tue Mar 16 21:40:29 2010 @@ -3,9 +3,8 @@ import unittest import os import os.path -import sys import test.support -from test.script_helper import (spawn_python, kill_python, run_python, +from test.script_helper import (run_python, temp_dir, make_script, compile_script, make_pkg, make_zip_script, make_zip_pkg) Modified: python/branches/py3k-jit/Lib/test/test_codecencodings_cn.py ============================================================================== --- python/branches/py3k-jit/Lib/test/test_codecencodings_cn.py (original) +++ python/branches/py3k-jit/Lib/test/test_codecencodings_cn.py Tue Mar 16 21:40:29 2010 @@ -1,4 +1,4 @@ -#!/usr/bin/env python +#!/usr/bin/env python3 # # test_codecencodings_cn.py # Codec encoding tests for PRC encodings. Modified: python/branches/py3k-jit/Lib/test/test_codecencodings_hk.py ============================================================================== --- python/branches/py3k-jit/Lib/test/test_codecencodings_hk.py (original) +++ python/branches/py3k-jit/Lib/test/test_codecencodings_hk.py Tue Mar 16 21:40:29 2010 @@ -1,4 +1,4 @@ -#!/usr/bin/env python +#!/usr/bin/env python3 # # test_codecencodings_hk.py # Codec encoding tests for HongKong encodings. Modified: python/branches/py3k-jit/Lib/test/test_codecencodings_jp.py ============================================================================== --- python/branches/py3k-jit/Lib/test/test_codecencodings_jp.py (original) +++ python/branches/py3k-jit/Lib/test/test_codecencodings_jp.py Tue Mar 16 21:40:29 2010 @@ -1,4 +1,4 @@ -#!/usr/bin/env python +#!/usr/bin/env python3 # # test_codecencodings_jp.py # Codec encoding tests for Japanese encodings. Modified: python/branches/py3k-jit/Lib/test/test_codecencodings_kr.py ============================================================================== --- python/branches/py3k-jit/Lib/test/test_codecencodings_kr.py (original) +++ python/branches/py3k-jit/Lib/test/test_codecencodings_kr.py Tue Mar 16 21:40:29 2010 @@ -1,4 +1,4 @@ -#!/usr/bin/env python +#!/usr/bin/env python3 # # test_codecencodings_kr.py # Codec encoding tests for ROK encodings. Modified: python/branches/py3k-jit/Lib/test/test_codecencodings_tw.py ============================================================================== --- python/branches/py3k-jit/Lib/test/test_codecencodings_tw.py (original) +++ python/branches/py3k-jit/Lib/test/test_codecencodings_tw.py Tue Mar 16 21:40:29 2010 @@ -1,4 +1,4 @@ -#!/usr/bin/env python +#!/usr/bin/env python3 # # test_codecencodings_tw.py # Codec encoding tests for ROC encodings. Modified: python/branches/py3k-jit/Lib/test/test_codecmaps_cn.py ============================================================================== --- python/branches/py3k-jit/Lib/test/test_codecmaps_cn.py (original) +++ python/branches/py3k-jit/Lib/test/test_codecmaps_cn.py Tue Mar 16 21:40:29 2010 @@ -1,4 +1,4 @@ -#!/usr/bin/env python +#!/usr/bin/env python3 # # test_codecmaps_cn.py # Codec mapping tests for PRC encodings Modified: python/branches/py3k-jit/Lib/test/test_codecmaps_hk.py ============================================================================== --- python/branches/py3k-jit/Lib/test/test_codecmaps_hk.py (original) +++ python/branches/py3k-jit/Lib/test/test_codecmaps_hk.py Tue Mar 16 21:40:29 2010 @@ -1,4 +1,4 @@ -#!/usr/bin/env python +#!/usr/bin/env python3 # # test_codecmaps_hk.py # Codec mapping tests for HongKong encodings Modified: python/branches/py3k-jit/Lib/test/test_codecmaps_jp.py ============================================================================== --- python/branches/py3k-jit/Lib/test/test_codecmaps_jp.py (original) +++ python/branches/py3k-jit/Lib/test/test_codecmaps_jp.py Tue Mar 16 21:40:29 2010 @@ -1,4 +1,4 @@ -#!/usr/bin/env python +#!/usr/bin/env python3 # # test_codecmaps_jp.py # Codec mapping tests for Japanese encodings Modified: python/branches/py3k-jit/Lib/test/test_codecmaps_kr.py ============================================================================== --- python/branches/py3k-jit/Lib/test/test_codecmaps_kr.py (original) +++ python/branches/py3k-jit/Lib/test/test_codecmaps_kr.py Tue Mar 16 21:40:29 2010 @@ -1,4 +1,4 @@ -#!/usr/bin/env python +#!/usr/bin/env python3 # # test_codecmaps_kr.py # Codec mapping tests for ROK encodings Modified: python/branches/py3k-jit/Lib/test/test_codecmaps_tw.py ============================================================================== --- python/branches/py3k-jit/Lib/test/test_codecmaps_tw.py (original) +++ python/branches/py3k-jit/Lib/test/test_codecmaps_tw.py Tue Mar 16 21:40:29 2010 @@ -1,4 +1,4 @@ -#!/usr/bin/env python +#!/usr/bin/env python3 # # test_codecmaps_tw.py # Codec mapping tests for ROC encodings Modified: python/branches/py3k-jit/Lib/test/test_collections.py ============================================================================== --- python/branches/py3k-jit/Lib/test/test_collections.py (original) +++ python/branches/py3k-jit/Lib/test/test_collections.py Tue Mar 16 21:40:29 2010 @@ -7,7 +7,6 @@ from test import mapping_tests import pickle, copy from random import randrange, shuffle -import operator import keyword import re import sys Modified: python/branches/py3k-jit/Lib/test/test_compileall.py ============================================================================== --- python/branches/py3k-jit/Lib/test/test_compileall.py (original) +++ python/branches/py3k-jit/Lib/test/test_compileall.py Tue Mar 16 21:40:29 2010 @@ -1,14 +1,14 @@ +import sys import compileall import imp import os import py_compile import shutil import struct -import sys import tempfile -import time from test import support import unittest +import io class CompileallTests(unittest.TestCase): @@ -19,6 +19,9 @@ self.bc_path = self.source_path + ('c' if __debug__ else 'o') with open(self.source_path, 'w') as file: file.write('x = 123\n') + self.source_path2 = os.path.join(self.directory, '_test2.py') + self.bc_path2 = self.source_path2 + ('c' if __debug__ else 'o') + shutil.copyfile(self.source_path, self.source_path2) def tearDown(self): shutil.rmtree(self.directory) @@ -54,9 +57,47 @@ # Test a change in mtime leads to a new .pyc. self.recreation_check(b'\0\0\0\0') + def test_compile_files(self): + # Test compiling a single file, and complete directory + for fn in (self.bc_path, self.bc_path2): + try: + os.unlink(fn) + except: + pass + compileall.compile_file(self.source_path, force=False, quiet=True) + self.assertTrue(os.path.isfile(self.bc_path) \ + and not os.path.isfile(self.bc_path2)) + os.unlink(self.bc_path) + compileall.compile_dir(self.directory, force=False, quiet=True) + self.assertTrue(os.path.isfile(self.bc_path) \ + and os.path.isfile(self.bc_path2)) + os.unlink(self.bc_path) + os.unlink(self.bc_path2) + +class EncodingTest(unittest.TestCase): + 'Issue 6716: compileall should escape source code when printing errors to stdout.' + + def setUp(self): + self.directory = tempfile.mkdtemp() + self.source_path = os.path.join(self.directory, '_test.py') + with open(self.source_path, 'w', encoding='utf-8') as file: + file.write('# -*- coding: utf-8 -*-\n') + file.write('print u"\u20ac"\n') + + def tearDown(self): + shutil.rmtree(self.directory) + + def test_error(self): + try: + orig_stdout = sys.stdout + sys.stdout = io.TextIOWrapper(io.BytesIO(),encoding='ascii') + compileall.compile_dir(self.directory) + finally: + sys.stdout = orig_stdout def test_main(): - support.run_unittest(CompileallTests) + support.run_unittest(CompileallTests, + EncodingTest) if __name__ == "__main__": Modified: python/branches/py3k-jit/Lib/test/test_complex.py ============================================================================== --- python/branches/py3k-jit/Lib/test/test_complex.py (original) +++ python/branches/py3k-jit/Lib/test/test_complex.py Tue Mar 16 21:40:29 2010 @@ -3,6 +3,7 @@ from random import random from math import atan2, isnan, copysign +import operator INF = float("inf") NAN = float("nan") @@ -110,15 +111,23 @@ def test_richcompare(self): self.assertRaises(OverflowError, complex.__eq__, 1+1j, 1<<10000) - self.assertEqual(complex.__lt__(1+1j, None), NotImplemented) + self.assertIs(complex.__lt__(1+1j, None), NotImplemented) self.assertIs(complex.__eq__(1+1j, 1+1j), True) self.assertIs(complex.__eq__(1+1j, 2+2j), False) self.assertIs(complex.__ne__(1+1j, 1+1j), False) self.assertIs(complex.__ne__(1+1j, 2+2j), True) - self.assertRaises(TypeError, complex.__lt__, 1+1j, 2+2j) - self.assertRaises(TypeError, complex.__le__, 1+1j, 2+2j) - self.assertRaises(TypeError, complex.__gt__, 1+1j, 2+2j) - self.assertRaises(TypeError, complex.__ge__, 1+1j, 2+2j) + self.assertIs(complex.__lt__(1+1j, 2+2j), NotImplemented) + self.assertIs(complex.__le__(1+1j, 2+2j), NotImplemented) + self.assertIs(complex.__gt__(1+1j, 2+2j), NotImplemented) + self.assertIs(complex.__ge__(1+1j, 2+2j), NotImplemented) + self.assertRaises(TypeError, operator.lt, 1+1j, 2+2j) + self.assertRaises(TypeError, operator.le, 1+1j, 2+2j) + self.assertRaises(TypeError, operator.gt, 1+1j, 2+2j) + self.assertRaises(TypeError, operator.ge, 1+1j, 2+2j) + self.assertIs(operator.eq(1+1j, 1+1j), True) + self.assertIs(operator.eq(1+1j, 2+2j), False) + self.assertIs(operator.ne(1+1j, 1+1j), False) + self.assertIs(operator.ne(1+1j, 2+2j), True) def test_mod(self): # % is no longer supported on complex numbers Modified: python/branches/py3k-jit/Lib/test/test_contextlib.py ============================================================================== --- python/branches/py3k-jit/Lib/test/test_contextlib.py (original) +++ python/branches/py3k-jit/Lib/test/test_contextlib.py Tue Mar 16 21:40:29 2010 @@ -1,9 +1,7 @@ """Unit tests for contextlib.py, and other context managers.""" -import sys import os -import decimal import sys import tempfile import unittest Modified: python/branches/py3k-jit/Lib/test/test_csv.py ============================================================================== --- python/branches/py3k-jit/Lib/test/test_csv.py (original) +++ python/branches/py3k-jit/Lib/test/test_csv.py Tue Mar 16 21:40:29 2010 @@ -488,10 +488,10 @@ def test_null(self): self.writerAssertEqual([], '') - def test_single(self): + def test_single_writer(self): self.writerAssertEqual([['abc']], 'abc\r\n') - def test_simple(self): + def test_simple_writer(self): self.writerAssertEqual([[1, 2, 'abc', 3, 4]], '1,2,abc,3,4\r\n') def test_quotes(self): Modified: python/branches/py3k-jit/Lib/test/test_dbm.py ============================================================================== --- python/branches/py3k-jit/Lib/test/test_dbm.py (original) +++ python/branches/py3k-jit/Lib/test/test_dbm.py Tue Mar 16 21:40:29 2010 @@ -1,4 +1,4 @@ -#! /usr/bin/env python +#! /usr/bin/env python3 """Test script for the dbm.open function based on testdumbdbm.py""" import os Modified: python/branches/py3k-jit/Lib/test/test_dbm_dumb.py ============================================================================== --- python/branches/py3k-jit/Lib/test/test_dbm_dumb.py (original) +++ python/branches/py3k-jit/Lib/test/test_dbm_dumb.py Tue Mar 16 21:40:29 2010 @@ -1,4 +1,4 @@ -#! /usr/bin/env python +#! /usr/bin/env python3 """Test script for the dumbdbm module Original by Roger E. Masse """ Modified: python/branches/py3k-jit/Lib/test/test_decimal.py ============================================================================== --- python/branches/py3k-jit/Lib/test/test_decimal.py (original) +++ python/branches/py3k-jit/Lib/test/test_decimal.py Tue Mar 16 21:40:29 2010 @@ -24,7 +24,6 @@ with the corresponding argument. """ -import glob import math import os, sys import pickle, copy Modified: python/branches/py3k-jit/Lib/test/test_deque.py ============================================================================== --- python/branches/py3k-jit/Lib/test/test_deque.py (original) +++ python/branches/py3k-jit/Lib/test/test_deque.py Tue Mar 16 21:40:29 2010 @@ -7,7 +7,6 @@ import pickle from io import StringIO import random -import os BIG = 100000 Modified: python/branches/py3k-jit/Lib/test/test_descr.py ============================================================================== --- python/branches/py3k-jit/Lib/test/test_descr.py (original) +++ python/branches/py3k-jit/Lib/test/test_descr.py Tue Mar 16 21:40:29 2010 @@ -624,7 +624,6 @@ def test_module_subclasses(self): # Testing Python subclass of module... log = [] - import types, sys MT = type(sys) class MM(MT): def __init__(self, name): @@ -1006,7 +1005,6 @@ # Test cyclical leaks [SF bug 519621] class F(object): __slots__ = ['a', 'b'] - log = [] s = F() s.a = [Counted(), s] self.assertEqual(Counted.counter, 1) @@ -1015,7 +1013,7 @@ self.assertEqual(Counted.counter, 0) # Test lookup leaks [SF bug 572567] - import sys,gc + import gc if hasattr(gc, 'get_objects'): class G(object): def __eq__(self, other): @@ -2038,7 +2036,6 @@ ## self.assertIn('__self__', dir(a.Amethod)) # Try a module subclass. - import sys class M(type(sys)): pass minstance = M("m") @@ -3206,7 +3203,6 @@ self.fail("d.foo should be undefined now") # Test a nasty bug in recurse_down_subclasses() - import gc class A(object): pass class B(A): @@ -3996,7 +3992,6 @@ def test_file_fault(self): # Testing sys.stdout is changed in getattr... - import sys test_stdout = sys.stdout class StdoutGuard: def __getattr__(self, attr): @@ -4087,8 +4082,6 @@ def test_not_implemented(self): # Testing NotImplemented... # all binary methods should be able to return a NotImplemented - import sys - import types import operator def specialmethod(self, other): Modified: python/branches/py3k-jit/Lib/test/test_docxmlrpc.py ============================================================================== --- python/branches/py3k-jit/Lib/test/test_docxmlrpc.py (original) +++ python/branches/py3k-jit/Lib/test/test_docxmlrpc.py Tue Mar 16 21:40:29 2010 @@ -4,6 +4,7 @@ from test import support import threading import time +import socket import unittest PORT = None Modified: python/branches/py3k-jit/Lib/test/test_eof.py ============================================================================== --- python/branches/py3k-jit/Lib/test/test_eof.py (original) +++ python/branches/py3k-jit/Lib/test/test_eof.py Tue Mar 16 21:40:29 2010 @@ -1,4 +1,4 @@ -#! /usr/bin/env python +#! /usr/bin/env python3 """test script for a few new invalid token catches""" import unittest Modified: python/branches/py3k-jit/Lib/test/test_epoll.py ============================================================================== --- python/branches/py3k-jit/Lib/test/test_epoll.py (original) +++ python/branches/py3k-jit/Lib/test/test_epoll.py Tue Mar 16 21:40:29 2010 @@ -21,12 +21,10 @@ """ Tests for epoll wrapper. """ -import os import socket import errno import time import select -import tempfile import unittest from test import support Modified: python/branches/py3k-jit/Lib/test/test_errno.py ============================================================================== --- python/branches/py3k-jit/Lib/test/test_errno.py (original) +++ python/branches/py3k-jit/Lib/test/test_errno.py Tue Mar 16 21:40:29 2010 @@ -1,4 +1,4 @@ -#! /usr/bin/env python +#! /usr/bin/env python3 """Test the errno module Roger E. Masse """ Modified: python/branches/py3k-jit/Lib/test/test_file.py ============================================================================== --- python/branches/py3k-jit/Lib/test/test_file.py (original) +++ python/branches/py3k-jit/Lib/test/test_file.py Tue Mar 16 21:40:29 2010 @@ -7,7 +7,7 @@ import io import _pyio as pyio -from test.support import TESTFN, findfile, run_unittest +from test.support import TESTFN, run_unittest from collections import UserList class AutoFileTests(unittest.TestCase): Modified: python/branches/py3k-jit/Lib/test/test_filecmp.py ============================================================================== --- python/branches/py3k-jit/Lib/test/test_filecmp.py (original) +++ python/branches/py3k-jit/Lib/test/test_filecmp.py Tue Mar 16 21:40:29 2010 @@ -1,5 +1,5 @@ -import os, filecmp, shutil, tempfile, shutil +import os, filecmp, shutil, tempfile import unittest from test import support Modified: python/branches/py3k-jit/Lib/test/test_fileio.py ============================================================================== --- python/branches/py3k-jit/Lib/test/test_fileio.py (original) +++ python/branches/py3k-jit/Lib/test/test_fileio.py Tue Mar 16 21:40:29 2010 @@ -8,9 +8,7 @@ from weakref import proxy from functools import wraps -from test.support import (TESTFN, findfile, check_warnings, run_unittest, - make_bad_fd) -from collections import UserList +from test.support import TESTFN, check_warnings, run_unittest, make_bad_fd from _io import FileIO as _FileIO @@ -390,7 +388,7 @@ self.assertRaises(TypeError, _FileIO, "1", 0, 0) def testWarnings(self): - with check_warnings() as w: + with check_warnings(quiet=True) as w: self.assertEqual(w.warnings, []) self.assertRaises(TypeError, _FileIO, []) self.assertEqual(w.warnings, []) Modified: python/branches/py3k-jit/Lib/test/test_float.py ============================================================================== --- python/branches/py3k-jit/Lib/test/test_float.py (original) +++ python/branches/py3k-jit/Lib/test/test_float.py Tue Mar 16 21:40:29 2010 @@ -546,7 +546,6 @@ if float.__getformat__("double").startswith("IEEE"): def test_negative_zero(self): - import math def pos_pos(): return 0.0, math.atan2(0.0, -1) def pos_neg(): Modified: python/branches/py3k-jit/Lib/test/test_fnmatch.py ============================================================================== --- python/branches/py3k-jit/Lib/test/test_fnmatch.py (original) +++ python/branches/py3k-jit/Lib/test/test_fnmatch.py Tue Mar 16 21:40:29 2010 @@ -7,13 +7,13 @@ class FnmatchTestCase(unittest.TestCase): - def check_match(self, filename, pattern, should_match=1): + def check_match(self, filename, pattern, should_match=1, fn=fnmatch): if should_match: - self.assertTrue(fnmatch(filename, pattern), + self.assertTrue(fn(filename, pattern), "expected %r to match pattern %r" % (filename, pattern)) else: - self.assertTrue(not fnmatch(filename, pattern), + self.assertTrue(not fn(filename, pattern), "expected %r not to match pattern %r" % (filename, pattern)) @@ -50,6 +50,11 @@ self.assertRaises(TypeError, fnmatchcase, 'test', b'*') self.assertRaises(TypeError, fnmatchcase, b'test', '*') + def test_fnmatchcase(self): + check = self.check_match + check('AbC', 'abc', 0, fnmatchcase) + check('abc', 'AbC', 0, fnmatchcase) + def test_bytes(self): self.check_match(b'test', b'te*') self.check_match(b'test\xff', b'te*\xff') Modified: python/branches/py3k-jit/Lib/test/test_fork1.py ============================================================================== --- python/branches/py3k-jit/Lib/test/test_fork1.py (original) +++ python/branches/py3k-jit/Lib/test/test_fork1.py Tue Mar 16 21:40:29 2010 @@ -1,7 +1,6 @@ """This test checks for correct fork() behavior. """ -import errno import imp import os import signal Modified: python/branches/py3k-jit/Lib/test/test_frozen.py ============================================================================== --- python/branches/py3k-jit/Lib/test/test_frozen.py (original) +++ python/branches/py3k-jit/Lib/test/test_frozen.py Tue Mar 16 21:40:29 2010 @@ -2,7 +2,7 @@ from test.support import captured_stdout, run_unittest import unittest -import sys, os +import sys class FrozenTests(unittest.TestCase): def test_frozen(self): Modified: python/branches/py3k-jit/Lib/test/test_functools.py ============================================================================== --- python/branches/py3k-jit/Lib/test/test_functools.py (original) +++ python/branches/py3k-jit/Lib/test/test_functools.py Tue Mar 16 21:40:29 2010 @@ -45,9 +45,17 @@ # attributes should not be writable if not isinstance(self.thetype, type): return - self.assertRaises(TypeError, setattr, p, 'func', map) - self.assertRaises(TypeError, setattr, p, 'args', (1, 2)) - self.assertRaises(TypeError, setattr, p, 'keywords', dict(a=1, b=2)) + self.assertRaises(AttributeError, setattr, p, 'func', map) + self.assertRaises(AttributeError, setattr, p, 'args', (1, 2)) + self.assertRaises(AttributeError, setattr, p, 'keywords', dict(a=1, b=2)) + + p = self.thetype(hex) + try: + del p.__dict__ + except TypeError: + pass + else: + self.fail('partial object allowed __dict__ to be deleted') def test_argument_checking(self): self.assertRaises(TypeError, self.thetype) # need at least a func arg @@ -123,15 +131,6 @@ self.assertRaises(ZeroDivisionError, self.thetype(f), 1, 0) self.assertRaises(ZeroDivisionError, self.thetype(f, y=0), 1) - def test_attributes(self): - p = self.thetype(hex) - try: - del p.__dict__ - except TypeError: - pass - else: - self.fail('partial object allowed __dict__ to be deleted') - def test_weakref(self): f = self.thetype(int, base=16) p = proxy(f) Modified: python/branches/py3k-jit/Lib/test/test_getopt.py ============================================================================== --- python/branches/py3k-jit/Lib/test/test_getopt.py (original) +++ python/branches/py3k-jit/Lib/test/test_getopt.py Tue Mar 16 21:40:29 2010 @@ -5,7 +5,6 @@ import unittest import getopt -import os sentinel = object() Modified: python/branches/py3k-jit/Lib/test/test_gzip.py ============================================================================== --- python/branches/py3k-jit/Lib/test/test_gzip.py (original) +++ python/branches/py3k-jit/Lib/test/test_gzip.py Tue Mar 16 21:40:29 2010 @@ -1,4 +1,4 @@ -#! /usr/bin/env python +#! /usr/bin/env python3 """Test script for the gzip module. """ Modified: python/branches/py3k-jit/Lib/test/test_hashlib.py ============================================================================== --- python/branches/py3k-jit/Lib/test/test_hashlib.py (original) +++ python/branches/py3k-jit/Lib/test/test_hashlib.py Tue Mar 16 21:40:29 2010 @@ -8,7 +8,6 @@ import array import hashlib -from io import StringIO import itertools import sys try: Modified: python/branches/py3k-jit/Lib/test/test_heapq.py ============================================================================== --- python/branches/py3k-jit/Lib/test/test_heapq.py (original) +++ python/branches/py3k-jit/Lib/test/test_heapq.py Tue Mar 16 21:40:29 2010 @@ -370,8 +370,6 @@ def test_main(verbose=None): - from types import BuiltinFunctionType - test_classes = [TestHeapPython, TestHeapC, TestErrorHandling] support.run_unittest(*test_classes) Modified: python/branches/py3k-jit/Lib/test/test_imaplib.py ============================================================================== --- python/branches/py3k-jit/Lib/test/test_imaplib.py (original) +++ python/branches/py3k-jit/Lib/test/test_imaplib.py Tue Mar 16 21:40:29 2010 @@ -7,10 +7,7 @@ from contextlib import contextmanager import imaplib import os.path -import select -import socket import socketserver -import sys import time from test.support import reap_threads, verbose Modified: python/branches/py3k-jit/Lib/test/test_imp.py ============================================================================== --- python/branches/py3k-jit/Lib/test/test_imp.py (original) +++ python/branches/py3k-jit/Lib/test/test_imp.py Tue Mar 16 21:40:29 2010 @@ -51,7 +51,7 @@ self.assertNotEqual(fp, None) self.assertEqual(fp.encoding, "iso-8859-1") self.assertEqual(fp.tell(), 0) - self.assertEqual(fp.readline(), '#!/usr/bin/env python\n') + self.assertEqual(fp.readline(), '#!/usr/bin/env python3\n') fp.close() fp, filename, info = imp.find_module("tokenize") Modified: python/branches/py3k-jit/Lib/test/test_inspect.py ============================================================================== --- python/branches/py3k-jit/Lib/test/test_inspect.py (original) +++ python/branches/py3k-jit/Lib/test/test_inspect.py Tue Mar 16 21:40:29 2010 @@ -6,7 +6,7 @@ import collections from os.path import normcase -from test.support import TESTFN, run_unittest +from test.support import run_unittest from test import inspect_fodder as mod from test import inspect_fodder2 as mod2 Modified: python/branches/py3k-jit/Lib/test/test_io.py ============================================================================== --- python/branches/py3k-jit/Lib/test/test_io.py (original) +++ python/branches/py3k-jit/Lib/test/test_io.py Tue Mar 16 21:40:29 2010 @@ -28,9 +28,8 @@ import unittest import warnings import weakref -import gc import abc -from itertools import chain, cycle, count +from itertools import cycle, count from collections import deque from test import support Modified: python/branches/py3k-jit/Lib/test/test_keywordonlyarg.py ============================================================================== --- python/branches/py3k-jit/Lib/test/test_keywordonlyarg.py (original) +++ python/branches/py3k-jit/Lib/test/test_keywordonlyarg.py Tue Mar 16 21:40:29 2010 @@ -1,4 +1,4 @@ -#!/usr/bin/env python +#!/usr/bin/env python3 """Unit tests for the keyword only argument specified in PEP 3102.""" Modified: python/branches/py3k-jit/Lib/test/test_logging.py ============================================================================== --- python/branches/py3k-jit/Lib/test/test_logging.py (original) +++ python/branches/py3k-jit/Lib/test/test_logging.py Tue Mar 16 21:40:29 2010 @@ -26,7 +26,6 @@ import logging.config import codecs -import copy import pickle import io import gc @@ -36,7 +35,6 @@ import select import socket from socketserver import ThreadingTCPServer, StreamRequestHandler -import string import struct import sys import tempfile @@ -44,8 +42,6 @@ find_unused_port import textwrap import threading -import time -import types import unittest import warnings import weakref @@ -361,7 +357,7 @@ def setUp(self): BaseTest.setUp(self) - for k, v in list(my_logging_levels.items()): + for k, v in my_logging_levels.items(): logging.addLevelName(k, v) def log_at_all_levels(self, logger): @@ -831,7 +827,7 @@ # Trigger cycle breaking. gc.collect() dead = [] - for (id_, repr_), ref in list(self._survivors.items()): + for (id_, repr_), ref in self._survivors.items(): if ref() is None: dead.append(repr_) if dead: @@ -870,7 +866,7 @@ # the non-ascii data we write to the log. data = "foo\x80" try: - handler = logging.FileHandler(fn, encoding="utf8") + handler = logging.FileHandler(fn, encoding="utf-8") log.addHandler(handler) try: # write non-ascii data to the log. @@ -879,7 +875,7 @@ log.removeHandler(handler) handler.close() # check we wrote exactly those bytes, ignoring trailing \n etc - f = open(fn, encoding="utf8") + f = open(fn, encoding="utf-8") try: self.assertEqual(f.read().rstrip(), data) finally: @@ -956,6 +952,7 @@ # config0 is a standard configuration. config0 = { + 'version': 1, 'formatters': { 'form1' : { 'format' : '%(levelname)s ++ %(message)s', @@ -977,6 +974,7 @@ # config1 adds a little to the standard configuration. config1 = { + 'version': 1, 'formatters': { 'form1' : { 'format' : '%(levelname)s ++ %(message)s', @@ -1003,6 +1001,7 @@ # config2 has a subtle configuration error that should be reported config2 = { + 'version': 1, 'formatters': { 'form1' : { 'format' : '%(levelname)s ++ %(message)s', @@ -1029,6 +1028,7 @@ #As config1 but with a misspelt level on a handler config2a = { + 'version': 1, 'formatters': { 'form1' : { 'format' : '%(levelname)s ++ %(message)s', @@ -1056,6 +1056,7 @@ #As config1 but with a misspelt level on a logger config2b = { + 'version': 1, 'formatters': { 'form1' : { 'format' : '%(levelname)s ++ %(message)s', @@ -1082,6 +1083,7 @@ # config3 has a less subtle configuration error config3 = { + 'version': 1, 'formatters': { 'form1' : { 'format' : '%(levelname)s ++ %(message)s', @@ -1108,6 +1110,7 @@ # config4 specifies a custom formatter class to be loaded config4 = { + 'version': 1, 'formatters': { 'form1' : { '()' : __name__ + '.ExceptionFormatter', @@ -1130,6 +1133,7 @@ # As config4 but using an actual callable rather than a string config4a = { + 'version': 1, 'formatters': { 'form1' : { '()' : ExceptionFormatter, @@ -1163,6 +1167,7 @@ # config5 specifies a custom handler class to be loaded config5 = { + 'version': 1, 'formatters': { 'form1' : { 'format' : '%(levelname)s ++ %(message)s', @@ -1190,6 +1195,7 @@ # config6 specifies a custom handler class to be loaded # but has bad arguments config6 = { + 'version': 1, 'formatters': { 'form1' : { 'format' : '%(levelname)s ++ %(message)s', @@ -1218,6 +1224,7 @@ #config 7 does not define compiler.parser but defines compiler.lexer #so compiler.parser should be disabled after applying it config7 = { + 'version': 1, 'formatters': { 'form1' : { 'format' : '%(levelname)s ++ %(message)s', @@ -1243,6 +1250,7 @@ } config8 = { + 'version': 1, 'disable_existing_loggers' : False, 'formatters': { 'form1' : { @@ -1271,6 +1279,7 @@ } config9 = { + 'version': 1, 'formatters': { 'form1' : { 'format' : '%(levelname)s ++ %(message)s', @@ -1296,6 +1305,7 @@ } config9a = { + 'version': 1, 'incremental' : True, 'handlers' : { 'hand1' : { @@ -1310,6 +1320,7 @@ } config9b = { + 'version': 1, 'incremental' : True, 'handlers' : { 'hand1' : { @@ -1325,6 +1336,7 @@ #As config1 but with a filter added config10 = { + 'version': 1, 'formatters': { 'form1' : { 'format' : '%(levelname)s ++ %(message)s', @@ -1358,6 +1370,68 @@ #As config1 but using cfg:// references config11 = { + 'version': 1, + 'true_formatters': { + 'form1' : { + 'format' : '%(levelname)s ++ %(message)s', + }, + }, + 'handler_configs': { + 'hand1' : { + 'class' : 'logging.StreamHandler', + 'formatter' : 'form1', + 'level' : 'NOTSET', + 'stream' : 'ext://sys.stdout', + }, + }, + 'formatters' : 'cfg://true_formatters', + 'handlers' : { + 'hand1' : 'cfg://handler_configs[hand1]', + }, + 'loggers' : { + 'compiler.parser' : { + 'level' : 'DEBUG', + 'handlers' : ['hand1'], + }, + }, + 'root' : { + 'level' : 'WARNING', + }, + } + + #As config11 but missing the version key + config12 = { + 'true_formatters': { + 'form1' : { + 'format' : '%(levelname)s ++ %(message)s', + }, + }, + 'handler_configs': { + 'hand1' : { + 'class' : 'logging.StreamHandler', + 'formatter' : 'form1', + 'level' : 'NOTSET', + 'stream' : 'ext://sys.stdout', + }, + }, + 'formatters' : 'cfg://true_formatters', + 'handlers' : { + 'hand1' : 'cfg://handler_configs[hand1]', + }, + 'loggers' : { + 'compiler.parser' : { + 'level' : 'DEBUG', + 'handlers' : ['hand1'], + }, + }, + 'root' : { + 'level' : 'WARNING', + }, + } + + #As config11 but using an unsupported version + config13 = { + 'version': 2, 'true_formatters': { 'form1' : { 'format' : '%(levelname)s ++ %(message)s', @@ -1573,13 +1647,19 @@ def test_config11_ok(self): self.test_config1_ok(self.config11) + def test_config12_failure(self): + self.assertRaises(Exception, self.apply_config, self.config12) + + def test_config13_failure(self): + self.assertRaises(Exception, self.apply_config, self.config13) + def setup_via_listener(self, text): + text = text.encode("utf-8") port = find_unused_port() t = logging.config.listen(port) t.start() t.ready.wait() t.ready.clear() - text = text.encode('utf-8') try: sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) sock.settimeout(2.0) Modified: python/branches/py3k-jit/Lib/test/test_long.py ============================================================================== --- python/branches/py3k-jit/Lib/test/test_long.py (original) +++ python/branches/py3k-jit/Lib/test/test_long.py Tue Mar 16 21:40:29 2010 @@ -402,8 +402,6 @@ self.assertEqual(int(float(x)), y) def test_float_overflow(self): - import math - for x in -2.0, -1.0, 0.0, 1.0, 2.0: self.assertEqual(float(int(x)), x) @@ -435,8 +433,6 @@ "float(shuge) should not equal int(shuge)") def test_logs(self): - import math - LOG10E = math.log10(math.e) for exp in list(range(10)) + [100, 1000, 10000]: @@ -456,7 +452,6 @@ def test_mixed_compares(self): eq = self.assertEqual - import math # We're mostly concerned with that mixing floats and longs does the # right stuff, even when longs are too large to fit in a float. @@ -502,7 +497,7 @@ self.d = d assert float(n) / float(d) == value else: - raise TypeError("can't deal with %r" % val) + raise TypeError("can't deal with %r" % value) def _cmp__(self, other): if not isinstance(other, Rat): Modified: python/branches/py3k-jit/Lib/test/test_marshal.py ============================================================================== --- python/branches/py3k-jit/Lib/test/test_marshal.py (original) +++ python/branches/py3k-jit/Lib/test/test_marshal.py Tue Mar 16 21:40:29 2010 @@ -1,4 +1,4 @@ -#!/usr/bin/env python +#!/usr/bin/env python3 from test import support import marshal Modified: python/branches/py3k-jit/Lib/test/test_memoryio.py ============================================================================== --- python/branches/py3k-jit/Lib/test/test_memoryio.py (original) +++ python/branches/py3k-jit/Lib/test/test_memoryio.py Tue Mar 16 21:40:29 2010 @@ -8,7 +8,6 @@ import io import _pyio as pyio -import sys import pickle class MemorySeekTestMixin: Modified: python/branches/py3k-jit/Lib/test/test_minidom.py ============================================================================== --- python/branches/py3k-jit/Lib/test/test_minidom.py (original) +++ python/branches/py3k-jit/Lib/test/test_minidom.py Tue Mar 16 21:40:29 2010 @@ -1,9 +1,7 @@ # test for xml.dom.minidom -import os -import sys import pickle -from test.support import verbose, run_unittest +from test.support import verbose, run_unittest, findfile import unittest import xml.dom @@ -14,12 +12,8 @@ from xml.dom.minidom import getDOMImplementation -if __name__ == "__main__": - base = sys.argv[0] -else: - base = __file__ -tstfile = os.path.join(os.path.dirname(base), "test.xml") -del base +tstfile = findfile("test.xml", subdir="xmltestdata") + # The tests of DocumentType importing use these helpers to construct # the documents to work with, since not all DOM builders actually @@ -1455,12 +1449,13 @@ self.confirm(len(n1.entities) == len(n2.entities) and len(n1.notations) == len(n2.notations)) for i in range(len(n1.notations)): + # XXX this loop body doesn't seem to be executed? no1 = n1.notations.item(i) no2 = n1.notations.item(i) self.confirm(no1.name == no2.name and no1.publicId == no2.publicId and no1.systemId == no2.systemId) - statck.append((no1, no2)) + stack.append((no1, no2)) for i in range(len(n1.entities)): e1 = n1.entities.item(i) e2 = n2.entities.item(i) Modified: python/branches/py3k-jit/Lib/test/test_multibytecodec.py ============================================================================== --- python/branches/py3k-jit/Lib/test/test_multibytecodec.py (original) +++ python/branches/py3k-jit/Lib/test/test_multibytecodec.py Tue Mar 16 21:40:29 2010 @@ -1,11 +1,10 @@ -#!/usr/bin/env python +#!/usr/bin/env python3 # # test_multibytecodec.py # Unit test for multibytecodec itself # from test import support -from test import test_multibytecodec_support from test.support import TESTFN import unittest, io, codecs, sys, os import _multibytecodec Modified: python/branches/py3k-jit/Lib/test/test_multibytecodec_support.py ============================================================================== --- python/branches/py3k-jit/Lib/test/test_multibytecodec_support.py (original) +++ python/branches/py3k-jit/Lib/test/test_multibytecodec_support.py Tue Mar 16 21:40:29 2010 @@ -1,4 +1,4 @@ -#!/usr/bin/env python +#!/usr/bin/env python3 # # test_multibytecodec_support.py # Common Unittest Routines for CJK codecs Modified: python/branches/py3k-jit/Lib/test/test_multiprocessing.py ============================================================================== --- python/branches/py3k-jit/Lib/test/test_multiprocessing.py (original) +++ python/branches/py3k-jit/Lib/test/test_multiprocessing.py Tue Mar 16 21:40:29 2010 @@ -1,4 +1,4 @@ -#!/usr/bin/env python +#!/usr/bin/env python3 # # Unit tests for the multiprocessing package @@ -1600,10 +1600,10 @@ return x = Value('i', 7, lock=lock) - y = Value(ctypes.c_double, 1.0/3.0, lock=lock) + y = Value(c_double, 1.0/3.0, lock=lock) foo = Value(_Foo, 3, 2, lock=lock) - arr = Array('d', list(range(10)), lock=lock) - string = Array('c', 20, lock=lock) + arr = self.Array('d', list(range(10)), lock=lock) + string = self.Array('c', 20, lock=lock) string.value = 'hello' p = self.Process(target=self._double, args=(x, y, foo, arr, string)) Modified: python/branches/py3k-jit/Lib/test/test_ntpath.py ============================================================================== --- python/branches/py3k-jit/Lib/test/test_ntpath.py (original) +++ python/branches/py3k-jit/Lib/test/test_ntpath.py Tue Mar 16 21:40:29 2010 @@ -1,6 +1,6 @@ import ntpath import os -from test.support import verbose, TestFailed +from test.support import TestFailed from test import support, test_genericpath import unittest Modified: python/branches/py3k-jit/Lib/test/test_optparse.py ============================================================================== --- python/branches/py3k-jit/Lib/test/test_optparse.py (original) +++ python/branches/py3k-jit/Lib/test/test_optparse.py Tue Mar 16 21:40:29 2010 @@ -1,5 +1,3 @@ -#!/usr/bin/python - # # Test suite for Optik. Supplied by Johannes Gijsbers # (taradino at softhome.net) -- translated from the original Optik @@ -18,9 +16,9 @@ from test import support -from optparse import make_option, Option, IndentedHelpFormatter, \ - TitledHelpFormatter, OptionParser, OptionContainer, OptionGroup, \ - SUPPRESS_HELP, SUPPRESS_USAGE, OptionError, OptionConflictError, \ +from optparse import make_option, Option, \ + TitledHelpFormatter, OptionParser, OptionGroup, \ + SUPPRESS_USAGE, OptionError, OptionConflictError, \ BadOptionError, OptionValueError, Values from optparse import _match_abbrev from optparse import _parse_num @@ -443,7 +441,7 @@ return int(value) else: return int(value[:-1]) * _time_units[value[-1]] - except ValueError as IndexError: + except (ValueError, IndexError): raise OptionValueError( 'option %s: invalid duration: %r' % (opt, value)) @@ -1226,7 +1224,6 @@ def variable_args(self, option, opt, value, parser): self.assertTrue(value is None) - done = 0 value = [] rargs = parser.rargs while rargs: Modified: python/branches/py3k-jit/Lib/test/test_os.py ============================================================================== --- python/branches/py3k-jit/Lib/test/test_os.py (original) +++ python/branches/py3k-jit/Lib/test/test_os.py Tue Mar 16 21:40:29 2010 @@ -154,7 +154,6 @@ self.assertTrue(s == "foobar") def test_tmpnam(self): - import sys if not hasattr(os, "tmpnam"): return warnings.filterwarnings("ignore", "tmpnam", RuntimeWarning, @@ -215,8 +214,6 @@ self.assertEquals(result[stat.ST_SIZE], 3) self.assertEquals(result.st_size, 3) - import sys - # Make sure all the attributes are there members = dir(result) for name in dir(stat): Modified: python/branches/py3k-jit/Lib/test/test_parser.py ============================================================================== --- python/branches/py3k-jit/Lib/test/test_parser.py (original) +++ python/branches/py3k-jit/Lib/test/test_parser.py Tue Mar 16 21:40:29 2010 @@ -1,5 +1,4 @@ import parser -import os import unittest import sys import operator Modified: python/branches/py3k-jit/Lib/test/test_pdb.py ============================================================================== --- python/branches/py3k-jit/Lib/test/test_pdb.py (original) +++ python/branches/py3k-jit/Lib/test/test_pdb.py Tue Mar 16 21:40:29 2010 @@ -2,10 +2,7 @@ # specified test modules (RFE #5142). import imp -import os import sys -import doctest -import tempfile from test import support # This little helper class is essential for testing pdb under doctest. Modified: python/branches/py3k-jit/Lib/test/test_pep292.py ============================================================================== --- python/branches/py3k-jit/Lib/test/test_pep292.py (original) +++ python/branches/py3k-jit/Lib/test/test_pep292.py Tue Mar 16 21:40:29 2010 @@ -86,13 +86,6 @@ s = Template('$who likes $100') raises(ValueError, s.substitute, dict(who='tim')) - def test_delimiter_override(self): - class PieDelims(Template): - delimiter = '@' - s = PieDelims('@who likes to eat a bag of @{what} worth $100') - self.assertEqual(s.substitute(dict(who='tim', what='ham')), - 'tim likes to eat a bag of ham worth $100') - def test_idpattern_override(self): class PathPattern(Template): idpattern = r'[_a-z][._a-z0-9]*' @@ -183,6 +176,12 @@ raises(ValueError, s.substitute, dict(gift='bud', who='you')) eq(s.safe_substitute(), 'this &gift is for &{who} &') + class PieDelims(Template): + delimiter = '@' + s = PieDelims('@who likes to eat a bag of @{what} worth $100') + self.assertEqual(s.substitute(dict(who='tim', what='ham')), + 'tim likes to eat a bag of ham worth $100') + def test_main(): from test import support Modified: python/branches/py3k-jit/Lib/test/test_platform.py ============================================================================== --- python/branches/py3k-jit/Lib/test/test_platform.py (original) +++ python/branches/py3k-jit/Lib/test/test_platform.py Tue Mar 16 21:40:29 2010 @@ -175,8 +175,10 @@ if os.path.isdir(sys.executable) and \ os.path.exists(sys.executable+'.exe'): # Cygwin horror - executable = executable + '.exe' - res = platform.libc_ver(sys.executable) + executable = sys.executable + '.exe' + else: + executable = sys.executable + res = platform.libc_ver(executable) def test_parse_release_file(self): Modified: python/branches/py3k-jit/Lib/test/test_popen.py ============================================================================== --- python/branches/py3k-jit/Lib/test/test_popen.py (original) +++ python/branches/py3k-jit/Lib/test/test_popen.py Tue Mar 16 21:40:29 2010 @@ -1,4 +1,4 @@ -#! /usr/bin/env python +#! /usr/bin/env python3 """Basic tests for os.popen() Particularly useful for platforms that fake popen. Modified: python/branches/py3k-jit/Lib/test/test_posixpath.py ============================================================================== --- python/branches/py3k-jit/Lib/test/test_posixpath.py (original) +++ python/branches/py3k-jit/Lib/test/test_posixpath.py Tue Mar 16 21:40:29 2010 @@ -2,7 +2,7 @@ from test import support, test_genericpath import posixpath, os -from posixpath import realpath, abspath, join, dirname, basename, relpath +from posixpath import realpath, abspath, dirname, basename # An absolute path to a temporary filename for testing. We can't rely on TESTFN # being an absolute path, so we need this. Modified: python/branches/py3k-jit/Lib/test/test_print.py ============================================================================== --- python/branches/py3k-jit/Lib/test/test_print.py (original) +++ python/branches/py3k-jit/Lib/test/test_print.py Tue Mar 16 21:40:29 2010 @@ -8,7 +8,6 @@ import unittest from test import support -import sys try: # 3.x from io import StringIO Modified: python/branches/py3k-jit/Lib/test/test_profile.py ============================================================================== --- python/branches/py3k-jit/Lib/test/test_profile.py (original) +++ python/branches/py3k-jit/Lib/test/test_profile.py Tue Mar 16 21:40:29 2010 @@ -1,6 +1,5 @@ """Test suite for the profile module.""" -import os import sys import pstats import unittest Modified: python/branches/py3k-jit/Lib/test/test_pyexpat.py ============================================================================== --- python/branches/py3k-jit/Lib/test/test_pyexpat.py (original) +++ python/branches/py3k-jit/Lib/test/test_pyexpat.py Tue Mar 16 21:40:29 2010 @@ -5,7 +5,6 @@ import sys import unittest -import pyexpat from xml.parsers import expat from test.support import sortdict, run_unittest Modified: python/branches/py3k-jit/Lib/test/test_queue.py ============================================================================== --- python/branches/py3k-jit/Lib/test/test_queue.py (original) +++ python/branches/py3k-jit/Lib/test/test_queue.py Tue Mar 16 21:40:29 2010 @@ -1,7 +1,6 @@ # Some simple queue module tests, plus some failure conditions # to ensure the Queue locks remain stable. import queue -import sys import threading import time import unittest Modified: python/branches/py3k-jit/Lib/test/test_random.py ============================================================================== --- python/branches/py3k-jit/Lib/test/test_random.py (original) +++ python/branches/py3k-jit/Lib/test/test_random.py Tue Mar 16 21:40:29 2010 @@ -1,11 +1,11 @@ -#!/usr/bin/env python +#!/usr/bin/env python3 import unittest import random import time import pickle import warnings -from math import log, exp, sqrt, pi, fsum, sin +from math import log, exp, pi, fsum, sin from test import support class TestBasicOps(unittest.TestCase): Modified: python/branches/py3k-jit/Lib/test/test_re.py ============================================================================== --- python/branches/py3k-jit/Lib/test/test_re.py (original) +++ python/branches/py3k-jit/Lib/test/test_re.py Tue Mar 16 21:40:29 2010 @@ -1,7 +1,7 @@ from test.support import verbose, run_unittest import re from re import Scanner -import sys, os, traceback +import sys, traceback from weakref import proxy # Misc tests from Tim Peters' re.doc @@ -748,7 +748,7 @@ self.assertRaises(TypeError, _sre.compile, {}, 0, []) def run_re_tests(): - from test.re_tests import benchmarks, tests, SUCCEED, FAIL, SYNTAX_ERROR + from test.re_tests import tests, SUCCEED, FAIL, SYNTAX_ERROR if verbose: print('Running re_tests test suite') else: Modified: python/branches/py3k-jit/Lib/test/test_richcmp.py ============================================================================== --- python/branches/py3k-jit/Lib/test/test_richcmp.py (original) +++ python/branches/py3k-jit/Lib/test/test_richcmp.py Tue Mar 16 21:40:29 2010 @@ -192,12 +192,12 @@ def test_misbehavin(self): class Misb: - def __lt__(self, other): return 0 - def __gt__(self, other): return 0 - def __eq__(self, other): return 0 - def __le__(self, other): raise TestFailed("This shouldn't happen") - def __ge__(self, other): raise TestFailed("This shouldn't happen") - def __ne__(self, other): raise TestFailed("This shouldn't happen") + def __lt__(self_, other): return 0 + def __gt__(self_, other): return 0 + def __eq__(self_, other): return 0 + def __le__(self_, other): self.fail("This shouldn't happen") + def __ge__(self_, other): self.fail("This shouldn't happen") + def __ne__(self_, other): self.fail("This shouldn't happen") a = Misb() b = Misb() self.assertEqual(a> bad data " "<<{outdata:s}>> ({nout:d}) received; " "expected <<{indata:s}>> ({nin:d})\n".format( @@ -1110,12 +1107,12 @@ ) except ValueError as e: if expect_success: - raise support.TestFailed( + self.fail( "Failed to send with method <<{name:s}>>; " "expected to succeed.\n".format(name=meth_name) ) if not str(e).startswith(meth_name): - raise support.TestFailed( + self.fail( "Method <<{name:s}>> failed with unexpected " "exception message: {exp:s}\n".format( name=meth_name, exp=e @@ -1129,7 +1126,7 @@ outdata = recv_meth(*args) outdata = str(outdata, 'ASCII', 'strict') if outdata != indata.lower(): - raise support.TestFailed( + self.fail( "While receiving with <<{name:s}>> bad data " "<<{outdata:s}>> ({nout:d}) received; " "expected <<{indata:s}>> ({nin:d})\n".format( @@ -1140,12 +1137,12 @@ ) except ValueError as e: if expect_success: - raise support.TestFailed( + self.fail( "Failed to receive with method <<{name:s}>>; " "expected to succeed.\n".format(name=meth_name) ) if not str(e).startswith(meth_name): - raise support.TestFailed( + self.fail( "Method <<{name:s}>> failed with unexpected " "exception message: {exp:s}\n".format( name=meth_name, exp=e Modified: python/branches/py3k-jit/Lib/test/test_strftime.py ============================================================================== --- python/branches/py3k-jit/Lib/test/test_strftime.py (original) +++ python/branches/py3k-jit/Lib/test/test_strftime.py Tue Mar 16 21:40:29 2010 @@ -4,7 +4,6 @@ import calendar import sys -import os import re from test import support import time @@ -117,16 +116,15 @@ try: result = time.strftime(e[0], now) except ValueError as error: - print("Standard '%s' format gaver error:" % (e[0], error)) - continue + self.fail("strftime '%s' format gave error: %s" % (e[0], error)) if re.match(escapestr(e[1], self.ampm), result): continue if not result or result[0] == '%': - print("Does not support standard '%s' format (%s)" % \ - (e[0], e[2])) + self.fail("strftime does not support standard '%s' format (%s)" + % (e[0], e[2])) else: - print("Conflict for %s (%s):" % (e[0], e[2])) - print(" Expected %s, but got %s" % (e[1], result)) + self.fail("Conflict for %s (%s): expected %s, but got %s" + % (e[0], e[2], e[1], result)) def strftest2(self, now): nowsecs = str(int(now))[:-1] Modified: python/branches/py3k-jit/Lib/test/test_structmembers.py ============================================================================== --- python/branches/py3k-jit/Lib/test/test_structmembers.py (original) +++ python/branches/py3k-jit/Lib/test/test_structmembers.py Tue Mar 16 21:40:29 2010 @@ -3,13 +3,25 @@ SHRT_MAX, SHRT_MIN, USHRT_MAX, \ INT_MAX, INT_MIN, UINT_MAX, \ LONG_MAX, LONG_MIN, ULONG_MAX, \ - LLONG_MAX, LLONG_MIN, ULLONG_MAX + LLONG_MAX, LLONG_MIN, ULLONG_MAX, \ + PY_SSIZE_T_MAX, PY_SSIZE_T_MIN -import warnings, unittest, sys +import unittest from test import support -ts=test_structmembersType(False, 1, 2, 3, 4, 5, 6, 7, 8, - 9.99999, 10.1010101010) +ts=test_structmembersType(False, # T_BOOL + 1, # T_BYTE + 2, # T_UBYTE + 3, # T_SHORT + 4, # T_USHORT + 5, # T_INT + 6, # T_UINT + 7, # T_LONG + 8, # T_ULONG + 23, # T_PYSSIZET + 9.99999,# T_FLOAT + 10.1010101010 # T_DOUBLE + ) class ReadWriteTests(unittest.TestCase): def test_types(self): @@ -47,6 +59,11 @@ ts.T_ULONG = ULONG_MAX self.assertEquals(ts.T_ULONG, ULONG_MAX) + ts.T_PYSSIZET = PY_SSIZE_T_MAX + self.assertEquals(ts.T_PYSSIZET, PY_SSIZE_T_MAX) + ts.T_PYSSIZET = PY_SSIZE_T_MIN + self.assertEquals(ts.T_PYSSIZET, PY_SSIZE_T_MIN) + ## T_LONGLONG and T_ULONGLONG may not be present on some platforms if hasattr(ts, 'T_LONGLONG'): ts.T_LONGLONG = LLONG_MAX @@ -63,6 +80,27 @@ ts.T_ULONGLONG = 4 self.assertEquals(ts.T_ULONGLONG, 4) + def test_bad_assignments(self): + # XXX testing of T_UINT and T_ULONG temporarily disabled; + # see issue 8014. + integer_attributes = [ + 'T_BOOL', + 'T_BYTE', 'T_UBYTE', + 'T_SHORT', 'T_USHORT', + 'T_INT', 'T_UINT', + 'T_LONG', 'T_ULONG', + 'T_PYSSIZET' + ] + + if hasattr(ts, 'T_LONGLONG'): + integer_attributes.extend(['T_LONGLONG', 'T_ULONGLONG']) + + # issue8014: this produced 'bad argument to internal function' + # internal error + for nonint in None, 3.2j, "full of eels", {}, []: + for attr in integer_attributes: + self.assertRaises(TypeError, setattr, ts, attr, nonint) + class TestWarnings(unittest.TestCase): def has_warned(self, w): Modified: python/branches/py3k-jit/Lib/test/test_subprocess.py ============================================================================== --- python/branches/py3k-jit/Lib/test/test_subprocess.py (original) +++ python/branches/py3k-jit/Lib/test/test_subprocess.py Tue Mar 16 21:40:29 2010 @@ -568,12 +568,53 @@ self.assertFalse(subprocess._active, "subprocess._active not empty") def test_exceptions(self): - # caught & re-raised exceptions - with self.assertRaises(OSError) as c: + nonexistent_dir = "/_this/pa.th/does/not/exist" + try: + os.chdir(nonexistent_dir) + except OSError as e: + # This avoids hard coding the errno value or the OS perror() + # string and instead capture the exception that we want to see + # below for comparison. + desired_exception = e + else: + self.fail("chdir to nonexistant directory %s succeeded." % + nonexistent_dir) + + # Error in the child re-raised in the parent. + try: p = subprocess.Popen([sys.executable, "-c", ""], - cwd="/this/path/does/not/exist") - # The attribute child_traceback should contain "os.chdir" somewhere. - self.assertIn("os.chdir", c.exception.child_traceback) + cwd=nonexistent_dir) + except OSError as e: + # Test that the child process chdir failure actually makes + # it up to the parent process as the correct exception. + self.assertEqual(desired_exception.errno, e.errno) + self.assertEqual(desired_exception.strerror, e.strerror) + else: + self.fail("Expected OSError: %s" % desired_exception) + + def test_restore_signals(self): + # Code coverage for both values of restore_signals to make sure it + # at least does not blow up. + # A test for behavior would be complex. Contributions welcome. + subprocess.call([sys.executable, "-c", ""], restore_signals=True) + subprocess.call([sys.executable, "-c", ""], restore_signals=False) + + def test_start_new_session(self): + # For code coverage of calling setsid(). We don't care if we get an + # EPERM error from it depending on the test execution environment, that + # still indicates that it was called. + try: + output = subprocess.check_output( + [sys.executable, "-c", + "import os; print(os.getpgid(os.getpid()))"], + start_new_session=True) + except OSError as e: + if e.errno != errno.EPERM: + raise + else: + parent_pgid = os.getpgid(os.getpid()) + child_pgid = int(output) + self.assertNotEqual(parent_pgid, child_pgid) def test_run_abort(self): # returncode handles signal termination @@ -584,7 +625,8 @@ self.assertEqual(-p.returncode, signal.SIGABRT) def test_preexec(self): - # preexec function + # DISCLAIMER: Setting environment variables is *not* a good use + # of a preexec_fn. This is merely a test. p = subprocess.Popen([sys.executable, "-c", 'import sys,os;' 'sys.stdout.write(os.getenv("FRUIT"))'], @@ -592,6 +634,22 @@ preexec_fn=lambda: os.putenv("FRUIT", "apple")) self.assertEqual(p.stdout.read(), b"apple") + def test_preexec_exception(self): + def raise_it(): + raise ValueError("What if two swallows carried a coconut?") + try: + p = subprocess.Popen([sys.executable, "-c", ""], + preexec_fn=raise_it) + except RuntimeError as e: + self.assertTrue( + subprocess._posixsubprocess, + "Expected a ValueError from the preexec_fn") + except ValueError as e: + self.assertIn("coconut", e.args[0]) + else: + self.fail("Exception raised by preexec_fn did not make it " + "to the parent process.") + def test_args_string(self): # args is a string fd, fname = mkstemp() @@ -836,6 +894,20 @@ ProcessTestCase.tearDown(self) + at unittest.skipUnless(getattr(subprocess, '_posixsubprocess', False), + "_posixsubprocess extension module not found.") +class ProcessTestCasePOSIXPurePython(ProcessTestCase, POSIXProcessTestCase): + def setUp(self): + subprocess._posixsubprocess = None + ProcessTestCase.setUp(self) + POSIXProcessTestCase.setUp(self) + + def tearDown(self): + subprocess._posixsubprocess = sys.modules['_posixsubprocess'] + POSIXProcessTestCase.tearDown(self) + ProcessTestCase.tearDown(self) + + class HelperFunctionTests(unittest.TestCase): @unittest.skipIf(mswindows, "errno and EINTR make no sense on windows") def test_eintr_retry_call(self): @@ -859,6 +931,7 @@ unit_tests = (ProcessTestCase, POSIXProcessTestCase, Win32ProcessTestCase, + ProcessTestCasePOSIXPurePython, CommandTests, ProcessTestCaseNoPoll, HelperFunctionTests) Modified: python/branches/py3k-jit/Lib/test/test_sys.py ============================================================================== --- python/branches/py3k-jit/Lib/test/test_sys.py (original) +++ python/branches/py3k-jit/Lib/test/test_sys.py Tue Mar 16 21:40:29 2010 @@ -461,7 +461,7 @@ sys._clear_type_cache() def test_ioencoding(self): - import subprocess,os + import subprocess env = dict(os.environ) # Test character: cent sign, encoded as 0x4A (ASCII J) in CP424, @@ -479,6 +479,23 @@ out = p.communicate()[0].strip() self.assertEqual(out, b'?') + def test_executable(self): + # Issue #7774: Ensure that sys.executable is an empty string if argv[0] + # has been set to an non existent program name and Python is unable to + # retrieve the real program name + import subprocess + # For a normal installation, it should work without 'cwd' + # argument. For test runs in the build directory, see #7774. + python_dir = os.path.dirname(os.path.realpath(sys.executable)) + p = subprocess.Popen( + ["nonexistent", "-c", + 'import sys; print(sys.executable.encode("ascii", "backslashreplace"))'], + executable=sys.executable, stdout=subprocess.PIPE, cwd=python_dir) + stdout = p.communicate()[0] + executable = stdout.strip().decode("ASCII") + p.wait() + self.assertIn(executable, ["b''", repr(sys.executable.encode("ascii", "backslashreplace"))]) + class SizeofTest(unittest.TestCase): Modified: python/branches/py3k-jit/Lib/test/test_sysconfig.py ============================================================================== --- python/branches/py3k-jit/Lib/test/test_sysconfig.py (original) +++ python/branches/py3k-jit/Lib/test/test_sysconfig.py Tue Mar 16 21:40:29 2010 @@ -6,11 +6,12 @@ """ import unittest import sys -import test import os +import subprocess +import shutil from copy import copy, deepcopy -from test.support import run_unittest, TESTFN +from test.support import run_unittest, TESTFN, unlink, get_attribute import sysconfig from sysconfig import (get_paths, get_platform, get_config_vars, @@ -237,6 +238,22 @@ 'posix_prefix', 'posix_user') self.assertEquals(get_scheme_names(), wanted) + def test_symlink(self): + # Issue 7880 + symlink = get_attribute(os, "symlink") + def get(python): + cmd = [python, '-c', + 'import sysconfig; print(sysconfig.get_platform())'] + p = subprocess.Popen(cmd, stdout=subprocess.PIPE) + return p.communicate() + real = os.path.realpath(sys.executable) + link = os.path.abspath(TESTFN) + symlink(real, link) + try: + self.assertEqual(get(real), get(link)) + finally: + unlink(link) + def test_main(): run_unittest(TestSysConfig) Modified: python/branches/py3k-jit/Lib/test/test_tarfile.py ============================================================================== --- python/branches/py3k-jit/Lib/test/test_tarfile.py (original) +++ python/branches/py3k-jit/Lib/test/test_tarfile.py Tue Mar 16 21:40:29 2010 @@ -2,7 +2,6 @@ import os import io import shutil -import tempfile import io from hashlib import md5 import errno Modified: python/branches/py3k-jit/Lib/test/test_tcl.py ============================================================================== --- python/branches/py3k-jit/Lib/test/test_tcl.py (original) +++ python/branches/py3k-jit/Lib/test/test_tcl.py Tue Mar 16 21:40:29 2010 @@ -1,4 +1,4 @@ -#!/usr/bin/env python +#!/usr/bin/env python3 import unittest import os Modified: python/branches/py3k-jit/Lib/test/test_tempfile.py ============================================================================== --- python/branches/py3k-jit/Lib/test/test_tempfile.py (original) +++ python/branches/py3k-jit/Lib/test/test_tempfile.py Tue Mar 16 21:40:29 2010 @@ -3,7 +3,6 @@ import os import sys import re -import errno import warnings import unittest @@ -127,7 +126,7 @@ if i == 20: break except: - failOnException("iteration") + self.failOnException("iteration") test_classes.append(test__RandomNameSequence) Modified: python/branches/py3k-jit/Lib/test/test_threaded_import.py ============================================================================== --- python/branches/py3k-jit/Lib/test/test_threaded_import.py (original) +++ python/branches/py3k-jit/Lib/test/test_threaded_import.py Tue Mar 16 21:40:29 2010 @@ -6,6 +6,7 @@ # randrange, and then Python hangs. import _thread as thread +import unittest from test.support import verbose, TestFailed critical_section = thread.allocate_lock() Modified: python/branches/py3k-jit/Lib/test/test_ttk_guionly.py ============================================================================== --- python/branches/py3k-jit/Lib/test/test_ttk_guionly.py (original) +++ python/branches/py3k-jit/Lib/test/test_ttk_guionly.py Tue Mar 16 21:40:29 2010 @@ -1,5 +1,4 @@ import os -import sys import unittest from test import support Modified: python/branches/py3k-jit/Lib/test/test_ttk_textonly.py ============================================================================== --- python/branches/py3k-jit/Lib/test/test_ttk_textonly.py (original) +++ python/branches/py3k-jit/Lib/test/test_ttk_textonly.py Tue Mar 16 21:40:29 2010 @@ -1,5 +1,4 @@ import os -import sys from test import support # Skip this test if _tkinter does not exist. Modified: python/branches/py3k-jit/Lib/test/test_types.py ============================================================================== --- python/branches/py3k-jit/Lib/test/test_types.py (original) +++ python/branches/py3k-jit/Lib/test/test_types.py Tue Mar 16 21:40:29 2010 @@ -18,7 +18,6 @@ if not {'x': 1}: self.fail('{\'x\': 1} is false instead of true') def f(): pass class C: pass - import sys x = C() if not f: self.fail('f is false instead of true') if not C: self.fail('C is false instead of true') Modified: python/branches/py3k-jit/Lib/test/test_unittest.py ============================================================================== --- python/branches/py3k-jit/Lib/test/test_unittest.py (original) +++ python/branches/py3k-jit/Lib/test/test_unittest.py Tue Mar 16 21:40:29 2010 @@ -18,10 +18,15 @@ from copy import deepcopy import io import pickle +import warnings + ### Support code ################################################################ +def resultFactory(*_): + return unittest.TestResult() + class LoggingResult(unittest.TestResult): def __init__(self, log): self._events = log @@ -2076,6 +2081,70 @@ 'Tests getDescription() for a method with a longer ' 'docstring.')) +classDict = dict(unittest.TestResult.__dict__) +for m in ('addSkip', 'addExpectedFailure', 'addUnexpectedSuccess', + '__init__'): + del classDict[m] + +def __init__(self, stream=None, descriptions=None, verbosity=None): + self.failures = [] + self.errors = [] + self.testsRun = 0 + self.shouldStop = False +classDict['__init__'] = __init__ +OldResult = type('OldResult', (object,), classDict) + +class Test_OldTestResult(unittest.TestCase): + + def assertOldResultWarning(self, test, failures): + with warnings.catch_warnings(record=True) as log: + result = OldResult() + test.run(result) + self.assertEqual(len(result.failures), failures) + warning, = log + self.assertIs(warning.category, RuntimeWarning) + + def testOldTestResult(self): + class Test(unittest.TestCase): + def testSkip(self): + self.skipTest('foobar') + @unittest.expectedFailure + def testExpectedFail(self): + raise TypeError + @unittest.expectedFailure + def testUnexpectedSuccess(self): + pass + + for test_name, should_pass in (('testSkip', True), + ('testExpectedFail', True), + ('testUnexpectedSuccess', False)): + test = Test(test_name) + self.assertOldResultWarning(test, int(not should_pass)) + + def testOldTestTesultSetup(self): + class Test(unittest.TestCase): + def setUp(self): + self.skipTest('no reason') + def testFoo(self): + pass + self.assertOldResultWarning(Test('testFoo'), 0) + + def testOldTestResultClass(self): + @unittest.skip('no reason') + class Test(unittest.TestCase): + def testFoo(self): + pass + self.assertOldResultWarning(Test('testFoo'), 0) + + def testOldResultWithRunner(self): + class Test(unittest.TestCase): + def testFoo(self): + pass + runner = unittest.TextTestRunner(resultclass=OldResult, + stream=io.StringIO()) + # This will raise an exception if TextTestRunner can't handle old + # test result objects + runner.run(Test('testFoo')) ### Support code for Test_TestCase ################################################################ @@ -2578,21 +2647,27 @@ self.assertDictContainsSubset({'a': 1}, {'a': 1, 'b': 2}) self.assertDictContainsSubset({'a': 1, 'b': 2}, {'a': 1, 'b': 2}) - self.assertRaises(unittest.TestCase.failureException, - self.assertDictContainsSubset, {'a': 2}, {'a': 1}, - '.*Mismatched values:.*') + with self.assertRaises(self.failureException): + self.assertDictContainsSubset({1: "one"}, {}) - self.assertRaises(unittest.TestCase.failureException, - self.assertDictContainsSubset, {'c': 1}, {'a': 1}, - '.*Missing:.*') + with self.assertRaises(self.failureException): + self.assertDictContainsSubset({'a': 2}, {'a': 1}) - self.assertRaises(unittest.TestCase.failureException, - self.assertDictContainsSubset, {'a': 1, 'c': 1}, - {'a': 1}, '.*Missing:.*') + with self.assertRaises(self.failureException): + self.assertDictContainsSubset({'c': 1}, {'a': 1}) - self.assertRaises(unittest.TestCase.failureException, - self.assertDictContainsSubset, {'a': 1, 'c': 1}, - {'a': 1}, '.*Missing:.*Mismatched values:.*') + with self.assertRaises(self.failureException): + self.assertDictContainsSubset({'a': 1, 'c': 1}, {'a': 1}) + + with self.assertRaises(self.failureException): + self.assertDictContainsSubset({'a': 1, 'c': 1}, {'a': 1}) + + with warnings.catch_warnings(record=True): + # silence the UnicodeWarning + one = ''.join(chr(i) for i in range(255)) + # this used to cause a UnicodeDecodeError constructing the failure msg + with self.assertRaises(self.failureException): + self.assertDictContainsSubset({'foo': one}, {'foo': '\uFFFD'}) def testAssertEqual(self): equal_pairs = [ @@ -3028,6 +3103,43 @@ self.assertEqual(result.unexpectedSuccesses, [test]) self.assertTrue(result.wasSuccessful()) + def test_skip_doesnt_run_setup(self): + class Foo(unittest.TestCase): + wasSetUp = False + wasTornDown = False + def setUp(self): + Foo.wasSetUp = True + def tornDown(self): + Foo.wasTornDown = True + @unittest.skip('testing') + def test_1(self): + pass + + result = unittest.TestResult() + test = Foo("test_1") + suite = unittest.TestSuite([test]) + suite.run(result) + self.assertEqual(result.skipped, [(test, "testing")]) + self.assertFalse(Foo.wasSetUp) + self.assertFalse(Foo.wasTornDown) + + def test_decorated_skip(self): + def decorator(func): + def inner(*a): + return func(*a) + return inner + + class Foo(unittest.TestCase): + @decorator + @unittest.skip('testing') + def test_1(self): + pass + + result = unittest.TestResult() + test = Foo("test_1") + suite = unittest.TestSuite([test]) + suite.run(result) + self.assertEqual(result.skipped, [(test, "testing")]) class Test_Assertions(TestCase): @@ -3131,6 +3243,16 @@ self.assertEquals(self.testableTrue._formatMessage(None, "foo"), "foo") self.assertEquals(self.testableTrue._formatMessage("foo", "bar"), "bar : foo") + # This blows up if _formatMessage uses string concatenation + self.testableTrue._formatMessage(object(), 'foo') + + def test_formatMessage_unicode_error(self): + with warnings.catch_warnings(record=True): + # This causes a UnicodeWarning due to its craziness + one = ''.join(chr(i) for i in range(255)) + # this used to cause a UnicodeDecodeError constructing msg + self.testableTrue._formatMessage(one, '\uFFFD') + def assertMessages(self, methodName, args, errors): def getMethod(i): useTestableFalse = i < 2 @@ -3795,6 +3917,397 @@ self.assertEqual(program.verbosity, 2) +class TestSetups(unittest.TestCase): + + def getRunner(self): + return unittest.TextTestRunner(resultclass=resultFactory, + stream=io.StringIO()) + def runTests(self, *cases): + suite = unittest.TestSuite() + for case in cases: + tests = unittest.defaultTestLoader.loadTestsFromTestCase(case) + suite.addTests(tests) + + runner = self.getRunner() + + # creating a nested suite exposes some potential bugs + realSuite = unittest.TestSuite() + realSuite.addTest(suite) + # adding empty suites to the end exposes potential bugs + suite.addTest(unittest.TestSuite()) + realSuite.addTest(unittest.TestSuite()) + return runner.run(realSuite) + + def test_setup_class(self): + class Test(unittest.TestCase): + setUpCalled = 0 + @classmethod + def setUpClass(cls): + Test.setUpCalled += 1 + unittest.TestCase.setUpClass() + def test_one(self): + pass + def test_two(self): + pass + + result = self.runTests(Test) + + self.assertEqual(Test.setUpCalled, 1) + self.assertEqual(result.testsRun, 2) + self.assertEqual(len(result.errors), 0) + + def test_teardown_class(self): + class Test(unittest.TestCase): + tearDownCalled = 0 + @classmethod + def tearDownClass(cls): + Test.tearDownCalled += 1 + unittest.TestCase.tearDownClass() + def test_one(self): + pass + def test_two(self): + pass + + result = self.runTests(Test) + + self.assertEqual(Test.tearDownCalled, 1) + self.assertEqual(result.testsRun, 2) + self.assertEqual(len(result.errors), 0) + + def test_teardown_class_two_classes(self): + class Test(unittest.TestCase): + tearDownCalled = 0 + @classmethod + def tearDownClass(cls): + Test.tearDownCalled += 1 + unittest.TestCase.tearDownClass() + def test_one(self): + pass + def test_two(self): + pass + + class Test2(unittest.TestCase): + tearDownCalled = 0 + @classmethod + def tearDownClass(cls): + Test2.tearDownCalled += 1 + unittest.TestCase.tearDownClass() + def test_one(self): + pass + def test_two(self): + pass + + result = self.runTests(Test, Test2) + + self.assertEqual(Test.tearDownCalled, 1) + self.assertEqual(Test2.tearDownCalled, 1) + self.assertEqual(result.testsRun, 4) + self.assertEqual(len(result.errors), 0) + + def test_error_in_setupclass(self): + class BrokenTest(unittest.TestCase): + @classmethod + def setUpClass(cls): + raise TypeError('foo') + def test_one(self): + pass + def test_two(self): + pass + + result = self.runTests(BrokenTest) + + self.assertEqual(result.testsRun, 0) + self.assertEqual(len(result.errors), 1) + error, _ = result.errors[0] + self.assertEqual(str(error), + 'classSetUp (%s.BrokenTest)' % __name__) + + def test_error_in_teardown_class(self): + class Test(unittest.TestCase): + tornDown = 0 + @classmethod + def tearDownClass(cls): + Test.tornDown += 1 + raise TypeError('foo') + def test_one(self): + pass + def test_two(self): + pass + + class Test2(unittest.TestCase): + tornDown = 0 + @classmethod + def tearDownClass(cls): + Test2.tornDown += 1 + raise TypeError('foo') + def test_one(self): + pass + def test_two(self): + pass + + result = self.runTests(Test, Test2) + self.assertEqual(result.testsRun, 4) + self.assertEqual(len(result.errors), 2) + self.assertEqual(Test.tornDown, 1) + self.assertEqual(Test2.tornDown, 1) + + error, _ = result.errors[0] + self.assertEqual(str(error), + 'classTearDown (%s.Test)' % __name__) + + def test_class_not_torndown_when_setup_fails(self): + class Test(unittest.TestCase): + tornDown = False + @classmethod + def setUpClass(cls): + raise TypeError + @classmethod + def tearDownClass(cls): + Test.tornDown = True + raise TypeError('foo') + def test_one(self): + pass + + self.runTests(Test) + self.assertFalse(Test.tornDown) + + def test_class_not_setup_or_torndown_when_skipped(self): + class Test(unittest.TestCase): + classSetUp = False + tornDown = False + @classmethod + def setUpClass(cls): + Test.classSetUp = True + @classmethod + def tearDownClass(cls): + Test.tornDown = True + def test_one(self): + pass + + Test = unittest.skip("hop")(Test) + self.runTests(Test) + self.assertFalse(Test.classSetUp) + self.assertFalse(Test.tornDown) + + def test_setup_teardown_order_with_pathological_suite(self): + results = [] + + class Module1(object): + @staticmethod + def setUpModule(): + results.append('Module1.setUpModule') + @staticmethod + def tearDownModule(): + results.append('Module1.tearDownModule') + + class Module2(object): + @staticmethod + def setUpModule(): + results.append('Module2.setUpModule') + @staticmethod + def tearDownModule(): + results.append('Module2.tearDownModule') + + class Test1(unittest.TestCase): + @classmethod + def setUpClass(cls): + results.append('setup 1') + @classmethod + def tearDownClass(cls): + results.append('teardown 1') + def testOne(self): + results.append('Test1.testOne') + def testTwo(self): + results.append('Test1.testTwo') + + class Test2(unittest.TestCase): + @classmethod + def setUpClass(cls): + results.append('setup 2') + @classmethod + def tearDownClass(cls): + results.append('teardown 2') + def testOne(self): + results.append('Test2.testOne') + def testTwo(self): + results.append('Test2.testTwo') + + class Test3(unittest.TestCase): + @classmethod + def setUpClass(cls): + results.append('setup 3') + @classmethod + def tearDownClass(cls): + results.append('teardown 3') + def testOne(self): + results.append('Test3.testOne') + def testTwo(self): + results.append('Test3.testTwo') + + Test1.__module__ = Test2.__module__ = 'Module' + Test3.__module__ = 'Module2' + sys.modules['Module'] = Module1 + sys.modules['Module2'] = Module2 + + first = unittest.TestSuite((Test1('testOne'),)) + second = unittest.TestSuite((Test1('testTwo'),)) + third = unittest.TestSuite((Test2('testOne'),)) + fourth = unittest.TestSuite((Test2('testTwo'),)) + fifth = unittest.TestSuite((Test3('testOne'),)) + sixth = unittest.TestSuite((Test3('testTwo'),)) + suite = unittest.TestSuite((first, second, third, fourth, fifth, sixth)) + + runner = self.getRunner() + result = runner.run(suite) + self.assertEqual(result.testsRun, 6) + self.assertEqual(len(result.errors), 0) + + self.assertEqual(results, + ['Module1.setUpModule', 'setup 1', + 'Test1.testOne', 'Test1.testTwo', 'teardown 1', + 'setup 2', 'Test2.testOne', 'Test2.testTwo', + 'teardown 2', 'Module1.tearDownModule', + 'Module2.setUpModule', 'setup 3', + 'Test3.testOne', 'Test3.testTwo', + 'teardown 3', 'Module2.tearDownModule']) + + def test_setup_module(self): + class Module(object): + moduleSetup = 0 + @staticmethod + def setUpModule(): + Module.moduleSetup += 1 + + class Test(unittest.TestCase): + def test_one(self): + pass + def test_two(self): + pass + Test.__module__ = 'Module' + sys.modules['Module'] = Module + + result = self.runTests(Test) + self.assertEqual(Module.moduleSetup, 1) + self.assertEqual(result.testsRun, 2) + self.assertEqual(len(result.errors), 0) + + def test_error_in_setup_module(self): + class Module(object): + moduleSetup = 0 + moduleTornDown = 0 + @staticmethod + def setUpModule(): + Module.moduleSetup += 1 + raise TypeError('foo') + @staticmethod + def tearDownModule(): + Module.moduleTornDown += 1 + + class Test(unittest.TestCase): + classSetUp = False + classTornDown = False + @classmethod + def setUpClass(cls): + Test.classSetUp = True + @classmethod + def tearDownClass(cls): + Test.classTornDown = True + def test_one(self): + pass + def test_two(self): + pass + + class Test2(unittest.TestCase): + def test_one(self): + pass + def test_two(self): + pass + Test.__module__ = 'Module' + Test2.__module__ = 'Module' + sys.modules['Module'] = Module + + result = self.runTests(Test, Test2) + self.assertEqual(Module.moduleSetup, 1) + self.assertEqual(Module.moduleTornDown, 0) + self.assertEqual(result.testsRun, 0) + self.assertFalse(Test.classSetUp) + self.assertFalse(Test.classTornDown) + self.assertEqual(len(result.errors), 1) + error, _ = result.errors[0] + self.assertEqual(str(error), 'setUpModule (Module)') + + def test_testcase_with_missing_module(self): + class Test(unittest.TestCase): + def test_one(self): + pass + def test_two(self): + pass + Test.__module__ = 'Module' + sys.modules.pop('Module', None) + + result = self.runTests(Test) + self.assertEqual(result.testsRun, 2) + + def test_teardown_module(self): + class Module(object): + moduleTornDown = 0 + @staticmethod + def tearDownModule(): + Module.moduleTornDown += 1 + + class Test(unittest.TestCase): + def test_one(self): + pass + def test_two(self): + pass + Test.__module__ = 'Module' + sys.modules['Module'] = Module + + result = self.runTests(Test) + self.assertEqual(Module.moduleTornDown, 1) + self.assertEqual(result.testsRun, 2) + self.assertEqual(len(result.errors), 0) + + def test_error_in_teardown_module(self): + class Module(object): + moduleTornDown = 0 + @staticmethod + def tearDownModule(): + Module.moduleTornDown += 1 + raise TypeError('foo') + + class Test(unittest.TestCase): + classSetUp = False + classTornDown = False + @classmethod + def setUpClass(cls): + Test.classSetUp = True + @classmethod + def tearDownClass(cls): + Test.classTornDown = True + def test_one(self): + pass + def test_two(self): + pass + + class Test2(unittest.TestCase): + def test_one(self): + pass + def test_two(self): + pass + Test.__module__ = 'Module' + Test2.__module__ = 'Module' + sys.modules['Module'] = Module + + result = self.runTests(Test, Test2) + self.assertEqual(Module.moduleTornDown, 1) + self.assertEqual(result.testsRun, 4) + self.assertTrue(Test.classSetUp) + self.assertTrue(Test.classTornDown) + self.assertEqual(len(result.errors), 1) + error, _ = result.errors[0] + self.assertEqual(str(error), 'tearDownModule (Module)') + ###################################################################### ## Main ###################################################################### @@ -3803,7 +4316,8 @@ support.run_unittest(Test_TestCase, Test_TestLoader, Test_TestSuite, Test_TestResult, Test_FunctionTestCase, Test_TestSkipping, Test_Assertions, TestLongMessage, - Test_TestProgram, TestCleanUp, TestDiscovery, Test_TextTestRunner) + Test_TestProgram, TestCleanUp, TestDiscovery, Test_TextTestRunner, + Test_OldTestResult, TestSetups) if __name__ == "__main__": test_main() Modified: python/branches/py3k-jit/Lib/test/test_urllib2_localnet.py ============================================================================== --- python/branches/py3k-jit/Lib/test/test_urllib2_localnet.py (original) +++ python/branches/py3k-jit/Lib/test/test_urllib2_localnet.py Tue Mar 16 21:40:29 2010 @@ -1,4 +1,4 @@ -#!/usr/bin/env python +#!/usr/bin/env python3 import email import threading Modified: python/branches/py3k-jit/Lib/test/test_urllib2net.py ============================================================================== --- python/branches/py3k-jit/Lib/test/test_urllib2net.py (original) +++ python/branches/py3k-jit/Lib/test/test_urllib2net.py Tue Mar 16 21:40:29 2010 @@ -1,4 +1,4 @@ -#!/usr/bin/env python +#!/usr/bin/env python3 import unittest from test import support @@ -6,7 +6,6 @@ import os import socket -import sys import urllib.error import urllib.request @@ -75,8 +74,6 @@ class CloseSocketTest(unittest.TestCase): def test_close(self): - import socket, http.client, gc - # calling .close() on urllib2's response objects should close the # underlying socket @@ -150,7 +147,6 @@ ## self._test_urls(urls, self._extra_handlers()+[bauth, dauth]) def _test_urls(self, urls, handlers, retry=True): - import socket import time import logging debug = logging.getLogger("test_urllib2").debug Modified: python/branches/py3k-jit/Lib/test/test_urllibnet.py ============================================================================== --- python/branches/py3k-jit/Lib/test/test_urllibnet.py (original) +++ python/branches/py3k-jit/Lib/test/test_urllibnet.py Tue Mar 16 21:40:29 2010 @@ -1,4 +1,4 @@ -#!/usr/bin/env python +#!/usr/bin/env python3 import unittest from test import support Modified: python/branches/py3k-jit/Lib/test/test_urlparse.py ============================================================================== --- python/branches/py3k-jit/Lib/test/test_urlparse.py (original) +++ python/branches/py3k-jit/Lib/test/test_urlparse.py Tue Mar 16 21:40:29 2010 @@ -1,4 +1,4 @@ -#! /usr/bin/env python +#! /usr/bin/env python3 from test import support import unittest Modified: python/branches/py3k-jit/Lib/test/test_userstring.py ============================================================================== --- python/branches/py3k-jit/Lib/test/test_userstring.py (original) +++ python/branches/py3k-jit/Lib/test/test_userstring.py Tue Mar 16 21:40:29 2010 @@ -1,4 +1,4 @@ -#!/usr/bin/env python +#!/usr/bin/env python3 # UserString is a wrapper around the native builtin string type. # UserString instances should behave similar to builtin string objects. Modified: python/branches/py3k-jit/Lib/test/test_with.py ============================================================================== --- python/branches/py3k-jit/Lib/test/test_with.py (original) +++ python/branches/py3k-jit/Lib/test/test_with.py Tue Mar 16 21:40:29 2010 @@ -1,4 +1,4 @@ -#!/usr/bin/env python +#!/usr/bin/env python3 """Unit tests for the with statement specified in PEP 343.""" Modified: python/branches/py3k-jit/Lib/test/test_xml_etree.py ============================================================================== --- python/branches/py3k-jit/Lib/test/test_xml_etree.py (original) +++ python/branches/py3k-jit/Lib/test/test_xml_etree.py Tue Mar 16 21:40:29 2010 @@ -1,22 +1,46 @@ # xml.etree test. This file contains enough tests to make sure that -# all included components work as they should. For a more extensive -# test suite, see the selftest script in the ElementTree distribution. +# all included components work as they should. +# Large parts are extracted from the upstream test suite. + +# IMPORTANT: the same doctests are run from "test_xml_etree_c" in +# order to ensure consistency between the C implementation and the +# Python implementation. +# +# For this purpose, the module-level "ET" symbol is temporarily +# monkey-patched when running the "test_xml_etree_c" test suite. +# Don't re-import "xml.etree.ElementTree" module in the docstring, +# except if the test is specific to the Python implementation. -import doctest import sys from test import support +from test.support import findfile + +from xml.etree import ElementTree as ET + +SIMPLE_XMLFILE = findfile("simple.xml", subdir="xmltestdata") +SIMPLE_NS_XMLFILE = findfile("simple-ns.xml", subdir="xmltestdata") -SAMPLE_XML = """ +SAMPLE_XML = """\ - text - + text +
    - subtext + subtext
    """ +SAMPLE_SECTION = """\ +
    + subtext + + + + +
    +""" + SAMPLE_XML_NS = """ text @@ -27,6 +51,7 @@ """ + def sanity(): """ Import sanity. @@ -40,35 +65,110 @@ if not hasattr(method, '__call__'): print(method, "not callable") -def serialize(ET, elem): +def serialize(elem, to_string=True, **options): import io + if options.get("encoding"): + file = io.BytesIO() + else: + file = io.StringIO() tree = ET.ElementTree(elem) - file = io.StringIO() - tree.write(file) - return file.getvalue() + tree.write(file, **options) + if to_string: + return file.getvalue() + else: + file.seek(0) + return file def summarize(elem): + if elem.tag == ET.Comment: + return "" return elem.tag def summarize_list(seq): - return list(map(summarize, seq)) + return [summarize(elem) for elem in seq] + +def normalize_crlf(tree): + for elem in tree.iter(): + if elem.text: + elem.text = elem.text.replace("\r\n", "\n") + if elem.tail: + elem.tail = elem.tail.replace("\r\n", "\n") + +def normalize_exception(func, *args, **kwargs): + # Ignore the exception __module__ + try: + func(*args, **kwargs) + except Exception as err: + print("Traceback (most recent call last):") + print("{}: {}".format(err.__class__.__name__, err)) + +def check_string(string): + len(string) + for char in string: + if len(char) != 1: + print("expected one-character string, got %r" % char) + new_string = string + "" + new_string = string + " " + string[:0] + +def check_mapping(mapping): + len(mapping) + keys = mapping.keys() + items = mapping.items() + for key in keys: + item = mapping[key] + mapping["key"] = "value" + if mapping["key"] != "value": + print("expected value string, got %r" % mapping["key"]) + +def check_element(element): + if not ET.iselement(element): + print("not an element") + if not hasattr(element, "tag"): + print("no tag member") + if not hasattr(element, "attrib"): + print("no attrib member") + if not hasattr(element, "text"): + print("no text member") + if not hasattr(element, "tail"): + print("no tail member") + + check_string(element.tag) + check_mapping(element.attrib) + if element.text is not None: + check_string(element.text) + if element.tail is not None: + check_string(element.tail) + for elem in element: + check_element(elem) + +# -------------------------------------------------------------------- +# element tree tests def interface(): """ Test element tree interface. - >>> from xml.etree import ElementTree as ET + >>> element = ET.Element("tag") + >>> check_element(element) + >>> tree = ET.ElementTree(element) + >>> check_element(tree.getroot()) - >>> element = ET.Element("tag", key="value") + >>> element = ET.Element("t\\xe4g", key="value") >>> tree = ET.ElementTree(element) + >>> repr(element) # doctest: +ELLIPSIS + "" + >>> element = ET.Element("tag", key="value") Make sure all standard element methods exist. >>> check_method(element.append) + >>> check_method(element.extend) >>> check_method(element.insert) >>> check_method(element.remove) >>> check_method(element.getchildren) >>> check_method(element.find) + >>> check_method(element.iterfind) >>> check_method(element.findall) >>> check_method(element.findtext) >>> check_method(element.clear) @@ -76,38 +176,134 @@ >>> check_method(element.set) >>> check_method(element.keys) >>> check_method(element.items) + >>> check_method(element.iter) + >>> check_method(element.itertext) >>> check_method(element.getiterator) + These methods return an iterable. See bug 6472. + + >>> check_method(element.iter("tag").__next__) + >>> check_method(element.iterfind("tag").__next__) + >>> check_method(element.iterfind("*").__next__) + >>> check_method(tree.iter("tag").__next__) + >>> check_method(tree.iterfind("tag").__next__) + >>> check_method(tree.iterfind("*").__next__) + + These aliases are provided: + + >>> assert ET.XML == ET.fromstring + >>> assert ET.PI == ET.ProcessingInstruction + >>> assert ET.XMLParser == ET.XMLTreeBuilder + """ + +def simpleops(): + """ Basic method sanity checks. - >>> serialize(ET, element) # 1 + >>> elem = ET.XML("") + >>> serialize(elem) + '' + >>> e = ET.Element("tag2") + >>> elem.append(e) + >>> serialize(elem) + '' + >>> elem.remove(e) + >>> serialize(elem) + '' + >>> elem.insert(0, e) + >>> serialize(elem) + '' + >>> elem.remove(e) + >>> elem.extend([e]) + >>> serialize(elem) + '' + >>> elem.remove(e) + + >>> element = ET.Element("tag", key="value") + >>> serialize(element) # 1 '' >>> subelement = ET.Element("subtag") >>> element.append(subelement) - >>> serialize(ET, element) # 2 + >>> serialize(element) # 2 '' >>> element.insert(0, subelement) - >>> serialize(ET, element) # 3 + >>> serialize(element) # 3 '' >>> element.remove(subelement) - >>> serialize(ET, element) # 4 + >>> serialize(element) # 4 '' >>> element.remove(subelement) - >>> serialize(ET, element) # 5 + >>> serialize(element) # 5 '' >>> element.remove(subelement) Traceback (most recent call last): ValueError: list.remove(x): x not in list - >>> serialize(ET, element) # 6 + >>> serialize(element) # 6 '' + >>> element[0:0] = [subelement, subelement, subelement] + >>> serialize(element[1]) + '' + >>> element[1:9] == [element[1], element[2]] + True + >>> element[:9:2] == [element[0], element[2]] + True + >>> del element[1:2] + >>> serialize(element) + '' + """ + +def cdata(): + """ + Test CDATA handling (etc). + + >>> serialize(ET.XML("hello")) + 'hello' + >>> serialize(ET.XML("hello")) + 'hello' + >>> serialize(ET.XML("")) + 'hello' + """ + +# Only with Python implementation +def simplefind(): + """ + Test find methods using the elementpath fallback. + + >>> from xml.etree import ElementTree + + >>> CurrentElementPath = ElementTree.ElementPath + >>> ElementTree.ElementPath = ElementTree._SimpleElementPath() + >>> elem = ElementTree.XML(SAMPLE_XML) + >>> elem.find("tag").tag + 'tag' + >>> ElementTree.ElementTree(elem).find("tag").tag + 'tag' + >>> elem.findtext("tag") + 'text' + >>> elem.findtext("tog") + >>> elem.findtext("tog", "default") + 'default' + >>> ElementTree.ElementTree(elem).findtext("tag") + 'text' + >>> summarize_list(elem.findall("tag")) + ['tag', 'tag'] + >>> summarize_list(elem.findall(".//tag")) + ['tag', 'tag', 'tag'] + + Path syntax doesn't work in this case. + + >>> elem.find("section/tag") + >>> elem.findtext("section/tag") + >>> summarize_list(elem.findall("section/tag")) + [] + + >>> ElementTree.ElementPath = CurrentElementPath """ def find(): """ Test find methods (including xpath syntax). - >>> from xml.etree import ElementTree as ET - >>> elem = ET.XML(SAMPLE_XML) >>> elem.find("tag").tag 'tag' @@ -115,39 +311,67 @@ 'tag' >>> elem.find("section/tag").tag 'tag' + >>> elem.find("./tag").tag + 'tag' + >>> ET.ElementTree(elem).find("./tag").tag + 'tag' + >>> ET.ElementTree(elem).find("/tag").tag + 'tag' + >>> elem[2] = ET.XML(SAMPLE_SECTION) + >>> elem.find("section/nexttag").tag + 'nexttag' >>> ET.ElementTree(elem).find("section/tag").tag 'tag' + >>> ET.ElementTree(elem).find("tog") + >>> ET.ElementTree(elem).find("tog/foo") >>> elem.findtext("tag") 'text' + >>> elem.findtext("section/nexttag") + '' + >>> elem.findtext("section/nexttag", "default") + '' >>> elem.findtext("tog") >>> elem.findtext("tog", "default") 'default' >>> ET.ElementTree(elem).findtext("tag") 'text' + >>> ET.ElementTree(elem).findtext("tog/foo") + >>> ET.ElementTree(elem).findtext("tog/foo", "default") + 'default' + >>> ET.ElementTree(elem).findtext("./tag") + 'text' + >>> ET.ElementTree(elem).findtext("/tag") + 'text' >>> elem.findtext("section/tag") 'subtext' >>> ET.ElementTree(elem).findtext("section/tag") 'subtext' + >>> summarize_list(elem.findall(".")) + ['body'] >>> summarize_list(elem.findall("tag")) ['tag', 'tag'] + >>> summarize_list(elem.findall("tog")) + [] + >>> summarize_list(elem.findall("tog/foo")) + [] >>> summarize_list(elem.findall("*")) ['tag', 'tag', 'section'] >>> summarize_list(elem.findall(".//tag")) - ['tag', 'tag', 'tag'] + ['tag', 'tag', 'tag', 'tag'] >>> summarize_list(elem.findall("section/tag")) ['tag'] >>> summarize_list(elem.findall("section//tag")) - ['tag'] + ['tag', 'tag'] >>> summarize_list(elem.findall("section/*")) - ['tag'] + ['tag', 'nexttag', 'nextsection'] >>> summarize_list(elem.findall("section//*")) - ['tag'] + ['tag', 'nexttag', 'nextsection', 'tag'] >>> summarize_list(elem.findall("section/.//*")) - ['tag'] + ['tag', 'nexttag', 'nextsection', 'tag'] >>> summarize_list(elem.findall("*/*")) - ['tag'] + ['tag', 'nexttag', 'nextsection'] >>> summarize_list(elem.findall("*//*")) - ['tag'] + ['tag', 'nexttag', 'nextsection', 'tag'] >>> summarize_list(elem.findall("*/tag")) ['tag'] >>> summarize_list(elem.findall("*/./tag")) @@ -155,13 +379,40 @@ >>> summarize_list(elem.findall("./tag")) ['tag', 'tag'] >>> summarize_list(elem.findall(".//tag")) - ['tag', 'tag', 'tag'] + ['tag', 'tag', 'tag', 'tag'] >>> summarize_list(elem.findall("././tag")) ['tag', 'tag'] - >>> summarize_list(ET.ElementTree(elem).findall("/tag")) + >>> summarize_list(elem.findall(".//tag[@class]")) + ['tag', 'tag', 'tag'] + >>> summarize_list(elem.findall(".//tag[@class='a']")) + ['tag'] + >>> summarize_list(elem.findall(".//tag[@class='b']")) + ['tag', 'tag'] + >>> summarize_list(elem.findall(".//tag[@id]")) + ['tag'] + >>> summarize_list(elem.findall(".//section[tag]")) + ['section'] + >>> summarize_list(elem.findall(".//section[element]")) + [] + >>> summarize_list(elem.findall("../tag")) + [] + >>> summarize_list(elem.findall("section/../tag")) ['tag', 'tag'] >>> summarize_list(ET.ElementTree(elem).findall("./tag")) ['tag', 'tag'] + + Following example is invalid in 1.2. + A leading '*' is assumed in 1.3. + + >>> elem.findall("section//") == elem.findall("section//*") + True + + ET's Path module handles this case incorrectly; this gives + a warning in 1.3, and the behaviour will be modified in 1.4. + + >>> summarize_list(ET.ElementTree(elem).findall("/tag")) + ['tag', 'tag'] + >>> elem = ET.XML(SAMPLE_XML_NS) >>> summarize_list(elem.findall("tag")) [] @@ -171,21 +422,227 @@ ['{http://effbot.org/ns}tag', '{http://effbot.org/ns}tag', '{http://effbot.org/ns}tag'] """ -def parseliteral(): - r""" +def file_init(): + """ + >>> import io - >>> from xml.etree import ElementTree as ET + >>> stringfile = io.BytesIO(SAMPLE_XML.encode("utf-8")) + >>> tree = ET.ElementTree(file=stringfile) + >>> tree.find("tag").tag + 'tag' + >>> tree.find("section/tag").tag + 'tag' + + >>> tree = ET.ElementTree(file=SIMPLE_XMLFILE) + >>> tree.find("element").tag + 'element' + >>> tree.find("element/../empty-element").tag + 'empty-element' + """ + +def bad_find(): + """ + Check bad or unsupported path expressions. + + >>> elem = ET.XML(SAMPLE_XML) + >>> elem.findall("/tag") + Traceback (most recent call last): + SyntaxError: cannot use absolute path on element + """ + +def path_cache(): + """ + Check that the path cache behaves sanely. + + >>> elem = ET.XML(SAMPLE_XML) + >>> for i in range(10): ET.ElementTree(elem).find('./'+str(i)) + >>> cache_len_10 = len(ET.ElementPath._cache) + >>> for i in range(10): ET.ElementTree(elem).find('./'+str(i)) + >>> len(ET.ElementPath._cache) == cache_len_10 + True + >>> for i in range(20): ET.ElementTree(elem).find('./'+str(i)) + >>> len(ET.ElementPath._cache) > cache_len_10 + True + >>> for i in range(600): ET.ElementTree(elem).find('./'+str(i)) + >>> len(ET.ElementPath._cache) < 500 + True + """ + +def copy(): + """ + Test copy handling (etc). + + >>> import copy + >>> e1 = ET.XML("hello") + >>> e2 = copy.copy(e1) + >>> e3 = copy.deepcopy(e1) + >>> e1.find("foo").tag = "bar" + >>> serialize(e1) + 'hello' + >>> serialize(e2) + 'hello' + >>> serialize(e3) + 'hello' + + """ + +def attrib(): + """ + Test attribute handling. + + >>> elem = ET.Element("tag") + >>> elem.get("key") # 1.1 + >>> elem.get("key", "default") # 1.2 + 'default' + >>> elem.set("key", "value") + >>> elem.get("key") # 1.3 + 'value' + + >>> elem = ET.Element("tag", key="value") + >>> elem.get("key") # 2.1 + 'value' + >>> elem.attrib # 2.2 + {'key': 'value'} + + >>> attrib = {"key": "value"} + >>> elem = ET.Element("tag", attrib) + >>> attrib.clear() # check for aliasing issues + >>> elem.get("key") # 3.1 + 'value' + >>> elem.attrib # 3.2 + {'key': 'value'} + + >>> attrib = {"key": "value"} + >>> elem = ET.Element("tag", **attrib) + >>> attrib.clear() # check for aliasing issues + >>> elem.get("key") # 4.1 + 'value' + >>> elem.attrib # 4.2 + {'key': 'value'} + + >>> elem = ET.Element("tag", {"key": "other"}, key="value") + >>> elem.get("key") # 5.1 + 'value' + >>> elem.attrib # 5.2 + {'key': 'value'} + + >>> elem = ET.Element('test') + >>> elem.text = "aa" + >>> elem.set('testa', 'testval') + >>> elem.set('testb', 'test2') + >>> ET.tostring(elem) + 'aa' + >>> sorted(elem.keys()) + ['testa', 'testb'] + >>> sorted(elem.items()) + [('testa', 'testval'), ('testb', 'test2')] + >>> elem.attrib['testb'] + 'test2' + >>> elem.attrib['testb'] = 'test1' + >>> elem.attrib['testc'] = 'test2' + >>> ET.tostring(elem) + 'aa' + """ + +def makeelement(): + """ + Test makeelement handling. + + >>> elem = ET.Element("tag") + >>> attrib = {"key": "value"} + >>> subelem = elem.makeelement("subtag", attrib) + >>> if subelem.attrib is attrib: + ... print("attrib aliasing") + >>> elem.append(subelem) + >>> serialize(elem) + '' + + >>> elem.clear() + >>> serialize(elem) + '' + >>> elem.append(subelem) + >>> serialize(elem) + '' + >>> elem.extend([subelem, subelem]) + >>> serialize(elem) + '' + >>> elem[:] = [subelem] + >>> serialize(elem) + '' + >>> elem[:] = tuple([subelem]) + >>> serialize(elem) + '' + + """ +def parsefile(): + """ + Test parsing from file. + + >>> tree = ET.parse(SIMPLE_XMLFILE) + >>> normalize_crlf(tree) + >>> tree.write(sys.stdout) + + text + texttail + + + >>> tree = ET.parse(SIMPLE_NS_XMLFILE) + >>> normalize_crlf(tree) + >>> tree.write(sys.stdout) + + text + texttail + + + + >>> parser = ET.XMLParser() + >>> parser.version # XXX: Upgrade to 2.0.1? + 'Expat 2.0.0' + >>> parser.feed(open(SIMPLE_XMLFILE).read()) + >>> print(serialize(parser.close())) + + text + texttail + + + + >>> parser = ET.XMLTreeBuilder() # 1.2 compatibility + >>> parser.feed(open(SIMPLE_XMLFILE).read()) + >>> print(serialize(parser.close())) + + text + texttail + + + + >>> target = ET.TreeBuilder() + >>> parser = ET.XMLParser(target=target) + >>> parser.feed(open(SIMPLE_XMLFILE).read()) + >>> print(serialize(parser.close())) + + text + texttail + + + """ + +def parseliteral(): + """ >>> element = ET.XML("text") >>> ET.ElementTree(element).write(sys.stdout) text >>> element = ET.fromstring("text") >>> ET.ElementTree(element).write(sys.stdout) text + >>> sequence = ["", "text"] + >>> element = ET.fromstringlist(sequence) >>> print(ET.tostring(element)) text - >>> print(repr(ET.tostring(element, "ascii"))) - b"\ntext" + >>> print("".join(ET.tostringlist(element))) + text + >>> ET.tostring(element, "ascii") + b"\\ntext" >>> _, ids = ET.XMLID("text") >>> len(ids) 0 @@ -196,25 +653,578 @@ 'body' """ +def iterparse(): + """ + Test iterparse interface. + + >>> iterparse = ET.iterparse + + >>> context = iterparse(SIMPLE_XMLFILE) + >>> action, elem = next(context) + >>> print(action, elem.tag) + end element + >>> for action, elem in context: + ... print(action, elem.tag) + end element + end empty-element + end root + >>> context.root.tag + 'root' + + >>> context = iterparse(SIMPLE_NS_XMLFILE) + >>> for action, elem in context: + ... print(action, elem.tag) + end {namespace}element + end {namespace}element + end {namespace}empty-element + end {namespace}root + + >>> events = () + >>> context = iterparse(SIMPLE_XMLFILE, events) + >>> for action, elem in context: + ... print(action, elem.tag) + + >>> events = () + >>> context = iterparse(SIMPLE_XMLFILE, events=events) + >>> for action, elem in context: + ... print(action, elem.tag) + + >>> events = ("start", "end") + >>> context = iterparse(SIMPLE_XMLFILE, events) + >>> for action, elem in context: + ... print(action, elem.tag) + start root + start element + end element + start element + end element + start empty-element + end empty-element + end root + + >>> events = ("start", "end", "start-ns", "end-ns") + >>> context = iterparse(SIMPLE_NS_XMLFILE, events) + >>> for action, elem in context: + ... if action in ("start", "end"): + ... print(action, elem.tag) + ... else: + ... print(action, elem) + start-ns ('', 'namespace') + start {namespace}root + start {namespace}element + end {namespace}element + start {namespace}element + end {namespace}element + start {namespace}empty-element + end {namespace}empty-element + end {namespace}root + end-ns None + + >>> events = ("start", "end", "bogus") + >>> context = iterparse(SIMPLE_XMLFILE, events) + Traceback (most recent call last): + ValueError: unknown event 'bogus' + + >>> import io + + >>> source = io.BytesIO( + ... b"\\n" + ... b"text\\n") + >>> events = ("start-ns",) + >>> context = iterparse(source, events) + >>> for action, elem in context: + ... print(action, elem) + start-ns ('', 'http://\\xe9ffbot.org/ns') + start-ns ('cl\\xe9', 'http://effbot.org/ns') + + >>> source = io.StringIO("junk") + >>> try: + ... for action, elem in iterparse(source): + ... print(action, elem.tag) + ... except ET.ParseError as v: + ... print(v) + junk after document element: line 1, column 12 + """ + +def writefile(): + """ + >>> elem = ET.Element("tag") + >>> elem.text = "text" + >>> serialize(elem) + 'text' + >>> ET.SubElement(elem, "subtag").text = "subtext" + >>> serialize(elem) + 'textsubtext' + + Test tag suppression + >>> elem.tag = None + >>> serialize(elem) + 'textsubtext' + >>> elem.insert(0, ET.Comment("comment")) + >>> serialize(elem) # assumes 1.3 + 'textsubtext' + >>> elem[0] = ET.PI("key", "value") + >>> serialize(elem) + 'textsubtext' + """ -def check_encoding(ET, encoding): +def custom_builder(): """ - >>> from xml.etree import ElementTree as ET + Test parser w. custom builder. + + >>> class Builder: + ... def start(self, tag, attrib): + ... print("start", tag) + ... def end(self, tag): + ... print("end", tag) + ... def data(self, text): + ... pass + >>> builder = Builder() + >>> parser = ET.XMLParser(target=builder) + >>> parser.feed(open(SIMPLE_XMLFILE, "r").read()) + start root + start element + end element + start element + end element + start empty-element + end empty-element + end root + + >>> class Builder: + ... def start(self, tag, attrib): + ... print("start", tag) + ... def end(self, tag): + ... print("end", tag) + ... def data(self, text): + ... pass + ... def pi(self, target, data): + ... print("pi", target, repr(data)) + ... def comment(self, data): + ... print("comment", repr(data)) + >>> builder = Builder() + >>> parser = ET.XMLParser(target=builder) + >>> parser.feed(open(SIMPLE_NS_XMLFILE, "r").read()) + pi pi 'data' + comment ' comment ' + start {namespace}root + start {namespace}element + end {namespace}element + start {namespace}element + end {namespace}element + start {namespace}empty-element + end {namespace}empty-element + end {namespace}root - >>> check_encoding(ET, "ascii") - >>> check_encoding(ET, "us-ascii") - >>> check_encoding(ET, "iso-8859-1") - >>> check_encoding(ET, "iso-8859-15") - >>> check_encoding(ET, "cp437") - >>> check_encoding(ET, "mac-roman") + """ + +def getchildren(): + """ + Test Element.getchildren() + + >>> tree = ET.parse(open(SIMPLE_XMLFILE, "rb")) + >>> for elem in tree.getroot().iter(): + ... summarize_list(elem.getchildren()) + ['element', 'element', 'empty-element'] + [] + [] + [] + >>> for elem in tree.getiterator(): + ... summarize_list(elem.getchildren()) + ['element', 'element', 'empty-element'] + [] + [] + [] + + >>> elem = ET.XML(SAMPLE_XML) + >>> len(elem.getchildren()) + 3 + >>> len(elem[2].getchildren()) + 1 + >>> elem[:] == elem.getchildren() + True + >>> child1 = elem[0] + >>> child2 = elem[2] + >>> del elem[1:2] + >>> len(elem.getchildren()) + 2 + >>> child1 == elem[0] + True + >>> child2 == elem[1] + True + >>> elem[0:2] = [child2, child1] + >>> child2 == elem[0] + True + >>> child1 == elem[1] + True + >>> child1 == elem[0] + False + >>> elem.clear() + >>> elem.getchildren() + [] + """ + +def writestring(): + """ + >>> elem = ET.XML("text") + >>> ET.tostring(elem) + 'text' + >>> elem = ET.fromstring("text") + >>> ET.tostring(elem) + 'text' + """ + +def check_encoding(encoding): + """ + >>> check_encoding("ascii") + >>> check_encoding("us-ascii") + >>> check_encoding("iso-8859-1") + >>> check_encoding("iso-8859-15") + >>> check_encoding("cp437") + >>> check_encoding("mac-roman") """ ET.XML("" % encoding) -def processinginstruction(): +def encoding(): r""" - Test ProcessingInstruction directly + Test encoding issues. - >>> from xml.etree import ElementTree as ET + >>> elem = ET.Element("tag") + >>> elem.text = "abc" + >>> serialize(elem) + 'abc' + >>> serialize(elem, encoding="utf-8") + b'abc' + >>> serialize(elem, encoding="us-ascii") + b'abc' + >>> serialize(elem, encoding="iso-8859-1") + b"\nabc" + + >>> elem.text = "<&\"\'>" + >>> serialize(elem) + '<&"\'>' + >>> serialize(elem, encoding="utf-8") + b'<&"\'>' + >>> serialize(elem, encoding="us-ascii") # cdata characters + b'<&"\'>' + >>> serialize(elem, encoding="iso-8859-1") + b'\n<&"\'>' + + >>> elem.attrib["key"] = "<&\"\'>" + >>> elem.text = None + >>> serialize(elem) + '' + >>> serialize(elem, encoding="utf-8") + b'' + >>> serialize(elem, encoding="us-ascii") + b'' + >>> serialize(elem, encoding="iso-8859-1") + b'\n' + + >>> elem.text = '\xe5\xf6\xf6<>' + >>> elem.attrib.clear() + >>> serialize(elem) + '\xe5\xf6\xf6<>' + >>> serialize(elem, encoding="utf-8") + b'\xc3\xa5\xc3\xb6\xc3\xb6<>' + >>> serialize(elem, encoding="us-ascii") + b'åöö<>' + >>> serialize(elem, encoding="iso-8859-1") + b"\n\xe5\xf6\xf6<>" + + >>> elem.attrib["key"] = '\xe5\xf6\xf6<>' + >>> elem.text = None + >>> serialize(elem) + '' + >>> serialize(elem, encoding="utf-8") + b'' + >>> serialize(elem, encoding="us-ascii") + b'' + >>> serialize(elem, encoding="iso-8859-1") + b'\n' + """ + +def methods(): + r""" + Test serialization methods. + + >>> e = ET.XML("") + >>> e.tail = "\n" + >>> serialize(e) + '\n' + >>> serialize(e, method=None) + '\n' + >>> serialize(e, method="xml") + '\n' + >>> serialize(e, method="html") + '\n' + >>> serialize(e, method="text") + '1 < 2\n' + """ + +def iterators(): + """ + Test iterators. + + >>> e = ET.XML("this is a paragraph...") + >>> summarize_list(e.iter()) + ['html', 'body', 'i'] + >>> summarize_list(e.find("body").iter()) + ['body', 'i'] + >>> summarize(next(e.iter())) + 'html' + >>> "".join(e.itertext()) + 'this is a paragraph...' + >>> "".join(e.find("body").itertext()) + 'this is a paragraph.' + >>> next(e.itertext()) + 'this is a ' + + Method iterparse should return an iterator. See bug 6472. + + >>> sourcefile = serialize(e, to_string=False) + >>> next(ET.iterparse(sourcefile)) # doctest: +ELLIPSIS + ('end', ) + + >>> tree = ET.ElementTree(None) + >>> tree.iter() + Traceback (most recent call last): + AttributeError: 'NoneType' object has no attribute 'iter' + """ + +ENTITY_XML = """\ + +%user-entities; +]> +&entity; +""" + +def entity(): + """ + Test entity handling. + + 1) good entities + + >>> e = ET.XML("test") + >>> serialize(e, encoding="us-ascii") + b'test' + >>> serialize(e) + 'test' + + 2) bad entities + + >>> normalize_exception(ET.XML, "&entity;") + Traceback (most recent call last): + ParseError: undefined entity: line 1, column 10 + + >>> normalize_exception(ET.XML, ENTITY_XML) + Traceback (most recent call last): + ParseError: undefined entity &entity;: line 5, column 10 + + 3) custom entity + + >>> parser = ET.XMLParser() + >>> parser.entity["entity"] = "text" + >>> parser.feed(ENTITY_XML) + >>> root = parser.close() + >>> serialize(root) + 'text' + """ + +def error(xml): + """ + + Test error handling. + + >>> issubclass(ET.ParseError, SyntaxError) + True + >>> error("foo").position + (1, 0) + >>> error("&foo;").position + (1, 5) + >>> error("foobar<").position + (1, 6) + + """ + try: + ET.XML(xml) + except ET.ParseError: + return sys.exc_info()[1] + +def namespace(): + """ + Test namespace issues. + + 1) xml namespace + + >>> elem = ET.XML("") + >>> serialize(elem) # 1.1 + '' + + 2) other "well-known" namespaces + + >>> elem = ET.XML("") + >>> serialize(elem) # 2.1 + '' + + >>> elem = ET.XML("") + >>> serialize(elem) # 2.2 + '' + + >>> elem = ET.XML("") + >>> serialize(elem) # 2.3 + '' + + 3) unknown namespaces + >>> elem = ET.XML(SAMPLE_XML_NS) + >>> print(serialize(elem)) + + text + + + subtext + + + """ + +def qname(): + """ + Test QName handling. + + 1) decorated tags + + >>> elem = ET.Element("{uri}tag") + >>> serialize(elem) # 1.1 + '' + >>> elem = ET.Element(ET.QName("{uri}tag")) + >>> serialize(elem) # 1.2 + '' + >>> elem = ET.Element(ET.QName("uri", "tag")) + >>> serialize(elem) # 1.3 + '' + + 2) decorated attributes + + >>> elem.clear() + >>> elem.attrib["{uri}key"] = "value" + >>> serialize(elem) # 2.1 + '' + + >>> elem.clear() + >>> elem.attrib[ET.QName("{uri}key")] = "value" + >>> serialize(elem) # 2.2 + '' + + 3) decorated values are not converted by default, but the + QName wrapper can be used for values + + >>> elem.clear() + >>> elem.attrib["{uri}key"] = "{uri}value" + >>> serialize(elem) # 3.1 + '' + + >>> elem.clear() + >>> elem.attrib["{uri}key"] = ET.QName("{uri}value") + >>> serialize(elem) # 3.2 + '' + + >>> elem.clear() + >>> subelem = ET.Element("tag") + >>> subelem.attrib["{uri1}key"] = ET.QName("{uri2}value") + >>> elem.append(subelem) + >>> elem.append(subelem) + >>> serialize(elem) # 3.3 + '' + + 4) Direct QName tests + + >>> str(ET.QName('ns', 'tag')) + '{ns}tag' + >>> str(ET.QName('{ns}tag')) + '{ns}tag' + >>> q1 = ET.QName('ns', 'tag') + >>> q2 = ET.QName('ns', 'tag') + >>> q1 == q2 + True + >>> q2 = ET.QName('ns', 'other-tag') + >>> q1 == q2 + False + >>> q1 == 'ns:tag' + False + >>> q1 == '{ns}tag' + True + """ + +def doctype_public(): + """ + Test PUBLIC doctype. + + >>> elem = ET.XML('' + ... 'text') + + """ + +def xpath_tokenizer(p): + """ + Test the XPath tokenizer. + + >>> # tests from the xml specification + >>> xpath_tokenizer("*") + ['*'] + >>> xpath_tokenizer("text()") + ['text', '()'] + >>> xpath_tokenizer("@name") + ['@', 'name'] + >>> xpath_tokenizer("@*") + ['@', '*'] + >>> xpath_tokenizer("para[1]") + ['para', '[', '1', ']'] + >>> xpath_tokenizer("para[last()]") + ['para', '[', 'last', '()', ']'] + >>> xpath_tokenizer("*/para") + ['*', '/', 'para'] + >>> xpath_tokenizer("/doc/chapter[5]/section[2]") + ['/', 'doc', '/', 'chapter', '[', '5', ']', '/', 'section', '[', '2', ']'] + >>> xpath_tokenizer("chapter//para") + ['chapter', '//', 'para'] + >>> xpath_tokenizer("//para") + ['//', 'para'] + >>> xpath_tokenizer("//olist/item") + ['//', 'olist', '/', 'item'] + >>> xpath_tokenizer(".") + ['.'] + >>> xpath_tokenizer(".//para") + ['.', '//', 'para'] + >>> xpath_tokenizer("..") + ['..'] + >>> xpath_tokenizer("../@lang") + ['..', '/', '@', 'lang'] + >>> xpath_tokenizer("chapter[title]") + ['chapter', '[', 'title', ']'] + >>> xpath_tokenizer("employee[@secretary and @assistant]") + ['employee', '[', '@', 'secretary', '', 'and', '', '@', 'assistant', ']'] + + >>> # additional tests + >>> xpath_tokenizer("{http://spam}egg") + ['{http://spam}egg'] + >>> xpath_tokenizer("./spam.egg") + ['.', '/', 'spam.egg'] + >>> xpath_tokenizer(".//{http://spam}egg") + ['.', '//', '{http://spam}egg'] + """ + from xml.etree import ElementPath + out = [] + for op, tag in ElementPath.xpath_tokenizer(p): + out.append(op or tag) + return out + +def processinginstruction(): + """ + Test ProcessingInstruction directly >>> ET.tostring(ET.ProcessingInstruction('test', 'instruction')) '' @@ -226,20 +1236,7 @@ >>> ET.tostring(ET.PI('test', '')) '?>' >>> ET.tostring(ET.PI('test', '\xe3'), 'latin1') - b"\n\xe3?>" - - """ - -def check_issue6233(): - """ - >>> from xml.etree import ElementTree as ET - - >>> e = ET.XML("t\xe3g") - >>> ET.tostring(e, 'ascii') - b"\\ntãg" - >>> e = ET.XML("t\xe3g".encode('iso-8859-1')) # create byte string with the right encoding - >>> ET.tostring(e, 'ascii') - b"\\ntãg" + b"\\n\\xe3?>" """ # @@ -306,9 +1303,9 @@

    Example.

    - +
    -""" +""".format(SIMPLE_XMLFILE) def xinclude_loader(href, parse="xml", encoding=None): try: @@ -329,7 +1326,7 @@ >>> document = xinclude_loader("C1.xml") >>> ElementInclude.include(document, xinclude_loader) - >>> print(serialize(ET, document)) # C1 + >>> print(serialize(document)) # C1

    120 Mz is adequate for an average home user.

    @@ -343,7 +1340,7 @@ >>> document = xinclude_loader("C2.xml") >>> ElementInclude.include(document, xinclude_loader) - >>> print(serialize(ET, document)) # C2 + >>> print(serialize(document)) # C2

    This document has been accessed 324387 times.

    @@ -353,7 +1350,7 @@ >>> document = xinclude_loader("C3.xml") >>> ElementInclude.include(document, xinclude_loader) - >>> print(serialize(ET, document)) # C3 + >>> print(serialize(document)) # C3

    The following is the source of the "data.xml" resource:

    <?xml version='1.0'?> @@ -370,13 +1367,489 @@ >>> ElementInclude.include(document, xinclude_loader) Traceback (most recent call last): IOError: resource not found - >>> # print serialize(ET, document) # C5 + >>> # print(serialize(document)) # C5 + """ + +def xinclude_default(): + """ + >>> from xml.etree import ElementInclude + >>> document = xinclude_loader("default.xml") + >>> ElementInclude.include(document) + >>> print(serialize(document)) # default + +

    Example.

    + + text + texttail + + +
    """ -def test_main(): +# +# badly formatted xi:include tags + +XINCLUDE_BAD = {} + +XINCLUDE_BAD["B1.xml"] = """\ + + +

    120 Mz is adequate for an average home user.

    + +
    +""" + +XINCLUDE_BAD["B2.xml"] = """\ + +
    + +
    +""" + +def xinclude_failures(): + r""" + Test failure to locate included XML file. + + >>> from xml.etree import ElementInclude + + >>> def none_loader(href, parser, encoding=None): + ... return None + + >>> document = ET.XML(XINCLUDE["C1.xml"]) + >>> ElementInclude.include(document, loader=none_loader) + Traceback (most recent call last): + xml.etree.ElementInclude.FatalIncludeError: cannot load 'disclaimer.xml' as 'xml' + + Test failure to locate included text file. + + >>> document = ET.XML(XINCLUDE["C2.xml"]) + >>> ElementInclude.include(document, loader=none_loader) + Traceback (most recent call last): + xml.etree.ElementInclude.FatalIncludeError: cannot load 'count.txt' as 'text' + + Test bad parse type. + + >>> document = ET.XML(XINCLUDE_BAD["B1.xml"]) + >>> ElementInclude.include(document, loader=none_loader) + Traceback (most recent call last): + xml.etree.ElementInclude.FatalIncludeError: unknown parse type in xi:include tag ('BAD_TYPE') + + Test xi:fallback outside xi:include. + + >>> document = ET.XML(XINCLUDE_BAD["B2.xml"]) + >>> ElementInclude.include(document, loader=none_loader) + Traceback (most recent call last): + xml.etree.ElementInclude.FatalIncludeError: xi:fallback tag must be child of xi:include ('{http://www.w3.org/2001/XInclude}fallback') + """ + +# -------------------------------------------------------------------- +# reported bugs + +def bug_xmltoolkit21(): + """ + + marshaller gives obscure errors for non-string values + + >>> elem = ET.Element(123) + >>> serialize(elem) # tag + Traceback (most recent call last): + TypeError: cannot serialize 123 (type int) + >>> elem = ET.Element("elem") + >>> elem.text = 123 + >>> serialize(elem) # text + Traceback (most recent call last): + TypeError: cannot serialize 123 (type int) + >>> elem = ET.Element("elem") + >>> elem.tail = 123 + >>> serialize(elem) # tail + Traceback (most recent call last): + TypeError: cannot serialize 123 (type int) + >>> elem = ET.Element("elem") + >>> elem.set(123, "123") + >>> serialize(elem) # attribute key + Traceback (most recent call last): + TypeError: cannot serialize 123 (type int) + >>> elem = ET.Element("elem") + >>> elem.set("123", 123) + >>> serialize(elem) # attribute value + Traceback (most recent call last): + TypeError: cannot serialize 123 (type int) + + """ + +def bug_xmltoolkit25(): + """ + + typo in ElementTree.findtext + + >>> elem = ET.XML(SAMPLE_XML) + >>> tree = ET.ElementTree(elem) + >>> tree.findtext("tag") + 'text' + >>> tree.findtext("section/tag") + 'subtext' + + """ + +def bug_xmltoolkit28(): + """ + + .//tag causes exceptions + + >>> tree = ET.XML("
    ") + >>> summarize_list(tree.findall(".//thead")) + [] + >>> summarize_list(tree.findall(".//tbody")) + ['tbody'] + + """ + +def bug_xmltoolkitX1(): + """ + + dump() doesn't flush the output buffer + + >>> tree = ET.XML("
    ") + >>> ET.dump(tree); print("tail") +
    + tail + + """ + +def bug_xmltoolkit39(): + """ + + non-ascii element and attribute names doesn't work + + >>> tree = ET.XML(b"") + >>> ET.tostring(tree, "utf-8") + b'' + + >>> tree = ET.XML(b"") + >>> tree.attrib + {'\\xe4ttr': 'v\\xe4lue'} + >>> ET.tostring(tree, "utf-8") + b'' + + >>> tree = ET.XML(b"text") + >>> ET.tostring(tree, "utf-8") + b'text' + + >>> tree = ET.Element("t\u00e4g") + >>> ET.tostring(tree, "utf-8") + b'' + + >>> tree = ET.Element("tag") + >>> tree.set("\u00e4ttr", "v\u00e4lue") + >>> ET.tostring(tree, "utf-8") + b'' + + """ + +def bug_xmltoolkit54(): + """ + + problems handling internally defined entities + + >>> e = ET.XML("]>&ldots;") + >>> serialize(e, encoding="us-ascii") + b'' + >>> serialize(e) + '\u8230' + + """ + +def bug_xmltoolkit55(): + """ + + make sure we're reporting the first error, not the last + + >>> normalize_exception(ET.XML, b"&ldots;&ndots;&rdots;") + Traceback (most recent call last): + ParseError: undefined entity &ldots;: line 1, column 36 + + """ + +class ExceptionFile: + def read(self, x): + raise IOError + +def xmltoolkit60(): + """ + + Handle crash in stream source. + >>> tree = ET.parse(ExceptionFile()) + Traceback (most recent call last): + IOError + + """ + +XMLTOOLKIT62_DOC = """ + + + +A new cultivar of Begonia plant named ‘BCT9801BEG’. + +""" + + +def xmltoolkit62(): + """ + + Don't crash when using custom entities. + + >>> xmltoolkit62() + 'A new cultivar of Begonia plant named \u2018BCT9801BEG\u2019.' + + """ + ENTITIES = {'rsquo': '\u2019', 'lsquo': '\u2018'} + parser = ET.XMLTreeBuilder() + parser.entity.update(ENTITIES) + parser.feed(XMLTOOLKIT62_DOC) + t = parser.close() + return t.find('.//paragraph').text + +def xmltoolkit63(): + """ + + Check reference leak. + >>> xmltoolkit63() + >>> count = sys.getrefcount(None) + >>> for i in range(1000): + ... xmltoolkit63() + >>> sys.getrefcount(None) - count + 0 + + """ + tree = ET.TreeBuilder() + tree.start("tag", {}) + tree.data("text") + tree.end("tag") + +# -------------------------------------------------------------------- + + +def bug_200708_newline(): + r""" + + Preserve newlines in attributes. + + >>> e = ET.Element('SomeTag', text="def _f():\n return 3\n") + >>> ET.tostring(e) + '' + >>> ET.XML(ET.tostring(e)).get("text") + 'def _f():\n return 3\n' + >>> ET.tostring(ET.XML(ET.tostring(e))) + '' + + """ + +def bug_200708_close(): + """ + + Test default builder. + >>> parser = ET.XMLParser() # default + >>> parser.feed("some text") + >>> summarize(parser.close()) + 'element' + + Test custom builder. + >>> class EchoTarget: + ... def close(self): + ... return ET.Element("element") # simulate root + >>> parser = ET.XMLParser(EchoTarget()) + >>> parser.feed("some text") + >>> summarize(parser.close()) + 'element' + + """ + +def bug_200709_default_namespace(): + """ + + >>> e = ET.Element("{default}elem") + >>> s = ET.SubElement(e, "{default}elem") + >>> serialize(e, default_namespace="default") # 1 + '' + + >>> e = ET.Element("{default}elem") + >>> s = ET.SubElement(e, "{default}elem") + >>> s = ET.SubElement(e, "{not-default}elem") + >>> serialize(e, default_namespace="default") # 2 + '' + + >>> e = ET.Element("{default}elem") + >>> s = ET.SubElement(e, "{default}elem") + >>> s = ET.SubElement(e, "elem") # unprefixed name + >>> serialize(e, default_namespace="default") # 3 + Traceback (most recent call last): + ValueError: cannot use non-qualified names with default_namespace option + + """ + +def bug_200709_register_namespace(): + """ + + >>> ET.tostring(ET.Element("{http://namespace.invalid/does/not/exist/}title")) + '' + >>> ET.register_namespace("foo", "http://namespace.invalid/does/not/exist/") + >>> ET.tostring(ET.Element("{http://namespace.invalid/does/not/exist/}title")) + '' + + And the Dublin Core namespace is in the default list: + + >>> ET.tostring(ET.Element("{http://purl.org/dc/elements/1.1/}title")) + '' + + """ + +def bug_200709_element_comment(): + """ + + Not sure if this can be fixed, really (since the serializer needs + ET.Comment, not cET.comment). + + >>> a = ET.Element('a') + >>> a.append(ET.Comment('foo')) + >>> a[0].tag == ET.Comment + True + + >>> a = ET.Element('a') + >>> a.append(ET.PI('foo')) + >>> a[0].tag == ET.PI + True + + """ + +def bug_200709_element_insert(): + """ + + >>> a = ET.Element('a') + >>> b = ET.SubElement(a, 'b') + >>> c = ET.SubElement(a, 'c') + >>> d = ET.Element('d') + >>> a.insert(0, d) + >>> summarize_list(a) + ['d', 'b', 'c'] + >>> a.insert(-1, d) + >>> summarize_list(a) + ['d', 'b', 'd', 'c'] + + """ + +def bug_200709_iter_comment(): + """ + + >>> a = ET.Element('a') + >>> b = ET.SubElement(a, 'b') + >>> comment_b = ET.Comment("TEST-b") + >>> b.append(comment_b) + >>> summarize_list(a.iter(ET.Comment)) + [''] + + """ + +# -------------------------------------------------------------------- +# reported on bugs.python.org + +def bug_1534630(): + """ + + >>> bob = ET.TreeBuilder() + >>> e = bob.data("data") + >>> e = bob.start("tag", {}) + >>> e = bob.end("tag") + >>> e = bob.close() + >>> serialize(e) + '' + + """ + +def check_issue6233(): + """ + + >>> e = ET.XML(b"t\\xc3\\xa3g") + >>> ET.tostring(e, 'ascii') + b"\\ntãg" + >>> e = ET.XML(b"t\\xe3g") + >>> ET.tostring(e, 'ascii') + b"\\ntãg" + + """ + +def check_issue3151(): + """ + + >>> e = ET.XML('') + >>> e.tag + '{${stuff}}localname' + >>> t = ET.ElementTree(e) + >>> ET.tostring(e) + '' + + """ + +def check_issue6565(): + """ + + >>> elem = ET.XML("") + >>> summarize_list(elem) + ['tag'] + >>> newelem = ET.XML(SAMPLE_XML) + >>> elem[:] = newelem[:] + >>> summarize_list(elem) + ['tag', 'tag', 'section'] + + """ + +# -------------------------------------------------------------------- + + +class CleanContext(object): + """Provide default namespace mapping and path cache.""" + + def __enter__(self): + from xml.etree import ElementTree + self._nsmap = ElementTree._namespace_map + self._path_cache = ElementTree.ElementPath._cache + # Copy the default namespace mapping + ElementTree._namespace_map = self._nsmap.copy() + # Copy the path cache (should be empty) + ElementTree.ElementPath._cache = self._path_cache.copy() + + def __exit__(self, *args): + from xml.etree import ElementTree + # Restore mapping and path cache + ElementTree._namespace_map = self._nsmap + ElementTree.ElementPath._cache = self._path_cache + + +def test_main(module_name='xml.etree.ElementTree'): + import warnings from test import test_xml_etree - support.run_doctest(test_xml_etree, verbosity=True) + def ignore(message, category=DeprecationWarning): + warnings.filterwarnings("ignore", message, category) + + # The same doctests are used for both the Python and the C implementations + assert test_xml_etree.ET.__name__ == module_name + + with warnings.catch_warnings(), CleanContext(): + # Search behaviour is broken if search path starts with "/". + ignore("This search is broken in 1.3 and earlier, and will be fixed " + "in a future version. If you rely on the current behaviour, " + "change it to '.+'", FutureWarning) + # Element.getchildren() and Element.getiterator() are deprecated. + ignore("This method will be removed in future versions. " + "Use .+ instead.") + # XMLParser.doctype() is deprecated. + ignore("This method of XMLParser is deprecated. " + "Define doctype.. method on the TreeBuilder target.") + + support.run_doctest(test_xml_etree, verbosity=True) + + # The module should not be changed by the tests + assert test_xml_etree.ET.__name__ == module_name if __name__ == '__main__': test_main() Modified: python/branches/py3k-jit/Lib/test/test_xml_etree_c.py ============================================================================== --- python/branches/py3k-jit/Lib/test/test_xml_etree_c.py (original) +++ python/branches/py3k-jit/Lib/test/test_xml_etree_c.py Tue Mar 16 21:40:29 2010 @@ -1,31 +1,11 @@ # xml.etree test for cElementTree -import doctest -import sys - from test import support -ET = support.import_module('xml.etree.cElementTree') +cET = support.import_module('xml.etree.cElementTree') + -SAMPLE_XML = """ - - text - -
    - subtext -
    - -""" - -SAMPLE_XML_NS = """ - - text - -
    - subtext -
    - -""" +# cElementTree specific tests def sanity(): """ @@ -34,187 +14,26 @@ >>> from xml.etree import cElementTree """ -def check_method(method): - if not hasattr(method, '__call__'): - print(method, "not callable") - -def serialize(ET, elem): - import io - file = io.StringIO() - tree = ET.ElementTree(elem) - tree.write(file) - return file.getvalue() - -def summarize(elem): - return elem.tag - -def summarize_list(seq): - return list(map(summarize, seq)) - -def interface(): - """ - Test element tree interface. - - >>> element = ET.Element("tag", key="value") - >>> tree = ET.ElementTree(element) - - Make sure all standard element methods exist. - - >>> check_method(element.append) - >>> check_method(element.insert) - >>> check_method(element.remove) - >>> check_method(element.getchildren) - >>> check_method(element.find) - >>> check_method(element.findall) - >>> check_method(element.findtext) - >>> check_method(element.clear) - >>> check_method(element.get) - >>> check_method(element.set) - >>> check_method(element.keys) - >>> check_method(element.items) - >>> check_method(element.getiterator) - - Basic method sanity checks. - - >>> serialize(ET, element) # 1 - '' - >>> subelement = ET.Element("subtag") - >>> element.append(subelement) - >>> serialize(ET, element) # 2 - '' - >>> element.insert(0, subelement) - >>> serialize(ET, element) # 3 - '' - >>> element.remove(subelement) - >>> serialize(ET, element) # 4 - '' - >>> element.remove(subelement) - >>> serialize(ET, element) # 5 - '' - >>> element.remove(subelement) - Traceback (most recent call last): - ValueError: list.remove(x): x not in list - >>> serialize(ET, element) # 6 - '' - """ - -def find(): - """ - Test find methods (including xpath syntax). - - >>> elem = ET.XML(SAMPLE_XML) - >>> elem.find("tag").tag - 'tag' - >>> ET.ElementTree(elem).find("tag").tag - 'tag' - >>> elem.find("section/tag").tag - 'tag' - >>> ET.ElementTree(elem).find("section/tag").tag - 'tag' - >>> elem.findtext("tag") - 'text' - >>> elem.findtext("tog") - >>> elem.findtext("tog", "default") - 'default' - >>> ET.ElementTree(elem).findtext("tag") - 'text' - >>> elem.findtext("section/tag") - 'subtext' - >>> ET.ElementTree(elem).findtext("section/tag") - 'subtext' - >>> summarize_list(elem.findall("tag")) - ['tag', 'tag'] - >>> summarize_list(elem.findall("*")) - ['tag', 'tag', 'section'] - >>> summarize_list(elem.findall(".//tag")) - ['tag', 'tag', 'tag'] - >>> summarize_list(elem.findall("section/tag")) - ['tag'] - >>> summarize_list(elem.findall("section//tag")) - ['tag'] - >>> summarize_list(elem.findall("section/*")) - ['tag'] - >>> summarize_list(elem.findall("section//*")) - ['tag'] - >>> summarize_list(elem.findall("section/.//*")) - ['tag'] - >>> summarize_list(elem.findall("*/*")) - ['tag'] - >>> summarize_list(elem.findall("*//*")) - ['tag'] - >>> summarize_list(elem.findall("*/tag")) - ['tag'] - >>> summarize_list(elem.findall("*/./tag")) - ['tag'] - >>> summarize_list(elem.findall("./tag")) - ['tag', 'tag'] - >>> summarize_list(elem.findall(".//tag")) - ['tag', 'tag', 'tag'] - >>> summarize_list(elem.findall("././tag")) - ['tag', 'tag'] - >>> summarize_list(ET.ElementTree(elem).findall("/tag")) - ['tag', 'tag'] - >>> summarize_list(ET.ElementTree(elem).findall("./tag")) - ['tag', 'tag'] - >>> elem = ET.XML(SAMPLE_XML_NS) - >>> summarize_list(elem.findall("tag")) - [] - >>> summarize_list(elem.findall("{http://effbot.org/ns}tag")) - ['{http://effbot.org/ns}tag', '{http://effbot.org/ns}tag'] - >>> summarize_list(elem.findall(".//{http://effbot.org/ns}tag")) - ['{http://effbot.org/ns}tag', '{http://effbot.org/ns}tag', '{http://effbot.org/ns}tag'] - """ - -def parseliteral(): - r""" - - >>> element = ET.XML("text") - >>> ET.ElementTree(element).write(sys.stdout) - text - >>> element = ET.fromstring("text") - >>> ET.ElementTree(element).write(sys.stdout) - text - >>> print(ET.tostring(element)) - text - >>> print(repr(ET.tostring(element, "ascii"))) - b"\ntext" - >>> _, ids = ET.XMLID("text") - >>> len(ids) - 0 - >>> _, ids = ET.XMLID("text") - >>> len(ids) - 1 - >>> ids["body"].tag - 'body' - """ - -def check_encoding(encoding): - """ - >>> check_encoding("ascii") - >>> check_encoding("us-ascii") - >>> check_encoding("iso-8859-1") - >>> check_encoding("iso-8859-15") - >>> check_encoding("cp437") - >>> check_encoding("mac-roman") - """ - ET.XML( - "" % encoding - ) - -def bug_1534630(): - """ - >>> bob = ET.TreeBuilder() - >>> e = bob.data("data") - >>> e = bob.start("tag", {}) - >>> e = bob.end("tag") - >>> e = bob.close() - >>> serialize(ET, e) - '' - """ def test_main(): - from test import test_xml_etree_c + from test import test_xml_etree, test_xml_etree_c + + # Run the tests specific to the C implementation support.run_doctest(test_xml_etree_c, verbosity=True) + # Assign the C implementation before running the doctests + # Patch the __name__, to prevent confusion with the pure Python test + pyET = test_xml_etree.ET + py__name__ = test_xml_etree.__name__ + test_xml_etree.ET = cET + if __name__ != '__main__': + test_xml_etree.__name__ = __name__ + try: + # Run the same test suite as xml.etree.ElementTree + test_xml_etree.test_main(module_name='xml.etree.cElementTree') + finally: + test_xml_etree.ET = pyET + test_xml_etree.__name__ = py__name__ + if __name__ == '__main__': test_main() Modified: python/branches/py3k-jit/Lib/test/test_xmlrpc_net.py ============================================================================== --- python/branches/py3k-jit/Lib/test/test_xmlrpc_net.py (original) +++ python/branches/py3k-jit/Lib/test/test_xmlrpc_net.py Tue Mar 16 21:40:29 2010 @@ -1,4 +1,4 @@ -#!/usr/bin/env python +#!/usr/bin/env python3 import collections import errno Modified: python/branches/py3k-jit/Lib/test/test_zipimport.py ============================================================================== --- python/branches/py3k-jit/Lib/test/test_zipimport.py (original) +++ python/branches/py3k-jit/Lib/test/test_zipimport.py Tue Mar 16 21:40:29 2010 @@ -227,7 +227,7 @@ mod_path = packdir2 + TESTMOD mod_name = module_path_to_dotted_name(mod_path) - pkg = __import__(mod_name) + __import__(mod_name) mod = sys.modules[mod_name] self.assertEquals(zi.get_source(TESTPACK), None) self.assertEquals(zi.get_source(mod_path), None) @@ -271,7 +271,7 @@ mod_path = TESTPACK2 + os.sep + TESTMOD mod_name = module_path_to_dotted_name(mod_path) - pkg = __import__(mod_name) + __import__(mod_name) mod = sys.modules[mod_name] self.assertEquals(zi.get_source(TESTPACK2), None) self.assertEquals(zi.get_source(mod_path), None) Modified: python/branches/py3k-jit/Lib/test/test_zipimport_support.py ============================================================================== --- python/branches/py3k-jit/Lib/test/test_zipimport_support.py (original) +++ python/branches/py3k-jit/Lib/test/test_zipimport_support.py Tue Mar 16 21:40:29 2010 @@ -2,7 +2,6 @@ # for working with modules located inside zipfiles # The tests are centralised in this fashion to make it easy to drop them # if a platform doesn't support zipimport -import unittest import test.support import os import os.path @@ -15,8 +14,7 @@ import linecache import pdb from test.script_helper import (spawn_python, kill_python, run_python, - temp_dir, make_script, compile_script, - make_pkg, make_zip_script, make_zip_pkg) + temp_dir, make_script, make_zip_script) verbose = test.support.verbose Modified: python/branches/py3k-jit/Lib/timeit.py ============================================================================== --- python/branches/py3k-jit/Lib/timeit.py (original) +++ python/branches/py3k-jit/Lib/timeit.py Tue Mar 16 21:40:29 2010 @@ -1,4 +1,4 @@ -#! /usr/bin/env python +#! /usr/bin/env python3 """Tool for measuring execution time of small code snippets. Modified: python/branches/py3k-jit/Lib/tkinter/messagebox.py ============================================================================== --- python/branches/py3k-jit/Lib/tkinter/messagebox.py (original) +++ python/branches/py3k-jit/Lib/tkinter/messagebox.py Tue Mar 16 21:40:29 2010 @@ -70,11 +70,13 @@ if title: options["title"] = title if message: options["message"] = message res = Message(**options).show() - # In some Tcl installations, Tcl converts yes/no into a boolean + # In some Tcl installations, yes/no is converted into a boolean. if isinstance(res, bool): - if res: return YES + if res: + return YES return NO - return res + # In others we get a Tcl_Obj. + return str(res) def showinfo(title=None, message=None, **options): "Show an info message" Modified: python/branches/py3k-jit/Lib/token.py ============================================================================== --- python/branches/py3k-jit/Lib/token.py (original) +++ python/branches/py3k-jit/Lib/token.py Tue Mar 16 21:40:29 2010 @@ -1,4 +1,4 @@ -#! /usr/bin/env python +#! /usr/bin/env python3 """Token constants (from "token.h").""" Modified: python/branches/py3k-jit/Lib/trace.py ============================================================================== --- python/branches/py3k-jit/Lib/trace.py (original) +++ python/branches/py3k-jit/Lib/trace.py Tue Mar 16 21:40:29 2010 @@ -1,4 +1,4 @@ -#!/usr/bin/env python +#!/usr/bin/env python3 # portions copyright 2001, Autonomous Zones Industries, Inc., all rights... # err... reserved and offered to the public under the terms of the Modified: python/branches/py3k-jit/Lib/unittest/__init__.py ============================================================================== --- python/branches/py3k-jit/Lib/unittest/__init__.py (original) +++ python/branches/py3k-jit/Lib/unittest/__init__.py Tue Mar 16 21:40:29 2010 @@ -51,13 +51,12 @@ # Expose obsolete functions for backwards compatibility __all__.extend(['getTestCaseNames', 'makeSuite', 'findTestCases']) -__all__.append('_TextTestResult') from .result import TestResult from .case import (TestCase, FunctionTestCase, SkipTest, skip, skipIf, skipUnless, expectedFailure) -from .suite import TestSuite +from .suite import BaseTestSuite, TestSuite from .loader import (TestLoader, defaultTestLoader, makeSuite, getTestCaseNames, findTestCases) from .main import TestProgram, main Modified: python/branches/py3k-jit/Lib/unittest/case.py ============================================================================== --- python/branches/py3k-jit/Lib/unittest/case.py (original) +++ python/branches/py3k-jit/Lib/unittest/case.py Tue Mar 16 21:40:29 2010 @@ -7,7 +7,9 @@ import re import warnings -from . import result, util +from . import result +from .util import (strclass, safe_repr, sorted_list_difference, + unorderable_list_difference) class SkipTest(Exception): @@ -44,14 +46,15 @@ Unconditionally skip a test. """ def decorator(test_item): - if isinstance(test_item, type) and issubclass(test_item, TestCase): - test_item.__unittest_skip__ = True - test_item.__unittest_skip_why__ = reason - return test_item - @functools.wraps(test_item) - def skip_wrapper(*args, **kwargs): - raise SkipTest(reason) - return skip_wrapper + if not (isinstance(test_item, type) and issubclass(test_item, TestCase)): + @functools.wraps(test_item) + def skip_wrapper(*args, **kwargs): + raise SkipTest(reason) + test_item = skip_wrapper + + test_item.__unittest_skip__ = True + test_item.__unittest_skip_why__ = reason + return test_item return decorator def skipIf(condition, reason): @@ -96,7 +99,7 @@ self.obj_name = str(callable_obj) else: self.obj_name = None - self.expected_regex = expected_regexp + self.expected_regexp = expected_regexp def __enter__(self): return self @@ -118,10 +121,10 @@ return False # store exception, without traceback, for later retrieval self.exception = exc_value.with_traceback(None) - if self.expected_regex is None: + if self.expected_regexp is None: return True - expected_regexp = self.expected_regex + expected_regexp = self.expected_regexp if isinstance(expected_regexp, (bytes, str)): expected_regexp = re.compile(expected_regexp) if not expected_regexp.search(str(exc_value)): @@ -164,6 +167,9 @@ longMessage = False + # Attribute used by TestSuite for classSetUp + + _classSetupFailed = False def __init__(self, methodName='runTest'): """Create an instance of the class that will use the named test @@ -175,7 +181,7 @@ try: testMethod = getattr(self, methodName) except AttributeError: - raise ValueError("no such test method in %s: %s" % \ + raise ValueError("no such test method in %s: %s" % (self.__class__, methodName)) self._testMethodDoc = testMethod.__doc__ self._cleanups = [] @@ -222,6 +228,14 @@ "Hook method for deconstructing the test fixture after testing it." pass + @classmethod + def setUpClass(cls): + "Hook method for setting up class fixture before running tests in the class." + + @classmethod + def tearDownClass(cls): + "Hook method for deconstructing the class fixture after running all tests in the class." + def countTestCases(self): return 1 @@ -240,7 +254,7 @@ def id(self): - return "%s.%s" % (util.strclass(self.__class__), self._testMethodName) + return "%s.%s" % (strclass(self.__class__), self._testMethodName) def __eq__(self, other): if type(self) is not type(other): @@ -255,11 +269,20 @@ return hash((type(self), self._testMethodName)) def __str__(self): - return "%s (%s)" % (self._testMethodName, util.strclass(self.__class__)) + return "%s (%s)" % (self._testMethodName, strclass(self.__class__)) def __repr__(self): return "<%s testMethod=%s>" % \ - (util.strclass(self.__class__), self._testMethodName) + (strclass(self.__class__), self._testMethodName) + + def _addSkip(self, result, reason): + addSkip = getattr(result, 'addSkip', None) + if addSkip is not None: + addSkip(self, reason) + else: + warnings.warn("TestResult has no addSkip method, skips not reported", + RuntimeWarning, 2) + result.addSuccess(self) def run(self, result=None): orig_result = result @@ -271,20 +294,24 @@ self._resultForDoCleanups = result result.startTest(self) - if getattr(self.__class__, "__unittest_skip__", False): - # If the whole class was skipped. + + testMethod = getattr(self, self._testMethodName) + if (getattr(self.__class__, "__unittest_skip__", False) or + getattr(testMethod, "__unittest_skip__", False)): + # If the class or method was skipped. try: - result.addSkip(self, self.__class__.__unittest_skip_why__) + skip_why = (getattr(self.__class__, '__unittest_skip_why__', '') + or getattr(testMethod, '__unittest_skip_why__', '')) + self._addSkip(result, skip_why) finally: result.stopTest(self) return - testMethod = getattr(self, self._testMethodName) try: success = False try: self.setUp() except SkipTest as e: - result.addSkip(self, str(e)) + self._addSkip(result, str(e)) except Exception: result.addError(self, sys.exc_info()) else: @@ -293,11 +320,23 @@ except self.failureException: result.addFailure(self, sys.exc_info()) except _ExpectedFailure as e: - result.addExpectedFailure(self, e.exc_info) + addExpectedFailure = getattr(result, 'addExpectedFailure', None) + if addExpectedFailure is not None: + addExpectedFailure(self, e.exc_info) + else: + warnings.warn("TestResult has no addExpectedFailure method, reporting as passes", + RuntimeWarning) + result.addSuccess(self) except _UnexpectedSuccess: - result.addUnexpectedSuccess(self) + addUnexpectedSuccess = getattr(result, 'addUnexpectedSuccess', None) + if addUnexpectedSuccess is not None: + addUnexpectedSuccess(self) + else: + warnings.warn("TestResult has no addUnexpectedSuccess method, reporting as failures", + RuntimeWarning) + result.addFailure(self, sys.exc_info()) except SkipTest as e: - result.addSkip(self, str(e)) + self._addSkip(result, str(e)) except Exception: result.addError(self, sys.exc_info()) else: @@ -354,13 +393,13 @@ def assertFalse(self, expr, msg=None): "Fail the test if the expression is true." if expr: - msg = self._formatMessage(msg, "%r is not False" % expr) + msg = self._formatMessage(msg, "%s is not False" % safe_repr(expr)) raise self.failureException(msg) def assertTrue(self, expr, msg=None): """Fail the test unless the expression is true.""" if not expr: - msg = self._formatMessage(msg, "%r is not True" % expr) + msg = self._formatMessage(msg, "%s is not True" % safe_repr(expr)) raise self.failureException(msg) def _formatMessage(self, msg, standardMsg): @@ -377,7 +416,12 @@ return msg or standardMsg if msg is None: return standardMsg - return standardMsg + ' : ' + msg + try: + # don't switch to '{}' formatting in Python 2.X + # it changes the way unicode input is handled + return '%s : %s' % (standardMsg, msg) + except UnicodeDecodeError: + return '%s : %s' % (safe_repr(standardMsg), safe_repr(msg)) def assertRaises(self, excClass, callableObj=None, *args, **kwargs): @@ -436,7 +480,7 @@ def _baseAssertEqual(self, first, second, msg=None): """The default assertEqual implementation, not type specific.""" if not first == second: - standardMsg = '%r != %r' % (first, second) + standardMsg = '%s != %s' % (safe_repr(first), safe_repr(second)) msg = self._formatMessage(msg, standardMsg) raise self.failureException(msg) @@ -452,7 +496,8 @@ operator. """ if not first != second: - msg = self._formatMessage(msg, '%r == %r' % (first, second)) + msg = self._formatMessage(msg, '%s == %s' % (safe_repr(first), + safe_repr(second))) raise self.failureException(msg) def assertAlmostEqual(self, first, second, *, places=7, msg=None): @@ -467,10 +512,12 @@ compare almost equal. """ if first == second: - # shortcut for ite + # shortcut for inf return if round(abs(second-first), places) != 0: - standardMsg = '%r != %r within %r places' % (first, second, places) + standardMsg = '%s != %s within %r places' % (safe_repr(first), + safe_repr(second), + places) msg = self._formatMessage(msg, standardMsg) raise self.failureException(msg) @@ -485,7 +532,9 @@ Objects that are equal automatically fail. """ if (first == second) or round(abs(second-first), places) == 0: - standardMsg = '%r == %r within %r places' % (first, second, places) + standardMsg = '%s == %s within %r places' % (safe_repr(first), + safe_repr(second), + places) msg = self._formatMessage(msg, standardMsg) raise self.failureException(msg) @@ -535,11 +584,11 @@ if seq_type != None: seq_type_name = seq_type.__name__ if not isinstance(seq1, seq_type): - raise self.failureException('First sequence is not a %s: %r' - % (seq_type_name, seq1)) + raise self.failureException('First sequence is not a %s: %s' + % (seq_type_name, safe_repr(seq1))) if not isinstance(seq2, seq_type): - raise self.failureException('Second sequence is not a %s: %r' - % (seq_type_name, seq2)) + raise self.failureException('Second sequence is not a %s: %s' + % (seq_type_name, safe_repr(seq2))) else: seq_type_name = "sequence" @@ -561,8 +610,8 @@ if seq1 == seq2: return - seq1_repr = repr(seq1) - seq2_repr = repr(seq2) + seq1_repr = safe_repr(seq1) + seq2_repr = safe_repr(seq2) if len(seq1_repr) > 30: seq1_repr = seq1_repr[:30] + '...' if len(seq2_repr) > 30: @@ -689,25 +738,28 @@ def assertIn(self, member, container, msg=None): """Just like self.assertTrue(a in b), but with a nicer default message.""" if member not in container: - standardMsg = '%r not found in %r' % (member, container) + standardMsg = '%s not found in %s' % (safe_repr(member), + safe_repr(container)) self.fail(self._formatMessage(msg, standardMsg)) def assertNotIn(self, member, container, msg=None): """Just like self.assertTrue(a not in b), but with a nicer default message.""" if member in container: - standardMsg = '%r unexpectedly found in %r' % (member, container) + standardMsg = '%s unexpectedly found in %s' % (safe_repr(member), + safe_repr(container)) self.fail(self._formatMessage(msg, standardMsg)) def assertIs(self, expr1, expr2, msg=None): """Just like self.assertTrue(a is b), but with a nicer default message.""" if expr1 is not expr2: - standardMsg = '%r is not %r' % (expr1, expr2) + standardMsg = '%s is not %s' % (safe_repr(expr1), + safe_repr(expr2)) self.fail(self._formatMessage(msg, standardMsg)) def assertIsNot(self, expr1, expr2, msg=None): """Just like self.assertTrue(a is not b), but with a nicer default message.""" if expr1 is expr2: - standardMsg = 'unexpectedly identical: %r' % (expr1,) + standardMsg = 'unexpectedly identical: %s' % (safe_repr(expr1),) self.fail(self._formatMessage(msg, standardMsg)) def assertDictEqual(self, d1, d2, msg=None): @@ -729,14 +781,16 @@ missing.append(key) elif value != actual[key]: mismatched.append('%s, expected: %s, actual: %s' % - (key, value, actual[key])) + (safe_repr(key), safe_repr(value), + safe_repr(actual[key]))) if not (missing or mismatched): return standardMsg = '' if missing: - standardMsg = 'Missing: %r' % ','.join(missing) + standardMsg = 'Missing: %s' % ','.join(safe_repr(m) for m in + missing) if mismatched: if standardMsg: standardMsg += '; ' @@ -758,10 +812,8 @@ try: expected = set(expected_seq) actual = set(actual_seq) - missing = list(expected.difference(actual)) - unexpected = list(actual.difference(expected)) - missing.sort() - unexpected.sort() + missing = sorted(expected.difference(actual)) + unexpected = sorted(actual.difference(expected)) except TypeError: # Fall back to slower list-compare if any of the objects are # not hashable. @@ -771,16 +823,17 @@ expected.sort() actual.sort() except TypeError: - missing, unexpected = util.unorderable_list_difference(expected, - actual) - else: - missing, unexpected = util.sorted_list_difference(expected, + missing, unexpected = unorderable_list_difference(expected, actual) + else: + missing, unexpected = sorted_list_difference(expected, actual) errors = [] if missing: - errors.append('Expected, but missing:\n %r' % missing) + errors.append('Expected, but missing:\n %s' % + safe_repr(missing)) if unexpected: - errors.append('Unexpected, but present:\n %r' % unexpected) + errors.append('Unexpected, but present:\n %s' % + safe_repr(unexpected)) if errors: standardMsg = '\n'.join(errors) self.fail(self._formatMessage(msg, standardMsg)) @@ -800,31 +853,31 @@ def assertLess(self, a, b, msg=None): """Just like self.assertTrue(a < b), but with a nicer default message.""" if not a < b: - standardMsg = '%r not less than %r' % (a, b) + standardMsg = '%s not less than %s' % (safe_repr(a), safe_repr(b)) self.fail(self._formatMessage(msg, standardMsg)) def assertLessEqual(self, a, b, msg=None): """Just like self.assertTrue(a <= b), but with a nicer default message.""" if not a <= b: - standardMsg = '%r not less than or equal to %r' % (a, b) + standardMsg = '%s not less than or equal to %s' % (safe_repr(a), safe_repr(b)) self.fail(self._formatMessage(msg, standardMsg)) def assertGreater(self, a, b, msg=None): """Just like self.assertTrue(a > b), but with a nicer default message.""" if not a > b: - standardMsg = '%r not greater than %r' % (a, b) + standardMsg = '%s not greater than %s' % (safe_repr(a), safe_repr(b)) self.fail(self._formatMessage(msg, standardMsg)) def assertGreaterEqual(self, a, b, msg=None): """Just like self.assertTrue(a >= b), but with a nicer default message.""" if not a >= b: - standardMsg = '%r not greater than or equal to %r' % (a, b) + standardMsg = '%s not greater than or equal to %s' % (safe_repr(a), safe_repr(b)) self.fail(self._formatMessage(msg, standardMsg)) def assertIsNone(self, obj, msg=None): """Same as self.assertTrue(obj is None), with a nicer default message.""" if obj is not None: - standardMsg = '%r is not None' % obj + standardMsg = '%s is not None' % (safe_repr(obj),) self.fail(self._formatMessage(msg, standardMsg)) def assertIsNotNone(self, obj, msg=None): @@ -837,13 +890,13 @@ """Same as self.assertTrue(isinstance(obj, cls)), with a nicer default message.""" if not isinstance(obj, cls): - standardMsg = '%r is not an instance of %r' % (obj, cls) + standardMsg = '%s is not an instance of %r' % (safe_repr(obj), cls) self.fail(self._formatMessage(msg, standardMsg)) def assertNotIsInstance(self, obj, cls, msg=None): """Included for symmetry with assertIsInstance.""" if isinstance(obj, cls): - standardMsg = '%r is an instance of %r' % (obj, cls) + standardMsg = '%s is an instance of %r' % (safe_repr(obj), cls) self.fail(self._formatMessage(msg, standardMsg)) def assertRaisesRegexp(self, expected_exception, expected_regexp, @@ -865,12 +918,12 @@ with context: callable_obj(*args, **kwargs) - def assertRegexpMatches(self, text, expected_regex, msg=None): - if isinstance(expected_regex, (str, bytes)): - expected_regex = re.compile(expected_regex) - if not expected_regex.search(text): + def assertRegexpMatches(self, text, expected_regexp, msg=None): + if isinstance(expected_regexp, (str, bytes)): + expected_regexp = re.compile(expected_regexp) + if not expected_regexp.search(text): msg = msg or "Regexp didn't match" - msg = '%s: %r not found in %r' % (msg, expected_regex.pattern, text) + msg = '%s: %r not found in %r' % (msg, expected_regexp.pattern, text) raise self.failureException(msg) @@ -921,11 +974,11 @@ self._testFunc, self._description)) def __str__(self): - return "%s (%s)" % (util.strclass(self.__class__), + return "%s (%s)" % (strclass(self.__class__), self._testFunc.__name__) def __repr__(self): - return "<%s testFunc=%s>" % (util.strclass(self.__class__), + return "<%s tec=%s>" % (strclass(self.__class__), self._testFunc) def shortDescription(self): Modified: python/branches/py3k-jit/Lib/unittest/result.py ============================================================================== --- python/branches/py3k-jit/Lib/unittest/result.py (original) +++ python/branches/py3k-jit/Lib/unittest/result.py Tue Mar 16 21:40:29 2010 @@ -16,7 +16,9 @@ contain tuples of (testcase, exceptioninfo), where exceptioninfo is the formatted traceback of the error that occurred. """ - def __init__(self): + _previousTestClass = None + _moduleSetUpFailed = False + def __init__(self, stream=None, descriptions=None, verbosity=None): self.failures = [] self.errors = [] self.testsRun = 0 @@ -25,6 +27,9 @@ self.unexpectedSuccesses = [] self.shouldStop = False + def printErrors(self): + "Called by TestRunner after test run" + def startTest(self, test): "Called when the given test is about to be run" self.testsRun += 1 @@ -107,6 +112,6 @@ return length def __repr__(self): - return "<%s run=%i errors=%i failures=%i>" % \ + return ("<%s run=%i errors=%i failures=%i>" % (util.strclass(self.__class__), self.testsRun, len(self.errors), - len(self.failures)) + len(self.failures))) Modified: python/branches/py3k-jit/Lib/unittest/runner.py ============================================================================== --- python/branches/py3k-jit/Lib/unittest/runner.py (original) +++ python/branches/py3k-jit/Lib/unittest/runner.py Tue Mar 16 21:40:29 2010 @@ -148,15 +148,22 @@ stopTime = time.time() timeTaken = stopTime - startTime result.printErrors() - self.stream.writeln(result.separator2) + if hasattr(result, 'separator2'): + self.stream.writeln(result.separator2) run = result.testsRun self.stream.writeln("Ran %d test%s in %.3fs" % (run, run != 1 and "s" or "", timeTaken)) self.stream.writeln() - results = map(len, (result.expectedFailures, - result.unexpectedSuccesses, - result.skipped)) - expectedFails, unexpectedSuccesses, skipped = results + + expectedFails = unexpectedSuccesses = skipped = 0 + try: + results = map(len, (result.expectedFailures, + result.unexpectedSuccesses, + result.skipped)) + expectedFails, unexpectedSuccesses, skipped = results + except AttributeError: + pass + infos = [] if not result.wasSuccessful(): self.stream.write("FAILED") Modified: python/branches/py3k-jit/Lib/unittest/suite.py ============================================================================== --- python/branches/py3k-jit/Lib/unittest/suite.py (original) +++ python/branches/py3k-jit/Lib/unittest/suite.py Tue Mar 16 21:40:29 2010 @@ -1,17 +1,13 @@ """TestSuite""" +import sys + from . import case from . import util -class TestSuite(object): - """A test suite is a composite test consisting of a number of TestCases. - - For use, create an instance of TestSuite, then add test case instances. - When all tests have been added, the suite can be passed to a test - runner, such as TextTestRunner. It will run the individual test cases - in the order in which they were added, aggregating the results. When - subclassing, do not forget to call the base class constructor. +class BaseTestSuite(object): + """A simple test suite that doesn't provide class or module shared fixtures. """ def __init__(self, tests=()): self._tests = [] @@ -67,3 +63,190 @@ """Run the tests without collecting errors in a TestResult""" for test in self: test.debug() + + +class TestSuite(BaseTestSuite): + """A test suite is a composite test consisting of a number of TestCases. + + For use, create an instance of TestSuite, then add test case instances. + When all tests have been added, the suite can be passed to a test + runner, such as TextTestRunner. It will run the individual test cases + in the order in which they were added, aggregating the results. When + subclassing, do not forget to call the base class constructor. + """ + + + def run(self, result): + self._wrapped_run(result) + self._tearDownPreviousClass(None, result) + self._handleModuleTearDown(result) + return result + + ################################ + # private methods + def _wrapped_run(self, result): + for test in self: + if result.shouldStop: + break + + if _isnotsuite(test): + self._tearDownPreviousClass(test, result) + self._handleModuleFixture(test, result) + self._handleClassSetUp(test, result) + result._previousTestClass = test.__class__ + + if (getattr(test.__class__, '_classSetupFailed', False) or + getattr(result, '_moduleSetUpFailed', False)): + continue + + if hasattr(test, '_wrapped_run'): + test._wrapped_run(result) + else: + test(result) + + def _handleClassSetUp(self, test, result): + previousClass = getattr(result, '_previousTestClass', None) + currentClass = test.__class__ + if currentClass == previousClass: + return + if result._moduleSetUpFailed: + return + if getattr(currentClass, "__unittest_skip__", False): + return + + currentClass._classSetupFailed = False + + setUpClass = getattr(currentClass, 'setUpClass', None) + if setUpClass is not None: + try: + setUpClass() + except: + currentClass._classSetupFailed = True + self._addClassSetUpError(result, currentClass) + + def _get_previous_module(self, result): + previousModule = None + previousClass = getattr(result, '_previousTestClass', None) + if previousClass is not None: + previousModule = previousClass.__module__ + return previousModule + + + def _handleModuleFixture(self, test, result): + previousModule = self._get_previous_module(result) + currentModule = test.__class__.__module__ + if currentModule == previousModule: + return + + self._handleModuleTearDown(result) + + + result._moduleSetUpFailed = False + try: + module = sys.modules[currentModule] + except KeyError: + return + setUpModule = getattr(module, 'setUpModule', None) + if setUpModule is not None: + try: + setUpModule() + except: + result._moduleSetUpFailed = True + error = _ErrorHolder('setUpModule (%s)' % currentModule) + result.addError(error, sys.exc_info()) + + def _handleModuleTearDown(self, result): + previousModule = self._get_previous_module(result) + if previousModule is None: + return + if result._moduleSetUpFailed: + return + + try: + module = sys.modules[previousModule] + except KeyError: + return + + tearDownModule = getattr(module, 'tearDownModule', None) + if tearDownModule is not None: + try: + tearDownModule() + except: + error = _ErrorHolder('tearDownModule (%s)' % previousModule) + result.addError(error, sys.exc_info()) + + def _tearDownPreviousClass(self, test, result): + previousClass = getattr(result, '_previousTestClass', None) + currentClass = test.__class__ + if currentClass == previousClass: + return + if getattr(previousClass, '_classSetupFailed', False): + return + if getattr(result, '_moduleSetUpFailed', False): + return + if getattr(previousClass, "__unittest_skip__", False): + return + + tearDownClass = getattr(previousClass, 'tearDownClass', None) + if tearDownClass is not None: + try: + tearDownClass() + except: + self._addClassTearDownError(result) + + def _addClassTearDownError(self, result): + className = util.strclass(result._previousTestClass) + error = _ErrorHolder('classTearDown (%s)' % className) + result.addError(error, sys.exc_info()) + + def _addClassSetUpError(self, result, klass): + className = util.strclass(klass) + error = _ErrorHolder('classSetUp (%s)' % className) + result.addError(error, sys.exc_info()) + + +class _ErrorHolder(object): + """ + Placeholder for a TestCase inside a result. As far as a TestResult + is concerned, this looks exactly like a unit test. Used to insert + arbitrary errors into a test suite run. + """ + # Inspired by the ErrorHolder from Twisted: + # http://twistedmatrix.com/trac/browser/trunk/twisted/trial/runner.py + + # attribute used by TestResult._exc_info_to_string + failureException = None + + def __init__(self, description): + self.description = description + + def id(self): + return self.description + + def shortDescription(self): + return None + + def __repr__(self): + return "" % (self.description,) + + def __str__(self): + return self.id() + + def run(self, result): + # could call result.addError(...) - but this test-like object + # shouldn't be run anyway + pass + + def __call__(self, result): + return self.run(result) + + def countTestCases(self): + return 0 + +def _isnotsuite(test): + "A crude way to tell apart testcases and suites with duck-typing" + try: + iter(test) + except TypeError: + return True + return False Modified: python/branches/py3k-jit/Lib/unittest/util.py ============================================================================== --- python/branches/py3k-jit/Lib/unittest/util.py (original) +++ python/branches/py3k-jit/Lib/unittest/util.py Tue Mar 16 21:40:29 2010 @@ -1,5 +1,11 @@ """Various utility functions.""" +def safe_repr(obj): + try: + return repr(obj) + except Exception: + return object.__repr__(obj) + def strclass(cls): return "%s.%s" % (cls.__module__, cls.__name__) Modified: python/branches/py3k-jit/Lib/uu.py ============================================================================== --- python/branches/py3k-jit/Lib/uu.py (original) +++ python/branches/py3k-jit/Lib/uu.py Tue Mar 16 21:40:29 2010 @@ -1,4 +1,4 @@ -#! /usr/bin/env python +#! /usr/bin/env python3 # Copyright 1994 by Lance Ellinghouse # Cathedral City, California Republic, United States of America. Modified: python/branches/py3k-jit/Lib/webbrowser.py ============================================================================== --- python/branches/py3k-jit/Lib/webbrowser.py (original) +++ python/branches/py3k-jit/Lib/webbrowser.py Tue Mar 16 21:40:29 2010 @@ -1,4 +1,4 @@ -#! /usr/bin/env python +#! /usr/bin/env python3 """Interfaces for launching and remotely controlling Web browsers.""" # Maintained by Georg Brandl. Modified: python/branches/py3k-jit/Lib/xml/etree/ElementInclude.py ============================================================================== --- python/branches/py3k-jit/Lib/xml/etree/ElementInclude.py (original) +++ python/branches/py3k-jit/Lib/xml/etree/ElementInclude.py Tue Mar 16 21:40:29 2010 @@ -1,6 +1,6 @@ # # ElementTree -# $Id: ElementInclude.py 1862 2004-06-18 07:31:02Z Fredrik $ +# $Id: ElementInclude.py 3375 2008-02-13 08:05:08Z fredrik $ # # limited xinclude support for element trees # @@ -16,7 +16,7 @@ # -------------------------------------------------------------------- # The ElementTree toolkit is # -# Copyright (c) 1999-2004 by Fredrik Lundh +# Copyright (c) 1999-2008 by Fredrik Lundh # # By obtaining, using, and/or copying this software and/or its # associated documentation, you agree that you have read, understood, @@ -42,7 +42,7 @@ # -------------------------------------------------------------------- # Licensed to PSF under a Contributor Agreement. -# See http://www.python.org/2.4/license for licensing details. +# See http://www.python.org/psf/license for licensing details. ## # Limited XInclude support for the ElementTree package. Modified: python/branches/py3k-jit/Lib/xml/etree/ElementPath.py ============================================================================== --- python/branches/py3k-jit/Lib/xml/etree/ElementPath.py (original) +++ python/branches/py3k-jit/Lib/xml/etree/ElementPath.py Tue Mar 16 21:40:29 2010 @@ -1,6 +1,6 @@ # # ElementTree -# $Id: ElementPath.py 1858 2004-06-17 21:31:41Z Fredrik $ +# $Id: ElementPath.py 3375 2008-02-13 08:05:08Z fredrik $ # # limited xpath support for element trees # @@ -8,8 +8,13 @@ # 2003-05-23 fl created # 2003-05-28 fl added support for // etc # 2003-08-27 fl fixed parsing of periods in element names +# 2007-09-10 fl new selection engine +# 2007-09-12 fl fixed parent selector +# 2007-09-13 fl added iterfind; changed findall to return a list +# 2007-11-30 fl added namespaces support +# 2009-10-30 fl added child element value filter # -# Copyright (c) 2003-2004 by Fredrik Lundh. All rights reserved. +# Copyright (c) 2003-2009 by Fredrik Lundh. All rights reserved. # # fredrik at pythonware.com # http://www.pythonware.com @@ -17,7 +22,7 @@ # -------------------------------------------------------------------- # The ElementTree toolkit is # -# Copyright (c) 1999-2004 by Fredrik Lundh +# Copyright (c) 1999-2009 by Fredrik Lundh # # By obtaining, using, and/or copying this software and/or its # associated documentation, you agree that you have read, understood, @@ -43,7 +48,7 @@ # -------------------------------------------------------------------- # Licensed to PSF under a Contributor Agreement. -# See http://www.python.org/2.4/license for licensing details. +# See http://www.python.org/psf/license for licensing details. ## # Implementation module for XPath support. There's usually no reason @@ -53,146 +58,246 @@ import re -xpath_tokenizer = re.compile( - "(::|\.\.|\(\)|[/.*:\[\]\(\)@=])|((?:\{[^}]+\})?[^/:\[\]\(\)@=\s]+)|\s+" - ).findall - -class xpath_descendant_or_self: - pass - -## -# Wrapper for a compiled XPath. - -class Path: - - ## - # Create an Path instance from an XPath expression. - - def __init__(self, path): - tokens = xpath_tokenizer(path) - # the current version supports 'path/path'-style expressions only - self.path = [] - self.tag = None - if tokens and tokens[0][0] == "/": - raise SyntaxError("cannot use absolute path on element") - while tokens: - op, tag = tokens.pop(0) - if tag or op == "*": - self.path.append(tag or op) - elif op == ".": - pass - elif op == "/": - self.path.append(xpath_descendant_or_self()) - continue - else: - raise SyntaxError("unsupported path syntax (%s)" % op) - if tokens: - op, tag = tokens.pop(0) - if op != "/": - raise SyntaxError( - "expected path separator (%s)" % (op or tag) - ) - if self.path and isinstance(self.path[-1], xpath_descendant_or_self): - raise SyntaxError("path cannot end with //") - if len(self.path) == 1 and isinstance(self.path[0], type("")): - self.tag = self.path[0] - - ## - # Find first matching object. - - def find(self, element): - tag = self.tag - if tag is None: - nodeset = self.findall(element) - if not nodeset: - return None - return nodeset[0] - for elem in element: - if elem.tag == tag: - return elem - return None - - ## - # Find text for first matching object. - - def findtext(self, element, default=None): - tag = self.tag - if tag is None: - nodeset = self.findall(element) - if not nodeset: - return default - return nodeset[0].text or "" - for elem in element: - if elem.tag == tag: - return elem.text or "" - return default - - ## - # Find all matching objects. - - def findall(self, element): - nodeset = [element] - index = 0 - while 1: +xpath_tokenizer_re = re.compile( + "(" + "'[^']*'|\"[^\"]*\"|" + "::|" + "//?|" + "\.\.|" + "\(\)|" + "[/.*:\[\]\(\)@=])|" + "((?:\{[^}]+\})?[^/\[\]\(\)@=\s]+)|" + "\s+" + ) + +def xpath_tokenizer(pattern, namespaces=None): + for token in xpath_tokenizer_re.findall(pattern): + tag = token[1] + if tag and tag[0] != "{" and ":" in tag: try: - path = self.path[index] - index = index + 1 - except IndexError: - return nodeset - set = [] - if isinstance(path, xpath_descendant_or_self): + prefix, uri = tag.split(":", 1) + if not namespaces: + raise KeyError + yield token[0], "{%s}%s" % (namespaces[prefix], uri) + except KeyError: + raise SyntaxError("prefix %r not found in prefix map" % prefix) + else: + yield token + +def get_parent_map(context): + parent_map = context.parent_map + if parent_map is None: + context.parent_map = parent_map = {} + for p in context.root.iter(): + for e in p: + parent_map[e] = p + return parent_map + +def prepare_child(next, token): + tag = token[1] + def select(context, result): + for elem in result: + for e in elem: + if e.tag == tag: + yield e + return select + +def prepare_star(next, token): + def select(context, result): + for elem in result: + for e in elem: + yield e + return select + +def prepare_self(next, token): + def select(context, result): + for elem in result: + yield elem + return select + +def prepare_descendant(next, token): + token = next() + if token[0] == "*": + tag = "*" + elif not token[0]: + tag = token[1] + else: + raise SyntaxError("invalid descendant") + def select(context, result): + for elem in result: + for e in elem.iter(tag): + if e is not elem: + yield e + return select + +def prepare_parent(next, token): + def select(context, result): + # FIXME: raise error if .. is applied at toplevel? + parent_map = get_parent_map(context) + result_map = {} + for elem in result: + if elem in parent_map: + parent = parent_map[elem] + if parent not in result_map: + result_map[parent] = None + yield parent + return select + +def prepare_predicate(next, token): + # FIXME: replace with real parser!!! refs: + # http://effbot.org/zone/simple-iterator-parser.htm + # http://javascript.crockford.com/tdop/tdop.html + signature = [] + predicate = [] + while 1: + token = next() + if token[0] == "]": + break + if token[0] and token[0][:1] in "'\"": + token = "'", token[0][1:-1] + signature.append(token[0] or "-") + predicate.append(token[1]) + signature = "".join(signature) + # use signature to determine predicate type + if signature == "@-": + # [@attribute] predicate + key = predicate[1] + def select(context, result): + for elem in result: + if elem.get(key) is not None: + yield elem + return select + if signature == "@-='": + # [@attribute='value'] + key = predicate[1] + value = predicate[-1] + def select(context, result): + for elem in result: + if elem.get(key) == value: + yield elem + return select + if signature == "-" and not re.match("\d+$", predicate[0]): + # [tag] + tag = predicate[0] + def select(context, result): + for elem in result: + if elem.find(tag) is not None: + yield elem + return select + if signature == "-='" and not re.match("\d+$", predicate[0]): + # [tag='value'] + tag = predicate[0] + value = predicate[-1] + def select(context, result): + for elem in result: + for e in elem.findall(tag): + if "".join(e.itertext()) == value: + yield elem + break + return select + if signature == "-" or signature == "-()" or signature == "-()-": + # [index] or [last()] or [last()-index] + if signature == "-": + index = int(predicate[0]) - 1 + else: + if predicate[0] != "last": + raise SyntaxError("unsupported function") + if signature == "-()-": try: - tag = self.path[index] - if not isinstance(tag, type("")): - tag = None - else: - index = index + 1 - except IndexError: - tag = None # invalid path - for node in nodeset: - new = list(node.getiterator(tag)) - if new and new[0] is node: - set.extend(new[1:]) - else: - set.extend(new) + index = int(predicate[2]) - 1 + except ValueError: + raise SyntaxError("unsupported expression") else: - for node in nodeset: - for node in node: - if path == "*" or node.tag == path: - set.append(node) - if not set: - return [] - nodeset = set + index = -1 + def select(context, result): + parent_map = get_parent_map(context) + for elem in result: + try: + parent = parent_map[elem] + # FIXME: what if the selector is "*" ? + elems = list(parent.findall(elem.tag)) + if elems[index] is elem: + yield elem + except (IndexError, KeyError): + pass + return select + raise SyntaxError("invalid predicate") + +ops = { + "": prepare_child, + "*": prepare_star, + ".": prepare_self, + "..": prepare_parent, + "//": prepare_descendant, + "[": prepare_predicate, + } _cache = {} +class _SelectorContext: + parent_map = None + def __init__(self, root): + self.root = root + +# -------------------------------------------------------------------- + ## -# (Internal) Compile path. +# Generate all matching objects. -def _compile(path): - p = _cache.get(path) - if p is not None: - return p - p = Path(path) - if len(_cache) >= 100: - _cache.clear() - _cache[path] = p - return p +def iterfind(elem, path, namespaces=None): + # compile selector pattern + if path[-1:] == "/": + path = path + "*" # implicit all (FIXME: keep this?) + try: + selector = _cache[path] + except KeyError: + if len(_cache) > 100: + _cache.clear() + if path[:1] == "/": + raise SyntaxError("cannot use absolute path on element") + next = iter(xpath_tokenizer(path, namespaces)).__next__ + token = next() + selector = [] + while 1: + try: + selector.append(ops[token[0]](next, token)) + except StopIteration: + raise SyntaxError("invalid path") + try: + token = next() + if token[0] == "/": + token = next() + except StopIteration: + break + _cache[path] = selector + # execute selector pattern + result = [elem] + context = _SelectorContext(elem) + for select in selector: + result = select(context, result) + return result ## # Find first matching object. -def find(element, path): - return _compile(path).find(element) +def find(elem, path, namespaces=None): + try: + return next(iterfind(elem, path, namespaces)) + except StopIteration: + return None ## -# Find text for first matching object. +# Find all matching objects. -def findtext(element, path, default=None): - return _compile(path).findtext(element, default) +def findall(elem, path, namespaces=None): + return list(iterfind(elem, path, namespaces)) ## -# Find all matching objects. +# Find text for first matching object. -def findall(element, path): - return _compile(path).findall(element) +def findtext(elem, path, default=None, namespaces=None): + try: + elem = next(iterfind(elem, path, namespaces)) + return elem.text or "" + except StopIteration: + return default Modified: python/branches/py3k-jit/Lib/xml/etree/ElementTree.py ============================================================================== --- python/branches/py3k-jit/Lib/xml/etree/ElementTree.py (original) +++ python/branches/py3k-jit/Lib/xml/etree/ElementTree.py Tue Mar 16 21:40:29 2010 @@ -1,40 +1,24 @@ # # ElementTree -# $Id: ElementTree.py 2326 2005-03-17 07:45:21Z fredrik $ +# $Id: ElementTree.py 3440 2008-07-18 14:45:01Z fredrik $ # -# light-weight XML support for Python 1.5.2 and later. +# light-weight XML support for Python 2.3 and later. # -# history: -# 2001-10-20 fl created (from various sources) -# 2001-11-01 fl return root from parse method -# 2002-02-16 fl sort attributes in lexical order -# 2002-04-06 fl TreeBuilder refactoring, added PythonDoc markup -# 2002-05-01 fl finished TreeBuilder refactoring -# 2002-07-14 fl added basic namespace support to ElementTree.write -# 2002-07-25 fl added QName attribute support -# 2002-10-20 fl fixed encoding in write -# 2002-11-24 fl changed default encoding to ascii; fixed attribute encoding -# 2002-11-27 fl accept file objects or file names for parse/write -# 2002-12-04 fl moved XMLTreeBuilder back to this module -# 2003-01-11 fl fixed entity encoding glitch for us-ascii -# 2003-02-13 fl added XML literal factory -# 2003-02-21 fl added ProcessingInstruction/PI factory -# 2003-05-11 fl added tostring/fromstring helpers -# 2003-05-26 fl added ElementPath support -# 2003-07-05 fl added makeelement factory method -# 2003-07-28 fl added more well-known namespace prefixes -# 2003-08-15 fl fixed typo in ElementTree.findtext (Thomas Dartsch) -# 2003-09-04 fl fall back on emulator if ElementPath is not installed -# 2003-10-31 fl markup updates -# 2003-11-15 fl fixed nested namespace bug -# 2004-03-28 fl added XMLID helper -# 2004-06-02 fl added default support to findtext -# 2004-06-08 fl fixed encoding of non-ascii element/attribute names -# 2004-08-23 fl take advantage of post-2.1 expat features -# 2005-02-01 fl added iterparse implementation -# 2005-03-02 fl fixed iterparse support for pre-2.2 versions +# history (since 1.2.6): +# 2005-11-12 fl added tostringlist/fromstringlist helpers +# 2006-07-05 fl merged in selected changes from the 1.3 sandbox +# 2006-07-05 fl removed support for 2.1 and earlier +# 2007-06-21 fl added deprecation/future warnings +# 2007-08-25 fl added doctype hook, added parser version attribute etc +# 2007-08-26 fl added new serializer code (better namespace handling, etc) +# 2007-08-27 fl warn for broken /tag searches on tree level +# 2007-09-02 fl added html/text methods to serializer (experimental) +# 2007-09-05 fl added method argument to tostring/tostringlist +# 2007-09-06 fl improved error handling +# 2007-09-13 fl added itertext, iterfind; assorted cleanups +# 2007-12-15 fl added C14N hooks, copy method (experimental) # -# Copyright (c) 1999-2005 by Fredrik Lundh. All rights reserved. +# Copyright (c) 1999-2008 by Fredrik Lundh. All rights reserved. # # fredrik at pythonware.com # http://www.pythonware.com @@ -42,7 +26,7 @@ # -------------------------------------------------------------------- # The ElementTree toolkit is # -# Copyright (c) 1999-2005 by Fredrik Lundh +# Copyright (c) 1999-2008 by Fredrik Lundh # # By obtaining, using, and/or copying this software and/or its # associated documentation, you agree that you have read, understood, @@ -68,25 +52,28 @@ # -------------------------------------------------------------------- # Licensed to PSF under a Contributor Agreement. -# See http://www.python.org/2.4/license for licensing details. +# See http://www.python.org/psf/license for licensing details. __all__ = [ # public symbols "Comment", "dump", "Element", "ElementTree", - "fromstring", + "fromstring", "fromstringlist", "iselement", "iterparse", - "parse", + "parse", "ParseError", "PI", "ProcessingInstruction", "QName", "SubElement", - "tostring", + "tostring", "tostringlist", "TreeBuilder", - "VERSION", "XML", + "VERSION", + "XML", "XMLParser", "XMLTreeBuilder", ] +VERSION = "1.3.0" + ## # The Element type is a flexible container object, designed to # store hierarchical data structures in memory. The type can be @@ -102,36 +89,86 @@ #
  • a number of child elements, stored in a Python sequence
  • # # -# To create an element instance, use the {@link #Element} or {@link -# #SubElement} factory functions. +# To create an element instance, use the {@link #Element} constructor +# or the {@link #SubElement} factory function. #

    # The {@link #ElementTree} class can be used to wrap an element # structure, and convert it from and to XML. ## -import sys, re +import sys +import re +import warnings + + +class _SimpleElementPath: + # emulate pre-1.2 find/findtext/findall behaviour + def find(self, element, tag, namespaces=None): + for elem in element: + if elem.tag == tag: + return elem + return None + def findtext(self, element, tag, default=None, namespaces=None): + elem = self.find(element, tag) + if elem is None: + return default + return elem.text or "" + def iterfind(self, element, tag, namespaces=None): + if tag[:3] == ".//": + for elem in element.iter(tag[3:]): + yield elem + for elem in element: + if elem.tag == tag: + yield elem + def findall(self, element, tag, namespaces=None): + return list(self.iterfind(element, tag, namespaces)) + +try: + from . import ElementPath +except ImportError: + ElementPath = _SimpleElementPath() + +## +# Parser error. This is a subclass of SyntaxError. +#

    +# In addition to the exception value, an exception instance contains a +# specific exception code in the code attribute, and the line and +# column of the error in the position attribute. + +class ParseError(SyntaxError): + pass -from . import ElementPath +# -------------------------------------------------------------------- -# TODO: add support for custom namespace resolvers/default namespaces -# TODO: add improved support for incremental parsing +## +# Checks if an object appears to be a valid element object. +# +# @param An element instance. +# @return A true value if this is an element object. +# @defreturn flag -VERSION = "1.2.6" +def iselement(element): + # FIXME: not sure about this; might be a better idea to look + # for tag/attrib/text attributes + return isinstance(element, Element) or hasattr(element, "tag") ## -# Internal element class. This class defines the Element interface, -# and provides a reference implementation of this interface. +# Element class. This class defines the Element interface, and +# provides a reference implementation of this interface. #

    -# You should not create instances of this class directly. Use the -# appropriate factory functions instead, such as {@link #Element} -# and {@link #SubElement}. +# The element name, attribute names, and attribute values can be +# either ASCII strings (ordinary Python strings containing only 7-bit +# ASCII characters) or Unicode strings. # +# @param tag The element name. +# @param attrib An optional dictionary, containing element attributes. +# @param **extra Additional attributes, given as keyword arguments. # @see Element # @see SubElement # @see Comment # @see ProcessingInstruction -class _ElementInterface: +class Element: # text...tail ## @@ -141,34 +178,41 @@ ## # (Attribute) Element attribute dictionary. Where possible, use - # {@link #_ElementInterface.get}, - # {@link #_ElementInterface.set}, - # {@link #_ElementInterface.keys}, and - # {@link #_ElementInterface.items} to access + # {@link #Element.get}, + # {@link #Element.set}, + # {@link #Element.keys}, and + # {@link #Element.items} to access # element attributes. attrib = None ## # (Attribute) Text before first subelement. This is either a - # string or the value None, if there was no text. + # string or the value None. Note that if there was no text, this + # attribute may be either None or an empty string, depending on + # the parser. text = None ## # (Attribute) Text after this element's end tag, but before the # next sibling element's start tag. This is either a string or - # the value None, if there was no text. + # the value None. Note that if there was no text, this attribute + # may be either None or an empty string, depending on the parser. tail = None # text after end tag, if any - def __init__(self, tag, attrib): + # constructor + + def __init__(self, tag, attrib={}, **extra): + attrib = attrib.copy() + attrib.update(extra) self.tag = tag self.attrib = attrib self._children = [] def __repr__(self): - return "" % (self.tag, id(self)) + return "" % (repr(self.tag), id(self)) ## # Creates a new element object of the same type as this element. @@ -178,18 +222,41 @@ # @return A new element instance. def makeelement(self, tag, attrib): - return Element(tag, attrib) + return self.__class__(tag, attrib) ## - # Returns the number of subelements. + # (Experimental) Copies the current element. This creates a + # shallow copy; subelements will be shared with the original tree. + # + # @return A new element instance. + + def copy(self): + elem = self.makeelement(self.tag, self.attrib) + elem.text = self.text + elem.tail = self.tail + elem[:] = self + return elem + + ## + # Returns the number of subelements. Note that this only counts + # full elements; to check if there's any content in an element, you + # have to check both the length and the text attribute. # # @return The number of subelements. def __len__(self): return len(self._children) + def __bool__(self): + warnings.warn( + "The behavior of this method will change in future versions. " + "Use specific 'len(elem)' or 'elem is not None' test instead.", + FutureWarning, stacklevel=2 + ) + return len(self._children) != 0 # emulate old behaviour, for now + ## - # Returns the given subelement. + # Returns the given subelement, by index. # # @param index What subelement to return. # @return The given subelement. @@ -199,19 +266,22 @@ return self._children[index] ## - # Replaces the given subelement. + # Replaces the given subelement, by index. # # @param index What subelement to replace. # @param element The new element value. # @exception IndexError If the given element does not exist. - # @exception AssertionError If element is not a valid object. def __setitem__(self, index, element): - assert iselement(element) + # if isinstance(index, slice): + # for elt in element: + # assert iselement(elt) + # else: + # assert iselement(element) self._children[index] = element ## - # Deletes the given subelement. + # Deletes the given subelement, by index. # # @param index What subelement to delete. # @exception IndexError If the given element does not exist. @@ -220,118 +290,121 @@ del self._children[index] ## - # Returns a list containing subelements in the given range. + # Adds a subelement to the end of this element. In document order, + # the new element will appear after the last existing subelement (or + # directly after the text, if it's the first subelement), but before + # the end tag for this element. # - # @param start The first subelement to return. - # @param stop The first subelement that shouldn't be returned. - # @return A sequence object containing subelements. + # @param element The element to add. - def __getslice__(self, start, stop): - return self._children[start:stop] + def append(self, element): + # assert iselement(element) + self._children.append(element) ## - # Replaces a number of subelements with elements from a sequence. + # Appends subelements from a sequence. # - # @param start The first subelement to replace. - # @param stop The first subelement that shouldn't be replaced. # @param elements A sequence object with zero or more elements. - # @exception AssertionError If a sequence member is not a valid object. - - def __setslice__(self, start, stop, elements): - for element in elements: - assert iselement(element) - self._children[start:stop] = list(elements) + # @since 1.3 - ## - # Deletes a number of subelements. - # - # @param start The first subelement to delete. - # @param stop The first subelement to leave in there. - - def __delslice__(self, start, stop): - del self._children[start:stop] - - ## - # Adds a subelement to the end of this element. - # - # @param element The element to add. - # @exception AssertionError If a sequence member is not a valid object. - - def append(self, element): - assert iselement(element) - self._children.append(element) + def extend(self, elements): + # for element in elements: + # assert iselement(element) + self._children.extend(elements) ## # Inserts a subelement at the given position in this element. # # @param index Where to insert the new subelement. - # @exception AssertionError If the element is not a valid object. def insert(self, index, element): - assert iselement(element) + # assert iselement(element) self._children.insert(index, element) ## # Removes a matching subelement. Unlike the find methods, # this method compares elements based on identity, not on tag - # value or contents. + # value or contents. To remove subelements by other means, the + # easiest way is often to use a list comprehension to select what + # elements to keep, and use slice assignment to update the parent + # element. # # @param element What element to remove. # @exception ValueError If a matching element could not be found. - # @exception AssertionError If the element is not a valid object. def remove(self, element): - assert iselement(element) + # assert iselement(element) self._children.remove(element) ## - # Returns all subelements. The elements are returned in document - # order. + # (Deprecated) Returns all subelements. The elements are returned + # in document order. # # @return A list of subelements. # @defreturn list of Element instances def getchildren(self): + warnings.warn( + "This method will be removed in future versions. " + "Use 'list(elem)' or iteration over elem instead.", + DeprecationWarning, stacklevel=2 + ) return self._children ## # Finds the first matching subelement, by tag name or path. # # @param path What element to look for. + # @keyparam namespaces Optional namespace prefix map. # @return The first matching element, or None if no element was found. # @defreturn Element or None - def find(self, path): - return ElementPath.find(self, path) + def find(self, path, namespaces=None): + return ElementPath.find(self, path, namespaces) ## # Finds text for the first matching subelement, by tag name or path. # # @param path What element to look for. # @param default What to return if the element was not found. + # @keyparam namespaces Optional namespace prefix map. # @return The text content of the first matching element, or the # default value no element was found. Note that if the element - # has is found, but has no text content, this method returns an + # is found, but has no text content, this method returns an # empty string. # @defreturn string - def findtext(self, path, default=None): - return ElementPath.findtext(self, path, default) + def findtext(self, path, default=None, namespaces=None): + return ElementPath.findtext(self, path, default, namespaces) ## # Finds all matching subelements, by tag name or path. # # @param path What element to look for. - # @return A list or iterator containing all matching elements, + # @keyparam namespaces Optional namespace prefix map. + # @return A list or other sequence containing all matching elements, # in document order. # @defreturn list of Element instances - def findall(self, path): - return ElementPath.findall(self, path) + def findall(self, path, namespaces=None): + return ElementPath.findall(self, path, namespaces) + + ## + # Finds all matching subelements, by tag name or path. + # + # @param path What element to look for. + # @keyparam namespaces Optional namespace prefix map. + # @return An iterator or sequence containing all matching elements, + # in document order. + # @defreturn a generated sequence of Element instances + + def iterfind(self, path, namespaces=None): + return ElementPath.iterfind(self, path, namespaces) ## # Resets an element. This function removes all subelements, clears - # all attributes, and sets the text and tail attributes to None. + # all attributes, and sets the text and tail attributes + # to None. def clear(self): self.attrib.clear() @@ -339,7 +412,8 @@ self.text = self.tail = None ## - # Gets an element attribute. + # Gets an element attribute. Equivalent to attrib.get, but + # some implementations may handle this a bit more efficiently. # # @param key What attribute to look for. # @param default What to return if the attribute was not found. @@ -351,7 +425,8 @@ return self.attrib.get(key, default) ## - # Sets an element attribute. + # Sets an element attribute. Equivalent to attrib[key] = value, + # but some implementations may handle this a bit more efficiently. # # @param key What attribute to set. # @param value The attribute value. @@ -362,6 +437,7 @@ ## # Gets a list of attribute names. The names are returned in an # arbitrary order (just like for an ordinary Python dictionary). + # Equivalent to attrib.keys(). # # @return A list of element attribute names. # @defreturn list of strings @@ -371,7 +447,7 @@ ## # Gets element attributes, as a sequence. The attributes are - # returned in an arbitrary order. + # returned in an arbitrary order. Equivalent to attrib.items(). # # @return A list of (name, value) tuples for all attributes. # @defreturn list of (string, string) tuples @@ -384,45 +460,55 @@ # and all subelements, in document order, and returns all elements # with a matching tag. #

    - # If the tree structure is modified during iteration, the result - # is undefined. + # If the tree structure is modified during iteration, new or removed + # elements may or may not be included. To get a stable set, use the + # list() function on the iterator, and loop over the resulting list. # # @param tag What tags to look for (default is to return all elements). - # @return A list or iterator containing all the matching elements. - # @defreturn list or iterator + # @return An iterator containing all the matching elements. + # @defreturn iterator - def getiterator(self, tag=None): - nodes = [] + def iter(self, tag=None): if tag == "*": tag = None if tag is None or self.tag == tag: - nodes.append(self) - for node in self._children: - nodes.extend(node.getiterator(tag)) - return nodes + yield self + for e in self._children: + for e in e.iter(tag): + yield e -# compatibility -_Element = _ElementInterface + # compatibility + def getiterator(self, tag=None): + # Change for a DeprecationWarning in 1.4 + warnings.warn( + "This method will be removed in future versions. " + "Use 'elem.iter()' or 'list(elem.iter())' instead.", + PendingDeprecationWarning, stacklevel=2 + ) + return list(self.iter(tag)) -## -# Element factory. This function returns an object implementing the -# standard Element interface. The exact class or type of that object -# is implementation dependent, but it will always be compatible with -# the {@link #_ElementInterface} class in this module. -#

    -# The element name, attribute names, and attribute values can be -# either 8-bit ASCII strings or Unicode strings. -# -# @param tag The element name. -# @param attrib An optional dictionary, containing element attributes. -# @param **extra Additional attributes, given as keyword arguments. -# @return An element instance. -# @defreturn Element + ## + # Creates a text iterator. The iterator loops over this element + # and all subelements, in document order, and returns all inner + # text. + # + # @return An iterator containing all inner text. + # @defreturn iterator -def Element(tag, attrib={}, **extra): - attrib = attrib.copy() - attrib.update(extra) - return _ElementInterface(tag, attrib) + def itertext(self): + tag = self.tag + if not isinstance(tag, str) and tag is not None: + return + if self.text: + yield self.text + for e in self: + for s in e.itertext(): + yield s + if e.tail: + yield e.tail + +# compatibility +_Element = _ElementInterface = Element ## # Subelement factory. This function creates an element instance, and @@ -447,7 +533,8 @@ ## # Comment element factory. This factory function creates a special -# element that will be serialized as an XML comment. +# element that will be serialized as an XML comment by the standard +# serializer. #

    # The comment string can be either an 8-bit ASCII string or a Unicode # string. @@ -463,7 +550,8 @@ ## # PI element factory. This factory function creates a special element -# that will be serialized as an XML processing instruction. +# that will be serialized as an XML processing instruction by the standard +# serializer. # # @param target A string containing the PI target. # @param text A string containing the PI contents, if any. @@ -523,19 +611,21 @@ return self.text != other.text return self.text != other +# -------------------------------------------------------------------- + ## # ElementTree wrapper class. This class represents an entire element # hierarchy, and adds some extra support for serialization to and from # standard XML. # # @param element Optional root element. -# @keyparam file Optional file handle or name. If given, the +# @keyparam file Optional file handle or file name. If given, the # tree is initialized with the contents of this XML file. class ElementTree: def __init__(self, element=None, file=None): - assert element is None or iselement(element) + # assert element is None or iselement(element) self._root = element # first node if file: self.parse(file) @@ -557,25 +647,27 @@ # @param element An element instance. def _setroot(self, element): - assert iselement(element) + # assert iselement(element) self._root = element ## # Loads an external XML document into this element tree. # - # @param source A file name or file object. - # @param parser An optional parser instance. If not given, the - # standard {@link XMLTreeBuilder} parser is used. + # @param source A file name or file object. If a file object is + # given, it only has to implement a read(n) method. + # @keyparam parser An optional parser instance. If not given, the + # standard {@link XMLParser} parser is used. # @return The document root element. # @defreturn Element + # @exception ParseError If the parser fails to parse the document. def parse(self, source, parser=None): if not hasattr(source, "read"): source = open(source, "rb") if not parser: - parser = XMLTreeBuilder() + parser = XMLParser(target=TreeBuilder()) while 1: - data = source.read(32768) + data = source.read(65536) if not data: break parser.feed(data) @@ -590,23 +682,40 @@ # @return An iterator. # @defreturn iterator + def iter(self, tag=None): + # assert self._root is not None + return self._root.iter(tag) + + # compatibility def getiterator(self, tag=None): - assert self._root is not None - return self._root.getiterator(tag) + # Change for a DeprecationWarning in 1.4 + warnings.warn( + "This method will be removed in future versions. " + "Use 'tree.iter()' or 'list(tree.iter())' instead.", + PendingDeprecationWarning, stacklevel=2 + ) + return list(self.iter(tag)) ## # Finds the first toplevel element with given tag. # Same as getroot().find(path). # # @param path What element to look for. + # @keyparam namespaces Optional namespace prefix map. # @return The first matching element, or None if no element was found. # @defreturn Element or None - def find(self, path): - assert self._root is not None + def find(self, path, namespaces=None): + # assert self._root is not None if path[:1] == "/": path = "." + path - return self._root.find(path) + warnings.warn( + "This search is broken in 1.3 and earlier, and will be " + "fixed in a future version. If you rely on the current " + "behaviour, change it to %r" % path, + FutureWarning, stacklevel=2 + ) + return self._root.find(path, namespaces) ## # Finds the element text for the first toplevel element with given @@ -614,153 +723,353 @@ # # @param path What toplevel element to look for. # @param default What to return if the element was not found. + # @keyparam namespaces Optional namespace prefix map. # @return The text content of the first matching element, or the # default value no element was found. Note that if the element - # has is found, but has no text content, this method returns an + # is found, but has no text content, this method returns an # empty string. # @defreturn string - def findtext(self, path, default=None): - assert self._root is not None + def findtext(self, path, default=None, namespaces=None): + # assert self._root is not None if path[:1] == "/": path = "." + path - return self._root.findtext(path, default) + warnings.warn( + "This search is broken in 1.3 and earlier, and will be " + "fixed in a future version. If you rely on the current " + "behaviour, change it to %r" % path, + FutureWarning, stacklevel=2 + ) + return self._root.findtext(path, default, namespaces) ## # Finds all toplevel elements with the given tag. # Same as getroot().findall(path). # # @param path What element to look for. + # @keyparam namespaces Optional namespace prefix map. # @return A list or iterator containing all matching elements, # in document order. # @defreturn list of Element instances - def findall(self, path): - assert self._root is not None + def findall(self, path, namespaces=None): + # assert self._root is not None if path[:1] == "/": path = "." + path - return self._root.findall(path) + warnings.warn( + "This search is broken in 1.3 and earlier, and will be " + "fixed in a future version. If you rely on the current " + "behaviour, change it to %r" % path, + FutureWarning, stacklevel=2 + ) + return self._root.findall(path, namespaces) + + ## + # Finds all matching subelements, by tag name or path. + # Same as getroot().iterfind(path). + # + # @param path What element to look for. + # @keyparam namespaces Optional namespace prefix map. + # @return An iterator or sequence containing all matching elements, + # in document order. + # @defreturn a generated sequence of Element instances + + def iterfind(self, path, namespaces=None): + # assert self._root is not None + if path[:1] == "/": + path = "." + path + warnings.warn( + "This search is broken in 1.3 and earlier, and will be " + "fixed in a future version. If you rely on the current " + "behaviour, change it to %r" % path, + FutureWarning, stacklevel=2 + ) + return self._root.iterfind(path, namespaces) ## # Writes the element tree to a file, as XML. # + # @def write(file, **options) # @param file A file name, or a file object opened for writing. - # @param encoding Optional output encoding (default is None) - - def write(self, file, encoding=None): - assert self._root is not None - if not hasattr(file, "write"): + # @param **options Options, given as keyword arguments. + # @keyparam encoding Optional output encoding (default is None). + # @keyparam method Optional output method ("xml", "html", "text" or + # "c14n"; default is "xml"). + # @keyparam xml_declaration Controls if an XML declaration should + # be added to the file. Use False for never, True for always, + # None for only if not US-ASCII or UTF-8. None is default. + + def write(self, file_or_filename, + # keyword arguments + encoding=None, + xml_declaration=None, + default_namespace=None, + method=None): + # assert self._root is not None + if not method: + method = "xml" + elif method not in _serialize: + # FIXME: raise an ImportError for c14n if ElementC14N is missing? + raise ValueError("unknown method %r" % method) + if hasattr(file_or_filename, "write"): + file = file_or_filename + else: if encoding: - file = open(file, "wb") + file = open(file_or_filename, "wb") else: - file = open(file, "w") - if encoding and encoding != "utf-8": - file.write(_encode("\n" % encoding, encoding)) - self._write(file, self._root, encoding, {}) - - def _write(self, file, node, encoding, namespaces): - # write XML to file - tag = node.tag - if tag is Comment: - file.write(_encode("" % node.text, encoding)) - elif tag is ProcessingInstruction: - file.write(_encode("" % node.text, encoding)) + file = open(file_or_filename, "w") + if encoding: + def write(text): + try: + return file.write(text.encode(encoding, + "xmlcharrefreplace")) + except (TypeError, AttributeError): + _raise_serialization_error(text) else: - items = list(node.items()) - xmlns_items = [] # new namespaces in this scope - try: - if isinstance(tag, QName) or tag[:1] == "{": - tag, xmlns = fixtag(tag, namespaces) - if xmlns: xmlns_items.append(xmlns) - except TypeError: - _raise_serialization_error(tag) - file.write(_encode("<" + tag, encoding)) - if items or xmlns_items: - items.sort() # lexical order - for k, v in items: - try: - if isinstance(k, QName) or k[:1] == "{": - k, xmlns = fixtag(k, namespaces) - if xmlns: xmlns_items.append(xmlns) - except TypeError: - _raise_serialization_error(k) - try: - if isinstance(v, QName): - v, xmlns = fixtag(v, namespaces) - if xmlns: xmlns_items.append(xmlns) - except TypeError: - _raise_serialization_error(v) - file.write(_encode(" %s=\"%s\"" % (k, _escape_attrib(v)), encoding)) - for k, v in xmlns_items: - file.write(_encode(" %s=\"%s\"" % (k, _escape_attrib(v)), encoding)) - if node.text or len(node): - file.write(_encode(">", encoding)) - if node.text: - file.write(_encode_cdata(node.text, encoding)) - for n in node: - self._write(file, n, encoding, namespaces) - file.write(_encode("", encoding)) + write = file.write + if not encoding: + if method == "c14n": + encoding = "utf-8" else: - file.write(_encode(" />", encoding)) - for k, v in xmlns_items: - del namespaces[v] - if node.tail: - file.write(_encode_cdata(node.tail, encoding)) + encoding = None + elif xml_declaration or (xml_declaration is None and + encoding not in ("utf-8", "us-ascii")): + if method == "xml": + encoding_ = encoding + if not encoding: + # Retrieve the default encoding for the xml declaration + import locale + encoding_ = locale.getpreferredencoding() + write("\n" % encoding_) + if method == "text": + _serialize_text(write, self._root) + else: + qnames, namespaces = _namespaces(self._root, default_namespace) + serialize = _serialize[method] + serialize(write, self._root, qnames, namespaces) + if file_or_filename is not file: + file.close() + + def write_c14n(self, file): + # lxml.etree compatibility. use output method instead + return self.write(file, method="c14n") # -------------------------------------------------------------------- -# helpers +# serialization support -## -# Checks if an object appears to be a valid element object. -# -# @param An element instance. -# @return A true value if this is an element object. -# @defreturn flag +def _namespaces(elem, default_namespace=None): + # identify namespaces used in this tree -def iselement(element): - # FIXME: not sure about this; might be a better idea to look - # for tag/attrib/text attributes - return isinstance(element, _ElementInterface) or hasattr(element, "tag") + # maps qnames to *encoded* prefix:local names + qnames = {None: None} -## -# Writes an element tree or element structure to sys.stdout. This -# function should be used for debugging only. -#

    -# The exact output format is implementation dependent. In this -# version, it's written as an ordinary XML file. -# -# @param elem An element tree or an individual element. + # maps uri:s to prefixes + namespaces = {} + if default_namespace: + namespaces[default_namespace] = "" -def dump(elem): - # debugging - if not isinstance(elem, ElementTree): - elem = ElementTree(elem) - elem.write(sys.stdout) - tail = elem.getroot().tail - if not tail or tail[-1] != "\n": - sys.stdout.write("\n") + def add_qname(qname): + # calculate serialized qname representation + try: + if qname[:1] == "{": + uri, tag = qname[1:].rsplit("}", 1) + prefix = namespaces.get(uri) + if prefix is None: + prefix = _namespace_map.get(uri) + if prefix is None: + prefix = "ns%d" % len(namespaces) + if prefix != "xml": + namespaces[uri] = prefix + if prefix: + qnames[qname] = "%s:%s" % (prefix, tag) + else: + qnames[qname] = tag # default element + else: + if default_namespace: + # FIXME: can this be handled in XML 1.0? + raise ValueError( + "cannot use non-qualified names with " + "default_namespace option" + ) + qnames[qname] = qname + except TypeError: + _raise_serialization_error(qname) -def _encode(s, encoding): - if encoding: - return s.encode(encoding) + # populate qname and namespaces table + try: + iterate = elem.iter + except AttributeError: + iterate = elem.getiterator # cET compatibility + for elem in iterate(): + tag = elem.tag + if isinstance(tag, QName) and tag.text not in qnames: + add_qname(tag.text) + elif isinstance(tag, str): + if tag not in qnames: + add_qname(tag) + elif tag is not None and tag is not Comment and tag is not PI: + _raise_serialization_error(tag) + for key, value in elem.items(): + if isinstance(key, QName): + key = key.text + if key not in qnames: + add_qname(key) + if isinstance(value, QName) and value.text not in qnames: + add_qname(value.text) + text = elem.text + if isinstance(text, QName) and text.text not in qnames: + add_qname(text.text) + return qnames, namespaces + +def _serialize_xml(write, elem, qnames, namespaces): + tag = elem.tag + text = elem.text + if tag is Comment: + write("" % text) + elif tag is ProcessingInstruction: + write("" % text) else: - return s - -_escape = re.compile(r"[&<>\"\u0080-\uffff]+") - -_escape_map = { - "&": "&", - "<": "<", - ">": ">", - '"': """, + tag = qnames[tag] + if tag is None: + if text: + write(_escape_cdata(text)) + for e in elem: + _serialize_xml(write, e, qnames, None) + else: + write("<" + tag) + items = list(elem.items()) + if items or namespaces: + if namespaces: + for v, k in sorted(namespaces.items(), + key=lambda x: x[1]): # sort on prefix + if k: + k = ":" + k + write(" xmlns%s=\"%s\"" % ( + k, + _escape_attrib(v) + )) + for k, v in sorted(items): # lexical order + if isinstance(k, QName): + k = k.text + if isinstance(v, QName): + v = qnames[v.text] + else: + v = _escape_attrib(v) + write(" %s=\"%s\"" % (qnames[k], v)) + if text or len(elem): + write(">") + if text: + write(_escape_cdata(text)) + for e in elem: + _serialize_xml(write, e, qnames, None) + write("") + else: + write(" />") + if elem.tail: + write(_escape_cdata(elem.tail)) + +HTML_EMPTY = ("area", "base", "basefont", "br", "col", "frame", "hr", + "img", "input", "isindex", "link", "meta" "param") + +try: + HTML_EMPTY = set(HTML_EMPTY) +except NameError: + pass + +def _serialize_html(write, elem, qnames, namespaces): + tag = elem.tag + text = elem.text + if tag is Comment: + write("" % _escape_cdata(text)) + elif tag is ProcessingInstruction: + write("" % _escape_cdata(text)) + else: + tag = qnames[tag] + if tag is None: + if text: + write(_escape_cdata(text)) + for e in elem: + _serialize_html(write, e, qnames, None) + else: + write("<" + tag) + items = list(elem.items()) + if items or namespaces: + if namespaces: + for v, k in sorted(namespaces.items(), + key=lambda x: x[1]): # sort on prefix + if k: + k = ":" + k + write(" xmlns%s=\"%s\"" % ( + k, + _escape_attrib(v) + )) + for k, v in sorted(items): # lexical order + if isinstance(k, QName): + k = k.text + if isinstance(v, QName): + v = qnames[v.text] + else: + v = _escape_attrib_html(v) + # FIXME: handle boolean attributes + write(" %s=\"%s\"" % (qnames[k], v)) + write(">") + tag = tag.lower() + if text: + if tag == "script" or tag == "style": + write(text) + else: + write(_escape_cdata(text)) + for e in elem: + _serialize_html(write, e, qnames, None) + if tag not in HTML_EMPTY: + write("") + if elem.tail: + write(_escape_cdata(elem.tail)) + +def _serialize_text(write, elem): + for part in elem.itertext(): + write(part) + if elem.tail: + write(elem.tail) + +_serialize = { + "xml": _serialize_xml, + "html": _serialize_html, + "text": _serialize_text, +# this optional method is imported at the end of the module +# "c14n": _serialize_c14n, } +## +# Registers a namespace prefix. The registry is global, and any +# existing mapping for either the given prefix or the namespace URI +# will be removed. +# +# @param prefix Namespace prefix. +# @param uri Namespace uri. Tags and attributes in this namespace +# will be serialized with the given prefix, if at all possible. +# @exception ValueError If the prefix is reserved, or is otherwise +# invalid. + +def register_namespace(prefix, uri): + if re.match("ns\d+$", prefix): + raise ValueError("Prefix format reserved for internal use") + for k, v in _namespace_map.items(): + if k == uri or v == prefix: + del _namespace_map[k] + _namespace_map[uri] = prefix + _namespace_map = { # "well-known" namespace prefixes "http://www.w3.org/XML/1998/namespace": "xml", "http://www.w3.org/1999/xhtml": "html", "http://www.w3.org/1999/02/22-rdf-syntax-ns#": "rdf", "http://schemas.xmlsoap.org/wsdl/": "wsdl", + # xml schema + "http://www.w3.org/2001/XMLSchema": "xs", + "http://www.w3.org/2001/XMLSchema-instance": "xsi", + # dublin core + "http://purl.org/dc/elements/1.1/": "dc", } def _raise_serialization_error(text): @@ -768,77 +1077,127 @@ "cannot serialize %r (type %s)" % (text, type(text).__name__) ) -def _encode_entity(text, pattern=_escape): - # map reserved and non-ascii characters to numerical entities - def escape_entities(m, map=_escape_map): - out = [] - append = out.append - for char in m.group(): - text = map.get(char) - if text is None: - text = "&#%d;" % ord(char) - append(text) - return "".join(out) +def _escape_cdata(text): + # escape character data try: - return _encode(pattern.sub(escape_entities, text), "ascii") - except TypeError: + # it's worth avoiding do-nothing calls for strings that are + # shorter than 500 character, or so. assume that's, by far, + # the most common case in most applications. + if "&" in text: + text = text.replace("&", "&") + if "<" in text: + text = text.replace("<", "<") + if ">" in text: + text = text.replace(">", ">") + return text + except (TypeError, AttributeError): _raise_serialization_error(text) -# -# the following functions assume an ascii-compatible encoding -# (or "utf-16") - -def _encode_cdata(text, encoding): - # escape character data +def _escape_attrib(text): + # escape attribute value try: - text = text.replace("&", "&") - text = text.replace("<", "<") - text = text.replace(">", ">") - if encoding: - return text.encode(encoding, "xmlcharrefreplace") - else: - return text + if "&" in text: + text = text.replace("&", "&") + if "<" in text: + text = text.replace("<", "<") + if ">" in text: + text = text.replace(">", ">") + if "\"" in text: + text = text.replace("\"", """) + if "\n" in text: + text = text.replace("\n", " ") + return text except (TypeError, AttributeError): _raise_serialization_error(text) -def _escape_attrib(text): +def _escape_attrib_html(text): # escape attribute value try: - text = text.replace("&", "&") - text = text.replace("'", "'") # FIXME: overkill - text = text.replace("\"", """) - text = text.replace("<", "<") - text = text.replace(">", ">") + if "&" in text: + text = text.replace("&", "&") + if ">" in text: + text = text.replace(">", ">") + if "\"" in text: + text = text.replace("\"", """) return text except (TypeError, AttributeError): _raise_serialization_error(text) -def fixtag(tag, namespaces): - # given a decorated tag (of the form {uri}tag), return prefixed - # tag and namespace declaration, if any - if isinstance(tag, QName): - tag = tag.text - namespace_uri, tag = tag[1:].split("}", 1) - prefix = namespaces.get(namespace_uri) - if prefix is None: - prefix = _namespace_map.get(namespace_uri) - if prefix is None: - prefix = "ns%d" % len(namespaces) - namespaces[namespace_uri] = prefix - if prefix == "xml": - xmlns = None - else: - xmlns = ("xmlns:%s" % prefix, namespace_uri) +# -------------------------------------------------------------------- + +## +# Generates a string representation of an XML element, including all +# subelements. If encoding is None, the return type is a string; +# otherwise it is a bytes array. +# +# @param element An Element instance. +# @keyparam encoding Optional output encoding (default is None). +# @keyparam method Optional output method ("xml", "html", "text" or +# "c14n"; default is "xml"). +# @return An (optionally) encoded string containing the XML data. +# @defreturn string + +def tostring(element, encoding=None, method=None): + class dummy: + pass + data = [] + file = dummy() + file.write = data.append + ElementTree(element).write(file, encoding, method=method) + if encoding: + return b"".join(data) else: - xmlns = None - return "%s:%s" % (prefix, tag), xmlns + return "".join(data) + +## +# Generates a string representation of an XML element, including all +# subelements. The string is returned as a sequence of string fragments. +# +# @param element An Element instance. +# @keyparam encoding Optional output encoding (default is US-ASCII). +# @keyparam method Optional output method ("xml", "html", "text" or +# "c14n"; default is "xml"). +# @return A sequence object containing the XML data. +# @defreturn sequence +# @since 1.3 + +def tostringlist(element, encoding=None, method=None): + class dummy: + pass + data = [] + file = dummy() + file.write = data.append + ElementTree(element).write(file, encoding, method=method) + # FIXME: merge small fragments into larger parts + return data + +## +# Writes an element tree or element structure to sys.stdout. This +# function should be used for debugging only. +#

    +# The exact output format is implementation dependent. In this +# version, it's written as an ordinary XML file. +# +# @param elem An element tree or an individual element. + +def dump(elem): + # debugging + if not isinstance(elem, ElementTree): + elem = ElementTree(elem) + elem.write(sys.stdout) + tail = elem.getroot().tail + if not tail or tail[-1] != "\n": + sys.stdout.write("\n") + +# -------------------------------------------------------------------- +# parsing ## # Parses an XML document into an element tree. # # @param source A filename or file object containing XML data. # @param parser An optional parser instance. If not given, the -# standard {@link XMLTreeBuilder} parser is used. +# standard {@link XMLParser} parser is used. # @return An ElementTree instance def parse(source, parser=None): @@ -853,18 +1212,25 @@ # @param source A filename or file object containing XML data. # @param events A list of events to report back. If omitted, only "end" # events are reported. +# @param parser An optional parser instance. If not given, the +# standard {@link XMLParser} parser is used. # @return A (event, elem) iterator. -class iterparse: +def iterparse(source, events=None, parser=None): + if not hasattr(source, "read"): + source = open(source, "rb") + if not parser: + parser = XMLParser(target=TreeBuilder()) + return _IterParseIterator(source, events, parser) - def __init__(self, source, events=None): - if not hasattr(source, "read"): - source = open(source, "rb") +class _IterParseIterator: + + def __init__(self, source, events, parser): self._file = source self._events = [] self._index = 0 self.root = self._root = None - self._parser = XMLTreeBuilder() + self._parser = parser # wire up the parser for event reporting parser = self._parser._parser append = self._events.append @@ -891,16 +1257,14 @@ parser.EndElementHandler = handler elif event == "start-ns": def handler(prefix, uri, event=event, append=append): - try: - uri = _encode(uri, "ascii") - except UnicodeError: - pass - append((event, (prefix or "", uri))) + append((event, (prefix or "", uri or ""))) parser.StartNamespaceDeclHandler = handler elif event == "end-ns": def handler(prefix, event=event, append=append): append((event, None)) parser.EndNamespaceDeclHandler = handler + else: + raise ValueError("unknown event %r" % event) def __next__(self): while 1: @@ -909,10 +1273,7 @@ except IndexError: if self._parser is None: self.root = self._root - try: - raise StopIteration - except NameError: - raise IndexError + raise StopIteration # load event buffer del self._events[:] self._index = 0 @@ -926,24 +1287,22 @@ self._index = self._index + 1 return item - try: - iter - def __iter__(self): - return self - except NameError: - def __getitem__(self, index): - return self.__next__() + def __iter__(self): + return self ## # Parses an XML document from a string constant. This function can # be used to embed "XML literals" in Python code. # # @param source A string containing XML data. +# @param parser An optional parser instance. If not given, the +# standard {@link XMLParser} parser is used. # @return An Element instance. # @defreturn Element -def XML(text): - parser = XMLTreeBuilder() +def XML(text, parser=None): + if not parser: + parser = XMLParser(target=TreeBuilder()) parser.feed(text) return parser.close() @@ -952,15 +1311,18 @@ # a dictionary which maps from element id:s to elements. # # @param source A string containing XML data. +# @param parser An optional parser instance. If not given, the +# standard {@link XMLParser} parser is used. # @return A tuple containing an Element instance and a dictionary. # @defreturn (Element, dictionary) -def XMLID(text): - parser = XMLTreeBuilder() +def XMLID(text, parser=None): + if not parser: + parser = XMLParser(target=TreeBuilder()) parser.feed(text) tree = parser.close() ids = {} - for elem in tree.getiterator(): + for elem in tree.iter(): id = elem.get("id") if id: ids[id] = elem @@ -977,25 +1339,23 @@ fromstring = XML ## -# Generates a string representation of an XML element, including all -# subelements. If encoding is None, the return type is a string; -# otherwise it is a bytes array. +# Parses an XML document from a sequence of string fragments. # -# @param element An Element instance. -# @return An (optionally) encoded string containing the XML data. -# @defreturn string +# @param sequence A list or other sequence containing XML data fragments. +# @param parser An optional parser instance. If not given, the +# standard {@link XMLParser} parser is used. +# @return An Element instance. +# @defreturn Element +# @since 1.3 -def tostring(element, encoding=None): - class dummy: - pass - data = [] - file = dummy() - file.write = data.append - ElementTree(element).write(file, encoding) - if encoding: - return b"".join(data) - else: - return "".join(data) +def fromstringlist(sequence, parser=None): + if not parser: + parser = XMLParser(target=TreeBuilder()) + for text in sequence: + parser.feed(text) + return parser.close() + +# -------------------------------------------------------------------- ## # Generic element structure builder. This builder converts a sequence @@ -1016,11 +1376,11 @@ self._last = None # last element self._tail = None # true if we're after an end tag if element_factory is None: - element_factory = _ElementInterface + element_factory = Element self._factory = element_factory ## - # Flushes the parser buffers, and returns the toplevel documen + # Flushes the builder buffers, and returns the toplevel document # element. # # @return An Element instance. @@ -1028,7 +1388,7 @@ def close(self): assert len(self._elem) == 0, "missing end tags" - assert self._last != None, "missing toplevel element" + assert self._last is not None, "missing toplevel element" return self._last def _flush(self): @@ -1093,28 +1453,39 @@ # instance of the standard {@link #TreeBuilder} class. # @keyparam html Predefine HTML entities. This flag is not supported # by the current implementation. +# @keyparam encoding Optional encoding. If given, the value overrides +# the encoding specified in the XML file. # @see #ElementTree # @see #TreeBuilder -class XMLTreeBuilder: +class XMLParser: - def __init__(self, html=0, target=None): + def __init__(self, html=0, target=None, encoding=None): try: from xml.parsers import expat except ImportError: - raise ImportError( - "No module named expat; use SimpleXMLTreeBuilder instead" - ) - self._parser = parser = expat.ParserCreate(None, "}") + try: + import pyexpat as expat + except ImportError: + raise ImportError( + "No module named expat; use SimpleXMLTreeBuilder instead" + ) + parser = expat.ParserCreate(encoding, "}") if target is None: target = TreeBuilder() - self._target = target + # underscored names are provided for compatibility only + self.parser = self._parser = parser + self.target = self._target = target + self._error = expat.error self._names = {} # name memo cache # callbacks parser.DefaultHandlerExpand = self._default parser.StartElementHandler = self._start parser.EndElementHandler = self._end parser.CharacterDataHandler = self._data + # optional callbacks + parser.CommentHandler = self._comment + parser.ProcessingInstructionHandler = self._pi # let expat do the buffering, if supported try: self._parser.buffer_text = 1 @@ -1127,10 +1498,18 @@ parser.StartElementHandler = self._start_list except AttributeError: pass - encoding = "utf-8" - # target.xml(encoding, None) self._doctype = None self.entity = {} + try: + self.version = "Expat %d.%d.%d" % expat.version_info + except AttributeError: + pass # unknown + + def _raiseerror(self, value): + err = ParseError(value) + err.code = value.code + err.position = value.lineno, value.offset + raise err def _fixname(self, key): # expand qname, and convert name string to ascii, if possible @@ -1149,7 +1528,7 @@ attrib = {} for key, value in attrib_in.items(): attrib[fixname(key)] = value - return self._target.start(tag, attrib) + return self.target.start(tag, attrib) def _start_list(self, tag, attrib_in): fixname = self._fixname @@ -1158,27 +1537,47 @@ if attrib_in: for i in range(0, len(attrib_in), 2): attrib[fixname(attrib_in[i])] = attrib_in[i+1] - return self._target.start(tag, attrib) + return self.target.start(tag, attrib) def _data(self, text): - return self._target.data(text) + return self.target.data(text) def _end(self, tag): - return self._target.end(self._fixname(tag)) + return self.target.end(self._fixname(tag)) + + def _comment(self, data): + try: + comment = self.target.comment + except AttributeError: + pass + else: + return comment(data) + + def _pi(self, target, data): + try: + pi = self.target.pi + except AttributeError: + pass + else: + return pi(target, data) def _default(self, text): prefix = text[:1] if prefix == "&": # deal with undefined entities try: - self._target.data(self.entity[text[1:-1]]) + self.target.data(self.entity[text[1:-1]]) except KeyError: from xml.parsers import expat - raise expat.error( + err = expat.error( "undefined entity %s: line %d, column %d" % (text, self._parser.ErrorLineNumber, self._parser.ErrorColumnNumber) ) + err.code = 11 # XML_ERROR_UNDEFINED_ENTITY + err.lineno = self._parser.ErrorLineNumber + err.offset = self._parser.ErrorColumnNumber + raise err elif prefix == "<" and text[:9] == "" >> $RESULT_FILE ## copy results -chgrp -R webmaster build/html -chmod -R g+w build/html -rsync $RSYNC_OPTS build/html/* $REMOTE_SYSTEM:$REMOTE_DIR -cd ../build -rsync $RSYNC_OPTS index.html *.out $REMOTE_SYSTEM:$REMOTE_DIR/results/ +## (not used anymore, the daily build is now done directly on the server) +#chgrp -R webmaster build/html +#chmod -R g+w build/html +#rsync $RSYNC_OPTS build/html/* $REMOTE_SYSTEM:$REMOTE_DIR +#cd ../build +#rsync $RSYNC_OPTS index.html *.out $REMOTE_SYSTEM:$REMOTE_DIR/results/ Modified: python/branches/py3k-jit/Modules/_ctypes/libffi.diff ============================================================================== --- python/branches/py3k-jit/Modules/_ctypes/libffi.diff (original) +++ python/branches/py3k-jit/Modules/_ctypes/libffi.diff Tue Mar 16 21:40:29 2010 @@ -1,33 +1,18 @@ This file contains the diffs between the files in the libffi subdirectory and the 'official' source files from -ftp://sourceware.org/pub/libffi/libffi-3.0.5.tar.gz +ftp://sourceware.org/pub/libffi/libffi-3.0.9.tar.gz -Index: libffi/aclocal.m4 -=================================================================== ---- libffi/aclocal.m4 (working copy) -+++ libffi/aclocal.m4 (revision 72475) -@@ -1155,7 +1155,7 @@ - test -n "$_LT_AC_TAGVAR(runpath_var, $1)" || \ - test "X$_LT_AC_TAGVAR(hardcode_automatic, $1)" = "Xyes" ; then - -- # We can hardcode non-existant directories. -+ # We can hardcode non-existent directories. - if test "$_LT_AC_TAGVAR(hardcode_direct, $1)" != no && - # If the only mechanism to avoid hardcoding is shlibpath_var, we - # have to relink, otherwise we might link with an installed library -Index: libffi/configure.ac -=================================================================== ---- libffi/configure.ac (working copy) -+++ libffi/configure.ac (revision 72475) +--- libffi/configure.ac.orig 2009-12-31 13:41:51.000000000 +0100 ++++ libffi/configure.ac 2010-02-24 00:39:10.341610848 +0100 @@ -1,4 +1,7 @@ dnl Process this with autoconf to create configure +# +# file from libffi - slightly patched for ctypes +# - AC_PREREQ(2.59) + AC_PREREQ(2.63) -@@ -83,6 +86,9 @@ +@@ -91,6 +94,9 @@ i?86-*-solaris2.1[[0-9]]*) TARGET=X86_64; TARGETDIR=x86 ;; @@ -37,7 +22,7 @@ i?86-*-*) TARGET=X86; TARGETDIR=x86 ;; -@@ -100,10 +106,10 @@ +@@ -108,12 +114,12 @@ ;; mips-sgi-irix5.* | mips-sgi-irix6.*) @@ -45,12 +30,14 @@ + TARGET=MIPS_IRIX; TARGETDIR=mips ;; mips*-*-linux*) + # Support 128-bit long double for NewABI. + HAVE_LONG_DOUBLE='defined(__mips64)' - TARGET=MIPS; TARGETDIR=mips -+ TARGET=MIPS_LINUX; TARGETDIR=mips ++ TARGET=MIPS_IRIX; TARGETDIR=mips ;; powerpc*-*-linux* | powerpc-*-sysv*) -@@ -156,7 +162,7 @@ +@@ -170,7 +176,7 @@ AC_MSG_ERROR(["libffi has not been ported to $host."]) fi @@ -59,59 +46,21 @@ AM_CONDITIONAL(SPARC, test x$TARGET = xSPARC) AM_CONDITIONAL(X86, test x$TARGET = xX86) AM_CONDITIONAL(X86_FREEBSD, test x$TARGET = xX86_FREEBSD) -@@ -360,6 +366,10 @@ +@@ -399,6 +405,10 @@ AC_CONFIG_LINKS(include/ffitarget.h:src/$TARGETDIR/ffitarget.h) -AC_CONFIG_FILES(include/Makefile include/ffi.h Makefile testsuite/Makefile man/Makefile libffi.pc) +AC_CONFIG_FILES(include/ffi.h) - ++ +AC_CONFIG_LINKS(include/ffi_common.h:include/ffi_common.h) + +AC_CONFIG_FILES(fficonfig.py) -+ + AC_OUTPUT -Index: libffi/configure -=================================================================== ---- libffi/configure (working copy) -+++ libffi/configure (revision 72475) -@@ -9546,7 +9546,7 @@ - test -n "$runpath_var" || \ - test "X$hardcode_automatic" = "Xyes" ; then - -- # We can hardcode non-existant directories. -+ # We can hardcode non-existent directories. - if test "$hardcode_direct" != no && - # If the only mechanism to avoid hardcoding is shlibpath_var, we - # have to relink, otherwise we might link with an installed library -@@ -13514,7 +13514,7 @@ - test -n "$runpath_var_CXX" || \ - test "X$hardcode_automatic_CXX" = "Xyes" ; then - -- # We can hardcode non-existant directories. -+ # We can hardcode non-existent directories. - if test "$hardcode_direct_CXX" != no && - # If the only mechanism to avoid hardcoding is shlibpath_var, we - # have to relink, otherwise we might link with an installed library -@@ -16117,7 +16117,7 @@ - test -n "$runpath_var_F77" || \ - test "X$hardcode_automatic_F77" = "Xyes" ; then - -- # We can hardcode non-existant directories. -+ # We can hardcode non-existent directories. - if test "$hardcode_direct_F77" != no && - # If the only mechanism to avoid hardcoding is shlibpath_var, we - # have to relink, otherwise we might link with an installed library -@@ -18720,7 +18720,7 @@ - test -n "$runpath_var_GCJ" || \ - test "X$hardcode_automatic_GCJ" = "Xyes" ; then - -- # We can hardcode non-existant directories. -+ # We can hardcode non-existent directories. - if test "$hardcode_direct_GCJ" != no && - # If the only mechanism to avoid hardcoding is shlibpath_var, we - # have to relink, otherwise we might link with an installed library -@@ -20406,6 +20406,9 @@ +--- libffi/configure.orig 2009-12-31 13:41:51.000000000 +0100 ++++ libffi/configure 2010-02-24 00:41:59.829608794 +0100 +@@ -12191,6 +12191,9 @@ i?86-*-solaris2.1[0-9]*) TARGET=X86_64; TARGETDIR=x86 ;; @@ -121,7 +70,7 @@ i?86-*-*) TARGET=X86; TARGETDIR=x86 ;; -@@ -20423,10 +20426,10 @@ +@@ -12208,12 +12211,12 @@ ;; mips-sgi-irix5.* | mips-sgi-irix6.*) @@ -129,12 +78,14 @@ + TARGET=MIPS_IRIX; TARGETDIR=mips ;; mips*-*-linux*) + # Support 128-bit long double for NewABI. + HAVE_LONG_DOUBLE='defined(__mips64)' - TARGET=MIPS; TARGETDIR=mips -+ TARGET=MIPS_LINUX; TARGETDIR=mips ++ TARGET=MIPS_IRIX; TARGETDIR=mips ;; powerpc*-*-linux* | powerpc-*-sysv*) -@@ -20481,7 +20484,7 @@ +@@ -12272,7 +12275,7 @@ { (exit 1); exit 1; }; } fi @@ -143,24 +94,22 @@ MIPS_TRUE= MIPS_FALSE='#' else -@@ -22712,9 +22715,15 @@ +@@ -14667,7 +14670,13 @@ ac_config_links="$ac_config_links include/ffitarget.h:src/$TARGETDIR/ffitarget.h" -ac_config_files="$ac_config_files include/Makefile include/ffi.h Makefile testsuite/Makefile man/Makefile libffi.pc" +ac_config_files="$ac_config_files include/ffi.h" - - -+ac_config_links="$ac_config_links include/ffi_common.h:include/ffi_common.h" + + -+ac_config_files="$ac_config_files fficonfig.py" ++ac_config_links="$ac_config_links include/ffi_common.h:include/ffi_common.h" + + ++ac_config_files="$ac_config_files fficonfig.py" + + cat >confcache <<\_ACEOF - # This file is a shell script that caches the results of configure - # tests run on this system so they can be shared between configure -@@ -23498,12 +23507,9 @@ +@@ -15767,12 +15776,9 @@ "include") CONFIG_COMMANDS="$CONFIG_COMMANDS include" ;; "src") CONFIG_COMMANDS="$CONFIG_COMMANDS src" ;; "include/ffitarget.h") CONFIG_LINKS="$CONFIG_LINKS include/ffitarget.h:src/$TARGETDIR/ffitarget.h" ;; @@ -173,13 +122,22 @@ + "include/ffi_common.h") CONFIG_LINKS="$CONFIG_LINKS include/ffi_common.h:include/ffi_common.h" ;; + "fficonfig.py") CONFIG_FILES="$CONFIG_FILES fficonfig.py" ;; - *) { { echo "$as_me:$LINENO: error: invalid argument: $ac_config_target" >&5 - echo "$as_me: error: invalid argument: $ac_config_target" >&2;} -Index: libffi/src/x86/ffi.c -=================================================================== ---- libffi/src/x86/ffi.c (working copy) -+++ libffi/src/x86/ffi.c (revision 72475) -@@ -388,10 +388,10 @@ + *) { { $as_echo "$as_me:$LINENO: error: invalid argument: $ac_config_target" >&5 + $as_echo "$as_me: error: invalid argument: $ac_config_target" >&2;} +--- libffi/src/x86/ffi64.c.orig 2009-12-29 16:22:26.000000000 +0100 ++++ libffi/src/x86/ffi64.c 2010-02-24 00:36:46.678610932 +0100 +@@ -52,7 +52,7 @@ + /* Register class used for passing given 64bit part of the argument. + These represent classes as documented by the PS ABI, with the exception + of SSESF, SSEDF classes, that are basically SSE class, just gcc will +- use SF or DFmode move instead of DImode to avoid reformating penalties. ++ use SF or DFmode move instead of DImode to avoid reformatting penalties. + + Similary we play games with INTEGERSI_CLASS to use cheaper SImode moves + whenever possible (upper half does contain padding). */ +--- libffi/src/x86/ffi.c.orig 2009-12-29 16:22:26.000000000 +0100 ++++ libffi/src/x86/ffi.c 2010-02-24 00:36:46.678610932 +0100 +@@ -594,10 +594,10 @@ return FFI_BAD_ABI; } @@ -192,16 +150,3 @@ for (i = cif->nargs-1; i >= 0; i--) { -Index: libffi/src/x86/ffi64.c -=================================================================== ---- libffi/src/x86/ffi64.c (working copy) -+++ libffi/src/x86/ffi64.c (revision 72475) -@@ -52,7 +52,7 @@ - /* Register class used for passing given 64bit part of the argument. - These represent classes as documented by the PS ABI, with the exception - of SSESF, SSEDF classes, that are basically SSE class, just gcc will -- use SF or DFmode move instead of DImode to avoid reformating penalties. -+ use SF or DFmode move instead of DImode to avoid reformatting penalties. - - Similary we play games with INTEGERSI_CLASS to use cheaper SImode moves - whenever possible (upper half does contain padding). */ Modified: python/branches/py3k-jit/Modules/_ctypes/libffi/LICENSE ============================================================================== --- python/branches/py3k-jit/Modules/_ctypes/libffi/LICENSE (original) +++ python/branches/py3k-jit/Modules/_ctypes/libffi/LICENSE Tue Mar 16 21:40:29 2010 @@ -1,4 +1,4 @@ -libffi - Copyright (c) 1996-2008 Red Hat, Inc and others. +libffi - Copyright (c) 1996-2009 Anthony Green, Red Hat, Inc and others. See source files for details. Permission is hereby granted, free of charge, to any person obtaining Modified: python/branches/py3k-jit/Modules/_ctypes/libffi/Makefile.am ============================================================================== --- python/branches/py3k-jit/Modules/_ctypes/libffi/Makefile.am (original) +++ python/branches/py3k-jit/Modules/_ctypes/libffi/Makefile.am Tue Mar 16 21:40:29 2010 @@ -7,6 +7,7 @@ EXTRA_DIST = LICENSE ChangeLog.v1 ChangeLog.libgcj configure.host \ src/alpha/ffi.c src/alpha/osf.S src/alpha/ffitarget.h \ src/arm/ffi.c src/arm/sysv.S src/arm/ffitarget.h \ + src/avr32/ffi.c src/avr32/sysv.S src/avr32/ffitarget.h \ src/cris/ffi.c src/cris/sysv.S src/cris/ffitarget.h \ src/ia64/ffi.c src/ia64/ffitarget.h src/ia64/ia64_flags.h \ src/ia64/unix.S \ @@ -25,12 +26,13 @@ src/sh64/ffi.c src/sh64/sysv.S src/sh64/ffitarget.h \ src/sparc/v8.S src/sparc/v9.S src/sparc/ffitarget.h \ src/sparc/ffi.c src/x86/darwin64.S \ - src/x86/ffi.c src/x86/sysv.S src/x86/win32.S src/x86/darwin.S \ - src/x86/freebsd.S \ + src/x86/ffi.c src/x86/sysv.S src/x86/win32.S src/x86/win64.S \ + src/x86/darwin.S src/x86/freebsd.S \ src/x86/ffi64.c src/x86/unix64.S src/x86/ffitarget.h \ src/pa/ffitarget.h src/pa/ffi.c src/pa/linux.S src/pa/hpux32.S \ src/frv/ffi.c src/frv/eabi.S src/frv/ffitarget.h src/dlmalloc.c \ - libtool-version ChangeLog.libffi + libtool-version ChangeLog.libffi m4/libtool.m4 \ + m4/lt~obsolete.m4 m4/ltoptions.m4 m4/ltsugar.m4 m4/ltversion.m4 info_TEXINFOS = doc/libffi.texi @@ -79,6 +81,8 @@ MAKEOVERRIDES= +ACLOCAL_AMFLAGS=$(ACLOCAL_AMFLAGS) -I m4 + lib_LTLIBRARIES = libffi.la noinst_LTLIBRARIES = libffi_convenience.la @@ -102,6 +106,9 @@ if X86_WIN32 nodist_libffi_la_SOURCES += src/x86/ffi.c src/x86/win32.S endif +if X86_WIN64 +nodist_libffi_la_SOURCES += src/x86/ffi.c src/x86/win64.S +endif if X86_DARWIN nodist_libffi_la_SOURCES += src/x86/ffi.c src/x86/darwin.S src/x86/ffi64.c src/x86/darwin64.S endif @@ -135,6 +142,9 @@ if ARM nodist_libffi_la_SOURCES += src/arm/sysv.S src/arm/ffi.c endif +if AVR32 +nodist_libffi_la_SOURCES += src/avr32/sysv.S src/avr32/ffi.c +endif if LIBFFI_CRIS nodist_libffi_la_SOURCES += src/cris/sysv.S src/cris/ffi.c endif @@ -165,7 +175,7 @@ AM_CFLAGS = -Wall -g -fexceptions -libffi_la_LDFLAGS = -version-info `grep -v '^\#' $(srcdir)/libtool-version` +libffi_la_LDFLAGS = -version-info `grep -v '^\#' $(srcdir)/libtool-version` $(AM_LTLDFLAGS) AM_CPPFLAGS = -I. -I$(top_srcdir)/include -Iinclude -I$(top_srcdir)/src AM_CCASFLAGS = $(AM_CPPFLAGS) Modified: python/branches/py3k-jit/Modules/_ctypes/libffi/Makefile.in ============================================================================== --- python/branches/py3k-jit/Modules/_ctypes/libffi/Makefile.in (original) +++ python/branches/py3k-jit/Modules/_ctypes/libffi/Makefile.in Tue Mar 16 21:40:29 2010 @@ -1,8 +1,9 @@ -# Makefile.in generated by automake 1.10 from Makefile.am. +# Makefile.in generated by automake 1.11 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, -# 2003, 2004, 2005, 2006 Free Software Foundation, Inc. +# 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, +# Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. @@ -17,8 +18,9 @@ VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ -pkglibdir = $(libdir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c @@ -38,33 +40,34 @@ @X86_TRUE at am__append_2 = src/x86/ffi.c src/x86/sysv.S @X86_FREEBSD_TRUE at am__append_3 = src/x86/ffi.c src/x86/freebsd.S @X86_WIN32_TRUE at am__append_4 = src/x86/ffi.c src/x86/win32.S - at X86_DARWIN_TRUE@am__append_5 = src/x86/ffi.c src/x86/darwin.S src/x86/ffi64.c src/x86/darwin64.S - at SPARC_TRUE@am__append_6 = src/sparc/ffi.c src/sparc/v8.S src/sparc/v9.S - at ALPHA_TRUE@am__append_7 = src/alpha/ffi.c src/alpha/osf.S - at IA64_TRUE@am__append_8 = src/ia64/ffi.c src/ia64/unix.S - at M32R_TRUE@am__append_9 = src/m32r/sysv.S src/m32r/ffi.c - at M68K_TRUE@am__append_10 = src/m68k/ffi.c src/m68k/sysv.S - at POWERPC_TRUE@am__append_11 = src/powerpc/ffi.c src/powerpc/sysv.S src/powerpc/ppc_closure.S src/powerpc/linux64.S src/powerpc/linux64_closure.S - at POWERPC_AIX_TRUE@am__append_12 = src/powerpc/ffi_darwin.c src/powerpc/aix.S src/powerpc/aix_closure.S - at POWERPC_DARWIN_TRUE@am__append_13 = src/powerpc/ffi_darwin.c src/powerpc/darwin.S src/powerpc/darwin_closure.S - at POWERPC_FREEBSD_TRUE@am__append_14 = src/powerpc/ffi.c src/powerpc/sysv.S src/powerpc/ppc_closure.S - at ARM_TRUE@am__append_15 = src/arm/sysv.S src/arm/ffi.c - at LIBFFI_CRIS_TRUE@am__append_16 = src/cris/sysv.S src/cris/ffi.c - at FRV_TRUE@am__append_17 = src/frv/eabi.S src/frv/ffi.c - at S390_TRUE@am__append_18 = src/s390/sysv.S src/s390/ffi.c - at X86_64_TRUE@am__append_19 = src/x86/ffi64.c src/x86/unix64.S src/x86/ffi.c src/x86/sysv.S - at SH_TRUE@am__append_20 = src/sh/sysv.S src/sh/ffi.c - at SH64_TRUE@am__append_21 = src/sh64/sysv.S src/sh64/ffi.c - at PA_LINUX_TRUE@am__append_22 = src/pa/linux.S src/pa/ffi.c - at PA_HPUX_TRUE@am__append_23 = src/pa/hpux32.S src/pa/ffi.c + at X86_WIN64_TRUE@am__append_5 = src/x86/ffi.c src/x86/win64.S + at X86_DARWIN_TRUE@am__append_6 = src/x86/ffi.c src/x86/darwin.S src/x86/ffi64.c src/x86/darwin64.S + at SPARC_TRUE@am__append_7 = src/sparc/ffi.c src/sparc/v8.S src/sparc/v9.S + at ALPHA_TRUE@am__append_8 = src/alpha/ffi.c src/alpha/osf.S + at IA64_TRUE@am__append_9 = src/ia64/ffi.c src/ia64/unix.S + at M32R_TRUE@am__append_10 = src/m32r/sysv.S src/m32r/ffi.c + at M68K_TRUE@am__append_11 = src/m68k/ffi.c src/m68k/sysv.S + at POWERPC_TRUE@am__append_12 = src/powerpc/ffi.c src/powerpc/sysv.S src/powerpc/ppc_closure.S src/powerpc/linux64.S src/powerpc/linux64_closure.S + at POWERPC_AIX_TRUE@am__append_13 = src/powerpc/ffi_darwin.c src/powerpc/aix.S src/powerpc/aix_closure.S + at POWERPC_DARWIN_TRUE@am__append_14 = src/powerpc/ffi_darwin.c src/powerpc/darwin.S src/powerpc/darwin_closure.S + at POWERPC_FREEBSD_TRUE@am__append_15 = src/powerpc/ffi.c src/powerpc/sysv.S src/powerpc/ppc_closure.S + at ARM_TRUE@am__append_16 = src/arm/sysv.S src/arm/ffi.c + at AVR32_TRUE@am__append_17 = src/avr32/sysv.S src/avr32/ffi.c + at LIBFFI_CRIS_TRUE@am__append_18 = src/cris/sysv.S src/cris/ffi.c + at FRV_TRUE@am__append_19 = src/frv/eabi.S src/frv/ffi.c + at S390_TRUE@am__append_20 = src/s390/sysv.S src/s390/ffi.c + at X86_64_TRUE@am__append_21 = src/x86/ffi64.c src/x86/unix64.S src/x86/ffi.c src/x86/sysv.S + at SH_TRUE@am__append_22 = src/sh/sysv.S src/sh/ffi.c + at SH64_TRUE@am__append_23 = src/sh64/sysv.S src/sh64/ffi.c + at PA_LINUX_TRUE@am__append_24 = src/pa/linux.S src/pa/ffi.c + at PA_HPUX_TRUE@am__append_25 = src/pa/hpux32.S src/pa/ffi.c subdir = . DIST_COMMON = README $(am__configure_deps) $(srcdir)/Makefile.am \ $(srcdir)/Makefile.in $(srcdir)/doc/stamp-vti \ $(srcdir)/doc/version.texi $(srcdir)/fficonfig.h.in \ - $(srcdir)/libffi.pc.in $(top_srcdir)/configure ChangeLog TODO \ - compile config.guess config.sub depcomp install-sh ltcf-c.sh \ - ltcf-cxx.sh ltcf-gcj.sh ltconfig ltmain.sh mdate-sh missing \ - mkinstalldirs texinfo.tex + $(srcdir)/libffi.pc.in $(top_srcdir)/configure ChangeLog \ + compile config.guess config.sub depcomp install-sh ltmain.sh \ + mdate-sh missing texinfo.tex ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/acinclude.m4 \ $(top_srcdir)/configure.ac @@ -72,18 +75,33 @@ $(ACLOCAL_M4) am__CONFIG_DISTCLEAN_FILES = config.status config.cache config.log \ configure.lineno config.status.lineno -mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs +mkinstalldirs = $(install_sh) -d CONFIG_HEADER = fficonfig.h CONFIG_CLEAN_FILES = libffi.pc +CONFIG_CLEAN_VPATH_FILES = am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; -am__strip_dir = `echo $$p | sed -e 's|^.*/||'`; +am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; +am__install_max = 40 +am__nobase_strip_setup = \ + srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` +am__nobase_strip = \ + for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" +am__nobase_list = $(am__nobase_strip_setup); \ + for p in $$list; do echo "$$p $$p"; done | \ + sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ + $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ + if (++n[$$2] == $(am__install_max)) \ + { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ + END { for (dir in files) print dir, files[dir] }' +am__base_list = \ + sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ + sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__installdirs = "$(DESTDIR)$(libdir)" "$(DESTDIR)$(infodir)" \ "$(DESTDIR)$(pkgconfigdir)" -libLTLIBRARIES_INSTALL = $(INSTALL) LTLIBRARIES = $(lib_LTLIBRARIES) $(noinst_LTLIBRARIES) libffi_la_LIBADD = am__dirstamp = $(am__leading_dot)dirstamp @@ -94,37 +112,39 @@ @X86_TRUE at am__objects_2 = src/x86/ffi.lo src/x86/sysv.lo @X86_FREEBSD_TRUE at am__objects_3 = src/x86/ffi.lo src/x86/freebsd.lo @X86_WIN32_TRUE at am__objects_4 = src/x86/ffi.lo src/x86/win32.lo - at X86_DARWIN_TRUE@am__objects_5 = src/x86/ffi.lo src/x86/darwin.lo \ + at X86_WIN64_TRUE@am__objects_5 = src/x86/ffi.lo src/x86/win64.lo + at X86_DARWIN_TRUE@am__objects_6 = src/x86/ffi.lo src/x86/darwin.lo \ @X86_DARWIN_TRUE@ src/x86/ffi64.lo src/x86/darwin64.lo - at SPARC_TRUE@am__objects_6 = src/sparc/ffi.lo src/sparc/v8.lo \ + at SPARC_TRUE@am__objects_7 = src/sparc/ffi.lo src/sparc/v8.lo \ @SPARC_TRUE@ src/sparc/v9.lo - at ALPHA_TRUE@am__objects_7 = src/alpha/ffi.lo src/alpha/osf.lo - at IA64_TRUE@am__objects_8 = src/ia64/ffi.lo src/ia64/unix.lo - at M32R_TRUE@am__objects_9 = src/m32r/sysv.lo src/m32r/ffi.lo - at M68K_TRUE@am__objects_10 = src/m68k/ffi.lo src/m68k/sysv.lo - at POWERPC_TRUE@am__objects_11 = src/powerpc/ffi.lo src/powerpc/sysv.lo \ + at ALPHA_TRUE@am__objects_8 = src/alpha/ffi.lo src/alpha/osf.lo + at IA64_TRUE@am__objects_9 = src/ia64/ffi.lo src/ia64/unix.lo + at M32R_TRUE@am__objects_10 = src/m32r/sysv.lo src/m32r/ffi.lo + at M68K_TRUE@am__objects_11 = src/m68k/ffi.lo src/m68k/sysv.lo + at POWERPC_TRUE@am__objects_12 = src/powerpc/ffi.lo src/powerpc/sysv.lo \ @POWERPC_TRUE@ src/powerpc/ppc_closure.lo \ @POWERPC_TRUE@ src/powerpc/linux64.lo \ @POWERPC_TRUE@ src/powerpc/linux64_closure.lo - at POWERPC_AIX_TRUE@am__objects_12 = src/powerpc/ffi_darwin.lo \ + at POWERPC_AIX_TRUE@am__objects_13 = src/powerpc/ffi_darwin.lo \ @POWERPC_AIX_TRUE@ src/powerpc/aix.lo \ @POWERPC_AIX_TRUE@ src/powerpc/aix_closure.lo - at POWERPC_DARWIN_TRUE@am__objects_13 = src/powerpc/ffi_darwin.lo \ + at POWERPC_DARWIN_TRUE@am__objects_14 = src/powerpc/ffi_darwin.lo \ @POWERPC_DARWIN_TRUE@ src/powerpc/darwin.lo \ @POWERPC_DARWIN_TRUE@ src/powerpc/darwin_closure.lo - at POWERPC_FREEBSD_TRUE@am__objects_14 = src/powerpc/ffi.lo \ + at POWERPC_FREEBSD_TRUE@am__objects_15 = src/powerpc/ffi.lo \ @POWERPC_FREEBSD_TRUE@ src/powerpc/sysv.lo \ @POWERPC_FREEBSD_TRUE@ src/powerpc/ppc_closure.lo - at ARM_TRUE@am__objects_15 = src/arm/sysv.lo src/arm/ffi.lo - at LIBFFI_CRIS_TRUE@am__objects_16 = src/cris/sysv.lo src/cris/ffi.lo - at FRV_TRUE@am__objects_17 = src/frv/eabi.lo src/frv/ffi.lo - at S390_TRUE@am__objects_18 = src/s390/sysv.lo src/s390/ffi.lo - at X86_64_TRUE@am__objects_19 = src/x86/ffi64.lo src/x86/unix64.lo \ + at ARM_TRUE@am__objects_16 = src/arm/sysv.lo src/arm/ffi.lo + at AVR32_TRUE@am__objects_17 = src/avr32/sysv.lo src/avr32/ffi.lo + at LIBFFI_CRIS_TRUE@am__objects_18 = src/cris/sysv.lo src/cris/ffi.lo + at FRV_TRUE@am__objects_19 = src/frv/eabi.lo src/frv/ffi.lo + at S390_TRUE@am__objects_20 = src/s390/sysv.lo src/s390/ffi.lo + at X86_64_TRUE@am__objects_21 = src/x86/ffi64.lo src/x86/unix64.lo \ @X86_64_TRUE@ src/x86/ffi.lo src/x86/sysv.lo - at SH_TRUE@am__objects_20 = src/sh/sysv.lo src/sh/ffi.lo - at SH64_TRUE@am__objects_21 = src/sh64/sysv.lo src/sh64/ffi.lo - at PA_LINUX_TRUE@am__objects_22 = src/pa/linux.lo src/pa/ffi.lo - at PA_HPUX_TRUE@am__objects_23 = src/pa/hpux32.lo src/pa/ffi.lo + at SH_TRUE@am__objects_22 = src/sh/sysv.lo src/sh/ffi.lo + at SH64_TRUE@am__objects_23 = src/sh64/sysv.lo src/sh64/ffi.lo + at PA_LINUX_TRUE@am__objects_24 = src/pa/linux.lo src/pa/ffi.lo + at PA_HPUX_TRUE@am__objects_25 = src/pa/hpux32.lo src/pa/ffi.lo nodist_libffi_la_OBJECTS = $(am__objects_1) $(am__objects_2) \ $(am__objects_3) $(am__objects_4) $(am__objects_5) \ $(am__objects_6) $(am__objects_7) $(am__objects_8) \ @@ -132,30 +152,33 @@ $(am__objects_12) $(am__objects_13) $(am__objects_14) \ $(am__objects_15) $(am__objects_16) $(am__objects_17) \ $(am__objects_18) $(am__objects_19) $(am__objects_20) \ - $(am__objects_21) $(am__objects_22) $(am__objects_23) + $(am__objects_21) $(am__objects_22) $(am__objects_23) \ + $(am__objects_24) $(am__objects_25) libffi_la_OBJECTS = $(am_libffi_la_OBJECTS) \ $(nodist_libffi_la_OBJECTS) libffi_la_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(libffi_la_LDFLAGS) $(LDFLAGS) -o $@ libffi_convenience_la_LIBADD = -am__objects_24 = src/debug.lo src/prep_cif.lo src/types.lo \ +am__objects_26 = src/debug.lo src/prep_cif.lo src/types.lo \ src/raw_api.lo src/java_raw_api.lo src/closures.lo -am_libffi_convenience_la_OBJECTS = $(am__objects_24) -am__objects_25 = $(am__objects_1) $(am__objects_2) $(am__objects_3) \ +am_libffi_convenience_la_OBJECTS = $(am__objects_26) +am__objects_27 = $(am__objects_1) $(am__objects_2) $(am__objects_3) \ $(am__objects_4) $(am__objects_5) $(am__objects_6) \ $(am__objects_7) $(am__objects_8) $(am__objects_9) \ $(am__objects_10) $(am__objects_11) $(am__objects_12) \ $(am__objects_13) $(am__objects_14) $(am__objects_15) \ $(am__objects_16) $(am__objects_17) $(am__objects_18) \ $(am__objects_19) $(am__objects_20) $(am__objects_21) \ - $(am__objects_22) $(am__objects_23) -nodist_libffi_convenience_la_OBJECTS = $(am__objects_25) + $(am__objects_22) $(am__objects_23) $(am__objects_24) \ + $(am__objects_25) +nodist_libffi_convenience_la_OBJECTS = $(am__objects_27) libffi_convenience_la_OBJECTS = $(am_libffi_convenience_la_OBJECTS) \ $(nodist_libffi_convenience_la_OBJECTS) DEFAULT_INCLUDES = -I. at am__isrc@ depcomp = $(SHELL) $(top_srcdir)/depcomp am__depfiles_maybe = depfiles +am__mv = mv -f CPPASCOMPILE = $(CCAS) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CCASFLAGS) $(CCASFLAGS) LTCPPASCOMPILE = $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ @@ -193,10 +216,12 @@ install-pdf-recursive install-ps-recursive install-recursive \ installcheck-recursive installdirs-recursive pdf-recursive \ ps-recursive uninstall-recursive -pkgconfigDATA_INSTALL = $(INSTALL_DATA) DATA = $(pkgconfig_DATA) RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ distclean-recursive maintainer-clean-recursive +AM_RECURSIVE_TARGETS = $(RECURSIVE_TARGETS:-recursive=) \ + $(RECURSIVE_CLEAN_TARGETS:-recursive=) tags TAGS ctags CTAGS \ + distdir dist dist-all distcheck ETAGS = etags CTAGS = ctags DIST_SUBDIRS = $(SUBDIRS) @@ -204,9 +229,34 @@ distdir = $(PACKAGE)-$(VERSION) top_distdir = $(distdir) am__remove_distdir = \ - { test ! -d $(distdir) \ - || { find $(distdir) -type d ! -perm -200 -exec chmod u+w {} ';' \ - && rm -fr $(distdir); }; } + { test ! -d "$(distdir)" \ + || { find "$(distdir)" -type d ! -perm -200 -exec chmod u+w {} ';' \ + && rm -fr "$(distdir)"; }; } +am__relativize = \ + dir0=`pwd`; \ + sed_first='s,^\([^/]*\)/.*$$,\1,'; \ + sed_rest='s,^[^/]*/*,,'; \ + sed_last='s,^.*/\([^/]*\)$$,\1,'; \ + sed_butlast='s,/*[^/]*$$,,'; \ + while test -n "$$dir1"; do \ + first=`echo "$$dir1" | sed -e "$$sed_first"`; \ + if test "$$first" != "."; then \ + if test "$$first" = ".."; then \ + dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \ + dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \ + else \ + first2=`echo "$$dir2" | sed -e "$$sed_first"`; \ + if test "$$first2" = "$$first"; then \ + dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \ + else \ + dir2="../$$dir2"; \ + fi; \ + dir0="$$dir0"/"$$first"; \ + fi; \ + fi; \ + dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \ + done; \ + reldir="$$dir2" DIST_ARCHIVES = $(distdir).tar.gz GZIP_ENV = --best distuninstallcheck_listfiles = find . -type f -print @@ -214,6 +264,7 @@ ACLOCAL = @ACLOCAL@ ALLOCA = @ALLOCA@ AMTAR = @AMTAR@ +AM_LTLDFLAGS = @AM_LTLDFLAGS@ AM_RUNTESTFLAGS = @AM_RUNTESTFLAGS@ AR = @AR@ AUTOCONF = @AUTOCONF@ @@ -228,21 +279,17 @@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ -CXX = @CXX@ -CXXCPP = @CXXCPP@ -CXXDEPMODE = @CXXDEPMODE@ -CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ -ECHO = @ECHO@ +DSYMUTIL = @DSYMUTIL@ +DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ -F77 = @F77@ -FFLAGS = @FFLAGS@ +FGREP = @FGREP@ GREP = @GREP@ HAVE_LONG_DOUBLE = @HAVE_LONG_DOUBLE@ INSTALL = @INSTALL@ @@ -250,16 +297,23 @@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +LD = @LD@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ +LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ +NM = @NM@ +NMEDIT = @NMEDIT@ +OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ +OTOOL = @OTOOL@ +OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ @@ -280,8 +334,7 @@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ -ac_ct_CXX = @ac_ct_CXX@ -ac_ct_F77 = @ac_ct_F77@ +ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ @@ -312,6 +365,7 @@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ +lt_ECHO = @lt_ECHO@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ @@ -330,6 +384,7 @@ target_vendor = @target_vendor@ toolexecdir = @toolexecdir@ toolexeclibdir = @toolexeclibdir@ +top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ AUTOMAKE_OPTIONS = foreign subdir-objects @@ -337,6 +392,7 @@ EXTRA_DIST = LICENSE ChangeLog.v1 ChangeLog.libgcj configure.host \ src/alpha/ffi.c src/alpha/osf.S src/alpha/ffitarget.h \ src/arm/ffi.c src/arm/sysv.S src/arm/ffitarget.h \ + src/avr32/ffi.c src/avr32/sysv.S src/avr32/ffitarget.h \ src/cris/ffi.c src/cris/sysv.S src/cris/ffitarget.h \ src/ia64/ffi.c src/ia64/ffitarget.h src/ia64/ia64_flags.h \ src/ia64/unix.S \ @@ -355,12 +411,13 @@ src/sh64/ffi.c src/sh64/sysv.S src/sh64/ffitarget.h \ src/sparc/v8.S src/sparc/v9.S src/sparc/ffitarget.h \ src/sparc/ffi.c src/x86/darwin64.S \ - src/x86/ffi.c src/x86/sysv.S src/x86/win32.S src/x86/darwin.S \ - src/x86/freebsd.S \ + src/x86/ffi.c src/x86/sysv.S src/x86/win32.S src/x86/win64.S \ + src/x86/darwin.S src/x86/freebsd.S \ src/x86/ffi64.c src/x86/unix64.S src/x86/ffitarget.h \ src/pa/ffitarget.h src/pa/ffi.c src/pa/linux.S src/pa/hpux32.S \ src/frv/ffi.c src/frv/eabi.S src/frv/ffitarget.h src/dlmalloc.c \ - libtool-version ChangeLog.libffi + libtool-version ChangeLog.libffi m4/libtool.m4 \ + m4/lt~obsolete.m4 m4/ltoptions.m4 m4/ltsugar.m4 m4/ltversion.m4 info_TEXINFOS = doc/libffi.texi @@ -402,6 +459,7 @@ "DESTDIR=$(DESTDIR)" MAKEOVERRIDES = +ACLOCAL_AMFLAGS = $(ACLOCAL_AMFLAGS) -I m4 lib_LTLIBRARIES = libffi.la noinst_LTLIBRARIES = libffi_convenience.la libffi_la_SOURCES = src/debug.c src/prep_cif.c src/types.c \ @@ -416,11 +474,12 @@ $(am__append_12) $(am__append_13) $(am__append_14) \ $(am__append_15) $(am__append_16) $(am__append_17) \ $(am__append_18) $(am__append_19) $(am__append_20) \ - $(am__append_21) $(am__append_22) $(am__append_23) + $(am__append_21) $(am__append_22) $(am__append_23) \ + $(am__append_24) $(am__append_25) libffi_convenience_la_SOURCES = $(libffi_la_SOURCES) nodist_libffi_convenience_la_SOURCES = $(nodist_libffi_la_SOURCES) AM_CFLAGS = -Wall -g -fexceptions -libffi_la_LDFLAGS = -version-info `grep -v '^\#' $(srcdir)/libtool-version` +libffi_la_LDFLAGS = -version-info `grep -v '^\#' $(srcdir)/libtool-version` $(AM_LTLDFLAGS) AM_CPPFLAGS = -I. -I$(top_srcdir)/include -Iinclude -I$(top_srcdir)/src AM_CCASFLAGS = $(AM_CPPFLAGS) all: fficonfig.h @@ -434,15 +493,15 @@ @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ - echo ' cd $(srcdir) && $(AUTOMAKE) --foreign '; \ - cd $(srcdir) && $(AUTOMAKE) --foreign \ + echo ' cd $(srcdir) && $(AUTOMAKE) --foreign'; \ + $(am__cd) $(srcdir) && $(AUTOMAKE) --foreign \ && exit 0; \ exit 1;; \ esac; \ done; \ - echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign Makefile'; \ - cd $(top_srcdir) && \ - $(AUTOMAKE) --foreign Makefile + echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign Makefile'; \ + $(am__cd) $(top_srcdir) && \ + $(AUTOMAKE) --foreign Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ @@ -458,9 +517,10 @@ $(SHELL) ./config.status --recheck $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) - cd $(srcdir) && $(AUTOCONF) + $(am__cd) $(srcdir) && $(AUTOCONF) $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) - cd $(srcdir) && $(ACLOCAL) $(ACLOCAL_AMFLAGS) + $(am__cd) $(srcdir) && $(ACLOCAL) $(ACLOCAL_AMFLAGS) +$(am__aclocal_m4_deps): fficonfig.h: stamp-h1 @if test ! -f $@; then \ @@ -472,7 +532,7 @@ @rm -f stamp-h1 cd $(top_builddir) && $(SHELL) ./config.status fficonfig.h $(srcdir)/fficonfig.h.in: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) - cd $(top_srcdir) && $(AUTOHEADER) + ($(am__cd) $(top_srcdir) && $(AUTOHEADER)) rm -f stamp-h1 touch $@ @@ -483,20 +543,24 @@ install-libLTLIBRARIES: $(lib_LTLIBRARIES) @$(NORMAL_INSTALL) test -z "$(libdir)" || $(MKDIR_P) "$(DESTDIR)$(libdir)" - @list='$(lib_LTLIBRARIES)'; for p in $$list; do \ + @list='$(lib_LTLIBRARIES)'; test -n "$(libdir)" || list=; \ + list2=; for p in $$list; do \ if test -f $$p; then \ - f=$(am__strip_dir) \ - echo " $(LIBTOOL) --mode=install $(libLTLIBRARIES_INSTALL) $(INSTALL_STRIP_FLAG) '$$p' '$(DESTDIR)$(libdir)/$$f'"; \ - $(LIBTOOL) --mode=install $(libLTLIBRARIES_INSTALL) $(INSTALL_STRIP_FLAG) "$$p" "$(DESTDIR)$(libdir)/$$f"; \ + list2="$$list2 $$p"; \ else :; fi; \ - done + done; \ + test -z "$$list2" || { \ + echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 '$(DESTDIR)$(libdir)'"; \ + $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 "$(DESTDIR)$(libdir)"; \ + } uninstall-libLTLIBRARIES: @$(NORMAL_UNINSTALL) - @list='$(lib_LTLIBRARIES)'; for p in $$list; do \ - p=$(am__strip_dir) \ - echo " $(LIBTOOL) --mode=uninstall rm -f '$(DESTDIR)$(libdir)/$$p'"; \ - $(LIBTOOL) --mode=uninstall rm -f "$(DESTDIR)$(libdir)/$$p"; \ + @list='$(lib_LTLIBRARIES)'; test -n "$(libdir)" || list=; \ + for p in $$list; do \ + $(am__strip_dir) \ + echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f '$(DESTDIR)$(libdir)/$$f'"; \ + $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f "$(DESTDIR)$(libdir)/$$f"; \ done clean-libLTLIBRARIES: @@ -554,6 +618,8 @@ src/x86/$(DEPDIR)/$(am__dirstamp) src/x86/win32.lo: src/x86/$(am__dirstamp) \ src/x86/$(DEPDIR)/$(am__dirstamp) +src/x86/win64.lo: src/x86/$(am__dirstamp) \ + src/x86/$(DEPDIR)/$(am__dirstamp) src/x86/darwin.lo: src/x86/$(am__dirstamp) \ src/x86/$(DEPDIR)/$(am__dirstamp) src/x86/ffi64.lo: src/x86/$(am__dirstamp) \ @@ -648,6 +714,16 @@ src/arm/$(DEPDIR)/$(am__dirstamp) src/arm/ffi.lo: src/arm/$(am__dirstamp) \ src/arm/$(DEPDIR)/$(am__dirstamp) +src/avr32/$(am__dirstamp): + @$(MKDIR_P) src/avr32 + @: > src/avr32/$(am__dirstamp) +src/avr32/$(DEPDIR)/$(am__dirstamp): + @$(MKDIR_P) src/avr32/$(DEPDIR) + @: > src/avr32/$(DEPDIR)/$(am__dirstamp) +src/avr32/sysv.lo: src/avr32/$(am__dirstamp) \ + src/avr32/$(DEPDIR)/$(am__dirstamp) +src/avr32/ffi.lo: src/avr32/$(am__dirstamp) \ + src/avr32/$(DEPDIR)/$(am__dirstamp) src/cris/$(am__dirstamp): @$(MKDIR_P) src/cris @: > src/cris/$(am__dirstamp) @@ -725,6 +801,10 @@ -rm -f src/arm/ffi.lo -rm -f src/arm/sysv.$(OBJEXT) -rm -f src/arm/sysv.lo + -rm -f src/avr32/ffi.$(OBJEXT) + -rm -f src/avr32/ffi.lo + -rm -f src/avr32/sysv.$(OBJEXT) + -rm -f src/avr32/sysv.lo -rm -f src/closures.$(OBJEXT) -rm -f src/closures.lo -rm -f src/cris/ffi.$(OBJEXT) @@ -823,6 +903,8 @@ -rm -f src/x86/unix64.lo -rm -f src/x86/win32.$(OBJEXT) -rm -f src/x86/win32.lo + -rm -f src/x86/win64.$(OBJEXT) + -rm -f src/x86/win64.lo distclean-compile: -rm -f *.tab.c @@ -837,6 +919,8 @@ @AMDEP_TRUE@@am__include@ @am__quote at src/alpha/$(DEPDIR)/osf.Plo at am__quote@ @AMDEP_TRUE@@am__include@ @am__quote at src/arm/$(DEPDIR)/ffi.Plo at am__quote@ @AMDEP_TRUE@@am__include@ @am__quote at src/arm/$(DEPDIR)/sysv.Plo at am__quote@ + at AMDEP_TRUE@@am__include@ @am__quote at src/avr32/$(DEPDIR)/ffi.Plo at am__quote@ + at AMDEP_TRUE@@am__include@ @am__quote at src/avr32/$(DEPDIR)/sysv.Plo at am__quote@ @AMDEP_TRUE@@am__include@ @am__quote at src/cris/$(DEPDIR)/ffi.Plo at am__quote@ @AMDEP_TRUE@@am__include@ @am__quote at src/cris/$(DEPDIR)/sysv.Plo at am__quote@ @AMDEP_TRUE@@am__include@ @am__quote at src/frv/$(DEPDIR)/eabi.Plo at am__quote@ @@ -880,11 +964,12 @@ @AMDEP_TRUE@@am__include@ @am__quote at src/x86/$(DEPDIR)/sysv.Plo at am__quote@ @AMDEP_TRUE@@am__include@ @am__quote at src/x86/$(DEPDIR)/unix64.Plo at am__quote@ @AMDEP_TRUE@@am__include@ @am__quote at src/x86/$(DEPDIR)/win32.Plo at am__quote@ + at AMDEP_TRUE@@am__include@ @am__quote at src/x86/$(DEPDIR)/win64.Plo at am__quote@ .S.o: @am__fastdepCCAS_TRUE@ depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.o$$||'`;\ @am__fastdepCCAS_TRUE@ $(CPPASCOMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\ - at am__fastdepCCAS_TRUE@ mv -f $$depbase.Tpo $$depbase.Po + at am__fastdepCCAS_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Po @AMDEP_TRUE@@am__fastdepCCAS_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCCAS_FALSE@ DEPDIR=$(DEPDIR) $(CCASDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCCAS_FALSE@ $(CPPASCOMPILE) -c -o $@ $< @@ -892,7 +977,7 @@ .S.obj: @am__fastdepCCAS_TRUE@ depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.obj$$||'`;\ @am__fastdepCCAS_TRUE@ $(CPPASCOMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ `$(CYGPATH_W) '$<'` &&\ - at am__fastdepCCAS_TRUE@ mv -f $$depbase.Tpo $$depbase.Po + at am__fastdepCCAS_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Po @AMDEP_TRUE@@am__fastdepCCAS_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCCAS_FALSE@ DEPDIR=$(DEPDIR) $(CCASDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCCAS_FALSE@ $(CPPASCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'` @@ -900,7 +985,7 @@ .S.lo: @am__fastdepCCAS_TRUE@ depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.lo$$||'`;\ @am__fastdepCCAS_TRUE@ $(LTCPPASCOMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\ - at am__fastdepCCAS_TRUE@ mv -f $$depbase.Tpo $$depbase.Plo + at am__fastdepCCAS_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Plo @AMDEP_TRUE@@am__fastdepCCAS_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCCAS_FALSE@ DEPDIR=$(DEPDIR) $(CCASDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCCAS_FALSE@ $(LTCPPASCOMPILE) -c -o $@ $< @@ -908,7 +993,7 @@ .c.o: @am__fastdepCC_TRUE@ depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.o$$||'`;\ @am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\ - at am__fastdepCC_TRUE@ mv -f $$depbase.Tpo $$depbase.Po + at am__fastdepCC_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(COMPILE) -c -o $@ $< @@ -916,7 +1001,7 @@ .c.obj: @am__fastdepCC_TRUE@ depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.obj$$||'`;\ @am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ `$(CYGPATH_W) '$<'` &&\ - at am__fastdepCC_TRUE@ mv -f $$depbase.Tpo $$depbase.Po + at am__fastdepCC_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'` @@ -924,7 +1009,7 @@ .c.lo: @am__fastdepCC_TRUE@ depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.lo$$||'`;\ @am__fastdepCC_TRUE@ $(LTCOMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\ - at am__fastdepCC_TRUE@ mv -f $$depbase.Tpo $$depbase.Plo + at am__fastdepCC_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(LTCOMPILE) -c -o $@ $< @@ -937,6 +1022,7 @@ -rm -rf src/.libs src/_libs -rm -rf src/alpha/.libs src/alpha/_libs -rm -rf src/arm/.libs src/arm/_libs + -rm -rf src/avr32/.libs src/avr32/_libs -rm -rf src/cris/.libs src/cris/_libs -rm -rf src/frv/.libs src/frv/_libs -rm -rf src/ia64/.libs src/ia64/_libs @@ -952,14 +1038,14 @@ -rm -rf src/x86/.libs src/x86/_libs distclean-libtool: - -rm -f libtool + -rm -f libtool config.lt doc/$(am__dirstamp): @$(MKDIR_P) doc @: > doc/$(am__dirstamp) $(srcdir)/doc/libffi.info: doc/libffi.texi $(srcdir)/doc/version.texi restore=: && backupdir="$(am__leading_dot)am$$$$" && \ - am__cwd=`pwd` && cd $(srcdir) && \ + am__cwd=`pwd` && $(am__cd) $(srcdir) && \ rm -rf $$backupdir && mkdir $$backupdir && \ if ($(MAKEINFO) --version) >/dev/null 2>&1; then \ for f in $@ $@-[0-9] $@-[0-9][0-9] $(@:.info=).i[0-9] $(@:.info=).i[0-9][0-9]; do \ @@ -971,10 +1057,10 @@ -o $@ $(srcdir)/doc/libffi.texi; \ then \ rc=0; \ - cd $(srcdir); \ + $(am__cd) $(srcdir); \ else \ rc=$$?; \ - cd $(srcdir) && \ + $(am__cd) $(srcdir) && \ $$restore $$backupdir/* `echo "./$@" | sed 's|[^/]*$$||'`; \ fi; \ rm -rf $$backupdir; exit $$rc @@ -1028,16 +1114,18 @@ uninstall-dvi-am: @$(NORMAL_UNINSTALL) - @list='$(DVIS)'; for p in $$list; do \ - f=$(am__strip_dir) \ + @list='$(DVIS)'; test -n "$(dvidir)" || list=; \ + for p in $$list; do \ + $(am__strip_dir) \ echo " rm -f '$(DESTDIR)$(dvidir)/$$f'"; \ rm -f "$(DESTDIR)$(dvidir)/$$f"; \ done uninstall-html-am: @$(NORMAL_UNINSTALL) - @list='$(HTMLS)'; for p in $$list; do \ - f=$(am__strip_dir) \ + @list='$(HTMLS)'; test -n "$(htmldir)" || list=; \ + for p in $$list; do \ + $(am__strip_dir) \ echo " rm -rf '$(DESTDIR)$(htmldir)/$$f'"; \ rm -rf "$(DESTDIR)$(htmldir)/$$f"; \ done @@ -1051,7 +1139,8 @@ for file in $$list; do \ relfile=`echo "$$file" | sed 's|^.*/||'`; \ echo " install-info --info-dir='$(DESTDIR)$(infodir)' --remove '$(DESTDIR)$(infodir)/$$relfile'"; \ - install-info --info-dir="$(DESTDIR)$(infodir)" --remove "$(DESTDIR)$(infodir)/$$relfile"; \ + if install-info --info-dir="$(DESTDIR)$(infodir)" --remove "$(DESTDIR)$(infodir)/$$relfile"; \ + then :; else test ! -f "$(DESTDIR)$(infodir)/$$relfile" || exit 1; fi; \ done; \ else :; fi @$(NORMAL_UNINSTALL) @@ -1067,16 +1156,18 @@ uninstall-pdf-am: @$(NORMAL_UNINSTALL) - @list='$(PDFS)'; for p in $$list; do \ - f=$(am__strip_dir) \ + @list='$(PDFS)'; test -n "$(pdfdir)" || list=; \ + for p in $$list; do \ + $(am__strip_dir) \ echo " rm -f '$(DESTDIR)$(pdfdir)/$$f'"; \ rm -f "$(DESTDIR)$(pdfdir)/$$f"; \ done uninstall-ps-am: @$(NORMAL_UNINSTALL) - @list='$(PSS)'; for p in $$list; do \ - f=$(am__strip_dir) \ + @list='$(PSS)'; test -n "$(psdir)" || list=; \ + for p in $$list; do \ + $(am__strip_dir) \ echo " rm -f '$(DESTDIR)$(psdir)/$$f'"; \ rm -f "$(DESTDIR)$(psdir)/$$f"; \ done @@ -1093,16 +1184,19 @@ for file in $$d/$$base $$d/$$base-[0-9] $$d/$$base-[0-9][0-9] $$d/$$base_i[0-9] $$d/$$base_i[0-9][0-9]; do \ if test -f $$file; then \ relfile=`expr "$$file" : "$$d/\(.*\)"`; \ - test -f $(distdir)/$$relfile || \ - cp -p $$file $(distdir)/$$relfile; \ + test -f "$(distdir)/$$relfile" || \ + cp -p $$file "$(distdir)/$$relfile"; \ else :; fi; \ done; \ done mostlyclean-aminfo: -rm -rf libffi.aux libffi.cp libffi.cps libffi.fn libffi.ky libffi.log \ - libffi.pg libffi.tmp libffi.toc libffi.tp libffi.vr \ - doc/libffi.dvi doc/libffi.pdf doc/libffi.ps doc/libffi.html + libffi.pg libffi.tmp libffi.toc libffi.tp libffi.vr + +clean-aminfo: + -test -z "doc/libffi.dvi doc/libffi.pdf doc/libffi.ps doc/libffi.html" \ + || rm -rf doc/libffi.dvi doc/libffi.pdf doc/libffi.ps doc/libffi.html maintainer-clean-aminfo: @list='$(INFO_DEPS)'; for i in $$list; do \ @@ -1113,20 +1207,23 @@ install-pkgconfigDATA: $(pkgconfig_DATA) @$(NORMAL_INSTALL) test -z "$(pkgconfigdir)" || $(MKDIR_P) "$(DESTDIR)$(pkgconfigdir)" - @list='$(pkgconfig_DATA)'; for p in $$list; do \ + @list='$(pkgconfig_DATA)'; test -n "$(pkgconfigdir)" || list=; \ + for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ - f=$(am__strip_dir) \ - echo " $(pkgconfigDATA_INSTALL) '$$d$$p' '$(DESTDIR)$(pkgconfigdir)/$$f'"; \ - $(pkgconfigDATA_INSTALL) "$$d$$p" "$(DESTDIR)$(pkgconfigdir)/$$f"; \ + echo "$$d$$p"; \ + done | $(am__base_list) | \ + while read files; do \ + echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(pkgconfigdir)'"; \ + $(INSTALL_DATA) $$files "$(DESTDIR)$(pkgconfigdir)" || exit $$?; \ done uninstall-pkgconfigDATA: @$(NORMAL_UNINSTALL) - @list='$(pkgconfig_DATA)'; for p in $$list; do \ - f=$(am__strip_dir) \ - echo " rm -f '$(DESTDIR)$(pkgconfigdir)/$$f'"; \ - rm -f "$(DESTDIR)$(pkgconfigdir)/$$f"; \ - done + @list='$(pkgconfig_DATA)'; test -n "$(pkgconfigdir)" || list=; \ + files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ + test -n "$$files" || exit 0; \ + echo " ( cd '$(DESTDIR)$(pkgconfigdir)' && rm -f" $$files ")"; \ + cd "$(DESTDIR)$(pkgconfigdir)" && rm -f $$files # This directory's subdirectories are mostly independent; you can cd # into them and run `make' without going through this Makefile. @@ -1152,7 +1249,7 @@ else \ local_target="$$target"; \ fi; \ - (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ + ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || eval $$failcom; \ done; \ if test "$$dot_seen" = "no"; then \ @@ -1186,16 +1283,16 @@ else \ local_target="$$target"; \ fi; \ - (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ + ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || eval $$failcom; \ done && test -z "$$fail" tags-recursive: list='$(SUBDIRS)'; for subdir in $$list; do \ - test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \ + test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \ done ctags-recursive: list='$(SUBDIRS)'; for subdir in $$list; do \ - test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \ + test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \ done ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) @@ -1203,14 +1300,14 @@ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ - $(AWK) ' { files[$$0] = 1; } \ - END { for (i in files) print i; }'`; \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ mkid -fID $$unique tags: TAGS TAGS: tags-recursive $(HEADERS) $(SOURCES) fficonfig.h.in $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) - tags=; \ + set x; \ here=`pwd`; \ if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ include_option=--etags-include; \ @@ -1222,46 +1319,50 @@ list='$(SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test ! -f $$subdir/TAGS || \ - tags="$$tags $$include_option=$$here/$$subdir/TAGS"; \ + set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \ fi; \ done; \ list='$(SOURCES) $(HEADERS) fficonfig.h.in $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ - $(AWK) ' { files[$$0] = 1; } \ - END { for (i in files) print i; }'`; \ - if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + shift; \ + if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ - $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ - $$tags $$unique; \ + if test $$# -gt 0; then \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + "$$@" $$unique; \ + else \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + $$unique; \ + fi; \ fi ctags: CTAGS CTAGS: ctags-recursive $(HEADERS) $(SOURCES) fficonfig.h.in $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) - tags=; \ - here=`pwd`; \ list='$(SOURCES) $(HEADERS) fficonfig.h.in $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ - $(AWK) ' { files[$$0] = 1; } \ - END { for (i in files) print i; }'`; \ - test -z "$(CTAGS_ARGS)$$tags$$unique" \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ - $$tags $$unique + $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ - && cd $(top_srcdir) \ - && gtags -i $(GTAGS_ARGS) $$here + && $(am__cd) $(top_srcdir) \ + && gtags -i $(GTAGS_ARGS) "$$here" distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) $(am__remove_distdir) - test -d $(distdir) || mkdir $(distdir) + test -d "$(distdir)" || mkdir "$(distdir)" @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ @@ -1277,29 +1378,44 @@ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d "$(distdir)/$$file"; then \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ - cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ + cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ - cp -pR $$d/$$file $(distdir)$$dir || exit 1; \ + cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ - test -f $(distdir)/$$file \ - || cp -p $$d/$$file $(distdir)/$$file \ + test -f "$(distdir)/$$file" \ + || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done - list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ + @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test -d "$(distdir)/$$subdir" \ || $(MKDIR_P) "$(distdir)/$$subdir" \ || exit 1; \ - distdir=`$(am__cd) $(distdir) && pwd`; \ - top_distdir=`$(am__cd) $(top_distdir) && pwd`; \ - (cd $$subdir && \ + fi; \ + done + @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ + if test "$$subdir" = .; then :; else \ + dir1=$$subdir; dir2="$(distdir)/$$subdir"; \ + $(am__relativize); \ + new_distdir=$$reldir; \ + dir1=$$subdir; dir2="$(top_distdir)"; \ + $(am__relativize); \ + new_top_distdir=$$reldir; \ + echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \ + echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \ + ($(am__cd) $$subdir && \ $(MAKE) $(AM_MAKEFLAGS) \ - top_distdir="$$top_distdir" \ - distdir="$$distdir/$$subdir" \ + top_distdir="$$new_top_distdir" \ + distdir="$$new_distdir" \ am__remove_distdir=: \ am__skip_length_check=: \ + am__skip_mode_fix=: \ distdir) \ || exit 1; \ fi; \ @@ -1307,11 +1423,12 @@ $(MAKE) $(AM_MAKEFLAGS) \ top_distdir="$(top_distdir)" distdir="$(distdir)" \ dist-info - -find $(distdir) -type d ! -perm -777 -exec chmod a+rwx {} \; -o \ + -test -n "$(am__skip_mode_fix)" \ + || find "$(distdir)" -type d ! -perm -777 -exec chmod a+rwx {} \; -o \ ! -type d ! -perm -444 -links 1 -exec chmod a+r {} \; -o \ ! -type d ! -perm -400 -exec chmod a+r {} \; -o \ ! -type d ! -perm -444 -exec $(install_sh) -c -m a+r {} {} \; \ - || chmod -R a+r $(distdir) + || chmod -R a+r "$(distdir)" dist-gzip: distdir tardir=$(distdir) && $(am__tar) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz $(am__remove_distdir) @@ -1320,6 +1437,14 @@ tardir=$(distdir) && $(am__tar) | bzip2 -9 -c >$(distdir).tar.bz2 $(am__remove_distdir) +dist-lzma: distdir + tardir=$(distdir) && $(am__tar) | lzma -9 -c >$(distdir).tar.lzma + $(am__remove_distdir) + +dist-xz: distdir + tardir=$(distdir) && $(am__tar) | xz -c >$(distdir).tar.xz + $(am__remove_distdir) + dist-tarZ: distdir tardir=$(distdir) && $(am__tar) | compress -c >$(distdir).tar.Z $(am__remove_distdir) @@ -1346,6 +1471,10 @@ GZIP=$(GZIP_ENV) gunzip -c $(distdir).tar.gz | $(am__untar) ;;\ *.tar.bz2*) \ bunzip2 -c $(distdir).tar.bz2 | $(am__untar) ;;\ + *.tar.lzma*) \ + unlzma -c $(distdir).tar.lzma | $(am__untar) ;;\ + *.tar.xz*) \ + xz -dc $(distdir).tar.xz | $(am__untar) ;;\ *.tar.Z*) \ uncompress -c $(distdir).tar.Z | $(am__untar) ;;\ *.shar.gz*) \ @@ -1357,9 +1486,11 @@ mkdir $(distdir)/_build mkdir $(distdir)/_inst chmod a-w $(distdir) + test -d $(distdir)/_build || exit 0; \ dc_install_base=`$(am__cd) $(distdir)/_inst && pwd | sed -e 's,^[^:\\/]:[\\/],/,'` \ && dc_destdir="$${TMPDIR-/tmp}/am-dc-$$$$/" \ - && cd $(distdir)/_build \ + && am__cwd=`pwd` \ + && $(am__cd) $(distdir)/_build \ && ../configure --srcdir=.. --prefix="$$dc_install_base" \ $(DISTCHECK_CONFIGURE_FLAGS) \ && $(MAKE) $(AM_MAKEFLAGS) \ @@ -1381,13 +1512,15 @@ && rm -rf "$$dc_destdir" \ && $(MAKE) $(AM_MAKEFLAGS) dist \ && rm -rf $(DIST_ARCHIVES) \ - && $(MAKE) $(AM_MAKEFLAGS) distcleancheck + && $(MAKE) $(AM_MAKEFLAGS) distcleancheck \ + && cd "$$am__cwd" \ + || exit 1 $(am__remove_distdir) @(echo "$(distdir) archives ready for distribution: "; \ list='$(DIST_ARCHIVES)'; for i in $$list; do echo $$i; done) | \ sed -e 1h -e 1s/./=/g -e 1p -e 1x -e '$$p' -e '$$x' distuninstallcheck: - @cd $(distuninstallcheck_dir) \ + @$(am__cd) '$(distuninstallcheck_dir)' \ && test `$(distuninstallcheck_listfiles) | wc -l` -le 1 \ || { echo "ERROR: files left after uninstall:" ; \ if test -n "$(DESTDIR)"; then \ @@ -1432,6 +1565,7 @@ distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) -rm -f doc/$(am__dirstamp) -rm -f src/$(DEPDIR)/$(am__dirstamp) -rm -f src/$(am__dirstamp) @@ -1439,6 +1573,8 @@ -rm -f src/alpha/$(am__dirstamp) -rm -f src/arm/$(DEPDIR)/$(am__dirstamp) -rm -f src/arm/$(am__dirstamp) + -rm -f src/avr32/$(DEPDIR)/$(am__dirstamp) + -rm -f src/avr32/$(am__dirstamp) -rm -f src/cris/$(DEPDIR)/$(am__dirstamp) -rm -f src/cris/$(am__dirstamp) -rm -f src/frv/$(DEPDIR)/$(am__dirstamp) @@ -1471,12 +1607,12 @@ @echo "it deletes files that may require special tools to rebuild." clean: clean-recursive -clean-am: clean-generic clean-libLTLIBRARIES clean-libtool \ - clean-noinstLTLIBRARIES mostlyclean-am +clean-am: clean-aminfo clean-generic clean-libLTLIBRARIES \ + clean-libtool clean-noinstLTLIBRARIES mostlyclean-am distclean: distclean-recursive -rm -f $(am__CONFIG_DISTCLEAN_FILES) - -rm -rf src/$(DEPDIR) src/alpha/$(DEPDIR) src/arm/$(DEPDIR) src/cris/$(DEPDIR) src/frv/$(DEPDIR) src/ia64/$(DEPDIR) src/m32r/$(DEPDIR) src/m68k/$(DEPDIR) src/mips/$(DEPDIR) src/pa/$(DEPDIR) src/powerpc/$(DEPDIR) src/s390/$(DEPDIR) src/sh/$(DEPDIR) src/sh64/$(DEPDIR) src/sparc/$(DEPDIR) src/x86/$(DEPDIR) + -rm -rf src/$(DEPDIR) src/alpha/$(DEPDIR) src/arm/$(DEPDIR) src/avr32/$(DEPDIR) src/cris/$(DEPDIR) src/frv/$(DEPDIR) src/ia64/$(DEPDIR) src/m32r/$(DEPDIR) src/m68k/$(DEPDIR) src/mips/$(DEPDIR) src/pa/$(DEPDIR) src/powerpc/$(DEPDIR) src/s390/$(DEPDIR) src/sh/$(DEPDIR) src/sh64/$(DEPDIR) src/sparc/$(DEPDIR) src/x86/$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-hdr distclean-libtool distclean-tags @@ -1500,37 +1636,45 @@ install-dvi-am: $(DVIS) @$(NORMAL_INSTALL) test -z "$(dvidir)" || $(MKDIR_P) "$(DESTDIR)$(dvidir)" - @list='$(DVIS)'; for p in $$list; do \ + @list='$(DVIS)'; test -n "$(dvidir)" || list=; \ + for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ - f=$(am__strip_dir) \ - echo " $(INSTALL_DATA) '$$d$$p' '$(DESTDIR)$(dvidir)/$$f'"; \ - $(INSTALL_DATA) "$$d$$p" "$(DESTDIR)$(dvidir)/$$f"; \ + echo "$$d$$p"; \ + done | $(am__base_list) | \ + while read files; do \ + echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(dvidir)'"; \ + $(INSTALL_DATA) $$files "$(DESTDIR)$(dvidir)" || exit $$?; \ done install-exec-am: install-libLTLIBRARIES install-html-am: $(HTMLS) @$(NORMAL_INSTALL) test -z "$(htmldir)" || $(MKDIR_P) "$(DESTDIR)$(htmldir)" - @list='$(HTMLS)'; for p in $$list; do \ + @list='$(HTMLS)'; list2=; test -n "$(htmldir)" || list=; \ + for p in $$list; do \ if test -f "$$p" || test -d "$$p"; then d=; else d="$(srcdir)/"; fi; \ - f=$(am__strip_dir) \ + $(am__strip_dir) \ if test -d "$$d$$p"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(htmldir)/$$f'"; \ $(MKDIR_P) "$(DESTDIR)$(htmldir)/$$f" || exit 1; \ echo " $(INSTALL_DATA) '$$d$$p'/* '$(DESTDIR)$(htmldir)/$$f'"; \ - $(INSTALL_DATA) "$$d$$p"/* "$(DESTDIR)$(htmldir)/$$f"; \ + $(INSTALL_DATA) "$$d$$p"/* "$(DESTDIR)$(htmldir)/$$f" || exit $$?; \ else \ - echo " $(INSTALL_DATA) '$$d$$p' '$(DESTDIR)$(htmldir)/$$f'"; \ - $(INSTALL_DATA) "$$d$$p" "$(DESTDIR)$(htmldir)/$$f"; \ + list2="$$list2 $$d$$p"; \ fi; \ - done + done; \ + test -z "$$list2" || { echo "$$list2" | $(am__base_list) | \ + while read files; do \ + echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(htmldir)'"; \ + $(INSTALL_DATA) $$files "$(DESTDIR)$(htmldir)" || exit $$?; \ + done; } install-info: install-info-recursive install-info-am: $(INFO_DEPS) @$(NORMAL_INSTALL) test -z "$(infodir)" || $(MKDIR_P) "$(DESTDIR)$(infodir)" @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \ - list='$(INFO_DEPS)'; \ + list='$(INFO_DEPS)'; test -n "$(infodir)" || list=; \ for file in $$list; do \ case $$file in \ $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \ @@ -1538,18 +1682,19 @@ if test -f $$file; then d=.; else d=$(srcdir); fi; \ file_i=`echo "$$file" | sed 's|\.info$$||;s|$$|.i|'`; \ for ifile in $$d/$$file $$d/$$file-[0-9] $$d/$$file-[0-9][0-9] \ - $$d/$$file_i[0-9] $$d/$$file_i[0-9][0-9] ; do \ + $$d/$$file_i[0-9] $$d/$$file_i[0-9][0-9] ; do \ if test -f $$ifile; then \ - relfile=`echo "$$ifile" | sed 's|^.*/||'`; \ - echo " $(INSTALL_DATA) '$$ifile' '$(DESTDIR)$(infodir)/$$relfile'"; \ - $(INSTALL_DATA) "$$ifile" "$(DESTDIR)$(infodir)/$$relfile"; \ + echo "$$ifile"; \ else : ; fi; \ done; \ - done + done | $(am__base_list) | \ + while read files; do \ + echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(infodir)'"; \ + $(INSTALL_DATA) $$files "$(DESTDIR)$(infodir)" || exit $$?; done @$(POST_INSTALL) @if (install-info --version && \ install-info --version 2>&1 | sed 1q | grep -i -v debian) >/dev/null 2>&1; then \ - list='$(INFO_DEPS)'; \ + list='$(INFO_DEPS)'; test -n "$(infodir)" || list=; \ for file in $$list; do \ relfile=`echo "$$file" | sed 's|^.*/||'`; \ echo " install-info --info-dir='$(DESTDIR)$(infodir)' '$(DESTDIR)$(infodir)/$$relfile'";\ @@ -1561,29 +1706,33 @@ install-pdf-am: $(PDFS) @$(NORMAL_INSTALL) test -z "$(pdfdir)" || $(MKDIR_P) "$(DESTDIR)$(pdfdir)" - @list='$(PDFS)'; for p in $$list; do \ + @list='$(PDFS)'; test -n "$(pdfdir)" || list=; \ + for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ - f=$(am__strip_dir) \ - echo " $(INSTALL_DATA) '$$d$$p' '$(DESTDIR)$(pdfdir)/$$f'"; \ - $(INSTALL_DATA) "$$d$$p" "$(DESTDIR)$(pdfdir)/$$f"; \ - done + echo "$$d$$p"; \ + done | $(am__base_list) | \ + while read files; do \ + echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(pdfdir)'"; \ + $(INSTALL_DATA) $$files "$(DESTDIR)$(pdfdir)" || exit $$?; done install-ps: install-ps-recursive install-ps-am: $(PSS) @$(NORMAL_INSTALL) test -z "$(psdir)" || $(MKDIR_P) "$(DESTDIR)$(psdir)" - @list='$(PSS)'; for p in $$list; do \ + @list='$(PSS)'; test -n "$(psdir)" || list=; \ + for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ - f=$(am__strip_dir) \ - echo " $(INSTALL_DATA) '$$d$$p' '$(DESTDIR)$(psdir)/$$f'"; \ - $(INSTALL_DATA) "$$d$$p" "$(DESTDIR)$(psdir)/$$f"; \ - done + echo "$$d$$p"; \ + done | $(am__base_list) | \ + while read files; do \ + echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(psdir)'"; \ + $(INSTALL_DATA) $$files "$(DESTDIR)$(psdir)" || exit $$?; done installcheck-am: maintainer-clean: maintainer-clean-recursive -rm -f $(am__CONFIG_DISTCLEAN_FILES) -rm -rf $(top_srcdir)/autom4te.cache - -rm -rf src/$(DEPDIR) src/alpha/$(DEPDIR) src/arm/$(DEPDIR) src/cris/$(DEPDIR) src/frv/$(DEPDIR) src/ia64/$(DEPDIR) src/m32r/$(DEPDIR) src/m68k/$(DEPDIR) src/mips/$(DEPDIR) src/pa/$(DEPDIR) src/powerpc/$(DEPDIR) src/s390/$(DEPDIR) src/sh/$(DEPDIR) src/sh64/$(DEPDIR) src/sparc/$(DEPDIR) src/x86/$(DEPDIR) + -rm -rf src/$(DEPDIR) src/alpha/$(DEPDIR) src/arm/$(DEPDIR) src/avr32/$(DEPDIR) src/cris/$(DEPDIR) src/frv/$(DEPDIR) src/ia64/$(DEPDIR) src/m32r/$(DEPDIR) src/m68k/$(DEPDIR) src/mips/$(DEPDIR) src/pa/$(DEPDIR) src/powerpc/$(DEPDIR) src/s390/$(DEPDIR) src/sh/$(DEPDIR) src/sh64/$(DEPDIR) src/sparc/$(DEPDIR) src/x86/$(DEPDIR) -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-aminfo \ maintainer-clean-generic maintainer-clean-vti @@ -1605,36 +1754,38 @@ uninstall-libLTLIBRARIES uninstall-pdf-am \ uninstall-pkgconfigDATA uninstall-ps-am -.MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) install-am \ - install-strip +.MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) all \ + ctags-recursive install-am install-strip tags-recursive .PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \ - all all-am am--refresh check check-am clean clean-generic \ - clean-libLTLIBRARIES clean-libtool clean-noinstLTLIBRARIES \ - ctags ctags-recursive dist dist-all dist-bzip2 dist-gzip \ - dist-info dist-shar dist-tarZ dist-zip distcheck distclean \ - distclean-compile distclean-generic distclean-hdr \ - distclean-libtool distclean-tags distcleancheck distdir \ - distuninstallcheck dvi dvi-am html html-am info info-am \ - install install-am install-data install-data-am install-dvi \ - install-dvi-am install-exec install-exec-am install-html \ - install-html-am install-info install-info-am \ - install-libLTLIBRARIES install-man install-pdf install-pdf-am \ - install-pkgconfigDATA install-ps install-ps-am install-strip \ - installcheck installcheck-am installdirs installdirs-am \ - maintainer-clean maintainer-clean-aminfo \ - maintainer-clean-generic maintainer-clean-vti mostlyclean \ - mostlyclean-aminfo mostlyclean-compile mostlyclean-generic \ - mostlyclean-libtool mostlyclean-vti pdf pdf-am ps ps-am tags \ - tags-recursive uninstall uninstall-am uninstall-dvi-am \ - uninstall-html-am uninstall-info-am uninstall-libLTLIBRARIES \ - uninstall-pdf-am uninstall-pkgconfigDATA uninstall-ps-am + all all-am am--refresh check check-am clean clean-aminfo \ + clean-generic clean-libLTLIBRARIES clean-libtool \ + clean-noinstLTLIBRARIES ctags ctags-recursive dist dist-all \ + dist-bzip2 dist-gzip dist-info dist-lzma dist-shar dist-tarZ \ + dist-xz dist-zip distcheck distclean distclean-compile \ + distclean-generic distclean-hdr distclean-libtool \ + distclean-tags distcleancheck distdir distuninstallcheck dvi \ + dvi-am html html-am info info-am install install-am \ + install-data install-data-am install-dvi install-dvi-am \ + install-exec install-exec-am install-html install-html-am \ + install-info install-info-am install-libLTLIBRARIES \ + install-man install-pdf install-pdf-am install-pkgconfigDATA \ + install-ps install-ps-am install-strip installcheck \ + installcheck-am installdirs installdirs-am maintainer-clean \ + maintainer-clean-aminfo maintainer-clean-generic \ + maintainer-clean-vti mostlyclean mostlyclean-aminfo \ + mostlyclean-compile mostlyclean-generic mostlyclean-libtool \ + mostlyclean-vti pdf pdf-am ps ps-am tags tags-recursive \ + uninstall uninstall-am uninstall-dvi-am uninstall-html-am \ + uninstall-info-am uninstall-libLTLIBRARIES uninstall-pdf-am \ + uninstall-pkgconfigDATA uninstall-ps-am # No install-html or install-pdf support in automake yet .PHONY: install-html install-pdf install-html: install-pdf: + # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: Modified: python/branches/py3k-jit/Modules/_ctypes/libffi/README ============================================================================== --- python/branches/py3k-jit/Modules/_ctypes/libffi/README (original) +++ python/branches/py3k-jit/Modules/_ctypes/libffi/README Tue Mar 16 21:40:29 2010 @@ -1,7 +1,7 @@ Status ====== -libffi-3.0.5 was released on April 3, 2008. Check the libffi web +libffi-3.0.9 was released on December 31, 2009. Check the libffi web page for updates: . @@ -9,27 +9,27 @@ =============== Compilers for high level languages generate code that follow certain -conventions. These conventions are necessary, in part, for separate -compilation to work. One such convention is the "calling convention". -The "calling convention" is a set of assumptions made by the compiler -about where function arguments will be found on entry to a function. -A "calling convention" also specifies where the return value for a -function is found. +conventions. These conventions are necessary, in part, for separate +compilation to work. One such convention is the "calling +convention". The "calling convention" is essentially a set of +assumptions made by the compiler about where function arguments will +be found on entry to a function. A "calling convention" also specifies +where the return value for a function is found. Some programs may not know at the time of compilation what arguments -are to be passed to a function. For instance, an interpreter may be +are to be passed to a function. For instance, an interpreter may be told at run-time about the number and types of arguments used to call -a given function. Libffi can be used in such programs to provide a +a given function. Libffi can be used in such programs to provide a bridge from the interpreter program to compiled code. The libffi library provides a portable, high level programming -interface to various calling conventions. This allows a programmer to +interface to various calling conventions. This allows a programmer to call any function specified by a call interface description at run -time. +time. FFI stands for Foreign Function Interface. A foreign function interface is the popular name for the interface that allows code -written in one language to call code written in another language. The +written in one language to call code written in another language. The libffi library really only provides the lowest, machine dependent layer of a fully featured foreign function interface. A layer must exist above libffi that handles type conversions for values passed @@ -39,36 +39,56 @@ Supported Platforms =================== -Libffi has been ported to many different platforms, although this -release was only tested on: +Libffi has been ported to many different platforms. +For specific configuration details and testing status, please +refer to the wiki page here: + + http://www.moxielogic.org/wiki/index.php?title=Libffi_3.0.9 + +At the time of release, the following basic configurations have been +tested: + +|--------------+------------------| +| Architecture | Operating System | +|--------------+------------------| +| Alpha | Linux | +| ARM | Linux | +| AVR32 | Linux | +| HPPA | HPUX | +| IA-64 | Linux | +| MIPS | IRIX | +| MIPS | Linux | +| MIPS64 | Linux | +| PowerPC | Linux | +| PowerPC | Mac OSX | +| PowerPC | FreeBSD | +| PowerPC64 | Linux | +| S390 | Linux | +| S390X | Linux | +| SPARC | Linux | +| SPARC | Solaris | +| SPARC64 | Linux | +| SPARC64 | FreeBSD | +| X86 | FreeBSD | +| X86 | kFreeBSD | +| X86 | Linux | +| X86 | Mac OSX | +| X86 | OpenBSD | +| X86 | Solaris | +| X86 | Windows/Cygwin | +| X86 | Windows/MingW | +| X86-64 | FreeBSD | +| X86-64 | Linux | +| X86-64 | OpenBSD | +|--------------+------------------| - arm oabi linux - arm eabi linux - hppa linux - mips o32 linux (little endian) - powerpc darwin - powerpc64 linux - sparc solaris - sparc64 solaris - x86 cygwin - x86 darwin - x86 freebsd - x86 linux - x86 openbsd - x86-64 darwin - x86-64 linux - x86-64 OS X - x86-64 freebsd - Please send additional platform test results to -libffi-discuss at sourceware.org. +libffi-discuss at sourceware.org and feel free to update the wiki page +above. Installing libffi ================= -[Note: before actually performing any of these installation steps, - you may wish to read the "Platform Specific Notes" below.] - First you must configure the distribution for your particular system. Go to the directory you wish to build libffi in and run the "configure" program found in the root directory of the libffi source @@ -98,66 +118,29 @@ To install the library and header files, type "make install". -Platform Specific Notes -======================= - - MIPS - Irix 5.3 & 6.x - --------------------- - -Irix 6.2 and better supports three different calling conventions: o32, -n32 and n64. Currently, libffi only supports both o32 and n32 under -Irix 6.x, but only o32 under Irix 5.3. Libffi will automatically be -configured for whichever calling convention it was built for. - -By default, the configure script will try to build libffi with the GNU -development tools. To build libffi with the SGI development tools, set -the environment variable CC to either "cc -32" or "cc -n32" before -running configure under Irix 6.x (depending on whether you want an o32 -or n32 library), or just "cc" for Irix 5.3. - -With the n32 calling convention, when returning structures smaller -than 16 bytes, be sure to provide an RVALUE that is 8 byte aligned. -Here's one way of forcing this: - - double struct_storage[2]; - my_small_struct *s = (my_small_struct *) struct_storage; - /* Use s for RVALUE */ - -If you don't do this you are liable to get spurious bus errors. - -"long long" values are not supported yet. - -You must use GNU Make to build libffi on SGI platforms. - - - PowerPC System V ABI - -------------------- - -There are two `System V ABI's which libffi implements for PowerPC. -They differ only in how small structures are returned from functions. - -In the FFI_SYSV version, structures that are 8 bytes or smaller are -returned in registers. This is what GCC does when it is configured -for solaris, and is what the System V ABI I have (dated September -1995) says. - -In the FFI_GCC_SYSV version, all structures are returned the same way: -by passing a pointer as the first argument to the function. This is -what GCC does when it is configured for linux or a generic sysv -target. - -EGCS 1.0.1 (and probably other versions of EGCS/GCC) also has a -inconsistency with the SysV ABI: When a procedure is called with many -floating-point arguments, some of them get put on the stack. They are -all supposed to be stored in double-precision format, even if they are -only single-precision, but EGCS stores single-precision arguments as -single-precision anyway. This causes one test to fail (the `many -arguments' test). - - History ======= +See the ChangeLog files for details. + +3.0.9 Dec-31-09 + Add AVR32 and win64 ports. Add ARM softfp support. + Many fixes for AIX, Solaris, HP-UX, *BSD. + Several PowerPC and x86-64 bug fixes. + Build DLL for windows. + +3.0.8 Dec-19-08 + Add *BSD, BeOS, and PA-Linux support. + +3.0.7 Nov-11-08 + Fix for ppc FreeBSD. + (thanks to Andreas Tobler) + +3.0.6 Jul-17-08 + Fix for closures on sh. + Mark the sh/sh64 stack as non-executable. + (both thanks to Kaz Kojima) + 3.0.5 Apr-3-08 Fix libffi.pc file. Fix #define ARM for IcedTea users. Modified: python/branches/py3k-jit/Modules/_ctypes/libffi/aclocal.m4 ============================================================================== --- python/branches/py3k-jit/Modules/_ctypes/libffi/aclocal.m4 (original) +++ python/branches/py3k-jit/Modules/_ctypes/libffi/aclocal.m4 Tue Mar 16 21:40:29 2010 @@ -1,7 +1,7 @@ -# generated automatically by aclocal 1.10 -*- Autoconf -*- +# generated automatically by aclocal 1.11.1 -*- Autoconf -*- # Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, -# 2005, 2006 Free Software Foundation, Inc. +# 2005, 2006, 2007, 2008, 2009 Free Software Foundation, Inc. # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. @@ -11,6580 +11,15 @@ # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. -m4_if(m4_PACKAGE_VERSION, [2.61],, -[m4_fatal([this file was generated for autoconf 2.61. -You have another version of autoconf. If you want to use that, -you should regenerate the build system entirely.], [63])]) +m4_ifndef([AC_AUTOCONF_VERSION], + [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl +m4_if(m4_defn([AC_AUTOCONF_VERSION]), [2.65],, +[m4_warning([this file was generated for autoconf 2.65. +You have another version of autoconf. It may work, but is not guaranteed to. +If you have problems, you may need to regenerate the build system entirely. +To do so, use the procedure documented by the package, typically `autoreconf'.])]) -# libtool.m4 - Configure libtool for the host system. -*-Autoconf-*- - -# serial 51 AC_PROG_LIBTOOL - - -# AC_PROVIDE_IFELSE(MACRO-NAME, IF-PROVIDED, IF-NOT-PROVIDED) -# ----------------------------------------------------------- -# If this macro is not defined by Autoconf, define it here. -m4_ifdef([AC_PROVIDE_IFELSE], - [], - [m4_define([AC_PROVIDE_IFELSE], - [m4_ifdef([AC_PROVIDE_$1], - [$2], [$3])])]) - - -# AC_PROG_LIBTOOL -# --------------- -AC_DEFUN([AC_PROG_LIBTOOL], -[AC_REQUIRE([_AC_PROG_LIBTOOL])dnl -dnl If AC_PROG_CXX has already been expanded, run AC_LIBTOOL_CXX -dnl immediately, otherwise, hook it in at the end of AC_PROG_CXX. - AC_PROVIDE_IFELSE([AC_PROG_CXX], - [AC_LIBTOOL_CXX], - [define([AC_PROG_CXX], defn([AC_PROG_CXX])[AC_LIBTOOL_CXX - ])]) -dnl And a similar setup for Fortran 77 support - AC_PROVIDE_IFELSE([AC_PROG_F77], - [AC_LIBTOOL_F77], - [define([AC_PROG_F77], defn([AC_PROG_F77])[AC_LIBTOOL_F77 -])]) - -dnl Quote A][M_PROG_GCJ so that aclocal doesn't bring it in needlessly. -dnl If either AC_PROG_GCJ or A][M_PROG_GCJ have already been expanded, run -dnl AC_LIBTOOL_GCJ immediately, otherwise, hook it in at the end of both. - AC_PROVIDE_IFELSE([AC_PROG_GCJ], - [AC_LIBTOOL_GCJ], - [AC_PROVIDE_IFELSE([A][M_PROG_GCJ], - [AC_LIBTOOL_GCJ], - [AC_PROVIDE_IFELSE([LT_AC_PROG_GCJ], - [AC_LIBTOOL_GCJ], - [ifdef([AC_PROG_GCJ], - [define([AC_PROG_GCJ], defn([AC_PROG_GCJ])[AC_LIBTOOL_GCJ])]) - ifdef([A][M_PROG_GCJ], - [define([A][M_PROG_GCJ], defn([A][M_PROG_GCJ])[AC_LIBTOOL_GCJ])]) - ifdef([LT_AC_PROG_GCJ], - [define([LT_AC_PROG_GCJ], - defn([LT_AC_PROG_GCJ])[AC_LIBTOOL_GCJ])])])]) -])])# AC_PROG_LIBTOOL - - -# _AC_PROG_LIBTOOL -# ---------------- -AC_DEFUN([_AC_PROG_LIBTOOL], -[AC_REQUIRE([AC_LIBTOOL_SETUP])dnl -AC_BEFORE([$0],[AC_LIBTOOL_CXX])dnl -AC_BEFORE([$0],[AC_LIBTOOL_F77])dnl -AC_BEFORE([$0],[AC_LIBTOOL_GCJ])dnl - -# This can be used to rebuild libtool when needed -LIBTOOL_DEPS="$ac_aux_dir/ltmain.sh" - -# Always use our own libtool. -LIBTOOL='$(SHELL) $(top_builddir)/libtool' -AC_SUBST(LIBTOOL)dnl - -# Prevent multiple expansion -define([AC_PROG_LIBTOOL], []) -])# _AC_PROG_LIBTOOL - - -# AC_LIBTOOL_SETUP -# ---------------- -AC_DEFUN([AC_LIBTOOL_SETUP], -[AC_PREREQ(2.50)dnl -AC_REQUIRE([AC_ENABLE_SHARED])dnl -AC_REQUIRE([AC_ENABLE_STATIC])dnl -AC_REQUIRE([AC_ENABLE_FAST_INSTALL])dnl -AC_REQUIRE([AC_CANONICAL_HOST])dnl -AC_REQUIRE([AC_CANONICAL_BUILD])dnl -AC_REQUIRE([AC_PROG_CC])dnl -AC_REQUIRE([AC_PROG_LD])dnl -AC_REQUIRE([AC_PROG_LD_RELOAD_FLAG])dnl -AC_REQUIRE([AC_PROG_NM])dnl - -AC_REQUIRE([AC_PROG_LN_S])dnl -AC_REQUIRE([AC_DEPLIBS_CHECK_METHOD])dnl -# Autoconf 2.13's AC_OBJEXT and AC_EXEEXT macros only works for C compilers! -AC_REQUIRE([AC_OBJEXT])dnl -AC_REQUIRE([AC_EXEEXT])dnl -dnl - -AC_LIBTOOL_SYS_MAX_CMD_LEN -AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE -AC_LIBTOOL_OBJDIR - -AC_REQUIRE([_LT_AC_SYS_COMPILER])dnl -_LT_AC_PROG_ECHO_BACKSLASH - -case $host_os in -aix3*) - # AIX sometimes has problems with the GCC collect2 program. For some - # reason, if we set the COLLECT_NAMES environment variable, the problems - # vanish in a puff of smoke. - if test "X${COLLECT_NAMES+set}" != Xset; then - COLLECT_NAMES= - export COLLECT_NAMES - fi - ;; -esac - -# Sed substitution that helps us do robust quoting. It backslashifies -# metacharacters that are still active within double-quoted strings. -Xsed='sed -e 1s/^X//' -[sed_quote_subst='s/\([\\"\\`$\\\\]\)/\\\1/g'] - -# Same as above, but do not quote variable references. -[double_quote_subst='s/\([\\"\\`\\\\]\)/\\\1/g'] - -# Sed substitution to delay expansion of an escaped shell variable in a -# double_quote_subst'ed string. -delay_variable_subst='s/\\\\\\\\\\\$/\\\\\\$/g' - -# Sed substitution to avoid accidental globbing in evaled expressions -no_glob_subst='s/\*/\\\*/g' - -# Constants: -rm="rm -f" - -# Global variables: -default_ofile=libtool -can_build_shared=yes - -# All known linkers require a `.a' archive for static linking (except MSVC, -# which needs '.lib'). -libext=a -ltmain="$ac_aux_dir/ltmain.sh" -ofile="$default_ofile" -with_gnu_ld="$lt_cv_prog_gnu_ld" - -AC_CHECK_TOOL(AR, ar, false) -AC_CHECK_TOOL(RANLIB, ranlib, :) -AC_CHECK_TOOL(STRIP, strip, :) - -old_CC="$CC" -old_CFLAGS="$CFLAGS" - -# Set sane defaults for various variables -test -z "$AR" && AR=ar -test -z "$AR_FLAGS" && AR_FLAGS=cru -test -z "$AS" && AS=as -test -z "$CC" && CC=cc -test -z "$LTCC" && LTCC=$CC -test -z "$LTCFLAGS" && LTCFLAGS=$CFLAGS -test -z "$DLLTOOL" && DLLTOOL=dlltool -test -z "$LD" && LD=ld -test -z "$LN_S" && LN_S="ln -s" -test -z "$MAGIC_CMD" && MAGIC_CMD=file -test -z "$NM" && NM=nm -test -z "$SED" && SED=sed -test -z "$OBJDUMP" && OBJDUMP=objdump -test -z "$RANLIB" && RANLIB=: -test -z "$STRIP" && STRIP=: -test -z "$ac_objext" && ac_objext=o - -# Determine commands to create old-style static archives. -old_archive_cmds='$AR $AR_FLAGS $oldlib$oldobjs' -old_postinstall_cmds='chmod 644 $oldlib' -old_postuninstall_cmds= - -if test -n "$RANLIB"; then - case $host_os in - openbsd*) - old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB -t \$oldlib" - ;; - *) - old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB \$oldlib" - ;; - esac - old_archive_cmds="$old_archive_cmds~\$RANLIB \$oldlib" -fi - -_LT_CC_BASENAME([$compiler]) - -# Only perform the check for file, if the check method requires it -case $deplibs_check_method in -file_magic*) - if test "$file_magic_cmd" = '$MAGIC_CMD'; then - AC_PATH_MAGIC - fi - ;; -esac - -AC_PROVIDE_IFELSE([AC_LIBTOOL_DLOPEN], enable_dlopen=yes, enable_dlopen=no) -AC_PROVIDE_IFELSE([AC_LIBTOOL_WIN32_DLL], -enable_win32_dll=yes, enable_win32_dll=no) - -AC_ARG_ENABLE([libtool-lock], - [AC_HELP_STRING([--disable-libtool-lock], - [avoid locking (might break parallel builds)])]) -test "x$enable_libtool_lock" != xno && enable_libtool_lock=yes - -AC_ARG_WITH([pic], - [AC_HELP_STRING([--with-pic], - [try to use only PIC/non-PIC objects @<:@default=use both@:>@])], - [pic_mode="$withval"], - [pic_mode=default]) -test -z "$pic_mode" && pic_mode=default - -# Use C for the default configuration in the libtool script -tagname= -AC_LIBTOOL_LANG_C_CONFIG -_LT_AC_TAGCONFIG -])# AC_LIBTOOL_SETUP - - -# _LT_AC_SYS_COMPILER -# ------------------- -AC_DEFUN([_LT_AC_SYS_COMPILER], -[AC_REQUIRE([AC_PROG_CC])dnl - -# If no C compiler was specified, use CC. -LTCC=${LTCC-"$CC"} - -# If no C compiler flags were specified, use CFLAGS. -LTCFLAGS=${LTCFLAGS-"$CFLAGS"} - -# Allow CC to be a program name with arguments. -compiler=$CC -])# _LT_AC_SYS_COMPILER - - -# _LT_CC_BASENAME(CC) -# ------------------- -# Calculate cc_basename. Skip known compiler wrappers and cross-prefix. -AC_DEFUN([_LT_CC_BASENAME], -[for cc_temp in $1""; do - case $cc_temp in - compile | *[[\\/]]compile | ccache | *[[\\/]]ccache ) ;; - distcc | *[[\\/]]distcc | purify | *[[\\/]]purify ) ;; - \-*) ;; - *) break;; - esac -done -cc_basename=`$echo "X$cc_temp" | $Xsed -e 's%.*/%%' -e "s%^$host_alias-%%"` -]) - - -# _LT_COMPILER_BOILERPLATE -# ------------------------ -# Check for compiler boilerplate output or warnings with -# the simple compiler test code. -AC_DEFUN([_LT_COMPILER_BOILERPLATE], -[AC_REQUIRE([LT_AC_PROG_SED])dnl -ac_outfile=conftest.$ac_objext -echo "$lt_simple_compile_test_code" >conftest.$ac_ext -eval "$ac_compile" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err -_lt_compiler_boilerplate=`cat conftest.err` -$rm conftest* -])# _LT_COMPILER_BOILERPLATE - - -# _LT_LINKER_BOILERPLATE -# ---------------------- -# Check for linker boilerplate output or warnings with -# the simple link test code. -AC_DEFUN([_LT_LINKER_BOILERPLATE], -[AC_REQUIRE([LT_AC_PROG_SED])dnl -ac_outfile=conftest.$ac_objext -echo "$lt_simple_link_test_code" >conftest.$ac_ext -eval "$ac_link" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err -_lt_linker_boilerplate=`cat conftest.err` -$rm conftest* -])# _LT_LINKER_BOILERPLATE - - -# _LT_AC_SYS_LIBPATH_AIX -# ---------------------- -# Links a minimal program and checks the executable -# for the system default hardcoded library path. In most cases, -# this is /usr/lib:/lib, but when the MPI compilers are used -# the location of the communication and MPI libs are included too. -# If we don't find anything, use the default library path according -# to the aix ld manual. -AC_DEFUN([_LT_AC_SYS_LIBPATH_AIX], -[AC_REQUIRE([LT_AC_PROG_SED])dnl -AC_LINK_IFELSE(AC_LANG_PROGRAM,[ -lt_aix_libpath_sed=' - /Import File Strings/,/^$/ { - /^0/ { - s/^0 *\(.*\)$/\1/ - p - } - }' -aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` -# Check for a 64-bit object if we didn't find anything. -if test -z "$aix_libpath"; then - aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` -fi],[]) -if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi -])# _LT_AC_SYS_LIBPATH_AIX - - -# _LT_AC_SHELL_INIT(ARG) -# ---------------------- -AC_DEFUN([_LT_AC_SHELL_INIT], -[ifdef([AC_DIVERSION_NOTICE], - [AC_DIVERT_PUSH(AC_DIVERSION_NOTICE)], - [AC_DIVERT_PUSH(NOTICE)]) -$1 -AC_DIVERT_POP -])# _LT_AC_SHELL_INIT - - -# _LT_AC_PROG_ECHO_BACKSLASH -# -------------------------- -# Add some code to the start of the generated configure script which -# will find an echo command which doesn't interpret backslashes. -AC_DEFUN([_LT_AC_PROG_ECHO_BACKSLASH], -[_LT_AC_SHELL_INIT([ -# Check that we are running under the correct shell. -SHELL=${CONFIG_SHELL-/bin/sh} - -case X$ECHO in -X*--fallback-echo) - # Remove one level of quotation (which was required for Make). - ECHO=`echo "$ECHO" | sed 's,\\\\\[$]\\[$]0,'[$]0','` - ;; -esac - -echo=${ECHO-echo} -if test "X[$]1" = X--no-reexec; then - # Discard the --no-reexec flag, and continue. - shift -elif test "X[$]1" = X--fallback-echo; then - # Avoid inline document here, it may be left over - : -elif test "X`($echo '\t') 2>/dev/null`" = 'X\t' ; then - # Yippee, $echo works! - : -else - # Restart under the correct shell. - exec $SHELL "[$]0" --no-reexec ${1+"[$]@"} -fi - -if test "X[$]1" = X--fallback-echo; then - # used as fallback echo - shift - cat </dev/null 2>&1 && unset CDPATH - -if test -z "$ECHO"; then -if test "X${echo_test_string+set}" != Xset; then -# find a string as large as possible, as long as the shell can cope with it - for cmd in 'sed 50q "[$]0"' 'sed 20q "[$]0"' 'sed 10q "[$]0"' 'sed 2q "[$]0"' 'echo test'; do - # expected sizes: less than 2Kb, 1Kb, 512 bytes, 16 bytes, ... - if (echo_test_string=`eval $cmd`) 2>/dev/null && - echo_test_string=`eval $cmd` && - (test "X$echo_test_string" = "X$echo_test_string") 2>/dev/null - then - break - fi - done -fi - -if test "X`($echo '\t') 2>/dev/null`" = 'X\t' && - echo_testing_string=`($echo "$echo_test_string") 2>/dev/null` && - test "X$echo_testing_string" = "X$echo_test_string"; then - : -else - # The Solaris, AIX, and Digital Unix default echo programs unquote - # backslashes. This makes it impossible to quote backslashes using - # echo "$something" | sed 's/\\/\\\\/g' - # - # So, first we look for a working echo in the user's PATH. - - lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR - for dir in $PATH /usr/ucb; do - IFS="$lt_save_ifs" - if (test -f $dir/echo || test -f $dir/echo$ac_exeext) && - test "X`($dir/echo '\t') 2>/dev/null`" = 'X\t' && - echo_testing_string=`($dir/echo "$echo_test_string") 2>/dev/null` && - test "X$echo_testing_string" = "X$echo_test_string"; then - echo="$dir/echo" - break - fi - done - IFS="$lt_save_ifs" - - if test "X$echo" = Xecho; then - # We didn't find a better echo, so look for alternatives. - if test "X`(print -r '\t') 2>/dev/null`" = 'X\t' && - echo_testing_string=`(print -r "$echo_test_string") 2>/dev/null` && - test "X$echo_testing_string" = "X$echo_test_string"; then - # This shell has a builtin print -r that does the trick. - echo='print -r' - elif (test -f /bin/ksh || test -f /bin/ksh$ac_exeext) && - test "X$CONFIG_SHELL" != X/bin/ksh; then - # If we have ksh, try running configure again with it. - ORIGINAL_CONFIG_SHELL=${CONFIG_SHELL-/bin/sh} - export ORIGINAL_CONFIG_SHELL - CONFIG_SHELL=/bin/ksh - export CONFIG_SHELL - exec $CONFIG_SHELL "[$]0" --no-reexec ${1+"[$]@"} - else - # Try using printf. - echo='printf %s\n' - if test "X`($echo '\t') 2>/dev/null`" = 'X\t' && - echo_testing_string=`($echo "$echo_test_string") 2>/dev/null` && - test "X$echo_testing_string" = "X$echo_test_string"; then - # Cool, printf works - : - elif echo_testing_string=`($ORIGINAL_CONFIG_SHELL "[$]0" --fallback-echo '\t') 2>/dev/null` && - test "X$echo_testing_string" = 'X\t' && - echo_testing_string=`($ORIGINAL_CONFIG_SHELL "[$]0" --fallback-echo "$echo_test_string") 2>/dev/null` && - test "X$echo_testing_string" = "X$echo_test_string"; then - CONFIG_SHELL=$ORIGINAL_CONFIG_SHELL - export CONFIG_SHELL - SHELL="$CONFIG_SHELL" - export SHELL - echo="$CONFIG_SHELL [$]0 --fallback-echo" - elif echo_testing_string=`($CONFIG_SHELL "[$]0" --fallback-echo '\t') 2>/dev/null` && - test "X$echo_testing_string" = 'X\t' && - echo_testing_string=`($CONFIG_SHELL "[$]0" --fallback-echo "$echo_test_string") 2>/dev/null` && - test "X$echo_testing_string" = "X$echo_test_string"; then - echo="$CONFIG_SHELL [$]0 --fallback-echo" - else - # maybe with a smaller string... - prev=: - - for cmd in 'echo test' 'sed 2q "[$]0"' 'sed 10q "[$]0"' 'sed 20q "[$]0"' 'sed 50q "[$]0"'; do - if (test "X$echo_test_string" = "X`eval $cmd`") 2>/dev/null - then - break - fi - prev="$cmd" - done - - if test "$prev" != 'sed 50q "[$]0"'; then - echo_test_string=`eval $prev` - export echo_test_string - exec ${ORIGINAL_CONFIG_SHELL-${CONFIG_SHELL-/bin/sh}} "[$]0" ${1+"[$]@"} - else - # Oops. We lost completely, so just stick with echo. - echo=echo - fi - fi - fi - fi -fi -fi - -# Copy echo and quote the copy suitably for passing to libtool from -# the Makefile, instead of quoting the original, which is used later. -ECHO=$echo -if test "X$ECHO" = "X$CONFIG_SHELL [$]0 --fallback-echo"; then - ECHO="$CONFIG_SHELL \\\$\[$]0 --fallback-echo" -fi - -AC_SUBST(ECHO) -])])# _LT_AC_PROG_ECHO_BACKSLASH - - -# _LT_AC_LOCK -# ----------- -AC_DEFUN([_LT_AC_LOCK], -[AC_ARG_ENABLE([libtool-lock], - [AC_HELP_STRING([--disable-libtool-lock], - [avoid locking (might break parallel builds)])]) -test "x$enable_libtool_lock" != xno && enable_libtool_lock=yes - -# Some flags need to be propagated to the compiler or linker for good -# libtool support. -case $host in -ia64-*-hpux*) - # Find out which ABI we are using. - echo 'int i;' > conftest.$ac_ext - if AC_TRY_EVAL(ac_compile); then - case `/usr/bin/file conftest.$ac_objext` in - *ELF-32*) - HPUX_IA64_MODE="32" - ;; - *ELF-64*) - HPUX_IA64_MODE="64" - ;; - esac - fi - rm -rf conftest* - ;; -*-*-irix6*) - # Find out which ABI we are using. - echo '[#]line __oline__ "configure"' > conftest.$ac_ext - if AC_TRY_EVAL(ac_compile); then - if test "$lt_cv_prog_gnu_ld" = yes; then - case `/usr/bin/file conftest.$ac_objext` in - *32-bit*) - LD="${LD-ld} -melf32bsmip" - ;; - *N32*) - LD="${LD-ld} -melf32bmipn32" - ;; - *64-bit*) - LD="${LD-ld} -melf64bmip" - ;; - esac - else - case `/usr/bin/file conftest.$ac_objext` in - *32-bit*) - LD="${LD-ld} -32" - ;; - *N32*) - LD="${LD-ld} -n32" - ;; - *64-bit*) - LD="${LD-ld} -64" - ;; - esac - fi - fi - rm -rf conftest* - ;; - -x86_64-*kfreebsd*-gnu|x86_64-*linux*|ppc*-*linux*|powerpc*-*linux*| \ -s390*-*linux*|sparc*-*linux*) - # Find out which ABI we are using. - echo 'int i;' > conftest.$ac_ext - if AC_TRY_EVAL(ac_compile); then - case `/usr/bin/file conftest.o` in - *32-bit*) - case $host in - x86_64-*kfreebsd*-gnu) - LD="${LD-ld} -m elf_i386_fbsd" - ;; - x86_64-*linux*) - LD="${LD-ld} -m elf_i386" - ;; - ppc64-*linux*|powerpc64-*linux*) - LD="${LD-ld} -m elf32ppclinux" - ;; - s390x-*linux*) - LD="${LD-ld} -m elf_s390" - ;; - sparc64-*linux*) - LD="${LD-ld} -m elf32_sparc" - ;; - esac - ;; - *64-bit*) - libsuff=64 - case $host in - x86_64-*kfreebsd*-gnu) - LD="${LD-ld} -m elf_x86_64_fbsd" - ;; - x86_64-*linux*) - LD="${LD-ld} -m elf_x86_64" - ;; - ppc*-*linux*|powerpc*-*linux*) - LD="${LD-ld} -m elf64ppc" - ;; - s390*-*linux*) - LD="${LD-ld} -m elf64_s390" - ;; - sparc*-*linux*) - LD="${LD-ld} -m elf64_sparc" - ;; - esac - ;; - esac - fi - rm -rf conftest* - ;; - -*-*-sco3.2v5*) - # On SCO OpenServer 5, we need -belf to get full-featured binaries. - SAVE_CFLAGS="$CFLAGS" - CFLAGS="$CFLAGS -belf" - AC_CACHE_CHECK([whether the C compiler needs -belf], lt_cv_cc_needs_belf, - [AC_LANG_PUSH(C) - AC_TRY_LINK([],[],[lt_cv_cc_needs_belf=yes],[lt_cv_cc_needs_belf=no]) - AC_LANG_POP]) - if test x"$lt_cv_cc_needs_belf" != x"yes"; then - # this is probably gcc 2.8.0, egcs 1.0 or newer; no need for -belf - CFLAGS="$SAVE_CFLAGS" - fi - ;; -sparc*-*solaris*) - # Find out which ABI we are using. - echo 'int i;' > conftest.$ac_ext - if AC_TRY_EVAL(ac_compile); then - case `/usr/bin/file conftest.o` in - *64-bit*) - case $lt_cv_prog_gnu_ld in - yes*) LD="${LD-ld} -m elf64_sparc" ;; - *) LD="${LD-ld} -64" ;; - esac - ;; - esac - fi - rm -rf conftest* - ;; - -AC_PROVIDE_IFELSE([AC_LIBTOOL_WIN32_DLL], -[*-*-cygwin* | *-*-mingw* | *-*-pw32*) - AC_CHECK_TOOL(DLLTOOL, dlltool, false) - AC_CHECK_TOOL(AS, as, false) - AC_CHECK_TOOL(OBJDUMP, objdump, false) - ;; - ]) -esac - -need_locks="$enable_libtool_lock" - -])# _LT_AC_LOCK - - -# AC_LIBTOOL_COMPILER_OPTION(MESSAGE, VARIABLE-NAME, FLAGS, -# [OUTPUT-FILE], [ACTION-SUCCESS], [ACTION-FAILURE]) -# ---------------------------------------------------------------- -# Check whether the given compiler option works -AC_DEFUN([AC_LIBTOOL_COMPILER_OPTION], -[AC_REQUIRE([LT_AC_PROG_SED]) -AC_CACHE_CHECK([$1], [$2], - [$2=no - ifelse([$4], , [ac_outfile=conftest.$ac_objext], [ac_outfile=$4]) - echo "$lt_simple_compile_test_code" > conftest.$ac_ext - lt_compiler_flag="$3" - # Insert the option either (1) after the last *FLAGS variable, or - # (2) before a word containing "conftest.", or (3) at the end. - # Note that $ac_compile itself does not contain backslashes and begins - # with a dollar sign (not a hyphen), so the echo should work correctly. - # The option is referenced via a variable to avoid confusing sed. - lt_compile=`echo "$ac_compile" | $SED \ - -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ - -e 's: [[^ ]]*conftest\.: $lt_compiler_flag&:; t' \ - -e 's:$: $lt_compiler_flag:'` - (eval echo "\"\$as_me:__oline__: $lt_compile\"" >&AS_MESSAGE_LOG_FD) - (eval "$lt_compile" 2>conftest.err) - ac_status=$? - cat conftest.err >&AS_MESSAGE_LOG_FD - echo "$as_me:__oline__: \$? = $ac_status" >&AS_MESSAGE_LOG_FD - if (exit $ac_status) && test -s "$ac_outfile"; then - # The compiler can only warn and ignore the option if not recognized - # So say no if there are warnings other than the usual output. - $echo "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' >conftest.exp - $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 - if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then - $2=yes - fi - fi - $rm conftest* -]) - -if test x"[$]$2" = xyes; then - ifelse([$5], , :, [$5]) -else - ifelse([$6], , :, [$6]) -fi -])# AC_LIBTOOL_COMPILER_OPTION - - -# AC_LIBTOOL_LINKER_OPTION(MESSAGE, VARIABLE-NAME, FLAGS, -# [ACTION-SUCCESS], [ACTION-FAILURE]) -# ------------------------------------------------------------ -# Check whether the given compiler option works -AC_DEFUN([AC_LIBTOOL_LINKER_OPTION], -[AC_REQUIRE([LT_AC_PROG_SED])dnl -AC_CACHE_CHECK([$1], [$2], - [$2=no - save_LDFLAGS="$LDFLAGS" - LDFLAGS="$LDFLAGS $3" - echo "$lt_simple_link_test_code" > conftest.$ac_ext - if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then - # The linker can only warn and ignore the option if not recognized - # So say no if there are warnings - if test -s conftest.err; then - # Append any errors to the config.log. - cat conftest.err 1>&AS_MESSAGE_LOG_FD - $echo "X$_lt_linker_boilerplate" | $Xsed -e '/^$/d' > conftest.exp - $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 - if diff conftest.exp conftest.er2 >/dev/null; then - $2=yes - fi - else - $2=yes - fi - fi - $rm conftest* - LDFLAGS="$save_LDFLAGS" -]) - -if test x"[$]$2" = xyes; then - ifelse([$4], , :, [$4]) -else - ifelse([$5], , :, [$5]) -fi -])# AC_LIBTOOL_LINKER_OPTION - - -# AC_LIBTOOL_SYS_MAX_CMD_LEN -# -------------------------- -AC_DEFUN([AC_LIBTOOL_SYS_MAX_CMD_LEN], -[# find the maximum length of command line arguments -AC_MSG_CHECKING([the maximum length of command line arguments]) -AC_CACHE_VAL([lt_cv_sys_max_cmd_len], [dnl - i=0 - teststring="ABCD" - - case $build_os in - msdosdjgpp*) - # On DJGPP, this test can blow up pretty badly due to problems in libc - # (any single argument exceeding 2000 bytes causes a buffer overrun - # during glob expansion). Even if it were fixed, the result of this - # check would be larger than it should be. - lt_cv_sys_max_cmd_len=12288; # 12K is about right - ;; - - gnu*) - # Under GNU Hurd, this test is not required because there is - # no limit to the length of command line arguments. - # Libtool will interpret -1 as no limit whatsoever - lt_cv_sys_max_cmd_len=-1; - ;; - - cygwin* | mingw*) - # On Win9x/ME, this test blows up -- it succeeds, but takes - # about 5 minutes as the teststring grows exponentially. - # Worse, since 9x/ME are not pre-emptively multitasking, - # you end up with a "frozen" computer, even though with patience - # the test eventually succeeds (with a max line length of 256k). - # Instead, let's just punt: use the minimum linelength reported by - # all of the supported platforms: 8192 (on NT/2K/XP). - lt_cv_sys_max_cmd_len=8192; - ;; - - amigaos*) - # On AmigaOS with pdksh, this test takes hours, literally. - # So we just punt and use a minimum line length of 8192. - lt_cv_sys_max_cmd_len=8192; - ;; - - netbsd* | freebsd* | openbsd* | darwin* | dragonfly*) - # This has been around since 386BSD, at least. Likely further. - if test -x /sbin/sysctl; then - lt_cv_sys_max_cmd_len=`/sbin/sysctl -n kern.argmax` - elif test -x /usr/sbin/sysctl; then - lt_cv_sys_max_cmd_len=`/usr/sbin/sysctl -n kern.argmax` - else - lt_cv_sys_max_cmd_len=65536 # usable default for all BSDs - fi - # And add a safety zone - lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4` - lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3` - ;; - - interix*) - # We know the value 262144 and hardcode it with a safety zone (like BSD) - lt_cv_sys_max_cmd_len=196608 - ;; - - osf*) - # Dr. Hans Ekkehard Plesser reports seeing a kernel panic running configure - # due to this test when exec_disable_arg_limit is 1 on Tru64. It is not - # nice to cause kernel panics so lets avoid the loop below. - # First set a reasonable default. - lt_cv_sys_max_cmd_len=16384 - # - if test -x /sbin/sysconfig; then - case `/sbin/sysconfig -q proc exec_disable_arg_limit` in - *1*) lt_cv_sys_max_cmd_len=-1 ;; - esac - fi - ;; - sco3.2v5*) - lt_cv_sys_max_cmd_len=102400 - ;; - sysv5* | sco5v6* | sysv4.2uw2*) - kargmax=`grep ARG_MAX /etc/conf/cf.d/stune 2>/dev/null` - if test -n "$kargmax"; then - lt_cv_sys_max_cmd_len=`echo $kargmax | sed 's/.*[[ ]]//'` - else - lt_cv_sys_max_cmd_len=32768 - fi - ;; - *) - lt_cv_sys_max_cmd_len=`(getconf ARG_MAX) 2> /dev/null` - if test -n "$lt_cv_sys_max_cmd_len"; then - lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4` - lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3` - else - SHELL=${SHELL-${CONFIG_SHELL-/bin/sh}} - while (test "X"`$SHELL [$]0 --fallback-echo "X$teststring" 2>/dev/null` \ - = "XX$teststring") >/dev/null 2>&1 && - new_result=`expr "X$teststring" : ".*" 2>&1` && - lt_cv_sys_max_cmd_len=$new_result && - test $i != 17 # 1/2 MB should be enough - do - i=`expr $i + 1` - teststring=$teststring$teststring - done - teststring= - # Add a significant safety factor because C++ compilers can tack on massive - # amounts of additional arguments before passing them to the linker. - # It appears as though 1/2 is a usable value. - lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 2` - fi - ;; - esac -]) -if test -n $lt_cv_sys_max_cmd_len ; then - AC_MSG_RESULT($lt_cv_sys_max_cmd_len) -else - AC_MSG_RESULT(none) -fi -])# AC_LIBTOOL_SYS_MAX_CMD_LEN - - -# _LT_AC_CHECK_DLFCN -# ------------------ -AC_DEFUN([_LT_AC_CHECK_DLFCN], -[AC_CHECK_HEADERS(dlfcn.h)dnl -])# _LT_AC_CHECK_DLFCN - - -# _LT_AC_TRY_DLOPEN_SELF (ACTION-IF-TRUE, ACTION-IF-TRUE-W-USCORE, -# ACTION-IF-FALSE, ACTION-IF-CROSS-COMPILING) -# --------------------------------------------------------------------- -AC_DEFUN([_LT_AC_TRY_DLOPEN_SELF], -[AC_REQUIRE([_LT_AC_CHECK_DLFCN])dnl -if test "$cross_compiling" = yes; then : - [$4] -else - lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 - lt_status=$lt_dlunknown - cat > conftest.$ac_ext < -#endif - -#include - -#ifdef RTLD_GLOBAL -# define LT_DLGLOBAL RTLD_GLOBAL -#else -# ifdef DL_GLOBAL -# define LT_DLGLOBAL DL_GLOBAL -# else -# define LT_DLGLOBAL 0 -# endif -#endif - -/* We may have to define LT_DLLAZY_OR_NOW in the command line if we - find out it does not work in some platform. */ -#ifndef LT_DLLAZY_OR_NOW -# ifdef RTLD_LAZY -# define LT_DLLAZY_OR_NOW RTLD_LAZY -# else -# ifdef DL_LAZY -# define LT_DLLAZY_OR_NOW DL_LAZY -# else -# ifdef RTLD_NOW -# define LT_DLLAZY_OR_NOW RTLD_NOW -# else -# ifdef DL_NOW -# define LT_DLLAZY_OR_NOW DL_NOW -# else -# define LT_DLLAZY_OR_NOW 0 -# endif -# endif -# endif -# endif -#endif - -#ifdef __cplusplus -extern "C" void exit (int); -#endif - -void fnord() { int i=42;} -int main () -{ - void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW); - int status = $lt_dlunknown; - - if (self) - { - if (dlsym (self,"fnord")) status = $lt_dlno_uscore; - else if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore; - /* dlclose (self); */ - } - else - puts (dlerror ()); - - exit (status); -}] -EOF - if AC_TRY_EVAL(ac_link) && test -s conftest${ac_exeext} 2>/dev/null; then - (./conftest; exit; ) >&AS_MESSAGE_LOG_FD 2>/dev/null - lt_status=$? - case x$lt_status in - x$lt_dlno_uscore) $1 ;; - x$lt_dlneed_uscore) $2 ;; - x$lt_dlunknown|x*) $3 ;; - esac - else : - # compilation failed - $3 - fi -fi -rm -fr conftest* -])# _LT_AC_TRY_DLOPEN_SELF - - -# AC_LIBTOOL_DLOPEN_SELF -# ---------------------- -AC_DEFUN([AC_LIBTOOL_DLOPEN_SELF], -[AC_REQUIRE([_LT_AC_CHECK_DLFCN])dnl -if test "x$enable_dlopen" != xyes; then - enable_dlopen=unknown - enable_dlopen_self=unknown - enable_dlopen_self_static=unknown -else - lt_cv_dlopen=no - lt_cv_dlopen_libs= - - case $host_os in - beos*) - lt_cv_dlopen="load_add_on" - lt_cv_dlopen_libs= - lt_cv_dlopen_self=yes - ;; - - mingw* | pw32*) - lt_cv_dlopen="LoadLibrary" - lt_cv_dlopen_libs= - ;; - - cygwin*) - lt_cv_dlopen="dlopen" - lt_cv_dlopen_libs= - ;; - - darwin*) - # if libdl is installed we need to link against it - AC_CHECK_LIB([dl], [dlopen], - [lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl"],[ - lt_cv_dlopen="dyld" - lt_cv_dlopen_libs= - lt_cv_dlopen_self=yes - ]) - ;; - - *) - AC_CHECK_FUNC([shl_load], - [lt_cv_dlopen="shl_load"], - [AC_CHECK_LIB([dld], [shl_load], - [lt_cv_dlopen="shl_load" lt_cv_dlopen_libs="-dld"], - [AC_CHECK_FUNC([dlopen], - [lt_cv_dlopen="dlopen"], - [AC_CHECK_LIB([dl], [dlopen], - [lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl"], - [AC_CHECK_LIB([svld], [dlopen], - [lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-lsvld"], - [AC_CHECK_LIB([dld], [dld_link], - [lt_cv_dlopen="dld_link" lt_cv_dlopen_libs="-dld"]) - ]) - ]) - ]) - ]) - ]) - ;; - esac - - if test "x$lt_cv_dlopen" != xno; then - enable_dlopen=yes - else - enable_dlopen=no - fi - - case $lt_cv_dlopen in - dlopen) - save_CPPFLAGS="$CPPFLAGS" - test "x$ac_cv_header_dlfcn_h" = xyes && CPPFLAGS="$CPPFLAGS -DHAVE_DLFCN_H" - - save_LDFLAGS="$LDFLAGS" - wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $export_dynamic_flag_spec\" - - save_LIBS="$LIBS" - LIBS="$lt_cv_dlopen_libs $LIBS" - - AC_CACHE_CHECK([whether a program can dlopen itself], - lt_cv_dlopen_self, [dnl - _LT_AC_TRY_DLOPEN_SELF( - lt_cv_dlopen_self=yes, lt_cv_dlopen_self=yes, - lt_cv_dlopen_self=no, lt_cv_dlopen_self=cross) - ]) - - if test "x$lt_cv_dlopen_self" = xyes; then - wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $lt_prog_compiler_static\" - AC_CACHE_CHECK([whether a statically linked program can dlopen itself], - lt_cv_dlopen_self_static, [dnl - _LT_AC_TRY_DLOPEN_SELF( - lt_cv_dlopen_self_static=yes, lt_cv_dlopen_self_static=yes, - lt_cv_dlopen_self_static=no, lt_cv_dlopen_self_static=cross) - ]) - fi - - CPPFLAGS="$save_CPPFLAGS" - LDFLAGS="$save_LDFLAGS" - LIBS="$save_LIBS" - ;; - esac - - case $lt_cv_dlopen_self in - yes|no) enable_dlopen_self=$lt_cv_dlopen_self ;; - *) enable_dlopen_self=unknown ;; - esac - - case $lt_cv_dlopen_self_static in - yes|no) enable_dlopen_self_static=$lt_cv_dlopen_self_static ;; - *) enable_dlopen_self_static=unknown ;; - esac -fi -])# AC_LIBTOOL_DLOPEN_SELF - - -# AC_LIBTOOL_PROG_CC_C_O([TAGNAME]) -# --------------------------------- -# Check to see if options -c and -o are simultaneously supported by compiler -AC_DEFUN([AC_LIBTOOL_PROG_CC_C_O], -[AC_REQUIRE([LT_AC_PROG_SED])dnl -AC_REQUIRE([_LT_AC_SYS_COMPILER])dnl -AC_CACHE_CHECK([if $compiler supports -c -o file.$ac_objext], - [_LT_AC_TAGVAR(lt_cv_prog_compiler_c_o, $1)], - [_LT_AC_TAGVAR(lt_cv_prog_compiler_c_o, $1)=no - $rm -r conftest 2>/dev/null - mkdir conftest - cd conftest - mkdir out - echo "$lt_simple_compile_test_code" > conftest.$ac_ext - - lt_compiler_flag="-o out/conftest2.$ac_objext" - # Insert the option either (1) after the last *FLAGS variable, or - # (2) before a word containing "conftest.", or (3) at the end. - # Note that $ac_compile itself does not contain backslashes and begins - # with a dollar sign (not a hyphen), so the echo should work correctly. - lt_compile=`echo "$ac_compile" | $SED \ - -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ - -e 's: [[^ ]]*conftest\.: $lt_compiler_flag&:; t' \ - -e 's:$: $lt_compiler_flag:'` - (eval echo "\"\$as_me:__oline__: $lt_compile\"" >&AS_MESSAGE_LOG_FD) - (eval "$lt_compile" 2>out/conftest.err) - ac_status=$? - cat out/conftest.err >&AS_MESSAGE_LOG_FD - echo "$as_me:__oline__: \$? = $ac_status" >&AS_MESSAGE_LOG_FD - if (exit $ac_status) && test -s out/conftest2.$ac_objext - then - # The compiler can only warn and ignore the option if not recognized - # So say no if there are warnings - $echo "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' > out/conftest.exp - $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2 - if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then - _LT_AC_TAGVAR(lt_cv_prog_compiler_c_o, $1)=yes - fi - fi - chmod u+w . 2>&AS_MESSAGE_LOG_FD - $rm conftest* - # SGI C++ compiler will create directory out/ii_files/ for - # template instantiation - test -d out/ii_files && $rm out/ii_files/* && rmdir out/ii_files - $rm out/* && rmdir out - cd .. - rmdir conftest - $rm conftest* -]) -])# AC_LIBTOOL_PROG_CC_C_O - - -# AC_LIBTOOL_SYS_HARD_LINK_LOCKS([TAGNAME]) -# ----------------------------------------- -# Check to see if we can do hard links to lock some files if needed -AC_DEFUN([AC_LIBTOOL_SYS_HARD_LINK_LOCKS], -[AC_REQUIRE([_LT_AC_LOCK])dnl - -hard_links="nottested" -if test "$_LT_AC_TAGVAR(lt_cv_prog_compiler_c_o, $1)" = no && test "$need_locks" != no; then - # do not overwrite the value of need_locks provided by the user - AC_MSG_CHECKING([if we can lock with hard links]) - hard_links=yes - $rm conftest* - ln conftest.a conftest.b 2>/dev/null && hard_links=no - touch conftest.a - ln conftest.a conftest.b 2>&5 || hard_links=no - ln conftest.a conftest.b 2>/dev/null && hard_links=no - AC_MSG_RESULT([$hard_links]) - if test "$hard_links" = no; then - AC_MSG_WARN([`$CC' does not support `-c -o', so `make -j' may be unsafe]) - need_locks=warn - fi -else - need_locks=no -fi -])# AC_LIBTOOL_SYS_HARD_LINK_LOCKS - - -# AC_LIBTOOL_OBJDIR -# ----------------- -AC_DEFUN([AC_LIBTOOL_OBJDIR], -[AC_CACHE_CHECK([for objdir], [lt_cv_objdir], -[rm -f .libs 2>/dev/null -mkdir .libs 2>/dev/null -if test -d .libs; then - lt_cv_objdir=.libs -else - # MS-DOS does not allow filenames that begin with a dot. - lt_cv_objdir=_libs -fi -rmdir .libs 2>/dev/null]) -objdir=$lt_cv_objdir -])# AC_LIBTOOL_OBJDIR - - -# AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH([TAGNAME]) -# ---------------------------------------------- -# Check hardcoding attributes. -AC_DEFUN([AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH], -[AC_MSG_CHECKING([how to hardcode library paths into programs]) -_LT_AC_TAGVAR(hardcode_action, $1)= -if test -n "$_LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)" || \ - test -n "$_LT_AC_TAGVAR(runpath_var, $1)" || \ - test "X$_LT_AC_TAGVAR(hardcode_automatic, $1)" = "Xyes" ; then - - # We can hardcode non-existent directories. - if test "$_LT_AC_TAGVAR(hardcode_direct, $1)" != no && - # If the only mechanism to avoid hardcoding is shlibpath_var, we - # have to relink, otherwise we might link with an installed library - # when we should be linking with a yet-to-be-installed one - ## test "$_LT_AC_TAGVAR(hardcode_shlibpath_var, $1)" != no && - test "$_LT_AC_TAGVAR(hardcode_minus_L, $1)" != no; then - # Linking always hardcodes the temporary library directory. - _LT_AC_TAGVAR(hardcode_action, $1)=relink - else - # We can link without hardcoding, and we can hardcode nonexisting dirs. - _LT_AC_TAGVAR(hardcode_action, $1)=immediate - fi -else - # We cannot hardcode anything, or else we can only hardcode existing - # directories. - _LT_AC_TAGVAR(hardcode_action, $1)=unsupported -fi -AC_MSG_RESULT([$_LT_AC_TAGVAR(hardcode_action, $1)]) - -if test "$_LT_AC_TAGVAR(hardcode_action, $1)" = relink; then - # Fast installation is not supported - enable_fast_install=no -elif test "$shlibpath_overrides_runpath" = yes || - test "$enable_shared" = no; then - # Fast installation is not necessary - enable_fast_install=needless -fi -])# AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH - - -# AC_LIBTOOL_SYS_LIB_STRIP -# ------------------------ -AC_DEFUN([AC_LIBTOOL_SYS_LIB_STRIP], -[striplib= -old_striplib= -AC_MSG_CHECKING([whether stripping libraries is possible]) -if test -n "$STRIP" && $STRIP -V 2>&1 | grep "GNU strip" >/dev/null; then - test -z "$old_striplib" && old_striplib="$STRIP --strip-debug" - test -z "$striplib" && striplib="$STRIP --strip-unneeded" - AC_MSG_RESULT([yes]) -else -# FIXME - insert some real tests, host_os isn't really good enough - case $host_os in - darwin*) - if test -n "$STRIP" ; then - striplib="$STRIP -x" - old_striplib="$STRIP -S" - AC_MSG_RESULT([yes]) - else - AC_MSG_RESULT([no]) -fi - ;; - *) - AC_MSG_RESULT([no]) - ;; - esac -fi -])# AC_LIBTOOL_SYS_LIB_STRIP - - -# AC_LIBTOOL_SYS_DYNAMIC_LINKER -# ----------------------------- -# PORTME Fill in your ld.so characteristics -AC_DEFUN([AC_LIBTOOL_SYS_DYNAMIC_LINKER], -[AC_REQUIRE([LT_AC_PROG_SED])dnl -AC_MSG_CHECKING([dynamic linker characteristics]) -library_names_spec= -libname_spec='lib$name' -soname_spec= -shrext_cmds=".so" -postinstall_cmds= -postuninstall_cmds= -finish_cmds= -finish_eval= -shlibpath_var= -shlibpath_overrides_runpath=unknown -version_type=none -dynamic_linker="$host_os ld.so" -sys_lib_dlsearch_path_spec="/lib /usr/lib" -m4_if($1,[],[ -if test "$GCC" = yes; then - case $host_os in - darwin*) lt_awk_arg="/^libraries:/,/LR/" ;; - *) lt_awk_arg="/^libraries:/" ;; - esac - lt_search_path_spec=`$CC -print-search-dirs | awk $lt_awk_arg | $SED -e "s/^libraries://" -e "s,=/,/,g"` - if echo "$lt_search_path_spec" | grep ';' >/dev/null ; then - # if the path contains ";" then we assume it to be the separator - # otherwise default to the standard path separator (i.e. ":") - it is - # assumed that no part of a normal pathname contains ";" but that should - # okay in the real world where ";" in dirpaths is itself problematic. - lt_search_path_spec=`echo "$lt_search_path_spec" | $SED -e 's/;/ /g'` - else - lt_search_path_spec=`echo "$lt_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` - fi - # Ok, now we have the path, separated by spaces, we can step through it - # and add multilib dir if necessary. - lt_tmp_lt_search_path_spec= - lt_multi_os_dir=`$CC $CPPFLAGS $CFLAGS $LDFLAGS -print-multi-os-directory 2>/dev/null` - for lt_sys_path in $lt_search_path_spec; do - if test -d "$lt_sys_path/$lt_multi_os_dir"; then - lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path/$lt_multi_os_dir" - else - test -d "$lt_sys_path" && \ - lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path" - fi - done - lt_search_path_spec=`echo $lt_tmp_lt_search_path_spec | awk ' -BEGIN {RS=" "; FS="/|\n";} { - lt_foo=""; - lt_count=0; - for (lt_i = NF; lt_i > 0; lt_i--) { - if ($lt_i != "" && $lt_i != ".") { - if ($lt_i == "..") { - lt_count++; - } else { - if (lt_count == 0) { - lt_foo="/" $lt_i lt_foo; - } else { - lt_count--; - } - } - } - } - if (lt_foo != "") { lt_freq[[lt_foo]]++; } - if (lt_freq[[lt_foo]] == 1) { print lt_foo; } -}'` - sys_lib_search_path_spec=`echo $lt_search_path_spec` -else - sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib" -fi]) -need_lib_prefix=unknown -hardcode_into_libs=no - -# when you set need_version to no, make sure it does not cause -set_version -# flags to be left without arguments -need_version=unknown - -case $host_os in -aix3*) - version_type=linux - library_names_spec='${libname}${release}${shared_ext}$versuffix $libname.a' - shlibpath_var=LIBPATH - - # AIX 3 has no versioning support, so we append a major version to the name. - soname_spec='${libname}${release}${shared_ext}$major' - ;; - -aix4* | aix5*) - version_type=linux - need_lib_prefix=no - need_version=no - hardcode_into_libs=yes - if test "$host_cpu" = ia64; then - # AIX 5 supports IA64 - library_names_spec='${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext}$versuffix $libname${shared_ext}' - shlibpath_var=LD_LIBRARY_PATH - else - # With GCC up to 2.95.x, collect2 would create an import file - # for dependence libraries. The import file would start with - # the line `#! .'. This would cause the generated library to - # depend on `.', always an invalid library. This was fixed in - # development snapshots of GCC prior to 3.0. - case $host_os in - aix4 | aix4.[[01]] | aix4.[[01]].*) - if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)' - echo ' yes ' - echo '#endif'; } | ${CC} -E - | grep yes > /dev/null; then - : - else - can_build_shared=no - fi - ;; - esac - # AIX (on Power*) has no versioning support, so currently we can not hardcode correct - # soname into executable. Probably we can add versioning support to - # collect2, so additional links can be useful in future. - if test "$aix_use_runtimelinking" = yes; then - # If using run time linking (on AIX 4.2 or later) use lib.so - # instead of lib.a to let people know that these are not - # typical AIX shared libraries. - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - else - # We preserve .a as extension for shared libraries through AIX4.2 - # and later when we are not doing run time linking. - library_names_spec='${libname}${release}.a $libname.a' - soname_spec='${libname}${release}${shared_ext}$major' - fi - shlibpath_var=LIBPATH - fi - ;; - -amigaos*) - library_names_spec='$libname.ixlibrary $libname.a' - # Create ${libname}_ixlibrary.a entries in /sys/libs. - finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`$echo "X$lib" | $Xsed -e '\''s%^.*/\([[^/]]*\)\.ixlibrary$%\1%'\''`; test $rm /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done' - ;; - -beos*) - library_names_spec='${libname}${shared_ext}' - dynamic_linker="$host_os ld.so" - shlibpath_var=LIBRARY_PATH - ;; - -bsdi[[45]]*) - version_type=linux - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir' - shlibpath_var=LD_LIBRARY_PATH - sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib" - sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib" - # the default ld.so.conf also contains /usr/contrib/lib and - # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow - # libtool to hard-code these into programs - ;; - -cygwin* | mingw* | pw32*) - version_type=windows - shrext_cmds=".dll" - need_version=no - need_lib_prefix=no - - case $GCC,$host_os in - yes,cygwin* | yes,mingw* | yes,pw32*) - library_names_spec='$libname.dll.a' - # DLL is installed to $(libdir)/../bin by postinstall_cmds - postinstall_cmds='base_file=`basename \${file}`~ - dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i;echo \$dlname'\''`~ - dldir=$destdir/`dirname \$dlpath`~ - test -d \$dldir || mkdir -p \$dldir~ - $install_prog $dir/$dlname \$dldir/$dlname~ - chmod a+x \$dldir/$dlname' - postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ - dlpath=$dir/\$dldll~ - $rm \$dlpath' - shlibpath_overrides_runpath=yes - - case $host_os in - cygwin*) - # Cygwin DLLs use 'cyg' prefix rather than 'lib' - soname_spec='`echo ${libname} | sed -e 's/^lib/cyg/'``echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext}' - sys_lib_search_path_spec="/usr/lib /lib/w32api /lib /usr/local/lib" - ;; - mingw*) - # MinGW DLLs use traditional 'lib' prefix - soname_spec='${libname}`echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext}' - sys_lib_search_path_spec=`$CC -print-search-dirs | grep "^libraries:" | $SED -e "s/^libraries://" -e "s,=/,/,g"` - if echo "$sys_lib_search_path_spec" | [grep ';[c-zC-Z]:/' >/dev/null]; then - # It is most probably a Windows format PATH printed by - # mingw gcc, but we are running on Cygwin. Gcc prints its search - # path with ; separators, and with drive letters. We can handle the - # drive letters (cygwin fileutils understands them), so leave them, - # especially as we might pass files found there to a mingw objdump, - # which wouldn't understand a cygwinified path. Ahh. - sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'` - else - sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` - fi - ;; - pw32*) - # pw32 DLLs use 'pw' prefix rather than 'lib' - library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext}' - ;; - esac - ;; - - *) - library_names_spec='${libname}`echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext} $libname.lib' - ;; - esac - dynamic_linker='Win32 ld.exe' - # FIXME: first we should search . and the directory the executable is in - shlibpath_var=PATH - ;; - -darwin* | rhapsody*) - dynamic_linker="$host_os dyld" - version_type=darwin - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${versuffix}$shared_ext ${libname}${release}${major}$shared_ext ${libname}$shared_ext' - soname_spec='${libname}${release}${major}$shared_ext' - shlibpath_overrides_runpath=yes - shlibpath_var=DYLD_LIBRARY_PATH - shrext_cmds='`test .$module = .yes && echo .so || echo .dylib`' - m4_if([$1], [],[ - sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/local/lib"]) - sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib' - ;; - -dgux*) - version_type=linux - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname$shared_ext' - soname_spec='${libname}${release}${shared_ext}$major' - shlibpath_var=LD_LIBRARY_PATH - ;; - -freebsd1*) - dynamic_linker=no - ;; - -freebsd* | dragonfly*) - # DragonFly does not have aout. When/if they implement a new - # versioning mechanism, adjust this. - if test -x /usr/bin/objformat; then - objformat=`/usr/bin/objformat` - else - case $host_os in - freebsd[[123]]*) objformat=aout ;; - *) objformat=elf ;; - esac - fi - version_type=freebsd-$objformat - case $version_type in - freebsd-elf*) - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' - need_version=no - need_lib_prefix=no - ;; - freebsd-*) - library_names_spec='${libname}${release}${shared_ext}$versuffix $libname${shared_ext}$versuffix' - need_version=yes - ;; - esac - shlibpath_var=LD_LIBRARY_PATH - case $host_os in - freebsd2*) - shlibpath_overrides_runpath=yes - ;; - freebsd3.[[01]]* | freebsdelf3.[[01]]*) - shlibpath_overrides_runpath=yes - hardcode_into_libs=yes - ;; - freebsd3.[[2-9]]* | freebsdelf3.[[2-9]]* | \ - freebsd4.[[0-5]] | freebsdelf4.[[0-5]] | freebsd4.1.1 | freebsdelf4.1.1) - shlibpath_overrides_runpath=no - hardcode_into_libs=yes - ;; - *) # from 4.6 on, and DragonFly - shlibpath_overrides_runpath=yes - hardcode_into_libs=yes - ;; - esac - ;; - -gnu*) - version_type=linux - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - shlibpath_var=LD_LIBRARY_PATH - hardcode_into_libs=yes - ;; - -hpux9* | hpux10* | hpux11*) - # Give a soname corresponding to the major version so that dld.sl refuses to - # link against other versions. - version_type=sunos - need_lib_prefix=no - need_version=no - case $host_cpu in - ia64*) - shrext_cmds='.so' - hardcode_into_libs=yes - dynamic_linker="$host_os dld.so" - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - if test "X$HPUX_IA64_MODE" = X32; then - sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib" - else - sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64" - fi - sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec - ;; - hppa*64*) - shrext_cmds='.sl' - hardcode_into_libs=yes - dynamic_linker="$host_os dld.sl" - shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH - shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64" - sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec - ;; - *) - shrext_cmds='.sl' - dynamic_linker="$host_os dld.sl" - shlibpath_var=SHLIB_PATH - shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - ;; - esac - # HP-UX runs *really* slowly unless shared libraries are mode 555. - postinstall_cmds='chmod 555 $lib' - ;; - -interix[[3-9]]*) - version_type=linux - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - dynamic_linker='Interix 3.x ld.so.1 (PE, like ELF)' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=no - hardcode_into_libs=yes - ;; - -irix5* | irix6* | nonstopux*) - case $host_os in - nonstopux*) version_type=nonstopux ;; - *) - if test "$lt_cv_prog_gnu_ld" = yes; then - version_type=linux - else - version_type=irix - fi ;; - esac - need_lib_prefix=no - need_version=no - soname_spec='${libname}${release}${shared_ext}$major' - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext} $libname${shared_ext}' - case $host_os in - irix5* | nonstopux*) - libsuff= shlibsuff= - ;; - *) - case $LD in # libtool.m4 will add one of these switches to LD - *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ") - libsuff= shlibsuff= libmagic=32-bit;; - *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ") - libsuff=32 shlibsuff=N32 libmagic=N32;; - *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ") - libsuff=64 shlibsuff=64 libmagic=64-bit;; - *) libsuff= shlibsuff= libmagic=never-match;; - esac - ;; - esac - shlibpath_var=LD_LIBRARY${shlibsuff}_PATH - shlibpath_overrides_runpath=no - sys_lib_search_path_spec="/usr/lib${libsuff} /lib${libsuff} /usr/local/lib${libsuff}" - sys_lib_dlsearch_path_spec="/usr/lib${libsuff} /lib${libsuff}" - hardcode_into_libs=yes - ;; - -# No shared lib support for Linux oldld, aout, or coff. -linux*oldld* | linux*aout* | linux*coff*) - dynamic_linker=no - ;; - -# This must be Linux ELF. -linux* | k*bsd*-gnu) - version_type=linux - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=no - # This implies no fast_install, which is unacceptable. - # Some rework will be needed to allow for fast_install - # before this can be enabled. - hardcode_into_libs=yes - sys_lib_search_path_spec="/usr/lib${libsuff} /lib${libsuff} /usr/local/lib${libsuff}" - sys_lib_dlsearch_path_spec="/usr/lib${libsuff} /lib${libsuff}" - - # Append ld.so.conf contents to the search path - if test -f /etc/ld.so.conf; then - lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s 2>/dev/null", \[$]2)); skip = 1; } { if (!skip) print \[$]0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;/^[ ]*hwcap[ ]/d;s/[:, ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;/^$/d' | tr '\n' ' '` - sys_lib_dlsearch_path_spec="$sys_lib_dlsearch_path_spec $lt_ld_extra" - fi - - # We used to test for /lib/ld.so.1 and disable shared libraries on - # powerpc, because MkLinux only supported shared libraries with the - # GNU dynamic linker. Since this was broken with cross compilers, - # most powerpc-linux boxes support dynamic linking these days and - # people can always --disable-shared, the test was removed, and we - # assume the GNU/Linux dynamic linker is in use. - dynamic_linker='GNU/Linux ld.so' - ;; - -netbsd*) - version_type=sunos - need_lib_prefix=no - need_version=no - if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' - finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' - dynamic_linker='NetBSD (a.out) ld.so' - else - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - dynamic_linker='NetBSD ld.elf_so' - fi - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=yes - hardcode_into_libs=yes - ;; - -newsos6) - version_type=linux - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=yes - ;; - -nto-qnx*) - version_type=linux - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=yes - ;; - -openbsd*) - version_type=sunos - sys_lib_dlsearch_path_spec="/usr/lib" - need_lib_prefix=no - # Some older versions of OpenBSD (3.3 at least) *do* need versioned libs. - case $host_os in - openbsd3.3 | openbsd3.3.*) need_version=yes ;; - *) need_version=no ;; - esac - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' - finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' - shlibpath_var=LD_LIBRARY_PATH - if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then - case $host_os in - openbsd2.[[89]] | openbsd2.[[89]].*) - shlibpath_overrides_runpath=no - ;; - *) - shlibpath_overrides_runpath=yes - ;; - esac - else - shlibpath_overrides_runpath=yes - fi - ;; - -os2*) - libname_spec='$name' - shrext_cmds=".dll" - need_lib_prefix=no - library_names_spec='$libname${shared_ext} $libname.a' - dynamic_linker='OS/2 ld.exe' - shlibpath_var=LIBPATH - ;; - -osf3* | osf4* | osf5*) - version_type=osf - need_lib_prefix=no - need_version=no - soname_spec='${libname}${release}${shared_ext}$major' - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - shlibpath_var=LD_LIBRARY_PATH - sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib" - sys_lib_dlsearch_path_spec="$sys_lib_search_path_spec" - ;; - -rdos*) - dynamic_linker=no - ;; - -solaris*) - version_type=linux - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=yes - hardcode_into_libs=yes - # ldd complains unless libraries are executable - postinstall_cmds='chmod +x $lib' - ;; - -sunos4*) - version_type=sunos - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' - finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=yes - if test "$with_gnu_ld" = yes; then - need_lib_prefix=no - fi - need_version=yes - ;; - -sysv4 | sysv4.3*) - version_type=linux - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - shlibpath_var=LD_LIBRARY_PATH - case $host_vendor in - sni) - shlibpath_overrides_runpath=no - need_lib_prefix=no - export_dynamic_flag_spec='${wl}-Blargedynsym' - runpath_var=LD_RUN_PATH - ;; - siemens) - need_lib_prefix=no - ;; - motorola) - need_lib_prefix=no - need_version=no - shlibpath_overrides_runpath=no - sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib' - ;; - esac - ;; - -sysv4*MP*) - if test -d /usr/nec ;then - version_type=linux - library_names_spec='$libname${shared_ext}.$versuffix $libname${shared_ext}.$major $libname${shared_ext}' - soname_spec='$libname${shared_ext}.$major' - shlibpath_var=LD_LIBRARY_PATH - fi - ;; - -sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) - version_type=freebsd-elf - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - shlibpath_var=LD_LIBRARY_PATH - hardcode_into_libs=yes - if test "$with_gnu_ld" = yes; then - sys_lib_search_path_spec='/usr/local/lib /usr/gnu/lib /usr/ccs/lib /usr/lib /lib' - shlibpath_overrides_runpath=no - else - sys_lib_search_path_spec='/usr/ccs/lib /usr/lib' - shlibpath_overrides_runpath=yes - case $host_os in - sco3.2v5*) - sys_lib_search_path_spec="$sys_lib_search_path_spec /lib" - ;; - esac - fi - sys_lib_dlsearch_path_spec='/usr/lib' - ;; - -uts4*) - version_type=linux - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - shlibpath_var=LD_LIBRARY_PATH - ;; - -*) - dynamic_linker=no - ;; -esac -AC_MSG_RESULT([$dynamic_linker]) -test "$dynamic_linker" = no && can_build_shared=no - -variables_saved_for_relink="PATH $shlibpath_var $runpath_var" -if test "$GCC" = yes; then - variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH" -fi -])# AC_LIBTOOL_SYS_DYNAMIC_LINKER - - -# _LT_AC_TAGCONFIG -# ---------------- -AC_DEFUN([_LT_AC_TAGCONFIG], -[AC_REQUIRE([LT_AC_PROG_SED])dnl -AC_ARG_WITH([tags], - [AC_HELP_STRING([--with-tags@<:@=TAGS@:>@], - [include additional configurations @<:@automatic@:>@])], - [tagnames="$withval"]) - -if test -f "$ltmain" && test -n "$tagnames"; then - if test ! -f "${ofile}"; then - AC_MSG_WARN([output file `$ofile' does not exist]) - fi - - if test -z "$LTCC"; then - eval "`$SHELL ${ofile} --config | grep '^LTCC='`" - if test -z "$LTCC"; then - AC_MSG_WARN([output file `$ofile' does not look like a libtool script]) - else - AC_MSG_WARN([using `LTCC=$LTCC', extracted from `$ofile']) - fi - fi - if test -z "$LTCFLAGS"; then - eval "`$SHELL ${ofile} --config | grep '^LTCFLAGS='`" - fi - - # Extract list of available tagged configurations in $ofile. - # Note that this assumes the entire list is on one line. - available_tags=`grep "^available_tags=" "${ofile}" | $SED -e 's/available_tags=\(.*$\)/\1/' -e 's/\"//g'` - - lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," - for tagname in $tagnames; do - IFS="$lt_save_ifs" - # Check whether tagname contains only valid characters - case `$echo "X$tagname" | $Xsed -e 's:[[-_ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz1234567890,/]]::g'` in - "") ;; - *) AC_MSG_ERROR([invalid tag name: $tagname]) - ;; - esac - - if grep "^# ### BEGIN LIBTOOL TAG CONFIG: $tagname$" < "${ofile}" > /dev/null - then - AC_MSG_ERROR([tag name \"$tagname\" already exists]) - fi - - # Update the list of available tags. - if test -n "$tagname"; then - echo appending configuration tag \"$tagname\" to $ofile - - case $tagname in - CXX) - if test -n "$CXX" && ( test "X$CXX" != "Xno" && - ( (test "X$CXX" = "Xg++" && `g++ -v >/dev/null 2>&1` ) || - (test "X$CXX" != "Xg++"))) ; then - AC_LIBTOOL_LANG_CXX_CONFIG - else - tagname="" - fi - ;; - - F77) - if test -n "$F77" && test "X$F77" != "Xno"; then - AC_LIBTOOL_LANG_F77_CONFIG - else - tagname="" - fi - ;; - - GCJ) - if test -n "$GCJ" && test "X$GCJ" != "Xno"; then - AC_LIBTOOL_LANG_GCJ_CONFIG - else - tagname="" - fi - ;; - - RC) - AC_LIBTOOL_LANG_RC_CONFIG - ;; - - *) - AC_MSG_ERROR([Unsupported tag name: $tagname]) - ;; - esac - - # Append the new tag name to the list of available tags. - if test -n "$tagname" ; then - available_tags="$available_tags $tagname" - fi - fi - done - IFS="$lt_save_ifs" - - # Now substitute the updated list of available tags. - if eval "sed -e 's/^available_tags=.*\$/available_tags=\"$available_tags\"/' \"$ofile\" > \"${ofile}T\""; then - mv "${ofile}T" "$ofile" - chmod +x "$ofile" - else - rm -f "${ofile}T" - AC_MSG_ERROR([unable to update list of available tagged configurations.]) - fi -fi -])# _LT_AC_TAGCONFIG - - -# AC_LIBTOOL_DLOPEN -# ----------------- -# enable checks for dlopen support -AC_DEFUN([AC_LIBTOOL_DLOPEN], - [AC_BEFORE([$0],[AC_LIBTOOL_SETUP]) -])# AC_LIBTOOL_DLOPEN - - -# AC_LIBTOOL_WIN32_DLL -# -------------------- -# declare package support for building win32 DLLs -AC_DEFUN([AC_LIBTOOL_WIN32_DLL], -[AC_BEFORE([$0], [AC_LIBTOOL_SETUP]) -])# AC_LIBTOOL_WIN32_DLL - - -# AC_ENABLE_SHARED([DEFAULT]) -# --------------------------- -# implement the --enable-shared flag -# DEFAULT is either `yes' or `no'. If omitted, it defaults to `yes'. -AC_DEFUN([AC_ENABLE_SHARED], -[define([AC_ENABLE_SHARED_DEFAULT], ifelse($1, no, no, yes))dnl -AC_ARG_ENABLE([shared], - [AC_HELP_STRING([--enable-shared@<:@=PKGS@:>@], - [build shared libraries @<:@default=]AC_ENABLE_SHARED_DEFAULT[@:>@])], - [p=${PACKAGE-default} - case $enableval in - yes) enable_shared=yes ;; - no) enable_shared=no ;; - *) - enable_shared=no - # Look at the argument we got. We use all the common list separators. - lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," - for pkg in $enableval; do - IFS="$lt_save_ifs" - if test "X$pkg" = "X$p"; then - enable_shared=yes - fi - done - IFS="$lt_save_ifs" - ;; - esac], - [enable_shared=]AC_ENABLE_SHARED_DEFAULT) -])# AC_ENABLE_SHARED - - -# AC_DISABLE_SHARED -# ----------------- -# set the default shared flag to --disable-shared -AC_DEFUN([AC_DISABLE_SHARED], -[AC_BEFORE([$0],[AC_LIBTOOL_SETUP])dnl -AC_ENABLE_SHARED(no) -])# AC_DISABLE_SHARED - - -# AC_ENABLE_STATIC([DEFAULT]) -# --------------------------- -# implement the --enable-static flag -# DEFAULT is either `yes' or `no'. If omitted, it defaults to `yes'. -AC_DEFUN([AC_ENABLE_STATIC], -[define([AC_ENABLE_STATIC_DEFAULT], ifelse($1, no, no, yes))dnl -AC_ARG_ENABLE([static], - [AC_HELP_STRING([--enable-static@<:@=PKGS@:>@], - [build static libraries @<:@default=]AC_ENABLE_STATIC_DEFAULT[@:>@])], - [p=${PACKAGE-default} - case $enableval in - yes) enable_static=yes ;; - no) enable_static=no ;; - *) - enable_static=no - # Look at the argument we got. We use all the common list separators. - lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," - for pkg in $enableval; do - IFS="$lt_save_ifs" - if test "X$pkg" = "X$p"; then - enable_static=yes - fi - done - IFS="$lt_save_ifs" - ;; - esac], - [enable_static=]AC_ENABLE_STATIC_DEFAULT) -])# AC_ENABLE_STATIC - - -# AC_DISABLE_STATIC -# ----------------- -# set the default static flag to --disable-static -AC_DEFUN([AC_DISABLE_STATIC], -[AC_BEFORE([$0],[AC_LIBTOOL_SETUP])dnl -AC_ENABLE_STATIC(no) -])# AC_DISABLE_STATIC - - -# AC_ENABLE_FAST_INSTALL([DEFAULT]) -# --------------------------------- -# implement the --enable-fast-install flag -# DEFAULT is either `yes' or `no'. If omitted, it defaults to `yes'. -AC_DEFUN([AC_ENABLE_FAST_INSTALL], -[define([AC_ENABLE_FAST_INSTALL_DEFAULT], ifelse($1, no, no, yes))dnl -AC_ARG_ENABLE([fast-install], - [AC_HELP_STRING([--enable-fast-install@<:@=PKGS@:>@], - [optimize for fast installation @<:@default=]AC_ENABLE_FAST_INSTALL_DEFAULT[@:>@])], - [p=${PACKAGE-default} - case $enableval in - yes) enable_fast_install=yes ;; - no) enable_fast_install=no ;; - *) - enable_fast_install=no - # Look at the argument we got. We use all the common list separators. - lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," - for pkg in $enableval; do - IFS="$lt_save_ifs" - if test "X$pkg" = "X$p"; then - enable_fast_install=yes - fi - done - IFS="$lt_save_ifs" - ;; - esac], - [enable_fast_install=]AC_ENABLE_FAST_INSTALL_DEFAULT) -])# AC_ENABLE_FAST_INSTALL - - -# AC_DISABLE_FAST_INSTALL -# ----------------------- -# set the default to --disable-fast-install -AC_DEFUN([AC_DISABLE_FAST_INSTALL], -[AC_BEFORE([$0],[AC_LIBTOOL_SETUP])dnl -AC_ENABLE_FAST_INSTALL(no) -])# AC_DISABLE_FAST_INSTALL - - -# AC_LIBTOOL_PICMODE([MODE]) -# -------------------------- -# implement the --with-pic flag -# MODE is either `yes' or `no'. If omitted, it defaults to `both'. -AC_DEFUN([AC_LIBTOOL_PICMODE], -[AC_BEFORE([$0],[AC_LIBTOOL_SETUP])dnl -pic_mode=ifelse($#,1,$1,default) -])# AC_LIBTOOL_PICMODE - - -# AC_PROG_EGREP -# ------------- -# This is predefined starting with Autoconf 2.54, so this conditional -# definition can be removed once we require Autoconf 2.54 or later. -m4_ifndef([AC_PROG_EGREP], [AC_DEFUN([AC_PROG_EGREP], -[AC_CACHE_CHECK([for egrep], [ac_cv_prog_egrep], - [if echo a | (grep -E '(a|b)') >/dev/null 2>&1 - then ac_cv_prog_egrep='grep -E' - else ac_cv_prog_egrep='egrep' - fi]) - EGREP=$ac_cv_prog_egrep - AC_SUBST([EGREP]) -])]) - - -# AC_PATH_TOOL_PREFIX -# ------------------- -# find a file program which can recognize shared library -AC_DEFUN([AC_PATH_TOOL_PREFIX], -[AC_REQUIRE([AC_PROG_EGREP])dnl -AC_MSG_CHECKING([for $1]) -AC_CACHE_VAL(lt_cv_path_MAGIC_CMD, -[case $MAGIC_CMD in -[[\\/*] | ?:[\\/]*]) - lt_cv_path_MAGIC_CMD="$MAGIC_CMD" # Let the user override the test with a path. - ;; -*) - lt_save_MAGIC_CMD="$MAGIC_CMD" - lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR -dnl $ac_dummy forces splitting on constant user-supplied paths. -dnl POSIX.2 word splitting is done only on the output of word expansions, -dnl not every word. This closes a longstanding sh security hole. - ac_dummy="ifelse([$2], , $PATH, [$2])" - for ac_dir in $ac_dummy; do - IFS="$lt_save_ifs" - test -z "$ac_dir" && ac_dir=. - if test -f $ac_dir/$1; then - lt_cv_path_MAGIC_CMD="$ac_dir/$1" - if test -n "$file_magic_test_file"; then - case $deplibs_check_method in - "file_magic "*) - file_magic_regex=`expr "$deplibs_check_method" : "file_magic \(.*\)"` - MAGIC_CMD="$lt_cv_path_MAGIC_CMD" - if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null | - $EGREP "$file_magic_regex" > /dev/null; then - : - else - cat <&2 - -*** Warning: the command libtool uses to detect shared libraries, -*** $file_magic_cmd, produces output that libtool cannot recognize. -*** The result is that libtool may fail to recognize shared libraries -*** as such. This will affect the creation of libtool libraries that -*** depend on shared libraries, but programs linked with such libtool -*** libraries will work regardless of this problem. Nevertheless, you -*** may want to report the problem to your system manager and/or to -*** bug-libtool at gnu.org - -EOF - fi ;; - esac - fi - break - fi - done - IFS="$lt_save_ifs" - MAGIC_CMD="$lt_save_MAGIC_CMD" - ;; -esac]) -MAGIC_CMD="$lt_cv_path_MAGIC_CMD" -if test -n "$MAGIC_CMD"; then - AC_MSG_RESULT($MAGIC_CMD) -else - AC_MSG_RESULT(no) -fi -])# AC_PATH_TOOL_PREFIX - - -# AC_PATH_MAGIC -# ------------- -# find a file program which can recognize a shared library -AC_DEFUN([AC_PATH_MAGIC], -[AC_PATH_TOOL_PREFIX(${ac_tool_prefix}file, /usr/bin$PATH_SEPARATOR$PATH) -if test -z "$lt_cv_path_MAGIC_CMD"; then - if test -n "$ac_tool_prefix"; then - AC_PATH_TOOL_PREFIX(file, /usr/bin$PATH_SEPARATOR$PATH) - else - MAGIC_CMD=: - fi -fi -])# AC_PATH_MAGIC - - -# AC_PROG_LD -# ---------- -# find the pathname to the GNU or non-GNU linker -AC_DEFUN([AC_PROG_LD], -[AC_ARG_WITH([gnu-ld], - [AC_HELP_STRING([--with-gnu-ld], - [assume the C compiler uses GNU ld @<:@default=no@:>@])], - [test "$withval" = no || with_gnu_ld=yes], - [with_gnu_ld=no]) -AC_REQUIRE([LT_AC_PROG_SED])dnl -AC_REQUIRE([AC_PROG_CC])dnl -AC_REQUIRE([AC_CANONICAL_HOST])dnl -AC_REQUIRE([AC_CANONICAL_BUILD])dnl -ac_prog=ld -if test "$GCC" = yes; then - # Check if gcc -print-prog-name=ld gives a path. - AC_MSG_CHECKING([for ld used by $CC]) - case $host in - *-*-mingw*) - # gcc leaves a trailing carriage return which upsets mingw - ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;; - *) - ac_prog=`($CC -print-prog-name=ld) 2>&5` ;; - esac - case $ac_prog in - # Accept absolute paths. - [[\\/]]* | ?:[[\\/]]*) - re_direlt='/[[^/]][[^/]]*/\.\./' - # Canonicalize the pathname of ld - ac_prog=`echo $ac_prog| $SED 's%\\\\%/%g'` - while echo $ac_prog | grep "$re_direlt" > /dev/null 2>&1; do - ac_prog=`echo $ac_prog| $SED "s%$re_direlt%/%"` - done - test -z "$LD" && LD="$ac_prog" - ;; - "") - # If it fails, then pretend we aren't using GCC. - ac_prog=ld - ;; - *) - # If it is relative, then search for the first ld in PATH. - with_gnu_ld=unknown - ;; - esac -elif test "$with_gnu_ld" = yes; then - AC_MSG_CHECKING([for GNU ld]) -else - AC_MSG_CHECKING([for non-GNU ld]) -fi -AC_CACHE_VAL(lt_cv_path_LD, -[if test -z "$LD"; then - lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR - for ac_dir in $PATH; do - IFS="$lt_save_ifs" - test -z "$ac_dir" && ac_dir=. - if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then - lt_cv_path_LD="$ac_dir/$ac_prog" - # Check to see if the program is GNU ld. I'd rather use --version, - # but apparently some variants of GNU ld only accept -v. - # Break only if it was the GNU/non-GNU ld that we prefer. - case `"$lt_cv_path_LD" -v 2>&1 &1 /dev/null 2>&1; then - lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL' - lt_cv_file_magic_cmd='func_win32_libid' - else - lt_cv_deplibs_check_method='file_magic file format pei*-i386(.*architecture: i386)?' - lt_cv_file_magic_cmd='$OBJDUMP -f' - fi - ;; - -darwin* | rhapsody*) - lt_cv_deplibs_check_method=pass_all - ;; - -freebsd* | dragonfly*) - if echo __ELF__ | $CC -E - | grep __ELF__ > /dev/null; then - case $host_cpu in - i*86 ) - # Not sure whether the presence of OpenBSD here was a mistake. - # Let's accept both of them until this is cleared up. - lt_cv_deplibs_check_method='file_magic (FreeBSD|OpenBSD|DragonFly)/i[[3-9]]86 (compact )?demand paged shared library' - lt_cv_file_magic_cmd=/usr/bin/file - lt_cv_file_magic_test_file=`echo /usr/lib/libc.so.*` - ;; - esac - else - lt_cv_deplibs_check_method=pass_all - fi - ;; - -gnu*) - lt_cv_deplibs_check_method=pass_all - ;; - -hpux10.20* | hpux11*) - lt_cv_file_magic_cmd=/usr/bin/file - case $host_cpu in - ia64*) - lt_cv_deplibs_check_method='file_magic (s[[0-9]][[0-9]][[0-9]]|ELF-[[0-9]][[0-9]]) shared object file - IA64' - lt_cv_file_magic_test_file=/usr/lib/hpux32/libc.so - ;; - hppa*64*) - [lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF-[0-9][0-9]) shared object file - PA-RISC [0-9].[0-9]'] - lt_cv_file_magic_test_file=/usr/lib/pa20_64/libc.sl - ;; - *) - lt_cv_deplibs_check_method='file_magic (s[[0-9]][[0-9]][[0-9]]|PA-RISC[[0-9]].[[0-9]]) shared library' - lt_cv_file_magic_test_file=/usr/lib/libc.sl - ;; - esac - ;; - -interix[[3-9]]*) - # PIC code is broken on Interix 3.x, that's why |\.a not |_pic\.a here - lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so|\.a)$' - ;; - -irix5* | irix6* | nonstopux*) - case $LD in - *-32|*"-32 ") libmagic=32-bit;; - *-n32|*"-n32 ") libmagic=N32;; - *-64|*"-64 ") libmagic=64-bit;; - *) libmagic=never-match;; - esac - lt_cv_deplibs_check_method=pass_all - ;; - -# This must be Linux ELF. -linux* | k*bsd*-gnu) - lt_cv_deplibs_check_method=pass_all - ;; - -netbsd*) - if echo __ELF__ | $CC -E - | grep __ELF__ > /dev/null; then - lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so\.[[0-9]]+\.[[0-9]]+|_pic\.a)$' - else - lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so|_pic\.a)$' - fi - ;; - -newos6*) - lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[ML]]SB (executable|dynamic lib)' - lt_cv_file_magic_cmd=/usr/bin/file - lt_cv_file_magic_test_file=/usr/lib/libnls.so - ;; - -nto-qnx*) - lt_cv_deplibs_check_method=unknown - ;; - -openbsd*) - if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then - lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so\.[[0-9]]+\.[[0-9]]+|\.so|_pic\.a)$' - else - lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so\.[[0-9]]+\.[[0-9]]+|_pic\.a)$' - fi - ;; - -osf3* | osf4* | osf5*) - lt_cv_deplibs_check_method=pass_all - ;; - -rdos*) - lt_cv_deplibs_check_method=pass_all - ;; - -solaris*) - lt_cv_deplibs_check_method=pass_all - ;; - -sysv4 | sysv4.3*) - case $host_vendor in - motorola) - lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[ML]]SB (shared object|dynamic lib) M[[0-9]][[0-9]]* Version [[0-9]]' - lt_cv_file_magic_test_file=`echo /usr/lib/libc.so*` - ;; - ncr) - lt_cv_deplibs_check_method=pass_all - ;; - sequent) - lt_cv_file_magic_cmd='/bin/file' - lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[LM]]SB (shared object|dynamic lib )' - ;; - sni) - lt_cv_file_magic_cmd='/bin/file' - lt_cv_deplibs_check_method="file_magic ELF [[0-9]][[0-9]]*-bit [[LM]]SB dynamic lib" - lt_cv_file_magic_test_file=/lib/libc.so - ;; - siemens) - lt_cv_deplibs_check_method=pass_all - ;; - pc) - lt_cv_deplibs_check_method=pass_all - ;; - esac - ;; - -sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) - lt_cv_deplibs_check_method=pass_all - ;; -esac -]) -file_magic_cmd=$lt_cv_file_magic_cmd -deplibs_check_method=$lt_cv_deplibs_check_method -test -z "$deplibs_check_method" && deplibs_check_method=unknown -])# AC_DEPLIBS_CHECK_METHOD - - -# AC_PROG_NM -# ---------- -# find the pathname to a BSD-compatible name lister -AC_DEFUN([AC_PROG_NM], -[AC_CACHE_CHECK([for BSD-compatible nm], lt_cv_path_NM, -[if test -n "$NM"; then - # Let the user override the test. - lt_cv_path_NM="$NM" -else - lt_nm_to_check="${ac_tool_prefix}nm" - if test -n "$ac_tool_prefix" && test "$build" = "$host"; then - lt_nm_to_check="$lt_nm_to_check nm" - fi - for lt_tmp_nm in $lt_nm_to_check; do - lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR - for ac_dir in $PATH /usr/ccs/bin/elf /usr/ccs/bin /usr/ucb /bin; do - IFS="$lt_save_ifs" - test -z "$ac_dir" && ac_dir=. - tmp_nm="$ac_dir/$lt_tmp_nm" - if test -f "$tmp_nm" || test -f "$tmp_nm$ac_exeext" ; then - # Check to see if the nm accepts a BSD-compat flag. - # Adding the `sed 1q' prevents false positives on HP-UX, which says: - # nm: unknown option "B" ignored - # Tru64's nm complains that /dev/null is an invalid object file - case `"$tmp_nm" -B /dev/null 2>&1 | sed '1q'` in - */dev/null* | *'Invalid file or object type'*) - lt_cv_path_NM="$tmp_nm -B" - break - ;; - *) - case `"$tmp_nm" -p /dev/null 2>&1 | sed '1q'` in - */dev/null*) - lt_cv_path_NM="$tmp_nm -p" - break - ;; - *) - lt_cv_path_NM=${lt_cv_path_NM="$tmp_nm"} # keep the first match, but - continue # so that we can try to find one that supports BSD flags - ;; - esac - ;; - esac - fi - done - IFS="$lt_save_ifs" - done - test -z "$lt_cv_path_NM" && lt_cv_path_NM=nm -fi]) -NM="$lt_cv_path_NM" -])# AC_PROG_NM - - -# AC_CHECK_LIBM -# ------------- -# check for math library -AC_DEFUN([AC_CHECK_LIBM], -[AC_REQUIRE([AC_CANONICAL_HOST])dnl -LIBM= -case $host in -*-*-beos* | *-*-cygwin* | *-*-pw32* | *-*-darwin*) - # These system don't have libm, or don't need it - ;; -*-ncr-sysv4.3*) - AC_CHECK_LIB(mw, _mwvalidcheckl, LIBM="-lmw") - AC_CHECK_LIB(m, cos, LIBM="$LIBM -lm") - ;; -*) - AC_CHECK_LIB(m, cos, LIBM="-lm") - ;; -esac -])# AC_CHECK_LIBM - - -# AC_LIBLTDL_CONVENIENCE([DIRECTORY]) -# ----------------------------------- -# sets LIBLTDL to the link flags for the libltdl convenience library and -# LTDLINCL to the include flags for the libltdl header and adds -# --enable-ltdl-convenience to the configure arguments. Note that -# AC_CONFIG_SUBDIRS is not called here. If DIRECTORY is not provided, -# it is assumed to be `libltdl'. LIBLTDL will be prefixed with -# '${top_builddir}/' and LTDLINCL will be prefixed with '${top_srcdir}/' -# (note the single quotes!). If your package is not flat and you're not -# using automake, define top_builddir and top_srcdir appropriately in -# the Makefiles. -AC_DEFUN([AC_LIBLTDL_CONVENIENCE], -[AC_BEFORE([$0],[AC_LIBTOOL_SETUP])dnl - case $enable_ltdl_convenience in - no) AC_MSG_ERROR([this package needs a convenience libltdl]) ;; - "") enable_ltdl_convenience=yes - ac_configure_args="$ac_configure_args --enable-ltdl-convenience" ;; - esac - LIBLTDL='${top_builddir}/'ifelse($#,1,[$1],['libltdl'])/libltdlc.la - LTDLINCL='-I${top_srcdir}/'ifelse($#,1,[$1],['libltdl']) - # For backwards non-gettext consistent compatibility... - INCLTDL="$LTDLINCL" -])# AC_LIBLTDL_CONVENIENCE - - -# AC_LIBLTDL_INSTALLABLE([DIRECTORY]) -# ----------------------------------- -# sets LIBLTDL to the link flags for the libltdl installable library and -# LTDLINCL to the include flags for the libltdl header and adds -# --enable-ltdl-install to the configure arguments. Note that -# AC_CONFIG_SUBDIRS is not called here. If DIRECTORY is not provided, -# and an installed libltdl is not found, it is assumed to be `libltdl'. -# LIBLTDL will be prefixed with '${top_builddir}/'# and LTDLINCL with -# '${top_srcdir}/' (note the single quotes!). If your package is not -# flat and you're not using automake, define top_builddir and top_srcdir -# appropriately in the Makefiles. -# In the future, this macro may have to be called after AC_PROG_LIBTOOL. -AC_DEFUN([AC_LIBLTDL_INSTALLABLE], -[AC_BEFORE([$0],[AC_LIBTOOL_SETUP])dnl - AC_CHECK_LIB(ltdl, lt_dlinit, - [test x"$enable_ltdl_install" != xyes && enable_ltdl_install=no], - [if test x"$enable_ltdl_install" = xno; then - AC_MSG_WARN([libltdl not installed, but installation disabled]) - else - enable_ltdl_install=yes - fi - ]) - if test x"$enable_ltdl_install" = x"yes"; then - ac_configure_args="$ac_configure_args --enable-ltdl-install" - LIBLTDL='${top_builddir}/'ifelse($#,1,[$1],['libltdl'])/libltdl.la - LTDLINCL='-I${top_srcdir}/'ifelse($#,1,[$1],['libltdl']) - else - ac_configure_args="$ac_configure_args --enable-ltdl-install=no" - LIBLTDL="-lltdl" - LTDLINCL= - fi - # For backwards non-gettext consistent compatibility... - INCLTDL="$LTDLINCL" -])# AC_LIBLTDL_INSTALLABLE - - -# AC_LIBTOOL_CXX -# -------------- -# enable support for C++ libraries -AC_DEFUN([AC_LIBTOOL_CXX], -[AC_REQUIRE([_LT_AC_LANG_CXX]) -])# AC_LIBTOOL_CXX - - -# _LT_AC_LANG_CXX -# --------------- -AC_DEFUN([_LT_AC_LANG_CXX], -[AC_REQUIRE([AC_PROG_CXX]) -AC_REQUIRE([_LT_AC_PROG_CXXCPP]) -_LT_AC_SHELL_INIT([tagnames=${tagnames+${tagnames},}CXX]) -])# _LT_AC_LANG_CXX - -# _LT_AC_PROG_CXXCPP -# ------------------ -AC_DEFUN([_LT_AC_PROG_CXXCPP], -[ -AC_REQUIRE([AC_PROG_CXX]) -if test -n "$CXX" && ( test "X$CXX" != "Xno" && - ( (test "X$CXX" = "Xg++" && `g++ -v >/dev/null 2>&1` ) || - (test "X$CXX" != "Xg++"))) ; then - AC_PROG_CXXCPP -fi -])# _LT_AC_PROG_CXXCPP - -# AC_LIBTOOL_F77 -# -------------- -# enable support for Fortran 77 libraries -AC_DEFUN([AC_LIBTOOL_F77], -[AC_REQUIRE([_LT_AC_LANG_F77]) -])# AC_LIBTOOL_F77 - - -# _LT_AC_LANG_F77 -# --------------- -AC_DEFUN([_LT_AC_LANG_F77], -[AC_REQUIRE([AC_PROG_F77]) -_LT_AC_SHELL_INIT([tagnames=${tagnames+${tagnames},}F77]) -])# _LT_AC_LANG_F77 - - -# AC_LIBTOOL_GCJ -# -------------- -# enable support for GCJ libraries -AC_DEFUN([AC_LIBTOOL_GCJ], -[AC_REQUIRE([_LT_AC_LANG_GCJ]) -])# AC_LIBTOOL_GCJ - - -# _LT_AC_LANG_GCJ -# --------------- -AC_DEFUN([_LT_AC_LANG_GCJ], -[AC_PROVIDE_IFELSE([AC_PROG_GCJ],[], - [AC_PROVIDE_IFELSE([A][M_PROG_GCJ],[], - [AC_PROVIDE_IFELSE([LT_AC_PROG_GCJ],[], - [ifdef([AC_PROG_GCJ],[AC_REQUIRE([AC_PROG_GCJ])], - [ifdef([A][M_PROG_GCJ],[AC_REQUIRE([A][M_PROG_GCJ])], - [AC_REQUIRE([A][C_PROG_GCJ_OR_A][M_PROG_GCJ])])])])])]) -_LT_AC_SHELL_INIT([tagnames=${tagnames+${tagnames},}GCJ]) -])# _LT_AC_LANG_GCJ - - -# AC_LIBTOOL_RC -# ------------- -# enable support for Windows resource files -AC_DEFUN([AC_LIBTOOL_RC], -[AC_REQUIRE([LT_AC_PROG_RC]) -_LT_AC_SHELL_INIT([tagnames=${tagnames+${tagnames},}RC]) -])# AC_LIBTOOL_RC - - -# AC_LIBTOOL_LANG_C_CONFIG -# ------------------------ -# Ensure that the configuration vars for the C compiler are -# suitably defined. Those variables are subsequently used by -# AC_LIBTOOL_CONFIG to write the compiler configuration to `libtool'. -AC_DEFUN([AC_LIBTOOL_LANG_C_CONFIG], [_LT_AC_LANG_C_CONFIG]) -AC_DEFUN([_LT_AC_LANG_C_CONFIG], -[lt_save_CC="$CC" -AC_LANG_PUSH(C) - -# Source file extension for C test sources. -ac_ext=c - -# Object file extension for compiled C test sources. -objext=o -_LT_AC_TAGVAR(objext, $1)=$objext - -# Code to be used in simple compile tests -lt_simple_compile_test_code="int some_variable = 0;" - -# Code to be used in simple link tests -lt_simple_link_test_code='int main(){return(0);}' - -_LT_AC_SYS_COMPILER - -# save warnings/boilerplate of simple test code -_LT_COMPILER_BOILERPLATE -_LT_LINKER_BOILERPLATE - -AC_LIBTOOL_PROG_COMPILER_NO_RTTI($1) -AC_LIBTOOL_PROG_COMPILER_PIC($1) -AC_LIBTOOL_PROG_CC_C_O($1) -AC_LIBTOOL_SYS_HARD_LINK_LOCKS($1) -AC_LIBTOOL_PROG_LD_SHLIBS($1) -AC_LIBTOOL_SYS_DYNAMIC_LINKER($1) -AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH($1) -AC_LIBTOOL_SYS_LIB_STRIP -AC_LIBTOOL_DLOPEN_SELF - -# Report which library types will actually be built -AC_MSG_CHECKING([if libtool supports shared libraries]) -AC_MSG_RESULT([$can_build_shared]) - -AC_MSG_CHECKING([whether to build shared libraries]) -test "$can_build_shared" = "no" && enable_shared=no - -# On AIX, shared libraries and static libraries use the same namespace, and -# are all built from PIC. -case $host_os in -aix3*) - test "$enable_shared" = yes && enable_static=no - if test -n "$RANLIB"; then - archive_cmds="$archive_cmds~\$RANLIB \$lib" - postinstall_cmds='$RANLIB $lib' - fi - ;; - -aix4* | aix5*) - if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then - test "$enable_shared" = yes && enable_static=no - fi - ;; -esac -AC_MSG_RESULT([$enable_shared]) - -AC_MSG_CHECKING([whether to build static libraries]) -# Make sure either enable_shared or enable_static is yes. -test "$enable_shared" = yes || enable_static=yes -AC_MSG_RESULT([$enable_static]) - -AC_LIBTOOL_CONFIG($1) - -AC_LANG_POP -CC="$lt_save_CC" -])# AC_LIBTOOL_LANG_C_CONFIG - - -# AC_LIBTOOL_LANG_CXX_CONFIG -# -------------------------- -# Ensure that the configuration vars for the C compiler are -# suitably defined. Those variables are subsequently used by -# AC_LIBTOOL_CONFIG to write the compiler configuration to `libtool'. -AC_DEFUN([AC_LIBTOOL_LANG_CXX_CONFIG], [_LT_AC_LANG_CXX_CONFIG(CXX)]) -AC_DEFUN([_LT_AC_LANG_CXX_CONFIG], -[AC_LANG_PUSH(C++) -AC_REQUIRE([AC_PROG_CXX]) -AC_REQUIRE([_LT_AC_PROG_CXXCPP]) - -_LT_AC_TAGVAR(archive_cmds_need_lc, $1)=no -_LT_AC_TAGVAR(allow_undefined_flag, $1)= -_LT_AC_TAGVAR(always_export_symbols, $1)=no -_LT_AC_TAGVAR(archive_expsym_cmds, $1)= -_LT_AC_TAGVAR(export_dynamic_flag_spec, $1)= -_LT_AC_TAGVAR(hardcode_direct, $1)=no -_LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)= -_LT_AC_TAGVAR(hardcode_libdir_flag_spec_ld, $1)= -_LT_AC_TAGVAR(hardcode_libdir_separator, $1)= -_LT_AC_TAGVAR(hardcode_minus_L, $1)=no -_LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=unsupported -_LT_AC_TAGVAR(hardcode_automatic, $1)=no -_LT_AC_TAGVAR(module_cmds, $1)= -_LT_AC_TAGVAR(module_expsym_cmds, $1)= -_LT_AC_TAGVAR(link_all_deplibs, $1)=unknown -_LT_AC_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds -_LT_AC_TAGVAR(no_undefined_flag, $1)= -_LT_AC_TAGVAR(whole_archive_flag_spec, $1)= -_LT_AC_TAGVAR(enable_shared_with_static_runtimes, $1)=no - -# Dependencies to place before and after the object being linked: -_LT_AC_TAGVAR(predep_objects, $1)= -_LT_AC_TAGVAR(postdep_objects, $1)= -_LT_AC_TAGVAR(predeps, $1)= -_LT_AC_TAGVAR(postdeps, $1)= -_LT_AC_TAGVAR(compiler_lib_search_path, $1)= - -# Source file extension for C++ test sources. -ac_ext=cpp - -# Object file extension for compiled C++ test sources. -objext=o -_LT_AC_TAGVAR(objext, $1)=$objext - -# Code to be used in simple compile tests -lt_simple_compile_test_code="int some_variable = 0;" - -# Code to be used in simple link tests -lt_simple_link_test_code='int main(int, char *[[]]) { return(0); }' - -# ltmain only uses $CC for tagged configurations so make sure $CC is set. -_LT_AC_SYS_COMPILER - -# save warnings/boilerplate of simple test code -_LT_COMPILER_BOILERPLATE -_LT_LINKER_BOILERPLATE - -# Allow CC to be a program name with arguments. -lt_save_CC=$CC -lt_save_LD=$LD -lt_save_GCC=$GCC -GCC=$GXX -lt_save_with_gnu_ld=$with_gnu_ld -lt_save_path_LD=$lt_cv_path_LD -if test -n "${lt_cv_prog_gnu_ldcxx+set}"; then - lt_cv_prog_gnu_ld=$lt_cv_prog_gnu_ldcxx -else - $as_unset lt_cv_prog_gnu_ld -fi -if test -n "${lt_cv_path_LDCXX+set}"; then - lt_cv_path_LD=$lt_cv_path_LDCXX -else - $as_unset lt_cv_path_LD -fi -test -z "${LDCXX+set}" || LD=$LDCXX -CC=${CXX-"c++"} -compiler=$CC -_LT_AC_TAGVAR(compiler, $1)=$CC -_LT_CC_BASENAME([$compiler]) - -# We don't want -fno-exception wen compiling C++ code, so set the -# no_builtin_flag separately -if test "$GXX" = yes; then - _LT_AC_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=' -fno-builtin' -else - _LT_AC_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)= -fi - -if test "$GXX" = yes; then - # Set up default GNU C++ configuration - - AC_PROG_LD - - # Check if GNU C++ uses GNU ld as the underlying linker, since the - # archiving commands below assume that GNU ld is being used. - if test "$with_gnu_ld" = yes; then - _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib' - _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' - - _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}--rpath ${wl}$libdir' - _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic' - - # If archive_cmds runs LD, not CC, wlarc should be empty - # XXX I think wlarc can be eliminated in ltcf-cxx, but I need to - # investigate it a little bit more. (MM) - wlarc='${wl}' - - # ancient GNU ld didn't support --whole-archive et. al. - if eval "`$CC -print-prog-name=ld` --help 2>&1" | \ - grep 'no-whole-archive' > /dev/null; then - _LT_AC_TAGVAR(whole_archive_flag_spec, $1)="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' - else - _LT_AC_TAGVAR(whole_archive_flag_spec, $1)= - fi - else - with_gnu_ld=no - wlarc= - - # A generic and very simple default shared library creation - # command for GNU C++ for the case where it uses the native - # linker, instead of GNU ld. If possible, this setting should - # overridden to take advantage of the native linker features on - # the platform it is being used on. - _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib' - fi - - # Commands to make compiler produce verbose output that lists - # what "hidden" libraries, object files and flags are used when - # linking a shared library. - output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep "\-L"' - -else - GXX=no - with_gnu_ld=no - wlarc= -fi - -# PORTME: fill in a description of your system's C++ link characteristics -AC_MSG_CHECKING([whether the $compiler linker ($LD) supports shared libraries]) -_LT_AC_TAGVAR(ld_shlibs, $1)=yes -case $host_os in - aix3*) - # FIXME: insert proper C++ library support - _LT_AC_TAGVAR(ld_shlibs, $1)=no - ;; - aix4* | aix5*) - if test "$host_cpu" = ia64; then - # On IA64, the linker does run time linking by default, so we don't - # have to do anything special. - aix_use_runtimelinking=no - exp_sym_flag='-Bexport' - no_entry_flag="" - else - aix_use_runtimelinking=no - - # Test if we are trying to use run time linking or normal - # AIX style linking. If -brtl is somewhere in LDFLAGS, we - # need to do runtime linking. - case $host_os in aix4.[[23]]|aix4.[[23]].*|aix5*) - for ld_flag in $LDFLAGS; do - case $ld_flag in - *-brtl*) - aix_use_runtimelinking=yes - break - ;; - esac - done - ;; - esac - - exp_sym_flag='-bexport' - no_entry_flag='-bnoentry' - fi - - # When large executables or shared objects are built, AIX ld can - # have problems creating the table of contents. If linking a library - # or program results in "error TOC overflow" add -mminimal-toc to - # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not - # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS. - - _LT_AC_TAGVAR(archive_cmds, $1)='' - _LT_AC_TAGVAR(hardcode_direct, $1)=yes - _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=':' - _LT_AC_TAGVAR(link_all_deplibs, $1)=yes - - if test "$GXX" = yes; then - case $host_os in aix4.[[012]]|aix4.[[012]].*) - # We only want to do this on AIX 4.2 and lower, the check - # below for broken collect2 doesn't work under 4.3+ - collect2name=`${CC} -print-prog-name=collect2` - if test -f "$collect2name" && \ - strings "$collect2name" | grep resolve_lib_name >/dev/null - then - # We have reworked collect2 - : - else - # We have old collect2 - _LT_AC_TAGVAR(hardcode_direct, $1)=unsupported - # It fails to find uninstalled libraries when the uninstalled - # path is not listed in the libpath. Setting hardcode_minus_L - # to unsupported forces relinking - _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes - _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' - _LT_AC_TAGVAR(hardcode_libdir_separator, $1)= - fi - ;; - esac - shared_flag='-shared' - if test "$aix_use_runtimelinking" = yes; then - shared_flag="$shared_flag "'${wl}-G' - fi - else - # not using gcc - if test "$host_cpu" = ia64; then - # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release - # chokes on -Wl,-G. The following line is correct: - shared_flag='-G' - else - if test "$aix_use_runtimelinking" = yes; then - shared_flag='${wl}-G' - else - shared_flag='${wl}-bM:SRE' - fi - fi - fi - - # It seems that -bexpall does not export symbols beginning with - # underscore (_), so it is better to generate a list of symbols to export. - _LT_AC_TAGVAR(always_export_symbols, $1)=yes - if test "$aix_use_runtimelinking" = yes; then - # Warning - without using the other runtime loading flags (-brtl), - # -berok will link without error, but may produce a broken library. - _LT_AC_TAGVAR(allow_undefined_flag, $1)='-berok' - # Determine the default libpath from the value encoded in an empty executable. - _LT_AC_SYS_LIBPATH_AIX - _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath" - - _LT_AC_TAGVAR(archive_expsym_cmds, $1)="\$CC"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then echo "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag" - else - if test "$host_cpu" = ia64; then - _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R $libdir:/usr/lib:/lib' - _LT_AC_TAGVAR(allow_undefined_flag, $1)="-z nodefs" - _LT_AC_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$exp_sym_flag:\$export_symbols" - else - # Determine the default libpath from the value encoded in an empty executable. - _LT_AC_SYS_LIBPATH_AIX - _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath" - # Warning - without using the other run time loading flags, - # -berok will link without error, but may produce a broken library. - _LT_AC_TAGVAR(no_undefined_flag, $1)=' ${wl}-bernotok' - _LT_AC_TAGVAR(allow_undefined_flag, $1)=' ${wl}-berok' - # Exported symbols can be pulled into shared objects from archives - _LT_AC_TAGVAR(whole_archive_flag_spec, $1)='$convenience' - _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=yes - # This is similar to how AIX traditionally builds its shared libraries. - _LT_AC_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs ${wl}-bnoentry $compiler_flags ${wl}-bE:$export_symbols${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname' - fi - fi - ;; - - beos*) - if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then - _LT_AC_TAGVAR(allow_undefined_flag, $1)=unsupported - # Joseph Beckenbach says some releases of gcc - # support --undefined. This deserves some investigation. FIXME - _LT_AC_TAGVAR(archive_cmds, $1)='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' - else - _LT_AC_TAGVAR(ld_shlibs, $1)=no - fi - ;; - - chorus*) - case $cc_basename in - *) - # FIXME: insert proper C++ library support - _LT_AC_TAGVAR(ld_shlibs, $1)=no - ;; - esac - ;; - - cygwin* | mingw* | pw32*) - # _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1) is actually meaningless, - # as there is no search path for DLLs. - _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' - _LT_AC_TAGVAR(allow_undefined_flag, $1)=unsupported - _LT_AC_TAGVAR(always_export_symbols, $1)=no - _LT_AC_TAGVAR(enable_shared_with_static_runtimes, $1)=yes - - if $LD --help 2>&1 | grep 'auto-import' > /dev/null; then - _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' - # If the export-symbols file already is a .def file (1st line - # is EXPORTS), use it as is; otherwise, prepend... - _LT_AC_TAGVAR(archive_expsym_cmds, $1)='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then - cp $export_symbols $output_objdir/$soname.def; - else - echo EXPORTS > $output_objdir/$soname.def; - cat $export_symbols >> $output_objdir/$soname.def; - fi~ - $CC -shared -nostdlib $output_objdir/$soname.def $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' - else - _LT_AC_TAGVAR(ld_shlibs, $1)=no - fi - ;; - darwin* | rhapsody*) - case $host_os in - rhapsody* | darwin1.[[012]]) - _LT_AC_TAGVAR(allow_undefined_flag, $1)='${wl}-undefined ${wl}suppress' - ;; - *) # Darwin 1.3 on - if test -z ${MACOSX_DEPLOYMENT_TARGET} ; then - _LT_AC_TAGVAR(allow_undefined_flag, $1)='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' - else - case ${MACOSX_DEPLOYMENT_TARGET} in - 10.[[012]]) - _LT_AC_TAGVAR(allow_undefined_flag, $1)='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' - ;; - 10.*) - _LT_AC_TAGVAR(allow_undefined_flag, $1)='${wl}-undefined ${wl}dynamic_lookup' - ;; - esac - fi - ;; - esac - _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=no - _LT_AC_TAGVAR(hardcode_direct, $1)=no - _LT_AC_TAGVAR(hardcode_automatic, $1)=yes - _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=unsupported - _LT_AC_TAGVAR(whole_archive_flag_spec, $1)='' - _LT_AC_TAGVAR(link_all_deplibs, $1)=yes - - if test "$GXX" = yes ; then - lt_int_apple_cc_single_mod=no - output_verbose_link_cmd='echo' - if $CC -dumpspecs 2>&1 | $EGREP 'single_module' >/dev/null ; then - lt_int_apple_cc_single_mod=yes - fi - if test "X$lt_int_apple_cc_single_mod" = Xyes ; then - _LT_AC_TAGVAR(archive_cmds, $1)='$CC -dynamiclib -single_module $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags -install_name $rpath/$soname $verstring' - else - _LT_AC_TAGVAR(archive_cmds, $1)='$CC -r -keep_private_externs -nostdlib -o ${lib}-master.o $libobjs~$CC -dynamiclib $allow_undefined_flag -o $lib ${lib}-master.o $deplibs $compiler_flags -install_name $rpath/$soname $verstring' - fi - _LT_AC_TAGVAR(module_cmds, $1)='$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags' - # Don't fix this by using the ld -exported_symbols_list flag, it doesn't exist in older darwin lds - if test "X$lt_int_apple_cc_single_mod" = Xyes ; then - _LT_AC_TAGVAR(archive_expsym_cmds, $1)='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -dynamiclib -single_module $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags -install_name $rpath/$soname $verstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' - else - _LT_AC_TAGVAR(archive_expsym_cmds, $1)='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -r -keep_private_externs -nostdlib -o ${lib}-master.o $libobjs~$CC -dynamiclib $allow_undefined_flag -o $lib ${lib}-master.o $deplibs $compiler_flags -install_name $rpath/$soname $verstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' - fi - _LT_AC_TAGVAR(module_expsym_cmds, $1)='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' - else - case $cc_basename in - xlc*) - output_verbose_link_cmd='echo' - _LT_AC_TAGVAR(archive_cmds, $1)='$CC -qmkshrobj ${wl}-single_module $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-install_name ${wl}`echo $rpath/$soname` $xlcverstring' - _LT_AC_TAGVAR(module_cmds, $1)='$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags' - # Don't fix this by using the ld -exported_symbols_list flag, it doesn't exist in older darwin lds - _LT_AC_TAGVAR(archive_expsym_cmds, $1)='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -qmkshrobj ${wl}-single_module $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-install_name ${wl}$rpath/$soname $xlcverstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' - _LT_AC_TAGVAR(module_expsym_cmds, $1)='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' - ;; - *) - _LT_AC_TAGVAR(ld_shlibs, $1)=no - ;; - esac - fi - ;; - - dgux*) - case $cc_basename in - ec++*) - # FIXME: insert proper C++ library support - _LT_AC_TAGVAR(ld_shlibs, $1)=no - ;; - ghcx*) - # Green Hills C++ Compiler - # FIXME: insert proper C++ library support - _LT_AC_TAGVAR(ld_shlibs, $1)=no - ;; - *) - # FIXME: insert proper C++ library support - _LT_AC_TAGVAR(ld_shlibs, $1)=no - ;; - esac - ;; - freebsd[[12]]*) - # C++ shared libraries reported to be fairly broken before switch to ELF - _LT_AC_TAGVAR(ld_shlibs, $1)=no - ;; - freebsd-elf*) - _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=no - ;; - freebsd* | dragonfly*) - # FreeBSD 3 and later use GNU C++ and GNU ld with standard ELF - # conventions - _LT_AC_TAGVAR(ld_shlibs, $1)=yes - ;; - gnu*) - ;; - hpux9*) - _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir' - _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=: - _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' - _LT_AC_TAGVAR(hardcode_direct, $1)=yes - _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes # Not in the search PATH, - # but as the default - # location of the library. - - case $cc_basename in - CC*) - # FIXME: insert proper C++ library support - _LT_AC_TAGVAR(ld_shlibs, $1)=no - ;; - aCC*) - _LT_AC_TAGVAR(archive_cmds, $1)='$rm $output_objdir/$soname~$CC -b ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' - # Commands to make compiler produce verbose output that lists - # what "hidden" libraries, object files and flags are used when - # linking a shared library. - # - # There doesn't appear to be a way to prevent this compiler from - # explicitly linking system object files so we need to strip them - # from the output so that they don't get included in the library - # dependencies. - output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | grep "[[-]]L"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; echo $list' - ;; - *) - if test "$GXX" = yes; then - _LT_AC_TAGVAR(archive_cmds, $1)='$rm $output_objdir/$soname~$CC -shared -nostdlib -fPIC ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' - else - # FIXME: insert proper C++ library support - _LT_AC_TAGVAR(ld_shlibs, $1)=no - fi - ;; - esac - ;; - hpux10*|hpux11*) - if test $with_gnu_ld = no; then - _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir' - _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=: - - case $host_cpu in - hppa*64*|ia64*) ;; - *) - _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' - ;; - esac - fi - case $host_cpu in - hppa*64*|ia64*) - _LT_AC_TAGVAR(hardcode_direct, $1)=no - _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no - ;; - *) - _LT_AC_TAGVAR(hardcode_direct, $1)=yes - _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes # Not in the search PATH, - # but as the default - # location of the library. - ;; - esac - - case $cc_basename in - CC*) - # FIXME: insert proper C++ library support - _LT_AC_TAGVAR(ld_shlibs, $1)=no - ;; - aCC*) - case $host_cpu in - hppa*64*) - _LT_AC_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' - ;; - ia64*) - _LT_AC_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' - ;; - *) - _LT_AC_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' - ;; - esac - # Commands to make compiler produce verbose output that lists - # what "hidden" libraries, object files and flags are used when - # linking a shared library. - # - # There doesn't appear to be a way to prevent this compiler from - # explicitly linking system object files so we need to strip them - # from the output so that they don't get included in the library - # dependencies. - output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | grep "\-L"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; echo $list' - ;; - *) - if test "$GXX" = yes; then - if test $with_gnu_ld = no; then - case $host_cpu in - hppa*64*) - _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib -fPIC ${wl}+h ${wl}$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' - ;; - ia64*) - _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib -fPIC ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' - ;; - *) - _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' - ;; - esac - fi - else - # FIXME: insert proper C++ library support - _LT_AC_TAGVAR(ld_shlibs, $1)=no - fi - ;; - esac - ;; - interix[[3-9]]*) - _LT_AC_TAGVAR(hardcode_direct, $1)=no - _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no - _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' - _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' - # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc. - # Instead, shared libraries are loaded at an image base (0x10000000 by - # default) and relocated if they conflict, which is a slow very memory - # consuming and fragmenting process. To avoid this, we pick a random, - # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link - # time. Moving up from 0x10000000 also allows more sbrk(2) space. - _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' - _LT_AC_TAGVAR(archive_expsym_cmds, $1)='sed "s,^,_," $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--retain-symbols-file,$output_objdir/$soname.expsym ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' - ;; - irix5* | irix6*) - case $cc_basename in - CC*) - # SGI C++ - _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -all -multigot $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib' - - # Archives containing C++ object files must be created using - # "CC -ar", where "CC" is the IRIX C++ compiler. This is - # necessary to make sure instantiated templates are included - # in the archive. - _LT_AC_TAGVAR(old_archive_cmds, $1)='$CC -ar -WR,-u -o $oldlib $oldobjs' - ;; - *) - if test "$GXX" = yes; then - if test "$with_gnu_ld" = no; then - _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' - else - _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` -o $lib' - fi - fi - _LT_AC_TAGVAR(link_all_deplibs, $1)=yes - ;; - esac - _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' - _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=: - ;; - linux* | k*bsd*-gnu) - case $cc_basename in - KCC*) - # Kuck and Associates, Inc. (KAI) C++ Compiler - - # KCC will only create a shared library if the output file - # ends with ".so" (or ".sl" for HP-UX), so rename the library - # to its proper name (with version) after linking. - _LT_AC_TAGVAR(archive_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib' - _LT_AC_TAGVAR(archive_expsym_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib ${wl}-retain-symbols-file,$export_symbols; mv \$templib $lib' - # Commands to make compiler produce verbose output that lists - # what "hidden" libraries, object files and flags are used when - # linking a shared library. - # - # There doesn't appear to be a way to prevent this compiler from - # explicitly linking system object files so we need to strip them - # from the output so that they don't get included in the library - # dependencies. - output_verbose_link_cmd='templist=`$CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1 | grep "ld"`; rm -f libconftest$shared_ext; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; echo $list' - - _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}--rpath,$libdir' - _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic' - - # Archives containing C++ object files must be created using - # "CC -Bstatic", where "CC" is the KAI C++ compiler. - _LT_AC_TAGVAR(old_archive_cmds, $1)='$CC -Bstatic -o $oldlib $oldobjs' - ;; - icpc*) - # Intel C++ - with_gnu_ld=yes - # version 8.0 and above of icpc choke on multiply defined symbols - # if we add $predep_objects and $postdep_objects, however 7.1 and - # earlier do not add the objects themselves. - case `$CC -V 2>&1` in - *"Version 7."*) - _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib' - _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' - ;; - *) # Version 8.0 or newer - tmp_idyn= - case $host_cpu in - ia64*) tmp_idyn=' -i_dynamic';; - esac - _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared'"$tmp_idyn"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' - _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -shared'"$tmp_idyn"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' - ;; - esac - _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=no - _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' - _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic' - _LT_AC_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive$convenience ${wl}--no-whole-archive' - ;; - pgCC*) - # Portland Group C++ compiler - _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname -o $lib' - _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname ${wl}-retain-symbols-file ${wl}$export_symbols -o $lib' - - _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}--rpath ${wl}$libdir' - _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic' - _LT_AC_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $echo \"$new_convenience\"` ${wl}--no-whole-archive' - ;; - cxx*) - # Compaq C++ - _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib' - _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib ${wl}-retain-symbols-file $wl$export_symbols' - - runpath_var=LD_RUN_PATH - _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir' - _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=: - - # Commands to make compiler produce verbose output that lists - # what "hidden" libraries, object files and flags are used when - # linking a shared library. - # - # There doesn't appear to be a way to prevent this compiler from - # explicitly linking system object files so we need to strip them - # from the output so that they don't get included in the library - # dependencies. - output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep "ld"`; templist=`echo $templist | $SED "s/\(^.*ld.*\)\( .*ld .*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; echo $list' - ;; - *) - case `$CC -V 2>&1 | sed 5q` in - *Sun\ C*) - # Sun C++ 5.9 - _LT_AC_TAGVAR(no_undefined_flag, $1)=' -zdefs' - _LT_AC_TAGVAR(archive_cmds, $1)='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' - _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-retain-symbols-file ${wl}$export_symbols' - _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' - _LT_AC_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; $echo \"$new_convenience\"` ${wl}--no-whole-archive' - - # Not sure whether something based on - # $CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1 - # would be better. - output_verbose_link_cmd='echo' - - # Archives containing C++ object files must be created using - # "CC -xar", where "CC" is the Sun C++ compiler. This is - # necessary to make sure instantiated templates are included - # in the archive. - _LT_AC_TAGVAR(old_archive_cmds, $1)='$CC -xar -o $oldlib $oldobjs' - ;; - esac - ;; - esac - ;; - lynxos*) - # FIXME: insert proper C++ library support - _LT_AC_TAGVAR(ld_shlibs, $1)=no - ;; - m88k*) - # FIXME: insert proper C++ library support - _LT_AC_TAGVAR(ld_shlibs, $1)=no - ;; - mvs*) - case $cc_basename in - cxx*) - # FIXME: insert proper C++ library support - _LT_AC_TAGVAR(ld_shlibs, $1)=no - ;; - *) - # FIXME: insert proper C++ library support - _LT_AC_TAGVAR(ld_shlibs, $1)=no - ;; - esac - ;; - netbsd*) - if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then - _LT_AC_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $predep_objects $libobjs $deplibs $postdep_objects $linker_flags' - wlarc= - _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' - _LT_AC_TAGVAR(hardcode_direct, $1)=yes - _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no - fi - # Workaround some broken pre-1.5 toolchains - output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep conftest.$objext | $SED -e "s:-lgcc -lc -lgcc::"' - ;; - openbsd2*) - # C++ shared libraries are fairly broken - _LT_AC_TAGVAR(ld_shlibs, $1)=no - ;; - openbsd*) - if test -f /usr/libexec/ld.so; then - _LT_AC_TAGVAR(hardcode_direct, $1)=yes - _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no - _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib' - _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' - if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then - _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-retain-symbols-file,$export_symbols -o $lib' - _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' - _LT_AC_TAGVAR(whole_archive_flag_spec, $1)="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' - fi - output_verbose_link_cmd='echo' - else - _LT_AC_TAGVAR(ld_shlibs, $1)=no - fi - ;; - osf3*) - case $cc_basename in - KCC*) - # Kuck and Associates, Inc. (KAI) C++ Compiler - - # KCC will only create a shared library if the output file - # ends with ".so" (or ".sl" for HP-UX), so rename the library - # to its proper name (with version) after linking. - _LT_AC_TAGVAR(archive_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib' - - _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' - _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=: - - # Archives containing C++ object files must be created using - # "CC -Bstatic", where "CC" is the KAI C++ compiler. - _LT_AC_TAGVAR(old_archive_cmds, $1)='$CC -Bstatic -o $oldlib $oldobjs' - - ;; - RCC*) - # Rational C++ 2.4.1 - # FIXME: insert proper C++ library support - _LT_AC_TAGVAR(ld_shlibs, $1)=no - ;; - cxx*) - _LT_AC_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*' - _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $soname `test -n "$verstring" && echo ${wl}-set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib' - - _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' - _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=: - - # Commands to make compiler produce verbose output that lists - # what "hidden" libraries, object files and flags are used when - # linking a shared library. - # - # There doesn't appear to be a way to prevent this compiler from - # explicitly linking system object files so we need to strip them - # from the output so that they don't get included in the library - # dependencies. - output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep "ld" | grep -v "ld:"`; templist=`echo $templist | $SED "s/\(^.*ld.*\)\( .*ld.*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; echo $list' - ;; - *) - if test "$GXX" = yes && test "$with_gnu_ld" = no; then - _LT_AC_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*' - _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' - - _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' - _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=: - - # Commands to make compiler produce verbose output that lists - # what "hidden" libraries, object files and flags are used when - # linking a shared library. - output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep "\-L"' - - else - # FIXME: insert proper C++ library support - _LT_AC_TAGVAR(ld_shlibs, $1)=no - fi - ;; - esac - ;; - osf4* | osf5*) - case $cc_basename in - KCC*) - # Kuck and Associates, Inc. (KAI) C++ Compiler - - # KCC will only create a shared library if the output file - # ends with ".so" (or ".sl" for HP-UX), so rename the library - # to its proper name (with version) after linking. - _LT_AC_TAGVAR(archive_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib' - - _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' - _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=: - - # Archives containing C++ object files must be created using - # the KAI C++ compiler. - _LT_AC_TAGVAR(old_archive_cmds, $1)='$CC -o $oldlib $oldobjs' - ;; - RCC*) - # Rational C++ 2.4.1 - # FIXME: insert proper C++ library support - _LT_AC_TAGVAR(ld_shlibs, $1)=no - ;; - cxx*) - _LT_AC_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*' - _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib' - _LT_AC_TAGVAR(archive_expsym_cmds, $1)='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done~ - echo "-hidden">> $lib.exp~ - $CC -shared$allow_undefined_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname -Wl,-input -Wl,$lib.exp `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib~ - $rm $lib.exp' - - _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir' - _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=: - - # Commands to make compiler produce verbose output that lists - # what "hidden" libraries, object files and flags are used when - # linking a shared library. - # - # There doesn't appear to be a way to prevent this compiler from - # explicitly linking system object files so we need to strip them - # from the output so that they don't get included in the library - # dependencies. - output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep "ld" | grep -v "ld:"`; templist=`echo $templist | $SED "s/\(^.*ld.*\)\( .*ld.*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; echo $list' - ;; - *) - if test "$GXX" = yes && test "$with_gnu_ld" = no; then - _LT_AC_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*' - _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' - - _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' - _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=: - - # Commands to make compiler produce verbose output that lists - # what "hidden" libraries, object files and flags are used when - # linking a shared library. - output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep "\-L"' - - else - # FIXME: insert proper C++ library support - _LT_AC_TAGVAR(ld_shlibs, $1)=no - fi - ;; - esac - ;; - psos*) - # FIXME: insert proper C++ library support - _LT_AC_TAGVAR(ld_shlibs, $1)=no - ;; - sunos4*) - case $cc_basename in - CC*) - # Sun C++ 4.x - # FIXME: insert proper C++ library support - _LT_AC_TAGVAR(ld_shlibs, $1)=no - ;; - lcc*) - # Lucid - # FIXME: insert proper C++ library support - _LT_AC_TAGVAR(ld_shlibs, $1)=no - ;; - *) - # FIXME: insert proper C++ library support - _LT_AC_TAGVAR(ld_shlibs, $1)=no - ;; - esac - ;; - solaris*) - case $cc_basename in - CC*) - # Sun C++ 4.2, 5.x and Centerline C++ - _LT_AC_TAGVAR(archive_cmds_need_lc,$1)=yes - _LT_AC_TAGVAR(no_undefined_flag, $1)=' -zdefs' - _LT_AC_TAGVAR(archive_cmds, $1)='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' - _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~ - $CC -G${allow_undefined_flag} ${wl}-M ${wl}$lib.exp -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$rm $lib.exp' - - _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' - _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no - case $host_os in - solaris2.[[0-5]] | solaris2.[[0-5]].*) ;; - *) - # The compiler driver will combine and reorder linker options, - # but understands `-z linker_flag'. - # Supported since Solaris 2.6 (maybe 2.5.1?) - _LT_AC_TAGVAR(whole_archive_flag_spec, $1)='-z allextract$convenience -z defaultextract' - ;; - esac - _LT_AC_TAGVAR(link_all_deplibs, $1)=yes - - output_verbose_link_cmd='echo' - - # Archives containing C++ object files must be created using - # "CC -xar", where "CC" is the Sun C++ compiler. This is - # necessary to make sure instantiated templates are included - # in the archive. - _LT_AC_TAGVAR(old_archive_cmds, $1)='$CC -xar -o $oldlib $oldobjs' - ;; - gcx*) - # Green Hills C++ Compiler - _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib' - - # The C++ compiler must be used to create the archive. - _LT_AC_TAGVAR(old_archive_cmds, $1)='$CC $LDFLAGS -archive -o $oldlib $oldobjs' - ;; - *) - # GNU C++ compiler with Solaris linker - if test "$GXX" = yes && test "$with_gnu_ld" = no; then - _LT_AC_TAGVAR(no_undefined_flag, $1)=' ${wl}-z ${wl}defs' - if $CC --version | grep -v '^2\.7' > /dev/null; then - _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $LDFLAGS $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib' - _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~ - $CC -shared -nostdlib ${wl}-M $wl$lib.exp -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$rm $lib.exp' - - # Commands to make compiler produce verbose output that lists - # what "hidden" libraries, object files and flags are used when - # linking a shared library. - output_verbose_link_cmd="$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep \"\-L\"" - else - # g++ 2.7 appears to require `-G' NOT `-shared' on this - # platform. - _LT_AC_TAGVAR(archive_cmds, $1)='$CC -G -nostdlib $LDFLAGS $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib' - _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~ - $CC -G -nostdlib ${wl}-M $wl$lib.exp -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$rm $lib.exp' - - # Commands to make compiler produce verbose output that lists - # what "hidden" libraries, object files and flags are used when - # linking a shared library. - output_verbose_link_cmd="$CC -G $CFLAGS -v conftest.$objext 2>&1 | grep \"\-L\"" - fi - - _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R $wl$libdir' - case $host_os in - solaris2.[[0-5]] | solaris2.[[0-5]].*) ;; - *) - _LT_AC_TAGVAR(whole_archive_flag_spec, $1)='${wl}-z ${wl}allextract$convenience ${wl}-z ${wl}defaultextract' - ;; - esac - fi - ;; - esac - ;; - sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[[01]].[[10]]* | unixware7* | sco3.2v5.0.[[024]]*) - _LT_AC_TAGVAR(no_undefined_flag, $1)='${wl}-z,text' - _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=no - _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no - runpath_var='LD_RUN_PATH' - - case $cc_basename in - CC*) - _LT_AC_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - ;; - *) - _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - ;; - esac - ;; - sysv5* | sco3.2v5* | sco5v6*) - # Note: We can NOT use -z defs as we might desire, because we do not - # link with -lc, and that would cause any symbols used from libc to - # always be unresolved, which means just about no library would - # ever link correctly. If we're not using GNU ld we use -z text - # though, which does catch some bad symbols but isn't as heavy-handed - # as -z defs. - # For security reasons, it is highly recommended that you always - # use absolute paths for naming shared libraries, and exclude the - # DT_RUNPATH tag from executables and libraries. But doing so - # requires that you compile everything twice, which is a pain. - # So that behaviour is only enabled if SCOABSPATH is set to a - # non-empty value in the environment. Most likely only useful for - # creating official distributions of packages. - # This is a hack until libtool officially supports absolute path - # names for shared libraries. - _LT_AC_TAGVAR(no_undefined_flag, $1)='${wl}-z,text' - _LT_AC_TAGVAR(allow_undefined_flag, $1)='${wl}-z,nodefs' - _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=no - _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no - _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='`test -z "$SCOABSPATH" && echo ${wl}-R,$libdir`' - _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=':' - _LT_AC_TAGVAR(link_all_deplibs, $1)=yes - _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-Bexport' - runpath_var='LD_RUN_PATH' - - case $cc_basename in - CC*) - _LT_AC_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags' - _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags' - ;; - *) - _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags' - _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags' - ;; - esac - ;; - tandem*) - case $cc_basename in - NCC*) - # NonStop-UX NCC 3.20 - # FIXME: insert proper C++ library support - _LT_AC_TAGVAR(ld_shlibs, $1)=no - ;; - *) - # FIXME: insert proper C++ library support - _LT_AC_TAGVAR(ld_shlibs, $1)=no - ;; - esac - ;; - vxworks*) - # FIXME: insert proper C++ library support - _LT_AC_TAGVAR(ld_shlibs, $1)=no - ;; - *) - # FIXME: insert proper C++ library support - _LT_AC_TAGVAR(ld_shlibs, $1)=no - ;; -esac -AC_MSG_RESULT([$_LT_AC_TAGVAR(ld_shlibs, $1)]) -test "$_LT_AC_TAGVAR(ld_shlibs, $1)" = no && can_build_shared=no - -_LT_AC_TAGVAR(GCC, $1)="$GXX" -_LT_AC_TAGVAR(LD, $1)="$LD" - -AC_LIBTOOL_POSTDEP_PREDEP($1) -AC_LIBTOOL_PROG_COMPILER_PIC($1) -AC_LIBTOOL_PROG_CC_C_O($1) -AC_LIBTOOL_SYS_HARD_LINK_LOCKS($1) -AC_LIBTOOL_PROG_LD_SHLIBS($1) -AC_LIBTOOL_SYS_DYNAMIC_LINKER($1) -AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH($1) - -AC_LIBTOOL_CONFIG($1) - -AC_LANG_POP -CC=$lt_save_CC -LDCXX=$LD -LD=$lt_save_LD -GCC=$lt_save_GCC -with_gnu_ldcxx=$with_gnu_ld -with_gnu_ld=$lt_save_with_gnu_ld -lt_cv_path_LDCXX=$lt_cv_path_LD -lt_cv_path_LD=$lt_save_path_LD -lt_cv_prog_gnu_ldcxx=$lt_cv_prog_gnu_ld -lt_cv_prog_gnu_ld=$lt_save_with_gnu_ld -])# AC_LIBTOOL_LANG_CXX_CONFIG - -# AC_LIBTOOL_POSTDEP_PREDEP([TAGNAME]) -# ------------------------------------ -# Figure out "hidden" library dependencies from verbose -# compiler output when linking a shared library. -# Parse the compiler output and extract the necessary -# objects, libraries and library flags. -AC_DEFUN([AC_LIBTOOL_POSTDEP_PREDEP],[ -dnl we can't use the lt_simple_compile_test_code here, -dnl because it contains code intended for an executable, -dnl not a library. It's possible we should let each -dnl tag define a new lt_????_link_test_code variable, -dnl but it's only used here... -ifelse([$1],[],[cat > conftest.$ac_ext < conftest.$ac_ext < conftest.$ac_ext < conftest.$ac_ext <&1 | sed 5q` in - *Sun\ C*) - # Sun C++ 5.9 - # - # The more standards-conforming stlport4 library is - # incompatible with the Cstd library. Avoid specifying - # it if it's in CXXFLAGS. Ignore libCrun as - # -library=stlport4 depends on it. - case " $CXX $CXXFLAGS " in - *" -library=stlport4 "*) - solaris_use_stlport4=yes - ;; - esac - if test "$solaris_use_stlport4" != yes; then - _LT_AC_TAGVAR(postdeps,$1)='-library=Cstd -library=Crun' - fi - ;; - esac - ;; - -solaris*) - case $cc_basename in - CC*) - # The more standards-conforming stlport4 library is - # incompatible with the Cstd library. Avoid specifying - # it if it's in CXXFLAGS. Ignore libCrun as - # -library=stlport4 depends on it. - case " $CXX $CXXFLAGS " in - *" -library=stlport4 "*) - solaris_use_stlport4=yes - ;; - esac - - # Adding this requires a known-good setup of shared libraries for - # Sun compiler versions before 5.6, else PIC objects from an old - # archive will be linked into the output, leading to subtle bugs. - if test "$solaris_use_stlport4" != yes; then - _LT_AC_TAGVAR(postdeps,$1)='-library=Cstd -library=Crun' - fi - ;; - esac - ;; -esac -]) - -case " $_LT_AC_TAGVAR(postdeps, $1) " in -*" -lc "*) _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=no ;; -esac -])# AC_LIBTOOL_POSTDEP_PREDEP - -# AC_LIBTOOL_LANG_F77_CONFIG -# -------------------------- -# Ensure that the configuration vars for the C compiler are -# suitably defined. Those variables are subsequently used by -# AC_LIBTOOL_CONFIG to write the compiler configuration to `libtool'. -AC_DEFUN([AC_LIBTOOL_LANG_F77_CONFIG], [_LT_AC_LANG_F77_CONFIG(F77)]) -AC_DEFUN([_LT_AC_LANG_F77_CONFIG], -[AC_REQUIRE([AC_PROG_F77]) -AC_LANG_PUSH(Fortran 77) - -_LT_AC_TAGVAR(archive_cmds_need_lc, $1)=no -_LT_AC_TAGVAR(allow_undefined_flag, $1)= -_LT_AC_TAGVAR(always_export_symbols, $1)=no -_LT_AC_TAGVAR(archive_expsym_cmds, $1)= -_LT_AC_TAGVAR(export_dynamic_flag_spec, $1)= -_LT_AC_TAGVAR(hardcode_direct, $1)=no -_LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)= -_LT_AC_TAGVAR(hardcode_libdir_flag_spec_ld, $1)= -_LT_AC_TAGVAR(hardcode_libdir_separator, $1)= -_LT_AC_TAGVAR(hardcode_minus_L, $1)=no -_LT_AC_TAGVAR(hardcode_automatic, $1)=no -_LT_AC_TAGVAR(module_cmds, $1)= -_LT_AC_TAGVAR(module_expsym_cmds, $1)= -_LT_AC_TAGVAR(link_all_deplibs, $1)=unknown -_LT_AC_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds -_LT_AC_TAGVAR(no_undefined_flag, $1)= -_LT_AC_TAGVAR(whole_archive_flag_spec, $1)= -_LT_AC_TAGVAR(enable_shared_with_static_runtimes, $1)=no - -# Source file extension for f77 test sources. -ac_ext=f - -# Object file extension for compiled f77 test sources. -objext=o -_LT_AC_TAGVAR(objext, $1)=$objext - -# Code to be used in simple compile tests -lt_simple_compile_test_code="\ - subroutine t - return - end -" - -# Code to be used in simple link tests -lt_simple_link_test_code="\ - program t - end -" - -# ltmain only uses $CC for tagged configurations so make sure $CC is set. -_LT_AC_SYS_COMPILER - -# save warnings/boilerplate of simple test code -_LT_COMPILER_BOILERPLATE -_LT_LINKER_BOILERPLATE - -# Allow CC to be a program name with arguments. -lt_save_CC="$CC" -CC=${F77-"f77"} -compiler=$CC -_LT_AC_TAGVAR(compiler, $1)=$CC -_LT_CC_BASENAME([$compiler]) - -AC_MSG_CHECKING([if libtool supports shared libraries]) -AC_MSG_RESULT([$can_build_shared]) - -AC_MSG_CHECKING([whether to build shared libraries]) -test "$can_build_shared" = "no" && enable_shared=no - -# On AIX, shared libraries and static libraries use the same namespace, and -# are all built from PIC. -case $host_os in -aix3*) - test "$enable_shared" = yes && enable_static=no - if test -n "$RANLIB"; then - archive_cmds="$archive_cmds~\$RANLIB \$lib" - postinstall_cmds='$RANLIB $lib' - fi - ;; -aix4* | aix5*) - if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then - test "$enable_shared" = yes && enable_static=no - fi - ;; -esac -AC_MSG_RESULT([$enable_shared]) - -AC_MSG_CHECKING([whether to build static libraries]) -# Make sure either enable_shared or enable_static is yes. -test "$enable_shared" = yes || enable_static=yes -AC_MSG_RESULT([$enable_static]) - -_LT_AC_TAGVAR(GCC, $1)="$G77" -_LT_AC_TAGVAR(LD, $1)="$LD" - -AC_LIBTOOL_PROG_COMPILER_PIC($1) -AC_LIBTOOL_PROG_CC_C_O($1) -AC_LIBTOOL_SYS_HARD_LINK_LOCKS($1) -AC_LIBTOOL_PROG_LD_SHLIBS($1) -AC_LIBTOOL_SYS_DYNAMIC_LINKER($1) -AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH($1) - -AC_LIBTOOL_CONFIG($1) - -AC_LANG_POP -CC="$lt_save_CC" -])# AC_LIBTOOL_LANG_F77_CONFIG - - -# AC_LIBTOOL_LANG_GCJ_CONFIG -# -------------------------- -# Ensure that the configuration vars for the C compiler are -# suitably defined. Those variables are subsequently used by -# AC_LIBTOOL_CONFIG to write the compiler configuration to `libtool'. -AC_DEFUN([AC_LIBTOOL_LANG_GCJ_CONFIG], [_LT_AC_LANG_GCJ_CONFIG(GCJ)]) -AC_DEFUN([_LT_AC_LANG_GCJ_CONFIG], -[AC_LANG_SAVE - -# Source file extension for Java test sources. -ac_ext=java - -# Object file extension for compiled Java test sources. -objext=o -_LT_AC_TAGVAR(objext, $1)=$objext - -# Code to be used in simple compile tests -lt_simple_compile_test_code="class foo {}" - -# Code to be used in simple link tests -lt_simple_link_test_code='public class conftest { public static void main(String[[]] argv) {}; }' - -# ltmain only uses $CC for tagged configurations so make sure $CC is set. -_LT_AC_SYS_COMPILER - -# save warnings/boilerplate of simple test code -_LT_COMPILER_BOILERPLATE -_LT_LINKER_BOILERPLATE - -# Allow CC to be a program name with arguments. -lt_save_CC="$CC" -CC=${GCJ-"gcj"} -compiler=$CC -_LT_AC_TAGVAR(compiler, $1)=$CC -_LT_CC_BASENAME([$compiler]) - -# GCJ did not exist at the time GCC didn't implicitly link libc in. -_LT_AC_TAGVAR(archive_cmds_need_lc, $1)=no - -_LT_AC_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds - -AC_LIBTOOL_PROG_COMPILER_NO_RTTI($1) -AC_LIBTOOL_PROG_COMPILER_PIC($1) -AC_LIBTOOL_PROG_CC_C_O($1) -AC_LIBTOOL_SYS_HARD_LINK_LOCKS($1) -AC_LIBTOOL_PROG_LD_SHLIBS($1) -AC_LIBTOOL_SYS_DYNAMIC_LINKER($1) -AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH($1) - -AC_LIBTOOL_CONFIG($1) - -AC_LANG_RESTORE -CC="$lt_save_CC" -])# AC_LIBTOOL_LANG_GCJ_CONFIG - - -# AC_LIBTOOL_LANG_RC_CONFIG -# ------------------------- -# Ensure that the configuration vars for the Windows resource compiler are -# suitably defined. Those variables are subsequently used by -# AC_LIBTOOL_CONFIG to write the compiler configuration to `libtool'. -AC_DEFUN([AC_LIBTOOL_LANG_RC_CONFIG], [_LT_AC_LANG_RC_CONFIG(RC)]) -AC_DEFUN([_LT_AC_LANG_RC_CONFIG], -[AC_LANG_SAVE - -# Source file extension for RC test sources. -ac_ext=rc - -# Object file extension for compiled RC test sources. -objext=o -_LT_AC_TAGVAR(objext, $1)=$objext - -# Code to be used in simple compile tests -lt_simple_compile_test_code='sample MENU { MENUITEM "&Soup", 100, CHECKED }' - -# Code to be used in simple link tests -lt_simple_link_test_code="$lt_simple_compile_test_code" - -# ltmain only uses $CC for tagged configurations so make sure $CC is set. -_LT_AC_SYS_COMPILER - -# save warnings/boilerplate of simple test code -_LT_COMPILER_BOILERPLATE -_LT_LINKER_BOILERPLATE - -# Allow CC to be a program name with arguments. -lt_save_CC="$CC" -CC=${RC-"windres"} -compiler=$CC -_LT_AC_TAGVAR(compiler, $1)=$CC -_LT_CC_BASENAME([$compiler]) -_LT_AC_TAGVAR(lt_cv_prog_compiler_c_o, $1)=yes - -AC_LIBTOOL_CONFIG($1) - -AC_LANG_RESTORE -CC="$lt_save_CC" -])# AC_LIBTOOL_LANG_RC_CONFIG - - -# AC_LIBTOOL_CONFIG([TAGNAME]) -# ---------------------------- -# If TAGNAME is not passed, then create an initial libtool script -# with a default configuration from the untagged config vars. Otherwise -# add code to config.status for appending the configuration named by -# TAGNAME from the matching tagged config vars. -AC_DEFUN([AC_LIBTOOL_CONFIG], -[# The else clause should only fire when bootstrapping the -# libtool distribution, otherwise you forgot to ship ltmain.sh -# with your package, and you will get complaints that there are -# no rules to generate ltmain.sh. -if test -f "$ltmain"; then - # See if we are running on zsh, and set the options which allow our commands through - # without removal of \ escapes. - if test -n "${ZSH_VERSION+set}" ; then - setopt NO_GLOB_SUBST - fi - # Now quote all the things that may contain metacharacters while being - # careful not to overquote the AC_SUBSTed values. We take copies of the - # variables and quote the copies for generation of the libtool script. - for var in echo old_CC old_CFLAGS AR AR_FLAGS EGREP RANLIB LN_S LTCC LTCFLAGS NM \ - SED SHELL STRIP \ - libname_spec library_names_spec soname_spec extract_expsyms_cmds \ - old_striplib striplib file_magic_cmd finish_cmds finish_eval \ - deplibs_check_method reload_flag reload_cmds need_locks \ - lt_cv_sys_global_symbol_pipe lt_cv_sys_global_symbol_to_cdecl \ - lt_cv_sys_global_symbol_to_c_name_address \ - sys_lib_search_path_spec sys_lib_dlsearch_path_spec \ - old_postinstall_cmds old_postuninstall_cmds \ - _LT_AC_TAGVAR(compiler, $1) \ - _LT_AC_TAGVAR(CC, $1) \ - _LT_AC_TAGVAR(LD, $1) \ - _LT_AC_TAGVAR(lt_prog_compiler_wl, $1) \ - _LT_AC_TAGVAR(lt_prog_compiler_pic, $1) \ - _LT_AC_TAGVAR(lt_prog_compiler_static, $1) \ - _LT_AC_TAGVAR(lt_prog_compiler_no_builtin_flag, $1) \ - _LT_AC_TAGVAR(export_dynamic_flag_spec, $1) \ - _LT_AC_TAGVAR(thread_safe_flag_spec, $1) \ - _LT_AC_TAGVAR(whole_archive_flag_spec, $1) \ - _LT_AC_TAGVAR(enable_shared_with_static_runtimes, $1) \ - _LT_AC_TAGVAR(old_archive_cmds, $1) \ - _LT_AC_TAGVAR(old_archive_from_new_cmds, $1) \ - _LT_AC_TAGVAR(predep_objects, $1) \ - _LT_AC_TAGVAR(postdep_objects, $1) \ - _LT_AC_TAGVAR(predeps, $1) \ - _LT_AC_TAGVAR(postdeps, $1) \ - _LT_AC_TAGVAR(compiler_lib_search_path, $1) \ - _LT_AC_TAGVAR(archive_cmds, $1) \ - _LT_AC_TAGVAR(archive_expsym_cmds, $1) \ - _LT_AC_TAGVAR(postinstall_cmds, $1) \ - _LT_AC_TAGVAR(postuninstall_cmds, $1) \ - _LT_AC_TAGVAR(old_archive_from_expsyms_cmds, $1) \ - _LT_AC_TAGVAR(allow_undefined_flag, $1) \ - _LT_AC_TAGVAR(no_undefined_flag, $1) \ - _LT_AC_TAGVAR(export_symbols_cmds, $1) \ - _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1) \ - _LT_AC_TAGVAR(hardcode_libdir_flag_spec_ld, $1) \ - _LT_AC_TAGVAR(hardcode_libdir_separator, $1) \ - _LT_AC_TAGVAR(hardcode_automatic, $1) \ - _LT_AC_TAGVAR(module_cmds, $1) \ - _LT_AC_TAGVAR(module_expsym_cmds, $1) \ - _LT_AC_TAGVAR(lt_cv_prog_compiler_c_o, $1) \ - _LT_AC_TAGVAR(fix_srcfile_path, $1) \ - _LT_AC_TAGVAR(exclude_expsyms, $1) \ - _LT_AC_TAGVAR(include_expsyms, $1); do - - case $var in - _LT_AC_TAGVAR(old_archive_cmds, $1) | \ - _LT_AC_TAGVAR(old_archive_from_new_cmds, $1) | \ - _LT_AC_TAGVAR(archive_cmds, $1) | \ - _LT_AC_TAGVAR(archive_expsym_cmds, $1) | \ - _LT_AC_TAGVAR(module_cmds, $1) | \ - _LT_AC_TAGVAR(module_expsym_cmds, $1) | \ - _LT_AC_TAGVAR(old_archive_from_expsyms_cmds, $1) | \ - _LT_AC_TAGVAR(export_symbols_cmds, $1) | \ - extract_expsyms_cmds | reload_cmds | finish_cmds | \ - postinstall_cmds | postuninstall_cmds | \ - old_postinstall_cmds | old_postuninstall_cmds | \ - sys_lib_search_path_spec | sys_lib_dlsearch_path_spec) - # Double-quote double-evaled strings. - eval "lt_$var=\\\"\`\$echo \"X\$$var\" | \$Xsed -e \"\$double_quote_subst\" -e \"\$sed_quote_subst\" -e \"\$delay_variable_subst\"\`\\\"" - ;; - *) - eval "lt_$var=\\\"\`\$echo \"X\$$var\" | \$Xsed -e \"\$sed_quote_subst\"\`\\\"" - ;; - esac - done - - case $lt_echo in - *'\[$]0 --fallback-echo"') - lt_echo=`$echo "X$lt_echo" | $Xsed -e 's/\\\\\\\[$]0 --fallback-echo"[$]/[$]0 --fallback-echo"/'` - ;; - esac - -ifelse([$1], [], - [cfgfile="${ofile}T" - trap "$rm \"$cfgfile\"; exit 1" 1 2 15 - $rm -f "$cfgfile" - AC_MSG_NOTICE([creating $ofile])], - [cfgfile="$ofile"]) - - cat <<__EOF__ >> "$cfgfile" -ifelse([$1], [], -[#! $SHELL - -# `$echo "$cfgfile" | sed 's%^.*/%%'` - Provide generalized library-building support services. -# Generated automatically by $PROGRAM (GNU $PACKAGE $VERSION$TIMESTAMP) -# NOTE: Changes made to this file will be lost: look at ltmain.sh. -# -# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007 -# Free Software Foundation, Inc. -# -# This file is part of GNU Libtool: -# Originally by Gordon Matzigkeit , 1996 -# -# This program is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 2 of the License, or -# (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, but -# WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. -# -# As a special exception to the GNU General Public License, if you -# distribute this file as part of a program that contains a -# configuration script generated by Autoconf, you may include it under -# the same distribution terms that you use for the rest of that program. - -# A sed program that does not truncate output. -SED=$lt_SED - -# Sed that helps us avoid accidentally triggering echo(1) options like -n. -Xsed="$SED -e 1s/^X//" - -# The HP-UX ksh and POSIX shell print the target directory to stdout -# if CDPATH is set. -(unset CDPATH) >/dev/null 2>&1 && unset CDPATH - -# The names of the tagged configurations supported by this script. -available_tags= - -# ### BEGIN LIBTOOL CONFIG], -[# ### BEGIN LIBTOOL TAG CONFIG: $tagname]) - -# Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`: - -# Shell to use when invoking shell scripts. -SHELL=$lt_SHELL - -# Whether or not to build shared libraries. -build_libtool_libs=$enable_shared - -# Whether or not to build static libraries. -build_old_libs=$enable_static - -# Whether or not to add -lc for building shared libraries. -build_libtool_need_lc=$_LT_AC_TAGVAR(archive_cmds_need_lc, $1) - -# Whether or not to disallow shared libs when runtime libs are static -allow_libtool_libs_with_static_runtimes=$_LT_AC_TAGVAR(enable_shared_with_static_runtimes, $1) - -# Whether or not to optimize for fast installation. -fast_install=$enable_fast_install - -# The host system. -host_alias=$host_alias -host=$host -host_os=$host_os - -# The build system. -build_alias=$build_alias -build=$build -build_os=$build_os - -# An echo program that does not interpret backslashes. -echo=$lt_echo - -# The archiver. -AR=$lt_AR -AR_FLAGS=$lt_AR_FLAGS - -# A C compiler. -LTCC=$lt_LTCC - -# LTCC compiler flags. -LTCFLAGS=$lt_LTCFLAGS - -# A language-specific compiler. -CC=$lt_[]_LT_AC_TAGVAR(compiler, $1) - -# Is the compiler the GNU C compiler? -with_gcc=$_LT_AC_TAGVAR(GCC, $1) - -# An ERE matcher. -EGREP=$lt_EGREP - -# The linker used to build libraries. -LD=$lt_[]_LT_AC_TAGVAR(LD, $1) - -# Whether we need hard or soft links. -LN_S=$lt_LN_S - -# A BSD-compatible nm program. -NM=$lt_NM - -# A symbol stripping program -STRIP=$lt_STRIP - -# Used to examine libraries when file_magic_cmd begins "file" -MAGIC_CMD=$MAGIC_CMD - -# Used on cygwin: DLL creation program. -DLLTOOL="$DLLTOOL" - -# Used on cygwin: object dumper. -OBJDUMP="$OBJDUMP" - -# Used on cygwin: assembler. -AS="$AS" - -# The name of the directory that contains temporary libtool files. -objdir=$objdir - -# How to create reloadable object files. -reload_flag=$lt_reload_flag -reload_cmds=$lt_reload_cmds - -# How to pass a linker flag through the compiler. -wl=$lt_[]_LT_AC_TAGVAR(lt_prog_compiler_wl, $1) - -# Object file suffix (normally "o"). -objext="$ac_objext" - -# Old archive suffix (normally "a"). -libext="$libext" - -# Shared library suffix (normally ".so"). -shrext_cmds='$shrext_cmds' - -# Executable file suffix (normally ""). -exeext="$exeext" - -# Additional compiler flags for building library objects. -pic_flag=$lt_[]_LT_AC_TAGVAR(lt_prog_compiler_pic, $1) -pic_mode=$pic_mode - -# What is the maximum length of a command? -max_cmd_len=$lt_cv_sys_max_cmd_len - -# Does compiler simultaneously support -c and -o options? -compiler_c_o=$lt_[]_LT_AC_TAGVAR(lt_cv_prog_compiler_c_o, $1) - -# Must we lock files when doing compilation? -need_locks=$lt_need_locks - -# Do we need the lib prefix for modules? -need_lib_prefix=$need_lib_prefix - -# Do we need a version for libraries? -need_version=$need_version - -# Whether dlopen is supported. -dlopen_support=$enable_dlopen - -# Whether dlopen of programs is supported. -dlopen_self=$enable_dlopen_self - -# Whether dlopen of statically linked programs is supported. -dlopen_self_static=$enable_dlopen_self_static - -# Compiler flag to prevent dynamic linking. -link_static_flag=$lt_[]_LT_AC_TAGVAR(lt_prog_compiler_static, $1) - -# Compiler flag to turn off builtin functions. -no_builtin_flag=$lt_[]_LT_AC_TAGVAR(lt_prog_compiler_no_builtin_flag, $1) - -# Compiler flag to allow reflexive dlopens. -export_dynamic_flag_spec=$lt_[]_LT_AC_TAGVAR(export_dynamic_flag_spec, $1) - -# Compiler flag to generate shared objects directly from archives. -whole_archive_flag_spec=$lt_[]_LT_AC_TAGVAR(whole_archive_flag_spec, $1) - -# Compiler flag to generate thread-safe objects. -thread_safe_flag_spec=$lt_[]_LT_AC_TAGVAR(thread_safe_flag_spec, $1) - -# Library versioning type. -version_type=$version_type - -# Format of library name prefix. -libname_spec=$lt_libname_spec - -# List of archive names. First name is the real one, the rest are links. -# The last name is the one that the linker finds with -lNAME. -library_names_spec=$lt_library_names_spec - -# The coded name of the library, if different from the real name. -soname_spec=$lt_soname_spec - -# Commands used to build and install an old-style archive. -RANLIB=$lt_RANLIB -old_archive_cmds=$lt_[]_LT_AC_TAGVAR(old_archive_cmds, $1) -old_postinstall_cmds=$lt_old_postinstall_cmds -old_postuninstall_cmds=$lt_old_postuninstall_cmds - -# Create an old-style archive from a shared archive. -old_archive_from_new_cmds=$lt_[]_LT_AC_TAGVAR(old_archive_from_new_cmds, $1) - -# Create a temporary old-style archive to link instead of a shared archive. -old_archive_from_expsyms_cmds=$lt_[]_LT_AC_TAGVAR(old_archive_from_expsyms_cmds, $1) - -# Commands used to build and install a shared archive. -archive_cmds=$lt_[]_LT_AC_TAGVAR(archive_cmds, $1) -archive_expsym_cmds=$lt_[]_LT_AC_TAGVAR(archive_expsym_cmds, $1) -postinstall_cmds=$lt_postinstall_cmds -postuninstall_cmds=$lt_postuninstall_cmds - -# Commands used to build a loadable module (assumed same as above if empty) -module_cmds=$lt_[]_LT_AC_TAGVAR(module_cmds, $1) -module_expsym_cmds=$lt_[]_LT_AC_TAGVAR(module_expsym_cmds, $1) - -# Commands to strip libraries. -old_striplib=$lt_old_striplib -striplib=$lt_striplib - -# Dependencies to place before the objects being linked to create a -# shared library. -predep_objects=$lt_[]_LT_AC_TAGVAR(predep_objects, $1) - -# Dependencies to place after the objects being linked to create a -# shared library. -postdep_objects=$lt_[]_LT_AC_TAGVAR(postdep_objects, $1) - -# Dependencies to place before the objects being linked to create a -# shared library. -predeps=$lt_[]_LT_AC_TAGVAR(predeps, $1) - -# Dependencies to place after the objects being linked to create a -# shared library. -postdeps=$lt_[]_LT_AC_TAGVAR(postdeps, $1) - -# The library search path used internally by the compiler when linking -# a shared library. -compiler_lib_search_path=$lt_[]_LT_AC_TAGVAR(compiler_lib_search_path, $1) - -# Method to check whether dependent libraries are shared objects. -deplibs_check_method=$lt_deplibs_check_method - -# Command to use when deplibs_check_method == file_magic. -file_magic_cmd=$lt_file_magic_cmd - -# Flag that allows shared libraries with undefined symbols to be built. -allow_undefined_flag=$lt_[]_LT_AC_TAGVAR(allow_undefined_flag, $1) - -# Flag that forces no undefined symbols. -no_undefined_flag=$lt_[]_LT_AC_TAGVAR(no_undefined_flag, $1) - -# Commands used to finish a libtool library installation in a directory. -finish_cmds=$lt_finish_cmds - -# Same as above, but a single script fragment to be evaled but not shown. -finish_eval=$lt_finish_eval - -# Take the output of nm and produce a listing of raw symbols and C names. -global_symbol_pipe=$lt_lt_cv_sys_global_symbol_pipe - -# Transform the output of nm in a proper C declaration -global_symbol_to_cdecl=$lt_lt_cv_sys_global_symbol_to_cdecl - -# Transform the output of nm in a C name address pair -global_symbol_to_c_name_address=$lt_lt_cv_sys_global_symbol_to_c_name_address - -# This is the shared library runtime path variable. -runpath_var=$runpath_var - -# This is the shared library path variable. -shlibpath_var=$shlibpath_var - -# Is shlibpath searched before the hard-coded library search path? -shlibpath_overrides_runpath=$shlibpath_overrides_runpath - -# How to hardcode a shared library path into an executable. -hardcode_action=$_LT_AC_TAGVAR(hardcode_action, $1) - -# Whether we should hardcode library paths into libraries. -hardcode_into_libs=$hardcode_into_libs - -# Flag to hardcode \$libdir into a binary during linking. -# This must work even if \$libdir does not exist. -hardcode_libdir_flag_spec=$lt_[]_LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1) - -# If ld is used when linking, flag to hardcode \$libdir into -# a binary during linking. This must work even if \$libdir does -# not exist. -hardcode_libdir_flag_spec_ld=$lt_[]_LT_AC_TAGVAR(hardcode_libdir_flag_spec_ld, $1) - -# Whether we need a single -rpath flag with a separated argument. -hardcode_libdir_separator=$lt_[]_LT_AC_TAGVAR(hardcode_libdir_separator, $1) - -# Set to yes if using DIR/libNAME${shared_ext} during linking hardcodes DIR into the -# resulting binary. -hardcode_direct=$_LT_AC_TAGVAR(hardcode_direct, $1) - -# Set to yes if using the -LDIR flag during linking hardcodes DIR into the -# resulting binary. -hardcode_minus_L=$_LT_AC_TAGVAR(hardcode_minus_L, $1) - -# Set to yes if using SHLIBPATH_VAR=DIR during linking hardcodes DIR into -# the resulting binary. -hardcode_shlibpath_var=$_LT_AC_TAGVAR(hardcode_shlibpath_var, $1) - -# Set to yes if building a shared library automatically hardcodes DIR into the library -# and all subsequent libraries and executables linked against it. -hardcode_automatic=$_LT_AC_TAGVAR(hardcode_automatic, $1) - -# Variables whose values should be saved in libtool wrapper scripts and -# restored at relink time. -variables_saved_for_relink="$variables_saved_for_relink" - -# Whether libtool must link a program against all its dependency libraries. -link_all_deplibs=$_LT_AC_TAGVAR(link_all_deplibs, $1) - -# Compile-time system search path for libraries -sys_lib_search_path_spec=$lt_sys_lib_search_path_spec - -# Run-time system search path for libraries -sys_lib_dlsearch_path_spec=$lt_sys_lib_dlsearch_path_spec - -# Fix the shell variable \$srcfile for the compiler. -fix_srcfile_path=$lt_fix_srcfile_path - -# Set to yes if exported symbols are required. -always_export_symbols=$_LT_AC_TAGVAR(always_export_symbols, $1) - -# The commands to list exported symbols. -export_symbols_cmds=$lt_[]_LT_AC_TAGVAR(export_symbols_cmds, $1) - -# The commands to extract the exported symbol list from a shared archive. -extract_expsyms_cmds=$lt_extract_expsyms_cmds - -# Symbols that should not be listed in the preloaded symbols. -exclude_expsyms=$lt_[]_LT_AC_TAGVAR(exclude_expsyms, $1) - -# Symbols that must always be exported. -include_expsyms=$lt_[]_LT_AC_TAGVAR(include_expsyms, $1) - -ifelse([$1],[], -[# ### END LIBTOOL CONFIG], -[# ### END LIBTOOL TAG CONFIG: $tagname]) - -__EOF__ - -ifelse([$1],[], [ - case $host_os in - aix3*) - cat <<\EOF >> "$cfgfile" - -# AIX sometimes has problems with the GCC collect2 program. For some -# reason, if we set the COLLECT_NAMES environment variable, the problems -# vanish in a puff of smoke. -if test "X${COLLECT_NAMES+set}" != Xset; then - COLLECT_NAMES= - export COLLECT_NAMES -fi -EOF - ;; - esac - - # We use sed instead of cat because bash on DJGPP gets confused if - # if finds mixed CR/LF and LF-only lines. Since sed operates in - # text mode, it properly converts lines to CR/LF. This bash problem - # is reportedly fixed, but why not run on old versions too? - sed '$q' "$ltmain" >> "$cfgfile" || (rm -f "$cfgfile"; exit 1) - - mv -f "$cfgfile" "$ofile" || \ - (rm -f "$ofile" && cp "$cfgfile" "$ofile" && rm -f "$cfgfile") - chmod +x "$ofile" -]) -else - # If there is no Makefile yet, we rely on a make rule to execute - # `config.status --recheck' to rerun these tests and create the - # libtool script then. - ltmain_in=`echo $ltmain | sed -e 's/\.sh$/.in/'` - if test -f "$ltmain_in"; then - test -f Makefile && make "$ltmain" - fi -fi -])# AC_LIBTOOL_CONFIG - - -# AC_LIBTOOL_PROG_COMPILER_NO_RTTI([TAGNAME]) -# ------------------------------------------- -AC_DEFUN([AC_LIBTOOL_PROG_COMPILER_NO_RTTI], -[AC_REQUIRE([_LT_AC_SYS_COMPILER])dnl - -_LT_AC_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)= - -if test "$GCC" = yes; then - _LT_AC_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=' -fno-builtin' - - AC_LIBTOOL_COMPILER_OPTION([if $compiler supports -fno-rtti -fno-exceptions], - lt_cv_prog_compiler_rtti_exceptions, - [-fno-rtti -fno-exceptions], [], - [_LT_AC_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)="$_LT_AC_TAGVAR(lt_prog_compiler_no_builtin_flag, $1) -fno-rtti -fno-exceptions"]) -fi -])# AC_LIBTOOL_PROG_COMPILER_NO_RTTI - - -# AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE -# --------------------------------- -AC_DEFUN([AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE], -[AC_REQUIRE([AC_CANONICAL_HOST]) -AC_REQUIRE([LT_AC_PROG_SED]) -AC_REQUIRE([AC_PROG_NM]) -AC_REQUIRE([AC_OBJEXT]) -# Check for command to grab the raw symbol name followed by C symbol from nm. -AC_MSG_CHECKING([command to parse $NM output from $compiler object]) -AC_CACHE_VAL([lt_cv_sys_global_symbol_pipe], -[ -# These are sane defaults that work on at least a few old systems. -# [They come from Ultrix. What could be older than Ultrix?!! ;)] - -# Character class describing NM global symbol codes. -symcode='[[BCDEGRST]]' - -# Regexp to match symbols that can be accessed directly from C. -sympat='\([[_A-Za-z]][[_A-Za-z0-9]]*\)' - -# Transform an extracted symbol line into a proper C declaration -lt_cv_sys_global_symbol_to_cdecl="sed -n -e 's/^. .* \(.*\)$/extern int \1;/p'" - -# Transform an extracted symbol line into symbol name and symbol address -lt_cv_sys_global_symbol_to_c_name_address="sed -n -e 's/^: \([[^ ]]*\) $/ {\\\"\1\\\", (lt_ptr) 0},/p' -e 's/^$symcode \([[^ ]]*\) \([[^ ]]*\)$/ {\"\2\", (lt_ptr) \&\2},/p'" - -# Define system-specific variables. -case $host_os in -aix*) - symcode='[[BCDT]]' - ;; -cygwin* | mingw* | pw32*) - symcode='[[ABCDGISTW]]' - ;; -hpux*) # Its linker distinguishes data from code symbols - if test "$host_cpu" = ia64; then - symcode='[[ABCDEGRST]]' - fi - lt_cv_sys_global_symbol_to_cdecl="sed -n -e 's/^T .* \(.*\)$/extern int \1();/p' -e 's/^$symcode* .* \(.*\)$/extern char \1;/p'" - lt_cv_sys_global_symbol_to_c_name_address="sed -n -e 's/^: \([[^ ]]*\) $/ {\\\"\1\\\", (lt_ptr) 0},/p' -e 's/^$symcode* \([[^ ]]*\) \([[^ ]]*\)$/ {\"\2\", (lt_ptr) \&\2},/p'" - ;; -linux* | k*bsd*-gnu) - if test "$host_cpu" = ia64; then - symcode='[[ABCDGIRSTW]]' - lt_cv_sys_global_symbol_to_cdecl="sed -n -e 's/^T .* \(.*\)$/extern int \1();/p' -e 's/^$symcode* .* \(.*\)$/extern char \1;/p'" - lt_cv_sys_global_symbol_to_c_name_address="sed -n -e 's/^: \([[^ ]]*\) $/ {\\\"\1\\\", (lt_ptr) 0},/p' -e 's/^$symcode* \([[^ ]]*\) \([[^ ]]*\)$/ {\"\2\", (lt_ptr) \&\2},/p'" - fi - ;; -irix* | nonstopux*) - symcode='[[BCDEGRST]]' - ;; -osf*) - symcode='[[BCDEGQRST]]' - ;; -solaris*) - symcode='[[BDRT]]' - ;; -sco3.2v5*) - symcode='[[DT]]' - ;; -sysv4.2uw2*) - symcode='[[DT]]' - ;; -sysv5* | sco5v6* | unixware* | OpenUNIX*) - symcode='[[ABDT]]' - ;; -sysv4) - symcode='[[DFNSTU]]' - ;; -esac - -# Handle CRLF in mingw tool chain -opt_cr= -case $build_os in -mingw*) - opt_cr=`echo 'x\{0,1\}' | tr x '\015'` # option cr in regexp - ;; -esac - -# If we're using GNU nm, then use its standard symbol codes. -case `$NM -V 2>&1` in -*GNU* | *'with BFD'*) - symcode='[[ABCDGIRSTW]]' ;; -esac - -# Try without a prefix undercore, then with it. -for ac_symprfx in "" "_"; do - - # Transform symcode, sympat, and symprfx into a raw symbol and a C symbol. - symxfrm="\\1 $ac_symprfx\\2 \\2" - - # Write the raw and C identifiers. - lt_cv_sys_global_symbol_pipe="sed -n -e 's/^.*[[ ]]\($symcode$symcode*\)[[ ]][[ ]]*$ac_symprfx$sympat$opt_cr$/$symxfrm/p'" - - # Check to see that the pipe works correctly. - pipe_works=no - - rm -f conftest* - cat > conftest.$ac_ext < $nlist) && test -s "$nlist"; then - # Try sorting and uniquifying the output. - if sort "$nlist" | uniq > "$nlist"T; then - mv -f "$nlist"T "$nlist" - else - rm -f "$nlist"T - fi - - # Make sure that we snagged all the symbols we need. - if grep ' nm_test_var$' "$nlist" >/dev/null; then - if grep ' nm_test_func$' "$nlist" >/dev/null; then - cat < conftest.$ac_ext -#ifdef __cplusplus -extern "C" { -#endif - -EOF - # Now generate the symbol file. - eval "$lt_cv_sys_global_symbol_to_cdecl"' < "$nlist" | grep -v main >> conftest.$ac_ext' - - cat <> conftest.$ac_ext -#if defined (__STDC__) && __STDC__ -# define lt_ptr_t void * -#else -# define lt_ptr_t char * -# define const -#endif - -/* The mapping between symbol names and symbols. */ -const struct { - const char *name; - lt_ptr_t address; -} -lt_preloaded_symbols[[]] = -{ -EOF - $SED "s/^$symcode$symcode* \(.*\) \(.*\)$/ {\"\2\", (lt_ptr_t) \&\2},/" < "$nlist" | grep -v main >> conftest.$ac_ext - cat <<\EOF >> conftest.$ac_ext - {0, (lt_ptr_t) 0} -}; - -#ifdef __cplusplus -} -#endif -EOF - # Now try linking the two files. - mv conftest.$ac_objext conftstm.$ac_objext - lt_save_LIBS="$LIBS" - lt_save_CFLAGS="$CFLAGS" - LIBS="conftstm.$ac_objext" - CFLAGS="$CFLAGS$_LT_AC_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)" - if AC_TRY_EVAL(ac_link) && test -s conftest${ac_exeext}; then - pipe_works=yes - fi - LIBS="$lt_save_LIBS" - CFLAGS="$lt_save_CFLAGS" - else - echo "cannot find nm_test_func in $nlist" >&AS_MESSAGE_LOG_FD - fi - else - echo "cannot find nm_test_var in $nlist" >&AS_MESSAGE_LOG_FD - fi - else - echo "cannot run $lt_cv_sys_global_symbol_pipe" >&AS_MESSAGE_LOG_FD - fi - else - echo "$progname: failed program was:" >&AS_MESSAGE_LOG_FD - cat conftest.$ac_ext >&5 - fi - rm -f conftest* conftst* - - # Do not use the global_symbol_pipe unless it works. - if test "$pipe_works" = yes; then - break - else - lt_cv_sys_global_symbol_pipe= - fi -done -]) -if test -z "$lt_cv_sys_global_symbol_pipe"; then - lt_cv_sys_global_symbol_to_cdecl= -fi -if test -z "$lt_cv_sys_global_symbol_pipe$lt_cv_sys_global_symbol_to_cdecl"; then - AC_MSG_RESULT(failed) -else - AC_MSG_RESULT(ok) -fi -]) # AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE - - -# AC_LIBTOOL_PROG_COMPILER_PIC([TAGNAME]) -# --------------------------------------- -AC_DEFUN([AC_LIBTOOL_PROG_COMPILER_PIC], -[_LT_AC_TAGVAR(lt_prog_compiler_wl, $1)= -_LT_AC_TAGVAR(lt_prog_compiler_pic, $1)= -_LT_AC_TAGVAR(lt_prog_compiler_static, $1)= - -AC_MSG_CHECKING([for $compiler option to produce PIC]) - ifelse([$1],[CXX],[ - # C++ specific cases for pic, static, wl, etc. - if test "$GXX" = yes; then - _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' - _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-static' - - case $host_os in - aix*) - # All AIX code is PIC. - if test "$host_cpu" = ia64; then - # AIX 5 now supports IA64 processor - _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' - fi - ;; - amigaos*) - # FIXME: we need at least 68020 code to build shared libraries, but - # adding the `-m68020' flag to GCC prevents building anything better, - # like `-m68040'. - _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-m68020 -resident32 -malways-restore-a4' - ;; - beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) - # PIC is the default for these OSes. - ;; - mingw* | cygwin* | os2* | pw32*) - # This hack is so that the source file can tell whether it is being - # built for inclusion in a dll (and should export symbols for example). - # Although the cygwin gcc ignores -fPIC, still need this for old-style - # (--disable-auto-import) libraries - _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT' - ;; - darwin* | rhapsody*) - # PIC is the default on this platform - # Common symbols not allowed in MH_DYLIB files - _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-fno-common' - ;; - *djgpp*) - # DJGPP does not support shared libraries at all - _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)= - ;; - interix[[3-9]]*) - # Interix 3.x gcc -fpic/-fPIC options generate broken code. - # Instead, we relocate shared libraries at runtime. - ;; - sysv4*MP*) - if test -d /usr/nec; then - _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)=-Kconform_pic - fi - ;; - hpux*) - # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but - # not for PA HP-UX. - case $host_cpu in - hppa*64*|ia64*) - ;; - *) - _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' - ;; - esac - ;; - *) - _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' - ;; - esac - else - case $host_os in - aix4* | aix5*) - # All AIX code is PIC. - if test "$host_cpu" = ia64; then - # AIX 5 now supports IA64 processor - _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' - else - _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-bnso -bI:/lib/syscalls.exp' - fi - ;; - chorus*) - case $cc_basename in - cxch68*) - # Green Hills C++ Compiler - # _LT_AC_TAGVAR(lt_prog_compiler_static, $1)="--no_auto_instantiation -u __main -u __premain -u _abort -r $COOL_DIR/lib/libOrb.a $MVME_DIR/lib/CC/libC.a $MVME_DIR/lib/classix/libcx.s.a" - ;; - esac - ;; - darwin*) - # PIC is the default on this platform - # Common symbols not allowed in MH_DYLIB files - case $cc_basename in - xlc*) - _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-qnocommon' - _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' - ;; - esac - ;; - dgux*) - case $cc_basename in - ec++*) - _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' - ;; - ghcx*) - # Green Hills C++ Compiler - _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-pic' - ;; - *) - ;; - esac - ;; - freebsd* | dragonfly*) - # FreeBSD uses GNU C++ - ;; - hpux9* | hpux10* | hpux11*) - case $cc_basename in - CC*) - _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' - _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='${wl}-a ${wl}archive' - if test "$host_cpu" != ia64; then - _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='+Z' - fi - ;; - aCC*) - _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' - _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='${wl}-a ${wl}archive' - case $host_cpu in - hppa*64*|ia64*) - # +Z the default - ;; - *) - _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='+Z' - ;; - esac - ;; - *) - ;; - esac - ;; - interix*) - # This is c89, which is MS Visual C++ (no shared libs) - # Anyone wants to do a port? - ;; - irix5* | irix6* | nonstopux*) - case $cc_basename in - CC*) - _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' - _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' - # CC pic flag -KPIC is the default. - ;; - *) - ;; - esac - ;; - linux* | k*bsd*-gnu) - case $cc_basename in - KCC*) - # KAI C++ Compiler - _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='--backend -Wl,' - _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' - ;; - icpc* | ecpc*) - # Intel C++ - _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' - _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' - _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-static' - ;; - pgCC*) - # Portland Group C++ compiler. - _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' - _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-fpic' - _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' - ;; - cxx*) - # Compaq C++ - # Make sure the PIC flag is empty. It appears that all Alpha - # Linux and Compaq Tru64 Unix objects are PIC. - _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)= - _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' - ;; - *) - case `$CC -V 2>&1 | sed 5q` in - *Sun\ C*) - # Sun C++ 5.9 - _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' - _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' - _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ' - ;; - esac - ;; - esac - ;; - lynxos*) - ;; - m88k*) - ;; - mvs*) - case $cc_basename in - cxx*) - _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-W c,exportall' - ;; - *) - ;; - esac - ;; - netbsd*) - ;; - osf3* | osf4* | osf5*) - case $cc_basename in - KCC*) - _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='--backend -Wl,' - ;; - RCC*) - # Rational C++ 2.4.1 - _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-pic' - ;; - cxx*) - # Digital/Compaq C++ - _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' - # Make sure the PIC flag is empty. It appears that all Alpha - # Linux and Compaq Tru64 Unix objects are PIC. - _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)= - _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' - ;; - *) - ;; - esac - ;; - psos*) - ;; - solaris*) - case $cc_basename in - CC*) - # Sun C++ 4.2, 5.x and Centerline C++ - _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' - _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' - _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ' - ;; - gcx*) - # Green Hills C++ Compiler - _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-PIC' - ;; - *) - ;; - esac - ;; - sunos4*) - case $cc_basename in - CC*) - # Sun C++ 4.x - _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-pic' - _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' - ;; - lcc*) - # Lucid - _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-pic' - ;; - *) - ;; - esac - ;; - tandem*) - case $cc_basename in - NCC*) - # NonStop-UX NCC 3.20 - _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' - ;; - *) - ;; - esac - ;; - sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*) - case $cc_basename in - CC*) - _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' - _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' - _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' - ;; - esac - ;; - vxworks*) - ;; - *) - _LT_AC_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no - ;; - esac - fi -], -[ - if test "$GCC" = yes; then - _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' - _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-static' - - case $host_os in - aix*) - # All AIX code is PIC. - if test "$host_cpu" = ia64; then - # AIX 5 now supports IA64 processor - _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' - fi - ;; - - amigaos*) - # FIXME: we need at least 68020 code to build shared libraries, but - # adding the `-m68020' flag to GCC prevents building anything better, - # like `-m68040'. - _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-m68020 -resident32 -malways-restore-a4' - ;; - - beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) - # PIC is the default for these OSes. - ;; - - mingw* | cygwin* | pw32* | os2*) - # This hack is so that the source file can tell whether it is being - # built for inclusion in a dll (and should export symbols for example). - # Although the cygwin gcc ignores -fPIC, still need this for old-style - # (--disable-auto-import) libraries - _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT' - ;; - - darwin* | rhapsody*) - # PIC is the default on this platform - # Common symbols not allowed in MH_DYLIB files - _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-fno-common' - ;; - - interix[[3-9]]*) - # Interix 3.x gcc -fpic/-fPIC options generate broken code. - # Instead, we relocate shared libraries at runtime. - ;; - - msdosdjgpp*) - # Just because we use GCC doesn't mean we suddenly get shared libraries - # on systems that don't support them. - _LT_AC_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no - enable_shared=no - ;; - - sysv4*MP*) - if test -d /usr/nec; then - _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)=-Kconform_pic - fi - ;; - - hpux*) - # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but - # not for PA HP-UX. - case $host_cpu in - hppa*64*|ia64*) - # +Z the default - ;; - *) - _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' - ;; - esac - ;; - - *) - _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' - ;; - esac - else - # PORTME Check for flag to pass linker flags through the system compiler. - case $host_os in - aix*) - _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' - if test "$host_cpu" = ia64; then - # AIX 5 now supports IA64 processor - _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' - else - _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-bnso -bI:/lib/syscalls.exp' - fi - ;; - darwin*) - # PIC is the default on this platform - # Common symbols not allowed in MH_DYLIB files - case $cc_basename in - xlc*) - _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-qnocommon' - _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' - ;; - esac - ;; - - mingw* | cygwin* | pw32* | os2*) - # This hack is so that the source file can tell whether it is being - # built for inclusion in a dll (and should export symbols for example). - _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT' - ;; - - hpux9* | hpux10* | hpux11*) - _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' - # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but - # not for PA HP-UX. - case $host_cpu in - hppa*64*|ia64*) - # +Z the default - ;; - *) - _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='+Z' - ;; - esac - # Is there a better lt_prog_compiler_static that works with the bundled CC? - _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='${wl}-a ${wl}archive' - ;; - - irix5* | irix6* | nonstopux*) - _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' - # PIC (with -KPIC) is the default. - _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' - ;; - - newsos6) - _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' - _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' - ;; - - linux* | k*bsd*-gnu) - case $cc_basename in - icc* | ecc*) - _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' - _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' - _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-static' - ;; - pgcc* | pgf77* | pgf90* | pgf95*) - # Portland Group compilers (*not* the Pentium gcc compiler, - # which looks to be a dead project) - _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' - _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-fpic' - _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' - ;; - ccc*) - _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' - # All Alpha code is PIC. - _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' - ;; - *) - case `$CC -V 2>&1 | sed 5q` in - *Sun\ C*) - # Sun C 5.9 - _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' - _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' - _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' - ;; - *Sun\ F*) - # Sun Fortran 8.3 passes all unrecognized flags to the linker - _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' - _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' - _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='' - ;; - esac - ;; - esac - ;; - - osf3* | osf4* | osf5*) - _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' - # All OSF/1 code is PIC. - _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' - ;; - - rdos*) - _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' - ;; - - solaris*) - _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' - _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' - case $cc_basename in - f77* | f90* | f95*) - _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ';; - *) - _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,';; - esac - ;; - - sunos4*) - _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ' - _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-PIC' - _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' - ;; - - sysv4 | sysv4.2uw2* | sysv4.3*) - _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' - _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' - _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' - ;; - - sysv4*MP*) - if test -d /usr/nec ;then - _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-Kconform_pic' - _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' - fi - ;; - - sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*) - _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' - _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' - _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' - ;; - - unicos*) - _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' - _LT_AC_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no - ;; - - uts4*) - _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-pic' - _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' - ;; - - *) - _LT_AC_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no - ;; - esac - fi -]) -AC_MSG_RESULT([$_LT_AC_TAGVAR(lt_prog_compiler_pic, $1)]) - -# -# Check to make sure the PIC flag actually works. -# -if test -n "$_LT_AC_TAGVAR(lt_prog_compiler_pic, $1)"; then - AC_LIBTOOL_COMPILER_OPTION([if $compiler PIC flag $_LT_AC_TAGVAR(lt_prog_compiler_pic, $1) works], - _LT_AC_TAGVAR(lt_prog_compiler_pic_works, $1), - [$_LT_AC_TAGVAR(lt_prog_compiler_pic, $1)ifelse([$1],[],[ -DPIC],[ifelse([$1],[CXX],[ -DPIC],[])])], [], - [case $_LT_AC_TAGVAR(lt_prog_compiler_pic, $1) in - "" | " "*) ;; - *) _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)=" $_LT_AC_TAGVAR(lt_prog_compiler_pic, $1)" ;; - esac], - [_LT_AC_TAGVAR(lt_prog_compiler_pic, $1)= - _LT_AC_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no]) -fi -case $host_os in - # For platforms which do not support PIC, -DPIC is meaningless: - *djgpp*) - _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)= - ;; - *) - _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)="$_LT_AC_TAGVAR(lt_prog_compiler_pic, $1)ifelse([$1],[],[ -DPIC],[ifelse([$1],[CXX],[ -DPIC],[])])" - ;; -esac - -# -# Check to make sure the static flag actually works. -# -wl=$_LT_AC_TAGVAR(lt_prog_compiler_wl, $1) eval lt_tmp_static_flag=\"$_LT_AC_TAGVAR(lt_prog_compiler_static, $1)\" -AC_LIBTOOL_LINKER_OPTION([if $compiler static flag $lt_tmp_static_flag works], - _LT_AC_TAGVAR(lt_prog_compiler_static_works, $1), - $lt_tmp_static_flag, - [], - [_LT_AC_TAGVAR(lt_prog_compiler_static, $1)=]) -]) - - -# AC_LIBTOOL_PROG_LD_SHLIBS([TAGNAME]) -# ------------------------------------ -# See if the linker supports building shared libraries. -AC_DEFUN([AC_LIBTOOL_PROG_LD_SHLIBS], -[AC_REQUIRE([LT_AC_PROG_SED])dnl -AC_MSG_CHECKING([whether the $compiler linker ($LD) supports shared libraries]) -ifelse([$1],[CXX],[ - _LT_AC_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' - case $host_os in - aix4* | aix5*) - # If we're using GNU nm, then we don't want the "-C" option. - # -C means demangle to AIX nm, but means don't demangle with GNU nm - if $NM -V 2>&1 | grep 'GNU' > /dev/null; then - _LT_AC_TAGVAR(export_symbols_cmds, $1)='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\[$]2 == "T") || (\[$]2 == "D") || (\[$]2 == "B")) && ([substr](\[$]3,1,1) != ".")) { print \[$]3 } }'\'' | sort -u > $export_symbols' - else - _LT_AC_TAGVAR(export_symbols_cmds, $1)='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\[$]2 == "T") || (\[$]2 == "D") || (\[$]2 == "B")) && ([substr](\[$]3,1,1) != ".")) { print \[$]3 } }'\'' | sort -u > $export_symbols' - fi - ;; - pw32*) - _LT_AC_TAGVAR(export_symbols_cmds, $1)="$ltdll_cmds" - ;; - cygwin* | mingw*) - _LT_AC_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[[BCDGRS]][[ ]]/s/.*[[ ]]\([[^ ]]*\)/\1 DATA/;/^.*[[ ]]__nm__/s/^.*[[ ]]__nm__\([[^ ]]*\)[[ ]][[^ ]]*/\1 DATA/;/^I[[ ]]/d;/^[[AITW]][[ ]]/s/.*[[ ]]//'\'' | sort | uniq > $export_symbols' - ;; - *) - _LT_AC_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' - ;; - esac -],[ - runpath_var= - _LT_AC_TAGVAR(allow_undefined_flag, $1)= - _LT_AC_TAGVAR(enable_shared_with_static_runtimes, $1)=no - _LT_AC_TAGVAR(archive_cmds, $1)= - _LT_AC_TAGVAR(archive_expsym_cmds, $1)= - _LT_AC_TAGVAR(old_archive_From_new_cmds, $1)= - _LT_AC_TAGVAR(old_archive_from_expsyms_cmds, $1)= - _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)= - _LT_AC_TAGVAR(whole_archive_flag_spec, $1)= - _LT_AC_TAGVAR(thread_safe_flag_spec, $1)= - _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)= - _LT_AC_TAGVAR(hardcode_libdir_flag_spec_ld, $1)= - _LT_AC_TAGVAR(hardcode_libdir_separator, $1)= - _LT_AC_TAGVAR(hardcode_direct, $1)=no - _LT_AC_TAGVAR(hardcode_minus_L, $1)=no - _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=unsupported - _LT_AC_TAGVAR(link_all_deplibs, $1)=unknown - _LT_AC_TAGVAR(hardcode_automatic, $1)=no - _LT_AC_TAGVAR(module_cmds, $1)= - _LT_AC_TAGVAR(module_expsym_cmds, $1)= - _LT_AC_TAGVAR(always_export_symbols, $1)=no - _LT_AC_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' - # include_expsyms should be a list of space-separated symbols to be *always* - # included in the symbol list - _LT_AC_TAGVAR(include_expsyms, $1)= - # exclude_expsyms can be an extended regexp of symbols to exclude - # it will be wrapped by ` (' and `)$', so one must not match beginning or - # end of line. Example: `a|bc|.*d.*' will exclude the symbols `a' and `bc', - # as well as any symbol that contains `d'. - _LT_AC_TAGVAR(exclude_expsyms, $1)="_GLOBAL_OFFSET_TABLE_" - # Although _GLOBAL_OFFSET_TABLE_ is a valid symbol C name, most a.out - # platforms (ab)use it in PIC code, but their linkers get confused if - # the symbol is explicitly referenced. Since portable code cannot - # rely on this symbol name, it's probably fine to never include it in - # preloaded symbol tables. - extract_expsyms_cmds= - # Just being paranoid about ensuring that cc_basename is set. - _LT_CC_BASENAME([$compiler]) - case $host_os in - cygwin* | mingw* | pw32*) - # FIXME: the MSVC++ port hasn't been tested in a loooong time - # When not using gcc, we currently assume that we are using - # Microsoft Visual C++. - if test "$GCC" != yes; then - with_gnu_ld=no - fi - ;; - interix*) - # we just hope/assume this is gcc and not c89 (= MSVC++) - with_gnu_ld=yes - ;; - openbsd*) - with_gnu_ld=no - ;; - esac - - _LT_AC_TAGVAR(ld_shlibs, $1)=yes - if test "$with_gnu_ld" = yes; then - # If archive_cmds runs LD, not CC, wlarc should be empty - wlarc='${wl}' - - # Set some defaults for GNU ld with shared library support. These - # are reset later if shared libraries are not supported. Putting them - # here allows them to be overridden if necessary. - runpath_var=LD_RUN_PATH - _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}--rpath ${wl}$libdir' - _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic' - # ancient GNU ld didn't support --whole-archive et. al. - if $LD --help 2>&1 | grep 'no-whole-archive' > /dev/null; then - _LT_AC_TAGVAR(whole_archive_flag_spec, $1)="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' - else - _LT_AC_TAGVAR(whole_archive_flag_spec, $1)= - fi - supports_anon_versioning=no - case `$LD -v 2>/dev/null` in - *\ [[01]].* | *\ 2.[[0-9]].* | *\ 2.10.*) ;; # catch versions < 2.11 - *\ 2.11.93.0.2\ *) supports_anon_versioning=yes ;; # RH7.3 ... - *\ 2.11.92.0.12\ *) supports_anon_versioning=yes ;; # Mandrake 8.2 ... - *\ 2.11.*) ;; # other 2.11 versions - *) supports_anon_versioning=yes ;; - esac - - # See if GNU ld supports shared libraries. - case $host_os in - aix3* | aix4* | aix5*) - # On AIX/PPC, the GNU linker is very broken - if test "$host_cpu" != ia64; then - _LT_AC_TAGVAR(ld_shlibs, $1)=no - cat <&2 - -*** Warning: the GNU linker, at least up to release 2.9.1, is reported -*** to be unable to reliably create shared libraries on AIX. -*** Therefore, libtool is disabling shared libraries support. If you -*** really care for shared libraries, you may want to modify your PATH -*** so that a non-GNU linker is found, and then restart. - -EOF - fi - ;; - - amigaos*) - _LT_AC_TAGVAR(archive_cmds, $1)='$rm $output_objdir/a2ixlibrary.data~$echo "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$echo "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$echo "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$echo "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' - _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' - _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes - - # Samuel A. Falvo II reports - # that the semantics of dynamic libraries on AmigaOS, at least up - # to version 4, is to share data among multiple programs linked - # with the same dynamic library. Since this doesn't match the - # behavior of shared libraries on other platforms, we can't use - # them. - _LT_AC_TAGVAR(ld_shlibs, $1)=no - ;; - - beos*) - if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then - _LT_AC_TAGVAR(allow_undefined_flag, $1)=unsupported - # Joseph Beckenbach says some releases of gcc - # support --undefined. This deserves some investigation. FIXME - _LT_AC_TAGVAR(archive_cmds, $1)='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' - else - _LT_AC_TAGVAR(ld_shlibs, $1)=no - fi - ;; - - cygwin* | mingw* | pw32*) - # _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1) is actually meaningless, - # as there is no search path for DLLs. - _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' - _LT_AC_TAGVAR(allow_undefined_flag, $1)=unsupported - _LT_AC_TAGVAR(always_export_symbols, $1)=no - _LT_AC_TAGVAR(enable_shared_with_static_runtimes, $1)=yes - _LT_AC_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[[BCDGRS]][[ ]]/s/.*[[ ]]\([[^ ]]*\)/\1 DATA/'\'' -e '\''/^[[AITW]][[ ]]/s/.*[[ ]]//'\'' | sort | uniq > $export_symbols' - - if $LD --help 2>&1 | grep 'auto-import' > /dev/null; then - _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' - # If the export-symbols file already is a .def file (1st line - # is EXPORTS), use it as is; otherwise, prepend... - _LT_AC_TAGVAR(archive_expsym_cmds, $1)='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then - cp $export_symbols $output_objdir/$soname.def; - else - echo EXPORTS > $output_objdir/$soname.def; - cat $export_symbols >> $output_objdir/$soname.def; - fi~ - $CC -shared $output_objdir/$soname.def $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' - else - _LT_AC_TAGVAR(ld_shlibs, $1)=no - fi - ;; - - interix[[3-9]]*) - _LT_AC_TAGVAR(hardcode_direct, $1)=no - _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no - _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' - _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' - # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc. - # Instead, shared libraries are loaded at an image base (0x10000000 by - # default) and relocated if they conflict, which is a slow very memory - # consuming and fragmenting process. To avoid this, we pick a random, - # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link - # time. Moving up from 0x10000000 also allows more sbrk(2) space. - _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' - _LT_AC_TAGVAR(archive_expsym_cmds, $1)='sed "s,^,_," $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--retain-symbols-file,$output_objdir/$soname.expsym ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' - ;; - - gnu* | linux* | k*bsd*-gnu) - if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then - tmp_addflag= - case $cc_basename,$host_cpu in - pgcc*) # Portland Group C compiler - _LT_AC_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $echo \"$new_convenience\"` ${wl}--no-whole-archive' - tmp_addflag=' $pic_flag' - ;; - pgf77* | pgf90* | pgf95*) # Portland Group f77 and f90 compilers - _LT_AC_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $echo \"$new_convenience\"` ${wl}--no-whole-archive' - tmp_addflag=' $pic_flag -Mnomain' ;; - ecc*,ia64* | icc*,ia64*) # Intel C compiler on ia64 - tmp_addflag=' -i_dynamic' ;; - efc*,ia64* | ifort*,ia64*) # Intel Fortran compiler on ia64 - tmp_addflag=' -i_dynamic -nofor_main' ;; - ifc* | ifort*) # Intel Fortran compiler - tmp_addflag=' -nofor_main' ;; - esac - case `$CC -V 2>&1 | sed 5q` in - *Sun\ C*) # Sun C 5.9 - _LT_AC_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; $echo \"$new_convenience\"` ${wl}--no-whole-archive' - tmp_sharedflag='-G' ;; - *Sun\ F*) # Sun Fortran 8.3 - tmp_sharedflag='-G' ;; - *) - tmp_sharedflag='-shared' ;; - esac - _LT_AC_TAGVAR(archive_cmds, $1)='$CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' - - if test $supports_anon_versioning = yes; then - _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$echo "{ global:" > $output_objdir/$libname.ver~ - cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ - $echo "local: *; };" >> $output_objdir/$libname.ver~ - $CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib' - fi - else - _LT_AC_TAGVAR(ld_shlibs, $1)=no - fi - ;; - - netbsd*) - if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then - _LT_AC_TAGVAR(archive_cmds, $1)='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib' - wlarc= - else - _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' - _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' - fi - ;; - - solaris*) - if $LD -v 2>&1 | grep 'BFD 2\.8' > /dev/null; then - _LT_AC_TAGVAR(ld_shlibs, $1)=no - cat <&2 - -*** Warning: The releases 2.8.* of the GNU linker cannot reliably -*** create shared libraries on Solaris systems. Therefore, libtool -*** is disabling shared libraries support. We urge you to upgrade GNU -*** binutils to release 2.9.1 or newer. Another option is to modify -*** your PATH or compiler configuration so that the native linker is -*** used, and then restart. - -EOF - elif $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then - _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' - _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' - else - _LT_AC_TAGVAR(ld_shlibs, $1)=no - fi - ;; - - sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX*) - case `$LD -v 2>&1` in - *\ [[01]].* | *\ 2.[[0-9]].* | *\ 2.1[[0-5]].*) - _LT_AC_TAGVAR(ld_shlibs, $1)=no - cat <<_LT_EOF 1>&2 - -*** Warning: Releases of the GNU linker prior to 2.16.91.0.3 can not -*** reliably create shared libraries on SCO systems. Therefore, libtool -*** is disabling shared libraries support. We urge you to upgrade GNU -*** binutils to release 2.16.91.0.3 or newer. Another option is to modify -*** your PATH or compiler configuration so that the native linker is -*** used, and then restart. - -_LT_EOF - ;; - *) - if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then - _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='`test -z "$SCOABSPATH" && echo ${wl}-rpath,$libdir`' - _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib' - _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname,\${SCOABSPATH:+${install_libdir}/}$soname,-retain-symbols-file,$export_symbols -o $lib' - else - _LT_AC_TAGVAR(ld_shlibs, $1)=no - fi - ;; - esac - ;; - - sunos4*) - _LT_AC_TAGVAR(archive_cmds, $1)='$LD -assert pure-text -Bshareable -o $lib $libobjs $deplibs $linker_flags' - wlarc= - _LT_AC_TAGVAR(hardcode_direct, $1)=yes - _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no - ;; - - *) - if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then - _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' - _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' - else - _LT_AC_TAGVAR(ld_shlibs, $1)=no - fi - ;; - esac - - if test "$_LT_AC_TAGVAR(ld_shlibs, $1)" = no; then - runpath_var= - _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)= - _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)= - _LT_AC_TAGVAR(whole_archive_flag_spec, $1)= - fi - else - # PORTME fill in a description of your system's linker (not GNU ld) - case $host_os in - aix3*) - _LT_AC_TAGVAR(allow_undefined_flag, $1)=unsupported - _LT_AC_TAGVAR(always_export_symbols, $1)=yes - _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$LD -o $output_objdir/$soname $libobjs $deplibs $linker_flags -bE:$export_symbols -T512 -H512 -bM:SRE~$AR $AR_FLAGS $lib $output_objdir/$soname' - # Note: this linker hardcodes the directories in LIBPATH if there - # are no directories specified by -L. - _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes - if test "$GCC" = yes && test -z "$lt_prog_compiler_static"; then - # Neither direct hardcoding nor static linking is supported with a - # broken collect2. - _LT_AC_TAGVAR(hardcode_direct, $1)=unsupported - fi - ;; - - aix4* | aix5*) - if test "$host_cpu" = ia64; then - # On IA64, the linker does run time linking by default, so we don't - # have to do anything special. - aix_use_runtimelinking=no - exp_sym_flag='-Bexport' - no_entry_flag="" - else - # If we're using GNU nm, then we don't want the "-C" option. - # -C means demangle to AIX nm, but means don't demangle with GNU nm - if $NM -V 2>&1 | grep 'GNU' > /dev/null; then - _LT_AC_TAGVAR(export_symbols_cmds, $1)='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\[$]2 == "T") || (\[$]2 == "D") || (\[$]2 == "B")) && ([substr](\[$]3,1,1) != ".")) { print \[$]3 } }'\'' | sort -u > $export_symbols' - else - _LT_AC_TAGVAR(export_symbols_cmds, $1)='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\[$]2 == "T") || (\[$]2 == "D") || (\[$]2 == "B")) && ([substr](\[$]3,1,1) != ".")) { print \[$]3 } }'\'' | sort -u > $export_symbols' - fi - aix_use_runtimelinking=no - - # Test if we are trying to use run time linking or normal - # AIX style linking. If -brtl is somewhere in LDFLAGS, we - # need to do runtime linking. - case $host_os in aix4.[[23]]|aix4.[[23]].*|aix5*) - for ld_flag in $LDFLAGS; do - if (test $ld_flag = "-brtl" || test $ld_flag = "-Wl,-brtl"); then - aix_use_runtimelinking=yes - break - fi - done - ;; - esac - - exp_sym_flag='-bexport' - no_entry_flag='-bnoentry' - fi - - # When large executables or shared objects are built, AIX ld can - # have problems creating the table of contents. If linking a library - # or program results in "error TOC overflow" add -mminimal-toc to - # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not - # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS. - - _LT_AC_TAGVAR(archive_cmds, $1)='' - _LT_AC_TAGVAR(hardcode_direct, $1)=yes - _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=':' - _LT_AC_TAGVAR(link_all_deplibs, $1)=yes - - if test "$GCC" = yes; then - case $host_os in aix4.[[012]]|aix4.[[012]].*) - # We only want to do this on AIX 4.2 and lower, the check - # below for broken collect2 doesn't work under 4.3+ - collect2name=`${CC} -print-prog-name=collect2` - if test -f "$collect2name" && \ - strings "$collect2name" | grep resolve_lib_name >/dev/null - then - # We have reworked collect2 - : - else - # We have old collect2 - _LT_AC_TAGVAR(hardcode_direct, $1)=unsupported - # It fails to find uninstalled libraries when the uninstalled - # path is not listed in the libpath. Setting hardcode_minus_L - # to unsupported forces relinking - _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes - _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' - _LT_AC_TAGVAR(hardcode_libdir_separator, $1)= - fi - ;; - esac - shared_flag='-shared' - if test "$aix_use_runtimelinking" = yes; then - shared_flag="$shared_flag "'${wl}-G' - fi - else - # not using gcc - if test "$host_cpu" = ia64; then - # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release - # chokes on -Wl,-G. The following line is correct: - shared_flag='-G' - else - if test "$aix_use_runtimelinking" = yes; then - shared_flag='${wl}-G' - else - shared_flag='${wl}-bM:SRE' - fi - fi - fi - - # It seems that -bexpall does not export symbols beginning with - # underscore (_), so it is better to generate a list of symbols to export. - _LT_AC_TAGVAR(always_export_symbols, $1)=yes - if test "$aix_use_runtimelinking" = yes; then - # Warning - without using the other runtime loading flags (-brtl), - # -berok will link without error, but may produce a broken library. - _LT_AC_TAGVAR(allow_undefined_flag, $1)='-berok' - # Determine the default libpath from the value encoded in an empty executable. - _LT_AC_SYS_LIBPATH_AIX - _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath" - _LT_AC_TAGVAR(archive_expsym_cmds, $1)="\$CC"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then echo "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag" - else - if test "$host_cpu" = ia64; then - _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R $libdir:/usr/lib:/lib' - _LT_AC_TAGVAR(allow_undefined_flag, $1)="-z nodefs" - _LT_AC_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$exp_sym_flag:\$export_symbols" - else - # Determine the default libpath from the value encoded in an empty executable. - _LT_AC_SYS_LIBPATH_AIX - _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath" - # Warning - without using the other run time loading flags, - # -berok will link without error, but may produce a broken library. - _LT_AC_TAGVAR(no_undefined_flag, $1)=' ${wl}-bernotok' - _LT_AC_TAGVAR(allow_undefined_flag, $1)=' ${wl}-berok' - # Exported symbols can be pulled into shared objects from archives - _LT_AC_TAGVAR(whole_archive_flag_spec, $1)='$convenience' - _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=yes - # This is similar to how AIX traditionally builds its shared libraries. - _LT_AC_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs ${wl}-bnoentry $compiler_flags ${wl}-bE:$export_symbols${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname' - fi - fi - ;; - - amigaos*) - _LT_AC_TAGVAR(archive_cmds, $1)='$rm $output_objdir/a2ixlibrary.data~$echo "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$echo "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$echo "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$echo "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' - _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' - _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes - # see comment about different semantics on the GNU ld section - _LT_AC_TAGVAR(ld_shlibs, $1)=no - ;; - - bsdi[[45]]*) - _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)=-rdynamic - ;; - - cygwin* | mingw* | pw32*) - # When not using gcc, we currently assume that we are using - # Microsoft Visual C++. - # hardcode_libdir_flag_spec is actually meaningless, as there is - # no search path for DLLs. - _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)=' ' - _LT_AC_TAGVAR(allow_undefined_flag, $1)=unsupported - # Tell ltmain to make .lib files, not .a files. - libext=lib - # Tell ltmain to make .dll files, not .so files. - shrext_cmds=".dll" - # FIXME: Setting linknames here is a bad hack. - _LT_AC_TAGVAR(archive_cmds, $1)='$CC -o $lib $libobjs $compiler_flags `echo "$deplibs" | $SED -e '\''s/ -lc$//'\''` -link -dll~linknames=' - # The linker will automatically build a .lib file if we build a DLL. - _LT_AC_TAGVAR(old_archive_From_new_cmds, $1)='true' - # FIXME: Should let the user specify the lib program. - _LT_AC_TAGVAR(old_archive_cmds, $1)='lib -OUT:$oldlib$oldobjs$old_deplibs' - _LT_AC_TAGVAR(fix_srcfile_path, $1)='`cygpath -w "$srcfile"`' - _LT_AC_TAGVAR(enable_shared_with_static_runtimes, $1)=yes - ;; - - darwin* | rhapsody*) - case $host_os in - rhapsody* | darwin1.[[012]]) - _LT_AC_TAGVAR(allow_undefined_flag, $1)='${wl}-undefined ${wl}suppress' - ;; - *) # Darwin 1.3 on - if test -z ${MACOSX_DEPLOYMENT_TARGET} ; then - _LT_AC_TAGVAR(allow_undefined_flag, $1)='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' - else - case ${MACOSX_DEPLOYMENT_TARGET} in - 10.[[012]]) - _LT_AC_TAGVAR(allow_undefined_flag, $1)='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' - ;; - 10.*) - _LT_AC_TAGVAR(allow_undefined_flag, $1)='${wl}-undefined ${wl}dynamic_lookup' - ;; - esac - fi - ;; - esac - _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=no - _LT_AC_TAGVAR(hardcode_direct, $1)=no - _LT_AC_TAGVAR(hardcode_automatic, $1)=yes - _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=unsupported - _LT_AC_TAGVAR(whole_archive_flag_spec, $1)='' - _LT_AC_TAGVAR(link_all_deplibs, $1)=yes - if test "$GCC" = yes ; then - output_verbose_link_cmd='echo' - _LT_AC_TAGVAR(archive_cmds, $1)='$CC -dynamiclib $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags -install_name $rpath/$soname $verstring' - _LT_AC_TAGVAR(module_cmds, $1)='$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags' - # Don't fix this by using the ld -exported_symbols_list flag, it doesn't exist in older darwin lds - _LT_AC_TAGVAR(archive_expsym_cmds, $1)='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -dynamiclib $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags -install_name $rpath/$soname $verstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' - _LT_AC_TAGVAR(module_expsym_cmds, $1)='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' - else - case $cc_basename in - xlc*) - output_verbose_link_cmd='echo' - _LT_AC_TAGVAR(archive_cmds, $1)='$CC -qmkshrobj $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-install_name ${wl}`echo $rpath/$soname` $xlcverstring' - _LT_AC_TAGVAR(module_cmds, $1)='$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags' - # Don't fix this by using the ld -exported_symbols_list flag, it doesn't exist in older darwin lds - _LT_AC_TAGVAR(archive_expsym_cmds, $1)='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -qmkshrobj $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-install_name ${wl}$rpath/$soname $xlcverstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' - _LT_AC_TAGVAR(module_expsym_cmds, $1)='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' - ;; - *) - _LT_AC_TAGVAR(ld_shlibs, $1)=no - ;; - esac - fi - ;; - - dgux*) - _LT_AC_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' - _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' - _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no - ;; - - freebsd1*) - _LT_AC_TAGVAR(ld_shlibs, $1)=no - ;; - - # FreeBSD 2.2.[012] allows us to include c++rt0.o to get C++ constructor - # support. Future versions do this automatically, but an explicit c++rt0.o - # does not break anything, and helps significantly (at the cost of a little - # extra space). - freebsd2.2*) - _LT_AC_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags /usr/lib/c++rt0.o' - _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' - _LT_AC_TAGVAR(hardcode_direct, $1)=yes - _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no - ;; - - # Unfortunately, older versions of FreeBSD 2 do not have this feature. - freebsd2*) - _LT_AC_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' - _LT_AC_TAGVAR(hardcode_direct, $1)=yes - _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes - _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no - ;; - - # FreeBSD 3 and greater uses gcc -shared to do shared libraries. - freebsd* | dragonfly*) - _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -o $lib $libobjs $deplibs $compiler_flags' - _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' - _LT_AC_TAGVAR(hardcode_direct, $1)=yes - _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no - ;; - - hpux9*) - if test "$GCC" = yes; then - _LT_AC_TAGVAR(archive_cmds, $1)='$rm $output_objdir/$soname~$CC -shared -fPIC ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' - else - _LT_AC_TAGVAR(archive_cmds, $1)='$rm $output_objdir/$soname~$LD -b +b $install_libdir -o $output_objdir/$soname $libobjs $deplibs $linker_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' - fi - _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir' - _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=: - _LT_AC_TAGVAR(hardcode_direct, $1)=yes - - # hardcode_minus_L: Not really in the search PATH, - # but as the default location of the library. - _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes - _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' - ;; - - hpux10*) - if test "$GCC" = yes -a "$with_gnu_ld" = no; then - _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' - else - _LT_AC_TAGVAR(archive_cmds, $1)='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags' - fi - if test "$with_gnu_ld" = no; then - _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir' - _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=: - - _LT_AC_TAGVAR(hardcode_direct, $1)=yes - _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' - - # hardcode_minus_L: Not really in the search PATH, - # but as the default location of the library. - _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes - fi - ;; - - hpux11*) - if test "$GCC" = yes -a "$with_gnu_ld" = no; then - case $host_cpu in - hppa*64*) - _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' - ;; - ia64*) - _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' - ;; - *) - _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' - ;; - esac - else - case $host_cpu in - hppa*64*) - _LT_AC_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' - ;; - ia64*) - _LT_AC_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' - ;; - *) - _LT_AC_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' - ;; - esac - fi - if test "$with_gnu_ld" = no; then - _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir' - _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=: - - case $host_cpu in - hppa*64*|ia64*) - _LT_AC_TAGVAR(hardcode_libdir_flag_spec_ld, $1)='+b $libdir' - _LT_AC_TAGVAR(hardcode_direct, $1)=no - _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no - ;; - *) - _LT_AC_TAGVAR(hardcode_direct, $1)=yes - _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' - - # hardcode_minus_L: Not really in the search PATH, - # but as the default location of the library. - _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes - ;; - esac - fi - ;; - - irix5* | irix6* | nonstopux*) - if test "$GCC" = yes; then - _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' - else - _LT_AC_TAGVAR(archive_cmds, $1)='$LD -shared $libobjs $deplibs $linker_flags -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib' - _LT_AC_TAGVAR(hardcode_libdir_flag_spec_ld, $1)='-rpath $libdir' - fi - _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' - _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=: - _LT_AC_TAGVAR(link_all_deplibs, $1)=yes - ;; - - netbsd*) - if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then - _LT_AC_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' # a.out - else - _LT_AC_TAGVAR(archive_cmds, $1)='$LD -shared -o $lib $libobjs $deplibs $linker_flags' # ELF - fi - _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' - _LT_AC_TAGVAR(hardcode_direct, $1)=yes - _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no - ;; - - newsos6) - _LT_AC_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' - _LT_AC_TAGVAR(hardcode_direct, $1)=yes - _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' - _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=: - _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no - ;; - - openbsd*) - if test -f /usr/libexec/ld.so; then - _LT_AC_TAGVAR(hardcode_direct, $1)=yes - _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no - if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then - _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' - _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-retain-symbols-file,$export_symbols' - _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' - _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' - else - case $host_os in - openbsd[[01]].* | openbsd2.[[0-7]] | openbsd2.[[0-7]].*) - _LT_AC_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' - _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' - ;; - *) - _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' - _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' - ;; - esac - fi - else - _LT_AC_TAGVAR(ld_shlibs, $1)=no - fi - ;; - - os2*) - _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' - _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes - _LT_AC_TAGVAR(allow_undefined_flag, $1)=unsupported - _LT_AC_TAGVAR(archive_cmds, $1)='$echo "LIBRARY $libname INITINSTANCE" > $output_objdir/$libname.def~$echo "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~$echo DATA >> $output_objdir/$libname.def~$echo " SINGLE NONSHARED" >> $output_objdir/$libname.def~$echo EXPORTS >> $output_objdir/$libname.def~emxexp $libobjs >> $output_objdir/$libname.def~$CC -Zdll -Zcrtdll -o $lib $libobjs $deplibs $compiler_flags $output_objdir/$libname.def' - _LT_AC_TAGVAR(old_archive_From_new_cmds, $1)='emximp -o $output_objdir/$libname.a $output_objdir/$libname.def' - ;; - - osf3*) - if test "$GCC" = yes; then - _LT_AC_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*' - _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' - else - _LT_AC_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*' - _LT_AC_TAGVAR(archive_cmds, $1)='$LD -shared${allow_undefined_flag} $libobjs $deplibs $linker_flags -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib' - fi - _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' - _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=: - ;; - - osf4* | osf5*) # as osf3* with the addition of -msym flag - if test "$GCC" = yes; then - _LT_AC_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*' - _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' - _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' - else - _LT_AC_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*' - _LT_AC_TAGVAR(archive_cmds, $1)='$LD -shared${allow_undefined_flag} $libobjs $deplibs $linker_flags -msym -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib' - _LT_AC_TAGVAR(archive_expsym_cmds, $1)='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done; echo "-hidden">> $lib.exp~ - $LD -shared${allow_undefined_flag} -input $lib.exp $linker_flags $libobjs $deplibs -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib~$rm $lib.exp' - - # Both c and cxx compiler support -rpath directly - _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir' - fi - _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=: - ;; - - solaris*) - _LT_AC_TAGVAR(no_undefined_flag, $1)=' -z text' - if test "$GCC" = yes; then - wlarc='${wl}' - _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' - _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~ - $CC -shared ${wl}-M ${wl}$lib.exp ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags~$rm $lib.exp' - else - wlarc='' - _LT_AC_TAGVAR(archive_cmds, $1)='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linker_flags' - _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~ - $LD -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$rm $lib.exp' - fi - _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' - _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no - case $host_os in - solaris2.[[0-5]] | solaris2.[[0-5]].*) ;; - *) - # The compiler driver will combine and reorder linker options, - # but understands `-z linker_flag'. GCC discards it without `$wl', - # but is careful enough not to reorder. - # Supported since Solaris 2.6 (maybe 2.5.1?) - if test "$GCC" = yes; then - _LT_AC_TAGVAR(whole_archive_flag_spec, $1)='${wl}-z ${wl}allextract$convenience ${wl}-z ${wl}defaultextract' - else - _LT_AC_TAGVAR(whole_archive_flag_spec, $1)='-z allextract$convenience -z defaultextract' - fi - ;; - esac - _LT_AC_TAGVAR(link_all_deplibs, $1)=yes - ;; - - sunos4*) - if test "x$host_vendor" = xsequent; then - # Use $CC to link under sequent, because it throws in some extra .o - # files that make .init and .fini sections work. - _LT_AC_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h $soname -o $lib $libobjs $deplibs $compiler_flags' - else - _LT_AC_TAGVAR(archive_cmds, $1)='$LD -assert pure-text -Bstatic -o $lib $libobjs $deplibs $linker_flags' - fi - _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' - _LT_AC_TAGVAR(hardcode_direct, $1)=yes - _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes - _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no - ;; - - sysv4) - case $host_vendor in - sni) - _LT_AC_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' - _LT_AC_TAGVAR(hardcode_direct, $1)=yes # is this really true??? - ;; - siemens) - ## LD is ld it makes a PLAMLIB - ## CC just makes a GrossModule. - _LT_AC_TAGVAR(archive_cmds, $1)='$LD -G -o $lib $libobjs $deplibs $linker_flags' - _LT_AC_TAGVAR(reload_cmds, $1)='$CC -r -o $output$reload_objs' - _LT_AC_TAGVAR(hardcode_direct, $1)=no - ;; - motorola) - _LT_AC_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' - _LT_AC_TAGVAR(hardcode_direct, $1)=no #Motorola manual says yes, but my tests say they lie - ;; - esac - runpath_var='LD_RUN_PATH' - _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no - ;; - - sysv4.3*) - _LT_AC_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' - _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no - _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='-Bexport' - ;; - - sysv4*MP*) - if test -d /usr/nec; then - _LT_AC_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' - _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no - runpath_var=LD_RUN_PATH - hardcode_runpath_var=yes - _LT_AC_TAGVAR(ld_shlibs, $1)=yes - fi - ;; - - sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[[01]].[[10]]* | unixware7* | sco3.2v5.0.[[024]]*) - _LT_AC_TAGVAR(no_undefined_flag, $1)='${wl}-z,text' - _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=no - _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no - runpath_var='LD_RUN_PATH' - - if test "$GCC" = yes; then - _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - else - _LT_AC_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - fi - ;; - - sysv5* | sco3.2v5* | sco5v6*) - # Note: We can NOT use -z defs as we might desire, because we do not - # link with -lc, and that would cause any symbols used from libc to - # always be unresolved, which means just about no library would - # ever link correctly. If we're not using GNU ld we use -z text - # though, which does catch some bad symbols but isn't as heavy-handed - # as -z defs. - _LT_AC_TAGVAR(no_undefined_flag, $1)='${wl}-z,text' - _LT_AC_TAGVAR(allow_undefined_flag, $1)='${wl}-z,nodefs' - _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=no - _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no - _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='`test -z "$SCOABSPATH" && echo ${wl}-R,$libdir`' - _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=':' - _LT_AC_TAGVAR(link_all_deplibs, $1)=yes - _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-Bexport' - runpath_var='LD_RUN_PATH' - - if test "$GCC" = yes; then - _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags' - _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags' - else - _LT_AC_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags' - _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags' - fi - ;; - - uts4*) - _LT_AC_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' - _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' - _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no - ;; - - *) - _LT_AC_TAGVAR(ld_shlibs, $1)=no - ;; - esac - fi -]) -AC_MSG_RESULT([$_LT_AC_TAGVAR(ld_shlibs, $1)]) -test "$_LT_AC_TAGVAR(ld_shlibs, $1)" = no && can_build_shared=no - -# -# Do we need to explicitly link libc? -# -case "x$_LT_AC_TAGVAR(archive_cmds_need_lc, $1)" in -x|xyes) - # Assume -lc should be added - _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=yes - - if test "$enable_shared" = yes && test "$GCC" = yes; then - case $_LT_AC_TAGVAR(archive_cmds, $1) in - *'~'*) - # FIXME: we may have to deal with multi-command sequences. - ;; - '$CC '*) - # Test whether the compiler implicitly links with -lc since on some - # systems, -lgcc has to come before -lc. If gcc already passes -lc - # to ld, don't add -lc before -lgcc. - AC_MSG_CHECKING([whether -lc should be explicitly linked in]) - $rm conftest* - echo "$lt_simple_compile_test_code" > conftest.$ac_ext - - if AC_TRY_EVAL(ac_compile) 2>conftest.err; then - soname=conftest - lib=conftest - libobjs=conftest.$ac_objext - deplibs= - wl=$_LT_AC_TAGVAR(lt_prog_compiler_wl, $1) - pic_flag=$_LT_AC_TAGVAR(lt_prog_compiler_pic, $1) - compiler_flags=-v - linker_flags=-v - verstring= - output_objdir=. - libname=conftest - lt_save_allow_undefined_flag=$_LT_AC_TAGVAR(allow_undefined_flag, $1) - _LT_AC_TAGVAR(allow_undefined_flag, $1)= - if AC_TRY_EVAL(_LT_AC_TAGVAR(archive_cmds, $1) 2\>\&1 \| grep \" -lc \" \>/dev/null 2\>\&1) - then - _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=no - else - _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=yes - fi - _LT_AC_TAGVAR(allow_undefined_flag, $1)=$lt_save_allow_undefined_flag - else - cat conftest.err 1>&5 - fi - $rm conftest* - AC_MSG_RESULT([$_LT_AC_TAGVAR(archive_cmds_need_lc, $1)]) - ;; - esac - fi - ;; -esac -])# AC_LIBTOOL_PROG_LD_SHLIBS - - -# _LT_AC_FILE_LTDLL_C -# ------------------- -# Be careful that the start marker always follows a newline. -AC_DEFUN([_LT_AC_FILE_LTDLL_C], [ -# /* ltdll.c starts here */ -# #define WIN32_LEAN_AND_MEAN -# #include -# #undef WIN32_LEAN_AND_MEAN -# #include -# -# #ifndef __CYGWIN__ -# # ifdef __CYGWIN32__ -# # define __CYGWIN__ __CYGWIN32__ -# # endif -# #endif -# -# #ifdef __cplusplus -# extern "C" { -# #endif -# BOOL APIENTRY DllMain (HINSTANCE hInst, DWORD reason, LPVOID reserved); -# #ifdef __cplusplus -# } -# #endif -# -# #ifdef __CYGWIN__ -# #include -# DECLARE_CYGWIN_DLL( DllMain ); -# #endif -# HINSTANCE __hDllInstance_base; -# -# BOOL APIENTRY -# DllMain (HINSTANCE hInst, DWORD reason, LPVOID reserved) -# { -# __hDllInstance_base = hInst; -# return TRUE; -# } -# /* ltdll.c ends here */ -])# _LT_AC_FILE_LTDLL_C - - -# _LT_AC_TAGVAR(VARNAME, [TAGNAME]) -# --------------------------------- -AC_DEFUN([_LT_AC_TAGVAR], [ifelse([$2], [], [$1], [$1_$2])]) - - -# old names -AC_DEFUN([AM_PROG_LIBTOOL], [AC_PROG_LIBTOOL]) -AC_DEFUN([AM_ENABLE_SHARED], [AC_ENABLE_SHARED($@)]) -AC_DEFUN([AM_ENABLE_STATIC], [AC_ENABLE_STATIC($@)]) -AC_DEFUN([AM_DISABLE_SHARED], [AC_DISABLE_SHARED($@)]) -AC_DEFUN([AM_DISABLE_STATIC], [AC_DISABLE_STATIC($@)]) -AC_DEFUN([AM_PROG_LD], [AC_PROG_LD]) -AC_DEFUN([AM_PROG_NM], [AC_PROG_NM]) - -# This is just to silence aclocal about the macro not being used -ifelse([AC_DISABLE_FAST_INSTALL]) - -AC_DEFUN([LT_AC_PROG_GCJ], -[AC_CHECK_TOOL(GCJ, gcj, no) - test "x${GCJFLAGS+set}" = xset || GCJFLAGS="-g -O2" - AC_SUBST(GCJFLAGS) -]) - -AC_DEFUN([LT_AC_PROG_RC], -[AC_CHECK_TOOL(RC, windres, no) -]) - - -# Cheap backport of AS_EXECUTABLE_P and required macros -# from Autoconf 2.59; we should not use $as_executable_p directly. - -# _AS_TEST_PREPARE -# ---------------- -m4_ifndef([_AS_TEST_PREPARE], -[m4_defun([_AS_TEST_PREPARE], -[if test -x / >/dev/null 2>&1; then - as_executable_p='test -x' -else - as_executable_p='test -f' -fi -])])# _AS_TEST_PREPARE - -# AS_EXECUTABLE_P -# --------------- -# Check whether a file is executable. -m4_ifndef([AS_EXECUTABLE_P], -[m4_defun([AS_EXECUTABLE_P], -[AS_REQUIRE([_AS_TEST_PREPARE])dnl -$as_executable_p $1[]dnl -])])# AS_EXECUTABLE_P - -# NOTE: This macro has been submitted for inclusion into # -# GNU Autoconf as AC_PROG_SED. When it is available in # -# a released version of Autoconf we should remove this # -# macro and use it instead. # -# LT_AC_PROG_SED -# -------------- -# Check for a fully-functional sed program, that truncates -# as few characters as possible. Prefer GNU sed if found. -AC_DEFUN([LT_AC_PROG_SED], -[AC_MSG_CHECKING([for a sed that does not truncate output]) -AC_CACHE_VAL(lt_cv_path_SED, -[# Loop through the user's path and test for sed and gsed. -# Then use that list of sed's as ones to test for truncation. -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for lt_ac_prog in sed gsed; do - for ac_exec_ext in '' $ac_executable_extensions; do - if AS_EXECUTABLE_P(["$as_dir/$lt_ac_prog$ac_exec_ext"]); then - lt_ac_sed_list="$lt_ac_sed_list $as_dir/$lt_ac_prog$ac_exec_ext" - fi - done - done -done -IFS=$as_save_IFS -lt_ac_max=0 -lt_ac_count=0 -# Add /usr/xpg4/bin/sed as it is typically found on Solaris -# along with /bin/sed that truncates output. -for lt_ac_sed in $lt_ac_sed_list /usr/xpg4/bin/sed; do - test ! -f $lt_ac_sed && continue - cat /dev/null > conftest.in - lt_ac_count=0 - echo $ECHO_N "0123456789$ECHO_C" >conftest.in - # Check for GNU sed and select it if it is found. - if "$lt_ac_sed" --version 2>&1 < /dev/null | grep 'GNU' > /dev/null; then - lt_cv_path_SED=$lt_ac_sed - break - fi - while true; do - cat conftest.in conftest.in >conftest.tmp - mv conftest.tmp conftest.in - cp conftest.in conftest.nl - echo >>conftest.nl - $lt_ac_sed -e 's/a$//' < conftest.nl >conftest.out || break - cmp -s conftest.out conftest.nl || break - # 10000 chars as input seems more than enough - test $lt_ac_count -gt 10 && break - lt_ac_count=`expr $lt_ac_count + 1` - if test $lt_ac_count -gt $lt_ac_max; then - lt_ac_max=$lt_ac_count - lt_cv_path_SED=$lt_ac_sed - fi - done -done -]) -SED=$lt_cv_path_SED -AC_SUBST([SED]) -AC_MSG_RESULT([$SED]) -]) - -# Copyright (C) 2002, 2003, 2005, 2006 Free Software Foundation, Inc. +# Copyright (C) 2002, 2003, 2005, 2006, 2007, 2008 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -6596,10 +31,10 @@ # generated from the m4 files accompanying Automake X.Y. # (This private macro should not be called outside this file.) AC_DEFUN([AM_AUTOMAKE_VERSION], -[am__api_version='1.10' +[am__api_version='1.11' dnl Some users find AM_AUTOMAKE_VERSION and mistake it for a way to dnl require some minimum version. Point them to the right macro. -m4_if([$1], [1.10], [], +m4_if([$1], [1.11.1], [], [AC_FATAL([Do not call $0, use AM_INIT_AUTOMAKE([$1]).])])dnl ]) @@ -6613,10 +48,12 @@ # AM_SET_CURRENT_AUTOMAKE_VERSION # ------------------------------- # Call AM_AUTOMAKE_VERSION and AM_AUTOMAKE_VERSION so they can be traced. -# This function is AC_REQUIREd by AC_INIT_AUTOMAKE. +# This function is AC_REQUIREd by AM_INIT_AUTOMAKE. AC_DEFUN([AM_SET_CURRENT_AUTOMAKE_VERSION], -[AM_AUTOMAKE_VERSION([1.10])dnl -_AM_AUTOCONF_VERSION(m4_PACKAGE_VERSION)]) +[AM_AUTOMAKE_VERSION([1.11.1])dnl +m4_ifndef([AC_AUTOCONF_VERSION], + [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl +_AM_AUTOCONF_VERSION(m4_defn([AC_AUTOCONF_VERSION]))]) # Figure out how to run the assembler. -*- Autoconf -*- @@ -6695,14 +132,14 @@ # AM_CONDITIONAL -*- Autoconf -*- -# Copyright (C) 1997, 2000, 2001, 2003, 2004, 2005, 2006 +# Copyright (C) 1997, 2000, 2001, 2003, 2004, 2005, 2006, 2008 # Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. -# serial 8 +# serial 9 # AM_CONDITIONAL(NAME, SHELL-CONDITION) # ------------------------------------- @@ -6715,6 +152,7 @@ AC_SUBST([$1_FALSE])dnl _AM_SUBST_NOTMAKE([$1_TRUE])dnl _AM_SUBST_NOTMAKE([$1_FALSE])dnl +m4_define([_AM_COND_VALUE_$1], [$2])dnl if $2; then $1_TRUE= $1_FALSE='#' @@ -6728,14 +166,14 @@ Usually this means the macro was only invoked conditionally.]]) fi])]) -# Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006 +# Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2009 # Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. -# serial 9 +# serial 10 # There are a few dirty hacks below to avoid letting `AC_PROG_CC' be # written in clear, in which case automake, when reading aclocal.m4, @@ -6792,6 +230,16 @@ if test "$am_compiler_list" = ""; then am_compiler_list=`sed -n ['s/^#*\([a-zA-Z0-9]*\))$/\1/p'] < ./depcomp` fi + am__universal=false + m4_case([$1], [CC], + [case " $depcc " in #( + *\ -arch\ *\ -arch\ *) am__universal=true ;; + esac], + [CXX], + [case " $depcc " in #( + *\ -arch\ *\ -arch\ *) am__universal=true ;; + esac]) + for depmode in $am_compiler_list; do # Setup a source with many dependencies, because some compilers # like to wrap large dependency lists on column 80 (with \), and @@ -6809,7 +257,17 @@ done echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf + # We check with `-c' and `-o' for the sake of the "dashmstdout" + # mode. It turns out that the SunPro C++ compiler does not properly + # handle `-M -o', and we need to detect this. Also, some Intel + # versions had trouble with output in subdirs + am__obj=sub/conftest.${OBJEXT-o} + am__minus_obj="-o $am__obj" case $depmode in + gcc) + # This depmode causes a compiler race in universal mode. + test "$am__universal" = false || continue + ;; nosideeffect) # after this tag, mechanisms are not by side-effect, so they'll # only be used when explicitly requested @@ -6819,19 +277,23 @@ break fi ;; + msvisualcpp | msvcmsys) + # This compiler won't grok `-c -o', but also, the minuso test has + # not run yet. These depmodes are late enough in the game, and + # so weak that their functioning should not be impacted. + am__obj=conftest.${OBJEXT-o} + am__minus_obj= + ;; none) break ;; esac - # We check with `-c' and `-o' for the sake of the "dashmstdout" - # mode. It turns out that the SunPro C++ compiler does not properly - # handle `-M -o', and we need to detect this. if depmode=$depmode \ - source=sub/conftest.c object=sub/conftest.${OBJEXT-o} \ + source=sub/conftest.c object=$am__obj \ depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ - $SHELL ./depcomp $depcc -c -o sub/conftest.${OBJEXT-o} sub/conftest.c \ + $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \ >/dev/null 2>conftest.err && grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 && grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && - grep sub/conftest.${OBJEXT-o} sub/conftest.Po > /dev/null 2>&1 && + grep $am__obj sub/conftest.Po > /dev/null 2>&1 && ${MAKE-make} -s -f confmf > /dev/null 2>&1; then # icc doesn't choke on unknown options, it will just issue warnings # or remarks (even with -Werror). So we grep stderr for any message @@ -6888,57 +350,68 @@ # Generate code to set up dependency tracking. -*- Autoconf -*- -# Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005 +# Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2008 # Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. -#serial 3 +#serial 5 # _AM_OUTPUT_DEPENDENCY_COMMANDS # ------------------------------ AC_DEFUN([_AM_OUTPUT_DEPENDENCY_COMMANDS], -[for mf in $CONFIG_FILES; do - # Strip MF so we end up with the name of the file. - mf=`echo "$mf" | sed -e 's/:.*$//'` - # Check whether this is an Automake generated Makefile or not. - # We used to match only the files named `Makefile.in', but - # some people rename them; so instead we look at the file content. - # Grep'ing the first line is not enough: some people post-process - # each Makefile.in and add a new line on top of each file to say so. - # Grep'ing the whole file is not good either: AIX grep has a line - # limit of 2048, but all sed's we know have understand at least 4000. - if sed 10q "$mf" | grep '^#.*generated by automake' > /dev/null 2>&1; then - dirpart=`AS_DIRNAME("$mf")` - else - continue - fi - # Extract the definition of DEPDIR, am__include, and am__quote - # from the Makefile without running `make'. - DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"` - test -z "$DEPDIR" && continue - am__include=`sed -n 's/^am__include = //p' < "$mf"` - test -z "am__include" && continue - am__quote=`sed -n 's/^am__quote = //p' < "$mf"` - # When using ansi2knr, U may be empty or an underscore; expand it - U=`sed -n 's/^U = //p' < "$mf"` - # Find all dependency output files, they are included files with - # $(DEPDIR) in their names. We invoke sed twice because it is the - # simplest approach to changing $(DEPDIR) to its actual value in the - # expansion. - for file in `sed -n " - s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \ - sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g' -e 's/\$U/'"$U"'/g'`; do - # Make sure the directory exists. - test -f "$dirpart/$file" && continue - fdir=`AS_DIRNAME(["$file"])` - AS_MKDIR_P([$dirpart/$fdir]) - # echo "creating $dirpart/$file" - echo '# dummy' > "$dirpart/$file" +[{ + # Autoconf 2.62 quotes --file arguments for eval, but not when files + # are listed without --file. Let's play safe and only enable the eval + # if we detect the quoting. + case $CONFIG_FILES in + *\'*) eval set x "$CONFIG_FILES" ;; + *) set x $CONFIG_FILES ;; + esac + shift + for mf + do + # Strip MF so we end up with the name of the file. + mf=`echo "$mf" | sed -e 's/:.*$//'` + # Check whether this is an Automake generated Makefile or not. + # We used to match only the files named `Makefile.in', but + # some people rename them; so instead we look at the file content. + # Grep'ing the first line is not enough: some people post-process + # each Makefile.in and add a new line on top of each file to say so. + # Grep'ing the whole file is not good either: AIX grep has a line + # limit of 2048, but all sed's we know have understand at least 4000. + if sed -n 's,^#.*generated by automake.*,X,p' "$mf" | grep X >/dev/null 2>&1; then + dirpart=`AS_DIRNAME("$mf")` + else + continue + fi + # Extract the definition of DEPDIR, am__include, and am__quote + # from the Makefile without running `make'. + DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"` + test -z "$DEPDIR" && continue + am__include=`sed -n 's/^am__include = //p' < "$mf"` + test -z "am__include" && continue + am__quote=`sed -n 's/^am__quote = //p' < "$mf"` + # When using ansi2knr, U may be empty or an underscore; expand it + U=`sed -n 's/^U = //p' < "$mf"` + # Find all dependency output files, they are included files with + # $(DEPDIR) in their names. We invoke sed twice because it is the + # simplest approach to changing $(DEPDIR) to its actual value in the + # expansion. + for file in `sed -n " + s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \ + sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g' -e 's/\$U/'"$U"'/g'`; do + # Make sure the directory exists. + test -f "$dirpart/$file" && continue + fdir=`AS_DIRNAME(["$file"])` + AS_MKDIR_P([$dirpart/$fdir]) + # echo "creating $dirpart/$file" + echo '# dummy' > "$dirpart/$file" + done done -done +} ])# _AM_OUTPUT_DEPENDENCY_COMMANDS @@ -6958,13 +431,13 @@ # Do all the work for Automake. -*- Autoconf -*- # Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, -# 2005, 2006 Free Software Foundation, Inc. +# 2005, 2006, 2008, 2009 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. -# serial 12 +# serial 16 # This macro actually does too much. Some checks are only needed if # your package does certain things. But this isn't really a big deal. @@ -6981,7 +454,7 @@ # arguments mandatory, and then we can depend on a new Autoconf # release and drop the old call support. AC_DEFUN([AM_INIT_AUTOMAKE], -[AC_PREREQ([2.60])dnl +[AC_PREREQ([2.62])dnl dnl Autoconf wants to disallow AM_ names. We explicitly allow dnl the ones we care about. m4_pattern_allow([^AM_[A-Z]+FLAGS$])dnl @@ -7032,8 +505,8 @@ AM_MISSING_PROG(AUTOMAKE, automake-${am__api_version}) AM_MISSING_PROG(AUTOHEADER, autoheader) AM_MISSING_PROG(MAKEINFO, makeinfo) -AM_PROG_INSTALL_SH -AM_PROG_INSTALL_STRIP +AC_REQUIRE([AM_PROG_INSTALL_SH])dnl +AC_REQUIRE([AM_PROG_INSTALL_STRIP])dnl AC_REQUIRE([AM_PROG_MKDIR_P])dnl # We need awk for the "check" target. The system "awk" is bad on # some platforms. @@ -7041,23 +514,36 @@ AC_REQUIRE([AC_PROG_MAKE_SET])dnl AC_REQUIRE([AM_SET_LEADING_DOT])dnl _AM_IF_OPTION([tar-ustar], [_AM_PROG_TAR([ustar])], - [_AM_IF_OPTION([tar-pax], [_AM_PROG_TAR([pax])], - [_AM_PROG_TAR([v7])])]) + [_AM_IF_OPTION([tar-pax], [_AM_PROG_TAR([pax])], + [_AM_PROG_TAR([v7])])]) _AM_IF_OPTION([no-dependencies],, [AC_PROVIDE_IFELSE([AC_PROG_CC], - [_AM_DEPENDENCIES(CC)], - [define([AC_PROG_CC], - defn([AC_PROG_CC])[_AM_DEPENDENCIES(CC)])])dnl + [_AM_DEPENDENCIES(CC)], + [define([AC_PROG_CC], + defn([AC_PROG_CC])[_AM_DEPENDENCIES(CC)])])dnl AC_PROVIDE_IFELSE([AC_PROG_CXX], - [_AM_DEPENDENCIES(CXX)], - [define([AC_PROG_CXX], - defn([AC_PROG_CXX])[_AM_DEPENDENCIES(CXX)])])dnl + [_AM_DEPENDENCIES(CXX)], + [define([AC_PROG_CXX], + defn([AC_PROG_CXX])[_AM_DEPENDENCIES(CXX)])])dnl AC_PROVIDE_IFELSE([AC_PROG_OBJC], - [_AM_DEPENDENCIES(OBJC)], - [define([AC_PROG_OBJC], - defn([AC_PROG_OBJC])[_AM_DEPENDENCIES(OBJC)])])dnl -]) -]) + [_AM_DEPENDENCIES(OBJC)], + [define([AC_PROG_OBJC], + defn([AC_PROG_OBJC])[_AM_DEPENDENCIES(OBJC)])])dnl +]) +_AM_IF_OPTION([silent-rules], [AC_REQUIRE([AM_SILENT_RULES])])dnl +dnl The `parallel-tests' driver may need to know about EXEEXT, so add the +dnl `am__EXEEXT' conditional if _AM_COMPILER_EXEEXT was seen. This macro +dnl is hooked onto _AC_COMPILER_EXEEXT early, see below. +AC_CONFIG_COMMANDS_PRE(dnl +[m4_provide_if([_AM_COMPILER_EXEEXT], + [AM_CONDITIONAL([am__EXEEXT], [test -n "$EXEEXT"])])])dnl +]) + +dnl Hook into `_AC_COMPILER_EXEEXT' early to learn its expansion. Do not +dnl add the conditional right here, as _AC_COMPILER_EXEEXT may be further +dnl mangled by Autoconf and run in a shell conditional statement. +m4_define([_AC_COMPILER_EXEEXT], +m4_defn([_AC_COMPILER_EXEEXT])[m4_provide([_AM_COMPILER_EXEEXT])]) # When config.status generates a header, we must update the stamp-h file. @@ -7069,18 +555,19 @@ # our stamp files there. AC_DEFUN([_AC_AM_CONFIG_HEADER_HOOK], [# Compute $1's index in $config_headers. +_am_arg=$1 _am_stamp_count=1 for _am_header in $config_headers :; do case $_am_header in - $1 | $1:* ) + $_am_arg | $_am_arg:* ) break ;; * ) _am_stamp_count=`expr $_am_stamp_count + 1` ;; esac done -echo "timestamp for $1" >`AS_DIRNAME([$1])`/stamp-h[]$_am_stamp_count]) +echo "timestamp for $_am_arg" >`AS_DIRNAME(["$_am_arg"])`/stamp-h[]$_am_stamp_count]) -# Copyright (C) 2001, 2003, 2005 Free Software Foundation, Inc. +# Copyright (C) 2001, 2003, 2005, 2008 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -7091,7 +578,14 @@ # Define $install_sh. AC_DEFUN([AM_PROG_INSTALL_SH], [AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl -install_sh=${install_sh-"\$(SHELL) $am_aux_dir/install-sh"} +if test x"${install_sh}" != xset; then + case $am_aux_dir in + *\ * | *\ *) + install_sh="\${SHELL} '$am_aux_dir/install-sh'" ;; + *) + install_sh="\${SHELL} $am_aux_dir/install-sh" + esac +fi AC_SUBST(install_sh)]) # Copyright (C) 2003, 2005 Free Software Foundation, Inc. @@ -7118,27 +612,38 @@ # Add --enable-maintainer-mode option to configure. -*- Autoconf -*- # From Jim Meyering -# Copyright (C) 1996, 1998, 2000, 2001, 2002, 2003, 2004, 2005 +# Copyright (C) 1996, 1998, 2000, 2001, 2002, 2003, 2004, 2005, 2008 # Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. -# serial 4 +# serial 5 +# AM_MAINTAINER_MODE([DEFAULT-MODE]) +# ---------------------------------- +# Control maintainer-specific portions of Makefiles. +# Default is to disable them, unless `enable' is passed literally. +# For symmetry, `disable' may be passed as well. Anyway, the user +# can override the default with the --enable/--disable switch. AC_DEFUN([AM_MAINTAINER_MODE], -[AC_MSG_CHECKING([whether to enable maintainer-specific portions of Makefiles]) - dnl maintainer-mode is disabled by default - AC_ARG_ENABLE(maintainer-mode, -[ --enable-maintainer-mode enable make rules and dependencies not useful +[m4_case(m4_default([$1], [disable]), + [enable], [m4_define([am_maintainer_other], [disable])], + [disable], [m4_define([am_maintainer_other], [enable])], + [m4_define([am_maintainer_other], [enable]) + m4_warn([syntax], [unexpected argument to AM@&t at _MAINTAINER_MODE: $1])]) +AC_MSG_CHECKING([whether to am_maintainer_other maintainer-specific portions of Makefiles]) + dnl maintainer-mode's default is 'disable' unless 'enable' is passed + AC_ARG_ENABLE([maintainer-mode], +[ --][am_maintainer_other][-maintainer-mode am_maintainer_other make rules and dependencies not useful (and sometimes confusing) to the casual installer], - USE_MAINTAINER_MODE=$enableval, - USE_MAINTAINER_MODE=no) + [USE_MAINTAINER_MODE=$enableval], + [USE_MAINTAINER_MODE=]m4_if(am_maintainer_other, [enable], [no], [yes])) AC_MSG_RESULT([$USE_MAINTAINER_MODE]) - AM_CONDITIONAL(MAINTAINER_MODE, [test $USE_MAINTAINER_MODE = yes]) + AM_CONDITIONAL([MAINTAINER_MODE], [test $USE_MAINTAINER_MODE = yes]) MAINT=$MAINTAINER_MODE_TRUE - AC_SUBST(MAINT)dnl + AC_SUBST([MAINT])dnl ] ) @@ -7146,13 +651,13 @@ # Check to see how 'make' treats includes. -*- Autoconf -*- -# Copyright (C) 2001, 2002, 2003, 2005 Free Software Foundation, Inc. +# Copyright (C) 2001, 2002, 2003, 2005, 2009 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. -# serial 3 +# serial 4 # AM_MAKE_INCLUDE() # ----------------- @@ -7161,7 +666,7 @@ [am_make=${MAKE-make} cat > confinc << 'END' am__doit: - @echo done + @echo this is the am__doit target .PHONY: am__doit END # If we don't find an include directive, just comment out the code. @@ -7171,24 +676,24 @@ _am_result=none # First try GNU make style include. echo "include confinc" > confmf -# We grep out `Entering directory' and `Leaving directory' -# messages which can occur if `w' ends up in MAKEFLAGS. -# In particular we don't look at `^make:' because GNU make might -# be invoked under some other name (usually "gmake"), in which -# case it prints its new name instead of `make'. -if test "`$am_make -s -f confmf 2> /dev/null | grep -v 'ing directory'`" = "done"; then - am__include=include - am__quote= - _am_result=GNU -fi +# Ignore all kinds of additional output from `make'. +case `$am_make -s -f confmf 2> /dev/null` in #( +*the\ am__doit\ target*) + am__include=include + am__quote= + _am_result=GNU + ;; +esac # Now try BSD make style include. if test "$am__include" = "#"; then echo '.include "confinc"' > confmf - if test "`$am_make -s -f confmf 2> /dev/null`" = "done"; then - am__include=.include - am__quote="\"" - _am_result=BSD - fi + case `$am_make -s -f confmf 2> /dev/null` in #( + *the\ am__doit\ target*) + am__include=.include + am__quote="\"" + _am_result=BSD + ;; + esac fi AC_SUBST([am__include]) AC_SUBST([am__quote]) @@ -7196,14 +701,14 @@ rm -f confinc confmf ]) -# Copyright (C) 1999, 2000, 2001, 2003, 2004, 2005 +# Copyright (C) 1999, 2000, 2001, 2003, 2004, 2005, 2008 # Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. -# serial 5 +# serial 6 # AM_PROG_CC_C_O # -------------- @@ -7215,8 +720,9 @@ # FIXME: we rely on the cache variable name because # there is no other way. set dummy $CC -ac_cc=`echo $[2] | sed ['s/[^a-zA-Z0-9_]/_/g;s/^[0-9]/_/']` -if eval "test \"`echo '$ac_cv_prog_cc_'${ac_cc}_c_o`\" != yes"; then +am_cc=`echo $[2] | sed ['s/[^a-zA-Z0-9_]/_/g;s/^[0-9]/_/']` +eval am_t=\$ac_cv_prog_cc_${am_cc}_c_o +if test "$am_t" != yes; then # Losing compiler, so override with the script. # FIXME: It is wrong to rewrite CC. # But if we don't then we get into trouble of one sort or another. @@ -7232,14 +738,14 @@ # Fake the existence of programs that GNU maintainers use. -*- Autoconf -*- -# Copyright (C) 1997, 1999, 2000, 2001, 2003, 2004, 2005 +# Copyright (C) 1997, 1999, 2000, 2001, 2003, 2004, 2005, 2008 # Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. -# serial 5 +# serial 6 # AM_MISSING_PROG(NAME, PROGRAM) # ------------------------------ @@ -7256,7 +762,14 @@ AC_DEFUN([AM_MISSING_HAS_RUN], [AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl AC_REQUIRE_AUX_FILE([missing])dnl -test x"${MISSING+set}" = xset || MISSING="\${SHELL} $am_aux_dir/missing" +if test x"${MISSING+set}" != xset; then + case $am_aux_dir in + *\ * | *\ *) + MISSING="\${SHELL} \"$am_aux_dir/missing\"" ;; + *) + MISSING="\${SHELL} $am_aux_dir/missing" ;; + esac +fi # Use eval to expand $SHELL if eval "$MISSING --run true"; then am_missing_run="$MISSING --run " @@ -7294,13 +807,13 @@ # Helper functions for option handling. -*- Autoconf -*- -# Copyright (C) 2001, 2002, 2003, 2005 Free Software Foundation, Inc. +# Copyright (C) 2001, 2002, 2003, 2005, 2008 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. -# serial 3 +# serial 4 # _AM_MANGLE_OPTION(NAME) # ----------------------- @@ -7317,7 +830,7 @@ # ---------------------------------- # OPTIONS is a space-separated list of Automake options. AC_DEFUN([_AM_SET_OPTIONS], -[AC_FOREACH([_AM_Option], [$1], [_AM_SET_OPTION(_AM_Option)])]) +[m4_foreach_w([_AM_Option], [$1], [_AM_SET_OPTION(_AM_Option)])]) # _AM_IF_OPTION(OPTION, IF-SET, [IF-NOT-SET]) # ------------------------------------------- @@ -7327,14 +840,14 @@ # Check to make sure that the build environment is sane. -*- Autoconf -*- -# Copyright (C) 1996, 1997, 2000, 2001, 2003, 2005 +# Copyright (C) 1996, 1997, 2000, 2001, 2003, 2005, 2008 # Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. -# serial 4 +# serial 5 # AM_SANITY_CHECK # --------------- @@ -7343,16 +856,29 @@ # Just in case sleep 1 echo timestamp > conftest.file +# Reject unsafe characters in $srcdir or the absolute working directory +# name. Accept space and tab only in the latter. +am_lf=' +' +case `pwd` in + *[[\\\"\#\$\&\'\`$am_lf]]*) + AC_MSG_ERROR([unsafe absolute working directory name]);; +esac +case $srcdir in + *[[\\\"\#\$\&\'\`$am_lf\ \ ]]*) + AC_MSG_ERROR([unsafe srcdir value: `$srcdir']);; +esac + # Do `set' in a subshell so we don't clobber the current shell's # arguments. Must try -L first in case configure is actually a # symlink; some systems play weird games with the mod time of symlinks # (eg FreeBSD returns the mod time of the symlink's containing # directory). if ( - set X `ls -Lt $srcdir/configure conftest.file 2> /dev/null` + set X `ls -Lt "$srcdir/configure" conftest.file 2> /dev/null` if test "$[*]" = "X"; then # -L didn't work. - set X `ls -t $srcdir/configure conftest.file` + set X `ls -t "$srcdir/configure" conftest.file` fi rm -f conftest.file if test "$[*]" != "X $srcdir/configure conftest.file" \ @@ -7405,18 +931,25 @@ INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s" AC_SUBST([INSTALL_STRIP_PROGRAM])]) -# Copyright (C) 2006 Free Software Foundation, Inc. +# Copyright (C) 2006, 2008 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. +# serial 2 + # _AM_SUBST_NOTMAKE(VARIABLE) # --------------------------- -# Prevent Automake from outputing VARIABLE = @VARIABLE@ in Makefile.in. +# Prevent Automake from outputting VARIABLE = @VARIABLE@ in Makefile.in. # This macro is traced by Automake. AC_DEFUN([_AM_SUBST_NOTMAKE]) +# AM_SUBST_NOTMAKE(VARIABLE) +# --------------------------- +# Public sister of _AM_SUBST_NOTMAKE. +AC_DEFUN([AM_SUBST_NOTMAKE], [_AM_SUBST_NOTMAKE($@)]) + # Check how to create a tarball. -*- Autoconf -*- # Copyright (C) 2004, 2005 Free Software Foundation, Inc. Modified: python/branches/py3k-jit/Modules/_ctypes/libffi/config.guess ============================================================================== --- python/branches/py3k-jit/Modules/_ctypes/libffi/config.guess (original) +++ python/branches/py3k-jit/Modules/_ctypes/libffi/config.guess Tue Mar 16 21:40:29 2010 @@ -1,10 +1,10 @@ #! /bin/sh # Attempt to guess a canonical system name. # Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, -# 2000, 2001, 2002, 2003, 2004, 2005, 2006 Free Software Foundation, -# Inc. +# 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 +# Free Software Foundation, Inc. -timestamp='2007-05-17' +timestamp='2009-11-19' # This file is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by @@ -27,16 +27,16 @@ # the same distribution terms that you use for the rest of that program. -# Originally written by Per Bothner . -# Please send patches to . Submit a context -# diff and a properly formatted ChangeLog entry. +# Originally written by Per Bothner. Please send patches (context +# diff format) to and include a ChangeLog +# entry. # # This script attempts to guess a canonical system name similar to # config.sub. If it succeeds, it prints the system name on stdout, and # exits with 0. Otherwise, it exits with 1. # -# The plan is that this can be called by configure scripts if you -# don't specify an explicit build system type. +# You can get the latest version of this script from: +# http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.guess;hb=HEAD me=`echo "$0" | sed -e 's,.*/,,'` @@ -56,8 +56,8 @@ GNU config.guess ($timestamp) Originally written by Per Bothner. -Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005 -Free Software Foundation, Inc. +Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, +2002, 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." @@ -170,7 +170,7 @@ arm*|i386|m68k|ns32k|sh3*|sparc|vax) eval $set_cc_for_build if echo __ELF__ | $CC_FOR_BUILD -E - 2>/dev/null \ - | grep __ELF__ >/dev/null + | grep -q __ELF__ then # Once all utilities can be ECOFF (netbsdecoff) or a.out (netbsdaout). # Return netbsd for either. FIX? @@ -324,14 +324,30 @@ case `/usr/bin/uname -p` in sparc) echo sparc-icl-nx7; exit ;; esac ;; + s390x:SunOS:*:*) + echo ${UNAME_MACHINE}-ibm-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` + exit ;; sun4H:SunOS:5.*:*) echo sparc-hal-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit ;; sun4*:SunOS:5.*:* | tadpole*:SunOS:5.*:*) echo sparc-sun-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit ;; - i86pc:SunOS:5.*:* | ix86xen:SunOS:5.*:*) - echo i386-pc-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` + i86pc:SunOS:5.*:* | i86xen:SunOS:5.*:*) + eval $set_cc_for_build + SUN_ARCH="i386" + # If there is a compiler, see if it is configured for 64-bit objects. + # Note that the Sun cc does not turn __LP64__ into 1 like gcc does. + # This test works for both compilers. + if [ "$CC_FOR_BUILD" != 'no_compiler_found' ]; then + if (echo '#ifdef __amd64'; echo IS_64BIT_ARCH; echo '#endif') | \ + (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | \ + grep IS_64BIT_ARCH >/dev/null + then + SUN_ARCH="x86_64" + fi + fi + echo ${SUN_ARCH}-pc-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit ;; sun4*:SunOS:6*:*) # According to config.sub, this is the proper way to canonicalize @@ -532,7 +548,7 @@ echo rs6000-ibm-aix3.2 fi exit ;; - *:AIX:*:[45]) + *:AIX:*:[456]) IBM_CPU_ID=`/usr/sbin/lsdev -C -c processor -S available | sed 1q | awk '{ print $1 }'` if /usr/sbin/lsattr -El ${IBM_CPU_ID} | grep ' POWER' >/dev/null 2>&1; then IBM_ARCH=rs6000 @@ -640,7 +656,7 @@ # => hppa64-hp-hpux11.23 if echo __LP64__ | (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | - grep __LP64__ >/dev/null + grep -q __LP64__ then HP_ARCH="hppa2.0w" else @@ -791,18 +807,24 @@ i*:PW*:*) echo ${UNAME_MACHINE}-pc-pw32 exit ;; - *:Interix*:[3456]*) + *:Interix*:*) case ${UNAME_MACHINE} in - x86) + x86) echo i586-pc-interix${UNAME_RELEASE} exit ;; - EM64T | authenticamd) + authenticamd | genuineintel | EM64T) echo x86_64-unknown-interix${UNAME_RELEASE} exit ;; + IA64) + echo ia64-unknown-interix${UNAME_RELEASE} + exit ;; esac ;; [345]86:Windows_95:* | [345]86:Windows_98:* | [345]86:Windows_NT:*) echo i${UNAME_MACHINE}-pc-mks exit ;; + 8664:Windows_NT:*) + echo x86_64-pc-mks + exit ;; i*:Windows_NT*:* | Pentium*:Windows_NT*:*) # How do we know it's Interix rather than the generic POSIX subsystem? # It also conflicts with pre-2.0 versions of AT&T UWIN. Should we @@ -832,8 +854,29 @@ i*86:Minix:*:*) echo ${UNAME_MACHINE}-pc-minix exit ;; + alpha:Linux:*:*) + case `sed -n '/^cpu model/s/^.*: \(.*\)/\1/p' < /proc/cpuinfo` in + EV5) UNAME_MACHINE=alphaev5 ;; + EV56) UNAME_MACHINE=alphaev56 ;; + PCA56) UNAME_MACHINE=alphapca56 ;; + PCA57) UNAME_MACHINE=alphapca56 ;; + EV6) UNAME_MACHINE=alphaev6 ;; + EV67) UNAME_MACHINE=alphaev67 ;; + EV68*) UNAME_MACHINE=alphaev68 ;; + esac + objdump --private-headers /bin/sh | grep -q ld.so.1 + if test "$?" = 0 ; then LIBC="libc1" ; else LIBC="" ; fi + echo ${UNAME_MACHINE}-unknown-linux-gnu${LIBC} + exit ;; arm*:Linux:*:*) - echo ${UNAME_MACHINE}-unknown-linux-gnu + eval $set_cc_for_build + if echo __ARM_EABI__ | $CC_FOR_BUILD -E - 2>/dev/null \ + | grep -q __ARM_EABI__ + then + echo ${UNAME_MACHINE}-unknown-linux-gnu + else + echo ${UNAME_MACHINE}-unknown-linux-gnueabi + fi exit ;; avr32*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu @@ -847,6 +890,17 @@ frv:Linux:*:*) echo frv-unknown-linux-gnu exit ;; + i*86:Linux:*:*) + LIBC=gnu + eval $set_cc_for_build + sed 's/^ //' << EOF >$dummy.c + #ifdef __dietlibc__ + LIBC=dietlibc + #endif +EOF + eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep '^LIBC'` + echo "${UNAME_MACHINE}-pc-linux-${LIBC}" + exit ;; ia64:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; @@ -856,74 +910,33 @@ m68*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; - mips:Linux:*:*) + mips:Linux:*:* | mips64:Linux:*:*) eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #undef CPU - #undef mips - #undef mipsel + #undef ${UNAME_MACHINE} + #undef ${UNAME_MACHINE}el #if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL) - CPU=mipsel + CPU=${UNAME_MACHINE}el #else #if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB) - CPU=mips + CPU=${UNAME_MACHINE} #else CPU= #endif #endif EOF - eval "`$CC_FOR_BUILD -E $dummy.c 2>/dev/null | sed -n ' - /^CPU/{ - s: ::g - p - }'`" - test x"${CPU}" != x && { echo "${CPU}-unknown-linux-gnu"; exit; } - ;; - mips64:Linux:*:*) - eval $set_cc_for_build - sed 's/^ //' << EOF >$dummy.c - #undef CPU - #undef mips64 - #undef mips64el - #if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL) - CPU=mips64el - #else - #if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB) - CPU=mips64 - #else - CPU= - #endif - #endif -EOF - eval "`$CC_FOR_BUILD -E $dummy.c 2>/dev/null | sed -n ' - /^CPU/{ - s: ::g - p - }'`" + eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep '^CPU'` test x"${CPU}" != x && { echo "${CPU}-unknown-linux-gnu"; exit; } ;; or32:Linux:*:*) echo or32-unknown-linux-gnu exit ;; - ppc:Linux:*:*) - echo powerpc-unknown-linux-gnu + padre:Linux:*:*) + echo sparc-unknown-linux-gnu exit ;; - ppc64:Linux:*:*) - echo powerpc64-unknown-linux-gnu - exit ;; - alpha:Linux:*:*) - case `sed -n '/^cpu model/s/^.*: \(.*\)/\1/p' < /proc/cpuinfo` in - EV5) UNAME_MACHINE=alphaev5 ;; - EV56) UNAME_MACHINE=alphaev56 ;; - PCA56) UNAME_MACHINE=alphapca56 ;; - PCA57) UNAME_MACHINE=alphapca56 ;; - EV6) UNAME_MACHINE=alphaev6 ;; - EV67) UNAME_MACHINE=alphaev67 ;; - EV68*) UNAME_MACHINE=alphaev68 ;; - esac - objdump --private-headers /bin/sh | grep ld.so.1 >/dev/null - if test "$?" = 0 ; then LIBC="libc1" ; else LIBC="" ; fi - echo ${UNAME_MACHINE}-unknown-linux-gnu${LIBC} + parisc64:Linux:*:* | hppa64:Linux:*:*) + echo hppa64-unknown-linux-gnu exit ;; parisc:Linux:*:* | hppa:Linux:*:*) # Look for CPU level @@ -933,8 +946,11 @@ *) echo hppa-unknown-linux-gnu ;; esac exit ;; - parisc64:Linux:*:* | hppa64:Linux:*:*) - echo hppa64-unknown-linux-gnu + ppc64:Linux:*:*) + echo powerpc64-unknown-linux-gnu + exit ;; + ppc:Linux:*:*) + echo powerpc-unknown-linux-gnu exit ;; s390:Linux:*:* | s390x:Linux:*:*) echo ${UNAME_MACHINE}-ibm-linux @@ -954,72 +970,9 @@ x86_64:Linux:*:*) echo x86_64-unknown-linux-gnu exit ;; - xtensa:Linux:*:*) - echo xtensa-unknown-linux-gnu + xtensa*:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; - i*86:Linux:*:*) - # The BFD linker knows what the default object file format is, so - # first see if it will tell us. cd to the root directory to prevent - # problems with other programs or directories called `ld' in the path. - # Set LC_ALL=C to ensure ld outputs messages in English. - ld_supported_targets=`cd /; LC_ALL=C ld --help 2>&1 \ - | sed -ne '/supported targets:/!d - s/[ ][ ]*/ /g - s/.*supported targets: *// - s/ .*// - p'` - case "$ld_supported_targets" in - elf32-i386) - TENTATIVE="${UNAME_MACHINE}-pc-linux-gnu" - ;; - a.out-i386-linux) - echo "${UNAME_MACHINE}-pc-linux-gnuaout" - exit ;; - coff-i386) - echo "${UNAME_MACHINE}-pc-linux-gnucoff" - exit ;; - "") - # Either a pre-BFD a.out linker (linux-gnuoldld) or - # one that does not give us useful --help. - echo "${UNAME_MACHINE}-pc-linux-gnuoldld" - exit ;; - esac - # Determine whether the default compiler is a.out or elf - eval $set_cc_for_build - sed 's/^ //' << EOF >$dummy.c - #include - #ifdef __ELF__ - # ifdef __GLIBC__ - # if __GLIBC__ >= 2 - LIBC=gnu - # else - LIBC=gnulibc1 - # endif - # else - LIBC=gnulibc1 - # endif - #else - #if defined(__INTEL_COMPILER) || defined(__PGI) || defined(__SUNPRO_C) || defined(__SUNPRO_CC) - LIBC=gnu - #else - LIBC=gnuaout - #endif - #endif - #ifdef __dietlibc__ - LIBC=dietlibc - #endif -EOF - eval "`$CC_FOR_BUILD -E $dummy.c 2>/dev/null | sed -n ' - /^LIBC/{ - s: ::g - p - }'`" - test x"${LIBC}" != x && { - echo "${UNAME_MACHINE}-pc-linux-${LIBC}" - exit - } - test x"${TENTATIVE}" != x && { echo "${TENTATIVE}"; exit; } - ;; i*86:DYNIX/ptx:4*:*) # ptx 4.0 does uname -s correctly, with DYNIX/ptx in there. # earlier versions are messed up and put the nodename in both @@ -1048,7 +1001,7 @@ i*86:syllable:*:*) echo ${UNAME_MACHINE}-pc-syllable exit ;; - i*86:LynxOS:2.*:* | i*86:LynxOS:3.[01]*:* | i*86:LynxOS:4.0*:*) + i*86:LynxOS:2.*:* | i*86:LynxOS:3.[01]*:* | i*86:LynxOS:4.[02]*:*) echo i386-unknown-lynxos${UNAME_RELEASE} exit ;; i*86:*DOS:*:*) @@ -1092,8 +1045,11 @@ pc:*:*:*) # Left here for compatibility: # uname -m prints for DJGPP always 'pc', but it prints nothing about - # the processor, so we play safe by assuming i386. - echo i386-pc-msdosdjgpp + # the processor, so we play safe by assuming i586. + # Note: whatever this is, it MUST be the same as what config.sub + # prints for the "djgpp" host, or else GDB configury will decide that + # this is a cross-build. + echo i586-pc-msdosdjgpp exit ;; Intel:Mach:3*:*) echo i386-pc-mach3 @@ -1131,6 +1087,16 @@ 3[34]??:*:4.0:* | 3[34]??,*:*:4.0:*) /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ && { echo i486-ncr-sysv4; exit; } ;; + NCR*:*:4.2:* | MPRAS*:*:4.2:*) + OS_REL='.3' + test -r /etc/.relid \ + && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid` + /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ + && { echo i486-ncr-sysv4.3${OS_REL}; exit; } + /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \ + && { echo i586-ncr-sysv4.3${OS_REL}; exit; } + /bin/uname -p 2>/dev/null | /bin/grep pteron >/dev/null \ + && { echo i586-ncr-sysv4.3${OS_REL}; exit; } ;; m68*:LynxOS:2.*:* | m68*:LynxOS:3.0*:*) echo m68k-unknown-lynxos${UNAME_RELEASE} exit ;; @@ -1143,7 +1109,7 @@ rs6000:LynxOS:2.*:*) echo rs6000-unknown-lynxos${UNAME_RELEASE} exit ;; - PowerPC:LynxOS:2.*:* | PowerPC:LynxOS:3.[01]*:* | PowerPC:LynxOS:4.0*:*) + PowerPC:LynxOS:2.*:* | PowerPC:LynxOS:3.[01]*:* | PowerPC:LynxOS:4.[02]*:*) echo powerpc-unknown-lynxos${UNAME_RELEASE} exit ;; SM[BE]S:UNIX_SV:*:*) @@ -1206,6 +1172,9 @@ BePC:BeOS:*:*) # BeOS running on Intel PC compatible. echo i586-pc-beos exit ;; + BePC:Haiku:*:*) # Haiku running on Intel PC compatible. + echo i586-pc-haiku + exit ;; SX-4:SUPER-UX:*:*) echo sx4-nec-superux${UNAME_RELEASE} exit ;; @@ -1233,6 +1202,16 @@ *:Darwin:*:*) UNAME_PROCESSOR=`uname -p` || UNAME_PROCESSOR=unknown case $UNAME_PROCESSOR in + i386) + eval $set_cc_for_build + if [ "$CC_FOR_BUILD" != 'no_compiler_found' ]; then + if (echo '#ifdef __LP64__'; echo IS_64BIT_ARCH; echo '#endif') | \ + (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | \ + grep IS_64BIT_ARCH >/dev/null + then + UNAME_PROCESSOR="x86_64" + fi + fi ;; unknown) UNAME_PROCESSOR=powerpc ;; esac echo ${UNAME_PROCESSOR}-apple-darwin${UNAME_RELEASE} @@ -1314,6 +1293,9 @@ i*86:rdos:*:*) echo ${UNAME_MACHINE}-pc-rdos exit ;; + i*86:AROS:*:*) + echo ${UNAME_MACHINE}-pc-aros + exit ;; esac #echo '(No uname command or uname output not recognized.)' 1>&2 @@ -1474,9 +1456,9 @@ the operating system you are using. It is advised that you download the most up to date version of the config scripts from - http://savannah.gnu.org/cgi-bin/viewcvs/*checkout*/config/config/config.guess + http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.guess;hb=HEAD and - http://savannah.gnu.org/cgi-bin/viewcvs/*checkout*/config/config/config.sub + http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.sub;hb=HEAD If the version you run ($0) is already up to date, please send the following data and any information you think might be Modified: python/branches/py3k-jit/Modules/_ctypes/libffi/config.sub ============================================================================== --- python/branches/py3k-jit/Modules/_ctypes/libffi/config.sub (original) +++ python/branches/py3k-jit/Modules/_ctypes/libffi/config.sub Tue Mar 16 21:40:29 2010 @@ -1,10 +1,10 @@ #! /bin/sh # Configuration validation subroutine script. # Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, -# 2000, 2001, 2002, 2003, 2004, 2005, 2006 Free Software Foundation, -# Inc. +# 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 +# Free Software Foundation, Inc. -timestamp='2007-04-29' +timestamp='2009-11-07' # This file is (in principle) common to ALL GNU software. # The presence of a machine in this file suggests that SOME GNU software @@ -32,13 +32,16 @@ # Please send patches to . Submit a context -# diff and a properly formatted ChangeLog entry. +# diff and a properly formatted GNU ChangeLog entry. # # Configuration subroutine to validate and canonicalize a configuration type. # Supply the specified configuration type as an argument. # If it is invalid, we print an error message on stderr and exit with code 1. # Otherwise, we print the canonical config type on stdout and succeed. +# You can get the latest version of this script from: +# http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.sub;hb=HEAD + # This file is supposed to be the same for all GNU packages # and recognize all the CPU types, system types and aliases # that are meaningful with *any* GNU software. @@ -72,8 +75,8 @@ version="\ GNU config.sub ($timestamp) -Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005 -Free Software Foundation, Inc. +Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, +2002, 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." @@ -122,6 +125,7 @@ case $maybe_os in nto-qnx* | linux-gnu* | linux-dietlibc | linux-newlib* | linux-uclibc* | \ uclinux-uclibc* | uclinux-gnu* | kfreebsd*-gnu* | knetbsd*-gnu* | netbsd*-gnu* | \ + kopensolaris*-gnu* | \ storm-chaos* | os2-emx* | rtmk-nova*) os=-$maybe_os basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'` @@ -148,10 +152,13 @@ -convergent* | -ncr* | -news | -32* | -3600* | -3100* | -hitachi* |\ -c[123]* | -convex* | -sun | -crds | -omron* | -dg | -ultra | -tti* | \ -harris | -dolphin | -highlevel | -gould | -cbm | -ns | -masscomp | \ - -apple | -axis | -knuth | -cray) + -apple | -axis | -knuth | -cray | -microblaze) os= basic_machine=$1 ;; + -bluegene*) + os=-cnk + ;; -sim | -cisco | -oki | -wec | -winbond) os= basic_machine=$1 @@ -249,13 +256,16 @@ | h8300 | h8500 | hppa | hppa1.[01] | hppa2.0 | hppa2.0[nw] | hppa64 \ | i370 | i860 | i960 | ia64 \ | ip2k | iq2000 \ + | lm32 \ | m32c | m32r | m32rle | m68000 | m68k | m88k \ - | maxq | mb | microblaze | mcore | mep \ + | maxq | mb | microblaze | mcore | mep | metag \ | mips | mipsbe | mipseb | mipsel | mipsle \ | mips16 \ | mips64 | mips64el \ - | mips64vr | mips64vrel \ + | mips64octeon | mips64octeonel \ | mips64orion | mips64orionel \ + | mips64r5900 | mips64r5900el \ + | mips64vr | mips64vrel \ | mips64vr4100 | mips64vr4100el \ | mips64vr4300 | mips64vr4300el \ | mips64vr5000 | mips64vr5000el \ @@ -268,6 +278,7 @@ | mipsisa64sr71k | mipsisa64sr71kel \ | mipstx39 | mipstx39el \ | mn10200 | mn10300 \ + | moxie \ | mt \ | msp430 \ | nios | nios2 \ @@ -276,20 +287,22 @@ | pdp10 | pdp11 | pj | pjl \ | powerpc | powerpc64 | powerpc64le | powerpcle | ppcbe \ | pyramid \ + | rx \ | score \ - | sh | sh[1234] | sh[24]a | sh[23]e | sh[34]eb | sheb | shbe | shle | sh[1234]le | sh3ele \ + | sh | sh[1234] | sh[24]a | sh[24]aeb | sh[23]e | sh[34]eb | sheb | shbe | shle | sh[1234]le | sh3ele \ | sh64 | sh64le \ | sparc | sparc64 | sparc64b | sparc64v | sparc86x | sparclet | sparclite \ | sparcv8 | sparcv9 | sparcv9b | sparcv9v \ | spu | strongarm \ | tahoe | thumb | tic4x | tic80 | tron \ + | ubicom32 \ | v850 | v850e \ | we32k \ | x86 | xc16x | xscale | xscalee[bl] | xstormy16 | xtensa \ - | z8k) + | z8k | z80) basic_machine=$basic_machine-unknown ;; - m6811 | m68hc11 | m6812 | m68hc12) + m6811 | m68hc11 | m6812 | m68hc12 | picochip) # Motorola 68HC11/12. basic_machine=$basic_machine-unknown os=-none @@ -329,14 +342,17 @@ | hppa-* | hppa1.[01]-* | hppa2.0-* | hppa2.0[nw]-* | hppa64-* \ | i*86-* | i860-* | i960-* | ia64-* \ | ip2k-* | iq2000-* \ + | lm32-* \ | m32c-* | m32r-* | m32rle-* \ | m68000-* | m680[012346]0-* | m68360-* | m683?2-* | m68k-* \ - | m88110-* | m88k-* | maxq-* | mcore-* \ + | m88110-* | m88k-* | maxq-* | mcore-* | metag-* | microblaze-* \ | mips-* | mipsbe-* | mipseb-* | mipsel-* | mipsle-* \ | mips16-* \ | mips64-* | mips64el-* \ - | mips64vr-* | mips64vrel-* \ + | mips64octeon-* | mips64octeonel-* \ | mips64orion-* | mips64orionel-* \ + | mips64r5900-* | mips64r5900el-* \ + | mips64vr-* | mips64vrel-* \ | mips64vr4100-* | mips64vr4100el-* \ | mips64vr4300-* | mips64vr4300el-* \ | mips64vr5000-* | mips64vr5000el-* \ @@ -357,21 +373,26 @@ | pdp10-* | pdp11-* | pj-* | pjl-* | pn-* | power-* \ | powerpc-* | powerpc64-* | powerpc64le-* | powerpcle-* | ppcbe-* \ | pyramid-* \ - | romp-* | rs6000-* \ - | sh-* | sh[1234]-* | sh[24]a-* | sh[23]e-* | sh[34]eb-* | sheb-* | shbe-* \ + | romp-* | rs6000-* | rx-* \ + | sh-* | sh[1234]-* | sh[24]a-* | sh[24]aeb-* | sh[23]e-* | sh[34]eb-* | sheb-* | shbe-* \ | shle-* | sh[1234]le-* | sh3ele-* | sh64-* | sh64le-* \ | sparc-* | sparc64-* | sparc64b-* | sparc64v-* | sparc86x-* | sparclet-* \ | sparclite-* \ | sparcv8-* | sparcv9-* | sparcv9b-* | sparcv9v-* | strongarm-* | sv1-* | sx?-* \ | tahoe-* | thumb-* \ - | tic30-* | tic4x-* | tic54x-* | tic55x-* | tic6x-* | tic80-* \ + | tic30-* | tic4x-* | tic54x-* | tic55x-* | tic6x-* | tic80-* | tile-* \ | tron-* \ + | ubicom32-* \ | v850-* | v850e-* | vax-* \ | we32k-* \ | x86-* | x86_64-* | xc16x-* | xps100-* | xscale-* | xscalee[bl]-* \ - | xstormy16-* | xtensa-* \ + | xstormy16-* | xtensa*-* \ | ymp-* \ - | z8k-*) + | z8k-* | z80-*) + ;; + # Recognize the basic CPU types without company name, with glob match. + xtensa*) + basic_machine=$basic_machine-unknown ;; # Recognize the various machine names and aliases which stand # for a CPU type and a company and sometimes even an OS. @@ -435,6 +456,10 @@ basic_machine=m68k-apollo os=-bsd ;; + aros) + basic_machine=i386-pc + os=-aros + ;; aux) basic_machine=m68k-apple os=-aux @@ -443,10 +468,26 @@ basic_machine=ns32k-sequent os=-dynix ;; + blackfin) + basic_machine=bfin-unknown + os=-linux + ;; + blackfin-*) + basic_machine=bfin-`echo $basic_machine | sed 's/^[^-]*-//'` + os=-linux + ;; + bluegene*) + basic_machine=powerpc-ibm + os=-cnk + ;; c90) basic_machine=c90-cray os=-unicos ;; + cegcc) + basic_machine=arm-unknown + os=-cegcc + ;; convex-c1) basic_machine=c1-convex os=-bsd @@ -475,8 +516,8 @@ basic_machine=craynv-cray os=-unicosmp ;; - cr16c) - basic_machine=cr16c-unknown + cr16) + basic_machine=cr16-unknown os=-elf ;; crds | unos) @@ -514,6 +555,10 @@ basic_machine=m88k-motorola os=-sysv3 ;; + dicos) + basic_machine=i686-pc + os=-dicos + ;; djgpp) basic_machine=i586-pc os=-msdosdjgpp @@ -668,6 +713,14 @@ basic_machine=m68k-isi os=-sysv ;; + m68knommu) + basic_machine=m68k-unknown + os=-linux + ;; + m68knommu-*) + basic_machine=m68k-`echo $basic_machine | sed 's/^[^-]*-//'` + os=-linux + ;; m88k-omron*) basic_machine=m88k-omron ;; @@ -679,6 +732,9 @@ basic_machine=ns32k-utek os=-sysv ;; + microblaze) + basic_machine=microblaze-xilinx + ;; mingw32) basic_machine=i386-pc os=-mingw32 @@ -813,6 +869,14 @@ basic_machine=i860-intel os=-osf ;; + parisc) + basic_machine=hppa-unknown + os=-linux + ;; + parisc-*) + basic_machine=hppa-`echo $basic_machine | sed 's/^[^-]*-//'` + os=-linux + ;; pbd) basic_machine=sparc-tti ;; @@ -1021,6 +1085,10 @@ basic_machine=tic6x-unknown os=-coff ;; + tile*) + basic_machine=tile-unknown + os=-linux-gnu + ;; tx39) basic_machine=mipstx39-unknown ;; @@ -1096,6 +1164,10 @@ basic_machine=z8k-unknown os=-sim ;; + z80-*-coff) + basic_machine=z80-unknown + os=-sim + ;; none) basic_machine=none-none os=-none @@ -1134,7 +1206,7 @@ we32k) basic_machine=we32k-att ;; - sh[1234] | sh[24]a | sh[34]eb | sh[1234]le | sh[23]ele) + sh[1234] | sh[24]a | sh[24]aeb | sh[34]eb | sh[1234]le | sh[23]ele) basic_machine=sh-unknown ;; sparc | sparcv8 | sparcv9 | sparcv9b | sparcv9v) @@ -1204,10 +1276,11 @@ # Each alternative MUST END IN A *, to match a version number. # -sysv* is not here because it comes later, after sysvr4. -gnu* | -bsd* | -mach* | -minix* | -genix* | -ultrix* | -irix* \ - | -*vms* | -sco* | -esix* | -isc* | -aix* | -sunos | -sunos[34]*\ + | -*vms* | -sco* | -esix* | -isc* | -aix* | -cnk* | -sunos | -sunos[34]*\ | -hpux* | -unos* | -osf* | -luna* | -dgux* | -solaris* | -sym* \ + | -kopensolaris* \ | -amigaos* | -amigados* | -msdos* | -newsos* | -unicos* | -aof* \ - | -aos* \ + | -aos* | -aros* \ | -nindy* | -vxsim* | -vxworks* | -ebmon* | -hms* | -mvs* \ | -clix* | -riscos* | -uniplus* | -iris* | -rtu* | -xenix* \ | -hiux* | -386bsd* | -knetbsd* | -mirbsd* | -netbsd* \ @@ -1216,7 +1289,7 @@ | -bosx* | -nextstep* | -cxux* | -aout* | -elf* | -oabi* \ | -ptx* | -coff* | -ecoff* | -winnt* | -domain* | -vsta* \ | -udi* | -eabi* | -lites* | -ieee* | -go32* | -aux* \ - | -chorusos* | -chorusrdb* \ + | -chorusos* | -chorusrdb* | -cegcc* \ | -cygwin* | -pe* | -psos* | -moss* | -proelf* | -rtems* \ | -mingw32* | -linux-gnu* | -linux-newlib* | -linux-uclibc* \ | -uxpv* | -beos* | -mpeix* | -udk* \ @@ -1226,7 +1299,7 @@ | -os2* | -vos* | -palmos* | -uclinux* | -nucleus* \ | -morphos* | -superux* | -rtmk* | -rtmk-nova* | -windiss* \ | -powermax* | -dnix* | -nx6 | -nx7 | -sei* | -dragonfly* \ - | -skyos* | -haiku* | -rdos* | -toppers* | -drops*) + | -skyos* | -haiku* | -rdos* | -toppers* | -drops* | -es*) # Remember, each alternative MUST END IN *, to match a version number. ;; -qnx*) @@ -1356,6 +1429,9 @@ -zvmoe) os=-zvmoe ;; + -dicos*) + os=-dicos + ;; -none) ;; *) @@ -1553,7 +1629,7 @@ -sunos*) vendor=sun ;; - -aix*) + -cnk*|-aix*) vendor=ibm ;; -beos*) Modified: python/branches/py3k-jit/Modules/_ctypes/libffi/configure ============================================================================== --- python/branches/py3k-jit/Modules/_ctypes/libffi/configure (original) +++ python/branches/py3k-jit/Modules/_ctypes/libffi/configure Tue Mar 16 21:40:29 2010 @@ -1,62 +1,85 @@ #! /bin/sh # Guess values for system-dependent variables and create Makefiles. -# Generated by GNU Autoconf 2.61 for libffi 3.0.5. +# Generated by GNU Autoconf 2.65 for libffi 3.0.9. # # Report bugs to . # +# # Copyright (C) 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001, -# 2002, 2003, 2004, 2005, 2006 Free Software Foundation, Inc. +# 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, +# Inc. +# +# # This configure script is free software; the Free Software Foundation # gives unlimited permission to copy, distribute and modify it. -## --------------------- ## -## M4sh Initialization. ## -## --------------------- ## +## -------------------- ## +## M4sh Initialization. ## +## -------------------- ## # Be more Bourne compatible DUALCASE=1; export DUALCASE # for MKS sh -if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then +if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then : emulate sh NULLCMD=: - # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which + # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which # is contrary to our usage. Disable this feature. alias -g '${1+"$@"}'='"$@"' setopt NO_GLOB_SUBST else - case `(set -o) 2>/dev/null` in - *posix*) set -o posix ;; + case `(set -o) 2>/dev/null` in #( + *posix*) : + set -o posix ;; #( + *) : + ;; esac - fi - - -# PATH needs CR -# Avoid depending upon Character Ranges. -as_cr_letters='abcdefghijklmnopqrstuvwxyz' -as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' -as_cr_Letters=$as_cr_letters$as_cr_LETTERS -as_cr_digits='0123456789' -as_cr_alnum=$as_cr_Letters$as_cr_digits - -# The user is always right. -if test "${PATH_SEPARATOR+set}" != set; then - echo "#! /bin/sh" >conf$$.sh - echo "exit 0" >>conf$$.sh - chmod +x conf$$.sh - if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then - PATH_SEPARATOR=';' - else - PATH_SEPARATOR=: +as_nl=' +' +export as_nl +# Printing a long string crashes Solaris 7 /usr/bin/printf. +as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' +as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo +as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo +# Prefer a ksh shell builtin over an external printf program on Solaris, +# but without wasting forks for bash or zsh. +if test -z "$BASH_VERSION$ZSH_VERSION" \ + && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then + as_echo='print -r --' + as_echo_n='print -rn --' +elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then + as_echo='printf %s\n' + as_echo_n='printf %s' +else + if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then + as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"' + as_echo_n='/usr/ucb/echo -n' + else + as_echo_body='eval expr "X$1" : "X\\(.*\\)"' + as_echo_n_body='eval + arg=$1; + case $arg in #( + *"$as_nl"*) + expr "X$arg" : "X\\(.*\\)$as_nl"; + arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;; + esac; + expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl" + ' + export as_echo_n_body + as_echo_n='sh -c $as_echo_n_body as_echo' fi - rm -f conf$$.sh + export as_echo_body + as_echo='sh -c $as_echo_body as_echo' fi -# Support unset when possible. -if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then - as_unset=unset -else - as_unset=false +# The user is always right. +if test "${PATH_SEPARATOR+set}" != set; then + PATH_SEPARATOR=: + (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { + (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || + PATH_SEPARATOR=';' + } fi @@ -65,20 +88,18 @@ # there to prevent editors from complaining about space-tab. # (If _AS_PATH_WALK were called with IFS unset, it would disable word # splitting by setting IFS to empty value.) -as_nl=' -' IFS=" "" $as_nl" # Find who we are. Look in the path if we contain no directory separator. -case $0 in +case $0 in #(( *[\\/]* ) as_myself=$0 ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. - test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break -done + test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break + done IFS=$as_save_IFS ;; @@ -89,354 +110,322 @@ as_myself=$0 fi if test ! -f "$as_myself"; then - echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 - { (exit 1); exit 1; } + $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 + exit 1 fi -# Work around bugs in pre-3.0 UWIN ksh. -for as_var in ENV MAIL MAILPATH -do ($as_unset $as_var) >/dev/null 2>&1 && $as_unset $as_var +# Unset variables that we do not need and which cause bugs (e.g. in +# pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1" +# suppresses any "Segmentation fault" message there. '((' could +# trigger a bug in pdksh 5.2.14. +for as_var in BASH_ENV ENV MAIL MAILPATH +do eval test x\${$as_var+set} = xset \ + && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : done PS1='$ ' PS2='> ' PS4='+ ' # NLS nuisances. -for as_var in \ - LANG LANGUAGE LC_ADDRESS LC_ALL LC_COLLATE LC_CTYPE LC_IDENTIFICATION \ - LC_MEASUREMENT LC_MESSAGES LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER \ - LC_TELEPHONE LC_TIME -do - if (set +x; test -z "`(eval $as_var=C; export $as_var) 2>&1`"); then - eval $as_var=C; export $as_var - else - ($as_unset $as_var) >/dev/null 2>&1 && $as_unset $as_var - fi -done - -# Required to use basename. -if expr a : '\(a\)' >/dev/null 2>&1 && - test "X`expr 00001 : '.*\(...\)'`" = X001; then - as_expr=expr -else - as_expr=false -fi - -if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then - as_basename=basename -else - as_basename=false -fi - - -# Name of the executable. -as_me=`$as_basename -- "$0" || -$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ - X"$0" : 'X\(//\)$' \| \ - X"$0" : 'X\(/\)' \| . 2>/dev/null || -echo X/"$0" | - sed '/^.*\/\([^/][^/]*\)\/*$/{ - s//\1/ - q - } - /^X\/\(\/\/\)$/{ - s//\1/ - q - } - /^X\/\(\/\).*/{ - s//\1/ - q - } - s/.*/./; q'` +LC_ALL=C +export LC_ALL +LANGUAGE=C +export LANGUAGE # CDPATH. -$as_unset CDPATH - +(unset CDPATH) >/dev/null 2>&1 && unset CDPATH if test "x$CONFIG_SHELL" = x; then - if (eval ":") 2>/dev/null; then - as_have_required=yes + as_bourne_compatible="if test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then : + emulate sh + NULLCMD=: + # Pre-4.2 versions of Zsh do word splitting on \${1+\"\$@\"}, which + # is contrary to our usage. Disable this feature. + alias -g '\${1+\"\$@\"}'='\"\$@\"' + setopt NO_GLOB_SUBST else - as_have_required=no + case \`(set -o) 2>/dev/null\` in #( + *posix*) : + set -o posix ;; #( + *) : + ;; +esac fi - - if test $as_have_required = yes && (eval ": -(as_func_return () { - (exit \$1) -} -as_func_success () { - as_func_return 0 -} -as_func_failure () { - as_func_return 1 -} -as_func_ret_success () { - return 0 -} -as_func_ret_failure () { - return 1 -} +" + as_required="as_fn_return () { (exit \$1); } +as_fn_success () { as_fn_return 0; } +as_fn_failure () { as_fn_return 1; } +as_fn_ret_success () { return 0; } +as_fn_ret_failure () { return 1; } exitcode=0 -if as_func_success; then - : -else - exitcode=1 - echo as_func_success failed. -fi - -if as_func_failure; then - exitcode=1 - echo as_func_failure succeeded. -fi - -if as_func_ret_success; then - : -else - exitcode=1 - echo as_func_ret_success failed. -fi - -if as_func_ret_failure; then - exitcode=1 - echo as_func_ret_failure succeeded. -fi - -if ( set x; as_func_ret_success y && test x = \"\$1\" ); then - : +as_fn_success || { exitcode=1; echo as_fn_success failed.; } +as_fn_failure && { exitcode=1; echo as_fn_failure succeeded.; } +as_fn_ret_success || { exitcode=1; echo as_fn_ret_success failed.; } +as_fn_ret_failure && { exitcode=1; echo as_fn_ret_failure succeeded.; } +if ( set x; as_fn_ret_success y && test x = \"\$1\" ); then : + +else + exitcode=1; echo positional parameters were not saved. +fi +test x\$exitcode = x0 || exit 1" + as_suggested=" as_lineno_1=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_1a=\$LINENO + as_lineno_2=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_2a=\$LINENO + eval 'test \"x\$as_lineno_1'\$as_run'\" != \"x\$as_lineno_2'\$as_run'\" && + test \"x\`expr \$as_lineno_1'\$as_run' + 1\`\" = \"x\$as_lineno_2'\$as_run'\"' || exit 1 +test \$(( 1 + 1 )) = 2 || exit 1" + if (eval "$as_required") 2>/dev/null; then : + as_have_required=yes else - exitcode=1 - echo positional parameters were not saved. + as_have_required=no fi + if test x$as_have_required = xyes && (eval "$as_suggested") 2>/dev/null; then : -test \$exitcode = 0) || { (exit 1); exit 1; } - -( - as_lineno_1=\$LINENO - as_lineno_2=\$LINENO - test \"x\$as_lineno_1\" != \"x\$as_lineno_2\" && - test \"x\`expr \$as_lineno_1 + 1\`\" = \"x\$as_lineno_2\") || { (exit 1); exit 1; } -") 2> /dev/null; then - : else - as_candidate_shells= - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +as_found=false for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. - case $as_dir in + as_found=: + case $as_dir in #( /*) for as_base in sh bash ksh sh5; do - as_candidate_shells="$as_candidate_shells $as_dir/$as_base" + # Try only shells that exist, to save several forks. + as_shell=$as_dir/$as_base + if { test -f "$as_shell" || test -f "$as_shell.exe"; } && + { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$as_shell"; } 2>/dev/null; then : + CONFIG_SHELL=$as_shell as_have_required=yes + if { $as_echo "$as_bourne_compatible""$as_suggested" | as_run=a "$as_shell"; } 2>/dev/null; then : + break 2 +fi +fi done;; esac + as_found=false done +$as_found || { if { test -f "$SHELL" || test -f "$SHELL.exe"; } && + { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$SHELL"; } 2>/dev/null; then : + CONFIG_SHELL=$SHELL as_have_required=yes +fi; } IFS=$as_save_IFS - for as_shell in $as_candidate_shells $SHELL; do - # Try only shells that exist, to save several forks. - if { test -f "$as_shell" || test -f "$as_shell.exe"; } && - { ("$as_shell") 2> /dev/null <<\_ASEOF -if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then - emulate sh - NULLCMD=: - # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which - # is contrary to our usage. Disable this feature. - alias -g '${1+"$@"}'='"$@"' - setopt NO_GLOB_SUBST -else - case `(set -o) 2>/dev/null` in - *posix*) set -o posix ;; -esac - -fi - - -: -_ASEOF -}; then - CONFIG_SHELL=$as_shell - as_have_required=yes - if { "$as_shell" 2> /dev/null <<\_ASEOF -if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then - emulate sh - NULLCMD=: - # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which - # is contrary to our usage. Disable this feature. - alias -g '${1+"$@"}'='"$@"' - setopt NO_GLOB_SUBST -else - case `(set -o) 2>/dev/null` in - *posix*) set -o posix ;; -esac - -fi - - -: -(as_func_return () { - (exit $1) -} -as_func_success () { - as_func_return 0 -} -as_func_failure () { - as_func_return 1 -} -as_func_ret_success () { - return 0 -} -as_func_ret_failure () { - return 1 -} - -exitcode=0 -if as_func_success; then - : -else - exitcode=1 - echo as_func_success failed. -fi - -if as_func_failure; then - exitcode=1 - echo as_func_failure succeeded. -fi - -if as_func_ret_success; then - : -else - exitcode=1 - echo as_func_ret_success failed. -fi - -if as_func_ret_failure; then - exitcode=1 - echo as_func_ret_failure succeeded. -fi - -if ( set x; as_func_ret_success y && test x = "$1" ); then - : -else - exitcode=1 - echo positional parameters were not saved. + if test "x$CONFIG_SHELL" != x; then : + # We cannot yet assume a decent shell, so we have to provide a + # neutralization value for shells without unset; and this also + # works around shells that cannot unset nonexistent variables. + BASH_ENV=/dev/null + ENV=/dev/null + (unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV + export CONFIG_SHELL + exec "$CONFIG_SHELL" "$as_myself" ${1+"$@"} fi -test $exitcode = 0) || { (exit 1); exit 1; } - -( - as_lineno_1=$LINENO - as_lineno_2=$LINENO - test "x$as_lineno_1" != "x$as_lineno_2" && - test "x`expr $as_lineno_1 + 1`" = "x$as_lineno_2") || { (exit 1); exit 1; } - -_ASEOF -}; then - break + if test x$as_have_required = xno; then : + $as_echo "$0: This script requires a shell more modern than all" + $as_echo "$0: the shells that I found on your system." + if test x${ZSH_VERSION+set} = xset ; then + $as_echo "$0: In particular, zsh $ZSH_VERSION has bugs and should" + $as_echo "$0: be upgraded to zsh 4.3.4 or later." + else + $as_echo "$0: Please tell bug-autoconf at gnu.org and +$0: http://gcc.gnu.org/bugs.html about your system, +$0: including any error possibly output before this +$0: message. Then install a modern shell, or manually run +$0: the script under such a shell if you do have one." + fi + exit 1 fi - fi - - done - - if test "x$CONFIG_SHELL" != x; then - for as_var in BASH_ENV ENV - do ($as_unset $as_var) >/dev/null 2>&1 && $as_unset $as_var - done - export CONFIG_SHELL - exec "$CONFIG_SHELL" "$as_myself" ${1+"$@"} fi +SHELL=${CONFIG_SHELL-/bin/sh} +export SHELL +# Unset more variables known to interfere with behavior of common tools. +CLICOLOR_FORCE= GREP_OPTIONS= +unset CLICOLOR_FORCE GREP_OPTIONS +## --------------------- ## +## M4sh Shell Functions. ## +## --------------------- ## +# as_fn_unset VAR +# --------------- +# Portably unset VAR. +as_fn_unset () +{ + { eval $1=; unset $1;} +} +as_unset=as_fn_unset + +# as_fn_set_status STATUS +# ----------------------- +# Set $? to STATUS, without forking. +as_fn_set_status () +{ + return $1 +} # as_fn_set_status + +# as_fn_exit STATUS +# ----------------- +# Exit the shell with STATUS, even in a "trap 0" or "set -e" context. +as_fn_exit () +{ + set +e + as_fn_set_status $1 + exit $1 +} # as_fn_exit + +# as_fn_mkdir_p +# ------------- +# Create "$as_dir" as a directory, including parents if necessary. +as_fn_mkdir_p () +{ - if test $as_have_required = no; then - echo This script requires a shell more modern than all the - echo shells that I found on your system. Please install a - echo modern shell, or manually run the script under such a - echo shell if you do have one. - { (exit 1); exit 1; } -fi - + case $as_dir in #( + -*) as_dir=./$as_dir;; + esac + test -d "$as_dir" || eval $as_mkdir_p || { + as_dirs= + while :; do + case $as_dir in #( + *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( + *) as_qdir=$as_dir;; + esac + as_dirs="'$as_qdir' $as_dirs" + as_dir=`$as_dirname -- "$as_dir" || +$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$as_dir" : 'X\(//\)[^/]' \| \ + X"$as_dir" : 'X\(//\)$' \| \ + X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X"$as_dir" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + test -d "$as_dir" && break + done + test -z "$as_dirs" || eval "mkdir $as_dirs" + } || test -d "$as_dir" || as_fn_error "cannot create directory $as_dir" -fi -fi +} # as_fn_mkdir_p +# as_fn_append VAR VALUE +# ---------------------- +# Append the text in VALUE to the end of the definition contained in VAR. Take +# advantage of any shell optimizations that allow amortized linear growth over +# repeated appends, instead of the typical quadratic growth present in naive +# implementations. +if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then : + eval 'as_fn_append () + { + eval $1+=\$2 + }' +else + as_fn_append () + { + eval $1=\$$1\$2 + } +fi # as_fn_append +# as_fn_arith ARG... +# ------------------ +# Perform arithmetic evaluation on the ARGs, and store the result in the +# global $as_val. Take advantage of shells that can avoid forks. The arguments +# must be portable across $(()) and expr. +if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then : + eval 'as_fn_arith () + { + as_val=$(( $* )) + }' +else + as_fn_arith () + { + as_val=`expr "$@" || test $? -eq 1` + } +fi # as_fn_arith -(eval "as_func_return () { - (exit \$1) -} -as_func_success () { - as_func_return 0 -} -as_func_failure () { - as_func_return 1 -} -as_func_ret_success () { - return 0 -} -as_func_ret_failure () { - return 1 -} +# as_fn_error ERROR [LINENO LOG_FD] +# --------------------------------- +# Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are +# provided, also output the error to LOG_FD, referencing LINENO. Then exit the +# script with status $?, using 1 if that was 0. +as_fn_error () +{ + as_status=$?; test $as_status -eq 0 && as_status=1 + if test "$3"; then + as_lineno=${as_lineno-"$2"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + $as_echo "$as_me:${as_lineno-$LINENO}: error: $1" >&$3 + fi + $as_echo "$as_me: error: $1" >&2 + as_fn_exit $as_status +} # as_fn_error -exitcode=0 -if as_func_success; then - : +if expr a : '\(a\)' >/dev/null 2>&1 && + test "X`expr 00001 : '.*\(...\)'`" = X001; then + as_expr=expr else - exitcode=1 - echo as_func_success failed. -fi - -if as_func_failure; then - exitcode=1 - echo as_func_failure succeeded. + as_expr=false fi -if as_func_ret_success; then - : +if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then + as_basename=basename else - exitcode=1 - echo as_func_ret_success failed. -fi - -if as_func_ret_failure; then - exitcode=1 - echo as_func_ret_failure succeeded. + as_basename=false fi -if ( set x; as_func_ret_success y && test x = \"\$1\" ); then - : +if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then + as_dirname=dirname else - exitcode=1 - echo positional parameters were not saved. + as_dirname=false fi -test \$exitcode = 0") || { - echo No shell found that supports shell functions. - echo Please tell autoconf at gnu.org about your system, - echo including any error possibly output before this - echo message -} +as_me=`$as_basename -- "$0" || +$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ + X"$0" : 'X\(//\)$' \| \ + X"$0" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X/"$0" | + sed '/^.*\/\([^/][^/]*\)\/*$/{ + s//\1/ + q + } + /^X\/\(\/\/\)$/{ + s//\1/ + q + } + /^X\/\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` +# Avoid depending upon Character Ranges. +as_cr_letters='abcdefghijklmnopqrstuvwxyz' +as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' +as_cr_Letters=$as_cr_letters$as_cr_LETTERS +as_cr_digits='0123456789' +as_cr_alnum=$as_cr_Letters$as_cr_digits - as_lineno_1=$LINENO - as_lineno_2=$LINENO - test "x$as_lineno_1" != "x$as_lineno_2" && - test "x`expr $as_lineno_1 + 1`" = "x$as_lineno_2" || { - - # Create $as_me.lineno as a copy of $as_myself, but with $LINENO - # uniformly replaced by the line number. The first 'sed' inserts a - # line-number line after each line using $LINENO; the second 'sed' - # does the real work. The second script uses 'N' to pair each - # line-number line with the line containing $LINENO, and appends - # trailing '-' during substitution so that $LINENO is not a special - # case at line end. - # (Raja R Harinath suggested sed '=', and Paul Eggert wrote the - # scripts with optimization help from Paolo Bonzini. Blame Lee - # E. McMahon (1931-1989) for sed's syntax. :-) + as_lineno_1=$LINENO as_lineno_1a=$LINENO + as_lineno_2=$LINENO as_lineno_2a=$LINENO + eval 'test "x$as_lineno_1'$as_run'" != "x$as_lineno_2'$as_run'" && + test "x`expr $as_lineno_1'$as_run' + 1`" = "x$as_lineno_2'$as_run'"' || { + # Blame Lee E. McMahon (1931-1989) for sed's syntax. :-) sed -n ' p /[$]LINENO/= @@ -453,8 +442,7 @@ s/-\n.*// ' >$as_me.lineno && chmod +x "$as_me.lineno" || - { echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2 - { (exit 1); exit 1; }; } + { $as_echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2; as_fn_exit 1; } # Don't try to exec as it changes $[0], causing all sort of problems # (the dirname of $[0] is not the place where we might find the @@ -464,49 +452,40 @@ exit } - -if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then - as_dirname=dirname -else - as_dirname=false -fi - ECHO_C= ECHO_N= ECHO_T= -case `echo -n x` in +case `echo -n x` in #((((( -n*) - case `echo 'x\c'` in + case `echo 'xy\c'` in *c*) ECHO_T=' ';; # ECHO_T is single tab character. - *) ECHO_C='\c';; + xy) ECHO_C='\c';; + *) echo `echo ksh88 bug on AIX 6.1` > /dev/null + ECHO_T=' ';; esac;; *) ECHO_N='-n';; esac -if expr a : '\(a\)' >/dev/null 2>&1 && - test "X`expr 00001 : '.*\(...\)'`" = X001; then - as_expr=expr -else - as_expr=false -fi - rm -f conf$$ conf$$.exe conf$$.file if test -d conf$$.dir; then rm -f conf$$.dir/conf$$.file else rm -f conf$$.dir - mkdir conf$$.dir + mkdir conf$$.dir 2>/dev/null fi -echo >conf$$.file -if ln -s conf$$.file conf$$ 2>/dev/null; then - as_ln_s='ln -s' - # ... but there are two gotchas: - # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. - # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. - # In both cases, we have to default to `cp -p'. - ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || +if (echo >conf$$.file) 2>/dev/null; then + if ln -s conf$$.file conf$$ 2>/dev/null; then + as_ln_s='ln -s' + # ... but there are two gotchas: + # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. + # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. + # In both cases, we have to default to `cp -p'. + ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || + as_ln_s='cp -p' + elif ln conf$$.file conf$$ 2>/dev/null; then + as_ln_s=ln + else as_ln_s='cp -p' -elif ln conf$$.file conf$$ 2>/dev/null; then - as_ln_s=ln + fi else as_ln_s='cp -p' fi @@ -514,7 +493,7 @@ rmdir conf$$.dir 2>/dev/null if mkdir -p . 2>/dev/null; then - as_mkdir_p=: + as_mkdir_p='mkdir -p "$as_dir"' else test -d ./-p && rmdir ./-p as_mkdir_p=false @@ -531,12 +510,12 @@ as_test_x=' eval sh -c '\'' if test -d "$1"; then - test -d "$1/."; + test -d "$1/."; else - case $1 in - -*)set "./$1";; + case $1 in #( + -*)set "./$1";; esac; - case `ls -ld'$as_ls_L_option' "$1" 2>/dev/null` in + case `ls -ld'$as_ls_L_option' "$1" 2>/dev/null` in #(( ???[sx]*):;;*)false;;esac;fi '\'' sh ' @@ -550,162 +529,8 @@ as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" - - -# Check that we are running under the correct shell. -SHELL=${CONFIG_SHELL-/bin/sh} - -case X$ECHO in -X*--fallback-echo) - # Remove one level of quotation (which was required for Make). - ECHO=`echo "$ECHO" | sed 's,\\\\\$\\$0,'$0','` - ;; -esac - -echo=${ECHO-echo} -if test "X$1" = X--no-reexec; then - # Discard the --no-reexec flag, and continue. - shift -elif test "X$1" = X--fallback-echo; then - # Avoid inline document here, it may be left over - : -elif test "X`($echo '\t') 2>/dev/null`" = 'X\t' ; then - # Yippee, $echo works! - : -else - # Restart under the correct shell. - exec $SHELL "$0" --no-reexec ${1+"$@"} -fi - -if test "X$1" = X--fallback-echo; then - # used as fallback echo - shift - cat </dev/null 2>&1 && unset CDPATH - -if test -z "$ECHO"; then -if test "X${echo_test_string+set}" != Xset; then -# find a string as large as possible, as long as the shell can cope with it - for cmd in 'sed 50q "$0"' 'sed 20q "$0"' 'sed 10q "$0"' 'sed 2q "$0"' 'echo test'; do - # expected sizes: less than 2Kb, 1Kb, 512 bytes, 16 bytes, ... - if (echo_test_string=`eval $cmd`) 2>/dev/null && - echo_test_string=`eval $cmd` && - (test "X$echo_test_string" = "X$echo_test_string") 2>/dev/null - then - break - fi - done -fi - -if test "X`($echo '\t') 2>/dev/null`" = 'X\t' && - echo_testing_string=`($echo "$echo_test_string") 2>/dev/null` && - test "X$echo_testing_string" = "X$echo_test_string"; then - : -else - # The Solaris, AIX, and Digital Unix default echo programs unquote - # backslashes. This makes it impossible to quote backslashes using - # echo "$something" | sed 's/\\/\\\\/g' - # - # So, first we look for a working echo in the user's PATH. - - lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR - for dir in $PATH /usr/ucb; do - IFS="$lt_save_ifs" - if (test -f $dir/echo || test -f $dir/echo$ac_exeext) && - test "X`($dir/echo '\t') 2>/dev/null`" = 'X\t' && - echo_testing_string=`($dir/echo "$echo_test_string") 2>/dev/null` && - test "X$echo_testing_string" = "X$echo_test_string"; then - echo="$dir/echo" - break - fi - done - IFS="$lt_save_ifs" - - if test "X$echo" = Xecho; then - # We didn't find a better echo, so look for alternatives. - if test "X`(print -r '\t') 2>/dev/null`" = 'X\t' && - echo_testing_string=`(print -r "$echo_test_string") 2>/dev/null` && - test "X$echo_testing_string" = "X$echo_test_string"; then - # This shell has a builtin print -r that does the trick. - echo='print -r' - elif (test -f /bin/ksh || test -f /bin/ksh$ac_exeext) && - test "X$CONFIG_SHELL" != X/bin/ksh; then - # If we have ksh, try running configure again with it. - ORIGINAL_CONFIG_SHELL=${CONFIG_SHELL-/bin/sh} - export ORIGINAL_CONFIG_SHELL - CONFIG_SHELL=/bin/ksh - export CONFIG_SHELL - exec $CONFIG_SHELL "$0" --no-reexec ${1+"$@"} - else - # Try using printf. - echo='printf %s\n' - if test "X`($echo '\t') 2>/dev/null`" = 'X\t' && - echo_testing_string=`($echo "$echo_test_string") 2>/dev/null` && - test "X$echo_testing_string" = "X$echo_test_string"; then - # Cool, printf works - : - elif echo_testing_string=`($ORIGINAL_CONFIG_SHELL "$0" --fallback-echo '\t') 2>/dev/null` && - test "X$echo_testing_string" = 'X\t' && - echo_testing_string=`($ORIGINAL_CONFIG_SHELL "$0" --fallback-echo "$echo_test_string") 2>/dev/null` && - test "X$echo_testing_string" = "X$echo_test_string"; then - CONFIG_SHELL=$ORIGINAL_CONFIG_SHELL - export CONFIG_SHELL - SHELL="$CONFIG_SHELL" - export SHELL - echo="$CONFIG_SHELL $0 --fallback-echo" - elif echo_testing_string=`($CONFIG_SHELL "$0" --fallback-echo '\t') 2>/dev/null` && - test "X$echo_testing_string" = 'X\t' && - echo_testing_string=`($CONFIG_SHELL "$0" --fallback-echo "$echo_test_string") 2>/dev/null` && - test "X$echo_testing_string" = "X$echo_test_string"; then - echo="$CONFIG_SHELL $0 --fallback-echo" - else - # maybe with a smaller string... - prev=: - - for cmd in 'echo test' 'sed 2q "$0"' 'sed 10q "$0"' 'sed 20q "$0"' 'sed 50q "$0"'; do - if (test "X$echo_test_string" = "X`eval $cmd`") 2>/dev/null - then - break - fi - prev="$cmd" - done - - if test "$prev" != 'sed 50q "$0"'; then - echo_test_string=`eval $prev` - export echo_test_string - exec ${ORIGINAL_CONFIG_SHELL-${CONFIG_SHELL-/bin/sh}} "$0" ${1+"$@"} - else - # Oops. We lost completely, so just stick with echo. - echo=echo - fi - fi - fi - fi -fi -fi - -# Copy echo and quote the copy suitably for passing to libtool from -# the Makefile, instead of quoting the original, which is used later. -ECHO=$echo -if test "X$ECHO" = "X$CONFIG_SHELL $0 --fallback-echo"; then - ECHO="$CONFIG_SHELL \\\$\$0 --fallback-echo" -fi - - - - -tagnames=${tagnames+${tagnames},}CXX - -tagnames=${tagnames+${tagnames},}F77 - -exec 7<&0 &1 +test -n "$DJDIR" || exec 7<&0 &1 # Name of the host. # hostname on some systems (SVR3.2, Linux) returns a bogus exit status, @@ -723,14 +548,14 @@ subdirs= MFLAGS= MAKEFLAGS= -SHELL=${CONFIG_SHELL-/bin/sh} # Identity of this package. PACKAGE_NAME='libffi' PACKAGE_TARNAME='libffi' -PACKAGE_VERSION='3.0.5' -PACKAGE_STRING='libffi 3.0.5' +PACKAGE_VERSION='3.0.9' +PACKAGE_STRING='libffi 3.0.9' PACKAGE_BUGREPORT='http://gcc.gnu.org/bugs.html' +PACKAGE_URL='' # Factoring default headers for most tests. ac_includes_default="\ @@ -768,200 +593,196 @@ # include #endif" -ac_subst_vars='SHELL -PATH_SEPARATOR -PACKAGE_NAME -PACKAGE_TARNAME -PACKAGE_VERSION -PACKAGE_STRING -PACKAGE_BUGREPORT -exec_prefix -prefix -program_transform_name -bindir -sbindir -libexecdir -datarootdir -datadir -sysconfdir -sharedstatedir -localstatedir -includedir -oldincludedir -docdir -infodir -htmldir -dvidir -pdfdir -psdir -libdir -localedir -mandir -DEFS -ECHO_C -ECHO_N -ECHO_T -LIBS -build_alias -host_alias -target_alias -build -build_cpu -build_vendor -build_os -host -host_cpu -host_vendor -host_os -target -target_cpu -target_vendor -target_os -INSTALL_PROGRAM -INSTALL_SCRIPT -INSTALL_DATA -am__isrc -CYGPATH_W -PACKAGE -VERSION -ACLOCAL -AUTOCONF -AUTOMAKE -AUTOHEADER -MAKEINFO -install_sh -STRIP -INSTALL_STRIP_PROGRAM -mkdir_p -AWK -SET_MAKE -am__leading_dot -AMTAR -am__tar -am__untar -CC -CFLAGS -LDFLAGS -CPPFLAGS -ac_ct_CC -EXEEXT -OBJEXT -DEPDIR -am__include -am__quote -AMDEP_TRUE -AMDEP_FALSE -AMDEPBACKSLASH -CCDEPMODE -am__fastdepCC_TRUE -am__fastdepCC_FALSE -CCAS -CCASFLAGS -CCASDEPMODE -am__fastdepCCAS_TRUE -am__fastdepCCAS_FALSE -SED -GREP +ac_subst_vars='am__EXEEXT_FALSE +am__EXEEXT_TRUE +LTLIBOBJS +LIBOBJS +toolexeclibdir +toolexecdir +TARGETDIR +TARGET +HAVE_LONG_DOUBLE +ALLOCA +PA64_HPUX_FALSE +PA64_HPUX_TRUE +PA_HPUX_FALSE +PA_HPUX_TRUE +PA_LINUX_FALSE +PA_LINUX_TRUE +SH64_FALSE +SH64_TRUE +SH_FALSE +SH_TRUE +X86_64_FALSE +X86_64_TRUE +S390_FALSE +S390_TRUE +FRV_FALSE +FRV_TRUE +LIBFFI_CRIS_FALSE +LIBFFI_CRIS_TRUE +AVR32_FALSE +AVR32_TRUE +ARM_FALSE +ARM_TRUE +POWERPC_FREEBSD_FALSE +POWERPC_FREEBSD_TRUE +POWERPC_DARWIN_FALSE +POWERPC_DARWIN_TRUE +POWERPC_AIX_FALSE +POWERPC_AIX_TRUE +POWERPC_FALSE +POWERPC_TRUE +M68K_FALSE +M68K_TRUE +M32R_FALSE +M32R_TRUE +IA64_FALSE +IA64_TRUE +ALPHA_FALSE +ALPHA_TRUE +X86_DARWIN_FALSE +X86_DARWIN_TRUE +X86_WIN64_FALSE +X86_WIN64_TRUE +X86_WIN32_FALSE +X86_WIN32_TRUE +X86_FREEBSD_FALSE +X86_FREEBSD_TRUE +X86_FALSE +X86_TRUE +SPARC_FALSE +SPARC_TRUE +MIPS_FALSE +MIPS_TRUE +AM_LTLDFLAGS +AM_RUNTESTFLAGS +TESTSUBDIR_FALSE +TESTSUBDIR_TRUE EGREP -LN_S -ECHO -AR -RANLIB +GREP CPP -CXX -CXXFLAGS -ac_ct_CXX -CXXDEPMODE -am__fastdepCXX_TRUE -am__fastdepCXX_FALSE -CXXCPP -F77 -FFLAGS -ac_ct_F77 -LIBTOOL -MAINTAINER_MODE_TRUE -MAINTAINER_MODE_FALSE MAINT -TESTSUBDIR_TRUE -TESTSUBDIR_FALSE -AM_RUNTESTFLAGS -MIPS_TRUE -MIPS_FALSE -SPARC_TRUE -SPARC_FALSE -X86_TRUE -X86_FALSE -X86_FREEBSD_TRUE -X86_FREEBSD_FALSE -X86_WIN32_TRUE -X86_WIN32_FALSE -X86_DARWIN_TRUE -X86_DARWIN_FALSE -ALPHA_TRUE -ALPHA_FALSE -IA64_TRUE -IA64_FALSE -M32R_TRUE -M32R_FALSE -M68K_TRUE -M68K_FALSE -POWERPC_TRUE -POWERPC_FALSE -POWERPC_AIX_TRUE -POWERPC_AIX_FALSE -POWERPC_DARWIN_TRUE -POWERPC_DARWIN_FALSE -POWERPC_FREEBSD_TRUE -POWERPC_FREEBSD_FALSE -ARM_TRUE -ARM_FALSE -LIBFFI_CRIS_TRUE -LIBFFI_CRIS_FALSE -FRV_TRUE -FRV_FALSE -S390_TRUE -S390_FALSE -X86_64_TRUE -X86_64_FALSE -SH_TRUE -SH_FALSE -SH64_TRUE -SH64_FALSE -PA_LINUX_TRUE -PA_LINUX_FALSE -PA_HPUX_TRUE -PA_HPUX_FALSE -PA64_HPUX_TRUE -PA64_HPUX_FALSE -ALLOCA -HAVE_LONG_DOUBLE -TARGET -TARGETDIR -toolexecdir -toolexeclibdir -LIBOBJS -LTLIBOBJS' +MAINTAINER_MODE_FALSE +MAINTAINER_MODE_TRUE +am__fastdepCCAS_FALSE +am__fastdepCCAS_TRUE +CCASDEPMODE +CCASFLAGS +CCAS +am__fastdepCC_FALSE +am__fastdepCC_TRUE +CCDEPMODE +AMDEPBACKSLASH +AMDEP_FALSE +AMDEP_TRUE +am__quote +am__include +DEPDIR +OBJEXT +EXEEXT +ac_ct_CC +CPPFLAGS +LDFLAGS +CFLAGS +CC +am__untar +am__tar +AMTAR +am__leading_dot +SET_MAKE +AWK +mkdir_p +MKDIR_P +INSTALL_STRIP_PROGRAM +STRIP +install_sh +MAKEINFO +AUTOHEADER +AUTOMAKE +AUTOCONF +ACLOCAL +VERSION +PACKAGE +CYGPATH_W +am__isrc +INSTALL_DATA +INSTALL_SCRIPT +INSTALL_PROGRAM +target_os +target_vendor +target_cpu +target +host_os +host_vendor +host_cpu +host +build_os +build_vendor +build_cpu +build +target_alias +host_alias +build_alias +LIBS +ECHO_T +ECHO_N +ECHO_C +DEFS +mandir +localedir +libdir +psdir +pdfdir +dvidir +htmldir +infodir +docdir +oldincludedir +includedir +localstatedir +sharedstatedir +sysconfdir +datadir +datarootdir +libexecdir +sbindir +bindir +program_transform_name +prefix +exec_prefix +PACKAGE_URL +PACKAGE_BUGREPORT +PACKAGE_STRING +PACKAGE_VERSION +PACKAGE_TARNAME +PACKAGE_NAME +PATH_SEPARATOR +SHELL' ac_subst_files='' +ac_user_opts=' +enable_option_checking +enable_dependency_tracking +enable_maintainer_mode +enable_debug +enable_structs +enable_raw_api +enable_purify_safety +' ac_precious_vars='build_alias host_alias target_alias CCAS CCASFLAGS CPP -CPPFLAGS -CXX -CXXFLAGS -LDFLAGS -LIBS -CCC -CXXCPP -F77 -FFLAGS' +CPPFLAGS' # Initialize some variables set by options. ac_init_help= ac_init_version=false +ac_unrecognized_opts= +ac_unrecognized_sep= # The variables have the same names as the options, with # dashes changed to underlines. cache_file=/dev/null @@ -1060,13 +881,20 @@ datarootdir=$ac_optarg ;; -disable-* | --disable-*) - ac_feature=`expr "x$ac_option" : 'x-*disable-\(.*\)'` + ac_useropt=`expr "x$ac_option" : 'x-*disable-\(.*\)'` # Reject names that are not valid shell variable names. - expr "x$ac_feature" : ".*[^-._$as_cr_alnum]" >/dev/null && - { echo "$as_me: error: invalid feature name: $ac_feature" >&2 - { (exit 1); exit 1; }; } - ac_feature=`echo $ac_feature | sed 's/[-.]/_/g'` - eval enable_$ac_feature=no ;; + expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && + as_fn_error "invalid feature name: $ac_useropt" + ac_useropt_orig=$ac_useropt + ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` + case $ac_user_opts in + *" +"enable_$ac_useropt" +"*) ;; + *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--disable-$ac_useropt_orig" + ac_unrecognized_sep=', ';; + esac + eval enable_$ac_useropt=no ;; -docdir | --docdir | --docdi | --doc | --do) ac_prev=docdir ;; @@ -1079,13 +907,20 @@ dvidir=$ac_optarg ;; -enable-* | --enable-*) - ac_feature=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'` + ac_useropt=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'` # Reject names that are not valid shell variable names. - expr "x$ac_feature" : ".*[^-._$as_cr_alnum]" >/dev/null && - { echo "$as_me: error: invalid feature name: $ac_feature" >&2 - { (exit 1); exit 1; }; } - ac_feature=`echo $ac_feature | sed 's/[-.]/_/g'` - eval enable_$ac_feature=\$ac_optarg ;; + expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && + as_fn_error "invalid feature name: $ac_useropt" + ac_useropt_orig=$ac_useropt + ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` + case $ac_user_opts in + *" +"enable_$ac_useropt" +"*) ;; + *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--enable-$ac_useropt_orig" + ac_unrecognized_sep=', ';; + esac + eval enable_$ac_useropt=\$ac_optarg ;; -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \ | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \ @@ -1276,22 +1111,36 @@ ac_init_version=: ;; -with-* | --with-*) - ac_package=`expr "x$ac_option" : 'x-*with-\([^=]*\)'` + ac_useropt=`expr "x$ac_option" : 'x-*with-\([^=]*\)'` # Reject names that are not valid shell variable names. - expr "x$ac_package" : ".*[^-._$as_cr_alnum]" >/dev/null && - { echo "$as_me: error: invalid package name: $ac_package" >&2 - { (exit 1); exit 1; }; } - ac_package=`echo $ac_package | sed 's/[-.]/_/g'` - eval with_$ac_package=\$ac_optarg ;; + expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && + as_fn_error "invalid package name: $ac_useropt" + ac_useropt_orig=$ac_useropt + ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` + case $ac_user_opts in + *" +"with_$ac_useropt" +"*) ;; + *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--with-$ac_useropt_orig" + ac_unrecognized_sep=', ';; + esac + eval with_$ac_useropt=\$ac_optarg ;; -without-* | --without-*) - ac_package=`expr "x$ac_option" : 'x-*without-\(.*\)'` + ac_useropt=`expr "x$ac_option" : 'x-*without-\(.*\)'` # Reject names that are not valid shell variable names. - expr "x$ac_package" : ".*[^-._$as_cr_alnum]" >/dev/null && - { echo "$as_me: error: invalid package name: $ac_package" >&2 - { (exit 1); exit 1; }; } - ac_package=`echo $ac_package | sed 's/[-.]/_/g'` - eval with_$ac_package=no ;; + expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && + as_fn_error "invalid package name: $ac_useropt" + ac_useropt_orig=$ac_useropt + ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` + case $ac_user_opts in + *" +"with_$ac_useropt" +"*) ;; + *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--without-$ac_useropt_orig" + ac_unrecognized_sep=', ';; + esac + eval with_$ac_useropt=no ;; --x) # Obsolete; use --with-x. @@ -1311,25 +1160,25 @@ | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*) x_libraries=$ac_optarg ;; - -*) { echo "$as_me: error: unrecognized option: $ac_option -Try \`$0 --help' for more information." >&2 - { (exit 1); exit 1; }; } + -*) as_fn_error "unrecognized option: \`$ac_option' +Try \`$0 --help' for more information." ;; *=*) ac_envvar=`expr "x$ac_option" : 'x\([^=]*\)='` # Reject names that are not valid shell variable names. - expr "x$ac_envvar" : ".*[^_$as_cr_alnum]" >/dev/null && - { echo "$as_me: error: invalid variable name: $ac_envvar" >&2 - { (exit 1); exit 1; }; } + case $ac_envvar in #( + '' | [0-9]* | *[!_$as_cr_alnum]* ) + as_fn_error "invalid variable name: \`$ac_envvar'" ;; + esac eval $ac_envvar=\$ac_optarg export $ac_envvar ;; *) # FIXME: should be removed in autoconf 3.0. - echo "$as_me: WARNING: you should use --build, --host, --target" >&2 + $as_echo "$as_me: WARNING: you should use --build, --host, --target" >&2 expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null && - echo "$as_me: WARNING: invalid host type: $ac_option" >&2 + $as_echo "$as_me: WARNING: invalid host type: $ac_option" >&2 : ${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option} ;; @@ -1338,23 +1187,36 @@ if test -n "$ac_prev"; then ac_option=--`echo $ac_prev | sed 's/_/-/g'` - { echo "$as_me: error: missing argument to $ac_option" >&2 - { (exit 1); exit 1; }; } + as_fn_error "missing argument to $ac_option" +fi + +if test -n "$ac_unrecognized_opts"; then + case $enable_option_checking in + no) ;; + fatal) as_fn_error "unrecognized options: $ac_unrecognized_opts" ;; + *) $as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2 ;; + esac fi -# Be sure to have absolute directory names. +# Check all directory arguments for consistency. for ac_var in exec_prefix prefix bindir sbindir libexecdir datarootdir \ datadir sysconfdir sharedstatedir localstatedir includedir \ oldincludedir docdir infodir htmldir dvidir pdfdir psdir \ libdir localedir mandir do eval ac_val=\$$ac_var + # Remove trailing slashes. + case $ac_val in + */ ) + ac_val=`expr "X$ac_val" : 'X\(.*[^/]\)' \| "X$ac_val" : 'X\(.*\)'` + eval $ac_var=\$ac_val;; + esac + # Be sure to have absolute directory names. case $ac_val in [\\/$]* | ?:[\\/]* ) continue;; NONE | '' ) case $ac_var in *prefix ) continue;; esac;; esac - { echo "$as_me: error: expected an absolute directory name for --$ac_var: $ac_val" >&2 - { (exit 1); exit 1; }; } + as_fn_error "expected an absolute directory name for --$ac_var: $ac_val" done # There might be people who depend on the old broken behavior: `$host' @@ -1368,7 +1230,7 @@ if test "x$host_alias" != x; then if test "x$build_alias" = x; then cross_compiling=maybe - echo "$as_me: WARNING: If you wanted to set the --build type, don't use --host. + $as_echo "$as_me: WARNING: If you wanted to set the --build type, don't use --host. If a cross compiler is detected then cross compile mode will be used." >&2 elif test "x$build_alias" != "x$host_alias"; then cross_compiling=yes @@ -1384,23 +1246,21 @@ ac_pwd=`pwd` && test -n "$ac_pwd" && ac_ls_di=`ls -di .` && ac_pwd_ls_di=`cd "$ac_pwd" && ls -di .` || - { echo "$as_me: error: Working directory cannot be determined" >&2 - { (exit 1); exit 1; }; } + as_fn_error "working directory cannot be determined" test "X$ac_ls_di" = "X$ac_pwd_ls_di" || - { echo "$as_me: error: pwd does not report name of working directory" >&2 - { (exit 1); exit 1; }; } + as_fn_error "pwd does not report name of working directory" # Find the source files, if location was not specified. if test -z "$srcdir"; then ac_srcdir_defaulted=yes # Try the directory containing this script, then the parent directory. - ac_confdir=`$as_dirname -- "$0" || -$as_expr X"$0" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ - X"$0" : 'X\(//\)[^/]' \| \ - X"$0" : 'X\(//\)$' \| \ - X"$0" : 'X\(/\)' \| . 2>/dev/null || -echo X"$0" | + ac_confdir=`$as_dirname -- "$as_myself" || +$as_expr X"$as_myself" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$as_myself" : 'X\(//\)[^/]' \| \ + X"$as_myself" : 'X\(//\)$' \| \ + X"$as_myself" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X"$as_myself" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q @@ -1427,13 +1287,11 @@ fi if test ! -r "$srcdir/$ac_unique_file"; then test "$ac_srcdir_defaulted" = yes && srcdir="$ac_confdir or .." - { echo "$as_me: error: cannot find sources ($ac_unique_file) in $srcdir" >&2 - { (exit 1); exit 1; }; } + as_fn_error "cannot find sources ($ac_unique_file) in $srcdir" fi ac_msg="sources are in $srcdir, but \`cd $srcdir' does not work" ac_abs_confdir=`( - cd "$srcdir" && test -r "./$ac_unique_file" || { echo "$as_me: error: $ac_msg" >&2 - { (exit 1); exit 1; }; } + cd "$srcdir" && test -r "./$ac_unique_file" || as_fn_error "$ac_msg" pwd)` # When building in place, set srcdir=. if test "$ac_abs_confdir" = "$ac_pwd"; then @@ -1459,7 +1317,7 @@ # Omit some internal or obsolete options to make the list less imposing. # This message is too long to be a string in the A/UX 3.1 sh. cat <<_ACEOF -\`configure' configures libffi 3.0.5 to adapt to many kinds of systems. +\`configure' configures libffi 3.0.9 to adapt to many kinds of systems. Usage: $0 [OPTION]... [VAR=VALUE]... @@ -1481,9 +1339,9 @@ Installation directories: --prefix=PREFIX install architecture-independent files in PREFIX - [$ac_default_prefix] + [$ac_default_prefix] --exec-prefix=EPREFIX install architecture-dependent files in EPREFIX - [PREFIX] + [PREFIX] By default, \`make install' will install all the files in \`$ac_default_prefix/bin', \`$ac_default_prefix/lib' etc. You can specify @@ -1493,25 +1351,25 @@ For better control, use the options below. Fine tuning of the installation directories: - --bindir=DIR user executables [EPREFIX/bin] - --sbindir=DIR system admin executables [EPREFIX/sbin] - --libexecdir=DIR program executables [EPREFIX/libexec] - --sysconfdir=DIR read-only single-machine data [PREFIX/etc] - --sharedstatedir=DIR modifiable architecture-independent data [PREFIX/com] - --localstatedir=DIR modifiable single-machine data [PREFIX/var] - --libdir=DIR object code libraries [EPREFIX/lib] - --includedir=DIR C header files [PREFIX/include] - --oldincludedir=DIR C header files for non-gcc [/usr/include] - --datarootdir=DIR read-only arch.-independent data root [PREFIX/share] - --datadir=DIR read-only architecture-independent data [DATAROOTDIR] - --infodir=DIR info documentation [DATAROOTDIR/info] - --localedir=DIR locale-dependent data [DATAROOTDIR/locale] - --mandir=DIR man documentation [DATAROOTDIR/man] - --docdir=DIR documentation root [DATAROOTDIR/doc/libffi] - --htmldir=DIR html documentation [DOCDIR] - --dvidir=DIR dvi documentation [DOCDIR] - --pdfdir=DIR pdf documentation [DOCDIR] - --psdir=DIR ps documentation [DOCDIR] + --bindir=DIR user executables [EPREFIX/bin] + --sbindir=DIR system admin executables [EPREFIX/sbin] + --libexecdir=DIR program executables [EPREFIX/libexec] + --sysconfdir=DIR read-only single-machine data [PREFIX/etc] + --sharedstatedir=DIR modifiable architecture-independent data [PREFIX/com] + --localstatedir=DIR modifiable single-machine data [PREFIX/var] + --libdir=DIR object code libraries [EPREFIX/lib] + --includedir=DIR C header files [PREFIX/include] + --oldincludedir=DIR C header files for non-gcc [/usr/include] + --datarootdir=DIR read-only arch.-independent data root [PREFIX/share] + --datadir=DIR read-only architecture-independent data [DATAROOTDIR] + --infodir=DIR info documentation [DATAROOTDIR/info] + --localedir=DIR locale-dependent data [DATAROOTDIR/locale] + --mandir=DIR man documentation [DATAROOTDIR/man] + --docdir=DIR documentation root [DATAROOTDIR/doc/libffi] + --htmldir=DIR html documentation [DOCDIR] + --dvidir=DIR dvi documentation [DOCDIR] + --pdfdir=DIR pdf documentation [DOCDIR] + --psdir=DIR ps documentation [DOCDIR] _ACEOF cat <<\_ACEOF @@ -1530,20 +1388,16 @@ if test -n "$ac_init_help"; then case $ac_init_help in - short | recursive ) echo "Configuration of libffi 3.0.5:";; + short | recursive ) echo "Configuration of libffi 3.0.9:";; esac cat <<\_ACEOF Optional Features: + --disable-option-checking ignore unrecognized --enable/--with options --disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no) --enable-FEATURE[=ARG] include FEATURE [ARG=yes] --disable-dependency-tracking speeds up one-time build --enable-dependency-tracking do not reject slow dependency extractors - --enable-shared[=PKGS] build shared libraries [default=yes] - --enable-static[=PKGS] build static libraries [default=yes] - --enable-fast-install[=PKGS] - optimize for fast installation [default=yes] - --disable-libtool-lock avoid locking (might break parallel builds) --enable-maintainer-mode enable make rules and dependencies not useful (and sometimes confusing) to the casual installer --enable-debug debugging mode @@ -1551,30 +1405,17 @@ --disable-raw-api make the raw api unavailable --enable-purify-safety purify-safe mode -Optional Packages: - --with-PACKAGE[=ARG] use PACKAGE [ARG=yes] - --without-PACKAGE do not use PACKAGE (same as --with-PACKAGE=no) - --with-gnu-ld assume the C compiler uses GNU ld [default=no] - --with-pic try to use only PIC/non-PIC objects [default=use - both] - --with-tags[=TAGS] include additional configurations [automatic] - Some influential environment variables: CC C compiler command CFLAGS C compiler flags LDFLAGS linker flags, e.g. -L if you have libraries in a nonstandard directory LIBS libraries to pass to the linker, e.g. -l - CPPFLAGS C/C++/Objective C preprocessor flags, e.g. -I if + CPPFLAGS (Objective) C/C++ preprocessor flags, e.g. -I if you have headers in a nonstandard directory CCAS assembler compiler command (defaults to CC) CCASFLAGS assembler compiler flags (defaults to CFLAGS) CPP C preprocessor - CXX C++ compiler command - CXXFLAGS C++ compiler flags - CXXCPP C++ preprocessor - F77 Fortran 77 compiler command - FFLAGS Fortran 77 compiler flags Use these variables to override the choices made by `configure' or to help it to find libraries and programs with nonstandard names/locations. @@ -1587,15 +1428,17 @@ if test "$ac_init_help" = "recursive"; then # If there are subdirs, report their specific --help. for ac_dir in : $ac_subdirs_all; do test "x$ac_dir" = x: && continue - test -d "$ac_dir" || continue + test -d "$ac_dir" || + { cd "$srcdir" && ac_pwd=`pwd` && srcdir=. && test -d "$ac_dir"; } || + continue ac_builddir=. case "$ac_dir" in .) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; *) - ac_dir_suffix=/`echo "$ac_dir" | sed 's,^\.[\\/],,'` + ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'` # A ".." for each directory in $ac_dir_suffix. - ac_top_builddir_sub=`echo "$ac_dir_suffix" | sed 's,/[^\\/]*,/..,g;s,/,,'` + ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` case $ac_top_builddir_sub in "") ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; @@ -1631,7 +1474,7 @@ echo && $SHELL "$ac_srcdir/configure" --help=recursive else - echo "$as_me: WARNING: no configuration information is in $ac_dir" >&2 + $as_echo "$as_me: WARNING: no configuration information is in $ac_dir" >&2 fi || ac_status=$? cd "$ac_pwd" || { ac_status=$?; break; } done @@ -1640,79 +1483,614 @@ test -n "$ac_init_help" && exit $ac_status if $ac_init_version; then cat <<\_ACEOF -libffi configure 3.0.5 -generated by GNU Autoconf 2.61 +libffi configure 3.0.9 +generated by GNU Autoconf 2.65 -Copyright (C) 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001, -2002, 2003, 2004, 2005, 2006 Free Software Foundation, Inc. +Copyright (C) 2009 Free Software Foundation, Inc. This configure script is free software; the Free Software Foundation gives unlimited permission to copy, distribute and modify it. _ACEOF exit fi -cat >config.log <<_ACEOF -This file contains any messages produced by compilers while -running configure, to aid debugging if configure makes a mistake. -It was created by libffi $as_me 3.0.5, which was -generated by GNU Autoconf 2.61. Invocation command line was +## ------------------------ ## +## Autoconf initialization. ## +## ------------------------ ## + +# ac_fn_c_try_compile LINENO +# -------------------------- +# Try to compile conftest.$ac_ext, and return whether this succeeded. +ac_fn_c_try_compile () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + rm -f conftest.$ac_objext + if { { ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_compile") 2>conftest.err + ac_status=$? + if test -s conftest.err; then + grep -v '^ *+' conftest.err >conftest.er1 + cat conftest.er1 >&5 + mv -f conftest.er1 conftest.err + fi + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then : + ac_retval=0 +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_retval=1 +fi + eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;} + as_fn_set_status $ac_retval - $ $0 $@ +} # ac_fn_c_try_compile -_ACEOF -exec 5>>config.log +# ac_fn_c_try_cpp LINENO +# ---------------------- +# Try to preprocess conftest.$ac_ext, and return whether this succeeded. +ac_fn_c_try_cpp () { -cat <<_ASUNAME -## --------- ## -## Platform. ## -## --------- ## + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + if { { ac_try="$ac_cpp conftest.$ac_ext" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_cpp conftest.$ac_ext") 2>conftest.err + ac_status=$? + if test -s conftest.err; then + grep -v '^ *+' conftest.err >conftest.er1 + cat conftest.er1 >&5 + mv -f conftest.er1 conftest.err + fi + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } >/dev/null && { + test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || + test ! -s conftest.err + }; then : + ac_retval=0 +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 -hostname = `(hostname || uname -n) 2>/dev/null | sed 1q` -uname -m = `(uname -m) 2>/dev/null || echo unknown` -uname -r = `(uname -r) 2>/dev/null || echo unknown` -uname -s = `(uname -s) 2>/dev/null || echo unknown` -uname -v = `(uname -v) 2>/dev/null || echo unknown` + ac_retval=1 +fi + eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;} + as_fn_set_status $ac_retval -/usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null || echo unknown` -/bin/uname -X = `(/bin/uname -X) 2>/dev/null || echo unknown` +} # ac_fn_c_try_cpp -/bin/arch = `(/bin/arch) 2>/dev/null || echo unknown` -/usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null || echo unknown` -/usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null || echo unknown` -/usr/bin/hostinfo = `(/usr/bin/hostinfo) 2>/dev/null || echo unknown` -/bin/machine = `(/bin/machine) 2>/dev/null || echo unknown` -/usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null || echo unknown` -/bin/universe = `(/bin/universe) 2>/dev/null || echo unknown` +# ac_fn_c_check_header_mongrel LINENO HEADER VAR INCLUDES +# ------------------------------------------------------- +# Tests whether HEADER exists, giving a warning if it cannot be compiled using +# the include files in INCLUDES and setting the cache variable VAR +# accordingly. +ac_fn_c_check_header_mongrel () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + if { as_var=$3; eval "test \"\${$as_var+set}\" = set"; }; then : + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 +$as_echo_n "checking for $2... " >&6; } +if { as_var=$3; eval "test \"\${$as_var+set}\" = set"; }; then : + $as_echo_n "(cached) " >&6 +fi +eval ac_res=\$$3 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } +else + # Is the header compilable? +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 usability" >&5 +$as_echo_n "checking $2 usability... " >&6; } +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$4 +#include <$2> +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_header_compiler=yes +else + ac_header_compiler=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_compiler" >&5 +$as_echo "$ac_header_compiler" >&6; } -_ASUNAME +# Is the header present? +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 presence" >&5 +$as_echo_n "checking $2 presence... " >&6; } +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include <$2> +_ACEOF +if ac_fn_c_try_cpp "$LINENO"; then : + ac_header_preproc=yes +else + ac_header_preproc=no +fi +rm -f conftest.err conftest.$ac_ext +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_preproc" >&5 +$as_echo "$ac_header_preproc" >&6; } -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - echo "PATH: $as_dir" -done -IFS=$as_save_IFS +# So? What about this header? +case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in #(( + yes:no: ) + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&5 +$as_echo "$as_me: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5 +$as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;} + ;; + no:yes:* ) + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: present but cannot be compiled" >&5 +$as_echo "$as_me: WARNING: $2: present but cannot be compiled" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: check for missing prerequisite headers?" >&5 +$as_echo "$as_me: WARNING: $2: check for missing prerequisite headers?" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: see the Autoconf documentation" >&5 +$as_echo "$as_me: WARNING: $2: see the Autoconf documentation" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: section \"Present But Cannot Be Compiled\"" >&5 +$as_echo "$as_me: WARNING: $2: section \"Present But Cannot Be Compiled\"" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5 +$as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;} +( cat <<\_ASBOX +## ------------------------------------------- ## +## Report this to http://gcc.gnu.org/bugs.html ## +## ------------------------------------------- ## +_ASBOX + ) | sed "s/^/$as_me: WARNING: /" >&2 + ;; +esac + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 +$as_echo_n "checking for $2... " >&6; } +if { as_var=$3; eval "test \"\${$as_var+set}\" = set"; }; then : + $as_echo_n "(cached) " >&6 +else + eval "$3=\$ac_header_compiler" +fi +eval ac_res=\$$3 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } +fi + eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;} -} >&5 +} # ac_fn_c_check_header_mongrel -cat >&5 <<_ACEOF +# ac_fn_c_try_run LINENO +# ---------------------- +# Try to link conftest.$ac_ext, and return whether this succeeded. Assumes +# that executables *can* be run. +ac_fn_c_try_run () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + if { { ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_link") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } && { ac_try='./conftest$ac_exeext' + { { case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_try") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then : + ac_retval=0 +else + $as_echo "$as_me: program exited with status $ac_status" >&5 + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + ac_retval=$ac_status +fi + rm -rf conftest.dSYM conftest_ipa8_conftest.oo + eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;} + as_fn_set_status $ac_retval -## ----------- ## -## Core tests. ## -## ----------- ## +} # ac_fn_c_try_run +# ac_fn_c_check_header_compile LINENO HEADER VAR INCLUDES +# ------------------------------------------------------- +# Tests whether HEADER exists and can be compiled using the include files in +# INCLUDES, setting the cache variable VAR accordingly. +ac_fn_c_check_header_compile () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 +$as_echo_n "checking for $2... " >&6; } +if { as_var=$3; eval "test \"\${$as_var+set}\" = set"; }; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$4 +#include <$2> _ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + eval "$3=yes" +else + eval "$3=no" +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +eval ac_res=\$$3 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } + eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;} +} # ac_fn_c_check_header_compile -# Keep a trace of the command line. -# Strip out --no-create and --no-recursion so they do not pile up. -# Strip out --silent because we don't want to record it for future runs. -# Also quote any args containing shell meta-characters. -# Make two passes to allow for proper duplicate-argument suppression. -ac_configure_args= +# ac_fn_c_try_link LINENO +# ----------------------- +# Try to link conftest.$ac_ext, and return whether this succeeded. +ac_fn_c_try_link () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + rm -f conftest.$ac_objext conftest$ac_exeext + if { { ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_link") 2>conftest.err + ac_status=$? + if test -s conftest.err; then + grep -v '^ *+' conftest.err >conftest.er1 + cat conftest.er1 >&5 + mv -f conftest.er1 conftest.err + fi + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest$ac_exeext && { + test "$cross_compiling" = yes || + $as_test_x conftest$ac_exeext + }; then : + ac_retval=0 +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_retval=1 +fi + # Delete the IPA/IPO (Inter Procedural Analysis/Optimization) information + # created by the PGI compiler (conftest_ipa8_conftest.oo), as it would + # interfere with the next link command; also delete a directory that is + # left behind by Apple's compiler. We do this before executing the actions. + rm -rf conftest.dSYM conftest_ipa8_conftest.oo + eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;} + as_fn_set_status $ac_retval + +} # ac_fn_c_try_link + +# ac_fn_c_check_func LINENO FUNC VAR +# ---------------------------------- +# Tests whether FUNC exists, setting the cache variable VAR accordingly +ac_fn_c_check_func () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 +$as_echo_n "checking for $2... " >&6; } +if { as_var=$3; eval "test \"\${$as_var+set}\" = set"; }; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +/* Define $2 to an innocuous variant, in case declares $2. + For example, HP-UX 11i declares gettimeofday. */ +#define $2 innocuous_$2 + +/* System header to define __stub macros and hopefully few prototypes, + which can conflict with char $2 (); below. + Prefer to if __STDC__ is defined, since + exists even on freestanding compilers. */ + +#ifdef __STDC__ +# include +#else +# include +#endif + +#undef $2 + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char $2 (); +/* The GNU C library defines this for functions which it implements + to always fail with ENOSYS. Some functions are actually named + something starting with __ and the normal name is an alias. */ +#if defined __stub_$2 || defined __stub___$2 +choke me +#endif + +int +main () +{ +return $2 (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + eval "$3=yes" +else + eval "$3=no" +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +fi +eval ac_res=\$$3 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } + eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;} + +} # ac_fn_c_check_func + +# ac_fn_c_compute_int LINENO EXPR VAR INCLUDES +# -------------------------------------------- +# Tries to find the compile-time value of EXPR in a program that includes +# INCLUDES, setting VAR accordingly. Returns whether the value could be +# computed +ac_fn_c_compute_int () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + if test "$cross_compiling" = yes; then + # Depending upon the size, compute the lo and hi bounds. +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$4 +int +main () +{ +static int test_array [1 - 2 * !(($2) >= 0)]; +test_array [0] = 0 + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_lo=0 ac_mid=0 + while :; do + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$4 +int +main () +{ +static int test_array [1 - 2 * !(($2) <= $ac_mid)]; +test_array [0] = 0 + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_hi=$ac_mid; break +else + as_fn_arith $ac_mid + 1 && ac_lo=$as_val + if test $ac_lo -le $ac_mid; then + ac_lo= ac_hi= + break + fi + as_fn_arith 2 '*' $ac_mid + 1 && ac_mid=$as_val +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + done +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$4 +int +main () +{ +static int test_array [1 - 2 * !(($2) < 0)]; +test_array [0] = 0 + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_hi=-1 ac_mid=-1 + while :; do + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$4 +int +main () +{ +static int test_array [1 - 2 * !(($2) >= $ac_mid)]; +test_array [0] = 0 + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_lo=$ac_mid; break +else + as_fn_arith '(' $ac_mid ')' - 1 && ac_hi=$as_val + if test $ac_mid -le $ac_hi; then + ac_lo= ac_hi= + break + fi + as_fn_arith 2 '*' $ac_mid && ac_mid=$as_val +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + done +else + ac_lo= ac_hi= +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +# Binary search between lo and hi bounds. +while test "x$ac_lo" != "x$ac_hi"; do + as_fn_arith '(' $ac_hi - $ac_lo ')' / 2 + $ac_lo && ac_mid=$as_val + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$4 +int +main () +{ +static int test_array [1 - 2 * !(($2) <= $ac_mid)]; +test_array [0] = 0 + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_hi=$ac_mid +else + as_fn_arith '(' $ac_mid ')' + 1 && ac_lo=$as_val +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +done +case $ac_lo in #(( +?*) eval "$3=\$ac_lo"; ac_retval=0 ;; +'') ac_retval=1 ;; +esac + else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$4 +static long int longval () { return $2; } +static unsigned long int ulongval () { return $2; } +#include +#include +int +main () +{ + + FILE *f = fopen ("conftest.val", "w"); + if (! f) + return 1; + if (($2) < 0) + { + long int i = longval (); + if (i != ($2)) + return 1; + fprintf (f, "%ld", i); + } + else + { + unsigned long int i = ulongval (); + if (i != ($2)) + return 1; + fprintf (f, "%lu", i); + } + /* Do not output a trailing newline, as this causes \r\n confusion + on some platforms. */ + return ferror (f) || fclose (f) != 0; + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_run "$LINENO"; then : + echo >>conftest.val; read $3 config.log <<_ACEOF +This file contains any messages produced by compilers while +running configure, to aid debugging if configure makes a mistake. + +It was created by libffi $as_me 3.0.9, which was +generated by GNU Autoconf 2.65. Invocation command line was + + $ $0 $@ + +_ACEOF +exec 5>>config.log +{ +cat <<_ASUNAME +## --------- ## +## Platform. ## +## --------- ## + +hostname = `(hostname || uname -n) 2>/dev/null | sed 1q` +uname -m = `(uname -m) 2>/dev/null || echo unknown` +uname -r = `(uname -r) 2>/dev/null || echo unknown` +uname -s = `(uname -s) 2>/dev/null || echo unknown` +uname -v = `(uname -v) 2>/dev/null || echo unknown` + +/usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null || echo unknown` +/bin/uname -X = `(/bin/uname -X) 2>/dev/null || echo unknown` + +/bin/arch = `(/bin/arch) 2>/dev/null || echo unknown` +/usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null || echo unknown` +/usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null || echo unknown` +/usr/bin/hostinfo = `(/usr/bin/hostinfo) 2>/dev/null || echo unknown` +/bin/machine = `(/bin/machine) 2>/dev/null || echo unknown` +/usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null || echo unknown` +/bin/universe = `(/bin/universe) 2>/dev/null || echo unknown` + +_ASUNAME + +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + $as_echo "PATH: $as_dir" + done +IFS=$as_save_IFS + +} >&5 + +cat >&5 <<_ACEOF + + +## ----------- ## +## Core tests. ## +## ----------- ## + +_ACEOF + + +# Keep a trace of the command line. +# Strip out --no-create and --no-recursion so they do not pile up. +# Strip out --silent because we don't want to record it for future runs. +# Also quote any args containing shell meta-characters. +# Make two passes to allow for proper duplicate-argument suppression. +ac_configure_args= ac_configure_args0= ac_configure_args1= ac_must_keep_next=false @@ -1726,12 +2104,12 @@ | -silent | --silent | --silen | --sile | --sil) continue ;; *\'*) - ac_arg=`echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;; + ac_arg=`$as_echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;; esac case $ac_pass in - 1) ac_configure_args0="$ac_configure_args0 '$ac_arg'" ;; + 1) as_fn_append ac_configure_args0 " '$ac_arg'" ;; 2) - ac_configure_args1="$ac_configure_args1 '$ac_arg'" + as_fn_append ac_configure_args1 " '$ac_arg'" if test $ac_must_keep_next = true; then ac_must_keep_next=false # Got value, back to normal. else @@ -1747,13 +2125,13 @@ -* ) ac_must_keep_next=true ;; esac fi - ac_configure_args="$ac_configure_args '$ac_arg'" + as_fn_append ac_configure_args " '$ac_arg'" ;; esac done done -$as_unset ac_configure_args0 || test "${ac_configure_args0+set}" != set || { ac_configure_args0=; export ac_configure_args0; } -$as_unset ac_configure_args1 || test "${ac_configure_args1+set}" != set || { ac_configure_args1=; export ac_configure_args1; } +{ ac_configure_args0=; unset ac_configure_args0;} +{ ac_configure_args1=; unset ac_configure_args1;} # When interrupted or exit'd, cleanup temporary files, and complete # config.log. We remove comments because anyway the quotes in there @@ -1778,12 +2156,13 @@ case $ac_val in #( *${as_nl}*) case $ac_var in #( - *_cv_*) { echo "$as_me:$LINENO: WARNING: Cache variable $ac_var contains a newline." >&5 -echo "$as_me: WARNING: Cache variable $ac_var contains a newline." >&2;} ;; + *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 +$as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; esac case $ac_var in #( _ | IFS | as_nl) ;; #( - *) $as_unset $ac_var ;; + BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #( + *) { eval $ac_var=; unset $ac_var;} ;; esac ;; esac done @@ -1812,9 +2191,9 @@ do eval ac_val=\$$ac_var case $ac_val in - *\'\''*) ac_val=`echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; + *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; esac - echo "$ac_var='\''$ac_val'\''" + $as_echo "$ac_var='\''$ac_val'\''" done | sort echo @@ -1829,9 +2208,9 @@ do eval ac_val=\$$ac_var case $ac_val in - *\'\''*) ac_val=`echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; + *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; esac - echo "$ac_var='\''$ac_val'\''" + $as_echo "$ac_var='\''$ac_val'\''" done | sort echo fi @@ -1847,83 +2226,88 @@ echo fi test "$ac_signal" != 0 && - echo "$as_me: caught signal $ac_signal" - echo "$as_me: exit $exit_status" + $as_echo "$as_me: caught signal $ac_signal" + $as_echo "$as_me: exit $exit_status" } >&5 rm -f core *.core core.conftest.* && rm -f -r conftest* confdefs* conf$$* $ac_clean_files && exit $exit_status ' 0 for ac_signal in 1 2 13 15; do - trap 'ac_signal='$ac_signal'; { (exit 1); exit 1; }' $ac_signal + trap 'ac_signal='$ac_signal'; as_fn_exit 1' $ac_signal done ac_signal=0 # confdefs.h avoids OS command line length limits that DEFS can exceed. rm -f -r conftest* confdefs.h +$as_echo "/* confdefs.h */" > confdefs.h + # Predefined preprocessor variables. cat >>confdefs.h <<_ACEOF #define PACKAGE_NAME "$PACKAGE_NAME" _ACEOF - cat >>confdefs.h <<_ACEOF #define PACKAGE_TARNAME "$PACKAGE_TARNAME" _ACEOF - cat >>confdefs.h <<_ACEOF #define PACKAGE_VERSION "$PACKAGE_VERSION" _ACEOF - cat >>confdefs.h <<_ACEOF #define PACKAGE_STRING "$PACKAGE_STRING" _ACEOF - cat >>confdefs.h <<_ACEOF #define PACKAGE_BUGREPORT "$PACKAGE_BUGREPORT" _ACEOF +cat >>confdefs.h <<_ACEOF +#define PACKAGE_URL "$PACKAGE_URL" +_ACEOF + # Let the site file select an alternate cache file if it wants to. -# Prefer explicitly selected file to automatically selected ones. +# Prefer an explicitly selected file to automatically selected ones. +ac_site_file1=NONE +ac_site_file2=NONE if test -n "$CONFIG_SITE"; then - set x "$CONFIG_SITE" + ac_site_file1=$CONFIG_SITE elif test "x$prefix" != xNONE; then - set x "$prefix/share/config.site" "$prefix/etc/config.site" + ac_site_file1=$prefix/share/config.site + ac_site_file2=$prefix/etc/config.site else - set x "$ac_default_prefix/share/config.site" \ - "$ac_default_prefix/etc/config.site" + ac_site_file1=$ac_default_prefix/share/config.site + ac_site_file2=$ac_default_prefix/etc/config.site fi -shift -for ac_site_file +for ac_site_file in "$ac_site_file1" "$ac_site_file2" do - if test -r "$ac_site_file"; then - { echo "$as_me:$LINENO: loading site script $ac_site_file" >&5 -echo "$as_me: loading site script $ac_site_file" >&6;} + test "x$ac_site_file" = xNONE && continue + if test /dev/null != "$ac_site_file" && test -r "$ac_site_file"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: loading site script $ac_site_file" >&5 +$as_echo "$as_me: loading site script $ac_site_file" >&6;} sed 's/^/| /' "$ac_site_file" >&5 . "$ac_site_file" fi done if test -r "$cache_file"; then - # Some versions of bash will fail to source /dev/null (special - # files actually), so we avoid doing that. - if test -f "$cache_file"; then - { echo "$as_me:$LINENO: loading cache $cache_file" >&5 -echo "$as_me: loading cache $cache_file" >&6;} + # Some versions of bash will fail to source /dev/null (special files + # actually), so we avoid doing that. DJGPP emulates it as a regular file. + if test /dev/null != "$cache_file" && test -f "$cache_file"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: loading cache $cache_file" >&5 +$as_echo "$as_me: loading cache $cache_file" >&6;} case $cache_file in [\\/]* | ?:[\\/]* ) . "$cache_file";; *) . "./$cache_file";; esac fi else - { echo "$as_me:$LINENO: creating cache $cache_file" >&5 -echo "$as_me: creating cache $cache_file" >&6;} + { $as_echo "$as_me:${as_lineno-$LINENO}: creating cache $cache_file" >&5 +$as_echo "$as_me: creating cache $cache_file" >&6;} >$cache_file fi @@ -1937,99 +2321,79 @@ eval ac_new_val=\$ac_env_${ac_var}_value case $ac_old_set,$ac_new_set in set,) - { echo "$as_me:$LINENO: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5 -echo "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5 +$as_echo "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;} ac_cache_corrupted=: ;; ,set) - { echo "$as_me:$LINENO: error: \`$ac_var' was not set in the previous run" >&5 -echo "$as_me: error: \`$ac_var' was not set in the previous run" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was not set in the previous run" >&5 +$as_echo "$as_me: error: \`$ac_var' was not set in the previous run" >&2;} ac_cache_corrupted=: ;; ,);; *) if test "x$ac_old_val" != "x$ac_new_val"; then - { echo "$as_me:$LINENO: error: \`$ac_var' has changed since the previous run:" >&5 -echo "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;} - { echo "$as_me:$LINENO: former value: $ac_old_val" >&5 -echo "$as_me: former value: $ac_old_val" >&2;} - { echo "$as_me:$LINENO: current value: $ac_new_val" >&5 -echo "$as_me: current value: $ac_new_val" >&2;} - ac_cache_corrupted=: + # differences in whitespace do not lead to failure. + ac_old_val_w=`echo x $ac_old_val` + ac_new_val_w=`echo x $ac_new_val` + if test "$ac_old_val_w" != "$ac_new_val_w"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' has changed since the previous run:" >&5 +$as_echo "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;} + ac_cache_corrupted=: + else + { $as_echo "$as_me:${as_lineno-$LINENO}: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&5 +$as_echo "$as_me: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&2;} + eval $ac_var=\$ac_old_val + fi + { $as_echo "$as_me:${as_lineno-$LINENO}: former value: \`$ac_old_val'" >&5 +$as_echo "$as_me: former value: \`$ac_old_val'" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: current value: \`$ac_new_val'" >&5 +$as_echo "$as_me: current value: \`$ac_new_val'" >&2;} fi;; esac # Pass precious variables to config.status. if test "$ac_new_set" = set; then case $ac_new_val in - *\'*) ac_arg=$ac_var=`echo "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;; + *\'*) ac_arg=$ac_var=`$as_echo "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;; *) ac_arg=$ac_var=$ac_new_val ;; esac case " $ac_configure_args " in *" '$ac_arg' "*) ;; # Avoid dups. Use of quotes ensures accuracy. - *) ac_configure_args="$ac_configure_args '$ac_arg'" ;; + *) as_fn_append ac_configure_args " '$ac_arg'" ;; esac fi done if $ac_cache_corrupted; then - { echo "$as_me:$LINENO: error: changes in the environment can compromise the build" >&5 -echo "$as_me: error: changes in the environment can compromise the build" >&2;} - { { echo "$as_me:$LINENO: error: run \`make distclean' and/or \`rm $cache_file' and start over" >&5 -echo "$as_me: error: run \`make distclean' and/or \`rm $cache_file' and start over" >&2;} - { (exit 1); exit 1; }; } -fi - - - + { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: error: changes in the environment can compromise the build" >&5 +$as_echo "$as_me: error: changes in the environment can compromise the build" >&2;} + as_fn_error "run \`make distclean' and/or \`rm $cache_file' and start over" "$LINENO" 5 +fi +## -------------------- ## +## Main body of script. ## +## -------------------- ## +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu - - - - - - - - - - - - - - - - - - - -ac_ext=c -ac_cpp='$CPP $CPPFLAGS' -ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_c_compiler_gnu - - -ac_config_headers="$ac_config_headers fficonfig.h" +ac_config_headers="$ac_config_headers fficonfig.h" ac_aux_dir= for ac_dir in "$srcdir" "$srcdir/.." "$srcdir/../.."; do - if test -f "$ac_dir/install-sh"; then - ac_aux_dir=$ac_dir - ac_install_sh="$ac_aux_dir/install-sh -c" - break - elif test -f "$ac_dir/install.sh"; then - ac_aux_dir=$ac_dir - ac_install_sh="$ac_aux_dir/install.sh -c" - break - elif test -f "$ac_dir/shtool"; then - ac_aux_dir=$ac_dir - ac_install_sh="$ac_aux_dir/shtool install -c" - break - fi + for ac_t in install-sh install.sh shtool; do + if test -f "$ac_dir/$ac_t"; then + ac_aux_dir=$ac_dir + ac_install_sh="$ac_aux_dir/$ac_t -c" + break 2 + fi + done done if test -z "$ac_aux_dir"; then - { { echo "$as_me:$LINENO: error: cannot find install-sh or install.sh in \"$srcdir\" \"$srcdir/..\" \"$srcdir/../..\"" >&5 -echo "$as_me: error: cannot find install-sh or install.sh in \"$srcdir\" \"$srcdir/..\" \"$srcdir/../..\"" >&2;} - { (exit 1); exit 1; }; } + as_fn_error "cannot find install-sh, install.sh, or shtool in \"$srcdir\" \"$srcdir/..\" \"$srcdir/../..\"" "$LINENO" 5 fi # These three variables are undocumented and unsupported, @@ -2043,35 +2407,27 @@ # Make sure we can run config.sub. $SHELL "$ac_aux_dir/config.sub" sun4 >/dev/null 2>&1 || - { { echo "$as_me:$LINENO: error: cannot run $SHELL $ac_aux_dir/config.sub" >&5 -echo "$as_me: error: cannot run $SHELL $ac_aux_dir/config.sub" >&2;} - { (exit 1); exit 1; }; } - -{ echo "$as_me:$LINENO: checking build system type" >&5 -echo $ECHO_N "checking build system type... $ECHO_C" >&6; } -if test "${ac_cv_build+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 + as_fn_error "cannot run $SHELL $ac_aux_dir/config.sub" "$LINENO" 5 + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking build system type" >&5 +$as_echo_n "checking build system type... " >&6; } +if test "${ac_cv_build+set}" = set; then : + $as_echo_n "(cached) " >&6 else ac_build_alias=$build_alias test "x$ac_build_alias" = x && ac_build_alias=`$SHELL "$ac_aux_dir/config.guess"` test "x$ac_build_alias" = x && - { { echo "$as_me:$LINENO: error: cannot guess build type; you must specify one" >&5 -echo "$as_me: error: cannot guess build type; you must specify one" >&2;} - { (exit 1); exit 1; }; } + as_fn_error "cannot guess build type; you must specify one" "$LINENO" 5 ac_cv_build=`$SHELL "$ac_aux_dir/config.sub" $ac_build_alias` || - { { echo "$as_me:$LINENO: error: $SHELL $ac_aux_dir/config.sub $ac_build_alias failed" >&5 -echo "$as_me: error: $SHELL $ac_aux_dir/config.sub $ac_build_alias failed" >&2;} - { (exit 1); exit 1; }; } + as_fn_error "$SHELL $ac_aux_dir/config.sub $ac_build_alias failed" "$LINENO" 5 fi -{ echo "$as_me:$LINENO: result: $ac_cv_build" >&5 -echo "${ECHO_T}$ac_cv_build" >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_build" >&5 +$as_echo "$ac_cv_build" >&6; } case $ac_cv_build in *-*-*) ;; -*) { { echo "$as_me:$LINENO: error: invalid value of canonical build" >&5 -echo "$as_me: error: invalid value of canonical build" >&2;} - { (exit 1); exit 1; }; };; +*) as_fn_error "invalid value of canonical build" "$LINENO" 5;; esac build=$ac_cv_build ac_save_IFS=$IFS; IFS='-' @@ -2087,28 +2443,24 @@ case $build_os in *\ *) build_os=`echo "$build_os" | sed 's/ /-/g'`;; esac -{ echo "$as_me:$LINENO: checking host system type" >&5 -echo $ECHO_N "checking host system type... $ECHO_C" >&6; } -if test "${ac_cv_host+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking host system type" >&5 +$as_echo_n "checking host system type... " >&6; } +if test "${ac_cv_host+set}" = set; then : + $as_echo_n "(cached) " >&6 else if test "x$host_alias" = x; then ac_cv_host=$ac_cv_build else ac_cv_host=`$SHELL "$ac_aux_dir/config.sub" $host_alias` || - { { echo "$as_me:$LINENO: error: $SHELL $ac_aux_dir/config.sub $host_alias failed" >&5 -echo "$as_me: error: $SHELL $ac_aux_dir/config.sub $host_alias failed" >&2;} - { (exit 1); exit 1; }; } + as_fn_error "$SHELL $ac_aux_dir/config.sub $host_alias failed" "$LINENO" 5 fi fi -{ echo "$as_me:$LINENO: result: $ac_cv_host" >&5 -echo "${ECHO_T}$ac_cv_host" >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_host" >&5 +$as_echo "$ac_cv_host" >&6; } case $ac_cv_host in *-*-*) ;; -*) { { echo "$as_me:$LINENO: error: invalid value of canonical host" >&5 -echo "$as_me: error: invalid value of canonical host" >&2;} - { (exit 1); exit 1; }; };; +*) as_fn_error "invalid value of canonical host" "$LINENO" 5;; esac host=$ac_cv_host ac_save_IFS=$IFS; IFS='-' @@ -2124,28 +2476,24 @@ case $host_os in *\ *) host_os=`echo "$host_os" | sed 's/ /-/g'`;; esac -{ echo "$as_me:$LINENO: checking target system type" >&5 -echo $ECHO_N "checking target system type... $ECHO_C" >&6; } -if test "${ac_cv_target+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking target system type" >&5 +$as_echo_n "checking target system type... " >&6; } +if test "${ac_cv_target+set}" = set; then : + $as_echo_n "(cached) " >&6 else if test "x$target_alias" = x; then ac_cv_target=$ac_cv_host else ac_cv_target=`$SHELL "$ac_aux_dir/config.sub" $target_alias` || - { { echo "$as_me:$LINENO: error: $SHELL $ac_aux_dir/config.sub $target_alias failed" >&5 -echo "$as_me: error: $SHELL $ac_aux_dir/config.sub $target_alias failed" >&2;} - { (exit 1); exit 1; }; } + as_fn_error "$SHELL $ac_aux_dir/config.sub $target_alias failed" "$LINENO" 5 fi fi -{ echo "$as_me:$LINENO: result: $ac_cv_target" >&5 -echo "${ECHO_T}$ac_cv_target" >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_target" >&5 +$as_echo "$ac_cv_target" >&6; } case $ac_cv_target in *-*-*) ;; -*) { { echo "$as_me:$LINENO: error: invalid value of canonical target" >&5 -echo "$as_me: error: invalid value of canonical target" >&2;} - { (exit 1); exit 1; }; };; +*) as_fn_error "invalid value of canonical target" "$LINENO" 5;; esac target=$ac_cv_target ac_save_IFS=$IFS; IFS='-' @@ -2167,11 +2515,12 @@ test "$program_prefix$program_suffix$program_transform_name" = \ NONENONEs,x,x, && program_prefix=${target_alias}- + target_alias=${target_alias-$host_alias} . ${srcdir}/configure.host -am__api_version='1.10' +am__api_version='1.11' # Find a good install program. We prefer a C program (faster), # so one script is as good as another. But avoid the broken or @@ -2186,22 +2535,23 @@ # SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff" # OS/2's system install, which has a completely different semantic # ./install, which can be erroneously created by make from ./install.sh. -{ echo "$as_me:$LINENO: checking for a BSD-compatible install" >&5 -echo $ECHO_N "checking for a BSD-compatible install... $ECHO_C" >&6; } +# Reject install programs that cannot install multiple files. +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a BSD-compatible install" >&5 +$as_echo_n "checking for a BSD-compatible install... " >&6; } if test -z "$INSTALL"; then -if test "${ac_cv_path_install+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 +if test "${ac_cv_path_install+set}" = set; then : + $as_echo_n "(cached) " >&6 else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. - # Account for people who put trailing slashes in PATH elements. -case $as_dir/ in - ./ | .// | /cC/* | \ + # Account for people who put trailing slashes in PATH elements. +case $as_dir/ in #(( + ./ | .// | /[cC]/* | \ /etc/* | /usr/sbin/* | /usr/etc/* | /sbin/* | /usr/afsws/bin/* | \ - ?:\\/os2\\/install\\/* | ?:\\/OS2\\/INSTALL\\/* | \ + ?:[\\/]os2[\\/]install[\\/]* | ?:[\\/]OS2[\\/]INSTALL[\\/]* | \ /usr/ucb/* ) ;; *) # OSF1 and SCO ODT 3.0 have their own names for install. @@ -2219,17 +2569,29 @@ # program-specific install script used by HP pwplus--don't use. : else - ac_cv_path_install="$as_dir/$ac_prog$ac_exec_ext -c" - break 3 + rm -rf conftest.one conftest.two conftest.dir + echo one > conftest.one + echo two > conftest.two + mkdir conftest.dir + if "$as_dir/$ac_prog$ac_exec_ext" -c conftest.one conftest.two "`pwd`/conftest.dir" && + test -s conftest.one && test -s conftest.two && + test -s conftest.dir/conftest.one && + test -s conftest.dir/conftest.two + then + ac_cv_path_install="$as_dir/$ac_prog$ac_exec_ext -c" + break 3 + fi fi fi done done ;; esac -done + + done IFS=$as_save_IFS +rm -rf conftest.one conftest.two conftest.dir fi if test "${ac_cv_path_install+set}" = set; then @@ -2242,8 +2604,8 @@ INSTALL=$ac_install_sh fi fi -{ echo "$as_me:$LINENO: result: $INSTALL" >&5 -echo "${ECHO_T}$INSTALL" >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $INSTALL" >&5 +$as_echo "$INSTALL" >&6; } # Use test -z because SunOS4 sh mishandles braces in ${var-val}. # It thinks the first close brace ends the variable substitution. @@ -2253,21 +2615,34 @@ test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644' -{ echo "$as_me:$LINENO: checking whether build environment is sane" >&5 -echo $ECHO_N "checking whether build environment is sane... $ECHO_C" >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether build environment is sane" >&5 +$as_echo_n "checking whether build environment is sane... " >&6; } # Just in case sleep 1 echo timestamp > conftest.file +# Reject unsafe characters in $srcdir or the absolute working directory +# name. Accept space and tab only in the latter. +am_lf=' +' +case `pwd` in + *[\\\"\#\$\&\'\`$am_lf]*) + as_fn_error "unsafe absolute working directory name" "$LINENO" 5;; +esac +case $srcdir in + *[\\\"\#\$\&\'\`$am_lf\ \ ]*) + as_fn_error "unsafe srcdir value: \`$srcdir'" "$LINENO" 5;; +esac + # Do `set' in a subshell so we don't clobber the current shell's # arguments. Must try -L first in case configure is actually a # symlink; some systems play weird games with the mod time of symlinks # (eg FreeBSD returns the mod time of the symlink's containing # directory). if ( - set X `ls -Lt $srcdir/configure conftest.file 2> /dev/null` + set X `ls -Lt "$srcdir/configure" conftest.file 2> /dev/null` if test "$*" = "X"; then # -L didn't work. - set X `ls -t $srcdir/configure conftest.file` + set X `ls -t "$srcdir/configure" conftest.file` fi rm -f conftest.file if test "$*" != "X $srcdir/configure conftest.file" \ @@ -2277,11 +2652,8 @@ # if, for instance, CONFIG_SHELL is bash and it inherits a # broken ls alias from the environment. This has actually # happened. Such a system could not be considered "sane". - { { echo "$as_me:$LINENO: error: ls -t appears to fail. Make sure there is not a broken -alias in your environment" >&5 -echo "$as_me: error: ls -t appears to fail. Make sure there is not a broken -alias in your environment" >&2;} - { (exit 1); exit 1; }; } + as_fn_error "ls -t appears to fail. Make sure there is not a broken +alias in your environment" "$LINENO" 5 fi test "$2" = conftest.file @@ -2290,52 +2662,162 @@ # Ok. : else - { { echo "$as_me:$LINENO: error: newly created file is older than distributed files! -Check your system clock" >&5 -echo "$as_me: error: newly created file is older than distributed files! -Check your system clock" >&2;} - { (exit 1); exit 1; }; } + as_fn_error "newly created file is older than distributed files! +Check your system clock" "$LINENO" 5 fi -{ echo "$as_me:$LINENO: result: yes" >&5 -echo "${ECHO_T}yes" >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } test "$program_prefix" != NONE && program_transform_name="s&^&$program_prefix&;$program_transform_name" # Use a double $ so make ignores it. test "$program_suffix" != NONE && program_transform_name="s&\$&$program_suffix&;$program_transform_name" -# Double any \ or $. echo might interpret backslashes. +# Double any \ or $. # By default was `s,x,x', remove it if useless. -cat <<\_ACEOF >conftest.sed -s/[\\$]/&&/g;s/;s,x,x,$// -_ACEOF -program_transform_name=`echo $program_transform_name | sed -f conftest.sed` -rm -f conftest.sed +ac_script='s/[\\$]/&&/g;s/;s,x,x,$//' +program_transform_name=`$as_echo "$program_transform_name" | sed "$ac_script"` # expand $ac_aux_dir to an absolute path am_aux_dir=`cd $ac_aux_dir && pwd` -test x"${MISSING+set}" = xset || MISSING="\${SHELL} $am_aux_dir/missing" +if test x"${MISSING+set}" != xset; then + case $am_aux_dir in + *\ * | *\ *) + MISSING="\${SHELL} \"$am_aux_dir/missing\"" ;; + *) + MISSING="\${SHELL} $am_aux_dir/missing" ;; + esac +fi # Use eval to expand $SHELL if eval "$MISSING --run true"; then am_missing_run="$MISSING --run " else am_missing_run= - { echo "$as_me:$LINENO: WARNING: \`missing' script is too old or missing" >&5 -echo "$as_me: WARNING: \`missing' script is too old or missing" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: \`missing' script is too old or missing" >&5 +$as_echo "$as_me: WARNING: \`missing' script is too old or missing" >&2;} +fi + +if test x"${install_sh}" != xset; then + case $am_aux_dir in + *\ * | *\ *) + install_sh="\${SHELL} '$am_aux_dir/install-sh'" ;; + *) + install_sh="\${SHELL} $am_aux_dir/install-sh" + esac +fi + +# Installed binaries are usually stripped using `strip' when the user +# run `make install-strip'. However `strip' might not be the right +# tool to use in cross-compilation environments, therefore Automake +# will honor the `STRIP' environment variable to overrule this program. +if test "$cross_compiling" != no; then + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args. +set dummy ${ac_tool_prefix}strip; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_STRIP+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$STRIP"; then + ac_cv_prog_STRIP="$STRIP" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_STRIP="${ac_tool_prefix}strip" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +STRIP=$ac_cv_prog_STRIP +if test -n "$STRIP"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $STRIP" >&5 +$as_echo "$STRIP" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_STRIP"; then + ac_ct_STRIP=$STRIP + # Extract the first word of "strip", so it can be a program name with args. +set dummy strip; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_ac_ct_STRIP+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_STRIP"; then + ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_ac_ct_STRIP="strip" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP +if test -n "$ac_ct_STRIP"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_STRIP" >&5 +$as_echo "$ac_ct_STRIP" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_STRIP" = x; then + STRIP=":" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + STRIP=$ac_ct_STRIP + fi +else + STRIP="$ac_cv_prog_STRIP" +fi + fi +INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s" -{ echo "$as_me:$LINENO: checking for a thread-safe mkdir -p" >&5 -echo $ECHO_N "checking for a thread-safe mkdir -p... $ECHO_C" >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a thread-safe mkdir -p" >&5 +$as_echo_n "checking for a thread-safe mkdir -p... " >&6; } if test -z "$MKDIR_P"; then - if test "${ac_cv_path_mkdir+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 + if test "${ac_cv_path_mkdir+set}" = set; then : + $as_echo_n "(cached) " >&6 else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH$PATH_SEPARATOR/opt/sfw/bin do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. - for ac_prog in mkdir gmkdir; do + for ac_prog in mkdir gmkdir; do for ac_exec_ext in '' $ac_executable_extensions; do { test -f "$as_dir/$ac_prog$ac_exec_ext" && $as_test_x "$as_dir/$ac_prog$ac_exec_ext"; } || continue case `"$as_dir/$ac_prog$ac_exec_ext" --version 2>&1` in #( @@ -2347,11 +2829,12 @@ esac done done -done + done IFS=$as_save_IFS fi + test -d ./--version && rmdir ./--version if test "${ac_cv_path_mkdir+set}" = set; then MKDIR_P="$ac_cv_path_mkdir -p" else @@ -2359,12 +2842,11 @@ # value for MKDIR_P within a source directory, because that will # break other packages using the cache if that directory is # removed, or if the value is a relative name. - test -d ./--version && rmdir ./--version MKDIR_P="$ac_install_sh -d" fi fi -{ echo "$as_me:$LINENO: result: $MKDIR_P" >&5 -echo "${ECHO_T}$MKDIR_P" >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $MKDIR_P" >&5 +$as_echo "$MKDIR_P" >&6; } mkdir_p="$MKDIR_P" case $mkdir_p in @@ -2376,10 +2858,10 @@ do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 -{ echo "$as_me:$LINENO: checking for $ac_word" >&5 -echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } -if test "${ac_cv_prog_AWK+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_AWK+set}" = set; then : + $as_echo_n "(cached) " >&6 else if test -n "$AWK"; then ac_cv_prog_AWK="$AWK" # Let the user override the test. @@ -2389,36 +2871,37 @@ do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do + for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_AWK="$ac_prog" - echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done -done + done IFS=$as_save_IFS fi fi AWK=$ac_cv_prog_AWK if test -n "$AWK"; then - { echo "$as_me:$LINENO: result: $AWK" >&5 -echo "${ECHO_T}$AWK" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AWK" >&5 +$as_echo "$AWK" >&6; } else - { echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi test -n "$AWK" && break done -{ echo "$as_me:$LINENO: checking whether ${MAKE-make} sets \$(MAKE)" >&5 -echo $ECHO_N "checking whether ${MAKE-make} sets \$(MAKE)... $ECHO_C" >&6; } -set x ${MAKE-make}; ac_make=`echo "$2" | sed 's/+/p/g; s/[^a-zA-Z0-9_]/_/g'` -if { as_var=ac_cv_prog_make_${ac_make}_set; eval "test \"\${$as_var+set}\" = set"; }; then - echo $ECHO_N "(cached) $ECHO_C" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ${MAKE-make} sets \$(MAKE)" >&5 +$as_echo_n "checking whether ${MAKE-make} sets \$(MAKE)... " >&6; } +set x ${MAKE-make} +ac_make=`$as_echo "$2" | sed 's/+/p/g; s/[^a-zA-Z0-9_]/_/g'` +if { as_var=ac_cv_prog_make_${ac_make}_set; eval "test \"\${$as_var+set}\" = set"; }; then : + $as_echo_n "(cached) " >&6 else cat >conftest.make <<\_ACEOF SHELL = /bin/sh @@ -2435,12 +2918,12 @@ rm -f conftest.make fi if eval test \$ac_cv_prog_make_${ac_make}_set = yes; then - { echo "$as_me:$LINENO: result: yes" >&5 -echo "${ECHO_T}yes" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } SET_MAKE= else - { echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } SET_MAKE="MAKE=${MAKE-make}" fi @@ -2459,9 +2942,7 @@ am__isrc=' -I$(srcdir)' # test to see if srcdir already configured if test -f $srcdir/config.status; then - { { echo "$as_me:$LINENO: error: source directory already configured; run \"make distclean\" there first" >&5 -echo "$as_me: error: source directory already configured; run \"make distclean\" there first" >&2;} - { (exit 1); exit 1; }; } + as_fn_error "source directory already configured; run \"make distclean\" there first" "$LINENO" 5 fi fi @@ -2477,7 +2958,7 @@ # Define the identity of the package. PACKAGE='libffi' - VERSION='3.0.5' + VERSION='3.0.9' cat >>confdefs.h <<_ACEOF @@ -2505,112 +2986,6 @@ MAKEINFO=${MAKEINFO-"${am_missing_run}makeinfo"} -install_sh=${install_sh-"\$(SHELL) $am_aux_dir/install-sh"} - -# Installed binaries are usually stripped using `strip' when the user -# run `make install-strip'. However `strip' might not be the right -# tool to use in cross-compilation environments, therefore Automake -# will honor the `STRIP' environment variable to overrule this program. -if test "$cross_compiling" != no; then - if test -n "$ac_tool_prefix"; then - # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args. -set dummy ${ac_tool_prefix}strip; ac_word=$2 -{ echo "$as_me:$LINENO: checking for $ac_word" >&5 -echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } -if test "${ac_cv_prog_STRIP+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - if test -n "$STRIP"; then - ac_cv_prog_STRIP="$STRIP" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_STRIP="${ac_tool_prefix}strip" - echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done -done -IFS=$as_save_IFS - -fi -fi -STRIP=$ac_cv_prog_STRIP -if test -n "$STRIP"; then - { echo "$as_me:$LINENO: result: $STRIP" >&5 -echo "${ECHO_T}$STRIP" >&6; } -else - { echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6; } -fi - - -fi -if test -z "$ac_cv_prog_STRIP"; then - ac_ct_STRIP=$STRIP - # Extract the first word of "strip", so it can be a program name with args. -set dummy strip; ac_word=$2 -{ echo "$as_me:$LINENO: checking for $ac_word" >&5 -echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } -if test "${ac_cv_prog_ac_ct_STRIP+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - if test -n "$ac_ct_STRIP"; then - ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_ac_ct_STRIP="strip" - echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done -done -IFS=$as_save_IFS - -fi -fi -ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP -if test -n "$ac_ct_STRIP"; then - { echo "$as_me:$LINENO: result: $ac_ct_STRIP" >&5 -echo "${ECHO_T}$ac_ct_STRIP" >&6; } -else - { echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6; } -fi - - if test "x$ac_ct_STRIP" = x; then - STRIP=":" - else - case $cross_compiling:$ac_tool_warned in -yes:) -{ echo "$as_me:$LINENO: WARNING: In the future, Autoconf will not detect cross-tools -whose name does not start with the host triplet. If you think this -configuration is useful to you, please write to autoconf at gnu.org." >&5 -echo "$as_me: WARNING: In the future, Autoconf will not detect cross-tools -whose name does not start with the host triplet. If you think this -configuration is useful to you, please write to autoconf at gnu.org." >&2;} -ac_tool_warned=yes ;; -esac - STRIP=$ac_ct_STRIP - fi -else - STRIP="$ac_cv_prog_STRIP" -fi - -fi -INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s" - # We need awk for the "check" target. The system "awk" is bad on # some platforms. # Always define AMTAR for backward compatibility. @@ -2639,10 +3014,10 @@ if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args. set dummy ${ac_tool_prefix}gcc; ac_word=$2 -{ echo "$as_me:$LINENO: checking for $ac_word" >&5 -echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } -if test "${ac_cv_prog_CC+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_CC+set}" = set; then : + $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. @@ -2652,25 +3027,25 @@ do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do + for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_CC="${ac_tool_prefix}gcc" - echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done -done + done IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then - { echo "$as_me:$LINENO: result: $CC" >&5 -echo "${ECHO_T}$CC" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 +$as_echo "$CC" >&6; } else - { echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi @@ -2679,10 +3054,10 @@ ac_ct_CC=$CC # Extract the first word of "gcc", so it can be a program name with args. set dummy gcc; ac_word=$2 -{ echo "$as_me:$LINENO: checking for $ac_word" >&5 -echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } -if test "${ac_cv_prog_ac_ct_CC+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_ac_ct_CC+set}" = set; then : + $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. @@ -2692,25 +3067,25 @@ do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do + for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_ac_ct_CC="gcc" - echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done -done + done IFS=$as_save_IFS fi fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then - { echo "$as_me:$LINENO: result: $ac_ct_CC" >&5 -echo "${ECHO_T}$ac_ct_CC" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 +$as_echo "$ac_ct_CC" >&6; } else - { echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi if test "x$ac_ct_CC" = x; then @@ -2718,12 +3093,8 @@ else case $cross_compiling:$ac_tool_warned in yes:) -{ echo "$as_me:$LINENO: WARNING: In the future, Autoconf will not detect cross-tools -whose name does not start with the host triplet. If you think this -configuration is useful to you, please write to autoconf at gnu.org." >&5 -echo "$as_me: WARNING: In the future, Autoconf will not detect cross-tools -whose name does not start with the host triplet. If you think this -configuration is useful to you, please write to autoconf at gnu.org." >&2;} +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac CC=$ac_ct_CC @@ -2736,10 +3107,10 @@ if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args. set dummy ${ac_tool_prefix}cc; ac_word=$2 -{ echo "$as_me:$LINENO: checking for $ac_word" >&5 -echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } -if test "${ac_cv_prog_CC+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_CC+set}" = set; then : + $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. @@ -2749,25 +3120,25 @@ do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do + for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_CC="${ac_tool_prefix}cc" - echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done -done + done IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then - { echo "$as_me:$LINENO: result: $CC" >&5 -echo "${ECHO_T}$CC" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 +$as_echo "$CC" >&6; } else - { echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi @@ -2776,10 +3147,10 @@ if test -z "$CC"; then # Extract the first word of "cc", so it can be a program name with args. set dummy cc; ac_word=$2 -{ echo "$as_me:$LINENO: checking for $ac_word" >&5 -echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } -if test "${ac_cv_prog_CC+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_CC+set}" = set; then : + $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. @@ -2790,18 +3161,18 @@ do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do + for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then ac_prog_rejected=yes continue fi ac_cv_prog_CC="cc" - echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done -done + done IFS=$as_save_IFS if test $ac_prog_rejected = yes; then @@ -2820,11 +3191,11 @@ fi CC=$ac_cv_prog_CC if test -n "$CC"; then - { echo "$as_me:$LINENO: result: $CC" >&5 -echo "${ECHO_T}$CC" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 +$as_echo "$CC" >&6; } else - { echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi @@ -2835,10 +3206,10 @@ do # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. set dummy $ac_tool_prefix$ac_prog; ac_word=$2 -{ echo "$as_me:$LINENO: checking for $ac_word" >&5 -echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } -if test "${ac_cv_prog_CC+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_CC+set}" = set; then : + $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. @@ -2848,25 +3219,25 @@ do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do + for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_CC="$ac_tool_prefix$ac_prog" - echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done -done + done IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then - { echo "$as_me:$LINENO: result: $CC" >&5 -echo "${ECHO_T}$CC" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 +$as_echo "$CC" >&6; } else - { echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi @@ -2879,10 +3250,10 @@ do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 -{ echo "$as_me:$LINENO: checking for $ac_word" >&5 -echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } -if test "${ac_cv_prog_ac_ct_CC+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_ac_ct_CC+set}" = set; then : + $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. @@ -2892,25 +3263,25 @@ do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do + for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_ac_ct_CC="$ac_prog" - echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done -done + done IFS=$as_save_IFS fi fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then - { echo "$as_me:$LINENO: result: $ac_ct_CC" >&5 -echo "${ECHO_T}$ac_ct_CC" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 +$as_echo "$ac_ct_CC" >&6; } else - { echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi @@ -2922,12 +3293,8 @@ else case $cross_compiling:$ac_tool_warned in yes:) -{ echo "$as_me:$LINENO: WARNING: In the future, Autoconf will not detect cross-tools -whose name does not start with the host triplet. If you think this -configuration is useful to you, please write to autoconf at gnu.org." >&5 -echo "$as_me: WARNING: In the future, Autoconf will not detect cross-tools -whose name does not start with the host triplet. If you think this -configuration is useful to you, please write to autoconf at gnu.org." >&2;} +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac CC=$ac_ct_CC @@ -2937,51 +3304,37 @@ fi -test -z "$CC" && { { echo "$as_me:$LINENO: error: no acceptable C compiler found in \$PATH -See \`config.log' for more details." >&5 -echo "$as_me: error: no acceptable C compiler found in \$PATH -See \`config.log' for more details." >&2;} - { (exit 1); exit 1; }; } +test -z "$CC" && { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error "no acceptable C compiler found in \$PATH +See \`config.log' for more details." "$LINENO" 5; } # Provide some information about the compiler. -echo "$as_me:$LINENO: checking for C compiler version" >&5 -ac_compiler=`set X $ac_compile; echo $2` -{ (ac_try="$ac_compiler --version >&5" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_compiler --version >&5") 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } -{ (ac_try="$ac_compiler -v >&5" +$as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler version" >&5 +set X $ac_compile +ac_compiler=$2 +for ac_option in --version -v -V -qversion; do + { { ac_try="$ac_compiler $ac_option >&5" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_compiler -v >&5") 2>&5 +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_compiler $ac_option >&5") 2>conftest.err ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } -{ (ac_try="$ac_compiler -V >&5" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_compiler -V >&5") 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } + if test -s conftest.err; then + sed '10a\ +... rest of stderr output deleted ... + 10q' conftest.err >conftest.er1 + cat conftest.er1 >&5 + fi + rm -f conftest.er1 conftest.err + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } +done -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF +cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int @@ -2993,42 +3346,38 @@ } _ACEOF ac_clean_files_save=$ac_clean_files -ac_clean_files="$ac_clean_files a.out a.exe b.out" +ac_clean_files="$ac_clean_files a.out a.out.dSYM a.exe b.out" # Try to create an executable without -o first, disregard a.out. # It will help us diagnose broken compilers, and finding out an intuition # of exeext. -{ echo "$as_me:$LINENO: checking for C compiler default output file name" >&5 -echo $ECHO_N "checking for C compiler default output file name... $ECHO_C" >&6; } -ac_link_default=`echo "$ac_link" | sed 's/ -o *conftest[^ ]*//'` -# -# List of possible output files, starting from the most likely. -# The algorithm is not robust to junk in `.', hence go to wildcards (a.*) -# only as a last resort. b.out is created by i960 compilers. -ac_files='a_out.exe a.exe conftest.exe a.out conftest a.* conftest.* b.out' -# -# The IRIX 6 linker writes into existing files which may not be -# executable, retaining their permissions. Remove them first so a -# subsequent execution test works. +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the C compiler works" >&5 +$as_echo_n "checking whether the C compiler works... " >&6; } +ac_link_default=`$as_echo "$ac_link" | sed 's/ -o *conftest[^ ]*//'` + +# The possible output files: +ac_files="a.out conftest.exe conftest a.exe a_out.exe b.out conftest.*" + ac_rmfiles= for ac_file in $ac_files do case $ac_file in - *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.o | *.obj ) ;; + *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; * ) ac_rmfiles="$ac_rmfiles $ac_file";; esac done rm -f $ac_rmfiles -if { (ac_try="$ac_link_default" +if { { ac_try="$ac_link_default" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 (eval "$ac_link_default") 2>&5 ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; then + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then : # Autoconf-2.13 could set the ac_cv_exeext variable to `no'. # So ignore a value of `no', otherwise this would lead to `EXEEXT = no' # in a Makefile. We should not override ac_cv_exeext if it was cached, @@ -3038,14 +3387,14 @@ do test -f "$ac_file" || continue case $ac_file in - *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.o | *.obj ) + *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; [ab].out ) # We found the default executable, but exeext='' is most # certainly right. break;; *.* ) - if test "${ac_cv_exeext+set}" = set && test "$ac_cv_exeext" != no; + if test "${ac_cv_exeext+set}" = set && test "$ac_cv_exeext" != no; then :; else ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` fi @@ -3064,78 +3413,42 @@ else ac_file='' fi +if test -z "$ac_file"; then : + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +$as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +{ as_fn_set_status 77 +as_fn_error "C compiler cannot create executables +See \`config.log' for more details." "$LINENO" 5; }; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler default output file name" >&5 +$as_echo_n "checking for C compiler default output file name... " >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_file" >&5 +$as_echo "$ac_file" >&6; } +ac_exeext=$ac_cv_exeext -{ echo "$as_me:$LINENO: result: $ac_file" >&5 -echo "${ECHO_T}$ac_file" >&6; } -if test -z "$ac_file"; then - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -{ { echo "$as_me:$LINENO: error: C compiler cannot create executables -See \`config.log' for more details." >&5 -echo "$as_me: error: C compiler cannot create executables -See \`config.log' for more details." >&2;} - { (exit 77); exit 77; }; } -fi - -ac_exeext=$ac_cv_exeext - -# Check that the compiler produces executables we can run. If not, either -# the compiler is broken, or we cross compile. -{ echo "$as_me:$LINENO: checking whether the C compiler works" >&5 -echo $ECHO_N "checking whether the C compiler works... $ECHO_C" >&6; } -# FIXME: These cross compiler hacks should be removed for Autoconf 3.0 -# If not cross compiling, check that we can run a simple program. -if test "$cross_compiling" != yes; then - if { ac_try='./$ac_file' - { (case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_try") 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - cross_compiling=no - else - if test "$cross_compiling" = maybe; then - cross_compiling=yes - else - { { echo "$as_me:$LINENO: error: cannot run C compiled programs. -If you meant to cross compile, use \`--host'. -See \`config.log' for more details." >&5 -echo "$as_me: error: cannot run C compiled programs. -If you meant to cross compile, use \`--host'. -See \`config.log' for more details." >&2;} - { (exit 1); exit 1; }; } - fi - fi -fi -{ echo "$as_me:$LINENO: result: yes" >&5 -echo "${ECHO_T}yes" >&6; } - -rm -f a.out a.exe conftest$ac_cv_exeext b.out +rm -f -r a.out a.out.dSYM a.exe conftest$ac_cv_exeext b.out ac_clean_files=$ac_clean_files_save -# Check that the compiler produces executables we can run. If not, either -# the compiler is broken, or we cross compile. -{ echo "$as_me:$LINENO: checking whether we are cross compiling" >&5 -echo $ECHO_N "checking whether we are cross compiling... $ECHO_C" >&6; } -{ echo "$as_me:$LINENO: result: $cross_compiling" >&5 -echo "${ECHO_T}$cross_compiling" >&6; } - -{ echo "$as_me:$LINENO: checking for suffix of executables" >&5 -echo $ECHO_N "checking for suffix of executables... $ECHO_C" >&6; } -if { (ac_try="$ac_link" +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of executables" >&5 +$as_echo_n "checking for suffix of executables... " >&6; } +if { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 (eval "$ac_link") 2>&5 ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; then + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then : # If both `conftest.exe' and `conftest' are `present' (well, observable) # catch `conftest.exe'. For instance with Cygwin, `ls conftest' will # work properly (i.e., refer to `conftest.exe'), while it won't with @@ -3143,37 +3456,90 @@ for ac_file in conftest.exe conftest conftest.*; do test -f "$ac_file" || continue case $ac_file in - *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.o | *.obj ) ;; + *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` break;; * ) break;; esac done else - { { echo "$as_me:$LINENO: error: cannot compute suffix of executables: cannot compile and link -See \`config.log' for more details." >&5 -echo "$as_me: error: cannot compute suffix of executables: cannot compile and link -See \`config.log' for more details." >&2;} - { (exit 1); exit 1; }; } -fi - -rm -f conftest$ac_cv_exeext -{ echo "$as_me:$LINENO: result: $ac_cv_exeext" >&5 -echo "${ECHO_T}$ac_cv_exeext" >&6; } + { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error "cannot compute suffix of executables: cannot compile and link +See \`config.log' for more details." "$LINENO" 5; } +fi +rm -f conftest conftest$ac_cv_exeext +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_exeext" >&5 +$as_echo "$ac_cv_exeext" >&6; } rm -f conftest.$ac_ext EXEEXT=$ac_cv_exeext ac_exeext=$EXEEXT -{ echo "$as_me:$LINENO: checking for suffix of object files" >&5 -echo $ECHO_N "checking for suffix of object files... $ECHO_C" >&6; } -if test "${ac_cv_objext+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +int +main () +{ +FILE *f = fopen ("conftest.out", "w"); + return ferror (f) || fclose (f) != 0; + + ; + return 0; +} _ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF +ac_clean_files="$ac_clean_files conftest.out" +# Check that the compiler produces executables we can run. If not, either +# the compiler is broken, or we cross compile. +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are cross compiling" >&5 +$as_echo_n "checking whether we are cross compiling... " >&6; } +if test "$cross_compiling" != yes; then + { { ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_link") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } + if { ac_try='./conftest$ac_cv_exeext' + { { case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_try") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then + cross_compiling=no + else + if test "$cross_compiling" = maybe; then + cross_compiling=yes + else + { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error "cannot run C compiled programs. +If you meant to cross compile, use \`--host'. +See \`config.log' for more details." "$LINENO" 5; } + fi + fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $cross_compiling" >&5 +$as_echo "$cross_compiling" >&6; } + +rm -f conftest.$ac_ext conftest$ac_cv_exeext conftest.out +ac_clean_files=$ac_clean_files_save +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of object files" >&5 +$as_echo_n "checking for suffix of object files... " >&6; } +if test "${ac_cv_objext+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int @@ -3185,51 +3551,46 @@ } _ACEOF rm -f conftest.o conftest.obj -if { (ac_try="$ac_compile" +if { { ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 (eval "$ac_compile") 2>&5 ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; then + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then : for ac_file in conftest.o conftest.obj conftest.*; do test -f "$ac_file" || continue; case $ac_file in - *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf ) ;; + *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM ) ;; *) ac_cv_objext=`expr "$ac_file" : '.*\.\(.*\)'` break;; esac done else - echo "$as_me: failed program was:" >&5 + $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 -{ { echo "$as_me:$LINENO: error: cannot compute suffix of object files: cannot compile -See \`config.log' for more details." >&5 -echo "$as_me: error: cannot compute suffix of object files: cannot compile -See \`config.log' for more details." >&2;} - { (exit 1); exit 1; }; } +{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error "cannot compute suffix of object files: cannot compile +See \`config.log' for more details." "$LINENO" 5; } fi - rm -f conftest.$ac_cv_objext conftest.$ac_ext fi -{ echo "$as_me:$LINENO: result: $ac_cv_objext" >&5 -echo "${ECHO_T}$ac_cv_objext" >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_objext" >&5 +$as_echo "$ac_cv_objext" >&6; } OBJEXT=$ac_cv_objext ac_objext=$OBJEXT -{ echo "$as_me:$LINENO: checking whether we are using the GNU C compiler" >&5 -echo $ECHO_N "checking whether we are using the GNU C compiler... $ECHO_C" >&6; } -if test "${ac_cv_c_compiler_gnu+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C compiler" >&5 +$as_echo_n "checking whether we are using the GNU C compiler... " >&6; } +if test "${ac_cv_c_compiler_gnu+set}" = set; then : + $as_echo_n "(cached) " >&6 else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int @@ -3243,54 +3604,34 @@ return 0; } _ACEOF -rm -f conftest.$ac_objext -if { (ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then +if ac_fn_c_try_compile "$LINENO"; then : ac_compiler_gnu=yes else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_compiler_gnu=no + ac_compiler_gnu=no fi - rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_cv_c_compiler_gnu=$ac_compiler_gnu fi -{ echo "$as_me:$LINENO: result: $ac_cv_c_compiler_gnu" >&5 -echo "${ECHO_T}$ac_cv_c_compiler_gnu" >&6; } -GCC=`test $ac_compiler_gnu = yes && echo yes` +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_compiler_gnu" >&5 +$as_echo "$ac_cv_c_compiler_gnu" >&6; } +if test $ac_compiler_gnu = yes; then + GCC=yes +else + GCC= +fi ac_test_CFLAGS=${CFLAGS+set} ac_save_CFLAGS=$CFLAGS -{ echo "$as_me:$LINENO: checking whether $CC accepts -g" >&5 -echo $ECHO_N "checking whether $CC accepts -g... $ECHO_C" >&6; } -if test "${ac_cv_prog_cc_g+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC accepts -g" >&5 +$as_echo_n "checking whether $CC accepts -g... " >&6; } +if test "${ac_cv_prog_cc_g+set}" = set; then : + $as_echo_n "(cached) " >&6 else ac_save_c_werror_flag=$ac_c_werror_flag ac_c_werror_flag=yes ac_cv_prog_cc_g=no CFLAGS="-g" - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int @@ -3301,34 +3642,11 @@ return 0; } _ACEOF -rm -f conftest.$ac_objext -if { (ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then +if ac_fn_c_try_compile "$LINENO"; then : ac_cv_prog_cc_g=yes else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - CFLAGS="" - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF + CFLAGS="" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int @@ -3339,35 +3657,12 @@ return 0; } _ACEOF -rm -f conftest.$ac_objext -if { (ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then - : -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 +if ac_fn_c_try_compile "$LINENO"; then : - ac_c_werror_flag=$ac_save_c_werror_flag +else + ac_c_werror_flag=$ac_save_c_werror_flag CFLAGS="-g" - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int @@ -3378,42 +3673,18 @@ return 0; } _ACEOF -rm -f conftest.$ac_objext -if { (ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then +if ac_fn_c_try_compile "$LINENO"; then : ac_cv_prog_cc_g=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - fi - rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi - rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi - rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_c_werror_flag=$ac_save_c_werror_flag fi -{ echo "$as_me:$LINENO: result: $ac_cv_prog_cc_g" >&5 -echo "${ECHO_T}$ac_cv_prog_cc_g" >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_g" >&5 +$as_echo "$ac_cv_prog_cc_g" >&6; } if test "$ac_test_CFLAGS" = set; then CFLAGS=$ac_save_CFLAGS elif test $ac_cv_prog_cc_g = yes; then @@ -3429,18 +3700,14 @@ CFLAGS= fi fi -{ echo "$as_me:$LINENO: checking for $CC option to accept ISO C89" >&5 -echo $ECHO_N "checking for $CC option to accept ISO C89... $ECHO_C" >&6; } -if test "${ac_cv_prog_cc_c89+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $CC option to accept ISO C89" >&5 +$as_echo_n "checking for $CC option to accept ISO C89... " >&6; } +if test "${ac_cv_prog_cc_c89+set}" = set; then : + $as_echo_n "(cached) " >&6 else ac_cv_prog_cc_c89=no ac_save_CC=$CC -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF +cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include @@ -3497,31 +3764,9 @@ -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__" do CC="$ac_save_CC $ac_arg" - rm -f conftest.$ac_objext -if { (ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then + if ac_fn_c_try_compile "$LINENO"; then : ac_cv_prog_cc_c89=$ac_arg -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - fi - rm -f core conftest.err conftest.$ac_objext test "x$ac_cv_prog_cc_c89" != "xno" && break done @@ -3532,17 +3777,19 @@ # AC_CACHE_VAL case "x$ac_cv_prog_cc_c89" in x) - { echo "$as_me:$LINENO: result: none needed" >&5 -echo "${ECHO_T}none needed" >&6; } ;; + { $as_echo "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 +$as_echo "none needed" >&6; } ;; xno) - { echo "$as_me:$LINENO: result: unsupported" >&5 -echo "${ECHO_T}unsupported" >&6; } ;; + { $as_echo "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 +$as_echo "unsupported" >&6; } ;; *) CC="$CC $ac_cv_prog_cc_c89" - { echo "$as_me:$LINENO: result: $ac_cv_prog_cc_c89" >&5 -echo "${ECHO_T}$ac_cv_prog_cc_c89" >&6; } ;; + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c89" >&5 +$as_echo "$ac_cv_prog_cc_c89" >&6; } ;; esac +if test "x$ac_cv_prog_cc_c89" != xno; then : +fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' @@ -3557,44 +3804,44 @@ am_make=${MAKE-make} cat > confinc << 'END' am__doit: - @echo done + @echo this is the am__doit target .PHONY: am__doit END # If we don't find an include directive, just comment out the code. -{ echo "$as_me:$LINENO: checking for style of include used by $am_make" >&5 -echo $ECHO_N "checking for style of include used by $am_make... $ECHO_C" >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for style of include used by $am_make" >&5 +$as_echo_n "checking for style of include used by $am_make... " >&6; } am__include="#" am__quote= _am_result=none # First try GNU make style include. echo "include confinc" > confmf -# We grep out `Entering directory' and `Leaving directory' -# messages which can occur if `w' ends up in MAKEFLAGS. -# In particular we don't look at `^make:' because GNU make might -# be invoked under some other name (usually "gmake"), in which -# case it prints its new name instead of `make'. -if test "`$am_make -s -f confmf 2> /dev/null | grep -v 'ing directory'`" = "done"; then - am__include=include - am__quote= - _am_result=GNU -fi +# Ignore all kinds of additional output from `make'. +case `$am_make -s -f confmf 2> /dev/null` in #( +*the\ am__doit\ target*) + am__include=include + am__quote= + _am_result=GNU + ;; +esac # Now try BSD make style include. if test "$am__include" = "#"; then echo '.include "confinc"' > confmf - if test "`$am_make -s -f confmf 2> /dev/null`" = "done"; then - am__include=.include - am__quote="\"" - _am_result=BSD - fi + case `$am_make -s -f confmf 2> /dev/null` in #( + *the\ am__doit\ target*) + am__include=.include + am__quote="\"" + _am_result=BSD + ;; + esac fi -{ echo "$as_me:$LINENO: result: $_am_result" >&5 -echo "${ECHO_T}$_am_result" >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $_am_result" >&5 +$as_echo "$_am_result" >&6; } rm -f confinc confmf # Check whether --enable-dependency-tracking was given. -if test "${enable_dependency_tracking+set}" = set; then +if test "${enable_dependency_tracking+set}" = set; then : enableval=$enable_dependency_tracking; fi @@ -3614,10 +3861,10 @@ depcc="$CC" am_compiler_list= -{ echo "$as_me:$LINENO: checking dependency style of $depcc" >&5 -echo $ECHO_N "checking dependency style of $depcc... $ECHO_C" >&6; } -if test "${am_cv_CC_dependencies_compiler_type+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking dependency style of $depcc" >&5 +$as_echo_n "checking dependency style of $depcc... " >&6; } +if test "${am_cv_CC_dependencies_compiler_type+set}" = set; then : + $as_echo_n "(cached) " >&6 else if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then # We make a subdir and do the tests there. Otherwise we can end up @@ -3642,6 +3889,11 @@ if test "$am_compiler_list" = ""; then am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp` fi + am__universal=false + case " $depcc " in #( + *\ -arch\ *\ -arch\ *) am__universal=true ;; + esac + for depmode in $am_compiler_list; do # Setup a source with many dependencies, because some compilers # like to wrap large dependency lists on column 80 (with \), and @@ -3659,7 +3911,17 @@ done echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf + # We check with `-c' and `-o' for the sake of the "dashmstdout" + # mode. It turns out that the SunPro C++ compiler does not properly + # handle `-M -o', and we need to detect this. Also, some Intel + # versions had trouble with output in subdirs + am__obj=sub/conftest.${OBJEXT-o} + am__minus_obj="-o $am__obj" case $depmode in + gcc) + # This depmode causes a compiler race in universal mode. + test "$am__universal" = false || continue + ;; nosideeffect) # after this tag, mechanisms are not by side-effect, so they'll # only be used when explicitly requested @@ -3669,19 +3931,23 @@ break fi ;; + msvisualcpp | msvcmsys) + # This compiler won't grok `-c -o', but also, the minuso test has + # not run yet. These depmodes are late enough in the game, and + # so weak that their functioning should not be impacted. + am__obj=conftest.${OBJEXT-o} + am__minus_obj= + ;; none) break ;; esac - # We check with `-c' and `-o' for the sake of the "dashmstdout" - # mode. It turns out that the SunPro C++ compiler does not properly - # handle `-M -o', and we need to detect this. if depmode=$depmode \ - source=sub/conftest.c object=sub/conftest.${OBJEXT-o} \ + source=sub/conftest.c object=$am__obj \ depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ - $SHELL ./depcomp $depcc -c -o sub/conftest.${OBJEXT-o} sub/conftest.c \ + $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \ >/dev/null 2>conftest.err && grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 && grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && - grep sub/conftest.${OBJEXT-o} sub/conftest.Po > /dev/null 2>&1 && + grep $am__obj sub/conftest.Po > /dev/null 2>&1 && ${MAKE-make} -s -f confmf > /dev/null 2>&1; then # icc doesn't choke on unknown options, it will just issue warnings # or remarks (even with -Werror). So we grep stderr for any message @@ -3705,8 +3971,8 @@ fi fi -{ echo "$as_me:$LINENO: result: $am_cv_CC_dependencies_compiler_type" >&5 -echo "${ECHO_T}$am_cv_CC_dependencies_compiler_type" >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_CC_dependencies_compiler_type" >&5 +$as_echo "$am_cv_CC_dependencies_compiler_type" >&6; } CCDEPMODE=depmode=$am_cv_CC_dependencies_compiler_type if @@ -3724,6 +3990,7 @@ + # By default we simply use the C compiler to build assembly code. test "${CCAS+set}" = set || CCAS=$CC @@ -3733,10 +4000,10 @@ depcc="$CCAS" am_compiler_list= -{ echo "$as_me:$LINENO: checking dependency style of $depcc" >&5 -echo $ECHO_N "checking dependency style of $depcc... $ECHO_C" >&6; } -if test "${am_cv_CCAS_dependencies_compiler_type+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking dependency style of $depcc" >&5 +$as_echo_n "checking dependency style of $depcc... " >&6; } +if test "${am_cv_CCAS_dependencies_compiler_type+set}" = set; then : + $as_echo_n "(cached) " >&6 else if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then # We make a subdir and do the tests there. Otherwise we can end up @@ -3761,6 +4028,9 @@ if test "$am_compiler_list" = ""; then am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp` fi + am__universal=false + + for depmode in $am_compiler_list; do # Setup a source with many dependencies, because some compilers # like to wrap large dependency lists on column 80 (with \), and @@ -3778,7 +4048,17 @@ done echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf + # We check with `-c' and `-o' for the sake of the "dashmstdout" + # mode. It turns out that the SunPro C++ compiler does not properly + # handle `-M -o', and we need to detect this. Also, some Intel + # versions had trouble with output in subdirs + am__obj=sub/conftest.${OBJEXT-o} + am__minus_obj="-o $am__obj" case $depmode in + gcc) + # This depmode causes a compiler race in universal mode. + test "$am__universal" = false || continue + ;; nosideeffect) # after this tag, mechanisms are not by side-effect, so they'll # only be used when explicitly requested @@ -3788,19 +4068,23 @@ break fi ;; + msvisualcpp | msvcmsys) + # This compiler won't grok `-c -o', but also, the minuso test has + # not run yet. These depmodes are late enough in the game, and + # so weak that their functioning should not be impacted. + am__obj=conftest.${OBJEXT-o} + am__minus_obj= + ;; none) break ;; esac - # We check with `-c' and `-o' for the sake of the "dashmstdout" - # mode. It turns out that the SunPro C++ compiler does not properly - # handle `-M -o', and we need to detect this. if depmode=$depmode \ - source=sub/conftest.c object=sub/conftest.${OBJEXT-o} \ + source=sub/conftest.c object=$am__obj \ depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ - $SHELL ./depcomp $depcc -c -o sub/conftest.${OBJEXT-o} sub/conftest.c \ + $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \ >/dev/null 2>conftest.err && grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 && grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && - grep sub/conftest.${OBJEXT-o} sub/conftest.Po > /dev/null 2>&1 && + grep $am__obj sub/conftest.Po > /dev/null 2>&1 && ${MAKE-make} -s -f confmf > /dev/null 2>&1; then # icc doesn't choke on unknown options, it will just issue warnings # or remarks (even with -Werror). So we grep stderr for any message @@ -3824,8 +4108,8 @@ fi fi -{ echo "$as_me:$LINENO: result: $am_cv_CCAS_dependencies_compiler_type" >&5 -echo "${ECHO_T}$am_cv_CCAS_dependencies_compiler_type" >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_CCAS_dependencies_compiler_type" >&5 +$as_echo "$am_cv_CCAS_dependencies_compiler_type" >&6; } CCASDEPMODE=depmode=$am_cv_CCAS_dependencies_compiler_type if @@ -3840,22 +4124,18 @@ if test "x$CC" != xcc; then - { echo "$as_me:$LINENO: checking whether $CC and cc understand -c and -o together" >&5 -echo $ECHO_N "checking whether $CC and cc understand -c and -o together... $ECHO_C" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC and cc understand -c and -o together" >&5 +$as_echo_n "checking whether $CC and cc understand -c and -o together... " >&6; } else - { echo "$as_me:$LINENO: checking whether cc understands -c and -o together" >&5 -echo $ECHO_N "checking whether cc understands -c and -o together... $ECHO_C" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether cc understands -c and -o together" >&5 +$as_echo_n "checking whether cc understands -c and -o together... " >&6; } fi -set dummy $CC; ac_cc=`echo $2 | +set dummy $CC; ac_cc=`$as_echo "$2" | sed 's/[^a-zA-Z0-9_]/_/g;s/^[0-9]/_/'` -if { as_var=ac_cv_prog_cc_${ac_cc}_c_o; eval "test \"\${$as_var+set}\" = set"; }; then - echo $ECHO_N "(cached) $ECHO_C" >&6 +if { as_var=ac_cv_prog_cc_${ac_cc}_c_o; eval "test \"\${$as_var+set}\" = set"; }; then : + $as_echo_n "(cached) " >&6 else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int @@ -3871,58 +4151,63 @@ # existing .o file with -o, though they will create one. ac_try='$CC -c conftest.$ac_ext -o conftest2.$ac_objext >&5' rm -f conftest2.* -if { (case "(($ac_try" in +if { { case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 (eval "$ac_try") 2>&5 ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - test -f conftest2.$ac_objext && { (case "(($ac_try" in + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } && + test -f conftest2.$ac_objext && { { case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 (eval "$ac_try") 2>&5 ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then eval ac_cv_prog_cc_${ac_cc}_c_o=yes if test "x$CC" != xcc; then # Test first that cc exists at all. if { ac_try='cc -c conftest.$ac_ext >&5' - { (case "(($ac_try" in + { { case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 (eval "$ac_try") 2>&5 ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then ac_try='cc -c conftest.$ac_ext -o conftest2.$ac_objext >&5' rm -f conftest2.* - if { (case "(($ac_try" in + if { { case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 (eval "$ac_try") 2>&5 ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - test -f conftest2.$ac_objext && { (case "(($ac_try" in + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } && + test -f conftest2.$ac_objext && { { case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 (eval "$ac_try") 2>&5 ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then # cc works too. : @@ -3939,23 +4224,22 @@ fi if eval test \$ac_cv_prog_cc_${ac_cc}_c_o = yes; then - { echo "$as_me:$LINENO: result: yes" >&5 -echo "${ECHO_T}yes" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } else - { echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } -cat >>confdefs.h <<\_ACEOF -#define NO_MINUS_C_MINUS_O 1 -_ACEOF +$as_echo "#define NO_MINUS_C_MINUS_O 1" >>confdefs.h fi # FIXME: we rely on the cache variable name because # there is no other way. set dummy $CC -ac_cc=`echo $2 | sed 's/[^a-zA-Z0-9_]/_/g;s/^[0-9]/_/'` -if eval "test \"`echo '$ac_cv_prog_cc_'${ac_cc}_c_o`\" != yes"; then +am_cc=`echo $2 | sed 's/[^a-zA-Z0-9_]/_/g;s/^[0-9]/_/'` +eval am_t=\$ac_cv_prog_cc_${am_cc}_c_o +if test "$am_t" != yes; then # Losing compiler, so override with the script. # FIXME: It is wrong to rewrite CC. # But if we don't then we get into trouble of one sort or another. @@ -3965,176 +4249,206 @@ fi -# Check whether --enable-shared was given. -if test "${enable_shared+set}" = set; then - enableval=$enable_shared; p=${PACKAGE-default} - case $enableval in - yes) enable_shared=yes ;; - no) enable_shared=no ;; - *) - enable_shared=no - # Look at the argument we got. We use all the common list separators. - lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," - for pkg in $enableval; do - IFS="$lt_save_ifs" - if test "X$pkg" = "X$p"; then - enable_shared=yes - fi - done - IFS="$lt_save_ifs" - ;; - esac -else - enable_shared=yes -fi +AC_PROG_LIBTOOL -# Check whether --enable-static was given. -if test "${enable_static+set}" = set; then - enableval=$enable_static; p=${PACKAGE-default} - case $enableval in - yes) enable_static=yes ;; - no) enable_static=no ;; - *) - enable_static=no - # Look at the argument we got. We use all the common list separators. - lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," - for pkg in $enableval; do - IFS="$lt_save_ifs" - if test "X$pkg" = "X$p"; then - enable_static=yes - fi - done - IFS="$lt_save_ifs" - ;; - esac + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to enable maintainer-specific portions of Makefiles" >&5 +$as_echo_n "checking whether to enable maintainer-specific portions of Makefiles... " >&6; } + # Check whether --enable-maintainer-mode was given. +if test "${enable_maintainer_mode+set}" = set; then : + enableval=$enable_maintainer_mode; USE_MAINTAINER_MODE=$enableval else - enable_static=yes + USE_MAINTAINER_MODE=no fi - -# Check whether --enable-fast-install was given. -if test "${enable_fast_install+set}" = set; then - enableval=$enable_fast_install; p=${PACKAGE-default} - case $enableval in - yes) enable_fast_install=yes ;; - no) enable_fast_install=no ;; - *) - enable_fast_install=no - # Look at the argument we got. We use all the common list separators. - lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," - for pkg in $enableval; do - IFS="$lt_save_ifs" - if test "X$pkg" = "X$p"; then - enable_fast_install=yes - fi - done - IFS="$lt_save_ifs" - ;; - esac + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $USE_MAINTAINER_MODE" >&5 +$as_echo "$USE_MAINTAINER_MODE" >&6; } + if test $USE_MAINTAINER_MODE = yes; then + MAINTAINER_MODE_TRUE= + MAINTAINER_MODE_FALSE='#' else - enable_fast_install=yes + MAINTAINER_MODE_TRUE='#' + MAINTAINER_MODE_FALSE= fi + MAINT=$MAINTAINER_MODE_TRUE + + + -{ echo "$as_me:$LINENO: checking for a sed that does not truncate output" >&5 -echo $ECHO_N "checking for a sed that does not truncate output... $ECHO_C" >&6; } -if test "${lt_cv_path_SED+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to run the C preprocessor" >&5 +$as_echo_n "checking how to run the C preprocessor... " >&6; } +# On Suns, sometimes $CPP names a directory. +if test -n "$CPP" && test -d "$CPP"; then + CPP= +fi +if test -z "$CPP"; then + if test "${ac_cv_prog_CPP+set}" = set; then : + $as_echo_n "(cached) " >&6 else - # Loop through the user's path and test for sed and gsed. -# Then use that list of sed's as ones to test for truncation. -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH + # Double quotes because CPP needs to be expanded + for CPP in "$CC -E" "$CC -E -traditional-cpp" "/lib/cpp" + do + ac_preproc_ok=false +for ac_c_preproc_warn_flag in '' yes do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for lt_ac_prog in sed gsed; do - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$lt_ac_prog$ac_exec_ext" && $as_test_x "$as_dir/$lt_ac_prog$ac_exec_ext"; }; then - lt_ac_sed_list="$lt_ac_sed_list $as_dir/$lt_ac_prog$ac_exec_ext" - fi - done - done -done -IFS=$as_save_IFS -lt_ac_max=0 -lt_ac_count=0 -# Add /usr/xpg4/bin/sed as it is typically found on Solaris -# along with /bin/sed that truncates output. -for lt_ac_sed in $lt_ac_sed_list /usr/xpg4/bin/sed; do - test ! -f $lt_ac_sed && continue - cat /dev/null > conftest.in - lt_ac_count=0 - echo $ECHO_N "0123456789$ECHO_C" >conftest.in - # Check for GNU sed and select it if it is found. - if "$lt_ac_sed" --version 2>&1 < /dev/null | grep 'GNU' > /dev/null; then - lt_cv_path_SED=$lt_ac_sed - break - fi - while true; do - cat conftest.in conftest.in >conftest.tmp - mv conftest.tmp conftest.in - cp conftest.in conftest.nl - echo >>conftest.nl - $lt_ac_sed -e 's/a$//' < conftest.nl >conftest.out || break - cmp -s conftest.out conftest.nl || break - # 10000 chars as input seems more than enough - test $lt_ac_count -gt 10 && break - lt_ac_count=`expr $lt_ac_count + 1` - if test $lt_ac_count -gt $lt_ac_max; then - lt_ac_max=$lt_ac_count - lt_cv_path_SED=$lt_ac_sed - fi - done -done + # Use a header file that comes with gcc, so configuring glibc + # with a fresh cross-compiler works. + # Prefer to if __STDC__ is defined, since + # exists even on freestanding compilers. + # On the NeXT, cc -E runs the code through the compiler's parser, + # not just through cpp. "Syntax error" is here to catch this case. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#ifdef __STDC__ +# include +#else +# include +#endif + Syntax error +_ACEOF +if ac_fn_c_try_cpp "$LINENO"; then : + +else + # Broken: fails on valid input. +continue +fi +rm -f conftest.err conftest.$ac_ext + # OK, works on sane cases. Now check whether nonexistent headers + # can be detected and how. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +_ACEOF +if ac_fn_c_try_cpp "$LINENO"; then : + # Broken: success on invalid input. +continue +else + # Passes both tests. +ac_preproc_ok=: +break fi +rm -f conftest.err conftest.$ac_ext -SED=$lt_cv_path_SED +done +# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. +rm -f conftest.err conftest.$ac_ext +if $ac_preproc_ok; then : + break +fi -{ echo "$as_me:$LINENO: result: $SED" >&5 -echo "${ECHO_T}$SED" >&6; } + done + ac_cv_prog_CPP=$CPP -{ echo "$as_me:$LINENO: checking for grep that handles long lines and -e" >&5 -echo $ECHO_N "checking for grep that handles long lines and -e... $ECHO_C" >&6; } -if test "${ac_cv_path_GREP+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - # Extract the first word of "grep ggrep" to use in msg output -if test -z "$GREP"; then -set dummy grep ggrep; ac_prog_name=$2 -if test "${ac_cv_path_GREP+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 +fi + CPP=$ac_cv_prog_CPP else - ac_path_GREP_found=false -# Loop through the user's path and test for each of PROGNAME-LIST -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR + ac_cv_prog_CPP=$CPP +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $CPP" >&5 +$as_echo "$CPP" >&6; } +ac_preproc_ok=false +for ac_c_preproc_warn_flag in '' yes +do + # Use a header file that comes with gcc, so configuring glibc + # with a fresh cross-compiler works. + # Prefer to if __STDC__ is defined, since + # exists even on freestanding compilers. + # On the NeXT, cc -E runs the code through the compiler's parser, + # not just through cpp. "Syntax error" is here to catch this case. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#ifdef __STDC__ +# include +#else +# include +#endif + Syntax error +_ACEOF +if ac_fn_c_try_cpp "$LINENO"; then : + +else + # Broken: fails on valid input. +continue +fi +rm -f conftest.err conftest.$ac_ext + + # OK, works on sane cases. Now check whether nonexistent headers + # can be detected and how. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +_ACEOF +if ac_fn_c_try_cpp "$LINENO"; then : + # Broken: success on invalid input. +continue +else + # Passes both tests. +ac_preproc_ok=: +break +fi +rm -f conftest.err conftest.$ac_ext + +done +# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. +rm -f conftest.err conftest.$ac_ext +if $ac_preproc_ok; then : + +else + { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error "C preprocessor \"$CPP\" fails sanity check +See \`config.log' for more details." "$LINENO" 5; } +fi + +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for grep that handles long lines and -e" >&5 +$as_echo_n "checking for grep that handles long lines and -e... " >&6; } +if test "${ac_cv_path_GREP+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test -z "$GREP"; then + ac_path_GREP_found=false + # Loop through the user's path and test for each of PROGNAME-LIST + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. - for ac_prog in grep ggrep; do - for ac_exec_ext in '' $ac_executable_extensions; do - ac_path_GREP="$as_dir/$ac_prog$ac_exec_ext" - { test -f "$ac_path_GREP" && $as_test_x "$ac_path_GREP"; } || continue - # Check for GNU ac_path_GREP and select it if it is found. + for ac_prog in grep ggrep; do + for ac_exec_ext in '' $ac_executable_extensions; do + ac_path_GREP="$as_dir/$ac_prog$ac_exec_ext" + { test -f "$ac_path_GREP" && $as_test_x "$ac_path_GREP"; } || continue +# Check for GNU ac_path_GREP and select it if it is found. # Check for GNU $ac_path_GREP case `"$ac_path_GREP" --version 2>&1` in *GNU*) ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_found=:;; *) ac_count=0 - echo $ECHO_N "0123456789$ECHO_C" >"conftest.in" + $as_echo_n 0123456789 >"conftest.in" while : do cat "conftest.in" "conftest.in" >"conftest.tmp" mv "conftest.tmp" "conftest.in" cp "conftest.in" "conftest.nl" - echo 'GREP' >> "conftest.nl" + $as_echo 'GREP' >> "conftest.nl" "$ac_path_GREP" -e 'GREP$' -e '-(cannot match)-' < "conftest.nl" >"conftest.out" 2>/dev/null || break diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break - ac_count=`expr $ac_count + 1` + as_fn_arith $ac_count + 1 && ac_count=$as_val if test $ac_count -gt ${ac_path_GREP_max-0}; then # Best one so far, save it but keep looking for a better one ac_cv_path_GREP="$ac_path_GREP" @@ -4146,77 +4460,61 @@ rm -f conftest.in conftest.tmp conftest.nl conftest.out;; esac - - $ac_path_GREP_found && break 3 + $ac_path_GREP_found && break 3 + done + done done -done - -done IFS=$as_save_IFS - - -fi - -GREP="$ac_cv_path_GREP" -if test -z "$GREP"; then - { { echo "$as_me:$LINENO: error: no acceptable $ac_prog_name could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" >&5 -echo "$as_me: error: no acceptable $ac_prog_name could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" >&2;} - { (exit 1); exit 1; }; } -fi - + if test -z "$ac_cv_path_GREP"; then + as_fn_error "no acceptable grep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 + fi else ac_cv_path_GREP=$GREP fi - fi -{ echo "$as_me:$LINENO: result: $ac_cv_path_GREP" >&5 -echo "${ECHO_T}$ac_cv_path_GREP" >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_GREP" >&5 +$as_echo "$ac_cv_path_GREP" >&6; } GREP="$ac_cv_path_GREP" -{ echo "$as_me:$LINENO: checking for egrep" >&5 -echo $ECHO_N "checking for egrep... $ECHO_C" >&6; } -if test "${ac_cv_path_EGREP+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for egrep" >&5 +$as_echo_n "checking for egrep... " >&6; } +if test "${ac_cv_path_EGREP+set}" = set; then : + $as_echo_n "(cached) " >&6 else if echo a | $GREP -E '(a|b)' >/dev/null 2>&1 then ac_cv_path_EGREP="$GREP -E" else - # Extract the first word of "egrep" to use in msg output -if test -z "$EGREP"; then -set dummy egrep; ac_prog_name=$2 -if test "${ac_cv_path_EGREP+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else + if test -z "$EGREP"; then ac_path_EGREP_found=false -# Loop through the user's path and test for each of PROGNAME-LIST -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR + # Loop through the user's path and test for each of PROGNAME-LIST + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. - for ac_prog in egrep; do - for ac_exec_ext in '' $ac_executable_extensions; do - ac_path_EGREP="$as_dir/$ac_prog$ac_exec_ext" - { test -f "$ac_path_EGREP" && $as_test_x "$ac_path_EGREP"; } || continue - # Check for GNU ac_path_EGREP and select it if it is found. + for ac_prog in egrep; do + for ac_exec_ext in '' $ac_executable_extensions; do + ac_path_EGREP="$as_dir/$ac_prog$ac_exec_ext" + { test -f "$ac_path_EGREP" && $as_test_x "$ac_path_EGREP"; } || continue +# Check for GNU ac_path_EGREP and select it if it is found. # Check for GNU $ac_path_EGREP case `"$ac_path_EGREP" --version 2>&1` in *GNU*) ac_cv_path_EGREP="$ac_path_EGREP" ac_path_EGREP_found=:;; *) ac_count=0 - echo $ECHO_N "0123456789$ECHO_C" >"conftest.in" + $as_echo_n 0123456789 >"conftest.in" while : do cat "conftest.in" "conftest.in" >"conftest.tmp" mv "conftest.tmp" "conftest.in" cp "conftest.in" "conftest.nl" - echo 'EGREP' >> "conftest.nl" + $as_echo 'EGREP' >> "conftest.nl" "$ac_path_EGREP" 'EGREP$' < "conftest.nl" >"conftest.out" 2>/dev/null || break diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break - ac_count=`expr $ac_count + 1` + as_fn_arith $ac_count + 1 && ac_count=$as_val if test $ac_count -gt ${ac_path_EGREP_max-0}; then # Best one so far, save it but keep looking for a better one ac_cv_path_EGREP="$ac_path_EGREP" @@ -4228,17885 +4526,1046 @@ rm -f conftest.in conftest.tmp conftest.nl conftest.out;; esac - - $ac_path_EGREP_found && break 3 + $ac_path_EGREP_found && break 3 + done + done done -done - -done IFS=$as_save_IFS - - -fi - -EGREP="$ac_cv_path_EGREP" -if test -z "$EGREP"; then - { { echo "$as_me:$LINENO: error: no acceptable $ac_prog_name could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" >&5 -echo "$as_me: error: no acceptable $ac_prog_name could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" >&2;} - { (exit 1); exit 1; }; } -fi - + if test -z "$ac_cv_path_EGREP"; then + as_fn_error "no acceptable egrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 + fi else ac_cv_path_EGREP=$EGREP fi - fi fi -{ echo "$as_me:$LINENO: result: $ac_cv_path_EGREP" >&5 -echo "${ECHO_T}$ac_cv_path_EGREP" >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_EGREP" >&5 +$as_echo "$ac_cv_path_EGREP" >&6; } EGREP="$ac_cv_path_EGREP" +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for ANSI C header files" >&5 +$as_echo_n "checking for ANSI C header files... " >&6; } +if test "${ac_cv_header_stdc+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +#include +#include +#include + +int +main () +{ -# Check whether --with-gnu-ld was given. -if test "${with_gnu_ld+set}" = set; then - withval=$with_gnu_ld; test "$withval" = no || with_gnu_ld=yes -else - with_gnu_ld=no -fi - -ac_prog=ld -if test "$GCC" = yes; then - # Check if gcc -print-prog-name=ld gives a path. - { echo "$as_me:$LINENO: checking for ld used by $CC" >&5 -echo $ECHO_N "checking for ld used by $CC... $ECHO_C" >&6; } - case $host in - *-*-mingw*) - # gcc leaves a trailing carriage return which upsets mingw - ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;; - *) - ac_prog=`($CC -print-prog-name=ld) 2>&5` ;; - esac - case $ac_prog in - # Accept absolute paths. - [\\/]* | ?:[\\/]*) - re_direlt='/[^/][^/]*/\.\./' - # Canonicalize the pathname of ld - ac_prog=`echo $ac_prog| $SED 's%\\\\%/%g'` - while echo $ac_prog | grep "$re_direlt" > /dev/null 2>&1; do - ac_prog=`echo $ac_prog| $SED "s%$re_direlt%/%"` - done - test -z "$LD" && LD="$ac_prog" - ;; - "") - # If it fails, then pretend we aren't using GCC. - ac_prog=ld - ;; - *) - # If it is relative, then search for the first ld in PATH. - with_gnu_ld=unknown - ;; - esac -elif test "$with_gnu_ld" = yes; then - { echo "$as_me:$LINENO: checking for GNU ld" >&5 -echo $ECHO_N "checking for GNU ld... $ECHO_C" >&6; } -else - { echo "$as_me:$LINENO: checking for non-GNU ld" >&5 -echo $ECHO_N "checking for non-GNU ld... $ECHO_C" >&6; } -fi -if test "${lt_cv_path_LD+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - if test -z "$LD"; then - lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR - for ac_dir in $PATH; do - IFS="$lt_save_ifs" - test -z "$ac_dir" && ac_dir=. - if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then - lt_cv_path_LD="$ac_dir/$ac_prog" - # Check to see if the program is GNU ld. I'd rather use --version, - # but apparently some variants of GNU ld only accept -v. - # Break only if it was the GNU/non-GNU ld that we prefer. - case `"$lt_cv_path_LD" -v 2>&1 conftest.$ac_ext +/* end confdefs.h. */ +#include + +_ACEOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP "memchr" >/dev/null 2>&1; then : -LD="$lt_cv_path_LD" -if test -n "$LD"; then - { echo "$as_me:$LINENO: result: $LD" >&5 -echo "${ECHO_T}$LD" >&6; } else - { echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6; } + ac_cv_header_stdc=no fi -test -z "$LD" && { { echo "$as_me:$LINENO: error: no acceptable ld found in \$PATH" >&5 -echo "$as_me: error: no acceptable ld found in \$PATH" >&2;} - { (exit 1); exit 1; }; } -{ echo "$as_me:$LINENO: checking if the linker ($LD) is GNU ld" >&5 -echo $ECHO_N "checking if the linker ($LD) is GNU ld... $ECHO_C" >&6; } -if test "${lt_cv_prog_gnu_ld+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - # I'd rather use --version here, but apparently some GNU lds only accept -v. -case `$LD -v 2>&1 &5 -echo "${ECHO_T}$lt_cv_prog_gnu_ld" >&6; } -with_gnu_ld=$lt_cv_prog_gnu_ld - - -{ echo "$as_me:$LINENO: checking for $LD option to reload object files" >&5 -echo $ECHO_N "checking for $LD option to reload object files... $ECHO_C" >&6; } -if test "${lt_cv_ld_reload_flag+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - lt_cv_ld_reload_flag='-r' -fi -{ echo "$as_me:$LINENO: result: $lt_cv_ld_reload_flag" >&5 -echo "${ECHO_T}$lt_cv_ld_reload_flag" >&6; } -reload_flag=$lt_cv_ld_reload_flag -case $reload_flag in -"" | " "*) ;; -*) reload_flag=" $reload_flag" ;; -esac -reload_cmds='$LD$reload_flag -o $output$reload_objs' -case $host_os in - darwin*) - if test "$GCC" = yes; then - reload_cmds='$LTCC $LTCFLAGS -nostdlib ${wl}-r -o $output$reload_objs' - else - reload_cmds='$LD$reload_flag -o $output$reload_objs' - fi - ;; -esac -{ echo "$as_me:$LINENO: checking for BSD-compatible nm" >&5 -echo $ECHO_N "checking for BSD-compatible nm... $ECHO_C" >&6; } -if test "${lt_cv_path_NM+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - if test -n "$NM"; then - # Let the user override the test. - lt_cv_path_NM="$NM" -else - lt_nm_to_check="${ac_tool_prefix}nm" - if test -n "$ac_tool_prefix" && test "$build" = "$host"; then - lt_nm_to_check="$lt_nm_to_check nm" - fi - for lt_tmp_nm in $lt_nm_to_check; do - lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR - for ac_dir in $PATH /usr/ccs/bin/elf /usr/ccs/bin /usr/ucb /bin; do - IFS="$lt_save_ifs" - test -z "$ac_dir" && ac_dir=. - tmp_nm="$ac_dir/$lt_tmp_nm" - if test -f "$tmp_nm" || test -f "$tmp_nm$ac_exeext" ; then - # Check to see if the nm accepts a BSD-compat flag. - # Adding the `sed 1q' prevents false positives on HP-UX, which says: - # nm: unknown option "B" ignored - # Tru64's nm complains that /dev/null is an invalid object file - case `"$tmp_nm" -B /dev/null 2>&1 | sed '1q'` in - */dev/null* | *'Invalid file or object type'*) - lt_cv_path_NM="$tmp_nm -B" - break - ;; - *) - case `"$tmp_nm" -p /dev/null 2>&1 | sed '1q'` in - */dev/null*) - lt_cv_path_NM="$tmp_nm -p" - break - ;; - *) - lt_cv_path_NM=${lt_cv_path_NM="$tmp_nm"} # keep the first match, but - continue # so that we can try to find one that supports BSD flags - ;; - esac - ;; - esac - fi - done - IFS="$lt_save_ifs" - done - test -z "$lt_cv_path_NM" && lt_cv_path_NM=nm +if test $ac_cv_header_stdc = yes; then + # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include + +_ACEOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP "free" >/dev/null 2>&1; then : + +else + ac_cv_header_stdc=no fi +rm -f conftest* + fi -{ echo "$as_me:$LINENO: result: $lt_cv_path_NM" >&5 -echo "${ECHO_T}$lt_cv_path_NM" >&6; } -NM="$lt_cv_path_NM" - -{ echo "$as_me:$LINENO: checking whether ln -s works" >&5 -echo $ECHO_N "checking whether ln -s works... $ECHO_C" >&6; } -LN_S=$as_ln_s -if test "$LN_S" = "ln -s"; then - { echo "$as_me:$LINENO: result: yes" >&5 -echo "${ECHO_T}yes" >&6; } -else - { echo "$as_me:$LINENO: result: no, using $LN_S" >&5 -echo "${ECHO_T}no, using $LN_S" >&6; } -fi - -{ echo "$as_me:$LINENO: checking how to recognize dependent libraries" >&5 -echo $ECHO_N "checking how to recognize dependent libraries... $ECHO_C" >&6; } -if test "${lt_cv_deplibs_check_method+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - lt_cv_file_magic_cmd='$MAGIC_CMD' -lt_cv_file_magic_test_file= -lt_cv_deplibs_check_method='unknown' -# Need to set the preceding variable on all platforms that support -# interlibrary dependencies. -# 'none' -- dependencies not supported. -# `unknown' -- same as none, but documents that we really don't know. -# 'pass_all' -- all dependencies passed with no checks. -# 'test_compile' -- check by making test program. -# 'file_magic [[regex]]' -- check by looking for files in library path -# which responds to the $file_magic_cmd with a given extended regex. -# If you have `file' or equivalent on your system and you're not sure -# whether `pass_all' will *always* work, you probably want this one. - -case $host_os in -aix4* | aix5*) - lt_cv_deplibs_check_method=pass_all - ;; -beos*) - lt_cv_deplibs_check_method=pass_all - ;; +if test $ac_cv_header_stdc = yes; then + # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi. + if test "$cross_compiling" = yes; then : + : +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +#include +#if ((' ' & 0x0FF) == 0x020) +# define ISLOWER(c) ('a' <= (c) && (c) <= 'z') +# define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c)) +#else +# define ISLOWER(c) \ + (('a' <= (c) && (c) <= 'i') \ + || ('j' <= (c) && (c) <= 'r') \ + || ('s' <= (c) && (c) <= 'z')) +# define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c)) +#endif -bsdi[45]*) - lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (shared object|dynamic lib)' - lt_cv_file_magic_cmd='/usr/bin/file -L' - lt_cv_file_magic_test_file=/shlib/libc.so - ;; +#define XOR(e, f) (((e) && !(f)) || (!(e) && (f))) +int +main () +{ + int i; + for (i = 0; i < 256; i++) + if (XOR (islower (i), ISLOWER (i)) + || toupper (i) != TOUPPER (i)) + return 2; + return 0; +} +_ACEOF +if ac_fn_c_try_run "$LINENO"; then : -cygwin*) - # func_win32_libid is a shell function defined in ltmain.sh - lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL' - lt_cv_file_magic_cmd='func_win32_libid' - ;; +else + ac_cv_header_stdc=no +fi +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest.beam conftest.$ac_ext +fi -mingw* | pw32*) - # Base MSYS/MinGW do not provide the 'file' command needed by - # func_win32_libid shell function, so use a weaker test based on 'objdump', - # unless we find 'file', for example because we are cross-compiling. - if ( file / ) >/dev/null 2>&1; then - lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL' - lt_cv_file_magic_cmd='func_win32_libid' - else - lt_cv_deplibs_check_method='file_magic file format pei*-i386(.*architecture: i386)?' - lt_cv_file_magic_cmd='$OBJDUMP -f' - fi - ;; +fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_stdc" >&5 +$as_echo "$ac_cv_header_stdc" >&6; } +if test $ac_cv_header_stdc = yes; then -darwin* | rhapsody*) - lt_cv_deplibs_check_method=pass_all - ;; +$as_echo "#define STDC_HEADERS 1" >>confdefs.h -freebsd* | dragonfly*) - if echo __ELF__ | $CC -E - | grep __ELF__ > /dev/null; then - case $host_cpu in - i*86 ) - # Not sure whether the presence of OpenBSD here was a mistake. - # Let's accept both of them until this is cleared up. - lt_cv_deplibs_check_method='file_magic (FreeBSD|OpenBSD|DragonFly)/i[3-9]86 (compact )?demand paged shared library' - lt_cv_file_magic_cmd=/usr/bin/file - lt_cv_file_magic_test_file=`echo /usr/lib/libc.so.*` - ;; - esac - else - lt_cv_deplibs_check_method=pass_all - fi - ;; +fi -gnu*) - lt_cv_deplibs_check_method=pass_all - ;; +# On IRIX 5.3, sys/types and inttypes.h are conflicting. +for ac_header in sys/types.h sys/stat.h stdlib.h string.h memory.h strings.h \ + inttypes.h stdint.h unistd.h +do : + as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` +ac_fn_c_check_header_compile "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default +" +eval as_val=\$$as_ac_Header + if test "x$as_val" = x""yes; then : + cat >>confdefs.h <<_ACEOF +#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 +_ACEOF -hpux10.20* | hpux11*) - lt_cv_file_magic_cmd=/usr/bin/file - case $host_cpu in - ia64*) - lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF-[0-9][0-9]) shared object file - IA64' - lt_cv_file_magic_test_file=/usr/lib/hpux32/libc.so - ;; - hppa*64*) - lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF-[0-9][0-9]) shared object file - PA-RISC [0-9].[0-9]' - lt_cv_file_magic_test_file=/usr/lib/pa20_64/libc.sl - ;; - *) - lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|PA-RISC[0-9].[0-9]) shared library' - lt_cv_file_magic_test_file=/usr/lib/libc.sl - ;; - esac - ;; +fi -interix[3-9]*) - # PIC code is broken on Interix 3.x, that's why |\.a not |_pic\.a here - lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so|\.a)$' - ;; +done -irix5* | irix6* | nonstopux*) - case $LD in - *-32|*"-32 ") libmagic=32-bit;; - *-n32|*"-n32 ") libmagic=N32;; - *-64|*"-64 ") libmagic=64-bit;; - *) libmagic=never-match;; - esac - lt_cv_deplibs_check_method=pass_all - ;; -# This must be Linux ELF. -linux* | k*bsd*-gnu) - lt_cv_deplibs_check_method=pass_all - ;; +for ac_header in sys/mman.h +do : + ac_fn_c_check_header_mongrel "$LINENO" "sys/mman.h" "ac_cv_header_sys_mman_h" "$ac_includes_default" +if test "x$ac_cv_header_sys_mman_h" = x""yes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE_SYS_MMAN_H 1 +_ACEOF -netbsd*) - if echo __ELF__ | $CC -E - | grep __ELF__ > /dev/null; then - lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|_pic\.a)$' - else - lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so|_pic\.a)$' - fi - ;; +fi -newos6*) - lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (executable|dynamic lib)' - lt_cv_file_magic_cmd=/usr/bin/file - lt_cv_file_magic_test_file=/usr/lib/libnls.so - ;; +done -nto-qnx*) - lt_cv_deplibs_check_method=unknown - ;; +for ac_func in mmap +do : + ac_fn_c_check_func "$LINENO" "mmap" "ac_cv_func_mmap" +if test "x$ac_cv_func_mmap" = x""yes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE_MMAP 1 +_ACEOF -openbsd*) - if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then - lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|\.so|_pic\.a)$' - else - lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|_pic\.a)$' - fi - ;; +fi +done -osf3* | osf4* | osf5*) - lt_cv_deplibs_check_method=pass_all - ;; -rdos*) - lt_cv_deplibs_check_method=pass_all - ;; +ac_fn_c_check_header_mongrel "$LINENO" "sys/mman.h" "ac_cv_header_sys_mman_h" "$ac_includes_default" +if test "x$ac_cv_header_sys_mman_h" = x""yes; then : + libffi_header_sys_mman_h=yes +else + libffi_header_sys_mman_h=no +fi -solaris*) - lt_cv_deplibs_check_method=pass_all - ;; -sysv4 | sysv4.3*) - case $host_vendor in - motorola) - lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (shared object|dynamic lib) M[0-9][0-9]* Version [0-9]' - lt_cv_file_magic_test_file=`echo /usr/lib/libc.so*` - ;; - ncr) - lt_cv_deplibs_check_method=pass_all - ;; - sequent) - lt_cv_file_magic_cmd='/bin/file' - lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [LM]SB (shared object|dynamic lib )' - ;; - sni) - lt_cv_file_magic_cmd='/bin/file' - lt_cv_deplibs_check_method="file_magic ELF [0-9][0-9]*-bit [LM]SB dynamic lib" - lt_cv_file_magic_test_file=/lib/libc.so - ;; - siemens) - lt_cv_deplibs_check_method=pass_all - ;; - pc) - lt_cv_deplibs_check_method=pass_all - ;; - esac - ;; - -sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) - lt_cv_deplibs_check_method=pass_all - ;; -esac - -fi -{ echo "$as_me:$LINENO: result: $lt_cv_deplibs_check_method" >&5 -echo "${ECHO_T}$lt_cv_deplibs_check_method" >&6; } -file_magic_cmd=$lt_cv_file_magic_cmd -deplibs_check_method=$lt_cv_deplibs_check_method -test -z "$deplibs_check_method" && deplibs_check_method=unknown - - - - -# If no C compiler was specified, use CC. -LTCC=${LTCC-"$CC"} - -# If no C compiler flags were specified, use CFLAGS. -LTCFLAGS=${LTCFLAGS-"$CFLAGS"} - -# Allow CC to be a program name with arguments. -compiler=$CC - - -# Check whether --enable-libtool-lock was given. -if test "${enable_libtool_lock+set}" = set; then - enableval=$enable_libtool_lock; -fi - -test "x$enable_libtool_lock" != xno && enable_libtool_lock=yes - -# Some flags need to be propagated to the compiler or linker for good -# libtool support. -case $host in -ia64-*-hpux*) - # Find out which ABI we are using. - echo 'int i;' > conftest.$ac_ext - if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; then - case `/usr/bin/file conftest.$ac_objext` in - *ELF-32*) - HPUX_IA64_MODE="32" - ;; - *ELF-64*) - HPUX_IA64_MODE="64" - ;; - esac - fi - rm -rf conftest* - ;; -*-*-irix6*) - # Find out which ABI we are using. - echo '#line 4693 "configure"' > conftest.$ac_ext - if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; then - if test "$lt_cv_prog_gnu_ld" = yes; then - case `/usr/bin/file conftest.$ac_objext` in - *32-bit*) - LD="${LD-ld} -melf32bsmip" - ;; - *N32*) - LD="${LD-ld} -melf32bmipn32" - ;; - *64-bit*) - LD="${LD-ld} -melf64bmip" - ;; - esac - else - case `/usr/bin/file conftest.$ac_objext` in - *32-bit*) - LD="${LD-ld} -32" - ;; - *N32*) - LD="${LD-ld} -n32" - ;; - *64-bit*) - LD="${LD-ld} -64" - ;; - esac - fi - fi - rm -rf conftest* - ;; - -x86_64-*kfreebsd*-gnu|x86_64-*linux*|ppc*-*linux*|powerpc*-*linux*| \ -s390*-*linux*|sparc*-*linux*) - # Find out which ABI we are using. - echo 'int i;' > conftest.$ac_ext - if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; then - case `/usr/bin/file conftest.o` in - *32-bit*) - case $host in - x86_64-*kfreebsd*-gnu) - LD="${LD-ld} -m elf_i386_fbsd" - ;; - x86_64-*linux*) - LD="${LD-ld} -m elf_i386" - ;; - ppc64-*linux*|powerpc64-*linux*) - LD="${LD-ld} -m elf32ppclinux" - ;; - s390x-*linux*) - LD="${LD-ld} -m elf_s390" - ;; - sparc64-*linux*) - LD="${LD-ld} -m elf32_sparc" - ;; - esac - ;; - *64-bit*) - libsuff=64 - case $host in - x86_64-*kfreebsd*-gnu) - LD="${LD-ld} -m elf_x86_64_fbsd" - ;; - x86_64-*linux*) - LD="${LD-ld} -m elf_x86_64" - ;; - ppc*-*linux*|powerpc*-*linux*) - LD="${LD-ld} -m elf64ppc" - ;; - s390*-*linux*) - LD="${LD-ld} -m elf64_s390" - ;; - sparc*-*linux*) - LD="${LD-ld} -m elf64_sparc" - ;; - esac - ;; - esac - fi - rm -rf conftest* - ;; - -*-*-sco3.2v5*) - # On SCO OpenServer 5, we need -belf to get full-featured binaries. - SAVE_CFLAGS="$CFLAGS" - CFLAGS="$CFLAGS -belf" - { echo "$as_me:$LINENO: checking whether the C compiler needs -belf" >&5 -echo $ECHO_N "checking whether the C compiler needs -belf... $ECHO_C" >&6; } -if test "${lt_cv_cc_needs_belf+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - ac_ext=c -ac_cpp='$CPP $CPPFLAGS' -ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_c_compiler_gnu - - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ - -int -main () -{ - - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext conftest$ac_exeext -if { (ac_try="$ac_link" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_link") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest$ac_exeext && - $as_test_x conftest$ac_exeext; then - lt_cv_cc_needs_belf=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - lt_cv_cc_needs_belf=no -fi - -rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ - conftest$ac_exeext conftest.$ac_ext - ac_ext=c -ac_cpp='$CPP $CPPFLAGS' -ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_c_compiler_gnu - -fi -{ echo "$as_me:$LINENO: result: $lt_cv_cc_needs_belf" >&5 -echo "${ECHO_T}$lt_cv_cc_needs_belf" >&6; } - if test x"$lt_cv_cc_needs_belf" != x"yes"; then - # this is probably gcc 2.8.0, egcs 1.0 or newer; no need for -belf - CFLAGS="$SAVE_CFLAGS" - fi - ;; -sparc*-*solaris*) - # Find out which ABI we are using. - echo 'int i;' > conftest.$ac_ext - if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; then - case `/usr/bin/file conftest.o` in - *64-bit*) - case $lt_cv_prog_gnu_ld in - yes*) LD="${LD-ld} -m elf64_sparc" ;; - *) LD="${LD-ld} -64" ;; - esac - ;; - esac - fi - rm -rf conftest* - ;; - - -esac - -need_locks="$enable_libtool_lock" - - -ac_ext=c -ac_cpp='$CPP $CPPFLAGS' -ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_c_compiler_gnu -{ echo "$as_me:$LINENO: checking how to run the C preprocessor" >&5 -echo $ECHO_N "checking how to run the C preprocessor... $ECHO_C" >&6; } -# On Suns, sometimes $CPP names a directory. -if test -n "$CPP" && test -d "$CPP"; then - CPP= -fi -if test -z "$CPP"; then - if test "${ac_cv_prog_CPP+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - # Double quotes because CPP needs to be expanded - for CPP in "$CC -E" "$CC -E -traditional-cpp" "/lib/cpp" - do - ac_preproc_ok=false -for ac_c_preproc_warn_flag in '' yes -do - # Use a header file that comes with gcc, so configuring glibc - # with a fresh cross-compiler works. - # Prefer to if __STDC__ is defined, since - # exists even on freestanding compilers. - # On the NeXT, cc -E runs the code through the compiler's parser, - # not just through cpp. "Syntax error" is here to catch this case. - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -#ifdef __STDC__ -# include -#else -# include -#endif - Syntax error -_ACEOF -if { (ac_try="$ac_cpp conftest.$ac_ext" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } >/dev/null && { - test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || - test ! -s conftest.err - }; then - : -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - # Broken: fails on valid input. -continue -fi - -rm -f conftest.err conftest.$ac_ext - - # OK, works on sane cases. Now check whether nonexistent headers - # can be detected and how. - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -#include -_ACEOF -if { (ac_try="$ac_cpp conftest.$ac_ext" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } >/dev/null && { - test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || - test ! -s conftest.err - }; then - # Broken: success on invalid input. -continue -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - # Passes both tests. -ac_preproc_ok=: -break -fi - -rm -f conftest.err conftest.$ac_ext - -done -# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. -rm -f conftest.err conftest.$ac_ext -if $ac_preproc_ok; then - break -fi - - done - ac_cv_prog_CPP=$CPP - -fi - CPP=$ac_cv_prog_CPP -else - ac_cv_prog_CPP=$CPP -fi -{ echo "$as_me:$LINENO: result: $CPP" >&5 -echo "${ECHO_T}$CPP" >&6; } -ac_preproc_ok=false -for ac_c_preproc_warn_flag in '' yes -do - # Use a header file that comes with gcc, so configuring glibc - # with a fresh cross-compiler works. - # Prefer to if __STDC__ is defined, since - # exists even on freestanding compilers. - # On the NeXT, cc -E runs the code through the compiler's parser, - # not just through cpp. "Syntax error" is here to catch this case. - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -#ifdef __STDC__ -# include -#else -# include -#endif - Syntax error -_ACEOF -if { (ac_try="$ac_cpp conftest.$ac_ext" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } >/dev/null && { - test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || - test ! -s conftest.err - }; then - : -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - # Broken: fails on valid input. -continue -fi - -rm -f conftest.err conftest.$ac_ext - - # OK, works on sane cases. Now check whether nonexistent headers - # can be detected and how. - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -#include -_ACEOF -if { (ac_try="$ac_cpp conftest.$ac_ext" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } >/dev/null && { - test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || - test ! -s conftest.err - }; then - # Broken: success on invalid input. -continue -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - # Passes both tests. -ac_preproc_ok=: -break -fi - -rm -f conftest.err conftest.$ac_ext - -done -# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. -rm -f conftest.err conftest.$ac_ext -if $ac_preproc_ok; then - : -else - { { echo "$as_me:$LINENO: error: C preprocessor \"$CPP\" fails sanity check -See \`config.log' for more details." >&5 -echo "$as_me: error: C preprocessor \"$CPP\" fails sanity check -See \`config.log' for more details." >&2;} - { (exit 1); exit 1; }; } -fi - -ac_ext=c -ac_cpp='$CPP $CPPFLAGS' -ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_c_compiler_gnu - - -{ echo "$as_me:$LINENO: checking for ANSI C header files" >&5 -echo $ECHO_N "checking for ANSI C header files... $ECHO_C" >&6; } -if test "${ac_cv_header_stdc+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -#include -#include -#include -#include - -int -main () -{ - - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then - ac_cv_header_stdc=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_cv_header_stdc=no -fi - -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - -if test $ac_cv_header_stdc = yes; then - # SunOS 4.x string.h does not declare mem*, contrary to ANSI. - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -#include - -_ACEOF -if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | - $EGREP "memchr" >/dev/null 2>&1; then - : -else - ac_cv_header_stdc=no -fi -rm -f conftest* - -fi - -if test $ac_cv_header_stdc = yes; then - # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI. - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -#include - -_ACEOF -if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | - $EGREP "free" >/dev/null 2>&1; then - : -else - ac_cv_header_stdc=no -fi -rm -f conftest* - -fi - -if test $ac_cv_header_stdc = yes; then - # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi. - if test "$cross_compiling" = yes; then - : -else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -#include -#include -#if ((' ' & 0x0FF) == 0x020) -# define ISLOWER(c) ('a' <= (c) && (c) <= 'z') -# define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c)) -#else -# define ISLOWER(c) \ - (('a' <= (c) && (c) <= 'i') \ - || ('j' <= (c) && (c) <= 'r') \ - || ('s' <= (c) && (c) <= 'z')) -# define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c)) -#endif - -#define XOR(e, f) (((e) && !(f)) || (!(e) && (f))) -int -main () -{ - int i; - for (i = 0; i < 256; i++) - if (XOR (islower (i), ISLOWER (i)) - || toupper (i) != TOUPPER (i)) - return 2; - return 0; -} -_ACEOF -rm -f conftest$ac_exeext -if { (ac_try="$ac_link" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_link") 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { ac_try='./conftest$ac_exeext' - { (case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_try") 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - : -else - echo "$as_me: program exited with status $ac_status" >&5 -echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -( exit $ac_status ) -ac_cv_header_stdc=no -fi -rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext -fi - - -fi -fi -{ echo "$as_me:$LINENO: result: $ac_cv_header_stdc" >&5 -echo "${ECHO_T}$ac_cv_header_stdc" >&6; } -if test $ac_cv_header_stdc = yes; then - -cat >>confdefs.h <<\_ACEOF -#define STDC_HEADERS 1 -_ACEOF - -fi - -# On IRIX 5.3, sys/types and inttypes.h are conflicting. - - - - - - - - - -for ac_header in sys/types.h sys/stat.h stdlib.h string.h memory.h strings.h \ - inttypes.h stdint.h unistd.h -do -as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh` -{ echo "$as_me:$LINENO: checking for $ac_header" >&5 -echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6; } -if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default - -#include <$ac_header> -_ACEOF -rm -f conftest.$ac_objext -if { (ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then - eval "$as_ac_Header=yes" -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - eval "$as_ac_Header=no" -fi - -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -fi -ac_res=`eval echo '${'$as_ac_Header'}'` - { echo "$as_me:$LINENO: result: $ac_res" >&5 -echo "${ECHO_T}$ac_res" >&6; } -if test `eval echo '${'$as_ac_Header'}'` = yes; then - cat >>confdefs.h <<_ACEOF -#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1 -_ACEOF - -fi - -done - - - -for ac_header in dlfcn.h -do -as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh` -if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then - { echo "$as_me:$LINENO: checking for $ac_header" >&5 -echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6; } -if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -fi -ac_res=`eval echo '${'$as_ac_Header'}'` - { echo "$as_me:$LINENO: result: $ac_res" >&5 -echo "${ECHO_T}$ac_res" >&6; } -else - # Is the header compilable? -{ echo "$as_me:$LINENO: checking $ac_header usability" >&5 -echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6; } -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default -#include <$ac_header> -_ACEOF -rm -f conftest.$ac_objext -if { (ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then - ac_header_compiler=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_header_compiler=no -fi - -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -{ echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 -echo "${ECHO_T}$ac_header_compiler" >&6; } - -# Is the header present? -{ echo "$as_me:$LINENO: checking $ac_header presence" >&5 -echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6; } -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -#include <$ac_header> -_ACEOF -if { (ac_try="$ac_cpp conftest.$ac_ext" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } >/dev/null && { - test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || - test ! -s conftest.err - }; then - ac_header_preproc=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_header_preproc=no -fi - -rm -f conftest.err conftest.$ac_ext -{ echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 -echo "${ECHO_T}$ac_header_preproc" >&6; } - -# So? What about this header? -case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in - yes:no: ) - { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5 -echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5 -echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;} - ac_header_preproc=yes - ;; - no:yes:* ) - { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5 -echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: check for missing prerequisite headers?" >&5 -echo "$as_me: WARNING: $ac_header: check for missing prerequisite headers?" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5 -echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&5 -echo "$as_me: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5 -echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5 -echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;} - ( cat <<\_ASBOX -## ------------------------------------------- ## -## Report this to http://gcc.gnu.org/bugs.html ## -## ------------------------------------------- ## -_ASBOX - ) | sed "s/^/$as_me: WARNING: /" >&2 - ;; -esac -{ echo "$as_me:$LINENO: checking for $ac_header" >&5 -echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6; } -if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - eval "$as_ac_Header=\$ac_header_preproc" -fi -ac_res=`eval echo '${'$as_ac_Header'}'` - { echo "$as_me:$LINENO: result: $ac_res" >&5 -echo "${ECHO_T}$ac_res" >&6; } - -fi -if test `eval echo '${'$as_ac_Header'}'` = yes; then - cat >>confdefs.h <<_ACEOF -#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1 -_ACEOF - -fi - -done - -ac_ext=cpp -ac_cpp='$CXXCPP $CPPFLAGS' -ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_cxx_compiler_gnu -if test -z "$CXX"; then - if test -n "$CCC"; then - CXX=$CCC - else - if test -n "$ac_tool_prefix"; then - for ac_prog in g++ c++ gpp aCC CC cxx cc++ cl.exe FCC KCC RCC xlC_r xlC - do - # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. -set dummy $ac_tool_prefix$ac_prog; ac_word=$2 -{ echo "$as_me:$LINENO: checking for $ac_word" >&5 -echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } -if test "${ac_cv_prog_CXX+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - if test -n "$CXX"; then - ac_cv_prog_CXX="$CXX" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_CXX="$ac_tool_prefix$ac_prog" - echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done -done -IFS=$as_save_IFS - -fi -fi -CXX=$ac_cv_prog_CXX -if test -n "$CXX"; then - { echo "$as_me:$LINENO: result: $CXX" >&5 -echo "${ECHO_T}$CXX" >&6; } -else - { echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6; } -fi - - - test -n "$CXX" && break - done -fi -if test -z "$CXX"; then - ac_ct_CXX=$CXX - for ac_prog in g++ c++ gpp aCC CC cxx cc++ cl.exe FCC KCC RCC xlC_r xlC -do - # Extract the first word of "$ac_prog", so it can be a program name with args. -set dummy $ac_prog; ac_word=$2 -{ echo "$as_me:$LINENO: checking for $ac_word" >&5 -echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } -if test "${ac_cv_prog_ac_ct_CXX+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - if test -n "$ac_ct_CXX"; then - ac_cv_prog_ac_ct_CXX="$ac_ct_CXX" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_ac_ct_CXX="$ac_prog" - echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done -done -IFS=$as_save_IFS - -fi -fi -ac_ct_CXX=$ac_cv_prog_ac_ct_CXX -if test -n "$ac_ct_CXX"; then - { echo "$as_me:$LINENO: result: $ac_ct_CXX" >&5 -echo "${ECHO_T}$ac_ct_CXX" >&6; } -else - { echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6; } -fi - - - test -n "$ac_ct_CXX" && break -done - - if test "x$ac_ct_CXX" = x; then - CXX="g++" - else - case $cross_compiling:$ac_tool_warned in -yes:) -{ echo "$as_me:$LINENO: WARNING: In the future, Autoconf will not detect cross-tools -whose name does not start with the host triplet. If you think this -configuration is useful to you, please write to autoconf at gnu.org." >&5 -echo "$as_me: WARNING: In the future, Autoconf will not detect cross-tools -whose name does not start with the host triplet. If you think this -configuration is useful to you, please write to autoconf at gnu.org." >&2;} -ac_tool_warned=yes ;; -esac - CXX=$ac_ct_CXX - fi -fi - - fi -fi -# Provide some information about the compiler. -echo "$as_me:$LINENO: checking for C++ compiler version" >&5 -ac_compiler=`set X $ac_compile; echo $2` -{ (ac_try="$ac_compiler --version >&5" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_compiler --version >&5") 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } -{ (ac_try="$ac_compiler -v >&5" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_compiler -v >&5") 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } -{ (ac_try="$ac_compiler -V >&5" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_compiler -V >&5") 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } - -{ echo "$as_me:$LINENO: checking whether we are using the GNU C++ compiler" >&5 -echo $ECHO_N "checking whether we are using the GNU C++ compiler... $ECHO_C" >&6; } -if test "${ac_cv_cxx_compiler_gnu+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ - -int -main () -{ -#ifndef __GNUC__ - choke me -#endif - - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_cxx_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then - ac_compiler_gnu=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_compiler_gnu=no -fi - -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -ac_cv_cxx_compiler_gnu=$ac_compiler_gnu - -fi -{ echo "$as_me:$LINENO: result: $ac_cv_cxx_compiler_gnu" >&5 -echo "${ECHO_T}$ac_cv_cxx_compiler_gnu" >&6; } -GXX=`test $ac_compiler_gnu = yes && echo yes` -ac_test_CXXFLAGS=${CXXFLAGS+set} -ac_save_CXXFLAGS=$CXXFLAGS -{ echo "$as_me:$LINENO: checking whether $CXX accepts -g" >&5 -echo $ECHO_N "checking whether $CXX accepts -g... $ECHO_C" >&6; } -if test "${ac_cv_prog_cxx_g+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - ac_save_cxx_werror_flag=$ac_cxx_werror_flag - ac_cxx_werror_flag=yes - ac_cv_prog_cxx_g=no - CXXFLAGS="-g" - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ - -int -main () -{ - - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_cxx_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then - ac_cv_prog_cxx_g=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - CXXFLAGS="" - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ - -int -main () -{ - - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_cxx_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then - : -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_cxx_werror_flag=$ac_save_cxx_werror_flag - CXXFLAGS="-g" - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ - -int -main () -{ - - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_cxx_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then - ac_cv_prog_cxx_g=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - -fi - -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -fi - -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -fi - -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - ac_cxx_werror_flag=$ac_save_cxx_werror_flag -fi -{ echo "$as_me:$LINENO: result: $ac_cv_prog_cxx_g" >&5 -echo "${ECHO_T}$ac_cv_prog_cxx_g" >&6; } -if test "$ac_test_CXXFLAGS" = set; then - CXXFLAGS=$ac_save_CXXFLAGS -elif test $ac_cv_prog_cxx_g = yes; then - if test "$GXX" = yes; then - CXXFLAGS="-g -O2" - else - CXXFLAGS="-g" - fi -else - if test "$GXX" = yes; then - CXXFLAGS="-O2" - else - CXXFLAGS= - fi -fi -ac_ext=cpp -ac_cpp='$CXXCPP $CPPFLAGS' -ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_cxx_compiler_gnu - -depcc="$CXX" am_compiler_list= - -{ echo "$as_me:$LINENO: checking dependency style of $depcc" >&5 -echo $ECHO_N "checking dependency style of $depcc... $ECHO_C" >&6; } -if test "${am_cv_CXX_dependencies_compiler_type+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then - # We make a subdir and do the tests there. Otherwise we can end up - # making bogus files that we don't know about and never remove. For - # instance it was reported that on HP-UX the gcc test will end up - # making a dummy file named `D' -- because `-MD' means `put the output - # in D'. - mkdir conftest.dir - # Copy depcomp to subdir because otherwise we won't find it if we're - # using a relative directory. - cp "$am_depcomp" conftest.dir - cd conftest.dir - # We will build objects and dependencies in a subdirectory because - # it helps to detect inapplicable dependency modes. For instance - # both Tru64's cc and ICC support -MD to output dependencies as a - # side effect of compilation, but ICC will put the dependencies in - # the current directory while Tru64 will put them in the object - # directory. - mkdir sub - - am_cv_CXX_dependencies_compiler_type=none - if test "$am_compiler_list" = ""; then - am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp` - fi - for depmode in $am_compiler_list; do - # Setup a source with many dependencies, because some compilers - # like to wrap large dependency lists on column 80 (with \), and - # we should not choose a depcomp mode which is confused by this. - # - # We need to recreate these files for each test, as the compiler may - # overwrite some of them when testing with obscure command lines. - # This happens at least with the AIX C compiler. - : > sub/conftest.c - for i in 1 2 3 4 5 6; do - echo '#include "conftst'$i'.h"' >> sub/conftest.c - # Using `: > sub/conftst$i.h' creates only sub/conftst1.h with - # Solaris 8's {/usr,}/bin/sh. - touch sub/conftst$i.h - done - echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf - - case $depmode in - nosideeffect) - # after this tag, mechanisms are not by side-effect, so they'll - # only be used when explicitly requested - if test "x$enable_dependency_tracking" = xyes; then - continue - else - break - fi - ;; - none) break ;; - esac - # We check with `-c' and `-o' for the sake of the "dashmstdout" - # mode. It turns out that the SunPro C++ compiler does not properly - # handle `-M -o', and we need to detect this. - if depmode=$depmode \ - source=sub/conftest.c object=sub/conftest.${OBJEXT-o} \ - depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ - $SHELL ./depcomp $depcc -c -o sub/conftest.${OBJEXT-o} sub/conftest.c \ - >/dev/null 2>conftest.err && - grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 && - grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && - grep sub/conftest.${OBJEXT-o} sub/conftest.Po > /dev/null 2>&1 && - ${MAKE-make} -s -f confmf > /dev/null 2>&1; then - # icc doesn't choke on unknown options, it will just issue warnings - # or remarks (even with -Werror). So we grep stderr for any message - # that says an option was ignored or not supported. - # When given -MP, icc 7.0 and 7.1 complain thusly: - # icc: Command line warning: ignoring option '-M'; no argument required - # The diagnosis changed in icc 8.0: - # icc: Command line remark: option '-MP' not supported - if (grep 'ignoring option' conftest.err || - grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else - am_cv_CXX_dependencies_compiler_type=$depmode - break - fi - fi - done - - cd .. - rm -rf conftest.dir -else - am_cv_CXX_dependencies_compiler_type=none -fi - -fi -{ echo "$as_me:$LINENO: result: $am_cv_CXX_dependencies_compiler_type" >&5 -echo "${ECHO_T}$am_cv_CXX_dependencies_compiler_type" >&6; } -CXXDEPMODE=depmode=$am_cv_CXX_dependencies_compiler_type - - if - test "x$enable_dependency_tracking" != xno \ - && test "$am_cv_CXX_dependencies_compiler_type" = gcc3; then - am__fastdepCXX_TRUE= - am__fastdepCXX_FALSE='#' -else - am__fastdepCXX_TRUE='#' - am__fastdepCXX_FALSE= -fi - - - - -if test -n "$CXX" && ( test "X$CXX" != "Xno" && - ( (test "X$CXX" = "Xg++" && `g++ -v >/dev/null 2>&1` ) || - (test "X$CXX" != "Xg++"))) ; then - ac_ext=cpp -ac_cpp='$CXXCPP $CPPFLAGS' -ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_cxx_compiler_gnu -{ echo "$as_me:$LINENO: checking how to run the C++ preprocessor" >&5 -echo $ECHO_N "checking how to run the C++ preprocessor... $ECHO_C" >&6; } -if test -z "$CXXCPP"; then - if test "${ac_cv_prog_CXXCPP+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - # Double quotes because CXXCPP needs to be expanded - for CXXCPP in "$CXX -E" "/lib/cpp" - do - ac_preproc_ok=false -for ac_cxx_preproc_warn_flag in '' yes -do - # Use a header file that comes with gcc, so configuring glibc - # with a fresh cross-compiler works. - # Prefer to if __STDC__ is defined, since - # exists even on freestanding compilers. - # On the NeXT, cc -E runs the code through the compiler's parser, - # not just through cpp. "Syntax error" is here to catch this case. - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -#ifdef __STDC__ -# include -#else -# include -#endif - Syntax error -_ACEOF -if { (ac_try="$ac_cpp conftest.$ac_ext" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } >/dev/null && { - test -z "$ac_cxx_preproc_warn_flag$ac_cxx_werror_flag" || - test ! -s conftest.err - }; then - : -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - # Broken: fails on valid input. -continue -fi - -rm -f conftest.err conftest.$ac_ext - - # OK, works on sane cases. Now check whether nonexistent headers - # can be detected and how. - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -#include -_ACEOF -if { (ac_try="$ac_cpp conftest.$ac_ext" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } >/dev/null && { - test -z "$ac_cxx_preproc_warn_flag$ac_cxx_werror_flag" || - test ! -s conftest.err - }; then - # Broken: success on invalid input. -continue -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - # Passes both tests. -ac_preproc_ok=: -break -fi - -rm -f conftest.err conftest.$ac_ext - -done -# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. -rm -f conftest.err conftest.$ac_ext -if $ac_preproc_ok; then - break -fi - - done - ac_cv_prog_CXXCPP=$CXXCPP - -fi - CXXCPP=$ac_cv_prog_CXXCPP -else - ac_cv_prog_CXXCPP=$CXXCPP -fi -{ echo "$as_me:$LINENO: result: $CXXCPP" >&5 -echo "${ECHO_T}$CXXCPP" >&6; } -ac_preproc_ok=false -for ac_cxx_preproc_warn_flag in '' yes -do - # Use a header file that comes with gcc, so configuring glibc - # with a fresh cross-compiler works. - # Prefer to if __STDC__ is defined, since - # exists even on freestanding compilers. - # On the NeXT, cc -E runs the code through the compiler's parser, - # not just through cpp. "Syntax error" is here to catch this case. - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -#ifdef __STDC__ -# include -#else -# include -#endif - Syntax error -_ACEOF -if { (ac_try="$ac_cpp conftest.$ac_ext" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } >/dev/null && { - test -z "$ac_cxx_preproc_warn_flag$ac_cxx_werror_flag" || - test ! -s conftest.err - }; then - : -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - # Broken: fails on valid input. -continue -fi - -rm -f conftest.err conftest.$ac_ext - - # OK, works on sane cases. Now check whether nonexistent headers - # can be detected and how. - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -#include -_ACEOF -if { (ac_try="$ac_cpp conftest.$ac_ext" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } >/dev/null && { - test -z "$ac_cxx_preproc_warn_flag$ac_cxx_werror_flag" || - test ! -s conftest.err - }; then - # Broken: success on invalid input. -continue -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - # Passes both tests. -ac_preproc_ok=: -break -fi - -rm -f conftest.err conftest.$ac_ext - -done -# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. -rm -f conftest.err conftest.$ac_ext -if $ac_preproc_ok; then - : -else - { { echo "$as_me:$LINENO: error: C++ preprocessor \"$CXXCPP\" fails sanity check -See \`config.log' for more details." >&5 -echo "$as_me: error: C++ preprocessor \"$CXXCPP\" fails sanity check -See \`config.log' for more details." >&2;} - { (exit 1); exit 1; }; } -fi - -ac_ext=cpp -ac_cpp='$CXXCPP $CPPFLAGS' -ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_cxx_compiler_gnu - -fi - - -ac_ext=f -ac_compile='$F77 -c $FFLAGS conftest.$ac_ext >&5' -ac_link='$F77 -o conftest$ac_exeext $FFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_f77_compiler_gnu -if test -n "$ac_tool_prefix"; then - for ac_prog in g77 xlf f77 frt pgf77 cf77 fort77 fl32 af77 xlf90 f90 pgf90 pghpf epcf90 gfortran g95 xlf95 f95 fort ifort ifc efc pgf95 lf95 ftn - do - # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. -set dummy $ac_tool_prefix$ac_prog; ac_word=$2 -{ echo "$as_me:$LINENO: checking for $ac_word" >&5 -echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } -if test "${ac_cv_prog_F77+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - if test -n "$F77"; then - ac_cv_prog_F77="$F77" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_F77="$ac_tool_prefix$ac_prog" - echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done -done -IFS=$as_save_IFS - -fi -fi -F77=$ac_cv_prog_F77 -if test -n "$F77"; then - { echo "$as_me:$LINENO: result: $F77" >&5 -echo "${ECHO_T}$F77" >&6; } -else - { echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6; } -fi - - - test -n "$F77" && break - done -fi -if test -z "$F77"; then - ac_ct_F77=$F77 - for ac_prog in g77 xlf f77 frt pgf77 cf77 fort77 fl32 af77 xlf90 f90 pgf90 pghpf epcf90 gfortran g95 xlf95 f95 fort ifort ifc efc pgf95 lf95 ftn -do - # Extract the first word of "$ac_prog", so it can be a program name with args. -set dummy $ac_prog; ac_word=$2 -{ echo "$as_me:$LINENO: checking for $ac_word" >&5 -echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } -if test "${ac_cv_prog_ac_ct_F77+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - if test -n "$ac_ct_F77"; then - ac_cv_prog_ac_ct_F77="$ac_ct_F77" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_ac_ct_F77="$ac_prog" - echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done -done -IFS=$as_save_IFS - -fi -fi -ac_ct_F77=$ac_cv_prog_ac_ct_F77 -if test -n "$ac_ct_F77"; then - { echo "$as_me:$LINENO: result: $ac_ct_F77" >&5 -echo "${ECHO_T}$ac_ct_F77" >&6; } -else - { echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6; } -fi - - - test -n "$ac_ct_F77" && break -done - - if test "x$ac_ct_F77" = x; then - F77="" - else - case $cross_compiling:$ac_tool_warned in -yes:) -{ echo "$as_me:$LINENO: WARNING: In the future, Autoconf will not detect cross-tools -whose name does not start with the host triplet. If you think this -configuration is useful to you, please write to autoconf at gnu.org." >&5 -echo "$as_me: WARNING: In the future, Autoconf will not detect cross-tools -whose name does not start with the host triplet. If you think this -configuration is useful to you, please write to autoconf at gnu.org." >&2;} -ac_tool_warned=yes ;; -esac - F77=$ac_ct_F77 - fi -fi - - -# Provide some information about the compiler. -echo "$as_me:$LINENO: checking for Fortran 77 compiler version" >&5 -ac_compiler=`set X $ac_compile; echo $2` -{ (ac_try="$ac_compiler --version >&5" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_compiler --version >&5") 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } -{ (ac_try="$ac_compiler -v >&5" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_compiler -v >&5") 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } -{ (ac_try="$ac_compiler -V >&5" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_compiler -V >&5") 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } -rm -f a.out - -# If we don't use `.F' as extension, the preprocessor is not run on the -# input file. (Note that this only needs to work for GNU compilers.) -ac_save_ext=$ac_ext -ac_ext=F -{ echo "$as_me:$LINENO: checking whether we are using the GNU Fortran 77 compiler" >&5 -echo $ECHO_N "checking whether we are using the GNU Fortran 77 compiler... $ECHO_C" >&6; } -if test "${ac_cv_f77_compiler_gnu+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - cat >conftest.$ac_ext <<_ACEOF - program main -#ifndef __GNUC__ - choke me -#endif - - end -_ACEOF -rm -f conftest.$ac_objext -if { (ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_f77_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then - ac_compiler_gnu=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_compiler_gnu=no -fi - -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -ac_cv_f77_compiler_gnu=$ac_compiler_gnu - -fi -{ echo "$as_me:$LINENO: result: $ac_cv_f77_compiler_gnu" >&5 -echo "${ECHO_T}$ac_cv_f77_compiler_gnu" >&6; } -ac_ext=$ac_save_ext -ac_test_FFLAGS=${FFLAGS+set} -ac_save_FFLAGS=$FFLAGS -FFLAGS= -{ echo "$as_me:$LINENO: checking whether $F77 accepts -g" >&5 -echo $ECHO_N "checking whether $F77 accepts -g... $ECHO_C" >&6; } -if test "${ac_cv_prog_f77_g+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - FFLAGS=-g -cat >conftest.$ac_ext <<_ACEOF - program main - - end -_ACEOF -rm -f conftest.$ac_objext -if { (ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_f77_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then - ac_cv_prog_f77_g=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_cv_prog_f77_g=no -fi - -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - -fi -{ echo "$as_me:$LINENO: result: $ac_cv_prog_f77_g" >&5 -echo "${ECHO_T}$ac_cv_prog_f77_g" >&6; } -if test "$ac_test_FFLAGS" = set; then - FFLAGS=$ac_save_FFLAGS -elif test $ac_cv_prog_f77_g = yes; then - if test "x$ac_cv_f77_compiler_gnu" = xyes; then - FFLAGS="-g -O2" - else - FFLAGS="-g" - fi -else - if test "x$ac_cv_f77_compiler_gnu" = xyes; then - FFLAGS="-O2" - else - FFLAGS= - fi -fi - -G77=`test $ac_compiler_gnu = yes && echo yes` -ac_ext=c -ac_cpp='$CPP $CPPFLAGS' -ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_c_compiler_gnu - - - -# Autoconf 2.13's AC_OBJEXT and AC_EXEEXT macros only works for C compilers! - -# find the maximum length of command line arguments -{ echo "$as_me:$LINENO: checking the maximum length of command line arguments" >&5 -echo $ECHO_N "checking the maximum length of command line arguments... $ECHO_C" >&6; } -if test "${lt_cv_sys_max_cmd_len+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - i=0 - teststring="ABCD" - - case $build_os in - msdosdjgpp*) - # On DJGPP, this test can blow up pretty badly due to problems in libc - # (any single argument exceeding 2000 bytes causes a buffer overrun - # during glob expansion). Even if it were fixed, the result of this - # check would be larger than it should be. - lt_cv_sys_max_cmd_len=12288; # 12K is about right - ;; - - gnu*) - # Under GNU Hurd, this test is not required because there is - # no limit to the length of command line arguments. - # Libtool will interpret -1 as no limit whatsoever - lt_cv_sys_max_cmd_len=-1; - ;; - - cygwin* | mingw*) - # On Win9x/ME, this test blows up -- it succeeds, but takes - # about 5 minutes as the teststring grows exponentially. - # Worse, since 9x/ME are not pre-emptively multitasking, - # you end up with a "frozen" computer, even though with patience - # the test eventually succeeds (with a max line length of 256k). - # Instead, let's just punt: use the minimum linelength reported by - # all of the supported platforms: 8192 (on NT/2K/XP). - lt_cv_sys_max_cmd_len=8192; - ;; - - amigaos*) - # On AmigaOS with pdksh, this test takes hours, literally. - # So we just punt and use a minimum line length of 8192. - lt_cv_sys_max_cmd_len=8192; - ;; - - netbsd* | freebsd* | openbsd* | darwin* | dragonfly*) - # This has been around since 386BSD, at least. Likely further. - if test -x /sbin/sysctl; then - lt_cv_sys_max_cmd_len=`/sbin/sysctl -n kern.argmax` - elif test -x /usr/sbin/sysctl; then - lt_cv_sys_max_cmd_len=`/usr/sbin/sysctl -n kern.argmax` - else - lt_cv_sys_max_cmd_len=65536 # usable default for all BSDs - fi - # And add a safety zone - lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4` - lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3` - ;; - - interix*) - # We know the value 262144 and hardcode it with a safety zone (like BSD) - lt_cv_sys_max_cmd_len=196608 - ;; - - osf*) - # Dr. Hans Ekkehard Plesser reports seeing a kernel panic running configure - # due to this test when exec_disable_arg_limit is 1 on Tru64. It is not - # nice to cause kernel panics so lets avoid the loop below. - # First set a reasonable default. - lt_cv_sys_max_cmd_len=16384 - # - if test -x /sbin/sysconfig; then - case `/sbin/sysconfig -q proc exec_disable_arg_limit` in - *1*) lt_cv_sys_max_cmd_len=-1 ;; - esac - fi - ;; - sco3.2v5*) - lt_cv_sys_max_cmd_len=102400 - ;; - sysv5* | sco5v6* | sysv4.2uw2*) - kargmax=`grep ARG_MAX /etc/conf/cf.d/stune 2>/dev/null` - if test -n "$kargmax"; then - lt_cv_sys_max_cmd_len=`echo $kargmax | sed 's/.*[ ]//'` - else - lt_cv_sys_max_cmd_len=32768 - fi - ;; - *) - lt_cv_sys_max_cmd_len=`(getconf ARG_MAX) 2> /dev/null` - if test -n "$lt_cv_sys_max_cmd_len"; then - lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4` - lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3` - else - SHELL=${SHELL-${CONFIG_SHELL-/bin/sh}} - while (test "X"`$SHELL $0 --fallback-echo "X$teststring" 2>/dev/null` \ - = "XX$teststring") >/dev/null 2>&1 && - new_result=`expr "X$teststring" : ".*" 2>&1` && - lt_cv_sys_max_cmd_len=$new_result && - test $i != 17 # 1/2 MB should be enough - do - i=`expr $i + 1` - teststring=$teststring$teststring - done - teststring= - # Add a significant safety factor because C++ compilers can tack on massive - # amounts of additional arguments before passing them to the linker. - # It appears as though 1/2 is a usable value. - lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 2` - fi - ;; - esac - -fi - -if test -n $lt_cv_sys_max_cmd_len ; then - { echo "$as_me:$LINENO: result: $lt_cv_sys_max_cmd_len" >&5 -echo "${ECHO_T}$lt_cv_sys_max_cmd_len" >&6; } -else - { echo "$as_me:$LINENO: result: none" >&5 -echo "${ECHO_T}none" >&6; } -fi - - - - - -# Check for command to grab the raw symbol name followed by C symbol from nm. -{ echo "$as_me:$LINENO: checking command to parse $NM output from $compiler object" >&5 -echo $ECHO_N "checking command to parse $NM output from $compiler object... $ECHO_C" >&6; } -if test "${lt_cv_sys_global_symbol_pipe+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - -# These are sane defaults that work on at least a few old systems. -# [They come from Ultrix. What could be older than Ultrix?!! ;)] - -# Character class describing NM global symbol codes. -symcode='[BCDEGRST]' - -# Regexp to match symbols that can be accessed directly from C. -sympat='\([_A-Za-z][_A-Za-z0-9]*\)' - -# Transform an extracted symbol line into a proper C declaration -lt_cv_sys_global_symbol_to_cdecl="sed -n -e 's/^. .* \(.*\)$/extern int \1;/p'" - -# Transform an extracted symbol line into symbol name and symbol address -lt_cv_sys_global_symbol_to_c_name_address="sed -n -e 's/^: \([^ ]*\) $/ {\\\"\1\\\", (lt_ptr) 0},/p' -e 's/^$symcode \([^ ]*\) \([^ ]*\)$/ {\"\2\", (lt_ptr) \&\2},/p'" - -# Define system-specific variables. -case $host_os in -aix*) - symcode='[BCDT]' - ;; -cygwin* | mingw* | pw32*) - symcode='[ABCDGISTW]' - ;; -hpux*) # Its linker distinguishes data from code symbols - if test "$host_cpu" = ia64; then - symcode='[ABCDEGRST]' - fi - lt_cv_sys_global_symbol_to_cdecl="sed -n -e 's/^T .* \(.*\)$/extern int \1();/p' -e 's/^$symcode* .* \(.*\)$/extern char \1;/p'" - lt_cv_sys_global_symbol_to_c_name_address="sed -n -e 's/^: \([^ ]*\) $/ {\\\"\1\\\", (lt_ptr) 0},/p' -e 's/^$symcode* \([^ ]*\) \([^ ]*\)$/ {\"\2\", (lt_ptr) \&\2},/p'" - ;; -linux* | k*bsd*-gnu) - if test "$host_cpu" = ia64; then - symcode='[ABCDGIRSTW]' - lt_cv_sys_global_symbol_to_cdecl="sed -n -e 's/^T .* \(.*\)$/extern int \1();/p' -e 's/^$symcode* .* \(.*\)$/extern char \1;/p'" - lt_cv_sys_global_symbol_to_c_name_address="sed -n -e 's/^: \([^ ]*\) $/ {\\\"\1\\\", (lt_ptr) 0},/p' -e 's/^$symcode* \([^ ]*\) \([^ ]*\)$/ {\"\2\", (lt_ptr) \&\2},/p'" - fi - ;; -irix* | nonstopux*) - symcode='[BCDEGRST]' - ;; -osf*) - symcode='[BCDEGQRST]' - ;; -solaris*) - symcode='[BDRT]' - ;; -sco3.2v5*) - symcode='[DT]' - ;; -sysv4.2uw2*) - symcode='[DT]' - ;; -sysv5* | sco5v6* | unixware* | OpenUNIX*) - symcode='[ABDT]' - ;; -sysv4) - symcode='[DFNSTU]' - ;; -esac - -# Handle CRLF in mingw tool chain -opt_cr= -case $build_os in -mingw*) - opt_cr=`echo 'x\{0,1\}' | tr x '\015'` # option cr in regexp - ;; -esac - -# If we're using GNU nm, then use its standard symbol codes. -case `$NM -V 2>&1` in -*GNU* | *'with BFD'*) - symcode='[ABCDGIRSTW]' ;; -esac - -# Try without a prefix undercore, then with it. -for ac_symprfx in "" "_"; do - - # Transform symcode, sympat, and symprfx into a raw symbol and a C symbol. - symxfrm="\\1 $ac_symprfx\\2 \\2" - - # Write the raw and C identifiers. - lt_cv_sys_global_symbol_pipe="sed -n -e 's/^.*[ ]\($symcode$symcode*\)[ ][ ]*$ac_symprfx$sympat$opt_cr$/$symxfrm/p'" - - # Check to see that the pipe works correctly. - pipe_works=no - - rm -f conftest* - cat > conftest.$ac_ext <&5 - (eval $ac_compile) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; then - # Now try to grab the symbols. - nlist=conftest.nm - if { (eval echo "$as_me:$LINENO: \"$NM conftest.$ac_objext \| $lt_cv_sys_global_symbol_pipe \> $nlist\"") >&5 - (eval $NM conftest.$ac_objext \| $lt_cv_sys_global_symbol_pipe \> $nlist) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && test -s "$nlist"; then - # Try sorting and uniquifying the output. - if sort "$nlist" | uniq > "$nlist"T; then - mv -f "$nlist"T "$nlist" - else - rm -f "$nlist"T - fi - - # Make sure that we snagged all the symbols we need. - if grep ' nm_test_var$' "$nlist" >/dev/null; then - if grep ' nm_test_func$' "$nlist" >/dev/null; then - cat < conftest.$ac_ext -#ifdef __cplusplus -extern "C" { -#endif - -EOF - # Now generate the symbol file. - eval "$lt_cv_sys_global_symbol_to_cdecl"' < "$nlist" | grep -v main >> conftest.$ac_ext' - - cat <> conftest.$ac_ext -#if defined (__STDC__) && __STDC__ -# define lt_ptr_t void * -#else -# define lt_ptr_t char * -# define const -#endif - -/* The mapping between symbol names and symbols. */ -const struct { - const char *name; - lt_ptr_t address; -} -lt_preloaded_symbols[] = -{ -EOF - $SED "s/^$symcode$symcode* \(.*\) \(.*\)$/ {\"\2\", (lt_ptr_t) \&\2},/" < "$nlist" | grep -v main >> conftest.$ac_ext - cat <<\EOF >> conftest.$ac_ext - {0, (lt_ptr_t) 0} -}; - -#ifdef __cplusplus -} -#endif -EOF - # Now try linking the two files. - mv conftest.$ac_objext conftstm.$ac_objext - lt_save_LIBS="$LIBS" - lt_save_CFLAGS="$CFLAGS" - LIBS="conftstm.$ac_objext" - CFLAGS="$CFLAGS$lt_prog_compiler_no_builtin_flag" - if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 - (eval $ac_link) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && test -s conftest${ac_exeext}; then - pipe_works=yes - fi - LIBS="$lt_save_LIBS" - CFLAGS="$lt_save_CFLAGS" - else - echo "cannot find nm_test_func in $nlist" >&5 - fi - else - echo "cannot find nm_test_var in $nlist" >&5 - fi - else - echo "cannot run $lt_cv_sys_global_symbol_pipe" >&5 - fi - else - echo "$progname: failed program was:" >&5 - cat conftest.$ac_ext >&5 - fi - rm -f conftest* conftst* - - # Do not use the global_symbol_pipe unless it works. - if test "$pipe_works" = yes; then - break - else - lt_cv_sys_global_symbol_pipe= - fi -done - -fi - -if test -z "$lt_cv_sys_global_symbol_pipe"; then - lt_cv_sys_global_symbol_to_cdecl= -fi -if test -z "$lt_cv_sys_global_symbol_pipe$lt_cv_sys_global_symbol_to_cdecl"; then - { echo "$as_me:$LINENO: result: failed" >&5 -echo "${ECHO_T}failed" >&6; } -else - { echo "$as_me:$LINENO: result: ok" >&5 -echo "${ECHO_T}ok" >&6; } -fi - -{ echo "$as_me:$LINENO: checking for objdir" >&5 -echo $ECHO_N "checking for objdir... $ECHO_C" >&6; } -if test "${lt_cv_objdir+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - rm -f .libs 2>/dev/null -mkdir .libs 2>/dev/null -if test -d .libs; then - lt_cv_objdir=.libs -else - # MS-DOS does not allow filenames that begin with a dot. - lt_cv_objdir=_libs -fi -rmdir .libs 2>/dev/null -fi -{ echo "$as_me:$LINENO: result: $lt_cv_objdir" >&5 -echo "${ECHO_T}$lt_cv_objdir" >&6; } -objdir=$lt_cv_objdir - - - - - -case $host_os in -aix3*) - # AIX sometimes has problems with the GCC collect2 program. For some - # reason, if we set the COLLECT_NAMES environment variable, the problems - # vanish in a puff of smoke. - if test "X${COLLECT_NAMES+set}" != Xset; then - COLLECT_NAMES= - export COLLECT_NAMES - fi - ;; -esac - -# Sed substitution that helps us do robust quoting. It backslashifies -# metacharacters that are still active within double-quoted strings. -Xsed='sed -e 1s/^X//' -sed_quote_subst='s/\([\\"\\`$\\\\]\)/\\\1/g' - -# Same as above, but do not quote variable references. -double_quote_subst='s/\([\\"\\`\\\\]\)/\\\1/g' - -# Sed substitution to delay expansion of an escaped shell variable in a -# double_quote_subst'ed string. -delay_variable_subst='s/\\\\\\\\\\\$/\\\\\\$/g' - -# Sed substitution to avoid accidental globbing in evaled expressions -no_glob_subst='s/\*/\\\*/g' - -# Constants: -rm="rm -f" - -# Global variables: -default_ofile=libtool -can_build_shared=yes - -# All known linkers require a `.a' archive for static linking (except MSVC, -# which needs '.lib'). -libext=a -ltmain="$ac_aux_dir/ltmain.sh" -ofile="$default_ofile" -with_gnu_ld="$lt_cv_prog_gnu_ld" - -if test -n "$ac_tool_prefix"; then - # Extract the first word of "${ac_tool_prefix}ar", so it can be a program name with args. -set dummy ${ac_tool_prefix}ar; ac_word=$2 -{ echo "$as_me:$LINENO: checking for $ac_word" >&5 -echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } -if test "${ac_cv_prog_AR+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - if test -n "$AR"; then - ac_cv_prog_AR="$AR" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_AR="${ac_tool_prefix}ar" - echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done -done -IFS=$as_save_IFS - -fi -fi -AR=$ac_cv_prog_AR -if test -n "$AR"; then - { echo "$as_me:$LINENO: result: $AR" >&5 -echo "${ECHO_T}$AR" >&6; } -else - { echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6; } -fi - - -fi -if test -z "$ac_cv_prog_AR"; then - ac_ct_AR=$AR - # Extract the first word of "ar", so it can be a program name with args. -set dummy ar; ac_word=$2 -{ echo "$as_me:$LINENO: checking for $ac_word" >&5 -echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } -if test "${ac_cv_prog_ac_ct_AR+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - if test -n "$ac_ct_AR"; then - ac_cv_prog_ac_ct_AR="$ac_ct_AR" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_ac_ct_AR="ar" - echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done -done -IFS=$as_save_IFS - -fi -fi -ac_ct_AR=$ac_cv_prog_ac_ct_AR -if test -n "$ac_ct_AR"; then - { echo "$as_me:$LINENO: result: $ac_ct_AR" >&5 -echo "${ECHO_T}$ac_ct_AR" >&6; } -else - { echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6; } -fi - - if test "x$ac_ct_AR" = x; then - AR="false" - else - case $cross_compiling:$ac_tool_warned in -yes:) -{ echo "$as_me:$LINENO: WARNING: In the future, Autoconf will not detect cross-tools -whose name does not start with the host triplet. If you think this -configuration is useful to you, please write to autoconf at gnu.org." >&5 -echo "$as_me: WARNING: In the future, Autoconf will not detect cross-tools -whose name does not start with the host triplet. If you think this -configuration is useful to you, please write to autoconf at gnu.org." >&2;} -ac_tool_warned=yes ;; -esac - AR=$ac_ct_AR - fi -else - AR="$ac_cv_prog_AR" -fi - -if test -n "$ac_tool_prefix"; then - # Extract the first word of "${ac_tool_prefix}ranlib", so it can be a program name with args. -set dummy ${ac_tool_prefix}ranlib; ac_word=$2 -{ echo "$as_me:$LINENO: checking for $ac_word" >&5 -echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } -if test "${ac_cv_prog_RANLIB+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - if test -n "$RANLIB"; then - ac_cv_prog_RANLIB="$RANLIB" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_RANLIB="${ac_tool_prefix}ranlib" - echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done -done -IFS=$as_save_IFS - -fi -fi -RANLIB=$ac_cv_prog_RANLIB -if test -n "$RANLIB"; then - { echo "$as_me:$LINENO: result: $RANLIB" >&5 -echo "${ECHO_T}$RANLIB" >&6; } -else - { echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6; } -fi - - -fi -if test -z "$ac_cv_prog_RANLIB"; then - ac_ct_RANLIB=$RANLIB - # Extract the first word of "ranlib", so it can be a program name with args. -set dummy ranlib; ac_word=$2 -{ echo "$as_me:$LINENO: checking for $ac_word" >&5 -echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } -if test "${ac_cv_prog_ac_ct_RANLIB+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - if test -n "$ac_ct_RANLIB"; then - ac_cv_prog_ac_ct_RANLIB="$ac_ct_RANLIB" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_ac_ct_RANLIB="ranlib" - echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done -done -IFS=$as_save_IFS - -fi -fi -ac_ct_RANLIB=$ac_cv_prog_ac_ct_RANLIB -if test -n "$ac_ct_RANLIB"; then - { echo "$as_me:$LINENO: result: $ac_ct_RANLIB" >&5 -echo "${ECHO_T}$ac_ct_RANLIB" >&6; } -else - { echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6; } -fi - - if test "x$ac_ct_RANLIB" = x; then - RANLIB=":" - else - case $cross_compiling:$ac_tool_warned in -yes:) -{ echo "$as_me:$LINENO: WARNING: In the future, Autoconf will not detect cross-tools -whose name does not start with the host triplet. If you think this -configuration is useful to you, please write to autoconf at gnu.org." >&5 -echo "$as_me: WARNING: In the future, Autoconf will not detect cross-tools -whose name does not start with the host triplet. If you think this -configuration is useful to you, please write to autoconf at gnu.org." >&2;} -ac_tool_warned=yes ;; -esac - RANLIB=$ac_ct_RANLIB - fi -else - RANLIB="$ac_cv_prog_RANLIB" -fi - -if test -n "$ac_tool_prefix"; then - # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args. -set dummy ${ac_tool_prefix}strip; ac_word=$2 -{ echo "$as_me:$LINENO: checking for $ac_word" >&5 -echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } -if test "${ac_cv_prog_STRIP+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - if test -n "$STRIP"; then - ac_cv_prog_STRIP="$STRIP" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_STRIP="${ac_tool_prefix}strip" - echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done -done -IFS=$as_save_IFS - -fi -fi -STRIP=$ac_cv_prog_STRIP -if test -n "$STRIP"; then - { echo "$as_me:$LINENO: result: $STRIP" >&5 -echo "${ECHO_T}$STRIP" >&6; } -else - { echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6; } -fi - - -fi -if test -z "$ac_cv_prog_STRIP"; then - ac_ct_STRIP=$STRIP - # Extract the first word of "strip", so it can be a program name with args. -set dummy strip; ac_word=$2 -{ echo "$as_me:$LINENO: checking for $ac_word" >&5 -echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } -if test "${ac_cv_prog_ac_ct_STRIP+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - if test -n "$ac_ct_STRIP"; then - ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_ac_ct_STRIP="strip" - echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done -done -IFS=$as_save_IFS - -fi -fi -ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP -if test -n "$ac_ct_STRIP"; then - { echo "$as_me:$LINENO: result: $ac_ct_STRIP" >&5 -echo "${ECHO_T}$ac_ct_STRIP" >&6; } -else - { echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6; } -fi - - if test "x$ac_ct_STRIP" = x; then - STRIP=":" - else - case $cross_compiling:$ac_tool_warned in -yes:) -{ echo "$as_me:$LINENO: WARNING: In the future, Autoconf will not detect cross-tools -whose name does not start with the host triplet. If you think this -configuration is useful to you, please write to autoconf at gnu.org." >&5 -echo "$as_me: WARNING: In the future, Autoconf will not detect cross-tools -whose name does not start with the host triplet. If you think this -configuration is useful to you, please write to autoconf at gnu.org." >&2;} -ac_tool_warned=yes ;; -esac - STRIP=$ac_ct_STRIP - fi -else - STRIP="$ac_cv_prog_STRIP" -fi - - -old_CC="$CC" -old_CFLAGS="$CFLAGS" - -# Set sane defaults for various variables -test -z "$AR" && AR=ar -test -z "$AR_FLAGS" && AR_FLAGS=cru -test -z "$AS" && AS=as -test -z "$CC" && CC=cc -test -z "$LTCC" && LTCC=$CC -test -z "$LTCFLAGS" && LTCFLAGS=$CFLAGS -test -z "$DLLTOOL" && DLLTOOL=dlltool -test -z "$LD" && LD=ld -test -z "$LN_S" && LN_S="ln -s" -test -z "$MAGIC_CMD" && MAGIC_CMD=file -test -z "$NM" && NM=nm -test -z "$SED" && SED=sed -test -z "$OBJDUMP" && OBJDUMP=objdump -test -z "$RANLIB" && RANLIB=: -test -z "$STRIP" && STRIP=: -test -z "$ac_objext" && ac_objext=o - -# Determine commands to create old-style static archives. -old_archive_cmds='$AR $AR_FLAGS $oldlib$oldobjs' -old_postinstall_cmds='chmod 644 $oldlib' -old_postuninstall_cmds= - -if test -n "$RANLIB"; then - case $host_os in - openbsd*) - old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB -t \$oldlib" - ;; - *) - old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB \$oldlib" - ;; - esac - old_archive_cmds="$old_archive_cmds~\$RANLIB \$oldlib" -fi - -for cc_temp in $compiler""; do - case $cc_temp in - compile | *[\\/]compile | ccache | *[\\/]ccache ) ;; - distcc | *[\\/]distcc | purify | *[\\/]purify ) ;; - \-*) ;; - *) break;; - esac -done -cc_basename=`$echo "X$cc_temp" | $Xsed -e 's%.*/%%' -e "s%^$host_alias-%%"` - - -# Only perform the check for file, if the check method requires it -case $deplibs_check_method in -file_magic*) - if test "$file_magic_cmd" = '$MAGIC_CMD'; then - { echo "$as_me:$LINENO: checking for ${ac_tool_prefix}file" >&5 -echo $ECHO_N "checking for ${ac_tool_prefix}file... $ECHO_C" >&6; } -if test "${lt_cv_path_MAGIC_CMD+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - case $MAGIC_CMD in -[\\/*] | ?:[\\/]*) - lt_cv_path_MAGIC_CMD="$MAGIC_CMD" # Let the user override the test with a path. - ;; -*) - lt_save_MAGIC_CMD="$MAGIC_CMD" - lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR - ac_dummy="/usr/bin$PATH_SEPARATOR$PATH" - for ac_dir in $ac_dummy; do - IFS="$lt_save_ifs" - test -z "$ac_dir" && ac_dir=. - if test -f $ac_dir/${ac_tool_prefix}file; then - lt_cv_path_MAGIC_CMD="$ac_dir/${ac_tool_prefix}file" - if test -n "$file_magic_test_file"; then - case $deplibs_check_method in - "file_magic "*) - file_magic_regex=`expr "$deplibs_check_method" : "file_magic \(.*\)"` - MAGIC_CMD="$lt_cv_path_MAGIC_CMD" - if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null | - $EGREP "$file_magic_regex" > /dev/null; then - : - else - cat <&2 - -*** Warning: the command libtool uses to detect shared libraries, -*** $file_magic_cmd, produces output that libtool cannot recognize. -*** The result is that libtool may fail to recognize shared libraries -*** as such. This will affect the creation of libtool libraries that -*** depend on shared libraries, but programs linked with such libtool -*** libraries will work regardless of this problem. Nevertheless, you -*** may want to report the problem to your system manager and/or to -*** bug-libtool at gnu.org - -EOF - fi ;; - esac - fi - break - fi - done - IFS="$lt_save_ifs" - MAGIC_CMD="$lt_save_MAGIC_CMD" - ;; -esac -fi - -MAGIC_CMD="$lt_cv_path_MAGIC_CMD" -if test -n "$MAGIC_CMD"; then - { echo "$as_me:$LINENO: result: $MAGIC_CMD" >&5 -echo "${ECHO_T}$MAGIC_CMD" >&6; } -else - { echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6; } -fi - -if test -z "$lt_cv_path_MAGIC_CMD"; then - if test -n "$ac_tool_prefix"; then - { echo "$as_me:$LINENO: checking for file" >&5 -echo $ECHO_N "checking for file... $ECHO_C" >&6; } -if test "${lt_cv_path_MAGIC_CMD+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - case $MAGIC_CMD in -[\\/*] | ?:[\\/]*) - lt_cv_path_MAGIC_CMD="$MAGIC_CMD" # Let the user override the test with a path. - ;; -*) - lt_save_MAGIC_CMD="$MAGIC_CMD" - lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR - ac_dummy="/usr/bin$PATH_SEPARATOR$PATH" - for ac_dir in $ac_dummy; do - IFS="$lt_save_ifs" - test -z "$ac_dir" && ac_dir=. - if test -f $ac_dir/file; then - lt_cv_path_MAGIC_CMD="$ac_dir/file" - if test -n "$file_magic_test_file"; then - case $deplibs_check_method in - "file_magic "*) - file_magic_regex=`expr "$deplibs_check_method" : "file_magic \(.*\)"` - MAGIC_CMD="$lt_cv_path_MAGIC_CMD" - if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null | - $EGREP "$file_magic_regex" > /dev/null; then - : - else - cat <&2 - -*** Warning: the command libtool uses to detect shared libraries, -*** $file_magic_cmd, produces output that libtool cannot recognize. -*** The result is that libtool may fail to recognize shared libraries -*** as such. This will affect the creation of libtool libraries that -*** depend on shared libraries, but programs linked with such libtool -*** libraries will work regardless of this problem. Nevertheless, you -*** may want to report the problem to your system manager and/or to -*** bug-libtool at gnu.org - -EOF - fi ;; - esac - fi - break - fi - done - IFS="$lt_save_ifs" - MAGIC_CMD="$lt_save_MAGIC_CMD" - ;; -esac -fi - -MAGIC_CMD="$lt_cv_path_MAGIC_CMD" -if test -n "$MAGIC_CMD"; then - { echo "$as_me:$LINENO: result: $MAGIC_CMD" >&5 -echo "${ECHO_T}$MAGIC_CMD" >&6; } -else - { echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6; } -fi - - else - MAGIC_CMD=: - fi -fi - - fi - ;; -esac - -enable_dlopen=no -enable_win32_dll=no - -# Check whether --enable-libtool-lock was given. -if test "${enable_libtool_lock+set}" = set; then - enableval=$enable_libtool_lock; -fi - -test "x$enable_libtool_lock" != xno && enable_libtool_lock=yes - - -# Check whether --with-pic was given. -if test "${with_pic+set}" = set; then - withval=$with_pic; pic_mode="$withval" -else - pic_mode=default -fi - -test -z "$pic_mode" && pic_mode=default - -# Use C for the default configuration in the libtool script -tagname= -lt_save_CC="$CC" -ac_ext=c -ac_cpp='$CPP $CPPFLAGS' -ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_c_compiler_gnu - - -# Source file extension for C test sources. -ac_ext=c - -# Object file extension for compiled C test sources. -objext=o -objext=$objext - -# Code to be used in simple compile tests -lt_simple_compile_test_code="int some_variable = 0;" - -# Code to be used in simple link tests -lt_simple_link_test_code='int main(){return(0);}' - - -# If no C compiler was specified, use CC. -LTCC=${LTCC-"$CC"} - -# If no C compiler flags were specified, use CFLAGS. -LTCFLAGS=${LTCFLAGS-"$CFLAGS"} - -# Allow CC to be a program name with arguments. -compiler=$CC - - -# save warnings/boilerplate of simple test code -ac_outfile=conftest.$ac_objext -echo "$lt_simple_compile_test_code" >conftest.$ac_ext -eval "$ac_compile" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err -_lt_compiler_boilerplate=`cat conftest.err` -$rm conftest* - -ac_outfile=conftest.$ac_objext -echo "$lt_simple_link_test_code" >conftest.$ac_ext -eval "$ac_link" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err -_lt_linker_boilerplate=`cat conftest.err` -$rm conftest* - - - -lt_prog_compiler_no_builtin_flag= - -if test "$GCC" = yes; then - lt_prog_compiler_no_builtin_flag=' -fno-builtin' - - -{ echo "$as_me:$LINENO: checking if $compiler supports -fno-rtti -fno-exceptions" >&5 -echo $ECHO_N "checking if $compiler supports -fno-rtti -fno-exceptions... $ECHO_C" >&6; } -if test "${lt_cv_prog_compiler_rtti_exceptions+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - lt_cv_prog_compiler_rtti_exceptions=no - ac_outfile=conftest.$ac_objext - echo "$lt_simple_compile_test_code" > conftest.$ac_ext - lt_compiler_flag="-fno-rtti -fno-exceptions" - # Insert the option either (1) after the last *FLAGS variable, or - # (2) before a word containing "conftest.", or (3) at the end. - # Note that $ac_compile itself does not contain backslashes and begins - # with a dollar sign (not a hyphen), so the echo should work correctly. - # The option is referenced via a variable to avoid confusing sed. - lt_compile=`echo "$ac_compile" | $SED \ - -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ - -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ - -e 's:$: $lt_compiler_flag:'` - (eval echo "\"\$as_me:7436: $lt_compile\"" >&5) - (eval "$lt_compile" 2>conftest.err) - ac_status=$? - cat conftest.err >&5 - echo "$as_me:7440: \$? = $ac_status" >&5 - if (exit $ac_status) && test -s "$ac_outfile"; then - # The compiler can only warn and ignore the option if not recognized - # So say no if there are warnings other than the usual output. - $echo "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' >conftest.exp - $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 - if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then - lt_cv_prog_compiler_rtti_exceptions=yes - fi - fi - $rm conftest* - -fi -{ echo "$as_me:$LINENO: result: $lt_cv_prog_compiler_rtti_exceptions" >&5 -echo "${ECHO_T}$lt_cv_prog_compiler_rtti_exceptions" >&6; } - -if test x"$lt_cv_prog_compiler_rtti_exceptions" = xyes; then - lt_prog_compiler_no_builtin_flag="$lt_prog_compiler_no_builtin_flag -fno-rtti -fno-exceptions" -else - : -fi - -fi - -lt_prog_compiler_wl= -lt_prog_compiler_pic= -lt_prog_compiler_static= - -{ echo "$as_me:$LINENO: checking for $compiler option to produce PIC" >&5 -echo $ECHO_N "checking for $compiler option to produce PIC... $ECHO_C" >&6; } - - if test "$GCC" = yes; then - lt_prog_compiler_wl='-Wl,' - lt_prog_compiler_static='-static' - - case $host_os in - aix*) - # All AIX code is PIC. - if test "$host_cpu" = ia64; then - # AIX 5 now supports IA64 processor - lt_prog_compiler_static='-Bstatic' - fi - ;; - - amigaos*) - # FIXME: we need at least 68020 code to build shared libraries, but - # adding the `-m68020' flag to GCC prevents building anything better, - # like `-m68040'. - lt_prog_compiler_pic='-m68020 -resident32 -malways-restore-a4' - ;; - - beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) - # PIC is the default for these OSes. - ;; - - mingw* | cygwin* | pw32* | os2*) - # This hack is so that the source file can tell whether it is being - # built for inclusion in a dll (and should export symbols for example). - # Although the cygwin gcc ignores -fPIC, still need this for old-style - # (--disable-auto-import) libraries - lt_prog_compiler_pic='-DDLL_EXPORT' - ;; - - darwin* | rhapsody*) - # PIC is the default on this platform - # Common symbols not allowed in MH_DYLIB files - lt_prog_compiler_pic='-fno-common' - ;; - - interix[3-9]*) - # Interix 3.x gcc -fpic/-fPIC options generate broken code. - # Instead, we relocate shared libraries at runtime. - ;; - - msdosdjgpp*) - # Just because we use GCC doesn't mean we suddenly get shared libraries - # on systems that don't support them. - lt_prog_compiler_can_build_shared=no - enable_shared=no - ;; - - sysv4*MP*) - if test -d /usr/nec; then - lt_prog_compiler_pic=-Kconform_pic - fi - ;; - - hpux*) - # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but - # not for PA HP-UX. - case $host_cpu in - hppa*64*|ia64*) - # +Z the default - ;; - *) - lt_prog_compiler_pic='-fPIC' - ;; - esac - ;; - - *) - lt_prog_compiler_pic='-fPIC' - ;; - esac - else - # PORTME Check for flag to pass linker flags through the system compiler. - case $host_os in - aix*) - lt_prog_compiler_wl='-Wl,' - if test "$host_cpu" = ia64; then - # AIX 5 now supports IA64 processor - lt_prog_compiler_static='-Bstatic' - else - lt_prog_compiler_static='-bnso -bI:/lib/syscalls.exp' - fi - ;; - darwin*) - # PIC is the default on this platform - # Common symbols not allowed in MH_DYLIB files - case $cc_basename in - xlc*) - lt_prog_compiler_pic='-qnocommon' - lt_prog_compiler_wl='-Wl,' - ;; - esac - ;; - - mingw* | cygwin* | pw32* | os2*) - # This hack is so that the source file can tell whether it is being - # built for inclusion in a dll (and should export symbols for example). - lt_prog_compiler_pic='-DDLL_EXPORT' - ;; - - hpux9* | hpux10* | hpux11*) - lt_prog_compiler_wl='-Wl,' - # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but - # not for PA HP-UX. - case $host_cpu in - hppa*64*|ia64*) - # +Z the default - ;; - *) - lt_prog_compiler_pic='+Z' - ;; - esac - # Is there a better lt_prog_compiler_static that works with the bundled CC? - lt_prog_compiler_static='${wl}-a ${wl}archive' - ;; - - irix5* | irix6* | nonstopux*) - lt_prog_compiler_wl='-Wl,' - # PIC (with -KPIC) is the default. - lt_prog_compiler_static='-non_shared' - ;; - - newsos6) - lt_prog_compiler_pic='-KPIC' - lt_prog_compiler_static='-Bstatic' - ;; - - linux* | k*bsd*-gnu) - case $cc_basename in - icc* | ecc*) - lt_prog_compiler_wl='-Wl,' - lt_prog_compiler_pic='-KPIC' - lt_prog_compiler_static='-static' - ;; - pgcc* | pgf77* | pgf90* | pgf95*) - # Portland Group compilers (*not* the Pentium gcc compiler, - # which looks to be a dead project) - lt_prog_compiler_wl='-Wl,' - lt_prog_compiler_pic='-fpic' - lt_prog_compiler_static='-Bstatic' - ;; - ccc*) - lt_prog_compiler_wl='-Wl,' - # All Alpha code is PIC. - lt_prog_compiler_static='-non_shared' - ;; - *) - case `$CC -V 2>&1 | sed 5q` in - *Sun\ C*) - # Sun C 5.9 - lt_prog_compiler_pic='-KPIC' - lt_prog_compiler_static='-Bstatic' - lt_prog_compiler_wl='-Wl,' - ;; - *Sun\ F*) - # Sun Fortran 8.3 passes all unrecognized flags to the linker - lt_prog_compiler_pic='-KPIC' - lt_prog_compiler_static='-Bstatic' - lt_prog_compiler_wl='' - ;; - esac - ;; - esac - ;; - - osf3* | osf4* | osf5*) - lt_prog_compiler_wl='-Wl,' - # All OSF/1 code is PIC. - lt_prog_compiler_static='-non_shared' - ;; - - rdos*) - lt_prog_compiler_static='-non_shared' - ;; - - solaris*) - lt_prog_compiler_pic='-KPIC' - lt_prog_compiler_static='-Bstatic' - case $cc_basename in - f77* | f90* | f95*) - lt_prog_compiler_wl='-Qoption ld ';; - *) - lt_prog_compiler_wl='-Wl,';; - esac - ;; - - sunos4*) - lt_prog_compiler_wl='-Qoption ld ' - lt_prog_compiler_pic='-PIC' - lt_prog_compiler_static='-Bstatic' - ;; - - sysv4 | sysv4.2uw2* | sysv4.3*) - lt_prog_compiler_wl='-Wl,' - lt_prog_compiler_pic='-KPIC' - lt_prog_compiler_static='-Bstatic' - ;; - - sysv4*MP*) - if test -d /usr/nec ;then - lt_prog_compiler_pic='-Kconform_pic' - lt_prog_compiler_static='-Bstatic' - fi - ;; - - sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*) - lt_prog_compiler_wl='-Wl,' - lt_prog_compiler_pic='-KPIC' - lt_prog_compiler_static='-Bstatic' - ;; - - unicos*) - lt_prog_compiler_wl='-Wl,' - lt_prog_compiler_can_build_shared=no - ;; - - uts4*) - lt_prog_compiler_pic='-pic' - lt_prog_compiler_static='-Bstatic' - ;; - - *) - lt_prog_compiler_can_build_shared=no - ;; - esac - fi - -{ echo "$as_me:$LINENO: result: $lt_prog_compiler_pic" >&5 -echo "${ECHO_T}$lt_prog_compiler_pic" >&6; } - -# -# Check to make sure the PIC flag actually works. -# -if test -n "$lt_prog_compiler_pic"; then - -{ echo "$as_me:$LINENO: checking if $compiler PIC flag $lt_prog_compiler_pic works" >&5 -echo $ECHO_N "checking if $compiler PIC flag $lt_prog_compiler_pic works... $ECHO_C" >&6; } -if test "${lt_prog_compiler_pic_works+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - lt_prog_compiler_pic_works=no - ac_outfile=conftest.$ac_objext - echo "$lt_simple_compile_test_code" > conftest.$ac_ext - lt_compiler_flag="$lt_prog_compiler_pic -DPIC" - # Insert the option either (1) after the last *FLAGS variable, or - # (2) before a word containing "conftest.", or (3) at the end. - # Note that $ac_compile itself does not contain backslashes and begins - # with a dollar sign (not a hyphen), so the echo should work correctly. - # The option is referenced via a variable to avoid confusing sed. - lt_compile=`echo "$ac_compile" | $SED \ - -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ - -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ - -e 's:$: $lt_compiler_flag:'` - (eval echo "\"\$as_me:7726: $lt_compile\"" >&5) - (eval "$lt_compile" 2>conftest.err) - ac_status=$? - cat conftest.err >&5 - echo "$as_me:7730: \$? = $ac_status" >&5 - if (exit $ac_status) && test -s "$ac_outfile"; then - # The compiler can only warn and ignore the option if not recognized - # So say no if there are warnings other than the usual output. - $echo "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' >conftest.exp - $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 - if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then - lt_prog_compiler_pic_works=yes - fi - fi - $rm conftest* - -fi -{ echo "$as_me:$LINENO: result: $lt_prog_compiler_pic_works" >&5 -echo "${ECHO_T}$lt_prog_compiler_pic_works" >&6; } - -if test x"$lt_prog_compiler_pic_works" = xyes; then - case $lt_prog_compiler_pic in - "" | " "*) ;; - *) lt_prog_compiler_pic=" $lt_prog_compiler_pic" ;; - esac -else - lt_prog_compiler_pic= - lt_prog_compiler_can_build_shared=no -fi - -fi -case $host_os in - # For platforms which do not support PIC, -DPIC is meaningless: - *djgpp*) - lt_prog_compiler_pic= - ;; - *) - lt_prog_compiler_pic="$lt_prog_compiler_pic -DPIC" - ;; -esac - -# -# Check to make sure the static flag actually works. -# -wl=$lt_prog_compiler_wl eval lt_tmp_static_flag=\"$lt_prog_compiler_static\" -{ echo "$as_me:$LINENO: checking if $compiler static flag $lt_tmp_static_flag works" >&5 -echo $ECHO_N "checking if $compiler static flag $lt_tmp_static_flag works... $ECHO_C" >&6; } -if test "${lt_prog_compiler_static_works+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - lt_prog_compiler_static_works=no - save_LDFLAGS="$LDFLAGS" - LDFLAGS="$LDFLAGS $lt_tmp_static_flag" - echo "$lt_simple_link_test_code" > conftest.$ac_ext - if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then - # The linker can only warn and ignore the option if not recognized - # So say no if there are warnings - if test -s conftest.err; then - # Append any errors to the config.log. - cat conftest.err 1>&5 - $echo "X$_lt_linker_boilerplate" | $Xsed -e '/^$/d' > conftest.exp - $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 - if diff conftest.exp conftest.er2 >/dev/null; then - lt_prog_compiler_static_works=yes - fi - else - lt_prog_compiler_static_works=yes - fi - fi - $rm conftest* - LDFLAGS="$save_LDFLAGS" - -fi -{ echo "$as_me:$LINENO: result: $lt_prog_compiler_static_works" >&5 -echo "${ECHO_T}$lt_prog_compiler_static_works" >&6; } - -if test x"$lt_prog_compiler_static_works" = xyes; then - : -else - lt_prog_compiler_static= -fi - - -{ echo "$as_me:$LINENO: checking if $compiler supports -c -o file.$ac_objext" >&5 -echo $ECHO_N "checking if $compiler supports -c -o file.$ac_objext... $ECHO_C" >&6; } -if test "${lt_cv_prog_compiler_c_o+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - lt_cv_prog_compiler_c_o=no - $rm -r conftest 2>/dev/null - mkdir conftest - cd conftest - mkdir out - echo "$lt_simple_compile_test_code" > conftest.$ac_ext - - lt_compiler_flag="-o out/conftest2.$ac_objext" - # Insert the option either (1) after the last *FLAGS variable, or - # (2) before a word containing "conftest.", or (3) at the end. - # Note that $ac_compile itself does not contain backslashes and begins - # with a dollar sign (not a hyphen), so the echo should work correctly. - lt_compile=`echo "$ac_compile" | $SED \ - -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ - -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ - -e 's:$: $lt_compiler_flag:'` - (eval echo "\"\$as_me:7830: $lt_compile\"" >&5) - (eval "$lt_compile" 2>out/conftest.err) - ac_status=$? - cat out/conftest.err >&5 - echo "$as_me:7834: \$? = $ac_status" >&5 - if (exit $ac_status) && test -s out/conftest2.$ac_objext - then - # The compiler can only warn and ignore the option if not recognized - # So say no if there are warnings - $echo "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' > out/conftest.exp - $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2 - if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then - lt_cv_prog_compiler_c_o=yes - fi - fi - chmod u+w . 2>&5 - $rm conftest* - # SGI C++ compiler will create directory out/ii_files/ for - # template instantiation - test -d out/ii_files && $rm out/ii_files/* && rmdir out/ii_files - $rm out/* && rmdir out - cd .. - rmdir conftest - $rm conftest* - -fi -{ echo "$as_me:$LINENO: result: $lt_cv_prog_compiler_c_o" >&5 -echo "${ECHO_T}$lt_cv_prog_compiler_c_o" >&6; } - - -hard_links="nottested" -if test "$lt_cv_prog_compiler_c_o" = no && test "$need_locks" != no; then - # do not overwrite the value of need_locks provided by the user - { echo "$as_me:$LINENO: checking if we can lock with hard links" >&5 -echo $ECHO_N "checking if we can lock with hard links... $ECHO_C" >&6; } - hard_links=yes - $rm conftest* - ln conftest.a conftest.b 2>/dev/null && hard_links=no - touch conftest.a - ln conftest.a conftest.b 2>&5 || hard_links=no - ln conftest.a conftest.b 2>/dev/null && hard_links=no - { echo "$as_me:$LINENO: result: $hard_links" >&5 -echo "${ECHO_T}$hard_links" >&6; } - if test "$hard_links" = no; then - { echo "$as_me:$LINENO: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&5 -echo "$as_me: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&2;} - need_locks=warn - fi -else - need_locks=no -fi - -{ echo "$as_me:$LINENO: checking whether the $compiler linker ($LD) supports shared libraries" >&5 -echo $ECHO_N "checking whether the $compiler linker ($LD) supports shared libraries... $ECHO_C" >&6; } - - runpath_var= - allow_undefined_flag= - enable_shared_with_static_runtimes=no - archive_cmds= - archive_expsym_cmds= - old_archive_From_new_cmds= - old_archive_from_expsyms_cmds= - export_dynamic_flag_spec= - whole_archive_flag_spec= - thread_safe_flag_spec= - hardcode_libdir_flag_spec= - hardcode_libdir_flag_spec_ld= - hardcode_libdir_separator= - hardcode_direct=no - hardcode_minus_L=no - hardcode_shlibpath_var=unsupported - link_all_deplibs=unknown - hardcode_automatic=no - module_cmds= - module_expsym_cmds= - always_export_symbols=no - export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' - # include_expsyms should be a list of space-separated symbols to be *always* - # included in the symbol list - include_expsyms= - # exclude_expsyms can be an extended regexp of symbols to exclude - # it will be wrapped by ` (' and `)$', so one must not match beginning or - # end of line. Example: `a|bc|.*d.*' will exclude the symbols `a' and `bc', - # as well as any symbol that contains `d'. - exclude_expsyms="_GLOBAL_OFFSET_TABLE_" - # Although _GLOBAL_OFFSET_TABLE_ is a valid symbol C name, most a.out - # platforms (ab)use it in PIC code, but their linkers get confused if - # the symbol is explicitly referenced. Since portable code cannot - # rely on this symbol name, it's probably fine to never include it in - # preloaded symbol tables. - extract_expsyms_cmds= - # Just being paranoid about ensuring that cc_basename is set. - for cc_temp in $compiler""; do - case $cc_temp in - compile | *[\\/]compile | ccache | *[\\/]ccache ) ;; - distcc | *[\\/]distcc | purify | *[\\/]purify ) ;; - \-*) ;; - *) break;; - esac -done -cc_basename=`$echo "X$cc_temp" | $Xsed -e 's%.*/%%' -e "s%^$host_alias-%%"` - - case $host_os in - cygwin* | mingw* | pw32*) - # FIXME: the MSVC++ port hasn't been tested in a loooong time - # When not using gcc, we currently assume that we are using - # Microsoft Visual C++. - if test "$GCC" != yes; then - with_gnu_ld=no - fi - ;; - interix*) - # we just hope/assume this is gcc and not c89 (= MSVC++) - with_gnu_ld=yes - ;; - openbsd*) - with_gnu_ld=no - ;; - esac - - ld_shlibs=yes - if test "$with_gnu_ld" = yes; then - # If archive_cmds runs LD, not CC, wlarc should be empty - wlarc='${wl}' - - # Set some defaults for GNU ld with shared library support. These - # are reset later if shared libraries are not supported. Putting them - # here allows them to be overridden if necessary. - runpath_var=LD_RUN_PATH - hardcode_libdir_flag_spec='${wl}--rpath ${wl}$libdir' - export_dynamic_flag_spec='${wl}--export-dynamic' - # ancient GNU ld didn't support --whole-archive et. al. - if $LD --help 2>&1 | grep 'no-whole-archive' > /dev/null; then - whole_archive_flag_spec="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' - else - whole_archive_flag_spec= - fi - supports_anon_versioning=no - case `$LD -v 2>/dev/null` in - *\ [01].* | *\ 2.[0-9].* | *\ 2.10.*) ;; # catch versions < 2.11 - *\ 2.11.93.0.2\ *) supports_anon_versioning=yes ;; # RH7.3 ... - *\ 2.11.92.0.12\ *) supports_anon_versioning=yes ;; # Mandrake 8.2 ... - *\ 2.11.*) ;; # other 2.11 versions - *) supports_anon_versioning=yes ;; - esac - - # See if GNU ld supports shared libraries. - case $host_os in - aix3* | aix4* | aix5*) - # On AIX/PPC, the GNU linker is very broken - if test "$host_cpu" != ia64; then - ld_shlibs=no - cat <&2 - -*** Warning: the GNU linker, at least up to release 2.9.1, is reported -*** to be unable to reliably create shared libraries on AIX. -*** Therefore, libtool is disabling shared libraries support. If you -*** really care for shared libraries, you may want to modify your PATH -*** so that a non-GNU linker is found, and then restart. - -EOF - fi - ;; - - amigaos*) - archive_cmds='$rm $output_objdir/a2ixlibrary.data~$echo "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$echo "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$echo "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$echo "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' - hardcode_libdir_flag_spec='-L$libdir' - hardcode_minus_L=yes - - # Samuel A. Falvo II reports - # that the semantics of dynamic libraries on AmigaOS, at least up - # to version 4, is to share data among multiple programs linked - # with the same dynamic library. Since this doesn't match the - # behavior of shared libraries on other platforms, we can't use - # them. - ld_shlibs=no - ;; - - beos*) - if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then - allow_undefined_flag=unsupported - # Joseph Beckenbach says some releases of gcc - # support --undefined. This deserves some investigation. FIXME - archive_cmds='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' - else - ld_shlibs=no - fi - ;; - - cygwin* | mingw* | pw32*) - # _LT_AC_TAGVAR(hardcode_libdir_flag_spec, ) is actually meaningless, - # as there is no search path for DLLs. - hardcode_libdir_flag_spec='-L$libdir' - allow_undefined_flag=unsupported - always_export_symbols=no - enable_shared_with_static_runtimes=yes - export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS][ ]/s/.*[ ]\([^ ]*\)/\1 DATA/'\'' -e '\''/^[AITW][ ]/s/.*[ ]//'\'' | sort | uniq > $export_symbols' - - if $LD --help 2>&1 | grep 'auto-import' > /dev/null; then - archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' - # If the export-symbols file already is a .def file (1st line - # is EXPORTS), use it as is; otherwise, prepend... - archive_expsym_cmds='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then - cp $export_symbols $output_objdir/$soname.def; - else - echo EXPORTS > $output_objdir/$soname.def; - cat $export_symbols >> $output_objdir/$soname.def; - fi~ - $CC -shared $output_objdir/$soname.def $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' - else - ld_shlibs=no - fi - ;; - - interix[3-9]*) - hardcode_direct=no - hardcode_shlibpath_var=no - hardcode_libdir_flag_spec='${wl}-rpath,$libdir' - export_dynamic_flag_spec='${wl}-E' - # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc. - # Instead, shared libraries are loaded at an image base (0x10000000 by - # default) and relocated if they conflict, which is a slow very memory - # consuming and fragmenting process. To avoid this, we pick a random, - # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link - # time. Moving up from 0x10000000 also allows more sbrk(2) space. - archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' - archive_expsym_cmds='sed "s,^,_," $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--retain-symbols-file,$output_objdir/$soname.expsym ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' - ;; - - gnu* | linux* | k*bsd*-gnu) - if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then - tmp_addflag= - case $cc_basename,$host_cpu in - pgcc*) # Portland Group C compiler - whole_archive_flag_spec='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $echo \"$new_convenience\"` ${wl}--no-whole-archive' - tmp_addflag=' $pic_flag' - ;; - pgf77* | pgf90* | pgf95*) # Portland Group f77 and f90 compilers - whole_archive_flag_spec='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $echo \"$new_convenience\"` ${wl}--no-whole-archive' - tmp_addflag=' $pic_flag -Mnomain' ;; - ecc*,ia64* | icc*,ia64*) # Intel C compiler on ia64 - tmp_addflag=' -i_dynamic' ;; - efc*,ia64* | ifort*,ia64*) # Intel Fortran compiler on ia64 - tmp_addflag=' -i_dynamic -nofor_main' ;; - ifc* | ifort*) # Intel Fortran compiler - tmp_addflag=' -nofor_main' ;; - esac - case `$CC -V 2>&1 | sed 5q` in - *Sun\ C*) # Sun C 5.9 - whole_archive_flag_spec='${wl}--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; $echo \"$new_convenience\"` ${wl}--no-whole-archive' - tmp_sharedflag='-G' ;; - *Sun\ F*) # Sun Fortran 8.3 - tmp_sharedflag='-G' ;; - *) - tmp_sharedflag='-shared' ;; - esac - archive_cmds='$CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' - - if test $supports_anon_versioning = yes; then - archive_expsym_cmds='$echo "{ global:" > $output_objdir/$libname.ver~ - cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ - $echo "local: *; };" >> $output_objdir/$libname.ver~ - $CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib' - fi - else - ld_shlibs=no - fi - ;; - - netbsd*) - if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then - archive_cmds='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib' - wlarc= - else - archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' - archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' - fi - ;; - - solaris*) - if $LD -v 2>&1 | grep 'BFD 2\.8' > /dev/null; then - ld_shlibs=no - cat <&2 - -*** Warning: The releases 2.8.* of the GNU linker cannot reliably -*** create shared libraries on Solaris systems. Therefore, libtool -*** is disabling shared libraries support. We urge you to upgrade GNU -*** binutils to release 2.9.1 or newer. Another option is to modify -*** your PATH or compiler configuration so that the native linker is -*** used, and then restart. - -EOF - elif $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then - archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' - archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' - else - ld_shlibs=no - fi - ;; - - sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX*) - case `$LD -v 2>&1` in - *\ [01].* | *\ 2.[0-9].* | *\ 2.1[0-5].*) - ld_shlibs=no - cat <<_LT_EOF 1>&2 - -*** Warning: Releases of the GNU linker prior to 2.16.91.0.3 can not -*** reliably create shared libraries on SCO systems. Therefore, libtool -*** is disabling shared libraries support. We urge you to upgrade GNU -*** binutils to release 2.16.91.0.3 or newer. Another option is to modify -*** your PATH or compiler configuration so that the native linker is -*** used, and then restart. - -_LT_EOF - ;; - *) - if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then - hardcode_libdir_flag_spec='`test -z "$SCOABSPATH" && echo ${wl}-rpath,$libdir`' - archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib' - archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname,\${SCOABSPATH:+${install_libdir}/}$soname,-retain-symbols-file,$export_symbols -o $lib' - else - ld_shlibs=no - fi - ;; - esac - ;; - - sunos4*) - archive_cmds='$LD -assert pure-text -Bshareable -o $lib $libobjs $deplibs $linker_flags' - wlarc= - hardcode_direct=yes - hardcode_shlibpath_var=no - ;; - - *) - if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then - archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' - archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' - else - ld_shlibs=no - fi - ;; - esac - - if test "$ld_shlibs" = no; then - runpath_var= - hardcode_libdir_flag_spec= - export_dynamic_flag_spec= - whole_archive_flag_spec= - fi - else - # PORTME fill in a description of your system's linker (not GNU ld) - case $host_os in - aix3*) - allow_undefined_flag=unsupported - always_export_symbols=yes - archive_expsym_cmds='$LD -o $output_objdir/$soname $libobjs $deplibs $linker_flags -bE:$export_symbols -T512 -H512 -bM:SRE~$AR $AR_FLAGS $lib $output_objdir/$soname' - # Note: this linker hardcodes the directories in LIBPATH if there - # are no directories specified by -L. - hardcode_minus_L=yes - if test "$GCC" = yes && test -z "$lt_prog_compiler_static"; then - # Neither direct hardcoding nor static linking is supported with a - # broken collect2. - hardcode_direct=unsupported - fi - ;; - - aix4* | aix5*) - if test "$host_cpu" = ia64; then - # On IA64, the linker does run time linking by default, so we don't - # have to do anything special. - aix_use_runtimelinking=no - exp_sym_flag='-Bexport' - no_entry_flag="" - else - # If we're using GNU nm, then we don't want the "-C" option. - # -C means demangle to AIX nm, but means don't demangle with GNU nm - if $NM -V 2>&1 | grep 'GNU' > /dev/null; then - export_symbols_cmds='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$2 == "T") || (\$2 == "D") || (\$2 == "B")) && (substr(\$3,1,1) != ".")) { print \$3 } }'\'' | sort -u > $export_symbols' - else - export_symbols_cmds='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$2 == "T") || (\$2 == "D") || (\$2 == "B")) && (substr(\$3,1,1) != ".")) { print \$3 } }'\'' | sort -u > $export_symbols' - fi - aix_use_runtimelinking=no - - # Test if we are trying to use run time linking or normal - # AIX style linking. If -brtl is somewhere in LDFLAGS, we - # need to do runtime linking. - case $host_os in aix4.[23]|aix4.[23].*|aix5*) - for ld_flag in $LDFLAGS; do - if (test $ld_flag = "-brtl" || test $ld_flag = "-Wl,-brtl"); then - aix_use_runtimelinking=yes - break - fi - done - ;; - esac - - exp_sym_flag='-bexport' - no_entry_flag='-bnoentry' - fi - - # When large executables or shared objects are built, AIX ld can - # have problems creating the table of contents. If linking a library - # or program results in "error TOC overflow" add -mminimal-toc to - # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not - # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS. - - archive_cmds='' - hardcode_direct=yes - hardcode_libdir_separator=':' - link_all_deplibs=yes - - if test "$GCC" = yes; then - case $host_os in aix4.[012]|aix4.[012].*) - # We only want to do this on AIX 4.2 and lower, the check - # below for broken collect2 doesn't work under 4.3+ - collect2name=`${CC} -print-prog-name=collect2` - if test -f "$collect2name" && \ - strings "$collect2name" | grep resolve_lib_name >/dev/null - then - # We have reworked collect2 - : - else - # We have old collect2 - hardcode_direct=unsupported - # It fails to find uninstalled libraries when the uninstalled - # path is not listed in the libpath. Setting hardcode_minus_L - # to unsupported forces relinking - hardcode_minus_L=yes - hardcode_libdir_flag_spec='-L$libdir' - hardcode_libdir_separator= - fi - ;; - esac - shared_flag='-shared' - if test "$aix_use_runtimelinking" = yes; then - shared_flag="$shared_flag "'${wl}-G' - fi - else - # not using gcc - if test "$host_cpu" = ia64; then - # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release - # chokes on -Wl,-G. The following line is correct: - shared_flag='-G' - else - if test "$aix_use_runtimelinking" = yes; then - shared_flag='${wl}-G' - else - shared_flag='${wl}-bM:SRE' - fi - fi - fi - - # It seems that -bexpall does not export symbols beginning with - # underscore (_), so it is better to generate a list of symbols to export. - always_export_symbols=yes - if test "$aix_use_runtimelinking" = yes; then - # Warning - without using the other runtime loading flags (-brtl), - # -berok will link without error, but may produce a broken library. - allow_undefined_flag='-berok' - # Determine the default libpath from the value encoded in an empty executable. - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ - -int -main () -{ - - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext conftest$ac_exeext -if { (ac_try="$ac_link" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_link") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest$ac_exeext && - $as_test_x conftest$ac_exeext; then - -lt_aix_libpath_sed=' - /Import File Strings/,/^$/ { - /^0/ { - s/^0 *\(.*\)$/\1/ - p - } - }' -aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` -# Check for a 64-bit object if we didn't find anything. -if test -z "$aix_libpath"; then - aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` -fi -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - -fi - -rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ - conftest$ac_exeext conftest.$ac_ext -if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi - - hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'"$aix_libpath" - archive_expsym_cmds="\$CC"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then echo "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag" - else - if test "$host_cpu" = ia64; then - hardcode_libdir_flag_spec='${wl}-R $libdir:/usr/lib:/lib' - allow_undefined_flag="-z nodefs" - archive_expsym_cmds="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$exp_sym_flag:\$export_symbols" - else - # Determine the default libpath from the value encoded in an empty executable. - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ - -int -main () -{ - - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext conftest$ac_exeext -if { (ac_try="$ac_link" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_link") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest$ac_exeext && - $as_test_x conftest$ac_exeext; then - -lt_aix_libpath_sed=' - /Import File Strings/,/^$/ { - /^0/ { - s/^0 *\(.*\)$/\1/ - p - } - }' -aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` -# Check for a 64-bit object if we didn't find anything. -if test -z "$aix_libpath"; then - aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` -fi -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - -fi - -rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ - conftest$ac_exeext conftest.$ac_ext -if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi - - hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'"$aix_libpath" - # Warning - without using the other run time loading flags, - # -berok will link without error, but may produce a broken library. - no_undefined_flag=' ${wl}-bernotok' - allow_undefined_flag=' ${wl}-berok' - # Exported symbols can be pulled into shared objects from archives - whole_archive_flag_spec='$convenience' - archive_cmds_need_lc=yes - # This is similar to how AIX traditionally builds its shared libraries. - archive_expsym_cmds="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs ${wl}-bnoentry $compiler_flags ${wl}-bE:$export_symbols${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname' - fi - fi - ;; - - amigaos*) - archive_cmds='$rm $output_objdir/a2ixlibrary.data~$echo "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$echo "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$echo "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$echo "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' - hardcode_libdir_flag_spec='-L$libdir' - hardcode_minus_L=yes - # see comment about different semantics on the GNU ld section - ld_shlibs=no - ;; - - bsdi[45]*) - export_dynamic_flag_spec=-rdynamic - ;; - - cygwin* | mingw* | pw32*) - # When not using gcc, we currently assume that we are using - # Microsoft Visual C++. - # hardcode_libdir_flag_spec is actually meaningless, as there is - # no search path for DLLs. - hardcode_libdir_flag_spec=' ' - allow_undefined_flag=unsupported - # Tell ltmain to make .lib files, not .a files. - libext=lib - # Tell ltmain to make .dll files, not .so files. - shrext_cmds=".dll" - # FIXME: Setting linknames here is a bad hack. - archive_cmds='$CC -o $lib $libobjs $compiler_flags `echo "$deplibs" | $SED -e '\''s/ -lc$//'\''` -link -dll~linknames=' - # The linker will automatically build a .lib file if we build a DLL. - old_archive_From_new_cmds='true' - # FIXME: Should let the user specify the lib program. - old_archive_cmds='lib -OUT:$oldlib$oldobjs$old_deplibs' - fix_srcfile_path='`cygpath -w "$srcfile"`' - enable_shared_with_static_runtimes=yes - ;; - - darwin* | rhapsody*) - case $host_os in - rhapsody* | darwin1.[012]) - allow_undefined_flag='${wl}-undefined ${wl}suppress' - ;; - *) # Darwin 1.3 on - if test -z ${MACOSX_DEPLOYMENT_TARGET} ; then - allow_undefined_flag='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' - else - case ${MACOSX_DEPLOYMENT_TARGET} in - 10.[012]) - allow_undefined_flag='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' - ;; - 10.*) - allow_undefined_flag='${wl}-undefined ${wl}dynamic_lookup' - ;; - esac - fi - ;; - esac - archive_cmds_need_lc=no - hardcode_direct=no - hardcode_automatic=yes - hardcode_shlibpath_var=unsupported - whole_archive_flag_spec='' - link_all_deplibs=yes - if test "$GCC" = yes ; then - output_verbose_link_cmd='echo' - archive_cmds='$CC -dynamiclib $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags -install_name $rpath/$soname $verstring' - module_cmds='$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags' - # Don't fix this by using the ld -exported_symbols_list flag, it doesn't exist in older darwin lds - archive_expsym_cmds='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -dynamiclib $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags -install_name $rpath/$soname $verstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' - module_expsym_cmds='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' - else - case $cc_basename in - xlc*) - output_verbose_link_cmd='echo' - archive_cmds='$CC -qmkshrobj $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-install_name ${wl}`echo $rpath/$soname` $xlcverstring' - module_cmds='$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags' - # Don't fix this by using the ld -exported_symbols_list flag, it doesn't exist in older darwin lds - archive_expsym_cmds='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -qmkshrobj $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-install_name ${wl}$rpath/$soname $xlcverstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' - module_expsym_cmds='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' - ;; - *) - ld_shlibs=no - ;; - esac - fi - ;; - - dgux*) - archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' - hardcode_libdir_flag_spec='-L$libdir' - hardcode_shlibpath_var=no - ;; - - freebsd1*) - ld_shlibs=no - ;; - - # FreeBSD 2.2.[012] allows us to include c++rt0.o to get C++ constructor - # support. Future versions do this automatically, but an explicit c++rt0.o - # does not break anything, and helps significantly (at the cost of a little - # extra space). - freebsd2.2*) - archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags /usr/lib/c++rt0.o' - hardcode_libdir_flag_spec='-R$libdir' - hardcode_direct=yes - hardcode_shlibpath_var=no - ;; - - # Unfortunately, older versions of FreeBSD 2 do not have this feature. - freebsd2*) - archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' - hardcode_direct=yes - hardcode_minus_L=yes - hardcode_shlibpath_var=no - ;; - - # FreeBSD 3 and greater uses gcc -shared to do shared libraries. - freebsd* | dragonfly*) - archive_cmds='$CC -shared -o $lib $libobjs $deplibs $compiler_flags' - hardcode_libdir_flag_spec='-R$libdir' - hardcode_direct=yes - hardcode_shlibpath_var=no - ;; - - hpux9*) - if test "$GCC" = yes; then - archive_cmds='$rm $output_objdir/$soname~$CC -shared -fPIC ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' - else - archive_cmds='$rm $output_objdir/$soname~$LD -b +b $install_libdir -o $output_objdir/$soname $libobjs $deplibs $linker_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' - fi - hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir' - hardcode_libdir_separator=: - hardcode_direct=yes - - # hardcode_minus_L: Not really in the search PATH, - # but as the default location of the library. - hardcode_minus_L=yes - export_dynamic_flag_spec='${wl}-E' - ;; - - hpux10*) - if test "$GCC" = yes -a "$with_gnu_ld" = no; then - archive_cmds='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' - else - archive_cmds='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags' - fi - if test "$with_gnu_ld" = no; then - hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir' - hardcode_libdir_separator=: - - hardcode_direct=yes - export_dynamic_flag_spec='${wl}-E' - - # hardcode_minus_L: Not really in the search PATH, - # but as the default location of the library. - hardcode_minus_L=yes - fi - ;; - - hpux11*) - if test "$GCC" = yes -a "$with_gnu_ld" = no; then - case $host_cpu in - hppa*64*) - archive_cmds='$CC -shared ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' - ;; - ia64*) - archive_cmds='$CC -shared ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' - ;; - *) - archive_cmds='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' - ;; - esac - else - case $host_cpu in - hppa*64*) - archive_cmds='$CC -b ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' - ;; - ia64*) - archive_cmds='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' - ;; - *) - archive_cmds='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' - ;; - esac - fi - if test "$with_gnu_ld" = no; then - hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir' - hardcode_libdir_separator=: - - case $host_cpu in - hppa*64*|ia64*) - hardcode_libdir_flag_spec_ld='+b $libdir' - hardcode_direct=no - hardcode_shlibpath_var=no - ;; - *) - hardcode_direct=yes - export_dynamic_flag_spec='${wl}-E' - - # hardcode_minus_L: Not really in the search PATH, - # but as the default location of the library. - hardcode_minus_L=yes - ;; - esac - fi - ;; - - irix5* | irix6* | nonstopux*) - if test "$GCC" = yes; then - archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' - else - archive_cmds='$LD -shared $libobjs $deplibs $linker_flags -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib' - hardcode_libdir_flag_spec_ld='-rpath $libdir' - fi - hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' - hardcode_libdir_separator=: - link_all_deplibs=yes - ;; - - netbsd*) - if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then - archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' # a.out - else - archive_cmds='$LD -shared -o $lib $libobjs $deplibs $linker_flags' # ELF - fi - hardcode_libdir_flag_spec='-R$libdir' - hardcode_direct=yes - hardcode_shlibpath_var=no - ;; - - newsos6) - archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' - hardcode_direct=yes - hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' - hardcode_libdir_separator=: - hardcode_shlibpath_var=no - ;; - - openbsd*) - if test -f /usr/libexec/ld.so; then - hardcode_direct=yes - hardcode_shlibpath_var=no - if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then - archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' - archive_expsym_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-retain-symbols-file,$export_symbols' - hardcode_libdir_flag_spec='${wl}-rpath,$libdir' - export_dynamic_flag_spec='${wl}-E' - else - case $host_os in - openbsd[01].* | openbsd2.[0-7] | openbsd2.[0-7].*) - archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' - hardcode_libdir_flag_spec='-R$libdir' - ;; - *) - archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' - hardcode_libdir_flag_spec='${wl}-rpath,$libdir' - ;; - esac - fi - else - ld_shlibs=no - fi - ;; - - os2*) - hardcode_libdir_flag_spec='-L$libdir' - hardcode_minus_L=yes - allow_undefined_flag=unsupported - archive_cmds='$echo "LIBRARY $libname INITINSTANCE" > $output_objdir/$libname.def~$echo "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~$echo DATA >> $output_objdir/$libname.def~$echo " SINGLE NONSHARED" >> $output_objdir/$libname.def~$echo EXPORTS >> $output_objdir/$libname.def~emxexp $libobjs >> $output_objdir/$libname.def~$CC -Zdll -Zcrtdll -o $lib $libobjs $deplibs $compiler_flags $output_objdir/$libname.def' - old_archive_From_new_cmds='emximp -o $output_objdir/$libname.a $output_objdir/$libname.def' - ;; - - osf3*) - if test "$GCC" = yes; then - allow_undefined_flag=' ${wl}-expect_unresolved ${wl}\*' - archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' - else - allow_undefined_flag=' -expect_unresolved \*' - archive_cmds='$LD -shared${allow_undefined_flag} $libobjs $deplibs $linker_flags -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib' - fi - hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' - hardcode_libdir_separator=: - ;; - - osf4* | osf5*) # as osf3* with the addition of -msym flag - if test "$GCC" = yes; then - allow_undefined_flag=' ${wl}-expect_unresolved ${wl}\*' - archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' - hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' - else - allow_undefined_flag=' -expect_unresolved \*' - archive_cmds='$LD -shared${allow_undefined_flag} $libobjs $deplibs $linker_flags -msym -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib' - archive_expsym_cmds='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done; echo "-hidden">> $lib.exp~ - $LD -shared${allow_undefined_flag} -input $lib.exp $linker_flags $libobjs $deplibs -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib~$rm $lib.exp' - - # Both c and cxx compiler support -rpath directly - hardcode_libdir_flag_spec='-rpath $libdir' - fi - hardcode_libdir_separator=: - ;; - - solaris*) - no_undefined_flag=' -z text' - if test "$GCC" = yes; then - wlarc='${wl}' - archive_cmds='$CC -shared ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' - archive_expsym_cmds='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~ - $CC -shared ${wl}-M ${wl}$lib.exp ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags~$rm $lib.exp' - else - wlarc='' - archive_cmds='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linker_flags' - archive_expsym_cmds='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~ - $LD -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$rm $lib.exp' - fi - hardcode_libdir_flag_spec='-R$libdir' - hardcode_shlibpath_var=no - case $host_os in - solaris2.[0-5] | solaris2.[0-5].*) ;; - *) - # The compiler driver will combine and reorder linker options, - # but understands `-z linker_flag'. GCC discards it without `$wl', - # but is careful enough not to reorder. - # Supported since Solaris 2.6 (maybe 2.5.1?) - if test "$GCC" = yes; then - whole_archive_flag_spec='${wl}-z ${wl}allextract$convenience ${wl}-z ${wl}defaultextract' - else - whole_archive_flag_spec='-z allextract$convenience -z defaultextract' - fi - ;; - esac - link_all_deplibs=yes - ;; - - sunos4*) - if test "x$host_vendor" = xsequent; then - # Use $CC to link under sequent, because it throws in some extra .o - # files that make .init and .fini sections work. - archive_cmds='$CC -G ${wl}-h $soname -o $lib $libobjs $deplibs $compiler_flags' - else - archive_cmds='$LD -assert pure-text -Bstatic -o $lib $libobjs $deplibs $linker_flags' - fi - hardcode_libdir_flag_spec='-L$libdir' - hardcode_direct=yes - hardcode_minus_L=yes - hardcode_shlibpath_var=no - ;; - - sysv4) - case $host_vendor in - sni) - archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' - hardcode_direct=yes # is this really true??? - ;; - siemens) - ## LD is ld it makes a PLAMLIB - ## CC just makes a GrossModule. - archive_cmds='$LD -G -o $lib $libobjs $deplibs $linker_flags' - reload_cmds='$CC -r -o $output$reload_objs' - hardcode_direct=no - ;; - motorola) - archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' - hardcode_direct=no #Motorola manual says yes, but my tests say they lie - ;; - esac - runpath_var='LD_RUN_PATH' - hardcode_shlibpath_var=no - ;; - - sysv4.3*) - archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' - hardcode_shlibpath_var=no - export_dynamic_flag_spec='-Bexport' - ;; - - sysv4*MP*) - if test -d /usr/nec; then - archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' - hardcode_shlibpath_var=no - runpath_var=LD_RUN_PATH - hardcode_runpath_var=yes - ld_shlibs=yes - fi - ;; - - sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[01].[10]* | unixware7* | sco3.2v5.0.[024]*) - no_undefined_flag='${wl}-z,text' - archive_cmds_need_lc=no - hardcode_shlibpath_var=no - runpath_var='LD_RUN_PATH' - - if test "$GCC" = yes; then - archive_cmds='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - archive_expsym_cmds='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - else - archive_cmds='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - archive_expsym_cmds='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - fi - ;; - - sysv5* | sco3.2v5* | sco5v6*) - # Note: We can NOT use -z defs as we might desire, because we do not - # link with -lc, and that would cause any symbols used from libc to - # always be unresolved, which means just about no library would - # ever link correctly. If we're not using GNU ld we use -z text - # though, which does catch some bad symbols but isn't as heavy-handed - # as -z defs. - no_undefined_flag='${wl}-z,text' - allow_undefined_flag='${wl}-z,nodefs' - archive_cmds_need_lc=no - hardcode_shlibpath_var=no - hardcode_libdir_flag_spec='`test -z "$SCOABSPATH" && echo ${wl}-R,$libdir`' - hardcode_libdir_separator=':' - link_all_deplibs=yes - export_dynamic_flag_spec='${wl}-Bexport' - runpath_var='LD_RUN_PATH' - - if test "$GCC" = yes; then - archive_cmds='$CC -shared ${wl}-h,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags' - archive_expsym_cmds='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags' - else - archive_cmds='$CC -G ${wl}-h,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags' - archive_expsym_cmds='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags' - fi - ;; - - uts4*) - archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' - hardcode_libdir_flag_spec='-L$libdir' - hardcode_shlibpath_var=no - ;; - - *) - ld_shlibs=no - ;; - esac - fi - -{ echo "$as_me:$LINENO: result: $ld_shlibs" >&5 -echo "${ECHO_T}$ld_shlibs" >&6; } -test "$ld_shlibs" = no && can_build_shared=no - -# -# Do we need to explicitly link libc? -# -case "x$archive_cmds_need_lc" in -x|xyes) - # Assume -lc should be added - archive_cmds_need_lc=yes - - if test "$enable_shared" = yes && test "$GCC" = yes; then - case $archive_cmds in - *'~'*) - # FIXME: we may have to deal with multi-command sequences. - ;; - '$CC '*) - # Test whether the compiler implicitly links with -lc since on some - # systems, -lgcc has to come before -lc. If gcc already passes -lc - # to ld, don't add -lc before -lgcc. - { echo "$as_me:$LINENO: checking whether -lc should be explicitly linked in" >&5 -echo $ECHO_N "checking whether -lc should be explicitly linked in... $ECHO_C" >&6; } - $rm conftest* - echo "$lt_simple_compile_test_code" > conftest.$ac_ext - - if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } 2>conftest.err; then - soname=conftest - lib=conftest - libobjs=conftest.$ac_objext - deplibs= - wl=$lt_prog_compiler_wl - pic_flag=$lt_prog_compiler_pic - compiler_flags=-v - linker_flags=-v - verstring= - output_objdir=. - libname=conftest - lt_save_allow_undefined_flag=$allow_undefined_flag - allow_undefined_flag= - if { (eval echo "$as_me:$LINENO: \"$archive_cmds 2\>\&1 \| grep \" -lc \" \>/dev/null 2\>\&1\"") >&5 - (eval $archive_cmds 2\>\&1 \| grep \" -lc \" \>/dev/null 2\>\&1) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } - then - archive_cmds_need_lc=no - else - archive_cmds_need_lc=yes - fi - allow_undefined_flag=$lt_save_allow_undefined_flag - else - cat conftest.err 1>&5 - fi - $rm conftest* - { echo "$as_me:$LINENO: result: $archive_cmds_need_lc" >&5 -echo "${ECHO_T}$archive_cmds_need_lc" >&6; } - ;; - esac - fi - ;; -esac - -{ echo "$as_me:$LINENO: checking dynamic linker characteristics" >&5 -echo $ECHO_N "checking dynamic linker characteristics... $ECHO_C" >&6; } -library_names_spec= -libname_spec='lib$name' -soname_spec= -shrext_cmds=".so" -postinstall_cmds= -postuninstall_cmds= -finish_cmds= -finish_eval= -shlibpath_var= -shlibpath_overrides_runpath=unknown -version_type=none -dynamic_linker="$host_os ld.so" -sys_lib_dlsearch_path_spec="/lib /usr/lib" - -if test "$GCC" = yes; then - case $host_os in - darwin*) lt_awk_arg="/^libraries:/,/LR/" ;; - *) lt_awk_arg="/^libraries:/" ;; - esac - lt_search_path_spec=`$CC -print-search-dirs | awk $lt_awk_arg | $SED -e "s/^libraries://" -e "s,=/,/,g"` - if echo "$lt_search_path_spec" | grep ';' >/dev/null ; then - # if the path contains ";" then we assume it to be the separator - # otherwise default to the standard path separator (i.e. ":") - it is - # assumed that no part of a normal pathname contains ";" but that should - # okay in the real world where ";" in dirpaths is itself problematic. - lt_search_path_spec=`echo "$lt_search_path_spec" | $SED -e 's/;/ /g'` - else - lt_search_path_spec=`echo "$lt_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` - fi - # Ok, now we have the path, separated by spaces, we can step through it - # and add multilib dir if necessary. - lt_tmp_lt_search_path_spec= - lt_multi_os_dir=`$CC $CPPFLAGS $CFLAGS $LDFLAGS -print-multi-os-directory 2>/dev/null` - for lt_sys_path in $lt_search_path_spec; do - if test -d "$lt_sys_path/$lt_multi_os_dir"; then - lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path/$lt_multi_os_dir" - else - test -d "$lt_sys_path" && \ - lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path" - fi - done - lt_search_path_spec=`echo $lt_tmp_lt_search_path_spec | awk ' -BEGIN {RS=" "; FS="/|\n";} { - lt_foo=""; - lt_count=0; - for (lt_i = NF; lt_i > 0; lt_i--) { - if ($lt_i != "" && $lt_i != ".") { - if ($lt_i == "..") { - lt_count++; - } else { - if (lt_count == 0) { - lt_foo="/" $lt_i lt_foo; - } else { - lt_count--; - } - } - } - } - if (lt_foo != "") { lt_freq[lt_foo]++; } - if (lt_freq[lt_foo] == 1) { print lt_foo; } -}'` - sys_lib_search_path_spec=`echo $lt_search_path_spec` -else - sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib" -fi -need_lib_prefix=unknown -hardcode_into_libs=no - -# when you set need_version to no, make sure it does not cause -set_version -# flags to be left without arguments -need_version=unknown - -case $host_os in -aix3*) - version_type=linux - library_names_spec='${libname}${release}${shared_ext}$versuffix $libname.a' - shlibpath_var=LIBPATH - - # AIX 3 has no versioning support, so we append a major version to the name. - soname_spec='${libname}${release}${shared_ext}$major' - ;; - -aix4* | aix5*) - version_type=linux - need_lib_prefix=no - need_version=no - hardcode_into_libs=yes - if test "$host_cpu" = ia64; then - # AIX 5 supports IA64 - library_names_spec='${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext}$versuffix $libname${shared_ext}' - shlibpath_var=LD_LIBRARY_PATH - else - # With GCC up to 2.95.x, collect2 would create an import file - # for dependence libraries. The import file would start with - # the line `#! .'. This would cause the generated library to - # depend on `.', always an invalid library. This was fixed in - # development snapshots of GCC prior to 3.0. - case $host_os in - aix4 | aix4.[01] | aix4.[01].*) - if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)' - echo ' yes ' - echo '#endif'; } | ${CC} -E - | grep yes > /dev/null; then - : - else - can_build_shared=no - fi - ;; - esac - # AIX (on Power*) has no versioning support, so currently we can not hardcode correct - # soname into executable. Probably we can add versioning support to - # collect2, so additional links can be useful in future. - if test "$aix_use_runtimelinking" = yes; then - # If using run time linking (on AIX 4.2 or later) use lib.so - # instead of lib.a to let people know that these are not - # typical AIX shared libraries. - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - else - # We preserve .a as extension for shared libraries through AIX4.2 - # and later when we are not doing run time linking. - library_names_spec='${libname}${release}.a $libname.a' - soname_spec='${libname}${release}${shared_ext}$major' - fi - shlibpath_var=LIBPATH - fi - ;; - -amigaos*) - library_names_spec='$libname.ixlibrary $libname.a' - # Create ${libname}_ixlibrary.a entries in /sys/libs. - finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`$echo "X$lib" | $Xsed -e '\''s%^.*/\([^/]*\)\.ixlibrary$%\1%'\''`; test $rm /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done' - ;; - -beos*) - library_names_spec='${libname}${shared_ext}' - dynamic_linker="$host_os ld.so" - shlibpath_var=LIBRARY_PATH - ;; - -bsdi[45]*) - version_type=linux - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir' - shlibpath_var=LD_LIBRARY_PATH - sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib" - sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib" - # the default ld.so.conf also contains /usr/contrib/lib and - # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow - # libtool to hard-code these into programs - ;; - -cygwin* | mingw* | pw32*) - version_type=windows - shrext_cmds=".dll" - need_version=no - need_lib_prefix=no - - case $GCC,$host_os in - yes,cygwin* | yes,mingw* | yes,pw32*) - library_names_spec='$libname.dll.a' - # DLL is installed to $(libdir)/../bin by postinstall_cmds - postinstall_cmds='base_file=`basename \${file}`~ - dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i;echo \$dlname'\''`~ - dldir=$destdir/`dirname \$dlpath`~ - test -d \$dldir || mkdir -p \$dldir~ - $install_prog $dir/$dlname \$dldir/$dlname~ - chmod a+x \$dldir/$dlname' - postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ - dlpath=$dir/\$dldll~ - $rm \$dlpath' - shlibpath_overrides_runpath=yes - - case $host_os in - cygwin*) - # Cygwin DLLs use 'cyg' prefix rather than 'lib' - soname_spec='`echo ${libname} | sed -e 's/^lib/cyg/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' - sys_lib_search_path_spec="/usr/lib /lib/w32api /lib /usr/local/lib" - ;; - mingw*) - # MinGW DLLs use traditional 'lib' prefix - soname_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' - sys_lib_search_path_spec=`$CC -print-search-dirs | grep "^libraries:" | $SED -e "s/^libraries://" -e "s,=/,/,g"` - if echo "$sys_lib_search_path_spec" | grep ';[c-zC-Z]:/' >/dev/null; then - # It is most probably a Windows format PATH printed by - # mingw gcc, but we are running on Cygwin. Gcc prints its search - # path with ; separators, and with drive letters. We can handle the - # drive letters (cygwin fileutils understands them), so leave them, - # especially as we might pass files found there to a mingw objdump, - # which wouldn't understand a cygwinified path. Ahh. - sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'` - else - sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` - fi - ;; - pw32*) - # pw32 DLLs use 'pw' prefix rather than 'lib' - library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' - ;; - esac - ;; - - *) - library_names_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext} $libname.lib' - ;; - esac - dynamic_linker='Win32 ld.exe' - # FIXME: first we should search . and the directory the executable is in - shlibpath_var=PATH - ;; - -darwin* | rhapsody*) - dynamic_linker="$host_os dyld" - version_type=darwin - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${versuffix}$shared_ext ${libname}${release}${major}$shared_ext ${libname}$shared_ext' - soname_spec='${libname}${release}${major}$shared_ext' - shlibpath_overrides_runpath=yes - shlibpath_var=DYLD_LIBRARY_PATH - shrext_cmds='`test .$module = .yes && echo .so || echo .dylib`' - - sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/local/lib" - sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib' - ;; - -dgux*) - version_type=linux - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname$shared_ext' - soname_spec='${libname}${release}${shared_ext}$major' - shlibpath_var=LD_LIBRARY_PATH - ;; - -freebsd1*) - dynamic_linker=no - ;; - -freebsd* | dragonfly*) - # DragonFly does not have aout. When/if they implement a new - # versioning mechanism, adjust this. - if test -x /usr/bin/objformat; then - objformat=`/usr/bin/objformat` - else - case $host_os in - freebsd[123]*) objformat=aout ;; - *) objformat=elf ;; - esac - fi - version_type=freebsd-$objformat - case $version_type in - freebsd-elf*) - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' - need_version=no - need_lib_prefix=no - ;; - freebsd-*) - library_names_spec='${libname}${release}${shared_ext}$versuffix $libname${shared_ext}$versuffix' - need_version=yes - ;; - esac - shlibpath_var=LD_LIBRARY_PATH - case $host_os in - freebsd2*) - shlibpath_overrides_runpath=yes - ;; - freebsd3.[01]* | freebsdelf3.[01]*) - shlibpath_overrides_runpath=yes - hardcode_into_libs=yes - ;; - freebsd3.[2-9]* | freebsdelf3.[2-9]* | \ - freebsd4.[0-5] | freebsdelf4.[0-5] | freebsd4.1.1 | freebsdelf4.1.1) - shlibpath_overrides_runpath=no - hardcode_into_libs=yes - ;; - *) # from 4.6 on, and DragonFly - shlibpath_overrides_runpath=yes - hardcode_into_libs=yes - ;; - esac - ;; - -gnu*) - version_type=linux - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - shlibpath_var=LD_LIBRARY_PATH - hardcode_into_libs=yes - ;; - -hpux9* | hpux10* | hpux11*) - # Give a soname corresponding to the major version so that dld.sl refuses to - # link against other versions. - version_type=sunos - need_lib_prefix=no - need_version=no - case $host_cpu in - ia64*) - shrext_cmds='.so' - hardcode_into_libs=yes - dynamic_linker="$host_os dld.so" - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - if test "X$HPUX_IA64_MODE" = X32; then - sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib" - else - sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64" - fi - sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec - ;; - hppa*64*) - shrext_cmds='.sl' - hardcode_into_libs=yes - dynamic_linker="$host_os dld.sl" - shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH - shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64" - sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec - ;; - *) - shrext_cmds='.sl' - dynamic_linker="$host_os dld.sl" - shlibpath_var=SHLIB_PATH - shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - ;; - esac - # HP-UX runs *really* slowly unless shared libraries are mode 555. - postinstall_cmds='chmod 555 $lib' - ;; - -interix[3-9]*) - version_type=linux - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - dynamic_linker='Interix 3.x ld.so.1 (PE, like ELF)' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=no - hardcode_into_libs=yes - ;; - -irix5* | irix6* | nonstopux*) - case $host_os in - nonstopux*) version_type=nonstopux ;; - *) - if test "$lt_cv_prog_gnu_ld" = yes; then - version_type=linux - else - version_type=irix - fi ;; - esac - need_lib_prefix=no - need_version=no - soname_spec='${libname}${release}${shared_ext}$major' - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext} $libname${shared_ext}' - case $host_os in - irix5* | nonstopux*) - libsuff= shlibsuff= - ;; - *) - case $LD in # libtool.m4 will add one of these switches to LD - *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ") - libsuff= shlibsuff= libmagic=32-bit;; - *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ") - libsuff=32 shlibsuff=N32 libmagic=N32;; - *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ") - libsuff=64 shlibsuff=64 libmagic=64-bit;; - *) libsuff= shlibsuff= libmagic=never-match;; - esac - ;; - esac - shlibpath_var=LD_LIBRARY${shlibsuff}_PATH - shlibpath_overrides_runpath=no - sys_lib_search_path_spec="/usr/lib${libsuff} /lib${libsuff} /usr/local/lib${libsuff}" - sys_lib_dlsearch_path_spec="/usr/lib${libsuff} /lib${libsuff}" - hardcode_into_libs=yes - ;; - -# No shared lib support for Linux oldld, aout, or coff. -linux*oldld* | linux*aout* | linux*coff*) - dynamic_linker=no - ;; - -# This must be Linux ELF. -linux* | k*bsd*-gnu) - version_type=linux - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=no - # This implies no fast_install, which is unacceptable. - # Some rework will be needed to allow for fast_install - # before this can be enabled. - hardcode_into_libs=yes - sys_lib_search_path_spec="/usr/lib${libsuff} /lib${libsuff} /usr/local/lib${libsuff}" - sys_lib_dlsearch_path_spec="/usr/lib${libsuff} /lib${libsuff}" - - # Append ld.so.conf contents to the search path - if test -f /etc/ld.so.conf; then - lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s 2>/dev/null", \$2)); skip = 1; } { if (!skip) print \$0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;/^[ ]*hwcap[ ]/d;s/[:, ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;/^$/d' | tr '\n' ' '` - sys_lib_dlsearch_path_spec="$sys_lib_dlsearch_path_spec $lt_ld_extra" - fi - - # We used to test for /lib/ld.so.1 and disable shared libraries on - # powerpc, because MkLinux only supported shared libraries with the - # GNU dynamic linker. Since this was broken with cross compilers, - # most powerpc-linux boxes support dynamic linking these days and - # people can always --disable-shared, the test was removed, and we - # assume the GNU/Linux dynamic linker is in use. - dynamic_linker='GNU/Linux ld.so' - ;; - -netbsd*) - version_type=sunos - need_lib_prefix=no - need_version=no - if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' - finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' - dynamic_linker='NetBSD (a.out) ld.so' - else - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - dynamic_linker='NetBSD ld.elf_so' - fi - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=yes - hardcode_into_libs=yes - ;; - -newsos6) - version_type=linux - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=yes - ;; - -nto-qnx*) - version_type=linux - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=yes - ;; - -openbsd*) - version_type=sunos - sys_lib_dlsearch_path_spec="/usr/lib" - need_lib_prefix=no - # Some older versions of OpenBSD (3.3 at least) *do* need versioned libs. - case $host_os in - openbsd3.3 | openbsd3.3.*) need_version=yes ;; - *) need_version=no ;; - esac - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' - finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' - shlibpath_var=LD_LIBRARY_PATH - if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then - case $host_os in - openbsd2.[89] | openbsd2.[89].*) - shlibpath_overrides_runpath=no - ;; - *) - shlibpath_overrides_runpath=yes - ;; - esac - else - shlibpath_overrides_runpath=yes - fi - ;; - -os2*) - libname_spec='$name' - shrext_cmds=".dll" - need_lib_prefix=no - library_names_spec='$libname${shared_ext} $libname.a' - dynamic_linker='OS/2 ld.exe' - shlibpath_var=LIBPATH - ;; - -osf3* | osf4* | osf5*) - version_type=osf - need_lib_prefix=no - need_version=no - soname_spec='${libname}${release}${shared_ext}$major' - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - shlibpath_var=LD_LIBRARY_PATH - sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib" - sys_lib_dlsearch_path_spec="$sys_lib_search_path_spec" - ;; - -rdos*) - dynamic_linker=no - ;; - -solaris*) - version_type=linux - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=yes - hardcode_into_libs=yes - # ldd complains unless libraries are executable - postinstall_cmds='chmod +x $lib' - ;; - -sunos4*) - version_type=sunos - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' - finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=yes - if test "$with_gnu_ld" = yes; then - need_lib_prefix=no - fi - need_version=yes - ;; - -sysv4 | sysv4.3*) - version_type=linux - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - shlibpath_var=LD_LIBRARY_PATH - case $host_vendor in - sni) - shlibpath_overrides_runpath=no - need_lib_prefix=no - export_dynamic_flag_spec='${wl}-Blargedynsym' - runpath_var=LD_RUN_PATH - ;; - siemens) - need_lib_prefix=no - ;; - motorola) - need_lib_prefix=no - need_version=no - shlibpath_overrides_runpath=no - sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib' - ;; - esac - ;; - -sysv4*MP*) - if test -d /usr/nec ;then - version_type=linux - library_names_spec='$libname${shared_ext}.$versuffix $libname${shared_ext}.$major $libname${shared_ext}' - soname_spec='$libname${shared_ext}.$major' - shlibpath_var=LD_LIBRARY_PATH - fi - ;; - -sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) - version_type=freebsd-elf - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - shlibpath_var=LD_LIBRARY_PATH - hardcode_into_libs=yes - if test "$with_gnu_ld" = yes; then - sys_lib_search_path_spec='/usr/local/lib /usr/gnu/lib /usr/ccs/lib /usr/lib /lib' - shlibpath_overrides_runpath=no - else - sys_lib_search_path_spec='/usr/ccs/lib /usr/lib' - shlibpath_overrides_runpath=yes - case $host_os in - sco3.2v5*) - sys_lib_search_path_spec="$sys_lib_search_path_spec /lib" - ;; - esac - fi - sys_lib_dlsearch_path_spec='/usr/lib' - ;; - -uts4*) - version_type=linux - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - shlibpath_var=LD_LIBRARY_PATH - ;; - -*) - dynamic_linker=no - ;; -esac -{ echo "$as_me:$LINENO: result: $dynamic_linker" >&5 -echo "${ECHO_T}$dynamic_linker" >&6; } -test "$dynamic_linker" = no && can_build_shared=no - -variables_saved_for_relink="PATH $shlibpath_var $runpath_var" -if test "$GCC" = yes; then - variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH" -fi - -{ echo "$as_me:$LINENO: checking how to hardcode library paths into programs" >&5 -echo $ECHO_N "checking how to hardcode library paths into programs... $ECHO_C" >&6; } -hardcode_action= -if test -n "$hardcode_libdir_flag_spec" || \ - test -n "$runpath_var" || \ - test "X$hardcode_automatic" = "Xyes" ; then - - # We can hardcode non-existent directories. - if test "$hardcode_direct" != no && - # If the only mechanism to avoid hardcoding is shlibpath_var, we - # have to relink, otherwise we might link with an installed library - # when we should be linking with a yet-to-be-installed one - ## test "$_LT_AC_TAGVAR(hardcode_shlibpath_var, )" != no && - test "$hardcode_minus_L" != no; then - # Linking always hardcodes the temporary library directory. - hardcode_action=relink - else - # We can link without hardcoding, and we can hardcode nonexisting dirs. - hardcode_action=immediate - fi -else - # We cannot hardcode anything, or else we can only hardcode existing - # directories. - hardcode_action=unsupported -fi -{ echo "$as_me:$LINENO: result: $hardcode_action" >&5 -echo "${ECHO_T}$hardcode_action" >&6; } - -if test "$hardcode_action" = relink; then - # Fast installation is not supported - enable_fast_install=no -elif test "$shlibpath_overrides_runpath" = yes || - test "$enable_shared" = no; then - # Fast installation is not necessary - enable_fast_install=needless -fi - -striplib= -old_striplib= -{ echo "$as_me:$LINENO: checking whether stripping libraries is possible" >&5 -echo $ECHO_N "checking whether stripping libraries is possible... $ECHO_C" >&6; } -if test -n "$STRIP" && $STRIP -V 2>&1 | grep "GNU strip" >/dev/null; then - test -z "$old_striplib" && old_striplib="$STRIP --strip-debug" - test -z "$striplib" && striplib="$STRIP --strip-unneeded" - { echo "$as_me:$LINENO: result: yes" >&5 -echo "${ECHO_T}yes" >&6; } -else -# FIXME - insert some real tests, host_os isn't really good enough - case $host_os in - darwin*) - if test -n "$STRIP" ; then - striplib="$STRIP -x" - old_striplib="$STRIP -S" - { echo "$as_me:$LINENO: result: yes" >&5 -echo "${ECHO_T}yes" >&6; } - else - { echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6; } -fi - ;; - *) - { echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6; } - ;; - esac -fi - -if test "x$enable_dlopen" != xyes; then - enable_dlopen=unknown - enable_dlopen_self=unknown - enable_dlopen_self_static=unknown -else - lt_cv_dlopen=no - lt_cv_dlopen_libs= - - case $host_os in - beos*) - lt_cv_dlopen="load_add_on" - lt_cv_dlopen_libs= - lt_cv_dlopen_self=yes - ;; - - mingw* | pw32*) - lt_cv_dlopen="LoadLibrary" - lt_cv_dlopen_libs= - ;; - - cygwin*) - lt_cv_dlopen="dlopen" - lt_cv_dlopen_libs= - ;; - - darwin*) - # if libdl is installed we need to link against it - { echo "$as_me:$LINENO: checking for dlopen in -ldl" >&5 -echo $ECHO_N "checking for dlopen in -ldl... $ECHO_C" >&6; } -if test "${ac_cv_lib_dl_dlopen+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - ac_check_lib_save_LIBS=$LIBS -LIBS="-ldl $LIBS" -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ - -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char dlopen (); -int -main () -{ -return dlopen (); - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext conftest$ac_exeext -if { (ac_try="$ac_link" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_link") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest$ac_exeext && - $as_test_x conftest$ac_exeext; then - ac_cv_lib_dl_dlopen=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_cv_lib_dl_dlopen=no -fi - -rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ - conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS -fi -{ echo "$as_me:$LINENO: result: $ac_cv_lib_dl_dlopen" >&5 -echo "${ECHO_T}$ac_cv_lib_dl_dlopen" >&6; } -if test $ac_cv_lib_dl_dlopen = yes; then - lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl" -else - - lt_cv_dlopen="dyld" - lt_cv_dlopen_libs= - lt_cv_dlopen_self=yes - -fi - - ;; - - *) - { echo "$as_me:$LINENO: checking for shl_load" >&5 -echo $ECHO_N "checking for shl_load... $ECHO_C" >&6; } -if test "${ac_cv_func_shl_load+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -/* Define shl_load to an innocuous variant, in case declares shl_load. - For example, HP-UX 11i declares gettimeofday. */ -#define shl_load innocuous_shl_load - -/* System header to define __stub macros and hopefully few prototypes, - which can conflict with char shl_load (); below. - Prefer to if __STDC__ is defined, since - exists even on freestanding compilers. */ - -#ifdef __STDC__ -# include -#else -# include -#endif - -#undef shl_load - -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char shl_load (); -/* The GNU C library defines this for functions which it implements - to always fail with ENOSYS. Some functions are actually named - something starting with __ and the normal name is an alias. */ -#if defined __stub_shl_load || defined __stub___shl_load -choke me -#endif - -int -main () -{ -return shl_load (); - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext conftest$ac_exeext -if { (ac_try="$ac_link" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_link") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest$ac_exeext && - $as_test_x conftest$ac_exeext; then - ac_cv_func_shl_load=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_cv_func_shl_load=no -fi - -rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ - conftest$ac_exeext conftest.$ac_ext -fi -{ echo "$as_me:$LINENO: result: $ac_cv_func_shl_load" >&5 -echo "${ECHO_T}$ac_cv_func_shl_load" >&6; } -if test $ac_cv_func_shl_load = yes; then - lt_cv_dlopen="shl_load" -else - { echo "$as_me:$LINENO: checking for shl_load in -ldld" >&5 -echo $ECHO_N "checking for shl_load in -ldld... $ECHO_C" >&6; } -if test "${ac_cv_lib_dld_shl_load+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - ac_check_lib_save_LIBS=$LIBS -LIBS="-ldld $LIBS" -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ - -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char shl_load (); -int -main () -{ -return shl_load (); - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext conftest$ac_exeext -if { (ac_try="$ac_link" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_link") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest$ac_exeext && - $as_test_x conftest$ac_exeext; then - ac_cv_lib_dld_shl_load=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_cv_lib_dld_shl_load=no -fi - -rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ - conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS -fi -{ echo "$as_me:$LINENO: result: $ac_cv_lib_dld_shl_load" >&5 -echo "${ECHO_T}$ac_cv_lib_dld_shl_load" >&6; } -if test $ac_cv_lib_dld_shl_load = yes; then - lt_cv_dlopen="shl_load" lt_cv_dlopen_libs="-dld" -else - { echo "$as_me:$LINENO: checking for dlopen" >&5 -echo $ECHO_N "checking for dlopen... $ECHO_C" >&6; } -if test "${ac_cv_func_dlopen+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -/* Define dlopen to an innocuous variant, in case declares dlopen. - For example, HP-UX 11i declares gettimeofday. */ -#define dlopen innocuous_dlopen - -/* System header to define __stub macros and hopefully few prototypes, - which can conflict with char dlopen (); below. - Prefer to if __STDC__ is defined, since - exists even on freestanding compilers. */ - -#ifdef __STDC__ -# include -#else -# include -#endif - -#undef dlopen - -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char dlopen (); -/* The GNU C library defines this for functions which it implements - to always fail with ENOSYS. Some functions are actually named - something starting with __ and the normal name is an alias. */ -#if defined __stub_dlopen || defined __stub___dlopen -choke me -#endif - -int -main () -{ -return dlopen (); - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext conftest$ac_exeext -if { (ac_try="$ac_link" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_link") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest$ac_exeext && - $as_test_x conftest$ac_exeext; then - ac_cv_func_dlopen=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_cv_func_dlopen=no -fi - -rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ - conftest$ac_exeext conftest.$ac_ext -fi -{ echo "$as_me:$LINENO: result: $ac_cv_func_dlopen" >&5 -echo "${ECHO_T}$ac_cv_func_dlopen" >&6; } -if test $ac_cv_func_dlopen = yes; then - lt_cv_dlopen="dlopen" -else - { echo "$as_me:$LINENO: checking for dlopen in -ldl" >&5 -echo $ECHO_N "checking for dlopen in -ldl... $ECHO_C" >&6; } -if test "${ac_cv_lib_dl_dlopen+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - ac_check_lib_save_LIBS=$LIBS -LIBS="-ldl $LIBS" -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ - -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char dlopen (); -int -main () -{ -return dlopen (); - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext conftest$ac_exeext -if { (ac_try="$ac_link" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_link") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest$ac_exeext && - $as_test_x conftest$ac_exeext; then - ac_cv_lib_dl_dlopen=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_cv_lib_dl_dlopen=no -fi - -rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ - conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS -fi -{ echo "$as_me:$LINENO: result: $ac_cv_lib_dl_dlopen" >&5 -echo "${ECHO_T}$ac_cv_lib_dl_dlopen" >&6; } -if test $ac_cv_lib_dl_dlopen = yes; then - lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl" -else - { echo "$as_me:$LINENO: checking for dlopen in -lsvld" >&5 -echo $ECHO_N "checking for dlopen in -lsvld... $ECHO_C" >&6; } -if test "${ac_cv_lib_svld_dlopen+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - ac_check_lib_save_LIBS=$LIBS -LIBS="-lsvld $LIBS" -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ - -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char dlopen (); -int -main () -{ -return dlopen (); - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext conftest$ac_exeext -if { (ac_try="$ac_link" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_link") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest$ac_exeext && - $as_test_x conftest$ac_exeext; then - ac_cv_lib_svld_dlopen=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_cv_lib_svld_dlopen=no -fi - -rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ - conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS -fi -{ echo "$as_me:$LINENO: result: $ac_cv_lib_svld_dlopen" >&5 -echo "${ECHO_T}$ac_cv_lib_svld_dlopen" >&6; } -if test $ac_cv_lib_svld_dlopen = yes; then - lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-lsvld" -else - { echo "$as_me:$LINENO: checking for dld_link in -ldld" >&5 -echo $ECHO_N "checking for dld_link in -ldld... $ECHO_C" >&6; } -if test "${ac_cv_lib_dld_dld_link+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - ac_check_lib_save_LIBS=$LIBS -LIBS="-ldld $LIBS" -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ - -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char dld_link (); -int -main () -{ -return dld_link (); - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext conftest$ac_exeext -if { (ac_try="$ac_link" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_link") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest$ac_exeext && - $as_test_x conftest$ac_exeext; then - ac_cv_lib_dld_dld_link=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_cv_lib_dld_dld_link=no -fi - -rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ - conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS -fi -{ echo "$as_me:$LINENO: result: $ac_cv_lib_dld_dld_link" >&5 -echo "${ECHO_T}$ac_cv_lib_dld_dld_link" >&6; } -if test $ac_cv_lib_dld_dld_link = yes; then - lt_cv_dlopen="dld_link" lt_cv_dlopen_libs="-dld" -fi - - -fi - - -fi - - -fi - - -fi - - -fi - - ;; - esac - - if test "x$lt_cv_dlopen" != xno; then - enable_dlopen=yes - else - enable_dlopen=no - fi - - case $lt_cv_dlopen in - dlopen) - save_CPPFLAGS="$CPPFLAGS" - test "x$ac_cv_header_dlfcn_h" = xyes && CPPFLAGS="$CPPFLAGS -DHAVE_DLFCN_H" - - save_LDFLAGS="$LDFLAGS" - wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $export_dynamic_flag_spec\" - - save_LIBS="$LIBS" - LIBS="$lt_cv_dlopen_libs $LIBS" - - { echo "$as_me:$LINENO: checking whether a program can dlopen itself" >&5 -echo $ECHO_N "checking whether a program can dlopen itself... $ECHO_C" >&6; } -if test "${lt_cv_dlopen_self+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - if test "$cross_compiling" = yes; then : - lt_cv_dlopen_self=cross -else - lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 - lt_status=$lt_dlunknown - cat > conftest.$ac_ext < -#endif - -#include - -#ifdef RTLD_GLOBAL -# define LT_DLGLOBAL RTLD_GLOBAL -#else -# ifdef DL_GLOBAL -# define LT_DLGLOBAL DL_GLOBAL -# else -# define LT_DLGLOBAL 0 -# endif -#endif - -/* We may have to define LT_DLLAZY_OR_NOW in the command line if we - find out it does not work in some platform. */ -#ifndef LT_DLLAZY_OR_NOW -# ifdef RTLD_LAZY -# define LT_DLLAZY_OR_NOW RTLD_LAZY -# else -# ifdef DL_LAZY -# define LT_DLLAZY_OR_NOW DL_LAZY -# else -# ifdef RTLD_NOW -# define LT_DLLAZY_OR_NOW RTLD_NOW -# else -# ifdef DL_NOW -# define LT_DLLAZY_OR_NOW DL_NOW -# else -# define LT_DLLAZY_OR_NOW 0 -# endif -# endif -# endif -# endif -#endif - -#ifdef __cplusplus -extern "C" void exit (int); -#endif - -void fnord() { int i=42;} -int main () -{ - void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW); - int status = $lt_dlunknown; - - if (self) - { - if (dlsym (self,"fnord")) status = $lt_dlno_uscore; - else if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore; - /* dlclose (self); */ - } - else - puts (dlerror ()); - - exit (status); -} -EOF - if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 - (eval $ac_link) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && test -s conftest${ac_exeext} 2>/dev/null; then - (./conftest; exit; ) >&5 2>/dev/null - lt_status=$? - case x$lt_status in - x$lt_dlno_uscore) lt_cv_dlopen_self=yes ;; - x$lt_dlneed_uscore) lt_cv_dlopen_self=yes ;; - x$lt_dlunknown|x*) lt_cv_dlopen_self=no ;; - esac - else : - # compilation failed - lt_cv_dlopen_self=no - fi -fi -rm -fr conftest* - - -fi -{ echo "$as_me:$LINENO: result: $lt_cv_dlopen_self" >&5 -echo "${ECHO_T}$lt_cv_dlopen_self" >&6; } - - if test "x$lt_cv_dlopen_self" = xyes; then - wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $lt_prog_compiler_static\" - { echo "$as_me:$LINENO: checking whether a statically linked program can dlopen itself" >&5 -echo $ECHO_N "checking whether a statically linked program can dlopen itself... $ECHO_C" >&6; } -if test "${lt_cv_dlopen_self_static+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - if test "$cross_compiling" = yes; then : - lt_cv_dlopen_self_static=cross -else - lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 - lt_status=$lt_dlunknown - cat > conftest.$ac_ext < -#endif - -#include - -#ifdef RTLD_GLOBAL -# define LT_DLGLOBAL RTLD_GLOBAL -#else -# ifdef DL_GLOBAL -# define LT_DLGLOBAL DL_GLOBAL -# else -# define LT_DLGLOBAL 0 -# endif -#endif - -/* We may have to define LT_DLLAZY_OR_NOW in the command line if we - find out it does not work in some platform. */ -#ifndef LT_DLLAZY_OR_NOW -# ifdef RTLD_LAZY -# define LT_DLLAZY_OR_NOW RTLD_LAZY -# else -# ifdef DL_LAZY -# define LT_DLLAZY_OR_NOW DL_LAZY -# else -# ifdef RTLD_NOW -# define LT_DLLAZY_OR_NOW RTLD_NOW -# else -# ifdef DL_NOW -# define LT_DLLAZY_OR_NOW DL_NOW -# else -# define LT_DLLAZY_OR_NOW 0 -# endif -# endif -# endif -# endif -#endif - -#ifdef __cplusplus -extern "C" void exit (int); -#endif - -void fnord() { int i=42;} -int main () -{ - void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW); - int status = $lt_dlunknown; - - if (self) - { - if (dlsym (self,"fnord")) status = $lt_dlno_uscore; - else if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore; - /* dlclose (self); */ - } - else - puts (dlerror ()); - - exit (status); -} -EOF - if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 - (eval $ac_link) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && test -s conftest${ac_exeext} 2>/dev/null; then - (./conftest; exit; ) >&5 2>/dev/null - lt_status=$? - case x$lt_status in - x$lt_dlno_uscore) lt_cv_dlopen_self_static=yes ;; - x$lt_dlneed_uscore) lt_cv_dlopen_self_static=yes ;; - x$lt_dlunknown|x*) lt_cv_dlopen_self_static=no ;; - esac - else : - # compilation failed - lt_cv_dlopen_self_static=no - fi -fi -rm -fr conftest* - - -fi -{ echo "$as_me:$LINENO: result: $lt_cv_dlopen_self_static" >&5 -echo "${ECHO_T}$lt_cv_dlopen_self_static" >&6; } - fi - - CPPFLAGS="$save_CPPFLAGS" - LDFLAGS="$save_LDFLAGS" - LIBS="$save_LIBS" - ;; - esac - - case $lt_cv_dlopen_self in - yes|no) enable_dlopen_self=$lt_cv_dlopen_self ;; - *) enable_dlopen_self=unknown ;; - esac - - case $lt_cv_dlopen_self_static in - yes|no) enable_dlopen_self_static=$lt_cv_dlopen_self_static ;; - *) enable_dlopen_self_static=unknown ;; - esac -fi - - -# Report which library types will actually be built -{ echo "$as_me:$LINENO: checking if libtool supports shared libraries" >&5 -echo $ECHO_N "checking if libtool supports shared libraries... $ECHO_C" >&6; } -{ echo "$as_me:$LINENO: result: $can_build_shared" >&5 -echo "${ECHO_T}$can_build_shared" >&6; } - -{ echo "$as_me:$LINENO: checking whether to build shared libraries" >&5 -echo $ECHO_N "checking whether to build shared libraries... $ECHO_C" >&6; } -test "$can_build_shared" = "no" && enable_shared=no - -# On AIX, shared libraries and static libraries use the same namespace, and -# are all built from PIC. -case $host_os in -aix3*) - test "$enable_shared" = yes && enable_static=no - if test -n "$RANLIB"; then - archive_cmds="$archive_cmds~\$RANLIB \$lib" - postinstall_cmds='$RANLIB $lib' - fi - ;; - -aix4* | aix5*) - if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then - test "$enable_shared" = yes && enable_static=no - fi - ;; -esac -{ echo "$as_me:$LINENO: result: $enable_shared" >&5 -echo "${ECHO_T}$enable_shared" >&6; } - -{ echo "$as_me:$LINENO: checking whether to build static libraries" >&5 -echo $ECHO_N "checking whether to build static libraries... $ECHO_C" >&6; } -# Make sure either enable_shared or enable_static is yes. -test "$enable_shared" = yes || enable_static=yes -{ echo "$as_me:$LINENO: result: $enable_static" >&5 -echo "${ECHO_T}$enable_static" >&6; } - -# The else clause should only fire when bootstrapping the -# libtool distribution, otherwise you forgot to ship ltmain.sh -# with your package, and you will get complaints that there are -# no rules to generate ltmain.sh. -if test -f "$ltmain"; then - # See if we are running on zsh, and set the options which allow our commands through - # without removal of \ escapes. - if test -n "${ZSH_VERSION+set}" ; then - setopt NO_GLOB_SUBST - fi - # Now quote all the things that may contain metacharacters while being - # careful not to overquote the AC_SUBSTed values. We take copies of the - # variables and quote the copies for generation of the libtool script. - for var in echo old_CC old_CFLAGS AR AR_FLAGS EGREP RANLIB LN_S LTCC LTCFLAGS NM \ - SED SHELL STRIP \ - libname_spec library_names_spec soname_spec extract_expsyms_cmds \ - old_striplib striplib file_magic_cmd finish_cmds finish_eval \ - deplibs_check_method reload_flag reload_cmds need_locks \ - lt_cv_sys_global_symbol_pipe lt_cv_sys_global_symbol_to_cdecl \ - lt_cv_sys_global_symbol_to_c_name_address \ - sys_lib_search_path_spec sys_lib_dlsearch_path_spec \ - old_postinstall_cmds old_postuninstall_cmds \ - compiler \ - CC \ - LD \ - lt_prog_compiler_wl \ - lt_prog_compiler_pic \ - lt_prog_compiler_static \ - lt_prog_compiler_no_builtin_flag \ - export_dynamic_flag_spec \ - thread_safe_flag_spec \ - whole_archive_flag_spec \ - enable_shared_with_static_runtimes \ - old_archive_cmds \ - old_archive_from_new_cmds \ - predep_objects \ - postdep_objects \ - predeps \ - postdeps \ - compiler_lib_search_path \ - archive_cmds \ - archive_expsym_cmds \ - postinstall_cmds \ - postuninstall_cmds \ - old_archive_from_expsyms_cmds \ - allow_undefined_flag \ - no_undefined_flag \ - export_symbols_cmds \ - hardcode_libdir_flag_spec \ - hardcode_libdir_flag_spec_ld \ - hardcode_libdir_separator \ - hardcode_automatic \ - module_cmds \ - module_expsym_cmds \ - lt_cv_prog_compiler_c_o \ - fix_srcfile_path \ - exclude_expsyms \ - include_expsyms; do - - case $var in - old_archive_cmds | \ - old_archive_from_new_cmds | \ - archive_cmds | \ - archive_expsym_cmds | \ - module_cmds | \ - module_expsym_cmds | \ - old_archive_from_expsyms_cmds | \ - export_symbols_cmds | \ - extract_expsyms_cmds | reload_cmds | finish_cmds | \ - postinstall_cmds | postuninstall_cmds | \ - old_postinstall_cmds | old_postuninstall_cmds | \ - sys_lib_search_path_spec | sys_lib_dlsearch_path_spec) - # Double-quote double-evaled strings. - eval "lt_$var=\\\"\`\$echo \"X\$$var\" | \$Xsed -e \"\$double_quote_subst\" -e \"\$sed_quote_subst\" -e \"\$delay_variable_subst\"\`\\\"" - ;; - *) - eval "lt_$var=\\\"\`\$echo \"X\$$var\" | \$Xsed -e \"\$sed_quote_subst\"\`\\\"" - ;; - esac - done - - case $lt_echo in - *'\$0 --fallback-echo"') - lt_echo=`$echo "X$lt_echo" | $Xsed -e 's/\\\\\\\$0 --fallback-echo"$/$0 --fallback-echo"/'` - ;; - esac - -cfgfile="${ofile}T" - trap "$rm \"$cfgfile\"; exit 1" 1 2 15 - $rm -f "$cfgfile" - { echo "$as_me:$LINENO: creating $ofile" >&5 -echo "$as_me: creating $ofile" >&6;} - - cat <<__EOF__ >> "$cfgfile" -#! $SHELL - -# `$echo "$cfgfile" | sed 's%^.*/%%'` - Provide generalized library-building support services. -# Generated automatically by $PROGRAM (GNU $PACKAGE $VERSION$TIMESTAMP) -# NOTE: Changes made to this file will be lost: look at ltmain.sh. -# -# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007 -# Free Software Foundation, Inc. -# -# This file is part of GNU Libtool: -# Originally by Gordon Matzigkeit , 1996 -# -# This program is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 2 of the License, or -# (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, but -# WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. -# -# As a special exception to the GNU General Public License, if you -# distribute this file as part of a program that contains a -# configuration script generated by Autoconf, you may include it under -# the same distribution terms that you use for the rest of that program. - -# A sed program that does not truncate output. -SED=$lt_SED - -# Sed that helps us avoid accidentally triggering echo(1) options like -n. -Xsed="$SED -e 1s/^X//" - -# The HP-UX ksh and POSIX shell print the target directory to stdout -# if CDPATH is set. -(unset CDPATH) >/dev/null 2>&1 && unset CDPATH - -# The names of the tagged configurations supported by this script. -available_tags= - -# ### BEGIN LIBTOOL CONFIG - -# Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`: - -# Shell to use when invoking shell scripts. -SHELL=$lt_SHELL - -# Whether or not to build shared libraries. -build_libtool_libs=$enable_shared - -# Whether or not to build static libraries. -build_old_libs=$enable_static - -# Whether or not to add -lc for building shared libraries. -build_libtool_need_lc=$archive_cmds_need_lc - -# Whether or not to disallow shared libs when runtime libs are static -allow_libtool_libs_with_static_runtimes=$enable_shared_with_static_runtimes - -# Whether or not to optimize for fast installation. -fast_install=$enable_fast_install - -# The host system. -host_alias=$host_alias -host=$host -host_os=$host_os - -# The build system. -build_alias=$build_alias -build=$build -build_os=$build_os - -# An echo program that does not interpret backslashes. -echo=$lt_echo - -# The archiver. -AR=$lt_AR -AR_FLAGS=$lt_AR_FLAGS - -# A C compiler. -LTCC=$lt_LTCC - -# LTCC compiler flags. -LTCFLAGS=$lt_LTCFLAGS - -# A language-specific compiler. -CC=$lt_compiler - -# Is the compiler the GNU C compiler? -with_gcc=$GCC - -# An ERE matcher. -EGREP=$lt_EGREP - -# The linker used to build libraries. -LD=$lt_LD - -# Whether we need hard or soft links. -LN_S=$lt_LN_S - -# A BSD-compatible nm program. -NM=$lt_NM - -# A symbol stripping program -STRIP=$lt_STRIP - -# Used to examine libraries when file_magic_cmd begins "file" -MAGIC_CMD=$MAGIC_CMD - -# Used on cygwin: DLL creation program. -DLLTOOL="$DLLTOOL" - -# Used on cygwin: object dumper. -OBJDUMP="$OBJDUMP" - -# Used on cygwin: assembler. -AS="$AS" - -# The name of the directory that contains temporary libtool files. -objdir=$objdir - -# How to create reloadable object files. -reload_flag=$lt_reload_flag -reload_cmds=$lt_reload_cmds - -# How to pass a linker flag through the compiler. -wl=$lt_lt_prog_compiler_wl - -# Object file suffix (normally "o"). -objext="$ac_objext" - -# Old archive suffix (normally "a"). -libext="$libext" - -# Shared library suffix (normally ".so"). -shrext_cmds='$shrext_cmds' - -# Executable file suffix (normally ""). -exeext="$exeext" - -# Additional compiler flags for building library objects. -pic_flag=$lt_lt_prog_compiler_pic -pic_mode=$pic_mode - -# What is the maximum length of a command? -max_cmd_len=$lt_cv_sys_max_cmd_len - -# Does compiler simultaneously support -c and -o options? -compiler_c_o=$lt_lt_cv_prog_compiler_c_o - -# Must we lock files when doing compilation? -need_locks=$lt_need_locks - -# Do we need the lib prefix for modules? -need_lib_prefix=$need_lib_prefix - -# Do we need a version for libraries? -need_version=$need_version - -# Whether dlopen is supported. -dlopen_support=$enable_dlopen - -# Whether dlopen of programs is supported. -dlopen_self=$enable_dlopen_self - -# Whether dlopen of statically linked programs is supported. -dlopen_self_static=$enable_dlopen_self_static - -# Compiler flag to prevent dynamic linking. -link_static_flag=$lt_lt_prog_compiler_static - -# Compiler flag to turn off builtin functions. -no_builtin_flag=$lt_lt_prog_compiler_no_builtin_flag - -# Compiler flag to allow reflexive dlopens. -export_dynamic_flag_spec=$lt_export_dynamic_flag_spec - -# Compiler flag to generate shared objects directly from archives. -whole_archive_flag_spec=$lt_whole_archive_flag_spec - -# Compiler flag to generate thread-safe objects. -thread_safe_flag_spec=$lt_thread_safe_flag_spec - -# Library versioning type. -version_type=$version_type - -# Format of library name prefix. -libname_spec=$lt_libname_spec - -# List of archive names. First name is the real one, the rest are links. -# The last name is the one that the linker finds with -lNAME. -library_names_spec=$lt_library_names_spec - -# The coded name of the library, if different from the real name. -soname_spec=$lt_soname_spec - -# Commands used to build and install an old-style archive. -RANLIB=$lt_RANLIB -old_archive_cmds=$lt_old_archive_cmds -old_postinstall_cmds=$lt_old_postinstall_cmds -old_postuninstall_cmds=$lt_old_postuninstall_cmds - -# Create an old-style archive from a shared archive. -old_archive_from_new_cmds=$lt_old_archive_from_new_cmds - -# Create a temporary old-style archive to link instead of a shared archive. -old_archive_from_expsyms_cmds=$lt_old_archive_from_expsyms_cmds - -# Commands used to build and install a shared archive. -archive_cmds=$lt_archive_cmds -archive_expsym_cmds=$lt_archive_expsym_cmds -postinstall_cmds=$lt_postinstall_cmds -postuninstall_cmds=$lt_postuninstall_cmds - -# Commands used to build a loadable module (assumed same as above if empty) -module_cmds=$lt_module_cmds -module_expsym_cmds=$lt_module_expsym_cmds - -# Commands to strip libraries. -old_striplib=$lt_old_striplib -striplib=$lt_striplib - -# Dependencies to place before the objects being linked to create a -# shared library. -predep_objects=$lt_predep_objects - -# Dependencies to place after the objects being linked to create a -# shared library. -postdep_objects=$lt_postdep_objects - -# Dependencies to place before the objects being linked to create a -# shared library. -predeps=$lt_predeps - -# Dependencies to place after the objects being linked to create a -# shared library. -postdeps=$lt_postdeps - -# The library search path used internally by the compiler when linking -# a shared library. -compiler_lib_search_path=$lt_compiler_lib_search_path - -# Method to check whether dependent libraries are shared objects. -deplibs_check_method=$lt_deplibs_check_method - -# Command to use when deplibs_check_method == file_magic. -file_magic_cmd=$lt_file_magic_cmd - -# Flag that allows shared libraries with undefined symbols to be built. -allow_undefined_flag=$lt_allow_undefined_flag - -# Flag that forces no undefined symbols. -no_undefined_flag=$lt_no_undefined_flag - -# Commands used to finish a libtool library installation in a directory. -finish_cmds=$lt_finish_cmds - -# Same as above, but a single script fragment to be evaled but not shown. -finish_eval=$lt_finish_eval - -# Take the output of nm and produce a listing of raw symbols and C names. -global_symbol_pipe=$lt_lt_cv_sys_global_symbol_pipe - -# Transform the output of nm in a proper C declaration -global_symbol_to_cdecl=$lt_lt_cv_sys_global_symbol_to_cdecl - -# Transform the output of nm in a C name address pair -global_symbol_to_c_name_address=$lt_lt_cv_sys_global_symbol_to_c_name_address - -# This is the shared library runtime path variable. -runpath_var=$runpath_var - -# This is the shared library path variable. -shlibpath_var=$shlibpath_var - -# Is shlibpath searched before the hard-coded library search path? -shlibpath_overrides_runpath=$shlibpath_overrides_runpath - -# How to hardcode a shared library path into an executable. -hardcode_action=$hardcode_action - -# Whether we should hardcode library paths into libraries. -hardcode_into_libs=$hardcode_into_libs - -# Flag to hardcode \$libdir into a binary during linking. -# This must work even if \$libdir does not exist. -hardcode_libdir_flag_spec=$lt_hardcode_libdir_flag_spec - -# If ld is used when linking, flag to hardcode \$libdir into -# a binary during linking. This must work even if \$libdir does -# not exist. -hardcode_libdir_flag_spec_ld=$lt_hardcode_libdir_flag_spec_ld - -# Whether we need a single -rpath flag with a separated argument. -hardcode_libdir_separator=$lt_hardcode_libdir_separator - -# Set to yes if using DIR/libNAME${shared_ext} during linking hardcodes DIR into the -# resulting binary. -hardcode_direct=$hardcode_direct - -# Set to yes if using the -LDIR flag during linking hardcodes DIR into the -# resulting binary. -hardcode_minus_L=$hardcode_minus_L - -# Set to yes if using SHLIBPATH_VAR=DIR during linking hardcodes DIR into -# the resulting binary. -hardcode_shlibpath_var=$hardcode_shlibpath_var - -# Set to yes if building a shared library automatically hardcodes DIR into the library -# and all subsequent libraries and executables linked against it. -hardcode_automatic=$hardcode_automatic - -# Variables whose values should be saved in libtool wrapper scripts and -# restored at relink time. -variables_saved_for_relink="$variables_saved_for_relink" - -# Whether libtool must link a program against all its dependency libraries. -link_all_deplibs=$link_all_deplibs - -# Compile-time system search path for libraries -sys_lib_search_path_spec=$lt_sys_lib_search_path_spec - -# Run-time system search path for libraries -sys_lib_dlsearch_path_spec=$lt_sys_lib_dlsearch_path_spec - -# Fix the shell variable \$srcfile for the compiler. -fix_srcfile_path=$lt_fix_srcfile_path - -# Set to yes if exported symbols are required. -always_export_symbols=$always_export_symbols - -# The commands to list exported symbols. -export_symbols_cmds=$lt_export_symbols_cmds - -# The commands to extract the exported symbol list from a shared archive. -extract_expsyms_cmds=$lt_extract_expsyms_cmds - -# Symbols that should not be listed in the preloaded symbols. -exclude_expsyms=$lt_exclude_expsyms - -# Symbols that must always be exported. -include_expsyms=$lt_include_expsyms - -# ### END LIBTOOL CONFIG - -__EOF__ - - - case $host_os in - aix3*) - cat <<\EOF >> "$cfgfile" - -# AIX sometimes has problems with the GCC collect2 program. For some -# reason, if we set the COLLECT_NAMES environment variable, the problems -# vanish in a puff of smoke. -if test "X${COLLECT_NAMES+set}" != Xset; then - COLLECT_NAMES= - export COLLECT_NAMES -fi -EOF - ;; - esac - - # We use sed instead of cat because bash on DJGPP gets confused if - # if finds mixed CR/LF and LF-only lines. Since sed operates in - # text mode, it properly converts lines to CR/LF. This bash problem - # is reportedly fixed, but why not run on old versions too? - sed '$q' "$ltmain" >> "$cfgfile" || (rm -f "$cfgfile"; exit 1) - - mv -f "$cfgfile" "$ofile" || \ - (rm -f "$ofile" && cp "$cfgfile" "$ofile" && rm -f "$cfgfile") - chmod +x "$ofile" - -else - # If there is no Makefile yet, we rely on a make rule to execute - # `config.status --recheck' to rerun these tests and create the - # libtool script then. - ltmain_in=`echo $ltmain | sed -e 's/\.sh$/.in/'` - if test -f "$ltmain_in"; then - test -f Makefile && make "$ltmain" - fi -fi - - -ac_ext=c -ac_cpp='$CPP $CPPFLAGS' -ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_c_compiler_gnu - -CC="$lt_save_CC" - - -# Check whether --with-tags was given. -if test "${with_tags+set}" = set; then - withval=$with_tags; tagnames="$withval" -fi - - -if test -f "$ltmain" && test -n "$tagnames"; then - if test ! -f "${ofile}"; then - { echo "$as_me:$LINENO: WARNING: output file \`$ofile' does not exist" >&5 -echo "$as_me: WARNING: output file \`$ofile' does not exist" >&2;} - fi - - if test -z "$LTCC"; then - eval "`$SHELL ${ofile} --config | grep '^LTCC='`" - if test -z "$LTCC"; then - { echo "$as_me:$LINENO: WARNING: output file \`$ofile' does not look like a libtool script" >&5 -echo "$as_me: WARNING: output file \`$ofile' does not look like a libtool script" >&2;} - else - { echo "$as_me:$LINENO: WARNING: using \`LTCC=$LTCC', extracted from \`$ofile'" >&5 -echo "$as_me: WARNING: using \`LTCC=$LTCC', extracted from \`$ofile'" >&2;} - fi - fi - if test -z "$LTCFLAGS"; then - eval "`$SHELL ${ofile} --config | grep '^LTCFLAGS='`" - fi - - # Extract list of available tagged configurations in $ofile. - # Note that this assumes the entire list is on one line. - available_tags=`grep "^available_tags=" "${ofile}" | $SED -e 's/available_tags=\(.*$\)/\1/' -e 's/\"//g'` - - lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," - for tagname in $tagnames; do - IFS="$lt_save_ifs" - # Check whether tagname contains only valid characters - case `$echo "X$tagname" | $Xsed -e 's:[-_ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz1234567890,/]::g'` in - "") ;; - *) { { echo "$as_me:$LINENO: error: invalid tag name: $tagname" >&5 -echo "$as_me: error: invalid tag name: $tagname" >&2;} - { (exit 1); exit 1; }; } - ;; - esac - - if grep "^# ### BEGIN LIBTOOL TAG CONFIG: $tagname$" < "${ofile}" > /dev/null - then - { { echo "$as_me:$LINENO: error: tag name \"$tagname\" already exists" >&5 -echo "$as_me: error: tag name \"$tagname\" already exists" >&2;} - { (exit 1); exit 1; }; } - fi - - # Update the list of available tags. - if test -n "$tagname"; then - echo appending configuration tag \"$tagname\" to $ofile - - case $tagname in - CXX) - if test -n "$CXX" && ( test "X$CXX" != "Xno" && - ( (test "X$CXX" = "Xg++" && `g++ -v >/dev/null 2>&1` ) || - (test "X$CXX" != "Xg++"))) ; then - ac_ext=cpp -ac_cpp='$CXXCPP $CPPFLAGS' -ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_cxx_compiler_gnu - - - - -archive_cmds_need_lc_CXX=no -allow_undefined_flag_CXX= -always_export_symbols_CXX=no -archive_expsym_cmds_CXX= -export_dynamic_flag_spec_CXX= -hardcode_direct_CXX=no -hardcode_libdir_flag_spec_CXX= -hardcode_libdir_flag_spec_ld_CXX= -hardcode_libdir_separator_CXX= -hardcode_minus_L_CXX=no -hardcode_shlibpath_var_CXX=unsupported -hardcode_automatic_CXX=no -module_cmds_CXX= -module_expsym_cmds_CXX= -link_all_deplibs_CXX=unknown -old_archive_cmds_CXX=$old_archive_cmds -no_undefined_flag_CXX= -whole_archive_flag_spec_CXX= -enable_shared_with_static_runtimes_CXX=no - -# Dependencies to place before and after the object being linked: -predep_objects_CXX= -postdep_objects_CXX= -predeps_CXX= -postdeps_CXX= -compiler_lib_search_path_CXX= - -# Source file extension for C++ test sources. -ac_ext=cpp - -# Object file extension for compiled C++ test sources. -objext=o -objext_CXX=$objext - -# Code to be used in simple compile tests -lt_simple_compile_test_code="int some_variable = 0;" - -# Code to be used in simple link tests -lt_simple_link_test_code='int main(int, char *[]) { return(0); }' - -# ltmain only uses $CC for tagged configurations so make sure $CC is set. - -# If no C compiler was specified, use CC. -LTCC=${LTCC-"$CC"} - -# If no C compiler flags were specified, use CFLAGS. -LTCFLAGS=${LTCFLAGS-"$CFLAGS"} - -# Allow CC to be a program name with arguments. -compiler=$CC - - -# save warnings/boilerplate of simple test code -ac_outfile=conftest.$ac_objext -echo "$lt_simple_compile_test_code" >conftest.$ac_ext -eval "$ac_compile" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err -_lt_compiler_boilerplate=`cat conftest.err` -$rm conftest* - -ac_outfile=conftest.$ac_objext -echo "$lt_simple_link_test_code" >conftest.$ac_ext -eval "$ac_link" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err -_lt_linker_boilerplate=`cat conftest.err` -$rm conftest* - - -# Allow CC to be a program name with arguments. -lt_save_CC=$CC -lt_save_LD=$LD -lt_save_GCC=$GCC -GCC=$GXX -lt_save_with_gnu_ld=$with_gnu_ld -lt_save_path_LD=$lt_cv_path_LD -if test -n "${lt_cv_prog_gnu_ldcxx+set}"; then - lt_cv_prog_gnu_ld=$lt_cv_prog_gnu_ldcxx -else - $as_unset lt_cv_prog_gnu_ld -fi -if test -n "${lt_cv_path_LDCXX+set}"; then - lt_cv_path_LD=$lt_cv_path_LDCXX -else - $as_unset lt_cv_path_LD -fi -test -z "${LDCXX+set}" || LD=$LDCXX -CC=${CXX-"c++"} -compiler=$CC -compiler_CXX=$CC -for cc_temp in $compiler""; do - case $cc_temp in - compile | *[\\/]compile | ccache | *[\\/]ccache ) ;; - distcc | *[\\/]distcc | purify | *[\\/]purify ) ;; - \-*) ;; - *) break;; - esac -done -cc_basename=`$echo "X$cc_temp" | $Xsed -e 's%.*/%%' -e "s%^$host_alias-%%"` - - -# We don't want -fno-exception wen compiling C++ code, so set the -# no_builtin_flag separately -if test "$GXX" = yes; then - lt_prog_compiler_no_builtin_flag_CXX=' -fno-builtin' -else - lt_prog_compiler_no_builtin_flag_CXX= -fi - -if test "$GXX" = yes; then - # Set up default GNU C++ configuration - - -# Check whether --with-gnu-ld was given. -if test "${with_gnu_ld+set}" = set; then - withval=$with_gnu_ld; test "$withval" = no || with_gnu_ld=yes -else - with_gnu_ld=no -fi - -ac_prog=ld -if test "$GCC" = yes; then - # Check if gcc -print-prog-name=ld gives a path. - { echo "$as_me:$LINENO: checking for ld used by $CC" >&5 -echo $ECHO_N "checking for ld used by $CC... $ECHO_C" >&6; } - case $host in - *-*-mingw*) - # gcc leaves a trailing carriage return which upsets mingw - ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;; - *) - ac_prog=`($CC -print-prog-name=ld) 2>&5` ;; - esac - case $ac_prog in - # Accept absolute paths. - [\\/]* | ?:[\\/]*) - re_direlt='/[^/][^/]*/\.\./' - # Canonicalize the pathname of ld - ac_prog=`echo $ac_prog| $SED 's%\\\\%/%g'` - while echo $ac_prog | grep "$re_direlt" > /dev/null 2>&1; do - ac_prog=`echo $ac_prog| $SED "s%$re_direlt%/%"` - done - test -z "$LD" && LD="$ac_prog" - ;; - "") - # If it fails, then pretend we aren't using GCC. - ac_prog=ld - ;; - *) - # If it is relative, then search for the first ld in PATH. - with_gnu_ld=unknown - ;; - esac -elif test "$with_gnu_ld" = yes; then - { echo "$as_me:$LINENO: checking for GNU ld" >&5 -echo $ECHO_N "checking for GNU ld... $ECHO_C" >&6; } -else - { echo "$as_me:$LINENO: checking for non-GNU ld" >&5 -echo $ECHO_N "checking for non-GNU ld... $ECHO_C" >&6; } -fi -if test "${lt_cv_path_LD+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - if test -z "$LD"; then - lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR - for ac_dir in $PATH; do - IFS="$lt_save_ifs" - test -z "$ac_dir" && ac_dir=. - if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then - lt_cv_path_LD="$ac_dir/$ac_prog" - # Check to see if the program is GNU ld. I'd rather use --version, - # but apparently some variants of GNU ld only accept -v. - # Break only if it was the GNU/non-GNU ld that we prefer. - case `"$lt_cv_path_LD" -v 2>&1 &5 -echo "${ECHO_T}$LD" >&6; } -else - { echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6; } -fi -test -z "$LD" && { { echo "$as_me:$LINENO: error: no acceptable ld found in \$PATH" >&5 -echo "$as_me: error: no acceptable ld found in \$PATH" >&2;} - { (exit 1); exit 1; }; } -{ echo "$as_me:$LINENO: checking if the linker ($LD) is GNU ld" >&5 -echo $ECHO_N "checking if the linker ($LD) is GNU ld... $ECHO_C" >&6; } -if test "${lt_cv_prog_gnu_ld+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - # I'd rather use --version here, but apparently some GNU lds only accept -v. -case `$LD -v 2>&1 &5 -echo "${ECHO_T}$lt_cv_prog_gnu_ld" >&6; } -with_gnu_ld=$lt_cv_prog_gnu_ld - - - - # Check if GNU C++ uses GNU ld as the underlying linker, since the - # archiving commands below assume that GNU ld is being used. - if test "$with_gnu_ld" = yes; then - archive_cmds_CXX='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib' - archive_expsym_cmds_CXX='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' - - hardcode_libdir_flag_spec_CXX='${wl}--rpath ${wl}$libdir' - export_dynamic_flag_spec_CXX='${wl}--export-dynamic' - - # If archive_cmds runs LD, not CC, wlarc should be empty - # XXX I think wlarc can be eliminated in ltcf-cxx, but I need to - # investigate it a little bit more. (MM) - wlarc='${wl}' - - # ancient GNU ld didn't support --whole-archive et. al. - if eval "`$CC -print-prog-name=ld` --help 2>&1" | \ - grep 'no-whole-archive' > /dev/null; then - whole_archive_flag_spec_CXX="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' - else - whole_archive_flag_spec_CXX= - fi - else - with_gnu_ld=no - wlarc= - - # A generic and very simple default shared library creation - # command for GNU C++ for the case where it uses the native - # linker, instead of GNU ld. If possible, this setting should - # overridden to take advantage of the native linker features on - # the platform it is being used on. - archive_cmds_CXX='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib' - fi - - # Commands to make compiler produce verbose output that lists - # what "hidden" libraries, object files and flags are used when - # linking a shared library. - output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep "\-L"' - -else - GXX=no - with_gnu_ld=no - wlarc= -fi - -# PORTME: fill in a description of your system's C++ link characteristics -{ echo "$as_me:$LINENO: checking whether the $compiler linker ($LD) supports shared libraries" >&5 -echo $ECHO_N "checking whether the $compiler linker ($LD) supports shared libraries... $ECHO_C" >&6; } -ld_shlibs_CXX=yes -case $host_os in - aix3*) - # FIXME: insert proper C++ library support - ld_shlibs_CXX=no - ;; - aix4* | aix5*) - if test "$host_cpu" = ia64; then - # On IA64, the linker does run time linking by default, so we don't - # have to do anything special. - aix_use_runtimelinking=no - exp_sym_flag='-Bexport' - no_entry_flag="" - else - aix_use_runtimelinking=no - - # Test if we are trying to use run time linking or normal - # AIX style linking. If -brtl is somewhere in LDFLAGS, we - # need to do runtime linking. - case $host_os in aix4.[23]|aix4.[23].*|aix5*) - for ld_flag in $LDFLAGS; do - case $ld_flag in - *-brtl*) - aix_use_runtimelinking=yes - break - ;; - esac - done - ;; - esac - - exp_sym_flag='-bexport' - no_entry_flag='-bnoentry' - fi - - # When large executables or shared objects are built, AIX ld can - # have problems creating the table of contents. If linking a library - # or program results in "error TOC overflow" add -mminimal-toc to - # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not - # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS. - - archive_cmds_CXX='' - hardcode_direct_CXX=yes - hardcode_libdir_separator_CXX=':' - link_all_deplibs_CXX=yes - - if test "$GXX" = yes; then - case $host_os in aix4.[012]|aix4.[012].*) - # We only want to do this on AIX 4.2 and lower, the check - # below for broken collect2 doesn't work under 4.3+ - collect2name=`${CC} -print-prog-name=collect2` - if test -f "$collect2name" && \ - strings "$collect2name" | grep resolve_lib_name >/dev/null - then - # We have reworked collect2 - : - else - # We have old collect2 - hardcode_direct_CXX=unsupported - # It fails to find uninstalled libraries when the uninstalled - # path is not listed in the libpath. Setting hardcode_minus_L - # to unsupported forces relinking - hardcode_minus_L_CXX=yes - hardcode_libdir_flag_spec_CXX='-L$libdir' - hardcode_libdir_separator_CXX= - fi - ;; - esac - shared_flag='-shared' - if test "$aix_use_runtimelinking" = yes; then - shared_flag="$shared_flag "'${wl}-G' - fi - else - # not using gcc - if test "$host_cpu" = ia64; then - # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release - # chokes on -Wl,-G. The following line is correct: - shared_flag='-G' - else - if test "$aix_use_runtimelinking" = yes; then - shared_flag='${wl}-G' - else - shared_flag='${wl}-bM:SRE' - fi - fi - fi - - # It seems that -bexpall does not export symbols beginning with - # underscore (_), so it is better to generate a list of symbols to export. - always_export_symbols_CXX=yes - if test "$aix_use_runtimelinking" = yes; then - # Warning - without using the other runtime loading flags (-brtl), - # -berok will link without error, but may produce a broken library. - allow_undefined_flag_CXX='-berok' - # Determine the default libpath from the value encoded in an empty executable. - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ - -int -main () -{ - - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext conftest$ac_exeext -if { (ac_try="$ac_link" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_link") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_cxx_werror_flag" || - test ! -s conftest.err - } && test -s conftest$ac_exeext && - $as_test_x conftest$ac_exeext; then - -lt_aix_libpath_sed=' - /Import File Strings/,/^$/ { - /^0/ { - s/^0 *\(.*\)$/\1/ - p - } - }' -aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` -# Check for a 64-bit object if we didn't find anything. -if test -z "$aix_libpath"; then - aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` -fi -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - -fi - -rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ - conftest$ac_exeext conftest.$ac_ext -if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi - - hardcode_libdir_flag_spec_CXX='${wl}-blibpath:$libdir:'"$aix_libpath" - - archive_expsym_cmds_CXX="\$CC"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then echo "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag" - else - if test "$host_cpu" = ia64; then - hardcode_libdir_flag_spec_CXX='${wl}-R $libdir:/usr/lib:/lib' - allow_undefined_flag_CXX="-z nodefs" - archive_expsym_cmds_CXX="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$exp_sym_flag:\$export_symbols" - else - # Determine the default libpath from the value encoded in an empty executable. - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ - -int -main () -{ - - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext conftest$ac_exeext -if { (ac_try="$ac_link" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_link") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_cxx_werror_flag" || - test ! -s conftest.err - } && test -s conftest$ac_exeext && - $as_test_x conftest$ac_exeext; then - -lt_aix_libpath_sed=' - /Import File Strings/,/^$/ { - /^0/ { - s/^0 *\(.*\)$/\1/ - p - } - }' -aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` -# Check for a 64-bit object if we didn't find anything. -if test -z "$aix_libpath"; then - aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` -fi -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - -fi - -rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ - conftest$ac_exeext conftest.$ac_ext -if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi - - hardcode_libdir_flag_spec_CXX='${wl}-blibpath:$libdir:'"$aix_libpath" - # Warning - without using the other run time loading flags, - # -berok will link without error, but may produce a broken library. - no_undefined_flag_CXX=' ${wl}-bernotok' - allow_undefined_flag_CXX=' ${wl}-berok' - # Exported symbols can be pulled into shared objects from archives - whole_archive_flag_spec_CXX='$convenience' - archive_cmds_need_lc_CXX=yes - # This is similar to how AIX traditionally builds its shared libraries. - archive_expsym_cmds_CXX="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs ${wl}-bnoentry $compiler_flags ${wl}-bE:$export_symbols${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname' - fi - fi - ;; - - beos*) - if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then - allow_undefined_flag_CXX=unsupported - # Joseph Beckenbach says some releases of gcc - # support --undefined. This deserves some investigation. FIXME - archive_cmds_CXX='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' - else - ld_shlibs_CXX=no - fi - ;; - - chorus*) - case $cc_basename in - *) - # FIXME: insert proper C++ library support - ld_shlibs_CXX=no - ;; - esac - ;; - - cygwin* | mingw* | pw32*) - # _LT_AC_TAGVAR(hardcode_libdir_flag_spec, CXX) is actually meaningless, - # as there is no search path for DLLs. - hardcode_libdir_flag_spec_CXX='-L$libdir' - allow_undefined_flag_CXX=unsupported - always_export_symbols_CXX=no - enable_shared_with_static_runtimes_CXX=yes - - if $LD --help 2>&1 | grep 'auto-import' > /dev/null; then - archive_cmds_CXX='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' - # If the export-symbols file already is a .def file (1st line - # is EXPORTS), use it as is; otherwise, prepend... - archive_expsym_cmds_CXX='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then - cp $export_symbols $output_objdir/$soname.def; - else - echo EXPORTS > $output_objdir/$soname.def; - cat $export_symbols >> $output_objdir/$soname.def; - fi~ - $CC -shared -nostdlib $output_objdir/$soname.def $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' - else - ld_shlibs_CXX=no - fi - ;; - darwin* | rhapsody*) - case $host_os in - rhapsody* | darwin1.[012]) - allow_undefined_flag_CXX='${wl}-undefined ${wl}suppress' - ;; - *) # Darwin 1.3 on - if test -z ${MACOSX_DEPLOYMENT_TARGET} ; then - allow_undefined_flag_CXX='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' - else - case ${MACOSX_DEPLOYMENT_TARGET} in - 10.[012]) - allow_undefined_flag_CXX='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' - ;; - 10.*) - allow_undefined_flag_CXX='${wl}-undefined ${wl}dynamic_lookup' - ;; - esac - fi - ;; - esac - archive_cmds_need_lc_CXX=no - hardcode_direct_CXX=no - hardcode_automatic_CXX=yes - hardcode_shlibpath_var_CXX=unsupported - whole_archive_flag_spec_CXX='' - link_all_deplibs_CXX=yes - - if test "$GXX" = yes ; then - lt_int_apple_cc_single_mod=no - output_verbose_link_cmd='echo' - if $CC -dumpspecs 2>&1 | $EGREP 'single_module' >/dev/null ; then - lt_int_apple_cc_single_mod=yes - fi - if test "X$lt_int_apple_cc_single_mod" = Xyes ; then - archive_cmds_CXX='$CC -dynamiclib -single_module $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags -install_name $rpath/$soname $verstring' - else - archive_cmds_CXX='$CC -r -keep_private_externs -nostdlib -o ${lib}-master.o $libobjs~$CC -dynamiclib $allow_undefined_flag -o $lib ${lib}-master.o $deplibs $compiler_flags -install_name $rpath/$soname $verstring' - fi - module_cmds_CXX='$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags' - # Don't fix this by using the ld -exported_symbols_list flag, it doesn't exist in older darwin lds - if test "X$lt_int_apple_cc_single_mod" = Xyes ; then - archive_expsym_cmds_CXX='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -dynamiclib -single_module $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags -install_name $rpath/$soname $verstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' - else - archive_expsym_cmds_CXX='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -r -keep_private_externs -nostdlib -o ${lib}-master.o $libobjs~$CC -dynamiclib $allow_undefined_flag -o $lib ${lib}-master.o $deplibs $compiler_flags -install_name $rpath/$soname $verstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' - fi - module_expsym_cmds_CXX='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' - else - case $cc_basename in - xlc*) - output_verbose_link_cmd='echo' - archive_cmds_CXX='$CC -qmkshrobj ${wl}-single_module $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-install_name ${wl}`echo $rpath/$soname` $xlcverstring' - module_cmds_CXX='$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags' - # Don't fix this by using the ld -exported_symbols_list flag, it doesn't exist in older darwin lds - archive_expsym_cmds_CXX='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -qmkshrobj ${wl}-single_module $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-install_name ${wl}$rpath/$soname $xlcverstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' - module_expsym_cmds_CXX='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' - ;; - *) - ld_shlibs_CXX=no - ;; - esac - fi - ;; - - dgux*) - case $cc_basename in - ec++*) - # FIXME: insert proper C++ library support - ld_shlibs_CXX=no - ;; - ghcx*) - # Green Hills C++ Compiler - # FIXME: insert proper C++ library support - ld_shlibs_CXX=no - ;; - *) - # FIXME: insert proper C++ library support - ld_shlibs_CXX=no - ;; - esac - ;; - freebsd[12]*) - # C++ shared libraries reported to be fairly broken before switch to ELF - ld_shlibs_CXX=no - ;; - freebsd-elf*) - archive_cmds_need_lc_CXX=no - ;; - freebsd* | dragonfly*) - # FreeBSD 3 and later use GNU C++ and GNU ld with standard ELF - # conventions - ld_shlibs_CXX=yes - ;; - gnu*) - ;; - hpux9*) - hardcode_libdir_flag_spec_CXX='${wl}+b ${wl}$libdir' - hardcode_libdir_separator_CXX=: - export_dynamic_flag_spec_CXX='${wl}-E' - hardcode_direct_CXX=yes - hardcode_minus_L_CXX=yes # Not in the search PATH, - # but as the default - # location of the library. - - case $cc_basename in - CC*) - # FIXME: insert proper C++ library support - ld_shlibs_CXX=no - ;; - aCC*) - archive_cmds_CXX='$rm $output_objdir/$soname~$CC -b ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' - # Commands to make compiler produce verbose output that lists - # what "hidden" libraries, object files and flags are used when - # linking a shared library. - # - # There doesn't appear to be a way to prevent this compiler from - # explicitly linking system object files so we need to strip them - # from the output so that they don't get included in the library - # dependencies. - output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | grep "[-]L"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; echo $list' - ;; - *) - if test "$GXX" = yes; then - archive_cmds_CXX='$rm $output_objdir/$soname~$CC -shared -nostdlib -fPIC ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' - else - # FIXME: insert proper C++ library support - ld_shlibs_CXX=no - fi - ;; - esac - ;; - hpux10*|hpux11*) - if test $with_gnu_ld = no; then - hardcode_libdir_flag_spec_CXX='${wl}+b ${wl}$libdir' - hardcode_libdir_separator_CXX=: - - case $host_cpu in - hppa*64*|ia64*) ;; - *) - export_dynamic_flag_spec_CXX='${wl}-E' - ;; - esac - fi - case $host_cpu in - hppa*64*|ia64*) - hardcode_direct_CXX=no - hardcode_shlibpath_var_CXX=no - ;; - *) - hardcode_direct_CXX=yes - hardcode_minus_L_CXX=yes # Not in the search PATH, - # but as the default - # location of the library. - ;; - esac - - case $cc_basename in - CC*) - # FIXME: insert proper C++ library support - ld_shlibs_CXX=no - ;; - aCC*) - case $host_cpu in - hppa*64*) - archive_cmds_CXX='$CC -b ${wl}+h ${wl}$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' - ;; - ia64*) - archive_cmds_CXX='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' - ;; - *) - archive_cmds_CXX='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' - ;; - esac - # Commands to make compiler produce verbose output that lists - # what "hidden" libraries, object files and flags are used when - # linking a shared library. - # - # There doesn't appear to be a way to prevent this compiler from - # explicitly linking system object files so we need to strip them - # from the output so that they don't get included in the library - # dependencies. - output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | grep "\-L"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; echo $list' - ;; - *) - if test "$GXX" = yes; then - if test $with_gnu_ld = no; then - case $host_cpu in - hppa*64*) - archive_cmds_CXX='$CC -shared -nostdlib -fPIC ${wl}+h ${wl}$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' - ;; - ia64*) - archive_cmds_CXX='$CC -shared -nostdlib -fPIC ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' - ;; - *) - archive_cmds_CXX='$CC -shared -nostdlib -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' - ;; - esac - fi - else - # FIXME: insert proper C++ library support - ld_shlibs_CXX=no - fi - ;; - esac - ;; - interix[3-9]*) - hardcode_direct_CXX=no - hardcode_shlibpath_var_CXX=no - hardcode_libdir_flag_spec_CXX='${wl}-rpath,$libdir' - export_dynamic_flag_spec_CXX='${wl}-E' - # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc. - # Instead, shared libraries are loaded at an image base (0x10000000 by - # default) and relocated if they conflict, which is a slow very memory - # consuming and fragmenting process. To avoid this, we pick a random, - # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link - # time. Moving up from 0x10000000 also allows more sbrk(2) space. - archive_cmds_CXX='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' - archive_expsym_cmds_CXX='sed "s,^,_," $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--retain-symbols-file,$output_objdir/$soname.expsym ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' - ;; - irix5* | irix6*) - case $cc_basename in - CC*) - # SGI C++ - archive_cmds_CXX='$CC -shared -all -multigot $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib' - - # Archives containing C++ object files must be created using - # "CC -ar", where "CC" is the IRIX C++ compiler. This is - # necessary to make sure instantiated templates are included - # in the archive. - old_archive_cmds_CXX='$CC -ar -WR,-u -o $oldlib $oldobjs' - ;; - *) - if test "$GXX" = yes; then - if test "$with_gnu_ld" = no; then - archive_cmds_CXX='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' - else - archive_cmds_CXX='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` -o $lib' - fi - fi - link_all_deplibs_CXX=yes - ;; - esac - hardcode_libdir_flag_spec_CXX='${wl}-rpath ${wl}$libdir' - hardcode_libdir_separator_CXX=: - ;; - linux* | k*bsd*-gnu) - case $cc_basename in - KCC*) - # Kuck and Associates, Inc. (KAI) C++ Compiler - - # KCC will only create a shared library if the output file - # ends with ".so" (or ".sl" for HP-UX), so rename the library - # to its proper name (with version) after linking. - archive_cmds_CXX='tempext=`echo $shared_ext | $SED -e '\''s/\([^()0-9A-Za-z{}]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib' - archive_expsym_cmds_CXX='tempext=`echo $shared_ext | $SED -e '\''s/\([^()0-9A-Za-z{}]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib ${wl}-retain-symbols-file,$export_symbols; mv \$templib $lib' - # Commands to make compiler produce verbose output that lists - # what "hidden" libraries, object files and flags are used when - # linking a shared library. - # - # There doesn't appear to be a way to prevent this compiler from - # explicitly linking system object files so we need to strip them - # from the output so that they don't get included in the library - # dependencies. - output_verbose_link_cmd='templist=`$CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1 | grep "ld"`; rm -f libconftest$shared_ext; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; echo $list' - - hardcode_libdir_flag_spec_CXX='${wl}--rpath,$libdir' - export_dynamic_flag_spec_CXX='${wl}--export-dynamic' - - # Archives containing C++ object files must be created using - # "CC -Bstatic", where "CC" is the KAI C++ compiler. - old_archive_cmds_CXX='$CC -Bstatic -o $oldlib $oldobjs' - ;; - icpc*) - # Intel C++ - with_gnu_ld=yes - # version 8.0 and above of icpc choke on multiply defined symbols - # if we add $predep_objects and $postdep_objects, however 7.1 and - # earlier do not add the objects themselves. - case `$CC -V 2>&1` in - *"Version 7."*) - archive_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib' - archive_expsym_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' - ;; - *) # Version 8.0 or newer - tmp_idyn= - case $host_cpu in - ia64*) tmp_idyn=' -i_dynamic';; - esac - archive_cmds_CXX='$CC -shared'"$tmp_idyn"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' - archive_expsym_cmds_CXX='$CC -shared'"$tmp_idyn"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' - ;; - esac - archive_cmds_need_lc_CXX=no - hardcode_libdir_flag_spec_CXX='${wl}-rpath,$libdir' - export_dynamic_flag_spec_CXX='${wl}--export-dynamic' - whole_archive_flag_spec_CXX='${wl}--whole-archive$convenience ${wl}--no-whole-archive' - ;; - pgCC*) - # Portland Group C++ compiler - archive_cmds_CXX='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname -o $lib' - archive_expsym_cmds_CXX='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname ${wl}-retain-symbols-file ${wl}$export_symbols -o $lib' - - hardcode_libdir_flag_spec_CXX='${wl}--rpath ${wl}$libdir' - export_dynamic_flag_spec_CXX='${wl}--export-dynamic' - whole_archive_flag_spec_CXX='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $echo \"$new_convenience\"` ${wl}--no-whole-archive' - ;; - cxx*) - # Compaq C++ - archive_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib' - archive_expsym_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib ${wl}-retain-symbols-file $wl$export_symbols' - - runpath_var=LD_RUN_PATH - hardcode_libdir_flag_spec_CXX='-rpath $libdir' - hardcode_libdir_separator_CXX=: - - # Commands to make compiler produce verbose output that lists - # what "hidden" libraries, object files and flags are used when - # linking a shared library. - # - # There doesn't appear to be a way to prevent this compiler from - # explicitly linking system object files so we need to strip them - # from the output so that they don't get included in the library - # dependencies. - output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep "ld"`; templist=`echo $templist | $SED "s/\(^.*ld.*\)\( .*ld .*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; echo $list' - ;; - *) - case `$CC -V 2>&1 | sed 5q` in - *Sun\ C*) - # Sun C++ 5.9 - no_undefined_flag_CXX=' -zdefs' - archive_cmds_CXX='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' - archive_expsym_cmds_CXX='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-retain-symbols-file ${wl}$export_symbols' - hardcode_libdir_flag_spec_CXX='-R$libdir' - whole_archive_flag_spec_CXX='${wl}--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; $echo \"$new_convenience\"` ${wl}--no-whole-archive' - - # Not sure whether something based on - # $CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1 - # would be better. - output_verbose_link_cmd='echo' - - # Archives containing C++ object files must be created using - # "CC -xar", where "CC" is the Sun C++ compiler. This is - # necessary to make sure instantiated templates are included - # in the archive. - old_archive_cmds_CXX='$CC -xar -o $oldlib $oldobjs' - ;; - esac - ;; - esac - ;; - lynxos*) - # FIXME: insert proper C++ library support - ld_shlibs_CXX=no - ;; - m88k*) - # FIXME: insert proper C++ library support - ld_shlibs_CXX=no - ;; - mvs*) - case $cc_basename in - cxx*) - # FIXME: insert proper C++ library support - ld_shlibs_CXX=no - ;; - *) - # FIXME: insert proper C++ library support - ld_shlibs_CXX=no - ;; - esac - ;; - netbsd*) - if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then - archive_cmds_CXX='$LD -Bshareable -o $lib $predep_objects $libobjs $deplibs $postdep_objects $linker_flags' - wlarc= - hardcode_libdir_flag_spec_CXX='-R$libdir' - hardcode_direct_CXX=yes - hardcode_shlibpath_var_CXX=no - fi - # Workaround some broken pre-1.5 toolchains - output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep conftest.$objext | $SED -e "s:-lgcc -lc -lgcc::"' - ;; - openbsd2*) - # C++ shared libraries are fairly broken - ld_shlibs_CXX=no - ;; - openbsd*) - if test -f /usr/libexec/ld.so; then - hardcode_direct_CXX=yes - hardcode_shlibpath_var_CXX=no - archive_cmds_CXX='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib' - hardcode_libdir_flag_spec_CXX='${wl}-rpath,$libdir' - if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then - archive_expsym_cmds_CXX='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-retain-symbols-file,$export_symbols -o $lib' - export_dynamic_flag_spec_CXX='${wl}-E' - whole_archive_flag_spec_CXX="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' - fi - output_verbose_link_cmd='echo' - else - ld_shlibs_CXX=no - fi - ;; - osf3*) - case $cc_basename in - KCC*) - # Kuck and Associates, Inc. (KAI) C++ Compiler - - # KCC will only create a shared library if the output file - # ends with ".so" (or ".sl" for HP-UX), so rename the library - # to its proper name (with version) after linking. - archive_cmds_CXX='tempext=`echo $shared_ext | $SED -e '\''s/\([^()0-9A-Za-z{}]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib' - - hardcode_libdir_flag_spec_CXX='${wl}-rpath,$libdir' - hardcode_libdir_separator_CXX=: - - # Archives containing C++ object files must be created using - # "CC -Bstatic", where "CC" is the KAI C++ compiler. - old_archive_cmds_CXX='$CC -Bstatic -o $oldlib $oldobjs' - - ;; - RCC*) - # Rational C++ 2.4.1 - # FIXME: insert proper C++ library support - ld_shlibs_CXX=no - ;; - cxx*) - allow_undefined_flag_CXX=' ${wl}-expect_unresolved ${wl}\*' - archive_cmds_CXX='$CC -shared${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $soname `test -n "$verstring" && echo ${wl}-set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib' - - hardcode_libdir_flag_spec_CXX='${wl}-rpath ${wl}$libdir' - hardcode_libdir_separator_CXX=: - - # Commands to make compiler produce verbose output that lists - # what "hidden" libraries, object files and flags are used when - # linking a shared library. - # - # There doesn't appear to be a way to prevent this compiler from - # explicitly linking system object files so we need to strip them - # from the output so that they don't get included in the library - # dependencies. - output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep "ld" | grep -v "ld:"`; templist=`echo $templist | $SED "s/\(^.*ld.*\)\( .*ld.*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; echo $list' - ;; - *) - if test "$GXX" = yes && test "$with_gnu_ld" = no; then - allow_undefined_flag_CXX=' ${wl}-expect_unresolved ${wl}\*' - archive_cmds_CXX='$CC -shared -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' - - hardcode_libdir_flag_spec_CXX='${wl}-rpath ${wl}$libdir' - hardcode_libdir_separator_CXX=: - - # Commands to make compiler produce verbose output that lists - # what "hidden" libraries, object files and flags are used when - # linking a shared library. - output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep "\-L"' - - else - # FIXME: insert proper C++ library support - ld_shlibs_CXX=no - fi - ;; - esac - ;; - osf4* | osf5*) - case $cc_basename in - KCC*) - # Kuck and Associates, Inc. (KAI) C++ Compiler - - # KCC will only create a shared library if the output file - # ends with ".so" (or ".sl" for HP-UX), so rename the library - # to its proper name (with version) after linking. - archive_cmds_CXX='tempext=`echo $shared_ext | $SED -e '\''s/\([^()0-9A-Za-z{}]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib' - - hardcode_libdir_flag_spec_CXX='${wl}-rpath,$libdir' - hardcode_libdir_separator_CXX=: - - # Archives containing C++ object files must be created using - # the KAI C++ compiler. - old_archive_cmds_CXX='$CC -o $oldlib $oldobjs' - ;; - RCC*) - # Rational C++ 2.4.1 - # FIXME: insert proper C++ library support - ld_shlibs_CXX=no - ;; - cxx*) - allow_undefined_flag_CXX=' -expect_unresolved \*' - archive_cmds_CXX='$CC -shared${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib' - archive_expsym_cmds_CXX='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done~ - echo "-hidden">> $lib.exp~ - $CC -shared$allow_undefined_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname -Wl,-input -Wl,$lib.exp `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib~ - $rm $lib.exp' - - hardcode_libdir_flag_spec_CXX='-rpath $libdir' - hardcode_libdir_separator_CXX=: - - # Commands to make compiler produce verbose output that lists - # what "hidden" libraries, object files and flags are used when - # linking a shared library. - # - # There doesn't appear to be a way to prevent this compiler from - # explicitly linking system object files so we need to strip them - # from the output so that they don't get included in the library - # dependencies. - output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep "ld" | grep -v "ld:"`; templist=`echo $templist | $SED "s/\(^.*ld.*\)\( .*ld.*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; echo $list' - ;; - *) - if test "$GXX" = yes && test "$with_gnu_ld" = no; then - allow_undefined_flag_CXX=' ${wl}-expect_unresolved ${wl}\*' - archive_cmds_CXX='$CC -shared -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' - - hardcode_libdir_flag_spec_CXX='${wl}-rpath ${wl}$libdir' - hardcode_libdir_separator_CXX=: - - # Commands to make compiler produce verbose output that lists - # what "hidden" libraries, object files and flags are used when - # linking a shared library. - output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep "\-L"' - - else - # FIXME: insert proper C++ library support - ld_shlibs_CXX=no - fi - ;; - esac - ;; - psos*) - # FIXME: insert proper C++ library support - ld_shlibs_CXX=no - ;; - sunos4*) - case $cc_basename in - CC*) - # Sun C++ 4.x - # FIXME: insert proper C++ library support - ld_shlibs_CXX=no - ;; - lcc*) - # Lucid - # FIXME: insert proper C++ library support - ld_shlibs_CXX=no - ;; - *) - # FIXME: insert proper C++ library support - ld_shlibs_CXX=no - ;; - esac - ;; - solaris*) - case $cc_basename in - CC*) - # Sun C++ 4.2, 5.x and Centerline C++ - archive_cmds_need_lc_CXX=yes - no_undefined_flag_CXX=' -zdefs' - archive_cmds_CXX='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' - archive_expsym_cmds_CXX='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~ - $CC -G${allow_undefined_flag} ${wl}-M ${wl}$lib.exp -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$rm $lib.exp' - - hardcode_libdir_flag_spec_CXX='-R$libdir' - hardcode_shlibpath_var_CXX=no - case $host_os in - solaris2.[0-5] | solaris2.[0-5].*) ;; - *) - # The compiler driver will combine and reorder linker options, - # but understands `-z linker_flag'. - # Supported since Solaris 2.6 (maybe 2.5.1?) - whole_archive_flag_spec_CXX='-z allextract$convenience -z defaultextract' - ;; - esac - link_all_deplibs_CXX=yes - - output_verbose_link_cmd='echo' - - # Archives containing C++ object files must be created using - # "CC -xar", where "CC" is the Sun C++ compiler. This is - # necessary to make sure instantiated templates are included - # in the archive. - old_archive_cmds_CXX='$CC -xar -o $oldlib $oldobjs' - ;; - gcx*) - # Green Hills C++ Compiler - archive_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib' - - # The C++ compiler must be used to create the archive. - old_archive_cmds_CXX='$CC $LDFLAGS -archive -o $oldlib $oldobjs' - ;; - *) - # GNU C++ compiler with Solaris linker - if test "$GXX" = yes && test "$with_gnu_ld" = no; then - no_undefined_flag_CXX=' ${wl}-z ${wl}defs' - if $CC --version | grep -v '^2\.7' > /dev/null; then - archive_cmds_CXX='$CC -shared -nostdlib $LDFLAGS $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib' - archive_expsym_cmds_CXX='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~ - $CC -shared -nostdlib ${wl}-M $wl$lib.exp -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$rm $lib.exp' - - # Commands to make compiler produce verbose output that lists - # what "hidden" libraries, object files and flags are used when - # linking a shared library. - output_verbose_link_cmd="$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep \"\-L\"" - else - # g++ 2.7 appears to require `-G' NOT `-shared' on this - # platform. - archive_cmds_CXX='$CC -G -nostdlib $LDFLAGS $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib' - archive_expsym_cmds_CXX='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~ - $CC -G -nostdlib ${wl}-M $wl$lib.exp -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$rm $lib.exp' - - # Commands to make compiler produce verbose output that lists - # what "hidden" libraries, object files and flags are used when - # linking a shared library. - output_verbose_link_cmd="$CC -G $CFLAGS -v conftest.$objext 2>&1 | grep \"\-L\"" - fi - - hardcode_libdir_flag_spec_CXX='${wl}-R $wl$libdir' - case $host_os in - solaris2.[0-5] | solaris2.[0-5].*) ;; - *) - whole_archive_flag_spec_CXX='${wl}-z ${wl}allextract$convenience ${wl}-z ${wl}defaultextract' - ;; - esac - fi - ;; - esac - ;; - sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[01].[10]* | unixware7* | sco3.2v5.0.[024]*) - no_undefined_flag_CXX='${wl}-z,text' - archive_cmds_need_lc_CXX=no - hardcode_shlibpath_var_CXX=no - runpath_var='LD_RUN_PATH' - - case $cc_basename in - CC*) - archive_cmds_CXX='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - archive_expsym_cmds_CXX='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - ;; - *) - archive_cmds_CXX='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - archive_expsym_cmds_CXX='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - ;; - esac - ;; - sysv5* | sco3.2v5* | sco5v6*) - # Note: We can NOT use -z defs as we might desire, because we do not - # link with -lc, and that would cause any symbols used from libc to - # always be unresolved, which means just about no library would - # ever link correctly. If we're not using GNU ld we use -z text - # though, which does catch some bad symbols but isn't as heavy-handed - # as -z defs. - # For security reasons, it is highly recommended that you always - # use absolute paths for naming shared libraries, and exclude the - # DT_RUNPATH tag from executables and libraries. But doing so - # requires that you compile everything twice, which is a pain. - # So that behaviour is only enabled if SCOABSPATH is set to a - # non-empty value in the environment. Most likely only useful for - # creating official distributions of packages. - # This is a hack until libtool officially supports absolute path - # names for shared libraries. - no_undefined_flag_CXX='${wl}-z,text' - allow_undefined_flag_CXX='${wl}-z,nodefs' - archive_cmds_need_lc_CXX=no - hardcode_shlibpath_var_CXX=no - hardcode_libdir_flag_spec_CXX='`test -z "$SCOABSPATH" && echo ${wl}-R,$libdir`' - hardcode_libdir_separator_CXX=':' - link_all_deplibs_CXX=yes - export_dynamic_flag_spec_CXX='${wl}-Bexport' - runpath_var='LD_RUN_PATH' - - case $cc_basename in - CC*) - archive_cmds_CXX='$CC -G ${wl}-h,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags' - archive_expsym_cmds_CXX='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags' - ;; - *) - archive_cmds_CXX='$CC -shared ${wl}-h,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags' - archive_expsym_cmds_CXX='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags' - ;; - esac - ;; - tandem*) - case $cc_basename in - NCC*) - # NonStop-UX NCC 3.20 - # FIXME: insert proper C++ library support - ld_shlibs_CXX=no - ;; - *) - # FIXME: insert proper C++ library support - ld_shlibs_CXX=no - ;; - esac - ;; - vxworks*) - # FIXME: insert proper C++ library support - ld_shlibs_CXX=no - ;; - *) - # FIXME: insert proper C++ library support - ld_shlibs_CXX=no - ;; -esac -{ echo "$as_me:$LINENO: result: $ld_shlibs_CXX" >&5 -echo "${ECHO_T}$ld_shlibs_CXX" >&6; } -test "$ld_shlibs_CXX" = no && can_build_shared=no - -GCC_CXX="$GXX" -LD_CXX="$LD" - - -cat > conftest.$ac_ext <&5 - (eval $ac_compile) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; then - # Parse the compiler output and extract the necessary - # objects, libraries and library flags. - - # Sentinel used to keep track of whether or not we are before - # the conftest object file. - pre_test_object_deps_done=no - - # The `*' in the case matches for architectures that use `case' in - # $output_verbose_cmd can trigger glob expansion during the loop - # eval without this substitution. - output_verbose_link_cmd=`$echo "X$output_verbose_link_cmd" | $Xsed -e "$no_glob_subst"` - - for p in `eval $output_verbose_link_cmd`; do - case $p in - - -L* | -R* | -l*) - # Some compilers place space between "-{L,R}" and the path. - # Remove the space. - if test $p = "-L" \ - || test $p = "-R"; then - prev=$p - continue - else - prev= - fi - - if test "$pre_test_object_deps_done" = no; then - case $p in - -L* | -R*) - # Internal compiler library paths should come after those - # provided the user. The postdeps already come after the - # user supplied libs so there is no need to process them. - if test -z "$compiler_lib_search_path_CXX"; then - compiler_lib_search_path_CXX="${prev}${p}" - else - compiler_lib_search_path_CXX="${compiler_lib_search_path_CXX} ${prev}${p}" - fi - ;; - # The "-l" case would never come before the object being - # linked, so don't bother handling this case. - esac - else - if test -z "$postdeps_CXX"; then - postdeps_CXX="${prev}${p}" - else - postdeps_CXX="${postdeps_CXX} ${prev}${p}" - fi - fi - ;; - - *.$objext) - # This assumes that the test object file only shows up - # once in the compiler output. - if test "$p" = "conftest.$objext"; then - pre_test_object_deps_done=yes - continue - fi - - if test "$pre_test_object_deps_done" = no; then - if test -z "$predep_objects_CXX"; then - predep_objects_CXX="$p" - else - predep_objects_CXX="$predep_objects_CXX $p" - fi - else - if test -z "$postdep_objects_CXX"; then - postdep_objects_CXX="$p" - else - postdep_objects_CXX="$postdep_objects_CXX $p" - fi - fi - ;; - - *) ;; # Ignore the rest. - - esac - done - - # Clean up. - rm -f a.out a.exe -else - echo "libtool.m4: error: problem compiling CXX test program" -fi - -$rm -f confest.$objext - -# PORTME: override above test on systems where it is broken -case $host_os in -interix[3-9]*) - # Interix 3.5 installs completely hosed .la files for C++, so rather than - # hack all around it, let's just trust "g++" to DTRT. - predep_objects_CXX= - postdep_objects_CXX= - postdeps_CXX= - ;; - -linux*) - case `$CC -V 2>&1 | sed 5q` in - *Sun\ C*) - # Sun C++ 5.9 - # - # The more standards-conforming stlport4 library is - # incompatible with the Cstd library. Avoid specifying - # it if it's in CXXFLAGS. Ignore libCrun as - # -library=stlport4 depends on it. - case " $CXX $CXXFLAGS " in - *" -library=stlport4 "*) - solaris_use_stlport4=yes - ;; - esac - if test "$solaris_use_stlport4" != yes; then - postdeps_CXX='-library=Cstd -library=Crun' - fi - ;; - esac - ;; - -solaris*) - case $cc_basename in - CC*) - # The more standards-conforming stlport4 library is - # incompatible with the Cstd library. Avoid specifying - # it if it's in CXXFLAGS. Ignore libCrun as - # -library=stlport4 depends on it. - case " $CXX $CXXFLAGS " in - *" -library=stlport4 "*) - solaris_use_stlport4=yes - ;; - esac - - # Adding this requires a known-good setup of shared libraries for - # Sun compiler versions before 5.6, else PIC objects from an old - # archive will be linked into the output, leading to subtle bugs. - if test "$solaris_use_stlport4" != yes; then - postdeps_CXX='-library=Cstd -library=Crun' - fi - ;; - esac - ;; -esac - - -case " $postdeps_CXX " in -*" -lc "*) archive_cmds_need_lc_CXX=no ;; -esac - -lt_prog_compiler_wl_CXX= -lt_prog_compiler_pic_CXX= -lt_prog_compiler_static_CXX= - -{ echo "$as_me:$LINENO: checking for $compiler option to produce PIC" >&5 -echo $ECHO_N "checking for $compiler option to produce PIC... $ECHO_C" >&6; } - - # C++ specific cases for pic, static, wl, etc. - if test "$GXX" = yes; then - lt_prog_compiler_wl_CXX='-Wl,' - lt_prog_compiler_static_CXX='-static' - - case $host_os in - aix*) - # All AIX code is PIC. - if test "$host_cpu" = ia64; then - # AIX 5 now supports IA64 processor - lt_prog_compiler_static_CXX='-Bstatic' - fi - ;; - amigaos*) - # FIXME: we need at least 68020 code to build shared libraries, but - # adding the `-m68020' flag to GCC prevents building anything better, - # like `-m68040'. - lt_prog_compiler_pic_CXX='-m68020 -resident32 -malways-restore-a4' - ;; - beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) - # PIC is the default for these OSes. - ;; - mingw* | cygwin* | os2* | pw32*) - # This hack is so that the source file can tell whether it is being - # built for inclusion in a dll (and should export symbols for example). - # Although the cygwin gcc ignores -fPIC, still need this for old-style - # (--disable-auto-import) libraries - lt_prog_compiler_pic_CXX='-DDLL_EXPORT' - ;; - darwin* | rhapsody*) - # PIC is the default on this platform - # Common symbols not allowed in MH_DYLIB files - lt_prog_compiler_pic_CXX='-fno-common' - ;; - *djgpp*) - # DJGPP does not support shared libraries at all - lt_prog_compiler_pic_CXX= - ;; - interix[3-9]*) - # Interix 3.x gcc -fpic/-fPIC options generate broken code. - # Instead, we relocate shared libraries at runtime. - ;; - sysv4*MP*) - if test -d /usr/nec; then - lt_prog_compiler_pic_CXX=-Kconform_pic - fi - ;; - hpux*) - # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but - # not for PA HP-UX. - case $host_cpu in - hppa*64*|ia64*) - ;; - *) - lt_prog_compiler_pic_CXX='-fPIC' - ;; - esac - ;; - *) - lt_prog_compiler_pic_CXX='-fPIC' - ;; - esac - else - case $host_os in - aix4* | aix5*) - # All AIX code is PIC. - if test "$host_cpu" = ia64; then - # AIX 5 now supports IA64 processor - lt_prog_compiler_static_CXX='-Bstatic' - else - lt_prog_compiler_static_CXX='-bnso -bI:/lib/syscalls.exp' - fi - ;; - chorus*) - case $cc_basename in - cxch68*) - # Green Hills C++ Compiler - # _LT_AC_TAGVAR(lt_prog_compiler_static, CXX)="--no_auto_instantiation -u __main -u __premain -u _abort -r $COOL_DIR/lib/libOrb.a $MVME_DIR/lib/CC/libC.a $MVME_DIR/lib/classix/libcx.s.a" - ;; - esac - ;; - darwin*) - # PIC is the default on this platform - # Common symbols not allowed in MH_DYLIB files - case $cc_basename in - xlc*) - lt_prog_compiler_pic_CXX='-qnocommon' - lt_prog_compiler_wl_CXX='-Wl,' - ;; - esac - ;; - dgux*) - case $cc_basename in - ec++*) - lt_prog_compiler_pic_CXX='-KPIC' - ;; - ghcx*) - # Green Hills C++ Compiler - lt_prog_compiler_pic_CXX='-pic' - ;; - *) - ;; - esac - ;; - freebsd* | dragonfly*) - # FreeBSD uses GNU C++ - ;; - hpux9* | hpux10* | hpux11*) - case $cc_basename in - CC*) - lt_prog_compiler_wl_CXX='-Wl,' - lt_prog_compiler_static_CXX='${wl}-a ${wl}archive' - if test "$host_cpu" != ia64; then - lt_prog_compiler_pic_CXX='+Z' - fi - ;; - aCC*) - lt_prog_compiler_wl_CXX='-Wl,' - lt_prog_compiler_static_CXX='${wl}-a ${wl}archive' - case $host_cpu in - hppa*64*|ia64*) - # +Z the default - ;; - *) - lt_prog_compiler_pic_CXX='+Z' - ;; - esac - ;; - *) - ;; - esac - ;; - interix*) - # This is c89, which is MS Visual C++ (no shared libs) - # Anyone wants to do a port? - ;; - irix5* | irix6* | nonstopux*) - case $cc_basename in - CC*) - lt_prog_compiler_wl_CXX='-Wl,' - lt_prog_compiler_static_CXX='-non_shared' - # CC pic flag -KPIC is the default. - ;; - *) - ;; - esac - ;; - linux* | k*bsd*-gnu) - case $cc_basename in - KCC*) - # KAI C++ Compiler - lt_prog_compiler_wl_CXX='--backend -Wl,' - lt_prog_compiler_pic_CXX='-fPIC' - ;; - icpc* | ecpc*) - # Intel C++ - lt_prog_compiler_wl_CXX='-Wl,' - lt_prog_compiler_pic_CXX='-KPIC' - lt_prog_compiler_static_CXX='-static' - ;; - pgCC*) - # Portland Group C++ compiler. - lt_prog_compiler_wl_CXX='-Wl,' - lt_prog_compiler_pic_CXX='-fpic' - lt_prog_compiler_static_CXX='-Bstatic' - ;; - cxx*) - # Compaq C++ - # Make sure the PIC flag is empty. It appears that all Alpha - # Linux and Compaq Tru64 Unix objects are PIC. - lt_prog_compiler_pic_CXX= - lt_prog_compiler_static_CXX='-non_shared' - ;; - *) - case `$CC -V 2>&1 | sed 5q` in - *Sun\ C*) - # Sun C++ 5.9 - lt_prog_compiler_pic_CXX='-KPIC' - lt_prog_compiler_static_CXX='-Bstatic' - lt_prog_compiler_wl_CXX='-Qoption ld ' - ;; - esac - ;; - esac - ;; - lynxos*) - ;; - m88k*) - ;; - mvs*) - case $cc_basename in - cxx*) - lt_prog_compiler_pic_CXX='-W c,exportall' - ;; - *) - ;; - esac - ;; - netbsd*) - ;; - osf3* | osf4* | osf5*) - case $cc_basename in - KCC*) - lt_prog_compiler_wl_CXX='--backend -Wl,' - ;; - RCC*) - # Rational C++ 2.4.1 - lt_prog_compiler_pic_CXX='-pic' - ;; - cxx*) - # Digital/Compaq C++ - lt_prog_compiler_wl_CXX='-Wl,' - # Make sure the PIC flag is empty. It appears that all Alpha - # Linux and Compaq Tru64 Unix objects are PIC. - lt_prog_compiler_pic_CXX= - lt_prog_compiler_static_CXX='-non_shared' - ;; - *) - ;; - esac - ;; - psos*) - ;; - solaris*) - case $cc_basename in - CC*) - # Sun C++ 4.2, 5.x and Centerline C++ - lt_prog_compiler_pic_CXX='-KPIC' - lt_prog_compiler_static_CXX='-Bstatic' - lt_prog_compiler_wl_CXX='-Qoption ld ' - ;; - gcx*) - # Green Hills C++ Compiler - lt_prog_compiler_pic_CXX='-PIC' - ;; - *) - ;; - esac - ;; - sunos4*) - case $cc_basename in - CC*) - # Sun C++ 4.x - lt_prog_compiler_pic_CXX='-pic' - lt_prog_compiler_static_CXX='-Bstatic' - ;; - lcc*) - # Lucid - lt_prog_compiler_pic_CXX='-pic' - ;; - *) - ;; - esac - ;; - tandem*) - case $cc_basename in - NCC*) - # NonStop-UX NCC 3.20 - lt_prog_compiler_pic_CXX='-KPIC' - ;; - *) - ;; - esac - ;; - sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*) - case $cc_basename in - CC*) - lt_prog_compiler_wl_CXX='-Wl,' - lt_prog_compiler_pic_CXX='-KPIC' - lt_prog_compiler_static_CXX='-Bstatic' - ;; - esac - ;; - vxworks*) - ;; - *) - lt_prog_compiler_can_build_shared_CXX=no - ;; - esac - fi - -{ echo "$as_me:$LINENO: result: $lt_prog_compiler_pic_CXX" >&5 -echo "${ECHO_T}$lt_prog_compiler_pic_CXX" >&6; } - -# -# Check to make sure the PIC flag actually works. -# -if test -n "$lt_prog_compiler_pic_CXX"; then - -{ echo "$as_me:$LINENO: checking if $compiler PIC flag $lt_prog_compiler_pic_CXX works" >&5 -echo $ECHO_N "checking if $compiler PIC flag $lt_prog_compiler_pic_CXX works... $ECHO_C" >&6; } -if test "${lt_prog_compiler_pic_works_CXX+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - lt_prog_compiler_pic_works_CXX=no - ac_outfile=conftest.$ac_objext - echo "$lt_simple_compile_test_code" > conftest.$ac_ext - lt_compiler_flag="$lt_prog_compiler_pic_CXX -DPIC" - # Insert the option either (1) after the last *FLAGS variable, or - # (2) before a word containing "conftest.", or (3) at the end. - # Note that $ac_compile itself does not contain backslashes and begins - # with a dollar sign (not a hyphen), so the echo should work correctly. - # The option is referenced via a variable to avoid confusing sed. - lt_compile=`echo "$ac_compile" | $SED \ - -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ - -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ - -e 's:$: $lt_compiler_flag:'` - (eval echo "\"\$as_me:12701: $lt_compile\"" >&5) - (eval "$lt_compile" 2>conftest.err) - ac_status=$? - cat conftest.err >&5 - echo "$as_me:12705: \$? = $ac_status" >&5 - if (exit $ac_status) && test -s "$ac_outfile"; then - # The compiler can only warn and ignore the option if not recognized - # So say no if there are warnings other than the usual output. - $echo "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' >conftest.exp - $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 - if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then - lt_prog_compiler_pic_works_CXX=yes - fi - fi - $rm conftest* - -fi -{ echo "$as_me:$LINENO: result: $lt_prog_compiler_pic_works_CXX" >&5 -echo "${ECHO_T}$lt_prog_compiler_pic_works_CXX" >&6; } - -if test x"$lt_prog_compiler_pic_works_CXX" = xyes; then - case $lt_prog_compiler_pic_CXX in - "" | " "*) ;; - *) lt_prog_compiler_pic_CXX=" $lt_prog_compiler_pic_CXX" ;; - esac -else - lt_prog_compiler_pic_CXX= - lt_prog_compiler_can_build_shared_CXX=no -fi - -fi -case $host_os in - # For platforms which do not support PIC, -DPIC is meaningless: - *djgpp*) - lt_prog_compiler_pic_CXX= - ;; - *) - lt_prog_compiler_pic_CXX="$lt_prog_compiler_pic_CXX -DPIC" - ;; -esac - -# -# Check to make sure the static flag actually works. -# -wl=$lt_prog_compiler_wl_CXX eval lt_tmp_static_flag=\"$lt_prog_compiler_static_CXX\" -{ echo "$as_me:$LINENO: checking if $compiler static flag $lt_tmp_static_flag works" >&5 -echo $ECHO_N "checking if $compiler static flag $lt_tmp_static_flag works... $ECHO_C" >&6; } -if test "${lt_prog_compiler_static_works_CXX+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - lt_prog_compiler_static_works_CXX=no - save_LDFLAGS="$LDFLAGS" - LDFLAGS="$LDFLAGS $lt_tmp_static_flag" - echo "$lt_simple_link_test_code" > conftest.$ac_ext - if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then - # The linker can only warn and ignore the option if not recognized - # So say no if there are warnings - if test -s conftest.err; then - # Append any errors to the config.log. - cat conftest.err 1>&5 - $echo "X$_lt_linker_boilerplate" | $Xsed -e '/^$/d' > conftest.exp - $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 - if diff conftest.exp conftest.er2 >/dev/null; then - lt_prog_compiler_static_works_CXX=yes - fi - else - lt_prog_compiler_static_works_CXX=yes - fi - fi - $rm conftest* - LDFLAGS="$save_LDFLAGS" - -fi -{ echo "$as_me:$LINENO: result: $lt_prog_compiler_static_works_CXX" >&5 -echo "${ECHO_T}$lt_prog_compiler_static_works_CXX" >&6; } - -if test x"$lt_prog_compiler_static_works_CXX" = xyes; then - : -else - lt_prog_compiler_static_CXX= -fi - - -{ echo "$as_me:$LINENO: checking if $compiler supports -c -o file.$ac_objext" >&5 -echo $ECHO_N "checking if $compiler supports -c -o file.$ac_objext... $ECHO_C" >&6; } -if test "${lt_cv_prog_compiler_c_o_CXX+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - lt_cv_prog_compiler_c_o_CXX=no - $rm -r conftest 2>/dev/null - mkdir conftest - cd conftest - mkdir out - echo "$lt_simple_compile_test_code" > conftest.$ac_ext - - lt_compiler_flag="-o out/conftest2.$ac_objext" - # Insert the option either (1) after the last *FLAGS variable, or - # (2) before a word containing "conftest.", or (3) at the end. - # Note that $ac_compile itself does not contain backslashes and begins - # with a dollar sign (not a hyphen), so the echo should work correctly. - lt_compile=`echo "$ac_compile" | $SED \ - -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ - -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ - -e 's:$: $lt_compiler_flag:'` - (eval echo "\"\$as_me:12805: $lt_compile\"" >&5) - (eval "$lt_compile" 2>out/conftest.err) - ac_status=$? - cat out/conftest.err >&5 - echo "$as_me:12809: \$? = $ac_status" >&5 - if (exit $ac_status) && test -s out/conftest2.$ac_objext - then - # The compiler can only warn and ignore the option if not recognized - # So say no if there are warnings - $echo "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' > out/conftest.exp - $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2 - if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then - lt_cv_prog_compiler_c_o_CXX=yes - fi - fi - chmod u+w . 2>&5 - $rm conftest* - # SGI C++ compiler will create directory out/ii_files/ for - # template instantiation - test -d out/ii_files && $rm out/ii_files/* && rmdir out/ii_files - $rm out/* && rmdir out - cd .. - rmdir conftest - $rm conftest* - -fi -{ echo "$as_me:$LINENO: result: $lt_cv_prog_compiler_c_o_CXX" >&5 -echo "${ECHO_T}$lt_cv_prog_compiler_c_o_CXX" >&6; } - - -hard_links="nottested" -if test "$lt_cv_prog_compiler_c_o_CXX" = no && test "$need_locks" != no; then - # do not overwrite the value of need_locks provided by the user - { echo "$as_me:$LINENO: checking if we can lock with hard links" >&5 -echo $ECHO_N "checking if we can lock with hard links... $ECHO_C" >&6; } - hard_links=yes - $rm conftest* - ln conftest.a conftest.b 2>/dev/null && hard_links=no - touch conftest.a - ln conftest.a conftest.b 2>&5 || hard_links=no - ln conftest.a conftest.b 2>/dev/null && hard_links=no - { echo "$as_me:$LINENO: result: $hard_links" >&5 -echo "${ECHO_T}$hard_links" >&6; } - if test "$hard_links" = no; then - { echo "$as_me:$LINENO: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&5 -echo "$as_me: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&2;} - need_locks=warn - fi -else - need_locks=no -fi - -{ echo "$as_me:$LINENO: checking whether the $compiler linker ($LD) supports shared libraries" >&5 -echo $ECHO_N "checking whether the $compiler linker ($LD) supports shared libraries... $ECHO_C" >&6; } - - export_symbols_cmds_CXX='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' - case $host_os in - aix4* | aix5*) - # If we're using GNU nm, then we don't want the "-C" option. - # -C means demangle to AIX nm, but means don't demangle with GNU nm - if $NM -V 2>&1 | grep 'GNU' > /dev/null; then - export_symbols_cmds_CXX='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$2 == "T") || (\$2 == "D") || (\$2 == "B")) && (substr(\$3,1,1) != ".")) { print \$3 } }'\'' | sort -u > $export_symbols' - else - export_symbols_cmds_CXX='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$2 == "T") || (\$2 == "D") || (\$2 == "B")) && (substr(\$3,1,1) != ".")) { print \$3 } }'\'' | sort -u > $export_symbols' - fi - ;; - pw32*) - export_symbols_cmds_CXX="$ltdll_cmds" - ;; - cygwin* | mingw*) - export_symbols_cmds_CXX='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS][ ]/s/.*[ ]\([^ ]*\)/\1 DATA/;/^.*[ ]__nm__/s/^.*[ ]__nm__\([^ ]*\)[ ][^ ]*/\1 DATA/;/^I[ ]/d;/^[AITW][ ]/s/.*[ ]//'\'' | sort | uniq > $export_symbols' - ;; - *) - export_symbols_cmds_CXX='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' - ;; - esac - -{ echo "$as_me:$LINENO: result: $ld_shlibs_CXX" >&5 -echo "${ECHO_T}$ld_shlibs_CXX" >&6; } -test "$ld_shlibs_CXX" = no && can_build_shared=no - -# -# Do we need to explicitly link libc? -# -case "x$archive_cmds_need_lc_CXX" in -x|xyes) - # Assume -lc should be added - archive_cmds_need_lc_CXX=yes - - if test "$enable_shared" = yes && test "$GCC" = yes; then - case $archive_cmds_CXX in - *'~'*) - # FIXME: we may have to deal with multi-command sequences. - ;; - '$CC '*) - # Test whether the compiler implicitly links with -lc since on some - # systems, -lgcc has to come before -lc. If gcc already passes -lc - # to ld, don't add -lc before -lgcc. - { echo "$as_me:$LINENO: checking whether -lc should be explicitly linked in" >&5 -echo $ECHO_N "checking whether -lc should be explicitly linked in... $ECHO_C" >&6; } - $rm conftest* - echo "$lt_simple_compile_test_code" > conftest.$ac_ext - - if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } 2>conftest.err; then - soname=conftest - lib=conftest - libobjs=conftest.$ac_objext - deplibs= - wl=$lt_prog_compiler_wl_CXX - pic_flag=$lt_prog_compiler_pic_CXX - compiler_flags=-v - linker_flags=-v - verstring= - output_objdir=. - libname=conftest - lt_save_allow_undefined_flag=$allow_undefined_flag_CXX - allow_undefined_flag_CXX= - if { (eval echo "$as_me:$LINENO: \"$archive_cmds_CXX 2\>\&1 \| grep \" -lc \" \>/dev/null 2\>\&1\"") >&5 - (eval $archive_cmds_CXX 2\>\&1 \| grep \" -lc \" \>/dev/null 2\>\&1) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } - then - archive_cmds_need_lc_CXX=no - else - archive_cmds_need_lc_CXX=yes - fi - allow_undefined_flag_CXX=$lt_save_allow_undefined_flag - else - cat conftest.err 1>&5 - fi - $rm conftest* - { echo "$as_me:$LINENO: result: $archive_cmds_need_lc_CXX" >&5 -echo "${ECHO_T}$archive_cmds_need_lc_CXX" >&6; } - ;; - esac - fi - ;; -esac - -{ echo "$as_me:$LINENO: checking dynamic linker characteristics" >&5 -echo $ECHO_N "checking dynamic linker characteristics... $ECHO_C" >&6; } -library_names_spec= -libname_spec='lib$name' -soname_spec= -shrext_cmds=".so" -postinstall_cmds= -postuninstall_cmds= -finish_cmds= -finish_eval= -shlibpath_var= -shlibpath_overrides_runpath=unknown -version_type=none -dynamic_linker="$host_os ld.so" -sys_lib_dlsearch_path_spec="/lib /usr/lib" - -need_lib_prefix=unknown -hardcode_into_libs=no - -# when you set need_version to no, make sure it does not cause -set_version -# flags to be left without arguments -need_version=unknown - -case $host_os in -aix3*) - version_type=linux - library_names_spec='${libname}${release}${shared_ext}$versuffix $libname.a' - shlibpath_var=LIBPATH - - # AIX 3 has no versioning support, so we append a major version to the name. - soname_spec='${libname}${release}${shared_ext}$major' - ;; - -aix4* | aix5*) - version_type=linux - need_lib_prefix=no - need_version=no - hardcode_into_libs=yes - if test "$host_cpu" = ia64; then - # AIX 5 supports IA64 - library_names_spec='${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext}$versuffix $libname${shared_ext}' - shlibpath_var=LD_LIBRARY_PATH - else - # With GCC up to 2.95.x, collect2 would create an import file - # for dependence libraries. The import file would start with - # the line `#! .'. This would cause the generated library to - # depend on `.', always an invalid library. This was fixed in - # development snapshots of GCC prior to 3.0. - case $host_os in - aix4 | aix4.[01] | aix4.[01].*) - if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)' - echo ' yes ' - echo '#endif'; } | ${CC} -E - | grep yes > /dev/null; then - : - else - can_build_shared=no - fi - ;; - esac - # AIX (on Power*) has no versioning support, so currently we can not hardcode correct - # soname into executable. Probably we can add versioning support to - # collect2, so additional links can be useful in future. - if test "$aix_use_runtimelinking" = yes; then - # If using run time linking (on AIX 4.2 or later) use lib.so - # instead of lib.a to let people know that these are not - # typical AIX shared libraries. - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - else - # We preserve .a as extension for shared libraries through AIX4.2 - # and later when we are not doing run time linking. - library_names_spec='${libname}${release}.a $libname.a' - soname_spec='${libname}${release}${shared_ext}$major' - fi - shlibpath_var=LIBPATH - fi - ;; - -amigaos*) - library_names_spec='$libname.ixlibrary $libname.a' - # Create ${libname}_ixlibrary.a entries in /sys/libs. - finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`$echo "X$lib" | $Xsed -e '\''s%^.*/\([^/]*\)\.ixlibrary$%\1%'\''`; test $rm /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done' - ;; - -beos*) - library_names_spec='${libname}${shared_ext}' - dynamic_linker="$host_os ld.so" - shlibpath_var=LIBRARY_PATH - ;; - -bsdi[45]*) - version_type=linux - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir' - shlibpath_var=LD_LIBRARY_PATH - sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib" - sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib" - # the default ld.so.conf also contains /usr/contrib/lib and - # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow - # libtool to hard-code these into programs - ;; - -cygwin* | mingw* | pw32*) - version_type=windows - shrext_cmds=".dll" - need_version=no - need_lib_prefix=no - - case $GCC,$host_os in - yes,cygwin* | yes,mingw* | yes,pw32*) - library_names_spec='$libname.dll.a' - # DLL is installed to $(libdir)/../bin by postinstall_cmds - postinstall_cmds='base_file=`basename \${file}`~ - dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i;echo \$dlname'\''`~ - dldir=$destdir/`dirname \$dlpath`~ - test -d \$dldir || mkdir -p \$dldir~ - $install_prog $dir/$dlname \$dldir/$dlname~ - chmod a+x \$dldir/$dlname' - postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ - dlpath=$dir/\$dldll~ - $rm \$dlpath' - shlibpath_overrides_runpath=yes - - case $host_os in - cygwin*) - # Cygwin DLLs use 'cyg' prefix rather than 'lib' - soname_spec='`echo ${libname} | sed -e 's/^lib/cyg/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' - sys_lib_search_path_spec="/usr/lib /lib/w32api /lib /usr/local/lib" - ;; - mingw*) - # MinGW DLLs use traditional 'lib' prefix - soname_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' - sys_lib_search_path_spec=`$CC -print-search-dirs | grep "^libraries:" | $SED -e "s/^libraries://" -e "s,=/,/,g"` - if echo "$sys_lib_search_path_spec" | grep ';[c-zC-Z]:/' >/dev/null; then - # It is most probably a Windows format PATH printed by - # mingw gcc, but we are running on Cygwin. Gcc prints its search - # path with ; separators, and with drive letters. We can handle the - # drive letters (cygwin fileutils understands them), so leave them, - # especially as we might pass files found there to a mingw objdump, - # which wouldn't understand a cygwinified path. Ahh. - sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'` - else - sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` - fi - ;; - pw32*) - # pw32 DLLs use 'pw' prefix rather than 'lib' - library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' - ;; - esac - ;; - - *) - library_names_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext} $libname.lib' - ;; - esac - dynamic_linker='Win32 ld.exe' - # FIXME: first we should search . and the directory the executable is in - shlibpath_var=PATH - ;; - -darwin* | rhapsody*) - dynamic_linker="$host_os dyld" - version_type=darwin - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${versuffix}$shared_ext ${libname}${release}${major}$shared_ext ${libname}$shared_ext' - soname_spec='${libname}${release}${major}$shared_ext' - shlibpath_overrides_runpath=yes - shlibpath_var=DYLD_LIBRARY_PATH - shrext_cmds='`test .$module = .yes && echo .so || echo .dylib`' - - sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib' - ;; - -dgux*) - version_type=linux - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname$shared_ext' - soname_spec='${libname}${release}${shared_ext}$major' - shlibpath_var=LD_LIBRARY_PATH - ;; - -freebsd1*) - dynamic_linker=no - ;; - -freebsd* | dragonfly*) - # DragonFly does not have aout. When/if they implement a new - # versioning mechanism, adjust this. - if test -x /usr/bin/objformat; then - objformat=`/usr/bin/objformat` - else - case $host_os in - freebsd[123]*) objformat=aout ;; - *) objformat=elf ;; - esac - fi - version_type=freebsd-$objformat - case $version_type in - freebsd-elf*) - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' - need_version=no - need_lib_prefix=no - ;; - freebsd-*) - library_names_spec='${libname}${release}${shared_ext}$versuffix $libname${shared_ext}$versuffix' - need_version=yes - ;; - esac - shlibpath_var=LD_LIBRARY_PATH - case $host_os in - freebsd2*) - shlibpath_overrides_runpath=yes - ;; - freebsd3.[01]* | freebsdelf3.[01]*) - shlibpath_overrides_runpath=yes - hardcode_into_libs=yes - ;; - freebsd3.[2-9]* | freebsdelf3.[2-9]* | \ - freebsd4.[0-5] | freebsdelf4.[0-5] | freebsd4.1.1 | freebsdelf4.1.1) - shlibpath_overrides_runpath=no - hardcode_into_libs=yes - ;; - *) # from 4.6 on, and DragonFly - shlibpath_overrides_runpath=yes - hardcode_into_libs=yes - ;; - esac - ;; - -gnu*) - version_type=linux - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - shlibpath_var=LD_LIBRARY_PATH - hardcode_into_libs=yes - ;; - -hpux9* | hpux10* | hpux11*) - # Give a soname corresponding to the major version so that dld.sl refuses to - # link against other versions. - version_type=sunos - need_lib_prefix=no - need_version=no - case $host_cpu in - ia64*) - shrext_cmds='.so' - hardcode_into_libs=yes - dynamic_linker="$host_os dld.so" - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - if test "X$HPUX_IA64_MODE" = X32; then - sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib" - else - sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64" - fi - sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec - ;; - hppa*64*) - shrext_cmds='.sl' - hardcode_into_libs=yes - dynamic_linker="$host_os dld.sl" - shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH - shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64" - sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec - ;; - *) - shrext_cmds='.sl' - dynamic_linker="$host_os dld.sl" - shlibpath_var=SHLIB_PATH - shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - ;; - esac - # HP-UX runs *really* slowly unless shared libraries are mode 555. - postinstall_cmds='chmod 555 $lib' - ;; - -interix[3-9]*) - version_type=linux - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - dynamic_linker='Interix 3.x ld.so.1 (PE, like ELF)' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=no - hardcode_into_libs=yes - ;; - -irix5* | irix6* | nonstopux*) - case $host_os in - nonstopux*) version_type=nonstopux ;; - *) - if test "$lt_cv_prog_gnu_ld" = yes; then - version_type=linux - else - version_type=irix - fi ;; - esac - need_lib_prefix=no - need_version=no - soname_spec='${libname}${release}${shared_ext}$major' - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext} $libname${shared_ext}' - case $host_os in - irix5* | nonstopux*) - libsuff= shlibsuff= - ;; - *) - case $LD in # libtool.m4 will add one of these switches to LD - *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ") - libsuff= shlibsuff= libmagic=32-bit;; - *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ") - libsuff=32 shlibsuff=N32 libmagic=N32;; - *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ") - libsuff=64 shlibsuff=64 libmagic=64-bit;; - *) libsuff= shlibsuff= libmagic=never-match;; - esac - ;; - esac - shlibpath_var=LD_LIBRARY${shlibsuff}_PATH - shlibpath_overrides_runpath=no - sys_lib_search_path_spec="/usr/lib${libsuff} /lib${libsuff} /usr/local/lib${libsuff}" - sys_lib_dlsearch_path_spec="/usr/lib${libsuff} /lib${libsuff}" - hardcode_into_libs=yes - ;; - -# No shared lib support for Linux oldld, aout, or coff. -linux*oldld* | linux*aout* | linux*coff*) - dynamic_linker=no - ;; - -# This must be Linux ELF. -linux* | k*bsd*-gnu) - version_type=linux - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=no - # This implies no fast_install, which is unacceptable. - # Some rework will be needed to allow for fast_install - # before this can be enabled. - hardcode_into_libs=yes - sys_lib_search_path_spec="/usr/lib${libsuff} /lib${libsuff} /usr/local/lib${libsuff}" - sys_lib_dlsearch_path_spec="/usr/lib${libsuff} /lib${libsuff}" - - # Append ld.so.conf contents to the search path - if test -f /etc/ld.so.conf; then - lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s 2>/dev/null", \$2)); skip = 1; } { if (!skip) print \$0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;/^[ ]*hwcap[ ]/d;s/[:, ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;/^$/d' | tr '\n' ' '` - sys_lib_dlsearch_path_spec="$sys_lib_dlsearch_path_spec $lt_ld_extra" - fi - - # We used to test for /lib/ld.so.1 and disable shared libraries on - # powerpc, because MkLinux only supported shared libraries with the - # GNU dynamic linker. Since this was broken with cross compilers, - # most powerpc-linux boxes support dynamic linking these days and - # people can always --disable-shared, the test was removed, and we - # assume the GNU/Linux dynamic linker is in use. - dynamic_linker='GNU/Linux ld.so' - ;; - -netbsd*) - version_type=sunos - need_lib_prefix=no - need_version=no - if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' - finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' - dynamic_linker='NetBSD (a.out) ld.so' - else - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - dynamic_linker='NetBSD ld.elf_so' - fi - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=yes - hardcode_into_libs=yes - ;; - -newsos6) - version_type=linux - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=yes - ;; - -nto-qnx*) - version_type=linux - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=yes - ;; - -openbsd*) - version_type=sunos - sys_lib_dlsearch_path_spec="/usr/lib" - need_lib_prefix=no - # Some older versions of OpenBSD (3.3 at least) *do* need versioned libs. - case $host_os in - openbsd3.3 | openbsd3.3.*) need_version=yes ;; - *) need_version=no ;; - esac - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' - finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' - shlibpath_var=LD_LIBRARY_PATH - if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then - case $host_os in - openbsd2.[89] | openbsd2.[89].*) - shlibpath_overrides_runpath=no - ;; - *) - shlibpath_overrides_runpath=yes - ;; - esac - else - shlibpath_overrides_runpath=yes - fi - ;; - -os2*) - libname_spec='$name' - shrext_cmds=".dll" - need_lib_prefix=no - library_names_spec='$libname${shared_ext} $libname.a' - dynamic_linker='OS/2 ld.exe' - shlibpath_var=LIBPATH - ;; - -osf3* | osf4* | osf5*) - version_type=osf - need_lib_prefix=no - need_version=no - soname_spec='${libname}${release}${shared_ext}$major' - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - shlibpath_var=LD_LIBRARY_PATH - sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib" - sys_lib_dlsearch_path_spec="$sys_lib_search_path_spec" - ;; - -rdos*) - dynamic_linker=no - ;; - -solaris*) - version_type=linux - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=yes - hardcode_into_libs=yes - # ldd complains unless libraries are executable - postinstall_cmds='chmod +x $lib' - ;; - -sunos4*) - version_type=sunos - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' - finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=yes - if test "$with_gnu_ld" = yes; then - need_lib_prefix=no - fi - need_version=yes - ;; - -sysv4 | sysv4.3*) - version_type=linux - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - shlibpath_var=LD_LIBRARY_PATH - case $host_vendor in - sni) - shlibpath_overrides_runpath=no - need_lib_prefix=no - export_dynamic_flag_spec='${wl}-Blargedynsym' - runpath_var=LD_RUN_PATH - ;; - siemens) - need_lib_prefix=no - ;; - motorola) - need_lib_prefix=no - need_version=no - shlibpath_overrides_runpath=no - sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib' - ;; - esac - ;; - -sysv4*MP*) - if test -d /usr/nec ;then - version_type=linux - library_names_spec='$libname${shared_ext}.$versuffix $libname${shared_ext}.$major $libname${shared_ext}' - soname_spec='$libname${shared_ext}.$major' - shlibpath_var=LD_LIBRARY_PATH - fi - ;; - -sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) - version_type=freebsd-elf - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - shlibpath_var=LD_LIBRARY_PATH - hardcode_into_libs=yes - if test "$with_gnu_ld" = yes; then - sys_lib_search_path_spec='/usr/local/lib /usr/gnu/lib /usr/ccs/lib /usr/lib /lib' - shlibpath_overrides_runpath=no - else - sys_lib_search_path_spec='/usr/ccs/lib /usr/lib' - shlibpath_overrides_runpath=yes - case $host_os in - sco3.2v5*) - sys_lib_search_path_spec="$sys_lib_search_path_spec /lib" - ;; - esac - fi - sys_lib_dlsearch_path_spec='/usr/lib' - ;; - -uts4*) - version_type=linux - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - shlibpath_var=LD_LIBRARY_PATH - ;; - -*) - dynamic_linker=no - ;; -esac -{ echo "$as_me:$LINENO: result: $dynamic_linker" >&5 -echo "${ECHO_T}$dynamic_linker" >&6; } -test "$dynamic_linker" = no && can_build_shared=no - -variables_saved_for_relink="PATH $shlibpath_var $runpath_var" -if test "$GCC" = yes; then - variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH" -fi - -{ echo "$as_me:$LINENO: checking how to hardcode library paths into programs" >&5 -echo $ECHO_N "checking how to hardcode library paths into programs... $ECHO_C" >&6; } -hardcode_action_CXX= -if test -n "$hardcode_libdir_flag_spec_CXX" || \ - test -n "$runpath_var_CXX" || \ - test "X$hardcode_automatic_CXX" = "Xyes" ; then - - # We can hardcode non-existent directories. - if test "$hardcode_direct_CXX" != no && - # If the only mechanism to avoid hardcoding is shlibpath_var, we - # have to relink, otherwise we might link with an installed library - # when we should be linking with a yet-to-be-installed one - ## test "$_LT_AC_TAGVAR(hardcode_shlibpath_var, CXX)" != no && - test "$hardcode_minus_L_CXX" != no; then - # Linking always hardcodes the temporary library directory. - hardcode_action_CXX=relink - else - # We can link without hardcoding, and we can hardcode nonexisting dirs. - hardcode_action_CXX=immediate - fi -else - # We cannot hardcode anything, or else we can only hardcode existing - # directories. - hardcode_action_CXX=unsupported -fi -{ echo "$as_me:$LINENO: result: $hardcode_action_CXX" >&5 -echo "${ECHO_T}$hardcode_action_CXX" >&6; } - -if test "$hardcode_action_CXX" = relink; then - # Fast installation is not supported - enable_fast_install=no -elif test "$shlibpath_overrides_runpath" = yes || - test "$enable_shared" = no; then - # Fast installation is not necessary - enable_fast_install=needless -fi - - -# The else clause should only fire when bootstrapping the -# libtool distribution, otherwise you forgot to ship ltmain.sh -# with your package, and you will get complaints that there are -# no rules to generate ltmain.sh. -if test -f "$ltmain"; then - # See if we are running on zsh, and set the options which allow our commands through - # without removal of \ escapes. - if test -n "${ZSH_VERSION+set}" ; then - setopt NO_GLOB_SUBST - fi - # Now quote all the things that may contain metacharacters while being - # careful not to overquote the AC_SUBSTed values. We take copies of the - # variables and quote the copies for generation of the libtool script. - for var in echo old_CC old_CFLAGS AR AR_FLAGS EGREP RANLIB LN_S LTCC LTCFLAGS NM \ - SED SHELL STRIP \ - libname_spec library_names_spec soname_spec extract_expsyms_cmds \ - old_striplib striplib file_magic_cmd finish_cmds finish_eval \ - deplibs_check_method reload_flag reload_cmds need_locks \ - lt_cv_sys_global_symbol_pipe lt_cv_sys_global_symbol_to_cdecl \ - lt_cv_sys_global_symbol_to_c_name_address \ - sys_lib_search_path_spec sys_lib_dlsearch_path_spec \ - old_postinstall_cmds old_postuninstall_cmds \ - compiler_CXX \ - CC_CXX \ - LD_CXX \ - lt_prog_compiler_wl_CXX \ - lt_prog_compiler_pic_CXX \ - lt_prog_compiler_static_CXX \ - lt_prog_compiler_no_builtin_flag_CXX \ - export_dynamic_flag_spec_CXX \ - thread_safe_flag_spec_CXX \ - whole_archive_flag_spec_CXX \ - enable_shared_with_static_runtimes_CXX \ - old_archive_cmds_CXX \ - old_archive_from_new_cmds_CXX \ - predep_objects_CXX \ - postdep_objects_CXX \ - predeps_CXX \ - postdeps_CXX \ - compiler_lib_search_path_CXX \ - archive_cmds_CXX \ - archive_expsym_cmds_CXX \ - postinstall_cmds_CXX \ - postuninstall_cmds_CXX \ - old_archive_from_expsyms_cmds_CXX \ - allow_undefined_flag_CXX \ - no_undefined_flag_CXX \ - export_symbols_cmds_CXX \ - hardcode_libdir_flag_spec_CXX \ - hardcode_libdir_flag_spec_ld_CXX \ - hardcode_libdir_separator_CXX \ - hardcode_automatic_CXX \ - module_cmds_CXX \ - module_expsym_cmds_CXX \ - lt_cv_prog_compiler_c_o_CXX \ - fix_srcfile_path_CXX \ - exclude_expsyms_CXX \ - include_expsyms_CXX; do - - case $var in - old_archive_cmds_CXX | \ - old_archive_from_new_cmds_CXX | \ - archive_cmds_CXX | \ - archive_expsym_cmds_CXX | \ - module_cmds_CXX | \ - module_expsym_cmds_CXX | \ - old_archive_from_expsyms_cmds_CXX | \ - export_symbols_cmds_CXX | \ - extract_expsyms_cmds | reload_cmds | finish_cmds | \ - postinstall_cmds | postuninstall_cmds | \ - old_postinstall_cmds | old_postuninstall_cmds | \ - sys_lib_search_path_spec | sys_lib_dlsearch_path_spec) - # Double-quote double-evaled strings. - eval "lt_$var=\\\"\`\$echo \"X\$$var\" | \$Xsed -e \"\$double_quote_subst\" -e \"\$sed_quote_subst\" -e \"\$delay_variable_subst\"\`\\\"" - ;; - *) - eval "lt_$var=\\\"\`\$echo \"X\$$var\" | \$Xsed -e \"\$sed_quote_subst\"\`\\\"" - ;; - esac - done - - case $lt_echo in - *'\$0 --fallback-echo"') - lt_echo=`$echo "X$lt_echo" | $Xsed -e 's/\\\\\\\$0 --fallback-echo"$/$0 --fallback-echo"/'` - ;; - esac - -cfgfile="$ofile" - - cat <<__EOF__ >> "$cfgfile" -# ### BEGIN LIBTOOL TAG CONFIG: $tagname - -# Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`: - -# Shell to use when invoking shell scripts. -SHELL=$lt_SHELL - -# Whether or not to build shared libraries. -build_libtool_libs=$enable_shared - -# Whether or not to build static libraries. -build_old_libs=$enable_static - -# Whether or not to add -lc for building shared libraries. -build_libtool_need_lc=$archive_cmds_need_lc_CXX - -# Whether or not to disallow shared libs when runtime libs are static -allow_libtool_libs_with_static_runtimes=$enable_shared_with_static_runtimes_CXX - -# Whether or not to optimize for fast installation. -fast_install=$enable_fast_install - -# The host system. -host_alias=$host_alias -host=$host -host_os=$host_os - -# The build system. -build_alias=$build_alias -build=$build -build_os=$build_os - -# An echo program that does not interpret backslashes. -echo=$lt_echo - -# The archiver. -AR=$lt_AR -AR_FLAGS=$lt_AR_FLAGS - -# A C compiler. -LTCC=$lt_LTCC - -# LTCC compiler flags. -LTCFLAGS=$lt_LTCFLAGS - -# A language-specific compiler. -CC=$lt_compiler_CXX - -# Is the compiler the GNU C compiler? -with_gcc=$GCC_CXX - -# An ERE matcher. -EGREP=$lt_EGREP - -# The linker used to build libraries. -LD=$lt_LD_CXX - -# Whether we need hard or soft links. -LN_S=$lt_LN_S - -# A BSD-compatible nm program. -NM=$lt_NM - -# A symbol stripping program -STRIP=$lt_STRIP - -# Used to examine libraries when file_magic_cmd begins "file" -MAGIC_CMD=$MAGIC_CMD - -# Used on cygwin: DLL creation program. -DLLTOOL="$DLLTOOL" - -# Used on cygwin: object dumper. -OBJDUMP="$OBJDUMP" - -# Used on cygwin: assembler. -AS="$AS" - -# The name of the directory that contains temporary libtool files. -objdir=$objdir - -# How to create reloadable object files. -reload_flag=$lt_reload_flag -reload_cmds=$lt_reload_cmds - -# How to pass a linker flag through the compiler. -wl=$lt_lt_prog_compiler_wl_CXX - -# Object file suffix (normally "o"). -objext="$ac_objext" - -# Old archive suffix (normally "a"). -libext="$libext" - -# Shared library suffix (normally ".so"). -shrext_cmds='$shrext_cmds' - -# Executable file suffix (normally ""). -exeext="$exeext" - -# Additional compiler flags for building library objects. -pic_flag=$lt_lt_prog_compiler_pic_CXX -pic_mode=$pic_mode - -# What is the maximum length of a command? -max_cmd_len=$lt_cv_sys_max_cmd_len - -# Does compiler simultaneously support -c and -o options? -compiler_c_o=$lt_lt_cv_prog_compiler_c_o_CXX - -# Must we lock files when doing compilation? -need_locks=$lt_need_locks - -# Do we need the lib prefix for modules? -need_lib_prefix=$need_lib_prefix - -# Do we need a version for libraries? -need_version=$need_version - -# Whether dlopen is supported. -dlopen_support=$enable_dlopen - -# Whether dlopen of programs is supported. -dlopen_self=$enable_dlopen_self - -# Whether dlopen of statically linked programs is supported. -dlopen_self_static=$enable_dlopen_self_static - -# Compiler flag to prevent dynamic linking. -link_static_flag=$lt_lt_prog_compiler_static_CXX - -# Compiler flag to turn off builtin functions. -no_builtin_flag=$lt_lt_prog_compiler_no_builtin_flag_CXX - -# Compiler flag to allow reflexive dlopens. -export_dynamic_flag_spec=$lt_export_dynamic_flag_spec_CXX - -# Compiler flag to generate shared objects directly from archives. -whole_archive_flag_spec=$lt_whole_archive_flag_spec_CXX - -# Compiler flag to generate thread-safe objects. -thread_safe_flag_spec=$lt_thread_safe_flag_spec_CXX - -# Library versioning type. -version_type=$version_type - -# Format of library name prefix. -libname_spec=$lt_libname_spec - -# List of archive names. First name is the real one, the rest are links. -# The last name is the one that the linker finds with -lNAME. -library_names_spec=$lt_library_names_spec - -# The coded name of the library, if different from the real name. -soname_spec=$lt_soname_spec - -# Commands used to build and install an old-style archive. -RANLIB=$lt_RANLIB -old_archive_cmds=$lt_old_archive_cmds_CXX -old_postinstall_cmds=$lt_old_postinstall_cmds -old_postuninstall_cmds=$lt_old_postuninstall_cmds - -# Create an old-style archive from a shared archive. -old_archive_from_new_cmds=$lt_old_archive_from_new_cmds_CXX - -# Create a temporary old-style archive to link instead of a shared archive. -old_archive_from_expsyms_cmds=$lt_old_archive_from_expsyms_cmds_CXX - -# Commands used to build and install a shared archive. -archive_cmds=$lt_archive_cmds_CXX -archive_expsym_cmds=$lt_archive_expsym_cmds_CXX -postinstall_cmds=$lt_postinstall_cmds -postuninstall_cmds=$lt_postuninstall_cmds - -# Commands used to build a loadable module (assumed same as above if empty) -module_cmds=$lt_module_cmds_CXX -module_expsym_cmds=$lt_module_expsym_cmds_CXX - -# Commands to strip libraries. -old_striplib=$lt_old_striplib -striplib=$lt_striplib - -# Dependencies to place before the objects being linked to create a -# shared library. -predep_objects=$lt_predep_objects_CXX - -# Dependencies to place after the objects being linked to create a -# shared library. -postdep_objects=$lt_postdep_objects_CXX - -# Dependencies to place before the objects being linked to create a -# shared library. -predeps=$lt_predeps_CXX - -# Dependencies to place after the objects being linked to create a -# shared library. -postdeps=$lt_postdeps_CXX - -# The library search path used internally by the compiler when linking -# a shared library. -compiler_lib_search_path=$lt_compiler_lib_search_path_CXX - -# Method to check whether dependent libraries are shared objects. -deplibs_check_method=$lt_deplibs_check_method - -# Command to use when deplibs_check_method == file_magic. -file_magic_cmd=$lt_file_magic_cmd - -# Flag that allows shared libraries with undefined symbols to be built. -allow_undefined_flag=$lt_allow_undefined_flag_CXX - -# Flag that forces no undefined symbols. -no_undefined_flag=$lt_no_undefined_flag_CXX - -# Commands used to finish a libtool library installation in a directory. -finish_cmds=$lt_finish_cmds - -# Same as above, but a single script fragment to be evaled but not shown. -finish_eval=$lt_finish_eval - -# Take the output of nm and produce a listing of raw symbols and C names. -global_symbol_pipe=$lt_lt_cv_sys_global_symbol_pipe - -# Transform the output of nm in a proper C declaration -global_symbol_to_cdecl=$lt_lt_cv_sys_global_symbol_to_cdecl - -# Transform the output of nm in a C name address pair -global_symbol_to_c_name_address=$lt_lt_cv_sys_global_symbol_to_c_name_address - -# This is the shared library runtime path variable. -runpath_var=$runpath_var - -# This is the shared library path variable. -shlibpath_var=$shlibpath_var - -# Is shlibpath searched before the hard-coded library search path? -shlibpath_overrides_runpath=$shlibpath_overrides_runpath - -# How to hardcode a shared library path into an executable. -hardcode_action=$hardcode_action_CXX - -# Whether we should hardcode library paths into libraries. -hardcode_into_libs=$hardcode_into_libs - -# Flag to hardcode \$libdir into a binary during linking. -# This must work even if \$libdir does not exist. -hardcode_libdir_flag_spec=$lt_hardcode_libdir_flag_spec_CXX - -# If ld is used when linking, flag to hardcode \$libdir into -# a binary during linking. This must work even if \$libdir does -# not exist. -hardcode_libdir_flag_spec_ld=$lt_hardcode_libdir_flag_spec_ld_CXX - -# Whether we need a single -rpath flag with a separated argument. -hardcode_libdir_separator=$lt_hardcode_libdir_separator_CXX - -# Set to yes if using DIR/libNAME${shared_ext} during linking hardcodes DIR into the -# resulting binary. -hardcode_direct=$hardcode_direct_CXX - -# Set to yes if using the -LDIR flag during linking hardcodes DIR into the -# resulting binary. -hardcode_minus_L=$hardcode_minus_L_CXX - -# Set to yes if using SHLIBPATH_VAR=DIR during linking hardcodes DIR into -# the resulting binary. -hardcode_shlibpath_var=$hardcode_shlibpath_var_CXX - -# Set to yes if building a shared library automatically hardcodes DIR into the library -# and all subsequent libraries and executables linked against it. -hardcode_automatic=$hardcode_automatic_CXX - -# Variables whose values should be saved in libtool wrapper scripts and -# restored at relink time. -variables_saved_for_relink="$variables_saved_for_relink" - -# Whether libtool must link a program against all its dependency libraries. -link_all_deplibs=$link_all_deplibs_CXX - -# Compile-time system search path for libraries -sys_lib_search_path_spec=$lt_sys_lib_search_path_spec - -# Run-time system search path for libraries -sys_lib_dlsearch_path_spec=$lt_sys_lib_dlsearch_path_spec - -# Fix the shell variable \$srcfile for the compiler. -fix_srcfile_path=$lt_fix_srcfile_path - -# Set to yes if exported symbols are required. -always_export_symbols=$always_export_symbols_CXX - -# The commands to list exported symbols. -export_symbols_cmds=$lt_export_symbols_cmds_CXX - -# The commands to extract the exported symbol list from a shared archive. -extract_expsyms_cmds=$lt_extract_expsyms_cmds - -# Symbols that should not be listed in the preloaded symbols. -exclude_expsyms=$lt_exclude_expsyms_CXX - -# Symbols that must always be exported. -include_expsyms=$lt_include_expsyms_CXX - -# ### END LIBTOOL TAG CONFIG: $tagname - -__EOF__ - - -else - # If there is no Makefile yet, we rely on a make rule to execute - # `config.status --recheck' to rerun these tests and create the - # libtool script then. - ltmain_in=`echo $ltmain | sed -e 's/\.sh$/.in/'` - if test -f "$ltmain_in"; then - test -f Makefile && make "$ltmain" - fi -fi - - -ac_ext=c -ac_cpp='$CPP $CPPFLAGS' -ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_c_compiler_gnu - -CC=$lt_save_CC -LDCXX=$LD -LD=$lt_save_LD -GCC=$lt_save_GCC -with_gnu_ldcxx=$with_gnu_ld -with_gnu_ld=$lt_save_with_gnu_ld -lt_cv_path_LDCXX=$lt_cv_path_LD -lt_cv_path_LD=$lt_save_path_LD -lt_cv_prog_gnu_ldcxx=$lt_cv_prog_gnu_ld -lt_cv_prog_gnu_ld=$lt_save_with_gnu_ld - - else - tagname="" - fi - ;; - - F77) - if test -n "$F77" && test "X$F77" != "Xno"; then - -ac_ext=f -ac_compile='$F77 -c $FFLAGS conftest.$ac_ext >&5' -ac_link='$F77 -o conftest$ac_exeext $FFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_f77_compiler_gnu - - -archive_cmds_need_lc_F77=no -allow_undefined_flag_F77= -always_export_symbols_F77=no -archive_expsym_cmds_F77= -export_dynamic_flag_spec_F77= -hardcode_direct_F77=no -hardcode_libdir_flag_spec_F77= -hardcode_libdir_flag_spec_ld_F77= -hardcode_libdir_separator_F77= -hardcode_minus_L_F77=no -hardcode_automatic_F77=no -module_cmds_F77= -module_expsym_cmds_F77= -link_all_deplibs_F77=unknown -old_archive_cmds_F77=$old_archive_cmds -no_undefined_flag_F77= -whole_archive_flag_spec_F77= -enable_shared_with_static_runtimes_F77=no - -# Source file extension for f77 test sources. -ac_ext=f - -# Object file extension for compiled f77 test sources. -objext=o -objext_F77=$objext - -# Code to be used in simple compile tests -lt_simple_compile_test_code="\ - subroutine t - return - end -" - -# Code to be used in simple link tests -lt_simple_link_test_code="\ - program t - end -" - -# ltmain only uses $CC for tagged configurations so make sure $CC is set. - -# If no C compiler was specified, use CC. -LTCC=${LTCC-"$CC"} - -# If no C compiler flags were specified, use CFLAGS. -LTCFLAGS=${LTCFLAGS-"$CFLAGS"} - -# Allow CC to be a program name with arguments. -compiler=$CC - - -# save warnings/boilerplate of simple test code -ac_outfile=conftest.$ac_objext -echo "$lt_simple_compile_test_code" >conftest.$ac_ext -eval "$ac_compile" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err -_lt_compiler_boilerplate=`cat conftest.err` -$rm conftest* - -ac_outfile=conftest.$ac_objext -echo "$lt_simple_link_test_code" >conftest.$ac_ext -eval "$ac_link" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err -_lt_linker_boilerplate=`cat conftest.err` -$rm conftest* - - -# Allow CC to be a program name with arguments. -lt_save_CC="$CC" -CC=${F77-"f77"} -compiler=$CC -compiler_F77=$CC -for cc_temp in $compiler""; do - case $cc_temp in - compile | *[\\/]compile | ccache | *[\\/]ccache ) ;; - distcc | *[\\/]distcc | purify | *[\\/]purify ) ;; - \-*) ;; - *) break;; - esac -done -cc_basename=`$echo "X$cc_temp" | $Xsed -e 's%.*/%%' -e "s%^$host_alias-%%"` - - -{ echo "$as_me:$LINENO: checking if libtool supports shared libraries" >&5 -echo $ECHO_N "checking if libtool supports shared libraries... $ECHO_C" >&6; } -{ echo "$as_me:$LINENO: result: $can_build_shared" >&5 -echo "${ECHO_T}$can_build_shared" >&6; } - -{ echo "$as_me:$LINENO: checking whether to build shared libraries" >&5 -echo $ECHO_N "checking whether to build shared libraries... $ECHO_C" >&6; } -test "$can_build_shared" = "no" && enable_shared=no - -# On AIX, shared libraries and static libraries use the same namespace, and -# are all built from PIC. -case $host_os in -aix3*) - test "$enable_shared" = yes && enable_static=no - if test -n "$RANLIB"; then - archive_cmds="$archive_cmds~\$RANLIB \$lib" - postinstall_cmds='$RANLIB $lib' - fi - ;; -aix4* | aix5*) - if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then - test "$enable_shared" = yes && enable_static=no - fi - ;; -esac -{ echo "$as_me:$LINENO: result: $enable_shared" >&5 -echo "${ECHO_T}$enable_shared" >&6; } - -{ echo "$as_me:$LINENO: checking whether to build static libraries" >&5 -echo $ECHO_N "checking whether to build static libraries... $ECHO_C" >&6; } -# Make sure either enable_shared or enable_static is yes. -test "$enable_shared" = yes || enable_static=yes -{ echo "$as_me:$LINENO: result: $enable_static" >&5 -echo "${ECHO_T}$enable_static" >&6; } - -GCC_F77="$G77" -LD_F77="$LD" - -lt_prog_compiler_wl_F77= -lt_prog_compiler_pic_F77= -lt_prog_compiler_static_F77= - -{ echo "$as_me:$LINENO: checking for $compiler option to produce PIC" >&5 -echo $ECHO_N "checking for $compiler option to produce PIC... $ECHO_C" >&6; } - - if test "$GCC" = yes; then - lt_prog_compiler_wl_F77='-Wl,' - lt_prog_compiler_static_F77='-static' - - case $host_os in - aix*) - # All AIX code is PIC. - if test "$host_cpu" = ia64; then - # AIX 5 now supports IA64 processor - lt_prog_compiler_static_F77='-Bstatic' - fi - ;; - - amigaos*) - # FIXME: we need at least 68020 code to build shared libraries, but - # adding the `-m68020' flag to GCC prevents building anything better, - # like `-m68040'. - lt_prog_compiler_pic_F77='-m68020 -resident32 -malways-restore-a4' - ;; - - beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) - # PIC is the default for these OSes. - ;; - - mingw* | cygwin* | pw32* | os2*) - # This hack is so that the source file can tell whether it is being - # built for inclusion in a dll (and should export symbols for example). - # Although the cygwin gcc ignores -fPIC, still need this for old-style - # (--disable-auto-import) libraries - lt_prog_compiler_pic_F77='-DDLL_EXPORT' - ;; - - darwin* | rhapsody*) - # PIC is the default on this platform - # Common symbols not allowed in MH_DYLIB files - lt_prog_compiler_pic_F77='-fno-common' - ;; - - interix[3-9]*) - # Interix 3.x gcc -fpic/-fPIC options generate broken code. - # Instead, we relocate shared libraries at runtime. - ;; - - msdosdjgpp*) - # Just because we use GCC doesn't mean we suddenly get shared libraries - # on systems that don't support them. - lt_prog_compiler_can_build_shared_F77=no - enable_shared=no - ;; - - sysv4*MP*) - if test -d /usr/nec; then - lt_prog_compiler_pic_F77=-Kconform_pic - fi - ;; - - hpux*) - # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but - # not for PA HP-UX. - case $host_cpu in - hppa*64*|ia64*) - # +Z the default - ;; - *) - lt_prog_compiler_pic_F77='-fPIC' - ;; - esac - ;; - - *) - lt_prog_compiler_pic_F77='-fPIC' - ;; - esac - else - # PORTME Check for flag to pass linker flags through the system compiler. - case $host_os in - aix*) - lt_prog_compiler_wl_F77='-Wl,' - if test "$host_cpu" = ia64; then - # AIX 5 now supports IA64 processor - lt_prog_compiler_static_F77='-Bstatic' - else - lt_prog_compiler_static_F77='-bnso -bI:/lib/syscalls.exp' - fi - ;; - darwin*) - # PIC is the default on this platform - # Common symbols not allowed in MH_DYLIB files - case $cc_basename in - xlc*) - lt_prog_compiler_pic_F77='-qnocommon' - lt_prog_compiler_wl_F77='-Wl,' - ;; - esac - ;; - - mingw* | cygwin* | pw32* | os2*) - # This hack is so that the source file can tell whether it is being - # built for inclusion in a dll (and should export symbols for example). - lt_prog_compiler_pic_F77='-DDLL_EXPORT' - ;; - - hpux9* | hpux10* | hpux11*) - lt_prog_compiler_wl_F77='-Wl,' - # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but - # not for PA HP-UX. - case $host_cpu in - hppa*64*|ia64*) - # +Z the default - ;; - *) - lt_prog_compiler_pic_F77='+Z' - ;; - esac - # Is there a better lt_prog_compiler_static that works with the bundled CC? - lt_prog_compiler_static_F77='${wl}-a ${wl}archive' - ;; - - irix5* | irix6* | nonstopux*) - lt_prog_compiler_wl_F77='-Wl,' - # PIC (with -KPIC) is the default. - lt_prog_compiler_static_F77='-non_shared' - ;; - - newsos6) - lt_prog_compiler_pic_F77='-KPIC' - lt_prog_compiler_static_F77='-Bstatic' - ;; - - linux* | k*bsd*-gnu) - case $cc_basename in - icc* | ecc*) - lt_prog_compiler_wl_F77='-Wl,' - lt_prog_compiler_pic_F77='-KPIC' - lt_prog_compiler_static_F77='-static' - ;; - pgcc* | pgf77* | pgf90* | pgf95*) - # Portland Group compilers (*not* the Pentium gcc compiler, - # which looks to be a dead project) - lt_prog_compiler_wl_F77='-Wl,' - lt_prog_compiler_pic_F77='-fpic' - lt_prog_compiler_static_F77='-Bstatic' - ;; - ccc*) - lt_prog_compiler_wl_F77='-Wl,' - # All Alpha code is PIC. - lt_prog_compiler_static_F77='-non_shared' - ;; - *) - case `$CC -V 2>&1 | sed 5q` in - *Sun\ C*) - # Sun C 5.9 - lt_prog_compiler_pic_F77='-KPIC' - lt_prog_compiler_static_F77='-Bstatic' - lt_prog_compiler_wl_F77='-Wl,' - ;; - *Sun\ F*) - # Sun Fortran 8.3 passes all unrecognized flags to the linker - lt_prog_compiler_pic_F77='-KPIC' - lt_prog_compiler_static_F77='-Bstatic' - lt_prog_compiler_wl_F77='' - ;; - esac - ;; - esac - ;; - - osf3* | osf4* | osf5*) - lt_prog_compiler_wl_F77='-Wl,' - # All OSF/1 code is PIC. - lt_prog_compiler_static_F77='-non_shared' - ;; - - rdos*) - lt_prog_compiler_static_F77='-non_shared' - ;; - - solaris*) - lt_prog_compiler_pic_F77='-KPIC' - lt_prog_compiler_static_F77='-Bstatic' - case $cc_basename in - f77* | f90* | f95*) - lt_prog_compiler_wl_F77='-Qoption ld ';; - *) - lt_prog_compiler_wl_F77='-Wl,';; - esac - ;; - - sunos4*) - lt_prog_compiler_wl_F77='-Qoption ld ' - lt_prog_compiler_pic_F77='-PIC' - lt_prog_compiler_static_F77='-Bstatic' - ;; - - sysv4 | sysv4.2uw2* | sysv4.3*) - lt_prog_compiler_wl_F77='-Wl,' - lt_prog_compiler_pic_F77='-KPIC' - lt_prog_compiler_static_F77='-Bstatic' - ;; - - sysv4*MP*) - if test -d /usr/nec ;then - lt_prog_compiler_pic_F77='-Kconform_pic' - lt_prog_compiler_static_F77='-Bstatic' - fi - ;; - - sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*) - lt_prog_compiler_wl_F77='-Wl,' - lt_prog_compiler_pic_F77='-KPIC' - lt_prog_compiler_static_F77='-Bstatic' - ;; - - unicos*) - lt_prog_compiler_wl_F77='-Wl,' - lt_prog_compiler_can_build_shared_F77=no - ;; - - uts4*) - lt_prog_compiler_pic_F77='-pic' - lt_prog_compiler_static_F77='-Bstatic' - ;; - - *) - lt_prog_compiler_can_build_shared_F77=no - ;; - esac - fi - -{ echo "$as_me:$LINENO: result: $lt_prog_compiler_pic_F77" >&5 -echo "${ECHO_T}$lt_prog_compiler_pic_F77" >&6; } - -# -# Check to make sure the PIC flag actually works. -# -if test -n "$lt_prog_compiler_pic_F77"; then - -{ echo "$as_me:$LINENO: checking if $compiler PIC flag $lt_prog_compiler_pic_F77 works" >&5 -echo $ECHO_N "checking if $compiler PIC flag $lt_prog_compiler_pic_F77 works... $ECHO_C" >&6; } -if test "${lt_prog_compiler_pic_works_F77+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - lt_prog_compiler_pic_works_F77=no - ac_outfile=conftest.$ac_objext - echo "$lt_simple_compile_test_code" > conftest.$ac_ext - lt_compiler_flag="$lt_prog_compiler_pic_F77" - # Insert the option either (1) after the last *FLAGS variable, or - # (2) before a word containing "conftest.", or (3) at the end. - # Note that $ac_compile itself does not contain backslashes and begins - # with a dollar sign (not a hyphen), so the echo should work correctly. - # The option is referenced via a variable to avoid confusing sed. - lt_compile=`echo "$ac_compile" | $SED \ - -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ - -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ - -e 's:$: $lt_compiler_flag:'` - (eval echo "\"\$as_me:14369: $lt_compile\"" >&5) - (eval "$lt_compile" 2>conftest.err) - ac_status=$? - cat conftest.err >&5 - echo "$as_me:14373: \$? = $ac_status" >&5 - if (exit $ac_status) && test -s "$ac_outfile"; then - # The compiler can only warn and ignore the option if not recognized - # So say no if there are warnings other than the usual output. - $echo "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' >conftest.exp - $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 - if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then - lt_prog_compiler_pic_works_F77=yes - fi - fi - $rm conftest* - -fi -{ echo "$as_me:$LINENO: result: $lt_prog_compiler_pic_works_F77" >&5 -echo "${ECHO_T}$lt_prog_compiler_pic_works_F77" >&6; } - -if test x"$lt_prog_compiler_pic_works_F77" = xyes; then - case $lt_prog_compiler_pic_F77 in - "" | " "*) ;; - *) lt_prog_compiler_pic_F77=" $lt_prog_compiler_pic_F77" ;; - esac -else - lt_prog_compiler_pic_F77= - lt_prog_compiler_can_build_shared_F77=no -fi - -fi -case $host_os in - # For platforms which do not support PIC, -DPIC is meaningless: - *djgpp*) - lt_prog_compiler_pic_F77= - ;; - *) - lt_prog_compiler_pic_F77="$lt_prog_compiler_pic_F77" - ;; -esac - -# -# Check to make sure the static flag actually works. -# -wl=$lt_prog_compiler_wl_F77 eval lt_tmp_static_flag=\"$lt_prog_compiler_static_F77\" -{ echo "$as_me:$LINENO: checking if $compiler static flag $lt_tmp_static_flag works" >&5 -echo $ECHO_N "checking if $compiler static flag $lt_tmp_static_flag works... $ECHO_C" >&6; } -if test "${lt_prog_compiler_static_works_F77+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - lt_prog_compiler_static_works_F77=no - save_LDFLAGS="$LDFLAGS" - LDFLAGS="$LDFLAGS $lt_tmp_static_flag" - echo "$lt_simple_link_test_code" > conftest.$ac_ext - if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then - # The linker can only warn and ignore the option if not recognized - # So say no if there are warnings - if test -s conftest.err; then - # Append any errors to the config.log. - cat conftest.err 1>&5 - $echo "X$_lt_linker_boilerplate" | $Xsed -e '/^$/d' > conftest.exp - $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 - if diff conftest.exp conftest.er2 >/dev/null; then - lt_prog_compiler_static_works_F77=yes - fi - else - lt_prog_compiler_static_works_F77=yes - fi - fi - $rm conftest* - LDFLAGS="$save_LDFLAGS" - -fi -{ echo "$as_me:$LINENO: result: $lt_prog_compiler_static_works_F77" >&5 -echo "${ECHO_T}$lt_prog_compiler_static_works_F77" >&6; } - -if test x"$lt_prog_compiler_static_works_F77" = xyes; then - : -else - lt_prog_compiler_static_F77= -fi - - -{ echo "$as_me:$LINENO: checking if $compiler supports -c -o file.$ac_objext" >&5 -echo $ECHO_N "checking if $compiler supports -c -o file.$ac_objext... $ECHO_C" >&6; } -if test "${lt_cv_prog_compiler_c_o_F77+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - lt_cv_prog_compiler_c_o_F77=no - $rm -r conftest 2>/dev/null - mkdir conftest - cd conftest - mkdir out - echo "$lt_simple_compile_test_code" > conftest.$ac_ext - - lt_compiler_flag="-o out/conftest2.$ac_objext" - # Insert the option either (1) after the last *FLAGS variable, or - # (2) before a word containing "conftest.", or (3) at the end. - # Note that $ac_compile itself does not contain backslashes and begins - # with a dollar sign (not a hyphen), so the echo should work correctly. - lt_compile=`echo "$ac_compile" | $SED \ - -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ - -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ - -e 's:$: $lt_compiler_flag:'` - (eval echo "\"\$as_me:14473: $lt_compile\"" >&5) - (eval "$lt_compile" 2>out/conftest.err) - ac_status=$? - cat out/conftest.err >&5 - echo "$as_me:14477: \$? = $ac_status" >&5 - if (exit $ac_status) && test -s out/conftest2.$ac_objext - then - # The compiler can only warn and ignore the option if not recognized - # So say no if there are warnings - $echo "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' > out/conftest.exp - $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2 - if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then - lt_cv_prog_compiler_c_o_F77=yes - fi - fi - chmod u+w . 2>&5 - $rm conftest* - # SGI C++ compiler will create directory out/ii_files/ for - # template instantiation - test -d out/ii_files && $rm out/ii_files/* && rmdir out/ii_files - $rm out/* && rmdir out - cd .. - rmdir conftest - $rm conftest* - -fi -{ echo "$as_me:$LINENO: result: $lt_cv_prog_compiler_c_o_F77" >&5 -echo "${ECHO_T}$lt_cv_prog_compiler_c_o_F77" >&6; } - - -hard_links="nottested" -if test "$lt_cv_prog_compiler_c_o_F77" = no && test "$need_locks" != no; then - # do not overwrite the value of need_locks provided by the user - { echo "$as_me:$LINENO: checking if we can lock with hard links" >&5 -echo $ECHO_N "checking if we can lock with hard links... $ECHO_C" >&6; } - hard_links=yes - $rm conftest* - ln conftest.a conftest.b 2>/dev/null && hard_links=no - touch conftest.a - ln conftest.a conftest.b 2>&5 || hard_links=no - ln conftest.a conftest.b 2>/dev/null && hard_links=no - { echo "$as_me:$LINENO: result: $hard_links" >&5 -echo "${ECHO_T}$hard_links" >&6; } - if test "$hard_links" = no; then - { echo "$as_me:$LINENO: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&5 -echo "$as_me: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&2;} - need_locks=warn - fi -else - need_locks=no -fi - -{ echo "$as_me:$LINENO: checking whether the $compiler linker ($LD) supports shared libraries" >&5 -echo $ECHO_N "checking whether the $compiler linker ($LD) supports shared libraries... $ECHO_C" >&6; } - - runpath_var= - allow_undefined_flag_F77= - enable_shared_with_static_runtimes_F77=no - archive_cmds_F77= - archive_expsym_cmds_F77= - old_archive_From_new_cmds_F77= - old_archive_from_expsyms_cmds_F77= - export_dynamic_flag_spec_F77= - whole_archive_flag_spec_F77= - thread_safe_flag_spec_F77= - hardcode_libdir_flag_spec_F77= - hardcode_libdir_flag_spec_ld_F77= - hardcode_libdir_separator_F77= - hardcode_direct_F77=no - hardcode_minus_L_F77=no - hardcode_shlibpath_var_F77=unsupported - link_all_deplibs_F77=unknown - hardcode_automatic_F77=no - module_cmds_F77= - module_expsym_cmds_F77= - always_export_symbols_F77=no - export_symbols_cmds_F77='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' - # include_expsyms should be a list of space-separated symbols to be *always* - # included in the symbol list - include_expsyms_F77= - # exclude_expsyms can be an extended regexp of symbols to exclude - # it will be wrapped by ` (' and `)$', so one must not match beginning or - # end of line. Example: `a|bc|.*d.*' will exclude the symbols `a' and `bc', - # as well as any symbol that contains `d'. - exclude_expsyms_F77="_GLOBAL_OFFSET_TABLE_" - # Although _GLOBAL_OFFSET_TABLE_ is a valid symbol C name, most a.out - # platforms (ab)use it in PIC code, but their linkers get confused if - # the symbol is explicitly referenced. Since portable code cannot - # rely on this symbol name, it's probably fine to never include it in - # preloaded symbol tables. - extract_expsyms_cmds= - # Just being paranoid about ensuring that cc_basename is set. - for cc_temp in $compiler""; do - case $cc_temp in - compile | *[\\/]compile | ccache | *[\\/]ccache ) ;; - distcc | *[\\/]distcc | purify | *[\\/]purify ) ;; - \-*) ;; - *) break;; - esac -done -cc_basename=`$echo "X$cc_temp" | $Xsed -e 's%.*/%%' -e "s%^$host_alias-%%"` - - case $host_os in - cygwin* | mingw* | pw32*) - # FIXME: the MSVC++ port hasn't been tested in a loooong time - # When not using gcc, we currently assume that we are using - # Microsoft Visual C++. - if test "$GCC" != yes; then - with_gnu_ld=no - fi - ;; - interix*) - # we just hope/assume this is gcc and not c89 (= MSVC++) - with_gnu_ld=yes - ;; - openbsd*) - with_gnu_ld=no - ;; - esac - - ld_shlibs_F77=yes - if test "$with_gnu_ld" = yes; then - # If archive_cmds runs LD, not CC, wlarc should be empty - wlarc='${wl}' - - # Set some defaults for GNU ld with shared library support. These - # are reset later if shared libraries are not supported. Putting them - # here allows them to be overridden if necessary. - runpath_var=LD_RUN_PATH - hardcode_libdir_flag_spec_F77='${wl}--rpath ${wl}$libdir' - export_dynamic_flag_spec_F77='${wl}--export-dynamic' - # ancient GNU ld didn't support --whole-archive et. al. - if $LD --help 2>&1 | grep 'no-whole-archive' > /dev/null; then - whole_archive_flag_spec_F77="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' - else - whole_archive_flag_spec_F77= - fi - supports_anon_versioning=no - case `$LD -v 2>/dev/null` in - *\ [01].* | *\ 2.[0-9].* | *\ 2.10.*) ;; # catch versions < 2.11 - *\ 2.11.93.0.2\ *) supports_anon_versioning=yes ;; # RH7.3 ... - *\ 2.11.92.0.12\ *) supports_anon_versioning=yes ;; # Mandrake 8.2 ... - *\ 2.11.*) ;; # other 2.11 versions - *) supports_anon_versioning=yes ;; - esac - - # See if GNU ld supports shared libraries. - case $host_os in - aix3* | aix4* | aix5*) - # On AIX/PPC, the GNU linker is very broken - if test "$host_cpu" != ia64; then - ld_shlibs_F77=no - cat <&2 - -*** Warning: the GNU linker, at least up to release 2.9.1, is reported -*** to be unable to reliably create shared libraries on AIX. -*** Therefore, libtool is disabling shared libraries support. If you -*** really care for shared libraries, you may want to modify your PATH -*** so that a non-GNU linker is found, and then restart. - -EOF - fi - ;; - - amigaos*) - archive_cmds_F77='$rm $output_objdir/a2ixlibrary.data~$echo "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$echo "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$echo "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$echo "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' - hardcode_libdir_flag_spec_F77='-L$libdir' - hardcode_minus_L_F77=yes - - # Samuel A. Falvo II reports - # that the semantics of dynamic libraries on AmigaOS, at least up - # to version 4, is to share data among multiple programs linked - # with the same dynamic library. Since this doesn't match the - # behavior of shared libraries on other platforms, we can't use - # them. - ld_shlibs_F77=no - ;; - - beos*) - if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then - allow_undefined_flag_F77=unsupported - # Joseph Beckenbach says some releases of gcc - # support --undefined. This deserves some investigation. FIXME - archive_cmds_F77='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' - else - ld_shlibs_F77=no - fi - ;; - - cygwin* | mingw* | pw32*) - # _LT_AC_TAGVAR(hardcode_libdir_flag_spec, F77) is actually meaningless, - # as there is no search path for DLLs. - hardcode_libdir_flag_spec_F77='-L$libdir' - allow_undefined_flag_F77=unsupported - always_export_symbols_F77=no - enable_shared_with_static_runtimes_F77=yes - export_symbols_cmds_F77='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS][ ]/s/.*[ ]\([^ ]*\)/\1 DATA/'\'' -e '\''/^[AITW][ ]/s/.*[ ]//'\'' | sort | uniq > $export_symbols' - - if $LD --help 2>&1 | grep 'auto-import' > /dev/null; then - archive_cmds_F77='$CC -shared $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' - # If the export-symbols file already is a .def file (1st line - # is EXPORTS), use it as is; otherwise, prepend... - archive_expsym_cmds_F77='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then - cp $export_symbols $output_objdir/$soname.def; - else - echo EXPORTS > $output_objdir/$soname.def; - cat $export_symbols >> $output_objdir/$soname.def; - fi~ - $CC -shared $output_objdir/$soname.def $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' - else - ld_shlibs_F77=no - fi - ;; - - interix[3-9]*) - hardcode_direct_F77=no - hardcode_shlibpath_var_F77=no - hardcode_libdir_flag_spec_F77='${wl}-rpath,$libdir' - export_dynamic_flag_spec_F77='${wl}-E' - # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc. - # Instead, shared libraries are loaded at an image base (0x10000000 by - # default) and relocated if they conflict, which is a slow very memory - # consuming and fragmenting process. To avoid this, we pick a random, - # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link - # time. Moving up from 0x10000000 also allows more sbrk(2) space. - archive_cmds_F77='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' - archive_expsym_cmds_F77='sed "s,^,_," $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--retain-symbols-file,$output_objdir/$soname.expsym ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' - ;; - - gnu* | linux* | k*bsd*-gnu) - if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then - tmp_addflag= - case $cc_basename,$host_cpu in - pgcc*) # Portland Group C compiler - whole_archive_flag_spec_F77='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $echo \"$new_convenience\"` ${wl}--no-whole-archive' - tmp_addflag=' $pic_flag' - ;; - pgf77* | pgf90* | pgf95*) # Portland Group f77 and f90 compilers - whole_archive_flag_spec_F77='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $echo \"$new_convenience\"` ${wl}--no-whole-archive' - tmp_addflag=' $pic_flag -Mnomain' ;; - ecc*,ia64* | icc*,ia64*) # Intel C compiler on ia64 - tmp_addflag=' -i_dynamic' ;; - efc*,ia64* | ifort*,ia64*) # Intel Fortran compiler on ia64 - tmp_addflag=' -i_dynamic -nofor_main' ;; - ifc* | ifort*) # Intel Fortran compiler - tmp_addflag=' -nofor_main' ;; - esac - case `$CC -V 2>&1 | sed 5q` in - *Sun\ C*) # Sun C 5.9 - whole_archive_flag_spec_F77='${wl}--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; $echo \"$new_convenience\"` ${wl}--no-whole-archive' - tmp_sharedflag='-G' ;; - *Sun\ F*) # Sun Fortran 8.3 - tmp_sharedflag='-G' ;; - *) - tmp_sharedflag='-shared' ;; - esac - archive_cmds_F77='$CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' - - if test $supports_anon_versioning = yes; then - archive_expsym_cmds_F77='$echo "{ global:" > $output_objdir/$libname.ver~ - cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ - $echo "local: *; };" >> $output_objdir/$libname.ver~ - $CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib' - fi - else - ld_shlibs_F77=no - fi - ;; - - netbsd*) - if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then - archive_cmds_F77='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib' - wlarc= - else - archive_cmds_F77='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' - archive_expsym_cmds_F77='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' - fi - ;; - - solaris*) - if $LD -v 2>&1 | grep 'BFD 2\.8' > /dev/null; then - ld_shlibs_F77=no - cat <&2 - -*** Warning: The releases 2.8.* of the GNU linker cannot reliably -*** create shared libraries on Solaris systems. Therefore, libtool -*** is disabling shared libraries support. We urge you to upgrade GNU -*** binutils to release 2.9.1 or newer. Another option is to modify -*** your PATH or compiler configuration so that the native linker is -*** used, and then restart. - -EOF - elif $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then - archive_cmds_F77='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' - archive_expsym_cmds_F77='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' - else - ld_shlibs_F77=no - fi - ;; - - sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX*) - case `$LD -v 2>&1` in - *\ [01].* | *\ 2.[0-9].* | *\ 2.1[0-5].*) - ld_shlibs_F77=no - cat <<_LT_EOF 1>&2 - -*** Warning: Releases of the GNU linker prior to 2.16.91.0.3 can not -*** reliably create shared libraries on SCO systems. Therefore, libtool -*** is disabling shared libraries support. We urge you to upgrade GNU -*** binutils to release 2.16.91.0.3 or newer. Another option is to modify -*** your PATH or compiler configuration so that the native linker is -*** used, and then restart. - -_LT_EOF - ;; - *) - if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then - hardcode_libdir_flag_spec_F77='`test -z "$SCOABSPATH" && echo ${wl}-rpath,$libdir`' - archive_cmds_F77='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib' - archive_expsym_cmds_F77='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname,\${SCOABSPATH:+${install_libdir}/}$soname,-retain-symbols-file,$export_symbols -o $lib' - else - ld_shlibs_F77=no - fi - ;; - esac - ;; - - sunos4*) - archive_cmds_F77='$LD -assert pure-text -Bshareable -o $lib $libobjs $deplibs $linker_flags' - wlarc= - hardcode_direct_F77=yes - hardcode_shlibpath_var_F77=no - ;; - - *) - if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then - archive_cmds_F77='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' - archive_expsym_cmds_F77='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' - else - ld_shlibs_F77=no - fi - ;; - esac - - if test "$ld_shlibs_F77" = no; then - runpath_var= - hardcode_libdir_flag_spec_F77= - export_dynamic_flag_spec_F77= - whole_archive_flag_spec_F77= - fi - else - # PORTME fill in a description of your system's linker (not GNU ld) - case $host_os in - aix3*) - allow_undefined_flag_F77=unsupported - always_export_symbols_F77=yes - archive_expsym_cmds_F77='$LD -o $output_objdir/$soname $libobjs $deplibs $linker_flags -bE:$export_symbols -T512 -H512 -bM:SRE~$AR $AR_FLAGS $lib $output_objdir/$soname' - # Note: this linker hardcodes the directories in LIBPATH if there - # are no directories specified by -L. - hardcode_minus_L_F77=yes - if test "$GCC" = yes && test -z "$lt_prog_compiler_static"; then - # Neither direct hardcoding nor static linking is supported with a - # broken collect2. - hardcode_direct_F77=unsupported - fi - ;; - - aix4* | aix5*) - if test "$host_cpu" = ia64; then - # On IA64, the linker does run time linking by default, so we don't - # have to do anything special. - aix_use_runtimelinking=no - exp_sym_flag='-Bexport' - no_entry_flag="" - else - # If we're using GNU nm, then we don't want the "-C" option. - # -C means demangle to AIX nm, but means don't demangle with GNU nm - if $NM -V 2>&1 | grep 'GNU' > /dev/null; then - export_symbols_cmds_F77='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$2 == "T") || (\$2 == "D") || (\$2 == "B")) && (substr(\$3,1,1) != ".")) { print \$3 } }'\'' | sort -u > $export_symbols' - else - export_symbols_cmds_F77='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$2 == "T") || (\$2 == "D") || (\$2 == "B")) && (substr(\$3,1,1) != ".")) { print \$3 } }'\'' | sort -u > $export_symbols' - fi - aix_use_runtimelinking=no - - # Test if we are trying to use run time linking or normal - # AIX style linking. If -brtl is somewhere in LDFLAGS, we - # need to do runtime linking. - case $host_os in aix4.[23]|aix4.[23].*|aix5*) - for ld_flag in $LDFLAGS; do - if (test $ld_flag = "-brtl" || test $ld_flag = "-Wl,-brtl"); then - aix_use_runtimelinking=yes - break - fi - done - ;; - esac - - exp_sym_flag='-bexport' - no_entry_flag='-bnoentry' - fi - - # When large executables or shared objects are built, AIX ld can - # have problems creating the table of contents. If linking a library - # or program results in "error TOC overflow" add -mminimal-toc to - # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not - # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS. - - archive_cmds_F77='' - hardcode_direct_F77=yes - hardcode_libdir_separator_F77=':' - link_all_deplibs_F77=yes - - if test "$GCC" = yes; then - case $host_os in aix4.[012]|aix4.[012].*) - # We only want to do this on AIX 4.2 and lower, the check - # below for broken collect2 doesn't work under 4.3+ - collect2name=`${CC} -print-prog-name=collect2` - if test -f "$collect2name" && \ - strings "$collect2name" | grep resolve_lib_name >/dev/null - then - # We have reworked collect2 - : - else - # We have old collect2 - hardcode_direct_F77=unsupported - # It fails to find uninstalled libraries when the uninstalled - # path is not listed in the libpath. Setting hardcode_minus_L - # to unsupported forces relinking - hardcode_minus_L_F77=yes - hardcode_libdir_flag_spec_F77='-L$libdir' - hardcode_libdir_separator_F77= - fi - ;; - esac - shared_flag='-shared' - if test "$aix_use_runtimelinking" = yes; then - shared_flag="$shared_flag "'${wl}-G' - fi - else - # not using gcc - if test "$host_cpu" = ia64; then - # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release - # chokes on -Wl,-G. The following line is correct: - shared_flag='-G' - else - if test "$aix_use_runtimelinking" = yes; then - shared_flag='${wl}-G' - else - shared_flag='${wl}-bM:SRE' - fi - fi - fi - - # It seems that -bexpall does not export symbols beginning with - # underscore (_), so it is better to generate a list of symbols to export. - always_export_symbols_F77=yes - if test "$aix_use_runtimelinking" = yes; then - # Warning - without using the other runtime loading flags (-brtl), - # -berok will link without error, but may produce a broken library. - allow_undefined_flag_F77='-berok' - # Determine the default libpath from the value encoded in an empty executable. - cat >conftest.$ac_ext <<_ACEOF - program main - - end -_ACEOF -rm -f conftest.$ac_objext conftest$ac_exeext -if { (ac_try="$ac_link" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_link") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_f77_werror_flag" || - test ! -s conftest.err - } && test -s conftest$ac_exeext && - $as_test_x conftest$ac_exeext; then - -lt_aix_libpath_sed=' - /Import File Strings/,/^$/ { - /^0/ { - s/^0 *\(.*\)$/\1/ - p - } - }' -aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` -# Check for a 64-bit object if we didn't find anything. -if test -z "$aix_libpath"; then - aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` -fi -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - -fi - -rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ - conftest$ac_exeext conftest.$ac_ext -if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi - - hardcode_libdir_flag_spec_F77='${wl}-blibpath:$libdir:'"$aix_libpath" - archive_expsym_cmds_F77="\$CC"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then echo "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag" - else - if test "$host_cpu" = ia64; then - hardcode_libdir_flag_spec_F77='${wl}-R $libdir:/usr/lib:/lib' - allow_undefined_flag_F77="-z nodefs" - archive_expsym_cmds_F77="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$exp_sym_flag:\$export_symbols" - else - # Determine the default libpath from the value encoded in an empty executable. - cat >conftest.$ac_ext <<_ACEOF - program main - - end -_ACEOF -rm -f conftest.$ac_objext conftest$ac_exeext -if { (ac_try="$ac_link" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_link") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_f77_werror_flag" || - test ! -s conftest.err - } && test -s conftest$ac_exeext && - $as_test_x conftest$ac_exeext; then - -lt_aix_libpath_sed=' - /Import File Strings/,/^$/ { - /^0/ { - s/^0 *\(.*\)$/\1/ - p - } - }' -aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` -# Check for a 64-bit object if we didn't find anything. -if test -z "$aix_libpath"; then - aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` -fi -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - -fi - -rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ - conftest$ac_exeext conftest.$ac_ext -if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi - - hardcode_libdir_flag_spec_F77='${wl}-blibpath:$libdir:'"$aix_libpath" - # Warning - without using the other run time loading flags, - # -berok will link without error, but may produce a broken library. - no_undefined_flag_F77=' ${wl}-bernotok' - allow_undefined_flag_F77=' ${wl}-berok' - # Exported symbols can be pulled into shared objects from archives - whole_archive_flag_spec_F77='$convenience' - archive_cmds_need_lc_F77=yes - # This is similar to how AIX traditionally builds its shared libraries. - archive_expsym_cmds_F77="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs ${wl}-bnoentry $compiler_flags ${wl}-bE:$export_symbols${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname' - fi - fi - ;; - - amigaos*) - archive_cmds_F77='$rm $output_objdir/a2ixlibrary.data~$echo "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$echo "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$echo "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$echo "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' - hardcode_libdir_flag_spec_F77='-L$libdir' - hardcode_minus_L_F77=yes - # see comment about different semantics on the GNU ld section - ld_shlibs_F77=no - ;; - - bsdi[45]*) - export_dynamic_flag_spec_F77=-rdynamic - ;; - - cygwin* | mingw* | pw32*) - # When not using gcc, we currently assume that we are using - # Microsoft Visual C++. - # hardcode_libdir_flag_spec is actually meaningless, as there is - # no search path for DLLs. - hardcode_libdir_flag_spec_F77=' ' - allow_undefined_flag_F77=unsupported - # Tell ltmain to make .lib files, not .a files. - libext=lib - # Tell ltmain to make .dll files, not .so files. - shrext_cmds=".dll" - # FIXME: Setting linknames here is a bad hack. - archive_cmds_F77='$CC -o $lib $libobjs $compiler_flags `echo "$deplibs" | $SED -e '\''s/ -lc$//'\''` -link -dll~linknames=' - # The linker will automatically build a .lib file if we build a DLL. - old_archive_From_new_cmds_F77='true' - # FIXME: Should let the user specify the lib program. - old_archive_cmds_F77='lib -OUT:$oldlib$oldobjs$old_deplibs' - fix_srcfile_path_F77='`cygpath -w "$srcfile"`' - enable_shared_with_static_runtimes_F77=yes - ;; - - darwin* | rhapsody*) - case $host_os in - rhapsody* | darwin1.[012]) - allow_undefined_flag_F77='${wl}-undefined ${wl}suppress' - ;; - *) # Darwin 1.3 on - if test -z ${MACOSX_DEPLOYMENT_TARGET} ; then - allow_undefined_flag_F77='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' - else - case ${MACOSX_DEPLOYMENT_TARGET} in - 10.[012]) - allow_undefined_flag_F77='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' - ;; - 10.*) - allow_undefined_flag_F77='${wl}-undefined ${wl}dynamic_lookup' - ;; - esac - fi - ;; - esac - archive_cmds_need_lc_F77=no - hardcode_direct_F77=no - hardcode_automatic_F77=yes - hardcode_shlibpath_var_F77=unsupported - whole_archive_flag_spec_F77='' - link_all_deplibs_F77=yes - if test "$GCC" = yes ; then - output_verbose_link_cmd='echo' - archive_cmds_F77='$CC -dynamiclib $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags -install_name $rpath/$soname $verstring' - module_cmds_F77='$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags' - # Don't fix this by using the ld -exported_symbols_list flag, it doesn't exist in older darwin lds - archive_expsym_cmds_F77='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -dynamiclib $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags -install_name $rpath/$soname $verstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' - module_expsym_cmds_F77='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' - else - case $cc_basename in - xlc*) - output_verbose_link_cmd='echo' - archive_cmds_F77='$CC -qmkshrobj $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-install_name ${wl}`echo $rpath/$soname` $xlcverstring' - module_cmds_F77='$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags' - # Don't fix this by using the ld -exported_symbols_list flag, it doesn't exist in older darwin lds - archive_expsym_cmds_F77='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -qmkshrobj $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-install_name ${wl}$rpath/$soname $xlcverstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' - module_expsym_cmds_F77='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' - ;; - *) - ld_shlibs_F77=no - ;; - esac - fi - ;; - - dgux*) - archive_cmds_F77='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' - hardcode_libdir_flag_spec_F77='-L$libdir' - hardcode_shlibpath_var_F77=no - ;; - - freebsd1*) - ld_shlibs_F77=no - ;; - - # FreeBSD 2.2.[012] allows us to include c++rt0.o to get C++ constructor - # support. Future versions do this automatically, but an explicit c++rt0.o - # does not break anything, and helps significantly (at the cost of a little - # extra space). - freebsd2.2*) - archive_cmds_F77='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags /usr/lib/c++rt0.o' - hardcode_libdir_flag_spec_F77='-R$libdir' - hardcode_direct_F77=yes - hardcode_shlibpath_var_F77=no - ;; - - # Unfortunately, older versions of FreeBSD 2 do not have this feature. - freebsd2*) - archive_cmds_F77='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' - hardcode_direct_F77=yes - hardcode_minus_L_F77=yes - hardcode_shlibpath_var_F77=no - ;; - - # FreeBSD 3 and greater uses gcc -shared to do shared libraries. - freebsd* | dragonfly*) - archive_cmds_F77='$CC -shared -o $lib $libobjs $deplibs $compiler_flags' - hardcode_libdir_flag_spec_F77='-R$libdir' - hardcode_direct_F77=yes - hardcode_shlibpath_var_F77=no - ;; - - hpux9*) - if test "$GCC" = yes; then - archive_cmds_F77='$rm $output_objdir/$soname~$CC -shared -fPIC ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' - else - archive_cmds_F77='$rm $output_objdir/$soname~$LD -b +b $install_libdir -o $output_objdir/$soname $libobjs $deplibs $linker_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' - fi - hardcode_libdir_flag_spec_F77='${wl}+b ${wl}$libdir' - hardcode_libdir_separator_F77=: - hardcode_direct_F77=yes - - # hardcode_minus_L: Not really in the search PATH, - # but as the default location of the library. - hardcode_minus_L_F77=yes - export_dynamic_flag_spec_F77='${wl}-E' - ;; - - hpux10*) - if test "$GCC" = yes -a "$with_gnu_ld" = no; then - archive_cmds_F77='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' - else - archive_cmds_F77='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags' - fi - if test "$with_gnu_ld" = no; then - hardcode_libdir_flag_spec_F77='${wl}+b ${wl}$libdir' - hardcode_libdir_separator_F77=: - - hardcode_direct_F77=yes - export_dynamic_flag_spec_F77='${wl}-E' - - # hardcode_minus_L: Not really in the search PATH, - # but as the default location of the library. - hardcode_minus_L_F77=yes - fi - ;; - - hpux11*) - if test "$GCC" = yes -a "$with_gnu_ld" = no; then - case $host_cpu in - hppa*64*) - archive_cmds_F77='$CC -shared ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' - ;; - ia64*) - archive_cmds_F77='$CC -shared ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' - ;; - *) - archive_cmds_F77='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' - ;; - esac - else - case $host_cpu in - hppa*64*) - archive_cmds_F77='$CC -b ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' - ;; - ia64*) - archive_cmds_F77='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' - ;; - *) - archive_cmds_F77='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' - ;; - esac - fi - if test "$with_gnu_ld" = no; then - hardcode_libdir_flag_spec_F77='${wl}+b ${wl}$libdir' - hardcode_libdir_separator_F77=: - - case $host_cpu in - hppa*64*|ia64*) - hardcode_libdir_flag_spec_ld_F77='+b $libdir' - hardcode_direct_F77=no - hardcode_shlibpath_var_F77=no - ;; - *) - hardcode_direct_F77=yes - export_dynamic_flag_spec_F77='${wl}-E' - - # hardcode_minus_L: Not really in the search PATH, - # but as the default location of the library. - hardcode_minus_L_F77=yes - ;; - esac - fi - ;; - - irix5* | irix6* | nonstopux*) - if test "$GCC" = yes; then - archive_cmds_F77='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' - else - archive_cmds_F77='$LD -shared $libobjs $deplibs $linker_flags -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib' - hardcode_libdir_flag_spec_ld_F77='-rpath $libdir' - fi - hardcode_libdir_flag_spec_F77='${wl}-rpath ${wl}$libdir' - hardcode_libdir_separator_F77=: - link_all_deplibs_F77=yes - ;; - - netbsd*) - if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then - archive_cmds_F77='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' # a.out - else - archive_cmds_F77='$LD -shared -o $lib $libobjs $deplibs $linker_flags' # ELF - fi - hardcode_libdir_flag_spec_F77='-R$libdir' - hardcode_direct_F77=yes - hardcode_shlibpath_var_F77=no - ;; - - newsos6) - archive_cmds_F77='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' - hardcode_direct_F77=yes - hardcode_libdir_flag_spec_F77='${wl}-rpath ${wl}$libdir' - hardcode_libdir_separator_F77=: - hardcode_shlibpath_var_F77=no - ;; - - openbsd*) - if test -f /usr/libexec/ld.so; then - hardcode_direct_F77=yes - hardcode_shlibpath_var_F77=no - if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then - archive_cmds_F77='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' - archive_expsym_cmds_F77='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-retain-symbols-file,$export_symbols' - hardcode_libdir_flag_spec_F77='${wl}-rpath,$libdir' - export_dynamic_flag_spec_F77='${wl}-E' - else - case $host_os in - openbsd[01].* | openbsd2.[0-7] | openbsd2.[0-7].*) - archive_cmds_F77='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' - hardcode_libdir_flag_spec_F77='-R$libdir' - ;; - *) - archive_cmds_F77='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' - hardcode_libdir_flag_spec_F77='${wl}-rpath,$libdir' - ;; - esac - fi - else - ld_shlibs_F77=no - fi - ;; - - os2*) - hardcode_libdir_flag_spec_F77='-L$libdir' - hardcode_minus_L_F77=yes - allow_undefined_flag_F77=unsupported - archive_cmds_F77='$echo "LIBRARY $libname INITINSTANCE" > $output_objdir/$libname.def~$echo "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~$echo DATA >> $output_objdir/$libname.def~$echo " SINGLE NONSHARED" >> $output_objdir/$libname.def~$echo EXPORTS >> $output_objdir/$libname.def~emxexp $libobjs >> $output_objdir/$libname.def~$CC -Zdll -Zcrtdll -o $lib $libobjs $deplibs $compiler_flags $output_objdir/$libname.def' - old_archive_From_new_cmds_F77='emximp -o $output_objdir/$libname.a $output_objdir/$libname.def' - ;; - - osf3*) - if test "$GCC" = yes; then - allow_undefined_flag_F77=' ${wl}-expect_unresolved ${wl}\*' - archive_cmds_F77='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' - else - allow_undefined_flag_F77=' -expect_unresolved \*' - archive_cmds_F77='$LD -shared${allow_undefined_flag} $libobjs $deplibs $linker_flags -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib' - fi - hardcode_libdir_flag_spec_F77='${wl}-rpath ${wl}$libdir' - hardcode_libdir_separator_F77=: - ;; - - osf4* | osf5*) # as osf3* with the addition of -msym flag - if test "$GCC" = yes; then - allow_undefined_flag_F77=' ${wl}-expect_unresolved ${wl}\*' - archive_cmds_F77='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' - hardcode_libdir_flag_spec_F77='${wl}-rpath ${wl}$libdir' - else - allow_undefined_flag_F77=' -expect_unresolved \*' - archive_cmds_F77='$LD -shared${allow_undefined_flag} $libobjs $deplibs $linker_flags -msym -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib' - archive_expsym_cmds_F77='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done; echo "-hidden">> $lib.exp~ - $LD -shared${allow_undefined_flag} -input $lib.exp $linker_flags $libobjs $deplibs -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib~$rm $lib.exp' - - # Both c and cxx compiler support -rpath directly - hardcode_libdir_flag_spec_F77='-rpath $libdir' - fi - hardcode_libdir_separator_F77=: - ;; - - solaris*) - no_undefined_flag_F77=' -z text' - if test "$GCC" = yes; then - wlarc='${wl}' - archive_cmds_F77='$CC -shared ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' - archive_expsym_cmds_F77='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~ - $CC -shared ${wl}-M ${wl}$lib.exp ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags~$rm $lib.exp' - else - wlarc='' - archive_cmds_F77='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linker_flags' - archive_expsym_cmds_F77='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~ - $LD -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$rm $lib.exp' - fi - hardcode_libdir_flag_spec_F77='-R$libdir' - hardcode_shlibpath_var_F77=no - case $host_os in - solaris2.[0-5] | solaris2.[0-5].*) ;; - *) - # The compiler driver will combine and reorder linker options, - # but understands `-z linker_flag'. GCC discards it without `$wl', - # but is careful enough not to reorder. - # Supported since Solaris 2.6 (maybe 2.5.1?) - if test "$GCC" = yes; then - whole_archive_flag_spec_F77='${wl}-z ${wl}allextract$convenience ${wl}-z ${wl}defaultextract' - else - whole_archive_flag_spec_F77='-z allextract$convenience -z defaultextract' - fi - ;; - esac - link_all_deplibs_F77=yes - ;; - - sunos4*) - if test "x$host_vendor" = xsequent; then - # Use $CC to link under sequent, because it throws in some extra .o - # files that make .init and .fini sections work. - archive_cmds_F77='$CC -G ${wl}-h $soname -o $lib $libobjs $deplibs $compiler_flags' - else - archive_cmds_F77='$LD -assert pure-text -Bstatic -o $lib $libobjs $deplibs $linker_flags' - fi - hardcode_libdir_flag_spec_F77='-L$libdir' - hardcode_direct_F77=yes - hardcode_minus_L_F77=yes - hardcode_shlibpath_var_F77=no - ;; - - sysv4) - case $host_vendor in - sni) - archive_cmds_F77='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' - hardcode_direct_F77=yes # is this really true??? - ;; - siemens) - ## LD is ld it makes a PLAMLIB - ## CC just makes a GrossModule. - archive_cmds_F77='$LD -G -o $lib $libobjs $deplibs $linker_flags' - reload_cmds_F77='$CC -r -o $output$reload_objs' - hardcode_direct_F77=no - ;; - motorola) - archive_cmds_F77='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' - hardcode_direct_F77=no #Motorola manual says yes, but my tests say they lie - ;; - esac - runpath_var='LD_RUN_PATH' - hardcode_shlibpath_var_F77=no - ;; - - sysv4.3*) - archive_cmds_F77='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' - hardcode_shlibpath_var_F77=no - export_dynamic_flag_spec_F77='-Bexport' - ;; - - sysv4*MP*) - if test -d /usr/nec; then - archive_cmds_F77='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' - hardcode_shlibpath_var_F77=no - runpath_var=LD_RUN_PATH - hardcode_runpath_var=yes - ld_shlibs_F77=yes - fi - ;; - - sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[01].[10]* | unixware7* | sco3.2v5.0.[024]*) - no_undefined_flag_F77='${wl}-z,text' - archive_cmds_need_lc_F77=no - hardcode_shlibpath_var_F77=no - runpath_var='LD_RUN_PATH' - - if test "$GCC" = yes; then - archive_cmds_F77='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - archive_expsym_cmds_F77='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - else - archive_cmds_F77='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - archive_expsym_cmds_F77='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - fi - ;; - - sysv5* | sco3.2v5* | sco5v6*) - # Note: We can NOT use -z defs as we might desire, because we do not - # link with -lc, and that would cause any symbols used from libc to - # always be unresolved, which means just about no library would - # ever link correctly. If we're not using GNU ld we use -z text - # though, which does catch some bad symbols but isn't as heavy-handed - # as -z defs. - no_undefined_flag_F77='${wl}-z,text' - allow_undefined_flag_F77='${wl}-z,nodefs' - archive_cmds_need_lc_F77=no - hardcode_shlibpath_var_F77=no - hardcode_libdir_flag_spec_F77='`test -z "$SCOABSPATH" && echo ${wl}-R,$libdir`' - hardcode_libdir_separator_F77=':' - link_all_deplibs_F77=yes - export_dynamic_flag_spec_F77='${wl}-Bexport' - runpath_var='LD_RUN_PATH' - - if test "$GCC" = yes; then - archive_cmds_F77='$CC -shared ${wl}-h,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags' - archive_expsym_cmds_F77='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags' - else - archive_cmds_F77='$CC -G ${wl}-h,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags' - archive_expsym_cmds_F77='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags' - fi - ;; - - uts4*) - archive_cmds_F77='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' - hardcode_libdir_flag_spec_F77='-L$libdir' - hardcode_shlibpath_var_F77=no - ;; - - *) - ld_shlibs_F77=no - ;; - esac - fi - -{ echo "$as_me:$LINENO: result: $ld_shlibs_F77" >&5 -echo "${ECHO_T}$ld_shlibs_F77" >&6; } -test "$ld_shlibs_F77" = no && can_build_shared=no - -# -# Do we need to explicitly link libc? -# -case "x$archive_cmds_need_lc_F77" in -x|xyes) - # Assume -lc should be added - archive_cmds_need_lc_F77=yes - - if test "$enable_shared" = yes && test "$GCC" = yes; then - case $archive_cmds_F77 in - *'~'*) - # FIXME: we may have to deal with multi-command sequences. - ;; - '$CC '*) - # Test whether the compiler implicitly links with -lc since on some - # systems, -lgcc has to come before -lc. If gcc already passes -lc - # to ld, don't add -lc before -lgcc. - { echo "$as_me:$LINENO: checking whether -lc should be explicitly linked in" >&5 -echo $ECHO_N "checking whether -lc should be explicitly linked in... $ECHO_C" >&6; } - $rm conftest* - echo "$lt_simple_compile_test_code" > conftest.$ac_ext - - if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } 2>conftest.err; then - soname=conftest - lib=conftest - libobjs=conftest.$ac_objext - deplibs= - wl=$lt_prog_compiler_wl_F77 - pic_flag=$lt_prog_compiler_pic_F77 - compiler_flags=-v - linker_flags=-v - verstring= - output_objdir=. - libname=conftest - lt_save_allow_undefined_flag=$allow_undefined_flag_F77 - allow_undefined_flag_F77= - if { (eval echo "$as_me:$LINENO: \"$archive_cmds_F77 2\>\&1 \| grep \" -lc \" \>/dev/null 2\>\&1\"") >&5 - (eval $archive_cmds_F77 2\>\&1 \| grep \" -lc \" \>/dev/null 2\>\&1) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } - then - archive_cmds_need_lc_F77=no - else - archive_cmds_need_lc_F77=yes - fi - allow_undefined_flag_F77=$lt_save_allow_undefined_flag - else - cat conftest.err 1>&5 - fi - $rm conftest* - { echo "$as_me:$LINENO: result: $archive_cmds_need_lc_F77" >&5 -echo "${ECHO_T}$archive_cmds_need_lc_F77" >&6; } - ;; - esac - fi - ;; -esac - -{ echo "$as_me:$LINENO: checking dynamic linker characteristics" >&5 -echo $ECHO_N "checking dynamic linker characteristics... $ECHO_C" >&6; } -library_names_spec= -libname_spec='lib$name' -soname_spec= -shrext_cmds=".so" -postinstall_cmds= -postuninstall_cmds= -finish_cmds= -finish_eval= -shlibpath_var= -shlibpath_overrides_runpath=unknown -version_type=none -dynamic_linker="$host_os ld.so" -sys_lib_dlsearch_path_spec="/lib /usr/lib" - -need_lib_prefix=unknown -hardcode_into_libs=no - -# when you set need_version to no, make sure it does not cause -set_version -# flags to be left without arguments -need_version=unknown - -case $host_os in -aix3*) - version_type=linux - library_names_spec='${libname}${release}${shared_ext}$versuffix $libname.a' - shlibpath_var=LIBPATH - - # AIX 3 has no versioning support, so we append a major version to the name. - soname_spec='${libname}${release}${shared_ext}$major' - ;; - -aix4* | aix5*) - version_type=linux - need_lib_prefix=no - need_version=no - hardcode_into_libs=yes - if test "$host_cpu" = ia64; then - # AIX 5 supports IA64 - library_names_spec='${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext}$versuffix $libname${shared_ext}' - shlibpath_var=LD_LIBRARY_PATH - else - # With GCC up to 2.95.x, collect2 would create an import file - # for dependence libraries. The import file would start with - # the line `#! .'. This would cause the generated library to - # depend on `.', always an invalid library. This was fixed in - # development snapshots of GCC prior to 3.0. - case $host_os in - aix4 | aix4.[01] | aix4.[01].*) - if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)' - echo ' yes ' - echo '#endif'; } | ${CC} -E - | grep yes > /dev/null; then - : - else - can_build_shared=no - fi - ;; - esac - # AIX (on Power*) has no versioning support, so currently we can not hardcode correct - # soname into executable. Probably we can add versioning support to - # collect2, so additional links can be useful in future. - if test "$aix_use_runtimelinking" = yes; then - # If using run time linking (on AIX 4.2 or later) use lib.so - # instead of lib.a to let people know that these are not - # typical AIX shared libraries. - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - else - # We preserve .a as extension for shared libraries through AIX4.2 - # and later when we are not doing run time linking. - library_names_spec='${libname}${release}.a $libname.a' - soname_spec='${libname}${release}${shared_ext}$major' - fi - shlibpath_var=LIBPATH - fi - ;; - -amigaos*) - library_names_spec='$libname.ixlibrary $libname.a' - # Create ${libname}_ixlibrary.a entries in /sys/libs. - finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`$echo "X$lib" | $Xsed -e '\''s%^.*/\([^/]*\)\.ixlibrary$%\1%'\''`; test $rm /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done' - ;; - -beos*) - library_names_spec='${libname}${shared_ext}' - dynamic_linker="$host_os ld.so" - shlibpath_var=LIBRARY_PATH - ;; - -bsdi[45]*) - version_type=linux - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir' - shlibpath_var=LD_LIBRARY_PATH - sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib" - sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib" - # the default ld.so.conf also contains /usr/contrib/lib and - # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow - # libtool to hard-code these into programs - ;; - -cygwin* | mingw* | pw32*) - version_type=windows - shrext_cmds=".dll" - need_version=no - need_lib_prefix=no - - case $GCC,$host_os in - yes,cygwin* | yes,mingw* | yes,pw32*) - library_names_spec='$libname.dll.a' - # DLL is installed to $(libdir)/../bin by postinstall_cmds - postinstall_cmds='base_file=`basename \${file}`~ - dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i;echo \$dlname'\''`~ - dldir=$destdir/`dirname \$dlpath`~ - test -d \$dldir || mkdir -p \$dldir~ - $install_prog $dir/$dlname \$dldir/$dlname~ - chmod a+x \$dldir/$dlname' - postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ - dlpath=$dir/\$dldll~ - $rm \$dlpath' - shlibpath_overrides_runpath=yes - - case $host_os in - cygwin*) - # Cygwin DLLs use 'cyg' prefix rather than 'lib' - soname_spec='`echo ${libname} | sed -e 's/^lib/cyg/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' - sys_lib_search_path_spec="/usr/lib /lib/w32api /lib /usr/local/lib" - ;; - mingw*) - # MinGW DLLs use traditional 'lib' prefix - soname_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' - sys_lib_search_path_spec=`$CC -print-search-dirs | grep "^libraries:" | $SED -e "s/^libraries://" -e "s,=/,/,g"` - if echo "$sys_lib_search_path_spec" | grep ';[c-zC-Z]:/' >/dev/null; then - # It is most probably a Windows format PATH printed by - # mingw gcc, but we are running on Cygwin. Gcc prints its search - # path with ; separators, and with drive letters. We can handle the - # drive letters (cygwin fileutils understands them), so leave them, - # especially as we might pass files found there to a mingw objdump, - # which wouldn't understand a cygwinified path. Ahh. - sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'` - else - sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` - fi - ;; - pw32*) - # pw32 DLLs use 'pw' prefix rather than 'lib' - library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' - ;; - esac - ;; - - *) - library_names_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext} $libname.lib' - ;; - esac - dynamic_linker='Win32 ld.exe' - # FIXME: first we should search . and the directory the executable is in - shlibpath_var=PATH - ;; - -darwin* | rhapsody*) - dynamic_linker="$host_os dyld" - version_type=darwin - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${versuffix}$shared_ext ${libname}${release}${major}$shared_ext ${libname}$shared_ext' - soname_spec='${libname}${release}${major}$shared_ext' - shlibpath_overrides_runpath=yes - shlibpath_var=DYLD_LIBRARY_PATH - shrext_cmds='`test .$module = .yes && echo .so || echo .dylib`' - - sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib' - ;; - -dgux*) - version_type=linux - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname$shared_ext' - soname_spec='${libname}${release}${shared_ext}$major' - shlibpath_var=LD_LIBRARY_PATH - ;; - -freebsd1*) - dynamic_linker=no - ;; - -freebsd* | dragonfly*) - # DragonFly does not have aout. When/if they implement a new - # versioning mechanism, adjust this. - if test -x /usr/bin/objformat; then - objformat=`/usr/bin/objformat` - else - case $host_os in - freebsd[123]*) objformat=aout ;; - *) objformat=elf ;; - esac - fi - version_type=freebsd-$objformat - case $version_type in - freebsd-elf*) - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' - need_version=no - need_lib_prefix=no - ;; - freebsd-*) - library_names_spec='${libname}${release}${shared_ext}$versuffix $libname${shared_ext}$versuffix' - need_version=yes - ;; - esac - shlibpath_var=LD_LIBRARY_PATH - case $host_os in - freebsd2*) - shlibpath_overrides_runpath=yes - ;; - freebsd3.[01]* | freebsdelf3.[01]*) - shlibpath_overrides_runpath=yes - hardcode_into_libs=yes - ;; - freebsd3.[2-9]* | freebsdelf3.[2-9]* | \ - freebsd4.[0-5] | freebsdelf4.[0-5] | freebsd4.1.1 | freebsdelf4.1.1) - shlibpath_overrides_runpath=no - hardcode_into_libs=yes - ;; - *) # from 4.6 on, and DragonFly - shlibpath_overrides_runpath=yes - hardcode_into_libs=yes - ;; - esac - ;; - -gnu*) - version_type=linux - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - shlibpath_var=LD_LIBRARY_PATH - hardcode_into_libs=yes - ;; - -hpux9* | hpux10* | hpux11*) - # Give a soname corresponding to the major version so that dld.sl refuses to - # link against other versions. - version_type=sunos - need_lib_prefix=no - need_version=no - case $host_cpu in - ia64*) - shrext_cmds='.so' - hardcode_into_libs=yes - dynamic_linker="$host_os dld.so" - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - if test "X$HPUX_IA64_MODE" = X32; then - sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib" - else - sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64" - fi - sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec - ;; - hppa*64*) - shrext_cmds='.sl' - hardcode_into_libs=yes - dynamic_linker="$host_os dld.sl" - shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH - shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64" - sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec - ;; - *) - shrext_cmds='.sl' - dynamic_linker="$host_os dld.sl" - shlibpath_var=SHLIB_PATH - shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - ;; - esac - # HP-UX runs *really* slowly unless shared libraries are mode 555. - postinstall_cmds='chmod 555 $lib' - ;; - -interix[3-9]*) - version_type=linux - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - dynamic_linker='Interix 3.x ld.so.1 (PE, like ELF)' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=no - hardcode_into_libs=yes - ;; - -irix5* | irix6* | nonstopux*) - case $host_os in - nonstopux*) version_type=nonstopux ;; - *) - if test "$lt_cv_prog_gnu_ld" = yes; then - version_type=linux - else - version_type=irix - fi ;; - esac - need_lib_prefix=no - need_version=no - soname_spec='${libname}${release}${shared_ext}$major' - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext} $libname${shared_ext}' - case $host_os in - irix5* | nonstopux*) - libsuff= shlibsuff= - ;; - *) - case $LD in # libtool.m4 will add one of these switches to LD - *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ") - libsuff= shlibsuff= libmagic=32-bit;; - *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ") - libsuff=32 shlibsuff=N32 libmagic=N32;; - *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ") - libsuff=64 shlibsuff=64 libmagic=64-bit;; - *) libsuff= shlibsuff= libmagic=never-match;; - esac - ;; - esac - shlibpath_var=LD_LIBRARY${shlibsuff}_PATH - shlibpath_overrides_runpath=no - sys_lib_search_path_spec="/usr/lib${libsuff} /lib${libsuff} /usr/local/lib${libsuff}" - sys_lib_dlsearch_path_spec="/usr/lib${libsuff} /lib${libsuff}" - hardcode_into_libs=yes - ;; - -# No shared lib support for Linux oldld, aout, or coff. -linux*oldld* | linux*aout* | linux*coff*) - dynamic_linker=no - ;; - -# This must be Linux ELF. -linux* | k*bsd*-gnu) - version_type=linux - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=no - # This implies no fast_install, which is unacceptable. - # Some rework will be needed to allow for fast_install - # before this can be enabled. - hardcode_into_libs=yes - sys_lib_search_path_spec="/usr/lib${libsuff} /lib${libsuff} /usr/local/lib${libsuff}" - sys_lib_dlsearch_path_spec="/usr/lib${libsuff} /lib${libsuff}" - - # Append ld.so.conf contents to the search path - if test -f /etc/ld.so.conf; then - lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s 2>/dev/null", \$2)); skip = 1; } { if (!skip) print \$0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;/^[ ]*hwcap[ ]/d;s/[:, ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;/^$/d' | tr '\n' ' '` - sys_lib_dlsearch_path_spec="$sys_lib_dlsearch_path_spec $lt_ld_extra" - fi - - # We used to test for /lib/ld.so.1 and disable shared libraries on - # powerpc, because MkLinux only supported shared libraries with the - # GNU dynamic linker. Since this was broken with cross compilers, - # most powerpc-linux boxes support dynamic linking these days and - # people can always --disable-shared, the test was removed, and we - # assume the GNU/Linux dynamic linker is in use. - dynamic_linker='GNU/Linux ld.so' - ;; - -netbsd*) - version_type=sunos - need_lib_prefix=no - need_version=no - if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' - finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' - dynamic_linker='NetBSD (a.out) ld.so' - else - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - dynamic_linker='NetBSD ld.elf_so' - fi - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=yes - hardcode_into_libs=yes - ;; - -newsos6) - version_type=linux - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=yes - ;; - -nto-qnx*) - version_type=linux - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=yes - ;; - -openbsd*) - version_type=sunos - sys_lib_dlsearch_path_spec="/usr/lib" - need_lib_prefix=no - # Some older versions of OpenBSD (3.3 at least) *do* need versioned libs. - case $host_os in - openbsd3.3 | openbsd3.3.*) need_version=yes ;; - *) need_version=no ;; - esac - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' - finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' - shlibpath_var=LD_LIBRARY_PATH - if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then - case $host_os in - openbsd2.[89] | openbsd2.[89].*) - shlibpath_overrides_runpath=no - ;; - *) - shlibpath_overrides_runpath=yes - ;; - esac - else - shlibpath_overrides_runpath=yes - fi - ;; - -os2*) - libname_spec='$name' - shrext_cmds=".dll" - need_lib_prefix=no - library_names_spec='$libname${shared_ext} $libname.a' - dynamic_linker='OS/2 ld.exe' - shlibpath_var=LIBPATH - ;; - -osf3* | osf4* | osf5*) - version_type=osf - need_lib_prefix=no - need_version=no - soname_spec='${libname}${release}${shared_ext}$major' - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - shlibpath_var=LD_LIBRARY_PATH - sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib" - sys_lib_dlsearch_path_spec="$sys_lib_search_path_spec" - ;; - -rdos*) - dynamic_linker=no - ;; - -solaris*) - version_type=linux - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=yes - hardcode_into_libs=yes - # ldd complains unless libraries are executable - postinstall_cmds='chmod +x $lib' - ;; - -sunos4*) - version_type=sunos - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' - finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=yes - if test "$with_gnu_ld" = yes; then - need_lib_prefix=no - fi - need_version=yes - ;; - -sysv4 | sysv4.3*) - version_type=linux - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - shlibpath_var=LD_LIBRARY_PATH - case $host_vendor in - sni) - shlibpath_overrides_runpath=no - need_lib_prefix=no - export_dynamic_flag_spec='${wl}-Blargedynsym' - runpath_var=LD_RUN_PATH - ;; - siemens) - need_lib_prefix=no - ;; - motorola) - need_lib_prefix=no - need_version=no - shlibpath_overrides_runpath=no - sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib' - ;; - esac - ;; - -sysv4*MP*) - if test -d /usr/nec ;then - version_type=linux - library_names_spec='$libname${shared_ext}.$versuffix $libname${shared_ext}.$major $libname${shared_ext}' - soname_spec='$libname${shared_ext}.$major' - shlibpath_var=LD_LIBRARY_PATH - fi - ;; - -sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) - version_type=freebsd-elf - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - shlibpath_var=LD_LIBRARY_PATH - hardcode_into_libs=yes - if test "$with_gnu_ld" = yes; then - sys_lib_search_path_spec='/usr/local/lib /usr/gnu/lib /usr/ccs/lib /usr/lib /lib' - shlibpath_overrides_runpath=no - else - sys_lib_search_path_spec='/usr/ccs/lib /usr/lib' - shlibpath_overrides_runpath=yes - case $host_os in - sco3.2v5*) - sys_lib_search_path_spec="$sys_lib_search_path_spec /lib" - ;; - esac - fi - sys_lib_dlsearch_path_spec='/usr/lib' - ;; - -uts4*) - version_type=linux - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - shlibpath_var=LD_LIBRARY_PATH - ;; - -*) - dynamic_linker=no - ;; -esac -{ echo "$as_me:$LINENO: result: $dynamic_linker" >&5 -echo "${ECHO_T}$dynamic_linker" >&6; } -test "$dynamic_linker" = no && can_build_shared=no - -variables_saved_for_relink="PATH $shlibpath_var $runpath_var" -if test "$GCC" = yes; then - variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH" -fi - -{ echo "$as_me:$LINENO: checking how to hardcode library paths into programs" >&5 -echo $ECHO_N "checking how to hardcode library paths into programs... $ECHO_C" >&6; } -hardcode_action_F77= -if test -n "$hardcode_libdir_flag_spec_F77" || \ - test -n "$runpath_var_F77" || \ - test "X$hardcode_automatic_F77" = "Xyes" ; then - - # We can hardcode non-existent directories. - if test "$hardcode_direct_F77" != no && - # If the only mechanism to avoid hardcoding is shlibpath_var, we - # have to relink, otherwise we might link with an installed library - # when we should be linking with a yet-to-be-installed one - ## test "$_LT_AC_TAGVAR(hardcode_shlibpath_var, F77)" != no && - test "$hardcode_minus_L_F77" != no; then - # Linking always hardcodes the temporary library directory. - hardcode_action_F77=relink - else - # We can link without hardcoding, and we can hardcode nonexisting dirs. - hardcode_action_F77=immediate - fi -else - # We cannot hardcode anything, or else we can only hardcode existing - # directories. - hardcode_action_F77=unsupported -fi -{ echo "$as_me:$LINENO: result: $hardcode_action_F77" >&5 -echo "${ECHO_T}$hardcode_action_F77" >&6; } - -if test "$hardcode_action_F77" = relink; then - # Fast installation is not supported - enable_fast_install=no -elif test "$shlibpath_overrides_runpath" = yes || - test "$enable_shared" = no; then - # Fast installation is not necessary - enable_fast_install=needless -fi - - -# The else clause should only fire when bootstrapping the -# libtool distribution, otherwise you forgot to ship ltmain.sh -# with your package, and you will get complaints that there are -# no rules to generate ltmain.sh. -if test -f "$ltmain"; then - # See if we are running on zsh, and set the options which allow our commands through - # without removal of \ escapes. - if test -n "${ZSH_VERSION+set}" ; then - setopt NO_GLOB_SUBST - fi - # Now quote all the things that may contain metacharacters while being - # careful not to overquote the AC_SUBSTed values. We take copies of the - # variables and quote the copies for generation of the libtool script. - for var in echo old_CC old_CFLAGS AR AR_FLAGS EGREP RANLIB LN_S LTCC LTCFLAGS NM \ - SED SHELL STRIP \ - libname_spec library_names_spec soname_spec extract_expsyms_cmds \ - old_striplib striplib file_magic_cmd finish_cmds finish_eval \ - deplibs_check_method reload_flag reload_cmds need_locks \ - lt_cv_sys_global_symbol_pipe lt_cv_sys_global_symbol_to_cdecl \ - lt_cv_sys_global_symbol_to_c_name_address \ - sys_lib_search_path_spec sys_lib_dlsearch_path_spec \ - old_postinstall_cmds old_postuninstall_cmds \ - compiler_F77 \ - CC_F77 \ - LD_F77 \ - lt_prog_compiler_wl_F77 \ - lt_prog_compiler_pic_F77 \ - lt_prog_compiler_static_F77 \ - lt_prog_compiler_no_builtin_flag_F77 \ - export_dynamic_flag_spec_F77 \ - thread_safe_flag_spec_F77 \ - whole_archive_flag_spec_F77 \ - enable_shared_with_static_runtimes_F77 \ - old_archive_cmds_F77 \ - old_archive_from_new_cmds_F77 \ - predep_objects_F77 \ - postdep_objects_F77 \ - predeps_F77 \ - postdeps_F77 \ - compiler_lib_search_path_F77 \ - archive_cmds_F77 \ - archive_expsym_cmds_F77 \ - postinstall_cmds_F77 \ - postuninstall_cmds_F77 \ - old_archive_from_expsyms_cmds_F77 \ - allow_undefined_flag_F77 \ - no_undefined_flag_F77 \ - export_symbols_cmds_F77 \ - hardcode_libdir_flag_spec_F77 \ - hardcode_libdir_flag_spec_ld_F77 \ - hardcode_libdir_separator_F77 \ - hardcode_automatic_F77 \ - module_cmds_F77 \ - module_expsym_cmds_F77 \ - lt_cv_prog_compiler_c_o_F77 \ - fix_srcfile_path_F77 \ - exclude_expsyms_F77 \ - include_expsyms_F77; do - - case $var in - old_archive_cmds_F77 | \ - old_archive_from_new_cmds_F77 | \ - archive_cmds_F77 | \ - archive_expsym_cmds_F77 | \ - module_cmds_F77 | \ - module_expsym_cmds_F77 | \ - old_archive_from_expsyms_cmds_F77 | \ - export_symbols_cmds_F77 | \ - extract_expsyms_cmds | reload_cmds | finish_cmds | \ - postinstall_cmds | postuninstall_cmds | \ - old_postinstall_cmds | old_postuninstall_cmds | \ - sys_lib_search_path_spec | sys_lib_dlsearch_path_spec) - # Double-quote double-evaled strings. - eval "lt_$var=\\\"\`\$echo \"X\$$var\" | \$Xsed -e \"\$double_quote_subst\" -e \"\$sed_quote_subst\" -e \"\$delay_variable_subst\"\`\\\"" - ;; - *) - eval "lt_$var=\\\"\`\$echo \"X\$$var\" | \$Xsed -e \"\$sed_quote_subst\"\`\\\"" - ;; - esac - done - - case $lt_echo in - *'\$0 --fallback-echo"') - lt_echo=`$echo "X$lt_echo" | $Xsed -e 's/\\\\\\\$0 --fallback-echo"$/$0 --fallback-echo"/'` - ;; - esac - -cfgfile="$ofile" - - cat <<__EOF__ >> "$cfgfile" -# ### BEGIN LIBTOOL TAG CONFIG: $tagname - -# Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`: - -# Shell to use when invoking shell scripts. -SHELL=$lt_SHELL - -# Whether or not to build shared libraries. -build_libtool_libs=$enable_shared - -# Whether or not to build static libraries. -build_old_libs=$enable_static - -# Whether or not to add -lc for building shared libraries. -build_libtool_need_lc=$archive_cmds_need_lc_F77 - -# Whether or not to disallow shared libs when runtime libs are static -allow_libtool_libs_with_static_runtimes=$enable_shared_with_static_runtimes_F77 - -# Whether or not to optimize for fast installation. -fast_install=$enable_fast_install - -# The host system. -host_alias=$host_alias -host=$host -host_os=$host_os - -# The build system. -build_alias=$build_alias -build=$build -build_os=$build_os - -# An echo program that does not interpret backslashes. -echo=$lt_echo - -# The archiver. -AR=$lt_AR -AR_FLAGS=$lt_AR_FLAGS - -# A C compiler. -LTCC=$lt_LTCC - -# LTCC compiler flags. -LTCFLAGS=$lt_LTCFLAGS - -# A language-specific compiler. -CC=$lt_compiler_F77 - -# Is the compiler the GNU C compiler? -with_gcc=$GCC_F77 - -# An ERE matcher. -EGREP=$lt_EGREP - -# The linker used to build libraries. -LD=$lt_LD_F77 - -# Whether we need hard or soft links. -LN_S=$lt_LN_S - -# A BSD-compatible nm program. -NM=$lt_NM - -# A symbol stripping program -STRIP=$lt_STRIP - -# Used to examine libraries when file_magic_cmd begins "file" -MAGIC_CMD=$MAGIC_CMD - -# Used on cygwin: DLL creation program. -DLLTOOL="$DLLTOOL" - -# Used on cygwin: object dumper. -OBJDUMP="$OBJDUMP" - -# Used on cygwin: assembler. -AS="$AS" - -# The name of the directory that contains temporary libtool files. -objdir=$objdir - -# How to create reloadable object files. -reload_flag=$lt_reload_flag -reload_cmds=$lt_reload_cmds - -# How to pass a linker flag through the compiler. -wl=$lt_lt_prog_compiler_wl_F77 - -# Object file suffix (normally "o"). -objext="$ac_objext" - -# Old archive suffix (normally "a"). -libext="$libext" - -# Shared library suffix (normally ".so"). -shrext_cmds='$shrext_cmds' - -# Executable file suffix (normally ""). -exeext="$exeext" - -# Additional compiler flags for building library objects. -pic_flag=$lt_lt_prog_compiler_pic_F77 -pic_mode=$pic_mode - -# What is the maximum length of a command? -max_cmd_len=$lt_cv_sys_max_cmd_len - -# Does compiler simultaneously support -c and -o options? -compiler_c_o=$lt_lt_cv_prog_compiler_c_o_F77 - -# Must we lock files when doing compilation? -need_locks=$lt_need_locks - -# Do we need the lib prefix for modules? -need_lib_prefix=$need_lib_prefix - -# Do we need a version for libraries? -need_version=$need_version - -# Whether dlopen is supported. -dlopen_support=$enable_dlopen - -# Whether dlopen of programs is supported. -dlopen_self=$enable_dlopen_self - -# Whether dlopen of statically linked programs is supported. -dlopen_self_static=$enable_dlopen_self_static - -# Compiler flag to prevent dynamic linking. -link_static_flag=$lt_lt_prog_compiler_static_F77 - -# Compiler flag to turn off builtin functions. -no_builtin_flag=$lt_lt_prog_compiler_no_builtin_flag_F77 - -# Compiler flag to allow reflexive dlopens. -export_dynamic_flag_spec=$lt_export_dynamic_flag_spec_F77 - -# Compiler flag to generate shared objects directly from archives. -whole_archive_flag_spec=$lt_whole_archive_flag_spec_F77 - -# Compiler flag to generate thread-safe objects. -thread_safe_flag_spec=$lt_thread_safe_flag_spec_F77 - -# Library versioning type. -version_type=$version_type - -# Format of library name prefix. -libname_spec=$lt_libname_spec - -# List of archive names. First name is the real one, the rest are links. -# The last name is the one that the linker finds with -lNAME. -library_names_spec=$lt_library_names_spec - -# The coded name of the library, if different from the real name. -soname_spec=$lt_soname_spec - -# Commands used to build and install an old-style archive. -RANLIB=$lt_RANLIB -old_archive_cmds=$lt_old_archive_cmds_F77 -old_postinstall_cmds=$lt_old_postinstall_cmds -old_postuninstall_cmds=$lt_old_postuninstall_cmds - -# Create an old-style archive from a shared archive. -old_archive_from_new_cmds=$lt_old_archive_from_new_cmds_F77 - -# Create a temporary old-style archive to link instead of a shared archive. -old_archive_from_expsyms_cmds=$lt_old_archive_from_expsyms_cmds_F77 - -# Commands used to build and install a shared archive. -archive_cmds=$lt_archive_cmds_F77 -archive_expsym_cmds=$lt_archive_expsym_cmds_F77 -postinstall_cmds=$lt_postinstall_cmds -postuninstall_cmds=$lt_postuninstall_cmds - -# Commands used to build a loadable module (assumed same as above if empty) -module_cmds=$lt_module_cmds_F77 -module_expsym_cmds=$lt_module_expsym_cmds_F77 - -# Commands to strip libraries. -old_striplib=$lt_old_striplib -striplib=$lt_striplib - -# Dependencies to place before the objects being linked to create a -# shared library. -predep_objects=$lt_predep_objects_F77 - -# Dependencies to place after the objects being linked to create a -# shared library. -postdep_objects=$lt_postdep_objects_F77 - -# Dependencies to place before the objects being linked to create a -# shared library. -predeps=$lt_predeps_F77 - -# Dependencies to place after the objects being linked to create a -# shared library. -postdeps=$lt_postdeps_F77 - -# The library search path used internally by the compiler when linking -# a shared library. -compiler_lib_search_path=$lt_compiler_lib_search_path_F77 - -# Method to check whether dependent libraries are shared objects. -deplibs_check_method=$lt_deplibs_check_method - -# Command to use when deplibs_check_method == file_magic. -file_magic_cmd=$lt_file_magic_cmd - -# Flag that allows shared libraries with undefined symbols to be built. -allow_undefined_flag=$lt_allow_undefined_flag_F77 - -# Flag that forces no undefined symbols. -no_undefined_flag=$lt_no_undefined_flag_F77 - -# Commands used to finish a libtool library installation in a directory. -finish_cmds=$lt_finish_cmds - -# Same as above, but a single script fragment to be evaled but not shown. -finish_eval=$lt_finish_eval - -# Take the output of nm and produce a listing of raw symbols and C names. -global_symbol_pipe=$lt_lt_cv_sys_global_symbol_pipe - -# Transform the output of nm in a proper C declaration -global_symbol_to_cdecl=$lt_lt_cv_sys_global_symbol_to_cdecl - -# Transform the output of nm in a C name address pair -global_symbol_to_c_name_address=$lt_lt_cv_sys_global_symbol_to_c_name_address - -# This is the shared library runtime path variable. -runpath_var=$runpath_var - -# This is the shared library path variable. -shlibpath_var=$shlibpath_var - -# Is shlibpath searched before the hard-coded library search path? -shlibpath_overrides_runpath=$shlibpath_overrides_runpath - -# How to hardcode a shared library path into an executable. -hardcode_action=$hardcode_action_F77 - -# Whether we should hardcode library paths into libraries. -hardcode_into_libs=$hardcode_into_libs - -# Flag to hardcode \$libdir into a binary during linking. -# This must work even if \$libdir does not exist. -hardcode_libdir_flag_spec=$lt_hardcode_libdir_flag_spec_F77 - -# If ld is used when linking, flag to hardcode \$libdir into -# a binary during linking. This must work even if \$libdir does -# not exist. -hardcode_libdir_flag_spec_ld=$lt_hardcode_libdir_flag_spec_ld_F77 - -# Whether we need a single -rpath flag with a separated argument. -hardcode_libdir_separator=$lt_hardcode_libdir_separator_F77 - -# Set to yes if using DIR/libNAME${shared_ext} during linking hardcodes DIR into the -# resulting binary. -hardcode_direct=$hardcode_direct_F77 - -# Set to yes if using the -LDIR flag during linking hardcodes DIR into the -# resulting binary. -hardcode_minus_L=$hardcode_minus_L_F77 - -# Set to yes if using SHLIBPATH_VAR=DIR during linking hardcodes DIR into -# the resulting binary. -hardcode_shlibpath_var=$hardcode_shlibpath_var_F77 - -# Set to yes if building a shared library automatically hardcodes DIR into the library -# and all subsequent libraries and executables linked against it. -hardcode_automatic=$hardcode_automatic_F77 - -# Variables whose values should be saved in libtool wrapper scripts and -# restored at relink time. -variables_saved_for_relink="$variables_saved_for_relink" - -# Whether libtool must link a program against all its dependency libraries. -link_all_deplibs=$link_all_deplibs_F77 - -# Compile-time system search path for libraries -sys_lib_search_path_spec=$lt_sys_lib_search_path_spec - -# Run-time system search path for libraries -sys_lib_dlsearch_path_spec=$lt_sys_lib_dlsearch_path_spec - -# Fix the shell variable \$srcfile for the compiler. -fix_srcfile_path=$lt_fix_srcfile_path - -# Set to yes if exported symbols are required. -always_export_symbols=$always_export_symbols_F77 - -# The commands to list exported symbols. -export_symbols_cmds=$lt_export_symbols_cmds_F77 - -# The commands to extract the exported symbol list from a shared archive. -extract_expsyms_cmds=$lt_extract_expsyms_cmds - -# Symbols that should not be listed in the preloaded symbols. -exclude_expsyms=$lt_exclude_expsyms_F77 - -# Symbols that must always be exported. -include_expsyms=$lt_include_expsyms_F77 - -# ### END LIBTOOL TAG CONFIG: $tagname - -__EOF__ - - -else - # If there is no Makefile yet, we rely on a make rule to execute - # `config.status --recheck' to rerun these tests and create the - # libtool script then. - ltmain_in=`echo $ltmain | sed -e 's/\.sh$/.in/'` - if test -f "$ltmain_in"; then - test -f Makefile && make "$ltmain" - fi -fi - - -ac_ext=c -ac_cpp='$CPP $CPPFLAGS' -ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_c_compiler_gnu - -CC="$lt_save_CC" - - else - tagname="" - fi - ;; - - GCJ) - if test -n "$GCJ" && test "X$GCJ" != "Xno"; then - - -# Source file extension for Java test sources. -ac_ext=java - -# Object file extension for compiled Java test sources. -objext=o -objext_GCJ=$objext - -# Code to be used in simple compile tests -lt_simple_compile_test_code="class foo {}" - -# Code to be used in simple link tests -lt_simple_link_test_code='public class conftest { public static void main(String[] argv) {}; }' - -# ltmain only uses $CC for tagged configurations so make sure $CC is set. - -# If no C compiler was specified, use CC. -LTCC=${LTCC-"$CC"} - -# If no C compiler flags were specified, use CFLAGS. -LTCFLAGS=${LTCFLAGS-"$CFLAGS"} - -# Allow CC to be a program name with arguments. -compiler=$CC - - -# save warnings/boilerplate of simple test code -ac_outfile=conftest.$ac_objext -echo "$lt_simple_compile_test_code" >conftest.$ac_ext -eval "$ac_compile" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err -_lt_compiler_boilerplate=`cat conftest.err` -$rm conftest* - -ac_outfile=conftest.$ac_objext -echo "$lt_simple_link_test_code" >conftest.$ac_ext -eval "$ac_link" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err -_lt_linker_boilerplate=`cat conftest.err` -$rm conftest* - - -# Allow CC to be a program name with arguments. -lt_save_CC="$CC" -CC=${GCJ-"gcj"} -compiler=$CC -compiler_GCJ=$CC -for cc_temp in $compiler""; do - case $cc_temp in - compile | *[\\/]compile | ccache | *[\\/]ccache ) ;; - distcc | *[\\/]distcc | purify | *[\\/]purify ) ;; - \-*) ;; - *) break;; - esac -done -cc_basename=`$echo "X$cc_temp" | $Xsed -e 's%.*/%%' -e "s%^$host_alias-%%"` - - -# GCJ did not exist at the time GCC didn't implicitly link libc in. -archive_cmds_need_lc_GCJ=no - -old_archive_cmds_GCJ=$old_archive_cmds - - -lt_prog_compiler_no_builtin_flag_GCJ= - -if test "$GCC" = yes; then - lt_prog_compiler_no_builtin_flag_GCJ=' -fno-builtin' - - -{ echo "$as_me:$LINENO: checking if $compiler supports -fno-rtti -fno-exceptions" >&5 -echo $ECHO_N "checking if $compiler supports -fno-rtti -fno-exceptions... $ECHO_C" >&6; } -if test "${lt_cv_prog_compiler_rtti_exceptions+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - lt_cv_prog_compiler_rtti_exceptions=no - ac_outfile=conftest.$ac_objext - echo "$lt_simple_compile_test_code" > conftest.$ac_ext - lt_compiler_flag="-fno-rtti -fno-exceptions" - # Insert the option either (1) after the last *FLAGS variable, or - # (2) before a word containing "conftest.", or (3) at the end. - # Note that $ac_compile itself does not contain backslashes and begins - # with a dollar sign (not a hyphen), so the echo should work correctly. - # The option is referenced via a variable to avoid confusing sed. - lt_compile=`echo "$ac_compile" | $SED \ - -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ - -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ - -e 's:$: $lt_compiler_flag:'` - (eval echo "\"\$as_me:16662: $lt_compile\"" >&5) - (eval "$lt_compile" 2>conftest.err) - ac_status=$? - cat conftest.err >&5 - echo "$as_me:16666: \$? = $ac_status" >&5 - if (exit $ac_status) && test -s "$ac_outfile"; then - # The compiler can only warn and ignore the option if not recognized - # So say no if there are warnings other than the usual output. - $echo "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' >conftest.exp - $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 - if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then - lt_cv_prog_compiler_rtti_exceptions=yes - fi - fi - $rm conftest* - -fi -{ echo "$as_me:$LINENO: result: $lt_cv_prog_compiler_rtti_exceptions" >&5 -echo "${ECHO_T}$lt_cv_prog_compiler_rtti_exceptions" >&6; } - -if test x"$lt_cv_prog_compiler_rtti_exceptions" = xyes; then - lt_prog_compiler_no_builtin_flag_GCJ="$lt_prog_compiler_no_builtin_flag_GCJ -fno-rtti -fno-exceptions" -else - : -fi - -fi - -lt_prog_compiler_wl_GCJ= -lt_prog_compiler_pic_GCJ= -lt_prog_compiler_static_GCJ= - -{ echo "$as_me:$LINENO: checking for $compiler option to produce PIC" >&5 -echo $ECHO_N "checking for $compiler option to produce PIC... $ECHO_C" >&6; } - - if test "$GCC" = yes; then - lt_prog_compiler_wl_GCJ='-Wl,' - lt_prog_compiler_static_GCJ='-static' - - case $host_os in - aix*) - # All AIX code is PIC. - if test "$host_cpu" = ia64; then - # AIX 5 now supports IA64 processor - lt_prog_compiler_static_GCJ='-Bstatic' - fi - ;; - - amigaos*) - # FIXME: we need at least 68020 code to build shared libraries, but - # adding the `-m68020' flag to GCC prevents building anything better, - # like `-m68040'. - lt_prog_compiler_pic_GCJ='-m68020 -resident32 -malways-restore-a4' - ;; - - beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) - # PIC is the default for these OSes. - ;; - - mingw* | cygwin* | pw32* | os2*) - # This hack is so that the source file can tell whether it is being - # built for inclusion in a dll (and should export symbols for example). - # Although the cygwin gcc ignores -fPIC, still need this for old-style - # (--disable-auto-import) libraries - lt_prog_compiler_pic_GCJ='-DDLL_EXPORT' - ;; - - darwin* | rhapsody*) - # PIC is the default on this platform - # Common symbols not allowed in MH_DYLIB files - lt_prog_compiler_pic_GCJ='-fno-common' - ;; - - interix[3-9]*) - # Interix 3.x gcc -fpic/-fPIC options generate broken code. - # Instead, we relocate shared libraries at runtime. - ;; - - msdosdjgpp*) - # Just because we use GCC doesn't mean we suddenly get shared libraries - # on systems that don't support them. - lt_prog_compiler_can_build_shared_GCJ=no - enable_shared=no - ;; - - sysv4*MP*) - if test -d /usr/nec; then - lt_prog_compiler_pic_GCJ=-Kconform_pic - fi - ;; - - hpux*) - # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but - # not for PA HP-UX. - case $host_cpu in - hppa*64*|ia64*) - # +Z the default - ;; - *) - lt_prog_compiler_pic_GCJ='-fPIC' - ;; - esac - ;; - - *) - lt_prog_compiler_pic_GCJ='-fPIC' - ;; - esac - else - # PORTME Check for flag to pass linker flags through the system compiler. - case $host_os in - aix*) - lt_prog_compiler_wl_GCJ='-Wl,' - if test "$host_cpu" = ia64; then - # AIX 5 now supports IA64 processor - lt_prog_compiler_static_GCJ='-Bstatic' - else - lt_prog_compiler_static_GCJ='-bnso -bI:/lib/syscalls.exp' - fi - ;; - darwin*) - # PIC is the default on this platform - # Common symbols not allowed in MH_DYLIB files - case $cc_basename in - xlc*) - lt_prog_compiler_pic_GCJ='-qnocommon' - lt_prog_compiler_wl_GCJ='-Wl,' - ;; - esac - ;; - - mingw* | cygwin* | pw32* | os2*) - # This hack is so that the source file can tell whether it is being - # built for inclusion in a dll (and should export symbols for example). - lt_prog_compiler_pic_GCJ='-DDLL_EXPORT' - ;; - - hpux9* | hpux10* | hpux11*) - lt_prog_compiler_wl_GCJ='-Wl,' - # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but - # not for PA HP-UX. - case $host_cpu in - hppa*64*|ia64*) - # +Z the default - ;; - *) - lt_prog_compiler_pic_GCJ='+Z' - ;; - esac - # Is there a better lt_prog_compiler_static that works with the bundled CC? - lt_prog_compiler_static_GCJ='${wl}-a ${wl}archive' - ;; - - irix5* | irix6* | nonstopux*) - lt_prog_compiler_wl_GCJ='-Wl,' - # PIC (with -KPIC) is the default. - lt_prog_compiler_static_GCJ='-non_shared' - ;; - - newsos6) - lt_prog_compiler_pic_GCJ='-KPIC' - lt_prog_compiler_static_GCJ='-Bstatic' - ;; - - linux* | k*bsd*-gnu) - case $cc_basename in - icc* | ecc*) - lt_prog_compiler_wl_GCJ='-Wl,' - lt_prog_compiler_pic_GCJ='-KPIC' - lt_prog_compiler_static_GCJ='-static' - ;; - pgcc* | pgf77* | pgf90* | pgf95*) - # Portland Group compilers (*not* the Pentium gcc compiler, - # which looks to be a dead project) - lt_prog_compiler_wl_GCJ='-Wl,' - lt_prog_compiler_pic_GCJ='-fpic' - lt_prog_compiler_static_GCJ='-Bstatic' - ;; - ccc*) - lt_prog_compiler_wl_GCJ='-Wl,' - # All Alpha code is PIC. - lt_prog_compiler_static_GCJ='-non_shared' - ;; - *) - case `$CC -V 2>&1 | sed 5q` in - *Sun\ C*) - # Sun C 5.9 - lt_prog_compiler_pic_GCJ='-KPIC' - lt_prog_compiler_static_GCJ='-Bstatic' - lt_prog_compiler_wl_GCJ='-Wl,' - ;; - *Sun\ F*) - # Sun Fortran 8.3 passes all unrecognized flags to the linker - lt_prog_compiler_pic_GCJ='-KPIC' - lt_prog_compiler_static_GCJ='-Bstatic' - lt_prog_compiler_wl_GCJ='' - ;; - esac - ;; - esac - ;; - - osf3* | osf4* | osf5*) - lt_prog_compiler_wl_GCJ='-Wl,' - # All OSF/1 code is PIC. - lt_prog_compiler_static_GCJ='-non_shared' - ;; - - rdos*) - lt_prog_compiler_static_GCJ='-non_shared' - ;; - - solaris*) - lt_prog_compiler_pic_GCJ='-KPIC' - lt_prog_compiler_static_GCJ='-Bstatic' - case $cc_basename in - f77* | f90* | f95*) - lt_prog_compiler_wl_GCJ='-Qoption ld ';; - *) - lt_prog_compiler_wl_GCJ='-Wl,';; - esac - ;; - - sunos4*) - lt_prog_compiler_wl_GCJ='-Qoption ld ' - lt_prog_compiler_pic_GCJ='-PIC' - lt_prog_compiler_static_GCJ='-Bstatic' - ;; - - sysv4 | sysv4.2uw2* | sysv4.3*) - lt_prog_compiler_wl_GCJ='-Wl,' - lt_prog_compiler_pic_GCJ='-KPIC' - lt_prog_compiler_static_GCJ='-Bstatic' - ;; - - sysv4*MP*) - if test -d /usr/nec ;then - lt_prog_compiler_pic_GCJ='-Kconform_pic' - lt_prog_compiler_static_GCJ='-Bstatic' - fi - ;; - - sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*) - lt_prog_compiler_wl_GCJ='-Wl,' - lt_prog_compiler_pic_GCJ='-KPIC' - lt_prog_compiler_static_GCJ='-Bstatic' - ;; - - unicos*) - lt_prog_compiler_wl_GCJ='-Wl,' - lt_prog_compiler_can_build_shared_GCJ=no - ;; - - uts4*) - lt_prog_compiler_pic_GCJ='-pic' - lt_prog_compiler_static_GCJ='-Bstatic' - ;; - - *) - lt_prog_compiler_can_build_shared_GCJ=no - ;; - esac - fi - -{ echo "$as_me:$LINENO: result: $lt_prog_compiler_pic_GCJ" >&5 -echo "${ECHO_T}$lt_prog_compiler_pic_GCJ" >&6; } - -# -# Check to make sure the PIC flag actually works. -# -if test -n "$lt_prog_compiler_pic_GCJ"; then - -{ echo "$as_me:$LINENO: checking if $compiler PIC flag $lt_prog_compiler_pic_GCJ works" >&5 -echo $ECHO_N "checking if $compiler PIC flag $lt_prog_compiler_pic_GCJ works... $ECHO_C" >&6; } -if test "${lt_prog_compiler_pic_works_GCJ+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - lt_prog_compiler_pic_works_GCJ=no - ac_outfile=conftest.$ac_objext - echo "$lt_simple_compile_test_code" > conftest.$ac_ext - lt_compiler_flag="$lt_prog_compiler_pic_GCJ" - # Insert the option either (1) after the last *FLAGS variable, or - # (2) before a word containing "conftest.", or (3) at the end. - # Note that $ac_compile itself does not contain backslashes and begins - # with a dollar sign (not a hyphen), so the echo should work correctly. - # The option is referenced via a variable to avoid confusing sed. - lt_compile=`echo "$ac_compile" | $SED \ - -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ - -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ - -e 's:$: $lt_compiler_flag:'` - (eval echo "\"\$as_me:16952: $lt_compile\"" >&5) - (eval "$lt_compile" 2>conftest.err) - ac_status=$? - cat conftest.err >&5 - echo "$as_me:16956: \$? = $ac_status" >&5 - if (exit $ac_status) && test -s "$ac_outfile"; then - # The compiler can only warn and ignore the option if not recognized - # So say no if there are warnings other than the usual output. - $echo "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' >conftest.exp - $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 - if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then - lt_prog_compiler_pic_works_GCJ=yes - fi - fi - $rm conftest* - -fi -{ echo "$as_me:$LINENO: result: $lt_prog_compiler_pic_works_GCJ" >&5 -echo "${ECHO_T}$lt_prog_compiler_pic_works_GCJ" >&6; } - -if test x"$lt_prog_compiler_pic_works_GCJ" = xyes; then - case $lt_prog_compiler_pic_GCJ in - "" | " "*) ;; - *) lt_prog_compiler_pic_GCJ=" $lt_prog_compiler_pic_GCJ" ;; - esac -else - lt_prog_compiler_pic_GCJ= - lt_prog_compiler_can_build_shared_GCJ=no -fi - -fi -case $host_os in - # For platforms which do not support PIC, -DPIC is meaningless: - *djgpp*) - lt_prog_compiler_pic_GCJ= - ;; - *) - lt_prog_compiler_pic_GCJ="$lt_prog_compiler_pic_GCJ" - ;; -esac - -# -# Check to make sure the static flag actually works. -# -wl=$lt_prog_compiler_wl_GCJ eval lt_tmp_static_flag=\"$lt_prog_compiler_static_GCJ\" -{ echo "$as_me:$LINENO: checking if $compiler static flag $lt_tmp_static_flag works" >&5 -echo $ECHO_N "checking if $compiler static flag $lt_tmp_static_flag works... $ECHO_C" >&6; } -if test "${lt_prog_compiler_static_works_GCJ+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - lt_prog_compiler_static_works_GCJ=no - save_LDFLAGS="$LDFLAGS" - LDFLAGS="$LDFLAGS $lt_tmp_static_flag" - echo "$lt_simple_link_test_code" > conftest.$ac_ext - if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then - # The linker can only warn and ignore the option if not recognized - # So say no if there are warnings - if test -s conftest.err; then - # Append any errors to the config.log. - cat conftest.err 1>&5 - $echo "X$_lt_linker_boilerplate" | $Xsed -e '/^$/d' > conftest.exp - $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 - if diff conftest.exp conftest.er2 >/dev/null; then - lt_prog_compiler_static_works_GCJ=yes - fi - else - lt_prog_compiler_static_works_GCJ=yes - fi - fi - $rm conftest* - LDFLAGS="$save_LDFLAGS" - -fi -{ echo "$as_me:$LINENO: result: $lt_prog_compiler_static_works_GCJ" >&5 -echo "${ECHO_T}$lt_prog_compiler_static_works_GCJ" >&6; } - -if test x"$lt_prog_compiler_static_works_GCJ" = xyes; then - : -else - lt_prog_compiler_static_GCJ= -fi - - -{ echo "$as_me:$LINENO: checking if $compiler supports -c -o file.$ac_objext" >&5 -echo $ECHO_N "checking if $compiler supports -c -o file.$ac_objext... $ECHO_C" >&6; } -if test "${lt_cv_prog_compiler_c_o_GCJ+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - lt_cv_prog_compiler_c_o_GCJ=no - $rm -r conftest 2>/dev/null - mkdir conftest - cd conftest - mkdir out - echo "$lt_simple_compile_test_code" > conftest.$ac_ext - - lt_compiler_flag="-o out/conftest2.$ac_objext" - # Insert the option either (1) after the last *FLAGS variable, or - # (2) before a word containing "conftest.", or (3) at the end. - # Note that $ac_compile itself does not contain backslashes and begins - # with a dollar sign (not a hyphen), so the echo should work correctly. - lt_compile=`echo "$ac_compile" | $SED \ - -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ - -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ - -e 's:$: $lt_compiler_flag:'` - (eval echo "\"\$as_me:17056: $lt_compile\"" >&5) - (eval "$lt_compile" 2>out/conftest.err) - ac_status=$? - cat out/conftest.err >&5 - echo "$as_me:17060: \$? = $ac_status" >&5 - if (exit $ac_status) && test -s out/conftest2.$ac_objext - then - # The compiler can only warn and ignore the option if not recognized - # So say no if there are warnings - $echo "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' > out/conftest.exp - $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2 - if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then - lt_cv_prog_compiler_c_o_GCJ=yes - fi - fi - chmod u+w . 2>&5 - $rm conftest* - # SGI C++ compiler will create directory out/ii_files/ for - # template instantiation - test -d out/ii_files && $rm out/ii_files/* && rmdir out/ii_files - $rm out/* && rmdir out - cd .. - rmdir conftest - $rm conftest* - -fi -{ echo "$as_me:$LINENO: result: $lt_cv_prog_compiler_c_o_GCJ" >&5 -echo "${ECHO_T}$lt_cv_prog_compiler_c_o_GCJ" >&6; } - - -hard_links="nottested" -if test "$lt_cv_prog_compiler_c_o_GCJ" = no && test "$need_locks" != no; then - # do not overwrite the value of need_locks provided by the user - { echo "$as_me:$LINENO: checking if we can lock with hard links" >&5 -echo $ECHO_N "checking if we can lock with hard links... $ECHO_C" >&6; } - hard_links=yes - $rm conftest* - ln conftest.a conftest.b 2>/dev/null && hard_links=no - touch conftest.a - ln conftest.a conftest.b 2>&5 || hard_links=no - ln conftest.a conftest.b 2>/dev/null && hard_links=no - { echo "$as_me:$LINENO: result: $hard_links" >&5 -echo "${ECHO_T}$hard_links" >&6; } - if test "$hard_links" = no; then - { echo "$as_me:$LINENO: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&5 -echo "$as_me: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&2;} - need_locks=warn - fi -else - need_locks=no -fi - -{ echo "$as_me:$LINENO: checking whether the $compiler linker ($LD) supports shared libraries" >&5 -echo $ECHO_N "checking whether the $compiler linker ($LD) supports shared libraries... $ECHO_C" >&6; } - - runpath_var= - allow_undefined_flag_GCJ= - enable_shared_with_static_runtimes_GCJ=no - archive_cmds_GCJ= - archive_expsym_cmds_GCJ= - old_archive_From_new_cmds_GCJ= - old_archive_from_expsyms_cmds_GCJ= - export_dynamic_flag_spec_GCJ= - whole_archive_flag_spec_GCJ= - thread_safe_flag_spec_GCJ= - hardcode_libdir_flag_spec_GCJ= - hardcode_libdir_flag_spec_ld_GCJ= - hardcode_libdir_separator_GCJ= - hardcode_direct_GCJ=no - hardcode_minus_L_GCJ=no - hardcode_shlibpath_var_GCJ=unsupported - link_all_deplibs_GCJ=unknown - hardcode_automatic_GCJ=no - module_cmds_GCJ= - module_expsym_cmds_GCJ= - always_export_symbols_GCJ=no - export_symbols_cmds_GCJ='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' - # include_expsyms should be a list of space-separated symbols to be *always* - # included in the symbol list - include_expsyms_GCJ= - # exclude_expsyms can be an extended regexp of symbols to exclude - # it will be wrapped by ` (' and `)$', so one must not match beginning or - # end of line. Example: `a|bc|.*d.*' will exclude the symbols `a' and `bc', - # as well as any symbol that contains `d'. - exclude_expsyms_GCJ="_GLOBAL_OFFSET_TABLE_" - # Although _GLOBAL_OFFSET_TABLE_ is a valid symbol C name, most a.out - # platforms (ab)use it in PIC code, but their linkers get confused if - # the symbol is explicitly referenced. Since portable code cannot - # rely on this symbol name, it's probably fine to never include it in - # preloaded symbol tables. - extract_expsyms_cmds= - # Just being paranoid about ensuring that cc_basename is set. - for cc_temp in $compiler""; do - case $cc_temp in - compile | *[\\/]compile | ccache | *[\\/]ccache ) ;; - distcc | *[\\/]distcc | purify | *[\\/]purify ) ;; - \-*) ;; - *) break;; - esac -done -cc_basename=`$echo "X$cc_temp" | $Xsed -e 's%.*/%%' -e "s%^$host_alias-%%"` - - case $host_os in - cygwin* | mingw* | pw32*) - # FIXME: the MSVC++ port hasn't been tested in a loooong time - # When not using gcc, we currently assume that we are using - # Microsoft Visual C++. - if test "$GCC" != yes; then - with_gnu_ld=no - fi - ;; - interix*) - # we just hope/assume this is gcc and not c89 (= MSVC++) - with_gnu_ld=yes - ;; - openbsd*) - with_gnu_ld=no - ;; - esac - - ld_shlibs_GCJ=yes - if test "$with_gnu_ld" = yes; then - # If archive_cmds runs LD, not CC, wlarc should be empty - wlarc='${wl}' - - # Set some defaults for GNU ld with shared library support. These - # are reset later if shared libraries are not supported. Putting them - # here allows them to be overridden if necessary. - runpath_var=LD_RUN_PATH - hardcode_libdir_flag_spec_GCJ='${wl}--rpath ${wl}$libdir' - export_dynamic_flag_spec_GCJ='${wl}--export-dynamic' - # ancient GNU ld didn't support --whole-archive et. al. - if $LD --help 2>&1 | grep 'no-whole-archive' > /dev/null; then - whole_archive_flag_spec_GCJ="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' - else - whole_archive_flag_spec_GCJ= - fi - supports_anon_versioning=no - case `$LD -v 2>/dev/null` in - *\ [01].* | *\ 2.[0-9].* | *\ 2.10.*) ;; # catch versions < 2.11 - *\ 2.11.93.0.2\ *) supports_anon_versioning=yes ;; # RH7.3 ... - *\ 2.11.92.0.12\ *) supports_anon_versioning=yes ;; # Mandrake 8.2 ... - *\ 2.11.*) ;; # other 2.11 versions - *) supports_anon_versioning=yes ;; - esac - - # See if GNU ld supports shared libraries. - case $host_os in - aix3* | aix4* | aix5*) - # On AIX/PPC, the GNU linker is very broken - if test "$host_cpu" != ia64; then - ld_shlibs_GCJ=no - cat <&2 - -*** Warning: the GNU linker, at least up to release 2.9.1, is reported -*** to be unable to reliably create shared libraries on AIX. -*** Therefore, libtool is disabling shared libraries support. If you -*** really care for shared libraries, you may want to modify your PATH -*** so that a non-GNU linker is found, and then restart. - -EOF - fi - ;; - - amigaos*) - archive_cmds_GCJ='$rm $output_objdir/a2ixlibrary.data~$echo "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$echo "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$echo "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$echo "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' - hardcode_libdir_flag_spec_GCJ='-L$libdir' - hardcode_minus_L_GCJ=yes - - # Samuel A. Falvo II reports - # that the semantics of dynamic libraries on AmigaOS, at least up - # to version 4, is to share data among multiple programs linked - # with the same dynamic library. Since this doesn't match the - # behavior of shared libraries on other platforms, we can't use - # them. - ld_shlibs_GCJ=no - ;; - - beos*) - if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then - allow_undefined_flag_GCJ=unsupported - # Joseph Beckenbach says some releases of gcc - # support --undefined. This deserves some investigation. FIXME - archive_cmds_GCJ='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' - else - ld_shlibs_GCJ=no - fi - ;; - - cygwin* | mingw* | pw32*) - # _LT_AC_TAGVAR(hardcode_libdir_flag_spec, GCJ) is actually meaningless, - # as there is no search path for DLLs. - hardcode_libdir_flag_spec_GCJ='-L$libdir' - allow_undefined_flag_GCJ=unsupported - always_export_symbols_GCJ=no - enable_shared_with_static_runtimes_GCJ=yes - export_symbols_cmds_GCJ='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS][ ]/s/.*[ ]\([^ ]*\)/\1 DATA/'\'' -e '\''/^[AITW][ ]/s/.*[ ]//'\'' | sort | uniq > $export_symbols' - - if $LD --help 2>&1 | grep 'auto-import' > /dev/null; then - archive_cmds_GCJ='$CC -shared $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' - # If the export-symbols file already is a .def file (1st line - # is EXPORTS), use it as is; otherwise, prepend... - archive_expsym_cmds_GCJ='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then - cp $export_symbols $output_objdir/$soname.def; - else - echo EXPORTS > $output_objdir/$soname.def; - cat $export_symbols >> $output_objdir/$soname.def; - fi~ - $CC -shared $output_objdir/$soname.def $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' - else - ld_shlibs_GCJ=no - fi - ;; - - interix[3-9]*) - hardcode_direct_GCJ=no - hardcode_shlibpath_var_GCJ=no - hardcode_libdir_flag_spec_GCJ='${wl}-rpath,$libdir' - export_dynamic_flag_spec_GCJ='${wl}-E' - # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc. - # Instead, shared libraries are loaded at an image base (0x10000000 by - # default) and relocated if they conflict, which is a slow very memory - # consuming and fragmenting process. To avoid this, we pick a random, - # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link - # time. Moving up from 0x10000000 also allows more sbrk(2) space. - archive_cmds_GCJ='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' - archive_expsym_cmds_GCJ='sed "s,^,_," $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--retain-symbols-file,$output_objdir/$soname.expsym ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' - ;; - - gnu* | linux* | k*bsd*-gnu) - if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then - tmp_addflag= - case $cc_basename,$host_cpu in - pgcc*) # Portland Group C compiler - whole_archive_flag_spec_GCJ='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $echo \"$new_convenience\"` ${wl}--no-whole-archive' - tmp_addflag=' $pic_flag' - ;; - pgf77* | pgf90* | pgf95*) # Portland Group f77 and f90 compilers - whole_archive_flag_spec_GCJ='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $echo \"$new_convenience\"` ${wl}--no-whole-archive' - tmp_addflag=' $pic_flag -Mnomain' ;; - ecc*,ia64* | icc*,ia64*) # Intel C compiler on ia64 - tmp_addflag=' -i_dynamic' ;; - efc*,ia64* | ifort*,ia64*) # Intel Fortran compiler on ia64 - tmp_addflag=' -i_dynamic -nofor_main' ;; - ifc* | ifort*) # Intel Fortran compiler - tmp_addflag=' -nofor_main' ;; - esac - case `$CC -V 2>&1 | sed 5q` in - *Sun\ C*) # Sun C 5.9 - whole_archive_flag_spec_GCJ='${wl}--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; $echo \"$new_convenience\"` ${wl}--no-whole-archive' - tmp_sharedflag='-G' ;; - *Sun\ F*) # Sun Fortran 8.3 - tmp_sharedflag='-G' ;; - *) - tmp_sharedflag='-shared' ;; - esac - archive_cmds_GCJ='$CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' - - if test $supports_anon_versioning = yes; then - archive_expsym_cmds_GCJ='$echo "{ global:" > $output_objdir/$libname.ver~ - cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ - $echo "local: *; };" >> $output_objdir/$libname.ver~ - $CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib' - fi - else - ld_shlibs_GCJ=no - fi - ;; - - netbsd*) - if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then - archive_cmds_GCJ='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib' - wlarc= - else - archive_cmds_GCJ='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' - archive_expsym_cmds_GCJ='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' - fi - ;; - - solaris*) - if $LD -v 2>&1 | grep 'BFD 2\.8' > /dev/null; then - ld_shlibs_GCJ=no - cat <&2 - -*** Warning: The releases 2.8.* of the GNU linker cannot reliably -*** create shared libraries on Solaris systems. Therefore, libtool -*** is disabling shared libraries support. We urge you to upgrade GNU -*** binutils to release 2.9.1 or newer. Another option is to modify -*** your PATH or compiler configuration so that the native linker is -*** used, and then restart. - -EOF - elif $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then - archive_cmds_GCJ='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' - archive_expsym_cmds_GCJ='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' - else - ld_shlibs_GCJ=no - fi - ;; - - sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX*) - case `$LD -v 2>&1` in - *\ [01].* | *\ 2.[0-9].* | *\ 2.1[0-5].*) - ld_shlibs_GCJ=no - cat <<_LT_EOF 1>&2 - -*** Warning: Releases of the GNU linker prior to 2.16.91.0.3 can not -*** reliably create shared libraries on SCO systems. Therefore, libtool -*** is disabling shared libraries support. We urge you to upgrade GNU -*** binutils to release 2.16.91.0.3 or newer. Another option is to modify -*** your PATH or compiler configuration so that the native linker is -*** used, and then restart. - -_LT_EOF - ;; - *) - if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then - hardcode_libdir_flag_spec_GCJ='`test -z "$SCOABSPATH" && echo ${wl}-rpath,$libdir`' - archive_cmds_GCJ='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib' - archive_expsym_cmds_GCJ='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname,\${SCOABSPATH:+${install_libdir}/}$soname,-retain-symbols-file,$export_symbols -o $lib' - else - ld_shlibs_GCJ=no - fi - ;; - esac - ;; - - sunos4*) - archive_cmds_GCJ='$LD -assert pure-text -Bshareable -o $lib $libobjs $deplibs $linker_flags' - wlarc= - hardcode_direct_GCJ=yes - hardcode_shlibpath_var_GCJ=no - ;; - - *) - if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then - archive_cmds_GCJ='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' - archive_expsym_cmds_GCJ='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' - else - ld_shlibs_GCJ=no - fi - ;; - esac - - if test "$ld_shlibs_GCJ" = no; then - runpath_var= - hardcode_libdir_flag_spec_GCJ= - export_dynamic_flag_spec_GCJ= - whole_archive_flag_spec_GCJ= - fi - else - # PORTME fill in a description of your system's linker (not GNU ld) - case $host_os in - aix3*) - allow_undefined_flag_GCJ=unsupported - always_export_symbols_GCJ=yes - archive_expsym_cmds_GCJ='$LD -o $output_objdir/$soname $libobjs $deplibs $linker_flags -bE:$export_symbols -T512 -H512 -bM:SRE~$AR $AR_FLAGS $lib $output_objdir/$soname' - # Note: this linker hardcodes the directories in LIBPATH if there - # are no directories specified by -L. - hardcode_minus_L_GCJ=yes - if test "$GCC" = yes && test -z "$lt_prog_compiler_static"; then - # Neither direct hardcoding nor static linking is supported with a - # broken collect2. - hardcode_direct_GCJ=unsupported - fi - ;; - - aix4* | aix5*) - if test "$host_cpu" = ia64; then - # On IA64, the linker does run time linking by default, so we don't - # have to do anything special. - aix_use_runtimelinking=no - exp_sym_flag='-Bexport' - no_entry_flag="" - else - # If we're using GNU nm, then we don't want the "-C" option. - # -C means demangle to AIX nm, but means don't demangle with GNU nm - if $NM -V 2>&1 | grep 'GNU' > /dev/null; then - export_symbols_cmds_GCJ='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$2 == "T") || (\$2 == "D") || (\$2 == "B")) && (substr(\$3,1,1) != ".")) { print \$3 } }'\'' | sort -u > $export_symbols' - else - export_symbols_cmds_GCJ='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$2 == "T") || (\$2 == "D") || (\$2 == "B")) && (substr(\$3,1,1) != ".")) { print \$3 } }'\'' | sort -u > $export_symbols' - fi - aix_use_runtimelinking=no - - # Test if we are trying to use run time linking or normal - # AIX style linking. If -brtl is somewhere in LDFLAGS, we - # need to do runtime linking. - case $host_os in aix4.[23]|aix4.[23].*|aix5*) - for ld_flag in $LDFLAGS; do - if (test $ld_flag = "-brtl" || test $ld_flag = "-Wl,-brtl"); then - aix_use_runtimelinking=yes - break - fi - done - ;; - esac - - exp_sym_flag='-bexport' - no_entry_flag='-bnoentry' - fi - - # When large executables or shared objects are built, AIX ld can - # have problems creating the table of contents. If linking a library - # or program results in "error TOC overflow" add -mminimal-toc to - # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not - # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS. - - archive_cmds_GCJ='' - hardcode_direct_GCJ=yes - hardcode_libdir_separator_GCJ=':' - link_all_deplibs_GCJ=yes - - if test "$GCC" = yes; then - case $host_os in aix4.[012]|aix4.[012].*) - # We only want to do this on AIX 4.2 and lower, the check - # below for broken collect2 doesn't work under 4.3+ - collect2name=`${CC} -print-prog-name=collect2` - if test -f "$collect2name" && \ - strings "$collect2name" | grep resolve_lib_name >/dev/null - then - # We have reworked collect2 - : - else - # We have old collect2 - hardcode_direct_GCJ=unsupported - # It fails to find uninstalled libraries when the uninstalled - # path is not listed in the libpath. Setting hardcode_minus_L - # to unsupported forces relinking - hardcode_minus_L_GCJ=yes - hardcode_libdir_flag_spec_GCJ='-L$libdir' - hardcode_libdir_separator_GCJ= - fi - ;; - esac - shared_flag='-shared' - if test "$aix_use_runtimelinking" = yes; then - shared_flag="$shared_flag "'${wl}-G' - fi - else - # not using gcc - if test "$host_cpu" = ia64; then - # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release - # chokes on -Wl,-G. The following line is correct: - shared_flag='-G' - else - if test "$aix_use_runtimelinking" = yes; then - shared_flag='${wl}-G' - else - shared_flag='${wl}-bM:SRE' - fi - fi - fi - - # It seems that -bexpall does not export symbols beginning with - # underscore (_), so it is better to generate a list of symbols to export. - always_export_symbols_GCJ=yes - if test "$aix_use_runtimelinking" = yes; then - # Warning - without using the other runtime loading flags (-brtl), - # -berok will link without error, but may produce a broken library. - allow_undefined_flag_GCJ='-berok' - # Determine the default libpath from the value encoded in an empty executable. - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ - -int -main () -{ - - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext conftest$ac_exeext -if { (ac_try="$ac_link" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_link") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest$ac_exeext && - $as_test_x conftest$ac_exeext; then - -lt_aix_libpath_sed=' - /Import File Strings/,/^$/ { - /^0/ { - s/^0 *\(.*\)$/\1/ - p - } - }' -aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` -# Check for a 64-bit object if we didn't find anything. -if test -z "$aix_libpath"; then - aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` -fi -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - -fi - -rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ - conftest$ac_exeext conftest.$ac_ext -if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi - - hardcode_libdir_flag_spec_GCJ='${wl}-blibpath:$libdir:'"$aix_libpath" - archive_expsym_cmds_GCJ="\$CC"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then echo "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag" - else - if test "$host_cpu" = ia64; then - hardcode_libdir_flag_spec_GCJ='${wl}-R $libdir:/usr/lib:/lib' - allow_undefined_flag_GCJ="-z nodefs" - archive_expsym_cmds_GCJ="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$exp_sym_flag:\$export_symbols" - else - # Determine the default libpath from the value encoded in an empty executable. - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ - -int -main () -{ - - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext conftest$ac_exeext -if { (ac_try="$ac_link" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_link") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest$ac_exeext && - $as_test_x conftest$ac_exeext; then - -lt_aix_libpath_sed=' - /Import File Strings/,/^$/ { - /^0/ { - s/^0 *\(.*\)$/\1/ - p - } - }' -aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` -# Check for a 64-bit object if we didn't find anything. -if test -z "$aix_libpath"; then - aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` -fi -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - -fi - -rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ - conftest$ac_exeext conftest.$ac_ext -if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi - - hardcode_libdir_flag_spec_GCJ='${wl}-blibpath:$libdir:'"$aix_libpath" - # Warning - without using the other run time loading flags, - # -berok will link without error, but may produce a broken library. - no_undefined_flag_GCJ=' ${wl}-bernotok' - allow_undefined_flag_GCJ=' ${wl}-berok' - # Exported symbols can be pulled into shared objects from archives - whole_archive_flag_spec_GCJ='$convenience' - archive_cmds_need_lc_GCJ=yes - # This is similar to how AIX traditionally builds its shared libraries. - archive_expsym_cmds_GCJ="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs ${wl}-bnoentry $compiler_flags ${wl}-bE:$export_symbols${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname' - fi - fi - ;; - - amigaos*) - archive_cmds_GCJ='$rm $output_objdir/a2ixlibrary.data~$echo "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$echo "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$echo "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$echo "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' - hardcode_libdir_flag_spec_GCJ='-L$libdir' - hardcode_minus_L_GCJ=yes - # see comment about different semantics on the GNU ld section - ld_shlibs_GCJ=no - ;; - - bsdi[45]*) - export_dynamic_flag_spec_GCJ=-rdynamic - ;; - - cygwin* | mingw* | pw32*) - # When not using gcc, we currently assume that we are using - # Microsoft Visual C++. - # hardcode_libdir_flag_spec is actually meaningless, as there is - # no search path for DLLs. - hardcode_libdir_flag_spec_GCJ=' ' - allow_undefined_flag_GCJ=unsupported - # Tell ltmain to make .lib files, not .a files. - libext=lib - # Tell ltmain to make .dll files, not .so files. - shrext_cmds=".dll" - # FIXME: Setting linknames here is a bad hack. - archive_cmds_GCJ='$CC -o $lib $libobjs $compiler_flags `echo "$deplibs" | $SED -e '\''s/ -lc$//'\''` -link -dll~linknames=' - # The linker will automatically build a .lib file if we build a DLL. - old_archive_From_new_cmds_GCJ='true' - # FIXME: Should let the user specify the lib program. - old_archive_cmds_GCJ='lib -OUT:$oldlib$oldobjs$old_deplibs' - fix_srcfile_path_GCJ='`cygpath -w "$srcfile"`' - enable_shared_with_static_runtimes_GCJ=yes - ;; - - darwin* | rhapsody*) - case $host_os in - rhapsody* | darwin1.[012]) - allow_undefined_flag_GCJ='${wl}-undefined ${wl}suppress' - ;; - *) # Darwin 1.3 on - if test -z ${MACOSX_DEPLOYMENT_TARGET} ; then - allow_undefined_flag_GCJ='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' - else - case ${MACOSX_DEPLOYMENT_TARGET} in - 10.[012]) - allow_undefined_flag_GCJ='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' - ;; - 10.*) - allow_undefined_flag_GCJ='${wl}-undefined ${wl}dynamic_lookup' - ;; - esac - fi - ;; - esac - archive_cmds_need_lc_GCJ=no - hardcode_direct_GCJ=no - hardcode_automatic_GCJ=yes - hardcode_shlibpath_var_GCJ=unsupported - whole_archive_flag_spec_GCJ='' - link_all_deplibs_GCJ=yes - if test "$GCC" = yes ; then - output_verbose_link_cmd='echo' - archive_cmds_GCJ='$CC -dynamiclib $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags -install_name $rpath/$soname $verstring' - module_cmds_GCJ='$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags' - # Don't fix this by using the ld -exported_symbols_list flag, it doesn't exist in older darwin lds - archive_expsym_cmds_GCJ='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -dynamiclib $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags -install_name $rpath/$soname $verstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' - module_expsym_cmds_GCJ='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' - else - case $cc_basename in - xlc*) - output_verbose_link_cmd='echo' - archive_cmds_GCJ='$CC -qmkshrobj $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-install_name ${wl}`echo $rpath/$soname` $xlcverstring' - module_cmds_GCJ='$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags' - # Don't fix this by using the ld -exported_symbols_list flag, it doesn't exist in older darwin lds - archive_expsym_cmds_GCJ='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -qmkshrobj $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-install_name ${wl}$rpath/$soname $xlcverstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' - module_expsym_cmds_GCJ='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' - ;; - *) - ld_shlibs_GCJ=no - ;; - esac - fi - ;; - - dgux*) - archive_cmds_GCJ='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' - hardcode_libdir_flag_spec_GCJ='-L$libdir' - hardcode_shlibpath_var_GCJ=no - ;; - - freebsd1*) - ld_shlibs_GCJ=no - ;; - - # FreeBSD 2.2.[012] allows us to include c++rt0.o to get C++ constructor - # support. Future versions do this automatically, but an explicit c++rt0.o - # does not break anything, and helps significantly (at the cost of a little - # extra space). - freebsd2.2*) - archive_cmds_GCJ='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags /usr/lib/c++rt0.o' - hardcode_libdir_flag_spec_GCJ='-R$libdir' - hardcode_direct_GCJ=yes - hardcode_shlibpath_var_GCJ=no - ;; - - # Unfortunately, older versions of FreeBSD 2 do not have this feature. - freebsd2*) - archive_cmds_GCJ='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' - hardcode_direct_GCJ=yes - hardcode_minus_L_GCJ=yes - hardcode_shlibpath_var_GCJ=no - ;; - - # FreeBSD 3 and greater uses gcc -shared to do shared libraries. - freebsd* | dragonfly*) - archive_cmds_GCJ='$CC -shared -o $lib $libobjs $deplibs $compiler_flags' - hardcode_libdir_flag_spec_GCJ='-R$libdir' - hardcode_direct_GCJ=yes - hardcode_shlibpath_var_GCJ=no - ;; - - hpux9*) - if test "$GCC" = yes; then - archive_cmds_GCJ='$rm $output_objdir/$soname~$CC -shared -fPIC ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' - else - archive_cmds_GCJ='$rm $output_objdir/$soname~$LD -b +b $install_libdir -o $output_objdir/$soname $libobjs $deplibs $linker_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' - fi - hardcode_libdir_flag_spec_GCJ='${wl}+b ${wl}$libdir' - hardcode_libdir_separator_GCJ=: - hardcode_direct_GCJ=yes - - # hardcode_minus_L: Not really in the search PATH, - # but as the default location of the library. - hardcode_minus_L_GCJ=yes - export_dynamic_flag_spec_GCJ='${wl}-E' - ;; - - hpux10*) - if test "$GCC" = yes -a "$with_gnu_ld" = no; then - archive_cmds_GCJ='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' - else - archive_cmds_GCJ='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags' - fi - if test "$with_gnu_ld" = no; then - hardcode_libdir_flag_spec_GCJ='${wl}+b ${wl}$libdir' - hardcode_libdir_separator_GCJ=: - - hardcode_direct_GCJ=yes - export_dynamic_flag_spec_GCJ='${wl}-E' - - # hardcode_minus_L: Not really in the search PATH, - # but as the default location of the library. - hardcode_minus_L_GCJ=yes - fi - ;; - - hpux11*) - if test "$GCC" = yes -a "$with_gnu_ld" = no; then - case $host_cpu in - hppa*64*) - archive_cmds_GCJ='$CC -shared ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' - ;; - ia64*) - archive_cmds_GCJ='$CC -shared ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' - ;; - *) - archive_cmds_GCJ='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' - ;; - esac - else - case $host_cpu in - hppa*64*) - archive_cmds_GCJ='$CC -b ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' - ;; - ia64*) - archive_cmds_GCJ='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' - ;; - *) - archive_cmds_GCJ='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' - ;; - esac - fi - if test "$with_gnu_ld" = no; then - hardcode_libdir_flag_spec_GCJ='${wl}+b ${wl}$libdir' - hardcode_libdir_separator_GCJ=: - - case $host_cpu in - hppa*64*|ia64*) - hardcode_libdir_flag_spec_ld_GCJ='+b $libdir' - hardcode_direct_GCJ=no - hardcode_shlibpath_var_GCJ=no - ;; - *) - hardcode_direct_GCJ=yes - export_dynamic_flag_spec_GCJ='${wl}-E' - - # hardcode_minus_L: Not really in the search PATH, - # but as the default location of the library. - hardcode_minus_L_GCJ=yes - ;; - esac - fi - ;; - - irix5* | irix6* | nonstopux*) - if test "$GCC" = yes; then - archive_cmds_GCJ='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' - else - archive_cmds_GCJ='$LD -shared $libobjs $deplibs $linker_flags -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib' - hardcode_libdir_flag_spec_ld_GCJ='-rpath $libdir' - fi - hardcode_libdir_flag_spec_GCJ='${wl}-rpath ${wl}$libdir' - hardcode_libdir_separator_GCJ=: - link_all_deplibs_GCJ=yes - ;; - - netbsd*) - if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then - archive_cmds_GCJ='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' # a.out - else - archive_cmds_GCJ='$LD -shared -o $lib $libobjs $deplibs $linker_flags' # ELF - fi - hardcode_libdir_flag_spec_GCJ='-R$libdir' - hardcode_direct_GCJ=yes - hardcode_shlibpath_var_GCJ=no - ;; - - newsos6) - archive_cmds_GCJ='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' - hardcode_direct_GCJ=yes - hardcode_libdir_flag_spec_GCJ='${wl}-rpath ${wl}$libdir' - hardcode_libdir_separator_GCJ=: - hardcode_shlibpath_var_GCJ=no - ;; - - openbsd*) - if test -f /usr/libexec/ld.so; then - hardcode_direct_GCJ=yes - hardcode_shlibpath_var_GCJ=no - if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then - archive_cmds_GCJ='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' - archive_expsym_cmds_GCJ='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-retain-symbols-file,$export_symbols' - hardcode_libdir_flag_spec_GCJ='${wl}-rpath,$libdir' - export_dynamic_flag_spec_GCJ='${wl}-E' - else - case $host_os in - openbsd[01].* | openbsd2.[0-7] | openbsd2.[0-7].*) - archive_cmds_GCJ='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' - hardcode_libdir_flag_spec_GCJ='-R$libdir' - ;; - *) - archive_cmds_GCJ='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' - hardcode_libdir_flag_spec_GCJ='${wl}-rpath,$libdir' - ;; - esac - fi - else - ld_shlibs_GCJ=no - fi - ;; - - os2*) - hardcode_libdir_flag_spec_GCJ='-L$libdir' - hardcode_minus_L_GCJ=yes - allow_undefined_flag_GCJ=unsupported - archive_cmds_GCJ='$echo "LIBRARY $libname INITINSTANCE" > $output_objdir/$libname.def~$echo "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~$echo DATA >> $output_objdir/$libname.def~$echo " SINGLE NONSHARED" >> $output_objdir/$libname.def~$echo EXPORTS >> $output_objdir/$libname.def~emxexp $libobjs >> $output_objdir/$libname.def~$CC -Zdll -Zcrtdll -o $lib $libobjs $deplibs $compiler_flags $output_objdir/$libname.def' - old_archive_From_new_cmds_GCJ='emximp -o $output_objdir/$libname.a $output_objdir/$libname.def' - ;; - - osf3*) - if test "$GCC" = yes; then - allow_undefined_flag_GCJ=' ${wl}-expect_unresolved ${wl}\*' - archive_cmds_GCJ='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' - else - allow_undefined_flag_GCJ=' -expect_unresolved \*' - archive_cmds_GCJ='$LD -shared${allow_undefined_flag} $libobjs $deplibs $linker_flags -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib' - fi - hardcode_libdir_flag_spec_GCJ='${wl}-rpath ${wl}$libdir' - hardcode_libdir_separator_GCJ=: - ;; - - osf4* | osf5*) # as osf3* with the addition of -msym flag - if test "$GCC" = yes; then - allow_undefined_flag_GCJ=' ${wl}-expect_unresolved ${wl}\*' - archive_cmds_GCJ='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' - hardcode_libdir_flag_spec_GCJ='${wl}-rpath ${wl}$libdir' - else - allow_undefined_flag_GCJ=' -expect_unresolved \*' - archive_cmds_GCJ='$LD -shared${allow_undefined_flag} $libobjs $deplibs $linker_flags -msym -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib' - archive_expsym_cmds_GCJ='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done; echo "-hidden">> $lib.exp~ - $LD -shared${allow_undefined_flag} -input $lib.exp $linker_flags $libobjs $deplibs -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib~$rm $lib.exp' - - # Both c and cxx compiler support -rpath directly - hardcode_libdir_flag_spec_GCJ='-rpath $libdir' - fi - hardcode_libdir_separator_GCJ=: - ;; - - solaris*) - no_undefined_flag_GCJ=' -z text' - if test "$GCC" = yes; then - wlarc='${wl}' - archive_cmds_GCJ='$CC -shared ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' - archive_expsym_cmds_GCJ='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~ - $CC -shared ${wl}-M ${wl}$lib.exp ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags~$rm $lib.exp' - else - wlarc='' - archive_cmds_GCJ='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linker_flags' - archive_expsym_cmds_GCJ='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~ - $LD -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$rm $lib.exp' - fi - hardcode_libdir_flag_spec_GCJ='-R$libdir' - hardcode_shlibpath_var_GCJ=no - case $host_os in - solaris2.[0-5] | solaris2.[0-5].*) ;; - *) - # The compiler driver will combine and reorder linker options, - # but understands `-z linker_flag'. GCC discards it without `$wl', - # but is careful enough not to reorder. - # Supported since Solaris 2.6 (maybe 2.5.1?) - if test "$GCC" = yes; then - whole_archive_flag_spec_GCJ='${wl}-z ${wl}allextract$convenience ${wl}-z ${wl}defaultextract' - else - whole_archive_flag_spec_GCJ='-z allextract$convenience -z defaultextract' - fi - ;; - esac - link_all_deplibs_GCJ=yes - ;; - - sunos4*) - if test "x$host_vendor" = xsequent; then - # Use $CC to link under sequent, because it throws in some extra .o - # files that make .init and .fini sections work. - archive_cmds_GCJ='$CC -G ${wl}-h $soname -o $lib $libobjs $deplibs $compiler_flags' - else - archive_cmds_GCJ='$LD -assert pure-text -Bstatic -o $lib $libobjs $deplibs $linker_flags' - fi - hardcode_libdir_flag_spec_GCJ='-L$libdir' - hardcode_direct_GCJ=yes - hardcode_minus_L_GCJ=yes - hardcode_shlibpath_var_GCJ=no - ;; - - sysv4) - case $host_vendor in - sni) - archive_cmds_GCJ='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' - hardcode_direct_GCJ=yes # is this really true??? - ;; - siemens) - ## LD is ld it makes a PLAMLIB - ## CC just makes a GrossModule. - archive_cmds_GCJ='$LD -G -o $lib $libobjs $deplibs $linker_flags' - reload_cmds_GCJ='$CC -r -o $output$reload_objs' - hardcode_direct_GCJ=no - ;; - motorola) - archive_cmds_GCJ='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' - hardcode_direct_GCJ=no #Motorola manual says yes, but my tests say they lie - ;; - esac - runpath_var='LD_RUN_PATH' - hardcode_shlibpath_var_GCJ=no - ;; - - sysv4.3*) - archive_cmds_GCJ='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' - hardcode_shlibpath_var_GCJ=no - export_dynamic_flag_spec_GCJ='-Bexport' - ;; - - sysv4*MP*) - if test -d /usr/nec; then - archive_cmds_GCJ='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' - hardcode_shlibpath_var_GCJ=no - runpath_var=LD_RUN_PATH - hardcode_runpath_var=yes - ld_shlibs_GCJ=yes - fi - ;; - - sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[01].[10]* | unixware7* | sco3.2v5.0.[024]*) - no_undefined_flag_GCJ='${wl}-z,text' - archive_cmds_need_lc_GCJ=no - hardcode_shlibpath_var_GCJ=no - runpath_var='LD_RUN_PATH' - - if test "$GCC" = yes; then - archive_cmds_GCJ='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - archive_expsym_cmds_GCJ='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - else - archive_cmds_GCJ='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - archive_expsym_cmds_GCJ='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - fi - ;; - - sysv5* | sco3.2v5* | sco5v6*) - # Note: We can NOT use -z defs as we might desire, because we do not - # link with -lc, and that would cause any symbols used from libc to - # always be unresolved, which means just about no library would - # ever link correctly. If we're not using GNU ld we use -z text - # though, which does catch some bad symbols but isn't as heavy-handed - # as -z defs. - no_undefined_flag_GCJ='${wl}-z,text' - allow_undefined_flag_GCJ='${wl}-z,nodefs' - archive_cmds_need_lc_GCJ=no - hardcode_shlibpath_var_GCJ=no - hardcode_libdir_flag_spec_GCJ='`test -z "$SCOABSPATH" && echo ${wl}-R,$libdir`' - hardcode_libdir_separator_GCJ=':' - link_all_deplibs_GCJ=yes - export_dynamic_flag_spec_GCJ='${wl}-Bexport' - runpath_var='LD_RUN_PATH' - - if test "$GCC" = yes; then - archive_cmds_GCJ='$CC -shared ${wl}-h,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags' - archive_expsym_cmds_GCJ='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags' - else - archive_cmds_GCJ='$CC -G ${wl}-h,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags' - archive_expsym_cmds_GCJ='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags' - fi - ;; - - uts4*) - archive_cmds_GCJ='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' - hardcode_libdir_flag_spec_GCJ='-L$libdir' - hardcode_shlibpath_var_GCJ=no - ;; - - *) - ld_shlibs_GCJ=no - ;; - esac - fi - -{ echo "$as_me:$LINENO: result: $ld_shlibs_GCJ" >&5 -echo "${ECHO_T}$ld_shlibs_GCJ" >&6; } -test "$ld_shlibs_GCJ" = no && can_build_shared=no - -# -# Do we need to explicitly link libc? -# -case "x$archive_cmds_need_lc_GCJ" in -x|xyes) - # Assume -lc should be added - archive_cmds_need_lc_GCJ=yes - - if test "$enable_shared" = yes && test "$GCC" = yes; then - case $archive_cmds_GCJ in - *'~'*) - # FIXME: we may have to deal with multi-command sequences. - ;; - '$CC '*) - # Test whether the compiler implicitly links with -lc since on some - # systems, -lgcc has to come before -lc. If gcc already passes -lc - # to ld, don't add -lc before -lgcc. - { echo "$as_me:$LINENO: checking whether -lc should be explicitly linked in" >&5 -echo $ECHO_N "checking whether -lc should be explicitly linked in... $ECHO_C" >&6; } - $rm conftest* - echo "$lt_simple_compile_test_code" > conftest.$ac_ext - - if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } 2>conftest.err; then - soname=conftest - lib=conftest - libobjs=conftest.$ac_objext - deplibs= - wl=$lt_prog_compiler_wl_GCJ - pic_flag=$lt_prog_compiler_pic_GCJ - compiler_flags=-v - linker_flags=-v - verstring= - output_objdir=. - libname=conftest - lt_save_allow_undefined_flag=$allow_undefined_flag_GCJ - allow_undefined_flag_GCJ= - if { (eval echo "$as_me:$LINENO: \"$archive_cmds_GCJ 2\>\&1 \| grep \" -lc \" \>/dev/null 2\>\&1\"") >&5 - (eval $archive_cmds_GCJ 2\>\&1 \| grep \" -lc \" \>/dev/null 2\>\&1) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } - then - archive_cmds_need_lc_GCJ=no - else - archive_cmds_need_lc_GCJ=yes - fi - allow_undefined_flag_GCJ=$lt_save_allow_undefined_flag - else - cat conftest.err 1>&5 - fi - $rm conftest* - { echo "$as_me:$LINENO: result: $archive_cmds_need_lc_GCJ" >&5 -echo "${ECHO_T}$archive_cmds_need_lc_GCJ" >&6; } - ;; - esac - fi - ;; -esac - -{ echo "$as_me:$LINENO: checking dynamic linker characteristics" >&5 -echo $ECHO_N "checking dynamic linker characteristics... $ECHO_C" >&6; } -library_names_spec= -libname_spec='lib$name' -soname_spec= -shrext_cmds=".so" -postinstall_cmds= -postuninstall_cmds= -finish_cmds= -finish_eval= -shlibpath_var= -shlibpath_overrides_runpath=unknown -version_type=none -dynamic_linker="$host_os ld.so" -sys_lib_dlsearch_path_spec="/lib /usr/lib" - -need_lib_prefix=unknown -hardcode_into_libs=no - -# when you set need_version to no, make sure it does not cause -set_version -# flags to be left without arguments -need_version=unknown - -case $host_os in -aix3*) - version_type=linux - library_names_spec='${libname}${release}${shared_ext}$versuffix $libname.a' - shlibpath_var=LIBPATH - - # AIX 3 has no versioning support, so we append a major version to the name. - soname_spec='${libname}${release}${shared_ext}$major' - ;; - -aix4* | aix5*) - version_type=linux - need_lib_prefix=no - need_version=no - hardcode_into_libs=yes - if test "$host_cpu" = ia64; then - # AIX 5 supports IA64 - library_names_spec='${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext}$versuffix $libname${shared_ext}' - shlibpath_var=LD_LIBRARY_PATH - else - # With GCC up to 2.95.x, collect2 would create an import file - # for dependence libraries. The import file would start with - # the line `#! .'. This would cause the generated library to - # depend on `.', always an invalid library. This was fixed in - # development snapshots of GCC prior to 3.0. - case $host_os in - aix4 | aix4.[01] | aix4.[01].*) - if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)' - echo ' yes ' - echo '#endif'; } | ${CC} -E - | grep yes > /dev/null; then - : - else - can_build_shared=no - fi - ;; - esac - # AIX (on Power*) has no versioning support, so currently we can not hardcode correct - # soname into executable. Probably we can add versioning support to - # collect2, so additional links can be useful in future. - if test "$aix_use_runtimelinking" = yes; then - # If using run time linking (on AIX 4.2 or later) use lib.so - # instead of lib.a to let people know that these are not - # typical AIX shared libraries. - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - else - # We preserve .a as extension for shared libraries through AIX4.2 - # and later when we are not doing run time linking. - library_names_spec='${libname}${release}.a $libname.a' - soname_spec='${libname}${release}${shared_ext}$major' - fi - shlibpath_var=LIBPATH - fi - ;; - -amigaos*) - library_names_spec='$libname.ixlibrary $libname.a' - # Create ${libname}_ixlibrary.a entries in /sys/libs. - finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`$echo "X$lib" | $Xsed -e '\''s%^.*/\([^/]*\)\.ixlibrary$%\1%'\''`; test $rm /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done' - ;; - -beos*) - library_names_spec='${libname}${shared_ext}' - dynamic_linker="$host_os ld.so" - shlibpath_var=LIBRARY_PATH - ;; - -bsdi[45]*) - version_type=linux - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir' - shlibpath_var=LD_LIBRARY_PATH - sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib" - sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib" - # the default ld.so.conf also contains /usr/contrib/lib and - # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow - # libtool to hard-code these into programs - ;; - -cygwin* | mingw* | pw32*) - version_type=windows - shrext_cmds=".dll" - need_version=no - need_lib_prefix=no - - case $GCC,$host_os in - yes,cygwin* | yes,mingw* | yes,pw32*) - library_names_spec='$libname.dll.a' - # DLL is installed to $(libdir)/../bin by postinstall_cmds - postinstall_cmds='base_file=`basename \${file}`~ - dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i;echo \$dlname'\''`~ - dldir=$destdir/`dirname \$dlpath`~ - test -d \$dldir || mkdir -p \$dldir~ - $install_prog $dir/$dlname \$dldir/$dlname~ - chmod a+x \$dldir/$dlname' - postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ - dlpath=$dir/\$dldll~ - $rm \$dlpath' - shlibpath_overrides_runpath=yes - - case $host_os in - cygwin*) - # Cygwin DLLs use 'cyg' prefix rather than 'lib' - soname_spec='`echo ${libname} | sed -e 's/^lib/cyg/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' - sys_lib_search_path_spec="/usr/lib /lib/w32api /lib /usr/local/lib" - ;; - mingw*) - # MinGW DLLs use traditional 'lib' prefix - soname_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' - sys_lib_search_path_spec=`$CC -print-search-dirs | grep "^libraries:" | $SED -e "s/^libraries://" -e "s,=/,/,g"` - if echo "$sys_lib_search_path_spec" | grep ';[c-zC-Z]:/' >/dev/null; then - # It is most probably a Windows format PATH printed by - # mingw gcc, but we are running on Cygwin. Gcc prints its search - # path with ; separators, and with drive letters. We can handle the - # drive letters (cygwin fileutils understands them), so leave them, - # especially as we might pass files found there to a mingw objdump, - # which wouldn't understand a cygwinified path. Ahh. - sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'` - else - sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` - fi - ;; - pw32*) - # pw32 DLLs use 'pw' prefix rather than 'lib' - library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' - ;; - esac - ;; - - *) - library_names_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext} $libname.lib' - ;; - esac - dynamic_linker='Win32 ld.exe' - # FIXME: first we should search . and the directory the executable is in - shlibpath_var=PATH - ;; - -darwin* | rhapsody*) - dynamic_linker="$host_os dyld" - version_type=darwin - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${versuffix}$shared_ext ${libname}${release}${major}$shared_ext ${libname}$shared_ext' - soname_spec='${libname}${release}${major}$shared_ext' - shlibpath_overrides_runpath=yes - shlibpath_var=DYLD_LIBRARY_PATH - shrext_cmds='`test .$module = .yes && echo .so || echo .dylib`' - - sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib' - ;; - -dgux*) - version_type=linux - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname$shared_ext' - soname_spec='${libname}${release}${shared_ext}$major' - shlibpath_var=LD_LIBRARY_PATH - ;; - -freebsd1*) - dynamic_linker=no - ;; - -freebsd* | dragonfly*) - # DragonFly does not have aout. When/if they implement a new - # versioning mechanism, adjust this. - if test -x /usr/bin/objformat; then - objformat=`/usr/bin/objformat` - else - case $host_os in - freebsd[123]*) objformat=aout ;; - *) objformat=elf ;; - esac - fi - version_type=freebsd-$objformat - case $version_type in - freebsd-elf*) - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' - need_version=no - need_lib_prefix=no - ;; - freebsd-*) - library_names_spec='${libname}${release}${shared_ext}$versuffix $libname${shared_ext}$versuffix' - need_version=yes - ;; - esac - shlibpath_var=LD_LIBRARY_PATH - case $host_os in - freebsd2*) - shlibpath_overrides_runpath=yes - ;; - freebsd3.[01]* | freebsdelf3.[01]*) - shlibpath_overrides_runpath=yes - hardcode_into_libs=yes - ;; - freebsd3.[2-9]* | freebsdelf3.[2-9]* | \ - freebsd4.[0-5] | freebsdelf4.[0-5] | freebsd4.1.1 | freebsdelf4.1.1) - shlibpath_overrides_runpath=no - hardcode_into_libs=yes - ;; - *) # from 4.6 on, and DragonFly - shlibpath_overrides_runpath=yes - hardcode_into_libs=yes - ;; - esac - ;; - -gnu*) - version_type=linux - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - shlibpath_var=LD_LIBRARY_PATH - hardcode_into_libs=yes - ;; - -hpux9* | hpux10* | hpux11*) - # Give a soname corresponding to the major version so that dld.sl refuses to - # link against other versions. - version_type=sunos - need_lib_prefix=no - need_version=no - case $host_cpu in - ia64*) - shrext_cmds='.so' - hardcode_into_libs=yes - dynamic_linker="$host_os dld.so" - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - if test "X$HPUX_IA64_MODE" = X32; then - sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib" - else - sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64" - fi - sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec - ;; - hppa*64*) - shrext_cmds='.sl' - hardcode_into_libs=yes - dynamic_linker="$host_os dld.sl" - shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH - shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64" - sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec - ;; - *) - shrext_cmds='.sl' - dynamic_linker="$host_os dld.sl" - shlibpath_var=SHLIB_PATH - shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - ;; - esac - # HP-UX runs *really* slowly unless shared libraries are mode 555. - postinstall_cmds='chmod 555 $lib' - ;; - -interix[3-9]*) - version_type=linux - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - dynamic_linker='Interix 3.x ld.so.1 (PE, like ELF)' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=no - hardcode_into_libs=yes - ;; - -irix5* | irix6* | nonstopux*) - case $host_os in - nonstopux*) version_type=nonstopux ;; - *) - if test "$lt_cv_prog_gnu_ld" = yes; then - version_type=linux - else - version_type=irix - fi ;; - esac - need_lib_prefix=no - need_version=no - soname_spec='${libname}${release}${shared_ext}$major' - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext} $libname${shared_ext}' - case $host_os in - irix5* | nonstopux*) - libsuff= shlibsuff= - ;; - *) - case $LD in # libtool.m4 will add one of these switches to LD - *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ") - libsuff= shlibsuff= libmagic=32-bit;; - *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ") - libsuff=32 shlibsuff=N32 libmagic=N32;; - *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ") - libsuff=64 shlibsuff=64 libmagic=64-bit;; - *) libsuff= shlibsuff= libmagic=never-match;; - esac - ;; - esac - shlibpath_var=LD_LIBRARY${shlibsuff}_PATH - shlibpath_overrides_runpath=no - sys_lib_search_path_spec="/usr/lib${libsuff} /lib${libsuff} /usr/local/lib${libsuff}" - sys_lib_dlsearch_path_spec="/usr/lib${libsuff} /lib${libsuff}" - hardcode_into_libs=yes - ;; - -# No shared lib support for Linux oldld, aout, or coff. -linux*oldld* | linux*aout* | linux*coff*) - dynamic_linker=no - ;; - -# This must be Linux ELF. -linux* | k*bsd*-gnu) - version_type=linux - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=no - # This implies no fast_install, which is unacceptable. - # Some rework will be needed to allow for fast_install - # before this can be enabled. - hardcode_into_libs=yes - sys_lib_search_path_spec="/usr/lib${libsuff} /lib${libsuff} /usr/local/lib${libsuff}" - sys_lib_dlsearch_path_spec="/usr/lib${libsuff} /lib${libsuff}" - - # Append ld.so.conf contents to the search path - if test -f /etc/ld.so.conf; then - lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s 2>/dev/null", \$2)); skip = 1; } { if (!skip) print \$0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;/^[ ]*hwcap[ ]/d;s/[:, ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;/^$/d' | tr '\n' ' '` - sys_lib_dlsearch_path_spec="$sys_lib_dlsearch_path_spec $lt_ld_extra" - fi - - # We used to test for /lib/ld.so.1 and disable shared libraries on - # powerpc, because MkLinux only supported shared libraries with the - # GNU dynamic linker. Since this was broken with cross compilers, - # most powerpc-linux boxes support dynamic linking these days and - # people can always --disable-shared, the test was removed, and we - # assume the GNU/Linux dynamic linker is in use. - dynamic_linker='GNU/Linux ld.so' - ;; - -netbsd*) - version_type=sunos - need_lib_prefix=no - need_version=no - if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' - finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' - dynamic_linker='NetBSD (a.out) ld.so' - else - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - dynamic_linker='NetBSD ld.elf_so' - fi - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=yes - hardcode_into_libs=yes - ;; - -newsos6) - version_type=linux - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=yes - ;; - -nto-qnx*) - version_type=linux - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=yes - ;; - -openbsd*) - version_type=sunos - sys_lib_dlsearch_path_spec="/usr/lib" - need_lib_prefix=no - # Some older versions of OpenBSD (3.3 at least) *do* need versioned libs. - case $host_os in - openbsd3.3 | openbsd3.3.*) need_version=yes ;; - *) need_version=no ;; - esac - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' - finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' - shlibpath_var=LD_LIBRARY_PATH - if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then - case $host_os in - openbsd2.[89] | openbsd2.[89].*) - shlibpath_overrides_runpath=no - ;; - *) - shlibpath_overrides_runpath=yes - ;; - esac - else - shlibpath_overrides_runpath=yes - fi - ;; - -os2*) - libname_spec='$name' - shrext_cmds=".dll" - need_lib_prefix=no - library_names_spec='$libname${shared_ext} $libname.a' - dynamic_linker='OS/2 ld.exe' - shlibpath_var=LIBPATH - ;; - -osf3* | osf4* | osf5*) - version_type=osf - need_lib_prefix=no - need_version=no - soname_spec='${libname}${release}${shared_ext}$major' - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - shlibpath_var=LD_LIBRARY_PATH - sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib" - sys_lib_dlsearch_path_spec="$sys_lib_search_path_spec" - ;; - -rdos*) - dynamic_linker=no - ;; - -solaris*) - version_type=linux - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=yes - hardcode_into_libs=yes - # ldd complains unless libraries are executable - postinstall_cmds='chmod +x $lib' - ;; - -sunos4*) - version_type=sunos - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' - finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=yes - if test "$with_gnu_ld" = yes; then - need_lib_prefix=no - fi - need_version=yes - ;; - -sysv4 | sysv4.3*) - version_type=linux - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - shlibpath_var=LD_LIBRARY_PATH - case $host_vendor in - sni) - shlibpath_overrides_runpath=no - need_lib_prefix=no - export_dynamic_flag_spec='${wl}-Blargedynsym' - runpath_var=LD_RUN_PATH - ;; - siemens) - need_lib_prefix=no - ;; - motorola) - need_lib_prefix=no - need_version=no - shlibpath_overrides_runpath=no - sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib' - ;; - esac - ;; - -sysv4*MP*) - if test -d /usr/nec ;then - version_type=linux - library_names_spec='$libname${shared_ext}.$versuffix $libname${shared_ext}.$major $libname${shared_ext}' - soname_spec='$libname${shared_ext}.$major' - shlibpath_var=LD_LIBRARY_PATH - fi - ;; - -sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) - version_type=freebsd-elf - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - shlibpath_var=LD_LIBRARY_PATH - hardcode_into_libs=yes - if test "$with_gnu_ld" = yes; then - sys_lib_search_path_spec='/usr/local/lib /usr/gnu/lib /usr/ccs/lib /usr/lib /lib' - shlibpath_overrides_runpath=no - else - sys_lib_search_path_spec='/usr/ccs/lib /usr/lib' - shlibpath_overrides_runpath=yes - case $host_os in - sco3.2v5*) - sys_lib_search_path_spec="$sys_lib_search_path_spec /lib" - ;; - esac - fi - sys_lib_dlsearch_path_spec='/usr/lib' - ;; - -uts4*) - version_type=linux - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - shlibpath_var=LD_LIBRARY_PATH - ;; - -*) - dynamic_linker=no - ;; -esac -{ echo "$as_me:$LINENO: result: $dynamic_linker" >&5 -echo "${ECHO_T}$dynamic_linker" >&6; } -test "$dynamic_linker" = no && can_build_shared=no - -variables_saved_for_relink="PATH $shlibpath_var $runpath_var" -if test "$GCC" = yes; then - variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH" -fi - -{ echo "$as_me:$LINENO: checking how to hardcode library paths into programs" >&5 -echo $ECHO_N "checking how to hardcode library paths into programs... $ECHO_C" >&6; } -hardcode_action_GCJ= -if test -n "$hardcode_libdir_flag_spec_GCJ" || \ - test -n "$runpath_var_GCJ" || \ - test "X$hardcode_automatic_GCJ" = "Xyes" ; then - - # We can hardcode non-existent directories. - if test "$hardcode_direct_GCJ" != no && - # If the only mechanism to avoid hardcoding is shlibpath_var, we - # have to relink, otherwise we might link with an installed library - # when we should be linking with a yet-to-be-installed one - ## test "$_LT_AC_TAGVAR(hardcode_shlibpath_var, GCJ)" != no && - test "$hardcode_minus_L_GCJ" != no; then - # Linking always hardcodes the temporary library directory. - hardcode_action_GCJ=relink - else - # We can link without hardcoding, and we can hardcode nonexisting dirs. - hardcode_action_GCJ=immediate - fi -else - # We cannot hardcode anything, or else we can only hardcode existing - # directories. - hardcode_action_GCJ=unsupported -fi -{ echo "$as_me:$LINENO: result: $hardcode_action_GCJ" >&5 -echo "${ECHO_T}$hardcode_action_GCJ" >&6; } - -if test "$hardcode_action_GCJ" = relink; then - # Fast installation is not supported - enable_fast_install=no -elif test "$shlibpath_overrides_runpath" = yes || - test "$enable_shared" = no; then - # Fast installation is not necessary - enable_fast_install=needless -fi - - -# The else clause should only fire when bootstrapping the -# libtool distribution, otherwise you forgot to ship ltmain.sh -# with your package, and you will get complaints that there are -# no rules to generate ltmain.sh. -if test -f "$ltmain"; then - # See if we are running on zsh, and set the options which allow our commands through - # without removal of \ escapes. - if test -n "${ZSH_VERSION+set}" ; then - setopt NO_GLOB_SUBST - fi - # Now quote all the things that may contain metacharacters while being - # careful not to overquote the AC_SUBSTed values. We take copies of the - # variables and quote the copies for generation of the libtool script. - for var in echo old_CC old_CFLAGS AR AR_FLAGS EGREP RANLIB LN_S LTCC LTCFLAGS NM \ - SED SHELL STRIP \ - libname_spec library_names_spec soname_spec extract_expsyms_cmds \ - old_striplib striplib file_magic_cmd finish_cmds finish_eval \ - deplibs_check_method reload_flag reload_cmds need_locks \ - lt_cv_sys_global_symbol_pipe lt_cv_sys_global_symbol_to_cdecl \ - lt_cv_sys_global_symbol_to_c_name_address \ - sys_lib_search_path_spec sys_lib_dlsearch_path_spec \ - old_postinstall_cmds old_postuninstall_cmds \ - compiler_GCJ \ - CC_GCJ \ - LD_GCJ \ - lt_prog_compiler_wl_GCJ \ - lt_prog_compiler_pic_GCJ \ - lt_prog_compiler_static_GCJ \ - lt_prog_compiler_no_builtin_flag_GCJ \ - export_dynamic_flag_spec_GCJ \ - thread_safe_flag_spec_GCJ \ - whole_archive_flag_spec_GCJ \ - enable_shared_with_static_runtimes_GCJ \ - old_archive_cmds_GCJ \ - old_archive_from_new_cmds_GCJ \ - predep_objects_GCJ \ - postdep_objects_GCJ \ - predeps_GCJ \ - postdeps_GCJ \ - compiler_lib_search_path_GCJ \ - archive_cmds_GCJ \ - archive_expsym_cmds_GCJ \ - postinstall_cmds_GCJ \ - postuninstall_cmds_GCJ \ - old_archive_from_expsyms_cmds_GCJ \ - allow_undefined_flag_GCJ \ - no_undefined_flag_GCJ \ - export_symbols_cmds_GCJ \ - hardcode_libdir_flag_spec_GCJ \ - hardcode_libdir_flag_spec_ld_GCJ \ - hardcode_libdir_separator_GCJ \ - hardcode_automatic_GCJ \ - module_cmds_GCJ \ - module_expsym_cmds_GCJ \ - lt_cv_prog_compiler_c_o_GCJ \ - fix_srcfile_path_GCJ \ - exclude_expsyms_GCJ \ - include_expsyms_GCJ; do - - case $var in - old_archive_cmds_GCJ | \ - old_archive_from_new_cmds_GCJ | \ - archive_cmds_GCJ | \ - archive_expsym_cmds_GCJ | \ - module_cmds_GCJ | \ - module_expsym_cmds_GCJ | \ - old_archive_from_expsyms_cmds_GCJ | \ - export_symbols_cmds_GCJ | \ - extract_expsyms_cmds | reload_cmds | finish_cmds | \ - postinstall_cmds | postuninstall_cmds | \ - old_postinstall_cmds | old_postuninstall_cmds | \ - sys_lib_search_path_spec | sys_lib_dlsearch_path_spec) - # Double-quote double-evaled strings. - eval "lt_$var=\\\"\`\$echo \"X\$$var\" | \$Xsed -e \"\$double_quote_subst\" -e \"\$sed_quote_subst\" -e \"\$delay_variable_subst\"\`\\\"" - ;; - *) - eval "lt_$var=\\\"\`\$echo \"X\$$var\" | \$Xsed -e \"\$sed_quote_subst\"\`\\\"" - ;; - esac - done - - case $lt_echo in - *'\$0 --fallback-echo"') - lt_echo=`$echo "X$lt_echo" | $Xsed -e 's/\\\\\\\$0 --fallback-echo"$/$0 --fallback-echo"/'` - ;; - esac - -cfgfile="$ofile" - - cat <<__EOF__ >> "$cfgfile" -# ### BEGIN LIBTOOL TAG CONFIG: $tagname - -# Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`: - -# Shell to use when invoking shell scripts. -SHELL=$lt_SHELL - -# Whether or not to build shared libraries. -build_libtool_libs=$enable_shared - -# Whether or not to build static libraries. -build_old_libs=$enable_static - -# Whether or not to add -lc for building shared libraries. -build_libtool_need_lc=$archive_cmds_need_lc_GCJ - -# Whether or not to disallow shared libs when runtime libs are static -allow_libtool_libs_with_static_runtimes=$enable_shared_with_static_runtimes_GCJ - -# Whether or not to optimize for fast installation. -fast_install=$enable_fast_install - -# The host system. -host_alias=$host_alias -host=$host -host_os=$host_os - -# The build system. -build_alias=$build_alias -build=$build -build_os=$build_os - -# An echo program that does not interpret backslashes. -echo=$lt_echo - -# The archiver. -AR=$lt_AR -AR_FLAGS=$lt_AR_FLAGS - -# A C compiler. -LTCC=$lt_LTCC - -# LTCC compiler flags. -LTCFLAGS=$lt_LTCFLAGS - -# A language-specific compiler. -CC=$lt_compiler_GCJ - -# Is the compiler the GNU C compiler? -with_gcc=$GCC_GCJ - -# An ERE matcher. -EGREP=$lt_EGREP - -# The linker used to build libraries. -LD=$lt_LD_GCJ - -# Whether we need hard or soft links. -LN_S=$lt_LN_S - -# A BSD-compatible nm program. -NM=$lt_NM - -# A symbol stripping program -STRIP=$lt_STRIP - -# Used to examine libraries when file_magic_cmd begins "file" -MAGIC_CMD=$MAGIC_CMD - -# Used on cygwin: DLL creation program. -DLLTOOL="$DLLTOOL" - -# Used on cygwin: object dumper. -OBJDUMP="$OBJDUMP" - -# Used on cygwin: assembler. -AS="$AS" - -# The name of the directory that contains temporary libtool files. -objdir=$objdir - -# How to create reloadable object files. -reload_flag=$lt_reload_flag -reload_cmds=$lt_reload_cmds - -# How to pass a linker flag through the compiler. -wl=$lt_lt_prog_compiler_wl_GCJ - -# Object file suffix (normally "o"). -objext="$ac_objext" - -# Old archive suffix (normally "a"). -libext="$libext" - -# Shared library suffix (normally ".so"). -shrext_cmds='$shrext_cmds' - -# Executable file suffix (normally ""). -exeext="$exeext" - -# Additional compiler flags for building library objects. -pic_flag=$lt_lt_prog_compiler_pic_GCJ -pic_mode=$pic_mode - -# What is the maximum length of a command? -max_cmd_len=$lt_cv_sys_max_cmd_len - -# Does compiler simultaneously support -c and -o options? -compiler_c_o=$lt_lt_cv_prog_compiler_c_o_GCJ - -# Must we lock files when doing compilation? -need_locks=$lt_need_locks - -# Do we need the lib prefix for modules? -need_lib_prefix=$need_lib_prefix - -# Do we need a version for libraries? -need_version=$need_version - -# Whether dlopen is supported. -dlopen_support=$enable_dlopen - -# Whether dlopen of programs is supported. -dlopen_self=$enable_dlopen_self - -# Whether dlopen of statically linked programs is supported. -dlopen_self_static=$enable_dlopen_self_static - -# Compiler flag to prevent dynamic linking. -link_static_flag=$lt_lt_prog_compiler_static_GCJ - -# Compiler flag to turn off builtin functions. -no_builtin_flag=$lt_lt_prog_compiler_no_builtin_flag_GCJ - -# Compiler flag to allow reflexive dlopens. -export_dynamic_flag_spec=$lt_export_dynamic_flag_spec_GCJ - -# Compiler flag to generate shared objects directly from archives. -whole_archive_flag_spec=$lt_whole_archive_flag_spec_GCJ - -# Compiler flag to generate thread-safe objects. -thread_safe_flag_spec=$lt_thread_safe_flag_spec_GCJ - -# Library versioning type. -version_type=$version_type - -# Format of library name prefix. -libname_spec=$lt_libname_spec - -# List of archive names. First name is the real one, the rest are links. -# The last name is the one that the linker finds with -lNAME. -library_names_spec=$lt_library_names_spec - -# The coded name of the library, if different from the real name. -soname_spec=$lt_soname_spec - -# Commands used to build and install an old-style archive. -RANLIB=$lt_RANLIB -old_archive_cmds=$lt_old_archive_cmds_GCJ -old_postinstall_cmds=$lt_old_postinstall_cmds -old_postuninstall_cmds=$lt_old_postuninstall_cmds - -# Create an old-style archive from a shared archive. -old_archive_from_new_cmds=$lt_old_archive_from_new_cmds_GCJ - -# Create a temporary old-style archive to link instead of a shared archive. -old_archive_from_expsyms_cmds=$lt_old_archive_from_expsyms_cmds_GCJ - -# Commands used to build and install a shared archive. -archive_cmds=$lt_archive_cmds_GCJ -archive_expsym_cmds=$lt_archive_expsym_cmds_GCJ -postinstall_cmds=$lt_postinstall_cmds -postuninstall_cmds=$lt_postuninstall_cmds - -# Commands used to build a loadable module (assumed same as above if empty) -module_cmds=$lt_module_cmds_GCJ -module_expsym_cmds=$lt_module_expsym_cmds_GCJ - -# Commands to strip libraries. -old_striplib=$lt_old_striplib -striplib=$lt_striplib - -# Dependencies to place before the objects being linked to create a -# shared library. -predep_objects=$lt_predep_objects_GCJ - -# Dependencies to place after the objects being linked to create a -# shared library. -postdep_objects=$lt_postdep_objects_GCJ - -# Dependencies to place before the objects being linked to create a -# shared library. -predeps=$lt_predeps_GCJ - -# Dependencies to place after the objects being linked to create a -# shared library. -postdeps=$lt_postdeps_GCJ - -# The library search path used internally by the compiler when linking -# a shared library. -compiler_lib_search_path=$lt_compiler_lib_search_path_GCJ - -# Method to check whether dependent libraries are shared objects. -deplibs_check_method=$lt_deplibs_check_method - -# Command to use when deplibs_check_method == file_magic. -file_magic_cmd=$lt_file_magic_cmd - -# Flag that allows shared libraries with undefined symbols to be built. -allow_undefined_flag=$lt_allow_undefined_flag_GCJ - -# Flag that forces no undefined symbols. -no_undefined_flag=$lt_no_undefined_flag_GCJ - -# Commands used to finish a libtool library installation in a directory. -finish_cmds=$lt_finish_cmds - -# Same as above, but a single script fragment to be evaled but not shown. -finish_eval=$lt_finish_eval - -# Take the output of nm and produce a listing of raw symbols and C names. -global_symbol_pipe=$lt_lt_cv_sys_global_symbol_pipe - -# Transform the output of nm in a proper C declaration -global_symbol_to_cdecl=$lt_lt_cv_sys_global_symbol_to_cdecl - -# Transform the output of nm in a C name address pair -global_symbol_to_c_name_address=$lt_lt_cv_sys_global_symbol_to_c_name_address - -# This is the shared library runtime path variable. -runpath_var=$runpath_var - -# This is the shared library path variable. -shlibpath_var=$shlibpath_var - -# Is shlibpath searched before the hard-coded library search path? -shlibpath_overrides_runpath=$shlibpath_overrides_runpath - -# How to hardcode a shared library path into an executable. -hardcode_action=$hardcode_action_GCJ - -# Whether we should hardcode library paths into libraries. -hardcode_into_libs=$hardcode_into_libs - -# Flag to hardcode \$libdir into a binary during linking. -# This must work even if \$libdir does not exist. -hardcode_libdir_flag_spec=$lt_hardcode_libdir_flag_spec_GCJ - -# If ld is used when linking, flag to hardcode \$libdir into -# a binary during linking. This must work even if \$libdir does -# not exist. -hardcode_libdir_flag_spec_ld=$lt_hardcode_libdir_flag_spec_ld_GCJ - -# Whether we need a single -rpath flag with a separated argument. -hardcode_libdir_separator=$lt_hardcode_libdir_separator_GCJ - -# Set to yes if using DIR/libNAME${shared_ext} during linking hardcodes DIR into the -# resulting binary. -hardcode_direct=$hardcode_direct_GCJ - -# Set to yes if using the -LDIR flag during linking hardcodes DIR into the -# resulting binary. -hardcode_minus_L=$hardcode_minus_L_GCJ - -# Set to yes if using SHLIBPATH_VAR=DIR during linking hardcodes DIR into -# the resulting binary. -hardcode_shlibpath_var=$hardcode_shlibpath_var_GCJ - -# Set to yes if building a shared library automatically hardcodes DIR into the library -# and all subsequent libraries and executables linked against it. -hardcode_automatic=$hardcode_automatic_GCJ - -# Variables whose values should be saved in libtool wrapper scripts and -# restored at relink time. -variables_saved_for_relink="$variables_saved_for_relink" - -# Whether libtool must link a program against all its dependency libraries. -link_all_deplibs=$link_all_deplibs_GCJ - -# Compile-time system search path for libraries -sys_lib_search_path_spec=$lt_sys_lib_search_path_spec - -# Run-time system search path for libraries -sys_lib_dlsearch_path_spec=$lt_sys_lib_dlsearch_path_spec - -# Fix the shell variable \$srcfile for the compiler. -fix_srcfile_path=$lt_fix_srcfile_path - -# Set to yes if exported symbols are required. -always_export_symbols=$always_export_symbols_GCJ - -# The commands to list exported symbols. -export_symbols_cmds=$lt_export_symbols_cmds_GCJ - -# The commands to extract the exported symbol list from a shared archive. -extract_expsyms_cmds=$lt_extract_expsyms_cmds - -# Symbols that should not be listed in the preloaded symbols. -exclude_expsyms=$lt_exclude_expsyms_GCJ - -# Symbols that must always be exported. -include_expsyms=$lt_include_expsyms_GCJ - -# ### END LIBTOOL TAG CONFIG: $tagname - -__EOF__ - - -else - # If there is no Makefile yet, we rely on a make rule to execute - # `config.status --recheck' to rerun these tests and create the - # libtool script then. - ltmain_in=`echo $ltmain | sed -e 's/\.sh$/.in/'` - if test -f "$ltmain_in"; then - test -f Makefile && make "$ltmain" - fi -fi - - -ac_ext=c -ac_cpp='$CPP $CPPFLAGS' -ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_c_compiler_gnu - -CC="$lt_save_CC" - - else - tagname="" - fi - ;; - - RC) - - -# Source file extension for RC test sources. -ac_ext=rc - -# Object file extension for compiled RC test sources. -objext=o -objext_RC=$objext - -# Code to be used in simple compile tests -lt_simple_compile_test_code='sample MENU { MENUITEM "&Soup", 100, CHECKED }' - -# Code to be used in simple link tests -lt_simple_link_test_code="$lt_simple_compile_test_code" - -# ltmain only uses $CC for tagged configurations so make sure $CC is set. - -# If no C compiler was specified, use CC. -LTCC=${LTCC-"$CC"} - -# If no C compiler flags were specified, use CFLAGS. -LTCFLAGS=${LTCFLAGS-"$CFLAGS"} - -# Allow CC to be a program name with arguments. -compiler=$CC - - -# save warnings/boilerplate of simple test code -ac_outfile=conftest.$ac_objext -echo "$lt_simple_compile_test_code" >conftest.$ac_ext -eval "$ac_compile" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err -_lt_compiler_boilerplate=`cat conftest.err` -$rm conftest* - -ac_outfile=conftest.$ac_objext -echo "$lt_simple_link_test_code" >conftest.$ac_ext -eval "$ac_link" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err -_lt_linker_boilerplate=`cat conftest.err` -$rm conftest* - - -# Allow CC to be a program name with arguments. -lt_save_CC="$CC" -CC=${RC-"windres"} -compiler=$CC -compiler_RC=$CC -for cc_temp in $compiler""; do - case $cc_temp in - compile | *[\\/]compile | ccache | *[\\/]ccache ) ;; - distcc | *[\\/]distcc | purify | *[\\/]purify ) ;; - \-*) ;; - *) break;; - esac -done -cc_basename=`$echo "X$cc_temp" | $Xsed -e 's%.*/%%' -e "s%^$host_alias-%%"` - -lt_cv_prog_compiler_c_o_RC=yes - -# The else clause should only fire when bootstrapping the -# libtool distribution, otherwise you forgot to ship ltmain.sh -# with your package, and you will get complaints that there are -# no rules to generate ltmain.sh. -if test -f "$ltmain"; then - # See if we are running on zsh, and set the options which allow our commands through - # without removal of \ escapes. - if test -n "${ZSH_VERSION+set}" ; then - setopt NO_GLOB_SUBST - fi - # Now quote all the things that may contain metacharacters while being - # careful not to overquote the AC_SUBSTed values. We take copies of the - # variables and quote the copies for generation of the libtool script. - for var in echo old_CC old_CFLAGS AR AR_FLAGS EGREP RANLIB LN_S LTCC LTCFLAGS NM \ - SED SHELL STRIP \ - libname_spec library_names_spec soname_spec extract_expsyms_cmds \ - old_striplib striplib file_magic_cmd finish_cmds finish_eval \ - deplibs_check_method reload_flag reload_cmds need_locks \ - lt_cv_sys_global_symbol_pipe lt_cv_sys_global_symbol_to_cdecl \ - lt_cv_sys_global_symbol_to_c_name_address \ - sys_lib_search_path_spec sys_lib_dlsearch_path_spec \ - old_postinstall_cmds old_postuninstall_cmds \ - compiler_RC \ - CC_RC \ - LD_RC \ - lt_prog_compiler_wl_RC \ - lt_prog_compiler_pic_RC \ - lt_prog_compiler_static_RC \ - lt_prog_compiler_no_builtin_flag_RC \ - export_dynamic_flag_spec_RC \ - thread_safe_flag_spec_RC \ - whole_archive_flag_spec_RC \ - enable_shared_with_static_runtimes_RC \ - old_archive_cmds_RC \ - old_archive_from_new_cmds_RC \ - predep_objects_RC \ - postdep_objects_RC \ - predeps_RC \ - postdeps_RC \ - compiler_lib_search_path_RC \ - archive_cmds_RC \ - archive_expsym_cmds_RC \ - postinstall_cmds_RC \ - postuninstall_cmds_RC \ - old_archive_from_expsyms_cmds_RC \ - allow_undefined_flag_RC \ - no_undefined_flag_RC \ - export_symbols_cmds_RC \ - hardcode_libdir_flag_spec_RC \ - hardcode_libdir_flag_spec_ld_RC \ - hardcode_libdir_separator_RC \ - hardcode_automatic_RC \ - module_cmds_RC \ - module_expsym_cmds_RC \ - lt_cv_prog_compiler_c_o_RC \ - fix_srcfile_path_RC \ - exclude_expsyms_RC \ - include_expsyms_RC; do - - case $var in - old_archive_cmds_RC | \ - old_archive_from_new_cmds_RC | \ - archive_cmds_RC | \ - archive_expsym_cmds_RC | \ - module_cmds_RC | \ - module_expsym_cmds_RC | \ - old_archive_from_expsyms_cmds_RC | \ - export_symbols_cmds_RC | \ - extract_expsyms_cmds | reload_cmds | finish_cmds | \ - postinstall_cmds | postuninstall_cmds | \ - old_postinstall_cmds | old_postuninstall_cmds | \ - sys_lib_search_path_spec | sys_lib_dlsearch_path_spec) - # Double-quote double-evaled strings. - eval "lt_$var=\\\"\`\$echo \"X\$$var\" | \$Xsed -e \"\$double_quote_subst\" -e \"\$sed_quote_subst\" -e \"\$delay_variable_subst\"\`\\\"" - ;; - *) - eval "lt_$var=\\\"\`\$echo \"X\$$var\" | \$Xsed -e \"\$sed_quote_subst\"\`\\\"" - ;; - esac - done - - case $lt_echo in - *'\$0 --fallback-echo"') - lt_echo=`$echo "X$lt_echo" | $Xsed -e 's/\\\\\\\$0 --fallback-echo"$/$0 --fallback-echo"/'` - ;; - esac - -cfgfile="$ofile" - - cat <<__EOF__ >> "$cfgfile" -# ### BEGIN LIBTOOL TAG CONFIG: $tagname - -# Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`: - -# Shell to use when invoking shell scripts. -SHELL=$lt_SHELL - -# Whether or not to build shared libraries. -build_libtool_libs=$enable_shared - -# Whether or not to build static libraries. -build_old_libs=$enable_static - -# Whether or not to add -lc for building shared libraries. -build_libtool_need_lc=$archive_cmds_need_lc_RC - -# Whether or not to disallow shared libs when runtime libs are static -allow_libtool_libs_with_static_runtimes=$enable_shared_with_static_runtimes_RC - -# Whether or not to optimize for fast installation. -fast_install=$enable_fast_install - -# The host system. -host_alias=$host_alias -host=$host -host_os=$host_os - -# The build system. -build_alias=$build_alias -build=$build -build_os=$build_os - -# An echo program that does not interpret backslashes. -echo=$lt_echo - -# The archiver. -AR=$lt_AR -AR_FLAGS=$lt_AR_FLAGS - -# A C compiler. -LTCC=$lt_LTCC - -# LTCC compiler flags. -LTCFLAGS=$lt_LTCFLAGS - -# A language-specific compiler. -CC=$lt_compiler_RC - -# Is the compiler the GNU C compiler? -with_gcc=$GCC_RC - -# An ERE matcher. -EGREP=$lt_EGREP - -# The linker used to build libraries. -LD=$lt_LD_RC - -# Whether we need hard or soft links. -LN_S=$lt_LN_S - -# A BSD-compatible nm program. -NM=$lt_NM - -# A symbol stripping program -STRIP=$lt_STRIP - -# Used to examine libraries when file_magic_cmd begins "file" -MAGIC_CMD=$MAGIC_CMD - -# Used on cygwin: DLL creation program. -DLLTOOL="$DLLTOOL" - -# Used on cygwin: object dumper. -OBJDUMP="$OBJDUMP" - -# Used on cygwin: assembler. -AS="$AS" - -# The name of the directory that contains temporary libtool files. -objdir=$objdir - -# How to create reloadable object files. -reload_flag=$lt_reload_flag -reload_cmds=$lt_reload_cmds - -# How to pass a linker flag through the compiler. -wl=$lt_lt_prog_compiler_wl_RC - -# Object file suffix (normally "o"). -objext="$ac_objext" - -# Old archive suffix (normally "a"). -libext="$libext" - -# Shared library suffix (normally ".so"). -shrext_cmds='$shrext_cmds' - -# Executable file suffix (normally ""). -exeext="$exeext" - -# Additional compiler flags for building library objects. -pic_flag=$lt_lt_prog_compiler_pic_RC -pic_mode=$pic_mode - -# What is the maximum length of a command? -max_cmd_len=$lt_cv_sys_max_cmd_len - -# Does compiler simultaneously support -c and -o options? -compiler_c_o=$lt_lt_cv_prog_compiler_c_o_RC - -# Must we lock files when doing compilation? -need_locks=$lt_need_locks - -# Do we need the lib prefix for modules? -need_lib_prefix=$need_lib_prefix - -# Do we need a version for libraries? -need_version=$need_version - -# Whether dlopen is supported. -dlopen_support=$enable_dlopen - -# Whether dlopen of programs is supported. -dlopen_self=$enable_dlopen_self - -# Whether dlopen of statically linked programs is supported. -dlopen_self_static=$enable_dlopen_self_static - -# Compiler flag to prevent dynamic linking. -link_static_flag=$lt_lt_prog_compiler_static_RC - -# Compiler flag to turn off builtin functions. -no_builtin_flag=$lt_lt_prog_compiler_no_builtin_flag_RC - -# Compiler flag to allow reflexive dlopens. -export_dynamic_flag_spec=$lt_export_dynamic_flag_spec_RC - -# Compiler flag to generate shared objects directly from archives. -whole_archive_flag_spec=$lt_whole_archive_flag_spec_RC - -# Compiler flag to generate thread-safe objects. -thread_safe_flag_spec=$lt_thread_safe_flag_spec_RC - -# Library versioning type. -version_type=$version_type - -# Format of library name prefix. -libname_spec=$lt_libname_spec - -# List of archive names. First name is the real one, the rest are links. -# The last name is the one that the linker finds with -lNAME. -library_names_spec=$lt_library_names_spec - -# The coded name of the library, if different from the real name. -soname_spec=$lt_soname_spec - -# Commands used to build and install an old-style archive. -RANLIB=$lt_RANLIB -old_archive_cmds=$lt_old_archive_cmds_RC -old_postinstall_cmds=$lt_old_postinstall_cmds -old_postuninstall_cmds=$lt_old_postuninstall_cmds - -# Create an old-style archive from a shared archive. -old_archive_from_new_cmds=$lt_old_archive_from_new_cmds_RC - -# Create a temporary old-style archive to link instead of a shared archive. -old_archive_from_expsyms_cmds=$lt_old_archive_from_expsyms_cmds_RC - -# Commands used to build and install a shared archive. -archive_cmds=$lt_archive_cmds_RC -archive_expsym_cmds=$lt_archive_expsym_cmds_RC -postinstall_cmds=$lt_postinstall_cmds -postuninstall_cmds=$lt_postuninstall_cmds - -# Commands used to build a loadable module (assumed same as above if empty) -module_cmds=$lt_module_cmds_RC -module_expsym_cmds=$lt_module_expsym_cmds_RC - -# Commands to strip libraries. -old_striplib=$lt_old_striplib -striplib=$lt_striplib - -# Dependencies to place before the objects being linked to create a -# shared library. -predep_objects=$lt_predep_objects_RC - -# Dependencies to place after the objects being linked to create a -# shared library. -postdep_objects=$lt_postdep_objects_RC - -# Dependencies to place before the objects being linked to create a -# shared library. -predeps=$lt_predeps_RC - -# Dependencies to place after the objects being linked to create a -# shared library. -postdeps=$lt_postdeps_RC - -# The library search path used internally by the compiler when linking -# a shared library. -compiler_lib_search_path=$lt_compiler_lib_search_path_RC - -# Method to check whether dependent libraries are shared objects. -deplibs_check_method=$lt_deplibs_check_method - -# Command to use when deplibs_check_method == file_magic. -file_magic_cmd=$lt_file_magic_cmd - -# Flag that allows shared libraries with undefined symbols to be built. -allow_undefined_flag=$lt_allow_undefined_flag_RC - -# Flag that forces no undefined symbols. -no_undefined_flag=$lt_no_undefined_flag_RC - -# Commands used to finish a libtool library installation in a directory. -finish_cmds=$lt_finish_cmds - -# Same as above, but a single script fragment to be evaled but not shown. -finish_eval=$lt_finish_eval - -# Take the output of nm and produce a listing of raw symbols and C names. -global_symbol_pipe=$lt_lt_cv_sys_global_symbol_pipe - -# Transform the output of nm in a proper C declaration -global_symbol_to_cdecl=$lt_lt_cv_sys_global_symbol_to_cdecl - -# Transform the output of nm in a C name address pair -global_symbol_to_c_name_address=$lt_lt_cv_sys_global_symbol_to_c_name_address - -# This is the shared library runtime path variable. -runpath_var=$runpath_var - -# This is the shared library path variable. -shlibpath_var=$shlibpath_var - -# Is shlibpath searched before the hard-coded library search path? -shlibpath_overrides_runpath=$shlibpath_overrides_runpath - -# How to hardcode a shared library path into an executable. -hardcode_action=$hardcode_action_RC - -# Whether we should hardcode library paths into libraries. -hardcode_into_libs=$hardcode_into_libs - -# Flag to hardcode \$libdir into a binary during linking. -# This must work even if \$libdir does not exist. -hardcode_libdir_flag_spec=$lt_hardcode_libdir_flag_spec_RC - -# If ld is used when linking, flag to hardcode \$libdir into -# a binary during linking. This must work even if \$libdir does -# not exist. -hardcode_libdir_flag_spec_ld=$lt_hardcode_libdir_flag_spec_ld_RC - -# Whether we need a single -rpath flag with a separated argument. -hardcode_libdir_separator=$lt_hardcode_libdir_separator_RC - -# Set to yes if using DIR/libNAME${shared_ext} during linking hardcodes DIR into the -# resulting binary. -hardcode_direct=$hardcode_direct_RC - -# Set to yes if using the -LDIR flag during linking hardcodes DIR into the -# resulting binary. -hardcode_minus_L=$hardcode_minus_L_RC - -# Set to yes if using SHLIBPATH_VAR=DIR during linking hardcodes DIR into -# the resulting binary. -hardcode_shlibpath_var=$hardcode_shlibpath_var_RC - -# Set to yes if building a shared library automatically hardcodes DIR into the library -# and all subsequent libraries and executables linked against it. -hardcode_automatic=$hardcode_automatic_RC - -# Variables whose values should be saved in libtool wrapper scripts and -# restored at relink time. -variables_saved_for_relink="$variables_saved_for_relink" - -# Whether libtool must link a program against all its dependency libraries. -link_all_deplibs=$link_all_deplibs_RC - -# Compile-time system search path for libraries -sys_lib_search_path_spec=$lt_sys_lib_search_path_spec - -# Run-time system search path for libraries -sys_lib_dlsearch_path_spec=$lt_sys_lib_dlsearch_path_spec - -# Fix the shell variable \$srcfile for the compiler. -fix_srcfile_path=$lt_fix_srcfile_path - -# Set to yes if exported symbols are required. -always_export_symbols=$always_export_symbols_RC - -# The commands to list exported symbols. -export_symbols_cmds=$lt_export_symbols_cmds_RC - -# The commands to extract the exported symbol list from a shared archive. -extract_expsyms_cmds=$lt_extract_expsyms_cmds - -# Symbols that should not be listed in the preloaded symbols. -exclude_expsyms=$lt_exclude_expsyms_RC - -# Symbols that must always be exported. -include_expsyms=$lt_include_expsyms_RC - -# ### END LIBTOOL TAG CONFIG: $tagname - -__EOF__ - - -else - # If there is no Makefile yet, we rely on a make rule to execute - # `config.status --recheck' to rerun these tests and create the - # libtool script then. - ltmain_in=`echo $ltmain | sed -e 's/\.sh$/.in/'` - if test -f "$ltmain_in"; then - test -f Makefile && make "$ltmain" - fi -fi - - -ac_ext=c -ac_cpp='$CPP $CPPFLAGS' -ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_c_compiler_gnu - -CC="$lt_save_CC" - - ;; - - *) - { { echo "$as_me:$LINENO: error: Unsupported tag name: $tagname" >&5 -echo "$as_me: error: Unsupported tag name: $tagname" >&2;} - { (exit 1); exit 1; }; } - ;; - esac - - # Append the new tag name to the list of available tags. - if test -n "$tagname" ; then - available_tags="$available_tags $tagname" - fi - fi - done - IFS="$lt_save_ifs" - - # Now substitute the updated list of available tags. - if eval "sed -e 's/^available_tags=.*\$/available_tags=\"$available_tags\"/' \"$ofile\" > \"${ofile}T\""; then - mv "${ofile}T" "$ofile" - chmod +x "$ofile" - else - rm -f "${ofile}T" - { { echo "$as_me:$LINENO: error: unable to update list of available tagged configurations." >&5 -echo "$as_me: error: unable to update list of available tagged configurations." >&2;} - { (exit 1); exit 1; }; } - fi -fi - - - -# This can be used to rebuild libtool when needed -LIBTOOL_DEPS="$ac_aux_dir/ltmain.sh" - -# Always use our own libtool. -LIBTOOL='$(SHELL) $(top_builddir)/libtool' - -# Prevent multiple expansion - - - - - - - - - - - - - - - - - - - - - -{ echo "$as_me:$LINENO: checking whether to enable maintainer-specific portions of Makefiles" >&5 -echo $ECHO_N "checking whether to enable maintainer-specific portions of Makefiles... $ECHO_C" >&6; } - # Check whether --enable-maintainer-mode was given. -if test "${enable_maintainer_mode+set}" = set; then - enableval=$enable_maintainer_mode; USE_MAINTAINER_MODE=$enableval -else - USE_MAINTAINER_MODE=no -fi - - { echo "$as_me:$LINENO: result: $USE_MAINTAINER_MODE" >&5 -echo "${ECHO_T}$USE_MAINTAINER_MODE" >&6; } - if test $USE_MAINTAINER_MODE = yes; then - MAINTAINER_MODE_TRUE= - MAINTAINER_MODE_FALSE='#' -else - MAINTAINER_MODE_TRUE='#' - MAINTAINER_MODE_FALSE= -fi - - MAINT=$MAINTAINER_MODE_TRUE - - - - -for ac_header in sys/mman.h -do -as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh` -if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then - { echo "$as_me:$LINENO: checking for $ac_header" >&5 -echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6; } -if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -fi -ac_res=`eval echo '${'$as_ac_Header'}'` - { echo "$as_me:$LINENO: result: $ac_res" >&5 -echo "${ECHO_T}$ac_res" >&6; } -else - # Is the header compilable? -{ echo "$as_me:$LINENO: checking $ac_header usability" >&5 -echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6; } -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default -#include <$ac_header> -_ACEOF -rm -f conftest.$ac_objext -if { (ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then - ac_header_compiler=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_header_compiler=no -fi - -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -{ echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 -echo "${ECHO_T}$ac_header_compiler" >&6; } - -# Is the header present? -{ echo "$as_me:$LINENO: checking $ac_header presence" >&5 -echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6; } -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -#include <$ac_header> -_ACEOF -if { (ac_try="$ac_cpp conftest.$ac_ext" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } >/dev/null && { - test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || - test ! -s conftest.err - }; then - ac_header_preproc=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_header_preproc=no -fi - -rm -f conftest.err conftest.$ac_ext -{ echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 -echo "${ECHO_T}$ac_header_preproc" >&6; } - -# So? What about this header? -case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in - yes:no: ) - { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5 -echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5 -echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;} - ac_header_preproc=yes - ;; - no:yes:* ) - { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5 -echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: check for missing prerequisite headers?" >&5 -echo "$as_me: WARNING: $ac_header: check for missing prerequisite headers?" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5 -echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&5 -echo "$as_me: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5 -echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5 -echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;} - ( cat <<\_ASBOX -## ------------------------------------------- ## -## Report this to http://gcc.gnu.org/bugs.html ## -## ------------------------------------------- ## -_ASBOX - ) | sed "s/^/$as_me: WARNING: /" >&2 - ;; -esac -{ echo "$as_me:$LINENO: checking for $ac_header" >&5 -echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6; } -if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - eval "$as_ac_Header=\$ac_header_preproc" -fi -ac_res=`eval echo '${'$as_ac_Header'}'` - { echo "$as_me:$LINENO: result: $ac_res" >&5 -echo "${ECHO_T}$ac_res" >&6; } - -fi -if test `eval echo '${'$as_ac_Header'}'` = yes; then - cat >>confdefs.h <<_ACEOF -#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1 -_ACEOF - -fi - -done - - -for ac_func in mmap -do -as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh` -{ echo "$as_me:$LINENO: checking for $ac_func" >&5 -echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6; } -if { as_var=$as_ac_var; eval "test \"\${$as_var+set}\" = set"; }; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -/* Define $ac_func to an innocuous variant, in case declares $ac_func. - For example, HP-UX 11i declares gettimeofday. */ -#define $ac_func innocuous_$ac_func - -/* System header to define __stub macros and hopefully few prototypes, - which can conflict with char $ac_func (); below. - Prefer to if __STDC__ is defined, since - exists even on freestanding compilers. */ - -#ifdef __STDC__ -# include -#else -# include -#endif - -#undef $ac_func - -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char $ac_func (); -/* The GNU C library defines this for functions which it implements - to always fail with ENOSYS. Some functions are actually named - something starting with __ and the normal name is an alias. */ -#if defined __stub_$ac_func || defined __stub___$ac_func -choke me -#endif - -int -main () -{ -return $ac_func (); - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext conftest$ac_exeext -if { (ac_try="$ac_link" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_link") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest$ac_exeext && - $as_test_x conftest$ac_exeext; then - eval "$as_ac_var=yes" -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - eval "$as_ac_var=no" -fi - -rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ - conftest$ac_exeext conftest.$ac_ext -fi -ac_res=`eval echo '${'$as_ac_var'}'` - { echo "$as_me:$LINENO: result: $ac_res" >&5 -echo "${ECHO_T}$ac_res" >&6; } -if test `eval echo '${'$as_ac_var'}'` = yes; then - cat >>confdefs.h <<_ACEOF -#define `echo "HAVE_$ac_func" | $as_tr_cpp` 1 -_ACEOF - -fi -done - - -if test "${ac_cv_header_sys_mman_h+set}" = set; then - { echo "$as_me:$LINENO: checking for sys/mman.h" >&5 -echo $ECHO_N "checking for sys/mman.h... $ECHO_C" >&6; } -if test "${ac_cv_header_sys_mman_h+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -fi -{ echo "$as_me:$LINENO: result: $ac_cv_header_sys_mman_h" >&5 -echo "${ECHO_T}$ac_cv_header_sys_mman_h" >&6; } -else - # Is the header compilable? -{ echo "$as_me:$LINENO: checking sys/mman.h usability" >&5 -echo $ECHO_N "checking sys/mman.h usability... $ECHO_C" >&6; } -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default -#include -_ACEOF -rm -f conftest.$ac_objext -if { (ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then - ac_header_compiler=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_header_compiler=no -fi - -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -{ echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 -echo "${ECHO_T}$ac_header_compiler" >&6; } - -# Is the header present? -{ echo "$as_me:$LINENO: checking sys/mman.h presence" >&5 -echo $ECHO_N "checking sys/mman.h presence... $ECHO_C" >&6; } -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -#include -_ACEOF -if { (ac_try="$ac_cpp conftest.$ac_ext" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } >/dev/null && { - test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || - test ! -s conftest.err - }; then - ac_header_preproc=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_header_preproc=no -fi - -rm -f conftest.err conftest.$ac_ext -{ echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 -echo "${ECHO_T}$ac_header_preproc" >&6; } - -# So? What about this header? -case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in - yes:no: ) - { echo "$as_me:$LINENO: WARNING: sys/mman.h: accepted by the compiler, rejected by the preprocessor!" >&5 -echo "$as_me: WARNING: sys/mman.h: accepted by the compiler, rejected by the preprocessor!" >&2;} - { echo "$as_me:$LINENO: WARNING: sys/mman.h: proceeding with the compiler's result" >&5 -echo "$as_me: WARNING: sys/mman.h: proceeding with the compiler's result" >&2;} - ac_header_preproc=yes - ;; - no:yes:* ) - { echo "$as_me:$LINENO: WARNING: sys/mman.h: present but cannot be compiled" >&5 -echo "$as_me: WARNING: sys/mman.h: present but cannot be compiled" >&2;} - { echo "$as_me:$LINENO: WARNING: sys/mman.h: check for missing prerequisite headers?" >&5 -echo "$as_me: WARNING: sys/mman.h: check for missing prerequisite headers?" >&2;} - { echo "$as_me:$LINENO: WARNING: sys/mman.h: see the Autoconf documentation" >&5 -echo "$as_me: WARNING: sys/mman.h: see the Autoconf documentation" >&2;} - { echo "$as_me:$LINENO: WARNING: sys/mman.h: section \"Present But Cannot Be Compiled\"" >&5 -echo "$as_me: WARNING: sys/mman.h: section \"Present But Cannot Be Compiled\"" >&2;} - { echo "$as_me:$LINENO: WARNING: sys/mman.h: proceeding with the preprocessor's result" >&5 -echo "$as_me: WARNING: sys/mman.h: proceeding with the preprocessor's result" >&2;} - { echo "$as_me:$LINENO: WARNING: sys/mman.h: in the future, the compiler will take precedence" >&5 -echo "$as_me: WARNING: sys/mman.h: in the future, the compiler will take precedence" >&2;} - ( cat <<\_ASBOX -## ------------------------------------------- ## -## Report this to http://gcc.gnu.org/bugs.html ## -## ------------------------------------------- ## -_ASBOX - ) | sed "s/^/$as_me: WARNING: /" >&2 - ;; -esac -{ echo "$as_me:$LINENO: checking for sys/mman.h" >&5 -echo $ECHO_N "checking for sys/mman.h... $ECHO_C" >&6; } -if test "${ac_cv_header_sys_mman_h+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - ac_cv_header_sys_mman_h=$ac_header_preproc -fi -{ echo "$as_me:$LINENO: result: $ac_cv_header_sys_mman_h" >&5 -echo "${ECHO_T}$ac_cv_header_sys_mman_h" >&6; } - -fi -if test $ac_cv_header_sys_mman_h = yes; then - libffi_header_sys_mman_h=yes -else - libffi_header_sys_mman_h=no -fi - - -{ echo "$as_me:$LINENO: checking for mmap" >&5 -echo $ECHO_N "checking for mmap... $ECHO_C" >&6; } -if test "${ac_cv_func_mmap+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -/* Define mmap to an innocuous variant, in case declares mmap. - For example, HP-UX 11i declares gettimeofday. */ -#define mmap innocuous_mmap - -/* System header to define __stub macros and hopefully few prototypes, - which can conflict with char mmap (); below. - Prefer to if __STDC__ is defined, since - exists even on freestanding compilers. */ - -#ifdef __STDC__ -# include -#else -# include -#endif - -#undef mmap - -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char mmap (); -/* The GNU C library defines this for functions which it implements - to always fail with ENOSYS. Some functions are actually named - something starting with __ and the normal name is an alias. */ -#if defined __stub_mmap || defined __stub___mmap -choke me -#endif - -int -main () -{ -return mmap (); - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext conftest$ac_exeext -if { (ac_try="$ac_link" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_link") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest$ac_exeext && - $as_test_x conftest$ac_exeext; then - ac_cv_func_mmap=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_cv_func_mmap=no -fi - -rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ - conftest$ac_exeext conftest.$ac_ext -fi -{ echo "$as_me:$LINENO: result: $ac_cv_func_mmap" >&5 -echo "${ECHO_T}$ac_cv_func_mmap" >&6; } -if test $ac_cv_func_mmap = yes; then - libffi_func_mmap=yes -else - libffi_func_mmap=no -fi - -if test "$libffi_header_sys_mman_h" != yes \ - || test "$libffi_func_mmap" != yes; then - ac_cv_func_mmap_file=no - ac_cv_func_mmap_dev_zero=no - ac_cv_func_mmap_anon=no -else - { echo "$as_me:$LINENO: checking whether read-only mmap of a plain file works" >&5 -echo $ECHO_N "checking whether read-only mmap of a plain file works... $ECHO_C" >&6; } -if test "${ac_cv_func_mmap_file+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - # Add a system to this blacklist if - # mmap(0, stat_size, PROT_READ, MAP_PRIVATE, fd, 0) doesn't return a - # memory area containing the same data that you'd get if you applied - # read() to the same fd. The only system known to have a problem here - # is VMS, where text files have record structure. - case "$host_os" in - vms* | ultrix*) - ac_cv_func_mmap_file=no ;; - *) - ac_cv_func_mmap_file=yes;; - esac -fi -{ echo "$as_me:$LINENO: result: $ac_cv_func_mmap_file" >&5 -echo "${ECHO_T}$ac_cv_func_mmap_file" >&6; } - { echo "$as_me:$LINENO: checking whether mmap from /dev/zero works" >&5 -echo $ECHO_N "checking whether mmap from /dev/zero works... $ECHO_C" >&6; } -if test "${ac_cv_func_mmap_dev_zero+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - # Add a system to this blacklist if it has mmap() but /dev/zero - # does not exist, or if mmapping /dev/zero does not give anonymous - # zeroed pages with both the following properties: - # 1. If you map N consecutive pages in with one call, and then - # unmap any subset of those pages, the pages that were not - # explicitly unmapped remain accessible. - # 2. If you map two adjacent blocks of memory and then unmap them - # both at once, they must both go away. - # Systems known to be in this category are Windows (all variants), - # VMS, and Darwin. - case "$host_os" in - vms* | cygwin* | pe | mingw* | darwin* | ultrix* | hpux10* | hpux11.00) - ac_cv_func_mmap_dev_zero=no ;; - *) - ac_cv_func_mmap_dev_zero=yes;; - esac -fi -{ echo "$as_me:$LINENO: result: $ac_cv_func_mmap_dev_zero" >&5 -echo "${ECHO_T}$ac_cv_func_mmap_dev_zero" >&6; } - - # Unlike /dev/zero, the MAP_ANON(YMOUS) defines can be probed for. - { echo "$as_me:$LINENO: checking for MAP_ANON(YMOUS)" >&5 -echo $ECHO_N "checking for MAP_ANON(YMOUS)... $ECHO_C" >&6; } -if test "${ac_cv_decl_map_anon+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -#include -#include -#include - -#ifndef MAP_ANONYMOUS -#define MAP_ANONYMOUS MAP_ANON -#endif - -int -main () -{ -int n = MAP_ANONYMOUS; - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then - ac_cv_decl_map_anon=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_cv_decl_map_anon=no -fi - -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -fi -{ echo "$as_me:$LINENO: result: $ac_cv_decl_map_anon" >&5 -echo "${ECHO_T}$ac_cv_decl_map_anon" >&6; } - - if test $ac_cv_decl_map_anon = no; then - ac_cv_func_mmap_anon=no - else - { echo "$as_me:$LINENO: checking whether mmap with MAP_ANON(YMOUS) works" >&5 -echo $ECHO_N "checking whether mmap with MAP_ANON(YMOUS) works... $ECHO_C" >&6; } -if test "${ac_cv_func_mmap_anon+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - # Add a system to this blacklist if it has mmap() and MAP_ANON or - # MAP_ANONYMOUS, but using mmap(..., MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) - # doesn't give anonymous zeroed pages with the same properties listed - # above for use of /dev/zero. - # Systems known to be in this category are Windows, VMS, and SCO Unix. - case "$host_os" in - vms* | cygwin* | pe | mingw* | sco* | udk* ) - ac_cv_func_mmap_anon=no ;; - *) - ac_cv_func_mmap_anon=yes;; - esac -fi -{ echo "$as_me:$LINENO: result: $ac_cv_func_mmap_anon" >&5 -echo "${ECHO_T}$ac_cv_func_mmap_anon" >&6; } - fi -fi - -if test $ac_cv_func_mmap_file = yes; then - -cat >>confdefs.h <<\_ACEOF -#define HAVE_MMAP_FILE 1 -_ACEOF - -fi -if test $ac_cv_func_mmap_dev_zero = yes; then - -cat >>confdefs.h <<\_ACEOF -#define HAVE_MMAP_DEV_ZERO 1 -_ACEOF - -fi -if test $ac_cv_func_mmap_anon = yes; then - -cat >>confdefs.h <<\_ACEOF -#define HAVE_MMAP_ANON 1 -_ACEOF - -fi - - - if test -d $srcdir/testsuite; then - TESTSUBDIR_TRUE= - TESTSUBDIR_FALSE='#' -else - TESTSUBDIR_TRUE='#' - TESTSUBDIR_FALSE= -fi - - -TARGETDIR="unknown" -case "$host" in - alpha*-*-*) - TARGET=ALPHA; TARGETDIR=alpha; - # Support 128-bit long double, changable via command-line switch. - HAVE_LONG_DOUBLE='defined(__LONG_DOUBLE_128__)' - ;; - - arm*-*-*) - TARGET=ARM; TARGETDIR=arm - ;; - - amd64-*-freebsd*) - TARGET=X86_64; TARGETDIR=x86 - ;; - - cris-*-*) - TARGET=LIBFFI_CRIS; TARGETDIR=cris - ;; - - frv-*-*) - TARGET=FRV; TARGETDIR=frv - ;; - - hppa*-*-linux* | parisc*-*-linux*) - TARGET=PA_LINUX; TARGETDIR=pa - ;; - hppa*64-*-hpux*) - TARGET=PA64_HPUX; TARGETDIR=pa - ;; - hppa*-*-hpux*) - TARGET=PA_HPUX; TARGETDIR=pa - ;; - - i386-*-freebsd* | i386-*-openbsd*) - TARGET=X86_FREEBSD; TARGETDIR=x86 - ;; - i?86-win32* | i?86-*-cygwin* | i?86-*-mingw*) - TARGET=X86_WIN32; TARGETDIR=x86 - ;; - i?86-*-darwin*) - TARGET=X86_DARWIN; TARGETDIR=x86 - ;; - i?86-*-solaris2.1[0-9]*) - TARGET=X86_64; TARGETDIR=x86 - ;; - i*86-*-nto-qnx*) - TARGET=X86; TARGETDIR=x86 - ;; - i?86-*-*) - TARGET=X86; TARGETDIR=x86 - ;; - - ia64*-*-*) - TARGET=IA64; TARGETDIR=ia64 - ;; - - m32r*-*-*) - TARGET=M32R; TARGETDIR=m32r - ;; - - m68k-*-*) - TARGET=M68K; TARGETDIR=m68k - ;; - - mips-sgi-irix5.* | mips-sgi-irix6.*) - TARGET=MIPS_IRIX; TARGETDIR=mips - ;; - mips*-*-linux*) - TARGET=MIPS_LINUX; TARGETDIR=mips - ;; - - powerpc*-*-linux* | powerpc-*-sysv*) - TARGET=POWERPC; TARGETDIR=powerpc - ;; - powerpc-*-beos*) - TARGET=POWERPC; TARGETDIR=powerpc - ;; - powerpc-*-darwin*) - TARGET=POWERPC_DARWIN; TARGETDIR=powerpc - ;; - powerpc-*-aix* | rs6000-*-aix*) - TARGET=POWERPC_AIX; TARGETDIR=powerpc - ;; - powerpc-*-freebsd*) - TARGET=POWERPC_FREEBSD; TARGETDIR=powerpc - ;; - powerpc*-*-rtems*) - TARGET=POWERPC; TARGETDIR=powerpc - ;; - - s390-*-* | s390x-*-*) - TARGET=S390; TARGETDIR=s390 - ;; - - sh-*-* | sh[34]*-*-*) - TARGET=SH; TARGETDIR=sh - ;; - sh64-*-* | sh5*-*-*) - TARGET=SH64; TARGETDIR=sh64 - ;; - - sparc*-*-*) - TARGET=SPARC; TARGETDIR=sparc - ;; - - x86_64-*-darwin*) - TARGET=X86_DARWIN; TARGETDIR=x86 - ;; - x86_64-*-cygwin* | x86_64-*-mingw*) - ;; - x86_64-*-*) - TARGET=X86_64; TARGETDIR=x86 - ;; -esac - - - -if test $TARGETDIR = unknown; then - { { echo "$as_me:$LINENO: error: \"libffi has not been ported to $host.\"" >&5 -echo "$as_me: error: \"libffi has not been ported to $host.\"" >&2;} - { (exit 1); exit 1; }; } -fi - - if expr x$TARGET : 'xMIPS' > /dev/null; then - MIPS_TRUE= - MIPS_FALSE='#' -else - MIPS_TRUE='#' - MIPS_FALSE= -fi - - if test x$TARGET = xSPARC; then - SPARC_TRUE= - SPARC_FALSE='#' -else - SPARC_TRUE='#' - SPARC_FALSE= -fi - - if test x$TARGET = xX86; then - X86_TRUE= - X86_FALSE='#' -else - X86_TRUE='#' - X86_FALSE= -fi - - if test x$TARGET = xX86_FREEBSD; then - X86_FREEBSD_TRUE= - X86_FREEBSD_FALSE='#' -else - X86_FREEBSD_TRUE='#' - X86_FREEBSD_FALSE= -fi - - if test x$TARGET = xX86_WIN32; then - X86_WIN32_TRUE= - X86_WIN32_FALSE='#' -else - X86_WIN32_TRUE='#' - X86_WIN32_FALSE= -fi - - if test x$TARGET = xX86_DARWIN; then - X86_DARWIN_TRUE= - X86_DARWIN_FALSE='#' -else - X86_DARWIN_TRUE='#' - X86_DARWIN_FALSE= -fi - - if test x$TARGET = xALPHA; then - ALPHA_TRUE= - ALPHA_FALSE='#' -else - ALPHA_TRUE='#' - ALPHA_FALSE= -fi - - if test x$TARGET = xIA64; then - IA64_TRUE= - IA64_FALSE='#' -else - IA64_TRUE='#' - IA64_FALSE= -fi - - if test x$TARGET = xM32R; then - M32R_TRUE= - M32R_FALSE='#' -else - M32R_TRUE='#' - M32R_FALSE= -fi - - if test x$TARGET = xM68K; then - M68K_TRUE= - M68K_FALSE='#' -else - M68K_TRUE='#' - M68K_FALSE= -fi - - if test x$TARGET = xPOWERPC; then - POWERPC_TRUE= - POWERPC_FALSE='#' -else - POWERPC_TRUE='#' - POWERPC_FALSE= -fi - - if test x$TARGET = xPOWERPC_AIX; then - POWERPC_AIX_TRUE= - POWERPC_AIX_FALSE='#' -else - POWERPC_AIX_TRUE='#' - POWERPC_AIX_FALSE= -fi - - if test x$TARGET = xPOWERPC_DARWIN; then - POWERPC_DARWIN_TRUE= - POWERPC_DARWIN_FALSE='#' -else - POWERPC_DARWIN_TRUE='#' - POWERPC_DARWIN_FALSE= -fi - - if test x$TARGET = xPOWERPC_FREEBSD; then - POWERPC_FREEBSD_TRUE= - POWERPC_FREEBSD_FALSE='#' -else - POWERPC_FREEBSD_TRUE='#' - POWERPC_FREEBSD_FALSE= -fi - - if test x$TARGET = xARM; then - ARM_TRUE= - ARM_FALSE='#' -else - ARM_TRUE='#' - ARM_FALSE= -fi - - if test x$TARGET = xLIBFFI_CRIS; then - LIBFFI_CRIS_TRUE= - LIBFFI_CRIS_FALSE='#' -else - LIBFFI_CRIS_TRUE='#' - LIBFFI_CRIS_FALSE= -fi - - if test x$TARGET = xFRV; then - FRV_TRUE= - FRV_FALSE='#' -else - FRV_TRUE='#' - FRV_FALSE= -fi - - if test x$TARGET = xS390; then - S390_TRUE= - S390_FALSE='#' -else - S390_TRUE='#' - S390_FALSE= -fi - - if test x$TARGET = xX86_64; then - X86_64_TRUE= - X86_64_FALSE='#' -else - X86_64_TRUE='#' - X86_64_FALSE= -fi - - if test x$TARGET = xSH; then - SH_TRUE= - SH_FALSE='#' -else - SH_TRUE='#' - SH_FALSE= -fi - - if test x$TARGET = xSH64; then - SH64_TRUE= - SH64_FALSE='#' -else - SH64_TRUE='#' - SH64_FALSE= -fi - - if test x$TARGET = xPA_LINUX; then - PA_LINUX_TRUE= - PA_LINUX_FALSE='#' -else - PA_LINUX_TRUE='#' - PA_LINUX_FALSE= -fi - - if test x$TARGET = xPA_HPUX; then - PA_HPUX_TRUE= - PA_HPUX_FALSE='#' -else - PA_HPUX_TRUE='#' - PA_HPUX_FALSE= -fi - - if test x$TARGET = xPA64_HPUX; then - PA64_HPUX_TRUE= - PA64_HPUX_FALSE='#' -else - PA64_HPUX_TRUE='#' - PA64_HPUX_FALSE= -fi - - -{ echo "$as_me:$LINENO: checking for ANSI C header files" >&5 -echo $ECHO_N "checking for ANSI C header files... $ECHO_C" >&6; } -if test "${ac_cv_header_stdc+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -#include -#include -#include -#include - -int -main () -{ - - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then - ac_cv_header_stdc=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_cv_header_stdc=no -fi - -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - -if test $ac_cv_header_stdc = yes; then - # SunOS 4.x string.h does not declare mem*, contrary to ANSI. - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -#include - -_ACEOF -if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | - $EGREP "memchr" >/dev/null 2>&1; then - : -else - ac_cv_header_stdc=no -fi -rm -f conftest* - -fi - -if test $ac_cv_header_stdc = yes; then - # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI. - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -#include - -_ACEOF -if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | - $EGREP "free" >/dev/null 2>&1; then - : +ac_fn_c_check_func "$LINENO" "mmap" "ac_cv_func_mmap" +if test "x$ac_cv_func_mmap" = x""yes; then : + libffi_func_mmap=yes else - ac_cv_header_stdc=no -fi -rm -f conftest* - + libffi_func_mmap=no fi -if test $ac_cv_header_stdc = yes; then - # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi. - if test "$cross_compiling" = yes; then - : +if test "$libffi_header_sys_mman_h" != yes \ + || test "$libffi_func_mmap" != yes; then + ac_cv_func_mmap_file=no + ac_cv_func_mmap_dev_zero=no + ac_cv_func_mmap_anon=no else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -#include -#include -#if ((' ' & 0x0FF) == 0x020) -# define ISLOWER(c) ('a' <= (c) && (c) <= 'z') -# define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c)) -#else -# define ISLOWER(c) \ - (('a' <= (c) && (c) <= 'i') \ - || ('j' <= (c) && (c) <= 'r') \ - || ('s' <= (c) && (c) <= 'z')) -# define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c)) -#endif - -#define XOR(e, f) (((e) && !(f)) || (!(e) && (f))) -int -main () -{ - int i; - for (i = 0; i < 256; i++) - if (XOR (islower (i), ISLOWER (i)) - || toupper (i) != TOUPPER (i)) - return 2; - return 0; -} -_ACEOF -rm -f conftest$ac_exeext -if { (ac_try="$ac_link" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_link") 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { ac_try='./conftest$ac_exeext' - { (case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_try") 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - : + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether read-only mmap of a plain file works" >&5 +$as_echo_n "checking whether read-only mmap of a plain file works... " >&6; } +if test "${ac_cv_func_mmap_file+set}" = set; then : + $as_echo_n "(cached) " >&6 else - echo "$as_me: program exited with status $ac_status" >&5 -echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -( exit $ac_status ) -ac_cv_header_stdc=no -fi -rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext -fi - - -fi -fi -{ echo "$as_me:$LINENO: result: $ac_cv_header_stdc" >&5 -echo "${ECHO_T}$ac_cv_header_stdc" >&6; } -if test $ac_cv_header_stdc = yes; then - -cat >>confdefs.h <<\_ACEOF -#define STDC_HEADERS 1 -_ACEOF - + # Add a system to this blacklist if + # mmap(0, stat_size, PROT_READ, MAP_PRIVATE, fd, 0) doesn't return a + # memory area containing the same data that you'd get if you applied + # read() to the same fd. The only system known to have a problem here + # is VMS, where text files have record structure. + case "$host_os" in + vms* | ultrix*) + ac_cv_func_mmap_file=no ;; + *) + ac_cv_func_mmap_file=yes;; + esac fi - - -for ac_func in memcpy -do -as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh` -{ echo "$as_me:$LINENO: checking for $ac_func" >&5 -echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6; } -if { as_var=$as_ac_var; eval "test \"\${$as_var+set}\" = set"; }; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -/* Define $ac_func to an innocuous variant, in case declares $ac_func. - For example, HP-UX 11i declares gettimeofday. */ -#define $ac_func innocuous_$ac_func - -/* System header to define __stub macros and hopefully few prototypes, - which can conflict with char $ac_func (); below. - Prefer to if __STDC__ is defined, since - exists even on freestanding compilers. */ - -#ifdef __STDC__ -# include -#else -# include -#endif - -#undef $ac_func - -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char $ac_func (); -/* The GNU C library defines this for functions which it implements - to always fail with ENOSYS. Some functions are actually named - something starting with __ and the normal name is an alias. */ -#if defined __stub_$ac_func || defined __stub___$ac_func -choke me -#endif - -int -main () -{ -return $ac_func (); - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext conftest$ac_exeext -if { (ac_try="$ac_link" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_link") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest$ac_exeext && - $as_test_x conftest$ac_exeext; then - eval "$as_ac_var=yes" +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_func_mmap_file" >&5 +$as_echo "$ac_cv_func_mmap_file" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether mmap from /dev/zero works" >&5 +$as_echo_n "checking whether mmap from /dev/zero works... " >&6; } +if test "${ac_cv_func_mmap_dev_zero+set}" = set; then : + $as_echo_n "(cached) " >&6 else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - eval "$as_ac_var=no" -fi - -rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ - conftest$ac_exeext conftest.$ac_ext -fi -ac_res=`eval echo '${'$as_ac_var'}'` - { echo "$as_me:$LINENO: result: $ac_res" >&5 -echo "${ECHO_T}$ac_res" >&6; } -if test `eval echo '${'$as_ac_var'}'` = yes; then - cat >>confdefs.h <<_ACEOF -#define `echo "HAVE_$ac_func" | $as_tr_cpp` 1 -_ACEOF - + # Add a system to this blacklist if it has mmap() but /dev/zero + # does not exist, or if mmapping /dev/zero does not give anonymous + # zeroed pages with both the following properties: + # 1. If you map N consecutive pages in with one call, and then + # unmap any subset of those pages, the pages that were not + # explicitly unmapped remain accessible. + # 2. If you map two adjacent blocks of memory and then unmap them + # both at once, they must both go away. + # Systems known to be in this category are Windows (all variants), + # VMS, and Darwin. + case "$host_os" in + vms* | cygwin* | pe | mingw* | darwin* | ultrix* | hpux10* | hpux11.00) + ac_cv_func_mmap_dev_zero=no ;; + *) + ac_cv_func_mmap_dev_zero=yes;; + esac fi -done +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_func_mmap_dev_zero" >&5 +$as_echo "$ac_cv_func_mmap_dev_zero" >&6; } -# The Ultrix 4.2 mips builtin alloca declared by alloca.h only works -# for constant arguments. Useless! -{ echo "$as_me:$LINENO: checking for working alloca.h" >&5 -echo $ECHO_N "checking for working alloca.h... $ECHO_C" >&6; } -if test "${ac_cv_working_alloca_h+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 + # Unlike /dev/zero, the MAP_ANON(YMOUS) defines can be probed for. + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for MAP_ANON(YMOUS)" >&5 +$as_echo_n "checking for MAP_ANON(YMOUS)... " >&6; } +if test "${ac_cv_decl_map_anon+set}" = set; then : + $as_echo_n "(cached) " >&6 else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ -#include +#include +#include +#include + +#ifndef MAP_ANONYMOUS +#define MAP_ANONYMOUS MAP_ANON +#endif + int main () { -char *p = (char *) alloca (2 * sizeof (int)); - if (p) return 0; +int n = MAP_ANONYMOUS; ; return 0; } _ACEOF -rm -f conftest.$ac_objext conftest$ac_exeext -if { (ac_try="$ac_link" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_link") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest$ac_exeext && - $as_test_x conftest$ac_exeext; then - ac_cv_working_alloca_h=yes +if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_decl_map_anon=yes else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_cv_working_alloca_h=no + ac_cv_decl_map_anon=no fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_decl_map_anon" >&5 +$as_echo "$ac_cv_decl_map_anon" >&6; } -rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ - conftest$ac_exeext conftest.$ac_ext + if test $ac_cv_decl_map_anon = no; then + ac_cv_func_mmap_anon=no + else + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether mmap with MAP_ANON(YMOUS) works" >&5 +$as_echo_n "checking whether mmap with MAP_ANON(YMOUS) works... " >&6; } +if test "${ac_cv_func_mmap_anon+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + # Add a system to this blacklist if it has mmap() and MAP_ANON or + # MAP_ANONYMOUS, but using mmap(..., MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) + # doesn't give anonymous zeroed pages with the same properties listed + # above for use of /dev/zero. + # Systems known to be in this category are Windows, VMS, and SCO Unix. + case "$host_os" in + vms* | cygwin* | pe | mingw* | sco* | udk* ) + ac_cv_func_mmap_anon=no ;; + *) + ac_cv_func_mmap_anon=yes;; + esac +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_func_mmap_anon" >&5 +$as_echo "$ac_cv_func_mmap_anon" >&6; } + fi fi -{ echo "$as_me:$LINENO: result: $ac_cv_working_alloca_h" >&5 -echo "${ECHO_T}$ac_cv_working_alloca_h" >&6; } -if test $ac_cv_working_alloca_h = yes; then -cat >>confdefs.h <<\_ACEOF -#define HAVE_ALLOCA_H 1 -_ACEOF +if test $ac_cv_func_mmap_file = yes; then + +$as_echo "#define HAVE_MMAP_FILE 1" >>confdefs.h fi +if test $ac_cv_func_mmap_dev_zero = yes; then -{ echo "$as_me:$LINENO: checking for alloca" >&5 -echo $ECHO_N "checking for alloca... $ECHO_C" >&6; } -if test "${ac_cv_func_alloca_works+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -#ifdef __GNUC__ -# define alloca __builtin_alloca -#else -# ifdef _MSC_VER -# include -# define alloca _alloca -# else -# ifdef HAVE_ALLOCA_H -# include -# else -# ifdef _AIX - #pragma alloca -# else -# ifndef alloca /* predefined by HP cc +Olibcalls */ -char *alloca (); -# endif -# endif -# endif -# endif -#endif +$as_echo "#define HAVE_MMAP_DEV_ZERO 1" >>confdefs.h -int -main () -{ -char *p = (char *) alloca (1); - if (p) return 0; - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext conftest$ac_exeext -if { (ac_try="$ac_link" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_link") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest$ac_exeext && - $as_test_x conftest$ac_exeext; then - ac_cv_func_alloca_works=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 +fi +if test $ac_cv_func_mmap_anon = yes; then + +$as_echo "#define HAVE_MMAP_ANON 1" >>confdefs.h - ac_cv_func_alloca_works=no fi -rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ - conftest$ac_exeext conftest.$ac_ext + + if test -d $srcdir/testsuite; then + TESTSUBDIR_TRUE= + TESTSUBDIR_FALSE='#' +else + TESTSUBDIR_TRUE='#' + TESTSUBDIR_FALSE= fi -{ echo "$as_me:$LINENO: result: $ac_cv_func_alloca_works" >&5 -echo "${ECHO_T}$ac_cv_func_alloca_works" >&6; } -if test $ac_cv_func_alloca_works = yes; then -cat >>confdefs.h <<\_ACEOF -#define HAVE_ALLOCA 1 -_ACEOF +TARGETDIR="unknown" +case "$host" in + alpha*-*-*) + TARGET=ALPHA; TARGETDIR=alpha; + # Support 128-bit long double, changable via command-line switch. + HAVE_LONG_DOUBLE='defined(__LONG_DOUBLE_128__)' + ;; -else - # The SVR3 libPW and SVR4 libucb both contain incompatible functions -# that cause trouble. Some versions do not even contain alloca or -# contain a buggy version. If you still want to use their alloca, -# use ar to extract alloca.o from them instead of compiling alloca.c. + arm*-*-*) + TARGET=ARM; TARGETDIR=arm + ;; -ALLOCA=\${LIBOBJDIR}alloca.$ac_objext + amd64-*-freebsd* | amd64-*-openbsd*) + TARGET=X86_64; TARGETDIR=x86 + ;; -cat >>confdefs.h <<\_ACEOF -#define C_ALLOCA 1 -_ACEOF + avr32*-*-*) + TARGET=AVR32; TARGETDIR=avr32 + ;; + cris-*-*) + TARGET=LIBFFI_CRIS; TARGETDIR=cris + ;; -{ echo "$as_me:$LINENO: checking whether \`alloca.c' needs Cray hooks" >&5 -echo $ECHO_N "checking whether \`alloca.c' needs Cray hooks... $ECHO_C" >&6; } -if test "${ac_cv_os_cray+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -#if defined CRAY && ! defined CRAY2 -webecray -#else -wenotbecray -#endif + frv-*-*) + TARGET=FRV; TARGETDIR=frv + ;; -_ACEOF -if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | - $EGREP "webecray" >/dev/null 2>&1; then - ac_cv_os_cray=yes -else - ac_cv_os_cray=no -fi -rm -f conftest* + hppa*-*-linux* | parisc*-*-linux*) + TARGET=PA_LINUX; TARGETDIR=pa + ;; + hppa*64-*-hpux*) + TARGET=PA64_HPUX; TARGETDIR=pa + ;; + hppa*-*-hpux*) + TARGET=PA_HPUX; TARGETDIR=pa + ;; -fi -{ echo "$as_me:$LINENO: result: $ac_cv_os_cray" >&5 -echo "${ECHO_T}$ac_cv_os_cray" >&6; } -if test $ac_cv_os_cray = yes; then - for ac_func in _getb67 GETB67 getb67; do - as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh` -{ echo "$as_me:$LINENO: checking for $ac_func" >&5 -echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6; } -if { as_var=$as_ac_var; eval "test \"\${$as_var+set}\" = set"; }; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -/* Define $ac_func to an innocuous variant, in case declares $ac_func. - For example, HP-UX 11i declares gettimeofday. */ -#define $ac_func innocuous_$ac_func + i?86-*-freebsd* | i?86-*-openbsd*) + TARGET=X86_FREEBSD; TARGETDIR=x86 + ;; + i?86-win32* | i?86-*-cygwin* | i?86-*-mingw*) + TARGET=X86_WIN32; TARGETDIR=x86 + # All mingw/cygwin/win32 builds require this for sharedlib + AM_LTLDFLAGS="-no-undefined" + ;; + i?86-*-darwin*) + TARGET=X86_DARWIN; TARGETDIR=x86 + ;; + i?86-*-solaris2.1[0-9]*) + TARGET=X86_64; TARGETDIR=x86 + ;; + i*86-*-nto-qnx*) + TARGET=X86; TARGETDIR=x86 + ;; + i?86-*-*) + TARGET=X86; TARGETDIR=x86 + ;; -/* System header to define __stub macros and hopefully few prototypes, - which can conflict with char $ac_func (); below. - Prefer to if __STDC__ is defined, since - exists even on freestanding compilers. */ + ia64*-*-*) + TARGET=IA64; TARGETDIR=ia64 + ;; -#ifdef __STDC__ -# include -#else -# include -#endif + m32r*-*-*) + TARGET=M32R; TARGETDIR=m32r + ;; + + m68k-*-*) + TARGET=M68K; TARGETDIR=m68k + ;; -#undef $ac_func + mips-sgi-irix5.* | mips-sgi-irix6.*) + TARGET=MIPS_IRIX; TARGETDIR=mips + ;; + mips*-*-linux*) + # Support 128-bit long double for NewABI. + HAVE_LONG_DOUBLE='defined(__mips64)' + TARGET=MIPS_IRIX; TARGETDIR=mips + ;; -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char $ac_func (); -/* The GNU C library defines this for functions which it implements - to always fail with ENOSYS. Some functions are actually named - something starting with __ and the normal name is an alias. */ -#if defined __stub_$ac_func || defined __stub___$ac_func -choke me -#endif + powerpc*-*-linux* | powerpc-*-sysv*) + TARGET=POWERPC; TARGETDIR=powerpc + ;; + powerpc-*-beos*) + TARGET=POWERPC; TARGETDIR=powerpc + ;; + powerpc-*-darwin*) + TARGET=POWERPC_DARWIN; TARGETDIR=powerpc + ;; + powerpc-*-aix* | rs6000-*-aix*) + TARGET=POWERPC_AIX; TARGETDIR=powerpc + ;; + powerpc-*-freebsd*) + TARGET=POWERPC_FREEBSD; TARGETDIR=powerpc + ;; + powerpc*-*-rtems*) + TARGET=POWERPC; TARGETDIR=powerpc + ;; -int -main () -{ -return $ac_func (); - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext conftest$ac_exeext -if { (ac_try="$ac_link" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; + s390-*-* | s390x-*-*) + TARGET=S390; TARGETDIR=s390 + ;; + + sh-*-* | sh[34]*-*-*) + TARGET=SH; TARGETDIR=sh + ;; + sh64-*-* | sh5*-*-*) + TARGET=SH64; TARGETDIR=sh64 + ;; + + sparc*-*-*) + TARGET=SPARC; TARGETDIR=sparc + ;; + + x86_64-*-darwin*) + TARGET=X86_DARWIN; TARGETDIR=x86 + ;; + + x86_64-*-cygwin* | x86_64-*-mingw*) + TARGET=X86_WIN64; TARGETDIR=x86 + ;; + + x86_64-*-*) + TARGET=X86_64; TARGETDIR=x86 + ;; esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_link") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest$ac_exeext && - $as_test_x conftest$ac_exeext; then - eval "$as_ac_var=yes" -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - eval "$as_ac_var=no" -fi -rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ - conftest$ac_exeext conftest.$ac_ext -fi -ac_res=`eval echo '${'$as_ac_var'}'` - { echo "$as_me:$LINENO: result: $ac_res" >&5 -echo "${ECHO_T}$ac_res" >&6; } -if test `eval echo '${'$as_ac_var'}'` = yes; then -cat >>confdefs.h <<_ACEOF -#define CRAY_STACKSEG_END $ac_func -_ACEOF - break +if test $TARGETDIR = unknown; then + as_fn_error "\"libffi has not been ported to $host.\"" "$LINENO" 5 fi - done + if expr x$TARGET : 'xMIPS' > /dev/null; then + MIPS_TRUE= + MIPS_FALSE='#' +else + MIPS_TRUE='#' + MIPS_FALSE= fi -{ echo "$as_me:$LINENO: checking stack direction for C alloca" >&5 -echo $ECHO_N "checking stack direction for C alloca... $ECHO_C" >&6; } -if test "${ac_cv_c_stack_direction+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - if test "$cross_compiling" = yes; then - ac_cv_c_stack_direction=0 + if test x$TARGET = xSPARC; then + SPARC_TRUE= + SPARC_FALSE='#' else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default -int -find_stack_direction () -{ - static char *addr = 0; - auto char dummy; - if (addr == 0) - { - addr = &dummy; - return find_stack_direction (); - } - else - return (&dummy > addr) ? 1 : -1; -} + SPARC_TRUE='#' + SPARC_FALSE= +fi -int -main () -{ - return find_stack_direction () < 0; -} -_ACEOF -rm -f conftest$ac_exeext -if { (ac_try="$ac_link" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_link") 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { ac_try='./conftest$ac_exeext' - { (case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_try") 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_cv_c_stack_direction=1 + if test x$TARGET = xX86; then + X86_TRUE= + X86_FALSE='#' else - echo "$as_me: program exited with status $ac_status" >&5 -echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -( exit $ac_status ) -ac_cv_c_stack_direction=-1 -fi -rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext + X86_TRUE='#' + X86_FALSE= fi - + if test x$TARGET = xX86_FREEBSD; then + X86_FREEBSD_TRUE= + X86_FREEBSD_FALSE='#' +else + X86_FREEBSD_TRUE='#' + X86_FREEBSD_FALSE= fi -{ echo "$as_me:$LINENO: result: $ac_cv_c_stack_direction" >&5 -echo "${ECHO_T}$ac_cv_c_stack_direction" >&6; } - -cat >>confdefs.h <<_ACEOF -#define STACK_DIRECTION $ac_cv_c_stack_direction -_ACEOF - + if test x$TARGET = xX86_WIN32; then + X86_WIN32_TRUE= + X86_WIN32_FALSE='#' +else + X86_WIN32_TRUE='#' + X86_WIN32_FALSE= fi - -{ echo "$as_me:$LINENO: checking for double" >&5 -echo $ECHO_N "checking for double... $ECHO_C" >&6; } -if test "${ac_cv_type_double+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 + if test x$TARGET = xX86_WIN64; then + X86_WIN64_TRUE= + X86_WIN64_FALSE='#' else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default -typedef double ac__type_new_; -int -main () -{ -if ((ac__type_new_ *) 0) - return 0; -if (sizeof (ac__type_new_)) - return 0; - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then - ac_cv_type_double=yes + X86_WIN64_TRUE='#' + X86_WIN64_FALSE= +fi + + if test x$TARGET = xX86_DARWIN; then + X86_DARWIN_TRUE= + X86_DARWIN_FALSE='#' else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 + X86_DARWIN_TRUE='#' + X86_DARWIN_FALSE= +fi - ac_cv_type_double=no + if test x$TARGET = xALPHA; then + ALPHA_TRUE= + ALPHA_FALSE='#' +else + ALPHA_TRUE='#' + ALPHA_FALSE= fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + if test x$TARGET = xIA64; then + IA64_TRUE= + IA64_FALSE='#' +else + IA64_TRUE='#' + IA64_FALSE= fi -{ echo "$as_me:$LINENO: result: $ac_cv_type_double" >&5 -echo "${ECHO_T}$ac_cv_type_double" >&6; } -# The cast to long int works around a bug in the HP C Compiler -# version HP92453-01 B.11.11.23709.GP, which incorrectly rejects -# declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'. -# This bug is HP SR number 8606223364. -{ echo "$as_me:$LINENO: checking size of double" >&5 -echo $ECHO_N "checking size of double... $ECHO_C" >&6; } -if test "${ac_cv_sizeof_double+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 + if test x$TARGET = xM32R; then + M32R_TRUE= + M32R_FALSE='#' else - if test "$cross_compiling" = yes; then - # Depending upon the size, compute the lo and hi bounds. -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default - typedef double ac__type_sizeof_; -int -main () -{ -static int test_array [1 - 2 * !(((long int) (sizeof (ac__type_sizeof_))) >= 0)]; -test_array [0] = 0 + M32R_TRUE='#' + M32R_FALSE= +fi - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then - ac_lo=0 ac_mid=0 - while :; do - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default - typedef double ac__type_sizeof_; -int -main () -{ -static int test_array [1 - 2 * !(((long int) (sizeof (ac__type_sizeof_))) <= $ac_mid)]; -test_array [0] = 0 + if test x$TARGET = xM68K; then + M68K_TRUE= + M68K_FALSE='#' +else + M68K_TRUE='#' + M68K_FALSE= +fi - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then - ac_hi=$ac_mid; break + if test x$TARGET = xPOWERPC; then + POWERPC_TRUE= + POWERPC_FALSE='#' else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 + POWERPC_TRUE='#' + POWERPC_FALSE= +fi - ac_lo=`expr $ac_mid + 1` - if test $ac_lo -le $ac_mid; then - ac_lo= ac_hi= - break - fi - ac_mid=`expr 2 '*' $ac_mid + 1` + if test x$TARGET = xPOWERPC_AIX; then + POWERPC_AIX_TRUE= + POWERPC_AIX_FALSE='#' +else + POWERPC_AIX_TRUE='#' + POWERPC_AIX_FALSE= fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - done + if test x$TARGET = xPOWERPC_DARWIN; then + POWERPC_DARWIN_TRUE= + POWERPC_DARWIN_FALSE='#' else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 + POWERPC_DARWIN_TRUE='#' + POWERPC_DARWIN_FALSE= +fi - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default - typedef double ac__type_sizeof_; -int -main () -{ -static int test_array [1 - 2 * !(((long int) (sizeof (ac__type_sizeof_))) < 0)]; -test_array [0] = 0 + if test x$TARGET = xPOWERPC_FREEBSD; then + POWERPC_FREEBSD_TRUE= + POWERPC_FREEBSD_FALSE='#' +else + POWERPC_FREEBSD_TRUE='#' + POWERPC_FREEBSD_FALSE= +fi - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then - ac_hi=-1 ac_mid=-1 - while :; do - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default - typedef double ac__type_sizeof_; -int -main () -{ -static int test_array [1 - 2 * !(((long int) (sizeof (ac__type_sizeof_))) >= $ac_mid)]; -test_array [0] = 0 + if test x$TARGET = xARM; then + ARM_TRUE= + ARM_FALSE='#' +else + ARM_TRUE='#' + ARM_FALSE= +fi - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then - ac_lo=$ac_mid; break + if test x$TARGET = xAVR32; then + AVR32_TRUE= + AVR32_FALSE='#' else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 + AVR32_TRUE='#' + AVR32_FALSE= +fi - ac_hi=`expr '(' $ac_mid ')' - 1` - if test $ac_mid -le $ac_hi; then - ac_lo= ac_hi= - break - fi - ac_mid=`expr 2 '*' $ac_mid` + if test x$TARGET = xLIBFFI_CRIS; then + LIBFFI_CRIS_TRUE= + LIBFFI_CRIS_FALSE='#' +else + LIBFFI_CRIS_TRUE='#' + LIBFFI_CRIS_FALSE= fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - done + if test x$TARGET = xFRV; then + FRV_TRUE= + FRV_FALSE='#' else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 + FRV_TRUE='#' + FRV_FALSE= +fi - ac_lo= ac_hi= + if test x$TARGET = xS390; then + S390_TRUE= + S390_FALSE='#' +else + S390_TRUE='#' + S390_FALSE= fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + if test x$TARGET = xX86_64; then + X86_64_TRUE= + X86_64_FALSE='#' +else + X86_64_TRUE='#' + X86_64_FALSE= fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -# Binary search between lo and hi bounds. -while test "x$ac_lo" != "x$ac_hi"; do - ac_mid=`expr '(' $ac_hi - $ac_lo ')' / 2 + $ac_lo` - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default - typedef double ac__type_sizeof_; -int -main () -{ -static int test_array [1 - 2 * !(((long int) (sizeof (ac__type_sizeof_))) <= $ac_mid)]; -test_array [0] = 0 + if test x$TARGET = xSH; then + SH_TRUE= + SH_FALSE='#' +else + SH_TRUE='#' + SH_FALSE= +fi - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then - ac_hi=$ac_mid + if test x$TARGET = xSH64; then + SH64_TRUE= + SH64_FALSE='#' else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 + SH64_TRUE='#' + SH64_FALSE= +fi - ac_lo=`expr '(' $ac_mid ')' + 1` + if test x$TARGET = xPA_LINUX; then + PA_LINUX_TRUE= + PA_LINUX_FALSE='#' +else + PA_LINUX_TRUE='#' + PA_LINUX_FALSE= fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -done -case $ac_lo in -?*) ac_cv_sizeof_double=$ac_lo;; -'') if test "$ac_cv_type_double" = yes; then - { { echo "$as_me:$LINENO: error: cannot compute sizeof (double) -See \`config.log' for more details." >&5 -echo "$as_me: error: cannot compute sizeof (double) -See \`config.log' for more details." >&2;} - { (exit 77); exit 77; }; } - else - ac_cv_sizeof_double=0 - fi ;; -esac + if test x$TARGET = xPA_HPUX; then + PA_HPUX_TRUE= + PA_HPUX_FALSE='#' else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF + PA_HPUX_TRUE='#' + PA_HPUX_FALSE= +fi + + if test x$TARGET = xPA64_HPUX; then + PA64_HPUX_TRUE= + PA64_HPUX_FALSE='#' +else + PA64_HPUX_TRUE='#' + PA64_HPUX_FALSE= +fi + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for ANSI C header files" >&5 +$as_echo_n "checking for ANSI C header files... " >&6; } +if test "${ac_cv_header_stdc+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ -$ac_includes_default - typedef double ac__type_sizeof_; -static long int longval () { return (long int) (sizeof (ac__type_sizeof_)); } -static unsigned long int ulongval () { return (long int) (sizeof (ac__type_sizeof_)); } -#include #include +#include +#include +#include + int main () { - FILE *f = fopen ("conftest.val", "w"); - if (! f) - return 1; - if (((long int) (sizeof (ac__type_sizeof_))) < 0) - { - long int i = longval (); - if (i != ((long int) (sizeof (ac__type_sizeof_)))) - return 1; - fprintf (f, "%ld\n", i); - } - else - { - unsigned long int i = ulongval (); - if (i != ((long int) (sizeof (ac__type_sizeof_)))) - return 1; - fprintf (f, "%lu\n", i); - } - return ferror (f) || fclose (f) != 0; - ; return 0; } _ACEOF -rm -f conftest$ac_exeext -if { (ac_try="$ac_link" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_link") 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { ac_try='./conftest$ac_exeext' - { (case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_try") 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_cv_sizeof_double=`cat conftest.val` +if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_header_stdc=yes else - echo "$as_me: program exited with status $ac_status" >&5 -echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -( exit $ac_status ) -if test "$ac_cv_type_double" = yes; then - { { echo "$as_me:$LINENO: error: cannot compute sizeof (double) -See \`config.log' for more details." >&5 -echo "$as_me: error: cannot compute sizeof (double) -See \`config.log' for more details." >&2;} - { (exit 77); exit 77; }; } - else - ac_cv_sizeof_double=0 - fi -fi -rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext + ac_cv_header_stdc=no fi -rm -f conftest.val +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + +if test $ac_cv_header_stdc = yes; then + # SunOS 4.x string.h does not declare mem*, contrary to ANSI. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include + +_ACEOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP "memchr" >/dev/null 2>&1; then : + +else + ac_cv_header_stdc=no fi -{ echo "$as_me:$LINENO: result: $ac_cv_sizeof_double" >&5 -echo "${ECHO_T}$ac_cv_sizeof_double" >&6; } +rm -f conftest* +fi +if test $ac_cv_header_stdc = yes; then + # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include -cat >>confdefs.h <<_ACEOF -#define SIZEOF_DOUBLE $ac_cv_sizeof_double _ACEOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP "free" >/dev/null 2>&1; then : + +else + ac_cv_header_stdc=no +fi +rm -f conftest* +fi -{ echo "$as_me:$LINENO: checking for long double" >&5 -echo $ECHO_N "checking for long double... $ECHO_C" >&6; } -if test "${ac_cv_type_long_double+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 +if test $ac_cv_header_stdc = yes; then + # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi. + if test "$cross_compiling" = yes; then : + : else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ -$ac_includes_default -typedef long double ac__type_new_; +#include +#include +#if ((' ' & 0x0FF) == 0x020) +# define ISLOWER(c) ('a' <= (c) && (c) <= 'z') +# define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c)) +#else +# define ISLOWER(c) \ + (('a' <= (c) && (c) <= 'i') \ + || ('j' <= (c) && (c) <= 'r') \ + || ('s' <= (c) && (c) <= 'z')) +# define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c)) +#endif + +#define XOR(e, f) (((e) && !(f)) || (!(e) && (f))) int main () { -if ((ac__type_new_ *) 0) - return 0; -if (sizeof (ac__type_new_)) - return 0; - ; + int i; + for (i = 0; i < 256; i++) + if (XOR (islower (i), ISLOWER (i)) + || toupper (i) != TOUPPER (i)) + return 2; return 0; } _ACEOF -rm -f conftest.$ac_objext -if { (ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then - ac_cv_type_long_double=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 +if ac_fn_c_try_run "$LINENO"; then : - ac_cv_type_long_double=no +else + ac_cv_header_stdc=no +fi +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest.beam conftest.$ac_ext fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi -{ echo "$as_me:$LINENO: result: $ac_cv_type_long_double" >&5 -echo "${ECHO_T}$ac_cv_type_long_double" >&6; } +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_stdc" >&5 +$as_echo "$ac_cv_header_stdc" >&6; } +if test $ac_cv_header_stdc = yes; then -# The cast to long int works around a bug in the HP C Compiler -# version HP92453-01 B.11.11.23709.GP, which incorrectly rejects -# declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'. -# This bug is HP SR number 8606223364. -{ echo "$as_me:$LINENO: checking size of long double" >&5 -echo $ECHO_N "checking size of long double... $ECHO_C" >&6; } -if test "${ac_cv_sizeof_long_double+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - if test "$cross_compiling" = yes; then - # Depending upon the size, compute the lo and hi bounds. -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default - typedef long double ac__type_sizeof_; -int -main () -{ -static int test_array [1 - 2 * !(((long int) (sizeof (ac__type_sizeof_))) >= 0)]; -test_array [0] = 0 +$as_echo "#define STDC_HEADERS 1" >>confdefs.h - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then - ac_lo=0 ac_mid=0 - while :; do - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ +fi + +for ac_func in memcpy +do : + ac_fn_c_check_func "$LINENO" "memcpy" "ac_cv_func_memcpy" +if test "x$ac_cv_func_memcpy" = x""yes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE_MEMCPY 1 _ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF + +fi +done + +# The Ultrix 4.2 mips builtin alloca declared by alloca.h only works +# for constant arguments. Useless! +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for working alloca.h" >&5 +$as_echo_n "checking for working alloca.h... " >&6; } +if test "${ac_cv_working_alloca_h+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ -$ac_includes_default - typedef long double ac__type_sizeof_; +#include int main () { -static int test_array [1 - 2 * !(((long int) (sizeof (ac__type_sizeof_))) <= $ac_mid)]; -test_array [0] = 0 - +char *p = (char *) alloca (2 * sizeof (int)); + if (p) return 0; ; return 0; } _ACEOF -rm -f conftest.$ac_objext -if { (ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then - ac_hi=$ac_mid; break +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_working_alloca_h=yes else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 + ac_cv_working_alloca_h=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_working_alloca_h" >&5 +$as_echo "$ac_cv_working_alloca_h" >&6; } +if test $ac_cv_working_alloca_h = yes; then + +$as_echo "#define HAVE_ALLOCA_H 1" >>confdefs.h - ac_lo=`expr $ac_mid + 1` - if test $ac_lo -le $ac_mid; then - ac_lo= ac_hi= - break - fi - ac_mid=`expr 2 '*' $ac_mid + 1` fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - done +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for alloca" >&5 +$as_echo_n "checking for alloca... " >&6; } +if test "${ac_cv_func_alloca_works+set}" = set; then : + $as_echo_n "(cached) " >&6 else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ -$ac_includes_default - typedef long double ac__type_sizeof_; -int -main () -{ -static int test_array [1 - 2 * !(((long int) (sizeof (ac__type_sizeof_))) < 0)]; -test_array [0] = 0 +#ifdef __GNUC__ +# define alloca __builtin_alloca +#else +# ifdef _MSC_VER +# include +# define alloca _alloca +# else +# ifdef HAVE_ALLOCA_H +# include +# else +# ifdef _AIX + #pragma alloca +# else +# ifndef alloca /* predefined by HP cc +Olibcalls */ +char *alloca (); +# endif +# endif +# endif +# endif +#endif - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then - ac_hi=-1 ac_mid=-1 - while :; do - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default - typedef long double ac__type_sizeof_; int main () { -static int test_array [1 - 2 * !(((long int) (sizeof (ac__type_sizeof_))) >= $ac_mid)]; -test_array [0] = 0 - +char *p = (char *) alloca (1); + if (p) return 0; ; return 0; } _ACEOF -rm -f conftest.$ac_objext -if { (ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then - ac_lo=$ac_mid; break +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_func_alloca_works=yes else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_hi=`expr '(' $ac_mid ')' - 1` - if test $ac_mid -le $ac_hi; then - ac_lo= ac_hi= - break - fi - ac_mid=`expr 2 '*' $ac_mid` + ac_cv_func_alloca_works=no fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_func_alloca_works" >&5 +$as_echo "$ac_cv_func_alloca_works" >&6; } + +if test $ac_cv_func_alloca_works = yes; then + +$as_echo "#define HAVE_ALLOCA 1" >>confdefs.h -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - done else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 + # The SVR3 libPW and SVR4 libucb both contain incompatible functions +# that cause trouble. Some versions do not even contain alloca or +# contain a buggy version. If you still want to use their alloca, +# use ar to extract alloca.o from them instead of compiling alloca.c. - ac_lo= ac_hi= -fi +ALLOCA=\${LIBOBJDIR}alloca.$ac_objext -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -fi +$as_echo "#define C_ALLOCA 1" >>confdefs.h -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -# Binary search between lo and hi bounds. -while test "x$ac_lo" != "x$ac_hi"; do - ac_mid=`expr '(' $ac_hi - $ac_lo ')' / 2 + $ac_lo` - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether \`alloca.c' needs Cray hooks" >&5 +$as_echo_n "checking whether \`alloca.c' needs Cray hooks... " >&6; } +if test "${ac_cv_os_cray+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ -$ac_includes_default - typedef long double ac__type_sizeof_; -int -main () -{ -static int test_array [1 - 2 * !(((long int) (sizeof (ac__type_sizeof_))) <= $ac_mid)]; -test_array [0] = 0 +#if defined CRAY && ! defined CRAY2 +webecray +#else +wenotbecray +#endif - ; - return 0; -} _ACEOF -rm -f conftest.$ac_objext -if { (ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then - ac_hi=$ac_mid +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP "webecray" >/dev/null 2>&1; then : + ac_cv_os_cray=yes else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 + ac_cv_os_cray=no +fi +rm -f conftest* - ac_lo=`expr '(' $ac_mid ')' + 1` fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_os_cray" >&5 +$as_echo "$ac_cv_os_cray" >&6; } +if test $ac_cv_os_cray = yes; then + for ac_func in _getb67 GETB67 getb67; do + as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh` +ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var" +eval as_val=\$$as_ac_var + if test "x$as_val" = x""yes; then : -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -done -case $ac_lo in -?*) ac_cv_sizeof_long_double=$ac_lo;; -'') if test "$ac_cv_type_long_double" = yes; then - { { echo "$as_me:$LINENO: error: cannot compute sizeof (long double) -See \`config.log' for more details." >&5 -echo "$as_me: error: cannot compute sizeof (long double) -See \`config.log' for more details." >&2;} - { (exit 77); exit 77; }; } - else - ac_cv_sizeof_long_double=0 - fi ;; -esac -else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ +cat >>confdefs.h <<_ACEOF +#define CRAY_STACKSEG_END $ac_func _ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF + + break +fi + + done +fi + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking stack direction for C alloca" >&5 +$as_echo_n "checking stack direction for C alloca... " >&6; } +if test "${ac_cv_c_stack_direction+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test "$cross_compiling" = yes; then : + ac_cv_c_stack_direction=0 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $ac_includes_default - typedef long double ac__type_sizeof_; -static long int longval () { return (long int) (sizeof (ac__type_sizeof_)); } -static unsigned long int ulongval () { return (long int) (sizeof (ac__type_sizeof_)); } -#include -#include int -main () +find_stack_direction () { - - FILE *f = fopen ("conftest.val", "w"); - if (! f) - return 1; - if (((long int) (sizeof (ac__type_sizeof_))) < 0) + static char *addr = 0; + auto char dummy; + if (addr == 0) { - long int i = longval (); - if (i != ((long int) (sizeof (ac__type_sizeof_)))) - return 1; - fprintf (f, "%ld\n", i); + addr = &dummy; + return find_stack_direction (); } else - { - unsigned long int i = ulongval (); - if (i != ((long int) (sizeof (ac__type_sizeof_)))) - return 1; - fprintf (f, "%lu\n", i); - } - return ferror (f) || fclose (f) != 0; + return (&dummy > addr) ? 1 : -1; +} - ; - return 0; +int +main () +{ + return find_stack_direction () < 0; } _ACEOF -rm -f conftest$ac_exeext -if { (ac_try="$ac_link" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_link") 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { ac_try='./conftest$ac_exeext' - { (case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_try") 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_cv_sizeof_long_double=`cat conftest.val` +if ac_fn_c_try_run "$LINENO"; then : + ac_cv_c_stack_direction=1 else - echo "$as_me: program exited with status $ac_status" >&5 -echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 + ac_cv_c_stack_direction=-1 +fi +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest.beam conftest.$ac_ext +fi + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_stack_direction" >&5 +$as_echo "$ac_cv_c_stack_direction" >&6; } +cat >>confdefs.h <<_ACEOF +#define STACK_DIRECTION $ac_cv_c_stack_direction +_ACEOF + + +fi + -( exit $ac_status ) -if test "$ac_cv_type_long_double" = yes; then - { { echo "$as_me:$LINENO: error: cannot compute sizeof (long double) -See \`config.log' for more details." >&5 -echo "$as_me: error: cannot compute sizeof (long double) -See \`config.log' for more details." >&2;} - { (exit 77); exit 77; }; } +# The cast to long int works around a bug in the HP C Compiler +# version HP92453-01 B.11.11.23709.GP, which incorrectly rejects +# declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'. +# This bug is HP SR number 8606223364. +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking size of double" >&5 +$as_echo_n "checking size of double... " >&6; } +if test "${ac_cv_sizeof_double+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (double))" "ac_cv_sizeof_double" "$ac_includes_default"; then : + +else + if test "$ac_cv_type_double" = yes; then + { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +{ as_fn_set_status 77 +as_fn_error "cannot compute sizeof (double) +See \`config.log' for more details." "$LINENO" 5; }; } else - ac_cv_sizeof_long_double=0 + ac_cv_sizeof_double=0 fi fi -rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext + fi -rm -f conftest.val +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_double" >&5 +$as_echo "$ac_cv_sizeof_double" >&6; } + + + +cat >>confdefs.h <<_ACEOF +#define SIZEOF_DOUBLE $ac_cv_sizeof_double +_ACEOF + + +# The cast to long int works around a bug in the HP C Compiler +# version HP92453-01 B.11.11.23709.GP, which incorrectly rejects +# declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'. +# This bug is HP SR number 8606223364. +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking size of long double" >&5 +$as_echo_n "checking size of long double... " >&6; } +if test "${ac_cv_sizeof_long_double+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (long double))" "ac_cv_sizeof_long_double" "$ac_includes_default"; then : + +else + if test "$ac_cv_type_long_double" = yes; then + { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +{ as_fn_set_status 77 +as_fn_error "cannot compute sizeof (long double) +See \`config.log' for more details." "$LINENO" 5; }; } + else + ac_cv_sizeof_long_double=0 + fi +fi + fi -{ echo "$as_me:$LINENO: result: $ac_cv_sizeof_long_double" >&5 -echo "${ECHO_T}$ac_cv_sizeof_long_double" >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_long_double" >&5 +$as_echo "$ac_cv_sizeof_long_double" >&6; } @@ -22123,264 +5582,246 @@ if test $ac_cv_sizeof_long_double != 0; then HAVE_LONG_DOUBLE=1 -cat >>confdefs.h <<\_ACEOF -#define HAVE_LONG_DOUBLE 1 -_ACEOF +$as_echo "#define HAVE_LONG_DOUBLE 1" >>confdefs.h fi fi fi -{ echo "$as_me:$LINENO: checking whether byte ordering is bigendian" >&5 -echo $ECHO_N "checking whether byte ordering is bigendian... $ECHO_C" >&6; } -if test "${ac_cv_c_bigendian+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - # See if sys/param.h defines the BYTE_ORDER macro. -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether byte ordering is bigendian" >&5 +$as_echo_n "checking whether byte ordering is bigendian... " >&6; } +if test "${ac_cv_c_bigendian+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + ac_cv_c_bigendian=unknown + # See if we're dealing with a universal compiler. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#ifndef __APPLE_CC__ + not a universal capable compiler + #endif + typedef int dummy; + +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + + # Check for potential -arch flags. It is not universal unless + # there are at least two -arch flags with different values. + ac_arch= + ac_prev= + for ac_word in $CC $CFLAGS $CPPFLAGS $LDFLAGS; do + if test -n "$ac_prev"; then + case $ac_word in + i?86 | x86_64 | ppc | ppc64) + if test -z "$ac_arch" || test "$ac_arch" = "$ac_word"; then + ac_arch=$ac_word + else + ac_cv_c_bigendian=universal + break + fi + ;; + esac + ac_prev= + elif test "x$ac_word" = "x-arch"; then + ac_prev=arch + fi + done +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + if test $ac_cv_c_bigendian = unknown; then + # See if sys/param.h defines the BYTE_ORDER macro. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include -#include + #include int main () { -#if ! (defined BYTE_ORDER && defined BIG_ENDIAN && defined LITTLE_ENDIAN \ - && BYTE_ORDER && BIG_ENDIAN && LITTLE_ENDIAN) - bogus endian macros -#endif +#if ! (defined BYTE_ORDER && defined BIG_ENDIAN \ + && defined LITTLE_ENDIAN && BYTE_ORDER && BIG_ENDIAN \ + && LITTLE_ENDIAN) + bogus endian macros + #endif ; return 0; } _ACEOF -rm -f conftest.$ac_objext -if { (ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then +if ac_fn_c_try_compile "$LINENO"; then : # It does; now see whether it defined to BIG_ENDIAN or not. -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include -#include + #include int main () { #if BYTE_ORDER != BIG_ENDIAN - not big endian -#endif + not big endian + #endif ; return 0; } _ACEOF -rm -f conftest.$ac_objext -if { (ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then +if ac_fn_c_try_compile "$LINENO"; then : ac_cv_c_bigendian=yes else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_cv_c_bigendian=no + ac_cv_c_bigendian=no fi - rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + fi + if test $ac_cv_c_bigendian = unknown; then + # See if defines _LITTLE_ENDIAN or _BIG_ENDIAN (e.g., Solaris). + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include - # It does not; compile a test program. -if test "$cross_compiling" = yes; then - # try to guess the endianness by grepping values into an object file - ac_cv_c_bigendian=unknown - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ +int +main () +{ +#if ! (defined _LITTLE_ENDIAN || defined _BIG_ENDIAN) + bogus endian macros + #endif + + ; + return 0; +} _ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + # It does; now see whether it defined to _BIG_ENDIAN or not. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ -short int ascii_mm[] = { 0x4249, 0x4765, 0x6E44, 0x6961, 0x6E53, 0x7953, 0 }; -short int ascii_ii[] = { 0x694C, 0x5454, 0x656C, 0x6E45, 0x6944, 0x6E61, 0 }; -void _ascii () { char *s = (char *) ascii_mm; s = (char *) ascii_ii; } -short int ebcdic_ii[] = { 0x89D3, 0xE3E3, 0x8593, 0x95C5, 0x89C4, 0x9581, 0 }; -short int ebcdic_mm[] = { 0xC2C9, 0xC785, 0x95C4, 0x8981, 0x95E2, 0xA8E2, 0 }; -void _ebcdic () { char *s = (char *) ebcdic_mm; s = (char *) ebcdic_ii; } +#include + int main () { - _ascii (); _ebcdic (); +#ifndef _BIG_ENDIAN + not big endian + #endif + ; return 0; } _ACEOF -rm -f conftest.$ac_objext -if { (ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then - if grep BIGenDianSyS conftest.$ac_objext >/dev/null ; then +if ac_fn_c_try_compile "$LINENO"; then : ac_cv_c_bigendian=yes +else + ac_cv_c_bigendian=no fi -if grep LiTTleEnDian conftest.$ac_objext >/dev/null ; then - if test "$ac_cv_c_bigendian" = unknown; then - ac_cv_c_bigendian=no - else - # finding both strings is unlikely to happen, but who knows? - ac_cv_c_bigendian=unknown - fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + fi + if test $ac_cv_c_bigendian = unknown; then + # Compile a test program. + if test "$cross_compiling" = yes; then : + # Try to guess by grepping values from an object file. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +short int ascii_mm[] = + { 0x4249, 0x4765, 0x6E44, 0x6961, 0x6E53, 0x7953, 0 }; + short int ascii_ii[] = + { 0x694C, 0x5454, 0x656C, 0x6E45, 0x6944, 0x6E61, 0 }; + int use_ascii (int i) { + return ascii_mm[i] + ascii_ii[i]; + } + short int ebcdic_ii[] = + { 0x89D3, 0xE3E3, 0x8593, 0x95C5, 0x89C4, 0x9581, 0 }; + short int ebcdic_mm[] = + { 0xC2C9, 0xC785, 0x95C4, 0x8981, 0x95E2, 0xA8E2, 0 }; + int use_ebcdic (int i) { + return ebcdic_mm[i] + ebcdic_ii[i]; + } + extern int foo; +int +main () +{ +return use_ascii (foo) == use_ebcdic (foo); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + if grep BIGenDianSyS conftest.$ac_objext >/dev/null; then + ac_cv_c_bigendian=yes + fi + if grep LiTTleEnDian conftest.$ac_objext >/dev/null ; then + if test "$ac_cv_c_bigendian" = unknown; then + ac_cv_c_bigendian=no + else + # finding both strings is unlikely to happen, but who knows? + ac_cv_c_bigendian=unknown + fi + fi fi - rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $ac_includes_default int main () { - /* Are we little or big endian? From Harbison&Steele. */ - union - { - long int l; - char c[sizeof (long int)]; - } u; - u.l = 1; - return u.c[sizeof (long int) - 1] == 1; + /* Are we little or big endian? From Harbison&Steele. */ + union + { + long int l; + char c[sizeof (long int)]; + } u; + u.l = 1; + return u.c[sizeof (long int) - 1] == 1; ; return 0; } _ACEOF -rm -f conftest$ac_exeext -if { (ac_try="$ac_link" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_link") 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { ac_try='./conftest$ac_exeext' - { (case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_try") 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then +if ac_fn_c_try_run "$LINENO"; then : ac_cv_c_bigendian=no else - echo "$as_me: program exited with status $ac_status" >&5 -echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -( exit $ac_status ) -ac_cv_c_bigendian=yes + ac_cv_c_bigendian=yes fi -rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest.beam conftest.$ac_ext fi - + fi fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_bigendian" >&5 +$as_echo "$ac_cv_c_bigendian" >&6; } + case $ac_cv_c_bigendian in #( + yes) + $as_echo "#define WORDS_BIGENDIAN 1" >>confdefs.h +;; #( + no) + ;; #( + universal) -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -fi -{ echo "$as_me:$LINENO: result: $ac_cv_c_bigendian" >&5 -echo "${ECHO_T}$ac_cv_c_bigendian" >&6; } -case $ac_cv_c_bigendian in - yes) +$as_echo "#define AC_APPLE_UNIVERSAL_BUILD 1" >>confdefs.h -cat >>confdefs.h <<\_ACEOF -#define WORDS_BIGENDIAN 1 -_ACEOF - ;; - no) - ;; - *) - { { echo "$as_me:$LINENO: error: unknown endianness -presetting ac_cv_c_bigendian=no (or yes) will help" >&5 -echo "$as_me: error: unknown endianness -presetting ac_cv_c_bigendian=no (or yes) will help" >&2;} - { (exit 1); exit 1; }; } ;; -esac + ;; #( + *) + as_fn_error "unknown endianness + presetting ac_cv_c_bigendian=no (or yes) will help" "$LINENO" 5 ;; + esac -{ echo "$as_me:$LINENO: checking assembler .cfi pseudo-op support" >&5 -echo $ECHO_N "checking assembler .cfi pseudo-op support... $ECHO_C" >&6; } -if test "${libffi_cv_as_cfi_pseudo_op+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking assembler .cfi pseudo-op support" >&5 +$as_echo_n "checking assembler .cfi pseudo-op support... " >&6; } +if test "${libffi_cv_as_cfi_pseudo_op+set}" = set; then : + $as_echo_n "(cached) " >&6 else libffi_cv_as_cfi_pseudo_op=unknown - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ asm (".cfi_startproc\n\t.cfi_endproc"); int @@ -22391,60 +5832,34 @@ return 0; } _ACEOF -rm -f conftest.$ac_objext -if { (ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then +if ac_fn_c_try_compile "$LINENO"; then : libffi_cv_as_cfi_pseudo_op=yes else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - libffi_cv_as_cfi_pseudo_op=no + libffi_cv_as_cfi_pseudo_op=no fi - rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi -{ echo "$as_me:$LINENO: result: $libffi_cv_as_cfi_pseudo_op" >&5 -echo "${ECHO_T}$libffi_cv_as_cfi_pseudo_op" >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $libffi_cv_as_cfi_pseudo_op" >&5 +$as_echo "$libffi_cv_as_cfi_pseudo_op" >&6; } if test "x$libffi_cv_as_cfi_pseudo_op" = xyes; then -cat >>confdefs.h <<\_ACEOF -#define HAVE_AS_CFI_PSEUDO_OP 1 -_ACEOF +$as_echo "#define HAVE_AS_CFI_PSEUDO_OP 1" >>confdefs.h fi if test x$TARGET = xSPARC; then - { echo "$as_me:$LINENO: checking assembler and linker support unaligned pc related relocs" >&5 -echo $ECHO_N "checking assembler and linker support unaligned pc related relocs... $ECHO_C" >&6; } -if test "${libffi_cv_as_sparc_ua_pcrel+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: checking assembler and linker support unaligned pc related relocs" >&5 +$as_echo_n "checking assembler and linker support unaligned pc related relocs... " >&6; } +if test "${libffi_cv_as_sparc_ua_pcrel+set}" = set; then : + $as_echo_n "(cached) " >&6 else save_CFLAGS="$CFLAGS" save_LDFLAGS="$LDFLAGS" CFLAGS="$CFLAGS -fpic" LDFLAGS="$LDFLAGS -shared" - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ asm (".text; foo: nop; .data; .align 4; .byte 0; .uaword %r_disp32(foo); .text"); int @@ -22455,60 +5870,33 @@ return 0; } _ACEOF -rm -f conftest.$ac_objext conftest$ac_exeext -if { (ac_try="$ac_link" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_link") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest$ac_exeext && - $as_test_x conftest$ac_exeext; then +if ac_fn_c_try_link "$LINENO"; then : libffi_cv_as_sparc_ua_pcrel=yes else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - libffi_cv_as_sparc_ua_pcrel=no + libffi_cv_as_sparc_ua_pcrel=no fi - -rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ - conftest$ac_exeext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext CFLAGS="$save_CFLAGS" LDFLAGS="$save_LDFLAGS" fi -{ echo "$as_me:$LINENO: result: $libffi_cv_as_sparc_ua_pcrel" >&5 -echo "${ECHO_T}$libffi_cv_as_sparc_ua_pcrel" >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $libffi_cv_as_sparc_ua_pcrel" >&5 +$as_echo "$libffi_cv_as_sparc_ua_pcrel" >&6; } if test "x$libffi_cv_as_sparc_ua_pcrel" = xyes; then -cat >>confdefs.h <<\_ACEOF -#define HAVE_AS_SPARC_UA_PCREL 1 -_ACEOF +$as_echo "#define HAVE_AS_SPARC_UA_PCREL 1" >>confdefs.h fi - { echo "$as_me:$LINENO: checking assembler .register pseudo-op support" >&5 -echo $ECHO_N "checking assembler .register pseudo-op support... $ECHO_C" >&6; } -if test "${libffi_cv_as_register_pseudo_op+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: checking assembler .register pseudo-op support" >&5 +$as_echo_n "checking assembler .register pseudo-op support... " >&6; } +if test "${libffi_cv_as_register_pseudo_op+set}" = set; then : + $as_echo_n "(cached) " >&6 else libffi_cv_as_register_pseudo_op=unknown # Check if we have .register - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ asm (".register %g2, #scratch"); int @@ -22519,49 +5907,58 @@ return 0; } _ACEOF -rm -f conftest.$ac_objext -if { (ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then +if ac_fn_c_try_compile "$LINENO"; then : libffi_cv_as_register_pseudo_op=yes else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - libffi_cv_as_register_pseudo_op=no + libffi_cv_as_register_pseudo_op=no fi - rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi -{ echo "$as_me:$LINENO: result: $libffi_cv_as_register_pseudo_op" >&5 -echo "${ECHO_T}$libffi_cv_as_register_pseudo_op" >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $libffi_cv_as_register_pseudo_op" >&5 +$as_echo "$libffi_cv_as_register_pseudo_op" >&6; } if test "x$libffi_cv_as_register_pseudo_op" = xyes; then -cat >>confdefs.h <<\_ACEOF -#define HAVE_AS_REGISTER_PSEUDO_OP 1 -_ACEOF +$as_echo "#define HAVE_AS_REGISTER_PSEUDO_OP 1" >>confdefs.h + + fi +fi + +if test x$TARGET = xX86 || test x$TARGET = xX86_WIN32 || test x$TARGET = xX86_64; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking assembler supports pc related relocs" >&5 +$as_echo_n "checking assembler supports pc related relocs... " >&6; } +if test "${libffi_cv_as_x86_pcrel+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + + libffi_cv_as_x86_pcrel=yes + echo '.text; foo: nop; .data; .long foo-.; .text' > conftest.s + if $CC $CFLAGS -c conftest.s 2>&1 | grep -i warning > /dev/null; then + libffi_cv_as_x86_pcrel=no + fi + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $libffi_cv_as_x86_pcrel" >&5 +$as_echo "$libffi_cv_as_x86_pcrel" >&6; } + if test "x$libffi_cv_as_x86_pcrel" = xyes; then + +$as_echo "#define HAVE_AS_X86_PCREL 1" >>confdefs.h fi fi -{ echo "$as_me:$LINENO: checking whether .eh_frame section should be read-only" >&5 -echo $ECHO_N "checking whether .eh_frame section should be read-only... $ECHO_C" >&6; } -if test "${libffi_cv_ro_eh_frame+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 +case "$target" in + *-apple-darwin10* | *-*-freebsd* | *-*-openbsd* | *-pc-solaris*) + +$as_echo "#define FFI_MMAP_EXEC_WRIT 1" >>confdefs.h + + ;; +esac + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether .eh_frame section should be read-only" >&5 +$as_echo_n "checking whether .eh_frame section should be read-only... " >&6; } +if test "${libffi_cv_ro_eh_frame+set}" = set; then : + $as_echo_n "(cached) " >&6 else libffi_cv_ro_eh_frame=no @@ -22577,41 +5974,35 @@ rm -f conftest.* fi -{ echo "$as_me:$LINENO: result: $libffi_cv_ro_eh_frame" >&5 -echo "${ECHO_T}$libffi_cv_ro_eh_frame" >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $libffi_cv_ro_eh_frame" >&5 +$as_echo "$libffi_cv_ro_eh_frame" >&6; } if test "x$libffi_cv_ro_eh_frame" = xyes; then -cat >>confdefs.h <<\_ACEOF -#define HAVE_RO_EH_FRAME 1 -_ACEOF +$as_echo "#define HAVE_RO_EH_FRAME 1" >>confdefs.h -cat >>confdefs.h <<\_ACEOF -#define EH_FRAME_FLAGS "a" -_ACEOF +$as_echo "#define EH_FRAME_FLAGS \"a\"" >>confdefs.h else -cat >>confdefs.h <<\_ACEOF -#define EH_FRAME_FLAGS "aw" -_ACEOF +$as_echo "#define EH_FRAME_FLAGS \"aw\"" >>confdefs.h fi -{ echo "$as_me:$LINENO: checking for __attribute__((visibility(\"hidden\")))" >&5 -echo $ECHO_N "checking for __attribute__((visibility(\"hidden\")))... $ECHO_C" >&6; } -if test "${libffi_cv_hidden_visibility_attribute+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for __attribute__((visibility(\"hidden\")))" >&5 +$as_echo_n "checking for __attribute__((visibility(\"hidden\")))... " >&6; } +if test "${libffi_cv_hidden_visibility_attribute+set}" = set; then : + $as_echo_n "(cached) " >&6 else echo 'int __attribute__ ((visibility ("hidden"))) foo (void) { return 1; }' > conftest.c libffi_cv_hidden_visibility_attribute=no if { ac_try='${CC-cc} -Werror -S conftest.c -o conftest.s 1>&5' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 (eval $ac_try) 2>&5 ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then if grep '\.hidden.*foo' conftest.s >/dev/null; then libffi_cv_hidden_visibility_attribute=yes fi @@ -22619,13 +6010,11 @@ rm -f conftest.* fi -{ echo "$as_me:$LINENO: result: $libffi_cv_hidden_visibility_attribute" >&5 -echo "${ECHO_T}$libffi_cv_hidden_visibility_attribute" >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $libffi_cv_hidden_visibility_attribute" >&5 +$as_echo "$libffi_cv_hidden_visibility_attribute" >&6; } if test $libffi_cv_hidden_visibility_attribute = yes; then -cat >>confdefs.h <<\_ACEOF -#define HAVE_HIDDEN_VISIBILITY_ATTRIBUTE 1 -_ACEOF +$as_echo "#define HAVE_HIDDEN_VISIBILITY_ATTRIBUTE 1" >>confdefs.h fi @@ -22636,50 +6025,41 @@ - # Check whether --enable-debug was given. -if test "${enable_debug+set}" = set; then +if test "${enable_debug+set}" = set; then : enableval=$enable_debug; if test "$enable_debug" = "yes"; then -cat >>confdefs.h <<\_ACEOF -#define FFI_DEBUG 1 -_ACEOF +$as_echo "#define FFI_DEBUG 1" >>confdefs.h fi fi # Check whether --enable-structs was given. -if test "${enable_structs+set}" = set; then +if test "${enable_structs+set}" = set; then : enableval=$enable_structs; if test "$enable_structs" = "no"; then -cat >>confdefs.h <<\_ACEOF -#define FFI_NO_STRUCTS 1 -_ACEOF +$as_echo "#define FFI_NO_STRUCTS 1" >>confdefs.h fi fi # Check whether --enable-raw-api was given. -if test "${enable_raw_api+set}" = set; then +if test "${enable_raw_api+set}" = set; then : enableval=$enable_raw_api; if test "$enable_raw_api" = "no"; then -cat >>confdefs.h <<\_ACEOF -#define FFI_NO_RAW_API 1 -_ACEOF +$as_echo "#define FFI_NO_RAW_API 1" >>confdefs.h fi fi # Check whether --enable-purify-safety was given. -if test "${enable_purify_safety+set}" = set; then +if test "${enable_purify_safety+set}" = set; then : enableval=$enable_purify_safety; if test "$enable_purify_safety" = "yes"; then -cat >>confdefs.h <<\_ACEOF -#define USING_PURIFY 1 -_ACEOF +$as_echo "#define USING_PURIFY 1" >>confdefs.h fi fi @@ -22751,12 +6131,13 @@ case $ac_val in #( *${as_nl}*) case $ac_var in #( - *_cv_*) { echo "$as_me:$LINENO: WARNING: Cache variable $ac_var contains a newline." >&5 -echo "$as_me: WARNING: Cache variable $ac_var contains a newline." >&2;} ;; + *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 +$as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; esac case $ac_var in #( _ | IFS | as_nl) ;; #( - *) $as_unset $ac_var ;; + BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #( + *) { eval $ac_var=; unset $ac_var;} ;; esac ;; esac done @@ -22764,8 +6145,8 @@ (set) 2>&1 | case $as_nl`(ac_space=' '; set) 2>&1` in #( *${as_nl}ac_space=\ *) - # `set' does not quote correctly, so add quotes (double-quote - # substitution turns \\\\ into \\, and sed turns \\ into \). + # `set' does not quote correctly, so add quotes: double-quote + # substitution turns \\\\ into \\, and sed turns \\ into \. sed -n \ "s/'/'\\\\''/g; s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\\2'/p" @@ -22788,12 +6169,12 @@ if diff "$cache_file" confcache >/dev/null 2>&1; then :; else if test -w "$cache_file"; then test "x$cache_file" != "x/dev/null" && - { echo "$as_me:$LINENO: updating cache $cache_file" >&5 -echo "$as_me: updating cache $cache_file" >&6;} + { $as_echo "$as_me:${as_lineno-$LINENO}: updating cache $cache_file" >&5 +$as_echo "$as_me: updating cache $cache_file" >&6;} cat confcache >$cache_file else - { echo "$as_me:$LINENO: not updating unwritable cache $cache_file" >&5 -echo "$as_me: not updating unwritable cache $cache_file" >&6;} + { $as_echo "$as_me:${as_lineno-$LINENO}: not updating unwritable cache $cache_file" >&5 +$as_echo "$as_me: not updating unwritable cache $cache_file" >&6;} fi fi rm -f confcache @@ -22809,234 +6190,159 @@ for ac_i in : $LIBOBJS; do test "x$ac_i" = x: && continue # 1. Remove the extension, and $U if already installed. ac_script='s/\$U\././;s/\.o$//;s/\.obj$//' - ac_i=`echo "$ac_i" | sed "$ac_script"` + ac_i=`$as_echo "$ac_i" | sed "$ac_script"` # 2. Prepend LIBOBJDIR. When used with automake>=1.10 LIBOBJDIR # will be set to the directory where LIBOBJS objects are built. - ac_libobjs="$ac_libobjs \${LIBOBJDIR}$ac_i\$U.$ac_objext" - ac_ltlibobjs="$ac_ltlibobjs \${LIBOBJDIR}$ac_i"'$U.lo' + as_fn_append ac_libobjs " \${LIBOBJDIR}$ac_i\$U.$ac_objext" + as_fn_append ac_ltlibobjs " \${LIBOBJDIR}$ac_i"'$U.lo' done LIBOBJS=$ac_libobjs LTLIBOBJS=$ac_ltlibobjs + if test -n "$EXEEXT"; then + am__EXEEXT_TRUE= + am__EXEEXT_FALSE='#' +else + am__EXEEXT_TRUE='#' + am__EXEEXT_FALSE= +fi + if test -z "${AMDEP_TRUE}" && test -z "${AMDEP_FALSE}"; then - { { echo "$as_me:$LINENO: error: conditional \"AMDEP\" was never defined. -Usually this means the macro was only invoked conditionally." >&5 -echo "$as_me: error: conditional \"AMDEP\" was never defined. -Usually this means the macro was only invoked conditionally." >&2;} - { (exit 1); exit 1; }; } + as_fn_error "conditional \"AMDEP\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${am__fastdepCC_TRUE}" && test -z "${am__fastdepCC_FALSE}"; then - { { echo "$as_me:$LINENO: error: conditional \"am__fastdepCC\" was never defined. -Usually this means the macro was only invoked conditionally." >&5 -echo "$as_me: error: conditional \"am__fastdepCC\" was never defined. -Usually this means the macro was only invoked conditionally." >&2;} - { (exit 1); exit 1; }; } + as_fn_error "conditional \"am__fastdepCC\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${am__fastdepCCAS_TRUE}" && test -z "${am__fastdepCCAS_FALSE}"; then - { { echo "$as_me:$LINENO: error: conditional \"am__fastdepCCAS\" was never defined. -Usually this means the macro was only invoked conditionally." >&5 -echo "$as_me: error: conditional \"am__fastdepCCAS\" was never defined. -Usually this means the macro was only invoked conditionally." >&2;} - { (exit 1); exit 1; }; } -fi -if test -z "${am__fastdepCXX_TRUE}" && test -z "${am__fastdepCXX_FALSE}"; then - { { echo "$as_me:$LINENO: error: conditional \"am__fastdepCXX\" was never defined. -Usually this means the macro was only invoked conditionally." >&5 -echo "$as_me: error: conditional \"am__fastdepCXX\" was never defined. -Usually this means the macro was only invoked conditionally." >&2;} - { (exit 1); exit 1; }; } + as_fn_error "conditional \"am__fastdepCCAS\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${MAINTAINER_MODE_TRUE}" && test -z "${MAINTAINER_MODE_FALSE}"; then - { { echo "$as_me:$LINENO: error: conditional \"MAINTAINER_MODE\" was never defined. -Usually this means the macro was only invoked conditionally." >&5 -echo "$as_me: error: conditional \"MAINTAINER_MODE\" was never defined. -Usually this means the macro was only invoked conditionally." >&2;} - { (exit 1); exit 1; }; } + as_fn_error "conditional \"MAINTAINER_MODE\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${TESTSUBDIR_TRUE}" && test -z "${TESTSUBDIR_FALSE}"; then - { { echo "$as_me:$LINENO: error: conditional \"TESTSUBDIR\" was never defined. -Usually this means the macro was only invoked conditionally." >&5 -echo "$as_me: error: conditional \"TESTSUBDIR\" was never defined. -Usually this means the macro was only invoked conditionally." >&2;} - { (exit 1); exit 1; }; } + as_fn_error "conditional \"TESTSUBDIR\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${MIPS_TRUE}" && test -z "${MIPS_FALSE}"; then - { { echo "$as_me:$LINENO: error: conditional \"MIPS\" was never defined. -Usually this means the macro was only invoked conditionally." >&5 -echo "$as_me: error: conditional \"MIPS\" was never defined. -Usually this means the macro was only invoked conditionally." >&2;} - { (exit 1); exit 1; }; } + as_fn_error "conditional \"MIPS\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${SPARC_TRUE}" && test -z "${SPARC_FALSE}"; then - { { echo "$as_me:$LINENO: error: conditional \"SPARC\" was never defined. -Usually this means the macro was only invoked conditionally." >&5 -echo "$as_me: error: conditional \"SPARC\" was never defined. -Usually this means the macro was only invoked conditionally." >&2;} - { (exit 1); exit 1; }; } + as_fn_error "conditional \"SPARC\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${X86_TRUE}" && test -z "${X86_FALSE}"; then - { { echo "$as_me:$LINENO: error: conditional \"X86\" was never defined. -Usually this means the macro was only invoked conditionally." >&5 -echo "$as_me: error: conditional \"X86\" was never defined. -Usually this means the macro was only invoked conditionally." >&2;} - { (exit 1); exit 1; }; } + as_fn_error "conditional \"X86\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${X86_FREEBSD_TRUE}" && test -z "${X86_FREEBSD_FALSE}"; then - { { echo "$as_me:$LINENO: error: conditional \"X86_FREEBSD\" was never defined. -Usually this means the macro was only invoked conditionally." >&5 -echo "$as_me: error: conditional \"X86_FREEBSD\" was never defined. -Usually this means the macro was only invoked conditionally." >&2;} - { (exit 1); exit 1; }; } + as_fn_error "conditional \"X86_FREEBSD\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${X86_WIN32_TRUE}" && test -z "${X86_WIN32_FALSE}"; then - { { echo "$as_me:$LINENO: error: conditional \"X86_WIN32\" was never defined. -Usually this means the macro was only invoked conditionally." >&5 -echo "$as_me: error: conditional \"X86_WIN32\" was never defined. -Usually this means the macro was only invoked conditionally." >&2;} - { (exit 1); exit 1; }; } + as_fn_error "conditional \"X86_WIN32\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${X86_WIN64_TRUE}" && test -z "${X86_WIN64_FALSE}"; then + as_fn_error "conditional \"X86_WIN64\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${X86_DARWIN_TRUE}" && test -z "${X86_DARWIN_FALSE}"; then - { { echo "$as_me:$LINENO: error: conditional \"X86_DARWIN\" was never defined. -Usually this means the macro was only invoked conditionally." >&5 -echo "$as_me: error: conditional \"X86_DARWIN\" was never defined. -Usually this means the macro was only invoked conditionally." >&2;} - { (exit 1); exit 1; }; } + as_fn_error "conditional \"X86_DARWIN\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${ALPHA_TRUE}" && test -z "${ALPHA_FALSE}"; then - { { echo "$as_me:$LINENO: error: conditional \"ALPHA\" was never defined. -Usually this means the macro was only invoked conditionally." >&5 -echo "$as_me: error: conditional \"ALPHA\" was never defined. -Usually this means the macro was only invoked conditionally." >&2;} - { (exit 1); exit 1; }; } + as_fn_error "conditional \"ALPHA\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${IA64_TRUE}" && test -z "${IA64_FALSE}"; then - { { echo "$as_me:$LINENO: error: conditional \"IA64\" was never defined. -Usually this means the macro was only invoked conditionally." >&5 -echo "$as_me: error: conditional \"IA64\" was never defined. -Usually this means the macro was only invoked conditionally." >&2;} - { (exit 1); exit 1; }; } + as_fn_error "conditional \"IA64\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${M32R_TRUE}" && test -z "${M32R_FALSE}"; then - { { echo "$as_me:$LINENO: error: conditional \"M32R\" was never defined. -Usually this means the macro was only invoked conditionally." >&5 -echo "$as_me: error: conditional \"M32R\" was never defined. -Usually this means the macro was only invoked conditionally." >&2;} - { (exit 1); exit 1; }; } + as_fn_error "conditional \"M32R\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${M68K_TRUE}" && test -z "${M68K_FALSE}"; then - { { echo "$as_me:$LINENO: error: conditional \"M68K\" was never defined. -Usually this means the macro was only invoked conditionally." >&5 -echo "$as_me: error: conditional \"M68K\" was never defined. -Usually this means the macro was only invoked conditionally." >&2;} - { (exit 1); exit 1; }; } + as_fn_error "conditional \"M68K\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${POWERPC_TRUE}" && test -z "${POWERPC_FALSE}"; then - { { echo "$as_me:$LINENO: error: conditional \"POWERPC\" was never defined. -Usually this means the macro was only invoked conditionally." >&5 -echo "$as_me: error: conditional \"POWERPC\" was never defined. -Usually this means the macro was only invoked conditionally." >&2;} - { (exit 1); exit 1; }; } + as_fn_error "conditional \"POWERPC\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${POWERPC_AIX_TRUE}" && test -z "${POWERPC_AIX_FALSE}"; then - { { echo "$as_me:$LINENO: error: conditional \"POWERPC_AIX\" was never defined. -Usually this means the macro was only invoked conditionally." >&5 -echo "$as_me: error: conditional \"POWERPC_AIX\" was never defined. -Usually this means the macro was only invoked conditionally." >&2;} - { (exit 1); exit 1; }; } + as_fn_error "conditional \"POWERPC_AIX\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${POWERPC_DARWIN_TRUE}" && test -z "${POWERPC_DARWIN_FALSE}"; then - { { echo "$as_me:$LINENO: error: conditional \"POWERPC_DARWIN\" was never defined. -Usually this means the macro was only invoked conditionally." >&5 -echo "$as_me: error: conditional \"POWERPC_DARWIN\" was never defined. -Usually this means the macro was only invoked conditionally." >&2;} - { (exit 1); exit 1; }; } + as_fn_error "conditional \"POWERPC_DARWIN\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${POWERPC_FREEBSD_TRUE}" && test -z "${POWERPC_FREEBSD_FALSE}"; then - { { echo "$as_me:$LINENO: error: conditional \"POWERPC_FREEBSD\" was never defined. -Usually this means the macro was only invoked conditionally." >&5 -echo "$as_me: error: conditional \"POWERPC_FREEBSD\" was never defined. -Usually this means the macro was only invoked conditionally." >&2;} - { (exit 1); exit 1; }; } + as_fn_error "conditional \"POWERPC_FREEBSD\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${ARM_TRUE}" && test -z "${ARM_FALSE}"; then - { { echo "$as_me:$LINENO: error: conditional \"ARM\" was never defined. -Usually this means the macro was only invoked conditionally." >&5 -echo "$as_me: error: conditional \"ARM\" was never defined. -Usually this means the macro was only invoked conditionally." >&2;} - { (exit 1); exit 1; }; } + as_fn_error "conditional \"ARM\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${AVR32_TRUE}" && test -z "${AVR32_FALSE}"; then + as_fn_error "conditional \"AVR32\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${LIBFFI_CRIS_TRUE}" && test -z "${LIBFFI_CRIS_FALSE}"; then - { { echo "$as_me:$LINENO: error: conditional \"LIBFFI_CRIS\" was never defined. -Usually this means the macro was only invoked conditionally." >&5 -echo "$as_me: error: conditional \"LIBFFI_CRIS\" was never defined. -Usually this means the macro was only invoked conditionally." >&2;} - { (exit 1); exit 1; }; } + as_fn_error "conditional \"LIBFFI_CRIS\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${FRV_TRUE}" && test -z "${FRV_FALSE}"; then - { { echo "$as_me:$LINENO: error: conditional \"FRV\" was never defined. -Usually this means the macro was only invoked conditionally." >&5 -echo "$as_me: error: conditional \"FRV\" was never defined. -Usually this means the macro was only invoked conditionally." >&2;} - { (exit 1); exit 1; }; } + as_fn_error "conditional \"FRV\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${S390_TRUE}" && test -z "${S390_FALSE}"; then - { { echo "$as_me:$LINENO: error: conditional \"S390\" was never defined. -Usually this means the macro was only invoked conditionally." >&5 -echo "$as_me: error: conditional \"S390\" was never defined. -Usually this means the macro was only invoked conditionally." >&2;} - { (exit 1); exit 1; }; } + as_fn_error "conditional \"S390\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${X86_64_TRUE}" && test -z "${X86_64_FALSE}"; then - { { echo "$as_me:$LINENO: error: conditional \"X86_64\" was never defined. -Usually this means the macro was only invoked conditionally." >&5 -echo "$as_me: error: conditional \"X86_64\" was never defined. -Usually this means the macro was only invoked conditionally." >&2;} - { (exit 1); exit 1; }; } + as_fn_error "conditional \"X86_64\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${SH_TRUE}" && test -z "${SH_FALSE}"; then - { { echo "$as_me:$LINENO: error: conditional \"SH\" was never defined. -Usually this means the macro was only invoked conditionally." >&5 -echo "$as_me: error: conditional \"SH\" was never defined. -Usually this means the macro was only invoked conditionally." >&2;} - { (exit 1); exit 1; }; } + as_fn_error "conditional \"SH\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${SH64_TRUE}" && test -z "${SH64_FALSE}"; then - { { echo "$as_me:$LINENO: error: conditional \"SH64\" was never defined. -Usually this means the macro was only invoked conditionally." >&5 -echo "$as_me: error: conditional \"SH64\" was never defined. -Usually this means the macro was only invoked conditionally." >&2;} - { (exit 1); exit 1; }; } + as_fn_error "conditional \"SH64\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${PA_LINUX_TRUE}" && test -z "${PA_LINUX_FALSE}"; then - { { echo "$as_me:$LINENO: error: conditional \"PA_LINUX\" was never defined. -Usually this means the macro was only invoked conditionally." >&5 -echo "$as_me: error: conditional \"PA_LINUX\" was never defined. -Usually this means the macro was only invoked conditionally." >&2;} - { (exit 1); exit 1; }; } + as_fn_error "conditional \"PA_LINUX\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${PA_HPUX_TRUE}" && test -z "${PA_HPUX_FALSE}"; then - { { echo "$as_me:$LINENO: error: conditional \"PA_HPUX\" was never defined. -Usually this means the macro was only invoked conditionally." >&5 -echo "$as_me: error: conditional \"PA_HPUX\" was never defined. -Usually this means the macro was only invoked conditionally." >&2;} - { (exit 1); exit 1; }; } + as_fn_error "conditional \"PA_HPUX\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${PA64_HPUX_TRUE}" && test -z "${PA64_HPUX_FALSE}"; then - { { echo "$as_me:$LINENO: error: conditional \"PA64_HPUX\" was never defined. -Usually this means the macro was only invoked conditionally." >&5 -echo "$as_me: error: conditional \"PA64_HPUX\" was never defined. -Usually this means the macro was only invoked conditionally." >&2;} - { (exit 1); exit 1; }; } + as_fn_error "conditional \"PA64_HPUX\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi + : ${CONFIG_STATUS=./config.status} +ac_write_fail=0 ac_clean_files_save=$ac_clean_files ac_clean_files="$ac_clean_files $CONFIG_STATUS" -{ echo "$as_me:$LINENO: creating $CONFIG_STATUS" >&5 -echo "$as_me: creating $CONFIG_STATUS" >&6;} -cat >$CONFIG_STATUS <<_ACEOF +{ $as_echo "$as_me:${as_lineno-$LINENO}: creating $CONFIG_STATUS" >&5 +$as_echo "$as_me: creating $CONFIG_STATUS" >&6;} +as_write_fail=0 +cat >$CONFIG_STATUS <<_ASEOF || as_write_fail=1 #! $SHELL # Generated by $as_me. # Run this file to recreate the current configuration. @@ -23046,59 +6352,79 @@ debug=false ac_cs_recheck=false ac_cs_silent=false -SHELL=\${CONFIG_SHELL-$SHELL} -_ACEOF -cat >>$CONFIG_STATUS <<\_ACEOF -## --------------------- ## -## M4sh Initialization. ## -## --------------------- ## +SHELL=\${CONFIG_SHELL-$SHELL} +export SHELL +_ASEOF +cat >>$CONFIG_STATUS <<\_ASEOF || as_write_fail=1 +## -------------------- ## +## M4sh Initialization. ## +## -------------------- ## # Be more Bourne compatible DUALCASE=1; export DUALCASE # for MKS sh -if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then +if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then : emulate sh NULLCMD=: - # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which + # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which # is contrary to our usage. Disable this feature. alias -g '${1+"$@"}'='"$@"' setopt NO_GLOB_SUBST else - case `(set -o) 2>/dev/null` in - *posix*) set -o posix ;; + case `(set -o) 2>/dev/null` in #( + *posix*) : + set -o posix ;; #( + *) : + ;; esac - fi - - -# PATH needs CR -# Avoid depending upon Character Ranges. -as_cr_letters='abcdefghijklmnopqrstuvwxyz' -as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' -as_cr_Letters=$as_cr_letters$as_cr_LETTERS -as_cr_digits='0123456789' -as_cr_alnum=$as_cr_Letters$as_cr_digits - -# The user is always right. -if test "${PATH_SEPARATOR+set}" != set; then - echo "#! /bin/sh" >conf$$.sh - echo "exit 0" >>conf$$.sh - chmod +x conf$$.sh - if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then - PATH_SEPARATOR=';' - else - PATH_SEPARATOR=: +as_nl=' +' +export as_nl +# Printing a long string crashes Solaris 7 /usr/bin/printf. +as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' +as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo +as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo +# Prefer a ksh shell builtin over an external printf program on Solaris, +# but without wasting forks for bash or zsh. +if test -z "$BASH_VERSION$ZSH_VERSION" \ + && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then + as_echo='print -r --' + as_echo_n='print -rn --' +elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then + as_echo='printf %s\n' + as_echo_n='printf %s' +else + if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then + as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"' + as_echo_n='/usr/ucb/echo -n' + else + as_echo_body='eval expr "X$1" : "X\\(.*\\)"' + as_echo_n_body='eval + arg=$1; + case $arg in #( + *"$as_nl"*) + expr "X$arg" : "X\\(.*\\)$as_nl"; + arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;; + esac; + expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl" + ' + export as_echo_n_body + as_echo_n='sh -c $as_echo_n_body as_echo' fi - rm -f conf$$.sh + export as_echo_body + as_echo='sh -c $as_echo_body as_echo' fi -# Support unset when possible. -if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then - as_unset=unset -else - as_unset=false +# The user is always right. +if test "${PATH_SEPARATOR+set}" != set; then + PATH_SEPARATOR=: + (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { + (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || + PATH_SEPARATOR=';' + } fi @@ -23107,20 +6433,18 @@ # there to prevent editors from complaining about space-tab. # (If _AS_PATH_WALK were called with IFS unset, it would disable word # splitting by setting IFS to empty value.) -as_nl=' -' IFS=" "" $as_nl" # Find who we are. Look in the path if we contain no directory separator. -case $0 in +case $0 in #(( *[\\/]* ) as_myself=$0 ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. - test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break -done + test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break + done IFS=$as_save_IFS ;; @@ -23131,164 +6455,246 @@ as_myself=$0 fi if test ! -f "$as_myself"; then - echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 - { (exit 1); exit 1; } + $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 + exit 1 fi -# Work around bugs in pre-3.0 UWIN ksh. -for as_var in ENV MAIL MAILPATH -do ($as_unset $as_var) >/dev/null 2>&1 && $as_unset $as_var +# Unset variables that we do not need and which cause bugs (e.g. in +# pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1" +# suppresses any "Segmentation fault" message there. '((' could +# trigger a bug in pdksh 5.2.14. +for as_var in BASH_ENV ENV MAIL MAILPATH +do eval test x\${$as_var+set} = xset \ + && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : done PS1='$ ' PS2='> ' PS4='+ ' # NLS nuisances. -for as_var in \ - LANG LANGUAGE LC_ADDRESS LC_ALL LC_COLLATE LC_CTYPE LC_IDENTIFICATION \ - LC_MEASUREMENT LC_MESSAGES LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER \ - LC_TELEPHONE LC_TIME -do - if (set +x; test -z "`(eval $as_var=C; export $as_var) 2>&1`"); then - eval $as_var=C; export $as_var - else - ($as_unset $as_var) >/dev/null 2>&1 && $as_unset $as_var - fi -done - -# Required to use basename. -if expr a : '\(a\)' >/dev/null 2>&1 && - test "X`expr 00001 : '.*\(...\)'`" = X001; then - as_expr=expr -else - as_expr=false -fi - -if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then - as_basename=basename -else - as_basename=false -fi - - -# Name of the executable. -as_me=`$as_basename -- "$0" || -$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ - X"$0" : 'X\(//\)$' \| \ - X"$0" : 'X\(/\)' \| . 2>/dev/null || -echo X/"$0" | - sed '/^.*\/\([^/][^/]*\)\/*$/{ - s//\1/ - q - } - /^X\/\(\/\/\)$/{ - s//\1/ - q - } - /^X\/\(\/\).*/{ - s//\1/ - q - } - s/.*/./; q'` +LC_ALL=C +export LC_ALL +LANGUAGE=C +export LANGUAGE # CDPATH. -$as_unset CDPATH - +(unset CDPATH) >/dev/null 2>&1 && unset CDPATH - as_lineno_1=$LINENO - as_lineno_2=$LINENO - test "x$as_lineno_1" != "x$as_lineno_2" && - test "x`expr $as_lineno_1 + 1`" = "x$as_lineno_2" || { - - # Create $as_me.lineno as a copy of $as_myself, but with $LINENO - # uniformly replaced by the line number. The first 'sed' inserts a - # line-number line after each line using $LINENO; the second 'sed' - # does the real work. The second script uses 'N' to pair each - # line-number line with the line containing $LINENO, and appends - # trailing '-' during substitution so that $LINENO is not a special - # case at line end. - # (Raja R Harinath suggested sed '=', and Paul Eggert wrote the - # scripts with optimization help from Paolo Bonzini. Blame Lee - # E. McMahon (1931-1989) for sed's syntax. :-) - sed -n ' - p - /[$]LINENO/= - ' <$as_myself | - sed ' - s/[$]LINENO.*/&-/ - t lineno - b - :lineno - N - :loop - s/[$]LINENO\([^'$as_cr_alnum'_].*\n\)\(.*\)/\2\1\2/ - t loop - s/-\n.*// - ' >$as_me.lineno && - chmod +x "$as_me.lineno" || - { echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2 - { (exit 1); exit 1; }; } +# as_fn_error ERROR [LINENO LOG_FD] +# --------------------------------- +# Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are +# provided, also output the error to LOG_FD, referencing LINENO. Then exit the +# script with status $?, using 1 if that was 0. +as_fn_error () +{ + as_status=$?; test $as_status -eq 0 && as_status=1 + if test "$3"; then + as_lineno=${as_lineno-"$2"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + $as_echo "$as_me:${as_lineno-$LINENO}: error: $1" >&$3 + fi + $as_echo "$as_me: error: $1" >&2 + as_fn_exit $as_status +} # as_fn_error + + +# as_fn_set_status STATUS +# ----------------------- +# Set $? to STATUS, without forking. +as_fn_set_status () +{ + return $1 +} # as_fn_set_status + +# as_fn_exit STATUS +# ----------------- +# Exit the shell with STATUS, even in a "trap 0" or "set -e" context. +as_fn_exit () +{ + set +e + as_fn_set_status $1 + exit $1 +} # as_fn_exit + +# as_fn_unset VAR +# --------------- +# Portably unset VAR. +as_fn_unset () +{ + { eval $1=; unset $1;} +} +as_unset=as_fn_unset +# as_fn_append VAR VALUE +# ---------------------- +# Append the text in VALUE to the end of the definition contained in VAR. Take +# advantage of any shell optimizations that allow amortized linear growth over +# repeated appends, instead of the typical quadratic growth present in naive +# implementations. +if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then : + eval 'as_fn_append () + { + eval $1+=\$2 + }' +else + as_fn_append () + { + eval $1=\$$1\$2 + } +fi # as_fn_append - # Don't try to exec as it changes $[0], causing all sort of problems - # (the dirname of $[0] is not the place where we might find the - # original and so on. Autoconf is especially sensitive to this). - . "./$as_me.lineno" - # Exit status is that of the last command. - exit -} +# as_fn_arith ARG... +# ------------------ +# Perform arithmetic evaluation on the ARGs, and store the result in the +# global $as_val. Take advantage of shells that can avoid forks. The arguments +# must be portable across $(()) and expr. +if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then : + eval 'as_fn_arith () + { + as_val=$(( $* )) + }' +else + as_fn_arith () + { + as_val=`expr "$@" || test $? -eq 1` + } +fi # as_fn_arith +if expr a : '\(a\)' >/dev/null 2>&1 && + test "X`expr 00001 : '.*\(...\)'`" = X001; then + as_expr=expr +else + as_expr=false +fi + +if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then + as_basename=basename +else + as_basename=false +fi + if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then as_dirname=dirname else as_dirname=false fi +as_me=`$as_basename -- "$0" || +$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ + X"$0" : 'X\(//\)$' \| \ + X"$0" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X/"$0" | + sed '/^.*\/\([^/][^/]*\)\/*$/{ + s//\1/ + q + } + /^X\/\(\/\/\)$/{ + s//\1/ + q + } + /^X\/\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + +# Avoid depending upon Character Ranges. +as_cr_letters='abcdefghijklmnopqrstuvwxyz' +as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' +as_cr_Letters=$as_cr_letters$as_cr_LETTERS +as_cr_digits='0123456789' +as_cr_alnum=$as_cr_Letters$as_cr_digits + ECHO_C= ECHO_N= ECHO_T= -case `echo -n x` in +case `echo -n x` in #((((( -n*) - case `echo 'x\c'` in + case `echo 'xy\c'` in *c*) ECHO_T=' ';; # ECHO_T is single tab character. - *) ECHO_C='\c';; + xy) ECHO_C='\c';; + *) echo `echo ksh88 bug on AIX 6.1` > /dev/null + ECHO_T=' ';; esac;; *) ECHO_N='-n';; esac -if expr a : '\(a\)' >/dev/null 2>&1 && - test "X`expr 00001 : '.*\(...\)'`" = X001; then - as_expr=expr -else - as_expr=false -fi - rm -f conf$$ conf$$.exe conf$$.file if test -d conf$$.dir; then rm -f conf$$.dir/conf$$.file else rm -f conf$$.dir - mkdir conf$$.dir + mkdir conf$$.dir 2>/dev/null fi -echo >conf$$.file -if ln -s conf$$.file conf$$ 2>/dev/null; then - as_ln_s='ln -s' - # ... but there are two gotchas: - # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. - # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. - # In both cases, we have to default to `cp -p'. - ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || +if (echo >conf$$.file) 2>/dev/null; then + if ln -s conf$$.file conf$$ 2>/dev/null; then + as_ln_s='ln -s' + # ... but there are two gotchas: + # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. + # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. + # In both cases, we have to default to `cp -p'. + ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || + as_ln_s='cp -p' + elif ln conf$$.file conf$$ 2>/dev/null; then + as_ln_s=ln + else as_ln_s='cp -p' -elif ln conf$$.file conf$$ 2>/dev/null; then - as_ln_s=ln + fi else as_ln_s='cp -p' fi rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file rmdir conf$$.dir 2>/dev/null + +# as_fn_mkdir_p +# ------------- +# Create "$as_dir" as a directory, including parents if necessary. +as_fn_mkdir_p () +{ + + case $as_dir in #( + -*) as_dir=./$as_dir;; + esac + test -d "$as_dir" || eval $as_mkdir_p || { + as_dirs= + while :; do + case $as_dir in #( + *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( + *) as_qdir=$as_dir;; + esac + as_dirs="'$as_qdir' $as_dirs" + as_dir=`$as_dirname -- "$as_dir" || +$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$as_dir" : 'X\(//\)[^/]' \| \ + X"$as_dir" : 'X\(//\)$' \| \ + X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X"$as_dir" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + test -d "$as_dir" && break + done + test -z "$as_dirs" || eval "mkdir $as_dirs" + } || test -d "$as_dir" || as_fn_error "cannot create directory $as_dir" + + +} # as_fn_mkdir_p if mkdir -p . 2>/dev/null; then - as_mkdir_p=: + as_mkdir_p='mkdir -p "$as_dir"' else test -d ./-p && rmdir ./-p as_mkdir_p=false @@ -23305,12 +6711,12 @@ as_test_x=' eval sh -c '\'' if test -d "$1"; then - test -d "$1/."; + test -d "$1/."; else - case $1 in - -*)set "./$1";; + case $1 in #( + -*)set "./$1";; esac; - case `ls -ld'$as_ls_L_option' "$1" 2>/dev/null` in + case `ls -ld'$as_ls_L_option' "$1" 2>/dev/null` in #(( ???[sx]*):;;*)false;;esac;fi '\'' sh ' @@ -23325,13 +6731,19 @@ exec 6>&1 +## ----------------------------------- ## +## Main body of $CONFIG_STATUS script. ## +## ----------------------------------- ## +_ASEOF +test $as_write_fail = 0 && chmod +x $CONFIG_STATUS || ac_write_fail=1 -# Save the log message, to keep $[0] and so on meaningful, and to +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +# Save the log message, to keep $0 and so on meaningful, and to # report actual input values of CONFIG_FILES etc. instead of their # values after options handling. ac_log=" -This file was extended by libffi $as_me 3.0.5, which was -generated by GNU Autoconf 2.61. Invocation command line was +This file was extended by libffi $as_me 3.0.9, which was +generated by GNU Autoconf 2.65. Invocation command line was CONFIG_FILES = $CONFIG_FILES CONFIG_HEADERS = $CONFIG_HEADERS @@ -23344,7 +6756,16 @@ _ACEOF -cat >>$CONFIG_STATUS <<_ACEOF +case $ac_config_files in *" +"*) set x $ac_config_files; shift; ac_config_files=$*;; +esac + +case $ac_config_headers in *" +"*) set x $ac_config_headers; shift; ac_config_headers=$*;; +esac + + +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 # Files that config.status was made for. config_files="$ac_config_files" config_headers="$ac_config_headers" @@ -23353,22 +6774,25 @@ _ACEOF -cat >>$CONFIG_STATUS <<\_ACEOF +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 ac_cs_usage="\ -\`$as_me' instantiates files from templates according to the -current configuration. +\`$as_me' instantiates files and other configuration actions +from templates according to the current configuration. Unless the files +and actions are specified as TAGs, all are instantiated by default. -Usage: $0 [OPTIONS] [FILE]... +Usage: $0 [OPTION]... [TAG]... -h, --help print this help, then exit -V, --version print version number and configuration settings, then exit - -q, --quiet do not print progress messages + --config print configuration, then exit + -q, --quiet, --silent + do not print progress messages -d, --debug don't remove temporary files --recheck update $as_me by reconfiguring in the same conditions - --file=FILE[:TEMPLATE] - instantiate the configuration file FILE - --header=FILE[:TEMPLATE] - instantiate the configuration header FILE + --file=FILE[:TEMPLATE] + instantiate the configuration file FILE + --header=FILE[:TEMPLATE] + instantiate the configuration header FILE Configuration files: $config_files @@ -23382,16 +6806,17 @@ Configuration commands: $config_commands -Report bugs to ." +Report bugs to ." _ACEOF -cat >>$CONFIG_STATUS <<_ACEOF +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 +ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`" ac_cs_version="\\ -libffi config.status 3.0.5 -configured by $0, generated by GNU Autoconf 2.61, - with options \\"`echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`\\" +libffi config.status 3.0.9 +configured by $0, generated by GNU Autoconf 2.65, + with options \\"\$ac_cs_config\\" -Copyright (C) 2006 Free Software Foundation, Inc. +Copyright (C) 2009 Free Software Foundation, Inc. This config.status script is free software; the Free Software Foundation gives unlimited permission to copy, distribute and modify it." @@ -23399,11 +6824,12 @@ srcdir='$srcdir' INSTALL='$INSTALL' MKDIR_P='$MKDIR_P' +AWK='$AWK' +test -n "\$AWK" || AWK=awk _ACEOF -cat >>$CONFIG_STATUS <<\_ACEOF -# If no file are specified by the user, then we need to provide default -# value. By we need to know if files were specified by the user. +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +# The default lists apply if the user does not specify any file. ac_need_defaults=: while test $# != 0 do @@ -23425,34 +6851,40 @@ -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r) ac_cs_recheck=: ;; --version | --versio | --versi | --vers | --ver | --ve | --v | -V ) - echo "$ac_cs_version"; exit ;; + $as_echo "$ac_cs_version"; exit ;; + --config | --confi | --conf | --con | --co | --c ) + $as_echo "$ac_cs_config"; exit ;; --debug | --debu | --deb | --de | --d | -d ) debug=: ;; --file | --fil | --fi | --f ) $ac_shift - CONFIG_FILES="$CONFIG_FILES $ac_optarg" + case $ac_optarg in + *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; + esac + as_fn_append CONFIG_FILES " '$ac_optarg'" ac_need_defaults=false;; --header | --heade | --head | --hea ) $ac_shift - CONFIG_HEADERS="$CONFIG_HEADERS $ac_optarg" + case $ac_optarg in + *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; + esac + as_fn_append CONFIG_HEADERS " '$ac_optarg'" ac_need_defaults=false;; --he | --h) # Conflict between --help and --header - { echo "$as_me: error: ambiguous option: $1 -Try \`$0 --help' for more information." >&2 - { (exit 1); exit 1; }; };; + as_fn_error "ambiguous option: \`$1' +Try \`$0 --help' for more information.";; --help | --hel | -h ) - echo "$ac_cs_usage"; exit ;; + $as_echo "$ac_cs_usage"; exit ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil | --si | --s) ac_cs_silent=: ;; # This is an error. - -*) { echo "$as_me: error: unrecognized option: $1 -Try \`$0 --help' for more information." >&2 - { (exit 1); exit 1; }; } ;; + -*) as_fn_error "unrecognized option: \`$1' +Try \`$0 --help' for more information." ;; - *) ac_config_targets="$ac_config_targets $1" + *) as_fn_append ac_config_targets " $1" ac_need_defaults=false ;; esac @@ -23467,27 +6899,29 @@ fi _ACEOF -cat >>$CONFIG_STATUS <<_ACEOF +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 if \$ac_cs_recheck; then - echo "running CONFIG_SHELL=$SHELL $SHELL $0 "$ac_configure_args \$ac_configure_extra_args " --no-create --no-recursion" >&6 - CONFIG_SHELL=$SHELL + set X '$SHELL' '$0' $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion + shift + \$as_echo "running CONFIG_SHELL=$SHELL \$*" >&6 + CONFIG_SHELL='$SHELL' export CONFIG_SHELL - exec $SHELL "$0"$ac_configure_args \$ac_configure_extra_args --no-create --no-recursion + exec "\$@" fi _ACEOF -cat >>$CONFIG_STATUS <<\_ACEOF +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 exec 5>>config.log { echo sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX ## Running $as_me. ## _ASBOX - echo "$ac_log" + $as_echo "$ac_log" } >&5 _ACEOF -cat >>$CONFIG_STATUS <<_ACEOF +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 # # INIT-COMMANDS # @@ -23496,7 +6930,7 @@ _ACEOF -cat >>$CONFIG_STATUS <<\_ACEOF +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # Handling of arguments. for ac_config_target in $ac_config_targets @@ -23511,9 +6945,7 @@ "include/ffi_common.h") CONFIG_LINKS="$CONFIG_LINKS include/ffi_common.h:include/ffi_common.h" ;; "fficonfig.py") CONFIG_FILES="$CONFIG_FILES fficonfig.py" ;; - *) { { echo "$as_me:$LINENO: error: invalid argument: $ac_config_target" >&5 -echo "$as_me: error: invalid argument: $ac_config_target" >&2;} - { (exit 1); exit 1; }; };; + *) as_fn_error "invalid argument: \`$ac_config_target'" "$LINENO" 5;; esac done @@ -23541,7 +6973,7 @@ trap 'exit_status=$? { test -z "$tmp" || test ! -d "$tmp" || rm -fr "$tmp"; } && exit $exit_status ' 0 - trap '{ (exit 1); exit 1; }' 1 2 13 15 + trap 'as_fn_exit 1' 1 2 13 15 } # Create a (secure) tmp directory for tmp files. @@ -23552,280 +6984,139 @@ { tmp=./conf$$-$RANDOM (umask 077 && mkdir "$tmp") -} || -{ - echo "$me: cannot create a temporary directory in ." >&2 - { (exit 1); exit 1; } -} - -# -# Set up the sed scripts for CONFIG_FILES section. -# +} || as_fn_error "cannot create a temporary directory in ." "$LINENO" 5 -# No need to generate the scripts if there are no CONFIG_FILES. -# This happens for instance when ./config.status config.h +# Set up the scripts for CONFIG_FILES section. +# No need to generate them if there are no CONFIG_FILES. +# This happens for instance with `./config.status config.h'. if test -n "$CONFIG_FILES"; then -_ACEOF - - - -ac_delim='%!_!# ' -for ac_last_try in false false false false false :; do - cat >conf$$subs.sed <<_ACEOF -SHELL!$SHELL$ac_delim -PATH_SEPARATOR!$PATH_SEPARATOR$ac_delim -PACKAGE_NAME!$PACKAGE_NAME$ac_delim -PACKAGE_TARNAME!$PACKAGE_TARNAME$ac_delim -PACKAGE_VERSION!$PACKAGE_VERSION$ac_delim -PACKAGE_STRING!$PACKAGE_STRING$ac_delim -PACKAGE_BUGREPORT!$PACKAGE_BUGREPORT$ac_delim -exec_prefix!$exec_prefix$ac_delim -prefix!$prefix$ac_delim -program_transform_name!$program_transform_name$ac_delim -bindir!$bindir$ac_delim -sbindir!$sbindir$ac_delim -libexecdir!$libexecdir$ac_delim -datarootdir!$datarootdir$ac_delim -datadir!$datadir$ac_delim -sysconfdir!$sysconfdir$ac_delim -sharedstatedir!$sharedstatedir$ac_delim -localstatedir!$localstatedir$ac_delim -includedir!$includedir$ac_delim -oldincludedir!$oldincludedir$ac_delim -docdir!$docdir$ac_delim -infodir!$infodir$ac_delim -htmldir!$htmldir$ac_delim -dvidir!$dvidir$ac_delim -pdfdir!$pdfdir$ac_delim -psdir!$psdir$ac_delim -libdir!$libdir$ac_delim -localedir!$localedir$ac_delim -mandir!$mandir$ac_delim -DEFS!$DEFS$ac_delim -ECHO_C!$ECHO_C$ac_delim -ECHO_N!$ECHO_N$ac_delim -ECHO_T!$ECHO_T$ac_delim -LIBS!$LIBS$ac_delim -build_alias!$build_alias$ac_delim -host_alias!$host_alias$ac_delim -target_alias!$target_alias$ac_delim -build!$build$ac_delim -build_cpu!$build_cpu$ac_delim -build_vendor!$build_vendor$ac_delim -build_os!$build_os$ac_delim -host!$host$ac_delim -host_cpu!$host_cpu$ac_delim -host_vendor!$host_vendor$ac_delim -host_os!$host_os$ac_delim -target!$target$ac_delim -target_cpu!$target_cpu$ac_delim -target_vendor!$target_vendor$ac_delim -target_os!$target_os$ac_delim -INSTALL_PROGRAM!$INSTALL_PROGRAM$ac_delim -INSTALL_SCRIPT!$INSTALL_SCRIPT$ac_delim -INSTALL_DATA!$INSTALL_DATA$ac_delim -am__isrc!$am__isrc$ac_delim -CYGPATH_W!$CYGPATH_W$ac_delim -PACKAGE!$PACKAGE$ac_delim -VERSION!$VERSION$ac_delim -ACLOCAL!$ACLOCAL$ac_delim -AUTOCONF!$AUTOCONF$ac_delim -AUTOMAKE!$AUTOMAKE$ac_delim -AUTOHEADER!$AUTOHEADER$ac_delim -MAKEINFO!$MAKEINFO$ac_delim -install_sh!$install_sh$ac_delim -STRIP!$STRIP$ac_delim -INSTALL_STRIP_PROGRAM!$INSTALL_STRIP_PROGRAM$ac_delim -mkdir_p!$mkdir_p$ac_delim -AWK!$AWK$ac_delim -SET_MAKE!$SET_MAKE$ac_delim -am__leading_dot!$am__leading_dot$ac_delim -AMTAR!$AMTAR$ac_delim -am__tar!$am__tar$ac_delim -am__untar!$am__untar$ac_delim -CC!$CC$ac_delim -CFLAGS!$CFLAGS$ac_delim -LDFLAGS!$LDFLAGS$ac_delim -CPPFLAGS!$CPPFLAGS$ac_delim -ac_ct_CC!$ac_ct_CC$ac_delim -EXEEXT!$EXEEXT$ac_delim -OBJEXT!$OBJEXT$ac_delim -DEPDIR!$DEPDIR$ac_delim -am__include!$am__include$ac_delim -am__quote!$am__quote$ac_delim -AMDEP_TRUE!$AMDEP_TRUE$ac_delim -AMDEP_FALSE!$AMDEP_FALSE$ac_delim -AMDEPBACKSLASH!$AMDEPBACKSLASH$ac_delim -CCDEPMODE!$CCDEPMODE$ac_delim -am__fastdepCC_TRUE!$am__fastdepCC_TRUE$ac_delim -am__fastdepCC_FALSE!$am__fastdepCC_FALSE$ac_delim -CCAS!$CCAS$ac_delim -CCASFLAGS!$CCASFLAGS$ac_delim -CCASDEPMODE!$CCASDEPMODE$ac_delim -am__fastdepCCAS_TRUE!$am__fastdepCCAS_TRUE$ac_delim -am__fastdepCCAS_FALSE!$am__fastdepCCAS_FALSE$ac_delim -SED!$SED$ac_delim -GREP!$GREP$ac_delim -EGREP!$EGREP$ac_delim -LN_S!$LN_S$ac_delim -ECHO!$ECHO$ac_delim -_ACEOF - - if test `sed -n "s/.*$ac_delim\$/X/p" conf$$subs.sed | grep -c X` = 97; then - break - elif $ac_last_try; then - { { echo "$as_me:$LINENO: error: could not make $CONFIG_STATUS" >&5 -echo "$as_me: error: could not make $CONFIG_STATUS" >&2;} - { (exit 1); exit 1; }; } - else - ac_delim="$ac_delim!$ac_delim _$ac_delim!! " - fi -done -ac_eof=`sed -n '/^CEOF[0-9]*$/s/CEOF/0/p' conf$$subs.sed` -if test -n "$ac_eof"; then - ac_eof=`echo "$ac_eof" | sort -nru | sed 1q` - ac_eof=`expr $ac_eof + 1` +ac_cr=`echo X | tr X '\015'` +# On cygwin, bash can eat \r inside `` if the user requested igncr. +# But we know of no other shell where ac_cr would be empty at this +# point, so we can use a bashism as a fallback. +if test "x$ac_cr" = x; then + eval ac_cr=\$\'\\r\' +fi +ac_cs_awk_cr=`$AWK 'BEGIN { print "a\rb" }' /dev/null` +if test "$ac_cs_awk_cr" = "a${ac_cr}b"; then + ac_cs_awk_cr='\r' +else + ac_cs_awk_cr=$ac_cr fi -cat >>$CONFIG_STATUS <<_ACEOF -cat >"\$tmp/subs-1.sed" <<\CEOF$ac_eof -/@[a-zA-Z_][a-zA-Z_0-9]*@/!b -_ACEOF -sed ' -s/[,\\&]/\\&/g; s/@/@|#_!!_#|/g -s/^/s,@/; s/!/@,|#_!!_#|/ -:n -t n -s/'"$ac_delim"'$/,g/; t -s/$/\\/; p -N; s/^.*\n//; s/[,\\&]/\\&/g; s/@/@|#_!!_#|/g; b n -' >>$CONFIG_STATUS >$CONFIG_STATUS <<_ACEOF -CEOF$ac_eof +echo 'BEGIN {' >"$tmp/subs1.awk" && _ACEOF +{ + echo "cat >conf$$subs.awk <<_ACEOF" && + echo "$ac_subst_vars" | sed 's/.*/&!$&$ac_delim/' && + echo "_ACEOF" +} >conf$$subs.sh || + as_fn_error "could not make $CONFIG_STATUS" "$LINENO" 5 +ac_delim_num=`echo "$ac_subst_vars" | grep -c '$'` ac_delim='%!_!# ' for ac_last_try in false false false false false :; do - cat >conf$$subs.sed <<_ACEOF -AR!$AR$ac_delim -RANLIB!$RANLIB$ac_delim -CPP!$CPP$ac_delim -CXX!$CXX$ac_delim -CXXFLAGS!$CXXFLAGS$ac_delim -ac_ct_CXX!$ac_ct_CXX$ac_delim -CXXDEPMODE!$CXXDEPMODE$ac_delim -am__fastdepCXX_TRUE!$am__fastdepCXX_TRUE$ac_delim -am__fastdepCXX_FALSE!$am__fastdepCXX_FALSE$ac_delim -CXXCPP!$CXXCPP$ac_delim -F77!$F77$ac_delim -FFLAGS!$FFLAGS$ac_delim -ac_ct_F77!$ac_ct_F77$ac_delim -LIBTOOL!$LIBTOOL$ac_delim -MAINTAINER_MODE_TRUE!$MAINTAINER_MODE_TRUE$ac_delim -MAINTAINER_MODE_FALSE!$MAINTAINER_MODE_FALSE$ac_delim -MAINT!$MAINT$ac_delim -TESTSUBDIR_TRUE!$TESTSUBDIR_TRUE$ac_delim -TESTSUBDIR_FALSE!$TESTSUBDIR_FALSE$ac_delim -AM_RUNTESTFLAGS!$AM_RUNTESTFLAGS$ac_delim -MIPS_TRUE!$MIPS_TRUE$ac_delim -MIPS_FALSE!$MIPS_FALSE$ac_delim -SPARC_TRUE!$SPARC_TRUE$ac_delim -SPARC_FALSE!$SPARC_FALSE$ac_delim -X86_TRUE!$X86_TRUE$ac_delim -X86_FALSE!$X86_FALSE$ac_delim -X86_FREEBSD_TRUE!$X86_FREEBSD_TRUE$ac_delim -X86_FREEBSD_FALSE!$X86_FREEBSD_FALSE$ac_delim -X86_WIN32_TRUE!$X86_WIN32_TRUE$ac_delim -X86_WIN32_FALSE!$X86_WIN32_FALSE$ac_delim -X86_DARWIN_TRUE!$X86_DARWIN_TRUE$ac_delim -X86_DARWIN_FALSE!$X86_DARWIN_FALSE$ac_delim -ALPHA_TRUE!$ALPHA_TRUE$ac_delim -ALPHA_FALSE!$ALPHA_FALSE$ac_delim -IA64_TRUE!$IA64_TRUE$ac_delim -IA64_FALSE!$IA64_FALSE$ac_delim -M32R_TRUE!$M32R_TRUE$ac_delim -M32R_FALSE!$M32R_FALSE$ac_delim -M68K_TRUE!$M68K_TRUE$ac_delim -M68K_FALSE!$M68K_FALSE$ac_delim -POWERPC_TRUE!$POWERPC_TRUE$ac_delim -POWERPC_FALSE!$POWERPC_FALSE$ac_delim -POWERPC_AIX_TRUE!$POWERPC_AIX_TRUE$ac_delim -POWERPC_AIX_FALSE!$POWERPC_AIX_FALSE$ac_delim -POWERPC_DARWIN_TRUE!$POWERPC_DARWIN_TRUE$ac_delim -POWERPC_DARWIN_FALSE!$POWERPC_DARWIN_FALSE$ac_delim -POWERPC_FREEBSD_TRUE!$POWERPC_FREEBSD_TRUE$ac_delim -POWERPC_FREEBSD_FALSE!$POWERPC_FREEBSD_FALSE$ac_delim -ARM_TRUE!$ARM_TRUE$ac_delim -ARM_FALSE!$ARM_FALSE$ac_delim -LIBFFI_CRIS_TRUE!$LIBFFI_CRIS_TRUE$ac_delim -LIBFFI_CRIS_FALSE!$LIBFFI_CRIS_FALSE$ac_delim -FRV_TRUE!$FRV_TRUE$ac_delim -FRV_FALSE!$FRV_FALSE$ac_delim -S390_TRUE!$S390_TRUE$ac_delim -S390_FALSE!$S390_FALSE$ac_delim -X86_64_TRUE!$X86_64_TRUE$ac_delim -X86_64_FALSE!$X86_64_FALSE$ac_delim -SH_TRUE!$SH_TRUE$ac_delim -SH_FALSE!$SH_FALSE$ac_delim -SH64_TRUE!$SH64_TRUE$ac_delim -SH64_FALSE!$SH64_FALSE$ac_delim -PA_LINUX_TRUE!$PA_LINUX_TRUE$ac_delim -PA_LINUX_FALSE!$PA_LINUX_FALSE$ac_delim -PA_HPUX_TRUE!$PA_HPUX_TRUE$ac_delim -PA_HPUX_FALSE!$PA_HPUX_FALSE$ac_delim -PA64_HPUX_TRUE!$PA64_HPUX_TRUE$ac_delim -PA64_HPUX_FALSE!$PA64_HPUX_FALSE$ac_delim -ALLOCA!$ALLOCA$ac_delim -HAVE_LONG_DOUBLE!$HAVE_LONG_DOUBLE$ac_delim -TARGET!$TARGET$ac_delim -TARGETDIR!$TARGETDIR$ac_delim -toolexecdir!$toolexecdir$ac_delim -toolexeclibdir!$toolexeclibdir$ac_delim -LIBOBJS!$LIBOBJS$ac_delim -LTLIBOBJS!$LTLIBOBJS$ac_delim -_ACEOF + . ./conf$$subs.sh || + as_fn_error "could not make $CONFIG_STATUS" "$LINENO" 5 - if test `sed -n "s/.*$ac_delim\$/X/p" conf$$subs.sed | grep -c X` = 76; then + ac_delim_n=`sed -n "s/.*$ac_delim\$/X/p" conf$$subs.awk | grep -c X` + if test $ac_delim_n = $ac_delim_num; then break elif $ac_last_try; then - { { echo "$as_me:$LINENO: error: could not make $CONFIG_STATUS" >&5 -echo "$as_me: error: could not make $CONFIG_STATUS" >&2;} - { (exit 1); exit 1; }; } + as_fn_error "could not make $CONFIG_STATUS" "$LINENO" 5 else ac_delim="$ac_delim!$ac_delim _$ac_delim!! " fi done +rm -f conf$$subs.sh -ac_eof=`sed -n '/^CEOF[0-9]*$/s/CEOF/0/p' conf$$subs.sed` -if test -n "$ac_eof"; then - ac_eof=`echo "$ac_eof" | sort -nru | sed 1q` - ac_eof=`expr $ac_eof + 1` -fi - -cat >>$CONFIG_STATUS <<_ACEOF -cat >"\$tmp/subs-2.sed" <<\CEOF$ac_eof -/@[a-zA-Z_][a-zA-Z_0-9]*@/!b end -_ACEOF -sed ' -s/[,\\&]/\\&/g; s/@/@|#_!!_#|/g -s/^/s,@/; s/!/@,|#_!!_#|/ -:n -t n -s/'"$ac_delim"'$/,g/; t -s/$/\\/; p -N; s/^.*\n//; s/[,\\&]/\\&/g; s/@/@|#_!!_#|/g; b n -' >>$CONFIG_STATUS >$CONFIG_STATUS <<_ACEOF -:end -s/|#_!!_#|//g -CEOF$ac_eof +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 +cat >>"\$tmp/subs1.awk" <<\\_ACAWK && _ACEOF +sed -n ' +h +s/^/S["/; s/!.*/"]=/ +p +g +s/^[^!]*!// +:repl +t repl +s/'"$ac_delim"'$// +t delim +:nl +h +s/\(.\{148\}\)..*/\1/ +t more1 +s/["\\]/\\&/g; s/^/"/; s/$/\\n"\\/ +p +n +b repl +:more1 +s/["\\]/\\&/g; s/^/"/; s/$/"\\/ +p +g +s/.\{148\}// +t nl +:delim +h +s/\(.\{148\}\)..*/\1/ +t more2 +s/["\\]/\\&/g; s/^/"/; s/$/"/ +p +b +:more2 +s/["\\]/\\&/g; s/^/"/; s/$/"\\/ +p +g +s/.\{148\}// +t delim +' >$CONFIG_STATUS || ac_write_fail=1 +rm -f conf$$subs.awk +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 +_ACAWK +cat >>"\$tmp/subs1.awk" <<_ACAWK && + for (key in S) S_is_set[key] = 1 + FS = "" + +} +{ + line = $ 0 + nfields = split(line, field, "@") + substed = 0 + len = length(field[1]) + for (i = 2; i < nfields; i++) { + key = field[i] + keylen = length(key) + if (S_is_set[key]) { + value = S[key] + line = substr(line, 1, len) "" value "" substr(line, len + keylen + 3) + len += length(value) + length(field[++i]) + substed = 1 + } else + len += 1 + keylen + } + + print line +} +_ACAWK +_ACEOF +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +if sed "s/$ac_cr//" < /dev/null > /dev/null 2>&1; then + sed "s/$ac_cr\$//; s/$ac_cr/$ac_cs_awk_cr/g" +else + cat +fi < "$tmp/subs1.awk" > "$tmp/subs.awk" \ + || as_fn_error "could not setup config files machinery" "$LINENO" 5 +_ACEOF # VPATH may cause trouble with some makes, so we remove $(srcdir), # ${srcdir} and @srcdir@ from VPATH if srcdir is ".", strip leading and @@ -23842,20 +7133,128 @@ }' fi -cat >>$CONFIG_STATUS <<\_ACEOF +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 fi # test -n "$CONFIG_FILES" +# Set up the scripts for CONFIG_HEADERS section. +# No need to generate them if there are no CONFIG_HEADERS. +# This happens for instance with `./config.status Makefile'. +if test -n "$CONFIG_HEADERS"; then +cat >"$tmp/defines.awk" <<\_ACAWK || +BEGIN { +_ACEOF + +# Transform confdefs.h into an awk script `defines.awk', embedded as +# here-document in config.status, that substitutes the proper values into +# config.h.in to produce config.h. + +# Create a delimiter string that does not exist in confdefs.h, to ease +# handling of long lines. +ac_delim='%!_!# ' +for ac_last_try in false false :; do + ac_t=`sed -n "/$ac_delim/p" confdefs.h` + if test -z "$ac_t"; then + break + elif $ac_last_try; then + as_fn_error "could not make $CONFIG_HEADERS" "$LINENO" 5 + else + ac_delim="$ac_delim!$ac_delim _$ac_delim!! " + fi +done + +# For the awk script, D is an array of macro values keyed by name, +# likewise P contains macro parameters if any. Preserve backslash +# newline sequences. + +ac_word_re=[_$as_cr_Letters][_$as_cr_alnum]* +sed -n ' +s/.\{148\}/&'"$ac_delim"'/g +t rset +:rset +s/^[ ]*#[ ]*define[ ][ ]*/ / +t def +d +:def +s/\\$// +t bsnl +s/["\\]/\\&/g +s/^ \('"$ac_word_re"'\)\(([^()]*)\)[ ]*\(.*\)/P["\1"]="\2"\ +D["\1"]=" \3"/p +s/^ \('"$ac_word_re"'\)[ ]*\(.*\)/D["\1"]=" \2"/p +d +:bsnl +s/["\\]/\\&/g +s/^ \('"$ac_word_re"'\)\(([^()]*)\)[ ]*\(.*\)/P["\1"]="\2"\ +D["\1"]=" \3\\\\\\n"\\/p +t cont +s/^ \('"$ac_word_re"'\)[ ]*\(.*\)/D["\1"]=" \2\\\\\\n"\\/p +t cont +d +:cont +n +s/.\{148\}/&'"$ac_delim"'/g +t clear +:clear +s/\\$// +t bsnlc +s/["\\]/\\&/g; s/^/"/; s/$/"/p +d +:bsnlc +s/["\\]/\\&/g; s/^/"/; s/$/\\\\\\n"\\/p +b cont +' >$CONFIG_STATUS || ac_write_fail=1 + +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 + for (key in D) D_is_set[key] = 1 + FS = "" +} +/^[\t ]*#[\t ]*(define|undef)[\t ]+$ac_word_re([\t (]|\$)/ { + line = \$ 0 + split(line, arg, " ") + if (arg[1] == "#") { + defundef = arg[2] + mac1 = arg[3] + } else { + defundef = substr(arg[1], 2) + mac1 = arg[2] + } + split(mac1, mac2, "(") #) + macro = mac2[1] + prefix = substr(line, 1, index(line, defundef) - 1) + if (D_is_set[macro]) { + # Preserve the white space surrounding the "#". + print prefix "define", macro P[macro] D[macro] + next + } else { + # Replace #undef with comments. This is necessary, for example, + # in the case of _POSIX_SOURCE, which is predefined and required + # on some systems where configure will not decide to define it. + if (defundef == "undef") { + print "/*", prefix defundef, macro, "*/" + next + } + } +} +{ print } +_ACAWK +_ACEOF +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 + as_fn_error "could not setup config headers machinery" "$LINENO" 5 +fi # test -n "$CONFIG_HEADERS" + -for ac_tag in :F $CONFIG_FILES :H $CONFIG_HEADERS :L $CONFIG_LINKS :C $CONFIG_COMMANDS +eval set X " :F $CONFIG_FILES :H $CONFIG_HEADERS :L $CONFIG_LINKS :C $CONFIG_COMMANDS" +shift +for ac_tag do case $ac_tag in :[FHLC]) ac_mode=$ac_tag; continue;; esac case $ac_mode$ac_tag in :[FHL]*:*);; - :L* | :C*:*) { { echo "$as_me:$LINENO: error: Invalid tag $ac_tag." >&5 -echo "$as_me: error: Invalid tag $ac_tag." >&2;} - { (exit 1); exit 1; }; };; + :L* | :C*:*) as_fn_error "invalid tag \`$ac_tag'" "$LINENO" 5;; :[FH]-) ac_tag=-:-;; :[FH]*) ac_tag=$ac_tag:$ac_tag.in;; esac @@ -23883,26 +7282,34 @@ [\\/$]*) false;; *) test -f "$srcdir/$ac_f" && ac_f="$srcdir/$ac_f";; esac || - { { echo "$as_me:$LINENO: error: cannot find input file: $ac_f" >&5 -echo "$as_me: error: cannot find input file: $ac_f" >&2;} - { (exit 1); exit 1; }; };; + as_fn_error "cannot find input file: \`$ac_f'" "$LINENO" 5;; esac - ac_file_inputs="$ac_file_inputs $ac_f" + case $ac_f in *\'*) ac_f=`$as_echo "$ac_f" | sed "s/'/'\\\\\\\\''/g"`;; esac + as_fn_append ac_file_inputs " '$ac_f'" done # Let's still pretend it is `configure' which instantiates (i.e., don't # use $as_me), people would be surprised to read: # /* config.h. Generated by config.status. */ - configure_input="Generated from "`IFS=: - echo $* | sed 's|^[^:]*/||;s|:[^:]*/|, |g'`" by configure." + configure_input='Generated from '` + $as_echo "$*" | sed 's|^[^:]*/||;s|:[^:]*/|, |g' + `' by configure.' if test x"$ac_file" != x-; then configure_input="$ac_file. $configure_input" - { echo "$as_me:$LINENO: creating $ac_file" >&5 -echo "$as_me: creating $ac_file" >&6;} + { $as_echo "$as_me:${as_lineno-$LINENO}: creating $ac_file" >&5 +$as_echo "$as_me: creating $ac_file" >&6;} fi + # Neutralize special characters interpreted by sed in replacement strings. + case $configure_input in #( + *\&* | *\|* | *\\* ) + ac_sed_conf_input=`$as_echo "$configure_input" | + sed 's/[\\\\&|]/\\\\&/g'`;; #( + *) ac_sed_conf_input=$configure_input;; + esac case $ac_tag in - *:-:* | *:-) cat >"$tmp/stdin";; + *:-:* | *:-) cat >"$tmp/stdin" \ + || as_fn_error "could not create $ac_file" "$LINENO" 5 ;; esac ;; esac @@ -23912,42 +7319,7 @@ X"$ac_file" : 'X\(//\)[^/]' \| \ X"$ac_file" : 'X\(//\)$' \| \ X"$ac_file" : 'X\(/\)' \| . 2>/dev/null || -echo X"$ac_file" | - sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ - s//\1/ - q - } - /^X\(\/\/\)[^/].*/{ - s//\1/ - q - } - /^X\(\/\/\)$/{ - s//\1/ - q - } - /^X\(\/\).*/{ - s//\1/ - q - } - s/.*/./; q'` - { as_dir="$ac_dir" - case $as_dir in #( - -*) as_dir=./$as_dir;; - esac - test -d "$as_dir" || { $as_mkdir_p && mkdir -p "$as_dir"; } || { - as_dirs= - while :; do - case $as_dir in #( - *\'*) as_qdir=`echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #( - *) as_qdir=$as_dir;; - esac - as_dirs="'$as_qdir' $as_dirs" - as_dir=`$as_dirname -- "$as_dir" || -$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ - X"$as_dir" : 'X\(//\)[^/]' \| \ - X"$as_dir" : 'X\(//\)$' \| \ - X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || -echo X"$as_dir" | +$as_echo X"$ac_file" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q @@ -23965,20 +7337,15 @@ q } s/.*/./; q'` - test -d "$as_dir" && break - done - test -z "$as_dirs" || eval "mkdir $as_dirs" - } || test -d "$as_dir" || { { echo "$as_me:$LINENO: error: cannot create directory $as_dir" >&5 -echo "$as_me: error: cannot create directory $as_dir" >&2;} - { (exit 1); exit 1; }; }; } + as_dir="$ac_dir"; as_fn_mkdir_p ac_builddir=. case "$ac_dir" in .) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; *) - ac_dir_suffix=/`echo "$ac_dir" | sed 's,^\.[\\/],,'` + ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'` # A ".." for each directory in $ac_dir_suffix. - ac_top_builddir_sub=`echo "$ac_dir_suffix" | sed 's,/[^\\/]*,/..,g;s,/,,'` + ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` case $ac_top_builddir_sub in "") ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; @@ -24023,12 +7390,12 @@ esac _ACEOF -cat >>$CONFIG_STATUS <<\_ACEOF +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # If the template does not know about datarootdir, expand it. # FIXME: This hack should be removed a few years after 2.60. ac_datarootdir_hack=; ac_datarootdir_seen= - -case `sed -n '/datarootdir/ { +ac_sed_dataroot=' +/datarootdir/ { p q } @@ -24036,36 +7403,37 @@ /@docdir@/p /@infodir@/p /@localedir@/p -/@mandir@/p -' $ac_file_inputs` in +/@mandir@/p' +case `eval "sed -n \"\$ac_sed_dataroot\" $ac_file_inputs"` in *datarootdir*) ac_datarootdir_seen=yes;; *@datadir@*|*@docdir@*|*@infodir@*|*@localedir@*|*@mandir@*) - { echo "$as_me:$LINENO: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&5 -echo "$as_me: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&5 +$as_echo "$as_me: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&2;} _ACEOF -cat >>$CONFIG_STATUS <<_ACEOF +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_datarootdir_hack=' s&@datadir@&$datadir&g s&@docdir@&$docdir&g s&@infodir@&$infodir&g s&@localedir@&$localedir&g s&@mandir@&$mandir&g - s&\\\${datarootdir}&$datarootdir&g' ;; + s&\\\${datarootdir}&$datarootdir&g' ;; esac _ACEOF # Neutralize VPATH when `$srcdir' = `.'. # Shell code in configure.ac might set extrasub. # FIXME: do we really want to maintain this feature? -cat >>$CONFIG_STATUS <<_ACEOF - sed "$ac_vpsub +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 +ac_sed_extra="$ac_vpsub $extrasub _ACEOF -cat >>$CONFIG_STATUS <<\_ACEOF +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 :t /@[a-zA-Z_][a-zA-Z_0-9]*@/!b -s&@configure_input@&$configure_input&;t t +s|@configure_input@|$ac_sed_conf_input|;t t s&@top_builddir@&$ac_top_builddir_sub&;t t +s&@top_build_prefix@&$ac_top_build_prefix&;t t s&@srcdir@&$ac_srcdir&;t t s&@abs_srcdir@&$ac_abs_srcdir&;t t s&@top_srcdir@&$ac_top_srcdir&;t t @@ -24076,135 +7444,65 @@ s&@INSTALL@&$ac_INSTALL&;t t s&@MKDIR_P@&$ac_MKDIR_P&;t t $ac_datarootdir_hack -" $ac_file_inputs | sed -f "$tmp/subs-1.sed" | sed -f "$tmp/subs-2.sed" >$tmp/out +" +eval sed \"\$ac_sed_extra\" "$ac_file_inputs" | $AWK -f "$tmp/subs.awk" >$tmp/out \ + || as_fn_error "could not create $ac_file" "$LINENO" 5 test -z "$ac_datarootdir_hack$ac_datarootdir_seen" && { ac_out=`sed -n '/\${datarootdir}/p' "$tmp/out"`; test -n "$ac_out"; } && { ac_out=`sed -n '/^[ ]*datarootdir[ ]*:*=/p' "$tmp/out"`; test -z "$ac_out"; } && - { echo "$as_me:$LINENO: WARNING: $ac_file contains a reference to the variable \`datarootdir' + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file contains a reference to the variable \`datarootdir' which seems to be undefined. Please make sure it is defined." >&5 -echo "$as_me: WARNING: $ac_file contains a reference to the variable \`datarootdir' +$as_echo "$as_me: WARNING: $ac_file contains a reference to the variable \`datarootdir' which seems to be undefined. Please make sure it is defined." >&2;} rm -f "$tmp/stdin" case $ac_file in - -) cat "$tmp/out"; rm -f "$tmp/out";; - *) rm -f "$ac_file"; mv "$tmp/out" $ac_file;; - esac + -) cat "$tmp/out" && rm -f "$tmp/out";; + *) rm -f "$ac_file" && mv "$tmp/out" "$ac_file";; + esac \ + || as_fn_error "could not create $ac_file" "$LINENO" 5 ;; :H) # # CONFIG_HEADER # -_ACEOF - -# Transform confdefs.h into a sed script `conftest.defines', that -# substitutes the proper values into config.h.in to produce config.h. -rm -f conftest.defines conftest.tail -# First, append a space to every undef/define line, to ease matching. -echo 's/$/ /' >conftest.defines -# Then, protect against being on the right side of a sed subst, or in -# an unquoted here document, in config.status. If some macros were -# called several times there might be several #defines for the same -# symbol, which is useless. But do not sort them, since the last -# AC_DEFINE must be honored. -ac_word_re=[_$as_cr_Letters][_$as_cr_alnum]* -# These sed commands are passed to sed as "A NAME B PARAMS C VALUE D", where -# NAME is the cpp macro being defined, VALUE is the value it is being given. -# PARAMS is the parameter list in the macro definition--in most cases, it's -# just an empty string. -ac_dA='s,^\\([ #]*\\)[^ ]*\\([ ]*' -ac_dB='\\)[ (].*,\\1define\\2' -ac_dC=' ' -ac_dD=' ,' - -uniq confdefs.h | - sed -n ' - t rset - :rset - s/^[ ]*#[ ]*define[ ][ ]*// - t ok - d - :ok - s/[\\&,]/\\&/g - s/^\('"$ac_word_re"'\)\(([^()]*)\)[ ]*\(.*\)/ '"$ac_dA"'\1'"$ac_dB"'\2'"${ac_dC}"'\3'"$ac_dD"'/p - s/^\('"$ac_word_re"'\)[ ]*\(.*\)/'"$ac_dA"'\1'"$ac_dB$ac_dC"'\2'"$ac_dD"'/p - ' >>conftest.defines - -# Remove the space that was appended to ease matching. -# Then replace #undef with comments. This is necessary, for -# example, in the case of _POSIX_SOURCE, which is predefined and required -# on some systems where configure will not decide to define it. -# (The regexp can be short, since the line contains either #define or #undef.) -echo 's/ $// -s,^[ #]*u.*,/* & */,' >>conftest.defines - -# Break up conftest.defines: -ac_max_sed_lines=50 - -# First sed command is: sed -f defines.sed $ac_file_inputs >"$tmp/out1" -# Second one is: sed -f defines.sed "$tmp/out1" >"$tmp/out2" -# Third one will be: sed -f defines.sed "$tmp/out2" >"$tmp/out1" -# et cetera. -ac_in='$ac_file_inputs' -ac_out='"$tmp/out1"' -ac_nxt='"$tmp/out2"' - -while : -do - # Write a here document: - cat >>$CONFIG_STATUS <<_ACEOF - # First, check the format of the line: - cat >"\$tmp/defines.sed" <<\\CEOF -/^[ ]*#[ ]*undef[ ][ ]*$ac_word_re[ ]*\$/b def -/^[ ]*#[ ]*define[ ][ ]*$ac_word_re[( ]/b def -b -:def -_ACEOF - sed ${ac_max_sed_lines}q conftest.defines >>$CONFIG_STATUS - echo 'CEOF - sed -f "$tmp/defines.sed"' "$ac_in >$ac_out" >>$CONFIG_STATUS - ac_in=$ac_out; ac_out=$ac_nxt; ac_nxt=$ac_in - sed 1,${ac_max_sed_lines}d conftest.defines >conftest.tail - grep . conftest.tail >/dev/null || break - rm -f conftest.defines - mv conftest.tail conftest.defines -done -rm -f conftest.defines conftest.tail - -echo "ac_result=$ac_in" >>$CONFIG_STATUS -cat >>$CONFIG_STATUS <<\_ACEOF if test x"$ac_file" != x-; then - echo "/* $configure_input */" >"$tmp/config.h" - cat "$ac_result" >>"$tmp/config.h" - if diff $ac_file "$tmp/config.h" >/dev/null 2>&1; then - { echo "$as_me:$LINENO: $ac_file is unchanged" >&5 -echo "$as_me: $ac_file is unchanged" >&6;} + { + $as_echo "/* $configure_input */" \ + && eval '$AWK -f "$tmp/defines.awk"' "$ac_file_inputs" + } >"$tmp/config.h" \ + || as_fn_error "could not create $ac_file" "$LINENO" 5 + if diff "$ac_file" "$tmp/config.h" >/dev/null 2>&1; then + { $as_echo "$as_me:${as_lineno-$LINENO}: $ac_file is unchanged" >&5 +$as_echo "$as_me: $ac_file is unchanged" >&6;} else - rm -f $ac_file - mv "$tmp/config.h" $ac_file + rm -f "$ac_file" + mv "$tmp/config.h" "$ac_file" \ + || as_fn_error "could not create $ac_file" "$LINENO" 5 fi else - echo "/* $configure_input */" - cat "$ac_result" + $as_echo "/* $configure_input */" \ + && eval '$AWK -f "$tmp/defines.awk"' "$ac_file_inputs" \ + || as_fn_error "could not create -" "$LINENO" 5 fi - rm -f "$tmp/out12" -# Compute $ac_file's index in $config_headers. +# Compute "$ac_file"'s index in $config_headers. +_am_arg="$ac_file" _am_stamp_count=1 for _am_header in $config_headers :; do case $_am_header in - $ac_file | $ac_file:* ) + $_am_arg | $_am_arg:* ) break ;; * ) _am_stamp_count=`expr $_am_stamp_count + 1` ;; esac done -echo "timestamp for $ac_file" >`$as_dirname -- $ac_file || -$as_expr X$ac_file : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ - X$ac_file : 'X\(//\)[^/]' \| \ - X$ac_file : 'X\(//\)$' \| \ - X$ac_file : 'X\(/\)' \| . 2>/dev/null || -echo X$ac_file | +echo "timestamp for $_am_arg" >`$as_dirname -- "$_am_arg" || +$as_expr X"$_am_arg" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$_am_arg" : 'X\(//\)[^/]' \| \ + X"$_am_arg" : 'X\(//\)$' \| \ + X"$_am_arg" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X"$_am_arg" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q @@ -24228,52 +7526,67 @@ # CONFIG_LINK # - { echo "$as_me:$LINENO: linking $srcdir/$ac_source to $ac_file" >&5 -echo "$as_me: linking $srcdir/$ac_source to $ac_file" >&6;} + if test "$ac_source" = "$ac_file" && test "$srcdir" = '.'; then + : + else + # Prefer the file from the source tree if names are identical. + if test "$ac_source" = "$ac_file" || test ! -r "$ac_source"; then + ac_source=$srcdir/$ac_source + fi - if test ! -r "$srcdir/$ac_source"; then - { { echo "$as_me:$LINENO: error: $srcdir/$ac_source: file not found" >&5 -echo "$as_me: error: $srcdir/$ac_source: file not found" >&2;} - { (exit 1); exit 1; }; } - fi - rm -f "$ac_file" + { $as_echo "$as_me:${as_lineno-$LINENO}: linking $ac_source to $ac_file" >&5 +$as_echo "$as_me: linking $ac_source to $ac_file" >&6;} - # Try a relative symlink, then a hard link, then a copy. - case $srcdir in - [\\/$]* | ?:[\\/]* ) ac_rel_source=$srcdir/$ac_source ;; - *) ac_rel_source=$ac_top_build_prefix$srcdir/$ac_source ;; - esac - ln -s "$ac_rel_source" "$ac_file" 2>/dev/null || - ln "$srcdir/$ac_source" "$ac_file" 2>/dev/null || - cp -p "$srcdir/$ac_source" "$ac_file" || - { { echo "$as_me:$LINENO: error: cannot link or copy $srcdir/$ac_source to $ac_file" >&5 -echo "$as_me: error: cannot link or copy $srcdir/$ac_source to $ac_file" >&2;} - { (exit 1); exit 1; }; } + if test ! -r "$ac_source"; then + as_fn_error "$ac_source: file not found" "$LINENO" 5 + fi + rm -f "$ac_file" + + # Try a relative symlink, then a hard link, then a copy. + case $srcdir in + [\\/$]* | ?:[\\/]* ) ac_rel_source=$ac_source ;; + *) ac_rel_source=$ac_top_build_prefix$ac_source ;; + esac + ln -s "$ac_rel_source" "$ac_file" 2>/dev/null || + ln "$ac_source" "$ac_file" 2>/dev/null || + cp -p "$ac_source" "$ac_file" || + as_fn_error "cannot link or copy $ac_source to $ac_file" "$LINENO" 5 + fi ;; - :C) { echo "$as_me:$LINENO: executing $ac_file commands" >&5 -echo "$as_me: executing $ac_file commands" >&6;} + :C) { $as_echo "$as_me:${as_lineno-$LINENO}: executing $ac_file commands" >&5 +$as_echo "$as_me: executing $ac_file commands" >&6;} ;; esac case $ac_file$ac_mode in - "depfiles":C) test x"$AMDEP_TRUE" != x"" || for mf in $CONFIG_FILES; do - # Strip MF so we end up with the name of the file. - mf=`echo "$mf" | sed -e 's/:.*$//'` - # Check whether this is an Automake generated Makefile or not. - # We used to match only the files named `Makefile.in', but - # some people rename them; so instead we look at the file content. - # Grep'ing the first line is not enough: some people post-process - # each Makefile.in and add a new line on top of each file to say so. - # Grep'ing the whole file is not good either: AIX grep has a line - # limit of 2048, but all sed's we know have understand at least 4000. - if sed 10q "$mf" | grep '^#.*generated by automake' > /dev/null 2>&1; then - dirpart=`$as_dirname -- "$mf" || + "depfiles":C) test x"$AMDEP_TRUE" != x"" || { + # Autoconf 2.62 quotes --file arguments for eval, but not when files + # are listed without --file. Let's play safe and only enable the eval + # if we detect the quoting. + case $CONFIG_FILES in + *\'*) eval set x "$CONFIG_FILES" ;; + *) set x $CONFIG_FILES ;; + esac + shift + for mf + do + # Strip MF so we end up with the name of the file. + mf=`echo "$mf" | sed -e 's/:.*$//'` + # Check whether this is an Automake generated Makefile or not. + # We used to match only the files named `Makefile.in', but + # some people rename them; so instead we look at the file content. + # Grep'ing the first line is not enough: some people post-process + # each Makefile.in and add a new line on top of each file to say so. + # Grep'ing the whole file is not good either: AIX grep has a line + # limit of 2048, but all sed's we know have understand at least 4000. + if sed -n 's,^#.*generated by automake.*,X,p' "$mf" | grep X >/dev/null 2>&1; then + dirpart=`$as_dirname -- "$mf" || $as_expr X"$mf" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$mf" : 'X\(//\)[^/]' \| \ X"$mf" : 'X\(//\)$' \| \ X"$mf" : 'X\(/\)' \| . 2>/dev/null || -echo X"$mf" | +$as_echo X"$mf" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q @@ -24291,68 +7604,33 @@ q } s/.*/./; q'` - else - continue - fi - # Extract the definition of DEPDIR, am__include, and am__quote - # from the Makefile without running `make'. - DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"` - test -z "$DEPDIR" && continue - am__include=`sed -n 's/^am__include = //p' < "$mf"` - test -z "am__include" && continue - am__quote=`sed -n 's/^am__quote = //p' < "$mf"` - # When using ansi2knr, U may be empty or an underscore; expand it - U=`sed -n 's/^U = //p' < "$mf"` - # Find all dependency output files, they are included files with - # $(DEPDIR) in their names. We invoke sed twice because it is the - # simplest approach to changing $(DEPDIR) to its actual value in the - # expansion. - for file in `sed -n " - s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \ - sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g' -e 's/\$U/'"$U"'/g'`; do - # Make sure the directory exists. - test -f "$dirpart/$file" && continue - fdir=`$as_dirname -- "$file" || + else + continue + fi + # Extract the definition of DEPDIR, am__include, and am__quote + # from the Makefile without running `make'. + DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"` + test -z "$DEPDIR" && continue + am__include=`sed -n 's/^am__include = //p' < "$mf"` + test -z "am__include" && continue + am__quote=`sed -n 's/^am__quote = //p' < "$mf"` + # When using ansi2knr, U may be empty or an underscore; expand it + U=`sed -n 's/^U = //p' < "$mf"` + # Find all dependency output files, they are included files with + # $(DEPDIR) in their names. We invoke sed twice because it is the + # simplest approach to changing $(DEPDIR) to its actual value in the + # expansion. + for file in `sed -n " + s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \ + sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g' -e 's/\$U/'"$U"'/g'`; do + # Make sure the directory exists. + test -f "$dirpart/$file" && continue + fdir=`$as_dirname -- "$file" || $as_expr X"$file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$file" : 'X\(//\)[^/]' \| \ X"$file" : 'X\(//\)$' \| \ X"$file" : 'X\(/\)' \| . 2>/dev/null || -echo X"$file" | - sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ - s//\1/ - q - } - /^X\(\/\/\)[^/].*/{ - s//\1/ - q - } - /^X\(\/\/\)$/{ - s//\1/ - q - } - /^X\(\/\).*/{ - s//\1/ - q - } - s/.*/./; q'` - { as_dir=$dirpart/$fdir - case $as_dir in #( - -*) as_dir=./$as_dir;; - esac - test -d "$as_dir" || { $as_mkdir_p && mkdir -p "$as_dir"; } || { - as_dirs= - while :; do - case $as_dir in #( - *\'*) as_qdir=`echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #( - *) as_qdir=$as_dir;; - esac - as_dirs="'$as_qdir' $as_dirs" - as_dir=`$as_dirname -- "$as_dir" || -$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ - X"$as_dir" : 'X\(//\)[^/]' \| \ - X"$as_dir" : 'X\(//\)$' \| \ - X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || -echo X"$as_dir" | +$as_echo X"$file" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q @@ -24370,16 +7648,12 @@ q } s/.*/./; q'` - test -d "$as_dir" && break + as_dir=$dirpart/$fdir; as_fn_mkdir_p + # echo "creating $dirpart/$file" + echo '# dummy' > "$dirpart/$file" done - test -z "$as_dirs" || eval "mkdir $as_dirs" - } || test -d "$as_dir" || { { echo "$as_me:$LINENO: error: cannot create directory $as_dir" >&5 -echo "$as_me: error: cannot create directory $as_dir" >&2;} - { (exit 1); exit 1; }; }; } - # echo "creating $dirpart/$file" - echo '# dummy' > "$dirpart/$file" done -done +} ;; "include":C) test -d include || mkdir include ;; "src":C) @@ -24391,11 +7665,13 @@ done # for ac_tag -{ (exit 0); exit 0; } +as_fn_exit 0 _ACEOF -chmod +x $CONFIG_STATUS ac_clean_files=$ac_clean_files_save +test $ac_write_fail = 0 || + as_fn_error "write failure creating $CONFIG_STATUS" "$LINENO" 5 + # configure is writing to config.log, and then calls config.status. # config.status does its own redirection, appending to config.log. @@ -24415,6 +7691,10 @@ exec 5>>config.log # Use ||, not &&, to avoid exiting from the if with $? = 1, which # would make configure fail if this is the last instruction. - $ac_cs_success || { (exit 1); exit 1; } + $ac_cs_success || as_fn_exit $? +fi +if test -n "$ac_unrecognized_opts" && test "$enable_option_checking" != no; then + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: unrecognized options: $ac_unrecognized_opts" >&5 +$as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2;} fi Modified: python/branches/py3k-jit/Modules/_ctypes/libffi/configure.ac ============================================================================== --- python/branches/py3k-jit/Modules/_ctypes/libffi/configure.ac (original) +++ python/branches/py3k-jit/Modules/_ctypes/libffi/configure.ac Tue Mar 16 21:40:29 2010 @@ -3,9 +3,9 @@ # file from libffi - slightly patched for ctypes # -AC_PREREQ(2.59) +AC_PREREQ(2.63) -AC_INIT([libffi], [3.0.5], [http://gcc.gnu.org/bugs.html]) +AC_INIT([libffi], [3.0.9], [http://gcc.gnu.org/bugs.html]) AC_CONFIG_HEADERS([fficonfig.h]) AC_CANONICAL_SYSTEM @@ -23,6 +23,7 @@ m4_rename([_AC_ARG_VAR_PRECIOUS],[real_PRECIOUS]) m4_define([_AC_ARG_VAR_PRECIOUS],[]) AC_PROG_CC +m4_undefine([_AC_ARG_VAR_PRECIOUS]) m4_rename([real_PRECIOUS],[_AC_ARG_VAR_PRECIOUS]) AC_SUBST(CFLAGS) @@ -30,6 +31,7 @@ AM_PROG_AS AM_PROG_CC_C_O AC_PROG_LIBTOOL +AC_CONFIG_MACRO_DIR([m4]) AM_MAINTAINER_MODE @@ -52,10 +54,14 @@ TARGET=ARM; TARGETDIR=arm ;; - amd64-*-freebsd*) + amd64-*-freebsd* | amd64-*-openbsd*) TARGET=X86_64; TARGETDIR=x86 ;; + avr32*-*-*) + TARGET=AVR32; TARGETDIR=avr32 + ;; + cris-*-*) TARGET=LIBFFI_CRIS; TARGETDIR=cris ;; @@ -74,11 +80,13 @@ TARGET=PA_HPUX; TARGETDIR=pa ;; - i386-*-freebsd* | i386-*-openbsd*) + i?86-*-freebsd* | i?86-*-openbsd*) TARGET=X86_FREEBSD; TARGETDIR=x86 ;; i?86-win32* | i?86-*-cygwin* | i?86-*-mingw*) TARGET=X86_WIN32; TARGETDIR=x86 + # All mingw/cygwin/win32 builds require this for sharedlib + AM_LTLDFLAGS="-no-undefined" ;; i?86-*-darwin*) TARGET=X86_DARWIN; TARGETDIR=x86 @@ -109,7 +117,9 @@ TARGET=MIPS_IRIX; TARGETDIR=mips ;; mips*-*-linux*) - TARGET=MIPS_LINUX; TARGETDIR=mips + # Support 128-bit long double for NewABI. + HAVE_LONG_DOUBLE='defined(__mips64)' + TARGET=MIPS_IRIX; TARGETDIR=mips ;; powerpc*-*-linux* | powerpc-*-sysv*) @@ -149,14 +159,18 @@ x86_64-*-darwin*) TARGET=X86_DARWIN; TARGETDIR=x86 ;; + x86_64-*-cygwin* | x86_64-*-mingw*) + TARGET=X86_WIN64; TARGETDIR=x86 ;; + x86_64-*-*) TARGET=X86_64; TARGETDIR=x86 ;; esac AC_SUBST(AM_RUNTESTFLAGS) +AC_SUBST(AM_LTLDFLAGS) if test $TARGETDIR = unknown; then AC_MSG_ERROR(["libffi has not been ported to $host."]) @@ -167,6 +181,7 @@ AM_CONDITIONAL(X86, test x$TARGET = xX86) AM_CONDITIONAL(X86_FREEBSD, test x$TARGET = xX86_FREEBSD) AM_CONDITIONAL(X86_WIN32, test x$TARGET = xX86_WIN32) +AM_CONDITIONAL(X86_WIN64, test x$TARGET = xX86_WIN64) AM_CONDITIONAL(X86_DARWIN, test x$TARGET = xX86_DARWIN) AM_CONDITIONAL(ALPHA, test x$TARGET = xALPHA) AM_CONDITIONAL(IA64, test x$TARGET = xIA64) @@ -177,6 +192,7 @@ AM_CONDITIONAL(POWERPC_DARWIN, test x$TARGET = xPOWERPC_DARWIN) AM_CONDITIONAL(POWERPC_FREEBSD, test x$TARGET = xPOWERPC_FREEBSD) AM_CONDITIONAL(ARM, test x$TARGET = xARM) +AM_CONDITIONAL(AVR32, test x$TARGET = xAVR32) AM_CONDITIONAL(LIBFFI_CRIS, test x$TARGET = xLIBFFI_CRIS) AM_CONDITIONAL(FRV, test x$TARGET = xFRV) AM_CONDITIONAL(S390, test x$TARGET = xS390) @@ -251,6 +267,29 @@ fi fi +if test x$TARGET = xX86 || test x$TARGET = xX86_WIN32 || test x$TARGET = xX86_64; then + AC_CACHE_CHECK([assembler supports pc related relocs], + libffi_cv_as_x86_pcrel, [ + libffi_cv_as_x86_pcrel=yes + echo '.text; foo: nop; .data; .long foo-.; .text' > conftest.s + if $CC $CFLAGS -c conftest.s 2>&1 | grep -i warning > /dev/null; then + libffi_cv_as_x86_pcrel=no + fi + ]) + if test "x$libffi_cv_as_x86_pcrel" = xyes; then + AC_DEFINE(HAVE_AS_X86_PCREL, 1, + [Define if your assembler supports PC relative relocs.]) + fi +fi + +case "$target" in + *-apple-darwin10* | *-*-freebsd* | *-*-openbsd* | *-pc-solaris*) + AC_DEFINE(FFI_MMAP_EXEC_WRIT, 1, + [Cannot use malloc on this target, so, we revert to + alternative means]) + ;; +esac + AC_CACHE_CHECK([whether .eh_frame section should be read-only], libffi_cv_ro_eh_frame, [ libffi_cv_ro_eh_frame=no Modified: python/branches/py3k-jit/Modules/_ctypes/libffi/fficonfig.h.in ============================================================================== --- python/branches/py3k-jit/Modules/_ctypes/libffi/fficonfig.h.in (original) +++ python/branches/py3k-jit/Modules/_ctypes/libffi/fficonfig.h.in Tue Mar 16 21:40:29 2010 @@ -1,5 +1,8 @@ /* fficonfig.h.in. Generated from configure.ac by autoheader. */ +/* Define if building universal (internal helper macro) */ +#undef AC_APPLE_UNIVERSAL_BUILD + /* 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. */ @@ -14,6 +17,9 @@ /* Define this if you want extra debugging. */ #undef FFI_DEBUG +/* Cannot use malloc on this target, so, we revert to alternative means */ +#undef FFI_MMAP_EXEC_WRIT + /* Define this is you do not want support for the raw API. */ #undef FFI_NO_RAW_API @@ -37,6 +43,9 @@ */ #undef HAVE_AS_SPARC_UA_PCREL +/* Define if your assembler supports PC relative relocs. */ +#undef HAVE_AS_X86_PCREL + /* Define to 1 if you have the header file. */ #undef HAVE_DLFCN_H @@ -94,6 +103,10 @@ /* Define to 1 if you have the header file. */ #undef HAVE_UNISTD_H +/* Define to the sub-directory in which libtool stores uninstalled libraries. + */ +#undef LT_OBJDIR + /* Define to 1 if your C compiler doesn't accept -c and -o together. */ #undef NO_MINUS_C_MINUS_O @@ -139,9 +152,17 @@ /* Version number of package */ #undef VERSION -/* Define to 1 if your processor stores words with the most significant byte - first (like Motorola and SPARC, unlike Intel and VAX). */ -#undef WORDS_BIGENDIAN +/* Define WORDS_BIGENDIAN to 1 if your processor stores words with the most + significant byte first (like Motorola and SPARC, unlike Intel). */ +#if defined AC_APPLE_UNIVERSAL_BUILD +# if defined __BIG_ENDIAN__ +# define WORDS_BIGENDIAN 1 +# endif +#else +# ifndef WORDS_BIGENDIAN +# undef WORDS_BIGENDIAN +# endif +#endif #ifdef HAVE_HIDDEN_VISIBILITY_ATTRIBUTE Modified: python/branches/py3k-jit/Modules/_ctypes/libffi/include/Makefile.am ============================================================================== --- python/branches/py3k-jit/Modules/_ctypes/libffi/include/Makefile.am (original) +++ python/branches/py3k-jit/Modules/_ctypes/libffi/include/Makefile.am Tue Mar 16 21:40:29 2010 @@ -6,4 +6,4 @@ EXTRA_DIST=ffi.h.in ffi_common.h includesdir = $(libdir)/@PACKAGE_NAME at -@PACKAGE_VERSION@/include -nodist_includes_HEADERS = ffi.h ffitarget.h +nodist_includes_HEADERS = ffi.h ffitarget.h Modified: python/branches/py3k-jit/Modules/_ctypes/libffi/include/Makefile.in ============================================================================== --- python/branches/py3k-jit/Modules/_ctypes/libffi/include/Makefile.in (original) +++ python/branches/py3k-jit/Modules/_ctypes/libffi/include/Makefile.in Tue Mar 16 21:40:29 2010 @@ -1,8 +1,9 @@ -# Makefile.in generated by automake 1.10 from Makefile.am. +# Makefile.in generated by automake 1.11 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, -# 2003, 2004, 2005, 2006 Free Software Foundation, Inc. +# 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, +# Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. @@ -16,8 +17,9 @@ VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ -pkglibdir = $(libdir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c @@ -41,9 +43,10 @@ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) -mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs +mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/fficonfig.h CONFIG_CLEAN_FILES = ffi.h ffitarget.h +CONFIG_CLEAN_VPATH_FILES = SOURCES = DIST_SOURCES = am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; @@ -51,9 +54,23 @@ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; -am__strip_dir = `echo $$p | sed -e 's|^.*/||'`; +am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; +am__install_max = 40 +am__nobase_strip_setup = \ + srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` +am__nobase_strip = \ + for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" +am__nobase_list = $(am__nobase_strip_setup); \ + for p in $$list; do echo "$$p $$p"; done | \ + sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ + $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ + if (++n[$$2] == $(am__install_max)) \ + { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ + END { for (dir in files) print dir, files[dir] }' +am__base_list = \ + sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ + sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__installdirs = "$(DESTDIR)$(includesdir)" -nodist_includesHEADERS_INSTALL = $(INSTALL_HEADER) HEADERS = $(nodist_includes_HEADERS) ETAGS = etags CTAGS = ctags @@ -75,21 +92,17 @@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ -CXX = @CXX@ -CXXCPP = @CXXCPP@ -CXXDEPMODE = @CXXDEPMODE@ -CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ -ECHO = @ECHO@ +DSYMUTIL = @DSYMUTIL@ +DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ -F77 = @F77@ -FFLAGS = @FFLAGS@ +FGREP = @FGREP@ GREP = @GREP@ HAVE_LONG_DOUBLE = @HAVE_LONG_DOUBLE@ INSTALL = @INSTALL@ @@ -97,16 +110,23 @@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +LD = @LD@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ +LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ +NM = @NM@ +NMEDIT = @NMEDIT@ +OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ +OTOOL = @OTOOL@ +OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ @@ -127,8 +147,7 @@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ -ac_ct_CXX = @ac_ct_CXX@ -ac_ct_F77 = @ac_ct_F77@ +ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ @@ -159,6 +178,7 @@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ +lt_ECHO = @lt_ECHO@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ @@ -177,13 +197,14 @@ target_vendor = @target_vendor@ toolexecdir = @toolexecdir@ toolexeclibdir = @toolexeclibdir@ +top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ AUTOMAKE_OPTIONS = foreign DISTCLEANFILES = ffitarget.h EXTRA_DIST = ffi.h.in ffi_common.h includesdir = $(libdir)/@PACKAGE_NAME at -@PACKAGE_VERSION@/include -nodist_includes_HEADERS = ffi.h ffitarget.h +nodist_includes_HEADERS = ffi.h ffitarget.h all: all-am .SUFFIXES: @@ -191,14 +212,14 @@ @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \ - && exit 0; \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ - echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign include/Makefile'; \ - cd $(top_srcdir) && \ - $(AUTOMAKE) --foreign include/Makefile + echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign include/Makefile'; \ + $(am__cd) $(top_srcdir) && \ + $(AUTOMAKE) --foreign include/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ @@ -216,6 +237,7 @@ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(am__aclocal_m4_deps): ffi.h: $(top_builddir)/config.status $(srcdir)/ffi.h.in cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ @@ -227,65 +249,72 @@ install-nodist_includesHEADERS: $(nodist_includes_HEADERS) @$(NORMAL_INSTALL) test -z "$(includesdir)" || $(MKDIR_P) "$(DESTDIR)$(includesdir)" - @list='$(nodist_includes_HEADERS)'; for p in $$list; do \ + @list='$(nodist_includes_HEADERS)'; test -n "$(includesdir)" || list=; \ + for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ - f=$(am__strip_dir) \ - echo " $(nodist_includesHEADERS_INSTALL) '$$d$$p' '$(DESTDIR)$(includesdir)/$$f'"; \ - $(nodist_includesHEADERS_INSTALL) "$$d$$p" "$(DESTDIR)$(includesdir)/$$f"; \ + echo "$$d$$p"; \ + done | $(am__base_list) | \ + while read files; do \ + echo " $(INSTALL_HEADER) $$files '$(DESTDIR)$(includesdir)'"; \ + $(INSTALL_HEADER) $$files "$(DESTDIR)$(includesdir)" || exit $$?; \ done uninstall-nodist_includesHEADERS: @$(NORMAL_UNINSTALL) - @list='$(nodist_includes_HEADERS)'; for p in $$list; do \ - f=$(am__strip_dir) \ - echo " rm -f '$(DESTDIR)$(includesdir)/$$f'"; \ - rm -f "$(DESTDIR)$(includesdir)/$$f"; \ - done + @list='$(nodist_includes_HEADERS)'; test -n "$(includesdir)" || list=; \ + files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ + test -n "$$files" || exit 0; \ + echo " ( cd '$(DESTDIR)$(includesdir)' && rm -f" $$files ")"; \ + cd "$(DESTDIR)$(includesdir)" && rm -f $$files ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ - $(AWK) ' { files[$$0] = 1; } \ - END { for (i in files) print i; }'`; \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ mkid -fID $$unique tags: TAGS TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) - tags=; \ + set x; \ here=`pwd`; \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ - $(AWK) ' { files[$$0] = 1; } \ - END { for (i in files) print i; }'`; \ - if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + shift; \ + if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ - $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ - $$tags $$unique; \ + if test $$# -gt 0; then \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + "$$@" $$unique; \ + else \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + $$unique; \ + fi; \ fi ctags: CTAGS CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) - tags=; \ - here=`pwd`; \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ - $(AWK) ' { files[$$0] = 1; } \ - END { for (i in files) print i; }'`; \ - test -z "$(CTAGS_ARGS)$$tags$$unique" \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ - $$tags $$unique + $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ - && cd $(top_srcdir) \ - && gtags -i $(GTAGS_ARGS) $$here + && $(am__cd) $(top_srcdir) \ + && gtags -i $(GTAGS_ARGS) "$$here" distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags @@ -306,13 +335,17 @@ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d "$(distdir)/$$file"; then \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ - cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ + cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ - cp -pR $$d/$$file $(distdir)$$dir || exit 1; \ + cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ - test -f $(distdir)/$$file \ - || cp -p $$d/$$file $(distdir)/$$file \ + test -f "$(distdir)/$$file" \ + || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done @@ -343,6 +376,7 @@ distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) -test -z "$(DISTCLEANFILES)" || rm -f $(DISTCLEANFILES) maintainer-clean-generic: @@ -362,6 +396,8 @@ html: html-am +html-am: + info: info-am info-am: @@ -370,18 +406,28 @@ install-dvi: install-dvi-am +install-dvi-am: + install-exec-am: install-html: install-html-am +install-html-am: + install-info: install-info-am +install-info-am: + install-man: install-pdf: install-pdf-am +install-pdf-am: + install-ps: install-ps-am +install-ps-am: + installcheck-am: maintainer-clean: maintainer-clean-am @@ -417,6 +463,7 @@ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ tags uninstall uninstall-am uninstall-nodist_includesHEADERS + # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: Modified: python/branches/py3k-jit/Modules/_ctypes/libffi/include/ffi.h.in ============================================================================== --- python/branches/py3k-jit/Modules/_ctypes/libffi/include/ffi.h.in (original) +++ python/branches/py3k-jit/Modules/_ctypes/libffi/include/ffi.h.in Tue Mar 16 21:40:29 2010 @@ -57,9 +57,7 @@ #endif /* Specify which architecture libffi is configured for. */ -#ifndef @TARGET@ #define @TARGET@ -#endif /* ---- System configuration information --------------------------------- */ @@ -67,6 +65,10 @@ #ifndef LIBFFI_ASM +#ifdef _MSC_VER +#define __attribute__(X) +#endif + #include #include @@ -254,7 +256,11 @@ ffi_cif *cif; void (*fun)(ffi_cif*,void*,void**,void*); void *user_data; +#ifdef __GNUC__ } ffi_closure __attribute__((aligned (8))); +#else +} ffi_closure; +#endif void *ffi_closure_alloc (size_t size, void **code); void ffi_closure_free (void *); Modified: python/branches/py3k-jit/Modules/_ctypes/libffi/include/ffi_common.h ============================================================================== --- python/branches/py3k-jit/Modules/_ctypes/libffi/include/ffi_common.h (original) +++ python/branches/py3k-jit/Modules/_ctypes/libffi/include/ffi_common.h Tue Mar 16 21:40:29 2010 @@ -18,7 +18,10 @@ /* Do not move this. Some versions of AIX are very picky about where this is positioned. */ #ifdef __GNUC__ +/* mingw64 defines this already in malloc.h. */ +#ifndef alloca # define alloca __builtin_alloca +#endif # define MAYBE_UNUSED __attribute__((__unused__)) #else # define MAYBE_UNUSED @@ -29,7 +32,11 @@ #pragma alloca # else # ifndef alloca /* predefined by HP cc +Olibcalls */ +# ifdef _MSC_VER +# define alloca _alloca +# else char *alloca (); +# endif # endif # endif # endif @@ -77,6 +84,22 @@ } extended_cif; /* Terse sized type definitions. */ +#if defined(_MSC_VER) || defined(__sgi) +typedef unsigned char UINT8; +typedef signed char SINT8; +typedef unsigned short UINT16; +typedef signed short SINT16; +typedef unsigned int UINT32; +typedef signed int SINT32; +# ifdef _MSC_VER +typedef unsigned __int64 UINT64; +typedef signed __int64 SINT64; +# else +# include +typedef uint64_t UINT64; +typedef int64_t SINT64; +# endif +#else typedef unsigned int UINT8 __attribute__((__mode__(__QI__))); typedef signed int SINT8 __attribute__((__mode__(__QI__))); typedef unsigned int UINT16 __attribute__((__mode__(__HI__))); @@ -85,6 +108,7 @@ typedef signed int SINT32 __attribute__((__mode__(__SI__))); typedef unsigned int UINT64 __attribute__((__mode__(__DI__))); typedef signed int SINT64 __attribute__((__mode__(__DI__))); +#endif typedef float FLOAT32; Modified: python/branches/py3k-jit/Modules/_ctypes/libffi/missing ============================================================================== --- python/branches/py3k-jit/Modules/_ctypes/libffi/missing (original) +++ python/branches/py3k-jit/Modules/_ctypes/libffi/missing Tue Mar 16 21:40:29 2010 @@ -1,9 +1,9 @@ #! /bin/sh # Common stub for a few missing GNU programs while installing. -scriptversion=2004-09-07.08 +scriptversion=2005-06-08.21 -# Copyright (C) 1996, 1997, 1999, 2000, 2002, 2003, 2004 +# Copyright (C) 1996, 1997, 1999, 2000, 2002, 2003, 2004, 2005 # Free Software Foundation, Inc. # Originally by Fran,cois Pinard , 1996. @@ -19,8 +19,8 @@ # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software -# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA -# 02111-1307, USA. +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA +# 02110-1301, USA. # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a @@ -87,12 +87,12 @@ yacc create \`y.tab.[ch]', if possible, from existing .[ch] Send bug reports to ." - exit 0 + exit $? ;; -v|--v|--ve|--ver|--vers|--versi|--versio|--version) echo "missing $scriptversion (GNU Automake)" - exit 0 + exit $? ;; -*) @@ -288,11 +288,18 @@ call might also be the consequence of using a buggy \`make' (AIX, DU, IRIX). You might want to install the \`Texinfo' package or the \`GNU make' package. Grab either from any GNU archive site." + # The file to touch is that specified with -o ... file=`echo "$*" | sed -n 's/.*-o \([^ ]*\).*/\1/p'` if test -z "$file"; then - file=`echo "$*" | sed 's/.* \([^ ]*\) *$/\1/'` - file=`sed -n '/^@setfilename/ { s/.* \([^ ]*\) *$/\1/; p; q; }' $file` - fi + # ... or it is the one specified with @setfilename ... + infile=`echo "$*" | sed 's/.* \([^ ]*\) *$/\1/'` + file=`sed -n '/^@setfilename/ { s/.* \([^ ]*\) *$/\1/; p; q; }' $infile` + # ... or it is derived from the source name (dir/f.texi becomes f.info) + test -z "$file" && file=`echo "$infile" | sed 's,.*/,,;s,.[^.]*$,,'`.info + fi + # If the file does not exist, the user really needs makeinfo; + # let's fail without touching anything. + test -f $file || exit 1 touch $file ;; Modified: python/branches/py3k-jit/Modules/_ctypes/libffi/src/arm/sysv.S ============================================================================== --- python/branches/py3k-jit/Modules/_ctypes/libffi/src/arm/sysv.S (original) +++ python/branches/py3k-jit/Modules/_ctypes/libffi/src/arm/sysv.S Tue Mar 16 21:40:29 2010 @@ -67,11 +67,19 @@ #if defined(__ARM_ARCH_6__) || defined(__ARM_ARCH_6J__) \ || defined(__ARM_ARCH_6K__) || defined(__ARM_ARCH_6Z__) \ - || defined(__ARM_ARCH_6ZK__) + || defined(__ARM_ARCH_6ZK__) || defined(__ARM_ARCH_6T2__) \ + || defined(__ARM_ARCH_6M__) # undef __ARM_ARCH__ # define __ARM_ARCH__ 6 #endif +#if defined(__ARM_ARCH_7__) || defined(__ARM_ARCH_7A__) \ + || defined(__ARM_ARCH_7R__) || defined(__ARM_ARCH_7M__) \ + || defined(__ARM_ARCH_7EM__) +# undef __ARM_ARCH__ +# define __ARM_ARCH__ 7 +#endif + #if __ARM_ARCH__ >= 5 # define call_reg(x) blx x #elif defined (__ARM_ARCH_4T__) @@ -189,7 +197,7 @@ @ return INT cmp r3, #FFI_TYPE_INT -#ifdef __SOFTFP__ +#if defined(__SOFTFP__) || defined(__ARM_EABI__) cmpne r3, #FFI_TYPE_FLOAT #endif streq r0, [r2] @@ -197,12 +205,12 @@ @ return INT64 cmp r3, #FFI_TYPE_SINT64 -#ifdef __SOFTFP__ +#if defined(__SOFTFP__) || defined(__ARM_EABI__) cmpne r3, #FFI_TYPE_DOUBLE #endif stmeqia r2, {r0, r1} -#ifndef __SOFTFP__ +#if !defined(__SOFTFP__) && !defined(__ARM_EABI__) beq LSYM(Lepilogue) @ return FLOAT @@ -245,21 +253,21 @@ beq .Lretint cmp r0, #FFI_TYPE_FLOAT -#ifdef __SOFTFP__ +#if defined(__SOFTFP__) || defined(__ARM_EABI__) beq .Lretint #else beq .Lretfloat #endif cmp r0, #FFI_TYPE_DOUBLE -#ifdef __SOFTFP__ +#if defined(__SOFTFP__) || defined(__ARM_EABI__) beq .Lretlonglong #else beq .Lretdouble #endif cmp r0, #FFI_TYPE_LONGDOUBLE -#ifdef __SOFTFP__ +#if defined(__SOFTFP__) || defined(__ARM_EABI__) beq .Lretlonglong #else beq .Lretlongdouble @@ -278,7 +286,7 @@ ldr r1, [sp, #4] b .Lclosure_epilogue -#ifndef __SOFTFP__ +#if !defined(__SOFTFP__) && !defined(__ARM_EABI__) .Lretfloat: ldfs f0, [sp] b .Lclosure_epilogue Deleted: python/branches/py3k-jit/Modules/_ctypes/libffi/src/darwin/ffitarget.h ============================================================================== --- python/branches/py3k-jit/Modules/_ctypes/libffi/src/darwin/ffitarget.h Tue Mar 16 21:40:29 2010 +++ (empty file) @@ -1,25 +0,0 @@ -/* - * This file is for MacOSX only. Dispatch to the right architecture include - * file based on the current archictecture (instead of relying on a symlink - * created by configure). This makes is possible to build a univeral binary - * of ctypes in one go. - */ -#if defined(__i386__) - -#ifndef X86_DARWIN -#define X86_DARWIN -#endif -#undef POWERPC_DARWIN - -#include "../src/x86/ffitarget.h" - -#elif defined(__ppc__) - -#ifndef POWERPC_DARWIN -#define POWERPC_DARWIN -#endif -#undef X86_DARWIN - -#include "../src/powerpc/ffitarget.h" - -#endif Modified: python/branches/py3k-jit/Modules/_ctypes/libffi/src/frv/ffi.c ============================================================================== --- python/branches/py3k-jit/Modules/_ctypes/libffi/src/frv/ffi.c (original) +++ python/branches/py3k-jit/Modules/_ctypes/libffi/src/frv/ffi.c Tue Mar 16 21:40:29 2010 @@ -1,6 +1,6 @@ /* ----------------------------------------------------------------------- ffi.c - Copyright (C) 2004 Anthony Green - Copyright (C) 2007 Free Software Foundation, Inc. + Copyright (C) 2007 Free Software Foundation, Inc. Copyright (C) 2008 Red Hat, Inc. FR-V Foreign Function Interface Modified: python/branches/py3k-jit/Modules/_ctypes/libffi/src/mips/ffi.c ============================================================================== --- python/branches/py3k-jit/Modules/_ctypes/libffi/src/mips/ffi.c (original) +++ python/branches/py3k-jit/Modules/_ctypes/libffi/src/mips/ffi.c Tue Mar 16 21:40:29 2010 @@ -99,7 +99,7 @@ p_argv = ecif->avalue; - for (i = ecif->cif->nargs, p_arg = ecif->cif->arg_types; i; i--, p_arg++) + for (i = 0, p_arg = ecif->cif->arg_types; i < ecif->cif->nargs; i++, p_arg++) { size_t z; unsigned int a; @@ -123,9 +123,25 @@ /* The size of a pointer depends on the ABI */ if (type == FFI_TYPE_POINTER) - type = - (ecif->cif->abi == FFI_N64) ? FFI_TYPE_SINT64 : FFI_TYPE_SINT32; + type = (ecif->cif->abi == FFI_N64 + || ecif->cif->abi == FFI_N64_SOFT_FLOAT) + ? FFI_TYPE_SINT64 : FFI_TYPE_SINT32; + if (i < 8 && (ecif->cif->abi == FFI_N32_SOFT_FLOAT + || ecif->cif->abi == FFI_N64_SOFT_FLOAT)) + { + switch (type) + { + case FFI_TYPE_FLOAT: + type = FFI_TYPE_UINT32; + break; + case FFI_TYPE_DOUBLE: + type = FFI_TYPE_UINT64; + break; + default: + break; + } + } switch (type) { case FFI_TYPE_SINT8: @@ -205,13 +221,17 @@ definitions and generates the appropriate flags. */ static unsigned -calc_n32_struct_flags(ffi_type *arg, unsigned *loc, unsigned *arg_reg) +calc_n32_struct_flags(int soft_float, ffi_type *arg, + unsigned *loc, unsigned *arg_reg) { unsigned flags = 0; unsigned index = 0; ffi_type *e; + if (soft_float) + return 0; + while ((e = arg->elements[index])) { /* Align this object. */ @@ -236,7 +256,7 @@ } static unsigned -calc_n32_return_struct_flags(ffi_type *arg) +calc_n32_return_struct_flags(int soft_float, ffi_type *arg) { unsigned flags = 0; unsigned small = FFI_TYPE_SMALLSTRUCT; @@ -256,6 +276,7 @@ small = FFI_TYPE_SMALLSTRUCT2; e = arg->elements[0]; + if (e->type == FFI_TYPE_DOUBLE) flags = FFI_TYPE_DOUBLE; else if (e->type == FFI_TYPE_FLOAT) @@ -276,6 +297,8 @@ floats! This must be passed the old way. */ return small; } + if (soft_float) + flags += FFI_TYPE_STRUCT_SOFT; } else if (!flags) @@ -382,16 +405,19 @@ #ifdef FFI_MIPS_N32 /* Set the flags necessary for N32 processing */ { + int type; unsigned arg_reg = 0; unsigned loc = 0; unsigned count = (cif->nargs < 8) ? cif->nargs : 8; unsigned index = 0; unsigned struct_flags = 0; + int soft_float = (cif->abi == FFI_N32_SOFT_FLOAT + || cif->abi == FFI_N64_SOFT_FLOAT); if (cif->rtype->type == FFI_TYPE_STRUCT) { - struct_flags = calc_n32_return_struct_flags(cif->rtype); + struct_flags = calc_n32_return_struct_flags(soft_float, cif->rtype); if (struct_flags == 0) { @@ -411,7 +437,22 @@ while (count-- > 0 && arg_reg < 8) { - switch ((cif->arg_types)[index]->type) + type = (cif->arg_types)[index]->type; + if (soft_float) + { + switch (type) + { + case FFI_TYPE_FLOAT: + type = FFI_TYPE_UINT32; + break; + case FFI_TYPE_DOUBLE: + type = FFI_TYPE_UINT64; + break; + default: + break; + } + } + switch (type) { case FFI_TYPE_FLOAT: case FFI_TYPE_DOUBLE: @@ -423,17 +464,25 @@ /* Align it. */ arg_reg = ALIGN(arg_reg, 2); /* Treat it as two adjacent doubles. */ - cif->flags += - (FFI_TYPE_DOUBLE << (arg_reg * FFI_FLAG_BITS)); - arg_reg++; - cif->flags += - (FFI_TYPE_DOUBLE << (arg_reg * FFI_FLAG_BITS)); - arg_reg++; + if (soft_float) + { + arg_reg += 2; + } + else + { + cif->flags += + (FFI_TYPE_DOUBLE << (arg_reg * FFI_FLAG_BITS)); + arg_reg++; + cif->flags += + (FFI_TYPE_DOUBLE << (arg_reg * FFI_FLAG_BITS)); + arg_reg++; + } break; case FFI_TYPE_STRUCT: loc = arg_reg * FFI_SIZEOF_ARG; - cif->flags += calc_n32_struct_flags((cif->arg_types)[index], + cif->flags += calc_n32_struct_flags(soft_float, + (cif->arg_types)[index], &loc, &arg_reg); break; @@ -469,17 +518,43 @@ case FFI_TYPE_VOID: /* Do nothing, 'cause FFI_TYPE_VOID is 0 */ break; - + + case FFI_TYPE_POINTER: + if (cif->abi == FFI_N32_SOFT_FLOAT || cif->abi == FFI_N32) + cif->flags += FFI_TYPE_SINT32 << (FFI_FLAG_BITS * 8); + else + cif->flags += FFI_TYPE_INT << (FFI_FLAG_BITS * 8); + break; + case FFI_TYPE_FLOAT: + if (soft_float) + { + cif->flags += FFI_TYPE_SINT32 << (FFI_FLAG_BITS * 8); + break; + } + /* else fall through */ case FFI_TYPE_DOUBLE: - cif->flags += cif->rtype->type << (FFI_FLAG_BITS * 8); + if (soft_float) + cif->flags += FFI_TYPE_INT << (FFI_FLAG_BITS * 8); + else + cif->flags += cif->rtype->type << (FFI_FLAG_BITS * 8); break; + case FFI_TYPE_LONGDOUBLE: /* Long double is returned as if it were a struct containing two doubles. */ - cif->flags += FFI_TYPE_STRUCT << (FFI_FLAG_BITS * 8); - cif->flags += (FFI_TYPE_DOUBLE + (FFI_TYPE_DOUBLE << FFI_FLAG_BITS)) - << (4 + (FFI_FLAG_BITS * 8)); + if (soft_float) + { + cif->flags += FFI_TYPE_STRUCT << (FFI_FLAG_BITS * 8); + cif->flags += FFI_TYPE_SMALLSTRUCT2 << (4 + (FFI_FLAG_BITS * 8)); + } + else + { + cif->flags += FFI_TYPE_STRUCT << (FFI_FLAG_BITS * 8); + cif->flags += (FFI_TYPE_DOUBLE + + (FFI_TYPE_DOUBLE << FFI_FLAG_BITS)) + << (4 + (FFI_FLAG_BITS * 8)); + } break; default: cif->flags += FFI_TYPE_INT << (FFI_FLAG_BITS * 8); @@ -499,7 +574,7 @@ /* Low level routine for calling N32 functions */ extern int ffi_call_N32(void (*)(char *, extended_cif *, int, int), extended_cif *, unsigned, - unsigned, unsigned *, void (*)(void)); + unsigned, void *, void (*)(void)); void ffi_call(ffi_cif *cif, void (*fn)(void), void *rvalue, void **avalue) { @@ -529,10 +604,13 @@ #ifdef FFI_MIPS_N32 case FFI_N32: + case FFI_N32_SOFT_FLOAT: case FFI_N64: + case FFI_N64_SOFT_FLOAT: { int copy_rvalue = 0; - void *rvalue_copy = ecif.rvalue; + int copy_offset = 0; + char *rvalue_copy = ecif.rvalue; if (cif->rtype->type == FFI_TYPE_STRUCT && cif->rtype->size < 16) { /* For structures smaller than 16 bytes we clobber memory @@ -541,10 +619,20 @@ rvalue_copy = alloca(16); copy_rvalue = 1; } + else if (cif->rtype->type == FFI_TYPE_FLOAT + && (cif->abi == FFI_N64_SOFT_FLOAT + || cif->abi == FFI_N32_SOFT_FLOAT)) + { + rvalue_copy = alloca (8); + copy_rvalue = 1; +#if defined(__MIPSEB__) || defined(_MIPSEB) + copy_offset = 4; +#endif + } ffi_call_N32(ffi_prep_args, &ecif, cif->bytes, cif->flags, rvalue_copy, fn); if (copy_rvalue) - memcpy(ecif.rvalue, rvalue_copy, cif->rtype->size); + memcpy(ecif.rvalue, rvalue_copy + copy_offset, cif->rtype->size); } break; #endif @@ -684,9 +772,10 @@ { if (i < 2 && !seen_int && (arg_types[i]->type == FFI_TYPE_FLOAT || - arg_types[i]->type == FFI_TYPE_DOUBLE)) + arg_types[i]->type == FFI_TYPE_DOUBLE || + arg_types[i]->type == FFI_TYPE_LONGDOUBLE)) { -#ifdef __MIPSEB__ +#if defined(__MIPSEB__) || defined(_MIPSEB) if (arg_types[i]->type == FFI_TYPE_FLOAT) avaluep[i] = ((char *) &fpr[i]) + sizeof (float); else @@ -755,7 +844,7 @@ static void copy_struct_N32(char *target, unsigned offset, ffi_abi abi, ffi_type *type, int argn, unsigned arg_offset, ffi_arg *ar, - ffi_arg *fpr) + ffi_arg *fpr, int soft_float) { ffi_type **elt_typep = type->elements; while(*elt_typep) @@ -777,7 +866,7 @@ tp = target + offset; - if (elt_type->type == FFI_TYPE_DOUBLE) + if (elt_type->type == FFI_TYPE_DOUBLE && !soft_float) *(double *)tp = *(double *)fpp; else memcpy(tp, argp + arg_offset, elt_type->size); @@ -815,8 +904,12 @@ ffi_arg *avalue; ffi_type **arg_types; int i, avn, argn; + int soft_float; + ffi_arg *argp; cif = closure->cif; + soft_float = cif->abi == FFI_N64_SOFT_FLOAT + || cif->abi == FFI_N32_SOFT_FLOAT; avalue = alloca (cif->nargs * sizeof (ffi_arg)); avaluep = alloca (cif->nargs * sizeof (ffi_arg)); @@ -839,10 +932,16 @@ while (i < avn) { if (arg_types[i]->type == FFI_TYPE_FLOAT - || arg_types[i]->type == FFI_TYPE_DOUBLE) + || arg_types[i]->type == FFI_TYPE_DOUBLE + || arg_types[i]->type == FFI_TYPE_LONGDOUBLE) { - ffi_arg *argp = argn >= 8 ? ar + argn : fpr + argn; -#ifdef __MIPSEB__ + argp = (argn >= 8 || soft_float) ? ar + argn : fpr + argn; + if ((arg_types[i]->type == FFI_TYPE_LONGDOUBLE) && ((unsigned)argp & (arg_types[i]->alignment-1))) + { + argp=(ffi_arg*)ALIGN(argp,arg_types[i]->alignment); + argn++; + } +#if defined(__MIPSEB__) || defined(_MIPSEB) if (arg_types[i]->type == FFI_TYPE_FLOAT && argn < 8) avaluep[i] = ((char *) argp) + sizeof (float); else @@ -856,11 +955,15 @@ if (arg_types[i]->alignment > sizeof(ffi_arg)) argn = ALIGN(argn, arg_types[i]->alignment / sizeof(ffi_arg)); - ffi_arg *argp = ar + argn; + argp = ar + argn; /* The size of a pointer depends on the ABI */ if (type == FFI_TYPE_POINTER) - type = (cif->abi == FFI_N64) ? FFI_TYPE_SINT64 : FFI_TYPE_SINT32; + type = (cif->abi == FFI_N64 || cif->abi == FFI_N64_SOFT_FLOAT) + ? FFI_TYPE_SINT64 : FFI_TYPE_SINT32; + + if (soft_float && type == FFI_TYPE_FLOAT) + type = FFI_TYPE_UINT32; switch (type) { @@ -901,7 +1004,7 @@ it was passed in registers. */ avaluep[i] = alloca(arg_types[i]->size); copy_struct_N32(avaluep[i], 0, cif->abi, arg_types[i], - argn, 0, ar, fpr); + argn, 0, ar, fpr, soft_float); break; } Modified: python/branches/py3k-jit/Modules/_ctypes/libffi/src/mips/ffitarget.h ============================================================================== --- python/branches/py3k-jit/Modules/_ctypes/libffi/src/mips/ffitarget.h (original) +++ python/branches/py3k-jit/Modules/_ctypes/libffi/src/mips/ffitarget.h Tue Mar 16 21:40:29 2010 @@ -28,7 +28,10 @@ #define LIBFFI_TARGET_H #ifdef linux -#include +# include +#else +# include +#endif # ifndef _ABIN32 # define _ABIN32 _MIPS_SIM_NABI32 # endif @@ -38,7 +41,6 @@ # ifndef _ABIO32 # define _ABIO32 _MIPS_SIM_ABI32 # endif -#endif #if !defined(_MIPS_SIM) -- something is very wrong -- @@ -95,6 +97,15 @@ #define FFI_TYPE_STRUCT_DF 189 #define FFI_TYPE_STRUCT_SMALL 93 #define FFI_TYPE_STRUCT_SMALL2 109 + +/* and for n32 soft float, add 16 * 2^4 */ +#define FFI_TYPE_STRUCT_D_SOFT 317 +#define FFI_TYPE_STRUCT_F_SOFT 301 +#define FFI_TYPE_STRUCT_DD_SOFT 509 +#define FFI_TYPE_STRUCT_FF_SOFT 429 +#define FFI_TYPE_STRUCT_FD_SOFT 493 +#define FFI_TYPE_STRUCT_DF_SOFT 445 +#define FFI_TYPE_STRUCT_SOFT 16 #endif #ifdef LIBFFI_ASM @@ -145,7 +156,8 @@ # endif /* _MIPS_SIM==_ABI64 */ #endif /* !FFI_MIPS_O32 */ #else /* !LIBFFI_ASM */ -#ifdef FFI_MIPS_O32 +# ifdef __GNUC__ +# ifdef FFI_MIPS_O32 /* O32 stack frames have 32bit integer args */ typedef unsigned int ffi_arg __attribute__((__mode__(__SI__))); typedef signed int ffi_sarg __attribute__((__mode__(__SI__))); @@ -153,7 +165,18 @@ /* N32 and N64 frames have 64bit integer args */ typedef unsigned int ffi_arg __attribute__((__mode__(__DI__))); typedef signed int ffi_sarg __attribute__((__mode__(__DI__))); -#endif +# endif +# else +# ifdef FFI_MIPS_O32 +/* O32 stack frames have 32bit integer args */ +typedef __uint32_t ffi_arg; +typedef __int32_t ffi_sarg; +# else +/* N32 and N64 frames have 64bit integer args */ +typedef __uint64_t ffi_arg; +typedef __int64_t ffi_sarg; +# endif +# endif /* __GNUC__ */ typedef enum ffi_abi { FFI_FIRST_ABI = 0, @@ -161,6 +184,8 @@ FFI_N32, FFI_N64, FFI_O32_SOFT_FLOAT, + FFI_N32_SOFT_FLOAT, + FFI_N64_SOFT_FLOAT, #ifdef FFI_MIPS_O32 #ifdef __mips_soft_float @@ -170,9 +195,17 @@ #endif #else # if _MIPS_SIM==_ABI64 +# ifdef __mips_soft_float + FFI_DEFAULT_ABI = FFI_N64_SOFT_FLOAT, +# else FFI_DEFAULT_ABI = FFI_N64, +# endif # else +# ifdef __mips_soft_float + FFI_DEFAULT_ABI = FFI_N32_SOFT_FLOAT, +# else FFI_DEFAULT_ABI = FFI_N32, +# endif # endif #endif Modified: python/branches/py3k-jit/Modules/_ctypes/libffi/src/mips/n32.S ============================================================================== --- python/branches/py3k-jit/Modules/_ctypes/libffi/src/mips/n32.S (original) +++ python/branches/py3k-jit/Modules/_ctypes/libffi/src/mips/n32.S Tue Mar 16 21:40:29 2010 @@ -14,14 +14,14 @@ 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 THE AUTHORS OR COPYRIGHT HOLDERS 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 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 THE AUTHORS OR COPYRIGHT + HOLDERS 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 @@ -40,7 +40,9 @@ #define SIZEOF_FRAME ( 8 * FFI_SIZEOF_ARG ) +#ifdef linux .abicalls +#endif .text .align 2 .globl ffi_call_N32 @@ -217,8 +219,10 @@ # Shift the return type flag over SRL t6, 8*FFI_FLAG_BITS - + + beq t6, FFI_TYPE_SINT32, retint bne t6, FFI_TYPE_INT, retfloat +retint: jal t9 REG_L t4, 4*FFI_SIZEOF_ARG($fp) REG_S v0, 0(t4) @@ -277,12 +281,58 @@ b epilogue retstruct_f_d: - bne t6, FFI_TYPE_STRUCT_FD, retstruct_small + bne t6, FFI_TYPE_STRUCT_FD, retstruct_d_soft jal t9 REG_L t4, 4*FFI_SIZEOF_ARG($fp) s.s $f0, 0(t4) s.d $f2, 8(t4) b epilogue + +retstruct_d_soft: + bne t6, FFI_TYPE_STRUCT_D_SOFT, retstruct_f_soft + jal t9 + REG_L t4, 4*FFI_SIZEOF_ARG($fp) + sd v0, 0(t4) + b epilogue + +retstruct_f_soft: + bne t6, FFI_TYPE_STRUCT_F_SOFT, retstruct_d_d_soft + jal t9 + REG_L t4, 4*FFI_SIZEOF_ARG($fp) + sw v0, 0(t4) + b epilogue + +retstruct_d_d_soft: + bne t6, FFI_TYPE_STRUCT_DD_SOFT, retstruct_f_f_soft + jal t9 + REG_L t4, 4*FFI_SIZEOF_ARG($fp) + sd v0, 0(t4) + sd v1, 8(t4) + b epilogue + +retstruct_f_f_soft: + bne t6, FFI_TYPE_STRUCT_FF_SOFT, retstruct_d_f_soft + jal t9 + REG_L t4, 4*FFI_SIZEOF_ARG($fp) + sw v0, 0(t4) + sw v1, 4(t4) + b epilogue + +retstruct_d_f_soft: + bne t6, FFI_TYPE_STRUCT_DF_SOFT, retstruct_f_d_soft + jal t9 + REG_L t4, 4*FFI_SIZEOF_ARG($fp) + sd v0, 0(t4) + sw v1, 8(t4) + b epilogue + +retstruct_f_d_soft: + bne t6, FFI_TYPE_STRUCT_FD_SOFT, retstruct_small + jal t9 + REG_L t4, 4*FFI_SIZEOF_ARG($fp) + sw v0, 0(t4) + sd v1, 8(t4) + b epilogue retstruct_small: bne t6, FFI_TYPE_STRUCT_SMALL, retstruct_small2 @@ -413,6 +463,11 @@ jalr t9 # Return flags are in v0 + bne v0, FFI_TYPE_SINT32, cls_retint + lw v0, V0_OFF2($sp) + b cls_epilogue + +cls_retint: bne v0, FFI_TYPE_INT, cls_retfloat REG_L v0, V0_OFF2($sp) b cls_epilogue @@ -474,6 +529,7 @@ .LFE2: .end ffi_closure_N32 +#ifdef linux .section .eh_frame,"aw", at progbits .Lframe1: .4byte .LECIE1-.LSCIE1 # length @@ -530,5 +586,6 @@ .uleb128 (SIZEOF_FRAME2 - RA_OFF2)/4 .align EH_FRAME_ALIGN .LEFDE3: +#endif /* linux */ #endif Modified: python/branches/py3k-jit/Modules/_ctypes/libffi/src/mips/o32.S ============================================================================== --- python/branches/py3k-jit/Modules/_ctypes/libffi/src/mips/o32.S (original) +++ python/branches/py3k-jit/Modules/_ctypes/libffi/src/mips/o32.S Tue Mar 16 21:40:29 2010 @@ -14,14 +14,14 @@ 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 THE AUTHORS OR COPYRIGHT HOLDERS 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 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 THE AUTHORS OR COPYRIGHT + HOLDERS 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 Modified: python/branches/py3k-jit/Modules/_ctypes/libffi/src/pa/ffi.c ============================================================================== --- python/branches/py3k-jit/Modules/_ctypes/libffi/src/pa/ffi.c (original) +++ python/branches/py3k-jit/Modules/_ctypes/libffi/src/pa/ffi.c Tue Mar 16 21:40:29 2010 @@ -492,6 +492,13 @@ avalue[i] = (void *)(stack - slot); break; +#ifdef PA_HPUX + case FFI_TYPE_LONGDOUBLE: + /* Long doubles are treated like a big structure. */ + avalue[i] = (void *) *(stack - slot); + break; +#endif + case FFI_TYPE_STRUCT: /* Structs smaller or equal than 4 bytes are passed in one register. Structs smaller or equal 8 bytes are passed in two Modified: python/branches/py3k-jit/Modules/_ctypes/libffi/src/powerpc/aix.S ============================================================================== --- python/branches/py3k-jit/Modules/_ctypes/libffi/src/powerpc/aix.S (original) +++ python/branches/py3k-jit/Modules/_ctypes/libffi/src/powerpc/aix.S Tue Mar 16 21:40:29 2010 @@ -1,5 +1,5 @@ /* ----------------------------------------------------------------------- - aix.S - Copyright (c) 2002 Free Software Foundation, Inc. + aix.S - Copyright (c) 2002,2009 Free Software Foundation, Inc. based on darwin.S by John Hornkvist PowerPC Assembly glue. @@ -86,9 +86,13 @@ #define L(x) x .file "aix.S" .toc - .csect .text[PR] - .align 2 -.globl ffi_prep_args + + /* void ffi_call_AIX(extended_cif *ecif, unsigned long bytes, + * unsigned int flags, unsigned int *rvalue, + * void (*fn)(), + * void (*prep_args)(extended_cif*, unsigned *const)); + * r3=ecif, r4=bytes, r5=flags, r6=rvalue, r7=fn, r8=prep_args + */ .csect .text[PR] .align 2 @@ -96,61 +100,151 @@ .globl .ffi_call_AIX .csect ffi_call_AIX[DS] ffi_call_AIX: - .long .ffi_call_AIX, TOC[tc0], 0 +#ifdef __64BIT__ + .llong .ffi_call_AIX, TOC[tc0], 0 .csect .text[PR] .ffi_call_AIX: - mr r12,r8 // We only need r12 until the call, so it doesn't have to be saved... - /* Save the old stack pointer as AP. */ - mr r8,r1 - - /* Allocate the stack space we need. */ - stwux r1,r1,r4 - /* Save registers we use. */ - mflr r9 + mflr r0 - stw r28,-16(r8) - stw r29,-12(r8) - stw r30, -8(r8) - stw r31, -4(r8) - - stw r9, 8(r8) - stw r2, 20(r1) + std r28,-32(r1) + std r29,-24(r1) + std r30,-16(r1) + std r31, -8(r1) + + std r0, 16(r1) + mr r28, r1 /* our AP. */ + stdux r1, r1, r4 /* Save arguments over call... */ - mr r31,r5 /* flags, */ - mr r30,r6 /* rvalue, */ - mr r29,r7 /* function address, */ - mr r28,r8 /* our AP. */ + mr r31, r5 /* flags, */ + mr r30, r6 /* rvalue, */ + mr r29, r7 /* function address. */ + std r2, 40(r1) /* Call ffi_prep_args. */ - mr r4,r1 - li r9,0 + mr r4, r1 + bl .ffi_prep_args - lwz r2,4(r12) - lwz r12,0(r12) - mtctr r12 // r12 holds address of _ffi_prep_args + /* Now do the call. */ + ld r0, 0(r29) + ld r2, 8(r29) + ld r11, 16(r29) + /* Set up cr1 with bits 4-7 of the flags. */ + mtcrf 0x40, r31 + mtctr r0 + /* Load all those argument registers. */ + // We have set up a nice stack frame, just load it into registers. + ld r3, 40+(1*8)(r1) + ld r4, 40+(2*8)(r1) + ld r5, 40+(3*8)(r1) + ld r6, 40+(4*8)(r1) + nop + ld r7, 40+(5*8)(r1) + ld r8, 40+(6*8)(r1) + ld r9, 40+(7*8)(r1) + ld r10,40+(8*8)(r1) + +L1: + /* Load all the FP registers. */ + bf 6,L2 // 2f + 0x18 + lfd f1,-32-(13*8)(r28) + lfd f2,-32-(12*8)(r28) + lfd f3,-32-(11*8)(r28) + lfd f4,-32-(10*8)(r28) + nop + lfd f5,-32-(9*8)(r28) + lfd f6,-32-(8*8)(r28) + lfd f7,-32-(7*8)(r28) + lfd f8,-32-(6*8)(r28) + nop + lfd f9,-32-(5*8)(r28) + lfd f10,-32-(4*8)(r28) + lfd f11,-32-(3*8)(r28) + lfd f12,-32-(2*8)(r28) + nop + lfd f13,-32-(1*8)(r28) + +L2: + /* Make the call. */ bctrl - lwz r2,20(r1) + ld r2, 40(r1) + + /* Now, deal with the return value. */ + mtcrf 0x01, r31 + + bt 30, L(done_return_value) + bt 29, L(fp_return_value) + std r3, 0(r30) + + /* Fall through... */ + +L(done_return_value): + /* Restore the registers we used and return. */ + mr r1, r28 + ld r0, 16(r28) + ld r28, -32(r1) + mtlr r0 + ld r29, -24(r1) + ld r30, -16(r1) + ld r31, -8(r1) + blr + +L(fp_return_value): + bf 28, L(float_return_value) + stfd f1, 0(r30) + bf 31, L(done_return_value) + stfd f2, 8(r30) + b L(done_return_value) +L(float_return_value): + stfs f1, 0(r30) + b L(done_return_value) + +#else /* ! __64BIT__ */ + + .long .ffi_call_AIX, TOC[tc0], 0 + .csect .text[PR] +.ffi_call_AIX: + /* Save registers we use. */ + mflr r0 + + stw r28,-16(r1) + stw r29,-12(r1) + stw r30, -8(r1) + stw r31, -4(r1) + + stw r0, 8(r1) + mr r28, r1 /* out AP. */ + stwux r1, r1, r4 + + /* Save arguments over call... */ + mr r31, r5 /* flags, */ + mr r30, r6 /* rvalue, */ + mr r29, r7 /* function address, */ + stw r2, 20(r1) + + /* Call ffi_prep_args. */ + mr r4, r1 + bl .ffi_prep_args /* Now do the call. */ - lwz r12,0(r29) + lwz r0, 0(r29) + lwz r2, 4(r29) + lwz r11, 8(r29) /* Set up cr1 with bits 4-7 of the flags. */ - mtcrf 0x40,r31 - stw r2,20(r1) - mtctr r12 - lwz r2,4(r29) + mtcrf 0x40, r31 + mtctr r0 /* Load all those argument registers. */ // We have set up a nice stack frame, just load it into registers. - lwz r3, 20+(1*4)(r1) - lwz r4, 20+(2*4)(r1) - lwz r5, 20+(3*4)(r1) - lwz r6, 20+(4*4)(r1) - nop - lwz r7, 20+(5*4)(r1) - lwz r8, 20+(6*4)(r1) - lwz r9, 20+(7*4)(r1) - lwz r10,20+(8*4)(r1) + lwz r3, 20+(1*4)(r1) + lwz r4, 20+(2*4)(r1) + lwz r5, 20+(3*4)(r1) + lwz r6, 20+(4*4)(r1) + nop + lwz r7, 20+(5*4)(r1) + lwz r8, 20+(6*4)(r1) + lwz r9, 20+(7*4)(r1) + lwz r10,20+(8*4)(r1) L1: /* Load all the FP registers. */ @@ -165,47 +259,48 @@ lfd f7,-16-(7*8)(r28) lfd f8,-16-(6*8)(r28) nop - lfd f9,-16-(5*8)(r28) - lfd f10,-16-(4*8)(r28) - lfd f11,-16-(3*8)(r28) - lfd f12,-16-(2*8)(r28) + lfd f9,-16-(5*8)(r28) + lfd f10,-16-(4*8)(r28) + lfd f11,-16-(3*8)(r28) + lfd f12,-16-(2*8)(r28) nop - lfd f13,-16-(1*8)(r28) + lfd f13,-16-(1*8)(r28) L2: /* Make the call. */ bctrl - lwz r2,20(r1) + lwz r2, 20(r1) /* Now, deal with the return value. */ - mtcrf 0x01,r31 + mtcrf 0x01, r31 - bt 30,L(done_return_value) - bt 29,L(fp_return_value) - stw r3,0(r30) - bf 28,L(done_return_value) - stw r4,4(r30) + bt 30, L(done_return_value) + bt 29, L(fp_return_value) + stw r3, 0(r30) + bf 28, L(done_return_value) + stw r4, 4(r30) /* Fall through... */ L(done_return_value): /* Restore the registers we used and return. */ - lwz r9, 8(r28) - lwz r31, -4(r28) - mtlr r9 - lwz r30, -8(r28) - lwz r29,-12(r28) - lwz r28,-16(r28) - lwz r1,0(r1) + mr r1, r28 + lwz r0, 8(r28) + lwz r28,-16(r1) + mtlr r0 + lwz r29,-12(r1) + lwz r30, -8(r1) + lwz r31, -4(r1) blr L(fp_return_value): - bf 28,L(float_return_value) - stfd f1,0(r30) + bf 28, L(float_return_value) + stfd f1, 0(r30) b L(done_return_value) L(float_return_value): - stfs f1,0(r30) + stfs f1, 0(r30) b L(done_return_value) +#endif .long 0 .byte 0,0,0,1,128,4,0,0 //END(ffi_call_AIX) @@ -216,7 +311,11 @@ .globl .ffi_call_DARWIN .csect ffi_call_DARWIN[DS] ffi_call_DARWIN: +#ifdef __64BIT__ + .llong .ffi_call_DARWIN, TOC[tc0], 0 +#else .long .ffi_call_DARWIN, TOC[tc0], 0 +#endif .csect .text[PR] .ffi_call_DARWIN: blr Modified: python/branches/py3k-jit/Modules/_ctypes/libffi/src/powerpc/aix_closure.S ============================================================================== --- python/branches/py3k-jit/Modules/_ctypes/libffi/src/powerpc/aix_closure.S (original) +++ python/branches/py3k-jit/Modules/_ctypes/libffi/src/powerpc/aix_closure.S Tue Mar 16 21:40:29 2010 @@ -1,5 +1,5 @@ /* ----------------------------------------------------------------------- - aix_closure.S - Copyright (c) 2002 2003 Free Software Foundation, Inc. + aix_closure.S - Copyright (c) 2002, 2003, 2009 Free Software Foundation, Inc. based on darwin_closure.S PowerPC Assembly glue. @@ -94,65 +94,238 @@ .globl ffi_closure_ASM .globl .ffi_closure_ASM .csect ffi_closure_ASM[DS] - ffi_closure_ASM: - .long .ffi_closure_ASM, TOC[tc0], 0 +#ifdef __64BIT__ + .llong .ffi_closure_ASM, TOC[tc0], 0 .csect .text[PR] .ffi_closure_ASM: +/* we want to build up an area for the parameters passed */ +/* in registers (both floating point and integer) */ - mflr r0 /* extract return address */ - stw r0, 8(r1) /* save the return address */ - - /* 24 Bytes (Linkage Area) */ - /* 32 Bytes (params) */ + /* we store gpr 3 to gpr 10 (aligned to 4) + in the parents outgoing area */ + std r3, 48+(0*8)(r1) + std r4, 48+(1*8)(r1) + std r5, 48+(2*8)(r1) + std r6, 48+(3*8)(r1) + mflr r0 + + std r7, 48+(4*8)(r1) + std r8, 48+(5*8)(r1) + std r9, 48+(6*8)(r1) + std r10, 48+(7*8)(r1) + std r0, 16(r1) /* save the return address */ + + + /* 48 Bytes (Linkage Area) */ + /* 64 Bytes (params) */ + /* 16 Bytes (result) */ /* 104 Bytes (13*8 from FPR) */ - /* 8 Bytes (result) */ - /* 168 Bytes */ + /* 8 Bytes (alignment) */ + /* 240 Bytes */ + + stdu r1, -240(r1) /* skip over caller save area + keep stack aligned to 16 */ + + /* next save fpr 1 to fpr 13 (aligned to 8) */ + stfd f1, 128+(0*8)(r1) + stfd f2, 128+(1*8)(r1) + stfd f3, 128+(2*8)(r1) + stfd f4, 128+(3*8)(r1) + stfd f5, 128+(4*8)(r1) + stfd f6, 128+(5*8)(r1) + stfd f7, 128+(6*8)(r1) + stfd f8, 128+(7*8)(r1) + stfd f9, 128+(8*8)(r1) + stfd f10, 128+(9*8)(r1) + stfd f11, 128+(10*8)(r1) + stfd f12, 128+(11*8)(r1) + stfd f13, 128+(12*8)(r1) + + /* set up registers for the routine that actually does the work */ + /* get the context pointer from the trampoline */ + mr r3, r11 + + /* now load up the pointer to the result storage */ + addi r4, r1, 112 + + /* now load up the pointer to the saved gpr registers */ + addi r5, r1, 288 + + /* now load up the pointer to the saved fpr registers */ + addi r6, r1, 128 + + /* make the call */ + bl .ffi_closure_helper_DARWIN + nop + + /* now r3 contains the return type */ + /* so use it to look up in a table */ + /* so we know how to deal with each type */ + + /* look up the proper starting point in table */ + /* by using return type as offset */ + ld r4, LC..60(2) /* get address of jump table */ + sldi r3, r3, 4 /* now multiply return type by 16 */ + ld r0, 240+16(r1) /* load return address */ + add r3, r3, r4 /* add contents of table to table address */ + mtctr r3 + bctr /* jump to it */ + +/* Each fragment must be exactly 16 bytes long (4 instructions). + Align to 16 byte boundary for cache and dispatch efficiency. */ + .align 4 + +L..60: +/* case FFI_TYPE_VOID */ + mtlr r0 + addi r1, r1, 240 + blr + nop + +/* case FFI_TYPE_INT */ + lwa r3, 112+4(r1) + mtlr r0 + addi r1, r1, 240 + blr + +/* case FFI_TYPE_FLOAT */ + lfs f1, 112+0(r1) + mtlr r0 + addi r1, r1, 240 + blr + +/* case FFI_TYPE_DOUBLE */ + lfd f1, 112+0(r1) + mtlr r0 + addi r1, r1, 240 + blr + +/* case FFI_TYPE_LONGDOUBLE */ + lfd f1, 112+0(r1) + mtlr r0 + lfd f2, 112+8(r1) + b L..finish + +/* case FFI_TYPE_UINT8 */ + lbz r3, 112+7(r1) + mtlr r0 + addi r1, r1, 240 + blr - stwu r1,-176(r1) /* skip over caller save area - keep stack aligned to 16 */ +/* case FFI_TYPE_SINT8 */ + lbz r3, 112+7(r1) + mtlr r0 + extsb r3, r3 + b L..finish + +/* case FFI_TYPE_UINT16 */ + lhz r3, 112+6(r1) + mtlr r0 +L..finish: + addi r1, r1, 240 + blr + +/* case FFI_TYPE_SINT16 */ + lha r3, 112+6(r1) + mtlr r0 + addi r1, r1, 240 + blr + +/* case FFI_TYPE_UINT32 */ + lwz r3, 112+4(r1) + mtlr r0 + addi r1, r1, 240 + blr + +/* case FFI_TYPE_SINT32 */ + lwa r3, 112+4(r1) + mtlr r0 + addi r1, r1, 240 + blr + +/* case FFI_TYPE_UINT64 */ + ld r3, 112+0(r1) + mtlr r0 + addi r1, r1, 240 + blr +/* case FFI_TYPE_SINT64 */ + ld r3, 112+0(r1) + mtlr r0 + addi r1, r1, 240 + blr + +/* case FFI_TYPE_STRUCT */ + mtlr r0 + addi r1, r1, 240 + blr + nop + +/* case FFI_TYPE_POINTER */ + ld r3, 112+0(r1) + mtlr r0 + addi r1, r1, 240 + blr + +#else /* ! __64BIT__ */ + + .long .ffi_closure_ASM, TOC[tc0], 0 + .csect .text[PR] +.ffi_closure_ASM: /* we want to build up an area for the parameters passed */ /* in registers (both floating point and integer) */ /* we store gpr 3 to gpr 10 (aligned to 4) in the parents outgoing area */ - stw r3, 200(r1) - stw r4, 204(r1) - stw r5, 208(r1) - stw r6, 212(r1) - stw r7, 216(r1) - stw r8, 220(r1) - stw r9, 224(r1) - stw r10, 228(r1) + stw r3, 24+(0*4)(r1) + stw r4, 24+(1*4)(r1) + stw r5, 24+(2*4)(r1) + stw r6, 24+(3*4)(r1) + mflr r0 + + stw r7, 24+(4*4)(r1) + stw r8, 24+(5*4)(r1) + stw r9, 24+(6*4)(r1) + stw r10, 24+(7*4)(r1) + stw r0, 8(r1) + + /* 24 Bytes (Linkage Area) */ + /* 32 Bytes (params) */ + /* 16 Bytes (result) */ + /* 104 Bytes (13*8 from FPR) */ + /* 176 Bytes */ + + stwu r1, -176(r1) /* skip over caller save area + keep stack aligned to 16 */ /* next save fpr 1 to fpr 13 (aligned to 8) */ - stfd f1, 56(r1) - stfd f2, 64(r1) - stfd f3, 72(r1) - stfd f4, 80(r1) - stfd f5, 88(r1) - stfd f6, 96(r1) - stfd f7, 104(r1) - stfd f8, 112(r1) - stfd f9, 120(r1) - stfd f10, 128(r1) - stfd f11, 136(r1) - stfd f12, 144(r1) - stfd f13, 152(r1) + stfd f1, 72+(0*8)(r1) + stfd f2, 72+(1*8)(r1) + stfd f3, 72+(2*8)(r1) + stfd f4, 72+(3*8)(r1) + stfd f5, 72+(4*8)(r1) + stfd f6, 72+(5*8)(r1) + stfd f7, 72+(6*8)(r1) + stfd f8, 72+(7*8)(r1) + stfd f9, 72+(8*8)(r1) + stfd f10, 72+(9*8)(r1) + stfd f11, 72+(10*8)(r1) + stfd f12, 72+(11*8)(r1) + stfd f13, 72+(12*8)(r1) /* set up registers for the routine that actually does the work */ /* get the context pointer from the trampoline */ - mr r3,r11 + mr r3, r11 /* now load up the pointer to the result storage */ - addi r4,r1,160 + addi r4, r1, 56 /* now load up the pointer to the saved gpr registers */ - addi r5,r1,200 + addi r5, r1, 200 /* now load up the pointer to the saved fpr registers */ - addi r6,r1,56 + addi r6, r1, 72 /* make the call */ bl .ffi_closure_helper_DARWIN @@ -164,84 +337,107 @@ /* look up the proper starting point in table */ /* by using return type as offset */ - addi r5,r1,160 /* get pointer to results area */ - lwz r4,LC..60(2) /* get address of jump table */ - slwi r3,r3,2 /* now multiply return type by 4 */ - lwzx r3,r4,r3 /* get the contents of that table value */ - add r3,r3,r4 /* add contents of table to table address */ - mtctr r3 + lwz r4, LC..60(2) /* get address of jump table */ + slwi r3, r3, 4 /* now multiply return type by 4 */ + lwz r0, 176+8(r1) /* load return address */ + add r3, r3, r4 /* add contents of table to table address */ + mtctr r3 bctr /* jump to it */ +/* Each fragment must be exactly 16 bytes long (4 instructions). + Align to 16 byte boundary for cache and dispatch efficiency. */ + .align 4 + L..60: - .long L..44-L..60 /* FFI_TYPE_VOID */ - .long L..50-L..60 /* FFI_TYPE_INT */ - .long L..47-L..60 /* FFI_TYPE_FLOAT */ - .long L..46-L..60 /* FFI_TYPE_DOUBLE */ - .long L..46-L..60 /* FFI_TYPE_LONGDOUBLE */ - .long L..56-L..60 /* FFI_TYPE_UINT8 */ - .long L..55-L..60 /* FFI_TYPE_SINT8 */ - .long L..58-L..60 /* FFI_TYPE_UINT16 */ - .long L..57-L..60 /* FFI_TYPE_SINT16 */ - .long L..50-L..60 /* FFI_TYPE_UINT32 */ - .long L..50-L..60 /* FFI_TYPE_SINT32 */ - .long L..48-L..60 /* FFI_TYPE_UINT64 */ - .long L..48-L..60 /* FFI_TYPE_SINT64 */ - .long L..44-L..60 /* FFI_TYPE_STRUCT */ - .long L..50-L..60 /* FFI_TYPE_POINTER */ - - -/* case double */ -L..46: - lfd f1,0(r5) - b L..44 - -/* case float */ -L..47: - lfs f1,0(r5) - b L..44 - -/* case long long */ -L..48: - lwz r3,0(r5) - lwz r4,4(r5) - b L..44 - -/* case default / int32 / pointer */ -L..50: - lwz r3,0(r5) - b L..44 - -/* case signed int8 */ -L..55: - addi r5,r5,3 - lbz r3,0(r5) - slwi r3,r3,24 - srawi r3,r3,24 - b L..44 - -/* case unsigned int8 */ -L..56: - addi r5,r5,3 - lbz r3,0(r5) - b L..44 - -/* case signed int16 */ -L..57: - addi r5,r5,2 - lhz r3,0(r5) - extsh r3,r3 - b L..44 - -/* case unsigned int16 */ -L..58: - addi r5,r5,2 - lhz r3,0(r5) - -/* case void / done */ -L..44: - addi r1,r1,176 /* restore stack pointer */ - lwz r0,8(r1) /* get return address */ - mtlr r0 /* reset link register */ +/* case FFI_TYPE_VOID */ + mtlr r0 + addi r1, r1, 176 + blr + nop + +/* case FFI_TYPE_INT */ + lwz r3, 56+0(r1) + mtlr r0 + addi r1, r1, 176 + blr + +/* case FFI_TYPE_FLOAT */ + lfs f1, 56+0(r1) + mtlr r0 + addi r1, r1, 176 + blr + +/* case FFI_TYPE_DOUBLE */ + lfd f1, 56+0(r1) + mtlr r0 + addi r1, r1, 176 blr +/* case FFI_TYPE_LONGDOUBLE */ + lfd f1, 56+0(r1) + mtlr r0 + lfd f2, 56+8(r1) + b L..finish + +/* case FFI_TYPE_UINT8 */ + lbz r3, 56+3(r1) + mtlr r0 + addi r1, r1, 176 + blr + +/* case FFI_TYPE_SINT8 */ + lbz r3, 56+3(r1) + mtlr r0 + extsb r3, r3 + b L..finish + +/* case FFI_TYPE_UINT16 */ + lhz r3, 56+2(r1) + mtlr r0 + addi r1, r1, 176 + blr + +/* case FFI_TYPE_SINT16 */ + lha r3, 56+2(r1) + mtlr r0 + addi r1, r1, 176 + blr + +/* case FFI_TYPE_UINT32 */ + lwz r3, 56+0(r1) + mtlr r0 + addi r1, r1, 176 + blr + +/* case FFI_TYPE_SINT32 */ + lwz r3, 56+0(r1) + mtlr r0 + addi r1, r1, 176 + blr + +/* case FFI_TYPE_UINT64 */ + lwz r3, 56+0(r1) + mtlr r0 + lwz r4, 56+4(r1) + b L..finish + +/* case FFI_TYPE_SINT64 */ + lwz r3, 56+0(r1) + mtlr r0 + lwz r4, 56+4(r1) + b L..finish + +/* case FFI_TYPE_STRUCT */ + mtlr r0 + addi r1, r1, 176 + blr + nop + +/* case FFI_TYPE_POINTER */ + lwz r3, 56+0(r1) + mtlr r0 +L..finish: + addi r1, r1, 176 + blr +#endif /* END(ffi_closure_ASM) */ Modified: python/branches/py3k-jit/Modules/_ctypes/libffi/src/powerpc/ffi.c ============================================================================== --- python/branches/py3k-jit/Modules/_ctypes/libffi/src/powerpc/ffi.c (original) +++ python/branches/py3k-jit/Modules/_ctypes/libffi/src/powerpc/ffi.c Tue Mar 16 21:40:29 2010 @@ -1,6 +1,6 @@ /* ----------------------------------------------------------------------- ffi.c - Copyright (c) 1998 Geoffrey Keating - Copyright (C) 2007 Free Software Foundation, Inc + Copyright (C) 2007, 2008 Free Software Foundation, Inc Copyright (C) 2008 Red Hat, Inc PowerPC Foreign Function Interface @@ -43,6 +43,11 @@ FLAG_RETURNS_64BITS = 1 << (31-28), FLAG_RETURNS_128BITS = 1 << (31-27), /* cr6 */ + FLAG_SYSV_SMST_R4 = 1 << (31-26), /* use r4 for FFI_SYSV 8 byte + structs. */ + FLAG_SYSV_SMST_R3 = 1 << (31-25), /* use r3 for FFI_SYSV 4 byte + structs. */ + /* Bits (31-24) through (31-19) store shift value for SMST */ FLAG_ARG_NEEDS_COPY = 1 << (31- 7), FLAG_FP_ARGUMENTS = 1 << (31- 6), /* cr1.eq; specified by ABI */ @@ -180,6 +185,7 @@ { *next_arg.f = (float) double_tmp; next_arg.u += 1; + intarg_count++; } else *fpr_base.d++ = double_tmp; @@ -680,15 +686,15 @@ The same applies for the structs returned in r3/r4. */ if (size <= 4) { - flags |= 1 << (31 - FFI_SYSV_TYPE_SMALL_STRUCT - 1); - flags |= 8 * (4 - size) << 4; + flags |= FLAG_SYSV_SMST_R3; + flags |= 8 * (4 - size) << 8; break; } /* These structs are returned in r3 and r4. See above. */ if (size <= 8) { - flags |= 1 << (31 - FFI_SYSV_TYPE_SMALL_STRUCT - 2); - flags |= 8 * (8 - size) << 4; + flags |= FLAG_SYSV_SMST_R3 | FLAG_SYSV_SMST_R4; + flags |= 8 * (8 - size) << 8; break; } } @@ -1144,6 +1150,7 @@ pst++; avalue[i] = pst; pst += 2; + ng = 8; } break; @@ -1217,6 +1224,7 @@ { avalue[i] = pst; pst += 4; + ng = 8; } break; } @@ -1249,10 +1257,15 @@ /* Tell ffi_closure_SYSV how to perform return type promotions. Because the FFI_SYSV ABI returns the structures <= 8 bytes in r3/r4 - we have to tell ffi_closure_SYSV how to treat them. */ + we have to tell ffi_closure_SYSV how to treat them. We combine the base + type FFI_SYSV_TYPE_SMALL_STRUCT - 1 with the size of the struct. + So a one byte struct gets the return type 16. Return type 1 to 15 are + already used and we never have a struct with size zero. That is the reason + for the subtraction of 1. See the comment in ffitarget.h about ordering. + */ if (cif->abi == FFI_SYSV && cif->rtype->type == FFI_TYPE_STRUCT && size <= 8) - return FFI_SYSV_TYPE_SMALL_STRUCT + size; + return (FFI_SYSV_TYPE_SMALL_STRUCT - 1) + size; #if FFI_TYPE_LONGDOUBLE != FFI_TYPE_DOUBLE else if (cif->rtype->type == FFI_TYPE_LONGDOUBLE && cif->abi != FFI_LINUX && cif->abi != FFI_LINUX_SOFT_FLOAT) Modified: python/branches/py3k-jit/Modules/_ctypes/libffi/src/powerpc/ffi_darwin.c ============================================================================== --- python/branches/py3k-jit/Modules/_ctypes/libffi/src/powerpc/ffi_darwin.c (original) +++ python/branches/py3k-jit/Modules/_ctypes/libffi/src/powerpc/ffi_darwin.c Tue Mar 16 21:40:29 2010 @@ -3,7 +3,7 @@ Copyright (C) 1998 Geoffrey Keating Copyright (C) 2001 John Hornkvist - Copyright (C) 2002, 2006, 2007 Free Software Foundation, Inc. + Copyright (C) 2002, 2006, 2007, 2009 Free Software Foundation, Inc. FFI support for Darwin and AIX. @@ -32,7 +32,7 @@ #include -extern void ffi_closure_ASM(void); +extern void ffi_closure_ASM (void); enum { /* The assembly depends on these exact flags. */ @@ -80,34 +80,37 @@ */ -void ffi_prep_args(extended_cif *ecif, unsigned *const stack) +void +ffi_prep_args (extended_cif *ecif, unsigned long *const stack) { const unsigned bytes = ecif->cif->bytes; const unsigned flags = ecif->cif->flags; + const unsigned nargs = ecif->cif->nargs; + const ffi_abi abi = ecif->cif->abi; /* 'stacktop' points at the previous backchain pointer. */ - unsigned *const stacktop = stack + (bytes / sizeof(unsigned)); + unsigned long *const stacktop = stack + (bytes / sizeof(unsigned long)); /* 'fpr_base' points at the space for fpr1, and grows upwards as we use FPR registers. */ - double *fpr_base = (double*) (stacktop - ASM_NEEDS_REGISTERS) - NUM_FPR_ARG_REGISTERS; + double *fpr_base = (double *) (stacktop - ASM_NEEDS_REGISTERS) - NUM_FPR_ARG_REGISTERS; int fparg_count = 0; /* 'next_arg' grows up as we put parameters in it. */ - unsigned *next_arg = stack + 6; /* 6 reserved positions. */ + unsigned long *next_arg = stack + 6; /* 6 reserved positions. */ - int i = ecif->cif->nargs; + int i; double double_tmp; void **p_argv = ecif->avalue; - unsigned gprvalue; + unsigned long gprvalue; ffi_type** ptr = ecif->cif->arg_types; char *dest_cpy; unsigned size_al = 0; /* Check that everything starts aligned properly. */ - FFI_ASSERT(((unsigned)(char *)stack & 0xF) == 0); - FFI_ASSERT(((unsigned)(char *)stacktop & 0xF) == 0); + FFI_ASSERT(((unsigned) (char *) stack & 0xF) == 0); + FFI_ASSERT(((unsigned) (char *) stacktop & 0xF) == 0); FFI_ASSERT((bytes & 0xF) == 0); /* Deal with return values that are actually pass-by-reference. @@ -115,12 +118,10 @@ Return values are referenced by r3, so r4 is the first parameter. */ if (flags & FLAG_RETVAL_REFERENCE) - *next_arg++ = (unsigned)(char *)ecif->rvalue; + *next_arg++ = (unsigned long) (char *) ecif->rvalue; /* Now for the arguments. */ - for (; - i > 0; - i--, ptr++, p_argv++) + for (i = nargs; i > 0; i--, ptr++, p_argv++) { switch ((*ptr)->type) { @@ -128,7 +129,7 @@ purpose registers are filled, the corresponding GPRs that match the size of the floating-point parameter are skipped. */ case FFI_TYPE_FLOAT: - double_tmp = *(float *)*p_argv; + double_tmp = *(float *) *p_argv; if (fparg_count >= NUM_FPR_ARG_REGISTERS) *(double *)next_arg = double_tmp; else @@ -139,12 +140,16 @@ break; case FFI_TYPE_DOUBLE: - double_tmp = *(double *)*p_argv; + double_tmp = *(double *) *p_argv; if (fparg_count >= NUM_FPR_ARG_REGISTERS) *(double *)next_arg = double_tmp; else *fpr_base++ = double_tmp; +#ifdef POWERPC64 + next_arg++; +#else next_arg += 2; +#endif fparg_count++; FFI_ASSERT(flags & FLAG_FP_ARGUMENTS); break; @@ -152,42 +157,71 @@ #if FFI_TYPE_LONGDOUBLE != FFI_TYPE_DOUBLE case FFI_TYPE_LONGDOUBLE: - double_tmp = ((double *)*p_argv)[0]; - if (fparg_count >= NUM_FPR_ARG_REGISTERS) - *(double *)next_arg = double_tmp; +#ifdef POWERPC64 + if (fparg_count < NUM_FPR_ARG_REGISTERS) + *(long double *) fpr_base++ = *(long double *) *p_argv; else + *(long double *) next_arg = *(long double *) *p_argv; + next_arg += 2; + fparg_count += 2; +#else + double_tmp = ((double *) *p_argv)[0]; + if (fparg_count < NUM_FPR_ARG_REGISTERS) *fpr_base++ = double_tmp; + else + *(double *) next_arg = double_tmp; next_arg += 2; fparg_count++; - double_tmp = ((double *)*p_argv)[1]; - if (fparg_count >= NUM_FPR_ARG_REGISTERS) - *(double *)next_arg = double_tmp; - else + + double_tmp = ((double *) *p_argv)[1]; + if (fparg_count < NUM_FPR_ARG_REGISTERS) *fpr_base++ = double_tmp; + else + *(double *) next_arg = double_tmp; next_arg += 2; fparg_count++; +#endif FFI_ASSERT(flags & FLAG_FP_ARGUMENTS); break; #endif case FFI_TYPE_UINT64: case FFI_TYPE_SINT64: - *(long long *)next_arg = *(long long *)*p_argv; - next_arg+=2; +#ifdef POWERPC64 + gprvalue = *(long long *) *p_argv; + goto putgpr; +#else + *(long long *) next_arg = *(long long *) *p_argv; + next_arg += 2; +#endif break; + case FFI_TYPE_POINTER: + gprvalue = *(unsigned long *) *p_argv; + goto putgpr; case FFI_TYPE_UINT8: - gprvalue = *(unsigned char *)*p_argv; + gprvalue = *(unsigned char *) *p_argv; goto putgpr; case FFI_TYPE_SINT8: - gprvalue = *(signed char *)*p_argv; + gprvalue = *(signed char *) *p_argv; goto putgpr; case FFI_TYPE_UINT16: - gprvalue = *(unsigned short *)*p_argv; + gprvalue = *(unsigned short *) *p_argv; goto putgpr; case FFI_TYPE_SINT16: - gprvalue = *(signed short *)*p_argv; + gprvalue = *(signed short *) *p_argv; goto putgpr; case FFI_TYPE_STRUCT: +#ifdef POWERPC64 + dest_cpy = (char *) next_arg; + size_al = (*ptr)->size; + if ((*ptr)->elements[0]->type == 3) + size_al = ALIGN((*ptr)->size, 8); + if (size_al < 3 && abi == FFI_DARWIN) + dest_cpy += 4 - size_al; + + memcpy ((char *) dest_cpy, (char *) *p_argv, size_al); + next_arg += (size_al + 7) / 8; +#else dest_cpy = (char *) next_arg; /* Structures that match the basic modes (QI 1 byte, HI 2 bytes, @@ -195,22 +229,24 @@ Structures with 3 byte in size are padded upwards. */ size_al = (*ptr)->size; /* If the first member of the struct is a double, then align - the struct to double-word. - Type 3 is defined in include/ffi.h. #define FFI_TYPE_DOUBLE 3. */ - if ((*ptr)->elements[0]->type == 3) + the struct to double-word. */ + if ((*ptr)->elements[0]->type == FFI_TYPE_DOUBLE) size_al = ALIGN((*ptr)->size, 8); - if (size_al < 3 && ecif->cif->abi == FFI_DARWIN) + if (size_al < 3 && abi == FFI_DARWIN) dest_cpy += 4 - size_al; - memcpy((char *)dest_cpy, (char *)*p_argv, size_al); + memcpy((char *) dest_cpy, (char *) *p_argv, size_al); next_arg += (size_al + 3) / 4; +#endif break; case FFI_TYPE_INT: - case FFI_TYPE_UINT32: case FFI_TYPE_SINT32: - case FFI_TYPE_POINTER: - gprvalue = *(unsigned *)*p_argv; + gprvalue = *(signed int *) *p_argv; + goto putgpr; + + case FFI_TYPE_UINT32: + gprvalue = *(unsigned int *) *p_argv; putgpr: *next_arg++ = gprvalue; break; @@ -268,8 +304,44 @@ /* Do not add additional tail padding. */ } +/* Adjust the size of S to be correct for AIX. + Word-align double unless it is the first member of a structure. */ + +static void +aix_adjust_aggregate_sizes (ffi_type *s) +{ + int i; + + if (s->type != FFI_TYPE_STRUCT) + return; + + s->size = 0; + for (i = 0; s->elements[i] != NULL; i++) + { + ffi_type *p; + int align; + + p = s->elements[i]; + aix_adjust_aggregate_sizes (p); + align = p->alignment; + if (i != 0 && p->type == FFI_TYPE_DOUBLE) + align = 4; + s->size = ALIGN(s->size, align) + p->size; + } + + s->size = ALIGN(s->size, s->alignment); + + if (s->elements[0]->type == FFI_TYPE_UINT64 + || s->elements[0]->type == FFI_TYPE_SINT64 + || s->elements[0]->type == FFI_TYPE_DOUBLE + || s->elements[0]->alignment == 8) + s->alignment = s->alignment > 8 ? s->alignment : 8; + /* Do not add additional tail padding. */ +} + /* Perform machine dependent cif processing. */ -ffi_status ffi_prep_cif_machdep(ffi_cif *cif) +ffi_status +ffi_prep_cif_machdep (ffi_cif *cif) { /* All this is for the DARWIN ABI. */ int i; @@ -290,6 +362,13 @@ darwin_adjust_aggregate_sizes (cif->arg_types[i]); } + if (cif->abi == FFI_AIX) + { + aix_adjust_aggregate_sizes (cif->rtype); + for (i = 0; i < cif->nargs; i++) + aix_adjust_aggregate_sizes (cif->arg_types[i]); + } + /* Space for the frame pointer, callee's LR, CR, etc, and for the asm's temp regs. */ @@ -324,6 +403,9 @@ case FFI_TYPE_UINT64: case FFI_TYPE_SINT64: +#ifdef POWERPC64 + case FFI_TYPE_POINTER: +#endif flags |= FLAG_RETURNS_64BITS; break; @@ -387,11 +469,14 @@ case FFI_TYPE_STRUCT: size_al = (*ptr)->size; /* If the first member of the struct is a double, then align - the struct to double-word. - Type 3 is defined in include/ffi.h. #define FFI_TYPE_DOUBLE 3. */ - if ((*ptr)->elements[0]->type == 3) + the struct to double-word. */ + if ((*ptr)->elements[0]->type == FFI_TYPE_DOUBLE) size_al = ALIGN((*ptr)->size, 8); +#ifdef POWERPC64 + intarg_count += (size_al + 7) / 8; +#else intarg_count += (size_al + 3) / 4; +#endif break; default: @@ -410,8 +495,13 @@ bytes += NUM_FPR_ARG_REGISTERS * sizeof(double); /* Stack space. */ +#ifdef POWERPC64 + if ((intarg_count + fparg_count) > NUM_GPR_ARG_REGISTERS) + bytes += (intarg_count + fparg_count) * sizeof(long); +#else if ((intarg_count + 2 * fparg_count) > NUM_GPR_ARG_REGISTERS) bytes += (intarg_count + 2 * fparg_count) * sizeof(long); +#endif else bytes += NUM_GPR_ARG_REGISTERS * sizeof(long); @@ -424,12 +514,13 @@ return FFI_OK; } -extern void ffi_call_AIX(extended_cif *, unsigned, unsigned, unsigned *, +extern void ffi_call_AIX(extended_cif *, long, unsigned, unsigned *, void (*fn)(void), void (*fn2)(void)); -extern void ffi_call_DARWIN(extended_cif *, unsigned, unsigned, unsigned *, +extern void ffi_call_DARWIN(extended_cif *, long, unsigned, unsigned *, void (*fn)(void), void (*fn2)(void)); -void ffi_call(ffi_cif *cif, void (*fn)(void), void *rvalue, void **avalue) +void +ffi_call (ffi_cif *cif, void (*fn)(void), void *rvalue, void **avalue) { extended_cif ecif; @@ -442,7 +533,7 @@ if ((rvalue == NULL) && (cif->rtype->type == FFI_TYPE_STRUCT)) { - ecif.rvalue = alloca(cif->rtype->size); + ecif.rvalue = alloca (cif->rtype->size); } else ecif.rvalue = rvalue; @@ -450,11 +541,11 @@ switch (cif->abi) { case FFI_AIX: - ffi_call_AIX(&ecif, -cif->bytes, cif->flags, ecif.rvalue, fn, + ffi_call_AIX(&ecif, -(long)cif->bytes, cif->flags, ecif.rvalue, fn, ffi_prep_args); break; case FFI_DARWIN: - ffi_call_DARWIN(&ecif, -cif->bytes, cif->flags, ecif.rvalue, fn, + ffi_call_DARWIN(&ecif, -(long)cif->bytes, cif->flags, ecif.rvalue, fn, ffi_prep_args); break; default: @@ -617,8 +708,9 @@ double d; } ffi_dblfl; -int ffi_closure_helper_DARWIN (ffi_closure*, void*, - unsigned long*, ffi_dblfl*); +int +ffi_closure_helper_DARWIN (ffi_closure *, void *, + unsigned long *, ffi_dblfl *); /* Basically the trampoline invokes ffi_closure_ASM, and on entry, r11 holds the address of the closure. @@ -627,8 +719,9 @@ up space for a return value, ffi_closure_ASM invokes the following helper function to do most of the work. */ -int ffi_closure_helper_DARWIN (ffi_closure* closure, void * rvalue, - unsigned long * pgr, ffi_dblfl * pfr) +int +ffi_closure_helper_DARWIN (ffi_closure *closure, void *rvalue, + unsigned long *pgr, ffi_dblfl *pfr) { /* rvalue is the pointer to space for return value in closure assembly pgr is the pointer to where r3-r10 are stored in ffi_closure_ASM @@ -645,18 +738,12 @@ void ** avalue; ffi_type ** arg_types; long i, avn; - long nf; /* number of floating registers already used. */ - long ng; /* number of general registers already used. */ ffi_cif * cif; - double temp; + ffi_dblfl * end_pfr = pfr + NUM_FPR_ARG_REGISTERS; unsigned size_al; - union ldu temp_ld; cif = closure->cif; - avalue = alloca(cif->nargs * sizeof(void *)); - - nf = 0; - ng = 0; + avalue = alloca (cif->nargs * sizeof(void *)); /* Copy the caller's structure return value address so that the closure returns the data directly to the caller. */ @@ -664,7 +751,6 @@ { rvalue = (void *) *pgr; pgr++; - ng++; } i = 0; @@ -678,58 +764,82 @@ { case FFI_TYPE_SINT8: case FFI_TYPE_UINT8: +#ifdef POWERPC64 + avalue[i] = (char *) pgr + 7; +#else avalue[i] = (char *) pgr + 3; - ng++; +#endif pgr++; break; case FFI_TYPE_SINT16: case FFI_TYPE_UINT16: +#ifdef POWERPC64 + avalue[i] = (char *) pgr + 6; +#else avalue[i] = (char *) pgr + 2; - ng++; +#endif pgr++; break; case FFI_TYPE_SINT32: case FFI_TYPE_UINT32: +#ifdef POWERPC64 + avalue[i] = (char *) pgr + 4; +#else case FFI_TYPE_POINTER: avalue[i] = pgr; - ng++; +#endif pgr++; break; case FFI_TYPE_STRUCT: +#ifdef POWERPC64 + size_al = arg_types[i]->size; + if (arg_types[i]->elements[0]->type == FFI_TYPE_DOUBLE) + size_al = ALIGN (arg_types[i]->size, 8); + if (size_al < 3 && cif->abi == FFI_DARWIN) + avalue[i] = (void *) pgr + 8 - size_al; + else + avalue[i] = (void *) pgr; + pgr += (size_al + 7) / 8; +#else /* Structures that match the basic modes (QI 1 byte, HI 2 bytes, SI 4 bytes) are aligned as if they were those modes. */ size_al = arg_types[i]->size; /* If the first member of the struct is a double, then align - the struct to double-word. - Type 3 is defined in include/ffi.h. #define FFI_TYPE_DOUBLE 3. */ - if (arg_types[i]->elements[0]->type == 3) + the struct to double-word. */ + if (arg_types[i]->elements[0]->type == FFI_TYPE_DOUBLE) size_al = ALIGN(arg_types[i]->size, 8); if (size_al < 3 && cif->abi == FFI_DARWIN) avalue[i] = (void*) pgr + 4 - size_al; else avalue[i] = (void*) pgr; - ng += (size_al + 3) / 4; pgr += (size_al + 3) / 4; +#endif break; case FFI_TYPE_SINT64: case FFI_TYPE_UINT64: +#ifdef POWERPC64 + case FFI_TYPE_POINTER: + avalue[i] = pgr; + pgr++; + break; +#else /* Long long ints are passed in two gpr's. */ avalue[i] = pgr; - ng += 2; pgr += 2; break; +#endif case FFI_TYPE_FLOAT: /* A float value consumes a GPR. There are 13 64bit floating point registers. */ - if (nf < NUM_FPR_ARG_REGISTERS) + if (pfr < end_pfr) { - temp = pfr->d; - pfr->f = (float)temp; + double temp = pfr->d; + pfr->f = (float) temp; avalue[i] = pfr; pfr++; } @@ -737,15 +847,13 @@ { avalue[i] = pgr; } - nf++; - ng++; pgr++; break; case FFI_TYPE_DOUBLE: /* A double value consumes two GPRs. There are 13 64bit floating point registers. */ - if (nf < NUM_FPR_ARG_REGISTERS) + if (pfr < end_pfr) { avalue[i] = pfr; pfr++; @@ -754,17 +862,36 @@ { avalue[i] = pgr; } - nf++; - ng += 2; +#ifdef POWERPC64 + pgr++; +#else pgr += 2; +#endif break; #if FFI_TYPE_LONGDOUBLE != FFI_TYPE_DOUBLE case FFI_TYPE_LONGDOUBLE: +#ifdef POWERPC64 + if (pfr + 1 < end_pfr) + { + avalue[i] = pfr; + pfr += 2; + } + else + { + if (pfr < end_pfr) + { + *pgr = *(unsigned long *) pfr; + pfr++; + } + avalue[i] = pgr; + } + pgr += 2; +#else /* POWERPC64 */ /* A long double value consumes four GPRs and two FPRs. There are 13 64bit floating point registers. */ - if (nf < NUM_FPR_ARG_REGISTERS - 1) + if (pfr + 1 < end_pfr) { avalue[i] = pfr; pfr += 2; @@ -772,19 +899,20 @@ /* Here we have the situation where one part of the long double is stored in fpr13 and the other part is already on the stack. We use a union to pass the long double to avalue[i]. */ - else if (nf == NUM_FPR_ARG_REGISTERS - 1) + else if (pfr + 1 == end_pfr) { + union ldu temp_ld; memcpy (&temp_ld.lb[0], pfr, sizeof(ldbits)); memcpy (&temp_ld.lb[1], pgr + 2, sizeof(ldbits)); avalue[i] = &temp_ld.ld; + pfr++; } else { avalue[i] = pgr; } - nf += 2; - ng += 4; pgr += 4; +#endif /* POWERPC64 */ break; #endif default: Modified: python/branches/py3k-jit/Modules/_ctypes/libffi/src/powerpc/ffitarget.h ============================================================================== --- python/branches/py3k-jit/Modules/_ctypes/libffi/src/powerpc/ffitarget.h (original) +++ python/branches/py3k-jit/Modules/_ctypes/libffi/src/powerpc/ffitarget.h Tue Mar 16 21:40:29 2010 @@ -1,6 +1,6 @@ /* -----------------------------------------------------------------*-C-*- ffitarget.h - Copyright (c) 1996-2003 Red Hat, Inc. - Copyright (C) 2007 Free Software Foundation, Inc + Copyright (C) 2007, 2008 Free Software Foundation, Inc Target configuration macros for PowerPC. Permission is hereby granted, free of charge, to any person obtaining @@ -30,7 +30,11 @@ /* ---- System specific configurations ----------------------------------- */ -#if defined (POWERPC) && defined (__powerpc64__) +#if defined (POWERPC) && defined (__powerpc64__) /* linux64 */ +#define POWERPC64 +#elif defined (POWERPC_DARWIN) && defined (__ppc64__) /* Darwin */ +#define POWERPC64 +#elif defined (POWERPC_AIX) && defined (__64BIT__) /* AIX64 */ #define POWERPC64 #endif @@ -78,6 +82,8 @@ FFI_SYSV, FFI_GCC_SYSV, FFI_LINUX64, + FFI_LINUX, + FFI_LINUX_SOFT_FLOAT, FFI_DEFAULT_ABI = FFI_SYSV, #endif @@ -96,7 +102,9 @@ /* Needed for soft-float long-double-128 support. */ #define FFI_TYPE_UINT128 (FFI_TYPE_LAST + 1) -/* Needed for FFI_SYSV small structure returns. */ +/* Needed for FFI_SYSV small structure returns. + We use two flag bits, (FLAG_SYSV_SMST_R3, FLAG_SYSV_SMST_R4) which are + defined in ffi.c, to determine the exact return type and its size. */ #define FFI_SYSV_TYPE_SMALL_STRUCT (FFI_TYPE_LAST + 2) #if defined(POWERPC64) || defined(POWERPC_AIX) Modified: python/branches/py3k-jit/Modules/_ctypes/libffi/src/powerpc/sysv.S ============================================================================== --- python/branches/py3k-jit/Modules/_ctypes/libffi/src/powerpc/sysv.S (original) +++ python/branches/py3k-jit/Modules/_ctypes/libffi/src/powerpc/sysv.S Tue Mar 16 21:40:29 2010 @@ -136,29 +136,18 @@ b L(done_return_value) L(small_struct_return_value): - mtcrf 0x10,%r31 /* cr3 */ - bt- 15,L(smst_one_register) - mtcrf 0x08,%r31 /* cr4 */ - bt- 16,L(smst_two_register) - b L(done_return_value) - -L(smst_one_register): - rlwinm %r5,%r31,5+23,32-5,31 /* Extract the value to shift. */ - slw %r3,%r3,%r5 - stw %r3,0(%r30) - b L(done_return_value) -L(smst_two_register): - rlwinm %r5,%r31,5+23,32-5,31 /* Extract the value to shift. */ - cmpwi %r5,0 - subfic %r9,%r5,32 - slw %r29,%r3,%r5 - srw %r9,%r4,%r9 - beq- L(smst_8byte) - or %r3,%r9,%r29 - slw %r4,%r4,%r5 -L(smst_8byte): - stw %r3,0(%r30) - stw %r4,4(%r30) + extrwi %r6,%r31,2,19 /* number of bytes padding = shift/8 */ + mtcrf 0x02,%r31 /* copy flags to cr[24:27] (cr6) */ + extrwi %r5,%r31,5,19 /* r5 <- number of bits of padding */ + subfic %r6,%r6,4 /* r6 <- number of useful bytes in r3 */ + bf- 25,L(done_return_value) /* struct in r3 ? if not, done. */ +/* smst_one_register: */ + slw %r3,%r3,%r5 /* Left-justify value in r3 */ + mtxer %r6 /* move byte count to XER ... */ + stswx %r3,0,%r30 /* ... and store that many bytes */ + bf+ 26,L(done_return_value) /* struct in r3:r4 ? */ + add %r6,%r6,%r30 /* adjust pointer */ + stswi %r4,%r6,4 /* store last four bytes */ b L(done_return_value) .LFE1: Modified: python/branches/py3k-jit/Modules/_ctypes/libffi/src/s390/sysv.S ============================================================================== --- python/branches/py3k-jit/Modules/_ctypes/libffi/src/s390/sysv.S (original) +++ python/branches/py3k-jit/Modules/_ctypes/libffi/src/s390/sysv.S Tue Mar 16 21:40:29 2010 @@ -1,7 +1,7 @@ /* ----------------------------------------------------------------------- sysv.S - Copyright (c) 2000 Software AG Copyright (c) 2008 Red Hat, Inc. - + S390 Foreign Function Interface Permission is hereby granted, free of charge, to any person obtaining Modified: python/branches/py3k-jit/Modules/_ctypes/libffi/src/sh/ffi.c ============================================================================== --- python/branches/py3k-jit/Modules/_ctypes/libffi/src/sh/ffi.c (original) +++ python/branches/py3k-jit/Modules/_ctypes/libffi/src/sh/ffi.c Tue Mar 16 21:40:29 2010 @@ -1,5 +1,5 @@ /* ----------------------------------------------------------------------- - ffi.c - Copyright (c) 2002, 2003, 2004, 2005, 2006, 2007 Kaz Kojima + ffi.c - Copyright (c) 2002, 2003, 2004, 2005, 2006, 2007, 2008 Kaz Kojima Copyright (c) 2008 Red Hat, Inc. SuperH Foreign Function Interface @@ -461,7 +461,7 @@ void *codeloc) { unsigned int *tramp; - unsigned short insn; + unsigned int insn; FFI_ASSERT (cif->abi == FFI_GCC_SYSV); Modified: python/branches/py3k-jit/Modules/_ctypes/libffi/src/sh/sysv.S ============================================================================== --- python/branches/py3k-jit/Modules/_ctypes/libffi/src/sh/sysv.S (original) +++ python/branches/py3k-jit/Modules/_ctypes/libffi/src/sh/sysv.S Tue Mar 16 21:40:29 2010 @@ -1,5 +1,5 @@ /* ----------------------------------------------------------------------- - sysv.S - Copyright (c) 2002, 2003, 2004, 2006 Kaz Kojima + sysv.S - Copyright (c) 2002, 2003, 2004, 2006, 2008 Kaz Kojima SuperH Foreign Function Interface @@ -14,14 +14,14 @@ 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 THE AUTHORS OR COPYRIGHT HOLDERS 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 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 THE AUTHORS OR COPYRIGHT + HOLDERS 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 @@ -702,6 +702,10 @@ .ffi_closure_SYSV_end: .size CNAME(ffi_closure_SYSV),.ffi_closure_SYSV_end-CNAME(ffi_closure_SYSV) +#if defined __ELF__ && defined __linux__ + .section .note.GNU-stack,"", at progbits +#endif + .section ".eh_frame","aw", at progbits __FRAME_BEGIN__: .4byte .LECIE1-.LSCIE1 /* Length of Common Information Entry */ Modified: python/branches/py3k-jit/Modules/_ctypes/libffi/src/sh64/ffi.c ============================================================================== --- python/branches/py3k-jit/Modules/_ctypes/libffi/src/sh64/ffi.c (original) +++ python/branches/py3k-jit/Modules/_ctypes/libffi/src/sh64/ffi.c Tue Mar 16 21:40:29 2010 @@ -1,5 +1,5 @@ /* ----------------------------------------------------------------------- - ffi.c - Copyright (c) 2003, 2004 Kaz Kojima + ffi.c - Copyright (c) 2003, 2004, 2006, 2007 Kaz Kojima Copyright (c) 2008 Anthony Green SuperH SHmedia Foreign Function Interface @@ -56,9 +56,7 @@ /* 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 unsigned int avn; @@ -162,6 +160,7 @@ int n, m; int greg; int freg; + int fpair = -1; greg = (return_type (cif->rtype) == FFI_TYPE_STRUCT ? 1 : 0); freg = 0; @@ -177,7 +176,13 @@ cif->bytes += sizeof (UINT64) - sizeof (float); if (freg >= NFREGARG - 1) continue; - freg++; + if (fpair < 0) + { + fpair = freg; + freg += 2; + } + else + fpair = -1; cif->flags2 += ((cif->arg_types)[i]->type) << (2 * j++); break; @@ -186,7 +191,6 @@ continue; if ((freg + 1) < NFREGARG) { - freg = (freg + 1) & ~1; freg += 2; cif->flags2 += ((cif->arg_types)[i]->type) << (2 * j++); } @@ -264,9 +268,7 @@ else if ((rvalue == NULL) && (cif->rtype->type == FFI_TYPE_STRUCT)) { - /*@-sysunrecog@*/ ecif.rvalue = alloca(cif->rtype->size); - /*@=sysunrecog@*/ } else ecif.rvalue = rvalue; @@ -274,10 +276,8 @@ switch (cif->abi) { case FFI_SYSV: - /*@-usedef@*/ - ffi_call_SYSV(ffi_prep_args, &ecif, cif->bytes, - cif->flags, cif->flags2, ecif.rvalue, fn); - /*@=usedef@*/ + ffi_call_SYSV(ffi_prep_args, &ecif, cif->bytes, cif->flags, cif->flags2, + ecif.rvalue, fn); break; default: FFI_ASSERT(0); @@ -294,10 +294,11 @@ extern void __ic_invalidate (void *line); ffi_status -ffi_prep_closure (ffi_closure *closure, - ffi_cif *cif, - void (*fun)(ffi_cif*, void*, void**, void*), - void *user_data) +ffi_prep_closure_loc (ffi_closure *closure, + ffi_cif *cif, + void (*fun)(ffi_cif*, void*, void**, void*), + void *user_data, + void *codeloc) { unsigned int *tramp; @@ -321,8 +322,8 @@ tramp[2] = 0xcc000010 | (((UINT32) ffi_closure_SYSV) >> 16) << 10; tramp[3] = 0xc8000010 | (((UINT32) ffi_closure_SYSV) & 0xffff) << 10; tramp[4] = 0x6bf10600; - tramp[5] = 0xcc000010 | (((UINT32) closure) >> 16) << 10; - tramp[6] = 0xc8000010 | (((UINT32) closure) & 0xffff) << 10; + tramp[5] = 0xcc000010 | (((UINT32) codeloc) >> 16) << 10; + tramp[6] = 0xc8000010 | (((UINT32) codeloc) & 0xffff) << 10; tramp[7] = 0x4401fff0; closure->cif = cif; @@ -330,7 +331,8 @@ closure->user_data = user_data; /* Flush the icache. */ - asm volatile ("ocbwb %0,0; synco; icbi %0,0; synci" : : "r" (tramp)); + asm volatile ("ocbwb %0,0; synco; icbi %1,0; synci" : : "r" (tramp), + "r"(codeloc)); return FFI_OK; } @@ -352,6 +354,7 @@ int i, avn; int greg, freg; ffi_cif *cif; + int fpair = -1; cif = closure->cif; avalue = alloca (cif->nargs * sizeof (void *)); @@ -360,7 +363,7 @@ returns the data directly to the caller. */ if (return_type (cif->rtype) == FFI_TYPE_STRUCT) { - rvalue = *pgr; + rvalue = (UINT64 *) *pgr; greg = 1; } else @@ -404,11 +407,24 @@ if ((*p_arg)->type == FFI_TYPE_FLOAT) { if (freg < NFREGARG - 1) + { + if (fpair >= 0) + { + avalue[i] = (UINT32 *) pfr + fpair; + fpair = -1; + } + else + { #ifdef __LITTLE_ENDIAN__ - avalue[i] = (UINT32 *) pfr + (1 ^ freg++); + fpair = freg; + avalue[i] = (UINT32 *) pfr + (1 ^ freg); #else - avalue[i] = (UINT32 *) pfr + freg++; + fpair = 1 ^ freg; + avalue[i] = (UINT32 *) pfr + freg; #endif + freg += 2; + } + } else #ifdef __LITTLE_ENDIAN__ avalue[i] = pgr + greg; @@ -430,7 +446,6 @@ avalue[i] = pgr + greg; else { - freg = (freg + 1) & ~1; avalue[i] = pfr + (freg >> 1); freg += 2; } Modified: python/branches/py3k-jit/Modules/_ctypes/libffi/src/sh64/sysv.S ============================================================================== --- python/branches/py3k-jit/Modules/_ctypes/libffi/src/sh64/sysv.S (original) +++ python/branches/py3k-jit/Modules/_ctypes/libffi/src/sh64/sysv.S Tue Mar 16 21:40:29 2010 @@ -1,5 +1,5 @@ /* ----------------------------------------------------------------------- - sysv.S - Copyright (c) 2003, 2004 Kaz Kojima + sysv.S - Copyright (c) 2003, 2004, 2006, 2008 Kaz Kojima SuperH SHmedia Foreign Function Interface @@ -14,14 +14,15 @@ 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 THE AUTHORS OR COPYRIGHT HOLDERS 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 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 THE AUTHORS OR COPYRIGHT + HOLDERS 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 @@ -85,6 +86,7 @@ addi r15, 64, r22 movi 0, r0 movi 0, r1 + movi -1, r23 pt/l 1f, tr1 bnei/l r29, FFI_TYPE_STRUCT, tr1 @@ -107,9 +109,6 @@ .L_pass_d: addi r0, 1, r0 - addi r1, 1, r1 - andi r1, ~1, r1 - pt/l 3f, tr0 movi 12, r20 bge/l r1, r20, tr0 @@ -159,13 +158,23 @@ addi.l r15, 8, r15 3: pt/l .L_pass, tr0 - addi r1, 1, r1 blink tr0, r63 .L_pop_f: pt/l .L_pop_f_tbl, tr1 + pt/l 5f, tr2 gettr tr1, r20 + bge/l r23, r63, tr2 + add r1, r63, r23 shlli r1, 3, r21 + addi r1, 2, r1 + add r20, r21, r20 + ptabs/l r20, tr1 + blink tr1, r63 +5: + addi r23, 1, r21 + movi -1, r23 + shlli r21, 3, r21 add r20, r21, r20 ptabs/l r20, tr1 blink tr1, r63 @@ -430,6 +439,10 @@ .ffi_closure_SYSV_end: .size CNAME(ffi_closure_SYSV),.ffi_closure_SYSV_end-CNAME(ffi_closure_SYSV) +#if defined __ELF__ && defined __linux__ + .section .note.GNU-stack,"", at progbits +#endif + .section ".eh_frame","aw", at progbits __FRAME_BEGIN__: .4byte .LECIE1-.LSCIE1 /* Length of Common Information Entry */ Modified: python/branches/py3k-jit/Modules/_ctypes/libffi/src/sparc/ffi.c ============================================================================== --- python/branches/py3k-jit/Modules/_ctypes/libffi/src/sparc/ffi.c (original) +++ python/branches/py3k-jit/Modules/_ctypes/libffi/src/sparc/ffi.c Tue Mar 16 21:40:29 2010 @@ -308,14 +308,24 @@ cif->flags = FFI_TYPE_STRUCT; break; + case FFI_TYPE_SINT8: + case FFI_TYPE_UINT8: + case FFI_TYPE_SINT16: + case FFI_TYPE_UINT16: + if (cif->abi == FFI_V9) + cif->flags = FFI_TYPE_INT; + else + cif->flags = cif->rtype->type; + break; + case FFI_TYPE_SINT64: case FFI_TYPE_UINT64: - if (cif->abi != FFI_V9) - { - cif->flags = FFI_TYPE_SINT64; - break; - } - /* FALLTHROUGH */ + if (cif->abi == FFI_V9) + cif->flags = FFI_TYPE_INT; + else + cif->flags = FFI_TYPE_SINT64; + break; + default: cif->flags = FFI_TYPE_INT; break; @@ -589,6 +599,11 @@ /* Right-justify. */ argn += ALIGN(arg_types[i]->size, FFI_SIZEOF_ARG) / FFI_SIZEOF_ARG; + /* Align on a 16-byte boundary. */ +#if FFI_TYPE_LONGDOUBLE != FFI_TYPE_DOUBLE + if (arg_types[i]->type == FFI_TYPE_LONGDOUBLE && (argn % 2) != 0) + argn++; +#endif if (i < fp_slot_max && (arg_types[i]->type == FFI_TYPE_FLOAT || arg_types[i]->type == FFI_TYPE_DOUBLE Modified: python/branches/py3k-jit/Modules/_ctypes/libffi/src/sparc/v8.S ============================================================================== --- python/branches/py3k-jit/Modules/_ctypes/libffi/src/sparc/v8.S (original) +++ python/branches/py3k-jit/Modules/_ctypes/libffi/src/sparc/v8.S Tue Mar 16 21:40:29 2010 @@ -73,21 +73,63 @@ be,a done st %f0, [%i4+0] ! (delay) + cmp %i3, FFI_TYPE_DOUBLE + be,a double + st %f0, [%i4+0] ! (delay) + + cmp %i3, FFI_TYPE_SINT8 + be,a sint8 + sll %o0, 24, %o0 ! (delay) + + cmp %i3, FFI_TYPE_UINT8 + be,a uint8 + sll %o0, 24, %o0 ! (delay) + + cmp %i3, FFI_TYPE_SINT16 + be,a sint16 + sll %o0, 16, %o0 ! (delay) + + cmp %i3, FFI_TYPE_UINT16 + be,a uint16 + sll %o0, 16, %o0 ! (delay) + cmp %i3, FFI_TYPE_SINT64 - be longlong + be,a longlong + st %o0, [%i4+0] ! (delay) +done: + ret + restore - cmp %i3, FFI_TYPE_DOUBLE - bne done - nop - st %f0, [%i4+0] +double: st %f1, [%i4+4] - -done: ret restore -longlong: +sint8: + sra %o0, 24, %o0 st %o0, [%i4+0] + ret + restore + +uint8: + srl %o0, 24, %o0 + st %o0, [%i4+0] + ret + restore + +sint16: + sra %o0, 16, %o0 + st %o0, [%i4+0] + ret + restore + +uint16: + srl %o0, 16, %o0 + st %o0, [%i4+0] + ret + restore + +longlong: st %o1, [%i4+4] ret restore @@ -148,7 +190,8 @@ be done1 cmp %o0, FFI_TYPE_INT - be integer + be done1 + ld [%fp-8], %i0 cmp %o0, FFI_TYPE_FLOAT be,a done1 @@ -166,13 +209,11 @@ cmp %o0, FFI_TYPE_STRUCT be done2 - ! FFI_TYPE_SINT64 - ! FFI_TYPE_UINT64 - ld [%fp-4], %i1 + cmp %o0, FFI_TYPE_SINT64 + be,a done1 + ldd [%fp-8], %i0 -integer: ld [%fp-8], %i0 - done1: jmp %i7+8 restore Modified: python/branches/py3k-jit/Modules/_ctypes/libffi/src/x86/darwin.S ============================================================================== --- python/branches/py3k-jit/Modules/_ctypes/libffi/src/x86/darwin.S (original) +++ python/branches/py3k-jit/Modules/_ctypes/libffi/src/x86/darwin.S Tue Mar 16 21:40:29 2010 @@ -15,15 +15,16 @@ 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 THE AUTHORS OR COPYRIGHT HOLDERS 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 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 THE AUTHORS OR COPYRIGHT + HOLDERS 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 __x86_64__ Modified: python/branches/py3k-jit/Modules/_ctypes/libffi/src/x86/ffi.c ============================================================================== --- python/branches/py3k-jit/Modules/_ctypes/libffi/src/x86/ffi.c (original) +++ python/branches/py3k-jit/Modules/_ctypes/libffi/src/x86/ffi.c Tue Mar 16 21:40:29 2010 @@ -3,7 +3,7 @@ Copyright (c) 2002 Ranjit Mathew Copyright (c) 2002 Bo Thorsen Copyright (c) 2002 Roger Sayle - Copyright (C) 2008 Free Software Foundation, Inc. + Copyright (C) 2008 Free Software Foundation, Inc. x86 Foreign Function Interface @@ -28,7 +28,11 @@ DEALINGS IN THE SOFTWARE. ----------------------------------------------------------------------- */ -#ifndef __x86_64__ +#if !defined(__x86_64__) || defined(_WIN64) + +#ifdef _WIN64 +#include +#endif #include #include @@ -47,10 +51,15 @@ argp = stack; - if (ecif->cif->flags == FFI_TYPE_STRUCT) + if (ecif->cif->flags == FFI_TYPE_STRUCT +#ifdef X86_WIN64 + && (ecif->cif->rtype->size != 1 && ecif->cif->rtype->size != 2 + && ecif->cif->rtype->size != 4 && ecif->cif->rtype->size != 8) +#endif + ) { *(void **) argp = ecif->rvalue; - argp += 4; + argp += sizeof(void*); } p_argv = ecif->avalue; @@ -62,53 +71,75 @@ size_t z; /* Align if necessary */ - if ((sizeof(int) - 1) & (unsigned) argp) - argp = (char *) ALIGN(argp, sizeof(int)); + if ((sizeof(void*) - 1) & (size_t) argp) + argp = (char *) ALIGN(argp, sizeof(void*)); 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_SINT32: - *(signed int *) argp = (signed int)*(SINT32 *)(* p_argv); - break; - - case FFI_TYPE_UINT32: - *(unsigned int *) argp = (unsigned int)*(UINT32 *)(* p_argv); - break; - - case FFI_TYPE_STRUCT: - *(unsigned int *) argp = (unsigned int)*(UINT32 *)(* p_argv); - break; - - default: - FFI_ASSERT(0); - } - } +#ifdef X86_WIN64 + if (z > sizeof(ffi_arg) + || ((*p_arg)->type == FFI_TYPE_STRUCT + && (z != 1 && z != 2 && z != 4 && z != 8)) +#if FFI_TYPE_DOUBLE != FFI_TYPE_LONGDOUBLE + || ((*p_arg)->type == FFI_TYPE_LONGDOUBLE) +#endif + ) + { + z = sizeof(ffi_arg); + *(void **)argp = *p_argv; + } + else if ((*p_arg)->type == FFI_TYPE_FLOAT) + { + memcpy(argp, *p_argv, z); + } + else +#endif + if (z < sizeof(ffi_arg)) + { + z = sizeof(ffi_arg); + switch ((*p_arg)->type) + { + case FFI_TYPE_SINT8: + *(ffi_sarg *) argp = (ffi_sarg)*(SINT8 *)(* p_argv); + break; + + case FFI_TYPE_UINT8: + *(ffi_arg *) argp = (ffi_arg)*(UINT8 *)(* p_argv); + break; + + case FFI_TYPE_SINT16: + *(ffi_sarg *) argp = (ffi_sarg)*(SINT16 *)(* p_argv); + break; + + case FFI_TYPE_UINT16: + *(ffi_arg *) argp = (ffi_arg)*(UINT16 *)(* p_argv); + break; + + case FFI_TYPE_SINT32: + *(ffi_sarg *) argp = (ffi_sarg)*(SINT32 *)(* p_argv); + break; + + case FFI_TYPE_UINT32: + *(ffi_arg *) argp = (ffi_arg)*(UINT32 *)(* p_argv); + break; + + case FFI_TYPE_STRUCT: + *(ffi_arg *) argp = *(ffi_arg *)(* p_argv); + break; + + default: + FFI_ASSERT(0); + } + } else - { - memcpy(argp, *p_argv, z); - } + { + memcpy(argp, *p_argv, z); + } p_argv++; +#ifdef X86_WIN64 + argp += (z + sizeof(void*) - 1) & ~(sizeof(void*) - 1); +#else argp += z; +#endif } return; @@ -124,21 +155,32 @@ #ifdef X86 case FFI_TYPE_STRUCT: #endif -#if defined(X86) || defined(X86_DARWIN) +#if defined(X86) || defined (X86_WIN32) || defined(X86_FREEBSD) || defined(X86_DARWIN) || defined(X86_WIN64) case FFI_TYPE_UINT8: case FFI_TYPE_UINT16: case FFI_TYPE_SINT8: case FFI_TYPE_SINT16: #endif +#ifdef X86_WIN64 + case FFI_TYPE_UINT32: + case FFI_TYPE_SINT32: +#endif case FFI_TYPE_SINT64: case FFI_TYPE_FLOAT: case FFI_TYPE_DOUBLE: +#ifndef X86_WIN64 +#if FFI_TYPE_DOUBLE != FFI_TYPE_LONGDOUBLE case FFI_TYPE_LONGDOUBLE: +#endif +#endif cif->flags = (unsigned) cif->rtype->type; break; case FFI_TYPE_UINT64: +#ifdef X86_WIN64 + case FFI_TYPE_POINTER: +#endif cif->flags = FFI_TYPE_SINT64; break; @@ -154,7 +196,11 @@ } else if (cif->rtype->size == 4) { +#ifdef X86_WIN64 + cif->flags = FFI_TYPE_SMALL_STRUCT_4B; +#else cif->flags = FFI_TYPE_INT; /* same as int type */ +#endif } else if (cif->rtype->size == 8) { @@ -163,12 +209,23 @@ else { cif->flags = FFI_TYPE_STRUCT; +#ifdef X86_WIN64 + // allocate space for return value pointer + cif->bytes += ALIGN(sizeof(void*), FFI_SIZEOF_ARG); +#endif } break; #endif default: +#ifdef X86_WIN64 + cif->flags = FFI_TYPE_SINT64; + break; + case FFI_TYPE_INT: + cif->flags = FFI_TYPE_SINT32; +#else cif->flags = FFI_TYPE_INT; +#endif break; } @@ -176,17 +233,38 @@ cif->bytes = (cif->bytes + 15) & ~0xF; #endif +#ifdef X86_WIN64 + { + unsigned int i; + ffi_type **ptr; + + for (ptr = cif->arg_types, i = cif->nargs; i > 0; i--, ptr++) + { + if (((*ptr)->alignment - 1) & cif->bytes) + cif->bytes = ALIGN(cif->bytes, (*ptr)->alignment); + cif->bytes += ALIGN((*ptr)->size, FFI_SIZEOF_ARG); + } + } + // ensure space for storing four registers + cif->bytes += 4 * sizeof(ffi_arg); +#endif + return FFI_OK; } extern void ffi_call_SYSV(void (*)(char *, extended_cif *), extended_cif *, - unsigned, unsigned, unsigned *, void (*fn)(void)); + unsigned, unsigned, unsigned *, void (*fn)(void)); #ifdef X86_WIN32 extern void ffi_call_STDCALL(void (*)(char *, extended_cif *), extended_cif *, - unsigned, unsigned, unsigned *, void (*fn)(void)); + unsigned, unsigned, unsigned *, void (*fn)(void)); #endif /* X86_WIN32 */ +#ifdef X86_WIN64 +extern int +ffi_call_win64(void (*)(char *, extended_cif *), extended_cif *, + unsigned, unsigned, unsigned *, void (*fn)(void)); +#endif void ffi_call(ffi_cif *cif, void (*fn)(void), void *rvalue, void **avalue) { @@ -195,30 +273,66 @@ 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 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->flags == FFI_TYPE_STRUCT)) +#ifdef X86_WIN64 + if (rvalue == NULL + && cif->flags == FFI_TYPE_STRUCT + && cif->rtype->size != 1 && cif->rtype->size != 2 + && cif->rtype->size != 4 && cif->rtype->size != 8) + { + ecif.rvalue = alloca((cif->rtype->size + 0xF) & ~0xF); + } +#else + if (rvalue == NULL + && cif->flags == FFI_TYPE_STRUCT) { ecif.rvalue = alloca(cif->rtype->size); } +#endif else ecif.rvalue = rvalue; switch (cif->abi) { +#ifdef X86_WIN64 + case FFI_WIN64: + { + // Make copies of all struct arguments + // NOTE: not sure if responsibility should be here or in caller + unsigned int i; + for (i=0; i < cif->nargs;i++) { + size_t size = cif->arg_types[i]->size; + if ((cif->arg_types[i]->type == FFI_TYPE_STRUCT + && (size != 1 && size != 2 && size != 4 && size != 8)) +#if FFI_TYPE_LONGDOUBLE != FFI_TYPE_DOUBLE + || cif->arg_types[i]->type == FFI_TYPE_LONGDOUBLE +#endif + ) + { + void *local = alloca(size); + memcpy(local, avalue[i], size); + avalue[i] = local; + } + } + ffi_call_win64(ffi_prep_args, &ecif, cif->bytes, + cif->flags, ecif.rvalue, fn); + } + break; +#else case FFI_SYSV: ffi_call_SYSV(ffi_prep_args, &ecif, cif->bytes, cif->flags, ecif.rvalue, - fn); + fn); break; #ifdef X86_WIN32 case FFI_STDCALL: ffi_call_STDCALL(ffi_prep_args, &ecif, cif->bytes, cif->flags, - ecif.rvalue, fn); + ecif.rvalue, fn); break; #endif /* X86_WIN32 */ +#endif /* X86_WIN64 */ default: FFI_ASSERT(0); break; @@ -229,7 +343,7 @@ /** private members **/ static void ffi_prep_incoming_args_SYSV (char *stack, void **ret, - void** args, ffi_cif* cif); + void** args, ffi_cif* cif); void FFI_HIDDEN ffi_closure_SYSV (ffi_closure *) __attribute__ ((regparm(1))); unsigned int FFI_HIDDEN ffi_closure_SYSV_inner (ffi_closure *, void **, void *) @@ -240,9 +354,42 @@ void FFI_HIDDEN ffi_closure_STDCALL (ffi_closure *) __attribute__ ((regparm(1))); #endif +#ifdef X86_WIN64 +void FFI_HIDDEN ffi_closure_win64 (ffi_closure *); +#endif /* This function is jumped to by the trampoline */ +#ifdef X86_WIN64 +void * FFI_HIDDEN +ffi_closure_win64_inner (ffi_closure *closure, void *args) { + ffi_cif *cif; + void **arg_area; + void *result; + void *resp = &result; + + cif = closure->cif; + arg_area = (void**) alloca (cif->nargs * sizeof (void*)); + + /* this call will initialize ARG_AREA, such that each + * element in that array points to the corresponding + * value on the stack; and if the function returns + * a structure, it will change RESP to point to the + * structure return address. */ + + ffi_prep_incoming_args_SYSV(args, &resp, arg_area, cif); + + (closure->fun) (cif, resp, arg_area, closure->user_data); + + /* The result is returned in rax. This does the right thing for + result types except for floats; we have to 'mov xmm0, rax' in the + caller to correct this. + TODO: structure sizes of 3 5 6 7 are returned by reference, too!!! + */ + return cif->rtype->size > sizeof(void *) ? resp : *(void **)resp; +} + +#else unsigned int FFI_HIDDEN ffi_closure_SYSV_inner (closure, respp, args) ffi_closure *closure; @@ -259,7 +406,7 @@ /* this call will initialize ARG_AREA, 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 RESP to point to the + * a structure, it will change RESP to point to the * structure return address. */ ffi_prep_incoming_args_SYSV(args, respp, arg_area, cif); @@ -268,10 +415,11 @@ return cif->flags; } +#endif /* !X86_WIN64 */ static void ffi_prep_incoming_args_SYSV(char *stack, void **rvalue, void **avalue, - ffi_cif *cif) + ffi_cif *cif) { register unsigned int i; register void **p_argv; @@ -280,10 +428,20 @@ argp = stack; +#ifdef X86_WIN64 + if (cif->rtype->size > sizeof(ffi_arg) + || (cif->flags == FFI_TYPE_STRUCT + && (cif->rtype->size != 1 && cif->rtype->size != 2 + && cif->rtype->size != 4 && cif->rtype->size != 8))) { + *rvalue = *(void **) argp; + argp += sizeof(void *); + } +#else if ( cif->flags == FFI_TYPE_STRUCT ) { *rvalue = *(void **) argp; - argp += 4; + argp += sizeof(void *); } +#endif p_argv = avalue; @@ -292,30 +450,65 @@ size_t z; /* Align if necessary */ - if ((sizeof(int) - 1) & (unsigned) argp) { - argp = (char *) ALIGN(argp, sizeof(int)); + if ((sizeof(void*) - 1) & (size_t) argp) { + argp = (char *) ALIGN(argp, sizeof(void*)); } - z = (*p_arg)->size; - - /* because we're little endian, this is what it turns into. */ - - *p_argv = (void*) argp; - +#ifdef X86_WIN64 + if ((*p_arg)->size > sizeof(ffi_arg) + || ((*p_arg)->type == FFI_TYPE_STRUCT + && ((*p_arg)->size != 1 && (*p_arg)->size != 2 + && (*p_arg)->size != 4 && (*p_arg)->size != 8))) + { + z = sizeof(void *); + *p_argv = *(void **)argp; + } + else +#endif + { + z = (*p_arg)->size; + + /* because we're little endian, this is what it turns into. */ + + *p_argv = (void*) argp; + } + p_argv++; +#ifdef X86_WIN64 + argp += (z + sizeof(void*) - 1) & ~(sizeof(void*) - 1); +#else argp += z; +#endif } return; } +#define FFI_INIT_TRAMPOLINE_WIN64(TRAMP,FUN,CTX,MASK) \ +{ unsigned char *__tramp = (unsigned char*)(TRAMP); \ + void* __fun = (void*)(FUN); \ + void* __ctx = (void*)(CTX); \ + *(unsigned char*) &__tramp[0] = 0x41; \ + *(unsigned char*) &__tramp[1] = 0xbb; \ + *(unsigned int*) &__tramp[2] = MASK; /* mov $mask, %r11 */ \ + *(unsigned char*) &__tramp[6] = 0x48; \ + *(unsigned char*) &__tramp[7] = 0xb8; \ + *(void**) &__tramp[8] = __ctx; /* mov __ctx, %rax */ \ + *(unsigned char *) &__tramp[16] = 0x49; \ + *(unsigned char *) &__tramp[17] = 0xba; \ + *(void**) &__tramp[18] = __fun; /* mov __fun, %r10 */ \ + *(unsigned char *) &__tramp[26] = 0x41; \ + *(unsigned char *) &__tramp[27] = 0xff; \ + *(unsigned char *) &__tramp[28] = 0xe2; /* jmp %r10 */ \ + } + /* How to make a trampoline. Derived from gcc/config/i386/i386.c. */ #define FFI_INIT_TRAMPOLINE(TRAMP,FUN,CTX) \ ({ unsigned char *__tramp = (unsigned char*)(TRAMP); \ unsigned int __fun = (unsigned int)(FUN); \ unsigned int __ctx = (unsigned int)(CTX); \ - unsigned int __dis = __fun - (__ctx + 10); \ + unsigned int __dis = __fun - (__ctx + 10); \ *(unsigned char*) &__tramp[0] = 0xb8; \ *(unsigned int*) &__tramp[1] = __ctx; /* movl __ctx, %eax */ \ *(unsigned char *) &__tramp[5] = 0xe9; \ @@ -340,11 +533,23 @@ ffi_status ffi_prep_closure_loc (ffi_closure* closure, - ffi_cif* cif, - void (*fun)(ffi_cif*,void*,void**,void*), - void *user_data, - void *codeloc) + ffi_cif* cif, + void (*fun)(ffi_cif*,void*,void**,void*), + void *user_data, + void *codeloc) { +#ifdef X86_WIN64 +#define ISFLOAT(IDX) (cif->arg_types[IDX]->type == FFI_TYPE_FLOAT || cif->arg_types[IDX]->type == FFI_TYPE_DOUBLE) +#define FLAG(IDX) (cif->nargs>(IDX)&&ISFLOAT(IDX)?(1<<(IDX)):0) + if (cif->abi == FFI_WIN64) + { + int mask = FLAG(0)|FLAG(1)|FLAG(2)|FLAG(3); + FFI_INIT_TRAMPOLINE_WIN64 (&closure->tramp[0], + &ffi_closure_win64, + codeloc, mask); + /* make sure we can execute here */ + } +#else if (cif->abi == FFI_SYSV) { FFI_INIT_TRAMPOLINE (&closure->tramp[0], @@ -358,7 +563,8 @@ &ffi_closure_STDCALL, (void*)codeloc, cif->bytes); } -#endif +#endif /* X86_WIN32 */ +#endif /* !X86_WIN64 */ else { return FFI_BAD_ABI; @@ -377,10 +583,10 @@ ffi_status ffi_prep_raw_closure_loc (ffi_raw_closure* closure, - ffi_cif* cif, - void (*fun)(ffi_cif*,void*,ffi_raw*,void*), - void *user_data, - void *codeloc) + ffi_cif* cif, + void (*fun)(ffi_cif*,void*,ffi_raw*,void*), + void *user_data, + void *codeloc) { int i; @@ -401,7 +607,7 @@ FFI_INIT_TRAMPOLINE (&closure->tramp[0], &ffi_closure_raw_SYSV, - codeloc); + codeloc); closure->cif = cif; closure->user_data = user_data; @@ -423,12 +629,12 @@ extern void ffi_call_SYSV(void (*)(char *, extended_cif *), extended_cif *, unsigned, - unsigned, unsigned *, void (*fn)(void)); + unsigned, unsigned *, void (*fn)(void)); #ifdef X86_WIN32 extern void ffi_call_STDCALL(void (*)(char *, extended_cif *), extended_cif *, unsigned, - unsigned, unsigned *, void (*fn)(void)); + unsigned, unsigned *, void (*fn)(void)); #endif /* X86_WIN32 */ void @@ -440,8 +646,8 @@ 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 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)) @@ -456,12 +662,12 @@ { case FFI_SYSV: ffi_call_SYSV(ffi_prep_args_raw, &ecif, cif->bytes, cif->flags, - ecif.rvalue, fn); + ecif.rvalue, fn); break; #ifdef X86_WIN32 case FFI_STDCALL: ffi_call_STDCALL(ffi_prep_args_raw, &ecif, cif->bytes, cif->flags, - ecif.rvalue, fn); + ecif.rvalue, fn); break; #endif /* X86_WIN32 */ default: @@ -472,4 +678,5 @@ #endif -#endif /* __x86_64__ */ +#endif /* !__x86_64__ || X86_WIN64 */ + Modified: python/branches/py3k-jit/Modules/_ctypes/libffi/src/x86/ffi64.c ============================================================================== --- python/branches/py3k-jit/Modules/_ctypes/libffi/src/x86/ffi64.c (original) +++ python/branches/py3k-jit/Modules/_ctypes/libffi/src/x86/ffi64.c Tue Mar 16 21:40:29 2010 @@ -1,6 +1,6 @@ /* ----------------------------------------------------------------------- - ffi.c - Copyright (c) 2002, 2007 Bo Thorsen - Copyright (c) 2008 Red Hat, Inc. + ffi64.c - Copyright (c) 2002, 2007 Bo Thorsen + Copyright (c) 2008 Red Hat, Inc. x86-64 Foreign Function Interface @@ -145,13 +145,35 @@ case FFI_TYPE_UINT64: case FFI_TYPE_SINT64: case FFI_TYPE_POINTER: - if (byte_offset + type->size <= 4) - classes[0] = X86_64_INTEGERSI_CLASS; - else - classes[0] = X86_64_INTEGER_CLASS; - return 1; + { + int size = byte_offset + type->size; + + if (size <= 4) + { + classes[0] = X86_64_INTEGERSI_CLASS; + return 1; + } + else if (size <= 8) + { + classes[0] = X86_64_INTEGER_CLASS; + return 1; + } + else if (size <= 12) + { + classes[0] = X86_64_INTEGER_CLASS; + classes[1] = X86_64_INTEGERSI_CLASS; + return 2; + } + else if (size <= 16) + { + classes[0] = classes[1] = X86_64_INTEGERSI_CLASS; + return 2; + } + else + FFI_ASSERT (0); + } case FFI_TYPE_FLOAT: - if (byte_offset == 0) + if (!(byte_offset % 8)) classes[0] = X86_64_SSESF_CLASS; else classes[0] = X86_64_SSE_CLASS; @@ -171,13 +193,21 @@ int i; enum x86_64_reg_class subclasses[MAX_CLASSES]; - /* If the struct is larger than 16 bytes, pass it on the stack. */ - if (type->size > 16) + /* If the struct is larger than 32 bytes, pass it on the stack. */ + if (type->size > 32) return 0; for (i = 0; i < words; i++) classes[i] = X86_64_NO_CLASS; + /* Zero sized arrays or structures are NO_CLASS. We return 0 to + signalize memory class, so handle it as special case. */ + if (!words) + { + classes[0] = X86_64_NO_CLASS; + return 1; + } + /* Merge the fields of structure. */ for (ptr = type->elements; *ptr != NULL; ptr++) { @@ -198,6 +228,20 @@ byte_offset += (*ptr)->size; } + if (words > 2) + { + /* When size > 16 bytes, if the first one isn't + X86_64_SSE_CLASS or any other ones aren't + X86_64_SSEUP_CLASS, everything should be passed in + memory. */ + if (classes[0] != X86_64_SSE_CLASS) + return 0; + + for (i = 1; i < words; i++) + if (classes[i] != X86_64_SSEUP_CLASS) + return 0; + } + /* Final merger cleanup. */ for (i = 0; i < words; i++) { @@ -207,15 +251,25 @@ return 0; /* The X86_64_SSEUP_CLASS should be always preceded by - X86_64_SSE_CLASS. */ + X86_64_SSE_CLASS or X86_64_SSEUP_CLASS. */ if (classes[i] == X86_64_SSEUP_CLASS - && (i == 0 || classes[i - 1] != X86_64_SSE_CLASS)) - classes[i] = X86_64_SSE_CLASS; + && classes[i - 1] != X86_64_SSE_CLASS + && classes[i - 1] != X86_64_SSEUP_CLASS) + { + /* The first one should never be X86_64_SSEUP_CLASS. */ + FFI_ASSERT (i != 0); + classes[i] = X86_64_SSE_CLASS; + } - /* X86_64_X87UP_CLASS should be preceded by X86_64_X87_CLASS. */ + /* If X86_64_X87UP_CLASS isn't preceded by X86_64_X87_CLASS, + everything should be passed in memory. */ if (classes[i] == X86_64_X87UP_CLASS - && (i == 0 || classes[i - 1] != X86_64_X87_CLASS)) - classes[i] = X86_64_SSE_CLASS; + && (classes[i - 1] != X86_64_X87_CLASS)) + { + /* The first one should never be X86_64_X87UP_CLASS. */ + FFI_ASSERT (i != 0); + return 0; + } } return words; } @@ -528,10 +582,10 @@ argp += arg_types[i]->size; } /* If the argument is in a single register, or two consecutive - registers, then we can use that address directly. */ + integer registers, then we can use that address directly. */ else if (n == 1 - || (n == 2 - && SSE_CLASS_P (classes[0]) == SSE_CLASS_P (classes[1]))) + || (n == 2 && !(SSE_CLASS_P (classes[0]) + || SSE_CLASS_P (classes[1])))) { /* The argument is in a single register. */ if (SSE_CLASS_P (classes[0])) Modified: python/branches/py3k-jit/Modules/_ctypes/libffi/src/x86/ffitarget.h ============================================================================== --- python/branches/py3k-jit/Modules/_ctypes/libffi/src/x86/ffitarget.h (original) +++ python/branches/py3k-jit/Modules/_ctypes/libffi/src/x86/ffitarget.h Tue Mar 16 21:40:29 2010 @@ -36,11 +36,26 @@ #define X86 #endif +#ifdef X86_WIN64 +#define FFI_SIZEOF_ARG 8 +#define USE_BUILTIN_FFS 0 // not yet implemented in mingw-64 +#endif + /* ---- Generic type definitions ----------------------------------------- */ #ifndef LIBFFI_ASM +#ifdef X86_WIN64 +#ifdef _MSC_VER +typedef unsigned __int64 ffi_arg; +typedef __int64 ffi_sarg; +#else +typedef unsigned long long ffi_arg; +typedef long long ffi_sarg; +#endif +#else typedef unsigned long ffi_arg; typedef signed long ffi_sarg; +#endif typedef enum ffi_abi { FFI_FIRST_ABI = 0, @@ -53,6 +68,11 @@ FFI_DEFAULT_ABI = FFI_SYSV, #endif +#ifdef X86_WIN64 + FFI_WIN64, + FFI_DEFAULT_ABI = FFI_WIN64, +#else + /* ---- Intel x86 and AMD x86-64 - */ #if !defined(X86_WIN32) && (defined(__i386__) || defined(__x86_64__)) FFI_SYSV, @@ -63,6 +83,7 @@ FFI_DEFAULT_ABI = FFI_UNIX64, #endif #endif +#endif /* X86_WIN64 */ FFI_LAST_ABI = FFI_DEFAULT_ABI + 1 } ffi_abi; @@ -73,6 +94,7 @@ #define FFI_CLOSURES 1 #define FFI_TYPE_SMALL_STRUCT_1B (FFI_TYPE_LAST + 1) #define FFI_TYPE_SMALL_STRUCT_2B (FFI_TYPE_LAST + 2) +#define FFI_TYPE_SMALL_STRUCT_4B (FFI_TYPE_LAST + 3) #if defined (X86_64) || (defined (__x86_64__) && defined (X86_DARWIN)) #define FFI_TRAMPOLINE_SIZE 24 @@ -81,10 +103,18 @@ #ifdef X86_WIN32 #define FFI_TRAMPOLINE_SIZE 13 #else +#ifdef X86_WIN64 +#define FFI_TRAMPOLINE_SIZE 29 +#define FFI_NATIVE_RAW_API 0 +#define FFI_NO_RAW_API 1 +#else #define FFI_TRAMPOLINE_SIZE 10 #endif +#endif +#ifndef X86_WIN64 #define FFI_NATIVE_RAW_API 1 /* x86 has native raw api support */ #endif +#endif #endif Modified: python/branches/py3k-jit/Modules/_ctypes/libffi/src/x86/sysv.S ============================================================================== --- python/branches/py3k-jit/Modules/_ctypes/libffi/src/x86/sysv.S (original) +++ python/branches/py3k-jit/Modules/_ctypes/libffi/src/x86/sysv.S Tue Mar 16 21:40:29 2010 @@ -242,9 +242,20 @@ #if !FFI_NO_RAW_API +/* Precalculate for e.g. the Solaris 10/x86 assembler. */ +#if FFI_TRAMPOLINE_SIZE == 10 +#define RAW_CLOSURE_CIF_OFFSET 12 +#define RAW_CLOSURE_FUN_OFFSET 16 +#define RAW_CLOSURE_USER_DATA_OFFSET 20 +#elif FFI_TRAMPOLINE_SIZE == 24 +#define RAW_CLOSURE_CIF_OFFSET 24 +#define RAW_CLOSURE_FUN_OFFSET 28 +#define RAW_CLOSURE_USER_DATA_OFFSET 32 +#else #define RAW_CLOSURE_CIF_OFFSET ((FFI_TRAMPOLINE_SIZE + 3) & ~3) #define RAW_CLOSURE_FUN_OFFSET (RAW_CLOSURE_CIF_OFFSET + 4) #define RAW_CLOSURE_USER_DATA_OFFSET (RAW_CLOSURE_FUN_OFFSET + 4) +#endif #define CIF_FLAGS_OFFSET 20 .align 4 @@ -343,10 +354,12 @@ .long .LEFDE1-.LASFDE1 /* FDE Length */ .LASFDE1: .long .LASFDE1-.Lframe1 /* FDE CIE offset */ -#ifdef __PIC__ +#if defined __PIC__ && defined HAVE_AS_X86_PCREL .long .LFB1-. /* FDE initial location */ +#elif defined __PIC__ + .long .LFB1 at rel #else - .long .LFB1 /* FDE initial location */ + .long .LFB1 #endif .long .LFE1-.LFB1 /* FDE address range */ #ifdef __PIC__ @@ -368,8 +381,10 @@ .long .LEFDE2-.LASFDE2 /* FDE Length */ .LASFDE2: .long .LASFDE2-.Lframe1 /* FDE CIE offset */ -#ifdef __PIC__ +#if defined __PIC__ && defined HAVE_AS_X86_PCREL .long .LFB2-. /* FDE initial location */ +#elif defined __PIC__ + .long .LFB2 at rel #else .long .LFB2 #endif @@ -402,8 +417,10 @@ .long .LEFDE3-.LASFDE3 /* FDE Length */ .LASFDE3: .long .LASFDE3-.Lframe1 /* FDE CIE offset */ -#ifdef __PIC__ +#if defined __PIC__ && defined HAVE_AS_X86_PCREL .long .LFB3-. /* FDE initial location */ +#elif defined __PIC__ + .long .LFB3 at rel #else .long .LFB3 #endif Modified: python/branches/py3k-jit/Modules/_ctypes/libffi/src/x86/unix64.S ============================================================================== --- python/branches/py3k-jit/Modules/_ctypes/libffi/src/x86/unix64.S (original) +++ python/branches/py3k-jit/Modules/_ctypes/libffi/src/x86/unix64.S Tue Mar 16 21:40:29 2010 @@ -89,7 +89,6 @@ addq %r11, %r10 jmp *%r10 - .section .rodata .Lstore_table: .long .Lst_void-.Lstore_table /* FFI_TYPE_VOID */ .long .Lst_sint32-.Lstore_table /* FFI_TYPE_INT */ @@ -107,7 +106,6 @@ .long .Lst_struct-.Lstore_table /* FFI_TYPE_STRUCT */ .long .Lst_int64-.Lstore_table /* FFI_TYPE_POINTER */ - .text .align 2 .Lst_void: ret @@ -240,7 +238,6 @@ addq %r11, %r10 jmp *%r10 - .section .rodata .Lload_table: .long .Lld_void-.Lload_table /* FFI_TYPE_VOID */ .long .Lld_int32-.Lload_table /* FFI_TYPE_INT */ @@ -258,7 +255,6 @@ .long .Lld_struct-.Lload_table /* FFI_TYPE_STRUCT */ .long .Lld_int64-.Lload_table /* FFI_TYPE_POINTER */ - .text .align 2 .Lld_void: ret @@ -351,7 +347,11 @@ .long .LEFDE1-.LASFDE1 /* FDE Length */ .LASFDE1: .long .LASFDE1-.Lframe1 /* FDE CIE offset */ +#if HAVE_AS_X86_PCREL .long .LUW0-. /* FDE initial location */ +#else + .long .LUW0 at rel +#endif .long .LUW4-.LUW0 /* FDE address range */ .uleb128 0x0 /* Augmentation size */ @@ -389,7 +389,11 @@ .long .LEFDE3-.LASFDE3 /* FDE Length */ .LASFDE3: .long .LASFDE3-.Lframe1 /* FDE CIE offset */ +#if HAVE_AS_X86_PCREL .long .LUW5-. /* FDE initial location */ +#else + .long .LUW5 at rel +#endif .long .LUW9-.LUW5 /* FDE address range */ .uleb128 0x0 /* Augmentation size */ Modified: python/branches/py3k-jit/Modules/_ctypes/libffi/src/x86/win32.S ============================================================================== --- python/branches/py3k-jit/Modules/_ctypes/libffi/src/x86/win32.S (original) +++ python/branches/py3k-jit/Modules/_ctypes/libffi/src/x86/win32.S Tue Mar 16 21:40:29 2010 @@ -1,5 +1,5 @@ /* ----------------------------------------------------------------------- - win32.S - Copyright (c) 1996, 1998, 2001, 2002 Red Hat, Inc. + win32.S - Copyright (c) 1996, 1998, 2001, 2002, 2009 Red Hat, Inc. Copyright (c) 2001 John Beniton Copyright (c) 2002 Ranjit Mathew @@ -17,32 +17,33 @@ 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 THE AUTHORS OR COPYRIGHT HOLDERS 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 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 THE AUTHORS OR COPYRIGHT + HOLDERS 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 -.text - -.globl ffi_prep_args + .text # This assumes we are using gas. .balign 16 -.globl _ffi_call_SYSV - + .globl _ffi_call_SYSV + .def _ffi_call_SYSV; .scl 2; .type 32; .endef _ffi_call_SYSV: +.LFB1: pushl %ebp +.LCFI0: movl %esp,%ebp - +.LCFI1: # Make room for all of the new args. movl 16(%ebp),%ecx subl %ecx,%esp @@ -62,100 +63,137 @@ call *28(%ebp) - # Remove the space we pushed for the args - movl 16(%ebp),%ecx - addl %ecx,%esp - # Load %ecx with the return type code movl 20(%ebp),%ecx # If the return value pointer is NULL, assume no return value. cmpl $0,24(%ebp) - jne retint + jne 0f # Even if there is no space for the return value, we are # obliged to handle floating-point values. cmpl $FFI_TYPE_FLOAT,%ecx - jne noretval + jne .Lnoretval fstp %st(0) - jmp epilogue - -retint: - cmpl $FFI_TYPE_INT,%ecx - jne retfloat + jmp .Lepilogue + +0: + call 1f + # Do not insert anything here between the call and the jump table. +.Lstore_table: + .long .Lnoretval /* FFI_TYPE_VOID */ + .long .Lretint /* FFI_TYPE_INT */ + .long .Lretfloat /* FFI_TYPE_FLOAT */ + .long .Lretdouble /* FFI_TYPE_DOUBLE */ + .long .Lretlongdouble /* FFI_TYPE_LONGDOUBLE */ + .long .Lretuint8 /* FFI_TYPE_UINT8 */ + .long .Lretsint8 /* FFI_TYPE_SINT8 */ + .long .Lretuint16 /* FFI_TYPE_UINT16 */ + .long .Lretsint16 /* FFI_TYPE_SINT16 */ + .long .Lretint /* FFI_TYPE_UINT32 */ + .long .Lretint /* FFI_TYPE_SINT32 */ + .long .Lretint64 /* FFI_TYPE_UINT64 */ + .long .Lretint64 /* FFI_TYPE_SINT64 */ + .long .Lretstruct /* FFI_TYPE_STRUCT */ + .long .Lretint /* FFI_TYPE_POINTER */ + .long .Lretstruct1b /* FFI_TYPE_SMALL_STRUCT_1B */ + .long .Lretstruct2b /* FFI_TYPE_SMALL_STRUCT_2B */ + .long .Lretstruct4b /* FFI_TYPE_SMALL_STRUCT_4B */ +1: + add %ecx, %ecx + add %ecx, %ecx + add (%esp),%ecx + add $4, %esp + jmp *(%ecx) + + /* Sign/zero extend as appropriate. */ +.Lretsint8: + movsbl %al, %eax + jmp .Lretint + +.Lretsint16: + movswl %ax, %eax + jmp .Lretint + +.Lretuint8: + movzbl %al, %eax + jmp .Lretint + +.Lretuint16: + movzwl %ax, %eax + jmp .Lretint + +.Lretint: # Load %ecx with the pointer to storage for the return value movl 24(%ebp),%ecx movl %eax,0(%ecx) - jmp epilogue + jmp .Lepilogue -retfloat: - cmpl $FFI_TYPE_FLOAT,%ecx - jne retdouble +.Lretfloat: # Load %ecx with the pointer to storage for the return value movl 24(%ebp),%ecx fstps (%ecx) - jmp epilogue + jmp .Lepilogue -retdouble: - cmpl $FFI_TYPE_DOUBLE,%ecx - jne retlongdouble +.Lretdouble: # Load %ecx with the pointer to storage for the return value movl 24(%ebp),%ecx fstpl (%ecx) - jmp epilogue + jmp .Lepilogue -retlongdouble: - cmpl $FFI_TYPE_LONGDOUBLE,%ecx - jne retint64 +.Lretlongdouble: # Load %ecx with the pointer to storage for the return value movl 24(%ebp),%ecx fstpt (%ecx) - jmp epilogue + jmp .Lepilogue -retint64: - cmpl $FFI_TYPE_SINT64,%ecx - jne retstruct1b +.Lretint64: # Load %ecx with the pointer to storage for the return value movl 24(%ebp),%ecx movl %eax,0(%ecx) movl %edx,4(%ecx) - -retstruct1b: - cmpl $FFI_TYPE_SINT8,%ecx - jne retstruct2b + jmp .Lepilogue + +.Lretstruct1b: # Load %ecx with the pointer to storage for the return value movl 24(%ebp),%ecx movb %al,0(%ecx) - jmp epilogue + jmp .Lepilogue -retstruct2b: - cmpl $FFI_TYPE_SINT16,%ecx - jne retstruct +.Lretstruct2b: # Load %ecx with the pointer to storage for the return value movl 24(%ebp),%ecx movw %ax,0(%ecx) - jmp epilogue - -retstruct: + jmp .Lepilogue + +.Lretstruct4b: + # Load %ecx with the pointer to storage for the return value + movl 24(%ebp),%ecx + movl %eax,0(%ecx) + jmp .Lepilogue + +.Lretstruct: # Nothing to do! -noretval: -epilogue: +.Lnoretval: +.Lepilogue: movl %ebp,%esp popl %ebp ret - .ffi_call_SYSV_end: +.LFE1: # This assumes we are using gas. .balign 16 -.globl _ffi_call_STDCALL - + .globl _ffi_call_STDCALL + .def _ffi_call_STDCALL; .scl 2; .type 32; .endef _ffi_call_STDCALL: +.LFB2: pushl %ebp +.LCFI2: movl %esp,%ebp - +.LCFI3: # Make room for all of the new args. movl 16(%ebp),%ecx subl %ecx,%esp @@ -182,103 +220,133 @@ # If the return value pointer is NULL, assume no return value. cmpl $0,24(%ebp) - jne sc_retint + jne 0f # Even if there is no space for the return value, we are # obliged to handle floating-point values. cmpl $FFI_TYPE_FLOAT,%ecx - jne sc_noretval + jne .Lsc_noretval fstp %st(0) - jmp sc_epilogue + jmp .Lsc_epilogue + +0: + call 1f + # Do not insert anything here between the call and the jump table. +.Lsc_store_table: + .long .Lsc_noretval /* FFI_TYPE_VOID */ + .long .Lsc_retint /* FFI_TYPE_INT */ + .long .Lsc_retfloat /* FFI_TYPE_FLOAT */ + .long .Lsc_retdouble /* FFI_TYPE_DOUBLE */ + .long .Lsc_retlongdouble /* FFI_TYPE_LONGDOUBLE */ + .long .Lsc_retuint8 /* FFI_TYPE_UINT8 */ + .long .Lsc_retsint8 /* FFI_TYPE_SINT8 */ + .long .Lsc_retuint16 /* FFI_TYPE_UINT16 */ + .long .Lsc_retsint16 /* FFI_TYPE_SINT16 */ + .long .Lsc_retint /* FFI_TYPE_UINT32 */ + .long .Lsc_retint /* FFI_TYPE_SINT32 */ + .long .Lsc_retint64 /* FFI_TYPE_UINT64 */ + .long .Lsc_retint64 /* FFI_TYPE_SINT64 */ + .long .Lsc_retstruct /* FFI_TYPE_STRUCT */ + .long .Lsc_retint /* FFI_TYPE_POINTER */ + .long .Lsc_retstruct1b /* FFI_TYPE_SMALL_STRUCT_1B */ + .long .Lsc_retstruct2b /* FFI_TYPE_SMALL_STRUCT_2B */ + .long .Lsc_retstruct4b /* FFI_TYPE_SMALL_STRUCT_4B */ + +1: + add %ecx, %ecx + add %ecx, %ecx + add (%esp),%ecx + add $4, %esp + jmp *(%ecx) + + /* Sign/zero extend as appropriate. */ +.Lsc_retsint8: + movsbl %al, %eax + jmp .Lsc_retint + +.Lsc_retsint16: + movswl %ax, %eax + jmp .Lsc_retint + +.Lsc_retuint8: + movzbl %al, %eax + jmp .Lsc_retint + +.Lsc_retuint16: + movzwl %ax, %eax + jmp .Lsc_retint -sc_retint: - cmpl $FFI_TYPE_INT,%ecx - jne sc_retfloat +.Lsc_retint: # Load %ecx with the pointer to storage for the return value movl 24(%ebp),%ecx movl %eax,0(%ecx) - jmp sc_epilogue + jmp .Lsc_epilogue -sc_retfloat: - cmpl $FFI_TYPE_FLOAT,%ecx - jne sc_retdouble +.Lsc_retfloat: # Load %ecx with the pointer to storage for the return value movl 24(%ebp),%ecx fstps (%ecx) - jmp sc_epilogue + jmp .Lsc_epilogue -sc_retdouble: - cmpl $FFI_TYPE_DOUBLE,%ecx - jne sc_retlongdouble +.Lsc_retdouble: # Load %ecx with the pointer to storage for the return value movl 24(%ebp),%ecx fstpl (%ecx) - jmp sc_epilogue + jmp .Lsc_epilogue -sc_retlongdouble: - cmpl $FFI_TYPE_LONGDOUBLE,%ecx - jne sc_retint64 +.Lsc_retlongdouble: # Load %ecx with the pointer to storage for the return value movl 24(%ebp),%ecx fstpt (%ecx) - jmp sc_epilogue + jmp .Lsc_epilogue -sc_retint64: - cmpl $FFI_TYPE_SINT64,%ecx - jne sc_retstruct1b +.Lsc_retint64: # Load %ecx with the pointer to storage for the return value movl 24(%ebp),%ecx movl %eax,0(%ecx) movl %edx,4(%ecx) + jmp .Lsc_epilogue -sc_retstruct1b: - cmpl $FFI_TYPE_SINT8,%ecx - jne sc_retstruct2b +.Lsc_retstruct1b: # Load %ecx with the pointer to storage for the return value movl 24(%ebp),%ecx movb %al,0(%ecx) - jmp sc_epilogue + jmp .Lsc_epilogue -sc_retstruct2b: - cmpl $FFI_TYPE_SINT16,%ecx - jne sc_retstruct +.Lsc_retstruct2b: # Load %ecx with the pointer to storage for the return value movl 24(%ebp),%ecx movw %ax,0(%ecx) - jmp sc_epilogue + jmp .Lsc_epilogue + +.Lsc_retstruct4b: + # Load %ecx with the pointer to storage for the return value + movl 24(%ebp),%ecx + movl %eax,0(%ecx) + jmp .Lsc_epilogue -sc_retstruct: +.Lsc_retstruct: # Nothing to do! -sc_noretval: -sc_epilogue: +.Lsc_noretval: +.Lsc_epilogue: movl %ebp,%esp popl %ebp ret - .ffi_call_STDCALL_end: +.LFE2: - .globl _ffi_closure_STDCALL -_ffi_closure_STDCALL: - pushl %ebp - movl %esp, %ebp - subl $40, %esp - leal -24(%ebp), %edx - movl %edx, -12(%ebp) /* resp */ - leal 12(%ebp), %edx /* account for stub return address on stack */ - movl %edx, 4(%esp) /* args */ - leal -12(%ebp), %edx - movl %edx, (%esp) /* &resp */ - call _ffi_closure_SYSV_inner - movl -12(%ebp), %ecx - jmp .Lcls_return_result -.ffi_closure_STDCALL_end: - - .globl _ffi_closure_SYSV + # This assumes we are using gas. + .balign 16 + .globl _ffi_closure_SYSV + .def _ffi_closure_SYSV; .scl 2; .type 32; .endef _ffi_closure_SYSV: +.LFB3: pushl %ebp +.LCFI4: movl %esp, %ebp +.LCFI5: subl $40, %esp leal -24(%ebp), %edx movl %edx, -12(%ebp) /* resp */ @@ -288,48 +356,100 @@ movl %edx, (%esp) /* &resp */ call _ffi_closure_SYSV_inner movl -12(%ebp), %ecx -.Lcls_return_result: - cmpl $FFI_TYPE_INT, %eax - je .Lcls_retint - cmpl $FFI_TYPE_FLOAT, %eax - je .Lcls_retfloat - cmpl $FFI_TYPE_DOUBLE, %eax - je .Lcls_retdouble - cmpl $FFI_TYPE_LONGDOUBLE, %eax - je .Lcls_retldouble - cmpl $FFI_TYPE_SINT64, %eax - je .Lcls_retllong - cmpl $FFI_TYPE_SINT8, %eax /* 1-byte struct */ - je .Lcls_retstruct1 - cmpl $FFI_TYPE_SINT16, %eax /* 2-bytes struct */ - je .Lcls_retstruct2 -.Lcls_epilogue: - movl %ebp, %esp - popl %ebp - ret + +0: + call 1f + # Do not insert anything here between the call and the jump table. +.Lcls_store_table: + .long .Lcls_noretval /* FFI_TYPE_VOID */ + .long .Lcls_retint /* FFI_TYPE_INT */ + .long .Lcls_retfloat /* FFI_TYPE_FLOAT */ + .long .Lcls_retdouble /* FFI_TYPE_DOUBLE */ + .long .Lcls_retldouble /* FFI_TYPE_LONGDOUBLE */ + .long .Lcls_retuint8 /* FFI_TYPE_UINT8 */ + .long .Lcls_retsint8 /* FFI_TYPE_SINT8 */ + .long .Lcls_retuint16 /* FFI_TYPE_UINT16 */ + .long .Lcls_retsint16 /* FFI_TYPE_SINT16 */ + .long .Lcls_retint /* FFI_TYPE_UINT32 */ + .long .Lcls_retint /* FFI_TYPE_SINT32 */ + .long .Lcls_retllong /* FFI_TYPE_UINT64 */ + .long .Lcls_retllong /* FFI_TYPE_SINT64 */ + .long .Lcls_retstruct /* FFI_TYPE_STRUCT */ + .long .Lcls_retint /* FFI_TYPE_POINTER */ + .long .Lcls_retstruct1 /* FFI_TYPE_SMALL_STRUCT_1B */ + .long .Lcls_retstruct2 /* FFI_TYPE_SMALL_STRUCT_2B */ + .long .Lcls_retstruct4 /* FFI_TYPE_SMALL_STRUCT_4B */ + +1: + add %eax, %eax + add %eax, %eax + add (%esp),%eax + add $4, %esp + jmp *(%eax) + + /* Sign/zero extend as appropriate. */ +.Lcls_retsint8: + movsbl (%ecx), %eax + jmp .Lcls_epilogue + +.Lcls_retsint16: + movswl (%ecx), %eax + jmp .Lcls_epilogue + +.Lcls_retuint8: + movzbl (%ecx), %eax + jmp .Lcls_epilogue + +.Lcls_retuint16: + movzwl (%ecx), %eax + jmp .Lcls_epilogue + .Lcls_retint: movl (%ecx), %eax jmp .Lcls_epilogue + .Lcls_retfloat: flds (%ecx) jmp .Lcls_epilogue + .Lcls_retdouble: fldl (%ecx) jmp .Lcls_epilogue + .Lcls_retldouble: fldt (%ecx) jmp .Lcls_epilogue + .Lcls_retllong: movl (%ecx), %eax movl 4(%ecx), %edx jmp .Lcls_epilogue + .Lcls_retstruct1: movsbl (%ecx), %eax jmp .Lcls_epilogue + .Lcls_retstruct2: movswl (%ecx), %eax jmp .Lcls_epilogue + +.Lcls_retstruct4: + movl (%ecx), %eax + jmp .Lcls_epilogue + +.Lcls_retstruct: + # Caller expects us to pop struct return value pointer hidden arg. + movl %ebp, %esp + popl %ebp + ret $0x4 + +.Lcls_noretval: +.Lcls_epilogue: + movl %ebp, %esp + popl %ebp + ret .ffi_closure_SYSV_end: +.LFE3: #if !FFI_NO_RAW_API @@ -338,12 +458,18 @@ #define RAW_CLOSURE_USER_DATA_OFFSET (RAW_CLOSURE_FUN_OFFSET + 4) #define CIF_FLAGS_OFFSET 20 - .balign 16 - .globl _ffi_closure_raw_SYSV + # This assumes we are using gas. + .balign 16 + .globl _ffi_closure_raw_SYSV + .def _ffi_closure_raw_SYSV; .scl 2; .type 32; .endef _ffi_closure_raw_SYSV: +.LFB4: pushl %ebp +.LCFI6: movl %esp, %ebp +.LCFI7: pushl %esi +.LCFI8: subl $36, %esp movl RAW_CLOSURE_CIF_OFFSET(%eax), %esi /* closure->cif */ movl RAW_CLOSURE_USER_DATA_OFFSET(%eax), %edx /* closure->user_data */ @@ -355,37 +481,397 @@ movl %esi, (%esp) /* cif */ call *RAW_CLOSURE_FUN_OFFSET(%eax) /* closure->fun */ movl CIF_FLAGS_OFFSET(%esi), %eax /* rtype */ - cmpl $FFI_TYPE_INT, %eax - je .Lrcls_retint - cmpl $FFI_TYPE_FLOAT, %eax - je .Lrcls_retfloat - cmpl $FFI_TYPE_DOUBLE, %eax - je .Lrcls_retdouble - cmpl $FFI_TYPE_LONGDOUBLE, %eax - je .Lrcls_retldouble - cmpl $FFI_TYPE_SINT64, %eax - je .Lrcls_retllong -.Lrcls_epilogue: - addl $36, %esp - popl %esi - popl %ebp - ret +0: + call 1f + # Do not insert anything here between the call and the jump table. +.Lrcls_store_table: + .long .Lrcls_noretval /* FFI_TYPE_VOID */ + .long .Lrcls_retint /* FFI_TYPE_INT */ + .long .Lrcls_retfloat /* FFI_TYPE_FLOAT */ + .long .Lrcls_retdouble /* FFI_TYPE_DOUBLE */ + .long .Lrcls_retldouble /* FFI_TYPE_LONGDOUBLE */ + .long .Lrcls_retuint8 /* FFI_TYPE_UINT8 */ + .long .Lrcls_retsint8 /* FFI_TYPE_SINT8 */ + .long .Lrcls_retuint16 /* FFI_TYPE_UINT16 */ + .long .Lrcls_retsint16 /* FFI_TYPE_SINT16 */ + .long .Lrcls_retint /* FFI_TYPE_UINT32 */ + .long .Lrcls_retint /* FFI_TYPE_SINT32 */ + .long .Lrcls_retllong /* FFI_TYPE_UINT64 */ + .long .Lrcls_retllong /* FFI_TYPE_SINT64 */ + .long .Lrcls_retstruct /* FFI_TYPE_STRUCT */ + .long .Lrcls_retint /* FFI_TYPE_POINTER */ + .long .Lrcls_retstruct1 /* FFI_TYPE_SMALL_STRUCT_1B */ + .long .Lrcls_retstruct2 /* FFI_TYPE_SMALL_STRUCT_2B */ + .long .Lrcls_retstruct4 /* FFI_TYPE_SMALL_STRUCT_4B */ +1: + add %eax, %eax + add %eax, %eax + add (%esp),%eax + add $4, %esp + jmp *(%eax) + + /* Sign/zero extend as appropriate. */ +.Lrcls_retsint8: + movsbl -24(%ebp), %eax + jmp .Lrcls_epilogue + +.Lrcls_retsint16: + movswl -24(%ebp), %eax + jmp .Lrcls_epilogue + +.Lrcls_retuint8: + movzbl -24(%ebp), %eax + jmp .Lrcls_epilogue + +.Lrcls_retuint16: + movzwl -24(%ebp), %eax + jmp .Lrcls_epilogue + .Lrcls_retint: movl -24(%ebp), %eax jmp .Lrcls_epilogue + .Lrcls_retfloat: flds -24(%ebp) jmp .Lrcls_epilogue + .Lrcls_retdouble: fldl -24(%ebp) jmp .Lrcls_epilogue + .Lrcls_retldouble: fldt -24(%ebp) jmp .Lrcls_epilogue + .Lrcls_retllong: movl -24(%ebp), %eax movl -20(%ebp), %edx jmp .Lrcls_epilogue + +.Lrcls_retstruct1: + movsbl -24(%ebp), %eax + jmp .Lrcls_epilogue + +.Lrcls_retstruct2: + movswl -24(%ebp), %eax + jmp .Lrcls_epilogue + +.Lrcls_retstruct4: + movl -24(%ebp), %eax + jmp .Lrcls_epilogue + +.Lrcls_retstruct: + # Nothing to do! + +.Lrcls_noretval: +.Lrcls_epilogue: + addl $36, %esp + popl %esi + popl %ebp + ret .ffi_closure_raw_SYSV_end: +.LFE4: + +#endif /* !FFI_NO_RAW_API */ + + # This assumes we are using gas. + .balign 16 + .globl _ffi_closure_STDCALL + .def _ffi_closure_STDCALL; .scl 2; .type 32; .endef +_ffi_closure_STDCALL: +.LFB5: + pushl %ebp +.LCFI9: + movl %esp, %ebp +.LCFI10: + subl $40, %esp + leal -24(%ebp), %edx + movl %edx, -12(%ebp) /* resp */ + leal 12(%ebp), %edx /* account for stub return address on stack */ + movl %edx, 4(%esp) /* args */ + leal -12(%ebp), %edx + movl %edx, (%esp) /* &resp */ + call _ffi_closure_SYSV_inner + movl -12(%ebp), %ecx +0: + call 1f + # Do not insert anything here between the call and the jump table. +.Lscls_store_table: + .long .Lscls_noretval /* FFI_TYPE_VOID */ + .long .Lscls_retint /* FFI_TYPE_INT */ + .long .Lscls_retfloat /* FFI_TYPE_FLOAT */ + .long .Lscls_retdouble /* FFI_TYPE_DOUBLE */ + .long .Lscls_retldouble /* FFI_TYPE_LONGDOUBLE */ + .long .Lscls_retuint8 /* FFI_TYPE_UINT8 */ + .long .Lscls_retsint8 /* FFI_TYPE_SINT8 */ + .long .Lscls_retuint16 /* FFI_TYPE_UINT16 */ + .long .Lscls_retsint16 /* FFI_TYPE_SINT16 */ + .long .Lscls_retint /* FFI_TYPE_UINT32 */ + .long .Lscls_retint /* FFI_TYPE_SINT32 */ + .long .Lscls_retllong /* FFI_TYPE_UINT64 */ + .long .Lscls_retllong /* FFI_TYPE_SINT64 */ + .long .Lscls_retstruct /* FFI_TYPE_STRUCT */ + .long .Lscls_retint /* FFI_TYPE_POINTER */ + .long .Lscls_retstruct1 /* FFI_TYPE_SMALL_STRUCT_1B */ + .long .Lscls_retstruct2 /* FFI_TYPE_SMALL_STRUCT_2B */ + .long .Lscls_retstruct4 /* FFI_TYPE_SMALL_STRUCT_4B */ +1: + add %eax, %eax + add %eax, %eax + add (%esp),%eax + add $4, %esp + jmp *(%eax) + + /* Sign/zero extend as appropriate. */ +.Lscls_retsint8: + movsbl (%ecx), %eax + jmp .Lscls_epilogue + +.Lscls_retsint16: + movswl (%ecx), %eax + jmp .Lscls_epilogue + +.Lscls_retuint8: + movzbl (%ecx), %eax + jmp .Lscls_epilogue +.Lscls_retuint16: + movzwl (%ecx), %eax + jmp .Lscls_epilogue + +.Lscls_retint: + movl (%ecx), %eax + jmp .Lscls_epilogue + +.Lscls_retfloat: + flds (%ecx) + jmp .Lscls_epilogue + +.Lscls_retdouble: + fldl (%ecx) + jmp .Lscls_epilogue + +.Lscls_retldouble: + fldt (%ecx) + jmp .Lscls_epilogue + +.Lscls_retllong: + movl (%ecx), %eax + movl 4(%ecx), %edx + jmp .Lscls_epilogue + +.Lscls_retstruct1: + movsbl (%ecx), %eax + jmp .Lscls_epilogue + +.Lscls_retstruct2: + movswl (%ecx), %eax + jmp .Lscls_epilogue + +.Lscls_retstruct4: + movl (%ecx), %eax + jmp .Lscls_epilogue + +.Lscls_retstruct: + # Nothing to do! + +.Lscls_noretval: +.Lscls_epilogue: + movl %ebp, %esp + popl %ebp + ret +.ffi_closure_STDCALL_end: +.LFE5: + + .section .eh_frame,"w" +.Lframe1: +.LSCIE1: + .long .LECIE1-.LASCIE1 /* Length of Common Information Entry */ +.LASCIE1: + .long 0x0 /* CIE Identifier Tag */ + .byte 0x1 /* CIE Version */ +#ifdef __PIC__ + .ascii "zR\0" /* CIE Augmentation */ +#else + .ascii "\0" /* CIE Augmentation */ +#endif + .byte 0x1 /* .uleb128 0x1; CIE Code Alignment Factor */ + .byte 0x7c /* .sleb128 -4; CIE Data Alignment Factor */ + .byte 0x8 /* CIE RA Column */ +#ifdef __PIC__ + .byte 0x1 /* .uleb128 0x1; Augmentation size */ + .byte 0x1b /* FDE Encoding (pcrel sdata4) */ +#endif + .byte 0xc /* DW_CFA_def_cfa CFA = r4 + 4 = 4(%esp) */ + .byte 0x4 /* .uleb128 0x4 */ + .byte 0x4 /* .uleb128 0x4 */ + .byte 0x88 /* DW_CFA_offset, column 0x8 %eip at CFA + 1 * -4 */ + .byte 0x1 /* .uleb128 0x1 */ + .align 4 +.LECIE1: + +.LSFDE1: + .long .LEFDE1-.LASFDE1 /* FDE Length */ +.LASFDE1: + .long .LASFDE1-.Lframe1 /* FDE CIE offset */ +#if defined __PIC__ && defined HAVE_AS_X86_PCREL + .long .LFB1-. /* FDE initial location */ +#else + .long .LFB1 +#endif + .long .LFE1-.LFB1 /* FDE address range */ +#ifdef __PIC__ + .byte 0x0 /* .uleb128 0x0; Augmentation size */ +#endif + /* DW_CFA_xxx CFI instructions go here. */ + + .byte 0x4 /* DW_CFA_advance_loc4 */ + .long .LCFI0-.LFB1 + .byte 0xe /* DW_CFA_def_cfa_offset CFA = r4 + 8 = 8(%esp) */ + .byte 0x8 /* .uleb128 0x8 */ + .byte 0x85 /* DW_CFA_offset, column 0x5 %ebp at CFA + 2 * -4 */ + .byte 0x2 /* .uleb128 0x2 */ + + .byte 0x4 /* DW_CFA_advance_loc4 */ + .long .LCFI1-.LCFI0 + .byte 0xd /* DW_CFA_def_cfa_register CFA = r5 = %ebp */ + .byte 0x5 /* .uleb128 0x5 */ + + /* End of DW_CFA_xxx CFI instructions. */ + .align 4 +.LEFDE1: + + +.LSFDE2: + .long .LEFDE2-.LASFDE2 /* FDE Length */ +.LASFDE2: + .long .LASFDE2-.Lframe1 /* FDE CIE offset */ +#if defined __PIC__ && defined HAVE_AS_X86_PCREL + .long .LFB2-. /* FDE initial location */ +#else + .long .LFB2 +#endif + .long .LFE2-.LFB2 /* FDE address range */ +#ifdef __PIC__ + .byte 0x0 /* .uleb128 0x0; Augmentation size */ +#endif + /* DW_CFA_xxx CFI instructions go here. */ + + .byte 0x4 /* DW_CFA_advance_loc4 */ + .long .LCFI2-.LFB2 + .byte 0xe /* DW_CFA_def_cfa_offset CFA = r4 + 8 = 8(%esp) */ + .byte 0x8 /* .uleb128 0x8 */ + .byte 0x85 /* DW_CFA_offset, column 0x5 %ebp at CFA + 2 * -4 */ + .byte 0x2 /* .uleb128 0x2 */ + + .byte 0x4 /* DW_CFA_advance_loc4 */ + .long .LCFI3-.LCFI2 + .byte 0xd /* DW_CFA_def_cfa_register CFA = r5 = %ebp */ + .byte 0x5 /* .uleb128 0x5 */ + + /* End of DW_CFA_xxx CFI instructions. */ + .align 4 +.LEFDE2: + + +.LSFDE3: + .long .LEFDE3-.LASFDE3 /* FDE Length */ +.LASFDE3: + .long .LASFDE3-.Lframe1 /* FDE CIE offset */ +#if defined __PIC__ && defined HAVE_AS_X86_PCREL + .long .LFB3-. /* FDE initial location */ +#else + .long .LFB3 +#endif + .long .LFE3-.LFB3 /* FDE address range */ +#ifdef __PIC__ + .byte 0x0 /* .uleb128 0x0; Augmentation size */ #endif + /* DW_CFA_xxx CFI instructions go here. */ + + .byte 0x4 /* DW_CFA_advance_loc4 */ + .long .LCFI4-.LFB3 + .byte 0xe /* DW_CFA_def_cfa_offset CFA = r4 + 8 = 8(%esp) */ + .byte 0x8 /* .uleb128 0x8 */ + .byte 0x85 /* DW_CFA_offset, column 0x5 %ebp at CFA + 2 * -4 */ + .byte 0x2 /* .uleb128 0x2 */ + + .byte 0x4 /* DW_CFA_advance_loc4 */ + .long .LCFI5-.LCFI4 + .byte 0xd /* DW_CFA_def_cfa_register CFA = r5 = %ebp */ + .byte 0x5 /* .uleb128 0x5 */ + + /* End of DW_CFA_xxx CFI instructions. */ + .align 4 +.LEFDE3: + +#if !FFI_NO_RAW_API + +.LSFDE4: + .long .LEFDE4-.LASFDE4 /* FDE Length */ +.LASFDE4: + .long .LASFDE4-.Lframe1 /* FDE CIE offset */ +#if defined __PIC__ && defined HAVE_AS_X86_PCREL + .long .LFB4-. /* FDE initial location */ +#else + .long .LFB4 +#endif + .long .LFE4-.LFB4 /* FDE address range */ +#ifdef __PIC__ + .byte 0x0 /* .uleb128 0x0; Augmentation size */ +#endif + /* DW_CFA_xxx CFI instructions go here. */ + + .byte 0x4 /* DW_CFA_advance_loc4 */ + .long .LCFI6-.LFB4 + .byte 0xe /* DW_CFA_def_cfa_offset CFA = r4 + 8 = 8(%esp) */ + .byte 0x8 /* .uleb128 0x8 */ + .byte 0x85 /* DW_CFA_offset, column 0x5 %ebp at CFA + 2 * -4 */ + .byte 0x2 /* .uleb128 0x2 */ + + .byte 0x4 /* DW_CFA_advance_loc4 */ + .long .LCFI7-.LCFI6 + .byte 0xd /* DW_CFA_def_cfa_register CFA = r5 = %ebp */ + .byte 0x5 /* .uleb128 0x5 */ + + .byte 0x4 /* DW_CFA_advance_loc4 */ + .long .LCFI8-.LCFI7 + .byte 0x86 /* DW_CFA_offset, column 0x6 %esi at CFA + 3 * -4 */ + .byte 0x3 /* .uleb128 0x3 */ + + /* End of DW_CFA_xxx CFI instructions. */ + .align 4 +.LEFDE4: + +#endif /* !FFI_NO_RAW_API */ + +.LSFDE5: + .long .LEFDE5-.LASFDE5 /* FDE Length */ +.LASFDE5: + .long .LASFDE5-.Lframe1 /* FDE CIE offset */ +#if defined __PIC__ && defined HAVE_AS_X86_PCREL + .long .LFB5-. /* FDE initial location */ +#else + .long .LFB5 +#endif + .long .LFE5-.LFB5 /* FDE address range */ +#ifdef __PIC__ + .byte 0x0 /* .uleb128 0x0; Augmentation size */ +#endif + /* DW_CFA_xxx CFI instructions go here. */ + + .byte 0x4 /* DW_CFA_advance_loc4 */ + .long .LCFI9-.LFB5 + .byte 0xe /* DW_CFA_def_cfa_offset CFA = r4 + 8 = 8(%esp) */ + .byte 0x8 /* .uleb128 0x8 */ + .byte 0x85 /* DW_CFA_offset, column 0x5 %ebp at CFA + 2 * -4 */ + .byte 0x2 /* .uleb128 0x2 */ + + .byte 0x4 /* DW_CFA_advance_loc4 */ + .long .LCFI10-.LCFI9 + .byte 0xd /* DW_CFA_def_cfa_register CFA = r5 = %ebp */ + .byte 0x5 /* .uleb128 0x5 */ + + /* End of DW_CFA_xxx CFI instructions. */ + .align 4 +.LEFDE5: Modified: python/branches/py3k-jit/Modules/_cursesmodule.c ============================================================================== --- python/branches/py3k-jit/Modules/_cursesmodule.c (original) +++ python/branches/py3k-jit/Modules/_cursesmodule.c Tue Mar 16 21:40:29 2010 @@ -458,14 +458,14 @@ if (use_attr == TRUE) { attr_old = getattrs(self->win); - wattrset(self->win,attr); + (void)wattrset(self->win,attr); } if (use_xy == TRUE) rtn = mvwaddstr(self->win,y,x,str); else rtn = waddstr(self->win,str); if (use_attr == TRUE) - wattrset(self->win,attr_old); + (void)wattrset(self->win,attr_old); return PyCursesCheckERR(rtn, "addstr"); } @@ -507,14 +507,14 @@ if (use_attr == TRUE) { attr_old = getattrs(self->win); - wattrset(self->win,attr); + (void)wattrset(self->win,attr); } if (use_xy == TRUE) rtn = mvwaddnstr(self->win,y,x,str,n); else rtn = waddnstr(self->win,str,n); if (use_attr == TRUE) - wattrset(self->win,attr_old); + (void)wattrset(self->win,attr_old); return PyCursesCheckERR(rtn, "addnstr"); } @@ -1148,14 +1148,14 @@ if (use_attr == TRUE) { attr_old = getattrs(self->win); - wattrset(self->win,attr); + (void)wattrset(self->win,attr); } if (use_xy == TRUE) rtn = mvwinsstr(self->win,y,x,str); else rtn = winsstr(self->win,str); if (use_attr == TRUE) - wattrset(self->win,attr_old); + (void)wattrset(self->win,attr_old); return PyCursesCheckERR(rtn, "insstr"); } @@ -1197,14 +1197,14 @@ if (use_attr == TRUE) { attr_old = getattrs(self->win); - wattrset(self->win,attr); + (void)wattrset(self->win,attr); } if (use_xy == TRUE) rtn = mvwinsnstr(self->win,y,x,str,n); else rtn = winsnstr(self->win,str,n); if (use_attr == TRUE) - wattrset(self->win,attr_old); + (void)wattrset(self->win,attr_old); return PyCursesCheckERR(rtn, "insnstr"); } Modified: python/branches/py3k-jit/Modules/_elementtree.c ============================================================================== --- python/branches/py3k-jit/Modules/_elementtree.c (original) +++ python/branches/py3k-jit/Modules/_elementtree.c Tue Mar 16 21:40:29 2010 @@ -1,21 +1,15 @@ /* * ElementTree - * $Id: _elementtree.c 2657 2006-03-12 20:50:32Z fredrik $ + * $Id: _elementtree.c 3473 2009-01-11 22:53:55Z fredrik $ * * elementtree accelerator * * History: * 1999-06-20 fl created (as part of sgmlop) * 2001-05-29 fl effdom edition - * 2001-06-05 fl backported to unix; fixed bogus free in clear - * 2001-07-10 fl added findall helper * 2003-02-27 fl elementtree edition (alpha) * 2004-06-03 fl updates for elementtree 1.2 - * 2005-01-05 fl added universal name cache, Element/SubElement factories - * 2005-01-06 fl moved python helpers into C module; removed 1.5.2 support - * 2005-01-07 fl added 2.1 support; work around broken __copy__ in 2.3 - * 2005-01-08 fl added makeelement method; fixed path support - * 2005-01-10 fl optimized memory usage + * 2005-01-05 fl major optimization effort * 2005-01-11 fl first public release (cElementTree 0.8) * 2005-01-12 fl split element object into base and extras * 2005-01-13 fl use tagged pointers for tail/text (cElementTree 0.9) @@ -35,16 +29,23 @@ * 2005-12-16 fl added support for non-standard encodings * 2006-03-08 fl fixed a couple of potential null-refs and leaks * 2006-03-12 fl merge in 2.5 ssize_t changes + * 2007-08-25 fl call custom builder's close method from XMLParser + * 2007-08-31 fl added iter, extend from ET 1.3 + * 2007-09-01 fl fixed ParseError exception, setslice source type, etc + * 2007-09-03 fl fixed handling of negative insert indexes + * 2007-09-04 fl added itertext from ET 1.3 + * 2007-09-06 fl added position attribute to ParseError exception + * 2008-06-06 fl delay error reporting in iterparse (from Hrvoje Niksic) * - * Copyright (c) 1999-2006 by Secret Labs AB. All rights reserved. - * Copyright (c) 1999-2006 by Fredrik Lundh. + * Copyright (c) 1999-2009 by Secret Labs AB. All rights reserved. + * Copyright (c) 1999-2009 by Fredrik Lundh. * * info at pythonware.com * http://www.pythonware.com */ /* Licensed to PSF under a Contributor Agreement. */ -/* See http://www.python.org/2.4/license for licensing details. */ +/* See http://www.python.org/psf/license for licensing details. */ #include "Python.h" @@ -56,7 +57,7 @@ /* Leave defined to include the expat-based XMLParser type */ #define USE_EXPAT -/* Define to to all expat calls via pyexpat's embedded expat library */ +/* Define to do all expat calls via pyexpat's embedded expat library */ /* #define USE_PYEXPAT_CAPI */ /* An element can hold this many children without extra memory @@ -93,6 +94,25 @@ #define LOCAL(type) static type #endif +/* compatibility macros */ +#if (PY_VERSION_HEX < 0x02060000) +#define Py_REFCNT(ob) (((PyObject*)(ob))->ob_refcnt) +#define Py_TYPE(ob) (((PyObject*)(ob))->ob_type) +#endif + +#if (PY_VERSION_HEX < 0x02050000) +typedef int Py_ssize_t; +#define lenfunc inquiry +#endif + +#if (PY_VERSION_HEX < 0x02040000) +#define PyDict_CheckExact PyDict_Check + +#if !defined(Py_RETURN_NONE) +#define Py_RETURN_NONE return Py_INCREF(Py_None), Py_None +#endif +#endif + /* macros used to store 'join' flags in string object pointers. note that all use of text and tail as object pointers must be wrapped in JOIN_OBJ. see comments in the ElementObject definition for more @@ -102,9 +122,11 @@ #define JOIN_OBJ(p) ((PyObject*) ((Py_uintptr_t) (p) & ~1)) /* glue functions (see the init function for details) */ +static PyObject* elementtree_parseerror_obj; static PyObject* elementtree_copyelement_obj; static PyObject* elementtree_deepcopy_obj; -static PyObject* elementtree_getiterator_obj; +static PyObject* elementtree_iter_obj; +static PyObject* elementtree_itertext_obj; static PyObject* elementpath_obj; /* helpers */ @@ -188,23 +210,6 @@ return result; } -#if (PY_VERSION_HEX < 0x02020000) -LOCAL(int) -PyDict_Update(PyObject* dict, PyObject* other) -{ - /* PyDict_Update emulation for 2.1 and earlier */ - - PyObject* res; - - res = PyObject_CallMethod(dict, "update", "O", other); - if (!res) - return -1; - - Py_DECREF(res); - return 0; -} -#endif - /* -------------------------------------------------------------------- */ /* the element type */ @@ -309,7 +314,7 @@ if (element_new_extra(self, attrib) < 0) { PyObject_Del(self); return NULL; - } + } self->extra->length = 0; self->extra->allocated = STATIC_CHILDREN; @@ -407,6 +412,7 @@ PyObject* res = self->extra->attrib; if (res == Py_None) { + Py_DECREF(res); /* create missing dictionary */ res = PyDict_New(); if (!res) @@ -688,6 +694,8 @@ /* add object to memo dictionary (so deepcopy won't visit it again) */ id = PyLong_FromLong((Py_uintptr_t) self); + if (!id) + goto error; i = PyDict_SetItem(memo, id, (PyObject*) element); @@ -711,7 +719,8 @@ /* check if a tag contains an xpath character */ -#define PATHCHAR(ch) (ch == '/' || ch == '*' || ch == '[' || ch == '@') +#define PATHCHAR(ch) \ + (ch == '/' || ch == '*' || ch == '[' || ch == '@' || ch == '.') if (PyUnicode_Check(tag)) { Py_UNICODE *p = PyUnicode_AS_UNICODE(tag); @@ -742,17 +751,51 @@ } static PyObject* +element_extend(ElementObject* self, PyObject* args) +{ + 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, ""); + if (!seq) { + PyErr_Format( + PyExc_TypeError, + "expected sequence, not \"%.200s\"", Py_TYPE(seq_in)->tp_name + ); + return NULL; + } + + seqlen = PySequence_Size(seq); + for (i = 0; i < seqlen; i++) { + PyObject* element = PySequence_Fast_GET_ITEM(seq, i); + if (element_add_subelement(self, element) < 0) { + Py_DECREF(seq); + return NULL; + } + } + + Py_DECREF(seq); + + Py_RETURN_NONE; +} + +static PyObject* element_find(ElementObject* self, PyObject* args) { int i; PyObject* tag; - if (!PyArg_ParseTuple(args, "O:find", &tag)) + PyObject* namespaces = Py_None; + if (!PyArg_ParseTuple(args, "O|O:find", &tag, &namespaces)) return NULL; - if (checkpath(tag)) + if (checkpath(tag) || namespaces != Py_None) return PyObject_CallMethod( - elementpath_obj, "find", "OO", self, tag + elementpath_obj, "find", "OOO", self, tag, namespaces ); if (!self->extra) @@ -777,12 +820,13 @@ PyObject* tag; PyObject* default_value = Py_None; - if (!PyArg_ParseTuple(args, "O|O:findtext", &tag, &default_value)) + PyObject* namespaces = Py_None; + if (!PyArg_ParseTuple(args, "O|OO:findtext", &tag, &default_value, &namespaces)) return NULL; - if (checkpath(tag)) + if (checkpath(tag) || namespaces != Py_None) return PyObject_CallMethod( - elementpath_obj, "findtext", "OOO", self, tag, default_value + elementpath_obj, "findtext", "OOOO", self, tag, default_value, namespaces ); if (!self->extra) { @@ -813,12 +857,13 @@ PyObject* out; PyObject* tag; - if (!PyArg_ParseTuple(args, "O:findall", &tag)) + PyObject* namespaces = Py_None; + if (!PyArg_ParseTuple(args, "O|O:findall", &tag, &namespaces)) return NULL; - if (checkpath(tag)) + if (checkpath(tag) || namespaces != Py_None) return PyObject_CallMethod( - elementpath_obj, "findall", "OO", self, tag + elementpath_obj, "findall", "OOO", self, tag, namespaces ); out = PyList_New(0); @@ -843,6 +888,19 @@ } static PyObject* +element_iterfind(ElementObject* self, PyObject* args) +{ + PyObject* tag; + PyObject* namespaces = Py_None; + if (!PyArg_ParseTuple(args, "O|O:iterfind", &tag, &namespaces)) + return NULL; + + return PyObject_CallMethod( + elementpath_obj, "iterfind", "OOO", self, tag, namespaces + ); +} + +static PyObject* element_get(ElementObject* self, PyObject* args) { PyObject* value; @@ -870,6 +928,8 @@ int i; PyObject* list; + /* FIXME: report as deprecated? */ + if (!PyArg_ParseTuple(args, ":getchildren")) return NULL; @@ -890,18 +950,18 @@ } static PyObject* -element_getiterator(ElementObject* self, PyObject* args) +element_iter(ElementObject* self, PyObject* args) { PyObject* result; PyObject* tag = Py_None; - if (!PyArg_ParseTuple(args, "|O:getiterator", &tag)) + if (!PyArg_ParseTuple(args, "|O:iter", &tag)) return NULL; - if (!elementtree_getiterator_obj) { + if (!elementtree_iter_obj) { PyErr_SetString( PyExc_RuntimeError, - "getiterator helper not found" + "iter helper not found" ); return NULL; } @@ -913,61 +973,58 @@ Py_INCREF(self); PyTuple_SET_ITEM(args, 0, (PyObject*) self); Py_INCREF(tag); PyTuple_SET_ITEM(args, 1, (PyObject*) tag); - result = PyObject_CallObject(elementtree_getiterator_obj, args); + result = PyObject_CallObject(elementtree_iter_obj, args); Py_DECREF(args); return result; } + static PyObject* -element_getitem(PyObject* self_, Py_ssize_t index) +element_itertext(ElementObject* self, PyObject* args) { - ElementObject* self = (ElementObject*) self_; + PyObject* result; + + if (!PyArg_ParseTuple(args, ":itertext")) + return NULL; - if (!self->extra || index < 0 || index >= self->extra->length) { + if (!elementtree_itertext_obj) { PyErr_SetString( - PyExc_IndexError, - "child index out of range" + PyExc_RuntimeError, + "itertext helper not found" ); return NULL; } - Py_INCREF(self->extra->children[index]); - return self->extra->children[index]; + args = PyTuple_New(1); + if (!args) + return NULL; + + Py_INCREF(self); PyTuple_SET_ITEM(args, 0, (PyObject*) self); + + result = PyObject_CallObject(elementtree_itertext_obj, args); + + Py_DECREF(args); + + return result; } static PyObject* -element_getslice(PyObject* self_, Py_ssize_t start, Py_ssize_t end) +element_getitem(PyObject* self_, Py_ssize_t index) { ElementObject* self = (ElementObject*) self_; - Py_ssize_t i; - PyObject* list; - - if (!self->extra) - return PyList_New(0); - - /* standard clamping */ - if (start < 0) - start = 0; - if (end < 0) - end = 0; - if (end > self->extra->length) - end = self->extra->length; - if (start > end) - start = end; - list = PyList_New(end - start); - if (!list) + if (!self->extra || index < 0 || index >= self->extra->length) { + PyErr_SetString( + PyExc_IndexError, + "child index out of range" + ); return NULL; - - for (i = start; i < end; i++) { - PyObject* item = self->extra->children[i]; - Py_INCREF(item); - PyList_SET_ITEM(list, i - start, item); } - return list; + Py_INCREF(self->extra->children[index]); + return self->extra->children[index]; } static PyObject* @@ -984,8 +1041,11 @@ if (!self->extra) element_new_extra(self, NULL); - if (index < 0) - index = 0; + if (index < 0) { + index += self->extra->length; + if (index < 0) + index = 0; + } if (index > self->extra->length) index = self->extra->length; @@ -1156,77 +1216,6 @@ } static int -element_setslice(PyObject* self_, Py_ssize_t start, Py_ssize_t end, PyObject* item) -{ - ElementObject* self = (ElementObject*) self_; - Py_ssize_t i, new, old; - PyObject* recycle = NULL; - - if (!self->extra) - element_new_extra(self, NULL); - - /* standard clamping */ - if (start < 0) - start = 0; - if (end < 0) - end = 0; - if (end > self->extra->length) - end = self->extra->length; - if (start > end) - start = end; - - old = end - start; - - if (item == NULL) - new = 0; - else if (PyList_CheckExact(item)) { - new = PyList_GET_SIZE(item); - } else { - /* FIXME: support arbitrary sequences? */ - PyErr_Format( - PyExc_TypeError, - "expected list, not \"%.200s\"", Py_TYPE(item)->tp_name - ); - return -1; - } - - if (old > 0) { - /* to avoid recursive calls to this method (via decref), move - old items to the recycle bin here, and get rid of them when - we're done modifying the element */ - recycle = PyList_New(old); - for (i = 0; i < old; i++) - PyList_SET_ITEM(recycle, i, self->extra->children[i + start]); - } - - if (new < old) { - /* delete slice */ - for (i = end; i < self->extra->length; i++) - self->extra->children[i + new - old] = self->extra->children[i]; - } else if (new > old) { - /* insert slice */ - if (element_resize(self, new - old) < 0) - return -1; - for (i = self->extra->length-1; i >= end; i--) - self->extra->children[i + new - old] = self->extra->children[i]; - } - - /* replace the slice */ - for (i = 0; i < new; i++) { - PyObject* element = PyList_GET_ITEM(item, i); - Py_INCREF(element); - self->extra->children[i + start] = element; - } - - self->extra->length += new - old; - - /* discard the recycle bin, and everything in it */ - Py_XDECREF(recycle); - - return 0; -} - -static int element_setitem(PyObject* self_, Py_ssize_t index, PyObject* item) { ElementObject* self = (ElementObject*) self_; @@ -1256,6 +1245,190 @@ return 0; } +static PyObject* +element_subscr(PyObject* self_, PyObject* item) +{ + ElementObject* self = (ElementObject*) self_; + +#if (PY_VERSION_HEX < 0x02050000) + if (PyInt_Check(item) || PyLong_Check(item)) { + long i = PyInt_AsLong(item); +#else + if (PyIndex_Check(item)) { + Py_ssize_t i = PyNumber_AsSsize_t(item, PyExc_IndexError); +#endif + + if (i == -1 && PyErr_Occurred()) { + return NULL; + } + if (i < 0 && self->extra) + i += self->extra->length; + return element_getitem(self_, i); + } + else if (PySlice_Check(item)) { + Py_ssize_t start, stop, step, slicelen, cur, i; + PyObject* list; + + if (!self->extra) + return PyList_New(0); + + if (PySlice_GetIndicesEx((PySliceObject *)item, + self->extra->length, + &start, &stop, &step, &slicelen) < 0) { + return NULL; + } + + if (slicelen <= 0) + return PyList_New(0); + else { + list = PyList_New(slicelen); + if (!list) + return NULL; + + for (cur = start, i = 0; i < slicelen; + cur += step, i++) { + PyObject* item = self->extra->children[cur]; + Py_INCREF(item); + PyList_SET_ITEM(list, i, item); + } + + return list; + } + } + else { + PyErr_SetString(PyExc_TypeError, + "element indices must be integers"); + return NULL; + } +} + +static int +element_ass_subscr(PyObject* self_, PyObject* item, PyObject* value) +{ + ElementObject* self = (ElementObject*) self_; + +#if (PY_VERSION_HEX < 0x02050000) + if (PyInt_Check(item) || PyLong_Check(item)) { + long i = PyInt_AsLong(item); +#else + if (PyIndex_Check(item)) { + Py_ssize_t i = PyNumber_AsSsize_t(item, PyExc_IndexError); +#endif + + if (i == -1 && PyErr_Occurred()) { + return -1; + } + if (i < 0 && self->extra) + i += self->extra->length; + return element_setitem(self_, i, value); + } + else if (PySlice_Check(item)) { + Py_ssize_t start, stop, step, slicelen, newlen, cur, i; + + PyObject* recycle = NULL; + PyObject* seq = NULL; + + if (!self->extra) + element_new_extra(self, NULL); + + if (PySlice_GetIndicesEx((PySliceObject *)item, + self->extra->length, + &start, &stop, &step, &slicelen) < 0) { + return -1; + } + + if (value == NULL) + newlen = 0; + else { + seq = PySequence_Fast(value, ""); + if (!seq) { + PyErr_Format( + PyExc_TypeError, + "expected sequence, not \"%.200s\"", Py_TYPE(value)->tp_name + ); + return -1; + } + newlen = PySequence_Size(seq); + } + + if (step != 1 && newlen != slicelen) + { + PyErr_Format(PyExc_ValueError, +#if (PY_VERSION_HEX < 0x02050000) + "attempt to assign sequence of size %d " + "to extended slice of size %d", +#else + "attempt to assign sequence of size %zd " + "to extended slice of size %zd", +#endif + newlen, slicelen + ); + return -1; + } + + + /* Resize before creating the recycle bin, to prevent refleaks. */ + if (newlen > slicelen) { + if (element_resize(self, newlen - slicelen) < 0) { + if (seq) { + Py_DECREF(seq); + } + return -1; + } + } + + if (slicelen > 0) { + /* to avoid recursive calls to this method (via decref), move + old items to the recycle bin here, and get rid of them when + we're done modifying the element */ + recycle = PyList_New(slicelen); + if (!recycle) { + if (seq) { + Py_DECREF(seq); + } + return -1; + } + for (cur = start, i = 0; i < slicelen; + cur += step, i++) + PyList_SET_ITEM(recycle, i, self->extra->children[cur]); + } + + if (newlen < slicelen) { + /* delete slice */ + for (i = stop; i < self->extra->length; i++) + self->extra->children[i + newlen - slicelen] = self->extra->children[i]; + } else if (newlen > slicelen) { + /* insert slice */ + for (i = self->extra->length-1; i >= stop; i--) + self->extra->children[i + newlen - slicelen] = self->extra->children[i]; + } + + /* replace the slice */ + for (cur = start, i = 0; i < newlen; + cur += step, i++) { + PyObject* element = PySequence_Fast_GET_ITEM(seq, i); + Py_INCREF(element); + self->extra->children[cur] = element; + } + + self->extra->length += newlen - slicelen; + + if (seq) { + Py_DECREF(seq); + } + + /* discard the recycle bin, and everything in it */ + Py_XDECREF(recycle); + + return 0; + } + else { + PyErr_SetString(PyExc_TypeError, + "element indices must be integers"); + return -1; + } +} + static PyMethodDef element_methods[] = { {"clear", (PyCFunction) element_clear, METH_VARARGS}, @@ -1268,10 +1441,15 @@ {"findall", (PyCFunction) element_findall, METH_VARARGS}, {"append", (PyCFunction) element_append, METH_VARARGS}, + {"extend", (PyCFunction) element_extend, METH_VARARGS}, {"insert", (PyCFunction) element_insert, METH_VARARGS}, {"remove", (PyCFunction) element_remove, METH_VARARGS}, - {"getiterator", (PyCFunction) element_getiterator, METH_VARARGS}, + {"iter", (PyCFunction) element_iter, METH_VARARGS}, + {"itertext", (PyCFunction) element_itertext, METH_VARARGS}, + {"iterfind", (PyCFunction) element_iterfind, METH_VARARGS}, + + {"getiterator", (PyCFunction) element_iter, METH_VARARGS}, {"getchildren", (PyCFunction) element_getchildren, METH_VARARGS}, {"items", (PyCFunction) element_items, METH_VARARGS}, @@ -1297,30 +1475,46 @@ {NULL, NULL} }; -static PyObject* +static PyObject* element_getattro(ElementObject* self, PyObject* nameobj) { PyObject* res; char *name = ""; if (PyUnicode_Check(nameobj)) - name = _PyUnicode_AsString(nameobj); + name = _PyUnicode_AsString(nameobj); - if (strcmp(name, "tag") == 0) - res = self->tag; - else if (strcmp(name, "text") == 0) + /* 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); - else if (strcmp(name, "tail") == 0) { + Py_INCREF(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) element_new_extra(self, NULL); - res = element_get_attrib(self); - } else { - return PyObject_GenericGetAttr((PyObject*) self, nameobj); + res = element_get_attrib(self); } - Py_XINCREF(res); + if (!res) + return NULL; + + Py_INCREF(res); return res; } @@ -1366,9 +1560,15 @@ 0, /* sq_concat */ 0, /* sq_repeat */ element_getitem, - element_getslice, + 0, element_setitem, - element_setslice, + 0, +}; + +static PyMappingMethods element_as_mapping = { + (lenfunc) element_length, + (binaryfunc) element_subscr, + (objobjargproc) element_ass_subscr, }; static PyTypeObject Element_Type = { @@ -1383,7 +1583,7 @@ (reprfunc)element_repr, /* tp_repr */ 0, /* tp_as_number */ &element_as_sequence, /* tp_as_sequence */ - 0, /* tp_as_mapping */ + &element_as_mapping, /* tp_as_mapping */ 0, /* tp_hash */ 0, /* tp_call */ 0, /* tp_str */ @@ -1537,7 +1737,7 @@ } else { if (self->root) { PyErr_SetString( - PyExc_SyntaxError, + elementtree_parseerror_obj, "multiple elements on top level" ); goto error; @@ -1678,7 +1878,7 @@ LOCAL(void) treebuilder_handle_namespace(TreeBuilderObject* self, int start, - const char* prefix, const char *uri) + PyObject *prefix, PyObject *uri) { PyObject* res; PyObject* action; @@ -1691,8 +1891,7 @@ if (!self->start_ns_event_obj) return; action = self->start_ns_event_obj; - /* FIXME: prefix and uri use utf-8 encoding! */ - parcel = Py_BuildValue("ss", (prefix) ? prefix : "", uri); + parcel = Py_BuildValue("OO", prefix, uri); if (!parcel) return; Py_INCREF(action); @@ -1852,6 +2051,7 @@ PyObject* names; PyObject* handle_xml; + PyObject* handle_start; PyObject* handle_data; PyObject* handle_end; @@ -1859,6 +2059,8 @@ PyObject* handle_comment; PyObject* handle_pi; + PyObject* handle_close; + } XMLParserObject; static PyTypeObject XMLParser_Type; @@ -1930,6 +2132,36 @@ return value; } +static void +expat_set_error(const char* message, int line, int column) +{ + PyObject *error; + PyObject *position; + char buffer[256]; + + sprintf(buffer, "%s: line %d, column %d", message, line, column); + + error = PyObject_CallFunction(elementtree_parseerror_obj, "s", buffer); + if (!error) + return; + + /* add position attribute */ + position = Py_BuildValue("(ii)", line, column); + if (!position) { + Py_DECREF(error); + return; + } + if (PyObject_SetAttrString(error, "position", position) == -1) { + Py_DECREF(error); + Py_DECREF(position); + return; + } + Py_DECREF(position); + + PyErr_SetObject(elementtree_parseerror_obj, error); + Py_DECREF(error); +} + /* -------------------------------------------------------------------- */ /* handlers */ @@ -1960,10 +2192,12 @@ else res = NULL; Py_XDECREF(res); - } else { - PyErr_Format( - PyExc_SyntaxError, "undefined entity &%s;: line %ld, column %ld", - PyBytes_AS_STRING(key), + } else if (!PyErr_Occurred()) { + /* Report the first error, not the last */ + char message[128]; + sprintf(message, "undefined entity &%.100s;", _PyUnicode_AsString(key)); + expat_set_error( + message, EXPAT(GetErrorLineNumber)(self->parser), EXPAT(GetErrorColumnNumber)(self->parser) ); @@ -2018,9 +2252,15 @@ /* shortcut */ res = treebuilder_handle_start((TreeBuilderObject*) self->target, tag, attrib); - else if (self->handle_start) + else if (self->handle_start) { + if (attrib == Py_None) { + Py_DECREF(attrib); + attrib = PyDict_New(); + if (!attrib) + return; + } res = PyObject_CallFunction(self->handle_start, "OO", tag, attrib); - else + } else res = NULL; Py_DECREF(tag); @@ -2080,9 +2320,28 @@ expat_start_ns_handler(XMLParserObject* self, const XML_Char* prefix, const XML_Char *uri) { + PyObject* sprefix = NULL; + PyObject* suri = NULL; + + suri = PyUnicode_DecodeUTF8(uri, strlen(uri), "strict"); + if (!suri) + return; + + if (prefix) + sprefix = PyUnicode_DecodeUTF8(prefix, strlen(prefix), "strict"); + else + sprefix = PyUnicode_FromString(""); + if (!sprefix) { + Py_DECREF(suri); + return; + } + treebuilder_handle_namespace( - (TreeBuilderObject*) self->target, 1, prefix, uri + (TreeBuilderObject*) self->target, 1, sprefix, suri ); + + Py_DECREF(sprefix); + Py_DECREF(suri); } static void @@ -2158,10 +2417,10 @@ p = PyUnicode_AS_UNICODE(u); for (i = 0; i < 256; i++) { - if (p[i] != Py_UNICODE_REPLACEMENT_CHARACTER) - info->map[i] = p[i]; + if (p[i] != Py_UNICODE_REPLACEMENT_CHARACTER) + info->map[i] = p[i]; else - info->map[i] = -1; + info->map[i] = -1; } Py_DECREF(u); @@ -2245,6 +2504,7 @@ 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"); PyErr_Clear(); @@ -2288,6 +2548,7 @@ { EXPAT(ParserFree)(self->parser); + Py_XDECREF(self->handle_close); Py_XDECREF(self->handle_pi); Py_XDECREF(self->handle_comment); Py_XDECREF(self->handle_end); @@ -2318,8 +2579,7 @@ return NULL; if (!ok) { - PyErr_Format( - PyExc_SyntaxError, "%s: line %ld, column %ld", + expat_set_error( EXPAT(ErrorString)(EXPAT(GetErrorCode)(self->parser)), EXPAT(GetErrorLineNumber)(self->parser), EXPAT(GetErrorColumnNumber)(self->parser) @@ -2340,13 +2600,17 @@ return NULL; res = expat_parse(self, "", 0, 1); + if (!res) + return NULL; - if (res && TreeBuilder_CheckExact(self->target)) { + if (TreeBuilder_CheckExact(self->target)) { Py_DECREF(res); return treebuilder_done((TreeBuilderObject*) self->target); - } - - return res; + } if (self->handle_close) { + Py_DECREF(res); + return PyObject_CallFunction(self->handle_close, ""); + } else + return res; } static PyObject* @@ -2458,7 +2722,7 @@ if (event_set == Py_None) { /* default is "end" only */ - target->end_event_obj = PyBytes_FromString("end"); + target->end_event_obj = PyUnicode_FromString("end"); Py_RETURN_NONE; } @@ -2468,9 +2732,13 @@ for (i = 0; i < PyTuple_GET_SIZE(event_set); i++) { PyObject* item = PyTuple_GET_ITEM(event_set, i); char* event; - if (!PyBytes_Check(item)) + if (PyUnicode_Check(item)) { + event = _PyUnicode_AsString(item); + } else if (PyBytes_Check(item)) + event = PyBytes_AS_STRING(item); + else { goto error; - event = PyBytes_AS_STRING(item); + } if (strcmp(event, "start") == 0) { Py_INCREF(item); target->start_event_obj = item; @@ -2530,19 +2798,19 @@ char *name = ""; if (PyUnicode_Check(nameobj)) - name = _PyUnicode_AsString(nameobj); + name = _PyUnicode_AsString(nameobj); PyErr_Clear(); if (strcmp(name, "entity") == 0) - res = self->entity; + res = self->entity; else if (strcmp(name, "target") == 0) - res = self->target; + res = self->target; else if (strcmp(name, "version") == 0) { char buffer[100]; sprintf(buffer, "Expat %d.%d.%d", XML_MAJOR_VERSION, XML_MINOR_VERSION, XML_MICRO_VERSION); - return PyBytes_FromString(buffer); + return PyUnicode_DecodeUTF8(buffer, strlen(buffer), "strict"); } else { return PyObject_GenericGetAttr((PyObject*) self, nameobj); } @@ -2617,9 +2885,6 @@ PyObject* m; PyObject* g; char* bootstrap; -#if defined(USE_PYEXPAT_CAPI) - struct PyExpat_CAPI* capi; -#endif /* Initialize object types */ if (PyType_Ready(&TreeBuilder_Type) < 0) @@ -2651,10 +2916,6 @@ bootstrap = ( -#if (PY_VERSION_HEX >= 0x02020000 && PY_VERSION_HEX < 0x02030000) - "from __future__ import generators\n" /* enable yield under 2.2 */ -#endif - "from copy import copy, deepcopy\n" "try:\n" @@ -2672,11 +2933,14 @@ " def copyelement(elem):\n" " return elem\n" - "def Comment(text=None):\n" /* public */ + "class CommentProxy:\n" + " def __call__(self, text=None):\n" " element = cElementTree.Element(ET.Comment)\n" " element.text = text\n" " return element\n" - "cElementTree.Comment = Comment\n" + " def __eq__(self, other):\n" + " return ET.Comment == other\n" + "cElementTree.Comment = CommentProxy()\n" "class ElementTree(ET.ElementTree):\n" /* public */ " def parse(self, source, parser=None):\n" @@ -2695,23 +2959,23 @@ " return self._root\n" "cElementTree.ElementTree = ElementTree\n" - "def getiterator(node, tag=None):\n" /* helper */ + "def iter(node, tag=None):\n" /* helper */ " if tag == '*':\n" " tag = None\n" -#if (PY_VERSION_HEX < 0x02020000) - " nodes = []\n" /* 2.1 doesn't have yield */ - " if tag is None or node.tag == tag:\n" - " nodes.append(node)\n" - " for node in node:\n" - " nodes.extend(getiterator(node, tag))\n" - " return nodes\n" -#else " if tag is None or node.tag == tag:\n" " yield node\n" " for node in node:\n" - " for node in getiterator(node, tag):\n" + " for node in iter(node, tag):\n" " yield node\n" -#endif + + "def itertext(node):\n" /* helper */ + " if node.text:\n" + " yield node.text\n" + " for e in node:\n" + " for s in e.itertext():\n" + " yield s\n" + " if e.tail:\n" + " yield e.tail\n" "def parse(source, parser=None):\n" /* public */ " tree = ElementTree()\n" @@ -2719,48 +2983,52 @@ " return tree\n" "cElementTree.parse = parse\n" -#if (PY_VERSION_HEX < 0x02020000) - "if hasattr(ET, 'iterparse'):\n" - " cElementTree.iterparse = ET.iterparse\n" /* delegate on 2.1 */ -#else - "class iterparse(object):\n" + "class iterparse:\n" " root = None\n" " def __init__(self, file, events=None):\n" " if not hasattr(file, 'read'):\n" " file = open(file, 'rb')\n" " self._file = file\n" - " self._events = events\n" - " def __iter__(self):\n" - " events = []\n" + " self._events = []\n" + " self._index = 0\n" + " self.root = self._root = None\n" " b = cElementTree.TreeBuilder()\n" - " p = cElementTree.XMLParser(b)\n" - " p._setevents(events, self._events)\n" + " self._parser = cElementTree.XMLParser(b)\n" + " self._parser._setevents(self._events, events)\n" + " def __next__(self):\n" " while 1:\n" - " data = self._file.read(16384)\n" - " if not data:\n" - " break\n" - " p.feed(data)\n" - " for event in events:\n" - " yield event\n" - " del events[:]\n" - " root = p.close()\n" - " for event in events:\n" - " yield event\n" - " self.root = root\n" + " try:\n" + " item = self._events[self._index]\n" + " except IndexError:\n" + " if self._parser is None:\n" + " self.root = self._root\n" + " raise StopIteration\n" + " # load event buffer\n" + " del self._events[:]\n" + " self._index = 0\n" + " data = self._file.read(16384)\n" + " if data:\n" + " self._parser.feed(data)\n" + " else:\n" + " self._root = self._parser.close()\n" + " self._parser = None\n" + " else:\n" + " self._index = self._index + 1\n" + " return item\n" + " def __iter__(self):\n" + " return self\n" "cElementTree.iterparse = iterparse\n" -#endif - "def PI(target, text=None):\n" /* public */ - " element = cElementTree.Element(ET.ProcessingInstruction)\n" + "class PIProxy:\n" + " def __call__(self, target, text=None):\n" + " element = cElementTree.Element(ET.PI)\n" " element.text = target\n" " if text:\n" " element.text = element.text + ' ' + text\n" " return element\n" - - " elem = cElementTree.Element(ET.PI)\n" - " elem.text = text\n" - " return elem\n" - "cElementTree.PI = cElementTree.ProcessingInstruction = PI\n" + " def __eq__(self, other):\n" + " return ET.PI == other\n" + "cElementTree.PI = cElementTree.ProcessingInstruction = PIProxy()\n" "def XML(text):\n" /* public */ " parser = cElementTree.XMLParser()\n" @@ -2771,25 +3039,34 @@ "def XMLID(text):\n" /* public */ " tree = XML(text)\n" " ids = {}\n" - " for elem in tree.getiterator():\n" + " for elem in tree.iter():\n" " id = elem.get('id')\n" " if id:\n" " ids[id] = elem\n" " return tree, ids\n" "cElementTree.XMLID = XMLID\n" + "try:\n" + " register_namespace = ET.register_namespace\n" + "except AttributeError:\n" + " def register_namespace(prefix, uri):\n" + " ET._namespace_map[uri] = prefix\n" + "cElementTree.register_namespace = register_namespace\n" + "cElementTree.dump = ET.dump\n" "cElementTree.ElementPath = ElementPath = ET.ElementPath\n" "cElementTree.iselement = ET.iselement\n" "cElementTree.QName = ET.QName\n" "cElementTree.tostring = ET.tostring\n" + "cElementTree.fromstringlist = ET.fromstringlist\n" + "cElementTree.tostringlist = ET.tostringlist\n" "cElementTree.VERSION = '" VERSION "'\n" "cElementTree.__version__ = '" VERSION "'\n" - "cElementTree.XMLParserError = SyntaxError\n" ); - PyRun_String(bootstrap, Py_file_input, g, NULL); + if (!PyRun_String(bootstrap, Py_file_input, g, NULL)) + return NULL; elementpath_obj = PyDict_GetItemString(g, "ElementPath"); @@ -2804,22 +3081,30 @@ } } else PyErr_Clear(); + elementtree_deepcopy_obj = PyDict_GetItemString(g, "deepcopy"); - elementtree_getiterator_obj = PyDict_GetItemString(g, "getiterator"); + elementtree_iter_obj = PyDict_GetItemString(g, "iter"); + elementtree_itertext_obj = PyDict_GetItemString(g, "itertext"); #if defined(USE_PYEXPAT_CAPI) /* link against pyexpat, if possible */ - capi = PyCapsule_Import(PyExpat_CAPSULE_NAME, 0); - if (capi && - strcmp(capi->magic, PyExpat_CAPI_MAGIC) == 0 && - capi->size <= sizeof(*expat_capi) && - capi->MAJOR_VERSION == XML_MAJOR_VERSION && - capi->MINOR_VERSION == XML_MINOR_VERSION && - capi->MICRO_VERSION == XML_MICRO_VERSION) - expat_capi = capi; - else - expat_capi = NULL; + expat_capi = PyCapsule_Import(PyExpat_CAPSULE_NAME, 0); + if (expat_capi) { + /* check that it's usable */ + if (strcmp(expat_capi->magic, PyExpat_CAPI_MAGIC) != 0 || + 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) + expat_capi = NULL; + } #endif - return m; + elementtree_parseerror_obj = PyErr_NewException( + "cElementTree.ParseError", PyExc_SyntaxError, NULL + ); + Py_INCREF(elementtree_parseerror_obj); + PyModule_AddObject(m, "ParseError", elementtree_parseerror_obj); + + return m; } Modified: python/branches/py3k-jit/Modules/_hashopenssl.c ============================================================================== --- python/branches/py3k-jit/Modules/_hashopenssl.c (original) +++ python/branches/py3k-jit/Modules/_hashopenssl.c Tue Mar 16 21:40:29 2010 @@ -294,10 +294,7 @@ static PyObject * EVP_repr(EVPobject *self) { - char buf[100]; - PyOS_snprintf(buf, sizeof(buf), "<%s HASH object @ %p>", - _PyUnicode_AsString(self->name), self); - return PyUnicode_FromString(buf); + return PyUnicode_FromFormat("<%U HASH object @ %p>", self->name, self); } #if HASH_OBJ_CONSTRUCTOR Modified: python/branches/py3k-jit/Modules/_sqlite/connection.c ============================================================================== --- python/branches/py3k-jit/Modules/_sqlite/connection.c (original) +++ python/branches/py3k-jit/Modules/_sqlite/connection.c Tue Mar 16 21:40:29 2010 @@ -1087,7 +1087,7 @@ statement = _PyUnicode_AsStringAndSize(begin_statement, &size); if (!statement) { - Py_DECREF(statement); + Py_DECREF(begin_statement); return -1; } self->begin_statement = PyMem_Malloc(size + 2); @@ -1125,6 +1125,12 @@ return NULL; } + statement->db = NULL; + statement->st = NULL; + statement->sql = NULL; + statement->in_use = 0; + statement->in_weakreflist = NULL; + rc = pysqlite_statement_create(statement, self, sql); if (rc != SQLITE_OK) { Modified: python/branches/py3k-jit/Modules/_testcapimodule.c ============================================================================== --- python/branches/py3k-jit/Modules/_testcapimodule.c (original) +++ python/branches/py3k-jit/Modules/_testcapimodule.c Tue Mar 16 21:40:29 2010 @@ -2084,6 +2084,7 @@ unsigned int uint_member; long long_member; unsigned long ulong_member; + Py_ssize_t pyssizet_member; float float_member; double double_member; #ifdef HAVE_LONG_LONG @@ -2107,6 +2108,7 @@ {"T_UINT", T_UINT, offsetof(test_structmembers, structmembers.uint_member), 0, NULL}, {"T_LONG", T_LONG, offsetof(test_structmembers, structmembers.long_member), 0, NULL}, {"T_ULONG", T_ULONG, offsetof(test_structmembers, structmembers.ulong_member), 0, NULL}, + {"T_PYSSIZET", T_PYSSIZET, offsetof(test_structmembers, structmembers.pyssizet_member), 0, NULL}, {"T_FLOAT", T_FLOAT, offsetof(test_structmembers, structmembers.float_member), 0, NULL}, {"T_DOUBLE", T_DOUBLE, offsetof(test_structmembers, structmembers.double_member), 0, NULL}, #ifdef HAVE_LONG_LONG @@ -2122,13 +2124,13 @@ { static char *keywords[] = { "T_BOOL", "T_BYTE", "T_UBYTE", "T_SHORT", "T_USHORT", - "T_INT", "T_UINT", "T_LONG", "T_ULONG", + "T_INT", "T_UINT", "T_LONG", "T_ULONG", "T_PYSSIZET", "T_FLOAT", "T_DOUBLE", -#ifdef HAVE_LONG_LONG +#ifdef HAVE_LONG_LONG "T_LONGLONG", "T_ULONGLONG", #endif NULL}; - static char *fmt = "|bbBhHiIlkfd" + static char *fmt = "|bbBhHiIlknfd" #ifdef HAVE_LONG_LONG "LK" #endif @@ -2145,9 +2147,10 @@ &ob->structmembers.short_member, &ob->structmembers.ushort_member, &ob->structmembers.int_member, - &ob->structmembers.uint_member, + &ob->structmembers.uint_member, &ob->structmembers.long_member, &ob->structmembers.ulong_member, + &ob->structmembers.pyssizet_member, &ob->structmembers.float_member, &ob->structmembers.double_member #ifdef HAVE_LONG_LONG Modified: python/branches/py3k-jit/Modules/getpath.c ============================================================================== --- python/branches/py3k-jit/Modules/getpath.c (original) +++ python/branches/py3k-jit/Modules/getpath.c Tue Mar 16 21:40:29 2010 @@ -522,7 +522,7 @@ } else progpath[0] = '\0'; - if (progpath[0] != SEP) + if (progpath[0] != SEP && progpath[0] != '\0') absolutize(progpath); wcsncpy(argv0_path, progpath, MAXPATHLEN); argv0_path[MAXPATHLEN] = '\0'; Modified: python/branches/py3k-jit/Modules/main.c ============================================================================== --- python/branches/py3k-jit/Modules/main.c (original) +++ python/branches/py3k-jit/Modules/main.c Tue Mar 16 21:40:29 2010 @@ -595,10 +595,16 @@ else p_cfilename = ""; } - sts = PyRun_AnyFileExFlags( - fp, - p_cfilename, - filename != NULL, &cf) != 0; + /* call pending calls like signal handlers (SIGINT) */ + if (Py_MakePendingCalls() == -1) { + PyErr_Print(); + sts = 1; + } else { + sts = PyRun_AnyFileExFlags( + fp, + p_cfilename, + filename != NULL, &cf) != 0; + } Py_XDECREF(filenameObj); } Modified: python/branches/py3k-jit/Modules/posixmodule.c ============================================================================== --- python/branches/py3k-jit/Modules/posixmodule.c (original) +++ python/branches/py3k-jit/Modules/posixmodule.c Tue Mar 16 21:40:29 2010 @@ -303,23 +303,6 @@ #define WAIT_STATUS_INT(s) (s) #endif /* UNION_WAIT */ -/* Issue #1983: pid_t can be longer than a C long on some systems */ -#if !defined(SIZEOF_PID_T) || SIZEOF_PID_T == SIZEOF_INT -#define PARSE_PID "i" -#define PyLong_FromPid PyLong_FromLong -#define PyLong_AsPid PyLong_AsLong -#elif SIZEOF_PID_T == SIZEOF_LONG -#define PARSE_PID "l" -#define PyLong_FromPid PyLong_FromLong -#define PyLong_AsPid PyLong_AsLong -#elif defined(SIZEOF_LONG_LONG) && SIZEOF_PID_T == SIZEOF_LONG_LONG -#define PARSE_PID "L" -#define PyLong_FromPid PyLong_FromLongLong -#define PyLong_AsPid PyLong_AsLongLong -#else -#error "sizeof(pid_t) is neither sizeof(int), sizeof(long) or sizeof(long long)" -#endif /* SIZEOF_PID_T */ - /* Don't use the "_r" form if we don't need it (also, won't have a prototype for it, at least on Solaris -- maybe others as well?). */ #if defined(HAVE_CTERMID_R) && defined(WITH_THREAD) @@ -4029,7 +4012,7 @@ posix_getpgid(PyObject *self, PyObject *args) { pid_t pid, pgid; - if (!PyArg_ParseTuple(args, PARSE_PID ":getpgid", &pid)) + if (!PyArg_ParseTuple(args, _Py_PARSE_PID ":getpgid", &pid)) return NULL; pgid = getpgid(pid); if (pgid < 0) @@ -4141,7 +4124,7 @@ { pid_t pid; int sig; - if (!PyArg_ParseTuple(args, PARSE_PID "i:kill", &pid, &sig)) + if (!PyArg_ParseTuple(args, _Py_PARSE_PID "i:kill", &pid, &sig)) return NULL; #if defined(PYOS_OS2) && !defined(PYCC_GCC) if (sig == XCPT_SIGNAL_INTR || sig == XCPT_SIGNAL_BREAK) { @@ -4179,7 +4162,7 @@ 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, PARSE_PID "i:killpg", &pgid, &sig)) + if (!PyArg_ParseTuple(args, _Py_PARSE_PID "i:killpg", &pgid, &sig)) return NULL; if (killpg(pgid, sig) == -1) return posix_error(); @@ -4536,7 +4519,7 @@ WAIT_TYPE status; WAIT_STATUS_INT(status) = 0; - if (!PyArg_ParseTuple(args, PARSE_PID "i:wait4", &pid, &options)) + if (!PyArg_ParseTuple(args, _Py_PARSE_PID "i:wait4", &pid, &options)) return NULL; Py_BEGIN_ALLOW_THREADS @@ -4560,7 +4543,7 @@ WAIT_TYPE status; WAIT_STATUS_INT(status) = 0; - if (!PyArg_ParseTuple(args, PARSE_PID "i:waitpid", &pid, &options)) + if (!PyArg_ParseTuple(args, _Py_PARSE_PID "i:waitpid", &pid, &options)) return NULL; Py_BEGIN_ALLOW_THREADS pid = waitpid(pid, &status, options); @@ -4584,7 +4567,7 @@ Py_intptr_t pid; int status, options; - if (!PyArg_ParseTuple(args, PARSE_PID "i:waitpid", &pid, &options)) + if (!PyArg_ParseTuple(args, _Py_PARSE_PID "i:waitpid", &pid, &options)) return NULL; Py_BEGIN_ALLOW_THREADS pid = _cwait(&status, pid, options); @@ -4800,7 +4783,7 @@ { pid_t pid; int sid; - if (!PyArg_ParseTuple(args, PARSE_PID ":getsid", &pid)) + if (!PyArg_ParseTuple(args, _Py_PARSE_PID ":getsid", &pid)) return NULL; sid = getsid(pid); if (sid < 0) @@ -4835,7 +4818,7 @@ { pid_t pid; int pgrp; - if (!PyArg_ParseTuple(args, PARSE_PID "i:setpgid", &pid, &pgrp)) + if (!PyArg_ParseTuple(args, _Py_PARSE_PID "i:setpgid", &pid, &pgrp)) return NULL; if (setpgid(pid, pgrp) < 0) return posix_error(); @@ -4875,7 +4858,7 @@ { int fd; pid_t pgid; - if (!PyArg_ParseTuple(args, "i" PARSE_PID ":tcsetpgrp", &fd, &pgid)) + if (!PyArg_ParseTuple(args, "i" _Py_PARSE_PID ":tcsetpgrp", &fd, &pgid)) return NULL; if (tcsetpgrp(fd, pgid) < 0) return posix_error(); Modified: python/branches/py3k-jit/Modules/selectmodule.c ============================================================================== --- python/branches/py3k-jit/Modules/selectmodule.c (original) +++ python/branches/py3k-jit/Modules/selectmodule.c Tue Mar 16 21:40:29 2010 @@ -1241,6 +1241,7 @@ #undef KQ_OFF static PyObject * + kqueue_event_repr(kqueue_event_Object *s) { char buf[1024]; @@ -1526,19 +1527,6 @@ return NULL; } - if (ch != NULL && ch != Py_None) { - it = PyObject_GetIter(ch); - if (it == NULL) { - PyErr_SetString(PyExc_TypeError, - "changelist is not iterable"); - return NULL; - } - nchanges = PyObject_Size(ch); - if (nchanges < 0) { - return NULL; - } - } - if (otimeout == Py_None || otimeout == NULL) { ptimeoutspec = NULL; } @@ -1574,11 +1562,22 @@ return NULL; } - if (nchanges) { + if (ch != NULL && ch != Py_None) { + it = PyObject_GetIter(ch); + if (it == NULL) { + PyErr_SetString(PyExc_TypeError, + "changelist is not iterable"); + return NULL; + } + nchanges = PyObject_Size(ch); + if (nchanges < 0) { + goto error; + } + chl = PyMem_New(struct kevent, nchanges); if (chl == NULL) { PyErr_NoMemory(); - return NULL; + goto error; } i = 0; while ((ei = PyIter_Next(it)) != NULL) { @@ -1601,7 +1600,7 @@ evl = PyMem_New(struct kevent, nevents); if (evl == NULL) { PyErr_NoMemory(); - return NULL; + goto error; } } Modified: python/branches/py3k-jit/Modules/zipimport.c ============================================================================== --- python/branches/py3k-jit/Modules/zipimport.c (original) +++ python/branches/py3k-jit/Modules/zipimport.c Tue Mar 16 21:40:29 2010 @@ -321,15 +321,12 @@ /* add __path__ to the module *before* the code gets executed */ PyObject *pkgpath, *fullpath; - char *prefix = _PyUnicode_AsString(self->prefix); char *subname = get_subname(fullname); int err; - fullpath = PyUnicode_FromFormat("%s%c%s%s", - _PyUnicode_AsString(self->archive), - SEP, - prefix ? prefix : "", - subname); + fullpath = PyUnicode_FromFormat("%U%c%U%s", + self->archive, SEP, + self->prefix, subname); if (fullpath == NULL) goto error; Modified: python/branches/py3k-jit/Objects/abstract.c ============================================================================== --- python/branches/py3k-jit/Objects/abstract.c (original) +++ python/branches/py3k-jit/Objects/abstract.c Tue Mar 16 21:40:29 2010 @@ -2722,3 +2722,66 @@ PyErr_Clear(); return result; } + + +/* + * Flatten a sequence of bytes() objects into a C array of + * NULL terminated string pointers with a NULL char* terminating the array. + * (ie: an argv or env list) + * + * Memory allocated for the returned list is allocated using malloc() and MUST + * be freed by the caller using a free() loop or _Py_FreeCharPArray(). + */ +char *const * +_PySequence_BytesToCharpArray(PyObject* self) +{ + char **array; + Py_ssize_t i, argc; + PyObject *item = NULL; + + argc = PySequence_Size(self); + if (argc == -1) + return NULL; + + array = malloc((argc + 1) * sizeof(char *)); + if (array == NULL) { + PyErr_NoMemory(); + return NULL; + } + for (i = 0; i < argc; ++i) { + char *data; + item = PySequence_GetItem(self, i); + data = PyBytes_AsString(item); + if (data == NULL) { + /* NULL terminate before freeing. */ + array[i] = NULL; + goto fail; + } + array[i] = strdup(data); + if (!array[i]) { + PyErr_NoMemory(); + goto fail; + } + Py_DECREF(item); + } + array[argc] = NULL; + + return array; + +fail: + Py_XDECREF(item); + _Py_FreeCharPArray(array); + return NULL; +} + + +/* Free's a NULL terminated char** array of C strings. */ +void +_Py_FreeCharPArray(char *const array[]) +{ + Py_ssize_t i; + for (i = 0; array[i] != NULL; ++i) { + free(array[i]); + } + free((void*)array); +} Modified: python/branches/py3k-jit/Objects/complexobject.c ============================================================================== --- python/branches/py3k-jit/Objects/complexobject.c (original) +++ python/branches/py3k-jit/Objects/complexobject.c Tue Mar 16 21:40:29 2010 @@ -625,10 +625,8 @@ TO_COMPLEX(w, j); if (op != Py_EQ && op != Py_NE) { - /* XXX Should eventually return NotImplemented */ - PyErr_SetString(PyExc_TypeError, - "no ordering relation is defined for complex numbers"); - return NULL; + Py_INCREF(Py_NotImplemented); + return Py_NotImplemented; } if ((i.real == j.real && i.imag == j.imag) == (op == Py_EQ)) Modified: python/branches/py3k-jit/Objects/funcobject.c ============================================================================== --- python/branches/py3k-jit/Objects/funcobject.c (original) +++ python/branches/py3k-jit/Objects/funcobject.c Tue Mar 16 21:40:29 2010 @@ -295,9 +295,9 @@ PyTuple_GET_SIZE(op->func_closure)); if (nclosure != nfree) { PyErr_Format(PyExc_ValueError, - "%s() requires a code object with %zd free vars," + "%U() requires a code object with %zd free vars," " not %zd", - _PyUnicode_AsString(op->func_name), + op->func_name, nclosure, nfree); return -1; } Modified: python/branches/py3k-jit/Objects/longobject.c ============================================================================== --- python/branches/py3k-jit/Objects/longobject.c (original) +++ python/branches/py3k-jit/Objects/longobject.c Tue Mar 16 21:40:29 2010 @@ -435,10 +435,15 @@ Py_ssize_t i; int sign; - if (vv == NULL || !PyLong_Check(vv)) { + if (vv == NULL) { PyErr_BadInternalCall(); return -1; } + if (!PyLong_Check(vv)) { + PyErr_SetString(PyExc_TypeError, "an integer is required"); + return -1; + } + v = (PyLongObject *)vv; i = Py_SIZE(v); switch (i) { @@ -485,10 +490,15 @@ unsigned long x, prev; Py_ssize_t i; - if (vv == NULL || !PyLong_Check(vv)) { + if (vv == NULL) { PyErr_BadInternalCall(); - return (unsigned long) -1; + return (unsigned long)-1; + } + if (!PyLong_Check(vv)) { + PyErr_SetString(PyExc_TypeError, "an integer is required"); + return (unsigned long)-1; } + v = (PyLongObject *)vv; i = Py_SIZE(v); x = 0; @@ -523,10 +533,15 @@ size_t x, prev; Py_ssize_t i; - if (vv == NULL || !PyLong_Check(vv)) { + if (vv == NULL) { PyErr_BadInternalCall(); - return (unsigned long) -1; + return (size_t) -1; + } + if (!PyLong_Check(vv)) { + PyErr_SetString(PyExc_TypeError, "an integer is required"); + return (size_t)-1; } + v = (PyLongObject *)vv; i = Py_SIZE(v); x = 0; Modified: python/branches/py3k-jit/Objects/object.c ============================================================================== --- python/branches/py3k-jit/Objects/object.c (original) +++ python/branches/py3k-jit/Objects/object.c Tue Mar 16 21:40:29 2010 @@ -799,8 +799,12 @@ } if (tp->tp_getattro != NULL) return (*tp->tp_getattro)(v, name); - if (tp->tp_getattr != NULL) - return (*tp->tp_getattr)(v, _PyUnicode_AsString(name)); + if (tp->tp_getattr != NULL) { + char *name_str = _PyUnicode_AsString(name); + if (name_str == NULL) + return NULL; + return (*tp->tp_getattr)(v, name_str); + } PyErr_Format(PyExc_AttributeError, "'%.50s' object has no attribute '%U'", tp->tp_name, name); @@ -840,7 +844,10 @@ return err; } if (tp->tp_setattr != NULL) { - err = (*tp->tp_setattr)(v, _PyUnicode_AsString(name), value); + char *name_str = _PyUnicode_AsString(name); + if (name_str == NULL) + return -1; + err = (*tp->tp_setattr)(v, name_str, value); Py_DECREF(name); return err; } @@ -1019,8 +1026,8 @@ } PyErr_Format(PyExc_AttributeError, - "'%.50s' object has no attribute '%.400s'", - tp->tp_name, _PyUnicode_AsString(name)); + "'%.50s' object has no attribute '%U'", + tp->tp_name, name); done: Py_DECREF(name); return res; Modified: python/branches/py3k-jit/Objects/setobject.c ============================================================================== --- python/branches/py3k-jit/Objects/setobject.c (original) +++ python/branches/py3k-jit/Objects/setobject.c Tue Mar 16 21:40:29 2010 @@ -2360,11 +2360,25 @@ PyObject *elem=NULL, *dup=NULL, *t, *f, *dup2, *x; PyObject *ob = (PyObject *)so; long hash; + PyObject *str; - /* Verify preconditions and exercise type/size checks */ + /* Verify preconditions */ assert(PyAnySet_Check(ob)); assert(PyAnySet_CheckExact(ob)); assert(!PyFrozenSet_CheckExact(ob)); + + /* so.clear(); so |= set("abc"); */ + str = PyUnicode_FromString("abc"); + if (str == NULL) + return NULL; + set_clear_internal(so); + if (set_update_internal(so, str) == -1) { + Py_DECREF(str); + return NULL; + } + Py_DECREF(str); + + /* Exercise type/size checks */ assert(PySet_Size(ob) == 3); assert(PySet_GET_SIZE(ob) == 3); Modified: python/branches/py3k-jit/Objects/typeobject.c ============================================================================== --- python/branches/py3k-jit/Objects/typeobject.c (original) +++ python/branches/py3k-jit/Objects/typeobject.c Tue Mar 16 21:40:29 2010 @@ -1295,10 +1295,15 @@ for (j = i + 1; j < n; j++) { if (PyList_GET_ITEM(list, j) == o) { o = class_name(o); - PyErr_Format(PyExc_TypeError, - "duplicate base class %.400s", - o ? _PyUnicode_AsString(o) : "?"); - Py_XDECREF(o); + if (o != NULL) { + PyErr_Format(PyExc_TypeError, + "duplicate base class %U", + o); + Py_DECREF(o); + } else { + PyErr_SetString(PyExc_TypeError, + "duplicate base class"); + } return -1; } } Modified: python/branches/py3k-jit/Parser/tokenizer.c ============================================================================== --- python/branches/py3k-jit/Parser/tokenizer.c (original) +++ python/branches/py3k-jit/Parser/tokenizer.c Tue Mar 16 21:40:29 2010 @@ -1242,21 +1242,28 @@ } #ifdef PGEN -#define verify_identifier(s,e) 1 +#define verify_identifier(tok) 1 #else /* Verify that the identifier follows PEP 3131. */ static int -verify_identifier(char *start, char *end) +verify_identifier(struct tok_state *tok) { PyObject *s; int result; - s = PyUnicode_DecodeUTF8(start, end-start, NULL); + s = PyUnicode_DecodeUTF8(tok->start, tok->cur - tok->start, NULL); if (s == NULL) { - PyErr_Clear(); + if (PyErr_ExceptionMatches(PyExc_UnicodeDecodeError)) { + PyErr_Clear(); + tok->done = E_IDENTIFIER; + } else { + tok->done = E_ERROR; + } return 0; } result = PyUnicode_IsIdentifier(s); Py_DECREF(s); + if (result == 0) + tok->done = E_IDENTIFIER; return result; } #endif @@ -1405,7 +1412,7 @@ } tok_backup(tok, c); if (nonascii && - !verify_identifier(tok->start, tok->cur)) { + !verify_identifier(tok)) { tok->done = E_IDENTIFIER; return ERRORTOKEN; } Modified: python/branches/py3k-jit/Python/ceval.c ============================================================================== --- python/branches/py3k-jit/Python/ceval.c (original) +++ python/branches/py3k-jit/Python/ceval.c Tue Mar 16 21:40:29 2010 @@ -3989,10 +3989,10 @@ if (PyDict_GetItem(kwdict, key) != NULL) { PyErr_Format(PyExc_TypeError, "%.200s%s got multiple values " - "for keyword argument '%.200s'", + "for keyword argument '%U'", PyEval_GetFuncName(func), PyEval_GetFuncDesc(func), - _PyUnicode_AsString(key)); + key); Py_DECREF(key); Py_DECREF(value); Py_DECREF(kwdict); Modified: python/branches/py3k-jit/Python/import.c ============================================================================== --- python/branches/py3k-jit/Python/import.c (original) +++ python/branches/py3k-jit/Python/import.c Tue Mar 16 21:40:29 2010 @@ -2691,8 +2691,8 @@ parent = PyDict_GetItem(modules, parentname); if (parent == NULL) { PyErr_Format(PyExc_ImportError, - "reload(): parent %.200s not in sys.modules", - _PyUnicode_AsString(parentname)); + "reload(): parent %U not in sys.modules", + parentname); Py_DECREF(parentname); imp_modules_reloading_clear(); return NULL; @@ -2774,8 +2774,6 @@ } else { /* No globals -- use standard builtins, and fake globals */ - PyErr_Clear(); - builtins = PyImport_ImportModuleLevel("builtins", NULL, NULL, NULL, 0); if (builtins == NULL) Modified: python/branches/py3k-jit/Python/pythonrun.c ============================================================================== --- python/branches/py3k-jit/Python/pythonrun.c (original) +++ python/branches/py3k-jit/Python/pythonrun.c Tue Mar 16 21:40:29 2010 @@ -296,13 +296,14 @@ if (initstdio() < 0) Py_FatalError( "Py_Initialize: can't initialize sys standard streams"); - if (!Py_NoSiteFlag) - initsite(); /* Module site */ /* auto-thread-state API, if available */ #ifdef WITH_THREAD _PyGILState_Init(interp, tstate); #endif /* WITH_THREAD */ + + if (!Py_NoSiteFlag) + initsite(); /* Module site */ } void @@ -711,22 +712,12 @@ static void initsite(void) { - PyObject *m, *f; + PyObject *m; m = PyImport_ImportModule("site"); if (m == NULL) { - f = PySys_GetObject("stderr"); - if (f == NULL || f == Py_None) - return; - if (Py_VerboseFlag) { - PyFile_WriteString( - "'import site' failed; traceback:\n", f); - PyErr_Print(); - } - else { - PyFile_WriteString( - "'import site' failed; use -v for traceback\n", f); - PyErr_Clear(); - } + PyErr_Print(); + Py_Finalize(); + exit(1); } else { Py_DECREF(m); @@ -1907,6 +1898,8 @@ char *msg = NULL; errtype = PyExc_SyntaxError; switch (err->error) { + case E_ERROR: + return; case E_SYNTAX: errtype = PyExc_IndentationError; if (err->expected == INDENT) @@ -2137,6 +2130,27 @@ } +/* Restore signals that the interpreter has called SIG_IGN on to SIG_DFL. + * + * All of the code in this function must only use async-signal-safe functions, + * listed at `man 7 signal` or + * http://www.opengroup.org/onlinepubs/009695399/functions/xsh_chap02_04.html. + */ +void +_Py_RestoreSignals(void) +{ +#ifdef SIGPIPE + PyOS_setsig(SIGPIPE, SIG_DFL); +#endif +#ifdef SIGXFZ + PyOS_setsig(SIGXFZ, SIG_DFL); +#endif +#ifdef SIGXFSZ + PyOS_setsig(SIGXFSZ, SIG_DFL); +#endif +} + + /* * The file descriptor fd is considered ``interactive'' if either * a) isatty(fd) is TRUE, or @@ -2230,6 +2244,11 @@ #endif } +/* + * All of the code in this function must only use async-signal-safe functions, + * listed at `man 7 signal` or + * http://www.opengroup.org/onlinepubs/009695399/functions/xsh_chap02_04.html. + */ PyOS_sighandler_t PyOS_setsig(int sig, PyOS_sighandler_t handler) { Modified: python/branches/py3k-jit/Python/structmember.c ============================================================================== --- python/branches/py3k-jit/Python/structmember.c (original) +++ python/branches/py3k-jit/Python/structmember.c Tue Mar 16 21:40:29 2010 @@ -187,12 +187,13 @@ } case T_UINT:{ unsigned long ulong_val = PyLong_AsUnsignedLong(v); - if ((ulong_val == (unsigned int)-1) && PyErr_Occurred()) { + if ((ulong_val == (unsigned long)-1) && PyErr_Occurred()) { /* XXX: For compatibility, accept negative int values as well. */ PyErr_Clear(); ulong_val = PyLong_AsLong(v); - if ((ulong_val == (unsigned int)-1) && PyErr_Occurred()) + if ((ulong_val == (unsigned long)-1) && + PyErr_Occurred()) return -1; *(unsigned int *)addr = (unsigned int)ulong_val; WARN("Writing negative value into unsigned field"); @@ -216,7 +217,7 @@ as well. */ PyErr_Clear(); *(unsigned long*)addr = PyLong_AsLong(v); - if ((*(unsigned long*)addr == (unsigned int)-1) + if ((*(unsigned long*)addr == (unsigned long)-1) && PyErr_Occurred()) return -1; WARN("Writing negative value into unsigned field"); Modified: python/branches/py3k-jit/Tools/ccbench/ccbench.py ============================================================================== --- python/branches/py3k-jit/Tools/ccbench/ccbench.py (original) +++ python/branches/py3k-jit/Tools/ccbench/ccbench.py Tue Mar 16 21:40:29 2010 @@ -36,6 +36,9 @@ LATENCY_PING_INTERVAL = 0.1 LATENCY_DURATION = 2.0 +BANDWIDTH_PACKET_SIZE = 1024 +BANDWIDTH_DURATION = 2.0 + def task_pidigits(): """Pi calculation (Python)""" @@ -149,6 +152,7 @@ throughput_tasks.append(task_compress_zlib) latency_tasks = throughput_tasks +bandwidth_tasks = [task_pidigits] class TimedLoop: @@ -394,6 +398,133 @@ print() +BW_END = "END" + +def bandwidth_client(addr, packet_size, duration): + sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) + sock.bind(("127.0.0.1", 0)) + local_addr = sock.getsockname() + _time = time.time + _sleep = time.sleep + def _send_chunk(msg): + _sendto(sock, ("%r#%s\n" % (local_addr, msg)).rjust(packet_size), addr) + # We give the parent some time to be ready. + _sleep(1.0) + try: + start_time = _time() + end_time = start_time + duration * 2.0 + i = 0 + while _time() < end_time: + _send_chunk(str(i)) + s = _recv(sock, packet_size) + assert len(s) == packet_size + i += 1 + _send_chunk(BW_END) + finally: + sock.close() + +def run_bandwidth_client(**kwargs): + cmd_line = [sys.executable, '-E', os.path.abspath(__file__)] + cmd_line.extend(['--bwclient', repr(kwargs)]) + return subprocess.Popen(cmd_line) #, stdin=subprocess.PIPE, + #stdout=subprocess.PIPE, stderr=subprocess.STDOUT) + +def run_bandwidth_test(func, args, nthreads): + # Create a listening socket to receive the packets. We use UDP which should + # be painlessly cross-platform. + sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) + sock.bind(("127.0.0.1", 0)) + addr = sock.getsockname() + + duration = BANDWIDTH_DURATION + packet_size = BANDWIDTH_PACKET_SIZE + + results = [] + threads = [] + end_event = [] + start_cond = threading.Condition() + started = False + if nthreads > 0: + # Warm up + func(*args) + + results = [] + loop = TimedLoop(func, args) + ready = [] + ready_cond = threading.Condition() + + def run(): + with ready_cond: + ready.append(None) + ready_cond.notify() + with start_cond: + while not started: + start_cond.wait() + loop(start_time, duration * 1.5, end_event, do_yield=False) + + for i in range(nthreads): + threads.append(threading.Thread(target=run)) + for t in threads: + t.setDaemon(True) + t.start() + # Wait for threads to be ready + with ready_cond: + while len(ready) < nthreads: + ready_cond.wait() + + # Run the client and wait for the first packet to arrive before + # unblocking the background threads. + process = run_bandwidth_client(addr=addr, + packet_size=packet_size, + duration=duration) + _time = time.time + # This will also wait for the parent to be ready + s = _recv(sock, packet_size) + remote_addr = eval(s.partition('#')[0]) + + with start_cond: + start_time = _time() + started = True + start_cond.notify(nthreads) + + n = 0 + first_time = None + while not end_event and BW_END not in s: + _sendto(sock, s, remote_addr) + s = _recv(sock, packet_size) + if first_time is None: + first_time = _time() + n += 1 + end_time = _time() + + end_event.append(None) + for t in threads: + t.join() + process.kill() + + return (n - 1) / (end_time - first_time) + +def run_bandwidth_tests(max_threads): + for task in bandwidth_tasks: + print("Background CPU task:", task.__doc__) + print() + func, args = task() + nthreads = 0 + baseline_speed = None + while nthreads <= max_threads: + results = run_bandwidth_test(func, args, nthreads) + speed = results + #speed = len(results) * 1.0 / results[-1][0] + print("CPU threads=%d: %.1f" % (nthreads, speed), end="") + if baseline_speed is None: + print(" packets/s.") + baseline_speed = speed + else: + print(" ( %d %%)" % (speed / baseline_speed * 100)) + nthreads += 1 + print() + + def main(): usage = "usage: %prog [-h|--help] [options]" parser = OptionParser(usage=usage) @@ -403,6 +534,9 @@ parser.add_option("-l", "--latency", action="store_true", dest="latency", default=False, help="run latency tests") + parser.add_option("-b", "--bandwidth", + action="store_true", dest="bandwidth", default=False, + help="run I/O bandwidth tests") parser.add_option("-i", "--interval", action="store", type="int", dest="check_interval", default=None, help="sys.setcheckinterval() value") @@ -413,10 +547,13 @@ action="store", type="int", dest="nthreads", default=4, help="max number of threads in tests") - # Hidden option to run the pinging client + # Hidden option to run the pinging and bandwidth clients parser.add_option("", "--latclient", action="store", dest="latclient", default=None, help=SUPPRESS_HELP) + parser.add_option("", "--bwclient", + action="store", dest="bwclient", default=None, + help=SUPPRESS_HELP) options, args = parser.parse_args() if args: @@ -427,8 +564,13 @@ latency_client(**kwargs) return - if not options.throughput and not options.latency: - options.throughput = options.latency = True + if options.bwclient: + kwargs = eval(options.bwclient) + bandwidth_client(**kwargs) + return + + if not options.throughput and not options.latency and not options.bandwidth: + options.throughput = options.latency = options.bandwidth = True if options.check_interval: sys.setcheckinterval(options.check_interval) if options.switch_interval: @@ -458,5 +600,10 @@ print() run_latency_tests(options.nthreads) + if options.bandwidth: + print("--- I/O bandwidth ---") + print() + run_bandwidth_tests(options.nthreads) + if __name__ == "__main__": main() Modified: python/branches/py3k-jit/Tools/faqwiz/faqw.py ============================================================================== --- python/branches/py3k-jit/Tools/faqwiz/faqw.py (original) +++ python/branches/py3k-jit/Tools/faqwiz/faqw.py Tue Mar 16 21:40:29 2010 @@ -1,4 +1,4 @@ -#! /usr/local/bin/python +#!/usr/bin/env python3 """FAQ wizard bootstrap.""" Modified: python/branches/py3k-jit/Tools/freeze/freeze.py ============================================================================== --- python/branches/py3k-jit/Tools/freeze/freeze.py (original) +++ python/branches/py3k-jit/Tools/freeze/freeze.py Tue Mar 16 21:40:29 2010 @@ -1,4 +1,4 @@ -#! /usr/bin/env python +#! /usr/bin/env python3 """Freeze a Python script into a binary. Modified: python/branches/py3k-jit/Tools/i18n/makelocalealias.py ============================================================================== --- python/branches/py3k-jit/Tools/i18n/makelocalealias.py (original) +++ python/branches/py3k-jit/Tools/i18n/makelocalealias.py Tue Mar 16 21:40:29 2010 @@ -1,4 +1,4 @@ -#!/usr/bin/env python +#!/usr/bin/env python3 """ Convert the X11 locale.alias file into a mapping dictionary suitable for locale.py. Modified: python/branches/py3k-jit/Tools/i18n/msgfmt.py ============================================================================== --- python/branches/py3k-jit/Tools/i18n/msgfmt.py (original) +++ python/branches/py3k-jit/Tools/i18n/msgfmt.py Tue Mar 16 21:40:29 2010 @@ -1,4 +1,4 @@ -#! /usr/bin/env python +#! /usr/bin/env python3 # -*- coding: iso-8859-1 -*- # Written by Martin v. L?wis Modified: python/branches/py3k-jit/Tools/i18n/pygettext.py ============================================================================== --- python/branches/py3k-jit/Tools/i18n/pygettext.py (original) +++ python/branches/py3k-jit/Tools/i18n/pygettext.py Tue Mar 16 21:40:29 2010 @@ -1,4 +1,4 @@ -#! /usr/bin/env python +#! /usr/bin/env python3 # -*- coding: iso-8859-1 -*- # Originally written by Barry Warsaw # Modified: python/branches/py3k-jit/Tools/modulator/Tkextra.py ============================================================================== --- python/branches/py3k-jit/Tools/modulator/Tkextra.py (original) +++ python/branches/py3k-jit/Tools/modulator/Tkextra.py Tue Mar 16 21:40:29 2010 @@ -1,4 +1,4 @@ -#! /usr/bin/env python +#! /usr/bin/env python3 # A Python function that generates dialog boxes with a text message, # optional bitmap, and any number of buttons. Modified: python/branches/py3k-jit/Tools/modulator/modulator.py ============================================================================== --- python/branches/py3k-jit/Tools/modulator/modulator.py (original) +++ python/branches/py3k-jit/Tools/modulator/modulator.py Tue Mar 16 21:40:29 2010 @@ -1,4 +1,4 @@ -#! /usr/bin/env python +#! /usr/bin/env python3 # # Modulator - Generate skeleton modules. # Deleted: python/branches/py3k-jit/Tools/msi/merge.py ============================================================================== --- python/branches/py3k-jit/Tools/msi/merge.py Tue Mar 16 21:40:29 2010 +++ (empty file) @@ -1,84 +0,0 @@ -import msilib,os,win32com,tempfile,sys -PCBUILD="PCBuild" -certname = None -from config import * - -Win64 = "amd64" in PCBUILD - -mod_dir = os.path.join(os.environ["ProgramFiles"], "Common Files", "Merge Modules") -msi = None -if len(sys.argv)==2: - msi = sys.argv[1] -if Win64: - modules = ["Microsoft_VC90_CRT_x86_x64.msm", "policy_9_0_Microsoft_VC90_CRT_x86_x64.msm"] - if not msi: msi = "python-%s.amd64.msi" % full_current_version -else: - modules = ["Microsoft_VC90_CRT_x86.msm","policy_9_0_Microsoft_VC90_CRT_x86.msm"] - if not msi: msi = "python-%s.msi" % full_current_version -for i, n in enumerate(modules): - modules[i] = os.path.join(mod_dir, n) - -def merge(msi, feature, rootdir, modules): - cab_and_filecount = [] - # Step 1: Merge databases, extract cabfiles - m = msilib.MakeMerge2() - m.OpenLog("merge.log") - print "Opened Log" - m.OpenDatabase(msi) - print "Opened DB" - for module in modules: - print module - m.OpenModule(module,0) - print "Opened Module",module - m.Merge(feature, rootdir) - print "Errors:" - for e in m.Errors: - print e.Type, e.ModuleTable, e.DatabaseTable - print " Modkeys:", - for s in e.ModuleKeys: print s, - print - print " DBKeys:", - for s in e.DatabaseKeys: print s, - print - cabname = tempfile.mktemp(suffix=".cab") - m.ExtractCAB(cabname) - cab_and_filecount.append((cabname, len(m.ModuleFiles))) - m.CloseModule() - m.CloseDatabase(True) - m.CloseLog() - - # Step 2: Add CAB files - i = msilib.MakeInstaller() - db = i.OpenDatabase(msi, win32com.client.constants.msiOpenDatabaseModeTransact) - - v = db.OpenView("SELECT LastSequence FROM Media") - v.Execute(None) - maxmedia = -1 - while 1: - r = v.Fetch() - if not r: break - seq = r.IntegerData(1) - if seq > maxmedia: - maxmedia = seq - print "Start of Media", maxmedia - - for cabname, count in cab_and_filecount: - stream = "merged%d" % maxmedia - msilib.add_data(db, "Media", - [(maxmedia+1, maxmedia+count, None, "#"+stream, None, None)]) - msilib.add_stream(db, stream, cabname) - os.unlink(cabname) - maxmedia += count - # The merge module sets ALLUSERS to 1 in the property table. - # This is undesired; delete that - v = db.OpenView("DELETE FROM Property WHERE Property='ALLUSERS'") - v.Execute(None) - v.Close() - db.Commit() - -merge(msi, "SharedCRT", "TARGETDIR", modules) - -# certname (from config.py) should be (a substring of) -# the certificate subject, e.g. "Python Software Foundation" -if certname: - os.system('signtool sign /n "%s" /t http://timestamp.verisign.com/scripts/timestamp.dll %s' % (certname, msi)) Modified: python/branches/py3k-jit/Tools/msi/msi.py ============================================================================== --- python/branches/py3k-jit/Tools/msi/msi.py (original) +++ python/branches/py3k-jit/Tools/msi/msi.py Tue Mar 16 21:40:29 2010 @@ -7,6 +7,7 @@ from win32com.client import constants from distutils.spawn import find_executable from uuids import product_codes +import tempfile # Settings can be overridden in config.py below # 0 for official python.org releases @@ -28,6 +29,8 @@ PCBUILD="PCbuild" # msvcrt version MSVCR = "90" +# Name of certificate in default store to sign MSI with +certname = None try: from config import * @@ -113,6 +116,7 @@ "27":"{4fe21c76-1760-437b-a2f2-99909130a175}", "30":"{6953bc3b-6768-4291-8410-7914ce6e2ca8}", "31":"{4afcba0b-13e4-47c3-bebe-477428b46913}", + "32":"{3ff95315-1096-4d31-bd86-601d5438ad5e}", } [major+minor] # Compute the name that Sphinx gives to the docfile @@ -219,7 +223,8 @@ # schema represents the installer 2.0 database schema. # sequence is the set of standard sequences # (ui/execute, admin/advt/install) - db = msilib.init_database("python-%s%s.msi" % (full_current_version, msilib.arch_ext), + msiname = "python-%s%s.msi" % (full_current_version, msilib.arch_ext) + db = msilib.init_database(msiname, schema, ProductName="Python "+full_current_version+productsuffix, ProductCode=product_code, ProductVersion=current_version, @@ -242,7 +247,7 @@ ("ProductLine", "Python%s%s" % (major, minor)), ]) db.Commit() - return db + return db, msiname def remove_old_versions(db): "Fill the upgrade table." @@ -403,7 +408,7 @@ ("VerdanaRed9", "Verdana", 9, 255, 0), ]) - compileargs = r'-Wi "[TARGETDIR]Lib\compileall.py" -f -x bad_coding|badsyntax|site-packages|py2_ "[TARGETDIR]Lib"' + compileargs = r'-Wi "[TARGETDIR]Lib\compileall.py" -f -x "bad_coding|badsyntax|site-packages|py2_|lib2to3\\tests" "[TARGETDIR]Lib"' lib2to3args = r'-c "import lib2to3.pygram, lib2to3.patcomp;lib2to3.patcomp.PatternCompiler()"' # See "CustomAction Table" add_data(db, "CustomAction", [ @@ -1006,8 +1011,6 @@ lib.add_file("audiotest.au") lib.add_file("cfgparser.1") lib.add_file("sgml_input.html") - lib.add_file("test.xml") - lib.add_file("test.xml.out") lib.add_file("testtar.tar") lib.add_file("test_difflib_expect.html") lib.add_file("check_soundcard.vbs") @@ -1019,6 +1022,9 @@ lib.add_file("zipdir.zip") if dir=='decimaltestdata': lib.glob("*.decTest") + if dir=='xmltestdata': + lib.glob("*.xml") + lib.add_file("test.xml.out") if dir=='output': lib.glob("test_*") if dir=='idlelib': @@ -1293,7 +1299,7 @@ ]) db.Commit() -db = build_database() +db,msiname = build_database() try: add_features(db) add_ui(db) @@ -1303,3 +1309,75 @@ db.Commit() finally: del db + +# Merge CRT into MSI file. This requires the database to be closed. +mod_dir = os.path.join(os.environ["ProgramFiles"], "Common Files", "Merge Modules") +if msilib.Win64: + modules = ["Microsoft_VC90_CRT_x86_x64.msm", "policy_9_0_Microsoft_VC90_CRT_x86_x64.msm"] +else: + modules = ["Microsoft_VC90_CRT_x86.msm","policy_9_0_Microsoft_VC90_CRT_x86.msm"] + +for i, n in enumerate(modules): + modules[i] = os.path.join(mod_dir, n) + +def merge(msi, feature, rootdir, modules): + cab_and_filecount = [] + # Step 1: Merge databases, extract cabfiles + m = msilib.MakeMerge2() + m.OpenLog("merge.log") + m.OpenDatabase(msi) + for module in modules: + print module + m.OpenModule(module,0) + m.Merge(feature, rootdir) + print "Errors:" + for e in m.Errors: + print e.Type, e.ModuleTable, e.DatabaseTable + print " Modkeys:", + for s in e.ModuleKeys: print s, + print + print " DBKeys:", + for s in e.DatabaseKeys: print s, + print + cabname = tempfile.mktemp(suffix=".cab") + m.ExtractCAB(cabname) + cab_and_filecount.append((cabname, len(m.ModuleFiles))) + m.CloseModule() + m.CloseDatabase(True) + m.CloseLog() + + # Step 2: Add CAB files + i = msilib.MakeInstaller() + db = i.OpenDatabase(msi, constants.msiOpenDatabaseModeTransact) + + v = db.OpenView("SELECT LastSequence FROM Media") + v.Execute(None) + maxmedia = -1 + while 1: + r = v.Fetch() + if not r: break + seq = r.IntegerData(1) + if seq > maxmedia: + maxmedia = seq + print "Start of Media", maxmedia + + for cabname, count in cab_and_filecount: + stream = "merged%d" % maxmedia + msilib.add_data(db, "Media", + [(maxmedia+1, maxmedia+count, None, "#"+stream, None, None)]) + msilib.add_stream(db, stream, cabname) + os.unlink(cabname) + maxmedia += count + # The merge module sets ALLUSERS to 1 in the property table. + # This is undesired; delete that + v = db.OpenView("DELETE FROM Property WHERE Property='ALLUSERS'") + v.Execute(None) + v.Close() + db.Commit() + +merge(msiname, "SharedCRT", "TARGETDIR", modules) + +# certname (from config.py) should be (a substring of) +# the certificate subject, e.g. "Python Software Foundation" +if certname: + os.system('signtool sign /n "%s" /t http://timestamp.verisign.com/scripts/timestamp.dll %s' % (certname, msiname)) Modified: python/branches/py3k-jit/Tools/msi/uuids.py ============================================================================== --- python/branches/py3k-jit/Tools/msi/uuids.py (original) +++ python/branches/py3k-jit/Tools/msi/uuids.py Tue Mar 16 21:40:29 2010 @@ -33,6 +33,14 @@ '2.6.1150':'{9cc89170-000b-457d-91f1-53691f85b223}', # 2.6.1 '2.6.2121':'{adac412b-b209-4c15-b6ab-dca1b6e47144}', # 2.6.2c1 '2.6.2150':'{24aab420-4e30-4496-9739-3e216f3de6ae}', # 2.6.2 + '2.6.3121':'{a73e0254-dcda-4fe4-bf37-c7e1c4f4ebb6}', # 2.6.3c1 + '2.6.3150':'{3d9ac095-e115-4e94-bdef-7f7edf17697d}', # 2.6.3 + '2.6.4121':'{727de605-0359-4606-a94b-c2033652379b}', # 2.6.4c1 + '2.6.4122':'{4f7603c6-6352-4299-a398-150a31b19acc}', # 2.6.4c2 + '2.6.4150':'{e7394a0f-3f80-45b1-87fc-abcd51893246}', # 2.6.4 + '2.6.5121':'{e0e273d7-7598-4701-8325-c90c069fd5ff}', # 2.6.5c1 + '2.6.5122':'{fa227b76-0671-4dc6-b826-c2ff2a70dfd5}', # 2.6.5c2 + '2.6.5150':'{4723f199-fa64-4233-8e6e-9fccc95a18ee}', # 2.6.5 '2.7.101': '{eca1bbef-432c-49ae-a667-c213cc7bbf22}', # 2.7a1 '2.7.102': '{21ce16ed-73c4-460d-9b11-522f417b2090}', # 2.7a2 '2.7.103': '{6e7dbd55-ba4a-48ac-a688-6c75db4d7500}', # 2.7a3 Modified: python/branches/py3k-jit/Tools/scripts/byteyears.py ============================================================================== --- python/branches/py3k-jit/Tools/scripts/byteyears.py (original) +++ python/branches/py3k-jit/Tools/scripts/byteyears.py Tue Mar 16 21:40:29 2010 @@ -1,4 +1,4 @@ -#! /usr/bin/env python +#! /usr/bin/env python3 # Print the product of age and size of each file, in suitable units. # Modified: python/branches/py3k-jit/Tools/scripts/checkappend.py ============================================================================== --- python/branches/py3k-jit/Tools/scripts/checkappend.py (original) +++ python/branches/py3k-jit/Tools/scripts/checkappend.py Tue Mar 16 21:40:29 2010 @@ -1,4 +1,4 @@ -#! /usr/bin/env python +#! /usr/bin/env python3 # Released to the public domain, by Tim Peters, 28 February 2000. Modified: python/branches/py3k-jit/Tools/scripts/checkpyc.py ============================================================================== --- python/branches/py3k-jit/Tools/scripts/checkpyc.py (original) +++ python/branches/py3k-jit/Tools/scripts/checkpyc.py Tue Mar 16 21:40:29 2010 @@ -1,4 +1,4 @@ -#! /usr/bin/env python +#! /usr/bin/env python3 # Check that all ".pyc" files exist and are up-to-date # Uses module 'os' Modified: python/branches/py3k-jit/Tools/scripts/classfix.py ============================================================================== --- python/branches/py3k-jit/Tools/scripts/classfix.py (original) +++ python/branches/py3k-jit/Tools/scripts/classfix.py Tue Mar 16 21:40:29 2010 @@ -1,4 +1,4 @@ -#! /usr/bin/env python +#! /usr/bin/env python3 # This script is obsolete -- it is kept for historical purposes only. # Modified: python/branches/py3k-jit/Tools/scripts/cleanfuture.py ============================================================================== --- python/branches/py3k-jit/Tools/scripts/cleanfuture.py (original) +++ python/branches/py3k-jit/Tools/scripts/cleanfuture.py Tue Mar 16 21:40:29 2010 @@ -1,4 +1,4 @@ -#! /usr/bin/env python +#! /usr/bin/env python3 """cleanfuture [-d][-r][-v] path ... Modified: python/branches/py3k-jit/Tools/scripts/combinerefs.py ============================================================================== --- python/branches/py3k-jit/Tools/scripts/combinerefs.py (original) +++ python/branches/py3k-jit/Tools/scripts/combinerefs.py Tue Mar 16 21:40:29 2010 @@ -1,4 +1,4 @@ -#! /usr/bin/env python +#! /usr/bin/env python3 """ combinerefs path Modified: python/branches/py3k-jit/Tools/scripts/copytime.py ============================================================================== --- python/branches/py3k-jit/Tools/scripts/copytime.py (original) +++ python/branches/py3k-jit/Tools/scripts/copytime.py Tue Mar 16 21:40:29 2010 @@ -1,4 +1,4 @@ -#! /usr/bin/env python +#! /usr/bin/env python3 # Copy one file's atime and mtime to another Modified: python/branches/py3k-jit/Tools/scripts/crlf.py ============================================================================== --- python/branches/py3k-jit/Tools/scripts/crlf.py (original) +++ python/branches/py3k-jit/Tools/scripts/crlf.py Tue Mar 16 21:40:29 2010 @@ -1,4 +1,4 @@ -#! /usr/bin/env python +#! /usr/bin/env python3 "Replace CRLF with LF in argument files. Print names of changed files." import sys, os Modified: python/branches/py3k-jit/Tools/scripts/cvsfiles.py ============================================================================== --- python/branches/py3k-jit/Tools/scripts/cvsfiles.py (original) +++ python/branches/py3k-jit/Tools/scripts/cvsfiles.py Tue Mar 16 21:40:29 2010 @@ -1,4 +1,4 @@ -#! /usr/bin/env python +#! /usr/bin/env python3 """Print a list of files that are mentioned in CVS directories. Modified: python/branches/py3k-jit/Tools/scripts/db2pickle.py ============================================================================== --- python/branches/py3k-jit/Tools/scripts/db2pickle.py (original) +++ python/branches/py3k-jit/Tools/scripts/db2pickle.py Tue Mar 16 21:40:29 2010 @@ -1,4 +1,4 @@ -#!/usr/bin/env python +#!/usr/bin/env python3 """ Synopsis: %(prog)s [-h|-g|-b|-r|-a] dbfile [ picklefile ] Modified: python/branches/py3k-jit/Tools/scripts/dutree.py ============================================================================== --- python/branches/py3k-jit/Tools/scripts/dutree.py (original) +++ python/branches/py3k-jit/Tools/scripts/dutree.py Tue Mar 16 21:40:29 2010 @@ -1,4 +1,4 @@ -#! /usr/bin/env python +#! /usr/bin/env python3 # Format du output in a tree shape import os, sys, errno Modified: python/branches/py3k-jit/Tools/scripts/eptags.py ============================================================================== --- python/branches/py3k-jit/Tools/scripts/eptags.py (original) +++ python/branches/py3k-jit/Tools/scripts/eptags.py Tue Mar 16 21:40:29 2010 @@ -1,4 +1,4 @@ -#! /usr/bin/env python +#! /usr/bin/env python3 """Create a TAGS file for Python programs, usable with GNU Emacs. usage: eptags pyfiles... Modified: python/branches/py3k-jit/Tools/scripts/find_recursionlimit.py ============================================================================== --- python/branches/py3k-jit/Tools/scripts/find_recursionlimit.py (original) +++ python/branches/py3k-jit/Tools/scripts/find_recursionlimit.py Tue Mar 16 21:40:29 2010 @@ -1,4 +1,4 @@ -#! /usr/bin/env python +#! /usr/bin/env python3 """Find the maximum recursion limit that prevents interpreter termination. This script finds the maximum safe recursion limit on a particular Modified: python/branches/py3k-jit/Tools/scripts/finddiv.py ============================================================================== --- python/branches/py3k-jit/Tools/scripts/finddiv.py (original) +++ python/branches/py3k-jit/Tools/scripts/finddiv.py Tue Mar 16 21:40:29 2010 @@ -1,4 +1,4 @@ -#! /usr/bin/env python +#! /usr/bin/env python3 """finddiv - a grep-like tool that looks for division operators. Modified: python/branches/py3k-jit/Tools/scripts/findlinksto.py ============================================================================== --- python/branches/py3k-jit/Tools/scripts/findlinksto.py (original) +++ python/branches/py3k-jit/Tools/scripts/findlinksto.py Tue Mar 16 21:40:29 2010 @@ -1,4 +1,4 @@ -#! /usr/bin/env python +#! /usr/bin/env python3 # findlinksto # Modified: python/branches/py3k-jit/Tools/scripts/findnocoding.py ============================================================================== --- python/branches/py3k-jit/Tools/scripts/findnocoding.py (original) +++ python/branches/py3k-jit/Tools/scripts/findnocoding.py Tue Mar 16 21:40:29 2010 @@ -1,4 +1,4 @@ -#!/usr/bin/env python +#!/usr/bin/env python3 """List all those Python files that require a coding directive Modified: python/branches/py3k-jit/Tools/scripts/fixcid.py ============================================================================== --- python/branches/py3k-jit/Tools/scripts/fixcid.py (original) +++ python/branches/py3k-jit/Tools/scripts/fixcid.py Tue Mar 16 21:40:29 2010 @@ -1,4 +1,4 @@ -#! /usr/bin/env python +#! /usr/bin/env python3 # Perform massive identifier substitution on C source files. # This actually tokenizes the files (to some extent) so it can Modified: python/branches/py3k-jit/Tools/scripts/fixdiv.py ============================================================================== --- python/branches/py3k-jit/Tools/scripts/fixdiv.py (original) +++ python/branches/py3k-jit/Tools/scripts/fixdiv.py Tue Mar 16 21:40:29 2010 @@ -1,4 +1,4 @@ -#! /usr/bin/env python +#! /usr/bin/env python3 """fixdiv - tool to fix division operators. Modified: python/branches/py3k-jit/Tools/scripts/fixheader.py ============================================================================== --- python/branches/py3k-jit/Tools/scripts/fixheader.py (original) +++ python/branches/py3k-jit/Tools/scripts/fixheader.py Tue Mar 16 21:40:29 2010 @@ -1,4 +1,4 @@ -#! /usr/bin/env python +#! /usr/bin/env python3 # Add some standard cpp magic to a header file Modified: python/branches/py3k-jit/Tools/scripts/fixnotice.py ============================================================================== --- python/branches/py3k-jit/Tools/scripts/fixnotice.py (original) +++ python/branches/py3k-jit/Tools/scripts/fixnotice.py Tue Mar 16 21:40:29 2010 @@ -1,4 +1,4 @@ -#! /usr/bin/env python +#! /usr/bin/env python3 """(Ostensibly) fix copyright notices in files. Modified: python/branches/py3k-jit/Tools/scripts/fixps.py ============================================================================== --- python/branches/py3k-jit/Tools/scripts/fixps.py (original) +++ python/branches/py3k-jit/Tools/scripts/fixps.py Tue Mar 16 21:40:29 2010 @@ -1,4 +1,4 @@ -#!/usr/bin/env python +#!/usr/bin/env python3 # Fix Python script(s) to reference the interpreter via /usr/bin/env python. # Warning: this overwrites the file without making a backup. Modified: python/branches/py3k-jit/Tools/scripts/ftpmirror.py ============================================================================== --- python/branches/py3k-jit/Tools/scripts/ftpmirror.py (original) +++ python/branches/py3k-jit/Tools/scripts/ftpmirror.py Tue Mar 16 21:40:29 2010 @@ -1,4 +1,4 @@ -#! /usr/bin/env python +#! /usr/bin/env python3 """Mirror a remote ftp subtree into a local directory tree. Modified: python/branches/py3k-jit/Tools/scripts/google.py ============================================================================== --- python/branches/py3k-jit/Tools/scripts/google.py (original) +++ python/branches/py3k-jit/Tools/scripts/google.py Tue Mar 16 21:40:29 2010 @@ -1,4 +1,4 @@ -#! /usr/bin/env python +#! /usr/bin/env python3 import sys, webbrowser Modified: python/branches/py3k-jit/Tools/scripts/gprof2html.py ============================================================================== --- python/branches/py3k-jit/Tools/scripts/gprof2html.py (original) +++ python/branches/py3k-jit/Tools/scripts/gprof2html.py Tue Mar 16 21:40:29 2010 @@ -1,4 +1,4 @@ -#! /usr/bin/env python2.3 +#! /usr/bin/env python32.3 """Transform gprof(1) output into useful HTML.""" Modified: python/branches/py3k-jit/Tools/scripts/h2py.py ============================================================================== --- python/branches/py3k-jit/Tools/scripts/h2py.py (original) +++ python/branches/py3k-jit/Tools/scripts/h2py.py Tue Mar 16 21:40:29 2010 @@ -1,4 +1,4 @@ -#! /usr/bin/env python +#! /usr/bin/env python3 # Read #define's and translate to Python code. # Handle #include statements. Modified: python/branches/py3k-jit/Tools/scripts/ifdef.py ============================================================================== --- python/branches/py3k-jit/Tools/scripts/ifdef.py (original) +++ python/branches/py3k-jit/Tools/scripts/ifdef.py Tue Mar 16 21:40:29 2010 @@ -1,4 +1,4 @@ -#! /usr/bin/env python +#! /usr/bin/env python3 # Selectively preprocess #ifdef / #ifndef statements. # Usage: Modified: python/branches/py3k-jit/Tools/scripts/lfcr.py ============================================================================== --- python/branches/py3k-jit/Tools/scripts/lfcr.py (original) +++ python/branches/py3k-jit/Tools/scripts/lfcr.py Tue Mar 16 21:40:29 2010 @@ -1,4 +1,4 @@ -#! /usr/bin/env python +#! /usr/bin/env python3 "Replace LF with CRLF in argument files. Print names of changed files." Modified: python/branches/py3k-jit/Tools/scripts/linktree.py ============================================================================== --- python/branches/py3k-jit/Tools/scripts/linktree.py (original) +++ python/branches/py3k-jit/Tools/scripts/linktree.py Tue Mar 16 21:40:29 2010 @@ -1,4 +1,4 @@ -#! /usr/bin/env python +#! /usr/bin/env python3 # linktree # Modified: python/branches/py3k-jit/Tools/scripts/lll.py ============================================================================== --- python/branches/py3k-jit/Tools/scripts/lll.py (original) +++ python/branches/py3k-jit/Tools/scripts/lll.py Tue Mar 16 21:40:29 2010 @@ -1,4 +1,4 @@ -#! /usr/bin/env python +#! /usr/bin/env python3 # Find symbolic links and show where they point to. # Arguments are directories to search; default is current directory. Modified: python/branches/py3k-jit/Tools/scripts/logmerge.py ============================================================================== --- python/branches/py3k-jit/Tools/scripts/logmerge.py (original) +++ python/branches/py3k-jit/Tools/scripts/logmerge.py Tue Mar 16 21:40:29 2010 @@ -1,4 +1,4 @@ -#! /usr/bin/env python +#! /usr/bin/env python3 """Consolidate a bunch of CVS or RCS logs read from stdin. Modified: python/branches/py3k-jit/Tools/scripts/md5sum.py ============================================================================== --- python/branches/py3k-jit/Tools/scripts/md5sum.py (original) +++ python/branches/py3k-jit/Tools/scripts/md5sum.py Tue Mar 16 21:40:29 2010 @@ -1,4 +1,4 @@ -#! /usr/bin/env python +#! /usr/bin/env python3 """Python utility to print MD5 checksums of argument files. """ Modified: python/branches/py3k-jit/Tools/scripts/methfix.py ============================================================================== --- python/branches/py3k-jit/Tools/scripts/methfix.py (original) +++ python/branches/py3k-jit/Tools/scripts/methfix.py Tue Mar 16 21:40:29 2010 @@ -1,4 +1,4 @@ -#! /usr/bin/env python +#! /usr/bin/env python3 # Fix Python source files to avoid using # def method(self, (arg1, ..., argn)): Modified: python/branches/py3k-jit/Tools/scripts/mkreal.py ============================================================================== --- python/branches/py3k-jit/Tools/scripts/mkreal.py (original) +++ python/branches/py3k-jit/Tools/scripts/mkreal.py Tue Mar 16 21:40:29 2010 @@ -1,4 +1,4 @@ -#! /usr/bin/env python +#! /usr/bin/env python3 # mkreal # Modified: python/branches/py3k-jit/Tools/scripts/ndiff.py ============================================================================== --- python/branches/py3k-jit/Tools/scripts/ndiff.py (original) +++ python/branches/py3k-jit/Tools/scripts/ndiff.py Tue Mar 16 21:40:29 2010 @@ -1,4 +1,4 @@ -#! /usr/bin/env python +#! /usr/bin/env python3 # Module ndiff version 1.7.0 # Released to the public domain 08-Dec-2000, Modified: python/branches/py3k-jit/Tools/scripts/nm2def.py ============================================================================== --- python/branches/py3k-jit/Tools/scripts/nm2def.py (original) +++ python/branches/py3k-jit/Tools/scripts/nm2def.py Tue Mar 16 21:40:29 2010 @@ -1,4 +1,4 @@ -#! /usr/bin/env python +#! /usr/bin/env python3 """nm2def.py Helpers to extract symbols from Unix libs and auto-generate Modified: python/branches/py3k-jit/Tools/scripts/objgraph.py ============================================================================== --- python/branches/py3k-jit/Tools/scripts/objgraph.py (original) +++ python/branches/py3k-jit/Tools/scripts/objgraph.py Tue Mar 16 21:40:29 2010 @@ -1,4 +1,4 @@ -#! /usr/bin/env python +#! /usr/bin/env python3 # objgraph # Modified: python/branches/py3k-jit/Tools/scripts/parseentities.py ============================================================================== --- python/branches/py3k-jit/Tools/scripts/parseentities.py (original) +++ python/branches/py3k-jit/Tools/scripts/parseentities.py Tue Mar 16 21:40:29 2010 @@ -1,4 +1,4 @@ -#!/usr/local/bin/python +#!/usr/bin/env python3 """ Utility for parsing HTML entity definitions available from: http://www.w3.org/ as e.g. Modified: python/branches/py3k-jit/Tools/scripts/pdeps.py ============================================================================== --- python/branches/py3k-jit/Tools/scripts/pdeps.py (original) +++ python/branches/py3k-jit/Tools/scripts/pdeps.py Tue Mar 16 21:40:29 2010 @@ -1,4 +1,4 @@ -#! /usr/bin/env python +#! /usr/bin/env python3 # pdeps # Modified: python/branches/py3k-jit/Tools/scripts/pickle2db.py ============================================================================== --- python/branches/py3k-jit/Tools/scripts/pickle2db.py (original) +++ python/branches/py3k-jit/Tools/scripts/pickle2db.py Tue Mar 16 21:40:29 2010 @@ -1,4 +1,4 @@ -#!/usr/bin/env python +#!/usr/bin/env python3 """ Synopsis: %(prog)s [-h|-b|-g|-r|-a|-d] [ picklefile ] dbfile Modified: python/branches/py3k-jit/Tools/scripts/pindent.py ============================================================================== --- python/branches/py3k-jit/Tools/scripts/pindent.py (original) +++ python/branches/py3k-jit/Tools/scripts/pindent.py Tue Mar 16 21:40:29 2010 @@ -1,4 +1,4 @@ -#! /usr/bin/env python +#! /usr/bin/env python3 # This file contains a class and a main program that perform three # related (though complimentary) formatting operations on Python Modified: python/branches/py3k-jit/Tools/scripts/ptags.py ============================================================================== --- python/branches/py3k-jit/Tools/scripts/ptags.py (original) +++ python/branches/py3k-jit/Tools/scripts/ptags.py Tue Mar 16 21:40:29 2010 @@ -1,4 +1,4 @@ -#! /usr/bin/env python +#! /usr/bin/env python3 # ptags # Modified: python/branches/py3k-jit/Tools/scripts/pysource.py ============================================================================== --- python/branches/py3k-jit/Tools/scripts/pysource.py (original) +++ python/branches/py3k-jit/Tools/scripts/pysource.py Tue Mar 16 21:40:29 2010 @@ -1,4 +1,4 @@ -#!/usr/bin/env python +#!/usr/bin/env python3 """\ List python source files. Modified: python/branches/py3k-jit/Tools/scripts/reindent-rst.py ============================================================================== --- python/branches/py3k-jit/Tools/scripts/reindent-rst.py (original) +++ python/branches/py3k-jit/Tools/scripts/reindent-rst.py Tue Mar 16 21:40:29 2010 @@ -1,4 +1,4 @@ -#!/usr/bin/env python +#!/usr/bin/env python3 # Make a reST file compliant to our pre-commit hook. # Currently just remove trailing whitespace. Modified: python/branches/py3k-jit/Tools/scripts/reindent.py ============================================================================== --- python/branches/py3k-jit/Tools/scripts/reindent.py (original) +++ python/branches/py3k-jit/Tools/scripts/reindent.py Tue Mar 16 21:40:29 2010 @@ -1,4 +1,4 @@ -#! /usr/bin/env python +#! /usr/bin/env python3 # Released to the public domain, by Tim Peters, 03 October 2000. Modified: python/branches/py3k-jit/Tools/scripts/rgrep.py ============================================================================== --- python/branches/py3k-jit/Tools/scripts/rgrep.py (original) +++ python/branches/py3k-jit/Tools/scripts/rgrep.py Tue Mar 16 21:40:29 2010 @@ -1,4 +1,4 @@ -#! /usr/bin/env python +#! /usr/bin/env python3 """Reverse grep. Modified: python/branches/py3k-jit/Tools/scripts/serve.py ============================================================================== --- python/branches/py3k-jit/Tools/scripts/serve.py (original) +++ python/branches/py3k-jit/Tools/scripts/serve.py Tue Mar 16 21:40:29 2010 @@ -1,4 +1,4 @@ -#!/usr/bin/env python +#!/usr/bin/env python3 ''' Small wsgiref based web server. Takes a path to serve from and an optional port number (defaults to 8000), then tries to serve files. Modified: python/branches/py3k-jit/Tools/scripts/suff.py ============================================================================== --- python/branches/py3k-jit/Tools/scripts/suff.py (original) +++ python/branches/py3k-jit/Tools/scripts/suff.py Tue Mar 16 21:40:29 2010 @@ -1,4 +1,4 @@ -#! /usr/bin/env python +#! /usr/bin/env python3 # suff # Modified: python/branches/py3k-jit/Tools/scripts/svneol.py ============================================================================== --- python/branches/py3k-jit/Tools/scripts/svneol.py (original) +++ python/branches/py3k-jit/Tools/scripts/svneol.py Tue Mar 16 21:40:29 2010 @@ -1,4 +1,4 @@ -#! /usr/bin/env python +#! /usr/bin/env python3 """ SVN helper script. Modified: python/branches/py3k-jit/Tools/scripts/texi2html.py ============================================================================== --- python/branches/py3k-jit/Tools/scripts/texi2html.py (original) +++ python/branches/py3k-jit/Tools/scripts/texi2html.py Tue Mar 16 21:40:29 2010 @@ -1,4 +1,4 @@ -#! /usr/bin/env python +#! /usr/bin/env python3 # Convert GNU texinfo files into HTML, one file per node. # Based on Texinfo 2.14. Modified: python/branches/py3k-jit/Tools/scripts/treesync.py ============================================================================== --- python/branches/py3k-jit/Tools/scripts/treesync.py (original) +++ python/branches/py3k-jit/Tools/scripts/treesync.py Tue Mar 16 21:40:29 2010 @@ -1,4 +1,4 @@ -#! /usr/bin/env python +#! /usr/bin/env python3 """Script to synchronize two source trees. Modified: python/branches/py3k-jit/Tools/scripts/untabify.py ============================================================================== --- python/branches/py3k-jit/Tools/scripts/untabify.py (original) +++ python/branches/py3k-jit/Tools/scripts/untabify.py Tue Mar 16 21:40:29 2010 @@ -1,4 +1,4 @@ -#! /usr/bin/env python +#! /usr/bin/env python3 "Replace tabs with spaces in argument files. Print names of changed files." Modified: python/branches/py3k-jit/Tools/scripts/which.py ============================================================================== --- python/branches/py3k-jit/Tools/scripts/which.py (original) +++ python/branches/py3k-jit/Tools/scripts/which.py Tue Mar 16 21:40:29 2010 @@ -1,4 +1,4 @@ -#! /usr/bin/env python +#! /usr/bin/env python3 # Variant of "which". # On stderr, near and total misses are reported. Modified: python/branches/py3k-jit/Tools/scripts/xxci.py ============================================================================== --- python/branches/py3k-jit/Tools/scripts/xxci.py (original) +++ python/branches/py3k-jit/Tools/scripts/xxci.py Tue Mar 16 21:40:29 2010 @@ -1,4 +1,4 @@ -#! /usr/bin/env python +#! /usr/bin/env python3 # xxci # Modified: python/branches/py3k-jit/Tools/ssl/get-remote-certificate.py ============================================================================== --- python/branches/py3k-jit/Tools/ssl/get-remote-certificate.py (original) +++ python/branches/py3k-jit/Tools/ssl/get-remote-certificate.py Tue Mar 16 21:40:29 2010 @@ -1,4 +1,4 @@ -#!/usr/bin/env python +#!/usr/bin/env python3 # # fetch the certificate that the server(s) are providing in PEM form # Modified: python/branches/py3k-jit/Tools/unicode/comparecodecs.py ============================================================================== --- python/branches/py3k-jit/Tools/unicode/comparecodecs.py (original) +++ python/branches/py3k-jit/Tools/unicode/comparecodecs.py Tue Mar 16 21:40:29 2010 @@ -1,4 +1,4 @@ -#!/usr/bin/env python +#!/usr/bin/env python3 """ Compare the output of two codecs. Modified: python/branches/py3k-jit/Tools/webchecker/wcgui.py ============================================================================== --- python/branches/py3k-jit/Tools/webchecker/wcgui.py (original) +++ python/branches/py3k-jit/Tools/webchecker/wcgui.py Tue Mar 16 21:40:29 2010 @@ -1,4 +1,4 @@ -#! /usr/bin/env python +#! /usr/bin/env python3 """GUI interface to webchecker. Modified: python/branches/py3k-jit/Tools/webchecker/webchecker.py ============================================================================== --- python/branches/py3k-jit/Tools/webchecker/webchecker.py (original) +++ python/branches/py3k-jit/Tools/webchecker/webchecker.py Tue Mar 16 21:40:29 2010 @@ -1,4 +1,4 @@ -#! /usr/bin/env python +#! /usr/bin/env python3 # Original code by Guido van Rossum; extensive changes by Sam Bayer, # including code to check URL fragments. Modified: python/branches/py3k-jit/Tools/webchecker/websucker.py ============================================================================== --- python/branches/py3k-jit/Tools/webchecker/websucker.py (original) +++ python/branches/py3k-jit/Tools/webchecker/websucker.py Tue Mar 16 21:40:29 2010 @@ -1,4 +1,4 @@ -#! /usr/bin/env python +#! /usr/bin/env python3 """A variant on webchecker that creates a mirror copy of a remote site.""" Modified: python/branches/py3k-jit/Tools/webchecker/wsgui.py ============================================================================== --- python/branches/py3k-jit/Tools/webchecker/wsgui.py (original) +++ python/branches/py3k-jit/Tools/webchecker/wsgui.py Tue Mar 16 21:40:29 2010 @@ -1,4 +1,4 @@ -#! /usr/bin/env python +#! /usr/bin/env python3 """Tkinter-based GUI for websucker. Modified: python/branches/py3k-jit/configure ============================================================================== --- python/branches/py3k-jit/configure (original) +++ python/branches/py3k-jit/configure Tue Mar 16 21:40:29 2010 @@ -1,5 +1,5 @@ #! /bin/sh -# From configure.in Revision: 78818 . +# From configure.in Revision: 78821 . # Guess values for system-dependent variables and create Makefiles. # Generated by GNU Autoconf 2.61 for python 3.2. # @@ -14728,7 +14728,7 @@ FreeBSD*) if [ "`$CC -dM -E - Author: benjamin.peterson Date: Tue Mar 16 22:23:14 2010 New Revision: 78999 Log: kill merged branch Removed: python/branches/io-c/ From python-checkins at python.org Tue Mar 16 22:24:16 2010 From: python-checkins at python.org (benjamin.peterson) Date: Tue, 16 Mar 2010 22:24:16 +0100 (CET) Subject: [Python-checkins] r79000 - python/branches/p3yk_no_args_on_exc Message-ID: <20100316212416.E186EF1B4@mail.python.org> Author: benjamin.peterson Date: Tue Mar 16 22:24:16 2010 New Revision: 79000 Log: remove outdated branch Removed: python/branches/p3yk_no_args_on_exc/ From python-checkins at python.org Tue Mar 16 22:25:58 2010 From: python-checkins at python.org (benjamin.peterson) Date: Tue, 16 Mar 2010 22:25:58 +0100 (CET) Subject: [Python-checkins] r79001 - python/branches/ast-arena Message-ID: <20100316212558.70544F670@mail.python.org> Author: benjamin.peterson Date: Tue Mar 16 22:25:58 2010 New Revision: 79001 Log: remove ast branch Removed: python/branches/ast-arena/ From python-checkins at python.org Tue Mar 16 22:27:12 2010 From: python-checkins at python.org (benjamin.peterson) Date: Tue, 16 Mar 2010 22:27:12 +0100 (CET) Subject: [Python-checkins] r79002 - in python/branches: ast-branch ast-objects Message-ID: <20100316212712.D6E55F670@mail.python.org> Author: benjamin.peterson Date: Tue Mar 16 22:27:12 2010 New Revision: 79002 Log: remove ast branches Removed: python/branches/ast-branch/ python/branches/ast-objects/ From python-checkins at python.org Tue Mar 16 22:27:57 2010 From: python-checkins at python.org (benjamin.peterson) Date: Tue, 16 Mar 2010 22:27:57 +0100 (CET) Subject: [Python-checkins] r79003 - python/branches/descr-branch Message-ID: <20100316212757.11992F670@mail.python.org> Author: benjamin.peterson Date: Tue Mar 16 22:27:56 2010 New Revision: 79003 Log: kill merged branch Removed: python/branches/descr-branch/ From python-checkins at python.org Tue Mar 16 22:28:16 2010 From: python-checkins at python.org (benjamin.peterson) Date: Tue, 16 Mar 2010 22:28:16 +0100 (CET) Subject: [Python-checkins] r79004 - python/branches/gen-branch Message-ID: <20100316212816.C2561F670@mail.python.org> Author: benjamin.peterson Date: Tue Mar 16 22:28:16 2010 New Revision: 79004 Log: kill merged branch Removed: python/branches/gen-branch/ From python-checkins at python.org Tue Mar 16 22:31:25 2010 From: python-checkins at python.org (benjamin.peterson) Date: Tue, 16 Mar 2010 22:31:25 +0100 (CET) Subject: [Python-checkins] r79005 - python/branches/py3k-short-float-repr Message-ID: <20100316213125.BFD8DF809@mail.python.org> Author: benjamin.peterson Date: Tue Mar 16 22:31:25 2010 New Revision: 79005 Log: kill merged branch Removed: python/branches/py3k-short-float-repr/ From python-checkins at python.org Tue Mar 16 22:33:50 2010 From: python-checkins at python.org (benjamin.peterson) Date: Tue, 16 Mar 2010 22:33:50 +0100 (CET) Subject: [Python-checkins] r79006 - python/branches/iter-branch Message-ID: <20100316213350.043DCF809@mail.python.org> Author: benjamin.peterson Date: Tue Mar 16 22:33:49 2010 New Revision: 79006 Log: kill merged branch Removed: python/branches/iter-branch/ From python-checkins at python.org Tue Mar 16 22:34:21 2010 From: python-checkins at python.org (benjamin.peterson) Date: Tue, 16 Mar 2010 22:34:21 +0100 (CET) Subject: [Python-checkins] r79007 - python/branches/py3k-issue1717 Message-ID: <20100316213421.2970EF81E@mail.python.org> Author: benjamin.peterson Date: Tue Mar 16 22:34:21 2010 New Revision: 79007 Log: kill merged branch Removed: python/branches/py3k-issue1717/ From python-checkins at python.org Wed Mar 17 00:36:46 2010 From: python-checkins at python.org (collin.winter) Date: Wed, 17 Mar 2010 00:36:46 +0100 (CET) Subject: [Python-checkins] r79008 - peps/trunk/pep-3146.txt Message-ID: <20100316233646.68C47F9A5@mail.python.org> Author: collin.winter Date: Wed Mar 17 00:36:46 2010 New Revision: 79008 Log: Mark PEP 3146 as accepted, following Guido's decision at PyCon US 2010. Modified: peps/trunk/pep-3146.txt Modified: peps/trunk/pep-3146.txt ============================================================================== --- peps/trunk/pep-3146.txt (original) +++ peps/trunk/pep-3146.txt Wed Mar 17 00:36:46 2010 @@ -5,7 +5,7 @@ Author: Collin Winter , Jeffrey Yasskin , Reid Kleckner -Status: Draft +Status: Accepted Type: Standards Track Content-Type: text/x-rst Created: 1-Jan-2010 From solipsis at pitrou.net Wed Mar 17 01:19:20 2010 From: solipsis at pitrou.net (solipsis at pitrou.net) Date: Wed, 17 Mar 2010 01:19:20 +0100 (CET) Subject: [Python-checkins] Daily py3k reference leaks (r78997): sum=6 Message-ID: <20100317001920.110671770A@ns6635.ovh.net> py3k results for svn r78997 (hg cset a0997d16142c) -------------------------------------------------- test_subprocess leaked [2, 2, 2] references, sum=6 Command line was: ['./python', '-m', 'test.regrtest', '-uall', '-R', '3:3:/home/antoine/py3k/refleaks/reflogHZu2SV', '-x', 'test_httpservers'] From python-checkins at python.org Wed Mar 17 01:41:56 2010 From: python-checkins at python.org (collin.winter) Date: Wed, 17 Mar 2010 01:41:56 +0100 (CET) Subject: [Python-checkins] r79009 - in python/branches/py3k/Lib/test: support.py test_dynamic.py Message-ID: <20100317004156.A37B3F927@mail.python.org> Author: collin.winter Date: Wed Mar 17 01:41:56 2010 New Revision: 79009 Log: Add some tests for ways users can change or shadow globals and builtins. Added: python/branches/py3k/Lib/test/test_dynamic.py Modified: python/branches/py3k/Lib/test/support.py Modified: python/branches/py3k/Lib/test/support.py ============================================================================== --- python/branches/py3k/Lib/test/support.py (original) +++ python/branches/py3k/Lib/test/support.py Wed Mar 17 01:41:56 2010 @@ -30,7 +30,8 @@ "run_with_locale", "set_memlimit", "bigmemtest", "bigaddrspacetest", "BasicTestRunner", "run_unittest", "run_doctest", "threading_setup", "threading_cleanup", - "reap_children", "cpython_only", "check_impl_detail", "get_attribute"] + "reap_children", "cpython_only", "check_impl_detail", "get_attribute", + "swap_item", "swap_attr"] class Error(Exception): """Base class for regression test exceptions.""" @@ -1074,3 +1075,57 @@ break except: break + + at contextlib.contextmanager +def swap_attr(obj, attr, new_val): + """Temporary swap out an attribute with a new object. + + Usage: + with swap_attr(obj, "attr", 5): + ... + + This will set obj.attr to 5 for the duration of the with: block, + restoring the old value at the end of the block. If `attr` doesn't + exist on `obj`, it will be created and then deleted at the end of the + block. + """ + if hasattr(obj, attr): + real_val = getattr(obj, attr) + setattr(obj, attr, new_val) + try: + yield + finally: + setattr(obj, attr, real_val) + else: + setattr(obj, attr, new_val) + try: + yield + finally: + delattr(obj, attr) + + at contextlib.contextmanager +def swap_item(obj, item, new_val): + """Temporary swap out an item with a new object. + + Usage: + with swap_item(obj, "item", 5): + ... + + This will set obj["item"] to 5 for the duration of the with: block, + restoring the old value at the end of the block. If `item` doesn't + exist on `obj`, it will be created and then deleted at the end of the + block. + """ + if item in obj: + real_val = obj[item] + obj[item] = new_val + try: + yield + finally: + obj[item] = real_val + else: + obj[item] = new_val + try: + yield + finally: + del obj[item] Added: python/branches/py3k/Lib/test/test_dynamic.py ============================================================================== --- (empty file) +++ python/branches/py3k/Lib/test/test_dynamic.py Wed Mar 17 01:41:56 2010 @@ -0,0 +1,143 @@ +# Test the most dynamic corner cases of Python's runtime semantics. + +import builtins +import contextlib +import unittest + +from test.support import run_unittest, swap_item, swap_attr + + +class RebindBuiltinsTests(unittest.TestCase): + + """Test all the ways that we can change/shadow globals/builtins.""" + + def configure_func(self, func, *args): + """Perform TestCase-specific configuration on a function before testing. + + By default, this does nothing. Example usage: spinning a function so + that a JIT will optimize it. Subclasses should override this as needed. + + Args: + func: function to configure. + *args: any arguments that should be passed to func, if calling it. + + Returns: + Nothing. Work will be performed on func in-place. + """ + pass + + def test_globals_shadow_builtins(self): + # Modify globals() to shadow an entry in builtins. + def foo(): + return len([1, 2, 3]) + self.configure_func(foo) + + self.assertEqual(foo(), 3) + with swap_item(globals(), "len", lambda x: 7): + self.assertEqual(foo(), 7) + + def test_modify_builtins(self): + # Modify the builtins module directly. + def foo(): + return len([1, 2, 3]) + self.configure_func(foo) + + self.assertEqual(foo(), 3) + with swap_attr(builtins, "len", lambda x: 7): + self.assertEqual(foo(), 7) + + def test_modify_builtins_while_generator_active(self): + # Modify the builtins out from under a live generator. + def foo(): + x = range(3) + yield len(x) + yield len(x) + self.configure_func(foo) + + g = foo() + self.assertEqual(next(g), 3) + with swap_attr(builtins, "len", lambda x: 7): + self.assertEqual(next(g), 7) + + def test_modify_builtins_from_leaf_function(self): + # Verify that modifications made by leaf functions percolate up the + # callstack. + with swap_attr(builtins, "len", len): + def bar(): + builtins.len = lambda x: 4 + + def foo(modifier): + l = [] + l.append(len(range(7))) + modifier() + l.append(len(range(7))) + return l + self.configure_func(foo, lambda: None) + + self.assertEqual(foo(bar), [7, 4]) + + def test_cannot_change_globals_or_builtins_with_eval(self): + def foo(): + return len([1, 2, 3]) + self.configure_func(foo) + + # Note that this *doesn't* change the definition of len() seen by foo(). + builtins_dict = {"len": lambda x: 7} + globals_dict = {"foo": foo, "__builtins__": builtins_dict, + "len": lambda x: 8} + self.assertEqual(eval("foo()", globals_dict), 3) + + self.assertEqual(eval("foo()", {"foo": foo}), 3) + + def test_cannot_change_globals_or_builtins_with_exec(self): + def foo(): + return len([1, 2, 3]) + self.configure_func(foo) + + globals_dict = {"foo": foo} + exec("x = foo()", globals_dict) + self.assertEqual(globals_dict["x"], 3) + + # Note that this *doesn't* change the definition of len() seen by foo(). + builtins_dict = {"len": lambda x: 7} + globals_dict = {"foo": foo, "__builtins__": builtins_dict, + "len": lambda x: 8} + + exec("x = foo()", globals_dict) + self.assertEqual(globals_dict["x"], 3) + + def test_cannot_replace_builtins_dict_while_active(self): + def foo(): + x = range(3) + yield len(x) + yield len(x) + self.configure_func(foo) + + g = foo() + self.assertEqual(next(g), 3) + with swap_item(globals(), "__builtins__", {"len": lambda x: 7}): + self.assertEqual(next(g), 3) + + def test_cannot_replace_builtins_dict_between_calls(self): + def foo(): + return len([1, 2, 3]) + self.configure_func(foo) + + self.assertEqual(foo(), 3) + with swap_item(globals(), "__builtins__", {"len": lambda x: 7}): + self.assertEqual(foo(), 3) + + def test_eval_gives_lambda_custom_globals(self): + globals_dict = {"len": lambda x: 7} + foo = eval("lambda: len([])", globals_dict) + self.configure_func(foo) + + self.assertEqual(foo(), 7) + + +def test_main(): + run_unittest(RebindBuiltinsTests) + + +if __name__ == "__main__": + test_main() From python-checkins at python.org Wed Mar 17 02:24:25 2010 From: python-checkins at python.org (collin.winter) Date: Wed, 17 Mar 2010 02:24:25 +0100 (CET) Subject: [Python-checkins] r79010 - python/branches/py3k-jit/JIT_TODO.txt Message-ID: <20100317012425.747B0FA6D@mail.python.org> Author: collin.winter Date: Wed Mar 17 02:24:25 2010 New Revision: 79010 Log: Add the start of a TODO file for the py3k-jit branch. Added: python/branches/py3k-jit/JIT_TODO.txt Added: python/branches/py3k-jit/JIT_TODO.txt ============================================================================== --- (empty file) +++ python/branches/py3k-jit/JIT_TODO.txt Wed Mar 17 02:24:25 2010 @@ -0,0 +1,50 @@ +This branch exists to implement PEP 3146, merging Unladen Swallow into the +Python 3 development series. This file is intended as a non-exhaustive, +granular list of tasks needed to accomplish that. + +Unladen Swallow: http://code.google.com/p/unladen-swallow/ +PEP 3146: http://www.python.org/dev/peps/pep-3146/ + + +TODO: +- Import non-JIT related revisions into py3k, merge to py3k-jit: + Relevant revisions: + - r1017 + - r953 + - r900 + - r888 + - r835 + - r834 + - r823 + - r799 + - r754 + - r642, r644, r645 + - r636 + - r563 + - r301 + - r268 + - r246 + - r142 + Some of these should go into trunk, then py3k, then py3k-jit. Some of + these may have already been committed. This is just a rough worklist. +- Import changes designed to improve startup time: + - r675 + - r676 + - r688 + Some of these may need public discussion. +- Add support to configure/Makefile.pre.in for building against installed LLVM. +- Add C/C++ unittests: + - Create a Unittests/ directory. + - Import googletest 1.4.0. + - Start writing tests. +- Import general-purpose utility code: + - Stats.{h,cc} + - PySmallPtrSet +- Adapt JIT compiler to Python 3. +- Cure cancer. + + +DONE: +- Import non-JIT related revisions into py3k, merge to py3k-jit: + Relevant revisions: + - r815 (Lib/test/test_dynamic.py, Lib/test/support.py) From python-checkins at python.org Wed Mar 17 02:42:38 2010 From: python-checkins at python.org (collin.winter) Date: Wed, 17 Mar 2010 02:42:38 +0100 (CET) Subject: [Python-checkins] r79011 - python/branches/py3k-jit/JIT_TODO.txt Message-ID: <20100317014238.0F0E3F94A@mail.python.org> Author: collin.winter Date: Wed Mar 17 02:42:37 2010 New Revision: 79011 Log: Mark 'import r563' as done. Modified: python/branches/py3k-jit/JIT_TODO.txt Modified: python/branches/py3k-jit/JIT_TODO.txt ============================================================================== --- python/branches/py3k-jit/JIT_TODO.txt (original) +++ python/branches/py3k-jit/JIT_TODO.txt Wed Mar 17 02:42:37 2010 @@ -20,7 +20,6 @@ - r754 - r642, r644, r645 - r636 - - r563 - r301 - r268 - r246 @@ -47,4 +46,5 @@ DONE: - Import non-JIT related revisions into py3k, merge to py3k-jit: Relevant revisions: - - r815 (Lib/test/test_dynamic.py, Lib/test/support.py) + - r815 (Lib/test/test_dynamic.py, Lib/test/support.py; r79009) + - r563 (r72777, r72778) From python-checkins at python.org Wed Mar 17 02:47:58 2010 From: python-checkins at python.org (collin.winter) Date: Wed, 17 Mar 2010 02:47:58 +0100 (CET) Subject: [Python-checkins] r79012 - python/branches/py3k-jit/JIT_TODO.txt Message-ID: <20100317014758.6528BF97D@mail.python.org> Author: collin.winter Date: Wed Mar 17 02:47:58 2010 New Revision: 79012 Log: Mark 'import r268' as done. Modified: python/branches/py3k-jit/JIT_TODO.txt Modified: python/branches/py3k-jit/JIT_TODO.txt ============================================================================== --- python/branches/py3k-jit/JIT_TODO.txt (original) +++ python/branches/py3k-jit/JIT_TODO.txt Wed Mar 17 02:47:58 2010 @@ -21,7 +21,6 @@ - r642, r644, r645 - r636 - r301 - - r268 - r246 - r142 Some of these should go into trunk, then py3k, then py3k-jit. Some of @@ -48,3 +47,4 @@ Relevant revisions: - r815 (Lib/test/test_dynamic.py, Lib/test/support.py; r79009) - r563 (r72777, r72778) + - r268 (r70672, r70673) From python-checkins at python.org Wed Mar 17 02:58:36 2010 From: python-checkins at python.org (tarek.ziade) Date: Wed, 17 Mar 2010 02:58:36 +0100 Subject: [Python-checkins] distutils2: replaced instances of 'classifiers' with 'classifier' Message-ID: tarek.ziade pushed e2b91af34f58 to distutils2: http://hg.python.org/distutils2/rev/e2b91af34f58 changeset: 77:e2b91af34f58 user: Nicolas Cadou date: Mon Mar 15 21:10:46 2010 -0400 summary: replaced instances of 'classifiers' with 'classifier' files: src/distutils2/command/register.py, src/distutils2/dist.py, src/distutils2/mkpkg.py diff --git a/src/distutils2/command/register.py b/src/distutils2/command/register.py --- a/src/distutils2/command/register.py +++ b/src/distutils2/command/register.py @@ -239,7 +239,7 @@ 'description': meta['Description'], 'keywords': meta['Keywords'], 'platform': meta['Platform'], - 'classifiers': meta['Classifier'], + 'classifier': meta['Classifier'], 'download_url': meta['Download-URL'], #'provides': meta['Provides'], #'requires': meta['Requires'], diff --git a/src/distutils2/dist.py b/src/distutils2/dist.py --- a/src/distutils2/dist.py +++ b/src/distutils2/dist.py @@ -101,7 +101,7 @@ "print the long package description"), ('platforms', None, "print the list of platforms"), - ('classifiers', None, + ('classifier', None, "print the list of classifiers"), ('keywords', None, "print the list of keywords"), @@ -672,7 +672,7 @@ value = self.metadata[opt] if opt in ['keywords', 'platform']: print(','.join(value)) - elif opt in ('classifiers', 'provides', 'requires', + elif opt in ('classifier', 'provides', 'requires', 'obsoletes'): print('\n'.join(value)) else: diff --git a/src/distutils2/mkpkg.py b/src/distutils2/mkpkg.py --- a/src/distutils2/mkpkg.py +++ b/src/distutils2/mkpkg.py @@ -678,7 +678,7 @@ self.config = None self.classifierDict = {} self.setupData = {} - self.setupData['classifiers'] = self.classifierDict + self.setupData['classifier'] = self.classifierDict self.setupData['packages'] = {} self.loadConfigFile() @@ -878,7 +878,7 @@ fp.write('from sys import version\n') fp.write('if version < \'2.2.3\':\n') fp.write(' from distutils2.dist import DistributionMetadata\n') - fp.write(' DistributionMetadata.classifiers = None\n') + fp.write(' DistributionMetadata.classifier = None\n') fp.write(' DistributionMetadata.download_url = None\n') fp.write('setup(name = %s,\n' % repr(self.setupData['name'])) @@ -890,9 +890,9 @@ % repr(self.setupData['author_email'])) if self.setupData['url']: fp.write(' url = %s,\n' % repr(self.setupData['url'])) - if self.setupData['classifiers']: - fp.write(' classifiers = [\n') - for classifier in sorted(self.setupData['classifiers'].keys()): + if self.setupData['classifier']: + fp.write(' classifier = [\n') + for classifier in sorted(self.setupData['classifier'].keys()): fp.write(' %s,\n' % repr(classifier)) fp.write(' ],\n') if self.setupData['packages']: -- Repository URL: http://hg.python.org/distutils2 From python-checkins at python.org Wed Mar 17 02:58:36 2010 From: python-checkins at python.org (tarek.ziade) Date: Wed, 17 Mar 2010 02:58:36 +0100 Subject: [Python-checkins] distutils2: replaced a few 'distutils' instances with 'distutils2' Message-ID: tarek.ziade pushed 62471a39e9ee to distutils2: http://hg.python.org/distutils2/rev/62471a39e9ee changeset: 76:62471a39e9ee parent: 73:29e64afc676d user: Nicolas Cadou date: Mon Mar 15 20:53:10 2010 -0400 summary: replaced a few 'distutils' instances with 'distutils2' files: src/distutils2/core.py, src/distutils2/mkpkg.py diff --git a/src/distutils2/core.py b/src/distutils2/core.py --- a/src/distutils2/core.py +++ b/src/distutils2/core.py @@ -1,9 +1,9 @@ -"""distutils.core +"""distutils2.core The only module that needs to be imported to use the Distutils; provides the 'setup' function (which is to be called from the setup script). Also indirectly provides the Distribution and Command classes, although they are -really defined in distutils.dist and distutils.cmd. +really defined in distutils2.dist and distutils2.cmd. """ __revision__ = "$Id: core.py 77704 2010-01-23 09:23:15Z tarek.ziade $" @@ -15,7 +15,7 @@ DistutilsError, CCompilerError) from distutils2.util import grok_environment_error -# Mainly import these so setup scripts can "from distutils.core import" them. +# Mainly import these so setup scripts can "from distutils2.core import" them. from distutils2.dist import Distribution from distutils2.cmd import Command from distutils2.config import PyPIRCCommand @@ -76,9 +76,9 @@ will be turned into a command class, which is in turn instantiated; any class found in 'cmdclass' is used in place of the default, which is (for command 'foo_bar') class 'foo_bar' in module - 'distutils.command.foo_bar'. The command class must provide a + 'distutils2.command.foo_bar'. The command class must provide a 'user_options' attribute which is a list of option specifiers for - 'distutils.fancy_getopt'. Any command-line options between the current + 'distutils2.fancy_getopt'. Any command-line options between the current and the next command are used to set attributes of the current command object. @@ -212,7 +212,7 @@ if _setup_distribution is None: raise RuntimeError, \ - ("'distutils.core.setup()' was never called -- " + ("'distutils2.core.setup()' was never called -- " "perhaps '%s' is not a Distutils setup script?") % \ script_name diff --git a/src/distutils2/mkpkg.py b/src/distutils2/mkpkg.py --- a/src/distutils2/mkpkg.py +++ b/src/distutils2/mkpkg.py @@ -873,11 +873,11 @@ fp = open('setup.py', 'w') fp.write('#!/usr/bin/env python\n\n') - fp.write('from distutils.core import setup\n\n') + fp.write('from distutils2.core import setup\n\n') fp.write('from sys import version\n') fp.write('if version < \'2.2.3\':\n') - fp.write(' from distutils.dist import DistributionMetadata\n') + fp.write(' from distutils2.dist import DistributionMetadata\n') fp.write(' DistributionMetadata.classifiers = None\n') fp.write(' DistributionMetadata.download_url = None\n') -- Repository URL: http://hg.python.org/distutils2 From python-checkins at python.org Wed Mar 17 02:58:36 2010 From: python-checkins at python.org (tarek.ziade) Date: Wed, 17 Mar 2010 02:58:36 +0100 Subject: [Python-checkins] distutils2: normalized some metadata fields Message-ID: tarek.ziade pushed 07c81cdef27f to distutils2: http://hg.python.org/distutils2/rev/07c81cdef27f changeset: 78:07c81cdef27f user: Nicolas Cadou date: Mon Mar 15 21:53:37 2010 -0400 summary: normalized some metadata fields files: src/distutils2/metadata.py, src/distutils2/tests/test_check.py, src/distutils2/tests/test_dist.py diff --git a/src/distutils2/metadata.py b/src/distutils2/metadata.py --- a/src/distutils2/metadata.py +++ b/src/distutils2/metadata.py @@ -73,8 +73,8 @@ 'Keywords', 'Home-page', 'Author', 'Author-email', 'Maintainer', 'Maintainer-email', 'License', 'Classifier', 'Download-URL', 'Obsoletes-Dist', - 'Provides-Dist', 'Requires-Dist', 'Requires-Python', - 'Requires-External') + 'Project-URL', 'Provides-Dist', 'Requires-Dist', + 'Requires-Python', 'Requires-External') _345_MARKERS = ('Provides-Dist', 'Requires-Dist', 'Requires-Python', 'Obsoletes-Dist', 'Requires-External', 'Maintainer', @@ -124,10 +124,10 @@ 'version': 'Version', 'platform': 'Platform', 'supported_platform': 'Supported-Platform', - 'description': 'Summary', - 'long_description': 'Description', + 'summary': 'Summary', + 'description': 'Description', 'keywords': 'Keywords', - 'url': 'Home-page', + 'home_page': 'Home-page', 'author': 'Author', 'author_email': 'Author-email', 'maintainer': 'Maintainer', @@ -143,6 +143,7 @@ 'requires': 'Requires', 'provides': 'Provides', 'obsoletes': 'Obsoletes', + 'project_url': 'Project-URL', } _PREDICATE_FIELDS = ('Requires-Dist', 'Obsoletes-Dist', 'Provides-Dist') diff --git a/src/distutils2/tests/test_check.py b/src/distutils2/tests/test_check.py --- a/src/distutils2/tests/test_check.py +++ b/src/distutils2/tests/test_check.py @@ -32,7 +32,7 @@ # now let's add the required fields # and run it again, to make sure we don't get # any warning anymore - metadata = {'url': 'xxx', 'author': 'xxx', + metadata = {'home_page': 'xxx', 'author': 'xxx', 'author_email': 'xxx', 'name': 'xxx', 'version': 'xxx' } diff --git a/src/distutils2/tests/test_dist.py b/src/distutils2/tests/test_dist.py --- a/src/distutils2/tests/test_dist.py +++ b/src/distutils2/tests/test_dist.py @@ -134,8 +134,8 @@ dist = klass(attrs={'author': u'Mister Caf??', 'name': 'my.package', 'maintainer': u'Caf?? Junior', - 'description': u'Caf?? torr??fi??', - 'long_description': u'H??h??h??'}) + 'summary': u'Caf?? torr??fi??', + 'description': u'H??h??h??'}) # let's make sure the file can be written @@ -147,8 +147,8 @@ dist = klass(attrs={'author': 'Mister Cafe', 'name': 'my.package', 'maintainer': 'Cafe Junior', - 'description': 'Cafe torrefie', - 'long_description': 'Hehehe'}) + 'summary': 'Cafe torrefie', + 'description': 'Hehehe'}) my_file2 = os.path.join(tmp_dir, 'f2') dist.metadata.write_file(open(my_file, 'w')) @@ -379,26 +379,26 @@ if line.strip() != ''] self.assertTrue(len(output) > 0) - def test_long_description(self): - long_desc = textwrap.dedent("""\ + def test_description(self): + desc = textwrap.dedent("""\ example:: We start here and continue here and end here.""") attrs = {"name": "package", "version": "1.0", - "long_description": long_desc} + "description": desc} dist = distutils2.dist.Distribution(attrs) meta = self.format_metadata(dist) meta = meta.replace('\n' + 7 * ' ' + '|', '\n') - self.assertTrue(long_desc in meta) + self.assertTrue(desc in meta) def test_read_metadata(self): attrs = {"name": "package", "version": "1.0", - "long_description": "desc", - "description": "xxx", + "description": "desc", + "summary": "xxx", "download_url": "http://example.com", "keywords": ['one', 'two'], "requires_dist": ['foo']} @@ -414,7 +414,7 @@ metadata.read_file(PKG_INFO) self.assertEquals(metadata['name'], "package") self.assertEquals(metadata['version'], "1.0") - self.assertEquals(metadata['description'], "xxx") + self.assertEquals(metadata['summary'], "xxx") self.assertEquals(metadata['download_url'], 'http://example.com') self.assertEquals(metadata['keywords'], ['one', 'two']) self.assertEquals(metadata['platform'], []) -- Repository URL: http://hg.python.org/distutils2 From python-checkins at python.org Wed Mar 17 02:58:36 2010 From: python-checkins at python.org (tarek.ziade) Date: Wed, 17 Mar 2010 02:58:36 +0100 Subject: [Python-checkins] distutils2: merged Nicolas work Message-ID: tarek.ziade pushed b9f6ff62c66e to distutils2: http://hg.python.org/distutils2/rev/b9f6ff62c66e changeset: 79:b9f6ff62c66e tag: tip parent: 75:932d3aefeae4 parent: 78:07c81cdef27f user: Tarek Ziade date: Tue Mar 16 21:58:14 2010 -0400 summary: merged Nicolas work files: diff --git a/src/distutils2/command/register.py b/src/distutils2/command/register.py --- a/src/distutils2/command/register.py +++ b/src/distutils2/command/register.py @@ -239,7 +239,7 @@ 'description': meta['Description'], 'keywords': meta['Keywords'], 'platform': meta['Platform'], - 'classifiers': meta['Classifier'], + 'classifier': meta['Classifier'], 'download_url': meta['Download-URL'], #'provides': meta['Provides'], #'requires': meta['Requires'], diff --git a/src/distutils2/core.py b/src/distutils2/core.py --- a/src/distutils2/core.py +++ b/src/distutils2/core.py @@ -1,9 +1,9 @@ -"""distutils.core +"""distutils2.core The only module that needs to be imported to use the Distutils; provides the 'setup' function (which is to be called from the setup script). Also indirectly provides the Distribution and Command classes, although they are -really defined in distutils.dist and distutils.cmd. +really defined in distutils2.dist and distutils2.cmd. """ __revision__ = "$Id: core.py 77704 2010-01-23 09:23:15Z tarek.ziade $" @@ -15,7 +15,7 @@ DistutilsError, CCompilerError) from distutils2.util import grok_environment_error -# Mainly import these so setup scripts can "from distutils.core import" them. +# Mainly import these so setup scripts can "from distutils2.core import" them. from distutils2.dist import Distribution from distutils2.cmd import Command from distutils2.config import PyPIRCCommand @@ -76,9 +76,9 @@ will be turned into a command class, which is in turn instantiated; any class found in 'cmdclass' is used in place of the default, which is (for command 'foo_bar') class 'foo_bar' in module - 'distutils.command.foo_bar'. The command class must provide a + 'distutils2.command.foo_bar'. The command class must provide a 'user_options' attribute which is a list of option specifiers for - 'distutils.fancy_getopt'. Any command-line options between the current + 'distutils2.fancy_getopt'. Any command-line options between the current and the next command are used to set attributes of the current command object. @@ -212,7 +212,7 @@ if _setup_distribution is None: raise RuntimeError, \ - ("'distutils.core.setup()' was never called -- " + ("'distutils2.core.setup()' was never called -- " "perhaps '%s' is not a Distutils setup script?") % \ script_name diff --git a/src/distutils2/dist.py b/src/distutils2/dist.py --- a/src/distutils2/dist.py +++ b/src/distutils2/dist.py @@ -101,7 +101,7 @@ "print the long package description"), ('platforms', None, "print the list of platforms"), - ('classifiers', None, + ('classifier', None, "print the list of classifiers"), ('keywords', None, "print the list of keywords"), @@ -672,7 +672,7 @@ value = self.metadata[opt] if opt in ['keywords', 'platform']: print(','.join(value)) - elif opt in ('classifiers', 'provides', 'requires', + elif opt in ('classifier', 'provides', 'requires', 'obsoletes'): print('\n'.join(value)) else: diff --git a/src/distutils2/metadata.py b/src/distutils2/metadata.py --- a/src/distutils2/metadata.py +++ b/src/distutils2/metadata.py @@ -73,8 +73,8 @@ 'Keywords', 'Home-page', 'Author', 'Author-email', 'Maintainer', 'Maintainer-email', 'License', 'Classifier', 'Download-URL', 'Obsoletes-Dist', - 'Provides-Dist', 'Requires-Dist', 'Requires-Python', - 'Requires-External') + 'Project-URL', 'Provides-Dist', 'Requires-Dist', + 'Requires-Python', 'Requires-External') _345_MARKERS = ('Provides-Dist', 'Requires-Dist', 'Requires-Python', 'Obsoletes-Dist', 'Requires-External', 'Maintainer', @@ -124,10 +124,10 @@ 'version': 'Version', 'platform': 'Platform', 'supported_platform': 'Supported-Platform', - 'description': 'Summary', - 'long_description': 'Description', + 'summary': 'Summary', + 'description': 'Description', 'keywords': 'Keywords', - 'url': 'Home-page', + 'home_page': 'Home-page', 'author': 'Author', 'author_email': 'Author-email', 'maintainer': 'Maintainer', @@ -143,6 +143,7 @@ 'requires': 'Requires', 'provides': 'Provides', 'obsoletes': 'Obsoletes', + 'project_url': 'Project-URL', } _PREDICATE_FIELDS = ('Requires-Dist', 'Obsoletes-Dist', 'Provides-Dist') diff --git a/src/distutils2/mkpkg.py b/src/distutils2/mkpkg.py --- a/src/distutils2/mkpkg.py +++ b/src/distutils2/mkpkg.py @@ -678,7 +678,7 @@ self.config = None self.classifierDict = {} self.setupData = {} - self.setupData['classifiers'] = self.classifierDict + self.setupData['classifier'] = self.classifierDict self.setupData['packages'] = {} self.loadConfigFile() @@ -873,12 +873,12 @@ fp = open('setup.py', 'w') fp.write('#!/usr/bin/env python\n\n') - fp.write('from distutils.core import setup\n\n') + fp.write('from distutils2.core import setup\n\n') fp.write('from sys import version\n') fp.write('if version < \'2.2.3\':\n') - fp.write(' from distutils.dist import DistributionMetadata\n') - fp.write(' DistributionMetadata.classifiers = None\n') + fp.write(' from distutils2.dist import DistributionMetadata\n') + fp.write(' DistributionMetadata.classifier = None\n') fp.write(' DistributionMetadata.download_url = None\n') fp.write('setup(name = %s,\n' % repr(self.setupData['name'])) @@ -890,9 +890,9 @@ % repr(self.setupData['author_email'])) if self.setupData['url']: fp.write(' url = %s,\n' % repr(self.setupData['url'])) - if self.setupData['classifiers']: - fp.write(' classifiers = [\n') - for classifier in sorted(self.setupData['classifiers'].keys()): + if self.setupData['classifier']: + fp.write(' classifier = [\n') + for classifier in sorted(self.setupData['classifier'].keys()): fp.write(' %s,\n' % repr(classifier)) fp.write(' ],\n') if self.setupData['packages']: diff --git a/src/distutils2/tests/test_check.py b/src/distutils2/tests/test_check.py --- a/src/distutils2/tests/test_check.py +++ b/src/distutils2/tests/test_check.py @@ -32,7 +32,7 @@ # now let's add the required fields # and run it again, to make sure we don't get # any warning anymore - metadata = {'url': 'xxx', 'author': 'xxx', + metadata = {'home_page': 'xxx', 'author': 'xxx', 'author_email': 'xxx', 'name': 'xxx', 'version': 'xxx' } diff --git a/src/distutils2/tests/test_dist.py b/src/distutils2/tests/test_dist.py --- a/src/distutils2/tests/test_dist.py +++ b/src/distutils2/tests/test_dist.py @@ -134,8 +134,8 @@ dist = klass(attrs={'author': u'Mister Caf??', 'name': 'my.package', 'maintainer': u'Caf?? Junior', - 'description': u'Caf?? torr??fi??', - 'long_description': u'H??h??h??'}) + 'summary': u'Caf?? torr??fi??', + 'description': u'H??h??h??'}) # let's make sure the file can be written @@ -147,8 +147,8 @@ dist = klass(attrs={'author': 'Mister Cafe', 'name': 'my.package', 'maintainer': 'Cafe Junior', - 'description': 'Cafe torrefie', - 'long_description': 'Hehehe'}) + 'summary': 'Cafe torrefie', + 'description': 'Hehehe'}) my_file2 = os.path.join(tmp_dir, 'f2') dist.metadata.write_file(open(my_file, 'w')) @@ -379,26 +379,26 @@ if line.strip() != ''] self.assertTrue(len(output) > 0) - def test_long_description(self): - long_desc = textwrap.dedent("""\ + def test_description(self): + desc = textwrap.dedent("""\ example:: We start here and continue here and end here.""") attrs = {"name": "package", "version": "1.0", - "long_description": long_desc} + "description": desc} dist = distutils2.dist.Distribution(attrs) meta = self.format_metadata(dist) meta = meta.replace('\n' + 7 * ' ' + '|', '\n') - self.assertTrue(long_desc in meta) + self.assertTrue(desc in meta) def test_read_metadata(self): attrs = {"name": "package", "version": "1.0", - "long_description": "desc", - "description": "xxx", + "description": "desc", + "summary": "xxx", "download_url": "http://example.com", "keywords": ['one', 'two'], "requires_dist": ['foo']} @@ -414,7 +414,7 @@ metadata.read_file(PKG_INFO) self.assertEquals(metadata['name'], "package") self.assertEquals(metadata['version'], "1.0") - self.assertEquals(metadata['description'], "xxx") + self.assertEquals(metadata['summary'], "xxx") self.assertEquals(metadata['download_url'], 'http://example.com') self.assertEquals(metadata['keywords'], ['one', 'two']) self.assertEquals(metadata['platform'], []) -- Repository URL: http://hg.python.org/distutils2 From python-checkins at python.org Wed Mar 17 03:02:30 2010 From: python-checkins at python.org (collin.winter) Date: Wed, 17 Mar 2010 03:02:30 +0100 (CET) Subject: [Python-checkins] r79013 - python/trunk/Lib/test/regrtest.py Message-ID: <20100317020230.D58FAFA0E@mail.python.org> Author: collin.winter Date: Wed Mar 17 03:02:30 2010 New Revision: 79013 Log: Fix a trivial class of (hypothetical, future) false-positive refleaks, discovered by an optimization in Unladen Swallow's past (which will become CPython's future). Modified: python/trunk/Lib/test/regrtest.py Modified: python/trunk/Lib/test/regrtest.py ============================================================================== --- python/trunk/Lib/test/regrtest.py (original) +++ python/trunk/Lib/test/regrtest.py Wed Mar 17 03:02:30 2010 @@ -993,12 +993,13 @@ print >> sys.stderr, ("1234567890"*(repcount//10 + 1))[:repcount] dash_R_cleanup(fs, ps, pic, zdc, abcs) for i in range(repcount): - rc = sys.gettotalrefcount() + rc_before = sys.gettotalrefcount() run_the_test() sys.stderr.write('.') dash_R_cleanup(fs, ps, pic, zdc, abcs) + rc_after = sys.gettotalrefcount() if i >= nwarmup: - deltas.append(sys.gettotalrefcount() - rc - 2) + deltas.append(rc_after - rc_before) print >> sys.stderr if any(deltas): msg = '%s leaked %s references, sum=%s' % (test, deltas, sum(deltas)) From python-checkins at python.org Wed Mar 17 03:08:57 2010 From: python-checkins at python.org (collin.winter) Date: Wed, 17 Mar 2010 03:08:57 +0100 (CET) Subject: [Python-checkins] r79014 - python/branches/py3k/Lib/test/regrtest.py Message-ID: <20100317020857.6240BFB27@mail.python.org> Author: collin.winter Date: Wed Mar 17 03:08:57 2010 New Revision: 79014 Log: Merged revisions 79013 via svnmerge from svn+ssh://pythondev at svn.python.org/python/trunk ........ r79013 | collin.winter | 2010-03-16 19:02:30 -0700 (Tue, 16 Mar 2010) | 1 line Fix a trivial class of (hypothetical, future) false-positive refleaks, discovered by an optimization in Unladen Swallow's past (which will become CPython's future). ........ Modified: python/branches/py3k/Lib/test/regrtest.py Modified: python/branches/py3k/Lib/test/regrtest.py ============================================================================== --- python/branches/py3k/Lib/test/regrtest.py (original) +++ python/branches/py3k/Lib/test/regrtest.py Wed Mar 17 03:08:57 2010 @@ -1010,13 +1010,14 @@ sys.stderr.flush() dash_R_cleanup(fs, ps, pic, zdc, abcs) for i in range(repcount): - rc = sys.gettotalrefcount() + rc_before = sys.gettotalrefcount() run_the_test() sys.stderr.write('.') sys.stderr.flush() dash_R_cleanup(fs, ps, pic, zdc, abcs) + rc_after = sys.gettotalrefcount() if i >= nwarmup: - deltas.append(sys.gettotalrefcount() - rc - 2) + deltas.append(rc_after - rc_before) print(file=sys.stderr) if any(deltas): msg = '%s leaked %s references, sum=%s' % (test, deltas, sum(deltas)) From python-checkins at python.org Wed Mar 17 03:09:33 2010 From: python-checkins at python.org (collin.winter) Date: Wed, 17 Mar 2010 03:09:33 +0100 (CET) Subject: [Python-checkins] r79015 - python/branches/py3k-jit/JIT_TODO.txt Message-ID: <20100317020933.2BC1FFBA0@mail.python.org> Author: collin.winter Date: Wed Mar 17 03:09:33 2010 New Revision: 79015 Log: Mark 'import r835' as done. Modified: python/branches/py3k-jit/JIT_TODO.txt Modified: python/branches/py3k-jit/JIT_TODO.txt ============================================================================== --- python/branches/py3k-jit/JIT_TODO.txt (original) +++ python/branches/py3k-jit/JIT_TODO.txt Wed Mar 17 03:09:33 2010 @@ -13,7 +13,6 @@ - r953 - r900 - r888 - - r835 - r834 - r823 - r799 @@ -45,6 +44,7 @@ DONE: - Import non-JIT related revisions into py3k, merge to py3k-jit: Relevant revisions: + - r835 (r79013, r79014) - r815 (Lib/test/test_dynamic.py, Lib/test/support.py; r79009) - r563 (r72777, r72778) - r268 (r70672, r70673) From python-checkins at python.org Wed Mar 17 03:40:12 2010 From: python-checkins at python.org (collin.winter) Date: Wed, 17 Mar 2010 03:40:12 +0100 (CET) Subject: [Python-checkins] r79016 - python/trunk/Lib/test/test_import.py Message-ID: <20100317024012.C4A2BF670@mail.python.org> Author: collin.winter Date: Wed Mar 17 03:40:12 2010 New Revision: 79016 Log: Style cleanup in test_import. Modified: python/trunk/Lib/test/test_import.py Modified: python/trunk/Lib/test/test_import.py ============================================================================== --- python/trunk/Lib/test/test_import.py (original) +++ python/trunk/Lib/test/test_import.py Wed Mar 17 03:40:12 2010 @@ -1,13 +1,14 @@ -import unittest +import __builtin__ +import imp +import marshal import os -import stat +import py_compile import random import shutil +import stat import sys -import py_compile +import unittest import warnings -import marshal -import imp from test.test_support import (unlink, TESTFN, unload, run_unittest, check_warnings, TestFailed, EnvironmentVarGuard) @@ -22,11 +23,11 @@ os.remove(f) -class ImportTest(unittest.TestCase): +class ImportTests(unittest.TestCase): - def testCaseSensitivity(self): - # Brief digression to test that import is case-sensitive: if we got this - # far, we know for sure that "random" exists. + def test_case_sensitivity(self): + # Brief digression to test that import is case-sensitive: if we got + # this far, we know for sure that "random" exists. try: import RAnDoM except ImportError: @@ -34,13 +35,14 @@ else: self.fail("import of RAnDoM should have failed (case mismatch)") - def testDoubleConst(self): - # Another brief digression to test the accuracy of manifest float constants. + def test_double_const(self): + # Another brief digression to test the accuracy of manifest float + # constants. from test import double_const # don't blink -- that *was* the test - def testImport(self): + def test_import(self): def test_with_extension(ext): - # ext normally ".py"; perhaps ".pyw" + # The extension is normally ".py", perhaps ".pyw". source = TESTFN + ext pyo = TESTFN + os.extsep + "pyo" if sys.platform.startswith('java'): @@ -48,13 +50,13 @@ else: pyc = TESTFN + os.extsep + "pyc" - f = open(source, "w") - print >> f, "# This tests Python's ability to import a", ext, "file." - a = random.randrange(1000) - b = random.randrange(1000) - print >> f, "a =", a - print >> f, "b =", b - f.close() + with open(source, "w") as f: + print >> f, ("# This tests Python's ability to import a", ext, + "file.") + a = random.randrange(1000) + b = random.randrange(1000) + print >> f, "a =", a + print >> f, "b =", b try: mod = __import__(TESTFN) @@ -87,7 +89,7 @@ try: test_with_extension(os.extsep + "py") if sys.platform.startswith("win"): - for ext in ".PY", ".Py", ".pY", ".pyw", ".PYW", ".pYw": + for ext in [".PY", ".Py", ".pY", ".pyw", ".PYW", ".pYw"]: test_with_extension(ext) finally: del sys.path[0] @@ -118,7 +120,7 @@ if TESTFN in sys.modules: del sys.modules[TESTFN] del sys.path[0] - def testImpModule(self): + def test_imp_module(self): # Verify that the imp module can correctly load and find .py files # XXX (ncoghlan): It would be nice to use test_support.CleanImport @@ -138,30 +140,28 @@ self.assertIsNot(orig_getenv, new_os.getenv) def test_module_with_large_stack(self, module='longlist'): - # create module w/list of 65000 elements to test bug #561858 + # Regression test for http://bugs.python.org/issue561858. filename = module + os.extsep + 'py' - # create a file with a list of 65000 elements - f = open(filename, 'w+') - f.write('d = [\n') - for i in range(65000): - f.write('"",\n') - f.write(']') - f.close() - - # compile & remove .py file, we only need .pyc (or .pyo) - f = open(filename, 'r') - py_compile.compile(filename) - f.close() + # Create a file with a list of 65000 elements. + with open(filename, 'w+') as f: + f.write('d = [\n') + for i in range(65000): + f.write('"",\n') + f.write(']') + + # Compile & remove .py file, we only need .pyc (or .pyo). + with open(filename, 'r') as f: + py_compile.compile(filename) os.unlink(filename) - # need to be able to load from current dir + # Need to be able to load from current dir. sys.path.append('') - # this used to crash + # This used to crash. exec 'import ' + module - # cleanup + # Cleanup. del sys.path[-1] for ext in 'pyc', 'pyo': fname = module + os.extsep + ext @@ -170,15 +170,14 @@ def test_failing_import_sticks(self): source = TESTFN + os.extsep + "py" - f = open(source, "w") - print >> f, "a = 1 // 0" - f.close() + with open(source, "w") as f: + print >> f, "a = 1 // 0" # New in 2.4, we shouldn't be able to import that no matter how often # we try. sys.path.insert(0, os.curdir) try: - for i in 1, 2, 3: + for i in [1, 2, 3]: try: mod = __import__(TESTFN) except ZeroDivisionError: @@ -193,10 +192,9 @@ def test_failing_reload(self): # A failing reload should leave the module object in sys.modules. source = TESTFN + os.extsep + "py" - f = open(source, "w") - print >> f, "a = 1" - print >> f, "b = 2" - f.close() + with open(source, "w") as f: + print >> f, "a = 1" + print >> f, "b = 2" sys.path.insert(0, os.curdir) try: @@ -212,16 +210,15 @@ remove_files(TESTFN) # Now damage the module. - f = open(source, "w") - print >> f, "a = 10" - print >> f, "b = 20//0" - f.close() + with open(source, "w") as f: + print >> f, "a = 10" + print >> f, "b = 20//0" self.assertRaises(ZeroDivisionError, imp.reload, mod) # But we still expect the module to be in sys.modules. mod = sys.modules.get(TESTFN) - self.assertFalse(mod is None, "expected module to still be in sys.modules") + self.assertFalse(mod is None, "expected module to be in sys.modules") # We should have replaced a w/ 10, but the old b value should # stick. @@ -235,8 +232,8 @@ del sys.modules[TESTFN] def test_infinite_reload(self): - # Bug #742342 reports that Python segfaults (infinite recursion in C) - # when faced with self-recursive reload()ing. + # http://bugs.python.org/issue742342 reports that Python segfaults + # (infinite recursion in C) when faced with self-recursive reload()ing. sys.path.insert(0, os.path.dirname(__file__)) try: @@ -245,13 +242,13 @@ sys.path.pop(0) def test_import_name_binding(self): - # import x.y.z binds x in the current namespace + # import x.y.z binds x in the current namespace. import test as x import test.test_support self.assertTrue(x is test, x.__name__) self.assertTrue(hasattr(test.test_support, "__file__")) - # import x.y.z as w binds z as w + # import x.y.z as w binds z as w. import test.test_support as y self.assertTrue(y is test.test_support, y.__name__) @@ -262,7 +259,7 @@ warnings.simplefilter('error', ImportWarning) self.assertRaises(ImportWarning, __import__, "site-packages") - def test_importbyfilename(self): + def test_import_by_filename(self): path = os.path.abspath(TESTFN) try: __import__(path) @@ -273,7 +270,7 @@ self.fail("import by path didn't raise an exception") -class TestPycRewriting(unittest.TestCase): +class PycRewritingTests(unittest.TestCase): # Test that the `co_filename` attribute on code objects always points # to the right file, even when various things happen (e.g. both the .py # and the .pyc file are renamed). @@ -364,6 +361,7 @@ mod = self.import_module() self.assertEqual(mod.constant.co_filename, foreign_code.co_filename) + class PathsTests(unittest.TestCase): path = TESTFN @@ -375,22 +373,20 @@ shutil.rmtree(self.path) sys.path[:] = self.syspath - # http://bugs.python.org/issue1293 + # Regression test for http://bugs.python.org/issue1293. def test_trailing_slash(self): - f = open(os.path.join(self.path, 'test_trailing_slash.py'), 'w') - f.write("testdata = 'test_trailing_slash'") - f.close() + with open(os.path.join(self.path, 'test_trailing_slash.py'), 'w') as f: + f.write("testdata = 'test_trailing_slash'") sys.path.append(self.path+'/') mod = __import__("test_trailing_slash") self.assertEqual(mod.testdata, 'test_trailing_slash') unload("test_trailing_slash") - # http://bugs.python.org/issue3677 + # Regression test for http://bugs.python.org/issue3677. def _test_UNC_path(self): - f = open(os.path.join(self.path, 'test_trailing_slash.py'), 'w') - f.write("testdata = 'test_trailing_slash'") - f.close() - #create the UNC path, like \\myhost\c$\foo\bar + with open(os.path.join(self.path, 'test_trailing_slash.py'), 'w') as f: + f.write("testdata = 'test_trailing_slash'") + # Create the UNC path, like \\myhost\c$\foo\bar. path = os.path.abspath(self.path) import socket hn = socket.gethostname() @@ -406,7 +402,7 @@ test_UNC_path = _test_UNC_path -class RelativeImport(unittest.TestCase): +class RelativeImportTests(unittest.TestCase): def tearDown(self): try: del sys.modules["test.relimport"] @@ -416,21 +412,25 @@ def test_relimport_star(self): # This will import * from .test_import. from . import relimport - self.assertTrue(hasattr(relimport, "RelativeImport")) + self.assertTrue(hasattr(relimport, "RelativeImportTests")) def test_issue3221(self): + # Regression test for http://bugs.python.org/issue3221. def check_absolute(): exec "from os import path" in ns def check_relative(): exec "from . import relimport" in ns + # Check both OK with __package__ and __name__ correct ns = dict(__package__='test', __name__='test.notarealmodule') check_absolute() check_relative() + # Check both OK with only __name__ wrong ns = dict(__package__='test', __name__='notarealpkg.notarealmodule') check_absolute() check_relative() + # Check relative fails with only __package__ wrong ns = dict(__package__='foo', __name__='test.notarealmodule') with check_warnings() as w: @@ -438,6 +438,7 @@ self.assertIn('foo', str(w.message)) self.assertEqual(w.category, RuntimeWarning) self.assertRaises(SystemError, check_relative) + # Check relative fails with __package__ and __name__ wrong ns = dict(__package__='foo', __name__='notarealpkg.notarealmodule') with check_warnings() as w: @@ -445,15 +446,17 @@ self.assertIn('foo', str(w.message)) self.assertEqual(w.category, RuntimeWarning) self.assertRaises(SystemError, check_relative) + # Check both fail with package set to a non-string ns = dict(__package__=object()) self.assertRaises(ValueError, check_absolute) self.assertRaises(ValueError, check_relative) + def test_main(verbose=None): - run_unittest(ImportTest, TestPycRewriting, PathsTests, RelativeImport) + run_unittest(ImportTests, PycRewritingTests, PathsTests, RelativeImportTests) if __name__ == '__main__': - # test needs to be a package, so we can do relative import + # Test needs to be a package, so we can do relative imports. from test.test_import import test_main test_main() From python-checkins at python.org Wed Mar 17 03:51:00 2010 From: python-checkins at python.org (collin.winter) Date: Wed, 17 Mar 2010 03:51:00 +0100 (CET) Subject: [Python-checkins] r79017 - python/branches/py3k Message-ID: <20100317025100.C7535FC0B@mail.python.org> Author: collin.winter Date: Wed Mar 17 03:51:00 2010 New Revision: 79017 Log: Commit missing merge info from r79014. Modified: python/branches/py3k/ (props changed) From python-checkins at python.org Wed Mar 17 04:04:01 2010 From: python-checkins at python.org (collin.winter) Date: Wed, 17 Mar 2010 04:04:01 +0100 (CET) Subject: [Python-checkins] r79018 - python/trunk/Lib/test/test_import.py Message-ID: <20100317030401.6A855F8E0@mail.python.org> Author: collin.winter Date: Wed Mar 17 04:04:01 2010 New Revision: 79018 Log: Delete unused import. Modified: python/trunk/Lib/test/test_import.py Modified: python/trunk/Lib/test/test_import.py ============================================================================== --- python/trunk/Lib/test/test_import.py (original) +++ python/trunk/Lib/test/test_import.py Wed Mar 17 04:04:01 2010 @@ -1,4 +1,3 @@ -import __builtin__ import imp import marshal import os From python-checkins at python.org Wed Mar 17 04:09:22 2010 From: python-checkins at python.org (collin.winter) Date: Wed, 17 Mar 2010 04:09:22 +0100 (CET) Subject: [Python-checkins] r79019 - in python/branches/py3k: Lib/test/test_import.py Message-ID: <20100317030922.2EA6EFC11@mail.python.org> Author: collin.winter Date: Wed Mar 17 04:09:21 2010 New Revision: 79019 Log: Merged revisions 79016 via svnmerge from svn+ssh://pythondev at svn.python.org/python/trunk ........ r79016 | collin.winter | 2010-03-16 19:40:12 -0700 (Tue, 16 Mar 2010) | 1 line Style cleanup in test_import. ........ Modified: python/branches/py3k/ (props changed) python/branches/py3k/Lib/test/test_import.py Modified: python/branches/py3k/Lib/test/test_import.py ============================================================================== --- python/branches/py3k/Lib/test/test_import.py (original) +++ python/branches/py3k/Lib/test/test_import.py Wed Mar 17 04:09:21 2010 @@ -1,13 +1,13 @@ -import unittest +import imp +import marshal import os -import stat +import py_compile import random import shutil +import stat import sys -import py_compile +import unittest import warnings -import imp -import marshal from test.support import (unlink, TESTFN, unload, run_unittest, TestFailed, EnvironmentVarGuard) @@ -22,11 +22,11 @@ os.remove(f) -class ImportTest(unittest.TestCase): +class ImportTests(unittest.TestCase): - def testCaseSensitivity(self): - # Brief digression to test that import is case-sensitive: if we got this - # far, we know for sure that "random" exists. + def test_case_sensitivity(self): + # Brief digression to test that import is case-sensitive: if we got + # this far, we know for sure that "random" exists. try: import RAnDoM except ImportError: @@ -34,13 +34,14 @@ else: self.fail("import of RAnDoM should have failed (case mismatch)") - def testDoubleConst(self): - # Another brief digression to test the accuracy of manifest float constants. + def test_double_const(self): + # Another brief digression to test the accuracy of manifest float + # constants. from test import double_const # don't blink -- that *was* the test - def testImport(self): + def test_import(self): def test_with_extension(ext): - # ext normally ".py"; perhaps ".pyw" + # The extension is normally ".py", perhaps ".pyw". source = TESTFN + ext pyo = TESTFN + ".pyo" if sys.platform.startswith('java'): @@ -49,7 +50,8 @@ pyc = TESTFN + ".pyc" with open(source, "w") as f: - print("# This tests Python's ability to import a", ext, "file.", file=f) + print("# This tests Python's ability to import a", ext, "file.", + file=f) a = random.randrange(1000) b = random.randrange(1000) print("a =", a, file=f) @@ -77,7 +79,7 @@ try: test_with_extension(".py") if sys.platform.startswith("win"): - for ext in ".PY", ".Py", ".pY", ".pyw", ".PYW", ".pYw": + for ext in [".PY", ".Py", ".pY", ".pyw", ".PYW", ".pYw"]: test_with_extension(ext) finally: del sys.path[0] @@ -108,7 +110,7 @@ if TESTFN in sys.modules: del sys.modules[TESTFN] del sys.path[0] - def testImpModule(self): + def test_imp_module(self): # Verify that the imp module can correctly load and find .py files import imp, os # XXX (ncoghlan): It would be nice to use test_support.CleanImport @@ -128,30 +130,28 @@ self.assertIsNot(orig_getenv, new_os.getenv) def test_module_with_large_stack(self, module='longlist'): - # create module w/list of 65000 elements to test bug #561858 + # Regression test for http://bugs.python.org/issue561858. filename = module + '.py' - # create a file with a list of 65000 elements - f = open(filename, 'w+') - f.write('d = [\n') - for i in range(65000): - f.write('"",\n') - f.write(']') - f.close() - - # compile & remove .py file, we only need .pyc (or .pyo) - f = open(filename, 'r') - py_compile.compile(filename) - f.close() + # Create a file with a list of 65000 elements. + with open(filename, 'w+') as f: + f.write('d = [\n') + for i in range(65000): + f.write('"",\n') + f.write(']') + + # Compile & remove .py file, we only need .pyc (or .pyo). + with open(filename, 'r') as f: + py_compile.compile(filename) os.unlink(filename) - # need to be able to load from current dir + # Need to be able to load from current dir. sys.path.append('') - # this used to crash + # This used to crash. exec('import ' + module) - # cleanup + # Cleanup. del sys.path[-1] for ext in '.pyc', '.pyo': fname = module + ext @@ -160,9 +160,8 @@ def test_failing_import_sticks(self): source = TESTFN + ".py" - f = open(source, "w") - print("a = 1/0", file=f) - f.close() + with open(source, "w") as f: + print("a = 1/0", file=f) # New in 2.4, we shouldn't be able to import that no matter how often # we try. @@ -170,7 +169,7 @@ if TESTFN in sys.modules: del sys.modules[TESTFN] try: - for i in 1, 2, 3: + for i in [1, 2, 3]: try: mod = __import__(TESTFN) except ZeroDivisionError: @@ -202,7 +201,7 @@ def test_failing_reload(self): # A failing reload should leave the module object in sys.modules. - source = TESTFN + ".py" + source = TESTFN + os.extsep + "py" with open(source, "w") as f: f.write("a = 1\nb=2\n") @@ -226,7 +225,7 @@ self.assertRaises(ZeroDivisionError, imp.reload, mod) # But we still expect the module to be in sys.modules. mod = sys.modules.get(TESTFN) - self.assertFalse(mod is None, "expected module to still be in sys.modules") + self.assertFalse(mod is None, "expected module to be in sys.modules") # We should have replaced a w/ 10, but the old b value should # stick. @@ -260,8 +259,7 @@ if TESTFN in sys.modules: del sys.modules[TESTFN] - - def test_importbyfilename(self): + def test_import_by_filename(self): path = os.path.abspath(TESTFN) try: __import__(path) @@ -271,7 +269,7 @@ self.fail("import by path didn't raise an exception") -class TestPycRewriting(unittest.TestCase): +class PycRewritingTests(unittest.TestCase): # Test that the `co_filename` attribute on code objects always points # to the right file, even when various things happen (e.g. both the .py # and the .pyc file are renamed). @@ -363,6 +361,7 @@ mod = self.import_module() self.assertEqual(mod.constant.co_filename, foreign_code.co_filename) + class PathsTests(unittest.TestCase): SAMPLES = ('test', 'test\u00e4\u00f6\u00fc\u00df', 'test\u00e9\u00e8', 'test\u00b0\u00b3\u00b2') @@ -376,22 +375,20 @@ shutil.rmtree(self.path) sys.path[:] = self.syspath - # http://bugs.python.org/issue1293 + # Regression test for http://bugs.python.org/issue1293. def test_trailing_slash(self): - f = open(os.path.join(self.path, 'test_trailing_slash.py'), 'w') - f.write("testdata = 'test_trailing_slash'") - f.close() + with open(os.path.join(self.path, 'test_trailing_slash.py'), 'w') as f: + f.write("testdata = 'test_trailing_slash'") sys.path.append(self.path+'/') mod = __import__("test_trailing_slash") self.assertEqual(mod.testdata, 'test_trailing_slash') unload("test_trailing_slash") - # http://bugs.python.org/issue3677 + # Regression test for http://bugs.python.org/issue3677. def _test_UNC_path(self): - f = open(os.path.join(self.path, 'test_trailing_slash.py'), 'w') - f.write("testdata = 'test_trailing_slash'") - f.close() - #create the UNC path, like \\myhost\c$\foo\bar + with open(os.path.join(self.path, 'test_trailing_slash.py'), 'w') as f: + f.write("testdata = 'test_trailing_slash'") + # Create the UNC path, like \\myhost\c$\foo\bar. path = os.path.abspath(self.path) import socket hn = socket.gethostname() @@ -407,7 +404,7 @@ test_UNC_path = _test_UNC_path -class RelativeImport(unittest.TestCase): +class RelativeImportTests(unittest.TestCase): def tearDown(self): try: del sys.modules["test.relimport"] @@ -417,34 +414,42 @@ def test_relimport_star(self): # This will import * from .test_import. from . import relimport - self.assertTrue(hasattr(relimport, "RelativeImport")) + self.assertTrue(hasattr(relimport, "RelativeImportTests")) def test_issue3221(self): # Note for mergers: the 'absolute' tests from the 2.x branch # are missing in Py3k because implicit relative imports are # a thing of the past + # + # Regression test for http://bugs.python.org/issue3221. def check_relative(): exec("from . import relimport", ns) + # Check relative import OK with __package__ and __name__ correct ns = dict(__package__='test', __name__='test.notarealmodule') check_relative() + # Check relative import OK with only __name__ wrong ns = dict(__package__='test', __name__='notarealpkg.notarealmodule') check_relative() + # Check relative import fails with only __package__ wrong ns = dict(__package__='foo', __name__='test.notarealmodule') self.assertRaises(SystemError, check_relative) + # Check relative import fails with __package__ and __name__ wrong ns = dict(__package__='foo', __name__='notarealpkg.notarealmodule') self.assertRaises(SystemError, check_relative) + # Check relative import fails with package set to a non-string ns = dict(__package__=object()) self.assertRaises(ValueError, check_relative) + def test_main(verbose=None): - run_unittest(ImportTest, TestPycRewriting, PathsTests, RelativeImport) + run_unittest(ImportTests, PycRewritingTests, PathsTests, RelativeImportTests) if __name__ == '__main__': - # test needs to be a package, so we can do relative import + # Test needs to be a package, so we can do relative imports. from test.test_import import test_main test_main() From python-checkins at python.org Wed Mar 17 04:14:31 2010 From: python-checkins at python.org (collin.winter) Date: Wed, 17 Mar 2010 04:14:31 +0100 (CET) Subject: [Python-checkins] r79020 - python/branches/py3k/Lib/test/test_import.py Message-ID: <20100317031431.4C2F3E0A6@mail.python.org> Author: collin.winter Date: Wed Mar 17 04:14:31 2010 New Revision: 79020 Log: Add tests for overriding and shadowing __import__; these are a useful tripwire for an incoming JIT optimization. Modified: python/branches/py3k/Lib/test/test_import.py Modified: python/branches/py3k/Lib/test/test_import.py ============================================================================== --- python/branches/py3k/Lib/test/test_import.py (original) +++ python/branches/py3k/Lib/test/test_import.py Wed Mar 17 04:14:31 2010 @@ -1,3 +1,4 @@ +import builtins import imp import marshal import os @@ -9,7 +10,7 @@ import unittest import warnings from test.support import (unlink, TESTFN, unload, run_unittest, - TestFailed, EnvironmentVarGuard) + TestFailed, EnvironmentVarGuard, swap_attr, swap_item) def remove_files(name): @@ -446,8 +447,29 @@ self.assertRaises(ValueError, check_relative) +class OverridingImportBuiltinTests(unittest.TestCase): + def test_override_builtin(self): + # Test that overriding builtins.__import__ can bypass sys.modules. + import os + + def foo(): + import os + return os + self.assertEqual(foo(), os) # Quick sanity check. + + with swap_attr(builtins, "__import__", lambda *x: 5): + self.assertEqual(foo(), 5) + + # Test what happens when we shadow __import__ in globals(); this + # currently does not impact the import process, but if this changes, + # other code will need to change, so keep this test as a tripwire. + with swap_item(globals(), "__import__", lambda *x: 5): + self.assertEqual(foo(), os) + + def test_main(verbose=None): - run_unittest(ImportTests, PycRewritingTests, PathsTests, RelativeImportTests) + run_unittest(ImportTests, PycRewritingTests, PathsTests, RelativeImportTests, + OverridingImportBuiltinTests) if __name__ == '__main__': # Test needs to be a package, so we can do relative imports. From python-checkins at python.org Wed Mar 17 04:15:35 2010 From: python-checkins at python.org (collin.winter) Date: Wed, 17 Mar 2010 04:15:35 +0100 (CET) Subject: [Python-checkins] r79021 - python/branches/py3k-jit/JIT_TODO.txt Message-ID: <20100317031535.0FF17FA0E@mail.python.org> Author: collin.winter Date: Wed Mar 17 04:15:34 2010 New Revision: 79021 Log: Mark 'import r888' as done. Modified: python/branches/py3k-jit/JIT_TODO.txt Modified: python/branches/py3k-jit/JIT_TODO.txt ============================================================================== --- python/branches/py3k-jit/JIT_TODO.txt (original) +++ python/branches/py3k-jit/JIT_TODO.txt Wed Mar 17 04:15:34 2010 @@ -12,7 +12,6 @@ - r1017 - r953 - r900 - - r888 - r834 - r823 - r799 @@ -44,6 +43,7 @@ DONE: - Import non-JIT related revisions into py3k, merge to py3k-jit: Relevant revisions: + - r888 (r79016, r79019; r79020) - r835 (r79013, r79014) - r815 (Lib/test/test_dynamic.py, Lib/test/support.py; r79009) - r563 (r72777, r72778) From python-checkins at python.org Wed Mar 17 04:30:15 2010 From: python-checkins at python.org (benjamin.peterson) Date: Wed, 17 Mar 2010 04:30:15 +0100 (CET) Subject: [Python-checkins] r79022 - python/branches/py3k/Lib/test/test_dynamic.py Message-ID: <20100317033015.BC9AFFA7D@mail.python.org> Author: benjamin.peterson Date: Wed Mar 17 04:30:15 2010 New Revision: 79022 Log: set svn:eol-style Modified: python/branches/py3k/Lib/test/test_dynamic.py (props changed) From python-checkins at python.org Wed Mar 17 05:13:02 2010 From: python-checkins at python.org (tarek.ziade) Date: Wed, 17 Mar 2010 05:13:02 +0100 Subject: [Python-checkins] distutils2: project urls is a multiple field too Message-ID: tarek.ziade pushed 6ed163e4b6ef to distutils2: http://hg.python.org/distutils2/rev/6ed163e4b6ef changeset: 81:6ed163e4b6ef user: Tarek Ziade date: Wed Mar 17 00:12:23 2010 -0400 summary: project urls is a multiple field too files: src/distutils2/metadata.py diff --git a/src/distutils2/metadata.py b/src/distutils2/metadata.py --- a/src/distutils2/metadata.py +++ b/src/distutils2/metadata.py @@ -151,7 +151,8 @@ _VERSION_FIELDS = ('Version',) _LISTFIELDS = ('Platform', 'Classifier', 'Obsoletes', 'Requires', 'Provides', 'Obsoletes-Dist', - 'Provides-Dist', 'Requires-Dist', 'Requires-External') + 'Provides-Dist', 'Requires-Dist', 'Requires-External', + 'Project-URL') _ELEMENTSFIELD = ('Keywords',) -- Repository URL: http://hg.python.org/distutils2 From python-checkins at python.org Wed Mar 17 05:13:02 2010 From: python-checkins at python.org (tarek.ziade) Date: Wed, 17 Mar 2010 05:13:02 +0100 Subject: [Python-checkins] distutils2: make sure sysconfig.cfg is distributed Message-ID: tarek.ziade pushed bd61844cb802 to distutils2: http://hg.python.org/distutils2/rev/bd61844cb802 changeset: 80:bd61844cb802 user: Tarek Ziade date: Wed Mar 17 00:11:57 2010 -0400 summary: make sure sysconfig.cfg is distributed files: src/setup.py diff --git a/src/setup.py b/src/setup.py --- a/src/setup.py +++ b/src/setup.py @@ -80,6 +80,7 @@ 'distutils2.tests', 'distutils2._backport'], cmdclass={'sdist': sdist_hg, 'install': install_hg}, + package_data={'distutils2._backport': ['sysconfig.cfg']}, **setup_kwargs ) -- Repository URL: http://hg.python.org/distutils2 From python-checkins at python.org Wed Mar 17 05:13:02 2010 From: python-checkins at python.org (tarek.ziade) Date: Wed, 17 Mar 2010 05:13:02 +0100 Subject: [Python-checkins] distutils2: sending to PyPI various metadata versions in the register command Message-ID: tarek.ziade pushed 342424580a5f to distutils2: http://hg.python.org/distutils2/rev/342424580a5f changeset: 82:342424580a5f tag: tip user: Tarek Ziade date: Wed Mar 17 00:12:54 2010 -0400 summary: sending to PyPI various metadata versions in the register command files: src/distutils2/command/register.py, src/distutils2/tests/test_register.py diff --git a/src/distutils2/command/register.py b/src/distutils2/command/register.py --- a/src/distutils2/command/register.py +++ b/src/distutils2/command/register.py @@ -227,8 +227,7 @@ meta = self.distribution.metadata data = { ':action': action, - # XXX implement 1.1 - 'metadata_version' : '1.0', + 'metadata_version' : meta.version, 'name': meta['Name'], 'version': meta['Version'], 'summary': meta['Summary'], @@ -241,12 +240,21 @@ 'platform': meta['Platform'], 'classifier': meta['Classifier'], 'download_url': meta['Download-URL'], - #'provides': meta['Provides'], - #'requires': meta['Requires'], - #'obsoletes': meta['Obsoletes'], } - #if data['provides'] or data['requires'] or data['obsoletes']: - # data['metadata_version'] = '1.1' + + if meta.version == '1.2': + data['requires_dist'] = meta['Requires-Dist'] + data['requires_python'] = meta['Requires-Python'] + data['requires_external'] = meta['Requires-External'] + data['provides_dist'] = meta['Provides-Dist'] + data['obsoletes_dist'] = meta['Obsoletes-Dist'] + data['project_url'] = meta['Project-Url'] + + elif meta.version == '1.1': + data['provides'] = meta['Provides'] + data['requires'] = meta['Requires'] + data['obsoletes'] = meta['Obsoletes'] + return data def post_to_server(self, data, auth=None): @@ -263,8 +271,9 @@ body = StringIO.StringIO() for key, value in data.items(): # handle multiple entries for the same name - if type(value) not in (type([]), type( () )): + if not isinstance(value, (tuple, list)): value = [value] + for value in value: body.write(sep_boundary) body.write('\nContent-Disposition: form-data; name="%s"'%key) diff --git a/src/distutils2/tests/test_register.py b/src/distutils2/tests/test_register.py --- a/src/distutils2/tests/test_register.py +++ b/src/distutils2/tests/test_register.py @@ -240,6 +240,14 @@ finally: del register_module.raw_input + def test_register_pep345(self): + cmd = self._get_cmd({}) + cmd.ensure_finalized() + cmd.distribution.metadata['Requires-Dist'] = ['lxml'] + data = cmd.build_post_data('submit') + self.assertEquals(data['metadata_version'], '1.2') + self.assertEquals(data['requires_dist'], ['lxml']) + def test_suite(): return unittest2.makeSuite(RegisterTestCase) -- Repository URL: http://hg.python.org/distutils2 From python-checkins at python.org Wed Mar 17 14:52:48 2010 From: python-checkins at python.org (ezio.melotti) Date: Wed, 17 Mar 2010 14:52:48 +0100 (CET) Subject: [Python-checkins] r79023 - in python/trunk/Lib: ctypes/test/test_pep3118.py test/test_dict.py test/test_file2k.py test/test_grammar.py test/test_importhooks.py test/test_opcodes.py test/test_repr.py test/test_set.py test/test_sys.py Message-ID: <20100317135248.6CDB7FBFA@mail.python.org> Author: ezio.melotti Date: Wed Mar 17 14:52:48 2010 New Revision: 79023 Log: #7092: silence some more py3k warnings. Modified: python/trunk/Lib/ctypes/test/test_pep3118.py python/trunk/Lib/test/test_dict.py python/trunk/Lib/test/test_file2k.py python/trunk/Lib/test/test_grammar.py python/trunk/Lib/test/test_importhooks.py python/trunk/Lib/test/test_opcodes.py python/trunk/Lib/test/test_repr.py python/trunk/Lib/test/test_set.py python/trunk/Lib/test/test_sys.py Modified: python/trunk/Lib/ctypes/test/test_pep3118.py ============================================================================== --- python/trunk/Lib/ctypes/test/test_pep3118.py (original) +++ python/trunk/Lib/ctypes/test/test_pep3118.py Wed Mar 17 14:52:48 2010 @@ -24,7 +24,7 @@ else: size = sizeof(ob) for dim in self.shape: - size /= dim + size //= dim self.itemsize = size self.strides = None self.readonly = False Modified: python/trunk/Lib/test/test_dict.py ============================================================================== --- python/trunk/Lib/test/test_dict.py (original) +++ python/trunk/Lib/test/test_dict.py Wed Mar 17 14:52:48 2010 @@ -660,11 +660,14 @@ type2test = Dict def test_main(): - test_support.run_unittest( - DictTest, - GeneralMappingTests, - SubclassMappingTests, - ) + with test_support.check_py3k_warnings( + ('dict(.has_key..| inequality comparisons) not supported in 3.x', + DeprecationWarning)): + test_support.run_unittest( + DictTest, + GeneralMappingTests, + SubclassMappingTests, + ) if __name__ == "__main__": test_main() Modified: python/trunk/Lib/test/test_file2k.py ============================================================================== --- python/trunk/Lib/test/test_file2k.py (original) +++ python/trunk/Lib/test/test_file2k.py Wed Mar 17 14:52:48 2010 @@ -34,13 +34,15 @@ def testAttributes(self): # verify expected attributes exist f = self.f - softspace = f.softspace + with test_support.check_py3k_warnings(): + softspace = f.softspace f.name # merely shouldn't blow up f.mode # ditto f.closed # ditto - # verify softspace is writable - f.softspace = softspace # merely shouldn't blow up + with test_support.check_py3k_warnings(): + # verify softspace is writable + f.softspace = softspace # merely shouldn't blow up # verify the others aren't for attr in 'name', 'mode', 'closed': @@ -100,7 +102,8 @@ def testMethods(self): methods = ['fileno', 'flush', 'isatty', 'next', 'read', 'readinto', 'readline', 'readlines', 'seek', 'tell', 'truncate', - 'write', 'xreadlines', '__iter__'] + 'write', '__iter__'] + deprecated_methods = ['xreadlines'] if sys.platform.startswith('atheos'): methods.remove('truncate') @@ -112,13 +115,17 @@ method = getattr(self.f, methodname) # should raise on closed file self.assertRaises(ValueError, method) + with test_support.check_py3k_warnings(): + for methodname in deprecated_methods: + method = getattr(self.f, methodname) + self.assertRaises(ValueError, method) self.assertRaises(ValueError, self.f.writelines, []) # file is closed, __exit__ shouldn't do anything self.assertEquals(self.f.__exit__(None, None, None), None) # it must also return None if an exception was given try: - 1/0 + 1 // 0 except: self.assertEquals(self.f.__exit__(*sys.exc_info()), None) @@ -218,12 +225,12 @@ try: f = open(TESTFN, bad_mode) except ValueError, msg: - if msg[0] != 0: + if msg.args[0] != 0: s = str(msg) if s.find(TESTFN) != -1 or s.find(bad_mode) == -1: self.fail("bad error message for invalid mode: %s" % s) - # if msg[0] == 0, we're probably on Windows where there may be - # no obvious way to discover why open() failed. + # if msg.args[0] == 0, we're probably on Windows where there may + # be no obvious way to discover why open() failed. else: f.close() self.fail("no error for invalid mode: %s" % bad_mode) Modified: python/trunk/Lib/test/test_grammar.py ============================================================================== --- python/trunk/Lib/test/test_grammar.py (original) +++ python/trunk/Lib/test/test_grammar.py Wed Mar 17 14:52:48 2010 @@ -8,7 +8,8 @@ # regression test, the filterwarnings() call has been added to # regrtest.py. -from test.test_support import run_unittest, check_syntax_error +from test.test_support import run_unittest, check_syntax_error, \ + check_py3k_warnings import unittest import sys # testing import * @@ -152,8 +153,9 @@ f1(*(), **{}) def f2(one_argument): pass def f3(two, arguments): pass - def f4(two, (compound, (argument, list))): pass - def f5((compound, first), two): pass + # Silence Py3k warning + exec('def f4(two, (compound, (argument, list))): pass') + exec('def f5((compound, first), two): pass') self.assertEquals(f2.func_code.co_varnames, ('one_argument',)) self.assertEquals(f3.func_code.co_varnames, ('two', 'arguments')) if sys.platform.startswith('java'): @@ -172,7 +174,8 @@ def v0(*rest): pass def v1(a, *rest): pass def v2(a, b, *rest): pass - def v3(a, (b, c), *rest): return a, b, c, rest + # Silence Py3k warning + exec('def v3(a, (b, c), *rest): return a, b, c, rest') f1() f2(1) @@ -277,9 +280,10 @@ d22v(*(1, 2, 3, 4)) d22v(1, 2, *(3, 4, 5)) d22v(1, *(2, 3), **{'d': 4}) - def d31v((x)): pass + # Silence Py3k warning + exec('def d31v((x)): pass') + exec('def d32v((x,)): pass') d31v(1) - def d32v((x,)): pass d32v((1,)) # keyword arguments after *arglist @@ -474,7 +478,7 @@ continue except: raise - if count > 2 or big_hippo <> 1: + if count > 2 or big_hippo != 1: self.fail("continue then break in try/except in loop broken!") test_inner() @@ -536,7 +540,7 @@ if z != 2: self.fail('exec u\'z=1+1\'')""" g = {} exec 'z = 1' in g - if g.has_key('__builtins__'): del g['__builtins__'] + if '__builtins__' in g: del g['__builtins__'] if g != {'z': 1}: self.fail('exec \'z = 1\' in g') g = {} l = {} @@ -544,8 +548,8 @@ import warnings warnings.filterwarnings("ignore", "global statement", module="") exec 'global a; a = 1; b = 2' in g, l - if g.has_key('__builtins__'): del g['__builtins__'] - if l.has_key('__builtins__'): del l['__builtins__'] + if '__builtins__' in g: del g['__builtins__'] + if '__builtins__' in l: del l['__builtins__'] if (g, l) != ({'a':1}, {'b':2}): self.fail('exec ... in g (%s), l (%s)' %(g,l)) @@ -677,7 +681,6 @@ x = (1 == 1) if 1 == 1: pass if 1 != 1: pass - if 1 <> 1: pass if 1 < 1: pass if 1 > 1: pass if 1 <= 1: pass @@ -686,7 +689,10 @@ if 1 is not 1: pass if 1 in (): pass if 1 not in (): pass - if 1 < 1 > 1 == 1 >= 1 <= 1 <> 1 != 1 in 1 not in 1 is 1 is not 1: pass + if 1 < 1 > 1 == 1 >= 1 <= 1 != 1 in 1 not in 1 is 1 is not 1: pass + # Silence Py3k warning + if eval('1 <> 1'): pass + if eval('1 < 1 > 1 == 1 >= 1 <= 1 <> 1 != 1 in 1 not in 1 is 1 is not 1'): pass def testBinaryMaskOps(self): x = 1 & 1 @@ -774,9 +780,10 @@ x = {'one', 'two', 'three'} x = {2, 3, 4,} - x = `x` - x = `1 or 2 or 3` - self.assertEqual(`1,2`, '(1, 2)') + # Silence Py3k warning + x = eval('`x`') + x = eval('`1 or 2 or 3`') + self.assertEqual(eval('`1,2`'), '(1, 2)') x = x x = 'x' @@ -988,7 +995,13 @@ def test_main(): - run_unittest(TokenTests, GrammarTests) + with check_py3k_warnings( + ("backquote not supported", SyntaxWarning), + ("tuple parameter unpacking has been removed", SyntaxWarning), + ("parenthesized argument names are invalid", SyntaxWarning), + ("classic int division", DeprecationWarning), + (".+ not supported in 3.x", DeprecationWarning)): + run_unittest(TokenTests, GrammarTests) if __name__ == '__main__': test_main() Modified: python/trunk/Lib/test/test_importhooks.py ============================================================================== --- python/trunk/Lib/test/test_importhooks.py (original) +++ python/trunk/Lib/test/test_importhooks.py Wed Mar 17 14:52:48 2010 @@ -180,7 +180,7 @@ self.assertFalse(hasattr(reloadmodule,'reloaded')) TestImporter.modules['reloadmodule'] = (False, reload_co) - reload(reloadmodule) + imp.reload(reloadmodule) self.assertTrue(hasattr(reloadmodule,'reloaded')) import hooktestpackage.oldabs @@ -247,9 +247,10 @@ for n in sys.modules.keys(): if n.startswith(parent): del sys.modules[n] - for mname in mnames: - m = __import__(mname, globals(), locals(), ["__dummy__"]) - m.__loader__ # to make sure we actually handled the import + with test_support.check_py3k_warnings(): + for mname in mnames: + m = __import__(mname, globals(), locals(), ["__dummy__"]) + m.__loader__ # to make sure we actually handled the import def test_main(): Modified: python/trunk/Lib/test/test_opcodes.py ============================================================================== --- python/trunk/Lib/test/test_opcodes.py (original) +++ python/trunk/Lib/test/test_opcodes.py Wed Mar 17 14:52:48 2010 @@ -1,6 +1,6 @@ # Python test set -- part 2, opcodes -from test.test_support import run_unittest +from test.test_support import run_unittest, check_py3k_warnings import unittest class OpcodeTest(unittest.TestCase): @@ -9,7 +9,7 @@ n = 0 for i in range(10): n = n+i - try: 1/0 + try: 1 // 0 except NameError: pass except ZeroDivisionError: pass except TypeError: pass @@ -110,7 +110,12 @@ def test_main(): - run_unittest(OpcodeTest) + with check_py3k_warnings(("exceptions must derive from BaseException", + DeprecationWarning), + ("catching classes that don't inherit " + "from BaseException is not allowed", + DeprecationWarning)): + run_unittest(OpcodeTest) if __name__ == '__main__': test_main() Modified: python/trunk/Lib/test/test_repr.py ============================================================================== --- python/trunk/Lib/test/test_repr.py (original) +++ python/trunk/Lib/test/test_repr.py Wed Mar 17 14:52:48 2010 @@ -8,7 +8,7 @@ import shutil import unittest -from test.test_support import run_unittest +from test.test_support import run_unittest, check_py3k_warnings from repr import repr as r # Don't shadow builtin repr from repr import Repr @@ -174,7 +174,8 @@ def test_buffer(self): # XXX doesn't test buffers with no b_base or read-write buffers (see # bufferobject.c). The test is fairly incomplete too. Sigh. - x = buffer('foo') + with check_py3k_warnings(): + x = buffer('foo') self.assertTrue(repr(x).startswith(' Author: ezio.melotti Date: Wed Mar 17 15:22:34 2010 New Revision: 79024 Log: Use "x in y" instead of y.find(x) != -1. Modified: python/trunk/Lib/test/test_file.py python/trunk/Lib/test/test_file2k.py python/trunk/Lib/test/test_fileio.py python/trunk/Lib/test/test_minidom.py Modified: python/trunk/Lib/test/test_file.py ============================================================================== --- python/trunk/Lib/test/test_file.py (original) +++ python/trunk/Lib/test/test_file.py Wed Mar 17 15:22:34 2010 @@ -172,7 +172,7 @@ except ValueError as msg: if msg.args[0] != 0: s = str(msg) - if s.find(TESTFN) != -1 or s.find(bad_mode) == -1: + if TESTFN in s or bad_mode not in s: self.fail("bad error message for invalid mode: %s" % s) # if msg.args[0] == 0, we're probably on Windows where there may be # no obvious way to discover why open() failed. Modified: python/trunk/Lib/test/test_file2k.py ============================================================================== --- python/trunk/Lib/test/test_file2k.py (original) +++ python/trunk/Lib/test/test_file2k.py Wed Mar 17 15:22:34 2010 @@ -227,7 +227,7 @@ except ValueError, msg: if msg.args[0] != 0: s = str(msg) - if s.find(TESTFN) != -1 or s.find(bad_mode) == -1: + if TESTFN in s or bad_mode not in s: self.fail("bad error message for invalid mode: %s" % s) # if msg.args[0] == 0, we're probably on Windows where there may # be no obvious way to discover why open() failed. Modified: python/trunk/Lib/test/test_fileio.py ============================================================================== --- python/trunk/Lib/test/test_fileio.py (original) +++ python/trunk/Lib/test/test_fileio.py Wed Mar 17 15:22:34 2010 @@ -320,7 +320,7 @@ except ValueError as msg: if msg.args[0] != 0: s = str(msg) - if s.find(TESTFN) != -1 or s.find(bad_mode) == -1: + if TESTFN in s or bad_mode not in s: self.fail("bad error message for invalid mode: %s" % s) # if msg.args[0] == 0, we're probably on Windows where there may be # no obvious way to discover why open() failed. Modified: python/trunk/Lib/test/test_minidom.py ============================================================================== --- python/trunk/Lib/test/test_minidom.py (original) +++ python/trunk/Lib/test/test_minidom.py Wed Mar 17 15:22:34 2010 @@ -433,7 +433,7 @@ string1 = repr(el) string2 = str(el) self.confirm(string1 == string2) - self.confirm(string1.find("slash:abc") != -1) + self.confirm("slash:abc" in string1) dom.unlink() def testAttributeRepr(self): From python-checkins at python.org Wed Mar 17 15:28:47 2010 From: python-checkins at python.org (ezio.melotti) Date: Wed, 17 Mar 2010 15:28:47 +0100 (CET) Subject: [Python-checkins] r79025 - python/branches/py3k Message-ID: <20100317142847.3806BE505@mail.python.org> Author: ezio.melotti Date: Wed Mar 17 15:28:47 2010 New Revision: 79025 Log: Blocked revisions 79023 via svnmerge ........ r79023 | ezio.melotti | 2010-03-17 15:52:48 +0200 (Wed, 17 Mar 2010) | 1 line #7092: silence some more py3k warnings. ........ Modified: python/branches/py3k/ (props changed) From python-checkins at python.org Wed Mar 17 16:05:58 2010 From: python-checkins at python.org (vinay.sajip) Date: Wed, 17 Mar 2010 16:05:58 +0100 (CET) Subject: [Python-checkins] r79026 - in python/trunk: Doc/library/logging.rst Lib/logging/__init__.py Message-ID: <20100317150558.16571F81E@mail.python.org> Author: vinay.sajip Date: Wed Mar 17 16:05:57 2010 New Revision: 79026 Log: Issue #8162: logging: Clarified docstring and documentation for disable function. Modified: python/trunk/Doc/library/logging.rst python/trunk/Lib/logging/__init__.py Modified: python/trunk/Doc/library/logging.rst ============================================================================== --- python/trunk/Doc/library/logging.rst (original) +++ python/trunk/Doc/library/logging.rst Wed Mar 17 16:05:57 2010 @@ -735,7 +735,11 @@ Provides an overriding level *lvl* for all loggers which takes precedence over the logger's own level. When the need arises to temporarily throttle logging - output down across the whole application, this function can be useful. + output down across the whole application, this function can be useful. Its + effect is to disable all logging calls of severity *lvl* and below, so that + if you call it with a value of INFO, then all INFO and DEBUG events would be + discarded, whereas those of severity WARNING and above would be processed + according to the logger's effective level. .. function:: addLevelName(lvl, levelName) Modified: python/trunk/Lib/logging/__init__.py ============================================================================== --- python/trunk/Lib/logging/__init__.py (original) +++ python/trunk/Lib/logging/__init__.py Wed Mar 17 16:05:57 2010 @@ -1557,7 +1557,7 @@ def disable(level): """ - Disable all logging calls less severe than 'level'. + Disable all logging calls of severity 'level' and below. """ root.manager.disable = level From python-checkins at python.org Wed Mar 17 18:36:17 2010 From: python-checkins at python.org (collin.winter) Date: Wed, 17 Mar 2010 18:36:17 +0100 (CET) Subject: [Python-checkins] r79027 - python/trunk/Lib/ctypes/test/test_internals.py Message-ID: <20100317173617.1B337F609@mail.python.org> Author: collin.winter Date: Wed Mar 17 18:36:16 2010 New Revision: 79027 Log: Avoid hardcoding refcounts in tests. Modified: python/trunk/Lib/ctypes/test/test_internals.py Modified: python/trunk/Lib/ctypes/test/test_internals.py ============================================================================== --- python/trunk/Lib/ctypes/test/test_internals.py (original) +++ python/trunk/Lib/ctypes/test/test_internals.py Wed Mar 17 18:36:16 2010 @@ -23,16 +23,16 @@ def test_ints(self): i = 42000123 - self.assertEqual(3, grc(i)) + refcnt = grc(i) ci = c_int(i) - self.assertEqual(3, grc(i)) + self.assertEqual(refcnt, grc(i)) self.assertEqual(ci._objects, None) def test_c_char_p(self): s = "Hello, World" - self.assertEqual(3, grc(s)) + refcnt = grc(s) cs = c_char_p(s) - self.assertEqual(4, grc(s)) + self.assertEqual(refcnt + 1, grc(s)) self.assertSame(cs._objects, s) def test_simple_struct(self): From python-checkins at python.org Wed Mar 17 18:42:39 2010 From: python-checkins at python.org (collin.winter) Date: Wed, 17 Mar 2010 18:42:39 +0100 (CET) Subject: [Python-checkins] r79028 - python/branches/py3k-jit/JIT_TODO.txt Message-ID: <20100317174239.06B6FDE53@mail.python.org> Author: collin.winter Date: Wed Mar 17 18:42:38 2010 New Revision: 79028 Log: Mark 'import r953' as done. Modified: python/branches/py3k-jit/JIT_TODO.txt Modified: python/branches/py3k-jit/JIT_TODO.txt ============================================================================== --- python/branches/py3k-jit/JIT_TODO.txt (original) +++ python/branches/py3k-jit/JIT_TODO.txt Wed Mar 17 18:42:38 2010 @@ -10,7 +10,6 @@ - Import non-JIT related revisions into py3k, merge to py3k-jit: Relevant revisions: - r1017 - - r953 - r900 - r834 - r823 @@ -43,6 +42,7 @@ DONE: - Import non-JIT related revisions into py3k, merge to py3k-jit: Relevant revisions: + - r953 (r79027) - r888 (r79016, r79019; r79020) - r835 (r79013, r79014) - r815 (Lib/test/test_dynamic.py, Lib/test/support.py; r79009) From python-checkins at python.org Wed Mar 17 18:50:58 2010 From: python-checkins at python.org (collin.winter) Date: Wed, 17 Mar 2010 18:50:58 +0100 (CET) Subject: [Python-checkins] r79029 - python/branches/py3k-jit Message-ID: <20100317175058.2F6CDE568@mail.python.org> Author: collin.winter Date: Wed Mar 17 18:50:58 2010 New Revision: 79029 Log: Drop support from merging trunk to py3k-jit; we only merge from py3k. Modified: python/branches/py3k-jit/ (props changed) From python-checkins at python.org Wed Mar 17 20:05:04 2010 From: python-checkins at python.org (florent.xicluna) Date: Wed, 17 Mar 2010 20:05:04 +0100 (CET) Subject: [Python-checkins] r79030 - in python/trunk/Lib/test: test_coding.py test_import.py Message-ID: <20100317190504.8A4B2E3B2@mail.python.org> Author: florent.xicluna Date: Wed Mar 17 20:05:04 2010 New Revision: 79030 Log: Cleanup in test_import and test_coding. Modified: python/trunk/Lib/test/test_coding.py python/trunk/Lib/test/test_import.py Modified: python/trunk/Lib/test/test_coding.py ============================================================================== --- python/trunk/Lib/test/test_coding.py (original) +++ python/trunk/Lib/test/test_coding.py Wed Mar 17 20:05:04 2010 @@ -16,22 +16,19 @@ path = os.path.dirname(__file__) filename = os.path.join(path, module_name + '.py') - fp = open(filename) - text = fp.read() - fp.close() + with open(filename) as fp: + text = fp.read() self.assertRaises(SyntaxError, compile, text, filename, 'exec') def test_error_from_string(self): # See http://bugs.python.org/issue6289 input = u"# coding: ascii\n\N{SNOWMAN}".encode('utf-8') - try: + with self.assertRaises(SyntaxError) as c: compile(input, "", "exec") - except SyntaxError as e: - expected = "'ascii' codec can't decode byte 0xe2 in position 16: " \ - "ordinal not in range(128)" - self.assertTrue(str(e).startswith(expected)) - else: - self.fail("didn't raise") + expected = "'ascii' codec can't decode byte 0xe2 in position 16: " \ + "ordinal not in range(128)" + self.assertTrue(c.exception.args[0].startswith(expected)) + def test_main(): test.test_support.run_unittest(CodingTest) Modified: python/trunk/Lib/test/test_import.py ============================================================================== --- python/trunk/Lib/test/test_import.py (original) +++ python/trunk/Lib/test/test_import.py Wed Mar 17 20:05:04 2010 @@ -7,9 +7,8 @@ import stat import sys import unittest -import warnings from test.test_support import (unlink, TESTFN, unload, run_unittest, - check_warnings, TestFailed, EnvironmentVarGuard) + is_jython, check_warnings, EnvironmentVarGuard) def remove_files(name): @@ -18,12 +17,15 @@ name + os.extsep + "pyo", name + os.extsep + "pyw", name + "$py.class"): - if os.path.exists(f): - os.remove(f) + unlink(f) class ImportTests(unittest.TestCase): + def tearDown(self): + unload(TESTFN) + setUp = tearDown + def test_case_sensitivity(self): # Brief digression to test that import is case-sensitive: if we got # this far, we know for sure that "random" exists. @@ -44,7 +46,7 @@ # The extension is normally ".py", perhaps ".pyw". source = TESTFN + ext pyo = TESTFN + os.extsep + "pyo" - if sys.platform.startswith('java'): + if is_jython: pyc = TESTFN + "$py.class" else: pyc = TESTFN + os.extsep + "pyc" @@ -62,27 +64,21 @@ except ImportError, err: self.fail("import from %s failed: %s" % (ext, err)) else: - self.assertEquals(mod.a, a, + self.assertEqual(mod.a, a, "module loaded (%s) but contents invalid" % mod) - self.assertEquals(mod.b, b, + self.assertEqual(mod.b, b, "module loaded (%s) but contents invalid" % mod) finally: - os.unlink(source) + unlink(source) try: imp.reload(mod) except ImportError, err: self.fail("import from .pyc/.pyo failed: %s" % err) finally: - try: - os.unlink(pyc) - except OSError: - pass - try: - os.unlink(pyo) - except OSError: - pass - del sys.modules[TESTFN] + unlink(pyc) + unlink(pyo) + unload(TESTFN) sys.path.insert(0, os.curdir) try: @@ -108,15 +104,16 @@ fn = fname + 'c' if not os.path.exists(fn): fn = fname + 'o' - if not os.path.exists(fn): raise TestFailed("__import__ did " - "not result in creation of either a .pyc or .pyo file") + if not os.path.exists(fn): + self.fail("__import__ did not result in creation of " + "either a .pyc or .pyo file") s = os.stat(fn) - self.assertEquals(stat.S_IMODE(s.st_mode), - stat.S_IRUSR | stat.S_IRGRP | stat.S_IROTH) + self.assertEqual(stat.S_IMODE(s.st_mode), + stat.S_IRUSR | stat.S_IRGRP | stat.S_IROTH) finally: os.umask(oldmask) remove_files(TESTFN) - if TESTFN in sys.modules: del sys.modules[TESTFN] + unload(TESTFN) del sys.path[0] def test_imp_module(self): @@ -152,7 +149,7 @@ # Compile & remove .py file, we only need .pyc (or .pyo). with open(filename, 'r') as f: py_compile.compile(filename) - os.unlink(filename) + unlink(filename) # Need to be able to load from current dir. sys.path.append('') @@ -162,12 +159,10 @@ # Cleanup. del sys.path[-1] - for ext in 'pyc', 'pyo': - fname = module + os.extsep + ext - if os.path.exists(fname): - os.unlink(fname) + unlink(filename + 'c') + unlink(filename + 'o') - def test_failing_import_sticks(self): + def test_0Bfailing_import_sticks(self): source = TESTFN + os.extsep + "py" with open(source, "w") as f: print >> f, "a = 1 // 0" @@ -177,15 +172,11 @@ sys.path.insert(0, os.curdir) try: for i in [1, 2, 3]: - try: - mod = __import__(TESTFN) - except ZeroDivisionError: - if TESTFN in sys.modules: - self.fail("damaged module in sys.modules on %i. try" % i) - else: - self.fail("was able to import a damaged module on %i. try" % i) + self.assertRaises(ZeroDivisionError, __import__, TESTFN) + self.assertNotIn(TESTFN, sys.modules, + "damaged module in sys.modules on %i try" % i) finally: - sys.path.pop(0) + del sys.path[0] remove_files(TESTFN) def test_failing_reload(self): @@ -199,8 +190,8 @@ try: mod = __import__(TESTFN) self.assertIn(TESTFN, sys.modules) - self.assertEquals(mod.a, 1, "module has wrong attribute values") - self.assertEquals(mod.b, 2, "module has wrong attribute values") + self.assertEqual(mod.a, 1, "module has wrong attribute values") + self.assertEqual(mod.b, 2, "module has wrong attribute values") # On WinXP, just replacing the .py file wasn't enough to # convince reload() to reparse it. Maybe the timestamp didn't @@ -217,18 +208,17 @@ # But we still expect the module to be in sys.modules. mod = sys.modules.get(TESTFN) - self.assertFalse(mod is None, "expected module to be in sys.modules") + self.assertIsNot(mod, None, "expected module to be in sys.modules") # We should have replaced a w/ 10, but the old b value should # stick. - self.assertEquals(mod.a, 10, "module has wrong attribute values") - self.assertEquals(mod.b, 2, "module has wrong attribute values") + self.assertEqual(mod.a, 10, "module has wrong attribute values") + self.assertEqual(mod.b, 2, "module has wrong attribute values") finally: - sys.path.pop(0) + del sys.path[0] remove_files(TESTFN) - if TESTFN in sys.modules: - del sys.modules[TESTFN] + unload(TESTFN) def test_infinite_reload(self): # http://bugs.python.org/issue742342 reports that Python segfaults @@ -238,35 +228,31 @@ try: import infinite_reload finally: - sys.path.pop(0) + del sys.path[0] def test_import_name_binding(self): # import x.y.z binds x in the current namespace. import test as x import test.test_support - self.assertTrue(x is test, x.__name__) + self.assertIs(x, test, x.__name__) self.assertTrue(hasattr(test.test_support, "__file__")) # import x.y.z as w binds z as w. import test.test_support as y - self.assertTrue(y is test.test_support, y.__name__) + self.assertIs(y, test.test_support, y.__name__) def test_import_initless_directory_warning(self): - with warnings.catch_warnings(): + with check_warnings(('', ImportWarning)): # Just a random non-package directory we always expect to be # somewhere in sys.path... - warnings.simplefilter('error', ImportWarning) - self.assertRaises(ImportWarning, __import__, "site-packages") + self.assertRaises(ImportError, __import__, "site-packages") def test_import_by_filename(self): path = os.path.abspath(TESTFN) - try: + with self.assertRaises(ImportError) as c: __import__(path) - except ImportError, err: - self.assertEqual("Import by filename is not supported.", - err.args[0]) - else: - self.fail("import by path didn't raise an exception") + self.assertEqual("Import by filename is not supported.", + c.exception.args[0]) class PycRewritingTests(unittest.TestCase): @@ -301,10 +287,9 @@ if self.orig_module is not None: sys.modules[self.module_name] = self.orig_module else: - del sys.modules[self.module_name] - for file_name in self.file_name, self.compiled_name: - if os.path.exists(file_name): - os.remove(file_name) + unload(self.module_name) + unlink(self.file_name) + unlink(self.compiled_name) if os.path.exists(self.dir_name): shutil.rmtree(self.dir_name) @@ -402,11 +387,10 @@ class RelativeImportTests(unittest.TestCase): + def tearDown(self): - try: - del sys.modules["test.relimport"] - except: - pass + unload("test.relimport") + setUp = tearDown def test_relimport_star(self): # This will import * from .test_import. @@ -432,18 +416,14 @@ # Check relative fails with only __package__ wrong ns = dict(__package__='foo', __name__='test.notarealmodule') - with check_warnings() as w: + with check_warnings(('.+foo', RuntimeWarning)): check_absolute() - self.assertIn('foo', str(w.message)) - self.assertEqual(w.category, RuntimeWarning) self.assertRaises(SystemError, check_relative) # Check relative fails with __package__ and __name__ wrong ns = dict(__package__='foo', __name__='notarealpkg.notarealmodule') - with check_warnings() as w: + with check_warnings(('.+foo', RuntimeWarning)): check_absolute() - self.assertIn('foo', str(w.message)) - self.assertEqual(w.category, RuntimeWarning) self.assertRaises(SystemError, check_relative) # Check both fail with package set to a non-string From python-checkins at python.org Wed Mar 17 20:15:56 2010 From: python-checkins at python.org (florent.xicluna) Date: Wed, 17 Mar 2010 20:15:56 +0100 (CET) Subject: [Python-checkins] r79031 - in python/trunk/Lib/test: test_ascii_formatd.py test_cgi.py test_io.py test_py3kwarn.py test_shutil.py test_structmembers.py Message-ID: <20100317191556.9DD8EF908@mail.python.org> Author: florent.xicluna Date: Wed Mar 17 20:15:56 2010 New Revision: 79031 Log: Cleanup some test cases using check_warnings and check_py3k_warnings. Modified: python/trunk/Lib/test/test_ascii_formatd.py python/trunk/Lib/test/test_cgi.py python/trunk/Lib/test/test_io.py python/trunk/Lib/test/test_py3kwarn.py python/trunk/Lib/test/test_shutil.py python/trunk/Lib/test/test_structmembers.py Modified: python/trunk/Lib/test/test_ascii_formatd.py ============================================================================== --- python/trunk/Lib/test/test_ascii_formatd.py (original) +++ python/trunk/Lib/test/test_ascii_formatd.py Wed Mar 17 20:15:56 2010 @@ -17,7 +17,7 @@ PyOS_ascii_formatd = pythonapi.PyOS_ascii_formatd buf = create_string_buffer(' ' * 100) - with check_warnings(): + with check_warnings(quiet=False): PyOS_ascii_formatd(byref(buf), sizeof(buf), '%+.10f', c_double(10.0)) self.assertEqual(buf.value, '+10.0000000000') @@ -46,7 +46,7 @@ ('%-e', 1.234), ] - with check_warnings(): + with check_warnings(quiet=False): for format, val in tests: PyOS_ascii_formatd(byref(buf), sizeof(buf), format, c_double(val)) Modified: python/trunk/Lib/test/test_cgi.py ============================================================================== --- python/trunk/Lib/test/test_cgi.py (original) +++ python/trunk/Lib/test/test_cgi.py Wed Mar 17 20:15:56 2010 @@ -115,7 +115,7 @@ result = {} for k, v in dict(form).items(): - result[k] = type(v) is list and form.getlist(k) or v.value + result[k] = isinstance(v, list) and form.getlist(k) or v.value return result @@ -133,7 +133,7 @@ fcd = cgi.FormContentDict(env) sd = cgi.SvFormContentDict(env) fs = cgi.FieldStorage(environ=env) - if type(expect) == type({}): + if isinstance(expect, dict): # test dict interface self.assertEqual(len(expect), len(fcd)) self.assertSameElements(expect.keys(), fcd.keys()) @@ -340,13 +340,13 @@ self.assertEqual(result, v) def test_deprecated_parse_qs(self): - with check_warnings(): + with check_warnings(quiet=False): # this func is moved to urlparse, this is just a sanity check self.assertEqual({'a': ['A1'], 'B': ['B3'], 'b': ['B2']}, cgi.parse_qs('a=A1&b=B2&B=B3')) def test_deprecated_parse_qsl(self): - with check_warnings(): + with check_warnings(quiet=False): # this func is moved to urlparse, this is just a sanity check self.assertEqual([('a', 'A1'), ('b', 'B2'), ('B', 'B3')], cgi.parse_qsl('a=A1&b=B2&B=B3')) Modified: python/trunk/Lib/test/test_io.py ============================================================================== --- python/trunk/Lib/test/test_io.py (original) +++ python/trunk/Lib/test/test_io.py Wed Mar 17 20:15:56 2010 @@ -1054,14 +1054,9 @@ self.assertRaises(IOError, bufio.write, b"abcdef") def test_max_buffer_size_deprecation(self): - with support.check_warnings() as w: - warnings.simplefilter("always", DeprecationWarning) + with support.check_warnings(("max_buffer_size is deprecated", + DeprecationWarning)): self.tp(self.MockRawIO(), 8, 12) - self.assertEqual(len(w.warnings), 1) - warning = w.warnings[0] - self.assertTrue(warning.category is DeprecationWarning) - self.assertEqual(str(warning.message), - "max_buffer_size is deprecated") class CBufferedWriterTest(BufferedWriterTest): @@ -1117,14 +1112,9 @@ self.assertRaises(self.UnsupportedOperation, pair.detach) def test_constructor_max_buffer_size_deprecation(self): - with support.check_warnings() as w: - warnings.simplefilter("always", DeprecationWarning) + with support.check_warnings(("max_buffer_size is deprecated", + DeprecationWarning)): self.tp(self.MockRawIO(), self.MockRawIO(), 8, 12) - self.assertEqual(len(w.warnings), 1) - warning = w.warnings[0] - self.assertTrue(warning.category is DeprecationWarning) - self.assertEqual(str(warning.message), - "max_buffer_size is deprecated") def test_constructor_with_not_readable(self): class NotReadable(MockRawIO): Modified: python/trunk/Lib/test/test_py3kwarn.py ============================================================================== --- python/trunk/Lib/test/test_py3kwarn.py (original) +++ python/trunk/Lib/test/test_py3kwarn.py Wed Mar 17 20:15:56 2010 @@ -1,6 +1,6 @@ import unittest import sys -from test.test_support import check_warnings, CleanImport, run_unittest +from test.test_support import check_py3k_warnings, CleanImport, run_unittest import warnings if not sys.py3kwarning: @@ -41,21 +41,19 @@ def test_backquote(self): expected = 'backquote not supported in 3.x; use repr()' - with check_warnings() as w: + with check_py3k_warnings((expected, SyntaxWarning)): exec "`2`" in {} - self.assertWarning(None, w, expected) def test_paren_arg_names(self): expected = 'parenthesized argument names are invalid in 3.x' def check(s): - exec s in {} - self.assertWarning(None, w, expected) - with check_warnings() as w: - check("def f((x)): pass") - check("def f((((x))), (y)): pass") - check("def f((x), (((y))), m=32): pass") - # Something like def f((a, (b))): pass will raise the tuple - # unpacking warning. + with check_py3k_warnings((expected, SyntaxWarning)): + exec s in {} + check("def f((x)): pass") + check("def f((((x))), (y)): pass") + check("def f((x), (((y))), m=32): pass") + # Something like def f((a, (b))): pass will raise the tuple + # unpacking warning. def test_forbidden_names(self): # So we don't screw up our globals @@ -66,7 +64,7 @@ tests = [("True", "assignment to True or False is forbidden in 3.x"), ("False", "assignment to True or False is forbidden in 3.x"), ("nonlocal", "nonlocal is a keyword in 3.x")] - with check_warnings() as w: + with check_py3k_warnings(('', SyntaxWarning)) as w: for keyword, expected in tests: safe_exec("{0} = False".format(keyword)) self.assertWarning(None, w, expected) @@ -90,21 +88,21 @@ def test_type_inequality_comparisons(self): expected = 'type inequality comparisons not supported in 3.x' - with check_warnings() as w: + with check_py3k_warnings() as w: self.assertWarning(int < str, w, expected) w.reset() self.assertWarning(type < object, w, expected) def test_object_inequality_comparisons(self): expected = 'comparing unequal types not supported in 3.x' - with check_warnings() as w: + with check_py3k_warnings() as w: self.assertWarning(str < [], w, expected) w.reset() self.assertWarning(object() < (1, 2), w, expected) def test_dict_inequality_comparisons(self): expected = 'dict inequality comparisons not supported in 3.x' - with check_warnings() as w: + with check_py3k_warnings() as w: self.assertWarning({} < {2:3}, w, expected) w.reset() self.assertWarning({} <= {}, w, expected) @@ -121,7 +119,7 @@ return g cell0, = f(0).func_closure cell1, = f(1).func_closure - with check_warnings() as w: + with check_py3k_warnings() as w: self.assertWarning(cell0 == cell1, w, expected) w.reset() self.assertWarning(cell0 < cell1, w, expected) @@ -132,7 +130,7 @@ pass def g(x): pass - with check_warnings() as w: + with check_py3k_warnings() as w: self.assertWarning(f.func_code < g.func_code, w, expected) w.reset() self.assertWarning(f.func_code <= g.func_code, w, expected) @@ -146,7 +144,7 @@ 'order comparisons not supported in 3.x') func = eval meth = {}.get - with check_warnings() as w: + with check_py3k_warnings() as w: self.assertWarning(func < meth, w, expected) w.reset() self.assertWarning(func > meth, w, expected) @@ -166,7 +164,7 @@ f = sys._getframe(0) for attr in ("f_exc_traceback", "f_exc_value", "f_exc_type"): expected = template % attr - with check_warnings() as w: + with check_py3k_warnings() as w: self.assertWarning(getattr(f, attr), w, expected) w.reset() self.assertWarning(setattr(f, attr, None), w, expected) @@ -176,7 +174,7 @@ lst = range(5) cmp = lambda x,y: -1 - with check_warnings() as w: + with check_py3k_warnings() as w: self.assertWarning(lst.sort(cmp=cmp), w, expected) w.reset() self.assertWarning(sorted(lst, cmp=cmp), w, expected) @@ -187,7 +185,7 @@ def test_sys_exc_clear(self): expected = 'sys.exc_clear() not supported in 3.x; use except clauses' - with check_warnings() as w: + with check_py3k_warnings() as w: self.assertWarning(sys.exc_clear(), w, expected) def test_methods_members(self): @@ -196,17 +194,17 @@ __methods__ = ['a'] __members__ = ['b'] c = C() - with check_warnings() as w: + with check_py3k_warnings() as w: self.assertWarning(dir(c), w, expected) def test_softspace(self): expected = 'file.softspace not supported in 3.x' with file(__file__) as f: - with check_warnings() as w: + with check_py3k_warnings() as w: self.assertWarning(f.softspace, w, expected) def set(): f.softspace = 0 - with check_warnings() as w: + with check_py3k_warnings() as w: self.assertWarning(set(), w, expected) def test_slice_methods(self): @@ -222,7 +220,7 @@ expected = "in 3.x, __{0}slice__ has been removed; use __{0}item__" for obj in (Spam(), Egg()): - with check_warnings() as w: + with check_py3k_warnings() as w: self.assertWarning(obj[1:2], w, expected.format('get')) w.reset() del obj[3:4] @@ -233,24 +231,23 @@ def test_tuple_parameter_unpacking(self): expected = "tuple parameter unpacking has been removed in 3.x" - with check_warnings() as w: + with check_py3k_warnings((expected, SyntaxWarning)): exec "def f((a, b)): pass" - self.assertWarning(None, w, expected) def test_buffer(self): expected = 'buffer() not supported in 3.x' - with check_warnings() as w: + with check_py3k_warnings() as w: self.assertWarning(buffer('a'), w, expected) def test_file_xreadlines(self): expected = ("f.xreadlines() not supported in 3.x, " "try 'for line in f' instead") with file(__file__) as f: - with check_warnings() as w: + with check_py3k_warnings() as w: self.assertWarning(f.xreadlines(), w, expected) def test_hash_inheritance(self): - with check_warnings() as w: + with check_py3k_warnings() as w: # With object as the base class class WarnOnlyCmp(object): def __cmp__(self, other): pass @@ -313,7 +310,7 @@ "Use hasattr(obj, '__call__').") seq_warn = ("operator.sequenceIncludes() is not supported " "in 3.x. Use operator.contains().") - with check_warnings() as w: + with check_py3k_warnings() as w: self.assertWarning(isCallable(self), w, callable_warn) w.reset() self.assertWarning(sequenceIncludes(range(3), 2), w, seq_warn) @@ -400,7 +397,7 @@ for path_mod in ("ntpath", "macpath", "os2emxpath", "posixpath"): mod = __import__(path_mod) reset_module_registry(mod) - with check_warnings() as w: + with check_py3k_warnings() as w: mod.walk("crashers", dumbo, None) self.assertEquals(str(w.message), msg) Modified: python/trunk/Lib/test/test_shutil.py ============================================================================== --- python/trunk/Lib/test/test_shutil.py (original) +++ python/trunk/Lib/test/test_shutil.py Wed Mar 17 20:15:56 2010 @@ -462,30 +462,26 @@ old_dir = os.getcwd() os.chdir(tmpdir) try: - with captured_stdout() as s: - with check_warnings() as w: - warnings.simplefilter("always") - _make_tarball(base_name, 'dist', compress='compress') + with captured_stdout() as s, check_warnings(quiet=False) as w: + _make_tarball(base_name, 'dist', compress='compress') finally: os.chdir(old_dir) tarball = base_name + '.tar.Z' self.assertTrue(os.path.exists(tarball)) - self.assertEquals(len(w.warnings), 1) + self.assertEqual(len(w.warnings), 1) # same test with dry_run os.remove(tarball) old_dir = os.getcwd() os.chdir(tmpdir) try: - with captured_stdout() as s: - with check_warnings() as w: - warnings.simplefilter("always") - _make_tarball(base_name, 'dist', compress='compress', - dry_run=True) + with captured_stdout() as s, check_warnings(quiet=False) as w: + _make_tarball(base_name, 'dist', compress='compress', + dry_run=True) finally: os.chdir(old_dir) - self.assertTrue(not os.path.exists(tarball)) - self.assertEquals(len(w.warnings), 1) + self.assertFalse(os.path.exists(tarball)) + self.assertEqual(len(w.warnings), 1) @unittest.skipUnless(zlib, "Requires zlib") @unittest.skipUnless(ZIP_SUPPORT, 'Need zip support to run') Modified: python/trunk/Lib/test/test_structmembers.py ============================================================================== --- python/trunk/Lib/test/test_structmembers.py (original) +++ python/trunk/Lib/test/test_structmembers.py Wed Mar 17 20:15:56 2010 @@ -65,39 +65,30 @@ class TestWarnings(unittest.TestCase): - def has_warned(self, w): - self.assertEqual(w.category, RuntimeWarning) def test_byte_max(self): - with test_support.check_warnings() as w: + with test_support.check_warnings(('', RuntimeWarning)): ts.T_BYTE = CHAR_MAX+1 - self.has_warned(w) def test_byte_min(self): - with test_support.check_warnings() as w: + with test_support.check_warnings(('', RuntimeWarning)): ts.T_BYTE = CHAR_MIN-1 - self.has_warned(w) def test_ubyte_max(self): - with test_support.check_warnings() as w: + with test_support.check_warnings(('', RuntimeWarning)): ts.T_UBYTE = UCHAR_MAX+1 - self.has_warned(w) def test_short_max(self): - with test_support.check_warnings() as w: + with test_support.check_warnings(('', RuntimeWarning)): ts.T_SHORT = SHRT_MAX+1 - self.has_warned(w) def test_short_min(self): - with test_support.check_warnings() as w: + with test_support.check_warnings(('', RuntimeWarning)): ts.T_SHORT = SHRT_MIN-1 - self.has_warned(w) def test_ushort_max(self): - with test_support.check_warnings() as w: + with test_support.check_warnings(('', RuntimeWarning)): ts.T_USHORT = USHRT_MAX+1 - self.has_warned(w) - def test_main(verbose=None): From python-checkins at python.org Wed Mar 17 21:05:12 2010 From: python-checkins at python.org (florent.xicluna) Date: Wed, 17 Mar 2010 21:05:12 +0100 (CET) Subject: [Python-checkins] r79032 - in python/trunk/Lib: cgi.py test/test_cgi.py test/test_import.py Message-ID: <20100317200512.198DFE185@mail.python.org> Author: florent.xicluna Date: Wed Mar 17 21:05:11 2010 New Revision: 79032 Log: Fix and check cgi module deprecation warnings. Revert an unwanted rename in test_import. Modified: python/trunk/Lib/cgi.py python/trunk/Lib/test/test_cgi.py python/trunk/Lib/test/test_import.py Modified: python/trunk/Lib/cgi.py ============================================================================== --- python/trunk/Lib/cgi.py (original) +++ python/trunk/Lib/cgi.py Wed Mar 17 21:05:11 2010 @@ -45,10 +45,10 @@ with catch_warnings(): if sys.py3kwarning: filterwarnings("ignore", ".*mimetools has been removed", - DeprecationWarning) + DeprecationWarning) + filterwarnings("ignore", ".*rfc822 has been removed", + DeprecationWarning) import mimetools - if sys.py3kwarning: - filterwarnings("ignore", ".*rfc822 has been removed", DeprecationWarning) import rfc822 try: @@ -180,8 +180,8 @@ def parse_qs(qs, keep_blank_values=0, strict_parsing=0): """Parse a query given as a string argument.""" - warn("cgi.parse_qs is deprecated, use urlparse.parse_qs \ - instead", PendingDeprecationWarning, 2) + warn("cgi.parse_qs is deprecated, use urlparse.parse_qs instead", + PendingDeprecationWarning, 2) return urlparse.parse_qs(qs, keep_blank_values, strict_parsing) Modified: python/trunk/Lib/test/test_cgi.py ============================================================================== --- python/trunk/Lib/test/test_cgi.py (original) +++ python/trunk/Lib/test/test_cgi.py Wed Mar 17 21:05:11 2010 @@ -4,7 +4,6 @@ import sys import tempfile import unittest -from StringIO import StringIO class HackedSysModule: # The regression test will have real values in sys.argv, which @@ -340,14 +339,16 @@ self.assertEqual(result, v) def test_deprecated_parse_qs(self): - with check_warnings(quiet=False): - # this func is moved to urlparse, this is just a sanity check + # this func is moved to urlparse, this is just a sanity check + with check_warnings(('cgi.parse_qs is deprecated, use urlparse.' + 'parse_qs instead', PendingDeprecationWarning)): self.assertEqual({'a': ['A1'], 'B': ['B3'], 'b': ['B2']}, cgi.parse_qs('a=A1&b=B2&B=B3')) def test_deprecated_parse_qsl(self): - with check_warnings(quiet=False): - # this func is moved to urlparse, this is just a sanity check + # this func is moved to urlparse, this is just a sanity check + with check_warnings(('cgi.parse_qsl is deprecated, use urlparse.' + 'parse_qsl instead', PendingDeprecationWarning)): self.assertEqual([('a', 'A1'), ('b', 'B2'), ('B', 'B3')], cgi.parse_qsl('a=A1&b=B2&B=B3')) Modified: python/trunk/Lib/test/test_import.py ============================================================================== --- python/trunk/Lib/test/test_import.py (original) +++ python/trunk/Lib/test/test_import.py Wed Mar 17 21:05:11 2010 @@ -162,7 +162,7 @@ unlink(filename + 'c') unlink(filename + 'o') - def test_0Bfailing_import_sticks(self): + def test_failing_import_sticks(self): source = TESTFN + os.extsep + "py" with open(source, "w") as f: print >> f, "a = 1 // 0" From python-checkins at python.org Wed Mar 17 21:29:51 2010 From: python-checkins at python.org (florent.xicluna) Date: Wed, 17 Mar 2010 21:29:51 +0100 (CET) Subject: [Python-checkins] r79033 - in python/branches/py3k: Lib/test/test_cgi.py Lib/test/test_coding.py Lib/test/test_import.py Lib/test/test_io.py Lib/test/test_shutil.py Lib/test/test_structmembers.py Message-ID: <20100317202951.50090F9CE@mail.python.org> Author: florent.xicluna Date: Wed Mar 17 21:29:51 2010 New Revision: 79033 Log: Merged revisions 79030-79032 via svnmerge from svn+ssh://pythondev at svn.python.org/python/trunk ........ r79030 | florent.xicluna | 2010-03-17 20:05:04 +0100 (mer, 17 mar 2010) | 2 lines Cleanup in test_import and test_coding. ........ r79031 | florent.xicluna | 2010-03-17 20:15:56 +0100 (mer, 17 mar 2010) | 2 lines Cleanup some test cases using check_warnings and check_py3k_warnings. ........ r79032 | florent.xicluna | 2010-03-17 21:05:11 +0100 (mer, 17 mar 2010) | 2 lines Fix and check cgi module deprecation warnings. Revert an unwanted rename in test_import. ........ Modified: python/branches/py3k/ (props changed) python/branches/py3k/Lib/test/test_cgi.py python/branches/py3k/Lib/test/test_coding.py python/branches/py3k/Lib/test/test_import.py python/branches/py3k/Lib/test/test_io.py python/branches/py3k/Lib/test/test_shutil.py python/branches/py3k/Lib/test/test_structmembers.py Modified: python/branches/py3k/Lib/test/test_cgi.py ============================================================================== --- python/branches/py3k/Lib/test/test_cgi.py (original) +++ python/branches/py3k/Lib/test/test_cgi.py Wed Mar 17 21:29:51 2010 @@ -1,11 +1,10 @@ -from test.support import run_unittest +from test.support import run_unittest, check_warnings import cgi import os import sys import tempfile import unittest from io import StringIO -from warnings import catch_warnings, filterwarnings class HackedSysModule: # The regression test will have real values in sys.argv, which @@ -15,10 +14,6 @@ cgi.sys = HackedSysModule() -try: - from io import StringIO -except ImportError: - from io import StringIO class ComparableException: def __init__(self, err): @@ -117,7 +112,7 @@ result = {} for k, v in dict(form).items(): - result[k] = type(v) is list and form.getlist(k) or v.value + result[k] = isinstance(v, list) and form.getlist(k) or v.value return result @@ -133,7 +128,7 @@ env = {'QUERY_STRING': orig} fs = cgi.FieldStorage(environ=env) - if type(expect) == type({}): + if isinstance(expect, dict): # test dict interface self.assertEqual(len(expect), len(fs)) self.assertEqual(norm(expect.keys()), norm(fs.keys())) @@ -308,20 +303,16 @@ self.assertEqual(result, v) def test_deprecated_parse_qs(self): - # this func is moved to urlparse, this is just a sanity check - with catch_warnings(): - filterwarnings('ignore', - 'cgi.parse_qs is deprecated, use urllib.parse.parse_qs instead', - DeprecationWarning) + # this func is moved to urllib.parse, this is just a sanity check + with check_warnings(('cgi.parse_qs is deprecated, use urllib.parse.' + 'parse_qs instead', DeprecationWarning)): self.assertEqual({'a': ['A1'], 'B': ['B3'], 'b': ['B2']}, cgi.parse_qs('a=A1&b=B2&B=B3')) def test_deprecated_parse_qsl(self): - # this func is moved to urlparse, this is just a sanity check - with catch_warnings(): - filterwarnings('ignore', - 'cgi.parse_qsl is deprecated, use urllib.parse.parse_qsl instead', - DeprecationWarning) + # this func is moved to urllib.parse, this is just a sanity check + with check_warnings(('cgi.parse_qsl is deprecated, use urllib.parse.' + 'parse_qsl instead', DeprecationWarning)): self.assertEqual([('a', 'A1'), ('b', 'B2'), ('B', 'B3')], cgi.parse_qsl('a=A1&b=B2&B=B3')) Modified: python/branches/py3k/Lib/test/test_coding.py ============================================================================== --- python/branches/py3k/Lib/test/test_coding.py (original) +++ python/branches/py3k/Lib/test/test_coding.py Wed Mar 17 21:29:51 2010 @@ -1,6 +1,6 @@ import test.support, unittest -from test.support import TESTFN, unlink +from test.support import TESTFN, unlink, unload import os, sys class CodingTest(unittest.TestCase): @@ -17,9 +17,8 @@ path = os.path.dirname(__file__) filename = os.path.join(path, module_name + '.py') - fp = open(filename, "rb") - bytes = fp.read() - fp.close() + with open(filename, "rb") as fp: + bytes = fp.read() self.assertRaises(SyntaxError, compile, bytes, filename, 'exec') def test_exec_valid_coding(self): @@ -30,9 +29,8 @@ def test_file_parse(self): # issue1134: all encodings outside latin-1 and utf-8 fail on # multiline strings and long lines (>512 columns) - if TESTFN in sys.modules: - del sys.modules[TESTFN] - sys.path.insert(0, ".") + unload(TESTFN) + sys.path.insert(0, os.curdir) filename = TESTFN + ".py" f = open(filename, "w") try: @@ -45,21 +43,20 @@ __import__(TESTFN) finally: f.close() - unlink(TESTFN+".py") - unlink(TESTFN+".pyc") - sys.path.pop(0) + unlink(filename) + unlink(filename + "c") + unload(TESTFN) + del sys.path[0] def test_error_from_string(self): # See http://bugs.python.org/issue6289 input = "# coding: ascii\n\N{SNOWMAN}".encode('utf-8') - try: + with self.assertRaises(SyntaxError) as c: compile(input, "", "exec") - except SyntaxError as e: - expected = "'ascii' codec can't decode byte 0xe2 in position 16: " \ - "ordinal not in range(128)" - self.assertTrue(str(e).startswith(expected)) - else: - self.fail("didn't raise") + expected = "'ascii' codec can't decode byte 0xe2 in position 16: " \ + "ordinal not in range(128)" + self.assertTrue(c.exception.args[0].startswith(expected)) + def test_main(): test.support.run_unittest(CodingTest) Modified: python/branches/py3k/Lib/test/test_import.py ============================================================================== --- python/branches/py3k/Lib/test/test_import.py (original) +++ python/branches/py3k/Lib/test/test_import.py Wed Mar 17 21:29:51 2010 @@ -8,9 +8,8 @@ import stat import sys import unittest -import warnings -from test.support import (unlink, TESTFN, unload, run_unittest, - TestFailed, EnvironmentVarGuard, swap_attr, swap_item) +from test.support import (unlink, TESTFN, unload, run_unittest, is_jython, + check_warnings, EnvironmentVarGuard, swap_attr, swap_item) def remove_files(name): @@ -19,12 +18,15 @@ name + ".pyo", name + ".pyw", name + "$py.class"): - if os.path.exists(f): - os.remove(f) + unlink(f) class ImportTests(unittest.TestCase): + def tearDown(self): + unload(TESTFN) + setUp = tearDown + def test_case_sensitivity(self): # Brief digression to test that import is case-sensitive: if we got # this far, we know for sure that "random" exists. @@ -45,7 +47,7 @@ # The extension is normally ".py", perhaps ".pyw". source = TESTFN + ext pyo = TESTFN + ".pyo" - if sys.platform.startswith('java'): + if is_jython: pyc = TESTFN + "$py.class" else: pyc = TESTFN + ".pyc" @@ -66,15 +68,15 @@ except ImportError as err: self.fail("import from %s failed: %s" % (ext, err)) - self.assertEquals(mod.a, a, + self.assertEqual(mod.a, a, "module loaded (%s) but contents invalid" % mod) - self.assertEquals(mod.b, b, + self.assertEqual(mod.b, b, "module loaded (%s) but contents invalid" % mod) finally: unlink(source) unlink(pyc) unlink(pyo) - del sys.modules[TESTFN] + unload(TESTFN) sys.path.insert(0, os.curdir) try: @@ -100,21 +102,22 @@ fn = fname + 'c' if not os.path.exists(fn): fn = fname + 'o' - if not os.path.exists(fn): raise TestFailed("__import__ did " - "not result in creation of either a .pyc or .pyo file") + if not os.path.exists(fn): + self.fail("__import__ did not result in creation of " + "either a .pyc or .pyo file") s = os.stat(fn) - self.assertEquals(stat.S_IMODE(s.st_mode), - stat.S_IRUSR | stat.S_IRGRP | stat.S_IROTH) + self.assertEqual(stat.S_IMODE(s.st_mode), + stat.S_IRUSR | stat.S_IRGRP | stat.S_IROTH) finally: os.umask(oldmask) remove_files(TESTFN) - if TESTFN in sys.modules: del sys.modules[TESTFN] + unload(TESTFN) del sys.path[0] def test_imp_module(self): # Verify that the imp module can correctly load and find .py files import imp, os - # XXX (ncoghlan): It would be nice to use test_support.CleanImport + # XXX (ncoghlan): It would be nice to use support.CleanImport # here, but that breaks because the os module registers some # handlers in copy_reg on import. Since CleanImport doesn't # revert that registration, the module is left in a broken @@ -144,7 +147,7 @@ # Compile & remove .py file, we only need .pyc (or .pyo). with open(filename, 'r') as f: py_compile.compile(filename) - os.unlink(filename) + unlink(filename) # Need to be able to load from current dir. sys.path.append('') @@ -154,10 +157,8 @@ # Cleanup. del sys.path[-1] - for ext in '.pyc', '.pyo': - fname = module + ext - if os.path.exists(fname): - os.unlink(fname) + unlink(filename + 'c') + unlink(filename + 'o') def test_failing_import_sticks(self): source = TESTFN + ".py" @@ -171,15 +172,11 @@ del sys.modules[TESTFN] try: for i in [1, 2, 3]: - try: - mod = __import__(TESTFN) - except ZeroDivisionError: - if TESTFN in sys.modules: - self.fail("damaged module in sys.modules on %i. try" % i) - else: - self.fail("was able to import a damaged module on %i. try" % i) + self.assertRaises(ZeroDivisionError, __import__, TESTFN) + self.assertNotIn(TESTFN, sys.modules, + "damaged module in sys.modules on %i try" % i) finally: - sys.path.pop(0) + del sys.path[0] remove_files(TESTFN) def test_import_name_binding(self): @@ -210,8 +207,8 @@ try: mod = __import__(TESTFN) self.assertIn(TESTFN, sys.modules) - self.assertEquals(mod.a, 1, "module has wrong attribute values") - self.assertEquals(mod.b, 2, "module has wrong attribute values") + self.assertEqual(mod.a, 1, "module has wrong attribute values") + self.assertEqual(mod.b, 2, "module has wrong attribute values") # On WinXP, just replacing the .py file wasn't enough to # convince reload() to reparse it. Maybe the timestamp didn't @@ -226,18 +223,17 @@ self.assertRaises(ZeroDivisionError, imp.reload, mod) # But we still expect the module to be in sys.modules. mod = sys.modules.get(TESTFN) - self.assertFalse(mod is None, "expected module to be in sys.modules") + self.assertIsNot(mod, None, "expected module to be in sys.modules") # We should have replaced a w/ 10, but the old b value should # stick. - self.assertEquals(mod.a, 10, "module has wrong attribute values") - self.assertEquals(mod.b, 2, "module has wrong attribute values") + self.assertEqual(mod.a, 10, "module has wrong attribute values") + self.assertEqual(mod.b, 2, "module has wrong attribute values") finally: - sys.path.pop(0) + del sys.path[0] remove_files(TESTFN) - if TESTFN in sys.modules: - del sys.modules[TESTFN] + unload(TESTFN) def test_file_to_source(self): # check if __file__ points to the source file where available @@ -255,19 +251,34 @@ ext = mod.__file__[-4:] self.assertIn(ext, ('.pyc', '.pyo')) finally: - sys.path.pop(0) + del sys.path[0] remove_files(TESTFN) if TESTFN in sys.modules: del sys.modules[TESTFN] + def test_import_name_binding(self): + # import x.y.z binds x in the current namespace. + import test as x + import test.support + self.assertIs(x, test, x.__name__) + self.assertTrue(hasattr(test.support, "__file__")) + + # import x.y.z as w binds z as w. + import test.support as y + self.assertIs(y, test.support, y.__name__) + + def test_import_initless_directory_warning(self): + with check_warnings(('', ImportWarning)): + # Just a random non-package directory we always expect to be + # somewhere in sys.path... + self.assertRaises(ImportError, __import__, "site-packages") + def test_import_by_filename(self): path = os.path.abspath(TESTFN) - try: + with self.assertRaises(ImportError) as c: __import__(path) - except ImportError as err: - pass - else: - self.fail("import by path didn't raise an exception") + self.assertEqual("Import by filename is not supported.", + c.exception.args[0]) class PycRewritingTests(unittest.TestCase): @@ -302,10 +313,9 @@ if self.orig_module is not None: sys.modules[self.module_name] = self.orig_module else: - del sys.modules[self.module_name] - for file_name in self.file_name, self.compiled_name: - if os.path.exists(file_name): - os.remove(file_name) + unload(self.module_name) + unlink(self.file_name) + unlink(self.compiled_name) if os.path.exists(self.dir_name): shutil.rmtree(self.dir_name) @@ -406,11 +416,10 @@ class RelativeImportTests(unittest.TestCase): + def tearDown(self): - try: - del sys.modules["test.relimport"] - except: - pass + unload("test.relimport") + setUp = tearDown def test_relimport_star(self): # This will import * from .test_import. Modified: python/branches/py3k/Lib/test/test_io.py ============================================================================== --- python/branches/py3k/Lib/test/test_io.py (original) +++ python/branches/py3k/Lib/test/test_io.py Wed Mar 17 21:29:51 2010 @@ -1046,14 +1046,9 @@ self.assertRaises(IOError, bufio.write, b"abcdef") def test_max_buffer_size_deprecation(self): - with support.check_warnings() as w: - warnings.simplefilter("always", DeprecationWarning) + with support.check_warnings(("max_buffer_size is deprecated", + DeprecationWarning)): self.tp(self.MockRawIO(), 8, 12) - self.assertEqual(len(w.warnings), 1) - warning = w.warnings[0] - self.assertTrue(warning.category is DeprecationWarning) - self.assertEqual(str(warning.message), - "max_buffer_size is deprecated") class CBufferedWriterTest(BufferedWriterTest): @@ -1109,14 +1104,9 @@ self.assertRaises(self.UnsupportedOperation, pair.detach) def test_constructor_max_buffer_size_deprecation(self): - with support.check_warnings() as w: - warnings.simplefilter("always", DeprecationWarning) + with support.check_warnings(("max_buffer_size is deprecated", + DeprecationWarning)): self.tp(self.MockRawIO(), self.MockRawIO(), 8, 12) - self.assertEqual(len(w.warnings), 1) - warning = w.warnings[0] - self.assertTrue(warning.category is DeprecationWarning) - self.assertEqual(str(warning.message), - "max_buffer_size is deprecated") def test_constructor_with_not_readable(self): class NotReadable(MockRawIO): Modified: python/branches/py3k/Lib/test/test_shutil.py ============================================================================== --- python/branches/py3k/Lib/test/test_shutil.py (original) +++ python/branches/py3k/Lib/test/test_shutil.py Wed Mar 17 21:29:51 2010 @@ -464,30 +464,26 @@ old_dir = os.getcwd() os.chdir(tmpdir) try: - with captured_stdout() as s: - with check_warnings() as w: - warnings.simplefilter("always") - _make_tarball(base_name, 'dist', compress='compress') + with captured_stdout() as s, check_warnings(quiet=False) as w: + _make_tarball(base_name, 'dist', compress='compress') finally: os.chdir(old_dir) tarball = base_name + '.tar.Z' self.assertTrue(os.path.exists(tarball)) - self.assertEquals(len(w.warnings), 1) + self.assertEqual(len(w.warnings), 1) # same test with dry_run os.remove(tarball) old_dir = os.getcwd() os.chdir(tmpdir) try: - with captured_stdout() as s: - with check_warnings() as w: - warnings.simplefilter("always") - _make_tarball(base_name, 'dist', compress='compress', - dry_run=True) + with captured_stdout() as s, check_warnings(quiet=False) as w: + _make_tarball(base_name, 'dist', compress='compress', + dry_run=True) finally: os.chdir(old_dir) - self.assertTrue(not os.path.exists(tarball)) - self.assertEquals(len(w.warnings), 1) + self.assertFalse(os.path.exists(tarball)) + self.assertEqual(len(w.warnings), 1) @unittest.skipUnless(zlib, "Requires zlib") @unittest.skipUnless(ZIP_SUPPORT, 'Need zip support to run') Modified: python/branches/py3k/Lib/test/test_structmembers.py ============================================================================== --- python/branches/py3k/Lib/test/test_structmembers.py (original) +++ python/branches/py3k/Lib/test/test_structmembers.py Wed Mar 17 21:29:51 2010 @@ -103,39 +103,30 @@ class TestWarnings(unittest.TestCase): - def has_warned(self, w): - self.assertEqual(w.category, RuntimeWarning) def test_byte_max(self): - with support.check_warnings() as w: + with support.check_warnings(('', RuntimeWarning)): ts.T_BYTE = CHAR_MAX+1 - self.has_warned(w) def test_byte_min(self): - with support.check_warnings() as w: + with support.check_warnings(('', RuntimeWarning)): ts.T_BYTE = CHAR_MIN-1 - self.has_warned(w) def test_ubyte_max(self): - with support.check_warnings() as w: + with support.check_warnings(('', RuntimeWarning)): ts.T_UBYTE = UCHAR_MAX+1 - self.has_warned(w) def test_short_max(self): - with support.check_warnings() as w: + with support.check_warnings(('', RuntimeWarning)): ts.T_SHORT = SHRT_MAX+1 - self.has_warned(w) def test_short_min(self): - with support.check_warnings() as w: + with support.check_warnings(('', RuntimeWarning)): ts.T_SHORT = SHRT_MIN-1 - self.has_warned(w) def test_ushort_max(self): - with support.check_warnings() as w: + with support.check_warnings(('', RuntimeWarning)): ts.T_USHORT = USHRT_MAX+1 - self.has_warned(w) - def test_main(verbose=None): From python-checkins at python.org Wed Mar 17 21:41:42 2010 From: python-checkins at python.org (benjamin.peterson) Date: Wed, 17 Mar 2010 21:41:42 +0100 (CET) Subject: [Python-checkins] r79034 - in python/trunk: Lib/test/test_compile.py Misc/NEWS Python/compile.c Message-ID: <20100317204142.39E39DE86@mail.python.org> Author: benjamin.peterson Date: Wed Mar 17 21:41:42 2010 New Revision: 79034 Log: prevent lambda functions from having docstrings #8164 Modified: python/trunk/Lib/test/test_compile.py python/trunk/Misc/NEWS python/trunk/Python/compile.c Modified: python/trunk/Lib/test/test_compile.py ============================================================================== --- python/trunk/Lib/test/test_compile.py (original) +++ python/trunk/Lib/test/test_compile.py Wed Mar 17 21:41:42 2010 @@ -353,6 +353,10 @@ f1, f2 = f() self.assertNotEqual(id(f1.func_code), id(f2.func_code)) + def test_lambda_doc(self): + l = lambda: "foo" + self.assertIsNone(l.__doc__) + def test_unicode_encoding(self): code = u"# -*- coding: utf-8 -*-\npass\n" self.assertRaises(SyntaxError, compile, code, "tmp", "exec") Modified: python/trunk/Misc/NEWS ============================================================================== --- python/trunk/Misc/NEWS (original) +++ python/trunk/Misc/NEWS Wed Mar 17 21:41:42 2010 @@ -12,6 +12,8 @@ Core and Builtins ----------------- +- Issue #8164: Don't allow lambda functions to have a docstring. + - Issue #3137: Don't ignore errors at startup, especially a keyboard interrupt (SIGINT). If an error occurs while importing the site module, the error is printed and Python exits. Initialize the GIL before importing the site Modified: python/trunk/Python/compile.c ============================================================================== --- python/trunk/Python/compile.c (original) +++ python/trunk/Python/compile.c Wed Mar 17 21:41:42 2010 @@ -1518,6 +1518,11 @@ /* unpack nested arguments */ compiler_arguments(c, args); + + /* Make None the first constant, so the lambda can't have a + docstring. */ + if (compiler_add_o(c, c->u->u_consts, Py_None) < 0) + return 0; c->u->u_argcount = asdl_seq_LEN(args->args); VISIT_IN_SCOPE(c, expr, e->v.Lambda.body); From python-checkins at python.org Wed Mar 17 21:56:59 2010 From: python-checkins at python.org (benjamin.peterson) Date: Wed, 17 Mar 2010 21:56:59 +0100 (CET) Subject: [Python-checkins] r79035 - in python/branches/py3k: Lib/test/test_compile.py Python/compile.c Message-ID: <20100317205659.0E784F689@mail.python.org> Author: benjamin.peterson Date: Wed Mar 17 21:56:58 2010 New Revision: 79035 Log: Merged revisions 79034 via svnmerge from svn+ssh://pythondev at svn.python.org/python/trunk ........ r79034 | benjamin.peterson | 2010-03-17 15:41:42 -0500 (Wed, 17 Mar 2010) | 1 line prevent lambda functions from having docstrings #8164 ........ Modified: python/branches/py3k/ (props changed) python/branches/py3k/Lib/test/test_compile.py python/branches/py3k/Python/compile.c Modified: python/branches/py3k/Lib/test/test_compile.py ============================================================================== --- python/branches/py3k/Lib/test/test_compile.py (original) +++ python/branches/py3k/Lib/test/test_compile.py Wed Mar 17 21:56:58 2010 @@ -292,9 +292,9 @@ f1, f2 = f() self.assertNotEqual(id(f1.__code__), id(f2.__code__)) -## def test_unicode_encoding(self): -## code = "# -*- coding: utf-8 -*-\npass\n" -## self.assertRaises(SyntaxError, compile, code, "tmp", "exec") + def test_lambda_doc(self): + l = lambda: "foo" + self.assertIsNone(l.__doc__) def test_subscripts(self): # SF bug 1448804 Modified: python/branches/py3k/Python/compile.c ============================================================================== --- python/branches/py3k/Python/compile.c (original) +++ python/branches/py3k/Python/compile.c Wed Mar 17 21:56:58 2010 @@ -1660,6 +1660,11 @@ if (!compiler_enter_scope(c, name, (void *)e, e->lineno)) return 0; + /* Make None the first constant, so the lambda can't have a + docstring. */ + if (compiler_add_o(c, c->u->u_consts, Py_None) < 0) + return 0; + c->u->u_argcount = asdl_seq_LEN(args->args); c->u->u_kwonlyargcount = asdl_seq_LEN(args->kwonlyargs); VISIT_IN_SCOPE(c, expr, e->v.Lambda.body); From python-checkins at python.org Wed Mar 17 21:57:33 2010 From: python-checkins at python.org (benjamin.peterson) Date: Wed, 17 Mar 2010 21:57:33 +0100 (CET) Subject: [Python-checkins] r79036 - python/branches/py3k/Lib/test/test_compile.py Message-ID: <20100317205733.22F51F8EA@mail.python.org> Author: benjamin.peterson Date: Wed Mar 17 21:57:32 2010 New Revision: 79036 Log: bring back commented out test Modified: python/branches/py3k/Lib/test/test_compile.py Modified: python/branches/py3k/Lib/test/test_compile.py ============================================================================== --- python/branches/py3k/Lib/test/test_compile.py (original) +++ python/branches/py3k/Lib/test/test_compile.py Wed Mar 17 21:57:32 2010 @@ -296,6 +296,10 @@ l = lambda: "foo" self.assertIsNone(l.__doc__) +## def test_unicode_encoding(self): +## code = "# -*- coding: utf-8 -*-\npass\n" +## self.assertRaises(SyntaxError, compile, code, "tmp", "exec") + def test_subscripts(self): # SF bug 1448804 # Class to make testing subscript results easy From python-checkins at python.org Wed Mar 17 22:47:38 2010 From: python-checkins at python.org (collin.winter) Date: Wed, 17 Mar 2010 22:47:38 +0100 (CET) Subject: [Python-checkins] r79037 - in python/branches/py3k-jit: Lib/test/regrtest.py Lib/test/support.py Lib/test/test_dynamic.py Lib/test/test_import.py Message-ID: <20100317214738.4988DE436@mail.python.org> Author: collin.winter Date: Wed Mar 17 22:47:38 2010 New Revision: 79037 Log: Merged revisions 79009,79014,79017,79019-79020,79022,79025 via svnmerge from svn+ssh://pythondev at svn.python.org/python/branches/py3k ................ r79009 | collin.winter | 2010-03-16 17:41:56 -0700 (Tue, 16 Mar 2010) | 1 line Add some tests for ways users can change or shadow globals and builtins. ................ r79014 | collin.winter | 2010-03-16 19:08:57 -0700 (Tue, 16 Mar 2010) | 9 lines Merged revisions 79013 via svnmerge from svn+ssh://pythondev at svn.python.org/python/trunk ........ r79013 | collin.winter | 2010-03-16 19:02:30 -0700 (Tue, 16 Mar 2010) | 1 line Fix a trivial class of (hypothetical, future) false-positive refleaks, discovered by an optimization in Unladen Swallow's past (which will become CPython's future). ........ ................ r79017 | collin.winter | 2010-03-16 19:51:00 -0700 (Tue, 16 Mar 2010) | 1 line Commit missing merge info from r79014. ................ r79019 | collin.winter | 2010-03-16 20:09:21 -0700 (Tue, 16 Mar 2010) | 9 lines Merged revisions 79016 via svnmerge from svn+ssh://pythondev at svn.python.org/python/trunk ........ r79016 | collin.winter | 2010-03-16 19:40:12 -0700 (Tue, 16 Mar 2010) | 1 line Style cleanup in test_import. ........ ................ r79020 | collin.winter | 2010-03-16 20:14:31 -0700 (Tue, 16 Mar 2010) | 1 line Add tests for overriding and shadowing __import__; these are a useful tripwire for an incoming JIT optimization. ................ r79022 | benjamin.peterson | 2010-03-16 20:30:15 -0700 (Tue, 16 Mar 2010) | 1 line set svn:eol-style ................ r79025 | ezio.melotti | 2010-03-17 07:28:47 -0700 (Wed, 17 Mar 2010) | 8 lines Blocked revisions 79023 via svnmerge ........ r79023 | ezio.melotti | 2010-03-17 15:52:48 +0200 (Wed, 17 Mar 2010) | 1 line #7092: silence some more py3k warnings. ........ ................ Added: python/branches/py3k-jit/Lib/test/test_dynamic.py - copied unchanged from r79025, /python/branches/py3k/Lib/test/test_dynamic.py Modified: python/branches/py3k-jit/ (props changed) python/branches/py3k-jit/Lib/test/regrtest.py python/branches/py3k-jit/Lib/test/support.py python/branches/py3k-jit/Lib/test/test_import.py Modified: python/branches/py3k-jit/Lib/test/regrtest.py ============================================================================== --- python/branches/py3k-jit/Lib/test/regrtest.py (original) +++ python/branches/py3k-jit/Lib/test/regrtest.py Wed Mar 17 22:47:38 2010 @@ -1010,13 +1010,14 @@ sys.stderr.flush() dash_R_cleanup(fs, ps, pic, zdc, abcs) for i in range(repcount): - rc = sys.gettotalrefcount() + rc_before = sys.gettotalrefcount() run_the_test() sys.stderr.write('.') sys.stderr.flush() dash_R_cleanup(fs, ps, pic, zdc, abcs) + rc_after = sys.gettotalrefcount() if i >= nwarmup: - deltas.append(sys.gettotalrefcount() - rc - 2) + deltas.append(rc_after - rc_before) print(file=sys.stderr) if any(deltas): msg = '%s leaked %s references, sum=%s' % (test, deltas, sum(deltas)) Modified: python/branches/py3k-jit/Lib/test/support.py ============================================================================== --- python/branches/py3k-jit/Lib/test/support.py (original) +++ python/branches/py3k-jit/Lib/test/support.py Wed Mar 17 22:47:38 2010 @@ -30,7 +30,8 @@ "run_with_locale", "set_memlimit", "bigmemtest", "bigaddrspacetest", "BasicTestRunner", "run_unittest", "run_doctest", "threading_setup", "threading_cleanup", - "reap_children", "cpython_only", "check_impl_detail", "get_attribute"] + "reap_children", "cpython_only", "check_impl_detail", "get_attribute", + "swap_item", "swap_attr"] class Error(Exception): """Base class for regression test exceptions.""" @@ -1074,3 +1075,57 @@ break except: break + + at contextlib.contextmanager +def swap_attr(obj, attr, new_val): + """Temporary swap out an attribute with a new object. + + Usage: + with swap_attr(obj, "attr", 5): + ... + + This will set obj.attr to 5 for the duration of the with: block, + restoring the old value at the end of the block. If `attr` doesn't + exist on `obj`, it will be created and then deleted at the end of the + block. + """ + if hasattr(obj, attr): + real_val = getattr(obj, attr) + setattr(obj, attr, new_val) + try: + yield + finally: + setattr(obj, attr, real_val) + else: + setattr(obj, attr, new_val) + try: + yield + finally: + delattr(obj, attr) + + at contextlib.contextmanager +def swap_item(obj, item, new_val): + """Temporary swap out an item with a new object. + + Usage: + with swap_item(obj, "item", 5): + ... + + This will set obj["item"] to 5 for the duration of the with: block, + restoring the old value at the end of the block. If `item` doesn't + exist on `obj`, it will be created and then deleted at the end of the + block. + """ + if item in obj: + real_val = obj[item] + obj[item] = new_val + try: + yield + finally: + obj[item] = real_val + else: + obj[item] = new_val + try: + yield + finally: + del obj[item] Modified: python/branches/py3k-jit/Lib/test/test_import.py ============================================================================== --- python/branches/py3k-jit/Lib/test/test_import.py (original) +++ python/branches/py3k-jit/Lib/test/test_import.py Wed Mar 17 22:47:38 2010 @@ -1,15 +1,16 @@ -import unittest +import builtins +import imp +import marshal import os -import stat +import py_compile import random import shutil +import stat import sys -import py_compile +import unittest import warnings -import imp -import marshal from test.support import (unlink, TESTFN, unload, run_unittest, - TestFailed, EnvironmentVarGuard) + TestFailed, EnvironmentVarGuard, swap_attr, swap_item) def remove_files(name): @@ -22,11 +23,11 @@ os.remove(f) -class ImportTest(unittest.TestCase): +class ImportTests(unittest.TestCase): - def testCaseSensitivity(self): - # Brief digression to test that import is case-sensitive: if we got this - # far, we know for sure that "random" exists. + def test_case_sensitivity(self): + # Brief digression to test that import is case-sensitive: if we got + # this far, we know for sure that "random" exists. try: import RAnDoM except ImportError: @@ -34,13 +35,14 @@ else: self.fail("import of RAnDoM should have failed (case mismatch)") - def testDoubleConst(self): - # Another brief digression to test the accuracy of manifest float constants. + def test_double_const(self): + # Another brief digression to test the accuracy of manifest float + # constants. from test import double_const # don't blink -- that *was* the test - def testImport(self): + def test_import(self): def test_with_extension(ext): - # ext normally ".py"; perhaps ".pyw" + # The extension is normally ".py", perhaps ".pyw". source = TESTFN + ext pyo = TESTFN + ".pyo" if sys.platform.startswith('java'): @@ -49,7 +51,8 @@ pyc = TESTFN + ".pyc" with open(source, "w") as f: - print("# This tests Python's ability to import a", ext, "file.", file=f) + print("# This tests Python's ability to import a", ext, "file.", + file=f) a = random.randrange(1000) b = random.randrange(1000) print("a =", a, file=f) @@ -77,7 +80,7 @@ try: test_with_extension(".py") if sys.platform.startswith("win"): - for ext in ".PY", ".Py", ".pY", ".pyw", ".PYW", ".pYw": + for ext in [".PY", ".Py", ".pY", ".pyw", ".PYW", ".pYw"]: test_with_extension(ext) finally: del sys.path[0] @@ -108,7 +111,7 @@ if TESTFN in sys.modules: del sys.modules[TESTFN] del sys.path[0] - def testImpModule(self): + def test_imp_module(self): # Verify that the imp module can correctly load and find .py files import imp, os # XXX (ncoghlan): It would be nice to use test_support.CleanImport @@ -128,30 +131,28 @@ self.assertIsNot(orig_getenv, new_os.getenv) def test_module_with_large_stack(self, module='longlist'): - # create module w/list of 65000 elements to test bug #561858 + # Regression test for http://bugs.python.org/issue561858. filename = module + '.py' - # create a file with a list of 65000 elements - f = open(filename, 'w+') - f.write('d = [\n') - for i in range(65000): - f.write('"",\n') - f.write(']') - f.close() - - # compile & remove .py file, we only need .pyc (or .pyo) - f = open(filename, 'r') - py_compile.compile(filename) - f.close() + # Create a file with a list of 65000 elements. + with open(filename, 'w+') as f: + f.write('d = [\n') + for i in range(65000): + f.write('"",\n') + f.write(']') + + # Compile & remove .py file, we only need .pyc (or .pyo). + with open(filename, 'r') as f: + py_compile.compile(filename) os.unlink(filename) - # need to be able to load from current dir + # Need to be able to load from current dir. sys.path.append('') - # this used to crash + # This used to crash. exec('import ' + module) - # cleanup + # Cleanup. del sys.path[-1] for ext in '.pyc', '.pyo': fname = module + ext @@ -160,9 +161,8 @@ def test_failing_import_sticks(self): source = TESTFN + ".py" - f = open(source, "w") - print("a = 1/0", file=f) - f.close() + with open(source, "w") as f: + print("a = 1/0", file=f) # New in 2.4, we shouldn't be able to import that no matter how often # we try. @@ -170,7 +170,7 @@ if TESTFN in sys.modules: del sys.modules[TESTFN] try: - for i in 1, 2, 3: + for i in [1, 2, 3]: try: mod = __import__(TESTFN) except ZeroDivisionError: @@ -202,7 +202,7 @@ def test_failing_reload(self): # A failing reload should leave the module object in sys.modules. - source = TESTFN + ".py" + source = TESTFN + os.extsep + "py" with open(source, "w") as f: f.write("a = 1\nb=2\n") @@ -226,7 +226,7 @@ self.assertRaises(ZeroDivisionError, imp.reload, mod) # But we still expect the module to be in sys.modules. mod = sys.modules.get(TESTFN) - self.assertFalse(mod is None, "expected module to still be in sys.modules") + self.assertFalse(mod is None, "expected module to be in sys.modules") # We should have replaced a w/ 10, but the old b value should # stick. @@ -260,8 +260,7 @@ if TESTFN in sys.modules: del sys.modules[TESTFN] - - def test_importbyfilename(self): + def test_import_by_filename(self): path = os.path.abspath(TESTFN) try: __import__(path) @@ -271,7 +270,7 @@ self.fail("import by path didn't raise an exception") -class TestPycRewriting(unittest.TestCase): +class PycRewritingTests(unittest.TestCase): # Test that the `co_filename` attribute on code objects always points # to the right file, even when various things happen (e.g. both the .py # and the .pyc file are renamed). @@ -363,6 +362,7 @@ mod = self.import_module() self.assertEqual(mod.constant.co_filename, foreign_code.co_filename) + class PathsTests(unittest.TestCase): SAMPLES = ('test', 'test\u00e4\u00f6\u00fc\u00df', 'test\u00e9\u00e8', 'test\u00b0\u00b3\u00b2') @@ -376,22 +376,20 @@ shutil.rmtree(self.path) sys.path[:] = self.syspath - # http://bugs.python.org/issue1293 + # Regression test for http://bugs.python.org/issue1293. def test_trailing_slash(self): - f = open(os.path.join(self.path, 'test_trailing_slash.py'), 'w') - f.write("testdata = 'test_trailing_slash'") - f.close() + with open(os.path.join(self.path, 'test_trailing_slash.py'), 'w') as f: + f.write("testdata = 'test_trailing_slash'") sys.path.append(self.path+'/') mod = __import__("test_trailing_slash") self.assertEqual(mod.testdata, 'test_trailing_slash') unload("test_trailing_slash") - # http://bugs.python.org/issue3677 + # Regression test for http://bugs.python.org/issue3677. def _test_UNC_path(self): - f = open(os.path.join(self.path, 'test_trailing_slash.py'), 'w') - f.write("testdata = 'test_trailing_slash'") - f.close() - #create the UNC path, like \\myhost\c$\foo\bar + with open(os.path.join(self.path, 'test_trailing_slash.py'), 'w') as f: + f.write("testdata = 'test_trailing_slash'") + # Create the UNC path, like \\myhost\c$\foo\bar. path = os.path.abspath(self.path) import socket hn = socket.gethostname() @@ -407,7 +405,7 @@ test_UNC_path = _test_UNC_path -class RelativeImport(unittest.TestCase): +class RelativeImportTests(unittest.TestCase): def tearDown(self): try: del sys.modules["test.relimport"] @@ -417,34 +415,63 @@ def test_relimport_star(self): # This will import * from .test_import. from . import relimport - self.assertTrue(hasattr(relimport, "RelativeImport")) + self.assertTrue(hasattr(relimport, "RelativeImportTests")) def test_issue3221(self): # Note for mergers: the 'absolute' tests from the 2.x branch # are missing in Py3k because implicit relative imports are # a thing of the past + # + # Regression test for http://bugs.python.org/issue3221. def check_relative(): exec("from . import relimport", ns) + # Check relative import OK with __package__ and __name__ correct ns = dict(__package__='test', __name__='test.notarealmodule') check_relative() + # Check relative import OK with only __name__ wrong ns = dict(__package__='test', __name__='notarealpkg.notarealmodule') check_relative() + # Check relative import fails with only __package__ wrong ns = dict(__package__='foo', __name__='test.notarealmodule') self.assertRaises(SystemError, check_relative) + # Check relative import fails with __package__ and __name__ wrong ns = dict(__package__='foo', __name__='notarealpkg.notarealmodule') self.assertRaises(SystemError, check_relative) + # Check relative import fails with package set to a non-string ns = dict(__package__=object()) self.assertRaises(ValueError, check_relative) + +class OverridingImportBuiltinTests(unittest.TestCase): + def test_override_builtin(self): + # Test that overriding builtins.__import__ can bypass sys.modules. + import os + + def foo(): + import os + return os + self.assertEqual(foo(), os) # Quick sanity check. + + with swap_attr(builtins, "__import__", lambda *x: 5): + self.assertEqual(foo(), 5) + + # Test what happens when we shadow __import__ in globals(); this + # currently does not impact the import process, but if this changes, + # other code will need to change, so keep this test as a tripwire. + with swap_item(globals(), "__import__", lambda *x: 5): + self.assertEqual(foo(), os) + + def test_main(verbose=None): - run_unittest(ImportTest, TestPycRewriting, PathsTests, RelativeImport) + run_unittest(ImportTests, PycRewritingTests, PathsTests, RelativeImportTests, + OverridingImportBuiltinTests) if __name__ == '__main__': - # test needs to be a package, so we can do relative import + # Test needs to be a package, so we can do relative imports. from test.test_import import test_main test_main() From python-checkins at python.org Wed Mar 17 23:36:26 2010 From: python-checkins at python.org (collin.winter) Date: Wed, 17 Mar 2010 23:36:26 +0100 (CET) Subject: [Python-checkins] r79038 - python/trunk/Lib/test/test_asynchat.py Message-ID: <20100317223626.E4098FAB7@mail.python.org> Author: collin.winter Date: Wed Mar 17 23:36:26 2010 New Revision: 79038 Log: Fix a race condition in test_asynchat uncovered by the Unladen Swallow JIT. Modified: python/trunk/Lib/test/test_asynchat.py Modified: python/trunk/Lib/test/test_asynchat.py ============================================================================== --- python/trunk/Lib/test/test_asynchat.py (original) +++ python/trunk/Lib/test/test_asynchat.py Wed Mar 17 23:36:26 2010 @@ -21,6 +21,9 @@ self.event = event self.sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) self.port = test_support.bind_port(self.sock) + # This will be set if the client wants us to wait before echoing data + # back. + self.start_resend_event = None def run(self): self.sock.listen(1) @@ -37,6 +40,9 @@ # remove the SERVER_QUIT message self.buffer = self.buffer.replace(SERVER_QUIT, '') + if self.start_resend_event: + self.start_resend_event.wait() + # re-send entire set of collected data try: # this may fail on some tests, such as test_close_when_done, since @@ -202,11 +208,18 @@ def test_close_when_done(self): s, event = start_echo_server() + s.start_resend_event = threading.Event() c = echo_client('\n', s.port) c.push("hello world\nI'm not dead yet!\n") c.push(SERVER_QUIT) c.close_when_done() asyncore.loop(use_poll=self.usepoll, count=300, timeout=.01) + + # Only allow the server to start echoing data back to the client after + # the client has closed its connection. This prevents a race condition + # where the server echoes all of its data before we can check that it + # got any down below. + s.start_resend_event.set() s.join() self.assertEqual(c.contents, []) From python-checkins at python.org Wed Mar 17 23:45:40 2010 From: python-checkins at python.org (antoine.pitrou) Date: Wed, 17 Mar 2010 23:45:40 +0100 (CET) Subject: [Python-checkins] r79039 - in python/trunk: Lib/test/test_socket.py Misc/NEWS Modules/socketmodule.c Message-ID: <20100317224540.1193DFB1D@mail.python.org> Author: antoine.pitrou Date: Wed Mar 17 23:45:39 2010 New Revision: 79039 Log: Issue #8104: socket.recv_into() and socket.recvfrom_into() now support writing into objects supporting the new buffer API, for example bytearrays or memoryviews. Modified: python/trunk/Lib/test/test_socket.py python/trunk/Misc/NEWS python/trunk/Modules/socketmodule.c Modified: python/trunk/Lib/test/test_socket.py ============================================================================== --- python/trunk/Lib/test/test_socket.py (original) +++ python/trunk/Lib/test/test_socket.py Wed Mar 17 23:45:39 2010 @@ -1226,28 +1226,64 @@ def __init__(self, methodName='runTest'): SocketConnectedTest.__init__(self, methodName=methodName) - def testRecvInto(self): + def testRecvIntoArray(self): buf = array.array('c', ' '*1024) nbytes = self.cli_conn.recv_into(buf) self.assertEqual(nbytes, len(MSG)) msg = buf.tostring()[:len(MSG)] self.assertEqual(msg, MSG) - def _testRecvInto(self): + def _testRecvIntoArray(self): buf = buffer(MSG) self.serv_conn.send(buf) - def testRecvFromInto(self): + def testRecvIntoBytearray(self): + buf = bytearray(1024) + nbytes = self.cli_conn.recv_into(buf) + self.assertEqual(nbytes, len(MSG)) + msg = buf[:len(MSG)] + self.assertEqual(msg, MSG) + + _testRecvIntoBytearray = _testRecvIntoArray + + def testRecvIntoMemoryview(self): + buf = bytearray(1024) + nbytes = self.cli_conn.recv_into(memoryview(buf)) + self.assertEqual(nbytes, len(MSG)) + msg = buf[:len(MSG)] + self.assertEqual(msg, MSG) + + _testRecvIntoMemoryview = _testRecvIntoArray + + def testRecvFromIntoArray(self): buf = array.array('c', ' '*1024) nbytes, addr = self.cli_conn.recvfrom_into(buf) self.assertEqual(nbytes, len(MSG)) msg = buf.tostring()[:len(MSG)] self.assertEqual(msg, MSG) - def _testRecvFromInto(self): + def _testRecvFromIntoArray(self): buf = buffer(MSG) self.serv_conn.send(buf) + def testRecvFromIntoBytearray(self): + buf = bytearray(1024) + nbytes, addr = self.cli_conn.recvfrom_into(buf) + self.assertEqual(nbytes, len(MSG)) + msg = buf[:len(MSG)] + self.assertEqual(msg, MSG) + + _testRecvFromIntoBytearray = _testRecvFromIntoArray + + def testRecvFromIntoMemoryview(self): + buf = bytearray(1024) + nbytes, addr = self.cli_conn.recvfrom_into(memoryview(buf)) + self.assertEqual(nbytes, len(MSG)) + msg = buf[:len(MSG)] + self.assertEqual(msg, MSG) + + _testRecvFromIntoMemoryview = _testRecvFromIntoArray + TIPC_STYPE = 2000 TIPC_LOWER = 200 Modified: python/trunk/Misc/NEWS ============================================================================== --- python/trunk/Misc/NEWS (original) +++ python/trunk/Misc/NEWS Wed Mar 17 23:45:39 2010 @@ -22,6 +22,10 @@ Library ------- +- Issue #8104: socket.recv_into() and socket.recvfrom_into() now support + writing into objects supporting the new buffer API, for example bytearrays + or memoryviews. + - Issue #4961: Inconsistent/wrong result of askyesno function in tkMessageBox with Tcl/Tk-8.5. Modified: python/trunk/Modules/socketmodule.c ============================================================================== --- python/trunk/Modules/socketmodule.c (original) +++ python/trunk/Modules/socketmodule.c Wed Mar 17 23:45:39 2010 @@ -2449,19 +2449,20 @@ int recvlen = 0, flags = 0; ssize_t readlen; - char *buf; - int buflen; + Py_buffer buf; + Py_ssize_t buflen; /* Get the buffer's memory */ - if (!PyArg_ParseTupleAndKeywords(args, kwds, "w#|ii:recv_into", kwlist, - &buf, &buflen, &recvlen, &flags)) + if (!PyArg_ParseTupleAndKeywords(args, kwds, "w*|ii:recv_into", kwlist, + &buf, &recvlen, &flags)) return NULL; - assert(buf != 0 && buflen > 0); + buflen = buf.len; + assert(buf.buf != 0 && buflen > 0); if (recvlen < 0) { PyErr_SetString(PyExc_ValueError, "negative buffersize in recv_into"); - return NULL; + goto error; } if (recvlen == 0) { /* If nbytes was not specified, use the buffer's length */ @@ -2472,19 +2473,24 @@ if (buflen < recvlen) { PyErr_SetString(PyExc_ValueError, "buffer too small for requested bytes"); - return NULL; + goto error; } /* Call the guts */ - readlen = sock_recv_guts(s, buf, recvlen, flags); + readlen = sock_recv_guts(s, buf.buf, recvlen, flags); if (readlen < 0) { /* Return an error. */ - return NULL; + goto error; } + PyBuffer_Release(&buf); /* Return the number of bytes read. Note that we do not do anything special here in the case that readlen < recvlen. */ return PyInt_FromSsize_t(readlen); + +error: + PyBuffer_Release(&buf); + return NULL; } PyDoc_STRVAR(recv_into_doc, @@ -2623,37 +2629,43 @@ int recvlen = 0, flags = 0; ssize_t readlen; - char *buf; + Py_buffer buf; int buflen; PyObject *addr = NULL; - if (!PyArg_ParseTupleAndKeywords(args, kwds, "w#|ii:recvfrom_into", - kwlist, &buf, &buflen, + if (!PyArg_ParseTupleAndKeywords(args, kwds, "w*|ii:recvfrom_into", + kwlist, &buf, &recvlen, &flags)) return NULL; - assert(buf != 0 && buflen > 0); + buflen = buf.len; + assert(buf.buf != 0 && buflen > 0); if (recvlen < 0) { PyErr_SetString(PyExc_ValueError, "negative buffersize in recvfrom_into"); - return NULL; + goto error; } if (recvlen == 0) { /* If nbytes was not specified, use the buffer's length */ recvlen = buflen; } - readlen = sock_recvfrom_guts(s, buf, recvlen, flags, &addr); + readlen = sock_recvfrom_guts(s, buf.buf, recvlen, flags, &addr); if (readlen < 0) { /* Return an error */ - Py_XDECREF(addr); - return NULL; + goto error; } + PyBuffer_Release(&buf); /* Return the number of bytes read and the address. Note that we do not do anything special here in the case that readlen < recvlen. */ return Py_BuildValue("lN", readlen, addr); + +error: + Py_XDECREF(addr); + PyBuffer_Release(&buf); + return NULL; } PyDoc_STRVAR(recvfrom_into_doc, From python-checkins at python.org Wed Mar 17 23:50:28 2010 From: python-checkins at python.org (antoine.pitrou) Date: Wed, 17 Mar 2010 23:50:28 +0100 (CET) Subject: [Python-checkins] r79040 - in python/branches/py3k: Lib/test/test_socket.py Message-ID: <20100317225028.5B7E1FB9F@mail.python.org> Author: antoine.pitrou Date: Wed Mar 17 23:50:28 2010 New Revision: 79040 Log: NOTE: just porting tests here. Merged revisions 79039 via svnmerge from svn+ssh://pythondev at svn.python.org/python/trunk ........ r79039 | antoine.pitrou | 2010-03-17 23:45:39 +0100 (mer., 17 mars 2010) | 5 lines Issue #8104: socket.recv_into() and socket.recvfrom_into() now support writing into objects supporting the new buffer API, for example bytearrays or memoryviews. ........ Modified: python/branches/py3k/ (props changed) python/branches/py3k/Lib/test/test_socket.py Modified: python/branches/py3k/Lib/test/test_socket.py ============================================================================== --- python/branches/py3k/Lib/test/test_socket.py (original) +++ python/branches/py3k/Lib/test/test_socket.py Wed Mar 17 23:50:28 2010 @@ -1312,28 +1312,64 @@ def __init__(self, methodName='runTest'): SocketConnectedTest.__init__(self, methodName=methodName) - def testRecvInto(self): + def testRecvIntoArray(self): buf = bytearray(1024) nbytes = self.cli_conn.recv_into(buf) self.assertEqual(nbytes, len(MSG)) msg = buf[:len(MSG)] self.assertEqual(msg, MSG) - def _testRecvInto(self): + def _testRecvIntoArray(self): buf = bytes(MSG) self.serv_conn.send(buf) - def testRecvFromInto(self): + def testRecvIntoBytearray(self): + buf = bytearray(1024) + nbytes = self.cli_conn.recv_into(buf) + self.assertEqual(nbytes, len(MSG)) + msg = buf[:len(MSG)] + self.assertEqual(msg, MSG) + + _testRecvIntoBytearray = _testRecvIntoArray + + def testRecvIntoMemoryview(self): + buf = bytearray(1024) + nbytes = self.cli_conn.recv_into(memoryview(buf)) + self.assertEqual(nbytes, len(MSG)) + msg = buf[:len(MSG)] + self.assertEqual(msg, MSG) + + _testRecvIntoMemoryview = _testRecvIntoArray + + def testRecvFromIntoArray(self): buf = bytearray(1024) nbytes, addr = self.cli_conn.recvfrom_into(buf) self.assertEqual(nbytes, len(MSG)) msg = buf[:len(MSG)] self.assertEqual(msg, MSG) - def _testRecvFromInto(self): + def _testRecvFromIntoArray(self): buf = bytes(MSG) self.serv_conn.send(buf) + def testRecvFromIntoBytearray(self): + buf = bytearray(1024) + nbytes, addr = self.cli_conn.recvfrom_into(buf) + self.assertEqual(nbytes, len(MSG)) + msg = buf[:len(MSG)] + self.assertEqual(msg, MSG) + + _testRecvFromIntoBytearray = _testRecvFromIntoArray + + def testRecvFromIntoMemoryview(self): + buf = bytearray(1024) + nbytes, addr = self.cli_conn.recvfrom_into(memoryview(buf)) + self.assertEqual(nbytes, len(MSG)) + msg = buf[:len(MSG)] + self.assertEqual(msg, MSG) + + _testRecvFromIntoMemoryview = _testRecvFromIntoArray + TIPC_STYPE = 2000 TIPC_LOWER = 200 From python-checkins at python.org Thu Mar 18 00:49:15 2010 From: python-checkins at python.org (collin.winter) Date: Thu, 18 Mar 2010 00:49:15 +0100 (CET) Subject: [Python-checkins] r79041 - in python/branches/py3k: Lib/test/test_asynchat.py Message-ID: <20100317234915.61CA3C648@mail.python.org> Author: collin.winter Date: Thu Mar 18 00:49:15 2010 New Revision: 79041 Log: Merged revisions 79038 via svnmerge from svn+ssh://pythondev at svn.python.org/python/trunk ........ r79038 | collin.winter | 2010-03-17 15:36:26 -0700 (Wed, 17 Mar 2010) | 2 lines Fix a race condition in test_asynchat uncovered by the Unladen Swallow JIT. ........ Modified: python/branches/py3k/ (props changed) python/branches/py3k/Lib/test/test_asynchat.py Modified: python/branches/py3k/Lib/test/test_asynchat.py ============================================================================== --- python/branches/py3k/Lib/test/test_asynchat.py (original) +++ python/branches/py3k/Lib/test/test_asynchat.py Thu Mar 18 00:49:15 2010 @@ -22,6 +22,9 @@ self.event = event self.sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) self.port = support.bind_port(self.sock) + # This will be set if the client wants us to wait before echoing data + # back. + self.start_resend_event = None def run(self): self.sock.listen(1) @@ -38,6 +41,9 @@ # remove the SERVER_QUIT message self.buffer = self.buffer.replace(SERVER_QUIT, b'') + if self.start_resend_event: + self.start_resend_event.wait() + # re-send entire set of collected data try: # this may fail on some tests, such as test_close_when_done, since @@ -203,11 +209,18 @@ def test_close_when_done(self): s, event = start_echo_server() + s.start_resend_event = threading.Event() c = echo_client(b'\n', s.port) c.push(b"hello world\nI'm not dead yet!\n") c.push(SERVER_QUIT) c.close_when_done() asyncore.loop(use_poll=self.usepoll, count=300, timeout=.01) + + # Only allow the server to start echoing data back to the client after + # the client has closed its connection. This prevents a race condition + # where the server echoes all of its data before we can check that it + # got any down below. + s.start_resend_event.set() s.join() self.assertEqual(c.contents, []) From python-checkins at python.org Thu Mar 18 00:49:42 2010 From: python-checkins at python.org (collin.winter) Date: Thu, 18 Mar 2010 00:49:42 +0100 (CET) Subject: [Python-checkins] r79042 - python/branches/py3k-jit/JIT_TODO.txt Message-ID: <20100317234942.2FEB1FA7D@mail.python.org> Author: collin.winter Date: Thu Mar 18 00:49:42 2010 New Revision: 79042 Log: Mark 'import r1017' as done. Modified: python/branches/py3k-jit/JIT_TODO.txt Modified: python/branches/py3k-jit/JIT_TODO.txt ============================================================================== --- python/branches/py3k-jit/JIT_TODO.txt (original) +++ python/branches/py3k-jit/JIT_TODO.txt Thu Mar 18 00:49:42 2010 @@ -9,7 +9,6 @@ TODO: - Import non-JIT related revisions into py3k, merge to py3k-jit: Relevant revisions: - - r1017 - r900 - r834 - r823 @@ -42,6 +41,7 @@ DONE: - Import non-JIT related revisions into py3k, merge to py3k-jit: Relevant revisions: + - r1017 (r79038, r79041) - r953 (r79027) - r888 (r79016, r79019; r79020) - r835 (r79013, r79014) From python-checkins at python.org Thu Mar 18 00:51:19 2010 From: python-checkins at python.org (collin.winter) Date: Thu, 18 Mar 2010 00:51:19 +0100 (CET) Subject: [Python-checkins] r79043 - python/branches/py3k-jit/JIT_TODO.txt Message-ID: <20100317235119.5AD06F86B@mail.python.org> Author: collin.winter Date: Thu Mar 18 00:51:19 2010 New Revision: 79043 Log: Remove r142 from the list of revisions to import. Modified: python/branches/py3k-jit/JIT_TODO.txt Modified: python/branches/py3k-jit/JIT_TODO.txt ============================================================================== --- python/branches/py3k-jit/JIT_TODO.txt (original) +++ python/branches/py3k-jit/JIT_TODO.txt Thu Mar 18 00:51:19 2010 @@ -18,7 +18,6 @@ - r636 - r301 - r246 - - r142 Some of these should go into trunk, then py3k, then py3k-jit. Some of these may have already been committed. This is just a rough worklist. - Import changes designed to improve startup time: From solipsis at pitrou.net Thu Mar 18 01:02:52 2010 From: solipsis at pitrou.net (Antoine Pitrou) Date: Thu, 18 Mar 2010 00:02:52 +0000 (UTC) Subject: [Python-checkins] =?utf-8?q?r78973_-_in_python/branches/py3k=3A?= =?utf-8?q?=09Modules/=5Fposixsubprocess=2Ec_Objects/abstract=2Ec?= References: <20100315060742.627F0EE9A9@mail.python.org> Message-ID: writes: > > Author: gregory.p.smith > Date: Mon Mar 15 07:07:42 2010 > New Revision: 78973 > > Log: > * Fix the refcount leak in _PySequence_BytesToCharpArray from r78946. > * Also fixes a potential extra DECREF of an arg in the error case within > _posixsubprocess.fork_exec() by not reusing the process_args variable. Do you plan to fix the remaining refleak in test_subprocess? Regards Antoine. From python-checkins at python.org Thu Mar 18 01:10:34 2010 From: python-checkins at python.org (collin.winter) Date: Thu, 18 Mar 2010 01:10:34 +0100 (CET) Subject: [Python-checkins] r79044 - python/trunk/Lib/test/test_pwd.py Message-ID: <20100318001034.EB317F7D8@mail.python.org> Author: collin.winter Date: Thu Mar 18 01:10:34 2010 New Revision: 79044 Log: Make test_pwd more stable in the face of unusual LDAP/NIS/Kerberos deployments (the old test was flaky on Google buildslaves). Modified: python/trunk/Lib/test/test_pwd.py Modified: python/trunk/Lib/test/test_pwd.py ============================================================================== --- python/trunk/Lib/test/test_pwd.py (original) +++ python/trunk/Lib/test/test_pwd.py Thu Mar 18 01:10:34 2010 @@ -1,3 +1,4 @@ +import sys import unittest from test import test_support @@ -83,11 +84,13 @@ self.assertRaises(KeyError, pwd.getpwnam, fakename) - # Choose a non-existent uid. - fakeuid = 4127 - while fakeuid in byuids: - fakeuid = (fakeuid * 3) % 0x10000 - + # In some cases, byuids isn't a complete list of all users in the + # system, so if we try to pick a value not in byuids (via a perturbing + # loop, say), pwd.getpwuid() might still be able to find data for that + # uid. Using sys.maxint may provoke the same problems, but hopefully + # it will be a more repeatable failure. + fakeuid = sys.maxint + self.assertNotIn(fakeuid, byuids) self.assertRaises(KeyError, pwd.getpwuid, fakeuid) def test_main(): From solipsis at pitrou.net Thu Mar 18 01:20:44 2010 From: solipsis at pitrou.net (solipsis at pitrou.net) Date: Thu, 18 Mar 2010 01:20:44 +0100 (CET) Subject: [Python-checkins] Daily py3k reference leaks (r79036): sum=6 Message-ID: <20100318002044.09A0B1770A@ns6635.ovh.net> py3k results for svn r79036 (hg cset 5044df356795) -------------------------------------------------- test_subprocess leaked [2, 2, 2] references, sum=6 Command line was: ['./python', '-m', 'test.regrtest', '-uall', '-R', '3:3:/home/antoine/py3k/refleaks/reflogZhr6aF', '-x', 'test_httpservers'] From python-checkins at python.org Thu Mar 18 01:23:44 2010 From: python-checkins at python.org (collin.winter) Date: Thu, 18 Mar 2010 01:23:44 +0100 (CET) Subject: [Python-checkins] r79045 - in python/branches/py3k: Lib/test/test_pwd.py Message-ID: <20100318002344.54C67F7D9@mail.python.org> Author: collin.winter Date: Thu Mar 18 01:23:44 2010 New Revision: 79045 Log: Merged revisions 79044 via svnmerge from svn+ssh://pythondev at svn.python.org/python/trunk ........ r79044 | collin.winter | 2010-03-17 17:10:34 -0700 (Wed, 17 Mar 2010) | 1 line Make test_pwd more stable in the face of unusual LDAP/NIS/Kerberos deployments (the old test was flaky on Google buildslaves). ........ Modified: python/branches/py3k/ (props changed) python/branches/py3k/Lib/test/test_pwd.py Modified: python/branches/py3k/Lib/test/test_pwd.py ============================================================================== --- python/branches/py3k/Lib/test/test_pwd.py (original) +++ python/branches/py3k/Lib/test/test_pwd.py Thu Mar 18 01:23:44 2010 @@ -1,3 +1,4 @@ +import sys import unittest from test import support @@ -83,11 +84,13 @@ self.assertRaises(KeyError, pwd.getpwnam, fakename) - # Choose a non-existent uid. - fakeuid = 4127 - while fakeuid in byuids: - fakeuid = (fakeuid * 3) % 0x10000 - + # In some cases, byuids isn't a complete list of all users in the + # system, so if we try to pick a value not in byuids (via a perturbing + # loop, say), pwd.getpwuid() might still be able to find data for that + # uid. Using sys.maxint may provoke the same problems, but hopefully + # it will be a more repeatable failure. + fakeuid = sys.maxsize + self.assertNotIn(fakeuid, byuids) self.assertRaises(KeyError, pwd.getpwuid, fakeuid) def test_main(): From python-checkins at python.org Thu Mar 18 01:24:11 2010 From: python-checkins at python.org (collin.winter) Date: Thu, 18 Mar 2010 01:24:11 +0100 (CET) Subject: [Python-checkins] r79046 - python/branches/py3k-jit/JIT_TODO.txt Message-ID: <20100318002411.69DDAF7D9@mail.python.org> Author: collin.winter Date: Thu Mar 18 01:24:11 2010 New Revision: 79046 Log: Mark 'import r246' as done. Modified: python/branches/py3k-jit/JIT_TODO.txt Modified: python/branches/py3k-jit/JIT_TODO.txt ============================================================================== --- python/branches/py3k-jit/JIT_TODO.txt (original) +++ python/branches/py3k-jit/JIT_TODO.txt Thu Mar 18 01:24:11 2010 @@ -17,7 +17,6 @@ - r642, r644, r645 - r636 - r301 - - r246 Some of these should go into trunk, then py3k, then py3k-jit. Some of these may have already been committed. This is just a rough worklist. - Import changes designed to improve startup time: @@ -47,3 +46,4 @@ - r815 (Lib/test/test_dynamic.py, Lib/test/support.py; r79009) - r563 (r72777, r72778) - r268 (r70672, r70673) + - r246 (r79044, r79045) From python-checkins at python.org Thu Mar 18 13:14:15 2010 From: python-checkins at python.org (senthil.kumaran) Date: Thu, 18 Mar 2010 13:14:15 +0100 (CET) Subject: [Python-checkins] r79047 - in python/trunk/Lib: test/test_urllib.py urllib.py urlparse.py Message-ID: <20100318121415.783C4FD2F@mail.python.org> Author: senthil.kumaran Date: Thu Mar 18 13:14:15 2010 New Revision: 79047 Log: Fix for Issue8135 - urllib.unquote to support mixed percent escapes Modified: python/trunk/Lib/test/test_urllib.py python/trunk/Lib/urllib.py python/trunk/Lib/urlparse.py Modified: python/trunk/Lib/test/test_urllib.py ============================================================================== --- python/trunk/Lib/test/test_urllib.py (original) +++ python/trunk/Lib/test/test_urllib.py Thu Mar 18 13:14:15 2010 @@ -439,6 +439,32 @@ "using unquote(): not all characters escaped: " "%s" % result) + def test_unquoting_badpercent(self): + # Test unquoting on bad percent-escapes + given = '%xab' + expect = given + result = urllib.unquote(given) + self.assertEqual(expect, result, "using unquote(): %r != %r" + % (expect, result)) + given = '%x' + expect = given + result = urllib.unquote(given) + self.assertEqual(expect, result, "using unquote(): %r != %r" + % (expect, result)) + given = '%' + expect = given + result = urllib.unquote(given) + self.assertEqual(expect, result, "using unquote(): %r != %r" + % (expect, result)) + + def test_unquoting_mixed_case(self): + # Test unquoting on mixed-case hex digits in the percent-escapes + given = '%Ab%eA' + expect = '\xab\xea' + result = urllib.unquote(given) + self.assertEqual(expect, result, "using unquote(): %r != %r" + % (expect, result)) + def test_unquoting_parts(self): # Make sure unquoting works when have non-quoted characters # interspersed Modified: python/trunk/Lib/urllib.py ============================================================================== --- python/trunk/Lib/urllib.py (original) +++ python/trunk/Lib/urllib.py Thu Mar 18 13:14:15 2010 @@ -1158,8 +1158,8 @@ if match: return match.group(1, 2) return attr, None -_hextochr = dict(('%02x' % i, chr(i)) for i in range(256)) -_hextochr.update(('%02X' % i, chr(i)) for i in range(256)) +_hexdig = '0123456789ABCDEFabcdef' +_hextochr = dict((a+b, chr(int(a+b,16))) for a in _hexdig for b in _hexdig) def unquote(s): """unquote('abc%20def') -> 'abc def'.""" Modified: python/trunk/Lib/urlparse.py ============================================================================== --- python/trunk/Lib/urlparse.py (original) +++ python/trunk/Lib/urlparse.py Thu Mar 18 13:14:15 2010 @@ -272,8 +272,9 @@ # Cannot use directly from urllib as it would create circular reference. # urllib uses urlparse methods ( urljoin) -_hextochr = dict(('%02x' % i, chr(i)) for i in range(256)) -_hextochr.update(('%02X' % i, chr(i)) for i in range(256)) + +_hexdig = '0123456789ABCDEFabcdef' +_hextochr = dict((a+b, chr(int(a+b,16))) for a in _hexdig for b in _hexdig) def unquote(s): """unquote('abc%20def') -> 'abc def'.""" From python-checkins at python.org Thu Mar 18 13:29:13 2010 From: python-checkins at python.org (ezio.melotti) Date: Thu, 18 Mar 2010 13:29:13 +0100 (CET) Subject: [Python-checkins] r79048 - in python/branches/py3k: Lib/test/test_file.py Lib/test/test_fileio.py Lib/test/test_minidom.py Message-ID: <20100318122913.71B4DFCF8@mail.python.org> Author: ezio.melotti Date: Thu Mar 18 13:29:13 2010 New Revision: 79048 Log: Merged revisions 79024 via svnmerge from svn+ssh://pythondev at svn.python.org/python/trunk ........ r79024 | ezio.melotti | 2010-03-17 16:22:34 +0200 (Wed, 17 Mar 2010) | 1 line Use "x in y" instead of y.find(x) != -1. ........ Modified: python/branches/py3k/ (props changed) python/branches/py3k/Lib/test/test_file.py python/branches/py3k/Lib/test/test_fileio.py python/branches/py3k/Lib/test/test_minidom.py Modified: python/branches/py3k/Lib/test/test_file.py ============================================================================== --- python/branches/py3k/Lib/test/test_file.py (original) +++ python/branches/py3k/Lib/test/test_file.py Thu Mar 18 13:29:13 2010 @@ -166,7 +166,7 @@ except ValueError as msg: if msg.args[0] != 0: s = str(msg) - if s.find(TESTFN) != -1 or s.find(bad_mode) == -1: + if TESTFN in s or bad_mode not in s: self.fail("bad error message for invalid mode: %s" % s) # if msg.args[0] == 0, we're probably on Windows where there may be # no obvious way to discover why open() failed. Modified: python/branches/py3k/Lib/test/test_fileio.py ============================================================================== --- python/branches/py3k/Lib/test/test_fileio.py (original) +++ python/branches/py3k/Lib/test/test_fileio.py Thu Mar 18 13:29:13 2010 @@ -318,7 +318,7 @@ except ValueError as msg: if msg.args[0] != 0: s = str(msg) - if s.find(TESTFN) != -1 or s.find(bad_mode) == -1: + if TESTFN in s or bad_mode not in s: self.fail("bad error message for invalid mode: %s" % s) # if msg.args[0] == 0, we're probably on Windows where there may be # no obvious way to discover why open() failed. Modified: python/branches/py3k/Lib/test/test_minidom.py ============================================================================== --- python/branches/py3k/Lib/test/test_minidom.py (original) +++ python/branches/py3k/Lib/test/test_minidom.py Thu Mar 18 13:29:13 2010 @@ -432,7 +432,7 @@ string1 = repr(el) string2 = str(el) self.confirm(string1 == string2) - self.confirm(string1.find("slash:abc") != -1) + self.confirm("slash:abc" in string1) dom.unlink() def testAttributeRepr(self): From python-checkins at python.org Thu Mar 18 20:51:47 2010 From: python-checkins at python.org (florent.xicluna) Date: Thu, 18 Mar 2010 20:51:47 +0100 (CET) Subject: [Python-checkins] r79049 - in python/trunk: Doc/library/test.rst Lib/test/test_support.py Lib/test/test_warnings.py Message-ID: <20100318195147.8FDDBE13F@mail.python.org> Author: florent.xicluna Date: Thu Mar 18 20:51:47 2010 New Revision: 79049 Log: #8155: Preserve backward compatibility for test_support.check_warnings(). Add regression tests. Modified: python/trunk/Doc/library/test.rst python/trunk/Lib/test/test_support.py python/trunk/Lib/test/test_warnings.py Modified: python/trunk/Doc/library/test.rst ============================================================================== --- python/trunk/Doc/library/test.rst (original) +++ python/trunk/Doc/library/test.rst Thu Mar 18 20:51:47 2010 @@ -90,17 +90,17 @@ guidelines to be followed: * The testing suite should exercise all classes, functions, and constants. This - includes not just the external API that is to be presented to the outside world - but also "private" code. + includes not just the external API that is to be presented to the outside + world but also "private" code. * Whitebox testing (examining the code being tested when the tests are being written) is preferred. Blackbox testing (testing only the published user - interface) is not complete enough to make sure all boundary and edge cases are - tested. + interface) is not complete enough to make sure all boundary and edge cases + are tested. * Make sure all possible values are tested including invalid ones. This makes - sure that not only all valid values are acceptable but also that improper values - are handled correctly. + sure that not only all valid values are acceptable but also that improper + values are handled correctly. * Exhaust as many code paths as possible. Test where branching occurs and thus tailor input to make sure as many different paths through the code are taken. @@ -120,8 +120,8 @@ behavior from side-effects of importing a module. * Try to maximize code reuse. On occasion, tests will vary by something as small - as what type of input is used. Minimize code duplication by subclassing a basic - test class with a class that specifies the input:: + as what type of input is used. Minimize code duplication by subclassing a + basic test class with a class that specifies the input:: class TestFuncAcceptsSequences(unittest.TestCase): @@ -155,10 +155,10 @@ suite. Running the script by itself automatically starts running all regression tests in the :mod:`test` package. It does this by finding all modules in the package whose name starts with ``test_``, importing them, and executing the -function :func:`test_main` if present. The names of tests to execute may also be -passed to the script. Specifying a single regression test (:program:`python -regrtest.py` :option:`test_spam.py`) will minimize output and only print whether -the test passed or failed and thus minimize output. +function :func:`test_main` if present. The names of tests to execute may also +be passed to the script. Specifying a single regression test (:program:`python +regrtest.py` :option:`test_spam.py`) will minimize output and only print +whether the test passed or failed and thus minimize output. Running :mod:`test.regrtest` directly allows what resources are available for tests to use to be set. You do this by using the :option:`-u` command-line @@ -173,10 +173,10 @@ regrtest.py` :option:`-h`. Some other ways to execute the regression tests depend on what platform the -tests are being executed on. On Unix, you can run :program:`make` :option:`test` -at the top-level directory where Python was built. On Windows, executing -:program:`rt.bat` from your :file:`PCBuild` directory will run all regression -tests. +tests are being executed on. On Unix, you can run :program:`make` +:option:`test` at the top-level directory where Python was built. On Windows, +executing :program:`rt.bat` from your :file:`PCBuild` directory will run all +regression tests. :mod:`test.test_support` --- Utility functions for tests @@ -209,8 +209,9 @@ .. exception:: ResourceDenied - Subclass of :exc:`unittest.SkipTest`. Raised when a resource (such as a network - connection) is not available. Raised by the :func:`requires` function. + Subclass of :exc:`unittest.SkipTest`. Raised when a resource (such as a + network connection) is not available. Raised by the :func:`requires` + function. The :mod:`test.test_support` module defines the following constants: @@ -256,22 +257,23 @@ .. function:: requires(resource[, msg]) Raise :exc:`ResourceDenied` if *resource* is not available. *msg* is the - argument to :exc:`ResourceDenied` if it is raised. Always returns True if called - by a function whose ``__name__`` is ``'__main__'``. Used when tests are executed - by :mod:`test.regrtest`. + argument to :exc:`ResourceDenied` if it is raised. Always returns + :const:`True` if called by a function whose ``__name__`` is ``'__main__'``. + Used when tests are executed by :mod:`test.regrtest`. .. function:: findfile(filename) - Return the path to the file named *filename*. If no match is found *filename* is - returned. This does not equal a failure since it could be the path to the file. + Return the path to the file named *filename*. If no match is found + *filename* is returned. This does not equal a failure since it could be the + path to the file. .. function:: run_unittest(*classes) Execute :class:`unittest.TestCase` subclasses passed to the function. The - function scans the classes for methods starting with the prefix ``test_`` and - executes the tests individually. + function scans the classes for methods starting with the prefix ``test_`` + and executes the tests individually. It is also legal to pass strings as parameters; these should be keys in ``sys.modules``. Each associated module will be scanned by @@ -284,7 +286,7 @@ This will run all tests defined in the named module. -.. function:: check_warnings(*filters, quiet=False) +.. function:: check_warnings(*filters, quiet=None) A convenience wrapper for ``warnings.catch_warnings()`` that makes it easier to test that a warning was correctly raised with a single @@ -292,30 +294,31 @@ ``warnings.catch_warnings(record=True)``. It accepts 2-tuples ``("message regexp", WarningCategory)`` as positional - arguments. When the optional keyword argument ``quiet`` is True, it does - not fail if a filter catches nothing. Without argument, it defaults to:: - - check_warnings(("", Warning), quiet=False) - - The main difference is that it verifies the warnings raised. If some filter - did not catch any warning, the test fails. If some warnings are not caught, - the test fails, too. To disable these checks, use argument ``quiet=True``. - - Another significant difference is that on entry to the context manager, a - :class:`WarningRecorder` instance is returned instead of a simple list. - The underlying warnings list is available via the recorder object's - :attr:`warnings` attribute, while the attributes of the last raised - warning are also accessible directly on the object. If no warning has - been raised, then the latter attributes will all be :const:`None`. + arguments. If there's some ``*filters`` defined, or if the optional keyword + argument ``quiet`` is :const:`False`, it checks if the warnings are + effective. If some filter did not catch any warning, the test fails. If some + warnings are not caught, the test fails, too. To disable these checks, set + argument ``quiet`` to :const:`True`. + + Without argument, it defaults to:: + + check_warnings(("", Warning), quiet=True) + + Additionally, on entry to the context manager, a :class:`WarningRecorder` + instance is returned. The underlying warnings list is available via the + recorder object's :attr:`warnings` attribute, while the attributes of the + last raised warning are also accessible directly on the object. If no + warning has been raised, then the latter attributes will all be + :const:`None`. A :meth:`reset` method is also provided on the recorder object. This - method simply clears the warning list. + method simply clears the warnings list. The context manager may be used like this:: import warnings - with check_warnings(): + with check_warnings(quiet=False): exec('assert(False, "Hey!")') warnings.warn(UserWarning("Hide me!")) @@ -337,7 +340,6 @@ .. versionadded:: 2.6 .. versionchanged:: 2.7 - The test fails when the context manager do not catch any warning. New optional attributes ``*filters`` and ``quiet``. @@ -348,8 +350,9 @@ If ``sys.py3kwarning == 0``, it checks that no warning is raised. It accepts 2-tuples ``("message regexp", WarningCategory)`` as positional - arguments. When the optional keyword argument ``quiet`` is True, it does - not fail if a filter catches nothing. Without argument, it defaults to:: + arguments. When the optional keyword argument ``quiet`` is :const:`True`, it + does not fail if a filter catches nothing. Without argument, it defaults + to:: check_py3k_warnings(("", DeprecationWarning), quiet=False) @@ -432,11 +435,11 @@ .. versionadded:: 2.6 .. class:: EnvironmentVarGuard() - Class used to temporarily set or unset environment variables. Instances can be - used as a context manager and have a complete dictionary interface for - querying/modifying the underlying ``os.environ``. After exit from the context - manager all changes to environment variables done through this instance will - be rolled back. + Class used to temporarily set or unset environment variables. Instances can + be used as a context manager and have a complete dictionary interface for + querying/modifying the underlying ``os.environ``. After exit from the + context manager all changes to environment variables done through this + instance will be rolled back. .. versionadded:: 2.6 .. versionchanged:: 2.7 @@ -445,7 +448,8 @@ .. method:: EnvironmentVarGuard.set(envvar, value) - Temporarily set the environment variable ``envvar`` to the value of ``value``. + Temporarily set the environment variable ``envvar`` to the value of + ``value``. .. method:: EnvironmentVarGuard.unset(envvar) @@ -459,4 +463,3 @@ :func:`check_warnings` above for more details. .. versionadded:: 2.6 - Modified: python/trunk/Lib/test/test_support.py ============================================================================== --- python/trunk/Lib/test/test_support.py (original) +++ python/trunk/Lib/test/test_support.py Thu Mar 18 20:51:47 2010 @@ -577,14 +577,19 @@ Optional argument: - if 'quiet' is True, it does not fail if a filter catches nothing - (default False) + (default True without argument, + default False if some filters are defined) Without argument, it defaults to: - check_warnings(("", Warning), quiet=False) + check_warnings(("", Warning), quiet=True) """ + quiet = kwargs.get('quiet') if not filters: filters = (("", Warning),) - return _filterwarnings(filters, kwargs.get('quiet')) + # Preserve backward compatibility + if quiet is None: + quiet = True + return _filterwarnings(filters, quiet) @contextlib.contextmanager Modified: python/trunk/Lib/test/test_warnings.py ============================================================================== --- python/trunk/Lib/test/test_warnings.py (original) +++ python/trunk/Lib/test/test_warnings.py Thu Mar 18 20:51:47 2010 @@ -633,19 +633,33 @@ def test_check_warnings(self): # Explicit tests for the test_support convenience wrapper wmod = self.module - if wmod is sys.modules['warnings']: - with test_support.check_warnings() as w: - self.assertEqual(w.warnings, []) - wmod.simplefilter("always") + if wmod is not sys.modules['warnings']: + return + with test_support.check_warnings(quiet=False) as w: + self.assertEqual(w.warnings, []) + wmod.simplefilter("always") + wmod.warn("foo") + self.assertEqual(str(w.message), "foo") + wmod.warn("bar") + self.assertEqual(str(w.message), "bar") + self.assertEqual(str(w.warnings[0].message), "foo") + self.assertEqual(str(w.warnings[1].message), "bar") + w.reset() + self.assertEqual(w.warnings, []) + + with test_support.check_warnings(): + # defaults to quiet=True without argument + pass + with test_support.check_warnings(('foo', UserWarning)): + wmod.warn("foo") + + with self.assertRaises(AssertionError): + with test_support.check_warnings(('', RuntimeWarning)): + # defaults to quiet=False with argument + pass + with self.assertRaises(AssertionError): + with test_support.check_warnings(('foo', RuntimeWarning)): wmod.warn("foo") - self.assertEqual(str(w.message), "foo") - wmod.warn("bar") - self.assertEqual(str(w.message), "bar") - self.assertEqual(str(w.warnings[0].message), "foo") - self.assertEqual(str(w.warnings[1].message), "bar") - w.reset() - self.assertEqual(w.warnings, []) - class CCatchWarningTests(CatchWarningTests): From python-checkins at python.org Thu Mar 18 21:00:57 2010 From: python-checkins at python.org (florent.xicluna) Date: Thu, 18 Mar 2010 21:00:57 +0100 (CET) Subject: [Python-checkins] r79050 - in python/branches/py3k: Doc/library/test.rst Lib/test/support.py Lib/test/test_warnings.py Message-ID: <20100318200057.BEAE2F111@mail.python.org> Author: florent.xicluna Date: Thu Mar 18 21:00:57 2010 New Revision: 79050 Log: Merged revisions 79049 via svnmerge from svn+ssh://pythondev at svn.python.org/python/trunk ........ r79049 | florent.xicluna | 2010-03-18 20:51:47 +0100 (jeu, 18 mar 2010) | 2 lines #8155: Preserve backward compatibility for test_support.check_warnings(). Add regression tests. ........ Modified: python/branches/py3k/ (props changed) python/branches/py3k/Doc/library/test.rst python/branches/py3k/Lib/test/support.py python/branches/py3k/Lib/test/test_warnings.py Modified: python/branches/py3k/Doc/library/test.rst ============================================================================== --- python/branches/py3k/Doc/library/test.rst (original) +++ python/branches/py3k/Doc/library/test.rst Thu Mar 18 21:00:57 2010 @@ -89,17 +89,17 @@ guidelines to be followed: * The testing suite should exercise all classes, functions, and constants. This - includes not just the external API that is to be presented to the outside world - but also "private" code. + includes not just the external API that is to be presented to the outside + world but also "private" code. * Whitebox testing (examining the code being tested when the tests are being written) is preferred. Blackbox testing (testing only the published user - interface) is not complete enough to make sure all boundary and edge cases are - tested. + interface) is not complete enough to make sure all boundary and edge cases + are tested. * Make sure all possible values are tested including invalid ones. This makes - sure that not only all valid values are acceptable but also that improper values - are handled correctly. + sure that not only all valid values are acceptable but also that improper + values are handled correctly. * Exhaust as many code paths as possible. Test where branching occurs and thus tailor input to make sure as many different paths through the code are taken. @@ -119,8 +119,8 @@ behavior from side-effects of importing a module. * Try to maximize code reuse. On occasion, tests will vary by something as small - as what type of input is used. Minimize code duplication by subclassing a basic - test class with a class that specifies the input:: + as what type of input is used. Minimize code duplication by subclassing a + basic test class with a class that specifies the input:: class TestFuncAcceptsSequences(unittest.TestCase): @@ -154,10 +154,10 @@ suite. Running the script by itself automatically starts running all regression tests in the :mod:`test` package. It does this by finding all modules in the package whose name starts with ``test_``, importing them, and executing the -function :func:`test_main` if present. The names of tests to execute may also be -passed to the script. Specifying a single regression test (:program:`python -regrtest.py` :option:`test_spam.py`) will minimize output and only print whether -the test passed or failed and thus minimize output. +function :func:`test_main` if present. The names of tests to execute may also +be passed to the script. Specifying a single regression test (:program:`python +regrtest.py` :option:`test_spam.py`) will minimize output and only print +whether the test passed or failed and thus minimize output. Running :mod:`test.regrtest` directly allows what resources are available for tests to use to be set. You do this by using the :option:`-u` command-line @@ -172,10 +172,10 @@ regrtest.py` :option:`-h`. Some other ways to execute the regression tests depend on what platform the -tests are being executed on. On Unix, you can run :program:`make` :option:`test` -at the top-level directory where Python was built. On Windows, executing -:program:`rt.bat` from your :file:`PCBuild` directory will run all regression -tests. +tests are being executed on. On Unix, you can run :program:`make` +:option:`test` at the top-level directory where Python was built. On Windows, +executing :program:`rt.bat` from your :file:`PCBuild` directory will run all +regression tests. :mod:`test.support` --- Utility functions for tests @@ -200,8 +200,9 @@ .. exception:: ResourceDenied - Subclass of :exc:`unittest.SkipTest`. Raised when a resource (such as a network - connection) is not available. Raised by the :func:`requires` function. + Subclass of :exc:`unittest.SkipTest`. Raised when a resource (such as a + network connection) is not available. Raised by the :func:`requires` + function. The :mod:`test.support` module defines the following constants: @@ -242,22 +243,23 @@ .. function:: requires(resource, msg=None) Raise :exc:`ResourceDenied` if *resource* is not available. *msg* is the - argument to :exc:`ResourceDenied` if it is raised. Always returns True if called - by a function whose ``__name__`` is ``'__main__'``. Used when tests are executed - by :mod:`test.regrtest`. + argument to :exc:`ResourceDenied` if it is raised. Always returns + :const:`True` if called by a function whose ``__name__`` is ``'__main__'``. + Used when tests are executed by :mod:`test.regrtest`. .. function:: findfile(filename) - Return the path to the file named *filename*. If no match is found *filename* is - returned. This does not equal a failure since it could be the path to the file. + Return the path to the file named *filename*. If no match is found + *filename* is returned. This does not equal a failure since it could be the + path to the file. .. function:: run_unittest(*classes) Execute :class:`unittest.TestCase` subclasses passed to the function. The - function scans the classes for methods starting with the prefix ``test_`` and - executes the tests individually. + function scans the classes for methods starting with the prefix ``test_`` + and executes the tests individually. It is also legal to pass strings as parameters; these should be keys in ``sys.modules``. Each associated module will be scanned by @@ -270,7 +272,7 @@ This will run all tests defined in the named module. -.. function:: check_warnings(*filters, quiet=False) +.. function:: check_warnings(*filters, quiet=None) A convenience wrapper for ``warnings.catch_warnings()`` that makes it easier to test that a warning was correctly raised with a single @@ -278,30 +280,31 @@ ``warnings.catch_warnings(record=True)``. It accepts 2-tuples ``("message regexp", WarningCategory)`` as positional - arguments. When the optional keyword argument ``quiet`` is True, it does - not fail if a filter catches nothing. Without argument, it defaults to:: - - check_warnings(("", Warning), quiet=False) - - The main difference is that it verifies the warnings raised. If some filter - did not catch any warning, the test fails. If some warnings are not caught, - the test fails, too. To disable these checks, use argument ``quiet=True``. - - Another significant difference is that on entry to the context manager, a - :class:`WarningRecorder` instance is returned instead of a simple list. - The underlying warnings list is available via the recorder object's - :attr:`warnings` attribute, while the attributes of the last raised - warning are also accessible directly on the object. If no warning has - been raised, then the latter attributes will all be :const:`None`. + arguments. If there's some ``*filters`` defined, or if the optional keyword + argument ``quiet`` is :const:`False`, it checks if the warnings are + effective. If some filter did not catch any warning, the test fails. If some + warnings are not caught, the test fails, too. To disable these checks, set + argument ``quiet`` to :const:`True`. + + Without argument, it defaults to:: + + check_warnings(("", Warning), quiet=True) + + Additionally, on entry to the context manager, a :class:`WarningRecorder` + instance is returned. The underlying warnings list is available via the + recorder object's :attr:`warnings` attribute, while the attributes of the + last raised warning are also accessible directly on the object. If no + warning has been raised, then the latter attributes will all be + :const:`None`. A :meth:`reset` method is also provided on the recorder object. This - method simply clears the warning list. + method simply clears the warnings list. The context manager may be used like this:: import warnings - with check_warnings(): + with check_warnings(quiet=False): exec('assert(False, "Hey!")') warnings.warn(UserWarning("Hide me!")) @@ -322,7 +325,6 @@ assert len(w.warnings) == 0 .. versionchanged:: 2.7 - The test fails when the context manager do not catch any warning. New optional attributes ``*filters`` and ``quiet``. @@ -400,18 +402,19 @@ .. class:: EnvironmentVarGuard() - Class used to temporarily set or unset environment variables. Instances can be - used as a context manager and have a complete dictionary interface for - querying/modifying the underlying ``os.environ``. After exit from the context - manager all changes to environment variables done through this instance will - be rolled back. + Class used to temporarily set or unset environment variables. Instances can + be used as a context manager and have a complete dictionary interface for + querying/modifying the underlying ``os.environ``. After exit from the + context manager all changes to environment variables done through this + instance will be rolled back. .. versionchanged:: 3.1 Added dictionary interface. .. method:: EnvironmentVarGuard.set(envvar, value) - Temporarily set the environment variable ``envvar`` to the value of ``value``. + Temporarily set the environment variable ``envvar`` to the value of + ``value``. .. method:: EnvironmentVarGuard.unset(envvar) @@ -423,4 +426,3 @@ Class used to record warnings for unit tests. See documentation of :func:`check_warnings` above for more details. - Modified: python/branches/py3k/Lib/test/support.py ============================================================================== --- python/branches/py3k/Lib/test/support.py (original) +++ python/branches/py3k/Lib/test/support.py Thu Mar 18 21:00:57 2010 @@ -534,14 +534,19 @@ Optional argument: - if 'quiet' is True, it does not fail if a filter catches nothing - (default False) + (default True without argument, + default False if some filters are defined) Without argument, it defaults to: - check_warnings(("", Warning), quiet=False) + check_warnings(("", Warning), quiet=True) """ + quiet = kwargs.get('quiet') if not filters: filters = (("", Warning),) - return _filterwarnings(filters, kwargs.get('quiet')) + # Preserve backward compatibility + if quiet is None: + quiet = True + return _filterwarnings(filters, quiet) class CleanImport(object): Modified: python/branches/py3k/Lib/test/test_warnings.py ============================================================================== --- python/branches/py3k/Lib/test/test_warnings.py (original) +++ python/branches/py3k/Lib/test/test_warnings.py Thu Mar 18 21:00:57 2010 @@ -644,18 +644,33 @@ def test_check_warnings(self): # Explicit tests for the test.support convenience wrapper wmod = self.module - if wmod is sys.modules['warnings']: - with support.check_warnings() as w: - self.assertEqual(w.warnings, []) - wmod.simplefilter("always") + if wmod is not sys.modules['warnings']: + return + with support.check_warnings(quiet=False) as w: + self.assertEqual(w.warnings, []) + wmod.simplefilter("always") + wmod.warn("foo") + self.assertEqual(str(w.message), "foo") + wmod.warn("bar") + self.assertEqual(str(w.message), "bar") + self.assertEqual(str(w.warnings[0].message), "foo") + self.assertEqual(str(w.warnings[1].message), "bar") + w.reset() + self.assertEqual(w.warnings, []) + + with support.check_warnings(): + # defaults to quiet=True without argument + pass + with support.check_warnings(('foo', UserWarning)): + wmod.warn("foo") + + with self.assertRaises(AssertionError): + with support.check_warnings(('', RuntimeWarning)): + # defaults to quiet=False with argument + pass + with self.assertRaises(AssertionError): + with support.check_warnings(('foo', RuntimeWarning)): wmod.warn("foo") - self.assertEqual(str(w.message), "foo") - wmod.warn("bar") - self.assertEqual(str(w.message), "bar") - self.assertEqual(str(w.warnings[0].message), "foo") - self.assertEqual(str(w.warnings[1].message), "bar") - w.reset() - self.assertEqual(w.warnings, []) class CCatchWarningTests(CatchWarningTests): module = c_warnings From python-checkins at python.org Thu Mar 18 22:20:35 2010 From: python-checkins at python.org (benjamin.peterson) Date: Thu, 18 Mar 2010 22:20:35 +0100 (CET) Subject: [Python-checkins] r79051 - python/trunk/Makefile.pre.in Message-ID: <20100318212035.CC74CDD87@mail.python.org> Author: benjamin.peterson Date: Thu Mar 18 22:20:35 2010 New Revision: 79051 Log: don't try to compile anything in lib2to3/tests/data #8169 Modified: python/trunk/Makefile.pre.in Modified: python/trunk/Makefile.pre.in ============================================================================== --- python/trunk/Makefile.pre.in (original) +++ python/trunk/Makefile.pre.in Thu Mar 18 22:20:35 2010 @@ -906,12 +906,12 @@ PYTHONPATH=$(DESTDIR)$(LIBDEST) $(RUNSHARED) \ ./$(BUILDPYTHON) -Wi -tt $(DESTDIR)$(LIBDEST)/compileall.py \ -d $(LIBDEST) -f \ - -x 'bad_coding|badsyntax|site-packages|py3_test_grammar' \ + -x 'badsyntax|site-packages|lib2to3/tests/data' \ $(DESTDIR)$(LIBDEST) PYTHONPATH=$(DESTDIR)$(LIBDEST) $(RUNSHARED) \ ./$(BUILDPYTHON) -Wi -tt -O $(DESTDIR)$(LIBDEST)/compileall.py \ -d $(LIBDEST) -f \ - -x 'bad_coding|badsyntax|site-packages|py3_test_grammar' \ + -x 'badsyntax|site-packages|lib2to3/tests/data' \ $(DESTDIR)$(LIBDEST) -PYTHONPATH=$(DESTDIR)$(LIBDEST) $(RUNSHARED) \ ./$(BUILDPYTHON) -Wi -t $(DESTDIR)$(LIBDEST)/compileall.py \ From python-checkins at python.org Thu Mar 18 22:23:05 2010 From: python-checkins at python.org (benjamin.peterson) Date: Thu, 18 Mar 2010 22:23:05 +0100 (CET) Subject: [Python-checkins] r79052 - in python/branches/py3k: Makefile.pre.in Message-ID: <20100318212305.779F3DA8E@mail.python.org> Author: benjamin.peterson Date: Thu Mar 18 22:23:05 2010 New Revision: 79052 Log: Merged revisions 79051 via svnmerge from svn+ssh://pythondev at svn.python.org/python/trunk ........ r79051 | benjamin.peterson | 2010-03-18 16:20:35 -0500 (Thu, 18 Mar 2010) | 1 line don't try to compile anything in lib2to3/tests/data #8169 ........ Modified: python/branches/py3k/ (props changed) python/branches/py3k/Makefile.pre.in Modified: python/branches/py3k/Makefile.pre.in ============================================================================== --- python/branches/py3k/Makefile.pre.in (original) +++ python/branches/py3k/Makefile.pre.in Thu Mar 18 22:23:05 2010 @@ -912,12 +912,12 @@ -PYTHONPATH=$(DESTDIR)$(LIBDEST) $(RUNSHARED) \ ./$(BUILDPYTHON) -Wi $(DESTDIR)$(LIBDEST)/compileall.py \ -d $(LIBDEST) -f \ - -x 'bad_coding|badsyntax|site-packages|py2_test_grammar|crlf|different_encoding' \ + -x 'badsyntax|site-packages|lib2to3/tests/data' \ $(DESTDIR)$(LIBDEST) -PYTHONPATH=$(DESTDIR)$(LIBDEST) $(RUNSHARED) \ ./$(BUILDPYTHON) -Wi -O $(DESTDIR)$(LIBDEST)/compileall.py \ -d $(LIBDEST) -f \ - -x 'bad_coding|badsyntax|site-packages|py2_test_grammar|crlf|different_encoding' \ + -x 'badsyntax|site-packages|lib2to3/tests/data' \ $(DESTDIR)$(LIBDEST) -PYTHONPATH=$(DESTDIR)$(LIBDEST) $(RUNSHARED) \ ./$(BUILDPYTHON) -Wi $(DESTDIR)$(LIBDEST)/compileall.py \ From python-checkins at python.org Thu Mar 18 22:25:12 2010 From: python-checkins at python.org (benjamin.peterson) Date: Thu, 18 Mar 2010 22:25:12 +0100 (CET) Subject: [Python-checkins] r79053 - in python/branches/release31-maint: Makefile.pre.in Message-ID: <20100318212512.4158ADEBA@mail.python.org> Author: benjamin.peterson Date: Thu Mar 18 22:25:12 2010 New Revision: 79053 Log: Merged revisions 79052 via svnmerge from svn+ssh://pythondev at svn.python.org/python/branches/py3k ................ r79052 | benjamin.peterson | 2010-03-18 16:23:05 -0500 (Thu, 18 Mar 2010) | 9 lines Merged revisions 79051 via svnmerge from svn+ssh://pythondev at svn.python.org/python/trunk ........ r79051 | benjamin.peterson | 2010-03-18 16:20:35 -0500 (Thu, 18 Mar 2010) | 1 line don't try to compile anything in lib2to3/tests/data #8169 ........ ................ Modified: python/branches/release31-maint/ (props changed) python/branches/release31-maint/Makefile.pre.in Modified: python/branches/release31-maint/Makefile.pre.in ============================================================================== --- python/branches/release31-maint/Makefile.pre.in (original) +++ python/branches/release31-maint/Makefile.pre.in Thu Mar 18 22:25:12 2010 @@ -910,12 +910,12 @@ -PYTHONPATH=$(DESTDIR)$(LIBDEST) $(RUNSHARED) \ ./$(BUILDPYTHON) -Wi $(DESTDIR)$(LIBDEST)/compileall.py \ -d $(LIBDEST) -f \ - -x 'bad_coding|badsyntax|site-packages|py2_test_grammar|crlf|different_encoding' \ + -x 'badsyntax|site-packages|lib2to3/tests/data' \ $(DESTDIR)$(LIBDEST) -PYTHONPATH=$(DESTDIR)$(LIBDEST) $(RUNSHARED) \ ./$(BUILDPYTHON) -Wi -O $(DESTDIR)$(LIBDEST)/compileall.py \ -d $(LIBDEST) -f \ - -x 'bad_coding|badsyntax|site-packages|py2_test_grammar|crlf|different_encoding' \ + -x 'badsyntax|site-packages|lib2to3/tests/data' \ $(DESTDIR)$(LIBDEST) -PYTHONPATH=$(DESTDIR)$(LIBDEST) $(RUNSHARED) \ ./$(BUILDPYTHON) -Wi $(DESTDIR)$(LIBDEST)/compileall.py \ From python-checkins at python.org Thu Mar 18 22:27:29 2010 From: python-checkins at python.org (benjamin.peterson) Date: Thu, 18 Mar 2010 22:27:29 +0100 (CET) Subject: [Python-checkins] r79054 - python/branches/release31-maint/Modules/_hashopenssl.c Message-ID: <20100318212729.A5D96DEBA@mail.python.org> Author: benjamin.peterson Date: Thu Mar 18 22:27:29 2010 New Revision: 79054 Log: revert part of r77938 which broke hashlib constructors #8167 Modified: python/branches/release31-maint/Modules/_hashopenssl.c Modified: python/branches/release31-maint/Modules/_hashopenssl.c ============================================================================== --- python/branches/release31-maint/Modules/_hashopenssl.c (original) +++ python/branches/release31-maint/Modules/_hashopenssl.c Thu Mar 18 22:27:29 2010 @@ -49,10 +49,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 @@ -74,12 +70,10 @@ 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 * @@ -543,12 +537,10 @@ 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 */ @@ -556,13 +548,11 @@ {"new", (PyCFunction)EVP_new, METH_VARARGS|METH_KEYWORDS, EVP_new__doc__}, 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 */ + {NULL, NULL} /* Sentinel */ }; @@ -609,11 +599,9 @@ /* 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; } From python-checkins at python.org Thu Mar 18 22:30:48 2010 From: python-checkins at python.org (benjamin.peterson) Date: Thu, 18 Mar 2010 22:30:48 +0100 (CET) Subject: [Python-checkins] r79055 - python/trunk/Makefile.pre.in Message-ID: <20100318213048.98AE3DF85@mail.python.org> Author: benjamin.peterson Date: Thu Mar 18 22:30:48 2010 New Revision: 79055 Log: remove installation of deleted test/output dir Modified: python/trunk/Makefile.pre.in Modified: python/trunk/Makefile.pre.in ============================================================================== --- python/trunk/Makefile.pre.in (original) +++ python/trunk/Makefile.pre.in Thu Mar 18 22:30:48 2010 @@ -832,7 +832,7 @@ plat-mac/lib-scriptpackages/SystemEvents \ plat-mac/lib-scriptpackages/Terminal PLATMACPATH=:plat-mac:plat-mac/lib-scriptpackages -LIBSUBDIRS= lib-tk site-packages test test/output test/data \ +LIBSUBDIRS= lib-tk site-packages test test/data \ test/decimaltestdata test/xmltestdata \ encodings compiler hotshot \ email email/mime email/test email/test/data \ From python-checkins at python.org Thu Mar 18 22:32:38 2010 From: python-checkins at python.org (benjamin.peterson) Date: Thu, 18 Mar 2010 22:32:38 +0100 (CET) Subject: [Python-checkins] r79056 - python/trunk/Makefile.pre.in Message-ID: <20100318213238.CA8C4DF85@mail.python.org> Author: benjamin.peterson Date: Thu Mar 18 22:32:38 2010 New Revision: 79056 Log: install tkinter and ttk tests Modified: python/trunk/Makefile.pre.in Modified: python/trunk/Makefile.pre.in ============================================================================== --- python/trunk/Makefile.pre.in (original) +++ python/trunk/Makefile.pre.in Thu Mar 18 22:32:38 2010 @@ -832,7 +832,8 @@ plat-mac/lib-scriptpackages/SystemEvents \ plat-mac/lib-scriptpackages/Terminal PLATMACPATH=:plat-mac:plat-mac/lib-scriptpackages -LIBSUBDIRS= lib-tk site-packages test test/data \ +LIBSUBDIRS= lib-tk lib-tk/test lib-tk/test/test_tkinter \ + lib-tk/test/test_ttk site-packages test test/data \ test/decimaltestdata test/xmltestdata \ encodings compiler hotshot \ email email/mime email/test email/test/data \ From python-checkins at python.org Thu Mar 18 22:36:06 2010 From: python-checkins at python.org (benjamin.peterson) Date: Thu, 18 Mar 2010 22:36:06 +0100 (CET) Subject: [Python-checkins] r79057 - in python/branches/py3k: Makefile.pre.in Message-ID: <20100318213606.EBFE0E0A6@mail.python.org> Author: benjamin.peterson Date: Thu Mar 18 22:36:06 2010 New Revision: 79057 Log: Merged revisions 79056 via svnmerge from svn+ssh://pythondev at svn.python.org/python/trunk ........ r79056 | benjamin.peterson | 2010-03-18 16:32:38 -0500 (Thu, 18 Mar 2010) | 1 line install tkinter and ttk tests ........ Modified: python/branches/py3k/ (props changed) python/branches/py3k/Makefile.pre.in Modified: python/branches/py3k/Makefile.pre.in ============================================================================== --- python/branches/py3k/Makefile.pre.in (original) +++ python/branches/py3k/Makefile.pre.in Thu Mar 18 22:36:06 2010 @@ -835,7 +835,8 @@ EXTRAPLATDIR= @EXTRAPLATDIR@ MACHDEPS= $(PLATDIR) $(EXTRAPLATDIR) XMLLIBSUBDIRS= xml xml/dom xml/etree xml/parsers xml/sax -LIBSUBDIRS= tkinter site-packages test test/output test/data \ +LIBSUBDIRS= tkinter tkinter/test tkinter/test/test_tkinter \ + tkinter/test/test_ttk site-packages test test/data \ test/decimaltestdata test/xmltestdata \ encodings \ email email/mime email/test email/test/data \ From python-checkins at python.org Thu Mar 18 22:38:55 2010 From: python-checkins at python.org (benjamin.peterson) Date: Thu, 18 Mar 2010 22:38:55 +0100 (CET) Subject: [Python-checkins] r79058 - in python/branches/release31-maint: Makefile.pre.in Message-ID: <20100318213855.D3D2AE4F5@mail.python.org> Author: benjamin.peterson Date: Thu Mar 18 22:38:55 2010 New Revision: 79058 Log: Merged revisions 79057 via svnmerge from svn+ssh://pythondev at svn.python.org/python/branches/py3k ................ r79057 | benjamin.peterson | 2010-03-18 16:36:06 -0500 (Thu, 18 Mar 2010) | 9 lines Merged revisions 79056 via svnmerge from svn+ssh://pythondev at svn.python.org/python/trunk ........ r79056 | benjamin.peterson | 2010-03-18 16:32:38 -0500 (Thu, 18 Mar 2010) | 1 line install tkinter and ttk tests ........ ................ Modified: python/branches/release31-maint/ (props changed) python/branches/release31-maint/Makefile.pre.in Modified: python/branches/release31-maint/Makefile.pre.in ============================================================================== --- python/branches/release31-maint/Makefile.pre.in (original) +++ python/branches/release31-maint/Makefile.pre.in Thu Mar 18 22:38:55 2010 @@ -834,7 +834,8 @@ EXTRAPLATDIR= @EXTRAPLATDIR@ MACHDEPS= $(PLATDIR) $(EXTRAPLATDIR) XMLLIBSUBDIRS= xml xml/dom xml/etree xml/parsers xml/sax -LIBSUBDIRS= tkinter site-packages test test/output test/data \ +LIBSUBDIRS= tkinter tkinter/test tkinter/test/test_tkinter \ + tkinter/test/test_ttk site-packages test test/data \ test/decimaltestdata \ encodings \ email email/mime email/test email/test/data \ From python-checkins at python.org Thu Mar 18 22:50:09 2010 From: python-checkins at python.org (florent.xicluna) Date: Thu, 18 Mar 2010 22:50:09 +0100 (CET) Subject: [Python-checkins] r79059 - in python/trunk: Lib/test/test_unicodedata.py Misc/NEWS Modules/unicodedata_db.h Modules/unicodename_db.h Objects/unicodetype_db.h Tools/unicode/makeunicodedata.py Message-ID: <20100318215009.45E56F806@mail.python.org> Author: florent.xicluna Date: Thu Mar 18 22:50:06 2010 New Revision: 79059 Log: Issue #8024: Update the Unicode database to 5.2 Modified: python/trunk/Lib/test/test_unicodedata.py python/trunk/Misc/NEWS python/trunk/Modules/unicodedata_db.h python/trunk/Modules/unicodename_db.h python/trunk/Objects/unicodetype_db.h python/trunk/Tools/unicode/makeunicodedata.py Modified: python/trunk/Lib/test/test_unicodedata.py ============================================================================== --- python/trunk/Lib/test/test_unicodedata.py (original) +++ python/trunk/Lib/test/test_unicodedata.py Thu Mar 18 22:50:06 2010 @@ -20,7 +20,7 @@ class UnicodeMethodsTest(unittest.TestCase): # update this, if the database changes - expectedchecksum = '0b915116051f3ed029a98542c2b7df63c9646272' + expectedchecksum = '4504dffd035baea02c5b9de82bebc3d65e0e0baf' def test_method_checksum(self): h = hashlib.sha1() @@ -79,7 +79,7 @@ class UnicodeFunctionsTest(UnicodeDatabaseTest): # update this, if the database changes - expectedchecksum = 'd4169ccff998ebbd1ec007a0b3fbd66e5ccf0229' + expectedchecksum = '6ccf1b1a36460d2694f9b0b0f0324942fe70ede6' def test_function_checksum(self): data = [] Modified: python/trunk/Misc/NEWS ============================================================================== --- python/trunk/Misc/NEWS (original) +++ python/trunk/Misc/NEWS Thu Mar 18 22:50:06 2010 @@ -22,6 +22,8 @@ Library ------- +- Issue #8024: Update the Unicode database to 5.2. + - Issue #8104: socket.recv_into() and socket.recvfrom_into() now support writing into objects supporting the new buffer API, for example bytearrays or memoryviews. Modified: python/trunk/Modules/unicodedata_db.h ============================================================================== --- python/trunk/Modules/unicodedata_db.h (original) +++ python/trunk/Modules/unicodedata_db.h Thu Mar 18 22:50:06 2010 @@ -1,6 +1,6 @@ /* this file was generated by Tools/unicode/makeunicodedata.py 2.6 */ -#define UNIDATA_VERSION "5.1.0" +#define UNIDATA_VERSION "5.2.0" /* a list of unique database records */ const _PyUnicode_DatabaseRecord _PyUnicode_Database_Records[] = { {0, 0, 0, 0, 0, 0}, @@ -178,6 +178,7 @@ {8, 0, 1, 0, 5, 0}, {14, 0, 1, 0, 5, 0}, {5, 9, 1, 0, 5, 0}, + {4, 1, 14, 0, 5, 0}, {4, 234, 14, 0, 5, 0}, {4, 214, 14, 0, 5, 0}, {4, 202, 14, 0, 5, 0}, @@ -214,9 +215,9 @@ {27, 0, 19, 0, 5, 136}, {22, 0, 19, 1, 5, 136}, {23, 0, 19, 1, 5, 136}, + {18, 0, 1, 0, 4, 136}, {28, 0, 11, 0, 5, 136}, {28, 0, 11, 0, 1, 0}, - {4, 1, 14, 0, 5, 0}, {30, 0, 19, 0, 5, 136}, {30, 0, 19, 0, 4, 136}, {1, 0, 1, 0, 4, 170}, @@ -264,6 +265,7 @@ {30, 0, 1, 0, 2, 0}, {9, 0, 1, 0, 2, 136}, {30, 0, 1, 0, 2, 136}, + {30, 0, 1, 0, 4, 0}, {9, 0, 19, 0, 2, 136}, {29, 0, 1, 0, 5, 0}, {15, 0, 1, 0, 5, 0}, @@ -314,17 +316,18 @@ {14, 0, 19, 0, 5, 0}, {8, 0, 19, 0, 5, 0}, {9, 0, 4, 0, 5, 0}, + {9, 0, 12, 0, 5, 0}, {30, 0, 1, 0, 5, 170}, {5, 216, 1, 0, 5, 0}, {5, 226, 1, 0, 5, 0}, {27, 0, 1, 0, 5, 136}, - {27, 0, 1, 1, 5, 136}, {7, 0, 9, 0, 5, 136}, + {30, 0, 1, 0, 5, 136}, }; /* Reindexing of NFC first characters. */ -#define TOTAL_FIRST 367 -#define TOTAL_LAST 54 +#define TOTAL_FIRST 370 +#define TOTAL_LAST 55 struct reindex{int start;short count,index;}; static struct reindex nfc_first[] = { { 60, 2, 0}, @@ -530,6 +533,9 @@ { 12507, 0, 361}, { 12527, 3, 362}, { 12541, 0, 366}, + { 69785, 0, 367}, + { 69787, 0, 368}, + { 69797, 0, 369}, {0,0,0} }; @@ -565,6 +571,7 @@ { 4142, 0, 50}, { 6965, 0, 51}, { 12441, 1, 52}, + { 69818, 0, 54}, {0,0,0} }; @@ -658,1229 +665,1262 @@ /* index tables for the database records */ #define SHIFT 7 static unsigned char index1[] = { - 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 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, 40, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 16, 50, 51, 52, - 16, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, - 70, 71, 72, 73, 74, 75, 75, 76, 77, 78, 79, 80, 16, 81, 82, 83, 84, 85, - 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 97, 97, 97, 97, 97, 97, - 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, - 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, - 97, 97, 97, 97, 97, 97, 97, 97, 98, 97, 97, 97, 97, 97, 97, 97, 97, 97, - 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, - 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, - 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, - 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, - 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, - 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, - 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, - 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, - 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 99, 100, 97, 97, 97, 97, 97, 97, - 97, 97, 101, 40, 40, 102, 103, 104, 105, 106, 107, 108, 16, 109, 16, 16, - 16, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, - 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, - 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, - 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, - 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, - 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, - 110, 110, 110, 111, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, - 112, 112, 112, 112, 112, 112, 113, 113, 113, 113, 113, 113, 113, 113, - 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, - 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, - 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, - 114, 114, 115, 116, 117, 118, 119, 119, 120, 121, 122, 123, 124, 125, - 126, 127, 128, 129, 16, 130, 131, 132, 133, 134, 16, 16, 16, 16, 16, 16, - 135, 16, 136, 16, 137, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 40, 40, 40, 40, 40, - 40, 138, 16, 139, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 75, 140, 141, 142, 143, 16, 144, 16, 145, 146, 147, - 148, 149, 150, 151, 152, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 153, 154, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 97, 97, 97, 97, - 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, - 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, - 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, - 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, - 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, - 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, - 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, - 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, - 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, - 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, - 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, - 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, - 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, - 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, - 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, - 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, - 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, - 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, - 97, 97, 97, 97, 97, 155, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 114, 114, 114, 114, 156, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 157, 16, 158, 159, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 113, 113, 113, 113, 113, - 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, - 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, - 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, - 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, - 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, - 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, - 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, - 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, - 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, - 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, - 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, - 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, - 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, - 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, - 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, - 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, - 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, - 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, - 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, - 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, - 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, - 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, - 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, - 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, - 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, - 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, - 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, - 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, - 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, - 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, - 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, - 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, - 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, - 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, - 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, - 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, - 113, 113, 160, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, - 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, - 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, - 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, - 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, - 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, - 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, - 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, - 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, - 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, - 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, - 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, - 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, - 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, - 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, - 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, - 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, - 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, - 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, - 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, - 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, - 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, - 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, - 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, - 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, - 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, - 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, - 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, - 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, - 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, - 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, - 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, - 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, - 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, - 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, - 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, - 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 160, -}; - -static unsigned short index2[] = { - 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 3, 2, 4, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 3, 3, 3, 2, 5, 6, 6, 7, 8, 7, 6, 6, 9, 10, 6, 11, 12, 13, 12, - 12, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 12, 6, 15, 16, 15, 6, 6, 17, + 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, 41, 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, 78, 79, 80, 81, 82, 83, 17, 84, 85, 86, 87, 88, + 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 100, 100, 100, 100, 100, + 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, + 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, + 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, + 100, 100, 100, 101, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, + 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, + 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, + 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, + 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, + 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, + 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, + 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, + 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, + 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, + 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, + 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 102, + 103, 100, 100, 100, 100, 100, 100, 100, 100, 104, 41, 41, 105, 106, 107, + 108, 109, 110, 111, 112, 113, 114, 17, 115, 116, 116, 116, 116, 116, 116, + 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, + 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, + 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, + 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, + 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, + 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 117, 118, 118, + 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, + 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, + 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, + 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, + 119, 119, 119, 119, 119, 119, 119, 119, 120, 120, 121, 122, 123, 124, + 125, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 17, 136, 137, + 138, 139, 140, 17, 17, 17, 17, 17, 17, 141, 17, 142, 17, 143, 17, 144, + 17, 145, 17, 17, 17, 146, 17, 17, 17, 17, 147, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 9, 6, 10, 18, 19, 18, 20, 20, 20, 20, 20, 20, - 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, - 20, 20, 9, 16, 10, 16, 1, 1, 1, 1, 1, 1, 3, 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, 21, 22, 8, 8, 23, 8, 24, - 25, 26, 27, 28, 29, 16, 30, 25, 31, 32, 33, 34, 34, 26, 35, 25, 22, 26, - 34, 28, 36, 37, 37, 37, 22, 38, 38, 38, 38, 38, 38, 39, 38, 38, 38, 38, - 38, 38, 38, 38, 38, 39, 38, 38, 38, 38, 38, 38, 40, 39, 38, 38, 38, 38, - 38, 39, 41, 42, 42, 43, 43, 43, 43, 41, 43, 42, 42, 42, 43, 42, 42, 43, - 43, 41, 43, 42, 42, 43, 43, 43, 40, 41, 42, 42, 43, 42, 43, 41, 43, 38, - 42, 38, 43, 38, 43, 38, 43, 38, 43, 38, 43, 38, 43, 38, 43, 44, 41, 38, - 42, 38, 43, 38, 43, 38, 43, 38, 42, 38, 43, 38, 43, 38, 43, 38, 43, 38, - 43, 39, 41, 38, 43, 38, 42, 38, 43, 38, 43, 38, 41, 45, 28, 38, 43, 38, - 43, 41, 38, 43, 38, 43, 38, 43, 45, 28, 39, 41, 38, 42, 38, 43, 38, 42, - 28, 39, 41, 38, 42, 38, 43, 38, 43, 39, 41, 38, 43, 38, 43, 38, 43, 38, - 43, 38, 43, 38, 43, 38, 43, 38, 43, 38, 43, 39, 41, 38, 43, 38, 42, 38, - 43, 38, 43, 38, 43, 38, 43, 38, 43, 38, 43, 38, 38, 43, 38, 43, 38, 43, - 35, 46, 44, 44, 46, 44, 46, 44, 44, 46, 44, 44, 44, 46, 46, 44, 44, 44, - 44, 46, 44, 44, 46, 44, 44, 44, 46, 46, 46, 44, 44, 46, 44, 38, 43, 44, - 46, 44, 46, 44, 44, 46, 44, 46, 46, 44, 46, 44, 38, 43, 44, 44, 44, 46, - 44, 46, 44, 44, 46, 46, 47, 44, 46, 46, 46, 47, 47, 47, 47, 48, 49, 35, - 48, 49, 35, 48, 49, 35, 38, 42, 38, 42, 38, 42, 38, 42, 38, 42, 38, 42, - 38, 42, 38, 42, 46, 38, 43, 38, 43, 38, 43, 44, 46, 38, 43, 38, 43, 38, - 43, 38, 43, 38, 43, 43, 48, 49, 35, 38, 43, 44, 44, 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, 46, 38, 43, 44, - 46, 44, 46, 44, 46, 38, 43, 38, 43, 38, 43, 38, 43, 38, 43, 38, 43, 38, - 43, 46, 46, 46, 46, 46, 46, 44, 44, 46, 44, 44, 46, 46, 44, 46, 44, 44, - 44, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 46, 41, 46, 46, 46, 46, 46, - 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 41, 46, 46, 46, 46, 46, 46, 46, - 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, - 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, - 46, 46, 46, 46, 46, 46, 46, 47, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, - 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 50, - 50, 50, 50, 50, 50, 50, 50, 50, 51, 51, 52, 52, 52, 52, 52, 52, 52, 53, - 53, 54, 53, 51, 55, 51, 55, 55, 55, 51, 55, 51, 51, 56, 52, 53, 53, 53, - 53, 53, 53, 26, 26, 26, 26, 57, 26, 53, 54, 50, 50, 50, 50, 50, 53, 53, - 53, 53, 53, 53, 53, 51, 53, 52, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, - 53, 53, 53, 53, 53, 53, 53, 58, 58, 58, 58, 58, 59, 58, 58, 58, 58, 58, - 58, 58, 59, 59, 58, 59, 58, 59, 58, 58, 60, 61, 61, 61, 61, 60, 62, 61, - 61, 61, 61, 61, 63, 63, 64, 64, 64, 64, 65, 65, 61, 61, 61, 61, 64, 64, - 61, 64, 64, 61, 61, 66, 66, 66, 66, 67, 61, 61, 61, 61, 59, 59, 59, 68, - 68, 58, 68, 68, 69, 59, 61, 61, 61, 59, 59, 59, 61, 61, 70, 59, 59, 59, - 61, 61, 61, 61, 59, 60, 61, 61, 59, 71, 72, 72, 71, 72, 72, 71, 59, 59, - 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 44, 46, 44, 46, 73, 53, 44, - 46, 0, 0, 50, 46, 46, 46, 74, 0, 0, 0, 0, 0, 57, 75, 38, 74, 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, - 46, 41, 41, 41, 41, 41, 41, 41, 43, 43, 43, 43, 43, 44, 35, 35, 48, 76, - 76, 35, 35, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, - 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 35, 35, 35, 46, 48, 35, 77, 44, - 46, 48, 44, 46, 46, 44, 44, 44, 38, 78, 44, 38, 44, 44, 44, 38, 44, 44, - 44, 44, 38, 38, 38, 44, 39, 39, 39, 39, 39, 39, 39, 39, 39, 78, 39, 39, - 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, - 39, 39, 41, 41, 41, 41, 41, 41, 41, 41, 41, 42, 41, 41, 41, 41, 41, 41, - 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 43, 42, - 46, 43, 46, 46, 46, 43, 46, 46, 46, 46, 43, 43, 43, 46, 44, 46, 44, 46, - 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, - 38, 43, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 79, 80, 80, 80, 80, 80, - 81, 81, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, - 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, - 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, - 44, 46, 44, 38, 43, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 46, - 38, 43, 38, 43, 44, 46, 38, 43, 44, 46, 38, 43, 38, 43, 38, 43, 44, 46, - 38, 43, 38, 43, 38, 43, 44, 46, 38, 43, 38, 43, 38, 43, 38, 43, 38, 43, - 38, 43, 44, 46, 38, 43, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, - 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, - 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 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, 0, 0, 52, 82, 82, 82, 82, 82, 82, 0, 46, 46, 46, - 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, - 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 35, - 0, 82, 83, 0, 0, 0, 0, 0, 0, 84, 80, 80, 80, 80, 84, 80, 80, 80, 85, 84, - 80, 80, 80, 80, 80, 80, 84, 84, 84, 84, 84, 84, 80, 80, 84, 80, 80, 85, - 86, 80, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 96, 97, 98, 99, 100, 101, - 102, 103, 104, 102, 80, 84, 102, 95, 0, 0, 0, 0, 0, 0, 0, 0, 105, 105, - 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, - 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 0, 0, 0, 0, 0, - 105, 105, 105, 102, 102, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 106, 106, 106, - 106, 0, 0, 77, 77, 107, 108, 108, 109, 110, 111, 27, 27, 80, 80, 80, 80, - 80, 80, 80, 80, 112, 113, 114, 111, 0, 0, 111, 111, 0, 115, 116, 116, - 116, 116, 116, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, - 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, - 117, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 118, 119, 120, - 112, 113, 114, 121, 122, 123, 123, 124, 84, 80, 80, 80, 80, 80, 84, 80, - 80, 0, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 108, 126, 126, - 111, 115, 115, 127, 115, 115, 115, 115, 128, 128, 128, 128, 115, 115, - 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, - 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, - 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, - 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, - 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 116, - 115, 116, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, - 115, 115, 115, 115, 116, 111, 115, 80, 80, 80, 80, 80, 80, 80, 106, 81, - 80, 80, 80, 80, 84, 80, 117, 117, 80, 80, 27, 84, 80, 80, 84, 115, 115, - 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 115, 115, 115, 130, - 130, 115, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, - 111, 111, 0, 131, 115, 132, 115, 115, 115, 115, 115, 115, 115, 115, 115, - 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, - 115, 115, 115, 115, 115, 115, 115, 80, 84, 80, 80, 84, 80, 80, 84, 84, - 84, 80, 84, 84, 80, 84, 80, 80, 80, 84, 80, 84, 80, 84, 80, 84, 80, 80, - 0, 0, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, - 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, - 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, - 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, - 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, - 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, - 115, 115, 115, 115, 115, 115, 133, 133, 133, 133, 133, 133, 133, 133, - 133, 133, 133, 115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 134, 134, - 134, 134, 134, 134, 134, 134, 134, 134, 105, 105, 105, 105, 105, 105, - 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, - 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 80, 80, - 80, 80, 80, 80, 80, 84, 80, 135, 135, 27, 136, 136, 136, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 133, 133, 137, 47, 47, 47, 47, 47, 47, 47, - 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, - 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 138, 47, 47, 47, 47, 47, - 47, 47, 138, 47, 47, 138, 47, 47, 47, 47, 47, 0, 0, 139, 47, 137, 137, - 137, 133, 133, 133, 133, 133, 133, 133, 133, 137, 137, 137, 137, 140, 0, - 0, 47, 80, 84, 80, 80, 0, 0, 0, 141, 141, 141, 141, 141, 141, 141, 141, - 47, 47, 133, 133, 82, 82, 142, 142, 142, 142, 142, 142, 142, 142, 142, - 142, 82, 52, 47, 0, 0, 0, 0, 0, 0, 0, 0, 47, 47, 47, 47, 47, 0, 133, 137, - 137, 0, 47, 47, 47, 47, 47, 47, 47, 47, 0, 0, 47, 47, 0, 0, 47, 47, 47, - 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, - 47, 0, 47, 47, 47, 47, 47, 47, 47, 0, 47, 0, 0, 0, 47, 47, 47, 47, 0, 0, - 143, 47, 144, 137, 137, 133, 133, 133, 133, 0, 0, 137, 137, 0, 0, 145, - 145, 140, 47, 0, 0, 0, 0, 0, 0, 0, 0, 144, 0, 0, 0, 0, 141, 141, 0, 141, - 47, 47, 133, 133, 0, 0, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, - 47, 47, 146, 146, 147, 147, 147, 147, 147, 147, 79, 0, 0, 0, 0, 0, 0, - 133, 133, 137, 0, 47, 47, 47, 47, 47, 47, 0, 0, 0, 0, 47, 47, 0, 0, 47, - 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, - 47, 47, 47, 0, 47, 47, 47, 47, 47, 47, 47, 0, 47, 141, 0, 47, 141, 0, 47, - 47, 0, 0, 143, 0, 137, 137, 137, 133, 133, 0, 0, 0, 0, 133, 133, 0, 0, - 133, 133, 140, 0, 0, 0, 133, 0, 0, 0, 0, 0, 0, 0, 141, 141, 141, 47, 0, - 141, 0, 0, 0, 0, 0, 0, 0, 142, 142, 142, 142, 142, 142, 142, 142, 142, - 142, 133, 133, 47, 47, 47, 133, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 133, - 133, 137, 0, 47, 47, 47, 47, 47, 47, 47, 47, 47, 0, 47, 47, 47, 0, 47, - 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, - 47, 47, 47, 0, 47, 47, 47, 47, 47, 47, 47, 0, 47, 47, 0, 47, 47, 47, 47, - 47, 0, 0, 143, 47, 137, 137, 137, 133, 133, 133, 133, 133, 0, 133, 133, - 137, 0, 137, 137, 140, 0, 0, 47, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 47, 47, 133, 133, 0, 0, 142, 142, 142, 142, 142, 142, 142, 142, - 142, 142, 0, 146, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 133, 137, - 137, 0, 47, 47, 47, 47, 47, 47, 47, 47, 0, 0, 47, 47, 0, 0, 47, 47, 47, - 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, - 47, 0, 47, 47, 47, 47, 47, 47, 47, 0, 47, 47, 0, 47, 47, 47, 47, 47, 0, - 0, 143, 47, 144, 133, 137, 133, 133, 133, 133, 0, 0, 137, 145, 0, 0, 145, - 145, 140, 0, 0, 0, 0, 0, 0, 0, 0, 148, 144, 0, 0, 0, 0, 141, 141, 0, 47, - 47, 47, 133, 133, 0, 0, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, - 79, 47, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 133, 47, 0, 47, - 47, 47, 47, 47, 47, 0, 0, 0, 47, 47, 47, 0, 47, 47, 138, 47, 0, 0, 0, 47, - 47, 0, 47, 0, 47, 47, 0, 0, 0, 47, 47, 0, 0, 0, 47, 47, 47, 0, 0, 0, 47, - 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 0, 0, 0, 0, 144, 137, 133, - 137, 137, 0, 0, 0, 137, 137, 137, 0, 145, 145, 145, 140, 0, 0, 47, 0, 0, - 0, 0, 0, 0, 144, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 142, 142, 142, - 142, 142, 142, 142, 142, 142, 142, 147, 147, 147, 27, 27, 27, 27, 27, 27, - 146, 27, 0, 0, 0, 0, 0, 0, 137, 137, 137, 0, 47, 47, 47, 47, 47, 47, 47, - 47, 0, 47, 47, 47, 0, 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, 47, 47, 47, 47, 47, 47, - 47, 47, 47, 0, 47, 47, 47, 47, 47, 0, 0, 0, 47, 133, 133, 133, 137, 137, - 137, 137, 0, 133, 133, 149, 0, 133, 133, 133, 140, 0, 0, 0, 0, 0, 0, 0, - 150, 151, 0, 47, 47, 0, 0, 0, 0, 0, 0, 47, 47, 133, 133, 0, 0, 142, 142, - 142, 142, 142, 142, 142, 142, 142, 142, 0, 0, 0, 0, 0, 0, 0, 0, 152, 152, - 152, 152, 152, 152, 152, 79, 0, 0, 137, 137, 0, 47, 47, 47, 47, 47, 47, - 47, 47, 0, 47, 47, 47, 0, 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, 47, 47, 47, 47, 47, - 47, 47, 47, 47, 0, 47, 47, 47, 47, 47, 0, 0, 143, 47, 137, 153, 145, 137, - 144, 137, 137, 0, 153, 145, 145, 0, 145, 145, 133, 140, 0, 0, 0, 0, 0, 0, - 0, 144, 144, 0, 0, 0, 0, 0, 0, 0, 47, 0, 47, 47, 133, 133, 0, 0, 142, - 142, 142, 142, 142, 142, 142, 142, 142, 142, 0, 27, 27, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 137, 137, 0, 47, 47, 47, 47, 47, 47, 47, 47, - 0, 47, 47, 47, 0, 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, 47, 47, 47, 47, 47, 47, 47, - 47, 47, 47, 47, 47, 47, 47, 47, 0, 0, 0, 47, 144, 137, 137, 133, 133, - 133, 133, 0, 137, 137, 137, 0, 145, 145, 145, 140, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 144, 0, 0, 0, 0, 0, 0, 0, 0, 47, 47, 133, 133, 0, 0, 142, 142, 142, - 142, 142, 142, 142, 142, 142, 142, 147, 147, 147, 147, 147, 147, 0, 0, 0, - 79, 47, 47, 47, 47, 47, 47, 0, 0, 137, 137, 0, 47, 47, 47, 47, 47, 47, - 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 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, 0, 47, 47, 47, 47, 47, 47, 47, 47, 47, 0, 47, 0, 0, 47, 47, 47, - 47, 47, 47, 47, 0, 0, 0, 154, 0, 0, 0, 0, 144, 137, 137, 133, 133, 133, - 0, 133, 0, 137, 137, 145, 137, 145, 145, 145, 144, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 137, 137, 82, 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, 47, 47, 47, 47, 47, 47, 47, 47, 133, 47, 155, - 133, 133, 133, 133, 156, 156, 140, 0, 0, 0, 0, 146, 47, 47, 47, 47, 47, - 47, 52, 133, 157, 157, 157, 157, 133, 133, 133, 82, 142, 142, 142, 142, - 142, 142, 142, 142, 142, 142, 82, 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, 47, 47, 0, 47, 0, 0, 47, 47, 0, 47, 0, 0, 47, 0, 0, 0, 0, 0, 0, 47, - 47, 47, 47, 0, 47, 47, 47, 47, 47, 47, 47, 0, 47, 47, 47, 0, 47, 0, 47, - 0, 0, 47, 47, 0, 47, 47, 47, 47, 133, 47, 155, 133, 133, 133, 133, 158, - 158, 0, 133, 133, 47, 0, 0, 47, 47, 47, 47, 47, 0, 52, 0, 159, 159, 159, - 159, 133, 133, 0, 0, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 0, - 0, 155, 155, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 79, 79, 79, 82, 82, 82, 82, - 82, 82, 82, 82, 160, 82, 82, 82, 82, 82, 82, 79, 79, 79, 79, 79, 84, 84, - 79, 79, 79, 79, 79, 79, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, - 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 79, 84, 79, 84, 79, - 161, 162, 163, 162, 163, 137, 137, 47, 47, 47, 141, 47, 47, 47, 47, 0, - 47, 47, 47, 47, 141, 47, 47, 47, 47, 141, 47, 47, 47, 47, 141, 47, 47, - 47, 47, 141, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 141, 47, 47, - 47, 0, 0, 0, 0, 164, 165, 166, 167, 166, 166, 168, 166, 168, 165, 165, - 165, 165, 133, 137, 165, 166, 80, 80, 140, 82, 80, 80, 47, 47, 47, 47, 0, - 0, 0, 0, 133, 133, 133, 166, 133, 133, 133, 133, 0, 133, 133, 133, 133, - 166, 133, 133, 133, 133, 166, 133, 133, 133, 133, 166, 133, 133, 133, - 133, 166, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, - 166, 133, 133, 133, 0, 79, 79, 79, 79, 79, 79, 79, 79, 84, 79, 79, 79, - 79, 79, 79, 0, 79, 79, 82, 82, 82, 82, 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, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, - 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, - 47, 47, 47, 47, 47, 47, 47, 47, 47, 138, 47, 47, 47, 47, 137, 137, 133, - 148, 133, 133, 137, 133, 133, 133, 133, 133, 143, 137, 140, 140, 137, - 137, 133, 133, 47, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 82, - 82, 82, 82, 82, 82, 47, 47, 47, 47, 47, 47, 137, 137, 133, 133, 47, 47, - 47, 47, 133, 133, 133, 47, 137, 137, 137, 47, 47, 137, 137, 137, 137, - 137, 137, 137, 47, 47, 47, 133, 133, 133, 133, 47, 47, 47, 47, 47, 47, - 47, 47, 47, 47, 47, 47, 47, 133, 137, 137, 133, 133, 137, 137, 137, 137, - 137, 137, 84, 47, 137, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, - 0, 0, 0, 0, 79, 79, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, - 44, 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, 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, 82, 50, 0, 0, 0, 169, 169, 169, 169, 169, 169, 169, 169, 169, - 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, - 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, - 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, - 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, - 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, - 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 0, 0, 0, 0, 0, - 169, 47, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, - 170, 170, 170, 170, 170, 170, 170, 170, 47, 47, 47, 47, 47, 47, 47, 47, - 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 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, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, - 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, - 170, 170, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, - 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 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, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, - 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, - 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, - 47, 47, 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, 47, 47, 47, 0, 0, 47, 47, 47, 47, - 47, 47, 47, 0, 47, 0, 47, 47, 47, 47, 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, 0, 47, - 47, 47, 47, 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, 0, 47, 47, 47, 47, 0, 0, 47, 47, 47, 47, 47, 47, 47, 0, 47, 0, 47, - 47, 47, 47, 0, 0, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, - 47, 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, 0, 47, 47, 47, 47, 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, 0, 0, 0, 0, 80, 79, 82, 82, 82, 82, 82, 82, 82, - 82, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, - 147, 147, 147, 147, 147, 147, 0, 0, 0, 47, 47, 47, 47, 47, 47, 47, 47, - 47, 47, 47, 47, 47, 47, 47, 47, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, - 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, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 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, 47, 47, 47, 47, 47, 47, 47, - 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, - 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, - 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, - 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, - 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, - 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, - 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, - 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, - 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, - 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, - 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, - 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, - 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, - 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, - 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, - 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, - 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, - 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 82, 82, 47, 47, 47, 47, 47, - 47, 47, 47, 0, 0, 0, 0, 0, 0, 0, 0, 0, 171, 47, 47, 47, 47, 47, 47, 47, - 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, - 47, 162, 163, 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, 47, 82, 82, 82, 172, 172, 172, 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, 0, 47, 47, 47, 47, 133, 133, 140, 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, 133, 133, 140, 82, 82, 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, 133, 133, 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, 0, 47, 47, 47, 0, 133, 133, 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, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 173, 173, - 137, 133, 133, 133, 133, 133, 133, 133, 137, 137, 137, 137, 137, 137, - 137, 137, 133, 137, 137, 133, 133, 133, 133, 133, 133, 133, 133, 133, - 140, 133, 82, 82, 82, 52, 82, 82, 82, 146, 47, 80, 0, 0, 142, 142, 142, - 142, 142, 142, 142, 142, 142, 142, 0, 0, 0, 0, 0, 0, 152, 152, 152, 152, - 152, 152, 152, 152, 152, 152, 0, 0, 0, 0, 0, 0, 136, 136, 136, 136, 136, - 136, 83, 136, 136, 136, 136, 133, 133, 133, 171, 0, 142, 142, 142, 142, - 142, 142, 142, 142, 142, 142, 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, 52, 47, 47, 47, 47, 47, 47, - 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, - 47, 47, 47, 47, 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, 47, 47, - 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, - 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, - 47, 47, 47, 86, 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, 47, 47, 47, 47, - 47, 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, 133, 133, 133, 137, 137, 137, 137, - 133, 133, 137, 137, 137, 0, 0, 0, 0, 137, 137, 133, 137, 137, 137, 137, - 137, 137, 85, 80, 84, 0, 0, 0, 0, 27, 0, 0, 0, 136, 136, 142, 142, 142, - 142, 142, 142, 142, 142, 142, 142, 47, 47, 47, 47, 47, 47, 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, 47, 47, 47, 47, 47, 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, 47, 47, 0, 0, 0, 0, 0, 0, 137, 137, 137, 137, 137, 137, - 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 47, 47, 47, 47, - 47, 47, 47, 137, 137, 0, 0, 0, 0, 0, 0, 142, 142, 142, 142, 142, 142, - 142, 142, 142, 142, 0, 0, 0, 0, 136, 136, 27, 27, 27, 27, 27, 27, 27, 27, - 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, - 27, 27, 27, 27, 27, 27, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, - 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 80, 84, 137, 137, 137, 0, 0, - 82, 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, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 133, 133, 133, 133, 137, 47, 138, 47, 138, 47, 138, 47, 138, 47, - 138, 47, 47, 47, 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, 143, 144, 133, 133, 133, 133, 133, 145, 133, 145, 137, 137, 145, - 145, 133, 145, 174, 47, 47, 47, 47, 47, 47, 47, 0, 0, 0, 0, 142, 142, - 142, 142, 142, 142, 142, 142, 142, 142, 82, 82, 82, 82, 82, 82, 82, 79, - 79, 79, 79, 79, 79, 79, 79, 79, 79, 80, 84, 80, 80, 80, 80, 80, 80, 80, - 79, 79, 79, 79, 79, 79, 79, 79, 79, 0, 0, 0, 133, 133, 137, 47, 47, 47, - 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, - 47, 47, 47, 47, 47, 47, 47, 47, 47, 137, 133, 133, 133, 133, 137, 137, - 133, 133, 174, 0, 0, 0, 47, 47, 142, 142, 142, 142, 142, 142, 142, 142, - 142, 142, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 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, 137, 137, 137, 137, 137, 137, 137, 137, 133, 133, 133, 133, 133, 133, - 133, 133, 137, 137, 133, 143, 0, 0, 0, 82, 82, 82, 82, 82, 142, 142, 142, - 142, 142, 142, 142, 142, 142, 142, 0, 0, 0, 47, 47, 47, 142, 142, 142, - 142, 142, 142, 142, 142, 142, 142, 47, 47, 47, 47, 47, 47, 47, 47, 47, - 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, - 47, 47, 47, 52, 52, 52, 52, 52, 52, 82, 82, 46, 46, 46, 46, 46, 46, 46, - 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, - 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, - 46, 50, 50, 50, 52, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 52, 50, - 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 52, - 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, - 50, 35, 35, 35, 35, 35, 35, 35, 35, 35, 46, 46, 46, 46, 46, 46, 46, 46, - 46, 46, 46, 46, 46, 50, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, - 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, - 46, 46, 46, 46, 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, 80, 80, 84, 80, 80, 80, 80, 80, 80, 80, 84, 80, 80, - 175, 176, 84, 177, 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, 80, 84, 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, 178, 46, 46, 44, 46, 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, 46, 44, 46, 44, 46, 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, 179, 43, 179, - 43, 179, 43, 179, 43, 179, 43, 179, 43, 179, 0, 0, 43, 43, 43, 43, 43, - 43, 43, 43, 180, 180, 180, 180, 180, 180, 180, 180, 43, 43, 43, 43, 43, - 43, 43, 43, 180, 180, 180, 180, 180, 180, 180, 180, 43, 43, 43, 43, 43, - 43, 43, 43, 180, 180, 180, 180, 180, 180, 180, 180, 43, 43, 43, 43, 43, - 0, 43, 43, 38, 38, 38, 181, 180, 57, 179, 57, 57, 75, 43, 43, 43, 0, 43, - 43, 38, 181, 38, 181, 180, 75, 75, 75, 43, 43, 43, 179, 0, 0, 43, 43, 38, - 38, 38, 181, 0, 75, 75, 75, 43, 43, 43, 179, 43, 43, 43, 43, 38, 38, 38, - 181, 38, 75, 182, 182, 0, 0, 43, 43, 43, 0, 43, 43, 38, 181, 38, 181, - 180, 182, 57, 0, 183, 183, 184, 184, 184, 184, 184, 184, 184, 184, 184, - 131, 131, 131, 173, 185, 186, 187, 83, 186, 186, 186, 22, 188, 189, 190, - 191, 192, 189, 190, 191, 192, 22, 22, 22, 136, 193, 193, 193, 22, 194, - 195, 196, 197, 198, 199, 200, 21, 201, 108, 201, 202, 203, 22, 188, 188, - 136, 29, 36, 22, 188, 136, 193, 204, 204, 136, 136, 136, 205, 162, 163, - 188, 188, 188, 136, 136, 136, 136, 136, 136, 136, 136, 77, 136, 204, 136, - 136, 188, 136, 136, 136, 136, 136, 136, 136, 184, 131, 131, 131, 131, - 131, 0, 0, 0, 0, 0, 131, 131, 131, 131, 131, 131, 206, 35, 0, 0, 34, 206, - 206, 206, 206, 206, 207, 207, 208, 209, 210, 28, 206, 34, 34, 34, 34, - 206, 206, 206, 206, 206, 207, 207, 208, 209, 210, 0, 50, 50, 50, 50, 50, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 146, 146, 146, 146, 146, 146, 146, 146, - 211, 212, 146, 146, 23, 146, 146, 146, 146, 146, 146, 146, 146, 146, 0, - 0, 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, 213, 213, 80, 80, 80, 80, 213, 213, 213, 80, 80, 81, 81, 81, - 81, 80, 81, 81, 81, 213, 213, 80, 84, 80, 213, 213, 84, 84, 84, 84, 80, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 214, 214, 48, 215, 27, 215, - 214, 48, 27, 215, 35, 48, 48, 48, 35, 35, 48, 48, 48, 28, 27, 48, 215, - 27, 27, 48, 48, 48, 48, 48, 27, 27, 214, 215, 215, 27, 48, 27, 216, 27, - 48, 27, 181, 216, 48, 48, 217, 35, 48, 48, 44, 48, 35, 155, 155, 155, - 155, 35, 27, 214, 35, 35, 48, 48, 218, 77, 77, 77, 77, 48, 35, 35, 35, - 35, 27, 77, 27, 27, 46, 79, 0, 0, 0, 37, 37, 219, 219, 219, 219, 219, - 219, 37, 37, 37, 37, 219, 220, 220, 220, 220, 220, 220, 220, 220, 220, - 220, 220, 220, 221, 221, 221, 221, 220, 220, 220, 220, 220, 220, 220, - 220, 220, 220, 221, 221, 221, 221, 221, 221, 172, 172, 172, 44, 46, 172, - 172, 172, 172, 0, 0, 0, 0, 0, 0, 0, 40, 40, 40, 40, 40, 25, 25, 25, 25, - 25, 222, 222, 27, 27, 27, 27, 77, 27, 27, 77, 27, 27, 77, 27, 27, 27, 27, - 27, 27, 27, 222, 27, 27, 27, 27, 27, 27, 27, 27, 27, 25, 25, 27, 27, 27, - 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 223, 222, - 222, 27, 27, 40, 27, 40, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, - 27, 27, 27, 27, 27, 27, 25, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, - 27, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 40, 224, 225, 225, - 226, 77, 77, 40, 225, 226, 224, 225, 226, 224, 77, 40, 77, 225, 227, 228, - 77, 225, 224, 77, 77, 77, 225, 224, 224, 225, 40, 225, 225, 224, 224, 40, - 226, 40, 226, 40, 40, 40, 40, 225, 229, 218, 225, 218, 218, 224, 224, - 224, 40, 40, 40, 40, 77, 224, 77, 224, 225, 225, 224, 224, 224, 226, 224, - 224, 226, 224, 224, 226, 225, 226, 224, 224, 225, 77, 77, 77, 77, 77, - 225, 224, 224, 224, 77, 77, 77, 77, 77, 77, 77, 77, 77, 224, 230, 40, - 226, 77, 225, 225, 225, 225, 224, 224, 225, 225, 77, 222, 230, 230, 226, - 226, 224, 224, 226, 226, 224, 224, 226, 226, 224, 224, 224, 224, 224, - 224, 226, 226, 225, 225, 226, 226, 225, 225, 226, 226, 224, 224, 224, 77, - 77, 224, 224, 224, 224, 77, 77, 40, 77, 77, 224, 40, 77, 77, 77, 77, 77, - 77, 77, 77, 224, 224, 77, 40, 224, 224, 224, 224, 224, 224, 226, 226, - 226, 226, 224, 224, 224, 224, 224, 224, 224, 224, 224, 77, 77, 77, 77, - 77, 224, 225, 77, 77, 77, 77, 77, 77, 77, 77, 77, 224, 224, 224, 224, - 224, 77, 77, 224, 224, 77, 77, 77, 77, 224, 224, 224, 224, 224, 224, 224, - 224, 224, 224, 226, 226, 226, 226, 224, 224, 224, 224, 224, 224, 226, - 226, 226, 226, 77, 77, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, - 224, 224, 224, 224, 224, 224, 27, 27, 27, 27, 27, 27, 27, 27, 224, 224, - 224, 224, 27, 27, 27, 27, 27, 27, 25, 27, 27, 27, 27, 27, 27, 27, 27, 27, - 27, 27, 27, 27, 224, 224, 27, 27, 27, 27, 27, 27, 27, 231, 232, 27, 27, - 27, 27, 27, 27, 27, 27, 27, 27, 27, 79, 79, 79, 79, 79, 79, 79, 79, 79, - 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, - 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, - 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, - 79, 79, 79, 79, 79, 79, 27, 77, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, - 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 79, 27, 27, 27, - 27, 27, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, - 77, 77, 77, 77, 77, 77, 77, 77, 77, 27, 27, 27, 27, 27, 27, 27, 27, 27, - 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, - 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 77, 77, 77, 77, 77, - 77, 27, 27, 27, 27, 27, 27, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, - 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, - 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 27, 27, 27, 27, 27, 27, 27, 27, - 27, 27, 27, 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, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, - 34, 34, 34, 34, 34, 34, 34, 233, 233, 233, 233, 233, 233, 233, 233, 233, - 233, 233, 233, 233, 233, 233, 233, 233, 233, 233, 233, 233, 233, 233, - 233, 233, 233, 233, 233, 233, 233, 233, 233, 233, 233, 233, 233, 233, - 233, 233, 233, 233, 233, 233, 233, 233, 233, 233, 233, 233, 233, 233, - 233, 233, 233, 233, 233, 233, 233, 233, 233, 233, 233, 233, 233, 233, - 233, 233, 233, 233, 233, 233, 233, 233, 233, 233, 233, 233, 233, 219, - 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, - 234, 234, 234, 234, 234, 234, 234, 25, 25, 25, 25, 25, 25, 25, 25, 25, - 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, - 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, - 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, - 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 27, 27, 27, 27, 25, - 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, - 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 27, - 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 25, 25, 25, 25, 25, 25, 25, - 25, 25, 25, 25, 25, 25, 25, 25, 25, 27, 27, 25, 25, 25, 25, 27, 27, 27, - 27, 27, 27, 27, 27, 27, 27, 25, 25, 27, 25, 25, 25, 25, 25, 25, 25, 27, - 27, 27, 27, 27, 27, 27, 27, 25, 25, 27, 27, 25, 40, 27, 27, 27, 27, 25, - 25, 27, 27, 25, 40, 27, 27, 27, 27, 25, 25, 25, 27, 27, 25, 27, 27, 25, - 25, 25, 25, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, - 27, 25, 25, 25, 25, 27, 27, 27, 27, 27, 27, 27, 27, 27, 25, 27, 27, 27, - 27, 27, 27, 27, 27, 77, 77, 77, 77, 77, 77, 77, 77, 27, 27, 27, 27, 27, - 25, 25, 27, 27, 25, 27, 27, 27, 27, 25, 25, 27, 27, 27, 27, 25, 25, 27, - 27, 27, 27, 27, 27, 25, 27, 25, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, - 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, - 27, 27, 27, 27, 27, 25, 27, 25, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, - 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, - 27, 25, 25, 27, 25, 25, 25, 27, 25, 25, 25, 25, 27, 25, 25, 27, 40, 27, - 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, - 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, - 27, 27, 27, 27, 27, 27, 27, 27, 27, 0, 0, 27, 27, 27, 27, 27, 27, 27, 27, - 27, 27, 27, 27, 79, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, - 27, 27, 27, 0, 0, 0, 27, 27, 27, 27, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 27, 27, 27, 27, 0, 27, 27, 27, 27, 0, 0, 27, 27, 27, 27, 27, 27, 27, - 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, - 27, 27, 27, 0, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, - 27, 27, 27, 27, 27, 27, 25, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, - 27, 27, 27, 0, 27, 0, 27, 27, 27, 27, 0, 0, 0, 27, 0, 27, 27, 27, 27, 27, - 27, 27, 0, 0, 27, 27, 27, 27, 27, 27, 27, 162, 163, 162, 163, 162, 163, - 162, 163, 162, 163, 162, 163, 162, 163, 234, 234, 234, 234, 234, 234, - 234, 234, 234, 234, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, - 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 27, 0, 0, 0, 27, 27, - 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, - 27, 27, 27, 27, 0, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, - 27, 0, 224, 77, 77, 224, 224, 162, 163, 77, 224, 224, 77, 0, 224, 0, 0, - 0, 77, 77, 77, 224, 224, 224, 224, 77, 77, 77, 77, 77, 224, 224, 224, 77, - 77, 77, 224, 224, 224, 224, 9, 10, 9, 10, 9, 10, 9, 10, 162, 163, 77, 77, - 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 79, 79, 79, 79, - 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, - 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, - 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, - 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, - 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, - 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, - 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 77, 77, - 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, - 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, - 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, - 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, - 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, - 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, - 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, - 77, 77, 77, 162, 163, 9, 10, 162, 163, 162, 163, 162, 163, 162, 163, 162, - 163, 162, 163, 162, 163, 162, 163, 162, 163, 77, 77, 224, 224, 224, 224, - 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, - 224, 224, 224, 77, 77, 77, 77, 77, 77, 77, 77, 224, 77, 77, 77, 77, 77, - 77, 77, 224, 224, 224, 224, 224, 224, 77, 77, 77, 224, 77, 77, 77, 77, - 224, 224, 224, 224, 224, 77, 224, 224, 77, 77, 162, 163, 162, 163, 224, - 77, 77, 77, 77, 224, 77, 224, 224, 224, 77, 77, 224, 224, 77, 77, 77, 77, - 77, 77, 77, 77, 77, 77, 224, 224, 224, 224, 224, 224, 77, 77, 162, 163, - 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 224, 224, 218, 224, 224, - 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 77, - 224, 224, 224, 224, 77, 77, 224, 77, 224, 77, 77, 224, 77, 224, 224, 224, - 224, 77, 77, 77, 77, 77, 224, 224, 77, 77, 77, 77, 77, 77, 224, 224, 224, - 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, - 77, 77, 77, 77, 77, 77, 224, 224, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, - 77, 224, 224, 77, 77, 77, 77, 224, 224, 224, 224, 77, 224, 224, 77, 77, - 224, 218, 208, 208, 77, 77, 224, 224, 224, 224, 224, 224, 224, 224, 224, - 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, - 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, - 224, 224, 224, 224, 224, 224, 77, 77, 224, 224, 224, 224, 224, 224, 224, - 224, 77, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, - 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, - 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 77, 77, - 77, 77, 77, 235, 77, 224, 77, 77, 77, 224, 224, 224, 224, 224, 77, 77, - 77, 77, 77, 224, 224, 224, 77, 77, 77, 77, 224, 77, 77, 77, 224, 224, - 224, 224, 224, 77, 224, 77, 77, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, - 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, - 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, - 27, 27, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, - 77, 77, 77, 77, 77, 27, 27, 77, 77, 77, 77, 77, 77, 0, 0, 0, 27, 27, 27, - 27, 27, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, + 17, 17, 17, 17, 17, 17, 41, 41, 41, 41, 41, 41, 148, 17, 149, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 41, 41, 41, 41, 41, 41, 41, 41, 150, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 78, 151, + 152, 153, 154, 17, 155, 17, 156, 157, 158, 159, 160, 161, 162, 163, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 164, 165, 166, 167, 168, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 100, 100, 100, 100, 100, 100, 100, 100, + 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, + 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, + 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, + 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, + 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, + 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, + 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, + 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, + 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, + 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, + 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, + 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, + 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, + 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, + 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, + 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, + 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, + 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, + 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, + 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, + 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, + 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, + 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, + 100, 100, 100, 169, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, + 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, + 100, 100, 100, 100, 100, 100, 100, 100, 170, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 120, 120, 120, + 120, 171, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 172, 17, 173, 174, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, + 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, + 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, + 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, + 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, + 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, + 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, + 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, + 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, + 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, + 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, + 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, + 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, + 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, + 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, + 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, + 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, + 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, + 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, + 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, + 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, + 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, + 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, + 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, + 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, + 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, + 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, + 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, + 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, + 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, + 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, + 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, + 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, + 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, + 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, + 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, + 119, 119, 119, 119, 119, 119, 119, 119, 175, 119, 119, 119, 119, 119, + 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, + 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, + 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, + 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, + 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, + 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, + 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, + 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, + 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, + 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, + 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, + 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, + 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, + 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, + 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, + 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, + 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, + 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, + 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, + 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, + 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, + 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, + 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, + 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, + 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, + 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, + 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, + 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, + 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, + 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, + 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, + 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, + 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, + 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, + 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, + 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, + 119, 119, 175, +}; + +static unsigned short index2[] = { + 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 3, 2, 4, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 3, 3, 3, 2, 5, 6, 6, 7, 8, 7, 6, 6, 9, 10, 6, 11, 12, 13, 12, + 12, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 12, 6, 15, 16, 15, 6, 6, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 9, 6, 10, 18, 19, 18, 20, 20, 20, 20, 20, 20, + 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, + 20, 20, 9, 16, 10, 16, 1, 1, 1, 1, 1, 1, 3, 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, 21, 22, 8, 8, 23, 8, 24, + 25, 26, 27, 28, 29, 16, 30, 25, 31, 32, 33, 34, 34, 26, 35, 25, 22, 26, + 34, 28, 36, 37, 37, 37, 22, 38, 38, 38, 38, 38, 38, 39, 38, 38, 38, 38, + 38, 38, 38, 38, 38, 39, 38, 38, 38, 38, 38, 38, 40, 39, 38, 38, 38, 38, + 38, 39, 41, 42, 42, 43, 43, 43, 43, 41, 43, 42, 42, 42, 43, 42, 42, 43, + 43, 41, 43, 42, 42, 43, 43, 43, 40, 41, 42, 42, 43, 42, 43, 41, 43, 38, + 42, 38, 43, 38, 43, 38, 43, 38, 43, 38, 43, 38, 43, 38, 43, 44, 41, 38, + 42, 38, 43, 38, 43, 38, 43, 38, 42, 38, 43, 38, 43, 38, 43, 38, 43, 38, + 43, 39, 41, 38, 43, 38, 42, 38, 43, 38, 43, 38, 41, 45, 28, 38, 43, 38, + 43, 41, 38, 43, 38, 43, 38, 43, 45, 28, 39, 41, 38, 42, 38, 43, 38, 42, + 28, 39, 41, 38, 42, 38, 43, 38, 43, 39, 41, 38, 43, 38, 43, 38, 43, 38, + 43, 38, 43, 38, 43, 38, 43, 38, 43, 38, 43, 39, 41, 38, 43, 38, 42, 38, + 43, 38, 43, 38, 43, 38, 43, 38, 43, 38, 43, 38, 38, 43, 38, 43, 38, 43, + 35, 46, 44, 44, 46, 44, 46, 44, 44, 46, 44, 44, 44, 46, 46, 44, 44, 44, + 44, 46, 44, 44, 46, 44, 44, 44, 46, 46, 46, 44, 44, 46, 44, 38, 43, 44, + 46, 44, 46, 44, 44, 46, 44, 46, 46, 44, 46, 44, 38, 43, 44, 44, 44, 46, + 44, 46, 44, 44, 46, 46, 47, 44, 46, 46, 46, 47, 47, 47, 47, 48, 49, 35, + 48, 49, 35, 48, 49, 35, 38, 42, 38, 42, 38, 42, 38, 42, 38, 42, 38, 42, + 38, 42, 38, 42, 46, 38, 43, 38, 43, 38, 43, 44, 46, 38, 43, 38, 43, 38, + 43, 38, 43, 38, 43, 43, 48, 49, 35, 38, 43, 44, 44, 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, 46, 38, 43, 44, + 46, 44, 46, 44, 46, 38, 43, 38, 43, 38, 43, 38, 43, 38, 43, 38, 43, 38, + 43, 46, 46, 46, 46, 46, 46, 44, 44, 46, 44, 44, 46, 46, 44, 46, 44, 44, + 44, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 46, 41, 46, 46, 46, 46, 46, + 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 41, 46, 46, 46, 46, 46, 46, 46, + 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, + 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, + 46, 46, 46, 46, 46, 46, 46, 47, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, + 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 50, + 50, 50, 50, 50, 50, 50, 50, 50, 51, 51, 52, 52, 52, 52, 52, 52, 52, 53, + 53, 54, 53, 51, 55, 51, 55, 55, 55, 51, 55, 51, 51, 56, 52, 53, 53, 53, + 53, 53, 53, 26, 26, 26, 26, 57, 26, 53, 54, 50, 50, 50, 50, 50, 53, 53, + 53, 53, 53, 53, 53, 51, 53, 52, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, + 53, 53, 53, 53, 53, 53, 53, 58, 58, 58, 58, 58, 59, 58, 58, 58, 58, 58, + 58, 58, 59, 59, 58, 59, 58, 59, 58, 58, 60, 61, 61, 61, 61, 60, 62, 61, + 61, 61, 61, 61, 63, 63, 64, 64, 64, 64, 65, 65, 61, 61, 61, 61, 64, 64, + 61, 64, 64, 61, 61, 66, 66, 66, 66, 67, 61, 61, 61, 61, 59, 59, 59, 68, + 68, 58, 68, 68, 69, 59, 61, 61, 61, 59, 59, 59, 61, 61, 70, 59, 59, 59, + 61, 61, 61, 61, 59, 60, 61, 61, 59, 71, 72, 72, 71, 72, 72, 71, 59, 59, + 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 44, 46, 44, 46, 73, 53, 44, + 46, 0, 0, 50, 46, 46, 46, 74, 0, 0, 0, 0, 0, 57, 75, 38, 74, 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, + 46, 41, 41, 41, 41, 41, 41, 41, 43, 43, 43, 43, 43, 44, 35, 35, 48, 76, + 76, 35, 35, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, + 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 35, 35, 35, 46, 48, 35, 77, 44, + 46, 48, 44, 46, 46, 44, 44, 44, 38, 78, 44, 38, 44, 44, 44, 38, 44, 44, + 44, 44, 38, 38, 38, 44, 39, 39, 39, 39, 39, 39, 39, 39, 39, 78, 39, 39, + 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, + 39, 39, 41, 41, 41, 41, 41, 41, 41, 41, 41, 42, 41, 41, 41, 41, 41, 41, + 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 43, 42, + 46, 43, 46, 46, 46, 43, 46, 46, 46, 46, 43, 43, 43, 46, 44, 46, 44, 46, + 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, + 38, 43, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 79, 80, 80, 80, 80, 80, + 81, 81, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, + 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, + 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, + 44, 46, 44, 38, 43, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 46, + 38, 43, 38, 43, 44, 46, 38, 43, 44, 46, 38, 43, 38, 43, 38, 43, 44, 46, + 38, 43, 38, 43, 38, 43, 44, 46, 38, 43, 38, 43, 38, 43, 38, 43, 38, 43, + 38, 43, 44, 46, 38, 43, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, + 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, + 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 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, 0, 0, 52, 82, 82, 82, 82, 82, 82, 0, 46, 46, 46, + 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, + 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 35, + 0, 82, 83, 0, 0, 0, 0, 0, 0, 84, 80, 80, 80, 80, 84, 80, 80, 80, 85, 84, + 80, 80, 80, 80, 80, 80, 84, 84, 84, 84, 84, 84, 80, 80, 84, 80, 80, 85, + 86, 80, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 96, 97, 98, 99, 100, 101, + 102, 103, 104, 102, 80, 84, 102, 95, 0, 0, 0, 0, 0, 0, 0, 0, 105, 105, + 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, + 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 0, 0, 0, 0, 0, + 105, 105, 105, 102, 102, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 106, 106, 106, + 106, 0, 0, 77, 77, 107, 108, 108, 109, 110, 111, 27, 27, 80, 80, 80, 80, + 80, 80, 80, 80, 112, 113, 114, 111, 0, 0, 111, 111, 0, 115, 116, 116, + 116, 116, 116, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, + 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, + 117, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 118, 119, 120, + 112, 113, 114, 121, 122, 123, 123, 124, 84, 80, 80, 80, 80, 80, 84, 80, + 80, 0, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 108, 126, 126, + 111, 115, 115, 127, 115, 115, 115, 115, 128, 128, 128, 128, 115, 115, + 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, + 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, + 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, + 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, + 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 116, + 115, 116, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, + 115, 115, 115, 115, 116, 111, 115, 80, 80, 80, 80, 80, 80, 80, 106, 81, + 80, 80, 80, 80, 84, 80, 117, 117, 80, 80, 27, 84, 80, 80, 84, 115, 115, + 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 115, 115, 115, 130, + 130, 115, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, + 111, 111, 0, 131, 115, 132, 115, 115, 115, 115, 115, 115, 115, 115, 115, + 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, + 115, 115, 115, 115, 115, 115, 115, 80, 84, 80, 80, 84, 80, 80, 84, 84, + 84, 80, 84, 84, 80, 84, 80, 80, 80, 84, 80, 84, 80, 84, 80, 84, 80, 80, + 0, 0, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, + 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, + 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, + 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, + 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, + 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, + 115, 115, 115, 115, 115, 115, 133, 133, 133, 133, 133, 133, 133, 133, + 133, 133, 133, 115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 134, 134, + 134, 134, 134, 134, 134, 134, 134, 134, 105, 105, 105, 105, 105, 105, + 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, + 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 80, 80, + 80, 80, 80, 80, 80, 84, 80, 135, 135, 27, 136, 136, 136, 135, 0, 0, 0, 0, + 0, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, + 105, 105, 105, 105, 105, 105, 105, 105, 80, 80, 80, 80, 135, 80, 80, 80, + 80, 80, 80, 80, 80, 80, 135, 80, 80, 80, 135, 80, 80, 80, 80, 80, 0, 0, + 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, + 102, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 133, 133, 133, 137, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, + 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, + 47, 47, 47, 47, 47, 47, 47, 138, 47, 47, 47, 47, 47, 47, 47, 138, 47, 47, + 138, 47, 47, 47, 47, 47, 0, 0, 139, 47, 137, 137, 137, 133, 133, 133, + 133, 133, 133, 133, 133, 137, 137, 137, 137, 140, 137, 0, 47, 80, 84, 80, + 80, 133, 0, 0, 141, 141, 141, 141, 141, 141, 141, 141, 47, 47, 133, 133, + 82, 82, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 82, 52, 47, 0, + 0, 0, 0, 0, 0, 47, 47, 47, 47, 47, 47, 47, 0, 133, 137, 137, 0, 47, 47, + 47, 47, 47, 47, 47, 47, 0, 0, 47, 47, 0, 0, 47, 47, 47, 47, 47, 47, 47, + 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 0, 47, 47, + 47, 47, 47, 47, 47, 0, 47, 0, 0, 0, 47, 47, 47, 47, 0, 0, 143, 47, 144, + 137, 137, 133, 133, 133, 133, 0, 0, 137, 137, 0, 0, 145, 145, 140, 47, 0, + 0, 0, 0, 0, 0, 0, 0, 144, 0, 0, 0, 0, 141, 141, 0, 141, 47, 47, 133, 133, + 0, 0, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 47, 47, 146, 146, + 147, 147, 147, 147, 147, 147, 79, 146, 0, 0, 0, 0, 0, 133, 133, 137, 0, + 47, 47, 47, 47, 47, 47, 0, 0, 0, 0, 47, 47, 0, 0, 47, 47, 47, 47, 47, 47, + 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 0, 47, + 47, 47, 47, 47, 47, 47, 0, 47, 141, 0, 47, 141, 0, 47, 47, 0, 0, 143, 0, + 137, 137, 137, 133, 133, 0, 0, 0, 0, 133, 133, 0, 0, 133, 133, 140, 0, 0, + 0, 133, 0, 0, 0, 0, 0, 0, 0, 141, 141, 141, 47, 0, 141, 0, 0, 0, 0, 0, 0, + 0, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 133, 133, 47, 47, + 47, 133, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 133, 133, 137, 0, 47, 47, 47, + 47, 47, 47, 47, 47, 47, 0, 47, 47, 47, 0, 47, 47, 47, 47, 47, 47, 47, 47, + 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 0, 47, 47, 47, + 47, 47, 47, 47, 0, 47, 47, 0, 47, 47, 47, 47, 47, 0, 0, 143, 47, 137, + 137, 137, 133, 133, 133, 133, 133, 0, 133, 133, 137, 0, 137, 137, 140, 0, + 0, 47, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 47, 47, 133, 133, 0, + 0, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 0, 146, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 133, 137, 137, 0, 47, 47, 47, 47, 47, + 47, 47, 47, 0, 0, 47, 47, 0, 0, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, + 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 0, 47, 47, 47, 47, 47, + 47, 47, 0, 47, 47, 0, 47, 47, 47, 47, 47, 0, 0, 143, 47, 144, 133, 137, + 133, 133, 133, 133, 0, 0, 137, 145, 0, 0, 145, 145, 140, 0, 0, 0, 0, 0, + 0, 0, 0, 148, 144, 0, 0, 0, 0, 141, 141, 0, 47, 47, 47, 133, 133, 0, 0, + 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 79, 47, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 133, 47, 0, 47, 47, 47, 47, 47, 47, 0, + 0, 0, 47, 47, 47, 0, 47, 47, 138, 47, 0, 0, 0, 47, 47, 0, 47, 0, 47, 47, + 0, 0, 0, 47, 47, 0, 0, 0, 47, 47, 47, 0, 0, 0, 47, 47, 47, 47, 47, 47, + 47, 47, 47, 47, 47, 47, 0, 0, 0, 0, 144, 137, 133, 137, 137, 0, 0, 0, + 137, 137, 137, 0, 145, 145, 145, 140, 0, 0, 47, 0, 0, 0, 0, 0, 0, 144, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 142, 142, 142, 142, 142, 142, 142, + 142, 142, 142, 147, 147, 147, 27, 27, 27, 27, 27, 27, 146, 27, 0, 0, 0, + 0, 0, 0, 137, 137, 137, 0, 47, 47, 47, 47, 47, 47, 47, 47, 0, 47, 47, 47, + 0, 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, 47, 47, 47, 47, 47, 47, 47, 47, 47, 0, 47, + 47, 47, 47, 47, 0, 0, 0, 47, 133, 133, 133, 137, 137, 137, 137, 0, 133, + 133, 149, 0, 133, 133, 133, 140, 0, 0, 0, 0, 0, 0, 0, 150, 151, 0, 47, + 47, 0, 0, 0, 0, 0, 0, 47, 47, 133, 133, 0, 0, 142, 142, 142, 142, 142, + 142, 142, 142, 142, 142, 0, 0, 0, 0, 0, 0, 0, 0, 152, 152, 152, 152, 152, + 152, 152, 79, 0, 0, 137, 137, 0, 47, 47, 47, 47, 47, 47, 47, 47, 0, 47, + 47, 47, 0, 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, 47, 47, 47, 47, 47, 47, 47, 47, + 47, 0, 47, 47, 47, 47, 47, 0, 0, 143, 47, 137, 153, 145, 137, 144, 137, + 137, 0, 153, 145, 145, 0, 145, 145, 133, 140, 0, 0, 0, 0, 0, 0, 0, 144, + 144, 0, 0, 0, 0, 0, 0, 0, 47, 0, 47, 47, 133, 133, 0, 0, 142, 142, 142, + 142, 142, 142, 142, 142, 142, 142, 0, 27, 27, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 137, 137, 0, 47, 47, 47, 47, 47, 47, 47, 47, 0, 47, 47, + 47, 0, 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, 47, 47, 47, 47, 47, 47, 47, 47, 47, + 47, 47, 47, 47, 47, 47, 0, 0, 0, 47, 144, 137, 137, 133, 133, 133, 133, + 0, 137, 137, 137, 0, 145, 145, 145, 140, 0, 0, 0, 0, 0, 0, 0, 0, 0, 144, + 0, 0, 0, 0, 0, 0, 0, 0, 47, 47, 133, 133, 0, 0, 142, 142, 142, 142, 142, + 142, 142, 142, 142, 142, 147, 147, 147, 147, 147, 147, 0, 0, 0, 79, 47, + 47, 47, 47, 47, 47, 0, 0, 137, 137, 0, 47, 47, 47, 47, 47, 47, 47, 47, + 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 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, + 0, 47, 47, 47, 47, 47, 47, 47, 47, 47, 0, 47, 0, 0, 47, 47, 47, 47, 47, + 47, 47, 0, 0, 0, 154, 0, 0, 0, 0, 144, 137, 137, 133, 133, 133, 0, 133, + 0, 137, 137, 145, 137, 145, 145, 145, 144, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 137, 137, 82, 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, 47, 47, 47, 47, 47, 47, 47, 47, 133, 47, 155, 133, 133, + 133, 133, 156, 156, 140, 0, 0, 0, 0, 146, 47, 47, 47, 47, 47, 47, 52, + 133, 157, 157, 157, 157, 133, 133, 133, 82, 142, 142, 142, 142, 142, 142, + 142, 142, 142, 142, 82, 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, 47, 47, + 0, 47, 0, 0, 47, 47, 0, 47, 0, 0, 47, 0, 0, 0, 0, 0, 0, 47, 47, 47, 47, + 0, 47, 47, 47, 47, 47, 47, 47, 0, 47, 47, 47, 0, 47, 0, 47, 0, 0, 47, 47, + 0, 47, 47, 47, 47, 133, 47, 155, 133, 133, 133, 133, 158, 158, 0, 133, + 133, 47, 0, 0, 47, 47, 47, 47, 47, 0, 52, 0, 159, 159, 159, 159, 133, + 133, 0, 0, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 0, 0, 155, + 155, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 79, 79, 79, 82, 82, 82, 82, 82, 82, + 82, 82, 160, 82, 82, 82, 82, 82, 82, 79, 79, 79, 79, 79, 84, 84, 79, 79, + 79, 79, 79, 79, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 147, + 147, 147, 147, 147, 147, 147, 147, 147, 147, 79, 84, 79, 84, 79, 161, + 162, 163, 162, 163, 137, 137, 47, 47, 47, 141, 47, 47, 47, 47, 0, 47, 47, + 47, 47, 141, 47, 47, 47, 47, 141, 47, 47, 47, 47, 141, 47, 47, 47, 47, + 141, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 141, 47, 47, 47, 0, + 0, 0, 0, 164, 165, 166, 167, 166, 166, 168, 166, 168, 165, 165, 165, 165, + 133, 137, 165, 166, 80, 80, 140, 82, 80, 80, 47, 47, 47, 47, 0, 0, 0, 0, + 133, 133, 133, 166, 133, 133, 133, 133, 0, 133, 133, 133, 133, 166, 133, + 133, 133, 133, 166, 133, 133, 133, 133, 166, 133, 133, 133, 133, 166, + 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 166, 133, + 133, 133, 0, 79, 79, 79, 79, 79, 79, 79, 79, 84, 79, 79, 79, 79, 79, 79, + 0, 79, 79, 82, 82, 82, 82, 82, 79, 79, 79, 79, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 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, 138, 47, 47, 47, 47, 137, 137, 133, 148, 133, + 133, 137, 133, 133, 133, 133, 133, 143, 137, 140, 140, 137, 137, 133, + 133, 47, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 82, 82, 82, + 82, 82, 82, 47, 47, 47, 47, 47, 47, 137, 137, 133, 133, 47, 47, 47, 47, + 133, 133, 133, 47, 137, 137, 137, 47, 47, 137, 137, 137, 137, 137, 137, + 137, 47, 47, 47, 133, 133, 133, 133, 47, 47, 47, 47, 47, 47, 47, 47, 47, + 47, 47, 47, 47, 133, 137, 137, 133, 133, 137, 137, 137, 137, 137, 137, + 84, 47, 137, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 137, 137, + 137, 133, 79, 79, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 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, 46, 46, 46, 46, 46, 46, 46, 46, + 44, 44, 44, 44, 44, 44, 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, 82, 50, 0, 0, 0, 169, 169, 169, 169, 169, 169, 169, 169, 169, + 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, + 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, + 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, + 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, + 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, + 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, + 169, 169, 169, 47, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, + 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 47, 47, 47, 47, 47, 47, + 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, + 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, + 47, 47, 47, 169, 169, 169, 169, 169, 170, 170, 170, 170, 170, 170, 170, + 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, + 170, 170, 170, 170, 170, 170, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, + 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, + 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, + 47, 47, 47, 47, 47, 47, 47, 47, 169, 169, 169, 169, 169, 169, 47, 47, 47, + 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, + 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, + 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 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, + 47, 47, 47, 0, 0, 47, 47, 47, 47, 47, 47, 47, 0, 47, 0, 47, 47, 47, 47, + 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, 0, 47, 47, 47, 47, 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, 0, 47, 47, 47, 47, 0, 0, 47, 47, 47, + 47, 47, 47, 47, 0, 47, 0, 47, 47, 47, 47, 0, 0, 47, 47, 47, 47, 47, 47, + 47, 47, 47, 47, 47, 47, 47, 47, 47, 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, 0, 47, 47, 47, 47, 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, 0, 0, 0, 0, 80, + 79, 82, 82, 82, 82, 82, 82, 82, 82, 147, 147, 147, 147, 147, 147, 147, + 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 0, 0, 0, + 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 27, 27, + 27, 27, 27, 27, 27, 27, 27, 27, 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, 47, 47, 47, 47, + 47, 47, 47, 47, 47, 47, 47, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 83, 47, 47, + 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, + 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, + 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, + 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, + 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, + 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, + 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, + 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, + 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, + 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, + 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, + 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, + 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, + 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, + 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, + 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, + 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, + 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, + 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, + 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, + 47, 47, 82, 82, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, + 47, 47, 47, 171, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, + 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 162, 163, 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, 47, 82, 82, 82, 172, 172, 172, 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, 0, 47, 47, 47, + 47, 133, 133, 140, 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, 133, 133, 140, 82, + 82, 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, 133, 133, 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, 0, 47, 47, 47, + 0, 133, 133, 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, 47, 47, + 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 173, 173, 137, 133, 133, 133, + 133, 133, 133, 133, 137, 137, 137, 137, 137, 137, 137, 137, 133, 137, + 137, 133, 133, 133, 133, 133, 133, 133, 133, 133, 140, 133, 82, 82, 82, + 52, 82, 82, 82, 146, 47, 80, 0, 0, 142, 142, 142, 142, 142, 142, 142, + 142, 142, 142, 0, 0, 0, 0, 0, 0, 152, 152, 152, 152, 152, 152, 152, 152, + 152, 152, 0, 0, 0, 0, 0, 0, 136, 136, 136, 136, 136, 136, 83, 136, 136, + 136, 136, 133, 133, 133, 171, 0, 142, 142, 142, 142, 142, 142, 142, 142, + 142, 142, 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, 52, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, + 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 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, 47, 47, 47, 47, 47, 47, 47, + 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, + 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 86, 47, + 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, 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, 0, 0, 0, 133, 133, 133, 137, 137, 137, 137, 133, 133, 137, 137, + 137, 0, 0, 0, 0, 137, 137, 133, 137, 137, 137, 137, 137, 137, 85, 80, 84, + 0, 0, 0, 0, 27, 0, 0, 0, 136, 136, 142, 142, 142, 142, 142, 142, 142, + 142, 142, 142, 47, 47, 47, 47, 47, 47, 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, 47, + 47, 47, 47, 47, 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, 47, 47, + 47, 47, 0, 0, 0, 0, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, + 137, 137, 137, 137, 137, 137, 137, 47, 47, 47, 47, 47, 47, 47, 137, 137, + 0, 0, 0, 0, 0, 0, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, + 0, 0, 0, 136, 136, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, + 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, + 27, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, + 47, 47, 47, 47, 47, 47, 80, 84, 137, 137, 137, 0, 0, 82, 82, 47, 47, 47, + 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, + 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, + 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 137, 133, 137, + 133, 133, 133, 133, 133, 133, 133, 0, 140, 137, 133, 137, 137, 133, 133, + 133, 133, 133, 133, 133, 133, 137, 137, 137, 137, 137, 137, 133, 133, 80, + 80, 80, 80, 80, 80, 80, 80, 0, 0, 84, 142, 142, 142, 142, 142, 142, 142, + 142, 142, 142, 0, 0, 0, 0, 0, 0, 142, 142, 142, 142, 142, 142, 142, 142, + 142, 142, 0, 0, 0, 0, 0, 0, 82, 82, 82, 82, 82, 82, 82, 52, 82, 82, 82, + 82, 82, 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, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 133, 133, 133, 133, 137, 47, + 138, 47, 138, 47, 138, 47, 138, 47, 138, 47, 47, 47, 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, 143, 144, 133, 133, 133, 133, + 133, 145, 133, 145, 137, 137, 145, 145, 133, 145, 174, 47, 47, 47, 47, + 47, 47, 47, 0, 0, 0, 0, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, + 82, 82, 82, 82, 82, 82, 82, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 80, + 84, 80, 80, 80, 80, 80, 80, 80, 79, 79, 79, 79, 79, 79, 79, 79, 79, 0, 0, + 0, 133, 133, 137, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, + 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 137, 133, + 133, 133, 133, 137, 137, 133, 133, 174, 0, 0, 0, 47, 47, 142, 142, 142, + 142, 142, 142, 142, 142, 142, 142, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 137, 137, 137, 137, 137, 137, 137, 137, 133, + 133, 133, 133, 133, 133, 133, 133, 137, 137, 133, 143, 0, 0, 0, 82, 82, + 82, 82, 82, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 0, 0, 0, + 47, 47, 47, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 47, 47, 47, + 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, + 47, 47, 47, 47, 47, 47, 47, 47, 47, 52, 52, 52, 52, 52, 52, 82, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 80, 80, 80, 82, 175, 84, 84, 84, 84, 84, 80, 80, 84, + 84, 84, 84, 80, 137, 175, 175, 175, 175, 175, 175, 175, 47, 47, 47, 47, + 84, 47, 47, 47, 47, 137, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, - 46, 46, 46, 0, 44, 46, 44, 44, 44, 46, 46, 44, 46, 44, 46, 44, 46, 44, - 44, 44, 0, 46, 44, 46, 46, 44, 46, 46, 46, 46, 46, 46, 35, 50, 0, 0, 44, - 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, - 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, - 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, - 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, - 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, - 46, 44, 46, 44, 46, 44, 46, 44, 46, 46, 27, 27, 27, 27, 27, 27, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 136, 136, 136, 136, 152, 136, 136, 46, + 46, 46, 46, 46, 46, 46, 50, 50, 50, 52, 50, 50, 50, 50, 50, 50, 50, 50, + 50, 50, 50, 52, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, + 50, 50, 50, 50, 52, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, + 50, 50, 50, 50, 50, 50, 35, 35, 35, 35, 35, 35, 35, 35, 35, 46, 46, 46, + 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 50, 46, 46, 46, 46, 46, 46, 46, + 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, + 46, 46, 46, 46, 46, 46, 46, 46, 46, 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, 80, 80, 84, 80, 80, 80, 80, 80, + 80, 80, 84, 80, 80, 176, 177, 84, 178, 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, 84, 80, 84, 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, 179, 46, 46, 44, 46, 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, 46, 44, 46, 44, + 46, 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, 180, 43, 180, 43, 180, 43, 180, 43, 180, 43, 180, 43, 180, 0, 0, + 43, 43, 43, 43, 43, 43, 43, 43, 181, 181, 181, 181, 181, 181, 181, 181, + 43, 43, 43, 43, 43, 43, 43, 43, 181, 181, 181, 181, 181, 181, 181, 181, + 43, 43, 43, 43, 43, 43, 43, 43, 181, 181, 181, 181, 181, 181, 181, 181, + 43, 43, 43, 43, 43, 0, 43, 43, 38, 38, 38, 182, 181, 57, 180, 57, 57, 75, + 43, 43, 43, 0, 43, 43, 38, 182, 38, 182, 181, 75, 75, 75, 43, 43, 43, + 180, 0, 0, 43, 43, 38, 38, 38, 182, 0, 75, 75, 75, 43, 43, 43, 180, 43, + 43, 43, 43, 38, 38, 38, 182, 38, 75, 183, 183, 0, 0, 43, 43, 43, 0, 43, + 43, 38, 182, 38, 182, 181, 183, 57, 0, 184, 184, 185, 185, 185, 185, 185, + 185, 185, 185, 185, 131, 131, 131, 173, 186, 187, 188, 83, 187, 187, 187, + 22, 189, 190, 191, 192, 193, 190, 191, 192, 193, 22, 22, 22, 136, 194, + 194, 194, 22, 195, 196, 197, 198, 199, 200, 201, 21, 202, 108, 202, 203, + 204, 22, 189, 189, 136, 29, 36, 22, 189, 136, 194, 205, 205, 136, 136, + 136, 206, 162, 163, 189, 189, 189, 136, 136, 136, 136, 136, 136, 136, + 136, 77, 136, 205, 136, 136, 189, 136, 136, 136, 136, 136, 136, 136, 185, + 131, 131, 131, 131, 131, 0, 0, 0, 0, 0, 131, 131, 131, 131, 131, 131, + 207, 50, 0, 0, 34, 207, 207, 207, 207, 207, 208, 208, 209, 210, 211, 212, + 207, 34, 34, 34, 34, 207, 207, 207, 207, 207, 208, 208, 209, 210, 211, 0, + 50, 50, 50, 50, 50, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 146, 146, 146, 146, + 146, 146, 146, 146, 213, 214, 146, 146, 23, 146, 146, 146, 146, 146, 146, + 146, 146, 146, 146, 146, 146, 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, 175, 175, 80, 80, 80, 80, 175, 175, + 175, 80, 80, 81, 81, 81, 81, 80, 81, 81, 81, 175, 175, 80, 84, 80, 175, + 175, 84, 84, 84, 84, 80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 215, 215, 48, 216, 27, 216, 215, 48, 27, 216, 35, 48, 48, 48, 35, 35, 48, + 48, 48, 28, 27, 48, 216, 27, 27, 48, 48, 48, 48, 48, 27, 27, 215, 216, + 216, 27, 48, 27, 217, 27, 48, 27, 182, 217, 48, 48, 218, 35, 48, 48, 44, + 48, 35, 155, 155, 155, 155, 35, 27, 215, 35, 35, 48, 48, 219, 77, 77, 77, + 77, 48, 35, 35, 35, 35, 27, 77, 27, 27, 46, 79, 220, 220, 220, 37, 37, + 220, 220, 220, 220, 220, 220, 37, 37, 37, 37, 220, 221, 221, 221, 221, + 221, 221, 221, 221, 221, 221, 221, 221, 222, 222, 222, 222, 221, 221, + 221, 221, 221, 221, 221, 221, 221, 221, 222, 222, 222, 222, 222, 222, + 172, 172, 172, 44, 46, 172, 172, 172, 172, 37, 0, 0, 0, 0, 0, 0, 40, 40, + 40, 40, 40, 25, 25, 25, 25, 25, 223, 223, 27, 27, 27, 27, 77, 27, 27, 77, + 27, 27, 77, 27, 27, 27, 27, 27, 27, 27, 223, 27, 27, 27, 27, 27, 27, 27, + 27, 27, 25, 25, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, + 27, 27, 27, 27, 27, 224, 223, 223, 27, 27, 40, 27, 40, 27, 27, 27, 27, + 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 25, 27, 27, 27, + 27, 27, 27, 27, 27, 27, 27, 27, 27, 77, 77, 77, 77, 77, 77, 77, 77, 77, + 77, 77, 77, 40, 225, 226, 226, 227, 77, 77, 40, 226, 227, 225, 226, 227, + 225, 77, 40, 77, 226, 228, 229, 77, 226, 225, 77, 77, 77, 226, 225, 225, + 226, 40, 226, 226, 225, 225, 40, 227, 40, 227, 40, 40, 40, 40, 226, 230, + 219, 226, 219, 219, 225, 225, 225, 40, 40, 40, 40, 77, 225, 77, 225, 226, + 226, 225, 225, 225, 227, 225, 225, 227, 225, 225, 227, 226, 227, 225, + 225, 226, 77, 77, 77, 77, 77, 226, 225, 225, 225, 77, 77, 77, 77, 77, 77, + 77, 77, 77, 225, 231, 40, 227, 77, 226, 226, 226, 226, 225, 225, 226, + 226, 77, 223, 231, 231, 227, 227, 225, 225, 227, 227, 225, 225, 227, 227, + 225, 225, 225, 225, 225, 225, 227, 227, 226, 226, 227, 227, 226, 226, + 227, 227, 225, 225, 225, 77, 77, 225, 225, 225, 225, 77, 77, 40, 77, 77, + 225, 40, 77, 77, 77, 77, 77, 77, 77, 77, 225, 225, 77, 40, 225, 225, 225, + 225, 225, 225, 227, 227, 227, 227, 225, 225, 225, 225, 225, 225, 225, + 225, 225, 77, 77, 77, 77, 77, 225, 226, 77, 77, 77, 77, 77, 77, 77, 77, + 77, 225, 225, 225, 225, 225, 77, 77, 225, 225, 77, 77, 77, 77, 225, 225, + 225, 225, 225, 225, 225, 225, 225, 225, 227, 227, 227, 227, 225, 225, + 225, 225, 225, 225, 227, 227, 227, 227, 77, 77, 225, 225, 225, 225, 225, + 225, 225, 225, 225, 225, 225, 225, 225, 225, 225, 225, 27, 27, 27, 27, + 27, 27, 27, 27, 225, 225, 225, 225, 27, 27, 27, 27, 27, 27, 25, 27, 27, + 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 225, 225, 27, 27, 27, 27, 27, + 27, 27, 232, 233, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 79, 79, 79, + 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, + 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, + 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, + 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 27, 77, 27, 27, 27, 27, + 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, + 27, 27, 79, 27, 27, 27, 27, 27, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, + 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 27, 27, 27, + 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, + 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, + 27, 77, 77, 77, 77, 77, 77, 27, 27, 27, 27, 27, 27, 27, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 27, 27, 27, 27, 27, + 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, + 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 27, 27, + 27, 27, 27, 27, 27, 27, 27, 27, 27, 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, 34, 34, 34, 34, 34, 34, 34, + 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 234, 234, 234, 234, + 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, + 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, + 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, + 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, + 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, + 234, 234, 234, 234, 220, 235, 235, 235, 235, 235, 235, 235, 235, 235, + 235, 235, 235, 235, 235, 235, 235, 235, 235, 235, 235, 235, 25, 25, 25, + 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, + 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, + 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, + 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, + 25, 27, 27, 27, 27, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, + 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, + 25, 25, 25, 25, 25, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 25, + 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 27, 27, 25, + 25, 25, 25, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 25, 25, 27, 25, 25, + 25, 25, 25, 25, 25, 27, 27, 27, 27, 27, 27, 27, 27, 25, 25, 27, 27, 25, + 40, 27, 27, 27, 27, 25, 25, 27, 27, 25, 40, 27, 27, 27, 27, 25, 25, 25, + 27, 27, 25, 27, 27, 25, 25, 25, 25, 27, 27, 27, 27, 27, 27, 27, 27, 27, + 27, 27, 27, 27, 27, 27, 27, 25, 25, 25, 25, 27, 27, 27, 27, 27, 27, 27, + 27, 27, 25, 27, 27, 27, 27, 27, 27, 27, 27, 77, 77, 77, 77, 77, 77, 77, + 77, 27, 27, 27, 27, 27, 25, 25, 27, 27, 25, 27, 27, 27, 27, 25, 25, 27, + 27, 27, 27, 25, 25, 27, 27, 27, 27, 27, 27, 25, 27, 25, 27, 27, 27, 27, + 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, + 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 25, 27, 25, 27, 27, 27, 27, + 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, + 27, 27, 27, 27, 27, 27, 27, 25, 25, 27, 25, 25, 25, 27, 25, 25, 25, 25, + 27, 25, 25, 27, 40, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, + 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, + 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 25, 25, 27, + 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 79, 27, 27, 27, 27, 27, 27, + 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 25, 25, 27, 27, 27, 27, 25, + 25, 25, 25, 25, 25, 25, 25, 25, 25, 0, 25, 25, 25, 25, 25, 25, 25, 25, + 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 0, 25, 0, 0, 0, 0, 25, 25, + 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, + 25, 25, 25, 25, 0, 27, 27, 27, 27, 0, 27, 27, 27, 27, 0, 0, 27, 27, 27, + 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, + 27, 27, 27, 27, 27, 27, 27, 0, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, + 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 25, 27, 27, 27, 27, 27, 27, 27, + 27, 27, 27, 27, 27, 27, 27, 0, 27, 0, 27, 27, 27, 27, 0, 0, 0, 27, 25, + 27, 27, 27, 27, 27, 27, 27, 0, 0, 27, 27, 27, 27, 27, 27, 27, 162, 163, + 162, 163, 162, 163, 162, 163, 162, 163, 162, 163, 162, 163, 235, 235, + 235, 235, 235, 235, 235, 235, 235, 235, 152, 152, 152, 152, 152, 152, + 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 27, + 0, 0, 0, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, + 27, 27, 27, 27, 27, 27, 27, 27, 0, 27, 27, 27, 27, 27, 27, 27, 27, 27, + 27, 27, 27, 27, 27, 0, 225, 77, 77, 225, 225, 162, 163, 77, 225, 225, 77, + 0, 225, 0, 0, 0, 77, 77, 77, 225, 225, 225, 225, 77, 77, 77, 77, 77, 225, + 225, 225, 77, 77, 77, 225, 225, 225, 225, 9, 10, 9, 10, 9, 10, 9, 10, + 162, 163, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, + 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, + 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, + 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, + 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, + 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, + 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, + 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, + 79, 79, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, + 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, + 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, + 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, + 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, + 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, + 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, + 77, 77, 77, 77, 77, 77, 77, 162, 163, 9, 10, 162, 163, 162, 163, 162, + 163, 162, 163, 162, 163, 162, 163, 162, 163, 162, 163, 162, 163, 77, 77, + 225, 225, 225, 225, 225, 225, 225, 225, 225, 225, 225, 225, 225, 225, + 225, 225, 225, 225, 225, 225, 225, 77, 77, 77, 77, 77, 77, 77, 77, 225, + 77, 77, 77, 77, 77, 77, 77, 225, 225, 225, 225, 225, 225, 77, 77, 77, + 225, 77, 77, 77, 77, 225, 225, 225, 225, 225, 77, 225, 225, 77, 77, 162, + 163, 162, 163, 225, 77, 77, 77, 77, 225, 77, 225, 225, 225, 77, 77, 225, + 225, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 225, 225, 225, 225, 225, + 225, 77, 77, 162, 163, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, + 225, 225, 219, 225, 225, 225, 225, 225, 225, 225, 225, 225, 225, 225, + 225, 225, 225, 225, 225, 77, 225, 225, 225, 225, 77, 77, 225, 77, 225, + 77, 77, 225, 77, 225, 225, 225, 225, 77, 77, 77, 77, 77, 225, 225, 77, + 77, 77, 77, 77, 77, 225, 225, 225, 77, 77, 77, 77, 77, 77, 77, 77, 77, + 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 225, 225, 77, + 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 225, 225, 77, 77, 77, 77, 225, + 225, 225, 225, 77, 225, 225, 77, 77, 225, 219, 209, 209, 77, 77, 225, + 225, 225, 225, 225, 225, 225, 225, 225, 225, 225, 225, 225, 225, 225, + 225, 225, 225, 225, 225, 225, 225, 225, 225, 225, 225, 225, 225, 225, + 225, 225, 225, 225, 225, 225, 225, 225, 225, 225, 225, 225, 225, 225, 77, + 77, 225, 225, 225, 225, 225, 225, 225, 225, 77, 225, 225, 225, 225, 225, + 225, 225, 225, 225, 225, 225, 225, 225, 225, 225, 225, 225, 225, 225, + 225, 225, 225, 225, 225, 225, 225, 225, 225, 225, 225, 225, 225, 225, + 225, 225, 225, 225, 225, 225, 225, 77, 77, 77, 77, 77, 236, 77, 225, 77, + 77, 77, 225, 225, 225, 225, 225, 77, 77, 77, 77, 77, 225, 225, 225, 77, + 77, 77, 77, 225, 77, 77, 77, 225, 225, 225, 225, 225, 77, 225, 77, 77, + 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, + 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, + 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 77, 77, 77, 77, 77, 77, + 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 27, 27, 77, + 77, 77, 77, 77, 77, 0, 0, 0, 27, 27, 27, 27, 27, 25, 25, 25, 25, 25, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, + 44, 44, 44, 0, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, + 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 0, 44, 46, + 44, 44, 44, 46, 46, 44, 46, 44, 46, 44, 46, 44, 44, 44, 44, 46, 44, 46, + 46, 44, 46, 46, 46, 46, 46, 46, 35, 50, 44, 44, 44, 46, 44, 46, 44, 46, + 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, + 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, + 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, + 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, + 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, + 44, 46, 44, 46, 46, 27, 27, 27, 27, 27, 27, 44, 46, 44, 46, 80, 80, 80, + 0, 0, 0, 0, 0, 0, 0, 136, 136, 136, 136, 152, 136, 136, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, - 46, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, + 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 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, 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, 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, 47, 47, 47, 47, 47, 47, 47, 0, 47, 47, 47, 47, 47, 47, 47, + 47, 47, 47, 47, 47, 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, 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, 47, 47, 47, 47, 47, 47, 47, 0, 47, 47, 47, 47, 47, 47, 47, 0, 47, 47, 47, 47, 47, 47, 47, 0, 47, 47, 47, 47, 47, 47, 47, 0, 47, 47, 47, 47, 47, - 47, 47, 0, 47, 47, 47, 47, 47, 47, 47, 0, 80, 80, 80, 80, 80, 80, 80, 80, + 47, 47, 0, 47, 47, 47, 47, 47, 47, 47, 0, 47, 47, 47, 47, 47, 47, 47, 0, + 47, 47, 47, 47, 47, 47, 47, 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, 136, 136, 29, 36, 29, 36, 136, 136, 136, 29, 36, - 136, 29, 36, 136, 136, 136, 136, 136, 136, 136, 136, 136, 83, 136, 136, - 83, 136, 29, 36, 136, 136, 29, 36, 162, 163, 162, 163, 162, 163, 162, - 163, 136, 136, 136, 136, 136, 51, 136, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 236, 236, - 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, - 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 0, 236, 236, 236, 236, - 237, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, - 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, - 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, - 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, - 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, - 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, - 237, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 237, 237, 237, 237, 237, 237, - 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, - 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, - 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, - 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, - 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, - 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, + 80, 80, 80, 80, 136, 136, 29, 36, 29, 36, 136, 136, 136, 29, 36, 136, 29, + 36, 136, 136, 136, 136, 136, 136, 136, 136, 136, 83, 136, 136, 83, 136, + 29, 36, 136, 136, 29, 36, 162, 163, 162, 163, 162, 163, 162, 163, 136, + 136, 136, 136, 136, 51, 136, 136, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, + 237, 237, 237, 237, 237, 237, 237, 237, 0, 237, 237, 237, 237, 238, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, + 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 238, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 238, 238, 238, 238, 238, 238, 238, 238, 238, + 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, + 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, + 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, + 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, + 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, + 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, + 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, + 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, + 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, + 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, + 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, + 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, + 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, + 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, + 238, 238, 238, 238, 238, 238, 238, 238, 238, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 237, 237, 237, 237, + 237, 237, 237, 237, 237, 237, 237, 237, 0, 0, 0, 0, 239, 240, 240, 240, + 237, 241, 169, 242, 243, 244, 243, 244, 243, 244, 243, 244, 243, 244, + 237, 237, 243, 244, 243, 244, 243, 244, 243, 244, 245, 246, 247, 247, + 237, 242, 242, 242, 242, 242, 242, 242, 242, 242, 248, 249, 250, 251, + 252, 252, 245, 241, 241, 241, 241, 241, 238, 237, 253, 253, 253, 241, + 169, 240, 237, 27, 0, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, + 169, 254, 169, 254, 169, 254, 169, 254, 169, 254, 169, 254, 169, 254, + 169, 254, 169, 254, 169, 254, 169, 254, 169, 254, 169, 169, 254, 169, + 254, 169, 254, 169, 169, 169, 169, 169, 169, 254, 254, 169, 254, 254, + 169, 254, 254, 169, 254, 254, 169, 254, 254, 169, 169, 169, 169, 169, + 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, + 169, 169, 169, 254, 169, 169, 0, 0, 255, 255, 256, 256, 241, 257, 258, + 245, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 254, 169, + 254, 169, 254, 169, 254, 169, 254, 169, 254, 169, 254, 169, 254, 169, + 254, 169, 254, 169, 254, 169, 254, 169, 169, 254, 169, 254, 169, 254, + 169, 169, 169, 169, 169, 169, 254, 254, 169, 254, 254, 169, 254, 254, + 169, 254, 254, 169, 254, 254, 169, 169, 169, 169, 169, 169, 169, 169, + 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, + 254, 169, 169, 254, 254, 254, 254, 240, 241, 241, 257, 258, 0, 0, 0, 0, + 0, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, + 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, + 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 0, 0, 0, + 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, + 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, + 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, + 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, + 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, + 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, + 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 0, 259, 259, 260, 260, + 260, 260, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 169, 169, + 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, + 169, 169, 169, 169, 169, 169, 169, 169, 0, 0, 0, 0, 0, 0, 0, 0, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, - 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 236, - 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 0, 0, 0, 0, 238, - 239, 239, 239, 236, 240, 169, 241, 242, 243, 242, 243, 242, 243, 242, - 243, 242, 243, 236, 236, 242, 243, 242, 243, 242, 243, 242, 243, 244, - 245, 246, 246, 236, 241, 241, 241, 241, 241, 241, 241, 241, 241, 247, - 248, 249, 250, 251, 251, 244, 240, 240, 240, 240, 240, 237, 236, 252, - 252, 252, 240, 169, 239, 236, 27, 0, 169, 169, 169, 169, 169, 169, 169, - 169, 169, 169, 169, 253, 169, 253, 169, 253, 169, 253, 169, 253, 169, - 253, 169, 253, 169, 253, 169, 253, 169, 253, 169, 253, 169, 253, 169, - 169, 253, 169, 253, 169, 253, 169, 169, 169, 169, 169, 169, 253, 253, - 169, 253, 253, 169, 253, 253, 169, 253, 253, 169, 253, 253, 169, 169, - 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, - 169, 169, 169, 169, 169, 169, 253, 169, 169, 0, 0, 254, 254, 255, 255, - 240, 256, 257, 244, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, - 169, 253, 169, 253, 169, 253, 169, 253, 169, 253, 169, 253, 169, 253, - 169, 253, 169, 253, 169, 253, 169, 253, 169, 253, 169, 169, 253, 169, - 253, 169, 253, 169, 169, 169, 169, 169, 169, 253, 253, 169, 253, 253, - 169, 253, 253, 169, 253, 253, 169, 253, 253, 169, 169, 169, 169, 169, - 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, - 169, 169, 169, 253, 169, 169, 253, 253, 253, 253, 239, 240, 240, 256, - 257, 0, 0, 0, 0, 0, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, - 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, - 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, - 169, 169, 169, 0, 0, 0, 257, 257, 257, 257, 257, 257, 257, 257, 257, 257, - 257, 257, 257, 257, 257, 257, 257, 257, 257, 257, 257, 257, 257, 257, - 257, 257, 257, 257, 257, 257, 257, 257, 257, 257, 257, 257, 257, 257, - 257, 257, 257, 257, 257, 257, 257, 257, 257, 257, 257, 257, 257, 257, - 257, 257, 257, 257, 257, 257, 257, 257, 257, 257, 257, 257, 257, 257, - 257, 257, 257, 257, 257, 257, 257, 257, 257, 257, 257, 257, 257, 257, - 257, 257, 257, 257, 257, 257, 257, 257, 257, 257, 257, 257, 257, 257, 0, - 258, 258, 259, 259, 259, 259, 260, 260, 260, 260, 260, 260, 260, 260, - 260, 260, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, - 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 0, 0, 0, 0, - 0, 0, 0, 0, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, - 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, - 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, - 169, 169, 169, 169, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, - 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, - 260, 260, 260, 260, 260, 237, 237, 0, 259, 259, 259, 259, 259, 259, 259, - 259, 259, 259, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, - 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, - 260, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 237, 261, 261, 261, 261, 261, - 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 260, 260, 260, 260, - 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, - 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 237, 237, 237, 258, - 259, 259, 259, 259, 259, 259, 259, 259, 259, 259, 260, 260, 260, 260, - 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, - 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, - 260, 260, 260, 260, 260, 260, 260, 261, 261, 261, 261, 261, 261, 261, - 261, 261, 261, 261, 261, 261, 261, 261, 260, 260, 260, 260, 260, 260, - 260, 260, 260, 260, 260, 260, 237, 237, 237, 237, 260, 260, 260, 260, - 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, - 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, - 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, - 260, 0, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, - 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, - 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, - 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, - 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, - 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, - 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, - 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, - 260, 260, 260, 260, 260, 260, 260, 260, 237, 237, 237, 237, 260, 260, - 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, - 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, - 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, - 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, - 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, - 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, - 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 237, - 237, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, - 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, - 260, 260, 260, 260, 237, 169, 169, 169, 169, 169, 169, 169, 169, 169, + 237, 237, 237, 237, 237, 237, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, + 169, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, + 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, + 261, 261, 238, 238, 0, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, + 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, + 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, + 261, 261, 262, 262, 262, 262, 262, 262, 262, 262, 238, 263, 263, 263, + 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, 261, 261, + 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, + 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 238, 238, + 238, 259, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 261, 261, + 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, + 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, + 261, 261, 261, 261, 261, 261, 261, 261, 261, 263, 263, 263, 263, 263, + 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, 261, 261, 261, 261, + 261, 261, 261, 261, 261, 261, 261, 261, 238, 238, 238, 238, 261, 261, + 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, + 261, 261, 261, 261, 261, 261, 261, 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, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, + 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, + 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, + 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, + 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, + 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, + 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, + 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, + 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 238, 238, 238, 238, + 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, + 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, + 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, + 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, + 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, + 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, + 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, + 261, 238, 238, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, + 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, + 261, 261, 261, 261, 261, 261, 238, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, @@ -1892,20 +1932,21 @@ 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, - 169, 169, 169, 169, 169, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 27, 27, 27, 27, + 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, + 169, 169, 169, 169, 169, 169, 169, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, - 27, 27, 27, 27, 27, 27, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, + 27, 27, 27, 27, 27, 27, 27, 27, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, - 169, 169, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, - 169, 169, 240, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, + 169, 169, 169, 169, 169, 169, 169, 241, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, @@ -1913,139 +1954,165 @@ 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, - 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 0, 0, 0, 236, 236, 236, - 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, - 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, - 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, - 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 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, 52, 136, 136, 136, 47, - 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 142, 142, - 142, 142, 142, 142, 142, 142, 142, 142, 47, 47, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 44, 46, 44, 46, 44, 46, 44, 46, 44, + 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, + 169, 0, 0, 0, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, + 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, + 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, + 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, + 237, 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, 52, 52, 52, 52, 52, 52, + 82, 82, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 52, 136, 136, + 136, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 142, + 142, 142, 142, 142, 142, 142, 142, 142, 142, 47, 47, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 44, 46, 44, 46, 44, 46, 44, 46, + 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, + 44, 46, 44, 46, 44, 46, 0, 0, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, + 46, 47, 80, 81, 81, 81, 136, 0, 0, 0, 0, 0, 0, 0, 0, 80, 80, 136, 51, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, - 46, 44, 46, 44, 46, 0, 0, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, - 47, 80, 81, 81, 81, 136, 0, 0, 0, 0, 0, 0, 0, 0, 80, 80, 136, 51, 44, 46, + 46, 44, 46, 44, 46, 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, 172, 172, 172, 172, 172, 172, 172, + 172, 172, 172, 80, 80, 82, 82, 82, 82, 82, 82, 0, 0, 0, 0, 0, 0, 0, 0, + 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, + 53, 53, 53, 53, 53, 51, 51, 51, 51, 51, 51, 51, 51, 51, 53, 53, 44, 46, + 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 46, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, - 44, 46, 44, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 53, 53, 53, 53, 53, 53, 53, 53, - 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 51, 51, 51, - 51, 51, 51, 51, 51, 51, 53, 53, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, - 44, 46, 44, 46, 46, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, - 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 50, 46, 46, 46, - 46, 46, 46, 46, 46, 44, 46, 44, 46, 44, 44, 46, 44, 46, 44, 46, 44, 46, - 44, 46, 51, 262, 262, 44, 46, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 44, 46, 44, 46, 50, 46, 46, 46, 46, 46, 46, 46, 46, 44, 46, 44, 46, 44, + 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 51, 264, 264, 44, 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, 0, 0, 0, 0, 0, 0, 0, 0, - 47, 47, 47, 47, 47, 47, 47, 133, 47, 47, 47, 140, 47, 47, 47, 47, 133, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 47, 47, 47, 47, 47, 47, 47, 133, 47, 47, + 47, 140, 47, 47, 47, 47, 133, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, + 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 137, 137, 133, 133, 137, + 27, 27, 27, 27, 0, 0, 0, 0, 147, 147, 147, 147, 147, 147, 79, 79, 146, + 218, 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, 137, 137, 133, 133, 137, 27, 27, 27, 27, 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, 136, 136, 136, 136, 0, 0, 0, 0, 0, 0, 0, 0, 137, 137, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, - 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 136, 136, 136, 136, 0, 0, 0, 0, - 0, 0, 0, 0, 137, 137, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, + 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 137, 137, 137, 137, + 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 140, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 82, 82, 142, 142, 142, 142, 142, 142, 142, 142, 142, + 142, 0, 0, 0, 0, 0, 0, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, + 80, 80, 80, 80, 80, 80, 47, 47, 47, 47, 47, 47, 82, 82, 82, 47, 0, 0, 0, + 0, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, - 47, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, - 137, 137, 140, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 82, 142, 142, 142, 142, - 142, 142, 142, 142, 142, 142, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 47, 47, 47, 47, 47, 47, + 47, 47, 47, 47, 47, 133, 133, 133, 133, 133, 84, 84, 84, 82, 82, 47, 47, + 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, + 47, 47, 47, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 137, + 174, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 169, 169, 169, 169, 169, 169, + 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, + 169, 169, 169, 169, 169, 169, 169, 169, 169, 0, 0, 0, 133, 133, 133, 137, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, - 47, 47, 47, 47, 133, 133, 133, 133, 133, 84, 84, 84, 82, 82, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, - 47, 47, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 137, 174, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 47, 47, 47, + 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 143, 137, 137, 133, 133, 133, + 133, 137, 137, 133, 137, 137, 137, 174, 82, 82, 82, 82, 82, 82, 82, 82, + 82, 82, 82, 82, 82, 0, 52, 142, 142, 142, 142, 142, 142, 142, 142, 142, + 142, 0, 0, 0, 0, 82, 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, 47, 47, 47, 47, 47, 47, + 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, + 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 133, + 133, 133, 133, 133, 133, 137, 137, 133, 133, 137, 137, 133, 133, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 47, 47, 47, 133, 47, 47, 47, 47, 47, 47, 47, 47, 133, + 137, 0, 0, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 0, 0, 82, + 82, 82, 82, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, + 47, 52, 47, 47, 47, 47, 47, 47, 79, 79, 79, 47, 137, 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, 133, 133, 133, 133, 133, 133, 137, 137, 133, 133, 137, 137, 133, - 133, 0, 0, 0, 0, 0, 0, 0, 0, 0, 47, 47, 47, 133, 47, 47, 47, 47, 47, 47, - 47, 47, 133, 137, 0, 0, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, - 0, 0, 82, 82, 82, 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, 253, 253, 253, 253, 253, - 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, - 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, - 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, - 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, - 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, - 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, - 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, - 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, - 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, - 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, - 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, - 253, 253, 253, 253, 253, 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, 80, 47, 80, 80, 84, 47, 47, 80, + 80, 47, 47, 47, 47, 47, 80, 80, 47, 80, 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, 47, 47, 52, 82, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, - 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, - 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, - 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, - 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, - 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, - 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, - 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, - 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, - 264, 264, 264, 264, 264, 264, 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, 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, 169, 169, 265, 169, 265, 169, - 169, 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, 169, 265, 169, - 265, 169, 169, 265, 265, 169, 169, 169, 265, 265, 265, 265, 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, + 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, 137, 137, 133, + 137, 137, 133, 137, 137, 82, 137, 140, 0, 0, 142, 142, 142, 142, 142, + 142, 142, 142, 142, 142, 0, 0, 0, 0, 0, 0, 254, 254, 254, 254, 254, 254, + 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, + 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, + 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, + 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, + 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, + 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, + 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, + 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, + 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, + 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, + 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, + 254, 254, 254, 254, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 169, 169, 169, + 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, + 169, 169, 169, 169, 169, 169, 0, 0, 0, 0, 169, 169, 169, 169, 169, 169, + 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, + 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, + 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, + 169, 0, 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, 0, 0, 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, 265, 265, 265, 265, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 266, 267, 266, - 268, 268, 268, 268, 268, 268, 268, 268, 268, 207, 266, 266, 266, 266, - 266, 266, 266, 266, 266, 266, 266, 266, 266, 0, 266, 266, 266, 266, 266, - 0, 266, 0, 266, 266, 0, 266, 266, 0, 266, 266, 266, 266, 266, 266, 266, - 266, 266, 268, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, + 265, 265, 265, 265, 265, 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, 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, 267, 267, 267, 267, 267, 267, 267, + 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, + 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, + 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, + 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, + 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, + 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, + 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, + 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, + 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, + 267, 267, 267, 267, 267, 267, 267, 267, 267, 169, 169, 267, 169, 267, + 169, 169, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 169, 267, + 169, 267, 169, 169, 267, 267, 169, 169, 169, 267, 267, 267, 267, 0, 0, + 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, + 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, + 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, + 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, + 267, 267, 267, 267, 267, 267, 0, 0, 267, 267, 267, 267, 267, 267, 267, + 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, + 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, + 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, + 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, + 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, + 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, + 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, + 267, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, + 268, 269, 268, 270, 270, 270, 270, 270, 270, 270, 270, 270, 208, 268, + 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 0, 268, 268, + 268, 268, 268, 0, 268, 0, 268, 268, 0, 268, 268, 0, 268, 268, 268, 268, + 268, 268, 268, 268, 268, 270, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, - 128, 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 128, 128, 128, + 128, 128, 128, 128, 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, @@ -2062,26 +2129,26 @@ 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, - 128, 128, 128, 128, 128, 191, 269, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 128, 128, 128, 128, 128, 128, 192, 271, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, - 128, 128, 128, 128, 128, 128, 128, 128, 128, 0, 0, 128, 128, 128, 128, + 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 0, 0, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, - 128, 128, 128, 128, 128, 128, 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, - 128, 270, 27, 0, 0, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, - 70, 70, 70, 271, 271, 271, 271, 271, 271, 271, 272, 273, 271, 0, 0, 0, 0, - 0, 0, 80, 80, 80, 80, 80, 80, 80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 271, 274, - 274, 275, 275, 272, 273, 272, 273, 272, 273, 272, 273, 272, 273, 272, - 273, 272, 273, 272, 273, 239, 239, 272, 273, 271, 271, 271, 271, 275, - 275, 275, 276, 271, 276, 0, 271, 276, 271, 271, 274, 277, 278, 277, 278, - 277, 278, 279, 271, 271, 280, 281, 282, 282, 283, 0, 271, 284, 279, 271, - 0, 0, 0, 0, 128, 128, 128, 115, 128, 0, 128, 128, 128, 128, 128, 128, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 128, 128, 272, 27, 0, 0, 70, 70, 70, 70, 70, 70, 70, 70, 70, + 70, 70, 70, 70, 70, 70, 70, 273, 273, 273, 273, 273, 273, 273, 274, 275, + 273, 0, 0, 0, 0, 0, 0, 80, 80, 80, 80, 80, 80, 80, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 273, 276, 276, 277, 277, 274, 275, 274, 275, 274, 275, 274, 275, + 274, 275, 274, 275, 274, 275, 274, 275, 240, 240, 274, 275, 273, 273, + 273, 273, 277, 277, 277, 278, 273, 278, 0, 273, 278, 273, 273, 276, 279, + 280, 279, 280, 279, 280, 281, 273, 273, 282, 283, 284, 284, 285, 0, 273, + 286, 281, 273, 0, 0, 0, 0, 128, 128, 128, 115, 128, 0, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, @@ -2091,173 +2158,210 @@ 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, - 128, 128, 128, 0, 0, 131, 0, 285, 285, 286, 287, 286, 285, 285, 288, 289, - 285, 290, 291, 292, 291, 291, 293, 293, 293, 293, 293, 293, 293, 293, - 293, 293, 291, 285, 294, 295, 294, 285, 285, 296, 296, 296, 296, 296, - 296, 296, 296, 296, 296, 296, 296, 296, 296, 296, 296, 296, 296, 296, - 296, 296, 296, 296, 296, 296, 296, 288, 285, 289, 297, 298, 297, 299, - 299, 299, 299, 299, 299, 299, 299, 299, 299, 299, 299, 299, 299, 299, - 299, 299, 299, 299, 299, 299, 299, 299, 299, 299, 299, 288, 295, 289, - 295, 288, 289, 300, 301, 302, 300, 300, 303, 303, 303, 303, 303, 303, - 303, 303, 303, 303, 304, 303, 303, 303, 303, 303, 303, 303, 303, 303, - 303, 303, 303, 303, 303, 303, 303, 303, 303, 303, 303, 303, 303, 303, - 303, 303, 303, 303, 303, 303, 303, 303, 303, 303, 303, 303, 303, 303, - 303, 303, 303, 303, 303, 303, 303, 303, 304, 304, 303, 303, 303, 303, - 303, 303, 303, 303, 303, 303, 303, 303, 303, 303, 303, 303, 303, 303, - 303, 303, 303, 303, 303, 303, 303, 303, 303, 303, 303, 303, 303, 0, 0, 0, - 303, 303, 303, 303, 303, 303, 0, 0, 303, 303, 303, 303, 303, 303, 0, 0, - 303, 303, 303, 303, 303, 303, 0, 0, 303, 303, 303, 0, 0, 0, 287, 287, - 295, 297, 305, 287, 287, 0, 306, 307, 307, 307, 307, 306, 306, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 308, 308, 308, 27, 25, 0, 0, 47, 47, 47, 47, 47, 47, - 47, 47, 47, 47, 47, 47, 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, 0, 47, 47, - 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 0, - 47, 47, 0, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 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, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, + 128, 128, 128, 128, 128, 128, 0, 0, 131, 0, 287, 287, 288, 289, 288, 287, + 287, 290, 291, 287, 292, 293, 294, 293, 293, 295, 295, 295, 295, 295, + 295, 295, 295, 295, 295, 293, 287, 296, 297, 296, 287, 287, 298, 298, + 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, + 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, 290, 287, 291, 299, + 300, 299, 301, 301, 301, 301, 301, 301, 301, 301, 301, 301, 301, 301, + 301, 301, 301, 301, 301, 301, 301, 301, 301, 301, 301, 301, 301, 301, + 290, 297, 291, 297, 290, 291, 302, 303, 304, 302, 302, 305, 305, 305, + 305, 305, 305, 305, 305, 305, 305, 306, 305, 305, 305, 305, 305, 305, + 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, + 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, + 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 306, 306, 305, + 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, + 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, + 305, 305, 0, 0, 0, 305, 305, 305, 305, 305, 305, 0, 0, 305, 305, 305, + 305, 305, 305, 0, 0, 305, 305, 305, 305, 305, 305, 0, 0, 305, 305, 305, + 0, 0, 0, 289, 289, 297, 299, 307, 289, 289, 0, 308, 309, 309, 309, 309, + 308, 308, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 310, 310, 310, 27, 25, 0, 0, 47, + 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 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, 0, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, + 47, 47, 47, 47, 0, 47, 47, 0, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, + 47, 47, 47, 47, 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, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 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, 82, 136, 79, 0, 0, 0, 0, 147, 147, 147, 147, 147, 147, + 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, 82, 136, 79, 0, 0, 0, 0, 147, 147, + 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, - 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 0, 0, 0, 79, 79, - 79, 79, 79, 79, 79, 79, 79, 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, 309, 309, 309, - 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, - 309, 309, 152, 152, 152, 152, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, - 27, 27, 27, 27, 27, 27, 152, 0, 0, 0, 0, 0, 27, 27, 27, 27, 27, 27, 27, - 27, 27, 27, 27, 27, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 147, 0, 0, 0, 79, 79, 79, 79, 79, 79, 79, 79, 79, 311, 311, 311, 311, + 311, 311, 311, 311, 311, 311, 311, 311, 311, 311, 311, 311, 311, 311, + 311, 311, 311, 311, 311, 311, 311, 311, 311, 311, 311, 311, 311, 311, + 311, 311, 311, 311, 311, 311, 311, 311, 311, 311, 311, 311, 311, 311, + 311, 311, 311, 311, 311, 311, 311, 152, 152, 152, 152, 27, 27, 27, 27, + 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 152, 0, 0, 0, 0, 0, + 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, - 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 84, 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, 0, 0, 0, 47, 47, 47, 47, 47, + 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, + 79, 79, 79, 79, 79, 79, 84, 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, 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, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, + 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, 0, 147, 147, 147, 147, 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, 172, 47, - 47, 47, 47, 47, 47, 47, 47, 172, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 0, 147, 147, 147, 147, 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, 172, 47, 47, 47, 47, 47, 47, 47, 47, 172, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 82, 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, 47, 47, 47, 47, 47, 47, 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, 82, 47, 47, 47, 47, 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, 47, 47, 47, 47, 47, 47, 47, - 47, 82, 172, 172, 172, 172, 172, 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, 0, 0, 0, + 0, 47, 47, 47, 47, 47, 47, 47, 47, 82, 172, 172, 172, 172, 172, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, + 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, - 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 47, 47, 47, 47, 47, 47, - 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, + 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, + 46, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 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, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 0, 0, 0, 0, 0, 0, - 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, 0, 0, 142, 142, 142, 142, 142, 142, 142, 142, + 142, 142, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 105, 105, 105, 105, 105, 105, 0, 0, 105, 0, 105, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 105, 105, 105, 105, + 105, 105, 0, 0, 105, 0, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, + 105, 105, 105, 105, 105, 105, 0, 105, 105, 0, 0, 0, 105, 0, 0, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, - 105, 0, 105, 105, 0, 0, 0, 105, 0, 0, 105, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 105, 105, 105, 105, 105, 105, 105, 0, 102, 312, 312, 312, 312, 312, 312, + 312, 312, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 105, 105, 105, 105, 105, 105, 105, 105, + 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, + 312, 312, 312, 312, 312, 312, 0, 0, 0, 136, 105, 105, 105, 105, 105, 105, + 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, + 105, 105, 105, 105, 105, 105, 0, 0, 0, 0, 0, 102, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, - 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 310, 310, 310, - 310, 0, 0, 0, 0, 0, 136, 105, 105, 105, 105, 105, 105, 105, 105, 105, + 0, 0, 0, 0, 0, 0, 0, 0, 105, 133, 133, 133, 0, 133, 133, 0, 0, 0, 0, 0, + 133, 84, 133, 80, 105, 105, 105, 105, 0, 105, 105, 105, 0, 105, 105, 105, + 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, + 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 0, 0, 0, 0, 80, 175, + 84, 0, 0, 0, 0, 140, 312, 312, 312, 312, 312, 312, 312, 312, 0, 0, 0, 0, + 0, 0, 0, 0, 102, 102, 102, 102, 102, 102, 102, 102, 102, 0, 0, 0, 0, 0, + 0, 0, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, + 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, + 105, 105, 312, 312, 102, 105, 105, 105, 105, 105, 105, 105, 105, 105, + 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, + 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, + 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, + 105, 105, 105, 0, 0, 0, 136, 136, 136, 136, 136, 136, 136, 105, 105, 105, + 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, + 105, 105, 105, 105, 105, 0, 0, 312, 312, 312, 312, 312, 312, 312, 312, + 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, + 105, 105, 105, 105, 105, 0, 0, 0, 0, 0, 312, 312, 312, 312, 312, 312, + 312, 312, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, + 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, + 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, + 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, - 105, 105, 105, 0, 0, 0, 0, 0, 102, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 105, 105, 105, 105, 105, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 105, 133, 133, 133, 0, 133, 133, 0, 0, 0, 0, 0, 133, 84, 133, - 80, 105, 105, 105, 105, 0, 105, 105, 105, 0, 105, 105, 105, 105, 105, - 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, - 105, 105, 105, 105, 105, 105, 105, 105, 0, 0, 0, 0, 80, 213, 84, 0, 0, 0, - 0, 140, 310, 310, 310, 310, 310, 310, 310, 310, 0, 0, 0, 0, 0, 0, 0, 0, - 102, 102, 102, 102, 102, 102, 102, 102, 102, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 133, 133, + 137, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, + 47, 47, 47, 47, 47, 47, 138, 47, 138, 47, 47, 47, 47, 47, 47, 47, 47, 47, + 47, 47, 47, 47, 47, 138, 47, 47, 47, 47, 137, 137, 137, 133, 133, 133, + 133, 137, 137, 140, 139, 82, 82, 173, 82, 82, 82, 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, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 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, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, + 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, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, - 172, 172, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 82, 82, 82, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, + 172, 172, 172, 172, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 82, 82, + 82, 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, 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, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, - 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, - 79, 79, 79, 79, 79, 79, 79, 79, 79, 0, 0, 79, 79, 79, 79, 79, 79, 79, 79, + 79, 79, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, + 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 0, 0, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, - 79, 79, 79, 79, 79, 79, 79, 79, 79, 311, 311, 311, 311, 311, 311, 311, - 312, 312, 213, 213, 213, 79, 79, 79, 313, 312, 312, 312, 312, 312, 131, - 131, 131, 131, 131, 131, 131, 131, 84, 84, 84, 84, 84, 84, 84, 84, 79, - 79, 80, 80, 80, 80, 80, 84, 84, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, - 79, 79, 80, 80, 80, 80, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, - 79, 311, 311, 311, 311, 311, 311, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, + 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 314, 314, 314, 314, 314, + 314, 314, 315, 315, 175, 175, 175, 79, 79, 79, 316, 315, 315, 315, 315, + 315, 131, 131, 131, 131, 131, 131, 131, 131, 84, 84, 84, 84, 84, 84, 84, + 84, 79, 79, 80, 80, 80, 80, 80, 84, 84, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, - 79, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, + 79, 79, 79, 79, 80, 80, 80, 80, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, + 79, 79, 79, 314, 314, 314, 314, 314, 314, 79, 79, 79, 79, 79, 79, 79, 79, + 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, + 79, 79, 79, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, - 27, 27, 80, 80, 80, 27, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 27, 27, 27, 27, 80, 80, 80, 27, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 27, 27, 27, 27, 27, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, - 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 0, 0, 0, 0, 0, 0, 0, 0, 0, 147, - 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, - 147, 147, 147, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, 48, 48, 48, + 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, + 147, 147, 147, 147, 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, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, - 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, + 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, - 48, 48, 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, 48, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 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, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, + 48, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, + 35, 35, 35, 35, 35, 35, 35, 35, 35, 48, 0, 48, 48, 0, 0, 48, 0, 0, 48, + 48, 0, 0, 48, 48, 48, 48, 0, 48, 48, 48, 48, 48, 48, 48, 48, 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, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, - 35, 35, 35, 35, 35, 35, 35, 35, 48, 0, 48, 48, 0, 0, 48, 0, 0, 48, 48, 0, - 0, 48, 48, 48, 48, 0, 48, 48, 48, 48, 48, 48, 48, 48, 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, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, - 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 35, 35, 35, 35, 35, 35, 35, 35, - 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, - 48, 48, 0, 48, 48, 48, 48, 0, 0, 48, 48, 48, 48, 48, 48, 48, 48, 0, 48, - 48, 48, 48, 48, 48, 48, 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, 48, 48, 0, - 48, 48, 48, 48, 0, 48, 48, 48, 48, 48, 0, 48, 0, 0, 0, 48, 48, 48, 48, + 35, 35, 48, 48, 0, 48, 48, 48, 48, 0, 0, 48, 48, 48, 48, 48, 48, 48, 48, + 0, 48, 48, 48, 48, 48, 48, 48, 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, 48, 48, + 0, 48, 48, 48, 48, 0, 48, 48, 48, 48, 48, 0, 48, 0, 0, 0, 48, 48, 48, 48, 48, 48, 48, 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, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, @@ -2278,25 +2382,25 @@ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 35, 35, 35, 35, 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, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, - 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 314, 35, 35, 35, 35, 35, 35, 35, + 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 317, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, - 315, 35, 35, 35, 35, 35, 35, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, - 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 314, 35, 35, 35, + 219, 35, 35, 35, 35, 35, 35, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 317, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, - 35, 35, 35, 35, 315, 35, 35, 35, 35, 35, 35, 48, 48, 48, 48, 48, 48, 48, + 35, 35, 35, 35, 219, 35, 35, 35, 35, 35, 35, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, - 314, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, - 35, 35, 35, 35, 35, 35, 35, 35, 315, 35, 35, 35, 35, 35, 35, 48, 48, 48, + 317, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, + 35, 35, 35, 35, 35, 35, 35, 35, 219, 35, 35, 35, 35, 35, 35, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, - 48, 48, 48, 48, 314, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, - 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 315, 35, 35, 35, 35, 35, + 48, 48, 48, 48, 317, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, + 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 219, 35, 35, 35, 35, 35, 35, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, - 48, 48, 48, 48, 48, 48, 48, 48, 314, 35, 35, 35, 35, 35, 35, 35, 35, 35, - 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 315, 35, - 35, 35, 35, 35, 35, 48, 35, 0, 0, 316, 316, 316, 316, 316, 316, 316, 316, - 316, 316, 316, 316, 316, 316, 316, 316, 316, 316, 316, 316, 316, 316, - 316, 316, 316, 316, 316, 316, 316, 316, 316, 316, 316, 316, 316, 316, - 316, 316, 316, 316, 316, 316, 316, 316, 316, 316, 316, 316, 316, 316, 27, + 48, 48, 48, 48, 48, 48, 48, 48, 317, 35, 35, 35, 35, 35, 35, 35, 35, 35, + 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 219, 35, + 35, 35, 35, 35, 35, 48, 35, 0, 0, 318, 318, 318, 318, 318, 318, 318, 318, + 318, 318, 318, 318, 318, 318, 318, 318, 318, 318, 318, 318, 318, 318, + 318, 318, 318, 318, 318, 318, 318, 318, 318, 318, 318, 318, 318, 318, + 318, 318, 318, 318, 318, 318, 318, 318, 318, 318, 318, 318, 318, 318, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 0, 0, 0, 0, 27, 27, 27, 27, 27, 27, 27, 27, @@ -2309,29 +2413,55 @@ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 169, 169, 169, 169, 169, 169, + 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, 234, 234, 234, 234, 234, 234, 234, 234, 234, + 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, + 234, 234, 234, 234, 234, 234, 234, 319, 0, 0, 234, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 234, 0, 234, 0, 0, 234, 0, 0, 0, 234, 0, 0, 0, 234, 234, 234, + 234, 234, 0, 0, 0, 0, 0, 0, 0, 0, 262, 0, 0, 0, 0, 0, 0, 0, 262, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 262, 0, + 262, 262, 0, 0, 262, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 262, 262, 262, 262, 0, + 0, 234, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 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, 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, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 261, 261, 261, 261, 261, 261, 261, 261, 261, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, - 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 0, 0, 0, 0, 0, 0, + 169, 169, 169, 169, 169, 169, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, + 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, + 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, + 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 267, + 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, + 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, + 267, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 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, + 0, 0, 0, 0, 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, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, - 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 70, 70, 70, 70, + 131, 131, 131, 131, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, @@ -2344,17 +2474,17 @@ 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, - 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, - 70, 70, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 264, 264, 264, - 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, - 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, - 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, - 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, - 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, - 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, - 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, - 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, - 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 0, 0, + 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 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, 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, 0, }; /* decomposition data */ @@ -2591,552 +2721,555 @@ 69, 262, 70, 262, 77, 262, 111, 258, 1488, 258, 1489, 258, 1490, 258, 1491, 262, 105, 770, 70, 65, 88, 262, 960, 262, 947, 262, 915, 262, 928, 262, 8721, 262, 68, 262, 100, 262, 101, 262, 105, 262, 106, 772, 49, - 8260, 51, 772, 50, 8260, 51, 772, 49, 8260, 53, 772, 50, 8260, 53, 772, - 51, 8260, 53, 772, 52, 8260, 53, 772, 49, 8260, 54, 772, 53, 8260, 54, - 772, 49, 8260, 56, 772, 51, 8260, 56, 772, 53, 8260, 56, 772, 55, 8260, - 56, 516, 49, 8260, 258, 73, 514, 73, 73, 770, 73, 73, 73, 514, 73, 86, - 258, 86, 514, 86, 73, 770, 86, 73, 73, 1026, 86, 73, 73, 73, 514, 73, 88, - 258, 88, 514, 88, 73, 770, 88, 73, 73, 258, 76, 258, 67, 258, 68, 258, - 77, 258, 105, 514, 105, 105, 770, 105, 105, 105, 514, 105, 118, 258, 118, - 514, 118, 105, 770, 118, 105, 105, 1026, 118, 105, 105, 105, 514, 105, - 120, 258, 120, 514, 120, 105, 770, 120, 105, 105, 258, 108, 258, 99, 258, - 100, 258, 109, 512, 8592, 824, 512, 8594, 824, 512, 8596, 824, 512, 8656, - 824, 512, 8660, 824, 512, 8658, 824, 512, 8707, 824, 512, 8712, 824, 512, - 8715, 824, 512, 8739, 824, 512, 8741, 824, 514, 8747, 8747, 770, 8747, - 8747, 8747, 514, 8750, 8750, 770, 8750, 8750, 8750, 512, 8764, 824, 512, - 8771, 824, 512, 8773, 824, 512, 8776, 824, 512, 61, 824, 512, 8801, 824, - 512, 8781, 824, 512, 60, 824, 512, 62, 824, 512, 8804, 824, 512, 8805, - 824, 512, 8818, 824, 512, 8819, 824, 512, 8822, 824, 512, 8823, 824, 512, - 8826, 824, 512, 8827, 824, 512, 8834, 824, 512, 8835, 824, 512, 8838, - 824, 512, 8839, 824, 512, 8866, 824, 512, 8872, 824, 512, 8873, 824, 512, - 8875, 824, 512, 8828, 824, 512, 8829, 824, 512, 8849, 824, 512, 8850, - 824, 512, 8882, 824, 512, 8883, 824, 512, 8884, 824, 512, 8885, 824, 256, - 12296, 256, 12297, 263, 49, 263, 50, 263, 51, 263, 52, 263, 53, 263, 54, - 263, 55, 263, 56, 263, 57, 519, 49, 48, 519, 49, 49, 519, 49, 50, 519, - 49, 51, 519, 49, 52, 519, 49, 53, 519, 49, 54, 519, 49, 55, 519, 49, 56, - 519, 49, 57, 519, 50, 48, 770, 40, 49, 41, 770, 40, 50, 41, 770, 40, 51, - 41, 770, 40, 52, 41, 770, 40, 53, 41, 770, 40, 54, 41, 770, 40, 55, 41, - 770, 40, 56, 41, 770, 40, 57, 41, 1026, 40, 49, 48, 41, 1026, 40, 49, 49, - 41, 1026, 40, 49, 50, 41, 1026, 40, 49, 51, 41, 1026, 40, 49, 52, 41, - 1026, 40, 49, 53, 41, 1026, 40, 49, 54, 41, 1026, 40, 49, 55, 41, 1026, - 40, 49, 56, 41, 1026, 40, 49, 57, 41, 1026, 40, 50, 48, 41, 514, 49, 46, - 514, 50, 46, 514, 51, 46, 514, 52, 46, 514, 53, 46, 514, 54, 46, 514, 55, - 46, 514, 56, 46, 514, 57, 46, 770, 49, 48, 46, 770, 49, 49, 46, 770, 49, - 50, 46, 770, 49, 51, 46, 770, 49, 52, 46, 770, 49, 53, 46, 770, 49, 54, - 46, 770, 49, 55, 46, 770, 49, 56, 46, 770, 49, 57, 46, 770, 50, 48, 46, - 770, 40, 97, 41, 770, 40, 98, 41, 770, 40, 99, 41, 770, 40, 100, 41, 770, - 40, 101, 41, 770, 40, 102, 41, 770, 40, 103, 41, 770, 40, 104, 41, 770, - 40, 105, 41, 770, 40, 106, 41, 770, 40, 107, 41, 770, 40, 108, 41, 770, - 40, 109, 41, 770, 40, 110, 41, 770, 40, 111, 41, 770, 40, 112, 41, 770, - 40, 113, 41, 770, 40, 114, 41, 770, 40, 115, 41, 770, 40, 116, 41, 770, - 40, 117, 41, 770, 40, 118, 41, 770, 40, 119, 41, 770, 40, 120, 41, 770, - 40, 121, 41, 770, 40, 122, 41, 263, 65, 263, 66, 263, 67, 263, 68, 263, - 69, 263, 70, 263, 71, 263, 72, 263, 73, 263, 74, 263, 75, 263, 76, 263, - 77, 263, 78, 263, 79, 263, 80, 263, 81, 263, 82, 263, 83, 263, 84, 263, - 85, 263, 86, 263, 87, 263, 88, 263, 89, 263, 90, 263, 97, 263, 98, 263, - 99, 263, 100, 263, 101, 263, 102, 263, 103, 263, 104, 263, 105, 263, 106, - 263, 107, 263, 108, 263, 109, 263, 110, 263, 111, 263, 112, 263, 113, - 263, 114, 263, 115, 263, 116, 263, 117, 263, 118, 263, 119, 263, 120, - 263, 121, 263, 122, 263, 48, 1026, 8747, 8747, 8747, 8747, 770, 58, 58, - 61, 514, 61, 61, 770, 61, 61, 61, 512, 10973, 824, 261, 106, 259, 86, - 259, 11617, 258, 27597, 258, 40863, 258, 19968, 258, 20008, 258, 20022, - 258, 20031, 258, 20057, 258, 20101, 258, 20108, 258, 20128, 258, 20154, - 258, 20799, 258, 20837, 258, 20843, 258, 20866, 258, 20886, 258, 20907, - 258, 20960, 258, 20981, 258, 20992, 258, 21147, 258, 21241, 258, 21269, - 258, 21274, 258, 21304, 258, 21313, 258, 21340, 258, 21353, 258, 21378, - 258, 21430, 258, 21448, 258, 21475, 258, 22231, 258, 22303, 258, 22763, - 258, 22786, 258, 22794, 258, 22805, 258, 22823, 258, 22899, 258, 23376, - 258, 23424, 258, 23544, 258, 23567, 258, 23586, 258, 23608, 258, 23662, - 258, 23665, 258, 24027, 258, 24037, 258, 24049, 258, 24062, 258, 24178, - 258, 24186, 258, 24191, 258, 24308, 258, 24318, 258, 24331, 258, 24339, - 258, 24400, 258, 24417, 258, 24435, 258, 24515, 258, 25096, 258, 25142, - 258, 25163, 258, 25903, 258, 25908, 258, 25991, 258, 26007, 258, 26020, - 258, 26041, 258, 26080, 258, 26085, 258, 26352, 258, 26376, 258, 26408, - 258, 27424, 258, 27490, 258, 27513, 258, 27571, 258, 27595, 258, 27604, - 258, 27611, 258, 27663, 258, 27668, 258, 27700, 258, 28779, 258, 29226, - 258, 29238, 258, 29243, 258, 29247, 258, 29255, 258, 29273, 258, 29275, - 258, 29356, 258, 29572, 258, 29577, 258, 29916, 258, 29926, 258, 29976, - 258, 29983, 258, 29992, 258, 30000, 258, 30091, 258, 30098, 258, 30326, - 258, 30333, 258, 30382, 258, 30399, 258, 30446, 258, 30683, 258, 30690, - 258, 30707, 258, 31034, 258, 31160, 258, 31166, 258, 31348, 258, 31435, - 258, 31481, 258, 31859, 258, 31992, 258, 32566, 258, 32593, 258, 32650, - 258, 32701, 258, 32769, 258, 32780, 258, 32786, 258, 32819, 258, 32895, - 258, 32905, 258, 33251, 258, 33258, 258, 33267, 258, 33276, 258, 33292, - 258, 33307, 258, 33311, 258, 33390, 258, 33394, 258, 33400, 258, 34381, - 258, 34411, 258, 34880, 258, 34892, 258, 34915, 258, 35198, 258, 35211, - 258, 35282, 258, 35328, 258, 35895, 258, 35910, 258, 35925, 258, 35960, - 258, 35997, 258, 36196, 258, 36208, 258, 36275, 258, 36523, 258, 36554, - 258, 36763, 258, 36784, 258, 36789, 258, 37009, 258, 37193, 258, 37318, - 258, 37324, 258, 37329, 258, 38263, 258, 38272, 258, 38428, 258, 38582, - 258, 38585, 258, 38632, 258, 38737, 258, 38750, 258, 38754, 258, 38761, - 258, 38859, 258, 38893, 258, 38899, 258, 38913, 258, 39080, 258, 39131, - 258, 39135, 258, 39318, 258, 39321, 258, 39340, 258, 39592, 258, 39640, - 258, 39647, 258, 39717, 258, 39727, 258, 39730, 258, 39740, 258, 39770, - 258, 40165, 258, 40565, 258, 40575, 258, 40613, 258, 40635, 258, 40643, - 258, 40653, 258, 40657, 258, 40697, 258, 40701, 258, 40718, 258, 40723, - 258, 40736, 258, 40763, 258, 40778, 258, 40786, 258, 40845, 258, 40860, - 258, 40864, 264, 32, 258, 12306, 258, 21313, 258, 21316, 258, 21317, 512, - 12363, 12441, 512, 12365, 12441, 512, 12367, 12441, 512, 12369, 12441, - 512, 12371, 12441, 512, 12373, 12441, 512, 12375, 12441, 512, 12377, - 12441, 512, 12379, 12441, 512, 12381, 12441, 512, 12383, 12441, 512, - 12385, 12441, 512, 12388, 12441, 512, 12390, 12441, 512, 12392, 12441, - 512, 12399, 12441, 512, 12399, 12442, 512, 12402, 12441, 512, 12402, - 12442, 512, 12405, 12441, 512, 12405, 12442, 512, 12408, 12441, 512, - 12408, 12442, 512, 12411, 12441, 512, 12411, 12442, 512, 12358, 12441, - 514, 32, 12441, 514, 32, 12442, 512, 12445, 12441, 521, 12424, 12426, - 512, 12459, 12441, 512, 12461, 12441, 512, 12463, 12441, 512, 12465, - 12441, 512, 12467, 12441, 512, 12469, 12441, 512, 12471, 12441, 512, - 12473, 12441, 512, 12475, 12441, 512, 12477, 12441, 512, 12479, 12441, - 512, 12481, 12441, 512, 12484, 12441, 512, 12486, 12441, 512, 12488, - 12441, 512, 12495, 12441, 512, 12495, 12442, 512, 12498, 12441, 512, - 12498, 12442, 512, 12501, 12441, 512, 12501, 12442, 512, 12504, 12441, - 512, 12504, 12442, 512, 12507, 12441, 512, 12507, 12442, 512, 12454, - 12441, 512, 12527, 12441, 512, 12528, 12441, 512, 12529, 12441, 512, - 12530, 12441, 512, 12541, 12441, 521, 12467, 12488, 258, 4352, 258, 4353, - 258, 4522, 258, 4354, 258, 4524, 258, 4525, 258, 4355, 258, 4356, 258, - 4357, 258, 4528, 258, 4529, 258, 4530, 258, 4531, 258, 4532, 258, 4533, - 258, 4378, 258, 4358, 258, 4359, 258, 4360, 258, 4385, 258, 4361, 258, - 4362, 258, 4363, 258, 4364, 258, 4365, 258, 4366, 258, 4367, 258, 4368, - 258, 4369, 258, 4370, 258, 4449, 258, 4450, 258, 4451, 258, 4452, 258, - 4453, 258, 4454, 258, 4455, 258, 4456, 258, 4457, 258, 4458, 258, 4459, - 258, 4460, 258, 4461, 258, 4462, 258, 4463, 258, 4464, 258, 4465, 258, - 4466, 258, 4467, 258, 4468, 258, 4469, 258, 4448, 258, 4372, 258, 4373, - 258, 4551, 258, 4552, 258, 4556, 258, 4558, 258, 4563, 258, 4567, 258, - 4569, 258, 4380, 258, 4573, 258, 4575, 258, 4381, 258, 4382, 258, 4384, - 258, 4386, 258, 4387, 258, 4391, 258, 4393, 258, 4395, 258, 4396, 258, - 4397, 258, 4398, 258, 4399, 258, 4402, 258, 4406, 258, 4416, 258, 4423, - 258, 4428, 258, 4593, 258, 4594, 258, 4439, 258, 4440, 258, 4441, 258, - 4484, 258, 4485, 258, 4488, 258, 4497, 258, 4498, 258, 4500, 258, 4510, - 258, 4513, 259, 19968, 259, 20108, 259, 19977, 259, 22235, 259, 19978, - 259, 20013, 259, 19979, 259, 30002, 259, 20057, 259, 19993, 259, 19969, - 259, 22825, 259, 22320, 259, 20154, 770, 40, 4352, 41, 770, 40, 4354, 41, - 770, 40, 4355, 41, 770, 40, 4357, 41, 770, 40, 4358, 41, 770, 40, 4359, - 41, 770, 40, 4361, 41, 770, 40, 4363, 41, 770, 40, 4364, 41, 770, 40, - 4366, 41, 770, 40, 4367, 41, 770, 40, 4368, 41, 770, 40, 4369, 41, 770, - 40, 4370, 41, 1026, 40, 4352, 4449, 41, 1026, 40, 4354, 4449, 41, 1026, - 40, 4355, 4449, 41, 1026, 40, 4357, 4449, 41, 1026, 40, 4358, 4449, 41, - 1026, 40, 4359, 4449, 41, 1026, 40, 4361, 4449, 41, 1026, 40, 4363, 4449, - 41, 1026, 40, 4364, 4449, 41, 1026, 40, 4366, 4449, 41, 1026, 40, 4367, - 4449, 41, 1026, 40, 4368, 4449, 41, 1026, 40, 4369, 4449, 41, 1026, 40, - 4370, 4449, 41, 1026, 40, 4364, 4462, 41, 1794, 40, 4363, 4457, 4364, - 4453, 4523, 41, 1538, 40, 4363, 4457, 4370, 4462, 41, 770, 40, 19968, 41, - 770, 40, 20108, 41, 770, 40, 19977, 41, 770, 40, 22235, 41, 770, 40, - 20116, 41, 770, 40, 20845, 41, 770, 40, 19971, 41, 770, 40, 20843, 41, - 770, 40, 20061, 41, 770, 40, 21313, 41, 770, 40, 26376, 41, 770, 40, - 28779, 41, 770, 40, 27700, 41, 770, 40, 26408, 41, 770, 40, 37329, 41, - 770, 40, 22303, 41, 770, 40, 26085, 41, 770, 40, 26666, 41, 770, 40, - 26377, 41, 770, 40, 31038, 41, 770, 40, 21517, 41, 770, 40, 29305, 41, - 770, 40, 36001, 41, 770, 40, 31069, 41, 770, 40, 21172, 41, 770, 40, - 20195, 41, 770, 40, 21628, 41, 770, 40, 23398, 41, 770, 40, 30435, 41, - 770, 40, 20225, 41, 770, 40, 36039, 41, 770, 40, 21332, 41, 770, 40, - 31085, 41, 770, 40, 20241, 41, 770, 40, 33258, 41, 770, 40, 33267, 41, - 778, 80, 84, 69, 519, 50, 49, 519, 50, 50, 519, 50, 51, 519, 50, 52, 519, - 50, 53, 519, 50, 54, 519, 50, 55, 519, 50, 56, 519, 50, 57, 519, 51, 48, - 519, 51, 49, 519, 51, 50, 519, 51, 51, 519, 51, 52, 519, 51, 53, 263, - 4352, 263, 4354, 263, 4355, 263, 4357, 263, 4358, 263, 4359, 263, 4361, - 263, 4363, 263, 4364, 263, 4366, 263, 4367, 263, 4368, 263, 4369, 263, - 4370, 519, 4352, 4449, 519, 4354, 4449, 519, 4355, 4449, 519, 4357, 4449, - 519, 4358, 4449, 519, 4359, 4449, 519, 4361, 4449, 519, 4363, 4449, 519, - 4364, 4449, 519, 4366, 4449, 519, 4367, 4449, 519, 4368, 4449, 519, 4369, - 4449, 519, 4370, 4449, 1287, 4366, 4449, 4535, 4352, 4457, 1031, 4364, - 4462, 4363, 4468, 519, 4363, 4462, 263, 19968, 263, 20108, 263, 19977, - 263, 22235, 263, 20116, 263, 20845, 263, 19971, 263, 20843, 263, 20061, - 263, 21313, 263, 26376, 263, 28779, 263, 27700, 263, 26408, 263, 37329, - 263, 22303, 263, 26085, 263, 26666, 263, 26377, 263, 31038, 263, 21517, - 263, 29305, 263, 36001, 263, 31069, 263, 21172, 263, 31192, 263, 30007, - 263, 22899, 263, 36969, 263, 20778, 263, 21360, 263, 27880, 263, 38917, - 263, 20241, 263, 20889, 263, 27491, 263, 19978, 263, 20013, 263, 19979, - 263, 24038, 263, 21491, 263, 21307, 263, 23447, 263, 23398, 263, 30435, - 263, 20225, 263, 36039, 263, 21332, 263, 22812, 519, 51, 54, 519, 51, 55, - 519, 51, 56, 519, 51, 57, 519, 52, 48, 519, 52, 49, 519, 52, 50, 519, 52, - 51, 519, 52, 52, 519, 52, 53, 519, 52, 54, 519, 52, 55, 519, 52, 56, 519, - 52, 57, 519, 53, 48, 514, 49, 26376, 514, 50, 26376, 514, 51, 26376, 514, - 52, 26376, 514, 53, 26376, 514, 54, 26376, 514, 55, 26376, 514, 56, - 26376, 514, 57, 26376, 770, 49, 48, 26376, 770, 49, 49, 26376, 770, 49, - 50, 26376, 522, 72, 103, 778, 101, 114, 103, 522, 101, 86, 778, 76, 84, - 68, 263, 12450, 263, 12452, 263, 12454, 263, 12456, 263, 12458, 263, - 12459, 263, 12461, 263, 12463, 263, 12465, 263, 12467, 263, 12469, 263, - 12471, 263, 12473, 263, 12475, 263, 12477, 263, 12479, 263, 12481, 263, - 12484, 263, 12486, 263, 12488, 263, 12490, 263, 12491, 263, 12492, 263, - 12493, 263, 12494, 263, 12495, 263, 12498, 263, 12501, 263, 12504, 263, - 12507, 263, 12510, 263, 12511, 263, 12512, 263, 12513, 263, 12514, 263, - 12516, 263, 12518, 263, 12520, 263, 12521, 263, 12522, 263, 12523, 263, - 12524, 263, 12525, 263, 12527, 263, 12528, 263, 12529, 263, 12530, 1034, - 12450, 12497, 12540, 12488, 1034, 12450, 12523, 12501, 12449, 1034, - 12450, 12531, 12506, 12450, 778, 12450, 12540, 12523, 1034, 12452, 12491, - 12531, 12464, 778, 12452, 12531, 12481, 778, 12454, 12457, 12531, 1290, - 12456, 12473, 12463, 12540, 12489, 1034, 12456, 12540, 12459, 12540, 778, - 12458, 12531, 12473, 778, 12458, 12540, 12512, 778, 12459, 12452, 12522, - 1034, 12459, 12521, 12483, 12488, 1034, 12459, 12525, 12522, 12540, 778, - 12460, 12525, 12531, 778, 12460, 12531, 12510, 522, 12462, 12460, 778, - 12462, 12491, 12540, 1034, 12461, 12517, 12522, 12540, 1034, 12462, - 12523, 12480, 12540, 522, 12461, 12525, 1290, 12461, 12525, 12464, 12521, - 12512, 1546, 12461, 12525, 12513, 12540, 12488, 12523, 1290, 12461, - 12525, 12527, 12483, 12488, 778, 12464, 12521, 12512, 1290, 12464, 12521, - 12512, 12488, 12531, 1290, 12463, 12523, 12476, 12452, 12525, 1034, - 12463, 12525, 12540, 12493, 778, 12465, 12540, 12473, 778, 12467, 12523, - 12490, 778, 12467, 12540, 12509, 1034, 12469, 12452, 12463, 12523, 1290, - 12469, 12531, 12481, 12540, 12512, 1034, 12471, 12522, 12531, 12464, 778, - 12475, 12531, 12481, 778, 12475, 12531, 12488, 778, 12480, 12540, 12473, - 522, 12487, 12471, 522, 12489, 12523, 522, 12488, 12531, 522, 12490, - 12494, 778, 12494, 12483, 12488, 778, 12495, 12452, 12484, 1290, 12497, - 12540, 12475, 12531, 12488, 778, 12497, 12540, 12484, 1034, 12496, 12540, - 12524, 12523, 1290, 12500, 12450, 12473, 12488, 12523, 778, 12500, 12463, - 12523, 522, 12500, 12467, 522, 12499, 12523, 1290, 12501, 12449, 12521, - 12483, 12489, 1034, 12501, 12451, 12540, 12488, 1290, 12502, 12483, - 12471, 12455, 12523, 778, 12501, 12521, 12531, 1290, 12504, 12463, 12479, - 12540, 12523, 522, 12506, 12477, 778, 12506, 12491, 12498, 778, 12504, - 12523, 12484, 778, 12506, 12531, 12473, 778, 12506, 12540, 12472, 778, - 12505, 12540, 12479, 1034, 12509, 12452, 12531, 12488, 778, 12508, 12523, - 12488, 522, 12507, 12531, 778, 12509, 12531, 12489, 778, 12507, 12540, - 12523, 778, 12507, 12540, 12531, 1034, 12510, 12452, 12463, 12525, 778, - 12510, 12452, 12523, 778, 12510, 12483, 12495, 778, 12510, 12523, 12463, - 1290, 12510, 12531, 12471, 12519, 12531, 1034, 12511, 12463, 12525, - 12531, 522, 12511, 12522, 1290, 12511, 12522, 12496, 12540, 12523, 522, - 12513, 12460, 1034, 12513, 12460, 12488, 12531, 1034, 12513, 12540, - 12488, 12523, 778, 12516, 12540, 12489, 778, 12516, 12540, 12523, 778, - 12518, 12450, 12531, 1034, 12522, 12483, 12488, 12523, 522, 12522, 12521, - 778, 12523, 12500, 12540, 1034, 12523, 12540, 12502, 12523, 522, 12524, - 12512, 1290, 12524, 12531, 12488, 12466, 12531, 778, 12527, 12483, 12488, - 514, 48, 28857, 514, 49, 28857, 514, 50, 28857, 514, 51, 28857, 514, 52, - 28857, 514, 53, 28857, 514, 54, 28857, 514, 55, 28857, 514, 56, 28857, - 514, 57, 28857, 770, 49, 48, 28857, 770, 49, 49, 28857, 770, 49, 50, - 28857, 770, 49, 51, 28857, 770, 49, 52, 28857, 770, 49, 53, 28857, 770, - 49, 54, 28857, 770, 49, 55, 28857, 770, 49, 56, 28857, 770, 49, 57, - 28857, 770, 50, 48, 28857, 770, 50, 49, 28857, 770, 50, 50, 28857, 770, - 50, 51, 28857, 770, 50, 52, 28857, 778, 104, 80, 97, 522, 100, 97, 522, - 65, 85, 778, 98, 97, 114, 522, 111, 86, 522, 112, 99, 522, 100, 109, 778, - 100, 109, 178, 778, 100, 109, 179, 522, 73, 85, 522, 24179, 25104, 522, - 26157, 21644, 522, 22823, 27491, 522, 26126, 27835, 1034, 26666, 24335, - 20250, 31038, 522, 112, 65, 522, 110, 65, 522, 956, 65, 522, 109, 65, - 522, 107, 65, 522, 75, 66, 522, 77, 66, 522, 71, 66, 778, 99, 97, 108, - 1034, 107, 99, 97, 108, 522, 112, 70, 522, 110, 70, 522, 956, 70, 522, - 956, 103, 522, 109, 103, 522, 107, 103, 522, 72, 122, 778, 107, 72, 122, - 778, 77, 72, 122, 778, 71, 72, 122, 778, 84, 72, 122, 522, 956, 8467, - 522, 109, 8467, 522, 100, 8467, 522, 107, 8467, 522, 102, 109, 522, 110, - 109, 522, 956, 109, 522, 109, 109, 522, 99, 109, 522, 107, 109, 778, 109, - 109, 178, 778, 99, 109, 178, 522, 109, 178, 778, 107, 109, 178, 778, 109, - 109, 179, 778, 99, 109, 179, 522, 109, 179, 778, 107, 109, 179, 778, 109, - 8725, 115, 1034, 109, 8725, 115, 178, 522, 80, 97, 778, 107, 80, 97, 778, - 77, 80, 97, 778, 71, 80, 97, 778, 114, 97, 100, 1290, 114, 97, 100, 8725, - 115, 1546, 114, 97, 100, 8725, 115, 178, 522, 112, 115, 522, 110, 115, - 522, 956, 115, 522, 109, 115, 522, 112, 86, 522, 110, 86, 522, 956, 86, - 522, 109, 86, 522, 107, 86, 522, 77, 86, 522, 112, 87, 522, 110, 87, 522, - 956, 87, 522, 109, 87, 522, 107, 87, 522, 77, 87, 522, 107, 937, 522, 77, - 937, 1034, 97, 46, 109, 46, 522, 66, 113, 522, 99, 99, 522, 99, 100, - 1034, 67, 8725, 107, 103, 778, 67, 111, 46, 522, 100, 66, 522, 71, 121, - 522, 104, 97, 522, 72, 80, 522, 105, 110, 522, 75, 75, 522, 75, 77, 522, - 107, 116, 522, 108, 109, 522, 108, 110, 778, 108, 111, 103, 522, 108, - 120, 522, 109, 98, 778, 109, 105, 108, 778, 109, 111, 108, 522, 80, 72, - 1034, 112, 46, 109, 46, 778, 80, 80, 77, 522, 80, 82, 522, 115, 114, 522, - 83, 118, 522, 87, 98, 778, 86, 8725, 109, 778, 65, 8725, 109, 514, 49, - 26085, 514, 50, 26085, 514, 51, 26085, 514, 52, 26085, 514, 53, 26085, - 514, 54, 26085, 514, 55, 26085, 514, 56, 26085, 514, 57, 26085, 770, 49, - 48, 26085, 770, 49, 49, 26085, 770, 49, 50, 26085, 770, 49, 51, 26085, - 770, 49, 52, 26085, 770, 49, 53, 26085, 770, 49, 54, 26085, 770, 49, 55, - 26085, 770, 49, 56, 26085, 770, 49, 57, 26085, 770, 50, 48, 26085, 770, - 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, 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, 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, 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, 119127, 119141, 512, 119128, 119141, 512, 119135, + 8260, 55, 772, 49, 8260, 57, 1028, 49, 8260, 49, 48, 772, 49, 8260, 51, + 772, 50, 8260, 51, 772, 49, 8260, 53, 772, 50, 8260, 53, 772, 51, 8260, + 53, 772, 52, 8260, 53, 772, 49, 8260, 54, 772, 53, 8260, 54, 772, 49, + 8260, 56, 772, 51, 8260, 56, 772, 53, 8260, 56, 772, 55, 8260, 56, 516, + 49, 8260, 258, 73, 514, 73, 73, 770, 73, 73, 73, 514, 73, 86, 258, 86, + 514, 86, 73, 770, 86, 73, 73, 1026, 86, 73, 73, 73, 514, 73, 88, 258, 88, + 514, 88, 73, 770, 88, 73, 73, 258, 76, 258, 67, 258, 68, 258, 77, 258, + 105, 514, 105, 105, 770, 105, 105, 105, 514, 105, 118, 258, 118, 514, + 118, 105, 770, 118, 105, 105, 1026, 118, 105, 105, 105, 514, 105, 120, + 258, 120, 514, 120, 105, 770, 120, 105, 105, 258, 108, 258, 99, 258, 100, + 258, 109, 772, 48, 8260, 51, 512, 8592, 824, 512, 8594, 824, 512, 8596, + 824, 512, 8656, 824, 512, 8660, 824, 512, 8658, 824, 512, 8707, 824, 512, + 8712, 824, 512, 8715, 824, 512, 8739, 824, 512, 8741, 824, 514, 8747, + 8747, 770, 8747, 8747, 8747, 514, 8750, 8750, 770, 8750, 8750, 8750, 512, + 8764, 824, 512, 8771, 824, 512, 8773, 824, 512, 8776, 824, 512, 61, 824, + 512, 8801, 824, 512, 8781, 824, 512, 60, 824, 512, 62, 824, 512, 8804, + 824, 512, 8805, 824, 512, 8818, 824, 512, 8819, 824, 512, 8822, 824, 512, + 8823, 824, 512, 8826, 824, 512, 8827, 824, 512, 8834, 824, 512, 8835, + 824, 512, 8838, 824, 512, 8839, 824, 512, 8866, 824, 512, 8872, 824, 512, + 8873, 824, 512, 8875, 824, 512, 8828, 824, 512, 8829, 824, 512, 8849, + 824, 512, 8850, 824, 512, 8882, 824, 512, 8883, 824, 512, 8884, 824, 512, + 8885, 824, 256, 12296, 256, 12297, 263, 49, 263, 50, 263, 51, 263, 52, + 263, 53, 263, 54, 263, 55, 263, 56, 263, 57, 519, 49, 48, 519, 49, 49, + 519, 49, 50, 519, 49, 51, 519, 49, 52, 519, 49, 53, 519, 49, 54, 519, 49, + 55, 519, 49, 56, 519, 49, 57, 519, 50, 48, 770, 40, 49, 41, 770, 40, 50, + 41, 770, 40, 51, 41, 770, 40, 52, 41, 770, 40, 53, 41, 770, 40, 54, 41, + 770, 40, 55, 41, 770, 40, 56, 41, 770, 40, 57, 41, 1026, 40, 49, 48, 41, + 1026, 40, 49, 49, 41, 1026, 40, 49, 50, 41, 1026, 40, 49, 51, 41, 1026, + 40, 49, 52, 41, 1026, 40, 49, 53, 41, 1026, 40, 49, 54, 41, 1026, 40, 49, + 55, 41, 1026, 40, 49, 56, 41, 1026, 40, 49, 57, 41, 1026, 40, 50, 48, 41, + 514, 49, 46, 514, 50, 46, 514, 51, 46, 514, 52, 46, 514, 53, 46, 514, 54, + 46, 514, 55, 46, 514, 56, 46, 514, 57, 46, 770, 49, 48, 46, 770, 49, 49, + 46, 770, 49, 50, 46, 770, 49, 51, 46, 770, 49, 52, 46, 770, 49, 53, 46, + 770, 49, 54, 46, 770, 49, 55, 46, 770, 49, 56, 46, 770, 49, 57, 46, 770, + 50, 48, 46, 770, 40, 97, 41, 770, 40, 98, 41, 770, 40, 99, 41, 770, 40, + 100, 41, 770, 40, 101, 41, 770, 40, 102, 41, 770, 40, 103, 41, 770, 40, + 104, 41, 770, 40, 105, 41, 770, 40, 106, 41, 770, 40, 107, 41, 770, 40, + 108, 41, 770, 40, 109, 41, 770, 40, 110, 41, 770, 40, 111, 41, 770, 40, + 112, 41, 770, 40, 113, 41, 770, 40, 114, 41, 770, 40, 115, 41, 770, 40, + 116, 41, 770, 40, 117, 41, 770, 40, 118, 41, 770, 40, 119, 41, 770, 40, + 120, 41, 770, 40, 121, 41, 770, 40, 122, 41, 263, 65, 263, 66, 263, 67, + 263, 68, 263, 69, 263, 70, 263, 71, 263, 72, 263, 73, 263, 74, 263, 75, + 263, 76, 263, 77, 263, 78, 263, 79, 263, 80, 263, 81, 263, 82, 263, 83, + 263, 84, 263, 85, 263, 86, 263, 87, 263, 88, 263, 89, 263, 90, 263, 97, + 263, 98, 263, 99, 263, 100, 263, 101, 263, 102, 263, 103, 263, 104, 263, + 105, 263, 106, 263, 107, 263, 108, 263, 109, 263, 110, 263, 111, 263, + 112, 263, 113, 263, 114, 263, 115, 263, 116, 263, 117, 263, 118, 263, + 119, 263, 120, 263, 121, 263, 122, 263, 48, 1026, 8747, 8747, 8747, 8747, + 770, 58, 58, 61, 514, 61, 61, 770, 61, 61, 61, 512, 10973, 824, 261, 106, + 259, 86, 259, 11617, 258, 27597, 258, 40863, 258, 19968, 258, 20008, 258, + 20022, 258, 20031, 258, 20057, 258, 20101, 258, 20108, 258, 20128, 258, + 20154, 258, 20799, 258, 20837, 258, 20843, 258, 20866, 258, 20886, 258, + 20907, 258, 20960, 258, 20981, 258, 20992, 258, 21147, 258, 21241, 258, + 21269, 258, 21274, 258, 21304, 258, 21313, 258, 21340, 258, 21353, 258, + 21378, 258, 21430, 258, 21448, 258, 21475, 258, 22231, 258, 22303, 258, + 22763, 258, 22786, 258, 22794, 258, 22805, 258, 22823, 258, 22899, 258, + 23376, 258, 23424, 258, 23544, 258, 23567, 258, 23586, 258, 23608, 258, + 23662, 258, 23665, 258, 24027, 258, 24037, 258, 24049, 258, 24062, 258, + 24178, 258, 24186, 258, 24191, 258, 24308, 258, 24318, 258, 24331, 258, + 24339, 258, 24400, 258, 24417, 258, 24435, 258, 24515, 258, 25096, 258, + 25142, 258, 25163, 258, 25903, 258, 25908, 258, 25991, 258, 26007, 258, + 26020, 258, 26041, 258, 26080, 258, 26085, 258, 26352, 258, 26376, 258, + 26408, 258, 27424, 258, 27490, 258, 27513, 258, 27571, 258, 27595, 258, + 27604, 258, 27611, 258, 27663, 258, 27668, 258, 27700, 258, 28779, 258, + 29226, 258, 29238, 258, 29243, 258, 29247, 258, 29255, 258, 29273, 258, + 29275, 258, 29356, 258, 29572, 258, 29577, 258, 29916, 258, 29926, 258, + 29976, 258, 29983, 258, 29992, 258, 30000, 258, 30091, 258, 30098, 258, + 30326, 258, 30333, 258, 30382, 258, 30399, 258, 30446, 258, 30683, 258, + 30690, 258, 30707, 258, 31034, 258, 31160, 258, 31166, 258, 31348, 258, + 31435, 258, 31481, 258, 31859, 258, 31992, 258, 32566, 258, 32593, 258, + 32650, 258, 32701, 258, 32769, 258, 32780, 258, 32786, 258, 32819, 258, + 32895, 258, 32905, 258, 33251, 258, 33258, 258, 33267, 258, 33276, 258, + 33292, 258, 33307, 258, 33311, 258, 33390, 258, 33394, 258, 33400, 258, + 34381, 258, 34411, 258, 34880, 258, 34892, 258, 34915, 258, 35198, 258, + 35211, 258, 35282, 258, 35328, 258, 35895, 258, 35910, 258, 35925, 258, + 35960, 258, 35997, 258, 36196, 258, 36208, 258, 36275, 258, 36523, 258, + 36554, 258, 36763, 258, 36784, 258, 36789, 258, 37009, 258, 37193, 258, + 37318, 258, 37324, 258, 37329, 258, 38263, 258, 38272, 258, 38428, 258, + 38582, 258, 38585, 258, 38632, 258, 38737, 258, 38750, 258, 38754, 258, + 38761, 258, 38859, 258, 38893, 258, 38899, 258, 38913, 258, 39080, 258, + 39131, 258, 39135, 258, 39318, 258, 39321, 258, 39340, 258, 39592, 258, + 39640, 258, 39647, 258, 39717, 258, 39727, 258, 39730, 258, 39740, 258, + 39770, 258, 40165, 258, 40565, 258, 40575, 258, 40613, 258, 40635, 258, + 40643, 258, 40653, 258, 40657, 258, 40697, 258, 40701, 258, 40718, 258, + 40723, 258, 40736, 258, 40763, 258, 40778, 258, 40786, 258, 40845, 258, + 40860, 258, 40864, 264, 32, 258, 12306, 258, 21313, 258, 21316, 258, + 21317, 512, 12363, 12441, 512, 12365, 12441, 512, 12367, 12441, 512, + 12369, 12441, 512, 12371, 12441, 512, 12373, 12441, 512, 12375, 12441, + 512, 12377, 12441, 512, 12379, 12441, 512, 12381, 12441, 512, 12383, + 12441, 512, 12385, 12441, 512, 12388, 12441, 512, 12390, 12441, 512, + 12392, 12441, 512, 12399, 12441, 512, 12399, 12442, 512, 12402, 12441, + 512, 12402, 12442, 512, 12405, 12441, 512, 12405, 12442, 512, 12408, + 12441, 512, 12408, 12442, 512, 12411, 12441, 512, 12411, 12442, 512, + 12358, 12441, 514, 32, 12441, 514, 32, 12442, 512, 12445, 12441, 521, + 12424, 12426, 512, 12459, 12441, 512, 12461, 12441, 512, 12463, 12441, + 512, 12465, 12441, 512, 12467, 12441, 512, 12469, 12441, 512, 12471, + 12441, 512, 12473, 12441, 512, 12475, 12441, 512, 12477, 12441, 512, + 12479, 12441, 512, 12481, 12441, 512, 12484, 12441, 512, 12486, 12441, + 512, 12488, 12441, 512, 12495, 12441, 512, 12495, 12442, 512, 12498, + 12441, 512, 12498, 12442, 512, 12501, 12441, 512, 12501, 12442, 512, + 12504, 12441, 512, 12504, 12442, 512, 12507, 12441, 512, 12507, 12442, + 512, 12454, 12441, 512, 12527, 12441, 512, 12528, 12441, 512, 12529, + 12441, 512, 12530, 12441, 512, 12541, 12441, 521, 12467, 12488, 258, + 4352, 258, 4353, 258, 4522, 258, 4354, 258, 4524, 258, 4525, 258, 4355, + 258, 4356, 258, 4357, 258, 4528, 258, 4529, 258, 4530, 258, 4531, 258, + 4532, 258, 4533, 258, 4378, 258, 4358, 258, 4359, 258, 4360, 258, 4385, + 258, 4361, 258, 4362, 258, 4363, 258, 4364, 258, 4365, 258, 4366, 258, + 4367, 258, 4368, 258, 4369, 258, 4370, 258, 4449, 258, 4450, 258, 4451, + 258, 4452, 258, 4453, 258, 4454, 258, 4455, 258, 4456, 258, 4457, 258, + 4458, 258, 4459, 258, 4460, 258, 4461, 258, 4462, 258, 4463, 258, 4464, + 258, 4465, 258, 4466, 258, 4467, 258, 4468, 258, 4469, 258, 4448, 258, + 4372, 258, 4373, 258, 4551, 258, 4552, 258, 4556, 258, 4558, 258, 4563, + 258, 4567, 258, 4569, 258, 4380, 258, 4573, 258, 4575, 258, 4381, 258, + 4382, 258, 4384, 258, 4386, 258, 4387, 258, 4391, 258, 4393, 258, 4395, + 258, 4396, 258, 4397, 258, 4398, 258, 4399, 258, 4402, 258, 4406, 258, + 4416, 258, 4423, 258, 4428, 258, 4593, 258, 4594, 258, 4439, 258, 4440, + 258, 4441, 258, 4484, 258, 4485, 258, 4488, 258, 4497, 258, 4498, 258, + 4500, 258, 4510, 258, 4513, 259, 19968, 259, 20108, 259, 19977, 259, + 22235, 259, 19978, 259, 20013, 259, 19979, 259, 30002, 259, 20057, 259, + 19993, 259, 19969, 259, 22825, 259, 22320, 259, 20154, 770, 40, 4352, 41, + 770, 40, 4354, 41, 770, 40, 4355, 41, 770, 40, 4357, 41, 770, 40, 4358, + 41, 770, 40, 4359, 41, 770, 40, 4361, 41, 770, 40, 4363, 41, 770, 40, + 4364, 41, 770, 40, 4366, 41, 770, 40, 4367, 41, 770, 40, 4368, 41, 770, + 40, 4369, 41, 770, 40, 4370, 41, 1026, 40, 4352, 4449, 41, 1026, 40, + 4354, 4449, 41, 1026, 40, 4355, 4449, 41, 1026, 40, 4357, 4449, 41, 1026, + 40, 4358, 4449, 41, 1026, 40, 4359, 4449, 41, 1026, 40, 4361, 4449, 41, + 1026, 40, 4363, 4449, 41, 1026, 40, 4364, 4449, 41, 1026, 40, 4366, 4449, + 41, 1026, 40, 4367, 4449, 41, 1026, 40, 4368, 4449, 41, 1026, 40, 4369, + 4449, 41, 1026, 40, 4370, 4449, 41, 1026, 40, 4364, 4462, 41, 1794, 40, + 4363, 4457, 4364, 4453, 4523, 41, 1538, 40, 4363, 4457, 4370, 4462, 41, + 770, 40, 19968, 41, 770, 40, 20108, 41, 770, 40, 19977, 41, 770, 40, + 22235, 41, 770, 40, 20116, 41, 770, 40, 20845, 41, 770, 40, 19971, 41, + 770, 40, 20843, 41, 770, 40, 20061, 41, 770, 40, 21313, 41, 770, 40, + 26376, 41, 770, 40, 28779, 41, 770, 40, 27700, 41, 770, 40, 26408, 41, + 770, 40, 37329, 41, 770, 40, 22303, 41, 770, 40, 26085, 41, 770, 40, + 26666, 41, 770, 40, 26377, 41, 770, 40, 31038, 41, 770, 40, 21517, 41, + 770, 40, 29305, 41, 770, 40, 36001, 41, 770, 40, 31069, 41, 770, 40, + 21172, 41, 770, 40, 20195, 41, 770, 40, 21628, 41, 770, 40, 23398, 41, + 770, 40, 30435, 41, 770, 40, 20225, 41, 770, 40, 36039, 41, 770, 40, + 21332, 41, 770, 40, 31085, 41, 770, 40, 20241, 41, 770, 40, 33258, 41, + 770, 40, 33267, 41, 263, 21839, 263, 24188, 263, 25991, 263, 31631, 778, + 80, 84, 69, 519, 50, 49, 519, 50, 50, 519, 50, 51, 519, 50, 52, 519, 50, + 53, 519, 50, 54, 519, 50, 55, 519, 50, 56, 519, 50, 57, 519, 51, 48, 519, + 51, 49, 519, 51, 50, 519, 51, 51, 519, 51, 52, 519, 51, 53, 263, 4352, + 263, 4354, 263, 4355, 263, 4357, 263, 4358, 263, 4359, 263, 4361, 263, + 4363, 263, 4364, 263, 4366, 263, 4367, 263, 4368, 263, 4369, 263, 4370, + 519, 4352, 4449, 519, 4354, 4449, 519, 4355, 4449, 519, 4357, 4449, 519, + 4358, 4449, 519, 4359, 4449, 519, 4361, 4449, 519, 4363, 4449, 519, 4364, + 4449, 519, 4366, 4449, 519, 4367, 4449, 519, 4368, 4449, 519, 4369, 4449, + 519, 4370, 4449, 1287, 4366, 4449, 4535, 4352, 4457, 1031, 4364, 4462, + 4363, 4468, 519, 4363, 4462, 263, 19968, 263, 20108, 263, 19977, 263, + 22235, 263, 20116, 263, 20845, 263, 19971, 263, 20843, 263, 20061, 263, + 21313, 263, 26376, 263, 28779, 263, 27700, 263, 26408, 263, 37329, 263, + 22303, 263, 26085, 263, 26666, 263, 26377, 263, 31038, 263, 21517, 263, + 29305, 263, 36001, 263, 31069, 263, 21172, 263, 31192, 263, 30007, 263, + 22899, 263, 36969, 263, 20778, 263, 21360, 263, 27880, 263, 38917, 263, + 20241, 263, 20889, 263, 27491, 263, 19978, 263, 20013, 263, 19979, 263, + 24038, 263, 21491, 263, 21307, 263, 23447, 263, 23398, 263, 30435, 263, + 20225, 263, 36039, 263, 21332, 263, 22812, 519, 51, 54, 519, 51, 55, 519, + 51, 56, 519, 51, 57, 519, 52, 48, 519, 52, 49, 519, 52, 50, 519, 52, 51, + 519, 52, 52, 519, 52, 53, 519, 52, 54, 519, 52, 55, 519, 52, 56, 519, 52, + 57, 519, 53, 48, 514, 49, 26376, 514, 50, 26376, 514, 51, 26376, 514, 52, + 26376, 514, 53, 26376, 514, 54, 26376, 514, 55, 26376, 514, 56, 26376, + 514, 57, 26376, 770, 49, 48, 26376, 770, 49, 49, 26376, 770, 49, 50, + 26376, 522, 72, 103, 778, 101, 114, 103, 522, 101, 86, 778, 76, 84, 68, + 263, 12450, 263, 12452, 263, 12454, 263, 12456, 263, 12458, 263, 12459, + 263, 12461, 263, 12463, 263, 12465, 263, 12467, 263, 12469, 263, 12471, + 263, 12473, 263, 12475, 263, 12477, 263, 12479, 263, 12481, 263, 12484, + 263, 12486, 263, 12488, 263, 12490, 263, 12491, 263, 12492, 263, 12493, + 263, 12494, 263, 12495, 263, 12498, 263, 12501, 263, 12504, 263, 12507, + 263, 12510, 263, 12511, 263, 12512, 263, 12513, 263, 12514, 263, 12516, + 263, 12518, 263, 12520, 263, 12521, 263, 12522, 263, 12523, 263, 12524, + 263, 12525, 263, 12527, 263, 12528, 263, 12529, 263, 12530, 1034, 12450, + 12497, 12540, 12488, 1034, 12450, 12523, 12501, 12449, 1034, 12450, + 12531, 12506, 12450, 778, 12450, 12540, 12523, 1034, 12452, 12491, 12531, + 12464, 778, 12452, 12531, 12481, 778, 12454, 12457, 12531, 1290, 12456, + 12473, 12463, 12540, 12489, 1034, 12456, 12540, 12459, 12540, 778, 12458, + 12531, 12473, 778, 12458, 12540, 12512, 778, 12459, 12452, 12522, 1034, + 12459, 12521, 12483, 12488, 1034, 12459, 12525, 12522, 12540, 778, 12460, + 12525, 12531, 778, 12460, 12531, 12510, 522, 12462, 12460, 778, 12462, + 12491, 12540, 1034, 12461, 12517, 12522, 12540, 1034, 12462, 12523, + 12480, 12540, 522, 12461, 12525, 1290, 12461, 12525, 12464, 12521, 12512, + 1546, 12461, 12525, 12513, 12540, 12488, 12523, 1290, 12461, 12525, + 12527, 12483, 12488, 778, 12464, 12521, 12512, 1290, 12464, 12521, 12512, + 12488, 12531, 1290, 12463, 12523, 12476, 12452, 12525, 1034, 12463, + 12525, 12540, 12493, 778, 12465, 12540, 12473, 778, 12467, 12523, 12490, + 778, 12467, 12540, 12509, 1034, 12469, 12452, 12463, 12523, 1290, 12469, + 12531, 12481, 12540, 12512, 1034, 12471, 12522, 12531, 12464, 778, 12475, + 12531, 12481, 778, 12475, 12531, 12488, 778, 12480, 12540, 12473, 522, + 12487, 12471, 522, 12489, 12523, 522, 12488, 12531, 522, 12490, 12494, + 778, 12494, 12483, 12488, 778, 12495, 12452, 12484, 1290, 12497, 12540, + 12475, 12531, 12488, 778, 12497, 12540, 12484, 1034, 12496, 12540, 12524, + 12523, 1290, 12500, 12450, 12473, 12488, 12523, 778, 12500, 12463, 12523, + 522, 12500, 12467, 522, 12499, 12523, 1290, 12501, 12449, 12521, 12483, + 12489, 1034, 12501, 12451, 12540, 12488, 1290, 12502, 12483, 12471, + 12455, 12523, 778, 12501, 12521, 12531, 1290, 12504, 12463, 12479, 12540, + 12523, 522, 12506, 12477, 778, 12506, 12491, 12498, 778, 12504, 12523, + 12484, 778, 12506, 12531, 12473, 778, 12506, 12540, 12472, 778, 12505, + 12540, 12479, 1034, 12509, 12452, 12531, 12488, 778, 12508, 12523, 12488, + 522, 12507, 12531, 778, 12509, 12531, 12489, 778, 12507, 12540, 12523, + 778, 12507, 12540, 12531, 1034, 12510, 12452, 12463, 12525, 778, 12510, + 12452, 12523, 778, 12510, 12483, 12495, 778, 12510, 12523, 12463, 1290, + 12510, 12531, 12471, 12519, 12531, 1034, 12511, 12463, 12525, 12531, 522, + 12511, 12522, 1290, 12511, 12522, 12496, 12540, 12523, 522, 12513, 12460, + 1034, 12513, 12460, 12488, 12531, 1034, 12513, 12540, 12488, 12523, 778, + 12516, 12540, 12489, 778, 12516, 12540, 12523, 778, 12518, 12450, 12531, + 1034, 12522, 12483, 12488, 12523, 522, 12522, 12521, 778, 12523, 12500, + 12540, 1034, 12523, 12540, 12502, 12523, 522, 12524, 12512, 1290, 12524, + 12531, 12488, 12466, 12531, 778, 12527, 12483, 12488, 514, 48, 28857, + 514, 49, 28857, 514, 50, 28857, 514, 51, 28857, 514, 52, 28857, 514, 53, + 28857, 514, 54, 28857, 514, 55, 28857, 514, 56, 28857, 514, 57, 28857, + 770, 49, 48, 28857, 770, 49, 49, 28857, 770, 49, 50, 28857, 770, 49, 51, + 28857, 770, 49, 52, 28857, 770, 49, 53, 28857, 770, 49, 54, 28857, 770, + 49, 55, 28857, 770, 49, 56, 28857, 770, 49, 57, 28857, 770, 50, 48, + 28857, 770, 50, 49, 28857, 770, 50, 50, 28857, 770, 50, 51, 28857, 770, + 50, 52, 28857, 778, 104, 80, 97, 522, 100, 97, 522, 65, 85, 778, 98, 97, + 114, 522, 111, 86, 522, 112, 99, 522, 100, 109, 778, 100, 109, 178, 778, + 100, 109, 179, 522, 73, 85, 522, 24179, 25104, 522, 26157, 21644, 522, + 22823, 27491, 522, 26126, 27835, 1034, 26666, 24335, 20250, 31038, 522, + 112, 65, 522, 110, 65, 522, 956, 65, 522, 109, 65, 522, 107, 65, 522, 75, + 66, 522, 77, 66, 522, 71, 66, 778, 99, 97, 108, 1034, 107, 99, 97, 108, + 522, 112, 70, 522, 110, 70, 522, 956, 70, 522, 956, 103, 522, 109, 103, + 522, 107, 103, 522, 72, 122, 778, 107, 72, 122, 778, 77, 72, 122, 778, + 71, 72, 122, 778, 84, 72, 122, 522, 956, 8467, 522, 109, 8467, 522, 100, + 8467, 522, 107, 8467, 522, 102, 109, 522, 110, 109, 522, 956, 109, 522, + 109, 109, 522, 99, 109, 522, 107, 109, 778, 109, 109, 178, 778, 99, 109, + 178, 522, 109, 178, 778, 107, 109, 178, 778, 109, 109, 179, 778, 99, 109, + 179, 522, 109, 179, 778, 107, 109, 179, 778, 109, 8725, 115, 1034, 109, + 8725, 115, 178, 522, 80, 97, 778, 107, 80, 97, 778, 77, 80, 97, 778, 71, + 80, 97, 778, 114, 97, 100, 1290, 114, 97, 100, 8725, 115, 1546, 114, 97, + 100, 8725, 115, 178, 522, 112, 115, 522, 110, 115, 522, 956, 115, 522, + 109, 115, 522, 112, 86, 522, 110, 86, 522, 956, 86, 522, 109, 86, 522, + 107, 86, 522, 77, 86, 522, 112, 87, 522, 110, 87, 522, 956, 87, 522, 109, + 87, 522, 107, 87, 522, 77, 87, 522, 107, 937, 522, 77, 937, 1034, 97, 46, + 109, 46, 522, 66, 113, 522, 99, 99, 522, 99, 100, 1034, 67, 8725, 107, + 103, 778, 67, 111, 46, 522, 100, 66, 522, 71, 121, 522, 104, 97, 522, 72, + 80, 522, 105, 110, 522, 75, 75, 522, 75, 77, 522, 107, 116, 522, 108, + 109, 522, 108, 110, 778, 108, 111, 103, 522, 108, 120, 522, 109, 98, 778, + 109, 105, 108, 778, 109, 111, 108, 522, 80, 72, 1034, 112, 46, 109, 46, + 778, 80, 80, 77, 522, 80, 82, 522, 115, 114, 522, 83, 118, 522, 87, 98, + 778, 86, 8725, 109, 778, 65, 8725, 109, 514, 49, 26085, 514, 50, 26085, + 514, 51, 26085, 514, 52, 26085, 514, 53, 26085, 514, 54, 26085, 514, 55, + 26085, 514, 56, 26085, 514, 57, 26085, 770, 49, 48, 26085, 770, 49, 49, + 26085, 770, 49, 50, 26085, 770, 49, 51, 26085, 770, 49, 52, 26085, 770, + 49, 53, 26085, 770, 49, 54, 26085, 770, 49, 55, 26085, 770, 49, 56, + 26085, 770, 49, 57, 26085, 770, 50, 48, 26085, 770, 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, 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, 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, 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, @@ -3274,71 +3407,91 @@ 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, 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, + 262, 53, 262, 54, 262, 55, 262, 56, 262, 57, 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, 66, 266, 78, 266, 80, + 266, 83, 266, 87, 522, 72, 86, 522, 77, 86, 522, 83, 68, 522, 83, 83, + 778, 80, 80, 86, 522, 68, 74, 522, 12411, 12363, 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, 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, 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, @@ -3382,17 +3535,17 @@ 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 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, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 41, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 42, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 42, 7, 7, 43, 44, - 45, 46, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 43, 7, 7, 44, 45, + 46, 47, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 48, 49, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, @@ -3403,7 +3556,7 @@ 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 47, 48, 49, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 50, 51, 52, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, @@ -3828,30 +3981,74 @@ 0, 3271, 0, 3273, 0, 3275, 0, 3277, 3279, 3281, 3283, 0, 3285, 3287, 3289, 0, 3291, 3293, 3295, 3297, 3299, 3301, 3303, 0, 3305, 3309, 3311, 3313, 3315, 3317, 0, 0, 0, 0, 3319, 3321, 3323, 3325, 3327, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 3329, 3333, 3337, 3341, 3345, 3349, 3353, 3357, 3361, - 3365, 3369, 3373, 3377, 3380, 3382, 3385, 3389, 3392, 3394, 3397, 3401, - 3406, 3409, 3411, 3414, 3418, 3420, 3422, 3424, 3426, 3428, 3431, 3435, - 3438, 3440, 3443, 3447, 3452, 3455, 3457, 3460, 3464, 3466, 3468, 3470, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 3472, 3475, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 3478, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 3481, 3484, 3487, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3490, 0, 0, 0, 0, - 3493, 0, 0, 3496, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 3499, 0, 3502, 0, 0, 0, 0, 0, 3505, 3508, 0, 3512, 3515, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3519, 0, 0, 3522, 0, 0, - 3525, 0, 3528, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 3531, 0, 3534, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3537, 3540, 3543, - 3546, 3549, 0, 0, 3552, 3555, 0, 0, 3558, 3561, 0, 0, 0, 0, 0, 0, 3564, - 3567, 0, 0, 3570, 3573, 0, 0, 3576, 3579, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 3582, 3585, 3588, 3591, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 3594, 3597, 3600, 3603, 0, 0, 0, 0, 0, 0, 3606, - 3609, 3612, 3615, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3618, 3620, 0, 0, 0, + 0, 0, 3329, 3333, 3337, 3342, 3346, 3350, 3354, 3358, 3362, 3366, 3370, + 3374, 3378, 3382, 3386, 3390, 3393, 3395, 3398, 3402, 3405, 3407, 3410, + 3414, 3419, 3422, 3424, 3427, 3431, 3433, 3435, 3437, 3439, 3441, 3444, + 3448, 3451, 3453, 3456, 3460, 3465, 3468, 3470, 3473, 3477, 3479, 3481, + 3483, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3485, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 3489, 3492, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 3495, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3498, 3501, 3504, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3507, 0, + 0, 0, 0, 3510, 0, 0, 3513, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 3516, 0, 3519, 0, 0, 0, 0, 0, 3522, 3525, 0, + 3529, 3532, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3536, 0, 0, + 3539, 0, 0, 3542, 0, 3545, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 3548, 0, 3551, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3554, + 3557, 3560, 3563, 3566, 0, 0, 3569, 3572, 0, 0, 3575, 3578, 0, 0, 0, 0, + 0, 0, 3581, 3584, 0, 0, 3587, 3590, 0, 0, 3593, 3596, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 3599, 3602, 3605, 3608, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3611, 3614, 3617, 3620, 0, 0, 0, 0, + 0, 0, 3623, 3626, 3629, 3632, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3635, + 3637, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 3639, 3641, 3643, 3645, 3647, 3649, 3651, 3653, 3655, 3657, 3660, 3663, + 3666, 3669, 3672, 3675, 3678, 3681, 3684, 3687, 3690, 3694, 3698, 3702, + 3706, 3710, 3714, 3718, 3722, 3726, 3731, 3736, 3741, 3746, 3751, 3756, + 3761, 3766, 3771, 3776, 3781, 3784, 3787, 3790, 3793, 3796, 3799, 3802, + 3805, 3808, 3812, 3816, 3820, 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, 3958, 3960, 3962, 3964, 3966, 3968, 3970, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 4062, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 4067, 4071, 4074, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4081, 4083, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -3859,41 +4056,12 @@ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4085, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3622, 3624, 3626, - 3628, 3630, 3632, 3634, 3636, 3638, 3640, 3643, 3646, 3649, 3652, 3655, - 3658, 3661, 3664, 3667, 3670, 3673, 3677, 3681, 3685, 3689, 3693, 3697, - 3701, 3705, 3709, 3714, 3719, 3724, 3729, 3734, 3739, 3744, 3749, 3754, - 3759, 3764, 3767, 3770, 3773, 3776, 3779, 3782, 3785, 3788, 3791, 3795, - 3799, 3803, 3807, 3811, 3815, 3819, 3823, 3827, 3831, 3835, 3839, 3843, - 3847, 3851, 3855, 3859, 3863, 3867, 3871, 3875, 3879, 3883, 3887, 3891, - 3895, 3899, 3903, 3907, 3911, 3915, 3919, 3923, 3927, 3931, 3935, 3939, - 3941, 3943, 3945, 3947, 3949, 3951, 3953, 3955, 3957, 3959, 3961, 3963, - 3965, 3967, 3969, 3971, 3973, 3975, 3977, 3979, 3981, 3983, 3985, 3987, - 3989, 3991, 3993, 3995, 3997, 3999, 4001, 4003, 4005, 4007, 4009, 4011, - 4013, 4015, 4017, 4019, 4021, 4023, 4025, 4027, 4029, 4031, 4033, 4035, - 4037, 4039, 4041, 4043, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4045, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 4050, 4054, 4057, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4061, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 4064, 4066, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -3901,435 +4069,458 @@ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4087, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4068, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 4089, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4091, 4093, 4095, 4097, 4099, + 4101, 4103, 4105, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 4519, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4521, 0, 4523, 4525, 4527, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4529, 0, 4532, 0, 4535, 0, 4538, + 0, 4541, 0, 4544, 0, 4547, 0, 4550, 0, 4553, 0, 4556, 0, 4559, 0, 4562, + 0, 0, 4565, 0, 4568, 0, 4571, 0, 0, 0, 0, 0, 0, 4574, 4577, 0, 4580, + 4583, 0, 4586, 4589, 0, 4592, 4595, 0, 4598, 4601, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4604, 0, 0, 0, 0, 0, 0, + 4607, 4610, 0, 4613, 4616, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4619, 0, + 4622, 0, 4625, 0, 4628, 0, 4631, 0, 4634, 0, 4637, 0, 4640, 0, 4643, 0, + 4646, 0, 4649, 0, 4652, 0, 0, 4655, 0, 4658, 0, 4661, 0, 0, 0, 0, 0, 0, + 4664, 4667, 0, 4670, 4673, 0, 4676, 4679, 0, 4682, 4685, 0, 4688, 4691, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4694, + 0, 0, 4697, 4700, 4703, 4706, 0, 0, 0, 4709, 4712, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4715, 4717, 4719, + 4721, 4723, 4725, 4727, 4729, 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, 0, 0, 0, 4903, 4905, 4907, + 4909, 4911, 4913, 4915, 4917, 4919, 4921, 4923, 4925, 4927, 4929, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4931, + 4935, 4939, 4943, 4947, 4951, 4955, 4959, 4963, 4967, 4971, 4975, 4979, + 4983, 4987, 4992, 4997, 5002, 5007, 5012, 5017, 5022, 5027, 5032, 5037, + 5042, 5047, 5052, 5057, 5062, 5070, 0, 5077, 5081, 5085, 5089, 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, 5223, 5225, 5227, 0, 0, + 0, 0, 0, 0, 0, 0, 5229, 5233, 5236, 5239, 5242, 5245, 5248, 5251, 5254, + 5257, 5260, 5263, 5266, 5269, 5272, 5275, 5278, 5280, 5282, 5284, 5286, + 5288, 5290, 5292, 5294, 5296, 5298, 5300, 5302, 5304, 5306, 5309, 5312, + 5315, 5318, 5321, 5324, 5327, 5330, 5333, 5336, 5339, 5342, 5345, 5348, + 5354, 5359, 0, 5362, 5364, 5366, 5368, 5370, 5372, 5374, 5376, 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, 5463, 5466, 5469, 5472, 5475, 5478, 5481, + 5484, 5487, 5490, 5493, 5496, 5499, 5502, 5505, 5508, 5511, 5514, 5517, + 5520, 5523, 5526, 5529, 5532, 5536, 5540, 5544, 5547, 5551, 5554, 5558, + 5560, 5562, 5564, 5566, 5568, 5570, 5572, 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, 0, 5652, + 5657, 5662, 5667, 5671, 5676, 5680, 5684, 5690, 5695, 5699, 5703, 5707, + 5712, 5717, 5721, 5725, 5728, 5732, 5737, 5742, 5745, 5751, 5758, 5764, + 5768, 5774, 5780, 5785, 5789, 5793, 5797, 5802, 5808, 5813, 5817, 5821, + 5825, 5828, 5831, 5834, 5837, 5841, 5845, 5851, 5855, 5860, 5866, 5870, + 5873, 5876, 5882, 5887, 5893, 5897, 5903, 5906, 5910, 5914, 5918, 5922, + 5926, 5931, 5935, 5938, 5942, 5946, 5950, 5955, 5959, 5963, 5967, 5973, + 5978, 5981, 5987, 5990, 5995, 6000, 6004, 6008, 6012, 6017, 6020, 6024, + 6029, 6032, 6038, 6042, 6045, 6048, 6051, 6054, 6057, 6060, 6063, 6066, + 6069, 6072, 6076, 6080, 6084, 6088, 6092, 6096, 6100, 6104, 6108, 6112, + 6116, 6120, 6124, 6128, 6132, 6136, 6139, 6142, 6146, 6149, 6152, 6155, + 6159, 6163, 6166, 6169, 6172, 6175, 6178, 6183, 6186, 6189, 6192, 6195, + 6198, 6201, 6204, 6207, 6211, 6216, 6219, 6222, 6225, 6228, 6231, 6234, + 6237, 6241, 6245, 6249, 6253, 6256, 6259, 6262, 6265, 6268, 6271, 6274, + 6277, 6280, 6283, 6287, 6291, 6294, 6298, 6302, 6306, 6309, 6313, 6317, + 6322, 6325, 6329, 6333, 6337, 6341, 6347, 6354, 6357, 6360, 6363, 6366, + 6369, 6372, 6375, 6378, 6381, 6384, 6387, 6390, 6393, 6396, 6399, 6402, + 6405, 6408, 6413, 6416, 6419, 6422, 6427, 6431, 6434, 6437, 6440, 6443, + 6446, 6449, 6452, 6455, 6458, 6461, 6465, 6468, 6471, 6475, 6479, 6482, + 6487, 6491, 6494, 6497, 6500, 6503, 6507, 6511, 6514, 6517, 6520, 6523, + 6526, 6529, 6532, 6535, 6538, 6542, 6546, 6550, 6554, 6558, 6562, 6566, + 6570, 6574, 6578, 6582, 6586, 6590, 6594, 6598, 6602, 6606, 6610, 6614, + 6618, 6622, 6626, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6630, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 4070, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4072, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 4074, 4076, 4078, 4080, 4082, 4084, 4086, 4088, - 4090, 4092, 4094, 4096, 4098, 4100, 4102, 4104, 4106, 4108, 4110, 4112, - 4114, 4116, 4118, 4120, 4122, 4124, 4126, 4128, 4130, 4132, 4134, 4136, - 4138, 4140, 4142, 4144, 4146, 4148, 4150, 4152, 4154, 4156, 4158, 4160, - 4162, 4164, 4166, 4168, 4170, 4172, 4174, 4176, 4178, 4180, 4182, 4184, - 4186, 4188, 4190, 4192, 4194, 4196, 4198, 4200, 4202, 4204, 4206, 4208, - 4210, 4212, 4214, 4216, 4218, 4220, 4222, 4224, 4226, 4228, 4230, 4232, - 4234, 4236, 4238, 4240, 4242, 4244, 4246, 4248, 4250, 4252, 4254, 4256, - 4258, 4260, 4262, 4264, 4266, 4268, 4270, 4272, 4274, 4276, 4278, 4280, - 4282, 4284, 4286, 4288, 4290, 4292, 4294, 4296, 4298, 4300, 4302, 4304, - 4306, 4308, 4310, 4312, 4314, 4316, 4318, 4320, 4322, 4324, 4326, 4328, - 4330, 4332, 4334, 4336, 4338, 4340, 4342, 4344, 4346, 4348, 4350, 4352, - 4354, 4356, 4358, 4360, 4362, 4364, 4366, 4368, 4370, 4372, 4374, 4376, - 4378, 4380, 4382, 4384, 4386, 4388, 4390, 4392, 4394, 4396, 4398, 4400, - 4402, 4404, 4406, 4408, 4410, 4412, 4414, 4416, 4418, 4420, 4422, 4424, - 4426, 4428, 4430, 4432, 4434, 4436, 4438, 4440, 4442, 4444, 4446, 4448, - 4450, 4452, 4454, 4456, 4458, 4460, 4462, 4464, 4466, 4468, 4470, 4472, - 4474, 4476, 4478, 4480, 4482, 4484, 4486, 4488, 4490, 4492, 4494, 4496, - 4498, 4500, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4502, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 4504, 0, 4506, 4508, 4510, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 4512, 0, 4515, 0, 4518, 0, 4521, 0, 4524, 0, 4527, - 0, 4530, 0, 4533, 0, 4536, 0, 4539, 0, 4542, 0, 4545, 0, 0, 4548, 0, - 4551, 0, 4554, 0, 0, 0, 0, 0, 0, 4557, 4560, 0, 4563, 4566, 0, 4569, - 4572, 0, 4575, 4578, 0, 4581, 4584, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4587, 0, 0, 0, 0, 0, 0, 4590, 4593, 0, - 4596, 4599, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4602, 0, 4605, 0, 4608, - 0, 4611, 0, 4614, 0, 4617, 0, 4620, 0, 4623, 0, 4626, 0, 4629, 0, 4632, - 0, 4635, 0, 0, 4638, 0, 4641, 0, 4644, 0, 0, 0, 0, 0, 0, 4647, 4650, 0, - 4653, 4656, 0, 4659, 4662, 0, 4665, 4668, 0, 4671, 4674, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4677, 0, 0, 4680, - 4683, 4686, 4689, 0, 0, 0, 4692, 4695, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4698, 4700, 4702, 4704, 4706, - 4708, 4710, 4712, 4714, 4716, 4718, 4720, 4722, 4724, 4726, 4728, 4730, - 4732, 4734, 4736, 4738, 4740, 4742, 4744, 4746, 4748, 4750, 4752, 4754, - 4756, 4758, 4760, 4762, 4764, 4766, 4768, 4770, 4772, 4774, 4776, 4778, - 4780, 4782, 4784, 4786, 4788, 4790, 4792, 4794, 4796, 4798, 4800, 4802, - 4804, 4806, 4808, 4810, 4812, 4814, 4816, 4818, 4820, 4822, 4824, 4826, - 4828, 4830, 4832, 4834, 4836, 4838, 4840, 4842, 4844, 4846, 4848, 4850, - 4852, 4854, 4856, 4858, 4860, 4862, 4864, 4866, 4868, 4870, 4872, 4874, - 4876, 4878, 4880, 4882, 4884, 0, 0, 0, 4886, 4888, 4890, 4892, 4894, - 4896, 4898, 4900, 4902, 4904, 4906, 4908, 4910, 4912, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4914, 4918, 4922, - 4926, 4930, 4934, 4938, 4942, 4946, 4950, 4954, 4958, 4962, 4966, 4970, - 4975, 4980, 4985, 4990, 4995, 5000, 5005, 5010, 5015, 5020, 5025, 5030, - 5035, 5040, 5045, 5053, 0, 5060, 5064, 5068, 5072, 5076, 5080, 5084, - 5088, 5092, 5096, 5100, 5104, 5108, 5112, 5116, 5120, 5124, 5128, 5132, - 5136, 5140, 5144, 5148, 5152, 5156, 5160, 5164, 5168, 5172, 5176, 5180, - 5184, 5188, 5192, 5196, 5200, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5204, - 5208, 5211, 5214, 5217, 5220, 5223, 5226, 5229, 5232, 5235, 5238, 5241, - 5244, 5247, 5250, 5253, 5255, 5257, 5259, 5261, 5263, 5265, 5267, 5269, - 5271, 5273, 5275, 5277, 5279, 5281, 5284, 5287, 5290, 5293, 5296, 5299, - 5302, 5305, 5308, 5311, 5314, 5317, 5320, 5323, 5329, 5334, 0, 5337, - 5339, 5341, 5343, 5345, 5347, 5349, 5351, 5353, 5355, 5357, 5359, 5361, - 5363, 5365, 5367, 5369, 5371, 5373, 5375, 5377, 5379, 5381, 5383, 5385, - 5387, 5389, 5391, 5393, 5395, 5397, 5399, 5401, 5403, 5405, 5407, 5409, - 5411, 5413, 5415, 5417, 5419, 5421, 5423, 5425, 5427, 5429, 5431, 5433, - 5435, 5438, 5441, 5444, 5447, 5450, 5453, 5456, 5459, 5462, 5465, 5468, - 5471, 5474, 5477, 5480, 5483, 5486, 5489, 5492, 5495, 5498, 5501, 5504, - 5507, 5511, 5515, 5519, 5522, 5526, 5529, 5533, 5535, 5537, 5539, 5541, - 5543, 5545, 5547, 5549, 5551, 5553, 5555, 5557, 5559, 5561, 5563, 5565, - 5567, 5569, 5571, 5573, 5575, 5577, 5579, 5581, 5583, 5585, 5587, 5589, - 5591, 5593, 5595, 5597, 5599, 5601, 5603, 5605, 5607, 5609, 5611, 5613, - 5615, 5617, 5619, 5621, 5623, 5625, 0, 5627, 5632, 5637, 5642, 5646, - 5651, 5655, 5659, 5665, 5670, 5674, 5678, 5682, 5687, 5692, 5696, 5700, - 5703, 5707, 5712, 5717, 5720, 5726, 5733, 5739, 5743, 5749, 5755, 5760, - 5764, 5768, 5772, 5777, 5783, 5788, 5792, 5796, 5800, 5803, 5806, 5809, - 5812, 5816, 5820, 5826, 5830, 5835, 5841, 5845, 5848, 5851, 5857, 5862, - 5868, 5872, 5878, 5881, 5885, 5889, 5893, 5897, 5901, 5906, 5910, 5913, - 5917, 5921, 5925, 5930, 5934, 5938, 5942, 5948, 5953, 5956, 5962, 5965, - 5970, 5975, 5979, 5983, 5987, 5992, 5995, 5999, 6004, 6007, 6013, 6017, - 6020, 6023, 6026, 6029, 6032, 6035, 6038, 6041, 6044, 6047, 6051, 6055, - 6059, 6063, 6067, 6071, 6075, 6079, 6083, 6087, 6091, 6095, 6099, 6103, - 6107, 6111, 6114, 6117, 6121, 6124, 6127, 6130, 6134, 6138, 6141, 6144, - 6147, 6150, 6153, 6158, 6161, 6164, 6167, 6170, 6173, 6176, 6179, 6182, - 6186, 6191, 6194, 6197, 6200, 6203, 6206, 6209, 6212, 6216, 6220, 6224, - 6228, 6231, 6234, 6237, 6240, 6243, 6246, 6249, 6252, 6255, 6258, 6262, - 6266, 6269, 6273, 6277, 6281, 6284, 6288, 6292, 6297, 6300, 6304, 6308, - 6312, 6316, 6322, 6329, 6332, 6335, 6338, 6341, 6344, 6347, 6350, 6353, - 6356, 6359, 6362, 6365, 6368, 6371, 6374, 6377, 6380, 6383, 6388, 6391, - 6394, 6397, 6402, 6406, 6409, 6412, 6415, 6418, 6421, 6424, 6427, 6430, - 6433, 6436, 6440, 6443, 6446, 6450, 6454, 6457, 6462, 6466, 6469, 6472, - 6475, 6478, 6482, 6486, 6489, 6492, 6495, 6498, 6501, 6504, 6507, 6510, - 6513, 6517, 6521, 6525, 6529, 6533, 6537, 6541, 6545, 6549, 6553, 6557, - 6561, 6565, 6569, 6573, 6577, 6581, 6585, 6589, 6593, 6597, 6601, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6605, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6607, 6609, 6611, 6613, - 6615, 6617, 6619, 6621, 6623, 6625, 6627, 6629, 6631, 6633, 6635, 6637, - 6639, 6641, 6643, 6645, 6647, 6649, 6651, 6653, 6655, 6657, 6659, 6661, - 6663, 6665, 6667, 6669, 6671, 6673, 6675, 6677, 6679, 6681, 6683, 6685, - 6687, 6689, 6691, 6693, 6695, 6697, 6699, 6701, 6703, 6705, 6707, 6709, - 6711, 6713, 6715, 6717, 6719, 6721, 6723, 6725, 6727, 6729, 6731, 6733, - 6735, 6737, 6739, 6741, 6743, 6745, 6747, 6749, 6751, 6753, 6755, 6757, - 6759, 6761, 6763, 6765, 6767, 6769, 6771, 6773, 6775, 6777, 6779, 6781, - 6783, 6785, 6787, 6789, 6791, 6793, 6795, 6797, 6799, 6801, 6803, 6805, - 6807, 6809, 6811, 6813, 6815, 6817, 6819, 6821, 6823, 6825, 6827, 6829, - 6831, 6833, 6835, 6837, 6839, 6841, 6843, 6845, 6847, 6849, 6851, 6853, - 6855, 6857, 6859, 6861, 6863, 6865, 6867, 6869, 6871, 6873, 6875, 6877, - 6879, 6881, 6883, 6885, 6887, 6889, 6891, 6893, 6895, 6897, 6899, 6901, - 6903, 6905, 6907, 6909, 6911, 6913, 6915, 6917, 6919, 6921, 6923, 6925, - 6927, 6929, 6931, 6933, 6935, 6937, 6939, 6941, 6943, 6945, 6947, 6949, - 6951, 6953, 6955, 6957, 6959, 6961, 6963, 6965, 6967, 6969, 6971, 6973, - 6975, 6977, 6979, 6981, 6983, 6985, 6987, 6989, 6991, 6993, 6995, 6997, - 6999, 7001, 7003, 7005, 7007, 7009, 7011, 7013, 7015, 7017, 7019, 7021, - 7023, 7025, 7027, 7029, 7031, 7033, 7035, 7037, 7039, 7041, 7043, 7045, - 7047, 7049, 7051, 7053, 7055, 7057, 7059, 7061, 7063, 7065, 7067, 7069, - 7071, 7073, 7075, 7077, 7079, 7081, 7083, 7085, 7087, 7089, 7091, 7093, - 7095, 7097, 7099, 7101, 7103, 7105, 7107, 7109, 7111, 7113, 7115, 7117, - 7119, 7121, 7123, 7125, 7127, 7129, 7131, 7133, 7135, 7137, 7139, 7141, - 7143, 7145, 0, 0, 7147, 0, 7149, 0, 0, 7151, 7153, 7155, 7157, 7159, - 7161, 7163, 7165, 7167, 7169, 0, 7171, 0, 7173, 0, 0, 7175, 7177, 0, 0, - 0, 7179, 7181, 7183, 7185, 0, 0, 7187, 7189, 7191, 7193, 7195, 7197, - 7199, 7201, 7203, 7205, 7207, 7209, 7211, 7213, 7215, 7217, 7219, 7221, - 7223, 7225, 7227, 7229, 7231, 7233, 7235, 7237, 7239, 7241, 7243, 7245, - 7247, 7249, 7251, 7253, 7255, 7257, 7259, 7261, 7263, 7265, 7267, 7269, - 7271, 7273, 7275, 7277, 7279, 7281, 7283, 7285, 7287, 7289, 7291, 7293, - 7295, 7297, 7299, 7301, 7303, 0, 0, 0, 0, 0, 7305, 7307, 7309, 7311, - 7313, 7315, 7317, 7319, 7321, 7323, 7325, 7327, 7329, 7331, 7333, 7335, - 7337, 7339, 7341, 7343, 7345, 7347, 7349, 7351, 7353, 7355, 7357, 7359, - 7361, 7363, 7365, 7367, 7369, 7371, 7373, 7375, 7377, 7379, 7381, 7383, - 7385, 7387, 7389, 7391, 7393, 7395, 7397, 7399, 7401, 7403, 7405, 7407, - 7409, 7411, 7413, 7415, 7417, 7419, 7421, 7423, 7425, 7427, 7429, 7431, - 7433, 7435, 7437, 7439, 7441, 7443, 7445, 7447, 7449, 7451, 7453, 7455, - 7457, 7459, 7461, 7463, 7465, 7467, 7469, 7471, 7473, 7475, 7477, 7479, - 7481, 7483, 7485, 7487, 7489, 7491, 7493, 7495, 7497, 7499, 7501, 7503, - 7505, 7507, 7509, 7511, 7513, 7515, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 7517, 7520, 7523, 7526, 7530, 7534, 7537, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 7540, 7543, 7546, 7549, 7552, 0, 0, 0, 0, 0, 7555, 0, 7558, - 7561, 7563, 7565, 7567, 7569, 7571, 7573, 7575, 7577, 7579, 7581, 7584, - 7587, 7590, 7593, 7596, 7599, 7602, 7605, 7608, 7611, 7614, 7617, 0, - 7620, 7623, 7626, 7629, 7632, 0, 7635, 0, 7638, 7641, 0, 7644, 7647, 0, - 7650, 7653, 7656, 7659, 7662, 7665, 7668, 7671, 7674, 7677, 7680, 7682, - 7684, 7686, 7688, 7690, 7692, 7694, 7696, 7698, 7700, 7702, 7704, 7706, - 7708, 7710, 7712, 7714, 7716, 7718, 7720, 7722, 7724, 7726, 7728, 7730, - 7732, 7734, 7736, 7738, 7740, 7742, 7744, 7746, 7748, 7750, 7752, 7754, - 7756, 7758, 7760, 7762, 7764, 7766, 7768, 7770, 7772, 7774, 7776, 7778, - 7780, 7782, 7784, 7786, 7788, 7790, 7792, 7794, 7796, 7798, 7800, 7802, - 7804, 7806, 7808, 7810, 7812, 7814, 7816, 7818, 7820, 7822, 7824, 7826, - 7828, 7830, 7832, 7834, 7836, 7838, 7840, 7842, 7844, 7846, 7848, 7850, - 7852, 7854, 7856, 7858, 7860, 7862, 7864, 7866, 7868, 7870, 7872, 7874, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 7876, 7878, 7880, 7882, 7884, 7886, 7888, - 7890, 7892, 7894, 7896, 7898, 7900, 7902, 7904, 7906, 7908, 7910, 7912, - 7914, 7916, 7918, 7920, 7922, 7925, 7928, 7931, 7934, 7937, 7940, 7943, - 7946, 7949, 7952, 7955, 7958, 7961, 7964, 7967, 7970, 7973, 7976, 7978, - 7980, 7982, 7984, 7987, 7990, 7993, 7996, 7999, 8002, 8005, 8008, 8011, - 8014, 8017, 8020, 8023, 8026, 8029, 8032, 8035, 8038, 8041, 8044, 8047, - 8050, 8053, 8056, 8059, 8062, 8065, 8068, 8071, 8074, 8077, 8080, 8083, - 8086, 8089, 8092, 8095, 8098, 8101, 8104, 8107, 8110, 8113, 8116, 8119, - 8122, 8125, 8128, 8131, 8134, 8137, 8140, 8143, 8146, 8149, 8152, 8155, - 8158, 8161, 8164, 8167, 8170, 8173, 8176, 8179, 8182, 8185, 8188, 8191, - 8194, 8197, 8200, 8203, 8206, 8209, 8212, 8215, 8218, 8221, 8224, 8227, - 8230, 8233, 8236, 8239, 8242, 8245, 8248, 8251, 8254, 8257, 8260, 8263, - 8266, 8270, 8274, 8278, 8282, 8286, 8290, 8293, 8296, 8299, 8302, 8305, - 8308, 8311, 8314, 8317, 8320, 8323, 8326, 8329, 8332, 8335, 8338, 8341, - 8344, 8347, 8350, 8353, 8356, 8359, 8362, 8365, 8368, 8371, 8374, 8377, - 8380, 8383, 8386, 8389, 8392, 8395, 8398, 8401, 8404, 8407, 8410, 8413, - 8416, 8419, 8422, 8425, 8428, 8431, 8434, 8437, 8440, 8443, 8446, 8449, - 8452, 8455, 8458, 8461, 8464, 8467, 8470, 8473, 8476, 8479, 8482, 8485, - 8488, 8491, 8494, 8497, 8500, 8503, 8506, 8509, 8512, 8515, 8518, 8521, - 8524, 8527, 8530, 8533, 8536, 8539, 8542, 8545, 8548, 8551, 8554, 8557, - 8560, 8563, 8566, 8569, 8572, 8575, 8578, 8581, 8584, 8587, 8590, 8593, - 8596, 8599, 8602, 8605, 8608, 8611, 8614, 8617, 8620, 8623, 8626, 8629, - 8632, 8635, 8638, 8641, 8644, 8647, 8650, 8653, 8656, 8659, 8662, 8665, - 8668, 8671, 8674, 8677, 8680, 8683, 8686, 8689, 8692, 8695, 8698, 8701, - 8704, 8707, 8710, 8713, 8716, 8720, 8724, 8728, 8731, 8734, 8737, 8740, - 8743, 8746, 8749, 8752, 8755, 8758, 8761, 8764, 8767, 8770, 8773, 8776, - 8779, 8782, 8785, 8788, 8791, 8794, 8797, 8800, 8803, 8806, 8809, 8812, - 8815, 8818, 8821, 8824, 8827, 8830, 8833, 8836, 8839, 8842, 8845, 8848, - 8851, 8854, 8857, 8860, 8863, 8866, 8869, 8872, 8875, 8878, 8881, 8884, - 8887, 8890, 8893, 8896, 8899, 8902, 8905, 8908, 8911, 8914, 8917, 8920, - 8923, 8926, 8929, 8932, 8935, 8938, 8941, 8944, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8947, 8951, 8955, 8959, 8963, 8967, 8971, - 8975, 8979, 8983, 8987, 8991, 8995, 8999, 9003, 9007, 9011, 9015, 9019, - 9023, 9027, 9031, 9035, 9039, 9043, 9047, 9051, 9055, 9059, 9063, 9067, - 9071, 9075, 9079, 9083, 9087, 9091, 9095, 9099, 9103, 9107, 9111, 9115, - 9119, 9123, 9127, 9131, 9135, 9139, 9143, 9147, 9151, 9155, 9159, 9163, - 9167, 9171, 9175, 9179, 9183, 9187, 9191, 9195, 9199, 0, 0, 9203, 9207, - 9211, 9215, 9219, 9223, 9227, 9231, 9235, 9239, 9243, 9247, 9251, 9255, - 9259, 9263, 9267, 9271, 9275, 9279, 9283, 9287, 9291, 9295, 9299, 9303, - 9307, 9311, 9315, 9319, 9323, 9327, 9331, 9335, 9339, 9343, 9347, 9351, - 9355, 9359, 9363, 9367, 9371, 9375, 9379, 9383, 9387, 9391, 9395, 9399, - 9403, 9407, 9411, 9415, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 9419, 9423, 9427, 9432, 9437, 9442, 9447, 9452, 9457, 9462, 9466, 9485, - 9494, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9499, - 9501, 9503, 9505, 9507, 9509, 9511, 9513, 9515, 9517, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9519, 9521, 9523, 9525, - 9527, 9529, 9531, 9533, 9535, 9537, 9539, 9541, 9543, 9545, 9547, 9549, - 9551, 9553, 9555, 9557, 9559, 0, 0, 9561, 9563, 9565, 9567, 9569, 9571, - 9573, 9575, 9577, 9579, 9581, 9583, 0, 9585, 9587, 9589, 9591, 9593, - 9595, 9597, 9599, 9601, 9603, 9605, 9607, 9609, 9611, 9613, 9615, 9617, - 9619, 9621, 0, 9623, 9625, 9627, 9629, 0, 0, 0, 0, 9631, 9634, 9637, 0, - 9640, 0, 9643, 9646, 9649, 9652, 9655, 9658, 9661, 9664, 9667, 9670, - 9673, 9675, 9677, 9679, 9681, 9683, 9685, 9687, 9689, 9691, 9693, 9695, - 9697, 9699, 9701, 9703, 9705, 9707, 9709, 9711, 9713, 9715, 9717, 9719, - 9721, 9723, 9725, 9727, 9729, 9731, 9733, 9735, 9737, 9739, 9741, 9743, - 9745, 9747, 9749, 9751, 9753, 9755, 9757, 9759, 9761, 9763, 9765, 9767, - 9769, 9771, 9773, 9775, 9777, 9779, 9781, 9783, 9785, 9787, 9789, 9791, - 9793, 9795, 9797, 9799, 9801, 9803, 9805, 9807, 9809, 9811, 9813, 9815, - 9817, 9819, 9821, 9823, 9825, 9827, 9829, 9831, 9833, 9835, 9837, 9839, - 9841, 9843, 9845, 9847, 9849, 9851, 9853, 9855, 9857, 9859, 9861, 9863, - 9865, 9867, 9869, 9871, 9873, 9875, 9877, 9879, 9881, 9883, 9885, 9887, - 9889, 9891, 9893, 9895, 9897, 9899, 9901, 9903, 9905, 9907, 9910, 9913, - 9916, 9919, 9922, 9925, 9928, 0, 0, 0, 0, 9931, 9933, 9935, 9937, 9939, - 9941, 9943, 9945, 9947, 9949, 9951, 9953, 9955, 9957, 9959, 9961, 9963, - 9965, 9967, 9969, 9971, 9973, 9975, 9977, 9979, 9981, 9983, 9985, 9987, - 9989, 9991, 9993, 9995, 9997, 9999, 10001, 10003, 10005, 10007, 10009, - 10011, 10013, 10015, 10017, 10019, 10021, 10023, 10025, 10027, 10029, - 10031, 10033, 10035, 10037, 10039, 10041, 10043, 10045, 10047, 10049, - 10051, 10053, 10055, 10057, 10059, 10061, 10063, 10065, 10067, 10069, - 10071, 10073, 10075, 10077, 10079, 10081, 10083, 10085, 10087, 10089, - 10091, 10093, 10095, 10097, 10099, 10101, 10103, 10105, 10107, 10109, - 10111, 10113, 10115, 10117, 10119, 10121, 10123, 10125, 10127, 10129, - 10131, 10133, 10135, 10137, 10139, 10141, 10143, 10145, 10147, 10149, - 10151, 10153, 10155, 10157, 10159, 10161, 10163, 10165, 10167, 10169, - 10171, 10173, 10175, 10177, 10179, 10181, 10183, 10185, 10187, 10189, - 10191, 10193, 10195, 10197, 10199, 10201, 10203, 10205, 10207, 10209, - 10211, 10213, 10215, 10217, 10219, 10221, 10223, 10225, 10227, 10229, - 10231, 10233, 10235, 10237, 10239, 10241, 10243, 10245, 10247, 10249, - 10251, 10253, 10255, 10257, 10259, 10261, 10263, 10265, 10267, 10269, - 10271, 10273, 10275, 10277, 10279, 10281, 10283, 10285, 10287, 10289, - 10291, 10293, 10295, 10297, 10299, 10301, 10303, 10305, 10307, 10309, 0, - 0, 0, 10311, 10313, 10315, 10317, 10319, 10321, 0, 0, 10323, 10325, - 10327, 10329, 10331, 10333, 0, 0, 10335, 10337, 10339, 10341, 10343, - 10345, 0, 0, 10347, 10349, 10351, 0, 0, 0, 10353, 10355, 10357, 10359, - 10361, 10363, 10365, 0, 10367, 10369, 10371, 10373, 10375, 10377, 10379, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10381, 10384, 10387, 10390, - 10393, 10396, 10399, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10402, - 10405, 10408, 10411, 10414, 10417, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 10420, 10422, 10424, 10426, 10428, 10430, 10432, 10434, 10436, - 10438, 10440, 10442, 10444, 10446, 10448, 10450, 10452, 10454, 10456, - 10458, 10460, 10462, 10464, 10466, 10468, 10470, 10472, 10474, 10476, - 10478, 10480, 10482, 10484, 10486, 10488, 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, 0, 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, 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, 0, 10732, 10734, 0, 0, - 10736, 0, 0, 10738, 10740, 0, 0, 10742, 10744, 10746, 10748, 0, 10750, - 10752, 10754, 10756, 10758, 10760, 10762, 10764, 10766, 10768, 10770, - 10772, 0, 10774, 0, 10776, 10778, 10780, 10782, 10784, 10786, 10788, 0, - 10790, 10792, 10794, 10796, 10798, 10800, 10802, 10804, 10806, 10808, - 10810, 10812, 10814, 10816, 10818, 10820, 10822, 10824, 10826, 10828, - 10830, 10832, 10834, 10836, 10838, 10840, 10842, 10844, 10846, 10848, - 10850, 10852, 10854, 10856, 10858, 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, 0, 10920, 10922, 10924, 10926, 0, 0, - 10928, 10930, 10932, 10934, 10936, 10938, 10940, 10942, 0, 10944, 10946, - 10948, 10950, 10952, 10954, 10956, 0, 10958, 10960, 10962, 10964, 10966, - 10968, 10970, 10972, 10974, 10976, 10978, 10980, 10982, 10984, 10986, - 10988, 10990, 10992, 10994, 10996, 10998, 11000, 11002, 11004, 11006, - 11008, 11010, 11012, 0, 11014, 11016, 11018, 11020, 0, 11022, 11024, - 11026, 11028, 11030, 0, 11032, 0, 0, 0, 11034, 11036, 11038, 11040, - 11042, 11044, 11046, 0, 11048, 11050, 11052, 11054, 11056, 11058, 11060, - 11062, 11064, 11066, 11068, 11070, 11072, 11074, 11076, 11078, 11080, - 11082, 11084, 11086, 11088, 11090, 11092, 11094, 11096, 11098, 11100, - 11102, 11104, 11106, 11108, 11110, 11112, 11114, 11116, 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, 0, 0, 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, 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, 0, 0, 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, 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, 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, 12544, 12546, 12548, 12550, 12552, 12554, 12556, - 12558, 12560, 12562, 12564, 12566, 12568, 12570, 12572, 12574, 12576, - 12578, 12580, 12582, 12584, 12586, 12588, 12590, 12592, 12594, 12596, - 12598, 12600, 12602, 12604, 12606, 12608, 12610, 12612, 12614, 12616, - 12618, 12620, 12622, 12624, 12626, 12628, 12630, 12632, 12634, 12636, - 12638, 12640, 12642, 12644, 12646, 12648, 12650, 12652, 12654, 12656, - 12658, 12660, 12662, 12664, 12666, 12668, 12670, 12672, 12674, 12676, - 12678, 12680, 12682, 12684, 12686, 12688, 12690, 12692, 12694, 12696, - 12698, 12700, 12702, 12704, 12706, 12708, 12710, 12712, 12714, 12716, - 12718, 12720, 12722, 12724, 12726, 12728, 12730, 12732, 12734, 12736, - 12738, 12740, 12742, 12744, 12746, 12748, 12750, 12752, 12754, 12756, - 12758, 12760, 12762, 12764, 12766, 12768, 12770, 12772, 12774, 12776, - 12778, 12780, 12782, 12784, 12786, 12788, 12790, 12792, 12794, 12796, - 12798, 12800, 12802, 12804, 12806, 12808, 12810, 12812, 12814, 12816, - 12818, 12820, 12822, 12824, 12826, 12828, 12830, 12832, 12834, 12836, - 12838, 12840, 12842, 12844, 12846, 12848, 12850, 12852, 12854, 12856, - 12858, 12860, 12862, 12864, 12866, 12868, 12870, 12872, 12874, 12876, - 12878, 12880, 12882, 12884, 12886, 12888, 12890, 12892, 12894, 12896, - 12898, 12900, 12902, 12904, 12906, 12908, 12910, 12912, 12914, 12916, - 12918, 12920, 12922, 12924, 12926, 12928, 12930, 12932, 12934, 12936, - 12938, 12940, 12942, 12944, 12946, 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, 13002, 13004, 13006, 13008, 13010, 13012, 13014, 13016, - 13018, 13020, 13022, 13024, 13026, 13028, 13030, 13032, 13034, 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, 13122, 13124, 13126, 13128, 13130, 13132, 13134, 13136, - 13138, 13140, 13142, 13144, 13146, 13148, 13150, 13152, 13154, 13156, - 13158, 13160, 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, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 6632, 6634, 6636, 6638, 6640, 6642, 6644, 6646, 6648, 6650, 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, 0, 0, 7172, 0, 7174, 0, 0, 7176, + 7178, 7180, 7182, 7184, 7186, 7188, 7190, 7192, 7194, 0, 7196, 0, 7198, + 0, 0, 7200, 7202, 0, 0, 0, 7204, 7206, 7208, 7210, 0, 0, 7212, 7214, + 7216, 7218, 7220, 7222, 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, + 0, 0, 7336, 7338, 7340, 7342, 7344, 7346, 7348, 7350, 7352, 7354, 7356, + 7358, 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, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7548, 7551, 7554, 7557, 7561, 7565, + 7568, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7571, 7574, 7577, 7580, 7583, + 0, 0, 0, 0, 0, 7586, 0, 7589, 7592, 7594, 7596, 7598, 7600, 7602, 7604, + 7606, 7608, 7610, 7612, 7615, 7618, 7621, 7624, 7627, 7630, 7633, 7636, + 7639, 7642, 7645, 7648, 0, 7651, 7654, 7657, 7660, 7663, 0, 7666, 0, + 7669, 7672, 0, 7675, 7678, 0, 7681, 7684, 7687, 7690, 7693, 7696, 7699, + 7702, 7705, 7708, 7711, 7713, 7715, 7717, 7719, 7721, 7723, 7725, 7727, + 7729, 7731, 7733, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7907, 7909, + 7911, 7913, 7915, 7917, 7919, 7921, 7923, 7925, 7927, 7929, 7931, 7933, + 7935, 7937, 7939, 7941, 7943, 7945, 7947, 7949, 7951, 7953, 7956, 7959, + 7962, 7965, 7968, 7971, 7974, 7977, 7980, 7983, 7986, 7989, 7992, 7995, + 7998, 8001, 8004, 8007, 8009, 8011, 8013, 8015, 8018, 8021, 8024, 8027, + 8030, 8033, 8036, 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, 8301, 8305, 8309, 8313, 8317, 8321, + 8324, 8327, 8330, 8333, 8336, 8339, 8342, 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, 8751, 8755, + 8759, 8762, 8765, 8768, 8771, 8774, 8777, 8780, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8978, 8982, + 8986, 8990, 8994, 8998, 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, 0, 0, 9234, 9238, 9242, 9246, 9250, 9254, 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, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9450, 9454, 9458, 9463, 9468, 9473, 9478, + 9483, 9488, 9493, 9497, 9516, 9525, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 9530, 9532, 9534, 9536, 9538, 9540, 9542, 9544, + 9546, 9548, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 9550, 9552, 9554, 9556, 9558, 9560, 9562, 9564, 9566, 9568, 9570, + 9572, 9574, 9576, 9578, 9580, 9582, 9584, 9586, 9588, 9590, 0, 0, 9592, + 9594, 9596, 9598, 9600, 9602, 9604, 9606, 9608, 9610, 9612, 9614, 0, + 9616, 9618, 9620, 9622, 9624, 9626, 9628, 9630, 9632, 9634, 9636, 9638, + 9640, 9642, 9644, 9646, 9648, 9650, 9652, 0, 9654, 9656, 9658, 9660, 0, + 0, 0, 0, 9662, 9665, 9668, 0, 9671, 0, 9674, 9677, 9680, 9683, 9686, + 9689, 9692, 9695, 9698, 9701, 9704, 9706, 9708, 9710, 9712, 9714, 9716, + 9718, 9720, 9722, 9724, 9726, 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, 9941, 9944, 9947, 9950, 9953, 9956, 9959, 0, 0, 0, 0, + 9962, 9964, 9966, 9968, 9970, 9972, 9974, 9976, 9978, 9980, 9982, 9984, + 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, 0, 0, 0, 10342, 10344, + 10346, 10348, 10350, 10352, 0, 0, 10354, 10356, 10358, 10360, 10362, + 10364, 0, 0, 10366, 10368, 10370, 10372, 10374, 10376, 0, 0, 10378, + 10380, 10382, 0, 0, 0, 10384, 10386, 10388, 10390, 10392, 10394, 10396, + 0, 10398, 10400, 10402, 10404, 10406, 10408, 10410, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10412, 0, + 10415, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10418, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 10421, 10424, 10427, 10430, 10433, 10436, 10439, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10442, 10445, 10448, 10451, 10454, 10457, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10460, 10462, 10464, 10466, + 10468, 10470, 10472, 10474, 10476, 10478, 10480, 10482, 10484, 10486, + 10488, 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, 0, 10630, 10632, 10634, 10636, 10638, 10640, 10642, 10644, 10646, + 10648, 10650, 10652, 10654, 10656, 10658, 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, 0, 10772, 10774, 0, 0, 10776, 0, 0, 10778, 10780, 0, 0, + 10782, 10784, 10786, 10788, 0, 10790, 10792, 10794, 10796, 10798, 10800, + 10802, 10804, 10806, 10808, 10810, 10812, 0, 10814, 0, 10816, 10818, + 10820, 10822, 10824, 10826, 10828, 0, 10830, 10832, 10834, 10836, 10838, + 10840, 10842, 10844, 10846, 10848, 10850, 10852, 10854, 10856, 10858, + 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, 0, + 10960, 10962, 10964, 10966, 0, 0, 10968, 10970, 10972, 10974, 10976, + 10978, 10980, 10982, 0, 10984, 10986, 10988, 10990, 10992, 10994, 10996, + 0, 10998, 11000, 11002, 11004, 11006, 11008, 11010, 11012, 11014, 11016, + 11018, 11020, 11022, 11024, 11026, 11028, 11030, 11032, 11034, 11036, + 11038, 11040, 11042, 11044, 11046, 11048, 11050, 11052, 0, 11054, 11056, + 11058, 11060, 0, 11062, 11064, 11066, 11068, 11070, 0, 11072, 0, 0, 0, + 11074, 11076, 11078, 11080, 11082, 11084, 11086, 0, 11088, 11090, 11092, + 11094, 11096, 11098, 11100, 11102, 11104, 11106, 11108, 11110, 11112, + 11114, 11116, 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, 0, 0, 11768, 11770, + 11772, 11774, 11776, 11778, 11780, 11782, 11784, 11786, 11788, 11790, + 11792, 11794, 11796, 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, 0, + 0, 12352, 12354, 12356, 12358, 12360, 12362, 12364, 12366, 12368, 12370, + 12372, 12374, 12376, 12378, 12380, 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, 12455, 12458, 12461, 12464, 12467, 12470, 12473, 12476, 12479, + 12482, 0, 0, 0, 0, 0, 12485, 12489, 12493, 12497, 12501, 12505, 12509, + 12513, 12517, 12521, 12525, 12529, 12533, 12537, 12541, 12545, 12549, + 12553, 12557, 12561, 12565, 12569, 12573, 12577, 12581, 12585, 12589, + 12593, 12595, 12597, 12600, 0, 0, 12603, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 12605, 0, 12607, 0, 0, 12609, 0, 0, 0, 12611, 0, 0, 0, 12613, 12616, + 12619, 12622, 12625, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 12629, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12632, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12635, 12637, 12639, 12641, 12643, 12645, + 12647, 12649, 12651, 12653, 12655, 12657, 12659, 12661, 12663, 12665, + 12667, 12669, 12671, 12673, 12675, 12677, 12679, 12681, 12683, 12685, + 12687, 12689, 12691, 12693, 12695, 12697, 12699, 12701, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 12703, 12707, 12711, 12715, 12719, 12723, 12727, + 12731, 12735, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12739, 12741, + 12743, 12745, 12747, 12749, 12751, 12753, 12755, 12757, 12759, 12761, + 12763, 12765, 12767, 12769, 12771, 12773, 12775, 12777, 12779, 12781, + 12783, 12785, 12787, 12789, 12791, 12793, 12795, 12797, 12799, 12801, + 12803, 12805, 12807, 12809, 12811, 12813, 12815, 12817, 12819, 12821, + 12823, 12825, 12827, 12829, 12831, 12833, 12835, 12837, 12839, 12841, + 12843, 12845, 12847, 12849, 12851, 12853, 12855, 12857, 12859, 12861, + 12863, 12865, 12867, 12869, 12871, 12873, 12875, 12877, 12879, 12881, + 12883, 12885, 12887, 12889, 12891, 12893, 12895, 12897, 12899, 12901, + 12903, 12905, 12907, 12909, 12911, 12913, 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, 12969, 12971, 12973, 12975, 12977, 12979, 12981, + 12983, 12985, 12987, 12989, 12991, 12993, 12995, 12997, 12999, 13001, + 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, 13089, 13091, 13093, 13095, 13097, 13099, 13101, + 13103, 13105, 13107, 13109, 13111, 13113, 13115, 13117, 13119, 13121, + 13123, 13125, 13127, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -4339,352 +4530,390 @@ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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 3 +#define COMP_SHIFT 2 static unsigned short comp_index[] = { - 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 3, 0, 0, 0, 4, 5, 6, 7, - 0, 0, 0, 8, 0, 9, 10, 0, 0, 11, 12, 13, 14, 0, 0, 0, 0, 15, 16, 17, 0, 0, - 0, 18, 19, 20, 21, 0, 0, 0, 22, 0, 0, 0, 0, 0, 23, 24, 25, 26, 0, 0, 0, - 27, 28, 29, 30, 0, 0, 0, 31, 32, 33, 34, 0, 0, 0, 35, 0, 0, 0, 0, 0, 36, - 0, 37, 38, 39, 0, 0, 40, 41, 42, 43, 0, 0, 0, 44, 45, 46, 0, 0, 0, 0, 47, - 48, 49, 50, 0, 0, 51, 52, 53, 54, 0, 0, 0, 55, 56, 0, 0, 0, 0, 0, 57, 58, - 59, 60, 0, 0, 0, 61, 62, 63, 0, 0, 0, 0, 64, 65, 66, 67, 0, 0, 68, 69, - 70, 71, 0, 0, 0, 72, 0, 73, 0, 0, 0, 0, 74, 0, 75, 0, 0, 0, 0, 76, 0, 0, - 0, 0, 0, 77, 78, 79, 0, 0, 0, 0, 80, 81, 82, 83, 0, 0, 0, 84, 85, 86, 0, - 0, 0, 0, 87, 88, 0, 89, 0, 0, 90, 91, 0, 92, 0, 0, 0, 0, 93, 94, 95, 0, - 0, 0, 96, 97, 98, 99, 0, 0, 0, 100, 0, 0, 0, 0, 0, 101, 102, 0, 103, 0, - 0, 0, 104, 105, 106, 107, 0, 0, 0, 108, 109, 110, 111, 0, 0, 0, 112, 113, - 0, 0, 0, 0, 114, 115, 116, 117, 0, 0, 0, 118, 119, 120, 121, 0, 0, 0, - 122, 0, 123, 0, 0, 0, 124, 125, 126, 127, 128, 0, 0, 129, 130, 131, 132, - 0, 0, 0, 133, 134, 0, 0, 0, 0, 0, 135, 136, 137, 138, 0, 0, 139, 140, - 141, 142, 0, 0, 0, 0, 143, 144, 145, 0, 0, 0, 146, 147, 148, 149, 0, 0, - 0, 150, 0, 151, 0, 0, 0, 152, 153, 154, 0, 0, 0, 0, 0, 155, 0, 0, 0, 0, - 0, 156, 157, 158, 0, 0, 0, 0, 159, 160, 161, 162, 0, 0, 163, 0, 0, 0, - 164, 0, 0, 165, 166, 0, 0, 0, 0, 0, 167, 0, 0, 0, 0, 0, 0, 168, 0, 0, 0, - 0, 0, 169, 170, 0, 0, 0, 0, 0, 171, 0, 0, 0, 0, 0, 0, 172, 173, 0, 0, 0, - 0, 0, 174, 0, 0, 0, 0, 0, 175, 176, 0, 0, 0, 0, 0, 177, 178, 0, 0, 0, 0, - 0, 179, 0, 0, 0, 0, 0, 0, 180, 0, 0, 0, 0, 0, 181, 182, 183, 0, 0, 0, 0, - 184, 185, 0, 0, 0, 0, 0, 186, 0, 0, 0, 0, 0, 0, 187, 0, 0, 0, 0, 0, 188, - 189, 0, 0, 0, 0, 0, 190, 0, 0, 0, 0, 0, 0, 191, 192, 0, 0, 0, 0, 0, 193, - 0, 0, 0, 0, 0, 194, 195, 0, 0, 0, 0, 0, 196, 197, 0, 0, 0, 0, 0, 198, 0, - 0, 0, 0, 0, 0, 199, 0, 0, 0, 0, 0, 200, 201, 202, 0, 0, 0, 0, 203, 204, - 0, 0, 0, 0, 0, 205, 206, 0, 0, 0, 0, 0, 207, 0, 0, 0, 0, 0, 208, 0, 0, 0, - 0, 0, 0, 209, 0, 0, 0, 0, 0, 0, 210, 0, 0, 0, 0, 0, 0, 211, 0, 0, 0, 0, - 0, 0, 212, 0, 0, 0, 0, 0, 0, 213, 0, 0, 0, 0, 0, 0, 214, 0, 0, 0, 0, 0, - 215, 0, 0, 0, 0, 0, 216, 0, 0, 0, 0, 0, 0, 0, 217, 0, 0, 0, 0, 0, 0, 218, - 0, 0, 0, 0, 0, 219, 0, 0, 0, 0, 0, 220, 221, 222, 0, 0, 0, 0, 223, 224, - 225, 0, 0, 0, 0, 226, 227, 228, 0, 0, 0, 0, 229, 230, 231, 0, 0, 0, 0, 0, - 232, 0, 0, 0, 0, 0, 233, 0, 0, 0, 0, 0, 234, 0, 0, 0, 0, 0, 0, 235, 0, 0, - 0, 0, 0, 0, 236, 0, 0, 0, 0, 0, 0, 237, 0, 0, 0, 0, 0, 238, 0, 0, 0, 0, - 0, 0, 239, 0, 0, 0, 0, 0, 0, 240, 0, 0, 0, 0, 0, 0, 241, 0, 0, 0, 0, 0, - 242, 0, 243, 244, 0, 0, 0, 245, 246, 0, 0, 0, 0, 247, 0, 248, 0, 249, 0, - 0, 250, 251, 252, 0, 0, 0, 0, 253, 0, 254, 0, 0, 0, 0, 0, 255, 0, 0, 0, - 0, 256, 257, 258, 0, 0, 0, 0, 259, 0, 260, 0, 261, 0, 0, 0, 0, 0, 262, 0, - 0, 0, 0, 0, 0, 263, 0, 0, 264, 265, 266, 0, 267, 0, 0, 268, 0, 269, 0, 0, - 0, 0, 270, 0, 271, 272, 0, 0, 0, 273, 274, 0, 275, 0, 0, 276, 0, 277, 0, - 0, 0, 0, 0, 0, 278, 0, 0, 0, 0, 279, 280, 281, 282, 0, 0, 0, 283, 284, 0, - 285, 0, 0, 286, 0, 0, 0, 287, 0, 0, 288, 0, 0, 0, 289, 0, 0, 0, 0, 0, - 290, 0, 0, 0, 291, 0, 0, 0, 0, 0, 0, 292, 0, 0, 0, 0, 0, 0, 293, 0, 0, 0, - 0, 0, 294, 0, 0, 0, 0, 0, 0, 295, 0, 0, 0, 0, 0, 0, 296, 0, 0, 0, 0, 0, - 0, 297, 0, 0, 0, 0, 0, 298, 299, 0, 0, 0, 0, 0, 300, 0, 0, 0, 0, 0, 0, - 301, 0, 0, 0, 0, 0, 0, 302, 0, 0, 0, 0, 0, 0, 303, 0, 0, 0, 0, 0, 304, 0, - 0, 0, 0, 0, 0, 305, 0, 0, 0, 0, 0, 0, 306, 0, 0, 0, 0, 0, 307, 0, 0, 0, - 0, 0, 0, 308, 0, 0, 0, 0, 0, 0, 309, 0, 0, 0, 0, 0, 0, 310, 0, 0, 0, 0, - 0, 311, 312, 0, 0, 0, 0, 0, 313, 0, 0, 0, 0, 0, 0, 314, 0, 0, 0, 0, 0, 0, - 315, 0, 0, 0, 0, 0, 0, 316, 0, 0, 0, 0, 0, 317, 0, 0, 0, 0, 0, 0, 318, 0, - 0, 0, 0, 0, 0, 319, 0, 0, 0, 0, 0, 0, 320, 0, 0, 0, 0, 0, 0, 321, 0, 0, - 0, 0, 0, 322, 0, 0, 0, 0, 0, 0, 323, 0, 0, 0, 0, 0, 0, 324, 0, 0, 0, 0, - 0, 325, 0, 0, 0, 0, 0, 0, 0, 0, 0, 326, 0, 0, 0, 0, 0, 0, 327, 0, 0, 0, - 0, 0, 0, 328, 0, 0, 0, 0, 0, 329, 0, 0, 0, 0, 0, 0, 330, 0, 0, 0, 0, 0, - 0, 331, 0, 0, 0, 0, 0, 0, 332, 0, 0, 0, 0, 0, 0, 333, 0, 0, 0, 0, 0, 334, - 0, 0, 0, 0, 0, 0, 335, 0, 0, 0, 0, 0, 0, 336, 337, 0, 0, 0, 0, 0, 0, 338, - 0, 0, 0, 0, 0, 339, 0, 0, 0, 0, 0, 0, 340, 0, 0, 0, 0, 0, 0, 341, 0, 0, - 0, 0, 0, 0, 342, 0, 0, 0, 0, 0, 0, 343, 0, 0, 0, 0, 0, 344, 0, 0, 0, 0, - 0, 0, 345, 346, 0, 0, 0, 0, 0, 347, 0, 0, 0, 0, 0, 0, 348, 0, 0, 0, 0, 0, - 0, 349, 0, 0, 0, 0, 0, 0, 350, 0, 0, 0, 0, 0, 0, 351, 0, 0, 0, 0, 0, 0, - 352, 0, 0, 0, 0, 0, 353, 0, 0, 0, 0, 0, 0, 354, 0, 0, 0, 0, 0, 0, 355, 0, - 0, 0, 0, 0, 0, 356, 0, 0, 0, 0, 0, 357, 0, 0, 0, 0, 0, 0, 358, 0, 0, 0, - 0, 0, 0, 359, 0, 0, 0, 0, 0, 0, 360, 0, 0, 0, 0, 0, 361, 362, 0, 0, 0, 0, - 0, 0, 363, 0, 0, 0, 0, 0, 0, 364, 0, 0, 0, 0, 0, 0, 365, 0, 0, 0, 0, 0, - 0, 366, 0, 0, 0, 0, 0, 367, 0, 0, 0, 0, 0, 0, 368, 0, 0, 0, 0, 0, 369, - 370, 0, 0, 0, 0, 0, 371, 0, 0, 0, 0, 0, 0, 372, 0, 0, 0, 0, 0, 0, 373, 0, - 0, 0, 0, 0, 374, 0, 0, 0, 0, 0, 0, 375, 0, 0, 376, 0, 0, 0, 377, 0, 0, - 378, 0, 0, 0, 0, 0, 0, 379, 0, 0, 0, 0, 0, 0, 380, 0, 0, 0, 0, 0, 381, 0, - 0, 0, 0, 0, 0, 382, 0, 0, 0, 0, 0, 0, 383, 0, 0, 0, 0, 0, 0, 384, 0, 0, - 385, 0, 0, 386, 0, 0, 0, 387, 0, 0, 388, 0, 0, 0, 0, 0, 0, 389, 0, 0, 0, - 0, 0, 0, 390, 0, 0, 0, 0, 0, 391, 0, 0, 0, 0, 0, 0, 392, 0, 0, 0, 0, 0, - 0, 393, 0, 0, 0, 0, 0, 0, 394, 0, 0, 395, 0, 0, 0, 0, 0, 0, 396, 0, 0, 0, - 0, 0, 397, 0, 0, 0, 0, 0, 0, 398, 0, 0, 0, 0, 0, 0, 399, 0, 0, 400, 0, 0, - 0, 401, 0, 0, 402, 0, 0, 0, 0, 0, 0, 403, 0, 0, 0, 0, 0, 0, 404, 0, 0, 0, - 0, 0, 405, 0, 0, 0, 0, 0, 0, 406, 0, 0, 0, 0, 0, 0, 407, 0, 0, 0, 0, 0, - 0, 408, 0, 0, 409, 0, 0, 410, 0, 0, 0, 411, 0, 0, 412, 0, 0, 0, 0, 0, 0, - 413, 0, 0, 0, 0, 0, 0, 414, 0, 0, 0, 0, 0, 415, 0, 0, 0, 0, 0, 0, 416, 0, - 0, 0, 0, 0, 0, 417, 0, 0, 0, 0, 0, 0, 418, 0, 0, 419, 0, 0, 420, 0, 0, 0, - 421, 0, 0, 422, 0, 0, 423, 0, 0, 0, 424, 0, 0, 425, 0, 0, 0, 426, 0, 0, - 427, 0, 0, 0, 0, 0, 0, 428, 0, 0, 0, 0, 0, 429, 0, 0, 0, 0, 0, 0, 430, 0, - 0, 0, 0, 0, 0, 431, 0, 0, 432, 0, 0, 0, 433, 0, 0, 434, 0, 0, 435, 0, 0, - 0, 436, 0, 0, 437, 0, 0, 0, 438, 0, 0, 439, 0, 0, 440, 0, 0, 0, 0, 0, 0, - 441, 0, 0, 0, 0, 0, 0, 442, 0, 0, 0, 0, 0, 0, 443, 0, 0, 0, 0, 0, 444, 0, - 0, 0, 0, 0, 0, 445, 0, 0, 0, 0, 0, 0, 446, 0, 0, 447, 0, 0, 0, 448, 0, 0, - 449, 0, 0, 450, 0, 0, 0, 0, 0, 0, 451, 0, 0, 0, 0, 0, 0, 452, 0, 0, 0, 0, - 0, 0, 453, 0, 0, 0, 0, 0, 454, 0, 0, 0, 0, 0, 0, 455, 0, 0, 0, 0, 0, 0, - 456, 0, 0, 0, 0, 0, 0, 457, 0, 0, 0, 0, 0, 458, 0, 0, 0, 0, 0, 0, 459, 0, - 0, 0, 0, 0, 0, 460, 0, 0, 461, 0, 0, 0, 462, 0, 0, 0, 0, 0, 463, 0, 0, 0, - 0, 0, 0, 464, 0, 0, 465, 0, 0, 0, 466, 0, 0, 0, 0, 0, 467, 0, 0, 0, 0, 0, - 0, 468, 0, 0, 0, 0, 0, 0, 469, 0, 0, 0, 0, 0, 0, 470, 0, 0, 0, 0, 0, 471, - 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, 475, 0, 0, 0, 0, 0, 0, 476, 0, 0, 0, 0, 0, 0, 477, 0, 0, 0, - 0, 0, 0, 478, 0, 0, 0, 0, 0, 479, 0, 0, 0, 0, 0, 0, 480, 0, 0, 0, 0, 0, - 0, 481, 0, 0, 0, 0, 0, 0, 482, 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, 486, 0, 0, 0, 0, 0, 487, 0, 0, - 0, 0, 0, 0, 488, 0, 0, 0, 0, 0, 0, 489, 0, 0, 0, 0, 0, 0, 490, 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, 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, 499, 0, 0, 0, 0, 0, 0, 500, 0, 0, - 0, 0, 0, 0, 501, 0, 0, 0, 0, 0, 0, 502, 0, 0, 0, 0, 0, 503, 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, - 507, 0, 0, 0, 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, 512, 0, 0, 0, 0, 0, 0, - 513, 0, 0, 0, 0, 0, 0, 514, 0, 0, 0, 0, 0, 0, 515, 0, 0, 0, 0, 0, 516, 0, - 0, 0, 0, 0, 0, 517, 0, 0, 0, 0, 0, 0, 518, 0, 0, 0, 0, 0, 0, 519, 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, 524, 0, 0, 0, 0, 0, 0, 525, 0, 0, 0, 0, 0, 0, - 526, 0, 0, 0, 0, 0, 0, 527, 0, 0, 0, 0, 0, 528, 0, 0, 0, 0, 0, 0, 529, 0, - 0, 0, 0, 0, 0, 530, 0, 0, 0, 0, 0, 0, 531, 0, 0, 0, 0, 0, 532, 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, 536, 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, 540, 0, 0, 0, 0, 0, 0, 541, 0, 0, 0, 0, 0, 0, 542, 0, - 0, 0, 0, 0, 0, 543, 0, 0, 0, 0, 0, 544, 0, 0, 0, 0, 0, 0, 545, 0, 0, 0, - 0, 0, 0, 546, 0, 0, 0, 0, 0, 0, 547, 0, 0, 0, 0, 0, 548, 0, 0, 0, 0, 0, - 0, 549, 0, 0, 0, 0, 0, 0, 550, 0, 0, 0, 0, 0, 0, 551, 0, 0, 0, 0, 0, 552, - 0, 0, 0, 0, 0, 0, 553, 0, 0, 0, 0, 0, 0, 554, 0, 0, 0, 0, 0, 0, 555, + 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, 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, 19, 20, 21, 22, 0, 0, 0, + 0, 0, 0, 23, 24, 25, 26, 27, 28, 29, 0, 0, 0, 0, 0, 0, 0, 0, 30, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 31, 32, 33, 0, 0, 34, 0, 0, 0, 0, 0, 0, 0, 0, + 35, 36, 37, 38, 39, 40, 0, 0, 0, 0, 0, 0, 0, 41, 42, 43, 44, 45, 46, 47, + 0, 0, 0, 0, 0, 0, 0, 48, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 49, 0, + 50, 0, 51, 52, 53, 0, 0, 0, 0, 0, 0, 54, 0, 0, 55, 56, 57, 58, 59, 0, 0, + 0, 0, 0, 0, 60, 61, 0, 0, 62, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 64, 65, 0, + 66, 67, 68, 0, 0, 0, 0, 0, 0, 69, 70, 71, 72, 73, 74, 75, 0, 0, 0, 0, 0, + 0, 0, 76, 0, 77, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 78, 79, 0, 80, 81, 82, + 83, 0, 0, 0, 0, 0, 0, 0, 84, 85, 86, 0, 87, 88, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 89, 90, 0, 91, 92, 93, 0, 0, 0, 0, 0, 0, 94, 95, 96, 97, 98, 99, 100, + 0, 0, 0, 0, 0, 0, 0, 0, 101, 0, 0, 102, 0, 0, 0, 0, 0, 0, 0, 0, 0, 103, + 104, 0, 0, 105, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 106, 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, 111, 112, + 0, 113, 114, 0, 115, 0, 0, 0, 0, 0, 0, 0, 116, 117, 118, 119, 120, 121, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 122, 0, 0, 123, 0, 124, 0, 0, 0, 0, 0, 0, 125, + 126, 127, 128, 0, 129, 0, 0, 0, 0, 0, 0, 0, 0, 0, 130, 0, 131, 132, 133, + 134, 0, 0, 0, 0, 0, 0, 0, 135, 136, 137, 138, 139, 140, 141, 0, 0, 0, 0, + 0, 0, 0, 0, 142, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 143, 144, 145, 146, 0, + 147, 0, 0, 0, 0, 0, 0, 0, 0, 148, 149, 150, 151, 152, 153, 154, 0, 0, 0, + 0, 0, 0, 0, 155, 156, 157, 158, 159, 160, 161, 0, 0, 0, 0, 0, 0, 0, 162, + 0, 163, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 164, 0, 0, 165, 166, 167, 0, 168, + 0, 0, 0, 0, 0, 0, 169, 0, 0, 170, 171, 172, 173, 0, 0, 0, 0, 0, 0, 0, + 174, 175, 0, 0, 176, 0, 0, 0, 0, 0, 0, 0, 0, 177, 178, 179, 180, 0, 181, + 182, 183, 0, 0, 0, 0, 0, 0, 184, 185, 186, 187, 188, 0, 189, 0, 0, 0, 0, + 0, 0, 0, 190, 191, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 192, 193, 194, + 195, 196, 197, 198, 0, 0, 0, 0, 0, 0, 0, 199, 200, 201, 0, 202, 203, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 204, 205, 206, 207, 208, 209, 0, 0, 0, 0, 0, 0, + 210, 211, 212, 213, 214, 215, 216, 0, 0, 0, 0, 0, 0, 0, 217, 0, 0, 0, + 218, 0, 0, 0, 0, 0, 0, 0, 0, 219, 220, 221, 222, 0, 223, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 224, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 225, 226, 227, 0, + 228, 0, 0, 0, 0, 0, 0, 0, 0, 0, 229, 230, 231, 0, 232, 0, 233, 0, 0, 0, + 0, 0, 0, 234, 235, 0, 0, 0, 0, 0, 236, 0, 0, 0, 0, 0, 0, 237, 238, 239, + 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, 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, 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, 251, 252, 253, 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, 255, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 256, 257, 0, 258, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 259, 260, 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, 263, 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, 265, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 266, 267, 268, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 269, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 270, 271, 272, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 273, 274, 275, 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, 277, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 278, 279, + 0, 280, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 281, 282, 283, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 284, 285, 286, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 287, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 288, 289, 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, 291, 0, 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, 293, 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, + 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, 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, + 300, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 301, 302, 303, 0, 0, 304, 0, 0, 0, + 0, 0, 0, 0, 0, 305, 306, 307, 0, 308, 0, 0, 0, 0, 0, 0, 0, 0, 0, 309, + 310, 311, 0, 312, 0, 0, 0, 0, 0, 0, 0, 0, 0, 313, 0, 314, 0, 315, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 316, 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, 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, 0, 0, 320, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 321, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 322, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 323, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 324, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 325, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 326, 327, 0, 328, 329, 0, 0, 330, 0, 0, 0, 0, 0, 0, 331, 0, + 0, 332, 0, 0, 0, 0, 0, 0, 0, 0, 0, 333, 334, 0, 0, 335, 0, 0, 0, 336, 0, + 0, 0, 0, 0, 337, 338, 339, 0, 340, 0, 0, 0, 0, 0, 0, 0, 0, 0, 341, 0, 0, + 342, 343, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 344, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 345, 346, 347, 0, 348, 0, 0, 0, 0, 0, 0, 0, 0, 0, 349, 0, 0, 0, + 350, 0, 0, 351, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 352, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 353, 0, 0, 0, 0, 0, 354, 355, 356, 0, 357, 0, + 0, 358, 359, 0, 0, 0, 0, 0, 360, 0, 0, 0, 361, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 362, 0, 0, 363, 364, 0, 0, 365, 0, 0, 0, 0, 0, 0, 366, 367, 0, 368, 0, 0, + 0, 369, 0, 0, 0, 0, 0, 370, 371, 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, 374, 375, 376, 377, 378, 0, 0, + 379, 0, 0, 0, 0, 0, 0, 380, 0, 0, 381, 0, 0, 0, 382, 0, 0, 0, 0, 0, 383, + 384, 0, 0, 0, 0, 0, 385, 0, 0, 0, 0, 0, 0, 386, 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, 389, 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, + 0, 392, 393, 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, 396, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 397, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 398, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 399, 400, 401, 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, 404, + 405, 406, 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, 408, 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, 410, 411, 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, 414, 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, 416, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 417, 418, 419, 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, 422, 423, 424, 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, 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, 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, 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, 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, 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, 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, 0, 440, 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, 442, 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, 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, 0, 446, 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, 0, 0, 0, 0, 0, 0, 0, 449, 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, 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, 456, 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, 458, 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, 460, 0, 0, 0, 0, 0, 0, 0, 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, 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, 467, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 468, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 469, 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, 472, 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, 474, 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, 476, 477, 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, 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, 0, 0, 0, 0, 0, 0, 0, 482, 0, 0, 0, 0, 0, 0, 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, 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, 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, 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, 0, 0, 0, 0, 0, 0, 0, 497, 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, 499, 0, 0, 0, 0, 0, 0, + 0, 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, 502, 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, 0, 0, 0, 0, 0, 0, 505, + 506, 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, 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, 0, 0, 0, 0, 0, 0, 0, 512, 0, 0, 0, 0, 0, + 0, 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, 517, 0, 0, 0, 0, 0, 0, + 518, 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, 0, 0, 0, 0, 0, 0, 0, 522, 0, 0, 0, 0, 0, 0, 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, 527, 0, 0, 0, 0, 0, 0, 528, 0, 0, 0, 0, + 0, 0, 529, 0, 0, 0, 0, 0, 0, 530, 0, 0, 0, 0, 0, 0, 531, 0, 0, 0, 0, 0, + 532, 533, 0, 0, 0, 0, 0, 534, 0, 0, 0, 0, 0, 0, 535, 0, 0, 0, 0, 0, 0, + 536, 0, 0, 0, 0, 0, 0, 537, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 538, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 539, 540, 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, 543, 0, 0, 0, 0, 0, 0, 544, 0, 0, 0, 0, 0, 0, 545, 0, 0, 0, 0, 0, 546, + 547, 0, 0, 0, 0, 0, 548, 0, 0, 0, 0, 0, 0, 549, 0, 0, 0, 0, 0, 0, 550, 0, + 0, 0, 0, 0, 0, 551, 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, 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, 559, 0, 0, 0, 0, 0, 0, 560, 0, 0, 0, 0, 0, 0, + 561, 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, 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, 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, 573, 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, 577, 578, 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, 581, 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, 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, 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, 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, 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, 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, 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, + 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, 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, 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, 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, + 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, 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, 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, 0, 0, 0, 0, 0, 0, 0, 634, 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, 636, 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, + 638, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 639, 640, 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, 642, 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, + 644, 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, 646, 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, 648, 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, 650, 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, 652, 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, + 654, 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, 656, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 657, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 658, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 659, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 660, 661, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 662, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 663, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 664, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 665, 666, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 667, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 668, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 669, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 670, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 671, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 672, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 673, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 674, }; -static unsigned short comp_data[] = { - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8814, 0, 0, 0, 0, 0, 8800, 0, 0, 0, 0, - 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 7682, 0, 0, 7684, 0, 0, 0, 0, 0, 0, - 0, 0, 7686, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 262, 264, 0, 0, 0, 266, - 0, 0, 0, 0, 268, 0, 0, 0, 0, 0, 0, 0, 0, 0, 199, 0, 0, 0, 0, 0, 0, 7690, - 0, 0, 0, 0, 270, 0, 0, 0, 0, 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, 0, 0, 0, 0, - 0, 0, 0, 0, 7710, 0, 0, 0, 0, 0, 0, 0, 0, 500, 284, 0, 7712, 286, 288, 0, - 0, 0, 0, 486, 0, 0, 0, 0, 0, 0, 0, 0, 0, 290, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 292, 0, 0, 0, 7714, 7718, 0, 0, 0, 542, 0, 0, 0, 0, 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, 0, 0, 0, 0, 302, 0, 0, 7724, 0, - 0, 0, 0, 0, 0, 308, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7728, 0, 488, 0, - 0, 0, 0, 0, 7730, 0, 0, 0, 310, 0, 0, 0, 0, 7732, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 313, 0, 0, 0, 0, 0, 0, 0, 0, 0, 317, 0, 0, 0, 0, 0, 7734, 0, - 0, 0, 315, 0, 7740, 0, 0, 7738, 0, 0, 0, 0, 7742, 0, 0, 0, 0, 7744, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 7746, 0, 0, 0, 0, 504, 323, 0, 209, 0, 0, 7748, - 0, 0, 0, 0, 327, 0, 0, 0, 0, 0, 7750, 0, 0, 0, 325, 0, 7754, 0, 0, 7752, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, - 0, 0, 0, 0, 0, 7764, 0, 0, 0, 0, 7766, 0, 0, 0, 0, 0, 0, 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, 0, 0, 346, 348, 0, 0, 0, 7776, 0, 0, 0, 0, 352, 0, 0, - 0, 0, 0, 7778, 0, 0, 536, 350, 0, 0, 0, 0, 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, 0, 0, - 0, 0, 0, 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, 0, 0, 0, 0, 7804, 0, 0, 0, 0, 0, 7806, 0, 0, 0, 0, 7808, 7810, 372, 0, - 0, 0, 7814, 7812, 0, 7816, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7818, 7820, 0, - 0, 0, 0, 0, 0, 7922, 221, 374, 7928, 562, 0, 7822, 376, 7926, 0, 0, 0, 0, - 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, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 7683, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 7685, 7687, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 263, 265, 0, 0, 0, - 267, 0, 0, 0, 0, 269, 0, 231, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 7711, 0, - 0, 0, 0, 0, 0, 0, 0, 501, 285, 0, 7713, 287, 289, 0, 0, 0, 0, 487, 0, - 291, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 309, 0, 0, 0, 0, 0, - 0, 0, 0, 496, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7729, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 489, 0, 0, 0, 0, 0, 7731, 0, 0, 0, 311, 0, 0, 0, 0, 7733, 0, 0, 0, - 0, 314, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 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, 0, - 0, 0, 0, 7765, 0, 0, 0, 0, 7767, 0, 0, 0, 0, 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, 0, 0, 0, 0, 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, 0, 0, 0, 0, 7787, - 7831, 0, 0, 0, 357, 0, 0, 0, 0, 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, 0, - 0, 0, 0, 7805, 0, 0, 0, 0, 0, 7807, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 7809, 7811, 373, 0, 0, 0, 7815, 7813, 0, 7832, 0, 0, 0, 0, 0, 0, 0, 7817, - 0, 0, 7819, 7821, 0, 0, 0, 0, 0, 0, 7923, 253, 375, 7929, 563, 0, 7823, - 255, 7927, 7833, 0, 0, 0, 0, 0, 0, 0, 7925, 0, 0, 0, 0, 0, 378, 7825, 0, - 0, 0, 380, 0, 0, 0, 0, 382, 0, 0, 0, 0, 0, 7827, 0, 0, 0, 0, 0, 0, 0, 0, - 7829, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8173, 901, 0, 0, 8129, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 7846, 7844, 0, 7850, 0, 0, 0, 0, 7848, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 478, 0, 0, 506, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 508, 0, - 0, 482, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7688, 0, 0, 0, 0, 7872, 7870, 0, - 7876, 0, 0, 0, 0, 7874, 0, 0, 0, 0, 0, 0, 7726, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 7890, 7888, 0, 7894, 0, 0, 0, 0, 7892, 0, 0, 0, 0, 0, 0, - 7756, 0, 0, 556, 0, 0, 7758, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 554, 0, 0, - 510, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 475, 471, 0, 0, 469, 0, 0, 0, 0, - 0, 0, 473, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7847, 7845, 0, 7851, 0, 0, 0, 0, - 7849, 0, 0, 0, 0, 0, 0, 0, 0, 0, 479, 0, 0, 507, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 509, 0, 0, 483, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7689, 0, 0, - 0, 0, 7873, 7871, 0, 7877, 0, 0, 0, 0, 7875, 0, 0, 0, 0, 0, 0, 7727, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7891, 7889, 0, 7895, 0, 0, 0, 0, 7893, - 0, 0, 0, 0, 0, 0, 7757, 0, 0, 557, 0, 0, 7759, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 555, 0, 0, 511, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 476, 472, 0, 0, - 470, 0, 0, 0, 0, 0, 0, 474, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7856, 7854, 0, - 7860, 0, 0, 0, 0, 7858, 0, 0, 0, 0, 0, 7857, 7855, 0, 7861, 0, 0, 0, 0, - 7859, 0, 0, 0, 0, 0, 7700, 7702, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 7701, 7703, 0, 0, 0, 0, 7760, 7762, 0, 0, 0, 0, 7761, 7763, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 7780, 0, 0, 0, 0, 0, 7781, 0, 0, 0, 0, 0, 7782, 0, 0, - 0, 0, 0, 7783, 0, 0, 0, 0, 0, 0, 0, 0, 7800, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 7801, 0, 0, 0, 7802, 0, 0, 0, 0, 0, 7803, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 7835, 0, 0, 0, 0, 0, 0, 0, 7900, 7898, 0, 7904, 0, 0, - 0, 0, 7902, 0, 0, 0, 0, 0, 0, 0, 0, 7906, 0, 0, 0, 0, 7901, 7899, 0, - 7905, 0, 0, 0, 0, 7903, 0, 0, 0, 0, 0, 0, 0, 0, 7907, 0, 0, 0, 0, 7914, - 7912, 0, 7918, 0, 0, 0, 0, 7916, 0, 0, 0, 0, 0, 0, 0, 0, 7920, 0, 0, 0, - 0, 7915, 7913, 0, 7919, 0, 0, 0, 0, 7917, 0, 0, 0, 0, 0, 0, 0, 0, 7921, - 0, 0, 0, 0, 0, 0, 0, 494, 0, 0, 0, 0, 0, 0, 492, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 493, 0, 0, 0, 0, 0, 480, 0, 0, 0, 0, 0, 481, 0, 0, 0, 0, - 0, 0, 7708, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7709, 0, 0, 0, 0, 560, - 0, 0, 0, 0, 0, 561, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 495, 0, 0, 8122, - 902, 0, 0, 8121, 8120, 7944, 7945, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 8124, 8136, 904, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7960, 7961, 0, 0, 0, - 0, 0, 0, 8138, 905, 0, 0, 0, 0, 7976, 7977, 0, 0, 0, 0, 0, 8140, 0, 0, 0, - 0, 0, 0, 0, 0, 8154, 906, 0, 0, 8153, 8152, 0, 938, 0, 0, 0, 0, 0, 0, - 7992, 7993, 0, 0, 0, 0, 0, 0, 8184, 908, 0, 0, 0, 0, 8008, 8009, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8172, 0, 0, 0, 0, 0, 0, 8170, 910, 0, 0, - 8169, 8168, 0, 939, 0, 0, 0, 0, 0, 0, 0, 8025, 0, 0, 0, 0, 0, 0, 8186, - 911, 0, 0, 0, 0, 8040, 8041, 0, 0, 0, 0, 0, 8188, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 8116, 0, 0, 0, 0, 0, 8132, 0, 0, 0, 0, 0, 0, 0, 0, 8048, - 940, 0, 0, 8113, 8112, 0, 0, 0, 0, 0, 0, 0, 0, 7936, 7937, 0, 0, 0, 0, - 8118, 8115, 0, 0, 0, 0, 0, 0, 0, 0, 8050, 941, 0, 0, 0, 0, 7952, 7953, 0, - 0, 0, 0, 0, 0, 8052, 942, 0, 0, 0, 0, 7968, 7969, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 8134, 8131, 8054, 943, 0, 0, 8145, 8144, 0, 970, 0, 0, 0, 0, - 0, 0, 7984, 7985, 0, 0, 0, 0, 8150, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8056, 972, - 0, 0, 0, 0, 8000, 8001, 0, 0, 0, 0, 8164, 8165, 0, 0, 0, 0, 0, 0, 8058, - 973, 0, 0, 8161, 8160, 0, 971, 0, 0, 0, 0, 0, 0, 8016, 8017, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 8166, 0, 8060, 974, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 8032, 8033, 0, 0, 0, 0, 8182, 8179, 0, 0, 0, 0, 0, 0, 0, 0, 8146, - 912, 0, 0, 8151, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8162, 944, 0, 0, 8167, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8180, 0, 979, 0, 0, 0, 0, 0, 980, 0, - 0, 0, 0, 0, 1031, 0, 0, 0, 1232, 0, 1234, 0, 0, 0, 0, 0, 0, 0, 1027, 0, - 0, 0, 0, 1024, 0, 0, 0, 0, 1238, 0, 1025, 0, 0, 0, 1217, 0, 1244, 0, 0, - 0, 0, 0, 1246, 0, 0, 0, 0, 0, 0, 1037, 0, 0, 0, 1250, 1049, 0, 1252, 0, - 0, 0, 0, 0, 0, 0, 1036, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1254, 0, 0, - 1262, 1038, 0, 1264, 0, 0, 1266, 0, 0, 1268, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 1272, 0, 0, 0, 0, 0, 1260, 0, 0, 0, 1233, 0, 1235, 0, 0, 0, - 0, 0, 0, 0, 1107, 0, 0, 0, 0, 1104, 0, 0, 0, 0, 1239, 0, 1105, 0, 0, 0, - 1218, 0, 1245, 0, 0, 0, 0, 0, 1247, 0, 0, 0, 0, 0, 0, 1117, 0, 0, 0, - 1251, 1081, 0, 1253, 0, 0, 0, 0, 0, 0, 0, 1116, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 1255, 0, 0, 1263, 1118, 0, 1265, 0, 0, 1267, 0, 0, 1269, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1273, 0, 0, 0, 0, 0, 1261, 0, 0, 0, 0, - 0, 1111, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1142, 0, 0, 0, 0, 0, 1143, 0, 0, - 0, 0, 0, 0, 0, 0, 1242, 0, 0, 0, 0, 0, 1243, 0, 0, 0, 0, 0, 1258, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1259, 0, 0, 0, 0, 1570, 1571, 1573, 0, - 0, 0, 0, 1572, 0, 0, 0, 0, 0, 1574, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1730, 0, 0, 0, 0, 0, 1747, 0, 0, 0, 0, 0, 1728, 0, 0, 0, 0, 0, 0, 0, - 2345, 0, 0, 0, 0, 0, 2353, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2356, - 0, 0, 0, 0, 0, 0, 2507, 2508, 0, 0, 0, 0, 0, 0, 2891, 2888, 2892, 0, 0, - 0, 0, 0, 0, 0, 2964, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3018, 3020, 0, - 0, 0, 0, 3019, 0, 0, 0, 0, 0, 0, 0, 3144, 0, 0, 0, 0, 0, 0, 0, 3264, 0, - 0, 0, 0, 3274, 3271, 3272, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3275, 0, - 0, 0, 0, 0, 0, 0, 3402, 3404, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3403, - 0, 0, 0, 0, 0, 0, 0, 3546, 3548, 3550, 0, 0, 0, 3549, 0, 0, 0, 0, 0, 0, - 0, 0, 4134, 0, 0, 0, 0, 0, 0, 6918, 0, 0, 0, 0, 0, 6920, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 6922, 0, 0, 0, 0, 0, 6924, 0, 0, 0, 0, 0, 6926, - 0, 0, 0, 0, 0, 6930, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6971, 0, 0, - 0, 0, 0, 6973, 0, 0, 0, 0, 0, 6976, 0, 0, 0, 0, 0, 6977, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 6979, 0, 0, 0, 0, 0, 0, 7736, 0, 0, 0, 0, 0, - 7737, 0, 0, 0, 0, 0, 7772, 0, 0, 0, 0, 0, 7773, 0, 0, 0, 0, 0, 0, 0, - 7784, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7785, 0, 7852, 0, 0, 7862, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7853, 0, 0, 7863, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 7878, 0, 0, 0, 0, 0, 7879, 0, 0, 0, 0, 0, 7896, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 7897, 0, 0, 0, 7938, 7940, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 7942, 8064, 7939, 7941, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7943, 8065, - 0, 0, 0, 0, 0, 8066, 0, 0, 0, 0, 0, 8067, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 8068, 0, 0, 0, 0, 0, 8069, 0, 0, 0, 0, 0, 8070, 0, 0, 0, 0, 0, - 8071, 0, 0, 0, 0, 0, 0, 0, 0, 7946, 7948, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 7950, 8072, 7947, 7949, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7951, 8073, 0, 0, - 0, 0, 0, 8074, 0, 0, 0, 0, 0, 8075, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 8076, 0, 0, 0, 0, 0, 8077, 0, 0, 0, 0, 0, 8078, 0, 0, 0, 0, 0, 8079, - 0, 0, 0, 0, 0, 0, 0, 0, 7954, 7956, 0, 0, 0, 0, 7955, 7957, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 7962, 7964, 0, 0, 0, 0, 7963, 7965, 0, 0, 0, 0, - 7970, 7972, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7974, 8080, 7971, 7973, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 7975, 8081, 0, 0, 0, 0, 0, 8082, 0, 0, 0, 0, 0, - 8083, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8084, 0, 0, 0, 0, 0, 8085, - 0, 0, 0, 0, 0, 8086, 0, 0, 0, 0, 0, 8087, 0, 0, 0, 0, 0, 0, 0, 0, 7978, - 7980, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7982, 8088, 7979, 7981, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 7983, 8089, 0, 0, 0, 0, 0, 8090, 0, 0, 0, 0, 0, 8091, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8092, 0, 0, 0, 0, 0, 8093, 0, 0, - 0, 0, 0, 8094, 0, 0, 0, 0, 0, 8095, 0, 0, 0, 0, 0, 0, 0, 0, 7986, 7988, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7990, 0, 7987, 7989, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 7991, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7994, 7996, 0, 0, 7998, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 7995, 7997, 0, 0, 7999, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 8002, 8004, 0, 0, 0, 0, 8003, 8005, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 8010, 8012, 0, 0, 0, 0, 8011, 8013, 0, 0, 0, 0, 8018, 8020, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 8022, 0, 8019, 8021, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 8023, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8027, 8029, 0, 0, 8031, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 8034, 8036, 0, 0, 8038, 8096, 0, 0, 0, 0, 0, 0, 0, 0, 8035, - 8037, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8039, 8097, 0, 0, 0, 0, 0, 8098, 0, - 0, 0, 0, 0, 8099, 0, 0, 0, 0, 0, 8100, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 8101, 0, 0, 0, 0, 0, 8102, 0, 0, 0, 0, 0, 8103, 0, 0, 0, 0, 0, 0, - 0, 0, 8042, 8044, 0, 0, 8046, 8104, 0, 0, 0, 0, 0, 0, 0, 0, 8043, 8045, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8047, 8105, 0, 0, 0, 0, 0, 8106, 0, 0, 0, - 0, 0, 8107, 0, 0, 0, 0, 0, 8108, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 8109, 0, 0, 0, 0, 0, 8110, 0, 0, 0, 0, 0, 8111, 0, 0, 0, 0, 0, 8114, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8130, 0, 0, 0, 0, 0, 8178, 0, 0, 0, - 0, 0, 8119, 0, 0, 0, 0, 0, 0, 0, 0, 8141, 8142, 0, 0, 8143, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8135, 0, 0, 0, 0, 0, 8183, 0, 0, 0, 0, 0, - 0, 0, 0, 8157, 8158, 0, 0, 8159, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 8602, 0, 0, 0, 0, 0, 8603, 0, 0, 0, 0, 0, 8622, 0, 0, 0, 0, 0, 8653, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8655, 0, 0, 0, 0, 0, 8654, 0, 0, 0, - 0, 0, 8708, 0, 0, 0, 0, 0, 8713, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 8716, 0, 0, 0, 0, 0, 8740, 0, 0, 0, 0, 0, 8742, 0, 0, 0, 0, 0, 8769, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8772, 0, 0, 0, 0, 0, 8775, 0, 0, 0, - 0, 0, 8777, 0, 0, 0, 0, 0, 8813, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 8802, 0, 0, 0, 0, 0, 8816, 0, 0, 0, 0, 0, 8817, 0, 0, 0, 0, 0, 8820, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8821, 0, 0, 0, 0, 0, 8824, 0, 0, 0, - 0, 0, 8825, 0, 0, 0, 0, 0, 8832, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 8833, 0, 0, 0, 0, 0, 8928, 0, 0, 0, 0, 0, 8929, 0, 0, 0, 0, 0, 8836, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8837, 0, 0, 0, 0, 0, 8840, 0, 0, 0, - 0, 0, 8841, 0, 0, 0, 0, 0, 8930, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 8931, 0, 0, 0, 0, 0, 8876, 0, 0, 0, 0, 0, 8877, 0, 0, 0, 0, 0, 8878, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8879, 0, 0, 0, 0, 0, 8938, 0, 0, 0, - 0, 0, 8939, 0, 0, 0, 0, 0, 8940, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 8941, 0, 0, 0, 0, 0, 0, 12436, 0, 0, 0, 0, 0, 12364, 0, 0, 0, 0, 0, - 12366, 0, 0, 0, 0, 0, 12368, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 12370, 0, 0, 0, 0, 0, 12372, 0, 0, 0, 0, 0, 12374, 0, 0, 0, 0, 0, 12376, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12378, 0, 0, 0, 0, 0, 12380, 0, 0, - 0, 0, 0, 12382, 0, 0, 0, 0, 0, 12384, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 12386, 0, 0, 0, 0, 0, 12389, 0, 0, 0, 0, 0, 12391, 0, 0, 0, 0, 0, - 12393, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12400, 12401, 0, 0, 0, 0, - 12403, 12404, 0, 0, 0, 0, 12406, 12407, 0, 0, 0, 0, 12409, 12410, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12412, 12413, 0, 0, 0, 0, 12446, 0, 0, 0, - 0, 0, 12532, 0, 0, 0, 0, 0, 12460, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 12462, 0, 0, 0, 0, 0, 12464, 0, 0, 0, 0, 0, 12466, 0, 0, 0, 0, 0, 12468, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12470, 0, 0, 0, 0, 0, 12472, 0, 0, - 0, 0, 0, 12474, 0, 0, 0, 0, 0, 12476, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 12478, 0, 0, 0, 0, 0, 12480, 0, 0, 0, 0, 0, 12482, 0, 0, 0, 0, 0, - 12485, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12487, 0, 0, 0, 0, 0, - 12489, 0, 0, 0, 0, 0, 12496, 12497, 0, 0, 0, 0, 12499, 12500, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 12502, 12503, 0, 0, 0, 0, 12505, 12506, 0, 0, 0, - 0, 12508, 12509, 0, 0, 0, 0, 12535, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 12536, 0, 0, 0, 0, 0, 12537, 0, 0, 0, 0, 0, 12538, 0, 0, 0, 0, 0, - 12542, 0, +static unsigned int comp_data[] = { + 0, 0, 0, 0, 0, 0, 0, 8814, 0, 0, 8800, 0, 0, 8815, 0, 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, 7682, 0, 0, 7684, 0, 0, 0, 0, 7686, 0, 262, + 264, 0, 0, 0, 266, 0, 0, 0, 0, 268, 0, 199, 0, 0, 0, 7690, 0, 0, 0, 0, + 270, 0, 0, 0, 0, 0, 7692, 0, 0, 0, 7696, 0, 7698, 0, 0, 7694, 0, 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, 0, 7710, 0, 500, 284, 0, + 7712, 286, 288, 0, 0, 0, 0, 486, 0, 290, 0, 0, 0, 292, 0, 0, 0, 7714, + 7718, 0, 0, 0, 542, 0, 0, 0, 0, 0, 7716, 0, 0, 0, 7720, 0, 0, 7722, 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, 308, 0, 7728, 0, 0, 0, 0, + 0, 488, 0, 7730, 0, 0, 0, 310, 0, 0, 0, 0, 7732, 0, 0, 0, 0, 0, 313, 0, + 317, 0, 0, 0, 0, 0, 7734, 0, 0, 0, 315, 0, 7740, 0, 0, 7738, 0, 0, 0, 0, + 0, 7742, 0, 0, 0, 0, 7744, 0, 0, 7746, 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, 0, 0, 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, 0, 0, 0, 7764, 7766, 0, 0, 0, 0, 0, + 340, 0, 0, 0, 0, 7768, 344, 528, 530, 0, 0, 0, 7770, 0, 0, 0, 342, 0, 0, + 0, 0, 7774, 0, 346, 348, 0, 0, 0, 7776, 0, 0, 0, 0, 352, 0, 7778, 0, 0, + 536, 350, 0, 0, 0, 7786, 0, 0, 0, 0, 356, 0, 7788, 0, 0, 538, 354, 0, + 7792, 0, 0, 7790, 0, 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, 7804, 0, 0, 0, 0, 0, 7806, 0, 7808, 7810, 372, 0, 0, 0, 7814, 7812, + 0, 7816, 0, 0, 0, 7818, 7820, 0, 0, 0, 7922, 221, 374, 7928, 562, 0, + 7822, 376, 7926, 0, 0, 0, 0, 7924, 0, 0, 377, 7824, 0, 0, 0, 379, 381, 0, + 0, 0, 0, 0, 7826, 0, 0, 0, 0, 7828, 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, 7683, 0, 0, 7685, 0, 0, 0, 0, 7687, 0, 0, 0, 0, 0, 263, 265, 0, 0, 0, + 267, 0, 0, 0, 0, 269, 0, 0, 0, 0, 0, 231, 0, 0, 0, 7691, 271, 0, 0, 0, 0, + 0, 7693, 0, 0, 0, 7697, 0, 7699, 0, 0, 7695, 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, 7711, 0, 0, 0, 0, 0, 501, 285, 0, 7713, 287, + 289, 0, 0, 0, 0, 487, 0, 0, 0, 0, 0, 291, 0, 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, 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, 309, 0, 0, 0, 0, 496, + 0, 0, 0, 0, 7729, 0, 489, 0, 0, 0, 0, 0, 7731, 0, 0, 0, 311, 7733, 0, 0, + 0, 0, 0, 314, 0, 318, 0, 0, 0, 0, 0, 7735, 0, 0, 0, 316, 0, 7741, 0, 0, + 7739, 0, 7743, 0, 0, 0, 0, 7745, 0, 0, 7747, 0, 0, 0, 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, 0, 0, 0, 242, 243, 244, 245, 333, 335, 559, 246, 7887, 0, 337, + 466, 525, 527, 0, 0, 417, 7885, 491, 0, 0, 0, 0, 0, 7765, 0, 0, 0, 0, + 7767, 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, 347, 349, 0, 0, 0, 7777, 0, 0, 0, 0, + 353, 0, 7779, 0, 0, 537, 351, 0, 0, 0, 7787, 7831, 0, 0, 0, 357, 0, 0, 0, + 0, 0, 7789, 0, 0, 539, 355, 0, 7793, 0, 0, 7791, 0, 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, 0, 7805, 0, 7807, 0, 0, + 0, 0, 0, 7809, 7811, 373, 0, 0, 0, 7815, 7813, 0, 7832, 0, 0, 0, 7817, 0, + 0, 0, 7819, 7821, 0, 0, 0, 7923, 253, 375, 7929, 563, 0, 7823, 255, 7927, + 7833, 0, 0, 0, 7925, 0, 0, 378, 7825, 0, 0, 0, 380, 0, 0, 0, 0, 382, 0, + 7827, 0, 0, 0, 0, 7829, 0, 0, 0, 0, 8173, 901, 0, 0, 0, 0, 0, 0, 8129, 0, + 0, 7846, 7844, 0, 7850, 0, 0, 0, 0, 7848, 0, 0, 478, 0, 0, 0, 506, 0, 0, + 508, 0, 0, 482, 0, 0, 0, 7688, 0, 7872, 7870, 0, 7876, 0, 0, 0, 0, 7874, + 0, 0, 0, 7726, 0, 0, 0, 0, 0, 7890, 7888, 0, 7894, 0, 0, 0, 0, 7892, 0, + 0, 0, 7756, 0, 0, 556, 0, 0, 7758, 0, 0, 0, 554, 0, 0, 0, 510, 0, 0, 0, + 0, 0, 475, 471, 0, 0, 469, 0, 0, 473, 0, 0, 0, 7847, 7845, 0, 7851, 0, 0, + 0, 0, 7849, 0, 0, 479, 0, 0, 0, 507, 0, 0, 509, 0, 0, 483, 0, 0, 0, 7689, + 0, 7873, 7871, 0, 7877, 0, 0, 0, 0, 7875, 0, 0, 0, 7727, 0, 0, 0, 0, 0, + 7891, 7889, 0, 7895, 0, 0, 0, 0, 7893, 0, 0, 0, 7757, 0, 0, 557, 0, 0, + 7759, 0, 0, 0, 555, 0, 0, 0, 511, 0, 0, 0, 0, 0, 476, 472, 0, 0, 470, 0, + 0, 474, 0, 0, 0, 7856, 7854, 0, 7860, 0, 0, 0, 0, 7858, 0, 0, 7857, 7855, + 0, 7861, 0, 0, 0, 0, 7859, 0, 0, 7700, 7702, 0, 0, 0, 0, 0, 7701, 7703, + 0, 0, 0, 0, 0, 7760, 7762, 0, 7761, 7763, 0, 0, 0, 7780, 0, 0, 7781, 0, + 0, 7782, 0, 0, 0, 0, 0, 0, 7783, 0, 7800, 0, 0, 7801, 0, 0, 0, 0, 7802, + 0, 0, 7803, 0, 0, 0, 0, 0, 7835, 0, 0, 0, 0, 7900, 7898, 0, 7904, 0, 0, + 0, 0, 7902, 7906, 0, 0, 0, 0, 0, 7901, 7899, 0, 7905, 0, 0, 0, 0, 7903, + 0, 0, 0, 0, 7907, 0, 7914, 7912, 0, 7918, 0, 0, 0, 0, 7916, 0, 0, 0, 0, + 7920, 0, 7915, 7913, 0, 7919, 7917, 0, 0, 0, 0, 7921, 0, 0, 0, 0, 494, 0, + 0, 0, 492, 0, 0, 493, 0, 0, 480, 0, 0, 0, 0, 0, 0, 481, 0, 0, 0, 7708, 0, + 0, 7709, 0, 560, 0, 0, 0, 0, 0, 0, 561, 0, 495, 0, 0, 0, 8122, 902, 0, 0, + 8121, 8120, 0, 0, 0, 0, 7944, 7945, 0, 0, 0, 0, 0, 8124, 0, 8136, 904, 0, + 0, 0, 0, 7960, 7961, 0, 0, 0, 8138, 905, 0, 0, 0, 0, 7976, 7977, 0, 8140, + 0, 0, 0, 0, 0, 8154, 906, 0, 0, 8153, 8152, 0, 938, 0, 0, 7992, 7993, 0, + 0, 0, 8184, 908, 0, 0, 0, 0, 8008, 8009, 0, 0, 0, 0, 0, 0, 8172, 0, 0, 0, + 8170, 910, 0, 0, 8169, 8168, 0, 939, 0, 0, 0, 8025, 0, 0, 0, 8186, 911, + 8040, 8041, 0, 0, 0, 0, 0, 8188, 0, 0, 8116, 0, 0, 8132, 0, 0, 0, 0, 0, + 8048, 940, 0, 0, 8113, 8112, 0, 0, 0, 0, 7936, 7937, 0, 0, 0, 0, 8118, + 8115, 0, 0, 0, 0, 0, 8050, 941, 7952, 7953, 0, 0, 0, 8052, 942, 0, 0, 0, + 0, 7968, 7969, 0, 0, 0, 0, 8134, 8131, 0, 8054, 943, 0, 0, 8145, 8144, 0, + 970, 0, 0, 7984, 7985, 8150, 0, 0, 0, 0, 0, 0, 8056, 972, 0, 0, 0, 0, + 8000, 8001, 0, 8164, 8165, 0, 0, 0, 8058, 973, 0, 0, 8161, 8160, 0, 971, + 0, 0, 0, 0, 0, 0, 8016, 8017, 0, 0, 0, 0, 8166, 0, 0, 8060, 974, 0, 0, 0, + 0, 8032, 8033, 8182, 8179, 0, 0, 0, 0, 0, 8146, 912, 0, 0, 0, 0, 0, 0, + 8151, 0, 0, 8162, 944, 0, 0, 8167, 0, 0, 0, 8180, 0, 0, 979, 0, 0, 0, 0, + 0, 980, 0, 0, 1031, 0, 0, 0, 0, 1232, 0, 1234, 0, 0, 0, 0, 1027, 0, 1024, + 0, 0, 0, 0, 1238, 0, 1025, 1217, 0, 1244, 0, 0, 1246, 0, 0, 0, 1037, 0, + 0, 0, 1250, 1049, 0, 1252, 0, 0, 0, 0, 1036, 0, 0, 0, 0, 1254, 0, 0, 0, + 1262, 1038, 0, 1264, 0, 0, 1266, 0, 0, 0, 1268, 0, 0, 0, 0, 0, 0, 1272, + 0, 0, 1260, 0, 0, 0, 0, 1233, 0, 1235, 0, 0, 0, 0, 1107, 0, 1104, 0, 0, + 0, 0, 1239, 0, 1105, 1218, 0, 1245, 0, 0, 1247, 0, 0, 0, 1117, 0, 0, 0, + 1251, 1081, 0, 1253, 0, 0, 0, 0, 1116, 0, 0, 0, 0, 1255, 0, 0, 0, 1263, + 1118, 0, 1265, 0, 0, 1267, 0, 0, 0, 1269, 0, 0, 0, 0, 0, 0, 1273, 0, 0, + 1261, 0, 0, 1111, 0, 0, 0, 1142, 0, 0, 1143, 0, 0, 0, 0, 0, 1242, 0, 0, + 1243, 0, 0, 1258, 0, 0, 0, 0, 0, 0, 1259, 0, 1570, 1571, 1573, 0, 1572, + 0, 0, 1574, 0, 0, 0, 0, 0, 0, 1730, 0, 0, 1747, 0, 0, 1728, 0, 0, 0, 0, + 2345, 0, 0, 2353, 0, 0, 2356, 0, 0, 0, 2507, 2508, 0, 0, 0, 2891, 2888, + 2892, 2964, 0, 0, 0, 0, 0, 3018, 3020, 0, 3019, 0, 0, 0, 0, 3144, 0, 0, + 0, 0, 3264, 0, 3274, 3271, 3272, 0, 3275, 0, 0, 0, 0, 3402, 3404, 0, + 3403, 0, 0, 0, 0, 3546, 3548, 3550, 0, 0, 0, 0, 3549, 0, 0, 0, 0, 0, + 4134, 0, 0, 0, 6918, 0, 0, 6920, 0, 0, 6922, 0, 0, 6924, 0, 0, 0, 0, 0, + 0, 6926, 0, 0, 6930, 0, 0, 6971, 0, 0, 6973, 0, 0, 0, 0, 0, 0, 6976, 0, + 0, 6977, 0, 0, 6979, 0, 0, 0, 7736, 0, 0, 7737, 0, 0, 0, 0, 0, 0, 7772, + 0, 0, 7773, 0, 0, 0, 0, 7784, 0, 0, 7785, 0, 0, 7852, 0, 0, 7862, 0, 0, + 0, 7853, 0, 0, 7863, 0, 0, 0, 7878, 0, 0, 7879, 0, 0, 7896, 0, 0, 7897, + 0, 0, 0, 0, 7938, 7940, 0, 0, 7942, 8064, 0, 7939, 7941, 0, 0, 7943, + 8065, 0, 0, 8066, 0, 0, 0, 0, 0, 0, 8067, 0, 0, 8068, 0, 0, 8069, 0, 0, + 8070, 0, 0, 0, 0, 0, 0, 8071, 0, 7946, 7948, 0, 0, 7950, 8072, 0, 7947, + 7949, 0, 0, 7951, 8073, 0, 0, 8074, 0, 0, 0, 0, 0, 0, 8075, 0, 0, 8076, + 0, 0, 8077, 0, 0, 8078, 0, 0, 0, 0, 0, 0, 8079, 0, 7954, 7956, 0, 7955, + 7957, 0, 0, 0, 0, 0, 7962, 7964, 0, 0, 0, 0, 0, 7963, 7965, 0, 7970, + 7972, 0, 0, 7974, 8080, 0, 7971, 7973, 0, 0, 7975, 8081, 0, 0, 8082, 0, + 0, 0, 0, 0, 0, 8083, 0, 0, 8084, 0, 0, 8085, 0, 0, 8086, 0, 0, 0, 0, 0, + 0, 8087, 0, 7978, 7980, 0, 0, 7982, 8088, 0, 7979, 7981, 0, 0, 7983, + 8089, 0, 0, 8090, 0, 0, 0, 0, 0, 0, 8091, 0, 0, 8092, 0, 0, 8093, 0, 0, + 8094, 0, 0, 0, 0, 0, 0, 8095, 0, 7986, 7988, 0, 0, 7990, 0, 0, 7987, + 7989, 0, 0, 7991, 0, 0, 0, 0, 0, 0, 7994, 7996, 0, 0, 0, 0, 0, 0, 7998, + 0, 0, 7995, 7997, 0, 0, 7999, 0, 0, 8002, 8004, 0, 8003, 8005, 0, 0, 0, + 0, 0, 8010, 8012, 0, 0, 0, 0, 0, 8011, 8013, 0, 8018, 8020, 0, 0, 8022, + 0, 0, 8019, 8021, 0, 0, 8023, 0, 0, 0, 0, 0, 0, 8027, 8029, 0, 0, 0, 0, + 0, 0, 8031, 0, 0, 8034, 8036, 0, 0, 8038, 8096, 0, 8035, 8037, 0, 0, + 8039, 8097, 0, 0, 8098, 0, 0, 8099, 0, 0, 0, 0, 0, 0, 8100, 0, 0, 8101, + 0, 0, 8102, 0, 0, 8103, 0, 0, 0, 0, 0, 8042, 8044, 0, 0, 8046, 8104, 0, + 8043, 8045, 0, 0, 8047, 8105, 0, 0, 8106, 0, 0, 8107, 0, 0, 0, 0, 0, 0, + 8108, 0, 0, 8109, 0, 0, 8110, 0, 0, 8111, 0, 0, 0, 0, 0, 0, 8114, 0, 0, + 8130, 0, 0, 8178, 0, 0, 8119, 0, 0, 0, 0, 0, 8141, 8142, 0, 0, 8143, 0, + 0, 0, 8135, 0, 0, 8183, 0, 0, 0, 0, 0, 8157, 8158, 0, 0, 0, 0, 0, 0, + 8159, 0, 8602, 0, 0, 8603, 0, 0, 0, 0, 0, 0, 8622, 0, 0, 8653, 0, 0, + 8655, 0, 0, 8654, 0, 0, 0, 0, 0, 0, 8708, 0, 0, 8713, 0, 0, 8716, 0, 0, + 8740, 0, 0, 0, 0, 0, 0, 8742, 0, 0, 8769, 0, 0, 8772, 0, 0, 8775, 0, 0, + 0, 0, 0, 0, 8777, 0, 0, 8813, 0, 0, 8802, 0, 0, 8816, 0, 0, 0, 0, 0, 0, + 8817, 0, 0, 8820, 0, 0, 8821, 0, 0, 8824, 0, 0, 0, 0, 0, 0, 8825, 0, 0, + 8832, 0, 0, 8833, 0, 0, 8928, 0, 0, 0, 0, 0, 0, 8929, 0, 0, 8836, 0, 0, + 8837, 0, 0, 8840, 0, 0, 0, 0, 0, 0, 8841, 0, 0, 8930, 0, 0, 8931, 0, 0, + 8876, 0, 0, 0, 0, 0, 0, 8877, 0, 0, 8878, 0, 0, 8879, 0, 0, 8938, 0, 0, + 0, 0, 0, 0, 8939, 0, 0, 8940, 0, 0, 8941, 0, 0, 0, 12436, 0, 0, 12364, 0, + 0, 0, 0, 0, 0, 12366, 0, 0, 12368, 0, 0, 12370, 0, 0, 12372, 0, 0, 0, 0, + 0, 0, 12374, 0, 0, 12376, 0, 0, 12378, 0, 0, 12380, 0, 0, 0, 0, 0, 0, + 12382, 0, 0, 12384, 0, 0, 12386, 0, 0, 12389, 0, 0, 0, 0, 0, 0, 12391, 0, + 0, 12393, 0, 0, 12400, 12401, 0, 12403, 12404, 0, 0, 0, 0, 0, 12406, + 12407, 0, 0, 0, 0, 0, 12409, 12410, 0, 12412, 12413, 0, 12446, 0, 0, 0, + 0, 0, 0, 12532, 0, 0, 12460, 0, 0, 12462, 0, 0, 12464, 0, 0, 0, 0, 0, 0, + 12466, 0, 0, 12468, 0, 0, 12470, 0, 0, 12472, 0, 0, 0, 0, 0, 0, 12474, 0, + 0, 12476, 0, 0, 12478, 0, 0, 12480, 0, 0, 0, 0, 0, 0, 12482, 0, 0, 12485, + 0, 0, 12487, 0, 0, 12489, 0, 0, 0, 0, 0, 0, 12496, 12497, 0, 0, 0, 0, 0, + 12499, 12500, 0, 12502, 12503, 0, 12505, 12506, 0, 0, 0, 0, 0, 12508, + 12509, 0, 0, 0, 0, 0, 12535, 0, 0, 12536, 0, 0, 12537, 0, 0, 0, 0, 0, 0, + 12538, 0, 0, 12542, 0, 0, 0, 0, 69786, 0, 0, 69788, 0, 0, 69803, }; static const change_record change_records_3_2_0[] = { @@ -4700,6 +4929,11 @@ { 255, 29, 255, 255, 0 }, { 255, 26, 255, 255, 0 }, { 5, 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 }, @@ -4729,42 +4963,42 @@ { 255, 23, 255, 255, 0 }, { 9, 255, 255, 255, 0 }, { 255, 20, 255, 255, 0 }, - { 255, 255, 255, 255, -1 }, { 255, 255, 255, 255, 1e+16 }, { 255, 255, 255, 255, 1e+20 }, { 255, 19, 255, 255, 0 }, { 15, 255, 255, 255, 0 }, { 255, 19, 255, 255, -1 }, + { 1, 255, 255, 0, 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, 2, 2, 14, 15, 16, 17, - 18, 19, 20, 21, 22, 2, 2, 2, 23, 24, 25, 26, 2, 2, 27, 28, 29, 30, 2, 2, - 2, 2, 2, 31, 2, 32, 33, 34, 35, 36, 37, 2, 38, 39, 40, 2, 41, 42, 2, 43, - 2, 2, 44, 45, 46, 47, 48, 2, 2, 49, 50, 51, 2, 2, 52, 53, 2, 54, 55, 55, - 2, 2, 2, 2, 56, 2, 57, 58, 59, 60, 61, 2, 2, 2, 2, 62, 63, 64, 65, 66, - 67, 68, 69, 70, 2, 2, 2, 2, 2, 2, 71, 2, 2, 2, 2, 2, 72, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 73, 2, 74, 2, 2, 2, 2, 2, 2, 2, 2, 75, 76, 2, 2, 2, - 2, 2, 2, 2, 77, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 78, 79, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 80, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 0, 1, 2, 2, 3, 4, 5, 6, 2, 7, 8, 9, 10, 11, 12, 13, 14, 2, 15, 16, 17, + 18, 19, 20, 21, 22, 23, 2, 2, 2, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, + 34, 2, 2, 2, 35, 36, 2, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, + 49, 2, 50, 2, 2, 51, 52, 53, 54, 55, 2, 2, 56, 57, 58, 2, 2, 59, 60, 61, + 62, 63, 63, 2, 2, 2, 2, 64, 2, 65, 66, 67, 68, 69, 2, 2, 2, 2, 70, 71, + 72, 73, 74, 75, 76, 77, 78, 2, 2, 2, 2, 2, 2, 79, 2, 2, 2, 2, 2, 80, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 81, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 82, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 83, 84, 2, 2, 2, 2, 2, 2, 2, 2, 2, 41, 41, 85, 86, 41, 87, - 88, 89, 90, 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, 2, 2, 81, 2, 82, 2, 2, 2, 2, 2, 2, 2, 2, 83, + 84, 2, 2, 2, 2, 2, 2, 2, 85, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 86, 87, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 88, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 89, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 90, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 91, 92, 2, 2, 2, 2, 2, 2, 2, 2, 93, 48, 48, + 94, 95, 48, 96, 97, 98, 99, 100, 101, 102, 2, 103, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 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, 93, 94, 95, - 96, 2, 2, 2, 2, 97, 98, 2, 99, 100, 101, 102, 103, 104, 2, 105, 106, 107, - 108, 109, 2, 2, 2, 2, 2, 2, 110, 2, 111, 2, 112, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 104, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 41, 41, 41, 41, 41, 41, 113, 2, 114, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 105, 106, 107, 108, 109, 2, 2, 2, 2, 110, 111, 2, 112, 113, 114, + 115, 116, 117, 2, 118, 119, 120, 121, 122, 2, 2, 2, 2, 2, 2, 123, 2, 124, + 2, 125, 2, 126, 2, 127, 2, 2, 2, 128, 2, 2, 2, 2, 129, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 48, 48, 48, 48, 48, 48, 130, 2, 131, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 48, 48, 48, 48, 48, 48, 48, 48, 132, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, @@ -4777,33 +5011,33 @@ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 115, 2, 116, 2, 117, 2, 2, 118, 2, 2, 2, 119, - 120, 121, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 122, 123, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 124, 125, 82, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 71, 126, 2, 127, 128, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 133, 2, 134, 2, 135, 2, 2, 136, 2, 2, 2, 137, 138, 139, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 129, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 130, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 131, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 132, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 140, 141, 142, 143, + 144, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 145, 146, 90, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 79, 147, 2, 148, 149, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 150, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 151, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 152, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 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, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, + 48, 154, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 129, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 150, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, @@ -5037,8 +5271,9 @@ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 41, 133, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 48, + 155, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, @@ -5101,7 +5336,7 @@ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 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[] = { @@ -5149,7 +5384,7 @@ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 0, 0, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -5179,263 +5414,305 @@ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 7, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 0, 0, 0, 0, 0, + 0, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 12, 13, 14, 15, 16, 0, 0, 7, 0, 0, 0, 0, 0, 7, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, + 0, 0, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 0, 0, 0, 0, 0, + 0, 0, 0, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 0, + 17, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 0, 0, 0, 7, 7, 7, 7, 7, 7, + 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 18, 18, 18, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, + 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 7, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, + 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 0, 12, 0, 0, 0, 0, 0, 0, 12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 0, 0, 0, 0, 0, + 0, 0, 0, 7, 7, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, - 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 7, 7, 7, 7, 7, 7, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 13, 13, 13, 13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, + 7, 7, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 7, 0, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, - 0, 7, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 0, 0, 0, 0, 7, 7, 7, 7, 7, - 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 7, - 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 0, 7, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 0, 0, 0, 0, 0, + 0, 0, 0, 19, 20, 21, 22, 23, 24, 25, 26, 27, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 0, 0, 0, 0, 0, 0, - 0, 0, 14, 15, 16, 17, 18, 19, 20, 21, 22, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 18, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 23, 23, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 24, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 28, 28, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 29, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, + 0, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 7, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, - 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, - 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 0, 0, 0, 0, 7, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 7, 7, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, + 7, 7, 7, 0, 0, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, + 0, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, - 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, + 0, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 7, - 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, 0, 0, 0, 0, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 27, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, 0, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, - 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 28, 0, 0, 0, 29, 30, 31, 32, 33, 34, - 1, 1, 0, 0, 0, 0, 28, 6, 4, 5, 29, 30, 31, 32, 33, 34, 1, 1, 0, 0, 0, 0, - 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, + 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 7, 7, 7, 7, 7, + 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, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, 0, 7, 7, 7, + 7, 7, 7, 7, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 33, 8, 0, + 0, 34, 35, 36, 37, 38, 39, 1, 1, 0, 0, 0, 8, 33, 6, 4, 5, 34, 35, 36, 37, + 38, 39, 1, 1, 0, 0, 0, 0, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, - 0, 0, 0, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, + 0, 0, 0, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 36, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 40, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 41, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, 37, 38, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 43, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, - 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, - 39, 39, 39, 39, 39, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 44, 44, 44, 44, 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, 39, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 7, 7, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 7, 7, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 0, 0, 0, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 7, 7, 7, 7, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 0, 7, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, - 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, - 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, - 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, - 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, - 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, - 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, - 27, 27, 27, 27, 27, 27, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 7, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 32, + 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, + 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, + 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, + 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, + 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, + 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, + 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 7, 7, 7, 7, 7, 0, 0, 0, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, + 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, + 7, 7, 7, 7, 7, 7, 7, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 0, 7, 7, 7, 7, 7, 7, 7, 0, 7, 7, 7, 7, 7, 7, 7, 0, 7, 7, 7, 7, 7, 7, 7, 0, 7, 7, 7, 7, 7, 7, 7, 0, 7, 7, 7, 7, 7, 7, 7, 0, 7, 7, 7, 7, 7, 7, 7, 0, - 7, 7, 7, 7, 7, 7, 7, 0, 7, 7, 7, 7, 7, 7, 7, 0, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -5443,83 +5720,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, 40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 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, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, - 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 41, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 41, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 41, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 41, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 41, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 41, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 41, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 46, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 41, 0, 0, 0, 0, 0, 0, 0, 41, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 41, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -5528,50 +5805,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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 41, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 41, 0, 0, 0, 0, 0, 0, 0, 41, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, + 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 41, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 41, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -5579,50 +5862,70 @@ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 41, 0, 0, 0, 0, - 0, 0, 0, 41, 0, 0, 0, 0, 41, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 41, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 41, 0, 41, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 41, 0, 0, + 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 0, + 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, @@ -5630,158 +5933,202 @@ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 13, 13, 13, 13, 13, 13, 0, 0, 0, 1, 1, 13, 13, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 18, 18, 18, 18, 18, 18, 0, 0, 0, 1, 1, 18, + 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, 40, + 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 49, 49, 49, 0, 0, 0, 0, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 0, 7, 7, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, + 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 7, - 7, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 7, 7, 7, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, - 0, 0, 0, 7, 7, 7, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, - 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 7, 7, 7, 7, 7, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, - 0, 0, 0, 0, 0, 41, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 7, 7, 7, 7, 7, 7, + 0, 0, 0, 0, 0, 50, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 7, 7, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, + 7, 7, 0, 0, 7, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, + 7, 7, 0, 7, 7, 0, 0, 0, 7, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 0, 0, 7, 0, 7, 7, 7, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, 0, 7, 7, 0, 0, 0, 0, 0, + 7, 7, 7, 7, 7, 7, 7, 7, 0, 7, 7, 7, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 7, 7, 7, 0, + 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 7, 7, 0, 0, 0, 7, - 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, - 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 7, 7, 7, 7, 0, 7, 7, 0, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 0, - 7, 7, 7, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 7, 7, 7, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, 7, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, - 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 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, 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, 13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 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, 13, 0, - 0, 0, 0, 0, 0, 7, 7, 0, 0, 0, 0, 0, 0, 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, 51, + 0, 0, 0, 0, 0, 0, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 41, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 7, 0, 0, 7, 0, + 0, 0, 7, 0, 0, 0, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, + 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 7, 0, 7, 7, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, + 7, 7, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 41, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 41, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 41, 0, - 0, 0, 0, 0, 0, 0, 0, 41, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 41, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, + 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -5789,25 +6136,25 @@ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 41, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 41, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 41, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 41, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 41, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 41, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -5816,13 +6163,18 @@ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 41, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 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) Modified: python/trunk/Modules/unicodename_db.h ============================================================================== --- python/trunk/Modules/unicodename_db.h (original) +++ python/trunk/Modules/unicodename_db.h Thu Mar 18 22:50:06 2010 @@ -6,15229 +6,17251 @@ static unsigned char lexicon[] = { 76, 69, 84, 84, 69, 210, 87, 73, 84, 200, 83, 77, 65, 76, 204, 83, 89, 76, 76, 65, 66, 76, 197, 83, 73, 71, 206, 67, 65, 80, 73, 84, 65, 204, - 76, 65, 84, 73, 206, 89, 201, 67, 74, 203, 65, 82, 65, 66, 73, 195, 67, - 79, 77, 80, 65, 84, 73, 66, 73, 76, 73, 84, 217, 77, 65, 84, 72, 69, 77, - 65, 84, 73, 67, 65, 204, 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, 79, 76, 196, 71, 82, 69, 69, 203, - 76, 73, 71, 65, 84, 85, 82, 197, 68, 73, 71, 73, 212, 65, 78, 196, 77, - 85, 83, 73, 67, 65, 204, 84, 73, 77, 69, 211, 69, 84, 72, 73, 79, 80, 73, - 195, 72, 65, 78, 71, 85, 204, 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, 86, 79, 87, 69, 204, 70, 79, 210, 67, 73, 82, 67, 76, 69, - 196, 86, 65, 201, 70, 73, 78, 65, 204, 67, 79, 77, 66, 73, 78, 73, 78, - 199, 83, 81, 85, 65, 82, 197, 86, 65, 82, 73, 65, 84, 73, 79, 206, 66, - 82, 65, 73, 76, 76, 197, 80, 65, 84, 84, 69, 82, 206, 82, 73, 71, 72, - 212, 76, 69, 70, 212, 66, 89, 90, 65, 78, 84, 73, 78, 197, 73, 83, 79, - 76, 65, 84, 69, 196, 194, 65, 66, 79, 86, 69, 128, 68, 79, 85, 66, 76, - 197, 75, 65, 84, 65, 75, 65, 78, 193, 75, 65, 78, 71, 88, 201, 76, 73, - 78, 69, 65, 210, 66, 69, 76, 79, 87, 128, 77, 79, 68, 73, 70, 73, 69, - 210, 83, 73, 71, 78, 128, 84, 73, 66, 69, 84, 65, 206, 77, 69, 69, 205, - 68, 79, 212, 65, 128, 65, 82, 82, 79, 87, 128, 73, 78, 73, 84, 73, 65, - 204, 67, 65, 82, 82, 73, 69, 210, 86, 69, 82, 84, 73, 67, 65, 204, 89, - 69, 200, 87, 72, 73, 84, 197, 65, 66, 79, 86, 197, 78, 85, 77, 66, 69, - 210, 85, 128, 65, 82, 82, 79, 215, 77, 79, 78, 71, 79, 76, 73, 65, 206, - 77, 89, 65, 78, 77, 65, 210, 67, 79, 80, 84, 73, 195, 75, 72, 77, 69, - 210, 79, 128, 73, 128, 84, 73, 76, 197, 77, 65, 82, 75, 128, 66, 79, 216, - 72, 69, 66, 82, 69, 215, 80, 76, 85, 211, 68, 82, 65, 87, 73, 78, 71, - 211, 82, 73, 71, 72, 84, 87, 65, 82, 68, 211, 83, 84, 82, 79, 75, 69, + 76, 65, 84, 73, 206, 89, 201, 67, 74, 203, 69, 71, 89, 80, 84, 73, 65, + 206, 72, 73, 69, 82, 79, 71, 76, 89, 80, 200, 65, 82, 65, 66, 73, 195, + 67, 79, 77, 80, 65, 84, 73, 66, 73, 76, 73, 84, 217, 77, 65, 84, 72, 69, + 77, 65, 84, 73, 67, 65, 204, 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, 68, 73, 71, 73, 212, 66, 79, 76, + 196, 72, 65, 78, 71, 85, 204, 71, 82, 69, 69, 203, 76, 73, 71, 65, 84, + 85, 82, 197, 65, 78, 196, 77, 85, 83, 73, 67, 65, 204, 84, 73, 77, 69, + 211, 69, 84, 72, 73, 79, 80, 73, 195, 86, 79, 87, 69, 204, 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, 67, 73, 82, 67, 76, 69, + 196, 70, 79, 210, 67, 79, 77, 66, 73, 78, 73, 78, 199, 84, 65, 201, 86, + 65, 201, 70, 73, 78, 65, 204, 83, 81, 85, 65, 82, 197, 86, 65, 82, 73, + 65, 84, 73, 79, 206, 76, 69, 70, 212, 66, 82, 65, 73, 76, 76, 197, 80, + 65, 84, 84, 69, 82, 206, 82, 73, 71, 72, 212, 66, 89, 90, 65, 78, 84, 73, + 78, 197, 73, 83, 79, 76, 65, 84, 69, 196, 194, 65, 66, 79, 86, 69, 128, + 68, 79, 85, 66, 76, 197, 75, 65, 84, 65, 75, 65, 78, 193, 75, 65, 78, 71, + 88, 201, 78, 85, 77, 66, 69, 210, 83, 73, 71, 78, 128, 66, 69, 76, 79, + 87, 128, 76, 73, 78, 69, 65, 210, 77, 79, 68, 73, 70, 73, 69, 210, 84, + 73, 66, 69, 84, 65, 206, 65, 128, 68, 79, 212, 77, 69, 69, 205, 77, 89, + 65, 78, 77, 65, 210, 67, 65, 82, 82, 73, 69, 210, 65, 82, 82, 79, 87, + 128, 73, 78, 73, 84, 73, 65, 204, 87, 72, 73, 84, 197, 85, 128, 86, 69, + 82, 84, 73, 67, 65, 204, 89, 69, 200, 65, 66, 79, 86, 197, 73, 128, 79, + 128, 67, 79, 80, 84, 73, 195, 65, 82, 82, 79, 215, 77, 79, 78, 71, 79, + 76, 73, 65, 206, 77, 65, 82, 75, 128, 75, 72, 77, 69, 210, 68, 69, 86, + 65, 78, 65, 71, 65, 82, 201, 84, 73, 76, 197, 80, 65, 82, 69, 78, 84, 72, + 69, 83, 73, 90, 69, 196, 84, 72, 65, 205, 66, 76, 65, 67, 203, 74, 79, + 78, 71, 83, 69, 79, 78, 199, 66, 79, 216, 72, 69, 66, 82, 69, 215, 80, + 76, 85, 211, 68, 82, 65, 87, 73, 78, 71, 211, 82, 73, 71, 72, 84, 87, 65, + 82, 68, 211, 67, 72, 79, 83, 69, 79, 78, 199, 83, 84, 82, 79, 75, 69, 128, 72, 65, 76, 70, 87, 73, 68, 84, 200, 66, 65, 76, 73, 78, 69, 83, - 197, 66, 76, 65, 67, 203, 71, 69, 79, 82, 71, 73, 65, 206, 72, 79, 79, - 75, 128, 73, 68, 69, 79, 71, 82, 65, 205, 73, 68, 69, 79, 71, 82, 65, 80, - 72, 73, 195, 84, 65, 201, 65, 76, 69, 198, 80, 65, 82, 69, 78, 84, 72, - 69, 83, 73, 90, 69, 196, 68, 69, 86, 65, 78, 65, 71, 65, 82, 201, 83, 67, - 82, 73, 80, 212, 84, 79, 128, 213, 83, 89, 77, 66, 79, 76, 128, 85, 208, - 70, 85, 76, 76, 87, 73, 68, 84, 200, 72, 65, 200, 68, 79, 87, 206, 66, - 82, 65, 67, 75, 69, 84, 128, 69, 81, 85, 65, 204, 79, 198, 79, 86, 69, - 210, 84, 65, 199, 68, 79, 77, 73, 78, 207, 70, 82, 65, 75, 84, 85, 210, - 78, 85, 77, 69, 82, 73, 195, 72, 69, 65, 86, 217, 84, 87, 79, 128, 77, - 65, 76, 65, 89, 65, 76, 65, 205, 71, 76, 65, 71, 79, 76, 73, 84, 73, 195, - 67, 72, 65, 82, 65, 67, 84, 69, 210, 76, 69, 70, 84, 87, 65, 82, 68, 211, - 79, 78, 69, 128, 84, 69, 76, 85, 71, 213, 65, 82, 77, 69, 78, 73, 65, - 206, 66, 69, 78, 71, 65, 76, 201, 67, 72, 79, 83, 69, 79, 78, 199, 74, - 69, 69, 205, 77, 69, 68, 73, 65, 204, 66, 65, 82, 128, 72, 73, 82, 65, - 71, 65, 78, 193, 87, 69, 83, 84, 45, 67, 82, 69, 197, 84, 72, 65, 201, - 75, 65, 78, 78, 65, 68, 193, 67, 72, 69, 82, 79, 75, 69, 197, 72, 65, 76, - 198, 73, 68, 69, 79, 71, 82, 65, 80, 200, 79, 82, 73, 89, 193, 84, 87, - 207, 67, 72, 65, 205, 71, 85, 74, 65, 82, 65, 84, 201, 74, 79, 78, 71, - 83, 69, 79, 78, 199, 78, 69, 215, 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, 76, 85, 197, 83, 73, 78, 72, 65, 76, 193, 71, 85, 82, - 77, 85, 75, 72, 201, 78, 79, 84, 65, 84, 73, 79, 206, 83, 89, 82, 73, 65, - 195, 84, 72, 82, 69, 197, 86, 79, 67, 65, 76, 73, 195, 72, 65, 128, 65, - 67, 85, 84, 69, 128, 76, 69, 80, 67, 72, 193, 76, 73, 71, 72, 212, 70, - 79, 85, 82, 128, 68, 79, 85, 66, 76, 69, 45, 83, 84, 82, 85, 67, 203, 84, - 65, 77, 73, 204, 65, 80, 204, 70, 85, 78, 67, 84, 73, 79, 78, 65, 204, - 72, 65, 77, 90, 193, 77, 65, 82, 203, 84, 72, 82, 69, 69, 128, 84, 69, - 76, 69, 71, 82, 65, 80, 200, 79, 78, 197, 72, 79, 82, 73, 90, 79, 78, 84, - 65, 204, 74, 85, 78, 71, 83, 69, 79, 78, 199, 66, 65, 82, 194, 68, 65, - 83, 73, 193, 70, 73, 86, 69, 128, 76, 73, 77, 66, 213, 77, 65, 75, 83, - 85, 82, 193, 66, 79, 80, 79, 77, 79, 70, 207, 75, 65, 128, 75, 72, 65, - 82, 79, 83, 72, 84, 72, 201, 76, 65, 207, 84, 207, 72, 69, 88, 65, 71, - 82, 65, 205, 76, 79, 78, 199, 83, 73, 88, 128, 76, 79, 215, 80, 83, 73, - 76, 201, 69, 73, 71, 72, 84, 128, 75, 193, 77, 79, 78, 79, 83, 80, 65, - 67, 197, 78, 79, 212, 89, 65, 128, 78, 73, 78, 69, 128, 83, 128, 83, 69, - 86, 69, 78, 128, 83, 84, 82, 79, 75, 197, 86, 128, 68, 79, 84, 211, 77, - 65, 128, 82, 69, 86, 69, 82, 83, 69, 196, 72, 73, 71, 200, 75, 72, 65, - 200, 76, 79, 87, 69, 210, 78, 75, 207, 84, 73, 76, 68, 69, 128, 84, 79, - 78, 197, 78, 85, 77, 69, 82, 65, 204, 82, 65, 128, 84, 85, 82, 78, 69, - 196, 65, 69, 71, 69, 65, 206, 72, 128, 80, 65, 128, 71, 128, 76, 65, 71, - 65, 194, 80, 72, 65, 71, 83, 45, 80, 193, 67, 89, 80, 82, 73, 79, 212, - 68, 73, 65, 69, 82, 69, 83, 73, 83, 128, 83, 85, 78, 68, 65, 78, 69, 83, - 197, 84, 73, 70, 73, 78, 65, 71, 200, 68, 128, 80, 65, 83, 83, 73, 86, - 69, 45, 80, 85, 76, 76, 45, 68, 79, 87, 78, 45, 79, 85, 84, 80, 85, 212, - 66, 89, 69, 76, 79, 82, 85, 83, 83, 73, 65, 78, 45, 85, 75, 82, 65, 73, - 78, 73, 65, 206, 67, 69, 79, 78, 71, 67, 72, 73, 69, 85, 77, 83, 83, 65, - 78, 71, 67, 73, 69, 85, 67, 128, 80, 65, 83, 83, 73, 86, 69, 45, 80, 85, - 76, 76, 45, 85, 80, 45, 79, 85, 84, 80, 85, 212, 65, 78, 84, 73, 67, 76, - 79, 67, 75, 87, 73, 83, 69, 45, 82, 79, 84, 65, 84, 69, 196, 67, 69, 79, - 78, 71, 67, 72, 73, 69, 85, 77, 83, 83, 65, 78, 71, 83, 73, 79, 83, 128, - 80, 83, 73, 70, 73, 83, 84, 79, 80, 65, 82, 65, 75, 65, 76, 69, 83, 77, - 65, 128, 82, 73, 69, 85, 76, 45, 75, 65, 80, 89, 69, 79, 85, 78, 80, 73, - 69, 85, 80, 128, 75, 65, 80, 89, 69, 79, 85, 78, 83, 83, 65, 78, 71, 80, - 73, 69, 85, 80, 128, 79, 80, 69, 78, 45, 67, 73, 82, 67, 85, 73, 84, 45, - 79, 85, 84, 80, 85, 212, 67, 69, 79, 78, 71, 67, 72, 73, 69, 85, 77, 67, - 72, 73, 69, 85, 67, 72, 128, 67, 72, 73, 84, 85, 69, 85, 77, 83, 83, 65, - 78, 71, 67, 73, 69, 85, 67, 128, 75, 73, 89, 69, 79, 75, 45, 83, 73, 79, - 83, 45, 75, 73, 89, 69, 79, 75, 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, 84, 73, - 75, 69, 85, 84, 45, 72, 73, 69, 85, 72, 128, 84, 82, 79, 77, 73, 75, 79, - 80, 65, 82, 65, 75, 65, 76, 69, 83, 77, 65, 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, 84, 73, 75, 69, 85, 84, 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, - 89, 69, 79, 82, 73, 78, 72, 73, 69, 85, 72, 128, 65, 67, 85, 84, 69, 45, - 71, 82, 65, 86, 69, 45, 65, 67, 85, 84, 69, 128, 67, 72, 73, 84, 85, 69, - 85, 77, 83, 83, 65, 78, 71, 83, 73, 79, 83, 128, 71, 82, 65, 86, 69, 45, - 65, 67, 85, 84, 69, 45, 71, 82, 65, 86, 69, 128, 73, 69, 85, 78, 71, 45, - 83, 83, 65, 78, 71, 75, 73, 89, 69, 79, 75, 128, 76, 79, 78, 71, 45, 66, - 82, 65, 78, 67, 72, 45, 72, 65, 71, 65, 76, 204, 80, 65, 82, 84, 73, 65, - 76, 76, 89, 45, 82, 69, 67, 89, 67, 76, 69, 196, 82, 73, 69, 85, 76, 45, - 80, 73, 69, 85, 80, 45, 72, 73, 69, 85, 72, 128, 83, 72, 79, 82, 84, 45, - 84, 87, 73, 71, 45, 66, 74, 65, 82, 75, 65, 206, 83, 73, 79, 83, 45, 80, - 73, 69, 85, 80, 45, 75, 73, 89, 69, 79, 75, 128, 75, 65, 84, 65, 75, 65, - 78, 65, 45, 72, 73, 82, 65, 71, 65, 78, 193, 82, 73, 69, 85, 76, 45, 80, - 73, 69, 85, 80, 45, 83, 73, 79, 83, 128, 89, 69, 83, 73, 69, 85, 78, 71, - 45, 80, 65, 78, 83, 73, 79, 83, 128, 67, 69, 79, 78, 71, 67, 72, 73, 69, - 85, 77, 67, 73, 69, 85, 67, 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, 45, - 48, 48, 45, 48, 49, 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, 51, 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, - 53, 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, 49, 45, 48, 48, 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, 50, 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, 52, 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, 54, 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, 50, 45, 48, 49, 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, 51, 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, 53, 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, 51, - 45, 48, 48, 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, - 50, 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, 52, 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, 54, 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, 52, 45, 48, 49, 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, 51, 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, 53, 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, 53, 45, 48, 48, 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, 50, 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, 52, 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, - 54, 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, 54, 45, 48, 49, 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, 51, 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, 53, 128, 72, 79, 82, 73, - 90, 79, 78, 84, 65, 76, 45, 48, 54, 45, 48, 54, 128, 77, 65, 82, 67, 65, - 84, 79, 45, 83, 84, 65, 67, 67, 65, 84, 79, 128, 80, 73, 69, 85, 80, 45, - 83, 73, 79, 83, 45, 67, 73, 69, 85, 67, 128, 80, 73, 69, 85, 80, 45, 83, - 73, 79, 83, 45, 80, 73, 69, 85, 80, 128, 82, 73, 69, 85, 76, 45, 77, 73, - 69, 85, 77, 45, 83, 73, 79, 83, 128, 83, 72, 79, 82, 84, 45, 84, 87, 73, - 71, 45, 72, 65, 71, 65, 76, 204, 83, 79, 70, 84, 87, 65, 82, 69, 45, 70, - 85, 78, 67, 84, 73, 79, 206, 84, 82, 79, 77, 73, 75, 79, 80, 83, 73, 70, - 73, 83, 84, 79, 78, 128, 75, 65, 80, 89, 69, 79, 85, 78, 80, 72, 73, 69, - 85, 80, 72, 128, 65, 78, 84, 73, 82, 69, 83, 84, 82, 73, 67, 84, 73, 79, - 78, 128, 65, 67, 67, 69, 78, 84, 45, 83, 84, 65, 67, 67, 65, 84, 79, 128, - 65, 78, 84, 73, 75, 69, 78, 79, 75, 89, 76, 73, 83, 77, 65, 128, 67, 69, - 79, 78, 71, 67, 72, 73, 69, 85, 77, 83, 73, 79, 83, 128, 67, 72, 73, 69, - 85, 67, 72, 45, 75, 72, 73, 69, 85, 75, 72, 128, 67, 72, 73, 84, 85, 69, - 85, 77, 67, 72, 73, 69, 85, 67, 72, 128, 73, 68, 69, 79, 71, 82, 65, 80, - 72, 45, 50, 70, 56, 48, 48, 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, 50, 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, 52, 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, 54, 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, 56, 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, 65, 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, - 67, 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, 69, 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, 49, 48, 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, 50, 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, 52, 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, 54, 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, 56, 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, 65, 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, 67, 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, - 69, 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, 50, 48, 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, 50, 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, 52, 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, 54, 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, 56, 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, 65, 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, 67, 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, 69, 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, 51, - 48, 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, 50, 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, 52, 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, 54, 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, 56, 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, 65, 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, 67, 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, 69, 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, 52, 48, 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, - 50, 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, 52, 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, 54, 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, 56, 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, 65, 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, 67, 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, 69, 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, 53, 48, 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, 50, 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, - 52, 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, 54, 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, 56, 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, 65, 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, 67, 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, 69, 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, 54, 48, 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, 50, 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, 52, 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, - 54, 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, 56, 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, 65, 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, 67, 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, 69, 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, 55, 48, 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, 50, 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, 52, 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, 54, 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, - 56, 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, 65, 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, 67, 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, 69, 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, 56, 48, 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, 50, 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, 52, 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, 54, 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, 56, 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, - 65, 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, 67, 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, 69, 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, 57, 48, 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, 50, 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, 52, 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, 54, 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, 56, 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, 65, 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, - 67, 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, 69, 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, 65, 48, 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, 50, 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, 52, 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, 54, 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, 56, 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, 65, 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, 67, 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, - 69, 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, 66, 48, 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, 50, 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, 52, 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, 54, 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, 56, 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, 65, 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, 67, 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, 69, 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, 67, - 48, 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, 50, 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, 52, 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, 54, 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, 56, 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, 65, 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, 67, 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, 69, 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, 68, 48, 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, - 50, 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, 52, 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, 54, 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, 56, 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, 65, 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, 67, 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, 69, 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, 69, 48, 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, 50, 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, - 52, 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, 54, 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, 56, 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, 65, 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, 67, 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, 69, 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, 70, 48, 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, 50, 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, 52, 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, - 54, 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, 56, 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, 65, 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, 67, 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, 69, 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, 57, 48, 48, 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, 50, 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, 52, 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, 54, 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, - 56, 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, 65, 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, 67, 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, 69, 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, 49, 48, 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, 50, 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, 52, 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, 54, 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, 56, 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, - 65, 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, 67, 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, 69, 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, 50, 48, 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, 50, 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, 52, 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, 54, 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, 56, 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, 65, 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, - 67, 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, 69, 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, 51, 48, 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, 50, 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, 52, 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, 54, 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, 56, 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, 65, 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, 67, 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, - 69, 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, 52, 48, 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, 50, 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, 52, 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, 54, 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, 56, 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, 65, 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, 67, 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, 69, 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, 53, - 48, 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, 50, 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, 52, 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, 54, 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, 56, 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, 65, 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, 67, 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, 69, 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, 54, 48, 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, - 50, 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, 52, 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, 54, 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, 56, 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, 65, 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, 67, 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, 69, 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, 55, 48, 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, 50, 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, - 52, 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, 54, 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, 56, 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, 65, 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, 67, 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, 69, 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, 56, 48, 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, 50, 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, 52, 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, - 54, 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, 56, 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, 65, 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, 67, 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, 69, 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, 57, 48, 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, 50, 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, 52, 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, 54, 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, - 56, 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, 65, 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, 67, 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, 69, 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, 65, 48, 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, 50, 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, 52, 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, 54, 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, 56, 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, - 65, 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, 67, 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, 69, 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, 66, 48, 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, 50, 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, 52, 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, 54, 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, 56, 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, 65, 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, - 67, 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, 69, 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, 67, 48, 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, 50, 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, 52, 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, 54, 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, 56, 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, 65, 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, 67, 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, - 69, 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, 68, 48, 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, 50, 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, 52, 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, 54, 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, 56, 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, 65, 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, 67, 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, 69, 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, 69, - 48, 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, 50, 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, 52, 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, 54, 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, 56, 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, 65, 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, 67, 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, 69, 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, 70, 48, 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, - 50, 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, 52, 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, 54, 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, 56, 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, 65, 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, 67, 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, 69, 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, 65, 48, 48, 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, 50, 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, - 52, 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, 54, 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, 56, 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, 65, 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, 67, 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, 69, 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, 49, 48, 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, 50, 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, 52, 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, - 54, 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, 56, 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, 65, 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, 67, 128, 73, 68, 69, 79, 71, 82, 65, 80, 72, 45, - 50, 70, 65, 49, 68, 128, 74, 65, 76, 76, 65, 74, 65, 76, 65, 76, 79, 85, - 72, 79, 85, 128, 75, 82, 65, 84, 73, 77, 79, 75, 79, 85, 70, 73, 83, 77, - 65, 128, 75, 82, 65, 84, 73, 77, 79, 89, 80, 79, 82, 82, 79, 79, 78, 128, - 76, 79, 78, 71, 45, 66, 82, 65, 78, 67, 72, 45, 77, 65, 68, 210, 77, 73, - 69, 85, 77, 45, 83, 83, 65, 78, 71, 83, 73, 79, 83, 128, 80, 69, 84, 65, - 83, 84, 79, 75, 79, 85, 70, 73, 83, 77, 65, 128, 80, 73, 69, 85, 80, 45, - 83, 83, 65, 78, 71, 83, 73, 79, 83, 128, 80, 83, 73, 70, 73, 83, 84, 79, - 76, 89, 71, 73, 83, 77, 65, 128, 80, 83, 73, 70, 73, 83, 84, 79, 83, 89, - 78, 65, 71, 77, 65, 128, 82, 73, 69, 85, 76, 45, 83, 83, 65, 78, 71, 83, - 73, 79, 83, 128, 84, 69, 65, 82, 68, 82, 79, 80, 45, 83, 72, 65, 78, 75, - 69, 196, 80, 82, 79, 83, 71, 69, 71, 82, 65, 77, 77, 69, 78, 73, 128, 84, - 69, 65, 82, 68, 82, 79, 80, 45, 83, 80, 79, 75, 69, 196, 66, 76, 65, 67, - 75, 45, 70, 69, 65, 84, 72, 69, 82, 69, 196, 84, 82, 73, 65, 78, 71, 76, - 69, 45, 72, 69, 65, 68, 69, 196, 67, 79, 78, 71, 82, 65, 84, 85, 76, 65, - 84, 73, 79, 78, 128, 72, 73, 71, 72, 45, 82, 69, 86, 69, 82, 83, 69, 68, - 45, 185, 65, 70, 79, 82, 69, 77, 69, 78, 84, 73, 79, 78, 69, 68, 128, 65, - 82, 79, 85, 78, 68, 45, 80, 82, 79, 70, 73, 76, 69, 128, 67, 79, 78, 67, - 65, 86, 69, 45, 80, 79, 73, 78, 84, 69, 196, 71, 79, 82, 71, 79, 83, 89, - 78, 84, 72, 69, 84, 79, 78, 128, 73, 68, 69, 78, 84, 73, 70, 73, 67, 65, - 84, 73, 79, 78, 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, 70, 57, 48, 49, 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, 51, 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, 53, 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, 55, 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, 57, 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, 66, 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, 68, 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, 70, 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, 49, 49, 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, 51, 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, 53, 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, 55, 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, 57, 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, 66, 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, 68, 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, 70, 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, 50, 49, 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, 51, 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, 53, 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, 55, 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, 57, 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, 66, 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, 68, 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, 70, 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, 51, 49, 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, 51, 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, 53, 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, 55, 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, 57, 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, 66, 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, 68, 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, 70, 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, 52, 49, 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, 51, 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, 53, 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, 55, 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, 57, 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, 66, 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, 68, 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, 70, 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, 53, 49, 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, 51, 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, 53, 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, 55, 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, 57, 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, 66, 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, 68, 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, 70, 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, 54, 49, 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, 51, 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, 53, 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, 55, 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, 57, 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, 66, 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, 68, 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, 70, 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, 55, 49, 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, 51, 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, 53, 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, 55, 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, 57, 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, 66, 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, 68, 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, 70, 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, 56, 49, 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, 51, 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, 53, 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, 55, 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, 57, 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, 66, 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, 68, 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, 70, 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, 57, 49, 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, 51, 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, 53, 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, 55, 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, 57, 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, 66, 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, 68, 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, 70, 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, 65, 49, 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, 51, 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, 53, 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, 55, 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, 57, 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, 66, 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, 68, 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, 70, 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, 66, 49, 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, 51, 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, 53, 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, 55, 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, 57, 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, 66, 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, 68, 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, 70, 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, 67, 49, 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, 51, 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, 53, 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, 55, 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, 57, 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, 66, 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, 68, 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, 70, 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, 68, 49, 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, 51, 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, 53, 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, 55, 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, 57, 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, 66, 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, 68, 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, 70, 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, 69, 49, 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, 51, 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, 53, 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, 55, 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, 57, 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, 66, 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, 68, 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, 70, 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, 70, 49, 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, 51, 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, 53, 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, 55, 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, 57, 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, 66, 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, 68, 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, 70, 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, 65, 48, 49, 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, 51, 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, 53, 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, 55, 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, 57, 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, 66, 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, 68, 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, 70, 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, 49, 49, 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, 51, 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, 53, 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, 55, 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, 57, 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, 66, 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, 68, 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, 70, 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, 50, 49, 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, 51, 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, 53, 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, 55, 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, 57, 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, 66, 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, 68, 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, 51, 49, 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, 51, 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, 53, 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, 55, 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, 57, 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, 66, 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, 68, 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, 70, 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, 52, 49, 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, 51, 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, 53, 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, 55, 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, 57, 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, 66, 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, 68, 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, 70, 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, 53, 49, 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, 51, 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, 53, 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, 55, 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, 57, 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, 66, 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, 68, 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, 70, 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, 54, 49, 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, 51, 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, 53, 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, 55, 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, 57, 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, 55, 48, 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, 50, 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, 52, 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, 54, 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, 56, 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, 65, 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, 67, 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, 69, 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, 56, 48, 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, 50, 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, 52, 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, 54, 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, 56, 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, 65, 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, 67, 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, 69, 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, 57, 48, 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, 50, 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, 52, 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, 54, 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, 56, 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, 65, 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, 67, 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, 69, 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, 65, 48, 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, 50, 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, 52, 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, 54, 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, 56, 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, 65, 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, 67, 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, 69, 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, 66, 48, 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, 50, 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, 52, 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, 54, 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, 56, 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, 65, 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, 67, 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, 69, 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, 67, 48, 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, 50, 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, 52, 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, 54, 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, 56, 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, 65, 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, 67, 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, 69, 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, 68, 48, 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, 50, 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, 52, 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, 54, 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, 56, 128, 73, 68, 69, 79, 71, 82, 65, - 80, 72, 45, 70, 65, 68, 57, 128, 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, 83, - 79, 204, 76, 79, 78, 71, 45, 66, 82, 65, 78, 67, 72, 45, 89, 82, 128, 77, - 85, 76, 84, 73, 80, 76, 73, 67, 65, 84, 73, 79, 78, 128, 80, 65, 76, 65, - 84, 65, 76, 73, 90, 65, 84, 73, 79, 78, 128, 83, 69, 83, 81, 85, 73, 81, - 85, 65, 68, 82, 65, 84, 69, 128, 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, 78, 65, - 85, 196, 83, 73, 79, 83, 45, 83, 83, 65, 78, 71, 83, 73, 79, 83, 128, 84, - 69, 65, 82, 68, 82, 79, 80, 45, 66, 65, 82, 66, 69, 196, 84, 82, 79, 77, - 73, 75, 79, 76, 89, 71, 73, 83, 77, 65, 128, 84, 82, 79, 77, 73, 75, 79, - 83, 89, 78, 65, 71, 77, 65, 128, 86, 69, 82, 84, 73, 67, 65, 76, 45, 48, - 48, 45, 48, 48, 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, 50, 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, 52, 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, 54, 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, 49, 45, 48, 49, 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, 51, 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, 53, 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, 50, 45, 48, 48, 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, 50, 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, 52, 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, 54, 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, 51, 45, 48, 49, 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, 51, 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, 53, 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, 52, 45, 48, 48, 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, 50, 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, 52, 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, 54, 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, - 53, 45, 48, 49, 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, 51, 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, 53, 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, - 54, 45, 48, 48, 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, 50, 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, 52, 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, 54, 128, 87, 72, 73, 84, 69, 45, 70, 69, 65, 84, 72, 69, 82, - 69, 196, 89, 80, 79, 71, 69, 71, 82, 65, 77, 77, 69, 78, 73, 128, 82, 73, - 71, 72, 84, 45, 80, 79, 73, 78, 84, 73, 78, 199, 77, 85, 76, 84, 73, 80, - 76, 73, 67, 65, 84, 73, 79, 206, 82, 73, 71, 72, 84, 45, 83, 72, 65, 68, - 79, 87, 69, 196, 66, 65, 76, 76, 79, 79, 78, 45, 83, 80, 79, 75, 69, 196, - 75, 65, 80, 89, 69, 79, 85, 78, 77, 73, 69, 85, 77, 128, 82, 73, 69, 85, - 76, 45, 80, 72, 73, 69, 85, 80, 72, 128, 82, 73, 69, 85, 76, 45, 84, 72, - 73, 69, 85, 84, 72, 128, 65, 82, 71, 79, 83, 89, 78, 84, 72, 69, 84, 79, - 78, 128, 65, 83, 89, 77, 80, 84, 79, 84, 73, 67, 65, 76, 76, 217, 77, 73, - 69, 85, 77, 45, 80, 65, 78, 83, 73, 79, 83, 128, 78, 73, 69, 85, 78, 45, - 80, 65, 78, 83, 73, 79, 83, 128, 80, 65, 82, 65, 76, 76, 69, 76, 79, 71, - 82, 65, 77, 128, 80, 69, 82, 80, 69, 78, 68, 73, 67, 85, 76, 65, 82, 128, - 80, 72, 73, 69, 85, 80, 72, 45, 80, 73, 69, 85, 80, 128, 80, 73, 69, 85, - 80, 45, 80, 72, 73, 69, 85, 80, 72, 128, 80, 73, 69, 85, 80, 45, 84, 72, - 73, 69, 85, 84, 72, 128, 80, 82, 69, 80, 79, 78, 68, 69, 82, 65, 78, 67, - 69, 128, 82, 73, 69, 85, 76, 45, 80, 65, 78, 83, 73, 79, 83, 128, 84, 69, - 84, 65, 82, 84, 73, 77, 79, 82, 73, 79, 78, 128, 84, 73, 75, 69, 85, 84, - 45, 75, 73, 89, 69, 79, 75, 128, 84, 82, 73, 65, 78, 71, 76, 69, 45, 82, - 79, 85, 78, 196, 89, 69, 83, 73, 69, 85, 78, 71, 45, 83, 73, 79, 83, 128, - 65, 86, 65, 75, 82, 65, 72, 65, 83, 65, 78, 89, 65, 128, 66, 79, 84, 84, - 79, 77, 45, 76, 73, 71, 72, 84, 69, 196, 67, 72, 73, 69, 85, 67, 72, 45, - 72, 73, 69, 85, 72, 128, 67, 72, 73, 84, 85, 69, 85, 77, 67, 73, 69, 85, - 67, 128, 67, 72, 82, 89, 83, 65, 78, 84, 72, 69, 77, 85, 77, 128, 67, 79, - 78, 84, 69, 77, 80, 76, 65, 84, 73, 79, 78, 128, 68, 79, 84, 83, 45, 49, - 50, 51, 52, 53, 54, 55, 56, 128, 69, 77, 66, 69, 76, 76, 73, 83, 72, 77, - 69, 78, 84, 128, 73, 69, 85, 78, 71, 45, 67, 72, 73, 69, 85, 67, 72, 128, - 73, 69, 85, 78, 71, 45, 75, 72, 73, 69, 85, 75, 72, 128, 73, 69, 85, 78, - 71, 45, 80, 72, 73, 69, 85, 80, 72, 128, 73, 69, 85, 78, 71, 45, 84, 72, - 73, 69, 85, 84, 72, 128, 75, 65, 80, 89, 69, 79, 85, 78, 82, 73, 69, 85, - 76, 128, 76, 79, 78, 71, 45, 66, 82, 65, 78, 67, 72, 45, 65, 210, 77, 73, - 69, 85, 77, 45, 67, 72, 73, 69, 85, 67, 72, 128, 78, 73, 69, 85, 78, 45, - 84, 72, 73, 69, 85, 84, 72, 128, 80, 73, 69, 85, 80, 45, 67, 72, 73, 69, - 85, 67, 72, 128, 82, 73, 69, 85, 76, 45, 75, 72, 73, 69, 85, 75, 72, 128, - 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, 83, 79, 204, 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, 89, - 82, 128, 83, 84, 65, 67, 67, 65, 84, 73, 83, 83, 73, 77, 79, 128, 83, 84, - 82, 73, 75, 69, 84, 72, 82, 79, 85, 71, 72, 128, 84, 72, 69, 82, 77, 79, - 68, 89, 78, 65, 77, 73, 67, 128, 89, 85, 85, 75, 65, 76, 69, 65, 80, 73, - 78, 84, 85, 128, 71, 82, 69, 65, 84, 69, 82, 45, 84, 72, 65, 78, 128, 65, - 78, 84, 73, 67, 76, 79, 67, 75, 87, 73, 83, 197, 76, 69, 70, 84, 45, 80, - 79, 73, 78, 84, 73, 78, 199, 73, 78, 84, 69, 82, 83, 69, 67, 84, 73, 79, - 78, 128, 65, 80, 80, 82, 79, 88, 73, 77, 65, 84, 69, 76, 217, 68, 73, 70, - 70, 69, 82, 69, 78, 84, 73, 65, 76, 128, 68, 79, 87, 78, 45, 80, 79, 73, - 78, 84, 73, 78, 199, 80, 65, 82, 69, 83, 84, 73, 71, 77, 69, 78, 79, 206, - 67, 82, 89, 80, 84, 79, 71, 82, 65, 77, 77, 73, 195, 69, 71, 89, 80, 84, - 79, 76, 79, 71, 73, 67, 65, 204, 72, 89, 80, 72, 69, 78, 45, 77, 73, 78, - 85, 83, 128, 67, 79, 78, 67, 65, 86, 69, 45, 83, 73, 68, 69, 196, 76, 69, - 70, 84, 45, 84, 79, 45, 82, 73, 71, 72, 212, 78, 73, 69, 85, 78, 45, 84, - 73, 75, 69, 85, 84, 128, 82, 73, 69, 85, 76, 45, 75, 73, 89, 69, 79, 75, - 128, 82, 73, 71, 72, 84, 45, 84, 79, 45, 76, 69, 70, 212, 84, 82, 65, 78, - 83, 80, 79, 83, 73, 84, 73, 79, 206, 67, 82, 79, 83, 83, 69, 68, 45, 84, - 65, 73, 76, 128, 68, 73, 77, 73, 78, 85, 84, 73, 79, 78, 45, 49, 128, 68, - 82, 79, 80, 45, 83, 72, 65, 68, 79, 87, 69, 196, 71, 65, 69, 84, 84, 65, - 45, 80, 73, 76, 76, 65, 128, 71, 69, 79, 77, 69, 84, 82, 73, 67, 65, 76, - 76, 217, 73, 69, 85, 78, 71, 45, 75, 73, 89, 69, 79, 75, 128, 73, 78, 84, - 69, 82, 80, 79, 76, 65, 84, 73, 79, 206, 78, 73, 69, 85, 78, 45, 75, 73, - 89, 69, 79, 75, 128, 80, 73, 69, 85, 80, 45, 84, 73, 75, 69, 85, 84, 128, - 82, 73, 69, 85, 76, 45, 84, 73, 75, 69, 85, 84, 128, 84, 72, 73, 82, 84, - 89, 45, 83, 69, 67, 79, 78, 196, 84, 87, 69, 78, 84, 89, 45, 69, 73, 71, - 72, 84, 200, 84, 87, 69, 78, 84, 89, 45, 84, 72, 82, 69, 69, 128, 65, 67, - 67, 85, 77, 85, 76, 65, 84, 73, 79, 78, 128, 65, 67, 85, 84, 69, 45, 77, - 65, 67, 82, 79, 78, 128, 65, 75, 84, 73, 69, 83, 69, 76, 83, 75, 65, 66, - 128, 65, 78, 65, 84, 82, 73, 67, 72, 73, 83, 77, 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, 72, 65, 128, 66, 82, 69, 65, 75, 84, 72, 82, 79, 85, 71, 72, 128, 66, - 82, 69, 86, 69, 45, 77, 65, 67, 82, 79, 78, 128, 67, 72, 73, 84, 85, 69, - 85, 77, 83, 73, 79, 83, 128, 67, 89, 76, 73, 78, 68, 82, 73, 67, 73, 84, - 89, 128, 68, 69, 67, 73, 83, 73, 86, 69, 78, 69, 83, 83, 128, 68, 69, 70, - 69, 67, 84, 73, 86, 69, 78, 69, 83, 211, 68, 73, 70, 70, 73, 67, 85, 76, - 84, 73, 69, 83, 128, 68, 73, 77, 73, 78, 73, 83, 72, 77, 69, 78, 84, 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, 51, 128, 68, 73, 83, 67, 79, 78, 84, 73, 78, 85, - 79, 85, 211, 68, 79, 84, 83, 45, 49, 50, 51, 52, 53, 54, 55, 128, 68, 79, - 84, 83, 45, 49, 50, 51, 52, 53, 54, 56, 128, 68, 79, 84, 83, 45, 49, 50, - 51, 52, 53, 55, 56, 128, 68, 79, 84, 83, 45, 49, 50, 51, 52, 54, 55, 56, - 128, 68, 79, 84, 83, 45, 49, 50, 51, 53, 54, 55, 56, 128, 68, 79, 84, 83, - 45, 49, 50, 52, 53, 54, 55, 56, 128, 68, 79, 84, 83, 45, 49, 51, 52, 53, - 54, 55, 56, 128, 68, 79, 84, 83, 45, 50, 51, 52, 53, 54, 55, 56, 128, 69, - 85, 82, 79, 45, 67, 85, 82, 82, 69, 78, 67, 217, 70, 76, 69, 85, 82, 45, - 68, 69, 45, 76, 73, 83, 128, 71, 82, 65, 86, 69, 45, 77, 65, 67, 82, 79, - 78, 128, 71, 82, 79, 78, 84, 72, 73, 83, 77, 65, 84, 65, 128, 72, 89, 80, - 79, 68, 73, 65, 83, 84, 79, 76, 69, 128, 73, 67, 69, 76, 65, 78, 68, 73, - 67, 45, 89, 82, 128, 73, 69, 85, 78, 71, 45, 84, 73, 75, 69, 85, 84, 128, - 73, 78, 84, 69, 82, 83, 89, 76, 76, 65, 66, 73, 195, 74, 85, 68, 69, 79, - 45, 83, 80, 65, 78, 73, 83, 200, 75, 73, 89, 69, 79, 75, 45, 82, 73, 69, - 85, 76, 128, 76, 65, 66, 73, 65, 76, 73, 90, 65, 84, 73, 79, 206, 77, 65, - 67, 82, 79, 78, 45, 65, 67, 85, 84, 69, 128, 77, 65, 67, 82, 79, 78, 45, - 66, 82, 69, 86, 69, 128, 77, 65, 67, 82, 79, 78, 45, 71, 82, 65, 86, 69, - 128, 77, 73, 78, 85, 83, 45, 79, 82, 45, 80, 76, 85, 211, 77, 79, 82, 80, - 72, 79, 76, 79, 71, 73, 67, 65, 204, 79, 80, 69, 78, 45, 79, 85, 84, 76, - 73, 78, 69, 196, 80, 69, 82, 80, 69, 78, 68, 73, 67, 85, 76, 65, 210, 82, - 85, 76, 69, 45, 68, 69, 76, 65, 89, 69, 68, 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, - 49, 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, 51, 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, 53, 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, 55, 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, 57, 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, 49, 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, 51, 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, 53, 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, 55, 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, - 57, 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, 49, 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, 51, 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, 53, 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, 55, 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, 57, 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, 49, 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, 51, 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, 53, 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, - 55, 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, 57, 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, 49, 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, 51, 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, 53, 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, 55, 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, 57, 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, 49, 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, 51, 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, - 53, 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, 55, 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, 57, 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, 49, 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, 51, 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, 53, 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, 55, 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, 57, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 49, 55, 48, 128, 83, + 197, 71, 69, 79, 82, 71, 73, 65, 206, 72, 79, 79, 75, 128, 73, 68, 69, + 79, 71, 82, 65, 205, 73, 68, 69, 79, 71, 82, 65, 80, 72, 73, 195, 65, 76, + 69, 198, 83, 89, 77, 66, 79, 76, 128, 84, 79, 128, 83, 67, 82, 73, 80, + 212, 84, 87, 79, 128, 79, 86, 69, 210, 213, 72, 69, 65, 86, 217, 79, 78, + 69, 128, 85, 208, 76, 79, 215, 70, 85, 76, 76, 87, 73, 68, 84, 200, 72, + 65, 200, 68, 79, 87, 206, 69, 81, 85, 65, 204, 66, 82, 65, 67, 75, 69, + 84, 128, 72, 73, 71, 200, 79, 198, 84, 65, 199, 68, 79, 77, 73, 78, 207, + 78, 85, 77, 69, 82, 73, 195, 70, 82, 65, 75, 84, 85, 210, 74, 85, 78, 71, + 83, 69, 79, 78, 199, 77, 65, 76, 65, 89, 65, 76, 65, 205, 84, 87, 207, + 71, 76, 65, 71, 79, 76, 73, 84, 73, 195, 67, 72, 65, 82, 65, 67, 84, 69, + 210, 76, 69, 70, 84, 87, 65, 82, 68, 211, 77, 69, 68, 73, 65, 204, 84, + 69, 76, 85, 71, 213, 66, 69, 78, 71, 65, 76, 201, 79, 78, 197, 65, 82, + 77, 69, 78, 73, 65, 206, 74, 65, 86, 65, 78, 69, 83, 197, 74, 69, 69, + 205, 66, 65, 82, 128, 72, 73, 82, 65, 71, 65, 78, 193, 87, 69, 83, 84, + 45, 67, 82, 69, 197, 73, 68, 69, 79, 71, 82, 65, 80, 200, 66, 65, 77, 85, + 205, 84, 72, 65, 201, 75, 65, 78, 78, 65, 68, 193, 67, 72, 69, 82, 79, + 75, 69, 197, 72, 65, 76, 198, 84, 79, 78, 197, 78, 69, 215, 79, 82, 73, + 89, 193, 84, 72, 82, 69, 197, 67, 72, 65, 205, 71, 85, 74, 65, 82, 65, + 84, 201, 76, 85, 197, 70, 79, 85, 82, 128, 72, 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, 84, 72, 82, 69, 69, 128, 68, 69, 83, 69, 82, 69, 212, 83, 73, + 78, 72, 65, 76, 193, 71, 85, 82, 77, 85, 75, 72, 201, 77, 65, 82, 203, + 78, 79, 84, 65, 84, 73, 79, 206, 83, 89, 82, 73, 65, 195, 86, 79, 67, 65, + 76, 73, 195, 65, 67, 85, 84, 69, 128, 76, 69, 80, 67, 72, 193, 76, 73, + 71, 72, 212, 76, 79, 78, 199, 84, 85, 82, 75, 73, 195, 68, 79, 85, 66, + 76, 69, 45, 83, 84, 82, 85, 67, 203, 70, 73, 86, 69, 128, 75, 65, 128, + 84, 65, 77, 73, 204, 86, 73, 69, 212, 65, 80, 204, 70, 85, 78, 67, 84, + 73, 79, 78, 65, 204, 72, 65, 77, 90, 193, 83, 73, 88, 128, 84, 69, 76, + 69, 71, 82, 65, 80, 200, 89, 65, 128, 69, 73, 71, 72, 84, 128, 72, 79, + 82, 73, 90, 79, 78, 84, 65, 204, 80, 65, 128, 68, 79, 84, 211, 78, 73, + 78, 69, 128, 83, 69, 86, 69, 78, 128, 66, 65, 82, 194, 68, 65, 83, 73, + 193, 75, 65, 73, 84, 72, 201, 76, 73, 77, 66, 213, 77, 65, 128, 77, 65, + 75, 83, 85, 82, 193, 83, 128, 84, 207, 66, 79, 80, 79, 77, 79, 70, 207, + 75, 72, 65, 82, 79, 83, 72, 84, 72, 201, 76, 65, 207, 82, 65, 128, 83, + 81, 85, 65, 82, 69, 196, 72, 69, 88, 65, 71, 82, 65, 205, 75, 193, 78, + 65, 128, 80, 83, 73, 76, 201, 82, 69, 86, 69, 82, 83, 69, 196, 77, 79, + 78, 79, 83, 80, 65, 67, 197, 78, 79, 212, 83, 65, 77, 65, 82, 73, 84, 65, + 206, 83, 84, 82, 79, 75, 197, 84, 85, 82, 78, 69, 196, 86, 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, 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, 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, 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, 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, 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, 85, 75, 65, 76, 69, 65, 80, 73, 78, 84, 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, 80, 128, 89, 85, 79, 88, 128, 89, 85, 79, 84, 128, + 89, 85, 79, 80, 128, 89, 85, 79, 128, 89, 85, 68, 72, 128, 89, 85, 68, + 200, 89, 85, 65, 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, 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, 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, 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, 206, 89, + 69, 76, 76, 79, 87, 128, 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, 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, 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, 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, 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, 65, 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, 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, 128, 87, 82, 79, 78, 71, 128, + 87, 82, 73, 84, 73, 78, 199, 87, 82, 69, 65, 84, 200, 87, 82, 65, 80, + 128, 87, 79, 88, 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, 65, + 78, 128, 87, 79, 76, 79, 83, 79, 128, 87, 79, 69, 128, 87, 79, 65, 128, + 87, 73, 84, 72, 79, 85, 212, 87, 73, 78, 84, 69, 82, 128, 87, 73, 78, 74, + 65, 128, 87, 73, 78, 69, 128, 87, 73, 78, 68, 85, 128, 87, 73, 78, 68, + 128, 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, 71, 128, 87, 69, 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, 69, 78, 128, 87, 69, 68, 71, 69, 45, 84, 65, 73, 76, 69, 196, 87, + 69, 65, 80, 79, 78, 128, 87, 66, 128, 87, 65, 89, 128, 87, 65, 217, 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, 69, 128, 87, 65, + 86, 197, 87, 65, 85, 128, 87, 65, 84, 84, 79, 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, 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, 84, 128, 86, 85, 82, 88, 128, 86, + 85, 82, 128, 86, 85, 80, 128, 86, 85, 76, 71, 65, 210, 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, 76, 85, 77, 197, 86, 79, 76, 84, 65, 71, + 197, 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, 204, 86, + 79, 128, 86, 73, 88, 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, 78, 69, 128, 86, 73, 78, 128, 86, 73, 76, + 76, 65, 71, 69, 128, 86, 73, 69, 88, 128, 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, 65, 128, 86, 73, 67, 84, 79, 82, 217, 86, 73, 128, 86, 69, 88, 128, + 86, 69, 87, 128, 86, 69, 215, 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, 80, 128, 86, 69, 78, 68, 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, 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, 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, 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, 50, 128, 85, 83, 72, 128, 85, 83, 200, + 85, 83, 69, 196, 85, 83, 69, 128, 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, 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, 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, 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, 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, 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, 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, 76, 73, 78, 197, 84, 87, 79, 45, 72, 69, 65, 68, 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, 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, + 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, 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, 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, + 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, 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, 73, 128, 84, 84, 72, 87, 69, 128, 84, 84, + 72, 79, 79, 128, 84, 84, 72, 79, 128, 84, 84, 72, 73, 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, 69, 128, 84, 84, 65, 89, 65, 78, 78, 65, + 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, 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, 69, 128, 84, 82, 85, 67, 75, 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, 75, 85, 84, 65, 83, 84, 201, 84, 82, + 79, 69, 90, 69, 78, 73, 65, 206, 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, 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, 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, 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, 83, 83, 73, 79, 78, 128, 84, 82, + 65, 78, 83, 77, 73, 83, 83, 73, 79, 206, 84, 82, 65, 70, 70, 73, 67, 128, + 84, 82, 65, 68, 197, 84, 82, 65, 67, 75, 128, 84, 82, 128, 84, 79, 88, + 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, 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, 128, 84, 79, 78, 79, 83, 128, 84, + 79, 78, 71, 85, 69, 128, 84, 79, 78, 71, 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, 76, 79, 78, 71, + 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, 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, 76, 79, 128, 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, 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, 65, 71, 77, 65, 128, 84, 73, 77, 69, 83, + 128, 84, 73, 77, 69, 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, 73, 128, 84, 73, 71, 72, 212, 84, 73, 71, 69, 82, + 128, 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, 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, 128, + 84, 72, 82, 79, 85, 71, 72, 128, 84, 72, 82, 79, 85, 71, 200, 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, 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, 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, 89, 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, 69, 69, 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, 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, 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, + 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, 71, + 197, 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, 73, 83, 72, 193, 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, 73, 87, 83, 128, 84, 69, 71, 69, 72, + 128, 84, 69, 197, 84, 69, 68, 85, 78, 71, 128, 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, 45, 85, 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, 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, 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, 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, 199, 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, 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, 128, 84, 65, 67, 75, 128, 84, 65, 67, 203, 84, 65, 66, 85, 76, + 65, 84, 73, 79, 78, 128, 84, 65, 66, 76, 69, 128, 84, 65, 66, 128, 84, + 65, 194, 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, 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, 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, 82, 88, 128, 83, 89, 82, 77, 65, + 84, 73, 75, 73, 128, 83, 89, 82, 77, 65, 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, 77, 77, 69, 84, 82, 89, 128, 83, 89, 77, 77, 69, 84, 82, 73, 195, 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, 65, 128, 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, 73, 128, 83, 87, + 73, 128, 83, 87, 71, 128, 83, 87, 69, 69, 84, 128, 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, 82, 88, 128, 83, 85, 82, 82, 79, + 85, 78, 68, 128, 83, 85, 82, 82, 79, 85, 78, 196, 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, 128, 83, 85, 79, 88, 128, + 83, 85, 79, 80, 128, 83, 85, 79, 128, 83, 85, 78, 71, 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, + 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, 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, 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, 65, 128, 83, 213, 83, 84, + 87, 65, 128, 83, 84, 85, 68, 89, 128, 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, 73, 80, 69, 128, 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, 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, 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, 205, 83, 84, 69, 65, 77, 128, 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, 69, 82, 83, + 128, 83, 84, 65, 82, 212, 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, 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, 128, 83, 83, 73, 88, 128, 83, 83, 73, 84, 128, 83, + 83, 73, 80, 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, 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, 65, + 128, 83, 83, 65, 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, 84, 128, 83, 80, 79, 79, 78, 128, 83, 80, 76, 73, 84, 84, 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, 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, 67, 72, 128, 83, 80, 69, 67, 73, 65, 76, 128, 83, 80, 69, 65, 82, + 128, 83, 80, 65, 84, 72, 73, 128, 83, 80, 65, 82, 75, 76, 69, 128, 83, + 80, 65, 68, 197, 83, 80, 65, 67, 73, 78, 199, 83, 80, 128, 83, 79, 89, + 128, 83, 79, 87, 73, 76, 207, 83, 79, 87, 128, 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, 79, 128, 83, 79, 78, 71, 128, 83, 79, + 78, 128, 83, 79, 76, 73, 68, 85, 83, 128, 83, 79, 76, 73, 68, 85, 211, + 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, 212, 83, 79, 198, 83, 79, 67, 73, + 69, 84, 89, 128, 83, 79, 67, 67, 69, 210, 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, 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, 193, 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, + 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, 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, 204, 83, 75, 76, 73, 82, 79, 206, 83, 75, 73, + 78, 128, 83, 75, 73, 69, 82, 128, 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, 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, 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, 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, 128, 83, 73, 76, 75, 128, + 83, 73, 76, 73, 81, 85, 193, 83, 73, 76, 65, 51, 128, 83, 73, 75, 73, + 128, 83, 73, 75, 50, 128, 83, 73, 75, 178, 83, 73, 73, 128, 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, + 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, + 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, 70, 70, 76, 197, 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, 79, 89, 128, 83, 72, 79, 88, 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, + 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, + 80, 128, 83, 72, 79, 79, 84, 128, 83, 72, 79, 79, 128, 83, 72, 79, 71, + 201, 83, 72, 79, 199, 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, 128, 83, 72, 73, 210, 83, 72, + 73, 80, 128, 83, 72, 73, 78, 84, 207, 83, 72, 73, 78, 73, 71, 128, 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, 73, 128, 83, 72, 72, 65, + 128, 83, 72, 69, 88, 128, 83, 72, 69, 86, 65, 128, 83, 72, 69, 85, 88, + 128, 83, 72, 69, 84, 128, 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, 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, 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, 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, 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, 206, 83, 69, 85, 88, + 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, 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, 50, 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, 52, 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, 54, 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, 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, - 56, 48, 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, 50, 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, 52, - 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, 54, 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, 56, 128, 83, - 69, 76, 69, 67, 84, 79, 82, 45, 49, 56, 57, 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, - 49, 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, 51, 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, 53, 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, 55, 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, 57, 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, 49, 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, 51, 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, 53, 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, 55, 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, - 57, 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, 49, 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, 51, 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, 53, 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, 55, 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, 57, 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, 49, 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, 51, 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, 53, 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, - 55, 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, 57, 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, 49, 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, 51, 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, 53, 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, 55, 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, 57, 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, 49, 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, 51, 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, - 53, 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, 55, 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, 57, 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, 49, 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, 51, 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, 53, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 50, 53, 54, - 128, 83, 72, 79, 82, 84, 45, 84, 87, 73, 71, 45, 65, 210, 83, 73, 79, 83, - 45, 67, 72, 73, 69, 85, 67, 72, 128, 83, 73, 79, 83, 45, 75, 72, 73, 69, - 85, 75, 72, 128, 83, 73, 79, 83, 45, 80, 72, 73, 69, 85, 80, 72, 128, 83, - 73, 79, 83, 45, 84, 72, 73, 69, 85, 84, 72, 128, 83, 84, 82, 65, 71, 71, - 73, 83, 77, 65, 84, 65, 128, 83, 84, 82, 65, 73, 71, 72, 84, 78, 69, 83, - 83, 128, 84, 72, 85, 78, 68, 69, 82, 83, 84, 79, 82, 77, 128, 84, 73, 75, - 69, 85, 84, 45, 82, 73, 69, 85, 76, 128, 84, 82, 65, 78, 83, 77, 73, 83, - 83, 73, 79, 78, 128, 84, 87, 69, 78, 84, 89, 45, 69, 73, 71, 72, 84, 128, - 84, 87, 69, 78, 84, 89, 45, 83, 69, 86, 69, 78, 128, 86, 79, 87, 69, 76, - 45, 67, 65, 82, 82, 73, 69, 210, 88, 83, 72, 65, 65, 89, 65, 84, 72, 73, - 89, 65, 128, 89, 79, 85, 84, 72, 70, 85, 76, 78, 69, 83, 83, 128, 71, 82, - 69, 65, 84, 69, 82, 45, 84, 72, 65, 206, 73, 78, 83, 84, 82, 85, 77, 69, - 78, 84, 65, 204, 65, 82, 65, 66, 73, 67, 45, 73, 78, 68, 73, 195, 80, 82, - 69, 83, 69, 78, 84, 65, 84, 73, 79, 206, 80, 69, 82, 73, 83, 80, 79, 77, - 69, 78, 73, 128, 80, 65, 82, 69, 78, 84, 72, 69, 83, 73, 83, 128, 67, 45, - 83, 73, 77, 80, 76, 73, 70, 73, 69, 196, 80, 85, 78, 67, 84, 85, 65, 84, - 73, 79, 78, 128, 73, 78, 84, 69, 82, 83, 69, 67, 84, 73, 79, 206, 67, 65, - 78, 68, 82, 65, 66, 73, 78, 68, 85, 128, 69, 82, 82, 79, 82, 45, 66, 65, - 82, 82, 69, 196, 83, 85, 66, 83, 84, 73, 84, 85, 84, 73, 79, 206, 66, 76, - 65, 67, 75, 45, 76, 69, 84, 84, 69, 210, 65, 80, 80, 82, 79, 88, 73, 77, - 65, 84, 69, 128, 67, 65, 78, 84, 73, 76, 76, 65, 84, 73, 79, 206, 69, 75, - 70, 79, 78, 73, 84, 73, 75, 79, 78, 128, 74, 45, 83, 73, 77, 80, 76, 73, - 70, 73, 69, 196, 77, 73, 68, 68, 76, 69, 45, 87, 69, 76, 83, 200, 82, 73, - 69, 85, 76, 45, 72, 73, 69, 85, 72, 128, 83, 79, 85, 84, 72, 45, 83, 76, - 65, 86, 69, 217, 65, 66, 66, 82, 69, 86, 73, 65, 84, 73, 79, 206, 65, 83, - 84, 82, 79, 76, 79, 71, 73, 67, 65, 204, 71, 65, 89, 65, 78, 85, 75, 73, - 84, 84, 65, 128, 77, 73, 69, 85, 77, 45, 80, 73, 69, 85, 80, 128, 78, 73, - 69, 85, 78, 45, 67, 73, 69, 85, 67, 128, 78, 73, 69, 85, 78, 45, 72, 73, - 69, 85, 72, 128, 80, 65, 82, 65, 71, 82, 65, 80, 72, 79, 83, 128, 82, 73, - 69, 85, 76, 45, 77, 73, 69, 85, 77, 128, 82, 73, 69, 85, 76, 45, 80, 73, - 69, 85, 80, 128, 83, 69, 77, 73, 67, 73, 82, 67, 85, 76, 65, 210, 83, 83, - 65, 78, 71, 84, 73, 75, 69, 85, 84, 128, 65, 67, 75, 78, 79, 87, 76, 69, - 68, 71, 69, 128, 67, 79, 77, 80, 79, 83, 73, 84, 73, 79, 78, 128, 73, 78, - 84, 69, 82, 82, 79, 66, 65, 78, 71, 128, 73, 78, 84, 69, 82, 83, 69, 67, - 84, 73, 78, 199, 80, 73, 69, 85, 80, 45, 67, 73, 69, 85, 67, 128, 81, 85, - 73, 78, 68, 73, 67, 69, 83, 73, 77, 193, 82, 73, 69, 85, 76, 45, 78, 73, - 69, 85, 78, 128, 83, 73, 88, 84, 89, 45, 70, 79, 85, 82, 84, 200, 84, 82, - 73, 84, 73, 77, 79, 82, 73, 79, 78, 128, 84, 87, 69, 78, 84, 89, 45, 70, - 79, 85, 82, 128, 87, 69, 68, 71, 69, 45, 84, 65, 73, 76, 69, 196, 65, 69, - 83, 67, 85, 76, 65, 80, 73, 85, 83, 128, 65, 71, 71, 82, 65, 86, 65, 84, - 73, 79, 78, 128, 65, 77, 65, 76, 71, 65, 77, 65, 84, 73, 79, 206, 65, 80, - 80, 76, 73, 67, 65, 84, 73, 79, 78, 128, 65, 85, 71, 77, 69, 78, 84, 65, - 84, 73, 79, 206, 67, 65, 78, 67, 69, 76, 76, 65, 84, 73, 79, 206, 67, 73, - 69, 85, 67, 45, 73, 69, 85, 78, 71, 128, 67, 79, 78, 74, 85, 78, 67, 84, - 73, 79, 78, 128, 67, 79, 78, 84, 82, 65, 67, 84, 73, 79, 78, 128, 67, 79, - 78, 84, 82, 65, 82, 73, 69, 84, 89, 128, 67, 79, 82, 80, 79, 82, 65, 84, - 73, 79, 78, 128, 67, 79, 85, 78, 84, 69, 82, 66, 79, 82, 69, 128, 67, 79, - 85, 78, 84, 69, 82, 83, 73, 78, 75, 128, 68, 65, 72, 89, 65, 65, 85, 83, - 72, 45, 50, 128, 68, 69, 67, 82, 69, 83, 67, 69, 78, 68, 79, 128, 68, 69, - 76, 73, 86, 69, 82, 65, 78, 67, 69, 128, 68, 69, 78, 79, 77, 73, 78, 65, - 84, 79, 82, 128, 68, 69, 82, 69, 84, 45, 72, 73, 68, 69, 84, 128, 68, 69, - 86, 69, 76, 79, 80, 77, 69, 78, 84, 128, 68, 73, 83, 84, 73, 78, 71, 85, - 73, 83, 72, 128, 68, 79, 65, 67, 72, 65, 83, 72, 77, 69, 69, 128, 68, 79, - 84, 83, 45, 49, 50, 51, 52, 53, 54, 128, 68, 79, 84, 83, 45, 49, 50, 51, - 52, 53, 55, 128, 68, 79, 84, 83, 45, 49, 50, 51, 52, 53, 56, 128, 68, 79, - 84, 83, 45, 49, 50, 51, 52, 54, 55, 128, 68, 79, 84, 83, 45, 49, 50, 51, - 52, 54, 56, 128, 68, 79, 84, 83, 45, 49, 50, 51, 52, 55, 56, 128, 68, 79, - 84, 83, 45, 49, 50, 51, 53, 54, 55, 128, 68, 79, 84, 83, 45, 49, 50, 51, - 53, 54, 56, 128, 68, 79, 84, 83, 45, 49, 50, 51, 53, 55, 56, 128, 68, 79, - 84, 83, 45, 49, 50, 51, 54, 55, 56, 128, 68, 79, 84, 83, 45, 49, 50, 52, - 53, 54, 55, 128, 68, 79, 84, 83, 45, 49, 50, 52, 53, 54, 56, 128, 68, 79, - 84, 83, 45, 49, 50, 52, 53, 55, 56, 128, 68, 79, 84, 83, 45, 49, 50, 52, - 54, 55, 56, 128, 68, 79, 84, 83, 45, 49, 50, 53, 54, 55, 56, 128, 68, 79, - 84, 83, 45, 49, 51, 52, 53, 54, 55, 128, 68, 79, 84, 83, 45, 49, 51, 52, - 53, 54, 56, 128, 68, 79, 84, 83, 45, 49, 51, 52, 53, 55, 56, 128, 68, 79, - 84, 83, 45, 49, 51, 52, 54, 55, 56, 128, 68, 79, 84, 83, 45, 49, 51, 53, - 54, 55, 56, 128, 68, 79, 84, 83, 45, 49, 52, 53, 54, 55, 56, 128, 68, 79, - 84, 83, 45, 50, 51, 52, 53, 54, 55, 128, 68, 79, 84, 83, 45, 50, 51, 52, - 53, 54, 56, 128, 68, 79, 84, 83, 45, 50, 51, 52, 53, 55, 56, 128, 68, 79, - 84, 83, 45, 50, 51, 52, 54, 55, 56, 128, 68, 79, 84, 83, 45, 50, 51, 53, - 54, 55, 56, 128, 68, 79, 84, 83, 45, 50, 52, 53, 54, 55, 56, 128, 68, 79, - 84, 83, 45, 51, 52, 53, 54, 55, 56, 128, 68, 79, 85, 66, 76, 69, 45, 69, - 78, 68, 69, 196, 69, 65, 77, 72, 65, 78, 67, 72, 79, 76, 76, 128, 69, 78, - 76, 65, 82, 71, 69, 77, 69, 78, 84, 128, 69, 88, 67, 76, 65, 77, 65, 84, - 73, 79, 78, 128, 70, 73, 78, 71, 69, 82, 78, 65, 73, 76, 83, 128, 70, 82, - 79, 78, 84, 45, 84, 73, 76, 84, 69, 196, 71, 85, 65, 82, 68, 69, 68, 78, - 69, 83, 83, 128, 72, 65, 85, 80, 84, 83, 84, 73, 77, 77, 69, 128, 72, 73, - 69, 85, 72, 45, 77, 73, 69, 85, 77, 128, 72, 73, 69, 85, 72, 45, 78, 73, - 69, 85, 78, 128, 72, 73, 69, 85, 72, 45, 80, 73, 69, 85, 80, 128, 72, 73, - 69, 85, 72, 45, 82, 73, 69, 85, 76, 128, 72, 79, 82, 73, 90, 79, 78, 84, - 65, 76, 76, 217, 73, 69, 85, 78, 71, 45, 67, 73, 69, 85, 67, 128, 73, 69, - 85, 78, 71, 45, 77, 73, 69, 85, 77, 128, 73, 69, 85, 78, 71, 45, 80, 73, - 69, 85, 80, 128, 73, 78, 84, 69, 71, 82, 65, 84, 73, 79, 78, 128, 73, 78, - 84, 69, 82, 67, 65, 76, 65, 84, 69, 128, 74, 73, 72, 86, 65, 77, 85, 76, - 73, 89, 65, 128, 75, 73, 82, 79, 77, 69, 69, 84, 79, 82, 85, 128, 76, 65, - 75, 75, 72, 65, 78, 71, 89, 65, 79, 128, 77, 73, 69, 85, 77, 45, 72, 73, - 69, 85, 72, 128, 77, 73, 69, 85, 77, 45, 82, 73, 69, 85, 76, 128, 77, 85, - 85, 83, 73, 75, 65, 84, 79, 65, 78, 128, 78, 65, 65, 75, 83, 73, 75, 89, - 65, 89, 65, 128, 78, 65, 83, 65, 76, 73, 90, 65, 84, 73, 79, 206, 78, 69, - 66, 69, 78, 83, 84, 73, 77, 77, 69, 128, 78, 73, 69, 85, 78, 45, 80, 73, - 69, 85, 80, 128, 78, 79, 78, 45, 66, 82, 69, 65, 75, 73, 78, 199, 79, 66, - 83, 84, 82, 85, 67, 84, 73, 79, 78, 128, 80, 65, 82, 65, 75, 76, 73, 84, - 73, 75, 73, 128, 80, 69, 78, 69, 84, 82, 65, 84, 73, 79, 78, 128, 80, 69, - 82, 83, 80, 69, 67, 84, 73, 86, 69, 128, 80, 73, 69, 85, 80, 45, 78, 73, - 69, 85, 78, 128, 80, 73, 69, 85, 80, 45, 82, 73, 69, 85, 76, 128, 80, 79, - 83, 84, 80, 79, 83, 73, 84, 73, 79, 206, 80, 82, 69, 83, 67, 82, 73, 80, - 84, 73, 79, 206, 80, 82, 79, 80, 79, 82, 84, 73, 79, 78, 65, 204, 82, 73, - 71, 72, 84, 45, 83, 72, 65, 68, 69, 196, 82, 73, 78, 70, 79, 82, 90, 65, - 78, 68, 79, 128, 82, 79, 85, 78, 68, 45, 84, 73, 80, 80, 69, 196, 83, 65, - 71, 73, 84, 84, 65, 82, 73, 85, 83, 128, 83, 69, 76, 69, 67, 84, 79, 82, - 45, 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, 50, 128, 83, 69, 76, 69, 67, 84, 79, 82, - 45, 49, 51, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 49, 52, 128, 83, 69, - 76, 69, 67, 84, 79, 82, 45, 49, 53, 128, 83, 69, 76, 69, 67, 84, 79, 82, - 45, 49, 54, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 49, 55, 128, 83, 69, - 76, 69, 67, 84, 79, 82, 45, 49, 56, 128, 83, 69, 76, 69, 67, 84, 79, 82, - 45, 49, 57, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 50, 48, 128, 83, 69, - 76, 69, 67, 84, 79, 82, 45, 50, 49, 128, 83, 69, 76, 69, 67, 84, 79, 82, - 45, 50, 50, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 50, 51, 128, 83, 69, - 76, 69, 67, 84, 79, 82, 45, 50, 52, 128, 83, 69, 76, 69, 67, 84, 79, 82, - 45, 50, 53, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 50, 54, 128, 83, 69, - 76, 69, 67, 84, 79, 82, 45, 50, 55, 128, 83, 69, 76, 69, 67, 84, 79, 82, - 45, 50, 56, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 50, 57, 128, 83, 69, - 76, 69, 67, 84, 79, 82, 45, 51, 48, 128, 83, 69, 76, 69, 67, 84, 79, 82, - 45, 51, 49, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 51, 50, 128, 83, 69, - 76, 69, 67, 84, 79, 82, 45, 51, 51, 128, 83, 69, 76, 69, 67, 84, 79, 82, - 45, 51, 52, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 51, 53, 128, 83, 69, - 76, 69, 67, 84, 79, 82, 45, 51, 54, 128, 83, 69, 76, 69, 67, 84, 79, 82, - 45, 51, 55, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 51, 56, 128, 83, 69, - 76, 69, 67, 84, 79, 82, 45, 51, 57, 128, 83, 69, 76, 69, 67, 84, 79, 82, - 45, 52, 48, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 52, 49, 128, 83, 69, - 76, 69, 67, 84, 79, 82, 45, 52, 50, 128, 83, 69, 76, 69, 67, 84, 79, 82, - 45, 52, 51, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 52, 52, 128, 83, 69, - 76, 69, 67, 84, 79, 82, 45, 52, 53, 128, 83, 69, 76, 69, 67, 84, 79, 82, - 45, 52, 54, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 52, 55, 128, 83, 69, - 76, 69, 67, 84, 79, 82, 45, 52, 56, 128, 83, 69, 76, 69, 67, 84, 79, 82, - 45, 52, 57, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 53, 48, 128, 83, 69, - 76, 69, 67, 84, 79, 82, 45, 53, 49, 128, 83, 69, 76, 69, 67, 84, 79, 82, - 45, 53, 50, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 53, 51, 128, 83, 69, - 76, 69, 67, 84, 79, 82, 45, 53, 52, 128, 83, 69, 76, 69, 67, 84, 79, 82, - 45, 53, 53, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 53, 54, 128, 83, 69, - 76, 69, 67, 84, 79, 82, 45, 53, 55, 128, 83, 69, 76, 69, 67, 84, 79, 82, - 45, 53, 56, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 53, 57, 128, 83, 69, - 76, 69, 67, 84, 79, 82, 45, 54, 48, 128, 83, 69, 76, 69, 67, 84, 79, 82, - 45, 54, 49, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 54, 50, 128, 83, 69, - 76, 69, 67, 84, 79, 82, 45, 54, 51, 128, 83, 69, 76, 69, 67, 84, 79, 82, - 45, 54, 52, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 54, 53, 128, 83, 69, - 76, 69, 67, 84, 79, 82, 45, 54, 54, 128, 83, 69, 76, 69, 67, 84, 79, 82, - 45, 54, 55, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 54, 56, 128, 83, 69, - 76, 69, 67, 84, 79, 82, 45, 54, 57, 128, 83, 69, 76, 69, 67, 84, 79, 82, - 45, 55, 48, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 55, 49, 128, 83, 69, - 76, 69, 67, 84, 79, 82, 45, 55, 50, 128, 83, 69, 76, 69, 67, 84, 79, 82, - 45, 55, 51, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 55, 52, 128, 83, 69, - 76, 69, 67, 84, 79, 82, 45, 55, 53, 128, 83, 69, 76, 69, 67, 84, 79, 82, - 45, 55, 54, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 55, 55, 128, 83, 69, - 76, 69, 67, 84, 79, 82, 45, 55, 56, 128, 83, 69, 76, 69, 67, 84, 79, 82, - 45, 55, 57, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 56, 48, 128, 83, 69, - 76, 69, 67, 84, 79, 82, 45, 56, 49, 128, 83, 69, 76, 69, 67, 84, 79, 82, - 45, 56, 50, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 56, 51, 128, 83, 69, - 76, 69, 67, 84, 79, 82, 45, 56, 52, 128, 83, 69, 76, 69, 67, 84, 79, 82, - 45, 56, 53, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 56, 54, 128, 83, 69, - 76, 69, 67, 84, 79, 82, 45, 56, 55, 128, 83, 69, 76, 69, 67, 84, 79, 82, - 45, 56, 56, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 56, 57, 128, 83, 69, - 76, 69, 67, 84, 79, 82, 45, 57, 48, 128, 83, 69, 76, 69, 67, 84, 79, 82, - 45, 57, 49, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 57, 50, 128, 83, 69, - 76, 69, 67, 84, 79, 82, 45, 57, 51, 128, 83, 69, 76, 69, 67, 84, 79, 82, - 45, 57, 52, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 57, 53, 128, 83, 69, - 76, 69, 67, 84, 79, 82, 45, 57, 54, 128, 83, 69, 76, 69, 67, 84, 79, 82, - 45, 57, 55, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 57, 56, 128, 83, 69, - 76, 69, 67, 84, 79, 82, 45, 57, 57, 128, 83, 69, 77, 73, 83, 69, 88, 84, - 73, 76, 69, 128, 83, 80, 82, 69, 67, 72, 71, 69, 83, 65, 78, 199, 83, 85, - 80, 69, 82, 73, 77, 80, 79, 83, 69, 196, 84, 69, 84, 82, 65, 70, 79, 78, - 73, 65, 83, 128, 84, 72, 65, 78, 84, 72, 65, 75, 72, 65, 84, 128, 84, 72, - 82, 69, 69, 45, 80, 69, 82, 45, 69, 205, 84, 79, 65, 78, 68, 65, 75, 72, - 73, 65, 84, 128, 84, 82, 65, 78, 83, 77, 73, 83, 83, 73, 79, 206, 84, 87, - 69, 78, 84, 89, 45, 70, 73, 86, 69, 128, 84, 87, 69, 78, 84, 89, 45, 78, - 73, 78, 69, 128, 85, 78, 65, 83, 80, 73, 82, 65, 84, 69, 68, 128, 85, 80, - 65, 68, 72, 77, 65, 78, 73, 89, 65, 128, 80, 85, 78, 67, 84, 85, 65, 84, - 73, 79, 206, 67, 73, 82, 67, 85, 77, 70, 76, 69, 88, 128, 83, 85, 80, 69, - 82, 83, 67, 82, 73, 80, 212, 72, 79, 82, 73, 90, 79, 78, 84, 65, 76, 128, - 69, 88, 67, 76, 65, 77, 65, 84, 73, 79, 206, 73, 78, 68, 69, 80, 69, 78, - 68, 69, 78, 212, 80, 69, 82, 73, 83, 80, 79, 77, 69, 78, 201, 68, 69, 83, - 67, 82, 73, 80, 84, 73, 79, 206, 80, 65, 82, 69, 78, 84, 72, 69, 83, 73, - 211, 68, 79, 85, 66, 76, 69, 45, 76, 73, 78, 197, 77, 65, 72, 65, 65, 80, - 82, 65, 65, 78, 193, 65, 80, 79, 83, 84, 82, 79, 80, 72, 69, 128, 67, 72, - 65, 82, 65, 67, 84, 69, 82, 83, 128, 85, 80, 45, 80, 79, 73, 78, 84, 73, - 78, 199, 83, 73, 78, 71, 76, 69, 45, 76, 73, 78, 197, 73, 77, 80, 69, 82, - 70, 69, 67, 84, 85, 205, 82, 73, 71, 72, 84, 87, 65, 82, 68, 83, 128, 65, - 82, 82, 79, 87, 45, 84, 65, 73, 76, 128, 68, 79, 65, 67, 72, 65, 83, 72, - 77, 69, 197, 65, 69, 76, 65, 45, 80, 73, 76, 76, 65, 128, 65, 76, 84, 69, - 82, 78, 65, 84, 73, 86, 197, 67, 79, 77, 80, 76, 69, 84, 73, 79, 78, 128, - 73, 78, 84, 69, 71, 82, 65, 84, 73, 79, 206, 73, 78, 84, 69, 82, 76, 73, - 78, 69, 65, 210, 79, 80, 69, 78, 45, 72, 69, 65, 68, 69, 196, 79, 80, 80, - 79, 83, 73, 84, 73, 79, 78, 128, 82, 73, 69, 85, 76, 45, 83, 73, 79, 83, - 128, 83, 69, 77, 73, 45, 86, 79, 73, 67, 69, 196, 83, 83, 65, 78, 71, 73, - 69, 85, 78, 71, 128, 83, 85, 80, 82, 65, 76, 73, 78, 69, 65, 210, 65, 69, - 68, 65, 45, 80, 73, 76, 76, 65, 128, 67, 79, 78, 83, 69, 67, 85, 84, 73, - 86, 197, 68, 73, 86, 73, 78, 65, 84, 73, 79, 78, 128, 69, 78, 84, 69, 82, - 80, 82, 73, 83, 69, 128, 73, 77, 80, 69, 82, 70, 69, 67, 84, 65, 128, 77, - 79, 78, 79, 70, 79, 78, 73, 65, 83, 128, 77, 79, 78, 79, 71, 82, 65, 77, - 77, 79, 211, 78, 65, 65, 83, 73, 75, 89, 65, 89, 65, 128, 78, 73, 69, 85, - 78, 45, 83, 73, 79, 83, 128, 79, 86, 69, 82, 76, 65, 80, 80, 73, 78, 199, - 80, 65, 82, 65, 75, 65, 76, 69, 83, 77, 193, 80, 65, 82, 65, 75, 76, 73, - 84, 73, 75, 201, 80, 65, 82, 84, 78, 69, 82, 83, 72, 73, 208, 80, 69, 82, - 67, 85, 83, 83, 73, 86, 69, 128, 80, 82, 79, 80, 79, 82, 84, 73, 79, 78, - 128, 82, 69, 67, 84, 65, 78, 71, 85, 76, 65, 210, 82, 69, 67, 84, 73, 76, - 73, 78, 69, 65, 210, 82, 69, 80, 76, 65, 67, 69, 77, 69, 78, 212, 83, 65, - 76, 76, 65, 76, 76, 65, 72, 79, 213, 83, 73, 79, 83, 45, 78, 73, 69, 85, - 78, 128, 83, 73, 79, 83, 45, 82, 73, 69, 85, 76, 128, 83, 83, 65, 78, 71, - 72, 73, 69, 85, 72, 128, 83, 83, 65, 78, 71, 78, 73, 69, 85, 78, 128, 83, - 83, 65, 78, 71, 82, 73, 69, 85, 76, 128, 84, 65, 66, 85, 76, 65, 84, 73, - 79, 78, 128, 84, 69, 84, 82, 65, 83, 73, 77, 79, 85, 128, 84, 72, 69, 77, - 65, 84, 73, 83, 77, 79, 211, 84, 87, 69, 78, 84, 89, 45, 79, 78, 69, 128, - 84, 87, 69, 78, 84, 89, 45, 84, 87, 79, 128, 65, 76, 84, 69, 82, 78, 65, - 84, 73, 79, 206, 65, 78, 71, 75, 72, 65, 78, 75, 72, 85, 128, 65, 78, 84, - 73, 75, 69, 78, 79, 77, 65, 128, 65, 78, 85, 83, 86, 65, 82, 65, 89, 65, - 128, 65, 80, 79, 83, 84, 82, 79, 70, 79, 83, 128, 65, 83, 84, 69, 82, 73, - 83, 67, 85, 83, 128, 65, 85, 82, 65, 77, 65, 90, 68, 65, 65, 128, 66, 65, - 67, 75, 45, 84, 73, 76, 84, 69, 196, 66, 65, 82, 73, 89, 79, 79, 83, 65, - 78, 128, 66, 65, 84, 72, 65, 77, 65, 83, 65, 84, 128, 67, 73, 82, 67, 85, - 76, 65, 84, 73, 79, 206, 67, 76, 85, 66, 45, 83, 80, 79, 75, 69, 196, 67, - 79, 77, 80, 76, 69, 77, 69, 78, 84, 128, 67, 79, 77, 80, 76, 73, 65, 78, - 67, 69, 128, 67, 79, 77, 80, 79, 83, 73, 84, 73, 79, 206, 67, 79, 78, 84, - 69, 78, 84, 73, 79, 78, 128, 67, 79, 82, 82, 69, 83, 80, 79, 78, 68, 211, - 67, 82, 79, 83, 83, 66, 79, 78, 69, 83, 128, 68, 65, 71, 66, 65, 83, 73, - 78, 78, 65, 128, 68, 69, 70, 73, 78, 73, 84, 73, 79, 78, 128, 68, 69, 78, - 79, 77, 73, 78, 65, 84, 79, 210, 68, 73, 65, 69, 82, 69, 83, 73, 90, 69, - 196, 68, 73, 77, 69, 78, 83, 73, 79, 78, 65, 204, 68, 73, 82, 69, 67, 84, - 73, 79, 78, 65, 204, 68, 73, 83, 80, 69, 82, 83, 73, 79, 78, 128, 68, 73, - 83, 84, 79, 82, 84, 73, 79, 78, 128, 68, 73, 86, 69, 82, 71, 69, 78, 67, - 69, 128, 68, 79, 84, 83, 45, 49, 50, 51, 52, 53, 128, 68, 79, 84, 83, 45, - 49, 50, 51, 52, 54, 128, 68, 79, 84, 83, 45, 49, 50, 51, 52, 55, 128, 68, - 79, 84, 83, 45, 49, 50, 51, 52, 56, 128, 68, 79, 84, 83, 45, 49, 50, 51, - 53, 54, 128, 68, 79, 84, 83, 45, 49, 50, 51, 53, 55, 128, 68, 79, 84, 83, - 45, 49, 50, 51, 53, 56, 128, 68, 79, 84, 83, 45, 49, 50, 51, 54, 55, 128, - 68, 79, 84, 83, 45, 49, 50, 51, 54, 56, 128, 68, 79, 84, 83, 45, 49, 50, - 51, 55, 56, 128, 68, 79, 84, 83, 45, 49, 50, 52, 53, 54, 128, 68, 79, 84, - 83, 45, 49, 50, 52, 53, 55, 128, 68, 79, 84, 83, 45, 49, 50, 52, 53, 56, - 128, 68, 79, 84, 83, 45, 49, 50, 52, 54, 55, 128, 68, 79, 84, 83, 45, 49, - 50, 52, 54, 56, 128, 68, 79, 84, 83, 45, 49, 50, 52, 55, 56, 128, 68, 79, - 84, 83, 45, 49, 50, 53, 54, 55, 128, 68, 79, 84, 83, 45, 49, 50, 53, 54, - 56, 128, 68, 79, 84, 83, 45, 49, 50, 53, 55, 56, 128, 68, 79, 84, 83, 45, - 49, 50, 54, 55, 56, 128, 68, 79, 84, 83, 45, 49, 51, 52, 53, 54, 128, 68, - 79, 84, 83, 45, 49, 51, 52, 53, 55, 128, 68, 79, 84, 83, 45, 49, 51, 52, - 53, 56, 128, 68, 79, 84, 83, 45, 49, 51, 52, 54, 55, 128, 68, 79, 84, 83, - 45, 49, 51, 52, 54, 56, 128, 68, 79, 84, 83, 45, 49, 51, 52, 55, 56, 128, - 68, 79, 84, 83, 45, 49, 51, 53, 54, 55, 128, 68, 79, 84, 83, 45, 49, 51, - 53, 54, 56, 128, 68, 79, 84, 83, 45, 49, 51, 53, 55, 56, 128, 68, 79, 84, - 83, 45, 49, 51, 54, 55, 56, 128, 68, 79, 84, 83, 45, 49, 52, 53, 54, 55, - 128, 68, 79, 84, 83, 45, 49, 52, 53, 54, 56, 128, 68, 79, 84, 83, 45, 49, - 52, 53, 55, 56, 128, 68, 79, 84, 83, 45, 49, 52, 54, 55, 56, 128, 68, 79, - 84, 83, 45, 49, 53, 54, 55, 56, 128, 68, 79, 84, 83, 45, 50, 51, 52, 53, - 54, 128, 68, 79, 84, 83, 45, 50, 51, 52, 53, 55, 128, 68, 79, 84, 83, 45, - 50, 51, 52, 53, 56, 128, 68, 79, 84, 83, 45, 50, 51, 52, 54, 55, 128, 68, - 79, 84, 83, 45, 50, 51, 52, 54, 56, 128, 68, 79, 84, 83, 45, 50, 51, 52, - 55, 56, 128, 68, 79, 84, 83, 45, 50, 51, 53, 54, 55, 128, 68, 79, 84, 83, - 45, 50, 51, 53, 54, 56, 128, 68, 79, 84, 83, 45, 50, 51, 53, 55, 56, 128, - 68, 79, 84, 83, 45, 50, 51, 54, 55, 56, 128, 68, 79, 84, 83, 45, 50, 52, - 53, 54, 55, 128, 68, 79, 84, 83, 45, 50, 52, 53, 54, 56, 128, 68, 79, 84, - 83, 45, 50, 52, 53, 55, 56, 128, 68, 79, 84, 83, 45, 50, 52, 54, 55, 56, - 128, 68, 79, 84, 83, 45, 50, 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, 56, 128, 68, 79, - 84, 83, 45, 51, 52, 53, 55, 56, 128, 68, 79, 84, 83, 45, 51, 52, 54, 55, - 56, 128, 68, 79, 84, 83, 45, 51, 53, 54, 55, 56, 128, 68, 79, 84, 83, 45, - 52, 53, 54, 55, 56, 128, 69, 75, 83, 84, 82, 69, 80, 84, 79, 78, 128, 69, - 77, 66, 82, 79, 73, 68, 69, 82, 89, 128, 69, 78, 67, 79, 85, 78, 84, 69, - 82, 83, 128, 69, 78, 84, 72, 85, 83, 73, 65, 83, 77, 128, 69, 81, 85, 73, - 65, 78, 71, 85, 76, 65, 210, 69, 88, 72, 65, 85, 83, 84, 73, 79, 78, 128, - 70, 65, 72, 82, 69, 78, 72, 69, 73, 84, 128, 70, 69, 76, 76, 79, 87, 83, - 72, 73, 80, 128, 70, 79, 82, 77, 65, 84, 84, 73, 78, 71, 128, 70, 79, 85, - 82, 45, 80, 69, 82, 45, 69, 205, 70, 79, 85, 82, 45, 83, 84, 82, 73, 78, - 199, 71, 66, 65, 75, 85, 82, 85, 78, 69, 78, 128, 72, 66, 65, 83, 65, 45, - 69, 83, 65, 83, 193, 72, 79, 77, 79, 84, 72, 69, 84, 73, 67, 128, 72, 89, - 80, 72, 69, 78, 65, 84, 73, 79, 206, 73, 77, 73, 68, 73, 65, 82, 71, 79, - 78, 128, 73, 77, 73, 70, 84, 72, 79, 82, 79, 78, 128, 73, 78, 70, 79, 82, - 77, 65, 84, 73, 79, 206, 73, 78, 84, 69, 82, 76, 79, 67, 75, 69, 196, 75, - 73, 82, 79, 71, 85, 82, 65, 77, 85, 128, 75, 85, 78, 68, 68, 65, 76, 73, - 89, 65, 128, 76, 65, 74, 65, 78, 89, 65, 76, 65, 78, 128, 76, 69, 70, 84, - 45, 83, 72, 65, 68, 69, 196, 76, 69, 78, 71, 84, 72, 69, 78, 69, 82, 128, - 76, 73, 77, 73, 84, 65, 84, 73, 79, 78, 128, 77, 69, 77, 66, 69, 82, 83, - 72, 73, 80, 128, 77, 85, 76, 84, 73, 79, 67, 85, 76, 65, 210, 78, 65, 78, - 71, 77, 79, 78, 84, 72, 79, 128, 78, 79, 78, 45, 74, 79, 73, 78, 69, 82, - 128, 78, 79, 78, 70, 79, 82, 75, 73, 78, 71, 128, 79, 80, 80, 82, 69, 83, - 83, 73, 79, 78, 128, 80, 65, 76, 65, 84, 65, 76, 73, 90, 69, 196, 80, 65, - 78, 65, 69, 76, 65, 69, 78, 71, 128, 80, 65, 78, 69, 85, 76, 69, 85, 78, - 71, 128, 80, 65, 84, 72, 65, 77, 65, 83, 65, 84, 128, 80, 69, 68, 69, 83, - 84, 82, 73, 65, 78, 128, 80, 79, 83, 83, 69, 83, 83, 73, 79, 78, 128, 80, - 82, 79, 74, 69, 67, 84, 73, 79, 78, 128, 80, 82, 79, 74, 69, 67, 84, 73, - 86, 69, 128, 82, 65, 68, 73, 79, 65, 67, 84, 73, 86, 197, 82, 65, 72, 77, - 65, 84, 85, 76, 76, 65, 200, 82, 69, 83, 73, 83, 84, 65, 78, 67, 69, 128, - 82, 69, 83, 79, 76, 85, 84, 73, 79, 78, 128, 82, 69, 86, 79, 76, 85, 84, - 73, 79, 78, 128, 83, 65, 67, 82, 73, 70, 73, 67, 73, 65, 204, 83, 69, 76, - 69, 67, 84, 79, 82, 45, 49, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 50, - 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 51, 128, 83, 69, 76, 69, 67, 84, - 79, 82, 45, 52, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 53, 128, 83, 69, - 76, 69, 67, 84, 79, 82, 45, 54, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, - 55, 128, 83, 69, 76, 69, 67, 84, 79, 82, 45, 56, 128, 83, 69, 76, 69, 67, - 84, 79, 82, 45, 57, 128, 83, 72, 65, 76, 83, 72, 69, 76, 69, 84, 128, 83, - 73, 79, 83, 45, 72, 73, 69, 85, 72, 128, 83, 73, 79, 83, 45, 73, 69, 85, - 78, 71, 128, 83, 73, 79, 83, 45, 77, 73, 69, 85, 77, 128, 83, 83, 65, 78, - 71, 65, 82, 65, 69, 65, 128, 83, 84, 65, 78, 68, 83, 84, 73, 76, 76, 128, - 83, 85, 66, 80, 85, 78, 67, 84, 73, 83, 128, 83, 85, 66, 83, 84, 73, 84, - 85, 84, 69, 128, 83, 89, 78, 67, 72, 82, 79, 78, 79, 85, 211, 84, 69, 82, - 77, 73, 78, 65, 84, 79, 82, 128, 84, 72, 73, 82, 84, 89, 45, 79, 78, 69, - 128, 84, 79, 80, 45, 76, 73, 71, 72, 84, 69, 196, 84, 82, 65, 78, 83, 86, - 69, 82, 83, 65, 204, 84, 87, 69, 78, 84, 89, 45, 83, 73, 88, 128, 86, 69, - 82, 84, 73, 67, 65, 76, 76, 89, 128, 87, 73, 68, 69, 45, 72, 69, 65, 68, - 69, 196, 65, 67, 82, 79, 80, 72, 79, 78, 73, 195, 67, 73, 82, 67, 85, 77, - 70, 76, 69, 216, 68, 69, 83, 67, 69, 78, 68, 69, 82, 128, 80, 72, 79, 69, - 78, 73, 67, 73, 65, 206, 76, 69, 83, 83, 45, 84, 72, 65, 78, 128, 65, 78, - 78, 79, 84, 65, 84, 73, 79, 206, 69, 81, 85, 73, 86, 65, 76, 69, 78, 212, - 83, 69, 80, 65, 82, 65, 84, 79, 82, 128, 84, 87, 79, 45, 72, 69, 65, 68, - 69, 196, 65, 82, 82, 79, 87, 72, 69, 65, 68, 128, 68, 79, 87, 78, 87, 65, - 82, 68, 83, 128, 65, 76, 80, 65, 80, 82, 65, 65, 78, 193, 69, 88, 84, 69, - 78, 83, 73, 79, 78, 128, 76, 69, 78, 84, 73, 67, 85, 76, 65, 210, 80, 72, - 65, 82, 89, 78, 71, 69, 65, 204, 80, 82, 79, 76, 65, 84, 73, 79, 78, 197, - 83, 69, 77, 73, 67, 79, 76, 79, 78, 128, 84, 85, 82, 78, 83, 84, 73, 76, - 69, 128, 65, 77, 80, 69, 82, 83, 65, 78, 68, 128, 76, 69, 70, 84, 87, 65, - 82, 68, 83, 128, 84, 82, 79, 69, 90, 69, 78, 73, 65, 206, 67, 79, 77, 77, - 69, 82, 67, 73, 65, 204, 69, 80, 73, 71, 82, 65, 80, 72, 73, 195, 83, 69, - 77, 73, 68, 73, 82, 69, 67, 212, 83, 69, 86, 69, 78, 84, 69, 69, 78, 128, - 87, 79, 79, 68, 83, 45, 67, 82, 69, 197, 66, 65, 67, 75, 83, 76, 65, 83, - 72, 128, 68, 73, 65, 76, 89, 84, 73, 75, 65, 128, 69, 88, 84, 82, 65, 45, - 72, 73, 71, 200, 70, 73, 88, 69, 68, 45, 70, 79, 82, 205, 73, 77, 80, 69, - 82, 70, 69, 67, 84, 193, 73, 78, 68, 73, 67, 65, 84, 79, 82, 128, 82, 69, - 67, 84, 65, 78, 71, 76, 69, 128, 82, 73, 71, 72, 84, 45, 72, 65, 78, 196, - 84, 82, 73, 65, 78, 71, 85, 76, 65, 210, 86, 69, 82, 84, 73, 67, 65, 76, - 76, 217, 67, 79, 78, 84, 65, 73, 78, 73, 78, 199, 68, 69, 76, 73, 77, 73, - 84, 69, 82, 128, 69, 78, 67, 76, 79, 83, 85, 82, 69, 128, 69, 80, 73, 68, - 65, 85, 82, 69, 65, 206, 72, 69, 82, 77, 73, 79, 78, 73, 65, 206, 72, 79, - 85, 82, 71, 76, 65, 83, 83, 128, 77, 65, 72, 65, 80, 82, 65, 78, 65, 128, - 83, 69, 77, 73, 66, 82, 69, 86, 73, 211, 83, 69, 77, 73, 77, 73, 78, 73, - 77, 193, 83, 78, 79, 87, 70, 76, 65, 75, 69, 128, 65, 80, 79, 83, 84, 82, - 79, 70, 79, 201, 65, 80, 79, 83, 84, 82, 79, 70, 79, 211, 65, 82, 80, 69, - 71, 71, 73, 65, 84, 207, 65, 84, 72, 65, 80, 65, 83, 67, 65, 206, 67, 69, - 78, 84, 82, 69, 76, 73, 78, 197, 67, 72, 65, 82, 65, 67, 84, 69, 82, 128, - 67, 79, 80, 82, 79, 68, 85, 67, 84, 128, 67, 82, 79, 83, 83, 72, 65, 84, - 67, 200, 67, 85, 65, 84, 82, 73, 76, 76, 79, 128, 68, 69, 83, 67, 69, 78, - 68, 73, 78, 199, 69, 77, 66, 69, 68, 68, 73, 78, 71, 128, 70, 73, 78, 65, - 78, 67, 73, 65, 76, 128, 70, 79, 76, 76, 79, 87, 73, 78, 71, 128, 70, 82, - 69, 84, 66, 79, 65, 82, 68, 128, 71, 69, 82, 83, 72, 65, 89, 73, 77, 128, - 71, 79, 82, 84, 72, 77, 73, 75, 79, 206, 73, 67, 72, 73, 77, 65, 84, 79, - 83, 128, 75, 72, 65, 75, 65, 83, 83, 73, 65, 206, 80, 65, 65, 45, 80, 73, - 76, 76, 65, 128, 80, 65, 77, 80, 72, 89, 76, 73, 65, 206, 80, 65, 82, 65, - 80, 72, 82, 65, 83, 197, 80, 69, 78, 84, 65, 83, 69, 77, 69, 128, 80, 72, - 73, 76, 73, 80, 80, 73, 78, 197, 83, 69, 77, 73, 67, 73, 82, 67, 76, 197, - 83, 85, 77, 77, 65, 84, 73, 79, 78, 128, 83, 85, 80, 69, 82, 86, 73, 83, - 69, 128, 83, 89, 77, 66, 79, 76, 45, 49, 49, 128, 83, 89, 77, 66, 79, 76, - 45, 49, 50, 128, 83, 89, 77, 66, 79, 76, 45, 49, 51, 128, 83, 89, 77, 66, - 79, 76, 45, 49, 52, 128, 83, 89, 77, 66, 79, 76, 45, 49, 55, 128, 83, 89, - 77, 66, 79, 76, 45, 49, 56, 128, 83, 89, 77, 66, 79, 76, 45, 49, 57, 128, - 83, 89, 77, 66, 79, 76, 45, 50, 51, 128, 83, 89, 77, 66, 79, 76, 45, 50, - 52, 128, 83, 89, 77, 66, 79, 76, 45, 53, 48, 128, 83, 89, 77, 66, 79, 76, - 45, 53, 49, 128, 83, 89, 77, 66, 79, 76, 45, 53, 50, 128, 83, 89, 77, 66, - 79, 76, 45, 53, 51, 128, 83, 89, 77, 66, 79, 76, 45, 53, 52, 128, 84, 69, - 76, 69, 80, 72, 79, 78, 69, 128, 84, 69, 84, 82, 65, 83, 69, 77, 69, 128, - 84, 82, 69, 77, 79, 76, 79, 45, 49, 128, 84, 82, 69, 77, 79, 76, 79, 45, - 50, 128, 84, 82, 69, 77, 79, 76, 79, 45, 51, 128, 84, 82, 73, 71, 82, 65, - 77, 77, 79, 211, 84, 82, 79, 75, 85, 84, 65, 83, 84, 201, 86, 73, 83, 73, - 71, 79, 84, 72, 73, 195, 65, 65, 66, 65, 65, 70, 73, 76, 73, 128, 65, 66, - 85, 78, 68, 65, 78, 67, 69, 128, 65, 76, 45, 76, 65, 75, 85, 78, 65, 128, - 65, 76, 80, 65, 80, 82, 65, 78, 65, 128, 65, 78, 84, 73, 70, 79, 78, 73, - 65, 128, 65, 80, 80, 82, 79, 65, 67, 72, 69, 211, 65, 82, 45, 82, 65, 72, - 69, 69, 77, 128, 65, 83, 83, 69, 82, 84, 73, 79, 78, 128, 65, 84, 84, 69, - 78, 84, 73, 79, 78, 128, 66, 65, 67, 75, 83, 80, 65, 67, 69, 128, 66, 69, - 71, 73, 78, 78, 73, 78, 71, 128, 66, 73, 66, 76, 69, 45, 67, 82, 69, 197, - 66, 79, 79, 77, 69, 82, 65, 78, 71, 128, 67, 65, 80, 82, 73, 67, 79, 82, - 78, 128, 67, 72, 65, 86, 73, 89, 65, 78, 73, 128, 67, 76, 79, 83, 69, 78, - 69, 83, 83, 128, 67, 79, 77, 80, 76, 69, 84, 69, 68, 128, 67, 79, 78, 74, - 79, 73, 78, 73, 78, 199, 67, 79, 78, 83, 84, 65, 78, 67, 89, 128, 67, 79, - 80, 89, 82, 73, 71, 72, 84, 128, 68, 65, 72, 89, 65, 65, 85, 83, 72, 128, - 68, 65, 82, 75, 69, 78, 73, 78, 71, 128, 68, 69, 80, 65, 82, 84, 85, 82, - 69, 128, 68, 73, 70, 70, 69, 82, 69, 78, 67, 197, 68, 73, 70, 70, 73, 67, - 85, 76, 84, 217, 68, 79, 84, 83, 45, 49, 50, 51, 52, 128, 68, 79, 84, 83, - 45, 49, 50, 51, 53, 128, 68, 79, 84, 83, 45, 49, 50, 51, 54, 128, 68, 79, - 84, 83, 45, 49, 50, 51, 55, 128, 68, 79, 84, 83, 45, 49, 50, 51, 56, 128, - 68, 79, 84, 83, 45, 49, 50, 52, 53, 128, 68, 79, 84, 83, 45, 49, 50, 52, - 54, 128, 68, 79, 84, 83, 45, 49, 50, 52, 55, 128, 68, 79, 84, 83, 45, 49, - 50, 52, 56, 128, 68, 79, 84, 83, 45, 49, 50, 53, 54, 128, 68, 79, 84, 83, - 45, 49, 50, 53, 55, 128, 68, 79, 84, 83, 45, 49, 50, 53, 56, 128, 68, 79, - 84, 83, 45, 49, 50, 54, 55, 128, 68, 79, 84, 83, 45, 49, 50, 54, 56, 128, - 68, 79, 84, 83, 45, 49, 50, 55, 56, 128, 68, 79, 84, 83, 45, 49, 51, 52, - 53, 128, 68, 79, 84, 83, 45, 49, 51, 52, 54, 128, 68, 79, 84, 83, 45, 49, - 51, 52, 55, 128, 68, 79, 84, 83, 45, 49, 51, 52, 56, 128, 68, 79, 84, 83, - 45, 49, 51, 53, 54, 128, 68, 79, 84, 83, 45, 49, 51, 53, 55, 128, 68, 79, - 84, 83, 45, 49, 51, 53, 56, 128, 68, 79, 84, 83, 45, 49, 51, 54, 55, 128, - 68, 79, 84, 83, 45, 49, 51, 54, 56, 128, 68, 79, 84, 83, 45, 49, 51, 55, - 56, 128, 68, 79, 84, 83, 45, 49, 52, 53, 54, 128, 68, 79, 84, 83, 45, 49, - 52, 53, 55, 128, 68, 79, 84, 83, 45, 49, 52, 53, 56, 128, 68, 79, 84, 83, - 45, 49, 52, 54, 55, 128, 68, 79, 84, 83, 45, 49, 52, 54, 56, 128, 68, 79, - 84, 83, 45, 49, 52, 55, 56, 128, 68, 79, 84, 83, 45, 49, 53, 54, 55, 128, - 68, 79, 84, 83, 45, 49, 53, 54, 56, 128, 68, 79, 84, 83, 45, 49, 53, 55, - 56, 128, 68, 79, 84, 83, 45, 49, 54, 55, 56, 128, 68, 79, 84, 83, 45, 50, - 51, 52, 53, 128, 68, 79, 84, 83, 45, 50, 51, 52, 54, 128, 68, 79, 84, 83, - 45, 50, 51, 52, 55, 128, 68, 79, 84, 83, 45, 50, 51, 52, 56, 128, 68, 79, - 84, 83, 45, 50, 51, 53, 54, 128, 68, 79, 84, 83, 45, 50, 51, 53, 55, 128, - 68, 79, 84, 83, 45, 50, 51, 53, 56, 128, 68, 79, 84, 83, 45, 50, 51, 54, - 55, 128, 68, 79, 84, 83, 45, 50, 51, 54, 56, 128, 68, 79, 84, 83, 45, 50, - 51, 55, 56, 128, 68, 79, 84, 83, 45, 50, 52, 53, 54, 128, 68, 79, 84, 83, - 45, 50, 52, 53, 55, 128, 68, 79, 84, 83, 45, 50, 52, 53, 56, 128, 68, 79, - 84, 83, 45, 50, 52, 54, 55, 128, 68, 79, 84, 83, 45, 50, 52, 54, 56, 128, - 68, 79, 84, 83, 45, 50, 52, 55, 56, 128, 68, 79, 84, 83, 45, 50, 53, 54, + 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, 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, 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, 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, + 73, 80, 84, 128, 83, 67, 82, 69, 69, 78, 128, 83, 67, 82, 69, 69, 206, + 83, 67, 79, 82, 80, 73, 85, 83, 128, 83, 67, 73, 83, 83, 79, 82, 83, 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, 76, 65, 82, + 128, 83, 67, 72, 69, 77, 193, 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, 73, 77, 65, + 84, 65, 128, 83, 65, 87, 65, 78, 128, 83, 65, 87, 128, 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, 83, 65, 75, 128, 83, + 65, 82, 73, 128, 83, 65, 82, 193, 83, 65, 82, 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, 65, 72, 128, 83, 65, 78, 128, 83, 65, 77, 89, 79, + 203, 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, 128, 83, 65, 76, 84, 73, 82, 69, + 128, 83, 65, 76, 84, 73, 76, 76, 79, 128, 83, 65, 76, 84, 128, 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, 128, 83, 65, 75, 79, 84, 128, 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, 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, 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, 89, 65, 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, 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, 128, 82, 85, 77, 201, 82, 85, 77, 65, 201, 82, 85, + 77, 128, 82, 85, 205, 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, 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, 89, 128, 82, 82, 85, 88, 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, 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, 128, 82, 82, 65, 88, 128, 82, 82, 65, + 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, 79, 84, + 128, 82, 79, 79, 75, 128, 82, 79, 79, 70, 128, 82, 79, 79, 128, 82, 79, + 77, 65, 206, 82, 79, 196, 82, 79, 67, 128, 82, 79, 66, 65, 84, 128, 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, 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, 75, 82, 73, 75, 128, 82, 73, 73, 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, 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, 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, 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, 197, 82, 69, 85, 88, 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, 83, 85, 80, 73, 78, 85, + 83, 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, 69, 65, 84, 69, 196, 82, 69, 80, 69, 65, 84, + 128, 82, 69, 80, 69, 65, 212, 82, 69, 80, 65, 128, 82, 69, 80, 193, 82, + 69, 78, 84, 79, 71, 69, 78, 128, 82, 69, 78, 128, 82, 69, 77, 85, 128, + 82, 69, 76, 73, 71, 73, 79, 78, 128, 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, 73, 83, 84, 69, 82, 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, 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, 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, 89, 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, 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, 77, 128, 82, 65, 75, 72, 65, 78, 71, 128, 82, 65, 73, 83, 69, + 196, 82, 65, 73, 78, 128, 82, 65, 73, 206, 82, 65, 73, 68, 207, 82, 65, + 73, 68, 65, 128, 82, 65, 73, 128, 82, 65, 72, 77, 65, 84, 85, 76, 76, 65, + 200, 82, 65, 70, 69, 128, 82, 65, 69, 128, 82, 65, 68, 73, 79, 65, 67, + 84, 73, 86, 197, 82, 65, 68, 201, 82, 65, 68, 128, 82, 65, 196, 82, 65, + 66, 128, 82, 65, 65, 73, 128, 82, 65, 65, 128, 82, 65, 51, 128, 82, 65, + 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, 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, 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, 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, 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, 209, 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, 84, 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, 73, 84, 89, 128, 80, 85, 82, 128, 80, 85, 80, + 128, 80, 85, 79, 88, 128, 80, 85, 79, 80, 128, 80, 85, 79, 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, 69, 128, + 80, 85, 65, 69, 128, 80, 85, 50, 128, 80, 85, 128, 80, 84, 72, 65, 72, + 193, 80, 84, 69, 128, 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, 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, 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, 83, 72, 84, 72, 65, 77, 65, 84, 82, 193, + 80, 82, 73, 78, 84, 128, 80, 82, 73, 78, 212, 80, 82, 73, 77, 69, 128, + 80, 82, 73, 77, 197, 80, 82, 69, 86, 73, 79, 85, 211, 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, 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, 85, 78, 196, 80, 79, 83, 84, 80, 79, 83, 73, 84, 73, 79, + 206, 80, 79, 83, 84, 65, 204, 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, 128, 80, 79, 208, 80, 79, 79, 128, 80, 79, 78, 68, + 79, 128, 80, 79, 76, 201, 80, 79, 76, 69, 128, 80, 79, 75, 82, 89, 84, + 73, 69, 128, 80, 79, 75, 79, 74, 73, 128, 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, 77, 69, 196, 80, 76, 85, 77, 128, 80, 76, 85, 75, 128, 80, 76, + 79, 87, 128, 80, 76, 79, 80, 72, 85, 128, 80, 76, 69, 84, 72, 82, 79, 78, + 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, 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, + 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, 80, 73, 78, 71, 128, 80, 73, 80, 128, + 80, 73, 78, 87, 72, 69, 69, 204, 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, 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, 80, 128, 80, 73, 69, 67, 69, 128, 80, + 73, 69, 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, 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, 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, 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, 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, 128, 80, 69, + 82, 83, 79, 206, 80, 69, 82, 83, 73, 65, 206, 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, 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, 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, 78, 84, 65, 83, 69, 77, 69, 128, 80, 69, + 78, 84, 65, 71, 79, 78, 128, 80, 69, 78, 83, 85, 128, 80, 69, 78, 78, + 217, 80, 69, 78, 73, 72, 73, 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, 80, 128, + 80, 69, 69, 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, 69, 128, 80, 69, 65, 67, 197, 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, 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, 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, 69, 81, 128, 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, 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, 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, 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, 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, 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, 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, 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, 72, 76, 65, 86, 201, 80, 65, 68, 77, 193, 80, 65, + 68, 193, 80, 65, 68, 128, 80, 65, 67, 75, 73, 78, 71, 128, 80, 65, 65, + 84, 85, 128, 80, 65, 65, 83, 69, 78, 84, 79, 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, 78, 75, 73, 193, 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, 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, 68, 73, 78, 65, 204, 79, 82, 67, 72, 73, 68, + 128, 79, 80, 84, 73, 79, 206, 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, 69, 82, 65, 84, 79, 82, + 128, 79, 80, 69, 82, 65, 84, 79, 210, 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, 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, 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, + 76, 73, 78, 197, 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, 77, + 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, 72, 128, 79, 71, 79, 78, 69, 75, 128, 79, 71, + 79, 78, 69, 203, 79, 71, 72, 65, 205, 79, 69, 75, 128, 79, 68, 196, 79, + 67, 84, 79, 66, 69, 82, 128, 79, 67, 210, 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, 80, + 128, 78, 90, 85, 79, 88, 128, 78, 90, 85, 79, 128, 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, 128, 78, 90, 65, 88, 128, 78, 90, 65, 84, 128, 78, 90, 65, 80, + 128, 78, 90, 65, 128, 78, 89, 87, 65, 128, 78, 89, 85, 88, 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, 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, 211, 78, 89, 73, 80, 128, 78, 89, 73, + 78, 45, 68, 79, 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, 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, + 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, 84, + 73, 76, 76, 85, 128, 78, 85, 84, 128, 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, 128, + 78, 85, 77, 128, 78, 85, 76, 76, 128, 78, 85, 76, 204, 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, 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, 69, 69, 128, 78, 83, 72, 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, 128, 78, 79, 84, 197, 78, 79, 84, 67, 72, 69, 196, + 78, 79, 84, 67, 72, 128, 78, 79, 84, 128, 78, 79, 83, 69, 128, 78, 79, + 82, 84, 72, 87, 69, 83, 212, 78, 79, 82, 84, 200, 78, 79, 82, 77, 65, + 204, 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, 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, 79, 128, + 78, 78, 78, 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, 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, 75, 207, 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, 80, 128, 78, 74, 85, 79, 88, 128, + 78, 74, 85, 79, 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, 128, 78, 74, 73, 128, 78, 74, 69, 69, + 128, 78, 74, 69, 128, 78, 74, 65, 69, 77, 76, 73, 128, 78, 74, 65, 69, + 77, 128, 78, 74, 128, 78, 73, 88, 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, 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, 73, 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, 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, 65, 128, 78, 72, 128, 78, 71, 89, 69, 128, 78, + 71, 86, 69, 128, 78, 71, 85, 79, 88, 128, 78, 71, 85, 79, 84, 128, 78, + 71, 85, 79, 128, 78, 71, 79, 88, 128, 78, 71, 79, 85, 128, 78, 71, 79, + 213, 78, 71, 79, 84, 128, 78, 71, 79, 80, 128, 78, 71, 79, 78, 128, 78, + 71, 79, 69, 72, 128, 78, 71, 79, 69, 200, 78, 71, 207, 78, 71, 75, 87, + 65, 69, 78, 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, 71, 85, 128, 78, 71, 71, + 79, 79, 128, 78, 71, 71, 79, 128, 78, 71, 71, 73, 128, 78, 71, 71, 69, + 78, 128, 78, 71, 71, 69, 69, 128, 78, 71, 71, 69, 128, 78, 71, 71, 128, + 78, 71, 69, 88, 128, 78, 71, 69, 80, 128, 78, 71, 69, 78, 128, 78, 71, + 69, 65, 68, 65, 76, 128, 78, 71, 69, 128, 78, 71, 65, 88, 128, 78, 71, + 65, 84, 128, 78, 71, 65, 211, 78, 71, 65, 80, 128, 78, 71, 65, 78, 128, + 78, 71, 65, 73, 128, 78, 71, 65, 65, 73, 128, 78, 71, 193, 78, 70, 128, + 78, 69, 88, 212, 78, 69, 88, 128, 78, 69, 87, 76, 73, 78, 69, 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, 73, 84, + 72, 69, 210, 78, 69, 71, 65, 84, 73, 86, 197, 78, 69, 71, 65, 84, 73, 79, + 206, 78, 69, 71, 65, 84, 69, 196, 78, 69, 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, 79, 88, 128, 78, 68, 79, 84, 128, 78, 68, 79, 80, 128, 78, 68, 79, + 79, 128, 78, 68, 79, 76, 197, 78, 68, 73, 88, 128, 78, 68, 73, 84, 128, + 78, 68, 73, 80, 128, 78, 68, 73, 69, 88, 128, 78, 68, 73, 69, 128, 78, + 68, 73, 128, 78, 68, 69, 88, 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, 65, 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, 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, 206, 78, 65, 82, 82, 79, + 215, 78, 65, 82, 128, 78, 65, 79, 211, 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, 73, + 82, 193, 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, 66, 76, 65, + 128, 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, 65, 128, 78, 65, + 193, 78, 65, 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, 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, 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, 84, 128, 77, + 85, 83, 73, 67, 128, 77, 85, 83, 73, 195, 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, 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, 128, 77, 85, 199, 77, 85, 69, + 128, 77, 85, 67, 200, 77, 85, 67, 65, 65, 68, 128, 77, 85, 65, 78, 128, + 77, 85, 45, 71, 65, 65, 72, 76, 65, 193, 77, 213, 77, 83, 128, 77, 80, + 65, 128, 77, 79, 88, 128, 77, 79, 86, 69, 196, 77, 79, 85, 84, 72, 128, + 77, 79, 85, 84, 200, 77, 79, 85, 78, 84, 65, 73, 78, 128, 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, 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, 128, 77, 79, 78, 84, 72, 128, 77, 79, 78, 84, 200, 77, 79, + 78, 79, 83, 84, 65, 66, 76, 197, 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, 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, 65, 128, 77, 207, 77, 78, + 89, 65, 205, 77, 78, 65, 83, 128, 77, 77, 128, 77, 205, 77, 76, 65, 128, + 77, 76, 128, 77, 73, 88, 128, 77, 73, 84, 128, 77, 73, 212, 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, + 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, + 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, 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, 196, 77, 73, 67, 82, 207, 77, 73, 128, 77, 72, 90, + 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, 128, 77, 71, 66, 73, 128, + 77, 71, 66, 69, 69, 128, 77, 71, 66, 69, 128, 77, 71, 66, 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, 69, 90, 90, 79, 128, 77, 69, 88, 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, 71, + 128, 77, 69, 84, 65, 76, 128, 77, 69, 84, 193, 77, 69, 83, 83, 69, 78, + 73, 65, 206, 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, 128, 77, 69, 82, 71, 69, 128, 77, 69, 82, 67, 85, 82, 89, 128, 77, + 69, 78, 68, 85, 84, 128, 77, 69, 78, 128, 77, 69, 206, 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, 78, 128, 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, 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, 69, 69, 128, 77, 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, 65, 84, 128, 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, 67, 72, + 213, 77, 66, 85, 128, 77, 66, 79, 79, 128, 77, 66, 79, 128, 77, 66, 73, + 128, 77, 66, 69, 78, 128, 77, 66, 69, 69, 128, 77, 66, 69, 128, 77, 66, + 65, 65, 128, 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, 65, 128, 77, 65, 88, 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, 79, 82, 193, 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, 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, 66, 85, + 84, 65, 128, 77, 65, 82, 66, 85, 84, 193, 77, 65, 82, 128, 77, 65, 81, + 65, 70, 128, 77, 65, 80, 73, 81, 128, 77, 65, 208, 77, 65, 78, 83, 89, + 79, 78, 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, 67, 72, 213, 77, 65, 78, 65, 67, + 76, 69, 83, 128, 77, 65, 76, 84, 69, 83, 197, 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, 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, 75, 85, 82, 79, 128, 77, 65, + 73, 68, 69, 78, 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, 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, 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, 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, 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, 65, 76, 128, 76, 85, 71, + 65, 204, 76, 85, 69, 128, 76, 85, 51, 128, 76, 85, 50, 128, 76, 85, 178, + 76, 79, 90, 69, 78, 71, 69, 128, 76, 79, 90, 69, 78, 71, 197, 76, 79, 88, + 128, 76, 79, 87, 69, 210, 76, 79, 87, 45, 185, 76, 79, 85, 82, 69, 128, + 76, 79, 84, 85, 83, 128, 76, 79, 84, 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, 128, 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, 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, 67, 65, 84, 73, 86, 69, 128, 76, 79, 67, 65, 84, + 73, 79, 206, 76, 79, 65, 128, 76, 78, 128, 76, 77, 128, 76, 76, 76, 65, + 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, 82, 193, 76, 73, 84, 128, 76, 73, 83, 213, 76, 73, + 83, 72, 128, 76, 73, 82, 193, 76, 73, 81, 85, 73, 196, 76, 73, 80, 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, 76, 89, 128, 76, 73, 76, 73, 84, 72, 128, 76, 73, 76, + 128, 76, 73, 73, 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, 128, 76, 73, 69, 84, 128, 76, 73, 69, 80, 128, + 76, 73, 69, 128, 76, 73, 68, 128, 76, 73, 66, 82, 65, 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, 84, 84, 69, + 82, 128, 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, + 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, 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, 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, 75, 128, 76, 69, 69, 69, 69, 128, 76, 69, 65, 84, 72, 69, 82, 128, + 76, 69, 65, 70, 128, 76, 69, 65, 68, 69, 82, 128, 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, 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, + 84, 128, 76, 65, 83, 212, 76, 65, 82, 89, 78, 71, 69, 65, 204, 76, 65, + 82, 71, 69, 210, 76, 65, 82, 71, 197, 76, 65, 80, 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, + 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, 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, 65, 84, 128, 76, 65, 65, + 78, 128, 76, 65, 65, 77, 85, 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, 69, 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, 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, 80, 128, 75, 85, 79, 88, 128, 75, 85, 79, 80, + 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, 55, 128, 75, 85, + 52, 128, 75, 85, 180, 75, 85, 51, 128, 75, 85, 179, 75, 84, 128, 75, 83, + 83, 65, 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, 79, 128, 75, 80, 79, 128, 75, 80, 73, 128, 75, 80, 69, 78, 128, + 75, 80, 69, 69, 128, 75, 80, 69, 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, 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, 128, + 75, 78, 73, 71, 72, 84, 128, 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, 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, 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, 73, + 128, 75, 73, 72, 128, 75, 73, 69, 88, 128, 75, 73, 69, 80, 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, 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, 73, 84, 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, 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, 66, 79, 65, 82, 68, 128, 75, 69, 89, 128, 75, + 69, 217, 75, 69, 88, 128, 75, 69, 85, 88, 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, 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, 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, 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, 80, 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, + 75, 79, 128, 75, 65, 75, 65, 66, 65, 84, 128, 75, 65, 75, 128, 75, 65, + 203, 75, 65, 73, 82, 73, 128, 75, 65, 73, 128, 75, 65, 201, 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, + 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, 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, 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, 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, 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, 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, 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, 65, 89, 65, 78, 78, 65, 128, 74, 65, 86, 73, 89, 65, + 78, 73, 128, 74, 65, 82, 128, 74, 65, 80, 65, 78, 69, 83, 197, 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, 68, 69, 128, 74, 65, 65, 128, 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, 89, 69, 75, 128, + 73, 89, 65, 78, 78, 65, 128, 73, 85, 74, 65, 128, 73, 85, 128, 73, 84, + 69, 82, 65, 84, 73, 79, 206, 73, 84, 69, 77, 128, 73, 83, 83, 72, 65, 82, + 128, 73, 83, 211, 73, 83, 79, 78, 128, 73, 83, 79, 206, 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, 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, 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, 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, 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, 195, 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, 76, 85, 68, 73, 78, 199, 73, + 78, 67, 72, 128, 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, 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, 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, 54, 68, 55, 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, 55, 50, 67, 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, 52, 51, 57, 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, 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, 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, 82, 89, 86, 78, 73, 193, 72, 80, 87, 71, 128, 72, 80, + 65, 128, 72, 80, 128, 72, 79, 85, 82, 71, 76, 65, 83, 83, 128, 72, 79, + 85, 210, 72, 79, 84, 65, 128, 72, 79, 82, 83, 69, 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, 78, 128, 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, 72, 79, 76, 65, 77, 128, 72, 79, 76, 65, + 205, 72, 79, 75, 65, 128, 72, 79, 73, 128, 72, 79, 69, 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, 82, 69, 86, + 69, 82, 83, 69, 68, 45, 185, 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, 128, 72, 73, 68, 73, 78, 199, 72, 73, 68, + 69, 84, 128, 72, 73, 68, 69, 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, + 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, 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, 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, 128, 72, 69, 65, 82, 212, 72, 69, 65, 68, 83, + 84, 82, 79, 75, 69, 128, 72, 69, 65, 68, 83, 84, 79, 78, 197, 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, 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, 78, + 85, 78, 79, 207, 72, 65, 78, 71, 90, 72, 79, 213, 72, 65, 78, 68, 83, + 128, 72, 65, 78, 68, 76, 69, 83, 128, 72, 65, 78, 68, 128, 72, 65, 78, + 45, 65, 75, 65, 84, 128, 72, 65, 77, 90, 65, 128, 72, 65, 77, 77, 69, + 210, 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, 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, 69, 128, + 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, 71, 85, 78, 213, 71, 85, 77, 128, 71, 85, 205, + 71, 85, 76, 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, 69, 68, 78, 69, 83, 83, + 128, 71, 85, 65, 82, 65, 78, 201, 71, 85, 178, 71, 84, 69, 210, 71, 83, + 85, 77, 128, 71, 83, 85, 205, 71, 82, 213, 71, 82, 79, 85, 78, 68, 128, + 71, 82, 79, 78, 84, 72, 73, 83, 77, 65, 84, 65, 128, 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, 77, 77, 193, 71, 82, 65, 73, 78, 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, 78, 71, 128, 71, 79, 76, 68, 128, 71, 79, 75, 128, 71, 79, 73, + 78, 199, 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, 84, + 84, 65, 204, 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, 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, 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, 69, 128, 71, 72, 69, 128, 71, 72, 197, 71, 72, 65, 89, 78, 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, 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, 80, 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, 80, 128, 71, + 71, 65, 65, 128, 71, 69, 84, 193, 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, 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, 69, 78, 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, 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, + 65, 78, 128, 71, 65, 77, 65, 76, 128, 71, 65, 77, 65, 204, 71, 65, 77, + 128, 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, 89, 128, 70, 87, 73, + 128, 70, 87, 69, 69, 128, 70, 87, 69, 128, 70, 87, 65, 65, 128, 70, 87, + 65, 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, 82, 128, 70, 85, 80, 128, 70, 85, + 78, 69, 82, 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, 69, 204, 70, 84, 72, 79, + 82, 193, 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, 205, 70, 82, 79, + 71, 128, 70, 82, 73, 84, 85, 128, 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, 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, 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, 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, 78, 79, 84, 197, 70, 79, 79, 84, + 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, + 128, 70, 77, 128, 70, 76, 89, 128, 70, 76, 85, 84, 69, 128, 70, 76, 79, + 87, 69, 82, 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, 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, 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, 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, 76, 73, 78, 197, + 70, 73, 86, 197, 70, 73, 84, 65, 128, 70, 73, 84, 128, 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, 69, 128, 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, 83, 84, 73, 86, 65, 76, 128, 70, 69, 82, 82, 89, 128, 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, 65, 89, 65, 78, 78, 65, 128, 70, 65, 88, 128, 70, 65, 84, 72, + 69, 82, 128, 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, 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, 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, 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, 65, 65, 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, 66, 69, 89, 70, 73, 76, 73, 128, 69, 89, 65, 78, 78, 65, + 128, 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, 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, 69, 83, 83, 128, + 69, 88, 67, 69, 76, 76, 69, 78, 84, 128, 69, 87, 69, 128, 69, 86, 69, 78, + 73, 78, 71, 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, 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, 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, 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, 206, 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, 76, 72, 88, 128, 69, 79, 72, 128, 69, 78, 89, 128, 69, + 78, 86, 69, 76, 79, 80, 69, 128, 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, 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, 79, 211, 69, 78, 78, 128, 69, 78, 76, 65, 82, 71, 69, 77, + 69, 78, 84, 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, 196, 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, 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, 83, 73, 83, + 128, 69, 76, 76, 73, 80, 83, 69, 128, 69, 76, 73, 70, 73, 128, 69, 76, + 69, 86, 69, 78, 128, 69, 76, 69, 86, 69, 206, 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, + 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, 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, 200, 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, 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, 68, 90, 90, 69, 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, 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, 128, 68, 85, 84, 73, 69, 83, 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, 78, 128, 68, 85, 77, 128, 68, 85, 76, 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, 213, 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, 45, 83, 72, 65, 68, 79, 87, 69, 196, 68, 82, 73, 86, 69, 128, 68, 82, + 73, 86, 197, 68, 82, 73, 204, 68, 82, 65, 85, 71, 72, 84, 211, 68, 82, + 65, 71, 79, 78, 128, 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, 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, 55, 128, 68, 79, 84, 83, 45, 50, 53, 54, 56, 128, 68, 79, 84, 83, 45, 50, - 53, 55, 56, 128, 68, 79, 84, 83, 45, 50, 54, 55, 56, 128, 68, 79, 84, 83, - 45, 51, 52, 53, 54, 128, 68, 79, 84, 83, 45, 51, 52, 53, 55, 128, 68, 79, - 84, 83, 45, 51, 52, 53, 56, 128, 68, 79, 84, 83, 45, 51, 52, 54, 55, 128, - 68, 79, 84, 83, 45, 51, 52, 54, 56, 128, 68, 79, 84, 83, 45, 51, 52, 55, - 56, 128, 68, 79, 84, 83, 45, 51, 53, 54, 55, 128, 68, 79, 84, 83, 45, 51, - 53, 54, 56, 128, 68, 79, 84, 83, 45, 51, 53, 55, 56, 128, 68, 79, 84, 83, - 45, 51, 54, 55, 56, 128, 68, 79, 84, 83, 45, 52, 53, 54, 55, 128, 68, 79, - 84, 83, 45, 52, 53, 54, 56, 128, 68, 79, 84, 83, 45, 52, 53, 55, 56, 128, - 68, 79, 84, 83, 45, 52, 54, 55, 56, 128, 68, 79, 84, 83, 45, 53, 54, 55, - 56, 128, 69, 69, 66, 69, 69, 70, 73, 76, 73, 128, 69, 76, 69, 67, 84, 82, - 73, 67, 65, 204, 69, 78, 65, 82, 77, 79, 78, 73, 79, 211, 69, 78, 68, 69, - 65, 86, 79, 85, 82, 128, 69, 78, 68, 79, 70, 79, 78, 79, 78, 128, 69, 83, - 84, 73, 77, 65, 84, 69, 83, 128, 69, 88, 67, 69, 76, 76, 69, 78, 84, 128, - 69, 89, 66, 69, 89, 70, 73, 76, 73, 128, 70, 79, 79, 84, 83, 84, 79, 79, - 76, 128, 70, 79, 83, 84, 69, 82, 73, 78, 71, 128, 70, 82, 73, 67, 65, 84, - 73, 86, 69, 128, 71, 65, 84, 72, 69, 82, 73, 78, 71, 128, 71, 69, 77, 73, - 78, 65, 84, 73, 79, 206, 71, 78, 65, 86, 73, 89, 65, 78, 73, 128, 71, 79, - 82, 71, 79, 84, 69, 82, 73, 128, 71, 82, 69, 65, 84, 78, 69, 83, 83, 128, - 71, 85, 82, 65, 77, 85, 84, 79, 78, 128, 72, 69, 75, 85, 84, 65, 65, 82, - 85, 128, 72, 79, 77, 79, 84, 72, 69, 84, 73, 195, 72, 89, 83, 84, 69, 82, - 69, 83, 73, 211, 73, 76, 85, 85, 89, 65, 78, 78, 65, 128, 73, 77, 73, 70, - 84, 72, 79, 82, 65, 128, 73, 78, 67, 79, 77, 80, 76, 69, 84, 197, 73, 78, - 67, 82, 69, 77, 69, 78, 84, 128, 73, 78, 68, 85, 83, 84, 82, 73, 65, 204, - 73, 78, 70, 76, 85, 69, 78, 67, 69, 128, 73, 78, 78, 79, 67, 69, 78, 67, - 69, 128, 73, 82, 85, 85, 89, 65, 78, 78, 65, 128, 74, 69, 82, 85, 83, 65, - 76, 69, 77, 128, 75, 65, 84, 65, 86, 65, 83, 77, 65, 128, 75, 69, 77, 80, - 72, 82, 69, 78, 71, 128, 75, 69, 78, 84, 73, 77, 65, 84, 65, 128, 75, 73, - 82, 79, 87, 65, 84, 84, 79, 128, 75, 82, 65, 84, 73, 77, 65, 84, 65, 128, - 75, 85, 82, 85, 90, 69, 73, 82, 79, 128, 76, 65, 66, 79, 85, 82, 73, 78, - 71, 128, 76, 72, 65, 86, 73, 89, 65, 78, 73, 128, 76, 73, 71, 72, 84, 78, - 73, 78, 71, 128, 77, 65, 73, 84, 65, 73, 75, 72, 85, 128, 77, 65, 84, 69, - 82, 73, 65, 76, 83, 128, 77, 69, 84, 79, 66, 69, 76, 85, 83, 128, 77, 73, - 82, 73, 66, 65, 65, 82, 85, 128, 77, 79, 78, 79, 83, 84, 65, 66, 76, 197, - 77, 79, 79, 83, 69, 45, 67, 82, 69, 197, 77, 85, 45, 71, 65, 65, 72, 76, - 65, 193, 77, 85, 75, 80, 72, 82, 69, 78, 71, 128, 78, 73, 71, 71, 65, 72, - 73, 84, 65, 128, 78, 73, 71, 73, 68, 65, 69, 83, 72, 128, 78, 73, 71, 73, - 68, 65, 77, 73, 78, 128, 79, 65, 66, 79, 65, 70, 73, 76, 73, 128, 79, 79, - 66, 79, 79, 70, 73, 76, 73, 128, 79, 82, 84, 72, 79, 71, 79, 78, 65, 204, - 80, 65, 73, 89, 65, 78, 78, 79, 73, 128, 80, 65, 77, 73, 78, 71, 75, 65, - 76, 128, 80, 65, 77, 85, 78, 71, 75, 65, 72, 128, 80, 65, 78, 71, 76, 65, - 89, 65, 82, 128, 80, 65, 78, 71, 87, 73, 83, 65, 68, 128, 80, 65, 82, 65, - 71, 82, 65, 80, 72, 128, 80, 73, 65, 83, 85, 84, 79, 82, 85, 128, 80, 73, - 84, 67, 72, 70, 79, 82, 75, 128, 80, 73, 90, 90, 73, 67, 65, 84, 79, 128, - 80, 76, 85, 83, 45, 77, 73, 78, 85, 211, 80, 79, 82, 82, 69, 67, 84, 85, - 83, 128, 80, 82, 65, 77, 45, 66, 85, 79, 78, 128, 80, 82, 65, 77, 45, 77, - 85, 79, 89, 128, 80, 82, 79, 84, 79, 86, 65, 82, 89, 211, 81, 85, 65, 84, - 69, 82, 78, 73, 79, 206, 81, 85, 69, 83, 84, 73, 79, 78, 69, 196, 81, 85, - 83, 72, 83, 72, 65, 89, 65, 128, 82, 69, 71, 73, 83, 84, 69, 82, 69, 196, - 82, 69, 76, 65, 84, 73, 79, 78, 65, 204, 82, 69, 80, 82, 69, 83, 69, 78, - 84, 128, 82, 69, 83, 73, 68, 69, 78, 67, 69, 128, 82, 69, 83, 85, 80, 73, - 78, 85, 83, 128, 82, 73, 71, 72, 84, 45, 83, 73, 68, 197, 83, 67, 65, 78, - 68, 73, 67, 85, 83, 128, 83, 69, 80, 84, 69, 77, 66, 69, 82, 128, 83, 69, - 83, 84, 69, 82, 84, 73, 85, 211, 83, 69, 86, 69, 82, 65, 78, 67, 69, 128, - 83, 72, 65, 86, 73, 89, 65, 78, 73, 128, 83, 72, 79, 82, 84, 69, 78, 69, - 82, 128, 83, 72, 79, 85, 76, 68, 69, 82, 69, 196, 83, 73, 88, 45, 80, 69, - 82, 45, 69, 205, 83, 73, 88, 45, 83, 84, 82, 73, 78, 199, 83, 84, 82, 79, - 75, 69, 45, 49, 48, 128, 83, 84, 82, 79, 75, 69, 45, 49, 49, 128, 83, 85, - 66, 83, 84, 73, 84, 85, 84, 197, 83, 85, 80, 69, 82, 70, 73, 88, 69, 196, - 83, 85, 83, 80, 69, 78, 83, 73, 79, 206, 83, 89, 77, 66, 79, 76, 45, 49, - 48, 128, 83, 89, 77, 66, 79, 76, 45, 49, 53, 128, 83, 89, 77, 66, 79, 76, - 45, 49, 54, 128, 83, 89, 77, 66, 79, 76, 45, 50, 48, 128, 83, 89, 77, 66, - 79, 76, 45, 50, 49, 128, 83, 89, 77, 66, 79, 76, 45, 50, 50, 128, 83, 89, - 77, 66, 79, 76, 45, 50, 53, 128, 83, 89, 77, 66, 79, 76, 45, 50, 54, 128, - 83, 89, 77, 66, 79, 76, 45, 50, 55, 128, 83, 89, 77, 66, 79, 76, 45, 50, - 57, 128, 83, 89, 77, 66, 79, 76, 45, 51, 48, 128, 83, 89, 77, 66, 79, 76, - 45, 51, 50, 128, 83, 89, 77, 66, 79, 76, 45, 51, 54, 128, 83, 89, 77, 66, - 79, 76, 45, 51, 55, 128, 83, 89, 77, 66, 79, 76, 45, 51, 56, 128, 83, 89, - 77, 66, 79, 76, 45, 51, 57, 128, 83, 89, 77, 66, 79, 76, 45, 52, 48, 128, - 83, 89, 77, 66, 79, 76, 45, 52, 50, 128, 83, 89, 77, 66, 79, 76, 45, 52, - 51, 128, 83, 89, 77, 66, 79, 76, 45, 52, 53, 128, 83, 89, 77, 66, 79, 76, - 45, 52, 55, 128, 83, 89, 77, 66, 79, 76, 45, 52, 56, 128, 83, 89, 77, 66, - 79, 76, 45, 52, 57, 128, 83, 89, 82, 77, 65, 84, 73, 75, 73, 128, 84, 65, - 75, 72, 65, 76, 76, 85, 83, 128, 84, 65, 87, 69, 76, 76, 69, 77, 69, 212, - 84, 72, 69, 82, 69, 70, 79, 82, 69, 128, 84, 72, 82, 69, 69, 45, 76, 73, - 78, 197, 84, 82, 65, 80, 69, 90, 73, 85, 77, 128, 84, 82, 73, 70, 79, 76, - 73, 65, 84, 197, 84, 82, 73, 70, 79, 78, 73, 65, 83, 128, 84, 82, 73, 71, - 79, 82, 71, 79, 78, 128, 84, 85, 84, 69, 89, 65, 83, 65, 84, 128, 86, 73, - 83, 65, 82, 71, 65, 89, 65, 128, 87, 65, 83, 83, 65, 76, 76, 65, 77, 128, - 87, 72, 69, 69, 76, 67, 72, 65, 73, 210, 87, 79, 82, 68, 83, 80, 65, 67, - 69, 128, 89, 80, 79, 75, 82, 73, 83, 73, 83, 128, 83, 85, 66, 74, 79, 73, - 78, 69, 196, 76, 69, 83, 83, 45, 84, 72, 65, 206, 68, 79, 87, 78, 87, 65, - 82, 68, 211, 79, 80, 69, 82, 65, 84, 79, 82, 128, 84, 82, 73, 65, 78, 71, - 76, 69, 128, 67, 79, 78, 83, 79, 78, 65, 78, 212, 83, 85, 66, 83, 67, 82, - 73, 80, 212, 84, 72, 79, 85, 83, 65, 78, 68, 128, 85, 78, 68, 69, 82, 66, - 65, 82, 128, 65, 83, 84, 69, 82, 73, 83, 75, 128, 81, 85, 79, 84, 65, 84, - 73, 79, 206, 79, 82, 78, 65, 77, 69, 78, 84, 128, 82, 69, 84, 82, 79, 70, - 76, 69, 216, 65, 82, 67, 72, 65, 73, 79, 78, 128, 68, 73, 65, 69, 82, 69, - 83, 73, 211, 66, 76, 65, 67, 75, 70, 79, 79, 212, 68, 69, 78, 84, 73, 83, - 84, 82, 217, 65, 78, 85, 83, 86, 65, 82, 65, 128, 68, 73, 65, 76, 89, 84, - 73, 75, 193, 73, 78, 84, 69, 71, 82, 65, 76, 128, 86, 69, 82, 84, 73, 67, - 65, 76, 128, 76, 69, 70, 84, 45, 83, 84, 69, 205, 81, 85, 65, 68, 82, 85, - 80, 76, 197, 82, 69, 67, 89, 67, 76, 73, 78, 199, 65, 82, 82, 79, 87, 72, - 69, 65, 196, 65, 66, 75, 72, 65, 83, 73, 65, 206, 68, 73, 65, 76, 69, 67, - 84, 45, 208, 68, 79, 68, 69, 75, 65, 84, 65, 128, 69, 76, 76, 73, 80, 83, - 73, 83, 128, 81, 85, 65, 68, 82, 65, 78, 84, 128, 65, 86, 65, 71, 82, 65, - 72, 65, 128, 68, 73, 65, 84, 79, 78, 73, 75, 201, 69, 78, 67, 76, 79, 83, - 73, 78, 199, 79, 86, 69, 82, 76, 73, 78, 69, 128, 80, 76, 65, 83, 84, 73, - 67, 83, 128, 73, 84, 69, 82, 65, 84, 73, 79, 206, 78, 79, 84, 69, 72, 69, - 65, 68, 128, 78, 85, 77, 69, 82, 65, 84, 79, 210, 83, 85, 80, 69, 82, 83, - 69, 84, 128, 69, 73, 71, 72, 84, 69, 69, 78, 128, 70, 76, 65, 84, 84, 69, - 78, 69, 196, 70, 79, 85, 82, 84, 69, 69, 78, 128, 76, 69, 70, 84, 45, 72, - 65, 78, 196, 78, 73, 78, 69, 84, 69, 69, 78, 128, 84, 72, 73, 82, 84, 69, - 69, 78, 128, 65, 76, 84, 69, 82, 78, 65, 84, 197, 68, 73, 65, 71, 79, 78, - 65, 76, 128, 69, 88, 84, 82, 65, 45, 76, 79, 215, 70, 76, 79, 82, 69, 84, - 84, 69, 128, 73, 68, 69, 78, 84, 73, 67, 65, 204, 75, 69, 78, 84, 73, 77, - 65, 84, 193, 77, 79, 78, 79, 67, 85, 76, 65, 210, 80, 65, 82, 65, 71, 82, - 65, 80, 200, 80, 69, 78, 84, 65, 71, 79, 78, 128, 82, 69, 76, 65, 84, 73, - 79, 78, 128, 83, 67, 73, 83, 83, 79, 82, 83, 128, 83, 69, 66, 65, 84, 66, - 69, 73, 212, 83, 69, 80, 65, 82, 65, 84, 79, 210, 68, 68, 65, 89, 65, 78, - 78, 65, 128, 68, 69, 80, 65, 82, 84, 73, 78, 199, 70, 65, 78, 69, 82, 79, - 83, 73, 211, 70, 73, 83, 72, 72, 79, 79, 75, 128, 73, 78, 70, 73, 78, 73, - 84, 89, 128, 73, 78, 86, 73, 83, 73, 66, 76, 197, 77, 79, 78, 79, 71, 82, - 65, 80, 200, 77, 79, 85, 78, 84, 65, 73, 78, 128, 77, 85, 76, 84, 73, 77, - 65, 80, 128, 77, 85, 85, 82, 68, 72, 65, 74, 193, 80, 65, 82, 65, 76, 76, - 69, 76, 128, 80, 82, 69, 67, 69, 68, 69, 83, 128, 82, 69, 86, 69, 82, 83, - 69, 68, 128, 83, 73, 88, 84, 69, 69, 78, 84, 200, 83, 80, 72, 69, 82, 73, - 67, 65, 204, 83, 85, 66, 76, 73, 78, 69, 65, 210, 83, 85, 67, 67, 69, 69, - 68, 83, 128, 83, 85, 77, 77, 65, 84, 73, 79, 206, 84, 69, 76, 69, 80, 72, - 79, 78, 197, 84, 72, 79, 85, 83, 65, 78, 68, 211, 89, 69, 83, 73, 69, 85, - 78, 71, 128, 65, 76, 76, 73, 65, 78, 67, 69, 128, 66, 73, 78, 79, 67, 85, - 76, 65, 210, 67, 65, 85, 76, 68, 82, 79, 78, 128, 67, 79, 78, 83, 84, 65, - 78, 84, 128, 67, 85, 65, 84, 82, 73, 76, 76, 207, 68, 73, 70, 79, 78, 73, - 65, 83, 128, 68, 73, 71, 82, 65, 77, 77, 79, 211, 68, 82, 65, 67, 72, 77, - 65, 83, 128, 70, 76, 79, 85, 82, 73, 83, 72, 128, 71, 65, 82, 83, 72, 85, - 78, 73, 128, 71, 65, 84, 72, 69, 82, 73, 78, 199, 71, 76, 73, 83, 83, 65, - 78, 68, 207, 71, 82, 69, 71, 79, 82, 73, 65, 206, 73, 78, 67, 82, 69, 65, - 83, 69, 128, 73, 78, 83, 69, 82, 84, 73, 79, 206, 73, 83, 45, 80, 73, 76, - 76, 65, 128, 79, 86, 69, 82, 82, 73, 68, 69, 128, 79, 89, 82, 65, 78, 73, - 83, 77, 193, 80, 65, 76, 79, 67, 72, 75, 65, 128, 80, 69, 68, 69, 83, 84, - 65, 76, 128, 80, 78, 69, 85, 77, 65, 84, 65, 128, 80, 82, 65, 77, 45, 66, - 85, 79, 206, 80, 82, 65, 77, 45, 77, 85, 79, 217, 80, 82, 69, 67, 69, 68, - 73, 78, 199, 80, 82, 79, 76, 79, 78, 71, 69, 196, 80, 82, 79, 80, 69, 76, - 76, 69, 210, 81, 85, 65, 82, 84, 69, 82, 83, 128, 82, 69, 83, 79, 85, 82, - 67, 69, 128, 82, 69, 83, 80, 79, 78, 83, 69, 128, 83, 65, 76, 84, 73, 76, - 76, 79, 128, 83, 69, 77, 73, 86, 79, 87, 69, 204, 83, 85, 66, 71, 82, 79, - 85, 80, 128, 83, 87, 65, 80, 80, 73, 78, 71, 128, 83, 89, 77, 66, 79, 76, - 45, 49, 128, 83, 89, 77, 66, 79, 76, 45, 50, 128, 83, 89, 77, 66, 79, 76, - 45, 52, 128, 83, 89, 77, 66, 79, 76, 45, 53, 128, 83, 89, 77, 66, 79, 76, - 45, 55, 128, 83, 89, 77, 66, 79, 76, 45, 56, 128, 83, 89, 77, 77, 69, 84, - 82, 73, 195, 84, 79, 71, 69, 84, 72, 69, 82, 128, 84, 82, 69, 83, 73, 76, - 76, 79, 128, 84, 82, 73, 67, 79, 76, 79, 78, 128, 84, 82, 73, 83, 73, 77, - 79, 85, 128, 84, 84, 65, 89, 65, 78, 78, 65, 128, 84, 84, 85, 68, 68, 65, - 65, 71, 128, 85, 78, 68, 69, 82, 76, 73, 78, 197, 85, 78, 68, 69, 82, 84, - 73, 69, 128, 85, 78, 73, 86, 69, 82, 83, 65, 204, 65, 68, 68, 82, 69, 83, - 83, 69, 196, 65, 69, 69, 89, 65, 78, 78, 65, 128, 65, 73, 82, 80, 76, 65, - 78, 69, 128, 65, 78, 85, 68, 65, 84, 84, 65, 128, 65, 80, 79, 68, 69, 88, - 73, 65, 128, 65, 80, 79, 84, 72, 69, 77, 65, 128, 65, 80, 80, 82, 79, 65, - 67, 72, 128, 65, 81, 85, 65, 82, 73, 85, 83, 128, 65, 82, 45, 82, 65, 72, - 77, 65, 206, 65, 82, 65, 69, 65, 45, 69, 79, 128, 65, 82, 71, 79, 84, 69, - 82, 73, 128, 65, 82, 73, 83, 84, 69, 82, 65, 128, 65, 83, 67, 69, 78, 68, - 73, 78, 199, 65, 83, 80, 73, 82, 65, 84, 69, 196, 65, 83, 84, 69, 82, 73, - 83, 75, 211, 65, 83, 84, 69, 82, 73, 83, 77, 128, 65, 84, 84, 72, 65, 67, - 65, 78, 128, 66, 65, 67, 75, 83, 76, 65, 83, 200, 66, 69, 86, 69, 82, 65, - 71, 69, 128, 66, 73, 79, 72, 65, 90, 65, 82, 196, 66, 73, 83, 69, 67, 84, - 73, 78, 199, 66, 73, 83, 77, 73, 76, 76, 65, 200, 66, 82, 65, 78, 67, 72, - 73, 78, 199, 66, 85, 76, 76, 83, 69, 89, 69, 128, 66, 85, 83, 83, 89, 69, - 82, 85, 128, 67, 65, 68, 85, 67, 69, 85, 83, 128, 67, 65, 82, 80, 69, 78, - 84, 82, 217, 67, 65, 82, 89, 83, 84, 73, 65, 206, 67, 69, 78, 84, 85, 82, - 73, 65, 204, 67, 72, 65, 77, 73, 76, 79, 78, 128, 67, 72, 65, 84, 84, 65, - 87, 65, 128, 67, 73, 86, 73, 76, 73, 65, 78, 128, 67, 76, 73, 77, 65, 67, - 85, 83, 128, 67, 79, 78, 70, 76, 73, 67, 84, 128, 67, 79, 78, 71, 82, 85, - 69, 78, 212, 67, 79, 78, 74, 85, 71, 65, 84, 197, 67, 79, 78, 84, 79, 85, - 82, 69, 196, 67, 79, 80, 89, 82, 73, 71, 72, 212, 67, 82, 69, 83, 67, 69, - 78, 84, 128, 68, 65, 77, 77, 65, 84, 65, 78, 128, 68, 65, 82, 75, 69, 78, - 73, 78, 199, 68, 65, 86, 73, 89, 65, 78, 73, 128, 68, 69, 67, 69, 77, 66, - 69, 82, 128, 68, 69, 67, 82, 69, 65, 83, 69, 128, 68, 69, 76, 73, 77, 73, - 84, 69, 210, 68, 73, 70, 84, 79, 71, 71, 79, 211, 68, 73, 71, 79, 82, 71, - 79, 78, 128, 68, 73, 77, 69, 78, 83, 73, 79, 206, 68, 73, 86, 73, 83, 73, - 79, 78, 128, 68, 79, 84, 83, 45, 49, 50, 51, 128, 68, 79, 84, 83, 45, 49, - 50, 52, 128, 68, 79, 84, 83, 45, 49, 50, 53, 128, 68, 79, 84, 83, 45, 49, - 50, 54, 128, 68, 79, 84, 83, 45, 49, 50, 55, 128, 68, 79, 84, 83, 45, 49, - 50, 56, 128, 68, 79, 84, 83, 45, 49, 51, 52, 128, 68, 79, 84, 83, 45, 49, - 51, 53, 128, 68, 79, 84, 83, 45, 49, 51, 54, 128, 68, 79, 84, 83, 45, 49, - 51, 55, 128, 68, 79, 84, 83, 45, 49, 51, 56, 128, 68, 79, 84, 83, 45, 49, - 52, 53, 128, 68, 79, 84, 83, 45, 49, 52, 54, 128, 68, 79, 84, 83, 45, 49, - 52, 55, 128, 68, 79, 84, 83, 45, 49, 52, 56, 128, 68, 79, 84, 83, 45, 49, - 53, 54, 128, 68, 79, 84, 83, 45, 49, 53, 55, 128, 68, 79, 84, 83, 45, 49, - 53, 56, 128, 68, 79, 84, 83, 45, 49, 54, 55, 128, 68, 79, 84, 83, 45, 49, - 54, 56, 128, 68, 79, 84, 83, 45, 49, 55, 56, 128, 68, 79, 84, 83, 45, 50, - 51, 52, 128, 68, 79, 84, 83, 45, 50, 51, 53, 128, 68, 79, 84, 83, 45, 50, - 51, 54, 128, 68, 79, 84, 83, 45, 50, 51, 55, 128, 68, 79, 84, 83, 45, 50, - 51, 56, 128, 68, 79, 84, 83, 45, 50, 52, 53, 128, 68, 79, 84, 83, 45, 50, - 52, 54, 128, 68, 79, 84, 83, 45, 50, 52, 55, 128, 68, 79, 84, 83, 45, 50, - 52, 56, 128, 68, 79, 84, 83, 45, 50, 53, 54, 128, 68, 79, 84, 83, 45, 50, - 53, 55, 128, 68, 79, 84, 83, 45, 50, 53, 56, 128, 68, 79, 84, 83, 45, 50, - 54, 55, 128, 68, 79, 84, 83, 45, 50, 54, 56, 128, 68, 79, 84, 83, 45, 50, - 55, 56, 128, 68, 79, 84, 83, 45, 51, 52, 53, 128, 68, 79, 84, 83, 45, 51, - 52, 54, 128, 68, 79, 84, 83, 45, 51, 52, 55, 128, 68, 79, 84, 83, 45, 51, - 52, 56, 128, 68, 79, 84, 83, 45, 51, 53, 54, 128, 68, 79, 84, 83, 45, 51, - 53, 55, 128, 68, 79, 84, 83, 45, 51, 53, 56, 128, 68, 79, 84, 83, 45, 51, - 54, 55, 128, 68, 79, 84, 83, 45, 51, 54, 56, 128, 68, 79, 84, 83, 45, 51, - 55, 56, 128, 68, 79, 84, 83, 45, 52, 53, 54, 128, 68, 79, 84, 83, 45, 52, - 53, 55, 128, 68, 79, 84, 83, 45, 52, 53, 56, 128, 68, 79, 84, 83, 45, 52, - 54, 55, 128, 68, 79, 84, 83, 45, 52, 54, 56, 128, 68, 79, 84, 83, 45, 52, - 55, 56, 128, 68, 79, 84, 83, 45, 53, 54, 55, 128, 68, 79, 84, 83, 45, 53, - 54, 56, 128, 68, 79, 84, 83, 45, 53, 55, 56, 128, 68, 79, 84, 83, 45, 54, - 55, 56, 128, 68, 79, 84, 84, 69, 68, 45, 76, 128, 68, 79, 84, 84, 69, 68, - 45, 78, 128, 68, 79, 84, 84, 69, 68, 45, 80, 128, 68, 85, 80, 79, 78, 68, - 73, 85, 211, 68, 85, 82, 65, 84, 73, 79, 78, 128, 68, 86, 73, 83, 86, 65, - 82, 65, 128, 69, 68, 73, 84, 79, 82, 73, 65, 204, 69, 78, 86, 69, 76, 79, - 80, 69, 128, 69, 80, 69, 71, 69, 82, 77, 65, 128, 69, 83, 84, 73, 77, 65, - 84, 69, 196, 69, 83, 85, 75, 85, 85, 68, 79, 128, 69, 84, 69, 82, 78, 73, - 84, 89, 128, 70, 65, 67, 83, 73, 77, 73, 76, 197, 70, 65, 84, 72, 65, 84, - 65, 78, 128, 70, 69, 66, 82, 85, 65, 82, 89, 128, 70, 69, 83, 84, 73, 86, - 65, 76, 128, 70, 73, 71, 85, 82, 69, 45, 49, 128, 70, 73, 71, 85, 82, 69, - 45, 50, 128, 70, 73, 71, 85, 82, 69, 45, 51, 128, 70, 73, 86, 69, 45, 76, - 73, 78, 197, 70, 76, 65, 84, 78, 69, 83, 83, 128, 70, 79, 85, 82, 45, 76, - 73, 78, 197, 70, 82, 65, 71, 77, 69, 78, 84, 128, 70, 82, 65, 71, 82, 65, - 78, 84, 128, 70, 85, 76, 76, 78, 69, 83, 83, 128, 70, 85, 78, 67, 84, 73, - 79, 78, 128, 71, 65, 85, 78, 84, 76, 69, 84, 128, 71, 69, 78, 73, 84, 73, - 86, 69, 128, 71, 69, 79, 77, 69, 84, 82, 73, 195, 72, 65, 78, 45, 65, 75, - 65, 84, 128, 72, 65, 82, 68, 78, 69, 83, 83, 128, 72, 65, 82, 77, 79, 78, - 73, 67, 128, 72, 69, 82, 77, 73, 84, 73, 65, 206, 72, 85, 65, 82, 65, 68, - 68, 79, 128, 73, 76, 85, 89, 65, 78, 78, 65, 128, 73, 77, 73, 70, 79, 78, - 79, 78, 128, 73, 78, 67, 76, 85, 68, 73, 78, 199, 73, 78, 67, 82, 69, 65, - 83, 69, 211, 73, 78, 86, 69, 82, 84, 69, 68, 128, 73, 82, 85, 89, 65, 78, - 78, 65, 128, 74, 65, 86, 73, 89, 65, 78, 73, 128, 75, 65, 83, 82, 65, 84, - 65, 78, 128, 75, 65, 84, 72, 73, 83, 84, 73, 128, 75, 69, 89, 66, 79, 65, - 82, 68, 128, 75, 79, 78, 84, 69, 86, 77, 65, 128, 75, 82, 69, 77, 65, 83, - 84, 73, 128, 76, 65, 82, 89, 78, 71, 69, 65, 204, 76, 69, 70, 84, 45, 83, - 73, 68, 197, 76, 73, 65, 66, 73, 76, 73, 84, 217, 76, 79, 67, 65, 84, 73, - 86, 69, 128, 76, 79, 82, 82, 65, 73, 78, 69, 128, 77, 65, 72, 65, 80, 65, - 75, 72, 128, 77, 65, 73, 77, 65, 76, 65, 73, 128, 77, 65, 73, 89, 65, 77, - 79, 75, 128, 77, 65, 78, 65, 67, 76, 69, 83, 128, 77, 65, 78, 71, 65, 76, - 65, 77, 128, 77, 65, 83, 67, 85, 76, 73, 78, 197, 77, 69, 68, 73, 67, 73, - 78, 69, 128, 77, 69, 83, 83, 69, 78, 73, 65, 206, 77, 73, 78, 73, 83, 84, - 69, 82, 128, 77, 85, 76, 84, 73, 83, 69, 84, 128, 78, 73, 75, 72, 65, 72, - 73, 84, 128, 78, 79, 82, 84, 72, 87, 69, 83, 212, 78, 79, 86, 69, 77, 66, - 69, 82, 128, 79, 86, 69, 82, 76, 65, 73, 68, 128, 80, 65, 65, 83, 69, 78, - 84, 79, 128, 80, 65, 73, 82, 84, 72, 82, 65, 128, 80, 65, 77, 69, 78, 69, - 78, 71, 128, 80, 65, 77, 85, 68, 80, 79, 68, 128, 80, 65, 78, 71, 72, 85, - 76, 85, 128, 80, 65, 78, 79, 76, 79, 78, 71, 128, 80, 65, 78, 89, 65, 75, - 82, 65, 128, 80, 65, 78, 89, 69, 67, 69, 75, 128, 80, 65, 82, 73, 67, 72, - 79, 78, 128, 80, 65, 86, 73, 89, 65, 78, 73, 128, 80, 69, 76, 65, 83, 84, - 79, 78, 128, 80, 69, 82, 77, 65, 78, 69, 78, 212, 80, 72, 65, 65, 82, 75, - 65, 65, 128, 80, 73, 84, 67, 72, 70, 79, 82, 203, 80, 76, 69, 84, 72, 82, - 79, 78, 128, 80, 79, 75, 82, 89, 84, 73, 69, 128, 80, 79, 82, 82, 69, 67, - 84, 85, 211, 80, 82, 65, 77, 45, 66, 69, 73, 128, 80, 82, 65, 77, 45, 80, - 73, 73, 128, 80, 82, 79, 70, 79, 85, 78, 68, 128, 80, 82, 79, 71, 82, 69, - 83, 83, 128, 80, 83, 73, 70, 73, 83, 84, 79, 206, 81, 65, 73, 82, 84, 72, - 82, 65, 128, 81, 85, 69, 83, 84, 73, 79, 78, 128, 81, 85, 73, 78, 65, 82, - 73, 85, 211, 81, 85, 73, 78, 67, 85, 78, 88, 128, 82, 69, 67, 69, 80, 84, - 73, 86, 197, 82, 69, 67, 79, 82, 68, 69, 82, 128, 82, 69, 67, 79, 82, 68, - 73, 78, 199, 82, 69, 67, 84, 65, 78, 71, 76, 197, 82, 69, 70, 69, 82, 69, - 78, 67, 197, 82, 69, 76, 73, 71, 73, 79, 78, 128, 82, 69, 78, 84, 79, 71, - 69, 78, 128, 82, 73, 71, 72, 84, 72, 65, 78, 196, 82, 85, 75, 75, 65, 75, - 72, 65, 128, 83, 65, 77, 65, 82, 73, 84, 65, 206, 83, 65, 78, 84, 73, 73, - 77, 85, 128, 83, 65, 88, 73, 77, 65, 84, 65, 128, 83, 67, 65, 78, 68, 73, - 67, 85, 211, 83, 67, 79, 82, 80, 73, 85, 83, 128, 83, 69, 77, 73, 67, 79, - 76, 79, 206, 83, 69, 86, 69, 78, 84, 69, 69, 206, 83, 72, 65, 77, 82, 79, - 67, 75, 128, 83, 72, 69, 45, 71, 79, 65, 84, 128, 83, 72, 69, 83, 72, 76, - 65, 77, 128, 83, 73, 67, 75, 78, 69, 83, 83, 128, 83, 80, 76, 73, 84, 84, - 73, 78, 199, 83, 84, 65, 76, 76, 73, 79, 78, 128, 83, 84, 79, 80, 80, 65, - 71, 69, 128, 83, 84, 79, 80, 80, 73, 78, 71, 128, 83, 84, 82, 65, 73, 78, - 69, 82, 128, 83, 84, 82, 69, 78, 71, 84, 72, 128, 83, 84, 82, 69, 84, 67, - 72, 69, 196, 83, 84, 82, 79, 75, 69, 45, 49, 128, 83, 84, 82, 79, 75, 69, - 45, 50, 128, 83, 84, 82, 79, 75, 69, 45, 51, 128, 83, 84, 82, 79, 75, 69, - 45, 52, 128, 83, 84, 82, 79, 75, 69, 45, 53, 128, 83, 84, 82, 79, 75, 69, - 45, 54, 128, 83, 84, 82, 79, 75, 69, 45, 55, 128, 83, 84, 82, 79, 75, 69, - 45, 56, 128, 83, 84, 82, 79, 75, 69, 45, 57, 128, 83, 85, 73, 84, 65, 66, - 76, 69, 128, 83, 85, 82, 82, 79, 85, 78, 68, 128, 83, 89, 77, 66, 79, 76, - 45, 51, 128, 83, 89, 77, 66, 79, 76, 45, 54, 128, 83, 89, 77, 66, 79, 76, - 45, 57, 128, 83, 89, 77, 77, 69, 84, 82, 89, 128, 83, 89, 78, 68, 69, 83, - 77, 79, 211, 84, 65, 86, 73, 89, 65, 78, 73, 128, 84, 69, 84, 82, 65, 80, - 76, 73, 128, 84, 79, 82, 67, 85, 76, 85, 83, 128, 84, 82, 69, 65, 68, 73, - 78, 71, 128, 84, 82, 79, 77, 73, 75, 79, 78, 128, 84, 82, 85, 78, 67, 65, - 84, 69, 196, 85, 73, 76, 76, 69, 65, 78, 78, 128, 85, 77, 66, 82, 69, 76, - 76, 65, 128, 85, 78, 68, 69, 82, 68, 79, 84, 128, 85, 78, 77, 65, 82, 82, - 73, 69, 196, 86, 69, 82, 83, 73, 67, 76, 69, 128, 86, 79, 73, 67, 69, 76, - 69, 83, 211, 87, 65, 78, 68, 69, 82, 69, 82, 128, 87, 65, 83, 65, 76, 76, - 65, 77, 128, 89, 65, 77, 65, 75, 75, 65, 78, 128, 89, 80, 79, 75, 82, 73, - 83, 73, 211, 90, 65, 86, 73, 89, 65, 78, 73, 128, 90, 87, 65, 82, 65, 75, - 65, 89, 128, 80, 72, 65, 73, 83, 84, 79, 211, 73, 78, 86, 69, 82, 84, 69, - 196, 78, 69, 71, 65, 84, 73, 86, 197, 85, 71, 65, 82, 73, 84, 73, 195, - 66, 85, 71, 73, 78, 69, 83, 197, 68, 73, 65, 71, 79, 78, 65, 204, 72, 85, - 78, 68, 82, 69, 68, 128, 70, 82, 65, 67, 84, 73, 79, 206, 67, 82, 79, 83, - 83, 73, 78, 199, 67, 69, 68, 73, 76, 76, 65, 128, 84, 82, 73, 65, 78, 71, - 76, 197, 69, 88, 84, 69, 78, 68, 69, 196, 81, 85, 69, 83, 84, 73, 79, - 206, 83, 85, 80, 69, 82, 83, 69, 212, 78, 79, 84, 69, 72, 69, 65, 196, - 67, 79, 85, 78, 84, 73, 78, 199, 84, 65, 71, 66, 65, 78, 87, 193, 79, 86, - 69, 82, 76, 65, 89, 128, 81, 85, 65, 68, 82, 65, 78, 212, 84, 79, 82, 84, - 79, 73, 83, 197, 68, 73, 65, 77, 79, 78, 68, 128, 83, 81, 85, 65, 82, 69, - 68, 128, 85, 80, 83, 73, 76, 79, 78, 128, 73, 79, 84, 73, 70, 73, 69, - 196, 77, 65, 82, 84, 89, 82, 73, 193, 79, 86, 69, 82, 66, 65, 82, 128, - 69, 80, 83, 73, 76, 79, 78, 128, 72, 65, 78, 71, 90, 72, 79, 213, 73, 78, - 84, 69, 71, 82, 65, 204, 77, 69, 65, 83, 85, 82, 69, 196, 79, 77, 73, 67, - 82, 79, 78, 128, 86, 73, 83, 65, 82, 71, 65, 128, 79, 82, 78, 65, 77, 69, - 78, 212, 83, 79, 76, 73, 68, 85, 83, 128, 72, 65, 82, 80, 79, 79, 78, - 128, 80, 82, 69, 67, 69, 68, 69, 211, 83, 85, 67, 67, 69, 69, 68, 211, - 84, 72, 69, 83, 80, 73, 65, 206, 66, 65, 77, 66, 79, 79, 83, 128, 67, 73, - 82, 67, 76, 69, 83, 128, 67, 79, 78, 84, 65, 73, 78, 211, 68, 73, 71, 82, - 65, 80, 72, 128, 77, 69, 84, 82, 73, 67, 65, 204, 77, 79, 78, 79, 71, 82, - 65, 205, 83, 73, 68, 69, 87, 65, 89, 211, 84, 72, 79, 85, 83, 65, 78, - 196, 79, 80, 69, 82, 65, 84, 79, 210, 79, 80, 80, 79, 83, 73, 78, 199, - 83, 73, 77, 65, 78, 83, 73, 211, 83, 84, 65, 84, 69, 82, 83, 128, 83, 85, - 66, 85, 78, 73, 84, 128, 76, 79, 90, 69, 78, 71, 69, 128, 84, 65, 76, 69, - 78, 84, 83, 128, 66, 65, 82, 76, 73, 78, 69, 128, 68, 73, 71, 65, 77, 77, - 65, 128, 68, 73, 86, 73, 83, 73, 79, 206, 80, 65, 82, 65, 76, 76, 69, - 204, 83, 72, 69, 83, 72, 73, 71, 128, 83, 73, 88, 84, 69, 69, 78, 128, - 83, 85, 66, 71, 82, 79, 85, 208, 83, 85, 82, 82, 79, 85, 78, 196, 85, 80, - 87, 65, 82, 68, 83, 128, 68, 73, 86, 73, 68, 69, 82, 128, 70, 73, 70, 84, - 69, 69, 78, 128, 79, 82, 73, 71, 73, 78, 65, 204, 82, 79, 84, 85, 78, 68, - 65, 128, 65, 83, 84, 69, 82, 73, 83, 203, 68, 73, 65, 83, 84, 79, 76, - 201, 68, 82, 65, 85, 71, 72, 84, 211, 69, 76, 76, 73, 80, 83, 69, 128, - 70, 65, 84, 72, 65, 84, 65, 206, 73, 90, 72, 73, 84, 83, 65, 128, 77, 73, - 76, 76, 73, 79, 78, 211, 77, 89, 83, 76, 73, 84, 69, 128, 80, 79, 73, 78, - 84, 69, 82, 128, 81, 85, 65, 82, 84, 69, 82, 128, 83, 81, 85, 73, 71, 71, - 76, 197, 83, 84, 82, 65, 73, 71, 72, 212, 65, 83, 83, 89, 82, 73, 65, - 206, 66, 65, 89, 65, 78, 78, 65, 128, 67, 72, 82, 79, 78, 79, 78, 128, - 68, 73, 71, 79, 82, 71, 79, 206, 69, 73, 71, 72, 84, 72, 83, 128, 70, 73, - 78, 71, 69, 82, 69, 196, 71, 65, 89, 65, 78, 78, 65, 128, 72, 65, 82, 75, - 76, 69, 65, 206, 72, 69, 88, 65, 71, 79, 78, 128, 74, 65, 89, 65, 78, 78, - 65, 128, 74, 69, 71, 79, 71, 65, 78, 128, 75, 79, 82, 79, 78, 73, 83, - 128, 76, 69, 65, 84, 72, 69, 82, 128, 77, 65, 75, 83, 85, 82, 65, 128, - 78, 79, 45, 66, 82, 69, 65, 203, 80, 73, 78, 87, 72, 69, 69, 204, 81, 85, - 65, 82, 84, 69, 82, 211, 82, 69, 80, 69, 65, 84, 69, 196, 83, 65, 89, 65, - 78, 78, 65, 128, 83, 69, 76, 69, 67, 84, 79, 210, 84, 69, 84, 65, 82, 84, - 79, 211, 84, 82, 79, 77, 73, 75, 79, 206, 65, 67, 84, 73, 86, 65, 84, - 197, 65, 67, 84, 85, 65, 76, 76, 217, 65, 75, 72, 77, 73, 77, 73, 195, - 65, 80, 79, 68, 69, 82, 77, 193, 65, 82, 73, 83, 84, 69, 82, 193, 66, 69, - 84, 87, 69, 69, 78, 128, 66, 73, 76, 65, 66, 73, 65, 204, 67, 65, 89, 65, - 78, 78, 65, 128, 67, 69, 73, 76, 73, 78, 71, 128, 67, 72, 65, 82, 73, 79, - 84, 128, 67, 72, 79, 82, 69, 86, 77, 193, 67, 72, 82, 79, 78, 79, 85, - 128, 67, 76, 79, 84, 72, 69, 83, 128, 67, 79, 82, 78, 69, 82, 83, 128, - 68, 65, 77, 77, 65, 84, 65, 206, 68, 65, 80, 45, 66, 85, 79, 206, 68, 65, - 80, 45, 77, 85, 79, 217, 68, 65, 80, 45, 80, 82, 65, 205, 68, 69, 89, 84, - 69, 82, 79, 211, 68, 73, 82, 69, 67, 84, 76, 217, 68, 73, 83, 73, 77, 79, - 85, 128, 69, 77, 80, 72, 65, 83, 73, 211, 70, 69, 77, 73, 78, 73, 78, - 197, 70, 69, 82, 77, 65, 84, 65, 128, 70, 73, 83, 72, 72, 79, 79, 203, - 71, 76, 65, 71, 79, 76, 73, 128, 73, 78, 72, 69, 82, 69, 78, 212, 73, 78, - 84, 69, 82, 73, 79, 210, 75, 65, 83, 82, 65, 84, 65, 206, 75, 65, 89, 65, - 78, 78, 65, 128, 75, 79, 77, 66, 85, 86, 65, 128, 76, 45, 83, 72, 65, 80, - 69, 196, 76, 65, 84, 73, 78, 65, 84, 197, 76, 65, 89, 65, 78, 78, 65, - 128, 76, 74, 85, 68, 73, 74, 69, 128, 76, 79, 71, 79, 84, 89, 80, 197, - 77, 69, 65, 83, 85, 82, 69, 128, 77, 85, 76, 84, 73, 80, 76, 197, 77, 85, - 76, 84, 73, 83, 69, 212, 78, 65, 89, 65, 78, 78, 65, 128, 78, 85, 84, 73, - 76, 76, 85, 128, 79, 77, 73, 83, 83, 73, 79, 206, 80, 65, 89, 65, 78, 78, - 65, 128, 80, 65, 89, 69, 82, 79, 75, 128, 80, 69, 68, 69, 83, 84, 65, - 204, 80, 69, 84, 65, 76, 76, 69, 196, 80, 82, 65, 77, 45, 66, 69, 201, - 80, 82, 65, 77, 45, 80, 73, 201, 82, 71, 89, 73, 78, 71, 83, 128, 83, 45, - 83, 72, 65, 80, 69, 196, 83, 69, 77, 73, 83, 79, 70, 212, 83, 69, 77, 75, - 65, 84, 72, 128, 83, 69, 86, 69, 78, 84, 89, 128, 83, 72, 65, 80, 73, 78, - 71, 128, 83, 72, 84, 65, 80, 73, 67, 128, 83, 79, 67, 73, 69, 84, 89, - 128, 83, 80, 65, 82, 75, 76, 69, 128, 83, 80, 69, 67, 73, 65, 76, 128, - 83, 81, 85, 73, 82, 82, 69, 204, 83, 84, 65, 78, 68, 65, 82, 196, 83, 84, - 82, 79, 75, 69, 83, 128, 84, 72, 69, 83, 69, 79, 83, 128, 84, 72, 85, 78, - 68, 69, 82, 128, 84, 82, 73, 83, 69, 77, 69, 128, 85, 66, 65, 68, 65, 77, - 65, 128, 87, 65, 73, 84, 73, 78, 71, 128, 90, 72, 73, 86, 69, 84, 69, - 128, 65, 65, 89, 65, 78, 78, 65, 128, 65, 66, 65, 70, 73, 76, 73, 128, - 65, 68, 86, 65, 78, 67, 69, 128, 65, 69, 89, 65, 78, 78, 65, 128, 65, 73, - 89, 65, 78, 78, 65, 128, 65, 76, 69, 77, 66, 73, 67, 128, 65, 76, 86, 69, - 79, 76, 65, 210, 65, 78, 71, 83, 84, 82, 79, 205, 65, 78, 71, 85, 76, 65, - 82, 128, 65, 78, 85, 83, 86, 65, 82, 193, 65, 80, 79, 84, 72, 69, 83, - 128, 65, 82, 65, 69, 65, 45, 73, 128, 65, 82, 65, 69, 65, 45, 85, 128, - 65, 82, 67, 72, 65, 73, 79, 206, 65, 82, 79, 85, 83, 73, 78, 199, 65, 85, - 89, 65, 78, 78, 65, 128, 66, 65, 65, 82, 69, 82, 85, 128, 66, 65, 73, 82, - 75, 65, 78, 128, 66, 65, 82, 82, 69, 75, 72, 128, 66, 65, 82, 82, 73, 69, - 82, 128, 66, 65, 84, 72, 84, 85, 66, 128, 66, 69, 67, 65, 85, 83, 69, - 128, 66, 69, 69, 72, 73, 86, 69, 128, 66, 69, 76, 71, 84, 72, 79, 210, - 66, 69, 82, 75, 65, 78, 65, 206, 66, 73, 68, 69, 78, 84, 65, 204, 66, 79, - 85, 78, 68, 65, 82, 217, 66, 82, 65, 75, 67, 69, 84, 128, 66, 82, 73, 83, - 84, 76, 69, 128, 66, 85, 85, 77, 73, 83, 72, 128, 67, 65, 69, 83, 85, 82, - 65, 128, 67, 65, 80, 73, 84, 65, 76, 128, 67, 65, 80, 84, 73, 86, 69, - 128, 67, 65, 82, 82, 73, 65, 71, 197, 67, 69, 76, 83, 73, 85, 83, 128, - 67, 72, 65, 77, 73, 76, 73, 128, 67, 76, 73, 78, 71, 73, 78, 199, 67, 79, - 77, 80, 65, 82, 69, 128, 67, 79, 78, 83, 84, 65, 78, 212, 67, 79, 78, 84, - 65, 67, 84, 128, 67, 79, 82, 79, 78, 73, 83, 128, 67, 79, 82, 82, 69, 67, - 84, 128, 67, 82, 69, 65, 84, 73, 86, 197, 67, 82, 69, 83, 67, 69, 78, - 212, 67, 82, 85, 90, 69, 73, 82, 207, 67, 85, 82, 82, 69, 78, 84, 128, - 67, 85, 83, 84, 79, 77, 69, 210, 67, 87, 69, 79, 82, 84, 72, 128, 67, 89, - 80, 69, 82, 85, 83, 128, 67, 89, 82, 69, 78, 65, 73, 195, 68, 65, 71, 65, - 76, 71, 65, 128, 68, 69, 67, 65, 89, 69, 68, 128, 68, 69, 78, 65, 82, 73, - 85, 211, 68, 69, 89, 84, 69, 82, 79, 213, 68, 72, 65, 76, 65, 84, 72, - 128, 68, 73, 65, 77, 69, 84, 69, 210, 68, 73, 65, 84, 79, 78, 79, 206, - 68, 73, 71, 82, 65, 77, 77, 193, 68, 73, 77, 77, 73, 78, 71, 128, 68, 73, - 80, 76, 79, 85, 78, 128, 68, 73, 86, 73, 68, 69, 83, 128, 68, 79, 84, 83, - 45, 49, 50, 128, 68, 79, 84, 83, 45, 49, 51, 128, 68, 79, 84, 83, 45, 49, - 52, 128, 68, 79, 84, 83, 45, 49, 53, 128, 68, 79, 84, 83, 45, 49, 54, - 128, 68, 79, 84, 83, 45, 49, 55, 128, 68, 79, 84, 83, 45, 49, 56, 128, - 68, 79, 84, 83, 45, 50, 51, 128, 68, 79, 84, 83, 45, 50, 52, 128, 68, 79, - 84, 83, 45, 50, 53, 128, 68, 79, 84, 83, 45, 50, 54, 128, 68, 79, 84, 83, - 45, 50, 55, 128, 68, 79, 84, 83, 45, 50, 56, 128, 68, 79, 84, 83, 45, 51, - 52, 128, 68, 79, 84, 83, 45, 51, 53, 128, 68, 79, 84, 83, 45, 51, 54, - 128, 68, 79, 84, 83, 45, 51, 55, 128, 68, 79, 84, 83, 45, 51, 56, 128, - 68, 79, 84, 83, 45, 52, 53, 128, 68, 79, 84, 83, 45, 52, 54, 128, 68, 79, - 84, 83, 45, 52, 55, 128, 68, 79, 84, 83, 45, 52, 56, 128, 68, 79, 84, 83, - 45, 53, 54, 128, 68, 79, 84, 83, 45, 53, 55, 128, 68, 79, 84, 83, 45, 53, - 56, 128, 68, 79, 84, 83, 45, 54, 55, 128, 68, 79, 84, 83, 45, 54, 56, - 128, 68, 79, 84, 83, 45, 55, 56, 128, 68, 82, 65, 67, 72, 77, 65, 128, - 68, 82, 65, 70, 84, 73, 78, 199, 69, 65, 66, 72, 65, 68, 72, 128, 69, 65, - 68, 72, 65, 68, 72, 128, 69, 66, 69, 70, 73, 76, 73, 128, 69, 73, 71, 72, - 84, 69, 69, 206, 69, 76, 65, 70, 82, 79, 78, 128, 69, 76, 69, 67, 84, 82, - 73, 195, 69, 77, 80, 72, 65, 84, 73, 195, 69, 78, 81, 85, 73, 82, 89, - 128, 69, 78, 84, 69, 82, 73, 78, 199, 69, 84, 78, 65, 72, 84, 65, 128, - 69, 86, 69, 78, 73, 78, 71, 128, 70, 65, 73, 76, 85, 82, 69, 128, 70, 65, - 89, 65, 78, 78, 65, 128, 70, 69, 65, 84, 72, 69, 82, 128, 70, 73, 83, 72, - 69, 89, 69, 128, 70, 79, 78, 71, 77, 65, 78, 128, 70, 79, 79, 84, 78, 79, - 84, 197, 70, 79, 85, 82, 84, 69, 69, 206, 70, 82, 79, 87, 78, 73, 78, - 199, 71, 65, 82, 77, 69, 78, 84, 128, 71, 69, 83, 72, 84, 73, 78, 128, - 71, 73, 82, 85, 68, 65, 65, 128, 71, 82, 65, 80, 72, 69, 77, 197, 72, 65, - 70, 85, 75, 72, 65, 128, 72, 65, 76, 65, 78, 84, 65, 128, 72, 65, 76, 66, - 69, 82, 68, 128, 72, 65, 83, 65, 78, 84, 65, 128, 72, 65, 89, 65, 78, 78, - 65, 128, 72, 69, 65, 68, 73, 78, 71, 128, 72, 69, 65, 86, 69, 78, 76, - 217, 73, 45, 65, 82, 65, 69, 65, 128, 73, 66, 73, 70, 73, 76, 73, 128, - 73, 67, 72, 65, 68, 73, 78, 128, 73, 73, 89, 65, 78, 78, 65, 128, 73, 76, - 73, 77, 77, 85, 51, 128, 73, 76, 73, 77, 77, 85, 52, 128, 73, 78, 68, 73, - 82, 69, 67, 212, 73, 78, 70, 73, 78, 73, 84, 217, 73, 78, 84, 69, 82, 69, - 83, 212, 73, 79, 68, 72, 65, 68, 72, 128, 74, 65, 78, 85, 65, 82, 89, - 128, 74, 65, 80, 65, 78, 69, 83, 197, 74, 85, 80, 73, 84, 69, 82, 128, - 75, 65, 75, 65, 66, 65, 84, 128, 75, 65, 82, 65, 84, 84, 79, 128, 75, 65, - 82, 79, 82, 73, 73, 128, 75, 69, 77, 66, 65, 78, 71, 128, 75, 73, 78, 83, - 72, 73, 80, 128, 75, 79, 78, 84, 69, 86, 77, 193, 75, 79, 79, 77, 85, 85, - 84, 128, 75, 85, 82, 79, 79, 78, 69, 128, 76, 65, 78, 71, 85, 65, 71, - 197, 76, 79, 67, 65, 84, 73, 79, 206, 77, 65, 73, 75, 85, 82, 79, 128, - 77, 65, 73, 77, 85, 65, 78, 128, 77, 65, 78, 83, 89, 79, 78, 128, 77, 65, - 82, 66, 85, 84, 65, 128, 77, 65, 82, 67, 65, 84, 79, 128, 77, 65, 82, 82, - 73, 65, 71, 197, 77, 65, 82, 82, 89, 73, 78, 199, 77, 65, 83, 83, 73, 78, - 71, 128, 77, 65, 84, 84, 79, 67, 75, 128, 77, 65, 89, 65, 78, 78, 65, - 128, 77, 69, 71, 65, 84, 79, 78, 128, 77, 69, 82, 67, 85, 82, 89, 128, - 77, 69, 84, 82, 69, 84, 69, 211, 77, 73, 75, 85, 82, 79, 78, 128, 77, 79, - 68, 69, 83, 84, 89, 128, 77, 79, 72, 65, 77, 77, 65, 196, 77, 79, 82, 78, - 73, 78, 71, 128, 78, 65, 84, 73, 79, 78, 65, 204, 78, 69, 71, 65, 84, 73, - 79, 206, 78, 69, 80, 84, 85, 78, 69, 128, 78, 69, 87, 76, 73, 78, 69, - 128, 78, 71, 69, 65, 68, 65, 76, 128, 78, 73, 75, 65, 72, 73, 84, 128, - 78, 73, 78, 69, 84, 69, 69, 206, 78, 89, 73, 78, 45, 68, 79, 128, 79, 66, - 79, 70, 73, 76, 73, 128, 79, 67, 84, 79, 66, 69, 82, 128, 79, 78, 69, 45, - 76, 73, 78, 197, 79, 78, 69, 83, 69, 76, 70, 128, 79, 79, 89, 65, 78, 78, - 65, 128, 79, 82, 84, 72, 79, 68, 79, 216, 79, 85, 84, 76, 73, 78, 69, - 128, 80, 65, 67, 75, 73, 78, 71, 128, 80, 65, 76, 76, 65, 87, 65, 128, - 80, 65, 77, 65, 65, 69, 72, 128, 80, 65, 77, 69, 80, 69, 84, 128, 80, 65, - 78, 89, 73, 75, 85, 128, 80, 65, 78, 89, 85, 75, 85, 128, 80, 65, 80, 89, - 82, 85, 83, 128, 80, 65, 82, 69, 82, 69, 78, 128, 80, 65, 84, 84, 69, 82, - 78, 128, 80, 69, 76, 65, 83, 84, 79, 206, 80, 69, 84, 65, 83, 77, 65, - 128, 80, 69, 84, 65, 83, 84, 73, 128, 80, 72, 73, 78, 84, 72, 85, 128, - 80, 72, 85, 84, 72, 65, 79, 128, 80, 79, 68, 65, 84, 85, 83, 128, 80, 82, - 69, 67, 69, 68, 69, 128, 80, 82, 69, 67, 69, 68, 69, 196, 80, 82, 69, 86, - 73, 79, 85, 211, 80, 82, 73, 86, 65, 84, 69, 128, 80, 82, 79, 80, 69, 82, - 84, 217, 82, 65, 75, 72, 65, 78, 71, 128, 82, 65, 80, 73, 83, 77, 65, - 128, 82, 65, 89, 65, 78, 78, 65, 128, 82, 69, 65, 72, 77, 85, 75, 128, - 82, 69, 76, 69, 65, 83, 69, 128, 82, 69, 82, 69, 75, 65, 78, 128, 82, 69, - 84, 82, 69, 65, 84, 128, 82, 73, 84, 84, 79, 82, 85, 128, 82, 79, 83, 69, - 84, 84, 69, 128, 82, 85, 85, 66, 85, 82, 85, 128, 83, 65, 73, 75, 85, 82, - 85, 128, 83, 65, 76, 84, 73, 82, 69, 128, 83, 65, 77, 80, 72, 65, 79, - 128, 83, 65, 78, 89, 79, 79, 71, 193, 83, 67, 72, 79, 76, 65, 82, 128, - 83, 67, 82, 85, 80, 76, 69, 128, 83, 69, 71, 77, 69, 78, 84, 128, 83, 69, - 77, 85, 78, 67, 73, 193, 83, 73, 77, 73, 76, 65, 82, 128, 83, 73, 78, 75, - 73, 78, 71, 128, 83, 73, 82, 73, 78, 71, 85, 128, 83, 73, 88, 45, 76, 73, - 78, 197, 83, 76, 65, 86, 79, 78, 73, 195, 83, 78, 79, 87, 77, 65, 78, - 128, 83, 80, 73, 82, 65, 78, 84, 128, 83, 80, 82, 73, 78, 71, 83, 128, - 83, 81, 85, 65, 82, 69, 83, 128, 83, 84, 65, 85, 82, 79, 83, 128, 83, 84, - 65, 86, 82, 79, 83, 128, 83, 84, 65, 86, 82, 79, 85, 128, 83, 84, 82, 65, - 84, 73, 65, 206, 83, 84, 82, 73, 67, 84, 76, 217, 83, 85, 66, 74, 69, 67, - 84, 128, 83, 85, 67, 67, 69, 69, 68, 128, 83, 89, 78, 69, 86, 77, 65, - 128, 84, 65, 73, 76, 76, 69, 83, 211, 84, 65, 73, 83, 89, 79, 85, 128, - 84, 65, 84, 84, 79, 79, 69, 196, 84, 65, 84, 87, 69, 69, 76, 128, 84, 67, - 72, 69, 72, 69, 72, 128, 84, 69, 83, 83, 65, 82, 79, 206, 84, 69, 83, 83, - 69, 82, 65, 128, 84, 72, 73, 82, 84, 69, 69, 206, 84, 72, 85, 82, 73, 83, - 65, 218, 84, 73, 78, 65, 71, 77, 65, 128, 84, 73, 82, 79, 78, 73, 65, - 206, 84, 79, 82, 67, 85, 76, 85, 211, 84, 82, 73, 73, 83, 65, 80, 128, - 84, 82, 89, 66, 76, 73, 79, 206, 84, 84, 85, 68, 68, 65, 71, 128, 84, 86, - 73, 77, 65, 68, 85, 210, 84, 87, 79, 45, 76, 73, 78, 197, 85, 45, 69, 79, - 45, 69, 85, 128, 85, 66, 85, 70, 73, 76, 73, 128, 85, 77, 66, 82, 69, 76, - 76, 193, 86, 65, 83, 84, 78, 69, 83, 211, 86, 65, 89, 65, 78, 78, 65, - 128, 86, 73, 69, 87, 68, 65, 84, 193, 86, 73, 76, 76, 65, 71, 69, 128, - 86, 79, 73, 67, 73, 78, 71, 128, 87, 65, 83, 65, 76, 76, 65, 205, 87, 65, - 83, 84, 73, 78, 71, 128, 89, 65, 89, 65, 78, 78, 65, 128, 89, 79, 85, 84, - 72, 70, 85, 204, 89, 80, 79, 82, 82, 79, 73, 128, 72, 65, 82, 80, 79, 79, - 206, 80, 69, 82, 83, 73, 65, 206, 83, 72, 65, 86, 73, 65, 206, 85, 80, - 87, 65, 82, 68, 211, 77, 65, 72, 74, 79, 78, 199, 67, 73, 82, 67, 76, 69, - 128, 79, 83, 77, 65, 78, 89, 193, 66, 82, 65, 67, 75, 69, 212, 85, 80, - 83, 73, 76, 79, 206, 65, 67, 67, 69, 78, 84, 128, 68, 73, 78, 71, 66, 65, - 212, 83, 81, 85, 65, 82, 69, 128, 69, 80, 83, 73, 76, 79, 206, 83, 76, - 65, 78, 84, 69, 196, 86, 65, 82, 73, 65, 78, 212, 71, 76, 79, 84, 84, 65, - 204, 72, 65, 78, 85, 78, 79, 207, 68, 65, 71, 69, 83, 72, 128, 84, 65, - 71, 65, 76, 79, 199, 79, 77, 73, 67, 82, 79, 206, 80, 65, 76, 65, 84, 65, - 204, 82, 69, 86, 69, 82, 83, 197, 73, 78, 83, 85, 76, 65, 210, 78, 65, - 83, 75, 65, 80, 201, 67, 79, 82, 78, 69, 82, 128, 68, 73, 65, 77, 79, 78, - 196, 84, 72, 82, 79, 85, 71, 200, 86, 73, 82, 65, 77, 65, 128, 69, 76, - 69, 77, 69, 78, 212, 66, 85, 76, 76, 69, 84, 128, 68, 79, 84, 76, 69, 83, - 211, 79, 71, 79, 78, 69, 75, 128, 84, 69, 68, 85, 78, 71, 128, 75, 73, - 82, 71, 72, 73, 218, 83, 81, 85, 65, 82, 69, 196, 84, 87, 69, 78, 84, 89, - 128, 81, 85, 65, 82, 84, 69, 210, 83, 79, 76, 73, 68, 85, 211, 68, 79, - 85, 66, 76, 69, 128, 72, 85, 78, 68, 82, 69, 196, 73, 78, 83, 73, 68, 69, - 128, 78, 69, 73, 84, 72, 69, 210, 83, 73, 77, 73, 76, 65, 210, 83, 73, - 78, 71, 76, 69, 128, 83, 85, 66, 83, 69, 84, 128, 87, 69, 83, 84, 69, 82, - 206, 67, 72, 73, 78, 69, 83, 197, 78, 85, 78, 65, 86, 73, 203, 84, 72, - 45, 67, 82, 69, 197, 84, 82, 73, 71, 82, 65, 205, 65, 82, 75, 84, 73, 75, - 207, 69, 76, 69, 86, 69, 78, 128, 72, 89, 80, 72, 69, 78, 128, 77, 65, - 82, 75, 69, 82, 128, 79, 80, 69, 78, 73, 78, 199, 84, 87, 69, 76, 86, 69, - 128, 65, 82, 82, 79, 87, 83, 128, 68, 82, 65, 71, 79, 78, 128, 69, 73, - 71, 72, 84, 72, 211, 75, 65, 83, 75, 65, 76, 128, 79, 66, 76, 73, 81, 85, - 197, 80, 65, 82, 84, 73, 65, 204, 84, 72, 73, 82, 84, 89, 128, 86, 82, - 65, 67, 72, 89, 128, 65, 82, 67, 72, 65, 73, 195, 70, 65, 76, 76, 73, 78, - 199, 77, 69, 65, 83, 85, 82, 197, 80, 69, 82, 67, 69, 78, 212, 67, 69, - 68, 73, 76, 76, 193, 67, 79, 78, 84, 82, 79, 204, 67, 85, 82, 86, 73, 78, - 199, 68, 73, 71, 82, 65, 80, 200, 69, 81, 85, 65, 76, 83, 128, 70, 73, - 76, 76, 69, 82, 128, 71, 65, 78, 71, 73, 65, 128, 73, 78, 86, 69, 82, 83, - 197, 73, 79, 84, 65, 84, 69, 196, 75, 69, 78, 84, 73, 77, 193, 82, 79, - 85, 78, 68, 69, 196, 83, 65, 78, 89, 65, 75, 193, 84, 67, 72, 69, 72, 69, - 200, 84, 79, 78, 69, 45, 50, 128, 84, 79, 78, 69, 45, 51, 128, 84, 79, - 78, 69, 45, 53, 128, 84, 79, 80, 66, 65, 82, 128, 84, 85, 82, 84, 76, 69, - 128, 89, 73, 68, 68, 73, 83, 200, 45, 75, 72, 89, 73, 76, 128, 65, 83, - 72, 71, 65, 66, 128, 66, 65, 77, 66, 79, 79, 128, 66, 79, 84, 84, 79, 77, - 128, 67, 69, 78, 84, 82, 69, 128, 67, 69, 78, 84, 82, 69, 196, 67, 79, - 78, 84, 65, 73, 206, 67, 79, 78, 84, 79, 85, 210, 67, 79, 85, 78, 67, 73, - 204, 67, 82, 79, 83, 83, 69, 196, 68, 65, 78, 84, 65, 74, 193, 68, 73, - 86, 73, 68, 69, 196, 68, 79, 84, 84, 69, 68, 128, 69, 65, 83, 84, 69, 82, - 206, 70, 73, 70, 84, 72, 83, 128, 72, 69, 65, 86, 69, 78, 128, 75, 79, - 77, 66, 85, 86, 193, 75, 82, 65, 84, 73, 77, 193, 75, 85, 83, 72, 85, 50, - 128, 76, 69, 65, 68, 69, 82, 128, 77, 65, 82, 66, 85, 84, 193, 77, 69, - 77, 66, 69, 82, 128, 78, 65, 84, 85, 82, 65, 204, 78, 73, 78, 69, 84, 89, - 128, 80, 69, 78, 67, 73, 76, 128, 81, 65, 77, 65, 84, 83, 128, 83, 75, - 76, 73, 82, 79, 206, 83, 79, 71, 68, 73, 65, 206, 83, 84, 73, 71, 77, 65, - 128, 83, 89, 78, 65, 71, 77, 193, 84, 65, 65, 76, 85, 74, 193, 84, 72, - 69, 83, 69, 79, 211, 84, 79, 78, 71, 85, 69, 128, 65, 67, 65, 68, 69, 77, - 217, 65, 67, 67, 79, 85, 78, 212, 65, 78, 67, 72, 79, 82, 128, 65, 78, - 67, 79, 82, 65, 128, 65, 80, 76, 79, 85, 78, 128, 66, 65, 76, 85, 68, 65, - 128, 66, 65, 83, 72, 75, 73, 210, 66, 69, 78, 90, 69, 78, 197, 66, 73, - 78, 68, 73, 78, 199, 66, 73, 83, 72, 79, 80, 128, 66, 76, 69, 78, 68, 69, - 196, 66, 79, 87, 84, 73, 69, 128, 66, 82, 65, 78, 67, 72, 128, 67, 69, - 82, 45, 87, 65, 128, 67, 72, 73, 69, 85, 67, 200, 67, 72, 82, 73, 86, 73, - 128, 67, 76, 85, 83, 84, 69, 210, 68, 65, 71, 71, 69, 82, 128, 68, 65, - 80, 45, 66, 69, 201, 68, 65, 80, 45, 80, 73, 201, 68, 69, 67, 73, 77, 65, - 204, 68, 73, 86, 73, 68, 69, 128, 68, 74, 69, 82, 86, 73, 128, 68, 79, - 85, 66, 76, 69, 196, 68, 82, 65, 67, 72, 77, 193, 69, 65, 82, 84, 72, 76, - 217, 69, 73, 71, 72, 84, 89, 128, 69, 83, 67, 65, 80, 69, 128, 70, 69, - 65, 84, 72, 69, 210, 70, 76, 69, 88, 85, 83, 128, 71, 69, 82, 69, 83, 72, - 128, 71, 72, 85, 78, 78, 65, 128, 71, 82, 69, 65, 84, 69, 210, 72, 69, - 76, 77, 69, 84, 128, 72, 79, 76, 68, 73, 78, 199, 73, 78, 72, 73, 66, 73, - 212, 73, 83, 83, 72, 65, 82, 128, 73, 90, 72, 73, 84, 83, 193, 75, 65, - 86, 89, 75, 65, 128, 75, 69, 69, 80, 73, 78, 199, 75, 72, 73, 69, 85, 75, - 200, 75, 73, 83, 73, 77, 53, 128, 75, 76, 65, 83, 77, 65, 128, 75, 78, - 73, 71, 72, 84, 128, 75, 79, 82, 65, 78, 73, 195, 76, 69, 71, 69, 84, 79, - 211, 77, 65, 76, 65, 75, 79, 206, 77, 65, 82, 75, 45, 49, 128, 77, 65, - 82, 75, 45, 50, 128, 77, 79, 82, 84, 65, 82, 128, 77, 85, 67, 65, 65, 68, - 128, 78, 69, 71, 65, 84, 69, 196, 78, 69, 85, 84, 82, 65, 204, 78, 79, - 84, 67, 72, 69, 196, 79, 82, 68, 73, 78, 65, 204, 80, 65, 76, 65, 85, 78, - 199, 80, 72, 73, 69, 85, 80, 200, 80, 72, 82, 65, 83, 69, 128, 80, 73, - 76, 67, 82, 79, 215, 80, 76, 65, 71, 73, 79, 211, 80, 76, 79, 80, 72, 85, - 128, 80, 79, 75, 79, 74, 73, 128, 82, 69, 84, 85, 82, 78, 128, 82, 73, - 75, 82, 73, 75, 128, 83, 69, 82, 73, 70, 83, 128, 83, 69, 88, 84, 85, 76, - 193, 83, 72, 65, 80, 69, 83, 128, 83, 73, 88, 84, 69, 69, 206, 83, 76, - 79, 80, 73, 78, 199, 83, 77, 65, 76, 76, 69, 210, 83, 77, 73, 76, 73, 78, - 199, 83, 80, 69, 69, 67, 72, 128, 83, 80, 73, 68, 69, 82, 217, 83, 85, - 82, 65, 78, 71, 128, 84, 65, 45, 82, 79, 76, 128, 84, 65, 77, 73, 78, 71, - 128, 84, 69, 76, 69, 73, 65, 128, 84, 69, 76, 73, 83, 72, 193, 84, 69, - 83, 83, 69, 82, 193, 84, 72, 69, 84, 72, 69, 128, 84, 72, 73, 69, 85, 84, - 200, 84, 72, 82, 69, 65, 68, 128, 84, 72, 82, 69, 69, 45, 196, 84, 79, - 78, 69, 45, 52, 128, 84, 79, 78, 69, 45, 54, 128, 84, 86, 82, 73, 68, 79, - 128, 85, 80, 84, 85, 82, 78, 128, 87, 79, 76, 79, 83, 79, 128, 89, 69, - 76, 76, 79, 87, 128, 89, 79, 45, 89, 65, 69, 128, 89, 85, 45, 89, 69, 79, - 128, 90, 69, 77, 76, 74, 65, 128, 90, 69, 77, 76, 89, 65, 128, 65, 66, - 89, 83, 77, 65, 204, 65, 70, 71, 72, 65, 78, 201, 65, 70, 82, 73, 67, 65, - 206, 65, 72, 65, 71, 71, 65, 210, 65, 73, 72, 86, 85, 83, 128, 65, 73, - 75, 65, 82, 65, 128, 65, 73, 86, 73, 76, 73, 203, 65, 76, 65, 89, 72, 69, - 128, 65, 76, 73, 71, 78, 69, 196, 65, 78, 78, 85, 73, 84, 217, 65, 80, - 65, 65, 84, 79, 128, 65, 82, 65, 69, 65, 69, 128, 65, 82, 77, 79, 85, 82, - 128, 65, 82, 82, 73, 86, 69, 128, 65, 82, 83, 69, 79, 83, 128, 65, 82, - 85, 72, 85, 65, 128, 65, 83, 67, 69, 78, 84, 128, 65, 85, 71, 85, 83, 84, - 128, 65, 85, 83, 84, 82, 65, 204, 65, 85, 84, 85, 77, 78, 128, 65, 86, - 69, 82, 65, 71, 197, 66, 65, 68, 71, 69, 82, 128, 66, 65, 72, 65, 82, 50, - 128, 66, 65, 73, 77, 65, 73, 128, 66, 65, 78, 84, 79, 67, 128, 66, 65, - 82, 76, 69, 89, 128, 66, 65, 82, 82, 69, 69, 128, 66, 69, 84, 87, 69, 69, - 206, 66, 69, 89, 89, 65, 76, 128, 66, 73, 84, 84, 69, 82, 128, 66, 79, - 82, 85, 84, 79, 128, 66, 82, 69, 86, 73, 83, 128, 66, 82, 79, 78, 90, 69, - 128, 66, 85, 67, 75, 76, 69, 128, 67, 65, 78, 67, 69, 76, 128, 67, 65, - 78, 67, 69, 82, 128, 67, 65, 78, 68, 82, 65, 128, 67, 65, 84, 65, 87, 65, - 128, 67, 65, 85, 84, 73, 79, 206, 67, 72, 65, 77, 75, 79, 128, 67, 72, - 65, 78, 71, 69, 128, 67, 72, 65, 82, 73, 79, 212, 67, 72, 69, 86, 82, 79, - 206, 67, 72, 73, 82, 69, 84, 128, 67, 72, 73, 82, 79, 78, 128, 67, 72, - 85, 82, 67, 72, 128, 67, 76, 69, 70, 45, 49, 128, 67, 76, 69, 70, 45, 50, - 128, 67, 76, 73, 86, 73, 83, 128, 67, 76, 79, 83, 69, 68, 128, 67, 79, - 70, 70, 73, 78, 128, 67, 79, 76, 85, 77, 78, 128, 67, 79, 78, 73, 67, 65, - 204, 67, 79, 82, 80, 83, 69, 128, 67, 85, 82, 82, 69, 78, 212, 68, 65, - 65, 68, 72, 85, 128, 68, 65, 76, 65, 84, 72, 128, 68, 65, 77, 65, 82, 85, - 128, 68, 65, 83, 69, 73, 65, 128, 68, 68, 65, 72, 65, 76, 128, 68, 69, - 76, 69, 84, 69, 128, 68, 69, 76, 80, 72, 73, 195, 68, 69, 78, 78, 69, 78, - 128, 68, 72, 65, 65, 76, 85, 128, 68, 72, 65, 82, 77, 65, 128, 68, 73, - 69, 83, 73, 83, 128, 68, 73, 77, 73, 68, 73, 193, 68, 73, 80, 80, 69, 82, - 128, 68, 73, 86, 79, 82, 67, 197, 68, 79, 76, 73, 85, 77, 128, 68, 79, - 84, 83, 45, 49, 128, 68, 79, 84, 83, 45, 50, 128, 68, 79, 84, 83, 45, 51, - 128, 68, 79, 84, 83, 45, 52, 128, 68, 79, 84, 83, 45, 53, 128, 68, 79, - 84, 83, 45, 54, 128, 68, 79, 84, 83, 45, 55, 128, 68, 79, 84, 83, 45, 56, - 128, 68, 85, 84, 73, 69, 83, 128, 69, 73, 71, 72, 84, 72, 128, 69, 78, - 65, 82, 88, 73, 211, 69, 88, 67, 69, 83, 83, 128, 69, 88, 73, 83, 84, 83, - 128, 70, 65, 67, 69, 45, 49, 128, 70, 65, 67, 69, 45, 50, 128, 70, 65, - 67, 69, 45, 51, 128, 70, 65, 67, 69, 45, 52, 128, 70, 65, 67, 69, 45, 53, - 128, 70, 65, 67, 69, 45, 54, 128, 70, 65, 77, 73, 76, 89, 128, 70, 65, - 84, 72, 69, 82, 128, 70, 69, 77, 65, 76, 69, 128, 70, 69, 82, 77, 65, 84, - 193, 70, 73, 70, 84, 69, 69, 206, 70, 76, 65, 71, 45, 49, 128, 70, 76, - 65, 71, 45, 50, 128, 70, 76, 65, 71, 45, 51, 128, 70, 76, 65, 71, 45, 52, - 128, 70, 76, 65, 71, 45, 53, 128, 70, 76, 73, 71, 72, 84, 128, 70, 76, - 79, 87, 69, 82, 128, 70, 79, 82, 67, 69, 83, 128, 70, 85, 78, 69, 82, 65, - 204, 71, 65, 83, 72, 65, 78, 128, 71, 69, 68, 79, 76, 65, 128, 71, 69, - 77, 73, 78, 73, 128, 71, 69, 78, 69, 82, 73, 195, 71, 69, 83, 72, 84, 73, - 206, 71, 72, 65, 73, 78, 85, 128, 71, 72, 65, 77, 65, 76, 128, 71, 82, - 65, 84, 69, 82, 128, 71, 82, 79, 85, 78, 68, 128, 71, 85, 65, 82, 65, 78, - 201, 71, 85, 82, 85, 83, 72, 128, 72, 65, 70, 85, 75, 72, 128, 72, 69, - 73, 83, 69, 73, 128, 72, 69, 82, 65, 69, 85, 205, 72, 69, 82, 77, 69, 83, - 128, 72, 69, 82, 85, 84, 85, 128, 72, 82, 89, 86, 78, 73, 193, 72, 85, - 73, 73, 84, 79, 128, 73, 45, 66, 69, 65, 77, 128, 73, 76, 73, 77, 77, 85, - 128, 73, 77, 73, 83, 69, 79, 211, 73, 78, 71, 87, 65, 90, 128, 73, 78, - 73, 78, 71, 85, 128, 73, 78, 83, 69, 67, 84, 128, 74, 79, 73, 78, 69, 68, - 128, 75, 65, 78, 65, 75, 79, 128, 75, 65, 78, 84, 65, 74, 193, 75, 69, - 70, 85, 76, 65, 128, 75, 69, 77, 80, 76, 73, 128, 75, 69, 77, 80, 85, 76, - 128, 75, 69, 89, 67, 65, 80, 128, 75, 72, 79, 77, 85, 84, 128, 75, 76, - 73, 84, 79, 78, 128, 75, 79, 82, 85, 78, 65, 128, 75, 87, 85, 51, 49, 56, - 128, 75, 89, 65, 84, 72, 79, 211, 75, 89, 85, 82, 73, 73, 128, 76, 65, - 72, 83, 72, 85, 128, 76, 65, 77, 65, 68, 72, 128, 76, 65, 84, 69, 82, 65, - 204, 76, 69, 71, 73, 79, 78, 128, 76, 69, 73, 77, 77, 65, 128, 76, 69, - 84, 84, 69, 82, 128, 76, 73, 76, 73, 84, 72, 128, 76, 73, 77, 73, 84, 69, - 196, 76, 73, 77, 77, 85, 50, 128, 76, 73, 78, 69, 45, 49, 128, 76, 73, - 78, 69, 45, 51, 128, 76, 73, 78, 69, 45, 55, 128, 76, 73, 78, 69, 45, 57, - 128, 76, 73, 78, 75, 73, 78, 199, 76, 79, 90, 69, 78, 71, 197, 77, 65, - 73, 68, 69, 78, 128, 77, 65, 76, 84, 69, 83, 197, 77, 65, 82, 75, 45, 51, - 128, 77, 65, 82, 75, 45, 52, 128, 77, 65, 82, 85, 75, 85, 128, 77, 65, - 84, 82, 73, 88, 128, 77, 65, 88, 73, 77, 65, 128, 77, 69, 68, 73, 85, 77, - 128, 77, 69, 71, 65, 76, 73, 128, 77, 69, 82, 75, 72, 65, 128, 77, 69, - 84, 82, 73, 65, 128, 77, 73, 68, 76, 73, 78, 197, 77, 73, 76, 76, 69, 84, - 128, 77, 73, 78, 73, 77, 65, 128, 77, 79, 68, 69, 76, 83, 128, 77, 79, - 84, 72, 69, 82, 128, 77, 85, 78, 83, 85, 66, 128, 77, 85, 81, 68, 65, 77, - 128, 77, 85, 82, 71, 85, 50, 128, 78, 65, 85, 84, 72, 83, 128, 78, 69, - 78, 65, 78, 79, 128, 78, 69, 85, 84, 69, 82, 128, 78, 73, 78, 68, 65, 50, - 128, 78, 73, 82, 85, 71, 85, 128, 78, 79, 75, 72, 85, 75, 128, 78, 79, - 77, 73, 78, 65, 204, 78, 85, 77, 66, 69, 82, 128, 78, 85, 78, 65, 86, 85, - 212, 79, 66, 69, 76, 79, 83, 128, 79, 77, 65, 76, 79, 78, 128, 79, 80, - 69, 78, 45, 80, 128, 79, 80, 80, 79, 83, 69, 128, 79, 82, 67, 72, 73, 68, - 128, 79, 82, 73, 71, 73, 78, 128, 79, 84, 72, 65, 76, 65, 206, 80, 65, - 76, 76, 65, 83, 128, 80, 65, 76, 85, 84, 65, 128, 80, 65, 77, 65, 68, 65, - 128, 80, 65, 83, 72, 84, 65, 128, 80, 69, 78, 73, 72, 73, 128, 80, 69, - 82, 83, 79, 78, 128, 80, 73, 75, 85, 82, 85, 128, 80, 73, 80, 73, 78, 71, - 128, 80, 73, 83, 67, 69, 83, 128, 80, 79, 73, 78, 84, 79, 128, 80, 82, - 69, 67, 69, 68, 197, 80, 82, 69, 70, 65, 67, 197, 80, 82, 79, 68, 85, 67, - 212, 80, 85, 82, 73, 84, 89, 128, 80, 85, 83, 72, 73, 78, 199, 81, 69, - 84, 65, 78, 65, 128, 81, 85, 66, 85, 84, 83, 128, 82, 65, 77, 66, 65, 84, - 128, 82, 69, 80, 69, 65, 84, 128, 82, 73, 84, 85, 65, 76, 128, 82, 85, - 78, 79, 85, 84, 128, 83, 65, 65, 68, 72, 85, 128, 83, 65, 74, 68, 65, 72, - 128, 83, 65, 77, 69, 75, 72, 128, 83, 65, 78, 71, 65, 50, 128, 83, 65, - 78, 78, 89, 65, 128, 83, 65, 84, 85, 82, 78, 128, 83, 67, 65, 76, 69, 83, - 128, 83, 67, 82, 69, 69, 78, 128, 83, 67, 82, 73, 80, 84, 128, 83, 69, - 65, 71, 85, 76, 204, 83, 69, 67, 79, 78, 68, 128, 83, 69, 67, 82, 69, 84, - 128, 83, 69, 67, 84, 79, 82, 128, 83, 69, 73, 83, 77, 65, 128, 83, 69, - 82, 86, 73, 67, 197, 83, 69, 86, 69, 78, 84, 217, 83, 69, 88, 84, 65, 78, - 211, 83, 72, 65, 68, 68, 65, 128, 83, 72, 65, 75, 84, 73, 128, 83, 72, - 69, 69, 78, 85, 128, 83, 72, 69, 83, 72, 50, 128, 83, 72, 69, 83, 72, 73, - 199, 83, 72, 73, 69, 76, 68, 128, 83, 72, 73, 78, 73, 71, 128, 83, 72, - 79, 82, 84, 83, 128, 83, 72, 85, 66, 85, 82, 128, 83, 72, 85, 70, 70, 76, - 197, 83, 73, 67, 75, 76, 69, 128, 83, 73, 76, 73, 81, 85, 193, 83, 73, - 88, 84, 72, 83, 128, 83, 76, 79, 87, 76, 89, 128, 83, 80, 65, 67, 73, 78, - 199, 83, 80, 65, 84, 72, 73, 128, 83, 80, 73, 82, 65, 76, 128, 83, 80, - 73, 82, 73, 84, 128, 83, 80, 82, 73, 78, 71, 128, 83, 80, 82, 79, 85, 84, - 128, 83, 84, 65, 86, 82, 79, 211, 83, 84, 82, 65, 73, 70, 128, 83, 84, - 82, 73, 68, 69, 128, 83, 84, 82, 79, 75, 69, 211, 83, 85, 66, 73, 84, 79, - 128, 83, 85, 67, 67, 69, 69, 196, 83, 85, 77, 65, 83, 72, 128, 83, 85, - 77, 77, 69, 82, 128, 83, 85, 82, 70, 65, 67, 197, 83, 87, 79, 82, 68, 83, - 128, 83, 89, 78, 65, 70, 73, 128, 83, 89, 79, 85, 87, 65, 128, 84, 65, - 76, 73, 78, 71, 128, 84, 65, 84, 87, 69, 69, 204, 84, 65, 85, 82, 85, 83, - 128, 84, 69, 78, 85, 84, 79, 128, 84, 72, 65, 65, 76, 85, 128, 84, 72, - 65, 72, 65, 78, 128, 84, 72, 65, 78, 78, 65, 128, 84, 72, 73, 82, 68, 83, - 128, 84, 72, 73, 85, 84, 72, 128, 84, 73, 80, 69, 72, 65, 128, 84, 79, - 78, 69, 45, 49, 128, 84, 82, 73, 80, 76, 73, 128, 84, 82, 73, 80, 79, 68, - 128, 84, 83, 72, 79, 79, 75, 128, 84, 83, 72, 85, 71, 83, 128, 84, 84, - 69, 72, 69, 72, 128, 84, 85, 82, 66, 65, 78, 128, 85, 80, 82, 73, 71, 72, - 212, 85, 80, 87, 65, 82, 68, 128, 85, 82, 65, 78, 85, 83, 128, 85, 83, - 72, 85, 77, 88, 128, 86, 65, 76, 76, 69, 89, 128, 86, 65, 82, 69, 73, 65, - 201, 86, 65, 82, 73, 75, 65, 128, 86, 73, 67, 84, 79, 82, 217, 86, 73, - 82, 73, 65, 77, 128, 86, 73, 83, 65, 82, 71, 193, 86, 79, 76, 84, 65, 71, - 197, 87, 65, 82, 78, 73, 78, 199, 87, 69, 65, 80, 79, 78, 128, 87, 72, - 69, 69, 76, 69, 196, 87, 73, 78, 84, 69, 82, 128, 87, 82, 73, 84, 73, 78, - 199, 89, 65, 75, 65, 83, 72, 128, 89, 70, 69, 83, 73, 83, 128, 89, 79, - 45, 89, 69, 79, 128, 89, 80, 83, 73, 76, 73, 128, 84, 72, 65, 65, 78, - 193, 67, 65, 82, 73, 65, 206, 86, 65, 82, 73, 65, 128, 83, 89, 76, 79, - 84, 201, 67, 65, 82, 79, 78, 128, 77, 73, 68, 68, 76, 197, 66, 76, 65, - 67, 75, 128, 82, 69, 74, 65, 78, 199, 65, 67, 67, 69, 78, 212, 84, 82, - 73, 80, 76, 197, 68, 79, 84, 84, 69, 196, 69, 81, 85, 65, 76, 211, 76, - 89, 67, 73, 65, 206, 86, 69, 83, 83, 69, 204, 76, 89, 68, 73, 65, 206, - 75, 73, 83, 73, 77, 181, 67, 76, 79, 83, 69, 196, 66, 79, 84, 84, 79, - 205, 77, 69, 68, 73, 85, 205, 83, 73, 78, 71, 76, 197, 72, 69, 65, 86, - 89, 128, 77, 65, 78, 67, 72, 213, 66, 76, 79, 67, 75, 128, 67, 79, 77, - 77, 65, 128, 79, 77, 69, 71, 65, 128, 84, 79, 78, 79, 83, 128, 65, 76, - 80, 72, 65, 128, 70, 84, 72, 79, 82, 193, 83, 73, 71, 77, 65, 128, 68, - 65, 83, 73, 65, 128, 68, 69, 76, 84, 65, 128, 83, 85, 66, 83, 69, 212, - 65, 76, 77, 79, 83, 212, 67, 79, 82, 78, 69, 210, 86, 85, 76, 71, 65, - 210, 69, 81, 85, 65, 76, 128, 76, 65, 77, 68, 65, 128, 77, 65, 67, 82, - 79, 206, 67, 82, 79, 83, 83, 128, 73, 67, 72, 79, 83, 128, 78, 73, 78, - 68, 65, 178, 83, 65, 89, 73, 83, 201, 84, 72, 69, 84, 65, 128, 87, 72, - 73, 84, 69, 128, 75, 65, 80, 80, 65, 128, 78, 85, 66, 73, 65, 206, 89, - 45, 67, 82, 69, 197, 66, 69, 83, 73, 68, 197, 67, 69, 78, 84, 82, 197, - 83, 72, 65, 68, 68, 193, 84, 87, 69, 78, 84, 217, 69, 65, 82, 84, 72, - 128, 70, 73, 70, 84, 89, 128, 76, 69, 78, 71, 84, 200, 76, 73, 84, 84, - 76, 197, 76, 85, 78, 65, 84, 197, 78, 79, 82, 77, 65, 204, 82, 65, 73, - 83, 69, 196, 84, 72, 73, 82, 84, 217, 67, 65, 78, 68, 82, 193, 68, 65, - 78, 68, 65, 128, 68, 65, 83, 72, 69, 196, 68, 73, 71, 82, 65, 205, 71, - 69, 83, 72, 50, 128, 80, 82, 73, 77, 69, 128, 82, 73, 83, 73, 78, 199, - 83, 72, 65, 82, 50, 128, 85, 78, 73, 79, 78, 128, 82, 69, 80, 69, 65, - 212, 84, 69, 77, 80, 85, 211, 84, 85, 65, 82, 69, 199, 66, 65, 82, 82, - 69, 197, 78, 85, 75, 84, 65, 128, 80, 79, 87, 69, 82, 211, 82, 84, 65, - 71, 83, 128, 83, 65, 83, 65, 75, 128, 67, 72, 73, 76, 76, 213, 68, 73, - 69, 83, 73, 211, 68, 73, 80, 76, 73, 128, 73, 78, 68, 69, 88, 128, 75, - 79, 80, 80, 65, 128, 78, 65, 66, 76, 65, 128, 79, 84, 84, 65, 86, 193, - 83, 65, 77, 80, 73, 128, 83, 67, 72, 87, 65, 128, 83, 72, 73, 77, 65, - 128, 83, 84, 65, 70, 70, 128, 89, 70, 69, 83, 73, 211, 66, 65, 76, 76, - 79, 212, 66, 82, 79, 75, 69, 206, 67, 76, 73, 67, 75, 128, 67, 85, 66, - 69, 68, 128, 67, 85, 82, 86, 69, 196, 70, 69, 77, 65, 76, 197, 70, 69, - 78, 67, 69, 128, 71, 69, 83, 72, 85, 128, 75, 65, 83, 75, 65, 204, 75, - 79, 82, 69, 65, 206, 76, 65, 71, 65, 66, 128, 76, 69, 73, 77, 77, 193, - 78, 69, 83, 84, 69, 196, 83, 72, 65, 82, 85, 128, 83, 84, 82, 69, 83, - 211, 84, 73, 77, 69, 83, 128, 85, 73, 71, 72, 85, 210, 87, 65, 84, 69, - 82, 128, 87, 69, 73, 71, 72, 212, 90, 73, 71, 90, 65, 199, 65, 76, 65, - 89, 72, 197, 66, 65, 76, 65, 71, 128, 66, 65, 83, 83, 65, 128, 66, 82, - 73, 68, 71, 197, 67, 72, 82, 79, 77, 193, 68, 65, 77, 77, 65, 128, 68, - 69, 71, 82, 69, 197, 68, 69, 86, 73, 67, 197, 68, 79, 76, 76, 65, 210, - 68, 90, 69, 76, 79, 128, 69, 82, 73, 78, 50, 128, 76, 85, 71, 65, 76, - 128, 80, 65, 73, 82, 69, 196, 80, 65, 84, 65, 72, 128, 80, 73, 69, 67, - 69, 128, 80, 79, 69, 84, 82, 217, 81, 85, 73, 76, 76, 128, 83, 75, 69, - 87, 69, 196, 84, 84, 69, 72, 69, 200, 87, 73, 71, 71, 76, 217, 65, 82, - 79, 85, 78, 196, 65, 82, 83, 69, 79, 211, 66, 85, 76, 85, 71, 128, 67, - 65, 82, 69, 84, 128, 67, 76, 73, 70, 70, 128, 67, 76, 79, 84, 72, 128, - 68, 65, 71, 69, 83, 200, 68, 74, 69, 82, 86, 128, 70, 76, 79, 82, 65, - 204, 70, 79, 82, 84, 89, 128, 72, 69, 65, 82, 84, 128, 76, 65, 77, 69, - 68, 128, 77, 65, 80, 73, 81, 128, 78, 45, 67, 82, 69, 197, 79, 71, 79, - 78, 69, 203, 80, 79, 73, 78, 84, 128, 80, 79, 83, 84, 65, 204, 80, 84, - 72, 65, 72, 193, 83, 67, 72, 69, 77, 193, 83, 69, 71, 79, 76, 128, 83, - 72, 65, 68, 69, 128, 83, 72, 67, 72, 65, 128, 83, 77, 65, 76, 76, 128, - 84, 65, 76, 73, 78, 199, 84, 72, 73, 82, 68, 211, 84, 72, 79, 82, 78, - 128, 84, 73, 84, 76, 79, 128, 84, 79, 79, 84, 72, 128, 84, 83, 72, 69, - 71, 128, 86, 65, 82, 69, 73, 193, 87, 72, 69, 65, 84, 128, 87, 79, 77, - 65, 78, 128, 90, 81, 65, 80, 72, 193, 65, 76, 65, 80, 72, 128, 66, 69, - 65, 77, 69, 196, 66, 69, 82, 66, 69, 210, 66, 73, 78, 65, 82, 217, 66, - 73, 78, 68, 73, 128, 66, 79, 87, 84, 73, 197, 67, 72, 69, 67, 75, 128, - 67, 72, 73, 76, 68, 128, 67, 85, 82, 86, 69, 128, 68, 65, 76, 68, 65, - 128, 68, 65, 76, 69, 84, 128, 68, 68, 65, 72, 65, 204, 68, 69, 65, 84, - 72, 128, 68, 79, 66, 82, 79, 128, 69, 83, 72, 69, 51, 128, 69, 84, 69, - 82, 79, 206, 70, 65, 67, 84, 79, 210, 70, 65, 84, 72, 65, 128, 70, 73, - 71, 85, 82, 197, 70, 76, 79, 79, 82, 128, 70, 76, 85, 84, 69, 128, 70, - 79, 82, 75, 69, 196, 70, 82, 73, 84, 85, 128, 71, 65, 80, 80, 69, 196, - 71, 69, 78, 73, 75, 201, 71, 72, 65, 73, 78, 128, 71, 72, 79, 83, 84, - 128, 71, 72, 85, 78, 78, 193, 71, 78, 89, 73, 83, 128, 71, 79, 82, 71, - 73, 128, 72, 65, 77, 77, 69, 210, 72, 65, 77, 90, 65, 128, 72, 73, 82, - 73, 81, 128, 72, 79, 76, 65, 77, 128, 72, 79, 82, 83, 69, 128, 72, 87, - 65, 73, 82, 128, 72, 89, 80, 72, 69, 206, 73, 65, 85, 68, 65, 128, 75, - 65, 83, 82, 65, 128, 75, 65, 90, 65, 75, 200, 75, 73, 89, 69, 79, 203, - 75, 76, 65, 83, 77, 193, 76, 65, 66, 79, 82, 128, 76, 65, 71, 65, 82, - 128, 76, 65, 82, 71, 69, 210, 76, 65, 85, 76, 65, 128, 76, 69, 78, 71, - 65, 128, 76, 69, 83, 83, 69, 210, 76, 79, 78, 71, 65, 128, 77, 65, 83, - 72, 50, 128, 77, 69, 84, 65, 76, 128, 77, 79, 85, 84, 72, 128, 78, 65, - 83, 72, 73, 128, 78, 79, 84, 67, 72, 128, 78, 79, 84, 69, 83, 128, 78, - 85, 78, 85, 90, 128, 79, 76, 73, 71, 79, 206, 79, 82, 78, 65, 84, 197, - 80, 73, 65, 83, 77, 193, 80, 73, 82, 73, 71, 128, 80, 76, 65, 78, 67, - 203, 80, 79, 87, 69, 82, 128, 80, 82, 79, 84, 79, 211, 81, 65, 84, 65, - 78, 128, 81, 85, 69, 69, 78, 128, 82, 69, 65, 67, 72, 128, 82, 71, 89, - 65, 78, 128, 82, 73, 84, 83, 73, 128, 82, 78, 89, 73, 78, 199, 83, 67, - 82, 69, 69, 206, 83, 69, 71, 78, 79, 128, 83, 69, 82, 73, 70, 211, 83, - 69, 83, 65, 77, 197, 83, 72, 65, 78, 71, 128, 83, 72, 65, 82, 80, 128, - 83, 72, 69, 69, 80, 128, 83, 72, 69, 76, 70, 128, 83, 72, 69, 76, 76, - 128, 83, 72, 69, 83, 72, 128, 83, 72, 79, 82, 84, 211, 83, 72, 87, 65, - 65, 128, 83, 72, 87, 73, 73, 128, 83, 72, 87, 79, 79, 128, 83, 73, 71, - 78, 83, 128, 83, 73, 76, 65, 51, 128, 83, 73, 78, 68, 72, 201, 83, 73, - 88, 84, 72, 128, 83, 73, 88, 84, 89, 128, 83, 76, 79, 86, 79, 128, 83, - 80, 69, 65, 82, 128, 83, 80, 73, 82, 73, 212, 83, 84, 79, 67, 75, 128, - 83, 84, 85, 68, 89, 128, 83, 85, 72, 85, 82, 128, 83, 85, 75, 85, 78, - 128, 84, 65, 78, 78, 69, 196, 84, 69, 76, 79, 85, 211, 84, 72, 87, 65, - 65, 128, 84, 73, 71, 69, 82, 128, 84, 73, 75, 69, 85, 212, 84, 82, 85, - 78, 75, 128, 84, 83, 65, 68, 73, 128, 84, 83, 72, 69, 83, 128, 84, 87, - 69, 76, 86, 197, 85, 82, 85, 68, 65, 128, 87, 65, 84, 67, 72, 128, 89, - 69, 83, 84, 85, 128, 89, 79, 45, 89, 65, 128, 89, 85, 45, 89, 69, 128, - 90, 90, 73, 69, 84, 128, 45, 67, 72, 65, 76, 128, 45, 75, 72, 89, 85, - 196, 45, 80, 72, 82, 85, 128, 65, 68, 68, 65, 75, 128, 65, 71, 65, 73, - 78, 128, 65, 72, 83, 68, 65, 128, 65, 75, 65, 82, 65, 128, 65, 76, 69, - 80, 72, 128, 65, 76, 73, 70, 85, 128, 65, 77, 79, 85, 78, 212, 65, 78, - 80, 69, 65, 128, 65, 78, 83, 72, 69, 128, 65, 80, 65, 82, 84, 128, 65, - 80, 82, 73, 76, 128, 65, 82, 69, 80, 65, 128, 65, 82, 73, 69, 83, 128, - 65, 82, 75, 65, 66, 128, 65, 82, 76, 65, 85, 199, 65, 82, 79, 85, 82, - 193, 65, 82, 82, 65, 89, 128, 65, 82, 84, 65, 66, 197, 65, 83, 65, 76, - 50, 128, 65, 83, 89, 85, 82, 193, 66, 65, 82, 65, 50, 128, 66, 66, 73, - 69, 80, 128, 66, 66, 73, 69, 84, 128, 66, 66, 73, 69, 88, 128, 66, 66, - 85, 79, 80, 128, 66, 66, 85, 79, 88, 128, 66, 66, 85, 82, 88, 128, 66, - 69, 69, 84, 65, 128, 66, 69, 70, 79, 82, 197, 66, 69, 72, 69, 72, 128, - 66, 69, 73, 84, 72, 128, 66, 69, 78, 68, 69, 128, 66, 72, 69, 84, 72, - 128, 66, 73, 82, 71, 65, 128, 66, 73, 83, 65, 72, 128, 66, 73, 84, 73, - 78, 199, 66, 76, 65, 78, 75, 128, 66, 76, 79, 79, 68, 128, 66, 82, 65, - 67, 69, 128, 66, 82, 65, 78, 67, 200, 66, 82, 69, 65, 84, 200, 66, 82, - 85, 83, 72, 128, 66, 83, 84, 65, 82, 128, 66, 85, 76, 76, 69, 212, 67, - 65, 76, 89, 65, 128, 67, 65, 77, 78, 85, 195, 67, 65, 78, 67, 69, 204, - 67, 65, 85, 68, 65, 128, 67, 67, 72, 65, 65, 128, 67, 67, 72, 69, 69, - 128, 67, 69, 65, 76, 67, 128, 67, 69, 67, 69, 75, 128, 67, 69, 73, 82, - 84, 128, 67, 69, 82, 69, 83, 128, 67, 72, 65, 68, 65, 128, 67, 72, 65, - 73, 82, 128, 67, 72, 65, 78, 71, 128, 67, 72, 73, 78, 71, 128, 67, 72, - 79, 75, 69, 128, 67, 72, 85, 76, 65, 128, 67, 72, 85, 79, 80, 128, 67, - 72, 85, 79, 84, 128, 67, 72, 85, 79, 88, 128, 67, 72, 85, 82, 88, 128, - 67, 72, 89, 82, 88, 128, 67, 76, 79, 85, 68, 128, 67, 79, 69, 78, 71, - 128, 67, 79, 76, 79, 82, 128, 67, 79, 77, 69, 84, 128, 67, 79, 77, 73, - 78, 199, 67, 79, 77, 77, 79, 206, 67, 79, 86, 69, 82, 128, 67, 82, 69, - 68, 73, 212, 67, 82, 79, 73, 88, 128, 68, 65, 65, 83, 85, 128, 68, 65, - 69, 78, 71, 128, 68, 65, 73, 78, 71, 128, 68, 65, 76, 65, 84, 200, 68, - 65, 82, 65, 51, 128, 68, 65, 82, 65, 52, 128, 68, 65, 82, 71, 65, 128, - 68, 65, 86, 73, 68, 128, 68, 68, 68, 72, 65, 128, 68, 68, 73, 69, 80, - 128, 68, 68, 73, 69, 88, 128, 68, 68, 85, 79, 80, 128, 68, 68, 85, 79, - 88, 128, 68, 68, 85, 82, 88, 128, 68, 69, 76, 69, 84, 197, 68, 69, 82, - 69, 84, 128, 68, 69, 85, 78, 71, 128, 68, 72, 72, 69, 69, 128, 68, 72, - 72, 79, 79, 128, 68, 73, 70, 65, 84, 128, 68, 73, 80, 84, 69, 128, 68, - 73, 86, 73, 68, 197, 68, 79, 77, 65, 73, 206, 68, 79, 79, 78, 71, 128, - 68, 79, 85, 66, 84, 128, 68, 82, 73, 86, 69, 128, 68, 82, 79, 80, 83, - 128, 68, 85, 71, 85, 68, 128, 69, 65, 71, 76, 69, 128, 69, 69, 75, 65, - 65, 128, 69, 73, 71, 72, 84, 217, 69, 75, 65, 82, 65, 128, 69, 76, 69, - 86, 69, 206, 69, 76, 73, 70, 73, 128, 69, 78, 68, 69, 80, 128, 69, 78, - 84, 69, 82, 128, 69, 79, 76, 72, 88, 128, 69, 81, 85, 73, 68, 128, 69, - 83, 45, 84, 69, 128, 69, 83, 72, 49, 54, 128, 69, 83, 72, 50, 49, 128, - 69, 85, 45, 69, 85, 128, 69, 88, 73, 83, 84, 128, 70, 65, 65, 70, 85, - 128, 70, 65, 73, 72, 85, 128, 70, 69, 65, 82, 78, 128, 70, 69, 69, 78, - 71, 128, 70, 72, 84, 79, 82, 193, 70, 73, 69, 76, 68, 128, 70, 73, 70, - 84, 72, 128, 70, 73, 71, 72, 84, 128, 70, 73, 76, 76, 69, 196, 70, 73, - 78, 73, 84, 197, 70, 76, 79, 87, 69, 210, 70, 79, 76, 76, 89, 128, 70, - 79, 82, 67, 69, 128, 70, 79, 82, 84, 69, 128, 70, 82, 65, 77, 69, 128, - 70, 82, 69, 78, 67, 200, 70, 82, 79, 87, 78, 128, 71, 65, 65, 70, 85, - 128, 71, 65, 68, 79, 76, 128, 71, 65, 77, 65, 76, 128, 71, 65, 77, 76, - 65, 128, 71, 65, 78, 77, 65, 128, 71, 65, 82, 79, 78, 128, 71, 69, 78, - 84, 76, 197, 71, 69, 82, 69, 83, 200, 71, 69, 82, 77, 65, 206, 71, 71, - 73, 69, 80, 128, 71, 71, 73, 69, 88, 128, 71, 71, 85, 79, 80, 128, 71, - 71, 85, 79, 84, 128, 71, 71, 85, 79, 88, 128, 71, 71, 85, 82, 88, 128, - 71, 71, 87, 65, 65, 128, 71, 71, 87, 69, 69, 128, 71, 73, 68, 73, 77, - 128, 71, 73, 77, 69, 76, 128, 71, 73, 78, 73, 73, 128, 71, 73, 83, 65, - 76, 128, 71, 76, 69, 73, 67, 200, 71, 82, 65, 67, 69, 128, 71, 82, 65, - 73, 78, 128, 71, 82, 65, 83, 83, 128, 71, 85, 82, 85, 78, 128, 72, 45, - 84, 89, 80, 197, 72, 65, 45, 72, 65, 128, 72, 65, 65, 82, 85, 128, 72, - 65, 71, 76, 65, 218, 72, 65, 73, 84, 85, 128, 72, 65, 78, 68, 83, 128, - 72, 65, 84, 72, 73, 128, 72, 69, 65, 86, 69, 206, 72, 73, 68, 73, 78, - 199, 72, 76, 73, 69, 80, 128, 72, 76, 73, 69, 88, 128, 72, 76, 85, 79, - 80, 128, 72, 76, 85, 79, 88, 128, 72, 76, 85, 82, 88, 128, 72, 76, 89, - 82, 88, 128, 72, 77, 73, 69, 80, 128, 72, 77, 73, 69, 88, 128, 72, 77, - 85, 79, 80, 128, 72, 77, 85, 79, 88, 128, 72, 77, 85, 82, 88, 128, 72, - 77, 89, 82, 88, 128, 72, 78, 73, 69, 80, 128, 72, 78, 73, 69, 84, 128, - 72, 78, 73, 69, 88, 128, 72, 78, 85, 79, 88, 128, 72, 79, 79, 82, 85, - 128, 72, 79, 85, 83, 69, 128, 72, 85, 77, 65, 78, 128, 72, 85, 82, 65, - 78, 128, 72, 88, 73, 69, 80, 128, 72, 88, 73, 69, 84, 128, 72, 88, 73, - 69, 88, 128, 72, 88, 85, 79, 80, 128, 72, 88, 85, 79, 84, 128, 72, 88, - 85, 79, 88, 128, 72, 90, 90, 90, 71, 128, 73, 67, 72, 79, 85, 128, 73, - 71, 71, 87, 83, 128, 73, 76, 73, 77, 77, 213, 73, 77, 73, 78, 51, 128, - 73, 78, 78, 69, 82, 128, 73, 83, 65, 75, 73, 193, 74, 74, 73, 69, 80, - 128, 74, 74, 73, 69, 84, 128, 74, 74, 73, 69, 88, 128, 74, 74, 85, 79, - 80, 128, 74, 74, 85, 79, 88, 128, 74, 74, 85, 82, 88, 128, 74, 79, 75, - 69, 82, 128, 74, 79, 89, 79, 85, 211, 74, 85, 68, 71, 69, 128, 74, 85, - 69, 85, 73, 128, 75, 65, 65, 70, 85, 128, 75, 65, 73, 82, 73, 128, 75, - 65, 80, 65, 76, 128, 75, 65, 84, 65, 86, 193, 75, 65, 85, 78, 65, 128, - 75, 69, 69, 78, 71, 128, 75, 69, 69, 83, 85, 128, 75, 69, 72, 69, 72, - 128, 75, 69, 76, 86, 73, 206, 75, 69, 77, 80, 76, 201, 75, 69, 77, 80, - 85, 204, 75, 69, 78, 65, 84, 128, 75, 69, 83, 72, 50, 128, 75, 72, 65, - 78, 68, 193, 75, 72, 65, 80, 72, 128, 75, 72, 85, 65, 84, 128, 75, 72, - 87, 65, 73, 128, 75, 73, 83, 65, 76, 128, 75, 78, 73, 70, 69, 128, 75, - 79, 79, 80, 79, 128, 75, 85, 83, 77, 65, 128, 75, 88, 87, 65, 65, 128, - 75, 88, 87, 69, 69, 128, 76, 45, 84, 89, 80, 197, 76, 65, 65, 77, 85, - 128, 76, 65, 71, 85, 83, 128, 76, 65, 77, 66, 68, 193, 76, 65, 84, 73, - 75, 128, 76, 65, 85, 75, 65, 218, 76, 69, 77, 79, 73, 128, 76, 73, 66, - 82, 65, 128, 76, 73, 77, 73, 84, 128, 76, 73, 78, 69, 83, 128, 76, 73, - 81, 85, 73, 196, 76, 79, 84, 85, 83, 128, 76, 79, 85, 82, 69, 128, 77, - 65, 68, 68, 65, 128, 77, 65, 68, 68, 65, 200, 77, 65, 72, 72, 65, 128, - 77, 65, 73, 82, 85, 128, 77, 65, 78, 78, 65, 128, 77, 65, 78, 78, 65, - 218, 77, 65, 81, 65, 70, 128, 77, 65, 82, 67, 72, 128, 77, 65, 83, 79, - 82, 193, 77, 69, 69, 77, 85, 128, 77, 69, 73, 90, 73, 128, 77, 69, 76, - 79, 78, 128, 77, 69, 77, 66, 69, 210, 77, 69, 82, 75, 72, 193, 77, 69, - 84, 69, 71, 128, 77, 69, 90, 90, 79, 128, 77, 71, 66, 69, 69, 128, 77, - 71, 66, 79, 79, 128, 77, 71, 73, 69, 88, 128, 77, 71, 85, 79, 80, 128, - 77, 71, 85, 79, 88, 128, 77, 71, 85, 82, 88, 128, 77, 73, 75, 82, 73, - 128, 77, 73, 75, 82, 79, 206, 77, 73, 82, 69, 68, 128, 77, 73, 83, 82, - 65, 128, 77, 79, 68, 69, 76, 128, 77, 79, 68, 85, 76, 207, 77, 79, 78, - 84, 72, 128, 77, 79, 85, 78, 68, 128, 77, 85, 78, 65, 72, 128, 77, 85, - 83, 72, 51, 128, 77, 85, 83, 73, 67, 128, 78, 65, 71, 65, 82, 128, 78, - 65, 82, 82, 79, 215, 78, 65, 85, 68, 73, 218, 78, 65, 88, 73, 65, 206, - 78, 66, 73, 69, 80, 128, 78, 66, 73, 69, 88, 128, 78, 66, 85, 82, 88, - 128, 78, 66, 89, 82, 88, 128, 78, 68, 73, 69, 88, 128, 78, 68, 85, 82, - 88, 128, 78, 71, 65, 65, 73, 128, 78, 71, 71, 69, 69, 128, 78, 71, 71, - 69, 78, 128, 78, 71, 71, 79, 79, 128, 78, 71, 73, 69, 80, 128, 78, 71, - 73, 69, 88, 128, 78, 71, 79, 69, 72, 128, 78, 71, 85, 79, 84, 128, 78, - 71, 85, 79, 88, 128, 78, 73, 78, 69, 84, 217, 78, 73, 83, 65, 71, 128, - 78, 74, 73, 69, 80, 128, 78, 74, 73, 69, 84, 128, 78, 74, 73, 69, 88, - 128, 78, 74, 85, 79, 88, 128, 78, 74, 85, 82, 88, 128, 78, 74, 89, 82, - 88, 128, 78, 78, 71, 65, 65, 128, 78, 78, 71, 73, 73, 128, 78, 78, 71, - 79, 79, 128, 78, 79, 79, 78, 85, 128, 78, 79, 84, 84, 79, 128, 78, 82, - 85, 82, 88, 128, 78, 82, 89, 82, 88, 128, 78, 85, 77, 69, 82, 207, 78, - 89, 73, 69, 80, 128, 78, 89, 73, 69, 84, 128, 78, 89, 73, 69, 88, 128, - 78, 89, 85, 79, 80, 128, 78, 89, 85, 79, 88, 128, 78, 90, 73, 69, 80, - 128, 78, 90, 73, 69, 88, 128, 78, 90, 85, 79, 88, 128, 78, 90, 85, 82, - 88, 128, 78, 90, 89, 82, 88, 128, 79, 66, 74, 69, 67, 212, 79, 74, 69, - 79, 78, 128, 79, 75, 65, 82, 65, 128, 79, 76, 73, 86, 69, 128, 79, 78, - 75, 65, 82, 128, 79, 80, 84, 73, 79, 206, 79, 84, 72, 65, 76, 128, 79, - 85, 78, 75, 73, 193, 79, 88, 69, 73, 65, 201, 80, 65, 65, 84, 85, 128, - 80, 65, 78, 84, 73, 128, 80, 65, 83, 69, 81, 128, 80, 65, 83, 85, 81, - 128, 80, 65, 84, 65, 75, 128, 80, 65, 90, 69, 82, 128, 80, 69, 65, 67, - 69, 128, 80, 69, 69, 90, 73, 128, 80, 69, 72, 69, 72, 128, 80, 69, 73, - 84, 72, 128, 80, 69, 78, 83, 85, 128, 80, 69, 79, 82, 84, 200, 80, 69, - 80, 69, 84, 128, 80, 69, 82, 84, 72, 207, 80, 69, 83, 69, 84, 193, 80, - 69, 83, 72, 50, 128, 80, 72, 78, 65, 69, 203, 80, 72, 85, 78, 71, 128, - 80, 73, 65, 78, 79, 128, 80, 76, 85, 77, 69, 196, 80, 76, 85, 84, 79, - 128, 80, 79, 69, 84, 73, 195, 80, 79, 78, 68, 79, 128, 80, 82, 73, 78, - 84, 128, 80, 82, 79, 79, 70, 128, 80, 82, 79, 86, 69, 128, 81, 65, 65, - 70, 85, 128, 81, 65, 68, 77, 65, 128, 81, 65, 77, 65, 84, 211, 81, 65, - 82, 78, 69, 217, 81, 72, 87, 65, 65, 128, 81, 72, 87, 69, 69, 128, 82, - 45, 67, 82, 69, 197, 82, 65, 73, 68, 65, 128, 82, 65, 83, 72, 65, 128, - 82, 65, 83, 79, 85, 204, 82, 65, 84, 73, 79, 128, 82, 69, 67, 79, 82, - 196, 82, 69, 76, 65, 65, 128, 82, 69, 84, 85, 82, 206, 82, 69, 86, 73, - 65, 128, 82, 69, 86, 77, 65, 128, 82, 72, 79, 84, 73, 195, 82, 73, 67, - 69, 77, 128, 82, 73, 86, 69, 82, 128, 82, 78, 79, 79, 78, 128, 82, 79, - 66, 65, 84, 128, 82, 82, 85, 79, 88, 128, 82, 82, 85, 82, 88, 128, 82, - 82, 89, 82, 88, 128, 82, 85, 80, 73, 73, 128, 82, 87, 65, 72, 65, 128, - 83, 65, 68, 72, 69, 128, 83, 65, 70, 72, 65, 128, 83, 65, 77, 69, 75, - 200, 83, 65, 77, 75, 65, 128, 83, 65, 77, 89, 79, 203, 83, 65, 78, 65, - 72, 128, 83, 65, 85, 73, 76, 128, 83, 69, 69, 78, 85, 128, 83, 69, 73, - 83, 77, 193, 83, 69, 78, 84, 73, 128, 83, 72, 65, 66, 54, 128, 83, 72, - 69, 69, 78, 128, 83, 72, 69, 71, 57, 128, 83, 72, 69, 81, 69, 204, 83, - 72, 69, 86, 65, 128, 83, 72, 73, 73, 78, 128, 83, 72, 73, 84, 65, 128, - 83, 72, 79, 79, 84, 128, 83, 72, 79, 82, 84, 128, 83, 72, 85, 79, 80, - 128, 83, 72, 85, 79, 88, 128, 83, 72, 85, 82, 88, 128, 83, 72, 89, 82, - 88, 128, 83, 73, 88, 84, 72, 211, 83, 76, 65, 86, 69, 128, 83, 76, 73, - 67, 69, 128, 83, 76, 73, 78, 71, 128, 83, 76, 79, 80, 69, 128, 83, 77, - 69, 65, 82, 128, 83, 77, 73, 76, 69, 128, 83, 78, 65, 75, 69, 128, 83, - 78, 79, 85, 84, 128, 83, 79, 85, 78, 68, 128, 83, 79, 87, 73, 76, 207, - 83, 80, 73, 67, 69, 128, 83, 80, 79, 79, 78, 128, 83, 80, 85, 78, 71, - 211, 83, 81, 85, 73, 83, 200, 83, 83, 73, 69, 80, 128, 83, 83, 73, 69, - 88, 128, 83, 83, 89, 82, 88, 128, 83, 84, 65, 78, 68, 128, 83, 84, 65, - 82, 75, 128, 83, 84, 69, 65, 77, 128, 83, 84, 79, 78, 69, 128, 83, 84, - 79, 86, 69, 128, 83, 87, 69, 69, 84, 128, 83, 87, 79, 82, 68, 128, 83, - 89, 82, 77, 65, 128, 84, 65, 76, 69, 78, 212, 84, 65, 80, 69, 82, 128, - 84, 67, 72, 69, 72, 128, 84, 69, 71, 69, 72, 128, 84, 69, 73, 87, 83, - 128, 84, 69, 86, 73, 82, 128, 84, 72, 73, 71, 72, 128, 84, 72, 73, 82, - 68, 128, 84, 72, 73, 84, 65, 128, 84, 72, 79, 78, 71, 128, 84, 72, 85, - 78, 71, 128, 84, 72, 89, 79, 79, 205, 84, 73, 65, 82, 65, 128, 84, 73, - 78, 78, 69, 128, 84, 73, 80, 80, 73, 128, 84, 76, 72, 69, 69, 128, 84, - 82, 65, 67, 75, 128, 84, 82, 73, 84, 79, 211, 84, 82, 85, 84, 72, 128, - 84, 83, 69, 82, 69, 128, 84, 83, 72, 79, 79, 203, 84, 84, 83, 69, 69, - 128, 84, 84, 84, 72, 65, 128, 84, 85, 71, 82, 73, 203, 84, 85, 78, 78, - 89, 128, 84, 85, 82, 79, 50, 128, 84, 85, 85, 77, 85, 128, 84, 89, 80, - 69, 45, 177, 84, 89, 80, 69, 45, 178, 84, 89, 80, 69, 45, 179, 84, 89, - 80, 69, 45, 180, 84, 89, 80, 69, 45, 181, 84, 89, 80, 69, 45, 182, 84, - 89, 80, 69, 45, 183, 85, 68, 65, 65, 84, 128, 85, 75, 65, 82, 65, 128, - 85, 77, 66, 73, 78, 128, 85, 78, 73, 84, 89, 128, 85, 80, 87, 65, 82, - 196, 85, 83, 83, 85, 51, 128, 85, 84, 85, 75, 73, 128, 86, 65, 65, 86, - 85, 128, 86, 65, 83, 73, 83, 128, 86, 65, 84, 72, 89, 128, 86, 69, 67, - 84, 79, 210, 86, 69, 82, 71, 69, 128, 86, 69, 83, 84, 65, 128, 86, 73, - 82, 71, 65, 128, 86, 73, 82, 71, 79, 128, 86, 79, 76, 85, 77, 197, 86, - 90, 77, 69, 84, 128, 87, 65, 65, 86, 85, 128, 87, 65, 83, 76, 65, 128, - 87, 72, 69, 69, 76, 128, 87, 73, 78, 68, 85, 128, 87, 73, 78, 74, 65, - 128, 87, 82, 69, 65, 84, 200, 87, 82, 79, 78, 71, 128, 88, 69, 83, 84, - 69, 211, 89, 65, 45, 89, 79, 128, 89, 65, 65, 68, 79, 128, 89, 65, 65, - 82, 85, 128, 89, 65, 68, 68, 72, 128, 89, 65, 71, 72, 72, 128, 89, 65, - 75, 72, 72, 128, 89, 69, 79, 45, 79, 128, 89, 69, 79, 45, 85, 128, 89, - 69, 84, 73, 86, 128, 89, 73, 90, 69, 84, 128, 89, 85, 45, 69, 79, 128, - 90, 65, 82, 81, 65, 128, 90, 65, 89, 73, 78, 128, 90, 72, 65, 73, 78, - 128, 90, 72, 85, 79, 80, 128, 90, 72, 85, 79, 88, 128, 90, 72, 85, 82, - 88, 128, 90, 72, 89, 82, 88, 128, 90, 73, 76, 68, 69, 128, 90, 73, 78, - 79, 82, 128, 90, 85, 66, 85, 82, 128, 90, 89, 71, 79, 83, 128, 90, 90, - 73, 69, 80, 128, 90, 90, 73, 69, 88, 128, 90, 90, 85, 82, 88, 128, 90, - 90, 89, 82, 88, 128, 85, 80, 80, 69, 210, 82, 79, 77, 65, 206, 75, 65, - 89, 65, 200, 65, 76, 80, 72, 193, 83, 84, 79, 80, 128, 67, 72, 73, 75, - 201, 79, 77, 69, 71, 193, 79, 88, 73, 65, 128, 83, 72, 79, 82, 212, 90, - 69, 82, 79, 128, 78, 65, 71, 82, 201, 84, 73, 76, 68, 197, 83, 72, 69, - 69, 206, 71, 85, 78, 85, 128, 84, 69, 78, 85, 128, 76, 69, 70, 84, 128, - 78, 79, 82, 84, 200, 79, 71, 72, 65, 205, 86, 79, 67, 65, 204, 67, 85, - 82, 76, 217, 65, 84, 84, 73, 195, 83, 79, 85, 84, 200, 80, 79, 73, 78, - 212, 66, 69, 76, 79, 215, 66, 85, 72, 73, 196, 73, 79, 84, 65, 128, 82, - 69, 83, 84, 128, 84, 65, 67, 75, 128, 68, 65, 83, 72, 128, 68, 79, 87, - 78, 128, 75, 65, 82, 69, 206, 78, 45, 65, 82, 217, 83, 69, 86, 69, 206, - 68, 73, 83, 72, 128, 71, 72, 65, 73, 206, 83, 72, 69, 76, 204, 65, 67, - 85, 84, 197, 66, 69, 84, 65, 128, 66, 82, 69, 86, 197, 67, 79, 77, 77, - 193, 71, 82, 65, 86, 197, 75, 79, 69, 84, 128, 86, 65, 82, 73, 193, 67, - 85, 82, 76, 128, 68, 79, 84, 83, 128, 72, 65, 76, 70, 128, 76, 65, 71, - 65, 210, 90, 69, 84, 65, 128, 65, 76, 69, 70, 128, 67, 72, 69, 83, 211, - 70, 65, 82, 83, 201, 78, 85, 78, 85, 218, 84, 72, 69, 84, 193, 80, 76, - 85, 83, 128, 83, 79, 85, 78, 196, 85, 78, 73, 79, 206, 65, 84, 84, 65, - 203, 70, 79, 82, 84, 217, 76, 65, 82, 71, 197, 78, 79, 84, 69, 128, 84, - 65, 75, 52, 128, 84, 79, 78, 65, 204, 70, 73, 70, 84, 217, 73, 77, 65, - 71, 197, 75, 69, 72, 69, 200, 83, 72, 65, 68, 128, 65, 71, 79, 71, 201, - 69, 77, 80, 84, 217, 72, 69, 65, 82, 212, 83, 73, 71, 77, 193, 83, 85, - 73, 84, 128, 87, 73, 78, 68, 128, 70, 73, 76, 76, 128, 75, 65, 84, 79, - 128, 76, 79, 79, 80, 128, 83, 72, 73, 78, 128, 66, 69, 71, 73, 206, 67, - 65, 82, 69, 212, 70, 73, 82, 69, 128, 71, 73, 83, 72, 128, 72, 79, 82, - 73, 128, 75, 65, 80, 80, 193, 77, 79, 79, 78, 128, 83, 72, 69, 73, 128, - 83, 84, 69, 77, 128, 83, 85, 78, 71, 128, 84, 73, 67, 75, 128, 66, 65, - 67, 75, 128, 66, 65, 78, 50, 128, 67, 76, 69, 70, 128, 67, 82, 79, 83, - 211, 70, 65, 84, 72, 193, 70, 73, 82, 83, 212, 70, 73, 84, 65, 128, 71, - 82, 69, 65, 212, 77, 65, 68, 68, 193, 77, 85, 83, 72, 128, 78, 68, 79, - 76, 197, 81, 85, 65, 68, 128, 82, 79, 79, 84, 128, 82, 85, 80, 69, 197, - 83, 72, 65, 82, 208, 84, 67, 72, 69, 200, 84, 72, 69, 69, 128, 84, 72, - 73, 82, 196, 84, 83, 72, 65, 128, 84, 83, 72, 69, 199, 89, 65, 78, 71, - 128, 65, 76, 84, 65, 128, 66, 69, 72, 69, 200, 67, 72, 69, 67, 203, 67, - 82, 79, 80, 128, 68, 65, 77, 77, 193, 71, 65, 78, 50, 128, 71, 73, 82, - 50, 128, 72, 65, 78, 68, 128, 73, 90, 72, 69, 128, 74, 79, 73, 78, 128, - 75, 65, 68, 51, 128, 75, 65, 80, 65, 128, 75, 65, 83, 82, 193, 75, 72, - 69, 73, 128, 75, 87, 65, 65, 128, 77, 85, 83, 72, 179, 78, 71, 79, 69, - 200, 79, 66, 79, 76, 211, 80, 69, 72, 69, 200, 80, 73, 82, 73, 199, 82, - 65, 70, 69, 128, 82, 78, 79, 79, 206, 82, 84, 65, 71, 211, 83, 67, 72, - 87, 193, 83, 72, 73, 68, 128, 83, 72, 87, 69, 128, 84, 72, 65, 65, 128, - 84, 72, 79, 82, 206, 84, 85, 71, 50, 128, 86, 65, 78, 69, 128, 87, 65, - 86, 69, 128, 90, 72, 69, 69, 128, 65, 76, 76, 79, 128, 66, 73, 82, 68, - 128, 67, 65, 82, 73, 203, 67, 65, 82, 79, 206, 67, 67, 72, 69, 128, 67, - 72, 65, 82, 128, 67, 72, 73, 78, 128, 67, 72, 82, 79, 193, 67, 73, 69, - 85, 195, 67, 87, 65, 65, 128, 68, 69, 76, 84, 193, 70, 79, 79, 84, 128, - 71, 72, 65, 78, 128, 71, 79, 76, 68, 128, 71, 82, 65, 83, 211, 72, 65, - 84, 65, 198, 73, 69, 85, 78, 199, 74, 72, 65, 78, 128, 75, 69, 84, 84, - 201, 75, 72, 65, 82, 128, 76, 73, 83, 72, 128, 76, 76, 76, 65, 128, 76, - 85, 71, 65, 204, 77, 78, 65, 83, 128, 77, 85, 82, 68, 193, 77, 85, 83, - 73, 195, 77, 87, 65, 65, 128, 78, 65, 71, 65, 128, 78, 87, 65, 65, 128, - 79, 85, 84, 69, 210, 79, 88, 69, 73, 193, 80, 65, 80, 69, 210, 80, 69, - 68, 65, 204, 80, 72, 65, 82, 128, 80, 79, 76, 69, 128, 80, 82, 73, 77, - 197, 80, 87, 65, 65, 128, 83, 69, 69, 78, 128, 83, 72, 65, 51, 128, 83, - 72, 65, 82, 178, 83, 72, 69, 69, 128, 83, 72, 73, 84, 193, 83, 72, 87, - 65, 128, 83, 73, 76, 75, 128, 83, 73, 77, 65, 128, 83, 84, 65, 82, 212, - 83, 87, 65, 65, 128, 83, 87, 65, 83, 200, 84, 72, 73, 73, 128, 84, 72, - 79, 79, 128, 84, 82, 69, 69, 128, 84, 84, 72, 79, 128, 84, 87, 65, 65, - 128, 87, 73, 78, 69, 128, 89, 65, 71, 72, 128, 89, 65, 90, 72, 128, 89, - 73, 87, 78, 128, 89, 87, 65, 65, 128, 90, 65, 73, 78, 128, 90, 72, 65, - 82, 128, 45, 68, 90, 85, 196, 65, 76, 69, 85, 212, 65, 76, 70, 65, 128, - 65, 77, 65, 82, 128, 65, 80, 69, 83, 207, 65, 82, 71, 73, 128, 66, 66, - 85, 84, 128, 66, 69, 65, 84, 128, 66, 76, 65, 68, 197, 66, 76, 85, 69, - 128, 66, 79, 78, 69, 128, 66, 82, 79, 65, 196, 66, 82, 85, 83, 200, 66, - 85, 75, 89, 128, 66, 90, 85, 78, 199, 67, 65, 82, 84, 128, 67, 85, 79, - 80, 128, 67, 85, 82, 86, 197, 67, 87, 73, 73, 128, 67, 87, 79, 79, 128, - 68, 65, 76, 69, 212, 68, 65, 78, 71, 128, 68, 68, 85, 82, 128, 68, 69, - 69, 82, 128, 68, 73, 77, 50, 128, 68, 90, 72, 65, 128, 68, 90, 72, 69, - 128, 68, 90, 74, 69, 128, 68, 90, 87, 69, 128, 68, 90, 90, 69, 128, 69, - 65, 82, 84, 200, 69, 82, 65, 83, 197, 70, 69, 69, 68, 128, 70, 73, 83, - 72, 128, 70, 76, 65, 71, 128, 70, 76, 65, 84, 128, 70, 82, 79, 71, 128, - 70, 87, 65, 65, 128, 71, 65, 66, 65, 128, 71, 65, 84, 69, 128, 71, 67, - 73, 71, 128, 71, 71, 79, 80, 128, 71, 71, 85, 79, 128, 71, 72, 65, 68, - 128, 71, 72, 72, 65, 128, 71, 73, 77, 69, 204, 71, 79, 65, 76, 128, 71, - 82, 65, 67, 197, 71, 83, 85, 77, 128, 71, 85, 82, 55, 128, 71, 89, 65, - 83, 128, 71, 89, 79, 78, 128, 72, 65, 84, 69, 128, 72, 65, 86, 69, 128, - 72, 66, 65, 83, 193, 72, 69, 78, 71, 128, 72, 69, 82, 85, 128, 72, 72, - 65, 65, 128, 72, 73, 69, 85, 200, 72, 85, 66, 50, 128, 72, 88, 73, 84, - 128, 72, 88, 79, 80, 128, 72, 88, 85, 79, 128, 73, 77, 73, 78, 128, 74, - 65, 68, 69, 128, 74, 69, 69, 77, 128, 74, 72, 69, 72, 128, 74, 74, 73, - 69, 128, 74, 74, 85, 84, 128, 75, 65, 68, 50, 128, 75, 65, 68, 53, 128, - 75, 65, 75, 79, 128, 75, 72, 65, 72, 128, 75, 72, 65, 78, 199, 75, 72, - 72, 65, 128, 75, 78, 73, 70, 197, 75, 83, 83, 65, 128, 75, 87, 73, 73, - 128, 75, 87, 79, 79, 128, 76, 69, 65, 70, 128, 76, 69, 78, 71, 193, 76, - 73, 87, 78, 128, 76, 79, 78, 71, 193, 76, 79, 87, 45, 185, 76, 87, 65, - 65, 128, 76, 87, 73, 73, 128, 76, 87, 79, 79, 128, 77, 69, 65, 84, 128, - 77, 69, 69, 77, 128, 77, 69, 69, 84, 128, 77, 69, 83, 79, 128, 77, 73, - 69, 85, 205, 77, 73, 76, 76, 197, 77, 79, 85, 78, 196, 77, 87, 73, 73, - 128, 77, 87, 79, 79, 128, 78, 65, 77, 69, 128, 78, 65, 78, 65, 128, 78, - 66, 73, 69, 128, 78, 71, 71, 65, 128, 78, 73, 69, 85, 206, 78, 78, 78, - 65, 128, 78, 79, 68, 69, 128, 78, 89, 69, 69, 128, 78, 89, 73, 80, 128, - 78, 89, 79, 80, 128, 78, 90, 85, 80, 128, 80, 65, 87, 78, 128, 80, 73, - 69, 85, 208, 80, 73, 87, 82, 128, 80, 76, 65, 67, 197, 80, 79, 85, 78, - 196, 80, 87, 73, 73, 128, 80, 87, 79, 79, 128, 81, 85, 79, 84, 197, 82, - 65, 89, 83, 128, 82, 66, 65, 83, 193, 82, 73, 69, 85, 204, 82, 79, 79, - 75, 128, 82, 85, 77, 65, 201, 82, 87, 65, 65, 128, 83, 65, 68, 69, 128, - 83, 65, 76, 76, 193, 83, 65, 76, 84, 128, 83, 69, 65, 76, 128, 83, 72, - 65, 65, 128, 83, 72, 65, 84, 128, 83, 72, 72, 65, 128, 83, 72, 73, 70, - 212, 83, 72, 79, 71, 201, 83, 72, 79, 79, 128, 83, 72, 85, 82, 128, 83, - 72, 87, 73, 128, 83, 72, 87, 79, 128, 83, 73, 71, 52, 128, 83, 76, 85, - 82, 128, 83, 77, 65, 83, 200, 83, 78, 79, 85, 212, 83, 80, 65, 68, 197, - 83, 81, 85, 65, 212, 83, 84, 65, 70, 198, 83, 85, 75, 85, 206, 83, 87, - 73, 73, 128, 83, 87, 79, 79, 128, 84, 67, 72, 69, 128, 84, 69, 88, 84, - 128, 84, 72, 69, 82, 197, 84, 73, 77, 69, 128, 84, 73, 87, 78, 128, 84, - 76, 72, 65, 128, 84, 76, 72, 69, 128, 84, 76, 72, 73, 128, 84, 76, 72, - 79, 128, 84, 82, 85, 69, 128, 84, 83, 72, 69, 128, 84, 83, 83, 69, 128, - 84, 83, 87, 69, 128, 84, 87, 73, 73, 128, 84, 87, 79, 79, 128, 85, 78, - 68, 69, 210, 86, 69, 68, 69, 128, 86, 69, 78, 68, 128, 86, 73, 68, 65, - 128, 87, 65, 76, 75, 128, 87, 65, 83, 76, 193, 87, 65, 84, 69, 210, 87, - 72, 79, 76, 197, 87, 79, 79, 68, 128, 87, 79, 79, 76, 128, 87, 89, 78, - 78, 128, 89, 65, 75, 72, 128, 89, 65, 84, 73, 128, 89, 69, 82, 73, 128, - 89, 79, 45, 73, 128, 89, 79, 71, 72, 128, 89, 85, 45, 73, 128, 89, 87, - 73, 73, 128, 89, 87, 79, 79, 128, 90, 65, 81, 69, 198, 90, 65, 84, 65, - 128, 90, 72, 87, 69, 128, 90, 76, 65, 77, 193, 45, 67, 72, 65, 210, 65, - 68, 69, 71, 128, 65, 69, 83, 67, 128, 65, 70, 84, 69, 210, 65, 72, 65, - 68, 128, 65, 72, 83, 65, 128, 65, 73, 76, 77, 128, 65, 73, 78, 78, 128, - 65, 75, 65, 82, 193, 65, 75, 66, 65, 210, 65, 76, 71, 73, 218, 65, 76, - 76, 65, 200, 65, 76, 80, 65, 128, 65, 77, 80, 83, 128, 65, 78, 72, 85, - 128, 65, 78, 75, 72, 128, 65, 78, 83, 85, 218, 65, 80, 73, 78, 128, 65, - 82, 65, 68, 128, 65, 82, 77, 89, 128, 65, 83, 72, 57, 128, 65, 84, 78, - 65, 200, 65, 85, 78, 78, 128, 65, 89, 65, 72, 128, 66, 48, 49, 56, 128, - 66, 48, 49, 57, 128, 66, 48, 50, 50, 128, 66, 48, 51, 52, 128, 66, 48, - 52, 55, 128, 66, 48, 52, 57, 128, 66, 48, 53, 54, 128, 66, 48, 54, 51, - 128, 66, 48, 54, 52, 128, 66, 48, 55, 57, 128, 66, 48, 56, 50, 128, 66, - 48, 56, 51, 128, 66, 48, 56, 54, 128, 66, 48, 56, 57, 128, 66, 49, 48, - 53, 198, 66, 49, 48, 53, 205, 66, 49, 48, 54, 198, 66, 49, 48, 54, 205, - 66, 49, 48, 55, 198, 66, 49, 48, 55, 205, 66, 49, 48, 56, 198, 66, 49, - 48, 56, 205, 66, 49, 48, 57, 198, 66, 49, 48, 57, 205, 66, 49, 51, 50, - 128, 66, 49, 52, 50, 128, 66, 49, 52, 54, 128, 66, 49, 53, 48, 128, 66, - 49, 53, 50, 128, 66, 49, 53, 51, 128, 66, 49, 53, 52, 128, 66, 49, 53, - 53, 128, 66, 49, 53, 55, 128, 66, 49, 53, 56, 128, 66, 49, 54, 48, 128, - 66, 49, 54, 49, 128, 66, 49, 54, 52, 128, 66, 49, 54, 53, 128, 66, 49, - 54, 54, 128, 66, 49, 54, 55, 128, 66, 49, 54, 56, 128, 66, 49, 54, 57, - 128, 66, 49, 55, 48, 128, 66, 49, 55, 49, 128, 66, 49, 55, 50, 128, 66, - 49, 55, 52, 128, 66, 49, 55, 55, 128, 66, 49, 55, 56, 128, 66, 49, 55, - 57, 128, 66, 49, 56, 48, 128, 66, 49, 56, 49, 128, 66, 49, 56, 50, 128, - 66, 49, 56, 51, 128, 66, 49, 56, 52, 128, 66, 49, 56, 53, 128, 66, 49, - 56, 57, 128, 66, 49, 57, 48, 128, 66, 50, 48, 48, 128, 66, 50, 48, 49, - 128, 66, 50, 48, 50, 128, 66, 50, 48, 51, 128, 66, 50, 48, 52, 128, 66, - 50, 48, 53, 128, 66, 50, 48, 54, 128, 66, 50, 48, 55, 128, 66, 50, 48, - 56, 128, 66, 50, 48, 57, 128, 66, 50, 49, 48, 128, 66, 50, 49, 49, 128, - 66, 50, 49, 50, 128, 66, 50, 49, 51, 128, 66, 50, 49, 52, 128, 66, 50, - 49, 53, 128, 66, 50, 49, 54, 128, 66, 50, 49, 55, 128, 66, 50, 49, 56, - 128, 66, 50, 49, 57, 128, 66, 50, 50, 49, 128, 66, 50, 50, 50, 128, 66, - 50, 50, 54, 128, 66, 50, 50, 55, 128, 66, 50, 50, 56, 128, 66, 50, 50, - 57, 128, 66, 50, 51, 50, 128, 66, 50, 51, 52, 128, 66, 50, 51, 54, 128, - 66, 50, 52, 53, 128, 66, 50, 52, 54, 128, 66, 50, 52, 56, 128, 66, 50, - 52, 57, 128, 66, 50, 53, 48, 128, 66, 50, 53, 49, 128, 66, 50, 53, 50, - 128, 66, 50, 53, 51, 128, 66, 50, 53, 53, 128, 66, 50, 53, 54, 128, 66, - 50, 53, 55, 128, 66, 50, 53, 56, 128, 66, 50, 53, 57, 128, 66, 51, 48, - 53, 128, 66, 65, 71, 51, 128, 66, 65, 71, 65, 128, 66, 65, 72, 84, 128, - 66, 65, 78, 68, 128, 66, 65, 82, 83, 128, 66, 65, 83, 69, 128, 66, 66, - 65, 80, 128, 66, 66, 65, 84, 128, 66, 66, 65, 88, 128, 66, 66, 69, 80, - 128, 66, 66, 69, 88, 128, 66, 66, 73, 69, 128, 66, 66, 73, 80, 128, 66, - 66, 73, 84, 128, 66, 66, 73, 88, 128, 66, 66, 79, 80, 128, 66, 66, 79, - 84, 128, 66, 66, 79, 88, 128, 66, 66, 85, 79, 128, 66, 66, 85, 80, 128, - 66, 66, 85, 82, 128, 66, 66, 85, 88, 128, 66, 66, 89, 80, 128, 66, 66, - 89, 84, 128, 66, 66, 89, 88, 128, 66, 67, 65, 68, 128, 66, 69, 65, 78, - 128, 66, 69, 69, 72, 128, 66, 69, 76, 76, 128, 66, 69, 76, 84, 128, 66, - 69, 78, 68, 128, 66, 69, 79, 82, 195, 66, 69, 84, 72, 128, 66, 72, 69, - 69, 128, 66, 72, 79, 79, 128, 66, 73, 82, 85, 128, 66, 76, 65, 78, 203, - 66, 79, 65, 82, 128, 66, 79, 65, 84, 128, 66, 79, 68, 89, 128, 66, 83, - 68, 85, 211, 66, 83, 75, 65, 173, 66, 83, 75, 85, 210, 66, 85, 76, 76, - 128, 66, 85, 76, 76, 211, 66, 85, 76, 85, 199, 66, 85, 77, 80, 217, 66, - 85, 82, 50, 128, 66, 87, 69, 69, 128, 67, 45, 49, 56, 128, 67, 45, 51, - 57, 128, 67, 65, 65, 73, 128, 67, 65, 76, 67, 128, 67, 65, 76, 76, 128, - 67, 65, 76, 89, 193, 67, 65, 80, 79, 128, 67, 65, 86, 69, 128, 67, 65, - 89, 78, 128, 67, 67, 65, 65, 128, 67, 67, 69, 69, 128, 67, 67, 72, 65, - 128, 67, 67, 72, 73, 128, 67, 67, 72, 79, 128, 67, 67, 72, 85, 128, 67, - 72, 65, 78, 128, 67, 72, 65, 80, 128, 67, 72, 65, 84, 128, 67, 72, 65, - 88, 128, 67, 72, 69, 80, 128, 67, 72, 69, 84, 128, 67, 72, 69, 88, 128, - 67, 72, 72, 65, 128, 67, 72, 79, 65, 128, 67, 72, 79, 69, 128, 67, 72, - 79, 80, 128, 67, 72, 79, 84, 128, 67, 72, 79, 88, 128, 67, 72, 85, 79, - 128, 67, 72, 85, 80, 128, 67, 72, 85, 82, 128, 67, 72, 85, 88, 128, 67, - 72, 89, 80, 128, 67, 72, 89, 82, 128, 67, 72, 89, 84, 128, 67, 72, 89, - 88, 128, 67, 73, 69, 80, 128, 67, 73, 69, 84, 128, 67, 73, 69, 88, 128, - 67, 76, 65, 78, 128, 67, 76, 65, 87, 128, 67, 76, 69, 65, 210, 67, 76, - 79, 83, 197, 67, 76, 85, 66, 128, 67, 79, 68, 65, 128, 67, 79, 76, 76, - 128, 67, 79, 77, 66, 128, 67, 79, 80, 89, 128, 67, 85, 79, 88, 128, 67, - 85, 82, 88, 128, 67, 89, 82, 88, 128, 68, 65, 71, 65, 218, 68, 65, 71, - 83, 128, 68, 65, 73, 82, 128, 68, 65, 77, 80, 128, 68, 65, 82, 84, 128, - 68, 68, 65, 65, 128, 68, 68, 65, 76, 128, 68, 68, 65, 80, 128, 68, 68, - 65, 84, 128, 68, 68, 65, 88, 128, 68, 68, 68, 65, 128, 68, 68, 69, 69, - 128, 68, 68, 69, 80, 128, 68, 68, 69, 88, 128, 68, 68, 72, 79, 128, 68, - 68, 73, 69, 128, 68, 68, 73, 80, 128, 68, 68, 73, 84, 128, 68, 68, 73, - 88, 128, 68, 68, 79, 65, 128, 68, 68, 79, 80, 128, 68, 68, 79, 84, 128, - 68, 68, 79, 88, 128, 68, 68, 85, 79, 128, 68, 68, 85, 80, 128, 68, 68, - 85, 84, 128, 68, 68, 85, 88, 128, 68, 68, 87, 65, 128, 68, 69, 65, 68, - 128, 68, 69, 66, 73, 212, 68, 69, 69, 76, 128, 68, 69, 72, 73, 128, 68, - 69, 75, 65, 128, 68, 69, 76, 84, 128, 68, 69, 78, 71, 128, 68, 69, 83, - 73, 128, 68, 72, 65, 76, 128, 68, 72, 69, 69, 128, 68, 72, 72, 65, 128, - 68, 72, 72, 69, 128, 68, 72, 72, 73, 128, 68, 72, 72, 79, 128, 68, 72, - 72, 85, 128, 68, 72, 79, 79, 128, 68, 73, 80, 76, 201, 68, 73, 84, 84, - 207, 68, 75, 65, 82, 128, 68, 76, 69, 69, 128, 68, 79, 45, 79, 128, 68, - 79, 73, 84, 128, 68, 79, 78, 71, 128, 68, 79, 79, 82, 128, 68, 79, 82, - 85, 128, 68, 79, 86, 69, 128, 68, 82, 85, 77, 128, 68, 85, 66, 50, 128, - 68, 85, 78, 51, 128, 68, 85, 78, 52, 128, 68, 85, 82, 50, 128, 68, 89, - 69, 72, 128, 68, 90, 69, 69, 128, 69, 65, 82, 76, 217, 69, 68, 73, 78, - 128, 69, 71, 73, 82, 128, 69, 72, 87, 65, 218, 69, 74, 69, 67, 212, 69, - 78, 84, 69, 210, 69, 84, 72, 69, 204, 69, 85, 45, 85, 128, 69, 85, 76, - 69, 210, 69, 90, 69, 78, 128, 70, 65, 65, 73, 128, 70, 65, 78, 71, 128, - 70, 76, 73, 80, 128, 70, 79, 82, 77, 211, 70, 82, 65, 78, 195, 70, 85, - 82, 88, 128, 70, 85, 83, 69, 128, 70, 87, 69, 69, 128, 71, 65, 77, 65, - 204, 71, 65, 77, 76, 128, 71, 65, 82, 51, 128, 71, 66, 69, 78, 128, 71, - 66, 79, 78, 128, 71, 68, 65, 78, 128, 71, 69, 65, 82, 128, 71, 69, 68, - 69, 128, 71, 71, 65, 65, 128, 71, 71, 65, 80, 128, 71, 71, 65, 84, 128, - 71, 71, 65, 88, 128, 71, 71, 69, 80, 128, 71, 71, 69, 84, 128, 71, 71, - 69, 88, 128, 71, 71, 73, 69, 128, 71, 71, 73, 84, 128, 71, 71, 73, 88, - 128, 71, 71, 79, 84, 128, 71, 71, 79, 88, 128, 71, 71, 85, 80, 128, 71, - 71, 85, 82, 128, 71, 71, 85, 84, 128, 71, 71, 85, 88, 128, 71, 71, 87, - 65, 128, 71, 71, 87, 69, 128, 71, 71, 87, 73, 128, 71, 72, 69, 69, 128, - 71, 72, 87, 65, 128, 71, 73, 66, 65, 128, 71, 73, 69, 84, 128, 71, 73, - 71, 65, 128, 71, 73, 82, 51, 128, 71, 79, 73, 78, 199, 71, 79, 78, 71, - 128, 71, 79, 82, 65, 128, 71, 79, 82, 84, 128, 71, 82, 69, 69, 206, 71, - 85, 69, 72, 128, 71, 89, 65, 65, 128, 71, 89, 69, 69, 128, 72, 65, 69, - 71, 204, 72, 65, 71, 76, 128, 72, 65, 83, 69, 210, 72, 69, 77, 80, 128, - 72, 72, 87, 65, 128, 72, 73, 68, 69, 128, 72, 73, 69, 88, 128, 72, 73, - 90, 66, 128, 72, 76, 65, 80, 128, 72, 76, 65, 84, 128, 72, 76, 65, 88, - 128, 72, 76, 69, 80, 128, 72, 76, 69, 88, 128, 72, 76, 73, 69, 128, 72, - 76, 73, 80, 128, 72, 76, 73, 84, 128, 72, 76, 73, 88, 128, 72, 76, 79, - 80, 128, 72, 76, 79, 88, 128, 72, 76, 85, 79, 128, 72, 76, 85, 80, 128, - 72, 76, 85, 82, 128, 72, 76, 85, 84, 128, 72, 76, 85, 88, 128, 72, 76, - 89, 80, 128, 72, 76, 89, 82, 128, 72, 76, 89, 84, 128, 72, 76, 89, 88, - 128, 72, 77, 65, 80, 128, 72, 77, 65, 84, 128, 72, 77, 65, 88, 128, 72, - 77, 73, 69, 128, 72, 77, 73, 80, 128, 72, 77, 73, 84, 128, 72, 77, 73, - 88, 128, 72, 77, 79, 80, 128, 72, 77, 79, 84, 128, 72, 77, 79, 88, 128, - 72, 77, 85, 79, 128, 72, 77, 85, 80, 128, 72, 77, 85, 82, 128, 72, 77, - 85, 84, 128, 72, 77, 85, 88, 128, 72, 77, 89, 80, 128, 72, 77, 89, 82, - 128, 72, 77, 89, 88, 128, 72, 78, 65, 80, 128, 72, 78, 65, 84, 128, 72, - 78, 65, 88, 128, 72, 78, 69, 80, 128, 72, 78, 69, 88, 128, 72, 78, 73, - 69, 128, 72, 78, 73, 80, 128, 72, 78, 73, 84, 128, 72, 78, 73, 88, 128, - 72, 78, 79, 80, 128, 72, 78, 79, 84, 128, 72, 78, 79, 88, 128, 72, 78, - 85, 79, 128, 72, 78, 85, 84, 128, 72, 79, 76, 65, 205, 72, 79, 79, 78, - 128, 72, 79, 84, 65, 128, 72, 80, 87, 71, 128, 72, 85, 76, 50, 128, 72, - 85, 77, 65, 206, 72, 88, 65, 80, 128, 72, 88, 65, 84, 128, 72, 88, 65, - 88, 128, 72, 88, 69, 80, 128, 72, 88, 69, 88, 128, 72, 88, 73, 69, 128, - 72, 88, 73, 80, 128, 72, 88, 73, 88, 128, 72, 88, 79, 84, 128, 72, 88, - 79, 88, 128, 72, 88, 87, 71, 128, 72, 90, 87, 71, 128, 72, 90, 90, 80, - 128, 72, 90, 90, 90, 128, 73, 45, 69, 85, 128, 73, 45, 89, 65, 128, 73, - 68, 76, 69, 128, 73, 70, 73, 78, 128, 73, 75, 65, 82, 193, 73, 76, 85, - 84, 128, 73, 76, 85, 89, 128, 73, 78, 67, 72, 128, 73, 78, 78, 69, 210, - 73, 78, 78, 78, 128, 73, 78, 84, 73, 128, 73, 83, 79, 78, 128, 73, 84, - 69, 77, 128, 73, 85, 74, 65, 128, 74, 69, 82, 65, 128, 74, 69, 82, 65, - 206, 74, 74, 69, 69, 128, 74, 74, 73, 80, 128, 74, 74, 73, 84, 128, 74, - 74, 73, 88, 128, 74, 74, 79, 80, 128, 74, 74, 79, 84, 128, 74, 74, 79, - 88, 128, 74, 74, 85, 79, 128, 74, 74, 85, 80, 128, 74, 74, 85, 82, 128, - 74, 74, 85, 88, 128, 74, 74, 89, 80, 128, 74, 74, 89, 84, 128, 74, 74, - 89, 88, 128, 74, 79, 78, 71, 128, 74, 85, 76, 89, 128, 74, 85, 78, 69, - 128, 74, 85, 78, 79, 128, 74, 85, 79, 84, 128, 75, 65, 65, 70, 128, 75, - 65, 65, 73, 128, 75, 65, 68, 52, 128, 75, 65, 77, 50, 128, 75, 65, 77, - 52, 128, 75, 65, 78, 71, 128, 75, 65, 80, 72, 128, 75, 65, 80, 79, 128, - 75, 67, 65, 76, 128, 75, 72, 65, 65, 128, 75, 72, 65, 73, 128, 75, 72, - 65, 78, 128, 75, 72, 69, 69, 128, 75, 72, 79, 78, 128, 75, 73, 67, 75, - 128, 75, 73, 69, 80, 128, 75, 73, 69, 88, 128, 75, 73, 82, 79, 128, 75, - 73, 83, 72, 128, 75, 75, 69, 69, 128, 75, 79, 77, 66, 213, 75, 79, 84, - 79, 128, 75, 80, 65, 78, 128, 75, 80, 69, 69, 128, 75, 80, 69, 78, 128, - 75, 80, 79, 79, 128, 75, 85, 78, 71, 128, 75, 85, 79, 80, 128, 75, 85, - 79, 88, 128, 75, 85, 82, 84, 128, 75, 85, 82, 88, 128, 75, 85, 85, 72, - 128, 75, 87, 69, 69, 128, 75, 88, 65, 65, 128, 75, 88, 69, 69, 128, 75, - 88, 87, 65, 128, 75, 88, 87, 69, 128, 75, 88, 87, 73, 128, 75, 89, 65, - 65, 128, 75, 89, 69, 69, 128, 76, 65, 65, 73, 128, 76, 65, 65, 78, 128, - 76, 65, 67, 65, 128, 76, 65, 69, 86, 128, 76, 65, 77, 68, 128, 76, 65, - 77, 69, 128, 76, 65, 77, 69, 196, 76, 68, 65, 78, 128, 76, 69, 69, 75, - 128, 76, 69, 71, 83, 128, 76, 69, 86, 69, 204, 76, 69, 90, 72, 128, 76, - 72, 65, 65, 128, 76, 72, 73, 73, 128, 76, 72, 79, 79, 128, 76, 73, 69, - 84, 128, 76, 73, 70, 69, 128, 76, 73, 76, 89, 128, 76, 73, 84, 82, 193, - 76, 79, 76, 76, 128, 76, 79, 79, 84, 128, 76, 85, 73, 83, 128, 76, 85, - 79, 84, 128, 77, 65, 65, 73, 128, 77, 65, 68, 85, 128, 77, 65, 82, 69, - 128, 77, 66, 69, 69, 128, 77, 69, 82, 73, 128, 77, 69, 83, 72, 128, 77, - 69, 83, 73, 128, 77, 71, 65, 80, 128, 77, 71, 65, 84, 128, 77, 71, 65, - 88, 128, 77, 71, 66, 65, 128, 77, 71, 66, 69, 128, 77, 71, 66, 73, 128, - 77, 71, 66, 79, 128, 77, 71, 66, 85, 128, 77, 71, 69, 80, 128, 77, 71, - 69, 88, 128, 77, 71, 73, 69, 128, 77, 71, 79, 80, 128, 77, 71, 79, 84, - 128, 77, 71, 79, 88, 128, 77, 71, 85, 79, 128, 77, 71, 85, 80, 128, 77, - 71, 85, 82, 128, 77, 71, 85, 84, 128, 77, 71, 85, 88, 128, 77, 73, 67, - 82, 207, 77, 73, 73, 78, 128, 77, 73, 77, 69, 128, 77, 73, 78, 89, 128, - 77, 73, 82, 73, 128, 77, 78, 89, 65, 205, 77, 79, 78, 84, 200, 77, 79, - 85, 84, 200, 77, 79, 86, 69, 196, 77, 85, 73, 78, 128, 77, 85, 76, 84, - 201, 77, 85, 79, 84, 128, 77, 87, 69, 69, 128, 78, 65, 65, 73, 128, 78, - 65, 73, 82, 193, 78, 65, 77, 50, 128, 78, 65, 78, 68, 128, 78, 66, 65, - 80, 128, 78, 66, 65, 84, 128, 78, 66, 65, 88, 128, 78, 66, 73, 80, 128, - 78, 66, 73, 84, 128, 78, 66, 73, 88, 128, 78, 66, 79, 80, 128, 78, 66, - 79, 84, 128, 78, 66, 79, 88, 128, 78, 66, 85, 80, 128, 78, 66, 85, 82, - 128, 78, 66, 85, 84, 128, 78, 66, 85, 88, 128, 78, 66, 89, 80, 128, 78, - 66, 89, 82, 128, 78, 66, 89, 84, 128, 78, 66, 89, 88, 128, 78, 68, 65, - 80, 128, 78, 68, 65, 84, 128, 78, 68, 65, 88, 128, 78, 68, 69, 69, 128, - 78, 68, 73, 69, 128, 78, 68, 73, 80, 128, 78, 68, 73, 84, 128, 78, 68, - 73, 88, 128, 78, 68, 79, 79, 128, 78, 68, 79, 80, 128, 78, 68, 79, 84, - 128, 78, 68, 79, 88, 128, 78, 68, 85, 80, 128, 78, 68, 85, 82, 128, 78, - 68, 85, 84, 128, 78, 68, 85, 88, 128, 78, 71, 65, 73, 128, 78, 71, 65, - 78, 128, 78, 71, 65, 80, 128, 78, 71, 65, 84, 128, 78, 71, 65, 88, 128, - 78, 71, 69, 78, 128, 78, 71, 69, 80, 128, 78, 71, 69, 88, 128, 78, 71, - 71, 69, 128, 78, 71, 71, 73, 128, 78, 71, 71, 79, 128, 78, 71, 71, 85, - 128, 78, 71, 73, 69, 128, 78, 71, 75, 65, 128, 78, 71, 79, 78, 128, 78, - 71, 79, 80, 128, 78, 71, 79, 84, 128, 78, 71, 79, 88, 128, 78, 71, 85, - 79, 128, 78, 72, 74, 65, 128, 78, 72, 85, 69, 128, 78, 74, 69, 69, 128, - 78, 74, 73, 69, 128, 78, 74, 73, 80, 128, 78, 74, 73, 84, 128, 78, 74, - 73, 88, 128, 78, 74, 79, 79, 128, 78, 74, 79, 80, 128, 78, 74, 79, 84, - 128, 78, 74, 79, 88, 128, 78, 74, 85, 79, 128, 78, 74, 85, 80, 128, 78, - 74, 85, 82, 128, 78, 74, 85, 88, 128, 78, 74, 89, 80, 128, 78, 74, 89, - 82, 128, 78, 74, 89, 84, 128, 78, 74, 89, 88, 128, 78, 78, 71, 65, 128, - 78, 78, 71, 73, 128, 78, 78, 71, 79, 128, 78, 79, 83, 69, 128, 78, 82, - 65, 80, 128, 78, 82, 65, 84, 128, 78, 82, 65, 88, 128, 78, 82, 69, 80, - 128, 78, 82, 69, 84, 128, 78, 82, 69, 88, 128, 78, 82, 79, 80, 128, 78, - 82, 79, 88, 128, 78, 82, 85, 80, 128, 78, 82, 85, 82, 128, 78, 82, 85, - 84, 128, 78, 82, 85, 88, 128, 78, 82, 89, 80, 128, 78, 82, 89, 82, 128, - 78, 82, 89, 84, 128, 78, 82, 89, 88, 128, 78, 85, 49, 49, 128, 78, 85, - 76, 76, 128, 78, 85, 79, 80, 128, 78, 85, 82, 88, 128, 78, 85, 85, 78, - 128, 78, 89, 65, 65, 128, 78, 89, 67, 65, 128, 78, 89, 69, 72, 128, 78, - 89, 73, 69, 128, 78, 89, 73, 84, 128, 78, 89, 73, 88, 128, 78, 89, 74, - 65, 128, 78, 89, 79, 65, 128, 78, 89, 79, 79, 128, 78, 89, 79, 84, 128, - 78, 89, 79, 88, 128, 78, 89, 85, 79, 128, 78, 89, 85, 80, 128, 78, 89, - 85, 84, 128, 78, 89, 85, 88, 128, 78, 89, 87, 65, 128, 78, 90, 65, 80, - 128, 78, 90, 65, 84, 128, 78, 90, 65, 88, 128, 78, 90, 69, 88, 128, 78, - 90, 73, 69, 128, 78, 90, 73, 80, 128, 78, 90, 73, 84, 128, 78, 90, 73, - 88, 128, 78, 90, 79, 80, 128, 78, 90, 79, 88, 128, 78, 90, 85, 79, 128, - 78, 90, 85, 82, 128, 78, 90, 85, 88, 128, 78, 90, 89, 80, 128, 78, 90, - 89, 82, 128, 78, 90, 89, 84, 128, 78, 90, 89, 88, 128, 79, 45, 69, 79, - 128, 79, 45, 89, 69, 128, 79, 75, 65, 82, 193, 79, 78, 83, 85, 128, 79, - 79, 77, 85, 128, 79, 79, 90, 69, 128, 79, 85, 78, 67, 197, 80, 65, 65, - 73, 128, 80, 65, 68, 77, 193, 80, 65, 78, 71, 128, 80, 65, 82, 65, 128, - 80, 69, 65, 67, 197, 80, 69, 69, 80, 128, 80, 69, 78, 78, 217, 80, 69, - 80, 69, 212, 80, 69, 83, 79, 128, 80, 72, 65, 65, 128, 80, 72, 65, 78, - 128, 80, 72, 69, 69, 128, 80, 72, 79, 65, 128, 80, 72, 87, 65, 128, 80, - 73, 67, 75, 128, 80, 73, 69, 80, 128, 80, 73, 69, 88, 128, 80, 73, 75, - 79, 128, 80, 76, 65, 75, 128, 80, 76, 65, 78, 197, 80, 76, 79, 87, 128, - 80, 76, 85, 75, 128, 80, 76, 85, 77, 128, 80, 82, 65, 77, 128, 80, 82, - 73, 78, 212, 80, 85, 78, 71, 128, 80, 85, 79, 80, 128, 80, 85, 79, 88, - 128, 80, 85, 82, 88, 128, 80, 87, 69, 69, 128, 80, 89, 82, 88, 128, 81, - 65, 65, 70, 128, 81, 65, 65, 73, 128, 81, 65, 80, 72, 128, 81, 72, 65, - 65, 128, 81, 72, 69, 69, 128, 81, 72, 87, 65, 128, 81, 72, 87, 69, 128, - 81, 72, 87, 73, 128, 81, 73, 69, 80, 128, 81, 73, 69, 84, 128, 81, 73, - 69, 88, 128, 81, 79, 80, 65, 128, 81, 85, 79, 80, 128, 81, 85, 79, 84, - 128, 81, 85, 79, 88, 128, 81, 85, 82, 88, 128, 81, 85, 85, 86, 128, 81, - 87, 65, 65, 128, 81, 87, 69, 69, 128, 81, 89, 65, 65, 128, 81, 89, 69, - 69, 128, 81, 89, 82, 88, 128, 82, 65, 65, 73, 128, 82, 65, 73, 68, 207, - 82, 65, 78, 71, 197, 82, 69, 77, 85, 128, 82, 73, 67, 69, 128, 82, 73, - 69, 76, 128, 82, 73, 82, 65, 128, 82, 79, 65, 82, 128, 82, 79, 83, 72, - 128, 82, 82, 65, 88, 128, 82, 82, 69, 72, 128, 82, 82, 69, 80, 128, 82, - 82, 69, 84, 128, 82, 82, 69, 88, 128, 82, 82, 79, 80, 128, 82, 82, 79, - 84, 128, 82, 82, 79, 88, 128, 82, 82, 85, 79, 128, 82, 82, 85, 80, 128, - 82, 82, 85, 82, 128, 82, 82, 85, 84, 128, 82, 82, 85, 88, 128, 82, 82, - 89, 80, 128, 82, 82, 89, 82, 128, 82, 82, 89, 84, 128, 82, 82, 89, 88, - 128, 82, 85, 73, 83, 128, 82, 85, 76, 69, 128, 82, 85, 79, 80, 128, 82, - 85, 83, 73, 128, 83, 65, 45, 73, 128, 83, 65, 65, 73, 128, 83, 65, 71, - 65, 128, 83, 65, 73, 76, 128, 83, 65, 76, 65, 128, 83, 65, 76, 65, 205, - 83, 65, 80, 65, 128, 83, 65, 82, 73, 128, 83, 66, 82, 85, 204, 83, 67, - 87, 65, 128, 83, 68, 79, 78, 199, 83, 69, 77, 75, 128, 83, 72, 65, 54, - 128, 83, 72, 65, 80, 128, 83, 72, 65, 82, 213, 83, 72, 65, 88, 128, 83, - 72, 69, 78, 128, 83, 72, 69, 80, 128, 83, 72, 69, 84, 128, 83, 72, 69, - 88, 128, 83, 72, 73, 73, 128, 83, 72, 73, 77, 128, 83, 72, 73, 77, 193, - 83, 72, 73, 82, 128, 83, 72, 79, 65, 128, 83, 72, 79, 84, 128, 83, 72, - 79, 88, 128, 83, 72, 85, 79, 128, 83, 72, 85, 80, 128, 83, 72, 85, 84, - 128, 83, 72, 85, 88, 128, 83, 72, 89, 65, 128, 83, 72, 89, 80, 128, 83, - 72, 89, 82, 128, 83, 72, 89, 84, 128, 83, 72, 89, 88, 128, 83, 73, 71, - 69, 204, 83, 73, 75, 50, 128, 83, 73, 75, 73, 128, 83, 73, 88, 84, 217, - 83, 75, 73, 78, 128, 83, 75, 85, 76, 204, 83, 75, 87, 65, 128, 83, 78, - 65, 75, 197, 83, 80, 79, 84, 128, 83, 80, 87, 65, 128, 83, 83, 65, 65, - 128, 83, 83, 65, 80, 128, 83, 83, 65, 84, 128, 83, 83, 65, 88, 128, 83, - 83, 69, 69, 128, 83, 83, 69, 80, 128, 83, 83, 69, 88, 128, 83, 83, 73, - 69, 128, 83, 83, 73, 80, 128, 83, 83, 73, 84, 128, 83, 83, 73, 88, 128, - 83, 83, 79, 80, 128, 83, 83, 79, 84, 128, 83, 83, 79, 88, 128, 83, 83, - 85, 80, 128, 83, 83, 85, 84, 128, 83, 83, 85, 88, 128, 83, 83, 89, 80, - 128, 83, 83, 89, 82, 128, 83, 83, 89, 84, 128, 83, 83, 89, 88, 128, 83, - 84, 65, 78, 128, 83, 84, 69, 80, 128, 83, 84, 73, 76, 197, 83, 84, 73, - 76, 204, 83, 84, 87, 65, 128, 83, 85, 68, 50, 128, 83, 85, 75, 85, 128, - 83, 85, 79, 80, 128, 83, 85, 79, 88, 128, 83, 85, 82, 57, 128, 83, 85, - 82, 88, 128, 83, 87, 85, 78, 199, 83, 90, 65, 65, 128, 83, 90, 69, 69, - 128, 83, 90, 87, 65, 128, 83, 90, 87, 71, 128, 84, 65, 65, 73, 128, 84, - 65, 75, 69, 128, 84, 65, 76, 76, 128, 84, 69, 45, 85, 128, 84, 69, 78, - 84, 128, 84, 69, 84, 72, 128, 84, 72, 69, 72, 128, 84, 72, 69, 77, 193, - 84, 72, 69, 89, 128, 84, 72, 79, 65, 128, 84, 72, 85, 82, 211, 84, 72, - 87, 65, 128, 84, 73, 69, 80, 128, 84, 73, 69, 88, 128, 84, 73, 71, 72, - 212, 84, 73, 78, 89, 128, 84, 73, 87, 65, 218, 84, 76, 69, 69, 128, 84, - 76, 72, 85, 128, 84, 79, 78, 71, 128, 84, 79, 84, 65, 204, 84, 82, 65, - 68, 197, 84, 82, 73, 79, 206, 84, 83, 65, 65, 128, 84, 83, 65, 68, 201, - 84, 83, 87, 65, 128, 84, 84, 65, 65, 128, 84, 84, 69, 69, 128, 84, 84, - 69, 72, 128, 84, 84, 72, 69, 128, 84, 84, 72, 73, 128, 84, 84, 83, 65, - 128, 84, 84, 83, 69, 128, 84, 84, 83, 73, 128, 84, 84, 83, 79, 128, 84, - 84, 83, 85, 128, 84, 85, 79, 80, 128, 84, 85, 79, 84, 128, 84, 85, 79, - 88, 128, 84, 85, 82, 88, 128, 84, 90, 65, 65, 128, 84, 90, 69, 69, 128, - 84, 90, 79, 65, 128, 85, 45, 65, 69, 128, 85, 65, 84, 72, 128, 85, 68, - 85, 71, 128, 85, 75, 65, 82, 193, 85, 77, 85, 77, 128, 85, 82, 73, 51, - 128, 85, 82, 85, 68, 193, 85, 83, 72, 50, 128, 85, 83, 72, 88, 128, 85, - 83, 83, 85, 128, 85, 85, 85, 50, 128, 85, 85, 85, 51, 128, 85, 85, 85, - 85, 128, 86, 73, 69, 80, 128, 86, 73, 69, 84, 128, 86, 73, 69, 88, 128, - 86, 73, 78, 69, 128, 86, 85, 82, 88, 128, 86, 89, 82, 88, 128, 87, 65, - 69, 78, 128, 87, 65, 76, 76, 128, 87, 69, 76, 76, 128, 87, 69, 83, 84, - 128, 87, 79, 79, 78, 128, 87, 79, 82, 75, 128, 87, 82, 65, 80, 128, 87, - 85, 78, 74, 207, 87, 85, 79, 80, 128, 87, 85, 79, 88, 128, 88, 73, 82, - 79, 206, 88, 89, 65, 65, 128, 88, 89, 69, 69, 128, 88, 89, 82, 88, 128, - 89, 65, 45, 79, 128, 89, 65, 65, 73, 128, 89, 65, 66, 72, 128, 89, 65, - 67, 72, 128, 89, 65, 68, 68, 128, 89, 65, 68, 72, 128, 89, 65, 71, 78, - 128, 89, 65, 72, 72, 128, 89, 65, 82, 82, 128, 89, 65, 83, 72, 128, 89, - 65, 83, 83, 128, 89, 65, 84, 72, 128, 89, 65, 84, 84, 128, 89, 65, 90, - 90, 128, 89, 69, 82, 65, 200, 89, 73, 45, 85, 128, 89, 73, 78, 71, 128, - 89, 79, 45, 79, 128, 89, 79, 77, 79, 128, 89, 79, 82, 73, 128, 89, 85, - 45, 65, 128, 89, 85, 45, 69, 128, 89, 85, 45, 85, 128, 89, 85, 65, 78, - 128, 89, 85, 68, 72, 128, 89, 85, 79, 84, 128, 89, 85, 82, 88, 128, 89, - 89, 82, 88, 128, 90, 65, 77, 88, 128, 90, 65, 89, 73, 206, 90, 72, 65, - 65, 128, 90, 72, 65, 80, 128, 90, 72, 65, 84, 128, 90, 72, 65, 88, 128, - 90, 72, 69, 80, 128, 90, 72, 69, 84, 128, 90, 72, 69, 88, 128, 90, 72, - 79, 79, 128, 90, 72, 79, 80, 128, 90, 72, 79, 84, 128, 90, 72, 79, 88, - 128, 90, 72, 85, 79, 128, 90, 72, 85, 80, 128, 90, 72, 85, 82, 128, 90, - 72, 85, 84, 128, 90, 72, 85, 88, 128, 90, 72, 87, 65, 128, 90, 72, 89, - 80, 128, 90, 72, 89, 82, 128, 90, 72, 89, 84, 128, 90, 72, 89, 88, 128, - 90, 73, 90, 50, 128, 90, 85, 79, 80, 128, 90, 90, 65, 65, 128, 90, 90, - 65, 80, 128, 90, 90, 65, 84, 128, 90, 90, 65, 88, 128, 90, 90, 69, 69, - 128, 90, 90, 69, 80, 128, 90, 90, 69, 88, 128, 90, 90, 73, 69, 128, 90, - 90, 73, 80, 128, 90, 90, 73, 84, 128, 90, 90, 73, 88, 128, 90, 90, 79, - 80, 128, 90, 90, 79, 88, 128, 90, 90, 85, 80, 128, 90, 90, 85, 82, 128, - 90, 90, 85, 88, 128, 90, 90, 89, 80, 128, 90, 90, 89, 82, 128, 90, 90, - 89, 84, 128, 90, 90, 89, 88, 128, 79, 80, 69, 206, 68, 73, 83, 195, 70, - 73, 86, 197, 70, 79, 85, 210, 70, 85, 76, 204, 83, 69, 69, 206, 83, 72, - 65, 206, 73, 79, 84, 193, 69, 65, 83, 212, 70, 82, 79, 205, 84, 79, 68, - 207, 84, 69, 78, 128, 72, 79, 85, 210, 89, 85, 83, 128, 83, 73, 66, 197, - 68, 65, 83, 200, 81, 85, 65, 196, 69, 90, 69, 206, 78, 69, 79, 128, 78, - 85, 78, 128, 80, 72, 73, 128, 66, 72, 65, 128, 71, 65, 78, 178, 71, 72, - 65, 128, 80, 83, 73, 128, 84, 72, 69, 200, 66, 65, 68, 128, 75, 79, 77, - 201, 82, 72, 79, 128, 79, 88, 73, 193, 82, 79, 67, 128, 84, 65, 85, 128, - 74, 72, 65, 128, 83, 65, 82, 193, 84, 65, 67, 203, 68, 79, 69, 211, 75, - 85, 82, 128, 82, 82, 65, 128, 83, 72, 73, 205, 82, 68, 69, 204, 85, 78, - 73, 212, 73, 71, 73, 128, 83, 72, 65, 179, 84, 65, 73, 204, 84, 69, 78, - 211, 87, 65, 86, 217, 87, 73, 68, 197, 71, 73, 83, 200, 83, 72, 73, 206, - 83, 72, 79, 128, 90, 65, 73, 206, 68, 73, 71, 193, 68, 90, 65, 128, 68, - 90, 69, 128, 75, 65, 70, 128, 76, 65, 76, 128, 76, 69, 71, 128, 77, 85, - 83, 200, 87, 79, 82, 196, 65, 82, 67, 128, 71, 72, 69, 128, 75, 65, 75, - 128, 78, 89, 79, 128, 83, 84, 79, 208, 84, 65, 77, 128, 87, 65, 86, 197, - 89, 65, 78, 199, 89, 65, 84, 128, 90, 69, 82, 207, 68, 85, 78, 179, 71, - 73, 82, 179, 71, 79, 65, 204, 71, 84, 69, 210, 71, 85, 78, 213, 72, 85, - 66, 178, 77, 69, 77, 128, 78, 65, 71, 193, 78, 74, 69, 128, 78, 89, 73, - 128, 80, 65, 80, 128, 82, 72, 65, 128, 83, 72, 73, 210, 83, 84, 65, 210, - 83, 85, 78, 128, 84, 87, 69, 128, 87, 65, 87, 128, 89, 79, 68, 128, 65, - 80, 76, 201, 66, 66, 65, 128, 66, 69, 69, 200, 66, 79, 87, 128, 67, 76, - 69, 198, 68, 74, 69, 128, 68, 75, 65, 210, 68, 89, 69, 200, 69, 73, 69, - 128, 70, 69, 72, 128, 70, 73, 83, 200, 71, 73, 52, 128, 71, 85, 69, 200, - 72, 73, 69, 128, 73, 68, 73, 205, 75, 83, 73, 128, 75, 85, 51, 128, 76, - 65, 77, 197, 76, 74, 69, 128, 76, 79, 79, 128, 77, 71, 79, 128, 77, 85, - 67, 200, 77, 87, 65, 128, 78, 65, 77, 197, 78, 65, 82, 128, 78, 79, 87, - 128, 78, 87, 65, 128, 78, 89, 69, 200, 78, 89, 73, 211, 79, 79, 85, 128, - 80, 72, 79, 128, 82, 65, 65, 128, 83, 65, 82, 128, 83, 71, 65, 215, 83, - 79, 79, 128, 84, 65, 71, 128, 84, 72, 69, 206, 84, 73, 67, 203, 84, 79, - 79, 128, 84, 84, 69, 200, 84, 85, 71, 178, 84, 85, 82, 128, 86, 69, 69, - 128, 86, 69, 82, 217, 89, 69, 82, 128, 89, 69, 82, 213, 66, 65, 76, 128, - 66, 65, 83, 197, 66, 90, 72, 201, 67, 79, 79, 128, 67, 79, 87, 128, 67, - 87, 73, 128, 68, 79, 78, 128, 68, 85, 66, 128, 68, 87, 69, 128, 70, 65, - 65, 128, 70, 69, 69, 128, 70, 76, 65, 212, 70, 82, 69, 197, 72, 65, 69, - 128, 74, 73, 76, 128, 74, 79, 78, 193, 75, 69, 72, 128, 75, 72, 73, 128, - 75, 72, 79, 128, 75, 73, 68, 128, 75, 75, 65, 128, 75, 79, 79, 128, 75, - 87, 69, 128, 75, 87, 73, 128, 76, 85, 50, 128, 76, 85, 76, 128, 76, 87, - 65, 128, 77, 69, 78, 128, 77, 79, 79, 128, 77, 79, 79, 206, 77, 87, 69, - 128, 77, 87, 73, 128, 78, 65, 65, 128, 78, 69, 69, 128, 78, 79, 79, 128, - 78, 89, 85, 128, 80, 65, 82, 128, 80, 69, 72, 128, 80, 87, 69, 128, 80, - 87, 73, 128, 81, 65, 65, 128, 81, 65, 82, 128, 82, 65, 69, 128, 82, 69, - 80, 193, 83, 72, 79, 197, 83, 83, 73, 128, 83, 83, 79, 128, 83, 85, 82, - 128, 84, 65, 66, 128, 84, 69, 84, 128, 84, 72, 65, 204, 85, 77, 85, 205, - 86, 65, 86, 128, 86, 73, 78, 128, 87, 65, 69, 128, 87, 65, 76, 203, 87, - 65, 85, 128, 87, 69, 79, 128, 88, 65, 78, 128, 88, 69, 72, 128, 89, 65, - 75, 128, 89, 89, 65, 128, 90, 72, 73, 128, 90, 72, 79, 128, 90, 72, 85, - 128, 65, 76, 76, 201, 65, 83, 72, 178, 65, 88, 69, 128, 65, 89, 66, 128, - 65, 90, 85, 128, 66, 65, 65, 128, 66, 65, 67, 203, 66, 65, 78, 178, 66, - 66, 69, 128, 66, 69, 72, 128, 66, 69, 84, 128, 66, 72, 79, 128, 66, 79, - 76, 212, 66, 82, 68, 193, 66, 87, 65, 128, 67, 65, 84, 128, 67, 73, 80, - 128, 67, 76, 85, 194, 67, 79, 78, 128, 67, 85, 66, 197, 67, 85, 80, 128, - 67, 87, 69, 128, 67, 87, 79, 128, 67, 89, 80, 128, 67, 89, 84, 128, 68, - 65, 78, 199, 68, 65, 82, 128, 68, 65, 84, 197, 68, 68, 65, 204, 68, 68, - 69, 128, 68, 68, 73, 128, 68, 68, 85, 128, 68, 69, 73, 128, 68, 73, 66, - 128, 68, 74, 65, 128, 68, 76, 65, 128, 68, 79, 71, 128, 68, 82, 85, 205, - 68, 85, 78, 128, 69, 82, 82, 128, 69, 87, 69, 128, 70, 69, 73, 128, 70, - 76, 89, 128, 70, 79, 79, 128, 70, 85, 82, 128, 70, 85, 83, 193, 70, 87, - 65, 128, 71, 65, 68, 128, 71, 65, 89, 128, 71, 72, 79, 128, 71, 73, 77, - 128, 71, 73, 82, 178, 71, 74, 69, 128, 72, 65, 82, 196, 72, 76, 65, 128, - 72, 77, 79, 128, 72, 78, 65, 128, 73, 77, 73, 206, 73, 83, 79, 206, 74, - 74, 65, 128, 74, 74, 73, 128, 74, 74, 79, 128, 74, 74, 85, 128, 74, 74, - 89, 128, 75, 65, 50, 128, 75, 65, 66, 193, 75, 65, 73, 128, 75, 69, 78, - 128, 75, 72, 69, 128, 75, 73, 84, 128, 75, 74, 69, 128, 75, 80, 65, 128, - 75, 85, 76, 128, 75, 86, 65, 128, 75, 87, 79, 128, 76, 73, 68, 128, 76, - 87, 69, 128, 76, 87, 73, 128, 76, 87, 79, 128, 77, 65, 65, 128, 77, 66, - 65, 128, 77, 68, 85, 206, 77, 80, 65, 128, 77, 85, 71, 128, 77, 87, 79, - 128, 78, 71, 65, 211, 78, 73, 66, 128, 78, 74, 73, 128, 78, 74, 79, 128, - 78, 74, 85, 128, 78, 82, 65, 128, 78, 87, 69, 128, 78, 89, 69, 128, 79, - 72, 77, 128, 79, 73, 76, 128, 79, 75, 84, 207, 79, 78, 78, 128, 79, 84, - 85, 128, 80, 65, 65, 128, 80, 65, 82, 212, 80, 65, 84, 200, 80, 72, 85, - 210, 80, 76, 65, 128, 80, 79, 76, 201, 80, 85, 84, 128, 80, 87, 79, 128, - 80, 89, 84, 128, 81, 65, 73, 128, 81, 73, 73, 128, 81, 79, 70, 128, 81, - 79, 84, 128, 81, 85, 79, 128, 81, 85, 85, 128, 82, 71, 89, 193, 82, 78, - 65, 205, 82, 79, 79, 128, 82, 82, 69, 200, 82, 82, 79, 128, 83, 69, 72, - 128, 83, 71, 65, 194, 83, 72, 65, 196, 83, 72, 73, 196, 83, 72, 79, 199, - 83, 72, 89, 128, 83, 73, 71, 128, 83, 73, 71, 180, 83, 73, 79, 211, 83, - 74, 69, 128, 83, 79, 85, 128, 83, 87, 73, 128, 83, 87, 79, 128, 84, 65, - 84, 128, 84, 65, 86, 128, 84, 73, 82, 128, 84, 74, 69, 128, 84, 76, 65, - 128, 84, 76, 73, 128, 84, 76, 85, 128, 84, 79, 84, 128, 84, 82, 69, 197, - 84, 84, 73, 128, 84, 85, 75, 128, 84, 85, 77, 128, 84, 87, 73, 128, 85, - 83, 69, 196, 86, 69, 80, 128, 86, 69, 87, 128, 86, 79, 85, 128, 86, 85, - 82, 128, 88, 86, 65, 128, 89, 65, 74, 128, 89, 65, 81, 128, 89, 65, 90, - 128, 89, 69, 65, 210, 89, 70, 69, 206, 89, 87, 69, 128, 89, 87, 73, 128, - 89, 87, 79, 128, 90, 73, 68, 193, 90, 79, 79, 128, 90, 79, 84, 128, 90, - 90, 65, 128, 90, 90, 73, 128, 90, 90, 85, 128, 65, 65, 74, 128, 65, 65, - 75, 128, 65, 65, 77, 128, 65, 65, 87, 128, 65, 65, 89, 128, 65, 68, 65, - 203, 65, 68, 69, 199, 65, 77, 65, 210, 65, 77, 66, 193, 65, 82, 65, 196, - 65, 82, 67, 200, 65, 84, 79, 205, 65, 85, 69, 128, 65, 87, 69, 128, 65, - 89, 69, 210, 66, 48, 48, 177, 66, 48, 48, 178, 66, 48, 48, 179, 66, 48, - 48, 180, 66, 48, 48, 181, 66, 48, 48, 182, 66, 48, 48, 183, 66, 48, 48, - 184, 66, 48, 48, 185, 66, 48, 49, 176, 66, 48, 49, 177, 66, 48, 49, 178, - 66, 48, 49, 179, 66, 48, 49, 180, 66, 48, 49, 181, 66, 48, 49, 182, 66, - 48, 49, 183, 66, 48, 50, 176, 66, 48, 50, 177, 66, 48, 50, 179, 66, 48, - 50, 180, 66, 48, 50, 181, 66, 48, 50, 182, 66, 48, 50, 183, 66, 48, 50, - 184, 66, 48, 50, 185, 66, 48, 51, 176, 66, 48, 51, 177, 66, 48, 51, 178, - 66, 48, 51, 179, 66, 48, 51, 182, 66, 48, 51, 183, 66, 48, 51, 184, 66, - 48, 51, 185, 66, 48, 52, 176, 66, 48, 52, 177, 66, 48, 52, 178, 66, 48, - 52, 179, 66, 48, 52, 180, 66, 48, 52, 181, 66, 48, 52, 182, 66, 48, 52, - 184, 66, 48, 53, 176, 66, 48, 53, 177, 66, 48, 53, 178, 66, 48, 53, 179, - 66, 48, 53, 180, 66, 48, 53, 181, 66, 48, 53, 183, 66, 48, 53, 184, 66, - 48, 53, 185, 66, 48, 54, 176, 66, 48, 54, 177, 66, 48, 54, 178, 66, 48, - 54, 181, 66, 48, 54, 182, 66, 48, 54, 183, 66, 48, 54, 184, 66, 48, 54, - 185, 66, 48, 55, 176, 66, 48, 55, 177, 66, 48, 55, 178, 66, 48, 55, 179, - 66, 48, 55, 180, 66, 48, 55, 181, 66, 48, 55, 182, 66, 48, 55, 183, 66, - 48, 55, 184, 66, 48, 56, 176, 66, 48, 56, 177, 66, 48, 56, 181, 66, 48, - 56, 183, 66, 48, 57, 176, 66, 48, 57, 177, 66, 49, 48, 176, 66, 49, 48, - 178, 66, 49, 48, 180, 66, 49, 48, 181, 66, 49, 50, 176, 66, 49, 50, 177, - 66, 49, 50, 178, 66, 49, 50, 179, 66, 49, 50, 181, 66, 49, 50, 183, 66, - 49, 50, 184, 66, 49, 51, 176, 66, 49, 51, 177, 66, 49, 51, 179, 66, 49, - 51, 181, 66, 49, 52, 176, 66, 49, 52, 177, 66, 49, 52, 181, 66, 49, 53, - 177, 66, 49, 53, 182, 66, 49, 53, 185, 66, 49, 54, 178, 66, 49, 54, 179, - 66, 49, 55, 179, 66, 49, 55, 182, 66, 49, 57, 177, 66, 50, 50, 176, 66, - 50, 50, 181, 66, 50, 51, 176, 66, 50, 51, 177, 66, 50, 51, 179, 66, 50, - 52, 176, 66, 50, 52, 177, 66, 50, 52, 178, 66, 50, 52, 179, 66, 50, 52, - 183, 66, 50, 53, 180, 66, 65, 78, 203, 66, 66, 73, 128, 66, 66, 79, 128, - 66, 66, 85, 128, 66, 66, 89, 128, 66, 67, 65, 196, 66, 69, 76, 204, 66, - 69, 76, 212, 66, 69, 84, 193, 66, 72, 69, 128, 66, 72, 73, 128, 66, 72, - 85, 128, 66, 73, 66, 128, 66, 73, 71, 128, 66, 75, 65, 173, 66, 79, 65, - 128, 66, 85, 82, 213, 66, 87, 69, 128, 66, 87, 73, 128, 66, 88, 71, 128, - 67, 65, 68, 193, 67, 65, 78, 199, 67, 65, 82, 197, 67, 65, 88, 128, 67, - 67, 65, 128, 67, 67, 69, 128, 67, 67, 73, 128, 67, 67, 79, 128, 67, 67, - 85, 128, 67, 69, 68, 201, 67, 69, 78, 128, 67, 69, 80, 128, 67, 69, 88, - 128, 67, 72, 65, 196, 67, 72, 69, 206, 67, 73, 69, 128, 67, 73, 73, 128, - 67, 73, 84, 128, 67, 73, 88, 128, 67, 79, 65, 128, 67, 79, 80, 128, 67, - 79, 84, 128, 67, 79, 88, 128, 67, 85, 79, 128, 67, 85, 82, 128, 67, 85, - 84, 128, 67, 85, 88, 128, 67, 89, 65, 128, 67, 89, 82, 128, 67, 89, 88, - 128, 68, 65, 68, 128, 68, 65, 69, 199, 68, 65, 77, 208, 68, 65, 82, 203, - 68, 69, 75, 128, 68, 69, 90, 200, 68, 72, 73, 128, 68, 76, 73, 128, 68, - 76, 79, 128, 68, 76, 85, 128, 68, 82, 73, 204, 68, 82, 89, 128, 68, 85, - 72, 128, 68, 85, 76, 128, 68, 85, 77, 128, 68, 87, 79, 128, 68, 89, 79, - 128, 68, 90, 73, 128, 68, 90, 79, 128, 68, 90, 85, 128, 69, 68, 68, 128, - 69, 71, 71, 128, 69, 73, 83, 128, 69, 75, 83, 128, 69, 78, 78, 128, 69, - 78, 79, 211, 69, 79, 72, 128, 69, 82, 71, 128, 69, 83, 72, 178, 69, 85, - 82, 207, 69, 88, 79, 128, 70, 65, 78, 128, 70, 65, 80, 128, 70, 65, 88, - 128, 70, 69, 69, 196, 70, 69, 72, 213, 70, 69, 78, 199, 70, 69, 79, 200, - 70, 70, 73, 128, 70, 70, 76, 128, 70, 73, 73, 128, 70, 73, 76, 197, 70, - 73, 76, 204, 70, 73, 80, 128, 70, 73, 84, 128, 70, 73, 88, 128, 70, 76, - 65, 128, 70, 79, 80, 128, 70, 79, 88, 128, 70, 85, 80, 128, 70, 85, 84, - 128, 70, 85, 88, 128, 70, 87, 69, 128, 70, 87, 73, 128, 70, 89, 65, 128, - 70, 89, 80, 128, 70, 89, 84, 128, 70, 89, 88, 128, 71, 65, 66, 193, 71, - 65, 70, 128, 71, 65, 71, 128, 71, 65, 77, 128, 71, 67, 65, 206, 71, 69, - 66, 193, 71, 69, 66, 207, 71, 69, 84, 193, 71, 72, 73, 128, 71, 72, 85, - 128, 71, 72, 90, 128, 71, 73, 80, 128, 71, 76, 65, 128, 71, 79, 65, 128, - 71, 80, 65, 128, 71, 83, 85, 205, 71, 85, 76, 128, 71, 85, 77, 128, 71, - 89, 65, 128, 71, 89, 69, 128, 71, 89, 70, 213, 71, 89, 73, 128, 71, 89, - 79, 128, 71, 89, 85, 128, 72, 69, 76, 205, 72, 69, 78, 199, 72, 76, 69, - 128, 72, 76, 73, 128, 72, 76, 79, 128, 72, 76, 85, 128, 72, 76, 89, 128, - 72, 77, 73, 128, 72, 77, 85, 128, 72, 77, 89, 128, 72, 78, 69, 128, 72, - 78, 73, 128, 72, 80, 65, 128, 72, 85, 78, 128, 72, 87, 85, 128, 72, 88, - 65, 128, 72, 88, 69, 128, 72, 88, 73, 128, 72, 88, 79, 128, 72, 90, 71, - 128, 72, 90, 84, 128, 72, 90, 87, 128, 72, 90, 90, 128, 73, 45, 65, 128, - 73, 45, 79, 128, 73, 76, 50, 128, 73, 79, 82, 128, 74, 65, 65, 128, 74, - 65, 82, 128, 74, 69, 72, 128, 74, 69, 82, 128, 74, 72, 79, 128, 74, 73, - 65, 128, 74, 74, 69, 128, 74, 79, 65, 128, 74, 79, 89, 128, 74, 87, 65, - 128, 75, 65, 68, 179, 75, 65, 68, 181, 75, 65, 80, 128, 75, 65, 85, 206, - 75, 65, 88, 128, 75, 69, 80, 128, 75, 69, 88, 128, 75, 69, 89, 128, 75, - 72, 79, 212, 75, 72, 90, 128, 75, 73, 69, 128, 75, 73, 72, 128, 75, 73, - 73, 128, 75, 73, 80, 128, 75, 73, 88, 128, 75, 75, 69, 128, 75, 75, 73, - 128, 75, 75, 79, 128, 75, 75, 85, 128, 75, 76, 65, 128, 75, 79, 65, 128, - 75, 79, 72, 128, 75, 79, 80, 128, 75, 79, 84, 128, 75, 79, 88, 128, 75, - 80, 69, 128, 75, 80, 73, 128, 75, 80, 79, 128, 75, 80, 85, 128, 75, 85, - 52, 128, 75, 85, 55, 128, 75, 85, 79, 128, 75, 85, 80, 128, 75, 85, 84, - 128, 75, 85, 88, 128, 75, 88, 65, 128, 75, 88, 69, 128, 75, 88, 73, 128, - 75, 88, 79, 128, 75, 88, 85, 128, 75, 89, 65, 128, 75, 89, 69, 128, 75, - 89, 73, 128, 75, 89, 79, 128, 75, 89, 85, 128, 76, 65, 69, 128, 76, 65, - 71, 213, 76, 65, 83, 212, 76, 65, 84, 197, 76, 65, 90, 217, 76, 68, 50, - 128, 76, 69, 79, 128, 76, 72, 65, 199, 76, 73, 73, 128, 76, 73, 76, 128, - 76, 73, 78, 203, 76, 73, 82, 193, 76, 79, 65, 128, 76, 79, 71, 128, 76, - 79, 71, 210, 76, 79, 84, 128, 76, 85, 51, 128, 76, 85, 72, 128, 76, 89, - 89, 128, 77, 65, 50, 128, 77, 65, 72, 128, 77, 65, 83, 213, 77, 65, 89, - 128, 77, 66, 50, 128, 77, 66, 51, 128, 77, 66, 52, 128, 77, 66, 69, 128, - 77, 66, 73, 128, 77, 66, 79, 128, 77, 66, 85, 128, 77, 67, 72, 213, 77, - 69, 84, 193, 77, 69, 88, 128, 77, 71, 65, 128, 77, 71, 69, 128, 77, 71, - 85, 128, 77, 72, 90, 128, 77, 73, 73, 128, 77, 73, 76, 128, 77, 73, 76, - 204, 77, 73, 77, 128, 77, 79, 65, 128, 77, 79, 76, 128, 77, 85, 69, 128, - 77, 89, 65, 128, 77, 89, 84, 128, 78, 65, 50, 128, 78, 65, 71, 128, 78, - 65, 77, 128, 78, 65, 79, 211, 78, 66, 65, 128, 78, 66, 73, 128, 78, 66, - 79, 128, 78, 66, 85, 128, 78, 66, 89, 128, 78, 69, 84, 128, 78, 69, 88, - 212, 78, 71, 71, 128, 78, 72, 65, 128, 78, 73, 50, 128, 78, 73, 77, 128, - 78, 74, 89, 128, 78, 78, 71, 128, 78, 78, 79, 128, 78, 79, 65, 128, 78, - 82, 69, 128, 78, 82, 79, 128, 78, 82, 85, 128, 78, 82, 89, 128, 78, 85, - 69, 128, 78, 85, 76, 204, 78, 85, 77, 128, 78, 85, 80, 128, 78, 85, 82, - 128, 78, 85, 88, 128, 78, 89, 69, 212, 78, 90, 65, 128, 78, 90, 73, 128, - 78, 90, 85, 128, 78, 90, 89, 128, 79, 45, 69, 128, 79, 65, 75, 128, 79, - 65, 89, 128, 79, 66, 79, 204, 79, 84, 84, 128, 80, 65, 68, 128, 80, 65, - 76, 205, 80, 65, 84, 128, 80, 65, 88, 128, 80, 73, 69, 128, 80, 73, 71, - 128, 80, 73, 80, 128, 80, 73, 84, 128, 80, 73, 88, 128, 80, 79, 65, 128, - 80, 79, 80, 128, 80, 79, 88, 128, 80, 80, 77, 128, 80, 85, 50, 128, 80, - 85, 79, 128, 80, 85, 80, 128, 80, 85, 82, 128, 80, 85, 88, 128, 80, 89, - 80, 128, 80, 89, 82, 128, 80, 89, 88, 128, 81, 65, 76, 193, 81, 65, 81, - 128, 81, 65, 85, 128, 81, 69, 69, 128, 81, 72, 65, 128, 81, 72, 69, 128, - 81, 72, 73, 128, 81, 72, 79, 128, 81, 72, 85, 128, 81, 73, 69, 128, 81, - 73, 80, 128, 81, 73, 84, 128, 81, 73, 88, 128, 81, 79, 65, 128, 81, 79, - 79, 128, 81, 79, 80, 128, 81, 79, 88, 128, 81, 85, 65, 128, 81, 85, 69, - 128, 81, 85, 73, 128, 81, 85, 75, 128, 81, 85, 80, 128, 81, 85, 82, 128, - 81, 85, 84, 128, 81, 85, 86, 128, 81, 85, 88, 128, 81, 87, 65, 128, 81, - 87, 69, 128, 81, 87, 73, 128, 81, 89, 65, 128, 81, 89, 69, 128, 81, 89, - 73, 128, 81, 89, 79, 128, 81, 89, 80, 128, 81, 89, 82, 128, 81, 89, 84, - 128, 81, 89, 85, 128, 81, 89, 88, 128, 82, 65, 66, 128, 82, 65, 68, 201, - 82, 65, 73, 206, 82, 65, 77, 211, 82, 69, 73, 196, 82, 73, 80, 128, 82, - 74, 69, 128, 82, 74, 69, 211, 82, 79, 65, 128, 82, 82, 69, 128, 82, 82, - 85, 128, 82, 82, 89, 128, 82, 85, 65, 128, 82, 87, 65, 128, 82, 89, 65, - 128, 82, 89, 89, 128, 83, 45, 87, 128, 83, 65, 87, 128, 83, 65, 89, 128, - 83, 66, 85, 194, 83, 71, 79, 210, 83, 71, 82, 193, 83, 72, 85, 178, 83, - 73, 73, 128, 83, 73, 75, 178, 83, 73, 78, 197, 83, 75, 87, 128, 83, 78, - 65, 208, 83, 79, 65, 128, 83, 79, 87, 128, 83, 83, 89, 128, 83, 84, 50, - 128, 83, 85, 65, 128, 83, 85, 68, 128, 83, 85, 75, 213, 83, 85, 79, 128, - 83, 87, 71, 128, 83, 87, 90, 128, 83, 89, 65, 128, 83, 90, 65, 128, 83, - 90, 69, 128, 83, 90, 73, 128, 83, 90, 79, 128, 83, 90, 85, 128, 83, 90, - 90, 128, 84, 65, 50, 128, 84, 65, 76, 204, 84, 65, 79, 128, 84, 65, 80, - 128, 84, 65, 80, 197, 84, 65, 87, 128, 84, 65, 88, 128, 84, 69, 78, 213, - 84, 69, 83, 200, 84, 69, 84, 200, 84, 69, 88, 128, 84, 72, 69, 211, 84, - 72, 73, 206, 84, 72, 90, 128, 84, 73, 73, 128, 84, 73, 76, 128, 84, 73, - 80, 128, 84, 73, 84, 128, 84, 73, 88, 128, 84, 76, 86, 128, 84, 79, 65, - 128, 84, 79, 88, 128, 84, 82, 73, 128, 84, 83, 86, 128, 84, 84, 50, 128, - 84, 84, 72, 128, 84, 84, 85, 128, 84, 85, 79, 128, 84, 85, 80, 128, 84, - 85, 84, 128, 84, 85, 88, 128, 84, 89, 65, 128, 84, 89, 69, 128, 84, 89, - 73, 128, 84, 89, 79, 128, 84, 90, 65, 128, 84, 90, 69, 128, 84, 90, 73, - 128, 84, 90, 73, 210, 84, 90, 79, 128, 84, 90, 85, 128, 85, 69, 69, 128, - 85, 69, 89, 128, 85, 78, 68, 207, 85, 82, 52, 128, 85, 82, 73, 128, 85, - 82, 85, 218, 85, 90, 51, 128, 85, 90, 85, 128, 86, 65, 65, 128, 86, 65, - 80, 128, 86, 65, 84, 128, 86, 65, 88, 128, 86, 69, 72, 128, 86, 69, 88, - 128, 86, 73, 69, 128, 86, 73, 80, 128, 86, 73, 84, 128, 86, 73, 88, 128, - 86, 79, 73, 196, 86, 79, 79, 128, 86, 79, 80, 128, 86, 79, 84, 128, 86, - 79, 87, 128, 86, 79, 88, 128, 86, 85, 80, 128, 86, 85, 84, 128, 86, 85, - 88, 128, 86, 87, 65, 128, 86, 89, 80, 128, 86, 89, 82, 128, 86, 89, 84, - 128, 86, 89, 88, 128, 87, 65, 78, 128, 87, 65, 80, 128, 87, 65, 84, 128, - 87, 65, 88, 128, 87, 69, 78, 128, 87, 69, 80, 128, 87, 69, 88, 128, 87, - 73, 78, 128, 87, 79, 65, 128, 87, 79, 69, 128, 87, 79, 78, 128, 87, 79, - 80, 128, 87, 79, 82, 203, 87, 79, 88, 128, 87, 85, 78, 128, 87, 85, 79, - 128, 87, 89, 78, 206, 88, 79, 65, 128, 88, 79, 82, 128, 88, 89, 65, 128, - 88, 89, 69, 128, 88, 89, 73, 128, 88, 89, 79, 128, 88, 89, 80, 128, 88, - 89, 82, 128, 88, 89, 84, 128, 88, 89, 85, 128, 88, 89, 88, 128, 89, 65, - 66, 128, 89, 65, 68, 128, 89, 65, 70, 128, 89, 65, 71, 128, 89, 65, 77, - 128, 89, 65, 80, 128, 89, 65, 86, 128, 89, 65, 87, 128, 89, 65, 89, 128, - 89, 69, 65, 128, 89, 69, 87, 128, 89, 69, 89, 128, 89, 73, 73, 128, 89, - 85, 68, 200, 89, 85, 82, 128, 89, 89, 80, 128, 89, 89, 82, 128, 89, 89, - 84, 128, 89, 89, 88, 128, 90, 65, 71, 128, 90, 65, 72, 128, 90, 65, 73, - 128, 90, 69, 50, 128, 90, 72, 89, 128, 90, 73, 51, 128, 90, 73, 66, 128, - 90, 73, 71, 128, 90, 76, 65, 128, 90, 82, 65, 128, 90, 85, 53, 128, 90, - 85, 77, 128, 90, 85, 84, 128, 90, 90, 89, 128, 71, 65, 178, 75, 65, 198, - 66, 69, 200, 68, 65, 217, 84, 72, 197, 70, 69, 200, 76, 85, 178, 68, 65, - 196, 68, 65, 199, 83, 65, 196, 84, 65, 200, 83, 65, 199, 69, 78, 196, 81, - 65, 198, 82, 79, 196, 65, 66, 178, 83, 73, 216, 78, 85, 206, 65, 82, 195, - 73, 71, 201, 78, 79, 210, 66, 73, 199, 80, 87, 207, 84, 69, 206, 87, 65, - 215, 89, 73, 199, 76, 69, 203, 77, 71, 207, 79, 67, 210, 83, 72, 197, 71, - 72, 197, 82, 72, 207, 67, 72, 197, 65, 82, 205, 66, 85, 212, 67, 85, 205, - 71, 65, 196, 78, 69, 207, 84, 73, 208, 85, 82, 178, 71, 65, 198, 75, 72, - 207, 90, 65, 200, 68, 73, 197, 80, 72, 201, 90, 72, 197, 71, 85, 178, 71, - 85, 196, 80, 72, 207, 81, 73, 128, 81, 85, 128, 84, 65, 194, 84, 73, 210, - 67, 72, 207, 70, 79, 128, 75, 65, 201, 77, 69, 206, 77, 73, 196, 78, 65, - 199, 78, 69, 212, 79, 68, 196, 80, 69, 200, 81, 79, 128, 86, 69, 200, 89, - 79, 196, 66, 65, 199, 66, 69, 212, 68, 89, 207, 71, 73, 180, 72, 65, 193, - 75, 75, 128, 76, 65, 204, 76, 85, 205, 81, 69, 128, 83, 73, 206, 85, 76, - 213, 86, 65, 214, 45, 85, 205, 66, 85, 210, 67, 72, 201, 68, 65, 208, 68, - 85, 204, 68, 90, 128, 69, 88, 207, 71, 82, 213, 71, 85, 199, 72, 71, 128, - 72, 80, 128, 72, 86, 128, 73, 74, 128, 73, 85, 128, 73, 89, 128, 74, 69, - 200, 74, 79, 212, 75, 65, 203, 75, 69, 217, 75, 71, 128, 75, 85, 204, 76, - 74, 128, 77, 73, 199, 77, 77, 128, 78, 73, 205, 78, 74, 128, 78, 86, 128, - 78, 89, 201, 79, 72, 205, 79, 86, 128, 80, 65, 215, 81, 79, 207, 82, 68, - 207, 83, 72, 213, 83, 85, 206, 83, 87, 128, 84, 90, 128, 87, 79, 206, 89, - 69, 206, 89, 85, 211, 65, 78, 207, 66, 65, 204, 66, 69, 206, 66, 79, 215, - 66, 81, 128, 67, 77, 128, 67, 85, 212, 68, 73, 206, 68, 76, 128, 68, 77, - 128, 68, 82, 217, 68, 85, 194, 68, 86, 128, 69, 67, 200, 70, 77, 128, 70, - 89, 128, 71, 66, 128, 71, 85, 205, 71, 86, 128, 71, 89, 128, 72, 75, 128, - 73, 83, 211, 75, 65, 178, 75, 66, 128, 75, 73, 196, 75, 73, 208, 75, 76, - 128, 75, 77, 128, 75, 84, 128, 75, 85, 179, 75, 85, 180, 75, 86, 128, 76, - 65, 215, 76, 67, 197, 76, 67, 201, 76, 72, 128, 76, 78, 128, 76, 88, 128, - 77, 69, 205, 77, 71, 128, 77, 72, 128, 77, 83, 128, 77, 85, 199, 77, 86, - 128, 77, 87, 128, 78, 65, 193, 78, 70, 128, 78, 71, 207, 78, 72, 128, 78, - 77, 128, 78, 87, 128, 78, 89, 196, 79, 66, 128, 80, 50, 128, 80, 65, 208, - 80, 67, 128, 80, 68, 128, 80, 69, 211, 80, 70, 128, 80, 71, 128, 80, 79, - 208, 80, 82, 128, 80, 86, 128, 80, 87, 128, 80, 90, 128, 81, 79, 198, 81, - 89, 128, 82, 73, 206, 82, 74, 197, 82, 85, 194, 83, 71, 128, 83, 78, 193, - 83, 79, 198, 83, 80, 128, 83, 82, 128, 83, 85, 210, 83, 90, 128, 84, 65, - 213, 84, 65, 214, 84, 69, 197, 84, 69, 212, 84, 78, 128, 84, 82, 128, 85, - 90, 179, 86, 69, 197, 86, 69, 215, 87, 66, 128, 87, 86, 128, 88, 89, 128, - 89, 65, 210, 89, 86, 128, 90, 65, 204, 90, 73, 194, 90, 76, 193, 90, 85, - 181, 66, 217, 65, 197, 69, 178, 89, 213, 66, 201, 68, 218, 90, 197, 68, - 213, 75, 205, 67, 205, 68, 205, 77, 205, 67, 193, 68, 194, 76, 218, 77, - 194, 77, 207, 77, 214, 77, 215, 80, 207, 81, 208, 84, 195, 90, 201, 202, - 209, + 53, 54, 55, 56, 128, 68, 79, 84, 83, 45, 50, 53, 54, 55, 128, 68, 79, 84, + 83, 45, 50, 53, 54, 128, 68, 79, 84, 83, 45, 50, 53, 128, 68, 79, 84, 83, + 45, 50, 52, 56, 128, 68, 79, 84, 83, 45, 50, 52, 55, 56, 128, 68, 79, 84, + 83, 45, 50, 52, 55, 128, 68, 79, 84, 83, 45, 50, 52, 54, 56, 128, 68, 79, + 84, 83, 45, 50, 52, 54, 55, 56, 128, 68, 79, 84, 83, 45, 50, 52, 54, 55, + 128, 68, 79, 84, 83, 45, 50, 52, 54, 128, 68, 79, 84, 83, 45, 50, 52, 53, + 56, 128, 68, 79, 84, 83, 45, 50, 52, 53, 55, 56, 128, 68, 79, 84, 83, 45, + 50, 52, 53, 55, 128, 68, 79, 84, 83, 45, 50, 52, 53, 54, 56, 128, 68, 79, + 84, 83, 45, 50, 52, 53, 54, 55, 56, 128, 68, 79, 84, 83, 45, 50, 52, 53, + 54, 55, 128, 68, 79, 84, 83, 45, 50, 52, 53, 54, 128, 68, 79, 84, 83, 45, + 50, 52, 53, 128, 68, 79, 84, 83, 45, 50, 52, 128, 68, 79, 84, 83, 45, 50, + 51, 56, 128, 68, 79, 84, 83, 45, 50, 51, 55, 56, 128, 68, 79, 84, 83, 45, + 50, 51, 55, 128, 68, 79, 84, 83, 45, 50, 51, 54, 56, 128, 68, 79, 84, 83, + 45, 50, 51, 54, 55, 56, 128, 68, 79, 84, 83, 45, 50, 51, 54, 55, 128, 68, + 79, 84, 83, 45, 50, 51, 54, 128, 68, 79, 84, 83, 45, 50, 51, 53, 56, 128, + 68, 79, 84, 83, 45, 50, 51, 53, 55, 56, 128, 68, 79, 84, 83, 45, 50, 51, + 53, 55, 128, 68, 79, 84, 83, 45, 50, 51, 53, 54, 56, 128, 68, 79, 84, 83, + 45, 50, 51, 53, 54, 55, 56, 128, 68, 79, 84, 83, 45, 50, 51, 53, 54, 55, + 128, 68, 79, 84, 83, 45, 50, 51, 53, 54, 128, 68, 79, 84, 83, 45, 50, 51, + 53, 128, 68, 79, 84, 83, 45, 50, 51, 52, 56, 128, 68, 79, 84, 83, 45, 50, + 51, 52, 55, 56, 128, 68, 79, 84, 83, 45, 50, 51, 52, 55, 128, 68, 79, 84, + 83, 45, 50, 51, 52, 54, 56, 128, 68, 79, 84, 83, 45, 50, 51, 52, 54, 55, + 56, 128, 68, 79, 84, 83, 45, 50, 51, 52, 54, 55, 128, 68, 79, 84, 83, 45, + 50, 51, 52, 54, 128, 68, 79, 84, 83, 45, 50, 51, 52, 53, 56, 128, 68, 79, + 84, 83, 45, 50, 51, 52, 53, 55, 56, 128, 68, 79, 84, 83, 45, 50, 51, 52, + 53, 55, 128, 68, 79, 84, 83, 45, 50, 51, 52, 53, 54, 56, 128, 68, 79, 84, + 83, 45, 50, 51, 52, 53, 54, 55, 56, 128, 68, 79, 84, 83, 45, 50, 51, 52, + 53, 54, 55, 128, 68, 79, 84, 83, 45, 50, 51, 52, 53, 54, 128, 68, 79, 84, + 83, 45, 50, 51, 52, 53, 128, 68, 79, 84, 83, 45, 50, 51, 52, 128, 68, 79, + 84, 83, 45, 50, 51, 128, 68, 79, 84, 83, 45, 50, 128, 68, 79, 84, 83, 45, + 49, 56, 128, 68, 79, 84, 83, 45, 49, 55, 56, 128, 68, 79, 84, 83, 45, 49, + 55, 128, 68, 79, 84, 83, 45, 49, 54, 56, 128, 68, 79, 84, 83, 45, 49, 54, + 55, 56, 128, 68, 79, 84, 83, 45, 49, 54, 55, 128, 68, 79, 84, 83, 45, 49, + 54, 128, 68, 79, 84, 83, 45, 49, 53, 56, 128, 68, 79, 84, 83, 45, 49, 53, + 55, 56, 128, 68, 79, 84, 83, 45, 49, 53, 55, 128, 68, 79, 84, 83, 45, 49, + 53, 54, 56, 128, 68, 79, 84, 83, 45, 49, 53, 54, 55, 56, 128, 68, 79, 84, + 83, 45, 49, 53, 54, 55, 128, 68, 79, 84, 83, 45, 49, 53, 54, 128, 68, 79, + 84, 83, 45, 49, 53, 128, 68, 79, 84, 83, 45, 49, 52, 56, 128, 68, 79, 84, + 83, 45, 49, 52, 55, 56, 128, 68, 79, 84, 83, 45, 49, 52, 55, 128, 68, 79, + 84, 83, 45, 49, 52, 54, 56, 128, 68, 79, 84, 83, 45, 49, 52, 54, 55, 56, + 128, 68, 79, 84, 83, 45, 49, 52, 54, 55, 128, 68, 79, 84, 83, 45, 49, 52, + 54, 128, 68, 79, 84, 83, 45, 49, 52, 53, 56, 128, 68, 79, 84, 83, 45, 49, + 52, 53, 55, 56, 128, 68, 79, 84, 83, 45, 49, 52, 53, 55, 128, 68, 79, 84, + 83, 45, 49, 52, 53, 54, 56, 128, 68, 79, 84, 83, 45, 49, 52, 53, 54, 55, + 56, 128, 68, 79, 84, 83, 45, 49, 52, 53, 54, 55, 128, 68, 79, 84, 83, 45, + 49, 52, 53, 54, 128, 68, 79, 84, 83, 45, 49, 52, 53, 128, 68, 79, 84, 83, + 45, 49, 52, 128, 68, 79, 84, 83, 45, 49, 51, 56, 128, 68, 79, 84, 83, 45, + 49, 51, 55, 56, 128, 68, 79, 84, 83, 45, 49, 51, 55, 128, 68, 79, 84, 83, + 45, 49, 51, 54, 56, 128, 68, 79, 84, 83, 45, 49, 51, 54, 55, 56, 128, 68, + 79, 84, 83, 45, 49, 51, 54, 55, 128, 68, 79, 84, 83, 45, 49, 51, 54, 128, + 68, 79, 84, 83, 45, 49, 51, 53, 56, 128, 68, 79, 84, 83, 45, 49, 51, 53, + 55, 56, 128, 68, 79, 84, 83, 45, 49, 51, 53, 55, 128, 68, 79, 84, 83, 45, + 49, 51, 53, 54, 56, 128, 68, 79, 84, 83, 45, 49, 51, 53, 54, 55, 56, 128, + 68, 79, 84, 83, 45, 49, 51, 53, 54, 55, 128, 68, 79, 84, 83, 45, 49, 51, + 53, 54, 128, 68, 79, 84, 83, 45, 49, 51, 53, 128, 68, 79, 84, 83, 45, 49, + 51, 52, 56, 128, 68, 79, 84, 83, 45, 49, 51, 52, 55, 56, 128, 68, 79, 84, + 83, 45, 49, 51, 52, 55, 128, 68, 79, 84, 83, 45, 49, 51, 52, 54, 56, 128, + 68, 79, 84, 83, 45, 49, 51, 52, 54, 55, 56, 128, 68, 79, 84, 83, 45, 49, + 51, 52, 54, 55, 128, 68, 79, 84, 83, 45, 49, 51, 52, 54, 128, 68, 79, 84, + 83, 45, 49, 51, 52, 53, 56, 128, 68, 79, 84, 83, 45, 49, 51, 52, 53, 55, + 56, 128, 68, 79, 84, 83, 45, 49, 51, 52, 53, 55, 128, 68, 79, 84, 83, 45, + 49, 51, 52, 53, 54, 56, 128, 68, 79, 84, 83, 45, 49, 51, 52, 53, 54, 55, + 56, 128, 68, 79, 84, 83, 45, 49, 51, 52, 53, 54, 55, 128, 68, 79, 84, 83, + 45, 49, 51, 52, 53, 54, 128, 68, 79, 84, 83, 45, 49, 51, 52, 53, 128, 68, + 79, 84, 83, 45, 49, 51, 52, 128, 68, 79, 84, 83, 45, 49, 51, 128, 68, 79, + 84, 83, 45, 49, 50, 56, 128, 68, 79, 84, 83, 45, 49, 50, 55, 56, 128, 68, + 79, 84, 83, 45, 49, 50, 55, 128, 68, 79, 84, 83, 45, 49, 50, 54, 56, 128, + 68, 79, 84, 83, 45, 49, 50, 54, 55, 56, 128, 68, 79, 84, 83, 45, 49, 50, + 54, 55, 128, 68, 79, 84, 83, 45, 49, 50, 54, 128, 68, 79, 84, 83, 45, 49, + 50, 53, 56, 128, 68, 79, 84, 83, 45, 49, 50, 53, 55, 56, 128, 68, 79, 84, + 83, 45, 49, 50, 53, 55, 128, 68, 79, 84, 83, 45, 49, 50, 53, 54, 56, 128, + 68, 79, 84, 83, 45, 49, 50, 53, 54, 55, 56, 128, 68, 79, 84, 83, 45, 49, + 50, 53, 54, 55, 128, 68, 79, 84, 83, 45, 49, 50, 53, 54, 128, 68, 79, 84, + 83, 45, 49, 50, 53, 128, 68, 79, 84, 83, 45, 49, 50, 52, 56, 128, 68, 79, + 84, 83, 45, 49, 50, 52, 55, 56, 128, 68, 79, 84, 83, 45, 49, 50, 52, 55, + 128, 68, 79, 84, 83, 45, 49, 50, 52, 54, 56, 128, 68, 79, 84, 83, 45, 49, + 50, 52, 54, 55, 56, 128, 68, 79, 84, 83, 45, 49, 50, 52, 54, 55, 128, 68, + 79, 84, 83, 45, 49, 50, 52, 54, 128, 68, 79, 84, 83, 45, 49, 50, 52, 53, + 56, 128, 68, 79, 84, 83, 45, 49, 50, 52, 53, 55, 56, 128, 68, 79, 84, 83, + 45, 49, 50, 52, 53, 55, 128, 68, 79, 84, 83, 45, 49, 50, 52, 53, 54, 56, + 128, 68, 79, 84, 83, 45, 49, 50, 52, 53, 54, 55, 56, 128, 68, 79, 84, 83, + 45, 49, 50, 52, 53, 54, 55, 128, 68, 79, 84, 83, 45, 49, 50, 52, 53, 54, + 128, 68, 79, 84, 83, 45, 49, 50, 52, 53, 128, 68, 79, 84, 83, 45, 49, 50, + 52, 128, 68, 79, 84, 83, 45, 49, 50, 51, 56, 128, 68, 79, 84, 83, 45, 49, + 50, 51, 55, 56, 128, 68, 79, 84, 83, 45, 49, 50, 51, 55, 128, 68, 79, 84, + 83, 45, 49, 50, 51, 54, 56, 128, 68, 79, 84, 83, 45, 49, 50, 51, 54, 55, + 56, 128, 68, 79, 84, 83, 45, 49, 50, 51, 54, 55, 128, 68, 79, 84, 83, 45, + 49, 50, 51, 54, 128, 68, 79, 84, 83, 45, 49, 50, 51, 53, 56, 128, 68, 79, + 84, 83, 45, 49, 50, 51, 53, 55, 56, 128, 68, 79, 84, 83, 45, 49, 50, 51, + 53, 55, 128, 68, 79, 84, 83, 45, 49, 50, 51, 53, 54, 56, 128, 68, 79, 84, + 83, 45, 49, 50, 51, 53, 54, 55, 56, 128, 68, 79, 84, 83, 45, 49, 50, 51, + 53, 54, 55, 128, 68, 79, 84, 83, 45, 49, 50, 51, 53, 54, 128, 68, 79, 84, + 83, 45, 49, 50, 51, 53, 128, 68, 79, 84, 83, 45, 49, 50, 51, 52, 56, 128, + 68, 79, 84, 83, 45, 49, 50, 51, 52, 55, 56, 128, 68, 79, 84, 83, 45, 49, + 50, 51, 52, 55, 128, 68, 79, 84, 83, 45, 49, 50, 51, 52, 54, 56, 128, 68, + 79, 84, 83, 45, 49, 50, 51, 52, 54, 55, 56, 128, 68, 79, 84, 83, 45, 49, + 50, 51, 52, 54, 55, 128, 68, 79, 84, 83, 45, 49, 50, 51, 52, 54, 128, 68, + 79, 84, 83, 45, 49, 50, 51, 52, 53, 56, 128, 68, 79, 84, 83, 45, 49, 50, + 51, 52, 53, 55, 56, 128, 68, 79, 84, 83, 45, 49, 50, 51, 52, 53, 55, 128, + 68, 79, 84, 83, 45, 49, 50, 51, 52, 53, 54, 56, 128, 68, 79, 84, 83, 45, + 49, 50, 51, 52, 53, 54, 55, 56, 128, 68, 79, 84, 83, 45, 49, 50, 51, 52, + 53, 54, 55, 128, 68, 79, 84, 83, 45, 49, 50, 51, 52, 53, 54, 128, 68, 79, + 84, 83, 45, 49, 50, 51, 52, 53, 128, 68, 79, 84, 83, 45, 49, 50, 51, 52, + 128, 68, 79, 84, 83, 45, 49, 50, 51, 128, 68, 79, 84, 83, 45, 49, 50, + 128, 68, 79, 84, 83, 45, 49, 128, 68, 79, 84, 83, 128, 68, 79, 84, 76, + 69, 83, 211, 68, 79, 82, 85, 128, 68, 79, 79, 82, 128, 68, 79, 79, 78, + 71, 128, 68, 79, 78, 71, 128, 68, 79, 77, 65, 73, 206, 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, 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, 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, 74, 128, + 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, 80, 69, 82, 83, 73, 79, 78, 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, 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, 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, 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, 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, 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, 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, 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, 69, + 70, 69, 67, 84, 73, 86, 69, 78, 69, 83, 211, 68, 69, 69, 82, 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, 73, 83, 73, 86, 69, 78, 69, 83, 83, + 128, 68, 69, 67, 73, 77, 65, 204, 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, 79, 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, 194, 68, 65, 217, 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, + 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, 128, + 68, 65, 78, 199, 68, 65, 78, 68, 65, 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, 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, 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, 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, 84, 128, + 67, 85, 212, 67, 85, 83, 84, 79, 77, 69, 210, 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, 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, 208, 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, 82, 89, 80, 84, 79, 71, 82, 65, 77, 77, 73, + 195, 67, 82, 85, 90, 69, 73, 82, 207, 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, 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, 79, 88, 128, 67, 79, 87, 128, 67, 79, 86, + 69, 82, 128, 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, 128, 67, 79, 79, 128, 67, 79, 78, + 86, 69, 82, 71, 73, 78, 199, 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, 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, + 79, 78, 65, 78, 212, 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, 76, 73, 67, 84, 128, 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, 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, + 128, 67, 79, 77, 77, 193, 67, 79, 77, 73, 78, 199, 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, 128, 67, 79, 70, 70, 73, 78, 128, 67, 79, 69, + 78, 71, 128, 67, 79, 68, 65, 128, 67, 79, 65, 128, 67, 79, 128, 67, 77, + 128, 67, 205, 67, 76, 85, 83, 84, 69, 210, 67, 76, 85, 66, 45, 83, 80, + 79, 75, 69, 196, 67, 76, 85, 66, 128, 67, 76, 85, 194, 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, 78, 69, 83, 83, 128, 67, 76, 79, 83, + 69, 68, 128, 67, 76, 79, 83, 69, 196, 67, 76, 79, 83, 197, 67, 76, 79, + 67, 75, 87, 73, 83, 197, 67, 76, 73, 86, 73, 83, 128, 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, + 210, 67, 76, 65, 87, 128, 67, 76, 65, 78, 128, 67, 73, 88, 128, 67, 73, + 86, 73, 76, 73, 65, 78, 128, 67, 73, 84, 128, 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, 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, 73, 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, 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, 65, 128, 67, 72, 79, 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, 76, 76, 213, 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, + 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, 211, 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, 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, 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, 69, 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, 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, 69, 88, + 128, 67, 69, 82, 69, 83, 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, 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, 69, 69, 128, + 67, 67, 72, 69, 128, 67, 67, 72, 65, 65, 128, 67, 67, 72, 65, 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, 84, 65, 87, 65, 128, 67, + 65, 84, 128, 67, 65, 83, 84, 76, 69, 128, 67, 65, 82, 89, 83, 84, 73, 65, + 206, 67, 65, 82, 84, 128, 67, 65, 82, 82, 73, 65, 71, 197, 67, 65, 82, + 80, 69, 78, 84, 82, 217, 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, 128, 67, 65, 210, 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, 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, 76, 89, 65, 128, 67, 65, 76, 89, 193, 67, 65, 76, 76, 128, 67, + 65, 76, 67, 128, 67, 65, 75, 82, 65, 128, 67, 65, 69, 83, 85, 82, 65, + 128, 67, 65, 68, 85, 67, 69, 85, 83, 128, 67, 65, 68, 193, 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, + 69, 76, 79, 82, 85, 83, 83, 73, 65, 78, 45, 85, 75, 82, 65, 73, 78, 73, + 65, 206, 66, 217, 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, 212, 66, 85, 83, 83, 89, 69, 82, 85, 128, 66, 85, 82, 213, 66, 85, + 82, 50, 128, 66, 85, 210, 66, 85, 79, 88, 128, 66, 85, 79, 80, 128, 66, + 85, 79, 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, 75, 89, 128, 66, 85, 72, 73, 196, 66, 85, 71, 73, 78, 69, 83, + 197, 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, 68, 71, 197, 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, 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, 79, 87, 84, 73, 69, 128, 66, 79, 87, 84, 73, 197, 66, 79, 87, + 128, 66, 79, 215, 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, 82, 85, 84, 79, 128, 66, 79, 79, 77, 69, 82, 65, + 78, 71, 128, 66, 79, 78, 69, 128, 66, 79, 76, 212, 66, 79, 68, 89, 128, + 66, 79, 65, 82, 128, 66, 79, 65, 128, 66, 76, 85, 69, 128, 66, 76, 79, + 79, 68, 128, 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, 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, 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, 65, 66, 73, 65, 204, 66, 73, 71, 128, 66, 73, 199, 66, + 73, 69, 84, 128, 66, 73, 68, 69, 78, 84, 65, 204, 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, 77, 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, 84, + 128, 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, 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, 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, 206, 66, 69, 70, 79, 82, 197, + 66, 69, 69, 84, 65, 128, 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, 128, 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, 84, 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, 128, 66, 66, + 65, 88, 128, 66, 66, 65, 84, 128, 66, 66, 65, 80, 128, 66, 66, 65, 128, + 66, 65, 89, 65, 78, 78, 65, 128, 66, 65, 85, 128, 66, 65, 84, 72, 84, 85, + 66, 128, 66, 65, 84, 72, 65, 77, 65, 83, 65, 84, 128, 66, 65, 83, 83, 65, + 128, 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, 65, 50, 128, 66, 65, 210, 66, 65, 78, + 84, 79, 67, 128, 66, 65, 78, 203, 66, 65, 78, 68, 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, 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, 71, 65, + 128, 66, 65, 71, 51, 128, 66, 65, 199, 66, 65, 68, 71, 69, 82, 128, 66, + 65, 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, + 45, 84, 73, 76, 84, 69, 196, 66, 65, 67, 75, 128, 66, 65, 67, 203, 66, + 65, 65, 82, 69, 82, 85, 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, 83, 84, 82, 65, 204, 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, 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, 65, 82, 86, 65, 86, 69, 68, 73, 195, + 65, 84, 72, 65, 80, 65, 83, 67, 65, 206, 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, 76, + 79, 71, 73, 67, 65, 204, 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, 69, 196, 65, 83, 80, 69, 82, 128, 65, 83, 72, 71, 65, + 66, 128, 65, 83, 72, 57, 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, 65, 66, 197, 65, 82, 83, 69, 79, 83, + 128, 65, 82, 83, 69, 79, 211, 65, 82, 82, 79, 87, 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, 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, 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, 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, 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, 73, 78, 128, 65, 80, 69, 83, 207, 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, 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, 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, 72, 85, 128, 65, 78, 71, 85, 76, 65, 82, 128, + 65, 78, 71, 83, 84, 82, 79, 205, 65, 78, 71, 75, 72, 65, 78, 75, 72, 85, + 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, 66, + 193, 65, 77, 65, 82, 128, 65, 77, 65, 210, 65, 77, 65, 76, 71, 65, 77, + 65, 84, 73, 79, 206, 65, 76, 86, 69, 79, 76, 65, 210, 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, 76, 79, 128, 65, 76, 76, 73, 65, 78, 67, 69, 128, 65, + 76, 76, 201, 65, 76, 76, 65, 200, 65, 76, 73, 71, 78, 69, 196, 65, 76, + 73, 70, 85, 128, 65, 76, 71, 73, 218, 65, 76, 70, 65, 128, 65, 76, 69, + 85, 212, 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, 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, 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, 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, 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, + 69, 89, 65, 78, 78, 65, 128, 65, 69, 89, 128, 65, 69, 84, 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, 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, 197, 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, 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, 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, }; -static unsigned short lexicon_offset[] = { - 0, 0, 6, 10, 15, 23, 27, 34, 39, 41, 44, 50, 63, 75, 84, 90, 95, 103, - 112, 116, 121, 129, 134, 137, 144, 149, 157, 163, 169, 177, 184, 194, - 199, 202, 209, 212, 217, 226, 232, 241, 248, 255, 260, 264, 273, 281, - 282, 288, 294, 302, 308, 314, 320, 328, 333, 340, 344, 347, 349, 355, - 362, 369, 377, 380, 385, 390, 396, 398, 403, 412, 419, 425, 286, 430, - 432, 434, 438, 443, 446, 452, 456, 464, 474, 481, 113, 490, 498, 503, - 511, 516, 524, 535, 538, 542, 555, 565, 571, 574, 575, 582, 584, 593, - 301, 596, 600, 608, 613, 615, 619, 622, 628, 635, 642, 647, 651, 660, - 670, 679, 688, 692, 698, 706, 713, 721, 725, 731, 735, 743, 752, 756, - 627, 763, 771, 775, 784, 789, 792, 796, 804, 813, 816, 821, 831, 840, - 847, 200, 733, 850, 857, 580, 865, 873, 879, 884, 891, 894, 900, 906, - 911, 916, 929, 22, 934, 937, 947, 952, 956, 962, 971, 974, 984, 993, 997, - 1002, 1007, 1012, 1019, 1027, 1030, 1040, 1043, 1045, 1053, 1057, 1061, - 93, 1064, 1069, 1075, 1077, 1086, 1089, 1092, 1097, 1099, 1105, 1111, - 1113, 1117, 331, 1120, 1128, 1132, 1136, 1141, 1144, 1150, 1154, 1161, - 1164, 1170, 80, 1176, 1178, 1181, 1183, 657, 1188, 1196, 1203, 1213, - 1222, 1230, 1232, 1256, 1278, 1300, 1322, 1343, 1364, 1384, 1404, 1423, - 1442, 1461, 1480, 1499, 1518, 1537, 1556, 1574, 1592, 1610, 1628, 1646, - 1664, 1682, 1700, 1718, 1736, 1754, 1772, 1790, 1807, 1824, 1841, 1858, - 1875, 1892, 1909, 1926, 1943, 1960, 1977, 1994, 2011, 2028, 2045, 2062, - 2079, 2096, 2113, 2130, 2147, 2164, 2181, 2198, 2215, 2232, 2249, 2266, - 2283, 2300, 2317, 2334, 2351, 2368, 2385, 2402, 2419, 2436, 2453, 2470, - 2487, 2504, 2521, 2538, 2555, 2572, 2589, 2606, 2623, 2640, 2657, 2674, - 2691, 2708, 2725, 2742, 2759, 2776, 2793, 2810, 2826, 2842, 2858, 2874, - 2890, 2906, 2922, 2938, 2954, 2970, 2986, 3002, 3018, 3034, 3050, 3066, - 3082, 3098, 3114, 3130, 3146, 3162, 3178, 3194, 3210, 3226, 3242, 3258, - 3274, 3290, 3306, 3322, 3338, 3354, 3370, 3386, 3402, 3418, 3434, 3450, - 3466, 3482, 3498, 3514, 3530, 3546, 3562, 3578, 3594, 3610, 3626, 3642, - 3658, 3674, 3690, 3706, 3722, 3738, 3754, 3770, 3786, 3802, 3818, 3834, - 3850, 3866, 3882, 3898, 3914, 3930, 3946, 3962, 3978, 3994, 4010, 4026, - 4042, 4058, 4074, 4090, 4106, 4122, 4138, 4154, 4170, 4186, 4202, 4218, - 4234, 4250, 4266, 4282, 4298, 4314, 4330, 4346, 4362, 4378, 4394, 4410, - 4426, 4442, 4458, 4474, 4490, 4506, 4522, 4538, 4554, 4570, 4586, 4602, - 4618, 4634, 4650, 4666, 4682, 4698, 4714, 4730, 4746, 4762, 4778, 4794, - 4810, 4826, 4842, 4858, 4874, 4890, 4906, 4922, 4938, 4954, 4970, 4986, - 5002, 5018, 5034, 5050, 5066, 5082, 5098, 5114, 5130, 5146, 5162, 5178, - 5194, 5210, 5226, 5242, 5258, 5274, 5290, 5306, 5322, 5338, 5354, 5370, - 5386, 5402, 5418, 5434, 5450, 5466, 5482, 5498, 5514, 5530, 5546, 5562, - 5578, 5594, 5610, 5626, 5642, 5658, 5674, 5690, 5706, 5722, 5738, 5754, - 5770, 5786, 5802, 5818, 5834, 5850, 5866, 5882, 5898, 5914, 5930, 5946, - 5962, 5978, 5994, 6010, 6026, 6042, 6058, 6074, 6090, 6106, 6122, 6138, - 6154, 6170, 6186, 6202, 6218, 6234, 6250, 6266, 6282, 6298, 6314, 6330, - 6346, 6362, 6378, 6394, 6410, 6426, 6442, 6458, 6474, 6490, 6506, 6522, - 6538, 6554, 6570, 6586, 6602, 6618, 6634, 6650, 6666, 6682, 6698, 6714, - 6730, 6746, 6762, 6778, 6794, 6810, 6826, 6842, 6858, 6874, 6890, 6906, - 6922, 6938, 6954, 6970, 6986, 7002, 7018, 7034, 7050, 7066, 7082, 7098, - 7114, 7130, 7146, 7162, 7178, 7194, 7210, 7226, 7242, 7258, 7274, 7290, - 7306, 7322, 7338, 7354, 7370, 7386, 7402, 7418, 7434, 7450, 7466, 7482, - 7498, 7514, 7530, 7546, 7562, 7578, 7594, 7610, 7626, 7642, 7658, 7674, - 7690, 7706, 7722, 7738, 7754, 7770, 7786, 7802, 7818, 7834, 7850, 7866, - 7882, 7898, 7914, 7930, 7946, 7962, 7978, 7994, 8010, 8026, 8042, 8058, - 8074, 8090, 8106, 8122, 8138, 8154, 8170, 8186, 8202, 8218, 8234, 8250, - 8266, 8282, 8298, 8314, 8330, 8346, 8362, 8378, 8394, 8410, 8426, 8442, - 8458, 8474, 8490, 8506, 8522, 8538, 8554, 8570, 8586, 8602, 8618, 8634, - 8650, 8666, 8682, 8698, 8714, 8730, 8746, 8762, 8778, 8794, 8810, 8826, - 8842, 8858, 8874, 8890, 8906, 8922, 8938, 8954, 8970, 8986, 9002, 9018, - 9034, 9050, 9066, 9082, 9098, 9114, 9130, 9146, 9162, 9178, 9194, 9210, - 9226, 9242, 9258, 9274, 9290, 9306, 9322, 9338, 9354, 9370, 9386, 9402, - 9418, 9434, 9450, 9466, 9482, 9498, 9514, 9530, 9546, 9562, 9578, 9594, - 9610, 9626, 9642, 9658, 9674, 9690, 9706, 9722, 9738, 9754, 9770, 9786, - 9802, 9818, 9834, 9850, 9866, 9882, 9898, 9914, 9930, 9946, 9962, 9978, - 9994, 10010, 10026, 10042, 10058, 10074, 10090, 10106, 10122, 10138, - 10154, 10170, 10186, 10202, 10218, 10234, 10250, 10266, 10282, 10298, - 10314, 10330, 10346, 10362, 10378, 10394, 10410, 10426, 10442, 10458, - 10474, 10490, 10506, 10522, 10538, 10554, 10570, 10586, 10602, 10618, - 10634, 10650, 10666, 10682, 10698, 10714, 10730, 10746, 10762, 10778, - 10794, 10810, 10826, 10842, 10858, 10874, 10890, 10906, 10922, 10938, - 10954, 10970, 10986, 11002, 11018, 11034, 11050, 11066, 11082, 11098, - 11114, 11130, 11146, 11162, 11178, 11194, 11210, 11226, 11242, 11258, - 11274, 11290, 11306, 11322, 11338, 11354, 11370, 11386, 11402, 11418, - 11434, 11450, 11466, 11482, 11498, 11514, 11530, 11546, 11562, 11578, - 11594, 11610, 11626, 11642, 11658, 11674, 11690, 11706, 11722, 11738, - 11754, 11770, 11785, 11800, 11815, 11830, 11845, 11860, 11875, 11890, - 11905, 11920, 11935, 11950, 11965, 11980, 11995, 12010, 12025, 12040, - 12055, 12070, 12085, 12100, 12115, 12130, 12145, 12160, 12175, 12190, - 12205, 12220, 12235, 12250, 12265, 12280, 12295, 12310, 12325, 12340, - 12355, 12370, 12385, 12400, 12415, 12430, 12445, 12460, 12475, 12490, - 12505, 12520, 12535, 12550, 12565, 12580, 12595, 12610, 12625, 12640, - 12655, 12670, 12685, 12700, 12715, 12730, 12745, 12760, 12775, 12790, - 12805, 12820, 12835, 12850, 12865, 12880, 12895, 12910, 12925, 12940, - 12955, 12970, 12985, 13000, 13015, 13030, 13045, 13060, 13075, 13090, - 13105, 13120, 13135, 13150, 13165, 13180, 13195, 13210, 13225, 13240, - 13255, 13270, 13285, 13300, 13315, 13330, 13345, 13360, 13375, 13390, - 13405, 13420, 13435, 13450, 13465, 13480, 13495, 13510, 13525, 13540, - 13555, 13570, 13585, 13600, 13615, 13630, 13645, 13660, 13675, 13690, - 13705, 13720, 13735, 13750, 13765, 13780, 13795, 13810, 13825, 13840, - 13855, 13870, 13885, 13900, 13915, 13930, 13945, 13960, 13975, 13990, - 14005, 14020, 14035, 14050, 14065, 14080, 14095, 14110, 14125, 14140, - 14155, 14170, 14185, 14200, 14215, 14230, 14245, 14260, 14275, 14290, - 14305, 14320, 14335, 14350, 14365, 14380, 14395, 14410, 14425, 14440, - 14455, 14470, 14485, 14500, 14515, 14530, 14545, 14560, 14575, 14590, - 14605, 14620, 14635, 14650, 14665, 14680, 14695, 14710, 14725, 14740, - 14755, 14770, 14785, 14800, 14815, 14830, 14845, 14860, 14875, 14890, - 14905, 14920, 14935, 14950, 14965, 14980, 14995, 15010, 15025, 15040, - 15055, 15070, 15085, 15100, 15115, 15130, 15145, 15160, 15175, 15190, - 15205, 15220, 15235, 15250, 15265, 15280, 15295, 15310, 15325, 15340, - 15355, 15370, 15385, 15400, 15415, 15430, 15445, 15460, 15475, 15490, - 15505, 15520, 15535, 15550, 15565, 15580, 15595, 15610, 15625, 15640, - 15655, 15670, 15685, 15700, 15715, 15730, 15745, 15760, 15775, 15790, - 15805, 15820, 15835, 15850, 15865, 15880, 15895, 15910, 15925, 15940, - 15955, 15970, 15985, 16000, 16015, 16030, 16045, 16060, 16075, 16090, - 16105, 16120, 16135, 16150, 16165, 16180, 16195, 16210, 16225, 16240, - 16255, 16270, 16285, 16300, 16315, 16330, 16345, 16360, 16375, 16390, - 16405, 16420, 16435, 16450, 16465, 16480, 16495, 16510, 16525, 16540, - 16555, 16570, 16585, 16600, 16615, 16630, 16645, 16660, 16675, 16690, - 16705, 16720, 16735, 16750, 16765, 16780, 16795, 16810, 16825, 16840, - 16855, 16870, 16885, 16900, 16915, 16930, 16945, 16960, 16975, 16990, - 17005, 17020, 17035, 17050, 17065, 17080, 17095, 17110, 17125, 17140, - 17155, 17170, 17185, 17200, 17215, 17230, 17245, 17260, 17275, 17290, - 17305, 17320, 17335, 17350, 17365, 17380, 17395, 17410, 17425, 17440, - 17455, 17470, 17485, 17500, 17515, 17530, 17545, 17560, 17575, 17590, - 17605, 17620, 17635, 17650, 17665, 17680, 17695, 17710, 17725, 17740, - 17755, 17770, 17785, 17800, 17815, 17830, 17845, 17860, 17875, 17890, - 17905, 17920, 17935, 17950, 17965, 17980, 17995, 18010, 18025, 18040, - 18055, 18070, 18085, 18100, 18115, 18130, 18145, 18160, 18175, 18190, - 18205, 18220, 18235, 18250, 18265, 18280, 18295, 18310, 18325, 18340, - 18355, 18370, 18385, 18400, 18415, 18430, 18445, 18460, 18475, 18490, - 18505, 18520, 18535, 18550, 18565, 18580, 18595, 18610, 18625, 18640, - 18655, 18670, 18685, 18700, 18715, 18730, 18745, 18760, 18775, 18790, - 18805, 18820, 18835, 18850, 18865, 18880, 18895, 18910, 18925, 18940, - 18955, 18970, 18985, 19000, 19015, 19030, 19045, 19060, 19075, 19090, - 19105, 19120, 19135, 19150, 19165, 19180, 19195, 19210, 19225, 19240, - 19255, 19270, 19285, 19300, 19315, 19330, 19345, 19360, 19375, 19390, - 19405, 19420, 19435, 19450, 19465, 19480, 19495, 19510, 19525, 19540, - 19555, 19570, 19585, 19600, 19615, 19630, 19645, 19660, 19675, 19690, - 19705, 19720, 19735, 19750, 19765, 19780, 19795, 19810, 19825, 19840, - 19855, 19870, 19884, 19898, 19912, 19926, 19940, 1390, 19954, 19968, - 19982, 19996, 20010, 20024, 20038, 20052, 20066, 20080, 20094, 20108, - 20122, 20136, 20150, 20164, 20178, 20192, 20206, 20220, 20234, 20248, - 20262, 20276, 20290, 20304, 20318, 1827, 20332, 20346, 20360, 20374, - 20388, 20402, 20416, 20430, 20444, 20458, 20472, 20486, 20500, 20514, - 20528, 20542, 20556, 20569, 20582, 20595, 20608, 20621, 20634, 20647, - 20660, 20673, 20686, 20699, 20712, 20725, 20738, 20751, 20764, 20777, - 20790, 20803, 20816, 20829, 20842, 20855, 20868, 1777, 20881, 20894, - 20907, 20920, 20933, 20946, 20959, 20972, 20985, 20998, 21011, 21024, - 21037, 21050, 21063, 21076, 21089, 21102, 21115, 21128, 21141, 21154, - 21167, 21180, 21193, 21206, 21219, 21232, 21245, 21258, 21271, 21284, - 21297, 21310, 21323, 21336, 21349, 21362, 21375, 21388, 21401, 21414, - 21427, 21440, 1505, 21453, 21466, 21479, 21492, 21505, 21518, 21531, - 21544, 21557, 21570, 21583, 21596, 21609, 21622, 21635, 21648, 21661, - 21674, 21687, 21700, 21713, 21726, 21739, 21752, 21765, 21778, 21791, - 21804, 21817, 21830, 21843, 21856, 21869, 21882, 21895, 21908, 21921, - 21934, 21947, 21960, 21973, 21986, 21999, 22012, 22025, 22038, 22051, - 22064, 22077, 22090, 22103, 22116, 22129, 22142, 22155, 22168, 22181, - 22194, 22207, 22220, 22233, 22246, 22259, 22272, 22285, 22298, 22311, - 22324, 22337, 22350, 22363, 22376, 22389, 22402, 22415, 22428, 22441, - 22454, 22467, 22480, 22493, 22506, 22519, 22532, 22545, 22558, 22571, - 22584, 22597, 22610, 22623, 22636, 22649, 22662, 22675, 22688, 22701, - 22714, 22727, 22740, 22753, 22766, 22779, 22792, 22805, 22818, 22831, - 22844, 22857, 22870, 22883, 22896, 22909, 22922, 22935, 22948, 22961, - 22974, 22987, 23000, 23013, 23026, 23039, 23052, 23065, 23078, 23091, - 23104, 23117, 23130, 23143, 23156, 23169, 23182, 23195, 23208, 23221, - 23234, 23247, 23260, 23273, 23286, 23299, 23312, 23325, 23338, 23351, - 23364, 23377, 23390, 23403, 23416, 23429, 23442, 23455, 23468, 23481, - 23494, 23507, 23520, 23533, 23546, 23559, 23572, 23585, 23598, 23611, - 23624, 23637, 23650, 23663, 23676, 23689, 23702, 23715, 23728, 23741, - 23754, 23766, 23778, 23790, 23802, 23814, 23826, 23838, 23850, 23862, - 23874, 23886, 23898, 23910, 23922, 23934, 23946, 23958, 23970, 23982, - 1688, 23994, 24006, 24018, 1598, 24030, 24042, 24054, 24066, 24078, - 24090, 24102, 1487, 1580, 24114, 1616, 24126, 24138, 24150, 24162, 24174, - 24186, 24198, 24210, 24222, 24234, 24246, 24258, 24270, 24282, 24294, - 24306, 24318, 24330, 24342, 24354, 24366, 24378, 24390, 24402, 24414, - 24426, 24438, 24450, 24462, 24474, 24486, 24498, 24510, 24522, 24534, - 24546, 24558, 24570, 24582, 24594, 24606, 24618, 24630, 24642, 24654, - 24666, 24678, 24690, 24702, 24714, 24726, 24738, 24750, 24762, 24774, - 24786, 24798, 24810, 24822, 24834, 24846, 24858, 24870, 24882, 24894, - 24906, 24918, 24930, 24942, 24954, 24966, 24978, 24990, 25002, 25014, - 25026, 25038, 25050, 25062, 25074, 25086, 25098, 25110, 25122, 25134, - 25146, 25158, 25170, 25182, 25194, 1372, 25206, 25218, 25230, 1742, - 25242, 25254, 25266, 25278, 25290, 25302, 25314, 25326, 25338, 25350, - 25362, 25374, 25386, 25398, 25410, 25422, 25434, 25446, 25458, 25470, - 25482, 25494, 25506, 25518, 25530, 25542, 25554, 25566, 25578, 25590, - 25602, 25614, 25626, 25638, 25650, 25662, 25674, 25686, 25698, 25710, - 25722, 25734, 25746, 25758, 25770, 25782, 25794, 25806, 25818, 25830, - 25842, 25854, 25866, 25878, 25890, 25902, 25914, 25926, 25938, 25950, - 25962, 25974, 25986, 25998, 26010, 26022, 26034, 26046, 26058, 26070, - 26082, 26094, 26106, 26118, 26130, 26142, 26154, 26166, 26178, 26190, - 26202, 26214, 26226, 26238, 26250, 26262, 26274, 26286, 26298, 26310, - 26322, 26334, 26346, 26358, 26370, 26382, 26394, 26406, 26418, 26430, - 26442, 26454, 26466, 26478, 26490, 26502, 26514, 26526, 26538, 26550, - 26562, 26574, 26585, 26596, 26607, 26618, 26629, 26640, 26651, 26662, - 26673, 26684, 26695, 26706, 26717, 26728, 26739, 26750, 26761, 26772, - 1813, 26783, 26794, 26805, 26816, 26827, 26838, 26849, 26860, 26871, - 2731, 1289, 26882, 1412, 26893, 26904, 26915, 26926, 26937, 26948, 2748, - 26959, 26970, 26981, 26992, 27003, 27014, 27025, 27036, 27047, 27058, - 27069, 27080, 27091, 27102, 2714, 27113, 27124, 27135, 27146, 27157, - 27168, 27179, 27190, 27201, 27212, 27223, 27234, 27245, 27256, 27267, - 27278, 27289, 27300, 27311, 27322, 27333, 27344, 27355, 27366, 27377, - 27388, 27399, 27410, 27421, 27432, 27443, 27454, 27465, 27476, 27487, - 27498, 27509, 27520, 27531, 27542, 27553, 27564, 27575, 27586, 27597, - 27608, 27619, 27630, 27641, 27652, 27663, 27674, 27685, 27696, 27707, - 27718, 27729, 27740, 27751, 27762, 27773, 27784, 27795, 27806, 27817, - 27828, 27839, 27850, 27861, 27872, 27883, 27894, 27905, 27916, 27927, - 27938, 27949, 27960, 27971, 27982, 27993, 28004, 28015, 28026, 28037, - 28048, 28059, 28070, 28081, 28092, 28103, 28114, 28125, 28136, 28147, - 28158, 28169, 28180, 28191, 28202, 28213, 28224, 28235, 28246, 28257, - 28268, 28279, 28290, 20181, 28301, 28312, 28323, 28334, 28345, 28356, - 28367, 28378, 28389, 28400, 28411, 28422, 28433, 28444, 28455, 28466, - 28477, 28488, 28499, 28510, 28521, 28532, 28543, 28554, 28565, 28576, - 28587, 28598, 28609, 28620, 28631, 28642, 28653, 28664, 28675, 28686, - 28697, 28708, 28719, 28730, 28741, 28752, 28763, 28774, 28785, 28796, - 28807, 28818, 28829, 28840, 28851, 28862, 28873, 28884, 28895, 28906, - 28916, 28926, 28936, 28946, 28956, 28966, 28976, 28986, 28996, 29006, - 29016, 29026, 29036, 29046, 29056, 29066, 29076, 29086, 29096, 29106, - 29116, 29126, 29136, 29146, 23828, 29156, 29166, 29176, 29186, 29196, - 29206, 29216, 29226, 29236, 1354, 29246, 29256, 29266, 29276, 29286, - 29296, 29306, 29316, 29326, 29336, 29346, 29356, 29366, 29376, 29386, - 29396, 29406, 29416, 29426, 29436, 29446, 29456, 29466, 29476, 29486, - 29496, 29506, 29516, 29526, 29536, 29546, 29556, 29566, 29576, 29586, - 29596, 29606, 29616, 29626, 29636, 29646, 29656, 29666, 29676, 29686, - 29696, 29706, 29716, 29726, 29736, 29746, 29756, 29766, 29776, 29786, - 29796, 29806, 29816, 29826, 29836, 29846, 29856, 29866, 29876, 29886, - 29896, 29906, 29916, 29926, 29936, 29946, 29956, 29966, 29976, 29986, - 29996, 30006, 30016, 30026, 21157, 30036, 24428, 30046, 30056, 30066, - 30076, 30086, 30096, 30106, 30116, 30126, 30136, 30146, 30156, 30166, - 30176, 30186, 30196, 30206, 30216, 30226, 30236, 30246, 30256, 30266, - 30276, 30286, 30296, 30306, 30316, 30326, 30336, 30346, 30356, 30366, - 30376, 30386, 30396, 30406, 30416, 30426, 30436, 30446, 30456, 30466, - 30476, 30486, 30496, 30506, 30516, 30526, 30536, 30546, 30556, 30566, - 30576, 30586, 30596, 30606, 30616, 30626, 30636, 30646, 30656, 30666, - 30676, 30686, 30696, 30706, 30716, 30726, 30736, 30746, 30756, 30766, - 30776, 30786, 30796, 30806, 30816, 30826, 30836, 30846, 30856, 30866, - 30876, 30886, 30896, 30906, 30916, 30926, 30936, 30946, 30956, 30966, - 30976, 30986, 30996, 31006, 31016, 31026, 31036, 31046, 31056, 31066, - 31076, 31086, 31096, 31106, 31116, 31126, 31136, 31146, 31156, 31166, - 31176, 31186, 31196, 31206, 31216, 31226, 31236, 31246, 31256, 31266, - 31276, 31286, 31296, 31306, 31316, 31326, 31336, 31346, 31356, 31366, - 31376, 31386, 31396, 31406, 31416, 31426, 31436, 31446, 2800, 31456, - 31466, 31476, 31486, 31496, 31506, 31516, 31526, 31536, 31546, 31556, - 31566, 31576, 31586, 31596, 31606, 31616, 31626, 31636, 31646, 31656, - 31666, 31676, 31686, 31696, 31706, 31716, 31726, 31736, 31746, 31756, - 31766, 31776, 31786, 31796, 31806, 31816, 31826, 31836, 31846, 31856, - 31866, 31876, 31886, 31896, 31906, 31916, 31926, 31936, 31946, 31956, - 31966, 31976, 31986, 31996, 32006, 32016, 32026, 32036, 32046, 32056, - 32066, 32075, 32084, 32093, 32102, 32111, 32120, 32129, 32138, 32147, - 32156, 32165, 32174, 32183, 32192, 32201, 32210, 32219, 32228, 32237, - 20573, 32246, 32255, 32264, 32273, 32282, 32291, 32300, 32309, 32318, - 32327, 32336, 32345, 32354, 32363, 32372, 32381, 32390, 32399, 32408, - 32417, 32426, 32435, 32444, 32453, 32462, 32471, 32480, 32489, 32498, - 32507, 32516, 32525, 32534, 32543, 32552, 32561, 32570, 32579, 32588, - 32597, 32606, 32615, 32624, 32633, 32642, 32651, 32660, 32669, 32678, - 26741, 32687, 32696, 32705, 32714, 32723, 32732, 32741, 32750, 32759, - 32768, 32777, 32786, 32795, 32804, 32813, 32822, 32831, 32840, 32849, - 32858, 32867, 32876, 32885, 32894, 32903, 32912, 32921, 32930, 32939, - 32948, 26950, 32957, 32966, 32975, 32984, 32993, 33002, 33011, 33020, - 33029, 33038, 33047, 33056, 33065, 33074, 33083, 33092, 33101, 33110, - 33119, 33128, 33137, 33146, 33155, 33164, 33173, 33182, 1269, 33191, - 33200, 33209, 33218, 33227, 33236, 33245, 33254, 33263, 33272, 33281, - 33290, 33299, 33308, 33317, 33326, 33335, 32027, 33344, 33353, 33362, - 33371, 33380, 33389, 33398, 33407, 33416, 33425, 33434, 33443, 33452, - 33461, 33470, 33479, 33488, 33497, 33506, 33515, 33524, 33533, 33542, - 33551, 33560, 33569, 33578, 33587, 33596, 33605, 33614, 33623, 33632, - 33641, 33650, 33659, 33668, 33677, 33686, 33695, 33704, 33713, 33722, - 33731, 33740, 33749, 33758, 33767, 33776, 33785, 33794, 33803, 33812, - 33821, 33830, 33839, 33848, 33857, 33866, 33875, 33884, 33893, 33902, - 33911, 33920, 33929, 33938, 33947, 33956, 33965, 33974, 33983, 33992, - 34001, 34010, 34019, 34028, 34037, 34046, 34055, 34064, 34073, 34082, - 34091, 34100, 34109, 34118, 34127, 34136, 34145, 34154, 34163, 34172, - 34181, 34190, 34199, 34208, 34217, 34226, 34235, 34244, 34253, 34262, - 34271, 34280, 34289, 34298, 34307, 34316, 34325, 34334, 34343, 34352, - 34361, 34370, 34379, 34388, 34397, 34406, 34415, 34424, 34433, 34442, - 34451, 34460, 34469, 34478, 34487, 34496, 34505, 34514, 34523, 34532, - 34541, 34550, 34559, 11617, 34568, 34577, 34586, 34595, 34604, 34613, - 34622, 34631, 34640, 34649, 34658, 34667, 34676, 34685, 34694, 34703, - 34712, 34721, 34730, 34739, 34748, 34757, 34766, 34775, 34784, 34793, - 34802, 34811, 34820, 34829, 34838, 34847, 34856, 34865, 34874, 34883, - 34892, 34901, 34910, 34919, 34928, 34937, 34946, 34955, 34964, 34973, - 34982, 34991, 35000, 35009, 35018, 35027, 35036, 35045, 35054, 35063, - 35072, 35081, 35090, 35099, 35108, 35117, 35126, 35135, 35144, 35153, - 35162, 2699, 35171, 35180, 35189, 35198, 35207, 35216, 35225, 35234, - 35243, 35252, 35261, 35270, 35279, 35288, 35297, 35306, 35315, 35324, - 35333, 35342, 35351, 35360, 35369, 35378, 35387, 35396, 35405, 35414, - 35423, 35432, 35441, 35450, 35459, 35468, 35477, 35486, 35495, 35504, - 35513, 35522, 35531, 35539, 35547, 35555, 35563, 35571, 35579, 35587, - 35595, 19890, 35603, 35611, 35619, 35627, 35635, 35643, 35651, 35659, - 35667, 35675, 35683, 35691, 35699, 35707, 35715, 35723, 35731, 35739, - 35747, 35755, 35763, 35771, 29428, 35779, 35787, 35795, 35803, 35811, - 35819, 35827, 35835, 35843, 35851, 21276, 35859, 35867, 35875, 35883, - 35891, 35899, 35907, 35915, 35923, 35931, 35939, 21484, 19918, 35947, - 35955, 1453, 35963, 35971, 2898, 35979, 2818, 35987, 35995, 36003, 36011, - 19974, 36019, 36027, 36035, 36043, 36051, 20600, 36059, 24106, 36067, - 36075, 36083, 36091, 36099, 36107, 36115, 36123, 36131, 36139, 36147, - 36155, 36163, 36171, 32589, 36179, 36187, 36195, 36203, 36211, 36219, - 36227, 36235, 36243, 36251, 36259, 36267, 1833, 36275, 36283, 36291, - 36299, 36307, 36315, 36323, 36331, 36339, 36347, 36355, 36363, 36371, - 36379, 36387, 36395, 36403, 36411, 36419, 36427, 36435, 36443, 36451, - 36459, 36467, 36475, 36483, 36491, 36499, 36507, 36515, 36523, 36531, - 36539, 36547, 36555, 36563, 36571, 36579, 36587, 36595, 36603, 36611, - 36619, 36627, 36635, 36643, 36651, 36659, 36667, 36675, 36683, 29208, - 36691, 36699, 36707, 36715, 36723, 36731, 36739, 36747, 36755, 36763, - 36771, 36779, 36787, 36795, 36803, 36811, 33174, 36819, 36827, 36835, - 36843, 36851, 36859, 36867, 36875, 36883, 36891, 36899, 36907, 36915, - 36923, 36931, 36939, 36947, 36955, 36963, 36971, 36979, 36987, 36995, - 37003, 37011, 37019, 37027, 37035, 37043, 37051, 37059, 37067, 37075, - 37083, 37091, 37099, 37107, 37115, 37123, 37131, 37139, 37147, 37155, - 29288, 37163, 37171, 37179, 37187, 37195, 37203, 37211, 37219, 37227, - 37235, 37243, 37251, 37259, 37267, 37275, 37283, 37291, 37299, 37307, - 28304, 37315, 37323, 37331, 37339, 37347, 37355, 37363, 37371, 37379, - 37387, 37395, 37403, 37411, 37419, 37427, 37435, 37443, 37451, 37459, - 37467, 37475, 37483, 37491, 37499, 37507, 37515, 37523, 37531, 37539, - 37547, 37555, 37563, 37571, 37579, 37587, 37595, 37603, 37611, 33228, - 37619, 37627, 37635, 37643, 37651, 37659, 37667, 37675, 37683, 37691, - 37699, 37707, 37715, 37723, 28458, 37731, 37739, 2785, 37747, 37755, - 37763, 37771, 37779, 37787, 37795, 37803, 37811, 35136, 37819, 37827, - 37835, 37843, 37851, 37859, 37867, 37875, 37883, 37891, 37899, 37907, - 37915, 37923, 37931, 37939, 37947, 37955, 37963, 37971, 37979, 37987, - 37995, 2866, 38003, 38011, 11714, 38019, 38027, 38035, 38043, 38051, - 38059, 38067, 38075, 38083, 38091, 25078, 38099, 38107, 38115, 38123, - 38131, 38139, 38147, 38155, 38163, 38171, 38179, 38187, 38195, 38203, - 38211, 38219, 38227, 38235, 38243, 38251, 38259, 38267, 38275, 38283, - 38291, 38299, 38307, 38315, 38323, 38331, 38339, 38347, 38355, 38363, - 38371, 38379, 38387, 20769, 38395, 38403, 38411, 38419, 38427, 38435, - 38443, 38451, 38459, 1728, 38467, 38475, 38483, 38491, 38499, 38507, - 38515, 38523, 38531, 38539, 38547, 38555, 38563, 38571, 26434, 38579, - 38587, 38595, 38603, 38611, 38619, 38627, 38635, 38643, 38651, 38659, - 38667, 38675, 38683, 38691, 38699, 38707, 38715, 38723, 38731, 38739, - 38747, 38755, 38763, 38771, 20520, 38779, 38787, 38795, 38803, 38811, - 38819, 38827, 38835, 38843, 38851, 38859, 38867, 30998, 38875, 38883, - 38891, 38899, 38907, 38915, 38923, 38931, 38939, 38947, 38955, 38962, - 20965, 38969, 38976, 38983, 38990, 38997, 39004, 39011, 39018, 39025, - 20679, 39032, 39039, 39046, 39053, 39060, 39067, 39074, 39081, 39088, - 39095, 39102, 39109, 39116, 39123, 39130, 39137, 39144, 39151, 39158, - 39165, 39172, 39179, 39186, 11898, 39193, 39200, 39207, 39214, 39221, - 39228, 39235, 39242, 39249, 39256, 39263, 39270, 39277, 39284, 39291, - 39298, 39305, 39312, 39319, 39326, 39333, 39340, 39347, 39354, 39361, - 39368, 1492, 39375, 39382, 39389, 1585, 39396, 39403, 39410, 39417, - 39424, 39431, 39438, 39445, 39452, 39459, 39466, 39473, 39480, 39487, - 39494, 1336, 39501, 39508, 39515, 39522, 39529, 39536, 39543, 39550, - 39557, 39564, 39571, 39578, 39585, 39592, 39599, 32356, 39606, 39613, - 39620, 39627, 39634, 39641, 39648, 39655, 39662, 39669, 28448, 39676, - 39683, 39690, 39697, 39704, 39711, 39718, 39725, 39732, 39739, 23855, - 39746, 39753, 39760, 39767, 39774, 39781, 39788, 39795, 39802, 39809, - 39816, 39823, 39830, 39837, 39844, 39851, 39858, 39865, 39872, 39879, - 39886, 39893, 39900, 39907, 39914, 39921, 39928, 39935, 39942, 39949, - 39956, 39963, 39970, 39977, 39984, 39991, 39998, 40005, 40012, 40019, - 40026, 40033, 40040, 40047, 40054, 40061, 40068, 40075, 40082, 40089, - 40096, 40103, 40110, 40117, 40124, 40131, 40138, 40145, 40152, 40159, - 40166, 40173, 40180, 40187, 40194, 40201, 40208, 40215, 40222, 40229, - 40236, 40243, 40250, 40257, 40264, 40271, 40278, 40285, 33022, 40292, - 40299, 40306, 40313, 40320, 40327, 40334, 40341, 40348, 40355, 40362, - 40369, 40376, 40383, 40390, 40397, 40404, 40411, 40418, 40425, 40432, - 40439, 40446, 40453, 40460, 40467, 40474, 40481, 40488, 40495, 40502, - 27106, 40509, 40516, 40523, 40530, 40537, 40544, 40551, 40558, 40565, - 40572, 40579, 40586, 32590, 40593, 40600, 40607, 40614, 40621, 40628, - 40635, 40642, 40649, 1765, 40656, 40663, 40670, 40677, 40684, 40691, - 40698, 40705, 40712, 40719, 40726, 40733, 40740, 40747, 40754, 40761, - 40768, 40775, 40782, 40789, 40796, 40803, 40810, 40817, 40824, 40831, - 40838, 40845, 40852, 40859, 40866, 40873, 40880, 40887, 40894, 40901, - 40908, 40915, 40922, 40929, 40936, 40943, 40950, 40957, 40964, 40971, - 40978, 40985, 40992, 40999, 41006, 41013, 41020, 33229, 41027, 41034, - 41041, 41048, 41055, 41062, 41069, 41076, 41083, 41090, 41097, 41104, - 41111, 41118, 41125, 41132, 41139, 41146, 41153, 41160, 31239, 41167, - 41174, 41181, 41188, 41195, 41202, 41209, 41216, 41223, 41230, 28349, - 41237, 41244, 41251, 41258, 41265, 41272, 41279, 41286, 41293, 41300, - 41307, 41314, 41321, 41328, 36900, 41335, 41342, 41349, 41356, 41363, - 41370, 41377, 41384, 41391, 41398, 41405, 41412, 41419, 41426, 41433, - 41440, 41447, 41454, 41461, 41468, 41475, 41482, 37876, 41489, 41496, - 41503, 41510, 41517, 41524, 41531, 41538, 41545, 41552, 41559, 41566, - 41573, 41580, 41587, 41594, 41601, 41608, 41615, 41622, 41629, 41636, - 41643, 41650, 41657, 41664, 41671, 41678, 41685, 41692, 41699, 41706, - 41713, 41720, 41727, 31199, 41734, 41741, 41748, 41755, 41762, 41769, - 38252, 41776, 41783, 41790, 41797, 41804, 41811, 41818, 41825, 41832, - 41839, 41846, 41853, 41860, 35708, 41867, 41874, 41881, 41888, 41895, - 41902, 41909, 41916, 41923, 41930, 41937, 41944, 41951, 41958, 41965, - 41972, 41979, 41986, 41993, 42000, 42007, 42014, 42021, 42028, 42035, - 42042, 42049, 42056, 42063, 42070, 42077, 42084, 42091, 42098, 42105, - 42112, 42119, 42126, 42133, 42140, 42147, 42154, 42161, 42168, 42175, - 42182, 24935, 42189, 42196, 42203, 42210, 42217, 42224, 42231, 42238, - 42245, 42252, 42259, 42266, 42273, 42280, 42287, 42294, 42301, 42308, - 42315, 42322, 42329, 42336, 42343, 42350, 42357, 42364, 42371, 42378, - 33247, 42385, 42392, 42399, 42406, 30999, 42413, 42420, 42427, 42434, - 42441, 42448, 42455, 42462, 42469, 42476, 42483, 42490, 42497, 42504, - 42511, 42518, 1676, 42525, 42531, 42537, 29600, 30040, 42543, 42549, - 42555, 42561, 21434, 42567, 42573, 42579, 42585, 42591, 42597, 42603, - 29840, 42609, 42615, 41140, 42621, 42627, 42633, 35965, 42639, 42645, - 42651, 42657, 29070, 42663, 42669, 29940, 42675, 42681, 42687, 42693, - 42699, 42705, 42711, 42519, 42717, 42723, 42729, 42735, 42741, 42747, - 29170, 42753, 42759, 42765, 42771, 42777, 42783, 42789, 42795, 42801, - 42807, 42813, 42819, 42825, 29230, 42831, 42837, 42843, 42849, 42855, - 42861, 42867, 42873, 26876, 42879, 42885, 42891, 42897, 20927, 42903, - 42909, 42915, 42921, 42927, 23880, 29460, 42933, 42939, 42945, 42951, - 20693, 42957, 42963, 42969, 42975, 42981, 1294, 42987, 42993, 1531, - 24336, 42999, 43005, 19948, 43011, 24204, 43017, 1398, 20368, 43023, - 43029, 20914, 43035, 43041, 43047, 43053, 43059, 43065, 43071, 43077, - 43083, 43089, 43095, 36181, 43101, 43107, 43113, 43119, 43125, 43131, - 29080, 43137, 43143, 43149, 43155, 43161, 43167, 43173, 43179, 43185, - 43191, 43197, 43203, 43209, 43215, 43221, 43227, 43233, 24216, 11824, - 32069, 43239, 43245, 43251, 43257, 43263, 43269, 43275, 43281, 43287, - 43293, 43299, 43305, 43311, 43317, 43323, 43329, 43335, 43341, 43347, - 43353, 43359, 43365, 43371, 43377, 43383, 43389, 43395, 43401, 43407, - 43413, 43419, 43425, 43431, 43437, 43443, 43449, 43455, 43461, 43467, - 43473, 43479, 43485, 43491, 28779, 43497, 43503, 43509, 43515, 43521, - 43527, 43533, 43539, 43545, 43551, 43557, 43563, 33257, 29140, 43569, - 43575, 43581, 43587, 43593, 43599, 43605, 43611, 43617, 43623, 43629, - 43635, 43641, 43647, 43653, 43659, 43665, 43671, 43677, 43683, 43689, - 43695, 43701, 43707, 43713, 43719, 43725, 43731, 43737, 43743, 43749, - 43755, 43761, 43767, 43773, 43779, 43785, 43791, 29350, 43797, 43803, - 43809, 43815, 43821, 43827, 43833, 43839, 43845, 43851, 43857, 43863, - 43869, 43875, 43881, 43887, 43893, 43899, 43905, 43911, 43917, 43923, - 43929, 43935, 43941, 43947, 43953, 43959, 43965, 43971, 43977, 43983, - 43989, 43995, 44001, 44007, 44013, 44019, 44025, 44031, 44037, 44043, - 44049, 44055, 35309, 44061, 44067, 44073, 44079, 44085, 44091, 44097, - 44103, 44109, 44115, 44121, 44127, 44133, 44139, 44145, 44151, 44157, - 44163, 44169, 44175, 44181, 44187, 44193, 44199, 44205, 44211, 44217, - 44223, 44229, 44235, 28306, 44241, 44247, 44253, 44259, 44265, 44271, - 44277, 44283, 44289, 44295, 44301, 44307, 44313, 44319, 44325, 44331, - 44337, 44343, 44349, 44355, 44361, 44367, 44373, 44379, 44385, 44391, - 44397, 44403, 44409, 29340, 44415, 44421, 44427, 44433, 44439, 44445, - 44451, 44457, 44463, 44469, 44475, 44481, 44487, 44493, 44499, 44505, - 44511, 44517, 44523, 44529, 44535, 44541, 44547, 44553, 44559, 44565, - 44571, 44577, 44583, 44589, 44595, 44601, 44607, 44613, 44619, 40860, - 44625, 44631, 44637, 44643, 44649, 44655, 44661, 44667, 44673, 44679, - 44685, 44691, 44697, 37069, 44703, 44709, 44715, 44721, 44727, 44733, - 44739, 44745, 44751, 44757, 44763, 44769, 44775, 44781, 44787, 44793, - 44799, 44805, 44811, 44817, 44823, 38853, 44829, 44835, 44841, 44847, - 44853, 44859, 44865, 44871, 44877, 44883, 44889, 44895, 44901, 44907, - 44913, 44919, 44925, 44931, 44937, 44943, 44949, 44955, 44961, 44967, - 44973, 44979, 34661, 44985, 44991, 44997, 45003, 45009, 45015, 45021, - 45027, 45033, 45039, 45045, 45051, 45057, 45063, 45069, 45075, 45081, - 45087, 45093, 45099, 45105, 45111, 37325, 45117, 45123, 45129, 45135, - 45141, 45147, 45153, 45159, 45165, 45171, 24468, 45177, 45183, 45189, - 45195, 45201, 45207, 45213, 45219, 45225, 45231, 45237, 45243, 45249, - 45255, 45261, 45267, 45273, 45279, 45285, 45291, 45297, 45303, 45309, - 45315, 45321, 45327, 45333, 45339, 45345, 45351, 40482, 45357, 45363, - 45369, 45375, 45381, 45387, 45393, 45399, 45405, 45411, 45417, 45423, - 45429, 45435, 45441, 45447, 45453, 45459, 45465, 45471, 45477, 45483, - 45489, 45495, 45501, 45507, 45513, 45519, 45525, 45531, 45537, 45543, - 45549, 45555, 45561, 45567, 45573, 45579, 45585, 45591, 45597, 45603, - 45609, 45615, 45621, 45627, 41301, 45633, 45639, 45645, 45651, 45657, - 45663, 45669, 45675, 45681, 45687, 45693, 45699, 45705, 45711, 45717, - 45723, 45729, 45735, 45741, 45747, 45753, 45759, 45765, 45771, 45777, - 45783, 45789, 45795, 45801, 45807, 45813, 45819, 45825, 45831, 45837, - 45843, 45849, 45855, 45861, 45867, 45873, 45879, 45885, 45891, 45897, - 45903, 45909, 45915, 45921, 45927, 45933, 45939, 45945, 45951, 45957, - 45963, 40097, 45969, 45975, 45981, 45987, 45993, 45999, 46005, 46011, - 46017, 46023, 46029, 46035, 46041, 46047, 46053, 46059, 46065, 46071, - 46077, 46083, 46089, 46095, 46101, 46107, 46113, 46119, 46125, 46131, - 46137, 46143, 46149, 46155, 46161, 46167, 46173, 46179, 46185, 46191, - 46197, 46203, 46209, 46215, 46221, 46227, 46233, 46239, 46245, 46251, - 46257, 46263, 46269, 46275, 46281, 46287, 33239, 46293, 46299, 46305, - 46311, 46317, 46323, 46329, 46335, 46341, 46347, 46353, 46359, 46365, - 46371, 46377, 46383, 46389, 46395, 46401, 46407, 46413, 46419, 46425, - 46431, 46437, 46443, 46449, 46455, 46461, 46467, 46473, 46479, 46485, - 46491, 46497, 46503, 46509, 46515, 46521, 46527, 46533, 46539, 46545, - 34751, 46551, 46557, 46563, 46569, 46575, 46581, 46587, 46593, 46599, - 46605, 46611, 46617, 46623, 46629, 46635, 46641, 46647, 46653, 46659, - 46665, 46671, 46677, 46683, 46689, 46695, 11794, 46701, 46707, 46713, - 46719, 46725, 46731, 46737, 46743, 46749, 46755, 46761, 46767, 46773, - 46779, 24252, 46785, 46791, 46797, 46803, 42372, 46809, 46815, 33266, - 46821, 46827, 46833, 46839, 46845, 46851, 46857, 46863, 46869, 46875, - 46881, 46887, 46893, 46899, 46905, 46911, 46917, 46923, 46929, 46935, - 46941, 46947, 46953, 46959, 46965, 46971, 46977, 46983, 46989, 46995, - 47001, 47007, 47013, 47019, 47025, 47031, 47037, 47043, 47049, 47055, - 47061, 47067, 47073, 47079, 47085, 47091, 47097, 31120, 47103, 47109, - 47115, 47121, 47127, 47133, 47139, 47145, 47151, 47157, 47163, 47169, - 47175, 47181, 47187, 47193, 47199, 47205, 47211, 47217, 47223, 47229, - 47235, 47241, 47247, 47253, 47259, 47265, 47271, 47277, 47283, 47289, - 47295, 35013, 47300, 47305, 47310, 47315, 47320, 47325, 47330, 47335, - 47340, 47345, 47350, 47355, 47360, 47365, 47370, 20785, 47375, 47380, - 47385, 47390, 32367, 44422, 47395, 47400, 43162, 47405, 47410, 47415, - 47420, 30891, 47425, 47430, 46918, 47435, 47440, 47445, 47450, 47455, - 47460, 47465, 47470, 47475, 47480, 47485, 47490, 47495, 47500, 47505, - 44662, 46756, 47510, 47515, 47520, 47525, 31411, 47530, 47535, 47540, - 47545, 47550, 47555, 43444, 47560, 47565, 47570, 47575, 47580, 47585, - 47590, 47595, 47600, 47605, 47610, 47615, 47620, 47625, 35112, 47630, - 47635, 47640, 47645, 47650, 47655, 47660, 47665, 47670, 43786, 47675, - 47680, 47685, 47690, 47695, 47700, 47705, 47710, 1359, 47715, 47720, - 47725, 47730, 47735, 38510, 47740, 47745, 42065, 18770, 47750, 47755, - 47760, 47765, 29001, 47770, 47775, 47780, 47785, 47790, 47795, 47800, - 39692, 47805, 47810, 47815, 47820, 47825, 47830, 47835, 47840, 47845, - 44464, 47850, 47855, 47860, 47865, 47870, 47875, 47880, 47885, 47890, - 47895, 47900, 28461, 47905, 34797, 42226, 47910, 47915, 47920, 47925, - 47930, 47935, 47940, 47945, 47950, 47955, 47960, 43282, 47965, 47970, - 47975, 47980, 47985, 485, 33438, 47990, 47995, 48000, 48005, 48010, - 48015, 48020, 48025, 48030, 48035, 48040, 48045, 1100, 48050, 48055, - 48060, 48065, 48070, 48075, 48080, 48085, 48090, 48095, 48100, 48105, - 42670, 48110, 48115, 48120, 48125, 48130, 48135, 48140, 48145, 48150, - 48155, 48160, 33069, 48165, 48170, 48175, 44236, 48180, 48185, 48190, - 48195, 48200, 48205, 48210, 48215, 48220, 48225, 48230, 20564, 48235, - 48240, 48245, 48250, 48255, 48260, 48265, 48270, 48275, 48280, 48285, - 48290, 48295, 48300, 48305, 48310, 48315, 48320, 47212, 48325, 41295, - 48330, 48335, 48340, 48345, 48350, 48355, 48360, 48365, 48370, 46798, - 21071, 48375, 48380, 48385, 48390, 43558, 48395, 48400, 48405, 48410, - 48415, 48420, 48425, 48430, 48435, 48440, 48445, 48450, 28274, 48455, - 48460, 48465, 48470, 31391, 48475, 48480, 48485, 48490, 48495, 48500, - 48505, 48510, 48515, 48520, 48525, 48530, 48535, 48540, 48545, 48550, - 48555, 48560, 48565, 48570, 48575, 42778, 48580, 48585, 48590, 48595, - 48600, 48605, 48610, 48615, 48620, 48625, 48630, 48635, 48640, 48645, - 48650, 48655, 48660, 48665, 48670, 48675, 48680, 48685, 29361, 48690, - 48695, 45358, 36398, 48700, 48705, 48710, 48715, 48720, 48725, 48730, - 48735, 48740, 48745, 48750, 48755, 48760, 48765, 48770, 48775, 48780, - 48785, 48790, 48795, 48800, 48805, 46450, 48810, 48815, 48820, 48825, - 35184, 48830, 48835, 48840, 48845, 48850, 48855, 48860, 48865, 45112, - 48870, 48875, 40007, 48880, 32853, 48885, 20173, 48890, 48895, 48900, - 48905, 48910, 48915, 38246, 48920, 48925, 48930, 48935, 48940, 48945, - 39860, 41799, 48950, 48955, 48960, 48965, 48970, 48975, 48980, 48985, - 48990, 48995, 49000, 49005, 49010, 49015, 49020, 49025, 49030, 49035, - 49040, 49045, 49050, 49055, 49060, 46912, 49065, 49070, 49075, 40231, - 49080, 49085, 49090, 49095, 49100, 39104, 49105, 49110, 49115, 49120, - 49125, 49130, 49135, 49140, 49145, 49150, 49155, 49160, 49165, 49170, - 49175, 49180, 49185, 49190, 49195, 49200, 49205, 30971, 49210, 49215, - 49220, 49225, 49230, 49235, 49240, 41204, 49245, 49250, 28373, 49255, - 49260, 49265, 49270, 49275, 49280, 49285, 49290, 35382, 49295, 49300, - 27328, 49305, 49310, 49315, 49320, 49325, 49330, 49335, 49340, 49345, - 49350, 49355, 49360, 49365, 49370, 49375, 49380, 49385, 49390, 49395, - 49400, 49405, 49410, 49415, 49420, 49425, 49430, 49435, 49440, 49445, - 49450, 49455, 49460, 49465, 49470, 49475, 49480, 49485, 49490, 49495, - 49500, 49505, 49510, 49515, 49520, 49525, 49530, 49535, 49540, 49545, - 49550, 49555, 49560, 49565, 49570, 49575, 49580, 49585, 49590, 49595, - 49600, 49605, 49610, 49615, 49620, 49625, 49630, 49635, 49640, 49645, - 49650, 49655, 49660, 49665, 49670, 49675, 49680, 49685, 49690, 49695, - 49700, 49705, 49710, 49715, 49720, 49725, 49730, 49735, 49740, 49745, - 49750, 49755, 49760, 49765, 49770, 49775, 49780, 49785, 49790, 49795, - 49800, 49805, 49810, 49815, 49820, 49825, 49830, 49835, 49840, 24157, - 49845, 49850, 49855, 49860, 49865, 49870, 49875, 49880, 49885, 49890, - 49895, 49900, 49905, 49910, 49915, 49920, 49925, 49930, 49935, 49940, - 49945, 49950, 49955, 49960, 49965, 49970, 49975, 49980, 49985, 49990, - 49995, 44296, 44302, 44308, 50000, 50005, 50010, 50015, 50020, 50025, - 50030, 50035, 50040, 50045, 50050, 50055, 31431, 44314, 44320, 50060, - 44326, 50065, 45898, 50070, 50075, 50080, 50085, 50090, 50095, 50100, - 50105, 50110, 50115, 50120, 50125, 50130, 50135, 50140, 44458, 50145, - 50150, 50155, 50160, 50165, 50170, 50175, 50180, 50185, 50190, 50195, - 50200, 50205, 50210, 50215, 50220, 50225, 43030, 50230, 50235, 50240, - 50245, 50250, 50255, 50260, 50265, 50270, 50275, 50280, 50285, 50290, - 50295, 50300, 50305, 50310, 50315, 50320, 50325, 50330, 50335, 50340, - 50345, 50350, 50355, 50360, 50365, 50370, 50375, 50380, 50385, 50390, - 50395, 50400, 50405, 50410, 50415, 50420, 50425, 50430, 50435, 50440, - 50445, 50450, 50455, 50460, 50465, 50470, 50475, 50480, 50485, 50490, - 50495, 50500, 50505, 50510, 50515, 50520, 50525, 50530, 50535, 50540, - 44668, 44674, 29471, 50545, 50550, 50555, 50560, 50565, 50570, 50575, - 50580, 50585, 50590, 50595, 50600, 50605, 50610, 39181, 44686, 50615, - 44692, 50620, 50625, 50630, 32898, 50635, 50640, 50645, 50650, 50655, - 47176, 47182, 38334, 50660, 50665, 50670, 50675, 50680, 50685, 50690, - 50695, 50700, 50705, 50710, 50715, 50720, 50725, 50730, 45754, 50735, - 50740, 45760, 50745, 50750, 50755, 50760, 50765, 50770, 50775, 45922, - 50780, 50785, 50790, 50795, 50800, 50805, 50810, 50815, 50820, 50825, - 50830, 50835, 50840, 50845, 50850, 50855, 50860, 50865, 45028, 50870, - 45034, 50875, 50880, 50885, 50890, 50895, 50900, 20047, 50905, 36006, - 50910, 45040, 45046, 45052, 45058, 45064, 45070, 50915, 50920, 50925, - 50930, 44500, 50935, 50940, 44362, 44716, 50945, 50950, 50955, 46822, - 50960, 50965, 50970, 50975, 50980, 50985, 50990, 50995, 51000, 51005, - 51010, 51015, 51020, 51025, 51030, 51035, 51040, 51045, 51050, 51055, - 51060, 51065, 51070, 51075, 51080, 51085, 51090, 51095, 51100, 51105, - 51110, 51115, 51120, 51125, 51130, 51135, 51140, 51145, 51150, 51155, - 51160, 51165, 51170, 51175, 51180, 51185, 51190, 51195, 51200, 51205, - 51210, 51215, 51220, 51225, 51230, 51235, 51240, 51245, 51250, 46282, - 44530, 44536, 44542, 46366, 51255, 51260, 51265, 51270, 51275, 51280, - 51285, 51290, 51295, 51300, 51305, 51310, 51315, 51320, 51325, 51330, - 45076, 51335, 51340, 51345, 51350, 51355, 51360, 51365, 51370, 51375, - 51380, 51385, 51390, 51395, 51400, 45382, 45388, 45394, 51405, 51410, - 51415, 51420, 51425, 51430, 51435, 51440, 51445, 51450, 51455, 51460, - 51465, 51470, 51475, 51480, 51485, 51490, 45400, 51495, 45406, 45412, - 46012, 51500, 51505, 51510, 51515, 51520, 51525, 51530, 51535, 51540, - 51545, 51550, 51555, 51560, 51565, 51570, 51575, 51580, 51585, 51590, - 51595, 51600, 51605, 51610, 51615, 51620, 51625, 51630, 51635, 51640, - 51645, 51650, 51655, 51660, 51665, 51670, 51675, 51680, 51685, 51690, - 51695, 51700, 51705, 51710, 42562, 51715, 51720, 51725, 51730, 51735, - 51740, 51745, 51750, 51755, 51760, 46876, 51765, 51770, 45184, 51775, - 45190, 51780, 51785, 51790, 51795, 51800, 51805, 45196, 51810, 45202, - 45208, 45214, 51815, 51820, 41085, 51825, 51830, 39580, 51835, 51840, - 51845, 51850, 51855, 51860, 51865, 51870, 51875, 51880, 51885, 51890, - 51895, 51900, 51905, 51910, 51915, 51920, 51925, 51930, 51935, 51940, - 51945, 45220, 45226, 51950, 51955, 51960, 51965, 51970, 51975, 51980, - 51985, 38030, 51990, 51995, 45232, 52000, 45238, 31441, 45244, 52005, - 52010, 52015, 52020, 52025, 41673, 52030, 52035, 52040, 52045, 52050, - 52055, 52060, 52065, 52070, 52075, 52080, 52085, 52090, 52095, 52100, - 52105, 52110, 52115, 52120, 52125, 52130, 44818, 43000, 52135, 52140, - 52145, 52150, 52155, 52160, 52165, 52170, 52175, 52180, 52185, 52190, - 46018, 52195, 52200, 52205, 52210, 52215, 52220, 52225, 52230, 52235, - 52240, 52245, 52250, 52255, 46024, 52260, 52265, 46030, 52270, 52275, - 52280, 39790, 52285, 52290, 52295, 45256, 45268, 42928, 52300, 52305, - 52310, 52315, 52320, 52325, 52330, 52335, 52340, 52345, 52350, 52355, - 52360, 52365, 52370, 52375, 52380, 52385, 52390, 52395, 41953, 52400, - 52405, 52410, 52415, 52420, 52425, 52430, 52435, 52440, 52445, 52450, - 52455, 52460, 52465, 52470, 52475, 52480, 52485, 52490, 52495, 45274, - 52500, 52505, 52510, 52515, 52520, 52525, 52530, 52535, 52540, 52545, - 52550, 52555, 52560, 52565, 52570, 52575, 52580, 52585, 52590, 52595, - 52600, 52605, 52610, 52615, 52620, 52625, 52630, 52635, 52640, 52645, - 52650, 52655, 52660, 52665, 52670, 52675, 52680, 52685, 52690, 52695, - 52700, 52705, 52710, 52715, 52720, 52725, 52730, 52735, 52740, 52745, - 52750, 52755, 52760, 52765, 52770, 52775, 52780, 52785, 52790, 52795, - 52800, 52805, 52810, 52815, 52820, 52825, 52830, 52835, 52840, 52845, - 52850, 52855, 52860, 52865, 52870, 52875, 52880, 52885, 52890, 52895, - 52900, 52905, 52910, 52915, 52920, 52925, 52930, 52935, 52940, 52945, - 52950, 52955, 52960, 52965, 52970, 52975, 52980, 52985, 52990, 52995, - 53000, 53005, 53010, 46324, 53015, 53020, 53025, 53030, 53035, 53040, - 53045, 53050, 53055, 53060, 53065, 53070, 53075, 53080, 53085, 53090, - 53095, 53100, 53105, 53110, 53115, 46462, 46048, 53120, 46054, 53125, - 53130, 53135, 53140, 53145, 53150, 53155, 53160, 53165, 53170, 53175, - 53180, 53185, 53190, 53195, 53200, 53205, 53210, 53215, 53220, 53225, - 53230, 53235, 28219, 53240, 53245, 53250, 53255, 53260, 53265, 53270, - 53275, 53280, 53285, 53290, 53295, 53300, 46720, 46726, 53305, 53310, - 53315, 53320, 53325, 53330, 53335, 33375, 53340, 1081, 53345, 53350, - 53355, 53360, 53365, 53370, 53375, 53380, 53385, 53390, 53395, 53400, - 53405, 53410, 53415, 53420, 53425, 53430, 53435, 53440, 53445, 53450, - 53455, 53460, 53465, 53470, 53475, 53480, 53485, 53490, 53495, 53500, - 53505, 29291, 53510, 53515, 46732, 53520, 53525, 53530, 53535, 53540, - 53545, 53550, 33492, 53555, 53560, 53565, 46162, 53570, 53575, 53580, - 53585, 53590, 53595, 53600, 53605, 53610, 26437, 28230, 53615, 53620, - 53625, 53630, 53635, 53640, 53645, 41603, 53650, 53655, 53660, 53665, - 53670, 53675, 53680, 53685, 53690, 53695, 53700, 53705, 53710, 53715, - 53720, 53725, 53730, 53735, 53740, 53745, 53750, 53755, 44140, 53760, - 53765, 53770, 53775, 38574, 35934, 53780, 53785, 42282, 53790, 53795, - 53800, 53805, 53810, 53815, 31451, 53820, 53825, 53830, 53835, 53840, - 53845, 53850, 53855, 36374, 53860, 53865, 36278, 53870, 53875, 53880, - 53885, 53890, 53895, 45304, 45310, 45316, 53900, 45334, 45568, 45574, - 53905, 53910, 53915, 53920, 53925, 53930, 53935, 53940, 53945, 53950, - 53955, 53960, 53965, 53970, 53975, 53980, 53985, 53990, 53995, 46066, - 46072, 46078, 54000, 54005, 54010, 54015, 54020, 54025, 54030, 54035, - 54040, 46084, 54045, 46090, 54050, 54055, 54060, 54065, 54070, 54075, - 54080, 54085, 54090, 54095, 54100, 54105, 54110, 54115, 54120, 54125, - 54130, 54135, 54140, 54145, 54150, 54155, 54160, 54165, 54170, 46096, - 46102, 54175, 54180, 46108, 46114, 46120, 54185, 54190, 54195, 54200, - 54205, 54210, 54215, 54220, 54225, 54230, 54235, 54240, 54245, 54250, - 54255, 54260, 54265, 54270, 54275, 54280, 47941, 54285, 54289, 54293, - 54297, 709, 54301, 54305, 35446, 46385, 54309, 26680, 54313, 43769, - 54317, 36527, 54321, 43595, 28253, 54325, 43421, 29172, 35059, 54329, - 54333, 20202, 42683, 54337, 34726, 54341, 44219, 54345, 47971, 54349, - 43187, 24026, 42045, 54353, 54357, 54361, 44663, 43751, 54365, 54369, - 50131, 54373, 54377, 27428, 54381, 54385, 54389, 54393, 36511, 54397, - 54401, 54405, 54409, 54413, 54417, 54421, 36103, 48016, 54425, 42779, - 54429, 54433, 54437, 48421, 32656, 20825, 54441, 36735, 28440, 54445, - 29092, 49911, 31272, 44777, 54449, 43085, 54453, 54457, 54461, 54465, - 54469, 33367, 44363, 54473, 54477, 54481, 41429, 40351, 53701, 30052, - 54485, 47876, 41674, 54489, 54493, 54497, 28495, 54501, 54505, 54509, - 37719, 54513, 45095, 42150, 54517, 24158, 54521, 42101, 43241, 54525, - 44459, 51431, 54529, 49041, 52821, 54533, 54537, 48536, 54541, 54545, - 54549, 54553, 50621, 54557, 45755, 50136, 50381, 54561, 36239, 54565, - 54569, 54573, 54577, 54581, 51406, 35500, 298, 54585, 54589, 54593, - 54597, 54601, 51616, 53351, 54605, 27318, 46913, 43805, 54609, 54613, - 54617, 43253, 40141, 33205, 43895, 54621, 54625, 40421, 48811, 54629, - 50626, 54633, 54637, 54641, 54645, 54649, 54653, 54657, 54661, 54665, - 51756, 54669, 54673, 48791, 54677, 54681, 40862, 54685, 54689, 54693, - 54697, 54701, 54705, 54709, 54713, 54717, 54721, 54725, 54729, 52396, - 54733, 54737, 54741, 54745, 54749, 54753, 54757, 54761, 29402, 54765, - 54769, 54773, 53676, 54777, 54781, 54785, 54789, 54793, 54797, 54801, - 54805, 43973, 43985, 50916, 54809, 54813, 54817, 42381, 54821, 54825, - 50141, 39735, 54829, 54833, 53171, 54837, 34465, 54841, 54845, 53766, - 54849, 44027, 38487, 40295, 44807, 54853, 54857, 54861, 54865, 46019, - 45923, 54869, 40050, 26486, 32287, 44465, 50191, 47961, 41184, 54873, - 54877, 31332, 54881, 54885, 54889, 54893, 53326, 54897, 54901, 53336, - 54905, 54909, 46409, 41779, 50561, 54913, 54917, 54921, 24506, 54925, - 31282, 54929, 54933, 54937, 54941, 54945, 36055, 54949, 52391, 54953, - 51206, 54957, 41919, 54961, 54965, 51626, 54969, 54973, 54977, 54981, - 54985, 20048, 52406, 958, 53026, 54989, 45977, 54993, 54997, 55001, - 53801, 55005, 53666, 53671, 55009, 33574, 55013, 55017, 23762, 38375, - 47316, 53711, 53716, 31122, 53481, 36615, 55021, 55025, 55029, 55033, - 55037, 55041, 45071, 55045, 55049, 55053, 49321, 55057, 40428, 47213, - 52551, 52586, 55061, 50676, 55065, 55069, 55073, 43427, 55077, 55081, - 55085, 55089, 55093, 55097, 55101, 55105, 55109, 55113, 50736, 55117, - 55121, 55125, 55129, 32971, 55133, 50116, 41380, 55137, 50121, 37215, - 55141, 55145, 55149, 55153, 55157, 55161, 55165, 55169, 55173, 38831, - 55177, 55181, 55185, 55189, 55193, 55197, 55201, 55205, 50396, 55209, - 37855, 55213, 55217, 55221, 55225, 55229, 55233, 55237, 33430, 55241, - 55245, 55249, 55253, 55257, 55261, 41947, 55265, 55269, 51866, 50781, - 52236, 52241, 52246, 52251, 55273, 55277, 55281, 55285, 50811, 50826, - 55289, 47711, 50171, 55293, 55297, 55301, 34825, 44723, 46643, 55305, - 24494, 55309, 55313, 55317, 55321, 55325, 55329, 55333, 34861, 55337, - 55341, 35527, 51596, 55345, 55349, 55353, 55357, 55361, 55365, 55369, - 55373, 32032, 49051, 49056, 55377, 50991, 55381, 55385, 55389, 51051, - 55393, 55397, 55401, 51101, 55405, 55409, 32980, 55413, 44357, 43517, - 24434, 23870, 55417, 55421, 45089, 55425, 55429, 55433, 37727, 55437, - 55441, 55445, 55449, 55453, 55457, 48061, 55461, 46037, 55465, 55469, - 55473, 55477, 26702, 55481, 34915, 55485, 55489, 36471, 55493, 55497, - 55501, 45695, 55505, 55509, 55513, 55517, 55521, 55525, 52411, 55529, - 55533, 55537, 55541, 55545, 50596, 53356, 55549, 32413, 55553, 55557, - 55561, 55565, 55569, 55573, 55577, 55581, 55585, 55589, 49071, 49076, - 55593, 55597, 55601, 55605, 55609, 55613, 55617, 37095, 55621, 43451, - 55625, 55629, 55633, 32503, 55637, 55641, 55645, 46415, 55649, 38319, - 49316, 55653, 55657, 55661, 55665, 55669, 43979, 55673, 55677, 43889, - 55681, 55685, 55689, 55693, 52531, 52556, 55697, 55701, 55705, 53521, - 55709, 48431, 55713, 55717, 48826, 52646, 55721, 48441, 55725, 45749, - 55729, 53921, 36967, 45917, 55733, 55737, 55741, 55745, 55749, 18351, - 55753, 55757, 47147, 33385, 43703, 47521, 55761, 55765, 35428, 55769, - 55773, 37167, 55777, 55781, 55785, 55789, 55793, 55797, 55801, 55805, - 55809, 55813, 55817, 55821, 55825, 55829, 55833, 55837, 55841, 55845, - 55849, 55853, 55857, 55861, 55865, 55869, 55873, 55877, 55881, 55885, - 55889, 55893, 55897, 55901, 55905, 55909, 55913, 55917, 55921, 55925, - 55929, 55933, 55937, 55941, 55945, 55949, 55953, 55957, 55961, 55965, - 55969, 55973, 55977, 55981, 55985, 55989, 55993, 55997, 56001, 56005, - 56009, 56013, 56017, 56021, 56025, 56029, 56033, 56037, 56041, 56045, - 56049, 56053, 56057, 56061, 56065, 56069, 56073, 56077, 56081, 56085, - 56089, 56093, 56097, 56101, 56105, 56109, 56113, 56117, 56121, 56125, - 56129, 56133, 56137, 56141, 56145, 56149, 56153, 56157, 56161, 56165, - 56169, 56173, 56177, 56181, 56185, 56189, 56193, 56197, 56201, 56205, - 56209, 56213, 56217, 56221, 56225, 56229, 56233, 56237, 49856, 37943, - 49866, 56241, 56245, 56249, 56253, 56257, 34906, 56261, 56265, 49871, - 56269, 49876, 56273, 56277, 56281, 56285, 48786, 56289, 49886, 49891, - 49896, 56293, 43013, 56297, 39581, 49901, 49906, 49916, 49921, 56301, - 48326, 49931, 56305, 56309, 56313, 49936, 52101, 49941, 49946, 56317, - 32251, 56321, 56325, 56329, 56333, 56337, 56341, 56345, 56349, 56353, - 56357, 56361, 56365, 56369, 56373, 39399, 56377, 56381, 56385, 56389, - 56393, 56397, 56401, 56405, 56409, 56413, 56417, 56421, 56425, 56429, - 56433, 27296, 56437, 56441, 38191, 41653, 56445, 50361, 56449, 50366, - 38895, 50371, 56453, 45815, 44819, 43001, 56457, 46493, 56461, 40834, - 50401, 45077, 50406, 39560, 50411, 50416, 51336, 56465, 56469, 56473, - 50421, 53176, 52156, 50426, 50436, 56477, 56481, 56485, 56489, 56493, - 50441, 50446, 48406, 50451, 50456, 50461, 56497, 56501, 56505, 56509, - 56513, 56517, 29152, 56521, 56525, 56529, 56533, 56537, 56541, 56545, - 26713, 56549, 48746, 56553, 56557, 56561, 56565, 44729, 56569, 56573, - 56577, 56581, 56585, 56589, 56593, 56597, 56601, 56605, 56609, 56613, - 56617, 56621, 56625, 56629, 56633, 56637, 56641, 56645, 56649, 56653, - 56657, 56661, 56665, 56669, 56673, 56677, 56681, 50766, 50771, 50776, - 51871, 51876, 51881, 51886, 56685, 56689, 56693, 35041, 39917, 50786, - 56697, 50791, 56701, 56705, 56709, 50796, 56713, 50801, 50806, 56717, - 56721, 45935, 48501, 50816, 56725, 520, 56729, 41660, 56733, 56737, - 48506, 50821, 50831, 50836, 50841, 50846, 50851, 56741, 56745, 56749, - 56753, 56757, 56761, 48656, 32042, 20565, 50151, 50161, 38751, 56765, - 39322, 56769, 50166, 50176, 45671, 50521, 50526, 50531, 50536, 48236, - 47671, 28220, 34717, 56773, 56777, 56781, 56785, 56789, 37583, 56793, - 56797, 56801, 56805, 56809, 50186, 39861, 50201, 50206, 56813, 37671, - 56817, 50211, 43031, 48956, 48961, 56821, 56825, 56829, 56833, 56837, - 56841, 56845, 56849, 56853, 56857, 56861, 53996, 28528, 44297, 44147, - 44309, 56865, 28231, 49241, 51961, 56869, 45449, 38783, 53621, 56873, - 56877, 56881, 56885, 56889, 56893, 48631, 51411, 51416, 51421, 56897, - 56901, 52326, 51426, 51436, 56905, 51441, 51446, 51451, 48636, 51456, - 56909, 51461, 52371, 51466, 51471, 20981, 56913, 56917, 31342, 56921, - 34429, 56925, 56929, 56933, 604, 56937, 56941, 56945, 27241, 56949, - 56953, 56957, 56961, 56965, 56969, 56973, 56977, 56981, 56985, 56989, - 56993, 56997, 23942, 57001, 57005, 57009, 57013, 57017, 57021, 57025, - 34807, 57029, 57033, 44057, 57037, 57041, 57045, 57049, 57053, 57057, - 57061, 57065, 57069, 57073, 57077, 57081, 57085, 57089, 57093, 57097, - 50966, 57101, 48471, 57105, 50976, 57109, 57113, 57117, 50981, 35473, - 26592, 57121, 49046, 53631, 57125, 57129, 57133, 50691, 57137, 51001, - 51006, 57141, 57145, 57149, 51011, 57153, 316, 51016, 57157, 57161, - 51021, 51026, 48971, 51036, 51041, 51046, 51056, 51061, 57165, 57169, - 57173, 32665, 48311, 57177, 51071, 51076, 57181, 57185, 57189, 57193, - 57197, 57201, 57205, 57209, 57213, 41268, 57217, 57221, 57225, 57229, - 57233, 57237, 51081, 57241, 57245, 57249, 57253, 51086, 45629, 51096, - 44993, 57257, 57261, 51106, 51111, 57265, 20258, 51116, 51121, 51126, - 41387, 51136, 57269, 51141, 57273, 51151, 57277, 57281, 45839, 57285, - 57289, 51156, 19056, 51166, 57293, 57297, 57301, 57305, 57309, 28264, - 51171, 57313, 51176, 57317, 35943, 57321, 38599, 57325, 57329, 29892, - 51181, 57333, 51186, 35935, 51196, 47117, 57337, 57341, 57345, 57349, - 51201, 47255, 51211, 57353, 57357, 57361, 57365, 57369, 57373, 57377, - 51216, 57381, 57385, 51221, 57389, 57393, 57397, 40673, 57401, 57405, - 57409, 57413, 47177, 47183, 57417, 57421, 57425, 21332, 34798, 11638, - 57429, 57433, 57437, 51611, 57441, 57445, 48316, 40218, 57449, 57453, - 57457, 57461, 57465, 57469, 57473, 53346, 57477, 42791, 57481, 44735, - 57485, 57489, 57493, 57497, 57501, 57505, 57509, 57513, 57517, 57521, - 57525, 57529, 57533, 57537, 57541, 57545, 57549, 57553, 57557, 57561, - 57565, 57569, 57573, 57577, 57581, 57585, 57589, 57593, 57597, 57601, - 57605, 57609, 57613, 57617, 57621, 57625, 57629, 57633, 57637, 57641, - 57645, 57649, 57653, 57657, 57661, 57665, 44291, 44639, 57669, 49296, - 57673, 57677, 57681, 45299, 52416, 44267, 35583, 57685, 52421, 45017, - 52431, 31042, 37959, 57689, 57693, 57697, 46937, 57701, 47851, 53051, - 52441, 57705, 57709, 57713, 57717, 45125, 53061, 52446, 52451, 52456, - 52461, 57721, 57725, 52466, 52471, 52476, 52481, 57729, 57733, 31362, - 38815, 27329, 57737, 53371, 57741, 57745, 53381, 53386, 57749, 57753, - 42066, 57757, 53391, 57761, 57765, 57769, 53396, 53401, 57773, 57777, - 57781, 41814, 53411, 53416, 57785, 53421, 57789, 57793, 32260, 57797, - 57801, 57805, 57809, 53426, 53431, 53436, 57813, 57817, 57821, 53441, - 53446, 53451, 53456, 57825, 57829, 57833, 57837, 57841, 57845, 57849, - 46205, 57853, 57857, 57861, 57865, 57869, 57873, 53681, 57877, 53466, - 57881, 57885, 57889, 57893, 57897, 57901, 57905, 57909, 57913, 57917, - 57921, 57925, 57929, 2806, 57933, 57937, 57941, 57945, 57949, 57953, - 57957, 57961, 57965, 57969, 57973, 57977, 57981, 57985, 57989, 57993, - 57997, 58001, 58005, 58009, 54021, 50666, 58013, 58017, 34789, 29872, - 58021, 31432, 44315, 44321, 50061, 58025, 36263, 58029, 40232, 38511, - 58033, 37039, 53816, 58037, 58041, 58045, 58049, 58053, 58057, 58061, - 58065, 58069, 58073, 58077, 58081, 58085, 58089, 58093, 58097, 58101, - 58105, 58109, 58113, 58117, 58121, 58125, 58129, 58133, 58137, 58141, - 58145, 58149, 58153, 58157, 58161, 58165, 58169, 58173, 58177, 58181, - 58185, 58189, 58193, 58197, 58201, 58205, 51666, 51671, 51281, 51286, - 48596, 51291, 58209, 48601, 58213, 51296, 51301, 48606, 51676, 51681, - 51686, 58217, 58221, 58225, 58229, 58233, 58237, 58241, 58245, 58249, - 58253, 58257, 58261, 58265, 40645, 58269, 58273, 31352, 48546, 58277, - 58281, 58285, 58289, 58293, 58297, 52526, 58301, 48816, 52536, 52546, - 48821, 52561, 58305, 52566, 52571, 58309, 52576, 52581, 58313, 58317, - 58321, 58325, 58329, 58333, 58337, 52591, 52596, 52601, 58341, 54211, - 52606, 58345, 58349, 58353, 52611, 58357, 52616, 52621, 52626, 58361, - 53751, 52631, 52636, 58365, 58369, 58373, 52641, 58377, 52651, 53531, - 52656, 52661, 52666, 52671, 58381, 58385, 20826, 27429, 21320, 6423, - 36104, 35784, 46266, 39519, 33494, 710, 54790, 5911, 5655, 40436, 58388, - 6167, 34916, 58391, 58394, 49252, 39582, 34637, 54410, 43026, 53817, - 55542, 43680, 41206, 54538, 28353, 58397, 959, 1102, 54958, 6935, 58400, - 58403, 58406, 58409, 56794, 58412, 58415, 56302, 36576, 39610, 24867, - 31143, 689, 11782, 53962, 47962, 47142, 26703, 58418, 33377, 58421, - 34232, 58424, 58427, 25083, 5719, 20566, 478, 25215, 41675, 897, 648, - 58430, 43518, 24939, 20511, 50192, 46326, 58433, 20553, 1401, 1147, - 28441, 34790, 58436, 43896, 40408, 44616, 48957, 54598, 58439, 51877, - 23871, 58442, 40723, 38312, 47208, 24399, 30943, 56834, 43668, 38600, - 41808, 29853, 58445, 34547, 44562, 40674, 58448, 51887, 29453, 45558, - 58451, 26945, 58454, 58457, 58460, 48157, 24435, 32684, 27242, 58463, - 48892, 58466, 58469, 58472, 45750, 56346, 58475, 44592, 24159, 58478, - 39792, 45720, 5975, 58481, 40471, 47076, 33206, 29513, 31283, 11887, - 24459, 57026, 56826, 58484, 58487, 58490, 29913, 42256, 58493, 55322, - 58496, 46260, 58499, 58502, 285, 33431, 55094, 51882, 28397, 38856, - 56458, 58505, 24135, 40226, 58508, 2807, 39694, 44022, 56822, 58511, - 31343, 20631, 26487, 35528, 58514, 21112, 36608, 55326, 11607, 58517, - 24207, 54067, 58520, 6759, 605, 58523, 58526, 39589, 47297, 58529, 58532, - 58535, 35640, 58538, 19979, 58541, 38464, 39904, 47034, 20049, 6231, - 58544, 56342, 38296, 36368, 43332, 6999, 58547, 43704, 58550, 58553, - 58556, 58559, 58562, 35429, 58565, 31323, 58568, 58571, 24495, 913, - 48357, 58574, 58577, 5527, 5671, 12, 25095, 55026, 58580, 58583, 56350, - 54442, 58586, 42936, 34907, 33305, 44202, 48107, 58589, 58592, 1210, - 58595, 58598, 58601, 28892, 56542, 35447, 36712, 58604, 55770, 28870, - 58607, 21086, 40569, 53982, 40555, 58610, 19951, 58613, 42648, 50112, - 57166, 54022, 58616, 5703, 26451, 36704, 58619, 56254, 1458, 58622, - 30033, 58625, 54690, 58628, 58631, 6551, 34817, 55662, 58634, 58637, - 58640, 58643, 56946, 58646, 58649, 56710, 55210, 56958, 58652, 46398, - 58655, 58658, 58661, 58664, 58667, 43104, 58670, 58673, 58676, 50037, - 57774, 58679, 33296, 50302, 58682, 58685, 58688, 58691, 58694, 58697, - 50187, 58700, 39862, 58703, 317, 58706, 58709, 58712, 55226, 28155, - 58715, 58718, 57942, 58721, 40058, 632, 58724, 37032, 51357, 58727, - 55086, 56558, 58730, 18982, 58733, 5543, 53662, 33188, 42978, 58736, - 32666, 55682, 26475, 49867, 58739, 58742, 53932, 58745, 58748, 29403, - 6199, 6215, 58751, 58754, 6295, 6439, 58757, 58760, 58763, 58766, 58769, - 58772, 6679, 58775, 43944, 51717, 26593, 7015, 56594, 58778, 58781, - 47977, 58784, 56522, 330, 58787, 58790, 58793, 43560, 58796, 42193, - 35992, 20787, 28221, 21385, 58799, 28210, 1058, 55330, 53312, 58802, - 58805, 45738, 862, 58808, 58811, 58814, 58817, 58820, 58823, 58826, - 58829, 58832, 58835, 58838, 42081, 58841, 49237, 58844, 57926, 58847, - 416, 43500, 58850, 58853, 58856, 50727, 58859, 58862, 58865, 58868, - 49302, 58871, 55534, 29093, 58874, 48697, 58877, 58880, 58883, 43992, - 58886, 39001, 58889, 58892, 44322, 31443, 58895, 58898, 58901, 58904, - 58907, 58910, 58913, 2823, 57482, 58916, 58919, 44772, 58922, 58925, - 50307, 58928, 58931, 58934, 11812, 58937, 58940, 58943, 58946, 32153, - 58949, 58952, 58955, 58958, 58961, 57790, 58964, 58967, 58970, 58973, - 58976, 43524, 58979, 58982, 20483, 1297, 48507, 20696, 58985, 58988, - 58991, 58994, 51242, 58997, 56314, 57070, 59000, 59003, 59006, 59009, - 48272, 59012, 59015, 59018, 57410, 606, 1059, 3112, 441, 1402, 711, 88, - 21074, 3176, 55679, 41319, 1298, 318, 43369, 21, 37, 35124, 39121, 863, - 1186, 55419, 904, 59021, 37777, 45361, 19058, 32, 1010, 197, 383, 342, - 29214, 59023, 101, 39030, 761, 59025, 46261, 54439, 54995, 239, 829, - 48318, 59027, 210, 47628, 855, 26649, 36617, 57759, 58968, 59029, 59031, - 1025, 43525, 57807, 32820, 42985, 224, 1194, 26748, 633, 59033, 32883, - 59035, 38545, 27034, 59037, 271, 626, 57179, 388, 950, 877, 36273, 58614, - 59039, 59041, 4, 147, 28924, 26671, 1142, 24196, 54395, 59043, 300, - 53198, 28277, 42775, 58587, 32289, 55339, 56695, 59045, 59047, 540, 378, - 119, 48673, 58467, 696, 43177, 42655, 932, 32044, 32676, 1109, 42595, - 59049, 59051, 59053, 59055, 59057, 39072, 26979, 444, 59059, 59061, - 37225, 59063, 8, 802, 1115, 48798, 454, 790, 59065, 40, 38786, 5, 14, - 111, 26, 133, 49, 115, 62, 225, 9, 43, 83, 58615, 583, 402, 193, 59067, - 445, 59068, +static unsigned int lexicon_offset[] = { + 0, 0, 6, 10, 15, 23, 27, 34, 39, 41, 44, 52, 62, 68, 81, 93, 102, 108, + 113, 121, 130, 135, 139, 145, 150, 158, 161, 168, 173, 181, 186, 192, + 200, 207, 217, 224, 227, 236, 239, 242, 247, 253, 262, 266, 273, 280, + 285, 294, 136, 302, 303, 309, 315, 323, 329, 335, 340, 346, 352, 360, + 367, 369, 372, 376, 383, 390, 396, 403, 408, 410, 418, 421, 426, 307, + 428, 430, 436, 441, 450, 455, 460, 470, 474, 487, 491, 496, 505, 508, + 514, 518, 526, 536, 544, 551, 560, 568, 576, 581, 589, 600, 604, 611, + 614, 620, 624, 628, 629, 634, 638, 640, 643, 652, 322, 655, 659, 664, + 672, 676, 678, 681, 687, 694, 701, 710, 719, 722, 732, 741, 750, 756, + 762, 769, 772, 780, 788, 792, 796, 804, 813, 822, 827, 831, 686, 838, + 846, 850, 854, 857, 862, 867, 871, 879, 794, 609, 882, 887, 225, 890, + 895, 905, 914, 920, 927, 934, 942, 946, 954, 960, 967, 973, 979, 984, + 988, 994, 1007, 1012, 1015, 1020, 22, 1024, 1027, 1037, 1042, 1046, 1055, + 1058, 1064, 1074, 1077, 111, 1081, 1086, 1092, 1096, 1101, 1107, 1112, + 1115, 1122, 1124, 1126, 1134, 1144, 1147, 1150, 1157, 1165, 338, 1167, + 1170, 1175, 1183, 1192, 1195, 1204, 1210, 1216, 1218, 1223, 1228, 1234, + 1239, 1244, 1248, 1253, 1259, 1264, 1269, 1273, 1278, 1283, 1287, 1292, + 1297, 1302, 1308, 1314, 1320, 1325, 1329, 1334, 1339, 1344, 1348, 1353, + 1358, 1363, 1368, 1219, 1224, 1229, 1235, 1240, 1372, 1245, 1378, 1387, + 1249, 1391, 1254, 1260, 1265, 1395, 1400, 1405, 1409, 1413, 1419, 1423, + 1270, 1426, 1430, 1274, 1436, 1279, 1440, 1444, 1284, 1448, 1453, 1457, + 1460, 1464, 1288, 1293, 1469, 1298, 1475, 1481, 1487, 1493, 1303, 1315, + 1321, 1497, 1501, 1505, 1508, 1326, 1512, 1514, 1519, 1524, 1530, 1535, + 1540, 1544, 1549, 1554, 1559, 1564, 1570, 1575, 1580, 1586, 1592, 1597, + 1601, 1606, 1611, 1616, 1621, 1625, 1633, 1637, 1642, 1647, 1652, 1657, + 1661, 1664, 1669, 1674, 1679, 1684, 1690, 1695, 1699, 1330, 1702, 1707, + 1712, 1335, 1716, 1720, 1727, 1340, 1734, 1345, 1738, 1740, 1745, 1751, + 1349, 1756, 1765, 1354, 1770, 1776, 1359, 1781, 1786, 1789, 1794, 1798, + 1802, 1806, 1809, 1813, 1364, 1369, 1040, 1818, 1824, 1830, 1836, 1842, + 1848, 1854, 1860, 1866, 1871, 1877, 1883, 1889, 1895, 1901, 1907, 1913, + 1919, 1925, 1930, 1935, 1940, 1945, 1950, 1955, 1960, 1965, 1970, 1975, + 1981, 1986, 1992, 1997, 2003, 2009, 2014, 2020, 2026, 2032, 2038, 2043, + 2048, 2050, 2051, 2055, 2059, 2064, 2068, 2072, 2076, 2080, 2083, 2088, + 2092, 2097, 2101, 2105, 2110, 2114, 2117, 2121, 2135, 2139, 2143, 2146, + 2151, 2155, 2159, 2163, 2168, 2173, 2178, 2182, 2187, 2191, 2196, 2203, + 2209, 2214, 2219, 2224, 2230, 2235, 2241, 2246, 2249, 1236, 2251, 2258, + 2266, 2276, 2285, 2299, 2303, 2307, 2320, 2328, 2332, 2337, 2341, 2345, + 2349, 2354, 2359, 2364, 2368, 2371, 2375, 2382, 2389, 2395, 2400, 2405, + 2411, 2417, 2422, 2425, 1742, 2427, 2433, 2437, 2442, 2446, 2450, 1747, + 1753, 2455, 2459, 2462, 2467, 2472, 2477, 2481, 2488, 2493, 2496, 2503, + 2509, 2513, 2517, 2521, 2527, 2533, 2547, 2564, 2579, 2594, 2603, 2608, + 2612, 2617, 2622, 2626, 2638, 2645, 2651, 2199, 2657, 2664, 2670, 2673, + 2680, 2684, 2688, 2692, 2073, 2696, 2701, 2706, 2710, 2718, 2722, 2726, + 2730, 2735, 2740, 2745, 2749, 2754, 2759, 2763, 2768, 2772, 2775, 2779, + 2783, 2788, 2792, 2796, 2802, 2811, 2815, 2819, 2825, 2830, 2837, 2841, + 2851, 2855, 2860, 2864, 2869, 2875, 2880, 2884, 2385, 2888, 2893, 2899, + 2904, 2908, 2913, 2918, 2922, 2928, 2933, 2939, 2943, 2949, 2954, 2959, + 2964, 2969, 2974, 2979, 2984, 2989, 2994, 3000, 3005, 1246, 80, 3011, + 3015, 3019, 3023, 3028, 3032, 3036, 3040, 3044, 3049, 3053, 3058, 3062, + 3065, 3069, 3074, 3078, 3083, 3087, 3091, 3095, 3100, 3104, 3107, 3120, + 3124, 3128, 3132, 3136, 3140, 3143, 3147, 3151, 3156, 3160, 3165, 3170, + 3175, 3179, 3182, 3185, 3191, 3195, 3199, 3202, 3206, 3210, 3213, 3219, + 3224, 3229, 3235, 3240, 3245, 3251, 3257, 3262, 3267, 3272, 1044, 507, + 3277, 3280, 3285, 3289, 3292, 3297, 3302, 3306, 3311, 3315, 3320, 3324, + 3328, 3331, 3337, 3344, 3350, 3355, 3359, 3364, 3368, 3378, 3382, 3386, + 3391, 3396, 3406, 2084, 3411, 3415, 3418, 3424, 3431, 3435, 621, 720, + 3439, 3446, 3453, 3459, 3464, 3470, 3475, 2093, 3479, 3487, 555, 3493, + 3504, 3508, 3518, 2098, 3524, 3529, 3544, 3550, 3557, 3567, 3573, 3578, + 3584, 3587, 3591, 3598, 3603, 3607, 3611, 3615, 3619, 3624, 3630, 3070, + 3635, 3647, 1546, 3654, 3657, 3661, 3664, 3668, 3682, 3686, 3689, 3693, + 3698, 3702, 3706, 3712, 3718, 3723, 3729, 3733, 3741, 3751, 3757, 3762, + 3771, 3779, 3786, 3790, 3799, 3803, 3808, 3813, 3817, 3825, 3829, 3834, + 3838, 2106, 1388, 3844, 3849, 3855, 3860, 3865, 3870, 3875, 3880, 3885, + 3891, 3896, 3902, 3907, 3912, 3917, 3923, 3928, 3933, 3938, 3943, 3949, + 3954, 3960, 3965, 3970, 3975, 3980, 3985, 3990, 3996, 4001, 4006, 344, + 440, 4011, 4017, 4021, 4025, 4030, 4034, 4038, 4041, 4045, 4049, 4053, + 4058, 4062, 4066, 3841, 4072, 4079, 4083, 4096, 4100, 4104, 4108, 4112, + 4116, 4122, 4129, 4133, 4141, 4150, 4156, 4161, 4164, 4168, 4172, 4182, + 4192, 4200, 4207, 4214, 4220, 4226, 4233, 4237, 4242, 4246, 4254, 4259, + 4267, 4272, 4277, 4281, 4286, 4293, 4296, 4300, 4304, 4307, 4313, 4319, + 4323, 4334, 4344, 4359, 4374, 4389, 4404, 4419, 4434, 4449, 4464, 4479, + 4494, 4509, 4524, 4539, 4554, 4569, 4584, 4599, 4614, 4629, 4644, 4659, + 4674, 4689, 4704, 4719, 4734, 4749, 4764, 4779, 4794, 4809, 4824, 4839, + 4854, 4869, 4884, 4899, 4914, 4929, 4944, 4959, 4974, 4989, 5004, 5019, + 5034, 5049, 5064, 5079, 5088, 5097, 5102, 5108, 5112, 5117, 5121, 5124, + 5128, 2846, 5131, 5136, 306, 424, 5142, 5150, 5154, 5158, 5161, 5167, + 5171, 5179, 5185, 5190, 5197, 5204, 5210, 5215, 5222, 5228, 5232, 5237, + 5249, 5260, 5267, 5273, 3092, 5277, 5283, 5288, 5293, 5298, 5304, 5309, + 5314, 5319, 5324, 5330, 5335, 5340, 5346, 5351, 5357, 5362, 5368, 5373, + 5379, 5384, 5389, 5394, 5399, 5404, 5410, 5415, 5420, 5425, 5431, 5437, + 5443, 5449, 5455, 5461, 5467, 5473, 5479, 5485, 5491, 5497, 5502, 5507, + 5512, 5517, 5522, 5527, 5532, 5537, 5543, 5549, 5554, 5560, 5566, 5572, + 5577, 5582, 5587, 5592, 5598, 5604, 5609, 5614, 5619, 5624, 5629, 5635, + 5640, 5646, 5652, 5658, 5664, 5670, 5676, 5682, 5688, 5694, 5160, 5699, + 5703, 5707, 5710, 5717, 5720, 5728, 5733, 5738, 5729, 5743, 5730, 5747, + 5753, 5759, 5764, 5769, 5776, 5781, 5785, 5788, 5792, 2140, 516, 5796, + 5800, 5805, 5811, 5816, 5820, 5823, 5827, 5832, 5836, 5843, 5847, 5851, + 5855, 884, 699, 5858, 5866, 5873, 5880, 5886, 5893, 5901, 5908, 5915, + 5920, 5932, 1266, 1396, 1401, 5943, 1406, 5947, 5951, 5960, 5969, 5975, + 5980, 5984, 5990, 5995, 6002, 6006, 6015, 6024, 6033, 6042, 6047, 6052, + 6064, 6069, 3312, 6073, 6075, 6080, 6084, 6093, 6101, 1410, 825, 3316, + 3321, 6107, 6111, 6120, 6126, 6131, 6134, 6143, 2591, 6149, 6157, 6161, + 6165, 3325, 6169, 6174, 6181, 6187, 6193, 6196, 6198, 6201, 6209, 6217, + 6225, 6228, 6233, 5740, 6236, 6238, 6243, 6248, 6253, 6258, 6263, 6268, + 6273, 6278, 6283, 6288, 6294, 6299, 6304, 6309, 6315, 6320, 6325, 6330, + 6335, 6340, 6345, 6351, 6356, 6361, 6366, 6371, 6376, 6381, 6386, 6391, + 6396, 6401, 6406, 6411, 6416, 6421, 6426, 6431, 6436, 6442, 6448, 6453, + 6458, 6463, 6468, 6473, 2197, 2204, 2210, 6478, 6484, 2236, 2242, 6492, + 6496, 6501, 6505, 6509, 6513, 6518, 6522, 6527, 6531, 6534, 6537, 6543, + 6549, 6555, 6561, 6567, 6573, 6579, 6583, 6587, 6591, 6595, 6599, 6604, + 6611, 6619, 6629, 6634, 6638, 6649, 6662, 6673, 6686, 6697, 6709, 6721, + 6733, 6746, 6759, 6766, 6772, 6779, 6785, 6789, 6794, 6798, 6805, 6813, + 6817, 6823, 6833, 6837, 6842, 6847, 6854, 6860, 5888, 6870, 6874, 6881, + 698, 6885, 6889, 6894, 6899, 6904, 6908, 6914, 6922, 6926, 6936, 6940, + 6946, 6951, 6955, 2132, 6961, 6969, 6978, 6982, 6988, 6993, 6998, 7003, + 7009, 7014, 3708, 7019, 7023, 7029, 7035, 7040, 7045, 7050, 6983, 7056, + 7060, 7067, 7073, 7078, 7082, 7087, 7091, 7100, 6177, 6184, 7105, 2732, + 7109, 7114, 7119, 6989, 7123, 6994, 6999, 7128, 7135, 7142, 7148, 7154, + 7160, 7165, 7170, 7175, 7004, 7010, 7181, 7187, 7192, 7200, 7015, 7205, + 1079, 7208, 7216, 7222, 7228, 7237, 7242, 7248, 7263, 7280, 7299, 7308, + 7316, 7331, 7341, 7351, 7357, 7369, 7378, 7386, 7393, 7400, 7406, 7411, + 7419, 7429, 7436, 7446, 7456, 7466, 7475, 7485, 7499, 7514, 7523, 7531, + 7536, 7540, 7549, 7559, 7569, 7579, 7584, 7588, 7597, 7607, 7618, 7631, + 7644, 7656, 7664, 7669, 7675, 7678, 7682, 7690, 7695, 7699, 7707, 7716, + 7724, 7731, 7742, 7746, 7749, 7755, 7759, 7765, 7772, 7777, 7784, 7791, + 7798, 7805, 7812, 7819, 7824, 7276, 7829, 7836, 7845, 7849, 7861, 7865, + 7868, 7872, 7876, 7880, 7884, 7890, 7895, 7901, 7906, 7911, 7917, 7922, + 7927, 6850, 7932, 7936, 7940, 7944, 7949, 7954, 7960, 7964, 7971, 7976, + 7984, 7988, 7991, 7997, 8004, 8008, 8011, 8016, 8020, 3736, 8026, 8034, + 8040, 6865, 8045, 8051, 8056, 8060, 8063, 8078, 8097, 8109, 8122, 8135, + 8148, 8162, 8175, 8190, 8197, 8203, 8207, 8212, 8218, 8226, 8231, 6011, + 8236, 8239, 8244, 8248, 2737, 877, 8254, 8258, 8264, 8270, 8275, 8281, + 8286, 7024, 8292, 8298, 8303, 8308, 8316, 8322, 8335, 8343, 8350, 8354, + 8362, 8369, 8381, 8391, 8398, 8405, 8414, 8423, 8431, 8436, 8442, 7030, + 8447, 8453, 7036, 8458, 8461, 8468, 8474, 8487, 8498, 8505, 8511, 8520, + 8528, 8535, 8541, 8547, 8552, 8556, 8561, 8070, 8567, 7041, 8574, 8579, + 8586, 8592, 8598, 8603, 8611, 8619, 8626, 8630, 8644, 8654, 8659, 8663, + 8674, 8680, 8685, 8690, 8694, 7046, 8699, 8702, 8707, 8719, 8726, 8731, + 8735, 8740, 8744, 8751, 8757, 7051, 6984, 8764, 2742, 8, 8771, 8776, + 8780, 8786, 8797, 8807, 8816, 8828, 8833, 8837, 8845, 8859, 8863, 8866, + 8874, 8881, 8889, 8893, 8904, 8908, 8915, 8920, 8924, 8930, 8935, 8939, + 8944, 8948, 8951, 8957, 8962, 8968, 8975, 8985, 8994, 9001, 7061, 7068, + 7074, 7079, 9007, 7083, 9013, 9016, 9023, 9038, 9054, 9069, 970, 406, + 9074, 9082, 9089, 9095, 9100, 9105, 7092, 9107, 9111, 9115, 9125, 9130, + 9134, 9143, 9147, 9150, 9157, 9161, 9164, 9172, 9179, 9187, 9191, 9198, + 9202, 9208, 9212, 9216, 9220, 9226, 9230, 9234, 9241, 9245, 9250, 9254, + 9261, 9267, 9275, 9281, 9291, 9296, 9301, 9305, 9313, 3641, 9321, 9326, + 9330, 9334, 9337, 9345, 9352, 9356, 9360, 9365, 9369, 9380, 9386, 9390, + 9393, 9400, 9405, 7101, 9410, 9414, 1704, 4265, 9421, 9426, 9431, 9436, + 9442, 9447, 9453, 9458, 9463, 9468, 9473, 9478, 9483, 9488, 9493, 9498, + 9503, 9508, 9513, 9518, 9523, 9528, 9533, 9539, 9544, 9549, 9554, 9559, + 9564, 9570, 9575, 9580, 9586, 9591, 9597, 9602, 9608, 9613, 9618, 9623, + 9628, 9634, 9639, 9644, 670, 134, 9649, 9653, 9658, 9663, 9667, 9671, + 9675, 9680, 9684, 9689, 9693, 9696, 9700, 9704, 9709, 9719, 9725, 9729, + 9733, 9740, 9748, 9757, 9768, 9775, 9782, 9791, 9800, 9809, 9818, 9827, + 9836, 9846, 9856, 9866, 9876, 9886, 9895, 9905, 9915, 9925, 9935, 9945, + 9955, 9965, 9974, 9984, 9994, 10004, 10014, 10024, 10034, 10043, 10053, + 10063, 10073, 10083, 10093, 10103, 10113, 10123, 10133, 10142, 10152, + 10162, 10172, 10182, 10192, 10202, 10212, 10222, 10232, 10242, 10251, + 10257, 10261, 10264, 10268, 10273, 10280, 10286, 10291, 10295, 10300, + 10304, 10308, 7110, 10314, 10319, 10328, 7115, 10333, 10336, 10342, + 10350, 7120, 10357, 10361, 10365, 10369, 10379, 10384, 10393, 10401, + 10408, 10413, 10420, 10425, 10429, 10432, 10443, 10453, 10462, 10470, + 10481, 10493, 10503, 10507, 10512, 10517, 10521, 10526, 10535, 10539, + 10542, 10549, 10559, 10568, 10575, 10579, 10585, 10590, 10595, 10599, + 10608, 10613, 10619, 10624, 10628, 10637, 10645, 10653, 10660, 10668, + 10680, 10691, 10701, 10708, 10714, 10723, 10734, 10743, 10752, 10760, + 10767, 10776, 10784, 5761, 10788, 10790, 10795, 10801, 10809, 10816, + 10825, 10834, 10843, 10852, 10861, 10870, 10879, 10888, 10898, 10908, + 10917, 10924, 10938, 10945, 10953, 10962, 10968, 10977, 10985, 10994, + 11007, 11015, 11022, 11035, 11041, 11050, 11059, 11064, 11068, 11074, + 11080, 11087, 6864, 11092, 11097, 11104, 11109, 11114, 11118, 11124, + 11132, 11140, 11147, 11155, 11163, 11168, 11174, 11179, 11183, 11194, + 11202, 11208, 11213, 11222, 11228, 11233, 11242, 11256, 3600, 11260, + 11265, 11270, 11276, 11281, 11286, 11290, 11295, 11300, 5760, 11305, + 11310, 11315, 11320, 11324, 11329, 11334, 11339, 11345, 11351, 11356, + 11360, 11365, 11370, 11375, 7124, 11380, 11385, 11390, 11395, 11412, + 11430, 11442, 11455, 11472, 11488, 11505, 11515, 11534, 11545, 11556, + 11567, 11578, 11590, 11601, 11612, 11629, 11640, 11651, 11656, 2317, + 11660, 11663, 11669, 11677, 11685, 11690, 11698, 11706, 11713, 11718, + 11724, 11731, 11739, 11746, 11758, 11763, 9032, 11769, 11778, 11786, + 11793, 11799, 11807, 11814, 11821, 11827, 11836, 11844, 11851, 11859, + 11865, 11872, 11880, 11885, 3372, 1187, 11892, 11895, 11306, 11899, + 11905, 11909, 11921, 11926, 11933, 11939, 11944, 11951, 11311, 11316, + 11955, 11959, 11964, 11968, 11976, 11983, 11990, 12007, 12011, 12014, + 12022, 12028, 3428, 12032, 12034, 12042, 12049, 12059, 12064, 12070, + 12075, 12079, 12085, 12090, 12093, 12100, 12106, 12112, 12117, 12124, + 12130, 12135, 12142, 12146, 12152, 12159, 12165, 12171, 12179, 12185, + 12193, 12199, 12205, 12210, 12217, 12222, 12226, 12231, 12238, 12243, + 12249, 12255, 12261, 12264, 12268, 12280, 12286, 12291, 12298, 12304, + 12310, 12321, 12331, 12340, 12348, 12355, 12365, 12375, 12383, 12386, + 11330, 12391, 11335, 11460, 12399, 12412, 12427, 12438, 11477, 12456, + 12469, 12482, 12493, 8085, 12504, 12517, 12536, 12547, 12558, 12569, + 2542, 12582, 12586, 12594, 12605, 12612, 12618, 12626, 12630, 12636, + 12639, 12649, 12657, 12664, 12672, 12677, 12682, 12689, 12695, 12700, + 12705, 12709, 12713, 12719, 12725, 12730, 12735, 12740, 12744, 11340, + 11346, 11352, 12748, 12756, 12765, 12772, 7000, 12776, 12778, 12783, + 12788, 12794, 12799, 12804, 12809, 12814, 12818, 12824, 12830, 12835, + 12841, 12846, 12851, 12857, 12862, 12867, 12872, 12878, 12883, 12888, + 12894, 12900, 12905, 12912, 12919, 12924, 12928, 12932, 12935, 12943, + 12948, 12955, 12960, 12965, 12975, 12980, 12987, 12993, 13003, 13017, + 13031, 13045, 13059, 13074, 13089, 13106, 13124, 13137, 13143, 13148, + 13153, 13159, 13164, 13169, 13173, 13177, 13182, 13186, 13197, 13203, + 13208, 13213, 13217, 13222, 13228, 13235, 13240, 13244, 13250, 13255, + 13260, 13264, 13270, 13275, 13280, 13287, 13292, 13296, 13300, 13305, + 13310, 13316, 13322, 13327, 13336, 13344, 13351, 13358, 13364, 13370, + 13375, 13380, 13386, 13391, 13397, 13402, 13408, 13414, 13421, 13427, + 13432, 13437, 7166, 13446, 13449, 13455, 13460, 13465, 13475, 13482, + 13487, 13493, 13498, 13504, 13509, 13515, 13521, 13526, 13534, 13541, + 13546, 13552, 13557, 13561, 13570, 13581, 13588, 13596, 13602, 13609, + 13615, 13620, 13624, 13630, 13635, 13640, 13645, 7171, 5777, 2756, 13649, + 13653, 13657, 13661, 13665, 13668, 13675, 13683, 11366, 13690, 13700, + 13708, 13715, 13723, 13733, 13742, 13747, 10458, 10467, 13752, 13762, + 13777, 13783, 13790, 13797, 13803, 13813, 13823, 11371, 13832, 13838, + 13844, 13852, 13860, 13865, 13874, 13882, 13894, 13904, 13914, 13924, + 13933, 13945, 13955, 13965, 13976, 13981, 13993, 14005, 14017, 14029, + 14041, 14053, 14065, 14077, 14089, 14101, 14112, 14124, 14136, 14148, + 14160, 14172, 14184, 14196, 14208, 14220, 14232, 14243, 14255, 14267, + 14279, 14291, 14303, 14315, 14327, 14339, 14351, 14363, 14374, 14386, + 14398, 14410, 14422, 14434, 14446, 14458, 14470, 14482, 14494, 14505, + 14517, 14529, 14541, 14553, 14565, 14577, 14589, 14601, 14613, 14625, + 14636, 14648, 14660, 14672, 14684, 14696, 14708, 14720, 14732, 14744, + 14756, 14767, 14779, 14791, 14803, 14815, 14827, 14839, 14851, 14863, + 14875, 14887, 14898, 14910, 14922, 14934, 14946, 14959, 14972, 14985, + 14998, 15011, 15024, 15037, 15049, 15062, 15075, 15088, 15101, 15114, + 15127, 15140, 15153, 15166, 15179, 15191, 15204, 15217, 15230, 15243, + 15256, 15269, 15282, 15295, 15308, 15321, 15333, 15346, 15359, 15372, + 15385, 15398, 15411, 15424, 15437, 15450, 15463, 15475, 15488, 15501, + 15514, 15527, 15540, 15553, 15566, 15579, 15592, 15605, 15617, 15630, + 15643, 15656, 15669, 15682, 15695, 15708, 15721, 15734, 15747, 15759, + 15770, 15783, 15796, 15809, 15822, 15835, 15848, 15861, 15874, 15887, + 15900, 15912, 15925, 15938, 15951, 15964, 15977, 15990, 16003, 16016, + 16029, 16042, 16054, 16067, 16080, 16093, 16106, 16119, 16132, 16145, + 16158, 16171, 16184, 16196, 16209, 16222, 16235, 16248, 16261, 16274, + 16287, 16300, 16313, 16326, 16338, 16351, 16364, 16377, 16390, 16403, + 16416, 16429, 16442, 16455, 16468, 16480, 16493, 16506, 16519, 16532, + 16545, 16558, 16571, 16584, 16597, 16610, 16622, 16635, 16648, 16661, + 16674, 16687, 16700, 16713, 16726, 16739, 16752, 16764, 16777, 16790, + 16803, 16816, 16829, 16842, 16855, 16868, 16881, 16894, 16906, 16919, + 16932, 16945, 16958, 16971, 16984, 16997, 17010, 17023, 17036, 17048, + 17061, 17074, 17087, 17100, 17113, 17126, 17139, 17152, 17165, 17178, + 17190, 17201, 17209, 17216, 17222, 17226, 17232, 17238, 17246, 17252, + 17257, 7005, 17261, 17268, 17276, 17283, 17290, 8481, 17297, 17306, + 17311, 5793, 17318, 17323, 17326, 17331, 17339, 17346, 17353, 17359, + 17368, 17377, 17383, 17388, 17398, 17405, 17413, 17419, 17429, 17438, + 17442, 17449, 17453, 17458, 17464, 17472, 17476, 11381, 17485, 17491, + 17495, 17501, 17508, 17519, 6829, 17527, 17533, 17538, 17542, 17546, + 7415, 17551, 17559, 17566, 17575, 17582, 17589, 17595, 17599, 17605, + 17611, 17619, 17625, 17632, 17638, 17644, 17648, 17656, 17665, 17670, + 17681, 17686, 17691, 17696, 5966, 17700, 17706, 17713, 17722, 17727, + 17735, 17747, 17752, 17756, 17759, 17765, 17771, 17776, 17780, 17783, + 17794, 17799, 7201, 17806, 7016, 7206, 17811, 17816, 17821, 17826, 17831, + 17836, 17841, 17846, 17851, 17856, 17861, 17866, 17872, 17877, 17882, + 17887, 17892, 17897, 17902, 17907, 17912, 17917, 17923, 17929, 17934, + 17939, 17944, 17949, 17954, 17959, 17964, 17969, 17974, 17980, 17985, + 17990, 17995, 18001, 18007, 18012, 18017, 18022, 18027, 18032, 18037, + 18042, 18047, 18053, 18058, 18063, 18068, 18073, 18079, 18084, 18089, + 18093, 129, 18101, 18105, 18109, 18113, 18118, 18122, 18126, 9788, 18130, + 18135, 18139, 18144, 18148, 18153, 18157, 18163, 18168, 18172, 18176, + 18184, 18188, 18193, 18198, 18202, 18208, 18213, 18217, 18222, 18227, + 18231, 18238, 18242, 18246, 18251, 18255, 18258, 18271, 18276, 18285, + 7238, 18290, 18293, 2605, 2610, 18297, 18303, 18309, 18314, 18319, 18324, + 18330, 18335, 18340, 18344, 18349, 18354, 18360, 18365, 18370, 18376, + 18381, 18385, 18390, 18395, 18400, 18404, 18409, 18414, 18419, 18424, + 18428, 18432, 18437, 2765, 18386, 18441, 18448, 7494, 18460, 18468, + 18391, 18475, 18480, 18396, 18488, 18493, 18498, 18503, 18507, 18512, + 18515, 18519, 18525, 18530, 6856, 1709, 1714, 18534, 18540, 18546, 18551, + 18555, 18559, 18563, 18566, 18572, 18579, 18587, 18593, 18599, 18604, + 18609, 18613, 11741, 12361, 18618, 18630, 18633, 18640, 18644, 18652, + 18663, 18672, 18685, 18695, 18709, 18721, 18735, 18745, 18757, 18763, + 18778, 18802, 18820, 18839, 18852, 18866, 18884, 18900, 18917, 18935, + 18946, 18965, 18982, 19002, 19020, 19032, 19046, 19060, 19072, 19089, + 19108, 19126, 19138, 19156, 19175, 11520, 19188, 19208, 19220, 8116, + 19232, 19237, 19242, 19247, 19253, 19258, 2334, 19262, 19268, 19272, + 19275, 19279, 19287, 19293, 18405, 19297, 19308, 19314, 19320, 19329, + 19336, 19341, 19348, 19354, 19363, 19371, 19381, 19391, 19396, 19405, + 19414, 19425, 19436, 3677, 19446, 19450, 19460, 19468, 19478, 19489, + 19497, 19504, 19510, 19515, 18415, 19519, 19528, 19532, 19537, 19546, + 19554, 19564, 19573, 19579, 19585, 18420, 18425, 19589, 19599, 916, + 19608, 11702, 1154, 19622, 19631, 19639, 19650, 19661, 19671, 19680, + 19689, 19698, 19704, 19713, 19721, 7178, 19727, 19730, 19734, 19739, + 19744, 19752, 18433, 19756, 19762, 19768, 19773, 19778, 19782, 19790, + 19796, 19802, 3351, 19810, 19815, 19820, 19824, 19828, 19835, 19839, + 19847, 19853, 19858, 19862, 19867, 19873, 19877, 19888, 19893, 19897, + 19908, 19912, 19916, 19919, 19923, 19928, 19932, 19936, 903, 19940, + 19945, 19950, 19955, 19960, 19965, 19970, 19975, 19980, 19985, 19990, + 19995, 20000, 20005, 20011, 20016, 20021, 20026, 20031, 20036, 20041, + 20047, 20052, 20057, 20062, 20067, 20072, 20077, 20082, 20088, 20094, + 20099, 20105, 20110, 20115, 5, 20121, 20125, 20129, 20133, 20138, 20142, + 20146, 20150, 20154, 20159, 20163, 20168, 20172, 20175, 20179, 20184, + 20188, 20193, 20197, 20201, 20205, 20210, 20214, 20218, 20228, 20233, + 20237, 20241, 20246, 20251, 20260, 20265, 20270, 20274, 20278, 20290, + 20299, 20308, 20314, 20318, 20322, 20332, 20341, 20349, 20355, 20359, + 20366, 20376, 20385, 20393, 20401, 20408, 20416, 20425, 20434, 20442, + 20447, 20451, 20455, 20458, 20460, 20464, 20468, 20473, 20478, 20482, + 20486, 20489, 20493, 20496, 20500, 20503, 20506, 20510, 20516, 20520, + 20524, 20528, 20533, 20538, 20543, 20547, 20550, 20555, 20561, 20566, + 20572, 20577, 20581, 20585, 20589, 20594, 20598, 20603, 20607, 20614, + 20618, 20621, 20625, 20631, 20637, 20641, 20645, 20650, 20657, 20663, + 20667, 20676, 20680, 20684, 20687, 20693, 20698, 20704, 1471, 1773, + 20709, 20714, 20719, 20724, 20729, 20734, 20739, 2157, 20744, 20745, + 20748, 20752, 20756, 20761, 20765, 20769, 20772, 20777, 20782, 20786, + 20789, 20794, 20798, 20803, 20807, 11714, 20812, 20815, 20818, 20822, + 20826, 20835, 20842, 20847, 20854, 20858, 20862, 20867, 20872, 20876, + 20881, 20893, 20904, 20909, 20913, 20918, 20922, 20925, 20931, 5894, + 2252, 20935, 20951, 7270, 20971, 20980, 20996, 21000, 21003, 21009, + 21019, 21025, 21040, 21052, 21063, 21071, 21080, 21086, 21095, 21105, + 21116, 21127, 21136, 21145, 21153, 21160, 21168, 21181, 21187, 21192, + 21198, 21203, 21211, 21223, 21235, 21249, 21257, 21264, 21273, 21282, + 21290, 21298, 21306, 21313, 21322, 21330, 21340, 21349, 21359, 21368, + 21377, 21385, 21390, 21394, 21397, 21401, 21405, 21409, 21413, 21417, + 21423, 21429, 11759, 21434, 21446, 21452, 7623, 21463, 21473, 21482, + 21486, 21489, 21493, 21499, 21503, 21508, 21517, 21524, 5935, 21531, + 21539, 21546, 21552, 21557, 21563, 21569, 21577, 21581, 21584, 21586, + 21402, 21595, 21601, 21611, 21616, 21622, 21627, 21632, 21637, 21644, + 21653, 21662, 21668, 21673, 21679, 21684, 21691, 21702, 21707, 21711, + 21721, 21725, 21730, 21740, 21749, 21753, 21761, 21768, 21774, 21779, + 21786, 21790, 10323, 21798, 21805, 21812, 18204, 21327, 21817, 21821, + 18952, 21826, 21840, 21856, 21874, 21893, 21910, 21928, 18971, 21945, + 21965, 18988, 21977, 21989, 12443, 22001, 19008, 22015, 22027, 8129, + 22041, 22046, 22051, 22057, 22061, 22066, 22076, 22082, 7994, 22088, + 22090, 22095, 22103, 22107, 21640, 22113, 22120, 22130, 22135, 22139, + 22142, 22148, 22156, 22166, 22182, 22195, 22209, 12461, 22223, 22230, + 22234, 22237, 22242, 22246, 22256, 22261, 22266, 22271, 22279, 22287, + 22296, 22301, 12466, 22305, 22308, 22311, 22316, 22332, 22340, 22348, + 22356, 22361, 22365, 22371, 22377, 22380, 22386, 22398, 22405, 22411, + 22418, 22432, 22445, 22454, 22466, 22477, 22486, 22495, 22503, 22514, + 5917, 22521, 22527, 22532, 22538, 22548, 22557, 22563, 22568, 22575, + 22583, 22595, 22602, 22611, 22619, 22625, 22631, 22636, 22640, 22643, + 22649, 22654, 22658, 22669, 22678, 22686, 22691, 22697, 10921, 6581, + 22702, 22705, 22708, 22714, 22722, 22730, 22734, 22738, 22743, 22746, + 22755, 22763, 22774, 22778, 22784, 22790, 22794, 22800, 22822, 22846, + 22853, 22859, 22870, 22888, 22895, 22903, 22907, 22916, 22929, 22937, + 22949, 22960, 22970, 22984, 22993, 23001, 23013, 7287, 23024, 23035, + 23047, 23057, 23066, 23071, 23075, 23083, 23088, 23092, 23095, 23098, + 23106, 23114, 23123, 23133, 23142, 23148, 23162, 2556, 23184, 23193, + 23203, 23215, 23225, 23233, 23241, 23250, 23255, 23266, 23277, 23281, + 23291, 23300, 23310, 23320, 23328, 23337, 23344, 23352, 23359, 23368, + 23372, 23380, 23387, 23394, 23405, 23420, 23427, 23437, 23446, 23452, + 11054, 23459, 23464, 23468, 23472, 23480, 23486, 23495, 23500, 23510, + 19517, 23514, 23517, 23522, 23527, 23532, 23537, 23542, 23547, 23552, + 23557, 23563, 23568, 23573, 23579, 1242, 639, 23584, 23593, 2300, 23600, + 23605, 23609, 23615, 1275, 506, 343, 23620, 23629, 23637, 23646, 23654, + 23665, 23674, 23682, 23686, 23689, 23697, 23705, 11727, 23710, 23716, + 4101, 23721, 23725, 23731, 23735, 23742, 1437, 23748, 7355, 23755, 23765, + 23773, 23779, 23788, 23796, 23802, 23810, 23817, 23824, 1478, 2338, + 23831, 23837, 23848, 23859, 23867, 23874, 23883, 23891, 23898, 23905, + 23918, 23929, 23948, 1280, 23952, 23957, 23965, 3387, 23969, 23974, 1441, + 20487, 23984, 23988, 23993, 23997, 3333, 24003, 24011, 24018, 24026, + 3388, 260, 24031, 24039, 24047, 24054, 24060, 24065, 24072, 24075, 24081, + 21504, 24087, 106, 24091, 24095, 24101, 24106, 24113, 24119, 2263, 24123, + 24127, 24130, 24133, 24140, 24146, 18500, 24151, 3432, 13175, 24155, + 24158, 24166, 24169, 24179, 24191, 24196, 24200, 24208, 24215, 24221, + 24228, 24235, 24238, 24242, 24246, 1445, 24256, 24258, 24263, 24269, + 24275, 24280, 24285, 24290, 24295, 24300, 24305, 24310, 24315, 24320, + 24325, 24330, 24335, 24340, 24345, 24351, 24357, 24363, 24369, 24374, + 24379, 24384, 24390, 24395, 24400, 24405, 24411, 24416, 24422, 24427, + 24432, 24437, 24442, 24448, 24453, 24459, 24464, 24469, 24474, 24479, + 24485, 24490, 24496, 24501, 24506, 24511, 24516, 24521, 24526, 24531, + 24536, 24541, 24547, 24553, 24559, 24564, 24569, 24574, 24579, 24585, + 24591, 24597, 24603, 24609, 24615, 24620, 24626, 24631, 24636, 24641, + 24646, 24652, 2376, 24657, 2383, 2390, 2647, 24662, 2396, 2406, 24668, + 24672, 24677, 24682, 24688, 24693, 24698, 24702, 24707, 24713, 24718, + 24723, 24729, 24734, 24738, 24743, 24748, 24753, 24758, 24763, 24769, + 24775, 24780, 24784, 24789, 24793, 24798, 24803, 24808, 24812, 24817, + 24822, 24827, 24832, 24838, 24844, 24849, 24853, 24858, 24863, 24868, + 24873, 24878, 24882, 24887, 24892, 24897, 24901, 24906, 24914, 24920, + 24926, 24932, 24937, 24941, 24944, 24948, 24953, 24957, 24962, 24966, + 24969, 24974, 17578, 23752, 24979, 24984, 24988, 24993, 24997, 25001, + 25006, 25010, 25013, 25016, 25020, 25025, 25033, 25037, 25042, 25046, + 25050, 25055, 25060, 25064, 25070, 25075, 25080, 25087, 25094, 25098, + 25101, 25107, 25116, 25123, 25130, 25134, 25139, 25143, 25149, 25155, + 25159, 25165, 25170, 25175, 25182, 25188, 25194, 25200, 25206, 25213, + 25219, 25225, 25231, 25237, 25243, 25249, 25255, 25262, 25268, 25275, + 25281, 25287, 25293, 25299, 25305, 25311, 25317, 25323, 25329, 8917, + 25335, 25340, 25345, 12716, 25350, 25355, 25360, 25366, 25371, 25376, + 25380, 25385, 25390, 25396, 25401, 25406, 25410, 25415, 25420, 25424, + 25429, 25434, 25439, 25443, 25448, 25453, 25458, 25462, 25466, 12060, + 25470, 25479, 25485, 25491, 25500, 25508, 25513, 25517, 25524, 25530, + 25534, 25539, 25548, 25553, 1477, 25559, 25562, 25566, 18541, 18547, + 25572, 25576, 25587, 25598, 25610, 25617, 25624, 25629, 25633, 17235, + 685, 17577, 25641, 25645, 25650, 25656, 25661, 25667, 25672, 25678, + 25683, 8022, 2714, 3282, 25687, 25690, 25696, 25702, 25708, 25715, 25721, + 25727, 25733, 25739, 25745, 25751, 25757, 25763, 25769, 25775, 25781, + 25787, 25794, 25800, 25806, 25812, 25818, 25824, 25827, 25832, 25837, + 25843, 25848, 25853, 25857, 25862, 25868, 25873, 25878, 25884, 25889, + 25895, 25899, 25904, 25909, 25914, 25919, 25923, 25928, 25933, 25938, + 25944, 25950, 25956, 25961, 25965, 25970, 25974, 25982, 3455, 25988, + 25991, 5976, 25995, 26001, 26008, 5985, 26012, 26018, 26025, 26031, + 26040, 26048, 26052, 26059, 26065, 26069, 26072, 26081, 26089, 26093, + 26103, 26113, 26123, 26129, 26139, 26144, 26157, 26171, 26182, 26194, + 26206, 26220, 26233, 26245, 26257, 11561, 26271, 26276, 26281, 26285, + 26289, 26293, 1762, 22475, 26297, 26302, 26307, 26311, 26314, 26319, + 26324, 26330, 26336, 7767, 12395, 26341, 26346, 26351, 26355, 26360, + 25651, 26365, 26370, 26376, 25657, 26381, 26384, 26392, 25662, 26397, + 26403, 26409, 25668, 26414, 26419, 26425, 26430, 26435, 26441, 26447, + 23128, 26452, 26456, 26461, 26466, 26471, 26479, 26483, 26488, 26493, + 26497, 26502, 26507, 26512, 25673, 25679, 26518, 2452, 234, 26521, 26524, + 26528, 26532, 26540, 26547, 26554, 26558, 26561, 26567, 26575, 26583, + 26587, 26591, 26594, 26601, 26605, 26612, 26620, 26628, 26635, 26639, + 635, 292, 26651, 26656, 26661, 26667, 26672, 3466, 26677, 26682, 26687, + 26692, 26697, 18626, 26702, 26707, 26712, 26717, 26723, 26728, 26732, + 26737, 26742, 26747, 26751, 26756, 26761, 26766, 18464, 3472, 26771, + 26776, 26781, 26787, 26792, 26797, 26801, 26806, 26811, 26817, 26822, + 26827, 26831, 26836, 26841, 26846, 26850, 26855, 26860, 26865, 26871, + 26877, 26882, 26886, 26891, 26896, 26901, 26905, 26913, 26917, 26923, + 26927, 26934, 13070, 26940, 26947, 26955, 26962, 26968, 26980, 26986, + 2666, 26990, 26596, 26994, 27005, 27010, 27015, 27020, 27024, 27029, + 18552, 27033, 17591, 27038, 27043, 27049, 27054, 27058, 27062, 27065, + 27071, 27082, 27094, 27099, 27103, 27106, 321, 27110, 27115, 27120, + 27125, 27130, 27135, 27141, 27146, 27151, 27157, 27162, 27168, 27173, + 27179, 27184, 27189, 27194, 27199, 27204, 27209, 27214, 27219, 27225, + 27230, 27235, 27240, 27245, 27250, 27255, 27260, 27266, 27272, 27277, + 27282, 27287, 27292, 27297, 27302, 27307, 27312, 27317, 27322, 27327, + 27332, 27337, 27342, 27347, 27352, 27357, 27362, 27368, 26, 27373, 27377, + 27381, 27389, 27393, 27397, 27400, 27403, 27408, 27412, 27417, 27421, + 27426, 27430, 27435, 27439, 27442, 27444, 27447, 27449, 27453, 27465, + 27474, 27478, 27484, 27489, 27495, 27500, 27505, 27509, 27514, 27521, + 27526, 27532, 27537, 27541, 27548, 21335, 21345, 27552, 27557, 27562, + 27567, 27571, 27578, 6076, 27584, 27593, 27601, 27616, 27630, 27638, + 27649, 27658, 27663, 5243, 27673, 27678, 27682, 27685, 27689, 27693, + 27700, 27705, 6820, 27715, 27717, 27720, 27724, 27728, 27733, 27739, + 27744, 27753, 27759, 27764, 27771, 27775, 27782, 27795, 27803, 27807, + 27817, 27822, 27826, 27830, 27836, 27841, 27851, 27860, 27871, 27879, + 27890, 27899, 27902, 27906, 27914, 27920, 27928, 27935, 27941, 2351, + 27945, 27947, 27952, 27957, 27960, 27962, 27966, 27969, 27973, 27977, + 27980, 27986, 27996, 28001, 28007, 28011, 28016, 28029, 21606, 28035, + 28044, 13898, 26109, 28051, 28056, 28060, 28068, 28075, 28080, 28084, + 28088, 28096, 28102, 28108, 28113, 28117, 28120, 28125, 28138, 28154, + 19078, 28171, 28183, 28200, 28212, 28226, 19095, 19114, 28238, 28250, + 2573, 28264, 28269, 28274, 28278, 28285, 28297, 28303, 28306, 28311, + 18244, 28314, 28318, 28321, 28326, 28331, 28337, 28342, 28347, 28353, + 28359, 28364, 28368, 28373, 28378, 28383, 28387, 28390, 28396, 28401, + 28406, 28411, 28415, 28420, 28426, 28431, 28436, 28442, 28447, 28452, + 28457, 28462, 28467, 28471, 28474, 28480, 28484, 28492, 28499, 28507, + 28517, 28523, 28529, 28533, 28542, 28547, 28552, 8036, 28557, 28564, + 28570, 28575, 28581, 28589, 28596, 28600, 28603, 28614, 28621, 28627, + 28636, 28640, 28643, 28649, 28656, 28662, 28668, 28676, 24055, 28683, + 28691, 28697, 28702, 28708, 28713, 28719, 28723, 28730, 28736, 21619, + 28745, 28750, 28758, 28766, 7383, 4120, 28773, 28777, 28781, 28785, + 28790, 28794, 28798, 28803, 28808, 28812, 17640, 28817, 28821, 28825, + 28829, 28832, 28834, 28839, 28847, 28851, 28858, 28862, 28870, 28877, + 28887, 28891, 28895, 28903, 28909, 28918, 10570, 28924, 28933, 28940, + 28948, 28956, 28964, 28971, 28978, 28985, 28992, 28999, 29004, 29010, + 29027, 29035, 29043, 29050, 380, 29054, 29060, 27654, 29066, 29069, + 29077, 29083, 29089, 29098, 29104, 3420, 12046, 29113, 29120, 29125, + 29129, 29136, 29144, 29153, 29163, 29169, 29177, 29186, 29194, 18248, + 29201, 29208, 29214, 29224, 29233, 29244, 29248, 29254, 29259, 29265, + 29271, 29276, 29289, 29302, 29315, 29322, 29328, 29333, 29337, 1451, + 29341, 29346, 29351, 29356, 29361, 29367, 29372, 29377, 29382, 29387, + 29392, 29397, 29402, 29408, 29414, 29419, 29424, 29430, 29435, 29440, + 29445, 29451, 29456, 29461, 29466, 29471, 29477, 29482, 29487, 29493, + 29498, 29503, 29508, 29513, 29518, 29524, 29529, 29535, 29540, 29546, + 29551, 29556, 29561, 29567, 29573, 29579, 29585, 29591, 29597, 29603, + 29609, 29614, 29619, 29625, 29630, 29635, 29640, 29645, 29650, 29655, + 29660, 29666, 29671, 29676, 29682, 29688, 101, 29693, 29695, 29699, + 29703, 29707, 29712, 29716, 7323, 29720, 29726, 4331, 29732, 29735, + 29740, 29744, 29749, 29753, 29757, 29762, 7869, 29766, 29770, 29774, + 12131, 29779, 29783, 29788, 29793, 29798, 29802, 29809, 21623, 29815, + 29818, 29822, 29827, 29833, 29837, 29843, 29848, 29852, 29856, 29860, + 3317, 3322, 24194, 29863, 29871, 29878, 29882, 29887, 342, 29892, 29898, + 29904, 29908, 29917, 29921, 29925, 29930, 29935, 29939, 29946, 29952, + 29957, 29972, 29987, 30002, 30018, 30036, 7831, 30050, 30055, 30059, + 30067, 27788, 30075, 30079, 30088, 30096, 7546, 11842, 30100, 30103, + 30106, 6089, 3621, 30111, 30119, 30123, 30126, 30130, 30135, 30140, + 30146, 30151, 30155, 30159, 30164, 30168, 30174, 30178, 30185, 30189, + 9256, 30196, 30202, 30207, 30214, 30221, 30228, 23641, 6020, 30235, + 30242, 30249, 30255, 30260, 30267, 30278, 30284, 30289, 30296, 30300, + 30304, 30314, 30325, 30331, 30336, 30341, 30346, 30351, 30355, 30359, + 30365, 2255, 767, 7891, 7896, 7902, 30374, 7907, 7912, 7918, 30379, + 30389, 30393, 7923, 30398, 30401, 30406, 30410, 30415, 30422, 30428, + 30438, 4146, 30447, 30451, 30455, 30465, 30471, 30482, 30488, 30494, + 30499, 30505, 30511, 30516, 30519, 30526, 30532, 30537, 30544, 30551, + 30555, 30565, 30578, 30587, 30596, 30607, 30620, 30629, 30640, 30645, + 30650, 7928, 30656, 30664, 30669, 5094, 21, 30676, 30681, 13284, 30685, + 30688, 30691, 23219, 30695, 23650, 30703, 30707, 30710, 30716, 30722, + 30730, 30736, 30743, 30747, 30751, 23383, 30755, 30764, 30770, 30775, + 30779, 30787, 21669, 30793, 30800, 30806, 30811, 30816, 30820, 30826, + 30831, 30837, 3747, 716, 30844, 30848, 30851, 12054, 30863, 29182, 30874, + 30877, 30884, 30890, 30894, 30900, 30905, 30911, 30916, 30921, 30925, + 30930, 30935, 30945, 30951, 30964, 30970, 30975, 30981, 13193, 1454, 932, + 25770, 25776, 30986, 25782, 25795, 25801, 25807, 30992, 25813, 25819, + 30998, 31004, 14, 31012, 31019, 31023, 31027, 31035, 31039, 31044, 31048, + 31055, 31060, 31064, 31069, 31075, 31080, 31086, 31091, 31095, 31099, + 31103, 31108, 31112, 31117, 31121, 31128, 31133, 31137, 31142, 31146, + 31151, 31155, 31160, 12218, 12223, 31165, 31169, 31172, 31176, 31181, + 31185, 31191, 31198, 31203, 31213, 31218, 31226, 31230, 31233, 31237, + 31242, 31247, 31251, 31256, 10581, 31267, 31271, 31274, 31278, 31282, + 31285, 31289, 6108, 10597, 31292, 31295, 31300, 31304, 31313, 31329, + 31345, 31355, 23138, 31362, 31366, 31371, 31375, 31379, 31384, 31389, + 31393, 31398, 31402, 31406, 22323, 31412, 17702, 31417, 31424, 31432, + 31438, 31445, 31453, 31459, 31463, 31469, 31477, 31481, 31490, 7304, + 31498, 31502, 31510, 31517, 31522, 31526, 31529, 31533, 31536, 31540, + 31547, 31552, 21814, 25825, 31556, 31563, 31569, 31574, 31577, 31579, + 31586, 31593, 31599, 31603, 31606, 31610, 31614, 31618, 31623, 31627, + 31631, 31634, 31638, 31652, 19144, 31671, 31684, 31697, 31710, 19162, + 31725, 8090, 31740, 31746, 31750, 31754, 31761, 31767, 31772, 31778, + 31788, 31800, 31811, 31816, 31823, 31827, 31830, 12589, 31838, 12239, + 31851, 31855, 31859, 31864, 31869, 31873, 31877, 31880, 5750, 23022, + 31885, 31889, 31895, 31904, 31909, 29159, 31915, 31920, 31924, 31929, + 31936, 31940, 31943, 11526, 31948, 31955, 939, 31959, 31964, 31969, + 31975, 31980, 31985, 31989, 31994, 32000, 32005, 32011, 32016, 32022, + 32032, 32037, 32042, 32046, 5245, 5257, 32051, 32054, 32061, 32070, + 32074, 32077, 32081, 32086, 668, 32091, 32097, 23211, 32103, 32108, + 32118, 32127, 32134, 32140, 32144, 32151, 32157, 32164, 32170, 32180, + 32188, 32194, 32200, 32205, 32209, 32216, 32222, 32229, 31619, 548, 1208, + 32235, 32240, 32243, 32249, 32257, 1383, 32262, 32266, 32271, 32278, + 32284, 32288, 32293, 32302, 32309, 32319, 32325, 23237, 32342, 32351, + 32359, 32365, 32370, 32377, 32383, 32391, 32400, 32408, 32413, 32421, + 32427, 32446, 12522, 32460, 32476, 32490, 32496, 32501, 32506, 32511, + 32517, 32522, 32526, 32533, 32538, 32542, 319, 2807, 32549, 32554, 22579, + 32380, 32559, 32564, 32572, 32576, 32579, 32585, 32589, 23287, 32592, + 32596, 32599, 32604, 32608, 32613, 32618, 32622, 32627, 32631, 17511, + 17522, 32635, 32640, 32646, 22292, 32651, 32655, 12702, 32658, 32663, + 32668, 32673, 32678, 32683, 32688, 32693, 453, 43, 25828, 25833, 25838, + 25844, 25849, 25854, 32698, 25858, 32702, 32706, 25863, 25869, 32710, + 25874, 25879, 32718, 32723, 25885, 32728, 32733, 32738, 32743, 32749, + 32755, 25896, 32768, 32774, 25900, 25905, 32778, 25910, 25915, 32781, + 32786, 32790, 25591, 32796, 10746, 32803, 32808, 25920, 32812, 32817, + 32822, 32827, 32831, 32836, 32841, 32847, 32852, 32857, 32863, 32869, + 32874, 32878, 32883, 32888, 32893, 32897, 32902, 32907, 32912, 32918, + 32924, 32930, 32935, 32939, 32944, 32948, 25924, 25929, 25934, 32952, + 32956, 25939, 25945, 25951, 25957, 32968, 21521, 32972, 32976, 32981, + 32986, 32991, 32995, 32999, 33009, 33014, 33019, 33023, 33027, 33030, + 33038, 25966, 1461, 33043, 33051, 33060, 33064, 33072, 33080, 33096, + 33101, 1731, 9398, 33105, 2853, 33117, 33118, 33126, 33133, 33138, 33143, + 7197, 1043, 7950, 33150, 33155, 33158, 33167, 1294, 33172, 33179, 33182, + 33187, 18600, 2485, 33191, 8312, 33201, 33207, 2273, 2283, 33216, 33225, + 27997, 7985, 3565, 29063, 1299, 33235, 33243, 33250, 33255, 33259, 33263, + 19759, 8012, 33271, 33280, 33289, 33297, 33304, 33309, 33322, 33335, + 33347, 33359, 33371, 33384, 33395, 33406, 33414, 33422, 33434, 33446, + 33457, 33466, 33474, 33481, 33493, 33500, 33509, 33516, 33529, 33539, + 33544, 33550, 33555, 33559, 33566, 33570, 33577, 33585, 2451, 33592, + 33603, 33613, 33622, 33630, 33640, 33648, 33658, 33663, 33669, 33680, + 33690, 33699, 33708, 33718, 33727, 33732, 33737, 1687, 37, 33745, 33753, + 33764, 33775, 33785, 33792, 33798, 33803, 33807, 33818, 33828, 33837, + 33848, 13257, 13262, 33853, 33862, 33867, 33877, 33882, 33890, 33898, + 33905, 33911, 8057, 1018, 33915, 33921, 33926, 33929, 2094, 31856, 33937, + 33941, 33944, 1494, 33950, 11019, 1304, 33955, 33968, 33982, 2536, 34000, + 34012, 34024, 2550, 2567, 34038, 34051, 2582, 34065, 34077, 2597, 34091, + 1310, 1316, 1322, 8237, 34096, 34101, 34106, 34110, 34125, 34140, 34155, + 34170, 34185, 34200, 34215, 34230, 34245, 34260, 34275, 34290, 34305, + 34320, 34335, 34350, 34365, 34380, 34395, 34410, 34425, 34440, 34455, + 34470, 34485, 34500, 34515, 34530, 34545, 34560, 34575, 34590, 34605, + 34620, 34635, 34650, 34665, 34680, 34695, 34710, 34725, 34740, 34755, + 34770, 34785, 34800, 34815, 34830, 34845, 34860, 34875, 34890, 34905, + 34920, 34935, 34950, 34965, 34980, 34995, 35010, 35025, 35040, 35055, + 35070, 35085, 35100, 35115, 35130, 35145, 35160, 35175, 35190, 35205, + 35220, 35235, 35250, 35265, 35280, 35295, 35310, 35325, 35340, 35355, + 35370, 35385, 35400, 35415, 35430, 35445, 35460, 35475, 35490, 35505, + 35520, 35535, 35550, 35565, 35580, 35595, 35610, 35625, 35640, 35655, + 35670, 35685, 35700, 35715, 35730, 35745, 35760, 35775, 35790, 35805, + 35820, 35835, 35850, 35865, 35880, 35895, 35910, 35925, 35940, 35955, + 35970, 35985, 36000, 36015, 36030, 36045, 36060, 36075, 36090, 36105, + 36120, 36135, 36150, 36165, 36180, 36195, 36210, 36225, 36240, 36255, + 36270, 36285, 36300, 36315, 36330, 36345, 36360, 36375, 36390, 36405, + 36420, 36435, 36450, 36465, 36480, 36495, 36510, 36525, 36540, 36555, + 36570, 36585, 36600, 36615, 36630, 36645, 36660, 36675, 36690, 36705, + 36720, 36735, 36750, 36765, 36780, 36795, 36810, 36825, 36840, 36855, + 36870, 36885, 36900, 36915, 36930, 36945, 36960, 36975, 36990, 37005, + 37020, 37035, 37050, 37065, 37080, 37095, 37110, 37125, 37140, 37155, + 37170, 37185, 37200, 37215, 37230, 37245, 37260, 37275, 37290, 37305, + 37320, 37335, 37350, 37365, 37380, 37395, 37410, 37425, 37440, 37455, + 37470, 37485, 37500, 37515, 37530, 37545, 37560, 37575, 37590, 37605, + 37620, 37635, 37650, 37665, 37680, 37695, 37710, 37725, 37740, 37755, + 37770, 37785, 37800, 37815, 37830, 37845, 37860, 37875, 37890, 37905, + 37920, 37935, 37950, 37965, 37980, 37995, 38010, 38025, 38040, 38055, + 38070, 38085, 38100, 38115, 38130, 38145, 38160, 38175, 38190, 38205, + 38220, 38235, 38250, 38265, 38280, 38295, 38310, 38325, 38340, 38355, + 38370, 38385, 38400, 38415, 38430, 38445, 38460, 38475, 38490, 38505, + 38520, 38535, 38550, 38565, 38580, 38595, 38610, 38625, 38640, 38655, + 38670, 38685, 38700, 38715, 38730, 38745, 38760, 38775, 38790, 38805, + 38820, 38835, 38850, 38865, 38880, 38895, 38910, 38925, 38940, 38955, + 38970, 38985, 39000, 39015, 39030, 39045, 39060, 39075, 39090, 39105, + 39120, 39135, 39150, 39165, 39180, 39195, 39210, 39225, 39240, 39255, + 39270, 39285, 39300, 39315, 39330, 39345, 39360, 39375, 39390, 39405, + 39420, 39435, 39450, 39465, 39480, 39495, 39510, 39525, 39540, 39555, + 39570, 39585, 39600, 39615, 39630, 39645, 39660, 39675, 39690, 39705, + 39720, 39735, 39750, 39765, 39780, 39795, 39810, 39825, 39840, 39855, + 39870, 39885, 39900, 39915, 39930, 39945, 39960, 39975, 39990, 40005, + 40020, 40035, 40050, 40065, 40080, 40095, 40110, 40125, 40140, 40155, + 40170, 40185, 40200, 40215, 40230, 40245, 40260, 40275, 40290, 40305, + 40320, 40335, 40350, 40365, 40380, 40395, 40410, 40425, 40440, 40455, + 40470, 40485, 40500, 40515, 40530, 40545, 40560, 40575, 40590, 40605, + 40620, 40635, 40650, 40665, 40680, 40695, 40710, 40725, 40740, 40755, + 40770, 40785, 40800, 40815, 40830, 40845, 40860, 40875, 40890, 40905, + 40920, 40935, 40950, 40965, 40980, 40995, 41010, 41025, 41040, 41055, + 41070, 41085, 41100, 41115, 41130, 41145, 41160, 41175, 41190, 41205, + 41220, 41235, 41250, 41265, 41280, 41295, 41310, 41325, 41340, 41355, + 41370, 41385, 41400, 41415, 41430, 41445, 41460, 41475, 41490, 41505, + 41520, 41535, 41550, 41565, 41580, 41595, 41610, 41625, 41640, 41655, + 41670, 41685, 41700, 41715, 41730, 41745, 41761, 41777, 41793, 41809, + 41825, 41841, 41857, 41873, 41889, 41905, 41921, 41937, 41953, 41969, + 41985, 42001, 42017, 42033, 42049, 42065, 42081, 42097, 42113, 42129, + 42145, 42161, 42177, 42193, 42209, 42225, 42241, 42257, 42273, 42289, + 42305, 42321, 42337, 42353, 42369, 42385, 42401, 42417, 42433, 42449, + 42465, 42481, 42497, 42513, 42529, 42545, 42561, 42577, 42593, 42609, + 42625, 42641, 42657, 42673, 42689, 42705, 42721, 42737, 42753, 42769, + 42785, 42801, 42817, 42833, 42849, 42865, 42881, 42897, 42913, 42929, + 42945, 42961, 42977, 42993, 43009, 43025, 43041, 43057, 43073, 43089, + 43105, 43121, 43137, 43153, 43169, 43185, 43201, 43217, 43233, 43249, + 43265, 43281, 43297, 43313, 43329, 43345, 43361, 43377, 43393, 43409, + 43425, 43441, 43457, 43473, 43489, 43505, 43521, 43537, 43553, 43569, + 43585, 43601, 43617, 43633, 43649, 43665, 43681, 43697, 43713, 43729, + 43745, 43761, 43777, 43793, 43809, 43825, 43841, 43857, 43873, 43889, + 43905, 43921, 43937, 43953, 43969, 43985, 44001, 44017, 44033, 44049, + 44065, 44081, 44097, 44113, 44129, 44145, 44161, 44177, 44193, 44209, + 44225, 44241, 44257, 44273, 44289, 44305, 44321, 44337, 44353, 44369, + 44385, 44401, 44417, 44433, 44449, 44465, 44481, 44497, 44513, 44529, + 44545, 44561, 44577, 44593, 44609, 44625, 44641, 44657, 44673, 44689, + 44705, 44721, 44737, 44753, 44769, 44785, 44801, 44817, 44833, 44849, + 44865, 44881, 44897, 44913, 44929, 44945, 44961, 44977, 44993, 45009, + 45025, 45041, 45057, 45073, 45089, 45105, 45121, 45137, 45153, 45169, + 45185, 45201, 45217, 45233, 45249, 45265, 45281, 45297, 45313, 45329, + 45345, 45361, 45377, 45393, 45409, 45425, 45441, 45457, 45473, 45489, + 45505, 45521, 45537, 45553, 45569, 45585, 45601, 45617, 45633, 45649, + 45665, 45681, 45697, 45713, 45729, 45745, 45761, 45777, 45793, 45809, + 45825, 45841, 45857, 45873, 45889, 45905, 45921, 45937, 45953, 45969, + 45985, 46001, 46017, 46033, 46049, 46065, 46081, 46097, 46113, 46129, + 46145, 46161, 46177, 46193, 46209, 46225, 46241, 46257, 46273, 46289, + 46305, 46321, 46337, 46353, 46369, 46385, 46401, 46417, 46433, 46449, + 46465, 46481, 46497, 46513, 46529, 46545, 46561, 46577, 46593, 46609, + 46625, 46641, 46657, 46673, 46689, 46705, 46721, 46737, 46753, 46769, + 46785, 46801, 46817, 46833, 46849, 46865, 46881, 46897, 46913, 46929, + 46945, 46961, 46977, 46993, 47009, 47025, 47041, 47057, 47073, 47089, + 47105, 47121, 47137, 47153, 47169, 47185, 47201, 47217, 47233, 47249, + 47265, 47281, 47297, 47313, 47329, 47345, 47361, 47377, 47393, 47409, + 47425, 47441, 47457, 47473, 47489, 47505, 47521, 47537, 47553, 47569, + 47585, 47601, 47617, 47633, 47649, 47665, 47681, 47697, 47713, 47729, + 47745, 47761, 47777, 47793, 47809, 47825, 47841, 47857, 47873, 47889, + 47905, 47921, 47937, 47953, 47969, 47985, 48001, 48017, 48033, 48049, + 48065, 48081, 48097, 48113, 48129, 48145, 48161, 48177, 48193, 48209, + 48225, 48241, 48257, 48273, 48289, 48305, 48321, 48337, 48353, 48369, + 48385, 48401, 48417, 48433, 48449, 48465, 48481, 48497, 48513, 48529, + 48545, 48561, 48577, 48593, 48609, 48625, 48641, 48657, 48673, 48689, + 48705, 48721, 48737, 48753, 48769, 48785, 48801, 48817, 48833, 48849, + 48865, 48881, 48897, 48913, 48929, 48945, 48961, 48977, 48993, 49009, + 49025, 49041, 49057, 49073, 49089, 49105, 49121, 49137, 49153, 49169, + 49185, 49201, 49217, 49233, 49249, 49265, 49281, 49297, 49313, 49329, + 49345, 49361, 49377, 49393, 49409, 49425, 49441, 49457, 49473, 49489, + 49505, 49521, 49537, 49553, 49569, 49585, 49601, 49617, 49633, 49649, + 49665, 49681, 49697, 49713, 49729, 49745, 49761, 49777, 49793, 49809, + 49825, 49841, 49857, 49873, 49889, 49905, 49921, 49937, 49953, 49969, + 49985, 50001, 50017, 50033, 50049, 50065, 50081, 50097, 50113, 50129, + 50145, 50161, 50177, 50193, 50209, 50225, 50241, 50257, 50273, 50289, + 50305, 50321, 50337, 50353, 50369, 50385, 50401, 50417, 50432, 50441, + 50447, 50453, 50463, 50471, 11823, 13787, 7661, 50484, 1502, 50492, + 22665, 5207, 50498, 50503, 50508, 50513, 50518, 50524, 50529, 50535, + 50540, 50546, 50551, 50556, 50561, 50566, 50572, 50577, 50582, 50587, + 50592, 50597, 50602, 50607, 50613, 50618, 50624, 50631, 2489, 50636, + 50642, 6480, 50646, 50651, 50658, 50666, 40, 50670, 50676, 50681, 50686, + 50690, 50695, 50699, 50703, 8255, 50707, 50717, 50730, 50741, 50754, + 50761, 50767, 50772, 50778, 50784, 50790, 50795, 50800, 50805, 50810, + 50814, 50819, 50824, 50829, 50835, 50841, 50847, 50852, 50856, 50861, + 50866, 50870, 50875, 50880, 50885, 50889, 8271, 8282, 8287, 1545, 50893, + 1550, 50899, 50902, 1581, 50908, 1587, 1593, 8317, 50913, 50921, 50928, + 50932, 50938, 50943, 25620, 50948, 50955, 50960, 50964, 50968, 1598, + 12933, 12944, 50977, 50984, 50989, 50993, 12956, 1602, 30319, 50996, + 51006, 51010, 1607, 31921, 51015, 8437, 8443, 51021, 51033, 51050, 51067, + 51084, 51101, 51118, 51135, 51152, 51169, 51186, 51203, 51220, 51237, + 51254, 51271, 51288, 51305, 51322, 51339, 51356, 51373, 51390, 51407, + 51424, 51441, 51458, 51475, 51492, 51509, 51526, 51543, 51560, 51577, + 51594, 51611, 51628, 51645, 51662, 51679, 51696, 51713, 51730, 51747, + 51764, 51781, 51798, 51815, 51832, 51849, 51866, 51877, 51882, 1612, + 51886, 51892, 7144, 1617, 22912, 51897, 51908, 51918, 51923, 51930, + 51936, 51941, 51946, 51950, 8454, 1622, 8459, 51954, 51959, 51965, 51970, + 51975, 51980, 51985, 51990, 51995, 52000, 52006, 52012, 52018, 52023, + 52027, 52032, 52037, 52041, 52046, 52051, 52056, 52060, 52065, 52071, + 52076, 52081, 52085, 52090, 52095, 52101, 52106, 52111, 52117, 52123, + 52128, 52132, 52137, 52142, 52147, 52151, 52156, 52161, 52166, 52172, + 52178, 52183, 52187, 52191, 52196, 52201, 52206, 24124, 52210, 52215, + 52220, 52226, 52231, 52236, 52240, 52245, 52250, 52256, 52261, 52266, + 52272, 52278, 52283, 52287, 52292, 52297, 52301, 52306, 52311, 52316, + 52322, 52328, 52333, 52337, 52342, 52347, 52351, 52356, 52361, 52366, + 52370, 52373, 26077, 52378, 52386, 13218, 13236, 8557, 52392, 8562, + 52407, 52412, 52423, 52435, 52447, 52459, 2588, 52471, 52476, 52480, + 52486, 52492, 1634, 940, 52497, 52502, 31960, 52506, 52510, 52515, 52519, + 13301, 52524, 52527, 52535, 1638, 8587, 8593, 1643, 52543, 52550, 52555, + 52564, 52574, 52581, 1648, 52588, 52593, 13376, 52597, 52602, 52609, + 52615, 52619, 52629, 13398, 7063, 7070, 1653, 52636, 52642, 52650, 52657, + 52663, 52669, 52674, 52685, 52694, 3498, 25495, 25504, 13438, 1658, 1662, + 52702, 52713, 52718, 1665, 52726, 52731, 52743, 52749, 52754, 1670, + 52759, 52764, 52772, 52780, 52787, 52796, 52804, 52813, 1675, 1680, + 52817, 52824, 13547, 52832, 52838, 52846, 52851, 8727, 52860, 52866, + 52872, 52877, 52885, 8736, 8741, 52893, 52899, 3563, 32038, 52904, 52910, + 52915, 52923, 52930, 52935, 52939, 52945, 1691, 52950, 52953, 977, 52959, + 52964, 52969, 52975, 52980, 52985, 52990, 52995, 53000, 53005, 1700, 9, + 53011, 53015, 53020, 53024, 53028, 53032, 26315, 53037, 53042, 53047, + 53051, 53054, 53058, 53062, 53067, 53071, 53076, 53080, 28322, 28327, + 28332, 53083, 53090, 53096, 31804, 53106, 28338, 28343, 26325, 26331, + 28354, 26337, 53111, 53116, 53120, 53124, 53127, 53131, 53134, 53139, + 53143, 53147, 53150, 53162, 27517, 53169, 12396, 760, 53172, 53176, + 53181, 53185, 10779, 53188, 53195, 53208, 53217, 53222, 53232, 53245, + 53257, 53264, 53269, 53278, 53291, 29283, 53309, 53314, 53321, 53327, + 53332, 53340, 22979, 585, 53346, 53352, 53358, 53363, 26342, 4176, 26356, + 53367, 53377, 53382, 53392, 53407, 53413, 53419, 26361, 25652, 53424, + 53429, 53434, 53438, 53443, 53448, 53452, 4217, 26382, 53456, 53462, 337, + 53472, 53479, 53488, 53494, 53502, 53506, 53510, 53514, 53518, 53523, + 53527, 53533, 53541, 53546, 53550, 53555, 53559, 53563, 53569, 53575, + 53580, 53584, 26398, 53589, 26404, 26410, 53594, 53600, 53605, 53609, + 25669, 13167, 53612, 53616, 53621, 53628, 53634, 53638, 53643, 53649, + 53653, 53657, 53662, 53667, 53671, 53674, 53680, 53685, 53692, 53699, + 53705, 53710, 53715, 53719, 53724, 53730, 53735, 53741, 53746, 53751, + 53756, 53762, 53767, 53772, 53778, 53784, 53790, 26415, 53795, 53800, + 53805, 26426, 53810, 53815, 53820, 53826, 53832, 26431, 53837, 53842, + 53847, 26442, 26448, 53852, 53857, 53862, 53867, 23129, 26453, 26457, + 53872, 53843, 53876, 53882, 53890, 53897, 53903, 53913, 53919, 53926, + 8214, 26462, 53932, 53945, 53954, 53960, 53969, 53975, 19524, 53982, + 53989, 26443, 53999, 54006, 54011, 54015, 54019, 54024, 4251, 54028, + 54033, 54038, 28416, 28421, 54042, 28427, 28432, 54047, 28437, 28443, + 54052, 28448, 54063, 54066, 54078, 54086, 26484, 54090, 54099, 54109, + 54118, 26489, 54123, 54130, 54139, 54145, 54153, 27045, 4069, 54158, + 26498, 54164, 54167, 54173, 54180, 54185, 54190, 19456, 54194, 54200, + 54206, 54211, 54217, 54223, 54228, 765, 29092, 29839, 29845, 54232, + 54236, 54240, 54243, 54256, 54262, 54266, 54269, 54274, 27708, 54278, + 25674, 17585, 54284, 4197, 4205, 6948, 54287, 54292, 54297, 54302, 54307, + 54312, 54317, 54322, 54327, 54332, 54338, 54343, 54348, 54354, 54359, + 54364, 54369, 54374, 54379, 54384, 54390, 54395, 54401, 54406, 54411, + 54416, 54421, 54426, 54431, 54436, 54441, 54446, 54451, 54457, 54462, + 54467, 54472, 54477, 54482, 54487, 54493, 54498, 54503, 54508, 54513, + 54518, 54523, 54528, 54533, 54538, 54544, 54549, 54554, 54559, 54564, + 54570, 54576, 54581, 54587, 54592, 54597, 54602, 54607, 54612, 1495, 235, + 54617, 54621, 54625, 54629, 54633, 54636, 54640, 54645, 54649, 54654, + 54658, 54662, 54666, 54671, 54675, 54680, 54684, 54688, 54695, 11999, + 54704, 54713, 54717, 20701, 54721, 54727, 54735, 54741, 54753, 54757, + 54762, 54768, 54778, 54788, 54794, 54798, 54803, 54809, 54818, 54827, + 54835, 12274, 54839, 54848, 54856, 54867, 54878, 54887, 54891, 54900, + 54910, 54916, 54921, 54927, 54932, 98, 25579, 54943, 21735, 54949, 54956, + 54962, 54966, 54976, 54984, 54989, 54993, 55001, 55005, 55011, 55021, + 1132, 55024, 55027, 55031, 55037, 55044, 55050, 55059, 55068, 55074, + 55080, 55085, 55092, 55099, 55112, 55121, 55130, 55135, 55139, 55146, + 55153, 55160, 55167, 55174, 55179, 55183, 55187, 55190, 55200, 55204, + 55213, 55217, 55222, 55226, 55235, 55243, 55251, 55256, 55260, 55265, + 55270, 55274, 55280, 55292, 55300, 55310, 55317, 55323, 55328, 55332, + 55336, 55340, 55349, 55358, 55367, 55373, 55379, 55385, 55390, 55397, + 55403, 55411, 55418, 9779, 55424, 55430, 55434, 11225, 55438, 55447, + 55453, 55461, 55468, 55472, 55476, 55482, 55490, 55497, 55503, 55514, + 55518, 55522, 55526, 55529, 55535, 55540, 55544, 55548, 55557, 55565, + 55572, 19890, 31572, 55578, 55586, 55590, 55597, 55606, 55614, 55620, + 55625, 55629, 55634, 55638, 55643, 55652, 55656, 55663, 55670, 55678, + 55684, 55695, 55701, 55710, 55717, 55724, 55731, 55738, 55745, 34285, + 55752, 55759, 55764, 55770, 37407, 55774, 55779, 55784, 55790, 55796, + 55802, 55807, 55812, 55817, 55822, 55828, 55833, 55839, 55844, 55850, + 55855, 55860, 55865, 55870, 55875, 55880, 55885, 55891, 55896, 55902, + 55907, 55912, 55917, 55922, 55927, 55932, 55938, 55943, 55948, 55953, + 55958, 55963, 55968, 55973, 55978, 55983, 55988, 55994, 55999, 56004, + 56009, 56014, 56019, 56024, 56029, 56034, 56040, 56045, 56050, 56055, + 56060, 56065, 56070, 56075, 56080, 56085, 56090, 56095, 56100, 56106, + 1816, 216, 30402, 56111, 56114, 56119, 56123, 55247, 56126, 56136, 56143, + 56152, 56162, 56172, 56180, 56188, 56192, 56195, 56202, 56208, 56219, + 56231, 56242, 56249, 1305, 19361, 56259, 2518, 56263, 1087, 13743, 30918, + 56271, 56284, 56288, 56293, 56298, 56303, 56309, 56315, 56320, 6489, + 56325, 56333, 8588, 56338, 56344, 1703, 8600, 669, 56353, 56362, 56372, + 22357, 56381, 56387, 13353, 56393, 56397, 3678, 8890, 56403, 52708, + 56410, 6919, 171, 11159, 56416, 56428, 56432, 56438, 22932, 56442, 8878, + 2623, 4, 56447, 56457, 56463, 56474, 56481, 56487, 56493, 56501, 56508, + 56518, 56528, 56538, 1317, 56547, 56553, 2646, 2652, 6486, 2200, 56557, + 56561, 56570, 56581, 56589, 56597, 56603, 56614, 56625, 56633, 56639, + 8931, 56644, 56652, 56656, 56660, 23273, 56672, 56682, 56688, 56694, + 56704, 56707, 56718, 56728, 56737, 56741, 56748, 1089, 2511, 56758, + 56763, 56771, 56779, 56790, 56804, 11111, 374, 56814, 56818, 56827, + 56835, 56841, 56848, 56854, 56861, 56871, 56879, 3570, 184, 56887, 56898, + 56902, 56914, 23120, 148, 56920, 56925, 56929, 56936, 56942, 56950, + 56957, 6740, 56964, 56973, 3625, 56981, 13399, 56985, 2681, 419, 56990, + 57003, 57008, 1815, 602, 57012, 3631, 57020, 57026, 917, 57036, 57045, + 57050, 11847, 57054, 37617, 57057, 3580, 19507, 57065, 57072, 19549, + 57076, 57083, 57089, 57094, 11861, 57099, 57111, 57117, 57125, 2693, + 1735, 57133, 57135, 57140, 57145, 57150, 57156, 57161, 57166, 57171, + 57176, 57181, 57186, 57192, 57197, 57202, 57207, 57212, 57217, 57222, + 57227, 57232, 57238, 57243, 57248, 57253, 57259, 57264, 57270, 57275, + 57280, 57285, 57290, 57295, 57300, 57305, 57311, 57316, 57322, 57327, + 57332, 57337, 57342, 57347, 57352, 57357, 57362, 57367, 57372, 57376, + 57380, 57385, 57389, 57394, 57399, 57405, 57410, 57414, 57418, 57421, + 57423, 57427, 57430, 57435, 57439, 57443, 57447, 57451, 57460, 26652, + 57463, 26657, 26662, 57470, 57479, 26668, 57484, 26673, 57493, 57498, + 9018, 57502, 57507, 57512, 57516, 57520, 57524, 57528, 57531, 57535, + 6170, 57541, 57546, 57550, 3467, 57553, 57555, 57559, 57562, 57567, + 57571, 57577, 57590, 57596, 57601, 57605, 57613, 57620, 57628, 57637, + 57645, 26678, 57652, 57662, 57671, 57684, 57689, 57694, 57700, 57707, + 57718, 57730, 57737, 57746, 57755, 57764, 57771, 57777, 57784, 57792, + 57799, 57807, 57816, 57824, 57831, 57839, 57848, 57856, 57865, 57875, + 57884, 57892, 57899, 57907, 57916, 57924, 57933, 57943, 57952, 57960, + 57969, 57979, 57988, 57998, 58009, 58019, 58028, 58036, 58043, 58051, + 58060, 58068, 58077, 58087, 58096, 58104, 58113, 58123, 58132, 58142, + 58153, 58163, 58172, 58180, 58189, 58199, 58208, 58218, 58229, 58239, + 58248, 58258, 58269, 58279, 58290, 58302, 58313, 58323, 58332, 58340, + 58347, 58355, 58364, 58372, 58381, 58391, 58400, 58408, 58417, 58427, + 58436, 58446, 58457, 58467, 58476, 58484, 58493, 58503, 58512, 58522, + 58533, 58543, 58552, 58562, 58573, 58583, 58594, 58606, 58617, 58627, + 58636, 58644, 58653, 58663, 58672, 58682, 58693, 58703, 58712, 58722, + 58733, 58743, 58754, 58766, 58777, 58787, 58796, 58806, 58817, 58827, + 58838, 58850, 58861, 58871, 58882, 58894, 58905, 58917, 58930, 58942, + 58953, 58963, 58972, 58980, 58987, 58995, 59004, 59012, 59021, 59031, + 59040, 59048, 59057, 59067, 59076, 59086, 59097, 59107, 59116, 59124, + 59133, 59143, 59152, 59162, 59173, 59183, 59192, 59202, 59213, 59223, + 59234, 59246, 59257, 59267, 59276, 59284, 59293, 59303, 59312, 59322, + 59333, 59343, 59352, 59362, 59373, 59383, 59394, 59406, 59417, 59427, + 59436, 59446, 59457, 59467, 59478, 59490, 59501, 59511, 59522, 59534, + 59545, 59557, 59570, 59582, 59593, 59603, 59612, 59620, 59629, 59639, + 59648, 59658, 59669, 59679, 59688, 59698, 59709, 59719, 59730, 59742, + 59753, 59763, 59772, 59782, 59793, 59803, 59814, 59826, 59837, 59847, + 59858, 59870, 59881, 59893, 59906, 59918, 59929, 59939, 59948, 59958, + 59969, 59979, 59990, 60002, 60013, 60023, 60034, 60046, 60057, 60069, + 60082, 60094, 60105, 60115, 60126, 60138, 60149, 60161, 60174, 60186, + 60197, 60209, 60222, 60234, 60247, 60261, 60274, 60286, 60297, 60307, + 60316, 60324, 60331, 60336, 6029, 60343, 26688, 60348, 60353, 26693, + 60359, 17319, 31449, 60364, 60370, 60376, 60383, 60390, 60395, 60399, + 60403, 60412, 60418, 60430, 60441, 60445, 2936, 6004, 60450, 60453, + 60455, 60459, 60463, 60467, 34097, 60472, 60476, 60479, 60484, 60488, + 60495, 60501, 60505, 60509, 26703, 60512, 60519, 60528, 60536, 60547, + 60555, 60563, 60570, 60577, 60583, 60594, 26708, 60599, 60610, 60622, + 60633, 60641, 2484, 60646, 60659, 60663, 60671, 60676, 60684, 13908, + 60695, 60701, 60708, 60716, 60722, 26713, 60727, 7592, 50467, 60734, + 60737, 60745, 60758, 60771, 60784, 60797, 60804, 60815, 60824, 34102, + 34107, 60829, 60833, 60841, 60848, 60857, 60865, 60871, 60880, 60888, + 60896, 60900, 60909, 60918, 60928, 60941, 60954, 60964, 26718, 60970, + 60977, 60983, 26724, 60988, 60991, 60995, 61003, 61012, 33840, 61020, + 61028, 61035, 61043, 61053, 61062, 61071, 61080, 61088, 61099, 61109, + 7184, 17802, 61118, 61123, 61128, 61132, 61136, 61141, 61147, 61152, + 61157, 61163, 61168, 61173, 17767, 61178, 61185, 61193, 61201, 61206, + 61213, 61220, 61224, 61228, 61236, 61244, 26733, 61250, 61256, 61268, + 61274, 61279, 61290, 61300, 61310, 61322, 61328, 61338, 26738, 61347, + 61356, 61362, 61374, 61385, 61392, 61397, 61401, 61409, 61415, 61420, + 61425, 61432, 61444, 61454, 61463, 61470, 27937, 19731, 61476, 61481, + 61485, 61489, 61494, 61500, 61511, 61524, 61529, 26743, 61534, 61546, + 61555, 61568, 61575, 61584, 61592, 61597, 61603, 1484, 61608, 61613, + 61618, 61623, 61629, 61634, 61639, 61645, 61651, 61656, 61660, 61665, + 61670, 61675, 50973, 61680, 61685, 61690, 61695, 61701, 61707, 61712, + 61716, 61721, 61726, 61731, 61736, 61741, 61745, 61751, 61756, 61765, + 61770, 61775, 61780, 61785, 61789, 61796, 61802, 13605, 13612, 37872, + 61807, 61757, 61809, 26752, 61812, 61821, 61827, 4263, 26757, 61831, + 61837, 61843, 61848, 61852, 61859, 61864, 61874, 61883, 61887, 61893, + 61899, 61905, 61909, 61917, 61924, 61932, 61940, 26762, 61947, 61950, + 61957, 61962, 61966, 61972, 61977, 61981, 61990, 61998, 62004, 62009, + 27544, 62016, 62023, 62029, 62034, 62040, 62047, 62053, 26475, 22688, + 62059, 62064, 62070, 62082, 61790, 61797, 62092, 62097, 62104, 62111, + 62117, 62128, 62133, 6965, 62141, 62144, 62150, 62154, 62158, 62161, + 62167, 26571, 4283, 836, 10621, 62174, 62180, 62186, 62192, 62198, 62204, + 62210, 62216, 62222, 62227, 62232, 62237, 62242, 62247, 62252, 62257, + 62262, 62267, 62272, 62277, 62282, 62287, 62293, 62298, 62303, 62309, + 62314, 62319, 62325, 62331, 62337, 62343, 62349, 62355, 62361, 62367, + 62373, 62378, 62383, 62389, 62394, 62399, 62405, 62410, 62415, 62420, + 62425, 62430, 62435, 62440, 62445, 62450, 62455, 62460, 62465, 62471, + 62476, 62481, 62486, 62492, 62497, 62502, 62507, 62512, 62518, 62523, + 62528, 62533, 62538, 62543, 62548, 62553, 62558, 62563, 62568, 62573, + 62578, 62583, 62588, 62593, 62598, 62603, 62608, 62613, 62619, 62624, + 62629, 62634, 62639, 62644, 62649, 62654, 1846, 138, 62659, 62663, 62667, + 62672, 62680, 62684, 62691, 62699, 62703, 62716, 62720, 62723, 62728, + 62732, 62737, 62741, 62749, 62753, 17327, 62758, 62762, 62766, 62769, + 62777, 62782, 62789, 62795, 62801, 62806, 62814, 56276, 62821, 62826, + 62831, 62835, 62839, 62842, 62847, 62852, 62856, 62859, 62865, 62869, + 62879, 62888, 62891, 62904, 62912, 62920, 62930, 62943, 62950, 62961, + 62967, 62972, 62977, 62983, 62992, 61536, 63000, 63006, 63014, 63018, + 63022, 63028, 63036, 63048, 63060, 63067, 63071, 63082, 63090, 63097, + 63109, 63117, 63125, 63132, 63138, 63148, 63157, 63162, 63172, 63176, + 63180, 63190, 63197, 63209, 63221, 63230, 60649, 63237, 63248, 63262, + 63270, 63280, 63287, 63295, 63304, 63312, 63322, 63331, 63342, 63354, + 63363, 63373, 63380, 63389, 63404, 63413, 63426, 63441, 63445, 63457, + 63468, 63479, 63490, 63500, 63511, 63519, 63525, 63535, 63541, 63546, + 63552, 63558, 63563, 63570, 7469, 13928, 63576, 63581, 63588, 63594, + 63599, 63603, 63606, 63609, 63611, 63618, 63629, 63634, 63638, 63644, + 63649, 63657, 56720, 56730, 63663, 63673, 63680, 63686, 63691, 63700, + 63707, 63715, 63724, 63730, 63736, 63743, 63750, 63755, 63759, 63764, + 63769, 63774, 63778, 62711, 63787, 63791, 63802, 63812, 13937, 63823, + 63831, 13949, 63838, 22598, 63842, 63846, 63851, 63868, 63880, 8169, + 63892, 63897, 63902, 63907, 63911, 63914, 63919, 63924, 63930, 63935, + 4075, 17378, 63940, 63945, 63951, 63958, 63963, 63968, 63974, 63980, + 63986, 63991, 63997, 64001, 64015, 64023, 64031, 64037, 64042, 64049, + 64054, 64059, 64067, 64072, 64078, 64083, 64088, 64092, 64095, 64113, + 64132, 64145, 64159, 64175, 64182, 64189, 64195, 64202, 64207, 64213, + 64219, 64224, 64229, 64245, 8182, 64259, 64266, 64270, 64273, 64278, + 64283, 64290, 64295, 64300, 64305, 64309, 64317, 9090, 64326, 64331, + 64337, 9101, 64342, 64345, 64350, 64360, 64369, 64374, 64382, 64389, + 64400, 64410, 64415, 64420, 64427, 64433, 64438, 64445, 64454, 64462, + 64468, 64475, 64481, 64485, 13451, 2910, 64490, 64494, 64500, 64506, + 64513, 64517, 64538, 64560, 64576, 64593, 64612, 64621, 64631, 64638, + 64645, 22517, 64651, 64655, 64663, 64669, 64677, 64681, 64689, 64696, + 64700, 64706, 64712, 64717, 3375, 34302, 64723, 64727, 64731, 64735, + 64740, 64745, 64750, 64756, 64761, 64767, 64772, 64777, 64781, 64786, + 34317, 64790, 64795, 64803, 64807, 64812, 64819, 64828, 64834, 64841, + 64845, 64852, 64861, 64866, 64874, 64883, 64889, 64894, 64899, 64905, + 64911, 64916, 64920, 64924, 64927, 64935, 64945, 64950, 32057, 64958, + 64970, 64974, 64986, 64997, 65004, 65010, 65017, 65029, 65036, 65042, + 17439, 65046, 65052, 65058, 65063, 65068, 5084, 65073, 65079, 65087, + 65096, 65100, 65106, 64782, 24971, 65111, 65113, 65118, 65123, 65128, + 65133, 65138, 65143, 65148, 65153, 65158, 65163, 65168, 65173, 65178, + 65183, 65189, 65194, 65199, 65204, 65209, 65214, 65219, 65224, 65229, + 65235, 65241, 65247, 65252, 65257, 65269, 65274, 1852, 67, 65279, 65284, + 26772, 26777, 26782, 26788, 26793, 65288, 26798, 65310, 65312, 65316, + 65320, 65325, 65329, 26802, 65333, 26807, 65341, 65344, 26812, 18179, + 65353, 65357, 1415, 65362, 26823, 65365, 65370, 21354, 21364, 65375, + 65379, 65384, 65390, 65395, 65404, 65409, 65416, 65422, 65427, 65432, + 65437, 65445, 26828, 1110, 65452, 65458, 65463, 65468, 65473, 65479, + 65484, 65491, 65497, 65502, 65510, 65516, 13959, 65523, 29296, 65536, + 65541, 65547, 65560, 65564, 65573, 65580, 65586, 65594, 65603, 65610, + 65616, 26832, 65619, 65626, 65632, 65636, 65639, 65647, 65661, 65668, + 26837, 65674, 26842, 65681, 28422, 65691, 65696, 65700, 17717, 65705, + 65710, 26847, 54013, 65714, 65719, 65725, 65731, 65738, 65744, 65749, + 65754, 65763, 65775, 65790, 27067, 65796, 13117, 26851, 65800, 65807, + 26856, 65813, 65822, 65829, 65838, 65844, 65849, 65855, 26861, 65860, + 65869, 65878, 65885, 65891, 65897, 65905, 65909, 26866, 65912, 26872, + 26878, 65917, 65925, 65935, 26883, 65939, 65941, 65945, 65950, 65954, + 65958, 65964, 65969, 65973, 65978, 2915, 65982, 65989, 65993, 66002, + 66010, 66017, 66022, 66027, 66031, 66035, 66038, 66044, 66052, 66058, + 66062, 66067, 66074, 66080, 28799, 66085, 66088, 66093, 66097, 66102, + 66107, 66111, 66119, 21373, 21382, 66125, 66131, 66137, 66142, 66146, + 66149, 66159, 66164, 66170, 66176, 66184, 66189, 28438, 66193, 66201, + 66207, 66212, 66217, 50653, 28444, 66223, 66228, 66232, 66237, 66242, + 66247, 66251, 66256, 66261, 66267, 66272, 66277, 66283, 66289, 66294, + 66298, 66303, 66308, 66313, 66317, 66322, 66327, 66332, 66338, 66344, + 66350, 66355, 66359, 66364, 66369, 66373, 66378, 66383, 66388, 66392, + 26887, 66400, 66404, 66412, 18521, 66423, 66429, 66436, 66441, 66450, + 66455, 66459, 66464, 66472, 66480, 66487, 56422, 66493, 66501, 66508, + 66519, 66525, 26897, 66528, 66535, 32183, 66539, 66544, 66549, 6877, + 66553, 66561, 66568, 66575, 66581, 66445, 66595, 66601, 66605, 66608, + 66616, 66623, 66628, 66641, 66648, 66653, 66658, 66661, 66668, 66672, + 66682, 66692, 66701, 66712, 66717, 66721, 28813, 17641, 32629, 66729, + 66734, 66739, 66744, 66749, 66754, 66759, 66763, 66768, 66773, 66778, + 66783, 66788, 66793, 66797, 66802, 66807, 66811, 66815, 66819, 66823, + 66828, 66833, 66837, 66842, 66846, 66850, 66855, 66860, 66865, 66870, + 66874, 66879, 66884, 66888, 66893, 66898, 66903, 66908, 66913, 66918, + 66923, 66928, 66933, 66938, 66943, 66948, 66953, 66958, 66963, 66968, + 66973, 66978, 66983, 66988, 66992, 66997, 67002, 67007, 67012, 67017, + 67022, 67027, 67032, 67037, 67042, 67047, 67051, 67056, 67060, 67065, + 67070, 67075, 67080, 67085, 67090, 67095, 67100, 67105, 67109, 67113, + 67118, 67123, 67127, 67132, 67137, 67141, 67146, 67151, 67156, 67161, + 67165, 67170, 67175, 67179, 67184, 67188, 67192, 67196, 67200, 67205, + 67209, 67213, 67217, 67221, 67225, 67229, 67233, 67237, 67241, 67246, + 67251, 67256, 67261, 67266, 67271, 67276, 67281, 67286, 67291, 67295, + 67299, 67303, 67307, 67311, 67315, 67320, 67324, 67329, 67333, 67338, + 67343, 67347, 67351, 67356, 67360, 67364, 67368, 67372, 67376, 67380, + 67384, 67388, 67392, 67396, 67400, 67404, 67408, 67412, 67417, 67422, + 67426, 67430, 67434, 67438, 67442, 67446, 67451, 67455, 67459, 67463, + 67467, 67471, 67475, 67480, 67484, 67489, 67493, 67497, 67501, 67505, + 67509, 67513, 67517, 67521, 67525, 67529, 67533, 67538, 67542, 67546, + 67550, 67554, 67558, 67562, 67566, 67570, 67574, 67578, 67582, 67587, + 67591, 67595, 67600, 67605, 67609, 67613, 67617, 67621, 67625, 67629, + 67633, 67637, 67642, 67646, 67651, 67655, 67660, 67664, 67669, 67673, + 67679, 67684, 67688, 67693, 67697, 67702, 67706, 67711, 67715, 67720, + 1503, 67724, 1741, 1746, 67728, 67732, 2711, 67736, 1384, 67741, 1350, + 67745, 67749, 67756, 67763, 67777, 2727, 5159, 67786, 67794, 67801, + 67808, 67821, 67834, 67845, 67850, 67857, 67869, 3703, 9162, 67873, + 67878, 67887, 67897, 67902, 67906, 67911, 67918, 67924, 67936, 1355, + 11688, 67946, 67952, 67966, 67978, 67987, 67996, 68005, 68013, 68024, + 68032, 3742, 68042, 68051, 68057, 68064, 28919, 68069, 2755, 10316, + 68073, 68080, 6828, 68089, 2760, 26495, 68095, 68102, 68108, 68115, + 68121, 68128, 68138, 68147, 68158, 68165, 68171, 68181, 68189, 68195, + 68210, 68216, 68221, 68228, 68231, 68237, 68244, 68250, 68258, 68267, + 68275, 68281, 68290, 33842, 68304, 68309, 11709, 68315, 68328, 68337, + 68345, 68352, 68356, 68360, 68363, 68370, 68377, 68385, 68393, 68402, + 68410, 11645, 68418, 68423, 68427, 68439, 68446, 68455, 793, 68465, 2776, + 68474, 68478, 68484, 68497, 68509, 68519, 68528, 68540, 68548, 68557, + 68568, 68579, 68589, 68599, 68608, 68616, 8811, 68623, 68627, 68632, + 68637, 68643, 1360, 9217, 68650, 68661, 68670, 68678, 68687, 68695, + 68711, 68722, 68738, 68748, 68769, 68782, 68795, 68800, 68806, 22084, + 68812, 68815, 68822, 68832, 6139, 68839, 68844, 68849, 68857, 7517, 7526, + 68865, 68876, 2784, 2789, 68882, 8419, 68888, 68895, 68902, 68915, 2193, + 50, 68920, 68925, 68935, 68941, 68945, 68950, 68954, 2812, 68966, 68974, + 68985, 68996, 69005, 69010, 69016, 69021, 69031, 69041, 69046, 69052, + 69057, 69066, 17674, 69070, 3804, 12, 69075, 69082, 766, 69088, 69093, + 52873, 69098, 69103, 69109, 69117, 69122, 69129, 69135, 30869, 33740, + 69141, 2816, 32, 69151, 69164, 69172, 69177, 69183, 2838, 25639, 69188, + 69196, 69203, 69208, 50895, 53694, 69217, 1686, 1795, 69222, 69227, + 69234, 1799, 237, 69241, 69247, 69252, 69259, 1803, 69264, 69270, 69275, + 69287, 4250, 69297, 1810, 69303, 69308, 69315, 69322, 69337, 69344, + 69352, 69356, 69360, 69372, 69377, 69381, 23272, 3830, 69385, 69396, + 69400, 69404, 69410, 69414, 69423, 69427, 69438, 69442, 2238, 69446, + 69448, 2935, 7189, 69456, 69461, 69465, 69474, 69480, 2905, 13622, 69484, + 69497, 69515, 69520, 69528, 69536, 69546, 69558, 69571, 69578, 69594, + 69601, 69607, 958, 69614, 69621, 69631, 69640, 69652, 34706, 69660, 2919, + 9391, 69663, 69671, 69675, 2923, 69679, 17523, 52946, 3514, 69683, 2929, + 69687, 69697, 69703, 69709, 69715, 69721, 69727, 69733, 69739, 69745, + 69751, 69757, 69763, 69769, 69775, 69781, 69787, 69793, 69799, 69805, + 69811, 69817, 69823, 69829, 69835, 69841, 69847, 69854, 69861, 69867, + 69873, 69879, 69885, 69891, 69897, 1365, 12692, 9411, 69903, 69908, + 69913, 69918, 69923, 69928, 69933, 69938, 69943, 69948, 69953, 69958, + 69963, 69968, 69973, 69978, 69983, 69988, 69993, 69998, 70003, 70008, + 70013, 70018, 70023, 70028, 70034, 70039, 70044, 70050, 70055, 70061, + 70066, 70071, 70077, 70082, 70087, 70092, 70097, 70102, 70107, 70112, + 70117, 69698, 69704, 69710, 69716, 69722, 69728, 69734, 69740, 69746, + 69752, 69758, 69764, 69770, 69776, 69782, 70123, 69788, 69794, 69800, + 70129, 69806, 69812, 69818, 69824, 69830, 69836, 69842, 69862, 70135, + 70141, 69868, 70147, 69874, 69880, 69886, 69892, 69898, 2950, 2955, + 70153, 70158, 70161, 70167, 70173, 70180, 70185, 70190, 2243, }; /* code->name phrasebook */ #define phrasebook_shift 7 -#define phrasebook_short 222 +#define phrasebook_short 216 static unsigned char phrasebook[] = { - 0, 237, 69, 229, 165, 76, 231, 199, 76, 65, 53, 237, 179, 53, 235, 86, - 53, 230, 142, 229, 172, 42, 228, 180, 41, 228, 180, 231, 198, 79, 53, - 237, 67, 227, 193, 246, 162, 240, 121, 233, 104, 21, 240, 126, 21, 118, - 21, 113, 21, 166, 21, 158, 21, 173, 21, 183, 21, 194, 21, 187, 21, 192, - 237, 66, 230, 140, 231, 190, 53, 237, 51, 53, 228, 175, 53, 233, 82, 76, - 230, 145, 253, 113, 7, 6, 1, 57, 7, 6, 1, 254, 185, 7, 6, 1, 254, 194, 7, - 6, 1, 222, 222, 7, 6, 1, 72, 7, 6, 1, 254, 191, 7, 6, 1, 214, 7, 6, 1, - 212, 7, 6, 1, 74, 7, 6, 1, 254, 192, 7, 6, 1, 254, 186, 7, 6, 1, 149, 7, - 6, 1, 185, 7, 6, 1, 199, 7, 6, 1, 73, 7, 6, 1, 254, 187, 7, 6, 1, 254, - 196, 7, 6, 1, 146, 7, 6, 1, 193, 7, 6, 1, 254, 183, 7, 6, 1, 66, 7, 6, 1, - 196, 7, 6, 1, 254, 195, 7, 6, 1, 254, 184, 7, 6, 1, 254, 190, 7, 6, 1, - 254, 193, 42, 37, 104, 235, 37, 233, 104, 41, 37, 104, 230, 125, 235, 24, - 184, 240, 138, 240, 163, 235, 24, 7, 3, 1, 57, 7, 3, 1, 254, 185, 7, 3, - 1, 254, 194, 7, 3, 1, 222, 222, 7, 3, 1, 72, 7, 3, 1, 254, 191, 7, 3, 1, - 214, 7, 3, 1, 212, 7, 3, 1, 74, 7, 3, 1, 254, 192, 7, 3, 1, 254, 186, 7, - 3, 1, 149, 7, 3, 1, 185, 7, 3, 1, 199, 7, 3, 1, 73, 7, 3, 1, 254, 187, 7, - 3, 1, 254, 196, 7, 3, 1, 146, 7, 3, 1, 193, 7, 3, 1, 254, 183, 7, 3, 1, - 66, 7, 3, 1, 196, 7, 3, 1, 254, 195, 7, 3, 1, 254, 184, 7, 3, 1, 254, - 190, 7, 3, 1, 254, 193, 42, 240, 137, 104, 61, 240, 138, 41, 240, 137, - 104, 205, 233, 173, 237, 69, 233, 70, 229, 165, 76, 248, 7, 53, 241, 215, - 53, 233, 112, 53, 254, 19, 53, 237, 150, 125, 235, 135, 53, 219, 232, - 103, 53, 233, 204, 235, 197, 230, 156, 227, 185, 47, 240, 117, 231, 199, - 76, 190, 53, 246, 227, 235, 69, 231, 131, 53, 235, 16, 237, 177, 53, 231, - 122, 53, 229, 163, 113, 229, 163, 166, 240, 159, 235, 24, 244, 142, 53, - 235, 201, 53, 237, 44, 246, 164, 233, 79, 229, 163, 118, 232, 228, 235, - 197, 230, 156, 227, 133, 47, 240, 117, 231, 199, 76, 237, 80, 233, 76, - 168, 233, 155, 237, 80, 233, 76, 168, 240, 170, 237, 80, 233, 76, 152, - 232, 41, 233, 70, 233, 82, 76, 7, 6, 1, 102, 2, 237, 36, 7, 6, 1, 102, 2, - 155, 7, 6, 1, 102, 2, 229, 162, 7, 6, 1, 102, 2, 205, 7, 6, 1, 102, 2, - 219, 7, 6, 1, 102, 2, 246, 174, 46, 7, 6, 1, 253, 4, 7, 6, 1, 255, 62, 2, - 233, 79, 7, 6, 1, 161, 2, 237, 36, 7, 6, 1, 161, 2, 155, 7, 6, 1, 161, 2, - 229, 162, 7, 6, 1, 161, 2, 219, 7, 6, 1, 255, 55, 2, 237, 36, 7, 6, 1, - 255, 55, 2, 155, 7, 6, 1, 255, 55, 2, 229, 162, 7, 6, 1, 255, 55, 2, 219, - 7, 6, 1, 246, 242, 7, 6, 1, 255, 60, 2, 205, 7, 6, 1, 130, 2, 237, 36, 7, - 6, 1, 130, 2, 155, 7, 6, 1, 130, 2, 229, 162, 7, 6, 1, 130, 2, 205, 7, 6, - 1, 130, 2, 219, 227, 134, 53, 7, 6, 1, 130, 2, 82, 7, 6, 1, 97, 2, 237, - 36, 7, 6, 1, 97, 2, 155, 7, 6, 1, 97, 2, 229, 162, 7, 6, 1, 97, 2, 219, - 7, 6, 1, 255, 64, 2, 155, 7, 6, 1, 237, 219, 7, 3, 1, 240, 235, 193, 7, - 3, 1, 102, 2, 237, 36, 7, 3, 1, 102, 2, 155, 7, 3, 1, 102, 2, 229, 162, - 7, 3, 1, 102, 2, 205, 7, 3, 1, 102, 2, 219, 7, 3, 1, 102, 2, 246, 174, - 46, 7, 3, 1, 253, 4, 7, 3, 1, 255, 62, 2, 233, 79, 7, 3, 1, 161, 2, 237, - 36, 7, 3, 1, 161, 2, 155, 7, 3, 1, 161, 2, 229, 162, 7, 3, 1, 161, 2, - 219, 7, 3, 1, 255, 55, 2, 237, 36, 7, 3, 1, 255, 55, 2, 155, 7, 3, 1, - 255, 55, 2, 229, 162, 7, 3, 1, 255, 55, 2, 219, 7, 3, 1, 246, 242, 7, 3, - 1, 255, 60, 2, 205, 7, 3, 1, 130, 2, 237, 36, 7, 3, 1, 130, 2, 155, 7, 3, - 1, 130, 2, 229, 162, 7, 3, 1, 130, 2, 205, 7, 3, 1, 130, 2, 219, 233, - 130, 53, 7, 3, 1, 130, 2, 82, 7, 3, 1, 97, 2, 237, 36, 7, 3, 1, 97, 2, - 155, 7, 3, 1, 97, 2, 229, 162, 7, 3, 1, 97, 2, 219, 7, 3, 1, 255, 64, 2, - 155, 7, 3, 1, 237, 219, 7, 3, 1, 255, 64, 2, 219, 7, 6, 1, 102, 2, 235, - 16, 7, 3, 1, 102, 2, 235, 16, 7, 6, 1, 102, 2, 237, 46, 7, 3, 1, 102, 2, - 237, 46, 7, 6, 1, 102, 2, 235, 47, 7, 3, 1, 102, 2, 235, 47, 7, 6, 1, - 255, 62, 2, 155, 7, 3, 1, 255, 62, 2, 155, 7, 6, 1, 255, 62, 2, 229, 162, - 7, 3, 1, 255, 62, 2, 229, 162, 7, 6, 1, 255, 62, 2, 56, 46, 7, 3, 1, 255, - 62, 2, 56, 46, 7, 6, 1, 255, 62, 2, 237, 43, 7, 3, 1, 255, 62, 2, 237, - 43, 7, 6, 1, 255, 63, 2, 237, 43, 7, 3, 1, 255, 63, 2, 237, 43, 7, 6, 1, - 255, 63, 2, 82, 7, 3, 1, 255, 63, 2, 82, 7, 6, 1, 161, 2, 235, 16, 7, 3, - 1, 161, 2, 235, 16, 7, 6, 1, 161, 2, 237, 46, 7, 3, 1, 161, 2, 237, 46, - 7, 6, 1, 161, 2, 56, 46, 7, 3, 1, 161, 2, 56, 46, 7, 6, 1, 161, 2, 235, - 47, 7, 3, 1, 161, 2, 235, 47, 7, 6, 1, 161, 2, 237, 43, 7, 3, 1, 161, 2, - 237, 43, 7, 6, 1, 255, 65, 2, 229, 162, 7, 3, 1, 255, 65, 2, 229, 162, 7, - 6, 1, 255, 65, 2, 237, 46, 7, 3, 1, 255, 65, 2, 237, 46, 7, 6, 1, 255, - 65, 2, 56, 46, 7, 3, 1, 255, 65, 2, 56, 46, 7, 6, 1, 255, 65, 2, 233, 79, - 7, 3, 1, 255, 65, 2, 233, 79, 7, 6, 1, 255, 66, 2, 229, 162, 7, 3, 1, - 255, 66, 2, 229, 162, 7, 6, 1, 255, 66, 2, 82, 7, 3, 1, 255, 66, 2, 82, - 7, 6, 1, 255, 55, 2, 205, 7, 3, 1, 255, 55, 2, 205, 7, 6, 1, 255, 55, 2, - 235, 16, 7, 3, 1, 255, 55, 2, 235, 16, 7, 6, 1, 255, 55, 2, 237, 46, 7, - 3, 1, 255, 55, 2, 237, 46, 7, 6, 1, 255, 55, 2, 235, 47, 7, 3, 1, 255, - 55, 2, 235, 47, 7, 6, 1, 255, 55, 2, 56, 46, 7, 3, 1, 235, 46, 74, 7, 6, - 20, 253, 231, 7, 3, 20, 253, 231, 7, 6, 1, 255, 73, 2, 229, 162, 7, 3, 1, - 255, 73, 2, 229, 162, 7, 6, 1, 255, 67, 2, 233, 79, 7, 3, 1, 255, 67, 2, - 233, 79, 7, 3, 1, 250, 186, 7, 6, 1, 255, 58, 2, 155, 7, 3, 1, 255, 58, - 2, 155, 7, 6, 1, 255, 58, 2, 233, 79, 7, 3, 1, 255, 58, 2, 233, 79, 7, 6, - 1, 255, 58, 2, 237, 43, 7, 3, 1, 255, 58, 2, 237, 43, 7, 6, 1, 255, 58, - 2, 237, 44, 246, 164, 7, 3, 1, 255, 58, 2, 237, 44, 246, 164, 7, 6, 1, - 255, 58, 2, 82, 7, 3, 1, 255, 58, 2, 82, 7, 6, 1, 255, 60, 2, 155, 7, 3, - 1, 255, 60, 2, 155, 7, 6, 1, 255, 60, 2, 233, 79, 7, 3, 1, 255, 60, 2, - 233, 79, 7, 6, 1, 255, 60, 2, 237, 43, 7, 3, 1, 255, 60, 2, 237, 43, 7, - 3, 1, 255, 60, 234, 197, 254, 205, 229, 172, 7, 6, 1, 247, 0, 7, 3, 1, - 247, 0, 7, 6, 1, 130, 2, 235, 16, 7, 3, 1, 130, 2, 235, 16, 7, 6, 1, 130, - 2, 237, 46, 7, 3, 1, 130, 2, 237, 46, 7, 6, 1, 130, 2, 47, 155, 7, 3, 1, - 130, 2, 47, 155, 7, 6, 20, 253, 15, 7, 3, 20, 253, 15, 7, 6, 1, 255, 57, - 2, 155, 7, 3, 1, 255, 57, 2, 155, 7, 6, 1, 255, 57, 2, 233, 79, 7, 3, 1, - 255, 57, 2, 233, 79, 7, 6, 1, 255, 57, 2, 237, 43, 7, 3, 1, 255, 57, 2, - 237, 43, 7, 6, 1, 255, 59, 2, 155, 7, 3, 1, 255, 59, 2, 155, 7, 6, 1, - 255, 59, 2, 229, 162, 7, 3, 1, 255, 59, 2, 229, 162, 7, 6, 1, 255, 59, 2, - 233, 79, 7, 3, 1, 255, 59, 2, 233, 79, 7, 6, 1, 255, 59, 2, 237, 43, 7, - 3, 1, 255, 59, 2, 237, 43, 7, 6, 1, 255, 61, 2, 233, 79, 7, 3, 1, 255, - 61, 2, 233, 79, 7, 6, 1, 255, 61, 2, 237, 43, 7, 3, 1, 255, 61, 2, 237, - 43, 7, 6, 1, 255, 61, 2, 82, 7, 3, 1, 255, 61, 2, 82, 7, 6, 1, 97, 2, - 205, 7, 3, 1, 97, 2, 205, 7, 6, 1, 97, 2, 235, 16, 7, 3, 1, 97, 2, 235, - 16, 7, 6, 1, 97, 2, 237, 46, 7, 3, 1, 97, 2, 237, 46, 7, 6, 1, 97, 2, - 246, 174, 46, 7, 3, 1, 97, 2, 246, 174, 46, 7, 6, 1, 97, 2, 47, 155, 7, - 3, 1, 97, 2, 47, 155, 7, 6, 1, 97, 2, 235, 47, 7, 3, 1, 97, 2, 235, 47, - 7, 6, 1, 255, 71, 2, 229, 162, 7, 3, 1, 255, 71, 2, 229, 162, 7, 6, 1, - 255, 64, 2, 229, 162, 7, 3, 1, 255, 64, 2, 229, 162, 7, 6, 1, 255, 64, 2, - 219, 7, 6, 1, 255, 56, 2, 155, 7, 3, 1, 255, 56, 2, 155, 7, 6, 1, 255, - 56, 2, 56, 46, 7, 3, 1, 255, 56, 2, 56, 46, 7, 6, 1, 255, 56, 2, 237, 43, - 7, 3, 1, 255, 56, 2, 237, 43, 7, 3, 1, 182, 193, 7, 3, 1, 45, 2, 82, 7, - 6, 1, 45, 2, 88, 7, 6, 1, 45, 2, 235, 104, 7, 3, 1, 45, 2, 235, 104, 7, - 6, 1, 206, 183, 7, 3, 1, 206, 183, 7, 6, 1, 246, 157, 73, 7, 6, 1, 255, - 62, 2, 88, 7, 3, 1, 255, 62, 2, 88, 7, 6, 1, 235, 239, 222, 222, 7, 6, 1, - 255, 63, 2, 88, 7, 6, 1, 255, 63, 2, 235, 104, 7, 3, 1, 255, 63, 2, 235, - 104, 7, 3, 1, 209, 237, 75, 7, 6, 1, 200, 72, 7, 6, 1, 237, 144, 7, 6, 1, - 246, 157, 72, 7, 6, 1, 255, 72, 2, 88, 7, 3, 1, 255, 72, 2, 88, 7, 6, 1, - 255, 65, 2, 88, 7, 6, 1, 237, 61, 7, 3, 1, 253, 227, 7, 6, 1, 240, 146, - 7, 6, 1, 255, 55, 2, 82, 7, 6, 1, 255, 67, 2, 88, 7, 3, 1, 255, 67, 2, - 88, 7, 3, 1, 255, 58, 2, 125, 7, 3, 1, 239, 80, 2, 82, 7, 6, 1, 209, 185, - 7, 6, 1, 255, 60, 2, 42, 88, 7, 3, 1, 255, 60, 2, 182, 41, 247, 3, 7, 6, - 1, 130, 2, 237, 44, 205, 7, 6, 1, 130, 2, 240, 179, 7, 3, 1, 130, 2, 240, - 179, 7, 6, 1, 253, 157, 7, 3, 1, 253, 157, 7, 6, 1, 255, 70, 2, 88, 7, 3, - 1, 255, 70, 2, 88, 7, 1, 254, 20, 7, 6, 1, 206, 113, 7, 3, 1, 206, 113, - 7, 6, 1, 246, 232, 7, 1, 200, 253, 146, 240, 202, 7, 3, 1, 255, 61, 2, - 235, 36, 88, 7, 6, 1, 255, 61, 2, 88, 7, 3, 1, 255, 61, 2, 88, 7, 6, 1, - 255, 61, 2, 231, 201, 88, 7, 6, 1, 97, 2, 240, 179, 7, 3, 1, 97, 2, 240, - 179, 7, 6, 1, 233, 92, 7, 6, 1, 255, 69, 2, 88, 7, 6, 1, 255, 64, 2, 88, - 7, 3, 1, 255, 64, 2, 88, 7, 6, 1, 255, 56, 2, 82, 7, 3, 1, 255, 56, 2, - 82, 7, 6, 1, 247, 74, 7, 6, 1, 253, 101, 232, 5, 7, 3, 1, 253, 101, 232, - 5, 7, 3, 1, 253, 101, 2, 240, 133, 7, 1, 135, 2, 82, 7, 6, 1, 206, 173, - 7, 3, 1, 206, 173, 7, 1, 233, 70, 235, 31, 247, 20, 2, 82, 7, 1, 242, 27, - 7, 1, 238, 181, 237, 151, 7, 1, 236, 130, 237, 151, 7, 1, 234, 1, 237, - 151, 7, 1, 231, 201, 237, 151, 7, 6, 1, 254, 235, 2, 237, 43, 7, 6, 1, - 255, 63, 2, 3, 1, 255, 56, 2, 237, 43, 7, 3, 1, 254, 235, 2, 237, 43, 7, - 6, 1, 253, 244, 7, 6, 1, 255, 58, 2, 3, 1, 254, 192, 7, 3, 1, 253, 244, - 7, 6, 1, 253, 250, 7, 6, 1, 255, 60, 2, 3, 1, 254, 192, 7, 3, 1, 253, - 250, 7, 6, 1, 102, 2, 237, 43, 7, 3, 1, 102, 2, 237, 43, 7, 6, 1, 255, - 55, 2, 237, 43, 7, 3, 1, 255, 55, 2, 237, 43, 7, 6, 1, 130, 2, 237, 43, - 7, 3, 1, 130, 2, 237, 43, 7, 6, 1, 97, 2, 237, 43, 7, 3, 1, 97, 2, 237, - 43, 7, 6, 1, 97, 2, 231, 203, 22, 235, 16, 7, 3, 1, 97, 2, 231, 203, 22, - 235, 16, 7, 6, 1, 97, 2, 231, 203, 22, 155, 7, 3, 1, 97, 2, 231, 203, 22, - 155, 7, 6, 1, 97, 2, 231, 203, 22, 237, 43, 7, 3, 1, 97, 2, 231, 203, 22, - 237, 43, 7, 6, 1, 97, 2, 231, 203, 22, 237, 36, 7, 3, 1, 97, 2, 231, 203, - 22, 237, 36, 7, 3, 1, 209, 72, 7, 6, 1, 102, 2, 231, 203, 22, 235, 16, 7, - 3, 1, 102, 2, 231, 203, 22, 235, 16, 7, 6, 1, 102, 2, 56, 64, 22, 235, - 16, 7, 3, 1, 102, 2, 56, 64, 22, 235, 16, 7, 6, 1, 254, 215, 2, 235, 16, - 7, 3, 1, 254, 215, 2, 235, 16, 7, 6, 1, 255, 65, 2, 82, 7, 3, 1, 255, 65, - 2, 82, 7, 6, 1, 255, 65, 2, 237, 43, 7, 3, 1, 255, 65, 2, 237, 43, 7, 6, - 1, 255, 67, 2, 237, 43, 7, 3, 1, 255, 67, 2, 237, 43, 7, 6, 1, 130, 2, - 235, 47, 7, 3, 1, 130, 2, 235, 47, 7, 6, 1, 130, 2, 237, 208, 22, 235, - 16, 7, 3, 1, 130, 2, 237, 208, 22, 235, 16, 7, 6, 1, 253, 101, 2, 237, - 43, 7, 3, 1, 253, 101, 2, 237, 43, 7, 3, 1, 255, 73, 2, 237, 43, 7, 6, 1, - 253, 217, 7, 6, 1, 255, 63, 2, 3, 1, 254, 193, 7, 3, 1, 253, 217, 7, 6, - 1, 255, 65, 2, 155, 7, 3, 1, 255, 65, 2, 155, 7, 6, 1, 238, 9, 7, 6, 1, - 242, 27, 7, 6, 1, 255, 60, 2, 237, 36, 7, 3, 1, 255, 60, 2, 237, 36, 7, - 6, 1, 102, 2, 246, 174, 64, 22, 155, 7, 3, 1, 102, 2, 246, 174, 64, 22, - 155, 7, 6, 1, 254, 215, 2, 155, 7, 3, 1, 254, 215, 2, 155, 7, 6, 1, 130, - 2, 195, 22, 155, 7, 3, 1, 130, 2, 195, 22, 155, 7, 6, 1, 102, 2, 47, 237, - 36, 7, 3, 1, 102, 2, 47, 237, 36, 7, 6, 1, 102, 2, 233, 70, 237, 46, 7, - 3, 1, 102, 2, 233, 70, 237, 46, 7, 6, 1, 161, 2, 47, 237, 36, 7, 3, 1, - 161, 2, 47, 237, 36, 7, 6, 1, 161, 2, 233, 70, 237, 46, 7, 3, 1, 161, 2, - 233, 70, 237, 46, 7, 6, 1, 255, 55, 2, 47, 237, 36, 7, 3, 1, 255, 55, 2, - 47, 237, 36, 7, 6, 1, 255, 55, 2, 233, 70, 237, 46, 7, 3, 1, 255, 55, 2, - 233, 70, 237, 46, 7, 6, 1, 130, 2, 47, 237, 36, 7, 3, 1, 130, 2, 47, 237, - 36, 7, 6, 1, 130, 2, 233, 70, 237, 46, 7, 3, 1, 130, 2, 233, 70, 237, 46, - 7, 6, 1, 255, 57, 2, 47, 237, 36, 7, 3, 1, 255, 57, 2, 47, 237, 36, 7, 6, - 1, 255, 57, 2, 233, 70, 237, 46, 7, 3, 1, 255, 57, 2, 233, 70, 237, 46, - 7, 6, 1, 97, 2, 47, 237, 36, 7, 3, 1, 97, 2, 47, 237, 36, 7, 6, 1, 97, 2, - 233, 70, 237, 46, 7, 3, 1, 97, 2, 233, 70, 237, 46, 7, 6, 1, 255, 59, 2, - 240, 162, 51, 7, 3, 1, 255, 59, 2, 240, 162, 51, 7, 6, 1, 255, 61, 2, - 240, 162, 51, 7, 3, 1, 255, 61, 2, 240, 162, 51, 7, 6, 1, 242, 32, 7, 3, - 1, 242, 32, 7, 6, 1, 255, 66, 2, 237, 43, 7, 3, 1, 255, 66, 2, 237, 43, - 7, 6, 1, 255, 60, 2, 182, 41, 247, 3, 7, 3, 1, 255, 63, 2, 240, 168, 7, - 6, 1, 253, 119, 7, 3, 1, 253, 119, 7, 6, 1, 255, 56, 2, 88, 7, 3, 1, 255, - 56, 2, 88, 7, 6, 1, 102, 2, 56, 46, 7, 3, 1, 102, 2, 56, 46, 7, 6, 1, - 161, 2, 233, 79, 7, 3, 1, 161, 2, 233, 79, 7, 6, 1, 130, 2, 231, 203, 22, - 235, 16, 7, 3, 1, 130, 2, 231, 203, 22, 235, 16, 7, 6, 1, 130, 2, 240, - 128, 22, 235, 16, 7, 3, 1, 130, 2, 240, 128, 22, 235, 16, 7, 6, 1, 130, - 2, 56, 46, 7, 3, 1, 130, 2, 56, 46, 7, 6, 1, 130, 2, 56, 64, 22, 235, 16, - 7, 3, 1, 130, 2, 56, 64, 22, 235, 16, 7, 6, 1, 255, 64, 2, 235, 16, 7, 3, - 1, 255, 64, 2, 235, 16, 7, 3, 1, 255, 58, 2, 240, 168, 7, 3, 1, 255, 60, - 2, 240, 168, 7, 3, 1, 255, 61, 2, 240, 168, 7, 3, 1, 235, 46, 254, 192, - 7, 3, 1, 255, 22, 233, 113, 7, 3, 1, 255, 45, 233, 113, 7, 6, 1, 102, 2, - 82, 7, 6, 1, 255, 62, 2, 82, 7, 3, 1, 255, 62, 2, 82, 7, 6, 1, 255, 58, - 2, 125, 7, 6, 1, 255, 61, 2, 233, 74, 82, 7, 3, 1, 255, 59, 2, 241, 77, - 240, 133, 7, 3, 1, 255, 56, 2, 241, 77, 240, 133, 7, 6, 1, 235, 31, 240, - 121, 7, 3, 1, 235, 31, 240, 121, 7, 6, 1, 45, 2, 82, 7, 6, 1, 97, 125, 7, - 6, 1, 209, 196, 7, 6, 1, 161, 2, 82, 7, 3, 1, 161, 2, 82, 7, 6, 1, 255, - 73, 2, 82, 7, 3, 1, 255, 73, 2, 82, 7, 6, 1, 3, 255, 75, 2, 246, 171, - 240, 133, 7, 3, 1, 255, 75, 2, 246, 171, 240, 133, 7, 6, 1, 255, 57, 2, - 82, 7, 3, 1, 255, 57, 2, 82, 7, 6, 1, 255, 64, 2, 82, 7, 3, 1, 255, 64, - 2, 82, 7, 3, 1, 209, 57, 7, 3, 1, 237, 71, 7, 3, 1, 209, 237, 71, 7, 3, - 1, 45, 2, 88, 7, 3, 1, 246, 157, 73, 7, 3, 1, 255, 62, 2, 240, 168, 7, 3, - 1, 255, 63, 2, 240, 133, 7, 3, 1, 255, 63, 2, 88, 7, 3, 1, 200, 72, 7, 3, - 1, 237, 144, 7, 3, 1, 241, 14, 2, 88, 7, 3, 1, 246, 157, 72, 7, 3, 1, - 200, 246, 157, 72, 7, 3, 1, 200, 246, 157, 161, 2, 88, 7, 3, 1, 237, 58, - 200, 246, 157, 72, 7, 3, 1, 235, 46, 255, 73, 2, 82, 7, 3, 1, 255, 65, 2, - 88, 7, 3, 1, 95, 214, 7, 1, 3, 6, 214, 7, 3, 1, 237, 61, 7, 3, 1, 251, - 172, 240, 179, 7, 3, 1, 209, 212, 7, 3, 1, 255, 66, 2, 88, 7, 3, 1, 250, - 67, 2, 88, 7, 3, 1, 255, 55, 2, 82, 7, 3, 1, 240, 146, 7, 1, 3, 6, 74, 7, - 3, 1, 255, 58, 2, 237, 44, 205, 7, 3, 1, 255, 58, 2, 242, 199, 7, 3, 1, - 255, 58, 2, 231, 201, 88, 7, 3, 1, 244, 95, 7, 3, 1, 209, 185, 7, 3, 1, - 209, 255, 68, 2, 182, 247, 3, 7, 3, 1, 255, 68, 2, 88, 7, 3, 1, 255, 60, - 2, 42, 88, 7, 3, 1, 255, 60, 2, 231, 201, 88, 7, 1, 3, 6, 199, 7, 3, 1, - 237, 118, 73, 7, 1, 3, 6, 253, 15, 7, 3, 1, 237, 58, 237, 68, 7, 3, 1, - 246, 198, 7, 3, 1, 209, 146, 7, 3, 1, 209, 255, 57, 2, 182, 247, 3, 7, 3, - 1, 209, 255, 57, 2, 88, 7, 3, 1, 255, 57, 2, 182, 247, 3, 7, 3, 1, 255, - 57, 2, 240, 133, 7, 3, 1, 255, 57, 2, 231, 251, 7, 3, 1, 200, 255, 57, 2, - 231, 251, 7, 1, 3, 6, 146, 7, 1, 3, 6, 233, 70, 146, 7, 3, 1, 255, 59, 2, - 88, 7, 3, 1, 246, 232, 7, 3, 1, 235, 46, 255, 73, 2, 195, 22, 88, 7, 3, - 1, 241, 250, 200, 246, 232, 7, 3, 1, 253, 146, 2, 240, 168, 7, 3, 1, 209, - 254, 183, 7, 3, 1, 255, 61, 2, 231, 201, 88, 7, 3, 1, 97, 125, 7, 3, 1, - 233, 92, 7, 3, 1, 255, 69, 2, 88, 7, 3, 1, 209, 196, 7, 3, 1, 209, 254, - 195, 7, 3, 1, 209, 254, 190, 7, 1, 3, 6, 254, 190, 7, 3, 1, 255, 56, 2, - 231, 201, 88, 7, 3, 1, 255, 56, 2, 240, 168, 7, 3, 1, 247, 74, 7, 3, 1, - 253, 101, 2, 240, 168, 7, 1, 235, 31, 240, 121, 7, 1, 230, 138, 237, 107, - 231, 71, 7, 1, 233, 70, 235, 31, 240, 121, 7, 1, 233, 34, 254, 194, 7, 1, - 233, 188, 237, 151, 7, 1, 3, 6, 254, 185, 7, 3, 1, 237, 58, 246, 157, 72, - 7, 1, 3, 6, 255, 65, 2, 88, 7, 1, 3, 6, 212, 7, 3, 1, 255, 73, 2, 227, - 200, 7, 3, 1, 209, 254, 186, 7, 1, 3, 6, 149, 7, 3, 1, 255, 75, 2, 88, 7, - 1, 235, 31, 247, 20, 2, 82, 7, 1, 200, 235, 31, 247, 20, 2, 82, 7, 3, 1, - 254, 235, 233, 113, 7, 3, 1, 249, 188, 233, 113, 7, 3, 1, 254, 235, 235, - 90, 2, 240, 168, 7, 3, 1, 255, 50, 233, 113, 7, 3, 1, 252, 14, 233, 113, - 7, 3, 1, 255, 47, 235, 90, 2, 240, 168, 7, 3, 1, 249, 243, 233, 113, 7, - 3, 1, 255, 35, 233, 113, 7, 3, 1, 255, 36, 233, 113, 7, 1, 233, 188, 229, - 209, 7, 1, 234, 20, 229, 209, 7, 3, 1, 209, 255, 66, 2, 231, 251, 7, 3, - 1, 209, 255, 66, 2, 233, 206, 22, 240, 133, 52, 1, 3, 212, 52, 1, 3, 255, - 66, 2, 88, 52, 1, 3, 254, 192, 52, 1, 3, 146, 52, 1, 3, 209, 146, 52, 1, - 3, 209, 255, 57, 2, 88, 52, 1, 3, 6, 233, 70, 146, 52, 1, 3, 254, 195, - 52, 1, 3, 254, 190, 52, 1, 237, 114, 52, 1, 47, 237, 114, 52, 1, 209, - 237, 67, 52, 1, 229, 172, 52, 1, 200, 237, 67, 52, 1, 41, 132, 240, 147, - 52, 1, 42, 132, 240, 147, 52, 1, 235, 31, 240, 121, 52, 1, 200, 235, 31, - 240, 121, 52, 1, 42, 230, 133, 52, 1, 41, 230, 133, 52, 1, 99, 230, 133, - 52, 1, 103, 230, 133, 52, 1, 230, 125, 235, 24, 237, 43, 52, 1, 61, 240, - 138, 52, 1, 235, 16, 52, 1, 240, 159, 235, 24, 52, 1, 240, 163, 235, 24, - 52, 1, 184, 61, 240, 138, 52, 1, 184, 235, 16, 52, 1, 184, 240, 163, 235, - 24, 52, 1, 184, 240, 159, 235, 24, 52, 1, 230, 160, 237, 66, 52, 1, 132, - 230, 160, 237, 66, 52, 1, 235, 112, 41, 132, 240, 147, 52, 1, 235, 112, - 42, 132, 240, 147, 52, 1, 99, 240, 149, 52, 1, 103, 240, 149, 52, 1, 79, - 53, 52, 1, 240, 172, 53, 237, 46, 56, 46, 246, 174, 46, 235, 47, 3, 205, - 47, 240, 159, 235, 24, 52, 1, 239, 222, 88, 52, 1, 240, 221, 235, 24, 52, - 1, 3, 237, 61, 52, 1, 3, 149, 52, 1, 3, 193, 52, 1, 3, 254, 184, 52, 1, - 3, 200, 235, 31, 240, 121, 52, 1, 230, 153, 206, 125, 52, 1, 201, 206, - 125, 52, 1, 253, 152, 206, 125, 52, 1, 184, 206, 125, 52, 1, 231, 237, - 206, 125, 52, 1, 253, 122, 231, 249, 206, 76, 52, 1, 247, 24, 231, 249, - 206, 76, 52, 1, 235, 8, 52, 1, 229, 159, 52, 1, 47, 229, 172, 52, 1, 184, - 103, 230, 133, 52, 1, 184, 99, 230, 133, 52, 1, 184, 42, 230, 133, 52, 1, - 184, 41, 230, 133, 52, 1, 184, 240, 147, 52, 1, 237, 44, 240, 163, 235, - 24, 52, 1, 237, 44, 47, 240, 163, 235, 24, 52, 1, 237, 44, 47, 240, 159, - 235, 24, 52, 1, 184, 205, 52, 1, 237, 105, 237, 66, 52, 1, 240, 205, 201, - 240, 167, 52, 1, 252, 255, 201, 240, 167, 52, 1, 240, 205, 184, 240, 167, - 52, 1, 252, 255, 184, 240, 167, 52, 1, 238, 51, 52, 1, 246, 157, 238, 51, - 52, 1, 184, 42, 58, 36, 240, 163, 235, 24, 36, 240, 159, 235, 24, 36, - 230, 125, 235, 24, 36, 205, 36, 235, 16, 36, 231, 223, 36, 237, 46, 36, - 56, 46, 36, 219, 36, 246, 171, 46, 36, 246, 174, 46, 36, 47, 240, 159, - 235, 24, 36, 237, 43, 36, 61, 246, 167, 46, 36, 47, 61, 246, 167, 46, 36, - 47, 240, 163, 235, 24, 36, 228, 184, 36, 233, 70, 237, 46, 36, 209, 240, - 162, 46, 36, 240, 162, 46, 36, 200, 240, 162, 46, 36, 240, 162, 64, 237, - 41, 36, 240, 163, 237, 48, 51, 36, 240, 159, 237, 48, 51, 36, 42, 246, - 215, 51, 36, 41, 246, 215, 51, 36, 42, 240, 117, 46, 36, 240, 179, 36, - 42, 132, 246, 174, 51, 36, 99, 246, 215, 51, 36, 103, 246, 215, 51, 36, - 79, 5, 51, 36, 240, 172, 5, 51, 36, 230, 85, 246, 171, 51, 36, 231, 201, - 246, 171, 51, 36, 56, 51, 36, 231, 203, 51, 36, 246, 174, 51, 36, 240, - 162, 51, 36, 233, 79, 36, 235, 47, 36, 61, 246, 167, 51, 36, 237, 174, - 51, 36, 233, 70, 47, 248, 238, 51, 36, 241, 29, 51, 36, 230, 125, 237, - 48, 51, 36, 240, 161, 51, 36, 233, 70, 240, 161, 51, 36, 240, 128, 51, - 36, 237, 83, 51, 36, 184, 240, 138, 36, 47, 184, 240, 138, 36, 240, 128, - 233, 87, 36, 240, 125, 195, 233, 87, 36, 182, 195, 233, 87, 36, 240, 125, - 235, 54, 233, 87, 36, 182, 235, 54, 233, 87, 36, 41, 132, 246, 174, 51, - 36, 233, 70, 237, 174, 51, 36, 37, 51, 36, 236, 212, 51, 36, 255, 74, 46, - 36, 61, 205, 36, 47, 231, 223, 36, 240, 163, 206, 76, 36, 240, 159, 206, - 76, 36, 19, 228, 179, 36, 19, 233, 170, 36, 19, 231, 207, 237, 70, 36, - 19, 227, 132, 36, 237, 174, 46, 36, 237, 51, 5, 51, 36, 47, 61, 246, 167, - 51, 36, 42, 240, 117, 51, 36, 190, 240, 128, 46, 36, 231, 79, 46, 36, - 237, 78, 105, 180, 46, 36, 42, 41, 67, 51, 36, 235, 18, 67, 51, 36, 234, - 113, 235, 124, 36, 41, 231, 214, 46, 36, 42, 132, 246, 174, 46, 36, 233, - 205, 36, 255, 74, 51, 36, 42, 231, 214, 51, 36, 41, 231, 214, 51, 36, 41, - 231, 214, 22, 99, 231, 214, 51, 36, 41, 132, 246, 174, 46, 36, 56, 64, - 237, 41, 36, 233, 145, 51, 36, 47, 246, 174, 51, 36, 237, 170, 46, 36, - 47, 240, 161, 51, 36, 47, 237, 46, 36, 47, 235, 16, 36, 47, 237, 83, 51, - 36, 47, 205, 36, 47, 233, 70, 237, 46, 36, 47, 81, 67, 51, 36, 7, 3, 1, - 57, 36, 7, 3, 1, 72, 36, 7, 3, 1, 74, 36, 7, 3, 1, 73, 36, 7, 3, 1, 66, - 36, 7, 3, 1, 254, 194, 36, 7, 3, 1, 222, 222, 36, 7, 3, 1, 212, 36, 7, 3, - 1, 185, 36, 7, 3, 1, 146, 36, 7, 3, 1, 254, 183, 36, 7, 3, 1, 196, 36, 7, - 3, 1, 254, 184, 19, 6, 1, 241, 155, 19, 3, 1, 241, 155, 19, 6, 1, 235, - 83, 237, 143, 19, 3, 1, 235, 83, 237, 143, 19, 207, 53, 19, 203, 207, 53, - 19, 6, 1, 230, 191, 233, 129, 19, 3, 1, 230, 191, 233, 129, 19, 227, 132, - 19, 3, 200, 237, 103, 240, 197, 98, 19, 3, 237, 50, 237, 103, 240, 197, - 98, 19, 3, 200, 237, 50, 237, 103, 240, 197, 98, 19, 233, 82, 76, 19, - 237, 70, 19, 231, 207, 237, 70, 19, 6, 1, 240, 120, 2, 237, 70, 19, 254, - 26, 235, 220, 19, 6, 1, 235, 28, 2, 237, 70, 19, 6, 1, 252, 206, 2, 237, - 70, 19, 6, 1, 246, 168, 2, 237, 70, 19, 6, 1, 235, 35, 2, 237, 70, 19, 6, - 1, 235, 23, 2, 237, 70, 19, 6, 1, 240, 123, 2, 237, 70, 19, 3, 1, 246, - 168, 2, 231, 207, 22, 237, 70, 19, 6, 1, 237, 71, 19, 6, 1, 240, 160, 19, - 6, 1, 237, 61, 19, 6, 1, 237, 75, 19, 6, 1, 233, 96, 19, 6, 1, 240, 173, - 19, 6, 1, 246, 219, 19, 6, 1, 237, 89, 19, 6, 1, 240, 146, 19, 6, 1, 237, - 91, 19, 6, 1, 237, 82, 19, 6, 1, 252, 229, 19, 6, 1, 252, 227, 19, 6, 1, - 253, 38, 19, 6, 1, 233, 100, 19, 6, 1, 252, 223, 19, 6, 1, 246, 209, 19, - 6, 1, 237, 73, 19, 6, 1, 246, 212, 19, 6, 1, 233, 92, 19, 6, 1, 246, 198, - 19, 6, 1, 246, 200, 19, 6, 1, 246, 204, 19, 6, 1, 237, 68, 19, 6, 1, 246, - 168, 2, 230, 152, 19, 6, 1, 235, 23, 2, 230, 152, 19, 3, 1, 240, 120, 2, - 237, 70, 19, 3, 1, 235, 28, 2, 237, 70, 19, 3, 1, 252, 206, 2, 237, 70, - 19, 3, 1, 246, 168, 2, 237, 70, 19, 3, 1, 235, 23, 2, 231, 207, 22, 237, - 70, 19, 3, 1, 237, 71, 19, 3, 1, 240, 160, 19, 3, 1, 237, 61, 19, 3, 1, - 237, 75, 19, 3, 1, 233, 96, 19, 3, 1, 240, 173, 19, 3, 1, 246, 219, 19, - 3, 1, 237, 89, 19, 3, 1, 240, 146, 19, 3, 1, 237, 91, 19, 3, 1, 237, 82, - 19, 3, 1, 252, 229, 19, 3, 1, 252, 227, 19, 3, 1, 253, 38, 19, 3, 1, 233, - 100, 19, 3, 1, 252, 223, 19, 3, 1, 246, 209, 19, 3, 1, 35, 237, 73, 19, - 3, 1, 237, 73, 19, 3, 1, 246, 212, 19, 3, 1, 233, 92, 19, 3, 1, 246, 198, - 19, 3, 1, 246, 200, 19, 3, 1, 246, 204, 19, 3, 1, 237, 68, 19, 3, 1, 246, - 168, 2, 230, 152, 19, 3, 1, 235, 23, 2, 230, 152, 19, 3, 1, 235, 35, 2, - 237, 70, 19, 3, 1, 235, 23, 2, 237, 70, 19, 3, 1, 240, 123, 2, 237, 70, - 19, 6, 253, 150, 98, 19, 249, 112, 98, 19, 240, 178, 98, 19, 235, 23, 2, - 246, 171, 98, 19, 235, 23, 2, 240, 159, 22, 246, 171, 98, 19, 235, 23, 2, - 231, 203, 22, 246, 171, 98, 19, 253, 120, 98, 19, 254, 200, 98, 19, 253, - 150, 98, 19, 1, 235, 83, 237, 136, 19, 3, 1, 235, 83, 237, 136, 19, 1, - 235, 138, 19, 3, 1, 235, 138, 19, 1, 233, 129, 19, 3, 1, 233, 129, 19, 1, - 237, 136, 19, 3, 1, 237, 136, 19, 1, 237, 143, 19, 3, 1, 237, 143, 70, 6, - 1, 240, 212, 70, 3, 1, 240, 212, 70, 6, 1, 248, 37, 70, 3, 1, 248, 37, - 70, 6, 1, 241, 1, 70, 3, 1, 241, 1, 70, 6, 1, 240, 209, 70, 3, 1, 240, - 209, 70, 6, 1, 235, 93, 70, 3, 1, 235, 93, 70, 6, 1, 237, 146, 70, 3, 1, - 237, 146, 70, 6, 1, 248, 25, 70, 3, 1, 248, 25, 19, 240, 210, 98, 19, - 253, 70, 98, 19, 237, 103, 240, 197, 98, 19, 1, 248, 203, 19, 6, 240, - 178, 98, 19, 237, 103, 235, 28, 98, 19, 200, 237, 103, 235, 28, 98, 19, - 6, 1, 246, 245, 19, 3, 1, 246, 245, 19, 6, 237, 103, 240, 197, 98, 19, 6, - 1, 247, 49, 19, 3, 1, 247, 49, 19, 253, 70, 2, 195, 98, 19, 6, 200, 237, - 103, 240, 197, 98, 19, 6, 237, 50, 237, 103, 240, 197, 98, 19, 6, 200, - 237, 50, 237, 103, 240, 197, 98, 28, 6, 1, 254, 237, 2, 237, 36, 28, 6, - 1, 253, 232, 28, 6, 1, 247, 70, 28, 6, 1, 248, 55, 28, 6, 1, 232, 61, - 253, 77, 28, 6, 1, 246, 255, 28, 6, 1, 222, 224, 74, 28, 6, 1, 253, 28, - 28, 6, 1, 253, 117, 28, 6, 1, 247, 86, 28, 6, 1, 247, 43, 28, 6, 1, 242, - 10, 28, 6, 1, 248, 84, 28, 6, 1, 255, 55, 2, 237, 36, 28, 6, 1, 240, 125, - 66, 28, 6, 1, 241, 122, 28, 6, 1, 57, 28, 6, 1, 253, 73, 28, 6, 1, 253, - 95, 28, 6, 1, 247, 13, 28, 6, 1, 253, 20, 28, 6, 1, 253, 77, 28, 6, 1, - 246, 251, 28, 6, 1, 253, 46, 28, 6, 1, 74, 28, 6, 1, 240, 125, 74, 28, 6, - 1, 177, 28, 6, 1, 253, 58, 28, 6, 1, 253, 87, 28, 6, 1, 252, 232, 28, 6, - 1, 73, 28, 6, 1, 253, 0, 28, 6, 1, 253, 99, 28, 6, 1, 253, 116, 28, 6, 1, - 253, 9, 28, 6, 1, 66, 28, 6, 1, 253, 124, 28, 6, 1, 154, 28, 6, 1, 246, - 248, 28, 6, 1, 246, 217, 28, 6, 1, 246, 165, 28, 6, 1, 237, 215, 28, 6, - 1, 248, 58, 53, 28, 6, 1, 241, 24, 28, 6, 1, 246, 227, 53, 28, 6, 1, 72, - 28, 6, 1, 252, 233, 28, 6, 1, 191, 28, 3, 1, 57, 28, 3, 1, 253, 73, 28, - 3, 1, 253, 95, 28, 3, 1, 247, 13, 28, 3, 1, 253, 20, 28, 3, 1, 253, 77, - 28, 3, 1, 246, 251, 28, 3, 1, 253, 46, 28, 3, 1, 74, 28, 3, 1, 240, 125, - 74, 28, 3, 1, 177, 28, 3, 1, 253, 58, 28, 3, 1, 253, 87, 28, 3, 1, 252, - 232, 28, 3, 1, 73, 28, 3, 1, 253, 0, 28, 3, 1, 253, 99, 28, 3, 1, 253, - 116, 28, 3, 1, 253, 9, 28, 3, 1, 66, 28, 3, 1, 253, 124, 28, 3, 1, 154, - 28, 3, 1, 246, 248, 28, 3, 1, 246, 217, 28, 3, 1, 246, 165, 28, 3, 1, - 237, 215, 28, 3, 1, 248, 58, 53, 28, 3, 1, 241, 24, 28, 3, 1, 246, 227, - 53, 28, 3, 1, 72, 28, 3, 1, 252, 233, 28, 3, 1, 191, 28, 3, 1, 254, 237, - 2, 237, 36, 28, 3, 1, 253, 232, 28, 3, 1, 247, 70, 28, 3, 1, 248, 55, 28, - 3, 1, 232, 61, 253, 77, 28, 3, 1, 246, 255, 28, 3, 1, 222, 224, 74, 28, - 3, 1, 253, 28, 28, 3, 1, 253, 117, 28, 3, 1, 247, 86, 28, 3, 1, 247, 43, - 28, 3, 1, 242, 10, 28, 3, 1, 248, 84, 28, 3, 1, 255, 55, 2, 237, 36, 28, - 3, 1, 240, 125, 66, 28, 3, 1, 241, 122, 28, 6, 1, 237, 68, 28, 3, 1, 237, - 68, 28, 6, 1, 247, 25, 28, 3, 1, 247, 25, 28, 6, 1, 233, 93, 72, 28, 3, - 1, 233, 93, 72, 28, 6, 1, 237, 102, 246, 183, 28, 3, 1, 237, 102, 246, - 183, 28, 6, 1, 233, 93, 237, 102, 246, 183, 28, 3, 1, 233, 93, 237, 102, - 246, 183, 28, 6, 1, 253, 47, 246, 183, 28, 3, 1, 253, 47, 246, 183, 28, - 6, 1, 233, 93, 253, 47, 246, 183, 28, 3, 1, 233, 93, 253, 47, 246, 183, - 28, 6, 1, 247, 83, 28, 3, 1, 247, 83, 28, 6, 1, 246, 204, 28, 3, 1, 246, - 204, 28, 6, 1, 240, 226, 28, 3, 1, 240, 226, 28, 6, 1, 233, 151, 28, 3, - 1, 233, 151, 28, 6, 1, 235, 180, 2, 47, 240, 163, 235, 24, 28, 3, 1, 235, - 180, 2, 47, 240, 163, 235, 24, 28, 6, 1, 253, 137, 28, 3, 1, 253, 137, - 28, 6, 1, 241, 226, 237, 68, 28, 3, 1, 241, 226, 237, 68, 28, 6, 1, 240, - 123, 2, 237, 220, 28, 3, 1, 240, 123, 2, 237, 220, 28, 6, 1, 253, 188, - 28, 3, 1, 253, 188, 28, 6, 1, 237, 136, 28, 3, 1, 237, 136, 28, 232, 12, - 53, 36, 28, 237, 220, 36, 28, 227, 74, 36, 28, 172, 232, 35, 36, 28, 186, - 232, 35, 36, 28, 232, 252, 36, 28, 235, 56, 232, 12, 53, 36, 28, 233, - 152, 53, 28, 6, 1, 240, 125, 255, 55, 2, 240, 133, 28, 3, 1, 240, 125, - 255, 55, 2, 240, 133, 28, 6, 1, 233, 233, 53, 28, 3, 1, 233, 233, 53, 28, - 6, 1, 255, 5, 2, 240, 216, 28, 3, 1, 255, 5, 2, 240, 216, 28, 6, 1, 253, - 67, 2, 235, 230, 28, 3, 1, 253, 67, 2, 235, 230, 28, 6, 1, 253, 67, 2, - 82, 28, 3, 1, 253, 67, 2, 82, 28, 6, 1, 253, 67, 2, 237, 44, 88, 28, 3, - 1, 253, 67, 2, 237, 44, 88, 28, 6, 1, 253, 123, 2, 230, 126, 28, 3, 1, - 253, 123, 2, 230, 126, 28, 6, 1, 254, 245, 2, 230, 126, 28, 3, 1, 254, - 245, 2, 230, 126, 28, 6, 1, 188, 2, 230, 126, 28, 3, 1, 188, 2, 230, 126, - 28, 6, 1, 188, 2, 61, 82, 28, 3, 1, 188, 2, 61, 82, 28, 6, 1, 188, 2, 82, - 28, 3, 1, 188, 2, 82, 28, 6, 1, 235, 149, 177, 28, 3, 1, 235, 149, 177, - 28, 6, 1, 254, 199, 2, 230, 126, 28, 3, 1, 254, 199, 2, 230, 126, 28, 6, - 20, 254, 199, 247, 13, 28, 3, 20, 254, 199, 247, 13, 28, 6, 1, 254, 231, - 2, 237, 44, 88, 28, 3, 1, 254, 231, 2, 237, 44, 88, 28, 6, 1, 231, 215, - 154, 28, 3, 1, 231, 215, 154, 28, 6, 1, 255, 6, 2, 230, 126, 28, 3, 1, - 255, 6, 2, 230, 126, 28, 6, 1, 254, 212, 2, 230, 126, 28, 3, 1, 254, 212, - 2, 230, 126, 28, 6, 1, 233, 157, 66, 28, 3, 1, 233, 157, 66, 28, 6, 1, - 233, 157, 97, 2, 82, 28, 3, 1, 233, 157, 97, 2, 82, 28, 6, 1, 254, 204, - 2, 230, 126, 28, 3, 1, 254, 204, 2, 230, 126, 28, 6, 20, 254, 212, 246, - 248, 28, 3, 20, 254, 212, 246, 248, 28, 6, 1, 253, 74, 2, 230, 126, 28, - 3, 1, 253, 74, 2, 230, 126, 28, 6, 1, 253, 74, 2, 61, 82, 28, 3, 1, 253, - 74, 2, 61, 82, 28, 6, 1, 241, 236, 28, 3, 1, 241, 236, 28, 6, 1, 231, - 215, 246, 217, 28, 3, 1, 231, 215, 246, 217, 28, 6, 1, 231, 215, 253, 74, - 2, 230, 126, 28, 3, 1, 231, 215, 253, 74, 2, 230, 126, 28, 1, 232, 32, - 28, 6, 1, 253, 123, 2, 237, 46, 28, 3, 1, 253, 123, 2, 237, 46, 28, 6, 1, - 188, 2, 88, 28, 3, 1, 188, 2, 88, 28, 6, 1, 254, 211, 2, 240, 133, 28, 3, - 1, 254, 211, 2, 240, 133, 28, 6, 1, 254, 199, 2, 88, 28, 3, 1, 254, 199, - 2, 88, 28, 6, 1, 254, 199, 2, 240, 133, 28, 3, 1, 254, 199, 2, 240, 133, - 28, 6, 1, 230, 189, 246, 217, 28, 3, 1, 230, 189, 246, 217, 28, 6, 1, - 254, 213, 2, 240, 133, 28, 3, 1, 254, 213, 2, 240, 133, 28, 3, 1, 232, - 32, 28, 6, 1, 102, 2, 237, 46, 28, 3, 1, 102, 2, 237, 46, 28, 6, 1, 102, - 2, 219, 28, 3, 1, 102, 2, 219, 28, 6, 20, 102, 253, 77, 28, 3, 20, 102, - 253, 77, 28, 6, 1, 254, 237, 2, 237, 46, 28, 3, 1, 254, 237, 2, 237, 46, - 28, 6, 1, 237, 144, 28, 3, 1, 237, 144, 28, 6, 1, 241, 14, 2, 219, 28, 3, - 1, 241, 14, 2, 219, 28, 6, 1, 253, 123, 2, 219, 28, 3, 1, 253, 123, 2, - 219, 28, 6, 1, 254, 245, 2, 219, 28, 3, 1, 254, 245, 2, 219, 28, 6, 1, - 231, 215, 246, 255, 28, 3, 1, 231, 215, 246, 255, 28, 6, 1, 255, 55, 2, - 235, 16, 28, 3, 1, 255, 55, 2, 235, 16, 28, 6, 1, 255, 55, 2, 219, 28, 3, - 1, 255, 55, 2, 219, 28, 6, 1, 130, 2, 219, 28, 3, 1, 130, 2, 219, 28, 6, - 1, 237, 118, 73, 28, 3, 1, 237, 118, 73, 28, 6, 1, 237, 118, 130, 2, 219, - 28, 3, 1, 237, 118, 130, 2, 219, 28, 6, 1, 161, 2, 219, 28, 3, 1, 161, 2, - 219, 28, 6, 1, 97, 2, 235, 16, 28, 3, 1, 97, 2, 235, 16, 28, 6, 1, 97, 2, - 219, 28, 3, 1, 97, 2, 219, 28, 6, 1, 97, 2, 47, 155, 28, 3, 1, 97, 2, 47, - 155, 28, 6, 1, 253, 74, 2, 219, 28, 3, 1, 253, 74, 2, 219, 28, 6, 1, 253, - 67, 2, 230, 126, 28, 3, 1, 253, 67, 2, 230, 126, 28, 6, 1, 247, 119, 2, - 219, 28, 3, 1, 247, 119, 2, 219, 28, 6, 1, 253, 67, 2, 195, 22, 88, 28, - 3, 1, 253, 67, 2, 195, 22, 88, 28, 6, 1, 254, 204, 2, 88, 28, 3, 1, 254, - 204, 2, 88, 28, 6, 1, 254, 204, 2, 82, 28, 3, 1, 254, 204, 2, 82, 28, 6, - 1, 246, 207, 253, 20, 28, 3, 1, 246, 207, 253, 20, 28, 6, 1, 246, 207, - 247, 70, 28, 3, 1, 246, 207, 247, 70, 28, 6, 1, 246, 207, 248, 209, 28, - 3, 1, 246, 207, 248, 209, 28, 6, 1, 246, 207, 241, 123, 28, 3, 1, 246, - 207, 241, 123, 28, 6, 1, 246, 207, 247, 86, 28, 3, 1, 246, 207, 247, 86, - 28, 6, 1, 246, 207, 247, 43, 28, 3, 1, 246, 207, 247, 43, 28, 6, 1, 246, - 207, 248, 164, 28, 3, 1, 246, 207, 248, 164, 28, 6, 1, 246, 207, 248, - 173, 28, 3, 1, 246, 207, 248, 173, 28, 6, 1, 200, 253, 46, 28, 3, 1, 200, - 253, 46, 28, 6, 1, 254, 211, 2, 88, 28, 3, 1, 254, 211, 2, 88, 28, 6, 1, - 247, 17, 28, 3, 1, 247, 17, 28, 6, 1, 247, 48, 28, 3, 1, 247, 48, 28, 6, - 1, 247, 61, 28, 3, 1, 247, 61, 28, 6, 1, 253, 35, 28, 3, 1, 253, 35, 28, - 6, 1, 252, 250, 28, 3, 1, 252, 250, 28, 6, 1, 241, 92, 177, 28, 3, 1, - 241, 92, 177, 28, 6, 1, 254, 211, 2, 237, 44, 88, 28, 3, 1, 254, 211, 2, - 237, 44, 88, 28, 6, 1, 254, 199, 2, 237, 44, 88, 28, 3, 1, 254, 199, 2, - 237, 44, 88, 120, 6, 1, 247, 245, 120, 6, 1, 247, 252, 120, 6, 1, 248, - 53, 120, 6, 1, 252, 203, 120, 6, 1, 247, 137, 120, 6, 1, 252, 226, 120, - 6, 1, 253, 144, 120, 6, 1, 253, 125, 120, 6, 1, 96, 120, 6, 1, 246, 251, - 120, 6, 1, 247, 152, 120, 6, 1, 241, 183, 120, 6, 1, 247, 229, 120, 6, 1, - 252, 215, 120, 6, 1, 248, 81, 120, 6, 1, 253, 21, 120, 6, 1, 252, 213, - 120, 6, 1, 241, 141, 120, 6, 1, 241, 109, 120, 6, 1, 247, 173, 120, 6, 1, - 253, 28, 120, 6, 1, 247, 94, 120, 6, 1, 246, 165, 120, 6, 1, 253, 108, - 120, 6, 1, 246, 176, 120, 6, 1, 247, 188, 120, 6, 1, 241, 165, 120, 6, 1, - 208, 120, 6, 1, 248, 154, 120, 6, 1, 248, 191, 120, 6, 1, 242, 3, 120, 6, - 1, 247, 198, 120, 6, 1, 253, 66, 120, 6, 1, 241, 87, 120, 6, 1, 241, 213, - 120, 6, 1, 247, 156, 120, 6, 1, 253, 187, 120, 6, 1, 247, 75, 120, 52, 1, - 42, 132, 240, 147, 120, 229, 172, 120, 233, 203, 76, 120, 229, 165, 76, - 120, 237, 67, 120, 233, 82, 76, 120, 228, 196, 76, 120, 3, 1, 247, 245, - 120, 3, 1, 247, 252, 120, 3, 1, 248, 53, 120, 3, 1, 252, 203, 120, 3, 1, - 247, 137, 120, 3, 1, 252, 226, 120, 3, 1, 253, 144, 120, 3, 1, 253, 125, - 120, 3, 1, 96, 120, 3, 1, 246, 251, 120, 3, 1, 247, 152, 120, 3, 1, 241, - 183, 120, 3, 1, 247, 229, 120, 3, 1, 252, 215, 120, 3, 1, 248, 81, 120, - 3, 1, 253, 21, 120, 3, 1, 252, 213, 120, 3, 1, 241, 141, 120, 3, 1, 241, - 109, 120, 3, 1, 247, 173, 120, 3, 1, 253, 28, 120, 3, 1, 247, 94, 120, 3, - 1, 246, 165, 120, 3, 1, 253, 108, 120, 3, 1, 246, 176, 120, 3, 1, 247, - 188, 120, 3, 1, 241, 165, 120, 3, 1, 208, 120, 3, 1, 248, 154, 120, 3, 1, - 248, 191, 120, 3, 1, 242, 3, 120, 3, 1, 247, 198, 120, 3, 1, 253, 66, - 120, 3, 1, 241, 87, 120, 3, 1, 241, 213, 120, 3, 1, 247, 156, 120, 3, 1, - 253, 187, 120, 3, 1, 247, 75, 120, 3, 20, 254, 50, 241, 87, 120, 246, - 162, 240, 121, 120, 235, 69, 78, 237, 48, 234, 98, 78, 237, 48, 237, 213, - 78, 237, 48, 230, 108, 78, 237, 48, 242, 36, 238, 38, 78, 237, 48, 242, - 36, 238, 229, 78, 237, 48, 237, 6, 78, 237, 48, 239, 220, 78, 237, 48, - 240, 101, 78, 237, 48, 236, 184, 78, 237, 48, 240, 98, 78, 237, 48, 240, - 34, 78, 237, 48, 235, 173, 78, 237, 48, 238, 236, 236, 161, 78, 237, 48, - 230, 186, 78, 237, 48, 239, 209, 245, 61, 78, 237, 48, 235, 221, 236, 90, - 78, 237, 48, 239, 184, 78, 237, 48, 242, 66, 236, 101, 78, 237, 48, 239, - 121, 78, 237, 48, 232, 223, 78, 237, 48, 236, 153, 78, 237, 48, 239, 104, - 236, 118, 78, 237, 48, 238, 172, 78, 237, 48, 239, 207, 78, 237, 48, 235, - 221, 236, 197, 78, 237, 48, 246, 87, 254, 32, 246, 94, 78, 237, 48, 251, - 97, 78, 237, 48, 244, 7, 78, 237, 48, 243, 55, 78, 237, 48, 240, 109, 78, - 165, 239, 99, 235, 20, 78, 240, 143, 239, 247, 78, 240, 143, 241, 42, - 237, 213, 78, 240, 143, 241, 42, 237, 187, 78, 240, 143, 241, 42, 235, - 134, 78, 240, 143, 238, 6, 78, 240, 143, 240, 49, 78, 240, 143, 237, 213, - 78, 240, 143, 237, 187, 78, 240, 143, 235, 134, 78, 240, 143, 238, 7, 78, - 240, 143, 243, 231, 243, 170, 32, 247, 221, 78, 240, 143, 236, 198, 78, - 240, 143, 237, 200, 145, 237, 206, 78, 240, 143, 239, 105, 78, 229, 161, - 239, 97, 78, 240, 143, 241, 11, 78, 229, 161, 239, 181, 78, 240, 143, - 246, 244, 246, 164, 78, 240, 143, 253, 193, 246, 164, 78, 229, 161, 254, - 149, 239, 182, 78, 165, 240, 116, 246, 164, 78, 165, 203, 246, 164, 78, - 229, 161, 253, 23, 234, 114, 78, 240, 143, 239, 208, 238, 38, 78, 1, 240, - 174, 78, 1, 247, 253, 78, 1, 238, 247, 78, 1, 237, 238, 78, 1, 252, 252, - 78, 1, 247, 221, 78, 1, 240, 102, 78, 1, 248, 60, 78, 1, 247, 210, 78, 1, - 247, 63, 78, 1, 35, 247, 1, 78, 1, 247, 1, 78, 1, 237, 205, 78, 1, 35, - 247, 41, 78, 1, 247, 41, 78, 1, 35, 246, 195, 78, 1, 246, 195, 78, 1, - 236, 205, 78, 1, 241, 97, 78, 1, 35, 253, 0, 78, 1, 253, 0, 78, 1, 35, - 238, 77, 78, 1, 238, 77, 78, 1, 248, 142, 78, 1, 241, 222, 78, 1, 240, - 203, 78, 1, 248, 171, 78, 20, 235, 106, 47, 247, 221, 78, 20, 235, 106, - 253, 200, 247, 63, 78, 20, 235, 106, 47, 247, 63, 78, 229, 161, 235, 173, - 78, 229, 161, 230, 186, 10, 65, 53, 10, 5, 239, 237, 10, 234, 105, 235, - 70, 10, 5, 239, 233, 228, 177, 248, 11, 240, 233, 228, 177, 237, 182, - 240, 233, 10, 251, 175, 228, 177, 253, 129, 241, 194, 53, 228, 177, 253, - 129, 253, 53, 233, 117, 53, 235, 238, 53, 10, 237, 67, 10, 248, 20, 230, - 131, 10, 239, 201, 242, 19, 53, 10, 5, 239, 116, 10, 5, 229, 214, 237, - 171, 231, 185, 10, 5, 237, 171, 232, 79, 10, 5, 230, 94, 235, 244, 10, 5, - 251, 170, 235, 246, 242, 57, 10, 5, 231, 175, 10, 3, 201, 247, 55, 10, 3, - 201, 20, 92, 2, 216, 2, 247, 26, 10, 3, 201, 241, 89, 10, 3, 237, 247, - 10, 3, 237, 176, 10, 3, 238, 12, 10, 230, 140, 10, 237, 49, 56, 229, 161, - 76, 10, 233, 82, 76, 10, 1, 238, 5, 10, 1, 92, 2, 240, 229, 46, 10, 1, - 92, 2, 164, 46, 10, 1, 253, 54, 2, 164, 46, 10, 1, 92, 2, 164, 51, 10, 1, - 62, 2, 164, 46, 10, 1, 240, 174, 10, 1, 247, 251, 10, 1, 252, 210, 234, - 150, 10, 1, 252, 11, 10, 1, 245, 243, 10, 1, 241, 164, 10, 1, 250, 59, - 10, 1, 241, 171, 10, 1, 249, 176, 10, 1, 245, 242, 10, 1, 247, 198, 10, - 1, 241, 89, 10, 1, 241, 67, 10, 1, 239, 244, 10, 1, 251, 209, 10, 1, 249, - 174, 10, 1, 247, 55, 10, 1, 252, 167, 10, 1, 246, 224, 10, 1, 237, 255, - 10, 1, 240, 191, 2, 135, 197, 46, 10, 1, 240, 191, 2, 152, 197, 51, 10, - 1, 240, 176, 62, 2, 233, 70, 196, 10, 1, 240, 176, 62, 2, 135, 197, 46, - 10, 1, 240, 176, 62, 2, 152, 197, 46, 10, 234, 241, 10, 1, 247, 75, 10, - 1, 248, 139, 10, 1, 247, 1, 10, 1, 248, 89, 10, 1, 241, 190, 10, 1, 241, - 205, 10, 1, 250, 64, 10, 1, 247, 60, 10, 1, 92, 233, 172, 10, 1, 247, 26, - 10, 232, 184, 10, 232, 105, 10, 232, 212, 10, 237, 247, 10, 237, 176, 10, - 238, 12, 10, 236, 220, 10, 238, 69, 10, 239, 92, 46, 10, 164, 46, 10, - 164, 51, 10, 231, 195, 240, 174, 10, 233, 70, 237, 176, 10, 165, 246, - 156, 235, 174, 10, 233, 68, 10, 31, 5, 3, 255, 69, 46, 10, 31, 5, 233, - 70, 3, 255, 69, 46, 10, 31, 5, 56, 51, 10, 200, 237, 176, 10, 240, 224, - 2, 135, 240, 169, 228, 177, 21, 240, 126, 228, 177, 21, 118, 228, 177, - 21, 113, 228, 177, 21, 166, 228, 177, 21, 158, 228, 177, 21, 173, 228, - 177, 21, 183, 228, 177, 21, 194, 228, 177, 21, 187, 228, 177, 21, 192, - 10, 235, 86, 53, 10, 235, 163, 230, 131, 10, 232, 12, 230, 131, 10, 246, - 159, 235, 50, 240, 139, 10, 1, 235, 46, 247, 251, 10, 1, 235, 46, 248, - 139, 10, 1, 229, 163, 240, 174, 10, 1, 92, 240, 82, 10, 1, 92, 2, 246, - 239, 164, 46, 10, 1, 92, 2, 246, 239, 164, 51, 10, 1, 201, 238, 5, 10, 1, - 201, 164, 240, 174, 10, 1, 201, 164, 247, 60, 10, 1, 97, 2, 164, 46, 10, - 1, 201, 164, 247, 26, 10, 1, 246, 12, 10, 1, 237, 12, 10, 1, 242, 197, - 10, 1, 252, 210, 2, 240, 147, 10, 1, 252, 210, 2, 152, 197, 64, 230, 134, - 10, 1, 247, 188, 10, 1, 240, 32, 10, 1, 238, 119, 10, 1, 101, 2, 164, 46, - 10, 1, 101, 2, 135, 197, 61, 46, 10, 1, 245, 20, 10, 1, 243, 89, 10, 1, - 101, 2, 152, 197, 46, 10, 1, 240, 30, 10, 1, 234, 242, 10, 1, 243, 30, - 10, 1, 253, 56, 2, 240, 147, 10, 1, 253, 56, 2, 56, 51, 10, 1, 253, 56, - 2, 56, 240, 144, 22, 3, 247, 55, 10, 1, 238, 167, 10, 1, 236, 43, 10, 1, - 249, 210, 10, 1, 253, 56, 2, 152, 197, 64, 230, 134, 10, 1, 253, 56, 2, - 246, 160, 197, 46, 10, 1, 245, 122, 10, 1, 252, 225, 2, 3, 196, 10, 1, - 252, 225, 2, 240, 147, 10, 1, 252, 225, 2, 56, 51, 10, 1, 252, 225, 2, 3, - 255, 69, 51, 10, 1, 252, 225, 2, 56, 240, 144, 22, 56, 46, 10, 1, 252, - 225, 2, 135, 197, 46, 10, 1, 250, 127, 10, 1, 252, 225, 2, 246, 160, 197, - 46, 10, 1, 246, 163, 2, 56, 240, 144, 22, 56, 46, 10, 1, 246, 163, 2, - 152, 197, 51, 10, 1, 246, 163, 2, 152, 197, 240, 144, 22, 152, 197, 46, - 10, 1, 252, 240, 2, 135, 197, 51, 10, 1, 252, 240, 2, 152, 197, 46, 10, - 1, 252, 241, 2, 152, 197, 46, 10, 1, 252, 244, 2, 152, 197, 46, 10, 1, - 235, 46, 247, 75, 10, 1, 252, 235, 2, 56, 244, 152, 51, 10, 1, 252, 235, - 2, 56, 51, 10, 1, 252, 73, 10, 1, 252, 235, 2, 152, 197, 51, 10, 1, 239, - 187, 10, 1, 253, 1, 2, 56, 46, 10, 1, 253, 1, 2, 152, 197, 46, 10, 1, - 239, 61, 10, 1, 241, 77, 247, 1, 10, 1, 252, 214, 2, 240, 147, 10, 1, - 252, 214, 2, 56, 46, 10, 1, 253, 69, 10, 1, 252, 214, 2, 152, 197, 51, - 10, 1, 250, 10, 10, 1, 253, 102, 2, 240, 147, 10, 1, 239, 140, 10, 1, - 253, 102, 2, 135, 197, 51, 10, 1, 243, 158, 10, 1, 253, 102, 2, 152, 197, - 46, 10, 1, 216, 2, 3, 196, 10, 1, 216, 2, 56, 46, 10, 1, 216, 2, 152, - 197, 46, 10, 1, 216, 2, 152, 197, 51, 10, 1, 246, 156, 2, 56, 51, 10, 1, - 246, 156, 235, 174, 10, 1, 239, 225, 10, 1, 246, 156, 2, 240, 147, 10, 1, - 246, 156, 2, 152, 197, 46, 10, 1, 252, 207, 228, 242, 10, 1, 240, 237, 2, - 56, 46, 10, 1, 252, 207, 2, 62, 46, 10, 1, 252, 207, 241, 144, 10, 1, - 252, 207, 247, 34, 2, 164, 46, 10, 1, 252, 210, 235, 129, 241, 144, 10, - 1, 253, 54, 2, 240, 147, 10, 1, 235, 49, 253, 15, 10, 1, 253, 15, 10, 1, - 66, 10, 1, 252, 233, 10, 1, 235, 49, 252, 233, 10, 1, 253, 54, 2, 135, - 197, 46, 10, 1, 253, 95, 10, 1, 240, 176, 247, 26, 10, 1, 62, 2, 240, - 133, 10, 1, 62, 2, 3, 196, 10, 1, 253, 54, 2, 56, 46, 10, 1, 72, 10, 1, - 62, 2, 152, 197, 51, 10, 1, 62, 236, 9, 10, 1, 62, 237, 123, 2, 164, 46, - 10, 246, 162, 240, 121, 10, 1, 253, 4, 10, 3, 201, 20, 252, 240, 2, 216, - 2, 92, 233, 172, 10, 3, 201, 20, 253, 1, 2, 216, 2, 92, 233, 172, 10, 3, - 201, 55, 59, 15, 10, 3, 201, 216, 240, 174, 10, 3, 201, 241, 164, 10, 3, - 201, 152, 240, 169, 10, 3, 201, 241, 67, 10, 252, 255, 106, 242, 68, 10, - 241, 75, 106, 254, 145, 254, 211, 243, 178, 10, 3, 201, 235, 98, 240, - 126, 10, 3, 201, 237, 15, 229, 211, 240, 126, 10, 3, 201, 235, 46, 247, - 148, 106, 241, 171, 10, 3, 201, 55, 44, 15, 10, 3, 184, 241, 67, 10, 3, - 201, 239, 91, 10, 3, 247, 60, 10, 3, 247, 26, 10, 3, 201, 247, 26, 10, 3, - 201, 241, 205, 10, 241, 214, 106, 236, 204, 10, 240, 195, 237, 95, 184, - 240, 121, 10, 240, 195, 237, 95, 201, 240, 121, 10, 235, 98, 201, 247, - 20, 2, 238, 219, 235, 111, 10, 3, 184, 241, 190, 10, 1, 253, 56, 2, 233, - 70, 196, 10, 1, 252, 225, 2, 233, 70, 196, 233, 81, 228, 177, 21, 240, - 126, 233, 81, 228, 177, 21, 118, 233, 81, 228, 177, 21, 113, 233, 81, - 228, 177, 21, 166, 233, 81, 228, 177, 21, 158, 233, 81, 228, 177, 21, - 173, 233, 81, 228, 177, 21, 183, 233, 81, 228, 177, 21, 194, 233, 81, - 228, 177, 21, 187, 233, 81, 228, 177, 21, 192, 10, 1, 240, 129, 2, 56, - 51, 10, 1, 252, 237, 2, 56, 51, 10, 1, 240, 157, 2, 56, 51, 10, 5, 238, - 60, 230, 142, 10, 5, 238, 60, 229, 52, 247, 173, 10, 1, 252, 207, 2, 233, - 70, 196, 151, 252, 255, 106, 231, 118, 151, 229, 194, 246, 162, 240, 121, - 151, 232, 8, 246, 162, 240, 121, 151, 229, 194, 237, 66, 151, 232, 8, - 237, 66, 151, 169, 237, 66, 151, 240, 194, 237, 191, 240, 132, 151, 240, - 194, 237, 191, 237, 41, 151, 229, 194, 240, 194, 237, 191, 240, 132, 151, - 232, 8, 240, 194, 237, 191, 237, 41, 151, 228, 230, 151, 233, 166, 236, - 173, 151, 233, 166, 231, 101, 151, 233, 166, 229, 231, 151, 228, 196, 76, - 151, 1, 237, 227, 151, 1, 229, 163, 237, 227, 151, 1, 242, 202, 151, 1, - 238, 231, 151, 1, 243, 113, 232, 23, 151, 1, 236, 40, 151, 1, 235, 46, - 238, 169, 241, 224, 151, 1, 252, 252, 151, 1, 247, 60, 151, 1, 241, 89, - 151, 1, 243, 172, 151, 1, 245, 241, 151, 1, 252, 15, 232, 23, 151, 1, - 246, 100, 151, 1, 252, 156, 252, 252, 151, 1, 244, 49, 151, 1, 236, 129, - 151, 1, 251, 16, 151, 1, 246, 195, 151, 1, 233, 234, 151, 1, 35, 233, - 234, 151, 1, 72, 151, 1, 253, 0, 151, 1, 200, 253, 0, 151, 1, 239, 232, - 151, 1, 245, 91, 151, 1, 241, 224, 151, 1, 240, 203, 151, 1, 252, 9, 151, - 1, 235, 15, 238, 122, 151, 1, 235, 15, 236, 95, 151, 1, 235, 15, 234, 50, - 151, 237, 211, 46, 151, 237, 211, 51, 151, 237, 211, 235, 120, 151, 237, - 226, 46, 151, 237, 226, 51, 151, 237, 226, 235, 120, 151, 241, 221, 46, - 151, 241, 221, 51, 151, 237, 50, 242, 39, 229, 164, 151, 237, 50, 242, - 39, 234, 3, 151, 241, 152, 46, 151, 241, 152, 51, 151, 230, 65, 235, 120, - 151, 241, 128, 46, 151, 241, 128, 51, 151, 239, 231, 151, 233, 204, 246, - 164, 151, 231, 130, 151, 233, 15, 151, 135, 61, 197, 46, 151, 135, 61, - 197, 51, 151, 152, 197, 46, 151, 152, 197, 51, 151, 235, 78, 246, 167, - 46, 151, 235, 78, 246, 167, 51, 151, 239, 123, 151, 234, 13, 151, 1, 235, - 137, 240, 103, 151, 1, 235, 137, 239, 68, 151, 1, 235, 137, 253, 147, 10, - 1, 252, 217, 2, 152, 197, 229, 27, 51, 10, 1, 252, 217, 2, 56, 240, 144, - 22, 152, 197, 46, 10, 1, 252, 217, 2, 152, 197, 233, 78, 235, 18, 51, 10, - 1, 252, 217, 2, 152, 197, 233, 78, 235, 18, 240, 144, 22, 135, 197, 46, - 10, 1, 252, 217, 2, 135, 197, 240, 144, 22, 56, 46, 10, 1, 252, 217, 2, - 233, 70, 3, 255, 69, 51, 10, 1, 252, 217, 2, 3, 196, 10, 1, 101, 2, 135, - 197, 46, 10, 1, 101, 2, 152, 197, 233, 78, 235, 18, 51, 10, 1, 253, 56, - 2, 135, 197, 230, 161, 240, 144, 22, 3, 247, 55, 10, 1, 253, 56, 2, 233, - 70, 3, 255, 69, 51, 10, 1, 252, 225, 2, 82, 10, 1, 246, 163, 2, 246, 160, - 197, 46, 10, 1, 252, 244, 2, 135, 197, 46, 10, 1, 252, 244, 2, 152, 197, - 233, 78, 231, 191, 46, 10, 1, 252, 244, 2, 135, 197, 230, 161, 46, 10, 1, - 252, 235, 2, 135, 197, 51, 10, 1, 252, 235, 2, 152, 197, 233, 78, 235, - 18, 51, 10, 1, 240, 191, 2, 56, 46, 10, 1, 240, 191, 2, 152, 197, 46, 10, - 1, 240, 191, 2, 152, 197, 233, 78, 235, 18, 51, 10, 1, 55, 2, 56, 46, 10, - 1, 55, 2, 56, 51, 10, 1, 246, 156, 2, 135, 197, 51, 10, 1, 246, 156, 2, - 3, 247, 55, 10, 1, 246, 156, 2, 3, 196, 10, 1, 216, 2, 125, 10, 1, 252, - 225, 2, 135, 197, 230, 161, 46, 10, 1, 252, 225, 2, 164, 46, 10, 1, 246, - 163, 2, 135, 197, 230, 161, 46, 10, 1, 101, 2, 3, 10, 1, 252, 241, 51, - 10, 1, 101, 2, 3, 10, 1, 252, 241, 22, 135, 240, 169, 10, 1, 246, 163, 2, - 3, 10, 1, 252, 241, 22, 135, 240, 169, 10, 1, 252, 225, 2, 3, 10, 1, 252, - 241, 22, 135, 240, 169, 10, 1, 101, 2, 3, 10, 1, 252, 241, 46, 10, 1, 92, - 2, 233, 81, 228, 177, 21, 135, 46, 10, 1, 92, 2, 233, 81, 228, 177, 21, - 152, 46, 10, 1, 240, 176, 62, 2, 233, 81, 228, 177, 21, 135, 46, 10, 1, - 240, 176, 62, 2, 233, 81, 228, 177, 21, 152, 46, 10, 1, 240, 176, 62, 2, - 233, 81, 228, 177, 21, 246, 160, 51, 10, 1, 253, 54, 2, 233, 81, 228, - 177, 21, 135, 46, 10, 1, 253, 54, 2, 233, 81, 228, 177, 21, 152, 46, 10, - 1, 62, 237, 123, 2, 233, 81, 228, 177, 21, 135, 46, 10, 1, 62, 237, 123, - 2, 233, 81, 228, 177, 21, 152, 46, 10, 1, 101, 2, 233, 81, 228, 177, 21, - 246, 160, 51, 10, 1, 246, 163, 2, 233, 81, 228, 177, 21, 246, 160, 46, - 10, 1, 246, 163, 2, 233, 70, 196, 10, 1, 252, 214, 2, 135, 197, 46, 237, - 37, 1, 247, 14, 237, 37, 1, 231, 141, 237, 37, 1, 239, 155, 237, 37, 1, - 247, 100, 237, 37, 1, 247, 247, 237, 37, 1, 231, 97, 237, 37, 1, 239, 54, - 237, 37, 1, 238, 94, 237, 37, 1, 240, 71, 237, 37, 1, 239, 100, 237, 37, - 1, 238, 211, 237, 37, 1, 236, 47, 237, 37, 1, 241, 18, 237, 37, 1, 239, - 78, 237, 37, 1, 238, 228, 237, 37, 1, 231, 74, 237, 37, 1, 239, 239, 237, - 37, 1, 232, 107, 237, 37, 1, 233, 67, 237, 37, 1, 233, 51, 237, 37, 1, - 247, 117, 237, 37, 1, 232, 246, 237, 37, 1, 232, 211, 237, 37, 1, 230, - 234, 237, 37, 1, 246, 10, 237, 37, 1, 241, 156, 237, 37, 1, 244, 52, 237, - 37, 1, 237, 1, 237, 37, 1, 248, 207, 237, 37, 1, 236, 222, 237, 37, 1, - 236, 203, 237, 37, 1, 236, 39, 237, 37, 1, 96, 237, 37, 1, 253, 65, 237, - 37, 1, 242, 49, 237, 37, 1, 236, 94, 237, 37, 1, 239, 206, 237, 37, 1, - 240, 81, 237, 37, 233, 252, 237, 37, 230, 220, 237, 37, 234, 123, 237, - 37, 231, 61, 237, 37, 235, 1, 237, 37, 231, 111, 237, 37, 234, 90, 237, - 37, 231, 68, 237, 37, 234, 173, 237, 37, 231, 110, 237, 37, 238, 69, 237, - 37, 1, 247, 179, 204, 21, 240, 126, 204, 21, 118, 204, 21, 113, 204, 21, - 166, 204, 21, 158, 204, 21, 173, 204, 21, 183, 204, 21, 194, 204, 21, - 187, 204, 21, 192, 204, 1, 57, 204, 1, 252, 231, 204, 1, 74, 204, 1, 72, - 204, 1, 66, 204, 1, 252, 220, 204, 1, 73, 204, 1, 229, 244, 204, 1, 199, - 204, 1, 252, 211, 204, 1, 213, 204, 1, 252, 202, 204, 1, 252, 213, 204, - 1, 246, 176, 204, 1, 252, 203, 204, 1, 208, 204, 1, 246, 221, 204, 1, - 252, 204, 204, 1, 248, 46, 204, 1, 252, 234, 204, 1, 177, 204, 1, 252, - 200, 204, 1, 255, 13, 235, 231, 204, 1, 198, 204, 1, 246, 181, 204, 1, - 252, 201, 204, 1, 154, 204, 1, 252, 208, 204, 1, 191, 204, 1, 254, 119, - 235, 231, 204, 1, 247, 154, 252, 213, 204, 1, 247, 154, 246, 176, 204, 1, - 247, 154, 208, 204, 36, 240, 125, 201, 240, 167, 204, 36, 240, 125, 184, - 240, 167, 204, 36, 240, 125, 237, 115, 240, 167, 204, 36, 182, 230, 181, - 240, 167, 204, 36, 182, 201, 240, 167, 204, 36, 182, 184, 240, 167, 204, - 36, 182, 237, 115, 240, 167, 204, 36, 229, 40, 76, 204, 36, 47, 56, 46, - 204, 201, 206, 229, 172, 204, 184, 206, 229, 172, 204, 14, 255, 41, 236, - 46, 204, 14, 230, 64, 204, 237, 67, 204, 229, 165, 76, 204, 230, 75, 94, - 5, 228, 184, 94, 5, 231, 206, 94, 5, 233, 102, 94, 1, 240, 125, 57, 94, - 1, 57, 94, 1, 252, 212, 94, 1, 74, 94, 1, 252, 216, 94, 1, 66, 94, 1, - 252, 224, 94, 1, 153, 146, 94, 1, 153, 149, 94, 1, 237, 108, 72, 94, 1, - 240, 125, 72, 94, 1, 72, 94, 1, 252, 221, 94, 1, 237, 108, 73, 94, 1, - 240, 125, 73, 94, 1, 73, 94, 1, 252, 222, 94, 1, 177, 94, 1, 246, 178, - 94, 1, 252, 205, 94, 1, 246, 202, 94, 1, 246, 169, 94, 1, 252, 215, 94, - 1, 246, 176, 94, 1, 252, 213, 94, 1, 246, 213, 94, 1, 246, 181, 94, 1, - 246, 191, 94, 1, 240, 150, 94, 1, 246, 192, 94, 1, 240, 166, 94, 1, 246, - 203, 94, 1, 252, 202, 94, 1, 246, 173, 94, 1, 252, 203, 94, 1, 246, 196, - 94, 1, 252, 201, 94, 1, 241, 203, 94, 1, 213, 94, 1, 246, 182, 94, 1, - 252, 211, 94, 1, 246, 199, 94, 1, 198, 94, 1, 191, 94, 1, 208, 94, 1, - 246, 221, 94, 1, 252, 200, 94, 1, 246, 225, 94, 1, 241, 48, 94, 1, 252, - 243, 94, 1, 246, 165, 94, 1, 246, 190, 94, 1, 252, 204, 94, 1, 154, 94, - 5, 237, 125, 94, 5, 231, 220, 94, 31, 5, 252, 212, 94, 31, 5, 74, 94, 31, - 5, 252, 216, 94, 31, 5, 66, 94, 31, 5, 252, 224, 94, 31, 5, 153, 146, 94, - 31, 5, 153, 252, 249, 94, 31, 5, 237, 108, 72, 94, 31, 5, 240, 125, 72, - 94, 31, 5, 72, 94, 31, 5, 252, 221, 94, 31, 5, 237, 108, 73, 94, 31, 5, - 240, 125, 73, 94, 31, 5, 73, 94, 31, 5, 252, 222, 94, 5, 235, 43, 94, - 253, 128, 94, 237, 165, 5, 237, 14, 94, 237, 165, 5, 232, 68, 94, 240, - 163, 235, 24, 94, 240, 159, 235, 24, 94, 1, 253, 35, 94, 1, 241, 173, 94, - 1, 241, 142, 94, 1, 252, 226, 94, 1, 238, 174, 94, 1, 247, 48, 94, 1, - 252, 234, 94, 1, 247, 236, 94, 1, 153, 252, 249, 94, 1, 153, 252, 245, - 94, 31, 5, 153, 149, 94, 31, 5, 153, 252, 245, 94, 237, 109, 94, 47, 237, - 109, 94, 21, 240, 126, 94, 21, 118, 94, 21, 113, 94, 21, 166, 94, 21, - 158, 94, 21, 173, 94, 21, 183, 94, 21, 194, 94, 21, 187, 94, 21, 192, 94, - 228, 196, 53, 94, 5, 201, 236, 234, 246, 164, 94, 1, 237, 108, 57, 94, 1, - 247, 77, 94, 1, 248, 70, 94, 1, 235, 31, 240, 121, 94, 1, 243, 34, 94, 1, - 247, 66, 121, 5, 228, 184, 121, 5, 231, 206, 121, 5, 233, 102, 121, 1, - 57, 121, 1, 252, 212, 121, 1, 74, 121, 1, 252, 216, 121, 1, 66, 121, 1, - 252, 224, 121, 1, 153, 146, 121, 1, 153, 149, 121, 1, 72, 121, 1, 252, - 221, 121, 1, 73, 121, 1, 252, 222, 121, 1, 177, 121, 1, 246, 178, 121, 1, - 252, 205, 121, 1, 246, 202, 121, 1, 246, 169, 121, 1, 252, 215, 121, 1, - 246, 176, 121, 1, 252, 213, 121, 1, 246, 213, 121, 1, 246, 181, 121, 1, - 246, 191, 121, 1, 240, 150, 121, 1, 246, 192, 121, 1, 240, 166, 121, 1, - 246, 203, 121, 1, 252, 202, 121, 1, 246, 173, 121, 1, 252, 203, 121, 1, - 246, 196, 121, 1, 252, 201, 121, 1, 213, 121, 1, 246, 182, 121, 1, 252, - 211, 121, 1, 246, 199, 121, 1, 198, 121, 1, 191, 121, 1, 208, 121, 1, - 252, 200, 121, 1, 246, 165, 121, 1, 246, 190, 121, 1, 252, 204, 121, 1, - 154, 121, 5, 237, 125, 121, 5, 231, 220, 121, 31, 5, 252, 212, 121, 31, - 5, 74, 121, 31, 5, 252, 216, 121, 31, 5, 66, 121, 31, 5, 252, 224, 121, - 31, 5, 153, 146, 121, 31, 5, 153, 252, 249, 121, 31, 5, 72, 121, 31, 5, - 252, 221, 121, 31, 5, 73, 121, 31, 5, 252, 222, 121, 5, 235, 43, 121, 1, - 239, 67, 252, 202, 121, 254, 233, 237, 101, 76, 121, 1, 246, 221, 121, 1, - 247, 48, 121, 1, 247, 236, 121, 1, 153, 252, 249, 121, 1, 153, 252, 245, - 121, 31, 5, 153, 149, 121, 31, 5, 153, 252, 245, 121, 21, 240, 126, 121, - 21, 118, 121, 21, 113, 121, 21, 166, 121, 21, 158, 121, 21, 173, 121, 21, - 183, 121, 21, 194, 121, 21, 187, 121, 21, 192, 121, 1, 254, 224, 2, 237, - 44, 231, 236, 121, 1, 254, 224, 2, 203, 231, 236, 121, 240, 234, 76, 121, - 240, 234, 53, 121, 233, 112, 231, 227, 118, 121, 233, 112, 231, 227, 113, - 121, 233, 112, 231, 227, 166, 121, 233, 112, 231, 227, 158, 121, 233, - 112, 231, 227, 168, 250, 215, 247, 212, 252, 230, 228, 238, 121, 233, - 112, 229, 246, 233, 135, 121, 235, 179, 148, 5, 248, 228, 237, 232, 148, - 5, 237, 232, 148, 5, 233, 102, 148, 1, 57, 148, 1, 252, 212, 148, 1, 74, - 148, 1, 252, 216, 148, 1, 66, 148, 1, 252, 224, 148, 1, 252, 231, 148, 1, - 252, 221, 148, 1, 252, 220, 148, 1, 252, 222, 148, 1, 177, 148, 1, 246, - 178, 148, 1, 252, 205, 148, 1, 246, 202, 148, 1, 246, 169, 148, 1, 252, - 215, 148, 1, 246, 176, 148, 1, 252, 213, 148, 1, 246, 213, 148, 1, 246, - 181, 148, 1, 246, 191, 148, 1, 240, 150, 148, 1, 246, 192, 148, 1, 240, - 166, 148, 1, 246, 203, 148, 1, 252, 202, 148, 1, 246, 173, 148, 1, 252, - 203, 148, 1, 246, 196, 148, 1, 252, 201, 148, 1, 213, 148, 1, 246, 182, - 148, 1, 252, 211, 148, 1, 246, 199, 148, 1, 198, 148, 1, 191, 148, 1, - 208, 148, 1, 252, 200, 148, 1, 246, 225, 148, 1, 252, 243, 148, 1, 246, - 165, 148, 1, 252, 204, 148, 1, 154, 148, 5, 237, 125, 148, 31, 5, 252, - 212, 148, 31, 5, 74, 148, 31, 5, 252, 216, 148, 31, 5, 66, 148, 31, 5, - 252, 224, 148, 31, 5, 252, 231, 148, 31, 5, 252, 221, 148, 31, 5, 252, - 220, 148, 31, 5, 252, 222, 148, 5, 235, 43, 148, 5, 240, 64, 148, 1, 241, - 173, 148, 1, 241, 142, 148, 1, 252, 226, 148, 1, 246, 221, 148, 1, 252, - 234, 148, 21, 240, 126, 148, 21, 118, 148, 21, 113, 148, 21, 166, 148, - 21, 158, 148, 21, 173, 148, 21, 183, 148, 21, 194, 148, 21, 187, 148, 21, - 192, 148, 240, 44, 148, 238, 89, 148, 250, 122, 148, 252, 60, 148, 255, - 25, 239, 174, 148, 5, 237, 32, 137, 5, 228, 184, 137, 5, 231, 206, 137, - 5, 233, 102, 137, 1, 57, 137, 1, 252, 212, 137, 1, 74, 137, 1, 252, 216, - 137, 1, 66, 137, 1, 252, 224, 137, 1, 153, 146, 137, 1, 153, 149, 137, - 31, 237, 108, 72, 137, 1, 72, 137, 1, 252, 221, 137, 31, 237, 108, 73, - 137, 1, 73, 137, 1, 252, 222, 137, 1, 177, 137, 1, 246, 178, 137, 1, 252, - 205, 137, 1, 246, 202, 137, 1, 246, 169, 137, 1, 252, 215, 137, 1, 246, - 176, 137, 1, 252, 213, 137, 1, 246, 213, 137, 1, 246, 181, 137, 1, 246, - 191, 137, 1, 240, 150, 137, 1, 246, 192, 137, 1, 240, 166, 137, 1, 246, - 203, 137, 1, 252, 202, 137, 1, 246, 173, 137, 1, 252, 203, 137, 1, 246, - 196, 137, 1, 252, 201, 137, 1, 213, 137, 1, 246, 182, 137, 1, 252, 211, - 137, 1, 246, 199, 137, 1, 198, 137, 1, 191, 137, 1, 208, 137, 1, 252, - 200, 137, 1, 246, 225, 137, 1, 252, 243, 137, 1, 246, 165, 137, 1, 246, - 190, 137, 1, 252, 204, 137, 1, 154, 137, 5, 237, 125, 137, 5, 231, 220, - 137, 31, 5, 252, 212, 137, 31, 5, 74, 137, 31, 5, 252, 216, 137, 31, 5, - 66, 137, 31, 5, 252, 224, 137, 31, 5, 153, 146, 137, 31, 5, 153, 252, - 249, 137, 31, 5, 237, 108, 72, 137, 31, 5, 72, 137, 31, 5, 252, 221, 137, - 31, 5, 237, 108, 73, 137, 31, 5, 73, 137, 31, 5, 252, 222, 137, 5, 235, - 43, 137, 253, 128, 137, 1, 153, 252, 249, 137, 1, 153, 252, 245, 137, 31, - 5, 153, 149, 137, 31, 5, 153, 252, 245, 137, 21, 240, 126, 137, 21, 118, - 137, 21, 113, 137, 21, 166, 137, 21, 158, 137, 21, 173, 137, 21, 183, - 137, 21, 194, 137, 21, 187, 137, 21, 192, 137, 240, 234, 53, 134, 5, 228, - 184, 134, 5, 231, 206, 134, 5, 233, 102, 134, 1, 57, 134, 1, 252, 212, - 134, 1, 74, 134, 1, 252, 216, 134, 1, 66, 134, 1, 252, 224, 134, 1, 153, - 146, 134, 1, 153, 149, 134, 1, 72, 134, 1, 252, 221, 134, 1, 73, 134, 1, - 252, 222, 134, 1, 177, 134, 1, 246, 178, 134, 1, 252, 205, 134, 1, 246, - 202, 134, 1, 246, 169, 134, 1, 252, 215, 134, 1, 246, 176, 134, 1, 252, - 213, 134, 1, 246, 213, 134, 1, 246, 181, 134, 1, 246, 191, 134, 1, 240, - 150, 134, 1, 246, 192, 134, 1, 240, 166, 134, 1, 246, 203, 134, 1, 252, - 202, 134, 1, 246, 173, 134, 1, 252, 203, 134, 1, 246, 196, 134, 1, 252, - 201, 134, 1, 213, 134, 1, 246, 182, 134, 1, 252, 211, 134, 1, 246, 199, - 134, 1, 198, 134, 1, 191, 134, 1, 208, 134, 1, 252, 200, 134, 1, 246, - 225, 134, 1, 252, 243, 134, 1, 246, 165, 134, 1, 246, 190, 134, 1, 252, - 204, 134, 1, 154, 134, 5, 237, 125, 134, 5, 231, 220, 134, 31, 5, 252, - 212, 134, 31, 5, 74, 134, 31, 5, 252, 216, 134, 31, 5, 66, 134, 31, 5, - 252, 224, 134, 31, 5, 153, 146, 134, 31, 5, 153, 252, 249, 134, 31, 5, - 72, 134, 31, 5, 252, 221, 134, 31, 5, 73, 134, 31, 5, 252, 222, 134, 5, - 235, 43, 134, 254, 227, 237, 101, 76, 134, 254, 233, 237, 101, 76, 134, - 1, 246, 221, 134, 1, 247, 48, 134, 1, 247, 236, 134, 1, 153, 252, 249, - 134, 1, 153, 252, 245, 134, 31, 5, 153, 149, 134, 31, 5, 153, 252, 245, - 134, 21, 240, 126, 134, 21, 118, 134, 21, 113, 134, 21, 166, 134, 21, - 158, 134, 21, 173, 134, 21, 183, 134, 21, 194, 134, 21, 187, 134, 21, - 192, 134, 235, 179, 134, 1, 252, 208, 160, 5, 231, 206, 160, 5, 233, 102, - 160, 1, 57, 160, 1, 252, 212, 160, 1, 74, 160, 1, 252, 216, 160, 1, 66, - 160, 1, 252, 224, 160, 1, 72, 160, 1, 252, 231, 160, 1, 252, 221, 160, 1, - 73, 160, 1, 252, 220, 160, 1, 252, 222, 160, 1, 177, 160, 1, 246, 169, - 160, 1, 252, 215, 160, 1, 252, 213, 160, 1, 246, 181, 160, 1, 246, 191, - 160, 1, 246, 203, 160, 1, 252, 202, 160, 1, 252, 201, 160, 1, 241, 203, - 160, 1, 213, 160, 1, 198, 160, 1, 191, 160, 1, 208, 160, 1, 246, 221, - 160, 1, 252, 200, 160, 1, 246, 225, 160, 1, 241, 48, 160, 1, 252, 243, - 160, 1, 246, 165, 160, 1, 246, 190, 160, 1, 252, 204, 160, 1, 154, 160, - 31, 5, 252, 212, 160, 31, 5, 74, 160, 31, 5, 252, 216, 160, 31, 5, 66, - 160, 31, 5, 252, 224, 160, 31, 5, 72, 160, 31, 5, 252, 231, 160, 31, 5, - 252, 221, 160, 31, 5, 73, 160, 31, 5, 252, 220, 160, 31, 5, 252, 222, - 160, 5, 235, 43, 160, 253, 128, 160, 254, 233, 237, 101, 76, 160, 21, - 240, 126, 160, 21, 118, 160, 21, 113, 160, 21, 166, 160, 21, 158, 160, - 21, 173, 160, 21, 183, 160, 21, 194, 160, 21, 187, 160, 21, 192, 160, 65, - 246, 179, 160, 65, 168, 233, 75, 160, 65, 168, 231, 196, 160, 252, 218, - 53, 160, 244, 150, 53, 160, 248, 200, 53, 160, 243, 53, 53, 160, 238, - 163, 53, 160, 254, 203, 64, 53, 160, 240, 234, 53, 160, 65, 53, 119, 5, - 228, 184, 119, 5, 231, 206, 119, 5, 233, 102, 119, 1, 57, 119, 1, 252, - 212, 119, 1, 74, 119, 1, 252, 216, 119, 1, 66, 119, 1, 252, 224, 119, 1, - 153, 146, 119, 1, 153, 149, 119, 1, 72, 119, 1, 252, 231, 119, 1, 252, - 221, 119, 1, 73, 119, 1, 252, 220, 119, 1, 252, 222, 119, 1, 177, 119, 1, - 246, 178, 119, 1, 252, 205, 119, 1, 246, 202, 119, 1, 246, 169, 119, 1, - 252, 215, 119, 1, 246, 176, 119, 1, 252, 213, 119, 1, 246, 213, 119, 1, - 246, 181, 119, 1, 246, 191, 119, 1, 240, 150, 119, 1, 246, 192, 119, 1, - 240, 166, 119, 1, 246, 203, 119, 1, 252, 202, 119, 1, 246, 173, 119, 1, - 252, 203, 119, 1, 246, 196, 119, 1, 252, 201, 119, 1, 213, 119, 1, 246, - 182, 119, 1, 252, 211, 119, 1, 246, 199, 119, 1, 198, 119, 1, 191, 119, - 1, 208, 119, 1, 246, 221, 119, 1, 252, 200, 119, 1, 246, 225, 119, 1, - 252, 243, 119, 1, 246, 165, 119, 1, 246, 190, 119, 1, 252, 204, 119, 1, - 154, 119, 5, 231, 220, 119, 31, 5, 252, 212, 119, 31, 5, 74, 119, 31, 5, - 252, 216, 119, 31, 5, 66, 119, 31, 5, 252, 224, 119, 31, 5, 153, 146, - 119, 31, 5, 153, 252, 249, 119, 31, 5, 72, 119, 31, 5, 252, 231, 119, 31, - 5, 252, 221, 119, 31, 5, 73, 119, 31, 5, 252, 220, 119, 31, 5, 252, 222, - 119, 5, 235, 43, 119, 237, 101, 76, 119, 254, 227, 237, 101, 76, 119, 1, - 246, 216, 119, 1, 246, 254, 119, 1, 153, 252, 249, 119, 1, 153, 252, 245, - 119, 31, 5, 153, 149, 119, 31, 5, 153, 252, 245, 119, 21, 240, 126, 119, - 21, 118, 119, 21, 113, 119, 21, 166, 119, 21, 158, 119, 21, 173, 119, 21, - 183, 119, 21, 194, 119, 21, 187, 119, 21, 192, 119, 233, 76, 21, 247, 27, - 32, 253, 156, 237, 126, 106, 158, 119, 233, 76, 21, 168, 32, 253, 156, - 237, 126, 106, 158, 119, 233, 76, 21, 135, 32, 253, 156, 237, 126, 106, - 158, 119, 233, 76, 21, 152, 32, 253, 156, 237, 126, 106, 158, 119, 233, - 76, 21, 168, 32, 247, 138, 237, 126, 106, 158, 119, 233, 76, 21, 135, 32, - 247, 138, 237, 126, 106, 158, 119, 233, 76, 21, 152, 32, 247, 138, 237, - 126, 106, 158, 119, 5, 240, 56, 129, 5, 231, 206, 129, 5, 233, 102, 129, - 1, 57, 129, 1, 252, 212, 129, 1, 74, 129, 1, 252, 216, 129, 1, 66, 129, - 1, 252, 224, 129, 1, 153, 146, 129, 1, 153, 149, 129, 1, 72, 129, 1, 252, - 231, 129, 1, 252, 221, 129, 1, 73, 129, 1, 252, 220, 129, 1, 252, 222, - 129, 1, 177, 129, 1, 246, 178, 129, 1, 252, 205, 129, 1, 246, 202, 129, - 1, 246, 169, 129, 1, 252, 215, 129, 1, 246, 176, 129, 1, 252, 213, 129, - 1, 246, 213, 129, 1, 246, 181, 129, 1, 246, 191, 129, 1, 240, 150, 129, - 1, 246, 192, 129, 1, 240, 166, 129, 1, 246, 203, 129, 1, 252, 202, 129, - 1, 246, 173, 129, 1, 252, 203, 129, 1, 246, 196, 129, 1, 252, 201, 129, - 1, 213, 129, 1, 246, 182, 129, 1, 252, 211, 129, 1, 246, 199, 129, 1, - 198, 129, 1, 191, 129, 1, 208, 129, 1, 246, 221, 129, 1, 252, 200, 129, - 1, 246, 225, 129, 1, 252, 243, 129, 1, 246, 165, 129, 1, 246, 190, 129, - 1, 252, 204, 129, 1, 154, 129, 5, 237, 125, 129, 5, 231, 220, 129, 31, 5, - 252, 212, 129, 31, 5, 74, 129, 31, 5, 252, 216, 129, 31, 5, 66, 129, 31, - 5, 252, 224, 129, 31, 5, 153, 146, 129, 31, 5, 153, 252, 249, 129, 31, 5, - 72, 129, 31, 5, 252, 231, 129, 31, 5, 252, 221, 129, 31, 5, 73, 129, 31, - 5, 252, 220, 129, 31, 5, 252, 222, 129, 5, 235, 43, 129, 237, 101, 76, - 129, 254, 227, 237, 101, 76, 129, 1, 252, 234, 129, 1, 153, 252, 249, - 129, 1, 153, 252, 245, 129, 31, 5, 153, 149, 129, 31, 5, 153, 252, 245, - 129, 21, 240, 126, 129, 21, 118, 129, 21, 113, 129, 21, 166, 129, 21, - 158, 129, 21, 173, 129, 21, 183, 129, 21, 194, 129, 21, 187, 129, 21, - 192, 129, 5, 229, 33, 129, 5, 229, 160, 114, 5, 231, 206, 114, 5, 233, - 102, 114, 1, 57, 114, 1, 252, 212, 114, 1, 74, 114, 1, 252, 216, 114, 1, - 66, 114, 1, 252, 224, 114, 1, 153, 146, 114, 1, 153, 149, 114, 1, 72, - 114, 1, 252, 231, 114, 1, 252, 221, 114, 1, 73, 114, 1, 252, 220, 114, 1, - 252, 222, 114, 1, 177, 114, 1, 246, 178, 114, 1, 252, 205, 114, 1, 246, - 202, 114, 1, 246, 169, 114, 1, 252, 215, 114, 1, 246, 176, 114, 1, 252, - 213, 114, 1, 246, 213, 114, 1, 246, 181, 114, 1, 246, 191, 114, 1, 240, - 150, 114, 1, 246, 192, 114, 1, 240, 166, 114, 1, 246, 203, 114, 1, 252, - 202, 114, 1, 246, 173, 114, 1, 252, 203, 114, 1, 246, 196, 114, 1, 252, - 201, 114, 1, 213, 114, 1, 246, 182, 114, 1, 252, 211, 114, 1, 246, 199, - 114, 1, 198, 114, 1, 191, 114, 1, 208, 114, 1, 246, 221, 114, 1, 252, - 200, 114, 1, 246, 225, 114, 1, 241, 48, 114, 1, 252, 243, 114, 1, 246, - 165, 114, 1, 246, 190, 114, 1, 252, 204, 114, 1, 154, 114, 5, 231, 220, - 114, 31, 5, 252, 212, 114, 31, 5, 74, 114, 31, 5, 252, 216, 114, 31, 5, - 66, 114, 31, 5, 252, 224, 114, 31, 5, 153, 146, 114, 31, 5, 153, 252, - 249, 114, 31, 5, 72, 114, 31, 5, 252, 231, 114, 31, 5, 252, 221, 114, 31, - 5, 73, 114, 31, 5, 252, 220, 114, 31, 5, 252, 222, 114, 5, 235, 43, 114, - 254, 233, 237, 101, 76, 114, 1, 153, 252, 249, 114, 1, 153, 252, 245, - 114, 31, 5, 153, 149, 114, 31, 5, 153, 252, 245, 114, 21, 240, 126, 114, - 21, 118, 114, 21, 113, 114, 21, 166, 114, 21, 158, 114, 21, 173, 114, 21, - 183, 114, 21, 194, 114, 21, 187, 114, 21, 192, 114, 65, 246, 179, 114, - 65, 168, 233, 75, 114, 65, 168, 231, 196, 114, 233, 76, 168, 233, 155, - 114, 233, 76, 168, 240, 170, 114, 233, 76, 152, 232, 41, 114, 248, 20, - 76, 114, 1, 237, 129, 253, 155, 114, 1, 237, 129, 199, 114, 1, 237, 129, - 252, 249, 114, 1, 237, 129, 149, 114, 1, 237, 129, 252, 245, 114, 1, 237, - 129, 254, 186, 147, 5, 229, 229, 147, 5, 231, 184, 147, 1, 236, 3, 147, - 1, 233, 251, 147, 1, 233, 254, 147, 1, 232, 66, 147, 1, 236, 114, 147, 1, - 234, 125, 147, 1, 237, 19, 147, 1, 235, 3, 147, 1, 232, 210, 147, 1, 231, - 88, 147, 1, 232, 205, 147, 1, 231, 81, 147, 1, 236, 67, 147, 1, 234, 91, - 147, 1, 233, 255, 147, 1, 236, 180, 147, 1, 234, 177, 147, 1, 234, 10, - 147, 1, 230, 135, 233, 211, 147, 1, 229, 171, 233, 211, 147, 1, 230, 135, - 233, 165, 147, 1, 229, 171, 233, 165, 147, 1, 236, 117, 229, 203, 147, 1, - 235, 99, 233, 165, 147, 1, 230, 135, 233, 189, 147, 1, 229, 171, 233, - 189, 147, 1, 230, 135, 233, 168, 147, 1, 229, 171, 233, 168, 147, 1, 235, - 140, 229, 203, 147, 1, 235, 140, 234, 215, 229, 39, 147, 1, 235, 99, 233, - 168, 147, 1, 230, 135, 232, 59, 147, 1, 229, 171, 232, 59, 147, 1, 230, - 135, 231, 248, 147, 1, 229, 171, 231, 248, 147, 1, 232, 1, 233, 221, 147, - 1, 235, 99, 231, 248, 147, 1, 230, 135, 233, 244, 147, 1, 229, 171, 233, - 244, 147, 1, 230, 135, 233, 161, 147, 1, 229, 171, 233, 161, 147, 1, 235, - 118, 233, 221, 147, 1, 235, 99, 233, 161, 147, 1, 230, 135, 233, 224, - 147, 1, 229, 171, 233, 224, 147, 1, 230, 135, 233, 159, 147, 1, 229, 171, - 233, 159, 147, 1, 234, 156, 147, 1, 248, 235, 233, 159, 147, 1, 235, 11, - 147, 1, 234, 203, 147, 1, 235, 118, 233, 215, 147, 1, 235, 5, 147, 1, - 235, 140, 233, 178, 147, 1, 232, 1, 233, 178, 147, 1, 235, 118, 233, 178, - 147, 1, 234, 118, 147, 1, 232, 1, 233, 215, 147, 1, 234, 101, 147, 5, - 230, 222, 147, 31, 5, 229, 181, 147, 31, 5, 241, 45, 229, 195, 147, 31, - 5, 246, 253, 229, 195, 147, 31, 5, 241, 45, 232, 29, 147, 31, 5, 246, - 253, 232, 29, 147, 31, 5, 241, 45, 230, 190, 147, 31, 5, 246, 253, 230, - 190, 147, 31, 5, 227, 203, 147, 31, 5, 233, 212, 147, 31, 5, 246, 253, - 233, 212, 147, 31, 5, 244, 63, 243, 56, 147, 31, 5, 235, 125, 253, 181, - 229, 181, 147, 31, 5, 235, 125, 253, 181, 246, 253, 229, 181, 147, 31, 5, - 235, 125, 253, 181, 228, 198, 147, 31, 5, 228, 198, 147, 31, 5, 246, 253, - 227, 203, 147, 31, 5, 246, 253, 228, 198, 147, 229, 161, 230, 74, 128, - 116, 255, 9, 248, 78, 128, 116, 253, 105, 244, 53, 128, 116, 253, 105, - 239, 69, 128, 116, 253, 105, 239, 70, 128, 116, 253, 105, 244, 56, 128, - 116, 253, 105, 234, 201, 128, 116, 254, 114, 251, 56, 128, 116, 253, 142, - 242, 243, 128, 116, 253, 142, 238, 148, 128, 116, 253, 142, 238, 147, - 128, 116, 254, 225, 253, 25, 128, 116, 253, 142, 242, 252, 128, 116, 255, - 17, 246, 92, 128, 116, 254, 246, 238, 145, 128, 116, 180, 239, 183, 128, - 116, 253, 92, 241, 78, 128, 116, 253, 92, 230, 81, 128, 116, 253, 92, - 234, 193, 128, 116, 254, 252, 251, 49, 128, 116, 254, 246, 249, 184, 128, - 116, 180, 252, 6, 128, 116, 253, 92, 240, 40, 128, 116, 253, 92, 237, 2, - 128, 116, 253, 92, 240, 39, 128, 116, 254, 252, 252, 227, 128, 116, 255, - 20, 236, 6, 128, 116, 255, 44, 248, 133, 128, 116, 253, 130, 239, 196, - 128, 116, 254, 236, 252, 234, 128, 116, 253, 130, 245, 68, 128, 116, 254, - 236, 249, 237, 128, 116, 253, 130, 234, 214, 128, 116, 255, 38, 198, 128, - 116, 255, 17, 247, 231, 128, 116, 255, 46, 251, 194, 128, 116, 253, 3, - 128, 116, 254, 239, 241, 182, 128, 116, 253, 22, 128, 116, 255, 53, 246, - 51, 128, 116, 254, 225, 245, 149, 128, 116, 254, 225, 245, 143, 128, 116, - 254, 225, 251, 239, 128, 116, 254, 220, 250, 77, 128, 116, 254, 239, 238, - 150, 128, 116, 130, 247, 9, 128, 116, 254, 220, 236, 168, 128, 116, 231, - 113, 128, 116, 246, 214, 57, 128, 116, 253, 61, 232, 200, 128, 116, 246, - 214, 252, 212, 128, 116, 246, 214, 253, 140, 128, 116, 246, 214, 74, 128, - 116, 246, 214, 252, 216, 128, 116, 246, 214, 253, 71, 128, 116, 246, 214, - 252, 50, 128, 116, 246, 214, 66, 128, 116, 246, 214, 252, 224, 128, 116, - 234, 192, 128, 233, 112, 14, 242, 171, 128, 116, 246, 214, 72, 128, 116, - 246, 214, 253, 4, 128, 116, 246, 214, 73, 128, 116, 246, 214, 254, 227, - 234, 148, 128, 116, 246, 214, 254, 227, 232, 224, 128, 116, 229, 35, 128, - 116, 232, 225, 128, 116, 231, 99, 128, 116, 253, 61, 253, 219, 128, 116, - 253, 61, 246, 228, 128, 116, 253, 61, 252, 29, 128, 116, 253, 61, 232, - 96, 128, 116, 229, 153, 128, 116, 232, 233, 128, 116, 233, 65, 128, 116, - 234, 104, 128, 21, 240, 126, 128, 21, 118, 128, 21, 113, 128, 21, 166, - 128, 21, 158, 128, 21, 173, 128, 21, 183, 128, 21, 194, 128, 21, 187, - 128, 21, 192, 128, 116, 229, 227, 128, 116, 236, 122, 179, 1, 253, 33, - 179, 1, 253, 105, 240, 215, 179, 1, 253, 105, 247, 22, 179, 1, 247, 93, - 179, 1, 253, 66, 179, 1, 254, 225, 247, 22, 179, 1, 247, 19, 179, 1, 253, - 57, 179, 1, 96, 179, 1, 253, 92, 240, 215, 179, 1, 253, 92, 247, 22, 179, - 1, 253, 8, 179, 1, 253, 98, 179, 1, 253, 50, 179, 1, 253, 130, 240, 215, - 179, 1, 254, 236, 247, 22, 179, 1, 253, 130, 247, 22, 179, 1, 254, 236, - 240, 215, 179, 1, 253, 14, 179, 1, 252, 251, 179, 1, 254, 239, 241, 182, - 179, 1, 254, 239, 244, 107, 179, 1, 253, 10, 179, 1, 254, 225, 240, 215, - 179, 1, 254, 220, 240, 215, 179, 1, 73, 179, 1, 254, 220, 247, 22, 179, - 231, 218, 179, 31, 5, 57, 179, 31, 5, 253, 61, 247, 39, 179, 31, 5, 252, - 212, 179, 31, 5, 253, 140, 179, 31, 5, 74, 179, 31, 5, 252, 216, 179, 31, - 5, 254, 190, 179, 31, 5, 253, 203, 179, 31, 5, 66, 179, 31, 5, 252, 224, - 179, 31, 5, 253, 61, 250, 178, 179, 232, 45, 5, 253, 49, 179, 232, 45, 5, - 247, 19, 179, 31, 5, 72, 179, 31, 5, 253, 176, 179, 31, 5, 73, 179, 31, - 5, 253, 114, 179, 31, 5, 252, 221, 179, 255, 9, 252, 200, 179, 206, 253, - 61, 253, 219, 179, 206, 253, 61, 246, 228, 179, 206, 253, 61, 253, 44, - 179, 206, 253, 61, 236, 21, 179, 228, 227, 76, 179, 231, 107, 179, 21, - 240, 126, 179, 21, 118, 179, 21, 113, 179, 21, 166, 179, 21, 158, 179, - 21, 173, 179, 21, 183, 179, 21, 194, 179, 21, 187, 179, 21, 192, 179, - 254, 220, 253, 8, 179, 254, 220, 253, 14, 54, 4, 253, 128, 54, 165, 247, - 35, 253, 55, 253, 62, 233, 56, 57, 54, 165, 247, 35, 253, 55, 253, 62, - 253, 205, 248, 148, 249, 107, 198, 54, 165, 247, 35, 253, 55, 253, 62, - 253, 205, 247, 35, 240, 241, 198, 54, 165, 59, 253, 55, 253, 62, 248, - 100, 198, 54, 165, 235, 113, 253, 55, 253, 62, 248, 156, 198, 54, 165, - 240, 206, 253, 55, 253, 62, 248, 131, 248, 157, 198, 54, 165, 253, 55, - 253, 62, 240, 241, 248, 157, 198, 54, 165, 245, 153, 240, 192, 54, 165, - 242, 215, 253, 55, 247, 88, 54, 165, 249, 123, 248, 159, 253, 55, 247, - 88, 54, 165, 227, 246, 237, 222, 54, 165, 232, 110, 240, 241, 238, 133, - 54, 165, 240, 192, 54, 165, 247, 97, 240, 192, 54, 165, 240, 241, 240, - 192, 54, 165, 247, 97, 240, 241, 240, 192, 54, 165, 254, 143, 249, 156, - 240, 14, 240, 192, 54, 165, 248, 147, 250, 41, 240, 192, 54, 165, 240, - 206, 241, 91, 241, 13, 254, 206, 182, 246, 241, 54, 165, 247, 35, 237, - 222, 54, 233, 217, 5, 249, 155, 237, 127, 54, 233, 217, 5, 250, 217, 237, - 127, 54, 228, 197, 5, 251, 219, 250, 20, 242, 40, 237, 127, 54, 228, 197, - 5, 238, 87, 213, 54, 228, 197, 5, 245, 155, 237, 11, 54, 5, 246, 226, - 247, 71, 241, 138, 54, 5, 246, 226, 247, 71, 238, 2, 54, 5, 246, 226, - 247, 71, 241, 146, 54, 5, 246, 226, 253, 153, 241, 138, 54, 5, 246, 226, - 253, 153, 238, 2, 54, 5, 246, 226, 247, 71, 246, 226, 251, 37, 54, 21, - 240, 126, 54, 21, 118, 54, 21, 113, 54, 21, 166, 54, 21, 158, 54, 21, - 173, 54, 21, 183, 54, 21, 194, 54, 21, 187, 54, 21, 192, 54, 21, 132, - 118, 54, 21, 132, 113, 54, 21, 132, 166, 54, 21, 132, 158, 54, 21, 132, - 173, 54, 21, 132, 183, 54, 21, 132, 194, 54, 21, 132, 187, 54, 21, 132, - 192, 54, 21, 132, 240, 126, 54, 165, 242, 213, 237, 127, 54, 165, 248, - 110, 241, 107, 253, 252, 252, 183, 54, 165, 240, 206, 241, 91, 241, 13, - 247, 123, 253, 247, 246, 241, 54, 165, 248, 110, 241, 107, 251, 218, 237, - 127, 54, 165, 253, 74, 247, 88, 54, 165, 254, 11, 238, 88, 54, 165, 253, - 223, 241, 13, 241, 149, 54, 165, 253, 223, 241, 13, 241, 148, 54, 165, - 253, 207, 241, 172, 241, 149, 54, 165, 253, 207, 241, 172, 241, 148, 54, - 5, 254, 175, 238, 78, 54, 5, 254, 98, 238, 78, 54, 1, 177, 54, 1, 246, - 178, 54, 1, 252, 205, 54, 1, 246, 202, 54, 1, 246, 169, 54, 1, 252, 215, - 54, 1, 246, 176, 54, 1, 252, 213, 54, 1, 246, 181, 54, 1, 246, 191, 54, - 1, 240, 150, 54, 1, 246, 192, 54, 1, 240, 166, 54, 1, 246, 203, 54, 1, - 252, 202, 54, 1, 246, 173, 54, 1, 252, 203, 54, 1, 246, 196, 54, 1, 252, - 201, 54, 1, 213, 54, 1, 246, 182, 54, 1, 252, 211, 54, 1, 246, 199, 54, - 1, 198, 54, 1, 246, 216, 54, 1, 240, 240, 54, 1, 246, 254, 54, 1, 241, - 121, 54, 1, 252, 208, 54, 1, 246, 223, 54, 1, 252, 226, 54, 1, 253, 204, - 54, 1, 191, 54, 1, 208, 54, 1, 252, 200, 54, 1, 246, 165, 54, 1, 246, - 190, 54, 1, 252, 204, 54, 1, 154, 54, 1, 57, 54, 1, 241, 175, 54, 1, 230, - 154, 208, 54, 1, 247, 161, 54, 1, 246, 221, 54, 31, 5, 252, 212, 54, 31, - 5, 74, 54, 31, 5, 252, 216, 54, 31, 5, 66, 54, 31, 5, 252, 224, 54, 31, - 5, 153, 146, 54, 31, 5, 153, 252, 249, 54, 31, 5, 153, 149, 54, 31, 5, - 153, 252, 245, 54, 31, 5, 72, 54, 31, 5, 252, 231, 54, 31, 5, 73, 54, 31, - 5, 252, 220, 54, 5, 251, 185, 254, 253, 254, 113, 252, 246, 54, 5, 248, - 148, 242, 195, 54, 31, 5, 200, 74, 54, 31, 5, 200, 252, 216, 54, 5, 253, - 252, 254, 180, 254, 109, 252, 203, 54, 5, 254, 148, 244, 91, 54, 165, - 234, 115, 54, 165, 236, 182, 54, 5, 254, 91, 237, 127, 54, 5, 247, 24, - 237, 127, 54, 5, 254, 90, 254, 11, 246, 241, 54, 5, 251, 4, 246, 241, 54, - 5, 253, 222, 254, 36, 233, 231, 54, 5, 253, 222, 254, 99, 233, 231, 54, - 231, 189, 1, 177, 54, 231, 189, 1, 246, 178, 54, 231, 189, 1, 252, 205, - 54, 231, 189, 1, 246, 202, 54, 231, 189, 1, 246, 169, 54, 231, 189, 1, - 252, 215, 54, 231, 189, 1, 246, 176, 54, 231, 189, 1, 252, 213, 54, 231, - 189, 1, 246, 181, 54, 231, 189, 1, 246, 191, 54, 231, 189, 1, 240, 150, - 54, 231, 189, 1, 246, 192, 54, 231, 189, 1, 240, 166, 54, 231, 189, 1, - 246, 203, 54, 231, 189, 1, 252, 202, 54, 231, 189, 1, 246, 173, 54, 231, - 189, 1, 252, 203, 54, 231, 189, 1, 246, 196, 54, 231, 189, 1, 252, 201, - 54, 231, 189, 1, 213, 54, 231, 189, 1, 246, 182, 54, 231, 189, 1, 252, - 211, 54, 231, 189, 1, 246, 199, 54, 231, 189, 1, 198, 54, 231, 189, 1, - 246, 216, 54, 231, 189, 1, 240, 240, 54, 231, 189, 1, 246, 254, 54, 231, - 189, 1, 241, 121, 54, 231, 189, 1, 252, 208, 54, 231, 189, 1, 246, 223, - 54, 231, 189, 1, 252, 226, 54, 231, 189, 1, 253, 204, 54, 231, 189, 1, - 191, 54, 231, 189, 1, 208, 54, 231, 189, 1, 252, 200, 54, 231, 189, 1, - 246, 165, 54, 231, 189, 1, 246, 190, 54, 231, 189, 1, 252, 204, 54, 231, - 189, 1, 154, 54, 231, 189, 1, 57, 54, 231, 189, 1, 241, 175, 54, 231, - 189, 1, 230, 154, 252, 208, 54, 231, 189, 1, 230, 154, 191, 54, 231, 189, - 1, 230, 154, 208, 54, 254, 238, 255, 14, 246, 178, 54, 254, 238, 255, 14, - 254, 79, 247, 123, 253, 247, 246, 241, 54, 228, 189, 5, 112, 241, 100, - 54, 228, 189, 5, 157, 241, 100, 54, 228, 189, 5, 249, 143, 245, 239, 54, - 228, 189, 5, 251, 215, 238, 86, 54, 14, 249, 207, 253, 48, 54, 14, 254, - 4, 251, 184, 54, 14, 245, 59, 243, 120, 54, 14, 254, 4, 254, 144, 248, - 147, 243, 155, 54, 14, 248, 131, 213, 54, 14, 253, 43, 253, 48, 54, 14, - 253, 43, 254, 210, 247, 97, 235, 107, 54, 14, 253, 43, 254, 210, 250, 42, - 235, 107, 54, 14, 253, 43, 254, 210, 247, 123, 235, 107, 54, 5, 246, 226, - 253, 153, 246, 226, 243, 73, 54, 5, 246, 226, 253, 153, 241, 146, 54, - 165, 242, 214, 248, 159, 254, 228, 253, 62, 238, 41, 54, 165, 244, 149, - 253, 55, 254, 228, 253, 62, 238, 41, 54, 165, 247, 97, 237, 222, 54, 165, - 59, 248, 0, 238, 43, 253, 55, 253, 62, 248, 100, 198, 54, 165, 235, 113, - 248, 0, 238, 43, 253, 55, 253, 62, 248, 156, 198, 69, 1, 177, 69, 1, 246, - 178, 69, 1, 252, 205, 69, 1, 246, 202, 69, 1, 246, 169, 69, 1, 252, 215, - 69, 1, 246, 176, 69, 1, 252, 213, 69, 1, 246, 213, 69, 1, 246, 181, 69, - 1, 244, 250, 69, 1, 246, 191, 69, 1, 240, 150, 69, 1, 246, 192, 69, 1, - 240, 166, 69, 1, 246, 203, 69, 1, 252, 202, 69, 1, 246, 173, 69, 1, 252, - 203, 69, 1, 246, 196, 69, 1, 252, 201, 69, 1, 213, 69, 1, 246, 182, 69, - 1, 252, 211, 69, 1, 246, 199, 69, 1, 198, 69, 1, 191, 69, 1, 208, 69, 1, - 252, 200, 69, 1, 252, 208, 69, 1, 252, 204, 69, 1, 154, 69, 1, 246, 225, - 69, 1, 57, 69, 1, 246, 166, 57, 69, 1, 74, 69, 1, 252, 216, 69, 1, 66, - 69, 1, 252, 224, 69, 1, 72, 69, 1, 253, 68, 72, 69, 1, 73, 69, 1, 252, - 222, 69, 31, 5, 252, 5, 252, 212, 69, 31, 5, 252, 212, 69, 31, 5, 74, 69, - 31, 5, 252, 216, 69, 31, 5, 66, 69, 31, 5, 252, 224, 69, 31, 5, 72, 69, - 31, 5, 252, 221, 69, 31, 5, 253, 68, 252, 216, 69, 31, 5, 253, 68, 73, - 69, 31, 5, 161, 46, 69, 5, 231, 206, 69, 5, 56, 51, 69, 5, 233, 102, 69, - 5, 235, 43, 69, 5, 242, 64, 69, 231, 194, 5, 124, 191, 69, 231, 194, 5, - 124, 208, 69, 231, 194, 5, 124, 252, 208, 69, 231, 194, 5, 124, 154, 69, - 1, 240, 227, 252, 204, 69, 21, 240, 126, 69, 21, 118, 69, 21, 113, 69, - 21, 166, 69, 21, 158, 69, 21, 173, 69, 21, 183, 69, 21, 194, 69, 21, 187, - 69, 21, 192, 69, 5, 237, 102, 233, 144, 69, 5, 233, 144, 69, 14, 232, - 221, 69, 14, 230, 236, 69, 14, 225, 110, 69, 14, 232, 198, 69, 1, 246, - 165, 69, 1, 246, 190, 69, 1, 153, 146, 69, 1, 153, 252, 249, 69, 1, 153, - 149, 69, 1, 153, 252, 245, 69, 31, 5, 153, 146, 69, 31, 5, 153, 252, 249, - 69, 31, 5, 153, 149, 69, 31, 5, 153, 252, 245, 69, 1, 253, 68, 246, 169, - 69, 1, 253, 68, 246, 213, 69, 1, 253, 68, 247, 66, 69, 1, 253, 68, 247, - 250, 69, 231, 194, 5, 253, 68, 124, 252, 201, 69, 231, 194, 5, 253, 68, - 124, 198, 69, 231, 194, 5, 253, 68, 124, 252, 200, 69, 1, 247, 103, 240, - 153, 246, 165, 69, 31, 5, 247, 103, 240, 153, 253, 100, 69, 206, 165, - 247, 103, 240, 153, 239, 6, 69, 206, 165, 247, 103, 240, 153, 255, 34, - 247, 99, 69, 1, 235, 62, 253, 51, 240, 153, 246, 173, 69, 1, 235, 62, - 253, 51, 240, 153, 247, 47, 69, 31, 5, 235, 62, 253, 51, 240, 153, 253, - 100, 69, 31, 5, 235, 62, 253, 51, 240, 153, 253, 71, 69, 5, 235, 62, 253, - 51, 240, 153, 237, 7, 69, 5, 235, 62, 253, 51, 240, 153, 235, 101, 69, 5, - 235, 62, 253, 51, 240, 153, 235, 102, 69, 5, 235, 62, 253, 51, 240, 153, - 235, 227, 69, 5, 235, 62, 253, 51, 240, 153, 235, 103, 69, 1, 235, 121, - 253, 51, 240, 153, 246, 203, 69, 1, 235, 121, 253, 51, 240, 153, 247, - 235, 69, 1, 235, 121, 253, 51, 240, 153, 243, 144, 69, 31, 5, 250, 21, - 240, 153, 74, 69, 31, 5, 240, 119, 253, 15, 69, 31, 5, 240, 119, 66, 69, - 31, 5, 240, 119, 252, 231, 69, 1, 246, 166, 177, 69, 1, 246, 166, 246, - 178, 69, 1, 246, 166, 252, 205, 69, 1, 246, 166, 252, 215, 69, 1, 246, - 166, 252, 226, 69, 1, 246, 166, 246, 181, 69, 1, 246, 166, 252, 203, 69, - 1, 246, 166, 252, 201, 69, 1, 246, 166, 246, 182, 69, 1, 246, 166, 252, - 234, 69, 1, 246, 166, 252, 211, 69, 1, 246, 166, 246, 173, 69, 1, 246, - 166, 154, 69, 231, 194, 5, 246, 166, 124, 252, 208, 69, 31, 5, 246, 166, - 252, 212, 69, 31, 5, 246, 166, 72, 69, 31, 5, 246, 166, 161, 46, 69, 31, - 5, 246, 166, 35, 254, 190, 69, 5, 246, 166, 235, 101, 69, 5, 246, 166, - 235, 102, 69, 5, 246, 166, 235, 103, 69, 5, 246, 166, 235, 228, 69, 5, - 246, 166, 235, 116, 235, 101, 69, 5, 246, 166, 235, 116, 235, 102, 69, 5, - 246, 166, 235, 116, 234, 95, 240, 167, 69, 1, 241, 227, 235, 198, 252, - 234, 69, 5, 241, 227, 235, 198, 235, 103, 69, 246, 166, 21, 240, 126, 69, - 246, 166, 21, 118, 69, 246, 166, 21, 113, 69, 246, 166, 21, 166, 69, 246, - 166, 21, 158, 69, 246, 166, 21, 173, 69, 246, 166, 21, 183, 69, 246, 166, - 21, 194, 69, 246, 166, 21, 187, 69, 246, 166, 21, 192, 69, 14, 246, 166, - 118, 69, 14, 246, 166, 229, 18, 87, 6, 1, 253, 5, 87, 6, 1, 247, 121, 87, - 6, 1, 247, 32, 87, 6, 1, 247, 131, 87, 6, 1, 252, 232, 87, 6, 1, 247, - 222, 87, 6, 1, 247, 237, 87, 6, 1, 247, 209, 87, 6, 1, 253, 79, 87, 6, 1, - 247, 39, 87, 6, 1, 247, 167, 87, 6, 1, 247, 4, 87, 6, 1, 247, 92, 87, 6, - 1, 253, 106, 87, 6, 1, 247, 187, 87, 6, 1, 241, 90, 87, 6, 1, 247, 194, - 87, 6, 1, 247, 49, 87, 6, 1, 247, 56, 87, 6, 1, 253, 121, 87, 6, 1, 241, - 61, 87, 6, 1, 241, 46, 87, 6, 1, 241, 39, 87, 6, 1, 247, 193, 87, 6, 1, - 240, 203, 87, 6, 1, 241, 32, 87, 6, 1, 246, 241, 87, 6, 1, 247, 153, 87, - 6, 1, 247, 125, 87, 6, 1, 241, 31, 87, 6, 1, 247, 228, 87, 6, 1, 241, 44, - 87, 6, 1, 247, 145, 87, 6, 1, 252, 252, 87, 6, 1, 247, 81, 87, 6, 1, 252, - 250, 87, 6, 1, 247, 146, 87, 6, 1, 247, 150, 87, 1, 253, 5, 87, 1, 247, - 121, 87, 1, 247, 32, 87, 1, 247, 131, 87, 1, 252, 232, 87, 1, 247, 222, - 87, 1, 247, 237, 87, 1, 247, 209, 87, 1, 253, 79, 87, 1, 247, 39, 87, 1, - 247, 167, 87, 1, 247, 4, 87, 1, 247, 92, 87, 1, 253, 106, 87, 1, 247, - 187, 87, 1, 241, 90, 87, 1, 247, 194, 87, 1, 247, 49, 87, 1, 247, 56, 87, - 1, 253, 121, 87, 1, 241, 61, 87, 1, 241, 46, 87, 1, 241, 39, 87, 1, 247, - 193, 87, 1, 240, 203, 87, 1, 241, 32, 87, 1, 246, 241, 87, 1, 247, 153, - 87, 1, 247, 125, 87, 1, 241, 31, 87, 1, 247, 228, 87, 1, 241, 44, 87, 1, - 247, 145, 87, 1, 252, 252, 87, 1, 247, 81, 87, 1, 252, 250, 87, 1, 247, - 146, 87, 1, 247, 150, 87, 1, 253, 88, 87, 1, 253, 202, 87, 1, 238, 200, - 87, 1, 209, 247, 32, 87, 1, 246, 224, 87, 231, 242, 230, 131, 52, 1, 87, - 247, 92, 26, 122, 235, 77, 26, 122, 228, 195, 26, 122, 237, 139, 26, 122, - 235, 81, 26, 122, 228, 209, 26, 122, 237, 142, 26, 122, 237, 137, 26, - 122, 237, 141, 26, 122, 229, 193, 26, 122, 240, 213, 26, 122, 230, 159, - 26, 122, 237, 134, 26, 122, 237, 130, 26, 122, 229, 191, 26, 122, 233, - 128, 26, 122, 233, 131, 26, 122, 233, 138, 26, 122, 233, 133, 26, 122, - 237, 133, 26, 122, 227, 207, 26, 122, 229, 219, 26, 122, 227, 196, 26, - 122, 229, 42, 26, 122, 227, 153, 26, 122, 228, 217, 26, 122, 229, 220, - 26, 122, 228, 193, 26, 122, 227, 169, 26, 122, 228, 200, 26, 122, 227, - 137, 26, 122, 227, 208, 26, 122, 229, 50, 26, 122, 227, 209, 26, 122, - 229, 180, 26, 122, 222, 239, 26, 122, 222, 240, 26, 122, 223, 51, 26, - 122, 225, 99, 26, 122, 223, 50, 26, 122, 228, 215, 26, 122, 227, 173, 26, - 122, 227, 149, 26, 122, 227, 148, 26, 122, 227, 138, 26, 122, 222, 231, - 26, 122, 228, 207, 26, 122, 229, 216, 26, 122, 228, 208, 26, 122, 229, - 217, 26, 122, 230, 111, 26, 122, 229, 190, 26, 122, 222, 251, 26, 122, - 227, 78, 26, 122, 230, 110, 26, 122, 229, 215, 26, 122, 228, 161, 26, - 122, 228, 162, 26, 122, 228, 164, 26, 122, 228, 163, 26, 122, 230, 109, - 26, 122, 227, 222, 26, 122, 222, 244, 26, 122, 223, 60, 26, 122, 222, - 228, 26, 122, 233, 174, 26, 122, 227, 205, 26, 122, 227, 245, 26, 122, - 229, 29, 26, 122, 229, 30, 26, 122, 230, 68, 26, 122, 227, 166, 26, 122, - 229, 192, 26, 122, 229, 28, 26, 122, 227, 164, 26, 122, 227, 168, 26, - 122, 227, 167, 26, 122, 232, 13, 26, 122, 228, 228, 26, 122, 227, 159, - 26, 122, 222, 234, 26, 122, 222, 255, 26, 122, 222, 225, 26, 122, 223, - 61, 26, 122, 227, 158, 26, 122, 223, 62, 26, 122, 222, 233, 26, 122, 227, - 147, 26, 122, 223, 56, 26, 122, 229, 218, 26, 122, 228, 210, 26, 122, - 235, 92, 26, 170, 235, 92, 26, 170, 57, 26, 170, 253, 4, 26, 170, 191, - 26, 170, 247, 61, 26, 170, 253, 177, 26, 170, 72, 26, 170, 247, 232, 26, - 170, 253, 96, 26, 170, 73, 26, 170, 252, 208, 26, 170, 247, 223, 26, 170, - 253, 15, 26, 170, 252, 251, 26, 170, 66, 26, 170, 247, 227, 26, 170, 252, - 250, 26, 170, 253, 27, 26, 170, 252, 233, 26, 170, 253, 100, 26, 170, - 253, 28, 26, 170, 74, 26, 170, 248, 219, 26, 170, 248, 220, 26, 170, 246, - 73, 26, 170, 240, 90, 26, 170, 243, 98, 26, 170, 243, 99, 26, 170, 238, - 203, 26, 170, 240, 96, 26, 170, 240, 97, 26, 170, 245, 51, 26, 170, 251, - 91, 26, 170, 245, 52, 26, 170, 251, 92, 26, 170, 251, 93, 26, 170, 238, - 83, 26, 170, 235, 233, 26, 170, 237, 34, 26, 170, 246, 93, 26, 170, 242, - 31, 26, 170, 252, 48, 26, 170, 246, 27, 26, 170, 235, 0, 26, 170, 246, - 28, 26, 170, 252, 49, 26, 170, 246, 96, 26, 170, 240, 100, 26, 170, 246, - 97, 26, 170, 235, 234, 26, 170, 238, 84, 26, 170, 246, 98, 26, 170, 242, - 33, 26, 170, 243, 102, 26, 170, 238, 209, 26, 170, 246, 88, 26, 170, 250, - 110, 26, 170, 244, 1, 26, 170, 250, 111, 26, 170, 250, 112, 26, 170, 244, - 0, 26, 170, 234, 122, 26, 170, 237, 228, 26, 170, 232, 74, 26, 170, 234, - 7, 26, 170, 234, 6, 26, 170, 230, 112, 26, 138, 235, 77, 26, 138, 228, - 195, 26, 138, 228, 199, 26, 138, 237, 139, 26, 138, 228, 201, 26, 138, - 228, 202, 26, 138, 235, 81, 26, 138, 237, 142, 26, 138, 227, 197, 26, - 138, 228, 204, 26, 138, 228, 205, 26, 138, 229, 188, 26, 138, 227, 140, - 26, 138, 227, 139, 26, 138, 228, 193, 26, 138, 237, 137, 26, 138, 237, - 141, 26, 138, 229, 180, 26, 138, 240, 213, 26, 138, 230, 159, 26, 138, - 237, 134, 26, 138, 237, 130, 26, 138, 233, 128, 26, 138, 233, 131, 26, - 138, 233, 138, 26, 138, 233, 133, 26, 138, 237, 133, 26, 138, 227, 248, - 26, 138, 222, 235, 26, 138, 227, 207, 26, 138, 227, 196, 26, 138, 229, - 204, 26, 138, 227, 144, 26, 138, 227, 172, 26, 138, 227, 153, 26, 138, - 228, 168, 26, 138, 222, 241, 26, 138, 228, 217, 26, 138, 227, 210, 26, - 138, 222, 237, 26, 138, 229, 220, 26, 138, 222, 236, 26, 138, 223, 52, - 26, 138, 222, 253, 26, 138, 222, 249, 26, 138, 222, 230, 26, 138, 225, - 102, 26, 138, 227, 151, 26, 138, 227, 174, 26, 138, 222, 242, 26, 138, - 227, 253, 26, 138, 229, 37, 26, 138, 228, 200, 26, 138, 229, 200, 26, - 138, 225, 97, 26, 138, 227, 143, 26, 138, 227, 171, 26, 138, 229, 36, 26, - 138, 227, 137, 26, 138, 229, 51, 26, 138, 227, 148, 26, 138, 229, 49, 26, - 138, 227, 138, 26, 138, 228, 207, 26, 138, 228, 208, 26, 138, 229, 217, - 26, 138, 229, 190, 26, 138, 233, 174, 26, 138, 227, 205, 26, 138, 222, - 246, 26, 138, 229, 192, 26, 138, 227, 165, 26, 138, 232, 13, 26, 138, - 227, 155, 26, 138, 222, 254, 26, 138, 227, 147, 26, 138, 223, 56, 26, - 138, 229, 24, 26, 138, 229, 26, 26, 138, 229, 23, 26, 138, 229, 25, 26, - 138, 228, 210, 25, 4, 154, 25, 4, 253, 59, 25, 4, 253, 41, 25, 4, 247, - 14, 25, 4, 247, 149, 25, 4, 252, 252, 25, 4, 253, 21, 25, 4, 250, 90, 25, - 4, 252, 200, 25, 4, 253, 22, 25, 4, 253, 42, 25, 4, 247, 166, 25, 4, 247, - 168, 25, 4, 253, 80, 25, 4, 253, 49, 25, 4, 247, 171, 25, 4, 250, 70, 25, - 4, 250, 74, 25, 4, 250, 72, 25, 4, 241, 156, 25, 4, 243, 173, 25, 4, 250, - 71, 25, 4, 250, 73, 25, 4, 243, 174, 25, 4, 198, 25, 4, 252, 229, 25, 4, - 252, 239, 25, 4, 248, 98, 25, 4, 247, 172, 25, 4, 253, 13, 25, 4, 253, - 14, 25, 4, 247, 90, 25, 4, 251, 253, 25, 4, 252, 1, 25, 4, 251, 255, 25, - 4, 245, 231, 25, 4, 245, 232, 25, 4, 251, 254, 25, 4, 252, 0, 25, 4, 245, - 233, 25, 4, 208, 25, 4, 253, 3, 25, 4, 253, 37, 25, 4, 247, 100, 25, 4, - 247, 197, 25, 4, 253, 36, 25, 4, 252, 246, 25, 4, 251, 201, 25, 4, 252, - 204, 25, 4, 253, 26, 25, 4, 253, 24, 25, 4, 248, 153, 25, 4, 247, 50, 25, - 4, 253, 52, 25, 4, 253, 25, 25, 4, 247, 206, 25, 4, 246, 165, 25, 4, 246, - 246, 25, 4, 247, 51, 25, 4, 241, 234, 25, 4, 241, 70, 25, 4, 246, 186, - 25, 4, 246, 245, 25, 4, 241, 72, 25, 4, 253, 35, 25, 4, 253, 132, 25, 4, - 253, 131, 25, 4, 247, 192, 25, 4, 251, 131, 25, 4, 253, 190, 25, 4, 253, - 159, 25, 4, 251, 141, 25, 4, 251, 154, 25, 4, 251, 156, 25, 4, 245, 106, - 25, 4, 245, 107, 25, 4, 251, 155, 25, 4, 251, 132, 25, 4, 251, 136, 25, - 4, 251, 134, 25, 4, 245, 92, 25, 4, 245, 93, 25, 4, 251, 133, 25, 4, 251, - 135, 25, 4, 245, 94, 25, 4, 245, 96, 25, 4, 239, 210, 25, 4, 239, 211, - 25, 4, 245, 95, 25, 4, 252, 211, 25, 4, 253, 48, 25, 4, 253, 30, 25, 4, - 247, 247, 25, 4, 247, 28, 25, 4, 253, 73, 25, 4, 253, 98, 25, 4, 248, 2, - 25, 4, 252, 243, 25, 4, 253, 139, 25, 4, 253, 138, 25, 4, 252, 69, 25, 4, - 247, 113, 25, 4, 253, 95, 25, 4, 253, 108, 25, 4, 252, 88, 25, 4, 252, - 202, 25, 4, 253, 18, 25, 4, 253, 44, 25, 4, 247, 207, 25, 4, 247, 106, - 25, 4, 253, 9, 25, 4, 96, 25, 4, 247, 218, 25, 4, 252, 215, 25, 4, 253, - 172, 25, 4, 253, 143, 25, 4, 248, 3, 25, 4, 248, 6, 25, 4, 253, 141, 25, - 4, 253, 66, 25, 4, 247, 128, 25, 4, 253, 83, 25, 4, 254, 173, 25, 4, 253, - 38, 25, 4, 252, 110, 25, 4, 252, 111, 25, 4, 254, 17, 25, 4, 254, 18, 25, - 4, 252, 116, 25, 4, 252, 122, 25, 4, 252, 124, 25, 4, 246, 68, 25, 4, - 246, 69, 25, 4, 252, 123, 25, 4, 252, 201, 25, 4, 252, 227, 25, 4, 252, - 248, 25, 4, 247, 179, 25, 4, 247, 181, 25, 4, 252, 247, 25, 4, 253, 8, - 25, 4, 247, 95, 25, 4, 246, 181, 25, 4, 247, 185, 25, 4, 247, 44, 25, 4, - 245, 18, 25, 4, 241, 206, 25, 4, 248, 119, 25, 4, 247, 19, 25, 4, 245, - 33, 25, 4, 235, 31, 57, 25, 4, 235, 31, 66, 25, 4, 235, 31, 74, 25, 4, - 235, 31, 252, 212, 25, 4, 235, 31, 252, 231, 25, 4, 235, 31, 72, 25, 4, - 235, 31, 73, 25, 4, 235, 31, 252, 208, 25, 4, 177, 25, 4, 253, 34, 25, 4, - 253, 7, 25, 4, 248, 76, 25, 4, 248, 80, 25, 4, 253, 6, 25, 4, 253, 33, - 25, 4, 250, 176, 25, 4, 247, 163, 25, 4, 247, 165, 25, 4, 241, 3, 25, 4, - 244, 75, 25, 4, 247, 164, 25, 4, 250, 194, 25, 4, 250, 198, 25, 4, 250, - 196, 25, 4, 244, 76, 25, 4, 244, 77, 25, 4, 250, 195, 25, 4, 250, 197, - 25, 4, 244, 78, 25, 4, 244, 80, 25, 4, 239, 75, 25, 4, 239, 76, 25, 4, - 244, 79, 25, 4, 252, 208, 25, 4, 253, 109, 25, 4, 253, 27, 25, 4, 247, - 115, 25, 4, 247, 226, 25, 4, 252, 250, 25, 4, 253, 10, 25, 4, 252, 101, - 25, 4, 230, 138, 57, 25, 4, 230, 138, 66, 25, 4, 230, 138, 74, 25, 4, - 230, 138, 252, 212, 25, 4, 230, 138, 252, 231, 25, 4, 230, 138, 72, 25, - 4, 230, 138, 73, 25, 4, 252, 226, 25, 4, 253, 97, 25, 4, 253, 72, 25, 4, - 248, 207, 25, 4, 247, 64, 25, 4, 253, 46, 25, 4, 253, 65, 25, 4, 252, - 193, 25, 4, 246, 223, 25, 4, 247, 240, 25, 4, 247, 238, 25, 4, 246, 108, - 25, 4, 241, 25, 25, 4, 246, 251, 25, 4, 247, 239, 25, 4, 246, 124, 25, 4, - 191, 25, 4, 252, 233, 25, 4, 253, 28, 25, 4, 247, 117, 25, 4, 247, 62, - 25, 4, 253, 96, 25, 4, 252, 251, 25, 4, 252, 153, 25, 4, 252, 203, 25, 4, - 253, 31, 25, 4, 253, 12, 25, 4, 249, 173, 25, 4, 247, 30, 25, 4, 253, 20, - 25, 4, 253, 57, 25, 4, 249, 217, 25, 4, 246, 192, 25, 4, 248, 24, 25, 4, - 248, 23, 25, 4, 243, 29, 25, 4, 243, 35, 25, 4, 248, 22, 25, 4, 247, 130, - 25, 4, 243, 51, 25, 4, 252, 213, 25, 4, 253, 118, 25, 4, 253, 104, 25, 4, - 250, 125, 25, 4, 247, 38, 25, 4, 253, 117, 25, 4, 253, 90, 25, 4, 250, - 146, 25, 4, 252, 205, 25, 4, 253, 40, 25, 4, 253, 39, 25, 4, 247, 143, - 25, 4, 247, 144, 25, 4, 253, 103, 25, 4, 253, 76, 25, 4, 250, 36, 25, 4, - 250, 50, 25, 4, 250, 52, 25, 4, 243, 163, 25, 4, 243, 164, 25, 4, 250, - 51, 25, 4, 247, 77, 25, 4, 248, 51, 25, 4, 248, 49, 25, 4, 243, 123, 25, - 4, 243, 127, 25, 4, 248, 48, 25, 4, 248, 50, 25, 4, 238, 244, 25, 4, 246, - 173, 25, 4, 247, 213, 25, 4, 247, 7, 25, 4, 241, 18, 25, 4, 240, 238, 25, - 4, 246, 247, 25, 4, 246, 228, 25, 4, 245, 248, 25, 4, 246, 176, 25, 4, - 247, 124, 25, 4, 246, 200, 25, 4, 242, 242, 25, 4, 240, 246, 25, 4, 246, - 217, 25, 4, 247, 29, 25, 4, 243, 4, 25, 4, 246, 182, 25, 4, 251, 107, 25, - 4, 246, 198, 25, 4, 245, 67, 25, 4, 245, 69, 25, 4, 248, 130, 25, 4, 247, - 99, 25, 4, 245, 71, 25, 4, 246, 216, 25, 4, 247, 216, 25, 4, 247, 58, 25, - 4, 246, 7, 25, 4, 242, 9, 25, 4, 246, 248, 25, 4, 247, 215, 25, 4, 246, - 9, 25, 4, 252, 42, 25, 4, 252, 47, 25, 4, 252, 44, 25, 4, 246, 24, 25, 4, - 246, 25, 25, 4, 252, 43, 25, 4, 252, 46, 25, 4, 246, 26, 25, 4, 252, 234, - 25, 4, 253, 178, 25, 4, 253, 88, 25, 4, 247, 139, 25, 4, 247, 140, 25, 4, - 253, 147, 25, 4, 253, 148, 25, 4, 248, 42, 25, 4, 213, 25, 4, 253, 82, - 25, 4, 252, 223, 25, 4, 248, 127, 25, 4, 247, 46, 25, 4, 253, 0, 25, 4, - 253, 50, 25, 4, 247, 47, 25, 4, 251, 202, 25, 4, 251, 32, 25, 4, 250, 5, - 25, 36, 231, 73, 76, 25, 235, 135, 76, 25, 231, 187, 25, 246, 162, 240, - 121, 25, 237, 67, 25, 230, 140, 25, 237, 66, 25, 236, 192, 237, 66, 25, - 233, 82, 76, 25, 231, 242, 230, 131, 25, 21, 118, 25, 21, 113, 25, 21, - 166, 25, 21, 158, 25, 21, 173, 25, 21, 183, 25, 21, 194, 25, 21, 187, 25, - 21, 192, 25, 65, 246, 179, 25, 65, 235, 52, 25, 65, 235, 80, 25, 65, 237, - 203, 25, 65, 237, 100, 25, 65, 238, 62, 25, 65, 233, 235, 25, 65, 235, - 169, 25, 65, 235, 132, 25, 65, 233, 75, 25, 65, 253, 53, 231, 196, 25, 4, - 231, 246, 247, 90, 25, 4, 247, 178, 25, 4, 244, 161, 25, 4, 247, 177, 25, - 4, 231, 246, 248, 2, 25, 4, 249, 135, 25, 4, 242, 225, 25, 4, 249, 134, - 25, 4, 231, 246, 248, 42, 25, 4, 250, 4, 25, 4, 243, 112, 25, 4, 250, 3, - 25, 4, 231, 246, 247, 47, 25, 4, 247, 191, 25, 4, 245, 87, 25, 4, 247, - 190, 25, 240, 188, 165, 240, 99, 25, 240, 188, 165, 238, 182, 25, 240, - 188, 165, 235, 206, 25, 240, 188, 165, 240, 125, 235, 206, 25, 240, 188, - 165, 238, 186, 25, 240, 188, 165, 239, 65, 25, 240, 188, 165, 236, 27, - 25, 240, 188, 165, 239, 8, 25, 240, 188, 165, 228, 239, 25, 240, 188, - 165, 244, 72, 131, 1, 57, 131, 1, 72, 131, 1, 74, 131, 1, 73, 131, 1, 66, - 131, 1, 196, 131, 1, 252, 205, 131, 1, 177, 131, 1, 253, 103, 131, 1, - 253, 39, 131, 1, 253, 76, 131, 1, 253, 40, 131, 1, 254, 63, 131, 1, 154, - 131, 1, 252, 252, 131, 1, 253, 41, 131, 1, 253, 21, 131, 1, 253, 59, 131, - 1, 253, 227, 131, 1, 252, 200, 131, 1, 253, 80, 131, 1, 253, 42, 131, 1, - 253, 49, 131, 1, 253, 22, 131, 1, 254, 96, 131, 1, 198, 131, 1, 253, 13, - 131, 1, 252, 239, 131, 1, 253, 14, 131, 1, 252, 229, 131, 1, 252, 201, - 131, 1, 248, 63, 131, 1, 251, 38, 131, 1, 252, 247, 131, 1, 252, 248, - 131, 1, 253, 8, 131, 1, 252, 227, 131, 1, 253, 251, 131, 1, 251, 145, - 131, 1, 251, 146, 131, 1, 251, 147, 131, 1, 248, 144, 131, 1, 248, 145, - 131, 1, 251, 152, 131, 1, 252, 204, 131, 1, 193, 131, 1, 253, 52, 131, 1, - 253, 24, 131, 1, 253, 25, 131, 1, 253, 26, 131, 1, 254, 9, 131, 1, 252, - 203, 131, 1, 252, 202, 131, 1, 253, 20, 131, 1, 253, 9, 131, 1, 253, 12, - 131, 1, 253, 44, 131, 1, 253, 57, 131, 1, 253, 31, 131, 1, 254, 48, 131, - 1, 248, 30, 131, 1, 248, 174, 131, 1, 248, 175, 131, 1, 248, 176, 131, 1, - 248, 177, 131, 1, 248, 178, 131, 1, 252, 25, 131, 1, 246, 216, 131, 1, - 246, 248, 131, 1, 247, 58, 131, 1, 247, 215, 131, 1, 247, 216, 131, 1, - 252, 30, 131, 1, 252, 208, 131, 1, 252, 250, 131, 1, 253, 27, 131, 1, - 253, 10, 131, 1, 253, 109, 131, 1, 254, 171, 131, 1, 191, 131, 1, 253, - 96, 131, 1, 253, 28, 131, 1, 252, 251, 131, 1, 252, 233, 131, 1, 254, - 176, 16, 17, 72, 16, 17, 248, 221, 16, 17, 74, 16, 17, 252, 216, 16, 17, - 73, 16, 17, 252, 220, 16, 17, 237, 93, 252, 220, 16, 17, 60, 252, 231, - 16, 17, 60, 74, 16, 17, 57, 16, 17, 252, 212, 16, 17, 252, 250, 16, 17, - 127, 252, 250, 16, 17, 253, 27, 16, 17, 127, 253, 27, 16, 17, 248, 194, - 16, 17, 127, 248, 194, 16, 17, 253, 10, 16, 17, 127, 253, 10, 16, 17, - 247, 116, 16, 17, 127, 247, 116, 16, 17, 235, 39, 247, 116, 16, 17, 252, - 208, 16, 17, 127, 252, 208, 16, 17, 247, 115, 16, 17, 127, 247, 115, 16, - 17, 235, 39, 247, 115, 16, 17, 252, 221, 16, 17, 237, 93, 254, 195, 16, - 17, 235, 31, 240, 121, 16, 17, 35, 155, 16, 17, 35, 237, 36, 16, 17, 35, - 237, 59, 132, 240, 147, 16, 17, 35, 252, 228, 132, 240, 147, 16, 17, 35, - 41, 132, 240, 147, 16, 17, 35, 240, 147, 16, 17, 35, 47, 155, 16, 17, 35, - 47, 240, 125, 61, 233, 243, 16, 17, 35, 237, 44, 246, 164, 16, 17, 35, - 240, 125, 169, 82, 16, 17, 35, 240, 180, 16, 17, 35, 103, 240, 149, 16, - 17, 252, 232, 16, 17, 253, 79, 16, 17, 253, 106, 16, 17, 253, 5, 16, 17, - 253, 0, 16, 17, 245, 58, 16, 17, 252, 223, 16, 17, 248, 132, 16, 17, 253, - 50, 16, 17, 247, 189, 16, 17, 237, 93, 247, 189, 16, 17, 60, 247, 149, - 16, 17, 60, 253, 41, 16, 17, 213, 16, 17, 248, 127, 16, 17, 247, 190, 16, - 17, 127, 247, 190, 16, 17, 247, 191, 16, 17, 127, 247, 191, 16, 17, 241, - 216, 16, 17, 127, 241, 216, 16, 17, 248, 137, 16, 17, 127, 248, 137, 16, - 17, 241, 217, 16, 17, 127, 241, 217, 16, 17, 247, 47, 16, 17, 127, 247, - 47, 16, 17, 241, 65, 16, 17, 127, 241, 65, 16, 17, 237, 93, 241, 65, 16, - 17, 254, 187, 16, 17, 127, 254, 187, 16, 17, 60, 212, 16, 17, 253, 9, 16, - 17, 245, 235, 16, 17, 253, 44, 16, 17, 252, 20, 16, 17, 96, 16, 17, 247, - 109, 16, 17, 237, 93, 247, 109, 16, 17, 60, 247, 30, 16, 17, 60, 253, 12, - 16, 17, 252, 202, 16, 17, 247, 207, 16, 17, 247, 59, 16, 17, 127, 247, - 59, 16, 17, 248, 186, 16, 17, 127, 248, 186, 16, 17, 242, 14, 16, 17, - 127, 242, 14, 16, 17, 113, 16, 17, 127, 113, 16, 17, 242, 15, 16, 17, - 127, 242, 15, 16, 17, 247, 218, 16, 17, 127, 247, 218, 16, 17, 241, 83, - 16, 17, 127, 241, 83, 16, 17, 235, 39, 241, 83, 16, 17, 254, 183, 16, 17, - 248, 181, 16, 17, 248, 182, 16, 17, 247, 217, 16, 17, 246, 191, 16, 17, - 253, 6, 16, 17, 244, 44, 16, 17, 253, 7, 16, 17, 250, 168, 16, 17, 253, - 33, 16, 17, 247, 162, 16, 17, 237, 93, 247, 162, 16, 17, 177, 16, 17, - 248, 76, 16, 17, 247, 164, 16, 17, 127, 247, 164, 16, 17, 247, 165, 16, - 17, 127, 247, 165, 16, 17, 241, 176, 16, 17, 127, 241, 176, 16, 17, 248, - 88, 16, 17, 127, 248, 88, 16, 17, 241, 177, 16, 17, 127, 241, 177, 16, - 17, 247, 163, 16, 17, 127, 247, 163, 16, 17, 241, 3, 16, 17, 127, 241, 3, - 16, 17, 235, 39, 241, 3, 16, 17, 254, 186, 16, 17, 253, 243, 16, 17, 228, - 194, 247, 156, 16, 17, 228, 194, 250, 167, 16, 17, 228, 194, 250, 177, - 16, 17, 228, 194, 250, 154, 16, 17, 253, 141, 16, 17, 242, 229, 16, 17, - 253, 143, 16, 17, 249, 159, 16, 17, 253, 66, 16, 17, 247, 126, 16, 17, - 237, 93, 247, 126, 16, 17, 252, 215, 16, 17, 248, 3, 16, 17, 248, 13, 16, - 17, 127, 248, 13, 16, 17, 247, 129, 16, 17, 127, 247, 129, 16, 17, 241, - 113, 16, 17, 127, 241, 113, 16, 17, 248, 14, 16, 17, 127, 248, 14, 16, - 17, 241, 114, 16, 17, 127, 241, 114, 16, 17, 247, 128, 16, 17, 127, 247, - 128, 16, 17, 241, 35, 16, 17, 127, 241, 35, 16, 17, 235, 39, 241, 35, 16, - 17, 254, 194, 16, 17, 237, 88, 253, 135, 16, 17, 253, 13, 16, 17, 244, - 114, 16, 17, 252, 239, 16, 17, 251, 13, 16, 17, 253, 14, 16, 17, 247, - 175, 16, 17, 237, 93, 247, 175, 16, 17, 198, 16, 17, 248, 98, 16, 17, - 247, 177, 16, 17, 127, 247, 177, 16, 17, 247, 178, 16, 17, 127, 247, 178, - 16, 17, 241, 196, 16, 17, 127, 241, 196, 16, 17, 248, 105, 16, 17, 127, - 248, 105, 16, 17, 241, 197, 16, 17, 127, 241, 197, 16, 17, 247, 90, 16, - 17, 127, 247, 90, 16, 17, 241, 54, 16, 17, 127, 241, 54, 16, 17, 235, 39, - 241, 54, 16, 17, 185, 16, 17, 127, 185, 16, 17, 254, 102, 16, 17, 230, - 175, 185, 16, 17, 237, 88, 185, 16, 17, 252, 247, 16, 17, 244, 162, 16, - 17, 252, 248, 16, 17, 248, 112, 16, 17, 253, 8, 16, 17, 247, 183, 16, 17, - 237, 93, 247, 183, 16, 17, 252, 201, 16, 17, 247, 179, 16, 17, 248, 118, - 16, 17, 127, 248, 118, 16, 17, 247, 95, 16, 17, 127, 247, 95, 16, 17, - 241, 56, 16, 17, 127, 241, 56, 16, 17, 235, 39, 241, 56, 16, 17, 199, 16, - 17, 60, 253, 69, 16, 17, 254, 115, 16, 17, 253, 80, 16, 17, 244, 83, 16, - 17, 253, 42, 16, 17, 250, 220, 16, 17, 253, 49, 16, 17, 247, 87, 16, 17, - 237, 93, 247, 87, 16, 17, 252, 200, 16, 17, 247, 166, 16, 17, 248, 94, - 16, 17, 127, 248, 94, 16, 17, 248, 95, 16, 17, 127, 248, 95, 16, 17, 241, - 187, 16, 17, 127, 241, 187, 16, 17, 248, 96, 16, 17, 127, 248, 96, 16, - 17, 241, 188, 16, 17, 127, 241, 188, 16, 17, 247, 171, 16, 17, 127, 247, - 171, 16, 17, 241, 186, 16, 17, 127, 241, 186, 16, 17, 149, 16, 17, 127, - 149, 16, 17, 124, 149, 16, 17, 253, 52, 16, 17, 245, 146, 16, 17, 253, - 24, 16, 17, 251, 223, 16, 17, 253, 25, 16, 17, 247, 104, 16, 17, 237, 93, - 247, 104, 16, 17, 252, 204, 16, 17, 248, 153, 16, 17, 248, 167, 16, 17, - 127, 248, 167, 16, 17, 248, 168, 16, 17, 127, 248, 168, 16, 17, 241, 253, - 16, 17, 127, 241, 253, 16, 17, 248, 169, 16, 17, 127, 248, 169, 16, 17, - 241, 254, 16, 17, 127, 241, 254, 16, 17, 247, 206, 16, 17, 127, 247, 206, - 16, 17, 241, 76, 16, 17, 127, 241, 76, 16, 17, 235, 39, 241, 76, 16, 17, - 193, 16, 17, 230, 175, 193, 16, 17, 254, 10, 16, 17, 231, 204, 193, 16, - 17, 231, 104, 254, 147, 16, 17, 235, 39, 251, 228, 16, 17, 235, 39, 251, - 208, 16, 17, 235, 39, 245, 195, 16, 17, 235, 39, 245, 221, 16, 17, 235, - 39, 245, 190, 16, 17, 235, 39, 245, 154, 16, 17, 246, 186, 16, 17, 247, - 51, 16, 17, 245, 165, 16, 17, 246, 245, 16, 17, 241, 239, 16, 17, 246, - 165, 16, 17, 241, 234, 16, 17, 241, 16, 16, 17, 127, 241, 16, 16, 17, - 241, 243, 16, 17, 127, 241, 243, 16, 17, 238, 56, 16, 17, 127, 238, 56, - 16, 17, 241, 244, 16, 17, 127, 241, 244, 16, 17, 238, 57, 16, 17, 127, - 238, 57, 16, 17, 241, 72, 16, 17, 127, 241, 72, 16, 17, 238, 55, 16, 17, - 127, 238, 55, 16, 17, 253, 160, 16, 17, 253, 96, 16, 17, 246, 74, 16, 17, - 253, 28, 16, 17, 252, 150, 16, 17, 252, 251, 16, 17, 247, 234, 16, 17, - 237, 93, 247, 234, 16, 17, 191, 16, 17, 247, 117, 16, 17, 248, 204, 16, - 17, 127, 248, 204, 16, 17, 248, 205, 16, 17, 127, 248, 205, 16, 17, 242, - 34, 16, 17, 127, 242, 34, 16, 17, 248, 206, 16, 17, 127, 248, 206, 16, - 17, 242, 35, 16, 17, 127, 242, 35, 16, 17, 247, 235, 16, 17, 127, 247, - 235, 16, 17, 241, 88, 16, 17, 127, 241, 88, 16, 17, 235, 39, 241, 88, 16, - 17, 254, 190, 16, 17, 230, 231, 254, 190, 16, 17, 127, 254, 190, 16, 17, - 237, 88, 253, 28, 16, 17, 253, 36, 16, 17, 239, 212, 253, 36, 16, 17, - 127, 253, 80, 16, 17, 245, 111, 16, 17, 253, 37, 16, 17, 251, 182, 16, - 17, 252, 246, 16, 17, 248, 149, 16, 17, 127, 253, 49, 16, 17, 208, 16, - 17, 247, 100, 16, 17, 127, 252, 200, 16, 17, 241, 228, 16, 17, 127, 241, - 228, 16, 17, 146, 16, 17, 127, 146, 16, 17, 124, 146, 16, 17, 253, 147, - 16, 17, 243, 105, 16, 17, 253, 88, 16, 17, 249, 247, 16, 17, 253, 148, - 16, 17, 248, 39, 16, 17, 252, 234, 16, 17, 247, 139, 16, 17, 241, 135, - 16, 17, 127, 241, 135, 16, 17, 254, 191, 16, 17, 246, 247, 16, 17, 237, - 207, 246, 247, 16, 17, 247, 7, 16, 17, 237, 207, 247, 7, 16, 17, 241, 79, - 16, 17, 237, 207, 241, 79, 16, 17, 246, 228, 16, 17, 241, 80, 16, 17, - 246, 173, 16, 17, 241, 18, 16, 17, 238, 73, 16, 17, 127, 238, 73, 16, 17, - 253, 135, 16, 17, 246, 13, 16, 17, 246, 14, 16, 17, 241, 82, 16, 17, 240, - 150, 16, 17, 252, 32, 16, 17, 252, 39, 16, 17, 252, 40, 16, 17, 252, 41, - 16, 17, 252, 38, 16, 17, 235, 64, 252, 252, 16, 17, 235, 64, 253, 41, 16, - 17, 235, 64, 250, 75, 16, 17, 235, 64, 253, 21, 16, 17, 235, 64, 248, 65, - 16, 17, 235, 64, 154, 16, 17, 235, 64, 247, 14, 16, 17, 235, 64, 212, 16, - 17, 236, 171, 212, 16, 17, 254, 66, 16, 17, 245, 90, 16, 17, 253, 131, - 16, 17, 248, 141, 16, 17, 253, 159, 16, 17, 251, 142, 16, 17, 253, 35, - 16, 17, 247, 192, 16, 17, 254, 196, 16, 17, 242, 5, 16, 17, 242, 6, 16, - 17, 242, 7, 16, 17, 242, 4, 16, 17, 127, 253, 36, 16, 17, 127, 253, 37, - 16, 17, 127, 252, 246, 16, 17, 127, 208, 16, 17, 239, 134, 16, 17, 247, - 182, 16, 17, 244, 216, 16, 17, 247, 93, 16, 17, 244, 219, 16, 17, 246, - 169, 16, 17, 244, 202, 16, 17, 253, 69, 16, 17, 251, 67, 16, 17, 237, 88, - 246, 186, 16, 17, 237, 88, 247, 51, 16, 17, 237, 88, 246, 245, 16, 17, - 237, 88, 246, 165, 16, 17, 230, 150, 246, 247, 16, 17, 230, 150, 247, 7, - 16, 17, 230, 150, 246, 228, 16, 17, 230, 150, 246, 173, 16, 17, 230, 150, - 253, 135, 16, 17, 248, 90, 16, 17, 244, 98, 16, 17, 248, 91, 16, 17, 244, - 99, 16, 17, 247, 17, 16, 17, 244, 96, 16, 17, 254, 93, 16, 17, 235, 65, - 246, 247, 16, 17, 235, 65, 247, 7, 16, 17, 235, 65, 241, 79, 16, 17, 235, - 65, 246, 228, 16, 17, 235, 65, 241, 80, 16, 17, 235, 65, 246, 173, 16, - 17, 235, 65, 241, 18, 16, 17, 235, 65, 253, 135, 16, 17, 235, 243, 254, - 185, 16, 17, 231, 204, 72, 16, 17, 231, 204, 74, 16, 17, 231, 204, 73, - 16, 17, 231, 204, 57, 16, 17, 231, 204, 252, 250, 16, 17, 231, 204, 253, - 27, 16, 17, 231, 204, 253, 10, 16, 17, 231, 204, 252, 208, 16, 17, 231, - 204, 252, 247, 16, 17, 231, 204, 252, 248, 16, 17, 231, 204, 253, 8, 16, - 17, 231, 204, 252, 201, 16, 17, 231, 204, 253, 6, 16, 17, 231, 204, 253, - 7, 16, 17, 231, 204, 253, 33, 16, 17, 231, 204, 177, 16, 17, 237, 88, - 252, 252, 16, 17, 237, 88, 253, 41, 16, 17, 237, 88, 253, 21, 16, 17, - 237, 88, 154, 16, 17, 60, 250, 29, 16, 17, 60, 248, 52, 16, 17, 60, 247, - 13, 16, 17, 60, 243, 143, 16, 17, 60, 250, 28, 16, 17, 60, 246, 202, 16, - 17, 60, 253, 3, 16, 17, 60, 252, 246, 16, 17, 60, 253, 36, 16, 17, 60, - 247, 197, 16, 17, 60, 253, 37, 16, 17, 60, 208, 16, 17, 60, 253, 109, 16, - 17, 60, 253, 10, 16, 17, 60, 252, 250, 16, 17, 60, 247, 226, 16, 17, 60, - 253, 27, 16, 17, 60, 252, 208, 16, 17, 60, 250, 101, 16, 17, 60, 250, - 100, 16, 17, 60, 247, 151, 16, 17, 60, 243, 241, 16, 17, 60, 250, 99, 16, - 17, 60, 250, 98, 16, 17, 60, 247, 213, 16, 17, 60, 246, 228, 16, 17, 60, - 246, 247, 16, 17, 60, 240, 238, 16, 17, 60, 247, 7, 16, 17, 60, 246, 173, - 16, 17, 60, 252, 33, 16, 17, 60, 247, 217, 16, 17, 60, 248, 181, 16, 17, - 60, 246, 11, 16, 17, 60, 248, 182, 16, 17, 60, 246, 191, 16, 17, 60, 253, - 82, 16, 17, 60, 253, 50, 16, 17, 60, 253, 0, 16, 17, 60, 247, 46, 16, 17, - 60, 252, 223, 16, 17, 60, 213, 16, 17, 60, 254, 187, 16, 17, 60, 253, 40, - 16, 17, 60, 253, 76, 16, 17, 60, 253, 103, 16, 17, 60, 247, 144, 16, 17, - 60, 253, 39, 16, 17, 60, 252, 205, 16, 17, 60, 250, 164, 16, 17, 60, 247, - 158, 16, 17, 60, 248, 82, 16, 17, 60, 244, 55, 16, 17, 60, 247, 157, 16, - 17, 60, 246, 178, 16, 17, 60, 250, 174, 16, 17, 60, 250, 173, 16, 17, 60, - 250, 171, 16, 17, 60, 244, 62, 16, 17, 60, 250, 172, 16, 17, 60, 247, - 161, 16, 17, 60, 253, 183, 16, 17, 60, 252, 227, 16, 17, 60, 253, 8, 16, - 17, 60, 252, 247, 16, 17, 60, 247, 181, 16, 17, 60, 252, 248, 16, 17, 60, - 252, 201, 16, 17, 60, 252, 229, 16, 17, 60, 253, 14, 16, 17, 60, 253, 13, - 16, 17, 60, 247, 172, 16, 17, 60, 252, 239, 16, 17, 60, 198, 16, 17, 60, - 252, 233, 16, 17, 60, 252, 251, 16, 17, 60, 253, 96, 16, 17, 60, 247, 62, - 16, 17, 60, 253, 28, 16, 17, 60, 191, 16, 17, 60, 253, 118, 16, 17, 237, - 88, 253, 118, 16, 17, 60, 253, 90, 16, 17, 60, 253, 117, 16, 17, 60, 247, - 38, 16, 17, 60, 253, 104, 16, 17, 237, 88, 253, 104, 16, 17, 60, 252, - 213, 16, 17, 60, 248, 73, 16, 17, 60, 248, 72, 16, 17, 60, 250, 135, 16, - 17, 60, 244, 20, 16, 17, 60, 248, 71, 16, 17, 60, 248, 70, 16, 17, 60, - 253, 22, 16, 17, 60, 253, 49, 16, 17, 60, 253, 80, 16, 17, 60, 247, 168, - 16, 17, 60, 253, 42, 16, 17, 60, 252, 200, 16, 17, 60, 249, 201, 16, 17, - 60, 249, 200, 16, 17, 60, 249, 198, 16, 17, 60, 243, 74, 16, 17, 60, 249, - 199, 16, 17, 60, 248, 30, 16, 17, 60, 250, 219, 16, 17, 60, 248, 91, 16, - 17, 60, 250, 218, 16, 17, 60, 244, 97, 16, 17, 60, 248, 90, 16, 17, 60, - 247, 17, 16, 17, 60, 246, 1, 16, 17, 60, 242, 7, 16, 17, 60, 242, 5, 16, - 17, 60, 240, 45, 16, 17, 60, 242, 6, 16, 17, 60, 242, 4, 16, 17, 60, 248, - 178, 16, 17, 60, 248, 177, 16, 17, 60, 248, 175, 16, 17, 60, 246, 0, 16, - 17, 60, 248, 176, 16, 17, 60, 248, 174, 16, 17, 60, 253, 97, 16, 17, 60, - 253, 65, 16, 17, 60, 253, 46, 16, 17, 60, 247, 64, 16, 17, 60, 253, 72, - 16, 17, 60, 252, 226, 16, 17, 60, 254, 193, 16, 17, 60, 59, 254, 193, 16, - 17, 60, 249, 222, 16, 17, 60, 249, 221, 16, 17, 60, 246, 255, 16, 17, 60, - 243, 90, 16, 17, 60, 249, 220, 16, 17, 60, 246, 254, 16, 17, 60, 253, 26, - 16, 17, 60, 253, 25, 16, 17, 60, 253, 52, 16, 17, 60, 247, 50, 16, 17, - 60, 253, 24, 16, 17, 60, 252, 204, 16, 17, 60, 246, 246, 16, 17, 60, 246, - 245, 16, 17, 60, 246, 186, 16, 17, 60, 241, 70, 16, 17, 60, 247, 51, 16, - 17, 60, 246, 165, 16, 17, 60, 253, 160, 16, 17, 60, 247, 216, 16, 17, 60, - 247, 215, 16, 17, 60, 246, 248, 16, 17, 60, 242, 9, 16, 17, 60, 247, 58, - 16, 17, 60, 246, 216, 16, 17, 60, 247, 124, 16, 17, 60, 247, 29, 16, 17, - 60, 246, 217, 16, 17, 60, 240, 246, 16, 17, 60, 246, 200, 16, 17, 60, - 246, 176, 16, 17, 60, 246, 19, 16, 17, 60, 246, 18, 16, 17, 60, 246, 16, - 16, 17, 60, 240, 51, 16, 17, 60, 246, 17, 16, 17, 60, 246, 15, 16, 17, - 253, 212, 53, 16, 17, 246, 162, 240, 121, 16, 17, 248, 140, 16, 17, 244, - 203, 16, 17, 244, 248, 16, 17, 239, 153, 16, 17, 244, 249, 16, 17, 239, - 154, 16, 17, 244, 247, 16, 17, 239, 152, 240, 135, 245, 193, 76, 240, - 135, 1, 238, 120, 240, 135, 1, 244, 108, 240, 135, 1, 238, 213, 240, 135, - 1, 245, 148, 240, 135, 1, 244, 229, 240, 135, 1, 246, 29, 240, 135, 1, - 243, 26, 240, 135, 1, 240, 43, 240, 135, 1, 243, 18, 240, 135, 1, 238, - 143, 240, 135, 1, 244, 154, 240, 135, 1, 243, 154, 240, 135, 1, 234, 169, - 240, 135, 1, 236, 242, 240, 135, 1, 245, 138, 240, 135, 1, 242, 47, 240, - 135, 1, 248, 124, 240, 135, 1, 253, 161, 240, 135, 1, 234, 89, 240, 135, - 1, 234, 131, 240, 135, 1, 234, 88, 240, 135, 1, 253, 81, 240, 135, 1, - 233, 57, 240, 135, 1, 244, 4, 240, 135, 1, 229, 16, 240, 135, 1, 239, - 188, 240, 135, 235, 171, 76, 240, 135, 200, 235, 171, 76, 140, 1, 249, - 242, 249, 244, 255, 26, 254, 191, 140, 1, 196, 140, 1, 252, 64, 254, 244, - 66, 140, 1, 254, 20, 140, 1, 254, 190, 140, 1, 254, 195, 140, 1, 234, - 247, 245, 247, 237, 219, 140, 1, 246, 242, 140, 1, 242, 59, 57, 140, 1, - 255, 42, 73, 140, 1, 255, 0, 57, 140, 1, 242, 43, 140, 1, 227, 70, 73, - 140, 1, 227, 175, 73, 140, 1, 73, 140, 1, 253, 15, 140, 1, 253, 106, 140, - 1, 245, 112, 253, 191, 251, 177, 146, 140, 1, 239, 58, 140, 1, 249, 152, - 140, 1, 250, 157, 254, 186, 140, 1, 214, 140, 1, 247, 0, 140, 1, 250, 22, - 250, 55, 214, 140, 1, 246, 197, 140, 1, 246, 60, 252, 109, 254, 195, 140, - 1, 239, 3, 212, 140, 1, 243, 167, 212, 140, 1, 222, 247, 212, 140, 1, - 223, 53, 212, 140, 1, 239, 126, 254, 120, 251, 42, 199, 140, 1, 227, 77, - 199, 140, 1, 232, 172, 140, 1, 250, 123, 255, 8, 254, 72, 74, 140, 1, 72, - 140, 1, 244, 16, 254, 192, 140, 1, 250, 24, 140, 1, 227, 170, 253, 4, - 140, 1, 228, 160, 57, 140, 1, 250, 124, 249, 230, 140, 1, 239, 192, 239, - 190, 254, 187, 140, 1, 242, 53, 238, 204, 140, 1, 240, 10, 193, 140, 1, - 245, 184, 227, 71, 193, 140, 1, 227, 176, 193, 140, 1, 254, 194, 140, 1, - 254, 193, 140, 1, 245, 255, 253, 136, 254, 162, 254, 183, 140, 1, 227, - 177, 254, 183, 140, 1, 222, 222, 140, 1, 234, 19, 242, 201, 236, 13, 254, - 185, 140, 1, 222, 250, 254, 185, 140, 1, 232, 173, 140, 1, 236, 175, 140, - 1, 243, 95, 255, 24, 72, 140, 1, 239, 96, 253, 245, 185, 140, 1, 225, 96, - 185, 140, 1, 227, 76, 185, 140, 1, 239, 82, 250, 205, 250, 229, 149, 140, - 1, 232, 171, 140, 1, 236, 111, 140, 1, 250, 118, 140, 1, 243, 24, 249, - 175, 222, 222, 140, 1, 236, 179, 243, 101, 73, 140, 1, 247, 135, 140, 1, - 250, 121, 140, 1, 234, 43, 140, 1, 242, 230, 140, 1, 238, 141, 140, 1, - 245, 217, 140, 1, 227, 72, 140, 1, 227, 178, 140, 1, 227, 244, 140, 1, - 254, 196, 140, 1, 254, 184, 140, 237, 62, 228, 182, 140, 233, 219, 228, - 182, 140, 240, 221, 228, 182, 140, 238, 104, 98, 140, 234, 254, 98, 140, - 234, 18, 98, 235, 34, 1, 57, 235, 34, 1, 74, 235, 34, 1, 66, 235, 34, 1, - 177, 235, 34, 1, 252, 205, 235, 34, 1, 246, 169, 235, 34, 1, 252, 202, - 235, 34, 1, 252, 203, 235, 34, 1, 252, 201, 235, 34, 1, 213, 235, 34, 1, - 252, 211, 235, 34, 1, 198, 235, 34, 1, 191, 235, 34, 1, 252, 200, 235, - 34, 1, 252, 208, 235, 34, 1, 252, 204, 235, 34, 1, 154, 235, 34, 31, 5, - 74, 235, 34, 31, 5, 66, 235, 34, 5, 235, 43, 235, 32, 1, 57, 235, 32, 1, - 74, 235, 32, 1, 66, 235, 32, 1, 177, 235, 32, 1, 252, 205, 235, 32, 1, - 246, 169, 235, 32, 1, 252, 202, 235, 32, 1, 252, 203, 235, 32, 1, 252, - 201, 235, 32, 1, 213, 235, 32, 1, 252, 211, 235, 32, 1, 198, 235, 32, 1, - 191, 235, 32, 1, 208, 235, 32, 1, 252, 200, 235, 32, 1, 252, 208, 235, - 32, 1, 252, 204, 235, 32, 1, 154, 235, 32, 31, 5, 74, 235, 32, 31, 5, 66, - 235, 32, 5, 232, 240, 230, 194, 237, 62, 228, 182, 230, 194, 47, 228, - 182, 240, 145, 1, 57, 240, 145, 1, 74, 240, 145, 1, 66, 240, 145, 1, 177, - 240, 145, 1, 252, 205, 240, 145, 1, 246, 169, 240, 145, 1, 252, 202, 240, - 145, 1, 252, 203, 240, 145, 1, 252, 201, 240, 145, 1, 213, 240, 145, 1, - 252, 211, 240, 145, 1, 198, 240, 145, 1, 191, 240, 145, 1, 208, 240, 145, - 1, 252, 200, 240, 145, 1, 252, 208, 240, 145, 1, 252, 204, 240, 145, 1, - 154, 240, 145, 31, 5, 74, 240, 145, 31, 5, 66, 233, 86, 1, 57, 233, 86, - 1, 74, 233, 86, 1, 66, 233, 86, 1, 177, 233, 86, 1, 252, 205, 233, 86, 1, - 246, 169, 233, 86, 1, 252, 202, 233, 86, 1, 252, 203, 233, 86, 1, 252, - 201, 233, 86, 1, 213, 233, 86, 1, 252, 211, 233, 86, 1, 198, 233, 86, 1, - 191, 233, 86, 1, 252, 200, 233, 86, 1, 252, 208, 233, 86, 1, 252, 204, - 233, 86, 31, 5, 74, 233, 86, 31, 5, 66, 71, 1, 177, 71, 1, 246, 178, 71, - 1, 253, 33, 71, 1, 247, 158, 71, 1, 247, 93, 71, 1, 252, 215, 71, 1, 246, - 176, 71, 1, 253, 66, 71, 1, 247, 29, 71, 1, 247, 19, 71, 1, 252, 203, 71, - 1, 240, 150, 71, 1, 253, 57, 71, 1, 241, 82, 71, 1, 251, 68, 71, 1, 252, - 202, 71, 1, 246, 173, 71, 1, 96, 71, 1, 246, 228, 71, 1, 253, 8, 71, 1, - 252, 211, 71, 1, 246, 182, 71, 1, 253, 50, 71, 1, 247, 99, 71, 1, 253, - 14, 71, 1, 252, 251, 71, 1, 252, 246, 71, 1, 253, 49, 71, 1, 253, 108, - 71, 1, 246, 165, 71, 1, 247, 203, 71, 1, 252, 204, 71, 1, 154, 71, 1, - 252, 200, 71, 1, 253, 35, 71, 229, 166, 31, 251, 129, 71, 229, 166, 31, - 247, 192, 71, 229, 166, 31, 253, 131, 71, 229, 166, 31, 248, 141, 71, - 229, 166, 31, 253, 132, 71, 229, 166, 31, 251, 148, 71, 229, 166, 31, - 248, 145, 71, 229, 166, 31, 245, 105, 71, 229, 166, 31, 254, 6, 71, 229, - 166, 31, 251, 207, 71, 229, 166, 31, 253, 186, 71, 229, 166, 31, 250, - 244, 71, 229, 166, 31, 253, 190, 71, 229, 166, 31, 248, 140, 71, 229, - 166, 31, 254, 3, 247, 219, 118, 71, 229, 166, 31, 254, 3, 247, 219, 113, - 71, 229, 166, 31, 251, 130, 71, 31, 233, 208, 254, 28, 71, 31, 233, 208, - 252, 212, 71, 31, 5, 252, 212, 71, 31, 5, 74, 71, 31, 5, 252, 216, 71, - 31, 5, 254, 190, 71, 31, 5, 253, 203, 71, 31, 5, 66, 71, 31, 5, 252, 224, - 71, 31, 5, 253, 197, 71, 31, 5, 253, 15, 71, 31, 5, 191, 71, 31, 5, 253, - 77, 71, 31, 5, 72, 71, 31, 5, 253, 4, 71, 31, 5, 252, 221, 71, 31, 5, - 252, 220, 71, 31, 5, 252, 222, 71, 5, 234, 170, 71, 5, 234, 204, 71, 5, - 227, 182, 71, 5, 229, 38, 71, 5, 234, 251, 71, 5, 236, 7, 71, 5, 239, - 226, 71, 5, 229, 155, 71, 5, 234, 135, 71, 5, 238, 91, 71, 5, 239, 236, - 236, 207, 71, 5, 237, 24, 71, 5, 238, 157, 71, 5, 229, 235, 71, 5, 244, - 54, 71, 5, 229, 234, 71, 5, 238, 136, 253, 189, 244, 74, 71, 5, 253, 60, - 247, 109, 71, 5, 236, 11, 71, 5, 239, 195, 244, 153, 71, 5, 234, 141, 71, - 233, 112, 14, 245, 116, 71, 5, 227, 156, 71, 5, 232, 82, 71, 21, 240, - 126, 71, 21, 118, 71, 21, 113, 71, 21, 166, 71, 21, 158, 71, 21, 173, 71, - 21, 183, 71, 21, 194, 71, 21, 187, 71, 21, 192, 71, 14, 253, 60, 240, - 183, 251, 231, 71, 14, 253, 60, 240, 183, 244, 159, 71, 14, 253, 60, 240, - 183, 248, 132, 71, 14, 253, 60, 240, 183, 249, 108, 71, 14, 253, 60, 240, - 183, 242, 220, 71, 14, 253, 60, 240, 183, 245, 81, 71, 14, 253, 60, 240, - 183, 231, 125, 71, 14, 253, 60, 240, 183, 232, 255, 71, 14, 253, 60, 240, - 183, 232, 254, 71, 14, 253, 60, 240, 183, 231, 124, 68, 238, 123, 68, - 231, 218, 68, 237, 67, 68, 246, 162, 240, 121, 68, 237, 66, 68, 246, 160, - 240, 169, 68, 246, 175, 246, 227, 235, 69, 68, 246, 185, 4, 234, 21, 235, - 70, 68, 237, 64, 237, 67, 68, 237, 64, 246, 162, 240, 121, 68, 236, 167, - 68, 247, 142, 38, 233, 179, 118, 68, 247, 142, 38, 233, 179, 113, 68, - 247, 142, 38, 233, 179, 166, 68, 31, 230, 131, 68, 21, 240, 126, 68, 21, - 118, 68, 21, 113, 68, 21, 166, 68, 21, 158, 68, 21, 173, 68, 21, 183, 68, - 21, 194, 68, 21, 187, 68, 21, 192, 68, 1, 57, 68, 1, 72, 68, 1, 74, 68, - 1, 73, 68, 1, 66, 68, 1, 253, 15, 68, 1, 253, 71, 68, 1, 252, 231, 68, 1, - 252, 201, 68, 1, 247, 9, 68, 1, 252, 211, 68, 1, 213, 68, 1, 253, 35, 68, - 1, 252, 205, 68, 1, 198, 68, 1, 252, 200, 68, 1, 252, 204, 68, 1, 246, - 165, 68, 1, 252, 202, 68, 1, 252, 203, 68, 1, 246, 176, 68, 1, 252, 213, - 68, 1, 191, 68, 1, 208, 68, 1, 252, 208, 68, 1, 252, 234, 68, 1, 177, 68, - 1, 246, 178, 68, 1, 246, 216, 68, 1, 252, 226, 68, 1, 247, 14, 68, 1, - 252, 187, 68, 1, 247, 17, 68, 1, 247, 238, 68, 1, 246, 200, 68, 1, 246, - 175, 182, 31, 53, 68, 1, 246, 175, 72, 68, 1, 246, 175, 74, 68, 1, 246, - 175, 73, 68, 1, 246, 175, 66, 68, 1, 246, 175, 253, 15, 68, 1, 246, 175, - 253, 71, 68, 1, 246, 175, 247, 9, 68, 1, 246, 175, 252, 211, 68, 1, 246, - 175, 213, 68, 1, 246, 175, 253, 35, 68, 1, 246, 175, 252, 205, 68, 1, - 246, 175, 198, 68, 1, 246, 175, 252, 202, 68, 1, 246, 175, 252, 203, 68, - 1, 246, 175, 246, 176, 68, 1, 246, 175, 252, 213, 68, 1, 246, 175, 246, - 216, 68, 1, 246, 175, 191, 68, 1, 246, 175, 252, 208, 68, 1, 246, 175, - 177, 68, 1, 246, 175, 247, 143, 68, 1, 246, 175, 247, 14, 68, 1, 246, - 175, 250, 130, 68, 1, 246, 175, 251, 59, 68, 1, 246, 175, 246, 254, 68, - 1, 246, 185, 72, 68, 1, 246, 185, 74, 68, 1, 246, 185, 253, 234, 68, 1, - 246, 185, 253, 71, 68, 1, 246, 185, 66, 68, 1, 246, 185, 247, 9, 68, 1, - 246, 185, 177, 68, 1, 246, 185, 252, 205, 68, 1, 246, 185, 154, 68, 1, - 246, 185, 213, 68, 1, 246, 185, 246, 165, 68, 1, 246, 185, 252, 202, 68, - 1, 246, 185, 252, 203, 68, 1, 246, 185, 252, 213, 68, 1, 246, 185, 252, - 234, 68, 1, 246, 185, 247, 143, 68, 1, 246, 185, 247, 14, 68, 1, 246, - 185, 246, 216, 68, 1, 246, 185, 252, 226, 68, 1, 246, 185, 247, 100, 68, - 1, 246, 185, 246, 176, 68, 1, 246, 185, 246, 223, 68, 1, 237, 64, 74, 68, - 1, 237, 64, 177, 68, 1, 237, 64, 208, 68, 1, 237, 64, 252, 234, 68, 1, - 237, 64, 246, 223, 68, 1, 252, 209, 246, 161, 234, 4, 118, 68, 1, 252, - 209, 246, 161, 237, 25, 118, 68, 1, 252, 209, 246, 161, 236, 41, 68, 1, - 252, 209, 246, 161, 233, 248, 68, 1, 252, 209, 246, 161, 233, 70, 233, - 248, 68, 1, 252, 209, 246, 161, 235, 148, 68, 1, 252, 209, 246, 161, 152, - 235, 148, 68, 1, 252, 209, 246, 161, 57, 68, 1, 252, 209, 246, 161, 74, - 68, 1, 252, 209, 246, 161, 177, 68, 1, 252, 209, 246, 161, 246, 169, 68, - 1, 252, 209, 246, 161, 252, 215, 68, 1, 252, 209, 246, 161, 246, 191, 68, - 1, 252, 209, 246, 161, 240, 150, 68, 1, 252, 209, 246, 161, 246, 192, 68, - 1, 252, 209, 246, 161, 246, 203, 68, 1, 252, 209, 246, 161, 252, 202, 68, - 1, 252, 209, 246, 161, 252, 203, 68, 1, 252, 209, 246, 161, 213, 68, 1, - 252, 209, 246, 161, 246, 182, 68, 1, 252, 209, 246, 161, 246, 190, 68, 1, - 252, 209, 246, 161, 246, 223, 68, 1, 252, 209, 246, 161, 252, 226, 68, 1, - 252, 209, 246, 161, 253, 111, 68, 1, 246, 175, 252, 209, 246, 161, 252, - 202, 68, 1, 246, 175, 252, 209, 246, 161, 246, 223, 68, 1, 237, 64, 252, - 209, 246, 161, 246, 202, 68, 1, 237, 64, 252, 209, 246, 161, 246, 169, - 68, 1, 237, 64, 252, 209, 246, 161, 252, 215, 68, 1, 237, 64, 252, 209, - 246, 161, 246, 213, 68, 1, 237, 64, 252, 209, 246, 161, 246, 191, 68, 1, - 237, 64, 252, 209, 246, 161, 240, 166, 68, 1, 237, 64, 252, 209, 246, - 161, 252, 202, 68, 1, 237, 64, 252, 209, 246, 161, 246, 196, 68, 1, 237, - 64, 252, 209, 246, 161, 246, 190, 68, 1, 237, 64, 252, 209, 246, 161, - 249, 170, 68, 1, 237, 64, 252, 209, 246, 161, 246, 223, 68, 1, 237, 64, - 252, 209, 246, 161, 252, 226, 68, 1, 252, 209, 246, 161, 132, 66, 68, 1, - 252, 209, 246, 161, 132, 191, 68, 1, 237, 64, 252, 209, 246, 161, 246, - 199, 68, 1, 252, 209, 246, 161, 234, 46, 68, 1, 237, 64, 252, 209, 246, - 161, 247, 17, 174, 228, 172, 236, 133, 174, 1, 177, 174, 1, 246, 178, - 174, 1, 252, 205, 174, 1, 246, 202, 174, 1, 246, 169, 174, 1, 252, 215, - 174, 1, 246, 176, 174, 1, 252, 213, 174, 1, 246, 213, 174, 1, 248, 197, - 174, 1, 252, 202, 174, 1, 246, 173, 174, 1, 252, 203, 174, 1, 246, 196, - 174, 1, 252, 201, 174, 1, 213, 174, 1, 246, 182, 174, 1, 252, 211, 174, - 1, 246, 199, 174, 1, 198, 174, 1, 191, 174, 1, 208, 174, 1, 252, 200, - 174, 1, 252, 208, 174, 1, 246, 165, 174, 1, 246, 190, 174, 1, 252, 204, - 174, 1, 154, 174, 31, 5, 57, 174, 31, 5, 74, 174, 31, 5, 66, 174, 31, 5, - 252, 231, 174, 31, 5, 252, 221, 174, 31, 5, 252, 220, 174, 31, 5, 252, - 222, 174, 31, 5, 72, 174, 31, 5, 73, 174, 231, 189, 1, 191, 174, 231, - 189, 1, 208, 174, 231, 189, 1, 252, 208, 174, 3, 1, 177, 174, 3, 1, 246, - 169, 174, 3, 1, 231, 206, 174, 3, 1, 252, 202, 174, 3, 1, 252, 201, 174, - 3, 1, 213, 174, 3, 1, 198, 174, 3, 1, 208, 174, 3, 1, 252, 200, 174, 5, - 231, 106, 174, 5, 231, 91, 174, 5, 245, 145, 174, 5, 247, 87, 174, 229, - 165, 76, 174, 233, 82, 76, 174, 21, 240, 126, 174, 21, 118, 174, 21, 113, - 174, 21, 166, 174, 21, 158, 174, 21, 173, 174, 21, 183, 174, 21, 194, - 174, 21, 187, 174, 21, 192, 91, 254, 197, 1, 177, 91, 254, 197, 1, 253, - 83, 91, 254, 197, 1, 246, 169, 91, 254, 197, 1, 246, 216, 91, 254, 197, - 1, 252, 204, 91, 254, 197, 1, 191, 91, 254, 197, 1, 252, 202, 91, 254, - 197, 1, 246, 173, 91, 254, 197, 1, 252, 200, 91, 254, 197, 1, 213, 91, - 254, 197, 1, 246, 182, 91, 254, 197, 1, 198, 91, 254, 197, 1, 252, 234, - 91, 254, 197, 1, 252, 243, 91, 254, 197, 1, 154, 91, 254, 197, 1, 253, - 35, 91, 254, 197, 1, 246, 178, 91, 254, 197, 1, 240, 240, 91, 254, 197, - 1, 252, 201, 91, 254, 197, 1, 57, 91, 254, 197, 1, 74, 91, 254, 197, 1, - 252, 231, 91, 254, 197, 1, 253, 144, 91, 254, 197, 1, 66, 91, 254, 197, - 1, 252, 220, 91, 254, 197, 1, 73, 91, 254, 197, 1, 253, 71, 91, 254, 197, - 1, 72, 91, 254, 197, 1, 248, 241, 91, 254, 197, 1, 252, 221, 91, 254, - 197, 1, 235, 101, 91, 254, 197, 1, 235, 102, 91, 254, 197, 1, 235, 227, - 91, 254, 197, 1, 235, 103, 91, 254, 197, 1, 235, 228, 139, 91, 144, 1, - 201, 253, 35, 139, 91, 144, 1, 184, 253, 35, 139, 91, 144, 1, 201, 177, - 139, 91, 144, 1, 201, 253, 83, 139, 91, 144, 1, 201, 246, 169, 139, 91, - 144, 1, 184, 177, 139, 91, 144, 1, 184, 253, 83, 139, 91, 144, 1, 184, - 246, 169, 139, 91, 144, 1, 201, 246, 216, 139, 91, 144, 1, 201, 252, 204, - 139, 91, 144, 1, 201, 191, 139, 91, 144, 1, 184, 246, 216, 139, 91, 144, - 1, 184, 252, 204, 139, 91, 144, 1, 184, 191, 139, 91, 144, 1, 201, 252, - 202, 139, 91, 144, 1, 201, 246, 173, 139, 91, 144, 1, 201, 252, 201, 139, - 91, 144, 1, 184, 252, 202, 139, 91, 144, 1, 184, 246, 173, 139, 91, 144, - 1, 184, 252, 201, 139, 91, 144, 1, 201, 213, 139, 91, 144, 1, 201, 246, - 182, 139, 91, 144, 1, 201, 198, 139, 91, 144, 1, 184, 213, 139, 91, 144, - 1, 184, 246, 182, 139, 91, 144, 1, 184, 198, 139, 91, 144, 1, 201, 252, - 234, 139, 91, 144, 1, 201, 252, 243, 139, 91, 144, 1, 201, 252, 200, 139, - 91, 144, 1, 184, 252, 234, 139, 91, 144, 1, 184, 252, 243, 139, 91, 144, - 1, 184, 252, 200, 139, 91, 144, 1, 201, 154, 139, 91, 144, 1, 201, 252, - 203, 139, 91, 144, 1, 201, 252, 211, 139, 91, 144, 1, 184, 154, 139, 91, - 144, 1, 184, 252, 203, 139, 91, 144, 1, 184, 252, 211, 139, 91, 144, 1, - 201, 248, 87, 139, 91, 144, 1, 201, 248, 195, 139, 91, 144, 1, 184, 248, - 87, 139, 91, 144, 1, 184, 248, 195, 139, 91, 144, 31, 5, 31, 231, 142, - 139, 91, 144, 31, 5, 252, 212, 139, 91, 144, 31, 5, 252, 216, 139, 91, - 144, 31, 5, 66, 139, 91, 144, 31, 5, 252, 224, 139, 91, 144, 31, 5, 72, - 139, 91, 144, 31, 5, 253, 4, 139, 91, 144, 31, 5, 73, 139, 91, 144, 31, - 5, 253, 253, 139, 91, 144, 31, 5, 253, 71, 139, 91, 144, 31, 5, 253, 114, - 139, 91, 144, 31, 5, 248, 226, 139, 91, 144, 31, 5, 254, 15, 139, 91, - 144, 31, 5, 254, 123, 139, 91, 144, 31, 5, 251, 95, 139, 91, 144, 31, 5, - 252, 51, 139, 91, 144, 31, 5, 253, 234, 139, 91, 144, 1, 35, 196, 139, - 91, 144, 1, 35, 253, 69, 139, 91, 144, 1, 35, 199, 139, 91, 144, 1, 35, - 185, 139, 91, 144, 1, 35, 254, 186, 139, 91, 144, 1, 35, 222, 222, 139, - 91, 144, 1, 35, 254, 185, 139, 91, 144, 206, 235, 190, 139, 91, 144, 206, - 235, 191, 139, 91, 144, 21, 240, 126, 139, 91, 144, 21, 118, 139, 91, - 144, 21, 113, 139, 91, 144, 21, 166, 139, 91, 144, 21, 158, 139, 91, 144, - 21, 173, 139, 91, 144, 21, 183, 139, 91, 144, 21, 194, 139, 91, 144, 21, - 187, 139, 91, 144, 21, 192, 139, 91, 144, 5, 250, 204, 139, 91, 144, 5, - 244, 87, 71, 14, 230, 88, 71, 14, 248, 104, 240, 164, 71, 14, 253, 189, - 240, 164, 71, 14, 253, 208, 240, 164, 71, 14, 248, 1, 240, 164, 71, 14, - 248, 135, 240, 164, 71, 14, 232, 37, 240, 164, 71, 14, 233, 230, 240, - 164, 71, 14, 233, 229, 240, 164, 71, 14, 232, 36, 240, 164, 71, 14, 253, - 214, 240, 164, 71, 14, 233, 198, 240, 164, 71, 14, 235, 162, 240, 164, - 71, 14, 235, 161, 240, 164, 71, 14, 233, 197, 240, 164, 71, 14, 233, 199, - 240, 164, 71, 14, 231, 183, 71, 14, 248, 104, 246, 211, 71, 14, 253, 189, - 246, 211, 71, 14, 253, 208, 246, 211, 71, 14, 248, 1, 246, 211, 71, 14, - 248, 135, 246, 211, 71, 14, 232, 37, 246, 211, 71, 14, 233, 230, 246, - 211, 71, 14, 233, 229, 246, 211, 71, 14, 232, 36, 246, 211, 71, 14, 253, - 214, 246, 211, 71, 14, 233, 198, 246, 211, 71, 14, 235, 162, 246, 211, - 71, 14, 235, 161, 246, 211, 71, 14, 233, 197, 246, 211, 71, 14, 233, 199, - 246, 211, 233, 73, 1, 177, 233, 73, 1, 252, 205, 233, 73, 1, 246, 169, - 233, 73, 1, 244, 217, 233, 73, 1, 213, 233, 73, 1, 252, 211, 233, 73, 1, - 198, 233, 73, 1, 248, 102, 233, 73, 1, 252, 202, 233, 73, 1, 252, 203, - 233, 73, 1, 252, 201, 233, 73, 1, 248, 117, 233, 73, 1, 252, 215, 233, - 73, 1, 252, 213, 233, 73, 1, 246, 181, 233, 73, 1, 245, 19, 233, 73, 1, - 191, 233, 73, 1, 208, 233, 73, 1, 252, 200, 233, 73, 1, 252, 243, 233, - 73, 1, 252, 204, 233, 73, 1, 57, 233, 73, 1, 154, 233, 73, 31, 5, 74, - 233, 73, 31, 5, 66, 233, 73, 31, 5, 72, 233, 73, 31, 5, 73, 233, 73, 31, - 5, 253, 4, 233, 73, 234, 181, 233, 73, 252, 255, 106, 233, 144, 85, 5, - 253, 198, 239, 223, 85, 5, 253, 198, 236, 20, 85, 5, 238, 142, 85, 5, - 235, 217, 85, 5, 238, 124, 85, 1, 238, 92, 85, 1, 242, 50, 235, 48, 85, - 1, 239, 39, 85, 1, 244, 5, 235, 48, 85, 1, 240, 65, 85, 1, 246, 31, 235, - 48, 85, 1, 254, 224, 241, 66, 85, 1, 254, 224, 247, 199, 235, 48, 85, 1, - 254, 229, 238, 20, 85, 1, 254, 229, 241, 180, 235, 48, 85, 1, 238, 198, - 85, 1, 235, 242, 85, 1, 239, 172, 85, 1, 245, 53, 235, 48, 85, 1, 177, - 85, 1, 188, 230, 168, 85, 1, 252, 205, 85, 1, 254, 248, 243, 153, 85, 1, - 246, 169, 85, 1, 252, 215, 85, 1, 255, 21, 244, 85, 85, 1, 252, 213, 85, - 1, 255, 33, 244, 15, 85, 1, 246, 181, 85, 1, 254, 214, 239, 81, 85, 1, - 254, 214, 241, 52, 230, 168, 85, 1, 254, 218, 241, 52, 230, 223, 85, 1, - 254, 218, 241, 52, 230, 168, 85, 1, 255, 13, 236, 199, 85, 1, 252, 202, - 85, 1, 254, 214, 245, 238, 85, 1, 252, 203, 85, 1, 254, 218, 244, 115, - 85, 1, 252, 201, 85, 1, 213, 85, 1, 254, 242, 239, 56, 85, 1, 252, 211, - 85, 1, 255, 19, 234, 138, 85, 1, 198, 85, 1, 191, 85, 1, 208, 85, 1, 252, - 200, 85, 1, 252, 208, 85, 1, 255, 15, 245, 147, 85, 1, 255, 15, 245, 151, - 85, 1, 252, 204, 85, 1, 154, 85, 5, 234, 207, 85, 31, 5, 235, 48, 85, 31, - 5, 252, 52, 85, 31, 5, 253, 198, 245, 152, 85, 31, 5, 245, 223, 85, 31, - 5, 251, 241, 244, 6, 85, 31, 5, 254, 224, 241, 66, 85, 31, 5, 254, 224, - 247, 199, 235, 48, 85, 31, 5, 254, 229, 238, 20, 85, 31, 5, 254, 229, - 241, 180, 235, 48, 85, 31, 5, 236, 253, 85, 31, 5, 237, 217, 241, 66, 85, - 31, 5, 237, 217, 235, 48, 85, 31, 5, 237, 217, 247, 199, 235, 48, 85, 31, - 5, 239, 191, 85, 31, 5, 245, 65, 235, 48, 85, 248, 229, 242, 42, 85, 1, - 252, 214, 237, 128, 85, 1, 250, 163, 237, 128, 85, 1, 252, 45, 237, 128, - 85, 1, 255, 23, 237, 128, 85, 1, 254, 254, 237, 128, 85, 1, 254, 177, - 237, 128, 85, 1, 238, 109, 237, 128, 85, 21, 240, 126, 85, 21, 118, 85, - 21, 113, 85, 21, 166, 85, 21, 158, 85, 21, 173, 85, 21, 183, 85, 21, 194, - 85, 21, 187, 85, 21, 192, 85, 239, 180, 85, 236, 183, 85, 240, 85, 85, - 241, 28, 231, 115, 85, 241, 28, 245, 186, 85, 241, 28, 234, 187, 85, 232, - 239, 85, 23, 14, 243, 77, 85, 23, 14, 243, 58, 85, 23, 14, 243, 85, 85, - 23, 14, 241, 117, 85, 23, 14, 248, 18, 235, 217, 85, 23, 14, 243, 70, 85, - 23, 14, 238, 166, 85, 23, 14, 238, 183, 85, 23, 14, 238, 168, 85, 23, 14, - 248, 18, 243, 122, 85, 23, 14, 36, 240, 31, 85, 23, 14, 36, 238, 201, 85, - 23, 14, 36, 236, 120, 85, 23, 14, 36, 236, 119, 85, 23, 14, 36, 233, 169, - 85, 23, 14, 36, 239, 64, 2, 233, 169, 85, 23, 14, 36, 239, 63, 2, 233, - 169, 85, 23, 14, 36, 238, 121, 85, 23, 14, 36, 243, 152, 85, 23, 14, 230, - 158, 246, 157, 247, 133, 85, 23, 14, 230, 158, 246, 157, 248, 17, 85, 23, - 14, 230, 158, 237, 58, 248, 183, 85, 23, 14, 230, 158, 237, 58, 252, 4, - 85, 23, 14, 231, 232, 246, 157, 245, 60, 85, 23, 14, 231, 232, 246, 157, - 245, 83, 85, 23, 14, 231, 232, 237, 58, 245, 76, 85, 23, 14, 231, 232, - 237, 58, 245, 79, 85, 23, 14, 231, 232, 246, 157, 241, 62, 220, 5, 232, - 244, 220, 5, 231, 116, 220, 5, 231, 117, 220, 1, 57, 220, 1, 74, 220, 1, - 66, 220, 1, 253, 4, 220, 1, 73, 220, 1, 72, 220, 1, 253, 100, 220, 1, - 177, 220, 1, 253, 35, 220, 1, 252, 205, 220, 1, 246, 169, 220, 1, 252, - 215, 220, 1, 252, 213, 220, 1, 252, 226, 220, 1, 246, 181, 220, 1, 252, - 202, 220, 1, 252, 203, 220, 1, 252, 201, 220, 1, 213, 220, 1, 252, 234, - 220, 1, 252, 243, 220, 1, 252, 211, 220, 1, 198, 220, 1, 191, 220, 1, - 208, 220, 1, 252, 200, 220, 1, 252, 208, 220, 1, 252, 204, 220, 1, 253, - 83, 220, 1, 154, 220, 231, 194, 5, 231, 114, 220, 231, 194, 5, 232, 243, - 220, 231, 194, 5, 234, 184, 220, 31, 5, 232, 241, 220, 31, 5, 234, 185, - 220, 31, 5, 230, 86, 220, 31, 5, 232, 242, 220, 31, 5, 234, 183, 220, 31, - 5, 230, 87, 220, 5, 234, 182, 220, 1, 246, 178, 220, 1, 251, 248, 220, - 21, 240, 126, 220, 21, 118, 220, 21, 113, 220, 21, 166, 220, 21, 158, - 220, 21, 173, 220, 21, 183, 220, 21, 194, 220, 21, 187, 220, 21, 192, - 156, 1, 177, 156, 1, 250, 175, 156, 1, 246, 178, 156, 1, 252, 205, 156, - 1, 250, 35, 156, 1, 246, 169, 156, 1, 252, 215, 156, 1, 246, 176, 156, 1, - 252, 213, 156, 1, 246, 181, 156, 1, 252, 202, 156, 1, 246, 173, 156, 1, - 252, 203, 156, 1, 252, 201, 156, 1, 213, 156, 1, 248, 133, 156, 1, 246, - 182, 156, 1, 252, 234, 156, 1, 249, 253, 156, 1, 252, 211, 156, 1, 249, - 124, 156, 1, 198, 156, 1, 251, 20, 156, 1, 246, 216, 156, 1, 240, 240, - 156, 1, 246, 254, 156, 1, 191, 156, 1, 208, 156, 1, 252, 200, 156, 1, - 154, 156, 1, 248, 61, 156, 1, 252, 243, 156, 1, 252, 204, 156, 1, 246, - 165, 156, 1, 252, 208, 156, 1, 57, 156, 231, 189, 1, 191, 156, 231, 189, - 1, 208, 156, 31, 5, 252, 212, 156, 31, 5, 74, 156, 31, 5, 73, 156, 31, 5, - 252, 220, 156, 31, 5, 66, 156, 31, 5, 252, 224, 156, 31, 5, 72, 156, 231, - 194, 5, 254, 186, 156, 231, 194, 5, 185, 156, 231, 194, 5, 149, 156, 231, - 194, 5, 199, 156, 231, 194, 5, 254, 187, 156, 231, 194, 5, 146, 156, 231, - 194, 5, 254, 183, 156, 231, 194, 5, 234, 172, 156, 231, 194, 5, 244, 48, - 156, 5, 251, 173, 156, 5, 237, 125, 156, 229, 161, 235, 218, 156, 229, - 161, 251, 85, 240, 41, 235, 218, 156, 229, 161, 235, 156, 156, 229, 161, - 240, 50, 235, 156, 156, 229, 161, 237, 10, 156, 21, 240, 126, 156, 21, - 118, 156, 21, 113, 156, 21, 166, 156, 21, 158, 156, 21, 173, 156, 21, - 183, 156, 21, 194, 156, 21, 187, 156, 21, 192, 156, 1, 246, 191, 156, 1, - 240, 150, 156, 1, 246, 192, 254, 189, 240, 122, 21, 240, 126, 254, 189, - 240, 122, 21, 118, 254, 189, 240, 122, 21, 113, 254, 189, 240, 122, 21, - 166, 254, 189, 240, 122, 21, 158, 254, 189, 240, 122, 21, 173, 254, 189, - 240, 122, 21, 183, 254, 189, 240, 122, 21, 194, 254, 189, 240, 122, 21, - 187, 254, 189, 240, 122, 21, 192, 254, 189, 240, 122, 1, 252, 200, 254, - 189, 240, 122, 1, 253, 113, 254, 189, 240, 122, 1, 254, 24, 254, 189, - 240, 122, 1, 247, 9, 254, 189, 240, 122, 1, 253, 112, 254, 189, 240, 122, - 1, 247, 166, 254, 189, 240, 122, 1, 248, 223, 254, 189, 240, 122, 1, 248, - 222, 254, 189, 240, 122, 1, 248, 224, 254, 189, 240, 122, 1, 248, 225, - 254, 189, 240, 122, 1, 253, 42, 254, 189, 240, 122, 1, 253, 182, 254, - 189, 240, 122, 1, 253, 230, 254, 189, 240, 122, 1, 250, 120, 254, 189, - 240, 122, 1, 253, 149, 254, 189, 240, 122, 1, 253, 22, 254, 189, 240, - 122, 1, 254, 163, 254, 189, 240, 122, 1, 253, 45, 254, 189, 240, 122, 1, - 248, 188, 254, 189, 240, 122, 1, 254, 15, 254, 189, 240, 122, 1, 253, 80, - 254, 189, 240, 122, 1, 254, 51, 254, 189, 240, 122, 1, 249, 223, 254, - 189, 240, 122, 1, 252, 232, 254, 189, 240, 122, 1, 248, 34, 254, 189, - 240, 122, 1, 253, 49, 254, 189, 240, 122, 1, 251, 100, 254, 189, 240, - 122, 1, 254, 121, 254, 189, 240, 122, 1, 254, 0, 254, 189, 240, 122, 1, - 253, 187, 254, 189, 240, 122, 254, 207, 234, 253, 254, 189, 240, 122, - 236, 88, 232, 60, 254, 189, 240, 122, 231, 105, 232, 60, 254, 189, 240, - 122, 239, 218, 254, 189, 240, 122, 232, 249, 254, 189, 240, 122, 242, 45, - 254, 189, 240, 122, 229, 161, 235, 193, 254, 189, 240, 122, 229, 161, 47, - 235, 193, 7, 1, 3, 6, 57, 7, 1, 3, 6, 253, 4, 7, 3, 1, 209, 253, 4, 7, 1, - 3, 6, 237, 118, 254, 185, 7, 1, 3, 6, 254, 194, 7, 1, 3, 6, 222, 222, 7, - 1, 3, 6, 246, 242, 7, 1, 3, 6, 72, 7, 3, 1, 209, 246, 157, 72, 7, 3, 1, - 209, 74, 7, 1, 3, 6, 254, 192, 7, 1, 3, 6, 254, 186, 7, 1, 3, 6, 255, 58, - 2, 82, 7, 1, 3, 6, 185, 7, 1, 3, 6, 200, 199, 7, 1, 3, 6, 73, 7, 1, 3, 6, - 246, 157, 73, 7, 3, 1, 233, 116, 73, 7, 3, 1, 233, 116, 246, 157, 73, 7, - 3, 1, 233, 116, 130, 2, 82, 7, 3, 1, 209, 253, 15, 7, 1, 3, 6, 253, 119, - 7, 3, 1, 252, 228, 132, 73, 7, 3, 1, 237, 59, 132, 73, 7, 1, 3, 6, 254, - 187, 7, 1, 3, 6, 200, 146, 7, 1, 3, 6, 209, 146, 7, 1, 3, 6, 254, 183, 7, - 1, 3, 6, 66, 7, 3, 1, 233, 116, 66, 7, 3, 1, 233, 116, 229, 247, 66, 7, - 3, 1, 233, 116, 209, 185, 7, 1, 3, 6, 196, 7, 1, 3, 6, 254, 195, 7, 1, 3, - 6, 254, 193, 7, 1, 3, 6, 247, 74, 7, 1, 237, 107, 232, 218, 234, 227, 7, - 1, 246, 224, 19, 1, 3, 6, 237, 61, 19, 1, 3, 6, 237, 82, 19, 1, 3, 6, - 252, 223, 19, 1, 3, 6, 246, 209, 19, 1, 3, 6, 246, 204, 28, 1, 3, 6, 253, - 58, 52, 1, 6, 57, 52, 1, 6, 253, 4, 52, 1, 6, 254, 185, 52, 1, 6, 237, - 118, 254, 185, 52, 1, 6, 222, 222, 52, 1, 6, 72, 52, 1, 6, 200, 72, 52, - 1, 6, 214, 52, 1, 6, 212, 52, 1, 6, 74, 52, 1, 6, 254, 192, 52, 1, 6, - 254, 186, 52, 1, 6, 149, 52, 1, 6, 185, 52, 1, 6, 199, 52, 1, 6, 200, - 199, 52, 1, 6, 73, 52, 1, 6, 253, 119, 52, 1, 6, 254, 187, 52, 1, 6, 146, - 52, 1, 6, 254, 183, 52, 1, 6, 66, 52, 1, 6, 254, 195, 52, 1, 3, 57, 52, - 1, 3, 209, 57, 52, 1, 3, 237, 71, 52, 1, 3, 209, 253, 4, 52, 1, 3, 254, - 185, 52, 1, 3, 222, 222, 52, 1, 3, 72, 52, 1, 3, 237, 144, 52, 1, 3, 246, - 157, 72, 52, 1, 3, 209, 246, 157, 72, 52, 1, 3, 214, 52, 1, 3, 209, 74, - 52, 1, 3, 254, 186, 52, 1, 3, 185, 52, 1, 3, 247, 0, 52, 1, 3, 73, 52, 1, - 3, 246, 157, 73, 52, 1, 3, 252, 228, 132, 73, 52, 1, 3, 237, 59, 132, 73, - 52, 1, 3, 254, 187, 52, 1, 3, 254, 183, 52, 1, 3, 66, 52, 1, 3, 233, 116, - 66, 52, 1, 3, 209, 185, 52, 1, 3, 196, 52, 1, 3, 246, 224, 52, 1, 3, 240, - 160, 52, 1, 3, 19, 237, 61, 52, 1, 3, 237, 75, 52, 1, 3, 19, 246, 198, - 52, 1, 3, 246, 200, 7, 231, 195, 3, 1, 74, 7, 231, 195, 3, 1, 146, 7, - 231, 195, 3, 1, 66, 7, 231, 195, 3, 1, 196, 19, 231, 195, 3, 1, 240, 160, - 19, 231, 195, 3, 1, 237, 61, 19, 231, 195, 3, 1, 246, 209, 19, 231, 195, - 3, 1, 246, 198, 19, 231, 195, 3, 1, 246, 200, 7, 3, 1, 253, 71, 7, 3, 1, - 45, 2, 237, 44, 205, 7, 3, 1, 255, 63, 2, 237, 44, 205, 7, 3, 1, 255, 72, - 2, 237, 44, 205, 7, 3, 1, 255, 68, 2, 237, 44, 205, 7, 3, 1, 255, 60, 2, - 237, 44, 205, 7, 3, 1, 255, 70, 2, 237, 44, 205, 7, 3, 1, 255, 57, 2, - 237, 44, 205, 7, 3, 1, 255, 57, 2, 233, 206, 22, 237, 44, 205, 7, 3, 1, - 255, 59, 2, 237, 44, 205, 7, 3, 1, 255, 61, 2, 237, 44, 205, 7, 3, 1, - 255, 56, 2, 237, 44, 205, 7, 3, 1, 209, 214, 52, 1, 28, 252, 232, 7, 3, - 1, 235, 38, 214, 7, 3, 1, 255, 48, 2, 227, 180, 7, 3, 6, 1, 255, 55, 2, - 82, 7, 3, 1, 246, 168, 2, 82, 7, 3, 1, 255, 70, 2, 82, 7, 3, 6, 1, 97, 2, - 82, 7, 3, 1, 235, 23, 2, 82, 7, 3, 1, 45, 2, 235, 36, 88, 7, 3, 1, 255, - 63, 2, 235, 36, 88, 7, 3, 1, 255, 72, 2, 235, 36, 88, 7, 3, 1, 255, 65, - 2, 235, 36, 88, 7, 3, 1, 255, 67, 2, 235, 36, 88, 7, 3, 1, 255, 58, 2, - 235, 36, 88, 7, 3, 1, 255, 68, 2, 235, 36, 88, 7, 3, 1, 255, 60, 2, 235, - 36, 88, 7, 3, 1, 255, 70, 2, 235, 36, 88, 7, 3, 1, 255, 57, 2, 235, 36, - 88, 7, 3, 1, 255, 59, 2, 235, 36, 88, 7, 3, 1, 253, 146, 2, 235, 36, 88, - 7, 3, 1, 255, 69, 2, 235, 36, 88, 7, 3, 1, 255, 74, 2, 235, 36, 88, 7, 3, - 1, 255, 56, 2, 235, 36, 88, 7, 3, 1, 102, 2, 231, 201, 88, 7, 3, 1, 240, - 120, 2, 231, 201, 88, 7, 3, 1, 255, 63, 2, 246, 171, 22, 240, 133, 7, 3, - 1, 161, 2, 231, 201, 88, 7, 3, 1, 246, 157, 161, 2, 231, 201, 88, 7, 3, - 1, 200, 246, 157, 161, 2, 231, 201, 88, 7, 3, 1, 241, 14, 2, 231, 201, - 88, 7, 3, 1, 255, 55, 2, 231, 201, 88, 7, 3, 1, 246, 157, 130, 2, 231, - 201, 88, 7, 3, 1, 253, 146, 2, 231, 201, 88, 7, 3, 1, 97, 2, 231, 201, - 88, 7, 3, 1, 253, 101, 2, 231, 201, 88, 52, 1, 3, 209, 237, 71, 52, 1, 3, - 254, 194, 52, 1, 3, 255, 62, 2, 240, 168, 52, 1, 3, 246, 242, 52, 1, 3, - 200, 246, 157, 72, 52, 1, 3, 254, 191, 52, 1, 3, 235, 46, 255, 73, 2, 82, - 52, 1, 3, 95, 214, 52, 1, 3, 209, 212, 52, 1, 3, 255, 55, 2, 82, 52, 1, - 3, 240, 146, 52, 1, 3, 6, 74, 52, 1, 3, 6, 255, 55, 2, 82, 52, 1, 3, 255, - 73, 2, 227, 200, 52, 1, 3, 255, 58, 2, 231, 201, 88, 52, 1, 3, 255, 58, - 2, 235, 36, 88, 52, 1, 3, 6, 149, 52, 1, 3, 255, 68, 2, 88, 52, 1, 3, - 209, 255, 68, 2, 182, 247, 3, 52, 1, 3, 255, 60, 2, 42, 88, 52, 1, 3, - 255, 60, 2, 231, 201, 88, 52, 1, 3, 6, 199, 52, 1, 3, 237, 118, 73, 52, - 1, 3, 246, 198, 52, 1, 3, 255, 59, 2, 88, 52, 1, 3, 246, 232, 52, 1, 3, - 255, 61, 2, 235, 36, 88, 52, 1, 3, 97, 125, 52, 1, 3, 233, 92, 52, 1, 3, - 6, 66, 52, 1, 3, 255, 69, 2, 88, 52, 1, 3, 209, 196, 52, 1, 3, 254, 193, - 52, 1, 3, 255, 56, 2, 231, 201, 88, 52, 1, 3, 255, 56, 2, 240, 168, 52, - 1, 3, 247, 74, 52, 1, 3, 237, 89, 36, 237, 50, 240, 163, 235, 24, 36, - 237, 50, 240, 159, 235, 24, 36, 245, 192, 51, 36, 231, 150, 76, 36, 227, - 250, 36, 227, 241, 36, 227, 252, 36, 227, 215, 36, 222, 245, 36, 222, - 243, 36, 7, 3, 1, 255, 57, 51, 36, 227, 221, 36, 227, 251, 36, 47, 230, - 125, 46, 36, 237, 208, 46, 36, 237, 170, 51, 36, 255, 8, 51, 36, 254, - 244, 46, 36, 255, 52, 46, 36, 7, 3, 1, 231, 230, 246, 157, 102, 46, 36, - 7, 3, 1, 253, 4, 36, 7, 3, 1, 253, 168, 36, 7, 3, 1, 253, 169, 36, 7, 3, - 1, 255, 62, 233, 79, 36, 7, 3, 1, 235, 38, 222, 222, 36, 7, 3, 1, 246, - 242, 36, 7, 3, 1, 214, 36, 7, 1, 3, 6, 214, 36, 7, 3, 1, 254, 186, 36, 7, - 3, 1, 149, 36, 7, 1, 3, 6, 149, 36, 7, 1, 3, 6, 185, 36, 7, 3, 1, 199, - 36, 7, 1, 3, 6, 199, 36, 7, 1, 3, 6, 146, 36, 7, 3, 1, 255, 57, 233, 143, - 36, 7, 3, 1, 193, 36, 7, 3, 1, 182, 193, 36, 7, 3, 1, 254, 193, 36, 42, - 231, 214, 46, 36, 41, 231, 214, 22, 103, 231, 214, 51, 7, 6, 1, 102, 2, - 246, 174, 51, 7, 3, 1, 102, 2, 246, 174, 51, 7, 6, 1, 45, 2, 56, 46, 7, - 3, 1, 45, 2, 56, 46, 7, 6, 1, 45, 2, 56, 51, 7, 3, 1, 45, 2, 56, 51, 7, - 6, 1, 45, 2, 246, 167, 51, 7, 3, 1, 45, 2, 246, 167, 51, 7, 6, 1, 255, - 62, 2, 235, 87, 22, 155, 7, 3, 1, 255, 62, 2, 235, 87, 22, 155, 7, 6, 1, - 255, 63, 2, 56, 46, 7, 3, 1, 255, 63, 2, 56, 46, 7, 6, 1, 255, 63, 2, 56, - 51, 7, 3, 1, 255, 63, 2, 56, 51, 7, 6, 1, 255, 63, 2, 246, 167, 51, 7, 3, - 1, 255, 63, 2, 246, 167, 51, 7, 6, 1, 255, 63, 2, 233, 79, 7, 3, 1, 255, - 63, 2, 233, 79, 7, 6, 1, 255, 63, 2, 230, 125, 51, 7, 3, 1, 255, 63, 2, - 230, 125, 51, 7, 6, 1, 161, 2, 237, 83, 22, 237, 36, 7, 3, 1, 161, 2, - 237, 83, 22, 237, 36, 7, 6, 1, 161, 2, 237, 83, 22, 155, 7, 3, 1, 161, 2, - 237, 83, 22, 155, 7, 6, 1, 161, 2, 230, 125, 51, 7, 3, 1, 161, 2, 230, - 125, 51, 7, 6, 1, 161, 2, 240, 128, 51, 7, 3, 1, 161, 2, 240, 128, 51, 7, - 6, 1, 161, 2, 235, 87, 22, 237, 46, 7, 3, 1, 161, 2, 235, 87, 22, 237, - 46, 7, 6, 1, 255, 72, 2, 56, 46, 7, 3, 1, 255, 72, 2, 56, 46, 7, 6, 1, - 255, 65, 2, 235, 16, 7, 3, 1, 255, 65, 2, 235, 16, 7, 6, 1, 255, 66, 2, - 56, 46, 7, 3, 1, 255, 66, 2, 56, 46, 7, 6, 1, 255, 66, 2, 56, 51, 7, 3, - 1, 255, 66, 2, 56, 51, 7, 6, 1, 255, 66, 2, 219, 7, 3, 1, 255, 66, 2, - 219, 7, 6, 1, 255, 66, 2, 233, 79, 7, 3, 1, 255, 66, 2, 233, 79, 7, 6, 1, - 255, 66, 2, 240, 161, 51, 7, 3, 1, 255, 66, 2, 240, 161, 51, 7, 6, 1, - 255, 55, 2, 240, 128, 51, 7, 3, 1, 255, 55, 2, 240, 128, 51, 7, 6, 1, - 255, 55, 2, 231, 203, 22, 155, 7, 3, 1, 255, 55, 2, 231, 203, 22, 155, 7, - 6, 1, 255, 67, 2, 155, 7, 3, 1, 255, 67, 2, 155, 7, 6, 1, 255, 67, 2, 56, - 51, 7, 3, 1, 255, 67, 2, 56, 51, 7, 6, 1, 255, 67, 2, 246, 167, 51, 7, 3, - 1, 255, 67, 2, 246, 167, 51, 7, 6, 1, 255, 58, 2, 56, 51, 7, 3, 1, 255, - 58, 2, 56, 51, 7, 6, 1, 255, 58, 2, 56, 240, 144, 22, 235, 16, 7, 3, 1, - 255, 58, 2, 56, 240, 144, 22, 235, 16, 7, 6, 1, 255, 58, 2, 246, 167, 51, - 7, 3, 1, 255, 58, 2, 246, 167, 51, 7, 6, 1, 255, 58, 2, 230, 125, 51, 7, - 3, 1, 255, 58, 2, 230, 125, 51, 7, 6, 1, 255, 68, 2, 155, 7, 3, 1, 255, - 68, 2, 155, 7, 6, 1, 255, 68, 2, 56, 46, 7, 3, 1, 255, 68, 2, 56, 46, 7, - 6, 1, 255, 68, 2, 56, 51, 7, 3, 1, 255, 68, 2, 56, 51, 7, 6, 1, 255, 60, - 2, 56, 46, 7, 3, 1, 255, 60, 2, 56, 46, 7, 6, 1, 255, 60, 2, 56, 51, 7, - 3, 1, 255, 60, 2, 56, 51, 7, 6, 1, 255, 60, 2, 246, 167, 51, 7, 3, 1, - 255, 60, 2, 246, 167, 51, 7, 6, 1, 255, 60, 2, 230, 125, 51, 7, 3, 1, - 255, 60, 2, 230, 125, 51, 7, 6, 1, 130, 2, 240, 128, 22, 155, 7, 3, 1, - 130, 2, 240, 128, 22, 155, 7, 6, 1, 130, 2, 240, 128, 22, 219, 7, 3, 1, - 130, 2, 240, 128, 22, 219, 7, 6, 1, 130, 2, 237, 83, 22, 237, 36, 7, 3, - 1, 130, 2, 237, 83, 22, 237, 36, 7, 6, 1, 130, 2, 237, 83, 22, 155, 7, 3, - 1, 130, 2, 237, 83, 22, 155, 7, 6, 1, 255, 70, 2, 155, 7, 3, 1, 255, 70, - 2, 155, 7, 6, 1, 255, 70, 2, 56, 46, 7, 3, 1, 255, 70, 2, 56, 46, 7, 6, - 1, 255, 57, 2, 56, 46, 7, 3, 1, 255, 57, 2, 56, 46, 7, 6, 1, 255, 57, 2, - 56, 51, 7, 3, 1, 255, 57, 2, 56, 51, 7, 6, 1, 255, 57, 2, 56, 240, 144, - 22, 235, 16, 7, 3, 1, 255, 57, 2, 56, 240, 144, 22, 235, 16, 7, 6, 1, - 255, 57, 2, 246, 167, 51, 7, 3, 1, 255, 57, 2, 246, 167, 51, 7, 6, 1, - 255, 59, 2, 56, 46, 7, 3, 1, 255, 59, 2, 56, 46, 7, 6, 1, 255, 59, 2, 56, - 51, 7, 3, 1, 255, 59, 2, 56, 51, 7, 6, 1, 255, 59, 2, 240, 159, 22, 56, - 46, 7, 3, 1, 255, 59, 2, 240, 159, 22, 56, 46, 7, 6, 1, 255, 59, 2, 241, - 29, 22, 56, 46, 7, 3, 1, 255, 59, 2, 241, 29, 22, 56, 46, 7, 6, 1, 255, - 59, 2, 56, 240, 144, 22, 56, 46, 7, 3, 1, 255, 59, 2, 56, 240, 144, 22, - 56, 46, 7, 6, 1, 255, 61, 2, 56, 46, 7, 3, 1, 255, 61, 2, 56, 46, 7, 6, - 1, 255, 61, 2, 56, 51, 7, 3, 1, 255, 61, 2, 56, 51, 7, 6, 1, 255, 61, 2, - 246, 167, 51, 7, 3, 1, 255, 61, 2, 246, 167, 51, 7, 6, 1, 255, 61, 2, - 230, 125, 51, 7, 3, 1, 255, 61, 2, 230, 125, 51, 7, 6, 1, 97, 2, 231, - 203, 51, 7, 3, 1, 97, 2, 231, 203, 51, 7, 6, 1, 97, 2, 240, 128, 51, 7, - 3, 1, 97, 2, 240, 128, 51, 7, 6, 1, 97, 2, 230, 125, 51, 7, 3, 1, 97, 2, - 230, 125, 51, 7, 6, 1, 97, 2, 240, 128, 22, 155, 7, 3, 1, 97, 2, 240, - 128, 22, 155, 7, 6, 1, 97, 2, 237, 83, 22, 219, 7, 3, 1, 97, 2, 237, 83, - 22, 219, 7, 6, 1, 255, 69, 2, 205, 7, 3, 1, 255, 69, 2, 205, 7, 6, 1, - 255, 69, 2, 56, 51, 7, 3, 1, 255, 69, 2, 56, 51, 7, 6, 1, 255, 71, 2, - 237, 36, 7, 3, 1, 255, 71, 2, 237, 36, 7, 6, 1, 255, 71, 2, 155, 7, 3, 1, - 255, 71, 2, 155, 7, 6, 1, 255, 71, 2, 219, 7, 3, 1, 255, 71, 2, 219, 7, - 6, 1, 255, 71, 2, 56, 46, 7, 3, 1, 255, 71, 2, 56, 46, 7, 6, 1, 255, 71, - 2, 56, 51, 7, 3, 1, 255, 71, 2, 56, 51, 7, 6, 1, 255, 74, 2, 56, 46, 7, - 3, 1, 255, 74, 2, 56, 46, 7, 6, 1, 255, 74, 2, 219, 7, 3, 1, 255, 74, 2, - 219, 7, 6, 1, 255, 64, 2, 56, 46, 7, 3, 1, 255, 64, 2, 56, 46, 7, 6, 1, - 255, 56, 2, 229, 162, 7, 3, 1, 255, 56, 2, 229, 162, 7, 6, 1, 255, 56, 2, - 56, 51, 7, 3, 1, 255, 56, 2, 56, 51, 7, 6, 1, 255, 56, 2, 246, 167, 51, - 7, 3, 1, 255, 56, 2, 246, 167, 51, 7, 3, 1, 255, 66, 2, 246, 167, 51, 7, - 3, 1, 255, 61, 2, 219, 7, 3, 1, 255, 71, 2, 246, 174, 46, 7, 3, 1, 255, - 64, 2, 246, 174, 46, 7, 3, 1, 102, 2, 41, 132, 240, 147, 7, 3, 1, 182, - 255, 59, 2, 56, 46, 7, 3, 1, 182, 255, 59, 2, 233, 74, 82, 7, 3, 1, 182, - 255, 59, 2, 201, 82, 7, 6, 1, 240, 235, 193, 7, 3, 1, 237, 75, 7, 6, 1, - 102, 2, 56, 51, 7, 3, 1, 102, 2, 56, 51, 7, 6, 1, 102, 2, 246, 171, 46, - 7, 3, 1, 102, 2, 246, 171, 46, 7, 6, 1, 102, 2, 230, 125, 22, 155, 7, 3, - 1, 102, 2, 230, 125, 22, 155, 7, 6, 1, 102, 2, 230, 125, 22, 237, 36, 7, - 3, 1, 102, 2, 230, 125, 22, 237, 36, 7, 6, 1, 102, 2, 230, 125, 22, 246, - 171, 46, 7, 3, 1, 102, 2, 230, 125, 22, 246, 171, 46, 7, 6, 1, 102, 2, - 230, 125, 22, 205, 7, 3, 1, 102, 2, 230, 125, 22, 205, 7, 6, 1, 102, 2, - 230, 125, 22, 56, 51, 7, 3, 1, 102, 2, 230, 125, 22, 56, 51, 7, 6, 1, - 102, 2, 240, 161, 22, 155, 7, 3, 1, 102, 2, 240, 161, 22, 155, 7, 6, 1, - 102, 2, 240, 161, 22, 237, 36, 7, 3, 1, 102, 2, 240, 161, 22, 237, 36, 7, - 6, 1, 102, 2, 240, 161, 22, 246, 171, 46, 7, 3, 1, 102, 2, 240, 161, 22, - 246, 171, 46, 7, 6, 1, 102, 2, 240, 161, 22, 205, 7, 3, 1, 102, 2, 240, - 161, 22, 205, 7, 6, 1, 102, 2, 240, 161, 22, 56, 51, 7, 3, 1, 102, 2, - 240, 161, 22, 56, 51, 7, 6, 1, 161, 2, 56, 51, 7, 3, 1, 161, 2, 56, 51, - 7, 6, 1, 161, 2, 246, 171, 46, 7, 3, 1, 161, 2, 246, 171, 46, 7, 6, 1, - 161, 2, 205, 7, 3, 1, 161, 2, 205, 7, 6, 1, 161, 2, 230, 125, 22, 155, 7, - 3, 1, 161, 2, 230, 125, 22, 155, 7, 6, 1, 161, 2, 230, 125, 22, 237, 36, - 7, 3, 1, 161, 2, 230, 125, 22, 237, 36, 7, 6, 1, 161, 2, 230, 125, 22, - 246, 171, 46, 7, 3, 1, 161, 2, 230, 125, 22, 246, 171, 46, 7, 6, 1, 161, - 2, 230, 125, 22, 205, 7, 3, 1, 161, 2, 230, 125, 22, 205, 7, 6, 1, 161, - 2, 230, 125, 22, 56, 51, 7, 3, 1, 161, 2, 230, 125, 22, 56, 51, 7, 6, 1, - 255, 55, 2, 246, 171, 46, 7, 3, 1, 255, 55, 2, 246, 171, 46, 7, 6, 1, - 255, 55, 2, 56, 51, 7, 3, 1, 255, 55, 2, 56, 51, 7, 6, 1, 130, 2, 56, 51, - 7, 3, 1, 130, 2, 56, 51, 7, 6, 1, 130, 2, 246, 171, 46, 7, 3, 1, 130, 2, - 246, 171, 46, 7, 6, 1, 130, 2, 230, 125, 22, 155, 7, 3, 1, 130, 2, 230, - 125, 22, 155, 7, 6, 1, 130, 2, 230, 125, 22, 237, 36, 7, 3, 1, 130, 2, - 230, 125, 22, 237, 36, 7, 6, 1, 130, 2, 230, 125, 22, 246, 171, 46, 7, 3, - 1, 130, 2, 230, 125, 22, 246, 171, 46, 7, 6, 1, 130, 2, 230, 125, 22, - 205, 7, 3, 1, 130, 2, 230, 125, 22, 205, 7, 6, 1, 130, 2, 230, 125, 22, - 56, 51, 7, 3, 1, 130, 2, 230, 125, 22, 56, 51, 7, 6, 1, 130, 2, 246, 188, - 22, 155, 7, 3, 1, 130, 2, 246, 188, 22, 155, 7, 6, 1, 130, 2, 246, 188, - 22, 237, 36, 7, 3, 1, 130, 2, 246, 188, 22, 237, 36, 7, 6, 1, 130, 2, - 246, 188, 22, 246, 171, 46, 7, 3, 1, 130, 2, 246, 188, 22, 246, 171, 46, - 7, 6, 1, 130, 2, 246, 188, 22, 205, 7, 3, 1, 130, 2, 246, 188, 22, 205, - 7, 6, 1, 130, 2, 246, 188, 22, 56, 51, 7, 3, 1, 130, 2, 246, 188, 22, 56, - 51, 7, 6, 1, 97, 2, 56, 51, 7, 3, 1, 97, 2, 56, 51, 7, 6, 1, 97, 2, 246, - 171, 46, 7, 3, 1, 97, 2, 246, 171, 46, 7, 6, 1, 97, 2, 246, 188, 22, 155, - 7, 3, 1, 97, 2, 246, 188, 22, 155, 7, 6, 1, 97, 2, 246, 188, 22, 237, 36, - 7, 3, 1, 97, 2, 246, 188, 22, 237, 36, 7, 6, 1, 97, 2, 246, 188, 22, 246, - 171, 46, 7, 3, 1, 97, 2, 246, 188, 22, 246, 171, 46, 7, 6, 1, 97, 2, 246, - 188, 22, 205, 7, 3, 1, 97, 2, 246, 188, 22, 205, 7, 6, 1, 97, 2, 246, - 188, 22, 56, 51, 7, 3, 1, 97, 2, 246, 188, 22, 56, 51, 7, 6, 1, 255, 64, - 2, 237, 36, 7, 3, 1, 255, 64, 2, 237, 36, 7, 6, 1, 255, 64, 2, 56, 51, 7, - 3, 1, 255, 64, 2, 56, 51, 7, 6, 1, 255, 64, 2, 246, 171, 46, 7, 3, 1, - 255, 64, 2, 246, 171, 46, 7, 6, 1, 255, 64, 2, 205, 7, 3, 1, 255, 64, 2, - 205, 7, 6, 1, 228, 192, 252, 245, 7, 3, 1, 228, 192, 252, 245, 7, 6, 1, - 228, 192, 196, 7, 3, 1, 228, 192, 196, 7, 6, 1, 255, 64, 2, 240, 202, 7, - 3, 1, 255, 64, 2, 240, 202, 19, 3, 1, 240, 120, 2, 237, 77, 19, 3, 1, - 240, 120, 2, 237, 74, 19, 3, 1, 240, 120, 2, 186, 22, 237, 39, 19, 3, 1, - 240, 120, 2, 172, 22, 237, 39, 19, 3, 1, 240, 120, 2, 186, 22, 240, 124, - 19, 3, 1, 240, 120, 2, 172, 22, 240, 124, 19, 3, 1, 240, 120, 2, 186, 22, - 228, 179, 19, 3, 1, 240, 120, 2, 172, 22, 228, 179, 19, 6, 1, 240, 120, - 2, 237, 77, 19, 6, 1, 240, 120, 2, 237, 74, 19, 6, 1, 240, 120, 2, 186, - 22, 237, 39, 19, 6, 1, 240, 120, 2, 172, 22, 237, 39, 19, 6, 1, 240, 120, - 2, 186, 22, 240, 124, 19, 6, 1, 240, 120, 2, 172, 22, 240, 124, 19, 6, 1, - 240, 120, 2, 186, 22, 228, 179, 19, 6, 1, 240, 120, 2, 172, 22, 228, 179, - 19, 3, 1, 235, 28, 2, 237, 77, 19, 3, 1, 235, 28, 2, 237, 74, 19, 3, 1, - 235, 28, 2, 186, 22, 237, 39, 19, 3, 1, 235, 28, 2, 172, 22, 237, 39, 19, - 3, 1, 235, 28, 2, 186, 22, 240, 124, 19, 3, 1, 235, 28, 2, 172, 22, 240, - 124, 19, 6, 1, 235, 28, 2, 237, 77, 19, 6, 1, 235, 28, 2, 237, 74, 19, 6, - 1, 235, 28, 2, 186, 22, 237, 39, 19, 6, 1, 235, 28, 2, 172, 22, 237, 39, - 19, 6, 1, 235, 28, 2, 186, 22, 240, 124, 19, 6, 1, 235, 28, 2, 172, 22, - 240, 124, 19, 3, 1, 252, 206, 2, 237, 77, 19, 3, 1, 252, 206, 2, 237, 74, - 19, 3, 1, 252, 206, 2, 186, 22, 237, 39, 19, 3, 1, 252, 206, 2, 172, 22, - 237, 39, 19, 3, 1, 252, 206, 2, 186, 22, 240, 124, 19, 3, 1, 252, 206, 2, - 172, 22, 240, 124, 19, 3, 1, 252, 206, 2, 186, 22, 228, 179, 19, 3, 1, - 252, 206, 2, 172, 22, 228, 179, 19, 6, 1, 252, 206, 2, 237, 77, 19, 6, 1, - 252, 206, 2, 237, 74, 19, 6, 1, 252, 206, 2, 186, 22, 237, 39, 19, 6, 1, - 252, 206, 2, 172, 22, 237, 39, 19, 6, 1, 252, 206, 2, 186, 22, 240, 124, - 19, 6, 1, 252, 206, 2, 172, 22, 240, 124, 19, 6, 1, 252, 206, 2, 186, 22, - 228, 179, 19, 6, 1, 252, 206, 2, 172, 22, 228, 179, 19, 3, 1, 246, 168, - 2, 237, 77, 19, 3, 1, 246, 168, 2, 237, 74, 19, 3, 1, 246, 168, 2, 186, - 22, 237, 39, 19, 3, 1, 246, 168, 2, 172, 22, 237, 39, 19, 3, 1, 246, 168, - 2, 186, 22, 240, 124, 19, 3, 1, 246, 168, 2, 172, 22, 240, 124, 19, 3, 1, - 246, 168, 2, 186, 22, 228, 179, 19, 3, 1, 246, 168, 2, 172, 22, 228, 179, - 19, 6, 1, 246, 168, 2, 237, 77, 19, 6, 1, 246, 168, 2, 237, 74, 19, 6, 1, - 246, 168, 2, 186, 22, 237, 39, 19, 6, 1, 246, 168, 2, 172, 22, 237, 39, - 19, 6, 1, 246, 168, 2, 186, 22, 240, 124, 19, 6, 1, 246, 168, 2, 172, 22, - 240, 124, 19, 6, 1, 246, 168, 2, 186, 22, 228, 179, 19, 6, 1, 246, 168, - 2, 172, 22, 228, 179, 19, 3, 1, 235, 35, 2, 237, 77, 19, 3, 1, 235, 35, - 2, 237, 74, 19, 3, 1, 235, 35, 2, 186, 22, 237, 39, 19, 3, 1, 235, 35, 2, - 172, 22, 237, 39, 19, 3, 1, 235, 35, 2, 186, 22, 240, 124, 19, 3, 1, 235, - 35, 2, 172, 22, 240, 124, 19, 6, 1, 235, 35, 2, 237, 77, 19, 6, 1, 235, - 35, 2, 237, 74, 19, 6, 1, 235, 35, 2, 186, 22, 237, 39, 19, 6, 1, 235, - 35, 2, 172, 22, 237, 39, 19, 6, 1, 235, 35, 2, 186, 22, 240, 124, 19, 6, - 1, 235, 35, 2, 172, 22, 240, 124, 19, 3, 1, 235, 23, 2, 237, 77, 19, 3, - 1, 235, 23, 2, 237, 74, 19, 3, 1, 235, 23, 2, 186, 22, 237, 39, 19, 3, 1, - 235, 23, 2, 172, 22, 237, 39, 19, 3, 1, 235, 23, 2, 186, 22, 240, 124, - 19, 3, 1, 235, 23, 2, 172, 22, 240, 124, 19, 3, 1, 235, 23, 2, 186, 22, - 228, 179, 19, 3, 1, 235, 23, 2, 172, 22, 228, 179, 19, 6, 1, 235, 23, 2, - 237, 74, 19, 6, 1, 235, 23, 2, 172, 22, 237, 39, 19, 6, 1, 235, 23, 2, - 172, 22, 240, 124, 19, 6, 1, 235, 23, 2, 172, 22, 228, 179, 19, 3, 1, - 240, 123, 2, 237, 77, 19, 3, 1, 240, 123, 2, 237, 74, 19, 3, 1, 240, 123, - 2, 186, 22, 237, 39, 19, 3, 1, 240, 123, 2, 172, 22, 237, 39, 19, 3, 1, - 240, 123, 2, 186, 22, 240, 124, 19, 3, 1, 240, 123, 2, 172, 22, 240, 124, - 19, 3, 1, 240, 123, 2, 186, 22, 228, 179, 19, 3, 1, 240, 123, 2, 172, 22, - 228, 179, 19, 6, 1, 240, 123, 2, 237, 77, 19, 6, 1, 240, 123, 2, 237, 74, - 19, 6, 1, 240, 123, 2, 186, 22, 237, 39, 19, 6, 1, 240, 123, 2, 172, 22, - 237, 39, 19, 6, 1, 240, 123, 2, 186, 22, 240, 124, 19, 6, 1, 240, 123, 2, - 172, 22, 240, 124, 19, 6, 1, 240, 123, 2, 186, 22, 228, 179, 19, 6, 1, - 240, 123, 2, 172, 22, 228, 179, 19, 3, 1, 240, 120, 2, 237, 39, 19, 3, 1, - 240, 120, 2, 240, 124, 19, 3, 1, 235, 28, 2, 237, 39, 19, 3, 1, 235, 28, - 2, 240, 124, 19, 3, 1, 252, 206, 2, 237, 39, 19, 3, 1, 252, 206, 2, 240, - 124, 19, 3, 1, 246, 168, 2, 237, 39, 19, 3, 1, 246, 168, 2, 240, 124, 19, - 3, 1, 235, 35, 2, 237, 39, 19, 3, 1, 235, 35, 2, 240, 124, 19, 3, 1, 235, - 23, 2, 237, 39, 19, 3, 1, 235, 23, 2, 240, 124, 19, 3, 1, 240, 123, 2, - 237, 39, 19, 3, 1, 240, 123, 2, 240, 124, 19, 3, 1, 240, 120, 2, 186, 22, - 227, 132, 19, 3, 1, 240, 120, 2, 172, 22, 227, 132, 19, 3, 1, 240, 120, - 2, 186, 22, 240, 165, 22, 227, 132, 19, 3, 1, 240, 120, 2, 172, 22, 240, - 165, 22, 227, 132, 19, 3, 1, 240, 120, 2, 186, 22, 246, 210, 22, 227, - 132, 19, 3, 1, 240, 120, 2, 172, 22, 246, 210, 22, 227, 132, 19, 3, 1, - 240, 120, 2, 186, 22, 229, 167, 22, 227, 132, 19, 3, 1, 240, 120, 2, 172, - 22, 229, 167, 22, 227, 132, 19, 6, 1, 240, 120, 2, 186, 22, 225, 104, 19, - 6, 1, 240, 120, 2, 172, 22, 225, 104, 19, 6, 1, 240, 120, 2, 186, 22, - 240, 165, 22, 225, 104, 19, 6, 1, 240, 120, 2, 172, 22, 240, 165, 22, - 225, 104, 19, 6, 1, 240, 120, 2, 186, 22, 246, 210, 22, 225, 104, 19, 6, - 1, 240, 120, 2, 172, 22, 246, 210, 22, 225, 104, 19, 6, 1, 240, 120, 2, - 186, 22, 229, 167, 22, 225, 104, 19, 6, 1, 240, 120, 2, 172, 22, 229, - 167, 22, 225, 104, 19, 3, 1, 252, 206, 2, 186, 22, 227, 132, 19, 3, 1, - 252, 206, 2, 172, 22, 227, 132, 19, 3, 1, 252, 206, 2, 186, 22, 240, 165, - 22, 227, 132, 19, 3, 1, 252, 206, 2, 172, 22, 240, 165, 22, 227, 132, 19, - 3, 1, 252, 206, 2, 186, 22, 246, 210, 22, 227, 132, 19, 3, 1, 252, 206, - 2, 172, 22, 246, 210, 22, 227, 132, 19, 3, 1, 252, 206, 2, 186, 22, 229, - 167, 22, 227, 132, 19, 3, 1, 252, 206, 2, 172, 22, 229, 167, 22, 227, - 132, 19, 6, 1, 252, 206, 2, 186, 22, 225, 104, 19, 6, 1, 252, 206, 2, - 172, 22, 225, 104, 19, 6, 1, 252, 206, 2, 186, 22, 240, 165, 22, 225, - 104, 19, 6, 1, 252, 206, 2, 172, 22, 240, 165, 22, 225, 104, 19, 6, 1, - 252, 206, 2, 186, 22, 246, 210, 22, 225, 104, 19, 6, 1, 252, 206, 2, 172, - 22, 246, 210, 22, 225, 104, 19, 6, 1, 252, 206, 2, 186, 22, 229, 167, 22, - 225, 104, 19, 6, 1, 252, 206, 2, 172, 22, 229, 167, 22, 225, 104, 19, 3, - 1, 240, 123, 2, 186, 22, 227, 132, 19, 3, 1, 240, 123, 2, 172, 22, 227, - 132, 19, 3, 1, 240, 123, 2, 186, 22, 240, 165, 22, 227, 132, 19, 3, 1, - 240, 123, 2, 172, 22, 240, 165, 22, 227, 132, 19, 3, 1, 240, 123, 2, 186, - 22, 246, 210, 22, 227, 132, 19, 3, 1, 240, 123, 2, 172, 22, 246, 210, 22, - 227, 132, 19, 3, 1, 240, 123, 2, 186, 22, 229, 167, 22, 227, 132, 19, 3, - 1, 240, 123, 2, 172, 22, 229, 167, 22, 227, 132, 19, 6, 1, 240, 123, 2, - 186, 22, 225, 104, 19, 6, 1, 240, 123, 2, 172, 22, 225, 104, 19, 6, 1, - 240, 123, 2, 186, 22, 240, 165, 22, 225, 104, 19, 6, 1, 240, 123, 2, 172, - 22, 240, 165, 22, 225, 104, 19, 6, 1, 240, 123, 2, 186, 22, 246, 210, 22, - 225, 104, 19, 6, 1, 240, 123, 2, 172, 22, 246, 210, 22, 225, 104, 19, 6, - 1, 240, 123, 2, 186, 22, 229, 167, 22, 225, 104, 19, 6, 1, 240, 123, 2, - 172, 22, 229, 167, 22, 225, 104, 19, 3, 1, 240, 120, 2, 235, 82, 19, 3, - 1, 240, 120, 2, 235, 16, 19, 3, 1, 240, 120, 2, 240, 165, 22, 227, 132, - 19, 3, 1, 240, 120, 2, 227, 132, 19, 3, 1, 240, 120, 2, 246, 210, 22, - 227, 132, 19, 3, 1, 240, 120, 2, 228, 179, 19, 3, 1, 240, 120, 2, 229, - 167, 22, 227, 132, 19, 6, 1, 240, 120, 2, 235, 82, 19, 6, 1, 240, 120, 2, - 235, 16, 19, 6, 1, 240, 120, 2, 237, 39, 19, 6, 1, 240, 120, 2, 240, 124, - 19, 6, 1, 240, 120, 2, 225, 104, 19, 233, 170, 19, 225, 104, 19, 237, 77, - 19, 228, 179, 19, 231, 207, 22, 228, 179, 19, 3, 1, 252, 206, 2, 240, - 165, 22, 227, 132, 19, 3, 1, 252, 206, 2, 227, 132, 19, 3, 1, 252, 206, - 2, 246, 210, 22, 227, 132, 19, 3, 1, 252, 206, 2, 228, 179, 19, 3, 1, - 252, 206, 2, 229, 167, 22, 227, 132, 19, 6, 1, 235, 28, 2, 237, 39, 19, - 6, 1, 235, 28, 2, 240, 124, 19, 6, 1, 252, 206, 2, 237, 39, 19, 6, 1, - 252, 206, 2, 240, 124, 19, 6, 1, 252, 206, 2, 225, 104, 19, 186, 22, 237, - 39, 19, 186, 22, 240, 124, 19, 186, 22, 228, 179, 19, 3, 1, 246, 168, 2, - 235, 82, 19, 3, 1, 246, 168, 2, 235, 16, 19, 3, 1, 246, 168, 2, 231, 207, - 22, 237, 39, 19, 3, 1, 246, 168, 2, 231, 207, 22, 240, 124, 19, 3, 1, - 246, 168, 2, 228, 179, 19, 3, 1, 246, 168, 2, 231, 207, 22, 228, 179, 19, - 6, 1, 246, 168, 2, 235, 82, 19, 6, 1, 246, 168, 2, 235, 16, 19, 6, 1, - 246, 168, 2, 237, 39, 19, 6, 1, 246, 168, 2, 240, 124, 19, 172, 22, 237, - 39, 19, 172, 22, 240, 124, 19, 172, 22, 228, 179, 19, 3, 1, 235, 23, 2, - 235, 82, 19, 3, 1, 235, 23, 2, 235, 16, 19, 3, 1, 235, 23, 2, 231, 207, - 22, 237, 39, 19, 3, 1, 235, 23, 2, 231, 207, 22, 240, 124, 19, 3, 1, 253, - 70, 2, 237, 77, 19, 3, 1, 253, 70, 2, 237, 74, 19, 3, 1, 235, 23, 2, 228, - 179, 19, 3, 1, 235, 23, 2, 231, 207, 22, 228, 179, 19, 6, 1, 235, 23, 2, - 235, 82, 19, 6, 1, 235, 23, 2, 235, 16, 19, 6, 1, 235, 23, 2, 237, 39, - 19, 6, 1, 235, 23, 2, 240, 124, 19, 6, 1, 253, 70, 2, 237, 74, 19, 231, - 207, 22, 237, 39, 19, 231, 207, 22, 240, 124, 19, 237, 39, 19, 3, 1, 240, - 123, 2, 240, 165, 22, 227, 132, 19, 3, 1, 240, 123, 2, 227, 132, 19, 3, - 1, 240, 123, 2, 246, 210, 22, 227, 132, 19, 3, 1, 240, 123, 2, 228, 179, - 19, 3, 1, 240, 123, 2, 229, 167, 22, 227, 132, 19, 6, 1, 235, 35, 2, 237, - 39, 19, 6, 1, 235, 35, 2, 240, 124, 19, 6, 1, 240, 123, 2, 237, 39, 19, - 6, 1, 240, 123, 2, 240, 124, 19, 6, 1, 240, 123, 2, 225, 104, 19, 240, - 124, 19, 237, 74, 254, 199, 240, 232, 254, 213, 240, 232, 254, 199, 237, - 69, 254, 213, 237, 69, 229, 154, 237, 69, 230, 62, 237, 69, 231, 144, - 237, 69, 237, 248, 237, 69, 229, 161, 237, 69, 252, 18, 237, 69, 250, 60, - 237, 69, 247, 27, 241, 23, 237, 69, 247, 27, 241, 23, 230, 82, 247, 27, - 241, 23, 235, 124, 227, 195, 76, 227, 198, 76, 235, 69, 229, 43, 235, 69, - 237, 248, 240, 151, 254, 199, 240, 151, 254, 213, 240, 151, 169, 125, 47, - 61, 240, 138, 47, 184, 240, 138, 42, 237, 62, 231, 199, 76, 41, 237, 62, - 231, 199, 76, 237, 62, 241, 185, 231, 199, 76, 237, 62, 225, 109, 231, - 199, 76, 42, 47, 231, 199, 76, 41, 47, 231, 199, 76, 47, 241, 185, 231, - 199, 76, 47, 225, 109, 231, 199, 76, 235, 160, 47, 235, 160, 235, 45, - 230, 160, 235, 45, 168, 56, 235, 128, 135, 56, 235, 128, 169, 231, 218, - 230, 67, 237, 209, 246, 167, 230, 131, 231, 242, 230, 131, 227, 195, 230, - 182, 227, 198, 230, 182, 254, 133, 229, 249, 230, 61, 227, 195, 232, 30, - 227, 198, 232, 30, 239, 125, 233, 173, 237, 69, 253, 129, 241, 194, 53, - 253, 129, 253, 53, 233, 117, 53, 237, 114, 47, 237, 114, 237, 49, 237, - 114, 200, 237, 114, 200, 47, 237, 114, 200, 237, 49, 237, 114, 237, 197, - 237, 62, 227, 185, 240, 117, 231, 199, 76, 237, 62, 227, 133, 240, 117, - 231, 199, 76, 233, 11, 76, 47, 229, 165, 76, 228, 213, 231, 223, 232, 63, - 116, 247, 57, 240, 206, 232, 28, 237, 209, 232, 81, 238, 10, 235, 45, - 233, 76, 237, 84, 42, 37, 235, 22, 2, 237, 190, 41, 37, 235, 22, 2, 237, - 190, 47, 233, 82, 76, 233, 82, 229, 165, 76, 229, 165, 233, 82, 76, 234, - 249, 5, 253, 125, 200, 235, 201, 53, 86, 117, 235, 45, 86, 81, 235, 45, - 184, 231, 198, 200, 230, 140, 243, 15, 253, 19, 135, 232, 80, 235, 245, - 230, 122, 230, 145, 240, 172, 53, 245, 229, 240, 151, 233, 70, 232, 63, - 238, 221, 229, 161, 76, 152, 56, 228, 182, 231, 212, 237, 114, 246, 160, - 56, 228, 182, 246, 159, 56, 228, 182, 135, 56, 228, 182, 246, 160, 56, - 76, 237, 50, 237, 85, 232, 57, 61, 246, 160, 240, 169, 237, 60, 12, 237, - 69, 247, 8, 235, 124, 234, 109, 228, 225, 231, 253, 237, 166, 231, 253, - 230, 131, 231, 253, 240, 180, 235, 178, 232, 54, 232, 47, 233, 182, 232, - 54, 232, 47, 235, 178, 10, 211, 233, 236, 233, 182, 10, 211, 233, 236, - 234, 165, 21, 235, 209, 236, 169, 21, 235, 209, 229, 163, 240, 126, 229, - 163, 7, 3, 1, 74, 229, 163, 158, 229, 163, 173, 229, 163, 183, 229, 163, - 194, 229, 163, 187, 229, 163, 192, 229, 163, 79, 53, 229, 163, 237, 124, - 229, 163, 237, 51, 53, 229, 163, 42, 228, 180, 229, 163, 41, 228, 180, - 229, 163, 7, 3, 1, 199, 231, 195, 240, 126, 231, 195, 118, 231, 195, 113, - 231, 195, 166, 231, 195, 158, 231, 195, 173, 231, 195, 183, 231, 195, - 194, 231, 195, 187, 231, 195, 192, 231, 195, 79, 53, 231, 195, 237, 124, - 231, 195, 237, 51, 53, 231, 195, 42, 228, 180, 231, 195, 41, 228, 180, 7, - 231, 195, 3, 1, 57, 7, 231, 195, 3, 1, 72, 7, 231, 195, 3, 1, 73, 7, 231, - 195, 3, 1, 254, 184, 7, 231, 195, 3, 1, 237, 144, 227, 239, 53, 240, 194, - 53, 234, 40, 53, 238, 226, 243, 109, 53, 250, 224, 53, 251, 15, 53, 244, - 163, 53, 239, 193, 53, 240, 234, 53, 254, 16, 53, 139, 239, 246, 53, 249, - 203, 53, 249, 235, 53, 254, 82, 53, 240, 53, 53, 235, 167, 53, 238, 237, - 245, 64, 53, 251, 106, 53, 236, 98, 53, 236, 0, 53, 236, 106, 53, 249, - 151, 53, 36, 42, 235, 14, 46, 36, 41, 235, 14, 46, 36, 182, 61, 246, 167, - 233, 87, 36, 240, 125, 61, 246, 167, 233, 87, 36, 227, 184, 67, 46, 36, - 231, 209, 67, 46, 36, 42, 67, 46, 36, 41, 67, 46, 36, 246, 174, 233, 87, - 36, 231, 209, 246, 174, 233, 87, 36, 227, 184, 246, 174, 233, 87, 36, - 152, 197, 46, 36, 246, 160, 197, 46, 36, 231, 222, 235, 20, 36, 231, 222, - 235, 27, 36, 231, 222, 233, 90, 36, 231, 222, 237, 40, 230, 151, 36, 42, - 41, 67, 46, 36, 231, 222, 236, 210, 36, 231, 222, 236, 121, 36, 231, 222, - 240, 68, 233, 78, 231, 193, 36, 235, 37, 235, 54, 233, 87, 36, 47, 61, - 195, 233, 87, 36, 235, 247, 98, 36, 237, 49, 233, 59, 36, 246, 240, 237, - 174, 46, 36, 117, 67, 233, 87, 36, 182, 47, 235, 54, 233, 87, 36, 81, - 235, 14, 2, 171, 230, 134, 36, 117, 235, 14, 2, 171, 230, 134, 36, 42, - 67, 51, 36, 41, 67, 51, 36, 233, 145, 46, 235, 144, 253, 16, 232, 65, - 180, 252, 230, 234, 235, 159, 6, 254, 194, 237, 177, 234, 29, 237, 95, - 246, 167, 98, 249, 144, 253, 16, 249, 141, 252, 53, 243, 103, 232, 17, - 234, 217, 237, 177, 230, 59, 95, 3, 214, 95, 6, 212, 228, 187, 6, 212, - 159, 6, 212, 238, 35, 232, 17, 238, 35, 234, 34, 107, 135, 252, 223, 95, - 6, 74, 228, 187, 6, 74, 95, 6, 149, 95, 3, 149, 255, 58, 45, 252, 219, - 98, 159, 6, 199, 239, 159, 53, 240, 181, 233, 9, 230, 240, 95, 6, 254, - 187, 159, 6, 254, 187, 159, 6, 254, 196, 95, 6, 146, 228, 187, 6, 146, - 159, 6, 146, 229, 53, 245, 236, 232, 43, 236, 217, 76, 232, 11, 53, 246, - 4, 165, 53, 233, 61, 159, 6, 254, 193, 245, 57, 53, 253, 254, 53, 233, - 70, 253, 254, 53, 228, 187, 6, 254, 193, 209, 19, 3, 1, 240, 146, 239, - 62, 53, 234, 2, 53, 95, 6, 254, 185, 228, 187, 6, 254, 194, 232, 180, 98, - 95, 3, 72, 95, 6, 72, 95, 6, 254, 191, 209, 6, 254, 191, 95, 6, 185, 95, - 3, 73, 92, 98, 253, 171, 98, 241, 143, 98, 241, 116, 98, 230, 71, 235, - 214, 235, 97, 6, 254, 196, 232, 183, 53, 159, 3, 252, 223, 159, 3, 237, - 61, 159, 6, 237, 61, 159, 6, 252, 223, 159, 240, 154, 230, 196, 209, 30, - 6, 214, 209, 30, 6, 149, 200, 30, 6, 149, 209, 30, 6, 254, 190, 159, 27, - 6, 222, 222, 159, 27, 3, 222, 222, 159, 27, 3, 72, 159, 27, 3, 74, 159, - 27, 3, 254, 192, 234, 200, 240, 138, 209, 230, 142, 253, 129, 53, 227, - 216, 209, 3, 254, 191, 14, 32, 233, 16, 235, 214, 237, 80, 233, 76, 168, - 240, 37, 237, 80, 233, 76, 135, 237, 4, 237, 80, 233, 76, 168, 238, 217, - 237, 80, 233, 76, 135, 235, 122, 237, 80, 233, 76, 152, 235, 122, 237, - 80, 233, 76, 246, 160, 235, 122, 237, 80, 233, 76, 168, 238, 61, 237, 80, - 233, 76, 246, 159, 236, 232, 237, 80, 233, 76, 168, 236, 63, 237, 80, - 233, 76, 152, 233, 163, 237, 80, 233, 76, 246, 159, 233, 163, 237, 80, - 233, 76, 240, 155, 233, 163, 233, 76, 231, 227, 118, 240, 118, 207, 118, - 240, 118, 207, 113, 240, 118, 207, 166, 240, 118, 207, 158, 240, 118, - 207, 173, 240, 118, 207, 183, 240, 118, 207, 194, 240, 118, 207, 187, - 240, 118, 207, 192, 240, 118, 207, 246, 179, 240, 118, 207, 235, 68, 240, - 118, 207, 235, 72, 240, 118, 207, 237, 100, 240, 118, 207, 168, 233, 75, - 240, 118, 207, 246, 159, 233, 75, 240, 118, 207, 168, 231, 196, 3, 240, - 118, 207, 118, 3, 240, 118, 207, 113, 3, 240, 118, 207, 166, 3, 240, 118, - 207, 158, 3, 240, 118, 207, 173, 3, 240, 118, 207, 183, 3, 240, 118, 207, - 194, 3, 240, 118, 207, 187, 3, 240, 118, 207, 192, 3, 240, 118, 207, 246, - 179, 3, 240, 118, 207, 235, 68, 3, 240, 118, 207, 235, 72, 3, 240, 118, - 207, 237, 100, 3, 240, 118, 207, 168, 233, 75, 3, 240, 118, 207, 246, - 159, 233, 75, 3, 240, 118, 207, 168, 231, 196, 240, 118, 207, 168, 233, - 117, 255, 62, 222, 222, 240, 118, 207, 246, 159, 231, 196, 240, 118, 207, - 253, 53, 231, 196, 240, 118, 207, 200, 168, 233, 75, 7, 3, 1, 200, 254, - 194, 240, 118, 207, 253, 17, 250, 209, 15, 240, 118, 207, 240, 189, 243, - 91, 15, 240, 118, 207, 240, 189, 231, 196, 240, 118, 207, 168, 235, 56, - 231, 196, 117, 58, 235, 18, 58, 81, 58, 231, 191, 58, 42, 41, 58, 99, - 103, 58, 240, 134, 246, 184, 58, 240, 134, 246, 170, 58, 240, 141, 246, - 170, 58, 240, 141, 246, 184, 58, 117, 67, 2, 82, 81, 67, 2, 82, 117, 247, - 23, 58, 81, 247, 23, 58, 117, 135, 237, 183, 58, 235, 18, 135, 237, 183, - 58, 81, 135, 237, 183, 58, 231, 191, 135, 237, 183, 58, 117, 67, 2, 240, - 133, 81, 67, 2, 240, 133, 117, 67, 246, 172, 125, 235, 18, 67, 246, 172, - 125, 81, 67, 246, 172, 125, 231, 191, 67, 246, 172, 125, 99, 103, 67, 2, - 242, 175, 117, 67, 2, 88, 81, 67, 2, 88, 117, 67, 2, 240, 202, 81, 67, 2, - 240, 202, 42, 41, 247, 23, 58, 42, 41, 67, 2, 82, 231, 191, 237, 170, 58, - 235, 18, 67, 2, 253, 93, 230, 143, 235, 18, 67, 2, 253, 93, 229, 177, - 231, 191, 67, 2, 253, 93, 230, 143, 231, 191, 67, 2, 253, 93, 229, 177, - 81, 67, 2, 237, 79, 230, 134, 231, 191, 67, 2, 237, 79, 230, 143, 227, - 184, 252, 228, 230, 195, 58, 231, 209, 252, 228, 230, 195, 58, 240, 134, - 246, 184, 67, 180, 182, 125, 117, 67, 180, 252, 219, 107, 81, 67, 180, - 125, 227, 184, 246, 157, 237, 40, 58, 231, 209, 246, 157, 237, 40, 58, - 117, 235, 14, 2, 171, 233, 139, 117, 235, 14, 2, 171, 230, 134, 235, 18, - 235, 14, 2, 171, 229, 177, 235, 18, 235, 14, 2, 171, 230, 143, 81, 235, - 14, 2, 171, 233, 139, 81, 235, 14, 2, 171, 230, 134, 231, 191, 235, 14, - 2, 171, 229, 177, 231, 191, 235, 14, 2, 171, 230, 143, 81, 67, 107, 117, - 58, 235, 18, 67, 117, 106, 231, 191, 58, 117, 67, 107, 81, 58, 117, 237, - 186, 235, 73, 235, 18, 237, 186, 235, 73, 81, 237, 186, 235, 73, 231, - 191, 237, 186, 235, 73, 117, 235, 14, 107, 81, 233, 105, 81, 235, 14, - 107, 117, 233, 105, 117, 47, 67, 2, 82, 42, 41, 47, 67, 2, 82, 81, 47, - 67, 2, 82, 117, 47, 58, 235, 18, 47, 58, 81, 47, 58, 231, 191, 47, 58, - 42, 41, 47, 58, 99, 103, 47, 58, 240, 134, 246, 184, 47, 58, 240, 134, - 246, 170, 47, 58, 240, 141, 246, 170, 47, 58, 240, 141, 246, 184, 47, 58, - 117, 237, 49, 58, 81, 237, 49, 58, 117, 233, 156, 58, 81, 233, 156, 58, - 235, 18, 67, 2, 47, 82, 231, 191, 67, 2, 47, 82, 117, 237, 110, 58, 235, - 18, 237, 110, 58, 81, 237, 110, 58, 231, 191, 237, 110, 58, 117, 67, 180, - 125, 81, 67, 180, 125, 117, 63, 58, 235, 18, 63, 58, 81, 63, 58, 231, - 191, 63, 58, 235, 18, 63, 67, 246, 172, 125, 235, 18, 63, 67, 254, 223, - 232, 33, 235, 18, 63, 67, 254, 223, 233, 226, 2, 169, 125, 235, 18, 63, - 67, 254, 223, 233, 226, 2, 61, 125, 235, 18, 63, 47, 58, 235, 18, 63, 47, - 67, 254, 223, 232, 33, 81, 63, 67, 246, 172, 246, 52, 240, 134, 246, 184, - 67, 180, 235, 40, 240, 141, 246, 170, 67, 180, 235, 40, 99, 103, 63, 58, - 41, 67, 2, 3, 235, 20, 231, 191, 67, 117, 106, 235, 18, 58, 152, 81, 235, - 73, 117, 67, 2, 61, 82, 81, 67, 2, 61, 82, 42, 41, 67, 2, 61, 82, 117, - 67, 2, 47, 61, 82, 81, 67, 2, 47, 61, 82, 42, 41, 67, 2, 47, 61, 82, 117, - 229, 186, 58, 81, 229, 186, 58, 42, 41, 229, 186, 58, 32, 247, 241, 229, - 238, 235, 79, 227, 188, 242, 1, 236, 66, 242, 1, 246, 218, 190, 238, 210, - 240, 195, 248, 155, 231, 84, 237, 138, 235, 44, 253, 16, 190, 254, 216, - 235, 44, 253, 16, 3, 235, 44, 253, 16, 233, 111, 254, 203, 235, 130, 246, - 218, 190, 235, 114, 254, 203, 235, 130, 3, 233, 111, 254, 203, 235, 130, - 252, 255, 106, 239, 204, 240, 154, 233, 101, 240, 154, 230, 178, 240, - 154, 230, 196, 240, 172, 53, 227, 254, 53, 56, 240, 180, 233, 130, 237, - 84, 253, 133, 237, 124, 233, 145, 231, 192, 246, 174, 231, 192, 238, 134, - 231, 192, 37, 240, 233, 248, 11, 240, 233, 237, 182, 240, 233, 229, 54, - 96, 231, 252, 41, 237, 98, 237, 98, 233, 99, 237, 98, 232, 7, 237, 98, - 234, 57, 246, 218, 190, 235, 164, 233, 132, 96, 190, 233, 132, 96, 235, - 26, 246, 230, 235, 26, 253, 81, 227, 186, 237, 117, 231, 208, 47, 231, - 208, 237, 49, 231, 208, 235, 115, 231, 208, 236, 249, 231, 208, 240, 79, - 231, 208, 231, 209, 231, 208, 231, 209, 235, 115, 231, 208, 227, 184, - 235, 115, 231, 208, 231, 177, 234, 16, 239, 216, 229, 210, 56, 237, 124, - 236, 65, 232, 199, 229, 210, 230, 66, 240, 128, 231, 192, 200, 205, 233, - 70, 250, 211, 193, 251, 225, 241, 22, 240, 87, 233, 101, 190, 205, 240, - 172, 205, 227, 142, 105, 96, 190, 227, 142, 105, 96, 227, 187, 105, 96, - 227, 187, 253, 85, 190, 233, 183, 105, 96, 235, 58, 227, 187, 253, 43, - 233, 183, 105, 96, 237, 78, 105, 96, 190, 237, 78, 105, 96, 237, 78, 105, - 145, 105, 96, 237, 49, 205, 253, 167, 105, 96, 230, 130, 96, 227, 204, - 230, 130, 96, 230, 245, 233, 187, 230, 225, 252, 230, 239, 85, 227, 204, - 105, 96, 227, 187, 105, 180, 145, 252, 230, 240, 190, 253, 16, 240, 190, - 106, 145, 227, 187, 105, 96, 240, 194, 235, 91, 237, 51, 237, 66, 246, - 174, 254, 198, 105, 96, 246, 174, 105, 96, 229, 242, 96, 231, 66, 230, - 57, 96, 247, 53, 235, 91, 241, 36, 105, 96, 105, 180, 254, 205, 229, 245, - 233, 99, 253, 210, 231, 129, 105, 96, 190, 105, 96, 231, 239, 96, 190, - 231, 239, 96, 234, 234, 230, 130, 96, 231, 190, 145, 105, 96, 228, 175, - 145, 105, 96, 231, 190, 107, 105, 96, 228, 175, 107, 105, 96, 231, 190, - 253, 85, 190, 105, 96, 228, 175, 253, 85, 190, 105, 96, 247, 89, 230, - 128, 247, 89, 227, 183, 233, 187, 190, 230, 130, 96, 190, 230, 128, 190, - 227, 183, 235, 58, 231, 190, 253, 43, 105, 96, 235, 58, 228, 175, 253, - 43, 105, 96, 231, 190, 145, 230, 130, 96, 228, 175, 145, 230, 130, 96, - 235, 58, 231, 190, 253, 43, 230, 130, 96, 235, 58, 228, 175, 253, 43, - 230, 130, 96, 231, 190, 145, 227, 183, 228, 175, 145, 230, 128, 235, 58, - 231, 190, 253, 43, 227, 183, 235, 58, 228, 175, 253, 43, 230, 128, 232, - 4, 232, 9, 233, 106, 145, 105, 96, 233, 107, 145, 105, 96, 233, 106, 145, - 230, 130, 96, 233, 107, 145, 230, 130, 96, 246, 218, 190, 234, 196, 246, - 218, 190, 234, 236, 237, 76, 253, 16, 233, 83, 253, 16, 190, 102, 237, - 76, 253, 16, 190, 102, 233, 83, 253, 16, 237, 76, 106, 145, 105, 96, 233, - 83, 106, 145, 105, 96, 235, 58, 102, 237, 76, 106, 253, 43, 105, 96, 235, - 58, 102, 233, 83, 106, 253, 43, 105, 96, 237, 76, 106, 2, 190, 105, 96, - 233, 83, 106, 2, 190, 105, 96, 232, 232, 233, 220, 227, 73, 233, 220, - 237, 117, 37, 240, 190, 253, 16, 37, 233, 142, 253, 16, 37, 240, 190, - 106, 145, 105, 96, 37, 233, 142, 106, 145, 105, 96, 37, 248, 4, 37, 248, - 12, 33, 240, 180, 33, 237, 124, 33, 237, 166, 33, 233, 130, 237, 84, 33, - 56, 231, 192, 33, 246, 174, 231, 192, 33, 233, 145, 231, 192, 33, 235, - 91, 33, 240, 151, 235, 51, 240, 180, 235, 51, 237, 124, 235, 51, 237, - 166, 235, 51, 56, 231, 192, 41, 240, 149, 42, 240, 149, 103, 240, 149, - 99, 240, 149, 230, 227, 236, 158, 242, 8, 236, 86, 237, 49, 61, 252, 219, - 41, 230, 141, 47, 61, 252, 219, 47, 41, 230, 141, 246, 218, 190, 239, - 205, 190, 242, 8, 246, 218, 190, 238, 223, 235, 194, 47, 61, 252, 219, - 47, 41, 230, 141, 233, 106, 242, 16, 231, 244, 233, 107, 242, 16, 231, - 244, 237, 104, 233, 136, 253, 16, 233, 111, 254, 203, 237, 104, 232, 46, - 237, 104, 233, 136, 106, 145, 105, 96, 233, 111, 254, 203, 237, 104, 233, - 136, 145, 105, 96, 233, 142, 253, 16, 240, 190, 253, 16, 232, 0, 232, - 203, 232, 101, 236, 149, 229, 32, 252, 118, 244, 165, 251, 71, 41, 240, - 117, 2, 247, 10, 41, 231, 193, 240, 154, 235, 26, 246, 230, 240, 154, - 235, 26, 253, 81, 240, 154, 227, 186, 240, 154, 237, 117, 235, 41, 231, - 192, 56, 231, 192, 247, 53, 231, 192, 233, 130, 237, 166, 235, 154, 42, - 237, 104, 237, 246, 230, 147, 233, 101, 41, 237, 104, 237, 246, 230, 147, - 233, 101, 42, 230, 147, 233, 101, 41, 230, 147, 233, 101, 200, 240, 128, - 235, 91, 240, 137, 235, 26, 253, 81, 240, 137, 235, 26, 246, 230, 47, - 235, 61, 47, 231, 228, 47, 227, 186, 47, 237, 117, 231, 120, 105, 22, - 233, 132, 96, 231, 190, 2, 246, 164, 228, 175, 2, 246, 164, 247, 114, - 247, 89, 230, 128, 247, 114, 247, 89, 227, 183, 231, 190, 105, 180, 145, - 227, 183, 228, 175, 105, 180, 145, 230, 128, 105, 180, 145, 230, 128, - 105, 180, 145, 227, 183, 105, 180, 145, 232, 4, 105, 180, 145, 232, 9, - 246, 218, 190, 236, 191, 145, 237, 81, 246, 218, 190, 236, 246, 145, 237, - 81, 190, 37, 240, 190, 106, 145, 105, 96, 190, 37, 233, 142, 106, 145, - 105, 96, 37, 240, 190, 106, 145, 190, 105, 96, 37, 233, 142, 106, 145, - 190, 105, 96, 231, 190, 253, 85, 190, 230, 130, 96, 228, 175, 253, 85, - 190, 230, 130, 96, 233, 106, 253, 85, 190, 230, 130, 96, 233, 107, 253, - 85, 190, 230, 130, 96, 190, 237, 104, 233, 136, 253, 16, 246, 218, 190, - 235, 114, 254, 203, 237, 104, 232, 46, 190, 237, 104, 233, 136, 106, 145, - 105, 96, 246, 218, 190, 235, 114, 254, 203, 237, 104, 233, 136, 145, 237, - 81, 61, 231, 218, 236, 155, 169, 231, 218, 99, 41, 233, 74, 231, 218, - 103, 41, 233, 74, 231, 218, 235, 44, 106, 2, 182, 169, 82, 235, 44, 106, - 2, 61, 252, 219, 254, 217, 252, 255, 106, 169, 82, 3, 235, 44, 106, 2, - 61, 252, 219, 254, 217, 252, 255, 106, 169, 82, 235, 44, 106, 2, 56, 46, - 235, 44, 106, 2, 233, 95, 3, 235, 44, 106, 2, 233, 95, 235, 44, 106, 2, - 231, 197, 235, 44, 106, 2, 135, 169, 233, 243, 233, 111, 2, 182, 169, 82, - 233, 111, 2, 61, 252, 219, 254, 217, 252, 255, 106, 169, 82, 3, 233, 111, - 2, 61, 252, 219, 254, 217, 252, 255, 106, 169, 82, 233, 111, 2, 233, 95, - 3, 233, 111, 2, 233, 95, 255, 56, 150, 253, 170, 230, 79, 234, 51, 53, - 234, 94, 58, 239, 27, 99, 230, 133, 103, 230, 133, 230, 92, 229, 48, 246, - 239, 240, 138, 42, 233, 190, 41, 233, 190, 42, 237, 249, 41, 237, 249, - 237, 59, 41, 240, 247, 237, 59, 42, 240, 247, 252, 228, 41, 240, 247, - 252, 228, 42, 240, 247, 200, 190, 53, 37, 233, 123, 247, 10, 234, 218, - 236, 215, 232, 11, 233, 8, 234, 195, 230, 156, 235, 6, 235, 27, 241, 214, - 106, 234, 130, 53, 209, 190, 53, 238, 81, 230, 167, 252, 228, 42, 235, - 40, 252, 228, 41, 235, 40, 237, 59, 42, 235, 40, 237, 59, 41, 235, 40, - 252, 228, 132, 231, 208, 237, 59, 132, 231, 208, 238, 227, 240, 6, 99, - 231, 214, 236, 10, 135, 169, 242, 174, 239, 175, 250, 162, 241, 127, 180, - 252, 230, 237, 41, 255, 74, 254, 198, 102, 233, 10, 246, 231, 232, 214, - 227, 185, 240, 117, 104, 227, 133, 240, 117, 104, 241, 127, 180, 252, - 230, 240, 132, 235, 150, 240, 147, 227, 223, 253, 167, 225, 111, 233, 49, - 246, 3, 236, 202, 232, 113, 236, 178, 236, 36, 240, 29, 240, 4, 228, 233, - 228, 234, 162, 163, 14, 236, 108, 162, 163, 14, 240, 15, 240, 232, 162, - 163, 14, 246, 189, 237, 81, 162, 163, 14, 246, 189, 235, 164, 162, 163, - 14, 246, 189, 233, 90, 162, 163, 14, 246, 189, 247, 15, 162, 163, 14, - 246, 189, 235, 20, 162, 163, 14, 237, 40, 237, 164, 162, 163, 14, 237, - 40, 247, 15, 162, 163, 14, 245, 191, 125, 162, 163, 14, 232, 83, 125, - 162, 163, 14, 246, 189, 237, 84, 162, 163, 14, 246, 189, 230, 151, 162, - 163, 14, 246, 189, 230, 128, 162, 163, 14, 246, 189, 227, 183, 162, 163, - 14, 117, 241, 21, 162, 163, 14, 81, 241, 21, 162, 163, 14, 246, 189, 117, - 58, 162, 163, 14, 246, 189, 81, 58, 162, 163, 14, 237, 40, 230, 151, 162, - 163, 14, 103, 246, 215, 231, 197, 162, 163, 14, 241, 36, 237, 164, 162, - 163, 14, 246, 189, 103, 237, 197, 162, 163, 14, 246, 189, 237, 75, 162, - 163, 14, 103, 246, 215, 247, 15, 162, 163, 14, 235, 18, 241, 21, 162, - 163, 14, 246, 189, 235, 18, 58, 162, 163, 14, 99, 246, 215, 233, 95, 162, - 163, 14, 253, 173, 237, 164, 162, 163, 14, 246, 189, 99, 237, 197, 162, - 163, 14, 246, 189, 249, 185, 162, 163, 14, 99, 246, 215, 247, 15, 162, - 163, 14, 231, 191, 241, 21, 162, 163, 14, 246, 189, 231, 191, 58, 162, - 163, 14, 241, 218, 231, 197, 162, 163, 14, 241, 36, 231, 197, 162, 163, - 14, 235, 41, 231, 197, 162, 163, 14, 253, 236, 231, 197, 162, 163, 14, - 237, 40, 231, 197, 162, 163, 14, 99, 247, 201, 247, 15, 162, 163, 14, - 241, 218, 240, 232, 162, 163, 14, 237, 40, 240, 139, 162, 163, 14, 246, - 189, 237, 66, 162, 163, 14, 99, 246, 215, 219, 162, 163, 14, 253, 173, - 219, 162, 163, 14, 247, 53, 219, 162, 163, 14, 253, 236, 219, 162, 163, - 14, 237, 40, 219, 162, 163, 14, 103, 247, 201, 237, 164, 162, 163, 14, - 42, 247, 201, 237, 164, 162, 163, 14, 240, 128, 219, 162, 163, 14, 228, - 175, 219, 162, 163, 14, 240, 162, 125, 162, 163, 14, 253, 173, 205, 162, - 163, 14, 240, 108, 162, 163, 14, 245, 219, 205, 162, 163, 14, 233, 21, - 231, 197, 162, 163, 14, 246, 189, 190, 237, 81, 162, 163, 14, 246, 189, - 233, 4, 162, 163, 14, 103, 240, 206, 205, 162, 163, 14, 99, 240, 206, - 205, 162, 163, 14, 240, 146, 162, 163, 14, 246, 209, 162, 163, 14, 237, - 68, 162, 163, 14, 240, 120, 231, 197, 162, 163, 14, 235, 28, 231, 197, - 162, 163, 14, 246, 168, 231, 197, 162, 163, 14, 240, 123, 231, 197, 162, - 163, 14, 237, 71, 190, 240, 245, 76, 41, 240, 117, 2, 231, 191, 237, 170, - 58, 231, 143, 246, 157, 246, 231, 249, 109, 98, 61, 246, 167, 2, 237, 44, - 246, 164, 232, 28, 98, 230, 239, 232, 62, 98, 227, 230, 232, 62, 98, 233, - 203, 98, 229, 240, 98, 63, 37, 2, 237, 95, 61, 240, 138, 243, 97, 98, - 229, 182, 253, 239, 98, 250, 65, 98, 33, 169, 252, 219, 2, 238, 28, 33, - 233, 80, 240, 152, 237, 150, 237, 40, 2, 232, 234, 58, 252, 54, 98, 231, - 103, 98, 231, 80, 98, 222, 232, 239, 0, 98, 222, 232, 239, 77, 98, 222, - 223, 98, 222, 226, 98, 237, 242, 236, 38, 14, 211, 113, 223, 54, 98, 162, - 163, 14, 240, 232, 235, 163, 231, 247, 253, 239, 98, 234, 198, 241, 210, - 251, 53, 241, 210, 245, 82, 238, 44, 98, 243, 14, 238, 44, 98, 42, 229, - 169, 240, 116, 88, 42, 229, 169, 230, 136, 42, 229, 169, 203, 88, 41, - 229, 169, 240, 116, 88, 41, 229, 169, 230, 136, 41, 229, 169, 203, 88, - 42, 37, 235, 22, 240, 116, 235, 40, 42, 37, 235, 22, 230, 136, 42, 37, - 235, 22, 203, 235, 40, 41, 37, 235, 22, 240, 116, 235, 40, 41, 37, 235, - 22, 230, 136, 41, 37, 235, 22, 203, 235, 40, 42, 240, 137, 235, 22, 240, - 116, 88, 42, 240, 137, 235, 22, 237, 44, 237, 188, 42, 240, 137, 235, 22, - 203, 88, 240, 137, 235, 22, 230, 136, 41, 240, 137, 235, 22, 240, 116, - 88, 41, 240, 137, 235, 22, 237, 44, 237, 188, 41, 240, 137, 235, 22, 203, - 88, 233, 98, 230, 136, 169, 246, 167, 230, 136, 240, 116, 42, 145, 203, - 41, 240, 137, 235, 22, 233, 144, 240, 116, 41, 145, 203, 42, 240, 137, - 235, 22, 233, 144, 232, 10, 247, 214, 232, 10, 235, 110, 252, 228, 37, - 104, 237, 59, 37, 104, 237, 59, 37, 235, 22, 107, 252, 228, 37, 104, 29, - 14, 235, 110, 42, 61, 77, 240, 138, 41, 61, 77, 240, 138, 169, 247, 102, - 236, 138, 169, 247, 102, 236, 139, 169, 247, 102, 236, 140, 169, 247, - 102, 236, 141, 231, 205, 14, 157, 61, 22, 252, 228, 237, 41, 231, 205, - 14, 157, 61, 22, 237, 59, 237, 41, 231, 205, 14, 157, 61, 2, 235, 20, - 231, 205, 14, 157, 103, 22, 169, 2, 235, 20, 231, 205, 14, 157, 99, 22, - 169, 2, 235, 20, 231, 205, 14, 157, 61, 2, 231, 193, 231, 205, 14, 157, - 103, 22, 169, 2, 231, 193, 231, 205, 14, 157, 99, 22, 169, 2, 231, 193, - 231, 205, 14, 157, 61, 22, 241, 22, 231, 205, 14, 157, 103, 22, 169, 2, - 241, 22, 231, 205, 14, 157, 99, 22, 169, 2, 241, 22, 231, 205, 14, 157, - 103, 22, 229, 164, 231, 205, 14, 157, 99, 22, 229, 164, 231, 205, 14, - 157, 61, 22, 252, 228, 240, 132, 231, 205, 14, 157, 61, 22, 237, 59, 240, - 132, 37, 241, 38, 239, 219, 98, 243, 96, 98, 61, 246, 167, 230, 136, 233, - 114, 237, 46, 233, 114, 182, 107, 239, 251, 233, 114, 240, 125, 107, 241, - 4, 233, 114, 182, 107, 135, 236, 227, 233, 114, 135, 238, 54, 107, 241, - 4, 233, 114, 135, 238, 54, 236, 115, 233, 114, 233, 247, 233, 114, 230, - 213, 233, 114, 230, 193, 241, 126, 236, 97, 243, 111, 252, 228, 228, 180, - 237, 59, 228, 180, 252, 228, 240, 137, 104, 237, 59, 240, 137, 104, 252, - 228, 233, 89, 240, 158, 104, 237, 59, 233, 89, 240, 158, 104, 63, 231, - 179, 235, 150, 246, 174, 2, 235, 20, 228, 166, 232, 191, 255, 0, 234, 41, - 231, 62, 227, 186, 14, 32, 245, 13, 14, 32, 241, 75, 106, 234, 120, 14, - 32, 241, 75, 106, 242, 0, 14, 32, 252, 255, 106, 242, 0, 14, 32, 252, - 255, 106, 228, 169, 14, 32, 234, 96, 14, 32, 228, 211, 14, 32, 242, 198, - 14, 32, 230, 229, 14, 32, 169, 229, 221, 14, 32, 246, 167, 241, 129, 14, - 32, 61, 229, 221, 14, 32, 211, 241, 129, 14, 32, 234, 28, 235, 205, 14, - 32, 241, 237, 247, 186, 14, 32, 241, 237, 253, 79, 14, 32, 249, 182, 250, - 222, 235, 170, 14, 32, 237, 178, 235, 88, 118, 14, 32, 237, 178, 235, 88, - 113, 14, 32, 237, 178, 235, 88, 166, 14, 32, 237, 178, 235, 88, 158, 14, - 32, 233, 71, 228, 211, 14, 32, 230, 116, 244, 3, 14, 32, 252, 255, 106, - 229, 156, 237, 65, 14, 32, 236, 18, 14, 32, 252, 255, 106, 236, 151, 14, - 32, 230, 115, 14, 32, 235, 170, 14, 32, 249, 248, 230, 131, 14, 32, 243, - 157, 230, 131, 14, 32, 239, 217, 230, 131, 14, 32, 246, 229, 230, 131, - 14, 32, 237, 69, 14, 32, 236, 44, 242, 209, 98, 246, 157, 246, 231, 14, - 32, 234, 168, 14, 32, 238, 180, 211, 113, 14, 32, 231, 148, 211, 113, - 253, 63, 88, 253, 63, 238, 146, 253, 63, 241, 133, 253, 63, 233, 70, 241, - 133, 253, 63, 249, 110, 236, 17, 253, 63, 254, 34, 247, 57, 253, 63, 238, - 129, 249, 99, 225, 114, 253, 63, 238, 95, 106, 237, 234, 253, 63, 240, - 151, 253, 63, 234, 42, 235, 144, 236, 170, 253, 63, 47, 230, 151, 33, 21, - 118, 33, 21, 113, 33, 21, 166, 33, 21, 158, 33, 21, 173, 33, 21, 183, 33, - 21, 194, 33, 21, 187, 33, 21, 192, 33, 65, 246, 179, 33, 65, 235, 68, 33, - 65, 235, 72, 33, 65, 231, 234, 33, 65, 231, 231, 33, 65, 233, 141, 33, - 65, 233, 135, 33, 65, 230, 148, 33, 65, 231, 229, 33, 65, 231, 233, 33, - 65, 235, 52, 93, 21, 118, 93, 21, 113, 93, 21, 166, 93, 21, 158, 93, 21, - 173, 93, 21, 183, 93, 21, 194, 93, 21, 187, 93, 21, 192, 93, 65, 246, - 179, 93, 65, 235, 68, 93, 65, 235, 72, 93, 65, 231, 234, 93, 65, 231, - 231, 93, 65, 233, 141, 93, 65, 233, 135, 93, 65, 230, 148, 93, 65, 231, - 229, 93, 65, 231, 233, 93, 65, 235, 52, 21, 168, 246, 162, 240, 121, 21, - 135, 246, 162, 240, 121, 21, 152, 246, 162, 240, 121, 21, 246, 160, 246, - 162, 240, 121, 21, 246, 159, 246, 162, 240, 121, 21, 253, 17, 246, 162, - 240, 121, 21, 240, 155, 246, 162, 240, 121, 21, 240, 142, 246, 162, 240, - 121, 21, 246, 208, 246, 162, 240, 121, 65, 253, 53, 246, 162, 240, 121, - 65, 238, 199, 246, 162, 240, 121, 65, 238, 79, 246, 162, 240, 121, 65, - 234, 245, 246, 162, 240, 121, 65, 234, 107, 246, 162, 240, 121, 65, 236, - 78, 246, 162, 240, 121, 65, 235, 210, 246, 162, 240, 121, 65, 233, 22, - 246, 162, 240, 121, 65, 234, 92, 246, 162, 240, 121, 65, 234, 171, 246, - 162, 240, 121, 65, 237, 97, 246, 162, 240, 121, 93, 7, 3, 1, 57, 93, 7, - 3, 1, 254, 185, 93, 7, 3, 1, 254, 194, 93, 7, 3, 1, 222, 222, 93, 7, 3, - 1, 72, 93, 7, 3, 1, 254, 191, 93, 7, 3, 1, 214, 93, 7, 3, 1, 212, 93, 7, - 3, 1, 74, 93, 7, 3, 1, 254, 192, 93, 7, 3, 1, 254, 186, 93, 7, 3, 1, 149, - 93, 7, 3, 1, 185, 93, 7, 3, 1, 199, 93, 7, 3, 1, 73, 93, 7, 3, 1, 254, - 187, 93, 7, 3, 1, 254, 196, 93, 7, 3, 1, 146, 93, 7, 3, 1, 193, 93, 7, 3, - 1, 254, 183, 93, 7, 3, 1, 66, 93, 7, 3, 1, 196, 93, 7, 3, 1, 254, 195, - 93, 7, 3, 1, 254, 184, 93, 7, 3, 1, 254, 190, 93, 7, 3, 1, 254, 193, 33, - 7, 6, 1, 57, 33, 7, 6, 1, 254, 185, 33, 7, 6, 1, 254, 194, 33, 7, 6, 1, - 222, 222, 33, 7, 6, 1, 72, 33, 7, 6, 1, 254, 191, 33, 7, 6, 1, 214, 33, - 7, 6, 1, 212, 33, 7, 6, 1, 74, 33, 7, 6, 1, 254, 192, 33, 7, 6, 1, 254, - 186, 33, 7, 6, 1, 149, 33, 7, 6, 1, 185, 33, 7, 6, 1, 199, 33, 7, 6, 1, - 73, 33, 7, 6, 1, 254, 187, 33, 7, 6, 1, 254, 196, 33, 7, 6, 1, 146, 33, - 7, 6, 1, 193, 33, 7, 6, 1, 254, 183, 33, 7, 6, 1, 66, 33, 7, 6, 1, 196, - 33, 7, 6, 1, 254, 195, 33, 7, 6, 1, 254, 184, 33, 7, 6, 1, 254, 190, 33, - 7, 6, 1, 254, 193, 33, 7, 3, 1, 57, 33, 7, 3, 1, 254, 185, 33, 7, 3, 1, - 254, 194, 33, 7, 3, 1, 222, 222, 33, 7, 3, 1, 72, 33, 7, 3, 1, 254, 191, - 33, 7, 3, 1, 214, 33, 7, 3, 1, 212, 33, 7, 3, 1, 74, 33, 7, 3, 1, 254, - 192, 33, 7, 3, 1, 254, 186, 33, 7, 3, 1, 149, 33, 7, 3, 1, 185, 33, 7, 3, - 1, 199, 33, 7, 3, 1, 73, 33, 7, 3, 1, 254, 187, 33, 7, 3, 1, 254, 196, - 33, 7, 3, 1, 146, 33, 7, 3, 1, 193, 33, 7, 3, 1, 254, 183, 33, 7, 3, 1, - 66, 33, 7, 3, 1, 196, 33, 7, 3, 1, 254, 195, 33, 7, 3, 1, 254, 184, 33, - 7, 3, 1, 254, 190, 33, 7, 3, 1, 254, 193, 33, 21, 240, 126, 233, 71, 33, - 65, 235, 68, 233, 71, 33, 65, 235, 72, 233, 71, 33, 65, 231, 234, 233, - 71, 33, 65, 231, 231, 233, 71, 33, 65, 233, 141, 233, 71, 33, 65, 233, - 135, 233, 71, 33, 65, 230, 148, 233, 71, 33, 65, 231, 229, 233, 71, 33, - 65, 231, 233, 233, 71, 33, 65, 235, 52, 47, 33, 21, 118, 47, 33, 21, 113, - 47, 33, 21, 166, 47, 33, 21, 158, 47, 33, 21, 173, 47, 33, 21, 183, 47, - 33, 21, 194, 47, 33, 21, 187, 47, 33, 21, 192, 47, 33, 65, 246, 179, 233, - 71, 33, 21, 240, 126, 77, 80, 157, 229, 164, 77, 80, 112, 229, 164, 77, - 80, 157, 231, 210, 77, 80, 112, 231, 210, 77, 80, 157, 237, 49, 246, 187, - 229, 164, 77, 80, 112, 237, 49, 246, 187, 229, 164, 77, 80, 157, 237, 49, - 246, 187, 231, 210, 77, 80, 112, 237, 49, 246, 187, 231, 210, 77, 80, - 157, 231, 212, 246, 187, 229, 164, 77, 80, 112, 231, 212, 246, 187, 229, - 164, 77, 80, 157, 231, 212, 246, 187, 231, 210, 77, 80, 112, 231, 212, - 246, 187, 231, 210, 77, 80, 157, 103, 22, 237, 41, 77, 80, 103, 157, 22, - 41, 237, 63, 77, 80, 103, 112, 22, 41, 237, 57, 77, 80, 112, 103, 22, - 237, 41, 77, 80, 157, 103, 22, 240, 132, 77, 80, 103, 157, 22, 42, 237, - 63, 77, 80, 103, 112, 22, 42, 237, 57, 77, 80, 112, 103, 22, 240, 132, - 77, 80, 157, 99, 22, 237, 41, 77, 80, 99, 157, 22, 41, 237, 63, 77, 80, - 99, 112, 22, 41, 237, 57, 77, 80, 112, 99, 22, 237, 41, 77, 80, 157, 99, - 22, 240, 132, 77, 80, 99, 157, 22, 42, 237, 63, 77, 80, 99, 112, 22, 42, - 237, 57, 77, 80, 112, 99, 22, 240, 132, 77, 80, 157, 61, 22, 237, 41, 77, - 80, 61, 157, 22, 41, 237, 63, 77, 80, 99, 112, 22, 41, 103, 237, 57, 77, - 80, 103, 112, 22, 41, 99, 237, 57, 77, 80, 61, 112, 22, 41, 237, 57, 77, - 80, 103, 157, 22, 41, 99, 237, 63, 77, 80, 99, 157, 22, 41, 103, 237, 63, - 77, 80, 112, 61, 22, 237, 41, 77, 80, 157, 61, 22, 240, 132, 77, 80, 61, - 157, 22, 42, 237, 63, 77, 80, 99, 112, 22, 42, 103, 237, 57, 77, 80, 103, - 112, 22, 42, 99, 237, 57, 77, 80, 61, 112, 22, 42, 237, 57, 77, 80, 103, - 157, 22, 42, 99, 237, 63, 77, 80, 99, 157, 22, 42, 103, 237, 63, 77, 80, - 112, 61, 22, 240, 132, 77, 80, 157, 103, 22, 229, 164, 77, 80, 42, 112, - 22, 41, 103, 237, 57, 77, 80, 41, 112, 22, 42, 103, 237, 57, 77, 80, 103, - 157, 22, 169, 237, 63, 77, 80, 103, 112, 22, 169, 237, 57, 77, 80, 41, - 157, 22, 42, 103, 237, 63, 77, 80, 42, 157, 22, 41, 103, 237, 63, 77, 80, - 112, 103, 22, 229, 164, 77, 80, 157, 99, 22, 229, 164, 77, 80, 42, 112, - 22, 41, 99, 237, 57, 77, 80, 41, 112, 22, 42, 99, 237, 57, 77, 80, 99, - 157, 22, 169, 237, 63, 77, 80, 99, 112, 22, 169, 237, 57, 77, 80, 41, - 157, 22, 42, 99, 237, 63, 77, 80, 42, 157, 22, 41, 99, 237, 63, 77, 80, - 112, 99, 22, 229, 164, 77, 80, 157, 61, 22, 229, 164, 77, 80, 42, 112, - 22, 41, 61, 237, 57, 77, 80, 41, 112, 22, 42, 61, 237, 57, 77, 80, 61, - 157, 22, 169, 237, 63, 77, 80, 99, 112, 22, 103, 169, 237, 57, 77, 80, - 103, 112, 22, 99, 169, 237, 57, 77, 80, 61, 112, 22, 169, 237, 57, 77, - 80, 42, 99, 112, 22, 41, 103, 237, 57, 77, 80, 41, 99, 112, 22, 42, 103, - 237, 57, 77, 80, 42, 103, 112, 22, 41, 99, 237, 57, 77, 80, 41, 103, 112, - 22, 42, 99, 237, 57, 77, 80, 103, 157, 22, 99, 169, 237, 63, 77, 80, 99, - 157, 22, 103, 169, 237, 63, 77, 80, 41, 157, 22, 42, 61, 237, 63, 77, 80, - 42, 157, 22, 41, 61, 237, 63, 77, 80, 112, 61, 22, 229, 164, 77, 80, 157, - 47, 246, 187, 229, 164, 77, 80, 112, 47, 246, 187, 229, 164, 77, 80, 157, - 47, 246, 187, 231, 210, 77, 80, 112, 47, 246, 187, 231, 210, 77, 80, 47, - 229, 164, 77, 80, 47, 231, 210, 77, 80, 103, 237, 62, 22, 41, 235, 55, - 77, 80, 103, 47, 22, 41, 235, 60, 77, 80, 47, 103, 22, 237, 41, 77, 80, - 103, 237, 62, 22, 42, 235, 55, 77, 80, 103, 47, 22, 42, 235, 60, 77, 80, - 47, 103, 22, 240, 132, 77, 80, 99, 237, 62, 22, 41, 235, 55, 77, 80, 99, - 47, 22, 41, 235, 60, 77, 80, 47, 99, 22, 237, 41, 77, 80, 99, 237, 62, - 22, 42, 235, 55, 77, 80, 99, 47, 22, 42, 235, 60, 77, 80, 47, 99, 22, - 240, 132, 77, 80, 61, 237, 62, 22, 41, 235, 55, 77, 80, 61, 47, 22, 41, - 235, 60, 77, 80, 47, 61, 22, 237, 41, 77, 80, 61, 237, 62, 22, 42, 235, - 55, 77, 80, 61, 47, 22, 42, 235, 60, 77, 80, 47, 61, 22, 240, 132, 77, - 80, 103, 237, 62, 22, 169, 235, 55, 77, 80, 103, 47, 22, 169, 235, 60, - 77, 80, 47, 103, 22, 229, 164, 77, 80, 99, 237, 62, 22, 169, 235, 55, 77, - 80, 99, 47, 22, 169, 235, 60, 77, 80, 47, 99, 22, 229, 164, 77, 80, 61, - 237, 62, 22, 169, 235, 55, 77, 80, 61, 47, 22, 169, 235, 60, 77, 80, 47, - 61, 22, 229, 164, 77, 80, 157, 253, 29, 103, 22, 237, 41, 77, 80, 157, - 253, 29, 103, 22, 240, 132, 77, 80, 157, 253, 29, 99, 22, 240, 132, 77, - 80, 157, 253, 29, 99, 22, 237, 41, 77, 80, 157, 233, 74, 240, 116, 41, - 180, 203, 240, 132, 77, 80, 157, 233, 74, 240, 116, 42, 180, 203, 237, - 41, 77, 80, 157, 233, 74, 237, 85, 77, 80, 157, 240, 132, 77, 80, 157, - 253, 19, 77, 80, 157, 237, 41, 77, 80, 157, 240, 152, 77, 80, 112, 240, - 132, 77, 80, 112, 253, 19, 77, 80, 112, 237, 41, 77, 80, 112, 240, 152, - 77, 80, 157, 42, 22, 112, 237, 41, 77, 80, 157, 99, 22, 112, 240, 152, - 77, 80, 112, 42, 22, 157, 237, 41, 77, 80, 112, 99, 22, 157, 240, 152, - 240, 116, 132, 237, 65, 203, 168, 237, 112, 237, 65, 203, 168, 235, 53, - 237, 65, 203, 152, 235, 75, 237, 65, 203, 132, 237, 65, 203, 246, 159, - 235, 75, 237, 65, 203, 152, 233, 176, 237, 65, 203, 240, 155, 235, 75, - 237, 65, 246, 162, 237, 65, 42, 240, 155, 235, 75, 237, 65, 42, 152, 233, - 176, 237, 65, 42, 246, 159, 235, 75, 237, 65, 42, 132, 237, 65, 42, 152, - 235, 75, 237, 65, 42, 168, 235, 53, 237, 65, 42, 168, 237, 112, 237, 65, - 41, 132, 237, 65, 157, 237, 214, 237, 60, 237, 214, 249, 180, 237, 214, - 240, 116, 168, 237, 112, 237, 65, 41, 168, 237, 112, 237, 65, 233, 88, - 203, 240, 132, 233, 88, 203, 237, 41, 233, 88, 240, 116, 240, 132, 233, - 88, 240, 116, 42, 22, 203, 42, 22, 203, 237, 41, 233, 88, 240, 116, 42, - 22, 203, 237, 41, 233, 88, 240, 116, 42, 22, 240, 116, 41, 22, 203, 240, - 132, 233, 88, 240, 116, 42, 22, 240, 116, 41, 22, 203, 237, 41, 233, 88, - 240, 116, 237, 41, 233, 88, 240, 116, 41, 22, 203, 240, 132, 233, 88, - 240, 116, 41, 22, 203, 42, 22, 203, 237, 41, 86, 235, 27, 63, 235, 27, - 63, 37, 2, 235, 98, 233, 195, 63, 37, 230, 162, 86, 3, 235, 27, 37, 2, - 169, 240, 200, 37, 2, 61, 240, 200, 37, 2, 231, 112, 230, 179, 240, 200, - 37, 2, 240, 116, 42, 180, 203, 41, 240, 200, 37, 2, 240, 116, 41, 180, - 203, 42, 240, 200, 37, 2, 233, 74, 230, 179, 240, 200, 86, 3, 235, 27, - 63, 3, 235, 27, 86, 230, 157, 63, 230, 157, 86, 61, 230, 157, 63, 61, - 230, 157, 86, 227, 145, 63, 227, 145, 86, 229, 174, 231, 193, 63, 229, - 174, 231, 193, 86, 229, 174, 3, 231, 193, 63, 229, 174, 3, 231, 193, 86, - 227, 133, 231, 193, 63, 227, 133, 231, 193, 86, 227, 133, 3, 231, 193, - 63, 227, 133, 3, 231, 193, 86, 227, 133, 233, 154, 63, 227, 133, 233, - 154, 86, 227, 189, 231, 193, 63, 227, 189, 231, 193, 86, 227, 189, 3, - 231, 193, 63, 227, 189, 3, 231, 193, 86, 227, 185, 231, 193, 63, 227, - 185, 231, 193, 86, 227, 185, 3, 231, 193, 63, 227, 185, 3, 231, 193, 86, - 227, 185, 233, 154, 63, 227, 185, 233, 154, 86, 233, 90, 63, 233, 90, 63, - 235, 41, 230, 162, 86, 3, 233, 90, 234, 103, 233, 123, 63, 235, 20, 237, - 50, 235, 20, 237, 40, 2, 61, 240, 200, 232, 89, 86, 235, 20, 237, 40, 2, - 42, 132, 237, 45, 237, 40, 2, 41, 132, 237, 45, 237, 40, 2, 203, 132, - 237, 45, 237, 40, 2, 240, 116, 132, 237, 45, 237, 40, 2, 240, 116, 41, - 233, 88, 237, 45, 237, 40, 2, 253, 167, 253, 85, 240, 116, 42, 233, 88, - 237, 45, 42, 132, 86, 235, 20, 41, 132, 86, 235, 20, 235, 94, 235, 45, - 235, 94, 63, 235, 20, 240, 116, 132, 235, 94, 63, 235, 20, 203, 132, 235, - 94, 63, 235, 20, 240, 116, 42, 233, 88, 233, 146, 247, 10, 240, 116, 41, - 233, 88, 233, 146, 247, 10, 203, 41, 233, 88, 233, 146, 247, 10, 203, 42, - 233, 88, 233, 146, 247, 10, 240, 116, 132, 235, 20, 203, 132, 235, 20, - 86, 203, 41, 231, 193, 86, 203, 42, 231, 193, 86, 240, 116, 42, 231, 193, - 86, 240, 116, 41, 231, 193, 63, 235, 45, 37, 2, 42, 132, 237, 45, 37, 2, - 41, 132, 237, 45, 37, 2, 240, 116, 42, 233, 74, 132, 237, 45, 37, 2, 203, - 41, 233, 74, 132, 237, 45, 63, 37, 2, 61, 232, 86, 240, 138, 63, 229, - 174, 233, 80, 2, 246, 164, 229, 174, 233, 80, 2, 42, 132, 237, 45, 229, - 174, 233, 80, 2, 41, 132, 237, 45, 240, 185, 235, 20, 63, 37, 2, 240, - 116, 42, 231, 219, 63, 37, 2, 203, 42, 231, 219, 63, 37, 2, 203, 41, 231, - 219, 63, 37, 2, 240, 116, 41, 231, 219, 63, 237, 40, 2, 240, 116, 42, - 231, 219, 63, 237, 40, 2, 203, 42, 231, 219, 63, 237, 40, 2, 203, 41, - 231, 219, 63, 237, 40, 2, 240, 116, 41, 231, 219, 240, 116, 42, 231, 193, - 240, 116, 41, 231, 193, 203, 42, 231, 193, 63, 237, 60, 235, 27, 86, 237, - 60, 235, 27, 63, 237, 60, 3, 235, 27, 86, 237, 60, 3, 235, 27, 203, 41, - 231, 193, 86, 254, 8, 2, 241, 220, 238, 156, 233, 58, 234, 226, 238, 159, - 86, 240, 139, 63, 240, 139, 231, 98, 228, 167, 247, 54, 232, 77, 241, - 204, 230, 181, 241, 204, 228, 229, 229, 187, 86, 230, 212, 63, 230, 212, - 237, 149, 246, 231, 237, 149, 77, 2, 237, 234, 237, 149, 77, 2, 254, 184, - 234, 213, 235, 2, 2, 251, 171, 238, 193, 253, 225, 232, 84, 63, 241, 238, - 237, 188, 86, 241, 238, 237, 188, 233, 23, 200, 235, 97, 237, 202, 240, - 196, 235, 45, 86, 42, 233, 78, 237, 135, 86, 41, 233, 78, 237, 135, 63, - 42, 233, 78, 237, 135, 63, 99, 233, 78, 237, 135, 63, 41, 233, 78, 237, - 135, 63, 103, 233, 78, 237, 135, 245, 189, 22, 229, 243, 236, 22, 53, - 230, 93, 53, 232, 85, 53, 232, 91, 242, 58, 234, 178, 237, 85, 253, 212, - 246, 209, 240, 221, 106, 232, 222, 240, 221, 106, 231, 89, 247, 53, 22, - 232, 104, 240, 176, 98, 254, 23, 236, 221, 238, 4, 22, 236, 230, 245, 62, - 98, 253, 122, 240, 242, 235, 66, 32, 235, 123, 235, 66, 32, 241, 178, - 235, 66, 32, 240, 207, 235, 66, 32, 233, 246, 235, 66, 32, 240, 199, 235, - 66, 32, 237, 168, 235, 66, 32, 231, 255, 235, 66, 32, 237, 99, 246, 56, - 106, 236, 48, 63, 234, 108, 240, 223, 63, 235, 213, 240, 223, 86, 235, - 213, 240, 223, 63, 254, 8, 2, 241, 220, 240, 225, 235, 53, 240, 211, 250, - 207, 235, 53, 240, 211, 234, 159, 237, 154, 53, 237, 99, 246, 235, 53, - 234, 134, 236, 208, 237, 17, 234, 167, 239, 200, 238, 102, 236, 255, 236, - 91, 236, 19, 250, 213, 240, 78, 239, 84, 233, 20, 229, 58, 230, 233, 232, - 72, 236, 189, 63, 240, 175, 241, 2, 63, 240, 175, 238, 39, 63, 240, 175, - 241, 225, 63, 240, 175, 235, 152, 63, 240, 175, 235, 186, 63, 240, 175, - 241, 211, 86, 240, 175, 241, 2, 86, 240, 175, 238, 39, 86, 240, 175, 241, - 225, 86, 240, 175, 235, 152, 86, 240, 175, 235, 186, 86, 240, 175, 241, - 211, 86, 241, 249, 240, 198, 63, 240, 196, 240, 198, 63, 235, 41, 240, - 198, 86, 248, 9, 240, 198, 63, 241, 249, 240, 198, 86, 240, 196, 240, - 198, 86, 235, 41, 240, 198, 63, 248, 9, 240, 198, 253, 225, 234, 228, - 235, 53, 240, 186, 237, 112, 240, 186, 237, 229, 237, 112, 238, 29, 237, - 229, 232, 6, 238, 29, 241, 53, 247, 141, 53, 241, 53, 235, 131, 53, 241, - 53, 240, 235, 53, 246, 184, 151, 237, 85, 246, 170, 151, 237, 85, 232, - 64, 231, 213, 98, 231, 213, 14, 32, 240, 57, 231, 224, 231, 213, 14, 32, - 240, 58, 231, 224, 231, 213, 14, 32, 240, 59, 231, 224, 231, 213, 14, 32, - 240, 60, 231, 224, 231, 213, 14, 32, 240, 61, 231, 224, 231, 213, 14, 32, - 240, 62, 231, 224, 231, 213, 14, 32, 240, 63, 231, 224, 231, 213, 14, 32, - 236, 92, 231, 100, 86, 232, 64, 231, 213, 98, 234, 205, 241, 59, 98, 222, - 248, 241, 59, 98, 232, 248, 241, 59, 53, 231, 186, 98, 253, 115, 236, 68, - 253, 115, 236, 69, 253, 115, 236, 70, 253, 115, 236, 71, 253, 115, 236, - 72, 253, 115, 236, 73, 63, 237, 40, 2, 56, 237, 41, 63, 237, 40, 2, 135, - 240, 169, 86, 237, 40, 2, 63, 56, 237, 41, 86, 237, 40, 2, 135, 63, 240, - 169, 233, 115, 32, 240, 242, 233, 115, 32, 247, 233, 237, 111, 32, 235, - 175, 240, 242, 237, 111, 32, 238, 21, 247, 233, 237, 111, 32, 238, 21, - 240, 242, 237, 111, 32, 235, 175, 247, 233, 63, 241, 131, 86, 241, 131, - 238, 4, 22, 245, 72, 235, 145, 235, 117, 236, 250, 241, 251, 106, 228, - 222, 236, 209, 234, 0, 236, 85, 243, 121, 241, 251, 106, 236, 104, 248, - 240, 98, 227, 240, 233, 124, 63, 240, 139, 237, 27, 53, 201, 237, 26, 53, - 235, 166, 237, 154, 53, 235, 166, 246, 235, 53, 230, 72, 237, 154, 22, - 246, 235, 53, 246, 235, 22, 237, 154, 53, 246, 235, 2, 195, 53, 246, 235, - 2, 195, 22, 246, 235, 22, 237, 154, 53, 61, 246, 235, 2, 195, 53, 169, - 246, 235, 2, 195, 53, 237, 60, 63, 235, 20, 237, 60, 86, 235, 20, 237, - 60, 3, 63, 235, 20, 234, 152, 98, 236, 52, 98, 233, 60, 229, 208, 98, - 236, 34, 236, 87, 252, 62, 236, 165, 238, 144, 236, 181, 244, 37, 240, - 76, 236, 28, 86, 247, 176, 236, 134, 234, 220, 229, 149, 233, 6, 227, 75, - 63, 233, 148, 247, 4, 63, 233, 148, 241, 2, 86, 233, 148, 247, 4, 86, - 233, 148, 241, 2, 240, 116, 241, 101, 231, 245, 86, 231, 245, 203, 241, - 101, 231, 245, 63, 231, 245, 232, 11, 234, 145, 53, 252, 8, 238, 192, - 232, 67, 232, 178, 237, 23, 240, 251, 237, 31, 240, 251, 203, 41, 235, - 133, 235, 133, 240, 116, 41, 235, 133, 63, 248, 111, 86, 248, 111, 240, - 245, 76, 112, 240, 245, 76, 227, 134, 254, 184, 112, 227, 134, 254, 184, - 237, 149, 254, 184, 112, 237, 149, 254, 184, 233, 124, 19, 237, 85, 112, - 19, 237, 85, 246, 157, 237, 95, 237, 85, 112, 246, 157, 237, 95, 237, 85, - 7, 237, 85, 233, 125, 63, 7, 237, 85, 233, 124, 7, 237, 85, 236, 145, - 237, 85, 247, 53, 106, 238, 173, 246, 160, 225, 105, 231, 198, 246, 160, - 227, 136, 231, 198, 112, 246, 160, 227, 136, 231, 198, 246, 160, 229, - 237, 231, 198, 86, 246, 160, 235, 50, 240, 139, 63, 246, 160, 235, 50, - 240, 139, 237, 165, 233, 124, 63, 240, 139, 33, 63, 240, 139, 246, 157, - 237, 95, 86, 240, 139, 86, 237, 95, 63, 240, 139, 233, 124, 86, 240, 139, - 112, 233, 124, 86, 240, 139, 233, 175, 240, 139, 233, 125, 63, 240, 139, - 112, 231, 198, 246, 157, 237, 95, 231, 198, 240, 142, 240, 12, 231, 198, - 240, 142, 235, 50, 86, 240, 139, 240, 142, 235, 50, 233, 175, 240, 139, - 253, 17, 235, 50, 86, 240, 139, 240, 142, 235, 50, 229, 212, 86, 240, - 139, 112, 240, 142, 235, 50, 229, 212, 86, 240, 139, 238, 79, 235, 50, - 86, 240, 139, 235, 210, 235, 50, 231, 198, 225, 105, 231, 198, 246, 157, - 237, 95, 225, 105, 231, 198, 112, 225, 105, 231, 198, 253, 17, 233, 228, - 86, 22, 63, 231, 238, 86, 231, 238, 63, 231, 238, 240, 142, 233, 228, - 233, 124, 86, 231, 238, 33, 246, 157, 237, 95, 240, 142, 235, 50, 240, - 139, 112, 225, 105, 233, 175, 231, 198, 230, 171, 245, 251, 231, 180, - 230, 171, 112, 236, 26, 230, 171, 233, 239, 112, 233, 239, 227, 136, 231, - 198, 240, 142, 225, 105, 232, 40, 231, 198, 112, 240, 142, 225, 105, 232, - 40, 231, 198, 233, 125, 63, 235, 20, 203, 41, 227, 202, 63, 235, 27, 240, - 116, 41, 227, 202, 63, 235, 27, 203, 41, 233, 125, 63, 235, 27, 240, 116, - 41, 233, 125, 63, 235, 27, 86, 235, 41, 240, 172, 63, 254, 184, 157, 61, - 125, 237, 60, 61, 125, 112, 61, 125, 112, 237, 62, 209, 240, 162, 231, - 199, 165, 231, 200, 112, 237, 62, 240, 162, 231, 199, 165, 231, 200, 112, - 47, 209, 240, 162, 231, 199, 165, 231, 200, 112, 47, 240, 162, 231, 199, - 165, 231, 200, 237, 153, 251, 238, 231, 242, 5, 231, 200, 112, 229, 165, - 165, 231, 200, 112, 240, 196, 229, 165, 165, 231, 200, 112, 86, 237, 204, - 235, 97, 112, 86, 240, 196, 235, 45, 237, 202, 237, 204, 235, 97, 237, - 202, 240, 196, 235, 45, 237, 60, 42, 229, 169, 231, 200, 237, 60, 41, - 229, 169, 231, 200, 237, 60, 231, 230, 42, 229, 169, 231, 200, 237, 60, - 231, 230, 41, 229, 169, 231, 200, 237, 60, 227, 185, 240, 117, 235, 22, - 231, 200, 237, 60, 227, 133, 240, 117, 235, 22, 231, 200, 112, 227, 185, - 240, 117, 231, 199, 165, 231, 200, 112, 227, 133, 240, 117, 231, 199, - 165, 231, 200, 112, 227, 185, 240, 117, 235, 22, 231, 200, 112, 227, 133, - 240, 117, 235, 22, 231, 200, 157, 42, 233, 89, 240, 158, 235, 22, 231, - 200, 157, 41, 233, 89, 240, 158, 235, 22, 231, 200, 237, 60, 42, 240, - 137, 235, 22, 231, 200, 237, 60, 41, 240, 137, 235, 22, 231, 200, 235, - 25, 233, 71, 33, 21, 118, 235, 25, 233, 71, 33, 21, 113, 235, 25, 233, - 71, 33, 21, 166, 235, 25, 233, 71, 33, 21, 158, 235, 25, 233, 71, 33, 21, - 173, 235, 25, 233, 71, 33, 21, 183, 235, 25, 233, 71, 33, 21, 194, 235, - 25, 233, 71, 33, 21, 187, 235, 25, 233, 71, 33, 21, 192, 235, 25, 233, - 71, 33, 65, 246, 179, 235, 25, 33, 30, 21, 118, 235, 25, 33, 30, 21, 113, - 235, 25, 33, 30, 21, 166, 235, 25, 33, 30, 21, 158, 235, 25, 33, 30, 21, - 173, 235, 25, 33, 30, 21, 183, 235, 25, 33, 30, 21, 194, 235, 25, 33, 30, - 21, 187, 235, 25, 33, 30, 21, 192, 235, 25, 33, 30, 65, 246, 179, 235, - 25, 233, 71, 33, 30, 21, 118, 235, 25, 233, 71, 33, 30, 21, 113, 235, 25, - 233, 71, 33, 30, 21, 166, 235, 25, 233, 71, 33, 30, 21, 158, 235, 25, - 233, 71, 33, 30, 21, 173, 235, 25, 233, 71, 33, 30, 21, 183, 235, 25, - 233, 71, 33, 30, 21, 194, 235, 25, 233, 71, 33, 30, 21, 187, 235, 25, - 233, 71, 33, 30, 21, 192, 235, 25, 233, 71, 33, 30, 65, 246, 179, 112, - 230, 123, 81, 58, 112, 240, 141, 246, 170, 58, 112, 81, 58, 112, 240, - 134, 246, 170, 58, 234, 87, 240, 143, 81, 58, 112, 229, 57, 81, 58, 225, - 107, 81, 58, 112, 225, 107, 81, 58, 237, 110, 225, 107, 81, 58, 112, 237, - 110, 225, 107, 81, 58, 86, 81, 58, 235, 226, 230, 119, 81, 230, 133, 235, - 226, 227, 157, 81, 230, 133, 86, 81, 230, 133, 112, 86, 237, 153, 231, - 191, 22, 81, 58, 112, 86, 237, 153, 235, 18, 22, 81, 58, 241, 250, 86, - 81, 58, 112, 225, 112, 86, 81, 58, 229, 55, 63, 81, 58, 230, 76, 63, 81, - 58, 229, 233, 233, 125, 63, 81, 58, 229, 20, 233, 125, 63, 81, 58, 112, - 203, 227, 135, 63, 81, 58, 112, 240, 116, 227, 135, 63, 81, 58, 235, 196, - 203, 227, 135, 63, 81, 58, 235, 196, 240, 116, 227, 135, 63, 81, 58, 33, - 112, 63, 81, 58, 227, 131, 81, 58, 225, 106, 240, 141, 246, 170, 58, 225, - 106, 81, 58, 225, 106, 240, 134, 246, 170, 58, 112, 225, 106, 240, 141, - 246, 170, 58, 112, 225, 106, 81, 58, 112, 225, 106, 240, 134, 246, 170, - 58, 227, 79, 81, 58, 112, 225, 103, 81, 58, 228, 221, 81, 58, 112, 228, - 221, 81, 58, 228, 0, 81, 58, 152, 229, 248, 237, 98, 63, 233, 80, 230, - 162, 3, 63, 231, 193, 227, 146, 246, 157, 235, 61, 246, 157, 231, 228, - 42, 233, 232, 253, 170, 230, 163, 41, 233, 232, 253, 170, 230, 163, 145, - 2, 56, 235, 57, 235, 37, 235, 54, 232, 38, 235, 61, 233, 83, 232, 38, - 233, 104, 61, 252, 219, 2, 169, 82, 182, 232, 114, 63, 235, 41, 2, 235, - 112, 246, 164, 22, 2, 246, 164, 235, 44, 106, 235, 71, 233, 139, 203, 41, - 237, 79, 2, 246, 164, 240, 116, 42, 237, 79, 2, 246, 164, 42, 241, 57, - 240, 253, 41, 241, 57, 240, 253, 246, 162, 241, 57, 240, 253, 240, 185, - 99, 240, 149, 240, 185, 103, 240, 149, 42, 22, 41, 47, 230, 141, 42, 22, - 41, 240, 149, 42, 232, 0, 182, 41, 240, 149, 182, 42, 240, 149, 99, 246, - 215, 2, 237, 40, 46, 236, 143, 235, 119, 254, 205, 169, 245, 139, 63, - 227, 194, 233, 90, 63, 227, 194, 235, 41, 2, 117, 240, 216, 63, 227, 194, - 235, 41, 2, 81, 240, 216, 63, 37, 2, 117, 240, 216, 63, 37, 2, 81, 240, - 216, 12, 42, 63, 37, 104, 12, 41, 63, 37, 104, 12, 42, 240, 117, 104, 12, - 41, 240, 117, 104, 12, 42, 47, 240, 117, 104, 12, 41, 47, 240, 117, 104, - 12, 42, 63, 233, 89, 240, 158, 104, 12, 41, 63, 233, 89, 240, 158, 104, - 12, 42, 231, 230, 228, 180, 12, 41, 231, 230, 228, 180, 235, 18, 231, - 212, 58, 231, 191, 231, 212, 58, 227, 184, 237, 253, 237, 40, 58, 231, - 209, 237, 253, 237, 40, 58, 41, 67, 2, 33, 240, 180, 182, 117, 58, 182, - 81, 58, 182, 42, 41, 58, 182, 117, 47, 58, 182, 81, 47, 58, 182, 42, 41, - 47, 58, 182, 117, 67, 246, 172, 125, 182, 81, 67, 246, 172, 125, 182, - 117, 47, 67, 246, 172, 125, 182, 81, 47, 67, 246, 172, 125, 182, 81, 233, - 156, 58, 39, 40, 238, 126, 39, 40, 236, 54, 39, 40, 236, 55, 39, 40, 234, - 58, 39, 40, 236, 56, 39, 40, 234, 59, 39, 40, 234, 65, 39, 40, 232, 115, - 39, 40, 236, 57, 39, 40, 234, 60, 39, 40, 234, 66, 39, 40, 232, 116, 39, - 40, 234, 71, 39, 40, 232, 121, 39, 40, 232, 136, 39, 40, 230, 247, 39, - 40, 236, 58, 39, 40, 234, 61, 39, 40, 234, 67, 39, 40, 232, 117, 39, 40, - 234, 72, 39, 40, 232, 122, 39, 40, 232, 137, 39, 40, 230, 248, 39, 40, - 234, 76, 39, 40, 232, 126, 39, 40, 232, 141, 39, 40, 230, 252, 39, 40, - 232, 151, 39, 40, 231, 6, 39, 40, 231, 26, 39, 40, 229, 253, 39, 40, 236, - 59, 39, 40, 234, 62, 39, 40, 234, 68, 39, 40, 232, 118, 39, 40, 234, 73, - 39, 40, 232, 123, 39, 40, 232, 138, 39, 40, 230, 249, 39, 40, 234, 77, - 39, 40, 232, 127, 39, 40, 232, 142, 39, 40, 230, 253, 39, 40, 232, 152, - 39, 40, 231, 7, 39, 40, 231, 27, 39, 40, 229, 254, 39, 40, 234, 80, 39, - 40, 232, 130, 39, 40, 232, 145, 39, 40, 231, 0, 39, 40, 232, 155, 39, 40, - 231, 10, 39, 40, 231, 30, 39, 40, 230, 1, 39, 40, 232, 161, 39, 40, 231, - 16, 39, 40, 231, 36, 39, 40, 230, 7, 39, 40, 231, 46, 39, 40, 230, 17, - 39, 40, 230, 32, 39, 40, 228, 243, 39, 40, 236, 60, 39, 40, 234, 63, 39, - 40, 234, 69, 39, 40, 232, 119, 39, 40, 234, 74, 39, 40, 232, 124, 39, 40, - 232, 139, 39, 40, 230, 250, 39, 40, 234, 78, 39, 40, 232, 128, 39, 40, - 232, 143, 39, 40, 230, 254, 39, 40, 232, 153, 39, 40, 231, 8, 39, 40, - 231, 28, 39, 40, 229, 255, 39, 40, 234, 81, 39, 40, 232, 131, 39, 40, - 232, 146, 39, 40, 231, 1, 39, 40, 232, 156, 39, 40, 231, 11, 39, 40, 231, - 31, 39, 40, 230, 2, 39, 40, 232, 162, 39, 40, 231, 17, 39, 40, 231, 37, - 39, 40, 230, 8, 39, 40, 231, 47, 39, 40, 230, 18, 39, 40, 230, 33, 39, - 40, 228, 244, 39, 40, 234, 83, 39, 40, 232, 133, 39, 40, 232, 148, 39, - 40, 231, 3, 39, 40, 232, 158, 39, 40, 231, 13, 39, 40, 231, 33, 39, 40, - 230, 4, 39, 40, 232, 164, 39, 40, 231, 19, 39, 40, 231, 39, 39, 40, 230, - 10, 39, 40, 231, 49, 39, 40, 230, 20, 39, 40, 230, 35, 39, 40, 228, 246, - 39, 40, 232, 167, 39, 40, 231, 22, 39, 40, 231, 42, 39, 40, 230, 13, 39, - 40, 231, 52, 39, 40, 230, 23, 39, 40, 230, 38, 39, 40, 228, 249, 39, 40, - 231, 56, 39, 40, 230, 27, 39, 40, 230, 42, 39, 40, 228, 253, 39, 40, 230, - 47, 39, 40, 229, 2, 39, 40, 229, 8, 39, 40, 227, 231, 39, 40, 236, 61, - 39, 40, 234, 64, 39, 40, 234, 70, 39, 40, 232, 120, 39, 40, 234, 75, 39, - 40, 232, 125, 39, 40, 232, 140, 39, 40, 230, 251, 39, 40, 234, 79, 39, - 40, 232, 129, 39, 40, 232, 144, 39, 40, 230, 255, 39, 40, 232, 154, 39, - 40, 231, 9, 39, 40, 231, 29, 39, 40, 230, 0, 39, 40, 234, 82, 39, 40, - 232, 132, 39, 40, 232, 147, 39, 40, 231, 2, 39, 40, 232, 157, 39, 40, - 231, 12, 39, 40, 231, 32, 39, 40, 230, 3, 39, 40, 232, 163, 39, 40, 231, - 18, 39, 40, 231, 38, 39, 40, 230, 9, 39, 40, 231, 48, 39, 40, 230, 19, - 39, 40, 230, 34, 39, 40, 228, 245, 39, 40, 234, 84, 39, 40, 232, 134, 39, - 40, 232, 149, 39, 40, 231, 4, 39, 40, 232, 159, 39, 40, 231, 14, 39, 40, - 231, 34, 39, 40, 230, 5, 39, 40, 232, 165, 39, 40, 231, 20, 39, 40, 231, - 40, 39, 40, 230, 11, 39, 40, 231, 50, 39, 40, 230, 21, 39, 40, 230, 36, - 39, 40, 228, 247, 39, 40, 232, 168, 39, 40, 231, 23, 39, 40, 231, 43, 39, - 40, 230, 14, 39, 40, 231, 53, 39, 40, 230, 24, 39, 40, 230, 39, 39, 40, - 228, 250, 39, 40, 231, 57, 39, 40, 230, 28, 39, 40, 230, 43, 39, 40, 228, - 254, 39, 40, 230, 48, 39, 40, 229, 3, 39, 40, 229, 9, 39, 40, 227, 232, - 39, 40, 234, 85, 39, 40, 232, 135, 39, 40, 232, 150, 39, 40, 231, 5, 39, - 40, 232, 160, 39, 40, 231, 15, 39, 40, 231, 35, 39, 40, 230, 6, 39, 40, - 232, 166, 39, 40, 231, 21, 39, 40, 231, 41, 39, 40, 230, 12, 39, 40, 231, - 51, 39, 40, 230, 22, 39, 40, 230, 37, 39, 40, 228, 248, 39, 40, 232, 169, - 39, 40, 231, 24, 39, 40, 231, 44, 39, 40, 230, 15, 39, 40, 231, 54, 39, - 40, 230, 25, 39, 40, 230, 40, 39, 40, 228, 251, 39, 40, 231, 58, 39, 40, - 230, 29, 39, 40, 230, 44, 39, 40, 228, 255, 39, 40, 230, 49, 39, 40, 229, - 4, 39, 40, 229, 10, 39, 40, 227, 233, 39, 40, 232, 170, 39, 40, 231, 25, - 39, 40, 231, 45, 39, 40, 230, 16, 39, 40, 231, 55, 39, 40, 230, 26, 39, - 40, 230, 41, 39, 40, 228, 252, 39, 40, 231, 59, 39, 40, 230, 30, 39, 40, - 230, 45, 39, 40, 229, 0, 39, 40, 230, 50, 39, 40, 229, 5, 39, 40, 229, - 11, 39, 40, 227, 234, 39, 40, 231, 60, 39, 40, 230, 31, 39, 40, 230, 46, - 39, 40, 229, 1, 39, 40, 230, 51, 39, 40, 229, 6, 39, 40, 229, 12, 39, 40, - 227, 235, 39, 40, 230, 52, 39, 40, 229, 7, 39, 40, 229, 13, 39, 40, 227, - 236, 39, 40, 229, 14, 39, 40, 227, 237, 39, 40, 227, 238, 39, 40, 227, - 162, 81, 230, 132, 67, 2, 61, 82, 81, 230, 132, 67, 2, 47, 61, 82, 117, - 47, 67, 2, 61, 82, 81, 47, 67, 2, 61, 82, 42, 41, 47, 67, 2, 61, 82, 81, - 230, 132, 67, 246, 172, 125, 117, 47, 67, 246, 172, 125, 81, 47, 67, 246, - 172, 125, 231, 191, 67, 2, 169, 82, 235, 18, 67, 2, 169, 82, 235, 18, - 237, 49, 58, 231, 191, 237, 49, 58, 117, 47, 246, 187, 58, 81, 47, 246, - 187, 58, 117, 237, 49, 246, 187, 58, 81, 237, 49, 246, 187, 58, 81, 230, - 132, 237, 49, 246, 187, 58, 81, 67, 2, 237, 50, 240, 214, 235, 18, 67, - 180, 125, 231, 191, 67, 180, 125, 81, 67, 2, 246, 237, 2, 61, 82, 81, 67, - 2, 246, 237, 2, 47, 61, 82, 81, 230, 132, 67, 2, 240, 133, 81, 230, 132, - 67, 2, 246, 237, 2, 61, 82, 81, 230, 132, 67, 2, 246, 237, 2, 47, 61, 82, - 117, 229, 178, 81, 229, 178, 117, 47, 229, 178, 81, 47, 229, 178, 117, - 67, 180, 86, 233, 90, 81, 67, 180, 86, 233, 90, 117, 67, 246, 172, 252, - 219, 180, 86, 233, 90, 81, 67, 246, 172, 252, 219, 180, 86, 233, 90, 240, - 134, 246, 184, 22, 240, 141, 246, 170, 58, 240, 134, 246, 170, 22, 240, - 141, 246, 184, 58, 240, 134, 246, 184, 67, 2, 88, 240, 134, 246, 170, 67, - 2, 88, 240, 141, 246, 170, 67, 2, 88, 240, 141, 246, 184, 67, 2, 88, 240, - 134, 246, 184, 67, 22, 240, 134, 246, 170, 58, 240, 134, 246, 170, 67, - 22, 240, 141, 246, 170, 58, 240, 141, 246, 170, 67, 22, 240, 141, 246, - 184, 58, 240, 141, 246, 184, 67, 22, 240, 134, 246, 184, 58, 237, 115, - 233, 74, 233, 77, 235, 84, 231, 236, 235, 84, 233, 74, 233, 77, 237, 115, - 231, 236, 240, 141, 246, 170, 67, 233, 77, 240, 134, 246, 170, 58, 240, - 134, 246, 170, 67, 233, 77, 240, 141, 246, 170, 58, 235, 84, 233, 74, - 233, 77, 240, 134, 246, 170, 58, 237, 115, 233, 74, 233, 77, 240, 141, - 246, 170, 58, 240, 134, 246, 170, 67, 233, 77, 240, 134, 246, 184, 58, - 240, 134, 246, 184, 67, 233, 77, 240, 134, 246, 170, 58, 247, 23, 67, - 233, 78, 233, 201, 237, 41, 67, 233, 78, 81, 247, 107, 235, 89, 233, 139, - 67, 233, 78, 81, 247, 107, 235, 89, 230, 134, 67, 233, 78, 231, 191, 247, - 107, 235, 89, 230, 143, 67, 233, 78, 231, 191, 247, 107, 235, 89, 229, - 177, 231, 136, 253, 29, 231, 209, 58, 232, 219, 253, 29, 227, 184, 58, - 252, 228, 253, 29, 227, 184, 58, 237, 59, 253, 29, 227, 184, 58, 252, - 228, 253, 29, 231, 209, 67, 2, 237, 124, 252, 228, 253, 29, 227, 184, 67, - 2, 240, 180, 203, 41, 228, 206, 231, 209, 58, 203, 42, 228, 206, 227, - 184, 58, 227, 184, 237, 58, 237, 40, 58, 231, 209, 237, 58, 237, 40, 58, - 81, 67, 64, 240, 125, 117, 58, 117, 67, 64, 240, 125, 81, 58, 240, 125, - 81, 67, 64, 117, 58, 81, 67, 2, 79, 51, 117, 67, 2, 79, 51, 81, 67, 235, - 42, 254, 184, 42, 41, 67, 235, 42, 3, 235, 20, 235, 18, 230, 132, 67, - 246, 172, 3, 235, 20, 42, 171, 99, 41, 171, 103, 233, 105, 42, 171, 103, - 41, 171, 99, 233, 105, 99, 171, 41, 103, 171, 42, 233, 105, 99, 171, 42, - 103, 171, 41, 233, 105, 42, 171, 99, 41, 171, 99, 233, 105, 99, 171, 41, - 103, 171, 41, 233, 105, 42, 171, 103, 41, 171, 103, 233, 105, 99, 171, - 42, 103, 171, 42, 233, 105, 117, 235, 14, 2, 171, 99, 180, 125, 81, 235, - 14, 2, 171, 99, 180, 125, 235, 18, 235, 14, 2, 171, 41, 180, 125, 231, - 191, 235, 14, 2, 171, 41, 180, 125, 117, 235, 14, 2, 171, 103, 180, 125, - 81, 235, 14, 2, 171, 103, 180, 125, 235, 18, 235, 14, 2, 171, 42, 180, - 125, 231, 191, 235, 14, 2, 171, 42, 180, 125, 117, 235, 14, 2, 171, 99, - 246, 172, 125, 81, 235, 14, 2, 171, 99, 246, 172, 125, 235, 18, 235, 14, - 2, 171, 41, 246, 172, 125, 231, 191, 235, 14, 2, 171, 41, 246, 172, 125, - 117, 235, 14, 2, 171, 103, 246, 172, 125, 81, 235, 14, 2, 171, 103, 246, - 172, 125, 235, 18, 235, 14, 2, 171, 42, 246, 172, 125, 231, 191, 235, 14, - 2, 171, 42, 246, 172, 125, 117, 235, 14, 2, 171, 99, 64, 117, 235, 14, 2, - 171, 240, 152, 235, 18, 235, 14, 2, 171, 42, 237, 94, 235, 18, 235, 14, - 2, 171, 237, 41, 81, 235, 14, 2, 171, 99, 64, 81, 235, 14, 2, 171, 240, - 152, 231, 191, 235, 14, 2, 171, 42, 237, 94, 231, 191, 235, 14, 2, 171, - 237, 41, 117, 235, 14, 2, 171, 99, 64, 81, 235, 14, 2, 171, 253, 19, 117, - 235, 14, 2, 171, 103, 64, 81, 235, 14, 2, 171, 240, 152, 81, 235, 14, 2, - 171, 99, 64, 117, 235, 14, 2, 171, 253, 19, 81, 235, 14, 2, 171, 103, 64, - 117, 235, 14, 2, 171, 240, 152, 117, 235, 14, 2, 171, 99, 64, 182, 240, - 151, 117, 235, 14, 2, 171, 103, 240, 144, 182, 240, 151, 81, 235, 14, 2, - 171, 99, 64, 182, 240, 151, 81, 235, 14, 2, 171, 103, 240, 144, 182, 240, - 151, 235, 18, 235, 14, 2, 171, 42, 237, 94, 231, 191, 235, 14, 2, 171, - 237, 41, 231, 191, 235, 14, 2, 171, 42, 237, 94, 235, 18, 235, 14, 2, - 171, 237, 41, 41, 47, 67, 2, 235, 98, 240, 228, 237, 51, 5, 64, 81, 58, - 240, 128, 233, 118, 64, 81, 58, 117, 67, 64, 240, 128, 231, 192, 81, 67, - 64, 240, 128, 231, 192, 81, 67, 64, 237, 78, 105, 96, 231, 190, 64, 117, - 58, 117, 67, 235, 42, 230, 128, 228, 175, 64, 81, 58, 237, 76, 64, 81, - 58, 117, 67, 235, 42, 235, 61, 233, 83, 64, 117, 58, 42, 247, 76, 240, - 133, 41, 247, 76, 240, 133, 99, 247, 76, 240, 133, 103, 247, 76, 240, - 133, 237, 49, 61, 252, 219, 230, 163, 255, 56, 150, 245, 194, 255, 56, - 150, 247, 219, 237, 66, 42, 63, 240, 137, 104, 41, 63, 240, 137, 104, 42, - 63, 228, 180, 41, 63, 228, 180, 255, 56, 150, 42, 240, 190, 104, 255, 56, - 150, 41, 240, 190, 104, 255, 56, 150, 42, 235, 151, 104, 255, 56, 150, - 41, 235, 151, 104, 42, 37, 235, 22, 2, 231, 197, 41, 37, 235, 22, 2, 231, - 197, 42, 37, 235, 22, 2, 247, 108, 254, 198, 252, 228, 235, 40, 41, 37, - 235, 22, 2, 247, 108, 254, 198, 237, 59, 235, 40, 42, 37, 235, 22, 2, - 247, 108, 254, 198, 237, 59, 235, 40, 41, 37, 235, 22, 2, 247, 108, 254, - 198, 252, 228, 235, 40, 42, 240, 117, 235, 22, 2, 246, 164, 41, 240, 117, - 235, 22, 2, 246, 164, 42, 253, 29, 231, 190, 104, 41, 253, 29, 228, 175, - 104, 47, 42, 253, 29, 228, 175, 104, 47, 41, 253, 29, 231, 190, 104, 42, - 86, 233, 89, 240, 158, 104, 41, 86, 233, 89, 240, 158, 104, 237, 50, 237, - 155, 61, 237, 170, 240, 138, 233, 99, 240, 117, 235, 71, 240, 132, 41, - 240, 117, 235, 30, 2, 235, 27, 233, 99, 41, 240, 117, 2, 246, 164, 240, - 117, 2, 255, 59, 235, 57, 240, 159, 237, 98, 232, 7, 240, 117, 235, 71, - 240, 132, 232, 7, 240, 117, 235, 71, 253, 19, 209, 237, 98, 200, 237, 98, - 240, 117, 2, 231, 197, 200, 240, 117, 2, 231, 197, 235, 78, 240, 117, - 235, 71, 253, 19, 235, 78, 240, 117, 235, 71, 240, 152, 233, 99, 240, - 117, 2, 246, 157, 253, 84, 237, 119, 254, 198, 67, 233, 78, 99, 22, 237, - 41, 233, 99, 240, 117, 2, 246, 157, 253, 84, 237, 119, 254, 198, 67, 233, - 78, 99, 22, 240, 132, 233, 99, 240, 117, 2, 246, 157, 253, 84, 237, 119, - 254, 198, 67, 233, 78, 103, 22, 237, 41, 233, 99, 240, 117, 2, 246, 157, - 253, 84, 237, 119, 254, 198, 67, 233, 78, 103, 22, 240, 132, 233, 99, - 240, 117, 2, 246, 157, 253, 84, 237, 119, 254, 198, 67, 233, 78, 41, 22, - 253, 19, 233, 99, 240, 117, 2, 246, 157, 253, 84, 237, 119, 254, 198, 67, - 233, 78, 42, 22, 253, 19, 233, 99, 240, 117, 2, 246, 157, 253, 84, 237, - 119, 254, 198, 67, 233, 78, 41, 22, 240, 152, 233, 99, 240, 117, 2, 246, - 157, 253, 84, 237, 119, 254, 198, 67, 233, 78, 42, 22, 240, 152, 200, - 240, 195, 248, 155, 240, 195, 253, 133, 2, 233, 95, 240, 195, 253, 133, - 2, 3, 237, 40, 46, 240, 195, 253, 133, 2, 41, 67, 46, 240, 195, 253, 133, - 2, 42, 67, 46, 237, 40, 2, 169, 125, 33, 61, 125, 33, 232, 2, 33, 235, - 37, 233, 104, 33, 227, 146, 237, 40, 235, 119, 254, 205, 169, 252, 219, - 22, 252, 228, 132, 235, 119, 254, 205, 61, 125, 237, 40, 2, 229, 151, - 254, 184, 33, 222, 227, 233, 130, 53, 99, 67, 235, 42, 235, 20, 33, 63, - 235, 45, 33, 235, 45, 33, 230, 128, 33, 227, 183, 237, 40, 2, 3, 237, 40, - 180, 252, 230, 237, 41, 237, 40, 2, 135, 169, 236, 244, 180, 252, 230, - 237, 41, 235, 51, 237, 115, 233, 74, 237, 84, 235, 51, 235, 84, 233, 74, - 237, 84, 235, 51, 231, 198, 235, 51, 3, 235, 20, 235, 51, 235, 27, 135, - 237, 184, 234, 229, 233, 80, 2, 56, 46, 233, 80, 2, 231, 197, 255, 59, - 254, 198, 231, 193, 233, 80, 2, 238, 46, 254, 217, 235, 110, 41, 233, 80, - 64, 42, 231, 193, 42, 233, 80, 237, 94, 61, 125, 61, 252, 219, 237, 94, - 41, 231, 193, 237, 233, 2, 42, 132, 237, 45, 237, 233, 2, 41, 132, 237, - 45, 86, 235, 154, 24, 2, 42, 132, 237, 45, 24, 2, 41, 132, 237, 45, 63, - 230, 167, 86, 230, 167, 42, 237, 193, 237, 155, 41, 237, 193, 237, 155, - 42, 47, 237, 193, 237, 155, 41, 47, 237, 193, 237, 155, 231, 83, 231, - 252, 254, 159, 107, 231, 252, 234, 129, 235, 194, 2, 61, 125, 229, 15, - 232, 0, 37, 2, 232, 102, 234, 179, 232, 208, 254, 29, 236, 229, 233, 101, - 237, 51, 5, 22, 235, 29, 232, 2, 237, 51, 5, 22, 235, 29, 233, 132, 2, - 240, 128, 46, 231, 239, 180, 22, 235, 29, 232, 2, 238, 250, 240, 20, 227, - 181, 227, 189, 233, 80, 2, 42, 132, 237, 45, 227, 189, 233, 80, 2, 41, - 132, 237, 45, 86, 235, 41, 2, 103, 58, 86, 233, 123, 63, 237, 40, 2, 103, - 58, 86, 237, 40, 2, 103, 58, 228, 185, 63, 235, 27, 228, 185, 86, 235, - 27, 228, 185, 63, 233, 90, 228, 185, 86, 233, 90, 228, 185, 63, 235, 20, - 228, 185, 86, 235, 20, 228, 2, 235, 37, 235, 54, 231, 192, 235, 54, 2, - 233, 95, 235, 37, 235, 54, 2, 169, 82, 253, 47, 233, 104, 253, 47, 235, - 37, 233, 104, 47, 240, 180, 237, 49, 240, 180, 227, 185, 237, 153, 240, - 117, 104, 227, 133, 237, 153, 240, 117, 104, 245, 254, 244, 147, 240, - 154, 33, 56, 231, 192, 240, 154, 33, 79, 231, 192, 240, 154, 33, 24, 231, - 192, 240, 154, 240, 182, 233, 118, 2, 246, 164, 240, 154, 240, 182, 233, - 118, 2, 240, 180, 240, 154, 37, 228, 183, 231, 192, 240, 154, 37, 240, - 182, 231, 192, 135, 235, 26, 22, 231, 192, 135, 235, 26, 145, 231, 192, - 240, 154, 24, 231, 192, 239, 118, 135, 247, 21, 232, 10, 2, 231, 208, - 231, 212, 233, 98, 231, 192, 238, 220, 248, 128, 231, 208, 233, 98, 2, - 47, 82, 233, 98, 236, 2, 2, 237, 84, 229, 236, 232, 196, 227, 184, 229, - 31, 246, 167, 229, 184, 2, 229, 211, 248, 129, 237, 194, 241, 63, 246, - 167, 229, 184, 2, 228, 206, 248, 129, 237, 194, 241, 63, 246, 167, 229, - 184, 190, 232, 207, 252, 230, 241, 63, 233, 98, 237, 194, 102, 240, 143, - 231, 192, 231, 128, 233, 98, 231, 192, 233, 98, 2, 117, 67, 2, 88, 233, - 98, 2, 24, 53, 233, 98, 2, 227, 186, 233, 98, 2, 237, 117, 233, 98, 2, - 233, 95, 233, 98, 2, 231, 197, 240, 253, 240, 185, 42, 233, 80, 231, 192, - 255, 56, 150, 237, 212, 228, 212, 255, 56, 150, 237, 212, 236, 188, 255, - 56, 150, 237, 212, 230, 91, 79, 5, 2, 3, 237, 40, 46, 79, 5, 2, 230, 125, - 237, 48, 46, 79, 5, 2, 240, 128, 46, 79, 5, 2, 56, 51, 79, 5, 2, 240, - 128, 51, 79, 5, 2, 231, 195, 113, 79, 5, 2, 86, 231, 193, 240, 172, 5, 2, - 240, 162, 46, 240, 172, 5, 2, 56, 51, 240, 172, 5, 2, 235, 84, 240, 169, - 240, 172, 5, 2, 237, 115, 240, 169, 79, 5, 254, 198, 42, 132, 235, 20, - 79, 5, 254, 198, 41, 132, 235, 20, 240, 74, 145, 240, 221, 233, 101, 227, - 134, 5, 2, 56, 46, 227, 134, 5, 2, 231, 197, 230, 147, 236, 193, 2, 237, - 59, 236, 33, 241, 247, 233, 101, 227, 134, 5, 254, 198, 42, 132, 235, 20, - 227, 134, 5, 254, 198, 41, 132, 235, 20, 33, 227, 134, 5, 2, 230, 125, - 235, 24, 227, 134, 5, 254, 198, 47, 235, 20, 33, 233, 130, 53, 79, 5, - 254, 198, 231, 193, 240, 172, 5, 254, 198, 231, 193, 227, 134, 5, 254, - 198, 231, 193, 233, 209, 233, 101, 233, 14, 233, 209, 233, 101, 255, 56, - 150, 231, 132, 228, 212, 228, 224, 145, 230, 178, 228, 183, 2, 246, 164, - 240, 182, 2, 240, 172, 53, 240, 182, 2, 233, 95, 228, 183, 2, 233, 95, - 228, 183, 2, 235, 26, 246, 230, 240, 182, 2, 235, 26, 253, 81, 240, 182, - 64, 227, 186, 228, 183, 64, 237, 117, 240, 182, 64, 252, 219, 64, 227, - 186, 228, 183, 64, 252, 219, 64, 237, 117, 240, 182, 237, 94, 22, 237, - 184, 2, 237, 117, 228, 183, 237, 94, 22, 237, 184, 2, 227, 186, 237, 58, - 240, 182, 2, 235, 207, 237, 58, 228, 183, 2, 235, 207, 47, 37, 227, 186, - 47, 37, 237, 117, 237, 58, 240, 182, 2, 238, 46, 22, 241, 247, 233, 101, - 235, 26, 22, 2, 56, 46, 235, 26, 145, 2, 56, 46, 47, 235, 26, 246, 230, - 47, 235, 26, 253, 81, 135, 228, 214, 235, 26, 246, 230, 135, 228, 214, - 235, 26, 253, 81, 235, 211, 240, 185, 253, 81, 235, 211, 240, 185, 246, - 230, 235, 26, 145, 229, 205, 235, 26, 246, 230, 235, 26, 22, 2, 237, 44, - 240, 214, 235, 26, 145, 2, 237, 44, 240, 214, 235, 26, 22, 2, 169, 240, - 151, 235, 26, 145, 2, 169, 240, 151, 235, 26, 22, 2, 47, 233, 95, 235, - 26, 22, 2, 231, 197, 235, 26, 22, 2, 47, 231, 197, 3, 254, 167, 2, 231, - 197, 235, 26, 145, 2, 47, 233, 95, 235, 26, 145, 2, 47, 231, 197, 255, - 56, 150, 238, 189, 223, 57, 255, 56, 150, 245, 113, 223, 57, 237, 51, 5, - 2, 56, 51, 231, 239, 2, 56, 46, 237, 49, 169, 252, 219, 2, 47, 61, 82, - 237, 49, 169, 252, 219, 2, 237, 49, 61, 82, 240, 128, 233, 118, 2, 56, - 46, 240, 128, 233, 118, 2, 237, 115, 240, 169, 235, 59, 240, 172, 234, - 221, 232, 100, 2, 56, 46, 237, 51, 2, 231, 198, 237, 78, 105, 180, 2, - 230, 125, 235, 24, 227, 187, 105, 145, 105, 96, 237, 51, 5, 64, 79, 53, - 79, 5, 64, 237, 51, 53, 237, 51, 5, 64, 240, 128, 231, 192, 47, 240, 194, - 237, 81, 135, 229, 196, 237, 51, 238, 58, 152, 229, 196, 237, 51, 238, - 58, 237, 51, 5, 2, 135, 197, 64, 22, 135, 197, 51, 230, 130, 2, 246, 160, - 197, 46, 231, 190, 2, 237, 40, 235, 57, 228, 175, 2, 237, 40, 235, 57, - 231, 190, 2, 233, 82, 165, 46, 228, 175, 2, 233, 82, 165, 46, 231, 190, - 145, 235, 29, 105, 96, 228, 175, 145, 235, 29, 105, 96, 231, 190, 145, - 235, 29, 105, 180, 2, 56, 235, 57, 228, 175, 145, 235, 29, 105, 180, 2, - 56, 235, 57, 231, 190, 145, 235, 29, 105, 180, 2, 56, 46, 228, 175, 145, - 235, 29, 105, 180, 2, 56, 46, 231, 190, 145, 235, 29, 105, 180, 2, 56, - 64, 237, 41, 228, 175, 145, 235, 29, 105, 180, 2, 56, 64, 240, 132, 231, - 190, 145, 228, 188, 228, 175, 145, 228, 188, 231, 190, 22, 229, 175, 190, - 105, 96, 228, 175, 22, 229, 175, 190, 105, 96, 231, 190, 22, 190, 228, - 188, 228, 175, 22, 190, 228, 188, 231, 190, 64, 229, 170, 105, 64, 227, - 183, 228, 175, 64, 229, 170, 105, 64, 230, 128, 231, 190, 64, 235, 59, - 145, 237, 81, 228, 175, 64, 235, 59, 145, 237, 81, 231, 190, 64, 235, 59, - 64, 227, 183, 228, 175, 64, 235, 59, 64, 230, 128, 231, 190, 64, 228, - 175, 64, 229, 170, 237, 81, 228, 175, 64, 231, 190, 64, 229, 170, 237, - 81, 231, 190, 64, 235, 29, 105, 64, 228, 175, 64, 235, 29, 237, 81, 228, - 175, 64, 235, 29, 105, 64, 231, 190, 64, 235, 29, 237, 81, 235, 29, 105, - 180, 145, 230, 128, 235, 29, 105, 180, 145, 227, 183, 235, 29, 105, 180, - 145, 231, 190, 2, 56, 235, 57, 235, 29, 105, 180, 145, 228, 175, 2, 56, - 235, 57, 229, 170, 105, 180, 145, 230, 128, 229, 170, 105, 180, 145, 227, - 183, 229, 170, 235, 29, 105, 180, 145, 230, 128, 229, 170, 235, 29, 105, - 180, 145, 227, 183, 235, 59, 145, 230, 128, 235, 59, 145, 227, 183, 235, - 59, 64, 231, 190, 64, 237, 51, 53, 235, 59, 64, 228, 175, 64, 237, 51, - 53, 47, 237, 162, 230, 128, 47, 237, 162, 227, 183, 47, 237, 162, 231, - 190, 2, 231, 197, 228, 175, 229, 205, 230, 128, 228, 175, 237, 94, 230, - 128, 231, 190, 237, 58, 254, 205, 237, 236, 228, 175, 237, 58, 254, 205, - 237, 236, 231, 190, 237, 58, 254, 205, 241, 112, 64, 235, 29, 237, 81, - 228, 175, 237, 58, 254, 205, 241, 112, 64, 235, 29, 237, 81, 235, 212, - 241, 78, 238, 18, 241, 78, 235, 212, 247, 212, 145, 105, 96, 238, 18, - 247, 212, 145, 105, 96, 237, 51, 5, 2, 242, 219, 46, 233, 106, 64, 229, - 175, 237, 51, 53, 233, 107, 64, 229, 175, 237, 51, 53, 233, 106, 64, 229, - 175, 190, 105, 96, 233, 107, 64, 229, 175, 190, 105, 96, 233, 106, 64, - 237, 51, 53, 233, 107, 64, 237, 51, 53, 233, 106, 64, 190, 105, 96, 233, - 107, 64, 190, 105, 96, 233, 106, 64, 237, 78, 105, 96, 233, 107, 64, 237, - 78, 105, 96, 233, 106, 64, 190, 237, 78, 105, 96, 233, 107, 64, 190, 237, - 78, 105, 96, 47, 232, 4, 47, 232, 9, 237, 76, 2, 246, 164, 233, 83, 2, - 246, 164, 237, 76, 2, 79, 5, 51, 233, 83, 2, 79, 5, 51, 237, 76, 2, 227, - 134, 5, 51, 233, 83, 2, 227, 134, 5, 51, 237, 76, 106, 145, 105, 180, 2, - 56, 46, 233, 83, 106, 145, 105, 180, 2, 56, 46, 237, 76, 106, 64, 237, - 51, 53, 233, 83, 106, 64, 237, 51, 53, 237, 76, 106, 64, 240, 128, 231, - 192, 233, 83, 106, 64, 240, 128, 231, 192, 237, 76, 106, 64, 237, 78, - 105, 96, 233, 83, 106, 64, 237, 78, 105, 96, 237, 76, 106, 64, 190, 105, - 96, 233, 83, 106, 64, 190, 105, 96, 37, 42, 246, 157, 77, 231, 192, 37, - 41, 246, 157, 77, 231, 192, 237, 58, 235, 61, 237, 58, 231, 228, 237, 58, - 237, 76, 145, 105, 96, 237, 58, 233, 83, 145, 105, 96, 237, 76, 64, 231, - 228, 233, 83, 64, 235, 61, 237, 76, 64, 235, 61, 233, 83, 64, 231, 228, - 233, 83, 237, 94, 235, 61, 233, 83, 237, 94, 22, 237, 184, 254, 205, 246, - 187, 2, 235, 61, 235, 44, 106, 235, 71, 230, 134, 232, 250, 2, 254, 157, - 247, 214, 230, 120, 227, 186, 234, 106, 230, 83, 240, 125, 42, 240, 149, - 240, 125, 103, 240, 149, 240, 125, 99, 240, 149, 228, 1, 2, 193, 61, 252, - 219, 237, 49, 41, 230, 141, 47, 61, 252, 219, 42, 230, 141, 61, 252, 219, - 47, 42, 230, 141, 47, 61, 252, 219, 47, 42, 230, 141, 182, 246, 187, 246, - 172, 42, 239, 103, 106, 47, 231, 210, 240, 125, 103, 246, 215, 2, 233, - 95, 240, 125, 99, 246, 215, 2, 231, 197, 240, 125, 99, 246, 215, 64, 240, - 125, 103, 240, 149, 47, 103, 240, 149, 47, 99, 240, 149, 47, 195, 190, - 53, 200, 47, 195, 190, 53, 246, 218, 190, 238, 188, 2, 200, 234, 166, - 237, 84, 61, 246, 167, 2, 237, 40, 46, 61, 246, 167, 2, 237, 40, 51, 103, - 246, 215, 2, 237, 40, 51, 233, 132, 2, 169, 82, 233, 132, 2, 240, 128, - 231, 192, 237, 49, 61, 252, 219, 237, 231, 231, 244, 237, 49, 61, 252, - 219, 2, 169, 82, 237, 49, 240, 194, 231, 192, 237, 49, 237, 162, 230, - 128, 237, 49, 237, 162, 227, 183, 229, 170, 235, 29, 231, 190, 145, 105, - 96, 229, 170, 235, 29, 228, 175, 145, 105, 96, 237, 49, 235, 54, 237, - 231, 231, 244, 240, 185, 237, 49, 61, 252, 219, 231, 192, 47, 235, 54, - 231, 192, 63, 61, 125, 240, 154, 63, 61, 125, 240, 134, 246, 170, 63, 58, - 240, 134, 246, 184, 63, 58, 240, 141, 246, 170, 63, 58, 240, 141, 246, - 184, 63, 58, 42, 41, 63, 58, 117, 86, 58, 235, 18, 86, 58, 231, 191, 86, - 58, 240, 134, 246, 170, 86, 58, 240, 134, 246, 184, 86, 58, 240, 141, - 246, 170, 86, 58, 240, 141, 246, 184, 86, 58, 42, 41, 86, 58, 99, 103, - 86, 58, 81, 67, 2, 253, 93, 230, 134, 81, 67, 2, 253, 93, 233, 139, 117, - 67, 2, 253, 93, 230, 134, 117, 67, 2, 253, 93, 233, 139, 37, 2, 252, 228, - 132, 237, 45, 37, 2, 237, 59, 132, 237, 45, 37, 2, 240, 116, 41, 233, 74, - 132, 237, 45, 37, 2, 203, 42, 233, 74, 132, 237, 45, 235, 41, 2, 42, 132, - 237, 45, 235, 41, 2, 41, 132, 237, 45, 235, 41, 2, 252, 228, 132, 237, - 45, 235, 41, 2, 237, 59, 132, 237, 45, 237, 50, 235, 27, 86, 240, 185, - 235, 27, 63, 240, 185, 235, 27, 86, 247, 114, 3, 235, 27, 63, 247, 114, - 3, 235, 27, 86, 231, 243, 63, 231, 243, 63, 233, 167, 86, 233, 167, 169, - 86, 233, 167, 86, 240, 185, 235, 20, 86, 237, 60, 233, 90, 63, 237, 60, - 233, 90, 86, 237, 60, 233, 123, 63, 237, 60, 233, 123, 86, 3, 233, 90, - 86, 3, 233, 123, 63, 3, 233, 123, 86, 169, 233, 149, 63, 169, 233, 149, - 86, 61, 233, 149, 63, 61, 233, 149, 42, 67, 2, 3, 235, 20, 152, 117, 235, - 73, 42, 67, 2, 33, 240, 180, 182, 117, 233, 156, 58, 117, 230, 132, 67, - 2, 61, 82, 117, 230, 132, 67, 2, 47, 61, 82, 117, 230, 132, 67, 246, 172, - 125, 117, 230, 132, 237, 49, 246, 187, 58, 117, 67, 2, 237, 50, 240, 214, - 117, 67, 2, 246, 237, 2, 61, 82, 117, 67, 2, 246, 237, 2, 47, 61, 82, - 117, 230, 132, 67, 2, 240, 133, 117, 230, 132, 67, 2, 246, 237, 2, 61, - 82, 117, 230, 132, 67, 2, 246, 237, 2, 47, 61, 82, 117, 67, 235, 42, 254, - 184, 247, 23, 67, 233, 78, 233, 201, 240, 132, 237, 51, 5, 64, 117, 58, - 235, 37, 240, 128, 233, 118, 64, 117, 58, 117, 67, 64, 235, 37, 237, 78, - 105, 96, 81, 67, 235, 42, 227, 183, 81, 67, 235, 42, 231, 228, 117, 231, - 212, 58, 81, 231, 212, 58, 235, 37, 240, 128, 233, 118, 64, 81, 58, 81, - 67, 64, 235, 37, 237, 78, 105, 96, 240, 128, 233, 118, 64, 117, 58, 117, - 67, 64, 237, 78, 105, 96, 117, 67, 64, 235, 37, 240, 128, 231, 192, 81, - 67, 64, 235, 37, 240, 128, 231, 192, 63, 237, 60, 240, 139, 86, 3, 240, - 139, 63, 3, 240, 139, 86, 227, 133, 231, 243, 63, 227, 133, 231, 243, - 115, 6, 1, 247, 246, 115, 6, 1, 241, 106, 115, 6, 1, 242, 17, 115, 6, 1, - 233, 207, 115, 6, 1, 237, 243, 115, 6, 1, 238, 82, 115, 6, 1, 233, 250, - 115, 6, 1, 237, 180, 115, 6, 1, 235, 235, 115, 6, 1, 240, 252, 115, 6, 1, - 59, 240, 252, 115, 6, 1, 74, 115, 6, 1, 235, 165, 115, 6, 1, 241, 170, - 115, 6, 1, 233, 216, 115, 6, 1, 233, 153, 115, 6, 1, 238, 27, 115, 6, 1, - 248, 125, 115, 6, 1, 235, 204, 115, 6, 1, 238, 42, 115, 6, 1, 238, 63, - 115, 6, 1, 235, 229, 115, 6, 1, 248, 187, 115, 6, 1, 237, 252, 115, 6, 1, - 241, 154, 115, 6, 1, 248, 126, 115, 6, 1, 253, 0, 115, 6, 1, 241, 241, - 115, 6, 1, 247, 58, 115, 6, 1, 235, 158, 115, 6, 1, 246, 165, 115, 6, 1, - 241, 24, 115, 6, 1, 242, 30, 115, 6, 1, 242, 29, 115, 6, 1, 235, 216, - 154, 115, 6, 1, 252, 233, 115, 6, 1, 3, 246, 183, 115, 6, 1, 3, 254, 21, - 2, 240, 133, 115, 6, 1, 252, 251, 115, 6, 1, 235, 95, 3, 246, 183, 115, - 6, 1, 253, 47, 246, 183, 115, 6, 1, 235, 95, 253, 47, 246, 183, 115, 6, - 1, 240, 226, 115, 6, 1, 233, 151, 115, 6, 1, 233, 237, 115, 6, 1, 230, - 218, 57, 115, 6, 1, 233, 214, 233, 153, 115, 3, 1, 247, 246, 115, 3, 1, - 241, 106, 115, 3, 1, 242, 17, 115, 3, 1, 233, 207, 115, 3, 1, 237, 243, - 115, 3, 1, 238, 82, 115, 3, 1, 233, 250, 115, 3, 1, 237, 180, 115, 3, 1, - 235, 235, 115, 3, 1, 240, 252, 115, 3, 1, 59, 240, 252, 115, 3, 1, 74, - 115, 3, 1, 235, 165, 115, 3, 1, 241, 170, 115, 3, 1, 233, 216, 115, 3, 1, - 233, 153, 115, 3, 1, 238, 27, 115, 3, 1, 248, 125, 115, 3, 1, 235, 204, - 115, 3, 1, 238, 42, 115, 3, 1, 238, 63, 115, 3, 1, 235, 229, 115, 3, 1, - 248, 187, 115, 3, 1, 237, 252, 115, 3, 1, 241, 154, 115, 3, 1, 248, 126, - 115, 3, 1, 253, 0, 115, 3, 1, 241, 241, 115, 3, 1, 247, 58, 115, 3, 1, - 235, 158, 115, 3, 1, 246, 165, 115, 3, 1, 241, 24, 115, 3, 1, 242, 30, - 115, 3, 1, 242, 29, 115, 3, 1, 235, 216, 154, 115, 3, 1, 252, 233, 115, - 3, 1, 3, 246, 183, 115, 3, 1, 3, 254, 21, 2, 240, 133, 115, 3, 1, 252, - 251, 115, 3, 1, 235, 95, 3, 246, 183, 115, 3, 1, 253, 47, 246, 183, 115, - 3, 1, 235, 95, 253, 47, 246, 183, 115, 3, 1, 240, 226, 115, 3, 1, 233, - 151, 115, 3, 1, 233, 237, 115, 3, 1, 230, 218, 57, 115, 3, 1, 233, 214, - 233, 153, 7, 6, 1, 255, 58, 2, 47, 125, 7, 3, 1, 255, 58, 2, 47, 125, 7, - 6, 1, 255, 58, 2, 237, 44, 205, 7, 6, 1, 255, 70, 2, 82, 7, 6, 1, 255, - 57, 2, 240, 133, 7, 3, 1, 102, 2, 82, 7, 3, 1, 255, 61, 2, 233, 74, 82, - 7, 6, 1, 255, 66, 2, 230, 126, 7, 3, 1, 255, 66, 2, 230, 126, 7, 6, 1, - 255, 67, 2, 230, 126, 7, 3, 1, 255, 67, 2, 230, 126, 7, 6, 1, 255, 56, 2, - 230, 126, 7, 3, 1, 255, 56, 2, 230, 126, 7, 6, 1, 237, 71, 7, 6, 1, 255, - 68, 2, 88, 7, 6, 1, 209, 57, 7, 3, 1, 255, 69, 2, 41, 88, 7, 6, 1, 255, - 71, 2, 88, 7, 3, 1, 255, 71, 2, 88, 7, 3, 1, 255, 69, 2, 240, 168, 7, 6, - 1, 132, 212, 7, 3, 1, 132, 212, 7, 3, 1, 234, 238, 246, 198, 7, 3, 1, - 161, 2, 238, 28, 7, 3, 1, 209, 255, 57, 2, 240, 133, 7, 3, 1, 130, 2, - 184, 246, 174, 235, 57, 7, 1, 3, 6, 209, 72, 7, 231, 195, 3, 1, 254, 192, - 52, 1, 6, 196, 70, 6, 1, 241, 93, 70, 3, 1, 241, 93, 70, 6, 1, 242, 20, - 70, 3, 1, 242, 20, 70, 6, 1, 237, 61, 70, 3, 1, 237, 61, 70, 6, 1, 237, - 237, 70, 3, 1, 237, 237, 70, 6, 1, 247, 73, 70, 3, 1, 247, 73, 70, 6, 1, - 248, 165, 70, 3, 1, 248, 165, 70, 6, 1, 242, 37, 70, 3, 1, 242, 37, 70, - 6, 1, 241, 150, 70, 3, 1, 241, 150, 70, 6, 1, 235, 223, 70, 3, 1, 235, - 223, 70, 6, 1, 238, 11, 70, 3, 1, 238, 11, 70, 6, 1, 240, 255, 70, 3, 1, - 240, 255, 70, 6, 1, 238, 19, 70, 3, 1, 238, 19, 70, 6, 1, 252, 239, 70, - 3, 1, 252, 239, 70, 6, 1, 252, 248, 70, 3, 1, 252, 248, 70, 6, 1, 247, - 83, 70, 3, 1, 247, 83, 70, 6, 1, 73, 70, 3, 1, 73, 70, 6, 1, 252, 223, - 70, 3, 1, 252, 223, 70, 6, 1, 252, 246, 70, 3, 1, 252, 246, 70, 6, 1, - 241, 74, 70, 3, 1, 241, 74, 70, 6, 1, 246, 212, 70, 3, 1, 246, 212, 70, - 6, 1, 253, 197, 70, 3, 1, 253, 197, 70, 6, 1, 253, 88, 70, 3, 1, 253, 88, - 70, 6, 1, 247, 157, 70, 3, 1, 247, 157, 70, 6, 1, 246, 204, 70, 3, 1, - 246, 204, 70, 6, 1, 247, 98, 70, 3, 1, 247, 98, 70, 6, 1, 231, 216, 240, - 174, 70, 3, 1, 231, 216, 240, 174, 70, 6, 1, 84, 70, 246, 224, 70, 3, 1, - 84, 70, 246, 224, 70, 6, 1, 227, 191, 247, 73, 70, 3, 1, 227, 191, 247, - 73, 70, 6, 1, 231, 216, 240, 255, 70, 3, 1, 231, 216, 240, 255, 70, 6, 1, - 231, 216, 252, 248, 70, 3, 1, 231, 216, 252, 248, 70, 6, 1, 227, 191, - 252, 248, 70, 3, 1, 227, 191, 252, 248, 70, 6, 1, 84, 70, 247, 98, 70, 3, - 1, 84, 70, 247, 98, 70, 6, 1, 237, 143, 70, 3, 1, 237, 143, 70, 6, 1, - 235, 117, 240, 212, 70, 3, 1, 235, 117, 240, 212, 70, 6, 1, 84, 70, 240, - 212, 70, 3, 1, 84, 70, 240, 212, 70, 6, 1, 84, 70, 246, 232, 70, 3, 1, - 84, 70, 246, 232, 70, 6, 1, 233, 184, 241, 1, 70, 3, 1, 233, 184, 241, 1, - 70, 6, 1, 231, 216, 240, 209, 70, 3, 1, 231, 216, 240, 209, 70, 6, 1, 84, - 70, 240, 209, 70, 3, 1, 84, 70, 240, 209, 70, 6, 1, 84, 70, 154, 70, 3, - 1, 84, 70, 154, 70, 6, 1, 233, 213, 154, 70, 3, 1, 233, 213, 154, 70, 6, - 1, 84, 70, 248, 59, 70, 3, 1, 84, 70, 248, 59, 70, 6, 1, 84, 70, 247, - 147, 70, 3, 1, 84, 70, 247, 147, 70, 6, 1, 84, 70, 235, 93, 70, 3, 1, 84, - 70, 235, 93, 70, 6, 1, 84, 70, 248, 29, 70, 3, 1, 84, 70, 248, 29, 70, 6, - 1, 84, 70, 237, 146, 70, 3, 1, 84, 70, 237, 146, 70, 6, 1, 84, 237, 92, - 237, 146, 70, 3, 1, 84, 237, 92, 237, 146, 70, 6, 1, 84, 237, 92, 247, - 182, 70, 3, 1, 84, 237, 92, 247, 182, 70, 6, 1, 84, 237, 92, 247, 44, 70, - 3, 1, 84, 237, 92, 247, 44, 70, 6, 1, 84, 237, 92, 247, 225, 70, 3, 1, - 84, 237, 92, 247, 225, 70, 14, 248, 78, 70, 14, 255, 11, 252, 246, 70, - 14, 254, 200, 252, 246, 70, 14, 234, 230, 70, 14, 254, 155, 252, 246, 70, - 14, 254, 80, 252, 246, 70, 14, 245, 167, 241, 74, 70, 84, 237, 92, 246, - 162, 240, 121, 70, 84, 237, 92, 237, 242, 233, 82, 76, 70, 84, 237, 92, - 234, 128, 233, 82, 76, 70, 84, 237, 92, 242, 19, 233, 140, 70, 233, 76, - 168, 240, 170, 70, 246, 162, 240, 121, 70, 227, 255, 233, 140, 87, 3, 1, - 253, 5, 87, 3, 1, 247, 121, 87, 3, 1, 247, 32, 87, 3, 1, 247, 131, 87, 3, - 1, 252, 232, 87, 3, 1, 247, 222, 87, 3, 1, 247, 237, 87, 3, 1, 247, 209, - 87, 3, 1, 253, 79, 87, 3, 1, 247, 39, 87, 3, 1, 247, 167, 87, 3, 1, 247, - 4, 87, 3, 1, 247, 92, 87, 3, 1, 253, 106, 87, 3, 1, 247, 187, 87, 3, 1, - 241, 90, 87, 3, 1, 247, 194, 87, 3, 1, 247, 49, 87, 3, 1, 247, 56, 87, 3, - 1, 253, 121, 87, 3, 1, 241, 61, 87, 3, 1, 241, 46, 87, 3, 1, 241, 39, 87, - 3, 1, 247, 193, 87, 3, 1, 240, 203, 87, 3, 1, 241, 32, 87, 3, 1, 246, - 241, 87, 3, 1, 247, 153, 87, 3, 1, 247, 125, 87, 3, 1, 241, 31, 87, 3, 1, - 247, 228, 87, 3, 1, 241, 44, 87, 3, 1, 247, 145, 87, 3, 1, 252, 252, 87, - 3, 1, 247, 81, 87, 3, 1, 252, 250, 87, 3, 1, 247, 146, 87, 3, 1, 247, - 150, 221, 1, 191, 221, 1, 252, 134, 221, 1, 246, 75, 221, 1, 252, 137, - 221, 1, 240, 94, 221, 1, 237, 230, 235, 143, 248, 196, 221, 1, 248, 196, - 221, 1, 252, 135, 221, 1, 246, 78, 221, 1, 246, 77, 221, 1, 240, 93, 221, - 1, 252, 148, 221, 1, 252, 136, 221, 1, 247, 231, 221, 1, 237, 122, 247, - 231, 221, 1, 240, 95, 221, 1, 247, 230, 221, 1, 237, 230, 235, 143, 247, - 230, 221, 1, 237, 122, 247, 230, 221, 1, 246, 80, 221, 1, 247, 117, 221, - 1, 242, 28, 221, 1, 237, 122, 242, 28, 221, 1, 248, 198, 221, 1, 237, - 122, 248, 198, 221, 1, 253, 28, 221, 1, 241, 86, 221, 1, 235, 240, 241, - 86, 221, 1, 237, 122, 241, 86, 221, 1, 252, 138, 221, 1, 252, 139, 221, - 1, 248, 197, 221, 1, 237, 122, 246, 79, 221, 1, 237, 122, 240, 242, 221, - 1, 252, 140, 221, 1, 252, 233, 221, 1, 252, 141, 221, 1, 246, 81, 221, 1, - 241, 85, 221, 1, 237, 122, 241, 85, 221, 1, 248, 243, 241, 85, 221, 1, - 252, 142, 221, 1, 246, 83, 221, 1, 246, 82, 221, 1, 247, 25, 221, 1, 246, - 84, 221, 1, 246, 76, 221, 1, 246, 85, 221, 1, 252, 143, 221, 1, 252, 144, - 221, 1, 252, 145, 221, 1, 248, 199, 221, 1, 231, 176, 248, 199, 221, 1, - 246, 86, 221, 52, 1, 227, 249, 76, 25, 4, 250, 227, 25, 4, 251, 21, 25, - 4, 251, 187, 25, 4, 251, 230, 25, 4, 245, 170, 25, 4, 249, 125, 25, 4, - 252, 26, 25, 4, 249, 162, 25, 4, 251, 69, 25, 4, 245, 25, 25, 4, 235, 31, - 253, 253, 25, 4, 252, 184, 25, 4, 249, 202, 25, 4, 243, 43, 25, 4, 250, - 136, 25, 4, 245, 246, 25, 4, 242, 251, 25, 4, 245, 70, 25, 4, 251, 113, - 25, 4, 243, 140, 25, 4, 243, 142, 25, 4, 238, 245, 25, 4, 243, 141, 25, - 4, 246, 190, 25, 4, 247, 204, 25, 4, 247, 202, 25, 4, 245, 196, 25, 4, - 245, 200, 25, 4, 248, 166, 25, 4, 247, 203, 25, 4, 249, 146, 25, 4, 249, - 150, 25, 4, 249, 148, 25, 4, 242, 236, 25, 4, 242, 237, 25, 4, 249, 147, - 25, 4, 249, 149, 25, 4, 248, 214, 25, 4, 248, 218, 25, 4, 248, 216, 25, - 4, 246, 136, 25, 4, 246, 140, 25, 4, 248, 215, 25, 4, 248, 217, 25, 4, - 242, 238, 25, 4, 242, 241, 25, 4, 242, 239, 25, 4, 238, 139, 25, 4, 238, - 140, 25, 4, 241, 30, 25, 4, 242, 240, 25, 4, 251, 157, 25, 4, 251, 164, - 25, 4, 251, 159, 25, 4, 245, 108, 25, 4, 245, 109, 25, 4, 251, 158, 25, - 4, 251, 160, 25, 4, 250, 199, 25, 4, 250, 203, 25, 4, 250, 201, 25, 4, - 244, 81, 25, 4, 244, 82, 25, 4, 250, 200, 25, 4, 250, 202, 25, 4, 252, - 125, 25, 4, 252, 132, 25, 4, 252, 127, 25, 4, 246, 70, 25, 4, 246, 71, - 25, 4, 252, 126, 25, 4, 252, 128, 25, 4, 250, 53, 25, 4, 250, 58, 25, 4, - 250, 56, 25, 4, 243, 165, 25, 4, 243, 166, 25, 4, 250, 54, 25, 4, 250, - 57, 36, 28, 1, 253, 73, 36, 28, 1, 253, 95, 36, 28, 1, 247, 13, 36, 28, - 1, 253, 20, 36, 28, 1, 246, 251, 36, 28, 1, 253, 46, 36, 28, 1, 177, 36, - 28, 1, 253, 58, 36, 28, 1, 253, 87, 36, 28, 1, 252, 232, 36, 28, 1, 73, - 36, 28, 1, 253, 0, 36, 28, 1, 253, 99, 36, 28, 1, 253, 116, 36, 28, 1, - 253, 9, 36, 28, 1, 154, 36, 28, 1, 246, 248, 36, 28, 1, 246, 217, 36, 28, - 1, 246, 165, 36, 28, 1, 237, 215, 36, 28, 1, 240, 226, 36, 28, 1, 238, - 206, 36, 28, 1, 57, 36, 28, 1, 253, 77, 36, 28, 1, 237, 201, 36, 28, 1, - 231, 254, 253, 137, 36, 28, 1, 247, 25, 36, 28, 1, 252, 233, 36, 28, 1, - 233, 93, 57, 36, 28, 1, 237, 102, 246, 183, 36, 28, 1, 253, 47, 246, 183, - 36, 28, 1, 233, 93, 253, 47, 246, 183, 41, 240, 117, 228, 186, 235, 70, - 41, 240, 117, 237, 50, 228, 186, 235, 70, 42, 228, 186, 104, 41, 228, - 186, 104, 42, 237, 50, 228, 186, 104, 41, 237, 50, 228, 186, 104, 237, - 105, 227, 206, 235, 70, 237, 105, 237, 50, 227, 206, 235, 70, 237, 50, - 227, 199, 235, 70, 42, 227, 199, 104, 41, 227, 199, 104, 237, 105, 235, - 27, 42, 237, 105, 233, 223, 104, 41, 237, 105, 233, 223, 104, 232, 177, - 234, 36, 228, 203, 237, 251, 228, 203, 200, 237, 251, 228, 203, 227, 243, - 237, 50, 236, 172, 231, 191, 235, 146, 235, 18, 235, 146, 237, 50, 227, - 133, 237, 98, 47, 235, 78, 235, 69, 233, 70, 228, 213, 251, 102, 235, - 155, 238, 10, 2, 219, 240, 128, 2, 246, 174, 46, 42, 184, 230, 192, 104, - 41, 184, 230, 192, 104, 240, 128, 2, 56, 46, 240, 128, 2, 56, 51, 42, 61, - 252, 219, 2, 237, 190, 41, 61, 252, 219, 2, 237, 190, 252, 228, 42, 132, - 104, 252, 228, 41, 132, 104, 237, 59, 42, 132, 104, 237, 59, 41, 132, - 104, 42, 233, 116, 97, 104, 41, 233, 116, 97, 104, 42, 47, 228, 180, 41, - 47, 228, 180, 135, 197, 107, 168, 56, 228, 182, 168, 56, 107, 135, 197, - 228, 182, 235, 51, 246, 160, 56, 228, 182, 246, 159, 56, 76, 200, 233, - 82, 76, 61, 205, 246, 174, 237, 209, 9, 29, 236, 200, 9, 29, 237, 198, 9, - 29, 237, 145, 118, 9, 29, 237, 145, 113, 9, 29, 237, 145, 166, 9, 29, - 236, 186, 9, 29, 246, 231, 9, 29, 238, 70, 9, 29, 241, 174, 118, 9, 29, - 241, 174, 113, 9, 29, 229, 197, 9, 29, 241, 232, 9, 29, 3, 118, 9, 29, 3, - 113, 9, 29, 247, 85, 118, 9, 29, 247, 85, 113, 9, 29, 247, 85, 166, 9, - 29, 247, 85, 158, 9, 29, 240, 7, 9, 29, 235, 225, 9, 29, 241, 248, 118, - 9, 29, 241, 248, 113, 9, 29, 240, 196, 118, 9, 29, 240, 196, 113, 9, 29, - 240, 251, 9, 29, 247, 196, 9, 29, 238, 149, 9, 29, 247, 54, 9, 29, 240, - 211, 9, 29, 237, 240, 9, 29, 236, 159, 9, 29, 232, 97, 9, 29, 242, 23, - 118, 9, 29, 242, 23, 113, 9, 29, 240, 207, 9, 29, 254, 2, 118, 9, 29, - 254, 2, 113, 9, 29, 230, 149, 132, 248, 180, 238, 76, 9, 29, 247, 127, 9, - 29, 248, 31, 9, 29, 241, 163, 9, 29, 247, 255, 106, 237, 199, 9, 29, 248, - 36, 9, 29, 238, 65, 118, 9, 29, 238, 65, 113, 9, 29, 235, 109, 9, 29, - 241, 73, 9, 29, 228, 181, 241, 73, 9, 29, 253, 154, 118, 9, 29, 253, 154, - 113, 9, 29, 253, 154, 166, 9, 29, 253, 154, 158, 9, 29, 244, 121, 9, 29, - 238, 50, 9, 29, 247, 195, 9, 29, 248, 35, 9, 29, 248, 123, 9, 29, 241, - 105, 118, 9, 29, 241, 105, 113, 9, 29, 241, 189, 9, 29, 235, 192, 9, 29, - 241, 41, 118, 9, 29, 241, 41, 113, 9, 29, 241, 41, 166, 9, 29, 238, 74, - 9, 29, 233, 194, 9, 29, 246, 184, 118, 9, 29, 246, 184, 113, 9, 29, 228, - 181, 247, 50, 9, 29, 230, 149, 240, 179, 9, 29, 240, 179, 9, 29, 228, - 181, 235, 215, 9, 29, 228, 181, 238, 52, 9, 29, 241, 38, 9, 29, 228, 181, - 241, 108, 9, 29, 230, 149, 242, 21, 9, 29, 247, 224, 118, 9, 29, 247, - 224, 113, 9, 29, 241, 110, 9, 29, 228, 181, 241, 40, 9, 29, 182, 118, 9, - 29, 182, 113, 9, 29, 228, 181, 241, 4, 9, 29, 228, 181, 241, 137, 9, 29, - 241, 195, 118, 9, 29, 241, 195, 113, 9, 29, 241, 219, 9, 29, 241, 102, 9, - 29, 228, 181, 238, 71, 233, 171, 9, 29, 228, 181, 241, 179, 9, 29, 228, - 181, 240, 199, 9, 29, 228, 181, 248, 38, 9, 29, 253, 175, 118, 9, 29, - 253, 175, 113, 9, 29, 253, 175, 166, 9, 29, 228, 181, 247, 136, 9, 29, - 240, 228, 9, 29, 228, 181, 238, 8, 9, 29, 241, 103, 9, 29, 238, 0, 9, 29, - 228, 181, 241, 130, 9, 29, 228, 181, 241, 27, 9, 29, 228, 181, 241, 231, - 9, 29, 230, 149, 237, 224, 9, 29, 230, 149, 235, 232, 9, 29, 228, 181, - 241, 134, 9, 29, 228, 191, 241, 37, 9, 29, 228, 181, 241, 37, 9, 29, 228, - 191, 237, 221, 9, 29, 228, 181, 237, 221, 9, 29, 228, 191, 235, 74, 9, - 29, 228, 181, 235, 74, 9, 29, 235, 105, 9, 29, 228, 191, 235, 105, 9, 29, - 228, 181, 235, 105, 49, 29, 118, 49, 29, 240, 138, 49, 29, 246, 164, 49, - 29, 237, 84, 49, 29, 236, 213, 49, 29, 88, 49, 29, 113, 49, 29, 248, 92, - 49, 29, 247, 4, 49, 29, 244, 93, 49, 29, 238, 202, 49, 29, 187, 49, 29, - 103, 246, 231, 49, 29, 238, 162, 49, 29, 248, 66, 49, 29, 238, 70, 49, - 29, 246, 157, 246, 231, 49, 29, 239, 72, 49, 29, 238, 36, 49, 29, 246, - 59, 49, 29, 240, 13, 49, 29, 41, 246, 157, 246, 231, 49, 29, 239, 9, 230, - 164, 49, 29, 246, 179, 49, 29, 229, 197, 49, 29, 241, 232, 49, 29, 237, - 198, 49, 29, 234, 199, 49, 29, 238, 90, 49, 29, 238, 26, 49, 29, 230, - 164, 49, 29, 237, 99, 49, 29, 234, 216, 49, 29, 253, 76, 49, 29, 255, 27, - 236, 233, 49, 29, 234, 99, 49, 29, 249, 119, 49, 29, 237, 225, 49, 29, - 237, 235, 49, 29, 245, 119, 49, 29, 244, 8, 49, 29, 237, 216, 49, 29, - 244, 89, 49, 29, 236, 37, 49, 29, 236, 239, 49, 29, 231, 255, 49, 29, - 239, 224, 49, 29, 246, 58, 49, 29, 234, 176, 49, 29, 237, 13, 49, 29, - 249, 208, 49, 29, 240, 125, 235, 225, 49, 29, 237, 50, 237, 198, 49, 29, - 182, 236, 243, 49, 29, 135, 239, 5, 49, 29, 239, 250, 49, 29, 247, 68, - 49, 29, 240, 8, 49, 29, 234, 23, 49, 29, 245, 218, 49, 29, 237, 204, 49, - 29, 234, 116, 49, 29, 243, 78, 49, 29, 240, 251, 49, 29, 235, 155, 49, - 29, 247, 196, 49, 29, 236, 211, 49, 29, 236, 51, 49, 29, 247, 244, 49, - 29, 235, 27, 49, 29, 247, 184, 49, 29, 247, 54, 49, 29, 251, 214, 49, 29, - 240, 211, 49, 29, 241, 81, 49, 29, 244, 86, 49, 29, 240, 121, 49, 29, - 237, 240, 49, 29, 237, 28, 49, 29, 254, 246, 247, 184, 49, 29, 234, 33, - 49, 29, 248, 40, 49, 29, 243, 12, 49, 29, 240, 21, 49, 29, 237, 168, 49, - 29, 240, 207, 49, 29, 243, 13, 49, 29, 236, 75, 49, 29, 47, 254, 184, 49, - 29, 132, 248, 180, 238, 76, 49, 29, 240, 2, 49, 29, 243, 106, 49, 29, - 247, 127, 49, 29, 248, 31, 49, 29, 233, 0, 49, 29, 241, 163, 49, 29, 239, - 102, 49, 29, 245, 252, 49, 29, 240, 24, 49, 29, 244, 103, 49, 29, 252, - 65, 49, 29, 238, 216, 49, 29, 247, 255, 106, 237, 199, 49, 29, 233, 26, - 49, 29, 237, 50, 245, 240, 49, 29, 237, 90, 49, 29, 245, 188, 49, 29, - 240, 156, 49, 29, 248, 36, 49, 29, 238, 64, 49, 29, 58, 49, 29, 240, 22, - 49, 29, 236, 237, 49, 29, 240, 46, 49, 29, 238, 252, 49, 29, 242, 234, - 49, 29, 240, 19, 49, 29, 235, 109, 49, 29, 245, 115, 49, 29, 241, 73, 49, - 29, 250, 126, 49, 29, 251, 51, 49, 29, 238, 50, 49, 29, 234, 102, 49, 29, - 248, 123, 49, 29, 246, 230, 49, 29, 245, 78, 49, 29, 247, 135, 49, 29, - 238, 132, 49, 29, 241, 189, 49, 29, 232, 231, 49, 29, 241, 233, 49, 29, - 235, 251, 49, 29, 235, 192, 49, 29, 235, 142, 49, 29, 236, 176, 49, 29, - 242, 211, 49, 29, 233, 31, 49, 29, 238, 158, 49, 29, 238, 254, 49, 29, - 238, 74, 49, 29, 236, 113, 49, 29, 238, 127, 49, 29, 247, 224, 230, 164, - 49, 29, 233, 194, 49, 29, 246, 55, 49, 29, 247, 50, 49, 29, 240, 179, 49, - 29, 235, 215, 49, 29, 237, 20, 49, 29, 242, 196, 49, 29, 251, 109, 49, - 29, 236, 4, 49, 29, 238, 52, 49, 29, 251, 176, 49, 29, 251, 195, 49, 29, - 241, 38, 49, 29, 242, 212, 49, 29, 241, 108, 49, 29, 236, 12, 49, 29, - 234, 164, 49, 29, 242, 21, 49, 29, 241, 110, 49, 29, 241, 84, 49, 29, - 228, 241, 49, 29, 235, 7, 49, 29, 241, 40, 49, 29, 241, 4, 49, 29, 241, - 137, 49, 29, 239, 120, 49, 29, 240, 1, 49, 29, 240, 125, 240, 27, 241, - 27, 49, 29, 241, 219, 49, 29, 241, 102, 49, 29, 240, 88, 49, 29, 240, - 223, 49, 29, 233, 171, 49, 29, 238, 71, 233, 171, 49, 29, 244, 92, 49, - 29, 240, 9, 49, 29, 241, 179, 49, 29, 240, 199, 49, 29, 248, 38, 49, 29, - 247, 136, 49, 29, 240, 228, 49, 29, 232, 194, 49, 29, 238, 8, 49, 29, - 241, 103, 49, 29, 245, 237, 49, 29, 243, 169, 49, 29, 238, 218, 49, 29, - 230, 98, 241, 84, 49, 29, 232, 16, 49, 29, 238, 0, 49, 29, 241, 130, 49, - 29, 241, 27, 49, 29, 241, 231, 49, 29, 241, 119, 49, 29, 237, 224, 49, - 29, 243, 171, 49, 29, 235, 232, 49, 29, 236, 156, 49, 29, 237, 45, 49, - 29, 230, 54, 49, 29, 241, 134, 49, 29, 237, 9, 49, 29, 243, 81, 49, 29, - 248, 146, 49, 29, 244, 251, 49, 29, 241, 37, 49, 29, 237, 221, 49, 29, - 235, 74, 49, 29, 235, 105, 49, 29, 237, 250, 90, 229, 168, 116, 42, 180, - 237, 41, 90, 229, 168, 116, 64, 180, 51, 90, 229, 168, 116, 42, 180, 237, - 44, 22, 237, 41, 90, 229, 168, 116, 64, 180, 237, 44, 22, 51, 90, 229, - 168, 116, 246, 162, 233, 45, 90, 229, 168, 116, 233, 137, 246, 172, 46, - 90, 229, 168, 116, 233, 137, 246, 172, 51, 90, 229, 168, 116, 233, 137, - 246, 172, 240, 132, 90, 229, 168, 116, 233, 137, 246, 172, 240, 116, 240, - 132, 90, 229, 168, 116, 233, 137, 246, 172, 240, 116, 237, 41, 90, 229, - 168, 116, 233, 137, 246, 172, 203, 240, 132, 90, 229, 168, 116, 232, 236, - 90, 237, 69, 90, 237, 67, 90, 246, 162, 240, 121, 243, 72, 76, 234, 133, - 231, 85, 233, 242, 98, 90, 231, 225, 76, 90, 235, 113, 76, 90, 65, 240, - 126, 42, 240, 117, 104, 41, 240, 117, 104, 42, 47, 240, 117, 104, 41, 47, - 240, 117, 104, 42, 237, 79, 104, 41, 237, 79, 104, 42, 63, 237, 79, 104, - 41, 63, 237, 79, 104, 42, 86, 230, 137, 104, 41, 86, 230, 137, 104, 237, - 210, 76, 250, 26, 76, 42, 233, 89, 240, 158, 104, 41, 233, 89, 240, 158, - 104, 42, 63, 230, 137, 104, 41, 63, 230, 137, 104, 42, 63, 233, 89, 240, - 158, 104, 41, 63, 233, 89, 240, 158, 104, 42, 63, 37, 104, 41, 63, 37, - 104, 247, 23, 240, 151, 200, 47, 241, 64, 231, 199, 76, 47, 241, 64, 231, - 199, 76, 184, 47, 241, 64, 231, 199, 76, 237, 210, 165, 240, 223, 233, - 97, 207, 118, 233, 97, 207, 113, 233, 97, 207, 166, 233, 97, 207, 158, - 233, 97, 207, 173, 233, 97, 207, 183, 233, 97, 207, 194, 233, 97, 207, - 187, 233, 97, 207, 192, 90, 244, 94, 206, 76, 90, 237, 115, 206, 76, 90, - 231, 249, 206, 76, 90, 234, 97, 206, 76, 26, 237, 62, 56, 206, 76, 26, - 47, 56, 206, 76, 246, 239, 240, 151, 61, 247, 40, 237, 120, 76, 61, 247, - 40, 237, 120, 2, 237, 107, 240, 181, 76, 61, 247, 40, 237, 120, 165, 240, - 116, 240, 170, 61, 247, 40, 237, 120, 2, 237, 107, 240, 181, 165, 240, - 116, 240, 170, 61, 247, 40, 237, 120, 165, 203, 240, 170, 33, 237, 210, - 76, 90, 167, 246, 167, 249, 241, 231, 247, 98, 233, 97, 207, 246, 179, - 233, 97, 207, 235, 52, 233, 97, 207, 235, 80, 61, 90, 231, 225, 76, 250, - 249, 76, 248, 128, 229, 226, 76, 90, 38, 230, 156, 90, 132, 249, 249, - 237, 69, 126, 1, 3, 57, 126, 1, 57, 126, 1, 3, 74, 126, 1, 74, 126, 1, 3, - 66, 126, 1, 66, 126, 1, 3, 72, 126, 1, 72, 126, 1, 3, 73, 126, 1, 73, - 126, 1, 177, 126, 1, 252, 205, 126, 1, 253, 7, 126, 1, 253, 39, 126, 1, - 253, 34, 126, 1, 253, 40, 126, 1, 253, 6, 126, 1, 253, 103, 126, 1, 253, - 33, 126, 1, 253, 76, 126, 1, 252, 204, 126, 1, 252, 226, 126, 1, 253, 24, - 126, 1, 253, 72, 126, 1, 253, 26, 126, 1, 253, 97, 126, 1, 253, 52, 126, - 1, 253, 46, 126, 1, 253, 25, 126, 1, 253, 65, 126, 1, 252, 202, 126, 1, - 252, 203, 126, 1, 253, 44, 126, 1, 253, 12, 126, 1, 3, 253, 18, 126, 1, - 253, 18, 126, 1, 253, 31, 126, 1, 253, 9, 126, 1, 253, 20, 126, 1, 96, - 126, 1, 253, 57, 126, 1, 252, 201, 126, 1, 252, 248, 126, 1, 252, 227, - 126, 1, 252, 247, 126, 1, 253, 8, 126, 1, 154, 126, 1, 252, 211, 126, 1, - 213, 126, 1, 253, 41, 126, 1, 253, 30, 126, 1, 252, 223, 126, 1, 253, 59, - 126, 1, 253, 48, 126, 1, 253, 82, 126, 1, 252, 252, 126, 1, 253, 73, 126, - 1, 253, 0, 126, 1, 253, 21, 126, 1, 253, 98, 126, 1, 253, 50, 126, 1, - 198, 126, 1, 252, 239, 126, 1, 252, 229, 126, 1, 253, 13, 126, 1, 253, - 14, 126, 1, 3, 191, 126, 1, 191, 126, 1, 3, 252, 233, 126, 1, 252, 233, - 126, 1, 3, 252, 251, 126, 1, 252, 251, 126, 1, 208, 126, 1, 253, 37, 126, - 1, 253, 3, 126, 1, 253, 36, 126, 1, 252, 246, 126, 1, 3, 252, 208, 126, - 1, 252, 208, 126, 1, 253, 27, 126, 1, 252, 250, 126, 1, 253, 10, 126, 1, - 199, 126, 1, 253, 139, 126, 1, 3, 177, 126, 1, 3, 253, 6, 36, 222, 252, - 237, 107, 240, 181, 76, 36, 222, 252, 229, 189, 240, 181, 76, 222, 252, - 237, 107, 240, 181, 76, 222, 252, 229, 189, 240, 181, 76, 126, 231, 225, - 76, 126, 237, 107, 231, 225, 76, 126, 235, 90, 246, 95, 222, 252, 47, - 235, 69, 48, 1, 3, 57, 48, 1, 57, 48, 1, 3, 74, 48, 1, 74, 48, 1, 3, 66, - 48, 1, 66, 48, 1, 3, 72, 48, 1, 72, 48, 1, 3, 73, 48, 1, 73, 48, 1, 177, - 48, 1, 252, 205, 48, 1, 253, 7, 48, 1, 253, 39, 48, 1, 253, 34, 48, 1, - 253, 40, 48, 1, 253, 6, 48, 1, 253, 103, 48, 1, 253, 33, 48, 1, 253, 76, - 48, 1, 252, 204, 48, 1, 252, 226, 48, 1, 253, 24, 48, 1, 253, 72, 48, 1, - 253, 26, 48, 1, 253, 97, 48, 1, 253, 52, 48, 1, 253, 46, 48, 1, 253, 25, - 48, 1, 253, 65, 48, 1, 252, 202, 48, 1, 252, 203, 48, 1, 253, 44, 48, 1, - 253, 12, 48, 1, 3, 253, 18, 48, 1, 253, 18, 48, 1, 253, 31, 48, 1, 253, - 9, 48, 1, 253, 20, 48, 1, 96, 48, 1, 253, 57, 48, 1, 252, 201, 48, 1, - 252, 248, 48, 1, 252, 227, 48, 1, 252, 247, 48, 1, 253, 8, 48, 1, 154, - 48, 1, 252, 211, 48, 1, 213, 48, 1, 253, 41, 48, 1, 253, 30, 48, 1, 252, - 223, 48, 1, 253, 59, 48, 1, 253, 48, 48, 1, 253, 82, 48, 1, 252, 252, 48, - 1, 253, 73, 48, 1, 253, 0, 48, 1, 253, 21, 48, 1, 253, 98, 48, 1, 253, - 50, 48, 1, 198, 48, 1, 252, 239, 48, 1, 252, 229, 48, 1, 253, 13, 48, 1, - 253, 14, 48, 1, 3, 191, 48, 1, 191, 48, 1, 3, 252, 233, 48, 1, 252, 233, - 48, 1, 3, 252, 251, 48, 1, 252, 251, 48, 1, 208, 48, 1, 253, 37, 48, 1, - 253, 3, 48, 1, 253, 36, 48, 1, 252, 246, 48, 1, 3, 252, 208, 48, 1, 252, - 208, 48, 1, 253, 27, 48, 1, 252, 250, 48, 1, 253, 10, 48, 1, 199, 48, 1, - 253, 139, 48, 1, 3, 177, 48, 1, 3, 253, 6, 48, 1, 252, 243, 48, 1, 253, - 138, 48, 1, 253, 95, 48, 1, 253, 108, 48, 237, 44, 246, 164, 222, 252, - 232, 39, 240, 181, 76, 48, 231, 225, 76, 48, 237, 107, 231, 225, 76, 48, - 235, 90, 244, 64, 176, 1, 254, 185, 176, 1, 254, 187, 176, 1, 185, 176, - 1, 254, 191, 176, 1, 222, 222, 176, 1, 254, 183, 176, 1, 199, 176, 1, - 149, 176, 1, 214, 176, 1, 254, 186, 176, 1, 212, 176, 1, 254, 192, 176, - 1, 254, 196, 176, 1, 254, 184, 176, 1, 254, 178, 176, 1, 253, 211, 176, - 1, 253, 160, 176, 1, 146, 176, 1, 254, 193, 176, 1, 254, 194, 176, 1, - 193, 176, 1, 57, 176, 1, 73, 176, 1, 72, 176, 1, 253, 144, 176, 1, 252, - 221, 176, 1, 253, 176, 176, 1, 252, 222, 176, 1, 253, 119, 176, 1, 253, - 5, 176, 1, 252, 232, 176, 1, 247, 9, 176, 1, 247, 0, 176, 1, 253, 99, - 176, 1, 74, 176, 1, 66, 176, 1, 253, 233, 176, 1, 196, 176, 1, 253, 69, - 176, 1, 254, 61, 176, 1, 253, 230, 26, 1, 235, 77, 26, 1, 228, 195, 26, - 1, 228, 199, 26, 1, 237, 139, 26, 1, 228, 201, 26, 1, 228, 202, 26, 1, - 235, 81, 26, 1, 228, 209, 26, 1, 237, 142, 26, 1, 227, 197, 26, 1, 228, - 204, 26, 1, 228, 205, 26, 1, 229, 188, 26, 1, 227, 140, 26, 1, 227, 139, - 26, 1, 228, 193, 26, 1, 237, 137, 26, 1, 237, 141, 26, 1, 229, 193, 26, - 1, 229, 180, 26, 1, 240, 213, 26, 1, 230, 159, 26, 1, 237, 134, 26, 1, - 237, 130, 26, 1, 229, 191, 26, 1, 233, 128, 26, 1, 233, 131, 26, 1, 233, - 138, 26, 1, 233, 133, 26, 1, 237, 133, 26, 1, 57, 26, 1, 253, 4, 26, 1, - 191, 26, 1, 247, 61, 26, 1, 253, 177, 26, 1, 72, 26, 1, 247, 232, 26, 1, - 253, 96, 26, 1, 73, 26, 1, 252, 208, 26, 1, 247, 223, 26, 1, 253, 15, 26, - 1, 252, 251, 26, 1, 66, 26, 1, 247, 227, 26, 1, 252, 250, 26, 1, 253, 27, - 26, 1, 252, 233, 26, 1, 253, 100, 26, 1, 253, 28, 26, 1, 74, 26, 235, 92, - 26, 1, 229, 219, 26, 1, 227, 196, 26, 1, 229, 204, 26, 1, 227, 144, 26, - 1, 222, 241, 26, 1, 227, 210, 26, 1, 222, 253, 26, 1, 227, 151, 26, 1, - 222, 242, 26, 1, 228, 200, 26, 1, 229, 200, 26, 1, 227, 143, 26, 1, 227, - 137, 26, 1, 227, 208, 26, 1, 227, 209, 26, 1, 222, 239, 26, 1, 222, 240, - 26, 1, 228, 215, 26, 1, 227, 149, 26, 1, 227, 138, 26, 1, 222, 231, 26, - 1, 228, 207, 26, 1, 229, 216, 26, 1, 228, 208, 26, 1, 229, 190, 26, 1, - 229, 215, 26, 1, 233, 174, 26, 1, 229, 192, 26, 1, 232, 13, 26, 1, 227, - 155, 26, 1, 222, 254, 26, 1, 223, 56, 26, 1, 229, 218, 26, 1, 228, 210, - 26, 1, 238, 83, 26, 1, 235, 233, 26, 1, 242, 31, 26, 1, 235, 234, 26, 1, - 238, 84, 26, 1, 242, 33, 26, 1, 237, 228, 26, 1, 235, 249, 90, 230, 129, - 236, 142, 76, 90, 230, 129, 235, 37, 76, 90, 230, 129, 168, 76, 90, 230, - 129, 135, 76, 90, 230, 129, 152, 76, 90, 230, 129, 246, 160, 76, 90, 230, - 129, 252, 228, 76, 90, 230, 129, 237, 44, 76, 90, 230, 129, 237, 59, 76, - 90, 230, 129, 240, 225, 76, 90, 230, 129, 237, 145, 76, 90, 230, 129, - 240, 239, 76, 90, 230, 129, 237, 182, 76, 90, 230, 129, 239, 7, 76, 90, - 230, 129, 241, 126, 76, 90, 230, 129, 253, 245, 76, 176, 1, 253, 48, 176, - 1, 253, 72, 176, 1, 253, 104, 176, 1, 253, 40, 176, 1, 252, 231, 176, 1, - 249, 228, 176, 1, 252, 220, 176, 1, 248, 124, 176, 1, 253, 149, 176, 1, - 248, 236, 176, 1, 250, 119, 176, 1, 248, 188, 176, 1, 253, 78, 176, 1, - 251, 55, 176, 1, 242, 48, 176, 1, 242, 67, 176, 1, 253, 140, 176, 1, 253, - 128, 176, 1, 251, 98, 176, 1, 244, 10, 176, 35, 1, 254, 187, 176, 35, 1, - 254, 183, 176, 35, 1, 254, 186, 176, 35, 1, 212, 9, 195, 254, 183, 9, - 195, 254, 170, 9, 195, 254, 172, 9, 195, 249, 136, 9, 195, 254, 10, 9, - 195, 250, 109, 9, 195, 250, 106, 9, 195, 253, 226, 9, 195, 243, 253, 9, - 195, 245, 234, 9, 195, 250, 107, 9, 195, 243, 254, 9, 195, 243, 234, 9, - 195, 250, 108, 9, 195, 243, 255, 9, 195, 199, 9, 195, 212, 9, 195, 193, - 9, 195, 254, 187, 9, 195, 254, 150, 9, 195, 222, 222, 9, 195, 253, 228, - 9, 195, 253, 224, 9, 195, 254, 154, 9, 195, 251, 247, 9, 195, 253, 195, - 9, 195, 254, 146, 9, 195, 254, 127, 9, 195, 254, 139, 9, 195, 254, 160, - 9, 195, 252, 2, 9, 195, 251, 246, 9, 195, 243, 252, 9, 195, 239, 36, 9, - 195, 254, 130, 9, 195, 254, 196, 48, 1, 3, 253, 34, 48, 1, 3, 253, 24, - 48, 1, 3, 253, 26, 48, 1, 3, 96, 48, 1, 3, 252, 227, 48, 1, 3, 154, 48, - 1, 3, 253, 41, 48, 1, 3, 253, 59, 48, 1, 3, 252, 252, 48, 1, 3, 253, 21, - 48, 1, 3, 252, 229, 48, 1, 3, 208, 48, 1, 3, 253, 37, 48, 1, 3, 253, 3, - 48, 1, 3, 253, 36, 48, 1, 3, 252, 246, 93, 26, 235, 77, 93, 26, 237, 139, - 93, 26, 235, 81, 93, 26, 237, 142, 93, 26, 237, 137, 93, 26, 237, 141, - 93, 26, 240, 213, 93, 26, 237, 134, 93, 26, 237, 130, 93, 26, 233, 128, - 93, 26, 233, 131, 93, 26, 233, 138, 93, 26, 233, 133, 93, 26, 237, 133, - 93, 26, 238, 14, 57, 93, 26, 241, 202, 57, 93, 26, 238, 75, 57, 93, 26, - 241, 223, 57, 93, 26, 241, 193, 57, 93, 26, 241, 212, 57, 93, 26, 248, - 163, 57, 93, 26, 241, 43, 57, 93, 26, 241, 34, 57, 93, 26, 235, 157, 57, - 93, 26, 235, 183, 57, 93, 26, 235, 224, 57, 93, 26, 235, 199, 57, 93, 26, - 241, 157, 57, 93, 26, 241, 34, 66, 93, 237, 159, 116, 239, 171, 93, 237, - 159, 116, 130, 253, 59, 93, 133, 118, 93, 133, 113, 93, 133, 166, 93, - 133, 158, 93, 133, 173, 93, 133, 183, 93, 133, 194, 93, 133, 187, 93, - 133, 192, 93, 133, 246, 179, 93, 133, 240, 211, 93, 133, 240, 207, 93, - 133, 237, 168, 93, 133, 242, 25, 93, 133, 238, 24, 93, 133, 237, 99, 93, - 133, 247, 54, 93, 133, 238, 66, 93, 133, 241, 151, 93, 133, 233, 238, 93, - 133, 241, 198, 93, 133, 233, 240, 93, 133, 230, 183, 93, 133, 225, 108, - 93, 133, 238, 16, 93, 133, 231, 133, 93, 133, 242, 231, 93, 133, 238, 67, - 93, 133, 230, 197, 93, 133, 229, 198, 93, 133, 232, 42, 93, 133, 232, 14, - 93, 133, 232, 186, 93, 133, 240, 148, 93, 133, 241, 233, 93, 133, 238, - 40, 229, 208, 53, 33, 65, 237, 97, 118, 33, 65, 237, 97, 113, 33, 65, - 237, 97, 166, 33, 65, 237, 97, 158, 33, 65, 237, 97, 173, 33, 65, 237, - 97, 183, 33, 65, 237, 97, 194, 33, 65, 237, 97, 187, 33, 65, 237, 97, - 192, 33, 65, 235, 80, 33, 65, 237, 106, 118, 33, 65, 237, 106, 113, 33, - 65, 237, 106, 166, 33, 65, 237, 106, 158, 33, 65, 237, 106, 173, 33, 26, - 235, 77, 33, 26, 237, 139, 33, 26, 235, 81, 33, 26, 237, 142, 33, 26, - 237, 137, 33, 26, 237, 141, 33, 26, 240, 213, 33, 26, 237, 134, 33, 26, - 237, 130, 33, 26, 233, 128, 33, 26, 233, 131, 33, 26, 233, 138, 33, 26, - 233, 133, 33, 26, 237, 133, 33, 26, 238, 14, 57, 33, 26, 241, 202, 57, - 33, 26, 238, 75, 57, 33, 26, 241, 223, 57, 33, 26, 241, 193, 57, 33, 26, - 241, 212, 57, 33, 26, 248, 163, 57, 33, 26, 241, 43, 57, 33, 26, 241, 34, - 57, 33, 26, 235, 157, 57, 33, 26, 235, 183, 57, 33, 26, 235, 224, 57, 33, - 26, 235, 199, 57, 33, 26, 241, 157, 57, 33, 237, 159, 116, 236, 23, 33, - 237, 159, 116, 239, 53, 33, 26, 241, 43, 66, 237, 159, 233, 242, 98, 33, - 133, 118, 33, 133, 113, 33, 133, 166, 33, 133, 158, 33, 133, 173, 33, - 133, 183, 33, 133, 194, 33, 133, 187, 33, 133, 192, 33, 133, 246, 179, - 33, 133, 240, 211, 33, 133, 240, 207, 33, 133, 237, 168, 33, 133, 242, - 25, 33, 133, 238, 24, 33, 133, 237, 99, 33, 133, 247, 54, 33, 133, 238, - 66, 33, 133, 241, 151, 33, 133, 233, 238, 33, 133, 241, 198, 33, 133, - 233, 240, 33, 133, 230, 183, 33, 133, 225, 108, 33, 133, 238, 16, 33, - 133, 236, 214, 33, 133, 244, 116, 33, 133, 236, 76, 33, 133, 233, 44, 33, - 133, 231, 67, 33, 133, 239, 203, 33, 133, 230, 228, 33, 133, 244, 13, 33, - 133, 240, 148, 33, 133, 243, 20, 33, 133, 234, 37, 33, 133, 243, 177, 33, - 133, 235, 111, 33, 133, 250, 232, 33, 133, 240, 132, 33, 133, 237, 41, - 33, 133, 232, 229, 33, 133, 233, 12, 33, 133, 238, 67, 33, 133, 230, 197, - 33, 133, 229, 198, 33, 133, 232, 42, 33, 133, 232, 14, 33, 133, 239, 143, - 33, 65, 237, 106, 183, 33, 65, 237, 106, 194, 33, 65, 237, 106, 187, 33, - 65, 237, 106, 192, 33, 65, 237, 203, 33, 65, 240, 184, 118, 33, 65, 240, - 184, 113, 33, 65, 240, 184, 166, 33, 65, 240, 184, 158, 33, 65, 240, 184, - 173, 33, 65, 240, 184, 183, 33, 65, 240, 184, 194, 33, 65, 240, 184, 187, - 33, 65, 240, 184, 192, 33, 65, 237, 100, 90, 167, 14, 32, 234, 132, 90, - 167, 14, 32, 232, 185, 90, 167, 14, 32, 239, 98, 90, 167, 14, 32, 238, - 99, 90, 167, 14, 32, 250, 252, 90, 167, 14, 32, 244, 36, 90, 167, 14, 32, - 244, 35, 90, 167, 14, 32, 235, 255, 90, 167, 14, 32, 231, 138, 90, 167, - 14, 32, 234, 174, 90, 167, 14, 32, 232, 235, 90, 167, 14, 32, 232, 108, - 37, 253, 224, 37, 249, 231, 37, 254, 52, 236, 135, 232, 220, 53, 33, 48, - 57, 33, 48, 74, 33, 48, 66, 33, 48, 72, 33, 48, 73, 33, 48, 177, 33, 48, - 253, 7, 33, 48, 253, 34, 33, 48, 253, 6, 33, 48, 253, 33, 33, 48, 252, - 204, 33, 48, 253, 24, 33, 48, 253, 26, 33, 48, 253, 52, 33, 48, 253, 25, - 33, 48, 252, 202, 33, 48, 253, 44, 33, 48, 253, 18, 33, 48, 253, 9, 33, - 48, 96, 33, 48, 252, 201, 33, 48, 252, 248, 33, 48, 252, 227, 33, 48, - 252, 247, 33, 48, 253, 8, 33, 48, 154, 33, 48, 253, 41, 33, 48, 253, 59, - 33, 48, 252, 252, 33, 48, 253, 21, 33, 48, 198, 33, 48, 252, 239, 33, 48, - 252, 229, 33, 48, 253, 13, 33, 48, 253, 14, 33, 48, 191, 33, 48, 252, - 233, 33, 48, 252, 251, 33, 48, 208, 33, 48, 253, 37, 33, 48, 253, 3, 33, - 48, 253, 36, 33, 48, 252, 246, 33, 48, 252, 208, 33, 48, 253, 27, 33, 48, - 252, 250, 33, 48, 253, 10, 37, 235, 248, 37, 235, 253, 37, 238, 96, 37, - 242, 41, 37, 236, 112, 37, 244, 11, 37, 252, 55, 37, 232, 181, 37, 238, - 196, 37, 245, 54, 37, 245, 55, 37, 239, 55, 37, 234, 136, 37, 234, 137, - 37, 238, 234, 37, 238, 233, 37, 243, 149, 37, 238, 248, 37, 236, 127, 37, - 234, 112, 37, 244, 60, 37, 230, 73, 37, 229, 34, 37, 231, 93, 37, 236, - 99, 37, 231, 77, 37, 231, 95, 37, 234, 142, 37, 239, 60, 37, 236, 124, - 37, 239, 73, 37, 234, 212, 37, 233, 17, 37, 234, 223, 37, 239, 241, 37, - 239, 242, 37, 238, 165, 37, 243, 59, 37, 243, 79, 37, 252, 27, 37, 244, - 166, 37, 239, 156, 37, 239, 4, 37, 232, 237, 37, 239, 179, 37, 234, 11, - 37, 231, 119, 37, 236, 187, 37, 245, 75, 37, 242, 208, 37, 232, 204, 37, - 236, 107, 37, 232, 90, 37, 239, 29, 37, 231, 78, 37, 245, 66, 37, 236, - 185, 37, 236, 105, 37, 239, 189, 37, 239, 186, 37, 238, 117, 37, 236, - 190, 37, 236, 14, 37, 248, 64, 37, 239, 202, 37, 239, 26, 37, 243, 232, - 37, 234, 147, 37, 239, 94, 37, 239, 93, 37, 236, 148, 37, 234, 149, 37, - 234, 161, 37, 244, 148, 37, 231, 102, 37, 241, 50, 37, 234, 158, 37, 234, - 157, 37, 240, 91, 37, 240, 92, 37, 246, 99, 37, 234, 209, 37, 245, 117, - 37, 239, 230, 37, 234, 211, 37, 245, 114, 37, 233, 13, 37, 240, 83, 90, - 167, 14, 32, 246, 180, 240, 126, 90, 167, 14, 32, 246, 180, 118, 90, 167, - 14, 32, 246, 180, 113, 90, 167, 14, 32, 246, 180, 166, 90, 167, 14, 32, - 246, 180, 158, 90, 167, 14, 32, 246, 180, 173, 90, 167, 14, 32, 246, 180, - 183, 90, 167, 14, 32, 246, 180, 194, 90, 167, 14, 32, 246, 180, 187, 90, - 167, 14, 32, 246, 180, 192, 90, 167, 14, 32, 246, 180, 246, 179, 90, 167, - 14, 32, 246, 180, 235, 68, 90, 167, 14, 32, 246, 180, 235, 72, 90, 167, - 14, 32, 246, 180, 231, 234, 90, 167, 14, 32, 246, 180, 231, 231, 90, 167, - 14, 32, 246, 180, 233, 141, 90, 167, 14, 32, 246, 180, 233, 135, 90, 167, - 14, 32, 246, 180, 230, 148, 90, 167, 14, 32, 246, 180, 231, 229, 90, 167, - 14, 32, 246, 180, 231, 233, 90, 167, 14, 32, 246, 180, 235, 52, 90, 167, - 14, 32, 246, 180, 229, 224, 90, 167, 14, 32, 246, 180, 229, 225, 90, 167, - 14, 32, 246, 180, 227, 213, 90, 167, 14, 32, 246, 180, 228, 220, 37, 250, - 94, 37, 252, 203, 37, 252, 222, 37, 125, 37, 254, 0, 37, 254, 126, 37, - 254, 45, 37, 255, 4, 233, 91, 37, 255, 4, 237, 152, 37, 253, 233, 37, - 253, 145, 247, 91, 236, 102, 37, 253, 145, 247, 91, 236, 252, 37, 253, - 145, 247, 91, 234, 239, 37, 253, 145, 247, 91, 239, 101, 37, 228, 232, - 37, 254, 242, 242, 56, 37, 252, 201, 37, 254, 207, 57, 37, 198, 37, 177, - 37, 254, 78, 37, 253, 246, 37, 254, 59, 37, 249, 142, 37, 244, 51, 37, - 254, 129, 37, 254, 112, 37, 254, 207, 254, 191, 37, 254, 207, 214, 37, - 254, 101, 37, 253, 240, 37, 253, 228, 37, 250, 165, 37, 251, 11, 37, 250, - 30, 37, 252, 19, 37, 254, 207, 149, 37, 254, 103, 37, 254, 44, 37, 254, - 83, 37, 254, 56, 37, 254, 116, 37, 254, 207, 185, 37, 253, 248, 37, 254, - 39, 37, 254, 84, 37, 255, 12, 233, 91, 37, 255, 3, 233, 91, 37, 255, 68, - 233, 91, 37, 254, 250, 233, 91, 37, 255, 12, 237, 152, 37, 255, 3, 237, - 152, 37, 255, 68, 237, 152, 37, 254, 250, 237, 152, 37, 255, 68, 107, - 193, 37, 255, 68, 107, 255, 59, 233, 91, 37, 213, 37, 248, 85, 37, 248, - 102, 37, 250, 40, 37, 251, 169, 37, 253, 191, 107, 193, 37, 253, 191, - 107, 255, 59, 233, 91, 37, 254, 135, 37, 254, 117, 37, 254, 207, 193, 37, - 254, 104, 37, 254, 136, 37, 253, 251, 37, 254, 207, 196, 37, 254, 106, - 37, 254, 88, 37, 255, 39, 241, 50, 37, 254, 137, 37, 254, 118, 37, 254, - 207, 254, 195, 37, 254, 107, 37, 253, 243, 37, 255, 40, 241, 50, 37, 255, - 67, 248, 120, 37, 255, 68, 248, 120, 37, 253, 140, 37, 254, 35, 37, 254, - 37, 37, 254, 38, 37, 255, 62, 107, 253, 240, 37, 253, 66, 37, 254, 42, - 37, 254, 64, 37, 154, 37, 253, 226, 37, 253, 79, 37, 253, 183, 37, 254, - 250, 234, 26, 37, 254, 85, 37, 254, 94, 37, 254, 95, 37, 250, 228, 37, - 254, 97, 37, 255, 37, 237, 216, 37, 251, 14, 37, 251, 22, 37, 254, 131, - 37, 254, 132, 37, 251, 118, 37, 254, 134, 37, 254, 151, 37, 254, 9, 37, - 254, 169, 37, 255, 69, 107, 185, 37, 102, 107, 185, 90, 167, 14, 32, 252, - 218, 118, 90, 167, 14, 32, 252, 218, 113, 90, 167, 14, 32, 252, 218, 166, - 90, 167, 14, 32, 252, 218, 158, 90, 167, 14, 32, 252, 218, 173, 90, 167, - 14, 32, 252, 218, 183, 90, 167, 14, 32, 252, 218, 194, 90, 167, 14, 32, - 252, 218, 187, 90, 167, 14, 32, 252, 218, 192, 90, 167, 14, 32, 252, 218, - 246, 179, 90, 167, 14, 32, 252, 218, 235, 68, 90, 167, 14, 32, 252, 218, - 235, 72, 90, 167, 14, 32, 252, 218, 231, 234, 90, 167, 14, 32, 252, 218, - 231, 231, 90, 167, 14, 32, 252, 218, 233, 141, 90, 167, 14, 32, 252, 218, - 233, 135, 90, 167, 14, 32, 252, 218, 230, 148, 90, 167, 14, 32, 252, 218, - 231, 229, 90, 167, 14, 32, 252, 218, 231, 233, 90, 167, 14, 32, 252, 218, - 235, 52, 90, 167, 14, 32, 252, 218, 229, 224, 90, 167, 14, 32, 252, 218, - 229, 225, 90, 167, 14, 32, 252, 218, 227, 213, 90, 167, 14, 32, 252, 218, - 228, 220, 90, 167, 14, 32, 252, 218, 229, 157, 90, 167, 14, 32, 252, 218, - 230, 121, 90, 167, 14, 32, 252, 218, 228, 171, 90, 167, 14, 32, 252, 218, - 228, 170, 90, 167, 14, 32, 252, 218, 229, 158, 90, 167, 14, 32, 252, 218, - 235, 80, 90, 167, 14, 32, 252, 218, 230, 118, 37, 247, 12, 181, 32, 252, - 230, 234, 38, 235, 123, 181, 32, 252, 230, 233, 7, 237, 99, 181, 32, 230, - 246, 254, 217, 252, 230, 230, 230, 181, 32, 235, 12, 238, 222, 181, 32, - 233, 249, 181, 32, 232, 99, 181, 32, 252, 230, 242, 63, 181, 32, 235, - 177, 232, 55, 181, 32, 3, 235, 219, 181, 32, 233, 54, 181, 32, 239, 185, - 181, 32, 230, 113, 181, 32, 230, 60, 181, 32, 240, 227, 230, 90, 181, 32, - 234, 162, 181, 32, 230, 56, 181, 32, 230, 184, 181, 32, 252, 105, 254, - 223, 252, 230, 234, 47, 181, 32, 232, 71, 181, 32, 227, 161, 181, 32, - 238, 125, 234, 246, 181, 32, 238, 251, 181, 32, 233, 27, 238, 98, 181, - 32, 235, 205, 181, 32, 231, 87, 181, 32, 240, 227, 235, 219, 181, 32, - 244, 151, 233, 195, 181, 32, 240, 227, 227, 150, 181, 32, 252, 230, 235, - 237, 237, 168, 181, 32, 252, 230, 234, 31, 240, 207, 181, 32, 231, 86, - 181, 32, 232, 175, 181, 32, 234, 208, 181, 32, 240, 227, 238, 36, 181, - 32, 233, 1, 181, 32, 232, 106, 106, 252, 230, 237, 57, 181, 32, 252, 230, - 236, 74, 181, 32, 229, 187, 181, 32, 229, 44, 181, 32, 228, 237, 181, 32, - 232, 109, 181, 32, 232, 27, 181, 32, 227, 220, 181, 32, 238, 160, 180, - 241, 191, 181, 32, 232, 24, 232, 55, 181, 32, 236, 196, 237, 16, 181, 32, - 230, 84, 181, 32, 252, 230, 246, 54, 181, 32, 230, 97, 181, 32, 252, 230, - 232, 16, 181, 32, 252, 230, 234, 9, 233, 246, 181, 32, 252, 230, 235, - 182, 245, 220, 231, 255, 181, 32, 228, 240, 181, 32, 252, 230, 234, 153, - 236, 144, 181, 32, 230, 221, 181, 32, 252, 230, 233, 63, 181, 32, 252, - 230, 238, 235, 240, 199, 181, 32, 252, 230, 239, 51, 241, 178, 181, 32, - 229, 250, 181, 32, 230, 78, 181, 32, 244, 9, 240, 48, 181, 32, 3, 227, - 150, 181, 32, 242, 44, 229, 183, 181, 32, 238, 118, 229, 183, 8, 4, 254, - 73, 8, 4, 254, 74, 8, 4, 74, 8, 4, 254, 70, 8, 4, 250, 115, 8, 4, 250, - 116, 8, 4, 253, 77, 8, 4, 250, 114, 8, 4, 253, 113, 8, 4, 254, 30, 8, 4, - 57, 8, 4, 254, 27, 8, 4, 252, 57, 8, 4, 254, 164, 8, 4, 252, 56, 8, 4, - 253, 188, 8, 4, 254, 122, 8, 4, 73, 8, 4, 253, 255, 8, 4, 254, 53, 8, 4, - 72, 8, 4, 253, 109, 8, 4, 249, 121, 8, 4, 249, 122, 8, 4, 253, 30, 8, 4, - 249, 120, 8, 4, 242, 206, 8, 4, 242, 207, 8, 4, 249, 118, 8, 4, 242, 205, - 8, 4, 249, 101, 8, 4, 249, 102, 8, 4, 252, 211, 8, 4, 249, 100, 8, 4, - 242, 222, 8, 4, 249, 129, 8, 4, 242, 221, 8, 4, 249, 128, 8, 4, 246, 231, - 8, 4, 253, 98, 8, 4, 249, 127, 8, 4, 249, 113, 8, 4, 253, 73, 8, 4, 249, - 111, 8, 4, 249, 132, 8, 4, 249, 133, 8, 4, 253, 48, 8, 4, 249, 130, 8, 4, - 242, 224, 8, 4, 247, 11, 8, 4, 249, 139, 8, 4, 249, 140, 8, 4, 253, 210, - 8, 4, 249, 137, 8, 4, 242, 226, 8, 4, 249, 138, 8, 4, 251, 111, 8, 4, - 251, 112, 8, 4, 252, 223, 8, 4, 251, 110, 8, 4, 245, 74, 8, 4, 251, 108, - 8, 4, 245, 73, 8, 4, 251, 104, 8, 4, 251, 105, 8, 4, 213, 8, 4, 247, 45, - 8, 4, 245, 85, 8, 4, 251, 121, 8, 4, 245, 84, 8, 4, 251, 115, 8, 4, 251, - 116, 8, 4, 253, 50, 8, 4, 251, 114, 8, 4, 248, 136, 8, 4, 251, 124, 8, 4, - 253, 82, 8, 4, 251, 122, 8, 4, 245, 86, 8, 4, 251, 123, 8, 4, 248, 138, - 8, 4, 251, 127, 8, 4, 254, 138, 8, 4, 251, 125, 8, 4, 245, 88, 8, 4, 251, - 126, 8, 4, 242, 183, 8, 4, 242, 184, 8, 4, 249, 103, 8, 4, 242, 182, 8, - 4, 238, 112, 8, 4, 238, 113, 8, 4, 242, 181, 8, 4, 238, 111, 8, 4, 242, - 177, 8, 4, 242, 178, 8, 4, 247, 66, 8, 4, 242, 176, 8, 4, 238, 115, 8, 4, - 242, 188, 8, 4, 238, 114, 8, 4, 242, 186, 8, 4, 242, 187, 8, 4, 249, 104, - 8, 4, 242, 185, 8, 4, 242, 180, 8, 4, 247, 250, 8, 4, 242, 179, 8, 4, - 241, 98, 8, 4, 242, 191, 8, 4, 249, 105, 8, 4, 242, 189, 8, 4, 238, 116, - 8, 4, 242, 190, 8, 4, 242, 193, 8, 4, 242, 194, 8, 4, 249, 106, 8, 4, - 242, 192, 8, 4, 244, 171, 8, 4, 244, 172, 8, 4, 251, 45, 8, 4, 244, 170, - 8, 4, 239, 129, 8, 4, 241, 200, 8, 4, 239, 128, 8, 4, 244, 168, 8, 4, - 244, 169, 8, 4, 251, 44, 8, 4, 244, 167, 8, 4, 244, 174, 8, 4, 244, 175, - 8, 4, 251, 46, 8, 4, 244, 173, 8, 4, 244, 178, 8, 4, 244, 179, 8, 4, 251, - 47, 8, 4, 244, 176, 8, 4, 239, 130, 8, 4, 244, 177, 8, 4, 244, 182, 8, 4, - 244, 183, 8, 4, 251, 48, 8, 4, 244, 180, 8, 4, 239, 131, 8, 4, 244, 181, - 8, 4, 243, 204, 8, 4, 243, 205, 8, 4, 250, 85, 8, 4, 243, 203, 8, 4, 239, - 17, 8, 4, 243, 202, 8, 4, 239, 16, 8, 4, 243, 200, 8, 4, 243, 201, 8, 4, - 250, 84, 8, 4, 243, 199, 8, 4, 239, 19, 8, 4, 243, 209, 8, 4, 239, 18, 8, - 4, 243, 207, 8, 4, 243, 208, 8, 4, 248, 62, 8, 4, 243, 206, 8, 4, 243, - 212, 8, 4, 243, 213, 8, 4, 250, 86, 8, 4, 243, 210, 8, 4, 239, 20, 8, 4, - 243, 211, 8, 4, 243, 216, 8, 4, 250, 87, 8, 4, 243, 214, 8, 4, 239, 21, - 8, 4, 243, 215, 8, 4, 251, 18, 8, 4, 251, 19, 8, 4, 252, 239, 8, 4, 251, - 17, 8, 4, 244, 144, 8, 4, 251, 12, 8, 4, 244, 143, 8, 4, 250, 250, 8, 4, - 250, 251, 8, 4, 198, 8, 4, 250, 247, 8, 4, 244, 157, 8, 4, 244, 158, 8, - 4, 251, 27, 8, 4, 244, 156, 8, 4, 251, 23, 8, 4, 251, 24, 8, 4, 253, 14, - 8, 4, 248, 101, 8, 4, 251, 7, 8, 4, 253, 13, 8, 4, 251, 30, 8, 4, 251, - 31, 8, 4, 252, 229, 8, 4, 251, 28, 8, 4, 244, 160, 8, 4, 251, 29, 8, 4, - 251, 34, 8, 4, 251, 35, 8, 4, 254, 108, 8, 4, 251, 33, 8, 4, 249, 251, 8, - 4, 249, 252, 8, 4, 253, 88, 8, 4, 249, 250, 8, 4, 249, 239, 8, 4, 249, - 240, 8, 4, 252, 234, 8, 4, 249, 238, 8, 4, 249, 255, 8, 4, 253, 148, 8, - 4, 249, 254, 8, 4, 250, 1, 8, 4, 250, 2, 8, 4, 253, 178, 8, 4, 250, 0, 8, - 4, 243, 110, 8, 4, 248, 40, 8, 4, 250, 7, 8, 4, 250, 8, 8, 4, 254, 57, 8, - 4, 250, 6, 8, 4, 252, 77, 8, 4, 252, 78, 8, 4, 253, 138, 8, 4, 252, 76, - 8, 4, 246, 46, 8, 4, 246, 47, 8, 4, 252, 75, 8, 4, 246, 45, 8, 4, 252, - 71, 8, 4, 252, 72, 8, 4, 252, 243, 8, 4, 252, 70, 8, 4, 252, 82, 8, 4, - 252, 84, 8, 4, 253, 108, 8, 4, 252, 81, 8, 4, 252, 74, 8, 4, 248, 190, 8, - 4, 252, 86, 8, 4, 252, 87, 8, 4, 253, 139, 8, 4, 252, 85, 8, 4, 246, 49, - 8, 4, 248, 193, 8, 4, 252, 91, 8, 4, 252, 92, 8, 4, 253, 201, 8, 4, 252, - 89, 8, 4, 246, 50, 8, 4, 252, 90, 8, 4, 249, 196, 8, 4, 249, 197, 8, 4, - 253, 12, 8, 4, 249, 194, 8, 4, 243, 69, 8, 4, 249, 192, 8, 4, 243, 68, 8, - 4, 249, 181, 8, 4, 249, 183, 8, 4, 252, 203, 8, 4, 249, 179, 8, 4, 243, - 86, 8, 4, 249, 212, 8, 4, 246, 164, 8, 4, 249, 206, 8, 4, 253, 57, 8, 4, - 249, 205, 8, 4, 249, 187, 8, 4, 253, 20, 8, 4, 249, 186, 8, 4, 249, 215, - 8, 4, 249, 216, 8, 4, 253, 31, 8, 4, 249, 213, 8, 4, 243, 88, 8, 4, 249, - 214, 8, 4, 252, 23, 8, 4, 252, 24, 8, 4, 253, 44, 8, 4, 252, 22, 8, 4, - 245, 250, 8, 4, 247, 57, 8, 4, 245, 249, 8, 4, 248, 170, 8, 4, 252, 10, - 8, 4, 252, 202, 8, 4, 252, 7, 8, 4, 246, 21, 8, 4, 246, 22, 8, 4, 252, - 34, 8, 4, 246, 20, 8, 4, 248, 179, 8, 4, 252, 28, 8, 4, 96, 8, 4, 247, - 214, 8, 4, 252, 16, 8, 4, 253, 9, 8, 4, 252, 13, 8, 4, 252, 36, 8, 4, - 252, 37, 8, 4, 253, 18, 8, 4, 252, 35, 8, 4, 246, 23, 8, 4, 247, 112, 8, - 4, 243, 41, 8, 4, 243, 42, 8, 4, 248, 23, 8, 4, 243, 40, 8, 4, 238, 176, - 8, 4, 243, 39, 8, 4, 238, 175, 8, 4, 243, 32, 8, 4, 243, 33, 8, 4, 246, - 192, 8, 4, 243, 31, 8, 4, 238, 178, 8, 4, 243, 47, 8, 4, 238, 177, 8, 4, - 243, 45, 8, 4, 243, 46, 8, 4, 247, 130, 8, 4, 243, 44, 8, 4, 243, 37, 8, - 4, 248, 22, 8, 4, 243, 36, 8, 4, 243, 49, 8, 4, 243, 50, 8, 4, 248, 24, - 8, 4, 243, 48, 8, 4, 238, 179, 8, 4, 241, 118, 8, 4, 244, 192, 8, 4, 244, - 193, 8, 4, 248, 107, 8, 4, 244, 191, 8, 4, 239, 132, 8, 4, 244, 190, 8, - 4, 244, 185, 8, 4, 244, 186, 8, 4, 247, 180, 8, 4, 244, 184, 8, 4, 244, - 196, 8, 4, 244, 197, 8, 4, 248, 108, 8, 4, 244, 195, 8, 4, 244, 189, 8, - 4, 248, 106, 8, 4, 244, 188, 8, 4, 244, 200, 8, 4, 244, 201, 8, 4, 248, - 109, 8, 4, 244, 198, 8, 4, 239, 133, 8, 4, 244, 199, 8, 4, 243, 224, 8, - 4, 243, 225, 8, 4, 250, 89, 8, 4, 243, 223, 8, 4, 239, 23, 8, 4, 239, 24, - 8, 4, 243, 222, 8, 4, 239, 22, 8, 4, 243, 218, 8, 4, 243, 219, 8, 4, 248, - 63, 8, 4, 243, 217, 8, 4, 239, 25, 8, 4, 243, 229, 8, 4, 243, 227, 8, 4, - 243, 228, 8, 4, 243, 226, 8, 4, 243, 221, 8, 4, 250, 88, 8, 4, 243, 220, - 8, 4, 243, 230, 8, 4, 251, 63, 8, 4, 251, 64, 8, 4, 252, 248, 8, 4, 251, - 62, 8, 4, 244, 228, 8, 4, 251, 60, 8, 4, 244, 227, 8, 4, 251, 43, 8, 4, - 252, 201, 8, 4, 251, 41, 8, 4, 245, 15, 8, 4, 251, 80, 8, 4, 245, 14, 8, - 4, 247, 184, 8, 4, 251, 72, 8, 4, 253, 8, 8, 4, 251, 70, 8, 4, 251, 52, - 8, 4, 252, 247, 8, 4, 251, 50, 8, 4, 251, 83, 8, 4, 251, 84, 8, 4, 252, - 227, 8, 4, 251, 81, 8, 4, 245, 16, 8, 4, 251, 82, 8, 4, 243, 186, 8, 4, - 243, 187, 8, 4, 250, 80, 8, 4, 243, 185, 8, 4, 239, 11, 8, 4, 243, 184, - 8, 4, 239, 10, 8, 4, 243, 180, 8, 4, 243, 181, 8, 4, 248, 61, 8, 4, 243, - 179, 8, 4, 239, 13, 8, 4, 243, 190, 8, 4, 239, 12, 8, 4, 243, 189, 8, 4, - 250, 81, 8, 4, 243, 188, 8, 4, 243, 183, 8, 4, 250, 79, 8, 4, 243, 182, - 8, 4, 243, 193, 8, 4, 243, 194, 8, 4, 250, 82, 8, 4, 243, 191, 8, 4, 239, - 14, 8, 4, 243, 192, 8, 4, 243, 197, 8, 4, 243, 198, 8, 4, 250, 83, 8, 4, - 243, 195, 8, 4, 239, 15, 8, 4, 243, 196, 8, 4, 250, 225, 8, 4, 250, 226, - 8, 4, 253, 42, 8, 4, 250, 223, 8, 4, 244, 101, 8, 4, 244, 102, 8, 4, 248, - 93, 8, 4, 244, 100, 8, 4, 250, 208, 8, 4, 250, 210, 8, 4, 252, 200, 8, 4, - 250, 206, 8, 4, 244, 110, 8, 4, 244, 111, 8, 4, 250, 236, 8, 4, 244, 109, - 8, 4, 250, 231, 8, 4, 250, 233, 8, 4, 253, 49, 8, 4, 250, 230, 8, 4, 250, - 216, 8, 4, 253, 80, 8, 4, 250, 214, 8, 4, 250, 239, 8, 4, 250, 240, 8, 4, - 253, 22, 8, 4, 250, 237, 8, 4, 244, 112, 8, 4, 250, 238, 8, 4, 250, 242, - 8, 4, 250, 243, 8, 4, 253, 186, 8, 4, 250, 241, 8, 4, 244, 113, 8, 4, - 248, 97, 8, 4, 250, 33, 8, 4, 250, 34, 8, 4, 253, 39, 8, 4, 250, 32, 8, - 4, 243, 147, 8, 4, 243, 148, 8, 4, 250, 31, 8, 4, 243, 146, 8, 4, 250, - 14, 8, 4, 250, 15, 8, 4, 252, 205, 8, 4, 250, 13, 8, 4, 243, 160, 8, 4, - 243, 161, 8, 4, 250, 46, 8, 4, 243, 159, 8, 4, 248, 56, 8, 4, 250, 39, 8, - 4, 253, 76, 8, 4, 250, 38, 8, 4, 250, 25, 8, 4, 250, 27, 8, 4, 253, 103, - 8, 4, 248, 47, 8, 4, 250, 48, 8, 4, 250, 49, 8, 4, 253, 40, 8, 4, 250, - 47, 8, 4, 243, 162, 8, 4, 248, 57, 8, 4, 248, 83, 8, 4, 250, 170, 8, 4, - 253, 7, 8, 4, 250, 169, 8, 4, 244, 59, 8, 4, 250, 166, 8, 4, 244, 58, 8, - 4, 250, 156, 8, 4, 250, 158, 8, 4, 177, 8, 4, 250, 155, 8, 4, 244, 71, 8, - 4, 250, 190, 8, 4, 244, 70, 8, 4, 250, 180, 8, 4, 250, 181, 8, 4, 253, - 33, 8, 4, 250, 179, 8, 4, 250, 160, 8, 4, 250, 161, 8, 4, 253, 6, 8, 4, - 250, 159, 8, 4, 250, 192, 8, 4, 250, 193, 8, 4, 253, 34, 8, 4, 250, 191, - 8, 4, 244, 73, 8, 4, 246, 220, 8, 4, 243, 132, 8, 4, 243, 133, 8, 4, 248, - 49, 8, 4, 238, 239, 8, 4, 243, 131, 8, 4, 238, 238, 8, 4, 243, 125, 8, 4, - 243, 126, 8, 4, 247, 77, 8, 4, 243, 124, 8, 4, 238, 241, 8, 4, 238, 242, - 8, 4, 241, 140, 8, 4, 238, 240, 8, 4, 243, 134, 8, 4, 243, 135, 8, 4, - 248, 50, 8, 4, 241, 139, 8, 4, 243, 129, 8, 4, 243, 130, 8, 4, 248, 48, - 8, 4, 243, 128, 8, 4, 243, 138, 8, 4, 243, 139, 8, 4, 248, 51, 8, 4, 243, - 136, 8, 4, 238, 243, 8, 4, 243, 137, 8, 4, 239, 109, 8, 4, 244, 133, 8, - 4, 244, 124, 8, 4, 244, 125, 8, 4, 251, 8, 8, 4, 244, 123, 8, 4, 239, - 111, 8, 4, 244, 137, 8, 4, 239, 110, 8, 4, 244, 135, 8, 4, 244, 136, 8, - 4, 247, 88, 8, 4, 244, 134, 8, 4, 244, 132, 8, 4, 251, 9, 8, 4, 244, 131, - 8, 4, 244, 140, 8, 4, 244, 141, 8, 4, 251, 10, 8, 4, 244, 138, 8, 4, 239, - 112, 8, 4, 244, 139, 8, 4, 241, 159, 8, 4, 243, 249, 8, 4, 250, 104, 8, - 4, 243, 248, 8, 4, 239, 31, 8, 4, 239, 32, 8, 4, 243, 247, 8, 4, 239, 30, - 8, 4, 243, 243, 8, 4, 243, 244, 8, 4, 250, 102, 8, 4, 243, 242, 8, 4, - 239, 34, 8, 4, 239, 35, 8, 4, 241, 161, 8, 4, 239, 33, 8, 4, 243, 250, 8, - 4, 243, 251, 8, 4, 250, 105, 8, 4, 241, 160, 8, 4, 243, 246, 8, 4, 250, - 103, 8, 4, 243, 245, 8, 4, 239, 139, 8, 4, 244, 215, 8, 4, 239, 138, 8, - 4, 244, 206, 8, 4, 244, 207, 8, 4, 246, 169, 8, 4, 244, 205, 8, 4, 239, - 141, 8, 4, 239, 142, 8, 4, 244, 224, 8, 4, 244, 221, 8, 4, 244, 222, 8, - 4, 247, 93, 8, 4, 244, 220, 8, 4, 244, 210, 8, 4, 251, 54, 8, 4, 244, - 209, 8, 4, 250, 78, 8, 4, 243, 176, 8, 4, 247, 81, 8, 4, 247, 147, 8, 4, - 250, 63, 8, 4, 154, 8, 4, 250, 62, 8, 4, 243, 239, 8, 4, 243, 240, 8, 4, - 250, 97, 8, 4, 243, 238, 8, 4, 250, 92, 8, 4, 250, 93, 8, 4, 253, 21, 8, - 4, 250, 91, 8, 4, 250, 69, 8, 4, 252, 252, 8, 4, 250, 68, 8, 4, 252, 95, - 8, 4, 252, 96, 8, 4, 252, 208, 8, 4, 252, 94, 8, 4, 246, 62, 8, 4, 252, - 108, 8, 4, 246, 61, 8, 4, 252, 106, 8, 4, 253, 10, 8, 4, 252, 104, 8, 4, - 252, 99, 8, 4, 252, 250, 8, 4, 252, 98, 8, 4, 252, 181, 8, 4, 252, 182, - 8, 4, 253, 72, 8, 4, 252, 180, 8, 4, 246, 130, 8, 4, 252, 178, 8, 4, 246, - 129, 8, 4, 252, 170, 8, 4, 252, 171, 8, 4, 252, 226, 8, 4, 252, 169, 8, - 4, 246, 133, 8, 4, 252, 190, 8, 4, 246, 132, 8, 4, 248, 211, 8, 4, 252, - 186, 8, 4, 253, 65, 8, 4, 252, 185, 8, 4, 252, 174, 8, 4, 253, 46, 8, 4, - 252, 173, 8, 4, 252, 191, 8, 4, 252, 192, 8, 4, 253, 97, 8, 4, 248, 212, - 8, 4, 246, 134, 8, 4, 248, 213, 8, 4, 252, 196, 8, 4, 252, 197, 8, 4, - 254, 182, 8, 4, 252, 194, 8, 4, 246, 135, 8, 4, 252, 195, 8, 4, 249, 160, - 8, 4, 249, 161, 8, 4, 253, 143, 8, 4, 248, 8, 8, 4, 243, 10, 8, 4, 243, - 11, 8, 4, 249, 158, 8, 4, 243, 9, 8, 4, 248, 5, 8, 4, 249, 145, 8, 4, - 252, 215, 8, 4, 248, 4, 8, 4, 243, 21, 8, 4, 249, 166, 8, 4, 241, 111, 8, - 4, 249, 164, 8, 4, 249, 165, 8, 4, 253, 66, 8, 4, 249, 163, 8, 4, 249, - 154, 8, 4, 253, 141, 8, 4, 249, 153, 8, 4, 249, 168, 8, 4, 249, 169, 8, - 4, 253, 172, 8, 4, 248, 12, 8, 4, 243, 22, 8, 4, 249, 167, 8, 4, 248, 16, - 8, 4, 249, 172, 8, 4, 253, 213, 8, 4, 248, 15, 8, 4, 243, 23, 8, 4, 249, - 171, 8, 4, 246, 145, 8, 4, 246, 146, 8, 4, 248, 216, 8, 4, 246, 144, 8, - 4, 238, 85, 8, 4, 240, 113, 8, 4, 246, 143, 8, 4, 240, 112, 8, 4, 246, - 138, 8, 4, 246, 139, 8, 4, 248, 214, 8, 4, 246, 137, 8, 4, 246, 148, 8, - 4, 248, 217, 8, 4, 246, 147, 8, 4, 246, 142, 8, 4, 248, 215, 8, 4, 246, - 141, 8, 4, 246, 151, 8, 4, 248, 218, 8, 4, 246, 149, 8, 4, 240, 114, 8, - 4, 246, 150, 8, 4, 246, 154, 8, 4, 246, 155, 8, 4, 252, 198, 8, 4, 246, - 152, 8, 4, 240, 115, 8, 4, 246, 153, 8, 4, 245, 40, 8, 4, 245, 41, 8, 4, - 251, 88, 8, 4, 245, 39, 8, 4, 239, 166, 8, 4, 245, 38, 8, 4, 239, 165, 8, - 4, 245, 35, 8, 4, 245, 36, 8, 4, 251, 86, 8, 4, 245, 34, 8, 4, 239, 167, - 8, 4, 245, 44, 8, 4, 245, 43, 8, 4, 245, 42, 8, 4, 245, 37, 8, 4, 251, - 87, 8, 4, 245, 46, 8, 4, 251, 89, 8, 4, 241, 209, 8, 4, 239, 168, 8, 4, - 245, 45, 8, 4, 245, 49, 8, 4, 245, 50, 8, 4, 251, 90, 8, 4, 245, 47, 8, - 4, 239, 169, 8, 4, 245, 48, 8, 4, 251, 227, 8, 4, 183, 8, 4, 253, 24, 8, - 4, 251, 226, 8, 4, 245, 183, 8, 4, 251, 222, 8, 4, 245, 182, 8, 4, 251, - 211, 8, 4, 251, 213, 8, 4, 252, 204, 8, 4, 251, 210, 8, 4, 245, 225, 8, - 4, 251, 242, 8, 4, 245, 224, 8, 4, 251, 233, 8, 4, 251, 235, 8, 4, 253, - 25, 8, 4, 251, 232, 8, 4, 251, 217, 8, 4, 253, 52, 8, 4, 251, 216, 8, 4, - 251, 244, 8, 4, 251, 245, 8, 4, 253, 26, 8, 4, 251, 243, 8, 4, 245, 228, - 8, 4, 247, 205, 8, 4, 251, 251, 8, 4, 251, 252, 8, 4, 254, 153, 8, 4, - 251, 249, 8, 4, 245, 230, 8, 4, 251, 250, 8, 4, 245, 205, 8, 4, 245, 206, - 8, 4, 247, 202, 8, 4, 245, 204, 8, 4, 240, 17, 8, 4, 245, 203, 8, 4, 240, - 16, 8, 4, 245, 198, 8, 4, 245, 199, 8, 4, 246, 190, 8, 4, 245, 197, 8, 4, - 245, 208, 8, 4, 245, 209, 8, 4, 247, 203, 8, 4, 245, 207, 8, 4, 245, 202, - 8, 4, 248, 166, 8, 4, 245, 201, 8, 4, 245, 211, 8, 4, 245, 212, 8, 4, - 247, 204, 8, 4, 245, 210, 8, 4, 245, 215, 8, 4, 245, 216, 8, 4, 251, 236, - 8, 4, 245, 213, 8, 4, 240, 18, 8, 4, 245, 214, 8, 4, 246, 110, 8, 4, 246, - 111, 8, 4, 246, 223, 8, 4, 246, 109, 8, 4, 240, 105, 8, 4, 246, 119, 8, - 4, 240, 104, 8, 4, 246, 117, 8, 4, 246, 118, 8, 4, 247, 239, 8, 4, 246, - 116, 8, 4, 246, 113, 8, 4, 246, 114, 8, 4, 246, 251, 8, 4, 246, 112, 8, - 4, 246, 122, 8, 4, 246, 123, 8, 4, 247, 240, 8, 4, 246, 120, 8, 4, 240, - 106, 8, 4, 246, 121, 8, 4, 246, 127, 8, 4, 246, 128, 8, 4, 252, 175, 8, - 4, 246, 125, 8, 4, 240, 107, 8, 4, 246, 126, 8, 4, 242, 245, 8, 4, 242, - 246, 8, 4, 246, 176, 8, 4, 242, 244, 8, 4, 238, 152, 8, 4, 238, 153, 8, - 4, 243, 0, 8, 4, 238, 151, 8, 4, 242, 254, 8, 4, 242, 255, 8, 4, 247, 29, - 8, 4, 242, 253, 8, 4, 242, 248, 8, 4, 242, 249, 8, 4, 246, 217, 8, 4, - 242, 247, 8, 4, 243, 3, 8, 4, 247, 124, 8, 4, 243, 1, 8, 4, 238, 154, 8, - 4, 243, 2, 8, 4, 243, 7, 8, 4, 243, 8, 8, 4, 249, 157, 8, 4, 243, 5, 8, - 4, 238, 155, 8, 4, 243, 6, 8, 4, 245, 121, 8, 4, 246, 221, 8, 4, 239, - 227, 8, 4, 245, 129, 8, 4, 245, 127, 8, 4, 245, 128, 8, 4, 248, 151, 8, - 4, 245, 126, 8, 4, 245, 124, 8, 4, 245, 125, 8, 4, 251, 191, 8, 4, 245, - 123, 8, 4, 245, 132, 8, 4, 245, 133, 8, 4, 251, 192, 8, 4, 245, 130, 8, - 4, 239, 228, 8, 4, 245, 131, 8, 4, 245, 136, 8, 4, 245, 137, 8, 4, 251, - 193, 8, 4, 245, 134, 8, 4, 239, 229, 8, 4, 245, 135, 8, 4, 244, 253, 8, - 4, 244, 254, 8, 4, 248, 117, 8, 4, 244, 252, 8, 4, 245, 3, 8, 4, 251, 74, - 8, 4, 245, 2, 8, 4, 245, 0, 8, 4, 245, 1, 8, 4, 251, 73, 8, 4, 244, 255, - 8, 4, 245, 6, 8, 4, 245, 7, 8, 4, 251, 75, 8, 4, 245, 4, 8, 4, 239, 157, - 8, 4, 245, 5, 8, 4, 245, 10, 8, 4, 245, 11, 8, 4, 251, 76, 8, 4, 245, 8, - 8, 4, 239, 158, 8, 4, 245, 9, 8, 4, 241, 235, 8, 4, 245, 160, 8, 4, 246, - 165, 8, 4, 245, 158, 8, 4, 239, 253, 8, 4, 245, 173, 8, 4, 239, 252, 8, - 4, 245, 171, 8, 4, 245, 172, 8, 4, 246, 245, 8, 4, 241, 240, 8, 4, 245, - 163, 8, 4, 245, 164, 8, 4, 246, 186, 8, 4, 245, 162, 8, 4, 245, 175, 8, - 4, 245, 176, 8, 4, 246, 246, 8, 4, 245, 174, 8, 4, 239, 254, 8, 4, 241, - 242, 8, 4, 245, 180, 8, 4, 245, 181, 8, 4, 248, 160, 8, 4, 245, 178, 8, - 4, 239, 255, 8, 4, 245, 179, 8, 4, 248, 146, 8, 4, 251, 174, 8, 4, 208, - 8, 4, 247, 196, 8, 4, 245, 141, 8, 4, 251, 196, 8, 4, 245, 140, 8, 4, - 251, 189, 8, 4, 251, 190, 8, 4, 252, 246, 8, 4, 251, 188, 8, 4, 251, 180, - 8, 4, 253, 36, 8, 4, 251, 178, 8, 4, 251, 199, 8, 4, 251, 200, 8, 4, 253, - 3, 8, 4, 251, 197, 8, 4, 245, 142, 8, 4, 251, 198, 8, 4, 251, 205, 8, 4, - 251, 206, 8, 4, 254, 6, 8, 4, 251, 203, 8, 4, 245, 144, 8, 4, 251, 204, - 8, 4, 250, 133, 8, 4, 250, 134, 8, 4, 253, 104, 8, 4, 250, 132, 8, 4, - 244, 18, 8, 4, 244, 19, 8, 4, 250, 131, 8, 4, 244, 17, 8, 4, 244, 39, 8, - 4, 244, 40, 8, 4, 250, 141, 8, 4, 244, 38, 8, 4, 247, 15, 8, 4, 250, 139, - 8, 4, 253, 90, 8, 4, 250, 138, 8, 4, 250, 144, 8, 4, 250, 145, 8, 4, 253, - 118, 8, 4, 250, 142, 8, 4, 244, 41, 8, 4, 250, 143, 8, 4, 250, 149, 8, 4, - 250, 150, 8, 4, 254, 75, 8, 4, 250, 147, 8, 4, 244, 42, 8, 4, 250, 148, - 8, 4, 251, 139, 8, 4, 251, 140, 8, 4, 253, 131, 8, 4, 251, 138, 8, 4, - 245, 98, 8, 4, 245, 99, 8, 4, 251, 137, 8, 4, 245, 97, 8, 4, 245, 102, 8, - 4, 245, 103, 8, 4, 248, 144, 8, 4, 245, 101, 8, 4, 248, 143, 8, 4, 251, - 144, 8, 4, 253, 159, 8, 4, 251, 143, 8, 4, 251, 151, 8, 4, 251, 153, 8, - 4, 253, 132, 8, 4, 251, 149, 8, 4, 245, 104, 8, 4, 251, 150, 8, 4, 251, - 163, 8, 4, 251, 165, 8, 4, 254, 141, 8, 4, 251, 161, 8, 4, 245, 110, 8, - 4, 251, 162, 8, 4, 244, 22, 8, 4, 244, 23, 8, 4, 248, 71, 8, 4, 244, 21, - 8, 4, 239, 45, 8, 4, 239, 46, 8, 4, 241, 166, 8, 4, 239, 44, 8, 4, 239, - 48, 8, 4, 244, 27, 8, 4, 239, 47, 8, 4, 244, 25, 8, 4, 244, 26, 8, 4, - 248, 72, 8, 4, 244, 24, 8, 4, 241, 167, 8, 4, 244, 30, 8, 4, 248, 73, 8, - 4, 244, 28, 8, 4, 239, 49, 8, 4, 244, 29, 8, 4, 244, 32, 8, 4, 244, 33, - 8, 4, 248, 74, 8, 4, 244, 31, 8, 4, 244, 233, 8, 4, 244, 234, 8, 4, 248, - 113, 8, 4, 244, 232, 8, 4, 239, 147, 8, 4, 239, 148, 8, 4, 244, 231, 8, - 4, 239, 146, 8, 4, 239, 149, 8, 4, 244, 239, 8, 4, 244, 237, 8, 4, 244, - 238, 8, 4, 248, 114, 8, 4, 244, 236, 8, 4, 244, 242, 8, 4, 248, 115, 8, - 4, 244, 240, 8, 4, 239, 150, 8, 4, 244, 241, 8, 4, 244, 245, 8, 4, 244, - 246, 8, 4, 251, 66, 8, 4, 244, 243, 8, 4, 239, 151, 8, 4, 244, 244, 8, 4, - 245, 22, 8, 4, 245, 23, 8, 4, 247, 44, 8, 4, 241, 207, 8, 4, 239, 161, 8, - 4, 239, 162, 8, 4, 245, 21, 8, 4, 239, 160, 8, 4, 239, 164, 8, 4, 245, - 29, 8, 4, 239, 163, 8, 4, 245, 27, 8, 4, 245, 28, 8, 4, 247, 19, 8, 4, - 241, 208, 8, 4, 245, 31, 8, 4, 245, 32, 8, 4, 247, 185, 8, 4, 245, 30, 8, - 4, 252, 114, 8, 4, 252, 115, 8, 4, 253, 38, 8, 4, 252, 113, 8, 4, 246, - 64, 8, 4, 246, 65, 8, 4, 252, 112, 8, 4, 246, 63, 8, 4, 246, 67, 8, 4, - 252, 121, 8, 4, 252, 119, 8, 4, 252, 120, 8, 4, 254, 18, 8, 4, 252, 117, - 8, 4, 252, 131, 8, 4, 252, 133, 8, 4, 254, 174, 8, 4, 252, 129, 8, 4, - 246, 72, 8, 4, 252, 130, 8, 4, 248, 202, 8, 4, 252, 152, 8, 4, 253, 28, - 8, 4, 252, 151, 8, 4, 246, 90, 8, 4, 246, 91, 8, 4, 252, 149, 8, 4, 246, - 89, 8, 4, 246, 102, 8, 4, 246, 103, 8, 4, 252, 157, 8, 4, 246, 101, 8, 4, - 248, 203, 8, 4, 252, 155, 8, 4, 252, 251, 8, 4, 252, 154, 8, 4, 252, 160, - 8, 4, 252, 161, 8, 4, 252, 233, 8, 4, 252, 158, 8, 4, 246, 104, 8, 4, - 252, 159, 8, 4, 252, 164, 8, 4, 252, 165, 8, 4, 253, 203, 8, 4, 252, 162, - 8, 4, 246, 105, 8, 4, 252, 163, 8, 29, 248, 143, 8, 29, 253, 42, 8, 29, - 248, 83, 8, 29, 241, 207, 8, 29, 248, 15, 8, 29, 247, 202, 8, 29, 241, - 139, 8, 29, 248, 47, 8, 29, 252, 239, 8, 29, 241, 159, 8, 29, 248, 97, 8, - 29, 241, 98, 8, 29, 248, 101, 8, 29, 252, 251, 8, 29, 248, 136, 8, 29, - 241, 161, 8, 29, 248, 170, 8, 29, 252, 205, 8, 29, 248, 212, 8, 29, 248, - 16, 8, 29, 241, 118, 8, 29, 247, 11, 8, 29, 241, 140, 8, 29, 241, 208, 8, - 29, 253, 18, 8, 29, 253, 255, 8, 29, 241, 167, 8, 29, 248, 211, 8, 29, - 248, 138, 8, 29, 248, 62, 8, 29, 248, 202, 8, 29, 248, 193, 8, 29, 248, - 160, 8, 29, 248, 190, 8, 29, 252, 226, 8, 29, 253, 90, 8, 29, 241, 209, - 8, 29, 248, 74, 8, 29, 248, 56, 8, 29, 241, 166, 8, 29, 253, 10, 8, 29, - 253, 31, 8, 29, 241, 242, 8, 29, 248, 93, 8, 29, 253, 213, 8, 29, 241, - 111, 8, 29, 248, 8, 8, 29, 241, 160, 8, 29, 241, 235, 8, 29, 248, 213, 8, - 29, 241, 240, 8, 29, 246, 217, 8, 29, 238, 85, 8, 29, 241, 200, 8, 29, - 253, 6, 34, 4, 252, 231, 34, 4, 249, 224, 34, 4, 247, 149, 34, 4, 247, - 226, 34, 4, 246, 53, 34, 4, 247, 46, 34, 4, 242, 203, 34, 4, 247, 28, 34, - 4, 244, 118, 34, 4, 244, 66, 34, 4, 239, 107, 34, 4, 243, 116, 34, 4, - 247, 140, 34, 4, 247, 113, 34, 4, 247, 106, 34, 4, 240, 238, 34, 4, 243, - 61, 34, 4, 238, 184, 34, 4, 247, 168, 34, 4, 247, 197, 34, 4, 247, 30, - 34, 4, 244, 187, 34, 4, 247, 50, 34, 4, 241, 70, 34, 4, 247, 64, 34, 4, - 241, 25, 34, 4, 248, 6, 34, 4, 247, 38, 34, 4, 244, 230, 34, 4, 247, 62, - 34, 4, 248, 80, 34, 4, 239, 135, 34, 4, 247, 144, 34, 4, 247, 172, 34, 4, - 247, 181, 34, 4, 241, 206, 34, 4, 74, 34, 4, 253, 79, 34, 4, 253, 41, 34, - 4, 250, 76, 34, 4, 253, 27, 34, 4, 252, 100, 34, 4, 252, 223, 34, 4, 249, - 115, 34, 4, 253, 30, 34, 4, 251, 1, 34, 4, 250, 183, 34, 4, 244, 128, 34, - 4, 250, 17, 34, 4, 253, 88, 34, 4, 253, 138, 34, 4, 253, 44, 34, 4, 247, - 7, 34, 4, 249, 190, 34, 4, 243, 64, 34, 4, 253, 42, 34, 4, 253, 37, 34, - 4, 253, 12, 34, 4, 248, 107, 34, 4, 253, 24, 34, 4, 247, 51, 34, 4, 253, - 72, 34, 4, 247, 238, 34, 4, 253, 143, 34, 4, 253, 104, 34, 4, 248, 113, - 34, 4, 253, 28, 34, 4, 253, 7, 34, 4, 244, 212, 34, 4, 253, 39, 34, 4, - 252, 239, 34, 4, 252, 248, 34, 4, 247, 44, 34, 4, 57, 34, 4, 253, 5, 34, - 4, 244, 204, 34, 4, 154, 34, 4, 250, 61, 34, 4, 252, 208, 34, 4, 252, 93, - 34, 4, 213, 34, 4, 246, 199, 34, 4, 252, 211, 34, 4, 248, 99, 34, 4, 248, - 85, 34, 4, 244, 65, 34, 4, 244, 126, 34, 4, 248, 46, 34, 4, 252, 234, 34, - 4, 252, 243, 34, 4, 252, 202, 34, 4, 246, 173, 34, 4, 246, 196, 34, 4, - 243, 62, 34, 4, 252, 200, 34, 4, 208, 34, 4, 252, 203, 34, 4, 247, 180, - 34, 4, 252, 204, 34, 4, 246, 165, 34, 4, 252, 226, 34, 4, 246, 223, 34, - 4, 252, 215, 34, 4, 252, 213, 34, 4, 251, 65, 34, 4, 191, 34, 4, 177, 34, - 4, 247, 39, 34, 4, 241, 201, 34, 4, 252, 205, 34, 4, 198, 34, 4, 252, - 201, 34, 4, 246, 181, 34, 4, 252, 220, 34, 4, 251, 99, 34, 4, 248, 65, - 34, 4, 247, 116, 34, 4, 246, 57, 34, 4, 247, 189, 34, 4, 242, 204, 34, 4, - 249, 126, 34, 4, 244, 119, 34, 4, 244, 68, 34, 4, 239, 108, 34, 4, 243, - 119, 34, 4, 248, 39, 34, 4, 252, 80, 34, 4, 247, 109, 34, 4, 241, 80, 34, - 4, 243, 67, 34, 4, 238, 185, 34, 4, 247, 87, 34, 4, 248, 149, 34, 4, 249, - 204, 34, 4, 244, 194, 34, 4, 247, 104, 34, 4, 241, 239, 34, 4, 248, 210, - 34, 4, 246, 115, 34, 4, 247, 126, 34, 4, 250, 137, 34, 4, 244, 235, 34, - 4, 247, 234, 34, 4, 247, 162, 34, 4, 239, 137, 34, 4, 250, 37, 34, 4, - 247, 175, 34, 4, 247, 183, 34, 4, 245, 26, 34, 4, 66, 34, 4, 253, 121, - 34, 4, 253, 59, 34, 4, 250, 96, 34, 4, 253, 109, 34, 4, 252, 107, 34, 4, - 253, 82, 34, 4, 249, 116, 34, 4, 253, 48, 34, 4, 251, 3, 34, 4, 250, 185, - 34, 4, 244, 130, 34, 4, 250, 19, 34, 4, 253, 178, 34, 4, 253, 139, 34, 4, - 253, 18, 34, 4, 247, 213, 34, 4, 249, 191, 34, 4, 243, 66, 34, 4, 253, - 22, 34, 4, 253, 3, 34, 4, 253, 31, 34, 4, 248, 109, 34, 4, 253, 26, 34, - 4, 246, 246, 34, 4, 253, 97, 34, 4, 247, 240, 34, 4, 253, 172, 34, 4, - 253, 118, 34, 4, 248, 115, 34, 4, 252, 233, 34, 4, 253, 34, 34, 4, 244, - 214, 34, 4, 253, 40, 34, 4, 252, 229, 34, 4, 252, 227, 34, 4, 247, 185, - 34, 4, 73, 34, 4, 253, 106, 34, 4, 244, 218, 34, 4, 253, 21, 34, 4, 248, - 64, 34, 4, 253, 10, 34, 4, 252, 103, 34, 4, 253, 50, 34, 4, 247, 254, 34, - 4, 253, 98, 34, 4, 251, 2, 34, 4, 250, 184, 34, 4, 244, 129, 34, 4, 250, - 18, 34, 4, 243, 118, 34, 4, 253, 148, 34, 4, 253, 108, 34, 4, 96, 34, 4, - 246, 228, 34, 4, 248, 26, 34, 4, 243, 65, 34, 4, 253, 49, 34, 4, 252, - 246, 34, 4, 253, 57, 34, 4, 248, 108, 34, 4, 253, 25, 34, 4, 246, 245, - 34, 4, 253, 65, 34, 4, 247, 239, 34, 4, 253, 66, 34, 4, 253, 90, 34, 4, - 248, 114, 34, 4, 252, 251, 34, 4, 253, 33, 34, 4, 244, 213, 34, 4, 253, - 76, 34, 4, 253, 14, 34, 4, 253, 8, 34, 4, 247, 19, 34, 4, 72, 34, 4, 252, - 232, 34, 4, 244, 208, 34, 4, 252, 252, 34, 4, 250, 66, 34, 4, 252, 250, - 34, 4, 252, 97, 34, 4, 253, 0, 34, 4, 249, 114, 34, 4, 253, 73, 34, 4, - 251, 0, 34, 4, 250, 182, 34, 4, 244, 67, 34, 4, 244, 127, 34, 4, 250, 16, - 34, 4, 243, 117, 34, 4, 253, 147, 34, 4, 253, 95, 34, 4, 253, 9, 34, 4, - 246, 247, 34, 4, 249, 189, 34, 4, 243, 63, 34, 4, 253, 80, 34, 4, 253, - 36, 34, 4, 253, 20, 34, 4, 248, 106, 34, 4, 253, 52, 34, 4, 246, 186, 34, - 4, 253, 46, 34, 4, 246, 251, 34, 4, 253, 141, 34, 4, 253, 117, 34, 4, - 247, 43, 34, 4, 253, 96, 34, 4, 253, 6, 34, 4, 244, 211, 34, 4, 239, 136, - 34, 4, 253, 103, 34, 4, 250, 23, 34, 4, 253, 13, 34, 4, 252, 247, 34, 4, - 248, 119, 34, 4, 253, 69, 34, 4, 230, 77, 34, 237, 67, 34, 246, 162, 240, - 121, 34, 233, 82, 76, 34, 4, 240, 231, 252, 234, 34, 4, 240, 231, 177, - 34, 4, 240, 231, 247, 104, 34, 14, 238, 214, 34, 14, 239, 59, 34, 14, - 245, 253, 34, 14, 248, 112, 34, 14, 242, 173, 34, 14, 247, 139, 34, 14, - 247, 207, 34, 14, 241, 117, 34, 14, 238, 190, 34, 14, 244, 69, 34, 14, - 246, 2, 34, 14, 243, 75, 34, 14, 244, 34, 34, 21, 240, 126, 34, 21, 118, - 34, 21, 113, 34, 21, 166, 34, 21, 158, 34, 21, 173, 34, 21, 183, 34, 21, - 194, 34, 21, 187, 34, 21, 192, 34, 4, 240, 231, 198, 34, 4, 240, 231, - 253, 57, 28, 6, 1, 235, 236, 28, 3, 1, 235, 236, 28, 6, 1, 237, 180, 28, - 3, 1, 237, 180, 28, 6, 1, 200, 246, 255, 28, 3, 1, 200, 246, 255, 28, 6, - 1, 240, 146, 28, 3, 1, 240, 146, 28, 6, 1, 237, 201, 28, 3, 1, 237, 201, - 28, 6, 1, 231, 254, 253, 137, 28, 3, 1, 231, 254, 253, 137, 28, 6, 1, - 241, 104, 237, 68, 28, 3, 1, 241, 104, 237, 68, 28, 6, 1, 235, 195, 247, - 118, 28, 3, 1, 235, 195, 247, 118, 28, 6, 1, 247, 119, 2, 247, 248, 247, - 118, 28, 3, 1, 247, 119, 2, 247, 248, 247, 118, 28, 6, 1, 233, 93, 247, - 25, 28, 3, 1, 233, 93, 247, 25, 28, 6, 1, 200, 252, 233, 28, 3, 1, 200, - 252, 233, 28, 6, 1, 233, 93, 57, 28, 3, 1, 233, 93, 57, 28, 6, 1, 237, - 58, 237, 102, 246, 183, 28, 3, 1, 237, 58, 237, 102, 246, 183, 28, 6, 1, - 235, 153, 246, 183, 28, 3, 1, 235, 153, 246, 183, 28, 6, 1, 233, 93, 237, - 58, 237, 102, 246, 183, 28, 3, 1, 233, 93, 237, 58, 237, 102, 246, 183, - 28, 6, 1, 253, 202, 28, 3, 1, 253, 202, 28, 6, 1, 246, 227, 253, 20, 28, - 3, 1, 246, 227, 253, 20, 28, 6, 1, 246, 227, 253, 58, 28, 3, 1, 246, 227, - 253, 58, 28, 6, 1, 246, 227, 253, 87, 28, 3, 1, 246, 227, 253, 87, 28, 6, - 1, 231, 241, 73, 28, 3, 1, 231, 241, 73, 28, 6, 1, 232, 15, 73, 28, 3, 1, - 232, 15, 73, 28, 6, 1, 47, 231, 241, 73, 28, 3, 1, 47, 231, 241, 73, 28, - 1, 230, 80, 73, 36, 28, 240, 80, 36, 28, 253, 53, 233, 152, 53, 36, 28, - 235, 56, 233, 152, 53, 36, 28, 233, 117, 233, 152, 53, 234, 225, 231, - 198, 36, 28, 235, 181, 36, 28, 233, 225, 28, 235, 181, 28, 233, 225, 28, - 6, 1, 247, 134, 28, 3, 1, 247, 134, 28, 6, 1, 241, 124, 28, 3, 1, 241, - 124, 28, 6, 1, 242, 38, 28, 3, 1, 242, 38, 28, 6, 1, 241, 30, 28, 3, 1, - 241, 30, 28, 6, 1, 241, 125, 28, 3, 1, 241, 125, 28, 6, 1, 254, 212, 2, - 237, 44, 88, 28, 3, 1, 254, 212, 2, 237, 44, 88, 28, 6, 1, 247, 59, 28, - 3, 1, 247, 59, 28, 6, 1, 242, 12, 28, 3, 1, 242, 12, 28, 6, 1, 242, 11, - 28, 3, 1, 242, 11, 28, 6, 1, 241, 255, 28, 3, 1, 241, 255, 28, 6, 1, 247, - 151, 28, 3, 1, 247, 151, 28, 6, 1, 241, 16, 28, 3, 1, 241, 16, 52, 1, - 235, 63, 206, 253, 122, 241, 62, 52, 1, 235, 63, 206, 247, 24, 241, 62, - 52, 1, 235, 63, 206, 253, 122, 238, 48, 52, 1, 235, 63, 206, 247, 24, - 238, 48, 52, 1, 235, 63, 206, 253, 122, 253, 132, 52, 1, 235, 63, 206, - 247, 24, 253, 132, 52, 1, 235, 63, 206, 253, 122, 253, 3, 52, 1, 235, 63, - 206, 247, 24, 253, 3, 52, 1, 230, 153, 237, 50, 206, 125, 52, 1, 201, - 237, 50, 206, 125, 52, 1, 253, 152, 237, 50, 206, 125, 52, 1, 184, 237, - 50, 206, 125, 52, 1, 231, 237, 237, 50, 206, 125, 52, 1, 230, 153, 237, - 50, 231, 211, 206, 125, 52, 1, 201, 237, 50, 231, 211, 206, 125, 52, 1, - 253, 152, 237, 50, 231, 211, 206, 125, 52, 1, 184, 237, 50, 231, 211, - 206, 125, 52, 1, 231, 237, 237, 50, 231, 211, 206, 125, 52, 1, 230, 153, - 231, 211, 206, 125, 52, 1, 201, 231, 211, 206, 125, 52, 1, 253, 152, 231, - 211, 206, 125, 52, 1, 184, 231, 211, 206, 125, 52, 1, 231, 237, 231, 211, - 206, 125, 52, 1, 56, 61, 125, 52, 1, 56, 237, 84, 52, 1, 56, 169, 125, - 52, 1, 203, 41, 237, 79, 237, 98, 52, 1, 237, 105, 99, 58, 52, 1, 237, - 105, 103, 58, 52, 1, 237, 105, 229, 165, 76, 52, 1, 237, 105, 233, 70, - 229, 165, 76, 52, 1, 184, 233, 70, 229, 165, 76, 52, 1, 237, 165, 22, - 201, 240, 167, 52, 1, 237, 165, 22, 184, 240, 167, 7, 6, 1, 227, 192, - 240, 174, 7, 3, 1, 227, 192, 240, 174, 7, 6, 1, 227, 192, 246, 224, 7, 3, - 1, 227, 192, 246, 224, 7, 6, 1, 241, 153, 7, 3, 1, 241, 153, 7, 6, 1, - 254, 13, 7, 3, 1, 254, 13, 7, 6, 1, 232, 56, 7, 3, 1, 232, 56, 7, 6, 1, - 230, 180, 7, 3, 1, 230, 180, 7, 6, 1, 232, 18, 2, 237, 67, 7, 3, 1, 232, - 18, 2, 237, 67, 7, 1, 3, 6, 254, 191, 7, 1, 3, 6, 193, 7, 6, 1, 252, 212, - 7, 3, 1, 252, 212, 7, 6, 1, 253, 168, 7, 3, 1, 253, 168, 7, 6, 1, 252, - 222, 7, 3, 1, 252, 222, 7, 6, 1, 253, 169, 7, 3, 1, 253, 169, 7, 6, 1, - 255, 2, 2, 169, 125, 7, 3, 1, 255, 2, 2, 169, 125, 7, 6, 1, 253, 114, 7, - 3, 1, 253, 114, 7, 6, 1, 200, 255, 62, 2, 246, 164, 7, 3, 1, 200, 255, - 62, 2, 246, 164, 7, 6, 1, 255, 67, 2, 82, 7, 3, 1, 255, 67, 2, 82, 7, 6, - 1, 255, 67, 2, 233, 74, 82, 7, 3, 1, 255, 67, 2, 233, 74, 82, 7, 6, 1, - 255, 67, 2, 195, 22, 233, 74, 82, 7, 3, 1, 255, 67, 2, 195, 22, 233, 74, - 82, 7, 6, 1, 237, 150, 149, 7, 3, 1, 237, 150, 149, 7, 6, 1, 255, 58, 2, - 201, 82, 7, 3, 1, 255, 58, 2, 201, 82, 7, 6, 1, 130, 2, 182, 195, 233, - 87, 7, 3, 1, 130, 2, 182, 195, 233, 87, 7, 6, 1, 130, 2, 240, 202, 7, 3, - 1, 130, 2, 240, 202, 7, 6, 1, 252, 220, 7, 3, 1, 252, 220, 7, 6, 1, 255, - 70, 2, 195, 235, 42, 230, 126, 7, 3, 1, 255, 70, 2, 195, 235, 42, 230, - 126, 7, 6, 1, 255, 70, 2, 232, 22, 7, 3, 1, 255, 70, 2, 232, 22, 7, 6, 1, - 255, 70, 2, 233, 241, 240, 133, 7, 3, 1, 255, 70, 2, 233, 241, 240, 133, - 7, 6, 1, 255, 75, 2, 195, 235, 42, 230, 126, 7, 3, 1, 255, 75, 2, 195, - 235, 42, 230, 126, 7, 6, 1, 255, 75, 2, 233, 74, 82, 7, 3, 1, 255, 75, 2, - 233, 74, 82, 7, 6, 1, 255, 57, 233, 143, 7, 3, 1, 255, 57, 233, 143, 7, - 6, 1, 254, 5, 233, 143, 7, 3, 1, 254, 5, 233, 143, 7, 6, 1, 255, 69, 2, - 233, 74, 82, 7, 3, 1, 255, 69, 2, 233, 74, 82, 7, 6, 1, 253, 201, 7, 3, - 1, 253, 201, 7, 6, 1, 230, 219, 254, 193, 7, 3, 1, 230, 219, 254, 193, 7, - 6, 1, 241, 19, 2, 82, 7, 3, 1, 241, 19, 2, 82, 7, 6, 1, 241, 19, 2, 195, - 235, 42, 230, 126, 7, 3, 1, 241, 19, 2, 195, 235, 42, 230, 126, 7, 6, 1, - 242, 18, 7, 3, 1, 242, 18, 7, 6, 1, 253, 125, 7, 3, 1, 253, 125, 7, 6, 1, - 253, 182, 7, 3, 1, 253, 182, 7, 6, 1, 248, 10, 7, 3, 1, 248, 10, 52, 1, - 254, 165, 7, 3, 1, 249, 211, 7, 3, 1, 247, 18, 7, 3, 1, 251, 26, 7, 3, 1, - 251, 79, 7, 3, 1, 248, 152, 7, 1, 3, 6, 248, 152, 7, 3, 1, 248, 184, 7, - 3, 1, 253, 199, 7, 6, 1, 235, 38, 222, 222, 7, 3, 1, 235, 38, 222, 222, - 7, 6, 1, 235, 38, 254, 191, 7, 3, 1, 235, 38, 254, 191, 7, 6, 1, 235, 38, - 214, 7, 6, 1, 209, 235, 38, 214, 7, 3, 1, 209, 235, 38, 214, 7, 6, 1, - 209, 149, 7, 3, 1, 209, 149, 7, 6, 1, 235, 38, 146, 7, 3, 1, 235, 38, - 146, 7, 6, 1, 235, 38, 193, 7, 3, 1, 235, 38, 193, 7, 6, 1, 235, 38, 254, - 183, 7, 3, 1, 235, 38, 254, 183, 52, 1, 184, 230, 125, 235, 24, 52, 1, - 237, 66, 52, 1, 240, 125, 237, 51, 53, 7, 6, 1, 232, 44, 7, 3, 1, 232, - 44, 7, 230, 146, 1, 200, 254, 191, 7, 230, 146, 1, 200, 254, 187, 7, 230, - 146, 1, 233, 70, 185, 7, 230, 146, 1, 255, 55, 238, 22, 7, 230, 146, 1, - 235, 83, 185, 237, 42, 240, 127, 1, 57, 237, 42, 240, 127, 1, 74, 237, - 42, 240, 127, 5, 232, 176, 237, 42, 240, 127, 1, 66, 237, 42, 240, 127, - 1, 72, 237, 42, 240, 127, 1, 73, 237, 42, 240, 127, 5, 234, 117, 237, 42, - 240, 127, 1, 253, 33, 237, 42, 240, 127, 1, 247, 158, 237, 42, 240, 127, - 1, 253, 76, 237, 42, 240, 127, 1, 248, 52, 237, 42, 240, 127, 5, 231, - 206, 237, 42, 240, 127, 1, 253, 66, 237, 42, 240, 127, 1, 247, 29, 237, - 42, 240, 127, 1, 253, 90, 237, 42, 240, 127, 1, 250, 129, 237, 42, 240, - 127, 1, 247, 217, 237, 42, 240, 127, 1, 241, 82, 237, 42, 240, 127, 1, - 247, 130, 237, 42, 240, 127, 1, 243, 38, 237, 42, 240, 127, 1, 96, 237, - 42, 240, 127, 1, 246, 228, 237, 42, 240, 127, 1, 253, 57, 237, 42, 240, - 127, 1, 248, 26, 237, 42, 240, 127, 1, 253, 8, 237, 42, 240, 127, 1, 253, - 50, 237, 42, 240, 127, 1, 247, 99, 237, 42, 240, 127, 1, 253, 98, 237, - 42, 240, 127, 1, 247, 254, 237, 42, 240, 127, 1, 253, 14, 237, 42, 240, - 127, 1, 252, 246, 237, 42, 240, 127, 1, 253, 49, 237, 42, 240, 127, 1, - 248, 151, 237, 42, 240, 127, 1, 253, 25, 237, 42, 240, 127, 1, 253, 21, - 237, 42, 240, 127, 31, 5, 57, 237, 42, 240, 127, 31, 5, 74, 237, 42, 240, - 127, 31, 5, 66, 237, 42, 240, 127, 31, 5, 72, 237, 42, 240, 127, 31, 5, - 252, 220, 237, 42, 240, 127, 237, 189, 235, 190, 237, 42, 240, 127, 237, - 189, 235, 191, 237, 42, 240, 127, 237, 189, 236, 146, 237, 42, 240, 127, - 237, 189, 236, 147, 217, 1, 177, 217, 1, 246, 178, 217, 1, 252, 205, 217, - 1, 246, 169, 217, 1, 252, 215, 217, 1, 246, 176, 217, 1, 252, 213, 217, - 1, 246, 181, 217, 1, 252, 202, 217, 1, 246, 173, 217, 1, 252, 203, 217, - 1, 252, 201, 217, 1, 213, 217, 1, 246, 182, 217, 1, 252, 211, 217, 1, - 198, 217, 1, 246, 216, 217, 1, 240, 240, 217, 1, 246, 254, 217, 1, 252, - 208, 217, 1, 246, 223, 217, 1, 252, 226, 217, 1, 3, 57, 217, 1, 191, 217, - 1, 208, 217, 1, 252, 200, 217, 1, 246, 165, 217, 1, 252, 204, 217, 1, - 154, 217, 1, 57, 217, 1, 74, 217, 1, 66, 217, 1, 72, 217, 1, 73, 217, 1, - 253, 35, 217, 1, 253, 83, 217, 1, 252, 234, 217, 1, 247, 77, 217, 1, 252, - 231, 217, 231, 189, 1, 252, 208, 217, 231, 189, 1, 191, 217, 1, 246, 191, - 217, 1, 240, 150, 217, 1, 246, 192, 217, 1, 246, 203, 217, 1, 231, 235, - 191, 217, 1, 233, 62, 246, 165, 217, 1, 237, 107, 154, 217, 1, 232, 78, - 252, 234, 217, 231, 189, 1, 208, 217, 231, 149, 1, 208, 217, 1, 228, 184, - 217, 237, 62, 247, 148, 76, 217, 47, 247, 148, 76, 217, 165, 240, 192, - 217, 165, 47, 240, 192, 141, 5, 231, 206, 141, 5, 233, 102, 141, 1, 57, - 141, 1, 252, 212, 141, 1, 74, 141, 1, 252, 216, 141, 1, 66, 141, 1, 252, - 224, 141, 1, 153, 146, 141, 1, 153, 252, 249, 141, 1, 153, 149, 141, 1, - 153, 252, 245, 141, 1, 72, 141, 1, 252, 231, 141, 1, 252, 221, 141, 1, - 73, 141, 1, 252, 220, 141, 1, 252, 222, 141, 1, 177, 141, 1, 246, 178, - 141, 1, 252, 205, 141, 1, 246, 202, 141, 1, 246, 169, 141, 1, 252, 215, - 141, 1, 246, 176, 141, 1, 252, 213, 141, 1, 246, 213, 141, 1, 246, 181, - 141, 1, 246, 191, 141, 1, 240, 150, 141, 1, 246, 192, 141, 1, 240, 166, - 141, 1, 246, 203, 141, 1, 252, 202, 141, 1, 246, 173, 141, 1, 252, 203, - 141, 1, 246, 196, 141, 1, 252, 201, 141, 1, 213, 141, 1, 246, 182, 141, - 1, 252, 211, 141, 1, 246, 199, 141, 1, 198, 141, 1, 191, 141, 1, 208, - 141, 1, 252, 200, 141, 1, 252, 243, 141, 1, 246, 165, 141, 1, 246, 190, - 141, 1, 252, 204, 141, 1, 154, 141, 1, 246, 225, 141, 231, 194, 5, 239, - 2, 141, 31, 5, 252, 212, 141, 31, 5, 74, 141, 31, 5, 252, 216, 141, 31, - 5, 66, 141, 31, 5, 252, 224, 141, 31, 5, 153, 146, 141, 31, 5, 153, 252, - 249, 141, 31, 5, 153, 149, 141, 31, 5, 153, 252, 245, 141, 31, 5, 72, - 141, 31, 5, 252, 231, 141, 31, 5, 252, 221, 141, 31, 5, 73, 141, 31, 5, - 252, 220, 141, 31, 5, 252, 222, 141, 5, 235, 43, 141, 237, 109, 141, 47, - 237, 109, 141, 21, 240, 126, 141, 21, 118, 141, 21, 113, 141, 21, 166, - 141, 21, 158, 141, 21, 173, 141, 21, 183, 141, 21, 194, 141, 21, 187, - 141, 21, 192, 240, 119, 254, 188, 21, 240, 126, 240, 119, 254, 188, 21, - 118, 240, 119, 254, 188, 21, 113, 240, 119, 254, 188, 21, 166, 240, 119, - 254, 188, 21, 158, 240, 119, 254, 188, 21, 173, 240, 119, 254, 188, 21, - 183, 240, 119, 254, 188, 21, 194, 240, 119, 254, 188, 21, 187, 240, 119, - 254, 188, 21, 192, 240, 119, 254, 188, 1, 177, 240, 119, 254, 188, 1, - 246, 178, 240, 119, 254, 188, 1, 252, 205, 240, 119, 254, 188, 1, 246, - 169, 240, 119, 254, 188, 1, 252, 204, 240, 119, 254, 188, 1, 246, 165, - 240, 119, 254, 188, 1, 252, 226, 240, 119, 254, 188, 1, 246, 181, 240, - 119, 254, 188, 1, 252, 202, 240, 119, 254, 188, 1, 250, 95, 240, 119, - 254, 188, 1, 252, 201, 240, 119, 254, 188, 1, 213, 240, 119, 254, 188, 1, - 246, 182, 240, 119, 254, 188, 1, 198, 240, 119, 254, 188, 1, 252, 203, - 240, 119, 254, 188, 1, 252, 211, 240, 119, 254, 188, 1, 208, 240, 119, - 254, 188, 1, 191, 240, 119, 254, 188, 1, 252, 200, 240, 119, 254, 188, 1, - 252, 208, 240, 119, 254, 188, 1, 246, 173, 240, 119, 254, 188, 1, 154, - 240, 119, 254, 188, 1, 252, 243, 240, 119, 254, 188, 1, 252, 215, 240, - 119, 254, 188, 1, 57, 240, 119, 254, 188, 1, 253, 15, 240, 119, 254, 188, - 1, 74, 240, 119, 254, 188, 1, 252, 220, 240, 119, 254, 188, 31, 253, 71, - 240, 119, 254, 188, 31, 72, 240, 119, 254, 188, 31, 66, 240, 119, 254, - 188, 31, 252, 231, 240, 119, 254, 188, 31, 73, 240, 119, 254, 188, 206, - 235, 203, 240, 119, 254, 188, 206, 238, 135, 240, 119, 254, 188, 206, - 242, 232, 235, 203, 240, 119, 254, 188, 5, 247, 129, 240, 119, 254, 188, - 5, 245, 177, 237, 47, 1, 177, 237, 47, 1, 252, 205, 237, 47, 1, 246, 169, - 237, 47, 1, 252, 202, 237, 47, 1, 252, 203, 237, 47, 1, 252, 201, 237, - 47, 1, 213, 237, 47, 1, 252, 211, 237, 47, 1, 198, 237, 47, 1, 252, 215, - 237, 47, 1, 252, 213, 237, 47, 1, 246, 181, 237, 47, 1, 252, 204, 237, - 47, 1, 208, 237, 47, 1, 252, 200, 237, 47, 1, 191, 237, 47, 1, 252, 208, - 237, 47, 1, 154, 237, 47, 1, 248, 99, 237, 47, 1, 241, 201, 237, 47, 1, - 247, 180, 237, 47, 1, 245, 24, 237, 47, 1, 57, 237, 47, 31, 5, 74, 237, - 47, 31, 5, 66, 237, 47, 31, 5, 72, 237, 47, 31, 5, 252, 221, 237, 47, 31, - 5, 73, 237, 47, 31, 5, 252, 222, 237, 47, 31, 5, 253, 100, 237, 47, 31, - 5, 254, 49, 237, 47, 231, 194, 5, 253, 69, 237, 47, 231, 194, 5, 199, - 237, 47, 231, 194, 5, 146, 237, 47, 231, 194, 5, 212, 237, 47, 235, 43, - 237, 47, 235, 135, 76, 136, 1, 57, 136, 1, 74, 136, 1, 66, 136, 1, 72, - 136, 1, 252, 221, 136, 1, 73, 136, 1, 177, 136, 1, 246, 178, 136, 1, 252, - 205, 136, 1, 246, 202, 136, 1, 244, 223, 136, 1, 246, 169, 136, 1, 246, - 176, 136, 1, 242, 250, 136, 1, 252, 213, 136, 1, 246, 213, 136, 1, 244, - 226, 136, 1, 251, 57, 136, 1, 244, 225, 136, 1, 252, 202, 136, 1, 246, - 173, 136, 1, 252, 203, 136, 1, 246, 196, 136, 1, 251, 77, 136, 1, 252, - 201, 136, 1, 246, 192, 136, 1, 213, 136, 1, 251, 117, 136, 1, 246, 182, - 136, 1, 252, 211, 136, 1, 246, 199, 136, 1, 251, 25, 136, 1, 198, 136, 1, - 247, 66, 136, 1, 191, 136, 1, 208, 136, 1, 252, 200, 136, 1, 252, 243, - 136, 1, 246, 190, 136, 1, 252, 204, 136, 1, 154, 136, 31, 5, 252, 212, - 136, 31, 5, 74, 136, 31, 5, 252, 216, 136, 31, 5, 253, 176, 136, 31, 5, - 66, 136, 31, 5, 253, 15, 136, 31, 5, 73, 136, 31, 5, 252, 221, 136, 31, - 5, 252, 222, 136, 31, 5, 253, 71, 136, 231, 194, 5, 191, 136, 231, 194, - 5, 208, 136, 231, 194, 5, 252, 200, 136, 231, 194, 5, 252, 208, 136, 1, - 35, 254, 186, 136, 1, 35, 214, 136, 1, 35, 253, 69, 136, 231, 194, 5, 35, - 253, 69, 136, 1, 35, 253, 211, 136, 1, 35, 254, 183, 136, 1, 35, 199, - 136, 1, 35, 254, 187, 136, 1, 35, 254, 190, 136, 1, 35, 146, 136, 1, 35, - 149, 136, 1, 35, 253, 194, 136, 231, 194, 5, 35, 185, 136, 231, 194, 5, - 35, 212, 136, 21, 240, 126, 136, 21, 118, 136, 21, 113, 136, 21, 166, - 136, 21, 158, 136, 21, 173, 136, 21, 183, 136, 21, 194, 136, 21, 187, - 136, 21, 192, 136, 229, 161, 236, 236, 136, 229, 161, 237, 109, 136, 229, - 161, 47, 237, 109, 136, 229, 161, 237, 49, 237, 109, 9, 11, 225, 115, 9, - 11, 225, 116, 9, 11, 225, 117, 9, 11, 225, 118, 9, 11, 225, 119, 9, 11, - 225, 120, 9, 11, 225, 121, 9, 11, 225, 122, 9, 11, 225, 123, 9, 11, 225, - 124, 9, 11, 225, 125, 9, 11, 225, 126, 9, 11, 225, 127, 9, 11, 225, 128, - 9, 11, 225, 129, 9, 11, 225, 130, 9, 11, 225, 131, 9, 11, 225, 132, 9, - 11, 225, 133, 9, 11, 225, 134, 9, 11, 225, 135, 9, 11, 225, 136, 9, 11, - 225, 137, 9, 11, 225, 138, 9, 11, 225, 139, 9, 11, 225, 140, 9, 11, 225, - 141, 9, 11, 225, 142, 9, 11, 225, 143, 9, 11, 225, 144, 9, 11, 225, 145, - 9, 11, 225, 146, 9, 11, 225, 147, 9, 11, 225, 148, 9, 11, 225, 149, 9, - 11, 225, 150, 9, 11, 225, 151, 9, 11, 225, 152, 9, 11, 225, 153, 9, 11, - 225, 154, 9, 11, 225, 155, 9, 11, 225, 156, 9, 11, 225, 157, 9, 11, 225, - 158, 9, 11, 225, 159, 9, 11, 225, 160, 9, 11, 225, 161, 9, 11, 225, 162, - 9, 11, 225, 163, 9, 11, 225, 164, 9, 11, 225, 165, 9, 11, 225, 166, 9, - 11, 225, 167, 9, 11, 225, 168, 9, 11, 225, 169, 9, 11, 225, 170, 9, 11, - 225, 171, 9, 11, 225, 172, 9, 11, 225, 173, 9, 11, 225, 174, 9, 11, 225, - 175, 9, 11, 225, 176, 9, 11, 225, 177, 9, 11, 225, 178, 9, 11, 225, 179, - 9, 11, 225, 180, 9, 11, 225, 181, 9, 11, 225, 182, 9, 11, 225, 183, 9, - 11, 225, 184, 9, 11, 225, 185, 9, 11, 225, 186, 9, 11, 225, 187, 9, 11, - 225, 188, 9, 11, 225, 189, 9, 11, 225, 190, 9, 11, 225, 191, 9, 11, 225, - 192, 9, 11, 225, 193, 9, 11, 225, 194, 9, 11, 225, 195, 9, 11, 225, 196, - 9, 11, 225, 197, 9, 11, 225, 198, 9, 11, 225, 199, 9, 11, 225, 200, 9, - 11, 225, 201, 9, 11, 225, 202, 9, 11, 225, 203, 9, 11, 225, 204, 9, 11, - 225, 205, 9, 11, 225, 206, 9, 11, 225, 207, 9, 11, 225, 208, 9, 11, 225, - 209, 9, 11, 225, 210, 9, 11, 225, 211, 9, 11, 225, 212, 9, 11, 225, 213, - 9, 11, 225, 214, 9, 11, 225, 215, 9, 11, 225, 216, 9, 11, 225, 217, 9, - 11, 225, 218, 9, 11, 225, 219, 9, 11, 225, 220, 9, 11, 225, 221, 9, 11, - 225, 222, 9, 11, 225, 223, 9, 11, 225, 224, 9, 11, 225, 225, 9, 11, 225, - 226, 9, 11, 225, 227, 9, 11, 225, 228, 9, 11, 225, 229, 9, 11, 225, 230, - 9, 11, 225, 231, 9, 11, 225, 232, 9, 11, 225, 233, 9, 11, 225, 234, 9, - 11, 225, 235, 9, 11, 225, 236, 9, 11, 225, 237, 9, 11, 225, 238, 9, 11, - 225, 239, 9, 11, 225, 240, 9, 11, 225, 241, 9, 11, 225, 242, 9, 11, 225, - 243, 9, 11, 225, 244, 9, 11, 225, 245, 9, 11, 225, 246, 9, 11, 225, 247, - 9, 11, 225, 248, 9, 11, 225, 249, 9, 11, 225, 250, 9, 11, 225, 251, 9, - 11, 225, 252, 9, 11, 225, 253, 9, 11, 225, 254, 9, 11, 225, 255, 9, 11, - 226, 0, 9, 11, 226, 1, 9, 11, 226, 2, 9, 11, 226, 3, 9, 11, 226, 4, 9, - 11, 226, 5, 9, 11, 226, 6, 9, 11, 226, 7, 9, 11, 226, 8, 9, 11, 226, 9, - 9, 11, 226, 10, 9, 11, 226, 11, 9, 11, 226, 12, 9, 11, 226, 13, 9, 11, - 226, 14, 9, 11, 226, 15, 9, 11, 226, 16, 9, 11, 226, 17, 9, 11, 226, 18, - 9, 11, 226, 19, 9, 11, 226, 20, 9, 11, 226, 21, 9, 11, 226, 22, 9, 11, - 226, 23, 9, 11, 226, 24, 9, 11, 226, 25, 9, 11, 226, 26, 9, 11, 226, 27, - 9, 11, 226, 28, 9, 11, 226, 29, 9, 11, 226, 30, 9, 11, 226, 31, 9, 11, - 226, 32, 9, 11, 226, 33, 9, 11, 226, 34, 9, 11, 226, 35, 9, 11, 226, 36, - 9, 11, 226, 37, 9, 11, 226, 38, 9, 11, 226, 39, 9, 11, 226, 40, 9, 11, - 226, 41, 9, 11, 226, 42, 9, 11, 226, 43, 9, 11, 226, 44, 9, 11, 226, 45, - 9, 11, 226, 46, 9, 11, 226, 47, 9, 11, 226, 48, 9, 11, 226, 49, 9, 11, - 226, 50, 9, 11, 226, 51, 9, 11, 226, 52, 9, 11, 226, 53, 9, 11, 226, 54, - 9, 11, 226, 55, 9, 11, 226, 56, 9, 11, 226, 57, 9, 11, 226, 58, 9, 11, - 226, 59, 9, 11, 226, 60, 9, 11, 226, 61, 9, 11, 226, 62, 9, 11, 226, 63, - 9, 11, 226, 64, 9, 11, 226, 65, 9, 11, 226, 66, 9, 11, 226, 67, 9, 11, - 226, 68, 9, 11, 226, 69, 9, 11, 226, 70, 9, 11, 226, 71, 9, 11, 226, 72, - 9, 11, 226, 73, 9, 11, 226, 74, 9, 11, 226, 75, 9, 11, 226, 76, 9, 11, - 226, 77, 9, 11, 226, 78, 9, 11, 226, 79, 9, 11, 226, 80, 9, 11, 226, 81, - 9, 11, 226, 82, 9, 11, 226, 83, 9, 11, 226, 84, 9, 11, 226, 85, 9, 11, - 226, 86, 9, 11, 226, 87, 9, 11, 226, 88, 9, 11, 226, 89, 9, 11, 226, 90, - 9, 11, 226, 91, 9, 11, 226, 92, 9, 11, 226, 93, 9, 11, 226, 94, 9, 11, - 226, 95, 9, 11, 226, 96, 9, 11, 226, 97, 9, 11, 226, 98, 9, 11, 226, 99, - 9, 11, 226, 100, 9, 11, 226, 101, 9, 11, 226, 102, 9, 11, 226, 103, 9, - 11, 226, 104, 9, 11, 226, 105, 9, 11, 226, 106, 9, 11, 226, 107, 9, 11, - 226, 108, 9, 11, 226, 109, 9, 11, 226, 110, 9, 11, 226, 111, 9, 11, 226, - 112, 9, 11, 226, 113, 9, 11, 226, 114, 9, 11, 226, 115, 9, 11, 226, 116, - 9, 11, 226, 117, 9, 11, 226, 118, 9, 11, 226, 119, 9, 11, 226, 120, 9, - 11, 226, 121, 9, 11, 226, 122, 9, 11, 226, 123, 9, 11, 226, 124, 9, 11, - 226, 125, 9, 11, 226, 126, 9, 11, 226, 127, 9, 11, 226, 128, 9, 11, 226, - 129, 9, 11, 226, 130, 9, 11, 226, 131, 9, 11, 226, 132, 9, 11, 226, 133, - 9, 11, 226, 134, 9, 11, 226, 135, 9, 11, 226, 136, 9, 11, 226, 137, 9, - 11, 226, 138, 9, 11, 226, 139, 9, 11, 226, 140, 9, 11, 226, 141, 9, 11, - 226, 142, 9, 11, 226, 143, 9, 11, 226, 144, 9, 11, 226, 145, 9, 11, 226, - 146, 9, 11, 226, 147, 9, 11, 226, 148, 9, 11, 226, 149, 9, 11, 226, 150, - 9, 11, 226, 151, 9, 11, 226, 152, 9, 11, 226, 153, 9, 11, 226, 154, 9, - 11, 226, 155, 9, 11, 226, 156, 9, 11, 226, 157, 9, 11, 226, 158, 9, 11, - 226, 159, 9, 11, 226, 160, 9, 11, 226, 161, 9, 11, 226, 162, 9, 11, 226, - 163, 9, 11, 226, 164, 9, 11, 226, 165, 9, 11, 226, 166, 9, 11, 226, 167, - 9, 11, 226, 168, 9, 11, 226, 169, 9, 11, 226, 170, 9, 11, 226, 171, 9, - 11, 226, 172, 9, 11, 226, 173, 9, 11, 226, 174, 9, 11, 226, 175, 9, 11, - 226, 176, 9, 11, 226, 177, 9, 11, 226, 178, 9, 11, 226, 179, 9, 11, 226, - 180, 9, 11, 226, 181, 9, 11, 226, 182, 9, 11, 226, 183, 9, 11, 226, 184, - 9, 11, 226, 185, 9, 11, 226, 186, 9, 11, 226, 187, 9, 11, 226, 188, 9, - 11, 226, 189, 9, 11, 226, 190, 9, 11, 226, 191, 9, 11, 226, 192, 9, 11, - 226, 193, 9, 11, 226, 194, 9, 11, 226, 195, 9, 11, 226, 196, 9, 11, 226, - 197, 9, 11, 226, 198, 9, 11, 226, 199, 9, 11, 226, 200, 9, 11, 226, 201, - 9, 11, 226, 202, 9, 11, 226, 203, 9, 11, 226, 204, 9, 11, 226, 205, 9, - 11, 226, 206, 9, 11, 226, 207, 9, 11, 226, 208, 9, 11, 226, 209, 9, 11, - 226, 210, 9, 11, 226, 211, 9, 11, 226, 212, 9, 11, 226, 213, 9, 11, 226, - 214, 9, 11, 226, 215, 9, 11, 226, 216, 9, 11, 226, 217, 9, 11, 226, 218, - 9, 11, 226, 219, 9, 11, 226, 220, 9, 11, 226, 221, 9, 11, 226, 222, 9, - 11, 226, 223, 9, 11, 226, 224, 9, 11, 226, 225, 9, 11, 226, 226, 9, 11, - 226, 227, 9, 11, 226, 228, 9, 11, 226, 229, 9, 11, 226, 230, 9, 11, 226, - 231, 9, 11, 226, 232, 9, 11, 226, 233, 9, 11, 226, 234, 9, 11, 226, 235, - 9, 11, 226, 236, 9, 11, 226, 237, 9, 11, 226, 238, 9, 11, 226, 239, 9, - 11, 226, 240, 9, 11, 226, 241, 9, 11, 226, 242, 9, 11, 226, 243, 9, 11, - 226, 244, 9, 11, 226, 245, 9, 11, 226, 246, 9, 11, 226, 247, 9, 11, 226, - 248, 9, 11, 226, 249, 9, 11, 226, 250, 9, 11, 226, 251, 9, 11, 226, 252, - 9, 11, 226, 253, 9, 11, 226, 254, 9, 11, 226, 255, 9, 11, 227, 0, 9, 11, - 227, 1, 9, 11, 227, 2, 9, 11, 227, 3, 9, 11, 227, 4, 9, 11, 227, 5, 9, - 11, 227, 6, 9, 11, 227, 7, 9, 11, 227, 8, 9, 11, 227, 9, 9, 11, 227, 10, - 9, 11, 227, 11, 9, 11, 227, 12, 9, 11, 227, 13, 9, 11, 227, 14, 9, 11, - 227, 15, 9, 11, 227, 16, 9, 11, 227, 17, 9, 11, 227, 18, 9, 11, 227, 19, - 9, 11, 227, 20, 9, 11, 227, 21, 9, 11, 227, 22, 9, 11, 227, 23, 9, 11, - 227, 24, 9, 11, 227, 25, 9, 11, 227, 26, 9, 11, 227, 27, 9, 11, 227, 28, - 9, 11, 227, 29, 9, 11, 227, 30, 9, 11, 227, 31, 9, 11, 227, 32, 9, 11, - 227, 33, 9, 11, 227, 34, 9, 11, 227, 35, 9, 11, 227, 36, 9, 11, 227, 37, - 9, 11, 227, 38, 9, 11, 227, 39, 9, 11, 227, 40, 9, 11, 227, 41, 9, 11, - 227, 42, 9, 11, 227, 43, 9, 11, 227, 44, 9, 11, 227, 45, 9, 11, 227, 46, - 9, 11, 227, 47, 9, 11, 227, 48, 9, 11, 227, 49, 9, 11, 227, 50, 9, 11, - 227, 51, 9, 11, 227, 52, 9, 11, 227, 53, 9, 11, 227, 54, 9, 11, 227, 55, - 9, 11, 227, 56, 9, 11, 227, 57, 9, 11, 227, 58, 9, 11, 227, 59, 9, 11, - 227, 60, 9, 11, 227, 61, 9, 11, 227, 62, 9, 11, 227, 63, 9, 11, 227, 64, - 9, 11, 227, 65, 9, 11, 227, 66, 9, 11, 227, 67, 9, 11, 227, 68, 9, 11, - 227, 69, 7, 3, 20, 254, 54, 7, 3, 20, 253, 88, 7, 3, 20, 254, 55, 7, 3, - 20, 249, 245, 7, 3, 20, 249, 246, 7, 3, 20, 182, 255, 59, 254, 183, 7, 3, - 20, 253, 195, 120, 3, 20, 253, 151, 247, 94, 120, 3, 20, 253, 151, 247, - 137, 120, 3, 20, 253, 151, 247, 152, 120, 3, 20, 254, 168, 247, 94, 120, - 3, 20, 253, 151, 247, 229, 78, 1, 253, 164, 2, 238, 6, 78, 240, 143, 227, - 247, 237, 22, 78, 20, 235, 106, 253, 164, 253, 164, 237, 187, 78, 1, 229, - 182, 241, 97, 78, 1, 246, 240, 240, 174, 78, 1, 246, 240, 237, 238, 78, - 1, 246, 240, 252, 252, 78, 1, 246, 240, 247, 1, 78, 1, 246, 240, 237, - 205, 78, 1, 246, 240, 35, 247, 41, 78, 1, 246, 240, 241, 222, 78, 1, 246, - 240, 248, 171, 78, 1, 229, 182, 79, 53, 78, 1, 246, 244, 2, 246, 244, - 246, 164, 78, 1, 246, 244, 2, 253, 193, 246, 164, 78, 1, 246, 244, 2, - 237, 200, 22, 246, 244, 246, 164, 78, 1, 246, 244, 2, 237, 200, 22, 253, - 193, 246, 164, 78, 1, 92, 2, 237, 187, 78, 1, 92, 2, 235, 134, 78, 1, 92, - 2, 237, 206, 78, 1, 253, 171, 2, 235, 33, 78, 1, 241, 143, 2, 235, 33, - 78, 1, 241, 116, 2, 235, 33, 78, 1, 255, 29, 2, 237, 206, 78, 1, 253, - 200, 2, 235, 33, 78, 1, 246, 107, 2, 235, 33, 78, 1, 254, 158, 2, 235, - 33, 78, 1, 253, 164, 2, 235, 33, 78, 1, 35, 252, 214, 2, 235, 33, 78, 1, - 252, 214, 2, 235, 33, 78, 1, 244, 90, 2, 235, 33, 78, 1, 254, 100, 2, - 235, 33, 78, 1, 253, 23, 2, 235, 33, 78, 1, 239, 234, 2, 235, 33, 78, 1, - 35, 254, 231, 2, 235, 33, 78, 1, 254, 231, 2, 235, 33, 78, 1, 246, 8, 2, - 235, 33, 78, 1, 254, 140, 2, 235, 33, 78, 1, 251, 179, 2, 235, 33, 78, 1, - 246, 244, 2, 235, 33, 78, 1, 254, 156, 2, 235, 33, 78, 1, 253, 200, 2, - 238, 7, 78, 1, 253, 171, 2, 241, 11, 78, 1, 252, 214, 2, 241, 11, 78, 1, - 254, 231, 2, 241, 11, 78, 20, 92, 237, 205, 10, 1, 92, 242, 22, 44, 15, - 10, 1, 92, 242, 22, 35, 15, 10, 1, 247, 67, 44, 15, 10, 1, 247, 67, 35, - 15, 10, 1, 247, 67, 59, 15, 10, 1, 247, 67, 124, 15, 10, 1, 253, 158, 44, - 15, 10, 1, 253, 158, 35, 15, 10, 1, 253, 158, 59, 15, 10, 1, 253, 158, - 124, 15, 10, 1, 240, 244, 44, 15, 10, 1, 240, 244, 35, 15, 10, 1, 240, - 244, 59, 15, 10, 1, 240, 244, 124, 15, 10, 1, 237, 192, 44, 15, 10, 1, - 237, 192, 35, 15, 10, 1, 237, 192, 59, 15, 10, 1, 237, 192, 124, 15, 10, - 1, 241, 17, 44, 15, 10, 1, 241, 17, 35, 15, 10, 1, 241, 17, 59, 15, 10, - 1, 241, 17, 124, 15, 10, 1, 247, 110, 44, 15, 10, 1, 247, 110, 35, 15, - 10, 1, 247, 110, 59, 15, 10, 1, 247, 110, 124, 15, 10, 1, 253, 163, 44, - 15, 10, 1, 253, 163, 35, 15, 10, 1, 253, 163, 59, 15, 10, 1, 253, 163, - 124, 15, 10, 1, 241, 9, 44, 15, 10, 1, 241, 9, 35, 15, 10, 1, 241, 9, 59, - 15, 10, 1, 241, 9, 124, 15, 10, 1, 247, 72, 44, 15, 10, 1, 247, 72, 35, - 15, 10, 1, 247, 72, 59, 15, 10, 1, 247, 72, 124, 15, 10, 1, 247, 96, 44, - 15, 10, 1, 247, 96, 35, 15, 10, 1, 247, 96, 59, 15, 10, 1, 247, 96, 124, - 15, 10, 1, 240, 237, 44, 15, 10, 1, 240, 237, 35, 15, 10, 1, 240, 237, - 59, 15, 10, 1, 240, 237, 124, 15, 10, 1, 235, 100, 44, 15, 10, 1, 235, - 100, 35, 15, 10, 1, 235, 100, 59, 15, 10, 1, 235, 100, 124, 15, 10, 1, - 237, 239, 44, 15, 10, 1, 237, 239, 35, 15, 10, 1, 241, 115, 44, 15, 10, - 1, 241, 115, 35, 15, 10, 1, 253, 216, 44, 15, 10, 1, 253, 216, 35, 15, - 10, 1, 248, 21, 44, 15, 10, 1, 248, 21, 35, 15, 10, 1, 253, 235, 44, 15, - 10, 1, 253, 235, 35, 15, 10, 1, 248, 150, 44, 15, 10, 1, 248, 150, 35, - 15, 10, 1, 240, 191, 44, 15, 10, 1, 240, 191, 35, 15, 10, 1, 240, 191, - 59, 15, 10, 1, 240, 191, 124, 15, 10, 1, 253, 102, 44, 15, 10, 1, 253, - 102, 35, 15, 10, 1, 253, 102, 59, 15, 10, 1, 253, 102, 124, 15, 10, 1, - 247, 79, 44, 15, 10, 1, 247, 79, 35, 15, 10, 1, 247, 79, 59, 15, 10, 1, - 247, 79, 124, 15, 10, 1, 241, 7, 44, 15, 10, 1, 241, 7, 35, 15, 10, 1, - 241, 7, 59, 15, 10, 1, 241, 7, 124, 15, 10, 1, 246, 156, 238, 1, 44, 15, - 10, 1, 246, 156, 238, 1, 35, 15, 10, 1, 241, 12, 44, 15, 10, 1, 241, 12, - 35, 15, 10, 1, 241, 12, 59, 15, 10, 1, 241, 12, 124, 15, 10, 1, 252, 207, - 2, 62, 64, 44, 15, 10, 1, 252, 207, 2, 62, 64, 35, 15, 10, 1, 252, 207, - 247, 34, 44, 15, 10, 1, 252, 207, 247, 34, 35, 15, 10, 1, 252, 207, 247, - 34, 59, 15, 10, 1, 252, 207, 247, 34, 124, 15, 10, 1, 252, 207, 229, 179, - 44, 15, 10, 1, 252, 207, 229, 179, 35, 15, 10, 1, 252, 207, 229, 179, 59, - 15, 10, 1, 252, 207, 229, 179, 124, 15, 10, 1, 62, 237, 123, 44, 15, 10, - 1, 62, 237, 123, 35, 15, 10, 1, 62, 237, 123, 2, 164, 64, 44, 15, 10, 1, - 62, 237, 123, 2, 164, 64, 35, 15, 10, 1, 254, 241, 44, 15, 10, 1, 254, - 241, 35, 15, 10, 1, 254, 241, 59, 15, 10, 1, 254, 241, 124, 15, 10, 1, - 97, 44, 15, 10, 1, 97, 35, 15, 10, 1, 254, 222, 44, 15, 10, 1, 254, 222, - 35, 15, 10, 1, 254, 226, 44, 15, 10, 1, 254, 226, 35, 15, 10, 1, 97, 2, - 164, 64, 44, 15, 10, 1, 254, 254, 44, 15, 10, 1, 254, 254, 35, 15, 10, 1, - 235, 49, 254, 222, 44, 15, 10, 1, 235, 49, 254, 222, 35, 15, 10, 1, 235, - 49, 254, 226, 44, 15, 10, 1, 235, 49, 254, 226, 35, 15, 10, 1, 161, 44, - 15, 10, 1, 161, 35, 15, 10, 1, 161, 59, 15, 10, 1, 161, 124, 15, 10, 1, - 237, 167, 238, 13, 235, 49, 92, 175, 59, 15, 10, 1, 237, 167, 238, 13, - 235, 49, 92, 175, 124, 15, 10, 20, 62, 2, 164, 64, 2, 92, 44, 15, 10, 20, - 62, 2, 164, 64, 2, 92, 35, 15, 10, 20, 62, 2, 164, 64, 2, 254, 215, 44, - 15, 10, 20, 62, 2, 164, 64, 2, 254, 215, 35, 15, 10, 20, 62, 2, 164, 64, - 2, 253, 54, 44, 15, 10, 20, 62, 2, 164, 64, 2, 253, 54, 35, 15, 10, 20, - 62, 2, 164, 64, 2, 97, 44, 15, 10, 20, 62, 2, 164, 64, 2, 97, 35, 15, 10, - 20, 62, 2, 164, 64, 2, 254, 222, 44, 15, 10, 20, 62, 2, 164, 64, 2, 254, - 222, 35, 15, 10, 20, 62, 2, 164, 64, 2, 254, 226, 44, 15, 10, 20, 62, 2, - 164, 64, 2, 254, 226, 35, 15, 10, 20, 62, 2, 164, 64, 2, 161, 44, 15, 10, - 20, 62, 2, 164, 64, 2, 161, 35, 15, 10, 20, 62, 2, 164, 64, 2, 161, 59, - 15, 10, 20, 237, 167, 235, 49, 62, 2, 164, 64, 2, 92, 175, 44, 15, 10, - 20, 237, 167, 235, 49, 62, 2, 164, 64, 2, 92, 175, 35, 15, 10, 20, 237, - 167, 235, 49, 62, 2, 164, 64, 2, 92, 175, 59, 15, 10, 1, 240, 176, 62, - 44, 15, 10, 1, 240, 176, 62, 35, 15, 10, 1, 240, 176, 62, 59, 15, 10, 1, - 240, 176, 62, 124, 15, 10, 20, 62, 2, 164, 64, 2, 123, 44, 15, 10, 20, - 62, 2, 164, 64, 2, 101, 44, 15, 10, 20, 62, 2, 164, 64, 2, 55, 44, 15, - 10, 20, 62, 2, 164, 64, 2, 92, 175, 44, 15, 10, 20, 62, 2, 164, 64, 2, - 62, 44, 15, 10, 20, 252, 217, 2, 123, 44, 15, 10, 20, 252, 217, 2, 101, - 44, 15, 10, 20, 252, 217, 2, 202, 44, 15, 10, 20, 252, 217, 2, 55, 44, - 15, 10, 20, 252, 217, 2, 92, 175, 44, 15, 10, 20, 252, 217, 2, 62, 44, - 15, 10, 20, 252, 210, 2, 123, 44, 15, 10, 20, 252, 210, 2, 101, 44, 15, - 10, 20, 252, 210, 2, 202, 44, 15, 10, 20, 252, 210, 2, 55, 44, 15, 10, - 20, 252, 210, 2, 92, 175, 44, 15, 10, 20, 252, 210, 2, 62, 44, 15, 10, - 20, 246, 205, 2, 123, 44, 15, 10, 20, 246, 205, 2, 55, 44, 15, 10, 20, - 246, 205, 2, 92, 175, 44, 15, 10, 20, 246, 205, 2, 62, 44, 15, 10, 20, - 123, 2, 101, 44, 15, 10, 20, 123, 2, 55, 44, 15, 10, 20, 101, 2, 123, 44, - 15, 10, 20, 101, 2, 55, 44, 15, 10, 20, 202, 2, 123, 44, 15, 10, 20, 202, - 2, 101, 44, 15, 10, 20, 202, 2, 55, 44, 15, 10, 20, 246, 163, 2, 123, 44, - 15, 10, 20, 246, 163, 2, 101, 44, 15, 10, 20, 246, 163, 2, 202, 44, 15, - 10, 20, 246, 163, 2, 55, 44, 15, 10, 20, 252, 240, 2, 101, 44, 15, 10, - 20, 252, 240, 2, 55, 44, 15, 10, 20, 252, 237, 2, 123, 44, 15, 10, 20, - 252, 237, 2, 101, 44, 15, 10, 20, 252, 237, 2, 202, 44, 15, 10, 20, 252, - 237, 2, 55, 44, 15, 10, 20, 252, 241, 2, 101, 44, 15, 10, 20, 252, 241, - 2, 55, 44, 15, 10, 20, 253, 110, 2, 55, 44, 15, 10, 20, 252, 244, 2, 123, - 44, 15, 10, 20, 252, 244, 2, 55, 44, 15, 10, 20, 240, 157, 2, 123, 44, - 15, 10, 20, 240, 157, 2, 55, 44, 15, 10, 20, 252, 235, 2, 123, 44, 15, - 10, 20, 252, 235, 2, 101, 44, 15, 10, 20, 252, 235, 2, 202, 44, 15, 10, - 20, 252, 235, 2, 55, 44, 15, 10, 20, 252, 235, 2, 92, 175, 44, 15, 10, - 20, 252, 235, 2, 62, 44, 15, 10, 20, 253, 1, 2, 101, 44, 15, 10, 20, 253, - 1, 2, 55, 44, 15, 10, 20, 253, 1, 2, 92, 175, 44, 15, 10, 20, 253, 1, 2, - 62, 44, 15, 10, 20, 252, 214, 2, 92, 44, 15, 10, 20, 252, 214, 2, 123, - 44, 15, 10, 20, 252, 214, 2, 101, 44, 15, 10, 20, 252, 214, 2, 202, 44, - 15, 10, 20, 252, 214, 2, 216, 44, 15, 10, 20, 252, 214, 2, 55, 44, 15, - 10, 20, 252, 214, 2, 92, 175, 44, 15, 10, 20, 252, 214, 2, 62, 44, 15, - 10, 20, 216, 2, 123, 44, 15, 10, 20, 216, 2, 101, 44, 15, 10, 20, 216, 2, - 202, 44, 15, 10, 20, 216, 2, 55, 44, 15, 10, 20, 216, 2, 92, 175, 44, 15, - 10, 20, 216, 2, 62, 44, 15, 10, 20, 55, 2, 123, 44, 15, 10, 20, 55, 2, - 101, 44, 15, 10, 20, 55, 2, 202, 44, 15, 10, 20, 55, 2, 55, 44, 15, 10, - 20, 55, 2, 92, 175, 44, 15, 10, 20, 55, 2, 62, 44, 15, 10, 20, 246, 156, - 2, 123, 44, 15, 10, 20, 246, 156, 2, 101, 44, 15, 10, 20, 246, 156, 2, - 202, 44, 15, 10, 20, 246, 156, 2, 55, 44, 15, 10, 20, 246, 156, 2, 92, - 175, 44, 15, 10, 20, 246, 156, 2, 62, 44, 15, 10, 20, 252, 207, 2, 123, - 44, 15, 10, 20, 252, 207, 2, 55, 44, 15, 10, 20, 252, 207, 2, 92, 175, - 44, 15, 10, 20, 252, 207, 2, 62, 44, 15, 10, 20, 62, 2, 123, 44, 15, 10, - 20, 62, 2, 101, 44, 15, 10, 20, 62, 2, 202, 44, 15, 10, 20, 62, 2, 55, - 44, 15, 10, 20, 62, 2, 92, 175, 44, 15, 10, 20, 62, 2, 62, 44, 15, 10, - 20, 247, 211, 2, 229, 163, 92, 44, 15, 10, 20, 252, 225, 2, 229, 163, 92, - 44, 15, 10, 20, 92, 175, 2, 229, 163, 92, 44, 15, 10, 20, 237, 96, 2, - 233, 196, 44, 15, 10, 20, 237, 96, 2, 233, 210, 44, 15, 10, 20, 237, 96, - 2, 240, 224, 44, 15, 10, 20, 237, 96, 2, 240, 248, 44, 15, 10, 20, 237, - 96, 2, 241, 0, 44, 15, 10, 20, 237, 96, 2, 229, 163, 92, 44, 15, 10, 20, - 62, 2, 164, 64, 2, 252, 225, 35, 15, 10, 20, 62, 2, 164, 64, 2, 246, 250, - 35, 15, 10, 20, 62, 2, 164, 64, 2, 55, 35, 15, 10, 20, 62, 2, 164, 64, 2, - 246, 156, 35, 15, 10, 20, 62, 2, 164, 64, 2, 92, 175, 35, 15, 10, 20, 62, - 2, 164, 64, 2, 62, 35, 15, 10, 20, 252, 217, 2, 252, 225, 35, 15, 10, 20, - 252, 217, 2, 246, 250, 35, 15, 10, 20, 252, 217, 2, 55, 35, 15, 10, 20, - 252, 217, 2, 246, 156, 35, 15, 10, 20, 252, 217, 2, 92, 175, 35, 15, 10, - 20, 252, 217, 2, 62, 35, 15, 10, 20, 252, 210, 2, 252, 225, 35, 15, 10, - 20, 252, 210, 2, 246, 250, 35, 15, 10, 20, 252, 210, 2, 55, 35, 15, 10, - 20, 252, 210, 2, 246, 156, 35, 15, 10, 20, 252, 210, 2, 92, 175, 35, 15, - 10, 20, 252, 210, 2, 62, 35, 15, 10, 20, 246, 205, 2, 252, 225, 35, 15, - 10, 20, 246, 205, 2, 246, 250, 35, 15, 10, 20, 246, 205, 2, 55, 35, 15, - 10, 20, 246, 205, 2, 246, 156, 35, 15, 10, 20, 246, 205, 2, 92, 175, 35, - 15, 10, 20, 246, 205, 2, 62, 35, 15, 10, 20, 252, 235, 2, 92, 175, 35, - 15, 10, 20, 252, 235, 2, 62, 35, 15, 10, 20, 253, 1, 2, 92, 175, 35, 15, - 10, 20, 253, 1, 2, 62, 35, 15, 10, 20, 252, 214, 2, 92, 35, 15, 10, 20, - 252, 214, 2, 216, 35, 15, 10, 20, 252, 214, 2, 55, 35, 15, 10, 20, 252, - 214, 2, 92, 175, 35, 15, 10, 20, 252, 214, 2, 62, 35, 15, 10, 20, 216, 2, - 55, 35, 15, 10, 20, 216, 2, 92, 175, 35, 15, 10, 20, 216, 2, 62, 35, 15, - 10, 20, 55, 2, 92, 35, 15, 10, 20, 55, 2, 55, 35, 15, 10, 20, 246, 156, - 2, 252, 225, 35, 15, 10, 20, 246, 156, 2, 246, 250, 35, 15, 10, 20, 246, - 156, 2, 55, 35, 15, 10, 20, 246, 156, 2, 246, 156, 35, 15, 10, 20, 246, - 156, 2, 92, 175, 35, 15, 10, 20, 246, 156, 2, 62, 35, 15, 10, 20, 92, - 175, 2, 229, 163, 92, 35, 15, 10, 20, 62, 2, 252, 225, 35, 15, 10, 20, - 62, 2, 246, 250, 35, 15, 10, 20, 62, 2, 55, 35, 15, 10, 20, 62, 2, 246, - 156, 35, 15, 10, 20, 62, 2, 92, 175, 35, 15, 10, 20, 62, 2, 62, 35, 15, - 10, 20, 62, 2, 164, 64, 2, 123, 59, 15, 10, 20, 62, 2, 164, 64, 2, 101, - 59, 15, 10, 20, 62, 2, 164, 64, 2, 202, 59, 15, 10, 20, 62, 2, 164, 64, - 2, 55, 59, 15, 10, 20, 62, 2, 164, 64, 2, 252, 207, 59, 15, 10, 20, 252, - 217, 2, 123, 59, 15, 10, 20, 252, 217, 2, 101, 59, 15, 10, 20, 252, 217, - 2, 202, 59, 15, 10, 20, 252, 217, 2, 55, 59, 15, 10, 20, 252, 217, 2, - 252, 207, 59, 15, 10, 20, 252, 210, 2, 123, 59, 15, 10, 20, 252, 210, 2, - 101, 59, 15, 10, 20, 252, 210, 2, 202, 59, 15, 10, 20, 252, 210, 2, 55, - 59, 15, 10, 20, 252, 210, 2, 252, 207, 59, 15, 10, 20, 246, 205, 2, 55, - 59, 15, 10, 20, 123, 2, 101, 59, 15, 10, 20, 123, 2, 55, 59, 15, 10, 20, - 101, 2, 123, 59, 15, 10, 20, 101, 2, 55, 59, 15, 10, 20, 202, 2, 123, 59, - 15, 10, 20, 202, 2, 55, 59, 15, 10, 20, 246, 163, 2, 123, 59, 15, 10, 20, - 246, 163, 2, 101, 59, 15, 10, 20, 246, 163, 2, 202, 59, 15, 10, 20, 246, - 163, 2, 55, 59, 15, 10, 20, 252, 240, 2, 101, 59, 15, 10, 20, 252, 240, - 2, 202, 59, 15, 10, 20, 252, 240, 2, 55, 59, 15, 10, 20, 252, 237, 2, - 123, 59, 15, 10, 20, 252, 237, 2, 101, 59, 15, 10, 20, 252, 237, 2, 202, - 59, 15, 10, 20, 252, 237, 2, 55, 59, 15, 10, 20, 252, 241, 2, 101, 59, - 15, 10, 20, 253, 110, 2, 55, 59, 15, 10, 20, 252, 244, 2, 123, 59, 15, - 10, 20, 252, 244, 2, 55, 59, 15, 10, 20, 240, 157, 2, 123, 59, 15, 10, - 20, 240, 157, 2, 55, 59, 15, 10, 20, 252, 235, 2, 123, 59, 15, 10, 20, - 252, 235, 2, 101, 59, 15, 10, 20, 252, 235, 2, 202, 59, 15, 10, 20, 252, - 235, 2, 55, 59, 15, 10, 20, 253, 1, 2, 101, 59, 15, 10, 20, 253, 1, 2, - 55, 59, 15, 10, 20, 252, 214, 2, 123, 59, 15, 10, 20, 252, 214, 2, 101, - 59, 15, 10, 20, 252, 214, 2, 202, 59, 15, 10, 20, 252, 214, 2, 216, 59, - 15, 10, 20, 252, 214, 2, 55, 59, 15, 10, 20, 216, 2, 123, 59, 15, 10, 20, - 216, 2, 101, 59, 15, 10, 20, 216, 2, 202, 59, 15, 10, 20, 216, 2, 55, 59, - 15, 10, 20, 216, 2, 252, 207, 59, 15, 10, 20, 55, 2, 123, 59, 15, 10, 20, - 55, 2, 101, 59, 15, 10, 20, 55, 2, 202, 59, 15, 10, 20, 55, 2, 55, 59, - 15, 10, 20, 246, 156, 2, 123, 59, 15, 10, 20, 246, 156, 2, 101, 59, 15, - 10, 20, 246, 156, 2, 202, 59, 15, 10, 20, 246, 156, 2, 55, 59, 15, 10, - 20, 246, 156, 2, 252, 207, 59, 15, 10, 20, 252, 207, 2, 123, 59, 15, 10, - 20, 252, 207, 2, 55, 59, 15, 10, 20, 252, 207, 2, 229, 163, 92, 59, 15, - 10, 20, 62, 2, 123, 59, 15, 10, 20, 62, 2, 101, 59, 15, 10, 20, 62, 2, - 202, 59, 15, 10, 20, 62, 2, 55, 59, 15, 10, 20, 62, 2, 252, 207, 59, 15, - 10, 20, 62, 2, 164, 64, 2, 55, 124, 15, 10, 20, 62, 2, 164, 64, 2, 252, - 207, 124, 15, 10, 20, 252, 217, 2, 55, 124, 15, 10, 20, 252, 217, 2, 252, - 207, 124, 15, 10, 20, 252, 210, 2, 55, 124, 15, 10, 20, 252, 210, 2, 252, - 207, 124, 15, 10, 20, 246, 205, 2, 55, 124, 15, 10, 20, 246, 205, 2, 252, - 207, 124, 15, 10, 20, 246, 163, 2, 55, 124, 15, 10, 20, 246, 163, 2, 252, - 207, 124, 15, 10, 20, 240, 129, 2, 55, 124, 15, 10, 20, 240, 129, 2, 252, - 207, 124, 15, 10, 20, 252, 214, 2, 216, 124, 15, 10, 20, 252, 214, 2, 55, - 124, 15, 10, 20, 216, 2, 55, 124, 15, 10, 20, 246, 156, 2, 55, 124, 15, - 10, 20, 246, 156, 2, 252, 207, 124, 15, 10, 20, 62, 2, 55, 124, 15, 10, - 20, 62, 2, 252, 207, 124, 15, 10, 20, 237, 96, 2, 240, 224, 124, 15, 10, - 20, 237, 96, 2, 240, 248, 124, 15, 10, 20, 237, 96, 2, 241, 0, 124, 15, - 10, 20, 252, 241, 2, 92, 175, 44, 15, 10, 20, 252, 241, 2, 62, 44, 15, - 10, 20, 252, 244, 2, 92, 175, 44, 15, 10, 20, 252, 244, 2, 62, 44, 15, - 10, 20, 240, 157, 2, 92, 175, 44, 15, 10, 20, 240, 157, 2, 62, 44, 15, - 10, 20, 246, 163, 2, 92, 175, 44, 15, 10, 20, 246, 163, 2, 62, 44, 15, - 10, 20, 240, 129, 2, 92, 175, 44, 15, 10, 20, 240, 129, 2, 62, 44, 15, - 10, 20, 101, 2, 92, 175, 44, 15, 10, 20, 101, 2, 62, 44, 15, 10, 20, 123, - 2, 92, 175, 44, 15, 10, 20, 123, 2, 62, 44, 15, 10, 20, 202, 2, 92, 175, - 44, 15, 10, 20, 202, 2, 62, 44, 15, 10, 20, 252, 240, 2, 92, 175, 44, 15, - 10, 20, 252, 240, 2, 62, 44, 15, 10, 20, 252, 237, 2, 92, 175, 44, 15, - 10, 20, 252, 237, 2, 62, 44, 15, 10, 20, 240, 129, 2, 123, 44, 15, 10, - 20, 240, 129, 2, 101, 44, 15, 10, 20, 240, 129, 2, 202, 44, 15, 10, 20, - 240, 129, 2, 55, 44, 15, 10, 20, 240, 129, 2, 252, 225, 44, 15, 10, 20, - 246, 163, 2, 252, 225, 44, 15, 10, 20, 252, 240, 2, 252, 225, 44, 15, 10, - 20, 252, 237, 2, 252, 225, 44, 15, 10, 20, 252, 241, 2, 92, 175, 35, 15, - 10, 20, 252, 241, 2, 62, 35, 15, 10, 20, 252, 244, 2, 92, 175, 35, 15, - 10, 20, 252, 244, 2, 62, 35, 15, 10, 20, 240, 157, 2, 92, 175, 35, 15, - 10, 20, 240, 157, 2, 62, 35, 15, 10, 20, 246, 163, 2, 92, 175, 35, 15, - 10, 20, 246, 163, 2, 62, 35, 15, 10, 20, 240, 129, 2, 92, 175, 35, 15, - 10, 20, 240, 129, 2, 62, 35, 15, 10, 20, 101, 2, 92, 175, 35, 15, 10, 20, - 101, 2, 62, 35, 15, 10, 20, 123, 2, 92, 175, 35, 15, 10, 20, 123, 2, 62, - 35, 15, 10, 20, 202, 2, 92, 175, 35, 15, 10, 20, 202, 2, 62, 35, 15, 10, - 20, 252, 240, 2, 92, 175, 35, 15, 10, 20, 252, 240, 2, 62, 35, 15, 10, - 20, 252, 237, 2, 92, 175, 35, 15, 10, 20, 252, 237, 2, 62, 35, 15, 10, - 20, 240, 129, 2, 123, 35, 15, 10, 20, 240, 129, 2, 101, 35, 15, 10, 20, - 240, 129, 2, 202, 35, 15, 10, 20, 240, 129, 2, 55, 35, 15, 10, 20, 240, - 129, 2, 252, 225, 35, 15, 10, 20, 246, 163, 2, 252, 225, 35, 15, 10, 20, - 252, 240, 2, 252, 225, 35, 15, 10, 20, 252, 237, 2, 252, 225, 35, 15, 10, - 20, 240, 129, 2, 123, 59, 15, 10, 20, 240, 129, 2, 101, 59, 15, 10, 20, - 240, 129, 2, 202, 59, 15, 10, 20, 240, 129, 2, 55, 59, 15, 10, 20, 246, - 163, 2, 252, 207, 59, 15, 10, 20, 240, 129, 2, 252, 207, 59, 15, 10, 20, - 252, 241, 2, 55, 59, 15, 10, 20, 246, 163, 2, 123, 124, 15, 10, 20, 246, - 163, 2, 101, 124, 15, 10, 20, 246, 163, 2, 202, 124, 15, 10, 20, 240, - 129, 2, 123, 124, 15, 10, 20, 240, 129, 2, 101, 124, 15, 10, 20, 240, - 129, 2, 202, 124, 15, 10, 20, 252, 241, 2, 55, 124, 15, 10, 20, 253, 110, - 2, 55, 124, 15, 10, 20, 92, 2, 233, 150, 35, 15, 10, 20, 92, 2, 233, 150, - 44, 15, 238, 32, 42, 228, 180, 238, 32, 41, 228, 180, 10, 20, 252, 210, - 2, 123, 2, 55, 59, 15, 10, 20, 252, 210, 2, 101, 2, 123, 35, 15, 10, 20, - 252, 210, 2, 101, 2, 123, 59, 15, 10, 20, 252, 210, 2, 101, 2, 55, 59, - 15, 10, 20, 252, 210, 2, 202, 2, 55, 59, 15, 10, 20, 252, 210, 2, 55, 2, - 123, 59, 15, 10, 20, 252, 210, 2, 55, 2, 101, 59, 15, 10, 20, 252, 210, - 2, 55, 2, 202, 59, 15, 10, 20, 123, 2, 55, 2, 101, 35, 15, 10, 20, 123, - 2, 55, 2, 101, 59, 15, 10, 20, 101, 2, 55, 2, 62, 35, 15, 10, 20, 101, 2, - 55, 2, 92, 175, 35, 15, 10, 20, 246, 163, 2, 101, 2, 123, 59, 15, 10, 20, - 246, 163, 2, 123, 2, 101, 59, 15, 10, 20, 246, 163, 2, 123, 2, 92, 175, - 35, 15, 10, 20, 246, 163, 2, 55, 2, 101, 35, 15, 10, 20, 246, 163, 2, 55, - 2, 101, 59, 15, 10, 20, 246, 163, 2, 55, 2, 123, 59, 15, 10, 20, 246, - 163, 2, 55, 2, 55, 35, 15, 10, 20, 246, 163, 2, 55, 2, 55, 59, 15, 10, - 20, 252, 240, 2, 101, 2, 101, 35, 15, 10, 20, 252, 240, 2, 101, 2, 101, - 59, 15, 10, 20, 252, 240, 2, 55, 2, 55, 35, 15, 10, 20, 240, 129, 2, 101, - 2, 55, 35, 15, 10, 20, 240, 129, 2, 101, 2, 55, 59, 15, 10, 20, 240, 129, - 2, 123, 2, 62, 35, 15, 10, 20, 240, 129, 2, 55, 2, 202, 35, 15, 10, 20, - 240, 129, 2, 55, 2, 202, 59, 15, 10, 20, 240, 129, 2, 55, 2, 55, 35, 15, - 10, 20, 240, 129, 2, 55, 2, 55, 59, 15, 10, 20, 252, 237, 2, 101, 2, 92, - 175, 35, 15, 10, 20, 252, 237, 2, 202, 2, 55, 35, 15, 10, 20, 252, 237, - 2, 202, 2, 55, 59, 15, 10, 20, 252, 241, 2, 55, 2, 101, 35, 15, 10, 20, - 252, 241, 2, 55, 2, 101, 59, 15, 10, 20, 252, 241, 2, 55, 2, 55, 59, 15, - 10, 20, 252, 241, 2, 55, 2, 62, 35, 15, 10, 20, 252, 244, 2, 123, 2, 55, - 35, 15, 10, 20, 252, 244, 2, 55, 2, 55, 35, 15, 10, 20, 252, 244, 2, 55, - 2, 55, 59, 15, 10, 20, 252, 244, 2, 55, 2, 92, 175, 35, 15, 10, 20, 240, - 157, 2, 55, 2, 55, 35, 15, 10, 20, 240, 157, 2, 55, 2, 62, 35, 15, 10, - 20, 240, 157, 2, 55, 2, 92, 175, 35, 15, 10, 20, 252, 235, 2, 202, 2, 55, - 35, 15, 10, 20, 252, 235, 2, 202, 2, 55, 59, 15, 10, 20, 253, 1, 2, 55, - 2, 101, 35, 15, 10, 20, 253, 1, 2, 55, 2, 55, 35, 15, 10, 20, 216, 2, - 101, 2, 55, 35, 15, 10, 20, 216, 2, 101, 2, 62, 35, 15, 10, 20, 216, 2, - 101, 2, 92, 175, 35, 15, 10, 20, 216, 2, 123, 2, 123, 59, 15, 10, 20, - 216, 2, 123, 2, 123, 35, 15, 10, 20, 216, 2, 202, 2, 55, 35, 15, 10, 20, - 216, 2, 202, 2, 55, 59, 15, 10, 20, 216, 2, 55, 2, 101, 35, 15, 10, 20, - 216, 2, 55, 2, 101, 59, 15, 10, 20, 55, 2, 101, 2, 123, 59, 15, 10, 20, - 55, 2, 101, 2, 55, 59, 15, 10, 20, 55, 2, 101, 2, 62, 35, 15, 10, 20, 55, - 2, 123, 2, 101, 59, 15, 10, 20, 55, 2, 123, 2, 55, 59, 15, 10, 20, 55, 2, - 202, 2, 123, 59, 15, 10, 20, 55, 2, 202, 2, 55, 59, 15, 10, 20, 55, 2, - 123, 2, 202, 59, 15, 10, 20, 252, 207, 2, 55, 2, 123, 59, 15, 10, 20, - 252, 207, 2, 55, 2, 55, 59, 15, 10, 20, 246, 156, 2, 101, 2, 55, 59, 15, - 10, 20, 246, 156, 2, 101, 2, 92, 175, 35, 15, 10, 20, 246, 156, 2, 123, - 2, 55, 35, 15, 10, 20, 246, 156, 2, 123, 2, 55, 59, 15, 10, 20, 246, 156, - 2, 123, 2, 92, 175, 35, 15, 10, 20, 246, 156, 2, 55, 2, 62, 35, 15, 10, - 20, 246, 156, 2, 55, 2, 92, 175, 35, 15, 10, 20, 62, 2, 55, 2, 55, 35, - 15, 10, 20, 62, 2, 55, 2, 55, 59, 15, 10, 20, 252, 217, 2, 202, 2, 62, - 35, 15, 10, 20, 252, 210, 2, 123, 2, 62, 35, 15, 10, 20, 252, 210, 2, - 123, 2, 92, 175, 35, 15, 10, 20, 252, 210, 2, 202, 2, 62, 35, 15, 10, 20, - 252, 210, 2, 202, 2, 92, 175, 35, 15, 10, 20, 252, 210, 2, 55, 2, 62, 35, - 15, 10, 20, 252, 210, 2, 55, 2, 92, 175, 35, 15, 10, 20, 123, 2, 55, 2, - 62, 35, 15, 10, 20, 123, 2, 101, 2, 92, 175, 35, 15, 10, 20, 123, 2, 55, - 2, 92, 175, 35, 15, 10, 20, 246, 163, 2, 202, 2, 92, 175, 35, 15, 10, 20, - 252, 240, 2, 101, 2, 62, 35, 15, 10, 20, 240, 129, 2, 101, 2, 62, 35, 15, - 10, 20, 252, 237, 2, 101, 2, 62, 35, 15, 10, 20, 216, 2, 123, 2, 62, 35, - 15, 10, 20, 216, 2, 55, 2, 62, 35, 15, 10, 20, 62, 2, 101, 2, 62, 35, 15, - 10, 20, 62, 2, 123, 2, 62, 35, 15, 10, 20, 62, 2, 55, 2, 62, 35, 15, 10, - 20, 55, 2, 55, 2, 62, 35, 15, 10, 20, 253, 1, 2, 55, 2, 62, 35, 15, 10, - 20, 246, 156, 2, 101, 2, 62, 35, 15, 10, 20, 253, 1, 2, 55, 2, 101, 59, - 15, 10, 20, 216, 2, 101, 2, 55, 59, 15, 10, 20, 252, 244, 2, 55, 2, 62, - 35, 15, 10, 20, 252, 214, 2, 55, 2, 62, 35, 15, 10, 20, 246, 156, 2, 123, - 2, 101, 59, 15, 10, 20, 55, 2, 202, 2, 62, 35, 15, 10, 20, 216, 2, 123, - 2, 55, 59, 15, 10, 20, 252, 214, 2, 55, 2, 55, 35, 15, 10, 20, 216, 2, - 123, 2, 55, 35, 15, 10, 20, 246, 156, 2, 123, 2, 101, 35, 15, 10, 20, - 123, 2, 101, 2, 62, 35, 15, 10, 20, 101, 2, 123, 2, 62, 35, 15, 10, 20, - 55, 2, 123, 2, 62, 35, 15, 10, 20, 252, 235, 2, 55, 2, 62, 35, 15, 10, - 20, 252, 217, 2, 101, 2, 62, 35, 15, 10, 20, 252, 214, 2, 55, 2, 55, 59, - 15, 10, 20, 252, 244, 2, 123, 2, 55, 59, 15, 10, 20, 252, 240, 2, 55, 2, - 55, 59, 15, 10, 20, 246, 163, 2, 202, 2, 62, 35, 15, 10, 20, 246, 156, 2, - 123, 2, 62, 35, 15, 10, 20, 241, 230, 248, 189, 254, 203, 235, 187, 247, - 20, 5, 44, 15, 10, 20, 251, 128, 248, 189, 254, 203, 235, 187, 247, 20, - 5, 44, 15, 10, 20, 242, 54, 44, 15, 10, 20, 242, 51, 44, 15, 10, 20, 234, - 163, 44, 15, 10, 20, 245, 150, 44, 15, 10, 20, 239, 215, 44, 15, 10, 20, - 237, 171, 44, 15, 10, 20, 235, 9, 44, 15, 10, 20, 241, 230, 44, 15, 10, - 20, 229, 214, 237, 171, 233, 64, 10, 20, 225, 93, 251, 181, 53, 10, 20, - 232, 87, 232, 73, 230, 226, 38, 230, 99, 38, 230, 100, 38, 230, 101, 38, - 230, 102, 38, 230, 103, 38, 230, 104, 38, 230, 105, 38, 230, 106, 38, - 230, 107, 38, 229, 59, 38, 229, 60, 38, 229, 61, 38, 229, 62, 38, 229, - 63, 38, 229, 64, 38, 229, 65, 228, 178, 211, 32, 61, 237, 67, 228, 178, - 211, 32, 61, 90, 237, 67, 228, 178, 211, 32, 61, 90, 246, 162, 240, 121, - 228, 178, 211, 32, 61, 237, 66, 228, 178, 211, 32, 61, 230, 140, 228, - 178, 211, 32, 61, 229, 165, 76, 228, 178, 211, 32, 61, 233, 82, 76, 228, - 178, 211, 32, 61, 42, 63, 230, 137, 104, 228, 178, 211, 32, 61, 41, 63, - 230, 137, 234, 22, 228, 178, 211, 32, 61, 169, 231, 218, 36, 20, 42, 240, - 170, 36, 20, 41, 240, 170, 36, 47, 240, 128, 42, 240, 170, 36, 47, 240, - 128, 41, 240, 170, 36, 237, 83, 42, 240, 170, 36, 237, 83, 41, 240, 170, - 36, 230, 237, 235, 16, 228, 178, 211, 32, 61, 135, 56, 235, 128, 228, - 178, 211, 32, 61, 254, 213, 240, 151, 228, 178, 211, 32, 61, 254, 199, - 240, 151, 228, 178, 211, 32, 61, 184, 240, 138, 228, 178, 211, 32, 61, - 246, 239, 184, 240, 138, 228, 178, 211, 32, 61, 42, 228, 180, 228, 178, - 211, 32, 61, 41, 228, 180, 228, 178, 211, 32, 61, 42, 240, 137, 104, 228, - 178, 211, 32, 61, 41, 240, 137, 104, 228, 178, 211, 32, 61, 42, 233, 89, - 240, 158, 104, 228, 178, 211, 32, 61, 41, 233, 89, 240, 158, 104, 228, - 178, 211, 32, 61, 42, 86, 230, 137, 104, 228, 178, 211, 32, 61, 41, 86, - 230, 137, 104, 228, 178, 211, 32, 61, 42, 47, 240, 117, 104, 228, 178, - 211, 32, 61, 41, 47, 240, 117, 104, 228, 178, 211, 32, 61, 42, 240, 117, - 104, 228, 178, 211, 32, 61, 41, 240, 117, 104, 228, 178, 211, 32, 61, 42, - 237, 79, 104, 228, 178, 211, 32, 61, 41, 237, 79, 104, 228, 178, 211, 32, - 61, 42, 63, 237, 79, 104, 228, 178, 211, 32, 61, 41, 63, 237, 79, 104, - 238, 47, 246, 164, 63, 238, 47, 246, 164, 228, 178, 211, 32, 61, 42, 37, - 104, 228, 178, 211, 32, 61, 41, 37, 104, 237, 110, 231, 223, 230, 176, - 231, 223, 246, 239, 231, 223, 47, 246, 239, 231, 223, 237, 110, 184, 240, - 138, 230, 176, 184, 240, 138, 246, 239, 184, 240, 138, 3, 237, 67, 3, 90, - 237, 67, 3, 246, 162, 240, 121, 3, 230, 140, 3, 237, 66, 3, 233, 82, 76, - 3, 229, 165, 76, 3, 254, 213, 240, 151, 3, 42, 228, 180, 3, 41, 228, 180, - 3, 42, 240, 137, 104, 3, 41, 240, 137, 104, 3, 42, 233, 89, 240, 158, - 104, 3, 41, 233, 89, 240, 158, 104, 3, 65, 53, 3, 230, 142, 3, 231, 198, - 3, 79, 53, 3, 227, 193, 3, 231, 190, 53, 3, 228, 175, 53, 3, 237, 51, 53, - 3, 235, 37, 233, 104, 3, 237, 179, 53, 3, 235, 86, 53, 3, 230, 145, 253, - 113, 10, 233, 150, 44, 15, 10, 236, 254, 2, 233, 150, 46, 10, 233, 196, - 44, 15, 10, 246, 237, 232, 193, 10, 233, 210, 44, 15, 10, 240, 224, 44, - 15, 10, 240, 224, 124, 15, 10, 240, 248, 44, 15, 10, 240, 248, 124, 15, - 10, 241, 0, 44, 15, 10, 241, 0, 124, 15, 10, 237, 96, 44, 15, 10, 237, - 96, 124, 15, 10, 241, 252, 44, 15, 10, 241, 252, 124, 15, 10, 1, 164, 44, - 15, 10, 1, 92, 2, 240, 229, 64, 44, 15, 10, 1, 92, 2, 240, 229, 64, 35, - 15, 10, 1, 92, 2, 164, 64, 44, 15, 10, 1, 92, 2, 164, 64, 35, 15, 10, 1, - 253, 54, 2, 164, 64, 44, 15, 10, 1, 253, 54, 2, 164, 64, 35, 15, 10, 1, - 92, 2, 164, 240, 144, 44, 15, 10, 1, 92, 2, 164, 240, 144, 35, 15, 10, 1, - 62, 2, 164, 64, 44, 15, 10, 1, 62, 2, 164, 64, 35, 15, 10, 1, 62, 2, 164, - 64, 59, 15, 10, 1, 62, 2, 164, 64, 124, 15, 10, 1, 92, 44, 15, 10, 1, 92, - 35, 15, 10, 1, 252, 217, 44, 15, 10, 1, 252, 217, 35, 15, 10, 1, 252, - 217, 59, 15, 10, 1, 252, 217, 124, 15, 10, 1, 252, 210, 235, 129, 44, 15, - 10, 1, 252, 210, 235, 129, 35, 15, 10, 1, 252, 210, 44, 15, 10, 1, 252, - 210, 35, 15, 10, 1, 252, 210, 59, 15, 10, 1, 252, 210, 124, 15, 10, 1, - 246, 205, 44, 15, 10, 1, 246, 205, 35, 15, 10, 1, 246, 205, 59, 15, 10, - 1, 246, 205, 124, 15, 10, 1, 123, 44, 15, 10, 1, 123, 35, 15, 10, 1, 123, - 59, 15, 10, 1, 123, 124, 15, 10, 1, 101, 44, 15, 10, 1, 101, 35, 15, 10, - 1, 101, 59, 15, 10, 1, 101, 124, 15, 10, 1, 202, 44, 15, 10, 1, 202, 35, - 15, 10, 1, 202, 59, 15, 10, 1, 202, 124, 15, 10, 1, 253, 56, 44, 15, 10, - 1, 253, 56, 35, 15, 10, 1, 247, 211, 44, 15, 10, 1, 247, 211, 35, 15, 10, - 1, 252, 225, 44, 15, 10, 1, 252, 225, 35, 15, 10, 1, 246, 250, 44, 15, - 10, 1, 246, 250, 35, 15, 10, 1, 246, 163, 44, 15, 10, 1, 246, 163, 35, - 15, 10, 1, 246, 163, 59, 15, 10, 1, 246, 163, 124, 15, 10, 1, 240, 129, - 44, 15, 10, 1, 240, 129, 35, 15, 10, 1, 240, 129, 59, 15, 10, 1, 240, - 129, 124, 15, 10, 1, 252, 240, 44, 15, 10, 1, 252, 240, 35, 15, 10, 1, - 252, 240, 59, 15, 10, 1, 252, 240, 124, 15, 10, 1, 252, 237, 44, 15, 10, - 1, 252, 237, 35, 15, 10, 1, 252, 237, 59, 15, 10, 1, 252, 237, 124, 15, - 10, 1, 252, 241, 44, 15, 10, 1, 252, 241, 35, 15, 10, 1, 252, 241, 59, - 15, 10, 1, 252, 241, 124, 15, 10, 1, 253, 110, 44, 15, 10, 1, 253, 110, - 35, 15, 10, 1, 253, 110, 59, 15, 10, 1, 253, 110, 124, 15, 10, 1, 252, - 244, 44, 15, 10, 1, 252, 244, 35, 15, 10, 1, 252, 244, 59, 15, 10, 1, - 252, 244, 124, 15, 10, 1, 240, 157, 44, 15, 10, 1, 240, 157, 35, 15, 10, - 1, 240, 157, 59, 15, 10, 1, 240, 157, 124, 15, 10, 1, 252, 235, 44, 15, - 10, 1, 252, 235, 35, 15, 10, 1, 252, 235, 59, 15, 10, 1, 252, 235, 124, - 15, 10, 1, 253, 1, 44, 15, 10, 1, 253, 1, 35, 15, 10, 1, 253, 1, 59, 15, - 10, 1, 253, 1, 124, 15, 10, 1, 252, 214, 44, 15, 10, 1, 252, 214, 35, 15, - 10, 1, 252, 214, 59, 15, 10, 1, 252, 214, 124, 15, 10, 1, 216, 44, 15, - 10, 1, 216, 35, 15, 10, 1, 216, 59, 15, 10, 1, 216, 124, 15, 10, 1, 55, - 44, 15, 10, 1, 55, 35, 15, 10, 1, 55, 59, 15, 10, 1, 55, 124, 15, 10, 1, - 246, 156, 44, 15, 10, 1, 246, 156, 35, 15, 10, 1, 246, 156, 59, 15, 10, - 1, 246, 156, 124, 15, 10, 1, 252, 207, 44, 15, 10, 1, 252, 207, 35, 15, - 10, 1, 252, 207, 59, 15, 10, 1, 252, 207, 124, 15, 10, 1, 253, 54, 44, - 15, 10, 1, 253, 54, 35, 15, 10, 1, 92, 175, 44, 15, 10, 1, 92, 175, 35, - 15, 10, 1, 62, 44, 15, 10, 1, 62, 35, 15, 10, 1, 62, 59, 15, 10, 1, 62, - 124, 15, 10, 20, 216, 2, 92, 2, 240, 229, 64, 44, 15, 10, 20, 216, 2, 92, - 2, 240, 229, 64, 35, 15, 10, 20, 216, 2, 92, 2, 164, 64, 44, 15, 10, 20, - 216, 2, 92, 2, 164, 64, 35, 15, 10, 20, 216, 2, 92, 2, 164, 240, 144, 44, - 15, 10, 20, 216, 2, 92, 2, 164, 240, 144, 35, 15, 10, 20, 216, 2, 92, 44, - 15, 10, 20, 216, 2, 92, 35, 15, 247, 27, 241, 23, 233, 173, 237, 69, 100, - 229, 165, 76, 100, 231, 199, 76, 100, 65, 53, 100, 237, 179, 53, 100, - 235, 86, 53, 100, 230, 142, 100, 229, 172, 100, 42, 228, 180, 100, 41, - 228, 180, 100, 231, 198, 100, 79, 53, 100, 237, 67, 100, 227, 193, 100, - 246, 162, 240, 121, 100, 233, 104, 100, 21, 240, 126, 100, 21, 118, 100, - 21, 113, 100, 21, 166, 100, 21, 158, 100, 21, 173, 100, 21, 183, 100, 21, - 194, 100, 21, 187, 100, 21, 192, 100, 237, 66, 100, 230, 140, 100, 231, - 190, 53, 100, 237, 51, 53, 100, 228, 175, 53, 100, 233, 82, 76, 100, 230, - 145, 253, 113, 100, 7, 6, 1, 57, 100, 7, 6, 1, 254, 185, 100, 7, 6, 1, - 254, 194, 100, 7, 6, 1, 222, 222, 100, 7, 6, 1, 72, 100, 7, 6, 1, 254, - 191, 100, 7, 6, 1, 214, 100, 7, 6, 1, 212, 100, 7, 6, 1, 74, 100, 7, 6, - 1, 254, 192, 100, 7, 6, 1, 254, 186, 100, 7, 6, 1, 149, 100, 7, 6, 1, - 185, 100, 7, 6, 1, 199, 100, 7, 6, 1, 73, 100, 7, 6, 1, 254, 187, 100, 7, - 6, 1, 254, 196, 100, 7, 6, 1, 146, 100, 7, 6, 1, 193, 100, 7, 6, 1, 254, - 183, 100, 7, 6, 1, 66, 100, 7, 6, 1, 196, 100, 7, 6, 1, 254, 195, 100, 7, - 6, 1, 254, 184, 100, 7, 6, 1, 254, 190, 100, 7, 6, 1, 254, 193, 100, 42, - 37, 104, 100, 235, 37, 233, 104, 100, 41, 37, 104, 100, 230, 125, 235, - 24, 100, 184, 240, 138, 100, 240, 163, 235, 24, 100, 7, 3, 1, 57, 100, 7, - 3, 1, 254, 185, 100, 7, 3, 1, 254, 194, 100, 7, 3, 1, 222, 222, 100, 7, - 3, 1, 72, 100, 7, 3, 1, 254, 191, 100, 7, 3, 1, 214, 100, 7, 3, 1, 212, - 100, 7, 3, 1, 74, 100, 7, 3, 1, 254, 192, 100, 7, 3, 1, 254, 186, 100, 7, - 3, 1, 149, 100, 7, 3, 1, 185, 100, 7, 3, 1, 199, 100, 7, 3, 1, 73, 100, - 7, 3, 1, 254, 187, 100, 7, 3, 1, 254, 196, 100, 7, 3, 1, 146, 100, 7, 3, - 1, 193, 100, 7, 3, 1, 254, 183, 100, 7, 3, 1, 66, 100, 7, 3, 1, 196, 100, - 7, 3, 1, 254, 195, 100, 7, 3, 1, 254, 184, 100, 7, 3, 1, 254, 190, 100, - 7, 3, 1, 254, 193, 100, 42, 240, 137, 104, 100, 61, 240, 138, 100, 41, - 240, 137, 104, 100, 205, 100, 42, 63, 228, 180, 100, 41, 63, 228, 180, - 83, 90, 246, 162, 240, 121, 83, 42, 237, 79, 104, 83, 41, 237, 79, 104, - 83, 90, 237, 67, 83, 48, 237, 44, 246, 164, 83, 48, 1, 253, 10, 83, 48, - 1, 3, 57, 83, 48, 1, 3, 74, 83, 48, 1, 3, 66, 83, 48, 1, 3, 72, 83, 48, - 1, 3, 73, 83, 48, 1, 3, 191, 83, 48, 1, 3, 252, 233, 83, 48, 1, 3, 252, - 251, 83, 48, 1, 3, 253, 18, 83, 222, 252, 232, 39, 240, 181, 76, 83, 48, - 1, 57, 83, 48, 1, 74, 83, 48, 1, 66, 83, 48, 1, 72, 83, 48, 1, 73, 83, - 48, 1, 177, 83, 48, 1, 253, 7, 83, 48, 1, 253, 34, 83, 48, 1, 253, 6, 83, - 48, 1, 253, 33, 83, 48, 1, 252, 204, 83, 48, 1, 253, 24, 83, 48, 1, 253, - 26, 83, 48, 1, 253, 52, 83, 48, 1, 253, 25, 83, 48, 1, 252, 202, 83, 48, - 1, 253, 44, 83, 48, 1, 253, 18, 83, 48, 1, 253, 9, 83, 48, 1, 96, 83, 48, - 1, 252, 201, 83, 48, 1, 252, 248, 83, 48, 1, 252, 227, 83, 48, 1, 252, - 247, 83, 48, 1, 253, 8, 83, 48, 1, 154, 83, 48, 1, 253, 41, 83, 48, 1, - 253, 59, 83, 48, 1, 252, 252, 83, 48, 1, 253, 21, 83, 48, 1, 198, 83, 48, - 1, 252, 239, 83, 48, 1, 252, 229, 83, 48, 1, 253, 13, 83, 48, 1, 253, 14, - 83, 48, 1, 191, 83, 48, 1, 252, 233, 83, 48, 1, 252, 251, 83, 48, 1, 208, - 83, 48, 1, 253, 37, 83, 48, 1, 253, 3, 83, 48, 1, 253, 36, 83, 48, 1, - 252, 246, 83, 48, 1, 252, 208, 83, 48, 1, 199, 83, 48, 237, 107, 240, - 181, 76, 83, 48, 229, 189, 240, 181, 76, 83, 26, 235, 92, 83, 26, 1, 235, - 77, 83, 26, 1, 228, 195, 83, 26, 1, 228, 199, 83, 26, 1, 237, 139, 83, - 26, 1, 228, 201, 83, 26, 1, 228, 202, 83, 26, 1, 235, 81, 83, 26, 1, 228, - 209, 83, 26, 1, 237, 142, 83, 26, 1, 227, 197, 83, 26, 1, 228, 204, 83, - 26, 1, 228, 205, 83, 26, 1, 229, 188, 83, 26, 1, 227, 140, 83, 26, 1, - 227, 139, 83, 26, 1, 228, 193, 83, 26, 1, 237, 137, 83, 26, 1, 237, 141, - 83, 26, 1, 229, 193, 83, 26, 1, 229, 180, 83, 26, 1, 240, 213, 83, 26, 1, - 230, 159, 83, 26, 1, 237, 134, 83, 26, 1, 237, 130, 83, 26, 1, 229, 191, - 83, 26, 1, 233, 128, 83, 26, 1, 233, 131, 83, 26, 1, 233, 138, 83, 26, 1, - 233, 133, 83, 26, 1, 237, 133, 83, 26, 1, 57, 83, 26, 1, 253, 4, 83, 26, - 1, 191, 83, 26, 1, 247, 61, 83, 26, 1, 253, 177, 83, 26, 1, 72, 83, 26, - 1, 247, 232, 83, 26, 1, 253, 96, 83, 26, 1, 73, 83, 26, 1, 252, 208, 83, - 26, 1, 247, 223, 83, 26, 1, 253, 15, 83, 26, 1, 252, 251, 83, 26, 1, 66, - 83, 26, 1, 247, 227, 83, 26, 1, 252, 250, 83, 26, 1, 253, 27, 83, 26, 1, - 252, 233, 83, 26, 1, 253, 100, 83, 26, 1, 253, 28, 83, 26, 1, 74, 100, - 248, 7, 53, 100, 241, 215, 53, 100, 190, 53, 100, 235, 16, 100, 237, 150, - 125, 100, 254, 19, 53, 100, 254, 16, 53, 83, 243, 108, 157, 231, 210, 83, - 117, 58, 83, 235, 18, 58, 83, 81, 58, 83, 231, 191, 58, 83, 86, 235, 27, - 83, 63, 235, 20, 229, 185, 230, 129, 235, 145, 229, 185, 230, 129, 230, - 131, 229, 185, 230, 129, 230, 117, 239, 170, 229, 213, 230, 177, 229, - 213, 230, 177, 50, 45, 4, 248, 251, 57, 50, 45, 4, 249, 20, 72, 50, 45, - 4, 249, 12, 74, 50, 45, 4, 249, 40, 73, 50, 45, 4, 248, 253, 66, 50, 45, - 4, 248, 244, 252, 203, 50, 45, 4, 249, 27, 253, 20, 50, 45, 4, 248, 250, - 253, 12, 50, 45, 4, 249, 1, 253, 57, 50, 45, 4, 249, 31, 253, 31, 50, 45, - 4, 249, 36, 252, 213, 50, 45, 4, 249, 28, 253, 117, 50, 45, 4, 249, 18, - 253, 90, 50, 45, 4, 249, 42, 253, 118, 50, 45, 4, 249, 54, 177, 50, 45, - 4, 249, 26, 253, 6, 50, 45, 4, 249, 44, 253, 7, 50, 45, 4, 249, 47, 253, - 33, 50, 45, 4, 249, 57, 253, 34, 50, 45, 4, 249, 56, 198, 50, 45, 4, 249, - 0, 253, 13, 50, 45, 4, 249, 50, 252, 239, 50, 45, 4, 249, 2, 253, 14, 50, - 45, 4, 249, 7, 252, 229, 50, 45, 4, 248, 249, 252, 201, 50, 45, 4, 249, - 8, 252, 247, 50, 45, 4, 249, 14, 252, 248, 50, 45, 4, 249, 32, 253, 8, - 50, 45, 4, 249, 35, 252, 227, 50, 45, 4, 248, 246, 213, 50, 45, 4, 249, - 49, 253, 0, 50, 45, 4, 249, 21, 252, 223, 50, 45, 4, 248, 254, 253, 50, - 50, 45, 4, 249, 30, 253, 82, 50, 45, 4, 249, 3, 253, 35, 50, 45, 4, 249, - 55, 253, 190, 50, 45, 4, 249, 6, 253, 131, 50, 45, 4, 249, 16, 253, 159, - 50, 45, 4, 249, 39, 208, 50, 45, 4, 249, 11, 253, 36, 50, 45, 4, 249, 33, - 253, 37, 50, 45, 4, 248, 245, 252, 246, 50, 45, 4, 249, 10, 253, 3, 50, - 45, 4, 249, 15, 252, 204, 50, 45, 4, 248, 252, 253, 52, 50, 45, 4, 249, - 23, 253, 24, 50, 45, 4, 248, 255, 253, 25, 50, 45, 4, 249, 37, 253, 26, - 50, 45, 4, 249, 38, 252, 202, 50, 45, 4, 248, 247, 253, 9, 50, 45, 4, - 249, 19, 253, 44, 50, 45, 4, 248, 248, 96, 50, 45, 4, 249, 46, 253, 18, - 50, 45, 4, 249, 34, 252, 208, 50, 45, 4, 249, 52, 252, 250, 50, 45, 4, - 249, 22, 253, 27, 50, 45, 4, 249, 24, 253, 10, 50, 45, 4, 249, 4, 252, - 226, 50, 45, 4, 249, 51, 253, 46, 50, 45, 4, 249, 5, 253, 65, 50, 45, 4, - 249, 9, 253, 165, 50, 45, 4, 249, 25, 254, 22, 50, 45, 4, 249, 58, 252, - 222, 50, 45, 4, 249, 48, 247, 134, 50, 45, 4, 249, 60, 249, 218, 50, 45, - 4, 249, 29, 247, 95, 50, 45, 4, 249, 13, 251, 120, 50, 45, 4, 249, 41, - 251, 119, 50, 45, 4, 249, 53, 251, 166, 50, 45, 4, 249, 17, 251, 167, 50, - 45, 4, 249, 45, 251, 186, 50, 45, 4, 249, 43, 252, 3, 50, 45, 4, 249, 59, - 247, 59, 50, 45, 4, 249, 61, 113, 50, 45, 14, 242, 69, 50, 45, 14, 242, - 70, 50, 45, 14, 242, 71, 50, 45, 14, 242, 72, 50, 45, 14, 242, 73, 50, - 45, 14, 242, 74, 50, 45, 14, 242, 75, 50, 45, 14, 242, 76, 50, 45, 14, - 242, 77, 50, 45, 14, 242, 78, 50, 45, 14, 242, 79, 50, 45, 14, 242, 80, - 50, 45, 14, 242, 81, 50, 45, 14, 242, 82, 50, 45, 89, 249, 62, 247, 4, - 50, 45, 89, 249, 63, 237, 225, 50, 45, 89, 249, 64, 241, 119, 50, 45, 89, - 249, 65, 238, 205, 50, 45, 89, 242, 83, 244, 117, 50, 45, 89, 242, 84, - 233, 29, 50, 45, 89, 242, 85, 248, 35, 50, 45, 89, 242, 86, 247, 195, 50, - 45, 89, 242, 87, 233, 24, 50, 45, 89, 242, 88, 234, 119, 50, 45, 89, 242, - 89, 251, 234, 50, 45, 89, 242, 90, 242, 210, 50, 45, 89, 242, 91, 247, - 127, 50, 45, 89, 242, 92, 242, 216, 50, 45, 89, 249, 66, 237, 224, 50, - 45, 89, 249, 67, 236, 8, 50, 45, 89, 249, 68, 239, 173, 50, 45, 89, 249, - 69, 240, 11, 50, 45, 89, 249, 70, 234, 44, 50, 45, 233, 115, 249, 71, - 244, 50, 50, 45, 233, 115, 249, 72, 236, 116, 50, 45, 89, 249, 73, 248, - 121, 50, 45, 89, 249, 74, 241, 84, 50, 45, 89, 242, 93, 50, 45, 233, 115, - 249, 75, 238, 100, 50, 45, 233, 115, 249, 76, 244, 120, 50, 45, 89, 249, - 77, 236, 16, 50, 45, 89, 249, 78, 241, 40, 50, 45, 89, 242, 94, 50, 45, - 89, 249, 79, 242, 26, 50, 45, 89, 242, 95, 50, 45, 89, 242, 96, 50, 45, - 89, 249, 80, 240, 179, 50, 45, 89, 242, 97, 50, 45, 89, 242, 98, 50, 45, - 89, 242, 99, 50, 45, 233, 115, 249, 81, 240, 55, 50, 45, 89, 242, 101, - 50, 45, 89, 242, 102, 50, 45, 89, 249, 82, 237, 199, 50, 45, 89, 242, - 103, 50, 45, 89, 242, 104, 50, 45, 89, 249, 83, 234, 110, 50, 45, 89, - 249, 84, 235, 250, 50, 45, 89, 242, 105, 50, 45, 89, 242, 106, 50, 45, - 89, 242, 107, 50, 45, 89, 242, 108, 50, 45, 89, 242, 109, 50, 45, 89, - 242, 110, 50, 45, 89, 242, 111, 50, 45, 89, 242, 112, 50, 45, 89, 242, - 113, 50, 45, 89, 249, 85, 239, 119, 50, 45, 89, 242, 114, 50, 45, 89, - 249, 86, 241, 81, 50, 45, 89, 242, 115, 50, 45, 89, 242, 116, 50, 45, 89, - 242, 117, 50, 45, 89, 242, 118, 50, 45, 89, 242, 119, 50, 45, 89, 242, - 120, 50, 45, 89, 242, 121, 50, 45, 89, 242, 122, 50, 45, 89, 242, 123, - 50, 45, 89, 242, 124, 50, 45, 89, 242, 125, 50, 45, 89, 249, 87, 235, - 176, 50, 45, 89, 249, 88, 231, 69, 50, 45, 89, 249, 89, 234, 15, 50, 45, - 89, 249, 90, 238, 64, 50, 45, 89, 249, 91, 58, 50, 45, 89, 242, 152, 50, - 45, 89, 249, 92, 240, 25, 50, 45, 89, 242, 153, 50, 45, 89, 242, 154, 50, - 45, 89, 249, 93, 237, 29, 233, 191, 50, 45, 89, 249, 94, 233, 191, 50, - 45, 89, 249, 95, 236, 25, 238, 225, 50, 45, 89, 249, 96, 240, 84, 50, 45, - 89, 242, 155, 50, 45, 89, 242, 156, 50, 45, 233, 115, 249, 97, 238, 187, - 50, 45, 89, 242, 157, 50, 45, 89, 242, 158, 50, 45, 89, 242, 160, 50, 45, - 89, 242, 161, 50, 45, 89, 242, 162, 50, 45, 89, 249, 98, 243, 28, 50, 45, - 89, 242, 163, 50, 45, 89, 242, 164, 50, 45, 89, 242, 165, 50, 45, 89, - 242, 166, 50, 45, 89, 242, 167, 50, 45, 89, 237, 53, 242, 100, 50, 45, - 89, 237, 53, 242, 126, 50, 45, 89, 237, 53, 242, 127, 50, 45, 89, 237, - 53, 242, 128, 50, 45, 89, 237, 53, 242, 129, 50, 45, 89, 237, 53, 242, - 130, 50, 45, 89, 237, 53, 242, 131, 50, 45, 89, 237, 53, 242, 132, 50, - 45, 89, 237, 53, 242, 133, 50, 45, 89, 237, 53, 242, 134, 50, 45, 89, - 237, 53, 242, 135, 50, 45, 89, 237, 53, 242, 136, 50, 45, 89, 237, 53, - 242, 137, 50, 45, 89, 237, 53, 242, 138, 50, 45, 89, 237, 53, 242, 139, - 50, 45, 89, 237, 53, 242, 140, 50, 45, 89, 237, 53, 242, 141, 50, 45, 89, - 237, 53, 242, 142, 50, 45, 89, 237, 53, 242, 143, 50, 45, 89, 237, 53, - 242, 144, 50, 45, 89, 237, 53, 242, 145, 50, 45, 89, 237, 53, 242, 146, - 50, 45, 89, 237, 53, 242, 147, 50, 45, 89, 237, 53, 242, 148, 50, 45, 89, - 237, 53, 242, 149, 50, 45, 89, 237, 53, 242, 150, 50, 45, 89, 237, 53, - 242, 151, 50, 45, 89, 237, 53, 242, 159, 50, 45, 89, 237, 53, 242, 168, - 210, 247, 8, 231, 247, 240, 138, 210, 247, 8, 231, 247, 246, 164, 210, - 240, 245, 76, 210, 65, 118, 210, 65, 113, 210, 65, 166, 210, 65, 158, - 210, 65, 173, 210, 65, 183, 210, 65, 194, 210, 65, 187, 210, 65, 192, - 210, 65, 246, 179, 210, 65, 235, 52, 210, 65, 235, 80, 210, 65, 237, 203, - 210, 65, 237, 100, 210, 65, 238, 62, 210, 65, 233, 235, 210, 65, 235, - 169, 210, 65, 235, 132, 210, 65, 168, 233, 75, 210, 65, 135, 233, 75, - 210, 65, 152, 233, 75, 210, 65, 246, 160, 233, 75, 210, 65, 246, 159, - 233, 75, 210, 65, 253, 17, 233, 75, 210, 65, 240, 155, 233, 75, 210, 65, - 240, 142, 233, 75, 210, 65, 246, 208, 233, 75, 210, 65, 168, 231, 196, - 210, 65, 135, 231, 196, 210, 65, 152, 231, 196, 210, 65, 246, 160, 231, - 196, 210, 65, 246, 159, 231, 196, 210, 65, 253, 17, 231, 196, 210, 65, - 240, 155, 231, 196, 210, 65, 240, 142, 231, 196, 210, 65, 246, 208, 231, - 196, 210, 65, 253, 53, 231, 196, 210, 65, 237, 97, 231, 196, 210, 65, - 237, 106, 231, 196, 210, 65, 240, 184, 231, 196, 210, 65, 240, 189, 231, - 196, 210, 65, 245, 187, 231, 196, 210, 65, 236, 218, 231, 196, 210, 65, - 238, 197, 231, 196, 210, 65, 239, 144, 231, 196, 210, 237, 169, 247, 122, - 246, 34, 210, 237, 169, 240, 225, 233, 122, 210, 237, 169, 237, 145, 233, - 122, 210, 237, 169, 240, 239, 233, 122, 210, 237, 169, 237, 182, 233, - 122, 210, 254, 46, 235, 85, 240, 225, 233, 122, 210, 239, 88, 235, 85, - 240, 225, 233, 122, 210, 235, 85, 237, 145, 233, 122, 210, 235, 85, 240, - 239, 233, 122, 19, 230, 124, 240, 140, 168, 233, 155, 19, 230, 124, 240, - 140, 168, 240, 170, 19, 230, 124, 240, 140, 168, 234, 86, 19, 230, 124, - 240, 140, 173, 19, 230, 124, 240, 140, 237, 100, 19, 230, 124, 240, 140, - 246, 159, 233, 75, 19, 230, 124, 240, 140, 246, 159, 231, 196, 19, 230, - 124, 240, 140, 240, 189, 231, 196, 19, 230, 124, 240, 140, 246, 159, 233, - 126, 19, 230, 124, 240, 140, 253, 53, 233, 126, 19, 230, 124, 240, 140, - 240, 189, 233, 126, 19, 230, 124, 240, 140, 168, 235, 56, 233, 126, 19, - 230, 124, 240, 140, 246, 159, 235, 56, 233, 126, 19, 230, 124, 240, 140, - 168, 233, 117, 233, 126, 19, 230, 124, 240, 140, 246, 159, 233, 117, 233, - 126, 19, 230, 124, 240, 140, 246, 159, 233, 121, 19, 230, 124, 240, 140, - 253, 53, 233, 121, 19, 230, 124, 240, 140, 240, 189, 233, 121, 19, 230, - 124, 240, 140, 168, 235, 56, 233, 121, 19, 230, 124, 240, 140, 246, 159, - 235, 56, 233, 121, 19, 230, 124, 240, 140, 168, 233, 117, 233, 121, 19, - 230, 124, 240, 140, 253, 53, 233, 117, 233, 121, 19, 230, 124, 240, 140, - 240, 189, 233, 117, 233, 121, 19, 230, 124, 240, 140, 253, 53, 241, 51, - 19, 230, 124, 236, 103, 168, 232, 251, 19, 230, 124, 233, 108, 118, 19, - 230, 124, 230, 166, 118, 19, 230, 124, 230, 165, 113, 19, 230, 124, 233, - 108, 113, 19, 230, 124, 234, 45, 135, 232, 21, 19, 230, 124, 230, 165, - 135, 232, 21, 19, 230, 124, 230, 144, 173, 19, 230, 124, 230, 144, 246, - 179, 19, 230, 124, 230, 144, 253, 53, 231, 235, 15, 19, 230, 124, 230, - 166, 246, 179, 19, 230, 124, 232, 230, 246, 179, 19, 230, 124, 233, 108, - 246, 179, 19, 230, 124, 233, 108, 235, 80, 19, 230, 124, 230, 144, 237, - 100, 19, 230, 124, 230, 144, 240, 189, 231, 235, 15, 19, 230, 124, 230, - 166, 237, 100, 19, 230, 124, 233, 108, 237, 100, 19, 230, 124, 233, 108, - 168, 233, 75, 19, 230, 124, 233, 108, 152, 233, 75, 19, 230, 124, 230, - 165, 246, 159, 233, 75, 19, 230, 124, 230, 144, 246, 159, 233, 75, 19, - 230, 124, 233, 108, 246, 159, 233, 75, 19, 230, 124, 232, 93, 246, 159, - 233, 75, 19, 230, 124, 239, 127, 246, 159, 233, 75, 19, 230, 124, 233, - 108, 168, 231, 196, 19, 230, 124, 233, 108, 246, 159, 231, 196, 19, 230, - 124, 236, 45, 246, 159, 241, 51, 19, 230, 124, 234, 233, 240, 189, 241, - 51, 19, 168, 132, 53, 19, 168, 132, 5, 231, 235, 15, 19, 135, 237, 218, - 53, 19, 152, 233, 176, 53, 19, 248, 200, 53, 19, 240, 28, 53, 19, 235, - 167, 53, 19, 251, 96, 53, 19, 135, 241, 8, 53, 19, 152, 241, 8, 53, 19, - 246, 160, 241, 8, 53, 19, 246, 159, 241, 8, 53, 19, 234, 160, 53, 19, - 236, 126, 247, 122, 53, 19, 244, 105, 53, 19, 239, 177, 53, 19, 240, 89, - 53, 19, 238, 107, 53, 19, 238, 105, 53, 19, 238, 253, 53, 19, 234, 252, - 247, 122, 53, 19, 247, 27, 53, 240, 118, 236, 219, 53, 240, 118, 246, 33, - 53, 240, 118, 234, 219, 53, 240, 118, 235, 208, 53, 240, 118, 236, 50, - 235, 208, 53, 240, 118, 236, 231, 53, 240, 118, 234, 48, 53, 240, 118, - 233, 5, 53, 240, 118, 231, 139, 53, 240, 118, 232, 174, 53, 240, 118, - 254, 203, 53, 240, 118, 232, 94, 53, 233, 69, 246, 158, 5, 230, 89, 233, - 69, 246, 158, 5, 239, 199, 240, 228, 233, 69, 246, 158, 5, 234, 240, 240, - 228, 233, 69, 246, 158, 5, 234, 27, 233, 69, 246, 158, 5, 237, 235, 233, - 69, 246, 158, 5, 237, 225, 233, 69, 246, 158, 5, 235, 176, 233, 69, 246, - 158, 5, 232, 197, 233, 69, 246, 158, 5, 240, 42, 233, 69, 246, 158, 5, - 58, 233, 69, 246, 158, 5, 247, 68, 233, 69, 246, 158, 5, 236, 225, 233, - 69, 246, 158, 5, 243, 16, 233, 69, 246, 158, 5, 232, 226, 233, 69, 246, - 158, 5, 234, 155, 233, 69, 246, 158, 5, 251, 212, 233, 69, 246, 158, 5, - 248, 92, 233, 69, 246, 158, 5, 230, 232, 233, 69, 246, 158, 5, 232, 92, - 239, 198, 233, 69, 246, 158, 5, 236, 53, 233, 69, 246, 158, 5, 243, 19, - 233, 69, 246, 158, 5, 240, 3, 233, 69, 246, 158, 5, 236, 35, 233, 69, - 246, 158, 5, 234, 17, 233, 69, 246, 158, 5, 245, 168, 233, 69, 246, 158, - 5, 240, 179, 233, 69, 246, 158, 5, 243, 175, 233, 69, 246, 158, 5, 242, - 217, 247, 3, 233, 69, 246, 158, 5, 248, 5, 233, 69, 246, 158, 5, 247, - 195, 233, 69, 246, 158, 5, 238, 195, 233, 69, 246, 158, 5, 243, 80, 233, - 69, 246, 158, 5, 240, 54, 233, 69, 246, 158, 5, 247, 28, 233, 69, 246, - 158, 5, 245, 77, 241, 81, 233, 69, 246, 158, 5, 246, 48, 233, 69, 246, - 158, 5, 234, 186, 233, 69, 246, 158, 5, 234, 210, 233, 69, 246, 158, 5, - 244, 104, 233, 69, 246, 158, 5, 255, 43, 240, 217, 233, 69, 246, 158, 5, - 237, 250, 233, 69, 246, 158, 5, 236, 96, 233, 69, 246, 158, 5, 233, 32, - 233, 69, 246, 158, 5, 3, 247, 244, 233, 69, 246, 158, 5, 246, 239, 242, - 172, 233, 69, 246, 158, 5, 36, 235, 78, 82, 237, 52, 1, 57, 237, 52, 1, - 72, 237, 52, 1, 254, 185, 237, 52, 1, 254, 33, 237, 52, 1, 214, 237, 52, - 1, 222, 222, 237, 52, 1, 74, 237, 52, 1, 254, 195, 237, 52, 1, 254, 193, - 237, 52, 1, 253, 135, 237, 52, 1, 254, 192, 237, 52, 1, 254, 186, 237, - 52, 1, 254, 196, 237, 52, 1, 149, 237, 52, 1, 185, 237, 52, 1, 199, 237, - 52, 1, 253, 248, 237, 52, 1, 253, 155, 237, 52, 1, 66, 237, 52, 1, 254, - 187, 237, 52, 1, 253, 183, 237, 52, 1, 146, 237, 52, 1, 193, 237, 52, 1, - 254, 183, 237, 52, 1, 253, 196, 237, 52, 1, 253, 5, 237, 52, 1, 252, 232, - 237, 52, 1, 212, 237, 52, 1, 254, 184, 237, 38, 1, 57, 237, 38, 1, 254, - 124, 237, 38, 1, 222, 222, 237, 38, 1, 149, 237, 38, 1, 252, 66, 237, 38, - 1, 146, 237, 38, 1, 254, 92, 237, 38, 1, 253, 165, 237, 38, 1, 254, 196, - 237, 38, 1, 254, 185, 237, 38, 1, 185, 237, 38, 1, 73, 237, 38, 1, 254, - 41, 237, 38, 1, 254, 183, 237, 38, 1, 253, 160, 237, 38, 1, 251, 220, - 237, 38, 1, 193, 237, 38, 1, 242, 227, 237, 38, 1, 66, 237, 38, 1, 253, - 155, 237, 38, 1, 254, 184, 237, 38, 1, 199, 237, 38, 1, 252, 31, 237, 38, - 1, 254, 187, 237, 38, 1, 253, 194, 237, 38, 1, 74, 237, 38, 1, 72, 237, - 38, 1, 246, 43, 237, 38, 1, 254, 186, 237, 38, 1, 254, 76, 237, 38, 1, - 254, 111, 237, 38, 1, 252, 224, 237, 38, 1, 214, 237, 38, 1, 254, 58, - 237, 38, 1, 253, 195, 237, 38, 1, 251, 237, 237, 38, 1, 253, 69, 237, 38, - 1, 252, 216, 237, 38, 1, 242, 228, 237, 38, 1, 253, 196, 237, 38, 1, 246, - 41, 237, 38, 1, 252, 249, 237, 38, 1, 253, 246, 237, 38, 1, 250, 253, - 237, 38, 1, 250, 254, 237, 38, 1, 250, 255, 237, 38, 1, 250, 212, 237, - 38, 1, 253, 218, 237, 38, 1, 246, 42, 84, 27, 1, 57, 84, 27, 1, 253, 73, - 84, 27, 1, 253, 6, 84, 27, 1, 253, 20, 84, 27, 1, 72, 84, 27, 1, 253, 95, - 84, 27, 1, 253, 46, 84, 27, 1, 252, 252, 84, 27, 1, 246, 247, 84, 27, 1, - 74, 84, 27, 1, 177, 84, 27, 1, 253, 58, 84, 27, 1, 253, 87, 84, 27, 1, - 252, 232, 84, 27, 1, 246, 232, 84, 27, 1, 73, 84, 27, 1, 253, 0, 84, 27, - 1, 246, 186, 84, 27, 1, 253, 34, 84, 27, 1, 253, 99, 84, 27, 1, 253, 116, - 84, 27, 1, 253, 9, 84, 27, 1, 66, 84, 27, 1, 249, 227, 84, 27, 1, 248, - 130, 84, 27, 1, 248, 82, 84, 27, 1, 253, 124, 84, 27, 1, 249, 232, 84, - 27, 1, 246, 217, 84, 27, 1, 252, 216, 84, 27, 1, 252, 224, 84, 27, 207, - 118, 84, 27, 207, 173, 84, 27, 207, 246, 179, 84, 27, 207, 237, 100, 237, - 54, 1, 242, 46, 237, 54, 1, 234, 12, 237, 54, 1, 243, 145, 237, 54, 1, - 243, 25, 237, 54, 1, 235, 241, 237, 54, 1, 233, 3, 237, 54, 1, 244, 14, - 237, 54, 1, 243, 168, 237, 54, 1, 237, 5, 237, 54, 1, 249, 226, 237, 54, - 1, 239, 74, 237, 54, 1, 239, 79, 237, 54, 1, 239, 95, 237, 54, 1, 236, - 163, 237, 54, 1, 250, 128, 237, 54, 1, 246, 37, 237, 54, 1, 232, 238, - 237, 54, 1, 235, 132, 237, 54, 1, 239, 213, 237, 54, 1, 239, 238, 237, - 54, 1, 240, 33, 237, 54, 1, 240, 86, 237, 54, 1, 238, 212, 237, 54, 1, - 239, 38, 237, 54, 1, 238, 9, 237, 54, 1, 239, 176, 237, 54, 1, 246, 208, - 233, 75, 233, 72, 1, 242, 55, 233, 72, 1, 240, 160, 233, 72, 1, 238, 232, - 233, 72, 1, 246, 178, 233, 72, 1, 237, 75, 233, 72, 1, 253, 21, 233, 72, - 1, 253, 10, 233, 72, 1, 240, 173, 233, 72, 1, 243, 233, 233, 72, 1, 247, - 210, 233, 72, 1, 247, 63, 233, 72, 1, 247, 1, 233, 72, 1, 240, 203, 233, - 72, 1, 237, 82, 233, 72, 1, 247, 41, 233, 72, 1, 243, 60, 233, 72, 1, - 246, 195, 233, 72, 1, 253, 97, 233, 72, 1, 239, 235, 233, 72, 1, 246, - 224, 233, 72, 1, 253, 82, 233, 72, 1, 241, 229, 233, 72, 1, 245, 100, - 233, 72, 1, 239, 214, 233, 72, 1, 237, 3, 233, 72, 1, 237, 255, 233, 72, - 1, 96, 233, 72, 1, 74, 233, 72, 1, 66, 233, 72, 1, 247, 204, 233, 72, - 247, 8, 233, 140, 84, 235, 15, 5, 57, 84, 235, 15, 5, 74, 84, 235, 15, 5, - 66, 84, 235, 15, 5, 177, 84, 235, 15, 5, 253, 34, 84, 235, 15, 5, 252, - 205, 84, 235, 15, 5, 253, 40, 84, 235, 15, 5, 253, 83, 84, 235, 15, 5, - 252, 215, 84, 235, 15, 5, 252, 213, 84, 235, 15, 5, 253, 104, 84, 235, - 15, 5, 252, 202, 84, 235, 15, 5, 253, 18, 84, 235, 15, 5, 252, 203, 84, - 235, 15, 5, 253, 12, 84, 235, 15, 5, 253, 31, 84, 235, 15, 5, 246, 173, - 84, 235, 15, 5, 213, 84, 235, 15, 5, 252, 211, 84, 235, 15, 5, 252, 234, - 84, 235, 15, 5, 252, 201, 84, 235, 15, 5, 252, 227, 84, 235, 15, 5, 198, - 84, 235, 15, 5, 252, 239, 84, 235, 15, 5, 252, 229, 84, 235, 15, 5, 191, - 84, 235, 15, 5, 252, 243, 84, 235, 15, 5, 253, 138, 84, 235, 15, 5, 208, - 84, 235, 15, 5, 253, 3, 84, 235, 15, 5, 252, 200, 84, 235, 15, 5, 252, - 204, 84, 235, 15, 5, 252, 226, 84, 235, 15, 5, 246, 165, 84, 235, 15, 5, - 246, 190, 84, 235, 15, 5, 154, 84, 235, 15, 5, 229, 232, 84, 235, 15, 5, - 227, 218, 84, 235, 15, 5, 227, 219, 84, 235, 15, 5, 228, 173, 84, 235, - 15, 5, 230, 242, 84, 235, 15, 5, 228, 235, 84, 235, 15, 5, 242, 170, 84, - 235, 15, 5, 234, 24, 84, 235, 15, 247, 8, 233, 140, 84, 235, 15, 65, 118, - 84, 235, 15, 65, 113, 84, 235, 15, 65, 246, 179, 84, 235, 15, 65, 235, - 52, 84, 235, 15, 65, 233, 75, 143, 6, 1, 182, 74, 143, 6, 1, 182, 72, - 143, 6, 1, 182, 57, 143, 6, 1, 182, 253, 111, 143, 6, 1, 182, 73, 143, 6, - 1, 182, 252, 220, 143, 6, 1, 240, 125, 74, 143, 6, 1, 240, 125, 72, 143, - 6, 1, 240, 125, 57, 143, 6, 1, 240, 125, 253, 111, 143, 6, 1, 240, 125, - 73, 143, 6, 1, 240, 125, 252, 220, 143, 6, 1, 253, 114, 143, 6, 1, 254, - 1, 143, 6, 1, 253, 109, 143, 6, 1, 247, 62, 143, 6, 1, 212, 143, 6, 1, - 247, 46, 143, 6, 1, 247, 28, 143, 6, 1, 247, 106, 143, 6, 1, 247, 30, - 143, 6, 1, 240, 246, 143, 6, 1, 247, 38, 143, 6, 1, 248, 79, 143, 6, 1, - 248, 45, 143, 6, 1, 253, 124, 143, 6, 1, 247, 113, 143, 6, 1, 246, 242, - 143, 6, 1, 240, 238, 143, 6, 1, 253, 116, 143, 6, 1, 247, 64, 143, 6, 1, - 246, 232, 143, 6, 1, 241, 25, 143, 6, 1, 253, 99, 143, 6, 1, 253, 58, - 143, 6, 1, 253, 87, 143, 6, 1, 252, 232, 143, 6, 1, 247, 0, 143, 6, 1, - 253, 157, 143, 6, 1, 253, 220, 143, 3, 1, 182, 74, 143, 3, 1, 182, 72, - 143, 3, 1, 182, 57, 143, 3, 1, 182, 253, 111, 143, 3, 1, 182, 73, 143, 3, - 1, 182, 252, 220, 143, 3, 1, 240, 125, 74, 143, 3, 1, 240, 125, 72, 143, - 3, 1, 240, 125, 57, 143, 3, 1, 240, 125, 253, 111, 143, 3, 1, 240, 125, - 73, 143, 3, 1, 240, 125, 252, 220, 143, 3, 1, 253, 114, 143, 3, 1, 254, - 1, 143, 3, 1, 253, 109, 143, 3, 1, 247, 62, 143, 3, 1, 212, 143, 3, 1, - 247, 46, 143, 3, 1, 247, 28, 143, 3, 1, 247, 106, 143, 3, 1, 247, 30, - 143, 3, 1, 240, 246, 143, 3, 1, 247, 38, 143, 3, 1, 248, 79, 143, 3, 1, - 248, 45, 143, 3, 1, 253, 124, 143, 3, 1, 247, 113, 143, 3, 1, 246, 242, - 143, 3, 1, 240, 238, 143, 3, 1, 253, 116, 143, 3, 1, 247, 64, 143, 3, 1, - 246, 232, 143, 3, 1, 241, 25, 143, 3, 1, 253, 99, 143, 3, 1, 253, 58, - 143, 3, 1, 253, 87, 143, 3, 1, 252, 232, 143, 3, 1, 247, 0, 143, 3, 1, - 253, 157, 143, 3, 1, 253, 220, 235, 17, 1, 245, 63, 235, 17, 1, 248, 179, - 235, 17, 1, 244, 57, 235, 17, 1, 247, 140, 235, 17, 1, 240, 36, 235, 17, - 1, 253, 25, 235, 17, 1, 245, 227, 235, 17, 1, 236, 29, 235, 17, 1, 252, - 146, 235, 17, 1, 243, 237, 235, 17, 1, 249, 117, 235, 17, 1, 243, 52, - 235, 17, 1, 250, 11, 235, 17, 1, 252, 83, 235, 17, 1, 245, 245, 235, 17, - 1, 248, 210, 235, 17, 1, 233, 218, 235, 17, 1, 239, 52, 235, 17, 1, 252, - 102, 235, 17, 1, 239, 1, 235, 17, 1, 244, 106, 235, 17, 1, 244, 146, 235, - 17, 1, 254, 67, 235, 17, 1, 249, 225, 235, 17, 1, 246, 177, 235, 17, 1, - 248, 230, 235, 17, 1, 253, 106, 235, 17, 1, 242, 26, 235, 17, 1, 247, - 186, 235, 17, 1, 253, 111, 235, 17, 1, 245, 118, 235, 17, 1, 246, 195, - 235, 17, 1, 247, 136, 235, 17, 1, 248, 231, 235, 17, 1, 248, 66, 235, 17, - 1, 253, 19, 235, 17, 1, 251, 94, 235, 17, 1, 245, 56, 235, 17, 1, 248, - 121, 235, 17, 1, 248, 242, 235, 17, 1, 248, 239, 235, 17, 1, 253, 81, - 235, 17, 1, 248, 232, 235, 17, 1, 248, 34, 235, 17, 1, 238, 106, 235, 17, - 1, 247, 135, 235, 17, 1, 250, 113, 235, 17, 1, 252, 147, 235, 21, 1, 240, - 174, 235, 21, 1, 252, 211, 235, 21, 1, 252, 202, 235, 21, 1, 252, 213, - 235, 21, 1, 253, 83, 235, 21, 1, 246, 178, 235, 21, 1, 243, 54, 235, 21, - 1, 208, 235, 21, 1, 252, 204, 235, 21, 1, 239, 248, 235, 21, 1, 246, 196, - 235, 21, 1, 242, 235, 235, 21, 1, 252, 205, 235, 21, 1, 252, 234, 235, - 21, 1, 245, 89, 235, 21, 1, 244, 43, 235, 21, 1, 244, 84, 235, 21, 1, - 244, 145, 235, 21, 1, 245, 17, 235, 21, 1, 247, 60, 235, 21, 1, 154, 235, - 21, 1, 191, 235, 21, 1, 57, 235, 21, 1, 72, 235, 21, 1, 74, 235, 21, 1, - 73, 235, 21, 1, 66, 235, 21, 1, 252, 212, 235, 21, 1, 252, 231, 235, 21, - 1, 252, 220, 235, 21, 21, 240, 126, 235, 21, 21, 118, 235, 21, 21, 113, - 235, 21, 21, 166, 235, 21, 21, 158, 235, 21, 21, 173, 235, 21, 21, 183, - 235, 21, 21, 194, 235, 21, 21, 187, 235, 21, 21, 192, 218, 4, 57, 218, 4, - 72, 218, 4, 74, 218, 4, 73, 218, 4, 66, 218, 4, 252, 213, 218, 4, 253, - 90, 218, 4, 177, 218, 4, 253, 6, 218, 4, 253, 7, 218, 4, 253, 33, 218, 4, - 253, 34, 218, 4, 252, 200, 218, 4, 253, 80, 218, 4, 253, 42, 218, 4, 253, - 49, 218, 4, 253, 22, 218, 4, 198, 218, 4, 253, 13, 218, 4, 252, 239, 218, - 4, 253, 14, 218, 4, 252, 229, 218, 4, 252, 201, 218, 4, 252, 247, 218, 4, - 252, 248, 218, 4, 253, 8, 218, 4, 252, 227, 218, 4, 213, 218, 4, 253, 0, - 218, 4, 252, 223, 218, 4, 253, 50, 218, 4, 253, 82, 218, 4, 208, 218, 4, - 253, 36, 218, 4, 253, 37, 218, 4, 252, 246, 218, 4, 253, 3, 218, 4, 252, - 204, 218, 4, 253, 52, 218, 4, 253, 24, 218, 4, 253, 25, 218, 4, 253, 26, - 218, 4, 252, 202, 218, 4, 253, 9, 218, 4, 253, 44, 218, 4, 96, 218, 4, - 253, 18, 218, 4, 252, 208, 218, 4, 252, 250, 218, 4, 253, 27, 218, 4, - 253, 10, 218, 4, 253, 83, 218, 4, 254, 17, 218, 4, 252, 226, 218, 4, 253, - 65, 230, 127, 1, 248, 233, 230, 127, 1, 247, 253, 230, 127, 1, 243, 114, - 230, 127, 1, 243, 57, 230, 127, 1, 252, 252, 230, 127, 1, 247, 225, 230, - 127, 1, 252, 168, 230, 127, 1, 248, 60, 230, 127, 1, 247, 210, 230, 127, - 1, 247, 63, 230, 127, 1, 247, 1, 230, 127, 1, 244, 88, 230, 127, 1, 247, - 41, 230, 127, 1, 246, 195, 230, 127, 1, 245, 156, 230, 127, 1, 246, 224, - 230, 127, 1, 253, 0, 230, 127, 1, 241, 229, 230, 127, 1, 248, 142, 230, - 127, 1, 245, 120, 230, 127, 1, 240, 203, 230, 127, 1, 246, 212, 230, 127, - 65, 118, 230, 127, 65, 246, 179, 230, 127, 65, 235, 52, 230, 127, 65, - 168, 233, 75, 230, 127, 247, 8, 230, 131, 237, 55, 1, 57, 237, 55, 1, - 254, 185, 237, 55, 1, 214, 237, 55, 1, 222, 222, 237, 55, 1, 72, 237, 55, - 1, 196, 237, 55, 1, 74, 237, 55, 1, 254, 190, 237, 55, 1, 254, 186, 237, - 55, 1, 149, 237, 55, 1, 185, 237, 55, 1, 199, 237, 55, 1, 73, 237, 55, 1, - 146, 237, 55, 1, 253, 194, 237, 55, 1, 254, 183, 237, 55, 1, 66, 237, 55, - 1, 254, 191, 237, 55, 1, 254, 196, 237, 55, 1, 193, 237, 55, 1, 253, 196, - 237, 55, 1, 253, 5, 237, 55, 1, 252, 232, 237, 55, 1, 253, 186, 237, 55, - 1, 253, 155, 237, 55, 1, 254, 194, 237, 55, 230, 160, 76, 178, 1, 57, - 178, 31, 5, 74, 178, 31, 5, 66, 178, 31, 5, 153, 146, 178, 31, 5, 72, - 178, 31, 5, 73, 178, 31, 237, 101, 76, 178, 5, 47, 246, 174, 51, 178, 5, - 231, 206, 178, 5, 233, 102, 178, 1, 177, 178, 1, 246, 178, 178, 1, 252, - 205, 178, 1, 246, 202, 178, 1, 252, 215, 178, 1, 246, 176, 178, 1, 252, - 213, 178, 1, 246, 181, 178, 1, 246, 191, 178, 1, 240, 150, 178, 1, 246, - 192, 178, 1, 240, 166, 178, 1, 246, 203, 178, 1, 252, 202, 178, 1, 246, - 173, 178, 1, 252, 203, 178, 1, 246, 196, 178, 1, 252, 201, 178, 1, 213, - 178, 1, 246, 182, 178, 1, 252, 211, 178, 1, 246, 199, 178, 1, 198, 178, - 1, 191, 178, 1, 208, 178, 1, 252, 200, 178, 1, 252, 243, 178, 1, 246, - 165, 178, 1, 246, 190, 178, 1, 252, 204, 178, 1, 252, 226, 178, 1, 154, - 178, 1, 247, 161, 178, 1, 240, 52, 178, 5, 252, 219, 46, 178, 5, 238, - 138, 178, 5, 56, 51, 178, 235, 43, 178, 21, 118, 178, 21, 113, 178, 21, - 166, 178, 21, 158, 178, 65, 246, 179, 178, 65, 235, 52, 178, 65, 168, - 233, 75, 178, 65, 168, 231, 196, 178, 229, 161, 246, 164, 178, 229, 161, - 3, 235, 20, 178, 229, 161, 235, 20, 178, 229, 161, 234, 39, 125, 178, - 229, 161, 232, 227, 178, 229, 161, 239, 89, 178, 229, 161, 237, 109, 178, - 229, 161, 47, 237, 109, 178, 229, 161, 239, 87, 13, 5, 57, 13, 5, 102, - 24, 57, 13, 5, 102, 24, 246, 206, 13, 5, 102, 24, 246, 201, 240, 131, 13, - 5, 102, 24, 154, 13, 5, 102, 24, 246, 234, 13, 5, 102, 24, 240, 171, 240, - 130, 13, 5, 102, 24, 240, 230, 13, 5, 102, 24, 247, 200, 13, 5, 253, 165, - 13, 5, 253, 166, 13, 5, 254, 202, 24, 240, 204, 13, 5, 254, 202, 24, 247, - 31, 240, 130, 13, 5, 254, 202, 24, 247, 12, 13, 5, 254, 202, 24, 246, - 201, 240, 131, 13, 5, 254, 202, 24, 154, 13, 5, 254, 202, 24, 253, 32, - 240, 130, 13, 5, 254, 202, 24, 241, 162, 13, 5, 254, 202, 24, 237, 160, - 13, 5, 254, 202, 24, 238, 53, 13, 5, 254, 202, 24, 97, 79, 97, 79, 66, - 13, 5, 254, 202, 240, 130, 13, 5, 248, 227, 13, 5, 253, 11, 24, 237, 172, - 13, 5, 253, 11, 24, 246, 201, 240, 131, 13, 5, 253, 11, 24, 254, 206, 79, - 252, 232, 13, 5, 253, 11, 24, 241, 68, 13, 5, 253, 11, 24, 240, 187, 13, - 5, 253, 206, 13, 5, 254, 25, 13, 5, 255, 1, 24, 237, 181, 13, 5, 255, 1, - 24, 241, 71, 79, 240, 208, 13, 5, 253, 112, 13, 5, 254, 209, 24, 253, - 112, 13, 5, 254, 209, 24, 241, 120, 13, 5, 254, 209, 24, 240, 208, 13, 5, - 254, 209, 24, 154, 13, 5, 254, 209, 24, 240, 254, 13, 5, 254, 209, 24, - 253, 7, 13, 5, 254, 209, 24, 246, 186, 13, 5, 254, 209, 24, 246, 249, 13, - 5, 242, 52, 13, 5, 238, 93, 13, 5, 241, 94, 13, 5, 248, 234, 24, 246, - 186, 13, 5, 253, 5, 13, 5, 254, 216, 107, 253, 5, 13, 5, 254, 216, 152, - 237, 166, 13, 5, 254, 216, 79, 247, 42, 233, 119, 254, 216, 79, 241, 55, - 13, 5, 254, 216, 79, 247, 42, 233, 91, 13, 5, 238, 97, 13, 5, 242, 60, - 13, 5, 242, 62, 13, 5, 248, 237, 24, 246, 220, 13, 5, 238, 103, 13, 5, - 238, 108, 13, 5, 246, 177, 13, 5, 252, 254, 248, 208, 240, 131, 13, 5, - 252, 254, 248, 77, 240, 131, 13, 5, 252, 254, 107, 252, 254, 247, 111, - 107, 247, 111, 247, 111, 107, 247, 111, 247, 45, 13, 5, 252, 254, 107, - 252, 254, 107, 246, 177, 13, 5, 252, 254, 107, 252, 254, 107, 252, 254, - 233, 77, 252, 254, 107, 252, 254, 107, 246, 177, 13, 5, 240, 204, 13, 5, - 235, 108, 13, 5, 252, 211, 13, 5, 246, 206, 13, 5, 242, 169, 13, 5, 236, - 5, 13, 5, 247, 120, 13, 5, 254, 31, 107, 247, 120, 13, 5, 237, 172, 13, - 5, 125, 13, 5, 238, 110, 13, 5, 253, 30, 13, 5, 254, 234, 24, 57, 13, 5, - 254, 234, 24, 246, 197, 13, 5, 254, 234, 24, 253, 32, 240, 130, 13, 5, - 253, 48, 13, 5, 254, 210, 107, 254, 210, 253, 166, 13, 5, 254, 210, 107, - 254, 210, 253, 121, 13, 5, 254, 210, 233, 77, 253, 48, 13, 5, 237, 196, - 13, 5, 242, 218, 107, 237, 196, 13, 5, 247, 11, 13, 5, 242, 223, 13, 5, - 252, 203, 13, 5, 248, 17, 13, 5, 252, 238, 237, 56, 24, 102, 79, 241, 5, - 13, 5, 252, 238, 237, 56, 24, 241, 94, 13, 5, 252, 238, 237, 56, 24, 237, - 172, 13, 5, 252, 238, 237, 56, 24, 253, 30, 13, 5, 252, 238, 237, 56, 24, - 252, 205, 13, 5, 252, 238, 237, 56, 24, 254, 248, 79, 241, 5, 13, 5, 252, - 238, 237, 56, 24, 253, 39, 13, 5, 252, 238, 237, 56, 24, 240, 250, 13, 5, - 252, 238, 237, 56, 24, 246, 233, 13, 5, 252, 238, 237, 56, 24, 154, 13, - 5, 252, 238, 237, 56, 24, 253, 149, 13, 5, 252, 238, 237, 56, 24, 255, - 32, 79, 253, 22, 13, 5, 252, 238, 237, 56, 24, 247, 16, 13, 5, 252, 238, - 237, 56, 24, 252, 200, 13, 5, 252, 238, 237, 56, 24, 253, 22, 13, 5, 252, - 238, 237, 56, 24, 254, 240, 79, 238, 23, 13, 5, 252, 238, 237, 56, 24, - 247, 18, 13, 5, 252, 238, 237, 56, 24, 252, 247, 13, 5, 252, 238, 237, - 56, 24, 254, 125, 79, 247, 45, 13, 5, 252, 238, 237, 56, 24, 253, 24, 13, - 5, 252, 238, 237, 56, 24, 240, 187, 13, 5, 252, 238, 237, 56, 24, 254, - 232, 79, 240, 250, 13, 5, 252, 238, 237, 56, 24, 246, 249, 13, 5, 249, - 177, 13, 5, 248, 19, 13, 5, 238, 170, 13, 5, 238, 171, 13, 5, 253, 12, - 13, 5, 248, 27, 13, 5, 249, 193, 13, 5, 253, 215, 24, 246, 186, 13, 5, - 241, 120, 13, 5, 248, 28, 13, 5, 254, 43, 237, 158, 97, 247, 36, 240, - 156, 13, 5, 240, 156, 13, 5, 253, 31, 13, 5, 254, 247, 107, 253, 31, 13, - 5, 254, 247, 240, 130, 13, 5, 254, 247, 233, 134, 13, 5, 247, 132, 13, 5, - 254, 47, 24, 240, 222, 13, 5, 243, 82, 13, 5, 247, 133, 13, 5, 238, 194, - 13, 5, 249, 209, 13, 5, 248, 33, 13, 5, 243, 83, 13, 5, 247, 31, 240, - 130, 13, 5, 247, 31, 247, 36, 240, 130, 13, 5, 243, 84, 13, 5, 243, 87, - 13, 5, 72, 13, 5, 161, 24, 247, 45, 13, 5, 161, 107, 161, 253, 23, 107, - 246, 195, 13, 5, 253, 218, 13, 5, 254, 219, 24, 102, 79, 254, 204, 79, - 252, 203, 13, 5, 254, 219, 24, 246, 197, 13, 5, 254, 219, 24, 252, 239, - 13, 5, 254, 219, 24, 247, 6, 13, 5, 254, 219, 24, 246, 186, 13, 5, 254, - 219, 24, 66, 13, 5, 243, 93, 13, 5, 243, 94, 13, 5, 253, 58, 13, 5, 252, - 232, 13, 5, 254, 199, 24, 240, 249, 13, 5, 254, 199, 24, 246, 201, 240, - 131, 13, 5, 254, 199, 24, 253, 13, 13, 5, 254, 199, 233, 77, 252, 232, - 13, 5, 254, 199, 233, 119, 252, 232, 13, 5, 254, 199, 233, 91, 13, 5, - 243, 100, 13, 5, 237, 181, 13, 5, 240, 222, 13, 5, 243, 104, 13, 5, 246, - 193, 24, 57, 13, 5, 246, 193, 24, 102, 79, 247, 2, 13, 5, 246, 193, 24, - 102, 79, 253, 184, 24, 247, 2, 13, 5, 246, 193, 24, 253, 5, 13, 5, 246, - 193, 24, 246, 206, 13, 5, 246, 193, 24, 247, 31, 240, 130, 13, 5, 246, - 193, 24, 247, 31, 247, 36, 240, 130, 13, 5, 246, 193, 24, 154, 13, 5, - 246, 193, 24, 254, 204, 240, 130, 13, 5, 246, 193, 24, 253, 32, 240, 130, - 13, 5, 246, 193, 24, 235, 76, 13, 5, 246, 193, 24, 237, 158, 233, 91, 13, - 5, 246, 193, 24, 247, 84, 13, 5, 246, 193, 24, 252, 200, 13, 5, 246, 193, - 24, 253, 184, 24, 247, 2, 13, 5, 246, 193, 24, 253, 42, 13, 5, 246, 193, - 24, 253, 22, 13, 5, 246, 193, 24, 253, 107, 13, 5, 246, 193, 24, 253, 45, - 13, 5, 252, 205, 13, 5, 254, 248, 240, 130, 13, 5, 248, 43, 13, 5, 252, - 199, 24, 102, 79, 254, 218, 79, 154, 13, 5, 252, 199, 24, 102, 79, 154, - 13, 5, 252, 199, 24, 102, 79, 246, 234, 13, 5, 252, 199, 24, 253, 11, - 252, 12, 79, 247, 208, 13, 5, 252, 199, 24, 253, 5, 13, 5, 252, 199, 24, - 246, 177, 13, 5, 252, 199, 24, 247, 243, 79, 247, 12, 13, 5, 252, 199, - 24, 246, 206, 13, 5, 252, 199, 24, 252, 219, 79, 208, 13, 5, 252, 199, - 24, 247, 11, 13, 5, 252, 199, 24, 253, 209, 79, 208, 13, 5, 252, 199, 24, - 252, 203, 13, 5, 252, 199, 24, 253, 12, 13, 5, 252, 199, 24, 253, 215, - 24, 246, 186, 13, 5, 252, 199, 24, 247, 132, 13, 5, 252, 199, 24, 253, - 58, 13, 5, 252, 199, 24, 254, 211, 79, 252, 200, 13, 5, 252, 199, 24, - 252, 232, 13, 5, 252, 199, 24, 254, 199, 24, 246, 201, 240, 131, 13, 5, - 252, 199, 24, 246, 201, 240, 131, 13, 5, 252, 199, 24, 246, 197, 13, 5, - 252, 199, 24, 253, 39, 13, 5, 252, 199, 24, 247, 78, 13, 5, 252, 199, 24, - 253, 180, 79, 57, 13, 5, 252, 199, 24, 248, 54, 79, 253, 26, 13, 5, 252, - 199, 24, 254, 204, 79, 254, 240, 79, 240, 222, 13, 5, 252, 199, 24, 247, - 80, 13, 5, 252, 199, 24, 254, 65, 79, 252, 200, 13, 5, 252, 199, 24, 254, - 201, 79, 253, 42, 13, 5, 252, 199, 24, 241, 158, 13, 5, 252, 199, 24, - 253, 32, 240, 130, 13, 5, 252, 199, 24, 254, 71, 79, 255, 30, 79, 246, - 177, 13, 5, 252, 199, 24, 247, 16, 13, 5, 252, 199, 24, 235, 76, 13, 5, - 252, 199, 24, 247, 159, 13, 5, 252, 199, 24, 254, 81, 79, 247, 2, 13, 5, - 252, 199, 24, 254, 86, 79, 253, 5, 13, 5, 252, 199, 24, 252, 200, 13, 5, - 252, 199, 24, 254, 206, 79, 252, 232, 13, 5, 252, 199, 24, 252, 239, 13, - 5, 252, 199, 24, 246, 195, 13, 5, 252, 199, 24, 253, 23, 107, 246, 195, - 13, 5, 252, 199, 24, 213, 13, 5, 252, 199, 24, 247, 6, 13, 5, 252, 199, - 24, 247, 101, 13, 5, 252, 199, 24, 246, 186, 13, 5, 252, 199, 24, 253, - 64, 79, 247, 112, 13, 5, 252, 199, 24, 241, 15, 13, 5, 252, 199, 24, 247, - 21, 13, 5, 252, 199, 24, 240, 187, 13, 5, 252, 199, 24, 66, 13, 5, 252, - 199, 24, 253, 45, 13, 5, 252, 199, 24, 254, 208, 79, 253, 31, 13, 5, 252, - 199, 107, 248, 43, 13, 5, 241, 136, 13, 5, 250, 9, 233, 77, 241, 136, 13, - 5, 248, 44, 13, 5, 253, 89, 107, 253, 89, 253, 75, 107, 246, 197, 13, 5, - 247, 12, 13, 5, 253, 179, 253, 89, 107, 253, 89, 253, 75, 107, 246, 197, - 13, 5, 238, 230, 13, 5, 250, 12, 13, 5, 247, 32, 13, 5, 240, 249, 13, 5, - 246, 201, 240, 131, 13, 5, 246, 201, 107, 240, 249, 13, 5, 246, 201, 233, - 77, 240, 249, 13, 5, 246, 197, 13, 5, 243, 115, 13, 5, 236, 89, 13, 5, - 234, 111, 13, 5, 236, 93, 24, 246, 220, 13, 5, 253, 39, 13, 5, 254, 228, - 24, 72, 13, 5, 254, 228, 24, 66, 13, 5, 254, 228, 233, 77, 253, 39, 13, - 5, 247, 78, 13, 5, 253, 180, 107, 247, 78, 13, 5, 253, 180, 233, 77, 247, - 78, 13, 5, 238, 246, 13, 5, 240, 250, 13, 5, 248, 54, 240, 130, 13, 5, - 243, 150, 13, 5, 247, 33, 24, 102, 79, 246, 234, 13, 5, 247, 33, 24, 246, - 201, 240, 131, 13, 5, 247, 33, 24, 246, 234, 13, 5, 247, 33, 24, 254, - 240, 79, 246, 234, 13, 5, 247, 33, 24, 213, 13, 5, 238, 249, 13, 5, 240, - 208, 13, 5, 246, 243, 233, 77, 240, 208, 13, 5, 246, 243, 24, 246, 206, - 13, 5, 246, 243, 24, 240, 187, 13, 5, 246, 243, 240, 131, 13, 5, 253, 40, - 13, 5, 255, 28, 233, 77, 253, 40, 13, 5, 250, 43, 13, 5, 253, 126, 24, - 247, 16, 13, 5, 253, 126, 24, 253, 237, 24, 253, 32, 240, 130, 13, 5, - 253, 126, 24, 246, 195, 13, 5, 253, 126, 24, 253, 192, 79, 241, 20, 13, - 5, 253, 126, 240, 130, 13, 5, 246, 233, 13, 5, 253, 127, 24, 102, 79, - 246, 220, 13, 5, 253, 127, 24, 246, 220, 13, 5, 253, 127, 107, 253, 127, - 237, 185, 13, 5, 250, 44, 13, 5, 250, 45, 13, 5, 254, 62, 24, 246, 186, - 13, 5, 248, 57, 13, 5, 241, 147, 13, 5, 238, 255, 13, 5, 236, 100, 13, 5, - 154, 13, 5, 254, 204, 240, 131, 13, 5, 254, 204, 240, 130, 13, 5, 247, - 80, 13, 5, 253, 41, 13, 5, 254, 201, 24, 246, 177, 13, 5, 254, 201, 24, - 240, 204, 13, 5, 254, 201, 24, 246, 206, 13, 5, 254, 201, 24, 240, 156, - 13, 5, 254, 201, 24, 248, 44, 13, 5, 254, 201, 24, 247, 160, 13, 5, 254, - 201, 24, 246, 195, 13, 5, 254, 201, 24, 246, 186, 13, 5, 254, 201, 24, - 66, 13, 5, 253, 59, 13, 5, 241, 158, 13, 5, 247, 37, 24, 253, 5, 13, 5, - 247, 37, 24, 247, 80, 13, 5, 247, 37, 24, 235, 76, 13, 5, 247, 37, 24, - 241, 47, 13, 5, 247, 37, 24, 253, 45, 13, 5, 243, 235, 13, 5, 74, 13, 5, - 255, 55, 57, 13, 5, 253, 229, 13, 5, 244, 2, 13, 5, 247, 82, 107, 247, - 82, 247, 11, 13, 5, 247, 82, 107, 247, 82, 233, 91, 13, 5, 254, 68, 13, - 5, 246, 234, 13, 5, 253, 32, 248, 27, 13, 5, 253, 32, 253, 37, 13, 5, - 253, 32, 107, 253, 32, 247, 52, 107, 247, 52, 254, 208, 107, 253, 45, 13, - 5, 253, 32, 240, 130, 13, 5, 254, 69, 13, 5, 255, 31, 24, 246, 201, 240, - 131, 13, 5, 250, 117, 13, 5, 253, 78, 13, 5, 254, 221, 24, 240, 187, 13, - 5, 254, 221, 233, 77, 253, 78, 13, 5, 254, 221, 233, 119, 253, 78, 13, 5, - 254, 221, 233, 91, 13, 5, 241, 162, 13, 5, 253, 79, 13, 5, 253, 149, 13, - 5, 248, 68, 13, 5, 177, 13, 5, 188, 24, 57, 13, 5, 188, 24, 253, 206, 13, - 5, 188, 24, 255, 18, 79, 247, 84, 13, 5, 188, 24, 240, 204, 13, 5, 188, - 24, 246, 206, 13, 5, 188, 24, 237, 172, 13, 5, 188, 24, 125, 13, 5, 188, - 24, 253, 30, 13, 5, 188, 24, 237, 181, 13, 5, 188, 24, 240, 222, 13, 5, - 188, 24, 252, 205, 13, 5, 188, 24, 247, 12, 13, 5, 188, 24, 246, 201, - 240, 131, 13, 5, 188, 24, 246, 197, 13, 5, 188, 24, 253, 75, 79, 246, - 236, 79, 57, 13, 5, 188, 24, 253, 39, 13, 5, 188, 24, 240, 250, 13, 5, - 188, 24, 246, 243, 79, 247, 101, 13, 5, 188, 24, 246, 243, 233, 77, 240, - 208, 13, 5, 188, 24, 253, 40, 13, 5, 188, 24, 241, 147, 13, 5, 188, 24, - 246, 234, 13, 5, 188, 24, 253, 78, 13, 5, 188, 24, 247, 16, 13, 5, 188, - 24, 253, 7, 13, 5, 188, 24, 247, 159, 13, 5, 188, 24, 253, 42, 13, 5, - 188, 24, 253, 22, 13, 5, 188, 24, 253, 13, 13, 5, 188, 24, 254, 206, 79, - 253, 31, 13, 5, 188, 24, 254, 206, 79, 253, 39, 13, 5, 188, 24, 254, 206, - 79, 253, 9, 13, 5, 188, 24, 252, 239, 13, 5, 188, 24, 255, 11, 79, 238, - 30, 13, 5, 188, 24, 252, 247, 13, 5, 188, 24, 246, 195, 13, 5, 188, 24, - 252, 223, 13, 5, 188, 24, 253, 3, 13, 5, 188, 24, 252, 204, 13, 5, 188, - 24, 247, 101, 13, 5, 188, 24, 246, 165, 13, 5, 188, 24, 246, 186, 13, 5, - 188, 24, 241, 15, 13, 5, 188, 24, 246, 246, 13, 5, 188, 24, 248, 161, 13, - 5, 188, 24, 238, 68, 13, 5, 188, 24, 247, 56, 13, 5, 188, 24, 66, 13, 5, - 188, 24, 253, 107, 13, 5, 188, 24, 253, 45, 13, 5, 188, 24, 247, 220, 24, - 213, 13, 5, 188, 24, 246, 249, 13, 5, 188, 24, 253, 72, 13, 5, 248, 75, - 13, 5, 254, 77, 233, 77, 248, 75, 13, 5, 250, 151, 13, 5, 241, 168, 13, - 5, 240, 254, 13, 5, 244, 45, 13, 5, 241, 169, 13, 5, 250, 153, 107, 241, - 169, 13, 5, 247, 16, 13, 5, 253, 237, 24, 253, 32, 240, 130, 13, 5, 247, - 155, 13, 5, 253, 238, 24, 246, 206, 13, 5, 253, 238, 233, 77, 247, 155, - 13, 5, 244, 46, 13, 5, 244, 47, 13, 5, 235, 76, 13, 5, 237, 158, 215, 24, - 97, 107, 215, 24, 66, 13, 5, 237, 158, 107, 237, 158, 215, 24, 97, 107, - 215, 24, 66, 13, 5, 239, 66, 13, 5, 253, 7, 13, 5, 254, 249, 24, 246, - 206, 13, 5, 254, 249, 24, 66, 13, 5, 254, 249, 24, 253, 45, 13, 5, 247, - 159, 13, 5, 247, 160, 13, 5, 239, 71, 13, 5, 244, 61, 13, 5, 235, 184, - 13, 5, 237, 56, 107, 235, 184, 13, 5, 253, 34, 13, 5, 254, 238, 107, 254, - 201, 24, 247, 243, 254, 238, 107, 254, 201, 24, 240, 204, 13, 5, 247, 84, - 13, 5, 250, 187, 13, 5, 254, 87, 235, 30, 15, 13, 5, 250, 188, 13, 5, - 248, 86, 13, 5, 253, 241, 240, 130, 13, 5, 250, 189, 13, 5, 246, 220, 13, - 5, 253, 242, 233, 119, 246, 220, 13, 5, 235, 127, 13, 5, 236, 125, 13, 5, - 252, 200, 13, 5, 237, 160, 13, 5, 215, 24, 57, 13, 5, 215, 24, 102, 79, - 254, 218, 79, 154, 13, 5, 215, 24, 102, 79, 246, 197, 13, 5, 215, 24, - 102, 79, 247, 2, 13, 5, 215, 24, 253, 112, 13, 5, 215, 24, 253, 5, 13, 5, - 215, 24, 252, 254, 248, 208, 240, 131, 13, 5, 215, 24, 246, 206, 13, 5, - 215, 24, 253, 30, 13, 5, 215, 24, 248, 19, 13, 5, 215, 24, 252, 232, 13, - 5, 215, 24, 252, 205, 13, 5, 215, 24, 246, 197, 13, 5, 215, 24, 246, 233, - 13, 5, 215, 24, 253, 127, 79, 246, 233, 13, 5, 215, 24, 154, 13, 5, 215, - 24, 247, 80, 13, 5, 215, 24, 254, 201, 24, 246, 195, 13, 5, 215, 24, 253, - 32, 240, 130, 13, 5, 215, 24, 253, 78, 13, 5, 215, 24, 254, 221, 79, 154, - 13, 5, 215, 24, 254, 221, 79, 253, 22, 13, 5, 215, 24, 253, 7, 13, 5, - 215, 24, 247, 160, 13, 5, 215, 24, 247, 84, 13, 5, 215, 24, 248, 86, 13, - 5, 215, 24, 253, 241, 79, 254, 201, 79, 57, 13, 5, 215, 24, 237, 160, 13, - 5, 215, 24, 241, 47, 13, 5, 215, 24, 253, 22, 13, 5, 215, 24, 247, 170, - 13, 5, 215, 24, 253, 13, 13, 5, 215, 24, 254, 206, 79, 252, 232, 13, 5, - 215, 24, 240, 230, 13, 5, 215, 24, 252, 247, 13, 5, 215, 24, 253, 64, 79, - 247, 21, 13, 5, 215, 24, 241, 71, 79, 246, 243, 79, 237, 181, 13, 5, 215, - 24, 241, 71, 79, 246, 243, 240, 131, 13, 5, 215, 24, 240, 236, 13, 5, - 215, 24, 251, 221, 79, 240, 236, 13, 5, 215, 24, 247, 21, 13, 5, 215, 24, - 247, 105, 13, 5, 215, 24, 240, 187, 13, 5, 215, 24, 254, 212, 79, 102, - 79, 254, 253, 79, 252, 201, 13, 5, 215, 24, 66, 13, 5, 215, 24, 97, 79, - 57, 13, 5, 215, 24, 97, 79, 97, 79, 66, 13, 5, 215, 24, 254, 232, 79, - 246, 177, 13, 5, 215, 24, 253, 45, 13, 5, 215, 24, 246, 249, 13, 5, 215, - 233, 91, 13, 5, 238, 17, 13, 5, 240, 171, 24, 246, 186, 13, 5, 240, 171, - 24, 253, 64, 79, 247, 21, 13, 5, 240, 171, 240, 130, 13, 5, 240, 171, - 247, 36, 107, 240, 171, 247, 36, 246, 186, 13, 5, 236, 128, 13, 5, 247, - 2, 13, 5, 253, 184, 24, 247, 2, 13, 5, 248, 89, 13, 5, 216, 24, 246, 220, - 13, 5, 216, 24, 253, 242, 79, 253, 3, 13, 5, 253, 42, 13, 5, 250, 221, - 13, 5, 236, 136, 13, 5, 241, 47, 13, 5, 253, 22, 13, 5, 254, 240, 24, - 246, 206, 13, 5, 247, 169, 13, 5, 252, 236, 24, 253, 112, 13, 5, 252, - 236, 24, 246, 206, 13, 5, 252, 236, 24, 240, 222, 13, 5, 252, 236, 24, - 249, 233, 240, 131, 13, 5, 252, 236, 24, 246, 201, 240, 131, 13, 5, 252, - 236, 24, 254, 201, 24, 246, 206, 13, 5, 252, 236, 24, 253, 78, 13, 5, - 252, 236, 24, 241, 168, 13, 5, 252, 236, 24, 240, 254, 13, 5, 252, 236, - 24, 250, 152, 79, 246, 177, 13, 5, 252, 236, 24, 253, 7, 13, 5, 252, 236, - 24, 254, 229, 79, 246, 177, 13, 5, 252, 236, 24, 237, 160, 13, 5, 252, - 236, 24, 254, 206, 79, 252, 232, 13, 5, 252, 236, 24, 252, 247, 13, 5, - 252, 236, 24, 252, 227, 13, 5, 252, 236, 24, 255, 16, 79, 246, 177, 13, - 5, 252, 236, 24, 251, 224, 79, 253, 48, 13, 5, 252, 236, 24, 241, 20, 13, - 5, 252, 236, 240, 131, 13, 5, 252, 236, 233, 77, 247, 169, 13, 5, 252, - 236, 233, 119, 247, 169, 13, 5, 252, 236, 233, 91, 13, 5, 252, 236, 233, - 134, 13, 5, 250, 234, 13, 5, 237, 185, 13, 5, 241, 49, 107, 237, 185, 13, - 5, 241, 49, 233, 119, 237, 185, 13, 5, 241, 49, 233, 134, 13, 5, 250, - 235, 13, 5, 247, 170, 13, 5, 247, 18, 13, 5, 253, 185, 107, 247, 18, 13, - 5, 253, 185, 107, 253, 185, 253, 75, 107, 246, 197, 13, 5, 198, 13, 5, - 255, 10, 24, 240, 187, 13, 5, 255, 10, 240, 130, 13, 5, 250, 245, 13, 5, - 250, 246, 13, 5, 250, 248, 13, 5, 241, 5, 13, 5, 238, 23, 13, 5, 253, 13, - 13, 5, 251, 5, 13, 5, 252, 239, 13, 5, 247, 174, 13, 5, 252, 229, 13, 5, - 254, 207, 107, 252, 229, 13, 5, 248, 103, 13, 5, 254, 105, 240, 130, 13, - 5, 236, 160, 13, 5, 236, 162, 13, 5, 240, 230, 13, 5, 247, 5, 24, 57, 13, - 5, 247, 5, 24, 246, 220, 13, 5, 247, 5, 24, 252, 226, 13, 5, 247, 5, 107, - 240, 230, 13, 5, 247, 5, 107, 247, 5, 24, 102, 79, 252, 201, 13, 5, 247, - 5, 233, 77, 240, 230, 13, 5, 239, 122, 13, 5, 241, 6, 24, 57, 13, 5, 241, - 6, 24, 102, 79, 253, 12, 13, 5, 241, 6, 24, 253, 12, 13, 5, 241, 6, 240, - 130, 13, 5, 252, 201, 13, 5, 251, 36, 13, 5, 241, 55, 13, 5, 247, 42, - 232, 209, 13, 5, 247, 42, 24, 254, 7, 240, 131, 13, 5, 247, 42, 233, 119, - 241, 55, 13, 5, 239, 124, 13, 5, 254, 110, 233, 222, 13, 5, 251, 39, 13, - 5, 244, 164, 13, 5, 252, 247, 13, 5, 254, 251, 24, 57, 13, 5, 254, 251, - 24, 253, 45, 13, 5, 254, 251, 233, 134, 13, 5, 252, 248, 13, 5, 254, 230, - 24, 72, 13, 5, 251, 58, 13, 5, 251, 61, 13, 5, 253, 249, 24, 246, 201, - 240, 131, 13, 5, 253, 249, 24, 253, 75, 79, 246, 201, 240, 131, 13, 5, - 236, 166, 13, 5, 237, 87, 24, 253, 5, 13, 5, 237, 87, 24, 246, 177, 13, - 5, 237, 87, 24, 252, 254, 79, 246, 177, 13, 5, 237, 87, 24, 246, 233, 13, - 5, 237, 87, 24, 254, 206, 79, 246, 201, 240, 131, 13, 5, 237, 87, 24, - 252, 247, 13, 5, 237, 87, 24, 246, 195, 13, 5, 237, 87, 24, 246, 186, 13, - 5, 237, 87, 24, 253, 64, 79, 102, 253, 5, 13, 5, 237, 87, 24, 253, 64, - 79, 246, 177, 13, 5, 237, 87, 24, 253, 64, 79, 252, 254, 79, 246, 177, - 13, 5, 237, 87, 24, 254, 232, 79, 246, 177, 13, 5, 237, 87, 24, 246, 249, - 13, 5, 239, 145, 13, 5, 252, 227, 13, 5, 245, 12, 13, 5, 246, 195, 13, 5, - 253, 23, 240, 171, 24, 246, 197, 13, 5, 253, 23, 240, 171, 24, 241, 5, - 13, 5, 253, 23, 240, 171, 24, 247, 6, 13, 5, 253, 23, 240, 171, 24, 253, - 192, 107, 253, 23, 240, 171, 24, 247, 6, 13, 5, 253, 23, 240, 171, 24, - 246, 249, 13, 5, 253, 23, 240, 131, 13, 5, 253, 23, 107, 246, 195, 13, 5, - 253, 23, 233, 77, 246, 195, 13, 5, 253, 23, 233, 77, 253, 23, 240, 171, - 107, 238, 17, 13, 5, 238, 30, 13, 5, 240, 177, 253, 11, 24, 235, 108, 13, - 5, 240, 177, 253, 11, 24, 253, 30, 13, 5, 240, 177, 253, 11, 24, 247, - 133, 13, 5, 240, 177, 253, 11, 24, 246, 233, 13, 5, 240, 177, 253, 11, - 24, 253, 32, 240, 130, 13, 5, 240, 177, 253, 11, 24, 240, 254, 13, 5, - 240, 177, 253, 11, 24, 252, 200, 13, 5, 240, 177, 253, 11, 24, 252, 247, - 13, 5, 240, 177, 253, 11, 24, 238, 59, 13, 5, 240, 177, 253, 11, 24, 253, - 107, 13, 5, 240, 177, 237, 56, 24, 253, 30, 13, 5, 240, 177, 237, 56, 24, - 254, 234, 66, 13, 5, 213, 13, 5, 251, 101, 13, 5, 251, 103, 13, 5, 247, - 45, 13, 5, 239, 194, 13, 5, 252, 223, 13, 5, 254, 200, 24, 57, 13, 5, - 254, 200, 24, 253, 166, 13, 5, 254, 200, 24, 253, 30, 13, 5, 254, 200, - 24, 253, 48, 13, 5, 254, 200, 24, 72, 13, 5, 254, 200, 24, 74, 13, 5, - 254, 200, 24, 253, 229, 13, 5, 254, 200, 24, 66, 13, 5, 254, 200, 24, - 253, 107, 13, 5, 254, 200, 233, 77, 252, 223, 13, 5, 238, 34, 13, 5, 241, - 10, 24, 247, 155, 13, 5, 241, 10, 24, 253, 45, 13, 5, 241, 10, 24, 252, - 226, 13, 5, 241, 10, 233, 119, 238, 34, 13, 5, 208, 13, 5, 251, 168, 13, - 5, 253, 37, 13, 5, 253, 3, 13, 5, 252, 204, 13, 5, 252, 253, 233, 222, - 13, 5, 247, 200, 13, 5, 252, 253, 24, 57, 13, 5, 252, 253, 24, 253, 31, - 13, 5, 252, 253, 24, 247, 132, 13, 5, 252, 253, 24, 154, 13, 5, 252, 253, - 24, 247, 16, 13, 5, 252, 253, 24, 246, 220, 13, 5, 252, 253, 24, 247, 18, - 13, 5, 252, 253, 24, 252, 239, 13, 5, 252, 253, 24, 246, 195, 13, 5, 252, - 253, 24, 247, 6, 13, 5, 252, 253, 24, 241, 15, 13, 5, 252, 253, 24, 247, - 208, 13, 5, 252, 253, 24, 253, 107, 13, 5, 252, 253, 24, 254, 14, 13, 5, - 252, 253, 24, 253, 199, 13, 5, 252, 253, 24, 253, 161, 13, 5, 252, 253, - 24, 246, 249, 13, 5, 252, 253, 107, 247, 200, 13, 5, 252, 253, 240, 130, - 13, 5, 247, 6, 13, 5, 253, 192, 215, 24, 240, 204, 13, 5, 236, 206, 13, - 5, 247, 101, 13, 5, 246, 165, 13, 5, 241, 68, 13, 5, 246, 236, 24, 57, - 13, 5, 246, 236, 24, 246, 206, 13, 5, 246, 236, 24, 240, 208, 13, 5, 246, - 236, 24, 252, 247, 13, 5, 246, 236, 24, 240, 236, 13, 5, 246, 236, 24, - 247, 112, 13, 5, 246, 236, 24, 66, 13, 5, 246, 236, 24, 97, 79, 57, 13, - 5, 245, 157, 13, 5, 239, 243, 13, 5, 237, 116, 13, 5, 246, 186, 13, 5, - 253, 64, 253, 59, 13, 5, 253, 64, 107, 253, 64, 253, 89, 107, 253, 89, - 253, 75, 107, 246, 197, 13, 5, 253, 64, 107, 253, 64, 253, 134, 107, 253, - 134, 253, 75, 107, 246, 197, 13, 5, 239, 245, 13, 5, 245, 161, 13, 5, - 238, 53, 13, 5, 236, 223, 13, 5, 233, 25, 13, 5, 241, 15, 13, 5, 248, - 158, 24, 57, 13, 5, 248, 158, 24, 253, 78, 13, 5, 245, 166, 13, 5, 246, - 222, 24, 57, 13, 5, 246, 222, 24, 247, 120, 13, 5, 246, 222, 24, 237, - 196, 13, 5, 246, 222, 24, 248, 28, 13, 5, 246, 222, 24, 246, 197, 13, 5, - 246, 222, 24, 246, 234, 13, 5, 246, 222, 24, 253, 32, 240, 130, 13, 5, - 246, 222, 24, 235, 127, 13, 5, 246, 222, 24, 247, 170, 13, 5, 246, 222, - 24, 248, 103, 13, 5, 246, 222, 24, 247, 6, 13, 5, 236, 226, 13, 5, 245, - 169, 13, 5, 247, 52, 240, 131, 13, 5, 247, 52, 107, 247, 52, 253, 209, - 107, 247, 11, 13, 5, 239, 249, 13, 5, 246, 246, 13, 5, 254, 7, 107, 233, - 70, 246, 246, 13, 5, 240, 236, 13, 5, 236, 228, 13, 5, 253, 24, 13, 5, - 255, 16, 240, 130, 13, 5, 248, 161, 13, 5, 241, 245, 13, 5, 248, 162, - 107, 248, 162, 240, 236, 13, 5, 245, 185, 13, 5, 238, 59, 13, 5, 253, 26, - 13, 5, 254, 253, 107, 253, 26, 13, 5, 251, 240, 13, 5, 245, 222, 13, 5, - 238, 68, 13, 5, 247, 21, 13, 5, 236, 247, 13, 5, 247, 205, 13, 5, 245, - 226, 13, 5, 252, 202, 13, 5, 254, 214, 231, 198, 13, 5, 254, 214, 24, - 253, 41, 13, 5, 254, 214, 24, 252, 239, 13, 5, 254, 214, 240, 130, 13, 5, - 247, 208, 13, 5, 253, 134, 107, 253, 134, 254, 230, 107, 254, 230, 249, - 195, 107, 240, 156, 13, 5, 253, 134, 233, 91, 13, 5, 247, 105, 13, 5, - 108, 24, 253, 30, 13, 5, 108, 24, 246, 233, 13, 5, 108, 24, 246, 186, 13, - 5, 108, 24, 246, 246, 13, 5, 108, 24, 241, 20, 13, 5, 108, 24, 253, 45, - 13, 5, 240, 187, 13, 5, 247, 56, 13, 5, 253, 9, 13, 5, 254, 212, 240, - 130, 13, 5, 253, 44, 13, 5, 255, 49, 240, 131, 13, 5, 252, 21, 13, 5, - 248, 172, 13, 5, 253, 136, 24, 240, 187, 13, 5, 253, 136, 107, 248, 172, - 13, 5, 253, 136, 107, 253, 136, 253, 89, 107, 253, 89, 253, 75, 107, 246, - 197, 13, 5, 253, 18, 13, 5, 241, 20, 13, 5, 248, 183, 13, 5, 248, 184, - 13, 5, 247, 112, 13, 5, 254, 12, 107, 254, 12, 254, 255, 107, 252, 226, - 13, 5, 66, 13, 5, 97, 246, 233, 13, 5, 97, 97, 66, 13, 5, 97, 107, 97, - 254, 242, 107, 254, 242, 253, 75, 107, 246, 197, 13, 5, 97, 107, 97, 254, - 152, 107, 247, 205, 13, 5, 97, 107, 97, 97, 200, 107, 97, 232, 5, 13, 5, - 253, 107, 13, 5, 254, 14, 13, 5, 253, 45, 13, 5, 254, 208, 235, 127, 13, - 5, 254, 208, 24, 246, 206, 13, 5, 254, 208, 24, 252, 239, 13, 5, 254, - 208, 24, 97, 79, 97, 79, 66, 13, 5, 254, 208, 24, 97, 79, 97, 79, 97, - 240, 130, 13, 5, 254, 208, 240, 130, 13, 5, 254, 208, 233, 134, 13, 5, - 254, 208, 236, 224, 24, 246, 206, 13, 5, 246, 30, 13, 5, 253, 199, 13, 5, - 254, 243, 24, 237, 160, 13, 5, 254, 243, 24, 254, 206, 79, 252, 203, 13, - 5, 254, 243, 24, 241, 68, 13, 5, 254, 243, 24, 66, 13, 5, 240, 66, 13, 5, - 246, 32, 13, 5, 247, 220, 24, 235, 76, 13, 5, 247, 220, 24, 213, 13, 5, - 253, 121, 13, 5, 255, 51, 240, 130, 13, 5, 253, 161, 13, 5, 254, 244, - 233, 77, 253, 161, 13, 5, 254, 244, 233, 134, 13, 5, 252, 58, 13, 5, 253, - 94, 24, 102, 79, 154, 13, 5, 253, 94, 24, 102, 79, 252, 201, 13, 5, 253, - 94, 24, 253, 112, 13, 5, 253, 94, 24, 154, 13, 5, 253, 94, 24, 246, 195, - 13, 5, 253, 94, 24, 253, 107, 13, 5, 253, 94, 24, 254, 232, 79, 246, 177, - 13, 5, 253, 94, 24, 254, 232, 79, 253, 30, 13, 5, 252, 59, 13, 5, 252, - 61, 13, 5, 246, 35, 13, 5, 252, 63, 13, 5, 252, 242, 24, 57, 13, 5, 252, - 242, 24, 235, 108, 13, 5, 252, 242, 24, 125, 13, 5, 252, 242, 24, 248, - 33, 13, 5, 252, 242, 24, 252, 205, 13, 5, 252, 242, 24, 247, 12, 13, 5, - 252, 242, 24, 246, 201, 240, 131, 13, 5, 252, 242, 24, 246, 197, 13, 5, - 252, 242, 24, 253, 40, 13, 5, 252, 242, 24, 154, 13, 5, 252, 242, 24, - 246, 234, 13, 5, 252, 242, 24, 253, 78, 13, 5, 252, 242, 24, 248, 68, 13, - 5, 252, 242, 24, 253, 7, 13, 5, 252, 242, 24, 247, 18, 13, 5, 252, 242, - 24, 247, 174, 13, 5, 252, 242, 24, 213, 13, 5, 252, 242, 24, 246, 186, - 13, 5, 252, 242, 24, 241, 245, 13, 5, 252, 242, 24, 253, 18, 13, 5, 252, - 242, 24, 97, 79, 246, 233, 13, 5, 252, 242, 24, 253, 45, 13, 5, 252, 242, - 24, 238, 80, 13, 5, 238, 80, 13, 5, 246, 36, 24, 66, 13, 5, 246, 249, 13, - 5, 253, 162, 24, 57, 13, 5, 253, 162, 24, 253, 34, 13, 5, 253, 162, 24, - 246, 220, 13, 5, 253, 162, 24, 240, 187, 13, 5, 246, 39, 13, 5, 246, 38, - 13, 5, 237, 18, 13, 5, 240, 70, 13, 5, 252, 67, 13, 5, 254, 166, 24, 235, - 76, 13, 5, 252, 68, 13, 5, 252, 226, 13, 5, 254, 255, 240, 131, 13, 5, - 254, 255, 235, 51, 24, 246, 220, 13, 5, 252, 166, 13, 5, 246, 106, 13, 5, - 252, 172, 13, 5, 253, 72, 13, 5, 255, 54, 107, 253, 72, 13, 5, 252, 176, - 13, 5, 252, 177, 13, 5, 254, 179, 248, 77, 240, 131, 13, 5, 252, 179, 13, - 5, 246, 131, 13, 5, 253, 97, 13, 5, 252, 188, 13, 5, 254, 181, 24, 57, - 13, 5, 240, 110, 13, 5, 252, 189, 13, 111, 5, 135, 246, 177, 13, 111, 5, - 152, 246, 177, 13, 111, 5, 246, 160, 246, 177, 13, 111, 5, 246, 159, 246, - 177, 13, 111, 5, 253, 17, 246, 177, 13, 111, 5, 240, 155, 246, 177, 13, - 111, 5, 240, 142, 246, 177, 13, 111, 5, 246, 208, 246, 177, 13, 111, 5, - 152, 240, 156, 13, 111, 5, 246, 160, 240, 156, 13, 111, 5, 246, 159, 240, - 156, 13, 111, 5, 253, 17, 240, 156, 13, 111, 5, 240, 155, 240, 156, 13, - 111, 5, 240, 142, 240, 156, 13, 111, 5, 246, 208, 240, 156, 13, 111, 5, - 246, 160, 66, 13, 111, 5, 246, 159, 66, 13, 111, 5, 253, 17, 66, 13, 111, - 5, 240, 155, 66, 13, 111, 5, 240, 142, 66, 13, 111, 5, 246, 208, 66, 13, - 111, 5, 168, 237, 113, 13, 111, 5, 135, 237, 113, 13, 111, 5, 152, 237, - 113, 13, 111, 5, 246, 160, 237, 113, 13, 111, 5, 246, 159, 237, 113, 13, - 111, 5, 253, 17, 237, 113, 13, 111, 5, 240, 155, 237, 113, 13, 111, 5, - 240, 142, 237, 113, 13, 111, 5, 246, 208, 237, 113, 13, 111, 5, 168, 237, - 156, 13, 111, 5, 135, 237, 156, 13, 111, 5, 152, 237, 156, 13, 111, 5, - 246, 160, 237, 156, 13, 111, 5, 246, 159, 237, 156, 13, 111, 5, 135, 237, - 116, 13, 111, 5, 152, 237, 116, 13, 111, 5, 152, 241, 69, 235, 30, 15, - 13, 111, 5, 246, 160, 237, 116, 13, 111, 5, 246, 159, 237, 116, 13, 111, - 5, 253, 17, 237, 116, 13, 111, 5, 240, 155, 237, 116, 13, 111, 5, 240, - 142, 237, 116, 13, 111, 5, 246, 208, 237, 116, 13, 111, 5, 168, 237, 163, - 13, 111, 5, 135, 237, 163, 13, 111, 5, 152, 237, 163, 13, 111, 5, 152, - 245, 159, 235, 30, 15, 13, 111, 5, 246, 160, 237, 163, 13, 111, 5, 246, - 159, 237, 163, 13, 111, 5, 241, 69, 24, 253, 179, 79, 240, 156, 13, 111, - 5, 241, 69, 24, 253, 179, 79, 247, 174, 13, 111, 5, 168, 240, 219, 13, - 111, 5, 135, 240, 219, 13, 111, 5, 152, 240, 219, 13, 111, 5, 152, 249, - 131, 235, 30, 15, 13, 111, 5, 246, 160, 240, 219, 13, 111, 5, 246, 159, - 240, 219, 13, 111, 5, 152, 235, 30, 211, 238, 207, 13, 111, 5, 152, 235, - 30, 211, 238, 208, 13, 111, 5, 246, 160, 235, 30, 211, 239, 86, 13, 111, - 5, 246, 160, 235, 30, 211, 236, 137, 13, 111, 5, 246, 160, 235, 30, 211, - 241, 181, 57, 13, 111, 5, 246, 160, 235, 30, 211, 241, 181, 254, 185, 13, - 111, 5, 253, 17, 235, 30, 211, 242, 65, 13, 111, 5, 240, 155, 235, 30, - 211, 239, 41, 13, 111, 5, 240, 155, 235, 30, 211, 248, 67, 57, 13, 111, - 5, 240, 155, 235, 30, 211, 248, 67, 254, 185, 13, 111, 5, 240, 142, 235, - 30, 211, 246, 40, 13, 111, 5, 240, 142, 235, 30, 211, 240, 69, 13, 111, - 5, 246, 208, 235, 30, 211, 236, 109, 13, 111, 5, 246, 208, 235, 30, 211, - 234, 126, 13, 111, 5, 246, 208, 235, 30, 211, 234, 127, 13, 111, 5, 246, - 208, 235, 30, 211, 239, 40, 57, 13, 111, 5, 135, 252, 254, 240, 131, 13, - 111, 5, 152, 252, 254, 240, 131, 13, 111, 5, 246, 160, 252, 254, 240, - 131, 13, 111, 5, 246, 159, 252, 254, 240, 131, 13, 111, 5, 253, 17, 252, - 254, 240, 131, 13, 111, 5, 168, 240, 218, 13, 111, 5, 135, 240, 218, 13, - 111, 5, 152, 240, 218, 13, 111, 5, 246, 160, 240, 218, 13, 111, 5, 246, - 160, 247, 249, 235, 30, 15, 13, 111, 5, 246, 159, 240, 218, 13, 111, 5, - 246, 159, 247, 249, 235, 30, 15, 13, 111, 5, 231, 109, 13, 111, 5, 231, - 108, 13, 111, 5, 168, 237, 244, 13, 111, 5, 135, 237, 244, 13, 111, 5, - 168, 240, 239, 240, 156, 13, 111, 5, 135, 237, 218, 240, 156, 13, 111, 5, - 246, 159, 240, 0, 240, 156, 13, 111, 5, 168, 240, 239, 235, 30, 211, 57, - 13, 111, 5, 135, 237, 218, 235, 30, 211, 57, 13, 111, 5, 168, 237, 112, - 246, 177, 13, 111, 5, 168, 235, 53, 246, 177, 13, 111, 5, 84, 233, 158, - 168, 238, 61, 13, 111, 5, 84, 233, 158, 168, 233, 155, 13, 229, 161, 5, - 84, 233, 158, 247, 8, 233, 140, 13, 229, 161, 5, 61, 237, 66, 13, 229, - 161, 5, 233, 74, 237, 66, 13, 229, 161, 5, 233, 74, 232, 57, 43, 23, 14, - 237, 77, 43, 23, 14, 236, 42, 43, 23, 14, 228, 179, 43, 23, 14, 241, 58, - 228, 190, 43, 23, 14, 241, 58, 237, 132, 43, 23, 14, 237, 223, 228, 190, - 43, 23, 14, 237, 223, 237, 132, 43, 23, 14, 232, 213, 43, 23, 14, 231, - 174, 43, 23, 14, 229, 46, 43, 23, 14, 231, 188, 43, 23, 14, 233, 66, 237, - 132, 43, 23, 14, 232, 217, 43, 23, 14, 241, 95, 228, 190, 43, 23, 14, - 253, 221, 228, 190, 43, 23, 14, 235, 220, 43, 23, 14, 231, 92, 43, 23, - 14, 229, 230, 43, 23, 14, 230, 173, 237, 132, 43, 23, 14, 234, 237, 43, - 23, 14, 240, 38, 43, 23, 14, 238, 31, 231, 202, 43, 23, 14, 237, 157, - 231, 202, 43, 23, 14, 236, 194, 43, 23, 14, 232, 95, 43, 23, 14, 240, 73, - 43, 23, 14, 248, 69, 231, 202, 43, 23, 14, 235, 96, 231, 202, 43, 23, 14, - 231, 240, 231, 202, 43, 23, 14, 233, 18, 43, 23, 14, 232, 245, 43, 23, - 14, 236, 240, 232, 69, 43, 23, 14, 239, 178, 231, 202, 43, 23, 14, 237, - 21, 231, 202, 43, 23, 14, 233, 185, 231, 202, 43, 23, 14, 232, 70, 43, - 23, 14, 235, 185, 43, 23, 14, 239, 221, 43, 23, 14, 238, 33, 231, 202, - 43, 23, 14, 234, 248, 43, 23, 14, 227, 217, 43, 23, 14, 236, 216, 43, 23, - 14, 235, 139, 231, 202, 43, 23, 14, 235, 139, 251, 6, 234, 232, 43, 23, - 14, 232, 31, 231, 202, 43, 23, 14, 240, 35, 43, 23, 14, 239, 83, 43, 23, - 14, 249, 219, 43, 23, 14, 246, 5, 43, 23, 14, 234, 244, 43, 23, 14, 231, - 94, 43, 23, 14, 241, 95, 253, 221, 246, 194, 43, 23, 14, 237, 72, 231, - 202, 43, 23, 14, 231, 82, 43, 23, 14, 233, 181, 231, 202, 43, 23, 14, - 239, 57, 233, 55, 43, 23, 14, 232, 247, 43, 23, 14, 231, 127, 43, 23, 14, - 232, 215, 43, 23, 14, 233, 192, 231, 202, 43, 23, 14, 234, 202, 43, 23, - 14, 229, 206, 231, 202, 43, 23, 14, 229, 207, 231, 202, 43, 23, 14, 234, - 124, 43, 23, 14, 241, 199, 43, 23, 14, 234, 190, 43, 23, 14, 234, 140, - 241, 26, 43, 23, 14, 233, 181, 241, 26, 43, 23, 14, 228, 165, 43, 23, 14, - 227, 242, 43, 23, 14, 248, 69, 246, 194, 43, 23, 14, 238, 31, 246, 194, - 43, 23, 14, 241, 58, 246, 194, 43, 23, 14, 234, 191, 43, 23, 14, 232, - 216, 43, 23, 14, 225, 98, 43, 23, 14, 225, 94, 43, 23, 14, 234, 189, 246, - 194, 43, 23, 14, 231, 240, 253, 91, 246, 252, 43, 23, 14, 235, 96, 253, - 91, 246, 252, 43, 23, 14, 237, 35, 43, 23, 14, 230, 173, 246, 194, 43, - 23, 14, 230, 172, 233, 50, 246, 194, 43, 23, 14, 235, 13, 43, 23, 14, - 225, 95, 43, 23, 14, 234, 93, 43, 23, 14, 234, 30, 43, 23, 14, 239, 114, - 244, 12, 43, 23, 14, 237, 223, 246, 194, 43, 23, 14, 238, 33, 246, 194, - 43, 23, 14, 233, 2, 246, 194, 43, 23, 14, 236, 174, 43, 23, 14, 229, 228, - 43, 23, 14, 234, 146, 43, 23, 14, 229, 207, 246, 194, 43, 23, 14, 229, - 206, 246, 194, 43, 23, 14, 237, 245, 229, 45, 43, 23, 14, 234, 143, 43, - 23, 14, 223, 59, 43, 23, 14, 233, 181, 246, 194, 43, 23, 14, 230, 53, 43, - 23, 14, 235, 139, 246, 194, 43, 23, 14, 240, 26, 43, 23, 14, 233, 192, - 246, 194, 43, 23, 14, 232, 179, 43, 23, 14, 239, 240, 246, 194, 43, 23, - 14, 246, 66, 235, 185, 43, 23, 14, 223, 55, 43, 23, 14, 225, 100, 43, 23, - 14, 227, 80, 43, 23, 14, 222, 238, 43, 23, 14, 222, 229, 43, 23, 14, 227, - 81, 43, 23, 14, 225, 101, 43, 23, 14, 225, 113, 43, 23, 14, 227, 141, 43, - 23, 14, 237, 245, 227, 141, 43, 23, 14, 232, 31, 246, 194, 43, 23, 14, - 229, 223, 249, 234, 43, 23, 14, 229, 223, 249, 236, 43, 23, 14, 245, 244, - 235, 147, 43, 23, 14, 252, 17, 253, 150, 234, 5, 43, 23, 14, 231, 90, 43, - 23, 14, 231, 65, 43, 23, 14, 248, 201, 240, 201, 43, 23, 14, 248, 201, - 246, 252, 43, 23, 14, 234, 231, 43, 23, 14, 238, 15, 246, 252, 43, 23, - 14, 243, 71, 231, 202, 43, 23, 14, 235, 126, 231, 202, 43, 23, 14, 235, - 126, 241, 26, 43, 23, 14, 235, 126, 246, 194, 43, 23, 14, 233, 185, 246, - 194, 43, 23, 14, 242, 61, 43, 23, 14, 237, 132, 43, 23, 14, 237, 8, 43, - 23, 14, 233, 52, 43, 23, 14, 233, 170, 43, 23, 14, 237, 161, 249, 229, - 233, 193, 43, 23, 14, 237, 161, 253, 174, 233, 160, 43, 23, 14, 237, 161, - 246, 6, 233, 160, 43, 23, 14, 237, 161, 234, 243, 233, 160, 43, 23, 14, - 237, 161, 236, 110, 233, 193, 43, 23, 14, 237, 157, 253, 91, 246, 252, - 43, 23, 14, 237, 157, 227, 190, 232, 76, 43, 23, 14, 237, 157, 227, 190, - 237, 241, 43, 23, 14, 232, 112, 43, 23, 14, 233, 162, 227, 190, 233, 186, - 240, 201, 43, 23, 14, 233, 162, 227, 190, 233, 186, 246, 252, 43, 23, 14, - 233, 162, 227, 190, 237, 241, 43, 23, 14, 231, 182, 43, 23, 14, 238, 101, - 43, 23, 14, 230, 69, 43, 23, 14, 234, 52, 43, 23, 14, 240, 193, 248, 134, - 241, 96, 43, 23, 14, 240, 193, 232, 75, 43, 23, 14, 240, 193, 241, 96, - 43, 23, 14, 240, 193, 236, 154, 43, 23, 14, 240, 193, 244, 122, 43, 23, - 14, 240, 193, 238, 3, 43, 23, 14, 240, 193, 231, 75, 43, 23, 14, 240, - 193, 248, 134, 238, 3, 43, 23, 14, 233, 94, 238, 37, 237, 86, 43, 23, 14, - 233, 94, 247, 242, 238, 37, 237, 86, 43, 23, 14, 233, 94, 233, 200, 237, - 86, 43, 23, 14, 233, 94, 247, 242, 233, 200, 237, 86, 43, 23, 14, 233, - 94, 240, 47, 237, 86, 43, 23, 14, 233, 94, 231, 181, 43, 23, 14, 233, 94, - 233, 180, 237, 86, 43, 23, 14, 233, 94, 233, 180, 235, 188, 237, 86, 43, - 23, 14, 233, 94, 235, 188, 237, 86, 43, 23, 14, 233, 94, 235, 202, 237, - 86, 43, 23, 14, 239, 43, 238, 72, 230, 188, 43, 23, 14, 230, 172, 238, - 72, 230, 188, 43, 23, 14, 231, 250, 229, 152, 43, 23, 14, 231, 250, 229, - 201, 43, 23, 14, 231, 250, 232, 19, 43, 23, 14, 233, 94, 246, 44, 237, - 86, 43, 23, 14, 233, 94, 231, 126, 237, 86, 43, 23, 14, 233, 94, 235, - 202, 233, 180, 237, 86, 43, 23, 14, 230, 187, 255, 60, 235, 147, 43, 23, - 14, 230, 187, 255, 60, 234, 56, 43, 23, 14, 236, 64, 253, 150, 237, 72, - 248, 192, 43, 23, 14, 232, 206, 43, 23, 14, 230, 70, 43, 23, 14, 237, 72, - 234, 8, 234, 49, 239, 37, 43, 23, 14, 237, 72, 231, 221, 213, 43, 23, 14, - 237, 72, 231, 221, 241, 199, 43, 23, 14, 237, 72, 251, 40, 237, 86, 43, - 23, 14, 237, 72, 231, 221, 253, 12, 43, 23, 14, 237, 72, 235, 136, 234, - 53, 253, 12, 43, 23, 14, 237, 72, 231, 221, 253, 6, 43, 23, 14, 237, 72, - 231, 221, 253, 65, 43, 23, 14, 237, 72, 231, 221, 254, 230, 240, 201, 43, - 23, 14, 237, 72, 231, 221, 254, 230, 246, 252, 43, 23, 14, 237, 72, 235, - 189, 237, 175, 232, 19, 43, 23, 14, 237, 72, 235, 189, 237, 175, 229, - 201, 43, 23, 14, 238, 215, 235, 136, 237, 175, 240, 72, 43, 23, 14, 237, - 72, 235, 136, 237, 175, 236, 251, 43, 23, 14, 237, 72, 236, 164, 43, 23, - 14, 241, 33, 240, 111, 43, 23, 14, 241, 33, 236, 123, 43, 23, 14, 241, - 33, 236, 235, 43, 23, 14, 237, 72, 255, 55, 237, 148, 227, 152, 43, 23, - 14, 237, 72, 231, 63, 230, 224, 43, 23, 14, 237, 148, 228, 219, 43, 23, - 14, 237, 131, 228, 219, 43, 23, 14, 237, 131, 227, 152, 43, 23, 14, 237, - 131, 247, 65, 253, 174, 231, 217, 43, 23, 14, 237, 131, 229, 202, 235, - 222, 231, 217, 43, 23, 14, 237, 131, 232, 20, 255, 7, 231, 217, 43, 23, - 14, 237, 131, 230, 217, 248, 122, 231, 217, 43, 23, 14, 237, 148, 247, - 65, 253, 174, 231, 217, 43, 23, 14, 237, 148, 229, 202, 235, 222, 231, - 217, 43, 23, 14, 237, 148, 232, 20, 255, 7, 231, 217, 43, 23, 14, 237, - 148, 230, 217, 248, 122, 231, 217, 43, 23, 14, 237, 254, 236, 49, 43, 23, - 14, 237, 254, 237, 33, 43, 23, 14, 233, 147, 247, 65, 239, 113, 43, 23, - 14, 233, 147, 247, 65, 236, 152, 43, 23, 14, 233, 147, 237, 132, 43, 23, - 14, 233, 147, 233, 245, 43, 23, 14, 233, 120, 233, 245, 43, 23, 14, 233, - 120, 235, 141, 233, 202, 43, 23, 14, 233, 120, 235, 141, 232, 58, 43, 23, - 14, 233, 120, 235, 141, 229, 222, 43, 23, 14, 233, 120, 235, 252, 43, 23, - 14, 233, 120, 237, 195, 233, 202, 43, 23, 14, 233, 120, 237, 195, 232, - 58, 43, 23, 14, 233, 120, 237, 195, 229, 222, 43, 23, 14, 234, 54, 254, - 60, 43, 23, 14, 232, 111, 253, 119, 43, 23, 14, 235, 138, 43, 23, 14, - 235, 67, 213, 43, 23, 14, 235, 67, 248, 192, 43, 23, 14, 235, 67, 252, - 205, 43, 23, 14, 235, 67, 253, 12, 43, 23, 14, 235, 67, 253, 6, 43, 23, - 14, 235, 67, 253, 65, 43, 23, 14, 235, 67, 252, 248, 43, 23, 14, 231, - 240, 253, 91, 241, 192, 43, 23, 14, 235, 96, 253, 91, 241, 192, 43, 23, - 14, 231, 240, 253, 91, 240, 201, 43, 23, 14, 235, 96, 253, 91, 240, 201, - 43, 23, 14, 238, 15, 240, 201, 43, 23, 14, 237, 157, 253, 91, 240, 201, - 23, 14, 237, 62, 233, 127, 23, 14, 47, 233, 127, 23, 14, 35, 233, 127, - 23, 14, 235, 37, 35, 233, 127, 23, 14, 237, 110, 233, 127, 23, 14, 240, - 125, 233, 127, 23, 14, 42, 237, 120, 53, 23, 14, 41, 237, 120, 53, 23, - 14, 237, 120, 240, 169, 23, 14, 253, 56, 238, 45, 23, 14, 254, 218, 242, - 233, 23, 14, 238, 45, 23, 14, 243, 17, 23, 14, 233, 177, 232, 187, 23, - 14, 233, 177, 232, 188, 23, 14, 233, 177, 232, 189, 23, 14, 233, 205, 23, - 14, 236, 77, 51, 23, 14, 238, 130, 76, 23, 14, 234, 25, 23, 14, 238, 128, - 23, 14, 104, 23, 14, 234, 175, 237, 147, 23, 14, 234, 255, 237, 147, 23, - 14, 231, 178, 237, 147, 23, 14, 232, 192, 237, 147, 23, 14, 232, 190, - 237, 147, 23, 14, 234, 224, 237, 147, 23, 14, 231, 145, 230, 185, 23, 14, - 230, 63, 230, 185, 23, 14, 255, 65, 240, 220, 23, 14, 255, 65, 247, 69, - 237, 140, 240, 243, 23, 14, 255, 65, 247, 69, 237, 140, 237, 173, 23, 14, - 255, 62, 240, 220, 23, 14, 255, 72, 240, 220, 23, 14, 255, 72, 247, 69, - 237, 140, 240, 243, 23, 14, 255, 72, 247, 69, 237, 140, 237, 173, 23, 14, - 248, 32, 236, 30, 23, 14, 248, 32, 236, 31, 23, 14, 233, 219, 235, 85, - 240, 148, 23, 14, 47, 238, 49, 23, 14, 47, 241, 132, 23, 14, 247, 141, - 253, 19, 23, 14, 247, 141, 240, 152, 23, 14, 235, 131, 253, 19, 23, 14, - 235, 131, 240, 152, 23, 14, 240, 235, 253, 19, 23, 14, 240, 235, 240, - 152, 23, 14, 235, 53, 206, 238, 49, 23, 14, 235, 53, 206, 241, 132, 23, - 14, 238, 161, 242, 2, 23, 14, 254, 40, 242, 2, 23, 14, 237, 140, 240, - 243, 23, 14, 237, 140, 237, 173, 23, 14, 228, 216, 240, 243, 23, 14, 228, - 216, 237, 173, 23, 14, 244, 155, 240, 148, 23, 14, 242, 24, 240, 148, 23, - 14, 132, 240, 148, 23, 14, 235, 53, 240, 148, 23, 14, 237, 112, 240, 148, - 23, 14, 232, 6, 240, 148, 23, 14, 227, 211, 240, 148, 23, 14, 228, 218, - 240, 148, 23, 14, 168, 235, 56, 227, 212, 240, 148, 23, 14, 255, 74, 231, - 226, 23, 14, 79, 231, 226, 23, 14, 237, 40, 255, 74, 231, 226, 23, 14, - 37, 233, 84, 237, 90, 23, 14, 37, 233, 84, 237, 45, 23, 14, 233, 80, 233, - 84, 99, 237, 90, 23, 14, 233, 80, 233, 84, 99, 237, 45, 23, 14, 233, 80, - 233, 84, 42, 237, 90, 23, 14, 233, 80, 233, 84, 42, 237, 45, 23, 14, 233, - 80, 233, 84, 41, 237, 90, 23, 14, 233, 80, 233, 84, 41, 237, 45, 23, 14, - 233, 80, 233, 84, 103, 237, 90, 23, 14, 233, 80, 233, 84, 103, 237, 45, - 23, 14, 233, 80, 233, 84, 99, 41, 237, 90, 23, 14, 233, 80, 233, 84, 99, - 41, 237, 45, 23, 14, 247, 176, 233, 84, 237, 90, 23, 14, 247, 176, 233, - 84, 237, 45, 23, 14, 227, 154, 233, 84, 103, 237, 90, 23, 14, 227, 154, - 233, 84, 103, 237, 45, 23, 14, 229, 169, 231, 226, 23, 14, 252, 79, 231, - 226, 23, 14, 233, 84, 237, 45, 23, 14, 251, 78, 231, 226, 23, 14, 235, - 159, 233, 84, 237, 90, 23, 14, 235, 159, 233, 84, 237, 45, 23, 14, 237, - 46, 23, 14, 242, 24, 240, 186, 23, 14, 132, 240, 186, 23, 14, 235, 53, - 240, 186, 23, 14, 237, 112, 240, 186, 23, 14, 232, 6, 240, 186, 23, 14, - 227, 211, 240, 186, 23, 14, 228, 218, 240, 186, 23, 14, 168, 235, 56, - 227, 212, 240, 186, 23, 14, 36, 240, 214, 23, 14, 36, 229, 150, 240, 214, - 23, 14, 36, 230, 214, 23, 14, 36, 230, 215, 23, 14, 36, 230, 216, 23, 14, - 233, 164, 230, 214, 23, 14, 233, 164, 230, 215, 23, 14, 233, 164, 230, - 216, 23, 14, 36, 228, 226, 246, 164, 23, 14, 36, 236, 79, 23, 14, 36, - 236, 80, 23, 14, 36, 236, 81, 23, 14, 36, 236, 82, 23, 14, 36, 236, 83, - 23, 14, 240, 205, 241, 99, 23, 14, 252, 255, 241, 99, 23, 14, 240, 205, - 247, 57, 23, 14, 252, 255, 247, 57, 23, 14, 240, 205, 241, 246, 23, 14, - 252, 255, 241, 246, 23, 14, 240, 205, 235, 200, 23, 14, 252, 255, 235, - 200, 23, 14, 36, 235, 24, 23, 14, 36, 233, 28, 23, 14, 36, 237, 0, 23, - 14, 36, 227, 179, 23, 14, 36, 234, 151, 23, 14, 36, 223, 49, 23, 14, 36, - 223, 58, 23, 14, 36, 239, 90, 23, 14, 230, 174, 253, 19, 23, 14, 230, - 174, 240, 152, 23, 14, 36, 243, 76, 23, 14, 36, 251, 183, 23, 14, 36, - 243, 107, 23, 14, 36, 240, 5, 23, 14, 36, 242, 200, 23, 14, 36, 47, 235, - 142, 23, 14, 36, 237, 49, 235, 142, 23, 14, 229, 56, 23, 14, 236, 245, - 23, 14, 254, 193, 23, 14, 239, 197, 23, 14, 239, 106, 23, 14, 238, 224, - 23, 14, 230, 241, 23, 14, 228, 236, 23, 14, 241, 145, 248, 116, 237, 84, - 23, 14, 241, 145, 248, 116, 254, 252, 237, 84, 23, 14, 254, 161, 23, 14, - 242, 13, 23, 14, 233, 70, 242, 13, 23, 14, 248, 185, 237, 84, 23, 14, - 248, 185, 253, 19, 23, 14, 233, 103, 233, 35, 23, 14, 233, 103, 233, 36, - 23, 14, 233, 103, 233, 37, 23, 14, 233, 103, 233, 38, 23, 14, 233, 103, - 233, 39, 23, 14, 233, 103, 233, 40, 23, 14, 233, 103, 233, 41, 23, 14, - 233, 103, 233, 42, 23, 14, 233, 103, 233, 43, 23, 14, 233, 103, 231, 146, - 23, 14, 233, 103, 231, 147, 23, 14, 229, 22, 23, 14, 229, 41, 23, 14, - 252, 255, 106, 236, 241, 23, 14, 237, 177, 237, 84, 23, 14, 36, 103, 247, - 68, 23, 14, 36, 99, 247, 68, 23, 14, 36, 232, 202, 23, 14, 36, 251, 229, - 231, 121, 23, 14, 241, 60, 76, 23, 14, 241, 60, 99, 76, 23, 14, 132, 241, - 60, 76, 23, 14, 232, 25, 253, 19, 23, 14, 232, 25, 240, 152, 23, 14, 2, - 229, 19, 23, 14, 243, 27, 23, 14, 249, 178, 247, 241, 23, 14, 236, 150, - 23, 14, 238, 22, 23, 14, 236, 15, 23, 14, 230, 169, 237, 90, 23, 14, 230, - 169, 237, 45, 23, 14, 236, 157, 23, 14, 238, 25, 237, 45, 23, 14, 230, - 170, 237, 90, 23, 14, 230, 170, 237, 45, 23, 14, 248, 41, 237, 90, 23, - 14, 248, 41, 237, 45, 23, 14, 241, 184, 233, 227, 240, 148, 23, 14, 241, - 184, 230, 155, 240, 148, 23, 14, 238, 131, 240, 148, 23, 14, 230, 169, - 240, 148, 23, 14, 238, 25, 240, 148, 23, 14, 230, 170, 240, 148, 23, 14, - 237, 121, 232, 3, 253, 86, 230, 139, 232, 34, 23, 14, 237, 121, 232, 3, - 253, 86, 230, 139, 229, 199, 23, 14, 237, 121, 232, 3, 253, 86, 230, 139, - 233, 227, 227, 201, 23, 14, 237, 121, 229, 176, 253, 86, 230, 139, 232, - 34, 23, 14, 237, 121, 229, 176, 253, 86, 230, 139, 229, 199, 23, 14, 237, - 121, 229, 176, 253, 86, 230, 139, 230, 155, 227, 201, 23, 14, 237, 121, - 229, 176, 253, 86, 230, 139, 230, 155, 227, 228, 23, 14, 237, 121, 229, - 176, 253, 86, 230, 139, 230, 155, 227, 229, 23, 14, 238, 164, 23, 14, - 232, 26, 255, 62, 240, 220, 23, 14, 232, 26, 255, 72, 240, 220, 23, 14, - 37, 254, 185, 23, 14, 240, 77, 23, 14, 234, 194, 23, 14, 236, 32, 23, 14, - 231, 137, 23, 14, 232, 98, 23, 14, 233, 53, 23, 14, 231, 123, 23, 14, - 232, 253, 235, 172, 23, 14, 233, 19, 235, 172, 23, 14, 234, 250, 231, - 135, 23, 14, 254, 128, 230, 114, 19, 240, 136, 150, 232, 48, 19, 240, - 136, 150, 232, 49, 19, 240, 136, 150, 233, 46, 19, 240, 136, 150, 232, - 50, 19, 240, 136, 150, 232, 51, 19, 240, 136, 150, 233, 47, 19, 240, 136, - 150, 232, 52, 19, 240, 136, 150, 232, 53, 19, 240, 136, 150, 233, 48, 19, - 240, 136, 150, 231, 151, 19, 240, 136, 150, 230, 198, 19, 240, 136, 150, - 230, 199, 19, 240, 136, 150, 230, 200, 19, 240, 136, 150, 230, 201, 19, - 240, 136, 150, 231, 152, 19, 240, 136, 150, 231, 153, 19, 240, 136, 150, - 230, 202, 19, 240, 136, 150, 230, 203, 19, 240, 136, 150, 230, 204, 19, - 240, 136, 150, 231, 154, 19, 240, 136, 150, 231, 155, 19, 240, 136, 150, - 231, 156, 19, 240, 136, 150, 230, 205, 19, 240, 136, 150, 230, 206, 19, - 240, 136, 150, 230, 207, 19, 240, 136, 150, 230, 208, 19, 240, 136, 150, - 230, 209, 19, 240, 136, 150, 230, 210, 19, 240, 136, 150, 230, 211, 19, - 228, 176, 150, 232, 48, 19, 228, 176, 150, 232, 49, 19, 228, 176, 150, - 232, 50, 19, 228, 176, 150, 232, 51, 19, 228, 176, 150, 232, 52, 19, 228, - 176, 150, 232, 53, 19, 228, 176, 150, 230, 198, 19, 228, 176, 150, 230, - 199, 19, 228, 176, 150, 230, 200, 19, 228, 176, 150, 230, 201, 19, 228, - 176, 150, 230, 202, 19, 228, 176, 150, 230, 203, 19, 228, 176, 150, 230, - 204, 19, 228, 176, 150, 230, 205, 19, 228, 176, 150, 230, 206, 19, 228, - 176, 150, 231, 157, 19, 228, 176, 150, 231, 158, 19, 228, 176, 150, 231, - 159, 19, 228, 176, 150, 231, 160, 19, 228, 176, 150, 231, 161, 19, 228, - 176, 150, 231, 162, 19, 228, 176, 150, 231, 163, 19, 228, 176, 150, 231, - 164, 19, 228, 176, 150, 231, 165, 19, 228, 176, 150, 231, 166, 19, 228, - 176, 150, 231, 167, 19, 228, 176, 150, 231, 168, 19, 228, 176, 150, 231, - 169, 19, 228, 176, 150, 231, 170, 19, 228, 176, 150, 231, 171, 19, 228, - 176, 150, 231, 172, 19, 228, 176, 150, 231, 173, 19, 228, 176, 150, 230, - 207, 19, 228, 176, 150, 230, 208, 19, 228, 176, 150, 230, 209, 19, 228, - 176, 150, 230, 210, 19, 228, 176, 150, 230, 211, 36, 19, 23, 233, 247, - 36, 19, 23, 230, 213, 36, 19, 23, 230, 193, 19, 23, 236, 132, 233, 115, - 32, 237, 99, 237, 111, 32, 234, 121, 237, 99, 237, 111, 32, 243, 236, - 237, 99, 237, 111, 32, 235, 168, 235, 123, 237, 111, 32, 235, 168, 239, - 28, 237, 111, 32, 237, 99, 142, 32, 235, 111, 142, 32, 246, 162, 235, 20, - 142, 32, 239, 115, 142, 32, 234, 14, 142, 32, 235, 182, 237, 216, 142, - 32, 228, 231, 142, 32, 235, 254, 142, 32, 229, 187, 142, 32, 232, 88, - 247, 186, 142, 32, 227, 225, 145, 229, 251, 142, 32, 229, 252, 142, 32, - 228, 174, 142, 32, 232, 27, 142, 32, 229, 47, 142, 32, 238, 40, 142, 32, - 234, 35, 142, 32, 235, 177, 240, 217, 142, 32, 233, 249, 142, 32, 230, - 184, 142, 32, 233, 253, 142, 32, 234, 206, 142, 32, 230, 95, 142, 32, - 243, 92, 142, 32, 250, 140, 142, 32, 229, 241, 142, 32, 231, 64, 142, 32, - 236, 62, 142, 32, 236, 24, 142, 32, 227, 224, 142, 32, 18, 230, 96, 142, - 32, 234, 180, 142, 32, 236, 131, 142, 32, 230, 235, 142, 32, 234, 139, - 142, 32, 231, 72, 142, 32, 233, 33, 142, 32, 236, 195, 142, 32, 232, 195, - 142, 32, 231, 134, 142, 32, 254, 89, 145, 239, 117, 142, 32, 232, 43, - 142, 32, 243, 151, 180, 241, 191, 142, 32, 230, 55, 142, 32, 240, 23, - 142, 32, 231, 76, 142, 32, 229, 17, 142, 32, 234, 188, 142, 32, 236, 201, - 142, 32, 236, 84, 142, 32, 235, 4, 145, 235, 10, 142, 32, 230, 238, 142, - 32, 233, 218, 142, 32, 232, 182, 142, 32, 240, 67, 142, 32, 227, 227, - 142, 32, 237, 58, 238, 26, 142, 32, 229, 21, 142, 32, 232, 24, 253, 79, - 142, 32, 234, 154, 142, 32, 227, 214, 142, 32, 227, 163, 142, 32, 238, - 191, 142, 32, 238, 81, 142, 32, 234, 222, 142, 32, 239, 42, 142, 32, 230, - 244, 142, 32, 230, 243, 142, 32, 234, 55, 142, 32, 230, 58, 142, 32, 231, - 140, 142, 32, 233, 30, 142, 32, 232, 201, 142, 32, 229, 183, 142, 32, - 234, 32, 142, 32, 234, 100, 142, 32, 228, 223, 142, 32, 229, 239, 142, - 32, 254, 223, 252, 230, 240, 75, 142, 32, 227, 226, 142, 32, 231, 96, - 142, 32, 231, 70, 233, 85, 253, 2, 246, 229, 21, 118, 233, 85, 253, 2, - 246, 229, 21, 113, 233, 85, 253, 2, 246, 229, 21, 166, 233, 85, 253, 2, - 246, 229, 21, 158, 233, 85, 253, 2, 246, 229, 21, 173, 233, 85, 253, 2, - 246, 229, 21, 183, 233, 85, 253, 2, 246, 229, 21, 194, 233, 85, 253, 2, - 246, 229, 21, 187, 233, 85, 253, 2, 246, 229, 21, 192, 233, 85, 253, 2, - 246, 238, 21, 118, 233, 85, 253, 2, 246, 238, 21, 113, 233, 85, 253, 2, - 246, 238, 21, 166, 233, 85, 253, 2, 246, 238, 21, 158, 233, 85, 253, 2, - 246, 238, 21, 173, 233, 85, 253, 2, 246, 238, 21, 183, 233, 85, 253, 2, - 246, 238, 21, 194, 233, 85, 253, 2, 246, 238, 21, 187, 233, 85, 253, 2, - 246, 238, 21, 192, 12, 18, 6, 57, 12, 18, 6, 254, 185, 12, 18, 6, 254, - 194, 12, 18, 6, 222, 222, 12, 18, 6, 72, 12, 18, 6, 254, 191, 12, 18, 6, - 214, 12, 18, 6, 212, 12, 18, 6, 74, 12, 18, 6, 254, 192, 12, 18, 6, 254, - 186, 12, 18, 6, 149, 12, 18, 6, 185, 12, 18, 6, 199, 12, 18, 6, 73, 12, - 18, 6, 254, 187, 12, 18, 6, 254, 196, 12, 18, 6, 146, 12, 18, 6, 193, 12, - 18, 6, 254, 183, 12, 18, 6, 66, 12, 18, 6, 196, 12, 18, 6, 254, 195, 12, - 18, 6, 254, 184, 12, 18, 6, 254, 190, 12, 18, 6, 254, 193, 12, 18, 3, 57, - 12, 18, 3, 254, 185, 12, 18, 3, 254, 194, 12, 18, 3, 222, 222, 12, 18, 3, - 72, 12, 18, 3, 254, 191, 12, 18, 3, 214, 12, 18, 3, 212, 12, 18, 3, 74, - 12, 18, 3, 254, 192, 12, 18, 3, 254, 186, 12, 18, 3, 149, 12, 18, 3, 185, - 12, 18, 3, 199, 12, 18, 3, 73, 12, 18, 3, 254, 187, 12, 18, 3, 254, 196, - 12, 18, 3, 146, 12, 18, 3, 193, 12, 18, 3, 254, 183, 12, 18, 3, 66, 12, - 18, 3, 196, 12, 18, 3, 254, 195, 12, 18, 3, 254, 184, 12, 18, 3, 254, - 190, 12, 18, 3, 254, 193, 12, 27, 6, 57, 12, 27, 6, 254, 185, 12, 27, 6, - 254, 194, 12, 27, 6, 222, 222, 12, 27, 6, 72, 12, 27, 6, 254, 191, 12, - 27, 6, 214, 12, 27, 6, 212, 12, 27, 6, 74, 12, 27, 6, 254, 192, 12, 27, - 6, 254, 186, 12, 27, 6, 149, 12, 27, 6, 185, 12, 27, 6, 199, 12, 27, 6, - 73, 12, 27, 6, 254, 187, 12, 27, 6, 254, 196, 12, 27, 6, 146, 12, 27, 6, - 193, 12, 27, 6, 254, 183, 12, 27, 6, 66, 12, 27, 6, 196, 12, 27, 6, 254, - 195, 12, 27, 6, 254, 184, 12, 27, 6, 254, 190, 12, 27, 6, 254, 193, 12, - 27, 3, 57, 12, 27, 3, 254, 185, 12, 27, 3, 254, 194, 12, 27, 3, 222, 222, - 12, 27, 3, 72, 12, 27, 3, 254, 191, 12, 27, 3, 214, 12, 27, 3, 74, 12, - 27, 3, 254, 192, 12, 27, 3, 254, 186, 12, 27, 3, 149, 12, 27, 3, 185, 12, - 27, 3, 199, 12, 27, 3, 73, 12, 27, 3, 254, 187, 12, 27, 3, 254, 196, 12, - 27, 3, 146, 12, 27, 3, 193, 12, 27, 3, 254, 183, 12, 27, 3, 66, 12, 27, - 3, 196, 12, 27, 3, 254, 195, 12, 27, 3, 254, 184, 12, 27, 3, 254, 190, - 12, 27, 3, 254, 193, 12, 18, 27, 6, 57, 12, 18, 27, 6, 254, 185, 12, 18, - 27, 6, 254, 194, 12, 18, 27, 6, 222, 222, 12, 18, 27, 6, 72, 12, 18, 27, - 6, 254, 191, 12, 18, 27, 6, 214, 12, 18, 27, 6, 212, 12, 18, 27, 6, 74, - 12, 18, 27, 6, 254, 192, 12, 18, 27, 6, 254, 186, 12, 18, 27, 6, 149, 12, - 18, 27, 6, 185, 12, 18, 27, 6, 199, 12, 18, 27, 6, 73, 12, 18, 27, 6, - 254, 187, 12, 18, 27, 6, 254, 196, 12, 18, 27, 6, 146, 12, 18, 27, 6, - 193, 12, 18, 27, 6, 254, 183, 12, 18, 27, 6, 66, 12, 18, 27, 6, 196, 12, - 18, 27, 6, 254, 195, 12, 18, 27, 6, 254, 184, 12, 18, 27, 6, 254, 190, - 12, 18, 27, 6, 254, 193, 12, 18, 27, 3, 57, 12, 18, 27, 3, 254, 185, 12, - 18, 27, 3, 254, 194, 12, 18, 27, 3, 222, 222, 12, 18, 27, 3, 72, 12, 18, - 27, 3, 254, 191, 12, 18, 27, 3, 214, 12, 18, 27, 3, 212, 12, 18, 27, 3, - 74, 12, 18, 27, 3, 254, 192, 12, 18, 27, 3, 254, 186, 12, 18, 27, 3, 149, - 12, 18, 27, 3, 185, 12, 18, 27, 3, 199, 12, 18, 27, 3, 73, 12, 18, 27, 3, - 254, 187, 12, 18, 27, 3, 254, 196, 12, 18, 27, 3, 146, 12, 18, 27, 3, - 193, 12, 18, 27, 3, 254, 183, 12, 18, 27, 3, 66, 12, 18, 27, 3, 196, 12, - 18, 27, 3, 254, 195, 12, 18, 27, 3, 254, 184, 12, 18, 27, 3, 254, 190, - 12, 18, 27, 3, 254, 193, 12, 95, 6, 57, 12, 95, 6, 254, 194, 12, 95, 6, - 222, 222, 12, 95, 6, 214, 12, 95, 6, 254, 192, 12, 95, 6, 254, 186, 12, - 95, 6, 199, 12, 95, 6, 73, 12, 95, 6, 254, 187, 12, 95, 6, 254, 196, 12, - 95, 6, 193, 12, 95, 6, 254, 183, 12, 95, 6, 66, 12, 95, 6, 196, 12, 95, - 6, 254, 195, 12, 95, 6, 254, 184, 12, 95, 6, 254, 190, 12, 95, 6, 254, - 193, 12, 95, 3, 57, 12, 95, 3, 254, 185, 12, 95, 3, 254, 194, 12, 95, 3, - 222, 222, 12, 95, 3, 254, 191, 12, 95, 3, 212, 12, 95, 3, 74, 12, 95, 3, - 254, 192, 12, 95, 3, 254, 186, 12, 95, 3, 149, 12, 95, 3, 185, 12, 95, 3, - 199, 12, 95, 3, 254, 187, 12, 95, 3, 254, 196, 12, 95, 3, 146, 12, 95, 3, - 193, 12, 95, 3, 254, 183, 12, 95, 3, 66, 12, 95, 3, 196, 12, 95, 3, 254, - 195, 12, 95, 3, 254, 184, 12, 95, 3, 254, 190, 12, 95, 3, 254, 193, 12, - 18, 95, 6, 57, 12, 18, 95, 6, 254, 185, 12, 18, 95, 6, 254, 194, 12, 18, - 95, 6, 222, 222, 12, 18, 95, 6, 72, 12, 18, 95, 6, 254, 191, 12, 18, 95, - 6, 214, 12, 18, 95, 6, 212, 12, 18, 95, 6, 74, 12, 18, 95, 6, 254, 192, - 12, 18, 95, 6, 254, 186, 12, 18, 95, 6, 149, 12, 18, 95, 6, 185, 12, 18, - 95, 6, 199, 12, 18, 95, 6, 73, 12, 18, 95, 6, 254, 187, 12, 18, 95, 6, - 254, 196, 12, 18, 95, 6, 146, 12, 18, 95, 6, 193, 12, 18, 95, 6, 254, - 183, 12, 18, 95, 6, 66, 12, 18, 95, 6, 196, 12, 18, 95, 6, 254, 195, 12, - 18, 95, 6, 254, 184, 12, 18, 95, 6, 254, 190, 12, 18, 95, 6, 254, 193, - 12, 18, 95, 3, 57, 12, 18, 95, 3, 254, 185, 12, 18, 95, 3, 254, 194, 12, - 18, 95, 3, 222, 222, 12, 18, 95, 3, 72, 12, 18, 95, 3, 254, 191, 12, 18, - 95, 3, 214, 12, 18, 95, 3, 212, 12, 18, 95, 3, 74, 12, 18, 95, 3, 254, - 192, 12, 18, 95, 3, 254, 186, 12, 18, 95, 3, 149, 12, 18, 95, 3, 185, 12, - 18, 95, 3, 199, 12, 18, 95, 3, 73, 12, 18, 95, 3, 254, 187, 12, 18, 95, - 3, 254, 196, 12, 18, 95, 3, 146, 12, 18, 95, 3, 193, 12, 18, 95, 3, 254, - 183, 12, 18, 95, 3, 66, 12, 18, 95, 3, 196, 12, 18, 95, 3, 254, 195, 12, - 18, 95, 3, 254, 184, 12, 18, 95, 3, 254, 190, 12, 18, 95, 3, 254, 193, - 12, 110, 6, 57, 12, 110, 6, 254, 185, 12, 110, 6, 222, 222, 12, 110, 6, - 72, 12, 110, 6, 254, 191, 12, 110, 6, 214, 12, 110, 6, 254, 192, 12, 110, - 6, 254, 186, 12, 110, 6, 149, 12, 110, 6, 185, 12, 110, 6, 199, 12, 110, - 6, 73, 12, 110, 6, 254, 187, 12, 110, 6, 254, 196, 12, 110, 6, 193, 12, - 110, 6, 254, 183, 12, 110, 6, 66, 12, 110, 6, 196, 12, 110, 6, 254, 195, - 12, 110, 6, 254, 184, 12, 110, 6, 254, 190, 12, 110, 3, 57, 12, 110, 3, - 254, 185, 12, 110, 3, 254, 194, 12, 110, 3, 222, 222, 12, 110, 3, 72, 12, - 110, 3, 254, 191, 12, 110, 3, 214, 12, 110, 3, 212, 12, 110, 3, 74, 12, - 110, 3, 254, 192, 12, 110, 3, 254, 186, 12, 110, 3, 149, 12, 110, 3, 185, - 12, 110, 3, 199, 12, 110, 3, 73, 12, 110, 3, 254, 187, 12, 110, 3, 254, - 196, 12, 110, 3, 146, 12, 110, 3, 193, 12, 110, 3, 254, 183, 12, 110, 3, - 66, 12, 110, 3, 196, 12, 110, 3, 254, 195, 12, 110, 3, 254, 184, 12, 110, - 3, 254, 190, 12, 110, 3, 254, 193, 12, 159, 6, 57, 12, 159, 6, 254, 185, - 12, 159, 6, 222, 222, 12, 159, 6, 72, 12, 159, 6, 254, 191, 12, 159, 6, - 214, 12, 159, 6, 74, 12, 159, 6, 254, 192, 12, 159, 6, 254, 186, 12, 159, - 6, 149, 12, 159, 6, 185, 12, 159, 6, 73, 12, 159, 6, 193, 12, 159, 6, - 254, 183, 12, 159, 6, 66, 12, 159, 6, 196, 12, 159, 6, 254, 195, 12, 159, - 6, 254, 184, 12, 159, 6, 254, 190, 12, 159, 3, 57, 12, 159, 3, 254, 185, - 12, 159, 3, 254, 194, 12, 159, 3, 222, 222, 12, 159, 3, 72, 12, 159, 3, - 254, 191, 12, 159, 3, 214, 12, 159, 3, 212, 12, 159, 3, 74, 12, 159, 3, - 254, 192, 12, 159, 3, 254, 186, 12, 159, 3, 149, 12, 159, 3, 185, 12, - 159, 3, 199, 12, 159, 3, 73, 12, 159, 3, 254, 187, 12, 159, 3, 254, 196, - 12, 159, 3, 146, 12, 159, 3, 193, 12, 159, 3, 254, 183, 12, 159, 3, 66, - 12, 159, 3, 196, 12, 159, 3, 254, 195, 12, 159, 3, 254, 184, 12, 159, 3, - 254, 190, 12, 159, 3, 254, 193, 12, 18, 110, 6, 57, 12, 18, 110, 6, 254, - 185, 12, 18, 110, 6, 254, 194, 12, 18, 110, 6, 222, 222, 12, 18, 110, 6, - 72, 12, 18, 110, 6, 254, 191, 12, 18, 110, 6, 214, 12, 18, 110, 6, 212, - 12, 18, 110, 6, 74, 12, 18, 110, 6, 254, 192, 12, 18, 110, 6, 254, 186, - 12, 18, 110, 6, 149, 12, 18, 110, 6, 185, 12, 18, 110, 6, 199, 12, 18, - 110, 6, 73, 12, 18, 110, 6, 254, 187, 12, 18, 110, 6, 254, 196, 12, 18, - 110, 6, 146, 12, 18, 110, 6, 193, 12, 18, 110, 6, 254, 183, 12, 18, 110, - 6, 66, 12, 18, 110, 6, 196, 12, 18, 110, 6, 254, 195, 12, 18, 110, 6, - 254, 184, 12, 18, 110, 6, 254, 190, 12, 18, 110, 6, 254, 193, 12, 18, - 110, 3, 57, 12, 18, 110, 3, 254, 185, 12, 18, 110, 3, 254, 194, 12, 18, - 110, 3, 222, 222, 12, 18, 110, 3, 72, 12, 18, 110, 3, 254, 191, 12, 18, - 110, 3, 214, 12, 18, 110, 3, 212, 12, 18, 110, 3, 74, 12, 18, 110, 3, - 254, 192, 12, 18, 110, 3, 254, 186, 12, 18, 110, 3, 149, 12, 18, 110, 3, - 185, 12, 18, 110, 3, 199, 12, 18, 110, 3, 73, 12, 18, 110, 3, 254, 187, - 12, 18, 110, 3, 254, 196, 12, 18, 110, 3, 146, 12, 18, 110, 3, 193, 12, - 18, 110, 3, 254, 183, 12, 18, 110, 3, 66, 12, 18, 110, 3, 196, 12, 18, - 110, 3, 254, 195, 12, 18, 110, 3, 254, 184, 12, 18, 110, 3, 254, 190, 12, - 18, 110, 3, 254, 193, 12, 30, 6, 57, 12, 30, 6, 254, 185, 12, 30, 6, 254, - 194, 12, 30, 6, 222, 222, 12, 30, 6, 72, 12, 30, 6, 254, 191, 12, 30, 6, - 214, 12, 30, 6, 212, 12, 30, 6, 74, 12, 30, 6, 254, 192, 12, 30, 6, 254, - 186, 12, 30, 6, 149, 12, 30, 6, 185, 12, 30, 6, 199, 12, 30, 6, 73, 12, - 30, 6, 254, 187, 12, 30, 6, 254, 196, 12, 30, 6, 146, 12, 30, 6, 193, 12, - 30, 6, 254, 183, 12, 30, 6, 66, 12, 30, 6, 196, 12, 30, 6, 254, 195, 12, - 30, 6, 254, 184, 12, 30, 6, 254, 190, 12, 30, 6, 254, 193, 12, 30, 3, 57, - 12, 30, 3, 254, 185, 12, 30, 3, 254, 194, 12, 30, 3, 222, 222, 12, 30, 3, - 72, 12, 30, 3, 254, 191, 12, 30, 3, 214, 12, 30, 3, 212, 12, 30, 3, 74, - 12, 30, 3, 254, 192, 12, 30, 3, 254, 186, 12, 30, 3, 149, 12, 30, 3, 185, - 12, 30, 3, 199, 12, 30, 3, 73, 12, 30, 3, 254, 187, 12, 30, 3, 254, 196, - 12, 30, 3, 146, 12, 30, 3, 193, 12, 30, 3, 254, 183, 12, 30, 3, 66, 12, - 30, 3, 196, 12, 30, 3, 254, 195, 12, 30, 3, 254, 184, 12, 30, 3, 254, - 190, 12, 30, 3, 254, 193, 12, 30, 18, 6, 57, 12, 30, 18, 6, 254, 185, 12, - 30, 18, 6, 254, 194, 12, 30, 18, 6, 222, 222, 12, 30, 18, 6, 72, 12, 30, - 18, 6, 254, 191, 12, 30, 18, 6, 214, 12, 30, 18, 6, 212, 12, 30, 18, 6, - 74, 12, 30, 18, 6, 254, 192, 12, 30, 18, 6, 254, 186, 12, 30, 18, 6, 149, - 12, 30, 18, 6, 185, 12, 30, 18, 6, 199, 12, 30, 18, 6, 73, 12, 30, 18, 6, - 254, 187, 12, 30, 18, 6, 254, 196, 12, 30, 18, 6, 146, 12, 30, 18, 6, - 193, 12, 30, 18, 6, 254, 183, 12, 30, 18, 6, 66, 12, 30, 18, 6, 196, 12, - 30, 18, 6, 254, 195, 12, 30, 18, 6, 254, 184, 12, 30, 18, 6, 254, 190, - 12, 30, 18, 6, 254, 193, 12, 30, 18, 3, 57, 12, 30, 18, 3, 254, 185, 12, - 30, 18, 3, 254, 194, 12, 30, 18, 3, 222, 222, 12, 30, 18, 3, 72, 12, 30, - 18, 3, 254, 191, 12, 30, 18, 3, 214, 12, 30, 18, 3, 212, 12, 30, 18, 3, - 74, 12, 30, 18, 3, 254, 192, 12, 30, 18, 3, 254, 186, 12, 30, 18, 3, 149, - 12, 30, 18, 3, 185, 12, 30, 18, 3, 199, 12, 30, 18, 3, 73, 12, 30, 18, 3, - 254, 187, 12, 30, 18, 3, 254, 196, 12, 30, 18, 3, 146, 12, 30, 18, 3, - 193, 12, 30, 18, 3, 254, 183, 12, 30, 18, 3, 66, 12, 30, 18, 3, 196, 12, - 30, 18, 3, 254, 195, 12, 30, 18, 3, 254, 184, 12, 30, 18, 3, 254, 190, - 12, 30, 18, 3, 254, 193, 12, 30, 27, 6, 57, 12, 30, 27, 6, 254, 185, 12, - 30, 27, 6, 254, 194, 12, 30, 27, 6, 222, 222, 12, 30, 27, 6, 72, 12, 30, - 27, 6, 254, 191, 12, 30, 27, 6, 214, 12, 30, 27, 6, 212, 12, 30, 27, 6, - 74, 12, 30, 27, 6, 254, 192, 12, 30, 27, 6, 254, 186, 12, 30, 27, 6, 149, - 12, 30, 27, 6, 185, 12, 30, 27, 6, 199, 12, 30, 27, 6, 73, 12, 30, 27, 6, - 254, 187, 12, 30, 27, 6, 254, 196, 12, 30, 27, 6, 146, 12, 30, 27, 6, - 193, 12, 30, 27, 6, 254, 183, 12, 30, 27, 6, 66, 12, 30, 27, 6, 196, 12, - 30, 27, 6, 254, 195, 12, 30, 27, 6, 254, 184, 12, 30, 27, 6, 254, 190, - 12, 30, 27, 6, 254, 193, 12, 30, 27, 3, 57, 12, 30, 27, 3, 254, 185, 12, - 30, 27, 3, 254, 194, 12, 30, 27, 3, 222, 222, 12, 30, 27, 3, 72, 12, 30, - 27, 3, 254, 191, 12, 30, 27, 3, 214, 12, 30, 27, 3, 212, 12, 30, 27, 3, - 74, 12, 30, 27, 3, 254, 192, 12, 30, 27, 3, 254, 186, 12, 30, 27, 3, 149, - 12, 30, 27, 3, 185, 12, 30, 27, 3, 199, 12, 30, 27, 3, 73, 12, 30, 27, 3, - 254, 187, 12, 30, 27, 3, 254, 196, 12, 30, 27, 3, 146, 12, 30, 27, 3, - 193, 12, 30, 27, 3, 254, 183, 12, 30, 27, 3, 66, 12, 30, 27, 3, 196, 12, - 30, 27, 3, 254, 195, 12, 30, 27, 3, 254, 184, 12, 30, 27, 3, 254, 190, - 12, 30, 27, 3, 254, 193, 12, 30, 18, 27, 6, 57, 12, 30, 18, 27, 6, 254, - 185, 12, 30, 18, 27, 6, 254, 194, 12, 30, 18, 27, 6, 222, 222, 12, 30, - 18, 27, 6, 72, 12, 30, 18, 27, 6, 254, 191, 12, 30, 18, 27, 6, 214, 12, - 30, 18, 27, 6, 212, 12, 30, 18, 27, 6, 74, 12, 30, 18, 27, 6, 254, 192, - 12, 30, 18, 27, 6, 254, 186, 12, 30, 18, 27, 6, 149, 12, 30, 18, 27, 6, - 185, 12, 30, 18, 27, 6, 199, 12, 30, 18, 27, 6, 73, 12, 30, 18, 27, 6, - 254, 187, 12, 30, 18, 27, 6, 254, 196, 12, 30, 18, 27, 6, 146, 12, 30, - 18, 27, 6, 193, 12, 30, 18, 27, 6, 254, 183, 12, 30, 18, 27, 6, 66, 12, - 30, 18, 27, 6, 196, 12, 30, 18, 27, 6, 254, 195, 12, 30, 18, 27, 6, 254, - 184, 12, 30, 18, 27, 6, 254, 190, 12, 30, 18, 27, 6, 254, 193, 12, 30, - 18, 27, 3, 57, 12, 30, 18, 27, 3, 254, 185, 12, 30, 18, 27, 3, 254, 194, - 12, 30, 18, 27, 3, 222, 222, 12, 30, 18, 27, 3, 72, 12, 30, 18, 27, 3, - 254, 191, 12, 30, 18, 27, 3, 214, 12, 30, 18, 27, 3, 212, 12, 30, 18, 27, - 3, 74, 12, 30, 18, 27, 3, 254, 192, 12, 30, 18, 27, 3, 254, 186, 12, 30, - 18, 27, 3, 149, 12, 30, 18, 27, 3, 185, 12, 30, 18, 27, 3, 199, 12, 30, - 18, 27, 3, 73, 12, 30, 18, 27, 3, 254, 187, 12, 30, 18, 27, 3, 254, 196, - 12, 30, 18, 27, 3, 146, 12, 30, 18, 27, 3, 193, 12, 30, 18, 27, 3, 254, - 183, 12, 30, 18, 27, 3, 66, 12, 30, 18, 27, 3, 196, 12, 30, 18, 27, 3, - 254, 195, 12, 30, 18, 27, 3, 254, 184, 12, 30, 18, 27, 3, 254, 190, 12, - 30, 18, 27, 3, 254, 193, 12, 189, 6, 57, 12, 189, 6, 254, 185, 12, 189, - 6, 254, 194, 12, 189, 6, 222, 222, 12, 189, 6, 72, 12, 189, 6, 254, 191, - 12, 189, 6, 214, 12, 189, 6, 212, 12, 189, 6, 74, 12, 189, 6, 254, 192, - 12, 189, 6, 254, 186, 12, 189, 6, 149, 12, 189, 6, 185, 12, 189, 6, 199, - 12, 189, 6, 73, 12, 189, 6, 254, 187, 12, 189, 6, 254, 196, 12, 189, 6, - 146, 12, 189, 6, 193, 12, 189, 6, 254, 183, 12, 189, 6, 66, 12, 189, 6, - 196, 12, 189, 6, 254, 195, 12, 189, 6, 254, 184, 12, 189, 6, 254, 190, - 12, 189, 6, 254, 193, 12, 189, 3, 57, 12, 189, 3, 254, 185, 12, 189, 3, - 254, 194, 12, 189, 3, 222, 222, 12, 189, 3, 72, 12, 189, 3, 254, 191, 12, - 189, 3, 214, 12, 189, 3, 212, 12, 189, 3, 74, 12, 189, 3, 254, 192, 12, - 189, 3, 254, 186, 12, 189, 3, 149, 12, 189, 3, 185, 12, 189, 3, 199, 12, - 189, 3, 73, 12, 189, 3, 254, 187, 12, 189, 3, 254, 196, 12, 189, 3, 146, - 12, 189, 3, 193, 12, 189, 3, 254, 183, 12, 189, 3, 66, 12, 189, 3, 196, - 12, 189, 3, 254, 195, 12, 189, 3, 254, 184, 12, 189, 3, 254, 190, 12, - 189, 3, 254, 193, 12, 27, 3, 235, 46, 74, 12, 27, 3, 235, 46, 254, 192, - 12, 18, 6, 237, 71, 12, 18, 6, 240, 160, 12, 18, 6, 237, 61, 12, 18, 6, - 237, 75, 12, 18, 6, 233, 96, 12, 18, 6, 240, 173, 12, 18, 6, 246, 219, - 12, 18, 6, 237, 89, 12, 18, 6, 240, 146, 12, 18, 6, 237, 91, 12, 18, 6, - 237, 82, 12, 18, 6, 252, 229, 12, 18, 6, 252, 227, 12, 18, 6, 253, 38, - 12, 18, 6, 233, 100, 12, 18, 6, 252, 223, 12, 18, 6, 246, 209, 12, 18, 6, - 240, 178, 98, 12, 18, 6, 237, 73, 12, 18, 6, 246, 212, 12, 18, 6, 233, - 92, 12, 18, 6, 246, 198, 12, 18, 6, 246, 200, 12, 18, 6, 246, 204, 12, - 18, 6, 237, 68, 12, 18, 237, 138, 12, 18, 3, 237, 71, 12, 18, 3, 240, - 160, 12, 18, 3, 237, 61, 12, 18, 3, 237, 75, 12, 18, 3, 233, 96, 12, 18, - 3, 240, 173, 12, 18, 3, 246, 219, 12, 18, 3, 237, 89, 12, 18, 3, 240, - 146, 12, 18, 3, 237, 91, 12, 18, 3, 237, 82, 12, 18, 3, 252, 229, 12, 18, - 3, 252, 227, 12, 18, 3, 253, 38, 12, 18, 3, 233, 100, 12, 18, 3, 252, - 223, 12, 18, 3, 246, 209, 12, 18, 3, 35, 237, 73, 12, 18, 3, 237, 73, 12, - 18, 3, 246, 212, 12, 18, 3, 233, 92, 12, 18, 3, 246, 198, 12, 18, 3, 246, - 200, 12, 18, 3, 246, 204, 12, 18, 3, 237, 68, 12, 18, 235, 79, 227, 188, - 12, 18, 235, 28, 98, 12, 18, 240, 178, 98, 12, 18, 240, 210, 98, 12, 18, - 253, 120, 98, 12, 18, 253, 70, 98, 12, 18, 254, 200, 98, 12, 27, 6, 237, - 71, 12, 27, 6, 240, 160, 12, 27, 6, 237, 61, 12, 27, 6, 237, 75, 12, 27, - 6, 233, 96, 12, 27, 6, 240, 173, 12, 27, 6, 246, 219, 12, 27, 6, 237, 89, - 12, 27, 6, 240, 146, 12, 27, 6, 237, 91, 12, 27, 6, 237, 82, 12, 27, 6, - 252, 229, 12, 27, 6, 252, 227, 12, 27, 6, 253, 38, 12, 27, 6, 233, 100, - 12, 27, 6, 252, 223, 12, 27, 6, 246, 209, 12, 27, 6, 240, 178, 98, 12, - 27, 6, 237, 73, 12, 27, 6, 246, 212, 12, 27, 6, 233, 92, 12, 27, 6, 246, - 198, 12, 27, 6, 246, 200, 12, 27, 6, 246, 204, 12, 27, 6, 237, 68, 12, - 27, 237, 138, 12, 27, 3, 237, 71, 12, 27, 3, 240, 160, 12, 27, 3, 237, - 61, 12, 27, 3, 237, 75, 12, 27, 3, 233, 96, 12, 27, 3, 240, 173, 12, 27, - 3, 246, 219, 12, 27, 3, 237, 89, 12, 27, 3, 240, 146, 12, 27, 3, 237, 91, - 12, 27, 3, 237, 82, 12, 27, 3, 252, 229, 12, 27, 3, 252, 227, 12, 27, 3, - 253, 38, 12, 27, 3, 233, 100, 12, 27, 3, 252, 223, 12, 27, 3, 246, 209, - 12, 27, 3, 35, 237, 73, 12, 27, 3, 237, 73, 12, 27, 3, 246, 212, 12, 27, - 3, 233, 92, 12, 27, 3, 246, 198, 12, 27, 3, 246, 200, 12, 27, 3, 246, - 204, 12, 27, 3, 237, 68, 12, 27, 235, 79, 227, 188, 12, 27, 235, 28, 98, - 12, 27, 240, 178, 98, 12, 27, 240, 210, 98, 12, 27, 253, 120, 98, 12, 27, - 253, 70, 98, 12, 27, 254, 200, 98, 12, 18, 27, 6, 237, 71, 12, 18, 27, 6, - 240, 160, 12, 18, 27, 6, 237, 61, 12, 18, 27, 6, 237, 75, 12, 18, 27, 6, - 233, 96, 12, 18, 27, 6, 240, 173, 12, 18, 27, 6, 246, 219, 12, 18, 27, 6, - 237, 89, 12, 18, 27, 6, 240, 146, 12, 18, 27, 6, 237, 91, 12, 18, 27, 6, - 237, 82, 12, 18, 27, 6, 252, 229, 12, 18, 27, 6, 252, 227, 12, 18, 27, 6, - 253, 38, 12, 18, 27, 6, 233, 100, 12, 18, 27, 6, 252, 223, 12, 18, 27, 6, - 246, 209, 12, 18, 27, 6, 240, 178, 98, 12, 18, 27, 6, 237, 73, 12, 18, - 27, 6, 246, 212, 12, 18, 27, 6, 233, 92, 12, 18, 27, 6, 246, 198, 12, 18, - 27, 6, 246, 200, 12, 18, 27, 6, 246, 204, 12, 18, 27, 6, 237, 68, 12, 18, - 27, 237, 138, 12, 18, 27, 3, 237, 71, 12, 18, 27, 3, 240, 160, 12, 18, - 27, 3, 237, 61, 12, 18, 27, 3, 237, 75, 12, 18, 27, 3, 233, 96, 12, 18, - 27, 3, 240, 173, 12, 18, 27, 3, 246, 219, 12, 18, 27, 3, 237, 89, 12, 18, - 27, 3, 240, 146, 12, 18, 27, 3, 237, 91, 12, 18, 27, 3, 237, 82, 12, 18, - 27, 3, 252, 229, 12, 18, 27, 3, 252, 227, 12, 18, 27, 3, 253, 38, 12, 18, - 27, 3, 233, 100, 12, 18, 27, 3, 252, 223, 12, 18, 27, 3, 246, 209, 12, - 18, 27, 3, 35, 237, 73, 12, 18, 27, 3, 237, 73, 12, 18, 27, 3, 246, 212, - 12, 18, 27, 3, 233, 92, 12, 18, 27, 3, 246, 198, 12, 18, 27, 3, 246, 200, - 12, 18, 27, 3, 246, 204, 12, 18, 27, 3, 237, 68, 12, 18, 27, 235, 79, - 227, 188, 12, 18, 27, 235, 28, 98, 12, 18, 27, 240, 178, 98, 12, 18, 27, - 240, 210, 98, 12, 18, 27, 253, 120, 98, 12, 18, 27, 253, 70, 98, 12, 18, - 27, 254, 200, 98, 12, 30, 18, 6, 237, 71, 12, 30, 18, 6, 240, 160, 12, - 30, 18, 6, 237, 61, 12, 30, 18, 6, 237, 75, 12, 30, 18, 6, 233, 96, 12, - 30, 18, 6, 240, 173, 12, 30, 18, 6, 246, 219, 12, 30, 18, 6, 237, 89, 12, - 30, 18, 6, 240, 146, 12, 30, 18, 6, 237, 91, 12, 30, 18, 6, 237, 82, 12, - 30, 18, 6, 252, 229, 12, 30, 18, 6, 252, 227, 12, 30, 18, 6, 253, 38, 12, - 30, 18, 6, 233, 100, 12, 30, 18, 6, 252, 223, 12, 30, 18, 6, 246, 209, - 12, 30, 18, 6, 240, 178, 98, 12, 30, 18, 6, 237, 73, 12, 30, 18, 6, 246, - 212, 12, 30, 18, 6, 233, 92, 12, 30, 18, 6, 246, 198, 12, 30, 18, 6, 246, - 200, 12, 30, 18, 6, 246, 204, 12, 30, 18, 6, 237, 68, 12, 30, 18, 237, - 138, 12, 30, 18, 3, 237, 71, 12, 30, 18, 3, 240, 160, 12, 30, 18, 3, 237, - 61, 12, 30, 18, 3, 237, 75, 12, 30, 18, 3, 233, 96, 12, 30, 18, 3, 240, - 173, 12, 30, 18, 3, 246, 219, 12, 30, 18, 3, 237, 89, 12, 30, 18, 3, 240, - 146, 12, 30, 18, 3, 237, 91, 12, 30, 18, 3, 237, 82, 12, 30, 18, 3, 252, - 229, 12, 30, 18, 3, 252, 227, 12, 30, 18, 3, 253, 38, 12, 30, 18, 3, 233, - 100, 12, 30, 18, 3, 252, 223, 12, 30, 18, 3, 246, 209, 12, 30, 18, 3, 35, - 237, 73, 12, 30, 18, 3, 237, 73, 12, 30, 18, 3, 246, 212, 12, 30, 18, 3, - 233, 92, 12, 30, 18, 3, 246, 198, 12, 30, 18, 3, 246, 200, 12, 30, 18, 3, - 246, 204, 12, 30, 18, 3, 237, 68, 12, 30, 18, 235, 79, 227, 188, 12, 30, - 18, 235, 28, 98, 12, 30, 18, 240, 178, 98, 12, 30, 18, 240, 210, 98, 12, - 30, 18, 253, 120, 98, 12, 30, 18, 253, 70, 98, 12, 30, 18, 254, 200, 98, - 12, 30, 18, 27, 6, 237, 71, 12, 30, 18, 27, 6, 240, 160, 12, 30, 18, 27, - 6, 237, 61, 12, 30, 18, 27, 6, 237, 75, 12, 30, 18, 27, 6, 233, 96, 12, - 30, 18, 27, 6, 240, 173, 12, 30, 18, 27, 6, 246, 219, 12, 30, 18, 27, 6, - 237, 89, 12, 30, 18, 27, 6, 240, 146, 12, 30, 18, 27, 6, 237, 91, 12, 30, - 18, 27, 6, 237, 82, 12, 30, 18, 27, 6, 252, 229, 12, 30, 18, 27, 6, 252, - 227, 12, 30, 18, 27, 6, 253, 38, 12, 30, 18, 27, 6, 233, 100, 12, 30, 18, - 27, 6, 252, 223, 12, 30, 18, 27, 6, 246, 209, 12, 30, 18, 27, 6, 240, - 178, 98, 12, 30, 18, 27, 6, 237, 73, 12, 30, 18, 27, 6, 246, 212, 12, 30, - 18, 27, 6, 233, 92, 12, 30, 18, 27, 6, 246, 198, 12, 30, 18, 27, 6, 246, - 200, 12, 30, 18, 27, 6, 246, 204, 12, 30, 18, 27, 6, 237, 68, 12, 30, 18, - 27, 237, 138, 12, 30, 18, 27, 3, 237, 71, 12, 30, 18, 27, 3, 240, 160, - 12, 30, 18, 27, 3, 237, 61, 12, 30, 18, 27, 3, 237, 75, 12, 30, 18, 27, - 3, 233, 96, 12, 30, 18, 27, 3, 240, 173, 12, 30, 18, 27, 3, 246, 219, 12, - 30, 18, 27, 3, 237, 89, 12, 30, 18, 27, 3, 240, 146, 12, 30, 18, 27, 3, - 237, 91, 12, 30, 18, 27, 3, 237, 82, 12, 30, 18, 27, 3, 252, 229, 12, 30, - 18, 27, 3, 252, 227, 12, 30, 18, 27, 3, 253, 38, 12, 30, 18, 27, 3, 233, - 100, 12, 30, 18, 27, 3, 252, 223, 12, 30, 18, 27, 3, 246, 209, 12, 30, - 18, 27, 3, 35, 237, 73, 12, 30, 18, 27, 3, 237, 73, 12, 30, 18, 27, 3, - 246, 212, 12, 30, 18, 27, 3, 233, 92, 12, 30, 18, 27, 3, 246, 198, 12, - 30, 18, 27, 3, 246, 200, 12, 30, 18, 27, 3, 246, 204, 12, 30, 18, 27, 3, - 237, 68, 12, 30, 18, 27, 235, 79, 227, 188, 12, 30, 18, 27, 235, 28, 98, - 12, 30, 18, 27, 240, 178, 98, 12, 30, 18, 27, 240, 210, 98, 12, 30, 18, - 27, 253, 120, 98, 12, 30, 18, 27, 253, 70, 98, 12, 30, 18, 27, 254, 200, - 98, 12, 18, 6, 233, 129, 12, 18, 3, 233, 129, 12, 18, 21, 240, 126, 12, - 18, 21, 118, 12, 18, 21, 113, 12, 18, 21, 166, 12, 18, 21, 158, 12, 18, - 21, 173, 12, 18, 21, 183, 12, 18, 21, 194, 12, 18, 21, 187, 12, 18, 21, - 192, 12, 159, 21, 240, 126, 12, 159, 21, 118, 12, 159, 21, 113, 12, 159, - 21, 166, 12, 159, 21, 158, 12, 159, 21, 173, 12, 159, 21, 183, 12, 159, - 21, 194, 12, 159, 21, 187, 12, 159, 21, 192, 12, 30, 21, 240, 126, 12, - 30, 21, 118, 12, 30, 21, 113, 12, 30, 21, 166, 12, 30, 21, 158, 12, 30, - 21, 173, 12, 30, 21, 183, 12, 30, 21, 194, 12, 30, 21, 187, 12, 30, 21, - 192, 12, 30, 18, 21, 240, 126, 12, 30, 18, 21, 118, 12, 30, 18, 21, 113, - 12, 30, 18, 21, 166, 12, 30, 18, 21, 158, 12, 30, 18, 21, 173, 12, 30, - 18, 21, 183, 12, 30, 18, 21, 194, 12, 30, 18, 21, 187, 12, 30, 18, 21, - 192, 12, 189, 21, 240, 126, 12, 189, 21, 118, 12, 189, 21, 113, 12, 189, - 21, 166, 12, 189, 21, 158, 12, 189, 21, 173, 12, 189, 21, 183, 12, 189, - 21, 194, 12, 189, 21, 187, 12, 189, 21, 192, 235, 19, 75, 246, 170, 240, - 199, 235, 19, 75, 240, 141, 240, 199, 235, 19, 75, 246, 184, 240, 199, - 235, 19, 75, 240, 134, 240, 199, 235, 19, 75, 254, 142, 235, 74, 235, 19, - 75, 243, 156, 235, 74, 235, 19, 75, 63, 235, 74, 235, 19, 75, 168, 106, - 229, 173, 235, 19, 75, 135, 106, 229, 173, 235, 19, 75, 152, 106, 229, - 173, 235, 19, 75, 246, 160, 106, 229, 173, 235, 19, 75, 246, 159, 106, - 229, 173, 235, 19, 75, 253, 17, 106, 229, 173, 235, 19, 75, 240, 155, - 106, 229, 173, 235, 19, 75, 240, 142, 106, 229, 173, 235, 19, 75, 246, - 208, 106, 229, 173, 235, 19, 75, 168, 106, 233, 109, 235, 19, 75, 135, - 106, 233, 109, 235, 19, 75, 152, 106, 233, 109, 235, 19, 75, 246, 160, - 106, 233, 109, 235, 19, 75, 246, 159, 106, 233, 109, 235, 19, 75, 253, - 17, 106, 233, 109, 235, 19, 75, 240, 155, 106, 233, 109, 235, 19, 75, - 240, 142, 106, 233, 109, 235, 19, 75, 246, 208, 106, 233, 109, 235, 19, - 75, 168, 106, 233, 110, 235, 19, 75, 135, 106, 233, 110, 235, 19, 75, - 152, 106, 233, 110, 235, 19, 75, 246, 160, 106, 233, 110, 235, 19, 75, - 246, 159, 106, 233, 110, 235, 19, 75, 253, 17, 106, 233, 110, 235, 19, - 75, 240, 155, 106, 233, 110, 235, 19, 75, 240, 142, 106, 233, 110, 235, - 19, 75, 246, 208, 106, 233, 110, 235, 19, 75, 245, 80, 235, 19, 75, 236, - 177, 235, 19, 75, 235, 109, 235, 19, 75, 227, 160, 235, 19, 75, 236, 238, - 235, 19, 75, 236, 248, 235, 19, 75, 236, 1, 235, 19, 75, 237, 30, 235, - 19, 75, 239, 50, 235, 19, 75, 240, 217, 109, 75, 169, 240, 217, 109, 75, - 223, 0, 109, 75, 223, 1, 109, 75, 223, 2, 109, 75, 223, 3, 109, 75, 223, - 4, 109, 75, 223, 5, 109, 75, 223, 6, 109, 75, 223, 7, 109, 75, 223, 8, - 109, 75, 223, 9, 109, 75, 223, 10, 109, 75, 223, 11, 109, 75, 223, 12, - 109, 75, 223, 13, 109, 75, 223, 14, 109, 75, 223, 15, 109, 75, 223, 16, - 109, 75, 223, 17, 109, 75, 223, 18, 109, 75, 223, 19, 109, 75, 223, 20, - 109, 75, 223, 21, 109, 75, 223, 22, 109, 75, 223, 23, 109, 75, 223, 24, - 109, 75, 223, 25, 109, 75, 223, 26, 109, 75, 223, 27, 109, 75, 223, 28, - 109, 75, 223, 29, 109, 75, 223, 30, 109, 75, 223, 31, 109, 75, 223, 32, - 109, 75, 223, 33, 109, 75, 223, 34, 109, 75, 223, 35, 109, 75, 223, 36, - 109, 75, 223, 37, 109, 75, 223, 38, 109, 75, 223, 39, 109, 75, 223, 40, - 109, 75, 223, 41, 109, 75, 223, 42, 109, 75, 223, 43, 109, 75, 223, 44, - 109, 75, 223, 45, 109, 75, 223, 46, 109, 75, 223, 47, 109, 75, 223, 48, - 109, 75, 61, 240, 217, 109, 75, 227, 82, 109, 75, 227, 83, 109, 75, 227, - 84, 109, 75, 227, 85, 109, 75, 227, 86, 109, 75, 227, 87, 109, 75, 227, - 88, 109, 75, 227, 89, 109, 75, 227, 90, 109, 75, 227, 91, 109, 75, 227, - 92, 109, 75, 227, 93, 109, 75, 227, 94, 109, 75, 227, 95, 109, 75, 227, - 96, 109, 75, 227, 97, 109, 75, 227, 98, 109, 75, 227, 99, 109, 75, 227, - 100, 109, 75, 227, 101, 109, 75, 227, 102, 109, 75, 227, 103, 109, 75, - 227, 104, 109, 75, 227, 105, 109, 75, 227, 106, 109, 75, 227, 107, 109, - 75, 227, 108, 109, 75, 227, 109, 109, 75, 227, 110, 109, 75, 227, 111, - 109, 75, 227, 112, 109, 75, 227, 113, 109, 75, 227, 114, 109, 75, 227, - 115, 109, 75, 227, 116, 109, 75, 227, 117, 109, 75, 227, 118, 109, 75, - 227, 119, 109, 75, 227, 120, 109, 75, 227, 121, 109, 75, 227, 122, 109, - 75, 227, 123, 109, 75, 227, 124, 109, 75, 227, 125, 109, 75, 227, 126, - 109, 75, 227, 127, 109, 75, 227, 128, 109, 75, 227, 129, 109, 75, 227, - 130, 9, 11, 223, 63, 9, 11, 223, 64, 9, 11, 223, 65, 9, 11, 223, 66, 9, - 11, 223, 67, 9, 11, 223, 68, 9, 11, 223, 69, 9, 11, 223, 70, 9, 11, 223, - 71, 9, 11, 223, 72, 9, 11, 223, 73, 9, 11, 223, 74, 9, 11, 223, 75, 9, - 11, 223, 76, 9, 11, 223, 77, 9, 11, 223, 78, 9, 11, 223, 79, 9, 11, 223, - 80, 9, 11, 223, 81, 9, 11, 223, 82, 9, 11, 223, 83, 9, 11, 223, 84, 9, - 11, 223, 85, 9, 11, 223, 86, 9, 11, 223, 87, 9, 11, 223, 88, 9, 11, 223, - 89, 9, 11, 223, 90, 9, 11, 223, 91, 9, 11, 223, 92, 9, 11, 223, 93, 9, - 11, 223, 94, 9, 11, 223, 95, 9, 11, 223, 96, 9, 11, 223, 97, 9, 11, 223, - 98, 9, 11, 223, 99, 9, 11, 223, 100, 9, 11, 223, 101, 9, 11, 223, 102, 9, - 11, 223, 103, 9, 11, 223, 104, 9, 11, 223, 105, 9, 11, 223, 106, 9, 11, - 223, 107, 9, 11, 223, 108, 9, 11, 223, 109, 9, 11, 223, 110, 9, 11, 223, - 111, 9, 11, 223, 112, 9, 11, 223, 113, 9, 11, 223, 114, 9, 11, 223, 115, - 9, 11, 223, 116, 9, 11, 223, 117, 9, 11, 223, 118, 9, 11, 223, 119, 9, - 11, 223, 120, 9, 11, 223, 121, 9, 11, 223, 122, 9, 11, 223, 123, 9, 11, - 223, 124, 9, 11, 223, 125, 9, 11, 223, 126, 9, 11, 223, 127, 9, 11, 223, - 128, 9, 11, 223, 129, 9, 11, 223, 130, 9, 11, 223, 131, 9, 11, 223, 132, - 9, 11, 223, 133, 9, 11, 223, 134, 9, 11, 223, 135, 9, 11, 223, 136, 9, - 11, 223, 137, 9, 11, 223, 138, 9, 11, 223, 139, 9, 11, 223, 140, 9, 11, - 223, 141, 9, 11, 223, 142, 9, 11, 223, 143, 9, 11, 223, 144, 9, 11, 223, - 145, 9, 11, 223, 146, 9, 11, 223, 147, 9, 11, 223, 148, 9, 11, 223, 149, - 9, 11, 223, 150, 9, 11, 223, 151, 9, 11, 223, 152, 9, 11, 223, 153, 9, - 11, 223, 154, 9, 11, 223, 155, 9, 11, 223, 156, 9, 11, 223, 157, 9, 11, - 223, 158, 9, 11, 223, 159, 9, 11, 223, 160, 9, 11, 223, 161, 9, 11, 223, - 162, 9, 11, 223, 163, 9, 11, 223, 164, 9, 11, 223, 165, 9, 11, 223, 166, - 9, 11, 223, 167, 9, 11, 223, 168, 9, 11, 223, 169, 9, 11, 223, 170, 9, - 11, 223, 171, 9, 11, 223, 172, 9, 11, 223, 173, 9, 11, 223, 174, 9, 11, - 223, 175, 9, 11, 223, 176, 9, 11, 223, 177, 9, 11, 223, 178, 9, 11, 223, - 179, 9, 11, 223, 180, 9, 11, 223, 181, 9, 11, 223, 182, 9, 11, 223, 183, - 9, 11, 223, 184, 9, 11, 223, 185, 9, 11, 223, 186, 9, 11, 223, 187, 9, - 11, 223, 188, 9, 11, 223, 189, 9, 11, 223, 190, 9, 11, 223, 191, 9, 11, - 223, 192, 9, 11, 223, 193, 9, 11, 223, 194, 9, 11, 223, 195, 9, 11, 223, - 196, 9, 11, 223, 197, 9, 11, 223, 198, 9, 11, 223, 199, 9, 11, 223, 200, - 9, 11, 223, 201, 9, 11, 223, 202, 9, 11, 223, 203, 9, 11, 223, 204, 9, - 11, 223, 205, 9, 11, 223, 206, 9, 11, 223, 207, 9, 11, 223, 208, 9, 11, - 223, 209, 9, 11, 223, 210, 9, 11, 223, 211, 9, 11, 223, 212, 9, 11, 223, - 213, 9, 11, 223, 214, 9, 11, 223, 215, 9, 11, 223, 216, 9, 11, 223, 217, - 9, 11, 223, 218, 9, 11, 223, 219, 9, 11, 223, 220, 9, 11, 223, 221, 9, - 11, 223, 222, 9, 11, 223, 223, 9, 11, 223, 224, 9, 11, 223, 225, 9, 11, - 223, 226, 9, 11, 223, 227, 9, 11, 223, 228, 9, 11, 223, 229, 9, 11, 223, - 230, 9, 11, 223, 231, 9, 11, 223, 232, 9, 11, 223, 233, 9, 11, 223, 234, - 9, 11, 223, 235, 9, 11, 223, 236, 9, 11, 223, 237, 9, 11, 223, 238, 9, - 11, 223, 239, 9, 11, 223, 240, 9, 11, 223, 241, 9, 11, 223, 242, 9, 11, - 223, 243, 9, 11, 223, 244, 9, 11, 223, 245, 9, 11, 223, 246, 9, 11, 223, - 247, 9, 11, 223, 248, 9, 11, 223, 249, 9, 11, 223, 250, 9, 11, 223, 251, - 9, 11, 223, 252, 9, 11, 223, 253, 9, 11, 223, 254, 9, 11, 223, 255, 9, - 11, 224, 0, 9, 11, 224, 1, 9, 11, 224, 2, 9, 11, 224, 3, 9, 11, 224, 4, - 9, 11, 224, 5, 9, 11, 224, 6, 9, 11, 224, 7, 9, 11, 224, 8, 9, 11, 224, - 9, 9, 11, 224, 10, 9, 11, 224, 11, 9, 11, 224, 12, 9, 11, 224, 13, 9, 11, - 224, 14, 9, 11, 224, 15, 9, 11, 224, 16, 9, 11, 224, 17, 9, 11, 224, 18, - 9, 11, 224, 19, 9, 11, 224, 20, 9, 11, 224, 21, 9, 11, 224, 22, 9, 11, - 224, 23, 9, 11, 224, 24, 9, 11, 224, 25, 9, 11, 224, 26, 9, 11, 224, 27, - 9, 11, 224, 28, 9, 11, 224, 29, 9, 11, 224, 30, 9, 11, 224, 31, 9, 11, - 224, 32, 9, 11, 224, 33, 9, 11, 224, 34, 9, 11, 224, 35, 9, 11, 224, 36, - 9, 11, 224, 37, 9, 11, 224, 38, 9, 11, 224, 39, 9, 11, 224, 40, 9, 11, - 224, 41, 9, 11, 224, 42, 9, 11, 224, 43, 9, 11, 224, 44, 9, 11, 224, 45, - 9, 11, 224, 46, 9, 11, 224, 47, 9, 11, 224, 48, 9, 11, 224, 49, 9, 11, - 224, 50, 9, 11, 224, 51, 9, 11, 224, 52, 9, 11, 224, 53, 9, 11, 224, 54, - 9, 11, 224, 55, 9, 11, 224, 56, 9, 11, 224, 57, 9, 11, 224, 58, 9, 11, - 224, 59, 9, 11, 224, 60, 9, 11, 224, 61, 9, 11, 224, 62, 9, 11, 224, 63, - 9, 11, 224, 64, 9, 11, 224, 65, 9, 11, 224, 66, 9, 11, 224, 67, 9, 11, - 224, 68, 9, 11, 224, 69, 9, 11, 224, 70, 9, 11, 224, 71, 9, 11, 224, 72, - 9, 11, 224, 73, 9, 11, 224, 74, 9, 11, 224, 75, 9, 11, 224, 76, 9, 11, - 224, 77, 9, 11, 224, 78, 9, 11, 224, 79, 9, 11, 224, 80, 9, 11, 224, 81, - 9, 11, 224, 82, 9, 11, 224, 83, 9, 11, 224, 84, 9, 11, 224, 85, 9, 11, - 224, 86, 9, 11, 224, 87, 9, 11, 224, 88, 9, 11, 224, 89, 9, 11, 224, 90, - 9, 11, 224, 91, 9, 11, 224, 92, 9, 11, 224, 93, 9, 11, 224, 94, 9, 11, - 224, 95, 9, 11, 224, 96, 9, 11, 224, 97, 9, 11, 224, 98, 9, 11, 224, 99, - 9, 11, 224, 100, 9, 11, 224, 101, 9, 11, 224, 102, 9, 11, 224, 103, 9, - 11, 224, 104, 9, 11, 224, 105, 9, 11, 224, 106, 9, 11, 224, 107, 9, 11, - 224, 108, 9, 11, 224, 109, 9, 11, 224, 110, 9, 11, 224, 111, 9, 11, 224, - 112, 9, 11, 224, 113, 9, 11, 224, 114, 9, 11, 224, 115, 9, 11, 224, 116, - 9, 11, 224, 117, 9, 11, 224, 118, 9, 11, 224, 119, 9, 11, 224, 120, 9, - 11, 224, 121, 9, 11, 224, 122, 9, 11, 224, 123, 9, 11, 224, 124, 9, 11, - 224, 125, 9, 11, 224, 126, 9, 11, 224, 127, 9, 11, 224, 128, 9, 11, 224, - 129, 9, 11, 224, 130, 9, 11, 224, 131, 9, 11, 224, 132, 9, 11, 224, 133, - 9, 11, 224, 134, 9, 11, 224, 135, 9, 11, 224, 136, 9, 11, 224, 137, 9, - 11, 224, 138, 9, 11, 224, 139, 9, 11, 224, 140, 9, 11, 224, 141, 9, 11, - 224, 142, 9, 11, 224, 143, 9, 11, 224, 144, 9, 11, 224, 145, 9, 11, 224, - 146, 9, 11, 224, 147, 9, 11, 224, 148, 9, 11, 224, 149, 9, 11, 224, 150, - 9, 11, 224, 151, 9, 11, 224, 152, 9, 11, 224, 153, 9, 11, 224, 154, 9, - 11, 224, 155, 9, 11, 224, 156, 9, 11, 224, 157, 9, 11, 224, 158, 9, 11, - 224, 159, 9, 11, 224, 160, 9, 11, 224, 161, 9, 11, 224, 162, 9, 11, 224, - 163, 9, 11, 224, 164, 9, 11, 224, 165, 9, 11, 224, 166, 9, 11, 224, 167, - 9, 11, 224, 168, 9, 11, 224, 169, 9, 11, 224, 170, 9, 11, 224, 171, 9, - 11, 224, 172, 9, 11, 224, 173, 9, 11, 224, 174, 9, 11, 224, 175, 9, 11, - 224, 176, 9, 11, 224, 177, 9, 11, 224, 178, 9, 11, 224, 179, 9, 11, 224, - 180, 9, 11, 224, 181, 9, 11, 224, 182, 9, 11, 224, 183, 9, 11, 224, 184, - 9, 11, 224, 185, 9, 11, 224, 186, 9, 11, 224, 187, 9, 11, 224, 188, 9, - 11, 224, 189, 9, 11, 224, 190, 9, 11, 224, 191, 9, 11, 224, 192, 9, 11, - 224, 193, 9, 11, 224, 194, 9, 11, 224, 195, 9, 11, 224, 196, 9, 11, 224, - 197, 9, 11, 224, 198, 9, 11, 224, 199, 9, 11, 224, 200, 9, 11, 224, 201, - 9, 11, 224, 202, 9, 11, 224, 203, 9, 11, 224, 204, 9, 11, 224, 205, 9, - 11, 224, 206, 9, 11, 224, 207, 9, 11, 224, 208, 9, 11, 224, 209, 9, 11, - 224, 210, 9, 11, 224, 211, 9, 11, 224, 212, 9, 11, 224, 213, 9, 11, 224, - 214, 9, 11, 224, 215, 9, 11, 224, 216, 9, 11, 224, 217, 9, 11, 224, 218, - 9, 11, 224, 219, 9, 11, 224, 220, 9, 11, 224, 221, 9, 11, 224, 222, 9, - 11, 224, 223, 9, 11, 224, 224, 9, 11, 224, 225, 9, 11, 224, 226, 9, 11, - 224, 227, 9, 11, 224, 228, 9, 11, 224, 229, 9, 11, 224, 230, 9, 11, 224, - 231, 9, 11, 224, 232, 9, 11, 224, 233, 9, 11, 224, 234, 9, 11, 224, 235, - 9, 11, 224, 236, 9, 11, 224, 237, 9, 11, 224, 238, 9, 11, 224, 239, 9, - 11, 224, 240, 9, 11, 224, 241, 9, 11, 224, 242, 9, 11, 224, 243, 9, 11, - 224, 244, 9, 11, 224, 245, 9, 11, 224, 246, 9, 11, 224, 247, 9, 11, 224, - 248, 9, 11, 224, 249, 9, 11, 224, 250, 9, 11, 224, 251, 9, 11, 224, 252, - 9, 11, 224, 253, 9, 11, 224, 254, 9, 11, 224, 255, 9, 11, 225, 0, 9, 11, - 225, 1, 9, 11, 225, 2, 9, 11, 225, 3, 9, 11, 225, 4, 9, 11, 225, 5, 9, - 11, 225, 6, 9, 11, 225, 7, 9, 11, 225, 8, 9, 11, 225, 9, 9, 11, 225, 10, - 9, 11, 225, 11, 9, 11, 225, 12, 9, 11, 225, 13, 9, 11, 225, 14, 9, 11, - 225, 15, 9, 11, 225, 16, 9, 11, 225, 17, 9, 11, 225, 18, 9, 11, 225, 19, - 9, 11, 225, 20, 9, 11, 225, 21, 9, 11, 225, 22, 9, 11, 225, 23, 9, 11, - 225, 24, 9, 11, 225, 25, 9, 11, 225, 26, 9, 11, 225, 27, 9, 11, 225, 28, - 9, 11, 225, 29, 9, 11, 225, 30, 9, 11, 225, 31, 9, 11, 225, 32, 9, 11, - 225, 33, 9, 11, 225, 34, 9, 11, 225, 35, 9, 11, 225, 36, 9, 11, 225, 37, - 9, 11, 225, 38, 9, 11, 225, 39, 9, 11, 225, 40, 9, 11, 225, 41, 9, 11, - 225, 42, 9, 11, 225, 43, 9, 11, 225, 44, 9, 11, 225, 45, 9, 11, 225, 46, - 9, 11, 225, 47, 9, 11, 225, 48, 9, 11, 225, 49, 9, 11, 225, 50, 9, 11, - 225, 51, 9, 11, 225, 52, 9, 11, 225, 53, 9, 11, 225, 54, 9, 11, 225, 55, - 9, 11, 225, 56, 9, 11, 225, 57, 9, 11, 225, 58, 9, 11, 225, 59, 9, 11, - 225, 60, 9, 11, 225, 61, 9, 11, 225, 62, 9, 11, 225, 63, 9, 11, 225, 64, - 9, 11, 225, 65, 9, 11, 225, 66, 9, 11, 225, 67, 9, 11, 225, 68, 9, 11, - 225, 69, 9, 11, 225, 70, 9, 11, 225, 71, 9, 11, 225, 72, 9, 11, 225, 73, - 9, 11, 225, 74, 9, 11, 225, 75, 9, 11, 225, 76, 9, 11, 225, 77, 9, 11, - 225, 78, 9, 11, 225, 79, 9, 11, 225, 80, 9, 11, 225, 81, 9, 11, 225, 82, - 9, 11, 225, 83, 9, 11, 225, 84, 9, 11, 225, 85, 9, 11, 225, 86, 9, 11, - 225, 87, 9, 11, 225, 88, 9, 11, 225, 89, 9, 11, 225, 90, 9, 11, 225, 91, - 9, 11, 225, 92, 234, 144, 247, 105, 108, 237, 69, 108, 229, 165, 76, 108, - 231, 199, 76, 108, 65, 53, 108, 237, 179, 53, 108, 235, 86, 53, 108, 230, - 142, 108, 229, 172, 108, 42, 228, 180, 108, 41, 228, 180, 108, 231, 198, - 108, 79, 53, 108, 237, 67, 108, 227, 193, 108, 246, 162, 240, 121, 108, - 233, 104, 108, 21, 240, 126, 108, 21, 118, 108, 21, 113, 108, 21, 166, - 108, 21, 158, 108, 21, 173, 108, 21, 183, 108, 21, 194, 108, 21, 187, - 108, 21, 192, 108, 237, 66, 108, 230, 140, 108, 231, 190, 53, 108, 237, - 51, 53, 108, 228, 175, 53, 108, 233, 82, 76, 108, 230, 145, 253, 113, - 108, 7, 6, 1, 57, 108, 7, 6, 1, 254, 185, 108, 7, 6, 1, 254, 194, 108, 7, - 6, 1, 222, 222, 108, 7, 6, 1, 72, 108, 7, 6, 1, 254, 191, 108, 7, 6, 1, - 214, 108, 7, 6, 1, 212, 108, 7, 6, 1, 74, 108, 7, 6, 1, 254, 192, 108, 7, - 6, 1, 254, 186, 108, 7, 6, 1, 149, 108, 7, 6, 1, 185, 108, 7, 6, 1, 199, - 108, 7, 6, 1, 73, 108, 7, 6, 1, 254, 187, 108, 7, 6, 1, 254, 196, 108, 7, - 6, 1, 146, 108, 7, 6, 1, 193, 108, 7, 6, 1, 254, 183, 108, 7, 6, 1, 66, - 108, 7, 6, 1, 196, 108, 7, 6, 1, 254, 195, 108, 7, 6, 1, 254, 184, 108, - 7, 6, 1, 254, 190, 108, 7, 6, 1, 254, 193, 108, 42, 37, 104, 108, 235, - 37, 233, 104, 108, 41, 37, 104, 108, 230, 125, 235, 24, 108, 184, 240, - 138, 108, 240, 163, 235, 24, 108, 7, 3, 1, 57, 108, 7, 3, 1, 254, 185, - 108, 7, 3, 1, 254, 194, 108, 7, 3, 1, 222, 222, 108, 7, 3, 1, 72, 108, 7, - 3, 1, 254, 191, 108, 7, 3, 1, 214, 108, 7, 3, 1, 212, 108, 7, 3, 1, 74, - 108, 7, 3, 1, 254, 192, 108, 7, 3, 1, 254, 186, 108, 7, 3, 1, 149, 108, - 7, 3, 1, 185, 108, 7, 3, 1, 199, 108, 7, 3, 1, 73, 108, 7, 3, 1, 254, - 187, 108, 7, 3, 1, 254, 196, 108, 7, 3, 1, 146, 108, 7, 3, 1, 193, 108, - 7, 3, 1, 254, 183, 108, 7, 3, 1, 66, 108, 7, 3, 1, 196, 108, 7, 3, 1, - 254, 195, 108, 7, 3, 1, 254, 184, 108, 7, 3, 1, 254, 190, 108, 7, 3, 1, - 254, 193, 108, 42, 240, 137, 104, 108, 61, 240, 138, 108, 41, 240, 137, - 104, 108, 205, 238, 137, 247, 105, 38, 229, 66, 38, 229, 67, 38, 229, 68, - 38, 229, 69, 38, 229, 70, 38, 229, 71, 38, 229, 72, 38, 229, 73, 38, 229, - 74, 38, 229, 75, 38, 229, 76, 38, 229, 77, 38, 229, 78, 38, 229, 79, 38, - 229, 80, 38, 229, 81, 38, 229, 82, 38, 229, 83, 38, 229, 84, 38, 229, 85, - 38, 229, 86, 38, 229, 87, 38, 229, 88, 38, 229, 89, 38, 229, 90, 38, 229, - 91, 38, 229, 92, 38, 229, 93, 38, 229, 94, 38, 229, 95, 38, 229, 96, 38, - 229, 97, 38, 229, 98, 38, 229, 99, 38, 229, 100, 38, 229, 101, 38, 229, - 102, 38, 229, 103, 38, 229, 104, 38, 229, 105, 38, 229, 106, 38, 229, - 107, 38, 229, 108, 38, 229, 109, 38, 229, 110, 38, 229, 111, 38, 229, - 112, 38, 229, 113, 38, 229, 114, 38, 229, 115, 38, 229, 116, 38, 229, - 117, 38, 229, 118, 38, 229, 119, 38, 229, 120, 38, 229, 121, 38, 229, - 122, 38, 229, 123, 38, 229, 124, 38, 229, 125, 38, 229, 126, 38, 229, - 127, 38, 229, 128, 38, 229, 129, 38, 229, 130, 38, 229, 131, 38, 229, - 132, 38, 229, 133, 38, 229, 134, 38, 229, 135, 38, 229, 136, 38, 229, - 137, 38, 229, 138, 38, 229, 139, 38, 229, 140, 38, 229, 141, 38, 229, - 142, 38, 229, 143, 38, 229, 144, 38, 229, 145, 38, 229, 146, 38, 229, - 147, 38, 229, 148, 38, 228, 3, 38, 228, 4, 38, 228, 5, 38, 228, 6, 38, - 228, 7, 38, 228, 8, 38, 228, 9, 38, 228, 10, 38, 228, 11, 38, 228, 12, - 38, 228, 13, 38, 228, 14, 38, 228, 15, 38, 228, 16, 38, 228, 17, 38, 228, - 18, 38, 228, 19, 38, 228, 20, 38, 228, 21, 38, 228, 22, 38, 228, 23, 38, - 228, 24, 38, 228, 25, 38, 228, 26, 38, 228, 27, 38, 228, 28, 38, 228, 29, - 38, 228, 30, 38, 228, 31, 38, 228, 32, 38, 228, 33, 38, 228, 34, 38, 228, - 35, 38, 228, 36, 38, 228, 37, 38, 228, 38, 38, 228, 39, 38, 228, 40, 38, - 228, 41, 38, 228, 42, 38, 228, 43, 38, 228, 44, 38, 228, 45, 38, 228, 46, - 38, 228, 47, 38, 228, 48, 38, 228, 49, 38, 228, 50, 38, 228, 51, 38, 228, - 52, 38, 228, 53, 38, 228, 54, 38, 228, 55, 38, 228, 56, 38, 228, 57, 38, - 228, 58, 38, 228, 59, 38, 228, 60, 38, 228, 61, 38, 228, 62, 38, 228, 63, - 38, 228, 64, 38, 228, 65, 38, 228, 66, 38, 228, 67, 38, 228, 68, 38, 228, - 69, 38, 228, 70, 38, 228, 71, 38, 228, 72, 38, 228, 73, 38, 228, 74, 38, - 228, 75, 38, 228, 76, 38, 228, 77, 38, 228, 78, 38, 228, 79, 38, 228, 80, - 38, 228, 81, 38, 228, 82, 38, 228, 83, 38, 228, 84, 38, 228, 85, 38, 228, - 86, 38, 228, 87, 38, 228, 88, 38, 228, 89, 38, 228, 90, 38, 228, 91, 38, - 228, 92, 38, 228, 93, 38, 228, 94, 38, 228, 95, 38, 228, 96, 38, 228, 97, - 38, 228, 98, 38, 228, 99, 38, 228, 100, 38, 228, 101, 38, 228, 102, 38, - 228, 103, 38, 228, 104, 38, 228, 105, 38, 228, 106, 38, 228, 107, 38, - 228, 108, 38, 228, 109, 38, 228, 110, 38, 228, 111, 38, 228, 112, 38, - 228, 113, 38, 228, 114, 38, 228, 115, 38, 228, 116, 38, 228, 117, 38, - 228, 118, 38, 228, 119, 38, 228, 120, 38, 228, 121, 38, 228, 122, 38, - 228, 123, 38, 228, 124, 38, 228, 125, 38, 228, 126, 38, 228, 127, 38, - 228, 128, 38, 228, 129, 38, 228, 130, 38, 228, 131, 38, 228, 132, 38, - 228, 133, 38, 228, 134, 38, 228, 135, 38, 228, 136, 38, 228, 137, 38, - 228, 138, 38, 228, 139, 38, 228, 140, 38, 228, 141, 38, 228, 142, 38, - 228, 143, 38, 228, 144, 38, 228, 145, 38, 228, 146, 38, 228, 147, 38, - 228, 148, 38, 228, 149, 38, 228, 150, 38, 228, 151, 38, 228, 152, 38, - 228, 153, 38, 228, 154, 38, 228, 155, 38, 228, 156, 38, 228, 157, 38, - 228, 158, 38, 228, 159, + 0, 223, 254, 246, 95, 78, 228, 69, 78, 54, 55, 248, 155, 55, 229, 169, + 55, 254, 134, 254, 79, 42, 229, 229, 45, 229, 229, 253, 251, 88, 55, 250, + 168, 242, 120, 245, 90, 223, 136, 224, 17, 20, 217, 84, 20, 107, 20, 103, + 20, 160, 20, 154, 20, 174, 20, 182, 20, 191, 20, 185, 20, 190, 250, 175, + 225, 67, 235, 87, 55, 246, 154, 55, 244, 30, 55, 228, 82, 78, 250, 167, + 253, 244, 7, 6, 1, 60, 7, 6, 1, 253, 204, 7, 6, 1, 251, 202, 7, 6, 1, + 250, 46, 7, 6, 1, 73, 7, 6, 1, 246, 74, 7, 6, 1, 245, 67, 7, 6, 1, 243, + 225, 7, 6, 1, 72, 7, 6, 1, 237, 126, 7, 6, 1, 237, 17, 7, 6, 1, 153, 7, + 6, 1, 189, 7, 6, 1, 207, 7, 6, 1, 74, 7, 6, 1, 230, 59, 7, 6, 1, 228, + 163, 7, 6, 1, 152, 7, 6, 1, 198, 7, 6, 1, 222, 201, 7, 6, 1, 68, 7, 6, 1, + 216, 216, 7, 6, 1, 219, 40, 7, 6, 1, 218, 151, 7, 6, 1, 218, 90, 7, 6, 1, + 217, 157, 42, 40, 115, 227, 160, 224, 17, 45, 40, 115, 250, 217, 255, 0, + 109, 235, 43, 244, 37, 255, 0, 7, 3, 1, 60, 7, 3, 1, 253, 204, 7, 3, 1, + 251, 202, 7, 3, 1, 250, 46, 7, 3, 1, 73, 7, 3, 1, 246, 74, 7, 3, 1, 245, + 67, 7, 3, 1, 243, 225, 7, 3, 1, 72, 7, 3, 1, 237, 126, 7, 3, 1, 237, 17, + 7, 3, 1, 153, 7, 3, 1, 189, 7, 3, 1, 207, 7, 3, 1, 74, 7, 3, 1, 230, 59, + 7, 3, 1, 228, 163, 7, 3, 1, 152, 7, 3, 1, 198, 7, 3, 1, 222, 201, 7, 3, + 1, 68, 7, 3, 1, 216, 216, 7, 3, 1, 219, 40, 7, 3, 1, 218, 151, 7, 3, 1, + 218, 90, 7, 3, 1, 217, 157, 42, 250, 79, 115, 69, 235, 43, 45, 250, 79, + 115, 221, 179, 231, 203, 223, 254, 237, 170, 246, 95, 78, 251, 86, 55, + 229, 11, 55, 250, 78, 55, 218, 19, 55, 252, 1, 135, 226, 87, 55, 249, 13, + 250, 126, 55, 245, 215, 230, 103, 237, 211, 235, 112, 51, 254, 120, 228, + 69, 78, 212, 55, 224, 21, 242, 121, 227, 198, 55, 234, 115, 249, 77, 55, + 229, 42, 55, 223, 59, 103, 223, 59, 160, 254, 248, 255, 0, 233, 195, 55, + 229, 73, 55, 233, 193, 248, 145, 251, 92, 223, 59, 107, 234, 58, 230, + 103, 237, 211, 227, 106, 51, 254, 120, 228, 69, 78, 219, 55, 245, 108, + 131, 228, 89, 219, 55, 245, 108, 131, 243, 194, 219, 55, 245, 108, 148, + 228, 87, 237, 170, 228, 82, 78, 7, 6, 1, 112, 2, 244, 36, 7, 6, 1, 112, + 2, 168, 7, 6, 1, 112, 2, 250, 216, 7, 6, 1, 112, 2, 221, 179, 7, 6, 1, + 112, 2, 249, 13, 7, 6, 1, 112, 2, 227, 94, 50, 7, 6, 1, 254, 234, 7, 6, + 1, 251, 203, 2, 251, 92, 7, 6, 1, 178, 2, 244, 36, 7, 6, 1, 178, 2, 168, + 7, 6, 1, 178, 2, 250, 216, 7, 6, 1, 178, 2, 249, 13, 7, 6, 1, 242, 107, + 2, 244, 36, 7, 6, 1, 242, 107, 2, 168, 7, 6, 1, 242, 107, 2, 250, 216, 7, + 6, 1, 242, 107, 2, 249, 13, 7, 6, 1, 246, 118, 7, 6, 1, 233, 34, 2, 221, + 179, 7, 6, 1, 142, 2, 244, 36, 7, 6, 1, 142, 2, 168, 7, 6, 1, 142, 2, + 250, 216, 7, 6, 1, 142, 2, 221, 179, 7, 6, 1, 142, 2, 249, 13, 233, 84, + 55, 7, 6, 1, 142, 2, 92, 7, 6, 1, 105, 2, 244, 36, 7, 6, 1, 105, 2, 168, + 7, 6, 1, 105, 2, 250, 216, 7, 6, 1, 105, 2, 249, 13, 7, 6, 1, 218, 91, 2, + 168, 7, 6, 1, 221, 234, 7, 3, 1, 225, 1, 198, 7, 3, 1, 112, 2, 244, 36, + 7, 3, 1, 112, 2, 168, 7, 3, 1, 112, 2, 250, 216, 7, 3, 1, 112, 2, 221, + 179, 7, 3, 1, 112, 2, 249, 13, 7, 3, 1, 112, 2, 227, 94, 50, 7, 3, 1, + 254, 234, 7, 3, 1, 251, 203, 2, 251, 92, 7, 3, 1, 178, 2, 244, 36, 7, 3, + 1, 178, 2, 168, 7, 3, 1, 178, 2, 250, 216, 7, 3, 1, 178, 2, 249, 13, 7, + 3, 1, 242, 107, 2, 244, 36, 7, 3, 1, 242, 107, 2, 168, 7, 3, 1, 242, 107, + 2, 250, 216, 7, 3, 1, 242, 107, 2, 249, 13, 7, 3, 1, 246, 118, 7, 3, 1, + 233, 34, 2, 221, 179, 7, 3, 1, 142, 2, 244, 36, 7, 3, 1, 142, 2, 168, 7, + 3, 1, 142, 2, 250, 216, 7, 3, 1, 142, 2, 221, 179, 7, 3, 1, 142, 2, 249, + 13, 248, 188, 55, 7, 3, 1, 142, 2, 92, 7, 3, 1, 105, 2, 244, 36, 7, 3, 1, + 105, 2, 168, 7, 3, 1, 105, 2, 250, 216, 7, 3, 1, 105, 2, 249, 13, 7, 3, + 1, 218, 91, 2, 168, 7, 3, 1, 221, 234, 7, 3, 1, 218, 91, 2, 249, 13, 7, + 6, 1, 112, 2, 234, 115, 7, 3, 1, 112, 2, 234, 115, 7, 6, 1, 112, 2, 252, + 8, 7, 3, 1, 112, 2, 252, 8, 7, 6, 1, 112, 2, 230, 162, 7, 3, 1, 112, 2, + 230, 162, 7, 6, 1, 251, 203, 2, 168, 7, 3, 1, 251, 203, 2, 168, 7, 6, 1, + 251, 203, 2, 250, 216, 7, 3, 1, 251, 203, 2, 250, 216, 7, 6, 1, 251, 203, + 2, 61, 50, 7, 3, 1, 251, 203, 2, 61, 50, 7, 6, 1, 251, 203, 2, 251, 130, + 7, 3, 1, 251, 203, 2, 251, 130, 7, 6, 1, 250, 47, 2, 251, 130, 7, 3, 1, + 250, 47, 2, 251, 130, 7, 6, 1, 250, 47, 2, 92, 7, 3, 1, 250, 47, 2, 92, + 7, 6, 1, 178, 2, 234, 115, 7, 3, 1, 178, 2, 234, 115, 7, 6, 1, 178, 2, + 252, 8, 7, 3, 1, 178, 2, 252, 8, 7, 6, 1, 178, 2, 61, 50, 7, 3, 1, 178, + 2, 61, 50, 7, 6, 1, 178, 2, 230, 162, 7, 3, 1, 178, 2, 230, 162, 7, 6, 1, + 178, 2, 251, 130, 7, 3, 1, 178, 2, 251, 130, 7, 6, 1, 245, 68, 2, 250, + 216, 7, 3, 1, 245, 68, 2, 250, 216, 7, 6, 1, 245, 68, 2, 252, 8, 7, 3, 1, + 245, 68, 2, 252, 8, 7, 6, 1, 245, 68, 2, 61, 50, 7, 3, 1, 245, 68, 2, 61, + 50, 7, 6, 1, 245, 68, 2, 251, 92, 7, 3, 1, 245, 68, 2, 251, 92, 7, 6, 1, + 243, 226, 2, 250, 216, 7, 3, 1, 243, 226, 2, 250, 216, 7, 6, 1, 243, 226, + 2, 92, 7, 3, 1, 243, 226, 2, 92, 7, 6, 1, 242, 107, 2, 221, 179, 7, 3, 1, + 242, 107, 2, 221, 179, 7, 6, 1, 242, 107, 2, 234, 115, 7, 3, 1, 242, 107, + 2, 234, 115, 7, 6, 1, 242, 107, 2, 252, 8, 7, 3, 1, 242, 107, 2, 252, 8, + 7, 6, 1, 242, 107, 2, 230, 162, 7, 3, 1, 242, 107, 2, 230, 162, 7, 6, 1, + 242, 107, 2, 61, 50, 7, 3, 1, 248, 144, 72, 7, 6, 24, 237, 253, 7, 3, 24, + 237, 253, 7, 6, 1, 237, 127, 2, 250, 216, 7, 3, 1, 237, 127, 2, 250, 216, + 7, 6, 1, 237, 18, 2, 251, 92, 7, 3, 1, 237, 18, 2, 251, 92, 7, 3, 1, 236, + 17, 7, 6, 1, 235, 202, 2, 168, 7, 3, 1, 235, 202, 2, 168, 7, 6, 1, 235, + 202, 2, 251, 92, 7, 3, 1, 235, 202, 2, 251, 92, 7, 6, 1, 235, 202, 2, + 251, 130, 7, 3, 1, 235, 202, 2, 251, 130, 7, 6, 1, 235, 202, 2, 233, 193, + 248, 145, 7, 3, 1, 235, 202, 2, 233, 193, 248, 145, 7, 6, 1, 235, 202, 2, + 92, 7, 3, 1, 235, 202, 2, 92, 7, 6, 1, 233, 34, 2, 168, 7, 3, 1, 233, 34, + 2, 168, 7, 6, 1, 233, 34, 2, 251, 92, 7, 3, 1, 233, 34, 2, 251, 92, 7, 6, + 1, 233, 34, 2, 251, 130, 7, 3, 1, 233, 34, 2, 251, 130, 7, 3, 1, 233, 34, + 228, 246, 251, 213, 254, 79, 7, 6, 1, 246, 185, 7, 3, 1, 246, 185, 7, 6, + 1, 142, 2, 234, 115, 7, 3, 1, 142, 2, 234, 115, 7, 6, 1, 142, 2, 252, 8, + 7, 3, 1, 142, 2, 252, 8, 7, 6, 1, 142, 2, 51, 168, 7, 3, 1, 142, 2, 51, + 168, 7, 6, 24, 230, 167, 7, 3, 24, 230, 167, 7, 6, 1, 228, 39, 2, 168, 7, + 3, 1, 228, 39, 2, 168, 7, 6, 1, 228, 39, 2, 251, 92, 7, 3, 1, 228, 39, 2, + 251, 92, 7, 6, 1, 228, 39, 2, 251, 130, 7, 3, 1, 228, 39, 2, 251, 130, 7, + 6, 1, 226, 235, 2, 168, 7, 3, 1, 226, 235, 2, 168, 7, 6, 1, 226, 235, 2, + 250, 216, 7, 3, 1, 226, 235, 2, 250, 216, 7, 6, 1, 226, 235, 2, 251, 92, + 7, 3, 1, 226, 235, 2, 251, 92, 7, 6, 1, 226, 235, 2, 251, 130, 7, 3, 1, + 226, 235, 2, 251, 130, 7, 6, 1, 222, 202, 2, 251, 92, 7, 3, 1, 222, 202, + 2, 251, 92, 7, 6, 1, 222, 202, 2, 251, 130, 7, 3, 1, 222, 202, 2, 251, + 130, 7, 6, 1, 222, 202, 2, 92, 7, 3, 1, 222, 202, 2, 92, 7, 6, 1, 105, 2, + 221, 179, 7, 3, 1, 105, 2, 221, 179, 7, 6, 1, 105, 2, 234, 115, 7, 3, 1, + 105, 2, 234, 115, 7, 6, 1, 105, 2, 252, 8, 7, 3, 1, 105, 2, 252, 8, 7, 6, + 1, 105, 2, 227, 94, 50, 7, 3, 1, 105, 2, 227, 94, 50, 7, 6, 1, 105, 2, + 51, 168, 7, 3, 1, 105, 2, 51, 168, 7, 6, 1, 105, 2, 230, 162, 7, 3, 1, + 105, 2, 230, 162, 7, 6, 1, 219, 41, 2, 250, 216, 7, 3, 1, 219, 41, 2, + 250, 216, 7, 6, 1, 218, 91, 2, 250, 216, 7, 3, 1, 218, 91, 2, 250, 216, + 7, 6, 1, 218, 91, 2, 249, 13, 7, 6, 1, 217, 158, 2, 168, 7, 3, 1, 217, + 158, 2, 168, 7, 6, 1, 217, 158, 2, 61, 50, 7, 3, 1, 217, 158, 2, 61, 50, + 7, 6, 1, 217, 158, 2, 251, 130, 7, 3, 1, 217, 158, 2, 251, 130, 7, 3, 1, + 171, 198, 7, 3, 1, 49, 2, 92, 7, 6, 1, 49, 2, 96, 7, 6, 1, 49, 2, 221, + 117, 7, 3, 1, 49, 2, 221, 117, 7, 6, 1, 145, 182, 7, 3, 1, 145, 182, 7, + 6, 1, 230, 119, 74, 7, 6, 1, 251, 203, 2, 96, 7, 3, 1, 251, 203, 2, 96, + 7, 6, 1, 254, 212, 250, 46, 7, 6, 1, 250, 47, 2, 96, 7, 6, 1, 250, 47, 2, + 221, 117, 7, 3, 1, 250, 47, 2, 221, 117, 7, 3, 1, 215, 249, 62, 7, 6, 1, + 210, 73, 7, 6, 1, 226, 104, 7, 6, 1, 230, 119, 73, 7, 6, 1, 246, 75, 2, + 96, 7, 3, 1, 246, 75, 2, 96, 7, 6, 1, 245, 68, 2, 96, 7, 6, 1, 244, 231, + 7, 3, 1, 242, 154, 7, 6, 1, 237, 162, 7, 6, 1, 242, 107, 2, 92, 7, 6, 1, + 237, 18, 2, 96, 7, 3, 1, 237, 18, 2, 96, 7, 3, 1, 235, 202, 2, 135, 7, 3, + 1, 235, 158, 2, 92, 7, 6, 1, 215, 189, 7, 6, 1, 233, 34, 2, 42, 96, 7, 3, + 1, 233, 34, 2, 171, 45, 235, 106, 7, 6, 1, 142, 2, 233, 193, 221, 179, 7, + 6, 1, 142, 2, 242, 189, 7, 3, 1, 142, 2, 242, 189, 7, 6, 1, 230, 158, 7, + 3, 1, 230, 158, 7, 6, 1, 230, 60, 2, 96, 7, 3, 1, 230, 60, 2, 96, 7, 1, + 217, 202, 7, 6, 1, 145, 103, 7, 3, 1, 145, 103, 7, 6, 1, 246, 133, 7, 1, + 210, 246, 134, 234, 247, 7, 3, 1, 222, 202, 2, 230, 29, 96, 7, 6, 1, 222, + 202, 2, 96, 7, 3, 1, 222, 202, 2, 96, 7, 6, 1, 222, 202, 2, 227, 164, 96, + 7, 6, 1, 105, 2, 242, 189, 7, 3, 1, 105, 2, 242, 189, 7, 6, 1, 220, 57, + 7, 6, 1, 220, 11, 2, 96, 7, 6, 1, 218, 91, 2, 96, 7, 3, 1, 218, 91, 2, + 96, 7, 6, 1, 217, 158, 2, 92, 7, 3, 1, 217, 158, 2, 92, 7, 6, 1, 246, 76, + 7, 6, 1, 246, 77, 227, 159, 7, 3, 1, 246, 77, 227, 159, 7, 3, 1, 246, 77, + 2, 222, 135, 7, 1, 124, 2, 92, 7, 6, 1, 145, 174, 7, 3, 1, 145, 174, 7, + 1, 237, 170, 244, 73, 223, 137, 2, 92, 7, 1, 218, 154, 7, 1, 249, 55, + 250, 204, 7, 1, 235, 139, 250, 204, 7, 1, 254, 141, 250, 204, 7, 1, 227, + 164, 250, 204, 7, 6, 1, 247, 76, 2, 251, 130, 7, 6, 1, 250, 47, 2, 3, 1, + 217, 158, 2, 251, 130, 7, 3, 1, 247, 76, 2, 251, 130, 7, 6, 1, 235, 21, + 7, 6, 1, 235, 202, 2, 3, 1, 237, 126, 7, 3, 1, 235, 21, 7, 6, 1, 232, 19, + 7, 6, 1, 233, 34, 2, 3, 1, 237, 126, 7, 3, 1, 232, 19, 7, 6, 1, 112, 2, + 251, 130, 7, 3, 1, 112, 2, 251, 130, 7, 6, 1, 242, 107, 2, 251, 130, 7, + 3, 1, 242, 107, 2, 251, 130, 7, 6, 1, 142, 2, 251, 130, 7, 3, 1, 142, 2, + 251, 130, 7, 6, 1, 105, 2, 251, 130, 7, 3, 1, 105, 2, 251, 130, 7, 6, 1, + 105, 2, 249, 14, 25, 234, 115, 7, 3, 1, 105, 2, 249, 14, 25, 234, 115, 7, + 6, 1, 105, 2, 249, 14, 25, 168, 7, 3, 1, 105, 2, 249, 14, 25, 168, 7, 6, + 1, 105, 2, 249, 14, 25, 251, 130, 7, 3, 1, 105, 2, 249, 14, 25, 251, 130, + 7, 6, 1, 105, 2, 249, 14, 25, 244, 36, 7, 3, 1, 105, 2, 249, 14, 25, 244, + 36, 7, 3, 1, 215, 73, 7, 6, 1, 112, 2, 249, 14, 25, 234, 115, 7, 3, 1, + 112, 2, 249, 14, 25, 234, 115, 7, 6, 1, 112, 2, 61, 71, 25, 234, 115, 7, + 3, 1, 112, 2, 61, 71, 25, 234, 115, 7, 6, 1, 254, 235, 2, 234, 115, 7, 3, + 1, 254, 235, 2, 234, 115, 7, 6, 1, 245, 68, 2, 92, 7, 3, 1, 245, 68, 2, + 92, 7, 6, 1, 245, 68, 2, 251, 130, 7, 3, 1, 245, 68, 2, 251, 130, 7, 6, + 1, 237, 18, 2, 251, 130, 7, 3, 1, 237, 18, 2, 251, 130, 7, 6, 1, 142, 2, + 230, 162, 7, 3, 1, 142, 2, 230, 162, 7, 6, 1, 142, 2, 230, 163, 25, 234, + 115, 7, 3, 1, 142, 2, 230, 163, 25, 234, 115, 7, 6, 1, 246, 77, 2, 251, + 130, 7, 3, 1, 246, 77, 2, 251, 130, 7, 3, 1, 237, 127, 2, 251, 130, 7, 6, + 1, 247, 75, 7, 6, 1, 250, 47, 2, 3, 1, 217, 157, 7, 3, 1, 247, 75, 7, 6, + 1, 245, 68, 2, 168, 7, 3, 1, 245, 68, 2, 168, 7, 6, 1, 242, 152, 7, 6, 1, + 218, 154, 7, 6, 1, 233, 34, 2, 244, 36, 7, 3, 1, 233, 34, 2, 244, 36, 7, + 6, 1, 112, 2, 227, 94, 71, 25, 168, 7, 3, 1, 112, 2, 227, 94, 71, 25, + 168, 7, 6, 1, 254, 235, 2, 168, 7, 3, 1, 254, 235, 2, 168, 7, 6, 1, 142, + 2, 214, 25, 168, 7, 3, 1, 142, 2, 214, 25, 168, 7, 6, 1, 112, 2, 51, 244, + 36, 7, 3, 1, 112, 2, 51, 244, 36, 7, 6, 1, 112, 2, 237, 170, 252, 8, 7, + 3, 1, 112, 2, 237, 170, 252, 8, 7, 6, 1, 178, 2, 51, 244, 36, 7, 3, 1, + 178, 2, 51, 244, 36, 7, 6, 1, 178, 2, 237, 170, 252, 8, 7, 3, 1, 178, 2, + 237, 170, 252, 8, 7, 6, 1, 242, 107, 2, 51, 244, 36, 7, 3, 1, 242, 107, + 2, 51, 244, 36, 7, 6, 1, 242, 107, 2, 237, 170, 252, 8, 7, 3, 1, 242, + 107, 2, 237, 170, 252, 8, 7, 6, 1, 142, 2, 51, 244, 36, 7, 3, 1, 142, 2, + 51, 244, 36, 7, 6, 1, 142, 2, 237, 170, 252, 8, 7, 3, 1, 142, 2, 237, + 170, 252, 8, 7, 6, 1, 228, 39, 2, 51, 244, 36, 7, 3, 1, 228, 39, 2, 51, + 244, 36, 7, 6, 1, 228, 39, 2, 237, 170, 252, 8, 7, 3, 1, 228, 39, 2, 237, + 170, 252, 8, 7, 6, 1, 105, 2, 51, 244, 36, 7, 3, 1, 105, 2, 51, 244, 36, + 7, 6, 1, 105, 2, 237, 170, 252, 8, 7, 3, 1, 105, 2, 237, 170, 252, 8, 7, + 6, 1, 226, 235, 2, 250, 169, 56, 7, 3, 1, 226, 235, 2, 250, 169, 56, 7, + 6, 1, 222, 202, 2, 250, 169, 56, 7, 3, 1, 222, 202, 2, 250, 169, 56, 7, + 6, 1, 217, 218, 7, 3, 1, 217, 218, 7, 6, 1, 243, 226, 2, 251, 130, 7, 3, + 1, 243, 226, 2, 251, 130, 7, 6, 1, 233, 34, 2, 171, 45, 235, 106, 7, 3, + 1, 250, 47, 2, 250, 80, 7, 6, 1, 230, 86, 7, 3, 1, 230, 86, 7, 6, 1, 217, + 158, 2, 96, 7, 3, 1, 217, 158, 2, 96, 7, 6, 1, 112, 2, 61, 50, 7, 3, 1, + 112, 2, 61, 50, 7, 6, 1, 178, 2, 251, 92, 7, 3, 1, 178, 2, 251, 92, 7, 6, + 1, 142, 2, 249, 14, 25, 234, 115, 7, 3, 1, 142, 2, 249, 14, 25, 234, 115, + 7, 6, 1, 142, 2, 221, 180, 25, 234, 115, 7, 3, 1, 142, 2, 221, 180, 25, + 234, 115, 7, 6, 1, 142, 2, 61, 50, 7, 3, 1, 142, 2, 61, 50, 7, 6, 1, 142, + 2, 61, 71, 25, 234, 115, 7, 3, 1, 142, 2, 61, 71, 25, 234, 115, 7, 6, 1, + 218, 91, 2, 234, 115, 7, 3, 1, 218, 91, 2, 234, 115, 7, 3, 1, 235, 202, + 2, 250, 80, 7, 3, 1, 233, 34, 2, 250, 80, 7, 3, 1, 222, 202, 2, 250, 80, + 7, 3, 1, 248, 144, 237, 126, 7, 3, 1, 249, 135, 248, 233, 7, 3, 1, 228, + 99, 248, 233, 7, 6, 1, 112, 2, 92, 7, 6, 1, 251, 203, 2, 92, 7, 3, 1, + 251, 203, 2, 92, 7, 6, 1, 235, 202, 2, 135, 7, 6, 1, 222, 202, 2, 249, + 11, 92, 7, 3, 1, 226, 235, 2, 223, 33, 222, 135, 7, 3, 1, 217, 158, 2, + 223, 33, 222, 135, 7, 6, 1, 244, 73, 223, 136, 7, 3, 1, 244, 73, 223, + 136, 7, 6, 1, 49, 2, 92, 7, 6, 1, 105, 135, 7, 6, 1, 215, 216, 216, 7, 6, + 1, 178, 2, 92, 7, 3, 1, 178, 2, 92, 7, 6, 1, 237, 127, 2, 92, 7, 3, 1, + 237, 127, 2, 92, 7, 6, 1, 3, 228, 164, 2, 242, 247, 222, 135, 7, 3, 1, + 228, 164, 2, 242, 247, 222, 135, 7, 6, 1, 228, 39, 2, 92, 7, 3, 1, 228, + 39, 2, 92, 7, 6, 1, 218, 91, 2, 92, 7, 3, 1, 218, 91, 2, 92, 7, 3, 1, + 215, 60, 7, 3, 1, 254, 146, 7, 3, 1, 215, 254, 146, 7, 3, 1, 49, 2, 96, + 7, 3, 1, 230, 119, 74, 7, 3, 1, 251, 203, 2, 250, 80, 7, 3, 1, 250, 47, + 2, 222, 135, 7, 3, 1, 250, 47, 2, 96, 7, 3, 1, 210, 73, 7, 3, 1, 226, + 104, 7, 3, 1, 226, 105, 2, 96, 7, 3, 1, 230, 119, 73, 7, 3, 1, 210, 230, + 119, 73, 7, 3, 1, 210, 230, 119, 178, 2, 96, 7, 3, 1, 250, 197, 210, 230, + 119, 73, 7, 3, 1, 248, 144, 237, 127, 2, 92, 7, 3, 1, 245, 68, 2, 96, 7, + 3, 1, 102, 245, 67, 7, 1, 3, 6, 245, 67, 7, 3, 1, 244, 231, 7, 3, 1, 227, + 237, 242, 189, 7, 3, 1, 215, 243, 225, 7, 3, 1, 243, 226, 2, 96, 7, 3, 1, + 243, 137, 2, 96, 7, 3, 1, 242, 107, 2, 92, 7, 3, 1, 237, 162, 7, 1, 3, 6, + 72, 7, 3, 1, 235, 202, 2, 233, 193, 221, 179, 7, 3, 1, 235, 202, 2, 252, + 116, 7, 3, 1, 235, 202, 2, 227, 164, 96, 7, 3, 1, 235, 81, 7, 3, 1, 215, + 189, 7, 3, 1, 215, 234, 187, 2, 171, 235, 106, 7, 3, 1, 234, 187, 2, 96, + 7, 3, 1, 233, 34, 2, 42, 96, 7, 3, 1, 233, 34, 2, 227, 164, 96, 7, 1, 3, + 6, 207, 7, 3, 1, 252, 196, 74, 7, 1, 3, 6, 230, 167, 7, 3, 1, 250, 197, + 230, 143, 7, 3, 1, 229, 129, 7, 3, 1, 215, 152, 7, 3, 1, 215, 228, 39, 2, + 171, 235, 106, 7, 3, 1, 215, 228, 39, 2, 96, 7, 3, 1, 228, 39, 2, 171, + 235, 106, 7, 3, 1, 228, 39, 2, 222, 135, 7, 3, 1, 228, 39, 2, 245, 173, + 7, 3, 1, 210, 228, 39, 2, 245, 173, 7, 1, 3, 6, 152, 7, 1, 3, 6, 237, + 170, 152, 7, 3, 1, 226, 235, 2, 96, 7, 3, 1, 246, 133, 7, 3, 1, 248, 144, + 237, 127, 2, 214, 25, 96, 7, 3, 1, 223, 224, 210, 246, 133, 7, 3, 1, 246, + 134, 2, 250, 80, 7, 3, 1, 215, 222, 201, 7, 3, 1, 222, 202, 2, 227, 164, + 96, 7, 3, 1, 105, 135, 7, 3, 1, 220, 57, 7, 3, 1, 220, 11, 2, 96, 7, 3, + 1, 215, 216, 216, 7, 3, 1, 215, 219, 40, 7, 3, 1, 215, 218, 90, 7, 1, 3, + 6, 218, 90, 7, 3, 1, 217, 158, 2, 227, 164, 96, 7, 3, 1, 217, 158, 2, + 250, 80, 7, 3, 1, 246, 76, 7, 3, 1, 246, 77, 2, 250, 80, 7, 1, 244, 73, + 223, 136, 7, 1, 229, 133, 219, 70, 245, 100, 7, 1, 237, 170, 244, 73, + 223, 136, 7, 1, 223, 124, 251, 202, 7, 1, 252, 74, 250, 204, 7, 1, 3, 6, + 253, 204, 7, 3, 1, 250, 197, 230, 119, 73, 7, 1, 3, 6, 245, 68, 2, 96, 7, + 1, 3, 6, 243, 225, 7, 3, 1, 237, 127, 2, 250, 97, 7, 3, 1, 215, 237, 17, + 7, 1, 3, 6, 153, 7, 3, 1, 228, 164, 2, 96, 7, 1, 244, 73, 223, 137, 2, + 92, 7, 1, 210, 244, 73, 223, 137, 2, 92, 7, 3, 1, 247, 76, 248, 233, 7, + 3, 1, 249, 37, 248, 233, 7, 3, 1, 247, 76, 248, 234, 2, 250, 80, 7, 3, 1, + 221, 57, 248, 233, 7, 3, 1, 222, 55, 248, 233, 7, 3, 1, 222, 94, 248, + 234, 2, 250, 80, 7, 3, 1, 245, 213, 248, 233, 7, 3, 1, 234, 233, 248, + 233, 7, 3, 1, 234, 188, 248, 233, 7, 1, 252, 74, 229, 168, 7, 1, 252, 81, + 229, 168, 7, 3, 1, 215, 243, 226, 2, 245, 173, 7, 3, 1, 215, 243, 226, 2, + 245, 174, 25, 222, 135, 58, 1, 3, 243, 225, 58, 1, 3, 243, 226, 2, 96, + 58, 1, 3, 237, 126, 58, 1, 3, 152, 58, 1, 3, 215, 152, 58, 1, 3, 215, + 228, 39, 2, 96, 58, 1, 3, 6, 237, 170, 152, 58, 1, 3, 219, 40, 58, 1, 3, + 218, 90, 58, 1, 228, 235, 58, 1, 51, 228, 235, 58, 1, 215, 250, 168, 58, + 1, 254, 79, 58, 1, 210, 250, 168, 58, 1, 45, 144, 227, 93, 58, 1, 42, + 144, 227, 93, 58, 1, 244, 73, 223, 136, 58, 1, 210, 244, 73, 223, 136, + 58, 1, 42, 254, 20, 58, 1, 45, 254, 20, 58, 1, 108, 254, 20, 58, 1, 113, + 254, 20, 58, 1, 250, 217, 255, 0, 251, 130, 58, 1, 69, 235, 43, 58, 1, + 234, 115, 58, 1, 254, 248, 255, 0, 58, 1, 244, 37, 255, 0, 58, 1, 109, + 69, 235, 43, 58, 1, 109, 234, 115, 58, 1, 109, 244, 37, 255, 0, 58, 1, + 109, 254, 248, 255, 0, 58, 1, 221, 87, 250, 175, 58, 1, 144, 221, 87, + 250, 175, 58, 1, 251, 83, 45, 144, 227, 93, 58, 1, 251, 83, 42, 144, 227, + 93, 58, 1, 108, 222, 143, 58, 1, 113, 222, 143, 58, 1, 88, 55, 58, 1, + 233, 155, 55, 252, 8, 61, 50, 227, 94, 50, 230, 162, 3, 221, 179, 51, + 254, 248, 255, 0, 58, 1, 227, 148, 96, 58, 1, 250, 101, 255, 0, 58, 1, 3, + 244, 231, 58, 1, 3, 153, 58, 1, 3, 198, 58, 1, 3, 218, 151, 58, 1, 3, + 210, 244, 73, 223, 136, 58, 1, 246, 85, 145, 135, 58, 1, 116, 145, 135, + 58, 1, 233, 194, 145, 135, 58, 1, 109, 145, 135, 58, 1, 246, 84, 145, + 135, 58, 1, 217, 241, 249, 52, 145, 78, 58, 1, 218, 46, 249, 52, 145, 78, + 58, 1, 219, 68, 58, 1, 220, 84, 58, 1, 51, 254, 79, 58, 1, 109, 113, 254, + 20, 58, 1, 109, 108, 254, 20, 58, 1, 109, 42, 254, 20, 58, 1, 109, 45, + 254, 20, 58, 1, 109, 227, 93, 58, 1, 233, 193, 244, 37, 255, 0, 58, 1, + 233, 193, 51, 244, 37, 255, 0, 58, 1, 233, 193, 51, 254, 248, 255, 0, 58, + 1, 109, 221, 179, 58, 1, 227, 241, 250, 175, 58, 1, 252, 131, 116, 221, + 132, 58, 1, 246, 190, 116, 221, 132, 58, 1, 252, 131, 109, 221, 132, 58, + 1, 246, 190, 109, 221, 132, 58, 1, 224, 237, 58, 1, 230, 119, 224, 237, + 58, 1, 109, 42, 65, 36, 244, 37, 255, 0, 36, 254, 248, 255, 0, 36, 250, + 217, 255, 0, 36, 221, 179, 36, 234, 115, 36, 230, 73, 36, 252, 8, 36, 61, + 50, 36, 249, 13, 36, 242, 247, 50, 36, 227, 94, 50, 36, 51, 254, 248, + 255, 0, 36, 251, 130, 36, 69, 235, 44, 50, 36, 51, 69, 235, 44, 50, 36, + 51, 244, 37, 255, 0, 36, 251, 146, 36, 237, 170, 252, 8, 36, 215, 250, + 169, 50, 36, 250, 169, 50, 36, 210, 250, 169, 50, 36, 250, 169, 71, 227, + 109, 36, 244, 37, 255, 1, 56, 36, 254, 248, 255, 1, 56, 36, 42, 222, 144, + 56, 36, 45, 222, 144, 56, 36, 42, 254, 120, 50, 36, 242, 189, 36, 42, + 144, 227, 94, 56, 36, 108, 222, 144, 56, 36, 113, 222, 144, 56, 36, 88, + 5, 56, 36, 233, 155, 5, 56, 36, 230, 27, 242, 247, 56, 36, 227, 164, 242, + 247, 56, 36, 61, 56, 36, 249, 14, 56, 36, 227, 94, 56, 36, 250, 169, 56, + 36, 251, 92, 36, 230, 162, 36, 69, 235, 44, 56, 36, 252, 4, 56, 36, 237, + 170, 51, 254, 50, 56, 36, 251, 131, 56, 36, 250, 217, 255, 1, 56, 36, + 252, 9, 56, 36, 237, 170, 252, 9, 56, 36, 221, 180, 56, 36, 234, 116, 56, + 36, 109, 235, 43, 36, 51, 109, 235, 43, 36, 221, 180, 230, 74, 36, 224, + 192, 214, 230, 74, 36, 171, 214, 230, 74, 36, 224, 192, 224, 18, 230, 74, + 36, 171, 224, 18, 230, 74, 36, 45, 144, 227, 94, 56, 36, 237, 170, 252, + 4, 56, 36, 40, 56, 36, 226, 93, 56, 36, 218, 152, 50, 36, 69, 221, 179, + 36, 51, 230, 73, 36, 244, 37, 145, 78, 36, 254, 248, 145, 78, 36, 23, + 229, 163, 36, 23, 236, 33, 36, 23, 249, 8, 221, 123, 36, 23, 217, 207, + 36, 252, 4, 50, 36, 246, 154, 5, 56, 36, 51, 69, 235, 44, 56, 36, 42, + 254, 120, 56, 36, 212, 221, 180, 50, 36, 242, 251, 50, 36, 254, 151, 114, + 199, 50, 36, 42, 45, 76, 56, 36, 220, 53, 76, 56, 36, 244, 41, 237, 54, + 36, 45, 254, 21, 50, 36, 42, 144, 227, 94, 50, 36, 245, 210, 36, 218, + 152, 56, 36, 42, 254, 21, 56, 36, 45, 254, 21, 56, 36, 45, 254, 21, 25, + 108, 254, 21, 56, 36, 45, 144, 227, 94, 50, 36, 61, 71, 227, 109, 36, + 253, 252, 56, 36, 51, 227, 94, 56, 36, 217, 33, 50, 36, 51, 252, 9, 56, + 36, 51, 252, 8, 36, 51, 234, 115, 36, 51, 234, 116, 56, 36, 51, 221, 179, + 36, 51, 237, 170, 252, 8, 36, 51, 90, 76, 56, 36, 7, 3, 1, 60, 36, 7, 3, + 1, 73, 36, 7, 3, 1, 72, 36, 7, 3, 1, 74, 36, 7, 3, 1, 68, 36, 7, 3, 1, + 251, 202, 36, 7, 3, 1, 250, 46, 36, 7, 3, 1, 243, 225, 36, 7, 3, 1, 189, + 36, 7, 3, 1, 152, 36, 7, 3, 1, 222, 201, 36, 7, 3, 1, 216, 216, 36, 7, 3, + 1, 218, 151, 23, 6, 1, 243, 127, 23, 3, 1, 243, 127, 23, 6, 1, 254, 49, + 226, 142, 23, 3, 1, 254, 49, 226, 142, 23, 231, 107, 55, 23, 234, 237, + 231, 107, 55, 23, 6, 1, 230, 15, 248, 240, 23, 3, 1, 230, 15, 248, 240, + 23, 217, 207, 23, 3, 210, 234, 218, 224, 128, 100, 23, 3, 247, 143, 234, + 218, 224, 128, 100, 23, 3, 210, 247, 143, 234, 218, 224, 128, 100, 23, + 228, 82, 78, 23, 221, 123, 23, 249, 8, 221, 123, 23, 6, 1, 254, 147, 2, + 221, 123, 23, 254, 110, 222, 73, 23, 6, 1, 246, 157, 2, 221, 123, 23, 6, + 1, 246, 122, 2, 221, 123, 23, 6, 1, 237, 163, 2, 221, 123, 23, 6, 1, 230, + 142, 2, 221, 123, 23, 6, 1, 220, 58, 2, 221, 123, 23, 6, 1, 230, 144, 2, + 221, 123, 23, 3, 1, 237, 163, 2, 249, 8, 25, 221, 123, 23, 6, 1, 254, + 146, 23, 6, 1, 252, 102, 23, 6, 1, 244, 231, 23, 6, 1, 249, 62, 23, 6, 1, + 246, 156, 23, 6, 1, 217, 83, 23, 6, 1, 246, 121, 23, 6, 1, 222, 6, 23, 6, + 1, 237, 162, 23, 6, 1, 236, 221, 23, 6, 1, 235, 156, 23, 6, 1, 233, 99, + 23, 6, 1, 231, 144, 23, 6, 1, 218, 130, 23, 6, 1, 230, 141, 23, 6, 1, + 229, 108, 23, 6, 1, 227, 149, 23, 6, 1, 224, 127, 23, 6, 1, 222, 105, 23, + 6, 1, 220, 57, 23, 6, 1, 229, 129, 23, 6, 1, 251, 31, 23, 6, 1, 228, 212, + 23, 6, 1, 230, 143, 23, 6, 1, 237, 163, 2, 249, 7, 23, 6, 1, 220, 58, 2, + 249, 7, 23, 3, 1, 254, 147, 2, 221, 123, 23, 3, 1, 246, 157, 2, 221, 123, + 23, 3, 1, 246, 122, 2, 221, 123, 23, 3, 1, 237, 163, 2, 221, 123, 23, 3, + 1, 220, 58, 2, 249, 8, 25, 221, 123, 23, 3, 1, 254, 146, 23, 3, 1, 252, + 102, 23, 3, 1, 244, 231, 23, 3, 1, 249, 62, 23, 3, 1, 246, 156, 23, 3, 1, + 217, 83, 23, 3, 1, 246, 121, 23, 3, 1, 222, 6, 23, 3, 1, 237, 162, 23, 3, + 1, 236, 221, 23, 3, 1, 235, 156, 23, 3, 1, 233, 99, 23, 3, 1, 231, 144, + 23, 3, 1, 218, 130, 23, 3, 1, 230, 141, 23, 3, 1, 229, 108, 23, 3, 1, + 227, 149, 23, 3, 1, 39, 224, 127, 23, 3, 1, 224, 127, 23, 3, 1, 222, 105, + 23, 3, 1, 220, 57, 23, 3, 1, 229, 129, 23, 3, 1, 251, 31, 23, 3, 1, 228, + 212, 23, 3, 1, 230, 143, 23, 3, 1, 237, 163, 2, 249, 7, 23, 3, 1, 220, + 58, 2, 249, 7, 23, 3, 1, 230, 142, 2, 221, 123, 23, 3, 1, 220, 58, 2, + 221, 123, 23, 3, 1, 230, 144, 2, 221, 123, 23, 6, 236, 244, 100, 23, 252, + 103, 100, 23, 222, 7, 100, 23, 220, 58, 2, 242, 247, 100, 23, 220, 58, 2, + 254, 248, 25, 242, 247, 100, 23, 220, 58, 2, 249, 14, 25, 242, 247, 100, + 23, 229, 130, 100, 23, 229, 109, 100, 23, 236, 244, 100, 23, 1, 254, 49, + 236, 37, 23, 3, 1, 254, 49, 236, 37, 23, 1, 223, 144, 23, 3, 1, 223, 144, + 23, 1, 248, 240, 23, 3, 1, 248, 240, 23, 1, 236, 37, 23, 3, 1, 236, 37, + 23, 1, 226, 142, 23, 3, 1, 226, 142, 75, 6, 1, 224, 238, 75, 3, 1, 224, + 238, 75, 6, 1, 245, 219, 75, 3, 1, 245, 219, 75, 6, 1, 236, 135, 75, 3, + 1, 236, 135, 75, 6, 1, 242, 242, 75, 3, 1, 242, 242, 75, 6, 1, 244, 226, + 75, 3, 1, 244, 226, 75, 6, 1, 224, 211, 75, 3, 1, 224, 211, 75, 6, 1, + 249, 75, 75, 3, 1, 249, 75, 23, 236, 222, 100, 23, 227, 150, 100, 23, + 234, 218, 224, 128, 100, 23, 1, 217, 212, 23, 6, 222, 7, 100, 23, 234, + 218, 246, 157, 100, 23, 210, 234, 218, 246, 157, 100, 23, 6, 1, 224, 200, + 23, 3, 1, 224, 200, 23, 6, 234, 218, 224, 128, 100, 23, 6, 1, 226, 140, + 23, 3, 1, 226, 140, 23, 227, 150, 2, 214, 100, 23, 6, 210, 234, 218, 224, + 128, 100, 23, 6, 247, 143, 234, 218, 224, 128, 100, 23, 6, 210, 247, 143, + 234, 218, 224, 128, 100, 31, 6, 1, 238, 27, 2, 244, 36, 31, 6, 1, 237, + 166, 31, 6, 1, 248, 182, 31, 6, 1, 244, 78, 31, 6, 1, 220, 99, 238, 26, + 31, 6, 1, 247, 73, 31, 6, 1, 251, 211, 72, 31, 6, 1, 217, 250, 31, 6, 1, + 237, 114, 31, 6, 1, 235, 20, 31, 6, 1, 232, 15, 31, 6, 1, 221, 46, 31, 6, + 1, 236, 76, 31, 6, 1, 242, 107, 2, 244, 36, 31, 6, 1, 224, 192, 68, 31, + 6, 1, 247, 69, 31, 6, 1, 60, 31, 6, 1, 252, 144, 31, 6, 1, 219, 165, 31, + 6, 1, 244, 116, 31, 6, 1, 249, 92, 31, 6, 1, 238, 26, 31, 6, 1, 217, 72, + 31, 6, 1, 217, 92, 31, 6, 1, 72, 31, 6, 1, 224, 192, 72, 31, 6, 1, 175, + 31, 6, 1, 246, 217, 31, 6, 1, 246, 205, 31, 6, 1, 246, 197, 31, 6, 1, 74, + 31, 6, 1, 229, 198, 31, 6, 1, 246, 148, 31, 6, 1, 246, 138, 31, 6, 1, + 222, 87, 31, 6, 1, 68, 31, 6, 1, 246, 244, 31, 6, 1, 155, 31, 6, 1, 221, + 50, 31, 6, 1, 251, 46, 31, 6, 1, 225, 25, 31, 6, 1, 224, 248, 31, 6, 1, + 243, 181, 55, 31, 6, 1, 218, 7, 31, 6, 1, 224, 21, 55, 31, 6, 1, 73, 31, + 6, 1, 217, 200, 31, 6, 1, 184, 31, 3, 1, 60, 31, 3, 1, 252, 144, 31, 3, + 1, 219, 165, 31, 3, 1, 244, 116, 31, 3, 1, 249, 92, 31, 3, 1, 238, 26, + 31, 3, 1, 217, 72, 31, 3, 1, 217, 92, 31, 3, 1, 72, 31, 3, 1, 224, 192, + 72, 31, 3, 1, 175, 31, 3, 1, 246, 217, 31, 3, 1, 246, 205, 31, 3, 1, 246, + 197, 31, 3, 1, 74, 31, 3, 1, 229, 198, 31, 3, 1, 246, 148, 31, 3, 1, 246, + 138, 31, 3, 1, 222, 87, 31, 3, 1, 68, 31, 3, 1, 246, 244, 31, 3, 1, 155, + 31, 3, 1, 221, 50, 31, 3, 1, 251, 46, 31, 3, 1, 225, 25, 31, 3, 1, 224, + 248, 31, 3, 1, 243, 181, 55, 31, 3, 1, 218, 7, 31, 3, 1, 224, 21, 55, 31, + 3, 1, 73, 31, 3, 1, 217, 200, 31, 3, 1, 184, 31, 3, 1, 238, 27, 2, 244, + 36, 31, 3, 1, 237, 166, 31, 3, 1, 248, 182, 31, 3, 1, 244, 78, 31, 3, 1, + 220, 99, 238, 26, 31, 3, 1, 247, 73, 31, 3, 1, 251, 211, 72, 31, 3, 1, + 217, 250, 31, 3, 1, 237, 114, 31, 3, 1, 235, 20, 31, 3, 1, 232, 15, 31, + 3, 1, 221, 46, 31, 3, 1, 236, 76, 31, 3, 1, 242, 107, 2, 244, 36, 31, 3, + 1, 224, 192, 68, 31, 3, 1, 247, 69, 31, 6, 1, 230, 143, 31, 3, 1, 230, + 143, 31, 6, 1, 218, 36, 31, 3, 1, 218, 36, 31, 6, 1, 237, 160, 73, 31, 3, + 1, 237, 160, 73, 31, 6, 1, 235, 25, 217, 178, 31, 3, 1, 235, 25, 217, + 178, 31, 6, 1, 237, 160, 235, 25, 217, 178, 31, 3, 1, 237, 160, 235, 25, + 217, 178, 31, 6, 1, 252, 76, 217, 178, 31, 3, 1, 252, 76, 217, 178, 31, + 6, 1, 237, 160, 252, 76, 217, 178, 31, 3, 1, 237, 160, 252, 76, 217, 178, + 31, 6, 1, 236, 11, 31, 3, 1, 236, 11, 31, 6, 1, 228, 212, 31, 3, 1, 228, + 212, 31, 6, 1, 245, 171, 31, 3, 1, 245, 171, 31, 6, 1, 237, 128, 31, 3, + 1, 237, 128, 31, 6, 1, 237, 129, 2, 51, 244, 37, 255, 0, 31, 3, 1, 237, + 129, 2, 51, 244, 37, 255, 0, 31, 6, 1, 220, 102, 31, 3, 1, 220, 102, 31, + 6, 1, 227, 57, 230, 143, 31, 3, 1, 227, 57, 230, 143, 31, 6, 1, 230, 144, + 2, 221, 160, 31, 3, 1, 230, 144, 2, 221, 160, 31, 6, 1, 230, 92, 31, 3, + 1, 230, 92, 31, 6, 1, 236, 37, 31, 3, 1, 236, 37, 31, 221, 230, 55, 36, + 31, 221, 160, 36, 31, 230, 28, 36, 31, 193, 229, 39, 36, 31, 209, 229, + 39, 36, 31, 229, 25, 36, 31, 242, 162, 221, 230, 55, 36, 31, 233, 162, + 55, 31, 6, 1, 224, 192, 242, 107, 2, 222, 135, 31, 3, 1, 224, 192, 242, + 107, 2, 222, 135, 31, 6, 1, 225, 63, 55, 31, 3, 1, 225, 63, 55, 31, 6, 1, + 246, 149, 2, 221, 202, 31, 3, 1, 246, 149, 2, 221, 202, 31, 6, 1, 244, + 117, 2, 220, 56, 31, 3, 1, 244, 117, 2, 220, 56, 31, 6, 1, 244, 117, 2, + 92, 31, 3, 1, 244, 117, 2, 92, 31, 6, 1, 244, 117, 2, 233, 193, 96, 31, + 3, 1, 244, 117, 2, 233, 193, 96, 31, 6, 1, 217, 73, 2, 249, 48, 31, 3, 1, + 217, 73, 2, 249, 48, 31, 6, 1, 217, 93, 2, 249, 48, 31, 3, 1, 217, 93, 2, + 249, 48, 31, 6, 1, 206, 2, 249, 48, 31, 3, 1, 206, 2, 249, 48, 31, 6, 1, + 206, 2, 69, 92, 31, 3, 1, 206, 2, 69, 92, 31, 6, 1, 206, 2, 92, 31, 3, 1, + 206, 2, 92, 31, 6, 1, 252, 186, 175, 31, 3, 1, 252, 186, 175, 31, 6, 1, + 246, 198, 2, 249, 48, 31, 3, 1, 246, 198, 2, 249, 48, 31, 6, 24, 246, + 198, 244, 116, 31, 3, 24, 246, 198, 244, 116, 31, 6, 1, 229, 199, 2, 233, + 193, 96, 31, 3, 1, 229, 199, 2, 233, 193, 96, 31, 6, 1, 255, 6, 155, 31, + 3, 1, 255, 6, 155, 31, 6, 1, 246, 139, 2, 249, 48, 31, 3, 1, 246, 139, 2, + 249, 48, 31, 6, 1, 222, 88, 2, 249, 48, 31, 3, 1, 222, 88, 2, 249, 48, + 31, 6, 1, 223, 130, 68, 31, 3, 1, 223, 130, 68, 31, 6, 1, 223, 130, 105, + 2, 92, 31, 3, 1, 223, 130, 105, 2, 92, 31, 6, 1, 243, 214, 2, 249, 48, + 31, 3, 1, 243, 214, 2, 249, 48, 31, 6, 24, 222, 88, 221, 50, 31, 3, 24, + 222, 88, 221, 50, 31, 6, 1, 251, 47, 2, 249, 48, 31, 3, 1, 251, 47, 2, + 249, 48, 31, 6, 1, 251, 47, 2, 69, 92, 31, 3, 1, 251, 47, 2, 69, 92, 31, + 6, 1, 224, 222, 31, 3, 1, 224, 222, 31, 6, 1, 255, 6, 251, 46, 31, 3, 1, + 255, 6, 251, 46, 31, 6, 1, 255, 6, 251, 47, 2, 249, 48, 31, 3, 1, 255, 6, + 251, 47, 2, 249, 48, 31, 1, 230, 22, 31, 6, 1, 217, 73, 2, 252, 8, 31, 3, + 1, 217, 73, 2, 252, 8, 31, 6, 1, 206, 2, 96, 31, 3, 1, 206, 2, 96, 31, 6, + 1, 246, 218, 2, 222, 135, 31, 3, 1, 246, 218, 2, 222, 135, 31, 6, 1, 246, + 198, 2, 96, 31, 3, 1, 246, 198, 2, 96, 31, 6, 1, 246, 198, 2, 222, 135, + 31, 3, 1, 246, 198, 2, 222, 135, 31, 6, 1, 236, 144, 251, 46, 31, 3, 1, + 236, 144, 251, 46, 31, 6, 1, 246, 206, 2, 222, 135, 31, 3, 1, 246, 206, + 2, 222, 135, 31, 3, 1, 230, 22, 31, 6, 1, 112, 2, 252, 8, 31, 3, 1, 112, + 2, 252, 8, 31, 6, 1, 112, 2, 249, 13, 31, 3, 1, 112, 2, 249, 13, 31, 6, + 24, 112, 238, 26, 31, 3, 24, 112, 238, 26, 31, 6, 1, 238, 27, 2, 252, 8, + 31, 3, 1, 238, 27, 2, 252, 8, 31, 6, 1, 226, 104, 31, 3, 1, 226, 104, 31, + 6, 1, 226, 105, 2, 249, 13, 31, 3, 1, 226, 105, 2, 249, 13, 31, 6, 1, + 217, 73, 2, 249, 13, 31, 3, 1, 217, 73, 2, 249, 13, 31, 6, 1, 217, 93, 2, + 249, 13, 31, 3, 1, 217, 93, 2, 249, 13, 31, 6, 1, 255, 6, 247, 73, 31, 3, + 1, 255, 6, 247, 73, 31, 6, 1, 242, 107, 2, 234, 115, 31, 3, 1, 242, 107, + 2, 234, 115, 31, 6, 1, 242, 107, 2, 249, 13, 31, 3, 1, 242, 107, 2, 249, + 13, 31, 6, 1, 142, 2, 249, 13, 31, 3, 1, 142, 2, 249, 13, 31, 6, 1, 252, + 196, 74, 31, 3, 1, 252, 196, 74, 31, 6, 1, 252, 196, 142, 2, 249, 13, 31, + 3, 1, 252, 196, 142, 2, 249, 13, 31, 6, 1, 178, 2, 249, 13, 31, 3, 1, + 178, 2, 249, 13, 31, 6, 1, 105, 2, 234, 115, 31, 3, 1, 105, 2, 234, 115, + 31, 6, 1, 105, 2, 249, 13, 31, 3, 1, 105, 2, 249, 13, 31, 6, 1, 105, 2, + 51, 168, 31, 3, 1, 105, 2, 51, 168, 31, 6, 1, 251, 47, 2, 249, 13, 31, 3, + 1, 251, 47, 2, 249, 13, 31, 6, 1, 244, 117, 2, 249, 48, 31, 3, 1, 244, + 117, 2, 249, 48, 31, 6, 1, 218, 8, 2, 249, 13, 31, 3, 1, 218, 8, 2, 249, + 13, 31, 6, 1, 244, 117, 2, 214, 25, 96, 31, 3, 1, 244, 117, 2, 214, 25, + 96, 31, 6, 1, 243, 214, 2, 96, 31, 3, 1, 243, 214, 2, 96, 31, 6, 1, 243, + 214, 2, 92, 31, 3, 1, 243, 214, 2, 92, 31, 6, 1, 236, 45, 249, 92, 31, 3, + 1, 236, 45, 249, 92, 31, 6, 1, 236, 45, 248, 182, 31, 3, 1, 236, 45, 248, + 182, 31, 6, 1, 236, 45, 217, 25, 31, 3, 1, 236, 45, 217, 25, 31, 6, 1, + 236, 45, 247, 67, 31, 3, 1, 236, 45, 247, 67, 31, 6, 1, 236, 45, 235, 20, + 31, 3, 1, 236, 45, 235, 20, 31, 6, 1, 236, 45, 232, 15, 31, 3, 1, 236, + 45, 232, 15, 31, 6, 1, 236, 45, 224, 67, 31, 3, 1, 236, 45, 224, 67, 31, + 6, 1, 236, 45, 221, 156, 31, 3, 1, 236, 45, 221, 156, 31, 6, 1, 210, 217, + 92, 31, 3, 1, 210, 217, 92, 31, 6, 1, 246, 218, 2, 96, 31, 3, 1, 246, + 218, 2, 96, 31, 6, 1, 235, 79, 31, 3, 1, 235, 79, 31, 6, 1, 227, 151, 31, + 3, 1, 227, 151, 31, 6, 1, 218, 65, 31, 3, 1, 218, 65, 31, 6, 1, 228, 155, + 31, 3, 1, 228, 155, 31, 6, 1, 218, 227, 31, 3, 1, 218, 227, 31, 6, 1, + 254, 165, 175, 31, 3, 1, 254, 165, 175, 31, 6, 1, 246, 218, 2, 233, 193, + 96, 31, 3, 1, 246, 218, 2, 233, 193, 96, 31, 6, 1, 246, 198, 2, 233, 193, + 96, 31, 3, 1, 246, 198, 2, 233, 193, 96, 31, 6, 1, 229, 199, 2, 249, 48, + 31, 3, 1, 229, 199, 2, 249, 48, 132, 6, 1, 253, 209, 132, 6, 1, 252, 114, + 132, 6, 1, 244, 93, 132, 6, 1, 249, 207, 132, 6, 1, 246, 254, 132, 6, 1, + 217, 114, 132, 6, 1, 246, 239, 132, 6, 1, 246, 123, 132, 6, 1, 101, 132, + 6, 1, 217, 72, 132, 6, 1, 237, 200, 132, 6, 1, 235, 23, 132, 6, 1, 218, + 133, 132, 6, 1, 251, 169, 132, 6, 1, 236, 168, 132, 6, 1, 243, 4, 132, 6, + 1, 237, 123, 132, 6, 1, 244, 124, 132, 6, 1, 251, 42, 132, 6, 1, 233, + 251, 132, 6, 1, 217, 250, 132, 6, 1, 231, 174, 132, 6, 1, 225, 25, 132, + 6, 1, 219, 72, 132, 6, 1, 251, 69, 132, 6, 1, 229, 187, 132, 6, 1, 237, + 100, 132, 6, 1, 203, 132, 6, 1, 226, 77, 132, 6, 1, 219, 96, 132, 6, 1, + 221, 158, 132, 6, 1, 227, 196, 132, 6, 1, 250, 182, 132, 6, 1, 217, 236, + 132, 6, 1, 229, 61, 132, 6, 1, 236, 178, 132, 6, 1, 230, 161, 132, 6, 1, + 245, 221, 132, 58, 1, 42, 144, 227, 93, 132, 254, 79, 132, 246, 201, 78, + 132, 246, 95, 78, 132, 250, 168, 132, 228, 82, 78, 132, 255, 7, 78, 132, + 3, 1, 253, 209, 132, 3, 1, 252, 114, 132, 3, 1, 244, 93, 132, 3, 1, 249, + 207, 132, 3, 1, 246, 254, 132, 3, 1, 217, 114, 132, 3, 1, 246, 239, 132, + 3, 1, 246, 123, 132, 3, 1, 101, 132, 3, 1, 217, 72, 132, 3, 1, 237, 200, + 132, 3, 1, 235, 23, 132, 3, 1, 218, 133, 132, 3, 1, 251, 169, 132, 3, 1, + 236, 168, 132, 3, 1, 243, 4, 132, 3, 1, 237, 123, 132, 3, 1, 244, 124, + 132, 3, 1, 251, 42, 132, 3, 1, 233, 251, 132, 3, 1, 217, 250, 132, 3, 1, + 231, 174, 132, 3, 1, 225, 25, 132, 3, 1, 219, 72, 132, 3, 1, 251, 69, + 132, 3, 1, 229, 187, 132, 3, 1, 237, 100, 132, 3, 1, 203, 132, 3, 1, 226, + 77, 132, 3, 1, 219, 96, 132, 3, 1, 221, 158, 132, 3, 1, 227, 196, 132, 3, + 1, 250, 182, 132, 3, 1, 217, 236, 132, 3, 1, 229, 61, 132, 3, 1, 236, + 178, 132, 3, 1, 230, 161, 132, 3, 1, 245, 221, 132, 3, 24, 246, 255, 217, + 236, 132, 245, 90, 223, 136, 132, 242, 121, 87, 255, 1, 246, 116, 87, + 255, 1, 226, 78, 87, 255, 1, 225, 12, 87, 255, 1, 217, 102, 228, 138, 87, + 255, 1, 217, 102, 244, 246, 87, 255, 1, 221, 168, 87, 255, 1, 227, 158, + 87, 255, 1, 217, 101, 87, 255, 1, 229, 219, 87, 255, 1, 218, 0, 87, 255, + 1, 222, 41, 87, 255, 1, 244, 171, 87, 255, 1, 244, 172, 233, 70, 87, 255, + 1, 244, 169, 87, 255, 1, 228, 139, 229, 242, 87, 255, 1, 222, 70, 244, + 185, 87, 255, 1, 229, 202, 87, 255, 1, 253, 239, 243, 206, 87, 255, 1, + 233, 79, 87, 255, 1, 234, 104, 87, 255, 1, 233, 245, 87, 255, 1, 233, + 246, 236, 179, 87, 255, 1, 249, 153, 87, 255, 1, 228, 150, 87, 255, 1, + 222, 70, 228, 134, 87, 255, 1, 218, 10, 252, 115, 217, 217, 87, 255, 1, + 230, 149, 87, 255, 1, 237, 241, 87, 255, 1, 249, 76, 87, 255, 1, 217, 31, + 87, 164, 234, 54, 250, 221, 87, 229, 32, 224, 224, 87, 229, 32, 243, 172, + 226, 78, 87, 229, 32, 243, 172, 229, 214, 87, 229, 32, 243, 172, 228, + 143, 87, 229, 32, 243, 94, 87, 229, 32, 221, 48, 87, 229, 32, 226, 78, + 87, 229, 32, 229, 214, 87, 229, 32, 228, 143, 87, 229, 32, 242, 254, 87, + 229, 32, 242, 255, 243, 174, 35, 219, 169, 87, 229, 32, 228, 85, 87, 229, + 32, 249, 194, 156, 234, 77, 87, 229, 32, 233, 237, 87, 228, 197, 234, 76, + 87, 229, 32, 227, 248, 87, 228, 197, 229, 220, 87, 229, 32, 224, 210, + 248, 145, 87, 229, 32, 224, 113, 248, 145, 87, 228, 197, 224, 22, 229, + 216, 87, 164, 220, 60, 248, 145, 87, 164, 234, 237, 248, 145, 87, 228, + 197, 231, 104, 243, 205, 87, 229, 32, 228, 144, 228, 138, 87, 1, 254, + 168, 87, 1, 252, 104, 87, 1, 244, 91, 87, 1, 249, 177, 87, 1, 243, 162, + 87, 1, 219, 169, 87, 1, 217, 95, 87, 1, 243, 128, 87, 1, 222, 50, 87, 1, + 217, 220, 87, 1, 39, 236, 246, 87, 1, 236, 246, 87, 1, 235, 152, 87, 1, + 39, 234, 1, 87, 1, 234, 1, 87, 1, 39, 231, 103, 87, 1, 231, 103, 87, 1, + 226, 145, 87, 1, 253, 207, 87, 1, 39, 229, 198, 87, 1, 229, 198, 87, 1, + 39, 221, 51, 87, 1, 221, 51, 87, 1, 228, 107, 87, 1, 227, 174, 87, 1, + 224, 209, 87, 1, 222, 102, 87, 24, 217, 248, 51, 219, 169, 87, 24, 217, + 248, 219, 170, 217, 220, 87, 24, 217, 248, 51, 217, 220, 87, 228, 197, + 244, 171, 87, 228, 197, 244, 169, 12, 54, 55, 12, 5, 226, 139, 12, 245, + 132, 234, 63, 12, 5, 226, 167, 254, 63, 250, 89, 227, 64, 254, 63, 245, + 110, 227, 64, 12, 227, 222, 254, 63, 229, 170, 233, 164, 55, 254, 63, + 229, 170, 222, 66, 221, 232, 55, 254, 214, 55, 12, 250, 168, 12, 249, + 141, 225, 54, 12, 229, 34, 219, 154, 55, 12, 5, 233, 147, 12, 5, 226, + 152, 254, 170, 218, 245, 12, 5, 254, 170, 254, 0, 12, 5, 227, 247, 254, + 169, 12, 5, 227, 251, 254, 155, 254, 116, 12, 5, 222, 128, 12, 3, 116, + 222, 137, 12, 3, 116, 24, 99, 2, 235, 161, 2, 218, 21, 12, 3, 116, 217, + 106, 12, 3, 245, 238, 12, 3, 249, 172, 12, 3, 236, 206, 12, 225, 67, 12, + 221, 78, 61, 228, 197, 78, 12, 228, 82, 78, 12, 1, 243, 192, 12, 1, 99, + 2, 234, 111, 50, 12, 1, 99, 2, 181, 50, 12, 1, 218, 234, 2, 181, 50, 12, + 1, 99, 2, 181, 56, 12, 1, 70, 2, 181, 50, 12, 1, 254, 168, 12, 1, 252, + 128, 12, 1, 222, 78, 234, 72, 12, 1, 222, 77, 12, 1, 222, 19, 12, 1, 237, + 112, 12, 1, 243, 202, 12, 1, 236, 146, 12, 1, 249, 183, 12, 1, 222, 29, + 12, 1, 227, 196, 12, 1, 217, 106, 12, 1, 226, 82, 12, 1, 224, 242, 12, 1, + 226, 170, 12, 1, 249, 202, 12, 1, 222, 137, 12, 1, 217, 109, 12, 1, 254, + 191, 12, 1, 244, 122, 12, 1, 236, 177, 2, 124, 188, 50, 12, 1, 236, 177, + 2, 148, 188, 56, 12, 1, 245, 241, 70, 2, 237, 170, 216, 216, 12, 1, 245, + 241, 70, 2, 124, 188, 50, 12, 1, 245, 241, 70, 2, 148, 188, 50, 12, 222, + 107, 12, 1, 245, 221, 12, 1, 228, 148, 12, 1, 236, 246, 12, 1, 235, 160, + 12, 1, 234, 14, 12, 1, 231, 193, 12, 1, 243, 146, 12, 1, 218, 233, 12, 1, + 99, 234, 92, 12, 1, 218, 21, 12, 245, 236, 12, 249, 170, 12, 236, 204, + 12, 245, 238, 12, 249, 172, 12, 236, 206, 12, 225, 16, 12, 223, 75, 12, + 234, 109, 50, 12, 181, 50, 12, 181, 56, 12, 223, 94, 254, 168, 12, 237, + 170, 249, 172, 12, 164, 231, 194, 244, 107, 12, 216, 255, 12, 29, 5, 3, + 220, 11, 50, 12, 29, 5, 237, 170, 3, 220, 11, 50, 12, 29, 5, 61, 56, 12, + 210, 249, 172, 12, 245, 239, 2, 124, 248, 143, 254, 63, 20, 217, 84, 254, + 63, 20, 107, 254, 63, 20, 103, 254, 63, 20, 160, 254, 63, 20, 154, 254, + 63, 20, 174, 254, 63, 20, 182, 254, 63, 20, 191, 254, 63, 20, 185, 254, + 63, 20, 190, 12, 229, 169, 55, 12, 249, 86, 225, 54, 12, 221, 230, 225, + 54, 12, 245, 170, 229, 30, 223, 156, 12, 1, 248, 144, 252, 128, 12, 1, + 248, 144, 228, 148, 12, 1, 223, 59, 254, 168, 12, 1, 99, 218, 246, 12, 1, + 99, 2, 218, 235, 181, 50, 12, 1, 99, 2, 218, 235, 181, 56, 12, 1, 116, + 243, 192, 12, 1, 116, 181, 254, 168, 12, 1, 116, 181, 218, 233, 12, 1, + 105, 2, 181, 50, 12, 1, 116, 181, 218, 21, 12, 1, 221, 23, 12, 1, 221, + 21, 12, 1, 252, 135, 12, 1, 222, 78, 2, 227, 93, 12, 1, 222, 78, 2, 148, + 188, 71, 247, 129, 12, 1, 229, 187, 12, 1, 222, 75, 12, 1, 252, 126, 12, + 1, 111, 2, 181, 50, 12, 1, 111, 2, 124, 188, 69, 50, 12, 1, 231, 70, 12, + 1, 247, 79, 12, 1, 111, 2, 148, 188, 50, 12, 1, 222, 91, 12, 1, 222, 89, + 12, 1, 249, 127, 12, 1, 249, 184, 2, 227, 93, 12, 1, 249, 184, 2, 61, 56, + 12, 1, 249, 184, 2, 61, 252, 118, 25, 3, 222, 137, 12, 1, 249, 189, 12, + 1, 249, 129, 12, 1, 247, 103, 12, 1, 249, 184, 2, 148, 188, 71, 247, 129, + 12, 1, 249, 184, 2, 245, 116, 188, 50, 12, 1, 227, 48, 12, 1, 227, 197, + 2, 3, 216, 216, 12, 1, 227, 197, 2, 227, 93, 12, 1, 227, 197, 2, 61, 56, + 12, 1, 227, 197, 2, 3, 220, 11, 56, 12, 1, 227, 197, 2, 61, 252, 118, 25, + 61, 50, 12, 1, 227, 197, 2, 124, 188, 50, 12, 1, 237, 109, 12, 1, 227, + 197, 2, 245, 116, 188, 50, 12, 1, 226, 83, 2, 61, 252, 118, 25, 61, 50, + 12, 1, 226, 83, 2, 148, 188, 56, 12, 1, 226, 83, 2, 148, 188, 252, 118, + 25, 148, 188, 50, 12, 1, 226, 171, 2, 124, 188, 56, 12, 1, 226, 171, 2, + 148, 188, 50, 12, 1, 222, 138, 2, 148, 188, 50, 12, 1, 254, 192, 2, 148, + 188, 50, 12, 1, 248, 144, 245, 221, 12, 1, 245, 222, 2, 61, 233, 104, 56, + 12, 1, 245, 222, 2, 61, 56, 12, 1, 219, 158, 12, 1, 245, 222, 2, 148, + 188, 56, 12, 1, 229, 185, 12, 1, 228, 149, 2, 61, 50, 12, 1, 228, 149, 2, + 148, 188, 50, 12, 1, 236, 176, 12, 1, 223, 33, 236, 246, 12, 1, 236, 247, + 2, 227, 93, 12, 1, 236, 247, 2, 61, 50, 12, 1, 232, 117, 12, 1, 236, 247, + 2, 148, 188, 56, 12, 1, 244, 243, 12, 1, 244, 244, 2, 227, 93, 12, 1, + 232, 82, 12, 1, 244, 244, 2, 124, 188, 56, 12, 1, 244, 9, 12, 1, 244, + 244, 2, 148, 188, 50, 12, 1, 235, 161, 2, 3, 216, 216, 12, 1, 235, 161, + 2, 61, 50, 12, 1, 235, 161, 2, 148, 188, 50, 12, 1, 235, 161, 2, 148, + 188, 56, 12, 1, 231, 194, 2, 61, 56, 12, 1, 231, 194, 244, 107, 12, 1, + 227, 78, 12, 1, 231, 194, 2, 227, 93, 12, 1, 231, 194, 2, 148, 188, 50, + 12, 1, 243, 147, 248, 163, 12, 1, 222, 92, 2, 61, 50, 12, 1, 243, 147, 2, + 70, 50, 12, 1, 243, 147, 244, 65, 12, 1, 243, 147, 244, 66, 2, 181, 50, + 12, 1, 222, 78, 234, 73, 244, 65, 12, 1, 218, 234, 2, 227, 93, 12, 1, + 236, 98, 230, 167, 12, 1, 230, 167, 12, 1, 68, 12, 1, 217, 200, 12, 1, + 236, 98, 217, 200, 12, 1, 218, 234, 2, 124, 188, 50, 12, 1, 219, 165, 12, + 1, 245, 241, 218, 21, 12, 1, 70, 2, 222, 135, 12, 1, 70, 2, 3, 216, 216, + 12, 1, 218, 234, 2, 61, 50, 12, 1, 73, 12, 1, 70, 2, 148, 188, 56, 12, 1, + 70, 252, 194, 12, 1, 70, 252, 195, 2, 181, 50, 12, 245, 90, 223, 136, 12, + 1, 254, 234, 12, 3, 116, 24, 226, 171, 2, 235, 161, 2, 99, 234, 92, 12, + 3, 116, 24, 228, 149, 2, 235, 161, 2, 99, 234, 92, 12, 3, 116, 62, 66, + 17, 12, 3, 116, 235, 161, 254, 168, 12, 3, 116, 237, 112, 12, 3, 116, + 148, 248, 143, 12, 3, 116, 226, 82, 12, 246, 190, 117, 253, 211, 12, 223, + 154, 117, 227, 20, 246, 218, 243, 91, 12, 3, 116, 227, 55, 217, 84, 12, + 3, 116, 220, 59, 227, 207, 217, 84, 12, 3, 116, 248, 144, 243, 160, 117, + 236, 146, 12, 3, 116, 62, 47, 17, 12, 3, 109, 226, 82, 12, 3, 116, 234, + 110, 12, 3, 218, 233, 12, 3, 218, 21, 12, 3, 116, 218, 21, 12, 3, 116, + 231, 193, 12, 229, 57, 117, 226, 159, 12, 246, 199, 251, 85, 109, 223, + 136, 12, 246, 199, 251, 85, 116, 223, 136, 12, 227, 55, 116, 223, 137, 2, + 245, 186, 251, 84, 12, 3, 109, 234, 14, 12, 1, 249, 184, 2, 237, 170, + 216, 216, 12, 1, 227, 197, 2, 237, 170, 216, 216, 246, 87, 254, 63, 20, + 217, 84, 246, 87, 254, 63, 20, 107, 246, 87, 254, 63, 20, 103, 246, 87, + 254, 63, 20, 160, 246, 87, 254, 63, 20, 154, 246, 87, 254, 63, 20, 174, + 246, 87, 254, 63, 20, 182, 246, 87, 254, 63, 20, 191, 246, 87, 254, 63, + 20, 185, 246, 87, 254, 63, 20, 190, 12, 1, 224, 243, 2, 61, 56, 12, 1, + 249, 203, 2, 61, 56, 12, 1, 244, 123, 2, 61, 56, 12, 5, 224, 112, 254, + 134, 12, 5, 224, 112, 229, 13, 233, 251, 12, 1, 243, 147, 2, 237, 170, + 216, 216, 166, 246, 190, 117, 229, 240, 166, 223, 55, 245, 90, 223, 136, + 166, 223, 96, 245, 90, 223, 136, 166, 223, 55, 250, 175, 166, 223, 96, + 250, 175, 166, 186, 250, 175, 166, 250, 176, 224, 64, 235, 115, 166, 250, + 176, 224, 64, 227, 109, 166, 223, 55, 250, 176, 224, 64, 235, 115, 166, + 223, 96, 250, 176, 224, 64, 227, 109, 166, 250, 134, 166, 243, 179, 230, + 179, 166, 243, 179, 233, 236, 166, 243, 179, 253, 253, 166, 255, 7, 78, + 166, 1, 254, 171, 166, 1, 223, 59, 254, 171, 166, 1, 252, 101, 166, 1, + 244, 235, 166, 1, 244, 236, 244, 216, 166, 1, 249, 180, 166, 1, 248, 144, + 249, 181, 227, 89, 166, 1, 243, 162, 166, 1, 218, 233, 166, 1, 217, 106, + 166, 1, 243, 126, 166, 1, 222, 46, 166, 1, 222, 47, 244, 216, 166, 1, + 217, 188, 166, 1, 217, 189, 243, 162, 166, 1, 236, 224, 166, 1, 235, 159, + 166, 1, 233, 161, 166, 1, 231, 103, 166, 1, 225, 60, 166, 1, 39, 225, 60, + 166, 1, 73, 166, 1, 229, 198, 166, 1, 210, 229, 198, 166, 1, 226, 168, + 166, 1, 228, 142, 166, 1, 227, 89, 166, 1, 224, 209, 166, 1, 222, 100, + 166, 1, 229, 159, 252, 90, 166, 1, 229, 159, 244, 120, 166, 1, 229, 159, + 249, 32, 166, 228, 203, 50, 166, 228, 203, 56, 166, 228, 203, 247, 142, + 166, 217, 15, 50, 166, 217, 15, 56, 166, 217, 15, 247, 142, 166, 227, + 219, 50, 166, 227, 219, 56, 166, 247, 143, 217, 22, 242, 241, 166, 247, + 143, 217, 22, 254, 117, 166, 243, 165, 50, 166, 243, 165, 56, 166, 243, + 164, 247, 142, 166, 246, 136, 50, 166, 246, 136, 56, 166, 226, 250, 166, + 245, 215, 248, 145, 166, 228, 63, 166, 227, 17, 166, 124, 69, 188, 50, + 166, 124, 69, 188, 56, 166, 148, 188, 50, 166, 148, 188, 56, 166, 230, + 177, 235, 44, 50, 166, 230, 177, 235, 44, 56, 166, 233, 58, 166, 252, + 193, 166, 1, 224, 19, 217, 78, 166, 1, 224, 19, 236, 139, 166, 1, 224, + 19, 245, 231, 12, 1, 252, 129, 2, 148, 188, 242, 191, 56, 12, 1, 252, + 129, 2, 61, 252, 118, 25, 148, 188, 50, 12, 1, 252, 129, 2, 148, 188, + 229, 28, 220, 53, 56, 12, 1, 252, 129, 2, 148, 188, 229, 28, 220, 53, + 252, 118, 25, 124, 188, 50, 12, 1, 252, 129, 2, 124, 188, 252, 118, 25, + 61, 50, 12, 1, 252, 129, 2, 237, 170, 3, 220, 11, 56, 12, 1, 252, 129, 2, + 3, 216, 216, 12, 1, 111, 2, 124, 188, 50, 12, 1, 111, 2, 148, 188, 229, + 28, 220, 53, 56, 12, 1, 249, 184, 2, 124, 188, 219, 102, 252, 118, 25, 3, + 222, 137, 12, 1, 249, 184, 2, 237, 170, 3, 220, 11, 56, 12, 1, 227, 197, + 2, 92, 12, 1, 226, 83, 2, 245, 116, 188, 50, 12, 1, 254, 192, 2, 124, + 188, 50, 12, 1, 254, 192, 2, 148, 188, 229, 28, 247, 130, 50, 12, 1, 254, + 192, 2, 124, 188, 219, 102, 50, 12, 1, 245, 222, 2, 124, 188, 56, 12, 1, + 245, 222, 2, 148, 188, 229, 28, 220, 53, 56, 12, 1, 236, 177, 2, 61, 50, + 12, 1, 236, 177, 2, 148, 188, 50, 12, 1, 236, 177, 2, 148, 188, 229, 28, + 220, 53, 56, 12, 1, 62, 2, 61, 50, 12, 1, 62, 2, 61, 56, 12, 1, 231, 194, + 2, 124, 188, 56, 12, 1, 231, 194, 2, 3, 222, 137, 12, 1, 231, 194, 2, 3, + 216, 216, 12, 1, 235, 161, 2, 135, 12, 1, 227, 197, 2, 124, 188, 219, + 102, 50, 12, 1, 227, 197, 2, 181, 50, 12, 1, 226, 83, 2, 124, 188, 219, + 102, 50, 12, 1, 111, 2, 3, 12, 1, 222, 138, 56, 12, 1, 111, 2, 3, 12, 1, + 222, 138, 25, 124, 248, 143, 12, 1, 226, 83, 2, 3, 12, 1, 222, 138, 25, + 124, 248, 143, 12, 1, 227, 197, 2, 3, 12, 1, 222, 138, 25, 124, 248, 143, + 12, 1, 111, 2, 3, 12, 1, 222, 138, 50, 12, 1, 99, 2, 246, 87, 254, 63, + 20, 124, 50, 12, 1, 99, 2, 246, 87, 254, 63, 20, 148, 50, 12, 1, 245, + 241, 70, 2, 246, 87, 254, 63, 20, 124, 50, 12, 1, 245, 241, 70, 2, 246, + 87, 254, 63, 20, 148, 50, 12, 1, 245, 241, 70, 2, 246, 87, 254, 63, 20, + 245, 116, 56, 12, 1, 218, 234, 2, 246, 87, 254, 63, 20, 124, 50, 12, 1, + 218, 234, 2, 246, 87, 254, 63, 20, 148, 50, 12, 1, 70, 252, 195, 2, 246, + 87, 254, 63, 20, 124, 50, 12, 1, 70, 252, 195, 2, 246, 87, 254, 63, 20, + 148, 50, 12, 1, 111, 2, 246, 87, 254, 63, 20, 245, 116, 56, 12, 1, 226, + 83, 2, 246, 87, 254, 63, 20, 245, 116, 50, 12, 1, 226, 83, 2, 237, 170, + 216, 216, 12, 1, 236, 247, 2, 124, 188, 50, 222, 32, 1, 243, 211, 222, + 32, 1, 224, 251, 222, 32, 1, 231, 192, 222, 32, 1, 228, 0, 222, 32, 1, + 252, 236, 222, 32, 1, 235, 76, 222, 32, 1, 237, 3, 222, 32, 1, 254, 160, + 222, 32, 1, 219, 187, 222, 32, 1, 234, 13, 222, 32, 1, 246, 6, 222, 32, + 1, 249, 35, 222, 32, 1, 222, 34, 222, 32, 1, 235, 185, 222, 32, 1, 244, + 252, 222, 32, 1, 244, 71, 222, 32, 1, 226, 81, 222, 32, 1, 249, 139, 222, + 32, 1, 217, 98, 222, 32, 1, 222, 101, 222, 32, 1, 218, 76, 222, 32, 1, + 229, 209, 222, 32, 1, 237, 116, 222, 32, 1, 251, 49, 222, 32, 1, 221, 28, + 222, 32, 1, 243, 120, 222, 32, 1, 236, 148, 222, 32, 1, 222, 33, 222, 32, + 1, 217, 113, 222, 32, 1, 224, 241, 222, 32, 1, 226, 174, 222, 32, 1, 249, + 205, 222, 32, 1, 101, 222, 32, 1, 217, 21, 222, 32, 1, 254, 189, 222, 32, + 1, 244, 121, 222, 32, 1, 228, 152, 222, 32, 1, 219, 5, 222, 32, 255, 8, + 222, 32, 255, 23, 222, 32, 242, 68, 222, 32, 246, 249, 222, 32, 220, 118, + 222, 32, 230, 126, 222, 32, 247, 1, 222, 32, 246, 82, 222, 32, 230, 176, + 222, 32, 230, 184, 222, 32, 223, 75, 222, 32, 1, 232, 235, 231, 242, 20, + 217, 84, 231, 242, 20, 107, 231, 242, 20, 103, 231, 242, 20, 160, 231, + 242, 20, 154, 231, 242, 20, 174, 231, 242, 20, 182, 231, 242, 20, 191, + 231, 242, 20, 185, 231, 242, 20, 190, 231, 242, 1, 60, 231, 242, 1, 246, + 250, 231, 242, 1, 72, 231, 242, 1, 73, 231, 242, 1, 68, 231, 242, 1, 230, + 127, 231, 242, 1, 74, 231, 242, 1, 249, 195, 231, 242, 1, 207, 231, 242, + 1, 252, 237, 231, 242, 1, 187, 231, 242, 1, 222, 155, 231, 242, 1, 237, + 123, 231, 242, 1, 251, 69, 231, 242, 1, 249, 207, 231, 242, 1, 203, 231, + 242, 1, 227, 52, 231, 242, 1, 226, 177, 231, 242, 1, 244, 204, 231, 242, + 1, 246, 8, 231, 242, 1, 175, 231, 242, 1, 235, 188, 231, 242, 1, 232, + 238, 218, 184, 231, 242, 1, 196, 231, 242, 1, 231, 77, 231, 242, 1, 208, + 231, 242, 1, 155, 231, 242, 1, 219, 7, 231, 242, 1, 184, 231, 242, 1, + 231, 78, 218, 184, 231, 242, 1, 237, 52, 237, 123, 231, 242, 1, 237, 52, + 251, 69, 231, 242, 1, 237, 52, 203, 231, 242, 36, 224, 192, 116, 221, + 132, 231, 242, 36, 224, 192, 109, 221, 132, 231, 242, 36, 224, 192, 227, + 88, 221, 132, 231, 242, 36, 171, 249, 47, 221, 132, 231, 242, 36, 171, + 116, 221, 132, 231, 242, 36, 171, 109, 221, 132, 231, 242, 36, 171, 227, + 88, 221, 132, 231, 242, 36, 232, 209, 78, 231, 242, 36, 51, 61, 50, 231, + 242, 116, 145, 254, 79, 231, 242, 109, 145, 254, 79, 231, 242, 16, 230, + 128, 249, 58, 231, 242, 16, 244, 203, 231, 242, 250, 168, 231, 242, 246, + 95, 78, 231, 242, 235, 166, 213, 1, 254, 173, 213, 1, 252, 60, 213, 1, + 244, 234, 213, 1, 249, 182, 213, 1, 237, 133, 213, 1, 252, 236, 213, 1, + 217, 87, 213, 1, 237, 140, 213, 1, 221, 161, 213, 1, 217, 177, 213, 1, + 237, 4, 213, 1, 235, 183, 213, 1, 233, 161, 213, 1, 231, 103, 213, 1, + 224, 110, 213, 1, 237, 223, 213, 1, 245, 203, 213, 1, 221, 53, 213, 1, + 228, 79, 213, 1, 227, 89, 213, 1, 225, 9, 213, 1, 222, 151, 213, 164, + 237, 223, 213, 164, 237, 222, 213, 164, 230, 172, 213, 164, 249, 193, + 213, 58, 1, 246, 160, 217, 177, 213, 164, 246, 160, 217, 177, 213, 29, 5, + 171, 73, 213, 29, 5, 73, 213, 29, 5, 230, 72, 255, 58, 213, 29, 5, 171, + 255, 58, 213, 29, 5, 255, 58, 213, 29, 5, 230, 72, 60, 213, 29, 5, 171, + 60, 213, 29, 5, 60, 213, 58, 1, 224, 192, 60, 213, 29, 5, 224, 192, 60, + 213, 29, 5, 171, 68, 213, 29, 5, 68, 213, 58, 1, 72, 213, 29, 5, 171, 72, + 213, 29, 5, 72, 213, 29, 5, 74, 213, 29, 5, 223, 75, 213, 164, 232, 128, + 213, 228, 197, 232, 128, 213, 228, 197, 254, 211, 213, 228, 197, 254, + 122, 213, 228, 197, 252, 181, 213, 228, 197, 253, 240, 213, 228, 197, + 224, 201, 213, 255, 7, 78, 213, 228, 197, 234, 4, 228, 113, 213, 228, + 197, 217, 29, 213, 228, 197, 228, 113, 213, 228, 197, 217, 112, 213, 228, + 197, 220, 233, 213, 228, 197, 254, 36, 213, 228, 197, 224, 22, 234, 55, + 213, 228, 197, 254, 113, 80, 5, 237, 170, 251, 146, 80, 5, 251, 146, 80, + 5, 254, 95, 80, 5, 219, 77, 80, 1, 224, 192, 60, 80, 1, 60, 80, 1, 255, + 58, 80, 1, 72, 80, 1, 237, 255, 80, 1, 68, 80, 1, 220, 23, 80, 1, 167, + 152, 80, 1, 167, 153, 80, 1, 251, 149, 73, 80, 1, 224, 192, 73, 80, 1, + 73, 80, 1, 254, 196, 80, 1, 251, 149, 74, 80, 1, 224, 192, 74, 80, 1, 74, + 80, 1, 253, 232, 80, 1, 175, 80, 1, 236, 149, 80, 1, 245, 0, 80, 1, 244, + 125, 80, 1, 232, 115, 80, 1, 251, 169, 80, 1, 251, 69, 80, 1, 237, 123, + 80, 1, 237, 103, 80, 1, 231, 77, 80, 1, 221, 29, 80, 1, 221, 19, 80, 1, + 249, 132, 80, 1, 249, 116, 80, 1, 231, 217, 80, 1, 222, 155, 80, 1, 222, + 35, 80, 1, 249, 207, 80, 1, 249, 36, 80, 1, 208, 80, 1, 231, 208, 80, 1, + 187, 80, 1, 229, 141, 80, 1, 252, 237, 80, 1, 252, 94, 80, 1, 196, 80, 1, + 184, 80, 1, 203, 80, 1, 227, 52, 80, 1, 235, 188, 80, 1, 235, 17, 80, 1, + 235, 16, 80, 1, 219, 189, 80, 1, 225, 25, 80, 1, 223, 218, 80, 1, 226, + 177, 80, 1, 155, 80, 5, 231, 112, 80, 5, 253, 219, 80, 29, 5, 255, 58, + 80, 29, 5, 72, 80, 29, 5, 237, 255, 80, 29, 5, 68, 80, 29, 5, 220, 23, + 80, 29, 5, 167, 152, 80, 29, 5, 167, 227, 53, 80, 29, 5, 251, 149, 73, + 80, 29, 5, 224, 192, 73, 80, 29, 5, 73, 80, 29, 5, 254, 196, 80, 29, 5, + 251, 149, 74, 80, 29, 5, 224, 192, 74, 80, 29, 5, 74, 80, 29, 5, 253, + 232, 80, 5, 219, 82, 80, 29, 5, 228, 232, 73, 80, 230, 146, 80, 223, 125, + 5, 220, 112, 80, 223, 125, 5, 254, 97, 80, 244, 37, 255, 0, 80, 254, 248, + 255, 0, 80, 29, 5, 251, 149, 171, 73, 80, 1, 228, 155, 80, 1, 236, 133, + 80, 1, 244, 114, 80, 1, 217, 114, 80, 1, 249, 121, 80, 1, 227, 151, 80, + 1, 246, 8, 80, 1, 217, 165, 80, 1, 167, 227, 53, 80, 1, 167, 235, 18, 80, + 29, 5, 167, 153, 80, 29, 5, 167, 235, 18, 80, 249, 167, 80, 51, 249, 167, + 80, 20, 217, 84, 80, 20, 107, 80, 20, 103, 80, 20, 160, 80, 20, 154, 80, + 20, 174, 80, 20, 182, 80, 20, 191, 80, 20, 185, 80, 20, 190, 80, 255, 7, + 55, 80, 5, 116, 223, 253, 248, 145, 80, 1, 251, 149, 60, 80, 1, 217, 80, + 80, 1, 106, 184, 80, 1, 244, 160, 80, 1, 237, 87, 80, 1, 244, 73, 223, + 136, 80, 1, 249, 122, 80, 1, 252, 178, 130, 5, 251, 146, 130, 5, 254, 95, + 130, 5, 219, 77, 130, 1, 60, 130, 1, 255, 58, 130, 1, 72, 130, 1, 237, + 255, 130, 1, 68, 130, 1, 220, 23, 130, 1, 167, 152, 130, 1, 167, 153, + 130, 1, 73, 130, 1, 254, 196, 130, 1, 74, 130, 1, 253, 232, 130, 1, 175, + 130, 1, 236, 149, 130, 1, 245, 0, 130, 1, 244, 125, 130, 1, 232, 115, + 130, 1, 251, 169, 130, 1, 251, 69, 130, 1, 237, 123, 130, 1, 237, 103, + 130, 1, 231, 77, 130, 1, 221, 29, 130, 1, 221, 19, 130, 1, 249, 132, 130, + 1, 249, 116, 130, 1, 231, 217, 130, 1, 222, 155, 130, 1, 222, 35, 130, 1, + 249, 207, 130, 1, 249, 36, 130, 1, 208, 130, 1, 187, 130, 1, 229, 141, + 130, 1, 252, 237, 130, 1, 252, 94, 130, 1, 196, 130, 1, 184, 130, 1, 203, + 130, 1, 235, 188, 130, 1, 225, 25, 130, 1, 223, 218, 130, 1, 226, 177, + 130, 1, 155, 130, 5, 231, 112, 130, 5, 253, 219, 130, 29, 5, 255, 58, + 130, 29, 5, 72, 130, 29, 5, 237, 255, 130, 29, 5, 68, 130, 29, 5, 220, + 23, 130, 29, 5, 167, 152, 130, 29, 5, 167, 227, 53, 130, 29, 5, 73, 130, + 29, 5, 254, 196, 130, 29, 5, 74, 130, 29, 5, 253, 232, 130, 5, 219, 82, + 130, 1, 236, 141, 222, 155, 130, 253, 233, 235, 94, 78, 130, 1, 227, 52, + 130, 1, 227, 151, 130, 1, 217, 165, 130, 1, 167, 227, 53, 130, 1, 167, + 235, 18, 130, 29, 5, 167, 153, 130, 29, 5, 167, 235, 18, 130, 20, 217, + 84, 130, 20, 107, 130, 20, 103, 130, 20, 160, 130, 20, 154, 130, 20, 174, + 130, 20, 182, 130, 20, 191, 130, 20, 185, 130, 20, 190, 130, 1, 228, 3, + 2, 233, 193, 249, 10, 130, 1, 228, 3, 2, 234, 237, 249, 10, 130, 227, 4, + 78, 130, 227, 4, 55, 130, 250, 78, 231, 106, 107, 130, 250, 78, 231, 106, + 103, 130, 250, 78, 231, 106, 160, 130, 250, 78, 231, 106, 154, 130, 250, + 78, 231, 106, 131, 235, 88, 222, 28, 222, 23, 249, 56, 130, 250, 78, 249, + 57, 224, 77, 130, 237, 141, 130, 244, 227, 78, 163, 5, 254, 243, 252, 72, + 163, 5, 252, 72, 163, 5, 219, 77, 163, 1, 60, 163, 1, 255, 58, 163, 1, + 72, 163, 1, 237, 255, 163, 1, 68, 163, 1, 220, 23, 163, 1, 246, 250, 163, + 1, 254, 196, 163, 1, 230, 127, 163, 1, 253, 232, 163, 1, 175, 163, 1, + 236, 149, 163, 1, 245, 0, 163, 1, 244, 125, 163, 1, 232, 115, 163, 1, + 251, 169, 163, 1, 251, 69, 163, 1, 237, 123, 163, 1, 237, 103, 163, 1, + 231, 77, 163, 1, 221, 29, 163, 1, 221, 19, 163, 1, 249, 132, 163, 1, 249, + 116, 163, 1, 231, 217, 163, 1, 222, 155, 163, 1, 222, 35, 163, 1, 249, + 207, 163, 1, 249, 36, 163, 1, 208, 163, 1, 187, 163, 1, 229, 141, 163, 1, + 252, 237, 163, 1, 252, 94, 163, 1, 196, 163, 1, 184, 163, 1, 203, 163, 1, + 235, 188, 163, 1, 235, 17, 163, 1, 219, 189, 163, 1, 225, 25, 163, 1, + 226, 177, 163, 1, 155, 163, 5, 231, 112, 163, 29, 5, 255, 58, 163, 29, 5, + 72, 163, 29, 5, 237, 255, 163, 29, 5, 68, 163, 29, 5, 220, 23, 163, 29, + 5, 246, 250, 163, 29, 5, 254, 196, 163, 29, 5, 230, 127, 163, 29, 5, 253, + 232, 163, 5, 219, 82, 163, 5, 220, 114, 163, 1, 236, 133, 163, 1, 244, + 114, 163, 1, 217, 114, 163, 1, 227, 52, 163, 1, 246, 8, 163, 20, 217, 84, + 163, 20, 107, 163, 20, 103, 163, 20, 160, 163, 20, 154, 163, 20, 174, + 163, 20, 182, 163, 20, 191, 163, 20, 185, 163, 20, 190, 163, 221, 167, + 163, 254, 242, 163, 237, 155, 163, 220, 46, 163, 246, 224, 230, 132, 163, + 5, 218, 54, 150, 5, 251, 146, 150, 5, 254, 95, 150, 5, 219, 77, 150, 1, + 60, 150, 1, 255, 58, 150, 1, 72, 150, 1, 237, 255, 150, 1, 68, 150, 1, + 220, 23, 150, 1, 167, 152, 150, 1, 167, 153, 150, 29, 251, 149, 73, 150, + 1, 73, 150, 1, 254, 196, 150, 29, 251, 149, 74, 150, 1, 74, 150, 1, 253, + 232, 150, 1, 175, 150, 1, 236, 149, 150, 1, 245, 0, 150, 1, 244, 125, + 150, 1, 232, 115, 150, 1, 251, 169, 150, 1, 251, 69, 150, 1, 237, 123, + 150, 1, 237, 103, 150, 1, 231, 77, 150, 1, 221, 29, 150, 1, 221, 19, 150, + 1, 249, 132, 150, 1, 249, 116, 150, 1, 231, 217, 150, 1, 222, 155, 150, + 1, 222, 35, 150, 1, 249, 207, 150, 1, 249, 36, 150, 1, 208, 150, 1, 187, + 150, 1, 229, 141, 150, 1, 252, 237, 150, 1, 252, 94, 150, 1, 196, 150, 1, + 184, 150, 1, 203, 150, 1, 235, 188, 150, 1, 235, 17, 150, 1, 219, 189, + 150, 1, 225, 25, 150, 1, 223, 218, 150, 1, 226, 177, 150, 1, 155, 150, 5, + 231, 112, 150, 5, 253, 219, 150, 29, 5, 255, 58, 150, 29, 5, 72, 150, 29, + 5, 237, 255, 150, 29, 5, 68, 150, 29, 5, 220, 23, 150, 29, 5, 167, 152, + 150, 29, 5, 167, 227, 53, 150, 29, 5, 251, 149, 73, 150, 29, 5, 73, 150, + 29, 5, 254, 196, 150, 29, 5, 251, 149, 74, 150, 29, 5, 74, 150, 29, 5, + 253, 232, 150, 5, 219, 82, 150, 230, 146, 150, 1, 167, 227, 53, 150, 1, + 167, 235, 18, 150, 29, 5, 167, 153, 150, 29, 5, 167, 235, 18, 150, 20, + 217, 84, 150, 20, 107, 150, 20, 103, 150, 20, 160, 150, 20, 154, 150, 20, + 174, 150, 20, 182, 150, 20, 191, 150, 20, 185, 150, 20, 190, 150, 227, 4, + 55, 147, 5, 251, 146, 147, 5, 254, 95, 147, 5, 219, 77, 147, 1, 60, 147, + 1, 255, 58, 147, 1, 72, 147, 1, 237, 255, 147, 1, 68, 147, 1, 220, 23, + 147, 1, 167, 152, 147, 1, 167, 153, 147, 1, 73, 147, 1, 254, 196, 147, 1, + 74, 147, 1, 253, 232, 147, 1, 175, 147, 1, 236, 149, 147, 1, 245, 0, 147, + 1, 244, 125, 147, 1, 232, 115, 147, 1, 251, 169, 147, 1, 251, 69, 147, 1, + 237, 123, 147, 1, 237, 103, 147, 1, 231, 77, 147, 1, 221, 29, 147, 1, + 221, 19, 147, 1, 249, 132, 147, 1, 249, 116, 147, 1, 231, 217, 147, 1, + 222, 155, 147, 1, 222, 35, 147, 1, 249, 207, 147, 1, 249, 36, 147, 1, + 208, 147, 1, 187, 147, 1, 229, 141, 147, 1, 252, 237, 147, 1, 252, 94, + 147, 1, 196, 147, 1, 184, 147, 1, 203, 147, 1, 235, 188, 147, 1, 235, 17, + 147, 1, 219, 189, 147, 1, 225, 25, 147, 1, 223, 218, 147, 1, 226, 177, + 147, 1, 155, 147, 5, 231, 112, 147, 5, 253, 219, 147, 29, 5, 255, 58, + 147, 29, 5, 72, 147, 29, 5, 237, 255, 147, 29, 5, 68, 147, 29, 5, 220, + 23, 147, 29, 5, 167, 152, 147, 29, 5, 167, 227, 53, 147, 29, 5, 73, 147, + 29, 5, 254, 196, 147, 29, 5, 74, 147, 29, 5, 253, 232, 147, 5, 219, 82, + 147, 254, 197, 235, 94, 78, 147, 253, 233, 235, 94, 78, 147, 1, 227, 52, + 147, 1, 227, 151, 147, 1, 217, 165, 147, 1, 167, 227, 53, 147, 1, 167, + 235, 18, 147, 29, 5, 167, 153, 147, 29, 5, 167, 235, 18, 147, 20, 217, + 84, 147, 20, 107, 147, 20, 103, 147, 20, 160, 147, 20, 154, 147, 20, 174, + 147, 20, 182, 147, 20, 191, 147, 20, 185, 147, 20, 190, 147, 237, 141, + 147, 1, 219, 7, 176, 5, 254, 95, 176, 5, 219, 77, 176, 1, 60, 176, 1, + 255, 58, 176, 1, 72, 176, 1, 237, 255, 176, 1, 68, 176, 1, 220, 23, 176, + 1, 73, 176, 1, 246, 250, 176, 1, 254, 196, 176, 1, 74, 176, 1, 230, 127, + 176, 1, 253, 232, 176, 1, 175, 176, 1, 232, 115, 176, 1, 251, 169, 176, + 1, 237, 123, 176, 1, 231, 77, 176, 1, 221, 29, 176, 1, 231, 217, 176, 1, + 222, 155, 176, 1, 208, 176, 1, 231, 208, 176, 1, 187, 176, 1, 196, 176, + 1, 184, 176, 1, 203, 176, 1, 227, 52, 176, 1, 235, 188, 176, 1, 235, 17, + 176, 1, 235, 16, 176, 1, 219, 189, 176, 1, 225, 25, 176, 1, 223, 218, + 176, 1, 226, 177, 176, 1, 155, 176, 29, 5, 255, 58, 176, 29, 5, 72, 176, + 29, 5, 237, 255, 176, 29, 5, 68, 176, 29, 5, 220, 23, 176, 29, 5, 73, + 176, 29, 5, 246, 250, 176, 29, 5, 254, 196, 176, 29, 5, 74, 176, 29, 5, + 230, 127, 176, 29, 5, 253, 232, 176, 5, 219, 82, 176, 230, 146, 176, 253, + 233, 235, 94, 78, 176, 20, 217, 84, 176, 20, 107, 176, 20, 103, 176, 20, + 160, 176, 20, 154, 176, 20, 174, 176, 20, 182, 176, 20, 191, 176, 20, + 185, 176, 20, 190, 176, 54, 222, 65, 176, 54, 131, 242, 161, 176, 54, + 131, 221, 231, 176, 249, 137, 55, 176, 233, 121, 55, 176, 218, 23, 55, + 176, 249, 89, 55, 176, 250, 107, 55, 176, 254, 14, 71, 55, 176, 227, 4, + 55, 176, 54, 55, 129, 5, 251, 146, 129, 5, 254, 95, 129, 5, 219, 77, 129, + 1, 60, 129, 1, 255, 58, 129, 1, 72, 129, 1, 237, 255, 129, 1, 68, 129, 1, + 220, 23, 129, 1, 167, 152, 129, 1, 167, 153, 129, 1, 73, 129, 1, 246, + 250, 129, 1, 254, 196, 129, 1, 74, 129, 1, 230, 127, 129, 1, 253, 232, + 129, 1, 175, 129, 1, 236, 149, 129, 1, 245, 0, 129, 1, 244, 125, 129, 1, + 232, 115, 129, 1, 251, 169, 129, 1, 251, 69, 129, 1, 237, 123, 129, 1, + 237, 103, 129, 1, 231, 77, 129, 1, 221, 29, 129, 1, 221, 19, 129, 1, 249, + 132, 129, 1, 249, 116, 129, 1, 231, 217, 129, 1, 222, 155, 129, 1, 222, + 35, 129, 1, 249, 207, 129, 1, 249, 36, 129, 1, 208, 129, 1, 187, 129, 1, + 229, 141, 129, 1, 252, 237, 129, 1, 252, 94, 129, 1, 196, 129, 1, 184, + 129, 1, 203, 129, 1, 227, 52, 129, 1, 235, 188, 129, 1, 235, 17, 129, 1, + 219, 189, 129, 1, 225, 25, 129, 1, 223, 218, 129, 1, 226, 177, 129, 1, + 155, 129, 5, 253, 219, 129, 29, 5, 255, 58, 129, 29, 5, 72, 129, 29, 5, + 237, 255, 129, 29, 5, 68, 129, 29, 5, 220, 23, 129, 29, 5, 167, 152, 129, + 29, 5, 167, 227, 53, 129, 29, 5, 73, 129, 29, 5, 246, 250, 129, 29, 5, + 254, 196, 129, 29, 5, 74, 129, 29, 5, 230, 127, 129, 29, 5, 253, 232, + 129, 5, 219, 82, 129, 235, 94, 78, 129, 254, 197, 235, 94, 78, 129, 1, + 221, 55, 129, 1, 247, 74, 129, 1, 167, 227, 53, 129, 1, 167, 235, 18, + 129, 29, 5, 167, 153, 129, 29, 5, 167, 235, 18, 129, 20, 217, 84, 129, + 20, 107, 129, 20, 103, 129, 20, 160, 129, 20, 154, 129, 20, 174, 129, 20, + 182, 129, 20, 191, 129, 20, 185, 129, 20, 190, 129, 245, 108, 20, 217, + 85, 35, 230, 169, 229, 9, 117, 154, 129, 245, 108, 20, 131, 35, 230, 169, + 229, 9, 117, 154, 129, 245, 108, 20, 124, 35, 230, 169, 229, 9, 117, 154, + 129, 245, 108, 20, 148, 35, 230, 169, 229, 9, 117, 154, 129, 245, 108, + 20, 131, 35, 246, 104, 229, 9, 117, 154, 129, 245, 108, 20, 124, 35, 246, + 104, 229, 9, 117, 154, 129, 245, 108, 20, 148, 35, 246, 104, 229, 9, 117, + 154, 129, 5, 220, 229, 141, 5, 254, 95, 141, 5, 219, 77, 141, 1, 60, 141, + 1, 255, 58, 141, 1, 72, 141, 1, 237, 255, 141, 1, 68, 141, 1, 220, 23, + 141, 1, 167, 152, 141, 1, 167, 153, 141, 1, 73, 141, 1, 246, 250, 141, 1, + 254, 196, 141, 1, 74, 141, 1, 230, 127, 141, 1, 253, 232, 141, 1, 175, + 141, 1, 236, 149, 141, 1, 245, 0, 141, 1, 244, 125, 141, 1, 232, 115, + 141, 1, 251, 169, 141, 1, 251, 69, 141, 1, 237, 123, 141, 1, 237, 103, + 141, 1, 231, 77, 141, 1, 221, 29, 141, 1, 221, 19, 141, 1, 249, 132, 141, + 1, 249, 116, 141, 1, 231, 217, 141, 1, 222, 155, 141, 1, 222, 35, 141, 1, + 249, 207, 141, 1, 249, 36, 141, 1, 208, 141, 1, 187, 141, 1, 229, 141, + 141, 1, 252, 237, 141, 1, 252, 94, 141, 1, 196, 141, 1, 184, 141, 1, 203, + 141, 1, 227, 52, 141, 1, 235, 188, 141, 1, 235, 17, 141, 1, 219, 189, + 141, 1, 225, 25, 141, 1, 223, 218, 141, 1, 226, 177, 141, 1, 155, 141, 5, + 231, 112, 141, 5, 253, 219, 141, 29, 5, 255, 58, 141, 29, 5, 72, 141, 29, + 5, 237, 255, 141, 29, 5, 68, 141, 29, 5, 220, 23, 141, 29, 5, 167, 152, + 141, 29, 5, 167, 227, 53, 141, 29, 5, 73, 141, 29, 5, 246, 250, 141, 29, + 5, 254, 196, 141, 29, 5, 74, 141, 29, 5, 230, 127, 141, 29, 5, 253, 232, + 141, 5, 219, 82, 141, 235, 94, 78, 141, 254, 197, 235, 94, 78, 141, 1, + 246, 8, 141, 1, 167, 227, 53, 141, 1, 167, 235, 18, 141, 29, 5, 167, 153, + 141, 29, 5, 167, 235, 18, 141, 20, 217, 84, 141, 20, 107, 141, 20, 103, + 141, 20, 160, 141, 20, 154, 141, 20, 174, 141, 20, 182, 141, 20, 191, + 141, 20, 185, 141, 20, 190, 141, 5, 237, 92, 141, 5, 220, 61, 123, 5, + 254, 95, 123, 5, 219, 77, 123, 1, 60, 123, 1, 255, 58, 123, 1, 72, 123, + 1, 237, 255, 123, 1, 68, 123, 1, 220, 23, 123, 1, 167, 152, 123, 1, 167, + 153, 123, 1, 73, 123, 1, 246, 250, 123, 1, 254, 196, 123, 1, 74, 123, 1, + 230, 127, 123, 1, 253, 232, 123, 1, 175, 123, 1, 236, 149, 123, 1, 245, + 0, 123, 1, 244, 125, 123, 1, 232, 115, 123, 1, 251, 169, 123, 1, 251, 69, + 123, 1, 237, 123, 123, 1, 237, 103, 123, 1, 231, 77, 123, 1, 221, 29, + 123, 1, 221, 19, 123, 1, 249, 132, 123, 1, 249, 116, 123, 1, 231, 217, + 123, 1, 222, 155, 123, 1, 222, 35, 123, 1, 249, 207, 123, 1, 249, 36, + 123, 1, 208, 123, 1, 187, 123, 1, 229, 141, 123, 1, 252, 237, 123, 1, + 252, 94, 123, 1, 196, 123, 1, 184, 123, 1, 203, 123, 1, 227, 52, 123, 1, + 235, 188, 123, 1, 235, 17, 123, 1, 235, 16, 123, 1, 219, 189, 123, 1, + 225, 25, 123, 1, 223, 218, 123, 1, 226, 177, 123, 1, 155, 123, 5, 253, + 219, 123, 29, 5, 255, 58, 123, 29, 5, 72, 123, 29, 5, 237, 255, 123, 29, + 5, 68, 123, 29, 5, 220, 23, 123, 29, 5, 167, 152, 123, 29, 5, 167, 227, + 53, 123, 29, 5, 73, 123, 29, 5, 246, 250, 123, 29, 5, 254, 196, 123, 29, + 5, 74, 123, 29, 5, 230, 127, 123, 29, 5, 253, 232, 123, 5, 219, 82, 123, + 253, 233, 235, 94, 78, 123, 1, 167, 227, 53, 123, 1, 167, 235, 18, 123, + 29, 5, 167, 153, 123, 29, 5, 167, 235, 18, 123, 20, 217, 84, 123, 20, + 107, 123, 20, 103, 123, 20, 160, 123, 20, 154, 123, 20, 174, 123, 20, + 182, 123, 20, 191, 123, 20, 185, 123, 20, 190, 123, 54, 222, 65, 123, 54, + 131, 242, 161, 123, 54, 131, 221, 231, 123, 245, 108, 131, 228, 89, 123, + 245, 108, 131, 243, 194, 123, 245, 108, 148, 228, 87, 123, 249, 141, 78, + 123, 1, 251, 23, 231, 218, 123, 1, 251, 23, 207, 123, 1, 251, 23, 227, + 53, 123, 1, 251, 23, 153, 123, 1, 251, 23, 235, 18, 123, 1, 251, 23, 237, + 17, 162, 5, 254, 94, 162, 5, 219, 76, 162, 1, 253, 210, 162, 1, 255, 13, + 162, 1, 254, 215, 162, 1, 254, 229, 162, 1, 237, 132, 162, 1, 237, 254, + 162, 1, 220, 15, 162, 1, 220, 17, 162, 1, 237, 153, 162, 1, 237, 154, + 162, 1, 237, 240, 162, 1, 237, 242, 162, 1, 246, 83, 162, 1, 246, 246, + 162, 1, 254, 184, 162, 1, 230, 62, 162, 1, 230, 122, 162, 1, 253, 222, + 162, 1, 254, 149, 236, 189, 162, 1, 234, 105, 236, 189, 162, 1, 254, 149, + 244, 207, 162, 1, 234, 105, 244, 207, 162, 1, 236, 228, 232, 232, 162, 1, + 226, 135, 244, 207, 162, 1, 254, 149, 251, 117, 162, 1, 234, 105, 251, + 117, 162, 1, 254, 149, 237, 115, 162, 1, 234, 105, 237, 115, 162, 1, 222, + 149, 232, 232, 162, 1, 222, 149, 226, 134, 232, 233, 162, 1, 226, 135, + 237, 115, 162, 1, 254, 149, 221, 27, 162, 1, 234, 105, 221, 27, 162, 1, + 254, 149, 249, 123, 162, 1, 234, 105, 249, 123, 162, 1, 233, 56, 232, + 198, 162, 1, 226, 135, 249, 123, 162, 1, 254, 149, 222, 95, 162, 1, 234, + 105, 222, 95, 162, 1, 254, 149, 249, 136, 162, 1, 234, 105, 249, 136, + 162, 1, 249, 164, 232, 198, 162, 1, 226, 135, 249, 136, 162, 1, 254, 149, + 229, 204, 162, 1, 234, 105, 229, 204, 162, 1, 254, 149, 252, 179, 162, 1, + 234, 105, 252, 179, 162, 1, 234, 44, 162, 1, 254, 136, 252, 179, 162, 1, + 218, 29, 162, 1, 227, 221, 162, 1, 249, 164, 235, 131, 162, 1, 219, 167, + 162, 1, 222, 149, 226, 117, 162, 1, 233, 56, 226, 117, 162, 1, 249, 164, + 226, 117, 162, 1, 243, 166, 162, 1, 233, 56, 235, 131, 162, 1, 245, 233, + 162, 5, 254, 174, 162, 29, 5, 254, 224, 162, 29, 5, 236, 158, 254, 231, + 162, 29, 5, 248, 241, 254, 231, 162, 29, 5, 236, 158, 237, 150, 162, 29, + 5, 248, 241, 237, 150, 162, 29, 5, 236, 158, 230, 42, 162, 29, 5, 248, + 241, 230, 42, 162, 29, 5, 244, 245, 162, 29, 5, 236, 46, 162, 29, 5, 248, + 241, 236, 46, 162, 29, 5, 236, 48, 249, 73, 162, 29, 5, 236, 47, 243, + 212, 254, 224, 162, 29, 5, 236, 47, 243, 212, 248, 241, 254, 224, 162, + 29, 5, 236, 47, 243, 212, 244, 206, 162, 29, 5, 244, 206, 162, 29, 5, + 248, 241, 244, 245, 162, 29, 5, 248, 241, 244, 206, 162, 228, 197, 235, + 254, 140, 126, 236, 58, 236, 243, 140, 126, 236, 126, 236, 145, 140, 126, + 236, 126, 236, 119, 140, 126, 236, 126, 236, 116, 140, 126, 236, 126, + 236, 123, 140, 126, 236, 126, 227, 240, 140, 126, 232, 85, 232, 74, 140, + 126, 251, 12, 251, 60, 140, 126, 251, 12, 251, 20, 140, 126, 251, 12, + 251, 59, 140, 126, 224, 27, 224, 26, 140, 126, 251, 12, 251, 9, 140, 126, + 217, 232, 217, 239, 140, 126, 248, 168, 251, 66, 140, 126, 199, 229, 213, + 140, 126, 221, 240, 222, 27, 140, 126, 221, 240, 232, 215, 140, 126, 221, + 240, 229, 111, 140, 126, 231, 205, 232, 134, 140, 126, 248, 168, 249, 74, + 140, 126, 199, 222, 116, 140, 126, 221, 240, 221, 219, 140, 126, 221, + 240, 222, 31, 140, 126, 221, 240, 221, 237, 140, 126, 231, 205, 231, 144, + 140, 126, 252, 42, 252, 220, 140, 126, 229, 38, 229, 58, 140, 126, 229, + 119, 229, 113, 140, 126, 245, 140, 246, 8, 140, 126, 229, 119, 229, 135, + 140, 126, 245, 140, 245, 245, 140, 126, 229, 119, 226, 143, 140, 126, + 233, 137, 196, 140, 126, 217, 232, 218, 55, 140, 126, 227, 76, 227, 21, + 140, 126, 227, 22, 140, 126, 235, 13, 235, 36, 140, 126, 234, 231, 140, + 126, 218, 188, 219, 3, 140, 126, 224, 27, 226, 155, 140, 126, 224, 27, + 227, 0, 140, 126, 224, 27, 223, 102, 140, 126, 243, 5, 243, 95, 140, 126, + 235, 13, 250, 252, 140, 126, 142, 254, 123, 140, 126, 243, 5, 231, 200, + 140, 126, 230, 30, 140, 126, 226, 130, 60, 140, 126, 234, 100, 243, 190, + 140, 126, 226, 130, 255, 58, 140, 126, 226, 130, 254, 140, 140, 126, 226, + 130, 72, 140, 126, 226, 130, 237, 255, 140, 126, 226, 130, 220, 110, 140, + 126, 226, 130, 220, 108, 140, 126, 226, 130, 68, 140, 126, 226, 130, 220, + 23, 140, 126, 229, 121, 140, 250, 78, 16, 252, 221, 140, 126, 226, 130, + 73, 140, 126, 226, 130, 254, 234, 140, 126, 226, 130, 74, 140, 126, 226, + 130, 254, 197, 234, 96, 140, 126, 226, 130, 254, 197, 234, 97, 140, 126, + 235, 164, 140, 126, 234, 93, 140, 126, 234, 94, 140, 126, 234, 100, 246, + 223, 140, 126, 234, 100, 221, 239, 140, 126, 234, 100, 221, 93, 140, 126, + 234, 100, 251, 50, 140, 126, 222, 25, 140, 126, 232, 36, 140, 126, 218, + 49, 140, 126, 245, 135, 140, 20, 217, 84, 140, 20, 107, 140, 20, 103, + 140, 20, 160, 140, 20, 154, 140, 20, 174, 140, 20, 182, 140, 20, 191, + 140, 20, 185, 140, 20, 190, 140, 126, 254, 121, 140, 126, 236, 124, 202, + 1, 236, 57, 202, 1, 236, 126, 223, 66, 202, 1, 236, 126, 222, 121, 202, + 1, 232, 84, 202, 1, 250, 182, 202, 1, 224, 27, 222, 121, 202, 1, 231, 56, + 202, 1, 248, 167, 202, 1, 101, 202, 1, 221, 240, 223, 66, 202, 1, 221, + 240, 222, 121, 202, 1, 231, 204, 202, 1, 252, 41, 202, 1, 229, 37, 202, + 1, 229, 119, 223, 66, 202, 1, 245, 140, 222, 121, 202, 1, 229, 119, 222, + 121, 202, 1, 245, 140, 223, 66, 202, 1, 233, 136, 202, 1, 217, 231, 202, + 1, 235, 13, 235, 36, 202, 1, 235, 13, 234, 246, 202, 1, 218, 187, 202, 1, + 224, 27, 223, 66, 202, 1, 243, 5, 223, 66, 202, 1, 74, 202, 1, 243, 5, + 222, 121, 202, 246, 208, 202, 29, 5, 60, 202, 29, 5, 234, 100, 236, 233, + 202, 29, 5, 255, 58, 202, 29, 5, 254, 140, 202, 29, 5, 72, 202, 29, 5, + 237, 255, 202, 29, 5, 218, 90, 202, 29, 5, 217, 166, 202, 29, 5, 68, 202, + 29, 5, 220, 23, 202, 29, 5, 234, 100, 236, 44, 202, 225, 62, 5, 235, 12, + 202, 225, 62, 5, 231, 56, 202, 29, 5, 73, 202, 29, 5, 246, 237, 202, 29, + 5, 74, 202, 29, 5, 253, 212, 202, 29, 5, 254, 196, 202, 236, 58, 235, + 188, 202, 145, 234, 100, 246, 223, 202, 145, 234, 100, 221, 239, 202, + 145, 234, 100, 221, 205, 202, 145, 234, 100, 251, 123, 202, 251, 151, 78, + 202, 232, 43, 202, 20, 217, 84, 202, 20, 107, 202, 20, 103, 202, 20, 160, + 202, 20, 154, 202, 20, 174, 202, 20, 182, 202, 20, 191, 202, 20, 185, + 202, 20, 190, 202, 243, 5, 231, 204, 202, 243, 5, 233, 136, 59, 4, 230, + 146, 59, 164, 244, 19, 217, 243, 233, 213, 221, 61, 60, 59, 164, 244, 19, + 217, 243, 233, 213, 255, 144, 227, 80, 252, 146, 196, 59, 164, 244, 19, + 217, 243, 233, 213, 255, 144, 244, 19, 221, 45, 196, 59, 164, 66, 217, + 243, 233, 213, 234, 27, 196, 59, 164, 250, 194, 217, 243, 233, 213, 225, + 31, 196, 59, 164, 251, 135, 217, 243, 233, 213, 229, 112, 225, 19, 196, + 59, 164, 217, 243, 233, 213, 221, 45, 225, 19, 196, 59, 164, 226, 115, + 225, 18, 59, 164, 251, 251, 217, 243, 233, 212, 59, 164, 252, 55, 224, + 197, 217, 243, 233, 212, 59, 164, 237, 173, 221, 44, 59, 164, 249, 68, + 221, 45, 251, 250, 59, 164, 225, 18, 59, 164, 231, 60, 225, 18, 59, 164, + 221, 45, 225, 18, 59, 164, 231, 60, 221, 45, 225, 18, 59, 164, 227, 96, + 251, 39, 223, 229, 225, 18, 59, 164, 227, 154, 244, 44, 225, 18, 59, 164, + 251, 135, 255, 148, 227, 26, 234, 26, 171, 251, 154, 59, 164, 244, 19, + 221, 44, 59, 235, 5, 5, 251, 67, 227, 25, 59, 235, 5, 5, 235, 77, 227, + 25, 59, 253, 248, 5, 225, 28, 244, 194, 255, 149, 227, 25, 59, 253, 248, + 5, 255, 146, 187, 59, 253, 248, 5, 226, 95, 221, 40, 59, 5, 227, 218, + 248, 179, 244, 193, 59, 5, 227, 218, 248, 179, 244, 70, 59, 5, 227, 218, + 248, 179, 244, 20, 59, 5, 227, 218, 232, 230, 244, 193, 59, 5, 227, 218, + 232, 230, 244, 70, 59, 5, 227, 218, 248, 179, 227, 218, 232, 229, 59, 20, + 217, 84, 59, 20, 107, 59, 20, 103, 59, 20, 160, 59, 20, 154, 59, 20, 174, + 59, 20, 182, 59, 20, 191, 59, 20, 185, 59, 20, 190, 59, 20, 144, 107, 59, + 20, 144, 103, 59, 20, 144, 160, 59, 20, 144, 154, 59, 20, 144, 174, 59, + 20, 144, 182, 59, 20, 144, 191, 59, 20, 144, 185, 59, 20, 144, 190, 59, + 20, 144, 217, 84, 59, 164, 251, 253, 227, 25, 59, 164, 232, 109, 251, + 204, 231, 68, 217, 23, 59, 164, 251, 135, 255, 148, 227, 26, 251, 205, + 233, 172, 251, 154, 59, 164, 232, 109, 251, 204, 225, 29, 227, 25, 59, + 164, 251, 47, 233, 212, 59, 164, 221, 56, 255, 145, 59, 164, 244, 8, 227, + 26, 243, 228, 59, 164, 244, 8, 227, 26, 243, 234, 59, 164, 254, 124, 236, + 140, 243, 228, 59, 164, 254, 124, 236, 140, 243, 234, 59, 5, 218, 42, + 221, 43, 59, 5, 234, 75, 221, 43, 59, 1, 175, 59, 1, 236, 149, 59, 1, + 245, 0, 59, 1, 244, 125, 59, 1, 232, 115, 59, 1, 251, 169, 59, 1, 251, + 69, 59, 1, 237, 123, 59, 1, 231, 77, 59, 1, 221, 29, 59, 1, 221, 19, 59, + 1, 249, 132, 59, 1, 249, 116, 59, 1, 231, 217, 59, 1, 222, 155, 59, 1, + 222, 35, 59, 1, 249, 207, 59, 1, 249, 36, 59, 1, 208, 59, 1, 187, 59, 1, + 229, 141, 59, 1, 252, 237, 59, 1, 252, 94, 59, 1, 196, 59, 1, 221, 55, + 59, 1, 221, 47, 59, 1, 247, 74, 59, 1, 247, 70, 59, 1, 219, 7, 59, 1, + 217, 80, 59, 1, 217, 114, 59, 1, 255, 151, 59, 1, 184, 59, 1, 203, 59, 1, + 235, 188, 59, 1, 225, 25, 59, 1, 223, 218, 59, 1, 226, 177, 59, 1, 155, + 59, 1, 60, 59, 1, 236, 10, 59, 1, 245, 167, 203, 59, 1, 236, 74, 59, 1, + 227, 52, 59, 29, 5, 255, 58, 59, 29, 5, 72, 59, 29, 5, 237, 255, 59, 29, + 5, 68, 59, 29, 5, 220, 23, 59, 29, 5, 167, 152, 59, 29, 5, 167, 227, 53, + 59, 29, 5, 167, 153, 59, 29, 5, 167, 235, 18, 59, 29, 5, 73, 59, 29, 5, + 246, 250, 59, 29, 5, 74, 59, 29, 5, 230, 127, 59, 5, 227, 81, 223, 104, + 232, 116, 227, 75, 59, 5, 227, 80, 252, 145, 59, 29, 5, 210, 72, 59, 29, + 5, 210, 237, 255, 59, 5, 231, 68, 217, 24, 232, 236, 249, 207, 59, 5, + 224, 37, 235, 124, 59, 164, 243, 196, 59, 164, 230, 21, 59, 5, 235, 127, + 227, 25, 59, 5, 218, 46, 227, 25, 59, 5, 235, 128, 221, 56, 251, 154, 59, + 5, 234, 28, 251, 154, 59, 5, 244, 22, 251, 155, 227, 152, 59, 5, 244, 22, + 234, 20, 227, 152, 59, 223, 97, 1, 175, 59, 223, 97, 1, 236, 149, 59, + 223, 97, 1, 245, 0, 59, 223, 97, 1, 244, 125, 59, 223, 97, 1, 232, 115, + 59, 223, 97, 1, 251, 169, 59, 223, 97, 1, 251, 69, 59, 223, 97, 1, 237, + 123, 59, 223, 97, 1, 231, 77, 59, 223, 97, 1, 221, 29, 59, 223, 97, 1, + 221, 19, 59, 223, 97, 1, 249, 132, 59, 223, 97, 1, 249, 116, 59, 223, 97, + 1, 231, 217, 59, 223, 97, 1, 222, 155, 59, 223, 97, 1, 222, 35, 59, 223, + 97, 1, 249, 207, 59, 223, 97, 1, 249, 36, 59, 223, 97, 1, 208, 59, 223, + 97, 1, 187, 59, 223, 97, 1, 229, 141, 59, 223, 97, 1, 252, 237, 59, 223, + 97, 1, 252, 94, 59, 223, 97, 1, 196, 59, 223, 97, 1, 221, 55, 59, 223, + 97, 1, 221, 47, 59, 223, 97, 1, 247, 74, 59, 223, 97, 1, 247, 70, 59, + 223, 97, 1, 219, 7, 59, 223, 97, 1, 217, 80, 59, 223, 97, 1, 217, 114, + 59, 223, 97, 1, 255, 151, 59, 223, 97, 1, 184, 59, 223, 97, 1, 203, 59, + 223, 97, 1, 235, 188, 59, 223, 97, 1, 225, 25, 59, 223, 97, 1, 223, 218, + 59, 223, 97, 1, 226, 177, 59, 223, 97, 1, 155, 59, 223, 97, 1, 60, 59, + 223, 97, 1, 236, 10, 59, 223, 97, 1, 245, 167, 219, 7, 59, 223, 97, 1, + 245, 167, 184, 59, 223, 97, 1, 245, 167, 203, 59, 236, 8, 227, 23, 236, + 149, 59, 236, 8, 227, 23, 236, 150, 251, 205, 233, 172, 251, 154, 59, + 251, 144, 5, 106, 252, 140, 59, 251, 144, 5, 170, 252, 140, 59, 251, 144, + 5, 251, 145, 222, 86, 59, 251, 144, 5, 226, 114, 255, 150, 59, 16, 247, + 121, 251, 248, 59, 16, 227, 217, 227, 82, 59, 16, 230, 35, 244, 192, 59, + 16, 227, 217, 227, 83, 227, 154, 244, 43, 59, 16, 229, 112, 187, 59, 16, + 231, 190, 251, 248, 59, 16, 231, 190, 251, 249, 231, 60, 255, 147, 59, + 16, 231, 190, 251, 249, 244, 21, 255, 147, 59, 16, 231, 190, 251, 249, + 251, 205, 255, 147, 59, 5, 227, 218, 232, 230, 227, 218, 248, 178, 59, 5, + 227, 218, 232, 230, 244, 20, 59, 164, 251, 252, 224, 197, 244, 104, 233, + 213, 227, 153, 59, 164, 233, 138, 217, 243, 244, 104, 233, 213, 227, 153, + 59, 164, 231, 60, 221, 44, 59, 164, 66, 252, 12, 227, 77, 217, 243, 233, + 213, 234, 27, 196, 59, 164, 250, 194, 252, 12, 227, 77, 217, 243, 233, + 213, 225, 31, 196, 227, 108, 223, 38, 55, 235, 114, 223, 38, 55, 227, + 108, 223, 38, 5, 2, 248, 143, 235, 114, 223, 38, 5, 2, 248, 143, 63, 1, + 175, 63, 1, 236, 149, 63, 1, 245, 0, 63, 1, 244, 125, 63, 1, 232, 115, + 63, 1, 251, 169, 63, 1, 251, 69, 63, 1, 237, 123, 63, 1, 237, 103, 63, 1, + 231, 77, 63, 1, 231, 206, 63, 1, 221, 29, 63, 1, 221, 19, 63, 1, 249, + 132, 63, 1, 249, 116, 63, 1, 231, 217, 63, 1, 222, 155, 63, 1, 222, 35, + 63, 1, 249, 207, 63, 1, 249, 36, 63, 1, 208, 63, 1, 187, 63, 1, 229, 141, + 63, 1, 252, 237, 63, 1, 252, 94, 63, 1, 196, 63, 1, 184, 63, 1, 203, 63, + 1, 235, 188, 63, 1, 219, 7, 63, 1, 226, 177, 63, 1, 155, 63, 1, 235, 17, + 63, 1, 60, 63, 1, 225, 10, 60, 63, 1, 72, 63, 1, 237, 255, 63, 1, 68, 63, + 1, 220, 23, 63, 1, 73, 63, 1, 233, 128, 73, 63, 1, 74, 63, 1, 253, 232, + 63, 29, 5, 222, 123, 255, 58, 63, 29, 5, 255, 58, 63, 29, 5, 72, 63, 29, + 5, 237, 255, 63, 29, 5, 68, 63, 29, 5, 220, 23, 63, 29, 5, 73, 63, 29, 5, + 254, 196, 63, 29, 5, 233, 128, 237, 255, 63, 29, 5, 233, 128, 74, 63, 29, + 5, 178, 50, 63, 5, 254, 95, 63, 5, 61, 56, 63, 5, 219, 77, 63, 5, 219, + 82, 63, 5, 254, 11, 63, 250, 147, 5, 128, 184, 63, 250, 147, 5, 128, 203, + 63, 250, 147, 5, 128, 219, 7, 63, 250, 147, 5, 128, 155, 63, 1, 244, 32, + 226, 177, 63, 20, 217, 84, 63, 20, 107, 63, 20, 103, 63, 20, 160, 63, 20, + 154, 63, 20, 174, 63, 20, 182, 63, 20, 191, 63, 20, 185, 63, 20, 190, 63, + 5, 235, 25, 226, 86, 63, 5, 226, 86, 63, 16, 235, 9, 63, 16, 250, 163, + 63, 16, 254, 213, 63, 16, 244, 178, 63, 1, 225, 25, 63, 1, 223, 218, 63, + 1, 167, 152, 63, 1, 167, 227, 53, 63, 1, 167, 153, 63, 1, 167, 235, 18, + 63, 29, 5, 167, 152, 63, 29, 5, 167, 227, 53, 63, 29, 5, 167, 153, 63, + 29, 5, 167, 235, 18, 63, 1, 233, 128, 232, 115, 63, 1, 233, 128, 237, + 103, 63, 1, 233, 128, 252, 178, 63, 1, 233, 128, 252, 174, 63, 250, 147, + 5, 233, 128, 128, 208, 63, 250, 147, 5, 233, 128, 128, 196, 63, 250, 147, + 5, 233, 128, 128, 235, 188, 63, 1, 225, 30, 236, 213, 225, 25, 63, 29, 5, + 225, 30, 236, 213, 246, 115, 63, 145, 164, 225, 30, 236, 213, 243, 170, + 63, 145, 164, 225, 30, 236, 213, 236, 185, 229, 118, 63, 1, 218, 215, + 228, 175, 236, 213, 222, 35, 63, 1, 218, 215, 228, 175, 236, 213, 228, + 181, 63, 29, 5, 218, 215, 228, 175, 236, 213, 246, 115, 63, 29, 5, 218, + 215, 228, 175, 236, 213, 220, 110, 63, 5, 218, 215, 228, 175, 236, 213, + 221, 131, 63, 5, 218, 215, 228, 175, 236, 213, 221, 130, 63, 5, 218, 215, + 228, 175, 236, 213, 221, 129, 63, 5, 218, 215, 228, 175, 236, 213, 221, + 128, 63, 5, 218, 215, 228, 175, 236, 213, 221, 127, 63, 1, 247, 4, 228, + 175, 236, 213, 231, 217, 63, 1, 247, 4, 228, 175, 236, 213, 217, 173, 63, + 1, 247, 4, 228, 175, 236, 213, 244, 106, 63, 29, 5, 244, 188, 236, 213, + 72, 63, 29, 5, 236, 190, 230, 167, 63, 29, 5, 236, 190, 68, 63, 29, 5, + 236, 190, 246, 250, 63, 1, 225, 10, 175, 63, 1, 225, 10, 236, 149, 63, 1, + 225, 10, 245, 0, 63, 1, 225, 10, 251, 169, 63, 1, 225, 10, 217, 114, 63, + 1, 225, 10, 231, 77, 63, 1, 225, 10, 249, 207, 63, 1, 225, 10, 208, 63, + 1, 225, 10, 229, 141, 63, 1, 225, 10, 246, 8, 63, 1, 225, 10, 252, 237, + 63, 1, 225, 10, 222, 35, 63, 1, 225, 10, 155, 63, 250, 147, 5, 225, 10, + 128, 219, 7, 63, 29, 5, 225, 10, 255, 58, 63, 29, 5, 225, 10, 73, 63, 29, + 5, 225, 10, 178, 50, 63, 29, 5, 225, 10, 39, 218, 90, 63, 5, 225, 10, + 221, 130, 63, 5, 225, 10, 221, 129, 63, 5, 225, 10, 221, 127, 63, 5, 225, + 10, 221, 126, 63, 5, 225, 10, 250, 115, 221, 130, 63, 5, 225, 10, 250, + 115, 221, 129, 63, 5, 225, 10, 250, 115, 246, 200, 221, 132, 63, 1, 227, + 12, 230, 26, 246, 8, 63, 5, 227, 12, 230, 26, 221, 127, 63, 225, 10, 20, + 217, 84, 63, 225, 10, 20, 107, 63, 225, 10, 20, 103, 63, 225, 10, 20, + 160, 63, 225, 10, 20, 154, 63, 225, 10, 20, 174, 63, 225, 10, 20, 182, + 63, 225, 10, 20, 191, 63, 225, 10, 20, 185, 63, 225, 10, 20, 190, 63, 5, + 236, 143, 221, 131, 63, 5, 236, 143, 221, 129, 63, 29, 5, 254, 186, 60, + 63, 29, 5, 254, 186, 254, 196, 63, 16, 225, 10, 107, 63, 16, 225, 10, + 246, 94, 95, 6, 1, 254, 131, 95, 6, 1, 252, 209, 95, 6, 1, 244, 230, 95, + 6, 1, 248, 153, 95, 6, 1, 246, 197, 95, 6, 1, 219, 85, 95, 6, 1, 217, 87, + 95, 6, 1, 222, 119, 95, 6, 1, 237, 223, 95, 6, 1, 236, 233, 95, 6, 1, + 235, 143, 95, 6, 1, 234, 86, 95, 6, 1, 232, 211, 95, 6, 1, 230, 138, 95, + 6, 1, 229, 243, 95, 6, 1, 217, 76, 95, 6, 1, 227, 249, 95, 6, 1, 226, + 140, 95, 6, 1, 222, 112, 95, 6, 1, 220, 87, 95, 6, 1, 229, 134, 95, 6, 1, + 236, 138, 95, 6, 1, 244, 119, 95, 6, 1, 228, 140, 95, 6, 1, 224, 209, 95, + 6, 1, 251, 22, 95, 6, 1, 251, 154, 95, 6, 1, 237, 91, 95, 6, 1, 250, 224, + 95, 6, 1, 251, 56, 95, 6, 1, 218, 136, 95, 6, 1, 237, 101, 95, 6, 1, 243, + 208, 95, 6, 1, 243, 162, 95, 6, 1, 243, 108, 95, 6, 1, 218, 227, 95, 6, + 1, 243, 182, 95, 6, 1, 243, 2, 95, 1, 254, 131, 95, 1, 252, 209, 95, 1, + 244, 230, 95, 1, 248, 153, 95, 1, 246, 197, 95, 1, 219, 85, 95, 1, 217, + 87, 95, 1, 222, 119, 95, 1, 237, 223, 95, 1, 236, 233, 95, 1, 235, 143, + 95, 1, 234, 86, 95, 1, 232, 211, 95, 1, 230, 138, 95, 1, 229, 243, 95, 1, + 217, 76, 95, 1, 227, 249, 95, 1, 226, 140, 95, 1, 222, 112, 95, 1, 220, + 87, 95, 1, 229, 134, 95, 1, 236, 138, 95, 1, 244, 119, 95, 1, 228, 140, + 95, 1, 224, 209, 95, 1, 251, 22, 95, 1, 251, 154, 95, 1, 237, 91, 95, 1, + 250, 224, 95, 1, 251, 56, 95, 1, 218, 136, 95, 1, 237, 101, 95, 1, 243, + 208, 95, 1, 243, 162, 95, 1, 243, 108, 95, 1, 218, 227, 95, 1, 243, 182, + 95, 1, 243, 2, 95, 1, 245, 203, 95, 1, 217, 233, 95, 1, 246, 210, 95, 1, + 215, 244, 230, 95, 1, 254, 191, 95, 229, 241, 225, 54, 58, 1, 95, 232, + 211, 22, 91, 236, 86, 22, 91, 223, 211, 22, 91, 232, 55, 22, 91, 221, + 192, 22, 91, 223, 200, 22, 91, 227, 140, 22, 91, 233, 187, 22, 91, 229, + 99, 22, 91, 223, 208, 22, 91, 224, 104, 22, 91, 223, 205, 22, 91, 238, + 22, 22, 91, 250, 230, 22, 91, 223, 215, 22, 91, 251, 29, 22, 91, 236, + 128, 22, 91, 222, 0, 22, 91, 229, 127, 22, 91, 243, 106, 22, 91, 232, 51, + 22, 91, 223, 209, 22, 91, 232, 45, 22, 91, 232, 49, 22, 91, 221, 189, 22, + 91, 227, 128, 22, 91, 223, 207, 22, 91, 227, 138, 22, 91, 236, 217, 22, + 91, 233, 180, 22, 91, 236, 220, 22, 91, 229, 94, 22, 91, 229, 92, 22, 91, + 229, 80, 22, 91, 229, 88, 22, 91, 229, 86, 22, 91, 229, 83, 22, 91, 229, + 85, 22, 91, 229, 82, 22, 91, 229, 87, 22, 91, 229, 97, 22, 91, 229, 98, + 22, 91, 229, 81, 22, 91, 229, 91, 22, 91, 236, 218, 22, 91, 236, 216, 22, + 91, 224, 97, 22, 91, 224, 95, 22, 91, 224, 87, 22, 91, 224, 90, 22, 91, + 224, 96, 22, 91, 224, 92, 22, 91, 224, 91, 22, 91, 224, 89, 22, 91, 224, + 100, 22, 91, 224, 102, 22, 91, 224, 103, 22, 91, 224, 98, 22, 91, 224, + 88, 22, 91, 224, 93, 22, 91, 224, 101, 22, 91, 251, 15, 22, 91, 251, 13, + 22, 91, 251, 78, 22, 91, 251, 76, 22, 91, 230, 1, 22, 91, 238, 17, 22, + 91, 238, 8, 22, 91, 238, 16, 22, 91, 238, 13, 22, 91, 238, 11, 22, 91, + 238, 15, 22, 91, 223, 212, 22, 91, 238, 20, 22, 91, 238, 21, 22, 91, 238, + 9, 22, 91, 238, 14, 22, 91, 218, 6, 22, 91, 250, 229, 22, 91, 251, 16, + 22, 91, 251, 14, 22, 91, 251, 79, 22, 91, 251, 77, 22, 91, 251, 27, 22, + 91, 251, 28, 22, 91, 251, 17, 22, 91, 251, 80, 22, 91, 229, 125, 22, 91, + 236, 219, 22, 91, 223, 213, 22, 91, 218, 12, 22, 91, 236, 77, 22, 91, + 232, 47, 22, 91, 232, 53, 22, 91, 232, 52, 22, 91, 221, 186, 22, 91, 245, + 185, 22, 122, 245, 185, 22, 122, 60, 22, 122, 254, 234, 22, 122, 184, 22, + 122, 218, 65, 22, 122, 246, 168, 22, 122, 73, 22, 122, 218, 16, 22, 122, + 218, 25, 22, 122, 74, 22, 122, 219, 7, 22, 122, 219, 4, 22, 122, 230, + 167, 22, 122, 217, 231, 22, 122, 68, 22, 122, 218, 219, 22, 122, 218, + 227, 22, 122, 218, 204, 22, 122, 217, 200, 22, 122, 246, 115, 22, 122, + 217, 250, 22, 122, 72, 22, 122, 255, 142, 22, 122, 255, 141, 22, 122, + 218, 79, 22, 122, 218, 77, 22, 122, 246, 166, 22, 122, 246, 165, 22, 122, + 246, 167, 22, 122, 218, 15, 22, 122, 218, 14, 22, 122, 231, 13, 22, 122, + 231, 14, 22, 122, 231, 7, 22, 122, 231, 12, 22, 122, 231, 10, 22, 122, + 217, 225, 22, 122, 217, 224, 22, 122, 217, 223, 22, 122, 217, 226, 22, + 122, 217, 227, 22, 122, 220, 179, 22, 122, 220, 178, 22, 122, 220, 177, + 22, 122, 220, 174, 22, 122, 220, 175, 22, 122, 217, 199, 22, 122, 217, + 196, 22, 122, 217, 197, 22, 122, 217, 191, 22, 122, 217, 192, 22, 122, + 217, 193, 22, 122, 217, 195, 22, 122, 246, 109, 22, 122, 246, 111, 22, + 122, 217, 249, 22, 122, 242, 106, 22, 122, 242, 98, 22, 122, 242, 101, + 22, 122, 242, 99, 22, 122, 242, 103, 22, 122, 242, 105, 22, 122, 254, 60, + 22, 122, 254, 57, 22, 122, 254, 55, 22, 122, 254, 56, 22, 122, 223, 216, + 22, 122, 255, 143, 22, 122, 218, 78, 22, 122, 218, 13, 22, 122, 231, 9, + 22, 122, 231, 8, 22, 85, 236, 86, 22, 85, 223, 211, 22, 85, 236, 79, 22, + 85, 232, 55, 22, 85, 232, 53, 22, 85, 232, 52, 22, 85, 221, 192, 22, 85, + 227, 140, 22, 85, 227, 135, 22, 85, 227, 132, 22, 85, 227, 125, 22, 85, + 227, 120, 22, 85, 227, 115, 22, 85, 227, 126, 22, 85, 227, 138, 22, 85, + 233, 187, 22, 85, 229, 99, 22, 85, 229, 88, 22, 85, 224, 104, 22, 85, + 223, 205, 22, 85, 238, 22, 22, 85, 250, 230, 22, 85, 251, 29, 22, 85, + 236, 128, 22, 85, 222, 0, 22, 85, 229, 127, 22, 85, 243, 106, 22, 85, + 236, 80, 22, 85, 236, 78, 22, 85, 232, 51, 22, 85, 232, 45, 22, 85, 232, + 47, 22, 85, 232, 50, 22, 85, 232, 46, 22, 85, 221, 189, 22, 85, 221, 186, + 22, 85, 227, 133, 22, 85, 227, 128, 22, 85, 227, 114, 22, 85, 227, 113, + 22, 85, 223, 207, 22, 85, 227, 130, 22, 85, 227, 129, 22, 85, 227, 122, + 22, 85, 227, 124, 22, 85, 227, 137, 22, 85, 227, 117, 22, 85, 227, 127, + 22, 85, 227, 136, 22, 85, 227, 112, 22, 85, 233, 183, 22, 85, 233, 178, + 22, 85, 233, 180, 22, 85, 233, 177, 22, 85, 233, 175, 22, 85, 233, 181, + 22, 85, 233, 186, 22, 85, 233, 184, 22, 85, 236, 220, 22, 85, 229, 90, + 22, 85, 229, 91, 22, 85, 229, 96, 22, 85, 236, 218, 22, 85, 224, 97, 22, + 85, 224, 87, 22, 85, 224, 90, 22, 85, 224, 92, 22, 85, 230, 1, 22, 85, + 238, 17, 22, 85, 238, 10, 22, 85, 223, 212, 22, 85, 238, 18, 22, 85, 218, + 6, 22, 85, 218, 2, 22, 85, 218, 3, 22, 85, 229, 125, 22, 85, 236, 219, + 22, 85, 243, 104, 22, 85, 243, 102, 22, 85, 243, 105, 22, 85, 243, 103, + 22, 85, 218, 12, 22, 85, 236, 82, 22, 85, 236, 81, 22, 85, 236, 85, 22, + 85, 236, 83, 22, 85, 236, 84, 22, 85, 223, 209, 28, 4, 155, 28, 4, 242, + 173, 28, 4, 243, 112, 28, 4, 243, 211, 28, 4, 243, 148, 28, 4, 243, 162, + 28, 4, 243, 4, 28, 4, 243, 3, 28, 4, 235, 188, 28, 4, 234, 231, 28, 4, + 235, 67, 28, 4, 235, 187, 28, 4, 235, 118, 28, 4, 235, 122, 28, 4, 235, + 12, 28, 4, 234, 206, 28, 4, 243, 121, 28, 4, 243, 115, 28, 4, 243, 117, + 28, 4, 243, 120, 28, 4, 243, 118, 28, 4, 243, 119, 28, 4, 243, 116, 28, + 4, 243, 114, 28, 4, 196, 28, 4, 233, 99, 28, 4, 233, 196, 28, 4, 234, + 118, 28, 4, 234, 16, 28, 4, 234, 25, 28, 4, 233, 136, 28, 4, 233, 49, 28, + 4, 222, 212, 28, 4, 222, 206, 28, 4, 222, 208, 28, 4, 222, 211, 28, 4, + 222, 209, 28, 4, 222, 210, 28, 4, 222, 207, 28, 4, 222, 205, 28, 4, 203, + 28, 4, 227, 22, 28, 4, 227, 147, 28, 4, 228, 0, 28, 4, 227, 200, 28, 4, + 227, 216, 28, 4, 227, 75, 28, 4, 226, 252, 28, 4, 226, 177, 28, 4, 223, + 103, 28, 4, 224, 140, 28, 4, 226, 175, 28, 4, 226, 84, 28, 4, 226, 94, + 28, 4, 224, 26, 28, 4, 223, 36, 28, 4, 225, 25, 28, 4, 224, 170, 28, 4, + 224, 221, 28, 4, 225, 21, 28, 4, 224, 244, 28, 4, 224, 246, 28, 4, 224, + 200, 28, 4, 224, 157, 28, 4, 228, 155, 28, 4, 228, 98, 28, 4, 228, 121, + 28, 4, 228, 154, 28, 4, 228, 135, 28, 4, 228, 136, 28, 4, 228, 110, 28, + 4, 228, 109, 28, 4, 228, 57, 28, 4, 228, 53, 28, 4, 228, 56, 28, 4, 228, + 54, 28, 4, 228, 55, 28, 4, 228, 133, 28, 4, 228, 127, 28, 4, 228, 129, + 28, 4, 228, 132, 28, 4, 228, 130, 28, 4, 228, 131, 28, 4, 228, 128, 28, + 4, 228, 126, 28, 4, 228, 122, 28, 4, 228, 125, 28, 4, 228, 123, 28, 4, + 228, 124, 28, 4, 252, 237, 28, 4, 251, 248, 28, 4, 252, 84, 28, 4, 252, + 236, 28, 4, 252, 137, 28, 4, 252, 144, 28, 4, 252, 41, 28, 4, 251, 218, + 28, 4, 219, 189, 28, 4, 219, 56, 28, 4, 219, 94, 28, 4, 219, 188, 28, 4, + 219, 160, 28, 4, 219, 165, 28, 4, 219, 72, 28, 4, 219, 49, 28, 4, 222, + 155, 28, 4, 221, 0, 28, 4, 221, 205, 28, 4, 222, 152, 28, 4, 222, 80, 28, + 4, 222, 87, 28, 4, 101, 28, 4, 220, 225, 28, 4, 251, 169, 28, 4, 250, 92, + 28, 4, 250, 235, 28, 4, 251, 168, 28, 4, 251, 91, 28, 4, 251, 99, 28, 4, + 250, 182, 28, 4, 250, 66, 28, 4, 218, 138, 28, 4, 218, 114, 28, 4, 218, + 130, 28, 4, 218, 137, 28, 4, 218, 134, 28, 4, 218, 135, 28, 4, 218, 121, + 28, 4, 218, 120, 28, 4, 218, 109, 28, 4, 218, 105, 28, 4, 218, 108, 28, + 4, 218, 106, 28, 4, 218, 107, 28, 4, 208, 28, 4, 231, 144, 28, 4, 232, + 62, 28, 4, 232, 235, 28, 4, 232, 139, 28, 4, 232, 141, 28, 4, 231, 204, + 28, 4, 231, 85, 28, 4, 231, 77, 28, 4, 231, 50, 28, 4, 231, 67, 28, 4, + 231, 76, 28, 4, 231, 72, 28, 4, 231, 73, 28, 4, 231, 56, 28, 4, 231, 43, + 28, 4, 244, 73, 60, 28, 4, 244, 73, 68, 28, 4, 244, 73, 72, 28, 4, 244, + 73, 255, 58, 28, 4, 244, 73, 246, 250, 28, 4, 244, 73, 73, 28, 4, 244, + 73, 74, 28, 4, 244, 73, 219, 7, 28, 4, 175, 28, 4, 236, 7, 28, 4, 236, + 113, 28, 4, 237, 5, 28, 4, 236, 183, 28, 4, 236, 184, 28, 4, 236, 57, 28, + 4, 236, 56, 28, 4, 235, 234, 28, 4, 235, 229, 28, 4, 235, 233, 28, 4, + 235, 230, 28, 4, 235, 231, 28, 4, 235, 224, 28, 4, 235, 218, 28, 4, 235, + 220, 28, 4, 235, 223, 28, 4, 235, 221, 28, 4, 235, 222, 28, 4, 235, 219, + 28, 4, 235, 217, 28, 4, 235, 213, 28, 4, 235, 216, 28, 4, 235, 214, 28, + 4, 235, 215, 28, 4, 219, 7, 28, 4, 218, 165, 28, 4, 218, 204, 28, 4, 219, + 6, 28, 4, 218, 224, 28, 4, 218, 227, 28, 4, 218, 187, 28, 4, 218, 186, + 28, 4, 229, 133, 60, 28, 4, 229, 133, 68, 28, 4, 229, 133, 72, 28, 4, + 229, 133, 255, 58, 28, 4, 229, 133, 246, 250, 28, 4, 229, 133, 73, 28, 4, + 229, 133, 74, 28, 4, 217, 114, 28, 4, 217, 13, 28, 4, 217, 42, 28, 4, + 217, 113, 28, 4, 217, 90, 28, 4, 217, 92, 28, 4, 217, 21, 28, 4, 217, 0, + 28, 4, 217, 80, 28, 4, 217, 60, 28, 4, 217, 67, 28, 4, 217, 79, 28, 4, + 217, 71, 28, 4, 217, 72, 28, 4, 217, 65, 28, 4, 217, 51, 28, 4, 184, 28, + 4, 217, 200, 28, 4, 217, 250, 28, 4, 218, 76, 28, 4, 218, 22, 28, 4, 218, + 25, 28, 4, 217, 231, 28, 4, 217, 222, 28, 4, 249, 207, 28, 4, 247, 111, + 28, 4, 249, 15, 28, 4, 249, 206, 28, 4, 249, 82, 28, 4, 249, 92, 28, 4, + 248, 167, 28, 4, 247, 83, 28, 4, 249, 132, 28, 4, 249, 102, 28, 4, 249, + 114, 28, 4, 249, 131, 28, 4, 249, 119, 28, 4, 249, 120, 28, 4, 249, 107, + 28, 4, 249, 93, 28, 4, 237, 123, 28, 4, 237, 43, 28, 4, 237, 98, 28, 4, + 237, 122, 28, 4, 237, 113, 28, 4, 237, 114, 28, 4, 237, 59, 28, 4, 237, + 25, 28, 4, 245, 0, 28, 4, 244, 17, 28, 4, 244, 103, 28, 4, 244, 253, 28, + 4, 244, 184, 28, 4, 244, 191, 28, 4, 244, 68, 28, 4, 244, 67, 28, 4, 243, + 243, 28, 4, 243, 239, 28, 4, 243, 242, 28, 4, 243, 240, 28, 4, 243, 241, + 28, 4, 244, 160, 28, 4, 244, 140, 28, 4, 244, 150, 28, 4, 244, 159, 28, + 4, 244, 154, 28, 4, 244, 155, 28, 4, 244, 144, 28, 4, 244, 129, 28, 4, + 222, 35, 28, 4, 221, 223, 28, 4, 222, 2, 28, 4, 222, 34, 28, 4, 222, 21, + 28, 4, 222, 22, 28, 4, 221, 239, 28, 4, 221, 216, 28, 4, 251, 69, 28, 4, + 250, 253, 28, 4, 251, 31, 28, 4, 251, 68, 28, 4, 251, 43, 28, 4, 251, 46, + 28, 4, 251, 11, 28, 4, 250, 242, 28, 4, 229, 141, 28, 4, 229, 114, 28, 4, + 229, 129, 28, 4, 229, 140, 28, 4, 229, 131, 28, 4, 229, 132, 28, 4, 229, + 118, 28, 4, 229, 110, 28, 4, 221, 55, 28, 4, 221, 36, 28, 4, 221, 39, 28, + 4, 221, 54, 28, 4, 221, 49, 28, 4, 221, 50, 28, 4, 221, 38, 28, 4, 221, + 34, 28, 4, 220, 188, 28, 4, 220, 180, 28, 4, 220, 184, 28, 4, 220, 187, + 28, 4, 220, 185, 28, 4, 220, 186, 28, 4, 220, 182, 28, 4, 220, 181, 28, + 4, 246, 8, 28, 4, 245, 92, 28, 4, 245, 203, 28, 4, 246, 7, 28, 4, 245, + 226, 28, 4, 245, 231, 28, 4, 245, 139, 28, 4, 245, 78, 28, 4, 187, 28, 4, + 228, 202, 28, 4, 229, 108, 28, 4, 230, 43, 28, 4, 229, 191, 28, 4, 229, + 198, 28, 4, 229, 37, 28, 4, 228, 181, 28, 4, 226, 242, 28, 4, 233, 39, + 28, 4, 245, 72, 28, 36, 244, 183, 78, 28, 226, 87, 78, 28, 218, 173, 28, + 245, 90, 223, 136, 28, 250, 168, 28, 225, 67, 28, 250, 175, 28, 228, 242, + 250, 175, 28, 228, 82, 78, 28, 229, 241, 225, 54, 28, 20, 107, 28, 20, + 103, 28, 20, 160, 28, 20, 154, 28, 20, 174, 28, 20, 182, 28, 20, 191, 28, + 20, 185, 28, 20, 190, 28, 54, 222, 65, 28, 54, 220, 219, 28, 54, 221, + 245, 28, 54, 245, 119, 28, 54, 245, 196, 28, 54, 224, 69, 28, 54, 225, + 38, 28, 54, 246, 227, 28, 54, 232, 27, 28, 54, 242, 161, 28, 54, 222, 66, + 221, 231, 28, 4, 226, 91, 233, 49, 28, 4, 233, 45, 28, 4, 233, 46, 28, 4, + 233, 47, 28, 4, 226, 91, 251, 218, 28, 4, 251, 215, 28, 4, 251, 216, 28, + 4, 251, 217, 28, 4, 226, 91, 245, 78, 28, 4, 245, 74, 28, 4, 245, 75, 28, + 4, 245, 76, 28, 4, 226, 91, 228, 181, 28, 4, 228, 177, 28, 4, 228, 178, + 28, 4, 228, 179, 28, 221, 133, 164, 217, 234, 28, 221, 133, 164, 249, 50, + 28, 221, 133, 164, 227, 97, 28, 221, 133, 164, 224, 192, 227, 97, 28, + 221, 133, 164, 248, 248, 28, 221, 133, 164, 236, 167, 28, 221, 133, 164, + 251, 19, 28, 221, 133, 164, 243, 110, 28, 221, 133, 164, 249, 49, 28, + 221, 133, 164, 235, 245, 143, 1, 60, 143, 1, 73, 143, 1, 72, 143, 1, 74, + 143, 1, 68, 143, 1, 216, 216, 143, 1, 245, 0, 143, 1, 175, 143, 1, 244, + 191, 143, 1, 244, 103, 143, 1, 244, 68, 143, 1, 244, 17, 143, 1, 243, + 244, 143, 1, 155, 143, 1, 243, 162, 143, 1, 243, 112, 143, 1, 243, 4, + 143, 1, 242, 173, 143, 1, 242, 154, 143, 1, 235, 188, 143, 1, 235, 122, + 143, 1, 235, 67, 143, 1, 235, 12, 143, 1, 234, 231, 143, 1, 234, 207, + 143, 1, 196, 143, 1, 234, 25, 143, 1, 233, 196, 143, 1, 233, 136, 143, 1, + 233, 99, 143, 1, 208, 143, 1, 243, 26, 143, 1, 232, 224, 143, 1, 232, + 141, 143, 1, 232, 62, 143, 1, 231, 204, 143, 1, 231, 144, 143, 1, 231, + 87, 143, 1, 228, 97, 143, 1, 228, 84, 143, 1, 228, 78, 143, 1, 228, 72, + 143, 1, 228, 61, 143, 1, 228, 59, 143, 1, 226, 177, 143, 1, 198, 143, 1, + 226, 94, 143, 1, 224, 140, 143, 1, 224, 26, 143, 1, 223, 103, 143, 1, + 223, 41, 143, 1, 249, 207, 143, 1, 222, 155, 143, 1, 249, 92, 143, 1, + 222, 87, 143, 1, 249, 15, 143, 1, 221, 205, 143, 1, 248, 167, 143, 1, + 247, 111, 143, 1, 247, 85, 143, 1, 248, 176, 143, 1, 221, 155, 143, 1, + 221, 154, 143, 1, 221, 144, 143, 1, 221, 143, 143, 1, 221, 142, 143, 1, + 221, 141, 143, 1, 221, 55, 143, 1, 221, 50, 143, 1, 221, 39, 143, 1, 221, + 38, 143, 1, 221, 36, 143, 1, 221, 35, 143, 1, 219, 7, 143, 1, 218, 227, + 143, 1, 218, 204, 143, 1, 218, 187, 143, 1, 218, 165, 143, 1, 218, 156, + 143, 1, 184, 143, 1, 218, 25, 143, 1, 217, 250, 143, 1, 217, 231, 143, 1, + 217, 200, 143, 1, 217, 174, 18, 19, 242, 121, 18, 19, 73, 18, 19, 255, + 22, 18, 19, 72, 18, 19, 237, 255, 18, 19, 74, 18, 19, 230, 127, 18, 19, + 218, 89, 230, 127, 18, 19, 64, 246, 250, 18, 19, 64, 72, 18, 19, 60, 18, + 19, 255, 58, 18, 19, 218, 227, 18, 19, 137, 218, 227, 18, 19, 218, 204, + 18, 19, 137, 218, 204, 18, 19, 218, 196, 18, 19, 137, 218, 196, 18, 19, + 218, 187, 18, 19, 137, 218, 187, 18, 19, 218, 180, 18, 19, 137, 218, 180, + 18, 19, 232, 207, 218, 180, 18, 19, 219, 7, 18, 19, 137, 219, 7, 18, 19, + 219, 6, 18, 19, 137, 219, 6, 18, 19, 232, 207, 219, 6, 18, 19, 254, 196, + 18, 19, 218, 89, 219, 40, 18, 19, 244, 73, 223, 136, 18, 19, 39, 168, 18, + 19, 39, 244, 36, 18, 19, 39, 252, 29, 144, 227, 93, 18, 19, 39, 221, 120, + 144, 227, 93, 18, 19, 39, 45, 144, 227, 93, 18, 19, 39, 227, 93, 18, 19, + 39, 51, 168, 18, 19, 39, 51, 224, 192, 69, 223, 107, 18, 19, 39, 233, + 193, 248, 145, 18, 19, 39, 224, 192, 186, 92, 18, 19, 39, 229, 43, 18, + 19, 39, 113, 222, 143, 18, 19, 246, 197, 18, 19, 237, 223, 18, 19, 230, + 138, 18, 19, 254, 131, 18, 19, 229, 198, 18, 19, 230, 41, 18, 19, 229, + 108, 18, 19, 229, 76, 18, 19, 229, 37, 18, 19, 229, 21, 18, 19, 218, 89, + 229, 21, 18, 19, 64, 243, 148, 18, 19, 64, 243, 112, 18, 19, 187, 18, 19, + 230, 43, 18, 19, 228, 179, 18, 19, 137, 228, 179, 18, 19, 228, 177, 18, + 19, 137, 228, 177, 18, 19, 228, 176, 18, 19, 137, 228, 176, 18, 19, 228, + 174, 18, 19, 137, 228, 174, 18, 19, 228, 173, 18, 19, 137, 228, 173, 18, + 19, 228, 181, 18, 19, 137, 228, 181, 18, 19, 228, 180, 18, 19, 137, 228, + 180, 18, 19, 218, 89, 228, 180, 18, 19, 230, 59, 18, 19, 137, 230, 59, + 18, 19, 64, 243, 225, 18, 19, 222, 87, 18, 19, 222, 150, 18, 19, 221, + 205, 18, 19, 221, 194, 18, 19, 101, 18, 19, 221, 122, 18, 19, 218, 89, + 221, 122, 18, 19, 64, 249, 82, 18, 19, 64, 249, 15, 18, 19, 222, 155, 18, + 19, 222, 152, 18, 19, 220, 223, 18, 19, 137, 220, 223, 18, 19, 220, 208, + 18, 19, 137, 220, 208, 18, 19, 220, 207, 18, 19, 137, 220, 207, 18, 19, + 103, 18, 19, 137, 103, 18, 19, 220, 203, 18, 19, 137, 220, 203, 18, 19, + 220, 225, 18, 19, 137, 220, 225, 18, 19, 220, 224, 18, 19, 137, 220, 224, + 18, 19, 232, 207, 220, 224, 18, 19, 222, 201, 18, 19, 221, 26, 18, 19, + 221, 12, 18, 19, 221, 11, 18, 19, 221, 29, 18, 19, 236, 184, 18, 19, 237, + 2, 18, 19, 236, 113, 18, 19, 236, 105, 18, 19, 236, 57, 18, 19, 236, 41, + 18, 19, 218, 89, 236, 41, 18, 19, 175, 18, 19, 237, 5, 18, 19, 235, 231, + 18, 19, 137, 235, 231, 18, 19, 235, 229, 18, 19, 137, 235, 229, 18, 19, + 235, 228, 18, 19, 137, 235, 228, 18, 19, 235, 227, 18, 19, 137, 235, 227, + 18, 19, 235, 226, 18, 19, 137, 235, 226, 18, 19, 235, 234, 18, 19, 137, + 235, 234, 18, 19, 235, 233, 18, 19, 137, 235, 233, 18, 19, 232, 207, 235, + 233, 18, 19, 237, 17, 18, 19, 235, 235, 18, 19, 224, 5, 236, 178, 18, 19, + 224, 5, 236, 106, 18, 19, 224, 5, 236, 53, 18, 19, 224, 5, 236, 245, 18, + 19, 251, 99, 18, 19, 251, 167, 18, 19, 250, 235, 18, 19, 250, 225, 18, + 19, 250, 182, 18, 19, 250, 130, 18, 19, 218, 89, 250, 130, 18, 19, 251, + 169, 18, 19, 251, 168, 18, 19, 250, 64, 18, 19, 137, 250, 64, 18, 19, + 250, 62, 18, 19, 137, 250, 62, 18, 19, 250, 61, 18, 19, 137, 250, 61, 18, + 19, 250, 60, 18, 19, 137, 250, 60, 18, 19, 250, 59, 18, 19, 137, 250, 59, + 18, 19, 250, 66, 18, 19, 137, 250, 66, 18, 19, 250, 65, 18, 19, 137, 250, + 65, 18, 19, 232, 207, 250, 65, 18, 19, 251, 202, 18, 19, 226, 116, 222, + 37, 18, 19, 234, 25, 18, 19, 234, 117, 18, 19, 233, 196, 18, 19, 233, + 171, 18, 19, 233, 136, 18, 19, 233, 119, 18, 19, 218, 89, 233, 119, 18, + 19, 196, 18, 19, 234, 118, 18, 19, 233, 47, 18, 19, 137, 233, 47, 18, 19, + 233, 45, 18, 19, 137, 233, 45, 18, 19, 233, 44, 18, 19, 137, 233, 44, 18, + 19, 233, 43, 18, 19, 137, 233, 43, 18, 19, 233, 42, 18, 19, 137, 233, 42, + 18, 19, 233, 49, 18, 19, 137, 233, 49, 18, 19, 233, 48, 18, 19, 137, 233, + 48, 18, 19, 232, 207, 233, 48, 18, 19, 189, 18, 19, 137, 189, 18, 19, + 233, 199, 18, 19, 253, 243, 189, 18, 19, 226, 116, 189, 18, 19, 232, 141, + 18, 19, 232, 234, 18, 19, 232, 62, 18, 19, 232, 38, 18, 19, 231, 204, 18, + 19, 231, 195, 18, 19, 218, 89, 231, 195, 18, 19, 208, 18, 19, 232, 235, + 18, 19, 231, 83, 18, 19, 137, 231, 83, 18, 19, 231, 85, 18, 19, 137, 231, + 85, 18, 19, 231, 84, 18, 19, 137, 231, 84, 18, 19, 232, 207, 231, 84, 18, + 19, 207, 18, 19, 64, 232, 117, 18, 19, 232, 67, 18, 19, 235, 122, 18, 19, + 235, 186, 18, 19, 235, 67, 18, 19, 235, 55, 18, 19, 235, 12, 18, 19, 234, + 248, 18, 19, 218, 89, 234, 248, 18, 19, 235, 188, 18, 19, 235, 187, 18, + 19, 234, 204, 18, 19, 137, 234, 204, 18, 19, 234, 203, 18, 19, 137, 234, + 203, 18, 19, 234, 202, 18, 19, 137, 234, 202, 18, 19, 234, 201, 18, 19, + 137, 234, 201, 18, 19, 234, 200, 18, 19, 137, 234, 200, 18, 19, 234, 206, + 18, 19, 137, 234, 206, 18, 19, 234, 205, 18, 19, 137, 234, 205, 18, 19, + 153, 18, 19, 137, 153, 18, 19, 128, 153, 18, 19, 226, 94, 18, 19, 226, + 173, 18, 19, 224, 140, 18, 19, 224, 125, 18, 19, 224, 26, 18, 19, 224, + 14, 18, 19, 218, 89, 224, 14, 18, 19, 226, 177, 18, 19, 226, 175, 18, 19, + 223, 32, 18, 19, 137, 223, 32, 18, 19, 223, 29, 18, 19, 137, 223, 29, 18, + 19, 223, 28, 18, 19, 137, 223, 28, 18, 19, 223, 27, 18, 19, 137, 223, 27, + 18, 19, 223, 26, 18, 19, 137, 223, 26, 18, 19, 223, 36, 18, 19, 137, 223, + 36, 18, 19, 223, 35, 18, 19, 137, 223, 35, 18, 19, 232, 207, 223, 35, 18, + 19, 198, 18, 19, 253, 243, 198, 18, 19, 223, 37, 18, 19, 252, 50, 198, + 18, 19, 233, 116, 224, 66, 18, 19, 232, 207, 224, 59, 18, 19, 232, 207, + 226, 233, 18, 19, 232, 207, 223, 228, 18, 19, 232, 207, 223, 105, 18, 19, + 232, 207, 224, 58, 18, 19, 232, 207, 226, 97, 18, 19, 224, 246, 18, 19, + 224, 221, 18, 19, 224, 216, 18, 19, 224, 200, 18, 19, 224, 195, 18, 19, + 225, 25, 18, 19, 225, 21, 18, 19, 224, 155, 18, 19, 137, 224, 155, 18, + 19, 224, 154, 18, 19, 137, 224, 154, 18, 19, 224, 153, 18, 19, 137, 224, + 153, 18, 19, 224, 152, 18, 19, 137, 224, 152, 18, 19, 224, 151, 18, 19, + 137, 224, 151, 18, 19, 224, 157, 18, 19, 137, 224, 157, 18, 19, 224, 156, + 18, 19, 137, 224, 156, 18, 19, 225, 27, 18, 19, 218, 25, 18, 19, 218, 74, + 18, 19, 217, 250, 18, 19, 217, 242, 18, 19, 217, 231, 18, 19, 217, 216, + 18, 19, 218, 89, 217, 216, 18, 19, 184, 18, 19, 218, 76, 18, 19, 217, + 171, 18, 19, 137, 217, 171, 18, 19, 217, 170, 18, 19, 137, 217, 170, 18, + 19, 217, 169, 18, 19, 137, 217, 169, 18, 19, 217, 168, 18, 19, 137, 217, + 168, 18, 19, 217, 167, 18, 19, 137, 217, 167, 18, 19, 217, 173, 18, 19, + 137, 217, 173, 18, 19, 217, 172, 18, 19, 137, 217, 172, 18, 19, 232, 207, + 217, 172, 18, 19, 218, 90, 18, 19, 252, 82, 218, 90, 18, 19, 137, 218, + 90, 18, 19, 226, 116, 217, 250, 18, 19, 227, 216, 18, 19, 228, 38, 227, + 216, 18, 19, 137, 235, 122, 18, 19, 227, 255, 18, 19, 227, 147, 18, 19, + 227, 98, 18, 19, 227, 75, 18, 19, 227, 67, 18, 19, 137, 235, 12, 18, 19, + 203, 18, 19, 228, 0, 18, 19, 137, 235, 188, 18, 19, 226, 251, 18, 19, + 137, 226, 251, 18, 19, 152, 18, 19, 137, 152, 18, 19, 128, 152, 18, 19, + 245, 231, 18, 19, 246, 5, 18, 19, 245, 203, 18, 19, 245, 190, 18, 19, + 245, 139, 18, 19, 245, 134, 18, 19, 246, 8, 18, 19, 246, 7, 18, 19, 245, + 77, 18, 19, 137, 245, 77, 18, 19, 246, 74, 18, 19, 222, 22, 18, 19, 233, + 32, 222, 22, 18, 19, 222, 2, 18, 19, 233, 32, 222, 2, 18, 19, 221, 254, + 18, 19, 233, 32, 221, 254, 18, 19, 221, 239, 18, 19, 221, 236, 18, 19, + 222, 35, 18, 19, 222, 34, 18, 19, 221, 215, 18, 19, 137, 221, 215, 18, + 19, 222, 37, 18, 19, 221, 17, 18, 19, 221, 16, 18, 19, 221, 15, 18, 19, + 221, 19, 18, 19, 221, 20, 18, 19, 220, 201, 18, 19, 220, 200, 18, 19, + 220, 199, 18, 19, 220, 202, 18, 19, 231, 102, 243, 162, 18, 19, 231, 102, + 243, 112, 18, 19, 231, 102, 243, 97, 18, 19, 231, 102, 243, 4, 18, 19, + 231, 102, 242, 248, 18, 19, 231, 102, 155, 18, 19, 231, 102, 243, 211, + 18, 19, 231, 102, 243, 225, 18, 19, 231, 101, 243, 225, 18, 19, 243, 90, + 18, 19, 228, 151, 18, 19, 228, 121, 18, 19, 228, 116, 18, 19, 228, 110, + 18, 19, 228, 105, 18, 19, 228, 155, 18, 19, 228, 154, 18, 19, 228, 163, + 18, 19, 221, 151, 18, 19, 221, 149, 18, 19, 221, 148, 18, 19, 221, 152, + 18, 19, 137, 227, 216, 18, 19, 137, 227, 147, 18, 19, 137, 227, 75, 18, + 19, 137, 203, 18, 19, 232, 113, 18, 19, 232, 92, 18, 19, 232, 88, 18, 19, + 232, 84, 18, 19, 232, 80, 18, 19, 232, 115, 18, 19, 232, 114, 18, 19, + 232, 117, 18, 19, 231, 215, 18, 19, 226, 116, 224, 246, 18, 19, 226, 116, + 224, 221, 18, 19, 226, 116, 224, 200, 18, 19, 226, 116, 225, 25, 18, 19, + 218, 178, 222, 22, 18, 19, 218, 178, 222, 2, 18, 19, 218, 178, 221, 239, + 18, 19, 218, 178, 222, 35, 18, 19, 218, 178, 222, 37, 18, 19, 235, 73, + 18, 19, 235, 72, 18, 19, 235, 71, 18, 19, 235, 70, 18, 19, 235, 79, 18, + 19, 235, 78, 18, 19, 235, 80, 18, 19, 222, 36, 222, 22, 18, 19, 222, 36, + 222, 2, 18, 19, 222, 36, 221, 254, 18, 19, 222, 36, 221, 239, 18, 19, + 222, 36, 221, 236, 18, 19, 222, 36, 222, 35, 18, 19, 222, 36, 222, 34, + 18, 19, 222, 36, 222, 37, 18, 19, 254, 185, 253, 204, 18, 19, 252, 50, + 73, 18, 19, 252, 50, 72, 18, 19, 252, 50, 74, 18, 19, 252, 50, 60, 18, + 19, 252, 50, 218, 227, 18, 19, 252, 50, 218, 204, 18, 19, 252, 50, 218, + 187, 18, 19, 252, 50, 219, 7, 18, 19, 252, 50, 232, 141, 18, 19, 252, 50, + 232, 62, 18, 19, 252, 50, 231, 204, 18, 19, 252, 50, 208, 18, 19, 252, + 50, 236, 184, 18, 19, 252, 50, 236, 113, 18, 19, 252, 50, 236, 57, 18, + 19, 252, 50, 175, 18, 19, 226, 116, 243, 162, 18, 19, 226, 116, 243, 112, + 18, 19, 226, 116, 243, 4, 18, 19, 226, 116, 155, 18, 19, 64, 244, 109, + 18, 19, 64, 244, 112, 18, 19, 64, 244, 116, 18, 19, 64, 244, 115, 18, 19, + 64, 244, 113, 18, 19, 64, 244, 125, 18, 19, 64, 227, 22, 18, 19, 64, 227, + 75, 18, 19, 64, 227, 216, 18, 19, 64, 227, 200, 18, 19, 64, 227, 147, 18, + 19, 64, 203, 18, 19, 64, 218, 165, 18, 19, 64, 218, 187, 18, 19, 64, 218, + 227, 18, 19, 64, 218, 224, 18, 19, 64, 218, 204, 18, 19, 64, 219, 7, 18, + 19, 64, 242, 147, 18, 19, 64, 242, 148, 18, 19, 64, 242, 151, 18, 19, 64, + 242, 150, 18, 19, 64, 242, 149, 18, 19, 64, 242, 153, 18, 19, 64, 221, + 223, 18, 19, 64, 221, 239, 18, 19, 64, 222, 22, 18, 19, 64, 222, 21, 18, + 19, 64, 222, 2, 18, 19, 64, 222, 35, 18, 19, 64, 221, 3, 18, 19, 64, 221, + 11, 18, 19, 64, 221, 26, 18, 19, 64, 221, 25, 18, 19, 64, 221, 12, 18, + 19, 64, 221, 29, 18, 19, 64, 228, 202, 18, 19, 64, 229, 37, 18, 19, 64, + 229, 198, 18, 19, 64, 229, 191, 18, 19, 64, 229, 108, 18, 19, 64, 187, + 18, 19, 64, 230, 59, 18, 19, 64, 244, 17, 18, 19, 64, 244, 68, 18, 19, + 64, 244, 191, 18, 19, 64, 244, 184, 18, 19, 64, 244, 103, 18, 19, 64, + 245, 0, 18, 19, 64, 236, 120, 18, 19, 64, 236, 125, 18, 19, 64, 236, 137, + 18, 19, 64, 236, 136, 18, 19, 64, 236, 130, 18, 19, 64, 236, 149, 18, 19, + 64, 236, 69, 18, 19, 64, 236, 70, 18, 19, 64, 236, 73, 18, 19, 64, 236, + 72, 18, 19, 64, 236, 71, 18, 19, 64, 236, 74, 18, 19, 64, 236, 75, 18, + 19, 64, 231, 144, 18, 19, 64, 231, 204, 18, 19, 64, 232, 141, 18, 19, 64, + 232, 139, 18, 19, 64, 232, 62, 18, 19, 64, 208, 18, 19, 64, 233, 99, 18, + 19, 64, 233, 136, 18, 19, 64, 234, 25, 18, 19, 64, 234, 16, 18, 19, 64, + 233, 196, 18, 19, 64, 196, 18, 19, 64, 217, 200, 18, 19, 64, 217, 231, + 18, 19, 64, 218, 25, 18, 19, 64, 218, 22, 18, 19, 64, 217, 250, 18, 19, + 64, 184, 18, 19, 64, 237, 43, 18, 19, 226, 116, 237, 43, 18, 19, 64, 237, + 59, 18, 19, 64, 237, 114, 18, 19, 64, 237, 113, 18, 19, 64, 237, 98, 18, + 19, 226, 116, 237, 98, 18, 19, 64, 237, 123, 18, 19, 64, 237, 72, 18, 19, + 64, 237, 76, 18, 19, 64, 237, 86, 18, 19, 64, 237, 85, 18, 19, 64, 237, + 84, 18, 19, 64, 237, 87, 18, 19, 64, 234, 231, 18, 19, 64, 235, 12, 18, + 19, 64, 235, 122, 18, 19, 64, 235, 118, 18, 19, 64, 235, 67, 18, 19, 64, + 235, 188, 18, 19, 64, 248, 171, 18, 19, 64, 248, 172, 18, 19, 64, 248, + 175, 18, 19, 64, 248, 174, 18, 19, 64, 248, 173, 18, 19, 64, 248, 176, + 18, 19, 64, 235, 69, 18, 19, 64, 235, 71, 18, 19, 64, 235, 75, 18, 19, + 64, 235, 74, 18, 19, 64, 235, 73, 18, 19, 64, 235, 79, 18, 19, 64, 221, + 146, 18, 19, 64, 221, 148, 18, 19, 64, 221, 151, 18, 19, 64, 221, 150, + 18, 19, 64, 221, 149, 18, 19, 64, 221, 152, 18, 19, 64, 221, 142, 18, 19, + 64, 221, 143, 18, 19, 64, 221, 154, 18, 19, 64, 221, 153, 18, 19, 64, + 221, 144, 18, 19, 64, 221, 155, 18, 19, 64, 217, 13, 18, 19, 64, 217, 21, + 18, 19, 64, 217, 92, 18, 19, 64, 217, 90, 18, 19, 64, 217, 42, 18, 19, + 64, 217, 114, 18, 19, 64, 217, 157, 18, 19, 64, 66, 217, 157, 18, 19, 64, + 247, 65, 18, 19, 64, 247, 66, 18, 19, 64, 247, 73, 18, 19, 64, 247, 72, + 18, 19, 64, 247, 68, 18, 19, 64, 247, 74, 18, 19, 64, 223, 103, 18, 19, + 64, 224, 26, 18, 19, 64, 226, 94, 18, 19, 64, 226, 84, 18, 19, 64, 224, + 140, 18, 19, 64, 226, 177, 18, 19, 64, 224, 170, 18, 19, 64, 224, 200, + 18, 19, 64, 224, 246, 18, 19, 64, 224, 244, 18, 19, 64, 224, 221, 18, 19, + 64, 225, 25, 18, 19, 64, 225, 27, 18, 19, 64, 221, 36, 18, 19, 64, 221, + 38, 18, 19, 64, 221, 50, 18, 19, 64, 221, 49, 18, 19, 64, 221, 39, 18, + 19, 64, 221, 55, 18, 19, 64, 250, 253, 18, 19, 64, 251, 11, 18, 19, 64, + 251, 46, 18, 19, 64, 251, 43, 18, 19, 64, 251, 31, 18, 19, 64, 251, 69, + 18, 19, 64, 221, 5, 18, 19, 64, 221, 6, 18, 19, 64, 221, 9, 18, 19, 64, + 221, 8, 18, 19, 64, 221, 7, 18, 19, 64, 221, 10, 18, 19, 251, 32, 55, 18, + 19, 245, 90, 223, 136, 18, 19, 228, 147, 18, 19, 232, 112, 18, 19, 231, + 212, 18, 19, 231, 211, 18, 19, 231, 210, 18, 19, 231, 209, 18, 19, 231, + 214, 18, 19, 231, 213, 18, 19, 218, 178, 221, 213, 18, 19, 218, 178, 221, + 212, 18, 19, 218, 178, 221, 211, 18, 19, 218, 178, 221, 210, 18, 19, 218, + 178, 221, 209, 18, 19, 218, 178, 221, 216, 18, 19, 218, 178, 221, 215, + 18, 19, 218, 178, 39, 222, 37, 18, 19, 252, 50, 219, 40, 230, 164, 223, + 255, 78, 230, 164, 1, 252, 122, 230, 164, 1, 234, 222, 230, 164, 1, 245, + 230, 230, 164, 1, 226, 161, 230, 164, 1, 232, 25, 230, 164, 1, 220, 122, + 230, 164, 1, 249, 185, 230, 164, 1, 221, 173, 230, 164, 1, 250, 177, 230, + 164, 1, 251, 89, 230, 164, 1, 233, 91, 230, 164, 1, 244, 53, 230, 164, 1, + 232, 105, 230, 164, 1, 223, 131, 230, 164, 1, 227, 18, 230, 164, 1, 254, + 193, 230, 164, 1, 230, 131, 230, 164, 1, 220, 50, 230, 164, 1, 247, 14, + 230, 164, 1, 237, 165, 230, 164, 1, 247, 15, 230, 164, 1, 230, 105, 230, + 164, 1, 220, 103, 230, 164, 1, 238, 5, 230, 164, 1, 247, 12, 230, 164, 1, + 229, 184, 230, 164, 245, 229, 78, 230, 164, 210, 245, 229, 78, 157, 1, + 245, 220, 245, 212, 245, 232, 246, 74, 157, 1, 216, 216, 157, 1, 220, 36, + 220, 51, 68, 157, 1, 217, 202, 157, 1, 218, 90, 157, 1, 219, 40, 157, 1, + 221, 218, 221, 217, 221, 234, 157, 1, 246, 118, 157, 1, 254, 106, 60, + 157, 1, 230, 94, 74, 157, 1, 255, 3, 60, 157, 1, 254, 219, 157, 1, 234, + 254, 74, 157, 1, 224, 185, 74, 157, 1, 74, 157, 1, 230, 167, 157, 1, 230, + 138, 157, 1, 227, 244, 227, 253, 227, 195, 152, 157, 1, 236, 195, 157, 1, + 251, 87, 157, 1, 236, 196, 237, 17, 157, 1, 245, 67, 157, 1, 246, 185, + 157, 1, 244, 187, 243, 231, 245, 67, 157, 1, 244, 220, 157, 1, 218, 160, + 218, 155, 219, 40, 157, 1, 243, 203, 243, 225, 157, 1, 243, 207, 243, + 225, 157, 1, 235, 0, 243, 225, 157, 1, 224, 188, 243, 225, 157, 1, 232, + 203, 231, 74, 232, 204, 207, 157, 1, 224, 186, 207, 157, 1, 247, 140, + 157, 1, 237, 148, 237, 152, 237, 142, 72, 157, 1, 73, 157, 1, 237, 106, + 237, 126, 157, 1, 244, 173, 157, 1, 235, 1, 254, 234, 157, 1, 224, 190, + 60, 157, 1, 237, 135, 246, 164, 157, 1, 229, 155, 229, 173, 230, 59, 157, + 1, 254, 162, 246, 163, 157, 1, 224, 3, 198, 157, 1, 224, 129, 234, 253, + 198, 157, 1, 224, 184, 198, 157, 1, 251, 202, 157, 1, 217, 157, 157, 1, + 221, 159, 221, 166, 220, 190, 222, 201, 157, 1, 224, 183, 222, 201, 157, + 1, 250, 46, 157, 1, 252, 107, 252, 110, 252, 56, 253, 204, 157, 1, 224, + 189, 253, 204, 157, 1, 247, 139, 157, 1, 230, 115, 157, 1, 246, 238, 246, + 240, 73, 157, 1, 234, 81, 234, 87, 189, 157, 1, 234, 255, 189, 157, 1, + 224, 187, 189, 157, 1, 235, 136, 235, 171, 235, 4, 153, 157, 1, 247, 141, + 157, 1, 237, 203, 157, 1, 237, 204, 157, 1, 249, 196, 249, 201, 250, 46, + 157, 1, 230, 90, 246, 117, 74, 157, 1, 247, 11, 157, 1, 237, 164, 157, 1, + 250, 63, 157, 1, 251, 160, 157, 1, 251, 98, 157, 1, 223, 161, 157, 1, + 234, 252, 157, 1, 224, 182, 157, 1, 242, 64, 157, 1, 228, 163, 157, 1, + 218, 151, 157, 224, 109, 228, 196, 157, 233, 85, 228, 196, 157, 250, 101, + 228, 196, 157, 254, 33, 100, 157, 220, 227, 100, 157, 252, 121, 100, 222, + 140, 1, 60, 222, 140, 1, 72, 222, 140, 1, 68, 222, 140, 1, 175, 222, 140, + 1, 245, 0, 222, 140, 1, 232, 115, 222, 140, 1, 222, 155, 222, 140, 1, + 249, 207, 222, 140, 1, 208, 222, 140, 1, 187, 222, 140, 1, 252, 237, 222, + 140, 1, 196, 222, 140, 1, 184, 222, 140, 1, 235, 188, 222, 140, 1, 219, + 7, 222, 140, 1, 226, 177, 222, 140, 1, 155, 222, 140, 29, 5, 72, 222, + 140, 29, 5, 68, 222, 140, 5, 219, 82, 243, 184, 1, 60, 243, 184, 1, 72, + 243, 184, 1, 68, 243, 184, 1, 175, 243, 184, 1, 245, 0, 243, 184, 1, 232, + 115, 243, 184, 1, 222, 155, 243, 184, 1, 249, 207, 243, 184, 1, 208, 243, + 184, 1, 187, 243, 184, 1, 252, 237, 243, 184, 1, 196, 243, 184, 1, 184, + 243, 184, 1, 203, 243, 184, 1, 235, 188, 243, 184, 1, 219, 7, 243, 184, + 1, 226, 177, 243, 184, 1, 155, 243, 184, 29, 5, 72, 243, 184, 29, 5, 68, + 243, 184, 5, 230, 14, 229, 122, 224, 109, 228, 196, 229, 122, 51, 228, + 196, 251, 245, 1, 60, 251, 245, 1, 72, 251, 245, 1, 68, 251, 245, 1, 175, + 251, 245, 1, 245, 0, 251, 245, 1, 232, 115, 251, 245, 1, 222, 155, 251, + 245, 1, 249, 207, 251, 245, 1, 208, 251, 245, 1, 187, 251, 245, 1, 252, + 237, 251, 245, 1, 196, 251, 245, 1, 184, 251, 245, 1, 203, 251, 245, 1, + 235, 188, 251, 245, 1, 219, 7, 251, 245, 1, 226, 177, 251, 245, 1, 155, + 251, 245, 29, 5, 72, 251, 245, 29, 5, 68, 222, 139, 1, 60, 222, 139, 1, + 72, 222, 139, 1, 68, 222, 139, 1, 175, 222, 139, 1, 245, 0, 222, 139, 1, + 232, 115, 222, 139, 1, 222, 155, 222, 139, 1, 249, 207, 222, 139, 1, 208, + 222, 139, 1, 187, 222, 139, 1, 252, 237, 222, 139, 1, 196, 222, 139, 1, + 184, 222, 139, 1, 235, 188, 222, 139, 1, 219, 7, 222, 139, 1, 226, 177, + 222, 139, 29, 5, 72, 222, 139, 29, 5, 68, 79, 1, 175, 79, 1, 236, 149, + 79, 1, 236, 57, 79, 1, 236, 125, 79, 1, 232, 84, 79, 1, 251, 169, 79, 1, + 251, 69, 79, 1, 250, 182, 79, 1, 251, 11, 79, 1, 231, 56, 79, 1, 249, + 207, 79, 1, 221, 19, 79, 1, 248, 167, 79, 1, 221, 15, 79, 1, 231, 207, + 79, 1, 222, 155, 79, 1, 222, 35, 79, 1, 101, 79, 1, 221, 239, 79, 1, 231, + 204, 79, 1, 252, 237, 79, 1, 229, 141, 79, 1, 229, 37, 79, 1, 229, 118, + 79, 1, 233, 136, 79, 1, 217, 231, 79, 1, 227, 75, 79, 1, 235, 12, 79, 1, + 219, 72, 79, 1, 225, 25, 79, 1, 223, 182, 79, 1, 226, 177, 79, 1, 155, + 79, 1, 235, 188, 79, 1, 228, 155, 79, 237, 214, 29, 228, 141, 79, 237, + 214, 29, 228, 154, 79, 237, 214, 29, 228, 121, 79, 237, 214, 29, 228, + 116, 79, 237, 214, 29, 228, 98, 79, 237, 214, 29, 228, 73, 79, 237, 214, + 29, 228, 61, 79, 237, 214, 29, 228, 60, 79, 237, 214, 29, 226, 243, 79, + 237, 214, 29, 226, 236, 79, 237, 214, 29, 234, 198, 79, 237, 214, 29, + 234, 189, 79, 237, 214, 29, 228, 136, 79, 237, 214, 29, 228, 147, 79, + 237, 214, 29, 228, 106, 220, 198, 107, 79, 237, 214, 29, 228, 106, 220, + 198, 103, 79, 237, 214, 29, 228, 137, 79, 29, 237, 202, 254, 69, 79, 29, + 237, 202, 255, 58, 79, 29, 5, 255, 58, 79, 29, 5, 72, 79, 29, 5, 237, + 255, 79, 29, 5, 218, 90, 79, 29, 5, 217, 166, 79, 29, 5, 68, 79, 29, 5, + 220, 23, 79, 29, 5, 220, 123, 79, 29, 5, 230, 167, 79, 29, 5, 184, 79, + 29, 5, 238, 26, 79, 29, 5, 73, 79, 29, 5, 254, 234, 79, 29, 5, 254, 196, + 79, 29, 5, 230, 127, 79, 29, 5, 253, 232, 79, 5, 232, 37, 79, 5, 227, + 214, 79, 5, 217, 176, 79, 5, 233, 55, 79, 5, 221, 80, 79, 5, 252, 203, + 79, 5, 227, 71, 79, 5, 221, 138, 79, 5, 236, 239, 79, 5, 254, 198, 79, 5, + 226, 141, 226, 137, 79, 5, 219, 79, 79, 5, 250, 179, 79, 5, 252, 183, 79, + 5, 236, 142, 79, 5, 252, 199, 79, 5, 251, 156, 229, 77, 235, 239, 79, 5, + 235, 100, 221, 122, 79, 5, 252, 96, 79, 5, 229, 120, 233, 97, 79, 5, 236, + 40, 79, 250, 78, 16, 227, 142, 79, 5, 253, 218, 79, 5, 253, 235, 79, 20, + 217, 84, 79, 20, 107, 79, 20, 103, 79, 20, 160, 79, 20, 154, 79, 20, 174, + 79, 20, 182, 79, 20, 191, 79, 20, 185, 79, 20, 190, 79, 16, 235, 100, + 253, 237, 224, 16, 79, 16, 235, 100, 253, 237, 233, 72, 79, 16, 235, 100, + 253, 237, 229, 76, 79, 16, 235, 100, 253, 237, 252, 123, 79, 16, 235, + 100, 253, 237, 251, 233, 79, 16, 235, 100, 253, 237, 229, 1, 79, 16, 235, + 100, 253, 237, 228, 251, 79, 16, 235, 100, 253, 237, 228, 249, 79, 16, + 235, 100, 253, 237, 228, 255, 79, 16, 235, 100, 253, 237, 228, 253, 77, + 252, 66, 77, 246, 208, 77, 250, 168, 77, 245, 90, 223, 136, 77, 250, 175, + 77, 245, 116, 248, 143, 77, 221, 137, 224, 21, 242, 121, 77, 224, 139, 4, + 252, 26, 234, 63, 77, 234, 84, 250, 168, 77, 234, 84, 245, 90, 223, 136, + 77, 232, 23, 77, 245, 103, 41, 226, 74, 107, 77, 245, 103, 41, 226, 74, + 103, 77, 245, 103, 41, 226, 74, 160, 77, 29, 225, 54, 77, 20, 217, 84, + 77, 20, 107, 77, 20, 103, 77, 20, 160, 77, 20, 154, 77, 20, 174, 77, 20, + 182, 77, 20, 191, 77, 20, 185, 77, 20, 190, 77, 1, 60, 77, 1, 73, 77, 1, + 72, 77, 1, 74, 77, 1, 68, 77, 1, 230, 167, 77, 1, 220, 110, 77, 1, 246, + 250, 77, 1, 208, 77, 1, 254, 123, 77, 1, 252, 237, 77, 1, 187, 77, 1, + 228, 155, 77, 1, 245, 0, 77, 1, 196, 77, 1, 235, 188, 77, 1, 226, 177, + 77, 1, 225, 25, 77, 1, 222, 155, 77, 1, 249, 207, 77, 1, 251, 69, 77, 1, + 237, 123, 77, 1, 184, 77, 1, 203, 77, 1, 219, 7, 77, 1, 246, 8, 77, 1, + 175, 77, 1, 236, 149, 77, 1, 221, 55, 77, 1, 217, 114, 77, 1, 243, 211, + 77, 1, 217, 14, 77, 1, 235, 79, 77, 1, 217, 67, 77, 1, 251, 31, 77, 1, + 221, 137, 171, 29, 55, 77, 1, 221, 137, 73, 77, 1, 221, 137, 72, 77, 1, + 221, 137, 74, 77, 1, 221, 137, 68, 77, 1, 221, 137, 230, 167, 77, 1, 221, + 137, 220, 110, 77, 1, 221, 137, 254, 123, 77, 1, 221, 137, 252, 237, 77, + 1, 221, 137, 187, 77, 1, 221, 137, 228, 155, 77, 1, 221, 137, 245, 0, 77, + 1, 221, 137, 196, 77, 1, 221, 137, 222, 155, 77, 1, 221, 137, 249, 207, + 77, 1, 221, 137, 251, 69, 77, 1, 221, 137, 237, 123, 77, 1, 221, 137, + 221, 55, 77, 1, 221, 137, 184, 77, 1, 221, 137, 219, 7, 77, 1, 221, 137, + 175, 77, 1, 221, 137, 244, 253, 77, 1, 221, 137, 243, 211, 77, 1, 221, + 137, 237, 97, 77, 1, 221, 137, 232, 60, 77, 1, 221, 137, 247, 74, 77, 1, + 224, 139, 73, 77, 1, 224, 139, 72, 77, 1, 224, 139, 237, 133, 77, 1, 224, + 139, 220, 110, 77, 1, 224, 139, 68, 77, 1, 224, 139, 254, 123, 77, 1, + 224, 139, 175, 77, 1, 224, 139, 245, 0, 77, 1, 224, 139, 155, 77, 1, 224, + 139, 187, 77, 1, 224, 139, 225, 25, 77, 1, 224, 139, 222, 155, 77, 1, + 224, 139, 249, 207, 77, 1, 224, 139, 237, 123, 77, 1, 224, 139, 246, 8, + 77, 1, 224, 139, 244, 253, 77, 1, 224, 139, 243, 211, 77, 1, 224, 139, + 221, 55, 77, 1, 224, 139, 217, 114, 77, 1, 224, 139, 228, 0, 77, 1, 224, + 139, 251, 69, 77, 1, 224, 139, 217, 80, 77, 1, 234, 84, 72, 77, 1, 234, + 84, 175, 77, 1, 234, 84, 203, 77, 1, 234, 84, 246, 8, 77, 1, 234, 84, + 217, 80, 77, 1, 254, 161, 244, 238, 254, 96, 107, 77, 1, 254, 161, 244, + 238, 219, 78, 107, 77, 1, 254, 161, 244, 238, 249, 174, 77, 1, 254, 161, + 244, 238, 220, 120, 77, 1, 254, 161, 244, 238, 237, 170, 220, 120, 77, 1, + 254, 161, 244, 238, 252, 212, 77, 1, 254, 161, 244, 238, 148, 252, 212, + 77, 1, 254, 161, 244, 238, 60, 77, 1, 254, 161, 244, 238, 72, 77, 1, 254, + 161, 244, 238, 175, 77, 1, 254, 161, 244, 238, 232, 115, 77, 1, 254, 161, + 244, 238, 251, 169, 77, 1, 254, 161, 244, 238, 221, 29, 77, 1, 254, 161, + 244, 238, 221, 19, 77, 1, 254, 161, 244, 238, 249, 132, 77, 1, 254, 161, + 244, 238, 231, 217, 77, 1, 254, 161, 244, 238, 222, 155, 77, 1, 254, 161, + 244, 238, 249, 207, 77, 1, 254, 161, 244, 238, 187, 77, 1, 254, 161, 244, + 238, 229, 141, 77, 1, 254, 161, 244, 238, 223, 218, 77, 1, 254, 161, 244, + 238, 217, 80, 77, 1, 254, 161, 244, 238, 217, 114, 77, 1, 254, 161, 244, + 238, 254, 202, 77, 1, 221, 137, 254, 161, 244, 238, 222, 155, 77, 1, 221, + 137, 254, 161, 244, 238, 217, 80, 77, 1, 234, 84, 254, 161, 244, 238, + 244, 125, 77, 1, 234, 84, 254, 161, 244, 238, 232, 115, 77, 1, 234, 84, + 254, 161, 244, 238, 251, 169, 77, 1, 234, 84, 254, 161, 244, 238, 237, + 103, 77, 1, 234, 84, 254, 161, 244, 238, 221, 29, 77, 1, 234, 84, 254, + 161, 244, 238, 249, 116, 77, 1, 234, 84, 254, 161, 244, 238, 222, 155, + 77, 1, 234, 84, 254, 161, 244, 238, 249, 36, 77, 1, 234, 84, 254, 161, + 244, 238, 223, 218, 77, 1, 234, 84, 254, 161, 244, 238, 250, 57, 77, 1, + 234, 84, 254, 161, 244, 238, 217, 80, 77, 1, 234, 84, 254, 161, 244, 238, + 217, 114, 77, 1, 254, 161, 244, 238, 144, 68, 77, 1, 254, 161, 244, 238, + 144, 184, 77, 1, 234, 84, 254, 161, 244, 238, 252, 94, 77, 1, 254, 161, + 244, 238, 249, 197, 77, 1, 234, 84, 254, 161, 244, 238, 235, 79, 18, 19, + 230, 63, 18, 19, 253, 212, 18, 19, 255, 14, 18, 19, 218, 229, 18, 19, + 229, 7, 18, 19, 229, 205, 18, 19, 228, 172, 18, 19, 222, 96, 18, 19, 236, + 191, 18, 19, 235, 232, 18, 19, 234, 45, 18, 19, 231, 172, 18, 19, 232, + 199, 18, 19, 235, 132, 18, 19, 224, 1, 18, 19, 226, 118, 18, 19, 224, + 175, 18, 19, 224, 249, 18, 19, 224, 150, 18, 19, 217, 208, 18, 19, 218, + 30, 18, 19, 227, 222, 18, 19, 231, 82, 18, 19, 230, 155, 231, 82, 18, 19, + 231, 81, 18, 19, 230, 155, 231, 81, 18, 19, 231, 80, 18, 19, 230, 155, + 231, 80, 18, 19, 231, 79, 18, 19, 230, 155, 231, 79, 18, 19, 226, 248, + 18, 19, 226, 247, 18, 19, 226, 246, 18, 19, 226, 245, 18, 19, 226, 244, + 18, 19, 226, 252, 18, 19, 230, 155, 230, 59, 18, 19, 230, 155, 222, 201, + 18, 19, 230, 155, 237, 17, 18, 19, 230, 155, 251, 202, 18, 19, 230, 155, + 189, 18, 19, 230, 155, 207, 18, 19, 230, 155, 198, 18, 19, 230, 155, 225, + 27, 18, 19, 247, 4, 219, 40, 18, 19, 218, 215, 219, 40, 18, 19, 39, 3, + 227, 93, 18, 19, 39, 227, 241, 248, 145, 18, 19, 228, 38, 226, 249, 18, + 19, 137, 234, 248, 18, 19, 137, 235, 187, 18, 19, 221, 214, 18, 19, 221, + 216, 18, 19, 221, 13, 18, 19, 221, 14, 18, 19, 221, 18, 18, 19, 221, 145, + 18, 19, 221, 147, 18, 19, 226, 116, 224, 155, 18, 19, 226, 116, 224, 195, + 18, 19, 226, 116, 242, 248, 18, 19, 64, 243, 238, 18, 19, 64, 249, 60, + 244, 184, 18, 19, 64, 244, 253, 18, 19, 64, 243, 243, 18, 19, 226, 116, + 237, 27, 18, 19, 64, 237, 25, 18, 19, 252, 139, 249, 60, 153, 18, 19, + 252, 139, 249, 60, 152, 18, 19, 64, 249, 55, 198, 195, 219, 59, 235, 84, + 195, 1, 175, 195, 1, 236, 149, 195, 1, 245, 0, 195, 1, 244, 125, 195, 1, + 232, 115, 195, 1, 251, 169, 195, 1, 251, 69, 195, 1, 237, 123, 195, 1, + 237, 103, 195, 1, 218, 47, 195, 1, 222, 155, 195, 1, 222, 35, 195, 1, + 249, 207, 195, 1, 249, 36, 195, 1, 208, 195, 1, 187, 195, 1, 229, 141, + 195, 1, 252, 237, 195, 1, 252, 94, 195, 1, 196, 195, 1, 184, 195, 1, 203, + 195, 1, 235, 188, 195, 1, 219, 7, 195, 1, 225, 25, 195, 1, 223, 218, 195, + 1, 226, 177, 195, 1, 155, 195, 29, 5, 60, 195, 29, 5, 72, 195, 29, 5, 68, + 195, 29, 5, 246, 250, 195, 29, 5, 254, 196, 195, 29, 5, 230, 127, 195, + 29, 5, 253, 232, 195, 29, 5, 73, 195, 29, 5, 74, 195, 223, 97, 1, 184, + 195, 223, 97, 1, 203, 195, 223, 97, 1, 219, 7, 195, 3, 1, 175, 195, 3, 1, + 232, 115, 195, 3, 1, 254, 95, 195, 3, 1, 222, 155, 195, 3, 1, 208, 195, + 3, 1, 187, 195, 3, 1, 196, 195, 3, 1, 203, 195, 3, 1, 235, 188, 195, 5, + 233, 89, 195, 5, 236, 173, 195, 5, 226, 176, 195, 5, 234, 248, 195, 246, + 95, 78, 195, 228, 82, 78, 195, 20, 217, 84, 195, 20, 107, 195, 20, 103, + 195, 20, 160, 195, 20, 154, 195, 20, 174, 195, 20, 182, 195, 20, 191, + 195, 20, 185, 195, 20, 190, 37, 235, 123, 1, 175, 37, 235, 123, 1, 218, + 138, 37, 235, 123, 1, 232, 115, 37, 235, 123, 1, 221, 55, 37, 235, 123, + 1, 226, 177, 37, 235, 123, 1, 184, 37, 235, 123, 1, 222, 155, 37, 235, + 123, 1, 222, 35, 37, 235, 123, 1, 235, 188, 37, 235, 123, 1, 187, 37, + 235, 123, 1, 229, 141, 37, 235, 123, 1, 196, 37, 235, 123, 1, 246, 8, 37, + 235, 123, 1, 219, 189, 37, 235, 123, 1, 155, 37, 235, 123, 1, 228, 155, + 37, 235, 123, 1, 236, 149, 37, 235, 123, 1, 221, 47, 37, 235, 123, 1, + 208, 37, 235, 123, 1, 60, 37, 235, 123, 1, 72, 37, 235, 123, 1, 246, 250, + 37, 235, 123, 1, 246, 239, 37, 235, 123, 1, 68, 37, 235, 123, 1, 230, + 127, 37, 235, 123, 1, 74, 37, 235, 123, 1, 220, 110, 37, 235, 123, 1, 73, + 37, 235, 123, 1, 253, 231, 37, 235, 123, 1, 254, 196, 37, 235, 123, 1, + 221, 130, 37, 235, 123, 1, 221, 129, 37, 235, 123, 1, 221, 128, 37, 235, + 123, 1, 221, 127, 37, 235, 123, 1, 221, 126, 146, 37, 151, 1, 116, 228, + 155, 146, 37, 151, 1, 109, 228, 155, 146, 37, 151, 1, 116, 175, 146, 37, + 151, 1, 116, 218, 138, 146, 37, 151, 1, 116, 232, 115, 146, 37, 151, 1, + 109, 175, 146, 37, 151, 1, 109, 218, 138, 146, 37, 151, 1, 109, 232, 115, + 146, 37, 151, 1, 116, 221, 55, 146, 37, 151, 1, 116, 226, 177, 146, 37, + 151, 1, 116, 184, 146, 37, 151, 1, 109, 221, 55, 146, 37, 151, 1, 109, + 226, 177, 146, 37, 151, 1, 109, 184, 146, 37, 151, 1, 116, 222, 155, 146, + 37, 151, 1, 116, 222, 35, 146, 37, 151, 1, 116, 208, 146, 37, 151, 1, + 109, 222, 155, 146, 37, 151, 1, 109, 222, 35, 146, 37, 151, 1, 109, 208, + 146, 37, 151, 1, 116, 187, 146, 37, 151, 1, 116, 229, 141, 146, 37, 151, + 1, 116, 196, 146, 37, 151, 1, 109, 187, 146, 37, 151, 1, 109, 229, 141, + 146, 37, 151, 1, 109, 196, 146, 37, 151, 1, 116, 246, 8, 146, 37, 151, 1, + 116, 219, 189, 146, 37, 151, 1, 116, 235, 188, 146, 37, 151, 1, 109, 246, + 8, 146, 37, 151, 1, 109, 219, 189, 146, 37, 151, 1, 109, 235, 188, 146, + 37, 151, 1, 116, 155, 146, 37, 151, 1, 116, 249, 207, 146, 37, 151, 1, + 116, 252, 237, 146, 37, 151, 1, 109, 155, 146, 37, 151, 1, 109, 249, 207, + 146, 37, 151, 1, 109, 252, 237, 146, 37, 151, 1, 116, 235, 236, 146, 37, + 151, 1, 116, 218, 111, 146, 37, 151, 1, 109, 235, 236, 146, 37, 151, 1, + 109, 218, 111, 146, 37, 151, 1, 116, 223, 102, 146, 37, 151, 1, 109, 223, + 102, 146, 37, 151, 29, 5, 29, 224, 181, 146, 37, 151, 29, 5, 255, 58, + 146, 37, 151, 29, 5, 237, 255, 146, 37, 151, 29, 5, 68, 146, 37, 151, 29, + 5, 220, 23, 146, 37, 151, 29, 5, 73, 146, 37, 151, 29, 5, 254, 234, 146, + 37, 151, 29, 5, 74, 146, 37, 151, 29, 5, 230, 185, 146, 37, 151, 29, 5, + 220, 110, 146, 37, 151, 29, 5, 253, 212, 146, 37, 151, 29, 5, 255, 14, + 146, 37, 151, 29, 5, 220, 16, 146, 37, 151, 29, 5, 230, 63, 146, 37, 151, + 29, 5, 230, 182, 146, 37, 151, 29, 5, 220, 107, 146, 37, 151, 29, 5, 237, + 133, 146, 37, 151, 1, 39, 216, 216, 146, 37, 151, 1, 39, 232, 117, 146, + 37, 151, 1, 39, 207, 146, 37, 151, 1, 39, 189, 146, 37, 151, 1, 39, 237, + 17, 146, 37, 151, 1, 39, 250, 46, 146, 37, 151, 1, 39, 253, 204, 146, 37, + 151, 145, 234, 67, 146, 37, 151, 145, 234, 66, 146, 37, 151, 20, 217, 84, + 146, 37, 151, 20, 107, 146, 37, 151, 20, 103, 146, 37, 151, 20, 160, 146, + 37, 151, 20, 154, 146, 37, 151, 20, 174, 146, 37, 151, 20, 182, 146, 37, + 151, 20, 191, 146, 37, 151, 20, 185, 146, 37, 151, 20, 190, 146, 37, 151, + 83, 20, 107, 146, 37, 151, 5, 235, 177, 146, 37, 151, 5, 235, 176, 79, + 16, 229, 211, 79, 16, 233, 73, 236, 55, 79, 16, 229, 77, 236, 55, 79, 16, + 252, 124, 236, 55, 79, 16, 251, 234, 236, 55, 79, 16, 229, 2, 236, 55, + 79, 16, 228, 252, 236, 55, 79, 16, 228, 250, 236, 55, 79, 16, 229, 0, + 236, 55, 79, 16, 228, 254, 236, 55, 79, 16, 249, 163, 236, 55, 79, 16, + 249, 159, 236, 55, 79, 16, 249, 158, 236, 55, 79, 16, 249, 161, 236, 55, + 79, 16, 249, 160, 236, 55, 79, 16, 249, 157, 236, 55, 79, 16, 220, 230, + 79, 16, 233, 73, 227, 70, 79, 16, 229, 77, 227, 70, 79, 16, 252, 124, + 227, 70, 79, 16, 251, 234, 227, 70, 79, 16, 229, 2, 227, 70, 79, 16, 228, + 252, 227, 70, 79, 16, 228, 250, 227, 70, 79, 16, 229, 0, 227, 70, 79, 16, + 228, 254, 227, 70, 79, 16, 249, 163, 227, 70, 79, 16, 249, 159, 227, 70, + 79, 16, 249, 158, 227, 70, 79, 16, 249, 161, 227, 70, 79, 16, 249, 160, + 227, 70, 79, 16, 249, 157, 227, 70, 251, 246, 1, 175, 251, 246, 1, 245, + 0, 251, 246, 1, 232, 115, 251, 246, 1, 232, 87, 251, 246, 1, 187, 251, + 246, 1, 252, 237, 251, 246, 1, 196, 251, 246, 1, 233, 102, 251, 246, 1, + 222, 155, 251, 246, 1, 249, 207, 251, 246, 1, 208, 251, 246, 1, 231, 171, + 251, 246, 1, 251, 169, 251, 246, 1, 237, 123, 251, 246, 1, 231, 77, 251, + 246, 1, 231, 75, 251, 246, 1, 184, 251, 246, 1, 203, 251, 246, 1, 235, + 188, 251, 246, 1, 219, 189, 251, 246, 1, 226, 177, 251, 246, 1, 60, 251, + 246, 1, 155, 251, 246, 29, 5, 72, 251, 246, 29, 5, 68, 251, 246, 29, 5, + 73, 251, 246, 29, 5, 74, 251, 246, 29, 5, 254, 234, 251, 246, 230, 24, + 251, 246, 246, 190, 117, 226, 86, 37, 83, 1, 116, 175, 37, 83, 1, 116, + 236, 149, 37, 83, 1, 116, 235, 224, 37, 83, 1, 109, 175, 37, 83, 1, 109, + 235, 224, 37, 83, 1, 109, 236, 149, 37, 83, 1, 232, 115, 37, 83, 1, 116, + 251, 169, 37, 83, 1, 116, 251, 69, 37, 83, 1, 109, 251, 169, 37, 83, 1, + 109, 226, 177, 37, 83, 1, 109, 251, 69, 37, 83, 1, 231, 77, 37, 83, 1, + 227, 227, 37, 83, 1, 116, 227, 225, 37, 83, 1, 249, 207, 37, 83, 1, 109, + 227, 225, 37, 83, 1, 227, 235, 37, 83, 1, 116, 222, 155, 37, 83, 1, 116, + 222, 35, 37, 83, 1, 109, 222, 155, 37, 83, 1, 109, 222, 35, 37, 83, 1, + 208, 37, 83, 1, 252, 237, 37, 83, 1, 116, 187, 37, 83, 1, 116, 229, 141, + 37, 83, 1, 116, 246, 8, 37, 83, 1, 109, 187, 37, 83, 1, 109, 246, 8, 37, + 83, 1, 109, 229, 141, 37, 83, 1, 196, 37, 83, 1, 109, 184, 37, 83, 1, + 116, 184, 37, 83, 1, 203, 37, 83, 1, 227, 19, 37, 83, 1, 235, 188, 37, + 83, 1, 234, 227, 37, 83, 1, 219, 7, 37, 83, 1, 116, 225, 25, 37, 83, 1, + 116, 223, 218, 37, 83, 1, 116, 226, 177, 37, 83, 1, 116, 155, 37, 83, 1, + 235, 17, 37, 83, 1, 60, 37, 83, 1, 109, 155, 37, 83, 1, 72, 37, 83, 1, + 237, 255, 37, 83, 1, 68, 37, 83, 1, 220, 23, 37, 83, 1, 246, 250, 37, 83, + 1, 230, 127, 37, 83, 1, 235, 177, 37, 83, 1, 244, 32, 226, 177, 37, 83, + 250, 147, 5, 128, 203, 37, 83, 250, 147, 5, 128, 235, 188, 37, 83, 250, + 147, 5, 235, 189, 222, 118, 235, 167, 37, 83, 5, 234, 100, 236, 230, 235, + 167, 37, 83, 250, 147, 5, 39, 232, 115, 37, 83, 250, 147, 5, 109, 187, + 37, 83, 250, 147, 5, 116, 227, 226, 156, 109, 187, 37, 83, 250, 147, 5, + 196, 37, 83, 250, 147, 5, 252, 237, 37, 83, 250, 147, 5, 226, 177, 37, + 83, 5, 226, 158, 37, 83, 29, 5, 60, 37, 83, 29, 5, 234, 100, 226, 127, + 37, 83, 29, 5, 255, 58, 37, 83, 29, 5, 222, 123, 255, 58, 37, 83, 29, 5, + 72, 37, 83, 29, 5, 237, 255, 37, 83, 29, 5, 220, 110, 37, 83, 29, 5, 220, + 22, 37, 83, 29, 5, 68, 37, 83, 29, 5, 220, 23, 37, 83, 29, 5, 74, 37, 83, + 29, 5, 230, 186, 56, 37, 83, 29, 5, 230, 63, 37, 83, 29, 5, 73, 37, 83, + 29, 5, 254, 234, 37, 83, 29, 5, 230, 127, 37, 83, 29, 5, 254, 196, 37, + 83, 29, 5, 83, 254, 196, 37, 83, 29, 5, 230, 186, 50, 37, 83, 5, 234, + 100, 236, 229, 37, 83, 5, 221, 131, 37, 83, 5, 221, 130, 37, 83, 5, 236, + 118, 221, 129, 37, 83, 5, 236, 118, 221, 128, 37, 83, 5, 236, 118, 221, + 127, 37, 83, 5, 228, 3, 243, 210, 37, 83, 5, 234, 100, 226, 148, 37, 83, + 5, 236, 117, 236, 215, 37, 83, 36, 250, 93, 248, 145, 37, 83, 242, 243, + 20, 217, 84, 37, 83, 242, 243, 20, 107, 37, 83, 242, 243, 20, 103, 37, + 83, 242, 243, 20, 160, 37, 83, 242, 243, 20, 154, 37, 83, 242, 243, 20, + 174, 37, 83, 242, 243, 20, 182, 37, 83, 242, 243, 20, 191, 37, 83, 242, + 243, 20, 185, 37, 83, 242, 243, 20, 190, 37, 83, 83, 20, 217, 84, 37, 83, + 83, 20, 107, 37, 83, 83, 20, 103, 37, 83, 83, 20, 160, 37, 83, 83, 20, + 154, 37, 83, 83, 20, 174, 37, 83, 83, 20, 182, 37, 83, 83, 20, 191, 37, + 83, 83, 20, 185, 37, 83, 83, 20, 190, 37, 83, 5, 218, 203, 37, 83, 5, + 218, 202, 37, 83, 5, 226, 121, 37, 83, 5, 236, 163, 37, 83, 5, 242, 180, + 37, 83, 5, 248, 157, 37, 83, 5, 210, 227, 59, 227, 235, 37, 83, 5, 234, + 100, 218, 48, 37, 83, 5, 237, 1, 37, 83, 5, 237, 0, 37, 83, 5, 226, 126, + 37, 83, 5, 226, 125, 37, 83, 5, 243, 186, 37, 83, 5, 251, 166, 94, 5, + 220, 97, 227, 144, 94, 5, 220, 97, 251, 148, 94, 5, 251, 95, 94, 5, 223, + 51, 94, 5, 252, 64, 94, 1, 254, 180, 94, 1, 254, 181, 222, 82, 94, 1, + 237, 251, 94, 1, 237, 252, 222, 82, 94, 1, 220, 100, 94, 1, 220, 101, + 222, 82, 94, 1, 228, 3, 227, 183, 94, 1, 228, 3, 227, 184, 222, 82, 94, + 1, 235, 189, 235, 95, 94, 1, 235, 189, 235, 96, 222, 82, 94, 1, 246, 222, + 94, 1, 254, 194, 94, 1, 230, 153, 94, 1, 230, 154, 222, 82, 94, 1, 175, + 94, 1, 206, 234, 103, 94, 1, 245, 0, 94, 1, 245, 1, 244, 58, 94, 1, 232, + 115, 94, 1, 251, 169, 94, 1, 251, 170, 235, 179, 94, 1, 237, 123, 94, 1, + 237, 124, 237, 107, 94, 1, 231, 77, 94, 1, 222, 156, 235, 138, 94, 1, + 222, 156, 233, 68, 234, 103, 94, 1, 249, 208, 233, 68, 254, 148, 94, 1, + 249, 208, 233, 68, 234, 103, 94, 1, 232, 238, 227, 238, 94, 1, 222, 155, + 94, 1, 222, 156, 222, 99, 94, 1, 249, 207, 94, 1, 249, 208, 234, 108, 94, + 1, 208, 94, 1, 187, 94, 1, 230, 44, 236, 225, 94, 1, 252, 237, 94, 1, + 252, 238, 236, 174, 94, 1, 196, 94, 1, 184, 94, 1, 203, 94, 1, 235, 188, + 94, 1, 219, 7, 94, 1, 226, 178, 226, 164, 94, 1, 226, 178, 226, 132, 94, + 1, 226, 177, 94, 1, 155, 94, 5, 227, 177, 94, 29, 5, 222, 82, 94, 29, 5, + 220, 96, 94, 29, 5, 220, 97, 226, 129, 94, 29, 5, 223, 77, 94, 29, 5, + 223, 78, 237, 243, 94, 29, 5, 228, 3, 227, 183, 94, 29, 5, 228, 3, 227, + 184, 222, 82, 94, 29, 5, 235, 189, 235, 95, 94, 29, 5, 235, 189, 235, 96, + 222, 82, 94, 29, 5, 222, 124, 94, 29, 5, 222, 125, 227, 183, 94, 29, 5, + 222, 125, 222, 82, 94, 29, 5, 222, 125, 227, 184, 222, 82, 94, 29, 5, + 229, 171, 94, 29, 5, 229, 172, 222, 82, 94, 254, 240, 254, 239, 94, 1, + 236, 247, 226, 128, 94, 1, 236, 122, 226, 128, 94, 1, 220, 183, 226, 128, + 94, 1, 246, 245, 226, 128, 94, 1, 219, 166, 226, 128, 94, 1, 217, 105, + 226, 128, 94, 1, 253, 246, 226, 128, 94, 20, 217, 84, 94, 20, 107, 94, + 20, 103, 94, 20, 160, 94, 20, 154, 94, 20, 174, 94, 20, 182, 94, 20, 191, + 94, 20, 185, 94, 20, 190, 94, 229, 254, 94, 230, 19, 94, 218, 193, 94, + 251, 132, 230, 13, 94, 251, 132, 224, 122, 94, 251, 132, 229, 228, 94, + 230, 18, 94, 26, 16, 248, 151, 94, 26, 16, 249, 59, 94, 26, 16, 247, 97, + 94, 26, 16, 249, 165, 94, 26, 16, 249, 166, 223, 51, 94, 26, 16, 248, + 218, 94, 26, 16, 249, 200, 94, 26, 16, 249, 44, 94, 26, 16, 249, 186, 94, + 26, 16, 249, 166, 244, 186, 94, 26, 16, 36, 222, 79, 94, 26, 16, 36, 246, + 188, 94, 26, 16, 36, 236, 169, 94, 26, 16, 36, 236, 171, 94, 26, 16, 36, + 237, 111, 94, 26, 16, 36, 236, 170, 2, 237, 111, 94, 26, 16, 36, 236, + 172, 2, 237, 111, 94, 26, 16, 36, 252, 112, 94, 26, 16, 36, 244, 61, 94, + 26, 16, 227, 107, 230, 119, 247, 107, 94, 26, 16, 227, 107, 230, 119, + 249, 198, 94, 26, 16, 227, 107, 250, 197, 220, 251, 94, 26, 16, 227, 107, + 250, 197, 222, 131, 94, 26, 16, 235, 113, 230, 119, 230, 9, 94, 26, 16, + 235, 113, 230, 119, 228, 195, 94, 26, 16, 235, 113, 250, 197, 229, 54, + 94, 26, 16, 235, 113, 250, 197, 229, 46, 94, 26, 16, 235, 113, 230, 119, + 229, 72, 223, 67, 5, 229, 251, 223, 67, 5, 230, 5, 223, 67, 5, 230, 3, + 223, 67, 1, 60, 223, 67, 1, 72, 223, 67, 1, 68, 223, 67, 1, 254, 234, + 223, 67, 1, 74, 223, 67, 1, 73, 223, 67, 1, 246, 115, 223, 67, 1, 175, + 223, 67, 1, 228, 155, 223, 67, 1, 245, 0, 223, 67, 1, 232, 115, 223, 67, + 1, 251, 169, 223, 67, 1, 237, 123, 223, 67, 1, 217, 114, 223, 67, 1, 231, + 77, 223, 67, 1, 222, 155, 223, 67, 1, 249, 207, 223, 67, 1, 208, 223, 67, + 1, 187, 223, 67, 1, 246, 8, 223, 67, 1, 219, 189, 223, 67, 1, 252, 237, + 223, 67, 1, 196, 223, 67, 1, 184, 223, 67, 1, 203, 223, 67, 1, 235, 188, + 223, 67, 1, 219, 7, 223, 67, 1, 226, 177, 223, 67, 1, 218, 138, 223, 67, + 1, 155, 223, 67, 250, 147, 5, 230, 16, 223, 67, 250, 147, 5, 229, 253, + 223, 67, 250, 147, 5, 229, 250, 223, 67, 29, 5, 230, 8, 223, 67, 29, 5, + 229, 249, 223, 67, 29, 5, 230, 11, 223, 67, 29, 5, 230, 2, 223, 67, 29, + 5, 230, 17, 223, 67, 29, 5, 230, 10, 223, 67, 5, 230, 20, 223, 67, 1, + 236, 149, 223, 67, 1, 223, 20, 223, 67, 20, 217, 84, 223, 67, 20, 107, + 223, 67, 20, 103, 223, 67, 20, 160, 223, 67, 20, 154, 223, 67, 20, 174, + 223, 67, 20, 182, 223, 67, 20, 191, 223, 67, 20, 185, 223, 67, 20, 190, + 169, 1, 175, 169, 1, 236, 67, 169, 1, 236, 149, 169, 1, 245, 0, 169, 1, + 244, 77, 169, 1, 232, 115, 169, 1, 251, 169, 169, 1, 251, 69, 169, 1, + 237, 123, 169, 1, 231, 77, 169, 1, 222, 155, 169, 1, 222, 35, 169, 1, + 249, 207, 169, 1, 208, 169, 1, 187, 169, 1, 229, 58, 169, 1, 229, 141, + 169, 1, 246, 8, 169, 1, 245, 165, 169, 1, 252, 237, 169, 1, 252, 54, 169, + 1, 196, 169, 1, 233, 142, 169, 1, 221, 55, 169, 1, 221, 47, 169, 1, 247, + 74, 169, 1, 184, 169, 1, 203, 169, 1, 235, 188, 169, 1, 155, 169, 1, 243, + 89, 169, 1, 219, 189, 169, 1, 226, 177, 169, 1, 225, 25, 169, 1, 219, 7, + 169, 1, 60, 169, 223, 97, 1, 184, 169, 223, 97, 1, 203, 169, 29, 5, 255, + 58, 169, 29, 5, 72, 169, 29, 5, 74, 169, 29, 5, 230, 127, 169, 29, 5, 68, + 169, 29, 5, 220, 23, 169, 29, 5, 73, 169, 250, 147, 5, 237, 17, 169, 250, + 147, 5, 189, 169, 250, 147, 5, 153, 169, 250, 147, 5, 207, 169, 250, 147, + 5, 230, 59, 169, 250, 147, 5, 152, 169, 250, 147, 5, 222, 201, 169, 250, + 147, 5, 231, 62, 169, 250, 147, 5, 236, 229, 169, 5, 227, 236, 169, 5, + 231, 112, 169, 228, 197, 222, 154, 169, 228, 197, 231, 69, 221, 208, 222, + 154, 169, 228, 197, 251, 74, 169, 228, 197, 221, 42, 251, 74, 169, 228, + 197, 221, 41, 169, 20, 217, 84, 169, 20, 107, 169, 20, 103, 169, 20, 160, + 169, 20, 154, 169, 20, 174, 169, 20, 182, 169, 20, 191, 169, 20, 185, + 169, 20, 190, 169, 1, 221, 29, 169, 1, 221, 19, 169, 1, 249, 132, 230, + 151, 251, 26, 20, 217, 84, 230, 151, 251, 26, 20, 107, 230, 151, 251, 26, + 20, 103, 230, 151, 251, 26, 20, 160, 230, 151, 251, 26, 20, 154, 230, + 151, 251, 26, 20, 174, 230, 151, 251, 26, 20, 182, 230, 151, 251, 26, 20, + 191, 230, 151, 251, 26, 20, 185, 230, 151, 251, 26, 20, 190, 230, 151, + 251, 26, 1, 235, 188, 230, 151, 251, 26, 1, 253, 244, 230, 151, 251, 26, + 1, 254, 209, 230, 151, 251, 26, 1, 254, 123, 230, 151, 251, 26, 1, 254, + 175, 230, 151, 251, 26, 1, 235, 187, 230, 151, 251, 26, 1, 255, 20, 230, + 151, 251, 26, 1, 255, 21, 230, 151, 251, 26, 1, 255, 19, 230, 151, 251, + 26, 1, 255, 15, 230, 151, 251, 26, 1, 235, 67, 230, 151, 251, 26, 1, 237, + 151, 230, 151, 251, 26, 1, 238, 0, 230, 151, 251, 26, 1, 237, 167, 230, + 151, 251, 26, 1, 237, 156, 230, 151, 251, 26, 1, 234, 231, 230, 151, 251, + 26, 1, 220, 117, 230, 151, 251, 26, 1, 220, 115, 230, 151, 251, 26, 1, + 220, 68, 230, 151, 251, 26, 1, 220, 16, 230, 151, 251, 26, 1, 235, 122, + 230, 151, 251, 26, 1, 246, 162, 230, 151, 251, 26, 1, 246, 253, 230, 151, + 251, 26, 1, 246, 197, 230, 151, 251, 26, 1, 246, 142, 230, 151, 251, 26, + 1, 235, 12, 230, 151, 251, 26, 1, 230, 89, 230, 151, 251, 26, 1, 230, + 181, 230, 151, 251, 26, 1, 230, 79, 230, 151, 251, 26, 1, 230, 161, 230, + 151, 251, 26, 233, 100, 221, 1, 230, 151, 251, 26, 244, 251, 221, 2, 230, + 151, 251, 26, 233, 98, 221, 2, 230, 151, 251, 26, 227, 193, 230, 151, + 251, 26, 229, 139, 230, 151, 251, 26, 254, 201, 230, 151, 251, 26, 228, + 197, 233, 96, 230, 151, 251, 26, 228, 197, 51, 233, 96, 219, 162, 145, + 236, 211, 219, 162, 145, 225, 2, 219, 162, 145, 228, 241, 219, 162, 5, + 232, 39, 219, 162, 5, 218, 56, 233, 191, 223, 39, 219, 162, 145, 218, 56, + 254, 206, 237, 214, 223, 39, 219, 162, 145, 218, 56, 237, 214, 223, 39, + 219, 162, 145, 218, 56, 236, 199, 237, 214, 223, 39, 219, 162, 145, 251, + 149, 56, 219, 162, 145, 218, 56, 236, 199, 237, 214, 223, 40, 226, 106, + 219, 162, 145, 51, 223, 39, 219, 162, 145, 221, 78, 223, 39, 219, 162, + 145, 236, 199, 254, 97, 219, 162, 145, 61, 56, 219, 162, 145, 124, 188, + 56, 219, 162, 145, 148, 188, 56, 219, 162, 145, 227, 99, 236, 210, 237, + 214, 223, 39, 219, 162, 145, 253, 242, 237, 214, 223, 39, 219, 162, 5, + 219, 78, 223, 39, 219, 162, 5, 219, 78, 220, 112, 219, 162, 5, 210, 219, + 78, 220, 112, 219, 162, 5, 219, 78, 254, 97, 219, 162, 5, 210, 219, 78, + 254, 97, 219, 162, 5, 219, 78, 220, 113, 2, 222, 135, 219, 162, 5, 219, + 78, 254, 98, 2, 222, 135, 219, 162, 5, 254, 96, 254, 105, 219, 162, 5, + 254, 96, 252, 222, 219, 162, 5, 254, 96, 219, 184, 219, 162, 5, 254, 96, + 219, 185, 2, 222, 135, 219, 162, 5, 221, 162, 219, 162, 5, 243, 123, 171, + 254, 95, 219, 162, 5, 171, 254, 95, 219, 162, 5, 227, 24, 171, 254, 95, + 219, 162, 5, 254, 96, 220, 119, 233, 90, 219, 162, 5, 254, 46, 7, 1, 3, + 6, 60, 7, 1, 3, 6, 254, 234, 7, 3, 1, 215, 254, 234, 7, 1, 3, 6, 252, + 196, 253, 204, 7, 1, 3, 6, 251, 202, 7, 1, 3, 6, 250, 46, 7, 1, 3, 6, + 246, 118, 7, 1, 3, 6, 73, 7, 3, 1, 215, 230, 119, 73, 7, 3, 1, 215, 72, + 7, 1, 3, 6, 237, 126, 7, 1, 3, 6, 237, 17, 7, 1, 3, 6, 235, 202, 2, 92, + 7, 1, 3, 6, 189, 7, 1, 3, 6, 210, 207, 7, 1, 3, 6, 74, 7, 1, 3, 6, 230, + 119, 74, 7, 3, 1, 224, 136, 74, 7, 3, 1, 224, 136, 230, 119, 74, 7, 3, 1, + 224, 136, 142, 2, 92, 7, 3, 1, 215, 230, 167, 7, 1, 3, 6, 230, 86, 7, 3, + 1, 221, 120, 144, 74, 7, 3, 1, 252, 29, 144, 74, 7, 1, 3, 6, 230, 59, 7, + 1, 3, 6, 210, 152, 7, 1, 3, 6, 215, 152, 7, 1, 3, 6, 222, 201, 7, 1, 3, + 6, 68, 7, 3, 1, 224, 136, 68, 7, 3, 1, 224, 136, 249, 12, 68, 7, 3, 1, + 224, 136, 215, 189, 7, 1, 3, 6, 216, 216, 7, 1, 3, 6, 219, 40, 7, 1, 3, + 6, 217, 157, 7, 1, 3, 6, 246, 76, 7, 1, 219, 70, 235, 144, 223, 241, 7, + 1, 254, 191, 23, 1, 3, 6, 244, 231, 23, 1, 3, 6, 235, 156, 23, 1, 3, 6, + 229, 108, 23, 1, 3, 6, 227, 149, 23, 1, 3, 6, 228, 212, 31, 1, 3, 6, 246, + 217, 58, 1, 6, 60, 58, 1, 6, 254, 234, 58, 1, 6, 253, 204, 58, 1, 6, 252, + 196, 253, 204, 58, 1, 6, 250, 46, 58, 1, 6, 73, 58, 1, 6, 210, 73, 58, 1, + 6, 245, 67, 58, 1, 6, 243, 225, 58, 1, 6, 72, 58, 1, 6, 237, 126, 58, 1, + 6, 237, 17, 58, 1, 6, 153, 58, 1, 6, 189, 58, 1, 6, 207, 58, 1, 6, 210, + 207, 58, 1, 6, 74, 58, 1, 6, 230, 86, 58, 1, 6, 230, 59, 58, 1, 6, 152, + 58, 1, 6, 222, 201, 58, 1, 6, 68, 58, 1, 6, 219, 40, 58, 1, 3, 60, 58, 1, + 3, 215, 60, 58, 1, 3, 254, 146, 58, 1, 3, 215, 254, 234, 58, 1, 3, 253, + 204, 58, 1, 3, 250, 46, 58, 1, 3, 73, 58, 1, 3, 226, 104, 58, 1, 3, 230, + 119, 73, 58, 1, 3, 215, 230, 119, 73, 58, 1, 3, 245, 67, 58, 1, 3, 215, + 72, 58, 1, 3, 237, 17, 58, 1, 3, 189, 58, 1, 3, 246, 185, 58, 1, 3, 74, + 58, 1, 3, 230, 119, 74, 58, 1, 3, 221, 120, 144, 74, 58, 1, 3, 252, 29, + 144, 74, 58, 1, 3, 230, 59, 58, 1, 3, 222, 201, 58, 1, 3, 68, 58, 1, 3, + 224, 136, 68, 58, 1, 3, 215, 189, 58, 1, 3, 216, 216, 58, 1, 3, 254, 191, + 58, 1, 3, 252, 102, 58, 1, 3, 23, 244, 231, 58, 1, 3, 249, 62, 58, 1, 3, + 23, 229, 129, 58, 1, 3, 251, 31, 7, 223, 94, 3, 1, 72, 7, 223, 94, 3, 1, + 152, 7, 223, 94, 3, 1, 68, 7, 223, 94, 3, 1, 216, 216, 23, 223, 94, 3, 1, + 252, 102, 23, 223, 94, 3, 1, 244, 231, 23, 223, 94, 3, 1, 227, 149, 23, + 223, 94, 3, 1, 229, 129, 23, 223, 94, 3, 1, 251, 31, 7, 3, 1, 220, 110, + 7, 3, 1, 49, 2, 233, 193, 221, 179, 7, 3, 1, 250, 47, 2, 233, 193, 221, + 179, 7, 3, 1, 246, 75, 2, 233, 193, 221, 179, 7, 3, 1, 234, 187, 2, 233, + 193, 221, 179, 7, 3, 1, 233, 34, 2, 233, 193, 221, 179, 7, 3, 1, 230, 60, + 2, 233, 193, 221, 179, 7, 3, 1, 228, 39, 2, 233, 193, 221, 179, 7, 3, 1, + 228, 39, 2, 245, 174, 25, 233, 193, 221, 179, 7, 3, 1, 226, 235, 2, 233, + 193, 221, 179, 7, 3, 1, 222, 202, 2, 233, 193, 221, 179, 7, 3, 1, 217, + 158, 2, 233, 193, 221, 179, 7, 3, 1, 215, 245, 67, 58, 1, 31, 246, 197, + 7, 3, 1, 237, 188, 245, 67, 7, 3, 1, 222, 38, 2, 223, 121, 7, 3, 6, 1, + 242, 107, 2, 92, 7, 3, 1, 237, 163, 2, 92, 7, 3, 1, 230, 60, 2, 92, 7, 3, + 6, 1, 105, 2, 92, 7, 3, 1, 220, 58, 2, 92, 7, 3, 1, 49, 2, 230, 29, 96, + 7, 3, 1, 250, 47, 2, 230, 29, 96, 7, 3, 1, 246, 75, 2, 230, 29, 96, 7, 3, + 1, 245, 68, 2, 230, 29, 96, 7, 3, 1, 237, 18, 2, 230, 29, 96, 7, 3, 1, + 235, 202, 2, 230, 29, 96, 7, 3, 1, 234, 187, 2, 230, 29, 96, 7, 3, 1, + 233, 34, 2, 230, 29, 96, 7, 3, 1, 230, 60, 2, 230, 29, 96, 7, 3, 1, 228, + 39, 2, 230, 29, 96, 7, 3, 1, 226, 235, 2, 230, 29, 96, 7, 3, 1, 246, 134, + 2, 230, 29, 96, 7, 3, 1, 220, 11, 2, 230, 29, 96, 7, 3, 1, 218, 152, 2, + 230, 29, 96, 7, 3, 1, 217, 158, 2, 230, 29, 96, 7, 3, 1, 112, 2, 227, + 164, 96, 7, 3, 1, 254, 147, 2, 227, 164, 96, 7, 3, 1, 250, 47, 2, 242, + 247, 25, 222, 135, 7, 3, 1, 178, 2, 227, 164, 96, 7, 3, 1, 230, 119, 178, + 2, 227, 164, 96, 7, 3, 1, 210, 230, 119, 178, 2, 227, 164, 96, 7, 3, 1, + 226, 105, 2, 227, 164, 96, 7, 3, 1, 242, 107, 2, 227, 164, 96, 7, 3, 1, + 230, 119, 142, 2, 227, 164, 96, 7, 3, 1, 246, 134, 2, 227, 164, 96, 7, 3, + 1, 105, 2, 227, 164, 96, 7, 3, 1, 246, 77, 2, 227, 164, 96, 58, 1, 3, + 215, 254, 146, 58, 1, 3, 251, 202, 58, 1, 3, 251, 203, 2, 250, 80, 58, 1, + 3, 246, 118, 58, 1, 3, 210, 230, 119, 73, 58, 1, 3, 246, 74, 58, 1, 3, + 248, 144, 237, 127, 2, 92, 58, 1, 3, 102, 245, 67, 58, 1, 3, 215, 243, + 225, 58, 1, 3, 242, 107, 2, 92, 58, 1, 3, 237, 162, 58, 1, 3, 6, 72, 58, + 1, 3, 6, 242, 107, 2, 92, 58, 1, 3, 237, 127, 2, 250, 97, 58, 1, 3, 235, + 202, 2, 227, 164, 96, 58, 1, 3, 235, 202, 2, 230, 29, 96, 58, 1, 3, 6, + 153, 58, 1, 3, 234, 187, 2, 96, 58, 1, 3, 215, 234, 187, 2, 171, 235, + 106, 58, 1, 3, 233, 34, 2, 42, 96, 58, 1, 3, 233, 34, 2, 227, 164, 96, + 58, 1, 3, 6, 207, 58, 1, 3, 252, 196, 74, 58, 1, 3, 229, 129, 58, 1, 3, + 226, 235, 2, 96, 58, 1, 3, 246, 133, 58, 1, 3, 222, 202, 2, 230, 29, 96, + 58, 1, 3, 105, 135, 58, 1, 3, 220, 57, 58, 1, 3, 6, 68, 58, 1, 3, 220, + 11, 2, 96, 58, 1, 3, 215, 216, 216, 58, 1, 3, 217, 157, 58, 1, 3, 217, + 158, 2, 227, 164, 96, 58, 1, 3, 217, 158, 2, 250, 80, 58, 1, 3, 246, 76, + 58, 1, 3, 222, 6, 36, 247, 143, 244, 37, 255, 0, 36, 247, 143, 254, 248, + 255, 0, 36, 224, 36, 56, 36, 223, 45, 78, 36, 234, 114, 36, 244, 34, 36, + 234, 112, 36, 254, 246, 36, 244, 35, 36, 254, 247, 36, 7, 3, 1, 228, 39, + 56, 36, 252, 7, 36, 234, 113, 36, 51, 250, 217, 50, 36, 230, 163, 50, 36, + 217, 33, 56, 36, 237, 152, 56, 36, 220, 51, 50, 36, 220, 35, 50, 36, 7, + 3, 1, 245, 154, 230, 119, 112, 50, 36, 7, 3, 1, 254, 234, 36, 7, 3, 1, + 254, 93, 36, 7, 3, 1, 253, 220, 36, 7, 3, 1, 251, 203, 251, 92, 36, 7, 3, + 1, 237, 188, 250, 46, 36, 7, 3, 1, 246, 118, 36, 7, 3, 1, 245, 67, 36, 7, + 1, 3, 6, 245, 67, 36, 7, 3, 1, 237, 17, 36, 7, 3, 1, 153, 36, 7, 1, 3, 6, + 153, 36, 7, 1, 3, 6, 189, 36, 7, 3, 1, 207, 36, 7, 1, 3, 6, 207, 36, 7, + 1, 3, 6, 152, 36, 7, 3, 1, 228, 39, 227, 58, 36, 7, 3, 1, 198, 36, 7, 3, + 1, 171, 198, 36, 7, 3, 1, 217, 157, 36, 254, 151, 114, 199, 56, 36, 42, + 254, 21, 50, 36, 45, 254, 21, 25, 113, 254, 21, 56, 7, 6, 1, 112, 2, 227, + 94, 56, 7, 3, 1, 112, 2, 227, 94, 56, 7, 6, 1, 49, 2, 61, 50, 7, 3, 1, + 49, 2, 61, 50, 7, 6, 1, 49, 2, 61, 56, 7, 3, 1, 49, 2, 61, 56, 7, 6, 1, + 49, 2, 235, 44, 56, 7, 3, 1, 49, 2, 235, 44, 56, 7, 6, 1, 251, 203, 2, + 251, 93, 25, 168, 7, 3, 1, 251, 203, 2, 251, 93, 25, 168, 7, 6, 1, 250, + 47, 2, 61, 50, 7, 3, 1, 250, 47, 2, 61, 50, 7, 6, 1, 250, 47, 2, 61, 56, + 7, 3, 1, 250, 47, 2, 61, 56, 7, 6, 1, 250, 47, 2, 235, 44, 56, 7, 3, 1, + 250, 47, 2, 235, 44, 56, 7, 6, 1, 250, 47, 2, 251, 92, 7, 3, 1, 250, 47, + 2, 251, 92, 7, 6, 1, 250, 47, 2, 250, 217, 56, 7, 3, 1, 250, 47, 2, 250, + 217, 56, 7, 6, 1, 178, 2, 234, 116, 25, 244, 36, 7, 3, 1, 178, 2, 234, + 116, 25, 244, 36, 7, 6, 1, 178, 2, 234, 116, 25, 168, 7, 3, 1, 178, 2, + 234, 116, 25, 168, 7, 6, 1, 178, 2, 250, 217, 56, 7, 3, 1, 178, 2, 250, + 217, 56, 7, 6, 1, 178, 2, 221, 180, 56, 7, 3, 1, 178, 2, 221, 180, 56, 7, + 6, 1, 178, 2, 251, 93, 25, 252, 8, 7, 3, 1, 178, 2, 251, 93, 25, 252, 8, + 7, 6, 1, 246, 75, 2, 61, 50, 7, 3, 1, 246, 75, 2, 61, 50, 7, 6, 1, 245, + 68, 2, 234, 115, 7, 3, 1, 245, 68, 2, 234, 115, 7, 6, 1, 243, 226, 2, 61, + 50, 7, 3, 1, 243, 226, 2, 61, 50, 7, 6, 1, 243, 226, 2, 61, 56, 7, 3, 1, + 243, 226, 2, 61, 56, 7, 6, 1, 243, 226, 2, 249, 13, 7, 3, 1, 243, 226, 2, + 249, 13, 7, 6, 1, 243, 226, 2, 251, 92, 7, 3, 1, 243, 226, 2, 251, 92, 7, + 6, 1, 243, 226, 2, 252, 9, 56, 7, 3, 1, 243, 226, 2, 252, 9, 56, 7, 6, 1, + 242, 107, 2, 221, 180, 56, 7, 3, 1, 242, 107, 2, 221, 180, 56, 7, 6, 1, + 242, 107, 2, 249, 14, 25, 168, 7, 3, 1, 242, 107, 2, 249, 14, 25, 168, 7, + 6, 1, 237, 18, 2, 168, 7, 3, 1, 237, 18, 2, 168, 7, 6, 1, 237, 18, 2, 61, + 56, 7, 3, 1, 237, 18, 2, 61, 56, 7, 6, 1, 237, 18, 2, 235, 44, 56, 7, 3, + 1, 237, 18, 2, 235, 44, 56, 7, 6, 1, 235, 202, 2, 61, 56, 7, 3, 1, 235, + 202, 2, 61, 56, 7, 6, 1, 235, 202, 2, 61, 252, 118, 25, 234, 115, 7, 3, + 1, 235, 202, 2, 61, 252, 118, 25, 234, 115, 7, 6, 1, 235, 202, 2, 235, + 44, 56, 7, 3, 1, 235, 202, 2, 235, 44, 56, 7, 6, 1, 235, 202, 2, 250, + 217, 56, 7, 3, 1, 235, 202, 2, 250, 217, 56, 7, 6, 1, 234, 187, 2, 168, + 7, 3, 1, 234, 187, 2, 168, 7, 6, 1, 234, 187, 2, 61, 50, 7, 3, 1, 234, + 187, 2, 61, 50, 7, 6, 1, 234, 187, 2, 61, 56, 7, 3, 1, 234, 187, 2, 61, + 56, 7, 6, 1, 233, 34, 2, 61, 50, 7, 3, 1, 233, 34, 2, 61, 50, 7, 6, 1, + 233, 34, 2, 61, 56, 7, 3, 1, 233, 34, 2, 61, 56, 7, 6, 1, 233, 34, 2, + 235, 44, 56, 7, 3, 1, 233, 34, 2, 235, 44, 56, 7, 6, 1, 233, 34, 2, 250, + 217, 56, 7, 3, 1, 233, 34, 2, 250, 217, 56, 7, 6, 1, 142, 2, 221, 180, + 25, 168, 7, 3, 1, 142, 2, 221, 180, 25, 168, 7, 6, 1, 142, 2, 221, 180, + 25, 249, 13, 7, 3, 1, 142, 2, 221, 180, 25, 249, 13, 7, 6, 1, 142, 2, + 234, 116, 25, 244, 36, 7, 3, 1, 142, 2, 234, 116, 25, 244, 36, 7, 6, 1, + 142, 2, 234, 116, 25, 168, 7, 3, 1, 142, 2, 234, 116, 25, 168, 7, 6, 1, + 230, 60, 2, 168, 7, 3, 1, 230, 60, 2, 168, 7, 6, 1, 230, 60, 2, 61, 50, + 7, 3, 1, 230, 60, 2, 61, 50, 7, 6, 1, 228, 39, 2, 61, 50, 7, 3, 1, 228, + 39, 2, 61, 50, 7, 6, 1, 228, 39, 2, 61, 56, 7, 3, 1, 228, 39, 2, 61, 56, + 7, 6, 1, 228, 39, 2, 61, 252, 118, 25, 234, 115, 7, 3, 1, 228, 39, 2, 61, + 252, 118, 25, 234, 115, 7, 6, 1, 228, 39, 2, 235, 44, 56, 7, 3, 1, 228, + 39, 2, 235, 44, 56, 7, 6, 1, 226, 235, 2, 61, 50, 7, 3, 1, 226, 235, 2, + 61, 50, 7, 6, 1, 226, 235, 2, 61, 56, 7, 3, 1, 226, 235, 2, 61, 56, 7, 6, + 1, 226, 235, 2, 254, 248, 25, 61, 50, 7, 3, 1, 226, 235, 2, 254, 248, 25, + 61, 50, 7, 6, 1, 226, 235, 2, 251, 131, 25, 61, 50, 7, 3, 1, 226, 235, 2, + 251, 131, 25, 61, 50, 7, 6, 1, 226, 235, 2, 61, 252, 118, 25, 61, 50, 7, + 3, 1, 226, 235, 2, 61, 252, 118, 25, 61, 50, 7, 6, 1, 222, 202, 2, 61, + 50, 7, 3, 1, 222, 202, 2, 61, 50, 7, 6, 1, 222, 202, 2, 61, 56, 7, 3, 1, + 222, 202, 2, 61, 56, 7, 6, 1, 222, 202, 2, 235, 44, 56, 7, 3, 1, 222, + 202, 2, 235, 44, 56, 7, 6, 1, 222, 202, 2, 250, 217, 56, 7, 3, 1, 222, + 202, 2, 250, 217, 56, 7, 6, 1, 105, 2, 249, 14, 56, 7, 3, 1, 105, 2, 249, + 14, 56, 7, 6, 1, 105, 2, 221, 180, 56, 7, 3, 1, 105, 2, 221, 180, 56, 7, + 6, 1, 105, 2, 250, 217, 56, 7, 3, 1, 105, 2, 250, 217, 56, 7, 6, 1, 105, + 2, 221, 180, 25, 168, 7, 3, 1, 105, 2, 221, 180, 25, 168, 7, 6, 1, 105, + 2, 234, 116, 25, 249, 13, 7, 3, 1, 105, 2, 234, 116, 25, 249, 13, 7, 6, + 1, 220, 11, 2, 221, 179, 7, 3, 1, 220, 11, 2, 221, 179, 7, 6, 1, 220, 11, + 2, 61, 56, 7, 3, 1, 220, 11, 2, 61, 56, 7, 6, 1, 219, 41, 2, 244, 36, 7, + 3, 1, 219, 41, 2, 244, 36, 7, 6, 1, 219, 41, 2, 168, 7, 3, 1, 219, 41, 2, + 168, 7, 6, 1, 219, 41, 2, 249, 13, 7, 3, 1, 219, 41, 2, 249, 13, 7, 6, 1, + 219, 41, 2, 61, 50, 7, 3, 1, 219, 41, 2, 61, 50, 7, 6, 1, 219, 41, 2, 61, + 56, 7, 3, 1, 219, 41, 2, 61, 56, 7, 6, 1, 218, 152, 2, 61, 50, 7, 3, 1, + 218, 152, 2, 61, 50, 7, 6, 1, 218, 152, 2, 249, 13, 7, 3, 1, 218, 152, 2, + 249, 13, 7, 6, 1, 218, 91, 2, 61, 50, 7, 3, 1, 218, 91, 2, 61, 50, 7, 6, + 1, 217, 158, 2, 250, 216, 7, 3, 1, 217, 158, 2, 250, 216, 7, 6, 1, 217, + 158, 2, 61, 56, 7, 3, 1, 217, 158, 2, 61, 56, 7, 6, 1, 217, 158, 2, 235, + 44, 56, 7, 3, 1, 217, 158, 2, 235, 44, 56, 7, 3, 1, 243, 226, 2, 235, 44, + 56, 7, 3, 1, 222, 202, 2, 249, 13, 7, 3, 1, 219, 41, 2, 227, 94, 50, 7, + 3, 1, 218, 91, 2, 227, 94, 50, 7, 3, 1, 112, 2, 45, 144, 227, 93, 7, 3, + 1, 171, 226, 235, 2, 61, 50, 7, 3, 1, 171, 226, 235, 2, 249, 11, 92, 7, + 3, 1, 171, 226, 235, 2, 116, 92, 7, 6, 1, 225, 1, 198, 7, 3, 1, 249, 62, + 7, 6, 1, 112, 2, 61, 56, 7, 3, 1, 112, 2, 61, 56, 7, 6, 1, 112, 2, 242, + 247, 50, 7, 3, 1, 112, 2, 242, 247, 50, 7, 6, 1, 112, 2, 250, 217, 25, + 168, 7, 3, 1, 112, 2, 250, 217, 25, 168, 7, 6, 1, 112, 2, 250, 217, 25, + 244, 36, 7, 3, 1, 112, 2, 250, 217, 25, 244, 36, 7, 6, 1, 112, 2, 250, + 217, 25, 242, 247, 50, 7, 3, 1, 112, 2, 250, 217, 25, 242, 247, 50, 7, 6, + 1, 112, 2, 250, 217, 25, 221, 179, 7, 3, 1, 112, 2, 250, 217, 25, 221, + 179, 7, 6, 1, 112, 2, 250, 217, 25, 61, 56, 7, 3, 1, 112, 2, 250, 217, + 25, 61, 56, 7, 6, 1, 112, 2, 252, 9, 25, 168, 7, 3, 1, 112, 2, 252, 9, + 25, 168, 7, 6, 1, 112, 2, 252, 9, 25, 244, 36, 7, 3, 1, 112, 2, 252, 9, + 25, 244, 36, 7, 6, 1, 112, 2, 252, 9, 25, 242, 247, 50, 7, 3, 1, 112, 2, + 252, 9, 25, 242, 247, 50, 7, 6, 1, 112, 2, 252, 9, 25, 221, 179, 7, 3, 1, + 112, 2, 252, 9, 25, 221, 179, 7, 6, 1, 112, 2, 252, 9, 25, 61, 56, 7, 3, + 1, 112, 2, 252, 9, 25, 61, 56, 7, 6, 1, 178, 2, 61, 56, 7, 3, 1, 178, 2, + 61, 56, 7, 6, 1, 178, 2, 242, 247, 50, 7, 3, 1, 178, 2, 242, 247, 50, 7, + 6, 1, 178, 2, 221, 179, 7, 3, 1, 178, 2, 221, 179, 7, 6, 1, 178, 2, 250, + 217, 25, 168, 7, 3, 1, 178, 2, 250, 217, 25, 168, 7, 6, 1, 178, 2, 250, + 217, 25, 244, 36, 7, 3, 1, 178, 2, 250, 217, 25, 244, 36, 7, 6, 1, 178, + 2, 250, 217, 25, 242, 247, 50, 7, 3, 1, 178, 2, 250, 217, 25, 242, 247, + 50, 7, 6, 1, 178, 2, 250, 217, 25, 221, 179, 7, 3, 1, 178, 2, 250, 217, + 25, 221, 179, 7, 6, 1, 178, 2, 250, 217, 25, 61, 56, 7, 3, 1, 178, 2, + 250, 217, 25, 61, 56, 7, 6, 1, 242, 107, 2, 242, 247, 50, 7, 3, 1, 242, + 107, 2, 242, 247, 50, 7, 6, 1, 242, 107, 2, 61, 56, 7, 3, 1, 242, 107, 2, + 61, 56, 7, 6, 1, 142, 2, 61, 56, 7, 3, 1, 142, 2, 61, 56, 7, 6, 1, 142, + 2, 242, 247, 50, 7, 3, 1, 142, 2, 242, 247, 50, 7, 6, 1, 142, 2, 250, + 217, 25, 168, 7, 3, 1, 142, 2, 250, 217, 25, 168, 7, 6, 1, 142, 2, 250, + 217, 25, 244, 36, 7, 3, 1, 142, 2, 250, 217, 25, 244, 36, 7, 6, 1, 142, + 2, 250, 217, 25, 242, 247, 50, 7, 3, 1, 142, 2, 250, 217, 25, 242, 247, + 50, 7, 6, 1, 142, 2, 250, 217, 25, 221, 179, 7, 3, 1, 142, 2, 250, 217, + 25, 221, 179, 7, 6, 1, 142, 2, 250, 217, 25, 61, 56, 7, 3, 1, 142, 2, + 250, 217, 25, 61, 56, 7, 6, 1, 142, 2, 242, 190, 25, 168, 7, 3, 1, 142, + 2, 242, 190, 25, 168, 7, 6, 1, 142, 2, 242, 190, 25, 244, 36, 7, 3, 1, + 142, 2, 242, 190, 25, 244, 36, 7, 6, 1, 142, 2, 242, 190, 25, 242, 247, + 50, 7, 3, 1, 142, 2, 242, 190, 25, 242, 247, 50, 7, 6, 1, 142, 2, 242, + 190, 25, 221, 179, 7, 3, 1, 142, 2, 242, 190, 25, 221, 179, 7, 6, 1, 142, + 2, 242, 190, 25, 61, 56, 7, 3, 1, 142, 2, 242, 190, 25, 61, 56, 7, 6, 1, + 105, 2, 61, 56, 7, 3, 1, 105, 2, 61, 56, 7, 6, 1, 105, 2, 242, 247, 50, + 7, 3, 1, 105, 2, 242, 247, 50, 7, 6, 1, 105, 2, 242, 190, 25, 168, 7, 3, + 1, 105, 2, 242, 190, 25, 168, 7, 6, 1, 105, 2, 242, 190, 25, 244, 36, 7, + 3, 1, 105, 2, 242, 190, 25, 244, 36, 7, 6, 1, 105, 2, 242, 190, 25, 242, + 247, 50, 7, 3, 1, 105, 2, 242, 190, 25, 242, 247, 50, 7, 6, 1, 105, 2, + 242, 190, 25, 221, 179, 7, 3, 1, 105, 2, 242, 190, 25, 221, 179, 7, 6, 1, + 105, 2, 242, 190, 25, 61, 56, 7, 3, 1, 105, 2, 242, 190, 25, 61, 56, 7, + 6, 1, 218, 91, 2, 244, 36, 7, 3, 1, 218, 91, 2, 244, 36, 7, 6, 1, 218, + 91, 2, 61, 56, 7, 3, 1, 218, 91, 2, 61, 56, 7, 6, 1, 218, 91, 2, 242, + 247, 50, 7, 3, 1, 218, 91, 2, 242, 247, 50, 7, 6, 1, 218, 91, 2, 221, + 179, 7, 3, 1, 218, 91, 2, 221, 179, 7, 6, 1, 233, 192, 235, 18, 7, 3, 1, + 233, 192, 235, 18, 7, 6, 1, 233, 192, 216, 216, 7, 3, 1, 233, 192, 216, + 216, 7, 6, 1, 218, 91, 2, 234, 247, 7, 3, 1, 218, 91, 2, 234, 247, 23, 3, + 1, 254, 147, 2, 228, 206, 23, 3, 1, 254, 147, 2, 249, 144, 23, 3, 1, 254, + 147, 2, 209, 25, 219, 178, 23, 3, 1, 254, 147, 2, 193, 25, 219, 178, 23, + 3, 1, 254, 147, 2, 209, 25, 230, 64, 23, 3, 1, 254, 147, 2, 193, 25, 230, + 64, 23, 3, 1, 254, 147, 2, 209, 25, 229, 163, 23, 3, 1, 254, 147, 2, 193, + 25, 229, 163, 23, 6, 1, 254, 147, 2, 228, 206, 23, 6, 1, 254, 147, 2, + 249, 144, 23, 6, 1, 254, 147, 2, 209, 25, 219, 178, 23, 6, 1, 254, 147, + 2, 193, 25, 219, 178, 23, 6, 1, 254, 147, 2, 209, 25, 230, 64, 23, 6, 1, + 254, 147, 2, 193, 25, 230, 64, 23, 6, 1, 254, 147, 2, 209, 25, 229, 163, + 23, 6, 1, 254, 147, 2, 193, 25, 229, 163, 23, 3, 1, 246, 157, 2, 228, + 206, 23, 3, 1, 246, 157, 2, 249, 144, 23, 3, 1, 246, 157, 2, 209, 25, + 219, 178, 23, 3, 1, 246, 157, 2, 193, 25, 219, 178, 23, 3, 1, 246, 157, + 2, 209, 25, 230, 64, 23, 3, 1, 246, 157, 2, 193, 25, 230, 64, 23, 6, 1, + 246, 157, 2, 228, 206, 23, 6, 1, 246, 157, 2, 249, 144, 23, 6, 1, 246, + 157, 2, 209, 25, 219, 178, 23, 6, 1, 246, 157, 2, 193, 25, 219, 178, 23, + 6, 1, 246, 157, 2, 209, 25, 230, 64, 23, 6, 1, 246, 157, 2, 193, 25, 230, + 64, 23, 3, 1, 246, 122, 2, 228, 206, 23, 3, 1, 246, 122, 2, 249, 144, 23, + 3, 1, 246, 122, 2, 209, 25, 219, 178, 23, 3, 1, 246, 122, 2, 193, 25, + 219, 178, 23, 3, 1, 246, 122, 2, 209, 25, 230, 64, 23, 3, 1, 246, 122, 2, + 193, 25, 230, 64, 23, 3, 1, 246, 122, 2, 209, 25, 229, 163, 23, 3, 1, + 246, 122, 2, 193, 25, 229, 163, 23, 6, 1, 246, 122, 2, 228, 206, 23, 6, + 1, 246, 122, 2, 249, 144, 23, 6, 1, 246, 122, 2, 209, 25, 219, 178, 23, + 6, 1, 246, 122, 2, 193, 25, 219, 178, 23, 6, 1, 246, 122, 2, 209, 25, + 230, 64, 23, 6, 1, 246, 122, 2, 193, 25, 230, 64, 23, 6, 1, 246, 122, 2, + 209, 25, 229, 163, 23, 6, 1, 246, 122, 2, 193, 25, 229, 163, 23, 3, 1, + 237, 163, 2, 228, 206, 23, 3, 1, 237, 163, 2, 249, 144, 23, 3, 1, 237, + 163, 2, 209, 25, 219, 178, 23, 3, 1, 237, 163, 2, 193, 25, 219, 178, 23, + 3, 1, 237, 163, 2, 209, 25, 230, 64, 23, 3, 1, 237, 163, 2, 193, 25, 230, + 64, 23, 3, 1, 237, 163, 2, 209, 25, 229, 163, 23, 3, 1, 237, 163, 2, 193, + 25, 229, 163, 23, 6, 1, 237, 163, 2, 228, 206, 23, 6, 1, 237, 163, 2, + 249, 144, 23, 6, 1, 237, 163, 2, 209, 25, 219, 178, 23, 6, 1, 237, 163, + 2, 193, 25, 219, 178, 23, 6, 1, 237, 163, 2, 209, 25, 230, 64, 23, 6, 1, + 237, 163, 2, 193, 25, 230, 64, 23, 6, 1, 237, 163, 2, 209, 25, 229, 163, + 23, 6, 1, 237, 163, 2, 193, 25, 229, 163, 23, 3, 1, 230, 142, 2, 228, + 206, 23, 3, 1, 230, 142, 2, 249, 144, 23, 3, 1, 230, 142, 2, 209, 25, + 219, 178, 23, 3, 1, 230, 142, 2, 193, 25, 219, 178, 23, 3, 1, 230, 142, + 2, 209, 25, 230, 64, 23, 3, 1, 230, 142, 2, 193, 25, 230, 64, 23, 6, 1, + 230, 142, 2, 228, 206, 23, 6, 1, 230, 142, 2, 249, 144, 23, 6, 1, 230, + 142, 2, 209, 25, 219, 178, 23, 6, 1, 230, 142, 2, 193, 25, 219, 178, 23, + 6, 1, 230, 142, 2, 209, 25, 230, 64, 23, 6, 1, 230, 142, 2, 193, 25, 230, + 64, 23, 3, 1, 220, 58, 2, 228, 206, 23, 3, 1, 220, 58, 2, 249, 144, 23, + 3, 1, 220, 58, 2, 209, 25, 219, 178, 23, 3, 1, 220, 58, 2, 193, 25, 219, + 178, 23, 3, 1, 220, 58, 2, 209, 25, 230, 64, 23, 3, 1, 220, 58, 2, 193, + 25, 230, 64, 23, 3, 1, 220, 58, 2, 209, 25, 229, 163, 23, 3, 1, 220, 58, + 2, 193, 25, 229, 163, 23, 6, 1, 220, 58, 2, 249, 144, 23, 6, 1, 220, 58, + 2, 193, 25, 219, 178, 23, 6, 1, 220, 58, 2, 193, 25, 230, 64, 23, 6, 1, + 220, 58, 2, 193, 25, 229, 163, 23, 3, 1, 230, 144, 2, 228, 206, 23, 3, 1, + 230, 144, 2, 249, 144, 23, 3, 1, 230, 144, 2, 209, 25, 219, 178, 23, 3, + 1, 230, 144, 2, 193, 25, 219, 178, 23, 3, 1, 230, 144, 2, 209, 25, 230, + 64, 23, 3, 1, 230, 144, 2, 193, 25, 230, 64, 23, 3, 1, 230, 144, 2, 209, + 25, 229, 163, 23, 3, 1, 230, 144, 2, 193, 25, 229, 163, 23, 6, 1, 230, + 144, 2, 228, 206, 23, 6, 1, 230, 144, 2, 249, 144, 23, 6, 1, 230, 144, 2, + 209, 25, 219, 178, 23, 6, 1, 230, 144, 2, 193, 25, 219, 178, 23, 6, 1, + 230, 144, 2, 209, 25, 230, 64, 23, 6, 1, 230, 144, 2, 193, 25, 230, 64, + 23, 6, 1, 230, 144, 2, 209, 25, 229, 163, 23, 6, 1, 230, 144, 2, 193, 25, + 229, 163, 23, 3, 1, 254, 147, 2, 219, 178, 23, 3, 1, 254, 147, 2, 230, + 64, 23, 3, 1, 246, 157, 2, 219, 178, 23, 3, 1, 246, 157, 2, 230, 64, 23, + 3, 1, 246, 122, 2, 219, 178, 23, 3, 1, 246, 122, 2, 230, 64, 23, 3, 1, + 237, 163, 2, 219, 178, 23, 3, 1, 237, 163, 2, 230, 64, 23, 3, 1, 230, + 142, 2, 219, 178, 23, 3, 1, 230, 142, 2, 230, 64, 23, 3, 1, 220, 58, 2, + 219, 178, 23, 3, 1, 220, 58, 2, 230, 64, 23, 3, 1, 230, 144, 2, 219, 178, + 23, 3, 1, 230, 144, 2, 230, 64, 23, 3, 1, 254, 147, 2, 209, 25, 217, 207, + 23, 3, 1, 254, 147, 2, 193, 25, 217, 207, 23, 3, 1, 254, 147, 2, 209, 25, + 219, 179, 25, 217, 207, 23, 3, 1, 254, 147, 2, 193, 25, 219, 179, 25, + 217, 207, 23, 3, 1, 254, 147, 2, 209, 25, 230, 65, 25, 217, 207, 23, 3, + 1, 254, 147, 2, 193, 25, 230, 65, 25, 217, 207, 23, 3, 1, 254, 147, 2, + 209, 25, 229, 164, 25, 217, 207, 23, 3, 1, 254, 147, 2, 193, 25, 229, + 164, 25, 217, 207, 23, 6, 1, 254, 147, 2, 209, 25, 228, 217, 23, 6, 1, + 254, 147, 2, 193, 25, 228, 217, 23, 6, 1, 254, 147, 2, 209, 25, 219, 179, + 25, 228, 217, 23, 6, 1, 254, 147, 2, 193, 25, 219, 179, 25, 228, 217, 23, + 6, 1, 254, 147, 2, 209, 25, 230, 65, 25, 228, 217, 23, 6, 1, 254, 147, 2, + 193, 25, 230, 65, 25, 228, 217, 23, 6, 1, 254, 147, 2, 209, 25, 229, 164, + 25, 228, 217, 23, 6, 1, 254, 147, 2, 193, 25, 229, 164, 25, 228, 217, 23, + 3, 1, 246, 122, 2, 209, 25, 217, 207, 23, 3, 1, 246, 122, 2, 193, 25, + 217, 207, 23, 3, 1, 246, 122, 2, 209, 25, 219, 179, 25, 217, 207, 23, 3, + 1, 246, 122, 2, 193, 25, 219, 179, 25, 217, 207, 23, 3, 1, 246, 122, 2, + 209, 25, 230, 65, 25, 217, 207, 23, 3, 1, 246, 122, 2, 193, 25, 230, 65, + 25, 217, 207, 23, 3, 1, 246, 122, 2, 209, 25, 229, 164, 25, 217, 207, 23, + 3, 1, 246, 122, 2, 193, 25, 229, 164, 25, 217, 207, 23, 6, 1, 246, 122, + 2, 209, 25, 228, 217, 23, 6, 1, 246, 122, 2, 193, 25, 228, 217, 23, 6, 1, + 246, 122, 2, 209, 25, 219, 179, 25, 228, 217, 23, 6, 1, 246, 122, 2, 193, + 25, 219, 179, 25, 228, 217, 23, 6, 1, 246, 122, 2, 209, 25, 230, 65, 25, + 228, 217, 23, 6, 1, 246, 122, 2, 193, 25, 230, 65, 25, 228, 217, 23, 6, + 1, 246, 122, 2, 209, 25, 229, 164, 25, 228, 217, 23, 6, 1, 246, 122, 2, + 193, 25, 229, 164, 25, 228, 217, 23, 3, 1, 230, 144, 2, 209, 25, 217, + 207, 23, 3, 1, 230, 144, 2, 193, 25, 217, 207, 23, 3, 1, 230, 144, 2, + 209, 25, 219, 179, 25, 217, 207, 23, 3, 1, 230, 144, 2, 193, 25, 219, + 179, 25, 217, 207, 23, 3, 1, 230, 144, 2, 209, 25, 230, 65, 25, 217, 207, + 23, 3, 1, 230, 144, 2, 193, 25, 230, 65, 25, 217, 207, 23, 3, 1, 230, + 144, 2, 209, 25, 229, 164, 25, 217, 207, 23, 3, 1, 230, 144, 2, 193, 25, + 229, 164, 25, 217, 207, 23, 6, 1, 230, 144, 2, 209, 25, 228, 217, 23, 6, + 1, 230, 144, 2, 193, 25, 228, 217, 23, 6, 1, 230, 144, 2, 209, 25, 219, + 179, 25, 228, 217, 23, 6, 1, 230, 144, 2, 193, 25, 219, 179, 25, 228, + 217, 23, 6, 1, 230, 144, 2, 209, 25, 230, 65, 25, 228, 217, 23, 6, 1, + 230, 144, 2, 193, 25, 230, 65, 25, 228, 217, 23, 6, 1, 230, 144, 2, 209, + 25, 229, 164, 25, 228, 217, 23, 6, 1, 230, 144, 2, 193, 25, 229, 164, 25, + 228, 217, 23, 3, 1, 254, 147, 2, 219, 57, 23, 3, 1, 254, 147, 2, 234, + 115, 23, 3, 1, 254, 147, 2, 219, 179, 25, 217, 207, 23, 3, 1, 254, 147, + 2, 217, 207, 23, 3, 1, 254, 147, 2, 230, 65, 25, 217, 207, 23, 3, 1, 254, + 147, 2, 229, 163, 23, 3, 1, 254, 147, 2, 229, 164, 25, 217, 207, 23, 6, + 1, 254, 147, 2, 219, 57, 23, 6, 1, 254, 147, 2, 234, 115, 23, 6, 1, 254, + 147, 2, 219, 178, 23, 6, 1, 254, 147, 2, 230, 64, 23, 6, 1, 254, 147, 2, + 228, 217, 23, 236, 33, 23, 228, 217, 23, 228, 206, 23, 229, 163, 23, 249, + 8, 25, 229, 163, 23, 3, 1, 246, 122, 2, 219, 179, 25, 217, 207, 23, 3, 1, + 246, 122, 2, 217, 207, 23, 3, 1, 246, 122, 2, 230, 65, 25, 217, 207, 23, + 3, 1, 246, 122, 2, 229, 163, 23, 3, 1, 246, 122, 2, 229, 164, 25, 217, + 207, 23, 6, 1, 246, 157, 2, 219, 178, 23, 6, 1, 246, 157, 2, 230, 64, 23, + 6, 1, 246, 122, 2, 219, 178, 23, 6, 1, 246, 122, 2, 230, 64, 23, 6, 1, + 246, 122, 2, 228, 217, 23, 209, 25, 219, 178, 23, 209, 25, 230, 64, 23, + 209, 25, 229, 163, 23, 3, 1, 237, 163, 2, 219, 57, 23, 3, 1, 237, 163, 2, + 234, 115, 23, 3, 1, 237, 163, 2, 249, 8, 25, 219, 178, 23, 3, 1, 237, + 163, 2, 249, 8, 25, 230, 64, 23, 3, 1, 237, 163, 2, 229, 163, 23, 3, 1, + 237, 163, 2, 249, 8, 25, 229, 163, 23, 6, 1, 237, 163, 2, 219, 57, 23, 6, + 1, 237, 163, 2, 234, 115, 23, 6, 1, 237, 163, 2, 219, 178, 23, 6, 1, 237, + 163, 2, 230, 64, 23, 193, 25, 219, 178, 23, 193, 25, 230, 64, 23, 193, + 25, 229, 163, 23, 3, 1, 220, 58, 2, 219, 57, 23, 3, 1, 220, 58, 2, 234, + 115, 23, 3, 1, 220, 58, 2, 249, 8, 25, 219, 178, 23, 3, 1, 220, 58, 2, + 249, 8, 25, 230, 64, 23, 3, 1, 227, 150, 2, 228, 206, 23, 3, 1, 227, 150, + 2, 249, 144, 23, 3, 1, 220, 58, 2, 229, 163, 23, 3, 1, 220, 58, 2, 249, + 8, 25, 229, 163, 23, 6, 1, 220, 58, 2, 219, 57, 23, 6, 1, 220, 58, 2, + 234, 115, 23, 6, 1, 220, 58, 2, 219, 178, 23, 6, 1, 220, 58, 2, 230, 64, + 23, 6, 1, 227, 150, 2, 249, 144, 23, 249, 8, 25, 219, 178, 23, 249, 8, + 25, 230, 64, 23, 219, 178, 23, 3, 1, 230, 144, 2, 219, 179, 25, 217, 207, + 23, 3, 1, 230, 144, 2, 217, 207, 23, 3, 1, 230, 144, 2, 230, 65, 25, 217, + 207, 23, 3, 1, 230, 144, 2, 229, 163, 23, 3, 1, 230, 144, 2, 229, 164, + 25, 217, 207, 23, 6, 1, 230, 142, 2, 219, 178, 23, 6, 1, 230, 142, 2, + 230, 64, 23, 6, 1, 230, 144, 2, 219, 178, 23, 6, 1, 230, 144, 2, 230, 64, + 23, 6, 1, 230, 144, 2, 228, 217, 23, 230, 64, 23, 249, 144, 246, 198, + 228, 95, 246, 206, 228, 95, 246, 198, 223, 254, 246, 206, 223, 254, 221, + 226, 223, 254, 245, 114, 223, 254, 224, 80, 223, 254, 245, 194, 223, 254, + 228, 197, 223, 254, 221, 253, 223, 254, 243, 201, 223, 254, 217, 85, 218, + 199, 223, 254, 217, 85, 218, 199, 231, 197, 217, 85, 218, 199, 237, 54, + 235, 108, 78, 227, 102, 78, 242, 121, 231, 198, 242, 121, 245, 194, 249, + 146, 246, 198, 249, 146, 246, 206, 249, 146, 186, 135, 51, 69, 235, 43, + 51, 109, 235, 43, 42, 224, 109, 228, 69, 78, 45, 224, 109, 228, 69, 78, + 224, 109, 234, 238, 228, 69, 78, 224, 109, 243, 98, 228, 69, 78, 42, 51, + 228, 69, 78, 45, 51, 228, 69, 78, 51, 234, 238, 228, 69, 78, 51, 243, 98, + 228, 69, 78, 249, 192, 51, 249, 192, 251, 241, 221, 87, 251, 241, 131, + 61, 235, 121, 124, 61, 235, 121, 186, 246, 208, 242, 119, 229, 31, 235, + 44, 225, 54, 229, 241, 225, 54, 235, 108, 246, 204, 227, 102, 246, 204, + 229, 20, 248, 209, 245, 123, 235, 108, 230, 71, 227, 102, 230, 71, 232, + 210, 231, 203, 223, 254, 229, 170, 233, 164, 55, 229, 170, 222, 66, 221, + 232, 55, 228, 235, 51, 228, 235, 221, 78, 228, 235, 210, 228, 235, 210, + 51, 228, 235, 210, 221, 78, 228, 235, 251, 134, 224, 109, 235, 112, 254, + 120, 228, 69, 78, 224, 109, 227, 106, 254, 120, 228, 69, 78, 227, 199, + 78, 51, 246, 95, 78, 237, 177, 230, 73, 220, 78, 126, 221, 200, 251, 135, + 237, 191, 229, 31, 253, 249, 242, 122, 251, 241, 245, 108, 224, 55, 42, + 40, 252, 18, 2, 228, 77, 45, 40, 252, 18, 2, 228, 77, 51, 228, 82, 78, + 228, 82, 246, 95, 78, 246, 95, 228, 82, 78, 221, 164, 5, 246, 123, 210, + 229, 73, 55, 84, 127, 251, 241, 84, 90, 251, 241, 109, 253, 251, 210, + 225, 67, 250, 198, 220, 63, 124, 253, 250, 254, 159, 219, 101, 250, 167, + 233, 155, 55, 223, 23, 249, 146, 237, 170, 220, 78, 245, 145, 228, 197, + 78, 148, 61, 228, 196, 228, 92, 228, 235, 245, 116, 61, 228, 196, 245, + 170, 61, 228, 196, 124, 61, 228, 196, 245, 116, 61, 78, 247, 143, 250, + 100, 221, 86, 69, 245, 116, 248, 143, 234, 18, 14, 223, 254, 218, 174, + 237, 54, 245, 88, 254, 76, 237, 168, 221, 176, 237, 168, 225, 54, 237, + 168, 229, 43, 237, 201, 222, 228, 223, 34, 254, 250, 222, 228, 223, 34, + 237, 201, 12, 245, 124, 225, 5, 254, 250, 12, 245, 124, 225, 5, 232, 206, + 20, 225, 6, 231, 199, 20, 225, 6, 223, 59, 217, 84, 223, 59, 7, 3, 1, 72, + 223, 59, 154, 223, 59, 174, 223, 59, 182, 223, 59, 191, 223, 59, 185, + 223, 59, 190, 223, 59, 88, 55, 223, 59, 233, 154, 223, 59, 246, 154, 55, + 223, 59, 42, 229, 229, 223, 59, 45, 229, 229, 223, 59, 7, 3, 1, 207, 223, + 94, 217, 84, 223, 94, 107, 223, 94, 103, 223, 94, 160, 223, 94, 154, 223, + 94, 174, 223, 94, 182, 223, 94, 191, 223, 94, 185, 223, 94, 190, 223, 94, + 88, 55, 223, 94, 233, 154, 223, 94, 246, 154, 55, 223, 94, 42, 229, 229, + 223, 94, 45, 229, 229, 7, 223, 94, 3, 1, 60, 7, 223, 94, 3, 1, 73, 7, + 223, 94, 3, 1, 74, 7, 223, 94, 3, 1, 218, 151, 7, 223, 94, 3, 1, 226, + 104, 246, 106, 55, 250, 176, 55, 250, 94, 55, 245, 102, 245, 104, 55, + 235, 30, 55, 233, 165, 55, 232, 223, 55, 229, 153, 55, 227, 4, 55, 218, + 182, 55, 146, 224, 232, 55, 248, 152, 55, 246, 107, 55, 236, 100, 55, + 220, 252, 55, 247, 127, 55, 244, 170, 229, 177, 55, 229, 151, 55, 244, + 14, 55, 253, 224, 55, 242, 176, 55, 251, 94, 55, 235, 24, 221, 111, 55, + 223, 246, 55, 222, 64, 55, 36, 42, 243, 177, 50, 36, 45, 243, 177, 50, + 36, 171, 69, 235, 44, 230, 74, 36, 224, 192, 69, 235, 44, 230, 74, 36, + 254, 104, 76, 50, 36, 250, 199, 76, 50, 36, 42, 76, 50, 36, 45, 76, 50, + 36, 227, 94, 230, 74, 36, 250, 199, 227, 94, 230, 74, 36, 254, 104, 227, + 94, 230, 74, 36, 148, 188, 50, 36, 245, 116, 188, 50, 36, 246, 193, 250, + 221, 36, 246, 193, 223, 227, 36, 246, 193, 249, 4, 36, 246, 193, 250, + 222, 252, 230, 36, 42, 45, 76, 50, 36, 246, 193, 226, 100, 36, 246, 193, + 236, 152, 36, 246, 193, 220, 55, 229, 28, 221, 90, 36, 227, 160, 224, 18, + 230, 74, 36, 51, 69, 214, 230, 74, 36, 254, 111, 100, 36, 221, 78, 220, + 80, 36, 218, 201, 252, 4, 50, 36, 127, 76, 230, 74, 36, 171, 51, 224, 18, + 230, 74, 36, 90, 243, 177, 2, 192, 247, 129, 36, 127, 243, 177, 2, 192, + 247, 129, 36, 42, 76, 56, 36, 45, 76, 56, 36, 253, 252, 50, 254, 254, + 230, 165, 254, 241, 199, 222, 23, 223, 98, 173, 6, 251, 202, 249, 77, + 251, 88, 251, 85, 235, 44, 100, 251, 136, 230, 165, 251, 165, 220, 86, + 246, 108, 250, 144, 226, 98, 249, 77, 245, 250, 102, 3, 245, 67, 102, 6, + 243, 225, 252, 51, 6, 243, 225, 173, 6, 243, 225, 229, 53, 250, 144, 229, + 53, 250, 145, 104, 124, 229, 108, 102, 6, 72, 252, 51, 6, 72, 102, 6, + 153, 102, 3, 153, 235, 202, 49, 252, 201, 100, 173, 6, 207, 231, 105, 55, + 224, 9, 227, 210, 250, 125, 102, 6, 230, 59, 173, 6, 230, 59, 173, 6, + 228, 163, 102, 6, 152, 252, 51, 6, 152, 173, 6, 152, 228, 239, 222, 129, + 227, 169, 225, 50, 78, 222, 72, 55, 221, 107, 164, 55, 219, 153, 173, 6, + 217, 157, 230, 85, 55, 230, 160, 55, 237, 170, 230, 160, 55, 252, 51, 6, + 217, 157, 215, 23, 3, 1, 237, 162, 236, 175, 55, 254, 118, 55, 102, 6, + 253, 204, 252, 51, 6, 251, 202, 246, 126, 100, 102, 3, 73, 102, 6, 73, + 102, 6, 246, 74, 215, 6, 246, 74, 102, 6, 189, 102, 3, 74, 99, 100, 252, + 105, 100, 244, 92, 100, 249, 178, 100, 237, 205, 224, 7, 227, 59, 6, 228, + 163, 245, 252, 55, 173, 3, 229, 108, 173, 3, 244, 231, 173, 6, 244, 231, + 173, 6, 229, 108, 173, 233, 33, 223, 71, 215, 33, 6, 245, 67, 215, 33, 6, + 153, 210, 33, 6, 153, 215, 33, 6, 218, 90, 173, 30, 6, 250, 46, 173, 30, + 3, 250, 46, 173, 30, 3, 73, 173, 30, 3, 72, 173, 30, 3, 237, 126, 228, + 220, 235, 43, 215, 254, 134, 229, 170, 55, 254, 177, 215, 3, 246, 74, 16, + 35, 213, 224, 7, 219, 55, 245, 108, 131, 225, 40, 219, 55, 245, 108, 131, + 232, 26, 219, 55, 245, 108, 131, 222, 61, 219, 55, 245, 108, 131, 221, + 251, 219, 55, 245, 108, 124, 221, 249, 219, 55, 245, 108, 131, 245, 199, + 219, 55, 245, 108, 124, 245, 198, 219, 55, 245, 108, 148, 245, 198, 219, + 55, 245, 108, 245, 116, 245, 198, 219, 55, 245, 108, 131, 224, 73, 219, + 55, 245, 108, 245, 170, 224, 71, 219, 55, 245, 108, 131, 246, 231, 219, + 55, 245, 108, 148, 246, 229, 219, 55, 245, 108, 245, 170, 246, 229, 219, + 55, 245, 108, 225, 43, 246, 229, 245, 108, 231, 106, 107, 227, 68, 231, + 107, 107, 227, 68, 231, 107, 103, 227, 68, 231, 107, 160, 227, 68, 231, + 107, 154, 227, 68, 231, 107, 174, 227, 68, 231, 107, 182, 227, 68, 231, + 107, 191, 227, 68, 231, 107, 185, 227, 68, 231, 107, 190, 227, 68, 231, + 107, 222, 65, 227, 68, 231, 107, 246, 211, 227, 68, 231, 107, 220, 221, + 227, 68, 231, 107, 245, 196, 227, 68, 231, 107, 131, 242, 161, 227, 68, + 231, 107, 245, 170, 242, 161, 227, 68, 231, 107, 131, 221, 231, 3, 227, + 68, 231, 107, 107, 3, 227, 68, 231, 107, 103, 3, 227, 68, 231, 107, 160, + 3, 227, 68, 231, 107, 154, 3, 227, 68, 231, 107, 174, 3, 227, 68, 231, + 107, 182, 3, 227, 68, 231, 107, 191, 3, 227, 68, 231, 107, 185, 3, 227, + 68, 231, 107, 190, 3, 227, 68, 231, 107, 222, 65, 3, 227, 68, 231, 107, + 246, 211, 3, 227, 68, 231, 107, 220, 221, 3, 227, 68, 231, 107, 245, 196, + 3, 227, 68, 231, 107, 131, 242, 161, 3, 227, 68, 231, 107, 245, 170, 242, + 161, 3, 227, 68, 231, 107, 131, 221, 231, 227, 68, 231, 107, 131, 221, + 232, 251, 203, 250, 46, 227, 68, 231, 107, 245, 170, 221, 231, 227, 68, + 231, 107, 222, 66, 221, 231, 227, 68, 231, 107, 210, 131, 242, 161, 7, 3, + 1, 210, 251, 202, 227, 68, 231, 107, 224, 82, 235, 140, 17, 227, 68, 231, + 107, 245, 197, 247, 10, 17, 227, 68, 231, 107, 245, 197, 221, 231, 227, + 68, 231, 107, 131, 242, 162, 221, 231, 219, 55, 245, 108, 217, 85, 221, + 249, 127, 65, 220, 53, 65, 90, 65, 247, 130, 65, 42, 45, 65, 108, 113, + 65, 231, 187, 218, 217, 65, 231, 187, 247, 5, 65, 224, 6, 247, 5, 65, + 224, 6, 218, 217, 65, 127, 76, 2, 92, 90, 76, 2, 92, 127, 218, 237, 65, + 90, 218, 237, 65, 127, 124, 243, 158, 65, 220, 53, 124, 243, 158, 65, 90, + 124, 243, 158, 65, 247, 130, 124, 243, 158, 65, 127, 76, 2, 222, 135, 90, + 76, 2, 222, 135, 127, 76, 245, 97, 135, 220, 53, 76, 245, 97, 135, 90, + 76, 245, 97, 135, 247, 130, 76, 245, 97, 135, 108, 113, 76, 2, 252, 189, + 127, 76, 2, 96, 90, 76, 2, 96, 127, 76, 2, 234, 247, 90, 76, 2, 234, 247, + 42, 45, 218, 237, 65, 42, 45, 76, 2, 92, 247, 130, 217, 33, 65, 220, 53, + 76, 2, 221, 170, 235, 107, 220, 53, 76, 2, 221, 170, 227, 100, 247, 130, + 76, 2, 221, 170, 235, 107, 247, 130, 76, 2, 221, 170, 227, 100, 90, 76, + 2, 250, 124, 247, 129, 247, 130, 76, 2, 250, 124, 235, 107, 254, 104, + 221, 120, 225, 70, 65, 250, 199, 221, 120, 225, 70, 65, 231, 187, 218, + 217, 76, 199, 171, 135, 127, 76, 199, 252, 201, 104, 90, 76, 199, 135, + 254, 104, 230, 119, 250, 222, 65, 250, 199, 230, 119, 250, 222, 65, 127, + 243, 177, 2, 192, 220, 52, 127, 243, 177, 2, 192, 247, 129, 220, 53, 243, + 177, 2, 192, 227, 100, 220, 53, 243, 177, 2, 192, 235, 107, 90, 243, 177, + 2, 192, 220, 52, 90, 243, 177, 2, 192, 247, 129, 247, 130, 243, 177, 2, + 192, 227, 100, 247, 130, 243, 177, 2, 192, 235, 107, 90, 76, 104, 127, + 65, 220, 53, 76, 127, 117, 247, 130, 65, 127, 76, 104, 90, 65, 127, 230, + 32, 254, 19, 220, 53, 230, 32, 254, 19, 90, 230, 32, 254, 19, 247, 130, + 230, 32, 254, 19, 127, 243, 177, 104, 90, 243, 176, 90, 243, 177, 104, + 127, 243, 176, 127, 51, 76, 2, 92, 42, 45, 51, 76, 2, 92, 90, 51, 76, 2, + 92, 127, 51, 65, 220, 53, 51, 65, 90, 51, 65, 247, 130, 51, 65, 42, 45, + 51, 65, 108, 113, 51, 65, 231, 187, 218, 217, 51, 65, 231, 187, 247, 5, + 51, 65, 224, 6, 247, 5, 51, 65, 224, 6, 218, 217, 51, 65, 127, 221, 78, + 65, 90, 221, 78, 65, 127, 223, 223, 65, 90, 223, 223, 65, 220, 53, 76, 2, + 51, 92, 247, 130, 76, 2, 51, 92, 127, 249, 145, 65, 220, 53, 249, 145, + 65, 90, 249, 145, 65, 247, 130, 249, 145, 65, 127, 76, 199, 135, 90, 76, + 199, 135, 127, 67, 65, 220, 53, 67, 65, 90, 67, 65, 247, 130, 67, 65, + 220, 53, 67, 76, 245, 97, 135, 220, 53, 67, 76, 230, 139, 229, 193, 220, + 53, 67, 76, 230, 139, 229, 194, 2, 186, 135, 220, 53, 67, 76, 230, 139, + 229, 194, 2, 69, 135, 220, 53, 67, 51, 65, 220, 53, 67, 51, 76, 230, 139, + 229, 193, 90, 67, 76, 245, 97, 218, 254, 231, 187, 218, 217, 76, 199, + 250, 123, 224, 6, 247, 5, 76, 199, 250, 123, 108, 113, 67, 65, 45, 76, 2, + 3, 250, 221, 247, 130, 76, 127, 117, 220, 53, 65, 148, 90, 254, 19, 127, + 76, 2, 69, 92, 90, 76, 2, 69, 92, 42, 45, 76, 2, 69, 92, 127, 76, 2, 51, + 69, 92, 90, 76, 2, 51, 69, 92, 42, 45, 76, 2, 51, 69, 92, 127, 230, 117, + 65, 90, 230, 117, 65, 42, 45, 230, 117, 65, 35, 254, 157, 250, 164, 229, + 223, 248, 246, 222, 14, 246, 91, 222, 14, 248, 160, 212, 246, 92, 246, + 199, 225, 45, 237, 215, 232, 231, 246, 213, 230, 165, 212, 254, 132, 246, + 213, 230, 165, 3, 246, 213, 230, 165, 250, 140, 254, 14, 233, 254, 248, + 160, 212, 250, 142, 254, 14, 233, 254, 3, 250, 140, 254, 14, 233, 254, + 246, 190, 117, 228, 222, 233, 33, 228, 229, 233, 33, 250, 128, 233, 33, + 223, 71, 233, 155, 55, 233, 153, 55, 61, 229, 43, 248, 188, 224, 55, 225, + 46, 233, 154, 253, 252, 230, 112, 227, 94, 230, 112, 251, 242, 230, 112, + 40, 227, 64, 250, 89, 227, 64, 245, 110, 227, 64, 228, 218, 101, 237, + 207, 45, 254, 119, 254, 119, 234, 22, 254, 119, 223, 245, 254, 119, 248, + 190, 248, 160, 212, 248, 193, 229, 234, 101, 212, 229, 234, 101, 235, 7, + 254, 126, 235, 7, 230, 105, 237, 174, 220, 74, 237, 186, 51, 237, 186, + 221, 78, 237, 186, 250, 136, 237, 186, 223, 49, 237, 186, 219, 65, 237, + 186, 250, 199, 237, 186, 250, 199, 250, 136, 237, 186, 254, 104, 250, + 136, 237, 186, 222, 13, 252, 138, 227, 224, 228, 219, 61, 233, 154, 246, + 96, 244, 176, 228, 219, 242, 250, 221, 180, 230, 112, 210, 221, 179, 237, + 170, 235, 129, 198, 224, 111, 218, 236, 218, 168, 228, 229, 212, 221, + 179, 233, 155, 221, 179, 253, 247, 114, 101, 212, 253, 247, 114, 101, + 254, 72, 114, 101, 254, 72, 251, 222, 212, 254, 249, 114, 101, 232, 135, + 254, 72, 231, 190, 254, 249, 114, 101, 254, 151, 114, 101, 212, 254, 151, + 114, 101, 254, 151, 114, 156, 114, 101, 221, 78, 221, 179, 254, 158, 114, + 101, 246, 150, 101, 244, 175, 246, 150, 101, 248, 247, 252, 99, 254, 74, + 222, 23, 235, 51, 244, 175, 114, 101, 254, 72, 114, 199, 156, 222, 23, + 237, 237, 230, 165, 237, 237, 117, 156, 254, 72, 114, 101, 250, 176, 246, + 153, 246, 154, 250, 175, 227, 94, 237, 224, 114, 101, 227, 94, 114, 101, + 250, 117, 101, 246, 125, 246, 152, 101, 223, 157, 246, 153, 249, 63, 114, + 101, 114, 199, 251, 213, 249, 78, 234, 22, 251, 212, 228, 80, 114, 101, + 212, 114, 101, 242, 59, 101, 212, 242, 59, 101, 223, 123, 246, 150, 101, + 235, 87, 156, 114, 101, 244, 30, 156, 114, 101, 235, 87, 104, 114, 101, + 244, 30, 104, 114, 101, 235, 87, 251, 222, 212, 114, 101, 244, 30, 251, + 222, 212, 114, 101, 233, 95, 235, 86, 233, 95, 244, 29, 252, 99, 212, + 246, 150, 101, 212, 235, 86, 212, 244, 29, 232, 135, 235, 87, 231, 190, + 114, 101, 232, 135, 244, 30, 231, 190, 114, 101, 235, 87, 156, 246, 150, + 101, 244, 30, 156, 246, 150, 101, 232, 135, 235, 87, 231, 190, 246, 150, + 101, 232, 135, 244, 30, 231, 190, 246, 150, 101, 235, 87, 156, 244, 29, + 244, 30, 156, 235, 86, 232, 135, 235, 87, 231, 190, 244, 29, 232, 135, + 244, 30, 231, 190, 235, 86, 228, 244, 223, 84, 228, 245, 156, 114, 101, + 223, 85, 156, 114, 101, 228, 245, 156, 246, 150, 101, 223, 85, 156, 246, + 150, 101, 248, 160, 212, 228, 247, 248, 160, 212, 223, 86, 223, 93, 230, + 165, 223, 58, 230, 165, 212, 112, 223, 93, 230, 165, 212, 112, 223, 58, + 230, 165, 223, 93, 117, 156, 114, 101, 223, 58, 117, 156, 114, 101, 232, + 135, 112, 223, 93, 117, 231, 190, 114, 101, 232, 135, 112, 223, 58, 117, + 231, 190, 114, 101, 223, 93, 117, 2, 212, 114, 101, 223, 58, 117, 2, 212, + 114, 101, 233, 81, 233, 82, 233, 83, 233, 82, 220, 74, 40, 237, 237, 230, + 165, 40, 230, 101, 230, 165, 40, 237, 237, 117, 156, 114, 101, 40, 230, + 101, 117, 156, 114, 101, 40, 251, 143, 40, 250, 82, 34, 229, 43, 34, 233, + 154, 34, 221, 176, 34, 248, 188, 224, 55, 34, 61, 230, 112, 34, 227, 94, + 230, 112, 34, 253, 252, 230, 112, 34, 246, 153, 34, 249, 146, 204, 229, + 43, 204, 233, 154, 204, 221, 176, 204, 61, 230, 112, 45, 222, 143, 42, + 222, 143, 113, 222, 143, 108, 222, 143, 253, 255, 233, 133, 221, 62, 245, + 128, 221, 78, 69, 252, 201, 45, 220, 236, 51, 69, 252, 201, 51, 45, 220, + 236, 248, 160, 212, 228, 214, 212, 221, 62, 248, 160, 212, 245, 129, 232, + 138, 51, 69, 252, 201, 51, 45, 220, 236, 228, 245, 220, 82, 227, 192, + 223, 85, 220, 82, 227, 192, 231, 188, 223, 101, 230, 165, 250, 140, 254, + 14, 231, 188, 223, 100, 231, 188, 223, 101, 117, 156, 114, 101, 250, 140, + 254, 14, 231, 188, 223, 101, 156, 114, 101, 230, 101, 230, 165, 237, 237, + 230, 165, 233, 87, 243, 131, 250, 150, 234, 49, 237, 183, 218, 118, 232, + 216, 231, 189, 45, 254, 120, 2, 254, 51, 45, 221, 90, 233, 33, 235, 7, + 254, 126, 233, 33, 235, 7, 230, 105, 233, 33, 237, 174, 233, 33, 220, 74, + 249, 5, 230, 112, 61, 230, 112, 223, 157, 230, 112, 248, 188, 221, 176, + 252, 22, 42, 231, 188, 245, 251, 225, 66, 228, 229, 45, 231, 188, 245, + 251, 225, 66, 228, 229, 42, 225, 66, 228, 229, 45, 225, 66, 228, 229, + 210, 221, 180, 246, 153, 250, 79, 235, 7, 230, 105, 250, 79, 235, 7, 254, + 126, 51, 223, 92, 51, 223, 57, 51, 237, 174, 51, 220, 74, 229, 62, 114, + 25, 229, 234, 101, 235, 87, 2, 248, 145, 244, 30, 2, 248, 145, 219, 100, + 233, 95, 235, 86, 219, 100, 233, 95, 244, 29, 235, 87, 114, 199, 156, + 244, 29, 244, 30, 114, 199, 156, 235, 86, 114, 199, 156, 235, 86, 114, + 199, 156, 244, 29, 114, 199, 156, 228, 244, 114, 199, 156, 223, 84, 248, + 160, 212, 228, 248, 156, 246, 155, 248, 160, 212, 223, 87, 156, 246, 155, + 212, 40, 237, 237, 117, 156, 114, 101, 212, 40, 230, 101, 117, 156, 114, + 101, 40, 237, 237, 117, 156, 212, 114, 101, 40, 230, 101, 117, 156, 212, + 114, 101, 235, 87, 251, 222, 212, 246, 150, 101, 244, 30, 251, 222, 212, + 246, 150, 101, 228, 245, 251, 222, 212, 246, 150, 101, 223, 85, 251, 222, + 212, 246, 150, 101, 212, 231, 188, 223, 101, 230, 165, 248, 160, 212, + 250, 142, 254, 14, 231, 188, 223, 100, 212, 231, 188, 223, 101, 117, 156, + 114, 101, 248, 160, 212, 250, 142, 254, 14, 231, 188, 223, 101, 156, 246, + 155, 69, 246, 208, 233, 191, 186, 246, 208, 108, 45, 249, 11, 246, 208, + 113, 45, 249, 11, 246, 208, 246, 213, 117, 2, 171, 186, 92, 246, 213, + 117, 2, 69, 252, 201, 253, 245, 246, 190, 117, 186, 92, 3, 246, 213, 117, + 2, 69, 252, 201, 253, 245, 246, 190, 117, 186, 92, 246, 213, 117, 2, 61, + 50, 246, 213, 117, 2, 230, 77, 3, 246, 213, 117, 2, 230, 77, 246, 213, + 117, 2, 220, 81, 246, 213, 117, 2, 124, 186, 223, 107, 250, 140, 2, 171, + 186, 92, 250, 140, 2, 69, 252, 201, 253, 245, 246, 190, 117, 186, 92, 3, + 250, 140, 2, 69, 252, 201, 253, 245, 246, 190, 117, 186, 92, 250, 140, 2, + 230, 77, 3, 250, 140, 2, 230, 77, 217, 158, 165, 252, 226, 233, 253, 249, + 6, 55, 246, 215, 65, 242, 182, 108, 254, 20, 113, 254, 20, 228, 225, 229, + 156, 218, 235, 235, 43, 42, 251, 90, 45, 251, 90, 42, 245, 149, 45, 245, + 149, 252, 29, 45, 250, 102, 252, 29, 42, 250, 102, 221, 120, 45, 250, + 102, 221, 120, 42, 250, 102, 210, 212, 55, 40, 234, 234, 254, 51, 226, + 80, 226, 85, 222, 72, 227, 211, 229, 16, 237, 211, 219, 88, 223, 227, + 229, 57, 117, 237, 182, 55, 215, 212, 55, 218, 242, 242, 183, 221, 120, + 42, 250, 123, 221, 120, 45, 250, 123, 252, 29, 42, 250, 123, 252, 29, 45, + 250, 123, 221, 120, 144, 237, 186, 252, 29, 144, 237, 186, 245, 95, 224, + 39, 108, 254, 21, 252, 100, 124, 186, 252, 191, 230, 107, 236, 154, 246, + 146, 199, 222, 23, 227, 109, 218, 152, 237, 224, 112, 227, 209, 252, 21, + 236, 153, 235, 112, 254, 120, 115, 227, 106, 254, 120, 115, 246, 146, + 199, 222, 23, 235, 115, 252, 111, 227, 93, 250, 56, 254, 158, 254, 28, + 222, 227, 221, 112, 227, 9, 248, 228, 230, 102, 250, 152, 222, 113, 224, + 49, 250, 114, 250, 113, 179, 180, 16, 242, 104, 179, 180, 16, 223, 221, + 228, 95, 179, 180, 16, 228, 96, 246, 155, 179, 180, 16, 228, 96, 248, + 193, 179, 180, 16, 228, 96, 249, 4, 179, 180, 16, 228, 96, 237, 47, 179, + 180, 16, 228, 96, 250, 221, 179, 180, 16, 250, 222, 223, 142, 179, 180, + 16, 250, 222, 237, 47, 179, 180, 16, 224, 56, 135, 179, 180, 16, 252, + 231, 135, 179, 180, 16, 228, 96, 224, 55, 179, 180, 16, 228, 96, 252, + 230, 179, 180, 16, 228, 96, 235, 86, 179, 180, 16, 228, 96, 244, 29, 179, + 180, 16, 127, 219, 183, 179, 180, 16, 90, 219, 183, 179, 180, 16, 228, + 96, 127, 65, 179, 180, 16, 228, 96, 90, 65, 179, 180, 16, 250, 222, 252, + 230, 179, 180, 16, 113, 222, 144, 220, 81, 179, 180, 16, 249, 63, 223, + 142, 179, 180, 16, 228, 96, 113, 251, 134, 179, 180, 16, 228, 96, 249, + 62, 179, 180, 16, 113, 222, 144, 237, 47, 179, 180, 16, 220, 53, 219, + 183, 179, 180, 16, 228, 96, 220, 53, 65, 179, 180, 16, 108, 222, 144, + 230, 77, 179, 180, 16, 249, 72, 223, 142, 179, 180, 16, 228, 96, 108, + 251, 134, 179, 180, 16, 228, 96, 249, 71, 179, 180, 16, 108, 222, 144, + 237, 47, 179, 180, 16, 247, 130, 219, 183, 179, 180, 16, 228, 96, 247, + 130, 65, 179, 180, 16, 228, 68, 220, 81, 179, 180, 16, 249, 63, 220, 81, + 179, 180, 16, 249, 5, 220, 81, 179, 180, 16, 237, 48, 220, 81, 179, 180, + 16, 250, 222, 220, 81, 179, 180, 16, 108, 224, 198, 237, 47, 179, 180, + 16, 228, 68, 228, 95, 179, 180, 16, 250, 222, 223, 156, 179, 180, 16, + 228, 96, 250, 175, 179, 180, 16, 108, 222, 144, 249, 13, 179, 180, 16, + 249, 72, 249, 13, 179, 180, 16, 223, 157, 249, 13, 179, 180, 16, 237, 48, + 249, 13, 179, 180, 16, 250, 222, 249, 13, 179, 180, 16, 113, 224, 198, + 223, 142, 179, 180, 16, 42, 224, 198, 223, 142, 179, 180, 16, 221, 180, + 249, 13, 179, 180, 16, 244, 30, 249, 13, 179, 180, 16, 250, 169, 135, + 179, 180, 16, 249, 72, 221, 179, 179, 180, 16, 217, 32, 179, 180, 16, + 223, 143, 221, 179, 179, 180, 16, 225, 68, 220, 81, 179, 180, 16, 228, + 96, 212, 246, 155, 179, 180, 16, 228, 96, 228, 81, 179, 180, 16, 113, + 251, 135, 221, 179, 179, 180, 16, 108, 251, 135, 221, 179, 179, 180, 16, + 237, 162, 179, 180, 16, 227, 149, 179, 180, 16, 230, 143, 179, 180, 16, + 254, 147, 220, 81, 179, 180, 16, 246, 157, 220, 81, 179, 180, 16, 237, + 163, 220, 81, 179, 180, 16, 230, 144, 220, 81, 179, 180, 16, 254, 146, + 212, 251, 45, 78, 45, 254, 120, 2, 247, 130, 217, 33, 65, 224, 177, 230, + 119, 252, 21, 252, 120, 100, 69, 235, 44, 2, 233, 193, 248, 145, 237, + 191, 100, 250, 137, 220, 79, 100, 248, 204, 220, 79, 100, 246, 201, 100, + 250, 160, 100, 67, 40, 2, 251, 85, 69, 235, 43, 246, 179, 100, 254, 142, + 236, 155, 100, 243, 142, 100, 34, 186, 252, 201, 2, 231, 183, 34, 221, + 91, 247, 132, 252, 1, 250, 222, 2, 231, 186, 65, 220, 77, 100, 233, 122, + 100, 242, 117, 100, 230, 118, 243, 224, 100, 230, 118, 235, 200, 100, + 229, 218, 100, 229, 217, 100, 248, 210, 250, 77, 16, 245, 124, 103, 224, + 20, 100, 179, 180, 16, 228, 95, 249, 86, 225, 55, 236, 155, 100, 228, + 237, 230, 34, 232, 120, 230, 34, 228, 234, 226, 101, 100, 250, 209, 226, + 101, 100, 42, 229, 230, 220, 60, 96, 42, 229, 230, 246, 86, 42, 229, 230, + 234, 237, 96, 45, 229, 230, 220, 60, 96, 45, 229, 230, 246, 86, 45, 229, + 230, 234, 237, 96, 42, 40, 252, 18, 220, 60, 250, 123, 42, 40, 252, 18, + 246, 86, 42, 40, 252, 18, 234, 237, 250, 123, 45, 40, 252, 18, 220, 60, + 250, 123, 45, 40, 252, 18, 246, 86, 45, 40, 252, 18, 234, 237, 250, 123, + 42, 250, 79, 252, 18, 220, 60, 96, 42, 250, 79, 252, 18, 233, 193, 229, + 102, 42, 250, 79, 252, 18, 234, 237, 96, 250, 79, 252, 18, 246, 86, 45, + 250, 79, 252, 18, 220, 60, 96, 45, 250, 79, 252, 18, 233, 193, 229, 102, + 45, 250, 79, 252, 18, 234, 237, 96, 237, 187, 246, 86, 186, 235, 44, 246, + 86, 220, 60, 42, 156, 234, 237, 45, 250, 79, 252, 18, 226, 86, 220, 60, + 45, 156, 234, 237, 42, 250, 79, 252, 18, 226, 86, 223, 72, 221, 119, 223, + 72, 252, 28, 221, 120, 40, 115, 252, 29, 40, 115, 252, 29, 40, 252, 18, + 104, 221, 120, 40, 115, 32, 16, 252, 28, 42, 69, 86, 235, 43, 45, 69, 86, + 235, 43, 186, 226, 112, 235, 42, 186, 226, 112, 235, 41, 186, 226, 112, + 235, 40, 186, 226, 112, 235, 39, 249, 54, 16, 170, 69, 25, 221, 120, 227, + 109, 249, 54, 16, 170, 69, 25, 252, 29, 227, 109, 249, 54, 16, 170, 69, + 2, 250, 221, 249, 54, 16, 170, 113, 25, 186, 2, 250, 221, 249, 54, 16, + 170, 108, 25, 186, 2, 250, 221, 249, 54, 16, 170, 69, 2, 221, 90, 249, + 54, 16, 170, 113, 25, 186, 2, 221, 90, 249, 54, 16, 170, 108, 25, 186, 2, + 221, 90, 249, 54, 16, 170, 69, 25, 218, 236, 249, 54, 16, 170, 113, 25, + 186, 2, 218, 236, 249, 54, 16, 170, 108, 25, 186, 2, 218, 236, 249, 54, + 16, 170, 113, 25, 242, 241, 249, 54, 16, 170, 108, 25, 242, 241, 249, 54, + 16, 170, 69, 25, 221, 120, 235, 115, 249, 54, 16, 170, 69, 25, 252, 29, + 235, 115, 40, 245, 133, 227, 163, 100, 246, 225, 100, 69, 235, 44, 246, + 86, 233, 233, 252, 8, 233, 233, 171, 104, 224, 191, 233, 233, 224, 192, + 104, 235, 2, 233, 233, 171, 104, 124, 224, 179, 233, 233, 124, 224, 180, + 104, 235, 2, 233, 233, 124, 224, 180, 237, 55, 233, 233, 221, 75, 233, + 233, 222, 43, 233, 233, 229, 174, 247, 9, 244, 24, 245, 81, 221, 120, + 229, 229, 252, 29, 229, 229, 221, 120, 250, 79, 115, 252, 29, 250, 79, + 115, 221, 120, 221, 114, 224, 236, 115, 252, 29, 221, 114, 224, 236, 115, + 67, 221, 101, 252, 111, 227, 94, 2, 250, 221, 223, 129, 245, 155, 255, 3, + 250, 76, 246, 214, 237, 174, 249, 86, 246, 88, 100, 16, 35, 231, 110, 16, + 35, 223, 154, 117, 243, 157, 16, 35, 223, 154, 117, 222, 39, 16, 35, 246, + 190, 117, 222, 39, 16, 35, 246, 190, 117, 221, 104, 16, 35, 246, 181, 16, + 35, 254, 252, 16, 35, 252, 119, 16, 35, 252, 229, 16, 35, 186, 222, 145, + 16, 35, 235, 44, 245, 224, 16, 35, 69, 222, 145, 16, 35, 245, 124, 245, + 224, 16, 35, 251, 128, 227, 162, 16, 35, 224, 217, 230, 83, 16, 35, 224, + 217, 237, 223, 16, 35, 249, 142, 235, 34, 246, 135, 16, 35, 249, 42, 250, + 132, 107, 16, 35, 249, 42, 250, 132, 103, 16, 35, 249, 42, 250, 132, 160, + 16, 35, 249, 42, 250, 132, 154, 16, 35, 232, 136, 254, 252, 16, 35, 222, + 224, 238, 28, 16, 35, 246, 190, 117, 221, 105, 252, 45, 16, 35, 251, 152, + 16, 35, 246, 190, 117, 234, 17, 16, 35, 223, 90, 16, 35, 246, 135, 16, + 35, 245, 189, 225, 54, 16, 35, 244, 23, 225, 54, 16, 35, 227, 212, 225, + 54, 16, 35, 220, 73, 225, 54, 16, 35, 223, 254, 16, 35, 249, 69, 252, 48, + 100, 230, 119, 252, 21, 16, 35, 232, 122, 16, 35, 249, 70, 245, 124, 103, + 16, 35, 223, 91, 245, 124, 103, 230, 171, 96, 230, 171, 251, 64, 230, + 171, 245, 127, 230, 171, 237, 170, 245, 127, 230, 171, 252, 117, 251, + 247, 230, 171, 252, 25, 221, 200, 230, 171, 252, 15, 252, 204, 242, 58, + 230, 171, 254, 135, 117, 251, 44, 230, 171, 249, 146, 230, 171, 250, 70, + 254, 254, 231, 108, 230, 171, 51, 252, 230, 34, 20, 107, 34, 20, 103, 34, + 20, 160, 34, 20, 154, 34, 20, 174, 34, 20, 182, 34, 20, 191, 34, 20, 185, + 34, 20, 190, 34, 54, 222, 65, 34, 54, 246, 211, 34, 54, 220, 221, 34, 54, + 221, 247, 34, 54, 245, 111, 34, 54, 245, 200, 34, 54, 224, 77, 34, 54, + 225, 41, 34, 54, 246, 233, 34, 54, 232, 29, 34, 54, 220, 219, 82, 20, + 107, 82, 20, 103, 82, 20, 160, 82, 20, 154, 82, 20, 174, 82, 20, 182, 82, + 20, 191, 82, 20, 185, 82, 20, 190, 82, 54, 222, 65, 82, 54, 246, 211, 82, + 54, 220, 221, 82, 54, 221, 247, 82, 54, 245, 111, 82, 54, 245, 200, 82, + 54, 224, 77, 82, 54, 225, 41, 82, 54, 246, 233, 82, 54, 232, 29, 82, 54, + 220, 219, 20, 131, 245, 90, 223, 136, 20, 124, 245, 90, 223, 136, 20, + 148, 245, 90, 223, 136, 20, 245, 116, 245, 90, 223, 136, 20, 245, 170, + 245, 90, 223, 136, 20, 224, 82, 245, 90, 223, 136, 20, 225, 43, 245, 90, + 223, 136, 20, 246, 235, 245, 90, 223, 136, 20, 232, 31, 245, 90, 223, + 136, 54, 222, 66, 245, 90, 223, 136, 54, 246, 212, 245, 90, 223, 136, 54, + 220, 222, 245, 90, 223, 136, 54, 221, 248, 245, 90, 223, 136, 54, 245, + 112, 245, 90, 223, 136, 54, 245, 201, 245, 90, 223, 136, 54, 224, 78, + 245, 90, 223, 136, 54, 225, 42, 245, 90, 223, 136, 54, 246, 234, 245, 90, + 223, 136, 54, 232, 30, 245, 90, 223, 136, 54, 220, 220, 245, 90, 223, + 136, 82, 7, 3, 1, 60, 82, 7, 3, 1, 253, 204, 82, 7, 3, 1, 251, 202, 82, + 7, 3, 1, 250, 46, 82, 7, 3, 1, 73, 82, 7, 3, 1, 246, 74, 82, 7, 3, 1, + 245, 67, 82, 7, 3, 1, 243, 225, 82, 7, 3, 1, 72, 82, 7, 3, 1, 237, 126, + 82, 7, 3, 1, 237, 17, 82, 7, 3, 1, 153, 82, 7, 3, 1, 189, 82, 7, 3, 1, + 207, 82, 7, 3, 1, 74, 82, 7, 3, 1, 230, 59, 82, 7, 3, 1, 228, 163, 82, 7, + 3, 1, 152, 82, 7, 3, 1, 198, 82, 7, 3, 1, 222, 201, 82, 7, 3, 1, 68, 82, + 7, 3, 1, 216, 216, 82, 7, 3, 1, 219, 40, 82, 7, 3, 1, 218, 151, 82, 7, 3, + 1, 218, 90, 82, 7, 3, 1, 217, 157, 34, 7, 6, 1, 60, 34, 7, 6, 1, 253, + 204, 34, 7, 6, 1, 251, 202, 34, 7, 6, 1, 250, 46, 34, 7, 6, 1, 73, 34, 7, + 6, 1, 246, 74, 34, 7, 6, 1, 245, 67, 34, 7, 6, 1, 243, 225, 34, 7, 6, 1, + 72, 34, 7, 6, 1, 237, 126, 34, 7, 6, 1, 237, 17, 34, 7, 6, 1, 153, 34, 7, + 6, 1, 189, 34, 7, 6, 1, 207, 34, 7, 6, 1, 74, 34, 7, 6, 1, 230, 59, 34, + 7, 6, 1, 228, 163, 34, 7, 6, 1, 152, 34, 7, 6, 1, 198, 34, 7, 6, 1, 222, + 201, 34, 7, 6, 1, 68, 34, 7, 6, 1, 216, 216, 34, 7, 6, 1, 219, 40, 34, 7, + 6, 1, 218, 151, 34, 7, 6, 1, 218, 90, 34, 7, 6, 1, 217, 157, 34, 7, 3, 1, + 60, 34, 7, 3, 1, 253, 204, 34, 7, 3, 1, 251, 202, 34, 7, 3, 1, 250, 46, + 34, 7, 3, 1, 73, 34, 7, 3, 1, 246, 74, 34, 7, 3, 1, 245, 67, 34, 7, 3, 1, + 243, 225, 34, 7, 3, 1, 72, 34, 7, 3, 1, 237, 126, 34, 7, 3, 1, 237, 17, + 34, 7, 3, 1, 153, 34, 7, 3, 1, 189, 34, 7, 3, 1, 207, 34, 7, 3, 1, 74, + 34, 7, 3, 1, 230, 59, 34, 7, 3, 1, 228, 163, 34, 7, 3, 1, 152, 34, 7, 3, + 1, 198, 34, 7, 3, 1, 222, 201, 34, 7, 3, 1, 68, 34, 7, 3, 1, 216, 216, + 34, 7, 3, 1, 219, 40, 34, 7, 3, 1, 218, 151, 34, 7, 3, 1, 218, 90, 34, 7, + 3, 1, 217, 157, 34, 20, 217, 84, 232, 136, 34, 54, 246, 211, 232, 136, + 34, 54, 220, 221, 232, 136, 34, 54, 221, 247, 232, 136, 34, 54, 245, 111, + 232, 136, 34, 54, 245, 200, 232, 136, 34, 54, 224, 77, 232, 136, 34, 54, + 225, 41, 232, 136, 34, 54, 246, 233, 232, 136, 34, 54, 232, 29, 232, 136, + 34, 54, 220, 219, 51, 34, 20, 107, 51, 34, 20, 103, 51, 34, 20, 160, 51, + 34, 20, 154, 51, 34, 20, 174, 51, 34, 20, 182, 51, 34, 20, 191, 51, 34, + 20, 185, 51, 34, 20, 190, 51, 34, 54, 222, 65, 232, 136, 34, 20, 217, 84, + 86, 89, 170, 242, 241, 86, 89, 106, 242, 241, 86, 89, 170, 219, 152, 86, + 89, 106, 219, 152, 86, 89, 170, 221, 78, 249, 147, 242, 241, 86, 89, 106, + 221, 78, 249, 147, 242, 241, 86, 89, 170, 221, 78, 249, 147, 219, 152, + 86, 89, 106, 221, 78, 249, 147, 219, 152, 86, 89, 170, 228, 92, 249, 147, + 242, 241, 86, 89, 106, 228, 92, 249, 147, 242, 241, 86, 89, 170, 228, 92, + 249, 147, 219, 152, 86, 89, 106, 228, 92, 249, 147, 219, 152, 86, 89, + 170, 113, 25, 227, 109, 86, 89, 113, 170, 25, 45, 243, 149, 86, 89, 113, + 106, 25, 45, 235, 58, 86, 89, 106, 113, 25, 227, 109, 86, 89, 170, 113, + 25, 235, 115, 86, 89, 113, 170, 25, 42, 243, 149, 86, 89, 113, 106, 25, + 42, 235, 58, 86, 89, 106, 113, 25, 235, 115, 86, 89, 170, 108, 25, 227, + 109, 86, 89, 108, 170, 25, 45, 243, 149, 86, 89, 108, 106, 25, 45, 235, + 58, 86, 89, 106, 108, 25, 227, 109, 86, 89, 170, 108, 25, 235, 115, 86, + 89, 108, 170, 25, 42, 243, 149, 86, 89, 108, 106, 25, 42, 235, 58, 86, + 89, 106, 108, 25, 235, 115, 86, 89, 170, 69, 25, 227, 109, 86, 89, 69, + 170, 25, 45, 243, 149, 86, 89, 108, 106, 25, 45, 113, 235, 58, 86, 89, + 113, 106, 25, 45, 108, 235, 58, 86, 89, 69, 106, 25, 45, 235, 58, 86, 89, + 113, 170, 25, 45, 108, 243, 149, 86, 89, 108, 170, 25, 45, 113, 243, 149, + 86, 89, 106, 69, 25, 227, 109, 86, 89, 170, 69, 25, 235, 115, 86, 89, 69, + 170, 25, 42, 243, 149, 86, 89, 108, 106, 25, 42, 113, 235, 58, 86, 89, + 113, 106, 25, 42, 108, 235, 58, 86, 89, 69, 106, 25, 42, 235, 58, 86, 89, + 113, 170, 25, 42, 108, 243, 149, 86, 89, 108, 170, 25, 42, 113, 243, 149, + 86, 89, 106, 69, 25, 235, 115, 86, 89, 170, 113, 25, 242, 241, 86, 89, + 42, 106, 25, 45, 113, 235, 58, 86, 89, 45, 106, 25, 42, 113, 235, 58, 86, + 89, 113, 170, 25, 186, 243, 149, 86, 89, 113, 106, 25, 186, 235, 58, 86, + 89, 45, 170, 25, 42, 113, 243, 149, 86, 89, 42, 170, 25, 45, 113, 243, + 149, 86, 89, 106, 113, 25, 242, 241, 86, 89, 170, 108, 25, 242, 241, 86, + 89, 42, 106, 25, 45, 108, 235, 58, 86, 89, 45, 106, 25, 42, 108, 235, 58, + 86, 89, 108, 170, 25, 186, 243, 149, 86, 89, 108, 106, 25, 186, 235, 58, + 86, 89, 45, 170, 25, 42, 108, 243, 149, 86, 89, 42, 170, 25, 45, 108, + 243, 149, 86, 89, 106, 108, 25, 242, 241, 86, 89, 170, 69, 25, 242, 241, + 86, 89, 42, 106, 25, 45, 69, 235, 58, 86, 89, 45, 106, 25, 42, 69, 235, + 58, 86, 89, 69, 170, 25, 186, 243, 149, 86, 89, 108, 106, 25, 113, 186, + 235, 58, 86, 89, 113, 106, 25, 108, 186, 235, 58, 86, 89, 69, 106, 25, + 186, 235, 58, 86, 89, 42, 108, 106, 25, 45, 113, 235, 58, 86, 89, 45, + 108, 106, 25, 42, 113, 235, 58, 86, 89, 42, 113, 106, 25, 45, 108, 235, + 58, 86, 89, 45, 113, 106, 25, 42, 108, 235, 58, 86, 89, 113, 170, 25, + 108, 186, 243, 149, 86, 89, 108, 170, 25, 113, 186, 243, 149, 86, 89, 45, + 170, 25, 42, 69, 243, 149, 86, 89, 42, 170, 25, 45, 69, 243, 149, 86, 89, + 106, 69, 25, 242, 241, 86, 89, 170, 51, 249, 147, 242, 241, 86, 89, 106, + 51, 249, 147, 242, 241, 86, 89, 170, 51, 249, 147, 219, 152, 86, 89, 106, + 51, 249, 147, 219, 152, 86, 89, 51, 242, 241, 86, 89, 51, 219, 152, 86, + 89, 113, 224, 109, 25, 45, 247, 138, 86, 89, 113, 51, 25, 45, 224, 108, + 86, 89, 51, 113, 25, 227, 109, 86, 89, 113, 224, 109, 25, 42, 247, 138, + 86, 89, 113, 51, 25, 42, 224, 108, 86, 89, 51, 113, 25, 235, 115, 86, 89, + 108, 224, 109, 25, 45, 247, 138, 86, 89, 108, 51, 25, 45, 224, 108, 86, + 89, 51, 108, 25, 227, 109, 86, 89, 108, 224, 109, 25, 42, 247, 138, 86, + 89, 108, 51, 25, 42, 224, 108, 86, 89, 51, 108, 25, 235, 115, 86, 89, 69, + 224, 109, 25, 45, 247, 138, 86, 89, 69, 51, 25, 45, 224, 108, 86, 89, 51, + 69, 25, 227, 109, 86, 89, 69, 224, 109, 25, 42, 247, 138, 86, 89, 69, 51, + 25, 42, 224, 108, 86, 89, 51, 69, 25, 235, 115, 86, 89, 113, 224, 109, + 25, 186, 247, 138, 86, 89, 113, 51, 25, 186, 224, 108, 86, 89, 51, 113, + 25, 242, 241, 86, 89, 108, 224, 109, 25, 186, 247, 138, 86, 89, 108, 51, + 25, 186, 224, 108, 86, 89, 51, 108, 25, 242, 241, 86, 89, 69, 224, 109, + 25, 186, 247, 138, 86, 89, 69, 51, 25, 186, 224, 108, 86, 89, 51, 69, 25, + 242, 241, 86, 89, 170, 254, 52, 113, 25, 227, 109, 86, 89, 170, 254, 52, + 113, 25, 235, 115, 86, 89, 170, 254, 52, 108, 25, 235, 115, 86, 89, 170, + 254, 52, 108, 25, 227, 109, 86, 89, 170, 249, 11, 220, 60, 45, 199, 234, + 237, 235, 115, 86, 89, 170, 249, 11, 220, 60, 42, 199, 234, 237, 227, + 109, 86, 89, 170, 249, 11, 250, 100, 86, 89, 170, 235, 115, 86, 89, 170, + 220, 63, 86, 89, 170, 227, 109, 86, 89, 170, 247, 132, 86, 89, 106, 235, + 115, 86, 89, 106, 220, 63, 86, 89, 106, 227, 109, 86, 89, 106, 247, 132, + 86, 89, 170, 42, 25, 106, 227, 109, 86, 89, 170, 108, 25, 106, 247, 132, + 86, 89, 106, 42, 25, 170, 227, 109, 86, 89, 106, 108, 25, 170, 247, 132, + 220, 60, 144, 252, 45, 234, 237, 131, 246, 232, 252, 45, 234, 237, 131, + 228, 90, 252, 45, 234, 237, 148, 246, 230, 252, 45, 234, 237, 144, 252, + 45, 234, 237, 245, 170, 246, 230, 252, 45, 234, 237, 148, 228, 88, 252, + 45, 234, 237, 225, 43, 246, 230, 252, 45, 245, 90, 252, 45, 42, 225, 43, + 246, 230, 252, 45, 42, 148, 228, 88, 252, 45, 42, 245, 170, 246, 230, + 252, 45, 42, 144, 252, 45, 42, 148, 246, 230, 252, 45, 42, 131, 228, 90, + 252, 45, 42, 131, 246, 232, 252, 45, 45, 144, 252, 45, 170, 225, 15, 234, + 18, 225, 15, 249, 152, 225, 15, 220, 60, 131, 246, 232, 252, 45, 45, 131, + 246, 232, 252, 45, 228, 94, 234, 237, 235, 115, 228, 94, 234, 237, 227, + 109, 228, 94, 220, 60, 235, 115, 228, 94, 220, 60, 42, 25, 234, 237, 42, + 25, 234, 237, 227, 109, 228, 94, 220, 60, 42, 25, 234, 237, 227, 109, + 228, 94, 220, 60, 42, 25, 220, 60, 45, 25, 234, 237, 235, 115, 228, 94, + 220, 60, 42, 25, 220, 60, 45, 25, 234, 237, 227, 109, 228, 94, 220, 60, + 227, 109, 228, 94, 220, 60, 45, 25, 234, 237, 235, 115, 228, 94, 220, 60, + 45, 25, 234, 237, 42, 25, 234, 237, 227, 109, 84, 223, 227, 67, 223, 227, + 67, 40, 2, 227, 55, 250, 122, 67, 40, 250, 141, 84, 3, 223, 227, 40, 2, + 186, 245, 187, 40, 2, 69, 245, 187, 40, 2, 230, 95, 250, 96, 245, 187, + 40, 2, 220, 60, 42, 199, 234, 237, 45, 245, 187, 40, 2, 220, 60, 45, 199, + 234, 237, 42, 245, 187, 40, 2, 249, 11, 250, 96, 245, 187, 84, 3, 223, + 227, 67, 3, 223, 227, 84, 227, 208, 67, 227, 208, 84, 69, 227, 208, 67, + 69, 227, 208, 84, 229, 232, 67, 229, 232, 84, 220, 62, 221, 90, 67, 220, + 62, 221, 90, 84, 220, 62, 3, 221, 90, 67, 220, 62, 3, 221, 90, 84, 227, + 106, 221, 90, 67, 227, 106, 221, 90, 84, 227, 106, 3, 221, 90, 67, 227, + 106, 3, 221, 90, 84, 227, 106, 229, 29, 67, 227, 106, 229, 29, 84, 247, + 131, 221, 90, 67, 247, 131, 221, 90, 84, 247, 131, 3, 221, 90, 67, 247, + 131, 3, 221, 90, 84, 235, 112, 221, 90, 67, 235, 112, 221, 90, 84, 235, + 112, 3, 221, 90, 67, 235, 112, 3, 221, 90, 84, 235, 112, 229, 29, 67, + 235, 112, 229, 29, 84, 249, 4, 67, 249, 4, 67, 249, 5, 250, 141, 84, 3, + 249, 4, 245, 175, 234, 234, 67, 250, 221, 247, 143, 250, 221, 250, 222, + 2, 69, 245, 187, 251, 239, 84, 250, 221, 250, 222, 2, 42, 144, 252, 53, + 250, 222, 2, 45, 144, 252, 53, 250, 222, 2, 234, 237, 144, 252, 53, 250, + 222, 2, 220, 60, 144, 252, 53, 250, 222, 2, 220, 60, 45, 228, 94, 252, + 53, 250, 222, 2, 254, 158, 251, 222, 220, 60, 42, 228, 94, 252, 53, 42, + 144, 84, 250, 221, 45, 144, 84, 250, 221, 237, 171, 251, 241, 237, 171, + 67, 250, 221, 220, 60, 144, 237, 171, 67, 250, 221, 234, 237, 144, 237, + 171, 67, 250, 221, 220, 60, 42, 228, 94, 250, 219, 254, 51, 220, 60, 45, + 228, 94, 250, 219, 254, 51, 234, 237, 45, 228, 94, 250, 219, 254, 51, + 234, 237, 42, 228, 94, 250, 219, 254, 51, 220, 60, 144, 250, 221, 234, + 237, 144, 250, 221, 84, 234, 237, 45, 221, 90, 84, 234, 237, 42, 221, 90, + 84, 220, 60, 42, 221, 90, 84, 220, 60, 45, 221, 90, 67, 251, 241, 40, 2, + 42, 144, 252, 53, 40, 2, 45, 144, 252, 53, 40, 2, 220, 60, 42, 249, 11, + 144, 252, 53, 40, 2, 234, 237, 45, 249, 11, 144, 252, 53, 67, 40, 2, 69, + 252, 63, 235, 43, 67, 220, 62, 221, 91, 2, 248, 145, 220, 62, 221, 91, 2, + 42, 144, 252, 53, 220, 62, 221, 91, 2, 45, 144, 252, 53, 235, 146, 250, + 221, 67, 40, 2, 220, 60, 42, 228, 93, 67, 40, 2, 234, 237, 42, 228, 93, + 67, 40, 2, 234, 237, 45, 228, 93, 67, 40, 2, 220, 60, 45, 228, 93, 67, + 250, 222, 2, 220, 60, 42, 228, 93, 67, 250, 222, 2, 234, 237, 42, 228, + 93, 67, 250, 222, 2, 234, 237, 45, 228, 93, 67, 250, 222, 2, 220, 60, 45, + 228, 93, 220, 60, 42, 221, 90, 220, 60, 45, 221, 90, 234, 237, 42, 221, + 90, 67, 234, 18, 223, 227, 84, 234, 18, 223, 227, 67, 234, 18, 3, 223, + 227, 84, 234, 18, 3, 223, 227, 234, 237, 45, 221, 90, 84, 223, 69, 2, + 227, 220, 250, 189, 220, 91, 224, 28, 250, 171, 84, 223, 156, 67, 223, + 156, 235, 56, 221, 220, 223, 68, 254, 10, 231, 201, 249, 47, 231, 201, + 250, 149, 230, 109, 84, 222, 71, 67, 222, 71, 252, 213, 252, 21, 252, + 213, 86, 2, 251, 44, 252, 213, 86, 2, 218, 151, 226, 149, 220, 92, 2, + 227, 243, 247, 117, 242, 187, 252, 98, 67, 224, 196, 229, 102, 84, 224, + 196, 229, 102, 225, 11, 210, 227, 59, 245, 148, 243, 154, 251, 241, 84, + 42, 229, 28, 237, 213, 84, 45, 229, 28, 237, 213, 67, 42, 229, 28, 237, + 213, 67, 108, 229, 28, 237, 213, 67, 45, 229, 28, 237, 213, 67, 113, 229, + 28, 237, 213, 224, 60, 25, 250, 99, 251, 120, 55, 227, 250, 55, 252, 69, + 55, 251, 164, 254, 115, 230, 96, 250, 100, 251, 32, 227, 149, 250, 101, + 117, 234, 243, 250, 101, 117, 237, 105, 223, 157, 25, 250, 104, 245, 241, + 100, 254, 238, 225, 13, 243, 193, 25, 224, 138, 229, 197, 100, 217, 241, + 218, 45, 221, 82, 35, 243, 151, 221, 82, 35, 235, 165, 221, 82, 35, 245, + 179, 221, 82, 35, 221, 221, 221, 82, 35, 218, 194, 221, 82, 35, 218, 240, + 221, 82, 35, 233, 107, 221, 82, 35, 247, 8, 218, 211, 117, 249, 30, 67, + 245, 94, 246, 3, 67, 224, 38, 246, 3, 84, 224, 38, 246, 3, 67, 223, 69, + 2, 227, 220, 245, 178, 228, 90, 233, 117, 235, 142, 228, 90, 233, 117, + 233, 249, 245, 217, 55, 247, 8, 234, 90, 55, 237, 31, 226, 124, 220, 45, + 232, 129, 229, 41, 254, 39, 222, 104, 244, 182, 251, 150, 235, 90, 219, + 80, 235, 65, 226, 102, 226, 163, 251, 140, 254, 68, 229, 66, 67, 251, 37, + 236, 102, 67, 251, 37, 228, 83, 67, 251, 37, 227, 65, 67, 251, 37, 252, + 62, 67, 251, 37, 236, 59, 67, 251, 37, 229, 207, 84, 251, 37, 236, 102, + 84, 251, 37, 228, 83, 84, 251, 37, 227, 65, 84, 251, 37, 252, 62, 84, + 251, 37, 236, 59, 84, 251, 37, 229, 207, 84, 223, 252, 223, 80, 67, 243, + 154, 223, 80, 67, 249, 5, 223, 80, 84, 250, 188, 223, 80, 67, 223, 252, + 223, 80, 84, 243, 154, 223, 80, 84, 249, 5, 223, 80, 67, 250, 188, 223, + 80, 242, 187, 223, 231, 228, 90, 231, 180, 246, 232, 231, 180, 252, 142, + 246, 232, 231, 177, 252, 142, 224, 76, 231, 177, 233, 59, 245, 157, 55, + 233, 59, 232, 205, 55, 233, 59, 225, 1, 55, 218, 217, 166, 250, 100, 247, + 5, 166, 250, 100, 220, 70, 227, 204, 100, 227, 204, 16, 35, 220, 197, + 229, 50, 227, 204, 16, 35, 220, 196, 229, 50, 227, 204, 16, 35, 220, 195, + 229, 50, 227, 204, 16, 35, 220, 194, 229, 50, 227, 204, 16, 35, 220, 193, + 229, 50, 227, 204, 16, 35, 220, 192, 229, 50, 227, 204, 16, 35, 220, 191, + 229, 50, 227, 204, 16, 35, 244, 180, 234, 50, 84, 220, 70, 227, 204, 100, + 227, 205, 229, 245, 100, 229, 222, 229, 245, 100, 229, 162, 229, 245, 55, + 218, 209, 100, 248, 254, 246, 2, 248, 254, 246, 1, 248, 254, 246, 0, 248, + 254, 245, 255, 248, 254, 245, 254, 248, 254, 245, 253, 67, 250, 222, 2, + 61, 227, 109, 67, 250, 222, 2, 124, 248, 143, 84, 250, 222, 2, 67, 61, + 227, 109, 84, 250, 222, 2, 124, 67, 248, 143, 233, 125, 35, 218, 45, 233, + 125, 35, 217, 240, 248, 237, 35, 244, 31, 218, 45, 248, 237, 35, 235, 85, + 217, 240, 248, 237, 35, 235, 85, 218, 45, 248, 237, 35, 244, 31, 217, + 240, 67, 245, 163, 84, 245, 163, 243, 193, 25, 229, 104, 254, 128, 250, + 98, 223, 24, 223, 164, 117, 254, 218, 226, 113, 254, 167, 245, 144, 244, + 189, 223, 164, 117, 243, 133, 253, 238, 100, 245, 153, 230, 80, 67, 223, + 156, 148, 235, 38, 250, 131, 227, 109, 148, 235, 38, 250, 131, 235, 115, + 218, 250, 55, 116, 219, 66, 55, 247, 135, 245, 217, 55, 247, 135, 234, + 90, 55, 237, 179, 245, 217, 25, 234, 90, 55, 234, 90, 25, 245, 217, 55, + 234, 90, 2, 214, 55, 234, 90, 2, 214, 25, 234, 90, 25, 245, 217, 55, 69, + 234, 90, 2, 214, 55, 186, 234, 90, 2, 214, 55, 234, 18, 67, 250, 221, + 234, 18, 84, 250, 221, 234, 18, 3, 67, 250, 221, 234, 62, 100, 248, 186, + 100, 220, 69, 229, 221, 100, 250, 178, 245, 86, 220, 42, 232, 124, 251, + 72, 230, 25, 237, 37, 219, 98, 251, 18, 84, 233, 118, 235, 53, 225, 34, + 225, 64, 228, 75, 225, 48, 224, 24, 252, 215, 252, 188, 204, 236, 154, + 67, 247, 122, 234, 86, 67, 247, 122, 236, 102, 84, 247, 122, 234, 86, 84, + 247, 122, 236, 102, 224, 29, 218, 189, 224, 31, 223, 69, 252, 125, 250, + 189, 227, 242, 84, 224, 28, 221, 222, 250, 190, 25, 227, 242, 215, 67, + 224, 196, 229, 102, 215, 84, 224, 196, 229, 102, 67, 249, 5, 237, 224, + 223, 227, 250, 95, 235, 149, 248, 206, 251, 137, 229, 104, 251, 138, 224, + 51, 243, 141, 2, 67, 250, 100, 34, 250, 95, 235, 149, 251, 65, 231, 205, + 246, 174, 254, 144, 230, 135, 42, 218, 230, 221, 106, 84, 220, 204, 42, + 218, 230, 221, 106, 67, 220, 204, 42, 218, 230, 221, 106, 84, 42, 235, + 150, 233, 248, 67, 42, 235, 150, 233, 248, 247, 120, 224, 46, 55, 106, + 67, 247, 131, 221, 90, 42, 250, 197, 246, 174, 204, 226, 149, 245, 247, + 249, 11, 237, 224, 67, 250, 222, 237, 224, 84, 223, 227, 84, 221, 63, + 227, 167, 42, 246, 173, 227, 167, 42, 246, 172, 106, 250, 222, 2, 214, + 25, 124, 188, 50, 84, 250, 101, 230, 139, 224, 218, 224, 207, 224, 174, + 250, 245, 251, 125, 243, 93, 224, 83, 244, 190, 218, 189, 242, 171, 244, + 190, 2, 243, 188, 234, 79, 16, 35, 235, 57, 233, 107, 220, 92, 230, 139, + 244, 24, 245, 117, 245, 164, 237, 224, 242, 252, 245, 209, 226, 160, 40, + 245, 116, 250, 122, 224, 63, 242, 66, 224, 65, 229, 158, 2, 252, 215, + 222, 62, 237, 118, 252, 204, 100, 243, 156, 244, 33, 100, 245, 91, 228, + 198, 250, 83, 230, 139, 84, 223, 227, 67, 245, 164, 2, 186, 233, 193, 84, + 223, 120, 220, 60, 252, 49, 226, 103, 84, 226, 103, 234, 237, 252, 49, + 226, 103, 67, 226, 103, 222, 72, 235, 10, 55, 222, 114, 247, 119, 254, + 187, 246, 170, 219, 93, 243, 189, 218, 167, 243, 189, 234, 237, 45, 229, + 181, 229, 181, 220, 60, 45, 229, 181, 67, 232, 59, 84, 232, 59, 251, 45, + 78, 106, 251, 45, 78, 233, 84, 218, 151, 106, 233, 84, 218, 151, 252, + 213, 218, 151, 106, 252, 213, 218, 151, 230, 80, 23, 250, 100, 106, 23, + 250, 100, 230, 119, 251, 85, 250, 100, 106, 230, 119, 251, 85, 250, 100, + 7, 250, 100, 225, 14, 67, 7, 250, 100, 230, 80, 7, 250, 100, 234, 88, + 250, 100, 223, 157, 117, 249, 140, 245, 116, 222, 83, 253, 251, 245, 116, + 252, 214, 253, 251, 106, 245, 116, 252, 214, 253, 251, 245, 116, 250, + 186, 253, 251, 84, 245, 116, 229, 30, 223, 156, 67, 245, 116, 229, 30, + 223, 156, 223, 125, 230, 80, 67, 223, 156, 34, 67, 223, 156, 230, 119, + 251, 85, 84, 223, 156, 84, 251, 85, 67, 223, 156, 230, 80, 84, 223, 156, + 106, 230, 80, 84, 223, 156, 229, 71, 223, 156, 225, 14, 67, 223, 156, + 106, 253, 251, 230, 119, 251, 85, 253, 251, 246, 235, 223, 236, 253, 251, + 246, 235, 229, 30, 84, 223, 156, 246, 235, 229, 30, 229, 71, 223, 156, + 224, 82, 229, 30, 84, 223, 156, 246, 235, 229, 30, 227, 206, 84, 223, + 156, 106, 246, 235, 229, 30, 227, 206, 84, 223, 156, 220, 222, 229, 30, + 84, 223, 156, 224, 78, 229, 30, 253, 251, 222, 83, 253, 251, 230, 119, + 251, 85, 222, 83, 253, 251, 106, 222, 83, 253, 251, 224, 82, 229, 149, + 84, 25, 67, 245, 147, 84, 245, 147, 67, 245, 147, 246, 235, 229, 149, + 230, 80, 84, 245, 147, 34, 230, 119, 251, 85, 246, 235, 229, 30, 223, + 156, 106, 222, 83, 229, 71, 253, 251, 224, 30, 221, 195, 221, 85, 224, + 30, 106, 251, 35, 224, 30, 223, 251, 106, 223, 251, 252, 214, 253, 251, + 246, 235, 222, 83, 228, 221, 253, 251, 106, 246, 235, 222, 83, 228, 221, + 253, 251, 225, 14, 67, 250, 221, 234, 237, 45, 247, 118, 67, 223, 227, + 220, 60, 45, 247, 118, 67, 223, 227, 234, 237, 45, 225, 14, 67, 223, 227, + 220, 60, 45, 225, 14, 67, 223, 227, 84, 249, 5, 233, 155, 67, 218, 151, + 106, 246, 95, 164, 100, 170, 69, 135, 234, 18, 69, 135, 106, 69, 135, + 106, 224, 109, 215, 250, 169, 228, 69, 164, 230, 98, 106, 224, 109, 250, + 169, 228, 69, 164, 230, 98, 106, 51, 215, 250, 169, 228, 69, 164, 230, + 98, 106, 51, 250, 169, 228, 69, 164, 230, 98, 250, 73, 223, 147, 229, + 241, 5, 230, 98, 106, 246, 95, 164, 230, 98, 106, 243, 154, 246, 95, 164, + 230, 98, 106, 84, 243, 153, 227, 59, 106, 84, 243, 154, 251, 241, 245, + 148, 243, 153, 227, 59, 245, 148, 243, 154, 251, 241, 234, 18, 42, 229, + 230, 230, 98, 234, 18, 45, 229, 230, 230, 98, 234, 18, 245, 154, 42, 229, + 230, 230, 98, 234, 18, 245, 154, 45, 229, 230, 230, 98, 234, 18, 235, + 112, 254, 120, 252, 18, 230, 98, 234, 18, 227, 106, 254, 120, 252, 18, + 230, 98, 106, 235, 112, 254, 120, 228, 69, 164, 230, 98, 106, 227, 106, + 254, 120, 228, 69, 164, 230, 98, 106, 235, 112, 254, 120, 252, 18, 230, + 98, 106, 227, 106, 254, 120, 252, 18, 230, 98, 170, 42, 221, 114, 224, + 236, 252, 18, 230, 98, 170, 45, 221, 114, 224, 236, 252, 18, 230, 98, + 234, 18, 42, 250, 79, 252, 18, 230, 98, 234, 18, 45, 250, 79, 252, 18, + 230, 98, 248, 217, 232, 136, 34, 20, 107, 248, 217, 232, 136, 34, 20, + 103, 248, 217, 232, 136, 34, 20, 160, 248, 217, 232, 136, 34, 20, 154, + 248, 217, 232, 136, 34, 20, 174, 248, 217, 232, 136, 34, 20, 182, 248, + 217, 232, 136, 34, 20, 191, 248, 217, 232, 136, 34, 20, 185, 248, 217, + 232, 136, 34, 20, 190, 248, 217, 232, 136, 34, 54, 222, 65, 248, 217, 34, + 33, 20, 107, 248, 217, 34, 33, 20, 103, 248, 217, 34, 33, 20, 160, 248, + 217, 34, 33, 20, 154, 248, 217, 34, 33, 20, 174, 248, 217, 34, 33, 20, + 182, 248, 217, 34, 33, 20, 191, 248, 217, 34, 33, 20, 185, 248, 217, 34, + 33, 20, 190, 248, 217, 34, 33, 54, 222, 65, 248, 217, 232, 136, 34, 33, + 20, 107, 248, 217, 232, 136, 34, 33, 20, 103, 248, 217, 232, 136, 34, 33, + 20, 160, 248, 217, 232, 136, 34, 33, 20, 154, 248, 217, 232, 136, 34, 33, + 20, 174, 248, 217, 232, 136, 34, 33, 20, 182, 248, 217, 232, 136, 34, 33, + 20, 191, 248, 217, 232, 136, 34, 33, 20, 185, 248, 217, 232, 136, 34, 33, + 20, 190, 248, 217, 232, 136, 34, 33, 54, 222, 65, 106, 218, 200, 90, 65, + 106, 224, 6, 247, 5, 65, 106, 90, 65, 106, 231, 187, 247, 5, 65, 247, + 124, 229, 32, 90, 65, 106, 227, 56, 90, 65, 221, 89, 90, 65, 106, 221, + 89, 90, 65, 249, 145, 221, 89, 90, 65, 106, 249, 145, 221, 89, 90, 65, + 84, 90, 65, 221, 228, 221, 118, 90, 254, 20, 221, 228, 252, 27, 90, 254, + 20, 84, 90, 254, 20, 106, 84, 250, 73, 247, 130, 25, 90, 65, 106, 84, + 250, 73, 220, 53, 25, 90, 65, 223, 224, 84, 90, 65, 106, 250, 157, 84, + 90, 65, 227, 105, 67, 90, 65, 235, 111, 67, 90, 65, 252, 232, 225, 14, + 67, 90, 65, 245, 96, 225, 14, 67, 90, 65, 106, 234, 237, 227, 104, 67, + 90, 65, 106, 220, 60, 227, 104, 67, 90, 65, 231, 182, 234, 237, 227, 104, + 67, 90, 65, 231, 182, 220, 60, 227, 104, 67, 90, 65, 34, 106, 67, 90, 65, + 218, 206, 90, 65, 252, 52, 224, 6, 247, 5, 65, 252, 52, 90, 65, 252, 52, + 231, 187, 247, 5, 65, 106, 252, 52, 224, 6, 247, 5, 65, 106, 252, 52, 90, + 65, 106, 252, 52, 231, 187, 247, 5, 65, 222, 85, 90, 65, 106, 222, 84, + 90, 65, 218, 225, 90, 65, 106, 218, 225, 90, 65, 230, 116, 90, 65, 148, + 248, 227, 254, 119, 67, 221, 91, 250, 141, 3, 67, 221, 90, 229, 160, 230, + 119, 223, 92, 230, 119, 223, 57, 42, 226, 234, 252, 226, 249, 67, 45, + 226, 234, 252, 226, 249, 67, 156, 2, 61, 237, 190, 227, 160, 224, 18, + 228, 243, 223, 92, 223, 58, 228, 243, 224, 17, 69, 252, 201, 2, 186, 92, + 171, 248, 187, 67, 249, 5, 2, 251, 83, 248, 145, 25, 2, 248, 145, 246, + 213, 117, 230, 114, 220, 52, 234, 237, 45, 250, 124, 2, 248, 145, 220, + 60, 42, 250, 124, 2, 248, 145, 42, 230, 82, 237, 57, 45, 230, 82, 237, + 57, 245, 90, 230, 82, 237, 57, 235, 146, 108, 222, 143, 235, 146, 113, + 222, 143, 42, 25, 45, 51, 220, 236, 42, 25, 45, 222, 143, 42, 233, 87, + 171, 45, 222, 143, 171, 42, 222, 143, 108, 222, 144, 2, 250, 222, 50, + 234, 235, 248, 192, 251, 213, 186, 227, 16, 67, 250, 156, 249, 4, 67, + 250, 156, 249, 5, 2, 127, 221, 202, 67, 250, 156, 249, 5, 2, 90, 221, + 202, 67, 40, 2, 127, 221, 202, 67, 40, 2, 90, 221, 202, 14, 42, 67, 40, + 115, 14, 45, 67, 40, 115, 14, 42, 254, 120, 115, 14, 45, 254, 120, 115, + 14, 42, 51, 254, 120, 115, 14, 45, 51, 254, 120, 115, 14, 42, 67, 221, + 114, 224, 236, 115, 14, 45, 67, 221, 114, 224, 236, 115, 14, 42, 245, + 154, 229, 229, 14, 45, 245, 154, 229, 229, 220, 53, 228, 92, 65, 247, + 130, 228, 92, 65, 254, 104, 244, 222, 250, 222, 65, 250, 199, 244, 222, + 250, 222, 65, 45, 76, 2, 34, 229, 43, 171, 127, 65, 171, 90, 65, 171, 42, + 45, 65, 171, 127, 51, 65, 171, 90, 51, 65, 171, 42, 45, 51, 65, 171, 127, + 76, 245, 97, 135, 171, 90, 76, 245, 97, 135, 171, 127, 51, 76, 245, 97, + 135, 171, 90, 51, 76, 245, 97, 135, 171, 90, 223, 223, 65, 43, 44, 252, + 47, 43, 44, 248, 142, 43, 44, 248, 14, 43, 44, 248, 141, 43, 44, 247, + 206, 43, 44, 248, 77, 43, 44, 248, 13, 43, 44, 248, 140, 43, 44, 247, + 174, 43, 44, 248, 45, 43, 44, 247, 237, 43, 44, 248, 108, 43, 44, 247, + 205, 43, 44, 248, 76, 43, 44, 248, 12, 43, 44, 248, 139, 43, 44, 247, + 158, 43, 44, 248, 29, 43, 44, 247, 221, 43, 44, 248, 92, 43, 44, 247, + 189, 43, 44, 248, 60, 43, 44, 247, 252, 43, 44, 248, 123, 43, 44, 247, + 173, 43, 44, 248, 44, 43, 44, 247, 236, 43, 44, 248, 107, 43, 44, 247, + 204, 43, 44, 248, 75, 43, 44, 248, 11, 43, 44, 248, 138, 43, 44, 247, + 150, 43, 44, 248, 21, 43, 44, 247, 213, 43, 44, 248, 84, 43, 44, 247, + 181, 43, 44, 248, 52, 43, 44, 247, 244, 43, 44, 248, 115, 43, 44, 247, + 165, 43, 44, 248, 36, 43, 44, 247, 228, 43, 44, 248, 99, 43, 44, 247, + 196, 43, 44, 248, 67, 43, 44, 248, 3, 43, 44, 248, 130, 43, 44, 247, 157, + 43, 44, 248, 28, 43, 44, 247, 220, 43, 44, 248, 91, 43, 44, 247, 188, 43, + 44, 248, 59, 43, 44, 247, 251, 43, 44, 248, 122, 43, 44, 247, 172, 43, + 44, 248, 43, 43, 44, 247, 235, 43, 44, 248, 106, 43, 44, 247, 203, 43, + 44, 248, 74, 43, 44, 248, 10, 43, 44, 248, 137, 43, 44, 247, 146, 43, 44, + 248, 17, 43, 44, 247, 209, 43, 44, 248, 80, 43, 44, 247, 177, 43, 44, + 248, 48, 43, 44, 247, 240, 43, 44, 248, 111, 43, 44, 247, 161, 43, 44, + 248, 32, 43, 44, 247, 224, 43, 44, 248, 95, 43, 44, 247, 192, 43, 44, + 248, 63, 43, 44, 247, 255, 43, 44, 248, 126, 43, 44, 247, 153, 43, 44, + 248, 24, 43, 44, 247, 216, 43, 44, 248, 87, 43, 44, 247, 184, 43, 44, + 248, 55, 43, 44, 247, 247, 43, 44, 248, 118, 43, 44, 247, 168, 43, 44, + 248, 39, 43, 44, 247, 231, 43, 44, 248, 102, 43, 44, 247, 199, 43, 44, + 248, 70, 43, 44, 248, 6, 43, 44, 248, 133, 43, 44, 247, 149, 43, 44, 248, + 20, 43, 44, 247, 212, 43, 44, 248, 83, 43, 44, 247, 180, 43, 44, 248, 51, + 43, 44, 247, 243, 43, 44, 248, 114, 43, 44, 247, 164, 43, 44, 248, 35, + 43, 44, 247, 227, 43, 44, 248, 98, 43, 44, 247, 195, 43, 44, 248, 66, 43, + 44, 248, 2, 43, 44, 248, 129, 43, 44, 247, 156, 43, 44, 248, 27, 43, 44, + 247, 219, 43, 44, 248, 90, 43, 44, 247, 187, 43, 44, 248, 58, 43, 44, + 247, 250, 43, 44, 248, 121, 43, 44, 247, 171, 43, 44, 248, 42, 43, 44, + 247, 234, 43, 44, 248, 105, 43, 44, 247, 202, 43, 44, 248, 73, 43, 44, + 248, 9, 43, 44, 248, 136, 43, 44, 247, 144, 43, 44, 248, 15, 43, 44, 247, + 207, 43, 44, 248, 78, 43, 44, 247, 175, 43, 44, 248, 46, 43, 44, 247, + 238, 43, 44, 248, 109, 43, 44, 247, 159, 43, 44, 248, 30, 43, 44, 247, + 222, 43, 44, 248, 93, 43, 44, 247, 190, 43, 44, 248, 61, 43, 44, 247, + 253, 43, 44, 248, 124, 43, 44, 247, 151, 43, 44, 248, 22, 43, 44, 247, + 214, 43, 44, 248, 85, 43, 44, 247, 182, 43, 44, 248, 53, 43, 44, 247, + 245, 43, 44, 248, 116, 43, 44, 247, 166, 43, 44, 248, 37, 43, 44, 247, + 229, 43, 44, 248, 100, 43, 44, 247, 197, 43, 44, 248, 68, 43, 44, 248, 4, + 43, 44, 248, 131, 43, 44, 247, 147, 43, 44, 248, 18, 43, 44, 247, 210, + 43, 44, 248, 81, 43, 44, 247, 178, 43, 44, 248, 49, 43, 44, 247, 241, 43, + 44, 248, 112, 43, 44, 247, 162, 43, 44, 248, 33, 43, 44, 247, 225, 43, + 44, 248, 96, 43, 44, 247, 193, 43, 44, 248, 64, 43, 44, 248, 0, 43, 44, + 248, 127, 43, 44, 247, 154, 43, 44, 248, 25, 43, 44, 247, 217, 43, 44, + 248, 88, 43, 44, 247, 185, 43, 44, 248, 56, 43, 44, 247, 248, 43, 44, + 248, 119, 43, 44, 247, 169, 43, 44, 248, 40, 43, 44, 247, 232, 43, 44, + 248, 103, 43, 44, 247, 200, 43, 44, 248, 71, 43, 44, 248, 7, 43, 44, 248, + 134, 43, 44, 247, 145, 43, 44, 248, 16, 43, 44, 247, 208, 43, 44, 248, + 79, 43, 44, 247, 176, 43, 44, 248, 47, 43, 44, 247, 239, 43, 44, 248, + 110, 43, 44, 247, 160, 43, 44, 248, 31, 43, 44, 247, 223, 43, 44, 248, + 94, 43, 44, 247, 191, 43, 44, 248, 62, 43, 44, 247, 254, 43, 44, 248, + 125, 43, 44, 247, 152, 43, 44, 248, 23, 43, 44, 247, 215, 43, 44, 248, + 86, 43, 44, 247, 183, 43, 44, 248, 54, 43, 44, 247, 246, 43, 44, 248, + 117, 43, 44, 247, 167, 43, 44, 248, 38, 43, 44, 247, 230, 43, 44, 248, + 101, 43, 44, 247, 198, 43, 44, 248, 69, 43, 44, 248, 5, 43, 44, 248, 132, + 43, 44, 247, 148, 43, 44, 248, 19, 43, 44, 247, 211, 43, 44, 248, 82, 43, + 44, 247, 179, 43, 44, 248, 50, 43, 44, 247, 242, 43, 44, 248, 113, 43, + 44, 247, 163, 43, 44, 248, 34, 43, 44, 247, 226, 43, 44, 248, 97, 43, 44, + 247, 194, 43, 44, 248, 65, 43, 44, 248, 1, 43, 44, 248, 128, 43, 44, 247, + 155, 43, 44, 248, 26, 43, 44, 247, 218, 43, 44, 248, 89, 43, 44, 247, + 186, 43, 44, 248, 57, 43, 44, 247, 249, 43, 44, 248, 120, 43, 44, 247, + 170, 43, 44, 248, 41, 43, 44, 247, 233, 43, 44, 248, 104, 43, 44, 247, + 201, 43, 44, 248, 72, 43, 44, 248, 8, 43, 44, 248, 135, 90, 220, 206, 76, + 2, 69, 92, 90, 220, 206, 76, 2, 51, 69, 92, 127, 51, 76, 2, 69, 92, 90, + 51, 76, 2, 69, 92, 42, 45, 51, 76, 2, 69, 92, 90, 220, 206, 76, 245, 97, + 135, 127, 51, 76, 245, 97, 135, 90, 51, 76, 245, 97, 135, 247, 130, 76, + 2, 186, 92, 220, 53, 76, 2, 186, 92, 220, 53, 221, 78, 65, 247, 130, 221, + 78, 65, 127, 51, 249, 147, 65, 90, 51, 249, 147, 65, 127, 221, 78, 249, + 147, 65, 90, 221, 78, 249, 147, 65, 90, 220, 206, 221, 78, 249, 147, 65, + 90, 76, 2, 247, 143, 223, 146, 220, 53, 76, 199, 135, 247, 130, 76, 199, + 135, 90, 76, 2, 222, 136, 2, 69, 92, 90, 76, 2, 222, 136, 2, 51, 69, 92, + 90, 220, 206, 76, 2, 222, 135, 90, 220, 206, 76, 2, 222, 136, 2, 69, 92, + 90, 220, 206, 76, 2, 222, 136, 2, 51, 69, 92, 127, 254, 22, 90, 254, 22, + 127, 51, 254, 22, 90, 51, 254, 22, 127, 76, 199, 84, 249, 4, 90, 76, 199, + 84, 249, 4, 127, 76, 245, 97, 252, 201, 199, 84, 249, 4, 90, 76, 245, 97, + 252, 201, 199, 84, 249, 4, 231, 187, 218, 217, 25, 224, 6, 247, 5, 65, + 231, 187, 247, 5, 25, 224, 6, 218, 217, 65, 231, 187, 218, 217, 76, 2, + 96, 231, 187, 247, 5, 76, 2, 96, 224, 6, 247, 5, 76, 2, 96, 224, 6, 218, + 217, 76, 2, 96, 231, 187, 218, 217, 76, 25, 231, 187, 247, 5, 65, 231, + 187, 247, 5, 76, 25, 224, 6, 247, 5, 65, 224, 6, 247, 5, 76, 25, 224, 6, + 218, 217, 65, 224, 6, 218, 217, 76, 25, 231, 187, 218, 217, 65, 227, 88, + 249, 11, 250, 95, 245, 247, 249, 10, 245, 247, 249, 11, 250, 95, 227, 88, + 249, 10, 224, 6, 247, 5, 76, 250, 95, 231, 187, 247, 5, 65, 231, 187, + 247, 5, 76, 250, 95, 224, 6, 247, 5, 65, 245, 247, 249, 11, 250, 95, 231, + 187, 247, 5, 65, 227, 88, 249, 11, 250, 95, 224, 6, 247, 5, 65, 231, 187, + 247, 5, 76, 250, 95, 231, 187, 218, 217, 65, 231, 187, 218, 217, 76, 250, + 95, 231, 187, 247, 5, 65, 218, 237, 76, 229, 28, 248, 208, 227, 109, 76, + 229, 28, 90, 222, 15, 250, 72, 220, 52, 76, 229, 28, 90, 222, 15, 250, + 72, 247, 129, 76, 229, 28, 247, 130, 222, 15, 250, 72, 235, 107, 76, 229, + 28, 247, 130, 222, 15, 250, 72, 227, 100, 227, 103, 254, 52, 250, 199, + 65, 235, 110, 254, 52, 254, 104, 65, 221, 120, 254, 52, 254, 104, 65, + 252, 29, 254, 52, 254, 104, 65, 221, 120, 254, 52, 250, 199, 76, 2, 233, + 154, 221, 120, 254, 52, 254, 104, 76, 2, 229, 43, 234, 237, 45, 225, 69, + 250, 199, 65, 234, 237, 42, 225, 69, 254, 104, 65, 254, 104, 250, 197, + 250, 222, 65, 250, 199, 250, 197, 250, 222, 65, 90, 76, 71, 224, 192, + 127, 65, 127, 76, 71, 224, 192, 90, 65, 224, 192, 90, 76, 71, 127, 65, + 90, 76, 2, 88, 56, 127, 76, 2, 88, 56, 90, 76, 221, 225, 218, 151, 42, + 45, 76, 221, 225, 3, 250, 221, 220, 53, 220, 206, 76, 245, 97, 3, 250, + 221, 42, 192, 108, 45, 192, 113, 243, 176, 42, 192, 113, 45, 192, 108, + 243, 176, 108, 192, 45, 113, 192, 42, 243, 176, 108, 192, 42, 113, 192, + 45, 243, 176, 42, 192, 108, 45, 192, 108, 243, 176, 108, 192, 45, 113, + 192, 45, 243, 176, 42, 192, 113, 45, 192, 113, 243, 176, 108, 192, 42, + 113, 192, 42, 243, 176, 127, 243, 177, 2, 192, 108, 199, 135, 90, 243, + 177, 2, 192, 108, 199, 135, 220, 53, 243, 177, 2, 192, 45, 199, 135, 247, + 130, 243, 177, 2, 192, 45, 199, 135, 127, 243, 177, 2, 192, 113, 199, + 135, 90, 243, 177, 2, 192, 113, 199, 135, 220, 53, 243, 177, 2, 192, 42, + 199, 135, 247, 130, 243, 177, 2, 192, 42, 199, 135, 127, 243, 177, 2, + 192, 108, 245, 97, 135, 90, 243, 177, 2, 192, 108, 245, 97, 135, 220, 53, + 243, 177, 2, 192, 45, 245, 97, 135, 247, 130, 243, 177, 2, 192, 45, 245, + 97, 135, 127, 243, 177, 2, 192, 113, 245, 97, 135, 90, 243, 177, 2, 192, + 113, 245, 97, 135, 220, 53, 243, 177, 2, 192, 42, 245, 97, 135, 247, 130, + 243, 177, 2, 192, 42, 245, 97, 135, 127, 243, 177, 2, 192, 108, 71, 127, + 243, 177, 2, 192, 247, 132, 220, 53, 243, 177, 2, 192, 42, 252, 106, 220, + 53, 243, 177, 2, 192, 227, 109, 90, 243, 177, 2, 192, 108, 71, 90, 243, + 177, 2, 192, 247, 132, 247, 130, 243, 177, 2, 192, 42, 252, 106, 247, + 130, 243, 177, 2, 192, 227, 109, 127, 243, 177, 2, 192, 108, 71, 90, 243, + 177, 2, 192, 220, 63, 127, 243, 177, 2, 192, 113, 71, 90, 243, 177, 2, + 192, 247, 132, 90, 243, 177, 2, 192, 108, 71, 127, 243, 177, 2, 192, 220, + 63, 90, 243, 177, 2, 192, 113, 71, 127, 243, 177, 2, 192, 247, 132, 127, + 243, 177, 2, 192, 108, 71, 171, 249, 146, 127, 243, 177, 2, 192, 113, + 252, 118, 171, 249, 146, 90, 243, 177, 2, 192, 108, 71, 171, 249, 146, + 90, 243, 177, 2, 192, 113, 252, 118, 171, 249, 146, 220, 53, 243, 177, 2, + 192, 42, 252, 106, 247, 130, 243, 177, 2, 192, 227, 109, 247, 130, 243, + 177, 2, 192, 42, 252, 106, 220, 53, 243, 177, 2, 192, 227, 109, 45, 51, + 76, 2, 227, 55, 243, 159, 246, 154, 5, 71, 90, 65, 221, 180, 230, 113, + 71, 90, 65, 127, 76, 71, 221, 180, 230, 112, 90, 76, 71, 221, 180, 230, + 112, 90, 76, 71, 254, 151, 114, 101, 235, 87, 71, 127, 65, 127, 76, 221, + 225, 235, 86, 244, 30, 71, 90, 65, 223, 93, 71, 90, 65, 127, 76, 221, + 225, 223, 92, 223, 58, 71, 127, 65, 42, 245, 177, 222, 135, 45, 245, 177, + 222, 135, 108, 245, 177, 222, 135, 113, 245, 177, 222, 135, 221, 78, 69, + 252, 201, 249, 67, 217, 158, 165, 223, 234, 217, 158, 165, 220, 198, 250, + 175, 42, 67, 250, 79, 115, 45, 67, 250, 79, 115, 42, 67, 229, 229, 45, + 67, 229, 229, 217, 158, 165, 42, 237, 237, 115, 217, 158, 165, 45, 237, + 237, 115, 217, 158, 165, 42, 252, 71, 115, 217, 158, 165, 45, 252, 71, + 115, 42, 40, 252, 18, 2, 220, 81, 45, 40, 252, 18, 2, 220, 81, 42, 40, + 252, 18, 2, 221, 203, 237, 224, 221, 120, 250, 123, 45, 40, 252, 18, 2, + 221, 203, 237, 224, 252, 29, 250, 123, 42, 40, 252, 18, 2, 221, 203, 237, + 224, 252, 29, 250, 123, 45, 40, 252, 18, 2, 221, 203, 237, 224, 221, 120, + 250, 123, 42, 254, 120, 252, 18, 2, 248, 145, 45, 254, 120, 252, 18, 2, + 248, 145, 42, 254, 52, 235, 87, 115, 45, 254, 52, 244, 30, 115, 51, 42, + 254, 52, 244, 30, 115, 51, 45, 254, 52, 235, 87, 115, 42, 84, 221, 114, + 224, 236, 115, 45, 84, 221, 114, 224, 236, 115, 247, 143, 245, 214, 69, + 217, 33, 235, 43, 234, 22, 254, 120, 230, 114, 235, 115, 45, 254, 120, + 219, 177, 2, 223, 227, 234, 22, 45, 254, 120, 2, 248, 145, 254, 120, 2, + 226, 235, 237, 190, 254, 248, 254, 119, 223, 245, 254, 120, 230, 114, + 235, 115, 223, 245, 254, 120, 230, 114, 220, 63, 215, 254, 119, 210, 254, + 119, 254, 120, 2, 220, 81, 210, 254, 120, 2, 220, 81, 230, 177, 254, 120, + 230, 114, 220, 63, 230, 177, 254, 120, 230, 114, 247, 132, 234, 22, 254, + 120, 2, 230, 119, 254, 32, 246, 187, 237, 224, 76, 229, 28, 108, 25, 227, + 109, 234, 22, 254, 120, 2, 230, 119, 254, 32, 246, 187, 237, 224, 76, + 229, 28, 108, 25, 235, 115, 234, 22, 254, 120, 2, 230, 119, 254, 32, 246, + 187, 237, 224, 76, 229, 28, 113, 25, 227, 109, 234, 22, 254, 120, 2, 230, + 119, 254, 32, 246, 187, 237, 224, 76, 229, 28, 113, 25, 235, 115, 234, + 22, 254, 120, 2, 230, 119, 254, 32, 246, 187, 237, 224, 76, 229, 28, 45, + 25, 220, 63, 234, 22, 254, 120, 2, 230, 119, 254, 32, 246, 187, 237, 224, + 76, 229, 28, 42, 25, 220, 63, 234, 22, 254, 120, 2, 230, 119, 254, 32, + 246, 187, 237, 224, 76, 229, 28, 45, 25, 247, 132, 234, 22, 254, 120, 2, + 230, 119, 254, 32, 246, 187, 237, 224, 76, 229, 28, 42, 25, 247, 132, + 210, 246, 199, 225, 45, 246, 199, 225, 46, 2, 230, 77, 246, 199, 225, 46, + 2, 3, 250, 222, 50, 246, 199, 225, 46, 2, 45, 76, 50, 246, 199, 225, 46, + 2, 42, 76, 50, 250, 222, 2, 186, 135, 34, 69, 135, 34, 229, 233, 34, 227, + 160, 224, 17, 34, 229, 160, 250, 222, 248, 192, 251, 213, 186, 252, 201, + 25, 221, 120, 144, 248, 192, 251, 213, 69, 135, 250, 222, 2, 223, 60, + 218, 151, 34, 254, 103, 248, 188, 55, 108, 76, 221, 225, 250, 221, 34, + 67, 251, 241, 34, 251, 241, 34, 235, 86, 34, 244, 29, 250, 222, 2, 3, + 250, 222, 199, 222, 23, 227, 109, 250, 222, 2, 124, 186, 223, 108, 199, + 222, 23, 227, 109, 204, 227, 88, 249, 11, 224, 55, 204, 245, 247, 249, + 11, 224, 55, 204, 253, 251, 204, 3, 250, 221, 204, 223, 227, 124, 237, + 56, 223, 225, 221, 91, 2, 61, 50, 221, 91, 2, 220, 81, 226, 235, 237, + 224, 221, 90, 221, 91, 2, 225, 52, 253, 245, 252, 28, 45, 221, 91, 71, + 42, 221, 90, 42, 221, 91, 252, 106, 69, 135, 69, 252, 201, 252, 106, 45, + 221, 90, 252, 23, 2, 42, 144, 252, 53, 252, 23, 2, 45, 144, 252, 53, 84, + 252, 22, 27, 2, 42, 144, 252, 53, 27, 2, 45, 144, 252, 53, 67, 242, 183, + 84, 242, 183, 42, 218, 198, 245, 214, 45, 218, 198, 245, 214, 42, 51, + 218, 198, 245, 214, 45, 51, 218, 198, 245, 214, 237, 218, 237, 207, 221, + 201, 104, 237, 207, 237, 208, 232, 138, 2, 69, 135, 247, 137, 233, 87, + 40, 2, 250, 135, 230, 81, 237, 216, 254, 13, 224, 166, 228, 229, 246, + 154, 5, 25, 224, 57, 229, 233, 246, 154, 5, 25, 224, 57, 229, 234, 2, + 221, 180, 50, 242, 59, 199, 25, 224, 57, 229, 233, 244, 75, 223, 155, + 222, 12, 247, 131, 221, 91, 2, 42, 144, 252, 53, 247, 131, 221, 91, 2, + 45, 144, 252, 53, 84, 249, 5, 2, 113, 65, 84, 234, 234, 67, 250, 222, 2, + 113, 65, 84, 250, 222, 2, 113, 65, 246, 141, 67, 223, 227, 246, 141, 84, + 223, 227, 246, 141, 67, 249, 4, 246, 141, 84, 249, 4, 246, 141, 67, 250, + 221, 246, 141, 84, 250, 221, 227, 15, 227, 160, 224, 18, 230, 112, 224, + 18, 2, 230, 77, 227, 160, 224, 18, 2, 186, 92, 252, 76, 224, 17, 252, 76, + 227, 160, 224, 17, 51, 229, 43, 221, 78, 229, 43, 235, 112, 250, 73, 254, + 120, 115, 227, 106, 250, 73, 254, 120, 115, 221, 171, 233, 152, 233, 33, + 34, 61, 230, 112, 233, 33, 34, 88, 230, 112, 233, 33, 34, 27, 230, 112, + 233, 33, 220, 75, 230, 113, 2, 248, 145, 233, 33, 220, 75, 230, 113, 2, + 229, 43, 233, 33, 40, 237, 175, 230, 112, 233, 33, 40, 220, 75, 230, 112, + 124, 235, 7, 25, 230, 112, 124, 235, 7, 156, 230, 112, 233, 33, 27, 230, + 112, 233, 131, 124, 223, 74, 223, 72, 2, 237, 186, 228, 92, 237, 187, + 230, 112, 245, 181, 229, 225, 237, 186, 237, 187, 2, 51, 92, 237, 187, + 253, 217, 2, 224, 55, 250, 218, 245, 87, 254, 104, 237, 184, 235, 44, + 237, 185, 2, 227, 207, 229, 212, 254, 29, 229, 24, 235, 44, 237, 185, 2, + 225, 69, 229, 212, 254, 29, 229, 24, 235, 44, 237, 185, 212, 237, 219, + 222, 23, 229, 24, 237, 187, 254, 29, 112, 229, 32, 230, 112, 228, 86, + 237, 187, 230, 112, 237, 187, 2, 127, 76, 2, 96, 237, 187, 2, 27, 55, + 237, 187, 2, 237, 174, 237, 187, 2, 220, 74, 237, 187, 2, 230, 77, 237, + 187, 2, 220, 81, 237, 57, 235, 146, 42, 221, 91, 230, 112, 217, 158, 165, + 226, 109, 250, 159, 217, 158, 165, 226, 109, 229, 69, 217, 158, 165, 226, + 109, 228, 226, 88, 5, 2, 3, 250, 222, 50, 88, 5, 2, 250, 217, 255, 1, 50, + 88, 5, 2, 221, 180, 50, 88, 5, 2, 61, 56, 88, 5, 2, 221, 180, 56, 88, 5, + 2, 223, 94, 103, 88, 5, 2, 84, 221, 90, 233, 155, 5, 2, 250, 169, 50, + 233, 155, 5, 2, 61, 56, 233, 155, 5, 2, 245, 247, 248, 143, 233, 155, 5, + 2, 227, 88, 248, 143, 88, 5, 237, 224, 42, 144, 250, 221, 88, 5, 237, + 224, 45, 144, 250, 221, 219, 164, 156, 250, 101, 228, 229, 233, 84, 5, 2, + 61, 50, 233, 84, 5, 2, 220, 81, 225, 66, 228, 230, 2, 252, 29, 250, 196, + 224, 41, 228, 229, 233, 84, 5, 237, 224, 42, 144, 250, 221, 233, 84, 5, + 237, 224, 45, 144, 250, 221, 34, 233, 84, 5, 2, 250, 217, 255, 0, 233, + 84, 5, 237, 224, 51, 250, 221, 34, 248, 188, 55, 88, 5, 237, 224, 221, + 90, 233, 155, 5, 237, 224, 221, 90, 233, 84, 5, 237, 224, 221, 90, 237, + 181, 228, 229, 227, 101, 237, 181, 228, 229, 217, 158, 165, 227, 191, + 250, 159, 254, 139, 156, 250, 128, 237, 175, 2, 248, 145, 220, 75, 2, + 233, 155, 55, 220, 75, 2, 230, 77, 237, 175, 2, 230, 77, 237, 175, 2, + 235, 7, 254, 126, 220, 75, 2, 235, 7, 230, 105, 220, 75, 71, 237, 174, + 237, 175, 71, 220, 74, 220, 75, 71, 252, 201, 71, 237, 174, 237, 175, 71, + 252, 201, 71, 220, 74, 220, 75, 252, 106, 25, 237, 56, 2, 220, 74, 237, + 175, 252, 106, 25, 237, 56, 2, 237, 174, 250, 197, 220, 75, 2, 225, 51, + 250, 197, 237, 175, 2, 225, 51, 51, 40, 237, 174, 51, 40, 220, 74, 250, + 197, 220, 75, 2, 225, 52, 25, 224, 41, 228, 229, 235, 7, 25, 2, 61, 50, + 235, 7, 156, 2, 61, 50, 51, 235, 7, 254, 126, 51, 235, 7, 230, 105, 124, + 237, 176, 235, 7, 254, 126, 124, 237, 176, 235, 7, 230, 105, 224, 48, + 235, 146, 230, 105, 224, 48, 235, 146, 254, 126, 235, 7, 156, 230, 75, + 235, 7, 254, 126, 235, 7, 25, 2, 233, 193, 223, 146, 235, 7, 156, 2, 233, + 193, 223, 146, 235, 7, 25, 2, 186, 249, 146, 235, 7, 156, 2, 186, 249, + 146, 235, 7, 25, 2, 51, 230, 77, 235, 7, 25, 2, 220, 81, 235, 7, 25, 2, + 51, 220, 81, 3, 219, 161, 2, 220, 81, 235, 7, 156, 2, 51, 230, 77, 235, + 7, 156, 2, 51, 220, 81, 217, 158, 165, 248, 154, 254, 99, 217, 158, 165, + 227, 234, 254, 99, 246, 154, 5, 2, 61, 56, 242, 59, 2, 61, 50, 221, 78, + 186, 252, 201, 2, 51, 69, 92, 221, 78, 186, 252, 201, 2, 221, 78, 69, 92, + 221, 180, 230, 113, 2, 61, 50, 221, 180, 230, 113, 2, 227, 88, 248, 143, + 224, 116, 233, 155, 224, 115, 250, 153, 2, 61, 50, 246, 154, 2, 253, 251, + 254, 151, 114, 199, 2, 250, 217, 255, 0, 254, 72, 114, 156, 114, 101, + 246, 154, 5, 71, 88, 55, 88, 5, 71, 246, 154, 55, 246, 154, 5, 71, 221, + 180, 230, 112, 51, 250, 176, 246, 155, 124, 250, 148, 246, 154, 224, 126, + 148, 250, 148, 246, 154, 224, 126, 246, 154, 5, 2, 124, 188, 71, 25, 124, + 188, 56, 246, 150, 2, 245, 116, 188, 50, 235, 87, 2, 250, 222, 237, 190, + 244, 30, 2, 250, 222, 237, 190, 235, 87, 2, 228, 82, 164, 50, 244, 30, 2, + 228, 82, 164, 50, 235, 87, 156, 224, 57, 114, 101, 244, 30, 156, 224, 57, + 114, 101, 235, 87, 156, 224, 57, 114, 199, 2, 61, 237, 190, 244, 30, 156, + 224, 57, 114, 199, 2, 61, 237, 190, 235, 87, 156, 224, 57, 114, 199, 2, + 61, 50, 244, 30, 156, 224, 57, 114, 199, 2, 61, 50, 235, 87, 156, 224, + 57, 114, 199, 2, 61, 71, 227, 109, 244, 30, 156, 224, 57, 114, 199, 2, + 61, 71, 235, 115, 235, 87, 156, 254, 73, 244, 30, 156, 254, 73, 235, 87, + 25, 224, 107, 212, 114, 101, 244, 30, 25, 224, 107, 212, 114, 101, 235, + 87, 25, 212, 254, 73, 244, 30, 25, 212, 254, 73, 235, 87, 71, 247, 136, + 114, 71, 244, 29, 244, 30, 71, 247, 136, 114, 71, 235, 86, 235, 87, 71, + 224, 116, 156, 246, 155, 244, 30, 71, 224, 116, 156, 246, 155, 235, 87, + 71, 224, 116, 71, 244, 29, 244, 30, 71, 224, 116, 71, 235, 86, 235, 87, + 71, 244, 30, 71, 247, 136, 246, 155, 244, 30, 71, 235, 87, 71, 247, 136, + 246, 155, 235, 87, 71, 224, 57, 114, 71, 244, 30, 71, 224, 57, 246, 155, + 244, 30, 71, 224, 57, 114, 71, 235, 87, 71, 224, 57, 246, 155, 224, 57, + 114, 199, 156, 235, 86, 224, 57, 114, 199, 156, 244, 29, 224, 57, 114, + 199, 156, 235, 87, 2, 61, 237, 190, 224, 57, 114, 199, 156, 244, 30, 2, + 61, 237, 190, 247, 136, 114, 199, 156, 235, 86, 247, 136, 114, 199, 156, + 244, 29, 247, 136, 224, 57, 114, 199, 156, 235, 86, 247, 136, 224, 57, + 114, 199, 156, 244, 29, 224, 116, 156, 235, 86, 224, 116, 156, 244, 29, + 224, 116, 71, 235, 87, 71, 246, 154, 55, 224, 116, 71, 244, 30, 71, 246, + 154, 55, 51, 232, 127, 235, 86, 51, 232, 127, 244, 29, 51, 232, 127, 235, + 87, 2, 220, 81, 244, 30, 230, 75, 235, 86, 244, 30, 252, 106, 235, 86, + 235, 87, 250, 197, 251, 213, 250, 74, 244, 30, 250, 197, 251, 213, 250, + 74, 235, 87, 250, 197, 251, 213, 250, 75, 71, 224, 57, 246, 155, 244, 30, + 250, 197, 251, 213, 250, 75, 71, 224, 57, 246, 155, 224, 42, 222, 27, + 235, 145, 222, 27, 224, 42, 222, 28, 156, 114, 101, 235, 145, 222, 28, + 156, 114, 101, 246, 154, 5, 2, 251, 236, 50, 228, 245, 71, 224, 107, 246, + 154, 55, 223, 85, 71, 224, 107, 246, 154, 55, 228, 245, 71, 224, 107, + 212, 114, 101, 223, 85, 71, 224, 107, 212, 114, 101, 228, 245, 71, 246, + 154, 55, 223, 85, 71, 246, 154, 55, 228, 245, 71, 212, 114, 101, 223, 85, + 71, 212, 114, 101, 228, 245, 71, 254, 151, 114, 101, 223, 85, 71, 254, + 151, 114, 101, 228, 245, 71, 212, 254, 151, 114, 101, 223, 85, 71, 212, + 254, 151, 114, 101, 51, 228, 244, 51, 223, 84, 223, 93, 2, 248, 145, 223, + 58, 2, 248, 145, 223, 93, 2, 88, 5, 56, 223, 58, 2, 88, 5, 56, 223, 93, + 2, 233, 84, 5, 56, 223, 58, 2, 233, 84, 5, 56, 223, 93, 117, 156, 114, + 199, 2, 61, 50, 223, 58, 117, 156, 114, 199, 2, 61, 50, 223, 93, 117, 71, + 246, 154, 55, 223, 58, 117, 71, 246, 154, 55, 223, 93, 117, 71, 221, 180, + 230, 112, 223, 58, 117, 71, 221, 180, 230, 112, 223, 93, 117, 71, 254, + 151, 114, 101, 223, 58, 117, 71, 254, 151, 114, 101, 223, 93, 117, 71, + 212, 114, 101, 223, 58, 117, 71, 212, 114, 101, 40, 42, 230, 119, 86, + 230, 112, 40, 45, 230, 119, 86, 230, 112, 250, 197, 223, 92, 250, 197, + 223, 57, 250, 197, 223, 93, 156, 114, 101, 250, 197, 223, 58, 156, 114, + 101, 223, 93, 71, 223, 57, 223, 58, 71, 223, 92, 223, 93, 71, 223, 92, + 223, 58, 71, 223, 57, 223, 58, 252, 106, 223, 92, 223, 58, 252, 106, 25, + 237, 56, 251, 213, 249, 147, 2, 223, 92, 246, 213, 117, 230, 114, 247, + 129, 229, 63, 2, 222, 81, 221, 119, 221, 102, 237, 174, 245, 125, 231, + 196, 224, 192, 42, 222, 143, 224, 192, 113, 222, 143, 224, 192, 108, 222, + 143, 229, 161, 2, 198, 69, 252, 201, 221, 78, 45, 220, 236, 51, 69, 252, + 201, 42, 220, 236, 69, 252, 201, 51, 42, 220, 236, 51, 69, 252, 201, 51, + 42, 220, 236, 171, 249, 147, 245, 97, 42, 233, 255, 117, 51, 219, 152, + 224, 192, 113, 222, 144, 2, 230, 77, 224, 192, 108, 222, 144, 2, 220, 81, + 224, 192, 108, 222, 144, 71, 224, 192, 113, 222, 143, 51, 113, 222, 143, + 51, 108, 222, 143, 51, 214, 212, 55, 210, 51, 214, 212, 55, 248, 160, + 212, 248, 194, 2, 210, 232, 137, 224, 55, 69, 235, 44, 2, 250, 222, 50, + 69, 235, 44, 2, 250, 222, 56, 113, 222, 144, 2, 250, 222, 56, 229, 234, + 2, 186, 92, 229, 234, 2, 221, 180, 230, 112, 221, 78, 69, 252, 201, 252, + 73, 227, 192, 221, 78, 69, 252, 201, 2, 186, 92, 221, 78, 250, 176, 230, + 112, 221, 78, 232, 127, 235, 86, 221, 78, 232, 127, 244, 29, 247, 136, + 224, 57, 235, 87, 156, 114, 101, 247, 136, 224, 57, 244, 30, 156, 114, + 101, 221, 78, 224, 18, 252, 73, 227, 192, 235, 146, 221, 78, 69, 252, + 201, 230, 112, 51, 224, 18, 230, 112, 67, 69, 135, 233, 33, 67, 69, 135, + 231, 187, 247, 5, 67, 65, 231, 187, 218, 217, 67, 65, 224, 6, 247, 5, 67, + 65, 224, 6, 218, 217, 67, 65, 42, 45, 67, 65, 127, 84, 65, 220, 53, 84, + 65, 247, 130, 84, 65, 231, 187, 247, 5, 84, 65, 231, 187, 218, 217, 84, + 65, 224, 6, 247, 5, 84, 65, 224, 6, 218, 217, 84, 65, 42, 45, 84, 65, + 108, 113, 84, 65, 90, 76, 2, 221, 170, 247, 129, 90, 76, 2, 221, 170, + 220, 52, 127, 76, 2, 221, 170, 247, 129, 127, 76, 2, 221, 170, 220, 52, + 40, 2, 221, 120, 144, 252, 53, 40, 2, 252, 29, 144, 252, 53, 40, 2, 220, + 60, 45, 249, 11, 144, 252, 53, 40, 2, 234, 237, 42, 249, 11, 144, 252, + 53, 249, 5, 2, 42, 144, 252, 53, 249, 5, 2, 45, 144, 252, 53, 249, 5, 2, + 221, 120, 144, 252, 53, 249, 5, 2, 252, 29, 144, 252, 53, 247, 143, 223, + 227, 84, 235, 146, 223, 227, 67, 235, 146, 223, 227, 84, 219, 100, 3, + 223, 227, 67, 219, 100, 3, 223, 227, 84, 229, 175, 67, 229, 175, 67, 243, + 124, 84, 243, 124, 186, 84, 243, 124, 84, 235, 146, 250, 221, 84, 234, + 18, 249, 4, 67, 234, 18, 249, 4, 84, 234, 18, 234, 234, 67, 234, 18, 234, + 234, 84, 3, 249, 4, 84, 3, 234, 234, 67, 3, 234, 234, 84, 186, 246, 209, + 67, 186, 246, 209, 84, 69, 246, 209, 67, 69, 246, 209, 42, 76, 2, 3, 250, + 221, 148, 127, 254, 19, 42, 76, 2, 34, 229, 43, 171, 127, 223, 223, 65, + 127, 220, 206, 76, 2, 69, 92, 127, 220, 206, 76, 2, 51, 69, 92, 127, 220, + 206, 76, 245, 97, 135, 127, 220, 206, 221, 78, 249, 147, 65, 127, 76, 2, + 247, 143, 223, 146, 127, 76, 2, 222, 136, 2, 69, 92, 127, 76, 2, 222, + 136, 2, 51, 69, 92, 127, 220, 206, 76, 2, 222, 135, 127, 220, 206, 76, 2, + 222, 136, 2, 69, 92, 127, 220, 206, 76, 2, 222, 136, 2, 51, 69, 92, 127, + 76, 221, 225, 218, 151, 218, 237, 76, 229, 28, 248, 208, 235, 115, 246, + 154, 5, 71, 127, 65, 227, 160, 221, 180, 230, 113, 71, 127, 65, 127, 76, + 71, 227, 160, 254, 151, 114, 101, 90, 76, 221, 225, 244, 29, 90, 76, 221, + 225, 223, 57, 127, 228, 92, 65, 90, 228, 92, 65, 227, 160, 221, 180, 230, + 113, 71, 90, 65, 90, 76, 71, 227, 160, 254, 151, 114, 101, 221, 180, 230, + 113, 71, 127, 65, 127, 76, 71, 254, 151, 114, 101, 127, 76, 71, 227, 160, + 221, 180, 230, 112, 90, 76, 71, 227, 160, 221, 180, 230, 112, 67, 234, + 18, 223, 156, 84, 3, 223, 156, 67, 3, 223, 156, 84, 227, 106, 229, 175, + 67, 227, 106, 229, 175, 106, 235, 146, 250, 221, 106, 230, 78, 2, 230, + 78, 237, 190, 106, 250, 222, 2, 250, 222, 237, 190, 106, 250, 221, 106, + 34, 226, 149, 125, 6, 1, 253, 205, 125, 6, 1, 251, 244, 125, 6, 1, 219, + 163, 125, 6, 1, 244, 76, 125, 6, 1, 248, 162, 125, 6, 1, 218, 1, 125, 6, + 1, 217, 66, 125, 6, 1, 247, 71, 125, 6, 1, 217, 89, 125, 6, 1, 237, 130, + 125, 6, 1, 66, 237, 130, 125, 6, 1, 72, 125, 6, 1, 248, 180, 125, 6, 1, + 236, 238, 125, 6, 1, 235, 19, 125, 6, 1, 233, 37, 125, 6, 1, 232, 208, + 125, 6, 1, 230, 129, 125, 6, 1, 229, 26, 125, 6, 1, 227, 87, 125, 6, 1, + 224, 47, 125, 6, 1, 220, 226, 125, 6, 1, 220, 98, 125, 6, 1, 245, 99, + 125, 6, 1, 243, 130, 125, 6, 1, 230, 87, 125, 6, 1, 229, 198, 125, 6, 1, + 224, 173, 125, 6, 1, 221, 39, 125, 6, 1, 251, 3, 125, 6, 1, 225, 25, 125, + 6, 1, 218, 7, 125, 6, 1, 218, 9, 125, 6, 1, 218, 34, 125, 6, 1, 223, 243, + 155, 125, 6, 1, 217, 200, 125, 6, 1, 3, 217, 178, 125, 6, 1, 3, 217, 179, + 2, 222, 135, 125, 6, 1, 217, 231, 125, 6, 1, 237, 161, 3, 217, 178, 125, + 6, 1, 252, 76, 217, 178, 125, 6, 1, 237, 161, 252, 76, 217, 178, 125, 6, + 1, 245, 171, 125, 6, 1, 237, 128, 125, 6, 1, 224, 172, 125, 6, 1, 221, + 70, 60, 125, 6, 1, 235, 137, 233, 37, 125, 3, 1, 253, 205, 125, 3, 1, + 251, 244, 125, 3, 1, 219, 163, 125, 3, 1, 244, 76, 125, 3, 1, 248, 162, + 125, 3, 1, 218, 1, 125, 3, 1, 217, 66, 125, 3, 1, 247, 71, 125, 3, 1, + 217, 89, 125, 3, 1, 237, 130, 125, 3, 1, 66, 237, 130, 125, 3, 1, 72, + 125, 3, 1, 248, 180, 125, 3, 1, 236, 238, 125, 3, 1, 235, 19, 125, 3, 1, + 233, 37, 125, 3, 1, 232, 208, 125, 3, 1, 230, 129, 125, 3, 1, 229, 26, + 125, 3, 1, 227, 87, 125, 3, 1, 224, 47, 125, 3, 1, 220, 226, 125, 3, 1, + 220, 98, 125, 3, 1, 245, 99, 125, 3, 1, 243, 130, 125, 3, 1, 230, 87, + 125, 3, 1, 229, 198, 125, 3, 1, 224, 173, 125, 3, 1, 221, 39, 125, 3, 1, + 251, 3, 125, 3, 1, 225, 25, 125, 3, 1, 218, 7, 125, 3, 1, 218, 9, 125, 3, + 1, 218, 34, 125, 3, 1, 223, 243, 155, 125, 3, 1, 217, 200, 125, 3, 1, 3, + 217, 178, 125, 3, 1, 3, 217, 179, 2, 222, 135, 125, 3, 1, 217, 231, 125, + 3, 1, 237, 161, 3, 217, 178, 125, 3, 1, 252, 76, 217, 178, 125, 3, 1, + 237, 161, 252, 76, 217, 178, 125, 3, 1, 245, 171, 125, 3, 1, 237, 128, + 125, 3, 1, 224, 172, 125, 3, 1, 221, 70, 60, 125, 3, 1, 235, 137, 233, + 37, 7, 6, 1, 235, 202, 2, 51, 135, 7, 3, 1, 235, 202, 2, 51, 135, 7, 6, + 1, 235, 202, 2, 233, 193, 221, 179, 7, 6, 1, 230, 60, 2, 92, 7, 6, 1, + 228, 39, 2, 222, 135, 7, 3, 1, 112, 2, 92, 7, 3, 1, 222, 202, 2, 249, 11, + 92, 7, 6, 1, 243, 226, 2, 249, 48, 7, 3, 1, 243, 226, 2, 249, 48, 7, 6, + 1, 237, 18, 2, 249, 48, 7, 3, 1, 237, 18, 2, 249, 48, 7, 6, 1, 217, 158, + 2, 249, 48, 7, 3, 1, 217, 158, 2, 249, 48, 7, 6, 1, 254, 146, 7, 6, 1, + 234, 187, 2, 96, 7, 6, 1, 215, 60, 7, 6, 1, 215, 254, 146, 7, 3, 1, 220, + 11, 2, 45, 96, 7, 6, 1, 219, 41, 2, 96, 7, 3, 1, 219, 41, 2, 96, 7, 3, 1, + 220, 11, 2, 250, 80, 7, 6, 1, 144, 243, 225, 7, 3, 1, 144, 243, 225, 7, + 3, 1, 222, 133, 229, 129, 7, 3, 1, 178, 2, 231, 183, 7, 3, 1, 215, 228, + 39, 2, 222, 135, 7, 3, 1, 142, 2, 109, 227, 94, 237, 190, 7, 1, 3, 6, + 215, 73, 7, 223, 94, 3, 1, 237, 126, 58, 1, 6, 216, 216, 7, 6, 1, 226, + 235, 2, 223, 33, 222, 135, 7, 6, 1, 217, 158, 2, 223, 33, 222, 135, 75, + 6, 1, 254, 163, 75, 3, 1, 254, 163, 75, 6, 1, 219, 92, 75, 3, 1, 219, 92, + 75, 6, 1, 244, 231, 75, 3, 1, 244, 231, 75, 6, 1, 249, 179, 75, 3, 1, + 249, 179, 75, 6, 1, 246, 236, 75, 3, 1, 246, 236, 75, 6, 1, 224, 11, 75, + 3, 1, 224, 11, 75, 6, 1, 217, 99, 75, 3, 1, 217, 99, 75, 6, 1, 243, 171, + 75, 3, 1, 243, 171, 75, 6, 1, 222, 4, 75, 3, 1, 222, 4, 75, 6, 1, 242, + 70, 75, 3, 1, 242, 70, 75, 6, 1, 236, 226, 75, 3, 1, 236, 226, 75, 6, 1, + 235, 135, 75, 3, 1, 235, 135, 75, 6, 1, 233, 196, 75, 3, 1, 233, 196, 75, + 6, 1, 232, 62, 75, 3, 1, 232, 62, 75, 6, 1, 236, 11, 75, 3, 1, 236, 11, + 75, 6, 1, 74, 75, 3, 1, 74, 75, 6, 1, 229, 108, 75, 3, 1, 229, 108, 75, + 6, 1, 227, 75, 75, 3, 1, 227, 75, 75, 6, 1, 224, 118, 75, 3, 1, 224, 118, + 75, 6, 1, 222, 105, 75, 3, 1, 222, 105, 75, 6, 1, 220, 123, 75, 3, 1, + 220, 123, 75, 6, 1, 245, 203, 75, 3, 1, 245, 203, 75, 6, 1, 236, 130, 75, + 3, 1, 236, 130, 75, 6, 1, 228, 212, 75, 3, 1, 228, 212, 75, 6, 1, 230, + 123, 75, 3, 1, 230, 123, 75, 6, 1, 249, 9, 254, 168, 75, 3, 1, 249, 9, + 254, 168, 75, 6, 1, 48, 75, 254, 191, 75, 3, 1, 48, 75, 254, 191, 75, 6, + 1, 250, 93, 246, 236, 75, 3, 1, 250, 93, 246, 236, 75, 6, 1, 249, 9, 236, + 226, 75, 3, 1, 249, 9, 236, 226, 75, 6, 1, 249, 9, 232, 62, 75, 3, 1, + 249, 9, 232, 62, 75, 6, 1, 250, 93, 232, 62, 75, 3, 1, 250, 93, 232, 62, + 75, 6, 1, 48, 75, 230, 123, 75, 3, 1, 48, 75, 230, 123, 75, 6, 1, 226, + 142, 75, 3, 1, 226, 142, 75, 6, 1, 250, 98, 224, 238, 75, 3, 1, 250, 98, + 224, 238, 75, 6, 1, 48, 75, 224, 238, 75, 3, 1, 48, 75, 224, 238, 75, 6, + 1, 48, 75, 246, 133, 75, 3, 1, 48, 75, 246, 133, 75, 6, 1, 254, 178, 236, + 135, 75, 3, 1, 254, 178, 236, 135, 75, 6, 1, 249, 9, 242, 242, 75, 3, 1, + 249, 9, 242, 242, 75, 6, 1, 48, 75, 242, 242, 75, 3, 1, 48, 75, 242, 242, + 75, 6, 1, 48, 75, 155, 75, 3, 1, 48, 75, 155, 75, 6, 1, 235, 201, 155, + 75, 3, 1, 235, 201, 155, 75, 6, 1, 48, 75, 243, 145, 75, 3, 1, 48, 75, + 243, 145, 75, 6, 1, 48, 75, 243, 173, 75, 3, 1, 48, 75, 243, 173, 75, 6, + 1, 48, 75, 244, 226, 75, 3, 1, 48, 75, 244, 226, 75, 6, 1, 48, 75, 248, + 183, 75, 3, 1, 48, 75, 248, 183, 75, 6, 1, 48, 75, 224, 211, 75, 3, 1, + 48, 75, 224, 211, 75, 6, 1, 48, 231, 115, 224, 211, 75, 3, 1, 48, 231, + 115, 224, 211, 75, 6, 1, 48, 231, 115, 232, 92, 75, 3, 1, 48, 231, 115, + 232, 92, 75, 6, 1, 48, 231, 115, 231, 67, 75, 3, 1, 48, 231, 115, 231, + 67, 75, 6, 1, 48, 231, 115, 218, 238, 75, 3, 1, 48, 231, 115, 218, 238, + 75, 16, 236, 243, 75, 16, 233, 197, 227, 75, 75, 16, 229, 109, 227, 75, + 75, 16, 223, 152, 75, 16, 222, 106, 227, 75, 75, 16, 236, 131, 227, 75, + 75, 16, 224, 212, 224, 118, 75, 6, 1, 250, 93, 224, 238, 75, 3, 1, 250, + 93, 224, 238, 75, 6, 1, 250, 93, 244, 226, 75, 3, 1, 250, 93, 244, 226, + 75, 36, 232, 63, 50, 75, 36, 223, 238, 254, 2, 75, 36, 223, 238, 235, 92, + 75, 48, 231, 115, 245, 90, 223, 136, 75, 48, 231, 115, 248, 210, 228, 82, + 78, 75, 48, 231, 115, 237, 210, 228, 82, 78, 75, 48, 231, 115, 219, 154, + 248, 191, 75, 245, 108, 131, 243, 194, 75, 245, 90, 223, 136, 75, 233, + 113, 248, 191, 95, 3, 1, 254, 131, 95, 3, 1, 252, 209, 95, 3, 1, 244, + 230, 95, 3, 1, 248, 153, 95, 3, 1, 246, 197, 95, 3, 1, 219, 85, 95, 3, 1, + 217, 87, 95, 3, 1, 222, 119, 95, 3, 1, 237, 223, 95, 3, 1, 236, 233, 95, + 3, 1, 235, 143, 95, 3, 1, 234, 86, 95, 3, 1, 232, 211, 95, 3, 1, 230, + 138, 95, 3, 1, 229, 243, 95, 3, 1, 217, 76, 95, 3, 1, 227, 249, 95, 3, 1, + 226, 140, 95, 3, 1, 222, 112, 95, 3, 1, 220, 87, 95, 3, 1, 229, 134, 95, + 3, 1, 236, 138, 95, 3, 1, 244, 119, 95, 3, 1, 228, 140, 95, 3, 1, 224, + 209, 95, 3, 1, 251, 22, 95, 3, 1, 251, 154, 95, 3, 1, 237, 91, 95, 3, 1, + 250, 224, 95, 3, 1, 251, 56, 95, 3, 1, 218, 136, 95, 3, 1, 237, 101, 95, + 3, 1, 243, 208, 95, 3, 1, 243, 162, 95, 3, 1, 243, 108, 95, 3, 1, 218, + 227, 95, 3, 1, 243, 182, 95, 3, 1, 243, 2, 221, 197, 1, 184, 221, 197, 1, + 218, 72, 221, 197, 1, 218, 71, 221, 197, 1, 218, 63, 221, 197, 1, 218, + 61, 221, 197, 1, 252, 108, 255, 2, 218, 57, 221, 197, 1, 218, 57, 221, + 197, 1, 218, 69, 221, 197, 1, 218, 66, 221, 197, 1, 218, 68, 221, 197, 1, + 218, 67, 221, 197, 1, 217, 254, 221, 197, 1, 218, 64, 221, 197, 1, 218, + 55, 221, 197, 1, 220, 255, 218, 55, 221, 197, 1, 218, 52, 221, 197, 1, + 218, 59, 221, 197, 1, 252, 108, 255, 2, 218, 59, 221, 197, 1, 220, 255, + 218, 59, 221, 197, 1, 218, 58, 221, 197, 1, 218, 76, 221, 197, 1, 218, + 53, 221, 197, 1, 220, 255, 218, 53, 221, 197, 1, 218, 43, 221, 197, 1, + 220, 255, 218, 43, 221, 197, 1, 217, 250, 221, 197, 1, 218, 27, 221, 197, + 1, 254, 200, 218, 27, 221, 197, 1, 220, 255, 218, 27, 221, 197, 1, 218, + 51, 221, 197, 1, 218, 50, 221, 197, 1, 218, 47, 221, 197, 1, 220, 255, + 218, 60, 221, 197, 1, 220, 255, 218, 45, 221, 197, 1, 218, 44, 221, 197, + 1, 217, 200, 221, 197, 1, 218, 41, 221, 197, 1, 218, 40, 221, 197, 1, + 218, 62, 221, 197, 1, 220, 255, 218, 62, 221, 197, 1, 253, 208, 218, 62, + 221, 197, 1, 218, 39, 221, 197, 1, 218, 37, 221, 197, 1, 218, 38, 221, + 197, 1, 218, 36, 221, 197, 1, 218, 35, 221, 197, 1, 218, 70, 221, 197, 1, + 218, 33, 221, 197, 1, 218, 32, 221, 197, 1, 218, 31, 221, 197, 1, 218, + 30, 221, 197, 1, 218, 28, 221, 197, 1, 222, 98, 218, 28, 221, 197, 1, + 218, 26, 221, 197, 58, 1, 235, 182, 78, 28, 4, 235, 11, 28, 4, 233, 135, + 28, 4, 227, 73, 28, 4, 224, 25, 28, 4, 224, 199, 28, 4, 252, 40, 28, 4, + 221, 139, 28, 4, 250, 181, 28, 4, 231, 202, 28, 4, 231, 55, 28, 4, 244, + 73, 230, 185, 28, 4, 217, 20, 28, 4, 248, 165, 28, 4, 249, 106, 28, 4, + 237, 58, 28, 4, 221, 238, 28, 4, 251, 10, 28, 4, 229, 117, 28, 4, 229, + 36, 28, 4, 244, 130, 28, 4, 244, 126, 28, 4, 244, 127, 28, 4, 244, 128, + 28, 4, 223, 218, 28, 4, 223, 178, 28, 4, 223, 189, 28, 4, 223, 217, 28, + 4, 223, 193, 28, 4, 223, 194, 28, 4, 223, 182, 28, 4, 251, 114, 28, 4, + 251, 101, 28, 4, 251, 103, 28, 4, 251, 113, 28, 4, 251, 111, 28, 4, 251, + 112, 28, 4, 251, 102, 28, 4, 216, 247, 28, 4, 216, 227, 28, 4, 216, 238, + 28, 4, 216, 246, 28, 4, 216, 241, 28, 4, 216, 242, 28, 4, 216, 230, 28, + 4, 251, 110, 28, 4, 251, 104, 28, 4, 251, 106, 28, 4, 251, 109, 28, 4, + 251, 107, 28, 4, 251, 108, 28, 4, 251, 105, 28, 4, 228, 51, 28, 4, 228, + 41, 28, 4, 228, 47, 28, 4, 228, 50, 28, 4, 228, 48, 28, 4, 228, 49, 28, + 4, 228, 46, 28, 4, 235, 212, 28, 4, 235, 204, 28, 4, 235, 207, 28, 4, + 235, 211, 28, 4, 235, 208, 28, 4, 235, 209, 28, 4, 235, 205, 28, 4, 218, + 103, 28, 4, 218, 93, 28, 4, 218, 99, 28, 4, 218, 102, 28, 4, 218, 100, + 28, 4, 218, 101, 28, 4, 218, 98, 28, 4, 243, 236, 28, 4, 243, 227, 28, 4, + 243, 230, 28, 4, 243, 235, 28, 4, 243, 232, 28, 4, 243, 233, 28, 4, 243, + 229, 36, 31, 1, 252, 144, 36, 31, 1, 219, 165, 36, 31, 1, 244, 116, 36, + 31, 1, 249, 92, 36, 31, 1, 217, 72, 36, 31, 1, 217, 92, 36, 31, 1, 175, + 36, 31, 1, 246, 217, 36, 31, 1, 246, 205, 36, 31, 1, 246, 197, 36, 31, 1, + 74, 36, 31, 1, 229, 198, 36, 31, 1, 246, 148, 36, 31, 1, 246, 138, 36, + 31, 1, 222, 87, 36, 31, 1, 155, 36, 31, 1, 221, 50, 36, 31, 1, 251, 46, + 36, 31, 1, 225, 25, 36, 31, 1, 224, 248, 36, 31, 1, 245, 171, 36, 31, 1, + 246, 137, 36, 31, 1, 60, 36, 31, 1, 238, 26, 36, 31, 1, 248, 181, 36, 31, + 1, 233, 123, 220, 102, 36, 31, 1, 218, 36, 36, 31, 1, 217, 200, 36, 31, + 1, 237, 160, 60, 36, 31, 1, 235, 25, 217, 178, 36, 31, 1, 252, 76, 217, + 178, 36, 31, 1, 237, 160, 252, 76, 217, 178, 45, 254, 120, 223, 89, 234, + 63, 45, 254, 120, 247, 143, 223, 89, 234, 63, 42, 223, 89, 115, 45, 223, + 89, 115, 42, 247, 143, 223, 89, 115, 45, 247, 143, 223, 89, 115, 227, + 241, 237, 178, 234, 63, 227, 241, 247, 143, 237, 178, 234, 63, 247, 143, + 221, 103, 234, 63, 42, 221, 103, 115, 45, 221, 103, 115, 227, 241, 223, + 227, 42, 227, 241, 230, 140, 115, 45, 227, 241, 230, 140, 115, 246, 251, + 250, 121, 229, 239, 245, 126, 229, 239, 210, 245, 126, 229, 239, 242, + 118, 247, 143, 230, 180, 247, 130, 254, 127, 220, 53, 254, 127, 247, 143, + 227, 106, 254, 119, 51, 230, 177, 242, 121, 237, 170, 237, 177, 230, 23, + 252, 14, 242, 122, 2, 249, 13, 221, 180, 2, 227, 94, 50, 42, 109, 229, + 231, 115, 45, 109, 229, 231, 115, 221, 180, 2, 61, 50, 221, 180, 2, 61, + 56, 42, 69, 252, 201, 2, 228, 77, 45, 69, 252, 201, 2, 228, 77, 221, 120, + 42, 144, 115, 221, 120, 45, 144, 115, 252, 29, 42, 144, 115, 252, 29, 45, + 144, 115, 42, 224, 136, 105, 115, 45, 224, 136, 105, 115, 42, 51, 229, + 229, 45, 51, 229, 229, 124, 188, 104, 131, 61, 228, 196, 131, 61, 104, + 124, 188, 228, 196, 204, 245, 116, 61, 228, 196, 245, 170, 61, 78, 210, + 228, 82, 78, 69, 221, 179, 227, 94, 229, 31, 218, 174, 225, 55, 233, 193, + 248, 145, 9, 32, 227, 181, 9, 32, 250, 203, 9, 32, 226, 90, 107, 9, 32, + 226, 90, 103, 9, 32, 226, 90, 160, 9, 32, 229, 157, 9, 32, 252, 21, 9, + 32, 222, 146, 9, 32, 236, 61, 107, 9, 32, 236, 61, 103, 9, 32, 248, 189, + 9, 32, 226, 92, 9, 32, 3, 107, 9, 32, 3, 103, 9, 32, 235, 155, 107, 9, + 32, 235, 155, 103, 9, 32, 235, 155, 160, 9, 32, 235, 155, 154, 9, 32, + 224, 35, 9, 32, 221, 229, 9, 32, 224, 33, 107, 9, 32, 224, 33, 103, 9, + 32, 243, 154, 107, 9, 32, 243, 154, 103, 9, 32, 243, 189, 9, 32, 227, + 233, 9, 32, 251, 8, 9, 32, 223, 68, 9, 32, 233, 117, 9, 32, 249, 90, 9, + 32, 233, 110, 9, 32, 250, 213, 9, 32, 218, 241, 107, 9, 32, 218, 241, + 103, 9, 32, 245, 179, 9, 32, 229, 208, 107, 9, 32, 229, 208, 103, 9, 32, + 224, 114, 144, 221, 99, 221, 60, 9, 32, 250, 110, 9, 32, 248, 159, 9, 32, + 237, 121, 9, 32, 252, 36, 117, 250, 192, 9, 32, 246, 81, 9, 32, 223, 240, + 107, 9, 32, 223, 240, 103, 9, 32, 252, 211, 9, 32, 224, 119, 9, 32, 251, + 199, 224, 119, 9, 32, 232, 126, 107, 9, 32, 232, 126, 103, 9, 32, 232, + 126, 160, 9, 32, 232, 126, 154, 9, 32, 233, 243, 9, 32, 224, 240, 9, 32, + 227, 239, 9, 32, 246, 100, 9, 32, 230, 150, 9, 32, 251, 255, 107, 9, 32, + 251, 255, 103, 9, 32, 234, 21, 9, 32, 233, 112, 9, 32, 244, 40, 107, 9, + 32, 244, 40, 103, 9, 32, 244, 40, 160, 9, 32, 221, 196, 9, 32, 250, 191, + 9, 32, 218, 217, 107, 9, 32, 218, 217, 103, 9, 32, 251, 199, 226, 84, 9, + 32, 224, 114, 242, 189, 9, 32, 242, 189, 9, 32, 251, 199, 223, 247, 9, + 32, 251, 199, 224, 235, 9, 32, 245, 133, 9, 32, 251, 199, 251, 127, 9, + 32, 224, 114, 218, 255, 9, 32, 219, 0, 107, 9, 32, 219, 0, 103, 9, 32, + 250, 214, 9, 32, 251, 199, 244, 62, 9, 32, 171, 107, 9, 32, 171, 103, 9, + 32, 251, 199, 235, 2, 9, 32, 251, 199, 244, 213, 9, 32, 233, 109, 107, 9, + 32, 233, 109, 103, 9, 32, 227, 242, 9, 32, 252, 43, 9, 32, 251, 199, 222, + 117, 235, 119, 9, 32, 251, 199, 235, 120, 9, 32, 251, 199, 218, 194, 9, + 32, 251, 199, 245, 142, 9, 32, 247, 3, 107, 9, 32, 247, 3, 103, 9, 32, + 247, 3, 160, 9, 32, 251, 199, 247, 2, 9, 32, 243, 159, 9, 32, 251, 199, + 242, 188, 9, 32, 252, 35, 9, 32, 244, 111, 9, 32, 251, 199, 245, 176, 9, + 32, 251, 199, 252, 67, 9, 32, 251, 199, 226, 151, 9, 32, 224, 114, 218, + 212, 9, 32, 224, 114, 218, 20, 9, 32, 251, 199, 245, 98, 9, 32, 237, 125, + 246, 103, 9, 32, 251, 199, 246, 103, 9, 32, 237, 125, 221, 121, 9, 32, + 251, 199, 221, 121, 9, 32, 237, 125, 247, 123, 9, 32, 251, 199, 247, 123, + 9, 32, 220, 234, 9, 32, 237, 125, 220, 234, 9, 32, 251, 199, 220, 234, + 53, 32, 107, 53, 32, 235, 43, 53, 32, 248, 145, 53, 32, 224, 55, 53, 32, + 226, 89, 53, 32, 96, 53, 32, 103, 53, 32, 235, 64, 53, 32, 234, 86, 53, + 32, 235, 103, 53, 32, 246, 178, 53, 32, 185, 53, 32, 113, 252, 21, 53, + 32, 250, 111, 53, 32, 242, 65, 53, 32, 222, 146, 53, 32, 230, 119, 252, + 21, 53, 32, 236, 60, 53, 32, 229, 10, 53, 32, 218, 169, 53, 32, 223, 235, + 53, 32, 45, 230, 119, 252, 21, 53, 32, 243, 109, 246, 192, 53, 32, 222, + 65, 53, 32, 248, 189, 53, 32, 226, 92, 53, 32, 250, 203, 53, 32, 228, + 231, 53, 32, 254, 208, 53, 32, 233, 105, 53, 32, 246, 192, 53, 32, 247, + 8, 53, 32, 226, 108, 53, 32, 244, 68, 53, 32, 244, 69, 224, 45, 53, 32, + 246, 102, 53, 32, 252, 75, 53, 32, 218, 183, 53, 32, 251, 24, 53, 32, + 227, 66, 53, 32, 237, 220, 53, 32, 224, 43, 53, 32, 235, 154, 53, 32, + 250, 119, 53, 32, 223, 230, 53, 32, 233, 107, 53, 32, 227, 84, 53, 32, + 218, 171, 53, 32, 230, 134, 53, 32, 220, 239, 53, 32, 247, 113, 53, 32, + 224, 192, 221, 229, 53, 32, 247, 143, 250, 203, 53, 32, 171, 223, 122, + 53, 32, 124, 243, 187, 53, 32, 224, 194, 53, 32, 252, 24, 53, 32, 224, + 32, 53, 32, 252, 3, 53, 32, 223, 145, 53, 32, 243, 153, 53, 32, 243, 195, + 53, 32, 248, 148, 53, 32, 243, 189, 53, 32, 252, 14, 53, 32, 227, 233, + 53, 32, 226, 99, 53, 32, 248, 212, 53, 32, 253, 213, 53, 32, 223, 227, + 53, 32, 231, 184, 53, 32, 223, 68, 53, 32, 226, 118, 53, 32, 233, 117, + 53, 32, 221, 98, 53, 32, 235, 178, 53, 32, 223, 136, 53, 32, 249, 90, 53, + 32, 218, 226, 53, 32, 248, 168, 231, 184, 53, 32, 250, 165, 53, 32, 245, + 84, 53, 32, 250, 211, 53, 32, 223, 148, 53, 32, 218, 240, 53, 32, 245, + 179, 53, 32, 250, 210, 53, 32, 245, 235, 53, 32, 51, 218, 151, 53, 32, + 144, 221, 99, 221, 60, 53, 32, 224, 52, 53, 32, 245, 243, 53, 32, 250, + 110, 53, 32, 248, 159, 53, 32, 228, 228, 53, 32, 237, 121, 53, 32, 234, + 3, 53, 32, 221, 178, 53, 32, 223, 31, 53, 32, 235, 59, 53, 32, 220, 33, + 53, 32, 245, 202, 53, 32, 252, 36, 117, 250, 192, 53, 32, 224, 137, 53, + 32, 247, 143, 222, 62, 53, 32, 218, 207, 53, 32, 224, 62, 53, 32, 248, + 202, 53, 32, 246, 81, 53, 32, 223, 249, 53, 32, 65, 53, 32, 223, 138, 53, + 32, 223, 239, 53, 32, 221, 108, 53, 32, 244, 45, 53, 32, 251, 119, 53, + 32, 223, 160, 53, 32, 252, 211, 53, 32, 227, 145, 53, 32, 224, 119, 53, + 32, 237, 117, 53, 32, 232, 125, 53, 32, 224, 240, 53, 32, 245, 228, 53, + 32, 230, 150, 53, 32, 254, 126, 53, 32, 229, 47, 53, 32, 247, 11, 53, 32, + 251, 254, 53, 32, 234, 21, 53, 32, 233, 156, 53, 32, 225, 73, 53, 32, + 254, 23, 53, 32, 233, 112, 53, 32, 221, 124, 53, 32, 230, 111, 53, 32, + 252, 38, 53, 32, 223, 134, 53, 32, 250, 174, 53, 32, 244, 39, 53, 32, + 221, 196, 53, 32, 237, 192, 53, 32, 252, 44, 53, 32, 219, 0, 246, 192, + 53, 32, 250, 191, 53, 32, 218, 216, 53, 32, 226, 84, 53, 32, 242, 189, + 53, 32, 223, 247, 53, 32, 219, 186, 53, 32, 252, 141, 53, 32, 229, 78, + 53, 32, 252, 227, 53, 32, 224, 235, 53, 32, 227, 202, 53, 32, 227, 10, + 53, 32, 245, 133, 53, 32, 252, 37, 53, 32, 251, 127, 53, 32, 252, 58, 53, + 32, 233, 114, 53, 32, 218, 255, 53, 32, 250, 214, 53, 32, 218, 192, 53, + 32, 248, 199, 53, 32, 219, 86, 53, 32, 244, 62, 53, 32, 235, 2, 53, 32, + 244, 213, 53, 32, 233, 108, 53, 32, 224, 54, 53, 32, 224, 192, 222, 134, + 252, 67, 53, 32, 227, 242, 53, 32, 252, 43, 53, 32, 218, 166, 53, 32, + 246, 3, 53, 32, 235, 119, 53, 32, 222, 117, 235, 119, 53, 32, 235, 116, + 53, 32, 224, 8, 53, 32, 235, 120, 53, 32, 218, 194, 53, 32, 245, 142, 53, + 32, 247, 2, 53, 32, 243, 159, 53, 32, 245, 106, 53, 32, 242, 188, 53, 32, + 252, 35, 53, 32, 222, 122, 53, 32, 243, 200, 53, 32, 245, 195, 53, 32, + 226, 172, 218, 192, 53, 32, 251, 121, 53, 32, 244, 111, 53, 32, 245, 176, + 53, 32, 252, 67, 53, 32, 226, 151, 53, 32, 249, 80, 53, 32, 218, 212, 53, + 32, 243, 139, 53, 32, 218, 20, 53, 32, 233, 163, 53, 32, 252, 53, 53, 32, + 246, 202, 53, 32, 245, 98, 53, 32, 221, 76, 53, 32, 247, 115, 53, 32, + 227, 228, 53, 32, 231, 185, 53, 32, 246, 103, 53, 32, 221, 121, 53, 32, + 247, 123, 53, 32, 220, 234, 53, 32, 245, 143, 98, 249, 46, 126, 42, 199, + 227, 109, 98, 249, 46, 126, 71, 199, 56, 98, 249, 46, 126, 42, 199, 233, + 193, 25, 227, 109, 98, 249, 46, 126, 71, 199, 233, 193, 25, 56, 98, 249, + 46, 126, 245, 90, 223, 47, 98, 249, 46, 126, 223, 48, 245, 97, 50, 98, + 249, 46, 126, 223, 48, 245, 97, 56, 98, 249, 46, 126, 223, 48, 245, 97, + 235, 115, 98, 249, 46, 126, 223, 48, 245, 97, 220, 60, 235, 115, 98, 249, + 46, 126, 223, 48, 245, 97, 220, 60, 227, 109, 98, 249, 46, 126, 223, 48, + 245, 97, 234, 237, 235, 115, 98, 249, 46, 126, 230, 76, 98, 223, 254, 98, + 250, 168, 98, 245, 90, 223, 136, 248, 196, 78, 237, 118, 237, 209, 223, + 159, 100, 98, 237, 138, 78, 98, 250, 194, 78, 98, 54, 217, 84, 42, 254, + 120, 115, 45, 254, 120, 115, 42, 51, 254, 120, 115, 45, 51, 254, 120, + 115, 42, 250, 124, 115, 45, 250, 124, 115, 42, 67, 250, 124, 115, 45, 67, + 250, 124, 115, 42, 84, 235, 91, 115, 45, 84, 235, 91, 115, 229, 14, 78, + 244, 163, 78, 42, 221, 114, 224, 236, 115, 45, 221, 114, 224, 236, 115, + 42, 67, 235, 91, 115, 45, 67, 235, 91, 115, 42, 67, 221, 114, 224, 236, + 115, 45, 67, 221, 114, 224, 236, 115, 42, 67, 40, 115, 45, 67, 40, 115, + 218, 237, 249, 146, 210, 51, 228, 236, 228, 69, 78, 51, 228, 236, 228, + 69, 78, 109, 51, 228, 236, 228, 69, 78, 229, 14, 164, 246, 3, 243, 185, + 231, 107, 107, 243, 185, 231, 107, 103, 243, 185, 231, 107, 160, 243, + 185, 231, 107, 154, 243, 185, 231, 107, 174, 243, 185, 231, 107, 182, + 243, 185, 231, 107, 191, 243, 185, 231, 107, 185, 243, 185, 231, 107, + 190, 98, 235, 83, 145, 78, 98, 227, 88, 145, 78, 98, 249, 52, 145, 78, + 98, 246, 177, 145, 78, 22, 224, 109, 61, 145, 78, 22, 51, 61, 145, 78, + 218, 235, 249, 146, 69, 236, 232, 227, 182, 78, 69, 236, 232, 227, 182, + 2, 219, 70, 224, 9, 78, 69, 236, 232, 227, 182, 164, 220, 60, 243, 194, + 69, 236, 232, 227, 182, 2, 219, 70, 224, 9, 164, 220, 60, 243, 194, 69, + 236, 232, 227, 182, 164, 234, 237, 243, 194, 34, 229, 14, 78, 98, 183, + 235, 44, 245, 225, 225, 55, 100, 243, 185, 231, 107, 222, 65, 243, 185, + 231, 107, 220, 219, 243, 185, 231, 107, 221, 245, 69, 98, 237, 138, 78, + 234, 52, 78, 229, 225, 254, 143, 78, 98, 41, 237, 211, 98, 144, 245, 188, + 223, 254, 136, 1, 3, 60, 136, 1, 60, 136, 1, 3, 72, 136, 1, 72, 136, 1, + 3, 68, 136, 1, 68, 136, 1, 3, 73, 136, 1, 73, 136, 1, 3, 74, 136, 1, 74, + 136, 1, 175, 136, 1, 245, 0, 136, 1, 236, 113, 136, 1, 244, 103, 136, 1, + 236, 7, 136, 1, 244, 17, 136, 1, 236, 184, 136, 1, 244, 191, 136, 1, 236, + 57, 136, 1, 244, 68, 136, 1, 226, 177, 136, 1, 217, 114, 136, 1, 224, + 140, 136, 1, 217, 42, 136, 1, 223, 103, 136, 1, 217, 13, 136, 1, 226, 94, + 136, 1, 217, 92, 136, 1, 224, 26, 136, 1, 217, 21, 136, 1, 222, 155, 136, + 1, 249, 207, 136, 1, 221, 205, 136, 1, 249, 15, 136, 1, 3, 221, 0, 136, + 1, 221, 0, 136, 1, 247, 111, 136, 1, 222, 87, 136, 1, 249, 92, 136, 1, + 101, 136, 1, 248, 167, 136, 1, 208, 136, 1, 232, 62, 136, 1, 231, 144, + 136, 1, 232, 141, 136, 1, 231, 204, 136, 1, 155, 136, 1, 252, 237, 136, + 1, 187, 136, 1, 243, 112, 136, 1, 252, 84, 136, 1, 229, 108, 136, 1, 242, + 173, 136, 1, 251, 248, 136, 1, 228, 202, 136, 1, 243, 162, 136, 1, 252, + 144, 136, 1, 229, 198, 136, 1, 243, 4, 136, 1, 252, 41, 136, 1, 229, 37, + 136, 1, 196, 136, 1, 233, 196, 136, 1, 233, 99, 136, 1, 234, 25, 136, 1, + 233, 136, 136, 1, 3, 184, 136, 1, 184, 136, 1, 3, 217, 200, 136, 1, 217, + 200, 136, 1, 3, 217, 231, 136, 1, 217, 231, 136, 1, 203, 136, 1, 227, + 147, 136, 1, 227, 22, 136, 1, 227, 216, 136, 1, 227, 75, 136, 1, 3, 219, + 7, 136, 1, 219, 7, 136, 1, 218, 204, 136, 1, 218, 227, 136, 1, 218, 187, + 136, 1, 207, 136, 1, 219, 56, 136, 1, 3, 175, 136, 1, 3, 236, 184, 36, + 236, 202, 219, 70, 224, 9, 78, 36, 236, 202, 225, 72, 224, 9, 78, 236, + 202, 219, 70, 224, 9, 78, 236, 202, 225, 72, 224, 9, 78, 136, 237, 138, + 78, 136, 219, 70, 237, 138, 78, 136, 248, 234, 217, 213, 236, 202, 51, + 242, 121, 52, 1, 3, 60, 52, 1, 60, 52, 1, 3, 72, 52, 1, 72, 52, 1, 3, 68, + 52, 1, 68, 52, 1, 3, 73, 52, 1, 73, 52, 1, 3, 74, 52, 1, 74, 52, 1, 175, + 52, 1, 245, 0, 52, 1, 236, 113, 52, 1, 244, 103, 52, 1, 236, 7, 52, 1, + 244, 17, 52, 1, 236, 184, 52, 1, 244, 191, 52, 1, 236, 57, 52, 1, 244, + 68, 52, 1, 226, 177, 52, 1, 217, 114, 52, 1, 224, 140, 52, 1, 217, 42, + 52, 1, 223, 103, 52, 1, 217, 13, 52, 1, 226, 94, 52, 1, 217, 92, 52, 1, + 224, 26, 52, 1, 217, 21, 52, 1, 222, 155, 52, 1, 249, 207, 52, 1, 221, + 205, 52, 1, 249, 15, 52, 1, 3, 221, 0, 52, 1, 221, 0, 52, 1, 247, 111, + 52, 1, 222, 87, 52, 1, 249, 92, 52, 1, 101, 52, 1, 248, 167, 52, 1, 208, + 52, 1, 232, 62, 52, 1, 231, 144, 52, 1, 232, 141, 52, 1, 231, 204, 52, 1, + 155, 52, 1, 252, 237, 52, 1, 187, 52, 1, 243, 112, 52, 1, 252, 84, 52, 1, + 229, 108, 52, 1, 242, 173, 52, 1, 251, 248, 52, 1, 228, 202, 52, 1, 243, + 162, 52, 1, 252, 144, 52, 1, 229, 198, 52, 1, 243, 4, 52, 1, 252, 41, 52, + 1, 229, 37, 52, 1, 196, 52, 1, 233, 196, 52, 1, 233, 99, 52, 1, 234, 25, + 52, 1, 233, 136, 52, 1, 3, 184, 52, 1, 184, 52, 1, 3, 217, 200, 52, 1, + 217, 200, 52, 1, 3, 217, 231, 52, 1, 217, 231, 52, 1, 203, 52, 1, 227, + 147, 52, 1, 227, 22, 52, 1, 227, 216, 52, 1, 227, 75, 52, 1, 3, 219, 7, + 52, 1, 219, 7, 52, 1, 218, 204, 52, 1, 218, 227, 52, 1, 218, 187, 52, 1, + 207, 52, 1, 219, 56, 52, 1, 3, 175, 52, 1, 3, 236, 184, 52, 1, 219, 189, + 52, 1, 219, 94, 52, 1, 219, 165, 52, 1, 219, 72, 52, 233, 193, 248, 145, + 236, 202, 228, 223, 224, 9, 78, 52, 237, 138, 78, 52, 219, 70, 237, 138, + 78, 52, 248, 234, 236, 30, 200, 1, 253, 204, 200, 1, 230, 59, 200, 1, + 189, 200, 1, 246, 74, 200, 1, 250, 46, 200, 1, 222, 201, 200, 1, 207, + 200, 1, 153, 200, 1, 245, 67, 200, 1, 237, 17, 200, 1, 243, 225, 200, 1, + 237, 126, 200, 1, 228, 163, 200, 1, 218, 151, 200, 1, 217, 81, 200, 1, + 251, 70, 200, 1, 225, 27, 200, 1, 152, 200, 1, 217, 157, 200, 1, 251, + 202, 200, 1, 198, 200, 1, 60, 200, 1, 74, 200, 1, 73, 200, 1, 246, 239, + 200, 1, 254, 196, 200, 1, 246, 237, 200, 1, 253, 232, 200, 1, 230, 86, + 200, 1, 254, 131, 200, 1, 246, 197, 200, 1, 254, 123, 200, 1, 246, 185, + 200, 1, 246, 148, 200, 1, 72, 200, 1, 68, 200, 1, 237, 137, 200, 1, 216, + 216, 200, 1, 232, 117, 200, 1, 244, 72, 200, 1, 238, 0, 22, 1, 236, 86, + 22, 1, 223, 211, 22, 1, 236, 79, 22, 1, 232, 55, 22, 1, 232, 53, 22, 1, + 232, 52, 22, 1, 221, 192, 22, 1, 223, 200, 22, 1, 227, 140, 22, 1, 227, + 135, 22, 1, 227, 132, 22, 1, 227, 125, 22, 1, 227, 120, 22, 1, 227, 115, + 22, 1, 227, 126, 22, 1, 227, 138, 22, 1, 233, 187, 22, 1, 229, 99, 22, 1, + 223, 208, 22, 1, 229, 88, 22, 1, 224, 104, 22, 1, 223, 205, 22, 1, 238, + 22, 22, 1, 250, 230, 22, 1, 223, 215, 22, 1, 251, 29, 22, 1, 236, 128, + 22, 1, 222, 0, 22, 1, 229, 127, 22, 1, 243, 106, 22, 1, 60, 22, 1, 254, + 234, 22, 1, 184, 22, 1, 218, 65, 22, 1, 246, 168, 22, 1, 73, 22, 1, 218, + 16, 22, 1, 218, 25, 22, 1, 74, 22, 1, 219, 7, 22, 1, 219, 4, 22, 1, 230, + 167, 22, 1, 217, 231, 22, 1, 68, 22, 1, 218, 219, 22, 1, 218, 227, 22, 1, + 218, 204, 22, 1, 217, 200, 22, 1, 246, 115, 22, 1, 217, 250, 22, 1, 72, + 22, 245, 185, 22, 1, 223, 209, 22, 1, 232, 45, 22, 1, 232, 47, 22, 1, + 232, 50, 22, 1, 227, 133, 22, 1, 227, 114, 22, 1, 227, 122, 22, 1, 227, + 127, 22, 1, 227, 112, 22, 1, 233, 180, 22, 1, 233, 177, 22, 1, 233, 181, + 22, 1, 236, 220, 22, 1, 229, 94, 22, 1, 229, 80, 22, 1, 229, 86, 22, 1, + 229, 83, 22, 1, 229, 97, 22, 1, 229, 81, 22, 1, 236, 218, 22, 1, 236, + 216, 22, 1, 224, 97, 22, 1, 224, 95, 22, 1, 224, 87, 22, 1, 224, 92, 22, + 1, 224, 102, 22, 1, 230, 1, 22, 1, 223, 212, 22, 1, 218, 6, 22, 1, 218, + 2, 22, 1, 218, 3, 22, 1, 236, 219, 22, 1, 223, 213, 22, 1, 218, 12, 22, + 1, 217, 225, 22, 1, 217, 224, 22, 1, 217, 227, 22, 1, 217, 191, 22, 1, + 217, 192, 22, 1, 217, 195, 22, 1, 254, 60, 22, 1, 254, 54, 98, 254, 112, + 235, 33, 78, 98, 254, 112, 227, 160, 78, 98, 254, 112, 131, 78, 98, 254, + 112, 124, 78, 98, 254, 112, 148, 78, 98, 254, 112, 245, 116, 78, 98, 254, + 112, 221, 120, 78, 98, 254, 112, 233, 193, 78, 98, 254, 112, 252, 29, 78, + 98, 254, 112, 245, 178, 78, 98, 254, 112, 226, 90, 78, 98, 254, 112, 221, + 252, 78, 98, 254, 112, 245, 110, 78, 98, 254, 112, 243, 152, 78, 98, 254, + 112, 247, 9, 78, 98, 254, 112, 234, 87, 78, 200, 1, 251, 248, 200, 1, + 217, 42, 200, 1, 237, 98, 200, 1, 244, 17, 200, 1, 246, 250, 200, 1, 246, + 183, 200, 1, 230, 127, 200, 1, 230, 131, 200, 1, 237, 156, 200, 1, 254, + 114, 200, 1, 237, 198, 200, 1, 220, 68, 200, 1, 237, 238, 200, 1, 232, + 101, 200, 1, 254, 190, 200, 1, 253, 228, 200, 1, 254, 140, 200, 1, 230, + 146, 200, 1, 230, 133, 200, 1, 237, 195, 200, 39, 1, 230, 59, 200, 39, 1, + 222, 201, 200, 39, 1, 237, 17, 200, 39, 1, 243, 225, 9, 214, 222, 201, 9, + 214, 218, 213, 9, 214, 218, 131, 9, 214, 251, 214, 9, 214, 223, 37, 9, + 214, 242, 111, 9, 214, 242, 115, 9, 214, 242, 179, 9, 214, 242, 112, 9, + 214, 222, 204, 9, 214, 242, 114, 9, 214, 242, 110, 9, 214, 242, 177, 9, + 214, 242, 113, 9, 214, 242, 109, 9, 214, 207, 9, 214, 243, 225, 9, 214, + 198, 9, 214, 230, 59, 9, 214, 224, 0, 9, 214, 250, 46, 9, 214, 242, 116, + 9, 214, 243, 122, 9, 214, 222, 213, 9, 214, 223, 22, 9, 214, 223, 168, 9, + 214, 225, 32, 9, 214, 229, 200, 9, 214, 228, 165, 9, 214, 221, 140, 9, + 214, 222, 203, 9, 214, 223, 30, 9, 214, 242, 123, 9, 214, 242, 108, 9, + 214, 229, 143, 9, 214, 228, 163, 52, 1, 3, 236, 7, 52, 1, 3, 224, 140, + 52, 1, 3, 223, 103, 52, 1, 3, 101, 52, 1, 3, 231, 144, 52, 1, 3, 155, 52, + 1, 3, 243, 112, 52, 1, 3, 242, 173, 52, 1, 3, 243, 162, 52, 1, 3, 243, 4, + 52, 1, 3, 233, 99, 52, 1, 3, 203, 52, 1, 3, 227, 147, 52, 1, 3, 227, 22, + 52, 1, 3, 227, 216, 52, 1, 3, 227, 75, 82, 22, 236, 86, 82, 22, 232, 55, + 82, 22, 221, 192, 82, 22, 227, 140, 82, 22, 233, 187, 82, 22, 229, 99, + 82, 22, 224, 104, 82, 22, 238, 22, 82, 22, 250, 230, 82, 22, 251, 29, 82, + 22, 236, 128, 82, 22, 222, 0, 82, 22, 229, 127, 82, 22, 243, 106, 82, 22, + 236, 87, 60, 82, 22, 232, 56, 60, 82, 22, 221, 193, 60, 82, 22, 227, 141, + 60, 82, 22, 233, 188, 60, 82, 22, 229, 100, 60, 82, 22, 224, 105, 60, 82, + 22, 238, 23, 60, 82, 22, 250, 231, 60, 82, 22, 251, 30, 60, 82, 22, 236, + 129, 60, 82, 22, 222, 1, 60, 82, 22, 229, 128, 60, 82, 22, 243, 107, 60, + 82, 22, 250, 231, 68, 82, 236, 34, 126, 230, 156, 82, 236, 34, 126, 142, + 242, 173, 82, 138, 107, 82, 138, 103, 82, 138, 160, 82, 138, 154, 82, + 138, 174, 82, 138, 182, 82, 138, 191, 82, 138, 185, 82, 138, 190, 82, + 138, 222, 65, 82, 138, 233, 117, 82, 138, 245, 179, 82, 138, 218, 240, + 82, 138, 218, 179, 82, 138, 233, 238, 82, 138, 247, 8, 82, 138, 223, 68, + 82, 138, 223, 139, 82, 138, 243, 168, 82, 138, 224, 23, 82, 138, 232, + 218, 82, 138, 223, 248, 82, 138, 245, 184, 82, 138, 250, 154, 82, 138, + 235, 181, 82, 138, 227, 178, 82, 138, 251, 159, 82, 138, 223, 106, 82, + 138, 223, 56, 82, 138, 246, 176, 82, 138, 227, 170, 82, 138, 254, 153, + 82, 138, 245, 208, 82, 138, 227, 168, 82, 138, 225, 73, 82, 138, 227, + 215, 34, 138, 228, 81, 34, 138, 236, 103, 34, 138, 226, 107, 34, 138, + 236, 30, 34, 54, 222, 66, 230, 139, 84, 223, 227, 34, 54, 220, 220, 230, + 139, 84, 223, 227, 34, 54, 221, 246, 230, 139, 84, 223, 227, 34, 54, 245, + 120, 230, 139, 84, 223, 227, 34, 54, 245, 197, 230, 139, 84, 223, 227, + 34, 54, 224, 70, 230, 139, 84, 223, 227, 34, 54, 225, 39, 230, 139, 84, + 223, 227, 34, 54, 246, 228, 230, 139, 84, 223, 227, 229, 221, 55, 34, 54, + 220, 220, 107, 34, 54, 220, 220, 103, 34, 54, 220, 220, 160, 34, 54, 220, + 220, 154, 34, 54, 220, 220, 174, 34, 54, 220, 220, 182, 34, 54, 220, 220, + 191, 34, 54, 220, 220, 185, 34, 54, 220, 220, 190, 34, 54, 221, 245, 34, + 54, 221, 246, 107, 34, 54, 221, 246, 103, 34, 54, 221, 246, 160, 34, 54, + 221, 246, 154, 34, 54, 221, 246, 174, 34, 22, 236, 86, 34, 22, 232, 55, + 34, 22, 221, 192, 34, 22, 227, 140, 34, 22, 233, 187, 34, 22, 229, 99, + 34, 22, 224, 104, 34, 22, 238, 22, 34, 22, 250, 230, 34, 22, 251, 29, 34, + 22, 236, 128, 34, 22, 222, 0, 34, 22, 229, 127, 34, 22, 243, 106, 34, 22, + 236, 87, 60, 34, 22, 232, 56, 60, 34, 22, 221, 193, 60, 34, 22, 227, 141, + 60, 34, 22, 233, 188, 60, 34, 22, 229, 100, 60, 34, 22, 224, 105, 60, 34, + 22, 238, 23, 60, 34, 22, 250, 231, 60, 34, 22, 251, 30, 60, 34, 22, 236, + 129, 60, 34, 22, 222, 1, 60, 34, 22, 229, 128, 60, 34, 22, 243, 107, 60, + 34, 236, 34, 126, 251, 61, 34, 236, 34, 126, 237, 40, 34, 22, 238, 23, + 68, 236, 34, 223, 159, 100, 34, 138, 107, 34, 138, 103, 34, 138, 160, 34, + 138, 154, 34, 138, 174, 34, 138, 182, 34, 138, 191, 34, 138, 185, 34, + 138, 190, 34, 138, 222, 65, 34, 138, 233, 117, 34, 138, 245, 179, 34, + 138, 218, 240, 34, 138, 218, 179, 34, 138, 233, 238, 34, 138, 247, 8, 34, + 138, 223, 68, 34, 138, 223, 139, 34, 138, 243, 168, 34, 138, 224, 23, 34, + 138, 232, 218, 34, 138, 223, 248, 34, 138, 245, 184, 34, 138, 250, 154, + 34, 138, 235, 181, 34, 138, 226, 88, 34, 138, 234, 89, 34, 138, 245, 216, + 34, 138, 223, 79, 34, 138, 246, 97, 34, 138, 228, 233, 34, 138, 253, 236, + 34, 138, 237, 139, 34, 138, 227, 168, 34, 138, 250, 127, 34, 138, 250, + 118, 34, 138, 243, 99, 34, 138, 251, 84, 34, 138, 234, 239, 34, 138, 235, + 115, 34, 138, 227, 109, 34, 138, 234, 19, 34, 138, 227, 189, 34, 138, + 223, 106, 34, 138, 223, 56, 34, 138, 246, 176, 34, 138, 227, 170, 34, + 138, 254, 153, 34, 138, 232, 42, 34, 54, 221, 246, 182, 34, 54, 221, 246, + 191, 34, 54, 221, 246, 185, 34, 54, 221, 246, 190, 34, 54, 245, 119, 34, + 54, 245, 120, 107, 34, 54, 245, 120, 103, 34, 54, 245, 120, 160, 34, 54, + 245, 120, 154, 34, 54, 245, 120, 174, 34, 54, 245, 120, 182, 34, 54, 245, + 120, 191, 34, 54, 245, 120, 185, 34, 54, 245, 120, 190, 34, 54, 245, 196, + 98, 183, 16, 35, 237, 119, 98, 183, 16, 35, 245, 227, 98, 183, 16, 35, + 234, 69, 98, 183, 16, 35, 254, 71, 98, 183, 16, 35, 234, 45, 98, 183, 16, + 35, 237, 38, 98, 183, 16, 35, 237, 39, 98, 183, 16, 35, 253, 229, 98, + 183, 16, 35, 225, 53, 98, 183, 16, 35, 230, 170, 98, 183, 16, 35, 231, + 175, 98, 183, 16, 35, 249, 87, 40, 243, 122, 40, 246, 144, 40, 246, 105, + 235, 49, 235, 66, 55, 34, 52, 60, 34, 52, 72, 34, 52, 68, 34, 52, 73, 34, + 52, 74, 34, 52, 175, 34, 52, 236, 113, 34, 52, 236, 7, 34, 52, 236, 184, + 34, 52, 236, 57, 34, 52, 226, 177, 34, 52, 224, 140, 34, 52, 223, 103, + 34, 52, 226, 94, 34, 52, 224, 26, 34, 52, 222, 155, 34, 52, 221, 205, 34, + 52, 221, 0, 34, 52, 222, 87, 34, 52, 101, 34, 52, 208, 34, 52, 232, 62, + 34, 52, 231, 144, 34, 52, 232, 141, 34, 52, 231, 204, 34, 52, 155, 34, + 52, 243, 112, 34, 52, 242, 173, 34, 52, 243, 162, 34, 52, 243, 4, 34, 52, + 196, 34, 52, 233, 196, 34, 52, 233, 99, 34, 52, 234, 25, 34, 52, 233, + 136, 34, 52, 184, 34, 52, 217, 200, 34, 52, 217, 231, 34, 52, 203, 34, + 52, 227, 147, 34, 52, 227, 22, 34, 52, 227, 216, 34, 52, 227, 75, 34, 52, + 219, 7, 34, 52, 218, 204, 34, 52, 218, 227, 34, 52, 218, 187, 40, 254, + 91, 40, 254, 15, 40, 254, 108, 40, 255, 16, 40, 237, 199, 40, 237, 172, + 40, 220, 66, 40, 246, 124, 40, 246, 248, 40, 230, 130, 40, 230, 125, 40, + 236, 242, 40, 236, 214, 40, 236, 212, 40, 244, 217, 40, 244, 225, 40, + 244, 94, 40, 244, 90, 40, 235, 203, 40, 244, 84, 40, 236, 97, 40, 236, + 96, 40, 236, 95, 40, 236, 94, 40, 243, 251, 40, 243, 250, 40, 235, 244, + 40, 235, 246, 40, 236, 180, 40, 236, 32, 40, 236, 39, 40, 226, 162, 40, + 226, 136, 40, 224, 85, 40, 225, 58, 40, 225, 57, 40, 249, 204, 40, 249, + 45, 40, 248, 146, 40, 221, 134, 40, 232, 214, 40, 231, 176, 40, 243, 199, + 40, 230, 40, 40, 230, 39, 40, 252, 235, 40, 229, 105, 40, 229, 74, 40, + 229, 75, 40, 252, 65, 40, 242, 172, 40, 242, 168, 40, 251, 223, 40, 242, + 155, 40, 243, 143, 40, 229, 150, 40, 229, 178, 40, 243, 129, 40, 229, + 176, 40, 229, 189, 40, 252, 133, 40, 229, 27, 40, 252, 31, 40, 242, 249, + 40, 229, 22, 40, 242, 245, 40, 242, 246, 40, 234, 98, 40, 234, 95, 40, + 234, 102, 40, 234, 59, 40, 234, 80, 40, 233, 167, 40, 233, 149, 40, 233, + 148, 40, 234, 9, 40, 234, 7, 40, 234, 10, 40, 218, 75, 40, 218, 73, 40, + 217, 190, 40, 227, 86, 40, 227, 90, 40, 227, 3, 40, 226, 254, 40, 227, + 188, 40, 227, 186, 40, 218, 239, 98, 183, 16, 35, 242, 184, 217, 84, 98, + 183, 16, 35, 242, 184, 107, 98, 183, 16, 35, 242, 184, 103, 98, 183, 16, + 35, 242, 184, 160, 98, 183, 16, 35, 242, 184, 154, 98, 183, 16, 35, 242, + 184, 174, 98, 183, 16, 35, 242, 184, 182, 98, 183, 16, 35, 242, 184, 191, + 98, 183, 16, 35, 242, 184, 185, 98, 183, 16, 35, 242, 184, 190, 98, 183, + 16, 35, 242, 184, 222, 65, 98, 183, 16, 35, 242, 184, 246, 211, 98, 183, + 16, 35, 242, 184, 220, 221, 98, 183, 16, 35, 242, 184, 221, 247, 98, 183, + 16, 35, 242, 184, 245, 111, 98, 183, 16, 35, 242, 184, 245, 200, 98, 183, + 16, 35, 242, 184, 224, 77, 98, 183, 16, 35, 242, 184, 225, 41, 98, 183, + 16, 35, 242, 184, 246, 233, 98, 183, 16, 35, 242, 184, 232, 29, 98, 183, + 16, 35, 242, 184, 220, 219, 98, 183, 16, 35, 242, 184, 220, 213, 98, 183, + 16, 35, 242, 184, 220, 209, 98, 183, 16, 35, 242, 184, 220, 210, 98, 183, + 16, 35, 242, 184, 220, 215, 40, 242, 178, 40, 249, 207, 40, 253, 232, 40, + 135, 40, 230, 79, 40, 229, 201, 40, 248, 169, 40, 248, 170, 223, 226, 40, + 248, 170, 250, 88, 40, 237, 137, 40, 246, 147, 232, 219, 243, 144, 40, + 246, 147, 232, 219, 222, 221, 40, 246, 147, 232, 219, 222, 132, 40, 246, + 147, 232, 219, 234, 6, 40, 250, 120, 40, 230, 44, 254, 133, 40, 208, 40, + 233, 100, 60, 40, 196, 40, 175, 40, 236, 187, 40, 234, 41, 40, 244, 205, + 40, 251, 161, 40, 236, 186, 40, 229, 144, 40, 232, 119, 40, 233, 100, + 246, 74, 40, 233, 100, 245, 67, 40, 233, 230, 40, 236, 151, 40, 242, 116, + 40, 236, 115, 40, 233, 198, 40, 244, 105, 40, 221, 207, 40, 233, 100, + 153, 40, 233, 143, 40, 248, 177, 40, 236, 68, 40, 245, 141, 40, 231, 219, + 40, 233, 100, 189, 40, 233, 140, 40, 250, 183, 40, 236, 62, 40, 233, 141, + 223, 226, 40, 250, 184, 223, 226, 40, 234, 187, 223, 226, 40, 236, 63, + 223, 226, 40, 233, 141, 250, 88, 40, 250, 184, 250, 88, 40, 234, 187, + 250, 88, 40, 236, 63, 250, 88, 40, 234, 187, 104, 198, 40, 234, 187, 104, + 226, 235, 223, 226, 40, 187, 40, 236, 26, 40, 233, 102, 40, 244, 48, 40, + 227, 252, 40, 227, 253, 104, 198, 40, 227, 253, 104, 226, 235, 223, 226, + 40, 228, 213, 40, 231, 148, 40, 233, 100, 198, 40, 233, 101, 40, 228, + 183, 40, 231, 87, 40, 233, 100, 216, 216, 40, 233, 52, 40, 235, 237, 40, + 233, 53, 234, 9, 40, 228, 182, 40, 231, 86, 40, 233, 100, 219, 40, 40, + 233, 50, 40, 235, 235, 40, 233, 51, 234, 9, 40, 237, 18, 230, 159, 40, + 234, 187, 230, 159, 40, 254, 140, 40, 252, 20, 40, 251, 115, 40, 251, + 100, 40, 251, 203, 104, 236, 151, 40, 250, 182, 40, 249, 134, 40, 243, + 237, 40, 155, 40, 242, 179, 40, 237, 223, 40, 236, 75, 40, 236, 63, 251, + 142, 40, 236, 9, 40, 235, 15, 40, 235, 14, 40, 235, 8, 40, 234, 199, 40, + 234, 42, 224, 43, 40, 233, 166, 40, 233, 129, 40, 229, 142, 40, 229, 40, + 40, 229, 5, 40, 229, 3, 40, 223, 220, 40, 223, 41, 40, 218, 228, 40, 220, + 11, 104, 189, 40, 112, 104, 189, 98, 183, 16, 35, 249, 137, 107, 98, 183, + 16, 35, 249, 137, 103, 98, 183, 16, 35, 249, 137, 160, 98, 183, 16, 35, + 249, 137, 154, 98, 183, 16, 35, 249, 137, 174, 98, 183, 16, 35, 249, 137, + 182, 98, 183, 16, 35, 249, 137, 191, 98, 183, 16, 35, 249, 137, 185, 98, + 183, 16, 35, 249, 137, 190, 98, 183, 16, 35, 249, 137, 222, 65, 98, 183, + 16, 35, 249, 137, 246, 211, 98, 183, 16, 35, 249, 137, 220, 221, 98, 183, + 16, 35, 249, 137, 221, 247, 98, 183, 16, 35, 249, 137, 245, 111, 98, 183, + 16, 35, 249, 137, 245, 200, 98, 183, 16, 35, 249, 137, 224, 77, 98, 183, + 16, 35, 249, 137, 225, 41, 98, 183, 16, 35, 249, 137, 246, 233, 98, 183, + 16, 35, 249, 137, 232, 29, 98, 183, 16, 35, 249, 137, 220, 219, 98, 183, + 16, 35, 249, 137, 220, 213, 98, 183, 16, 35, 249, 137, 220, 209, 98, 183, + 16, 35, 249, 137, 220, 210, 98, 183, 16, 35, 249, 137, 220, 215, 98, 183, + 16, 35, 249, 137, 220, 216, 98, 183, 16, 35, 249, 137, 220, 211, 98, 183, + 16, 35, 249, 137, 220, 212, 98, 183, 16, 35, 249, 137, 220, 218, 98, 183, + 16, 35, 249, 137, 220, 214, 98, 183, 16, 35, 249, 137, 221, 245, 98, 183, + 16, 35, 249, 137, 221, 244, 40, 244, 240, 205, 35, 222, 23, 250, 108, + 243, 151, 205, 35, 222, 23, 227, 213, 247, 8, 205, 35, 248, 244, 253, + 245, 222, 23, 252, 130, 205, 35, 217, 211, 245, 137, 205, 35, 219, 1, + 205, 35, 250, 155, 205, 35, 222, 23, 254, 30, 205, 35, 242, 253, 221, + 136, 205, 35, 3, 222, 120, 205, 35, 221, 100, 205, 35, 229, 196, 205, 35, + 223, 158, 205, 35, 245, 218, 205, 35, 244, 32, 229, 15, 205, 35, 233, + 132, 205, 35, 246, 175, 205, 35, 245, 138, 205, 35, 218, 172, 230, 139, + 222, 23, 249, 88, 205, 35, 254, 75, 205, 35, 250, 139, 205, 35, 252, 59, + 221, 224, 205, 35, 244, 46, 205, 35, 223, 237, 254, 90, 205, 35, 227, + 162, 205, 35, 237, 194, 205, 35, 244, 32, 222, 120, 205, 35, 233, 106, + 250, 122, 205, 35, 244, 32, 228, 240, 205, 35, 222, 23, 255, 4, 218, 240, + 205, 35, 222, 23, 250, 201, 245, 179, 205, 35, 237, 206, 205, 35, 247, + 90, 205, 35, 227, 165, 205, 35, 244, 32, 229, 10, 205, 35, 228, 227, 205, + 35, 249, 151, 117, 222, 23, 235, 58, 205, 35, 222, 23, 245, 246, 205, 35, + 230, 109, 205, 35, 230, 173, 205, 35, 249, 66, 205, 35, 249, 84, 205, 35, + 237, 217, 205, 35, 252, 11, 205, 35, 250, 170, 199, 234, 12, 205, 35, + 244, 212, 221, 136, 205, 35, 228, 187, 220, 54, 205, 35, 230, 108, 205, + 35, 222, 23, 218, 221, 205, 35, 227, 156, 205, 35, 222, 23, 251, 121, + 205, 35, 222, 23, 254, 26, 221, 221, 205, 35, 222, 23, 236, 181, 223, + 141, 233, 107, 205, 35, 249, 43, 205, 35, 222, 23, 234, 61, 234, 99, 205, + 35, 255, 5, 205, 35, 222, 23, 218, 252, 205, 35, 222, 23, 244, 177, 218, + 194, 205, 35, 222, 23, 237, 44, 235, 165, 205, 35, 248, 200, 205, 35, + 235, 50, 205, 35, 237, 197, 221, 59, 205, 35, 3, 228, 240, 205, 35, 254, + 210, 250, 162, 205, 35, 252, 132, 250, 162, 8, 4, 237, 140, 8, 4, 237, + 134, 8, 4, 72, 8, 4, 237, 159, 8, 4, 238, 24, 8, 4, 238, 7, 8, 4, 238, + 26, 8, 4, 238, 25, 8, 4, 253, 244, 8, 4, 253, 214, 8, 4, 60, 8, 4, 254, + 92, 8, 4, 220, 64, 8, 4, 220, 67, 8, 4, 220, 65, 8, 4, 230, 92, 8, 4, + 230, 68, 8, 4, 74, 8, 4, 230, 120, 8, 4, 246, 98, 8, 4, 73, 8, 4, 218, + 165, 8, 4, 252, 60, 8, 4, 252, 57, 8, 4, 252, 84, 8, 4, 252, 68, 8, 4, + 252, 78, 8, 4, 252, 77, 8, 4, 252, 80, 8, 4, 252, 79, 8, 4, 252, 184, 8, + 4, 252, 180, 8, 4, 252, 237, 8, 4, 252, 202, 8, 4, 251, 231, 8, 4, 251, + 235, 8, 4, 251, 232, 8, 4, 252, 30, 8, 4, 252, 21, 8, 4, 252, 41, 8, 4, + 252, 32, 8, 4, 252, 97, 8, 4, 252, 144, 8, 4, 252, 109, 8, 4, 251, 221, + 8, 4, 251, 219, 8, 4, 251, 248, 8, 4, 251, 230, 8, 4, 251, 224, 8, 4, + 251, 228, 8, 4, 251, 207, 8, 4, 251, 206, 8, 4, 251, 212, 8, 4, 251, 210, + 8, 4, 251, 208, 8, 4, 251, 209, 8, 4, 229, 64, 8, 4, 229, 60, 8, 4, 229, + 108, 8, 4, 229, 70, 8, 4, 229, 79, 8, 4, 229, 103, 8, 4, 229, 101, 8, 4, + 229, 215, 8, 4, 229, 206, 8, 4, 187, 8, 4, 229, 246, 8, 4, 228, 192, 8, + 4, 228, 194, 8, 4, 228, 193, 8, 4, 229, 12, 8, 4, 229, 8, 8, 4, 229, 37, + 8, 4, 229, 19, 8, 4, 228, 185, 8, 4, 228, 184, 8, 4, 228, 202, 8, 4, 228, + 191, 8, 4, 228, 188, 8, 4, 228, 190, 8, 4, 228, 167, 8, 4, 228, 166, 8, + 4, 228, 171, 8, 4, 228, 170, 8, 4, 228, 168, 8, 4, 228, 169, 8, 4, 252, + 165, 8, 4, 252, 164, 8, 4, 252, 171, 8, 4, 252, 166, 8, 4, 252, 168, 8, + 4, 252, 167, 8, 4, 252, 170, 8, 4, 252, 169, 8, 4, 252, 176, 8, 4, 252, + 175, 8, 4, 252, 178, 8, 4, 252, 177, 8, 4, 252, 156, 8, 4, 252, 158, 8, + 4, 252, 157, 8, 4, 252, 161, 8, 4, 252, 160, 8, 4, 252, 163, 8, 4, 252, + 162, 8, 4, 252, 172, 8, 4, 252, 174, 8, 4, 252, 173, 8, 4, 252, 152, 8, + 4, 252, 151, 8, 4, 252, 159, 8, 4, 252, 155, 8, 4, 252, 153, 8, 4, 252, + 154, 8, 4, 252, 148, 8, 4, 252, 147, 8, 4, 252, 150, 8, 4, 252, 149, 8, + 4, 232, 188, 8, 4, 232, 187, 8, 4, 232, 193, 8, 4, 232, 189, 8, 4, 232, + 190, 8, 4, 232, 192, 8, 4, 232, 191, 8, 4, 232, 195, 8, 4, 232, 194, 8, + 4, 232, 197, 8, 4, 232, 196, 8, 4, 232, 184, 8, 4, 232, 183, 8, 4, 232, + 186, 8, 4, 232, 185, 8, 4, 232, 178, 8, 4, 232, 177, 8, 4, 232, 182, 8, + 4, 232, 181, 8, 4, 232, 179, 8, 4, 232, 180, 8, 4, 232, 172, 8, 4, 232, + 171, 8, 4, 232, 176, 8, 4, 232, 175, 8, 4, 232, 173, 8, 4, 232, 174, 8, + 4, 243, 46, 8, 4, 243, 45, 8, 4, 243, 51, 8, 4, 243, 47, 8, 4, 243, 48, + 8, 4, 243, 50, 8, 4, 243, 49, 8, 4, 243, 54, 8, 4, 243, 53, 8, 4, 243, + 56, 8, 4, 243, 55, 8, 4, 243, 37, 8, 4, 243, 39, 8, 4, 243, 38, 8, 4, + 243, 42, 8, 4, 243, 41, 8, 4, 243, 44, 8, 4, 243, 43, 8, 4, 243, 33, 8, + 4, 243, 32, 8, 4, 243, 40, 8, 4, 243, 36, 8, 4, 243, 34, 8, 4, 243, 35, + 8, 4, 243, 27, 8, 4, 243, 31, 8, 4, 243, 30, 8, 4, 243, 28, 8, 4, 243, + 29, 8, 4, 233, 145, 8, 4, 233, 144, 8, 4, 233, 196, 8, 4, 233, 151, 8, 4, + 233, 173, 8, 4, 233, 190, 8, 4, 233, 189, 8, 4, 234, 51, 8, 4, 234, 47, + 8, 4, 196, 8, 4, 234, 78, 8, 4, 233, 75, 8, 4, 233, 74, 8, 4, 233, 77, 8, + 4, 233, 76, 8, 4, 233, 111, 8, 4, 233, 103, 8, 4, 233, 136, 8, 4, 233, + 115, 8, 4, 233, 232, 8, 4, 234, 25, 8, 4, 233, 57, 8, 4, 233, 54, 8, 4, + 233, 99, 8, 4, 233, 71, 8, 4, 233, 64, 8, 4, 233, 69, 8, 4, 233, 36, 8, + 4, 233, 35, 8, 4, 233, 41, 8, 4, 233, 38, 8, 4, 245, 172, 8, 4, 245, 168, + 8, 4, 245, 203, 8, 4, 245, 180, 8, 4, 245, 240, 8, 4, 245, 234, 8, 4, + 246, 8, 8, 4, 245, 242, 8, 4, 245, 109, 8, 4, 245, 139, 8, 4, 245, 130, + 8, 4, 245, 80, 8, 4, 245, 79, 8, 4, 245, 92, 8, 4, 245, 85, 8, 4, 245, + 83, 8, 4, 245, 84, 8, 4, 245, 70, 8, 4, 245, 69, 8, 4, 245, 73, 8, 4, + 245, 71, 8, 4, 219, 74, 8, 4, 219, 73, 8, 4, 219, 94, 8, 4, 219, 83, 8, + 4, 219, 89, 8, 4, 219, 87, 8, 4, 219, 91, 8, 4, 219, 90, 8, 4, 219, 172, + 8, 4, 219, 168, 8, 4, 219, 189, 8, 4, 219, 182, 8, 4, 219, 62, 8, 4, 219, + 58, 8, 4, 219, 72, 8, 4, 219, 63, 8, 4, 219, 95, 8, 4, 219, 156, 8, 4, + 219, 51, 8, 4, 219, 50, 8, 4, 219, 56, 8, 4, 219, 54, 8, 4, 219, 52, 8, + 4, 219, 53, 8, 4, 219, 44, 8, 4, 219, 43, 8, 4, 219, 48, 8, 4, 219, 47, + 8, 4, 219, 45, 8, 4, 219, 46, 8, 4, 248, 197, 8, 4, 248, 185, 8, 4, 249, + 15, 8, 4, 248, 216, 8, 4, 248, 249, 8, 4, 248, 253, 8, 4, 248, 252, 8, 4, + 249, 143, 8, 4, 249, 138, 8, 4, 249, 207, 8, 4, 249, 162, 8, 4, 247, 95, + 8, 4, 247, 96, 8, 4, 248, 145, 8, 4, 247, 128, 8, 4, 248, 167, 8, 4, 248, + 147, 8, 4, 249, 41, 8, 4, 249, 92, 8, 4, 249, 53, 8, 4, 247, 88, 8, 4, + 247, 86, 8, 4, 247, 111, 8, 4, 247, 94, 8, 4, 247, 89, 8, 4, 247, 92, 8, + 4, 221, 161, 8, 4, 221, 157, 8, 4, 221, 205, 8, 4, 221, 169, 8, 4, 221, + 198, 8, 4, 221, 200, 8, 4, 221, 199, 8, 4, 222, 110, 8, 4, 222, 97, 8, 4, + 222, 155, 8, 4, 222, 115, 8, 4, 220, 244, 8, 4, 220, 243, 8, 4, 220, 246, + 8, 4, 220, 245, 8, 4, 221, 113, 8, 4, 221, 110, 8, 4, 101, 8, 4, 221, + 119, 8, 4, 222, 40, 8, 4, 222, 87, 8, 4, 222, 57, 8, 4, 220, 231, 8, 4, + 220, 228, 8, 4, 221, 0, 8, 4, 220, 242, 8, 4, 220, 232, 8, 4, 220, 240, + 8, 4, 249, 109, 8, 4, 249, 108, 8, 4, 249, 114, 8, 4, 249, 110, 8, 4, + 249, 111, 8, 4, 249, 113, 8, 4, 249, 112, 8, 4, 249, 125, 8, 4, 249, 124, + 8, 4, 249, 132, 8, 4, 249, 126, 8, 4, 249, 99, 8, 4, 249, 101, 8, 4, 249, + 100, 8, 4, 249, 104, 8, 4, 249, 103, 8, 4, 249, 107, 8, 4, 249, 105, 8, + 4, 249, 117, 8, 4, 249, 120, 8, 4, 249, 118, 8, 4, 249, 95, 8, 4, 249, + 94, 8, 4, 249, 102, 8, 4, 249, 98, 8, 4, 249, 96, 8, 4, 249, 97, 8, 4, + 232, 156, 8, 4, 232, 155, 8, 4, 232, 160, 8, 4, 232, 157, 8, 4, 232, 158, + 8, 4, 232, 159, 8, 4, 232, 166, 8, 4, 232, 165, 8, 4, 232, 169, 8, 4, + 232, 167, 8, 4, 232, 150, 8, 4, 232, 149, 8, 4, 232, 154, 8, 4, 232, 151, + 8, 4, 232, 161, 8, 4, 232, 164, 8, 4, 232, 162, 8, 4, 232, 144, 8, 4, + 232, 143, 8, 4, 232, 148, 8, 4, 232, 147, 8, 4, 232, 145, 8, 4, 232, 146, + 8, 4, 243, 13, 8, 4, 243, 12, 8, 4, 243, 19, 8, 4, 243, 14, 8, 4, 243, + 16, 8, 4, 243, 15, 8, 4, 243, 18, 8, 4, 243, 17, 8, 4, 243, 24, 8, 4, + 243, 23, 8, 4, 243, 26, 8, 4, 243, 25, 8, 4, 243, 7, 8, 4, 243, 8, 8, 4, + 243, 10, 8, 4, 243, 9, 8, 4, 243, 11, 8, 4, 243, 20, 8, 4, 243, 22, 8, 4, + 243, 21, 8, 4, 243, 6, 8, 4, 232, 21, 8, 4, 232, 20, 8, 4, 232, 62, 8, 4, + 232, 24, 8, 4, 232, 44, 8, 4, 232, 58, 8, 4, 232, 57, 8, 4, 232, 201, 8, + 4, 208, 8, 4, 232, 212, 8, 4, 231, 95, 8, 4, 231, 97, 8, 4, 231, 96, 8, + 4, 231, 184, 8, 4, 231, 173, 8, 4, 231, 204, 8, 4, 231, 191, 8, 4, 232, + 121, 8, 4, 232, 141, 8, 4, 232, 130, 8, 4, 231, 91, 8, 4, 231, 88, 8, 4, + 231, 144, 8, 4, 231, 94, 8, 4, 231, 92, 8, 4, 231, 93, 8, 4, 243, 77, 8, + 4, 243, 76, 8, 4, 243, 82, 8, 4, 243, 78, 8, 4, 243, 79, 8, 4, 243, 81, + 8, 4, 243, 80, 8, 4, 243, 87, 8, 4, 243, 86, 8, 4, 243, 89, 8, 4, 243, + 88, 8, 4, 243, 69, 8, 4, 243, 71, 8, 4, 243, 70, 8, 4, 243, 73, 8, 4, + 243, 75, 8, 4, 243, 74, 8, 4, 243, 83, 8, 4, 243, 85, 8, 4, 243, 84, 8, + 4, 243, 65, 8, 4, 243, 64, 8, 4, 243, 72, 8, 4, 243, 68, 8, 4, 243, 66, + 8, 4, 243, 67, 8, 4, 243, 59, 8, 4, 243, 58, 8, 4, 243, 63, 8, 4, 243, + 62, 8, 4, 243, 60, 8, 4, 243, 61, 8, 4, 235, 27, 8, 4, 235, 22, 8, 4, + 235, 67, 8, 4, 235, 32, 8, 4, 235, 61, 8, 4, 235, 60, 8, 4, 235, 63, 8, + 4, 235, 62, 8, 4, 235, 141, 8, 4, 235, 133, 8, 4, 235, 188, 8, 4, 235, + 147, 8, 4, 234, 214, 8, 4, 234, 213, 8, 4, 234, 216, 8, 4, 234, 215, 8, + 4, 234, 242, 8, 4, 234, 236, 8, 4, 235, 12, 8, 4, 234, 245, 8, 4, 235, + 82, 8, 4, 235, 122, 8, 4, 235, 89, 8, 4, 234, 209, 8, 4, 234, 208, 8, 4, + 234, 231, 8, 4, 234, 212, 8, 4, 234, 210, 8, 4, 234, 211, 8, 4, 234, 191, + 8, 4, 234, 190, 8, 4, 234, 198, 8, 4, 234, 194, 8, 4, 234, 192, 8, 4, + 234, 193, 8, 4, 244, 80, 8, 4, 244, 79, 8, 4, 244, 103, 8, 4, 244, 89, 8, + 4, 244, 96, 8, 4, 244, 95, 8, 4, 244, 98, 8, 4, 244, 97, 8, 4, 244, 214, + 8, 4, 244, 209, 8, 4, 245, 0, 8, 4, 244, 223, 8, 4, 244, 0, 8, 4, 243, + 255, 8, 4, 244, 2, 8, 4, 244, 1, 8, 4, 244, 51, 8, 4, 244, 49, 8, 4, 244, + 68, 8, 4, 244, 59, 8, 4, 244, 164, 8, 4, 244, 162, 8, 4, 244, 191, 8, 4, + 244, 174, 8, 4, 243, 246, 8, 4, 243, 245, 8, 4, 244, 17, 8, 4, 243, 254, + 8, 4, 243, 247, 8, 4, 243, 253, 8, 4, 236, 89, 8, 4, 236, 88, 8, 4, 236, + 113, 8, 4, 236, 99, 8, 4, 236, 107, 8, 4, 236, 109, 8, 4, 236, 108, 8, 4, + 236, 203, 8, 4, 236, 192, 8, 4, 175, 8, 4, 236, 227, 8, 4, 235, 250, 8, + 4, 235, 252, 8, 4, 235, 251, 8, 4, 236, 31, 8, 4, 236, 27, 8, 4, 236, 57, + 8, 4, 236, 38, 8, 4, 236, 159, 8, 4, 236, 156, 8, 4, 236, 184, 8, 4, 236, + 162, 8, 4, 235, 240, 8, 4, 235, 238, 8, 4, 236, 7, 8, 4, 235, 249, 8, 4, + 235, 243, 8, 4, 235, 247, 8, 4, 244, 146, 8, 4, 244, 145, 8, 4, 244, 150, + 8, 4, 244, 147, 8, 4, 244, 149, 8, 4, 244, 148, 8, 4, 244, 157, 8, 4, + 244, 156, 8, 4, 244, 160, 8, 4, 244, 158, 8, 4, 244, 137, 8, 4, 244, 136, + 8, 4, 244, 139, 8, 4, 244, 138, 8, 4, 244, 142, 8, 4, 244, 141, 8, 4, + 244, 144, 8, 4, 244, 143, 8, 4, 244, 152, 8, 4, 244, 151, 8, 4, 244, 155, + 8, 4, 244, 153, 8, 4, 244, 132, 8, 4, 244, 131, 8, 4, 244, 140, 8, 4, + 244, 135, 8, 4, 244, 133, 8, 4, 244, 134, 8, 4, 233, 214, 8, 4, 233, 215, + 8, 4, 233, 227, 8, 4, 233, 226, 8, 4, 233, 229, 8, 4, 233, 228, 8, 4, + 233, 205, 8, 4, 233, 207, 8, 4, 233, 206, 8, 4, 233, 210, 8, 4, 233, 209, + 8, 4, 233, 212, 8, 4, 233, 211, 8, 4, 233, 216, 8, 4, 233, 218, 8, 4, + 233, 217, 8, 4, 233, 201, 8, 4, 233, 200, 8, 4, 233, 208, 8, 4, 233, 204, + 8, 4, 233, 202, 8, 4, 233, 203, 8, 4, 242, 133, 8, 4, 242, 132, 8, 4, + 242, 139, 8, 4, 242, 134, 8, 4, 242, 136, 8, 4, 242, 135, 8, 4, 242, 138, + 8, 4, 242, 137, 8, 4, 242, 144, 8, 4, 242, 143, 8, 4, 242, 146, 8, 4, + 242, 145, 8, 4, 242, 125, 8, 4, 242, 124, 8, 4, 242, 127, 8, 4, 242, 126, + 8, 4, 242, 129, 8, 4, 242, 128, 8, 4, 242, 131, 8, 4, 242, 130, 8, 4, + 242, 140, 8, 4, 242, 142, 8, 4, 242, 141, 8, 4, 232, 89, 8, 4, 232, 91, + 8, 4, 232, 90, 8, 4, 232, 108, 8, 4, 232, 107, 8, 4, 232, 115, 8, 4, 232, + 110, 8, 4, 232, 71, 8, 4, 232, 70, 8, 4, 232, 72, 8, 4, 232, 78, 8, 4, + 232, 75, 8, 4, 232, 84, 8, 4, 232, 79, 8, 4, 232, 102, 8, 4, 232, 106, 8, + 4, 232, 103, 8, 4, 243, 92, 8, 4, 243, 100, 8, 4, 243, 108, 8, 4, 243, + 173, 8, 4, 243, 167, 8, 4, 155, 8, 4, 243, 183, 8, 4, 242, 157, 8, 4, + 242, 156, 8, 4, 242, 159, 8, 4, 242, 158, 8, 4, 242, 186, 8, 4, 242, 181, + 8, 4, 243, 4, 8, 4, 242, 244, 8, 4, 243, 125, 8, 4, 243, 162, 8, 4, 243, + 135, 8, 4, 218, 243, 8, 4, 218, 231, 8, 4, 219, 7, 8, 4, 218, 251, 8, 4, + 218, 157, 8, 4, 218, 159, 8, 4, 218, 158, 8, 4, 218, 170, 8, 4, 218, 187, + 8, 4, 218, 175, 8, 4, 218, 214, 8, 4, 218, 227, 8, 4, 218, 218, 8, 4, + 217, 28, 8, 4, 217, 27, 8, 4, 217, 42, 8, 4, 217, 30, 8, 4, 217, 35, 8, + 4, 217, 37, 8, 4, 217, 36, 8, 4, 217, 100, 8, 4, 217, 97, 8, 4, 217, 114, + 8, 4, 217, 103, 8, 4, 217, 6, 8, 4, 217, 8, 8, 4, 217, 7, 8, 4, 217, 17, + 8, 4, 217, 16, 8, 4, 217, 21, 8, 4, 217, 18, 8, 4, 217, 82, 8, 4, 217, + 92, 8, 4, 217, 86, 8, 4, 217, 2, 8, 4, 217, 1, 8, 4, 217, 13, 8, 4, 217, + 5, 8, 4, 217, 3, 8, 4, 217, 4, 8, 4, 216, 249, 8, 4, 216, 248, 8, 4, 216, + 254, 8, 4, 216, 252, 8, 4, 216, 250, 8, 4, 216, 251, 8, 4, 250, 215, 8, + 4, 250, 212, 8, 4, 250, 235, 8, 4, 250, 223, 8, 4, 250, 232, 8, 4, 250, + 226, 8, 4, 250, 234, 8, 4, 250, 233, 8, 4, 251, 124, 8, 4, 251, 118, 8, + 4, 251, 169, 8, 4, 251, 143, 8, 4, 250, 84, 8, 4, 250, 86, 8, 4, 250, 85, + 8, 4, 250, 116, 8, 4, 250, 109, 8, 4, 250, 182, 8, 4, 250, 129, 8, 4, + 251, 71, 8, 4, 251, 99, 8, 4, 251, 75, 8, 4, 250, 68, 8, 4, 250, 67, 8, + 4, 250, 92, 8, 4, 250, 82, 8, 4, 250, 71, 8, 4, 250, 81, 8, 4, 250, 49, + 8, 4, 250, 48, 8, 4, 250, 58, 8, 4, 250, 55, 8, 4, 250, 50, 8, 4, 250, + 52, 8, 4, 216, 232, 8, 4, 216, 231, 8, 4, 216, 238, 8, 4, 216, 233, 8, 4, + 216, 235, 8, 4, 216, 234, 8, 4, 216, 237, 8, 4, 216, 236, 8, 4, 216, 244, + 8, 4, 216, 243, 8, 4, 216, 247, 8, 4, 216, 245, 8, 4, 216, 228, 8, 4, + 216, 230, 8, 4, 216, 229, 8, 4, 216, 239, 8, 4, 216, 242, 8, 4, 216, 240, + 8, 4, 216, 223, 8, 4, 216, 227, 8, 4, 216, 226, 8, 4, 216, 224, 8, 4, + 216, 225, 8, 4, 216, 218, 8, 4, 216, 217, 8, 4, 216, 222, 8, 4, 216, 221, + 8, 4, 216, 219, 8, 4, 216, 220, 8, 4, 231, 31, 8, 4, 231, 30, 8, 4, 231, + 36, 8, 4, 231, 32, 8, 4, 231, 33, 8, 4, 231, 35, 8, 4, 231, 34, 8, 4, + 231, 40, 8, 4, 231, 39, 8, 4, 231, 42, 8, 4, 231, 41, 8, 4, 231, 25, 8, + 4, 231, 26, 8, 4, 231, 28, 8, 4, 231, 29, 8, 4, 231, 37, 8, 4, 231, 38, + 8, 4, 231, 21, 8, 4, 231, 27, 8, 4, 231, 24, 8, 4, 231, 22, 8, 4, 231, + 23, 8, 4, 231, 16, 8, 4, 231, 15, 8, 4, 231, 20, 8, 4, 231, 19, 8, 4, + 231, 17, 8, 4, 231, 18, 8, 4, 224, 84, 8, 4, 182, 8, 4, 224, 140, 8, 4, + 224, 86, 8, 4, 224, 133, 8, 4, 224, 135, 8, 4, 224, 134, 8, 4, 226, 127, + 8, 4, 226, 120, 8, 4, 226, 177, 8, 4, 226, 133, 8, 4, 223, 63, 8, 4, 223, + 65, 8, 4, 223, 64, 8, 4, 224, 12, 8, 4, 224, 2, 8, 4, 224, 26, 8, 4, 224, + 13, 8, 4, 225, 36, 8, 4, 226, 94, 8, 4, 225, 56, 8, 4, 223, 44, 8, 4, + 223, 42, 8, 4, 223, 103, 8, 4, 223, 62, 8, 4, 223, 46, 8, 4, 223, 53, 8, + 4, 222, 215, 8, 4, 222, 214, 8, 4, 223, 21, 8, 4, 222, 220, 8, 4, 222, + 216, 8, 4, 222, 219, 8, 4, 223, 184, 8, 4, 223, 183, 8, 4, 223, 189, 8, + 4, 223, 185, 8, 4, 223, 186, 8, 4, 223, 188, 8, 4, 223, 187, 8, 4, 223, + 196, 8, 4, 223, 195, 8, 4, 223, 218, 8, 4, 223, 197, 8, 4, 223, 180, 8, + 4, 223, 179, 8, 4, 223, 182, 8, 4, 223, 181, 8, 4, 223, 191, 8, 4, 223, + 194, 8, 4, 223, 192, 8, 4, 223, 176, 8, 4, 223, 175, 8, 4, 223, 178, 8, + 4, 223, 177, 8, 4, 223, 170, 8, 4, 223, 169, 8, 4, 223, 174, 8, 4, 223, + 173, 8, 4, 223, 171, 8, 4, 223, 172, 8, 4, 217, 75, 8, 4, 217, 74, 8, 4, + 217, 80, 8, 4, 217, 77, 8, 4, 217, 57, 8, 4, 217, 59, 8, 4, 217, 58, 8, + 4, 217, 62, 8, 4, 217, 61, 8, 4, 217, 65, 8, 4, 217, 63, 8, 4, 217, 69, + 8, 4, 217, 68, 8, 4, 217, 72, 8, 4, 217, 70, 8, 4, 217, 53, 8, 4, 217, + 52, 8, 4, 217, 60, 8, 4, 217, 56, 8, 4, 217, 54, 8, 4, 217, 55, 8, 4, + 217, 45, 8, 4, 217, 44, 8, 4, 217, 49, 8, 4, 217, 48, 8, 4, 217, 46, 8, + 4, 217, 47, 8, 4, 251, 51, 8, 4, 251, 48, 8, 4, 251, 69, 8, 4, 251, 57, + 8, 4, 250, 249, 8, 4, 250, 248, 8, 4, 250, 251, 8, 4, 250, 250, 8, 4, + 251, 5, 8, 4, 251, 4, 8, 4, 251, 11, 8, 4, 251, 7, 8, 4, 251, 36, 8, 4, + 251, 34, 8, 4, 251, 46, 8, 4, 251, 38, 8, 4, 250, 243, 8, 4, 250, 253, 8, + 4, 250, 247, 8, 4, 250, 244, 8, 4, 250, 246, 8, 4, 250, 237, 8, 4, 250, + 236, 8, 4, 250, 241, 8, 4, 250, 240, 8, 4, 250, 238, 8, 4, 250, 239, 8, + 4, 227, 51, 8, 4, 227, 52, 8, 4, 227, 38, 8, 4, 227, 39, 8, 4, 227, 42, + 8, 4, 227, 41, 8, 4, 227, 44, 8, 4, 227, 43, 8, 4, 227, 46, 8, 4, 227, + 45, 8, 4, 227, 50, 8, 4, 227, 47, 8, 4, 227, 34, 8, 4, 227, 33, 8, 4, + 227, 40, 8, 4, 227, 37, 8, 4, 227, 35, 8, 4, 227, 36, 8, 4, 227, 28, 8, + 4, 227, 27, 8, 4, 227, 32, 8, 4, 227, 31, 8, 4, 227, 29, 8, 4, 227, 30, + 8, 4, 231, 169, 8, 4, 231, 168, 8, 4, 231, 171, 8, 4, 231, 170, 8, 4, + 231, 161, 8, 4, 231, 163, 8, 4, 231, 162, 8, 4, 231, 165, 8, 4, 231, 164, + 8, 4, 231, 167, 8, 4, 231, 166, 8, 4, 231, 156, 8, 4, 231, 155, 8, 4, + 231, 160, 8, 4, 231, 159, 8, 4, 231, 157, 8, 4, 231, 158, 8, 4, 231, 150, + 8, 4, 231, 149, 8, 4, 231, 154, 8, 4, 231, 153, 8, 4, 231, 151, 8, 4, + 231, 152, 8, 4, 224, 253, 8, 4, 224, 250, 8, 4, 225, 25, 8, 4, 225, 7, 8, + 4, 224, 163, 8, 4, 224, 165, 8, 4, 224, 164, 8, 4, 224, 178, 8, 4, 224, + 176, 8, 4, 224, 200, 8, 4, 224, 193, 8, 4, 224, 226, 8, 4, 224, 223, 8, + 4, 224, 246, 8, 4, 224, 233, 8, 4, 224, 159, 8, 4, 224, 158, 8, 4, 224, + 170, 8, 4, 224, 162, 8, 4, 224, 160, 8, 4, 224, 161, 8, 4, 224, 143, 8, + 4, 224, 142, 8, 4, 224, 149, 8, 4, 224, 146, 8, 4, 224, 144, 8, 4, 224, + 145, 8, 4, 227, 228, 8, 4, 227, 223, 8, 4, 203, 8, 4, 227, 233, 8, 4, + 227, 6, 8, 4, 227, 8, 8, 4, 227, 7, 8, 4, 227, 60, 8, 4, 227, 54, 8, 4, + 227, 75, 8, 4, 227, 63, 8, 4, 227, 155, 8, 4, 227, 216, 8, 4, 227, 185, + 8, 4, 226, 255, 8, 4, 226, 253, 8, 4, 227, 22, 8, 4, 227, 5, 8, 4, 227, + 1, 8, 4, 227, 2, 8, 4, 226, 238, 8, 4, 226, 237, 8, 4, 226, 243, 8, 4, + 226, 241, 8, 4, 226, 239, 8, 4, 226, 240, 8, 4, 237, 89, 8, 4, 237, 88, + 8, 4, 237, 98, 8, 4, 237, 90, 8, 4, 237, 94, 8, 4, 237, 93, 8, 4, 237, + 96, 8, 4, 237, 95, 8, 4, 237, 34, 8, 4, 237, 33, 8, 4, 237, 36, 8, 4, + 237, 35, 8, 4, 237, 47, 8, 4, 237, 46, 8, 4, 237, 59, 8, 4, 237, 49, 8, + 4, 237, 28, 8, 4, 237, 26, 8, 4, 237, 43, 8, 4, 237, 32, 8, 4, 237, 29, + 8, 4, 237, 30, 8, 4, 237, 20, 8, 4, 237, 19, 8, 4, 237, 24, 8, 4, 237, + 23, 8, 4, 237, 21, 8, 4, 237, 22, 8, 4, 228, 114, 8, 4, 228, 112, 8, 4, + 228, 121, 8, 4, 228, 115, 8, 4, 228, 118, 8, 4, 228, 117, 8, 4, 228, 120, + 8, 4, 228, 119, 8, 4, 228, 70, 8, 4, 228, 67, 8, 4, 228, 72, 8, 4, 228, + 71, 8, 4, 228, 101, 8, 4, 228, 100, 8, 4, 228, 110, 8, 4, 228, 104, 8, 4, + 228, 62, 8, 4, 228, 58, 8, 4, 228, 98, 8, 4, 228, 66, 8, 4, 228, 64, 8, + 4, 228, 65, 8, 4, 228, 42, 8, 4, 228, 40, 8, 4, 228, 52, 8, 4, 228, 45, + 8, 4, 228, 43, 8, 4, 228, 44, 8, 4, 237, 78, 8, 4, 237, 77, 8, 4, 237, + 84, 8, 4, 237, 79, 8, 4, 237, 81, 8, 4, 237, 80, 8, 4, 237, 83, 8, 4, + 237, 82, 8, 4, 237, 69, 8, 4, 237, 71, 8, 4, 237, 70, 8, 4, 237, 74, 8, + 4, 237, 73, 8, 4, 237, 76, 8, 4, 237, 75, 8, 4, 237, 65, 8, 4, 237, 64, + 8, 4, 237, 72, 8, 4, 237, 68, 8, 4, 237, 66, 8, 4, 237, 67, 8, 4, 237, + 61, 8, 4, 237, 60, 8, 4, 237, 63, 8, 4, 237, 62, 8, 4, 232, 7, 8, 4, 232, + 6, 8, 4, 232, 13, 8, 4, 232, 8, 8, 4, 232, 10, 8, 4, 232, 9, 8, 4, 232, + 12, 8, 4, 232, 11, 8, 4, 231, 253, 8, 4, 231, 254, 8, 4, 232, 2, 8, 4, + 232, 1, 8, 4, 232, 5, 8, 4, 232, 3, 8, 4, 231, 249, 8, 4, 232, 0, 8, 4, + 231, 252, 8, 4, 231, 250, 8, 4, 231, 251, 8, 4, 231, 244, 8, 4, 231, 243, + 8, 4, 231, 248, 8, 4, 231, 247, 8, 4, 231, 245, 8, 4, 231, 246, 8, 4, + 231, 59, 8, 4, 231, 58, 8, 4, 231, 67, 8, 4, 231, 61, 8, 4, 231, 64, 8, + 4, 231, 63, 8, 4, 231, 66, 8, 4, 231, 65, 8, 4, 231, 47, 8, 4, 231, 49, + 8, 4, 231, 48, 8, 4, 231, 52, 8, 4, 231, 51, 8, 4, 231, 56, 8, 4, 231, + 53, 8, 4, 231, 45, 8, 4, 231, 44, 8, 4, 231, 50, 8, 4, 231, 46, 8, 4, + 218, 123, 8, 4, 218, 122, 8, 4, 218, 130, 8, 4, 218, 125, 8, 4, 218, 127, + 8, 4, 218, 126, 8, 4, 218, 129, 8, 4, 218, 128, 8, 4, 218, 112, 8, 4, + 218, 113, 8, 4, 218, 117, 8, 4, 218, 116, 8, 4, 218, 121, 8, 4, 218, 119, + 8, 4, 218, 94, 8, 4, 218, 92, 8, 4, 218, 104, 8, 4, 218, 97, 8, 4, 218, + 95, 8, 4, 218, 96, 8, 4, 217, 237, 8, 4, 217, 235, 8, 4, 217, 250, 8, 4, + 217, 238, 8, 4, 217, 245, 8, 4, 217, 244, 8, 4, 217, 247, 8, 4, 217, 246, + 8, 4, 217, 185, 8, 4, 217, 184, 8, 4, 217, 187, 8, 4, 217, 186, 8, 4, + 217, 212, 8, 4, 217, 209, 8, 4, 217, 231, 8, 4, 217, 215, 8, 4, 217, 177, + 8, 4, 217, 175, 8, 4, 217, 200, 8, 4, 217, 183, 8, 4, 217, 180, 8, 4, + 217, 181, 8, 4, 217, 160, 8, 4, 217, 159, 8, 4, 217, 166, 8, 4, 217, 163, + 8, 4, 217, 161, 8, 4, 217, 162, 8, 32, 228, 101, 8, 32, 235, 67, 8, 32, + 236, 89, 8, 32, 231, 61, 8, 32, 250, 55, 8, 32, 223, 189, 8, 32, 244, + 143, 8, 32, 244, 174, 8, 32, 233, 196, 8, 32, 242, 133, 8, 32, 234, 193, + 8, 32, 252, 152, 8, 32, 233, 115, 8, 32, 217, 231, 8, 32, 228, 185, 8, + 32, 242, 127, 8, 32, 222, 110, 8, 32, 245, 0, 8, 32, 217, 5, 8, 32, 250, + 49, 8, 32, 249, 97, 8, 32, 251, 228, 8, 32, 244, 139, 8, 32, 231, 53, 8, + 32, 221, 0, 8, 32, 230, 120, 8, 32, 237, 65, 8, 32, 217, 17, 8, 32, 228, + 167, 8, 32, 243, 44, 8, 32, 217, 237, 8, 32, 219, 53, 8, 32, 224, 149, 8, + 32, 219, 156, 8, 32, 217, 114, 8, 32, 237, 59, 8, 32, 231, 24, 8, 32, + 237, 63, 8, 32, 244, 51, 8, 32, 237, 83, 8, 32, 218, 187, 8, 32, 247, + 111, 8, 32, 224, 161, 8, 32, 235, 63, 8, 32, 250, 58, 8, 32, 250, 85, 8, + 32, 250, 223, 8, 32, 242, 130, 8, 32, 224, 253, 8, 32, 217, 4, 8, 32, + 224, 193, 8, 32, 251, 46, 8, 32, 216, 235, 8, 32, 232, 192, 8, 32, 236, + 184, 235, 28, 1, 252, 237, 235, 28, 1, 187, 235, 28, 1, 229, 141, 235, + 28, 1, 249, 207, 235, 28, 1, 222, 155, 235, 28, 1, 222, 35, 235, 28, 1, + 245, 0, 235, 28, 1, 175, 235, 28, 1, 236, 149, 235, 28, 1, 237, 123, 235, + 28, 1, 251, 169, 235, 28, 1, 251, 69, 235, 28, 1, 247, 74, 235, 28, 1, + 221, 55, 235, 28, 1, 221, 47, 235, 28, 1, 196, 235, 28, 1, 208, 235, 28, + 1, 235, 188, 235, 28, 1, 226, 177, 235, 28, 1, 217, 80, 235, 28, 1, 217, + 114, 235, 28, 1, 232, 115, 235, 28, 1, 155, 235, 28, 1, 218, 138, 235, + 28, 1, 243, 121, 235, 28, 1, 246, 8, 235, 28, 1, 219, 7, 235, 28, 1, 225, + 25, 235, 28, 1, 184, 235, 28, 1, 244, 125, 235, 28, 1, 60, 235, 28, 1, + 254, 234, 235, 28, 1, 73, 235, 28, 1, 246, 115, 235, 28, 1, 72, 235, 28, + 1, 74, 235, 28, 1, 68, 235, 28, 1, 220, 110, 235, 28, 1, 220, 105, 235, + 28, 1, 230, 167, 235, 28, 1, 145, 233, 40, 221, 205, 235, 28, 1, 145, + 232, 238, 229, 37, 235, 28, 1, 145, 233, 40, 250, 57, 235, 28, 1, 145, + 233, 40, 252, 41, 235, 28, 1, 145, 233, 40, 208, 235, 28, 1, 145, 233, + 40, 237, 104, 235, 28, 228, 197, 250, 168, 235, 28, 228, 197, 245, 90, + 223, 136, 38, 4, 246, 250, 38, 4, 246, 247, 38, 4, 243, 148, 38, 4, 218, + 224, 38, 4, 218, 223, 38, 4, 229, 191, 38, 4, 252, 91, 38, 4, 252, 137, + 38, 4, 234, 34, 38, 4, 236, 23, 38, 4, 233, 223, 38, 4, 244, 201, 38, 4, + 245, 226, 38, 4, 219, 160, 38, 4, 222, 80, 38, 4, 222, 21, 38, 4, 249, + 28, 38, 4, 249, 25, 38, 4, 235, 118, 38, 4, 227, 200, 38, 4, 249, 82, 38, + 4, 232, 163, 38, 4, 226, 84, 38, 4, 224, 244, 38, 4, 217, 90, 38, 4, 217, + 71, 38, 4, 251, 91, 38, 4, 237, 113, 38, 4, 232, 14, 38, 4, 218, 22, 38, + 4, 236, 183, 38, 4, 232, 98, 38, 4, 244, 184, 38, 4, 234, 16, 38, 4, 232, + 139, 38, 4, 231, 72, 38, 4, 72, 38, 4, 237, 223, 38, 4, 243, 112, 38, 4, + 243, 96, 38, 4, 218, 204, 38, 4, 218, 195, 38, 4, 229, 108, 38, 4, 252, + 89, 38, 4, 252, 84, 38, 4, 234, 32, 38, 4, 236, 21, 38, 4, 233, 222, 38, + 4, 244, 199, 38, 4, 245, 203, 38, 4, 219, 94, 38, 4, 221, 205, 38, 4, + 222, 2, 38, 4, 249, 20, 38, 4, 249, 24, 38, 4, 235, 67, 38, 4, 227, 147, + 38, 4, 249, 15, 38, 4, 232, 160, 38, 4, 224, 140, 38, 4, 224, 221, 38, 4, + 217, 42, 38, 4, 217, 67, 38, 4, 250, 235, 38, 4, 237, 98, 38, 4, 232, 13, + 38, 4, 217, 250, 38, 4, 236, 113, 38, 4, 232, 96, 38, 4, 244, 103, 38, 4, + 233, 196, 38, 4, 232, 62, 38, 4, 231, 67, 38, 4, 60, 38, 4, 254, 131, 38, + 4, 232, 111, 38, 4, 155, 38, 4, 243, 191, 38, 4, 219, 7, 38, 4, 218, 253, + 38, 4, 187, 38, 4, 252, 94, 38, 4, 252, 237, 38, 4, 234, 37, 38, 4, 236, + 26, 38, 4, 236, 25, 38, 4, 233, 225, 38, 4, 244, 204, 38, 4, 246, 8, 38, + 4, 219, 189, 38, 4, 222, 155, 38, 4, 222, 35, 38, 4, 249, 36, 38, 4, 249, + 27, 38, 4, 235, 188, 38, 4, 203, 38, 4, 249, 207, 38, 4, 232, 169, 38, 4, + 226, 177, 38, 4, 225, 25, 38, 4, 217, 114, 38, 4, 217, 80, 38, 4, 251, + 169, 38, 4, 237, 123, 38, 4, 232, 18, 38, 4, 184, 38, 4, 175, 38, 4, 236, + 233, 38, 4, 232, 100, 38, 4, 245, 0, 38, 4, 196, 38, 4, 208, 38, 4, 231, + 77, 38, 4, 230, 127, 38, 4, 230, 124, 38, 4, 242, 248, 38, 4, 218, 180, + 38, 4, 218, 176, 38, 4, 229, 21, 38, 4, 252, 87, 38, 4, 252, 34, 38, 4, + 234, 30, 38, 4, 236, 19, 38, 4, 233, 220, 38, 4, 244, 196, 38, 4, 245, + 134, 38, 4, 219, 64, 38, 4, 221, 122, 38, 4, 221, 236, 38, 4, 249, 18, + 38, 4, 249, 22, 38, 4, 234, 248, 38, 4, 227, 67, 38, 4, 248, 150, 38, 4, + 232, 152, 38, 4, 224, 14, 38, 4, 224, 195, 38, 4, 217, 19, 38, 4, 217, + 64, 38, 4, 250, 130, 38, 4, 237, 50, 38, 4, 232, 4, 38, 4, 217, 216, 38, + 4, 236, 41, 38, 4, 232, 94, 38, 4, 244, 60, 38, 4, 233, 119, 38, 4, 231, + 195, 38, 4, 231, 54, 38, 4, 68, 38, 4, 220, 87, 38, 4, 242, 173, 38, 4, + 242, 163, 38, 4, 218, 165, 38, 4, 218, 161, 38, 4, 228, 202, 38, 4, 252, + 86, 38, 4, 251, 248, 38, 4, 234, 29, 38, 4, 236, 18, 38, 4, 233, 219, 38, + 4, 244, 195, 38, 4, 245, 92, 38, 4, 219, 56, 38, 4, 221, 0, 38, 4, 221, + 223, 38, 4, 249, 16, 38, 4, 249, 21, 38, 4, 234, 231, 38, 4, 227, 22, 38, + 4, 247, 111, 38, 4, 232, 148, 38, 4, 223, 103, 38, 4, 224, 170, 38, 4, + 217, 13, 38, 4, 217, 60, 38, 4, 250, 92, 38, 4, 237, 43, 38, 4, 232, 0, + 38, 4, 217, 200, 38, 4, 236, 7, 38, 4, 232, 93, 38, 4, 244, 17, 38, 4, + 233, 99, 38, 4, 231, 144, 38, 4, 231, 50, 38, 4, 74, 38, 4, 230, 138, 38, + 4, 232, 81, 38, 4, 243, 4, 38, 4, 242, 249, 38, 4, 218, 187, 38, 4, 218, + 181, 38, 4, 229, 37, 38, 4, 252, 88, 38, 4, 252, 41, 38, 4, 234, 31, 38, + 4, 236, 20, 38, 4, 233, 221, 38, 4, 244, 198, 38, 4, 244, 197, 38, 4, + 245, 139, 38, 4, 219, 72, 38, 4, 101, 38, 4, 221, 239, 38, 4, 249, 19, + 38, 4, 249, 23, 38, 4, 235, 12, 38, 4, 227, 75, 38, 4, 248, 167, 38, 4, + 232, 154, 38, 4, 224, 26, 38, 4, 224, 200, 38, 4, 217, 21, 38, 4, 217, + 65, 38, 4, 250, 182, 38, 4, 237, 59, 38, 4, 232, 5, 38, 4, 217, 231, 38, + 4, 236, 57, 38, 4, 232, 95, 38, 4, 244, 68, 38, 4, 233, 136, 38, 4, 231, + 204, 38, 4, 231, 56, 38, 4, 73, 38, 4, 246, 197, 38, 4, 232, 104, 38, 4, + 243, 162, 38, 4, 243, 138, 38, 4, 218, 227, 38, 4, 218, 220, 38, 4, 229, + 198, 38, 4, 252, 92, 38, 4, 252, 144, 38, 4, 234, 35, 38, 4, 236, 24, 38, + 4, 236, 22, 38, 4, 233, 224, 38, 4, 244, 202, 38, 4, 244, 200, 38, 4, + 245, 231, 38, 4, 219, 165, 38, 4, 222, 87, 38, 4, 222, 22, 38, 4, 249, + 29, 38, 4, 249, 26, 38, 4, 235, 122, 38, 4, 227, 216, 38, 4, 249, 92, 38, + 4, 232, 164, 38, 4, 226, 94, 38, 4, 224, 246, 38, 4, 217, 92, 38, 4, 217, + 72, 38, 4, 251, 99, 38, 4, 237, 114, 38, 4, 232, 15, 38, 4, 218, 25, 38, + 4, 236, 184, 38, 4, 232, 99, 38, 4, 232, 97, 38, 4, 244, 191, 38, 4, 244, + 181, 38, 4, 234, 25, 38, 4, 232, 141, 38, 4, 231, 73, 38, 4, 232, 117, + 38, 4, 235, 93, 38, 250, 168, 38, 245, 90, 223, 136, 38, 228, 82, 78, 38, + 4, 232, 153, 246, 8, 38, 4, 232, 153, 175, 38, 4, 232, 153, 224, 14, 38, + 16, 245, 223, 38, 16, 236, 182, 38, 16, 221, 174, 38, 16, 232, 38, 38, + 16, 252, 205, 38, 16, 246, 7, 38, 16, 222, 152, 38, 16, 249, 165, 38, 16, + 248, 149, 38, 16, 235, 253, 38, 16, 221, 125, 38, 16, 248, 166, 38, 16, + 237, 51, 38, 20, 217, 84, 38, 20, 107, 38, 20, 103, 38, 20, 160, 38, 20, + 154, 38, 20, 174, 38, 20, 182, 38, 20, 191, 38, 20, 185, 38, 20, 190, 38, + 4, 232, 153, 196, 38, 4, 232, 153, 248, 167, 31, 6, 1, 217, 88, 31, 3, 1, + 217, 88, 31, 6, 1, 247, 71, 31, 3, 1, 247, 71, 31, 6, 1, 210, 247, 73, + 31, 3, 1, 210, 247, 73, 31, 6, 1, 237, 162, 31, 3, 1, 237, 162, 31, 6, 1, + 248, 181, 31, 3, 1, 248, 181, 31, 6, 1, 233, 123, 220, 102, 31, 3, 1, + 233, 123, 220, 102, 31, 6, 1, 252, 2, 230, 143, 31, 3, 1, 252, 2, 230, + 143, 31, 6, 1, 232, 123, 218, 11, 31, 3, 1, 232, 123, 218, 11, 31, 6, 1, + 218, 8, 2, 252, 234, 218, 11, 31, 3, 1, 218, 8, 2, 252, 234, 218, 11, 31, + 6, 1, 237, 160, 218, 36, 31, 3, 1, 237, 160, 218, 36, 31, 6, 1, 210, 217, + 200, 31, 3, 1, 210, 217, 200, 31, 6, 1, 237, 160, 60, 31, 3, 1, 237, 160, + 60, 31, 6, 1, 250, 197, 235, 25, 217, 178, 31, 3, 1, 250, 197, 235, 25, + 217, 178, 31, 6, 1, 252, 46, 217, 178, 31, 3, 1, 252, 46, 217, 178, 31, + 6, 1, 237, 160, 250, 197, 235, 25, 217, 178, 31, 3, 1, 237, 160, 250, + 197, 235, 25, 217, 178, 31, 6, 1, 217, 233, 31, 3, 1, 217, 233, 31, 6, 1, + 224, 21, 249, 92, 31, 3, 1, 224, 21, 249, 92, 31, 6, 1, 224, 21, 246, + 217, 31, 3, 1, 224, 21, 246, 217, 31, 6, 1, 224, 21, 246, 205, 31, 3, 1, + 224, 21, 246, 205, 31, 6, 1, 233, 127, 74, 31, 3, 1, 233, 127, 74, 31, 6, + 1, 252, 70, 74, 31, 3, 1, 252, 70, 74, 31, 6, 1, 51, 233, 127, 74, 31, 3, + 1, 51, 233, 127, 74, 31, 1, 233, 86, 74, 36, 31, 219, 42, 36, 31, 222, + 66, 233, 162, 55, 36, 31, 242, 162, 233, 162, 55, 36, 31, 221, 232, 233, + 162, 55, 224, 53, 253, 251, 36, 31, 236, 194, 36, 31, 229, 203, 31, 236, + 194, 31, 229, 203, 31, 6, 1, 247, 82, 31, 3, 1, 247, 82, 31, 6, 1, 247, + 64, 31, 3, 1, 247, 64, 31, 6, 1, 217, 50, 31, 3, 1, 217, 50, 31, 6, 1, + 251, 108, 31, 3, 1, 251, 108, 31, 6, 1, 247, 63, 31, 3, 1, 247, 63, 31, + 6, 1, 222, 88, 2, 233, 193, 96, 31, 3, 1, 222, 88, 2, 233, 193, 96, 31, + 6, 1, 220, 223, 31, 3, 1, 220, 223, 31, 6, 1, 221, 33, 31, 3, 1, 221, 33, + 31, 6, 1, 221, 37, 31, 3, 1, 221, 37, 31, 6, 1, 222, 93, 31, 3, 1, 222, + 93, 31, 6, 1, 242, 151, 31, 3, 1, 242, 151, 31, 6, 1, 224, 155, 31, 3, 1, + 224, 155, 139, 1, 60, 139, 1, 175, 139, 1, 68, 139, 1, 236, 7, 139, 1, + 246, 250, 139, 1, 227, 200, 139, 1, 222, 142, 139, 1, 74, 139, 1, 231, + 67, 139, 1, 72, 139, 1, 235, 188, 139, 1, 187, 139, 1, 227, 98, 139, 1, + 227, 143, 139, 1, 235, 117, 139, 1, 234, 15, 139, 1, 222, 152, 139, 1, + 232, 168, 139, 1, 232, 17, 139, 1, 189, 139, 1, 223, 43, 139, 1, 233, 99, + 139, 1, 224, 216, 139, 1, 224, 140, 139, 1, 224, 225, 139, 1, 225, 44, + 139, 1, 235, 208, 139, 1, 236, 159, 139, 1, 231, 116, 139, 1, 231, 144, + 139, 1, 231, 255, 139, 1, 217, 214, 139, 1, 224, 170, 139, 1, 217, 182, + 139, 1, 184, 139, 1, 231, 147, 139, 1, 236, 157, 139, 1, 229, 145, 139, + 1, 232, 14, 139, 1, 231, 146, 139, 1, 228, 199, 139, 1, 218, 164, 139, 1, + 229, 191, 139, 1, 245, 226, 139, 1, 227, 22, 139, 1, 234, 231, 139, 1, + 233, 196, 139, 1, 232, 62, 139, 1, 227, 161, 139, 1, 227, 249, 139, 1, + 236, 168, 139, 1, 232, 86, 139, 1, 232, 100, 139, 1, 232, 115, 139, 1, + 224, 200, 139, 1, 228, 200, 139, 1, 245, 92, 139, 1, 245, 136, 139, 1, + 219, 7, 139, 1, 208, 139, 1, 235, 67, 139, 1, 229, 108, 139, 1, 234, 244, + 139, 1, 236, 57, 139, 1, 234, 33, 139, 1, 227, 187, 139, 1, 233, 251, + 139, 1, 196, 139, 1, 221, 205, 139, 1, 236, 113, 139, 1, 233, 136, 139, + 1, 234, 36, 139, 1, 222, 50, 139, 1, 236, 26, 139, 1, 222, 65, 139, 1, + 231, 145, 139, 1, 226, 147, 139, 1, 246, 4, 139, 1, 236, 28, 139, 1, 236, + 54, 139, 36, 164, 236, 36, 139, 36, 164, 220, 250, 139, 232, 16, 139, + 245, 90, 223, 136, 139, 250, 175, 139, 250, 168, 139, 225, 67, 139, 228, + 82, 78, 58, 1, 251, 21, 145, 217, 241, 229, 72, 58, 1, 251, 21, 145, 218, + 46, 229, 72, 58, 1, 251, 21, 145, 217, 241, 225, 8, 58, 1, 251, 21, 145, + 218, 46, 225, 8, 58, 1, 251, 21, 145, 217, 241, 228, 98, 58, 1, 251, 21, + 145, 218, 46, 228, 98, 58, 1, 251, 21, 145, 217, 241, 227, 22, 58, 1, + 251, 21, 145, 218, 46, 227, 22, 58, 1, 246, 85, 247, 143, 145, 135, 58, + 1, 116, 247, 143, 145, 135, 58, 1, 233, 194, 247, 143, 145, 135, 58, 1, + 109, 247, 143, 145, 135, 58, 1, 246, 84, 247, 143, 145, 135, 58, 1, 246, + 85, 247, 143, 235, 109, 145, 135, 58, 1, 116, 247, 143, 235, 109, 145, + 135, 58, 1, 233, 194, 247, 143, 235, 109, 145, 135, 58, 1, 109, 247, 143, + 235, 109, 145, 135, 58, 1, 246, 84, 247, 143, 235, 109, 145, 135, 58, 1, + 246, 85, 235, 109, 145, 135, 58, 1, 116, 235, 109, 145, 135, 58, 1, 233, + 194, 235, 109, 145, 135, 58, 1, 109, 235, 109, 145, 135, 58, 1, 246, 84, + 235, 109, 145, 135, 58, 1, 61, 69, 135, 58, 1, 61, 224, 55, 58, 1, 61, + 186, 135, 58, 1, 234, 237, 45, 250, 124, 254, 119, 58, 1, 227, 241, 108, + 65, 58, 1, 227, 241, 113, 65, 58, 1, 227, 241, 246, 95, 78, 58, 1, 227, + 241, 237, 170, 246, 95, 78, 58, 1, 109, 237, 170, 246, 95, 78, 58, 1, + 223, 125, 25, 116, 221, 132, 58, 1, 223, 125, 25, 109, 221, 132, 7, 6, 1, + 246, 241, 254, 168, 7, 3, 1, 246, 241, 254, 168, 7, 6, 1, 246, 241, 254, + 191, 7, 3, 1, 246, 241, 254, 191, 7, 6, 1, 243, 136, 7, 3, 1, 243, 136, + 7, 6, 1, 220, 189, 7, 3, 1, 220, 189, 7, 6, 1, 221, 94, 7, 3, 1, 221, 94, + 7, 6, 1, 250, 90, 7, 3, 1, 250, 90, 7, 6, 1, 250, 91, 2, 250, 168, 7, 3, + 1, 250, 91, 2, 250, 168, 7, 1, 3, 6, 246, 74, 7, 1, 3, 6, 198, 7, 6, 1, + 255, 58, 7, 3, 1, 255, 58, 7, 6, 1, 254, 93, 7, 3, 1, 254, 93, 7, 6, 1, + 253, 232, 7, 3, 1, 253, 232, 7, 6, 1, 253, 220, 7, 3, 1, 253, 220, 7, 6, + 1, 253, 221, 2, 186, 135, 7, 3, 1, 253, 221, 2, 186, 135, 7, 6, 1, 253, + 212, 7, 3, 1, 253, 212, 7, 6, 1, 210, 251, 203, 2, 248, 145, 7, 3, 1, + 210, 251, 203, 2, 248, 145, 7, 6, 1, 237, 18, 2, 92, 7, 3, 1, 237, 18, 2, + 92, 7, 6, 1, 237, 18, 2, 249, 11, 92, 7, 3, 1, 237, 18, 2, 249, 11, 92, + 7, 6, 1, 237, 18, 2, 214, 25, 249, 11, 92, 7, 3, 1, 237, 18, 2, 214, 25, + 249, 11, 92, 7, 6, 1, 252, 1, 153, 7, 3, 1, 252, 1, 153, 7, 6, 1, 235, + 202, 2, 116, 92, 7, 3, 1, 235, 202, 2, 116, 92, 7, 6, 1, 142, 2, 171, + 214, 230, 74, 7, 3, 1, 142, 2, 171, 214, 230, 74, 7, 6, 1, 142, 2, 234, + 247, 7, 3, 1, 142, 2, 234, 247, 7, 6, 1, 230, 127, 7, 3, 1, 230, 127, 7, + 6, 1, 230, 60, 2, 214, 221, 225, 249, 48, 7, 3, 1, 230, 60, 2, 214, 221, + 225, 249, 48, 7, 6, 1, 230, 60, 2, 245, 146, 7, 3, 1, 230, 60, 2, 245, + 146, 7, 6, 1, 230, 60, 2, 223, 222, 222, 135, 7, 3, 1, 230, 60, 2, 223, + 222, 222, 135, 7, 6, 1, 228, 164, 2, 214, 221, 225, 249, 48, 7, 3, 1, + 228, 164, 2, 214, 221, 225, 249, 48, 7, 6, 1, 228, 164, 2, 249, 11, 92, + 7, 3, 1, 228, 164, 2, 249, 11, 92, 7, 6, 1, 228, 39, 227, 58, 7, 3, 1, + 228, 39, 227, 58, 7, 6, 1, 227, 14, 227, 58, 7, 3, 1, 227, 14, 227, 58, + 7, 6, 1, 220, 11, 2, 249, 11, 92, 7, 3, 1, 220, 11, 2, 249, 11, 92, 7, 6, + 1, 219, 48, 7, 3, 1, 219, 48, 7, 6, 1, 219, 75, 217, 157, 7, 3, 1, 219, + 75, 217, 157, 7, 6, 1, 221, 235, 2, 92, 7, 3, 1, 221, 235, 2, 92, 7, 6, + 1, 221, 235, 2, 214, 221, 225, 249, 48, 7, 3, 1, 221, 235, 2, 214, 221, + 225, 249, 48, 7, 6, 1, 219, 157, 7, 3, 1, 219, 157, 7, 6, 1, 246, 123, 7, + 3, 1, 246, 123, 7, 6, 1, 237, 151, 7, 3, 1, 237, 151, 7, 6, 1, 250, 158, + 7, 3, 1, 250, 158, 58, 1, 220, 34, 7, 3, 1, 247, 102, 7, 3, 1, 234, 219, + 7, 3, 1, 233, 80, 7, 3, 1, 231, 109, 7, 3, 1, 227, 13, 7, 1, 3, 6, 227, + 13, 7, 3, 1, 220, 249, 7, 3, 1, 220, 94, 7, 6, 1, 237, 188, 250, 46, 7, + 3, 1, 237, 188, 250, 46, 7, 6, 1, 237, 188, 246, 74, 7, 3, 1, 237, 188, + 246, 74, 7, 6, 1, 237, 188, 245, 67, 7, 6, 1, 215, 237, 188, 245, 67, 7, + 3, 1, 215, 237, 188, 245, 67, 7, 6, 1, 215, 153, 7, 3, 1, 215, 153, 7, 6, + 1, 237, 188, 152, 7, 3, 1, 237, 188, 152, 7, 6, 1, 237, 188, 198, 7, 3, + 1, 237, 188, 198, 7, 6, 1, 237, 188, 222, 201, 7, 3, 1, 237, 188, 222, + 201, 58, 1, 109, 250, 217, 255, 0, 58, 1, 250, 175, 58, 1, 224, 192, 246, + 154, 55, 7, 6, 1, 226, 150, 7, 3, 1, 226, 150, 7, 246, 158, 1, 210, 246, + 74, 7, 246, 158, 1, 210, 230, 59, 7, 246, 158, 1, 237, 170, 189, 7, 246, + 158, 1, 242, 107, 234, 250, 7, 246, 158, 1, 254, 49, 189, 223, 19, 232, + 225, 1, 60, 223, 19, 232, 225, 1, 72, 223, 19, 232, 225, 5, 247, 84, 223, + 19, 232, 225, 1, 68, 223, 19, 232, 225, 1, 73, 223, 19, 232, 225, 1, 74, + 223, 19, 232, 225, 5, 243, 175, 223, 19, 232, 225, 1, 236, 57, 223, 19, + 232, 225, 1, 236, 125, 223, 19, 232, 225, 1, 244, 68, 223, 19, 232, 225, + 1, 244, 112, 223, 19, 232, 225, 5, 254, 95, 223, 19, 232, 225, 1, 250, + 182, 223, 19, 232, 225, 1, 251, 11, 223, 19, 232, 225, 1, 237, 59, 223, + 19, 232, 225, 1, 237, 99, 223, 19, 232, 225, 1, 221, 11, 223, 19, 232, + 225, 1, 221, 15, 223, 19, 232, 225, 1, 249, 107, 223, 19, 232, 225, 1, + 249, 115, 223, 19, 232, 225, 1, 101, 223, 19, 232, 225, 1, 221, 239, 223, + 19, 232, 225, 1, 248, 167, 223, 19, 232, 225, 1, 249, 19, 223, 19, 232, + 225, 1, 231, 204, 223, 19, 232, 225, 1, 229, 37, 223, 19, 232, 225, 1, + 229, 118, 223, 19, 232, 225, 1, 252, 41, 223, 19, 232, 225, 1, 252, 88, + 223, 19, 232, 225, 1, 233, 136, 223, 19, 232, 225, 1, 227, 75, 223, 19, + 232, 225, 1, 235, 12, 223, 19, 232, 225, 1, 227, 44, 223, 19, 232, 225, + 1, 224, 26, 223, 19, 232, 225, 1, 243, 4, 223, 19, 232, 225, 29, 5, 60, + 223, 19, 232, 225, 29, 5, 72, 223, 19, 232, 225, 29, 5, 68, 223, 19, 232, + 225, 29, 5, 73, 223, 19, 232, 225, 29, 5, 230, 127, 223, 19, 232, 225, + 229, 33, 234, 67, 223, 19, 232, 225, 229, 33, 234, 66, 223, 19, 232, 225, + 229, 33, 234, 65, 223, 19, 232, 225, 229, 33, 234, 64, 231, 187, 237, + 212, 245, 108, 131, 228, 89, 231, 187, 237, 212, 245, 108, 131, 243, 194, + 231, 187, 237, 212, 245, 108, 148, 228, 87, 231, 187, 237, 212, 245, 108, + 131, 224, 75, 231, 187, 237, 212, 245, 108, 131, 246, 231, 231, 187, 237, + 212, 245, 108, 148, 224, 74, 231, 187, 237, 212, 228, 90, 78, 231, 187, + 237, 212, 229, 56, 78, 231, 187, 237, 212, 227, 4, 78, 231, 187, 237, + 212, 228, 91, 78, 229, 138, 1, 175, 229, 138, 1, 236, 149, 229, 138, 1, + 245, 0, 229, 138, 1, 232, 115, 229, 138, 1, 251, 169, 229, 138, 1, 251, + 69, 229, 138, 1, 237, 123, 229, 138, 1, 231, 77, 229, 138, 1, 222, 155, + 229, 138, 1, 222, 35, 229, 138, 1, 249, 207, 229, 138, 1, 208, 229, 138, + 1, 187, 229, 138, 1, 229, 141, 229, 138, 1, 252, 237, 229, 138, 1, 196, + 229, 138, 1, 221, 55, 229, 138, 1, 221, 47, 229, 138, 1, 247, 74, 229, + 138, 1, 219, 7, 229, 138, 1, 217, 80, 229, 138, 1, 217, 114, 229, 138, 1, + 3, 60, 229, 138, 1, 184, 229, 138, 1, 203, 229, 138, 1, 235, 188, 229, + 138, 1, 225, 25, 229, 138, 1, 226, 177, 229, 138, 1, 155, 229, 138, 1, + 60, 229, 138, 1, 72, 229, 138, 1, 68, 229, 138, 1, 73, 229, 138, 1, 74, + 229, 138, 1, 228, 155, 229, 138, 1, 218, 138, 229, 138, 1, 246, 8, 229, + 138, 1, 244, 160, 229, 138, 1, 246, 250, 229, 138, 223, 97, 1, 219, 7, + 229, 138, 223, 97, 1, 184, 229, 138, 1, 221, 29, 229, 138, 1, 221, 19, + 229, 138, 1, 249, 132, 229, 138, 1, 231, 217, 229, 138, 1, 254, 144, 184, + 229, 138, 1, 219, 69, 225, 25, 229, 138, 1, 219, 70, 155, 229, 138, 1, + 254, 1, 246, 8, 229, 138, 223, 97, 1, 203, 229, 138, 223, 61, 1, 203, + 229, 138, 1, 251, 146, 229, 138, 224, 109, 243, 160, 78, 229, 138, 51, + 243, 160, 78, 229, 138, 164, 225, 18, 229, 138, 164, 51, 225, 18, 158, 5, + 254, 95, 158, 5, 219, 77, 158, 1, 60, 158, 1, 255, 58, 158, 1, 72, 158, + 1, 237, 255, 158, 1, 68, 158, 1, 220, 23, 158, 1, 167, 152, 158, 1, 167, + 227, 53, 158, 1, 167, 153, 158, 1, 167, 235, 18, 158, 1, 73, 158, 1, 246, + 250, 158, 1, 254, 196, 158, 1, 74, 158, 1, 230, 127, 158, 1, 253, 232, + 158, 1, 175, 158, 1, 236, 149, 158, 1, 245, 0, 158, 1, 244, 125, 158, 1, + 232, 115, 158, 1, 251, 169, 158, 1, 251, 69, 158, 1, 237, 123, 158, 1, + 237, 103, 158, 1, 231, 77, 158, 1, 221, 29, 158, 1, 221, 19, 158, 1, 249, + 132, 158, 1, 249, 116, 158, 1, 231, 217, 158, 1, 222, 155, 158, 1, 222, + 35, 158, 1, 249, 207, 158, 1, 249, 36, 158, 1, 208, 158, 1, 187, 158, 1, + 229, 141, 158, 1, 252, 237, 158, 1, 252, 94, 158, 1, 196, 158, 1, 184, + 158, 1, 203, 158, 1, 235, 188, 158, 1, 219, 189, 158, 1, 225, 25, 158, 1, + 223, 218, 158, 1, 226, 177, 158, 1, 155, 158, 1, 235, 17, 158, 250, 147, + 5, 243, 209, 158, 29, 5, 255, 58, 158, 29, 5, 72, 158, 29, 5, 237, 255, + 158, 29, 5, 68, 158, 29, 5, 220, 23, 158, 29, 5, 167, 152, 158, 29, 5, + 167, 227, 53, 158, 29, 5, 167, 153, 158, 29, 5, 167, 235, 18, 158, 29, 5, + 73, 158, 29, 5, 246, 250, 158, 29, 5, 254, 196, 158, 29, 5, 74, 158, 29, + 5, 230, 127, 158, 29, 5, 253, 232, 158, 5, 219, 82, 158, 249, 167, 158, + 51, 249, 167, 158, 20, 217, 84, 158, 20, 107, 158, 20, 103, 158, 20, 160, + 158, 20, 154, 158, 20, 174, 158, 20, 182, 158, 20, 191, 158, 20, 185, + 158, 20, 190, 36, 80, 20, 217, 84, 36, 80, 20, 107, 36, 80, 20, 103, 36, + 80, 20, 160, 36, 80, 20, 154, 36, 80, 20, 174, 36, 80, 20, 182, 36, 80, + 20, 191, 36, 80, 20, 185, 36, 80, 20, 190, 36, 80, 1, 60, 36, 80, 1, 68, + 36, 80, 1, 175, 36, 80, 1, 208, 36, 80, 1, 187, 36, 80, 1, 203, 36, 80, + 1, 219, 94, 36, 80, 5, 253, 219, 80, 5, 223, 253, 251, 146, 80, 5, 251, + 147, 219, 82, 80, 5, 51, 251, 147, 219, 82, 80, 5, 251, 147, 103, 80, 5, + 251, 147, 160, 80, 5, 251, 147, 253, 219, 80, 5, 228, 186, 80, 244, 224, + 245, 185, 80, 251, 134, 80, 243, 155, 236, 190, 235, 68, 20, 217, 84, + 236, 190, 235, 68, 20, 107, 236, 190, 235, 68, 20, 103, 236, 190, 235, + 68, 20, 160, 236, 190, 235, 68, 20, 154, 236, 190, 235, 68, 20, 174, 236, + 190, 235, 68, 20, 182, 236, 190, 235, 68, 20, 191, 236, 190, 235, 68, 20, + 185, 236, 190, 235, 68, 20, 190, 236, 190, 235, 68, 1, 175, 236, 190, + 235, 68, 1, 236, 149, 236, 190, 235, 68, 1, 245, 0, 236, 190, 235, 68, 1, + 232, 115, 236, 190, 235, 68, 1, 226, 177, 236, 190, 235, 68, 1, 225, 25, + 236, 190, 235, 68, 1, 217, 114, 236, 190, 235, 68, 1, 231, 77, 236, 190, + 235, 68, 1, 222, 155, 236, 190, 235, 68, 1, 242, 175, 236, 190, 235, 68, + 1, 208, 236, 190, 235, 68, 1, 187, 236, 190, 235, 68, 1, 229, 141, 236, + 190, 235, 68, 1, 196, 236, 190, 235, 68, 1, 249, 207, 236, 190, 235, 68, + 1, 252, 237, 236, 190, 235, 68, 1, 203, 236, 190, 235, 68, 1, 184, 236, + 190, 235, 68, 1, 235, 188, 236, 190, 235, 68, 1, 219, 7, 236, 190, 235, + 68, 1, 222, 35, 236, 190, 235, 68, 1, 155, 236, 190, 235, 68, 1, 219, + 189, 236, 190, 235, 68, 1, 251, 169, 236, 190, 235, 68, 1, 60, 236, 190, + 235, 68, 1, 230, 167, 236, 190, 235, 68, 1, 72, 236, 190, 235, 68, 1, + 230, 127, 236, 190, 235, 68, 29, 220, 110, 236, 190, 235, 68, 29, 73, + 236, 190, 235, 68, 29, 68, 236, 190, 235, 68, 29, 246, 250, 236, 190, + 235, 68, 29, 74, 236, 190, 235, 68, 145, 229, 48, 236, 190, 235, 68, 145, + 251, 157, 236, 190, 235, 68, 145, 251, 158, 229, 48, 236, 190, 235, 68, + 5, 250, 62, 236, 190, 235, 68, 5, 224, 148, 227, 194, 1, 175, 227, 194, + 1, 245, 0, 227, 194, 1, 232, 115, 227, 194, 1, 222, 155, 227, 194, 1, + 249, 207, 227, 194, 1, 208, 227, 194, 1, 187, 227, 194, 1, 252, 237, 227, + 194, 1, 196, 227, 194, 1, 251, 169, 227, 194, 1, 237, 123, 227, 194, 1, + 231, 77, 227, 194, 1, 226, 177, 227, 194, 1, 203, 227, 194, 1, 235, 188, + 227, 194, 1, 184, 227, 194, 1, 219, 7, 227, 194, 1, 155, 227, 194, 1, + 234, 37, 227, 194, 1, 232, 100, 227, 194, 1, 232, 169, 227, 194, 1, 231, + 57, 227, 194, 1, 60, 227, 194, 29, 5, 72, 227, 194, 29, 5, 68, 227, 194, + 29, 5, 73, 227, 194, 29, 5, 254, 196, 227, 194, 29, 5, 74, 227, 194, 29, + 5, 253, 232, 227, 194, 29, 5, 246, 115, 227, 194, 29, 5, 247, 16, 227, + 194, 250, 147, 5, 232, 117, 227, 194, 250, 147, 5, 207, 227, 194, 250, + 147, 5, 152, 227, 194, 250, 147, 5, 243, 225, 227, 194, 219, 82, 227, + 194, 226, 87, 78, 22, 91, 221, 188, 22, 91, 221, 187, 22, 91, 221, 185, + 22, 91, 221, 190, 22, 91, 227, 135, 22, 91, 227, 119, 22, 91, 227, 114, + 22, 91, 227, 116, 22, 91, 227, 132, 22, 91, 227, 125, 22, 91, 227, 118, + 22, 91, 227, 137, 22, 91, 227, 120, 22, 91, 227, 139, 22, 91, 227, 136, + 22, 91, 233, 183, 22, 91, 233, 174, 22, 91, 233, 177, 22, 91, 229, 84, + 22, 91, 229, 95, 22, 91, 229, 96, 22, 91, 223, 203, 22, 91, 238, 12, 22, + 91, 238, 19, 22, 91, 223, 214, 22, 91, 223, 201, 22, 91, 229, 126, 22, + 91, 243, 101, 22, 91, 223, 198, 133, 5, 229, 252, 133, 5, 251, 96, 133, + 5, 235, 130, 133, 5, 218, 197, 133, 1, 60, 133, 1, 242, 107, 236, 193, + 133, 1, 72, 133, 1, 237, 255, 133, 1, 68, 133, 1, 230, 44, 251, 73, 133, + 1, 232, 116, 235, 98, 133, 1, 232, 116, 235, 99, 227, 229, 133, 1, 73, + 133, 1, 254, 196, 133, 1, 74, 133, 1, 175, 133, 1, 206, 226, 128, 133, 1, + 206, 233, 67, 133, 1, 245, 0, 133, 1, 245, 1, 233, 67, 133, 1, 232, 115, + 133, 1, 251, 169, 133, 1, 251, 170, 233, 67, 133, 1, 237, 123, 133, 1, + 231, 78, 233, 67, 133, 1, 237, 124, 234, 103, 133, 1, 231, 77, 133, 1, + 221, 29, 133, 1, 221, 30, 234, 103, 133, 1, 249, 132, 133, 1, 249, 133, + 234, 103, 133, 1, 232, 238, 233, 67, 133, 1, 222, 155, 133, 1, 222, 156, + 233, 67, 133, 1, 249, 207, 133, 1, 249, 208, 234, 103, 133, 1, 208, 133, + 1, 187, 133, 1, 230, 44, 233, 67, 133, 1, 252, 237, 133, 1, 252, 238, + 233, 67, 133, 1, 196, 133, 1, 184, 133, 1, 203, 133, 1, 228, 3, 254, 203, + 133, 1, 235, 188, 133, 1, 219, 7, 133, 1, 226, 178, 233, 67, 133, 1, 226, + 178, 234, 103, 133, 1, 226, 177, 133, 1, 155, 133, 5, 251, 97, 222, 68, + 133, 29, 5, 222, 111, 133, 29, 5, 221, 135, 133, 29, 5, 218, 162, 133, + 29, 5, 218, 163, 234, 5, 133, 29, 5, 223, 77, 133, 29, 5, 223, 78, 233, + 250, 133, 29, 5, 222, 124, 133, 29, 5, 248, 207, 233, 66, 133, 29, 5, + 229, 171, 133, 250, 147, 5, 236, 161, 133, 250, 147, 5, 229, 179, 133, + 250, 147, 5, 251, 162, 133, 230, 6, 133, 42, 227, 176, 133, 45, 227, 176, + 133, 230, 36, 254, 125, 133, 230, 36, 234, 107, 133, 230, 36, 234, 223, + 133, 230, 36, 218, 193, 133, 230, 36, 230, 7, 133, 230, 36, 235, 35, 133, + 230, 36, 234, 217, 133, 230, 36, 254, 239, 133, 230, 36, 254, 240, 254, + 239, 133, 230, 36, 229, 65, 133, 215, 230, 36, 229, 65, 133, 230, 4, 133, + 20, 217, 84, 133, 20, 107, 133, 20, 103, 133, 20, 160, 133, 20, 154, 133, + 20, 174, 133, 20, 182, 133, 20, 191, 133, 20, 185, 133, 20, 190, 133, + 230, 36, 221, 163, 220, 248, 133, 230, 36, 237, 147, 149, 1, 60, 149, 1, + 72, 149, 1, 68, 149, 1, 73, 149, 1, 254, 196, 149, 1, 74, 149, 1, 175, + 149, 1, 236, 149, 149, 1, 245, 0, 149, 1, 244, 125, 149, 1, 232, 73, 149, + 1, 232, 115, 149, 1, 251, 69, 149, 1, 251, 33, 149, 1, 237, 123, 149, 1, + 237, 103, 149, 1, 232, 64, 149, 1, 232, 66, 149, 1, 232, 65, 149, 1, 222, + 155, 149, 1, 222, 35, 149, 1, 249, 207, 149, 1, 249, 36, 149, 1, 231, + 114, 149, 1, 208, 149, 1, 249, 132, 149, 1, 187, 149, 1, 229, 6, 149, 1, + 229, 141, 149, 1, 252, 237, 149, 1, 252, 94, 149, 1, 233, 94, 149, 1, + 196, 149, 1, 252, 178, 149, 1, 184, 149, 1, 203, 149, 1, 235, 188, 149, + 1, 219, 189, 149, 1, 223, 218, 149, 1, 226, 177, 149, 1, 155, 149, 29, 5, + 255, 58, 149, 29, 5, 72, 149, 29, 5, 237, 255, 149, 29, 5, 246, 237, 149, + 29, 5, 68, 149, 29, 5, 230, 167, 149, 29, 5, 74, 149, 29, 5, 254, 196, + 149, 29, 5, 253, 232, 149, 29, 5, 220, 110, 149, 250, 147, 5, 184, 149, + 250, 147, 5, 203, 149, 250, 147, 5, 235, 188, 149, 250, 147, 5, 219, 7, + 149, 1, 39, 237, 17, 149, 1, 39, 245, 67, 149, 1, 39, 232, 117, 149, 250, + 147, 5, 39, 232, 117, 149, 1, 39, 251, 70, 149, 1, 39, 222, 201, 149, 1, + 39, 207, 149, 1, 39, 230, 59, 149, 1, 39, 218, 90, 149, 1, 39, 152, 149, + 1, 39, 153, 149, 1, 39, 223, 219, 149, 250, 147, 5, 39, 189, 149, 250, + 147, 5, 39, 243, 225, 149, 20, 217, 84, 149, 20, 107, 149, 20, 103, 149, + 20, 160, 149, 20, 154, 149, 20, 174, 149, 20, 182, 149, 20, 191, 149, 20, + 185, 149, 20, 190, 149, 228, 197, 223, 242, 149, 228, 197, 249, 167, 149, + 228, 197, 51, 249, 167, 149, 228, 197, 221, 78, 249, 167, 63, 1, 236, + 143, 245, 0, 63, 1, 236, 143, 251, 169, 63, 1, 236, 143, 251, 69, 63, 1, + 236, 143, 237, 123, 63, 1, 236, 143, 237, 103, 63, 1, 236, 143, 231, 77, + 63, 1, 236, 143, 221, 29, 63, 1, 236, 143, 221, 19, 63, 1, 236, 143, 249, + 132, 63, 1, 236, 143, 249, 116, 63, 1, 236, 143, 249, 36, 63, 1, 236, + 143, 208, 63, 1, 236, 143, 226, 177, 63, 1, 236, 143, 155, 63, 1, 236, + 143, 243, 121, 63, 1, 236, 143, 246, 8, 63, 58, 1, 236, 143, 227, 201, + 63, 1, 236, 143, 218, 138, 63, 1, 236, 143, 217, 114, 63, 1, 236, 143, + 203, 63, 235, 6, 236, 143, 230, 182, 63, 235, 6, 236, 143, 228, 111, 63, + 235, 6, 236, 143, 243, 57, 63, 16, 254, 186, 246, 94, 63, 16, 254, 186, + 107, 63, 16, 254, 186, 103, 63, 1, 254, 186, 203, 63, 5, 229, 248, 236, + 213, 221, 132, 37, 177, 1, 109, 236, 57, 37, 177, 1, 116, 236, 57, 37, + 177, 1, 109, 236, 125, 37, 177, 1, 116, 236, 125, 37, 177, 1, 109, 236, + 132, 37, 177, 1, 116, 236, 132, 37, 177, 1, 109, 244, 68, 37, 177, 1, + 116, 244, 68, 37, 177, 1, 109, 232, 84, 37, 177, 1, 116, 232, 84, 37, + 177, 1, 109, 250, 182, 37, 177, 1, 116, 250, 182, 37, 177, 1, 109, 251, + 11, 37, 177, 1, 116, 251, 11, 37, 177, 1, 109, 224, 26, 37, 177, 1, 116, + 224, 26, 37, 177, 1, 109, 231, 56, 37, 177, 1, 116, 231, 56, 37, 177, 1, + 109, 248, 167, 37, 177, 1, 116, 248, 167, 37, 177, 1, 109, 101, 37, 177, + 1, 116, 101, 37, 177, 1, 109, 221, 239, 37, 177, 1, 116, 221, 239, 37, + 177, 1, 109, 231, 204, 37, 177, 1, 116, 231, 204, 37, 177, 1, 109, 252, + 41, 37, 177, 1, 116, 252, 41, 37, 177, 1, 109, 229, 37, 37, 177, 1, 116, + 229, 37, 37, 177, 1, 109, 229, 118, 37, 177, 1, 116, 229, 118, 37, 177, + 1, 109, 245, 139, 37, 177, 1, 116, 245, 139, 37, 177, 1, 109, 233, 136, + 37, 177, 1, 116, 233, 136, 37, 177, 1, 109, 217, 231, 37, 177, 1, 116, + 217, 231, 37, 177, 1, 109, 227, 75, 37, 177, 1, 116, 227, 75, 37, 177, 1, + 109, 235, 12, 37, 177, 1, 116, 235, 12, 37, 177, 1, 109, 219, 72, 37, + 177, 1, 116, 219, 72, 37, 177, 1, 109, 243, 4, 37, 177, 1, 116, 243, 4, + 37, 177, 1, 109, 74, 37, 177, 1, 116, 74, 37, 177, 234, 100, 236, 229, + 37, 177, 29, 255, 58, 37, 177, 29, 72, 37, 177, 29, 220, 110, 37, 177, + 29, 68, 37, 177, 29, 73, 37, 177, 29, 74, 37, 177, 234, 100, 236, 127, + 37, 177, 29, 242, 72, 37, 177, 29, 220, 109, 37, 177, 29, 220, 123, 37, + 177, 29, 253, 231, 37, 177, 29, 253, 212, 37, 177, 29, 254, 131, 37, 177, + 29, 254, 140, 37, 177, 145, 234, 100, 246, 223, 37, 177, 145, 234, 100, + 231, 113, 37, 177, 145, 234, 100, 221, 239, 37, 177, 145, 234, 100, 224, + 15, 37, 177, 16, 236, 44, 37, 177, 16, 231, 113, 37, 177, 16, 226, 148, + 37, 177, 16, 243, 5, 243, 1, 37, 177, 16, 236, 52, 236, 51, 234, 11, 234, + 43, 1, 236, 49, 234, 11, 234, 43, 1, 226, 148, 234, 11, 234, 43, 1, 235, + 167, 234, 11, 234, 43, 1, 233, 145, 234, 11, 234, 43, 1, 187, 234, 11, + 234, 43, 1, 208, 234, 11, 234, 43, 1, 251, 25, 234, 11, 234, 43, 1, 221, + 181, 234, 11, 234, 43, 1, 236, 121, 234, 11, 234, 43, 1, 232, 76, 234, + 11, 234, 43, 1, 221, 233, 234, 11, 234, 43, 1, 219, 2, 234, 11, 234, 43, + 1, 218, 45, 234, 11, 234, 43, 1, 242, 167, 234, 11, 234, 43, 1, 220, 87, + 234, 11, 234, 43, 1, 72, 234, 11, 234, 43, 1, 229, 136, 234, 11, 234, 43, + 1, 253, 241, 234, 11, 234, 43, 1, 244, 63, 234, 11, 234, 43, 1, 237, 102, + 234, 11, 234, 43, 1, 227, 246, 234, 11, 234, 43, 1, 252, 237, 234, 11, + 234, 43, 1, 237, 91, 234, 11, 234, 43, 1, 248, 232, 234, 11, 234, 43, 1, + 244, 110, 234, 11, 234, 43, 1, 249, 17, 234, 11, 234, 43, 1, 252, 93, + 234, 11, 234, 43, 1, 236, 50, 234, 249, 234, 11, 234, 43, 1, 235, 168, + 234, 249, 234, 11, 234, 43, 1, 233, 146, 234, 249, 234, 11, 234, 43, 1, + 230, 44, 234, 249, 234, 11, 234, 43, 1, 232, 238, 234, 249, 234, 11, 234, + 43, 1, 221, 182, 234, 249, 234, 11, 234, 43, 1, 232, 77, 234, 249, 234, + 11, 234, 43, 1, 242, 107, 234, 249, 234, 11, 234, 43, 29, 5, 230, 137, + 234, 11, 234, 43, 29, 5, 237, 221, 234, 11, 234, 43, 29, 5, 254, 130, + 234, 11, 234, 43, 29, 5, 218, 18, 234, 11, 234, 43, 29, 5, 224, 10, 234, + 11, 234, 43, 29, 5, 220, 85, 234, 11, 234, 43, 29, 5, 251, 40, 234, 11, + 234, 43, 29, 5, 231, 100, 234, 11, 234, 43, 251, 41, 234, 11, 234, 43, + 234, 220, 237, 131, 234, 11, 234, 43, 254, 70, 237, 131, 234, 11, 234, + 43, 20, 217, 84, 234, 11, 234, 43, 20, 107, 234, 11, 234, 43, 20, 103, + 234, 11, 234, 43, 20, 160, 234, 11, 234, 43, 20, 154, 234, 11, 234, 43, + 20, 174, 234, 11, 234, 43, 20, 182, 234, 11, 234, 43, 20, 191, 234, 11, + 234, 43, 20, 185, 234, 11, 234, 43, 20, 190, 22, 122, 231, 6, 22, 122, + 231, 11, 22, 122, 217, 230, 22, 122, 217, 229, 22, 122, 217, 228, 22, + 122, 220, 173, 22, 122, 220, 176, 22, 122, 217, 198, 22, 122, 217, 194, + 22, 122, 246, 114, 22, 122, 246, 112, 22, 122, 246, 113, 22, 122, 246, + 110, 22, 122, 242, 97, 22, 122, 242, 96, 22, 122, 242, 94, 22, 122, 242, + 95, 22, 122, 242, 100, 22, 122, 242, 93, 22, 122, 242, 92, 22, 122, 242, + 102, 22, 122, 254, 59, 22, 122, 254, 58, 22, 85, 232, 48, 22, 85, 232, + 54, 22, 85, 223, 200, 22, 85, 223, 199, 22, 85, 221, 187, 22, 85, 221, + 185, 22, 85, 221, 184, 22, 85, 221, 190, 22, 85, 221, 191, 22, 85, 221, + 183, 22, 85, 227, 119, 22, 85, 227, 134, 22, 85, 223, 206, 22, 85, 227, + 131, 22, 85, 227, 121, 22, 85, 227, 123, 22, 85, 227, 110, 22, 85, 227, + 111, 22, 85, 236, 217, 22, 85, 233, 182, 22, 85, 233, 176, 22, 85, 223, + 210, 22, 85, 233, 179, 22, 85, 233, 185, 22, 85, 229, 80, 22, 85, 229, + 89, 22, 85, 229, 93, 22, 85, 223, 208, 22, 85, 229, 83, 22, 85, 229, 97, + 22, 85, 229, 98, 22, 85, 224, 96, 22, 85, 224, 99, 22, 85, 223, 204, 22, + 85, 223, 202, 22, 85, 224, 94, 22, 85, 224, 102, 22, 85, 224, 103, 22, + 85, 224, 88, 22, 85, 224, 101, 22, 85, 229, 255, 22, 85, 230, 0, 22, 85, + 218, 4, 22, 85, 218, 5, 22, 85, 250, 228, 22, 85, 250, 227, 22, 85, 223, + 215, 22, 85, 229, 124, 22, 85, 229, 123, 9, 13, 239, 244, 9, 13, 239, + 243, 9, 13, 239, 242, 9, 13, 239, 241, 9, 13, 239, 240, 9, 13, 239, 239, + 9, 13, 239, 238, 9, 13, 239, 237, 9, 13, 239, 236, 9, 13, 239, 235, 9, + 13, 239, 234, 9, 13, 239, 233, 9, 13, 239, 232, 9, 13, 239, 231, 9, 13, + 239, 230, 9, 13, 239, 229, 9, 13, 239, 228, 9, 13, 239, 227, 9, 13, 239, + 226, 9, 13, 239, 225, 9, 13, 239, 224, 9, 13, 239, 223, 9, 13, 239, 222, + 9, 13, 239, 221, 9, 13, 239, 220, 9, 13, 239, 219, 9, 13, 239, 218, 9, + 13, 239, 217, 9, 13, 239, 216, 9, 13, 239, 215, 9, 13, 239, 214, 9, 13, + 239, 213, 9, 13, 239, 212, 9, 13, 239, 211, 9, 13, 239, 210, 9, 13, 239, + 209, 9, 13, 239, 208, 9, 13, 239, 207, 9, 13, 239, 206, 9, 13, 239, 205, + 9, 13, 239, 204, 9, 13, 239, 203, 9, 13, 239, 202, 9, 13, 239, 201, 9, + 13, 239, 200, 9, 13, 239, 199, 9, 13, 239, 198, 9, 13, 239, 197, 9, 13, + 239, 196, 9, 13, 239, 195, 9, 13, 239, 194, 9, 13, 239, 193, 9, 13, 239, + 192, 9, 13, 239, 191, 9, 13, 239, 190, 9, 13, 239, 189, 9, 13, 239, 188, + 9, 13, 239, 187, 9, 13, 239, 186, 9, 13, 239, 185, 9, 13, 239, 184, 9, + 13, 239, 183, 9, 13, 239, 182, 9, 13, 239, 181, 9, 13, 239, 180, 9, 13, + 239, 179, 9, 13, 239, 178, 9, 13, 239, 177, 9, 13, 239, 176, 9, 13, 239, + 175, 9, 13, 239, 174, 9, 13, 239, 173, 9, 13, 239, 172, 9, 13, 239, 171, + 9, 13, 239, 170, 9, 13, 239, 169, 9, 13, 239, 168, 9, 13, 239, 167, 9, + 13, 239, 166, 9, 13, 239, 165, 9, 13, 239, 164, 9, 13, 239, 163, 9, 13, + 239, 162, 9, 13, 239, 161, 9, 13, 239, 160, 9, 13, 239, 159, 9, 13, 239, + 158, 9, 13, 239, 157, 9, 13, 239, 156, 9, 13, 239, 155, 9, 13, 239, 154, + 9, 13, 239, 153, 9, 13, 239, 152, 9, 13, 239, 151, 9, 13, 239, 150, 9, + 13, 239, 149, 9, 13, 239, 148, 9, 13, 239, 147, 9, 13, 239, 146, 9, 13, + 239, 145, 9, 13, 239, 144, 9, 13, 239, 143, 9, 13, 239, 142, 9, 13, 239, + 141, 9, 13, 239, 140, 9, 13, 239, 139, 9, 13, 239, 138, 9, 13, 239, 137, + 9, 13, 239, 136, 9, 13, 239, 135, 9, 13, 239, 134, 9, 13, 239, 133, 9, + 13, 239, 132, 9, 13, 239, 131, 9, 13, 239, 130, 9, 13, 239, 129, 9, 13, + 239, 128, 9, 13, 239, 127, 9, 13, 239, 126, 9, 13, 239, 125, 9, 13, 239, + 124, 9, 13, 239, 123, 9, 13, 239, 122, 9, 13, 239, 121, 9, 13, 239, 120, + 9, 13, 239, 119, 9, 13, 239, 118, 9, 13, 239, 117, 9, 13, 239, 116, 9, + 13, 239, 115, 9, 13, 239, 114, 9, 13, 239, 113, 9, 13, 239, 112, 9, 13, + 239, 111, 9, 13, 239, 110, 9, 13, 239, 109, 9, 13, 239, 108, 9, 13, 239, + 107, 9, 13, 239, 106, 9, 13, 239, 105, 9, 13, 239, 104, 9, 13, 239, 103, + 9, 13, 239, 102, 9, 13, 239, 101, 9, 13, 239, 100, 9, 13, 239, 99, 9, 13, + 239, 98, 9, 13, 239, 97, 9, 13, 239, 96, 9, 13, 239, 95, 9, 13, 239, 94, + 9, 13, 239, 93, 9, 13, 239, 92, 9, 13, 239, 91, 9, 13, 239, 90, 9, 13, + 239, 89, 9, 13, 239, 88, 9, 13, 239, 87, 9, 13, 239, 86, 9, 13, 239, 85, + 9, 13, 239, 84, 9, 13, 239, 83, 9, 13, 239, 82, 9, 13, 239, 81, 9, 13, + 239, 80, 9, 13, 239, 79, 9, 13, 239, 78, 9, 13, 239, 77, 9, 13, 239, 76, + 9, 13, 239, 75, 9, 13, 239, 74, 9, 13, 239, 73, 9, 13, 239, 72, 9, 13, + 239, 71, 9, 13, 239, 70, 9, 13, 239, 69, 9, 13, 239, 68, 9, 13, 239, 67, + 9, 13, 239, 66, 9, 13, 239, 65, 9, 13, 239, 64, 9, 13, 239, 63, 9, 13, + 239, 62, 9, 13, 239, 61, 9, 13, 239, 60, 9, 13, 239, 59, 9, 13, 239, 58, + 9, 13, 239, 57, 9, 13, 239, 56, 9, 13, 239, 55, 9, 13, 239, 54, 9, 13, + 239, 53, 9, 13, 239, 52, 9, 13, 239, 51, 9, 13, 239, 50, 9, 13, 239, 49, + 9, 13, 239, 48, 9, 13, 239, 47, 9, 13, 239, 46, 9, 13, 239, 45, 9, 13, + 239, 44, 9, 13, 239, 43, 9, 13, 239, 42, 9, 13, 239, 41, 9, 13, 239, 40, + 9, 13, 239, 39, 9, 13, 239, 38, 9, 13, 239, 37, 9, 13, 239, 36, 9, 13, + 239, 35, 9, 13, 239, 34, 9, 13, 239, 33, 9, 13, 239, 32, 9, 13, 239, 31, + 9, 13, 239, 30, 9, 13, 239, 29, 9, 13, 239, 28, 9, 13, 239, 27, 9, 13, + 239, 26, 9, 13, 239, 25, 9, 13, 239, 24, 9, 13, 239, 23, 9, 13, 239, 22, + 9, 13, 239, 21, 9, 13, 239, 20, 9, 13, 239, 19, 9, 13, 239, 18, 9, 13, + 239, 17, 9, 13, 239, 16, 9, 13, 239, 15, 9, 13, 239, 14, 9, 13, 239, 13, + 9, 13, 239, 12, 9, 13, 239, 11, 9, 13, 239, 10, 9, 13, 239, 9, 9, 13, + 239, 8, 9, 13, 239, 7, 9, 13, 239, 6, 9, 13, 239, 5, 9, 13, 239, 4, 9, + 13, 239, 3, 9, 13, 239, 2, 9, 13, 239, 1, 9, 13, 239, 0, 9, 13, 238, 255, + 9, 13, 238, 254, 9, 13, 238, 253, 9, 13, 238, 252, 9, 13, 238, 251, 9, + 13, 238, 250, 9, 13, 238, 249, 9, 13, 238, 248, 9, 13, 238, 247, 9, 13, + 238, 246, 9, 13, 238, 245, 9, 13, 238, 244, 9, 13, 238, 243, 9, 13, 238, + 242, 9, 13, 238, 241, 9, 13, 238, 240, 9, 13, 238, 239, 9, 13, 238, 238, + 9, 13, 238, 237, 9, 13, 238, 236, 9, 13, 238, 235, 9, 13, 238, 234, 9, + 13, 238, 233, 9, 13, 238, 232, 9, 13, 238, 231, 9, 13, 238, 230, 9, 13, + 238, 229, 9, 13, 238, 228, 9, 13, 238, 227, 9, 13, 238, 226, 9, 13, 238, + 225, 9, 13, 238, 224, 9, 13, 238, 223, 9, 13, 238, 222, 9, 13, 238, 221, + 9, 13, 238, 220, 9, 13, 238, 219, 9, 13, 238, 218, 9, 13, 238, 217, 9, + 13, 238, 216, 9, 13, 238, 215, 9, 13, 238, 214, 9, 13, 238, 213, 9, 13, + 238, 212, 9, 13, 238, 211, 9, 13, 238, 210, 9, 13, 238, 209, 9, 13, 238, + 208, 9, 13, 238, 207, 9, 13, 238, 206, 9, 13, 238, 205, 9, 13, 238, 204, + 9, 13, 238, 203, 9, 13, 238, 202, 9, 13, 238, 201, 9, 13, 238, 200, 9, + 13, 238, 199, 9, 13, 238, 198, 9, 13, 238, 197, 9, 13, 238, 196, 9, 13, + 238, 195, 9, 13, 238, 194, 9, 13, 238, 193, 9, 13, 238, 192, 9, 13, 238, + 191, 9, 13, 238, 190, 9, 13, 238, 189, 9, 13, 238, 188, 9, 13, 238, 187, + 9, 13, 238, 186, 9, 13, 238, 185, 9, 13, 238, 184, 9, 13, 238, 183, 9, + 13, 238, 182, 9, 13, 238, 181, 9, 13, 238, 180, 9, 13, 238, 179, 9, 13, + 238, 178, 9, 13, 238, 177, 9, 13, 238, 176, 9, 13, 238, 175, 9, 13, 238, + 174, 9, 13, 238, 173, 9, 13, 238, 172, 9, 13, 238, 171, 9, 13, 238, 170, + 9, 13, 238, 169, 9, 13, 238, 168, 9, 13, 238, 167, 9, 13, 238, 166, 9, + 13, 238, 165, 9, 13, 238, 164, 9, 13, 238, 163, 9, 13, 238, 162, 9, 13, + 238, 161, 9, 13, 238, 160, 9, 13, 238, 159, 9, 13, 238, 158, 9, 13, 238, + 157, 9, 13, 238, 156, 9, 13, 238, 155, 9, 13, 238, 154, 9, 13, 238, 153, + 9, 13, 238, 152, 9, 13, 238, 151, 9, 13, 238, 150, 9, 13, 238, 149, 9, + 13, 238, 148, 9, 13, 238, 147, 9, 13, 238, 146, 9, 13, 238, 145, 9, 13, + 238, 144, 9, 13, 238, 143, 9, 13, 238, 142, 9, 13, 238, 141, 9, 13, 238, + 140, 9, 13, 238, 139, 9, 13, 238, 138, 9, 13, 238, 137, 9, 13, 238, 136, + 9, 13, 238, 135, 9, 13, 238, 134, 9, 13, 238, 133, 9, 13, 238, 132, 9, + 13, 238, 131, 9, 13, 238, 130, 9, 13, 238, 129, 9, 13, 238, 128, 9, 13, + 238, 127, 9, 13, 238, 126, 9, 13, 238, 125, 9, 13, 238, 124, 9, 13, 238, + 123, 9, 13, 238, 122, 9, 13, 238, 121, 9, 13, 238, 120, 9, 13, 238, 119, + 9, 13, 238, 118, 9, 13, 238, 117, 9, 13, 238, 116, 9, 13, 238, 115, 9, + 13, 238, 114, 9, 13, 238, 113, 9, 13, 238, 112, 9, 13, 238, 111, 9, 13, + 238, 110, 9, 13, 238, 109, 9, 13, 238, 108, 9, 13, 238, 107, 9, 13, 238, + 106, 9, 13, 238, 105, 9, 13, 238, 104, 9, 13, 238, 103, 9, 13, 238, 102, + 9, 13, 238, 101, 9, 13, 238, 100, 9, 13, 238, 99, 9, 13, 238, 98, 9, 13, + 238, 97, 9, 13, 238, 96, 9, 13, 238, 95, 9, 13, 238, 94, 9, 13, 238, 93, + 9, 13, 238, 92, 9, 13, 238, 91, 9, 13, 238, 90, 9, 13, 238, 89, 9, 13, + 238, 88, 9, 13, 238, 87, 9, 13, 238, 86, 9, 13, 238, 85, 9, 13, 238, 84, + 9, 13, 238, 83, 9, 13, 238, 82, 9, 13, 238, 81, 9, 13, 238, 80, 9, 13, + 238, 79, 9, 13, 238, 78, 9, 13, 238, 77, 9, 13, 238, 76, 9, 13, 238, 75, + 9, 13, 238, 74, 9, 13, 238, 73, 9, 13, 238, 72, 9, 13, 238, 71, 9, 13, + 238, 70, 9, 13, 238, 69, 9, 13, 238, 68, 9, 13, 238, 67, 9, 13, 238, 66, + 9, 13, 238, 65, 9, 13, 238, 64, 9, 13, 238, 63, 9, 13, 238, 62, 9, 13, + 238, 61, 9, 13, 238, 60, 9, 13, 238, 59, 9, 13, 238, 58, 9, 13, 238, 57, + 9, 13, 238, 56, 9, 13, 238, 55, 9, 13, 238, 54, 9, 13, 238, 53, 9, 13, + 238, 52, 9, 13, 238, 51, 9, 13, 238, 50, 9, 13, 238, 49, 9, 13, 238, 48, + 9, 13, 238, 47, 9, 13, 238, 46, 9, 13, 238, 45, 9, 13, 238, 44, 9, 13, + 238, 43, 9, 13, 238, 42, 9, 13, 238, 41, 9, 13, 238, 40, 9, 13, 238, 39, + 9, 13, 238, 38, 9, 13, 238, 37, 9, 13, 238, 36, 9, 13, 238, 35, 9, 13, + 238, 34, 9, 13, 238, 33, 9, 13, 238, 32, 9, 13, 238, 31, 7, 3, 24, 245, + 207, 7, 3, 24, 245, 203, 7, 3, 24, 245, 166, 7, 3, 24, 245, 206, 7, 3, + 24, 245, 205, 7, 3, 24, 171, 226, 235, 222, 201, 7, 3, 24, 223, 168, 132, + 3, 24, 233, 252, 231, 174, 132, 3, 24, 233, 252, 246, 254, 132, 3, 24, + 233, 252, 237, 200, 132, 3, 24, 219, 97, 231, 174, 132, 3, 24, 233, 252, + 218, 133, 87, 1, 217, 221, 2, 243, 94, 87, 229, 32, 237, 42, 219, 176, + 87, 24, 217, 248, 217, 221, 217, 221, 229, 214, 87, 1, 254, 142, 253, + 207, 87, 1, 218, 201, 254, 168, 87, 1, 218, 201, 249, 177, 87, 1, 218, + 201, 243, 162, 87, 1, 218, 201, 236, 246, 87, 1, 218, 201, 235, 152, 87, + 1, 218, 201, 39, 234, 1, 87, 1, 218, 201, 227, 174, 87, 1, 218, 201, 222, + 102, 87, 1, 254, 142, 88, 55, 87, 1, 224, 210, 2, 224, 210, 248, 145, 87, + 1, 224, 210, 2, 224, 113, 248, 145, 87, 1, 224, 210, 2, 249, 194, 25, + 224, 210, 248, 145, 87, 1, 224, 210, 2, 249, 194, 25, 224, 113, 248, 145, + 87, 1, 99, 2, 229, 214, 87, 1, 99, 2, 228, 143, 87, 1, 99, 2, 234, 77, + 87, 1, 252, 105, 2, 249, 193, 87, 1, 244, 92, 2, 249, 193, 87, 1, 249, + 178, 2, 249, 193, 87, 1, 243, 163, 2, 234, 77, 87, 1, 219, 170, 2, 249, + 193, 87, 1, 217, 96, 2, 249, 193, 87, 1, 222, 51, 2, 249, 193, 87, 1, + 217, 221, 2, 249, 193, 87, 1, 39, 236, 247, 2, 249, 193, 87, 1, 236, 247, + 2, 249, 193, 87, 1, 235, 153, 2, 249, 193, 87, 1, 234, 2, 2, 249, 193, + 87, 1, 231, 104, 2, 249, 193, 87, 1, 226, 146, 2, 249, 193, 87, 1, 39, + 229, 199, 2, 249, 193, 87, 1, 229, 199, 2, 249, 193, 87, 1, 221, 52, 2, + 249, 193, 87, 1, 228, 108, 2, 249, 193, 87, 1, 227, 175, 2, 249, 193, 87, + 1, 224, 210, 2, 249, 193, 87, 1, 222, 103, 2, 249, 193, 87, 1, 219, 170, + 2, 242, 254, 87, 1, 252, 105, 2, 227, 248, 87, 1, 236, 247, 2, 227, 248, + 87, 1, 229, 199, 2, 227, 248, 87, 24, 99, 235, 152, 12, 1, 99, 218, 247, + 47, 17, 12, 1, 99, 218, 247, 39, 17, 12, 1, 252, 136, 47, 17, 12, 1, 252, + 136, 39, 17, 12, 1, 252, 136, 66, 17, 12, 1, 252, 136, 128, 17, 12, 1, + 229, 188, 47, 17, 12, 1, 229, 188, 39, 17, 12, 1, 229, 188, 66, 17, 12, + 1, 229, 188, 128, 17, 12, 1, 252, 127, 47, 17, 12, 1, 252, 127, 39, 17, + 12, 1, 252, 127, 66, 17, 12, 1, 252, 127, 128, 17, 12, 1, 221, 22, 47, + 17, 12, 1, 221, 22, 39, 17, 12, 1, 221, 22, 66, 17, 12, 1, 221, 22, 128, + 17, 12, 1, 222, 76, 47, 17, 12, 1, 222, 76, 39, 17, 12, 1, 222, 76, 66, + 17, 12, 1, 222, 76, 128, 17, 12, 1, 221, 24, 47, 17, 12, 1, 221, 24, 39, + 17, 12, 1, 221, 24, 66, 17, 12, 1, 221, 24, 128, 17, 12, 1, 219, 159, 47, + 17, 12, 1, 219, 159, 39, 17, 12, 1, 219, 159, 66, 17, 12, 1, 219, 159, + 128, 17, 12, 1, 229, 186, 47, 17, 12, 1, 229, 186, 39, 17, 12, 1, 229, + 186, 66, 17, 12, 1, 229, 186, 128, 17, 12, 1, 247, 80, 47, 17, 12, 1, + 247, 80, 39, 17, 12, 1, 247, 80, 66, 17, 12, 1, 247, 80, 128, 17, 12, 1, + 231, 71, 47, 17, 12, 1, 231, 71, 39, 17, 12, 1, 231, 71, 66, 17, 12, 1, + 231, 71, 128, 17, 12, 1, 222, 92, 47, 17, 12, 1, 222, 92, 39, 17, 12, 1, + 222, 92, 66, 17, 12, 1, 222, 92, 128, 17, 12, 1, 222, 90, 47, 17, 12, 1, + 222, 90, 39, 17, 12, 1, 222, 90, 66, 17, 12, 1, 222, 90, 128, 17, 12, 1, + 249, 130, 47, 17, 12, 1, 249, 130, 39, 17, 12, 1, 249, 190, 47, 17, 12, + 1, 249, 190, 39, 17, 12, 1, 247, 104, 47, 17, 12, 1, 247, 104, 39, 17, + 12, 1, 249, 128, 47, 17, 12, 1, 249, 128, 39, 17, 12, 1, 237, 110, 47, + 17, 12, 1, 237, 110, 39, 17, 12, 1, 227, 49, 47, 17, 12, 1, 227, 49, 39, + 17, 12, 1, 236, 177, 47, 17, 12, 1, 236, 177, 39, 17, 12, 1, 236, 177, + 66, 17, 12, 1, 236, 177, 128, 17, 12, 1, 244, 244, 47, 17, 12, 1, 244, + 244, 39, 17, 12, 1, 244, 244, 66, 17, 12, 1, 244, 244, 128, 17, 12, 1, + 244, 10, 47, 17, 12, 1, 244, 10, 39, 17, 12, 1, 244, 10, 66, 17, 12, 1, + 244, 10, 128, 17, 12, 1, 232, 83, 47, 17, 12, 1, 232, 83, 39, 17, 12, 1, + 232, 83, 66, 17, 12, 1, 232, 83, 128, 17, 12, 1, 231, 194, 244, 108, 47, + 17, 12, 1, 231, 194, 244, 108, 39, 17, 12, 1, 227, 79, 47, 17, 12, 1, + 227, 79, 39, 17, 12, 1, 227, 79, 66, 17, 12, 1, 227, 79, 128, 17, 12, 1, + 243, 147, 2, 70, 71, 47, 17, 12, 1, 243, 147, 2, 70, 71, 39, 17, 12, 1, + 243, 147, 244, 66, 47, 17, 12, 1, 243, 147, 244, 66, 39, 17, 12, 1, 243, + 147, 244, 66, 66, 17, 12, 1, 243, 147, 244, 66, 128, 17, 12, 1, 243, 147, + 248, 164, 47, 17, 12, 1, 243, 147, 248, 164, 39, 17, 12, 1, 243, 147, + 248, 164, 66, 17, 12, 1, 243, 147, 248, 164, 128, 17, 12, 1, 70, 252, + 195, 47, 17, 12, 1, 70, 252, 195, 39, 17, 12, 1, 70, 252, 195, 2, 181, + 71, 47, 17, 12, 1, 70, 252, 195, 2, 181, 71, 39, 17, 12, 1, 232, 118, 47, + 17, 12, 1, 232, 118, 39, 17, 12, 1, 232, 118, 66, 17, 12, 1, 232, 118, + 128, 17, 12, 1, 105, 47, 17, 12, 1, 105, 39, 17, 12, 1, 230, 168, 47, 17, + 12, 1, 230, 168, 39, 17, 12, 1, 217, 201, 47, 17, 12, 1, 217, 201, 39, + 17, 12, 1, 105, 2, 181, 71, 47, 17, 12, 1, 219, 166, 47, 17, 12, 1, 219, + 166, 39, 17, 12, 1, 236, 98, 230, 168, 47, 17, 12, 1, 236, 98, 230, 168, + 39, 17, 12, 1, 236, 98, 217, 201, 47, 17, 12, 1, 236, 98, 217, 201, 39, + 17, 12, 1, 178, 47, 17, 12, 1, 178, 39, 17, 12, 1, 178, 66, 17, 12, 1, + 178, 128, 17, 12, 1, 220, 104, 236, 188, 236, 98, 99, 197, 66, 17, 12, 1, + 220, 104, 236, 188, 236, 98, 99, 197, 128, 17, 12, 24, 70, 2, 181, 71, 2, + 99, 47, 17, 12, 24, 70, 2, 181, 71, 2, 99, 39, 17, 12, 24, 70, 2, 181, + 71, 2, 254, 235, 47, 17, 12, 24, 70, 2, 181, 71, 2, 254, 235, 39, 17, 12, + 24, 70, 2, 181, 71, 2, 218, 234, 47, 17, 12, 24, 70, 2, 181, 71, 2, 218, + 234, 39, 17, 12, 24, 70, 2, 181, 71, 2, 105, 47, 17, 12, 24, 70, 2, 181, + 71, 2, 105, 39, 17, 12, 24, 70, 2, 181, 71, 2, 230, 168, 47, 17, 12, 24, + 70, 2, 181, 71, 2, 230, 168, 39, 17, 12, 24, 70, 2, 181, 71, 2, 217, 201, + 47, 17, 12, 24, 70, 2, 181, 71, 2, 217, 201, 39, 17, 12, 24, 70, 2, 181, + 71, 2, 178, 47, 17, 12, 24, 70, 2, 181, 71, 2, 178, 39, 17, 12, 24, 70, + 2, 181, 71, 2, 178, 66, 17, 12, 24, 220, 104, 236, 98, 70, 2, 181, 71, 2, + 99, 197, 47, 17, 12, 24, 220, 104, 236, 98, 70, 2, 181, 71, 2, 99, 197, + 39, 17, 12, 24, 220, 104, 236, 98, 70, 2, 181, 71, 2, 99, 197, 66, 17, + 12, 1, 245, 241, 70, 47, 17, 12, 1, 245, 241, 70, 39, 17, 12, 1, 245, + 241, 70, 66, 17, 12, 1, 245, 241, 70, 128, 17, 12, 24, 70, 2, 181, 71, 2, + 134, 47, 17, 12, 24, 70, 2, 181, 71, 2, 111, 47, 17, 12, 24, 70, 2, 181, + 71, 2, 62, 47, 17, 12, 24, 70, 2, 181, 71, 2, 99, 197, 47, 17, 12, 24, + 70, 2, 181, 71, 2, 70, 47, 17, 12, 24, 252, 129, 2, 134, 47, 17, 12, 24, + 252, 129, 2, 111, 47, 17, 12, 24, 252, 129, 2, 236, 147, 47, 17, 12, 24, + 252, 129, 2, 62, 47, 17, 12, 24, 252, 129, 2, 99, 197, 47, 17, 12, 24, + 252, 129, 2, 70, 47, 17, 12, 24, 222, 78, 2, 134, 47, 17, 12, 24, 222, + 78, 2, 111, 47, 17, 12, 24, 222, 78, 2, 236, 147, 47, 17, 12, 24, 222, + 78, 2, 62, 47, 17, 12, 24, 222, 78, 2, 99, 197, 47, 17, 12, 24, 222, 78, + 2, 70, 47, 17, 12, 24, 222, 20, 2, 134, 47, 17, 12, 24, 222, 20, 2, 62, + 47, 17, 12, 24, 222, 20, 2, 99, 197, 47, 17, 12, 24, 222, 20, 2, 70, 47, + 17, 12, 24, 134, 2, 111, 47, 17, 12, 24, 134, 2, 62, 47, 17, 12, 24, 111, + 2, 134, 47, 17, 12, 24, 111, 2, 62, 47, 17, 12, 24, 236, 147, 2, 134, 47, + 17, 12, 24, 236, 147, 2, 111, 47, 17, 12, 24, 236, 147, 2, 62, 47, 17, + 12, 24, 226, 83, 2, 134, 47, 17, 12, 24, 226, 83, 2, 111, 47, 17, 12, 24, + 226, 83, 2, 236, 147, 47, 17, 12, 24, 226, 83, 2, 62, 47, 17, 12, 24, + 226, 171, 2, 111, 47, 17, 12, 24, 226, 171, 2, 62, 47, 17, 12, 24, 249, + 203, 2, 134, 47, 17, 12, 24, 249, 203, 2, 111, 47, 17, 12, 24, 249, 203, + 2, 236, 147, 47, 17, 12, 24, 249, 203, 2, 62, 47, 17, 12, 24, 222, 138, + 2, 111, 47, 17, 12, 24, 222, 138, 2, 62, 47, 17, 12, 24, 217, 110, 2, 62, + 47, 17, 12, 24, 254, 192, 2, 134, 47, 17, 12, 24, 254, 192, 2, 62, 47, + 17, 12, 24, 244, 123, 2, 134, 47, 17, 12, 24, 244, 123, 2, 62, 47, 17, + 12, 24, 245, 222, 2, 134, 47, 17, 12, 24, 245, 222, 2, 111, 47, 17, 12, + 24, 245, 222, 2, 236, 147, 47, 17, 12, 24, 245, 222, 2, 62, 47, 17, 12, + 24, 245, 222, 2, 99, 197, 47, 17, 12, 24, 245, 222, 2, 70, 47, 17, 12, + 24, 228, 149, 2, 111, 47, 17, 12, 24, 228, 149, 2, 62, 47, 17, 12, 24, + 228, 149, 2, 99, 197, 47, 17, 12, 24, 228, 149, 2, 70, 47, 17, 12, 24, + 236, 247, 2, 99, 47, 17, 12, 24, 236, 247, 2, 134, 47, 17, 12, 24, 236, + 247, 2, 111, 47, 17, 12, 24, 236, 247, 2, 236, 147, 47, 17, 12, 24, 236, + 247, 2, 235, 161, 47, 17, 12, 24, 236, 247, 2, 62, 47, 17, 12, 24, 236, + 247, 2, 99, 197, 47, 17, 12, 24, 236, 247, 2, 70, 47, 17, 12, 24, 235, + 161, 2, 134, 47, 17, 12, 24, 235, 161, 2, 111, 47, 17, 12, 24, 235, 161, + 2, 236, 147, 47, 17, 12, 24, 235, 161, 2, 62, 47, 17, 12, 24, 235, 161, + 2, 99, 197, 47, 17, 12, 24, 235, 161, 2, 70, 47, 17, 12, 24, 62, 2, 134, + 47, 17, 12, 24, 62, 2, 111, 47, 17, 12, 24, 62, 2, 236, 147, 47, 17, 12, + 24, 62, 2, 62, 47, 17, 12, 24, 62, 2, 99, 197, 47, 17, 12, 24, 62, 2, 70, + 47, 17, 12, 24, 231, 194, 2, 134, 47, 17, 12, 24, 231, 194, 2, 111, 47, + 17, 12, 24, 231, 194, 2, 236, 147, 47, 17, 12, 24, 231, 194, 2, 62, 47, + 17, 12, 24, 231, 194, 2, 99, 197, 47, 17, 12, 24, 231, 194, 2, 70, 47, + 17, 12, 24, 243, 147, 2, 134, 47, 17, 12, 24, 243, 147, 2, 62, 47, 17, + 12, 24, 243, 147, 2, 99, 197, 47, 17, 12, 24, 243, 147, 2, 70, 47, 17, + 12, 24, 70, 2, 134, 47, 17, 12, 24, 70, 2, 111, 47, 17, 12, 24, 70, 2, + 236, 147, 47, 17, 12, 24, 70, 2, 62, 47, 17, 12, 24, 70, 2, 99, 197, 47, + 17, 12, 24, 70, 2, 70, 47, 17, 12, 24, 222, 30, 2, 223, 59, 99, 47, 17, + 12, 24, 227, 197, 2, 223, 59, 99, 47, 17, 12, 24, 99, 197, 2, 223, 59, + 99, 47, 17, 12, 24, 225, 17, 2, 249, 171, 47, 17, 12, 24, 225, 17, 2, + 236, 205, 47, 17, 12, 24, 225, 17, 2, 245, 239, 47, 17, 12, 24, 225, 17, + 2, 249, 173, 47, 17, 12, 24, 225, 17, 2, 236, 207, 47, 17, 12, 24, 225, + 17, 2, 223, 59, 99, 47, 17, 12, 24, 70, 2, 181, 71, 2, 227, 197, 39, 17, + 12, 24, 70, 2, 181, 71, 2, 217, 107, 39, 17, 12, 24, 70, 2, 181, 71, 2, + 62, 39, 17, 12, 24, 70, 2, 181, 71, 2, 231, 194, 39, 17, 12, 24, 70, 2, + 181, 71, 2, 99, 197, 39, 17, 12, 24, 70, 2, 181, 71, 2, 70, 39, 17, 12, + 24, 252, 129, 2, 227, 197, 39, 17, 12, 24, 252, 129, 2, 217, 107, 39, 17, + 12, 24, 252, 129, 2, 62, 39, 17, 12, 24, 252, 129, 2, 231, 194, 39, 17, + 12, 24, 252, 129, 2, 99, 197, 39, 17, 12, 24, 252, 129, 2, 70, 39, 17, + 12, 24, 222, 78, 2, 227, 197, 39, 17, 12, 24, 222, 78, 2, 217, 107, 39, + 17, 12, 24, 222, 78, 2, 62, 39, 17, 12, 24, 222, 78, 2, 231, 194, 39, 17, + 12, 24, 222, 78, 2, 99, 197, 39, 17, 12, 24, 222, 78, 2, 70, 39, 17, 12, + 24, 222, 20, 2, 227, 197, 39, 17, 12, 24, 222, 20, 2, 217, 107, 39, 17, + 12, 24, 222, 20, 2, 62, 39, 17, 12, 24, 222, 20, 2, 231, 194, 39, 17, 12, + 24, 222, 20, 2, 99, 197, 39, 17, 12, 24, 222, 20, 2, 70, 39, 17, 12, 24, + 245, 222, 2, 99, 197, 39, 17, 12, 24, 245, 222, 2, 70, 39, 17, 12, 24, + 228, 149, 2, 99, 197, 39, 17, 12, 24, 228, 149, 2, 70, 39, 17, 12, 24, + 236, 247, 2, 99, 39, 17, 12, 24, 236, 247, 2, 235, 161, 39, 17, 12, 24, + 236, 247, 2, 62, 39, 17, 12, 24, 236, 247, 2, 99, 197, 39, 17, 12, 24, + 236, 247, 2, 70, 39, 17, 12, 24, 235, 161, 2, 62, 39, 17, 12, 24, 235, + 161, 2, 99, 197, 39, 17, 12, 24, 235, 161, 2, 70, 39, 17, 12, 24, 62, 2, + 99, 39, 17, 12, 24, 62, 2, 62, 39, 17, 12, 24, 231, 194, 2, 227, 197, 39, + 17, 12, 24, 231, 194, 2, 217, 107, 39, 17, 12, 24, 231, 194, 2, 62, 39, + 17, 12, 24, 231, 194, 2, 231, 194, 39, 17, 12, 24, 231, 194, 2, 99, 197, + 39, 17, 12, 24, 231, 194, 2, 70, 39, 17, 12, 24, 99, 197, 2, 223, 59, 99, + 39, 17, 12, 24, 70, 2, 227, 197, 39, 17, 12, 24, 70, 2, 217, 107, 39, 17, + 12, 24, 70, 2, 62, 39, 17, 12, 24, 70, 2, 231, 194, 39, 17, 12, 24, 70, + 2, 99, 197, 39, 17, 12, 24, 70, 2, 70, 39, 17, 12, 24, 70, 2, 181, 71, 2, + 134, 66, 17, 12, 24, 70, 2, 181, 71, 2, 111, 66, 17, 12, 24, 70, 2, 181, + 71, 2, 236, 147, 66, 17, 12, 24, 70, 2, 181, 71, 2, 62, 66, 17, 12, 24, + 70, 2, 181, 71, 2, 243, 147, 66, 17, 12, 24, 252, 129, 2, 134, 66, 17, + 12, 24, 252, 129, 2, 111, 66, 17, 12, 24, 252, 129, 2, 236, 147, 66, 17, + 12, 24, 252, 129, 2, 62, 66, 17, 12, 24, 252, 129, 2, 243, 147, 66, 17, + 12, 24, 222, 78, 2, 134, 66, 17, 12, 24, 222, 78, 2, 111, 66, 17, 12, 24, + 222, 78, 2, 236, 147, 66, 17, 12, 24, 222, 78, 2, 62, 66, 17, 12, 24, + 222, 78, 2, 243, 147, 66, 17, 12, 24, 222, 20, 2, 62, 66, 17, 12, 24, + 134, 2, 111, 66, 17, 12, 24, 134, 2, 62, 66, 17, 12, 24, 111, 2, 134, 66, + 17, 12, 24, 111, 2, 62, 66, 17, 12, 24, 236, 147, 2, 134, 66, 17, 12, 24, + 236, 147, 2, 62, 66, 17, 12, 24, 226, 83, 2, 134, 66, 17, 12, 24, 226, + 83, 2, 111, 66, 17, 12, 24, 226, 83, 2, 236, 147, 66, 17, 12, 24, 226, + 83, 2, 62, 66, 17, 12, 24, 226, 171, 2, 111, 66, 17, 12, 24, 226, 171, 2, + 236, 147, 66, 17, 12, 24, 226, 171, 2, 62, 66, 17, 12, 24, 249, 203, 2, + 134, 66, 17, 12, 24, 249, 203, 2, 111, 66, 17, 12, 24, 249, 203, 2, 236, + 147, 66, 17, 12, 24, 249, 203, 2, 62, 66, 17, 12, 24, 222, 138, 2, 111, + 66, 17, 12, 24, 217, 110, 2, 62, 66, 17, 12, 24, 254, 192, 2, 134, 66, + 17, 12, 24, 254, 192, 2, 62, 66, 17, 12, 24, 244, 123, 2, 134, 66, 17, + 12, 24, 244, 123, 2, 62, 66, 17, 12, 24, 245, 222, 2, 134, 66, 17, 12, + 24, 245, 222, 2, 111, 66, 17, 12, 24, 245, 222, 2, 236, 147, 66, 17, 12, + 24, 245, 222, 2, 62, 66, 17, 12, 24, 228, 149, 2, 111, 66, 17, 12, 24, + 228, 149, 2, 62, 66, 17, 12, 24, 236, 247, 2, 134, 66, 17, 12, 24, 236, + 247, 2, 111, 66, 17, 12, 24, 236, 247, 2, 236, 147, 66, 17, 12, 24, 236, + 247, 2, 235, 161, 66, 17, 12, 24, 236, 247, 2, 62, 66, 17, 12, 24, 235, + 161, 2, 134, 66, 17, 12, 24, 235, 161, 2, 111, 66, 17, 12, 24, 235, 161, + 2, 236, 147, 66, 17, 12, 24, 235, 161, 2, 62, 66, 17, 12, 24, 235, 161, + 2, 243, 147, 66, 17, 12, 24, 62, 2, 134, 66, 17, 12, 24, 62, 2, 111, 66, + 17, 12, 24, 62, 2, 236, 147, 66, 17, 12, 24, 62, 2, 62, 66, 17, 12, 24, + 231, 194, 2, 134, 66, 17, 12, 24, 231, 194, 2, 111, 66, 17, 12, 24, 231, + 194, 2, 236, 147, 66, 17, 12, 24, 231, 194, 2, 62, 66, 17, 12, 24, 231, + 194, 2, 243, 147, 66, 17, 12, 24, 243, 147, 2, 134, 66, 17, 12, 24, 243, + 147, 2, 62, 66, 17, 12, 24, 243, 147, 2, 223, 59, 99, 66, 17, 12, 24, 70, + 2, 134, 66, 17, 12, 24, 70, 2, 111, 66, 17, 12, 24, 70, 2, 236, 147, 66, + 17, 12, 24, 70, 2, 62, 66, 17, 12, 24, 70, 2, 243, 147, 66, 17, 12, 24, + 70, 2, 181, 71, 2, 62, 128, 17, 12, 24, 70, 2, 181, 71, 2, 243, 147, 128, + 17, 12, 24, 252, 129, 2, 62, 128, 17, 12, 24, 252, 129, 2, 243, 147, 128, + 17, 12, 24, 222, 78, 2, 62, 128, 17, 12, 24, 222, 78, 2, 243, 147, 128, + 17, 12, 24, 222, 20, 2, 62, 128, 17, 12, 24, 222, 20, 2, 243, 147, 128, + 17, 12, 24, 226, 83, 2, 62, 128, 17, 12, 24, 226, 83, 2, 243, 147, 128, + 17, 12, 24, 224, 243, 2, 62, 128, 17, 12, 24, 224, 243, 2, 243, 147, 128, + 17, 12, 24, 236, 247, 2, 235, 161, 128, 17, 12, 24, 236, 247, 2, 62, 128, + 17, 12, 24, 235, 161, 2, 62, 128, 17, 12, 24, 231, 194, 2, 62, 128, 17, + 12, 24, 231, 194, 2, 243, 147, 128, 17, 12, 24, 70, 2, 62, 128, 17, 12, + 24, 70, 2, 243, 147, 128, 17, 12, 24, 225, 17, 2, 245, 239, 128, 17, 12, + 24, 225, 17, 2, 249, 173, 128, 17, 12, 24, 225, 17, 2, 236, 207, 128, 17, + 12, 24, 222, 138, 2, 99, 197, 47, 17, 12, 24, 222, 138, 2, 70, 47, 17, + 12, 24, 254, 192, 2, 99, 197, 47, 17, 12, 24, 254, 192, 2, 70, 47, 17, + 12, 24, 244, 123, 2, 99, 197, 47, 17, 12, 24, 244, 123, 2, 70, 47, 17, + 12, 24, 226, 83, 2, 99, 197, 47, 17, 12, 24, 226, 83, 2, 70, 47, 17, 12, + 24, 224, 243, 2, 99, 197, 47, 17, 12, 24, 224, 243, 2, 70, 47, 17, 12, + 24, 111, 2, 99, 197, 47, 17, 12, 24, 111, 2, 70, 47, 17, 12, 24, 134, 2, + 99, 197, 47, 17, 12, 24, 134, 2, 70, 47, 17, 12, 24, 236, 147, 2, 99, + 197, 47, 17, 12, 24, 236, 147, 2, 70, 47, 17, 12, 24, 226, 171, 2, 99, + 197, 47, 17, 12, 24, 226, 171, 2, 70, 47, 17, 12, 24, 249, 203, 2, 99, + 197, 47, 17, 12, 24, 249, 203, 2, 70, 47, 17, 12, 24, 224, 243, 2, 134, + 47, 17, 12, 24, 224, 243, 2, 111, 47, 17, 12, 24, 224, 243, 2, 236, 147, + 47, 17, 12, 24, 224, 243, 2, 62, 47, 17, 12, 24, 224, 243, 2, 227, 197, + 47, 17, 12, 24, 226, 83, 2, 227, 197, 47, 17, 12, 24, 226, 171, 2, 227, + 197, 47, 17, 12, 24, 249, 203, 2, 227, 197, 47, 17, 12, 24, 222, 138, 2, + 99, 197, 39, 17, 12, 24, 222, 138, 2, 70, 39, 17, 12, 24, 254, 192, 2, + 99, 197, 39, 17, 12, 24, 254, 192, 2, 70, 39, 17, 12, 24, 244, 123, 2, + 99, 197, 39, 17, 12, 24, 244, 123, 2, 70, 39, 17, 12, 24, 226, 83, 2, 99, + 197, 39, 17, 12, 24, 226, 83, 2, 70, 39, 17, 12, 24, 224, 243, 2, 99, + 197, 39, 17, 12, 24, 224, 243, 2, 70, 39, 17, 12, 24, 111, 2, 99, 197, + 39, 17, 12, 24, 111, 2, 70, 39, 17, 12, 24, 134, 2, 99, 197, 39, 17, 12, + 24, 134, 2, 70, 39, 17, 12, 24, 236, 147, 2, 99, 197, 39, 17, 12, 24, + 236, 147, 2, 70, 39, 17, 12, 24, 226, 171, 2, 99, 197, 39, 17, 12, 24, + 226, 171, 2, 70, 39, 17, 12, 24, 249, 203, 2, 99, 197, 39, 17, 12, 24, + 249, 203, 2, 70, 39, 17, 12, 24, 224, 243, 2, 134, 39, 17, 12, 24, 224, + 243, 2, 111, 39, 17, 12, 24, 224, 243, 2, 236, 147, 39, 17, 12, 24, 224, + 243, 2, 62, 39, 17, 12, 24, 224, 243, 2, 227, 197, 39, 17, 12, 24, 226, + 83, 2, 227, 197, 39, 17, 12, 24, 226, 171, 2, 227, 197, 39, 17, 12, 24, + 249, 203, 2, 227, 197, 39, 17, 12, 24, 224, 243, 2, 134, 66, 17, 12, 24, + 224, 243, 2, 111, 66, 17, 12, 24, 224, 243, 2, 236, 147, 66, 17, 12, 24, + 224, 243, 2, 62, 66, 17, 12, 24, 226, 83, 2, 243, 147, 66, 17, 12, 24, + 224, 243, 2, 243, 147, 66, 17, 12, 24, 222, 138, 2, 62, 66, 17, 12, 24, + 226, 83, 2, 134, 128, 17, 12, 24, 226, 83, 2, 111, 128, 17, 12, 24, 226, + 83, 2, 236, 147, 128, 17, 12, 24, 224, 243, 2, 134, 128, 17, 12, 24, 224, + 243, 2, 111, 128, 17, 12, 24, 224, 243, 2, 236, 147, 128, 17, 12, 24, + 222, 138, 2, 62, 128, 17, 12, 24, 217, 110, 2, 62, 128, 17, 12, 24, 99, + 2, 245, 237, 39, 17, 12, 24, 99, 2, 245, 237, 47, 17, 230, 97, 42, 229, + 229, 230, 97, 45, 229, 229, 12, 24, 222, 78, 2, 134, 2, 62, 66, 17, 12, + 24, 222, 78, 2, 111, 2, 134, 39, 17, 12, 24, 222, 78, 2, 111, 2, 134, 66, + 17, 12, 24, 222, 78, 2, 111, 2, 62, 66, 17, 12, 24, 222, 78, 2, 236, 147, + 2, 62, 66, 17, 12, 24, 222, 78, 2, 62, 2, 134, 66, 17, 12, 24, 222, 78, + 2, 62, 2, 111, 66, 17, 12, 24, 222, 78, 2, 62, 2, 236, 147, 66, 17, 12, + 24, 134, 2, 62, 2, 111, 39, 17, 12, 24, 134, 2, 62, 2, 111, 66, 17, 12, + 24, 111, 2, 62, 2, 70, 39, 17, 12, 24, 111, 2, 62, 2, 99, 197, 39, 17, + 12, 24, 226, 83, 2, 111, 2, 134, 66, 17, 12, 24, 226, 83, 2, 134, 2, 111, + 66, 17, 12, 24, 226, 83, 2, 134, 2, 99, 197, 39, 17, 12, 24, 226, 83, 2, + 62, 2, 111, 39, 17, 12, 24, 226, 83, 2, 62, 2, 111, 66, 17, 12, 24, 226, + 83, 2, 62, 2, 134, 66, 17, 12, 24, 226, 83, 2, 62, 2, 62, 39, 17, 12, 24, + 226, 83, 2, 62, 2, 62, 66, 17, 12, 24, 226, 171, 2, 111, 2, 111, 39, 17, + 12, 24, 226, 171, 2, 111, 2, 111, 66, 17, 12, 24, 226, 171, 2, 62, 2, 62, + 39, 17, 12, 24, 224, 243, 2, 111, 2, 62, 39, 17, 12, 24, 224, 243, 2, + 111, 2, 62, 66, 17, 12, 24, 224, 243, 2, 134, 2, 70, 39, 17, 12, 24, 224, + 243, 2, 62, 2, 236, 147, 39, 17, 12, 24, 224, 243, 2, 62, 2, 236, 147, + 66, 17, 12, 24, 224, 243, 2, 62, 2, 62, 39, 17, 12, 24, 224, 243, 2, 62, + 2, 62, 66, 17, 12, 24, 249, 203, 2, 111, 2, 99, 197, 39, 17, 12, 24, 249, + 203, 2, 236, 147, 2, 62, 39, 17, 12, 24, 249, 203, 2, 236, 147, 2, 62, + 66, 17, 12, 24, 222, 138, 2, 62, 2, 111, 39, 17, 12, 24, 222, 138, 2, 62, + 2, 111, 66, 17, 12, 24, 222, 138, 2, 62, 2, 62, 66, 17, 12, 24, 222, 138, + 2, 62, 2, 70, 39, 17, 12, 24, 254, 192, 2, 134, 2, 62, 39, 17, 12, 24, + 254, 192, 2, 62, 2, 62, 39, 17, 12, 24, 254, 192, 2, 62, 2, 62, 66, 17, + 12, 24, 254, 192, 2, 62, 2, 99, 197, 39, 17, 12, 24, 244, 123, 2, 62, 2, + 62, 39, 17, 12, 24, 244, 123, 2, 62, 2, 70, 39, 17, 12, 24, 244, 123, 2, + 62, 2, 99, 197, 39, 17, 12, 24, 245, 222, 2, 236, 147, 2, 62, 39, 17, 12, + 24, 245, 222, 2, 236, 147, 2, 62, 66, 17, 12, 24, 228, 149, 2, 62, 2, + 111, 39, 17, 12, 24, 228, 149, 2, 62, 2, 62, 39, 17, 12, 24, 235, 161, 2, + 111, 2, 62, 39, 17, 12, 24, 235, 161, 2, 111, 2, 70, 39, 17, 12, 24, 235, + 161, 2, 111, 2, 99, 197, 39, 17, 12, 24, 235, 161, 2, 134, 2, 134, 66, + 17, 12, 24, 235, 161, 2, 134, 2, 134, 39, 17, 12, 24, 235, 161, 2, 236, + 147, 2, 62, 39, 17, 12, 24, 235, 161, 2, 236, 147, 2, 62, 66, 17, 12, 24, + 235, 161, 2, 62, 2, 111, 39, 17, 12, 24, 235, 161, 2, 62, 2, 111, 66, 17, + 12, 24, 62, 2, 111, 2, 134, 66, 17, 12, 24, 62, 2, 111, 2, 62, 66, 17, + 12, 24, 62, 2, 111, 2, 70, 39, 17, 12, 24, 62, 2, 134, 2, 111, 66, 17, + 12, 24, 62, 2, 134, 2, 62, 66, 17, 12, 24, 62, 2, 236, 147, 2, 134, 66, + 17, 12, 24, 62, 2, 236, 147, 2, 62, 66, 17, 12, 24, 62, 2, 134, 2, 236, + 147, 66, 17, 12, 24, 243, 147, 2, 62, 2, 134, 66, 17, 12, 24, 243, 147, + 2, 62, 2, 62, 66, 17, 12, 24, 231, 194, 2, 111, 2, 62, 66, 17, 12, 24, + 231, 194, 2, 111, 2, 99, 197, 39, 17, 12, 24, 231, 194, 2, 134, 2, 62, + 39, 17, 12, 24, 231, 194, 2, 134, 2, 62, 66, 17, 12, 24, 231, 194, 2, + 134, 2, 99, 197, 39, 17, 12, 24, 231, 194, 2, 62, 2, 70, 39, 17, 12, 24, + 231, 194, 2, 62, 2, 99, 197, 39, 17, 12, 24, 70, 2, 62, 2, 62, 39, 17, + 12, 24, 70, 2, 62, 2, 62, 66, 17, 12, 24, 252, 129, 2, 236, 147, 2, 70, + 39, 17, 12, 24, 222, 78, 2, 134, 2, 70, 39, 17, 12, 24, 222, 78, 2, 134, + 2, 99, 197, 39, 17, 12, 24, 222, 78, 2, 236, 147, 2, 70, 39, 17, 12, 24, + 222, 78, 2, 236, 147, 2, 99, 197, 39, 17, 12, 24, 222, 78, 2, 62, 2, 70, + 39, 17, 12, 24, 222, 78, 2, 62, 2, 99, 197, 39, 17, 12, 24, 134, 2, 62, + 2, 70, 39, 17, 12, 24, 134, 2, 111, 2, 99, 197, 39, 17, 12, 24, 134, 2, + 62, 2, 99, 197, 39, 17, 12, 24, 226, 83, 2, 236, 147, 2, 99, 197, 39, 17, + 12, 24, 226, 171, 2, 111, 2, 70, 39, 17, 12, 24, 224, 243, 2, 111, 2, 70, + 39, 17, 12, 24, 249, 203, 2, 111, 2, 70, 39, 17, 12, 24, 235, 161, 2, + 134, 2, 70, 39, 17, 12, 24, 235, 161, 2, 62, 2, 70, 39, 17, 12, 24, 70, + 2, 111, 2, 70, 39, 17, 12, 24, 70, 2, 134, 2, 70, 39, 17, 12, 24, 70, 2, + 62, 2, 70, 39, 17, 12, 24, 62, 2, 62, 2, 70, 39, 17, 12, 24, 228, 149, 2, + 62, 2, 70, 39, 17, 12, 24, 231, 194, 2, 111, 2, 70, 39, 17, 12, 24, 228, + 149, 2, 62, 2, 111, 66, 17, 12, 24, 235, 161, 2, 111, 2, 62, 66, 17, 12, + 24, 254, 192, 2, 62, 2, 70, 39, 17, 12, 24, 236, 247, 2, 62, 2, 70, 39, + 17, 12, 24, 231, 194, 2, 134, 2, 111, 66, 17, 12, 24, 62, 2, 236, 147, 2, + 70, 39, 17, 12, 24, 235, 161, 2, 134, 2, 62, 66, 17, 12, 24, 236, 247, 2, + 62, 2, 62, 39, 17, 12, 24, 235, 161, 2, 134, 2, 62, 39, 17, 12, 24, 231, + 194, 2, 134, 2, 111, 39, 17, 12, 24, 134, 2, 111, 2, 70, 39, 17, 12, 24, + 111, 2, 134, 2, 70, 39, 17, 12, 24, 62, 2, 134, 2, 70, 39, 17, 12, 24, + 245, 222, 2, 62, 2, 70, 39, 17, 12, 24, 252, 129, 2, 111, 2, 70, 39, 17, + 12, 24, 236, 247, 2, 62, 2, 62, 66, 17, 12, 24, 254, 192, 2, 134, 2, 62, + 66, 17, 12, 24, 226, 171, 2, 62, 2, 62, 66, 17, 12, 24, 226, 83, 2, 236, + 147, 2, 70, 39, 17, 12, 24, 231, 194, 2, 134, 2, 70, 39, 17, 12, 24, 226, + 153, 220, 32, 254, 14, 236, 35, 223, 137, 5, 47, 17, 12, 24, 228, 145, + 220, 32, 254, 14, 236, 35, 223, 137, 5, 47, 17, 12, 24, 254, 156, 47, 17, + 12, 24, 254, 179, 47, 17, 12, 24, 233, 130, 47, 17, 12, 24, 226, 154, 47, + 17, 12, 24, 227, 230, 47, 17, 12, 24, 254, 170, 47, 17, 12, 24, 218, 249, + 47, 17, 12, 24, 226, 153, 47, 17, 12, 24, 226, 152, 254, 170, 218, 248, + 12, 24, 237, 120, 227, 146, 55, 12, 24, 252, 61, 254, 65, 254, 66, 41, + 226, 73, 41, 225, 218, 41, 225, 150, 41, 225, 139, 41, 225, 128, 41, 225, + 117, 41, 225, 106, 41, 225, 95, 41, 225, 84, 41, 226, 72, 41, 226, 61, + 41, 226, 50, 41, 226, 39, 41, 226, 28, 41, 226, 17, 41, 226, 6, 228, 238, + 245, 124, 35, 69, 250, 168, 228, 238, 245, 124, 35, 69, 98, 250, 168, + 228, 238, 245, 124, 35, 69, 98, 245, 90, 223, 136, 228, 238, 245, 124, + 35, 69, 250, 175, 228, 238, 245, 124, 35, 69, 225, 67, 228, 238, 245, + 124, 35, 69, 246, 95, 78, 228, 238, 245, 124, 35, 69, 228, 82, 78, 228, + 238, 245, 124, 35, 69, 42, 67, 235, 91, 115, 228, 238, 245, 124, 35, 69, + 45, 67, 235, 91, 252, 16, 228, 238, 245, 124, 35, 69, 186, 246, 208, 36, + 24, 42, 243, 194, 36, 24, 45, 243, 194, 36, 51, 221, 180, 42, 243, 194, + 36, 51, 221, 180, 45, 243, 194, 36, 234, 116, 42, 243, 194, 36, 234, 116, + 45, 243, 194, 36, 250, 151, 234, 115, 228, 238, 245, 124, 35, 69, 124, + 61, 235, 121, 228, 238, 245, 124, 35, 69, 246, 206, 249, 146, 228, 238, + 245, 124, 35, 69, 246, 198, 249, 146, 228, 238, 245, 124, 35, 69, 109, + 235, 43, 228, 238, 245, 124, 35, 69, 218, 235, 109, 235, 43, 228, 238, + 245, 124, 35, 69, 42, 229, 229, 228, 238, 245, 124, 35, 69, 45, 229, 229, + 228, 238, 245, 124, 35, 69, 42, 250, 79, 115, 228, 238, 245, 124, 35, 69, + 45, 250, 79, 115, 228, 238, 245, 124, 35, 69, 42, 221, 114, 224, 236, + 115, 228, 238, 245, 124, 35, 69, 45, 221, 114, 224, 236, 115, 228, 238, + 245, 124, 35, 69, 42, 84, 235, 91, 115, 228, 238, 245, 124, 35, 69, 45, + 84, 235, 91, 115, 228, 238, 245, 124, 35, 69, 42, 51, 254, 120, 115, 228, + 238, 245, 124, 35, 69, 45, 51, 254, 120, 115, 228, 238, 245, 124, 35, 69, + 42, 254, 120, 115, 228, 238, 245, 124, 35, 69, 45, 254, 120, 115, 228, + 238, 245, 124, 35, 69, 42, 250, 124, 115, 228, 238, 245, 124, 35, 69, 45, + 250, 124, 115, 228, 238, 245, 124, 35, 69, 42, 67, 250, 124, 115, 228, + 238, 245, 124, 35, 69, 45, 67, 250, 124, 115, 225, 49, 248, 145, 67, 225, + 49, 248, 145, 228, 238, 245, 124, 35, 69, 42, 40, 115, 228, 238, 245, + 124, 35, 69, 45, 40, 115, 249, 145, 230, 73, 251, 82, 230, 73, 218, 235, + 230, 73, 51, 218, 235, 230, 73, 249, 145, 109, 235, 43, 251, 82, 109, + 235, 43, 218, 235, 109, 235, 43, 3, 250, 168, 3, 98, 250, 168, 3, 245, + 90, 223, 136, 3, 225, 67, 3, 250, 175, 3, 228, 82, 78, 3, 246, 95, 78, 3, + 246, 206, 249, 146, 3, 42, 229, 229, 3, 45, 229, 229, 3, 42, 250, 79, + 115, 3, 45, 250, 79, 115, 3, 42, 221, 114, 224, 236, 115, 3, 45, 221, + 114, 224, 236, 115, 3, 54, 55, 3, 254, 134, 3, 253, 251, 3, 88, 55, 3, + 242, 120, 3, 235, 87, 55, 3, 244, 30, 55, 3, 246, 154, 55, 3, 227, 160, + 224, 17, 3, 248, 155, 55, 3, 229, 169, 55, 3, 250, 167, 253, 244, 12, + 245, 237, 47, 17, 12, 222, 108, 2, 245, 237, 50, 12, 249, 171, 47, 17, + 12, 222, 136, 245, 107, 12, 236, 205, 47, 17, 12, 245, 239, 47, 17, 12, + 245, 239, 128, 17, 12, 249, 173, 47, 17, 12, 249, 173, 128, 17, 12, 236, + 207, 47, 17, 12, 236, 207, 128, 17, 12, 225, 17, 47, 17, 12, 225, 17, + 128, 17, 12, 223, 76, 47, 17, 12, 223, 76, 128, 17, 12, 1, 181, 47, 17, + 12, 1, 99, 2, 234, 111, 71, 47, 17, 12, 1, 99, 2, 234, 111, 71, 39, 17, + 12, 1, 99, 2, 181, 71, 47, 17, 12, 1, 99, 2, 181, 71, 39, 17, 12, 1, 218, + 234, 2, 181, 71, 47, 17, 12, 1, 218, 234, 2, 181, 71, 39, 17, 12, 1, 99, + 2, 181, 252, 118, 47, 17, 12, 1, 99, 2, 181, 252, 118, 39, 17, 12, 1, 70, + 2, 181, 71, 47, 17, 12, 1, 70, 2, 181, 71, 39, 17, 12, 1, 70, 2, 181, 71, + 66, 17, 12, 1, 70, 2, 181, 71, 128, 17, 12, 1, 99, 47, 17, 12, 1, 99, 39, + 17, 12, 1, 252, 129, 47, 17, 12, 1, 252, 129, 39, 17, 12, 1, 252, 129, + 66, 17, 12, 1, 252, 129, 128, 17, 12, 1, 222, 78, 234, 73, 47, 17, 12, 1, + 222, 78, 234, 73, 39, 17, 12, 1, 222, 78, 47, 17, 12, 1, 222, 78, 39, 17, + 12, 1, 222, 78, 66, 17, 12, 1, 222, 78, 128, 17, 12, 1, 222, 20, 47, 17, + 12, 1, 222, 20, 39, 17, 12, 1, 222, 20, 66, 17, 12, 1, 222, 20, 128, 17, + 12, 1, 134, 47, 17, 12, 1, 134, 39, 17, 12, 1, 134, 66, 17, 12, 1, 134, + 128, 17, 12, 1, 111, 47, 17, 12, 1, 111, 39, 17, 12, 1, 111, 66, 17, 12, + 1, 111, 128, 17, 12, 1, 236, 147, 47, 17, 12, 1, 236, 147, 39, 17, 12, 1, + 236, 147, 66, 17, 12, 1, 236, 147, 128, 17, 12, 1, 249, 184, 47, 17, 12, + 1, 249, 184, 39, 17, 12, 1, 222, 30, 47, 17, 12, 1, 222, 30, 39, 17, 12, + 1, 227, 197, 47, 17, 12, 1, 227, 197, 39, 17, 12, 1, 217, 107, 47, 17, + 12, 1, 217, 107, 39, 17, 12, 1, 226, 83, 47, 17, 12, 1, 226, 83, 39, 17, + 12, 1, 226, 83, 66, 17, 12, 1, 226, 83, 128, 17, 12, 1, 224, 243, 47, 17, + 12, 1, 224, 243, 39, 17, 12, 1, 224, 243, 66, 17, 12, 1, 224, 243, 128, + 17, 12, 1, 226, 171, 47, 17, 12, 1, 226, 171, 39, 17, 12, 1, 226, 171, + 66, 17, 12, 1, 226, 171, 128, 17, 12, 1, 249, 203, 47, 17, 12, 1, 249, + 203, 39, 17, 12, 1, 249, 203, 66, 17, 12, 1, 249, 203, 128, 17, 12, 1, + 222, 138, 47, 17, 12, 1, 222, 138, 39, 17, 12, 1, 222, 138, 66, 17, 12, + 1, 222, 138, 128, 17, 12, 1, 217, 110, 47, 17, 12, 1, 217, 110, 39, 17, + 12, 1, 217, 110, 66, 17, 12, 1, 217, 110, 128, 17, 12, 1, 254, 192, 47, + 17, 12, 1, 254, 192, 39, 17, 12, 1, 254, 192, 66, 17, 12, 1, 254, 192, + 128, 17, 12, 1, 244, 123, 47, 17, 12, 1, 244, 123, 39, 17, 12, 1, 244, + 123, 66, 17, 12, 1, 244, 123, 128, 17, 12, 1, 245, 222, 47, 17, 12, 1, + 245, 222, 39, 17, 12, 1, 245, 222, 66, 17, 12, 1, 245, 222, 128, 17, 12, + 1, 228, 149, 47, 17, 12, 1, 228, 149, 39, 17, 12, 1, 228, 149, 66, 17, + 12, 1, 228, 149, 128, 17, 12, 1, 236, 247, 47, 17, 12, 1, 236, 247, 39, + 17, 12, 1, 236, 247, 66, 17, 12, 1, 236, 247, 128, 17, 12, 1, 235, 161, + 47, 17, 12, 1, 235, 161, 39, 17, 12, 1, 235, 161, 66, 17, 12, 1, 235, + 161, 128, 17, 12, 1, 62, 47, 17, 12, 1, 62, 39, 17, 12, 1, 62, 66, 17, + 12, 1, 62, 128, 17, 12, 1, 231, 194, 47, 17, 12, 1, 231, 194, 39, 17, 12, + 1, 231, 194, 66, 17, 12, 1, 231, 194, 128, 17, 12, 1, 243, 147, 47, 17, + 12, 1, 243, 147, 39, 17, 12, 1, 243, 147, 66, 17, 12, 1, 243, 147, 128, + 17, 12, 1, 218, 234, 47, 17, 12, 1, 218, 234, 39, 17, 12, 1, 99, 197, 47, + 17, 12, 1, 99, 197, 39, 17, 12, 1, 70, 47, 17, 12, 1, 70, 39, 17, 12, 1, + 70, 66, 17, 12, 1, 70, 128, 17, 12, 24, 235, 161, 2, 99, 2, 234, 111, 71, + 47, 17, 12, 24, 235, 161, 2, 99, 2, 234, 111, 71, 39, 17, 12, 24, 235, + 161, 2, 99, 2, 181, 71, 47, 17, 12, 24, 235, 161, 2, 99, 2, 181, 71, 39, + 17, 12, 24, 235, 161, 2, 99, 2, 181, 252, 118, 47, 17, 12, 24, 235, 161, + 2, 99, 2, 181, 252, 118, 39, 17, 12, 24, 235, 161, 2, 99, 47, 17, 12, 24, + 235, 161, 2, 99, 39, 17, 217, 85, 218, 199, 231, 203, 223, 254, 110, 246, + 95, 78, 110, 228, 69, 78, 110, 54, 55, 110, 248, 155, 55, 110, 229, 169, + 55, 110, 254, 134, 110, 254, 79, 110, 42, 229, 229, 110, 45, 229, 229, + 110, 253, 251, 110, 88, 55, 110, 250, 168, 110, 242, 120, 110, 245, 90, + 223, 136, 110, 224, 17, 110, 20, 217, 84, 110, 20, 107, 110, 20, 103, + 110, 20, 160, 110, 20, 154, 110, 20, 174, 110, 20, 182, 110, 20, 191, + 110, 20, 185, 110, 20, 190, 110, 250, 175, 110, 225, 67, 110, 235, 87, + 55, 110, 246, 154, 55, 110, 244, 30, 55, 110, 228, 82, 78, 110, 250, 167, + 253, 244, 110, 7, 6, 1, 60, 110, 7, 6, 1, 253, 204, 110, 7, 6, 1, 251, + 202, 110, 7, 6, 1, 250, 46, 110, 7, 6, 1, 73, 110, 7, 6, 1, 246, 74, 110, + 7, 6, 1, 245, 67, 110, 7, 6, 1, 243, 225, 110, 7, 6, 1, 72, 110, 7, 6, 1, + 237, 126, 110, 7, 6, 1, 237, 17, 110, 7, 6, 1, 153, 110, 7, 6, 1, 189, + 110, 7, 6, 1, 207, 110, 7, 6, 1, 74, 110, 7, 6, 1, 230, 59, 110, 7, 6, 1, + 228, 163, 110, 7, 6, 1, 152, 110, 7, 6, 1, 198, 110, 7, 6, 1, 222, 201, + 110, 7, 6, 1, 68, 110, 7, 6, 1, 216, 216, 110, 7, 6, 1, 219, 40, 110, 7, + 6, 1, 218, 151, 110, 7, 6, 1, 218, 90, 110, 7, 6, 1, 217, 157, 110, 42, + 40, 115, 110, 227, 160, 224, 17, 110, 45, 40, 115, 110, 250, 217, 255, 0, + 110, 109, 235, 43, 110, 244, 37, 255, 0, 110, 7, 3, 1, 60, 110, 7, 3, 1, + 253, 204, 110, 7, 3, 1, 251, 202, 110, 7, 3, 1, 250, 46, 110, 7, 3, 1, + 73, 110, 7, 3, 1, 246, 74, 110, 7, 3, 1, 245, 67, 110, 7, 3, 1, 243, 225, + 110, 7, 3, 1, 72, 110, 7, 3, 1, 237, 126, 110, 7, 3, 1, 237, 17, 110, 7, + 3, 1, 153, 110, 7, 3, 1, 189, 110, 7, 3, 1, 207, 110, 7, 3, 1, 74, 110, + 7, 3, 1, 230, 59, 110, 7, 3, 1, 228, 163, 110, 7, 3, 1, 152, 110, 7, 3, + 1, 198, 110, 7, 3, 1, 222, 201, 110, 7, 3, 1, 68, 110, 7, 3, 1, 216, 216, + 110, 7, 3, 1, 219, 40, 110, 7, 3, 1, 218, 151, 110, 7, 3, 1, 218, 90, + 110, 7, 3, 1, 217, 157, 110, 42, 250, 79, 115, 110, 69, 235, 43, 110, 45, + 250, 79, 115, 110, 221, 179, 110, 42, 67, 229, 229, 110, 45, 67, 229, + 229, 93, 98, 245, 90, 223, 136, 93, 42, 250, 124, 115, 93, 45, 250, 124, + 115, 93, 98, 250, 168, 93, 52, 233, 193, 248, 145, 93, 52, 1, 218, 187, + 93, 52, 1, 3, 60, 93, 52, 1, 3, 72, 93, 52, 1, 3, 68, 93, 52, 1, 3, 73, + 93, 52, 1, 3, 74, 93, 52, 1, 3, 184, 93, 52, 1, 3, 217, 200, 93, 52, 1, + 3, 217, 231, 93, 52, 1, 3, 221, 0, 93, 236, 202, 228, 223, 224, 9, 78, + 93, 52, 1, 60, 93, 52, 1, 72, 93, 52, 1, 68, 93, 52, 1, 73, 93, 52, 1, + 74, 93, 52, 1, 175, 93, 52, 1, 236, 113, 93, 52, 1, 236, 7, 93, 52, 1, + 236, 184, 93, 52, 1, 236, 57, 93, 52, 1, 226, 177, 93, 52, 1, 224, 140, + 93, 52, 1, 223, 103, 93, 52, 1, 226, 94, 93, 52, 1, 224, 26, 93, 52, 1, + 222, 155, 93, 52, 1, 221, 205, 93, 52, 1, 221, 0, 93, 52, 1, 222, 87, 93, + 52, 1, 101, 93, 52, 1, 208, 93, 52, 1, 232, 62, 93, 52, 1, 231, 144, 93, + 52, 1, 232, 141, 93, 52, 1, 231, 204, 93, 52, 1, 155, 93, 52, 1, 243, + 112, 93, 52, 1, 242, 173, 93, 52, 1, 243, 162, 93, 52, 1, 243, 4, 93, 52, + 1, 196, 93, 52, 1, 233, 196, 93, 52, 1, 233, 99, 93, 52, 1, 234, 25, 93, + 52, 1, 233, 136, 93, 52, 1, 184, 93, 52, 1, 217, 200, 93, 52, 1, 217, + 231, 93, 52, 1, 203, 93, 52, 1, 227, 147, 93, 52, 1, 227, 22, 93, 52, 1, + 227, 216, 93, 52, 1, 227, 75, 93, 52, 1, 219, 7, 93, 52, 1, 207, 93, 52, + 219, 70, 224, 9, 78, 93, 52, 225, 72, 224, 9, 78, 93, 22, 245, 185, 93, + 22, 1, 236, 86, 93, 22, 1, 223, 211, 93, 22, 1, 236, 79, 93, 22, 1, 232, + 55, 93, 22, 1, 232, 53, 93, 22, 1, 232, 52, 93, 22, 1, 221, 192, 93, 22, + 1, 223, 200, 93, 22, 1, 227, 140, 93, 22, 1, 227, 135, 93, 22, 1, 227, + 132, 93, 22, 1, 227, 125, 93, 22, 1, 227, 120, 93, 22, 1, 227, 115, 93, + 22, 1, 227, 126, 93, 22, 1, 227, 138, 93, 22, 1, 233, 187, 93, 22, 1, + 229, 99, 93, 22, 1, 223, 208, 93, 22, 1, 229, 88, 93, 22, 1, 224, 104, + 93, 22, 1, 223, 205, 93, 22, 1, 238, 22, 93, 22, 1, 250, 230, 93, 22, 1, + 223, 215, 93, 22, 1, 251, 29, 93, 22, 1, 236, 128, 93, 22, 1, 222, 0, 93, + 22, 1, 229, 127, 93, 22, 1, 243, 106, 93, 22, 1, 60, 93, 22, 1, 254, 234, + 93, 22, 1, 184, 93, 22, 1, 218, 65, 93, 22, 1, 246, 168, 93, 22, 1, 73, + 93, 22, 1, 218, 16, 93, 22, 1, 218, 25, 93, 22, 1, 74, 93, 22, 1, 219, 7, + 93, 22, 1, 219, 4, 93, 22, 1, 230, 167, 93, 22, 1, 217, 231, 93, 22, 1, + 68, 93, 22, 1, 218, 219, 93, 22, 1, 218, 227, 93, 22, 1, 218, 204, 93, + 22, 1, 217, 200, 93, 22, 1, 246, 115, 93, 22, 1, 217, 250, 93, 22, 1, 72, + 110, 251, 86, 55, 110, 229, 11, 55, 110, 212, 55, 110, 234, 115, 110, + 252, 1, 135, 110, 218, 19, 55, 110, 218, 182, 55, 93, 245, 122, 170, 219, + 152, 93, 127, 65, 93, 220, 53, 65, 93, 90, 65, 93, 247, 130, 65, 93, 84, + 223, 227, 93, 67, 250, 221, 237, 180, 254, 112, 254, 128, 237, 180, 254, + 112, 225, 54, 237, 180, 254, 112, 222, 56, 230, 178, 227, 179, 251, 55, + 227, 179, 251, 55, 57, 49, 4, 253, 188, 60, 57, 49, 4, 253, 157, 73, 57, + 49, 4, 253, 166, 72, 57, 49, 4, 253, 134, 74, 57, 49, 4, 253, 184, 68, + 57, 49, 4, 253, 203, 249, 207, 57, 49, 4, 253, 150, 249, 92, 57, 49, 4, + 253, 190, 249, 15, 57, 49, 4, 253, 180, 248, 167, 57, 49, 4, 253, 144, + 247, 111, 57, 49, 4, 253, 138, 237, 123, 57, 49, 4, 253, 149, 237, 114, + 57, 49, 4, 253, 159, 237, 59, 57, 49, 4, 253, 130, 237, 43, 57, 49, 4, + 253, 118, 175, 57, 49, 4, 253, 151, 236, 184, 57, 49, 4, 253, 128, 236, + 113, 57, 49, 4, 253, 125, 236, 57, 57, 49, 4, 253, 114, 236, 7, 57, 49, + 4, 253, 115, 196, 57, 49, 4, 253, 181, 234, 25, 57, 49, 4, 253, 122, 233, + 196, 57, 49, 4, 253, 179, 233, 136, 57, 49, 4, 253, 171, 233, 99, 57, 49, + 4, 253, 192, 208, 57, 49, 4, 253, 170, 232, 141, 57, 49, 4, 253, 164, + 232, 62, 57, 49, 4, 253, 143, 231, 204, 57, 49, 4, 253, 140, 231, 144, + 57, 49, 4, 253, 199, 187, 57, 49, 4, 253, 123, 229, 198, 57, 49, 4, 253, + 156, 229, 108, 57, 49, 4, 253, 183, 229, 37, 57, 49, 4, 253, 145, 228, + 202, 57, 49, 4, 253, 178, 228, 155, 57, 49, 4, 253, 117, 228, 136, 57, + 49, 4, 253, 173, 228, 121, 57, 49, 4, 253, 162, 228, 110, 57, 49, 4, 253, + 135, 203, 57, 49, 4, 253, 167, 227, 216, 57, 49, 4, 253, 142, 227, 147, + 57, 49, 4, 253, 201, 227, 75, 57, 49, 4, 253, 168, 227, 22, 57, 49, 4, + 253, 163, 226, 177, 57, 49, 4, 253, 186, 226, 94, 57, 49, 4, 253, 154, + 224, 140, 57, 49, 4, 253, 182, 224, 26, 57, 49, 4, 253, 137, 223, 103, + 57, 49, 4, 253, 136, 222, 155, 57, 49, 4, 253, 197, 222, 87, 57, 49, 4, + 253, 158, 221, 205, 57, 49, 4, 253, 195, 101, 57, 49, 4, 253, 126, 221, + 0, 57, 49, 4, 253, 141, 219, 7, 57, 49, 4, 253, 120, 218, 227, 57, 49, 4, + 253, 155, 218, 204, 57, 49, 4, 253, 153, 218, 187, 57, 49, 4, 253, 177, + 217, 114, 57, 49, 4, 253, 121, 217, 92, 57, 49, 4, 253, 174, 217, 21, 57, + 49, 4, 253, 169, 255, 60, 57, 49, 4, 253, 152, 255, 59, 57, 49, 4, 253, + 111, 253, 232, 57, 49, 4, 253, 124, 247, 82, 57, 49, 4, 253, 107, 247, + 81, 57, 49, 4, 253, 147, 231, 85, 57, 49, 4, 253, 165, 228, 201, 57, 49, + 4, 253, 133, 228, 204, 57, 49, 4, 253, 119, 228, 2, 57, 49, 4, 253, 161, + 228, 1, 57, 49, 4, 253, 127, 227, 74, 57, 49, 4, 253, 129, 222, 153, 57, + 49, 4, 253, 109, 220, 223, 57, 49, 4, 253, 106, 103, 57, 49, 16, 253, + 176, 57, 49, 16, 253, 175, 57, 49, 16, 253, 172, 57, 49, 16, 253, 160, + 57, 49, 16, 253, 148, 57, 49, 16, 253, 146, 57, 49, 16, 253, 139, 57, 49, + 16, 253, 132, 57, 49, 16, 253, 131, 57, 49, 16, 253, 116, 57, 49, 16, + 253, 113, 57, 49, 16, 253, 112, 57, 49, 16, 253, 110, 57, 49, 16, 253, + 108, 57, 49, 97, 253, 105, 234, 86, 57, 49, 97, 253, 104, 218, 183, 57, + 49, 97, 253, 103, 249, 80, 57, 49, 97, 253, 102, 246, 151, 57, 49, 97, + 253, 101, 234, 68, 57, 49, 97, 253, 100, 223, 162, 57, 49, 97, 253, 99, + 246, 100, 57, 49, 97, 253, 98, 227, 239, 57, 49, 97, 253, 97, 224, 245, + 57, 49, 97, 253, 96, 243, 161, 57, 49, 97, 253, 95, 224, 4, 57, 49, 97, + 253, 94, 252, 39, 57, 49, 97, 253, 93, 250, 110, 57, 49, 97, 253, 92, + 251, 243, 57, 49, 97, 253, 91, 218, 212, 57, 49, 97, 253, 90, 252, 198, + 57, 49, 97, 253, 89, 230, 147, 57, 49, 97, 253, 88, 223, 244, 57, 49, 97, + 253, 87, 250, 54, 57, 49, 233, 125, 253, 86, 236, 223, 57, 49, 233, 125, + 253, 85, 236, 231, 57, 49, 97, 253, 84, 230, 157, 57, 49, 97, 253, 83, + 218, 192, 57, 49, 97, 253, 82, 57, 49, 233, 125, 253, 81, 254, 44, 57, + 49, 233, 125, 253, 80, 233, 247, 57, 49, 97, 253, 79, 252, 0, 57, 49, 97, + 253, 78, 244, 62, 57, 49, 97, 253, 77, 57, 49, 97, 253, 76, 218, 177, 57, + 49, 97, 253, 75, 57, 49, 97, 253, 74, 57, 49, 97, 253, 73, 242, 189, 57, + 49, 97, 253, 72, 57, 49, 97, 253, 71, 57, 49, 97, 253, 70, 57, 49, 233, + 125, 253, 68, 220, 235, 57, 49, 97, 253, 67, 57, 49, 97, 253, 66, 57, 49, + 97, 253, 65, 250, 192, 57, 49, 97, 253, 64, 57, 49, 97, 253, 63, 57, 49, + 97, 253, 62, 244, 218, 57, 49, 97, 253, 61, 254, 31, 57, 49, 97, 253, 60, + 57, 49, 97, 253, 59, 57, 49, 97, 253, 58, 57, 49, 97, 253, 57, 57, 49, + 97, 253, 56, 57, 49, 97, 253, 55, 57, 49, 97, 253, 54, 57, 49, 97, 253, + 53, 57, 49, 97, 253, 52, 57, 49, 97, 253, 51, 233, 120, 57, 49, 97, 253, + 50, 57, 49, 97, 253, 49, 221, 98, 57, 49, 97, 253, 48, 57, 49, 97, 253, + 47, 57, 49, 97, 253, 46, 57, 49, 97, 253, 45, 57, 49, 97, 253, 44, 57, + 49, 97, 253, 43, 57, 49, 97, 253, 42, 57, 49, 97, 253, 41, 57, 49, 97, + 253, 40, 57, 49, 97, 253, 39, 57, 49, 97, 253, 38, 57, 49, 97, 253, 37, + 243, 140, 57, 49, 97, 253, 16, 245, 131, 57, 49, 97, 253, 13, 252, 182, + 57, 49, 97, 253, 8, 223, 249, 57, 49, 97, 253, 7, 65, 57, 49, 97, 253, 6, + 57, 49, 97, 253, 5, 223, 25, 57, 49, 97, 253, 4, 57, 49, 97, 253, 3, 57, + 49, 97, 253, 2, 218, 208, 251, 52, 57, 49, 97, 253, 1, 251, 52, 57, 49, + 97, 253, 0, 251, 53, 245, 105, 57, 49, 97, 252, 255, 218, 210, 57, 49, + 97, 252, 254, 57, 49, 97, 252, 253, 57, 49, 233, 125, 252, 252, 248, 211, + 57, 49, 97, 252, 251, 57, 49, 97, 252, 250, 57, 49, 97, 252, 248, 57, 49, + 97, 252, 247, 57, 49, 97, 252, 246, 57, 49, 97, 252, 245, 249, 149, 57, + 49, 97, 252, 244, 57, 49, 97, 252, 243, 57, 49, 97, 252, 242, 57, 49, 97, + 252, 241, 57, 49, 97, 252, 240, 57, 49, 97, 219, 99, 253, 69, 57, 49, 97, + 219, 99, 253, 36, 57, 49, 97, 219, 99, 253, 35, 57, 49, 97, 219, 99, 253, + 34, 57, 49, 97, 219, 99, 253, 33, 57, 49, 97, 219, 99, 253, 32, 57, 49, + 97, 219, 99, 253, 31, 57, 49, 97, 219, 99, 253, 30, 57, 49, 97, 219, 99, + 253, 29, 57, 49, 97, 219, 99, 253, 28, 57, 49, 97, 219, 99, 253, 27, 57, + 49, 97, 219, 99, 253, 26, 57, 49, 97, 219, 99, 253, 25, 57, 49, 97, 219, + 99, 253, 24, 57, 49, 97, 219, 99, 253, 23, 57, 49, 97, 219, 99, 253, 22, + 57, 49, 97, 219, 99, 253, 21, 57, 49, 97, 219, 99, 253, 20, 57, 49, 97, + 219, 99, 253, 19, 57, 49, 97, 219, 99, 253, 18, 57, 49, 97, 219, 99, 253, + 17, 57, 49, 97, 219, 99, 253, 15, 57, 49, 97, 219, 99, 253, 14, 57, 49, + 97, 219, 99, 253, 12, 57, 49, 97, 219, 99, 253, 11, 57, 49, 97, 219, 99, + 253, 10, 57, 49, 97, 219, 99, 253, 9, 57, 49, 97, 219, 99, 252, 249, 57, + 49, 97, 219, 99, 252, 239, 254, 227, 218, 174, 225, 55, 235, 43, 254, + 227, 218, 174, 225, 55, 248, 145, 254, 227, 251, 45, 78, 254, 227, 54, + 107, 254, 227, 54, 103, 254, 227, 54, 160, 254, 227, 54, 154, 254, 227, + 54, 174, 254, 227, 54, 182, 254, 227, 54, 191, 254, 227, 54, 185, 254, + 227, 54, 190, 254, 227, 54, 222, 65, 254, 227, 54, 220, 219, 254, 227, + 54, 221, 245, 254, 227, 54, 245, 119, 254, 227, 54, 245, 196, 254, 227, + 54, 224, 69, 254, 227, 54, 225, 38, 254, 227, 54, 246, 227, 254, 227, 54, + 232, 27, 254, 227, 54, 131, 242, 161, 254, 227, 54, 124, 242, 161, 254, + 227, 54, 148, 242, 161, 254, 227, 54, 245, 116, 242, 161, 254, 227, 54, + 245, 170, 242, 161, 254, 227, 54, 224, 82, 242, 161, 254, 227, 54, 225, + 43, 242, 161, 254, 227, 54, 246, 235, 242, 161, 254, 227, 54, 232, 31, + 242, 161, 254, 227, 54, 131, 221, 231, 254, 227, 54, 124, 221, 231, 254, + 227, 54, 148, 221, 231, 254, 227, 54, 245, 116, 221, 231, 254, 227, 54, + 245, 170, 221, 231, 254, 227, 54, 224, 82, 221, 231, 254, 227, 54, 225, + 43, 221, 231, 254, 227, 54, 246, 235, 221, 231, 254, 227, 54, 232, 31, + 221, 231, 254, 227, 54, 222, 66, 221, 231, 254, 227, 54, 220, 220, 221, + 231, 254, 227, 54, 221, 246, 221, 231, 254, 227, 54, 245, 120, 221, 231, + 254, 227, 54, 245, 197, 221, 231, 254, 227, 54, 224, 70, 221, 231, 254, + 227, 54, 225, 39, 221, 231, 254, 227, 54, 246, 228, 221, 231, 254, 227, + 54, 232, 28, 221, 231, 254, 227, 218, 222, 252, 190, 220, 72, 254, 227, + 218, 222, 245, 178, 223, 88, 254, 227, 218, 222, 226, 90, 223, 88, 254, + 227, 218, 222, 221, 252, 223, 88, 254, 227, 218, 222, 245, 110, 223, 88, + 254, 227, 247, 114, 234, 24, 245, 178, 223, 88, 254, 227, 235, 31, 234, + 24, 245, 178, 223, 88, 254, 227, 234, 24, 226, 90, 223, 88, 254, 227, + 234, 24, 221, 252, 223, 88, 23, 254, 251, 253, 234, 131, 228, 89, 23, + 254, 251, 253, 234, 131, 243, 194, 23, 254, 251, 253, 234, 131, 247, 126, + 23, 254, 251, 253, 234, 174, 23, 254, 251, 253, 234, 245, 196, 23, 254, + 251, 253, 234, 245, 170, 242, 161, 23, 254, 251, 253, 234, 245, 170, 221, + 231, 23, 254, 251, 253, 234, 245, 197, 221, 231, 23, 254, 251, 253, 234, + 245, 170, 222, 126, 23, 254, 251, 253, 234, 222, 66, 222, 126, 23, 254, + 251, 253, 234, 245, 197, 222, 126, 23, 254, 251, 253, 234, 131, 242, 162, + 222, 126, 23, 254, 251, 253, 234, 245, 170, 242, 162, 222, 126, 23, 254, + 251, 253, 234, 131, 221, 232, 222, 126, 23, 254, 251, 253, 234, 245, 170, + 221, 232, 222, 126, 23, 254, 251, 253, 234, 245, 170, 223, 153, 23, 254, + 251, 253, 234, 222, 66, 223, 153, 23, 254, 251, 253, 234, 245, 197, 223, + 153, 23, 254, 251, 253, 234, 131, 242, 162, 223, 153, 23, 254, 251, 253, + 234, 245, 170, 242, 162, 223, 153, 23, 254, 251, 253, 234, 131, 221, 232, + 223, 153, 23, 254, 251, 253, 234, 222, 66, 221, 232, 223, 153, 23, 254, + 251, 253, 234, 245, 197, 221, 232, 223, 153, 23, 254, 251, 253, 234, 222, + 66, 233, 139, 23, 254, 251, 243, 134, 131, 229, 49, 23, 254, 251, 222, 8, + 107, 23, 254, 251, 243, 132, 107, 23, 254, 251, 246, 159, 103, 23, 254, + 251, 222, 8, 103, 23, 254, 251, 250, 51, 124, 247, 125, 23, 254, 251, + 246, 159, 124, 247, 125, 23, 254, 251, 221, 71, 174, 23, 254, 251, 221, + 71, 222, 65, 23, 254, 251, 221, 71, 222, 66, 254, 144, 17, 23, 254, 251, + 243, 132, 222, 65, 23, 254, 251, 233, 240, 222, 65, 23, 254, 251, 222, 8, + 222, 65, 23, 254, 251, 222, 8, 221, 245, 23, 254, 251, 221, 71, 245, 196, + 23, 254, 251, 221, 71, 245, 197, 254, 144, 17, 23, 254, 251, 243, 132, + 245, 196, 23, 254, 251, 222, 8, 245, 196, 23, 254, 251, 222, 8, 131, 242, + 161, 23, 254, 251, 222, 8, 148, 242, 161, 23, 254, 251, 246, 159, 245, + 170, 242, 161, 23, 254, 251, 221, 71, 245, 170, 242, 161, 23, 254, 251, + 222, 8, 245, 170, 242, 161, 23, 254, 251, 251, 126, 245, 170, 242, 161, + 23, 254, 251, 232, 200, 245, 170, 242, 161, 23, 254, 251, 222, 8, 131, + 221, 231, 23, 254, 251, 222, 8, 245, 170, 221, 231, 23, 254, 251, 249, + 65, 245, 170, 233, 139, 23, 254, 251, 223, 127, 245, 197, 233, 139, 23, + 131, 144, 55, 23, 131, 144, 5, 254, 144, 17, 23, 124, 221, 250, 55, 23, + 148, 228, 88, 55, 23, 218, 23, 55, 23, 222, 127, 55, 23, 247, 127, 55, + 23, 230, 175, 55, 23, 124, 230, 174, 55, 23, 148, 230, 174, 55, 23, 245, + 116, 230, 174, 55, 23, 245, 170, 230, 174, 55, 23, 233, 235, 55, 23, 235, + 210, 252, 190, 55, 23, 235, 26, 55, 23, 230, 84, 55, 23, 218, 132, 55, + 23, 254, 16, 55, 23, 254, 27, 55, 23, 244, 42, 55, 23, 221, 58, 252, 190, + 55, 23, 217, 85, 55, 227, 68, 225, 35, 55, 227, 68, 220, 83, 55, 227, 68, + 225, 59, 55, 227, 68, 225, 33, 55, 227, 68, 248, 226, 225, 33, 55, 227, + 68, 224, 120, 55, 227, 68, 249, 61, 55, 227, 68, 228, 76, 55, 227, 68, + 225, 47, 55, 227, 68, 247, 93, 55, 227, 68, 254, 14, 55, 227, 68, 251, + 81, 55, 229, 137, 248, 205, 5, 229, 192, 229, 137, 248, 205, 5, 229, 44, + 243, 159, 229, 137, 248, 205, 5, 222, 109, 243, 159, 229, 137, 248, 205, + 5, 251, 139, 229, 137, 248, 205, 5, 251, 24, 229, 137, 248, 205, 5, 218, + 183, 229, 137, 248, 205, 5, 243, 140, 229, 137, 248, 205, 5, 244, 210, + 229, 137, 248, 205, 5, 221, 204, 229, 137, 248, 205, 5, 65, 229, 137, + 248, 205, 5, 252, 24, 229, 137, 248, 205, 5, 224, 218, 229, 137, 248, + 205, 5, 250, 187, 229, 137, 248, 205, 5, 234, 85, 229, 137, 248, 205, 5, + 234, 48, 229, 137, 248, 205, 5, 226, 122, 229, 137, 248, 205, 5, 235, 64, + 229, 137, 248, 205, 5, 252, 33, 229, 137, 248, 205, 5, 251, 129, 229, 51, + 229, 137, 248, 205, 5, 248, 156, 229, 137, 248, 205, 5, 250, 172, 229, + 137, 248, 205, 5, 224, 50, 229, 137, 248, 205, 5, 250, 173, 229, 137, + 248, 205, 5, 252, 134, 229, 137, 248, 205, 5, 224, 206, 229, 137, 248, + 205, 5, 242, 189, 229, 137, 248, 205, 5, 243, 111, 229, 137, 248, 205, 5, + 251, 240, 235, 106, 229, 137, 248, 205, 5, 251, 124, 229, 137, 248, 205, + 5, 227, 239, 229, 137, 248, 205, 5, 247, 13, 229, 137, 248, 205, 5, 247, + 133, 229, 137, 248, 205, 5, 220, 247, 229, 137, 248, 205, 5, 252, 137, + 229, 137, 248, 205, 5, 229, 52, 221, 98, 229, 137, 248, 205, 5, 219, 84, + 229, 137, 248, 205, 5, 229, 244, 229, 137, 248, 205, 5, 227, 62, 229, + 137, 248, 205, 5, 235, 52, 229, 137, 248, 205, 5, 230, 69, 252, 233, 229, + 137, 248, 205, 5, 245, 143, 229, 137, 248, 205, 5, 244, 38, 229, 137, + 248, 205, 5, 223, 128, 229, 137, 248, 205, 5, 3, 253, 213, 229, 137, 248, + 205, 5, 218, 235, 252, 206, 229, 137, 248, 205, 5, 36, 230, 177, 92, 234, + 197, 1, 60, 234, 197, 1, 73, 234, 197, 1, 253, 204, 234, 197, 1, 252, 95, + 234, 197, 1, 245, 67, 234, 197, 1, 250, 46, 234, 197, 1, 72, 234, 197, 1, + 219, 40, 234, 197, 1, 217, 157, 234, 197, 1, 222, 37, 234, 197, 1, 237, + 126, 234, 197, 1, 237, 17, 234, 197, 1, 228, 163, 234, 197, 1, 153, 234, + 197, 1, 189, 234, 197, 1, 207, 234, 197, 1, 233, 140, 234, 197, 1, 231, + 218, 234, 197, 1, 68, 234, 197, 1, 230, 59, 234, 197, 1, 236, 75, 234, + 197, 1, 152, 234, 197, 1, 198, 234, 197, 1, 222, 201, 234, 197, 1, 221, + 32, 234, 197, 1, 254, 131, 234, 197, 1, 246, 197, 234, 197, 1, 243, 225, + 234, 197, 1, 218, 151, 251, 133, 1, 60, 251, 133, 1, 230, 45, 251, 133, + 1, 250, 46, 251, 133, 1, 153, 251, 133, 1, 220, 21, 251, 133, 1, 152, + 251, 133, 1, 235, 126, 251, 133, 1, 255, 60, 251, 133, 1, 228, 163, 251, + 133, 1, 253, 204, 251, 133, 1, 189, 251, 133, 1, 74, 251, 133, 1, 249, + 209, 251, 133, 1, 222, 201, 251, 133, 1, 225, 27, 251, 133, 1, 225, 26, + 251, 133, 1, 198, 251, 133, 1, 251, 201, 251, 133, 1, 68, 251, 133, 1, + 231, 218, 251, 133, 1, 218, 151, 251, 133, 1, 207, 251, 133, 1, 221, 31, + 251, 133, 1, 230, 59, 251, 133, 1, 223, 219, 251, 133, 1, 72, 251, 133, + 1, 73, 251, 133, 1, 220, 18, 251, 133, 1, 237, 17, 251, 133, 1, 237, 8, + 251, 133, 1, 232, 170, 251, 133, 1, 220, 23, 251, 133, 1, 245, 67, 251, + 133, 1, 245, 2, 251, 133, 1, 223, 168, 251, 133, 1, 223, 167, 251, 133, + 1, 232, 117, 251, 133, 1, 237, 255, 251, 133, 1, 251, 200, 251, 133, 1, + 221, 32, 251, 133, 1, 220, 20, 251, 133, 1, 227, 53, 251, 133, 1, 234, + 41, 251, 133, 1, 234, 40, 251, 133, 1, 234, 39, 251, 133, 1, 234, 38, + 251, 133, 1, 235, 125, 251, 133, 1, 247, 17, 251, 133, 1, 220, 19, 48, + 30, 1, 60, 48, 30, 1, 252, 144, 48, 30, 1, 236, 184, 48, 30, 1, 249, 92, + 48, 30, 1, 73, 48, 30, 1, 219, 165, 48, 30, 1, 217, 92, 48, 30, 1, 243, + 162, 48, 30, 1, 222, 22, 48, 30, 1, 72, 48, 30, 1, 175, 48, 30, 1, 246, + 217, 48, 30, 1, 246, 205, 48, 30, 1, 246, 197, 48, 30, 1, 246, 133, 48, + 30, 1, 74, 48, 30, 1, 229, 198, 48, 30, 1, 224, 246, 48, 30, 1, 236, 7, + 48, 30, 1, 246, 148, 48, 30, 1, 246, 138, 48, 30, 1, 222, 87, 48, 30, 1, + 68, 48, 30, 1, 246, 220, 48, 30, 1, 229, 132, 48, 30, 1, 236, 137, 48, + 30, 1, 246, 244, 48, 30, 1, 246, 140, 48, 30, 1, 251, 46, 48, 30, 1, 237, + 255, 48, 30, 1, 220, 23, 48, 30, 231, 107, 107, 48, 30, 231, 107, 174, + 48, 30, 231, 107, 222, 65, 48, 30, 231, 107, 245, 196, 244, 50, 1, 254, + 199, 244, 50, 1, 252, 219, 244, 50, 1, 244, 100, 244, 50, 1, 249, 191, + 244, 50, 1, 254, 195, 244, 50, 1, 228, 146, 244, 50, 1, 237, 136, 244, + 50, 1, 243, 204, 244, 50, 1, 221, 241, 244, 50, 1, 246, 226, 244, 50, 1, + 235, 241, 244, 50, 1, 235, 170, 244, 50, 1, 234, 82, 244, 50, 1, 232, + 202, 244, 50, 1, 237, 108, 244, 50, 1, 220, 37, 244, 50, 1, 230, 31, 244, + 50, 1, 232, 27, 244, 50, 1, 227, 245, 244, 50, 1, 226, 123, 244, 50, 1, + 222, 74, 244, 50, 1, 218, 191, 244, 50, 1, 245, 249, 244, 50, 1, 238, 3, + 244, 50, 1, 242, 152, 244, 50, 1, 230, 91, 244, 50, 1, 232, 31, 242, 161, + 220, 106, 1, 254, 150, 220, 106, 1, 252, 102, 220, 106, 1, 244, 232, 220, + 106, 1, 236, 149, 220, 106, 1, 249, 62, 220, 106, 1, 243, 4, 220, 106, 1, + 218, 187, 220, 106, 1, 217, 83, 220, 106, 1, 242, 185, 220, 106, 1, 222, + 50, 220, 106, 1, 217, 220, 220, 106, 1, 236, 246, 220, 106, 1, 224, 209, + 220, 106, 1, 235, 156, 220, 106, 1, 234, 1, 220, 106, 1, 249, 33, 220, + 106, 1, 231, 103, 220, 106, 1, 217, 13, 220, 106, 1, 226, 144, 220, 106, + 1, 254, 191, 220, 106, 1, 228, 202, 220, 106, 1, 226, 169, 220, 106, 1, + 228, 103, 220, 106, 1, 227, 231, 220, 106, 1, 222, 26, 220, 106, 1, 244, + 122, 220, 106, 1, 101, 220, 106, 1, 72, 220, 106, 1, 68, 220, 106, 1, + 223, 178, 220, 106, 218, 174, 248, 191, 48, 229, 159, 5, 60, 48, 229, + 159, 5, 72, 48, 229, 159, 5, 68, 48, 229, 159, 5, 175, 48, 229, 159, 5, + 236, 7, 48, 229, 159, 5, 245, 0, 48, 229, 159, 5, 244, 17, 48, 229, 159, + 5, 218, 138, 48, 229, 159, 5, 251, 169, 48, 229, 159, 5, 237, 123, 48, + 229, 159, 5, 237, 98, 48, 229, 159, 5, 222, 155, 48, 229, 159, 5, 221, 0, + 48, 229, 159, 5, 249, 207, 48, 229, 159, 5, 249, 15, 48, 229, 159, 5, + 247, 111, 48, 229, 159, 5, 222, 35, 48, 229, 159, 5, 187, 48, 229, 159, + 5, 252, 237, 48, 229, 159, 5, 246, 8, 48, 229, 159, 5, 208, 48, 229, 159, + 5, 231, 144, 48, 229, 159, 5, 196, 48, 229, 159, 5, 233, 196, 48, 229, + 159, 5, 233, 99, 48, 229, 159, 5, 184, 48, 229, 159, 5, 219, 189, 48, + 229, 159, 5, 219, 94, 48, 229, 159, 5, 203, 48, 229, 159, 5, 227, 22, 48, + 229, 159, 5, 235, 188, 48, 229, 159, 5, 226, 177, 48, 229, 159, 5, 217, + 114, 48, 229, 159, 5, 225, 25, 48, 229, 159, 5, 223, 218, 48, 229, 159, + 5, 155, 48, 229, 159, 5, 253, 227, 48, 229, 159, 5, 253, 226, 48, 229, + 159, 5, 253, 225, 48, 229, 159, 5, 218, 115, 48, 229, 159, 5, 249, 188, + 48, 229, 159, 5, 249, 187, 48, 229, 159, 5, 252, 224, 48, 229, 159, 5, + 251, 220, 48, 229, 159, 218, 174, 248, 191, 48, 229, 159, 54, 107, 48, + 229, 159, 54, 103, 48, 229, 159, 54, 222, 65, 48, 229, 159, 54, 220, 219, + 48, 229, 159, 54, 242, 161, 161, 6, 1, 171, 72, 161, 6, 1, 171, 73, 161, + 6, 1, 171, 60, 161, 6, 1, 171, 254, 202, 161, 6, 1, 171, 74, 161, 6, 1, + 171, 230, 127, 161, 6, 1, 224, 192, 72, 161, 6, 1, 224, 192, 73, 161, 6, + 1, 224, 192, 60, 161, 6, 1, 224, 192, 254, 202, 161, 6, 1, 224, 192, 74, + 161, 6, 1, 224, 192, 230, 127, 161, 6, 1, 253, 212, 161, 6, 1, 230, 70, + 161, 6, 1, 218, 165, 161, 6, 1, 218, 22, 161, 6, 1, 243, 225, 161, 6, 1, + 229, 191, 161, 6, 1, 252, 137, 161, 6, 1, 222, 80, 161, 6, 1, 249, 82, + 161, 6, 1, 251, 43, 161, 6, 1, 237, 113, 161, 6, 1, 236, 191, 161, 6, 1, + 244, 208, 161, 6, 1, 246, 244, 161, 6, 1, 219, 160, 161, 6, 1, 246, 118, + 161, 6, 1, 222, 21, 161, 6, 1, 246, 138, 161, 6, 1, 217, 90, 161, 6, 1, + 246, 133, 161, 6, 1, 217, 71, 161, 6, 1, 246, 148, 161, 6, 1, 246, 217, + 161, 6, 1, 246, 205, 161, 6, 1, 246, 197, 161, 6, 1, 246, 185, 161, 6, 1, + 230, 158, 161, 6, 1, 246, 101, 161, 3, 1, 171, 72, 161, 3, 1, 171, 73, + 161, 3, 1, 171, 60, 161, 3, 1, 171, 254, 202, 161, 3, 1, 171, 74, 161, 3, + 1, 171, 230, 127, 161, 3, 1, 224, 192, 72, 161, 3, 1, 224, 192, 73, 161, + 3, 1, 224, 192, 60, 161, 3, 1, 224, 192, 254, 202, 161, 3, 1, 224, 192, + 74, 161, 3, 1, 224, 192, 230, 127, 161, 3, 1, 253, 212, 161, 3, 1, 230, + 70, 161, 3, 1, 218, 165, 161, 3, 1, 218, 22, 161, 3, 1, 243, 225, 161, 3, + 1, 229, 191, 161, 3, 1, 252, 137, 161, 3, 1, 222, 80, 161, 3, 1, 249, 82, + 161, 3, 1, 251, 43, 161, 3, 1, 237, 113, 161, 3, 1, 236, 191, 161, 3, 1, + 244, 208, 161, 3, 1, 246, 244, 161, 3, 1, 219, 160, 161, 3, 1, 246, 118, + 161, 3, 1, 222, 21, 161, 3, 1, 246, 138, 161, 3, 1, 217, 90, 161, 3, 1, + 246, 133, 161, 3, 1, 217, 71, 161, 3, 1, 246, 148, 161, 3, 1, 246, 217, + 161, 3, 1, 246, 205, 161, 3, 1, 246, 197, 161, 3, 1, 246, 185, 161, 3, 1, + 230, 158, 161, 3, 1, 246, 101, 224, 252, 1, 229, 190, 224, 252, 1, 221, + 113, 224, 252, 1, 236, 112, 224, 252, 1, 245, 226, 224, 252, 1, 221, 255, + 224, 252, 1, 224, 26, 224, 252, 1, 223, 50, 224, 252, 1, 250, 245, 224, + 252, 1, 218, 24, 224, 252, 1, 242, 160, 224, 252, 1, 252, 83, 224, 252, + 1, 249, 91, 224, 252, 1, 244, 242, 224, 252, 1, 219, 60, 224, 252, 1, + 222, 3, 224, 252, 1, 217, 19, 224, 252, 1, 234, 23, 224, 252, 1, 237, 41, + 224, 252, 1, 218, 185, 224, 252, 1, 243, 213, 224, 252, 1, 235, 3, 224, + 252, 1, 233, 160, 224, 252, 1, 238, 6, 224, 252, 1, 246, 243, 224, 252, + 1, 254, 7, 224, 252, 1, 254, 237, 224, 252, 1, 230, 138, 224, 252, 1, + 218, 177, 224, 252, 1, 230, 83, 224, 252, 1, 254, 202, 224, 252, 1, 227, + 72, 224, 252, 1, 231, 103, 224, 252, 1, 247, 2, 224, 252, 1, 254, 207, + 224, 252, 1, 242, 65, 224, 252, 1, 220, 63, 224, 252, 1, 230, 183, 224, + 252, 1, 230, 121, 224, 252, 1, 230, 157, 224, 252, 1, 253, 215, 224, 252, + 1, 254, 45, 224, 252, 1, 230, 105, 224, 252, 1, 254, 188, 224, 252, 1, + 246, 142, 224, 252, 1, 254, 24, 224, 252, 1, 247, 11, 224, 252, 1, 242, + 71, 224, 252, 1, 217, 255, 230, 93, 1, 254, 168, 230, 93, 1, 252, 237, + 230, 93, 1, 222, 155, 230, 93, 1, 237, 123, 230, 93, 1, 218, 138, 230, + 93, 1, 236, 149, 230, 93, 1, 249, 81, 230, 93, 1, 203, 230, 93, 1, 226, + 177, 230, 93, 1, 224, 215, 230, 93, 1, 249, 36, 230, 93, 1, 251, 116, + 230, 93, 1, 245, 0, 230, 93, 1, 246, 8, 230, 93, 1, 228, 153, 230, 93, 1, + 237, 4, 230, 93, 1, 235, 184, 230, 93, 1, 233, 170, 230, 93, 1, 231, 89, + 230, 93, 1, 218, 233, 230, 93, 1, 155, 230, 93, 1, 184, 230, 93, 1, 60, + 230, 93, 1, 73, 230, 93, 1, 72, 230, 93, 1, 74, 230, 93, 1, 68, 230, 93, + 1, 255, 58, 230, 93, 1, 246, 250, 230, 93, 1, 230, 127, 230, 93, 20, 217, + 84, 230, 93, 20, 107, 230, 93, 20, 103, 230, 93, 20, 160, 230, 93, 20, + 154, 230, 93, 20, 174, 230, 93, 20, 182, 230, 93, 20, 191, 230, 93, 20, + 185, 230, 93, 20, 190, 250, 53, 4, 60, 250, 53, 4, 73, 250, 53, 4, 72, + 250, 53, 4, 74, 250, 53, 4, 68, 250, 53, 4, 237, 123, 250, 53, 4, 237, + 59, 250, 53, 4, 175, 250, 53, 4, 236, 184, 250, 53, 4, 236, 113, 250, 53, + 4, 236, 57, 250, 53, 4, 236, 7, 250, 53, 4, 235, 188, 250, 53, 4, 235, + 122, 250, 53, 4, 235, 67, 250, 53, 4, 235, 12, 250, 53, 4, 234, 231, 250, + 53, 4, 196, 250, 53, 4, 234, 25, 250, 53, 4, 233, 196, 250, 53, 4, 233, + 136, 250, 53, 4, 233, 99, 250, 53, 4, 208, 250, 53, 4, 232, 141, 250, 53, + 4, 232, 62, 250, 53, 4, 231, 204, 250, 53, 4, 231, 144, 250, 53, 4, 187, + 250, 53, 4, 229, 198, 250, 53, 4, 229, 108, 250, 53, 4, 229, 37, 250, 53, + 4, 228, 202, 250, 53, 4, 203, 250, 53, 4, 227, 216, 250, 53, 4, 227, 147, + 250, 53, 4, 227, 75, 250, 53, 4, 227, 22, 250, 53, 4, 226, 177, 250, 53, + 4, 226, 94, 250, 53, 4, 224, 140, 250, 53, 4, 224, 26, 250, 53, 4, 223, + 103, 250, 53, 4, 222, 155, 250, 53, 4, 222, 87, 250, 53, 4, 221, 205, + 250, 53, 4, 101, 250, 53, 4, 221, 0, 250, 53, 4, 219, 7, 250, 53, 4, 218, + 227, 250, 53, 4, 218, 204, 250, 53, 4, 218, 187, 250, 53, 4, 218, 138, + 250, 53, 4, 218, 135, 250, 53, 4, 217, 114, 250, 53, 4, 217, 21, 237, + 225, 254, 53, 1, 254, 166, 237, 225, 254, 53, 1, 252, 101, 237, 225, 254, + 53, 1, 244, 91, 237, 225, 254, 53, 1, 249, 176, 237, 225, 254, 53, 1, + 243, 162, 237, 225, 254, 53, 1, 218, 233, 237, 225, 254, 53, 1, 217, 95, + 237, 225, 254, 53, 1, 243, 126, 237, 225, 254, 53, 1, 222, 46, 237, 225, + 254, 53, 1, 217, 219, 237, 225, 254, 53, 1, 236, 224, 237, 225, 254, 53, + 1, 235, 151, 237, 225, 254, 53, 1, 234, 1, 237, 225, 254, 53, 1, 231, + 103, 237, 225, 254, 53, 1, 226, 145, 237, 225, 254, 53, 1, 253, 207, 237, + 225, 254, 53, 1, 229, 198, 237, 225, 254, 53, 1, 226, 168, 237, 225, 254, + 53, 1, 228, 102, 237, 225, 254, 53, 1, 227, 174, 237, 225, 254, 53, 1, + 224, 209, 237, 225, 254, 53, 1, 222, 100, 237, 225, 254, 53, 226, 87, 55, + 237, 225, 254, 53, 54, 107, 237, 225, 254, 53, 54, 103, 237, 225, 254, + 53, 54, 160, 237, 225, 254, 53, 54, 222, 65, 237, 225, 254, 53, 54, 220, + 219, 237, 225, 254, 53, 54, 131, 242, 161, 237, 225, 254, 53, 54, 131, + 221, 231, 237, 225, 254, 53, 54, 222, 66, 221, 231, 229, 116, 1, 254, + 164, 229, 116, 1, 252, 104, 229, 116, 1, 244, 233, 229, 116, 1, 249, 64, + 229, 116, 1, 243, 162, 229, 116, 1, 218, 238, 229, 116, 1, 217, 108, 229, + 116, 1, 243, 128, 229, 116, 1, 222, 50, 229, 116, 1, 217, 220, 229, 116, + 1, 236, 246, 229, 116, 1, 235, 157, 229, 116, 1, 234, 1, 229, 116, 1, + 231, 103, 229, 116, 1, 225, 61, 229, 116, 1, 254, 191, 229, 116, 1, 229, + 198, 229, 116, 1, 226, 169, 229, 116, 1, 228, 107, 229, 116, 1, 227, 61, + 229, 116, 1, 224, 209, 229, 116, 1, 222, 105, 229, 116, 54, 107, 229, + 116, 54, 222, 65, 229, 116, 54, 220, 219, 229, 116, 54, 131, 242, 161, + 229, 116, 54, 103, 229, 116, 54, 160, 229, 116, 218, 174, 225, 54, 234, + 196, 1, 60, 234, 196, 1, 253, 204, 234, 196, 1, 245, 67, 234, 196, 1, + 250, 46, 234, 196, 1, 73, 234, 196, 1, 216, 216, 234, 196, 1, 72, 234, + 196, 1, 218, 90, 234, 196, 1, 237, 17, 234, 196, 1, 153, 234, 196, 1, + 189, 234, 196, 1, 207, 234, 196, 1, 74, 234, 196, 1, 152, 234, 196, 1, + 223, 219, 234, 196, 1, 222, 201, 234, 196, 1, 68, 234, 196, 1, 246, 74, + 234, 196, 1, 228, 163, 234, 196, 1, 198, 234, 196, 1, 221, 32, 234, 196, + 1, 254, 131, 234, 196, 1, 246, 197, 234, 196, 1, 234, 198, 234, 196, 1, + 231, 218, 234, 196, 1, 251, 202, 234, 196, 221, 87, 78, 201, 1, 60, 201, + 29, 5, 72, 201, 29, 5, 68, 201, 29, 5, 167, 152, 201, 29, 5, 73, 201, 29, + 5, 74, 201, 29, 235, 94, 78, 201, 5, 51, 227, 94, 56, 201, 5, 254, 95, + 201, 5, 219, 77, 201, 1, 175, 201, 1, 236, 149, 201, 1, 245, 0, 201, 1, + 244, 125, 201, 1, 251, 169, 201, 1, 251, 69, 201, 1, 237, 123, 201, 1, + 231, 77, 201, 1, 221, 29, 201, 1, 221, 19, 201, 1, 249, 132, 201, 1, 249, + 116, 201, 1, 231, 217, 201, 1, 222, 155, 201, 1, 222, 35, 201, 1, 249, + 207, 201, 1, 249, 36, 201, 1, 208, 201, 1, 187, 201, 1, 229, 141, 201, 1, + 252, 237, 201, 1, 252, 94, 201, 1, 196, 201, 1, 184, 201, 1, 203, 201, 1, + 235, 188, 201, 1, 219, 189, 201, 1, 225, 25, 201, 1, 223, 218, 201, 1, + 226, 177, 201, 1, 217, 114, 201, 1, 155, 201, 1, 236, 74, 201, 1, 221, 4, + 201, 5, 252, 201, 50, 201, 5, 251, 122, 201, 5, 61, 56, 201, 219, 82, + 201, 20, 107, 201, 20, 103, 201, 20, 160, 201, 20, 154, 201, 54, 222, 65, + 201, 54, 220, 219, 201, 54, 131, 242, 161, 201, 54, 131, 221, 231, 201, + 228, 197, 248, 145, 201, 228, 197, 3, 250, 221, 201, 228, 197, 250, 221, + 201, 228, 197, 250, 105, 135, 201, 228, 197, 234, 83, 201, 228, 197, 234, + 241, 201, 228, 197, 249, 167, 201, 228, 197, 51, 249, 167, 201, 228, 197, + 235, 37, 48, 224, 6, 254, 64, 1, 243, 162, 48, 224, 6, 254, 64, 1, 235, + 151, 48, 224, 6, 254, 64, 1, 243, 126, 48, 224, 6, 254, 64, 1, 234, 1, + 48, 224, 6, 254, 64, 1, 228, 102, 48, 224, 6, 254, 64, 1, 218, 233, 48, + 224, 6, 254, 64, 1, 224, 209, 48, 224, 6, 254, 64, 1, 227, 174, 48, 224, + 6, 254, 64, 1, 252, 101, 48, 224, 6, 254, 64, 1, 222, 100, 48, 224, 6, + 254, 64, 1, 226, 127, 48, 224, 6, 254, 64, 1, 236, 224, 48, 224, 6, 254, + 64, 1, 231, 103, 48, 224, 6, 254, 64, 1, 236, 134, 48, 224, 6, 254, 64, + 1, 226, 168, 48, 224, 6, 254, 64, 1, 226, 145, 48, 224, 6, 254, 64, 1, + 245, 231, 48, 224, 6, 254, 64, 1, 254, 168, 48, 224, 6, 254, 64, 1, 253, + 206, 48, 224, 6, 254, 64, 1, 249, 34, 48, 224, 6, 254, 64, 1, 244, 91, + 48, 224, 6, 254, 64, 1, 249, 176, 48, 224, 6, 254, 64, 1, 244, 118, 48, + 224, 6, 254, 64, 1, 222, 46, 48, 224, 6, 254, 64, 1, 217, 94, 48, 224, 6, + 254, 64, 1, 249, 31, 48, 224, 6, 254, 64, 1, 217, 219, 48, 224, 6, 254, + 64, 1, 222, 24, 48, 224, 6, 254, 64, 1, 222, 5, 48, 224, 6, 254, 64, 54, + 107, 48, 224, 6, 254, 64, 54, 245, 196, 48, 224, 6, 254, 64, 120, 237, + 211, 253, 216, 1, 60, 253, 216, 1, 255, 58, 253, 216, 1, 254, 93, 253, + 216, 1, 255, 17, 253, 216, 1, 254, 131, 253, 216, 1, 255, 18, 253, 216, + 1, 254, 234, 253, 216, 1, 254, 230, 253, 216, 1, 73, 253, 216, 1, 246, + 250, 253, 216, 1, 74, 253, 216, 1, 230, 127, 253, 216, 1, 72, 253, 216, + 1, 237, 255, 253, 216, 1, 68, 253, 216, 1, 220, 23, 253, 216, 1, 236, + 184, 253, 216, 1, 218, 135, 253, 216, 1, 218, 101, 253, 216, 1, 218, 110, + 253, 216, 1, 244, 191, 253, 216, 1, 244, 155, 253, 216, 1, 244, 116, 253, + 216, 1, 251, 99, 253, 216, 1, 237, 114, 253, 216, 1, 222, 87, 253, 216, + 1, 222, 22, 253, 216, 1, 249, 92, 253, 216, 1, 249, 29, 253, 216, 1, 221, + 26, 253, 216, 1, 229, 198, 253, 216, 1, 245, 231, 253, 216, 1, 252, 144, + 253, 216, 1, 252, 92, 253, 216, 1, 232, 106, 253, 216, 1, 232, 68, 253, + 216, 1, 232, 69, 253, 216, 1, 232, 141, 253, 216, 1, 231, 73, 253, 216, + 1, 231, 216, 253, 216, 1, 234, 25, 253, 216, 1, 243, 52, 253, 216, 1, + 217, 164, 253, 216, 1, 218, 25, 253, 216, 1, 219, 165, 253, 216, 1, 227, + 216, 253, 216, 1, 235, 122, 253, 216, 1, 226, 94, 253, 216, 1, 217, 92, + 253, 216, 1, 224, 246, 253, 216, 1, 217, 72, 253, 216, 1, 224, 147, 253, + 216, 1, 223, 190, 253, 216, 1, 243, 162, 253, 216, 255, 7, 78, 221, 172, + 124, 188, 104, 131, 61, 228, 196, 3, 124, 188, 104, 131, 61, 228, 196, + 235, 146, 124, 188, 104, 131, 61, 228, 196, 235, 146, 131, 61, 104, 124, + 188, 228, 196, 235, 146, 124, 227, 92, 104, 131, 227, 94, 228, 196, 235, + 146, 131, 227, 94, 104, 124, 227, 92, 228, 196, 237, 193, 229, 224, 1, + 254, 166, 237, 193, 229, 224, 1, 252, 101, 237, 193, 229, 224, 1, 244, + 91, 237, 193, 229, 224, 1, 249, 176, 237, 193, 229, 224, 1, 243, 162, + 237, 193, 229, 224, 1, 218, 233, 237, 193, 229, 224, 1, 217, 95, 237, + 193, 229, 224, 1, 243, 126, 237, 193, 229, 224, 1, 222, 46, 237, 193, + 229, 224, 1, 217, 219, 237, 193, 229, 224, 1, 236, 224, 237, 193, 229, + 224, 1, 235, 151, 237, 193, 229, 224, 1, 234, 1, 237, 193, 229, 224, 1, + 231, 103, 237, 193, 229, 224, 1, 226, 145, 237, 193, 229, 224, 1, 253, + 207, 237, 193, 229, 224, 1, 229, 198, 237, 193, 229, 224, 1, 226, 168, + 237, 193, 229, 224, 1, 228, 102, 237, 193, 229, 224, 1, 227, 174, 237, + 193, 229, 224, 1, 224, 209, 237, 193, 229, 224, 1, 222, 100, 237, 193, + 229, 224, 54, 107, 237, 193, 229, 224, 54, 103, 237, 193, 229, 224, 54, + 160, 237, 193, 229, 224, 54, 154, 237, 193, 229, 224, 54, 222, 65, 237, + 193, 229, 224, 54, 220, 219, 237, 193, 229, 224, 54, 131, 242, 161, 237, + 193, 229, 224, 54, 131, 221, 231, 237, 193, 230, 33, 1, 254, 166, 237, + 193, 230, 33, 1, 252, 101, 237, 193, 230, 33, 1, 244, 91, 237, 193, 230, + 33, 1, 249, 176, 237, 193, 230, 33, 1, 243, 162, 237, 193, 230, 33, 1, + 218, 232, 237, 193, 230, 33, 1, 217, 95, 237, 193, 230, 33, 1, 243, 126, + 237, 193, 230, 33, 1, 222, 46, 237, 193, 230, 33, 1, 217, 219, 237, 193, + 230, 33, 1, 236, 224, 237, 193, 230, 33, 1, 235, 151, 237, 193, 230, 33, + 1, 234, 0, 237, 193, 230, 33, 1, 231, 103, 237, 193, 230, 33, 1, 226, + 145, 237, 193, 230, 33, 1, 229, 198, 237, 193, 230, 33, 1, 226, 168, 237, + 193, 230, 33, 1, 224, 209, 237, 193, 230, 33, 1, 222, 100, 237, 193, 230, + 33, 54, 107, 237, 193, 230, 33, 54, 103, 237, 193, 230, 33, 54, 160, 237, + 193, 230, 33, 54, 154, 237, 193, 230, 33, 54, 222, 65, 237, 193, 230, 33, + 54, 220, 219, 237, 193, 230, 33, 54, 131, 242, 161, 237, 193, 230, 33, + 54, 131, 221, 231, 48, 172, 1, 230, 100, 60, 48, 172, 1, 218, 17, 60, 48, + 172, 1, 218, 17, 254, 234, 48, 172, 1, 230, 100, 72, 48, 172, 1, 218, 17, + 72, 48, 172, 1, 218, 17, 73, 48, 172, 1, 230, 100, 74, 48, 172, 1, 230, + 100, 230, 167, 48, 172, 1, 218, 17, 230, 167, 48, 172, 1, 230, 100, 255, + 11, 48, 172, 1, 218, 17, 255, 11, 48, 172, 1, 230, 100, 254, 233, 48, + 172, 1, 218, 17, 254, 233, 48, 172, 1, 230, 100, 254, 209, 48, 172, 1, + 218, 17, 254, 209, 48, 172, 1, 230, 100, 254, 228, 48, 172, 1, 218, 17, + 254, 228, 48, 172, 1, 230, 100, 254, 244, 48, 172, 1, 218, 17, 254, 244, + 48, 172, 1, 230, 100, 254, 232, 48, 172, 1, 230, 100, 246, 80, 48, 172, + 1, 218, 17, 246, 80, 48, 172, 1, 230, 100, 253, 212, 48, 172, 1, 218, 17, + 253, 212, 48, 172, 1, 230, 100, 254, 216, 48, 172, 1, 218, 17, 254, 216, + 48, 172, 1, 230, 100, 254, 226, 48, 172, 1, 218, 17, 254, 226, 48, 172, + 1, 230, 100, 230, 166, 48, 172, 1, 218, 17, 230, 166, 48, 172, 1, 230, + 100, 254, 175, 48, 172, 1, 218, 17, 254, 175, 48, 172, 1, 230, 100, 254, + 225, 48, 172, 1, 230, 100, 246, 207, 48, 172, 1, 230, 100, 246, 205, 48, + 172, 1, 230, 100, 254, 131, 48, 172, 1, 230, 100, 254, 223, 48, 172, 1, + 218, 17, 254, 223, 48, 172, 1, 230, 100, 246, 180, 48, 172, 1, 218, 17, + 246, 180, 48, 172, 1, 230, 100, 246, 194, 48, 172, 1, 218, 17, 246, 194, + 48, 172, 1, 230, 100, 246, 169, 48, 172, 1, 218, 17, 246, 169, 48, 172, + 1, 218, 17, 254, 123, 48, 172, 1, 230, 100, 246, 185, 48, 172, 1, 218, + 17, 254, 222, 48, 172, 1, 230, 100, 246, 162, 48, 172, 1, 230, 100, 230, + 120, 48, 172, 1, 230, 100, 242, 67, 48, 172, 1, 230, 100, 247, 0, 48, + 172, 1, 218, 17, 247, 0, 48, 172, 1, 230, 100, 254, 69, 48, 172, 1, 218, + 17, 254, 69, 48, 172, 1, 230, 100, 237, 158, 48, 172, 1, 218, 17, 237, + 158, 48, 172, 1, 230, 100, 230, 106, 48, 172, 1, 218, 17, 230, 106, 48, + 172, 1, 230, 100, 254, 67, 48, 172, 1, 218, 17, 254, 67, 48, 172, 1, 230, + 100, 254, 221, 48, 172, 1, 230, 100, 254, 13, 48, 172, 1, 230, 100, 254, + 220, 48, 172, 1, 230, 100, 254, 7, 48, 172, 1, 218, 17, 254, 7, 48, 172, + 1, 230, 100, 246, 133, 48, 172, 1, 218, 17, 246, 133, 48, 172, 1, 230, + 100, 253, 244, 48, 172, 1, 218, 17, 253, 244, 48, 172, 1, 230, 100, 254, + 217, 48, 172, 1, 218, 17, 254, 217, 48, 172, 1, 230, 100, 230, 92, 48, + 172, 1, 230, 100, 252, 187, 227, 11, 20, 107, 227, 11, 20, 103, 227, 11, + 20, 160, 227, 11, 20, 154, 227, 11, 20, 174, 227, 11, 20, 182, 227, 11, + 20, 191, 227, 11, 20, 185, 227, 11, 20, 190, 227, 11, 54, 222, 65, 227, + 11, 54, 220, 219, 227, 11, 54, 221, 245, 227, 11, 54, 245, 119, 227, 11, + 54, 245, 196, 227, 11, 54, 224, 69, 227, 11, 54, 225, 38, 227, 11, 54, + 246, 227, 227, 11, 54, 232, 27, 227, 11, 54, 131, 242, 161, 227, 11, 54, + 124, 242, 161, 227, 11, 54, 148, 242, 161, 227, 11, 54, 245, 116, 242, + 161, 227, 11, 54, 245, 170, 242, 161, 227, 11, 54, 224, 82, 242, 161, + 227, 11, 54, 225, 43, 242, 161, 227, 11, 54, 246, 235, 242, 161, 227, 11, + 54, 232, 31, 242, 161, 227, 11, 245, 108, 131, 243, 194, 227, 11, 245, + 108, 131, 228, 89, 227, 11, 245, 108, 131, 221, 251, 227, 11, 245, 108, + 124, 221, 249, 194, 5, 251, 146, 194, 5, 254, 95, 194, 5, 219, 77, 194, + 1, 60, 194, 1, 255, 58, 194, 1, 72, 194, 1, 237, 255, 194, 1, 68, 194, 1, + 220, 23, 194, 1, 73, 194, 1, 254, 196, 194, 1, 74, 194, 1, 253, 232, 194, + 1, 175, 194, 1, 236, 149, 194, 1, 245, 0, 194, 1, 244, 125, 194, 1, 232, + 115, 194, 1, 251, 169, 194, 1, 251, 69, 194, 1, 237, 123, 194, 1, 237, + 103, 194, 1, 231, 77, 194, 1, 221, 29, 194, 1, 221, 19, 194, 1, 249, 132, + 194, 1, 249, 121, 194, 1, 249, 116, 194, 1, 227, 151, 194, 1, 231, 217, + 194, 1, 222, 155, 194, 1, 222, 35, 194, 1, 249, 207, 194, 1, 249, 36, + 194, 1, 208, 194, 1, 187, 194, 1, 229, 141, 194, 1, 252, 237, 194, 1, + 252, 94, 194, 1, 196, 194, 1, 184, 194, 1, 203, 194, 1, 235, 188, 194, 1, + 219, 189, 194, 1, 225, 25, 194, 1, 223, 218, 194, 1, 226, 177, 194, 1, + 155, 194, 29, 5, 255, 58, 194, 29, 5, 72, 194, 29, 5, 237, 255, 194, 29, + 5, 68, 194, 29, 5, 220, 23, 194, 29, 5, 73, 194, 29, 5, 254, 196, 194, + 29, 5, 74, 194, 29, 5, 253, 232, 194, 5, 219, 82, 194, 5, 231, 112, 194, + 255, 7, 55, 194, 246, 171, 55, 194, 54, 55, 194, 226, 87, 78, 194, 51, + 226, 87, 78, 194, 249, 167, 194, 51, 249, 167, 15, 5, 60, 15, 5, 112, 27, + 60, 15, 5, 112, 27, 252, 228, 15, 5, 112, 27, 244, 229, 222, 59, 15, 5, + 112, 27, 155, 15, 5, 112, 27, 238, 1, 15, 5, 112, 27, 235, 173, 244, 3, + 15, 5, 112, 27, 233, 62, 15, 5, 112, 27, 226, 165, 15, 5, 255, 60, 15, 5, + 255, 11, 15, 5, 255, 12, 27, 254, 5, 15, 5, 255, 12, 27, 247, 100, 244, + 3, 15, 5, 255, 12, 27, 244, 240, 15, 5, 255, 12, 27, 244, 229, 222, 59, + 15, 5, 255, 12, 27, 155, 15, 5, 255, 12, 27, 238, 2, 244, 3, 15, 5, 255, + 12, 27, 237, 231, 15, 5, 255, 12, 27, 235, 174, 15, 5, 255, 12, 27, 224, + 231, 15, 5, 255, 12, 27, 105, 88, 105, 88, 68, 15, 5, 255, 12, 244, 3, + 15, 5, 255, 9, 15, 5, 255, 10, 27, 252, 216, 15, 5, 255, 10, 27, 244, + 229, 222, 59, 15, 5, 255, 10, 27, 234, 26, 88, 246, 197, 15, 5, 255, 10, + 27, 225, 23, 15, 5, 255, 10, 27, 222, 130, 15, 5, 254, 244, 15, 5, 254, + 182, 15, 5, 254, 183, 27, 246, 143, 15, 5, 254, 183, 27, 224, 203, 88, + 244, 81, 15, 5, 254, 175, 15, 5, 254, 176, 27, 254, 175, 15, 5, 254, 176, + 27, 248, 229, 15, 5, 254, 176, 27, 244, 81, 15, 5, 254, 176, 27, 155, 15, + 5, 254, 176, 27, 236, 251, 15, 5, 254, 176, 27, 236, 113, 15, 5, 254, + 176, 27, 224, 246, 15, 5, 254, 176, 27, 220, 30, 15, 5, 254, 172, 15, 5, + 254, 166, 15, 5, 254, 137, 15, 5, 254, 138, 27, 224, 246, 15, 5, 254, + 131, 15, 5, 254, 132, 104, 254, 131, 15, 5, 254, 132, 148, 221, 176, 15, + 5, 254, 132, 88, 232, 228, 230, 110, 254, 132, 88, 232, 227, 15, 5, 254, + 132, 88, 232, 228, 223, 226, 15, 5, 254, 107, 15, 5, 254, 88, 15, 5, 254, + 61, 15, 5, 254, 62, 27, 235, 247, 15, 5, 254, 35, 15, 5, 254, 12, 15, 5, + 254, 7, 15, 5, 254, 8, 217, 38, 222, 59, 15, 5, 254, 8, 236, 254, 222, + 59, 15, 5, 254, 8, 104, 254, 8, 220, 254, 104, 220, 254, 220, 254, 104, + 220, 254, 229, 246, 15, 5, 254, 8, 104, 254, 8, 104, 254, 7, 15, 5, 254, + 8, 104, 254, 8, 104, 254, 8, 250, 95, 254, 8, 104, 254, 8, 104, 254, 7, + 15, 5, 254, 5, 15, 5, 254, 3, 15, 5, 252, 237, 15, 5, 252, 228, 15, 5, + 252, 225, 15, 5, 252, 223, 15, 5, 252, 217, 15, 5, 252, 218, 104, 252, + 217, 15, 5, 252, 216, 15, 5, 135, 15, 5, 252, 200, 15, 5, 252, 84, 15, 5, + 252, 85, 27, 60, 15, 5, 252, 85, 27, 244, 220, 15, 5, 252, 85, 27, 238, + 2, 244, 3, 15, 5, 251, 248, 15, 5, 251, 249, 104, 251, 249, 255, 11, 15, + 5, 251, 249, 104, 251, 249, 220, 87, 15, 5, 251, 249, 250, 95, 251, 248, + 15, 5, 251, 237, 15, 5, 251, 238, 104, 251, 237, 15, 5, 251, 228, 15, 5, + 251, 227, 15, 5, 249, 207, 15, 5, 249, 198, 15, 5, 249, 199, 236, 91, 27, + 112, 88, 234, 57, 15, 5, 249, 199, 236, 91, 27, 254, 137, 15, 5, 249, + 199, 236, 91, 27, 252, 216, 15, 5, 249, 199, 236, 91, 27, 252, 84, 15, 5, + 249, 199, 236, 91, 27, 245, 0, 15, 5, 249, 199, 236, 91, 27, 245, 1, 88, + 234, 57, 15, 5, 249, 199, 236, 91, 27, 244, 103, 15, 5, 249, 199, 236, + 91, 27, 244, 87, 15, 5, 249, 199, 236, 91, 27, 244, 11, 15, 5, 249, 199, + 236, 91, 27, 155, 15, 5, 249, 199, 236, 91, 27, 237, 156, 15, 5, 249, + 199, 236, 91, 27, 237, 157, 88, 234, 231, 15, 5, 249, 199, 236, 91, 27, + 236, 240, 15, 5, 249, 199, 236, 91, 27, 235, 188, 15, 5, 249, 199, 236, + 91, 27, 234, 231, 15, 5, 249, 199, 236, 91, 27, 234, 232, 88, 234, 56, + 15, 5, 249, 199, 236, 91, 27, 234, 219, 15, 5, 249, 199, 236, 91, 27, + 232, 141, 15, 5, 249, 199, 236, 91, 27, 229, 247, 88, 229, 246, 15, 5, + 249, 199, 236, 91, 27, 224, 140, 15, 5, 249, 199, 236, 91, 27, 222, 130, + 15, 5, 249, 199, 236, 91, 27, 220, 125, 88, 244, 87, 15, 5, 249, 199, + 236, 91, 27, 220, 30, 15, 5, 249, 175, 15, 5, 249, 156, 15, 5, 249, 155, + 15, 5, 249, 154, 15, 5, 249, 15, 15, 5, 248, 255, 15, 5, 248, 230, 15, 5, + 248, 231, 27, 224, 246, 15, 5, 248, 229, 15, 5, 248, 219, 15, 5, 248, + 220, 236, 209, 105, 244, 4, 248, 202, 15, 5, 248, 202, 15, 5, 247, 111, + 15, 5, 247, 112, 104, 247, 111, 15, 5, 247, 112, 244, 3, 15, 5, 247, 112, + 224, 228, 15, 5, 247, 109, 15, 5, 247, 110, 27, 246, 130, 15, 5, 247, + 108, 15, 5, 247, 107, 15, 5, 247, 106, 15, 5, 247, 105, 15, 5, 247, 101, + 15, 5, 247, 99, 15, 5, 247, 100, 244, 3, 15, 5, 247, 100, 244, 4, 244, 3, + 15, 5, 247, 98, 15, 5, 247, 91, 15, 5, 73, 15, 5, 178, 27, 229, 246, 15, + 5, 178, 104, 178, 231, 104, 104, 231, 103, 15, 5, 247, 17, 15, 5, 247, + 18, 27, 112, 88, 243, 214, 88, 249, 207, 15, 5, 247, 18, 27, 244, 220, + 15, 5, 247, 18, 27, 233, 196, 15, 5, 247, 18, 27, 226, 156, 15, 5, 247, + 18, 27, 224, 246, 15, 5, 247, 18, 27, 68, 15, 5, 246, 252, 15, 5, 246, + 242, 15, 5, 246, 217, 15, 5, 246, 197, 15, 5, 246, 198, 27, 244, 228, 15, + 5, 246, 198, 27, 244, 229, 222, 59, 15, 5, 246, 198, 27, 234, 25, 15, 5, + 246, 198, 250, 95, 246, 197, 15, 5, 246, 198, 230, 110, 246, 197, 15, 5, + 246, 198, 223, 226, 15, 5, 246, 145, 15, 5, 246, 143, 15, 5, 246, 130, + 15, 5, 246, 78, 15, 5, 246, 79, 27, 60, 15, 5, 246, 79, 27, 112, 88, 235, + 162, 15, 5, 246, 79, 27, 112, 88, 235, 163, 27, 235, 162, 15, 5, 246, 79, + 27, 254, 131, 15, 5, 246, 79, 27, 252, 228, 15, 5, 246, 79, 27, 247, 100, + 244, 3, 15, 5, 246, 79, 27, 247, 100, 244, 4, 244, 3, 15, 5, 246, 79, 27, + 155, 15, 5, 246, 79, 27, 243, 214, 244, 3, 15, 5, 246, 79, 27, 238, 2, + 244, 3, 15, 5, 246, 79, 27, 236, 208, 15, 5, 246, 79, 27, 236, 209, 223, + 226, 15, 5, 246, 79, 27, 236, 5, 15, 5, 246, 79, 27, 235, 188, 15, 5, + 246, 79, 27, 235, 163, 27, 235, 162, 15, 5, 246, 79, 27, 235, 67, 15, 5, + 246, 79, 27, 234, 231, 15, 5, 246, 79, 27, 220, 124, 15, 5, 246, 79, 27, + 220, 115, 15, 5, 245, 0, 15, 5, 245, 1, 244, 3, 15, 5, 244, 254, 15, 5, + 244, 255, 27, 112, 88, 249, 208, 88, 155, 15, 5, 244, 255, 27, 112, 88, + 155, 15, 5, 244, 255, 27, 112, 88, 238, 1, 15, 5, 244, 255, 27, 255, 10, + 222, 60, 88, 222, 147, 15, 5, 244, 255, 27, 254, 131, 15, 5, 244, 255, + 27, 254, 7, 15, 5, 244, 255, 27, 254, 6, 88, 244, 240, 15, 5, 244, 255, + 27, 252, 228, 15, 5, 244, 255, 27, 252, 201, 88, 203, 15, 5, 244, 255, + 27, 251, 228, 15, 5, 244, 255, 27, 251, 229, 88, 203, 15, 5, 244, 255, + 27, 249, 207, 15, 5, 244, 255, 27, 249, 15, 15, 5, 244, 255, 27, 248, + 231, 27, 224, 246, 15, 5, 244, 255, 27, 247, 109, 15, 5, 244, 255, 27, + 246, 217, 15, 5, 244, 255, 27, 246, 218, 88, 235, 188, 15, 5, 244, 255, + 27, 246, 197, 15, 5, 244, 255, 27, 246, 198, 27, 244, 229, 222, 59, 15, + 5, 244, 255, 27, 244, 229, 222, 59, 15, 5, 244, 255, 27, 244, 220, 15, 5, + 244, 255, 27, 244, 103, 15, 5, 244, 255, 27, 244, 101, 15, 5, 244, 255, + 27, 244, 102, 88, 60, 15, 5, 244, 255, 27, 244, 88, 88, 223, 103, 15, 5, + 244, 255, 27, 243, 214, 88, 234, 232, 88, 246, 130, 15, 5, 244, 255, 27, + 243, 197, 15, 5, 244, 255, 27, 243, 198, 88, 235, 188, 15, 5, 244, 255, + 27, 243, 113, 88, 235, 67, 15, 5, 244, 255, 27, 242, 169, 15, 5, 244, + 255, 27, 238, 2, 244, 3, 15, 5, 244, 255, 27, 237, 146, 88, 242, 174, 88, + 254, 7, 15, 5, 244, 255, 27, 236, 240, 15, 5, 244, 255, 27, 236, 208, 15, + 5, 244, 255, 27, 236, 110, 15, 5, 244, 255, 27, 236, 111, 88, 235, 162, + 15, 5, 244, 255, 27, 236, 6, 88, 254, 131, 15, 5, 244, 255, 27, 235, 188, + 15, 5, 244, 255, 27, 234, 26, 88, 246, 197, 15, 5, 244, 255, 27, 233, + 196, 15, 5, 244, 255, 27, 231, 103, 15, 5, 244, 255, 27, 231, 104, 104, + 231, 103, 15, 5, 244, 255, 27, 187, 15, 5, 244, 255, 27, 226, 156, 15, 5, + 244, 255, 27, 226, 131, 15, 5, 244, 255, 27, 224, 246, 15, 5, 244, 255, + 27, 224, 247, 88, 220, 240, 15, 5, 244, 255, 27, 224, 219, 15, 5, 244, + 255, 27, 223, 74, 15, 5, 244, 255, 27, 222, 130, 15, 5, 244, 255, 27, 68, + 15, 5, 244, 255, 27, 220, 115, 15, 5, 244, 255, 27, 220, 116, 88, 247, + 111, 15, 5, 244, 255, 104, 244, 254, 15, 5, 244, 249, 15, 5, 244, 250, + 250, 95, 244, 249, 15, 5, 244, 247, 15, 5, 244, 248, 104, 244, 248, 244, + 221, 104, 244, 220, 15, 5, 244, 240, 15, 5, 244, 241, 244, 248, 104, 244, + 248, 244, 221, 104, 244, 220, 15, 5, 244, 239, 15, 5, 244, 237, 15, 5, + 244, 230, 15, 5, 244, 228, 15, 5, 244, 229, 222, 59, 15, 5, 244, 229, + 104, 244, 228, 15, 5, 244, 229, 250, 95, 244, 228, 15, 5, 244, 220, 15, + 5, 244, 219, 15, 5, 244, 215, 15, 5, 244, 166, 15, 5, 244, 167, 27, 235, + 247, 15, 5, 244, 103, 15, 5, 244, 104, 27, 73, 15, 5, 244, 104, 27, 68, + 15, 5, 244, 104, 250, 95, 244, 103, 15, 5, 244, 101, 15, 5, 244, 102, + 104, 244, 101, 15, 5, 244, 102, 250, 95, 244, 101, 15, 5, 244, 99, 15, 5, + 244, 87, 15, 5, 244, 88, 244, 3, 15, 5, 244, 85, 15, 5, 244, 86, 27, 112, + 88, 238, 1, 15, 5, 244, 86, 27, 244, 229, 222, 59, 15, 5, 244, 86, 27, + 238, 1, 15, 5, 244, 86, 27, 234, 232, 88, 238, 1, 15, 5, 244, 86, 27, + 187, 15, 5, 244, 83, 15, 5, 244, 81, 15, 5, 244, 82, 250, 95, 244, 81, + 15, 5, 244, 82, 27, 252, 228, 15, 5, 244, 82, 27, 222, 130, 15, 5, 244, + 82, 222, 59, 15, 5, 244, 17, 15, 5, 244, 18, 250, 95, 244, 17, 15, 5, + 244, 15, 15, 5, 244, 16, 27, 236, 240, 15, 5, 244, 16, 27, 236, 241, 27, + 238, 2, 244, 3, 15, 5, 244, 16, 27, 231, 103, 15, 5, 244, 16, 27, 226, + 157, 88, 220, 253, 15, 5, 244, 16, 244, 3, 15, 5, 244, 11, 15, 5, 244, + 12, 27, 112, 88, 235, 247, 15, 5, 244, 12, 27, 235, 247, 15, 5, 244, 12, + 104, 244, 12, 234, 225, 15, 5, 244, 7, 15, 5, 244, 5, 15, 5, 244, 6, 27, + 224, 246, 15, 5, 243, 253, 15, 5, 243, 252, 15, 5, 243, 249, 15, 5, 243, + 248, 15, 5, 155, 15, 5, 243, 214, 222, 59, 15, 5, 243, 214, 244, 3, 15, + 5, 243, 197, 15, 5, 243, 112, 15, 5, 243, 113, 27, 254, 7, 15, 5, 243, + 113, 27, 254, 5, 15, 5, 243, 113, 27, 252, 228, 15, 5, 243, 113, 27, 248, + 202, 15, 5, 243, 113, 27, 244, 247, 15, 5, 243, 113, 27, 236, 104, 15, 5, + 243, 113, 27, 231, 103, 15, 5, 243, 113, 27, 224, 246, 15, 5, 243, 113, + 27, 68, 15, 5, 242, 173, 15, 5, 242, 169, 15, 5, 242, 170, 27, 254, 131, + 15, 5, 242, 170, 27, 243, 197, 15, 5, 242, 170, 27, 236, 208, 15, 5, 242, + 170, 27, 235, 29, 15, 5, 242, 170, 27, 220, 115, 15, 5, 242, 166, 15, 5, + 72, 15, 5, 242, 107, 60, 15, 5, 242, 69, 15, 5, 238, 29, 15, 5, 238, 30, + 104, 238, 30, 251, 228, 15, 5, 238, 30, 104, 238, 30, 223, 226, 15, 5, + 238, 4, 15, 5, 238, 1, 15, 5, 238, 2, 248, 255, 15, 5, 238, 2, 227, 147, + 15, 5, 238, 2, 104, 238, 2, 224, 205, 104, 224, 205, 220, 116, 104, 220, + 115, 15, 5, 238, 2, 244, 3, 15, 5, 237, 249, 15, 5, 237, 250, 27, 244, + 229, 222, 59, 15, 5, 237, 248, 15, 5, 237, 238, 15, 5, 237, 239, 27, 222, + 130, 15, 5, 237, 239, 250, 95, 237, 238, 15, 5, 237, 239, 230, 110, 237, + 238, 15, 5, 237, 239, 223, 226, 15, 5, 237, 231, 15, 5, 237, 223, 15, 5, + 237, 156, 15, 5, 237, 145, 15, 5, 175, 15, 5, 206, 27, 60, 15, 5, 206, + 27, 254, 244, 15, 5, 206, 27, 254, 245, 88, 236, 5, 15, 5, 206, 27, 254, + 5, 15, 5, 206, 27, 252, 228, 15, 5, 206, 27, 252, 216, 15, 5, 206, 27, + 135, 15, 5, 206, 27, 252, 84, 15, 5, 206, 27, 246, 143, 15, 5, 206, 27, + 246, 130, 15, 5, 206, 27, 245, 0, 15, 5, 206, 27, 244, 240, 15, 5, 206, + 27, 244, 229, 222, 59, 15, 5, 206, 27, 244, 220, 15, 5, 206, 27, 244, + 221, 88, 225, 24, 88, 60, 15, 5, 206, 27, 244, 103, 15, 5, 206, 27, 244, + 87, 15, 5, 206, 27, 244, 82, 88, 226, 131, 15, 5, 206, 27, 244, 82, 250, + 95, 244, 81, 15, 5, 206, 27, 244, 17, 15, 5, 206, 27, 243, 252, 15, 5, + 206, 27, 238, 1, 15, 5, 206, 27, 237, 238, 15, 5, 206, 27, 236, 240, 15, + 5, 206, 27, 236, 113, 15, 5, 206, 27, 236, 110, 15, 5, 206, 27, 235, 67, + 15, 5, 206, 27, 234, 231, 15, 5, 206, 27, 234, 25, 15, 5, 206, 27, 234, + 26, 88, 247, 111, 15, 5, 206, 27, 234, 26, 88, 244, 103, 15, 5, 206, 27, + 234, 26, 88, 222, 87, 15, 5, 206, 27, 233, 196, 15, 5, 206, 27, 233, 197, + 88, 231, 98, 15, 5, 206, 27, 232, 141, 15, 5, 206, 27, 231, 103, 15, 5, + 206, 27, 229, 108, 15, 5, 206, 27, 227, 22, 15, 5, 206, 27, 226, 177, 15, + 5, 206, 27, 226, 131, 15, 5, 206, 27, 225, 25, 15, 5, 206, 27, 224, 246, + 15, 5, 206, 27, 224, 219, 15, 5, 206, 27, 224, 170, 15, 5, 206, 27, 224, + 132, 15, 5, 206, 27, 223, 81, 15, 5, 206, 27, 222, 112, 15, 5, 206, 27, + 68, 15, 5, 206, 27, 220, 124, 15, 5, 206, 27, 220, 115, 15, 5, 206, 27, + 220, 90, 27, 187, 15, 5, 206, 27, 220, 30, 15, 5, 206, 27, 217, 42, 15, + 5, 237, 6, 15, 5, 237, 7, 250, 95, 237, 6, 15, 5, 236, 255, 15, 5, 236, + 253, 15, 5, 236, 251, 15, 5, 236, 250, 15, 5, 236, 248, 15, 5, 236, 249, + 104, 236, 248, 15, 5, 236, 240, 15, 5, 236, 241, 27, 238, 2, 244, 3, 15, + 5, 236, 236, 15, 5, 236, 237, 27, 252, 228, 15, 5, 236, 237, 250, 95, + 236, 236, 15, 5, 236, 235, 15, 5, 236, 234, 15, 5, 236, 208, 15, 5, 236, + 209, 235, 175, 27, 105, 104, 235, 175, 27, 68, 15, 5, 236, 209, 104, 236, + 209, 235, 175, 27, 105, 104, 235, 175, 27, 68, 15, 5, 236, 160, 15, 5, + 236, 113, 15, 5, 236, 114, 27, 252, 228, 15, 5, 236, 114, 27, 68, 15, 5, + 236, 114, 27, 220, 115, 15, 5, 236, 110, 15, 5, 236, 104, 15, 5, 236, 93, + 15, 5, 236, 92, 15, 5, 236, 90, 15, 5, 236, 91, 104, 236, 90, 15, 5, 236, + 7, 15, 5, 236, 8, 104, 243, 113, 27, 254, 6, 236, 8, 104, 243, 113, 27, + 254, 5, 15, 5, 236, 5, 15, 5, 236, 3, 15, 5, 236, 4, 219, 177, 17, 15, 5, + 236, 2, 15, 5, 236, 0, 15, 5, 236, 1, 244, 3, 15, 5, 235, 255, 15, 5, + 235, 247, 15, 5, 235, 248, 230, 110, 235, 247, 15, 5, 235, 242, 15, 5, + 235, 225, 15, 5, 235, 188, 15, 5, 235, 174, 15, 5, 235, 175, 27, 60, 15, + 5, 235, 175, 27, 112, 88, 249, 208, 88, 155, 15, 5, 235, 175, 27, 112, + 88, 244, 220, 15, 5, 235, 175, 27, 112, 88, 235, 162, 15, 5, 235, 175, + 27, 254, 175, 15, 5, 235, 175, 27, 254, 131, 15, 5, 235, 175, 27, 254, 8, + 217, 38, 222, 59, 15, 5, 235, 175, 27, 252, 228, 15, 5, 235, 175, 27, + 252, 84, 15, 5, 235, 175, 27, 249, 156, 15, 5, 235, 175, 27, 246, 197, + 15, 5, 235, 175, 27, 245, 0, 15, 5, 235, 175, 27, 244, 220, 15, 5, 235, + 175, 27, 244, 11, 15, 5, 235, 175, 27, 244, 12, 88, 244, 11, 15, 5, 235, + 175, 27, 155, 15, 5, 235, 175, 27, 243, 197, 15, 5, 235, 175, 27, 243, + 113, 27, 231, 103, 15, 5, 235, 175, 27, 238, 2, 244, 3, 15, 5, 235, 175, + 27, 237, 238, 15, 5, 235, 175, 27, 237, 239, 88, 155, 15, 5, 235, 175, + 27, 237, 239, 88, 234, 231, 15, 5, 235, 175, 27, 236, 113, 15, 5, 235, + 175, 27, 236, 104, 15, 5, 235, 175, 27, 236, 5, 15, 5, 235, 175, 27, 236, + 0, 15, 5, 235, 175, 27, 236, 1, 88, 243, 113, 88, 60, 15, 5, 235, 175, + 27, 235, 174, 15, 5, 235, 175, 27, 235, 29, 15, 5, 235, 175, 27, 234, + 231, 15, 5, 235, 175, 27, 234, 221, 15, 5, 235, 175, 27, 234, 25, 15, 5, + 235, 175, 27, 234, 26, 88, 246, 197, 15, 5, 235, 175, 27, 233, 62, 15, 5, + 235, 175, 27, 232, 141, 15, 5, 235, 175, 27, 224, 247, 88, 223, 74, 15, + 5, 235, 175, 27, 224, 203, 88, 244, 82, 88, 246, 143, 15, 5, 235, 175, + 27, 224, 203, 88, 244, 82, 222, 59, 15, 5, 235, 175, 27, 224, 168, 15, 5, + 235, 175, 27, 224, 169, 88, 224, 168, 15, 5, 235, 175, 27, 223, 74, 15, + 5, 235, 175, 27, 222, 141, 15, 5, 235, 175, 27, 222, 130, 15, 5, 235, + 175, 27, 222, 88, 88, 112, 88, 223, 104, 88, 208, 15, 5, 235, 175, 27, + 68, 15, 5, 235, 175, 27, 105, 88, 60, 15, 5, 235, 175, 27, 105, 88, 105, + 88, 68, 15, 5, 235, 175, 27, 220, 125, 88, 254, 7, 15, 5, 235, 175, 27, + 220, 115, 15, 5, 235, 175, 27, 220, 30, 15, 5, 235, 175, 223, 226, 15, 5, + 235, 172, 15, 5, 235, 173, 27, 224, 246, 15, 5, 235, 173, 27, 224, 247, + 88, 223, 74, 15, 5, 235, 173, 244, 3, 15, 5, 235, 173, 244, 4, 104, 235, + 173, 244, 4, 224, 246, 15, 5, 235, 169, 15, 5, 235, 162, 15, 5, 235, 163, + 27, 235, 162, 15, 5, 235, 160, 15, 5, 235, 161, 27, 235, 247, 15, 5, 235, + 161, 27, 235, 248, 88, 227, 22, 15, 5, 235, 67, 15, 5, 235, 54, 15, 5, + 235, 46, 15, 5, 235, 29, 15, 5, 234, 231, 15, 5, 234, 232, 27, 252, 228, + 15, 5, 234, 229, 15, 5, 234, 230, 27, 254, 175, 15, 5, 234, 230, 27, 252, + 228, 15, 5, 234, 230, 27, 246, 130, 15, 5, 234, 230, 27, 246, 131, 222, + 59, 15, 5, 234, 230, 27, 244, 229, 222, 59, 15, 5, 234, 230, 27, 243, + 113, 27, 252, 228, 15, 5, 234, 230, 27, 237, 238, 15, 5, 234, 230, 27, + 236, 253, 15, 5, 234, 230, 27, 236, 251, 15, 5, 234, 230, 27, 236, 252, + 88, 254, 7, 15, 5, 234, 230, 27, 236, 113, 15, 5, 234, 230, 27, 235, 189, + 88, 254, 7, 15, 5, 234, 230, 27, 235, 174, 15, 5, 234, 230, 27, 234, 26, + 88, 246, 197, 15, 5, 234, 230, 27, 232, 141, 15, 5, 234, 230, 27, 231, + 144, 15, 5, 234, 230, 27, 224, 141, 88, 254, 7, 15, 5, 234, 230, 27, 224, + 124, 88, 251, 248, 15, 5, 234, 230, 27, 220, 253, 15, 5, 234, 230, 222, + 59, 15, 5, 234, 230, 250, 95, 234, 229, 15, 5, 234, 230, 230, 110, 234, + 229, 15, 5, 234, 230, 223, 226, 15, 5, 234, 230, 224, 228, 15, 5, 234, + 228, 15, 5, 234, 225, 15, 5, 234, 226, 104, 234, 225, 15, 5, 234, 226, + 230, 110, 234, 225, 15, 5, 234, 226, 224, 228, 15, 5, 234, 224, 15, 5, + 234, 221, 15, 5, 234, 219, 15, 5, 234, 220, 104, 234, 219, 15, 5, 234, + 220, 104, 234, 220, 244, 221, 104, 244, 220, 15, 5, 196, 15, 5, 234, 120, + 27, 222, 130, 15, 5, 234, 120, 244, 3, 15, 5, 234, 119, 15, 5, 234, 106, + 15, 5, 234, 74, 15, 5, 234, 57, 15, 5, 234, 56, 15, 5, 234, 25, 15, 5, + 233, 244, 15, 5, 233, 196, 15, 5, 233, 159, 15, 5, 233, 99, 15, 5, 233, + 100, 104, 233, 99, 15, 5, 233, 92, 15, 5, 233, 93, 244, 3, 15, 5, 233, + 78, 15, 5, 233, 65, 15, 5, 233, 62, 15, 5, 233, 63, 27, 60, 15, 5, 233, + 63, 27, 235, 247, 15, 5, 233, 63, 27, 217, 114, 15, 5, 233, 63, 104, 233, + 62, 15, 5, 233, 63, 104, 233, 63, 27, 112, 88, 208, 15, 5, 233, 63, 250, + 95, 233, 62, 15, 5, 233, 60, 15, 5, 233, 61, 27, 60, 15, 5, 233, 61, 27, + 112, 88, 249, 15, 15, 5, 233, 61, 27, 249, 15, 15, 5, 233, 61, 244, 3, + 15, 5, 208, 15, 5, 232, 237, 15, 5, 232, 227, 15, 5, 232, 228, 237, 169, + 15, 5, 232, 228, 27, 224, 171, 222, 59, 15, 5, 232, 228, 230, 110, 232, + 227, 15, 5, 232, 226, 15, 5, 232, 222, 231, 90, 15, 5, 232, 221, 15, 5, + 232, 220, 15, 5, 232, 141, 15, 5, 232, 142, 27, 60, 15, 5, 232, 142, 27, + 220, 115, 15, 5, 232, 142, 224, 228, 15, 5, 232, 62, 15, 5, 232, 63, 27, + 73, 15, 5, 232, 61, 15, 5, 232, 34, 15, 5, 232, 35, 27, 244, 229, 222, + 59, 15, 5, 232, 35, 27, 244, 221, 88, 244, 229, 222, 59, 15, 5, 232, 32, + 15, 5, 232, 33, 27, 254, 131, 15, 5, 232, 33, 27, 254, 7, 15, 5, 232, 33, + 27, 254, 8, 88, 254, 7, 15, 5, 232, 33, 27, 244, 11, 15, 5, 232, 33, 27, + 234, 26, 88, 244, 229, 222, 59, 15, 5, 232, 33, 27, 232, 141, 15, 5, 232, + 33, 27, 231, 103, 15, 5, 232, 33, 27, 224, 246, 15, 5, 232, 33, 27, 224, + 247, 88, 112, 254, 131, 15, 5, 232, 33, 27, 224, 247, 88, 254, 7, 15, 5, + 232, 33, 27, 224, 247, 88, 254, 8, 88, 254, 7, 15, 5, 232, 33, 27, 220, + 125, 88, 254, 7, 15, 5, 232, 33, 27, 220, 30, 15, 5, 232, 22, 15, 5, 231, + 144, 15, 5, 231, 117, 15, 5, 231, 103, 15, 5, 231, 104, 235, 173, 27, + 244, 220, 15, 5, 231, 104, 235, 173, 27, 234, 57, 15, 5, 231, 104, 235, + 173, 27, 226, 156, 15, 5, 231, 104, 235, 173, 27, 226, 157, 104, 231, + 104, 235, 173, 27, 226, 156, 15, 5, 231, 104, 235, 173, 27, 220, 30, 15, + 5, 231, 104, 222, 59, 15, 5, 231, 104, 104, 231, 103, 15, 5, 231, 104, + 250, 95, 231, 103, 15, 5, 231, 104, 250, 95, 231, 104, 235, 173, 104, + 235, 172, 15, 5, 231, 98, 15, 5, 231, 99, 255, 10, 27, 254, 3, 15, 5, + 231, 99, 255, 10, 27, 252, 84, 15, 5, 231, 99, 255, 10, 27, 247, 107, 15, + 5, 231, 99, 255, 10, 27, 244, 11, 15, 5, 231, 99, 255, 10, 27, 238, 2, + 244, 3, 15, 5, 231, 99, 255, 10, 27, 236, 251, 15, 5, 231, 99, 255, 10, + 27, 235, 188, 15, 5, 231, 99, 255, 10, 27, 232, 141, 15, 5, 231, 99, 255, + 10, 27, 224, 121, 15, 5, 231, 99, 255, 10, 27, 220, 124, 15, 5, 231, 99, + 236, 91, 27, 252, 84, 15, 5, 231, 99, 236, 91, 27, 252, 85, 68, 15, 5, + 187, 15, 5, 230, 37, 15, 5, 230, 12, 15, 5, 229, 246, 15, 5, 229, 152, + 15, 5, 229, 108, 15, 5, 229, 109, 27, 60, 15, 5, 229, 109, 27, 255, 11, + 15, 5, 229, 109, 27, 252, 84, 15, 5, 229, 109, 27, 251, 248, 15, 5, 229, + 109, 27, 73, 15, 5, 229, 109, 27, 72, 15, 5, 229, 109, 27, 242, 69, 15, + 5, 229, 109, 27, 68, 15, 5, 229, 109, 27, 220, 124, 15, 5, 229, 109, 250, + 95, 229, 108, 15, 5, 229, 67, 15, 5, 229, 68, 27, 236, 236, 15, 5, 229, + 68, 27, 220, 115, 15, 5, 229, 68, 27, 217, 114, 15, 5, 229, 68, 230, 110, + 229, 67, 15, 5, 203, 15, 5, 227, 254, 15, 5, 227, 147, 15, 5, 227, 22, + 15, 5, 226, 177, 15, 5, 226, 166, 231, 90, 15, 5, 226, 165, 15, 5, 226, + 166, 27, 60, 15, 5, 226, 166, 27, 247, 111, 15, 5, 226, 166, 27, 247, + 109, 15, 5, 226, 166, 27, 155, 15, 5, 226, 166, 27, 236, 240, 15, 5, 226, + 166, 27, 235, 247, 15, 5, 226, 166, 27, 234, 219, 15, 5, 226, 166, 27, + 233, 196, 15, 5, 226, 166, 27, 231, 103, 15, 5, 226, 166, 27, 226, 156, + 15, 5, 226, 166, 27, 224, 219, 15, 5, 226, 166, 27, 222, 147, 15, 5, 226, + 166, 27, 220, 124, 15, 5, 226, 166, 27, 220, 121, 15, 5, 226, 166, 27, + 220, 94, 15, 5, 226, 166, 27, 220, 50, 15, 5, 226, 166, 27, 220, 30, 15, + 5, 226, 166, 104, 226, 165, 15, 5, 226, 166, 244, 3, 15, 5, 226, 156, 15, + 5, 226, 157, 235, 175, 27, 254, 5, 15, 5, 226, 138, 15, 5, 226, 131, 15, + 5, 225, 25, 15, 5, 225, 23, 15, 5, 225, 24, 27, 60, 15, 5, 225, 24, 27, + 252, 228, 15, 5, 225, 24, 27, 244, 81, 15, 5, 225, 24, 27, 232, 141, 15, + 5, 225, 24, 27, 224, 168, 15, 5, 225, 24, 27, 220, 240, 15, 5, 225, 24, + 27, 68, 15, 5, 225, 24, 27, 105, 88, 60, 15, 5, 225, 22, 15, 5, 225, 20, + 15, 5, 225, 3, 15, 5, 224, 246, 15, 5, 224, 247, 242, 173, 15, 5, 224, + 247, 104, 224, 247, 244, 248, 104, 244, 248, 244, 221, 104, 244, 220, 15, + 5, 224, 247, 104, 224, 247, 222, 148, 104, 222, 148, 244, 221, 104, 244, + 220, 15, 5, 224, 239, 15, 5, 224, 234, 15, 5, 224, 231, 15, 5, 224, 230, + 15, 5, 224, 227, 15, 5, 224, 219, 15, 5, 224, 220, 27, 60, 15, 5, 224, + 220, 27, 237, 238, 15, 5, 224, 213, 15, 5, 224, 214, 27, 60, 15, 5, 224, + 214, 27, 252, 217, 15, 5, 224, 214, 27, 251, 237, 15, 5, 224, 214, 27, + 248, 219, 15, 5, 224, 214, 27, 244, 220, 15, 5, 224, 214, 27, 238, 1, 15, + 5, 224, 214, 27, 238, 2, 244, 3, 15, 5, 224, 214, 27, 235, 242, 15, 5, + 224, 214, 27, 234, 221, 15, 5, 224, 214, 27, 233, 92, 15, 5, 224, 214, + 27, 226, 156, 15, 5, 224, 208, 15, 5, 224, 204, 15, 5, 224, 205, 222, 59, + 15, 5, 224, 205, 104, 224, 205, 251, 229, 104, 251, 228, 15, 5, 224, 202, + 15, 5, 224, 170, 15, 5, 224, 171, 104, 237, 170, 224, 170, 15, 5, 224, + 168, 15, 5, 224, 167, 15, 5, 224, 140, 15, 5, 224, 141, 244, 3, 15, 5, + 224, 132, 15, 5, 224, 130, 15, 5, 224, 131, 104, 224, 131, 224, 168, 15, + 5, 224, 123, 15, 5, 224, 121, 15, 5, 223, 103, 15, 5, 223, 104, 104, 223, + 103, 15, 5, 223, 83, 15, 5, 223, 82, 15, 5, 223, 81, 15, 5, 223, 74, 15, + 5, 223, 73, 15, 5, 223, 53, 15, 5, 223, 52, 15, 5, 222, 155, 15, 5, 222, + 156, 253, 251, 15, 5, 222, 156, 27, 243, 112, 15, 5, 222, 156, 27, 233, + 196, 15, 5, 222, 156, 244, 3, 15, 5, 222, 147, 15, 5, 222, 148, 104, 222, + 148, 232, 63, 104, 232, 63, 248, 203, 104, 248, 202, 15, 5, 222, 148, + 223, 226, 15, 5, 222, 141, 15, 5, 118, 27, 252, 84, 15, 5, 118, 27, 244, + 11, 15, 5, 118, 27, 224, 246, 15, 5, 118, 27, 224, 170, 15, 5, 118, 27, + 220, 253, 15, 5, 118, 27, 220, 115, 15, 5, 222, 130, 15, 5, 222, 112, 15, + 5, 222, 87, 15, 5, 222, 88, 244, 3, 15, 5, 221, 205, 15, 5, 221, 206, + 222, 59, 15, 5, 221, 181, 15, 5, 221, 165, 15, 5, 221, 166, 27, 222, 130, + 15, 5, 221, 166, 104, 221, 165, 15, 5, 221, 166, 104, 221, 166, 244, 248, + 104, 244, 248, 244, 221, 104, 244, 220, 15, 5, 221, 0, 15, 5, 220, 253, + 15, 5, 220, 251, 15, 5, 220, 249, 15, 5, 220, 240, 15, 5, 220, 241, 104, + 220, 241, 217, 115, 104, 217, 114, 15, 5, 68, 15, 5, 105, 244, 11, 15, 5, + 105, 105, 68, 15, 5, 105, 104, 105, 230, 44, 104, 230, 44, 244, 221, 104, + 244, 220, 15, 5, 105, 104, 105, 223, 54, 104, 223, 53, 15, 5, 105, 104, + 105, 105, 210, 104, 105, 227, 159, 15, 5, 220, 124, 15, 5, 220, 121, 15, + 5, 220, 115, 15, 5, 220, 116, 235, 242, 15, 5, 220, 116, 27, 252, 228, + 15, 5, 220, 116, 27, 233, 196, 15, 5, 220, 116, 27, 105, 88, 105, 88, 68, + 15, 5, 220, 116, 27, 105, 88, 105, 88, 105, 244, 3, 15, 5, 220, 116, 244, + 3, 15, 5, 220, 116, 224, 228, 15, 5, 220, 116, 224, 229, 27, 252, 228, + 15, 5, 220, 111, 15, 5, 220, 94, 15, 5, 220, 95, 27, 235, 174, 15, 5, + 220, 95, 27, 234, 26, 88, 249, 207, 15, 5, 220, 95, 27, 225, 23, 15, 5, + 220, 95, 27, 68, 15, 5, 220, 93, 15, 5, 220, 89, 15, 5, 220, 90, 27, 236, + 208, 15, 5, 220, 90, 27, 187, 15, 5, 220, 87, 15, 5, 220, 88, 244, 3, 15, + 5, 220, 50, 15, 5, 220, 51, 250, 95, 220, 50, 15, 5, 220, 51, 224, 228, + 15, 5, 220, 48, 15, 5, 220, 49, 27, 112, 88, 155, 15, 5, 220, 49, 27, + 112, 88, 208, 15, 5, 220, 49, 27, 254, 175, 15, 5, 220, 49, 27, 155, 15, + 5, 220, 49, 27, 231, 103, 15, 5, 220, 49, 27, 220, 124, 15, 5, 220, 49, + 27, 220, 125, 88, 254, 7, 15, 5, 220, 49, 27, 220, 125, 88, 252, 84, 15, + 5, 220, 47, 15, 5, 220, 44, 15, 5, 220, 43, 15, 5, 220, 40, 15, 5, 220, + 41, 27, 60, 15, 5, 220, 41, 27, 254, 3, 15, 5, 220, 41, 27, 135, 15, 5, + 220, 41, 27, 247, 101, 15, 5, 220, 41, 27, 245, 0, 15, 5, 220, 41, 27, + 244, 240, 15, 5, 220, 41, 27, 244, 229, 222, 59, 15, 5, 220, 41, 27, 244, + 220, 15, 5, 220, 41, 27, 244, 17, 15, 5, 220, 41, 27, 155, 15, 5, 220, + 41, 27, 238, 1, 15, 5, 220, 41, 27, 237, 238, 15, 5, 220, 41, 27, 237, + 145, 15, 5, 220, 41, 27, 236, 113, 15, 5, 220, 41, 27, 234, 219, 15, 5, + 220, 41, 27, 233, 159, 15, 5, 220, 41, 27, 187, 15, 5, 220, 41, 27, 224, + 246, 15, 5, 220, 41, 27, 224, 130, 15, 5, 220, 41, 27, 221, 0, 15, 5, + 220, 41, 27, 105, 88, 244, 11, 15, 5, 220, 41, 27, 220, 115, 15, 5, 220, + 41, 27, 220, 38, 15, 5, 220, 38, 15, 5, 220, 39, 27, 68, 15, 5, 220, 30, + 15, 5, 220, 31, 27, 60, 15, 5, 220, 31, 27, 236, 7, 15, 5, 220, 31, 27, + 235, 247, 15, 5, 220, 31, 27, 222, 130, 15, 5, 220, 27, 15, 5, 220, 29, + 15, 5, 220, 28, 15, 5, 220, 24, 15, 5, 220, 13, 15, 5, 220, 14, 27, 236, + 208, 15, 5, 220, 12, 15, 5, 217, 114, 15, 5, 217, 115, 222, 59, 15, 5, + 217, 115, 204, 27, 235, 247, 15, 5, 217, 111, 15, 5, 217, 104, 15, 5, + 217, 91, 15, 5, 217, 42, 15, 5, 217, 43, 104, 217, 42, 15, 5, 217, 41, + 15, 5, 217, 39, 15, 5, 217, 40, 236, 254, 222, 59, 15, 5, 217, 34, 15, 5, + 217, 26, 15, 5, 217, 13, 15, 5, 217, 11, 15, 5, 217, 12, 27, 60, 15, 5, + 217, 10, 15, 5, 217, 9, 15, 120, 5, 124, 254, 7, 15, 120, 5, 148, 254, 7, + 15, 120, 5, 245, 116, 254, 7, 15, 120, 5, 245, 170, 254, 7, 15, 120, 5, + 224, 82, 254, 7, 15, 120, 5, 225, 43, 254, 7, 15, 120, 5, 246, 235, 254, + 7, 15, 120, 5, 232, 31, 254, 7, 15, 120, 5, 148, 248, 202, 15, 120, 5, + 245, 116, 248, 202, 15, 120, 5, 245, 170, 248, 202, 15, 120, 5, 224, 82, + 248, 202, 15, 120, 5, 225, 43, 248, 202, 15, 120, 5, 246, 235, 248, 202, + 15, 120, 5, 232, 31, 248, 202, 15, 120, 5, 245, 116, 68, 15, 120, 5, 245, + 170, 68, 15, 120, 5, 224, 82, 68, 15, 120, 5, 225, 43, 68, 15, 120, 5, + 246, 235, 68, 15, 120, 5, 232, 31, 68, 15, 120, 5, 131, 244, 168, 15, + 120, 5, 124, 244, 168, 15, 120, 5, 148, 244, 168, 15, 120, 5, 245, 116, + 244, 168, 15, 120, 5, 245, 170, 244, 168, 15, 120, 5, 224, 82, 244, 168, + 15, 120, 5, 225, 43, 244, 168, 15, 120, 5, 246, 235, 244, 168, 15, 120, + 5, 232, 31, 244, 168, 15, 120, 5, 131, 244, 165, 15, 120, 5, 124, 244, + 165, 15, 120, 5, 148, 244, 165, 15, 120, 5, 245, 116, 244, 165, 15, 120, + 5, 245, 170, 244, 165, 15, 120, 5, 124, 225, 3, 15, 120, 5, 148, 225, 3, + 15, 120, 5, 148, 225, 4, 219, 177, 17, 15, 120, 5, 245, 116, 225, 3, 15, + 120, 5, 245, 170, 225, 3, 15, 120, 5, 224, 82, 225, 3, 15, 120, 5, 225, + 43, 225, 3, 15, 120, 5, 246, 235, 225, 3, 15, 120, 5, 232, 31, 225, 3, + 15, 120, 5, 131, 224, 254, 15, 120, 5, 124, 224, 254, 15, 120, 5, 148, + 224, 254, 15, 120, 5, 148, 224, 255, 219, 177, 17, 15, 120, 5, 245, 116, + 224, 254, 15, 120, 5, 245, 170, 224, 254, 15, 120, 5, 225, 4, 27, 244, + 241, 88, 248, 202, 15, 120, 5, 225, 4, 27, 244, 241, 88, 233, 159, 15, + 120, 5, 131, 251, 225, 15, 120, 5, 124, 251, 225, 15, 120, 5, 148, 251, + 225, 15, 120, 5, 148, 251, 226, 219, 177, 17, 15, 120, 5, 245, 116, 251, + 225, 15, 120, 5, 245, 170, 251, 225, 15, 120, 5, 148, 219, 177, 245, 124, + 246, 132, 15, 120, 5, 148, 219, 177, 245, 124, 246, 129, 15, 120, 5, 245, + 116, 219, 177, 245, 124, 235, 47, 15, 120, 5, 245, 116, 219, 177, 245, + 124, 235, 45, 15, 120, 5, 245, 116, 219, 177, 245, 124, 235, 48, 60, 15, + 120, 5, 245, 116, 219, 177, 245, 124, 235, 48, 253, 204, 15, 120, 5, 224, + 82, 219, 177, 245, 124, 254, 4, 15, 120, 5, 225, 43, 219, 177, 245, 124, + 237, 230, 15, 120, 5, 225, 43, 219, 177, 245, 124, 237, 232, 60, 15, 120, + 5, 225, 43, 219, 177, 245, 124, 237, 232, 253, 204, 15, 120, 5, 246, 235, + 219, 177, 245, 124, 220, 26, 15, 120, 5, 246, 235, 219, 177, 245, 124, + 220, 25, 15, 120, 5, 232, 31, 219, 177, 245, 124, 237, 246, 15, 120, 5, + 232, 31, 219, 177, 245, 124, 237, 245, 15, 120, 5, 232, 31, 219, 177, + 245, 124, 237, 244, 15, 120, 5, 232, 31, 219, 177, 245, 124, 237, 247, + 60, 15, 120, 5, 124, 254, 8, 222, 59, 15, 120, 5, 148, 254, 8, 222, 59, + 15, 120, 5, 245, 116, 254, 8, 222, 59, 15, 120, 5, 245, 170, 254, 8, 222, + 59, 15, 120, 5, 224, 82, 254, 8, 222, 59, 15, 120, 5, 131, 252, 207, 15, + 120, 5, 124, 252, 207, 15, 120, 5, 148, 252, 207, 15, 120, 5, 245, 116, + 252, 207, 15, 120, 5, 245, 116, 252, 208, 219, 177, 17, 15, 120, 5, 245, + 170, 252, 207, 15, 120, 5, 245, 170, 252, 208, 219, 177, 17, 15, 120, 5, + 232, 40, 15, 120, 5, 232, 41, 15, 120, 5, 131, 246, 128, 15, 120, 5, 124, + 246, 128, 15, 120, 5, 131, 221, 252, 248, 202, 15, 120, 5, 124, 221, 250, + 248, 202, 15, 120, 5, 245, 170, 224, 72, 248, 202, 15, 120, 5, 131, 221, + 252, 219, 177, 245, 124, 60, 15, 120, 5, 124, 221, 250, 219, 177, 245, + 124, 60, 15, 120, 5, 131, 246, 232, 254, 7, 15, 120, 5, 131, 228, 90, + 254, 7, 15, 120, 5, 48, 253, 254, 131, 224, 73, 15, 120, 5, 48, 253, 254, + 131, 228, 89, 15, 228, 197, 5, 48, 253, 254, 218, 174, 248, 191, 15, 228, + 197, 5, 69, 250, 175, 15, 228, 197, 5, 249, 11, 250, 175, 15, 228, 197, + 5, 249, 11, 221, 86, 10, 11, 255, 140, 10, 11, 255, 139, 10, 11, 255, + 138, 10, 11, 255, 137, 10, 11, 255, 136, 10, 11, 255, 135, 10, 11, 255, + 134, 10, 11, 255, 133, 10, 11, 255, 132, 10, 11, 255, 131, 10, 11, 255, + 130, 10, 11, 255, 129, 10, 11, 255, 128, 10, 11, 255, 127, 10, 11, 255, + 126, 10, 11, 255, 125, 10, 11, 255, 124, 10, 11, 255, 123, 10, 11, 255, + 122, 10, 11, 255, 121, 10, 11, 255, 120, 10, 11, 255, 119, 10, 11, 255, + 118, 10, 11, 255, 117, 10, 11, 255, 116, 10, 11, 255, 115, 10, 11, 255, + 114, 10, 11, 255, 113, 10, 11, 255, 112, 10, 11, 255, 111, 10, 11, 255, + 110, 10, 11, 255, 109, 10, 11, 255, 108, 10, 11, 255, 107, 10, 11, 255, + 106, 10, 11, 255, 105, 10, 11, 255, 104, 10, 11, 255, 103, 10, 11, 255, + 102, 10, 11, 255, 101, 10, 11, 255, 100, 10, 11, 255, 99, 10, 11, 255, + 98, 10, 11, 255, 97, 10, 11, 255, 96, 10, 11, 255, 95, 10, 11, 255, 94, + 10, 11, 255, 93, 10, 11, 255, 92, 10, 11, 255, 91, 10, 11, 255, 90, 10, + 11, 255, 89, 10, 11, 255, 88, 10, 11, 255, 87, 10, 11, 255, 86, 10, 11, + 255, 85, 10, 11, 255, 84, 10, 11, 255, 83, 10, 11, 255, 82, 10, 11, 255, + 81, 10, 11, 255, 80, 10, 11, 255, 79, 10, 11, 255, 78, 10, 11, 255, 77, + 10, 11, 255, 76, 10, 11, 255, 75, 10, 11, 255, 74, 10, 11, 255, 73, 10, + 11, 255, 72, 10, 11, 255, 71, 10, 11, 255, 70, 10, 11, 255, 69, 10, 11, + 255, 68, 10, 11, 255, 67, 10, 11, 255, 66, 10, 11, 255, 65, 10, 11, 255, + 64, 10, 11, 255, 63, 10, 11, 255, 62, 10, 11, 255, 61, 10, 11, 253, 202, + 10, 11, 253, 200, 10, 11, 253, 198, 10, 11, 253, 196, 10, 11, 253, 194, + 10, 11, 253, 193, 10, 11, 253, 191, 10, 11, 253, 189, 10, 11, 253, 187, + 10, 11, 253, 185, 10, 11, 251, 198, 10, 11, 251, 197, 10, 11, 251, 196, + 10, 11, 251, 195, 10, 11, 251, 194, 10, 11, 251, 193, 10, 11, 251, 192, + 10, 11, 251, 191, 10, 11, 251, 190, 10, 11, 251, 189, 10, 11, 251, 188, + 10, 11, 251, 187, 10, 11, 251, 186, 10, 11, 251, 185, 10, 11, 251, 184, + 10, 11, 251, 183, 10, 11, 251, 182, 10, 11, 251, 181, 10, 11, 251, 180, + 10, 11, 251, 179, 10, 11, 251, 178, 10, 11, 251, 177, 10, 11, 251, 176, + 10, 11, 251, 175, 10, 11, 251, 174, 10, 11, 251, 173, 10, 11, 251, 172, + 10, 11, 251, 171, 10, 11, 250, 45, 10, 11, 250, 44, 10, 11, 250, 43, 10, + 11, 250, 42, 10, 11, 250, 41, 10, 11, 250, 40, 10, 11, 250, 39, 10, 11, + 250, 38, 10, 11, 250, 37, 10, 11, 250, 36, 10, 11, 250, 35, 10, 11, 250, + 34, 10, 11, 250, 33, 10, 11, 250, 32, 10, 11, 250, 31, 10, 11, 250, 30, + 10, 11, 250, 29, 10, 11, 250, 28, 10, 11, 250, 27, 10, 11, 250, 26, 10, + 11, 250, 25, 10, 11, 250, 24, 10, 11, 250, 23, 10, 11, 250, 22, 10, 11, + 250, 21, 10, 11, 250, 20, 10, 11, 250, 19, 10, 11, 250, 18, 10, 11, 250, + 17, 10, 11, 250, 16, 10, 11, 250, 15, 10, 11, 250, 14, 10, 11, 250, 13, + 10, 11, 250, 12, 10, 11, 250, 11, 10, 11, 250, 10, 10, 11, 250, 9, 10, + 11, 250, 8, 10, 11, 250, 7, 10, 11, 250, 6, 10, 11, 250, 5, 10, 11, 250, + 4, 10, 11, 250, 3, 10, 11, 250, 2, 10, 11, 250, 1, 10, 11, 250, 0, 10, + 11, 249, 255, 10, 11, 249, 254, 10, 11, 249, 253, 10, 11, 249, 252, 10, + 11, 249, 251, 10, 11, 249, 250, 10, 11, 249, 249, 10, 11, 249, 248, 10, + 11, 249, 247, 10, 11, 249, 246, 10, 11, 249, 245, 10, 11, 249, 244, 10, + 11, 249, 243, 10, 11, 249, 242, 10, 11, 249, 241, 10, 11, 249, 240, 10, + 11, 249, 239, 10, 11, 249, 238, 10, 11, 249, 237, 10, 11, 249, 236, 10, + 11, 249, 235, 10, 11, 249, 234, 10, 11, 249, 233, 10, 11, 249, 232, 10, + 11, 249, 231, 10, 11, 249, 230, 10, 11, 249, 229, 10, 11, 249, 228, 10, + 11, 249, 227, 10, 11, 249, 226, 10, 11, 249, 225, 10, 11, 249, 224, 10, + 11, 249, 223, 10, 11, 249, 222, 10, 11, 249, 221, 10, 11, 249, 220, 10, + 11, 249, 219, 10, 11, 249, 218, 10, 11, 249, 217, 10, 11, 249, 216, 10, + 11, 249, 215, 10, 11, 249, 214, 10, 11, 249, 213, 10, 11, 249, 212, 10, + 11, 249, 211, 10, 11, 249, 210, 10, 11, 247, 62, 10, 11, 247, 61, 10, 11, + 247, 60, 10, 11, 247, 59, 10, 11, 247, 58, 10, 11, 247, 57, 10, 11, 247, + 56, 10, 11, 247, 55, 10, 11, 247, 54, 10, 11, 247, 53, 10, 11, 247, 52, + 10, 11, 247, 51, 10, 11, 247, 50, 10, 11, 247, 49, 10, 11, 247, 48, 10, + 11, 247, 47, 10, 11, 247, 46, 10, 11, 247, 45, 10, 11, 247, 44, 10, 11, + 247, 43, 10, 11, 247, 42, 10, 11, 247, 41, 10, 11, 247, 40, 10, 11, 247, + 39, 10, 11, 247, 38, 10, 11, 247, 37, 10, 11, 247, 36, 10, 11, 247, 35, + 10, 11, 247, 34, 10, 11, 247, 33, 10, 11, 247, 32, 10, 11, 247, 31, 10, + 11, 247, 30, 10, 11, 247, 29, 10, 11, 247, 28, 10, 11, 247, 27, 10, 11, + 247, 26, 10, 11, 247, 25, 10, 11, 247, 24, 10, 11, 247, 23, 10, 11, 247, + 22, 10, 11, 247, 21, 10, 11, 247, 20, 10, 11, 247, 19, 10, 11, 246, 73, + 10, 11, 246, 72, 10, 11, 246, 71, 10, 11, 246, 70, 10, 11, 246, 69, 10, + 11, 246, 68, 10, 11, 246, 67, 10, 11, 246, 66, 10, 11, 246, 65, 10, 11, + 246, 64, 10, 11, 246, 63, 10, 11, 246, 62, 10, 11, 246, 61, 10, 11, 246, + 60, 10, 11, 246, 59, 10, 11, 246, 58, 10, 11, 246, 57, 10, 11, 246, 56, + 10, 11, 246, 55, 10, 11, 246, 54, 10, 11, 246, 53, 10, 11, 246, 52, 10, + 11, 246, 51, 10, 11, 246, 50, 10, 11, 246, 49, 10, 11, 246, 48, 10, 11, + 246, 47, 10, 11, 246, 46, 10, 11, 246, 45, 10, 11, 246, 44, 10, 11, 246, + 43, 10, 11, 246, 42, 10, 11, 246, 41, 10, 11, 246, 40, 10, 11, 246, 39, + 10, 11, 246, 38, 10, 11, 246, 37, 10, 11, 246, 36, 10, 11, 246, 35, 10, + 11, 246, 34, 10, 11, 246, 33, 10, 11, 246, 32, 10, 11, 246, 31, 10, 11, + 246, 30, 10, 11, 246, 29, 10, 11, 246, 28, 10, 11, 246, 27, 10, 11, 246, + 26, 10, 11, 246, 25, 10, 11, 246, 24, 10, 11, 246, 23, 10, 11, 246, 22, + 10, 11, 246, 21, 10, 11, 246, 20, 10, 11, 246, 19, 10, 11, 246, 18, 10, + 11, 246, 17, 10, 11, 246, 16, 10, 11, 246, 15, 10, 11, 246, 14, 10, 11, + 246, 13, 10, 11, 246, 12, 10, 11, 246, 11, 10, 11, 246, 10, 10, 11, 246, + 9, 10, 11, 245, 66, 10, 11, 245, 65, 10, 11, 245, 64, 10, 11, 245, 63, + 10, 11, 245, 62, 10, 11, 245, 61, 10, 11, 245, 60, 10, 11, 245, 59, 10, + 11, 245, 58, 10, 11, 245, 57, 10, 11, 245, 56, 10, 11, 245, 55, 10, 11, + 245, 54, 10, 11, 245, 53, 10, 11, 245, 52, 10, 11, 245, 51, 10, 11, 245, + 50, 10, 11, 245, 49, 10, 11, 245, 48, 10, 11, 245, 47, 10, 11, 245, 46, + 10, 11, 245, 45, 10, 11, 245, 44, 10, 11, 245, 43, 10, 11, 245, 42, 10, + 11, 245, 41, 10, 11, 245, 40, 10, 11, 245, 39, 10, 11, 245, 38, 10, 11, + 245, 37, 10, 11, 245, 36, 10, 11, 245, 35, 10, 11, 245, 34, 10, 11, 245, + 33, 10, 11, 245, 32, 10, 11, 245, 31, 10, 11, 245, 30, 10, 11, 245, 29, + 10, 11, 245, 28, 10, 11, 245, 27, 10, 11, 245, 26, 10, 11, 245, 25, 10, + 11, 245, 24, 10, 11, 245, 23, 10, 11, 245, 22, 10, 11, 245, 21, 10, 11, + 245, 20, 10, 11, 245, 19, 10, 11, 245, 18, 10, 11, 245, 17, 10, 11, 245, + 16, 10, 11, 245, 15, 10, 11, 245, 14, 10, 11, 245, 13, 10, 11, 245, 12, + 10, 11, 245, 11, 10, 11, 245, 10, 10, 11, 245, 9, 10, 11, 245, 8, 10, 11, + 245, 7, 10, 11, 245, 6, 10, 11, 245, 5, 10, 11, 245, 4, 10, 11, 245, 3, + 10, 11, 243, 223, 10, 11, 243, 222, 10, 11, 243, 221, 10, 11, 243, 220, + 10, 11, 243, 219, 10, 11, 243, 218, 10, 11, 243, 217, 10, 11, 243, 216, + 10, 11, 243, 215, 10, 11, 242, 91, 10, 11, 242, 90, 10, 11, 242, 89, 10, + 11, 242, 88, 10, 11, 242, 87, 10, 11, 242, 86, 10, 11, 242, 85, 10, 11, + 242, 84, 10, 11, 242, 83, 10, 11, 242, 82, 10, 11, 242, 81, 10, 11, 242, + 80, 10, 11, 242, 79, 10, 11, 242, 78, 10, 11, 242, 77, 10, 11, 242, 76, + 10, 11, 242, 75, 10, 11, 242, 74, 10, 11, 242, 73, 10, 11, 237, 16, 10, + 11, 237, 15, 10, 11, 237, 14, 10, 11, 237, 13, 10, 11, 237, 12, 10, 11, + 237, 11, 10, 11, 237, 10, 10, 11, 237, 9, 10, 11, 235, 199, 10, 11, 235, + 198, 10, 11, 235, 197, 10, 11, 235, 196, 10, 11, 235, 195, 10, 11, 235, + 194, 10, 11, 235, 193, 10, 11, 235, 192, 10, 11, 235, 191, 10, 11, 235, + 190, 10, 11, 234, 186, 10, 11, 234, 185, 10, 11, 234, 184, 10, 11, 234, + 183, 10, 11, 234, 182, 10, 11, 234, 181, 10, 11, 234, 180, 10, 11, 234, + 179, 10, 11, 234, 178, 10, 11, 234, 177, 10, 11, 234, 176, 10, 11, 234, + 175, 10, 11, 234, 174, 10, 11, 234, 173, 10, 11, 234, 172, 10, 11, 234, + 171, 10, 11, 234, 170, 10, 11, 234, 169, 10, 11, 234, 168, 10, 11, 234, + 167, 10, 11, 234, 166, 10, 11, 234, 165, 10, 11, 234, 164, 10, 11, 234, + 163, 10, 11, 234, 162, 10, 11, 234, 161, 10, 11, 234, 160, 10, 11, 234, + 159, 10, 11, 234, 158, 10, 11, 234, 157, 10, 11, 234, 156, 10, 11, 234, + 155, 10, 11, 234, 154, 10, 11, 234, 153, 10, 11, 234, 152, 10, 11, 234, + 151, 10, 11, 234, 150, 10, 11, 234, 149, 10, 11, 234, 148, 10, 11, 234, + 147, 10, 11, 234, 146, 10, 11, 234, 145, 10, 11, 234, 144, 10, 11, 234, + 143, 10, 11, 234, 142, 10, 11, 234, 141, 10, 11, 234, 140, 10, 11, 234, + 139, 10, 11, 234, 138, 10, 11, 234, 137, 10, 11, 234, 136, 10, 11, 234, + 135, 10, 11, 234, 134, 10, 11, 234, 133, 10, 11, 234, 132, 10, 11, 234, + 131, 10, 11, 234, 130, 10, 11, 234, 129, 10, 11, 234, 128, 10, 11, 234, + 127, 10, 11, 234, 126, 10, 11, 234, 125, 10, 11, 234, 124, 10, 11, 234, + 123, 10, 11, 234, 122, 10, 11, 234, 121, 10, 11, 233, 31, 10, 11, 233, + 30, 10, 11, 233, 29, 10, 11, 233, 28, 10, 11, 233, 27, 10, 11, 233, 26, + 10, 11, 233, 25, 10, 11, 233, 24, 10, 11, 233, 23, 10, 11, 233, 22, 10, + 11, 233, 21, 10, 11, 233, 20, 10, 11, 233, 19, 10, 11, 233, 18, 10, 11, + 233, 17, 10, 11, 233, 16, 10, 11, 233, 15, 10, 11, 233, 14, 10, 11, 233, + 13, 10, 11, 233, 12, 10, 11, 233, 11, 10, 11, 233, 10, 10, 11, 233, 9, + 10, 11, 233, 8, 10, 11, 233, 7, 10, 11, 233, 6, 10, 11, 233, 5, 10, 11, + 233, 4, 10, 11, 233, 3, 10, 11, 233, 2, 10, 11, 233, 1, 10, 11, 233, 0, + 10, 11, 232, 255, 10, 11, 232, 254, 10, 11, 232, 253, 10, 11, 232, 252, + 10, 11, 232, 251, 10, 11, 232, 250, 10, 11, 232, 249, 10, 11, 232, 248, + 10, 11, 232, 247, 10, 11, 232, 246, 10, 11, 232, 245, 10, 11, 232, 244, + 10, 11, 232, 243, 10, 11, 232, 242, 10, 11, 232, 241, 10, 11, 232, 240, + 10, 11, 232, 239, 10, 11, 231, 241, 10, 11, 231, 240, 10, 11, 231, 239, + 10, 11, 231, 238, 10, 11, 231, 237, 10, 11, 231, 236, 10, 11, 231, 235, + 10, 11, 231, 234, 10, 11, 231, 233, 10, 11, 231, 232, 10, 11, 231, 231, + 10, 11, 231, 230, 10, 11, 231, 229, 10, 11, 231, 228, 10, 11, 231, 227, + 10, 11, 231, 226, 10, 11, 231, 225, 10, 11, 231, 224, 10, 11, 231, 223, + 10, 11, 231, 222, 10, 11, 231, 221, 10, 11, 231, 220, 10, 11, 231, 143, + 10, 11, 231, 142, 10, 11, 231, 141, 10, 11, 231, 140, 10, 11, 231, 139, + 10, 11, 231, 138, 10, 11, 231, 137, 10, 11, 231, 136, 10, 11, 231, 135, + 10, 11, 231, 134, 10, 11, 231, 133, 10, 11, 231, 132, 10, 11, 231, 131, + 10, 11, 231, 130, 10, 11, 231, 129, 10, 11, 231, 128, 10, 11, 231, 127, + 10, 11, 231, 126, 10, 11, 231, 125, 10, 11, 231, 124, 10, 11, 231, 123, + 10, 11, 231, 122, 10, 11, 231, 121, 10, 11, 231, 120, 10, 11, 231, 119, + 10, 11, 231, 118, 10, 11, 231, 5, 10, 11, 231, 4, 10, 11, 231, 3, 10, 11, + 231, 2, 10, 11, 231, 1, 10, 11, 231, 0, 10, 11, 230, 255, 10, 11, 230, + 254, 10, 11, 230, 253, 10, 11, 230, 252, 10, 11, 230, 251, 10, 11, 230, + 250, 10, 11, 230, 249, 10, 11, 230, 248, 10, 11, 230, 247, 10, 11, 230, + 246, 10, 11, 230, 245, 10, 11, 230, 244, 10, 11, 230, 243, 10, 11, 230, + 242, 10, 11, 230, 241, 10, 11, 230, 240, 10, 11, 230, 239, 10, 11, 230, + 238, 10, 11, 230, 237, 10, 11, 230, 236, 10, 11, 230, 235, 10, 11, 230, + 234, 10, 11, 230, 233, 10, 11, 230, 232, 10, 11, 230, 231, 10, 11, 230, + 230, 10, 11, 230, 229, 10, 11, 230, 228, 10, 11, 230, 227, 10, 11, 230, + 226, 10, 11, 230, 225, 10, 11, 230, 224, 10, 11, 230, 223, 10, 11, 230, + 222, 10, 11, 230, 221, 10, 11, 230, 220, 10, 11, 230, 219, 10, 11, 230, + 218, 10, 11, 230, 217, 10, 11, 230, 216, 10, 11, 230, 215, 10, 11, 230, + 214, 10, 11, 230, 213, 10, 11, 230, 212, 10, 11, 230, 211, 10, 11, 230, + 210, 10, 11, 230, 209, 10, 11, 230, 208, 10, 11, 230, 207, 10, 11, 230, + 206, 10, 11, 230, 205, 10, 11, 230, 204, 10, 11, 230, 203, 10, 11, 230, + 202, 10, 11, 230, 201, 10, 11, 230, 200, 10, 11, 230, 199, 10, 11, 230, + 198, 10, 11, 230, 197, 10, 11, 230, 196, 10, 11, 230, 195, 10, 11, 230, + 194, 10, 11, 230, 193, 10, 11, 230, 192, 10, 11, 230, 191, 10, 11, 230, + 190, 10, 11, 230, 189, 10, 11, 230, 188, 10, 11, 230, 187, 10, 11, 230, + 58, 10, 11, 230, 57, 10, 11, 230, 56, 10, 11, 230, 55, 10, 11, 230, 54, + 10, 11, 230, 53, 10, 11, 230, 52, 10, 11, 230, 51, 10, 11, 230, 50, 10, + 11, 230, 49, 10, 11, 230, 48, 10, 11, 230, 47, 10, 11, 230, 46, 10, 11, + 228, 162, 10, 11, 228, 161, 10, 11, 228, 160, 10, 11, 228, 159, 10, 11, + 228, 158, 10, 11, 228, 157, 10, 11, 228, 156, 10, 11, 228, 37, 10, 11, + 228, 36, 10, 11, 228, 35, 10, 11, 228, 34, 10, 11, 228, 33, 10, 11, 228, + 32, 10, 11, 228, 31, 10, 11, 228, 30, 10, 11, 228, 29, 10, 11, 228, 28, + 10, 11, 228, 27, 10, 11, 228, 26, 10, 11, 228, 25, 10, 11, 228, 24, 10, + 11, 228, 23, 10, 11, 228, 22, 10, 11, 228, 21, 10, 11, 228, 20, 10, 11, + 228, 19, 10, 11, 228, 18, 10, 11, 228, 17, 10, 11, 228, 16, 10, 11, 228, + 15, 10, 11, 228, 14, 10, 11, 228, 13, 10, 11, 228, 12, 10, 11, 228, 11, + 10, 11, 228, 10, 10, 11, 228, 9, 10, 11, 228, 8, 10, 11, 228, 7, 10, 11, + 228, 6, 10, 11, 228, 5, 10, 11, 228, 4, 10, 11, 226, 232, 10, 11, 226, + 231, 10, 11, 226, 230, 10, 11, 226, 229, 10, 11, 226, 228, 10, 11, 226, + 227, 10, 11, 226, 226, 10, 11, 226, 225, 10, 11, 226, 224, 10, 11, 226, + 223, 10, 11, 226, 222, 10, 11, 226, 221, 10, 11, 226, 220, 10, 11, 226, + 219, 10, 11, 226, 218, 10, 11, 226, 217, 10, 11, 226, 216, 10, 11, 226, + 215, 10, 11, 226, 214, 10, 11, 226, 213, 10, 11, 226, 212, 10, 11, 226, + 211, 10, 11, 226, 210, 10, 11, 226, 209, 10, 11, 226, 208, 10, 11, 226, + 207, 10, 11, 226, 206, 10, 11, 226, 205, 10, 11, 226, 204, 10, 11, 226, + 203, 10, 11, 226, 202, 10, 11, 226, 201, 10, 11, 226, 200, 10, 11, 226, + 199, 10, 11, 226, 198, 10, 11, 226, 197, 10, 11, 226, 196, 10, 11, 226, + 195, 10, 11, 226, 194, 10, 11, 226, 193, 10, 11, 226, 192, 10, 11, 226, + 191, 10, 11, 226, 190, 10, 11, 226, 189, 10, 11, 226, 188, 10, 11, 226, + 187, 10, 11, 226, 186, 10, 11, 226, 185, 10, 11, 226, 184, 10, 11, 226, + 183, 10, 11, 226, 182, 10, 11, 226, 181, 10, 11, 226, 180, 10, 11, 226, + 179, 10, 11, 222, 200, 10, 11, 222, 199, 10, 11, 222, 198, 10, 11, 222, + 197, 10, 11, 222, 196, 10, 11, 222, 195, 10, 11, 222, 194, 10, 11, 222, + 193, 10, 11, 222, 192, 10, 11, 222, 191, 10, 11, 222, 190, 10, 11, 222, + 189, 10, 11, 222, 188, 10, 11, 222, 187, 10, 11, 222, 186, 10, 11, 222, + 185, 10, 11, 222, 184, 10, 11, 222, 183, 10, 11, 222, 182, 10, 11, 222, + 181, 10, 11, 222, 180, 10, 11, 222, 179, 10, 11, 222, 178, 10, 11, 222, + 177, 10, 11, 222, 176, 10, 11, 222, 175, 10, 11, 222, 174, 10, 11, 222, + 173, 10, 11, 222, 172, 10, 11, 222, 171, 10, 11, 222, 170, 10, 11, 222, + 169, 10, 11, 222, 168, 10, 11, 222, 167, 10, 11, 222, 166, 10, 11, 222, + 165, 10, 11, 222, 164, 10, 11, 222, 163, 10, 11, 222, 162, 10, 11, 222, + 161, 10, 11, 222, 160, 10, 11, 222, 159, 10, 11, 222, 158, 10, 11, 222, + 157, 10, 11, 220, 172, 10, 11, 220, 171, 10, 11, 220, 170, 10, 11, 220, + 169, 10, 11, 220, 168, 10, 11, 220, 167, 10, 11, 220, 166, 10, 11, 220, + 165, 10, 11, 220, 164, 10, 11, 220, 163, 10, 11, 220, 162, 10, 11, 220, + 161, 10, 11, 220, 160, 10, 11, 220, 159, 10, 11, 220, 158, 10, 11, 220, + 157, 10, 11, 220, 156, 10, 11, 220, 155, 10, 11, 220, 154, 10, 11, 220, + 153, 10, 11, 220, 152, 10, 11, 220, 151, 10, 11, 220, 150, 10, 11, 220, + 149, 10, 11, 220, 148, 10, 11, 220, 147, 10, 11, 220, 146, 10, 11, 220, + 145, 10, 11, 220, 144, 10, 11, 220, 143, 10, 11, 220, 142, 10, 11, 220, + 141, 10, 11, 220, 140, 10, 11, 220, 139, 10, 11, 220, 138, 10, 11, 220, + 137, 10, 11, 220, 136, 10, 11, 220, 135, 10, 11, 220, 134, 10, 11, 220, + 133, 10, 11, 220, 132, 10, 11, 220, 131, 10, 11, 220, 130, 10, 11, 220, + 129, 10, 11, 220, 128, 10, 11, 220, 127, 10, 11, 220, 126, 10, 11, 220, + 10, 10, 11, 220, 9, 10, 11, 220, 8, 10, 11, 220, 7, 10, 11, 220, 6, 10, + 11, 220, 5, 10, 11, 220, 4, 10, 11, 220, 3, 10, 11, 220, 2, 10, 11, 220, + 1, 10, 11, 220, 0, 10, 11, 219, 255, 10, 11, 219, 254, 10, 11, 219, 253, + 10, 11, 219, 252, 10, 11, 219, 251, 10, 11, 219, 250, 10, 11, 219, 249, + 10, 11, 219, 248, 10, 11, 219, 247, 10, 11, 219, 246, 10, 11, 219, 245, + 10, 11, 219, 244, 10, 11, 219, 243, 10, 11, 219, 242, 10, 11, 219, 241, + 10, 11, 219, 240, 10, 11, 219, 239, 10, 11, 219, 238, 10, 11, 219, 237, + 10, 11, 219, 236, 10, 11, 219, 235, 10, 11, 219, 234, 10, 11, 219, 233, + 10, 11, 219, 232, 10, 11, 219, 231, 10, 11, 219, 230, 10, 11, 219, 229, + 10, 11, 219, 228, 10, 11, 219, 227, 10, 11, 219, 226, 10, 11, 219, 225, + 10, 11, 219, 224, 10, 11, 219, 223, 10, 11, 219, 222, 10, 11, 219, 221, + 10, 11, 219, 220, 10, 11, 219, 219, 10, 11, 219, 218, 10, 11, 219, 217, + 10, 11, 219, 216, 10, 11, 219, 215, 10, 11, 219, 214, 10, 11, 219, 213, + 10, 11, 219, 212, 10, 11, 219, 211, 10, 11, 219, 210, 10, 11, 219, 209, + 10, 11, 219, 208, 10, 11, 219, 207, 10, 11, 219, 206, 10, 11, 219, 205, + 10, 11, 219, 204, 10, 11, 219, 203, 10, 11, 219, 202, 10, 11, 219, 201, + 10, 11, 219, 200, 10, 11, 219, 199, 10, 11, 219, 198, 10, 11, 219, 197, + 10, 11, 219, 196, 10, 11, 219, 195, 10, 11, 219, 194, 10, 11, 219, 193, + 10, 11, 219, 192, 10, 11, 219, 191, 10, 11, 219, 190, 10, 11, 219, 39, + 10, 11, 219, 38, 10, 11, 219, 37, 10, 11, 219, 36, 10, 11, 219, 35, 10, + 11, 219, 34, 10, 11, 219, 33, 10, 11, 219, 32, 10, 11, 219, 31, 10, 11, + 219, 30, 10, 11, 219, 29, 10, 11, 219, 28, 10, 11, 219, 27, 10, 11, 219, + 26, 10, 11, 219, 25, 10, 11, 219, 24, 10, 11, 219, 23, 10, 11, 219, 22, + 10, 11, 219, 21, 10, 11, 219, 20, 10, 11, 219, 19, 10, 11, 219, 18, 10, + 11, 219, 17, 10, 11, 219, 16, 10, 11, 219, 15, 10, 11, 219, 14, 10, 11, + 219, 13, 10, 11, 219, 12, 10, 11, 219, 11, 10, 11, 219, 10, 10, 11, 219, + 9, 10, 11, 219, 8, 10, 11, 218, 150, 10, 11, 218, 149, 10, 11, 218, 148, + 10, 11, 218, 147, 10, 11, 218, 146, 10, 11, 218, 145, 10, 11, 218, 144, + 10, 11, 218, 143, 10, 11, 218, 142, 10, 11, 218, 141, 10, 11, 218, 140, + 10, 11, 218, 139, 10, 11, 218, 88, 10, 11, 218, 87, 10, 11, 218, 86, 10, + 11, 218, 85, 10, 11, 218, 84, 10, 11, 218, 83, 10, 11, 218, 82, 10, 11, + 218, 81, 10, 11, 218, 80, 10, 11, 217, 156, 10, 11, 217, 155, 10, 11, + 217, 154, 10, 11, 217, 153, 10, 11, 217, 152, 10, 11, 217, 151, 10, 11, + 217, 150, 10, 11, 217, 149, 10, 11, 217, 148, 10, 11, 217, 147, 10, 11, + 217, 146, 10, 11, 217, 145, 10, 11, 217, 144, 10, 11, 217, 143, 10, 11, + 217, 142, 10, 11, 217, 141, 10, 11, 217, 140, 10, 11, 217, 139, 10, 11, + 217, 138, 10, 11, 217, 137, 10, 11, 217, 136, 10, 11, 217, 135, 10, 11, + 217, 134, 10, 11, 217, 133, 10, 11, 217, 132, 10, 11, 217, 131, 10, 11, + 217, 130, 10, 11, 217, 129, 10, 11, 217, 128, 10, 11, 217, 127, 10, 11, + 217, 126, 10, 11, 217, 125, 10, 11, 217, 124, 10, 11, 217, 123, 10, 11, + 217, 122, 10, 11, 217, 121, 10, 11, 217, 120, 10, 11, 217, 119, 10, 11, + 217, 118, 10, 11, 217, 117, 10, 11, 217, 116, 10, 11, 255, 57, 10, 11, + 255, 56, 10, 11, 255, 55, 10, 11, 255, 54, 10, 11, 255, 53, 10, 11, 255, + 52, 10, 11, 255, 51, 10, 11, 255, 50, 10, 11, 255, 49, 10, 11, 255, 48, + 10, 11, 255, 47, 10, 11, 255, 46, 10, 11, 255, 45, 10, 11, 255, 44, 10, + 11, 255, 43, 10, 11, 255, 42, 10, 11, 255, 41, 10, 11, 255, 40, 10, 11, + 255, 39, 10, 11, 255, 38, 10, 11, 255, 37, 10, 11, 255, 36, 10, 11, 255, + 35, 10, 11, 255, 34, 10, 11, 255, 33, 10, 11, 255, 32, 10, 11, 255, 31, + 10, 11, 255, 30, 10, 11, 255, 29, 10, 11, 255, 28, 10, 11, 255, 27, 10, + 11, 255, 26, 10, 11, 255, 25, 10, 11, 255, 24, 46, 26, 16, 228, 206, 46, + 26, 16, 249, 148, 46, 26, 16, 229, 163, 46, 26, 16, 230, 67, 246, 221, + 46, 26, 16, 230, 67, 248, 214, 46, 26, 16, 219, 181, 246, 221, 46, 26, + 16, 219, 181, 248, 214, 46, 26, 16, 236, 198, 46, 26, 16, 222, 217, 46, + 26, 16, 229, 235, 46, 26, 16, 217, 205, 46, 26, 16, 217, 206, 248, 214, + 46, 26, 16, 236, 12, 46, 26, 16, 254, 89, 246, 221, 46, 26, 16, 246, 90, + 246, 221, 46, 26, 16, 222, 73, 46, 26, 16, 236, 164, 46, 26, 16, 254, 80, + 46, 26, 16, 254, 81, 248, 214, 46, 26, 16, 222, 222, 46, 26, 16, 221, + 242, 46, 26, 16, 230, 148, 254, 47, 46, 26, 16, 244, 56, 254, 47, 46, 26, + 16, 228, 205, 46, 26, 16, 251, 62, 46, 26, 16, 219, 171, 46, 26, 16, 237, + 144, 254, 47, 46, 26, 16, 236, 166, 254, 47, 46, 26, 16, 236, 165, 254, + 47, 46, 26, 16, 226, 119, 46, 26, 16, 229, 226, 46, 26, 16, 223, 151, + 254, 83, 46, 26, 16, 230, 66, 254, 47, 46, 26, 16, 219, 180, 254, 47, 46, + 26, 16, 254, 84, 254, 47, 46, 26, 16, 254, 78, 46, 26, 16, 236, 65, 46, + 26, 16, 227, 157, 46, 26, 16, 229, 106, 254, 47, 46, 26, 16, 221, 175, + 46, 26, 16, 254, 129, 46, 26, 16, 226, 75, 46, 26, 16, 222, 225, 254, 47, + 46, 26, 16, 222, 225, 233, 239, 223, 149, 46, 26, 16, 230, 61, 254, 47, + 46, 26, 16, 222, 17, 46, 26, 16, 235, 97, 46, 26, 16, 247, 77, 46, 26, + 16, 221, 92, 46, 26, 16, 222, 52, 46, 26, 16, 236, 15, 46, 26, 16, 254, + 89, 246, 90, 232, 131, 46, 26, 16, 245, 93, 254, 47, 46, 26, 16, 237, + 234, 46, 26, 16, 221, 68, 254, 47, 46, 26, 16, 236, 201, 221, 67, 46, 26, + 16, 229, 182, 46, 26, 16, 228, 209, 46, 26, 16, 236, 42, 46, 26, 16, 251, + 6, 254, 47, 46, 26, 16, 227, 232, 46, 26, 16, 229, 238, 254, 47, 46, 26, + 16, 229, 236, 254, 47, 46, 26, 16, 242, 63, 46, 26, 16, 232, 217, 46, 26, + 16, 229, 148, 46, 26, 16, 236, 43, 254, 152, 46, 26, 16, 221, 68, 254, + 152, 46, 26, 16, 223, 132, 46, 26, 16, 244, 25, 46, 26, 16, 237, 144, + 232, 131, 46, 26, 16, 230, 148, 232, 131, 46, 26, 16, 230, 67, 232, 131, + 46, 26, 16, 229, 147, 46, 26, 16, 236, 29, 46, 26, 16, 229, 146, 46, 26, + 16, 236, 14, 46, 26, 16, 229, 183, 232, 131, 46, 26, 16, 236, 165, 232, + 132, 254, 109, 46, 26, 16, 236, 166, 232, 132, 254, 109, 46, 26, 16, 217, + 203, 46, 26, 16, 254, 81, 232, 131, 46, 26, 16, 254, 82, 222, 223, 232, + 131, 46, 26, 16, 217, 204, 46, 26, 16, 236, 13, 46, 26, 16, 246, 216, 46, + 26, 16, 251, 63, 46, 26, 16, 233, 168, 237, 143, 46, 26, 16, 219, 181, + 232, 131, 46, 26, 16, 229, 106, 232, 131, 46, 26, 16, 228, 210, 232, 131, + 46, 26, 16, 230, 145, 46, 26, 16, 254, 100, 46, 26, 16, 234, 195, 46, 26, + 16, 229, 236, 232, 131, 46, 26, 16, 229, 238, 232, 131, 46, 26, 16, 246, + 119, 229, 237, 46, 26, 16, 235, 206, 46, 26, 16, 254, 101, 46, 26, 16, + 221, 68, 232, 131, 46, 26, 16, 246, 219, 46, 26, 16, 222, 225, 232, 131, + 46, 26, 16, 222, 218, 46, 26, 16, 251, 6, 232, 131, 46, 26, 16, 246, 161, + 46, 26, 16, 226, 76, 232, 131, 46, 26, 16, 218, 124, 236, 65, 46, 26, 16, + 221, 65, 46, 26, 16, 228, 211, 46, 26, 16, 221, 69, 46, 26, 16, 221, 66, + 46, 26, 16, 228, 208, 46, 26, 16, 221, 64, 46, 26, 16, 228, 207, 46, 26, + 16, 244, 55, 46, 26, 16, 254, 41, 46, 26, 16, 246, 119, 254, 41, 46, 26, + 16, 230, 61, 232, 131, 46, 26, 16, 222, 16, 246, 127, 46, 26, 16, 222, + 16, 246, 89, 46, 26, 16, 222, 18, 254, 85, 46, 26, 16, 222, 11, 236, 244, + 254, 77, 46, 26, 16, 236, 200, 46, 26, 16, 246, 186, 46, 26, 16, 217, + 253, 236, 197, 46, 26, 16, 217, 253, 254, 109, 46, 26, 16, 223, 150, 46, + 26, 16, 236, 66, 254, 109, 46, 26, 16, 248, 215, 254, 47, 46, 26, 16, + 236, 16, 254, 47, 46, 26, 16, 236, 16, 254, 152, 46, 26, 16, 236, 16, + 232, 131, 46, 26, 16, 254, 84, 232, 131, 46, 26, 16, 254, 86, 46, 26, 16, + 248, 214, 46, 26, 16, 221, 77, 46, 26, 16, 222, 44, 46, 26, 16, 236, 33, + 46, 26, 16, 235, 102, 246, 182, 250, 255, 46, 26, 16, 235, 102, 247, 78, + 251, 0, 46, 26, 16, 235, 102, 221, 79, 251, 0, 46, 26, 16, 235, 102, 222, + 54, 251, 0, 46, 26, 16, 235, 102, 237, 229, 250, 255, 46, 26, 16, 244, + 56, 232, 132, 254, 109, 46, 26, 16, 244, 56, 229, 227, 254, 37, 46, 26, + 16, 244, 56, 229, 227, 249, 40, 46, 26, 16, 248, 238, 46, 26, 16, 248, + 239, 229, 227, 254, 38, 236, 197, 46, 26, 16, 248, 239, 229, 227, 254, + 38, 254, 109, 46, 26, 16, 248, 239, 229, 227, 249, 40, 46, 26, 16, 221, + 83, 46, 26, 16, 254, 42, 46, 26, 16, 237, 236, 46, 26, 16, 249, 3, 46, + 26, 16, 254, 204, 229, 23, 254, 43, 46, 26, 16, 254, 204, 254, 40, 46, + 26, 16, 254, 204, 254, 43, 46, 26, 16, 254, 204, 233, 234, 46, 26, 16, + 254, 204, 233, 242, 46, 26, 16, 254, 204, 244, 57, 46, 26, 16, 254, 204, + 244, 54, 46, 26, 16, 254, 204, 229, 23, 244, 57, 46, 26, 16, 234, 60, + 228, 216, 242, 61, 46, 26, 16, 234, 60, 254, 154, 228, 216, 242, 61, 46, + 26, 16, 234, 60, 249, 39, 242, 61, 46, 26, 16, 234, 60, 254, 154, 249, + 39, 242, 61, 46, 26, 16, 234, 60, 221, 72, 242, 61, 46, 26, 16, 234, 60, + 221, 84, 46, 26, 16, 234, 60, 222, 48, 242, 61, 46, 26, 16, 234, 60, 222, + 48, 235, 105, 242, 61, 46, 26, 16, 234, 60, 235, 105, 242, 61, 46, 26, + 16, 234, 60, 229, 55, 242, 61, 46, 26, 16, 237, 149, 222, 69, 242, 62, + 46, 26, 16, 254, 82, 222, 69, 242, 62, 46, 26, 16, 245, 244, 222, 45, 46, + 26, 16, 245, 244, 233, 126, 46, 26, 16, 245, 244, 248, 243, 46, 26, 16, + 234, 60, 219, 175, 242, 61, 46, 26, 16, 234, 60, 228, 215, 242, 61, 46, + 26, 16, 234, 60, 229, 55, 222, 48, 242, 61, 46, 26, 16, 244, 52, 233, 34, + 254, 85, 46, 26, 16, 244, 52, 233, 34, 248, 213, 46, 26, 16, 246, 195, + 236, 244, 245, 93, 219, 61, 46, 26, 16, 237, 235, 46, 26, 16, 237, 233, + 46, 26, 16, 245, 93, 254, 48, 249, 38, 242, 60, 46, 26, 16, 245, 93, 249, + 1, 187, 46, 26, 16, 245, 93, 249, 1, 232, 217, 46, 26, 16, 245, 93, 232, + 213, 242, 61, 46, 26, 16, 245, 93, 249, 1, 249, 15, 46, 26, 16, 245, 93, + 224, 61, 249, 0, 249, 15, 46, 26, 16, 245, 93, 249, 1, 236, 184, 46, 26, + 16, 245, 93, 249, 1, 217, 21, 46, 26, 16, 245, 93, 249, 1, 232, 63, 236, + 197, 46, 26, 16, 245, 93, 249, 1, 232, 63, 254, 109, 46, 26, 16, 245, 93, + 234, 91, 251, 1, 248, 243, 46, 26, 16, 245, 93, 234, 91, 251, 1, 233, + 126, 46, 26, 16, 245, 204, 224, 61, 251, 1, 219, 174, 46, 26, 16, 245, + 93, 224, 61, 251, 1, 222, 226, 46, 26, 16, 245, 93, 232, 133, 46, 26, 16, + 251, 2, 216, 253, 46, 26, 16, 251, 2, 236, 64, 46, 26, 16, 251, 2, 223, + 250, 46, 26, 16, 245, 93, 242, 107, 217, 252, 222, 49, 46, 26, 16, 245, + 93, 246, 196, 254, 102, 46, 26, 16, 217, 252, 221, 73, 46, 26, 16, 248, + 251, 221, 73, 46, 26, 16, 248, 251, 222, 49, 46, 26, 16, 248, 251, 254, + 87, 247, 78, 248, 161, 46, 26, 16, 248, 251, 233, 124, 222, 53, 248, 161, + 46, 26, 16, 248, 251, 248, 235, 246, 99, 248, 161, 46, 26, 16, 248, 251, + 221, 81, 230, 152, 248, 161, 46, 26, 16, 217, 252, 254, 87, 247, 78, 248, + 161, 46, 26, 16, 217, 252, 233, 124, 222, 53, 248, 161, 46, 26, 16, 217, + 252, 248, 235, 246, 99, 248, 161, 46, 26, 16, 217, 252, 221, 81, 230, + 152, 248, 161, 46, 26, 16, 244, 179, 248, 250, 46, 26, 16, 244, 179, 217, + 251, 46, 26, 16, 249, 2, 254, 87, 233, 169, 46, 26, 16, 249, 2, 254, 87, + 234, 8, 46, 26, 16, 249, 2, 248, 214, 46, 26, 16, 249, 2, 222, 9, 46, 26, + 16, 224, 117, 222, 9, 46, 26, 16, 224, 117, 222, 10, 248, 201, 46, 26, + 16, 224, 117, 222, 10, 221, 74, 46, 26, 16, 224, 117, 222, 10, 222, 42, + 46, 26, 16, 224, 117, 254, 17, 46, 26, 16, 224, 117, 254, 18, 248, 201, + 46, 26, 16, 224, 117, 254, 18, 221, 74, 46, 26, 16, 224, 117, 254, 18, + 222, 42, 46, 26, 16, 248, 236, 244, 161, 46, 26, 16, 248, 242, 230, 86, + 46, 26, 16, 223, 144, 46, 26, 16, 254, 34, 187, 46, 26, 16, 254, 34, 219, + 61, 46, 26, 16, 254, 34, 245, 0, 46, 26, 16, 254, 34, 249, 15, 46, 26, + 16, 254, 34, 236, 184, 46, 26, 16, 254, 34, 217, 21, 46, 26, 16, 254, 34, + 232, 62, 46, 26, 16, 236, 165, 232, 132, 233, 241, 46, 26, 16, 236, 166, + 232, 132, 233, 241, 46, 26, 16, 236, 165, 232, 132, 236, 197, 46, 26, 16, + 236, 166, 232, 132, 236, 197, 46, 26, 16, 236, 66, 236, 197, 46, 26, 16, + 244, 56, 232, 132, 236, 197, 26, 16, 224, 109, 252, 197, 26, 16, 51, 252, + 197, 26, 16, 39, 252, 197, 26, 16, 227, 160, 39, 252, 197, 26, 16, 249, + 145, 252, 197, 26, 16, 224, 192, 252, 197, 26, 16, 42, 227, 182, 55, 26, + 16, 45, 227, 182, 55, 26, 16, 227, 182, 248, 143, 26, 16, 249, 184, 226, + 79, 26, 16, 249, 208, 251, 141, 26, 16, 226, 79, 26, 16, 250, 180, 26, + 16, 227, 180, 245, 193, 26, 16, 227, 180, 245, 192, 26, 16, 227, 180, + 245, 191, 26, 16, 245, 210, 26, 16, 245, 211, 56, 26, 16, 252, 10, 78, + 26, 16, 251, 163, 26, 16, 252, 19, 26, 16, 115, 26, 16, 230, 136, 223, + 163, 26, 16, 220, 205, 223, 163, 26, 16, 221, 227, 223, 163, 26, 16, 245, + 115, 223, 163, 26, 16, 245, 169, 223, 163, 26, 16, 224, 81, 223, 163, 26, + 16, 224, 79, 245, 101, 26, 16, 245, 113, 245, 101, 26, 16, 245, 68, 250, + 207, 26, 16, 245, 68, 250, 208, 230, 88, 254, 145, 26, 16, 245, 68, 250, + 208, 230, 88, 252, 185, 26, 16, 251, 203, 250, 207, 26, 16, 246, 75, 250, + 207, 26, 16, 246, 75, 250, 208, 230, 88, 254, 145, 26, 16, 246, 75, 250, + 208, 230, 88, 252, 185, 26, 16, 247, 116, 250, 206, 26, 16, 247, 116, + 250, 205, 26, 16, 233, 85, 234, 24, 227, 168, 26, 16, 51, 225, 0, 26, 16, + 51, 245, 156, 26, 16, 245, 157, 220, 63, 26, 16, 245, 157, 247, 132, 26, + 16, 232, 205, 220, 63, 26, 16, 232, 205, 247, 132, 26, 16, 225, 1, 220, + 63, 26, 16, 225, 1, 247, 132, 26, 16, 228, 90, 145, 225, 0, 26, 16, 228, + 90, 145, 245, 156, 26, 16, 250, 166, 221, 177, 26, 16, 250, 69, 221, 177, + 26, 16, 230, 88, 254, 145, 26, 16, 230, 88, 252, 185, 26, 16, 228, 74, + 254, 145, 26, 16, 228, 74, 252, 185, 26, 16, 233, 88, 227, 168, 26, 16, + 218, 205, 227, 168, 26, 16, 144, 227, 168, 26, 16, 228, 90, 227, 168, 26, + 16, 246, 232, 227, 168, 26, 16, 224, 76, 227, 168, 26, 16, 221, 243, 227, + 168, 26, 16, 224, 68, 227, 168, 26, 16, 131, 242, 162, 220, 217, 227, + 168, 26, 16, 218, 152, 231, 178, 26, 16, 88, 231, 178, 26, 16, 250, 222, + 218, 152, 231, 178, 26, 16, 40, 231, 179, 218, 207, 26, 16, 40, 231, 179, + 252, 53, 26, 16, 221, 91, 231, 179, 108, 218, 207, 26, 16, 221, 91, 231, + 179, 108, 252, 53, 26, 16, 221, 91, 231, 179, 42, 218, 207, 26, 16, 221, + 91, 231, 179, 42, 252, 53, 26, 16, 221, 91, 231, 179, 45, 218, 207, 26, + 16, 221, 91, 231, 179, 45, 252, 53, 26, 16, 221, 91, 231, 179, 113, 218, + 207, 26, 16, 221, 91, 231, 179, 113, 252, 53, 26, 16, 221, 91, 231, 179, + 108, 45, 218, 207, 26, 16, 221, 91, 231, 179, 108, 45, 252, 53, 26, 16, + 233, 118, 231, 179, 218, 207, 26, 16, 233, 118, 231, 179, 252, 53, 26, + 16, 221, 88, 231, 179, 113, 218, 207, 26, 16, 221, 88, 231, 179, 113, + 252, 53, 26, 16, 229, 230, 231, 178, 26, 16, 219, 67, 231, 178, 26, 16, + 231, 179, 252, 53, 26, 16, 231, 111, 231, 178, 26, 16, 250, 185, 231, + 179, 218, 207, 26, 16, 250, 185, 231, 179, 252, 53, 26, 16, 252, 8, 26, + 16, 218, 205, 231, 180, 26, 16, 144, 231, 180, 26, 16, 228, 90, 231, 180, + 26, 16, 246, 232, 231, 180, 26, 16, 224, 76, 231, 180, 26, 16, 221, 243, + 231, 180, 26, 16, 224, 68, 231, 180, 26, 16, 131, 242, 162, 220, 217, + 231, 180, 26, 16, 36, 223, 146, 26, 16, 36, 223, 233, 223, 146, 26, 16, + 36, 221, 97, 26, 16, 36, 221, 96, 26, 16, 36, 221, 95, 26, 16, 245, 183, + 221, 97, 26, 16, 245, 183, 221, 96, 26, 16, 245, 183, 221, 95, 26, 16, + 36, 253, 230, 248, 145, 26, 16, 36, 245, 162, 26, 16, 36, 245, 161, 26, + 16, 36, 245, 160, 26, 16, 36, 245, 159, 26, 16, 36, 245, 158, 26, 16, + 252, 131, 252, 143, 26, 16, 246, 190, 252, 143, 26, 16, 252, 131, 221, + 200, 26, 16, 246, 190, 221, 200, 26, 16, 252, 131, 224, 44, 26, 16, 246, + 190, 224, 44, 26, 16, 252, 131, 229, 115, 26, 16, 246, 190, 229, 115, 26, + 16, 36, 255, 0, 26, 16, 36, 223, 165, 26, 16, 36, 222, 58, 26, 16, 36, + 223, 166, 26, 16, 36, 234, 71, 26, 16, 36, 234, 70, 26, 16, 36, 254, 255, + 26, 16, 36, 234, 240, 26, 16, 254, 25, 220, 63, 26, 16, 254, 25, 247, + 132, 26, 16, 36, 248, 158, 26, 16, 36, 227, 91, 26, 16, 36, 245, 150, 26, + 16, 36, 224, 40, 26, 16, 36, 252, 113, 26, 16, 36, 51, 221, 124, 26, 16, + 36, 221, 78, 221, 124, 26, 16, 227, 95, 26, 16, 223, 99, 26, 16, 217, + 157, 26, 16, 229, 107, 26, 16, 233, 231, 26, 16, 245, 121, 26, 16, 250, + 106, 26, 16, 249, 83, 26, 16, 244, 47, 231, 181, 224, 55, 26, 16, 244, + 47, 231, 181, 231, 205, 224, 55, 26, 16, 221, 109, 26, 16, 220, 237, 26, + 16, 237, 170, 220, 237, 26, 16, 220, 238, 224, 55, 26, 16, 220, 238, 220, + 63, 26, 16, 230, 99, 223, 119, 26, 16, 230, 99, 223, 116, 26, 16, 230, + 99, 223, 115, 26, 16, 230, 99, 223, 114, 26, 16, 230, 99, 223, 113, 26, + 16, 230, 99, 223, 112, 26, 16, 230, 99, 223, 111, 26, 16, 230, 99, 223, + 110, 26, 16, 230, 99, 223, 109, 26, 16, 230, 99, 223, 118, 26, 16, 230, + 99, 223, 117, 26, 16, 243, 169, 26, 16, 232, 140, 26, 16, 246, 190, 117, + 223, 140, 26, 16, 249, 77, 224, 55, 26, 16, 36, 113, 252, 24, 26, 16, 36, + 108, 252, 24, 26, 16, 36, 243, 178, 26, 16, 36, 224, 34, 229, 59, 26, 16, + 229, 195, 78, 26, 16, 229, 195, 108, 78, 26, 16, 144, 229, 195, 78, 26, + 16, 244, 74, 220, 63, 26, 16, 244, 74, 247, 132, 26, 16, 2, 245, 182, 26, + 16, 249, 168, 26, 16, 249, 169, 254, 157, 26, 16, 234, 46, 26, 16, 234, + 250, 26, 16, 252, 5, 26, 16, 225, 71, 218, 207, 26, 16, 225, 71, 252, 53, + 26, 16, 233, 157, 26, 16, 233, 158, 252, 53, 26, 16, 225, 65, 218, 207, + 26, 16, 225, 65, 252, 53, 26, 16, 245, 82, 218, 207, 26, 16, 245, 82, + 252, 53, 26, 16, 234, 251, 229, 167, 227, 168, 26, 16, 234, 251, 237, + 228, 227, 168, 26, 16, 252, 6, 227, 168, 26, 16, 225, 71, 227, 168, 26, + 16, 233, 158, 227, 168, 26, 16, 225, 65, 227, 168, 26, 16, 222, 67, 229, + 165, 250, 87, 228, 224, 229, 166, 26, 16, 222, 67, 229, 165, 250, 87, + 228, 224, 237, 227, 26, 16, 222, 67, 229, 165, 250, 87, 228, 224, 229, + 167, 248, 224, 26, 16, 222, 67, 237, 226, 250, 87, 228, 224, 229, 166, + 26, 16, 222, 67, 237, 226, 250, 87, 228, 224, 237, 227, 26, 16, 222, 67, + 237, 226, 250, 87, 228, 224, 237, 228, 248, 224, 26, 16, 222, 67, 237, + 226, 250, 87, 228, 224, 237, 228, 248, 223, 26, 16, 222, 67, 237, 226, + 250, 87, 228, 224, 237, 228, 248, 222, 26, 16, 250, 103, 26, 16, 244, 26, + 251, 203, 250, 207, 26, 16, 244, 26, 246, 75, 250, 207, 26, 16, 40, 253, + 204, 26, 16, 219, 81, 26, 16, 229, 35, 26, 16, 250, 200, 26, 16, 226, + 110, 26, 16, 250, 202, 26, 16, 221, 115, 26, 16, 229, 17, 26, 16, 229, + 18, 245, 152, 26, 16, 226, 111, 245, 152, 26, 16, 221, 116, 227, 166, 26, + 16, 229, 154, 223, 95, 23, 219, 71, 165, 223, 18, 23, 219, 71, 165, 223, + 7, 23, 219, 71, 165, 222, 253, 23, 219, 71, 165, 222, 246, 23, 219, 71, + 165, 222, 238, 23, 219, 71, 165, 222, 232, 23, 219, 71, 165, 222, 231, + 23, 219, 71, 165, 222, 230, 23, 219, 71, 165, 222, 229, 23, 219, 71, 165, + 223, 17, 23, 219, 71, 165, 223, 16, 23, 219, 71, 165, 223, 15, 23, 219, + 71, 165, 223, 14, 23, 219, 71, 165, 223, 13, 23, 219, 71, 165, 223, 12, + 23, 219, 71, 165, 223, 11, 23, 219, 71, 165, 223, 10, 23, 219, 71, 165, + 223, 9, 23, 219, 71, 165, 223, 8, 23, 219, 71, 165, 223, 6, 23, 219, 71, + 165, 223, 5, 23, 219, 71, 165, 223, 4, 23, 219, 71, 165, 223, 3, 23, 219, + 71, 165, 223, 2, 23, 219, 71, 165, 222, 237, 23, 219, 71, 165, 222, 236, + 23, 219, 71, 165, 222, 235, 23, 219, 71, 165, 222, 234, 23, 219, 71, 165, + 222, 233, 23, 237, 189, 165, 223, 18, 23, 237, 189, 165, 223, 7, 23, 237, + 189, 165, 222, 246, 23, 237, 189, 165, 222, 238, 23, 237, 189, 165, 222, + 231, 23, 237, 189, 165, 222, 230, 23, 237, 189, 165, 223, 16, 23, 237, + 189, 165, 223, 15, 23, 237, 189, 165, 223, 14, 23, 237, 189, 165, 223, + 13, 23, 237, 189, 165, 223, 10, 23, 237, 189, 165, 223, 9, 23, 237, 189, + 165, 223, 8, 23, 237, 189, 165, 223, 3, 23, 237, 189, 165, 223, 2, 23, + 237, 189, 165, 223, 1, 23, 237, 189, 165, 223, 0, 23, 237, 189, 165, 222, + 255, 23, 237, 189, 165, 222, 254, 23, 237, 189, 165, 222, 252, 23, 237, + 189, 165, 222, 251, 23, 237, 189, 165, 222, 250, 23, 237, 189, 165, 222, + 249, 23, 237, 189, 165, 222, 248, 23, 237, 189, 165, 222, 247, 23, 237, + 189, 165, 222, 245, 23, 237, 189, 165, 222, 244, 23, 237, 189, 165, 222, + 243, 23, 237, 189, 165, 222, 242, 23, 237, 189, 165, 222, 241, 23, 237, + 189, 165, 222, 240, 23, 237, 189, 165, 222, 239, 23, 237, 189, 165, 222, + 237, 23, 237, 189, 165, 222, 236, 23, 237, 189, 165, 222, 235, 23, 237, + 189, 165, 222, 234, 23, 237, 189, 165, 222, 233, 36, 23, 26, 221, 75, 36, + 23, 26, 222, 43, 36, 23, 26, 229, 174, 23, 26, 235, 101, 233, 125, 35, + 247, 8, 248, 237, 35, 243, 150, 247, 8, 248, 237, 35, 242, 165, 247, 8, + 248, 237, 35, 247, 7, 243, 151, 248, 237, 35, 247, 7, 242, 164, 248, 237, + 35, 247, 8, 159, 35, 251, 84, 159, 35, 245, 90, 250, 221, 159, 35, 233, + 150, 159, 35, 252, 192, 159, 35, 236, 181, 224, 43, 159, 35, 250, 133, + 159, 35, 254, 9, 159, 35, 230, 109, 159, 35, 252, 13, 230, 83, 159, 35, + 249, 79, 156, 248, 198, 159, 35, 248, 195, 159, 35, 217, 210, 159, 35, + 237, 217, 159, 35, 229, 180, 159, 35, 227, 215, 159, 35, 250, 143, 159, + 35, 242, 253, 252, 233, 159, 35, 219, 1, 159, 35, 245, 138, 159, 35, 254, + 236, 159, 35, 227, 190, 159, 35, 227, 172, 159, 35, 247, 6, 159, 35, 237, + 45, 159, 35, 250, 138, 159, 35, 246, 189, 159, 35, 247, 87, 159, 35, 251, + 58, 159, 35, 249, 85, 159, 35, 21, 227, 171, 159, 35, 230, 38, 159, 35, + 235, 104, 159, 35, 250, 195, 159, 35, 236, 101, 159, 35, 244, 211, 159, + 35, 223, 126, 159, 35, 228, 189, 159, 35, 245, 89, 159, 35, 227, 173, + 159, 35, 235, 134, 156, 233, 134, 159, 35, 227, 169, 159, 35, 244, 64, + 199, 234, 12, 159, 35, 246, 191, 159, 35, 223, 133, 159, 35, 244, 28, + 159, 35, 246, 184, 159, 35, 229, 210, 159, 35, 227, 85, 159, 35, 245, + 151, 159, 35, 219, 173, 156, 218, 244, 159, 35, 250, 146, 159, 35, 234, + 23, 159, 35, 246, 120, 159, 35, 220, 71, 159, 35, 248, 225, 159, 35, 250, + 197, 233, 105, 159, 35, 244, 13, 159, 35, 244, 212, 237, 223, 159, 35, + 234, 53, 159, 35, 254, 253, 159, 35, 246, 203, 159, 35, 247, 134, 159, + 35, 218, 242, 159, 35, 224, 106, 159, 35, 237, 196, 159, 35, 249, 51, + 159, 35, 249, 150, 159, 35, 248, 221, 159, 35, 246, 93, 159, 35, 225, 37, + 159, 35, 223, 135, 159, 35, 243, 180, 159, 35, 250, 162, 159, 35, 250, + 193, 159, 35, 245, 248, 159, 35, 254, 205, 159, 35, 250, 161, 159, 35, + 230, 139, 222, 23, 219, 155, 159, 35, 248, 245, 159, 35, 235, 180, 159, + 35, 245, 118, 250, 112, 227, 69, 220, 73, 20, 107, 250, 112, 227, 69, + 220, 73, 20, 103, 250, 112, 227, 69, 220, 73, 20, 160, 250, 112, 227, 69, + 220, 73, 20, 154, 250, 112, 227, 69, 220, 73, 20, 174, 250, 112, 227, 69, + 220, 73, 20, 182, 250, 112, 227, 69, 220, 73, 20, 191, 250, 112, 227, 69, + 220, 73, 20, 185, 250, 112, 227, 69, 220, 73, 20, 190, 250, 112, 227, 69, + 222, 63, 20, 107, 250, 112, 227, 69, 222, 63, 20, 103, 250, 112, 227, 69, + 222, 63, 20, 160, 250, 112, 227, 69, 222, 63, 20, 154, 250, 112, 227, 69, + 222, 63, 20, 174, 250, 112, 227, 69, 222, 63, 20, 182, 250, 112, 227, 69, + 222, 63, 20, 191, 250, 112, 227, 69, 222, 63, 20, 185, 250, 112, 227, 69, + 222, 63, 20, 190, 14, 21, 6, 60, 14, 21, 6, 253, 204, 14, 21, 6, 251, + 202, 14, 21, 6, 250, 46, 14, 21, 6, 73, 14, 21, 6, 246, 74, 14, 21, 6, + 245, 67, 14, 21, 6, 243, 225, 14, 21, 6, 72, 14, 21, 6, 237, 126, 14, 21, + 6, 237, 17, 14, 21, 6, 153, 14, 21, 6, 189, 14, 21, 6, 207, 14, 21, 6, + 74, 14, 21, 6, 230, 59, 14, 21, 6, 228, 163, 14, 21, 6, 152, 14, 21, 6, + 198, 14, 21, 6, 222, 201, 14, 21, 6, 68, 14, 21, 6, 216, 216, 14, 21, 6, + 219, 40, 14, 21, 6, 218, 151, 14, 21, 6, 218, 90, 14, 21, 6, 217, 157, + 14, 21, 3, 60, 14, 21, 3, 253, 204, 14, 21, 3, 251, 202, 14, 21, 3, 250, + 46, 14, 21, 3, 73, 14, 21, 3, 246, 74, 14, 21, 3, 245, 67, 14, 21, 3, + 243, 225, 14, 21, 3, 72, 14, 21, 3, 237, 126, 14, 21, 3, 237, 17, 14, 21, + 3, 153, 14, 21, 3, 189, 14, 21, 3, 207, 14, 21, 3, 74, 14, 21, 3, 230, + 59, 14, 21, 3, 228, 163, 14, 21, 3, 152, 14, 21, 3, 198, 14, 21, 3, 222, + 201, 14, 21, 3, 68, 14, 21, 3, 216, 216, 14, 21, 3, 219, 40, 14, 21, 3, + 218, 151, 14, 21, 3, 218, 90, 14, 21, 3, 217, 157, 14, 30, 6, 60, 14, 30, + 6, 253, 204, 14, 30, 6, 251, 202, 14, 30, 6, 250, 46, 14, 30, 6, 73, 14, + 30, 6, 246, 74, 14, 30, 6, 245, 67, 14, 30, 6, 243, 225, 14, 30, 6, 72, + 14, 30, 6, 237, 126, 14, 30, 6, 237, 17, 14, 30, 6, 153, 14, 30, 6, 189, + 14, 30, 6, 207, 14, 30, 6, 74, 14, 30, 6, 230, 59, 14, 30, 6, 228, 163, + 14, 30, 6, 152, 14, 30, 6, 198, 14, 30, 6, 222, 201, 14, 30, 6, 68, 14, + 30, 6, 216, 216, 14, 30, 6, 219, 40, 14, 30, 6, 218, 151, 14, 30, 6, 218, + 90, 14, 30, 6, 217, 157, 14, 30, 3, 60, 14, 30, 3, 253, 204, 14, 30, 3, + 251, 202, 14, 30, 3, 250, 46, 14, 30, 3, 73, 14, 30, 3, 246, 74, 14, 30, + 3, 245, 67, 14, 30, 3, 72, 14, 30, 3, 237, 126, 14, 30, 3, 237, 17, 14, + 30, 3, 153, 14, 30, 3, 189, 14, 30, 3, 207, 14, 30, 3, 74, 14, 30, 3, + 230, 59, 14, 30, 3, 228, 163, 14, 30, 3, 152, 14, 30, 3, 198, 14, 30, 3, + 222, 201, 14, 30, 3, 68, 14, 30, 3, 216, 216, 14, 30, 3, 219, 40, 14, 30, + 3, 218, 151, 14, 30, 3, 218, 90, 14, 30, 3, 217, 157, 14, 21, 30, 6, 60, + 14, 21, 30, 6, 253, 204, 14, 21, 30, 6, 251, 202, 14, 21, 30, 6, 250, 46, + 14, 21, 30, 6, 73, 14, 21, 30, 6, 246, 74, 14, 21, 30, 6, 245, 67, 14, + 21, 30, 6, 243, 225, 14, 21, 30, 6, 72, 14, 21, 30, 6, 237, 126, 14, 21, + 30, 6, 237, 17, 14, 21, 30, 6, 153, 14, 21, 30, 6, 189, 14, 21, 30, 6, + 207, 14, 21, 30, 6, 74, 14, 21, 30, 6, 230, 59, 14, 21, 30, 6, 228, 163, + 14, 21, 30, 6, 152, 14, 21, 30, 6, 198, 14, 21, 30, 6, 222, 201, 14, 21, + 30, 6, 68, 14, 21, 30, 6, 216, 216, 14, 21, 30, 6, 219, 40, 14, 21, 30, + 6, 218, 151, 14, 21, 30, 6, 218, 90, 14, 21, 30, 6, 217, 157, 14, 21, 30, + 3, 60, 14, 21, 30, 3, 253, 204, 14, 21, 30, 3, 251, 202, 14, 21, 30, 3, + 250, 46, 14, 21, 30, 3, 73, 14, 21, 30, 3, 246, 74, 14, 21, 30, 3, 245, + 67, 14, 21, 30, 3, 243, 225, 14, 21, 30, 3, 72, 14, 21, 30, 3, 237, 126, + 14, 21, 30, 3, 237, 17, 14, 21, 30, 3, 153, 14, 21, 30, 3, 189, 14, 21, + 30, 3, 207, 14, 21, 30, 3, 74, 14, 21, 30, 3, 230, 59, 14, 21, 30, 3, + 228, 163, 14, 21, 30, 3, 152, 14, 21, 30, 3, 198, 14, 21, 30, 3, 222, + 201, 14, 21, 30, 3, 68, 14, 21, 30, 3, 216, 216, 14, 21, 30, 3, 219, 40, + 14, 21, 30, 3, 218, 151, 14, 21, 30, 3, 218, 90, 14, 21, 30, 3, 217, 157, + 14, 102, 6, 60, 14, 102, 6, 251, 202, 14, 102, 6, 250, 46, 14, 102, 6, + 245, 67, 14, 102, 6, 237, 126, 14, 102, 6, 237, 17, 14, 102, 6, 207, 14, + 102, 6, 74, 14, 102, 6, 230, 59, 14, 102, 6, 228, 163, 14, 102, 6, 198, + 14, 102, 6, 222, 201, 14, 102, 6, 68, 14, 102, 6, 216, 216, 14, 102, 6, + 219, 40, 14, 102, 6, 218, 151, 14, 102, 6, 218, 90, 14, 102, 6, 217, 157, + 14, 102, 3, 60, 14, 102, 3, 253, 204, 14, 102, 3, 251, 202, 14, 102, 3, + 250, 46, 14, 102, 3, 246, 74, 14, 102, 3, 243, 225, 14, 102, 3, 72, 14, + 102, 3, 237, 126, 14, 102, 3, 237, 17, 14, 102, 3, 153, 14, 102, 3, 189, + 14, 102, 3, 207, 14, 102, 3, 230, 59, 14, 102, 3, 228, 163, 14, 102, 3, + 152, 14, 102, 3, 198, 14, 102, 3, 222, 201, 14, 102, 3, 68, 14, 102, 3, + 216, 216, 14, 102, 3, 219, 40, 14, 102, 3, 218, 151, 14, 102, 3, 218, 90, + 14, 102, 3, 217, 157, 14, 21, 102, 6, 60, 14, 21, 102, 6, 253, 204, 14, + 21, 102, 6, 251, 202, 14, 21, 102, 6, 250, 46, 14, 21, 102, 6, 73, 14, + 21, 102, 6, 246, 74, 14, 21, 102, 6, 245, 67, 14, 21, 102, 6, 243, 225, + 14, 21, 102, 6, 72, 14, 21, 102, 6, 237, 126, 14, 21, 102, 6, 237, 17, + 14, 21, 102, 6, 153, 14, 21, 102, 6, 189, 14, 21, 102, 6, 207, 14, 21, + 102, 6, 74, 14, 21, 102, 6, 230, 59, 14, 21, 102, 6, 228, 163, 14, 21, + 102, 6, 152, 14, 21, 102, 6, 198, 14, 21, 102, 6, 222, 201, 14, 21, 102, + 6, 68, 14, 21, 102, 6, 216, 216, 14, 21, 102, 6, 219, 40, 14, 21, 102, 6, + 218, 151, 14, 21, 102, 6, 218, 90, 14, 21, 102, 6, 217, 157, 14, 21, 102, + 3, 60, 14, 21, 102, 3, 253, 204, 14, 21, 102, 3, 251, 202, 14, 21, 102, + 3, 250, 46, 14, 21, 102, 3, 73, 14, 21, 102, 3, 246, 74, 14, 21, 102, 3, + 245, 67, 14, 21, 102, 3, 243, 225, 14, 21, 102, 3, 72, 14, 21, 102, 3, + 237, 126, 14, 21, 102, 3, 237, 17, 14, 21, 102, 3, 153, 14, 21, 102, 3, + 189, 14, 21, 102, 3, 207, 14, 21, 102, 3, 74, 14, 21, 102, 3, 230, 59, + 14, 21, 102, 3, 228, 163, 14, 21, 102, 3, 152, 14, 21, 102, 3, 198, 14, + 21, 102, 3, 222, 201, 14, 21, 102, 3, 68, 14, 21, 102, 3, 216, 216, 14, + 21, 102, 3, 219, 40, 14, 21, 102, 3, 218, 151, 14, 21, 102, 3, 218, 90, + 14, 21, 102, 3, 217, 157, 14, 121, 6, 60, 14, 121, 6, 253, 204, 14, 121, + 6, 250, 46, 14, 121, 6, 73, 14, 121, 6, 246, 74, 14, 121, 6, 245, 67, 14, + 121, 6, 237, 126, 14, 121, 6, 237, 17, 14, 121, 6, 153, 14, 121, 6, 189, + 14, 121, 6, 207, 14, 121, 6, 74, 14, 121, 6, 230, 59, 14, 121, 6, 228, + 163, 14, 121, 6, 198, 14, 121, 6, 222, 201, 14, 121, 6, 68, 14, 121, 6, + 216, 216, 14, 121, 6, 219, 40, 14, 121, 6, 218, 151, 14, 121, 6, 218, 90, + 14, 121, 3, 60, 14, 121, 3, 253, 204, 14, 121, 3, 251, 202, 14, 121, 3, + 250, 46, 14, 121, 3, 73, 14, 121, 3, 246, 74, 14, 121, 3, 245, 67, 14, + 121, 3, 243, 225, 14, 121, 3, 72, 14, 121, 3, 237, 126, 14, 121, 3, 237, + 17, 14, 121, 3, 153, 14, 121, 3, 189, 14, 121, 3, 207, 14, 121, 3, 74, + 14, 121, 3, 230, 59, 14, 121, 3, 228, 163, 14, 121, 3, 152, 14, 121, 3, + 198, 14, 121, 3, 222, 201, 14, 121, 3, 68, 14, 121, 3, 216, 216, 14, 121, + 3, 219, 40, 14, 121, 3, 218, 151, 14, 121, 3, 218, 90, 14, 121, 3, 217, + 157, 14, 173, 6, 60, 14, 173, 6, 253, 204, 14, 173, 6, 250, 46, 14, 173, + 6, 73, 14, 173, 6, 246, 74, 14, 173, 6, 245, 67, 14, 173, 6, 72, 14, 173, + 6, 237, 126, 14, 173, 6, 237, 17, 14, 173, 6, 153, 14, 173, 6, 189, 14, + 173, 6, 74, 14, 173, 6, 198, 14, 173, 6, 222, 201, 14, 173, 6, 68, 14, + 173, 6, 216, 216, 14, 173, 6, 219, 40, 14, 173, 6, 218, 151, 14, 173, 6, + 218, 90, 14, 173, 3, 60, 14, 173, 3, 253, 204, 14, 173, 3, 251, 202, 14, + 173, 3, 250, 46, 14, 173, 3, 73, 14, 173, 3, 246, 74, 14, 173, 3, 245, + 67, 14, 173, 3, 243, 225, 14, 173, 3, 72, 14, 173, 3, 237, 126, 14, 173, + 3, 237, 17, 14, 173, 3, 153, 14, 173, 3, 189, 14, 173, 3, 207, 14, 173, + 3, 74, 14, 173, 3, 230, 59, 14, 173, 3, 228, 163, 14, 173, 3, 152, 14, + 173, 3, 198, 14, 173, 3, 222, 201, 14, 173, 3, 68, 14, 173, 3, 216, 216, + 14, 173, 3, 219, 40, 14, 173, 3, 218, 151, 14, 173, 3, 218, 90, 14, 173, + 3, 217, 157, 14, 21, 121, 6, 60, 14, 21, 121, 6, 253, 204, 14, 21, 121, + 6, 251, 202, 14, 21, 121, 6, 250, 46, 14, 21, 121, 6, 73, 14, 21, 121, 6, + 246, 74, 14, 21, 121, 6, 245, 67, 14, 21, 121, 6, 243, 225, 14, 21, 121, + 6, 72, 14, 21, 121, 6, 237, 126, 14, 21, 121, 6, 237, 17, 14, 21, 121, 6, + 153, 14, 21, 121, 6, 189, 14, 21, 121, 6, 207, 14, 21, 121, 6, 74, 14, + 21, 121, 6, 230, 59, 14, 21, 121, 6, 228, 163, 14, 21, 121, 6, 152, 14, + 21, 121, 6, 198, 14, 21, 121, 6, 222, 201, 14, 21, 121, 6, 68, 14, 21, + 121, 6, 216, 216, 14, 21, 121, 6, 219, 40, 14, 21, 121, 6, 218, 151, 14, + 21, 121, 6, 218, 90, 14, 21, 121, 6, 217, 157, 14, 21, 121, 3, 60, 14, + 21, 121, 3, 253, 204, 14, 21, 121, 3, 251, 202, 14, 21, 121, 3, 250, 46, + 14, 21, 121, 3, 73, 14, 21, 121, 3, 246, 74, 14, 21, 121, 3, 245, 67, 14, + 21, 121, 3, 243, 225, 14, 21, 121, 3, 72, 14, 21, 121, 3, 237, 126, 14, + 21, 121, 3, 237, 17, 14, 21, 121, 3, 153, 14, 21, 121, 3, 189, 14, 21, + 121, 3, 207, 14, 21, 121, 3, 74, 14, 21, 121, 3, 230, 59, 14, 21, 121, 3, + 228, 163, 14, 21, 121, 3, 152, 14, 21, 121, 3, 198, 14, 21, 121, 3, 222, + 201, 14, 21, 121, 3, 68, 14, 21, 121, 3, 216, 216, 14, 21, 121, 3, 219, + 40, 14, 21, 121, 3, 218, 151, 14, 21, 121, 3, 218, 90, 14, 21, 121, 3, + 217, 157, 14, 33, 6, 60, 14, 33, 6, 253, 204, 14, 33, 6, 251, 202, 14, + 33, 6, 250, 46, 14, 33, 6, 73, 14, 33, 6, 246, 74, 14, 33, 6, 245, 67, + 14, 33, 6, 243, 225, 14, 33, 6, 72, 14, 33, 6, 237, 126, 14, 33, 6, 237, + 17, 14, 33, 6, 153, 14, 33, 6, 189, 14, 33, 6, 207, 14, 33, 6, 74, 14, + 33, 6, 230, 59, 14, 33, 6, 228, 163, 14, 33, 6, 152, 14, 33, 6, 198, 14, + 33, 6, 222, 201, 14, 33, 6, 68, 14, 33, 6, 216, 216, 14, 33, 6, 219, 40, + 14, 33, 6, 218, 151, 14, 33, 6, 218, 90, 14, 33, 6, 217, 157, 14, 33, 3, + 60, 14, 33, 3, 253, 204, 14, 33, 3, 251, 202, 14, 33, 3, 250, 46, 14, 33, + 3, 73, 14, 33, 3, 246, 74, 14, 33, 3, 245, 67, 14, 33, 3, 243, 225, 14, + 33, 3, 72, 14, 33, 3, 237, 126, 14, 33, 3, 237, 17, 14, 33, 3, 153, 14, + 33, 3, 189, 14, 33, 3, 207, 14, 33, 3, 74, 14, 33, 3, 230, 59, 14, 33, 3, + 228, 163, 14, 33, 3, 152, 14, 33, 3, 198, 14, 33, 3, 222, 201, 14, 33, 3, + 68, 14, 33, 3, 216, 216, 14, 33, 3, 219, 40, 14, 33, 3, 218, 151, 14, 33, + 3, 218, 90, 14, 33, 3, 217, 157, 14, 33, 21, 6, 60, 14, 33, 21, 6, 253, + 204, 14, 33, 21, 6, 251, 202, 14, 33, 21, 6, 250, 46, 14, 33, 21, 6, 73, + 14, 33, 21, 6, 246, 74, 14, 33, 21, 6, 245, 67, 14, 33, 21, 6, 243, 225, + 14, 33, 21, 6, 72, 14, 33, 21, 6, 237, 126, 14, 33, 21, 6, 237, 17, 14, + 33, 21, 6, 153, 14, 33, 21, 6, 189, 14, 33, 21, 6, 207, 14, 33, 21, 6, + 74, 14, 33, 21, 6, 230, 59, 14, 33, 21, 6, 228, 163, 14, 33, 21, 6, 152, + 14, 33, 21, 6, 198, 14, 33, 21, 6, 222, 201, 14, 33, 21, 6, 68, 14, 33, + 21, 6, 216, 216, 14, 33, 21, 6, 219, 40, 14, 33, 21, 6, 218, 151, 14, 33, + 21, 6, 218, 90, 14, 33, 21, 6, 217, 157, 14, 33, 21, 3, 60, 14, 33, 21, + 3, 253, 204, 14, 33, 21, 3, 251, 202, 14, 33, 21, 3, 250, 46, 14, 33, 21, + 3, 73, 14, 33, 21, 3, 246, 74, 14, 33, 21, 3, 245, 67, 14, 33, 21, 3, + 243, 225, 14, 33, 21, 3, 72, 14, 33, 21, 3, 237, 126, 14, 33, 21, 3, 237, + 17, 14, 33, 21, 3, 153, 14, 33, 21, 3, 189, 14, 33, 21, 3, 207, 14, 33, + 21, 3, 74, 14, 33, 21, 3, 230, 59, 14, 33, 21, 3, 228, 163, 14, 33, 21, + 3, 152, 14, 33, 21, 3, 198, 14, 33, 21, 3, 222, 201, 14, 33, 21, 3, 68, + 14, 33, 21, 3, 216, 216, 14, 33, 21, 3, 219, 40, 14, 33, 21, 3, 218, 151, + 14, 33, 21, 3, 218, 90, 14, 33, 21, 3, 217, 157, 14, 33, 30, 6, 60, 14, + 33, 30, 6, 253, 204, 14, 33, 30, 6, 251, 202, 14, 33, 30, 6, 250, 46, 14, + 33, 30, 6, 73, 14, 33, 30, 6, 246, 74, 14, 33, 30, 6, 245, 67, 14, 33, + 30, 6, 243, 225, 14, 33, 30, 6, 72, 14, 33, 30, 6, 237, 126, 14, 33, 30, + 6, 237, 17, 14, 33, 30, 6, 153, 14, 33, 30, 6, 189, 14, 33, 30, 6, 207, + 14, 33, 30, 6, 74, 14, 33, 30, 6, 230, 59, 14, 33, 30, 6, 228, 163, 14, + 33, 30, 6, 152, 14, 33, 30, 6, 198, 14, 33, 30, 6, 222, 201, 14, 33, 30, + 6, 68, 14, 33, 30, 6, 216, 216, 14, 33, 30, 6, 219, 40, 14, 33, 30, 6, + 218, 151, 14, 33, 30, 6, 218, 90, 14, 33, 30, 6, 217, 157, 14, 33, 30, 3, + 60, 14, 33, 30, 3, 253, 204, 14, 33, 30, 3, 251, 202, 14, 33, 30, 3, 250, + 46, 14, 33, 30, 3, 73, 14, 33, 30, 3, 246, 74, 14, 33, 30, 3, 245, 67, + 14, 33, 30, 3, 243, 225, 14, 33, 30, 3, 72, 14, 33, 30, 3, 237, 126, 14, + 33, 30, 3, 237, 17, 14, 33, 30, 3, 153, 14, 33, 30, 3, 189, 14, 33, 30, + 3, 207, 14, 33, 30, 3, 74, 14, 33, 30, 3, 230, 59, 14, 33, 30, 3, 228, + 163, 14, 33, 30, 3, 152, 14, 33, 30, 3, 198, 14, 33, 30, 3, 222, 201, 14, + 33, 30, 3, 68, 14, 33, 30, 3, 216, 216, 14, 33, 30, 3, 219, 40, 14, 33, + 30, 3, 218, 151, 14, 33, 30, 3, 218, 90, 14, 33, 30, 3, 217, 157, 14, 33, + 21, 30, 6, 60, 14, 33, 21, 30, 6, 253, 204, 14, 33, 21, 30, 6, 251, 202, + 14, 33, 21, 30, 6, 250, 46, 14, 33, 21, 30, 6, 73, 14, 33, 21, 30, 6, + 246, 74, 14, 33, 21, 30, 6, 245, 67, 14, 33, 21, 30, 6, 243, 225, 14, 33, + 21, 30, 6, 72, 14, 33, 21, 30, 6, 237, 126, 14, 33, 21, 30, 6, 237, 17, + 14, 33, 21, 30, 6, 153, 14, 33, 21, 30, 6, 189, 14, 33, 21, 30, 6, 207, + 14, 33, 21, 30, 6, 74, 14, 33, 21, 30, 6, 230, 59, 14, 33, 21, 30, 6, + 228, 163, 14, 33, 21, 30, 6, 152, 14, 33, 21, 30, 6, 198, 14, 33, 21, 30, + 6, 222, 201, 14, 33, 21, 30, 6, 68, 14, 33, 21, 30, 6, 216, 216, 14, 33, + 21, 30, 6, 219, 40, 14, 33, 21, 30, 6, 218, 151, 14, 33, 21, 30, 6, 218, + 90, 14, 33, 21, 30, 6, 217, 157, 14, 33, 21, 30, 3, 60, 14, 33, 21, 30, + 3, 253, 204, 14, 33, 21, 30, 3, 251, 202, 14, 33, 21, 30, 3, 250, 46, 14, + 33, 21, 30, 3, 73, 14, 33, 21, 30, 3, 246, 74, 14, 33, 21, 30, 3, 245, + 67, 14, 33, 21, 30, 3, 243, 225, 14, 33, 21, 30, 3, 72, 14, 33, 21, 30, + 3, 237, 126, 14, 33, 21, 30, 3, 237, 17, 14, 33, 21, 30, 3, 153, 14, 33, + 21, 30, 3, 189, 14, 33, 21, 30, 3, 207, 14, 33, 21, 30, 3, 74, 14, 33, + 21, 30, 3, 230, 59, 14, 33, 21, 30, 3, 228, 163, 14, 33, 21, 30, 3, 152, + 14, 33, 21, 30, 3, 198, 14, 33, 21, 30, 3, 222, 201, 14, 33, 21, 30, 3, + 68, 14, 33, 21, 30, 3, 216, 216, 14, 33, 21, 30, 3, 219, 40, 14, 33, 21, + 30, 3, 218, 151, 14, 33, 21, 30, 3, 218, 90, 14, 33, 21, 30, 3, 217, 157, + 14, 211, 6, 60, 14, 211, 6, 253, 204, 14, 211, 6, 251, 202, 14, 211, 6, + 250, 46, 14, 211, 6, 73, 14, 211, 6, 246, 74, 14, 211, 6, 245, 67, 14, + 211, 6, 243, 225, 14, 211, 6, 72, 14, 211, 6, 237, 126, 14, 211, 6, 237, + 17, 14, 211, 6, 153, 14, 211, 6, 189, 14, 211, 6, 207, 14, 211, 6, 74, + 14, 211, 6, 230, 59, 14, 211, 6, 228, 163, 14, 211, 6, 152, 14, 211, 6, + 198, 14, 211, 6, 222, 201, 14, 211, 6, 68, 14, 211, 6, 216, 216, 14, 211, + 6, 219, 40, 14, 211, 6, 218, 151, 14, 211, 6, 218, 90, 14, 211, 6, 217, + 157, 14, 211, 3, 60, 14, 211, 3, 253, 204, 14, 211, 3, 251, 202, 14, 211, + 3, 250, 46, 14, 211, 3, 73, 14, 211, 3, 246, 74, 14, 211, 3, 245, 67, 14, + 211, 3, 243, 225, 14, 211, 3, 72, 14, 211, 3, 237, 126, 14, 211, 3, 237, + 17, 14, 211, 3, 153, 14, 211, 3, 189, 14, 211, 3, 207, 14, 211, 3, 74, + 14, 211, 3, 230, 59, 14, 211, 3, 228, 163, 14, 211, 3, 152, 14, 211, 3, + 198, 14, 211, 3, 222, 201, 14, 211, 3, 68, 14, 211, 3, 216, 216, 14, 211, + 3, 219, 40, 14, 211, 3, 218, 151, 14, 211, 3, 218, 90, 14, 211, 3, 217, + 157, 14, 30, 3, 248, 144, 72, 14, 30, 3, 248, 144, 237, 126, 14, 21, 6, + 254, 146, 14, 21, 6, 252, 102, 14, 21, 6, 244, 231, 14, 21, 6, 249, 62, + 14, 21, 6, 246, 156, 14, 21, 6, 217, 83, 14, 21, 6, 246, 121, 14, 21, 6, + 222, 6, 14, 21, 6, 237, 162, 14, 21, 6, 236, 221, 14, 21, 6, 235, 156, + 14, 21, 6, 233, 99, 14, 21, 6, 231, 144, 14, 21, 6, 218, 130, 14, 21, 6, + 230, 141, 14, 21, 6, 229, 108, 14, 21, 6, 227, 149, 14, 21, 6, 222, 7, + 100, 14, 21, 6, 224, 127, 14, 21, 6, 222, 105, 14, 21, 6, 220, 57, 14, + 21, 6, 229, 129, 14, 21, 6, 251, 31, 14, 21, 6, 228, 212, 14, 21, 6, 230, + 143, 14, 21, 232, 231, 14, 21, 3, 254, 146, 14, 21, 3, 252, 102, 14, 21, + 3, 244, 231, 14, 21, 3, 249, 62, 14, 21, 3, 246, 156, 14, 21, 3, 217, 83, + 14, 21, 3, 246, 121, 14, 21, 3, 222, 6, 14, 21, 3, 237, 162, 14, 21, 3, + 236, 221, 14, 21, 3, 235, 156, 14, 21, 3, 233, 99, 14, 21, 3, 231, 144, + 14, 21, 3, 218, 130, 14, 21, 3, 230, 141, 14, 21, 3, 229, 108, 14, 21, 3, + 227, 149, 14, 21, 3, 39, 224, 127, 14, 21, 3, 224, 127, 14, 21, 3, 222, + 105, 14, 21, 3, 220, 57, 14, 21, 3, 229, 129, 14, 21, 3, 251, 31, 14, 21, + 3, 228, 212, 14, 21, 3, 230, 143, 14, 21, 229, 223, 248, 246, 14, 21, + 246, 157, 100, 14, 21, 222, 7, 100, 14, 21, 236, 222, 100, 14, 21, 229, + 130, 100, 14, 21, 227, 150, 100, 14, 21, 229, 109, 100, 14, 30, 6, 254, + 146, 14, 30, 6, 252, 102, 14, 30, 6, 244, 231, 14, 30, 6, 249, 62, 14, + 30, 6, 246, 156, 14, 30, 6, 217, 83, 14, 30, 6, 246, 121, 14, 30, 6, 222, + 6, 14, 30, 6, 237, 162, 14, 30, 6, 236, 221, 14, 30, 6, 235, 156, 14, 30, + 6, 233, 99, 14, 30, 6, 231, 144, 14, 30, 6, 218, 130, 14, 30, 6, 230, + 141, 14, 30, 6, 229, 108, 14, 30, 6, 227, 149, 14, 30, 6, 222, 7, 100, + 14, 30, 6, 224, 127, 14, 30, 6, 222, 105, 14, 30, 6, 220, 57, 14, 30, 6, + 229, 129, 14, 30, 6, 251, 31, 14, 30, 6, 228, 212, 14, 30, 6, 230, 143, + 14, 30, 232, 231, 14, 30, 3, 254, 146, 14, 30, 3, 252, 102, 14, 30, 3, + 244, 231, 14, 30, 3, 249, 62, 14, 30, 3, 246, 156, 14, 30, 3, 217, 83, + 14, 30, 3, 246, 121, 14, 30, 3, 222, 6, 14, 30, 3, 237, 162, 14, 30, 3, + 236, 221, 14, 30, 3, 235, 156, 14, 30, 3, 233, 99, 14, 30, 3, 231, 144, + 14, 30, 3, 218, 130, 14, 30, 3, 230, 141, 14, 30, 3, 229, 108, 14, 30, 3, + 227, 149, 14, 30, 3, 39, 224, 127, 14, 30, 3, 224, 127, 14, 30, 3, 222, + 105, 14, 30, 3, 220, 57, 14, 30, 3, 229, 129, 14, 30, 3, 251, 31, 14, 30, + 3, 228, 212, 14, 30, 3, 230, 143, 14, 30, 229, 223, 248, 246, 14, 30, + 246, 157, 100, 14, 30, 222, 7, 100, 14, 30, 236, 222, 100, 14, 30, 229, + 130, 100, 14, 30, 227, 150, 100, 14, 30, 229, 109, 100, 14, 21, 30, 6, + 254, 146, 14, 21, 30, 6, 252, 102, 14, 21, 30, 6, 244, 231, 14, 21, 30, + 6, 249, 62, 14, 21, 30, 6, 246, 156, 14, 21, 30, 6, 217, 83, 14, 21, 30, + 6, 246, 121, 14, 21, 30, 6, 222, 6, 14, 21, 30, 6, 237, 162, 14, 21, 30, + 6, 236, 221, 14, 21, 30, 6, 235, 156, 14, 21, 30, 6, 233, 99, 14, 21, 30, + 6, 231, 144, 14, 21, 30, 6, 218, 130, 14, 21, 30, 6, 230, 141, 14, 21, + 30, 6, 229, 108, 14, 21, 30, 6, 227, 149, 14, 21, 30, 6, 222, 7, 100, 14, + 21, 30, 6, 224, 127, 14, 21, 30, 6, 222, 105, 14, 21, 30, 6, 220, 57, 14, + 21, 30, 6, 229, 129, 14, 21, 30, 6, 251, 31, 14, 21, 30, 6, 228, 212, 14, + 21, 30, 6, 230, 143, 14, 21, 30, 232, 231, 14, 21, 30, 3, 254, 146, 14, + 21, 30, 3, 252, 102, 14, 21, 30, 3, 244, 231, 14, 21, 30, 3, 249, 62, 14, + 21, 30, 3, 246, 156, 14, 21, 30, 3, 217, 83, 14, 21, 30, 3, 246, 121, 14, + 21, 30, 3, 222, 6, 14, 21, 30, 3, 237, 162, 14, 21, 30, 3, 236, 221, 14, + 21, 30, 3, 235, 156, 14, 21, 30, 3, 233, 99, 14, 21, 30, 3, 231, 144, 14, + 21, 30, 3, 218, 130, 14, 21, 30, 3, 230, 141, 14, 21, 30, 3, 229, 108, + 14, 21, 30, 3, 227, 149, 14, 21, 30, 3, 39, 224, 127, 14, 21, 30, 3, 224, + 127, 14, 21, 30, 3, 222, 105, 14, 21, 30, 3, 220, 57, 14, 21, 30, 3, 229, + 129, 14, 21, 30, 3, 251, 31, 14, 21, 30, 3, 228, 212, 14, 21, 30, 3, 230, + 143, 14, 21, 30, 229, 223, 248, 246, 14, 21, 30, 246, 157, 100, 14, 21, + 30, 222, 7, 100, 14, 21, 30, 236, 222, 100, 14, 21, 30, 229, 130, 100, + 14, 21, 30, 227, 150, 100, 14, 21, 30, 229, 109, 100, 14, 33, 21, 6, 254, + 146, 14, 33, 21, 6, 252, 102, 14, 33, 21, 6, 244, 231, 14, 33, 21, 6, + 249, 62, 14, 33, 21, 6, 246, 156, 14, 33, 21, 6, 217, 83, 14, 33, 21, 6, + 246, 121, 14, 33, 21, 6, 222, 6, 14, 33, 21, 6, 237, 162, 14, 33, 21, 6, + 236, 221, 14, 33, 21, 6, 235, 156, 14, 33, 21, 6, 233, 99, 14, 33, 21, 6, + 231, 144, 14, 33, 21, 6, 218, 130, 14, 33, 21, 6, 230, 141, 14, 33, 21, + 6, 229, 108, 14, 33, 21, 6, 227, 149, 14, 33, 21, 6, 222, 7, 100, 14, 33, + 21, 6, 224, 127, 14, 33, 21, 6, 222, 105, 14, 33, 21, 6, 220, 57, 14, 33, + 21, 6, 229, 129, 14, 33, 21, 6, 251, 31, 14, 33, 21, 6, 228, 212, 14, 33, + 21, 6, 230, 143, 14, 33, 21, 232, 231, 14, 33, 21, 3, 254, 146, 14, 33, + 21, 3, 252, 102, 14, 33, 21, 3, 244, 231, 14, 33, 21, 3, 249, 62, 14, 33, + 21, 3, 246, 156, 14, 33, 21, 3, 217, 83, 14, 33, 21, 3, 246, 121, 14, 33, + 21, 3, 222, 6, 14, 33, 21, 3, 237, 162, 14, 33, 21, 3, 236, 221, 14, 33, + 21, 3, 235, 156, 14, 33, 21, 3, 233, 99, 14, 33, 21, 3, 231, 144, 14, 33, + 21, 3, 218, 130, 14, 33, 21, 3, 230, 141, 14, 33, 21, 3, 229, 108, 14, + 33, 21, 3, 227, 149, 14, 33, 21, 3, 39, 224, 127, 14, 33, 21, 3, 224, + 127, 14, 33, 21, 3, 222, 105, 14, 33, 21, 3, 220, 57, 14, 33, 21, 3, 229, + 129, 14, 33, 21, 3, 251, 31, 14, 33, 21, 3, 228, 212, 14, 33, 21, 3, 230, + 143, 14, 33, 21, 229, 223, 248, 246, 14, 33, 21, 246, 157, 100, 14, 33, + 21, 222, 7, 100, 14, 33, 21, 236, 222, 100, 14, 33, 21, 229, 130, 100, + 14, 33, 21, 227, 150, 100, 14, 33, 21, 229, 109, 100, 14, 33, 21, 30, 6, + 254, 146, 14, 33, 21, 30, 6, 252, 102, 14, 33, 21, 30, 6, 244, 231, 14, + 33, 21, 30, 6, 249, 62, 14, 33, 21, 30, 6, 246, 156, 14, 33, 21, 30, 6, + 217, 83, 14, 33, 21, 30, 6, 246, 121, 14, 33, 21, 30, 6, 222, 6, 14, 33, + 21, 30, 6, 237, 162, 14, 33, 21, 30, 6, 236, 221, 14, 33, 21, 30, 6, 235, + 156, 14, 33, 21, 30, 6, 233, 99, 14, 33, 21, 30, 6, 231, 144, 14, 33, 21, + 30, 6, 218, 130, 14, 33, 21, 30, 6, 230, 141, 14, 33, 21, 30, 6, 229, + 108, 14, 33, 21, 30, 6, 227, 149, 14, 33, 21, 30, 6, 222, 7, 100, 14, 33, + 21, 30, 6, 224, 127, 14, 33, 21, 30, 6, 222, 105, 14, 33, 21, 30, 6, 220, + 57, 14, 33, 21, 30, 6, 229, 129, 14, 33, 21, 30, 6, 251, 31, 14, 33, 21, + 30, 6, 228, 212, 14, 33, 21, 30, 6, 230, 143, 14, 33, 21, 30, 232, 231, + 14, 33, 21, 30, 3, 254, 146, 14, 33, 21, 30, 3, 252, 102, 14, 33, 21, 30, + 3, 244, 231, 14, 33, 21, 30, 3, 249, 62, 14, 33, 21, 30, 3, 246, 156, 14, + 33, 21, 30, 3, 217, 83, 14, 33, 21, 30, 3, 246, 121, 14, 33, 21, 30, 3, + 222, 6, 14, 33, 21, 30, 3, 237, 162, 14, 33, 21, 30, 3, 236, 221, 14, 33, + 21, 30, 3, 235, 156, 14, 33, 21, 30, 3, 233, 99, 14, 33, 21, 30, 3, 231, + 144, 14, 33, 21, 30, 3, 218, 130, 14, 33, 21, 30, 3, 230, 141, 14, 33, + 21, 30, 3, 229, 108, 14, 33, 21, 30, 3, 227, 149, 14, 33, 21, 30, 3, 39, + 224, 127, 14, 33, 21, 30, 3, 224, 127, 14, 33, 21, 30, 3, 222, 105, 14, + 33, 21, 30, 3, 220, 57, 14, 33, 21, 30, 3, 229, 129, 14, 33, 21, 30, 3, + 251, 31, 14, 33, 21, 30, 3, 228, 212, 14, 33, 21, 30, 3, 230, 143, 14, + 33, 21, 30, 229, 223, 248, 246, 14, 33, 21, 30, 246, 157, 100, 14, 33, + 21, 30, 222, 7, 100, 14, 33, 21, 30, 236, 222, 100, 14, 33, 21, 30, 229, + 130, 100, 14, 33, 21, 30, 227, 150, 100, 14, 33, 21, 30, 229, 109, 100, + 14, 21, 6, 248, 240, 14, 21, 3, 248, 240, 14, 21, 20, 217, 84, 14, 21, + 20, 107, 14, 21, 20, 103, 14, 21, 20, 160, 14, 21, 20, 154, 14, 21, 20, + 174, 14, 21, 20, 182, 14, 21, 20, 191, 14, 21, 20, 185, 14, 21, 20, 190, + 14, 173, 20, 217, 84, 14, 173, 20, 107, 14, 173, 20, 103, 14, 173, 20, + 160, 14, 173, 20, 154, 14, 173, 20, 174, 14, 173, 20, 182, 14, 173, 20, + 191, 14, 173, 20, 185, 14, 173, 20, 190, 14, 33, 20, 217, 84, 14, 33, 20, + 107, 14, 33, 20, 103, 14, 33, 20, 160, 14, 33, 20, 154, 14, 33, 20, 174, + 14, 33, 20, 182, 14, 33, 20, 191, 14, 33, 20, 185, 14, 33, 20, 190, 14, + 33, 21, 20, 217, 84, 14, 33, 21, 20, 107, 14, 33, 21, 20, 103, 14, 33, + 21, 20, 160, 14, 33, 21, 20, 154, 14, 33, 21, 20, 174, 14, 33, 21, 20, + 182, 14, 33, 21, 20, 191, 14, 33, 21, 20, 185, 14, 33, 21, 20, 190, 14, + 211, 20, 217, 84, 14, 211, 20, 107, 14, 211, 20, 103, 14, 211, 20, 160, + 14, 211, 20, 154, 14, 211, 20, 174, 14, 211, 20, 182, 14, 211, 20, 191, + 14, 211, 20, 185, 14, 211, 20, 190, 234, 101, 81, 247, 5, 218, 194, 234, + 101, 81, 224, 6, 218, 194, 234, 101, 81, 218, 217, 218, 194, 234, 101, + 81, 231, 187, 218, 194, 234, 101, 81, 227, 203, 247, 123, 234, 101, 81, + 244, 27, 247, 123, 234, 101, 81, 67, 247, 123, 234, 101, 81, 131, 117, + 251, 54, 234, 101, 81, 124, 117, 251, 54, 234, 101, 81, 148, 117, 251, + 54, 234, 101, 81, 245, 116, 117, 251, 54, 234, 101, 81, 245, 170, 117, + 251, 54, 234, 101, 81, 224, 82, 117, 251, 54, 234, 101, 81, 225, 43, 117, + 251, 54, 234, 101, 81, 246, 235, 117, 251, 54, 234, 101, 81, 232, 31, + 117, 251, 54, 234, 101, 81, 131, 117, 252, 210, 234, 101, 81, 124, 117, + 252, 210, 234, 101, 81, 148, 117, 252, 210, 234, 101, 81, 245, 116, 117, + 252, 210, 234, 101, 81, 245, 170, 117, 252, 210, 234, 101, 81, 224, 82, + 117, 252, 210, 234, 101, 81, 225, 43, 117, 252, 210, 234, 101, 81, 246, + 235, 117, 252, 210, 234, 101, 81, 232, 31, 117, 252, 210, 234, 101, 81, + 131, 117, 250, 220, 234, 101, 81, 124, 117, 250, 220, 234, 101, 81, 148, + 117, 250, 220, 234, 101, 81, 245, 116, 117, 250, 220, 234, 101, 81, 245, + 170, 117, 250, 220, 234, 101, 81, 224, 82, 117, 250, 220, 234, 101, 81, + 225, 43, 117, 250, 220, 234, 101, 81, 246, 235, 117, 250, 220, 234, 101, + 81, 232, 31, 117, 250, 220, 234, 101, 81, 229, 45, 234, 101, 81, 230, + 104, 234, 101, 81, 252, 211, 234, 101, 81, 250, 254, 234, 101, 81, 223, + 232, 234, 101, 81, 223, 70, 234, 101, 81, 253, 223, 234, 101, 81, 218, + 190, 234, 101, 81, 237, 53, 234, 101, 81, 252, 233, 119, 81, 186, 252, + 233, 119, 81, 242, 240, 119, 81, 242, 239, 119, 81, 242, 238, 119, 81, + 242, 237, 119, 81, 242, 236, 119, 81, 242, 235, 119, 81, 242, 234, 119, + 81, 242, 233, 119, 81, 242, 232, 119, 81, 242, 231, 119, 81, 242, 230, + 119, 81, 242, 229, 119, 81, 242, 228, 119, 81, 242, 227, 119, 81, 242, + 226, 119, 81, 242, 225, 119, 81, 242, 224, 119, 81, 242, 223, 119, 81, + 242, 222, 119, 81, 242, 221, 119, 81, 242, 220, 119, 81, 242, 219, 119, + 81, 242, 218, 119, 81, 242, 217, 119, 81, 242, 216, 119, 81, 242, 215, + 119, 81, 242, 214, 119, 81, 242, 213, 119, 81, 242, 212, 119, 81, 242, + 211, 119, 81, 242, 210, 119, 81, 242, 209, 119, 81, 242, 208, 119, 81, + 242, 207, 119, 81, 242, 206, 119, 81, 242, 205, 119, 81, 242, 204, 119, + 81, 242, 203, 119, 81, 242, 202, 119, 81, 242, 201, 119, 81, 242, 200, + 119, 81, 242, 199, 119, 81, 242, 198, 119, 81, 242, 197, 119, 81, 242, + 196, 119, 81, 242, 195, 119, 81, 242, 194, 119, 81, 242, 193, 119, 81, + 242, 192, 119, 81, 69, 252, 233, 119, 81, 219, 151, 119, 81, 219, 150, + 119, 81, 219, 149, 119, 81, 219, 148, 119, 81, 219, 147, 119, 81, 219, + 146, 119, 81, 219, 145, 119, 81, 219, 144, 119, 81, 219, 143, 119, 81, + 219, 142, 119, 81, 219, 141, 119, 81, 219, 140, 119, 81, 219, 139, 119, + 81, 219, 138, 119, 81, 219, 137, 119, 81, 219, 136, 119, 81, 219, 135, + 119, 81, 219, 134, 119, 81, 219, 133, 119, 81, 219, 132, 119, 81, 219, + 131, 119, 81, 219, 130, 119, 81, 219, 129, 119, 81, 219, 128, 119, 81, + 219, 127, 119, 81, 219, 126, 119, 81, 219, 125, 119, 81, 219, 124, 119, + 81, 219, 123, 119, 81, 219, 122, 119, 81, 219, 121, 119, 81, 219, 120, + 119, 81, 219, 119, 119, 81, 219, 118, 119, 81, 219, 117, 119, 81, 219, + 116, 119, 81, 219, 115, 119, 81, 219, 114, 119, 81, 219, 113, 119, 81, + 219, 112, 119, 81, 219, 111, 119, 81, 219, 110, 119, 81, 219, 109, 119, + 81, 219, 108, 119, 81, 219, 107, 119, 81, 219, 106, 119, 81, 219, 105, + 119, 81, 219, 104, 119, 81, 219, 103, 20, 217, 85, 245, 90, 223, 136, 20, + 217, 85, 250, 168, 20, 131, 250, 168, 20, 124, 250, 168, 20, 148, 250, + 168, 20, 245, 116, 250, 168, 20, 245, 170, 250, 168, 20, 224, 82, 250, + 168, 20, 225, 43, 250, 168, 20, 246, 235, 250, 168, 20, 232, 31, 250, + 168, 82, 7, 6, 1, 60, 82, 7, 6, 1, 253, 204, 82, 7, 6, 1, 251, 202, 82, + 7, 6, 1, 250, 46, 82, 7, 6, 1, 73, 82, 7, 6, 1, 246, 74, 82, 7, 6, 1, + 245, 67, 82, 7, 6, 1, 243, 225, 82, 7, 6, 1, 72, 82, 7, 6, 1, 237, 126, + 82, 7, 6, 1, 237, 17, 82, 7, 6, 1, 153, 82, 7, 6, 1, 189, 82, 7, 6, 1, + 207, 82, 7, 6, 1, 74, 82, 7, 6, 1, 230, 59, 82, 7, 6, 1, 228, 163, 82, 7, + 6, 1, 152, 82, 7, 6, 1, 198, 82, 7, 6, 1, 222, 201, 82, 7, 6, 1, 68, 82, + 7, 6, 1, 216, 216, 82, 7, 6, 1, 219, 40, 82, 7, 6, 1, 218, 151, 82, 7, 6, + 1, 218, 90, 82, 7, 6, 1, 217, 157, 221, 114, 224, 236, 252, 17, 7, 6, 1, + 198, 34, 30, 7, 6, 1, 251, 202, 34, 30, 7, 6, 1, 152, 34, 251, 100, 34, + 218, 153, 204, 7, 6, 1, 253, 204, 204, 7, 6, 1, 207, 204, 7, 6, 1, 230, + 59, 204, 7, 6, 1, 198, 204, 7, 6, 1, 219, 40, 204, 242, 154, 204, 233, + 52, 204, 226, 96, 204, 223, 219, 204, 229, 4, 232, 136, 34, 7, 6, 1, 243, + 225, 232, 136, 34, 7, 6, 1, 230, 59, 232, 136, 204, 7, 6, 1, 237, 126, + 232, 136, 204, 7, 6, 1, 153, 232, 136, 204, 7, 6, 1, 189, 232, 136, 204, + 7, 6, 1, 230, 59, 250, 98, 232, 136, 204, 7, 6, 1, 230, 59, 232, 136, + 204, 242, 67, 232, 136, 204, 187, 232, 136, 204, 226, 177, 40, 248, 184, + 40, 136, 243, 0, 204, 9, 220, 76, 240, 8, 204, 9, 220, 76, 240, 12, 204, + 9, 220, 76, 240, 18, 204, 52, 249, 92, 204, 9, 220, 76, 240, 24, 204, 9, + 220, 76, 240, 14, 204, 9, 220, 76, 239, 248, 204, 9, 220, 76, 240, 13, + 204, 9, 220, 76, 240, 23, 204, 9, 220, 76, 240, 0, 204, 9, 220, 76, 239, + 252, 204, 9, 220, 76, 240, 2, 204, 9, 220, 76, 240, 20, 204, 9, 220, 76, + 240, 9, 204, 9, 220, 76, 240, 22, 204, 9, 220, 76, 240, 1, 204, 9, 220, + 76, 240, 21, 204, 9, 220, 76, 239, 249, 204, 9, 220, 76, 239, 251, 204, + 9, 220, 76, 239, 247, 204, 9, 220, 76, 240, 15, 204, 9, 220, 76, 240, 16, + 204, 9, 220, 76, 239, 254, 204, 9, 220, 76, 240, 6, 204, 9, 220, 76, 240, + 4, 204, 9, 220, 76, 240, 27, 204, 9, 220, 76, 240, 26, 204, 9, 220, 76, + 239, 245, 204, 9, 220, 76, 240, 10, 204, 9, 220, 76, 240, 25, 204, 9, + 220, 76, 240, 17, 204, 9, 220, 76, 240, 5, 204, 9, 220, 76, 239, 246, + 204, 9, 220, 76, 240, 7, 221, 114, 224, 236, 252, 17, 9, 220, 76, 239, + 255, 221, 114, 224, 236, 252, 17, 9, 220, 76, 240, 26, 221, 114, 224, + 236, 252, 17, 9, 220, 76, 240, 24, 221, 114, 224, 236, 252, 17, 9, 220, + 76, 240, 11, 221, 114, 224, 236, 252, 17, 9, 220, 76, 239, 253, 221, 114, + 224, 236, 252, 17, 9, 220, 76, 240, 7, 221, 114, 224, 236, 252, 17, 9, + 220, 76, 239, 250, 221, 114, 224, 236, 252, 17, 9, 220, 76, 240, 19, 221, + 114, 224, 236, 252, 17, 9, 220, 76, 240, 3, 9, 13, 242, 57, 9, 13, 242, + 56, 9, 13, 242, 55, 9, 13, 242, 54, 9, 13, 242, 53, 9, 13, 242, 52, 9, + 13, 242, 51, 9, 13, 242, 50, 9, 13, 242, 49, 9, 13, 242, 48, 9, 13, 242, + 47, 9, 13, 242, 46, 9, 13, 242, 45, 9, 13, 242, 44, 9, 13, 242, 43, 9, + 13, 242, 42, 9, 13, 242, 41, 9, 13, 242, 40, 9, 13, 242, 39, 9, 13, 242, + 38, 9, 13, 242, 37, 9, 13, 242, 36, 9, 13, 242, 35, 9, 13, 242, 34, 9, + 13, 242, 33, 9, 13, 242, 32, 9, 13, 242, 31, 9, 13, 242, 30, 9, 13, 242, + 29, 9, 13, 242, 28, 9, 13, 242, 27, 9, 13, 242, 26, 9, 13, 242, 25, 9, + 13, 242, 24, 9, 13, 242, 23, 9, 13, 242, 22, 9, 13, 242, 21, 9, 13, 242, + 20, 9, 13, 242, 19, 9, 13, 242, 18, 9, 13, 242, 17, 9, 13, 242, 16, 9, + 13, 242, 15, 9, 13, 242, 14, 9, 13, 242, 13, 9, 13, 242, 12, 9, 13, 242, + 11, 9, 13, 242, 10, 9, 13, 242, 9, 9, 13, 242, 8, 9, 13, 242, 7, 9, 13, + 242, 6, 9, 13, 242, 5, 9, 13, 242, 4, 9, 13, 242, 3, 9, 13, 242, 2, 9, + 13, 242, 1, 9, 13, 242, 0, 9, 13, 241, 255, 9, 13, 241, 254, 9, 13, 241, + 253, 9, 13, 241, 252, 9, 13, 241, 251, 9, 13, 241, 250, 9, 13, 241, 249, + 9, 13, 241, 248, 9, 13, 241, 247, 9, 13, 241, 246, 9, 13, 241, 245, 9, + 13, 241, 244, 9, 13, 241, 243, 9, 13, 241, 242, 9, 13, 241, 241, 9, 13, + 241, 240, 9, 13, 241, 239, 9, 13, 241, 238, 9, 13, 241, 237, 9, 13, 241, + 236, 9, 13, 241, 235, 9, 13, 241, 234, 9, 13, 241, 233, 9, 13, 241, 232, + 9, 13, 241, 231, 9, 13, 241, 230, 9, 13, 241, 229, 9, 13, 241, 228, 9, + 13, 241, 227, 9, 13, 241, 226, 9, 13, 241, 225, 9, 13, 241, 224, 9, 13, + 241, 223, 9, 13, 241, 222, 9, 13, 241, 221, 9, 13, 241, 220, 9, 13, 241, + 219, 9, 13, 241, 218, 9, 13, 241, 217, 9, 13, 241, 216, 9, 13, 241, 215, + 9, 13, 241, 214, 9, 13, 241, 213, 9, 13, 241, 212, 9, 13, 241, 211, 9, + 13, 241, 210, 9, 13, 241, 209, 9, 13, 241, 208, 9, 13, 241, 207, 9, 13, + 241, 206, 9, 13, 241, 205, 9, 13, 241, 204, 9, 13, 241, 203, 9, 13, 241, + 202, 9, 13, 241, 201, 9, 13, 241, 200, 9, 13, 241, 199, 9, 13, 241, 198, + 9, 13, 241, 197, 9, 13, 241, 196, 9, 13, 241, 195, 9, 13, 241, 194, 9, + 13, 241, 193, 9, 13, 241, 192, 9, 13, 241, 191, 9, 13, 241, 190, 9, 13, + 241, 189, 9, 13, 241, 188, 9, 13, 241, 187, 9, 13, 241, 186, 9, 13, 241, + 185, 9, 13, 241, 184, 9, 13, 241, 183, 9, 13, 241, 182, 9, 13, 241, 181, + 9, 13, 241, 180, 9, 13, 241, 179, 9, 13, 241, 178, 9, 13, 241, 177, 9, + 13, 241, 176, 9, 13, 241, 175, 9, 13, 241, 174, 9, 13, 241, 173, 9, 13, + 241, 172, 9, 13, 241, 171, 9, 13, 241, 170, 9, 13, 241, 169, 9, 13, 241, + 168, 9, 13, 241, 167, 9, 13, 241, 166, 9, 13, 241, 165, 9, 13, 241, 164, + 9, 13, 241, 163, 9, 13, 241, 162, 9, 13, 241, 161, 9, 13, 241, 160, 9, + 13, 241, 159, 9, 13, 241, 158, 9, 13, 241, 157, 9, 13, 241, 156, 9, 13, + 241, 155, 9, 13, 241, 154, 9, 13, 241, 153, 9, 13, 241, 152, 9, 13, 241, + 151, 9, 13, 241, 150, 9, 13, 241, 149, 9, 13, 241, 148, 9, 13, 241, 147, + 9, 13, 241, 146, 9, 13, 241, 145, 9, 13, 241, 144, 9, 13, 241, 143, 9, + 13, 241, 142, 9, 13, 241, 141, 9, 13, 241, 140, 9, 13, 241, 139, 9, 13, + 241, 138, 9, 13, 241, 137, 9, 13, 241, 136, 9, 13, 241, 135, 9, 13, 241, + 134, 9, 13, 241, 133, 9, 13, 241, 132, 9, 13, 241, 131, 9, 13, 241, 130, + 9, 13, 241, 129, 9, 13, 241, 128, 9, 13, 241, 127, 9, 13, 241, 126, 9, + 13, 241, 125, 9, 13, 241, 124, 9, 13, 241, 123, 9, 13, 241, 122, 9, 13, + 241, 121, 9, 13, 241, 120, 9, 13, 241, 119, 9, 13, 241, 118, 9, 13, 241, + 117, 9, 13, 241, 116, 9, 13, 241, 115, 9, 13, 241, 114, 9, 13, 241, 113, + 9, 13, 241, 112, 9, 13, 241, 111, 9, 13, 241, 110, 9, 13, 241, 109, 9, + 13, 241, 108, 9, 13, 241, 107, 9, 13, 241, 106, 9, 13, 241, 105, 9, 13, + 241, 104, 9, 13, 241, 103, 9, 13, 241, 102, 9, 13, 241, 101, 9, 13, 241, + 100, 9, 13, 241, 99, 9, 13, 241, 98, 9, 13, 241, 97, 9, 13, 241, 96, 9, + 13, 241, 95, 9, 13, 241, 94, 9, 13, 241, 93, 9, 13, 241, 92, 9, 13, 241, + 91, 9, 13, 241, 90, 9, 13, 241, 89, 9, 13, 241, 88, 9, 13, 241, 87, 9, + 13, 241, 86, 9, 13, 241, 85, 9, 13, 241, 84, 9, 13, 241, 83, 9, 13, 241, + 82, 9, 13, 241, 81, 9, 13, 241, 80, 9, 13, 241, 79, 9, 13, 241, 78, 9, + 13, 241, 77, 9, 13, 241, 76, 9, 13, 241, 75, 9, 13, 241, 74, 9, 13, 241, + 73, 9, 13, 241, 72, 9, 13, 241, 71, 9, 13, 241, 70, 9, 13, 241, 69, 9, + 13, 241, 68, 9, 13, 241, 67, 9, 13, 241, 66, 9, 13, 241, 65, 9, 13, 241, + 64, 9, 13, 241, 63, 9, 13, 241, 62, 9, 13, 241, 61, 9, 13, 241, 60, 9, + 13, 241, 59, 9, 13, 241, 58, 9, 13, 241, 57, 9, 13, 241, 56, 9, 13, 241, + 55, 9, 13, 241, 54, 9, 13, 241, 53, 9, 13, 241, 52, 9, 13, 241, 51, 9, + 13, 241, 50, 9, 13, 241, 49, 9, 13, 241, 48, 9, 13, 241, 47, 9, 13, 241, + 46, 9, 13, 241, 45, 9, 13, 241, 44, 9, 13, 241, 43, 9, 13, 241, 42, 9, + 13, 241, 41, 9, 13, 241, 40, 9, 13, 241, 39, 9, 13, 241, 38, 9, 13, 241, + 37, 9, 13, 241, 36, 9, 13, 241, 35, 9, 13, 241, 34, 9, 13, 241, 33, 9, + 13, 241, 32, 9, 13, 241, 31, 9, 13, 241, 30, 9, 13, 241, 29, 9, 13, 241, + 28, 9, 13, 241, 27, 9, 13, 241, 26, 9, 13, 241, 25, 9, 13, 241, 24, 9, + 13, 241, 23, 9, 13, 241, 22, 9, 13, 241, 21, 9, 13, 241, 20, 9, 13, 241, + 19, 9, 13, 241, 18, 9, 13, 241, 17, 9, 13, 241, 16, 9, 13, 241, 15, 9, + 13, 241, 14, 9, 13, 241, 13, 9, 13, 241, 12, 9, 13, 241, 11, 9, 13, 241, + 10, 9, 13, 241, 9, 9, 13, 241, 8, 9, 13, 241, 7, 9, 13, 241, 6, 9, 13, + 241, 5, 9, 13, 241, 4, 9, 13, 241, 3, 9, 13, 241, 2, 9, 13, 241, 1, 9, + 13, 241, 0, 9, 13, 240, 255, 9, 13, 240, 254, 9, 13, 240, 253, 9, 13, + 240, 252, 9, 13, 240, 251, 9, 13, 240, 250, 9, 13, 240, 249, 9, 13, 240, + 248, 9, 13, 240, 247, 9, 13, 240, 246, 9, 13, 240, 245, 9, 13, 240, 244, + 9, 13, 240, 243, 9, 13, 240, 242, 9, 13, 240, 241, 9, 13, 240, 240, 9, + 13, 240, 239, 9, 13, 240, 238, 9, 13, 240, 237, 9, 13, 240, 236, 9, 13, + 240, 235, 9, 13, 240, 234, 9, 13, 240, 233, 9, 13, 240, 232, 9, 13, 240, + 231, 9, 13, 240, 230, 9, 13, 240, 229, 9, 13, 240, 228, 9, 13, 240, 227, + 9, 13, 240, 226, 9, 13, 240, 225, 9, 13, 240, 224, 9, 13, 240, 223, 9, + 13, 240, 222, 9, 13, 240, 221, 9, 13, 240, 220, 9, 13, 240, 219, 9, 13, + 240, 218, 9, 13, 240, 217, 9, 13, 240, 216, 9, 13, 240, 215, 9, 13, 240, + 214, 9, 13, 240, 213, 9, 13, 240, 212, 9, 13, 240, 211, 9, 13, 240, 210, + 9, 13, 240, 209, 9, 13, 240, 208, 9, 13, 240, 207, 9, 13, 240, 206, 9, + 13, 240, 205, 9, 13, 240, 204, 9, 13, 240, 203, 9, 13, 240, 202, 9, 13, + 240, 201, 9, 13, 240, 200, 9, 13, 240, 199, 9, 13, 240, 198, 9, 13, 240, + 197, 9, 13, 240, 196, 9, 13, 240, 195, 9, 13, 240, 194, 9, 13, 240, 193, + 9, 13, 240, 192, 9, 13, 240, 191, 9, 13, 240, 190, 9, 13, 240, 189, 9, + 13, 240, 188, 9, 13, 240, 187, 9, 13, 240, 186, 9, 13, 240, 185, 9, 13, + 240, 184, 9, 13, 240, 183, 9, 13, 240, 182, 9, 13, 240, 181, 9, 13, 240, + 180, 9, 13, 240, 179, 9, 13, 240, 178, 9, 13, 240, 177, 9, 13, 240, 176, + 9, 13, 240, 175, 9, 13, 240, 174, 9, 13, 240, 173, 9, 13, 240, 172, 9, + 13, 240, 171, 9, 13, 240, 170, 9, 13, 240, 169, 9, 13, 240, 168, 9, 13, + 240, 167, 9, 13, 240, 166, 9, 13, 240, 165, 9, 13, 240, 164, 9, 13, 240, + 163, 9, 13, 240, 162, 9, 13, 240, 161, 9, 13, 240, 160, 9, 13, 240, 159, + 9, 13, 240, 158, 9, 13, 240, 157, 9, 13, 240, 156, 9, 13, 240, 155, 9, + 13, 240, 154, 9, 13, 240, 153, 9, 13, 240, 152, 9, 13, 240, 151, 9, 13, + 240, 150, 9, 13, 240, 149, 9, 13, 240, 148, 9, 13, 240, 147, 9, 13, 240, + 146, 9, 13, 240, 145, 9, 13, 240, 144, 9, 13, 240, 143, 9, 13, 240, 142, + 9, 13, 240, 141, 9, 13, 240, 140, 9, 13, 240, 139, 9, 13, 240, 138, 9, + 13, 240, 137, 9, 13, 240, 136, 9, 13, 240, 135, 9, 13, 240, 134, 9, 13, + 240, 133, 9, 13, 240, 132, 9, 13, 240, 131, 9, 13, 240, 130, 9, 13, 240, + 129, 9, 13, 240, 128, 9, 13, 240, 127, 9, 13, 240, 126, 9, 13, 240, 125, + 9, 13, 240, 124, 9, 13, 240, 123, 9, 13, 240, 122, 9, 13, 240, 121, 9, + 13, 240, 120, 9, 13, 240, 119, 9, 13, 240, 118, 9, 13, 240, 117, 9, 13, + 240, 116, 9, 13, 240, 115, 9, 13, 240, 114, 9, 13, 240, 113, 9, 13, 240, + 112, 9, 13, 240, 111, 9, 13, 240, 110, 9, 13, 240, 109, 9, 13, 240, 108, + 9, 13, 240, 107, 9, 13, 240, 106, 9, 13, 240, 105, 9, 13, 240, 104, 9, + 13, 240, 103, 9, 13, 240, 102, 9, 13, 240, 101, 9, 13, 240, 100, 9, 13, + 240, 99, 9, 13, 240, 98, 9, 13, 240, 97, 9, 13, 240, 96, 9, 13, 240, 95, + 9, 13, 240, 94, 9, 13, 240, 93, 9, 13, 240, 92, 9, 13, 240, 91, 9, 13, + 240, 90, 9, 13, 240, 89, 9, 13, 240, 88, 9, 13, 240, 87, 9, 13, 240, 86, + 9, 13, 240, 85, 9, 13, 240, 84, 9, 13, 240, 83, 9, 13, 240, 82, 9, 13, + 240, 81, 9, 13, 240, 80, 9, 13, 240, 79, 9, 13, 240, 78, 9, 13, 240, 77, + 9, 13, 240, 76, 9, 13, 240, 75, 9, 13, 240, 74, 9, 13, 240, 73, 9, 13, + 240, 72, 9, 13, 240, 71, 9, 13, 240, 70, 9, 13, 240, 69, 9, 13, 240, 68, + 9, 13, 240, 67, 9, 13, 240, 66, 9, 13, 240, 65, 9, 13, 240, 64, 9, 13, + 240, 63, 9, 13, 240, 62, 9, 13, 240, 61, 9, 13, 240, 60, 9, 13, 240, 59, + 9, 13, 240, 58, 9, 13, 240, 57, 9, 13, 240, 56, 9, 13, 240, 55, 9, 13, + 240, 54, 9, 13, 240, 53, 9, 13, 240, 52, 9, 13, 240, 51, 9, 13, 240, 50, + 9, 13, 240, 49, 9, 13, 240, 48, 9, 13, 240, 47, 9, 13, 240, 46, 9, 13, + 240, 45, 9, 13, 240, 44, 9, 13, 240, 43, 9, 13, 240, 42, 9, 13, 240, 41, + 9, 13, 240, 40, 9, 13, 240, 39, 9, 13, 240, 38, 9, 13, 240, 37, 9, 13, + 240, 36, 9, 13, 240, 35, 9, 13, 240, 34, 9, 13, 240, 33, 9, 13, 240, 32, + 9, 13, 240, 31, 9, 13, 240, 30, 9, 13, 240, 29, 9, 13, 240, 28, 235, 148, + 222, 141, 118, 223, 254, 118, 246, 95, 78, 118, 228, 69, 78, 118, 54, 55, + 118, 248, 155, 55, 118, 229, 169, 55, 118, 254, 134, 118, 254, 79, 118, + 42, 229, 229, 118, 45, 229, 229, 118, 253, 251, 118, 88, 55, 118, 250, + 168, 118, 242, 120, 118, 245, 90, 223, 136, 118, 224, 17, 118, 20, 217, + 84, 118, 20, 107, 118, 20, 103, 118, 20, 160, 118, 20, 154, 118, 20, 174, + 118, 20, 182, 118, 20, 191, 118, 20, 185, 118, 20, 190, 118, 250, 175, + 118, 225, 67, 118, 235, 87, 55, 118, 246, 154, 55, 118, 244, 30, 55, 118, + 228, 82, 78, 118, 250, 167, 253, 244, 118, 7, 6, 1, 60, 118, 7, 6, 1, + 253, 204, 118, 7, 6, 1, 251, 202, 118, 7, 6, 1, 250, 46, 118, 7, 6, 1, + 73, 118, 7, 6, 1, 246, 74, 118, 7, 6, 1, 245, 67, 118, 7, 6, 1, 243, 225, + 118, 7, 6, 1, 72, 118, 7, 6, 1, 237, 126, 118, 7, 6, 1, 237, 17, 118, 7, + 6, 1, 153, 118, 7, 6, 1, 189, 118, 7, 6, 1, 207, 118, 7, 6, 1, 74, 118, + 7, 6, 1, 230, 59, 118, 7, 6, 1, 228, 163, 118, 7, 6, 1, 152, 118, 7, 6, + 1, 198, 118, 7, 6, 1, 222, 201, 118, 7, 6, 1, 68, 118, 7, 6, 1, 216, 216, + 118, 7, 6, 1, 219, 40, 118, 7, 6, 1, 218, 151, 118, 7, 6, 1, 218, 90, + 118, 7, 6, 1, 217, 157, 118, 42, 40, 115, 118, 227, 160, 224, 17, 118, + 45, 40, 115, 118, 250, 217, 255, 0, 118, 109, 235, 43, 118, 244, 37, 255, + 0, 118, 7, 3, 1, 60, 118, 7, 3, 1, 253, 204, 118, 7, 3, 1, 251, 202, 118, + 7, 3, 1, 250, 46, 118, 7, 3, 1, 73, 118, 7, 3, 1, 246, 74, 118, 7, 3, 1, + 245, 67, 118, 7, 3, 1, 243, 225, 118, 7, 3, 1, 72, 118, 7, 3, 1, 237, + 126, 118, 7, 3, 1, 237, 17, 118, 7, 3, 1, 153, 118, 7, 3, 1, 189, 118, 7, + 3, 1, 207, 118, 7, 3, 1, 74, 118, 7, 3, 1, 230, 59, 118, 7, 3, 1, 228, + 163, 118, 7, 3, 1, 152, 118, 7, 3, 1, 198, 118, 7, 3, 1, 222, 201, 118, + 7, 3, 1, 68, 118, 7, 3, 1, 216, 216, 118, 7, 3, 1, 219, 40, 118, 7, 3, 1, + 218, 151, 118, 7, 3, 1, 218, 90, 118, 7, 3, 1, 217, 157, 118, 42, 250, + 79, 115, 118, 69, 235, 43, 118, 45, 250, 79, 115, 118, 221, 179, 251, + 153, 222, 141, 41, 225, 251, 41, 225, 240, 41, 225, 229, 41, 225, 217, + 41, 225, 206, 41, 225, 195, 41, 225, 184, 41, 225, 173, 41, 225, 162, 41, + 225, 154, 41, 225, 153, 41, 225, 152, 41, 225, 151, 41, 225, 149, 41, + 225, 148, 41, 225, 147, 41, 225, 146, 41, 225, 145, 41, 225, 144, 41, + 225, 143, 41, 225, 142, 41, 225, 141, 41, 225, 140, 41, 225, 138, 41, + 225, 137, 41, 225, 136, 41, 225, 135, 41, 225, 134, 41, 225, 133, 41, + 225, 132, 41, 225, 131, 41, 225, 130, 41, 225, 129, 41, 225, 127, 41, + 225, 126, 41, 225, 125, 41, 225, 124, 41, 225, 123, 41, 225, 122, 41, + 225, 121, 41, 225, 120, 41, 225, 119, 41, 225, 118, 41, 225, 116, 41, + 225, 115, 41, 225, 114, 41, 225, 113, 41, 225, 112, 41, 225, 111, 41, + 225, 110, 41, 225, 109, 41, 225, 108, 41, 225, 107, 41, 225, 105, 41, + 225, 104, 41, 225, 103, 41, 225, 102, 41, 225, 101, 41, 225, 100, 41, + 225, 99, 41, 225, 98, 41, 225, 97, 41, 225, 96, 41, 225, 94, 41, 225, 93, + 41, 225, 92, 41, 225, 91, 41, 225, 90, 41, 225, 89, 41, 225, 88, 41, 225, + 87, 41, 225, 86, 41, 225, 85, 41, 225, 83, 41, 225, 82, 41, 225, 81, 41, + 225, 80, 41, 225, 79, 41, 225, 78, 41, 225, 77, 41, 225, 76, 41, 225, 75, + 41, 225, 74, 41, 226, 71, 41, 226, 70, 41, 226, 69, 41, 226, 68, 41, 226, + 67, 41, 226, 66, 41, 226, 65, 41, 226, 64, 41, 226, 63, 41, 226, 62, 41, + 226, 60, 41, 226, 59, 41, 226, 58, 41, 226, 57, 41, 226, 56, 41, 226, 55, + 41, 226, 54, 41, 226, 53, 41, 226, 52, 41, 226, 51, 41, 226, 49, 41, 226, + 48, 41, 226, 47, 41, 226, 46, 41, 226, 45, 41, 226, 44, 41, 226, 43, 41, + 226, 42, 41, 226, 41, 41, 226, 40, 41, 226, 38, 41, 226, 37, 41, 226, 36, + 41, 226, 35, 41, 226, 34, 41, 226, 33, 41, 226, 32, 41, 226, 31, 41, 226, + 30, 41, 226, 29, 41, 226, 27, 41, 226, 26, 41, 226, 25, 41, 226, 24, 41, + 226, 23, 41, 226, 22, 41, 226, 21, 41, 226, 20, 41, 226, 19, 41, 226, 18, + 41, 226, 16, 41, 226, 15, 41, 226, 14, 41, 226, 13, 41, 226, 12, 41, 226, + 11, 41, 226, 10, 41, 226, 9, 41, 226, 8, 41, 226, 7, 41, 226, 5, 41, 226, + 4, 41, 226, 3, 41, 226, 2, 41, 226, 1, 41, 226, 0, 41, 225, 255, 41, 225, + 254, 41, 225, 253, 41, 225, 252, 41, 225, 250, 41, 225, 249, 41, 225, + 248, 41, 225, 247, 41, 225, 246, 41, 225, 245, 41, 225, 244, 41, 225, + 243, 41, 225, 242, 41, 225, 241, 41, 225, 239, 41, 225, 238, 41, 225, + 237, 41, 225, 236, 41, 225, 235, 41, 225, 234, 41, 225, 233, 41, 225, + 232, 41, 225, 231, 41, 225, 230, 41, 225, 228, 41, 225, 227, 41, 225, + 226, 41, 225, 225, 41, 225, 224, 41, 225, 223, 41, 225, 222, 41, 225, + 221, 41, 225, 220, 41, 225, 219, 41, 225, 216, 41, 225, 215, 41, 225, + 214, 41, 225, 213, 41, 225, 212, 41, 225, 211, 41, 225, 210, 41, 225, + 209, 41, 225, 208, 41, 225, 207, 41, 225, 205, 41, 225, 204, 41, 225, + 203, 41, 225, 202, 41, 225, 201, 41, 225, 200, 41, 225, 199, 41, 225, + 198, 41, 225, 197, 41, 225, 196, 41, 225, 194, 41, 225, 193, 41, 225, + 192, 41, 225, 191, 41, 225, 190, 41, 225, 189, 41, 225, 188, 41, 225, + 187, 41, 225, 186, 41, 225, 185, 41, 225, 183, 41, 225, 182, 41, 225, + 181, 41, 225, 180, 41, 225, 179, 41, 225, 178, 41, 225, 177, 41, 225, + 176, 41, 225, 175, 41, 225, 174, 41, 225, 172, 41, 225, 171, 41, 225, + 170, 41, 225, 169, 41, 225, 168, 41, 225, 167, 41, 225, 166, 41, 225, + 165, 41, 225, 164, 41, 225, 163, 41, 225, 161, 41, 225, 160, 41, 225, + 159, 41, 225, 158, 41, 225, 157, 41, 225, 156, 41, 225, 155, }; static unsigned char phrasebook_offset1[] = { - 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 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, 16, 52, 53, 54, - 16, 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, 16, 84, 85, 86, 87, 88, - 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 100, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 101, 102, 103, 104, 105, 106, - 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 16, 120, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 121, 122, 123, 124, - 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 16, - 139, 140, 141, 142, 143, 16, 16, 16, 16, 16, 16, 144, 16, 145, 16, 146, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 147, 148, 149, 150, 151, 152, 153, 16, 154, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 155, 156, 157, 158, 159, 16, 160, 16, 161, 162, 163, 164, 165, 166, - 167, 168, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 169, 170, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 171, 172, 173, 174, 175, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 176, - 16, 177, 178, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, + 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, 17, 87, 88, 89, 90, 91, + 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 103, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 104, 105, 106, 107, 108, + 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, + 123, 124, 125, 17, 126, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 127, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 128, 129, + 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, + 144, 145, 17, 146, 147, 148, 149, 150, 17, 17, 17, 17, 17, 17, 151, 17, + 152, 17, 153, 17, 154, 17, 155, 17, 17, 17, 156, 17, 17, 17, 17, 157, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 158, 159, 160, 161, 162, 163, + 164, 17, 165, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 166, 167, 168, 169, 170, 171, 172, 173, + 174, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 175, 176, 177, 178, 179, 17, 180, 17, 181, 182, + 183, 184, 185, 186, 187, 188, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 189, 190, 191, 192, 193, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 194, 195, 196, 197, 198, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 199, 17, 200, 201, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, }; 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, 114, 118, 122, 127, 132, 136, 140, - 144, 148, 153, 158, 162, 166, 171, 175, 179, 184, 189, 194, 199, 202, - 206, 209, 213, 216, 220, 224, 229, 234, 239, 243, 248, 252, 256, 260, - 265, 270, 274, 278, 282, 286, 291, 296, 300, 304, 309, 313, 317, 322, - 327, 332, 337, 341, 344, 348, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 349, 353, 358, - 361, 364, 367, 370, 373, 376, 377, 380, 386, 394, 396, 400, 403, 405, - 408, 411, 414, 417, 421, 424, 427, 431, 433, 436, 442, 450, 457, 464, - 471, 476, 483, 489, 496, 502, 508, 516, 521, 529, 536, 542, 549, 555, - 563, 570, 578, 585, 590, 597, 604, 610, 617, 623, 629, 632, 638, 645, - 651, 658, 664, 671, 676, 682, 689, 695, 702, 708, 714, 722, 727, 735, - 742, 748, 755, 761, 769, 776, 784, 791, 796, 803, 810, 816, 823, 829, - 835, 838, 844, 851, 857, 864, 870, 877, 882, 889, 896, 903, 910, 917, - 924, 931, 938, 945, 953, 961, 969, 977, 985, 993, 1001, 1009, 1016, 1023, - 1030, 1037, 1044, 1051, 1058, 1065, 1072, 1079, 1086, 1093, 1101, 1109, - 1117, 1125, 1133, 1141, 1149, 1157, 1165, 1173, 1180, 1187, 1194, 1201, - 1209, 1217, 1225, 1233, 1241, 1249, 1257, 1263, 1268, 1273, 1281, 1289, - 1297, 1305, 1310, 1317, 1324, 1332, 1340, 1348, 1356, 1366, 1376, 1383, - 1390, 1397, 1404, 1412, 1420, 1428, 1436, 1447, 1452, 1457, 1464, 1471, - 1478, 1485, 1492, 1499, 1504, 1509, 1516, 1523, 1531, 1539, 1547, 1555, - 1562, 1569, 1577, 1585, 1593, 1601, 1609, 1617, 1625, 1633, 1641, 1649, - 1656, 1663, 1669, 1675, 1682, 1689, 1696, 1703, 1711, 1719, 1726, 1733, - 1740, 1747, 1755, 1763, 1771, 1779, 1786, 1793, 1800, 1808, 1816, 1824, - 1832, 1837, 1843, 1849, 1856, 1863, 1868, 1873, 1879, 1886, 1893, 1900, - 1907, 1915, 1923, 1929, 1934, 1939, 1945, 1952, 1959, 1966, 1971, 1976, - 1981, 1988, 1995, 2002, 2009, 2016, 2021, 2029, 2039, 2047, 2054, 2061, - 2066, 2071, 2078, 2085, 2089, 2094, 2099, 2104, 2111, 2120, 2127, 2134, - 2143, 2150, 2157, 2162, 2169, 2176, 2183, 2190, 2197, 2202, 2209, 2216, - 2224, 2229, 2234, 2239, 2249, 2253, 2259, 2265, 2271, 2277, 2285, 2298, - 2306, 2311, 2321, 2326, 2331, 2341, 2346, 2353, 2360, 2368, 2376, 2383, - 2390, 2397, 2404, 2414, 2424, 2433, 2442, 2452, 2462, 2472, 2482, 2487, - 2497, 2507, 2517, 2527, 2535, 2543, 2550, 2557, 2565, 2573, 2581, 2589, - 2596, 2603, 2613, 2623, 2631, 2639, 2647, 2652, 2662, 2667, 2674, 2681, - 2686, 2691, 2699, 2707, 2717, 2727, 2734, 2741, 2749, 2757, 2765, 2773, - 2782, 2791, 2799, 2807, 2816, 2825, 2834, 2843, 2853, 2863, 2871, 2879, - 2888, 2897, 2906, 2915, 2925, 2935, 2943, 2951, 2960, 2969, 2978, 2987, - 2996, 3005, 3010, 3015, 3023, 3031, 3041, 3049, 3054, 3059, 3066, 3073, - 3080, 3087, 3094, 3101, 3111, 3121, 3131, 3141, 3148, 3155, 3165, 3175, - 3183, 3191, 3199, 3207, 3215, 3222, 3229, 3236, 3242, 3249, 3256, 3263, - 3272, 3282, 3292, 3299, 3306, 3312, 3317, 3322, 3328, 3334, 3341, 3348, - 3359, 3369, 3376, 3383, 3390, 3397, 3402, 3407, 3413, 3419, 3425, 3433, - 3441, 3448, 3453, 3458, 3465, 3471, 3478, 3487, 3496, 3505, 3512, 3517, - 3522, 3527, 3534, 3539, 3546, 3553, 3560, 3565, 3570, 3579, 3587, 3596, - 3601, 3606, 3616, 3623, 3631, 3640, 3645, 3651, 3657, 3664, 3669, 3674, - 3684, 3692, 3701, 3709, 3717, 3726, 3731, 3738, 3745, 3750, 3761, 3769, - 3777, 3783, 3792, 3797, 3802, 3809, 3814, 3820, 3826, 3832, 3841, 3849, - 3854, 3862, 3868, 3876, 3884, 3890, 3896, 3902, 3910, 3918, 3923, 3931, - 3937, 3942, 3949, 3957, 3966, 3973, 3980, 3990, 3997, 4004, 4014, 4021, - 4028, 4035, 4041, 4047, 4056, 4068, 4072, 4079, 4084, 4088, 4093, 4101, - 4108, 4113, 4118, 4122, 4127, 4132, 4136, 4141, 4147, 4153, 4159, 4166, - 4171, 4176, 4181, 4186, 4192, 4194, 4199, 4203, 4209, 4215, 4221, 4226, - 4233, 4240, 4246, 4253, 4261, 4269, 4274, 4279, 4283, 4288, 4290, 4292, - 4295, 4297, 4299, 4304, 4309, 4315, 4320, 4324, 4328, 4333, 4341, 4347, - 4352, 4358, 4363, 4369, 4377, 4385, 4389, 4393, 4398, 4404, 4410, 4416, - 4422, 4427, 4435, 4444, 4453, 4457, 4463, 4470, 4477, 4484, 4491, 4495, - 4501, 4506, 4511, 4516, 4521, 4523, 4526, 4529, 4532, 4535, 4537, 4541, - 4545, 4551, 4554, 4559, 4565, 4571, 4574, 4579, 4584, 4588, 4593, 4599, - 4605, 4611, 4616, 4621, 4626, 4629, 4635, 4640, 4645, 4649, 4654, 4660, - 4666, 4669, 4673, 4677, 4681, 4684, 4687, 4692, 4696, 4703, 4707, 4713, - 4717, 4723, 4727, 4731, 4735, 4740, 4745, 4751, 4756, 4763, 4769, 4775, - 4781, 4784, 4788, 4792, 4795, 4799, 4804, 4809, 4813, 4817, 4823, 4827, - 4831, 4836, 4842, 4847, 4852, 4856, 4862, 4867, 4872, 4877, 4882, 4888, - 4891, 4895, 4900, 4905, 4914, 4920, 4925, 4929, 4934, 4938, 4943, 4947, - 4951, 4956, 4959, 4965, 4970, 4975, 4980, 4985, 4990, 4995, 5001, 5007, - 5012, 5017, 5022, 5028, 5033, 5039, 5044, 5049, 5056, 5063, 5066, 5070, - 5077, 0, 0, 5084, 5087, 5095, 5104, 5114, 0, 0, 0, 0, 0, 5118, 5121, - 5126, 5134, 5139, 5147, 5155, 0, 5163, 0, 5171, 5179, 5187, 5198, 5203, - 5208, 5213, 5218, 5223, 5228, 5233, 5238, 5243, 5248, 5253, 5258, 5263, - 5268, 5273, 5278, 0, 5283, 5288, 5293, 5298, 5303, 5308, 5313, 5318, - 5326, 5334, 5342, 5350, 5358, 5366, 5377, 5382, 5387, 5392, 5397, 5402, - 5407, 5412, 5417, 5422, 5427, 5432, 5437, 5442, 5447, 5452, 5457, 5462, - 5468, 5473, 5478, 5483, 5488, 5493, 5498, 5503, 5511, 5519, 5527, 5535, - 5543, 5548, 5552, 5556, 5563, 5573, 5583, 5587, 5591, 5595, 5601, 5608, - 5612, 5617, 5621, 5626, 5630, 5635, 5639, 5644, 5649, 5654, 5659, 5664, - 5669, 5674, 5679, 5684, 5689, 5694, 5699, 5704, 5709, 5714, 5718, 5722, - 5728, 5732, 5737, 5743, 5750, 5755, 5760, 5767, 5772, 5777, 5783, 5791, - 5800, 5810, 5818, 5823, 5828, 5833, 5840, 5845, 5851, 5856, 5861, 5866, - 5871, 5876, 5881, 5889, 5895, 5900, 5904, 5909, 5914, 5919, 5924, 5929, - 5934, 5939, 5943, 5949, 5953, 5958, 5963, 5968, 5972, 5977, 5982, 5987, - 5992, 5996, 6001, 6005, 6010, 6015, 6020, 6025, 6031, 6036, 6042, 6046, - 6051, 6055, 6059, 6064, 6069, 6074, 6079, 6084, 6089, 6094, 6098, 6104, - 6108, 6113, 6118, 6123, 6127, 6132, 6137, 6142, 6147, 6151, 6156, 6160, - 6165, 6170, 6175, 6180, 6186, 6191, 6197, 6201, 6206, 6210, 6218, 6223, - 6228, 6233, 6240, 6245, 6251, 6256, 6261, 6266, 6271, 6276, 6281, 6289, - 6295, 6300, 6305, 6310, 6315, 6320, 6326, 6332, 6339, 6346, 6355, 6364, - 6371, 6378, 6387, 6396, 6401, 6406, 6411, 6416, 6421, 6426, 6431, 6436, - 6447, 6458, 6463, 6468, 6475, 6482, 6490, 6498, 6503, 6508, 6513, 6518, - 6522, 6526, 6530, 6535, 6540, 6544, 6551, 6556, 6566, 6576, 6582, 6588, - 6596, 6604, 6612, 6620, 6627, 6634, 6643, 6652, 6660, 6668, 6676, 6684, - 6691, 6698, 6705, 6712, 6718, 6724, 6730, 6736, 6744, 6752, 6759, 6766, - 6775, 6784, 6790, 6796, 6804, 6812, 6820, 6828, 6834, 6840, 6848, 6856, - 6864, 6872, 6879, 6886, 6894, 6902, 6910, 6918, 6923, 6928, 6935, 6942, - 6952, 6962, 6966, 6974, 6982, 6988, 6994, 7002, 7010, 7017, 7024, 7032, - 7040, 7047, 7054, 7062, 7070, 7075, 7082, 7089, 7095, 7101, 7107, 7113, - 7121, 7129, 7134, 7139, 7146, 7153, 7160, 7167, 7174, 7181, 7188, 7195, - 7203, 7211, 7218, 7225, 7231, 7237, 7243, 7249, 7257, 7265, 7271, 7277, - 7284, 7291, 7297, 7303, 7310, 7317, 7324, 7331, 7339, 7347, 7354, 7361, - 7370, 7379, 7386, 7393, 7400, 7407, 7414, 7421, 7428, 7435, 7442, 7449, - 7456, 7463, 7470, 7477, 7484, 7491, 7498, 7505, 7512, 7519, 7525, 7531, - 7538, 7545, 7550, 7555, 7560, 7565, 7570, 7575, 7580, 7585, 7590, 7595, - 7601, 7607, 7616, 7625, 7634, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 7643, 7648, 7653, 7658, 7663, 7668, 7673, 7678, 7683, 7687, 7692, 7697, - 7702, 7707, 7712, 7717, 7722, 7727, 7732, 7737, 7742, 7747, 7752, 7757, - 7762, 7767, 7772, 7777, 7781, 7786, 7791, 7796, 7801, 7806, 7811, 7816, - 7821, 7826, 0, 0, 7831, 7838, 7841, 7845, 7849, 7852, 7856, 0, 7860, - 7865, 7870, 7875, 7880, 7885, 7890, 7895, 7900, 7904, 7909, 7914, 7919, - 7924, 7929, 7934, 7939, 7944, 7949, 7954, 7959, 7964, 7969, 7974, 7979, - 7984, 7989, 7994, 7998, 8003, 8008, 8013, 8018, 8023, 8028, 8033, 8038, - 8043, 8048, 0, 8055, 8060, 0, 0, 0, 0, 0, 0, 8063, 8068, 8073, 8078, - 8085, 8092, 8097, 8102, 8107, 8112, 8117, 8122, 8127, 8134, 8139, 8146, - 8153, 8158, 8165, 8170, 8175, 8180, 8187, 8192, 8197, 8204, 8213, 8218, - 8223, 8228, 8233, 8239, 8244, 8251, 8258, 8265, 8270, 8275, 8280, 8285, - 8290, 8295, 8305, 8310, 8318, 8323, 8328, 8333, 8338, 8345, 8352, 8359, - 8365, 8370, 8377, 0, 0, 0, 0, 0, 0, 0, 0, 8384, 8388, 8392, 8396, 8400, - 8404, 8408, 8412, 8416, 8420, 8424, 8429, 8433, 8437, 8442, 8446, 8451, - 8455, 8459, 8463, 8468, 8472, 8477, 8481, 8485, 8489, 8493, 0, 0, 0, 0, - 0, 8497, 8504, 8512, 8519, 8524, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8529, - 8532, 8536, 8541, 0, 0, 8545, 8551, 8557, 8560, 8567, 8576, 8579, 8582, - 8587, 8593, 8597, 8605, 8611, 8617, 8625, 8629, 8634, 8644, 8649, 8653, - 8657, 8661, 0, 0, 8664, 8671, 0, 8675, 8679, 8686, 8692, 8699, 8705, - 8711, 8715, 8719, 8725, 8729, 8733, 8737, 8741, 8745, 8749, 8753, 8757, - 8761, 8765, 8769, 8773, 8777, 8781, 8785, 8789, 8793, 8801, 8809, 8818, - 8827, 8836, 8839, 8843, 8847, 8851, 8855, 8859, 8863, 8867, 8871, 8876, - 8880, 8883, 8886, 8889, 8892, 8895, 8898, 8901, 8904, 8908, 8911, 8914, - 8919, 8924, 8930, 8933, 8940, 8949, 8954, 8958, 0, 8965, 8970, 8974, - 8978, 8982, 8986, 8990, 8994, 8998, 9002, 9006, 9010, 9015, 9020, 9027, - 9033, 9039, 9045, 9050, 9058, 9066, 9071, 9077, 9083, 9089, 9095, 9099, - 9103, 9107, 9114, 9124, 9128, 9132, 9136, 9142, 9150, 9154, 9158, 9165, - 9169, 9173, 9177, 9184, 9191, 9203, 9207, 9211, 9215, 9225, 9234, 9238, - 9245, 9252, 9259, 9268, 9279, 9287, 9291, 9300, 9311, 9319, 9332, 9340, - 9348, 9356, 9364, 9370, 9379, 9386, 9390, 9398, 9402, 9409, 9417, 9421, - 9427, 9434, 9441, 9445, 9453, 9457, 9464, 9468, 9476, 9480, 9488, 9494, - 9500, 9507, 9514, 9521, 9527, 9531, 9538, 9546, 9552, 9559, 9566, 9572, - 9581, 9589, 9596, 9602, 9606, 9609, 9613, 9619, 9627, 9631, 9637, 9643, - 9649, 9656, 9659, 9666, 9671, 9679, 9684, 9688, 9700, 9712, 9718, 9724, - 9729, 9735, 9740, 9746, 9756, 9763, 9772, 9782, 9788, 9793, 9798, 9802, - 9806, 9811, 9816, 9822, 9830, 9838, 9849, 9854, 9862, 9870, 9877, 9883, - 9889, 9895, 9901, 9907, 9913, 9919, 9925, 9931, 9938, 9945, 9952, 9958, - 9966, 9974, 9980, 9987, 9994, 9999, 10004, 10008, 10015, 10022, 10031, - 10040, 10043, 10048, 10053, 0, 10058, 10062, 10066, 10072, 10076, 10080, - 10086, 10090, 10098, 10102, 10106, 10110, 10114, 10118, 10124, 10128, - 10134, 10138, 10142, 10146, 10150, 10154, 10159, 10162, 10166, 10171, - 10175, 10179, 10183, 10187, 10191, 10197, 10203, 10209, 10213, 10217, - 10222, 10226, 10230, 10235, 10239, 10243, 10250, 10257, 10261, 10265, - 10270, 10274, 10278, 10281, 10286, 10289, 10292, 10297, 10302, 10306, - 10310, 10316, 10322, 10325, 0, 0, 10328, 10334, 10340, 10346, 10356, - 10368, 10380, 10397, 10409, 10420, 10427, 10434, 10445, 10460, 10471, - 10477, 10486, 10494, 10506, 10516, 10524, 10536, 10543, 10551, 10563, - 10569, 10575, 10583, 10591, 10598, 10603, 10613, 10620, 10630, 10640, - 10653, 10667, 10681, 10691, 10702, 10713, 10726, 10739, 10753, 10765, - 10777, 10790, 10803, 10815, 10828, 10836, 10844, 10849, 10854, 10859, - 10864, 10869, 10874, 10879, 10884, 10889, 10894, 10899, 10904, 10909, - 10914, 10919, 10924, 10929, 10934, 10939, 10944, 10949, 10954, 10959, - 10964, 10969, 10974, 10979, 10984, 10989, 10994, 10999, 11004, 11008, - 11013, 11018, 11023, 11028, 11033, 11037, 11041, 11045, 11049, 11053, - 11057, 11061, 11065, 11069, 11073, 11077, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 11082, 11086, 11089, 11092, 11095, 11098, 11101, 11104, - 11107, 11110, 11113, 11116, 11120, 11123, 11126, 11129, 11133, 11136, - 11140, 11143, 11147, 11150, 11154, 11158, 11162, 11166, 11169, 11173, - 11177, 11181, 11185, 11188, 11192, 11198, 11201, 11205, 11209, 11212, - 11216, 11219, 11225, 11231, 11237, 11242, 11249, 11256, 11264, 11271, - 11277, 11283, 11290, 11295, 11300, 11305, 11310, 11316, 11320, 11323, - 11327, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11330, 11334, 11338, - 11342, 11347, 11350, 11354, 11357, 11361, 11364, 11368, 11372, 11376, - 11381, 11386, 11389, 11393, 11398, 11403, 11406, 11410, 11413, 11417, - 11421, 11425, 11429, 11433, 11437, 11441, 11445, 11449, 11453, 11457, - 11461, 11465, 11469, 11473, 11477, 11481, 11485, 11489, 11493, 11496, - 11500, 11504, 11508, 11511, 11514, 11517, 11521, 11525, 11529, 11533, - 11537, 11541, 11545, 11549, 0, 0, 11552, 11556, 11560, 11565, 11569, - 11574, 11578, 11583, 11588, 11594, 11600, 11606, 11610, 11615, 11621, - 11627, 11631, 11636, 0, 0, 11640, 11643, 11649, 11655, 11660, 0, 0, 0, - 11665, 11669, 11673, 11677, 11681, 11685, 11689, 11693, 11697, 11702, - 11707, 11712, 11718, 11721, 11725, 11729, 11732, 11735, 11738, 11741, - 11744, 11747, 11750, 11753, 11756, 11760, 11767, 0, 0, 0, 0, 0, 0, 0, 0, - 11772, 11776, 11780, 11786, 11790, 0, 11794, 11798, 11802, 0, 11806, - 11809, 11813, 11816, 11820, 11823, 11827, 11831, 0, 0, 11835, 11838, 0, - 0, 11842, 11845, 11849, 11852, 11856, 11860, 11864, 11868, 11872, 11876, - 11880, 11884, 11888, 11892, 11896, 11900, 11904, 11908, 11912, 11916, - 11920, 11924, 0, 11928, 11931, 11935, 11939, 11943, 11946, 11949, 0, - 11952, 0, 0, 0, 11956, 11960, 11964, 11968, 0, 0, 11971, 11975, 11979, - 11984, 11988, 11993, 11997, 12002, 12007, 0, 0, 12013, 12017, 0, 0, - 12022, 12026, 12031, 12035, 0, 0, 0, 0, 0, 0, 0, 0, 12041, 0, 0, 0, 0, - 12047, 12051, 0, 12055, 12059, 12064, 12069, 12074, 0, 0, 12080, 12084, - 12087, 12090, 12093, 12096, 12099, 12102, 12105, 12108, 12111, 12120, - 12128, 12132, 12136, 12142, 12148, 12154, 12160, 12174, 12181, 0, 0, 0, - 0, 0, 0, 12184, 12190, 12194, 0, 12198, 12201, 12205, 12208, 12212, - 12215, 0, 0, 0, 0, 12219, 12223, 0, 0, 12227, 12231, 12235, 12238, 12242, - 12246, 12250, 12254, 12258, 12262, 12266, 12270, 12274, 12278, 12282, - 12286, 12290, 12294, 12298, 12302, 12306, 12310, 0, 12314, 12317, 12321, - 12325, 12329, 12332, 12335, 0, 12338, 12342, 0, 12346, 12350, 0, 12354, - 12358, 0, 0, 12361, 0, 12365, 12370, 12374, 12379, 12383, 0, 0, 0, 0, - 12388, 12393, 0, 0, 12398, 12403, 12408, 0, 0, 0, 12412, 0, 0, 0, 0, 0, - 0, 0, 12416, 12420, 12424, 12428, 0, 12432, 0, 0, 0, 0, 0, 0, 0, 12436, - 12440, 12443, 12446, 12449, 12452, 12455, 12458, 12461, 12464, 12467, - 12470, 12473, 12476, 12479, 12484, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 12488, 12492, 12496, 0, 12500, 12503, 12507, 12510, 12514, 12517, 12521, - 12525, 12529, 0, 12534, 12537, 12541, 0, 12546, 12549, 12553, 12556, - 12560, 12564, 12568, 12572, 12576, 12580, 12584, 12588, 12592, 12596, - 12600, 12604, 12608, 12612, 12616, 12620, 12624, 12628, 0, 12632, 12635, - 12639, 12643, 12647, 12650, 12653, 0, 12656, 12660, 0, 12664, 12668, - 12672, 12676, 12680, 0, 0, 12683, 12687, 12691, 12696, 12700, 12705, - 12709, 12714, 12719, 12725, 0, 12731, 12735, 12740, 0, 12746, 12750, - 12755, 0, 0, 12759, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12762, - 12767, 12772, 12777, 0, 0, 12783, 12787, 12790, 12793, 12796, 12799, - 12802, 12805, 12808, 12811, 0, 12814, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 12818, 12822, 12826, 0, 12830, 12833, 12837, 12840, 12844, - 12847, 12851, 12855, 0, 0, 12859, 12862, 0, 0, 12866, 12869, 12873, - 12876, 12880, 12884, 12888, 12892, 12896, 12900, 12904, 12908, 12912, - 12916, 12920, 12924, 12928, 12932, 12936, 12940, 12944, 12948, 0, 12952, - 12955, 12959, 12963, 12967, 12970, 12973, 0, 12976, 12980, 0, 12984, - 12988, 12992, 12996, 13000, 0, 0, 13003, 13007, 13011, 13016, 13020, - 13025, 13029, 13034, 13039, 0, 0, 13045, 13049, 0, 0, 13054, 13058, - 13063, 0, 0, 0, 0, 0, 0, 0, 0, 13067, 13073, 0, 0, 0, 0, 13079, 13083, 0, - 13087, 13091, 13096, 13101, 13106, 0, 0, 13112, 13116, 13119, 13122, - 13125, 13128, 13131, 13134, 13137, 13140, 13143, 13146, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13150, 13154, 0, 13158, 13161, 13165, - 13168, 13172, 13175, 0, 0, 0, 13179, 13182, 13186, 0, 13190, 13193, - 13197, 13201, 0, 0, 0, 13204, 13208, 0, 13212, 0, 13216, 13220, 0, 0, 0, - 13224, 13228, 0, 0, 0, 13232, 13236, 13240, 0, 0, 0, 13243, 13246, 13249, - 13252, 13256, 13260, 13264, 13268, 13272, 13276, 13280, 13284, 0, 0, 0, - 0, 13287, 13292, 13296, 13301, 13305, 0, 0, 0, 13310, 13314, 13319, 0, - 13324, 13328, 13333, 13338, 0, 0, 13342, 0, 0, 0, 0, 0, 0, 13345, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13351, 13355, 13358, 13361, 13364, - 13367, 13370, 13373, 13376, 13379, 13382, 13386, 13391, 13396, 13400, - 13404, 13408, 13412, 13416, 13421, 13425, 0, 0, 0, 0, 0, 0, 13428, 13432, - 13436, 0, 13440, 13443, 13447, 13450, 13454, 13457, 13461, 13465, 0, - 13469, 13472, 13476, 0, 13480, 13483, 13487, 13491, 13494, 13498, 13502, - 13506, 13510, 13514, 13518, 13522, 13526, 13530, 13534, 13538, 13542, - 13546, 13550, 13554, 13558, 13562, 13566, 0, 13570, 13573, 13577, 13581, - 13585, 13588, 13591, 13594, 13598, 13602, 0, 13606, 13610, 13614, 13618, - 13622, 0, 0, 0, 13625, 13629, 13634, 13638, 13643, 13647, 13652, 13657, - 0, 13663, 13667, 13672, 0, 13677, 13681, 13686, 13691, 0, 0, 0, 0, 0, 0, - 0, 13695, 13699, 0, 13705, 13709, 0, 0, 0, 0, 0, 0, 13713, 13718, 13723, - 13728, 0, 0, 13734, 13738, 13741, 13744, 13747, 13750, 13753, 13756, - 13759, 13762, 0, 0, 0, 0, 0, 0, 0, 0, 13765, 13778, 13790, 13802, 13814, - 13826, 13838, 13850, 0, 0, 13854, 13858, 0, 13862, 13865, 13869, 13872, - 13876, 13879, 13883, 13887, 0, 13891, 13894, 13898, 0, 13902, 13905, - 13909, 13913, 13916, 13920, 13924, 13928, 13932, 13936, 13940, 13944, - 13948, 13952, 13956, 13960, 13964, 13968, 13972, 13976, 13980, 13984, - 13988, 0, 13992, 13995, 13999, 14003, 14007, 14010, 14013, 14016, 14020, - 14024, 0, 14028, 14032, 14036, 14040, 14044, 0, 0, 14047, 14051, 14055, - 14060, 14064, 14069, 14073, 14078, 14083, 0, 14089, 14093, 14098, 0, - 14103, 14107, 14112, 14117, 0, 0, 0, 0, 0, 0, 0, 14121, 14125, 0, 0, 0, - 0, 0, 0, 0, 14131, 0, 14135, 14140, 14145, 14150, 0, 0, 14156, 14160, - 14163, 14166, 14169, 14172, 14175, 14178, 14181, 14184, 0, 14187, 14191, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 14195, 14199, 0, 14203, - 14206, 14210, 14213, 14217, 14220, 14224, 14228, 0, 14232, 14235, 14239, - 0, 14243, 14246, 14250, 14254, 14257, 14261, 14265, 14269, 14273, 14277, - 14281, 14285, 14289, 14293, 14297, 14301, 14305, 14309, 14313, 14317, - 14321, 14325, 14329, 0, 14333, 14336, 14340, 14344, 14348, 14351, 14354, - 14357, 14361, 14365, 14369, 14373, 14377, 14381, 14385, 14389, 0, 0, 0, - 14392, 14396, 14401, 14405, 14410, 14414, 14419, 14424, 0, 14430, 14434, - 14439, 0, 14444, 14448, 14453, 14458, 0, 0, 0, 0, 0, 0, 0, 0, 0, 14462, - 0, 0, 0, 0, 0, 0, 0, 0, 14468, 14473, 14478, 14483, 0, 0, 14489, 14493, - 14496, 14499, 14502, 14505, 14508, 14511, 14514, 14517, 14520, 14524, - 14529, 14534, 14540, 14546, 0, 0, 0, 14552, 14556, 14562, 14567, 14573, - 14578, 14584, 0, 0, 14590, 14594, 0, 14598, 14602, 14606, 14610, 14614, - 14618, 14622, 14626, 14630, 14634, 14638, 14642, 14646, 14650, 14654, - 14658, 14662, 14666, 0, 0, 0, 14670, 14676, 14682, 14688, 14694, 14700, - 14706, 14712, 14718, 14724, 14730, 14736, 14744, 14750, 14756, 14762, - 14768, 14774, 14780, 14786, 14792, 14798, 14804, 14810, 0, 14816, 14822, - 14828, 14834, 14840, 14846, 14850, 14856, 14860, 0, 14864, 0, 0, 14870, - 14874, 14880, 14886, 14892, 14896, 14902, 0, 0, 0, 14906, 0, 0, 0, 0, - 14910, 14915, 14922, 14929, 14936, 14943, 0, 14950, 0, 14957, 14962, - 14967, 14974, 14981, 14990, 15001, 15010, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 15015, 15022, 15029, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 15034, 15040, 15046, 15052, 15058, 15064, 15070, 15076, 15082, - 15088, 15094, 15100, 15106, 15112, 15118, 15123, 15129, 15135, 15141, - 15147, 15153, 15158, 15164, 15170, 15176, 15182, 15188, 15194, 15200, - 15206, 15212, 15218, 15224, 15229, 15235, 15241, 15245, 15251, 15255, - 15261, 15267, 15273, 15279, 15285, 15291, 15296, 15302, 15306, 15311, - 15317, 15323, 15329, 15334, 15340, 15346, 15352, 15357, 15363, 0, 0, 0, - 0, 15367, 15373, 15378, 15384, 15389, 15397, 15405, 15409, 15413, 15417, - 15423, 15429, 15435, 15441, 15445, 15449, 15453, 15457, 15461, 15464, - 15467, 15470, 15473, 15476, 15479, 15482, 15485, 15488, 15492, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15496, 15500, 0, 15506, 0, 0, 15512, 15516, - 0, 15520, 0, 0, 15526, 0, 0, 0, 0, 0, 0, 15530, 15534, 15537, 15543, 0, - 15549, 15553, 15557, 15561, 15567, 15573, 15579, 0, 15585, 15589, 15593, - 0, 15599, 0, 15605, 0, 0, 15609, 15615, 0, 15621, 15624, 15630, 15633, - 15637, 15644, 15649, 15654, 15658, 15663, 15668, 15673, 15677, 0, 15682, - 15689, 15695, 0, 0, 15701, 15705, 15710, 15714, 15719, 0, 15724, 0, - 15729, 15735, 15741, 15747, 15753, 15757, 0, 0, 15760, 15764, 15767, - 15770, 15773, 15776, 15779, 15782, 15785, 15788, 0, 0, 15791, 15796, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 15801, 15805, 15816, 15831, 15846, 15856, - 15867, 15880, 15891, 15897, 15905, 15915, 15921, 15929, 15933, 15939, - 15945, 15953, 15963, 15971, 15984, 15990, 15998, 16006, 16018, 16025, - 16033, 16041, 16049, 16057, 16065, 16073, 16083, 16087, 16090, 16093, - 16096, 16099, 16102, 16105, 16108, 16111, 16114, 16118, 16122, 16126, - 16130, 16134, 16138, 16142, 16146, 16150, 16155, 16161, 16171, 16185, - 16195, 16201, 16207, 16215, 16223, 16231, 16239, 16245, 16251, 16254, - 16258, 16262, 16266, 16270, 16274, 16278, 0, 16282, 16286, 16290, 16294, - 16298, 16302, 16306, 16310, 16314, 16318, 16322, 16326, 16329, 16333, - 16337, 16341, 16344, 16348, 16352, 16356, 16360, 16364, 16368, 16372, - 16376, 16379, 16382, 16386, 16390, 16394, 16398, 16401, 16404, 16408, - 16413, 16417, 0, 0, 0, 0, 16421, 16426, 16430, 16435, 16439, 16444, - 16449, 16455, 16460, 16466, 16470, 16475, 16479, 16484, 16494, 16500, - 16505, 16511, 16521, 16527, 16531, 16535, 16541, 16547, 16555, 16561, - 16569, 0, 0, 0, 0, 16577, 16582, 16588, 16594, 16600, 16606, 16612, - 16618, 0, 16624, 16630, 16636, 16642, 16648, 16654, 16660, 16666, 16672, - 16678, 16684, 16690, 16695, 16701, 16707, 16713, 16718, 16724, 16730, - 16736, 16742, 16748, 16754, 16760, 16766, 16771, 16776, 16782, 16788, - 16794, 16800, 16805, 16810, 16816, 16824, 16831, 0, 16838, 16845, 16858, - 16865, 16872, 16880, 16888, 16894, 16900, 16906, 16916, 16921, 16927, - 16937, 16947, 0, 16957, 16967, 16975, 16987, 16999, 17005, 17019, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17034, 17037, 17041, - 17045, 17049, 17053, 17057, 17061, 17065, 17069, 17073, 17077, 17081, - 17085, 17089, 17093, 17097, 17101, 17105, 17109, 17113, 17117, 17120, - 17124, 17128, 17132, 17135, 17138, 17141, 17145, 17149, 17153, 17156, - 17160, 17163, 17168, 17171, 17175, 17178, 17182, 17185, 17190, 17193, - 17197, 17204, 17209, 17213, 17218, 17222, 17227, 17231, 17236, 17243, - 17249, 17254, 17258, 17262, 17266, 17270, 17274, 17280, 17286, 17293, - 17299, 17305, 17309, 17312, 17315, 17318, 17321, 17324, 17327, 17330, - 17333, 17336, 17342, 17346, 17350, 17354, 17358, 17362, 17366, 17370, - 17374, 17379, 17383, 17388, 17393, 17399, 17404, 17410, 17416, 17422, - 17428, 17434, 17443, 17451, 17460, 17468, 17477, 17486, 17497, 17507, - 17517, 17528, 17539, 17549, 17559, 17569, 17579, 17589, 17599, 17609, - 17619, 17627, 17634, 17640, 17647, 17652, 17658, 17664, 17670, 17676, - 17682, 17688, 17694, 17700, 17706, 17712, 17718, 17723, 17732, 17739, - 17745, 17752, 17760, 17766, 17772, 17778, 17784, 17792, 17800, 17810, - 17818, 17826, 17832, 17837, 17842, 17847, 17852, 17857, 17862, 17867, - 17872, 0, 0, 0, 0, 17877, 17882, 17888, 17893, 17898, 17903, 17908, - 17913, 17918, 17923, 17928, 17933, 17938, 17943, 17948, 17953, 17958, - 17963, 17968, 17973, 17978, 17983, 17988, 17993, 17998, 18003, 18008, - 18013, 18018, 18023, 18028, 18033, 18038, 18043, 18048, 18053, 18058, - 18063, 18068, 18073, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 18078, 18082, 18086, - 18090, 18094, 18098, 18102, 18106, 18110, 18114, 18118, 18122, 18126, - 18130, 18134, 18138, 18142, 18146, 18150, 18154, 18158, 18162, 18166, - 18170, 18174, 18178, 18182, 18186, 18190, 18194, 18198, 18202, 18206, - 18210, 18214, 18218, 18222, 18226, 18230, 18234, 18238, 18242, 18247, - 18251, 18256, 0, 0, 0, 18261, 18265, 18269, 18273, 18277, 18281, 18285, - 18289, 18293, 18297, 18301, 18305, 18309, 18313, 18317, 18321, 18325, - 18329, 18333, 18337, 18341, 18345, 18349, 18353, 18357, 18361, 18365, - 18369, 18373, 18377, 18381, 18385, 18389, 18393, 18397, 18401, 18405, - 18409, 18413, 18417, 18421, 18425, 18429, 18433, 18437, 18441, 18445, - 18449, 18453, 18457, 18461, 18465, 18469, 18473, 18477, 18481, 18485, - 18489, 18493, 18497, 18501, 18505, 18509, 18513, 18517, 18521, 18525, - 18529, 18533, 18537, 18541, 18545, 18549, 18553, 18557, 18561, 18565, - 18569, 18573, 18577, 18581, 18585, 18589, 18593, 18597, 18601, 18605, - 18609, 18613, 18617, 0, 0, 0, 0, 0, 18621, 18625, 18629, 18632, 18636, - 18639, 18643, 18647, 18650, 18654, 18658, 18661, 18665, 18669, 18673, - 18677, 18680, 18684, 18688, 18692, 18696, 18700, 18704, 18707, 18711, - 18715, 18719, 18723, 18727, 18731, 18735, 18739, 18743, 18747, 18751, - 18755, 18759, 18763, 18767, 18771, 18775, 18779, 18783, 18787, 18791, - 18795, 18799, 18803, 18807, 18811, 18815, 18819, 18823, 18827, 18831, - 18835, 18839, 18843, 18847, 18851, 18855, 18859, 18863, 18867, 18871, - 18875, 18879, 18883, 0, 0, 0, 0, 0, 18887, 18891, 18895, 18899, 18903, - 18907, 18911, 18915, 18919, 18923, 18927, 18931, 18935, 18939, 18943, - 18947, 18951, 18955, 18959, 18963, 18967, 18971, 18975, 18979, 18983, - 18987, 18991, 18995, 18999, 19003, 19007, 19011, 19015, 19019, 19023, - 19027, 19031, 19035, 19039, 19043, 19047, 19051, 19055, 19059, 19063, - 19067, 19071, 19075, 19079, 19083, 19087, 19091, 19095, 19099, 19103, - 19107, 19111, 19115, 19119, 19123, 19127, 19131, 19135, 19139, 19143, - 19147, 19151, 19155, 19159, 19163, 19167, 19171, 19175, 19179, 19183, - 19187, 19191, 19195, 19199, 19203, 19207, 19211, 0, 0, 0, 0, 0, 0, 19215, - 19218, 19222, 19226, 19230, 19234, 19238, 19242, 19246, 19250, 19254, + 75, 78, 82, 86, 91, 96, 101, 105, 110, 115, 120, 124, 129, 134, 138, 142, + 146, 150, 155, 160, 164, 168, 173, 177, 182, 187, 192, 197, 202, 205, + 209, 212, 216, 219, 223, 227, 232, 237, 242, 246, 251, 256, 261, 265, + 270, 275, 279, 283, 287, 291, 296, 301, 305, 309, 314, 318, 323, 328, + 333, 338, 343, 347, 350, 354, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 356, 360, 365, + 368, 371, 374, 377, 380, 383, 385, 388, 394, 402, 404, 408, 411, 413, + 416, 419, 422, 425, 429, 432, 435, 439, 441, 444, 450, 458, 465, 472, + 479, 484, 491, 497, 504, 511, 518, 526, 531, 539, 546, 552, 559, 566, + 574, 581, 589, 597, 602, 610, 617, 623, 630, 637, 644, 647, 653, 660, + 666, 673, 680, 687, 692, 698, 705, 711, 718, 725, 732, 740, 745, 753, + 760, 766, 773, 780, 788, 795, 803, 811, 816, 824, 831, 837, 844, 851, + 858, 861, 867, 874, 880, 887, 894, 901, 906, 914, 921, 928, 935, 942, + 949, 956, 963, 970, 978, 986, 994, 1002, 1010, 1018, 1026, 1034, 1041, + 1048, 1055, 1062, 1069, 1076, 1083, 1090, 1097, 1104, 1111, 1118, 1126, + 1134, 1142, 1150, 1158, 1166, 1174, 1182, 1190, 1198, 1205, 1212, 1220, + 1228, 1236, 1244, 1252, 1260, 1268, 1276, 1284, 1290, 1295, 1300, 1308, + 1316, 1324, 1332, 1337, 1344, 1351, 1359, 1367, 1375, 1383, 1393, 1403, + 1410, 1417, 1424, 1431, 1439, 1447, 1455, 1463, 1474, 1479, 1484, 1491, + 1498, 1505, 1512, 1519, 1526, 1531, 1536, 1543, 1550, 1558, 1566, 1574, + 1582, 1589, 1596, 1604, 1612, 1620, 1628, 1636, 1644, 1652, 1660, 1668, + 1676, 1683, 1690, 1697, 1704, 1711, 1718, 1725, 1732, 1740, 1748, 1755, + 1762, 1769, 1776, 1784, 1792, 1800, 1808, 1816, 1823, 1830, 1838, 1846, + 1854, 1862, 1867, 1873, 1879, 1886, 1893, 1898, 1903, 1909, 1916, 1923, + 1930, 1937, 1945, 1953, 1959, 1964, 1969, 1975, 1982, 1989, 1996, 2001, + 2006, 2011, 2018, 2025, 2032, 2039, 2046, 2051, 2059, 2069, 2078, 2085, + 2092, 2097, 2102, 2109, 2116, 2120, 2125, 2130, 2135, 2142, 2151, 2158, + 2165, 2174, 2181, 2188, 2193, 2200, 2207, 2214, 2221, 2228, 2233, 2240, + 2247, 2255, 2260, 2265, 2270, 2280, 2284, 2290, 2296, 2302, 2308, 2316, + 2329, 2337, 2342, 2352, 2357, 2362, 2372, 2377, 2384, 2391, 2399, 2407, + 2414, 2421, 2428, 2435, 2445, 2455, 2464, 2473, 2483, 2493, 2503, 2513, + 2518, 2528, 2538, 2548, 2558, 2566, 2574, 2581, 2588, 2596, 2604, 2612, + 2620, 2627, 2634, 2644, 2654, 2662, 2670, 2678, 2683, 2693, 2698, 2705, + 2712, 2717, 2722, 2730, 2738, 2748, 2758, 2765, 2772, 2780, 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, 3354, 3360, 3366, 3373, + 3380, 3391, 3401, 3408, 3415, 3422, 3429, 3434, 3439, 3445, 3451, 3457, + 3465, 3473, 3480, 3485, 3490, 3497, 3503, 3510, 3519, 3528, 3537, 3544, + 3550, 3556, 3561, 3568, 3574, 3581, 3588, 3595, 3600, 3605, 3615, 3623, + 3632, 3637, 3642, 3652, 3659, 3667, 3676, 3681, 3687, 3693, 3700, 3705, + 3710, 3720, 3728, 3737, 3745, 3753, 3762, 3767, 3774, 3781, 3786, 3797, + 3805, 3813, 3819, 3828, 3833, 3838, 3845, 3851, 3857, 3863, 3869, 3878, + 3886, 3891, 3899, 3905, 3913, 3921, 3927, 3933, 3939, 3947, 3955, 3961, + 3969, 3975, 3980, 3987, 3995, 4004, 4011, 4018, 4028, 4035, 4042, 4052, + 4059, 4066, 4073, 4079, 4085, 4094, 4106, 4111, 4118, 4123, 4127, 4132, + 4140, 4147, 4152, 4157, 4161, 4166, 4171, 4175, 4180, 4186, 4192, 4198, + 4205, 4210, 4215, 4220, 4225, 4231, 4233, 4238, 4242, 4248, 4254, 4260, + 4265, 4272, 4279, 4285, 4292, 4300, 4308, 4313, 4318, 4322, 4327, 4329, + 4331, 4334, 4336, 4339, 4344, 4349, 4355, 4360, 4364, 4368, 4373, 4381, + 4387, 4392, 4398, 4403, 4409, 4417, 4425, 4429, 4433, 4438, 4444, 4450, + 4456, 4462, 4467, 4475, 4484, 4493, 4498, 4504, 4511, 4518, 4525, 4532, + 4536, 4542, 4547, 4552, 4557, 4562, 4565, 4568, 4571, 4574, 4577, 4580, + 4584, 4588, 4594, 4597, 4602, 4608, 4614, 4617, 4622, 4627, 4631, 4636, + 4642, 4648, 4654, 4659, 4664, 4669, 4672, 4678, 4683, 4688, 4692, 4697, + 4703, 4709, 4712, 4716, 4720, 4724, 4727, 4730, 4735, 4739, 4746, 4750, + 4756, 4760, 4766, 4770, 4774, 4778, 4783, 4788, 4794, 4799, 4806, 4812, + 4818, 4824, 4827, 4831, 4835, 4839, 4843, 4848, 4853, 4857, 4861, 4867, + 4871, 4875, 4880, 4886, 4891, 4896, 4900, 4906, 4911, 4916, 4921, 4926, + 4932, 4935, 4939, 4944, 4949, 4958, 4964, 4969, 4973, 4978, 4982, 4987, + 4991, 4995, 5000, 5004, 5010, 5015, 5020, 5025, 5030, 5035, 5040, 5046, + 5052, 5058, 5063, 5068, 5074, 5080, 5086, 5091, 5096, 5103, 5110, 5114, + 5120, 5127, 0, 0, 5134, 5137, 5145, 5154, 5164, 0, 0, 0, 0, 0, 5168, + 5171, 5176, 5184, 5189, 5197, 5205, 0, 5213, 0, 5221, 5229, 5237, 5248, + 5253, 5258, 5263, 5268, 5273, 5278, 5283, 5288, 5293, 5298, 5303, 5308, + 5313, 5318, 5323, 5328, 0, 5333, 5338, 5343, 5348, 5353, 5358, 5363, + 5368, 5376, 5384, 5392, 5400, 5408, 5416, 5427, 5432, 5437, 5442, 5447, + 5452, 5457, 5462, 5467, 5472, 5477, 5482, 5487, 5492, 5497, 5502, 5507, + 5512, 5518, 5523, 5528, 5533, 5538, 5543, 5548, 5553, 5561, 5569, 5577, + 5585, 5593, 5598, 5602, 5606, 5613, 5623, 5633, 5637, 5641, 5645, 5651, + 5658, 5662, 5667, 5671, 5676, 5680, 5685, 5689, 5694, 5699, 5704, 5709, + 5714, 5719, 5724, 5729, 5734, 5739, 5744, 5749, 5754, 5759, 5764, 5768, + 5772, 5778, 5782, 5787, 5793, 5800, 5805, 5810, 5817, 5822, 5827, 5833, + 5841, 5850, 5860, 5868, 5873, 5878, 5883, 5890, 5895, 5901, 5906, 5911, + 5916, 5921, 5926, 5931, 5939, 5945, 5950, 5954, 5959, 5964, 5969, 5974, + 5979, 5984, 5989, 5993, 5999, 6003, 6008, 6013, 6018, 6022, 6027, 6032, + 6037, 6042, 6046, 6051, 6055, 6060, 6065, 6070, 6075, 6081, 6086, 6092, + 6096, 6101, 6105, 6109, 6114, 6119, 6124, 6129, 6134, 6139, 6144, 6148, + 6154, 6158, 6163, 6168, 6173, 6177, 6182, 6187, 6192, 6197, 6201, 6206, + 6210, 6215, 6220, 6225, 6230, 6236, 6241, 6247, 6251, 6256, 6260, 6268, + 6273, 6278, 6283, 6290, 6295, 6301, 6306, 6311, 6316, 6321, 6326, 6331, + 6339, 6345, 6350, 6355, 6360, 6365, 6370, 6376, 6382, 6389, 6396, 6405, + 6414, 6421, 6428, 6437, 6446, 6451, 6456, 6461, 6466, 6471, 6476, 6481, + 6486, 6497, 6508, 6513, 6518, 6525, 6532, 6540, 6548, 6553, 6558, 6563, + 6568, 6572, 6576, 6580, 6585, 6590, 6594, 6601, 6606, 6616, 6626, 6632, + 6638, 6646, 6654, 6662, 6670, 6677, 6684, 6693, 6702, 6710, 6718, 6726, + 6734, 6741, 6748, 6755, 6762, 6768, 6774, 6780, 6786, 6794, 6802, 6809, + 6816, 6825, 6834, 6840, 6846, 6854, 6862, 6870, 6878, 6884, 6890, 6898, + 6906, 6914, 6922, 6929, 6936, 6944, 6952, 6960, 6968, 6973, 6978, 6985, + 6992, 7002, 7012, 7016, 7024, 7032, 7038, 7044, 7052, 7060, 7067, 7074, + 7082, 7090, 7097, 7104, 7112, 7120, 7125, 7132, 7139, 7146, 7153, 7159, + 7165, 7173, 7181, 7186, 7191, 7199, 7207, 7215, 7223, 7231, 7239, 7246, + 7253, 7261, 7269, 7277, 7285, 7292, 7299, 7305, 7311, 7320, 7329, 7336, + 7343, 7350, 7357, 7364, 7371, 7378, 7385, 7393, 7401, 7409, 7417, 7425, + 7433, 7442, 7451, 7458, 7465, 7472, 7479, 7486, 7493, 7500, 7507, 7514, + 7521, 7528, 7535, 7542, 7549, 7556, 7563, 7570, 7577, 7584, 7591, 7597, + 7603, 7610, 7617, 7622, 7627, 7632, 7637, 7642, 7647, 7652, 7657, 7662, + 7667, 7673, 7679, 7688, 7697, 7706, 7715, 7723, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 7731, 7736, 7741, 7746, 7751, 7756, 7761, 7766, 7771, 7775, + 7780, 7785, 7790, 7795, 7800, 7805, 7810, 7815, 7820, 7825, 7830, 7835, + 7840, 7845, 7850, 7855, 7860, 7865, 7869, 7874, 7879, 7884, 7889, 7894, + 7899, 7904, 7909, 7914, 0, 0, 7919, 7926, 7929, 7933, 7937, 7940, 7944, + 0, 7948, 7953, 7958, 7963, 7968, 7973, 7978, 7983, 7988, 7992, 7997, + 8002, 8007, 8012, 8017, 8022, 8027, 8032, 8037, 8042, 8047, 8052, 8057, + 8062, 8067, 8072, 8077, 8082, 8086, 8091, 8096, 8101, 8106, 8111, 8116, + 8121, 8126, 8131, 8136, 0, 8143, 8148, 0, 0, 0, 0, 0, 0, 8151, 8156, + 8161, 8166, 8173, 8180, 8185, 8190, 8195, 8200, 8205, 8210, 8215, 8222, + 8227, 8234, 8241, 8246, 8253, 8258, 8263, 8268, 8275, 8280, 8285, 8292, + 8301, 8306, 8311, 8316, 8321, 8327, 8332, 8339, 8346, 8353, 8358, 8363, + 8368, 8373, 8378, 8383, 8393, 8398, 8406, 8411, 8416, 8421, 8426, 8433, + 8440, 8447, 8453, 8459, 8466, 0, 0, 0, 0, 0, 0, 0, 0, 8473, 8477, 8481, + 8485, 8489, 8493, 8497, 8501, 8505, 8509, 8513, 8518, 8522, 8526, 8531, + 8535, 8540, 8544, 8548, 8552, 8557, 8561, 8566, 8570, 8574, 8578, 8582, + 0, 0, 0, 0, 0, 8586, 8593, 8601, 8608, 8613, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 8618, 8621, 8625, 8630, 0, 0, 8634, 8640, 8646, 8649, 8656, 8665, + 8668, 8671, 8676, 8682, 8686, 8694, 8700, 8706, 8714, 8718, 8723, 8734, + 8739, 8743, 8747, 8751, 0, 0, 8754, 8761, 0, 8765, 8769, 8776, 8782, + 8789, 8795, 8801, 8805, 8809, 8815, 8819, 8823, 8827, 8831, 8835, 8839, + 8843, 8847, 8851, 8855, 8859, 8863, 8867, 8871, 8875, 8879, 8883, 8891, + 8899, 8909, 8918, 8927, 8930, 8934, 8938, 8942, 8946, 8950, 8954, 8958, + 8962, 8967, 8971, 8974, 8977, 8980, 8983, 8986, 8989, 8992, 8995, 8999, + 9002, 9005, 9010, 9015, 9021, 9024, 9031, 9040, 9045, 9049, 0, 9056, + 9061, 9065, 9069, 9073, 9077, 9081, 9085, 9089, 9093, 9097, 9101, 9106, + 9111, 9118, 9124, 9130, 9136, 9141, 9149, 9157, 9162, 9168, 9174, 9180, + 9186, 9190, 9194, 9198, 9205, 9215, 9219, 9223, 9227, 9233, 9241, 9245, + 9249, 9256, 9260, 9264, 9268, 9275, 9282, 9294, 9298, 9302, 9306, 9316, + 9325, 9329, 9337, 9344, 9351, 9360, 9371, 9379, 9383, 9392, 9403, 9411, + 9424, 9432, 9440, 9448, 9456, 9462, 9471, 9478, 9482, 9490, 9494, 9501, + 9509, 9513, 9519, 9526, 9533, 9537, 9545, 9549, 9556, 9560, 9568, 9572, + 9580, 9588, 9595, 9603, 9611, 9618, 9624, 9628, 9635, 9643, 9649, 9656, + 9663, 9669, 9678, 9686, 9693, 9699, 9703, 9706, 9710, 9716, 9724, 9728, + 9734, 9740, 9747, 9754, 9757, 9764, 9769, 9777, 9782, 9786, 9799, 9812, + 9818, 9825, 9830, 9836, 9841, 9847, 9857, 9864, 9873, 9883, 9889, 9894, + 9899, 9903, 9907, 9912, 9917, 9923, 9931, 9939, 9950, 9955, 9964, 9973, + 9980, 9986, 9992, 9998, 10004, 10010, 10016, 10022, 10028, 10034, 10041, + 10048, 10055, 10061, 10069, 10078, 10084, 10091, 10098, 10103, 10108, + 10112, 10119, 10126, 10135, 10144, 10147, 10152, 10157, 0, 10162, 10166, + 10170, 10176, 10180, 10184, 10190, 10194, 10202, 10206, 10210, 10214, + 10218, 10222, 10228, 10232, 10238, 10242, 10246, 10250, 10254, 10258, + 10263, 10266, 10270, 10275, 10279, 10283, 10287, 10291, 10295, 10301, + 10307, 10313, 10317, 10321, 10326, 10330, 10334, 10339, 10343, 10347, + 10354, 10361, 10365, 10369, 10374, 10378, 10382, 10385, 10390, 10393, + 10396, 10401, 10406, 10410, 10414, 10420, 10426, 10429, 0, 0, 10432, + 10438, 10444, 10450, 10460, 10472, 10484, 10501, 10513, 10524, 10532, + 10539, 10550, 10565, 10576, 10582, 10591, 10599, 10611, 10621, 10629, + 10641, 10648, 10656, 10668, 10674, 10680, 10688, 10696, 10704, 10710, + 10720, 10727, 10737, 10747, 10760, 10774, 10788, 10798, 10809, 10820, + 10833, 10846, 10860, 10872, 10884, 10897, 10910, 10922, 10935, 10944, + 10952, 10957, 10962, 10967, 10972, 10977, 10982, 10987, 10992, 10997, + 11002, 11007, 11012, 11017, 11022, 11027, 11032, 11037, 11042, 11047, + 11052, 11057, 11062, 11067, 11072, 11077, 11082, 11087, 11092, 11097, + 11102, 11107, 11112, 11116, 11121, 11126, 11131, 11136, 11141, 11145, + 11149, 11153, 11157, 11161, 11165, 11169, 11173, 11177, 11181, 11185, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11190, 11195, 11199, 11203, 11207, + 11211, 11215, 11219, 11223, 11227, 11231, 11235, 11240, 11244, 11248, + 11252, 11257, 11261, 11266, 11270, 11275, 11279, 11284, 11289, 11294, + 11299, 11303, 11308, 11313, 11318, 11323, 11327, 11332, 11339, 11343, + 11348, 11352, 11356, 11361, 11365, 11372, 11379, 11386, 11392, 11400, + 11408, 11417, 11425, 11432, 11439, 11447, 11453, 11459, 11465, 11471, + 11478, 11483, 11487, 11492, 0, 0, 0, 0, 0, 11496, 11500, 11504, 11508, + 11512, 11516, 11520, 11524, 11528, 11532, 11536, 11540, 11544, 11548, + 11552, 11556, 11560, 11564, 11568, 11572, 11576, 11580, 11584, 11588, + 11592, 11596, 11600, 11607, 11613, 11618, 11622, 11629, 11635, 11640, + 11646, 11651, 11655, 11661, 11667, 11672, 11676, 11680, 11685, 11689, + 11693, 11698, 0, 0, 11702, 11707, 11712, 11717, 11722, 11727, 11732, + 11736, 11743, 11748, 11753, 11758, 11763, 11768, 11775, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11780, 11786, + 11790, 11794, 11798, 11803, 11806, 11810, 11813, 11817, 11820, 11824, + 11828, 11832, 11837, 11842, 11845, 11849, 11854, 11859, 11862, 11866, + 11869, 11873, 11877, 11881, 11885, 11889, 11893, 11897, 11901, 11905, + 11909, 11913, 11917, 11921, 11925, 11929, 11933, 11937, 11941, 11944, + 11948, 11951, 11955, 11959, 11963, 11966, 11969, 11972, 11976, 11980, + 11984, 11988, 11992, 11996, 12000, 12004, 0, 0, 12007, 12011, 12015, + 12020, 12024, 12029, 12033, 12038, 12043, 12049, 12055, 12061, 12065, + 12070, 12076, 12082, 12086, 12091, 12095, 0, 12101, 12104, 12110, 12116, + 12121, 12126, 0, 0, 12133, 12137, 12141, 12145, 12149, 12153, 12157, + 12161, 12165, 12170, 12175, 12180, 12186, 12189, 12193, 12197, 12200, + 12203, 12206, 12209, 12212, 12215, 12218, 12221, 12224, 12228, 12235, 0, + 0, 0, 0, 0, 0, 12240, 12244, 12248, 12252, 12256, 12262, 12266, 0, 12270, + 12274, 12278, 0, 12282, 12285, 12289, 12292, 12296, 12299, 12303, 12307, + 0, 0, 12311, 12314, 0, 0, 12318, 12321, 12325, 12328, 12332, 12336, + 12340, 12344, 12348, 12352, 12356, 12360, 12364, 12368, 12372, 12376, + 12380, 12384, 12388, 12392, 12396, 12400, 0, 12403, 12406, 12410, 12414, + 12418, 12421, 12424, 0, 12427, 0, 0, 0, 12431, 12435, 12439, 12443, 0, 0, + 12446, 12450, 12454, 12459, 12463, 12468, 12472, 12477, 12482, 0, 0, + 12488, 12492, 0, 0, 12497, 12501, 12506, 12510, 0, 0, 0, 0, 0, 0, 0, 0, + 12516, 0, 0, 0, 0, 12522, 12526, 0, 12530, 12534, 12539, 12544, 12549, 0, + 0, 12555, 12559, 12562, 12565, 12568, 12571, 12574, 12577, 12580, 12583, + 12586, 12595, 12604, 12608, 12612, 12618, 12624, 12630, 12636, 12650, + 12657, 12660, 0, 0, 0, 0, 0, 12664, 12670, 12674, 0, 12678, 12681, 12685, + 12688, 12692, 12695, 0, 0, 0, 0, 12699, 12703, 0, 0, 12707, 12711, 12715, + 12718, 12722, 12726, 12730, 12734, 12738, 12742, 12746, 12750, 12754, + 12758, 12762, 12766, 12770, 12774, 12778, 12782, 12786, 12790, 0, 12793, + 12796, 12800, 12804, 12808, 12811, 12814, 0, 12817, 12821, 0, 12825, + 12829, 0, 12833, 12837, 0, 0, 12840, 0, 12844, 12849, 12853, 12858, + 12862, 0, 0, 0, 0, 12867, 12872, 0, 0, 12877, 12882, 12887, 0, 0, 0, + 12891, 0, 0, 0, 0, 0, 0, 0, 12895, 12899, 12903, 12907, 0, 12911, 0, 0, + 0, 0, 0, 0, 0, 12915, 12919, 12922, 12925, 12928, 12931, 12934, 12937, + 12940, 12943, 12946, 12949, 12952, 12955, 12958, 12963, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 12967, 12971, 12975, 0, 12979, 12982, 12986, 12989, 12993, + 12996, 13000, 13004, 13008, 0, 13013, 13016, 13020, 0, 13025, 13028, + 13032, 13035, 13039, 13043, 13047, 13051, 13055, 13059, 13063, 13067, + 13071, 13075, 13079, 13083, 13087, 13091, 13095, 13099, 13103, 13107, 0, + 13110, 13113, 13117, 13121, 13125, 13128, 13131, 0, 13134, 13138, 0, + 13142, 13146, 13150, 13154, 13158, 0, 0, 13161, 13165, 13169, 13174, + 13178, 13183, 13187, 13192, 13197, 13203, 0, 13209, 13213, 13218, 0, + 13224, 13228, 13233, 0, 0, 13237, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 13240, 13245, 13250, 13255, 0, 0, 13261, 13265, 13268, 13271, + 13274, 13277, 13280, 13283, 13286, 13289, 0, 13292, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 13296, 13300, 13304, 0, 13308, 13311, 13315, + 13318, 13322, 13325, 13329, 13333, 0, 0, 13337, 13340, 0, 0, 13344, + 13347, 13351, 13354, 13358, 13362, 13366, 13370, 13374, 13378, 13382, + 13386, 13390, 13394, 13398, 13402, 13406, 13410, 13414, 13418, 13422, + 13426, 0, 13429, 13432, 13436, 13440, 13444, 13447, 13450, 0, 13453, + 13457, 0, 13461, 13465, 13469, 13473, 13477, 0, 0, 13480, 13484, 13488, + 13493, 13497, 13502, 13506, 13511, 13516, 0, 0, 13522, 13526, 0, 0, + 13531, 13535, 13540, 0, 0, 0, 0, 0, 0, 0, 0, 13544, 13550, 0, 0, 0, 0, + 13556, 13560, 0, 13564, 13568, 13573, 13578, 13583, 0, 0, 13589, 13593, + 13596, 13599, 13602, 13605, 13608, 13611, 13614, 13617, 13620, 13623, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13627, 13631, 0, 13635, + 13638, 13642, 13645, 13649, 13652, 0, 0, 0, 13656, 13659, 13663, 0, + 13667, 13670, 13674, 13678, 0, 0, 0, 13681, 13685, 0, 13689, 0, 13693, + 13697, 0, 0, 0, 13701, 13705, 0, 0, 0, 13709, 13712, 13716, 0, 0, 0, + 13719, 13722, 13725, 13728, 13732, 13736, 13740, 13744, 13748, 13752, + 13756, 13760, 0, 0, 0, 0, 13763, 13768, 13772, 13777, 13781, 0, 0, 0, + 13786, 13790, 13795, 0, 13800, 13804, 13809, 13814, 0, 0, 13818, 0, 0, 0, + 0, 0, 0, 13821, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13827, 13831, + 13834, 13837, 13840, 13843, 13846, 13849, 13852, 13855, 13858, 13862, + 13867, 13872, 13876, 13880, 13884, 13888, 13892, 13897, 13901, 0, 0, 0, + 0, 0, 0, 13904, 13908, 13912, 0, 13916, 13919, 13923, 13926, 13930, + 13933, 13937, 13941, 0, 13945, 13948, 13952, 0, 13956, 13959, 13963, + 13967, 13970, 13974, 13978, 13982, 13986, 13990, 13994, 13998, 14002, + 14006, 14010, 14014, 14018, 14022, 14026, 14030, 14034, 14038, 14042, 0, + 14045, 14048, 14052, 14056, 14060, 14063, 14066, 14069, 14073, 14077, 0, + 14081, 14085, 14089, 14093, 14097, 0, 0, 0, 14100, 14104, 14109, 14113, + 14118, 14122, 14127, 14132, 0, 14138, 14142, 14147, 0, 14152, 14156, + 14161, 14166, 0, 0, 0, 0, 0, 0, 0, 14170, 14174, 0, 14180, 14184, 0, 0, + 0, 0, 0, 0, 14188, 14193, 14198, 14203, 0, 0, 14209, 14213, 14216, 14219, + 14222, 14225, 14228, 14231, 14234, 14237, 0, 0, 0, 0, 0, 0, 0, 0, 14240, + 14253, 14265, 14277, 14289, 14301, 14313, 14325, 0, 0, 14329, 14333, 0, + 14337, 14340, 14344, 14347, 14351, 14354, 14358, 14362, 0, 14366, 14369, + 14373, 0, 14377, 14380, 14384, 14388, 14391, 14395, 14399, 14403, 14407, + 14411, 14415, 14419, 14423, 14427, 14431, 14435, 14439, 14443, 14447, + 14451, 14455, 14459, 14463, 0, 14466, 14469, 14473, 14477, 14481, 14484, + 14487, 14490, 14494, 14498, 0, 14502, 14506, 14510, 14514, 14518, 0, 0, + 14521, 14525, 14529, 14534, 14538, 14543, 14547, 14552, 14557, 0, 14563, + 14567, 14572, 0, 14577, 14581, 14586, 14591, 0, 0, 0, 0, 0, 0, 0, 14595, + 14599, 0, 0, 0, 0, 0, 0, 0, 14605, 0, 14609, 14614, 14619, 14624, 0, 0, + 14630, 14634, 14637, 14640, 14643, 14646, 14649, 14652, 14655, 14658, 0, + 14661, 14665, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 14669, 14673, + 0, 14677, 14680, 14684, 14687, 14691, 14694, 14698, 14702, 0, 14706, + 14709, 14713, 0, 14717, 14720, 14724, 14728, 14731, 14735, 14739, 14743, + 14747, 14751, 14755, 14759, 14763, 14767, 14771, 14775, 14779, 14783, + 14787, 14791, 14795, 14799, 14803, 0, 14806, 14809, 14813, 14817, 14821, + 14824, 14827, 14830, 14834, 14838, 14842, 14846, 14850, 14854, 14858, + 14862, 0, 0, 0, 14865, 14869, 14874, 14878, 14883, 14887, 14892, 14897, + 0, 14903, 14907, 14912, 0, 14917, 14921, 14926, 14931, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 14935, 0, 0, 0, 0, 0, 0, 0, 0, 14941, 14946, 14951, 14956, 0, 0, + 14962, 14966, 14969, 14972, 14975, 14978, 14981, 14984, 14987, 14990, + 14993, 14997, 15002, 15007, 15013, 15019, 0, 0, 0, 15025, 15029, 15035, + 15040, 15046, 15051, 15057, 0, 0, 15063, 15067, 0, 15071, 15075, 15079, + 15083, 15087, 15091, 15095, 15099, 15103, 15107, 15111, 15115, 15119, + 15123, 15127, 15131, 15135, 15139, 0, 0, 0, 15143, 15149, 15155, 15161, + 15167, 15173, 15179, 15185, 15191, 15197, 15203, 15209, 15217, 15223, + 15229, 15235, 15241, 15247, 15253, 15259, 15265, 15271, 15277, 15283, 0, + 15289, 15295, 15301, 15307, 15313, 15319, 15323, 15329, 15333, 0, 15337, + 0, 0, 15343, 15347, 15353, 15359, 15365, 15369, 15375, 0, 0, 0, 15379, 0, + 0, 0, 0, 15383, 15388, 15395, 15402, 15409, 15416, 0, 15423, 0, 15430, + 15435, 15440, 15447, 15454, 15463, 15474, 15483, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15488, 15495, 15502, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 15507, 15513, 15519, 15525, 15531, 15537, 15543, 15549, + 15555, 15561, 15567, 15573, 15579, 15585, 15591, 15596, 15602, 15608, + 15614, 15620, 15626, 15631, 15637, 15643, 15649, 15655, 15661, 15667, + 15673, 15679, 15685, 15691, 15697, 15702, 15708, 15714, 15718, 15724, + 15728, 15734, 15740, 15746, 15752, 15758, 15764, 15769, 15775, 15779, + 15784, 15790, 15796, 15802, 15807, 15813, 15819, 15825, 15830, 15836, 0, + 0, 0, 0, 15840, 15846, 15851, 15857, 15862, 15870, 15878, 15882, 15886, + 15890, 15896, 15902, 15908, 15914, 15918, 15922, 15926, 15930, 15934, + 15937, 15940, 15943, 15946, 15949, 15952, 15955, 15958, 15961, 15965, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15969, 15973, 0, 15979, 0, 0, 15985, + 15989, 0, 15993, 0, 0, 15999, 0, 0, 0, 0, 0, 0, 16003, 16007, 16010, + 16016, 0, 16022, 16026, 16030, 16034, 16040, 16046, 16052, 0, 16058, + 16062, 16066, 0, 16072, 0, 16078, 0, 0, 16082, 16088, 0, 16094, 16097, + 16103, 16106, 16110, 16117, 16122, 16127, 16131, 16136, 16141, 16146, + 16150, 0, 16155, 16162, 16168, 0, 0, 16174, 16178, 16183, 16187, 16192, + 0, 16197, 0, 16202, 16208, 16214, 16220, 16226, 16230, 0, 0, 16233, + 16237, 16240, 16243, 16246, 16249, 16252, 16255, 16258, 16261, 0, 0, + 16264, 16269, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16274, 16278, 16289, 16304, + 16319, 16329, 16340, 16353, 16364, 16370, 16378, 16388, 16394, 16402, + 16406, 16412, 16418, 16426, 16436, 16444, 16457, 16463, 16471, 16479, + 16491, 16498, 16506, 16514, 16522, 16530, 16538, 16546, 16556, 16560, + 16563, 16566, 16569, 16572, 16575, 16578, 16581, 16584, 16587, 16591, + 16595, 16599, 16603, 16607, 16611, 16615, 16619, 16623, 16628, 16634, + 16644, 16658, 16668, 16674, 16680, 16688, 16696, 16704, 16712, 16718, + 16724, 16727, 16731, 16735, 16739, 16743, 16747, 16751, 0, 16755, 16759, + 16763, 16767, 16771, 16775, 16779, 16783, 16787, 16791, 16795, 16798, + 16801, 16805, 16809, 16813, 16816, 16820, 16824, 16828, 16832, 16836, + 16840, 16844, 16848, 16851, 16854, 16858, 16862, 16866, 16870, 16873, + 16876, 16880, 16885, 16889, 0, 0, 0, 0, 16893, 16898, 16902, 16907, + 16911, 16916, 16921, 16927, 16932, 16938, 16942, 16947, 16951, 16956, + 16966, 16972, 16977, 16983, 16993, 16999, 17003, 17007, 17013, 17019, + 17027, 17033, 17041, 0, 0, 0, 0, 17049, 17054, 17060, 17066, 17072, + 17078, 17084, 17090, 0, 17096, 17102, 17108, 17114, 17120, 17126, 17132, + 17138, 17144, 17150, 17156, 17161, 17166, 17172, 17178, 17184, 17189, + 17195, 17201, 17207, 17213, 17219, 17225, 17231, 17237, 17242, 17247, + 17253, 17259, 17265, 17271, 17276, 17281, 17287, 17295, 17302, 0, 17309, + 17316, 17329, 17336, 17343, 17351, 17359, 17365, 17371, 17377, 17387, + 17392, 17398, 17408, 17418, 0, 17428, 17438, 17446, 17458, 17470, 17476, + 17490, 17505, 17510, 17515, 17523, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 17531, 17534, 17538, 17542, 17546, 17550, 17554, 17558, 17562, + 17566, 17570, 17574, 17578, 17582, 17586, 17590, 17594, 17598, 17602, + 17606, 17610, 17613, 17616, 17620, 17624, 17628, 17631, 17634, 17637, + 17641, 17645, 17649, 17652, 17656, 17659, 17664, 17667, 17671, 17674, + 17678, 17681, 17686, 17689, 17693, 17700, 17705, 17709, 17714, 17718, + 17723, 17727, 17732, 17739, 17745, 17750, 17754, 17758, 17762, 17766, + 17770, 17776, 17782, 17789, 17795, 17801, 17805, 17808, 17811, 17814, + 17817, 17820, 17823, 17826, 17829, 17832, 17838, 17842, 17846, 17850, + 17854, 17858, 17862, 17866, 17870, 17875, 17879, 17884, 17889, 17895, + 17900, 17906, 17912, 17918, 17924, 17930, 17938, 17946, 17955, 17963, + 17972, 17981, 17992, 18002, 18012, 18023, 18034, 18044, 18054, 18064, + 18074, 18084, 18094, 18104, 18114, 18122, 18129, 18135, 18142, 18147, + 18153, 18159, 18165, 18171, 18177, 18183, 18188, 18194, 18200, 18206, + 18212, 18217, 18226, 18233, 18239, 18246, 18254, 18260, 18266, 18272, + 18278, 18286, 18294, 18304, 18312, 18320, 18326, 18331, 18336, 18341, + 18346, 18351, 18356, 18361, 18366, 18371, 18377, 18383, 18389, 18396, + 18401, 18407, 18412, 18417, 18422, 18427, 18432, 18437, 18442, 18447, + 18452, 18457, 18462, 18467, 18472, 18477, 18482, 18487, 18492, 18497, + 18502, 18507, 18512, 18517, 18522, 18527, 18532, 18537, 18542, 18547, + 18552, 18557, 18562, 18567, 18572, 18577, 18582, 18587, 18592, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 18597, 18601, 18605, 18609, 18613, 18617, 18621, + 18625, 18629, 18633, 18637, 18641, 18645, 18649, 18653, 18657, 18661, + 18665, 18669, 18673, 18677, 18681, 18685, 18689, 18693, 18697, 18701, + 18705, 18709, 18713, 18717, 18721, 18725, 18729, 18733, 18737, 18741, + 18745, 18749, 18753, 18757, 18761, 18766, 18770, 18775, 0, 0, 0, 18780, + 18784, 18788, 18792, 18796, 18800, 18804, 18808, 18812, 18816, 18820, + 18824, 18828, 18832, 18836, 18840, 18844, 18848, 18852, 18856, 18860, + 18864, 18868, 18872, 18876, 18880, 18884, 18888, 18892, 18896, 18900, + 18904, 18908, 18912, 18916, 18920, 18924, 18928, 18932, 18936, 18940, + 18944, 18948, 18952, 18956, 18960, 18964, 18968, 18972, 18976, 18980, + 18984, 18988, 18992, 18996, 19000, 19004, 19008, 19012, 19016, 19020, + 19024, 19028, 19032, 19036, 19040, 19044, 19048, 19052, 19056, 19060, + 19064, 19068, 19072, 19076, 19080, 19084, 19088, 19092, 19096, 19100, + 19104, 19108, 19112, 19116, 19120, 19124, 19128, 19132, 19136, 19140, + 19144, 19148, 19152, 19156, 19160, 19164, 19168, 19171, 19175, 19178, + 19182, 19186, 19189, 19193, 19197, 19200, 19204, 19208, 19212, 19216, + 19219, 19223, 19227, 19231, 19235, 19239, 19243, 19246, 19250, 19254, 19258, 19262, 19266, 19270, 19274, 19278, 19282, 19286, 19290, 19294, - 19298, 19302, 19306, 19310, 19313, 19317, 19321, 19325, 19329, 19333, - 19337, 19341, 19345, 19349, 19353, 19357, 19361, 19365, 19369, 19373, - 19376, 19380, 19384, 19388, 19392, 19396, 19400, 19404, 19408, 19412, - 19416, 19420, 19424, 19428, 19432, 19436, 19440, 19444, 19448, 19452, - 19456, 19460, 19464, 19468, 19472, 19476, 19480, 19484, 19488, 19492, - 19496, 19500, 0, 19504, 19508, 19512, 19516, 0, 0, 19520, 19524, 19528, - 19532, 19536, 19540, 19544, 0, 19548, 0, 19552, 19556, 19560, 19564, 0, - 0, 19568, 19572, 19576, 19580, 19584, 19588, 19592, 19596, 19600, 19604, - 19608, 19612, 19616, 19620, 19624, 19628, 19632, 19636, 19640, 19644, - 19648, 19652, 19656, 19659, 19663, 19667, 19671, 19675, 19679, 19683, - 19687, 19691, 19695, 19699, 19703, 19707, 19711, 19715, 19719, 19723, - 19727, 0, 19731, 19735, 19739, 19743, 0, 0, 19747, 19751, 19755, 19759, - 19763, 19767, 19771, 19775, 19779, 19783, 19787, 19791, 19795, 19799, - 19803, 19807, 19811, 19816, 19821, 19826, 19832, 19838, 19843, 19848, - 19854, 19857, 19861, 19865, 19869, 19873, 19877, 19881, 19885, 0, 19889, - 19893, 19897, 19901, 0, 0, 19905, 19909, 19913, 19917, 19921, 19925, - 19929, 0, 19933, 0, 19937, 19941, 19945, 19949, 0, 0, 19953, 19957, - 19961, 19965, 19969, 19973, 19977, 19981, 19985, 19990, 19995, 20000, - 20006, 20012, 20017, 0, 20022, 20026, 20030, 20034, 20038, 20042, 20046, - 20050, 20054, 20058, 20062, 20066, 20070, 20074, 20078, 20082, 20086, - 20089, 20093, 20097, 20101, 20105, 20109, 20113, 20117, 20121, 20125, - 20129, 20133, 20137, 20141, 20145, 20149, 20153, 20157, 20161, 20165, - 20169, 20173, 20177, 20181, 20185, 20189, 20193, 20197, 20201, 20205, - 20209, 20213, 20217, 20221, 20225, 20229, 20233, 20237, 20241, 20245, 0, - 20249, 20253, 20257, 20261, 0, 0, 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, 20492, 20496, 20500, 20504, 20508, 20512, 20516, 20520, - 20524, 20528, 0, 0, 0, 0, 20532, 20537, 20541, 20544, 20549, 20552, - 20555, 20558, 20563, 20567, 20572, 20575, 20578, 20581, 20584, 20587, - 20590, 20593, 20596, 20599, 20603, 20607, 20611, 20615, 20619, 20623, - 20627, 20631, 20635, 20639, 0, 0, 0, 20645, 20651, 20655, 20659, 20663, - 20669, 20673, 20677, 20681, 20687, 20691, 20695, 20699, 20705, 20709, - 20713, 20717, 20723, 20729, 20735, 20743, 20749, 20755, 20761, 20767, - 20773, 0, 0, 0, 0, 0, 0, 20779, 20782, 20785, 20788, 20791, 20794, 20797, - 20801, 20804, 20808, 20812, 20816, 20820, 20824, 20827, 20831, 20835, - 20839, 20843, 20847, 20851, 20855, 20859, 20863, 20867, 20871, 20874, - 20878, 20882, 20886, 20890, 20894, 20898, 20902, 20906, 20910, 20914, - 20918, 20922, 20926, 20930, 20934, 20938, 20942, 20946, 20950, 20953, - 20957, 20961, 20965, 20969, 20973, 20977, 20981, 20985, 20989, 20993, - 20997, 21001, 21005, 21009, 21013, 21017, 21021, 21025, 21029, 21033, - 21037, 21041, 21045, 21049, 21053, 21057, 21061, 21065, 21069, 21073, - 21077, 21081, 21085, 21088, 21092, 21096, 21100, 21104, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 21108, 21111, 21115, 21118, 21122, 21125, 21129, 21135, - 21140, 21144, 21147, 21151, 21155, 21160, 21164, 21169, 21173, 21178, - 21182, 21187, 21191, 21196, 21202, 21206, 21211, 21215, 21220, 21226, - 21230, 21236, 21242, 21246, 21251, 21259, 21267, 21274, 21279, 21284, - 21293, 21300, 21307, 21312, 21318, 21322, 21326, 21330, 21334, 21338, - 21342, 21346, 21350, 21354, 21358, 21364, 21369, 21374, 21377, 21381, - 21385, 21390, 21394, 21399, 21403, 21408, 21412, 21417, 21421, 21426, - 21430, 21435, 21439, 21444, 21450, 21454, 21459, 21463, 21467, 21471, - 21475, 21479, 21482, 21486, 21492, 21497, 21502, 21506, 21510, 21514, - 21519, 21523, 21528, 21532, 21537, 21540, 21544, 21548, 21553, 21557, - 21562, 21566, 21571, 21577, 21581, 21585, 21589, 21593, 21597, 21601, - 21605, 21609, 21613, 21617, 21621, 21627, 21630, 21634, 21638, 21643, - 21647, 21652, 21656, 21661, 21665, 21670, 21674, 21679, 21683, 21688, - 21692, 21697, 21703, 21707, 21711, 21717, 21723, 21729, 21735, 21739, - 21743, 21747, 21751, 21755, 21759, 21765, 21769, 21773, 21777, 21782, - 21786, 21791, 21795, 21800, 21804, 21809, 21813, 21818, 21822, 21827, - 21831, 21836, 21842, 21846, 21852, 21856, 21860, 21864, 21868, 21872, - 21876, 21882, 21885, 21889, 21893, 21898, 21902, 21907, 21911, 21916, - 21920, 21925, 21929, 21934, 21938, 21943, 21947, 21952, 21958, 21961, - 21965, 21969, 21974, 21979, 21983, 21987, 21991, 21995, 21999, 22003, - 22009, 22013, 22017, 22021, 22026, 22030, 22035, 22039, 22044, 22050, - 22053, 22058, 22062, 22066, 22070, 22074, 22078, 22082, 22086, 22092, - 22096, 22100, 22104, 22109, 22113, 22118, 22122, 22127, 22131, 22136, - 22140, 22145, 22149, 22154, 22158, 22163, 22166, 22170, 22174, 22178, - 22182, 22186, 22190, 22194, 22198, 22204, 22208, 22212, 22216, 22221, - 22225, 22230, 22234, 22239, 22243, 22248, 22252, 22257, 22261, 22266, - 22270, 22275, 22281, 22284, 22289, 22293, 22298, 22304, 22310, 22316, - 22322, 22328, 22334, 22340, 22344, 22348, 22352, 22356, 22360, 22364, - 22368, 22372, 22377, 22381, 22386, 22390, 22395, 22399, 22404, 22408, - 22413, 22417, 22422, 22426, 22431, 22435, 22439, 22443, 22447, 22451, - 22455, 22459, 22465, 22468, 22472, 22476, 22481, 22485, 22490, 22494, - 22499, 22503, 22508, 22512, 22517, 22521, 22526, 22530, 22535, 22541, - 22545, 22551, 22556, 22562, 22566, 22572, 22577, 22581, 22585, 22589, - 22593, 22597, 22602, 22605, 22609, 22614, 22618, 22623, 22626, 22630, - 22634, 22638, 22642, 22646, 22650, 22654, 22658, 22662, 22666, 22670, - 22675, 22679, 22683, 22689, 22693, 22699, 22703, 22709, 22713, 22717, - 22721, 22725, 22729, 22734, 22738, 22742, 22746, 22750, 22754, 22758, - 22762, 22766, 22770, 22774, 22780, 22786, 22792, 22798, 22804, 22809, - 22815, 22820, 22825, 22829, 22833, 22837, 22841, 22845, 22849, 22853, - 22857, 22861, 22865, 22869, 22873, 22877, 22882, 22887, 22892, 22896, - 22900, 22904, 22908, 22912, 22916, 22920, 22924, 22928, 22932, 22938, - 22944, 22950, 22956, 22962, 22968, 22974, 22980, 22986, 22990, 22994, - 22998, 23002, 23006, 23010, 23014, 23020, 23026, 23032, 23038, 23044, - 23050, 23056, 23062, 23068, 23073, 23078, 23083, 23088, 23094, 23100, - 23106, 23112, 23118, 23124, 23130, 23136, 23142, 23148, 23154, 23159, - 23165, 23171, 23177, 23182, 23187, 23192, 23197, 23202, 23207, 23212, - 23217, 23222, 23227, 23232, 23237, 23241, 23246, 23251, 23256, 23261, - 23266, 23271, 23276, 23281, 23286, 23291, 23296, 23301, 23306, 23311, - 23316, 23321, 23326, 23331, 23336, 23341, 23346, 23351, 23356, 23361, - 23366, 23371, 23376, 23381, 23386, 23390, 23395, 23400, 23405, 23410, - 23415, 23420, 23425, 23430, 23435, 23440, 23445, 23450, 23455, 23460, - 23465, 23470, 23475, 23480, 23485, 23490, 23495, 23500, 23505, 23510, - 23515, 23520, 23525, 23530, 23535, 23540, 23545, 23549, 23554, 23559, - 23564, 23569, 23574, 23578, 23583, 23589, 23594, 23599, 23604, 23609, - 23615, 23620, 23625, 23630, 23635, 23640, 23645, 23650, 23655, 23660, - 23665, 23670, 23675, 23680, 23685, 23690, 23695, 23700, 23705, 23710, - 23715, 23720, 23725, 23730, 23735, 23740, 23745, 23750, 23755, 23760, - 23765, 23770, 23775, 23780, 23785, 23790, 23795, 23800, 23805, 23810, - 23815, 23820, 23825, 23830, 23835, 23841, 23846, 23851, 23856, 23861, - 23866, 23871, 23876, 23881, 23886, 23891, 23896, 23901, 23906, 23911, - 23916, 23921, 23926, 23931, 23936, 23941, 23946, 23951, 23956, 23961, - 23966, 23971, 23976, 23981, 23986, 23991, 23996, 24001, 24006, 24011, - 24016, 24021, 24026, 24031, 24037, 24041, 24045, 24049, 24053, 24057, - 24061, 24065, 0, 0, 0, 0, 0, 0, 0, 0, 0, 24069, 24074, 24079, 24084, - 24089, 24094, 24099, 24104, 24109, 24114, 24119, 24124, 24129, 24134, - 24139, 24144, 24149, 24154, 24159, 24164, 24169, 24174, 24179, 24184, - 24189, 24194, 24199, 24204, 24209, 0, 0, 0, 24215, 24225, 24228, 24235, - 24239, 24243, 24247, 24255, 24259, 24264, 24269, 24274, 24278, 24283, - 24288, 24291, 24295, 24299, 24308, 24312, 24316, 24322, 24325, 24329, - 24336, 24340, 24348, 24353, 24358, 24363, 24368, 24377, 24382, 24386, - 24395, 24398, 24404, 24408, 24414, 24419, 24425, 24433, 24439, 24444, - 24451, 24456, 24460, 24464, 24474, 24480, 24484, 24494, 24500, 24504, - 24508, 24515, 24522, 24527, 24532, 24541, 24545, 24549, 24553, 24561, - 24568, 24572, 24576, 24580, 24584, 24588, 24592, 24596, 24600, 24604, - 24608, 24612, 24617, 24622, 24627, 24631, 24635, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 24639, 24643, 24647, 24651, 24655, 24660, 24665, - 24670, 24675, 24680, 24684, 24689, 24693, 0, 24697, 24702, 24707, 24712, - 24716, 24721, 24726, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 24731, 24735, - 24739, 24743, 24747, 24752, 24757, 24762, 24767, 24772, 24776, 24781, - 24785, 24789, 24793, 24798, 24803, 24808, 24812, 24817, 24822, 24827, - 24833, 0, 0, 0, 0, 0, 0, 0, 0, 0, 24838, 24842, 24846, 24850, 24854, - 24859, 24864, 24869, 24874, 24879, 24883, 24888, 24892, 24896, 24900, - 24905, 24910, 24915, 24919, 24924, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 24929, 24933, 24937, 24941, 24945, 24950, 24955, 24960, 24965, 24970, - 24974, 24979, 24983, 0, 24987, 24992, 24997, 0, 25002, 25007, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 25012, 25015, 25019, 25023, 25027, 25031, 25035, - 25039, 25043, 25047, 25051, 25055, 25059, 25063, 25067, 25071, 25075, - 25079, 25082, 25086, 25090, 25094, 25098, 25102, 25106, 25110, 25114, - 25118, 25122, 25126, 25130, 25134, 25138, 25141, 25145, 25149, 25155, - 25161, 25167, 25173, 25179, 25185, 25191, 25197, 25203, 25209, 25215, - 25221, 25227, 25233, 25242, 25251, 25257, 25263, 25269, 25274, 25278, - 25283, 25288, 25293, 25297, 25302, 25307, 25312, 25316, 25321, 25325, - 25330, 25335, 25340, 25345, 25349, 25353, 25357, 25361, 25365, 25369, - 25373, 25377, 25381, 25385, 25391, 25395, 25399, 25403, 25407, 25411, - 25419, 25425, 25429, 25435, 25439, 25445, 25449, 0, 0, 25453, 25457, - 25460, 25463, 25466, 25469, 25472, 25475, 25478, 25481, 0, 0, 0, 0, 0, 0, - 25484, 25492, 25500, 25508, 25516, 25524, 25532, 25540, 25548, 25556, 0, - 0, 0, 0, 0, 0, 25564, 25567, 25570, 25573, 25578, 25581, 25586, 25593, - 25601, 25606, 25613, 25616, 25623, 25630, 25637, 0, 25641, 25645, 25648, - 25651, 25654, 25657, 25660, 25663, 25666, 25669, 0, 0, 0, 0, 0, 0, 25672, - 25675, 25678, 25681, 25684, 25687, 25691, 25695, 25699, 25703, 25707, - 25711, 25714, 25718, 25722, 25725, 25729, 25733, 25737, 25741, 25745, - 25749, 25753, 25756, 25759, 25763, 25767, 25770, 25774, 25778, 25782, - 25786, 25790, 25794, 25798, 25802, 25809, 25814, 25819, 25824, 25829, - 25835, 25841, 25847, 25853, 25858, 25864, 25870, 25875, 25881, 25887, - 25893, 25899, 25905, 25910, 25916, 25921, 25927, 25933, 25939, 25945, - 25951, 25956, 25961, 25967, 25973, 25978, 25984, 25989, 25995, 26000, - 26005, 26011, 26017, 26023, 26029, 26035, 26041, 26047, 26053, 26059, - 26065, 26071, 26077, 26082, 26087, 26092, 26098, 0, 0, 0, 0, 0, 0, 0, 0, - 26104, 26113, 26122, 26130, 26138, 26148, 26156, 26165, 26172, 26179, - 26186, 26194, 26202, 26210, 26218, 26226, 26234, 26242, 26250, 26257, - 26265, 26273, 26281, 26289, 26297, 26307, 26317, 26327, 26337, 26347, - 26357, 26367, 26377, 26387, 26397, 26407, 26417, 26427, 26437, 26445, - 26453, 26463, 26471, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 26481, 26486, - 26489, 26493, 26497, 26501, 26505, 26509, 26513, 26517, 26521, 26525, - 26529, 26533, 26537, 26541, 26545, 26548, 26552, 26556, 26560, 26563, - 26566, 26569, 26573, 26577, 26581, 26585, 26589, 0, 0, 0, 26592, 26596, - 26600, 26604, 26609, 26614, 26619, 26624, 26628, 26632, 26637, 26642, 0, - 0, 0, 0, 26648, 26652, 26657, 26662, 26667, 26672, 26676, 26680, 26684, - 26689, 26693, 26697, 0, 0, 0, 0, 26701, 0, 0, 0, 26705, 26709, 26713, - 26717, 26720, 26723, 26726, 26729, 26732, 26735, 26738, 26741, 26744, - 26749, 26755, 26761, 26767, 26773, 26778, 26784, 26790, 26796, 26801, - 26807, 26812, 26818, 26824, 26829, 26835, 26841, 26847, 26853, 26858, - 26863, 26869, 26875, 26880, 26886, 26891, 26897, 26902, 26908, 0, 0, - 26914, 26920, 26926, 26932, 26938, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 26944, 26951, 26958, 26964, 26971, 26978, 26984, 26991, 26998, 27005, - 27012, 27018, 27025, 27032, 27038, 27045, 27052, 27059, 27066, 27073, - 27080, 27086, 27093, 27099, 27105, 27112, 27118, 27125, 27132, 27139, - 27146, 27153, 27160, 27166, 27173, 27180, 27186, 27193, 27200, 27207, - 27214, 27221, 0, 0, 0, 0, 0, 0, 27228, 27236, 27243, 27250, 27256, 27263, - 27269, 27276, 27282, 27289, 27296, 27303, 27310, 27317, 27324, 27331, - 27338, 27345, 27351, 27358, 27364, 27370, 27377, 27384, 27391, 27397, 0, - 0, 0, 0, 0, 0, 27403, 27409, 27414, 27419, 27424, 27429, 27434, 27439, - 27444, 27449, 0, 0, 0, 0, 27454, 27460, 27466, 27470, 27476, 27482, - 27488, 27494, 27500, 27506, 27512, 27518, 27524, 27530, 27536, 27542, - 27548, 27554, 27560, 27564, 27570, 27576, 27582, 27588, 27594, 27600, - 27606, 27612, 27618, 27624, 27630, 27636, 27642, 27648, 27654, 27658, - 27663, 27668, 27673, 27677, 27682, 27686, 27691, 27696, 27701, 27706, - 27711, 27716, 27721, 27726, 27731, 27735, 27739, 27744, 27749, 27754, - 27758, 27762, 27767, 27772, 27777, 27782, 0, 0, 27788, 27792, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 27799, 27805, - 27811, 27815, 27819, 27823, 27827, 27833, 27837, 27843, 27847, 27853, - 27859, 27867, 27873, 27881, 27885, 27889, 27893, 27899, 27902, 27907, - 27911, 27917, 27921, 27925, 27931, 27935, 27941, 27945, 27951, 27959, - 27967, 27975, 27981, 27985, 27991, 27995, 28001, 28005, 28008, 28014, - 28018, 28024, 28027, 28030, 28033, 28037, 28041, 28047, 28053, 28057, - 28060, 28064, 28069, 28074, 28081, 28086, 28093, 28100, 28109, 28116, - 28125, 28130, 28137, 28144, 28153, 28158, 28165, 28170, 28176, 28182, - 28188, 28194, 28200, 28206, 0, 0, 0, 0, 28212, 28216, 28219, 28222, - 28225, 28228, 28231, 28234, 28237, 28240, 28243, 28246, 28249, 28252, - 28257, 28262, 28267, 28270, 28275, 28280, 28285, 28290, 28297, 28302, - 28307, 28312, 28317, 28324, 28330, 28336, 28342, 28348, 28354, 28363, - 28372, 28378, 28384, 28393, 28402, 28411, 28420, 28429, 28438, 28447, - 28456, 0, 0, 0, 28465, 28469, 28473, 28477, 28480, 28483, 28486, 28490, - 28493, 28496, 28500, 28503, 28507, 28511, 28515, 28519, 28523, 28527, - 28531, 28535, 28539, 28543, 28546, 28550, 28554, 28558, 28561, 28564, - 28567, 28571, 28575, 28579, 28583, 28586, 28592, 28598, 28604, 28609, - 28614, 28619, 28624, 28629, 28634, 0, 0, 0, 28638, 28642, 28646, 28650, - 28653, 28656, 28659, 28662, 28665, 28668, 28671, 28674, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 28677, 28680, 28684, - 28688, 28692, 28696, 28700, 28704, 28708, 28712, 28716, 28720, 28724, - 28728, 28732, 28735, 28739, 28743, 28747, 28751, 28755, 28759, 28762, - 28766, 28770, 28774, 28778, 28781, 28784, 28788, 28791, 28795, 28799, - 28803, 28807, 28811, 28814, 28819, 28824, 28829, 28833, 28837, 28842, - 28846, 28851, 28855, 28861, 28866, 28871, 28876, 28882, 28887, 28893, - 28899, 28905, 28909, 0, 0, 0, 28913, 28918, 28927, 28932, 28939, 28944, - 28948, 28951, 28954, 28957, 28960, 28963, 28966, 28969, 28972, 0, 0, 0, - 28975, 28979, 28983, 28987, 28994, 29000, 29006, 29012, 29018, 29024, - 29030, 29036, 29042, 29048, 29055, 29062, 29069, 29076, 29083, 29090, - 29097, 29104, 29111, 29118, 29125, 29132, 29139, 29146, 29153, 29160, - 29167, 29174, 29181, 29188, 29195, 29202, 29209, 29216, 29223, 29230, - 29237, 29244, 29251, 29258, 29266, 29274, 29282, 29288, 29294, 29300, - 29308, 29317, 29322, 29328, 29334, 29342, 29348, 29354, 29360, 29365, - 29372, 29377, 29383, 29389, 29397, 29402, 29408, 29413, 29420, 29426, - 29434, 29442, 29448, 29454, 29461, 29468, 29474, 29480, 29486, 29492, - 29497, 29503, 29511, 29518, 29523, 29529, 29535, 29541, 29549, 29553, - 29559, 29565, 29571, 29577, 29583, 29589, 29593, 29598, 29603, 29610, - 29615, 29619, 29624, 29628, 29632, 29636, 29641, 29646, 29650, 29654, - 29658, 29663, 29667, 29672, 29677, 29681, 29686, 29690, 29695, 29699, - 29704, 29709, 29715, 29720, 29725, 29729, 29734, 29740, 29747, 29751, - 29756, 29761, 29765, 29770, 29774, 29780, 29787, 29794, 29799, 29804, - 29808, 29814, 29819, 29823, 29828, 29833, 29839, 29844, 29850, 29855, - 29861, 29867, 29873, 29879, 29886, 29893, 29900, 29907, 29914, 29919, - 29927, 29936, 29945, 29954, 29963, 29972, 29981, 29993, 30002, 30011, - 30020, 30025, 30030, 30036, 30044, 30052, 30059, 30066, 30073, 30080, - 30088, 30097, 30106, 30115, 30124, 30133, 30142, 30151, 30160, 30169, - 30178, 30187, 30196, 30205, 30214, 30222, 30231, 30242, 30250, 30260, - 30271, 30280, 30289, 30299, 30308, 30316, 30325, 30331, 30336, 30344, - 30349, 30356, 30361, 30370, 30375, 30380, 30387, 30392, 30397, 30405, - 30413, 30422, 30431, 30436, 30443, 30453, 30461, 30470, 30475, 30481, - 30486, 30493, 30498, 30507, 30512, 30517, 30522, 30529, 30534, 30539, - 30548, 30556, 30561, 30566, 30573, 30580, 30584, 30588, 30591, 30594, - 30597, 30600, 30603, 30606, 30613, 30616, 30619, 30624, 30628, 30632, - 30636, 30640, 30644, 30654, 30660, 30666, 30672, 30680, 30688, 30694, - 30699, 30705, 30711, 30716, 30722, 30728, 30733, 30739, 30745, 30753, - 30758, 30764, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 30770, 30775, 30784, 30792, 30800, 30807, 30814, 30821, 30828, - 30836, 30844, 30854, 30864, 30872, 30880, 30888, 30896, 30905, 30914, - 30922, 30930, 30939, 30948, 30958, 30968, 30977, 30986, 30994, 31002, - 31010, 31018, 31028, 31038, 31046, 31054, 31062, 31070, 31078, 31086, - 31094, 31102, 31109, 31116, 31124, 31132, 31141, 31150, 31159, 31168, - 31178, 31188, 31195, 31202, 31210, 31218, 31227, 31236, 31244, 31252, - 31264, 31276, 31285, 31294, 31303, 31312, 31319, 31326, 31334, 31342, - 31350, 31358, 31366, 31374, 31382, 31390, 31399, 31408, 31417, 31426, - 31435, 31444, 31453, 31462, 31472, 31482, 31491, 31500, 31507, 31514, - 31522, 31530, 31538, 31546, 31554, 31562, 31574, 31586, 31595, 31604, - 31612, 31620, 31628, 31636, 31647, 31658, 31669, 31680, 31692, 31704, - 31712, 31720, 31728, 31736, 31745, 31754, 31763, 31772, 31780, 31788, - 31796, 31804, 31812, 31820, 31829, 31838, 31847, 31856, 31863, 31870, - 31878, 31886, 31894, 31902, 31909, 31916, 31923, 31930, 31938, 31946, - 31954, 31962, 31970, 31978, 31985, 31992, 32000, 32008, 32016, 32024, - 32032, 32040, 32049, 32058, 32067, 32074, 32083, 32092, 32101, 32110, - 32120, 32129, 32135, 32140, 32147, 32154, 32162, 32170, 32179, 32188, - 32198, 32208, 32219, 32230, 32239, 32248, 32258, 32268, 32277, 32286, - 32296, 32306, 32317, 32328, 32337, 32346, 32356, 32366, 32373, 32380, - 32388, 32396, 32402, 32408, 32417, 32426, 32436, 32446, 32457, 32468, - 32477, 32486, 32496, 32506, 32515, 32524, 32532, 32540, 32547, 32554, - 32562, 32570, 32579, 32588, 32598, 32608, 32619, 32630, 32639, 32648, - 32658, 32668, 32677, 32686, 32696, 32706, 32717, 32728, 32737, 32746, - 32756, 32766, 32773, 32780, 32788, 32796, 32805, 32814, 32824, 32834, - 32845, 32856, 32865, 32874, 32884, 32894, 32902, 32910, 32918, 32926, - 32935, 32944, 32951, 32958, 32965, 32972, 32978, 32984, 32992, 33000, - 33008, 33016, 33026, 33036, 33046, 33056, 33066, 33076, 33084, 33092, - 33102, 33112, 33122, 33132, 33142, 33152, 33160, 33168, 33178, 33188, - 33198, 0, 0, 33208, 33216, 33224, 33234, 33244, 33254, 0, 0, 33264, - 33272, 33280, 33290, 33300, 33310, 33320, 33330, 33340, 33348, 33356, - 33366, 33376, 33386, 33396, 33406, 33416, 33424, 33432, 33442, 33452, - 33462, 33472, 33482, 33492, 33500, 33508, 33518, 33528, 33538, 33548, - 33558, 33568, 33576, 33584, 33594, 33604, 33614, 0, 0, 33624, 33632, - 33640, 33650, 33660, 33670, 0, 0, 33680, 33688, 33696, 33706, 33716, - 33726, 33736, 33746, 0, 33756, 0, 33764, 0, 33774, 0, 33784, 33794, - 33802, 33810, 33820, 33830, 33840, 33850, 33860, 33870, 33878, 33886, - 33896, 33906, 33916, 33926, 33936, 33946, 33954, 33962, 33970, 33978, - 33986, 33994, 34002, 34010, 34018, 34026, 34034, 34042, 34050, 0, 0, - 34058, 34068, 34078, 34091, 34104, 34117, 34130, 34143, 34156, 34166, - 34176, 34189, 34202, 34215, 34228, 34241, 34254, 34264, 34274, 34287, - 34300, 34313, 34326, 34339, 34352, 34362, 34372, 34385, 34398, 34411, - 34424, 34437, 34450, 34460, 34470, 34483, 34496, 34509, 34522, 34535, - 34548, 34558, 34568, 34581, 34594, 34607, 34620, 34633, 34646, 34654, - 34662, 34673, 34681, 0, 34692, 34700, 34711, 34719, 34727, 34735, 34743, - 34751, 34754, 34757, 34760, 34763, 34769, 34780, 34788, 0, 34799, 34807, - 34818, 34826, 34834, 34842, 34850, 34858, 34863, 34868, 34873, 34881, - 34889, 34900, 0, 0, 34911, 34919, 34930, 34938, 34946, 34954, 0, 34962, - 34967, 34972, 34977, 34985, 34993, 35004, 35015, 35023, 35031, 35039, - 35050, 35058, 35066, 35074, 35082, 35090, 35096, 35102, 0, 0, 35105, - 35116, 35124, 0, 35135, 35143, 35154, 35162, 35170, 35178, 35186, 35194, - 35197, 0, 35200, 35204, 35208, 35212, 35216, 35220, 35224, 35228, 35232, - 35236, 35240, 35244, 35250, 35256, 35262, 35265, 35268, 35270, 35274, - 35278, 35282, 35286, 35288, 35292, 35296, 35302, 35308, 35315, 35322, - 35327, 35332, 35338, 35344, 35346, 35349, 35351, 35355, 35359, 35363, - 35366, 35370, 35374, 35378, 35382, 35386, 35392, 35396, 35400, 35406, - 35411, 35418, 35420, 35423, 35427, 35430, 35434, 35439, 35441, 35450, - 35459, 35462, 35466, 35468, 35470, 35472, 35475, 35481, 35483, 35487, - 35491, 35498, 35505, 35509, 35514, 35519, 35524, 35528, 35532, 35536, - 35539, 35542, 35546, 35553, 35558, 35562, 35566, 35571, 35575, 35579, - 35584, 35589, 35593, 35597, 35601, 35603, 35608, 35613, 35617, 35621, - 35625, 35629, 0, 0, 0, 0, 0, 35633, 35639, 35645, 35651, 35657, 35662, - 35667, 35671, 0, 0, 35677, 35680, 35683, 35686, 35689, 35692, 35695, - 35699, 35703, 35708, 35713, 35718, 35724, 35728, 35731, 35734, 35737, - 35740, 35743, 35746, 35749, 35752, 35755, 35759, 35763, 35768, 35773, 0, - 35778, 35784, 35790, 35796, 35803, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 35810, 35813, 35816, 35819, 35824, 35827, 35830, 35833, 35836, 35839, - 35842, 35846, 35849, 35852, 35855, 35858, 35861, 35866, 35869, 35872, - 35875, 35878, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 35881, 35886, 35891, 35898, 35906, 35911, 35916, 35920, - 35924, 35929, 35936, 35943, 35947, 35952, 35957, 35962, 35967, 35974, - 35979, 35984, 35989, 35998, 36005, 36011, 36015, 36020, 36026, 36031, - 36038, 36046, 36054, 36058, 36062, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 36066, 36070, 36077, 36081, 36085, 36090, 36094, 36098, 36102, - 36104, 36108, 36111, 36114, 36118, 36121, 36125, 36133, 36136, 36140, - 36143, 36146, 36152, 36155, 36158, 36164, 36168, 36172, 36176, 36179, - 36183, 36186, 36190, 36192, 36195, 36198, 36202, 36204, 36208, 36211, - 36214, 36219, 36224, 36230, 36233, 36236, 36240, 36245, 36248, 36251, - 36254, 36258, 36262, 36265, 36268, 36270, 36273, 36276, 36279, 36283, - 36288, 36291, 36295, 36299, 36303, 36307, 36312, 36316, 36320, 36324, - 36329, 36334, 36339, 36343, 36347, 36352, 36356, 36359, 36362, 36364, - 36368, 0, 0, 0, 36374, 36381, 36388, 36395, 36402, 36409, 36417, 36424, - 36432, 36439, 36446, 36454, 36462, 36467, 36471, 36475, 36479, 36483, - 36487, 36491, 36495, 36499, 36503, 36508, 36513, 36518, 36523, 36529, - 36536, 36542, 36547, 36552, 36557, 36562, 36567, 36572, 36577, 36582, - 36587, 36593, 36599, 36605, 36611, 36618, 36626, 36633, 36643, 36650, - 36657, 36664, 36670, 36678, 36686, 36693, 0, 0, 0, 0, 0, 0, 0, 36701, - 36703, 36706, 36708, 36711, 36714, 36717, 36722, 36727, 36732, 36737, - 36741, 36745, 36749, 36753, 36758, 36764, 36769, 36775, 36780, 36785, - 36790, 36796, 36801, 36807, 36813, 36817, 36821, 36826, 36831, 36836, - 36841, 36846, 36854, 36862, 36870, 36878, 36885, 36893, 36900, 36907, - 36915, 36925, 36932, 36939, 36946, 36953, 36961, 36969, 36976, 36983, - 36991, 36999, 37004, 37012, 37017, 37022, 37028, 37033, 37039, 37046, - 37053, 37058, 37064, 37069, 37072, 37076, 37079, 37083, 37087, 37091, - 37097, 37103, 37109, 37115, 37119, 37123, 37127, 37131, 37137, 37143, - 37147, 37152, 37156, 37161, 37165, 37169, 37172, 37176, 37179, 37183, - 37190, 37198, 37209, 37220, 37225, 37234, 37241, 37249, 37257, 37261, - 37267, 37275, 37279, 37284, 37289, 37295, 37301, 37307, 37314, 37318, - 37322, 37327, 37330, 37332, 37336, 37340, 37347, 37351, 37353, 37355, - 37359, 37366, 37371, 37377, 37386, 37393, 37398, 37402, 37406, 37410, - 37413, 37416, 37419, 37423, 37427, 37431, 37435, 37439, 37442, 37446, - 37450, 37453, 37455, 37458, 37460, 37464, 37468, 37470, 37475, 37478, - 37482, 37486, 37490, 37492, 37494, 37496, 37499, 37503, 37507, 37511, - 37515, 37519, 37525, 37531, 37533, 37535, 37537, 37539, 37542, 37544, - 37548, 37550, 37554, 37556, 37561, 37565, 37569, 37571, 37574, 37578, - 37583, 37587, 37596, 37606, 37610, 37615, 37621, 37624, 37628, 37631, - 37636, 37640, 37646, 37650, 37661, 37669, 37673, 37677, 37683, 37687, - 37690, 37692, 37695, 37699, 37703, 37709, 37713, 37717, 37720, 37723, - 37727, 37732, 37737, 37742, 37747, 37752, 37759, 37766, 37770, 37774, - 37776, 37780, 37783, 37786, 37794, 37802, 37808, 37814, 37823, 37832, - 37837, 37842, 37850, 37858, 37860, 37862, 37867, 37872, 37878, 37884, - 37889, 37894, 37898, 37902, 37908, 37914, 37920, 37926, 37936, 37946, - 37953, 37960, 37962, 37966, 37970, 37975, 37980, 37987, 37994, 37997, - 38000, 38003, 38006, 38009, 38014, 38018, 38023, 38028, 38031, 38034, - 38038, 38042, 38046, 38051, 38054, 38057, 38060, 38063, 38065, 38067, - 38069, 38071, 38079, 38087, 38092, 38095, 38100, 38110, 38116, 38122, - 38128, 38136, 38144, 38155, 38159, 38163, 38165, 38171, 38173, 38175, - 38177, 38179, 38185, 38188, 38194, 38200, 38204, 38208, 38212, 38215, - 38219, 38223, 38225, 38234, 38243, 38248, 38253, 38258, 38264, 38270, - 38273, 38276, 38279, 38282, 38284, 38289, 38294, 38299, 38305, 38311, - 38318, 38325, 38330, 38335, 38340, 38345, 38353, 38361, 38369, 38377, - 38385, 38393, 38401, 38409, 38417, 38425, 38432, 38443, 38452, 38466, - 38469, 38474, 38480, 38486, 38493, 38507, 38522, 38528, 38534, 38541, - 38547, 38555, 38561, 38574, 38588, 38593, 38599, 38606, 38609, 38612, - 38614, 38617, 38620, 38622, 38624, 38628, 38631, 38634, 38637, 38640, - 38645, 38650, 38655, 38660, 38663, 38666, 38668, 38670, 38672, 38676, - 38680, 38684, 38690, 38693, 38695, 38697, 38702, 38707, 38712, 38717, - 38722, 38727, 38729, 38731, 38740, 38744, 38751, 38760, 38762, 38767, - 38772, 38779, 38783, 38785, 38789, 38791, 38795, 38799, 38803, 38805, - 38807, 38809, 38814, 38821, 38828, 38835, 38842, 38849, 38856, 38863, - 38870, 38876, 38882, 38889, 38896, 38903, 38910, 38916, 38922, 38929, - 38936, 38943, 38951, 38958, 38966, 38973, 38981, 38988, 38996, 39004, - 39011, 39019, 39026, 39034, 39041, 39049, 39056, 39063, 39070, 39077, - 39084, 39092, 39099, 39106, 39113, 39120, 39126, 39132, 39138, 39144, - 39152, 39160, 39166, 39172, 39178, 39184, 39189, 39195, 39202, 39210, - 39217, 39224, 39231, 39236, 39241, 39246, 39253, 39260, 39267, 39274, - 39279, 39283, 39292, 39298, 39301, 39309, 39312, 39317, 39322, 39325, - 39328, 39336, 39339, 39344, 39347, 39354, 39359, 39367, 39370, 39373, - 39376, 39381, 39386, 39389, 39392, 39399, 39402, 39407, 39414, 39418, - 39422, 39427, 39432, 39438, 39443, 39448, 39454, 39459, 39464, 39472, - 39478, 39485, 39493, 39499, 39506, 39514, 39523, 39530, 39536, 39544, - 39553, 39560, 39564, 39569, 39581, 39593, 39597, 39601, 39605, 39609, - 39619, 39623, 39628, 39633, 39638, 39643, 39648, 39653, 39663, 39673, - 39681, 39691, 39701, 39709, 39719, 39729, 39737, 39747, 39757, 39765, - 39773, 39783, 39793, 39796, 39799, 39802, 39807, 39811, 39817, 39824, - 39831, 39839, 39846, 39850, 39854, 39858, 39862, 39864, 39868, 39872, - 39877, 39882, 39889, 39896, 39899, 39906, 39908, 39910, 39914, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 39918, - 39922, 39929, 39936, 39943, 39950, 39954, 39958, 39962, 39966, 39971, - 39977, 39982, 39987, 39993, 39999, 40005, 40013, 40020, 40027, 40034, - 40041, 40047, 40053, 40062, 40066, 40073, 40077, 40081, 40087, 40093, - 40099, 40105, 40109, 40113, 40116, 40120, 40124, 40130, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 40136, 40139, - 40143, 40147, 40153, 40159, 40165, 40173, 40180, 40184, 40192, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 40197, 40200, - 40203, 40206, 40209, 40212, 40215, 40218, 40221, 40224, 40228, 40232, - 40236, 40240, 40244, 40248, 40252, 40256, 40260, 40264, 40268, 40271, - 40274, 40277, 40280, 40283, 40286, 40289, 40292, 40295, 40299, 40303, - 40307, 40311, 40315, 40319, 40323, 40327, 40331, 40335, 40339, 40345, - 40351, 40357, 40364, 40371, 40378, 40385, 40392, 40399, 40406, 40413, - 40420, 40427, 40434, 40441, 40448, 40455, 40462, 40469, 40476, 40481, - 40487, 40493, 40499, 40504, 40510, 40515, 40520, 40525, 40531, 40537, - 40542, 40547, 40552, 40557, 40563, 40569, 40574, 40579, 40585, 40590, - 40595, 40601, 40607, 40613, 40619, 40624, 40630, 40636, 40642, 40647, - 40653, 40658, 40663, 40668, 40674, 40680, 40685, 40690, 40695, 40700, - 40706, 40712, 40717, 40722, 40728, 40733, 40738, 40744, 40750, 40756, - 40762, 40767, 40773, 40779, 40785, 40790, 40796, 40801, 40806, 40811, - 40817, 40823, 40828, 40833, 40838, 40843, 40849, 40855, 40860, 40865, - 40871, 40876, 40881, 40887, 40893, 40899, 40905, 40909, 40915, 40921, - 40927, 40933, 40939, 40945, 40951, 40957, 40963, 40969, 40973, 40977, - 40981, 40985, 40989, 40993, 40997, 41001, 41005, 41010, 41016, 41021, - 41026, 41031, 41036, 41045, 41054, 41063, 41072, 41081, 41090, 41099, - 41108, 41115, 41123, 41131, 41138, 41145, 41153, 41161, 41168, 41175, - 41183, 41191, 41198, 41205, 41213, 41221, 41228, 41235, 41243, 41252, - 41261, 41269, 41278, 41287, 41294, 41301, 41309, 41318, 41327, 41335, - 41344, 41353, 41360, 41367, 41376, 41385, 41393, 41401, 41410, 41419, - 41426, 41433, 41442, 41451, 41459, 41467, 41476, 41485, 41492, 41499, - 41508, 41517, 41525, 41534, 41543, 41551, 41561, 41571, 41581, 41591, - 41600, 41609, 41618, 41627, 41634, 41642, 41650, 41658, 41666, 41671, - 41676, 41685, 41693, 41700, 41709, 41717, 41724, 41733, 41741, 41748, - 41757, 41765, 41772, 41781, 41789, 41796, 41805, 41813, 41820, 41829, - 41837, 41844, 41853, 41861, 41868, 41877, 41885, 41892, 41901, 41910, - 41919, 41928, 41940, 41952, 41959, 41964, 41969, 41974, 41979, 41984, - 41989, 41994, 41999, 42007, 42015, 42023, 42031, 42036, 42042, 42048, - 42054, 42058, 42065, 42071, 42078, 42082, 42089, 42095, 42102, 42106, - 42112, 42118, 42124, 42128, 42131, 42135, 42139, 42146, 42152, 42157, - 42162, 42168, 42180, 42189, 42202, 42215, 42221, 42230, 42242, 42245, - 42248, 42255, 42263, 42268, 42273, 42281, 42291, 42301, 42309, 42313, - 42317, 42320, 42323, 42327, 42331, 42334, 42337, 42342, 42347, 42353, - 42359, 42364, 42369, 42375, 42381, 42386, 42391, 42396, 42401, 42407, - 42413, 42418, 42423, 42429, 42435, 42440, 42445, 42448, 42451, 42460, - 42462, 42464, 42467, 42471, 42477, 42479, 42482, 42489, 42496, 42503, - 42511, 42521, 42535, 42540, 42545, 42549, 42554, 42562, 42569, 42578, - 42587, 42595, 42603, 42608, 42612, 42617, 42622, 42628, 42634, 42637, - 42643, 42649, 42659, 42668, 42676, 42684, 42693, 42702, 42706, 42714, - 42721, 42728, 42736, 42745, 42753, 42761, 42770, 42775, 42780, 42784, - 42789, 42794, 42800, 42806, 42810, 42816, 42818, 42820, 42822, 42824, - 42827, 42830, 42832, 42834, 42836, 42840, 42844, 42846, 42848, 42851, - 42854, 42858, 42864, 42870, 42872, 42879, 42883, 42888, 42893, 42895, - 42904, 42910, 42916, 42922, 42928, 42934, 42940, 42945, 42948, 42951, - 42954, 42956, 42958, 42962, 42966, 42971, 42976, 42981, 42984, 42988, - 42993, 42996, 43000, 43005, 43010, 43015, 43020, 43025, 43030, 43035, - 43040, 43045, 43050, 43055, 43060, 43066, 43072, 43078, 43080, 43083, - 43085, 43088, 43090, 43092, 43094, 43096, 43098, 43100, 43102, 43104, - 43106, 43108, 43110, 43112, 43114, 43116, 43118, 43120, 43122, 43127, - 43132, 43137, 43142, 43147, 43152, 43157, 43162, 43167, 43172, 43177, - 43182, 43187, 43192, 43197, 43202, 43207, 43212, 43217, 43222, 43226, - 43230, 43234, 43240, 43246, 43251, 43256, 43261, 43266, 43271, 43276, - 43284, 43292, 43300, 43308, 43316, 43324, 43332, 43340, 43346, 43351, - 43356, 43361, 43364, 43368, 43372, 43376, 43380, 43384, 43388, 43395, - 43402, 43410, 43418, 43423, 43428, 43435, 43442, 43449, 43456, 43459, - 43462, 43467, 43469, 43473, 43478, 43480, 43482, 43484, 43486, 43491, - 43494, 43496, 0, 0, 43501, 43504, 43508, 43513, 43518, 43526, 43532, - 43537, 43548, 43554, 43560, 43565, 43570, 43576, 43579, 43582, 43587, - 43589, 43593, 43595, 43597, 43599, 43601, 43603, 43605, 43610, 43612, - 43614, 43616, 0, 0, 0, 43618, 43623, 43628, 43633, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 43638, 43644, 43647, 43652, 0, 43655, 43660, 43664, - 43666, 0, 0, 43668, 43672, 43676, 43680, 43682, 43687, 43690, 43693, - 43696, 43700, 43704, 43709, 43713, 43718, 43723, 43727, 43733, 43740, - 43743, 43749, 43754, 43758, 43763, 43769, 43775, 43782, 43788, 43795, 0, - 43802, 43809, 43813, 43820, 43826, 43831, 43837, 43841, 43846, 43849, - 43855, 43861, 43868, 43876, 43883, 43892, 43902, 43909, 43915, 43919, - 43927, 43932, 43941, 43944, 43947, 43956, 43967, 43974, 43976, 43982, - 43987, 43989, 43992, 43996, 44004, 0, 44013, 0, 44018, 44025, 44033, - 44040, 0, 0, 0, 44048, 0, 44056, 44059, 44063, 44066, 44077, 44087, - 44097, 0, 0, 44106, 44115, 44121, 44129, 44133, 44141, 44145, 44153, - 44160, 44167, 44176, 44185, 44195, 44205, 44215, 44225, 44234, 44243, - 44253, 44263, 44272, 44281, 44288, 44295, 44302, 44309, 44316, 44323, - 44330, 44337, 44344, 44352, 44358, 44364, 44370, 44376, 44382, 44388, - 44394, 44400, 44406, 44413, 44421, 44429, 44437, 44445, 44453, 44461, - 44469, 44477, 44485, 44494, 0, 0, 0, 44499, 44505, 44508, 44514, 44520, - 44525, 44529, 44534, 44540, 44547, 44550, 44557, 44564, 44568, 44577, - 44586, 44591, 44597, 44602, 44607, 44614, 44621, 44628, 44636, 0, 44644, - 44653, 44658, 44662, 44669, 44673, 44680, 44688, 44693, 44701, 44705, - 44710, 44714, 44719, 0, 44723, 44728, 44737, 44739, 44743, 44747, 44754, - 44761, 44766, 44774, 44780, 0, 44786, 0, 0, 0, 44789, 44797, 44801, - 44808, 44815, 44823, 44828, 44833, 44839, 44844, 44849, 44855, 44860, - 44863, 44867, 44871, 44878, 44887, 44892, 44901, 44910, 44916, 44922, - 44927, 44932, 44937, 44942, 44948, 44954, 44962, 44970, 44976, 44982, - 44987, 44992, 44999, 45006, 45012, 45015, 45018, 45022, 45026, 45030, - 45035, 45041, 45047, 45054, 45061, 45066, 45070, 45074, 45078, 45082, - 45086, 45090, 45094, 45098, 45102, 45106, 45110, 45114, 45118, 45122, - 45126, 45130, 45134, 45138, 45142, 45146, 45150, 45154, 45158, 45162, - 45166, 45170, 45174, 45178, 45182, 45186, 45190, 45194, 45198, 45202, - 45206, 45210, 45214, 45218, 45222, 45226, 45230, 45234, 45238, 45242, - 45246, 45250, 45254, 45258, 45262, 45266, 45270, 45274, 45278, 45282, - 45286, 45290, 45294, 45298, 45302, 45306, 45310, 45314, 45318, 45322, - 45326, 45330, 45334, 45338, 45342, 45346, 45350, 45354, 45358, 45362, - 45366, 45370, 45374, 45378, 45382, 45386, 45390, 45394, 45398, 45402, - 45406, 45410, 45414, 45418, 45422, 45426, 45430, 45434, 45438, 45442, - 45446, 45450, 45454, 45458, 45462, 45466, 45470, 45474, 45478, 45482, - 45486, 45490, 45494, 45498, 45502, 45506, 45510, 45514, 45518, 45522, - 45526, 45530, 45534, 45538, 45542, 45546, 45550, 45554, 45558, 45562, - 45566, 45570, 45574, 45578, 45582, 45586, 45590, 45594, 45598, 45602, - 45606, 45610, 45614, 45618, 45622, 45626, 45630, 45634, 45638, 45642, - 45646, 45650, 45654, 45658, 45662, 45666, 45670, 45674, 45678, 45682, - 45686, 45690, 45694, 45698, 45702, 45706, 45710, 45714, 45718, 45722, - 45726, 45730, 45734, 45738, 45742, 45746, 45750, 45754, 45758, 45762, - 45766, 45770, 45774, 45778, 45782, 45786, 45790, 45794, 45798, 45802, - 45806, 45810, 45814, 45818, 45822, 45826, 45830, 45834, 45838, 45842, - 45846, 45850, 45854, 45858, 45862, 45866, 45870, 45874, 45878, 45882, - 45886, 45890, 45894, 45898, 45902, 45906, 45910, 45914, 45918, 45922, - 45926, 45930, 45934, 45938, 45942, 45946, 45950, 45954, 45958, 45962, - 45966, 45970, 45974, 45978, 45982, 45986, 45990, 45994, 45998, 46002, - 46006, 46010, 46014, 46018, 46022, 46026, 46030, 46034, 46038, 46042, - 46046, 46050, 46054, 46058, 46062, 46066, 46070, 46074, 46078, 46082, - 46086, 46090, 46097, 46105, 46111, 46117, 46124, 46131, 46137, 46143, - 46149, 46155, 46160, 46165, 46170, 46175, 46181, 46187, 46195, 46202, - 46207, 46212, 46220, 46229, 46236, 46246, 46257, 46260, 46263, 46267, - 46271, 46277, 46283, 46293, 46303, 46313, 46323, 46330, 46337, 46344, - 46351, 46362, 46373, 46384, 46395, 46405, 46415, 46427, 46439, 46450, - 46461, 46473, 46485, 46494, 46504, 46514, 46525, 46536, 46543, 46550, - 46557, 46564, 46574, 46584, 46591, 46598, 46605, 46612, 46619, 46626, - 46633, 46638, 46643, 46649, 46657, 46667, 46675, 46683, 46691, 46699, - 46707, 46715, 46723, 46731, 46739, 46747, 46756, 46765, 46773, 46781, - 46790, 46799, 46808, 46817, 46827, 46837, 46846, 46855, 46865, 46875, - 46889, 46906, 46920, 46937, 46951, 46965, 46979, 46993, 47003, 47014, - 47024, 47035, 47052, 47069, 47077, 47083, 47090, 47097, 47104, 47111, - 47116, 47122, 47127, 47132, 47138, 47143, 47148, 47153, 47158, 47163, - 47170, 47175, 47182, 47187, 47192, 47196, 47200, 47207, 47214, 47221, - 47228, 47235, 47242, 47255, 47268, 47281, 47294, 47302, 47310, 47316, - 47322, 47329, 47336, 47343, 47350, 47354, 47359, 47367, 47375, 47383, - 47390, 47394, 47402, 47410, 47413, 47416, 47421, 47427, 47435, 47443, - 47463, 47483, 47503, 47523, 47543, 47563, 47583, 47603, 47608, 47615, - 47624, 47632, 47640, 47645, 47648, 47651, 47656, 47659, 47678, 47685, - 47691, 47697, 47701, 47704, 47707, 47710, 47721, 47733, 47741, 47749, - 47753, 47758, 47762, 47767, 47772, 47777, 47783, 47792, 47799, 47806, - 47814, 47821, 47828, 47831, 47837, 47843, 47846, 47849, 47854, 47859, - 47865, 47871, 47875, 47880, 47887, 47891, 47897, 47901, 47905, 47913, - 47925, 47933, 47937, 47939, 47948, 47957, 47963, 47966, 47972, 47978, - 47983, 47988, 47993, 47998, 48003, 48008, 48010, 48016, 48021, 48028, - 48032, 48038, 48041, 48045, 48052, 48059, 48061, 48063, 48069, 48075, - 48081, 48090, 48099, 48106, 48113, 48119, 48125, 48130, 48135, 48140, - 48146, 48152, 48157, 48164, 48168, 48172, 48185, 48198, 48209, 48218, - 48224, 48231, 48236, 48241, 48246, 48251, 48256, 48258, 48265, 48272, - 48279, 48286, 48293, 48301, 48307, 48312, 48318, 48324, 48330, 48337, - 48343, 48351, 48359, 48367, 48375, 48382, 48388, 48394, 48403, 48407, - 48416, 48425, 48434, 48442, 48446, 48452, 48459, 48466, 48470, 48476, - 48483, 48488, 48493, 48499, 48504, 48509, 48516, 48523, 48528, 48533, - 48541, 48549, 48559, 48569, 48576, 48583, 48587, 48591, 48603, 48609, - 48615, 48620, 48625, 48632, 48639, 48645, 48651, 48660, 48668, 48676, - 48683, 48690, 48697, 48703, 48710, 48716, 48723, 48730, 48737, 48744, - 48750, 48755, 48764, 48774, 48781, 48790, 48796, 48801, 48806, 48815, - 48821, 48827, 48833, 48841, 48846, 48853, 48860, 48871, 48878, 48885, - 48892, 48899, 48906, 48913, 48920, 48931, 48942, 48952, 48962, 48974, - 48986, 48991, 48996, 49004, 49012, 49018, 49024, 49033, 49042, 49050, - 49058, 49066, 49074, 49084, 49094, 49108, 49122, 49129, 49136, 49147, - 49158, 49165, 49172, 49181, 49190, 49195, 49200, 49209, 49218, 49223, - 49228, 49236, 49242, 49248, 49256, 49264, 49277, 49290, 49294, 49298, - 49305, 49312, 49319, 49327, 49335, 49343, 49351, 49357, 49363, 49369, - 49375, 49382, 49389, 49397, 49405, 49408, 49411, 49416, 49421, 49427, - 49433, 49440, 49447, 49456, 49465, 49472, 49479, 49487, 49495, 49503, - 49511, 49518, 49525, 49532, 49539, 49543, 49547, 49554, 49561, 49566, - 49571, 49576, 49581, 49587, 49601, 49608, 49615, 49619, 49621, 49623, - 49628, 49633, 49638, 49642, 49650, 49657, 49664, 49672, 49684, 49692, - 49700, 49711, 49715, 49719, 49723, 49728, 49739, 49746, 49753, 49760, - 49765, 49772, 49781, 49789, 49795, 49801, 49807, 49816, 49825, 49833, - 49842, 49847, 49850, 49855, 49861, 49867, 49873, 49879, 49883, 49886, - 49890, 49894, 49900, 49906, 49912, 49918, 49922, 49926, 49933, 49940, - 49947, 49954, 49961, 49968, 49978, 49987, 49994, 50001, 50009, 50017, - 50021, 50026, 50031, 50037, 50043, 50046, 50049, 50052, 50055, 50059, - 50064, 50069, 50074, 50079, 50084, 50088, 50092, 50096, 50100, 50104, - 50108, 50112, 50118, 50122, 50128, 50133, 50140, 50148, 50155, 50163, - 50170, 50178, 50187, 50194, 50204, 50215, 50221, 50230, 50236, 50245, - 50254, 50260, 50266, 50270, 50274, 50283, 50292, 50299, 50306, 50315, 0, - 0, 0, 50324, 50329, 50333, 50337, 50342, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 50347, 50352, 50357, 50362, 50367, 50372, 50377, - 50382, 50387, 50392, 50397, 50403, 50407, 50412, 50417, 50422, 50427, - 50432, 50437, 50442, 50447, 50452, 50457, 50462, 50467, 50472, 50477, - 50482, 50487, 50492, 50497, 50502, 50507, 50512, 50517, 50523, 50528, - 50534, 50543, 50548, 50556, 50563, 50572, 50577, 50582, 50587, 50593, 0, - 50600, 50605, 50610, 50615, 50620, 50625, 50630, 50635, 50640, 50645, - 50650, 50656, 50660, 50665, 50670, 50675, 50680, 50685, 50690, 50695, - 50700, 50705, 50710, 50715, 50720, 50725, 50730, 50735, 50740, 50745, - 50750, 50755, 50760, 50765, 50770, 50776, 50781, 50787, 50796, 50801, - 50809, 50816, 50825, 50830, 50835, 50840, 50846, 0, 50853, 50861, 50869, - 50878, 50885, 50893, 50899, 50908, 50916, 50924, 50932, 50940, 50948, - 50956, 50961, 50968, 0, 50973, 50981, 50988, 50995, 51003, 51008, 51013, - 51020, 51027, 51036, 51046, 51052, 51059, 0, 0, 51063, 51068, 51073, - 51078, 51083, 51088, 51093, 51098, 51103, 51108, 51113, 51118, 51123, - 51128, 51133, 51138, 51143, 51148, 51153, 51158, 51163, 51168, 51173, - 51178, 51183, 51188, 51193, 51198, 51203, 51208, 51213, 51217, 51221, - 51226, 51231, 51236, 51241, 51246, 51251, 51256, 51261, 51266, 51271, - 51276, 51281, 51286, 51291, 51296, 51301, 51306, 51311, 51318, 51325, - 51332, 51339, 51346, 51353, 51360, 51367, 51374, 51381, 51388, 51395, - 51402, 51409, 51414, 51419, 51426, 51433, 51440, 51447, 51454, 51461, - 51468, 51475, 51482, 51489, 51496, 51503, 51509, 51515, 51521, 51527, - 51534, 51541, 51548, 51555, 51562, 51569, 51576, 51583, 51590, 51597, - 51605, 51613, 51621, 51629, 51637, 51645, 51653, 51661, 51665, 51671, - 51677, 51681, 51687, 51693, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 51699, 51707, 51716, 51725, 51733, 51739, 51744, 51749, 51754, 51759, - 51764, 51769, 51774, 51779, 51784, 51789, 51794, 51799, 51804, 51809, - 51814, 51819, 51824, 51829, 51834, 51839, 51844, 51849, 51854, 51859, - 51864, 51869, 51874, 51879, 51884, 51889, 51894, 51899, 51904, 51909, - 51914, 51919, 51924, 51929, 51934, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 51939, - 51942, 51946, 51950, 51954, 51958, 51966, 51970, 51974, 51978, 51982, - 51986, 51990, 51994, 51998, 52004, 52008, 52012, 52020, 52026, 52030, - 52034, 52038, 52044, 52048, 52054, 52058, 52062, 52068, 52074, 52078, - 52082, 52086, 52092, 52098, 52102, 52106, 52110, 52114, 52118, 52124, - 52130, 52134, 52138, 52142, 52146, 52150, 52154, 52158, 52162, 52166, - 52170, 52174, 52180, 0, 0, 0, 0, 0, 0, 0, 0, 0, 52184, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 52190, 52194, 52198, 52202, 52206, 52210, - 52214, 52218, 52222, 52226, 52230, 52236, 52240, 52244, 52248, 52252, - 52256, 52260, 52264, 52268, 52272, 52276, 52280, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 52284, 52288, 52292, 52296, 52300, 52304, 52308, 0, 52312, 52316, - 52320, 52324, 52328, 52332, 52336, 0, 52340, 52344, 52348, 52352, 52356, - 52360, 52364, 0, 52368, 52372, 52376, 52380, 52384, 52388, 52392, 0, - 52396, 52400, 52404, 52408, 52412, 52416, 52420, 0, 52424, 52428, 52432, - 52436, 52440, 52444, 52448, 0, 52452, 52456, 52460, 52464, 52468, 52472, - 52476, 0, 52480, 52484, 52488, 52492, 52496, 52500, 52504, 0, 52508, - 52513, 52518, 52523, 52528, 52533, 52538, 52542, 52547, 52552, 52557, - 52561, 52566, 52571, 52576, 52581, 52585, 52590, 52595, 52600, 52605, - 52610, 52615, 52619, 52624, 52629, 52636, 52641, 52646, 52652, 52659, - 52666, 52675, 52682, 52691, 52695, 52699, 52705, 52711, 52717, 52725, - 52731, 52735, 52739, 52743, 52749, 52755, 52759, 52761, 52765, 52770, - 52772, 52776, 52780, 52784, 52790, 52795, 52799, 52803, 52807, 52813, - 52818, 52823, 52828, 52833, 52840, 52847, 52852, 52857, 52862, 52867, - 52872, 52877, 52881, 52885, 52892, 52899, 52906, 52910, 52914, 52916, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 52920, 52924, 52928, 52933, 52938, 52943, 52947, 52951, - 52955, 52960, 52965, 52969, 52973, 52977, 52981, 52986, 52991, 52996, - 53001, 53005, 53009, 53014, 53019, 53024, 53029, 53033, 0, 53037, 53041, - 53045, 53049, 53053, 53057, 53061, 53066, 53071, 53075, 53080, 53085, - 53094, 53098, 53102, 53106, 53113, 53117, 53122, 53127, 53131, 53135, - 53141, 53146, 53151, 53156, 53161, 53165, 53169, 53173, 53177, 53181, - 53186, 53191, 53195, 53199, 53204, 53209, 53214, 53218, 53222, 53227, - 53232, 53238, 53244, 53248, 53254, 53260, 53264, 53270, 53276, 53281, - 53286, 53290, 53296, 53300, 53304, 53310, 53316, 53321, 53326, 53330, - 53334, 53342, 53348, 53354, 53360, 53365, 53370, 53375, 53381, 53385, - 53391, 53395, 53399, 53405, 53411, 53417, 53423, 53429, 53435, 53441, - 53447, 53453, 53459, 53465, 53471, 53475, 53481, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 53487, 53490, 53494, 53498, 53502, 53506, 53509, 53512, - 53516, 53520, 53524, 53528, 53531, 53536, 53540, 53544, 53548, 53554, - 53558, 53562, 53566, 53570, 53577, 53583, 53587, 53591, 53595, 53599, - 53603, 53607, 53611, 53615, 53619, 53623, 53627, 53633, 53637, 53641, - 53645, 53649, 53653, 53657, 53661, 53665, 53669, 53673, 53677, 53681, - 53685, 53689, 53693, 53697, 53703, 53709, 53714, 53719, 53723, 53727, - 53731, 53735, 53739, 53743, 53747, 53751, 53755, 53759, 53763, 53767, - 53771, 53775, 53779, 53783, 53787, 53791, 53795, 53799, 53803, 53807, - 53811, 53815, 53821, 53825, 53829, 53833, 53837, 53841, 53845, 53849, - 53853, 53858, 53865, 53869, 53873, 53877, 53881, 53885, 53889, 53893, - 53897, 53901, 53905, 53909, 53913, 53920, 53924, 53930, 53934, 53938, - 53942, 53946, 53950, 53953, 53957, 53961, 53965, 53969, 53973, 53977, - 53981, 53985, 53989, 53993, 53997, 54001, 54005, 54009, 54013, 54017, - 54021, 54025, 54029, 54033, 54037, 54041, 54045, 54049, 54053, 54057, - 54061, 54065, 54069, 54073, 54077, 54081, 54087, 54091, 54095, 54099, - 54103, 54107, 54111, 54115, 54119, 54123, 54127, 54131, 54135, 54139, - 54143, 54147, 54151, 54155, 54159, 54163, 54167, 54171, 54175, 54179, - 54183, 54187, 54191, 54195, 54203, 54207, 54211, 54215, 54219, 54223, - 54229, 54233, 54237, 54241, 54245, 54249, 54253, 54257, 54261, 54265, - 54269, 54273, 54277, 54281, 54287, 54291, 54295, 54299, 54303, 54307, - 54311, 54315, 54319, 54323, 54327, 54331, 54335, 54339, 54343, 54347, - 54351, 54355, 54359, 54363, 54367, 54371, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 54375, 54383, 54390, - 54401, 54411, 54419, 54428, 54437, 54447, 54459, 54471, 54482, 0, 0, 0, - 0, 54488, 54491, 54494, 54499, 54502, 54509, 54513, 54517, 54521, 54525, - 54529, 54534, 54539, 54543, 54547, 54552, 54557, 54562, 54567, 54570, - 54573, 54579, 54585, 54590, 54595, 54602, 54609, 54613, 54617, 54621, - 54628, 54634, 54641, 54646, 54650, 54654, 54658, 54662, 54666, 54670, - 54674, 54678, 54682, 54687, 54692, 54697, 54702, 54708, 54713, 54717, - 54723, 54734, 54744, 54759, 54768, 54772, 54781, 54786, 54791, 54796, - 54801, 54804, 54809, 54813, 0, 54819, 54823, 54826, 54830, 54833, 54837, - 54840, 54844, 54847, 54851, 54854, 54857, 54861, 54865, 54869, 54873, - 54877, 54881, 54885, 54889, 54893, 54897, 54901, 54905, 54909, 54913, - 54917, 54921, 54925, 54929, 54933, 54937, 54941, 54945, 54949, 54954, - 54958, 54962, 54966, 54970, 54973, 54977, 54981, 54985, 54989, 54993, - 54997, 55000, 55004, 55007, 55011, 55015, 55019, 55023, 55027, 55031, - 55035, 55039, 55043, 55047, 55051, 55055, 55058, 55062, 55066, 55070, - 55074, 55078, 55081, 55086, 55090, 55095, 55099, 55102, 55106, 55110, - 55114, 55118, 55123, 55127, 55131, 55135, 55139, 55142, 55146, 55150, 0, - 0, 55155, 55163, 55171, 55178, 55185, 55189, 55195, 55200, 55205, 55209, - 55212, 55216, 55219, 55223, 55226, 55230, 55233, 55237, 55240, 55243, - 55247, 55251, 55255, 55259, 55263, 55267, 55271, 55275, 55279, 55283, - 55287, 55291, 55295, 55299, 55303, 55307, 55311, 55315, 55319, 55323, - 55327, 55331, 55335, 55340, 55344, 55348, 55352, 55356, 55359, 55363, - 55367, 55371, 55375, 55379, 55383, 55386, 55390, 55393, 55397, 55401, - 55405, 55409, 55413, 55417, 55421, 55425, 55429, 55433, 55437, 55441, - 55444, 55448, 55452, 55456, 55460, 55464, 55467, 55472, 55476, 55481, - 55485, 55488, 55492, 55496, 55500, 55504, 55509, 55513, 55517, 55521, - 55525, 55528, 55532, 55536, 55541, 55545, 55549, 55553, 55557, 55562, - 55569, 55573, 55579, 0, 0, 0, 0, 0, 55584, 55588, 55592, 55595, 55599, - 55603, 55607, 55610, 55613, 55616, 55620, 55623, 55627, 55631, 55635, - 55639, 55643, 55647, 55650, 55654, 55658, 55661, 55664, 55667, 55670, - 55674, 55678, 55682, 55686, 55690, 55694, 55698, 55702, 55706, 55710, - 55713, 55716, 55720, 55723, 55727, 55731, 0, 0, 0, 55735, 55739, 55743, - 55747, 55751, 55755, 55759, 55763, 55767, 55771, 55775, 55779, 55783, - 55787, 55791, 55795, 55799, 55803, 55807, 55811, 55815, 55819, 55823, - 55827, 55831, 55835, 55839, 55843, 55847, 55851, 55855, 55858, 55862, - 55865, 55869, 55873, 55876, 55880, 55884, 55887, 55891, 55895, 55899, - 55903, 55906, 55910, 55914, 55918, 55922, 55926, 55930, 55933, 55936, - 55940, 55944, 55948, 55952, 55956, 55960, 55964, 55968, 55972, 55976, - 55980, 55984, 55988, 55992, 55996, 56000, 56004, 56008, 56012, 56016, - 56020, 56024, 56028, 56032, 56036, 56040, 56044, 56048, 56052, 56056, - 56060, 56064, 56068, 56072, 56076, 56080, 56084, 56088, 56092, 56096, - 56100, 0, 56104, 56110, 56116, 56121, 56126, 56131, 56137, 56143, 56149, - 56155, 56161, 56167, 56173, 56179, 56185, 56191, 56197, 56201, 56205, - 56209, 56213, 56217, 56221, 56225, 56229, 56233, 56237, 56241, 56245, - 56249, 56253, 56257, 56261, 56265, 56269, 56273, 56277, 56282, 56287, - 56292, 0, 0, 0, 0, 0, 0, 0, 0, 56296, 56300, 56304, 56308, 56312, 56316, - 56320, 56324, 56328, 56332, 56336, 56340, 56344, 56348, 56352, 56356, - 56359, 56362, 56365, 56369, 56373, 56377, 56381, 56385, 56389, 56393, - 56397, 56401, 56405, 56409, 56413, 56417, 56421, 56425, 56429, 56433, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 56437, 56442, 56447, 56452, 56456, - 56461, 56465, 56470, 56475, 56480, 56485, 56490, 56494, 56499, 56504, - 56509, 56514, 56518, 56522, 56526, 56530, 56534, 56538, 56542, 56546, - 56550, 56554, 56558, 56562, 56566, 56570, 56575, 56580, 56585, 56590, - 56595, 56600, 56605, 56610, 56615, 56620, 56625, 56630, 56635, 56640, - 56645, 56651, 0, 56658, 56661, 56664, 56667, 56670, 56673, 56676, 56679, - 56682, 56685, 56689, 56693, 56697, 56701, 56705, 56709, 56713, 56717, - 56721, 56725, 56729, 56733, 56737, 56741, 56745, 56749, 56753, 56757, - 56761, 56765, 56769, 56773, 56777, 56781, 56785, 56789, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 56793, 56796, 56801, 56806, 56811, 56816, 56821, 56826, - 56831, 56836, 56841, 56845, 56850, 56855, 56860, 56865, 56870, 56874, - 56878, 56882, 56886, 56890, 56894, 56898, 56902, 56906, 56910, 56914, - 56918, 56922, 56926, 56931, 56936, 56941, 56946, 56951, 56956, 56961, - 56966, 56971, 56976, 56981, 56986, 56991, 56996, 57002, 57008, 57013, - 57018, 57021, 57024, 57027, 57030, 57033, 57036, 57039, 57042, 57045, - 57049, 57053, 57057, 57061, 57065, 57069, 57073, 57077, 57081, 57085, - 57089, 57093, 57097, 57101, 57105, 57109, 57113, 57117, 57121, 57125, - 57129, 57133, 57137, 57141, 57145, 57149, 57153, 57157, 57161, 57165, - 57169, 57173, 57177, 57181, 57185, 57189, 57193, 57197, 57201, 57205, - 57210, 57215, 57220, 57225, 57229, 57234, 57239, 57244, 57249, 57254, - 57259, 57264, 57269, 57274, 57278, 57284, 57290, 57296, 57302, 57308, - 57314, 57320, 57326, 57332, 57338, 57344, 57350, 57353, 57356, 57359, - 57364, 57367, 57370, 57373, 57376, 57379, 57382, 57386, 57390, 57394, - 57398, 57402, 57406, 57410, 57414, 57418, 57422, 57426, 57430, 57434, - 57437, 57441, 57445, 57449, 57453, 57457, 57460, 57464, 57468, 57472, - 57476, 57479, 57483, 57487, 57491, 57495, 57498, 57502, 57506, 57509, - 57513, 57517, 57521, 57525, 57529, 57533, 57537, 0, 57541, 57544, 57547, - 57550, 57553, 57556, 57559, 57562, 57565, 57568, 57571, 57574, 57577, - 57580, 57583, 57586, 57589, 57592, 57595, 57598, 57601, 57604, 57607, - 57610, 57613, 57616, 57619, 57622, 57625, 57628, 57631, 57634, 57637, - 57640, 57643, 57646, 57649, 57652, 57655, 57658, 57661, 57664, 57667, - 57670, 57673, 57676, 57679, 57682, 57685, 57688, 57691, 57694, 57697, - 57700, 57703, 57706, 57709, 57712, 57715, 57718, 57721, 57724, 57727, - 57730, 57733, 57736, 57739, 57742, 57745, 57748, 57751, 57754, 57757, - 57760, 57763, 57766, 57769, 57772, 57775, 57778, 57781, 57784, 57787, - 57790, 57793, 57796, 57799, 57802, 57805, 57813, 57820, 57827, 57834, - 57841, 57848, 57855, 57862, 57869, 57876, 57884, 57892, 57900, 57908, - 57916, 57924, 57932, 57940, 57948, 57956, 57964, 57972, 57980, 57988, - 57996, 57999, 58002, 58005, 58007, 58010, 58013, 58016, 58021, 58026, - 58029, 58036, 58043, 58050, 58057, 58060, 58065, 58068, 58072, 58074, - 58076, 58079, 58082, 58085, 58088, 58091, 58094, 58097, 58102, 58106, - 58109, 58112, 58115, 58118, 58121, 58124, 58127, 58131, 58134, 58137, - 58140, 58143, 58146, 58150, 58153, 58156, 58159, 58164, 58169, 58174, - 58179, 58184, 58189, 58194, 58199, 58204, 58212, 58214, 58217, 58220, - 58223, 58226, 58231, 58239, 58242, 58245, 58249, 58252, 58255, 58258, - 58262, 58265, 58268, 58273, 58276, 58279, 58284, 58287, 58290, 58295, - 58300, 58305, 58308, 58311, 58314, 58317, 58323, 58326, 58329, 58332, - 58334, 58337, 58340, 58343, 58348, 58351, 58354, 58357, 58360, 58363, - 58368, 58371, 58374, 58377, 58380, 58383, 58386, 58389, 58392, 58395, - 58400, 58404, 58411, 58418, 58425, 58432, 58439, 58446, 58453, 58460, - 58467, 58475, 58483, 58491, 58499, 58507, 58515, 58523, 58531, 58539, - 58547, 58555, 58563, 58571, 58579, 58587, 58595, 58603, 58611, 58619, - 58627, 58635, 58643, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 19298, 19302, 19306, 19310, 19314, 19318, 19322, 19326, 19330, 19334, + 19338, 19342, 19346, 19350, 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, 19522, 19526, 19530, 19534, + 19538, 19542, 19546, 19550, 19554, 19558, 19562, 19566, 19570, 19574, + 19578, 19582, 19586, 19590, 19594, 19598, 19602, 19606, 19610, 19614, + 19618, 19622, 19626, 19630, 19634, 19638, 19642, 19646, 19650, 19654, + 19658, 19662, 19666, 19670, 19674, 19678, 19682, 19686, 19690, 19694, + 19698, 19702, 19706, 19710, 19714, 19718, 19722, 19726, 19730, 19734, + 19738, 19742, 19746, 19750, 19754, 19758, 19762, 19766, 19770, 19774, + 19778, 19782, 19786, 19790, 19794, 19798, 19801, 19805, 19809, 19813, + 19817, 19821, 19825, 19829, 19833, 19837, 19841, 19845, 19849, 19853, + 19857, 19861, 19865, 19869, 19873, 19877, 19881, 19885, 19889, 19893, + 19896, 19900, 19904, 19908, 19912, 19916, 19920, 19924, 19928, 19932, + 19936, 19940, 19944, 19948, 19952, 19956, 19959, 19963, 19967, 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, 0, 20087, 20091, + 20095, 20099, 0, 0, 20103, 20107, 20111, 20115, 20119, 20123, 20127, 0, + 20131, 0, 20135, 20139, 20143, 20147, 0, 0, 20151, 20155, 20159, 20163, + 20167, 20171, 20175, 20179, 20183, 20187, 20191, 20195, 20199, 20203, + 20207, 20211, 20215, 20219, 20223, 20227, 20231, 20235, 20239, 20242, + 20246, 20250, 20254, 20258, 20262, 20266, 20270, 20274, 20278, 20282, + 20286, 20290, 20294, 20298, 20302, 20306, 20310, 0, 20314, 20318, 20322, + 20326, 0, 0, 20330, 20333, 20337, 20341, 20345, 20349, 20353, 20357, + 20361, 20365, 20369, 20373, 20377, 20381, 20385, 20389, 20393, 20398, + 20403, 20408, 20414, 20420, 20425, 20430, 20436, 20439, 20443, 20447, + 20451, 20455, 20459, 20463, 20467, 0, 20471, 20475, 20479, 20483, 0, 0, + 20487, 20491, 20495, 20499, 20503, 20507, 20511, 0, 20515, 0, 20519, + 20523, 20527, 20531, 0, 0, 20535, 20539, 20543, 20547, 20551, 20555, + 20559, 20563, 20567, 20572, 20577, 20582, 20588, 20594, 20599, 0, 20604, + 20608, 20612, 20616, 20620, 20624, 20628, 20632, 20636, 20640, 20644, + 20648, 20652, 20656, 20660, 20664, 20668, 20671, 20675, 20679, 20683, + 20687, 20691, 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, 0, 20831, 20835, 20839, 20843, + 0, 0, 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, 21074, 21078, + 21082, 21086, 21090, 21094, 21098, 21102, 21106, 21110, 0, 0, 0, 0, + 21114, 21119, 21123, 21126, 21131, 21134, 21137, 21140, 21145, 21149, + 21154, 21157, 21160, 21163, 21166, 21169, 21172, 21175, 21178, 21181, + 21185, 21189, 21193, 21197, 21201, 21205, 21209, 21213, 21217, 21221, 0, + 0, 0, 21227, 21233, 21237, 21241, 21245, 21251, 21255, 21259, 21263, + 21269, 21273, 21277, 21281, 21287, 21291, 21295, 21299, 21305, 21311, + 21317, 21325, 21331, 21337, 21343, 21349, 21355, 0, 0, 0, 0, 0, 0, 21361, + 21364, 21367, 21370, 21373, 21376, 21380, 21384, 21387, 21391, 21395, + 21399, 21403, 21407, 21410, 21414, 21418, 21422, 21426, 21430, 21434, + 21438, 21442, 21446, 21450, 21454, 21457, 21461, 21465, 21469, 21473, + 21476, 21480, 21484, 21488, 21492, 21496, 21500, 21504, 21508, 21512, + 21516, 21520, 21524, 21528, 21532, 21535, 21539, 21543, 21547, 21551, + 21555, 21559, 21563, 21567, 21571, 21575, 21579, 21583, 21587, 21591, + 21595, 21599, 21603, 21607, 21611, 21615, 21619, 21623, 21627, 21631, + 21635, 21639, 21643, 21647, 21651, 21655, 21659, 21663, 21667, 21670, + 21674, 21678, 21682, 21686, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 21690, + 21694, 21697, 21701, 21704, 21708, 21711, 21715, 21721, 21726, 21730, + 21733, 21737, 21741, 21746, 21750, 21755, 21759, 21764, 21768, 21773, + 21777, 21782, 21788, 21792, 21797, 21801, 21806, 21812, 21816, 21822, + 21828, 21832, 21837, 21845, 21853, 21860, 21865, 21870, 21879, 21886, + 21893, 21898, 21904, 21908, 21912, 21916, 21920, 21924, 21928, 21932, + 21936, 21940, 21944, 21950, 21955, 21960, 21963, 21967, 21971, 21976, + 21980, 21985, 21989, 21994, 21998, 22003, 22007, 22012, 22016, 22021, + 22025, 22030, 22036, 22040, 22045, 22050, 22054, 22058, 22062, 22066, + 22069, 22073, 22079, 22084, 22089, 22093, 22097, 22101, 22106, 22110, + 22115, 22119, 22124, 22127, 22131, 22135, 22140, 22144, 22149, 22153, + 22158, 22164, 22168, 22172, 22176, 22180, 22184, 22188, 22192, 22196, + 22200, 22204, 22208, 22214, 22217, 22221, 22225, 22230, 22234, 22239, + 22243, 22248, 22252, 22257, 22261, 22266, 22270, 22275, 22279, 22284, + 22290, 22294, 22298, 22304, 22310, 22316, 22322, 22326, 22330, 22334, + 22338, 22342, 22346, 22352, 22356, 22360, 22364, 22369, 22373, 22378, + 22382, 22387, 22391, 22396, 22400, 22405, 22409, 22414, 22418, 22423, + 22429, 22433, 22439, 22443, 22447, 22451, 22455, 22459, 22463, 22469, + 22472, 22476, 22480, 22485, 22489, 22494, 22498, 22503, 22507, 22512, + 22516, 22521, 22525, 22530, 22534, 22539, 22545, 22548, 22552, 22556, + 22561, 22566, 22570, 22574, 22578, 22582, 22586, 22590, 22596, 22599, + 22603, 22607, 22612, 22616, 22621, 22625, 22630, 22636, 22639, 22644, + 22648, 22652, 22656, 22660, 22664, 22668, 22672, 22678, 22682, 22686, + 22690, 22695, 22699, 22704, 22708, 22713, 22717, 22722, 22726, 22731, + 22735, 22740, 22744, 22749, 22752, 22756, 22760, 22764, 22768, 22772, + 22776, 22780, 22784, 22790, 22794, 22798, 22802, 22807, 22811, 22816, + 22820, 22825, 22829, 22834, 22838, 22843, 22847, 22852, 22856, 22861, + 22867, 22870, 22875, 22879, 22884, 22890, 22896, 22902, 22908, 22914, + 22920, 22926, 22930, 22934, 22938, 22942, 22946, 22950, 22954, 22958, + 22963, 22967, 22972, 22976, 22981, 22985, 22990, 22994, 22999, 23003, + 23008, 23012, 23017, 23021, 23025, 23029, 23033, 23037, 23041, 23045, + 23051, 23054, 23058, 23062, 23067, 23071, 23076, 23080, 23085, 23089, + 23094, 23098, 23103, 23107, 23112, 23116, 23121, 23127, 23131, 23137, + 23142, 23148, 23152, 23158, 23163, 23167, 23171, 23175, 23179, 23183, + 23188, 23191, 23195, 23200, 23204, 23209, 23212, 23216, 23220, 23224, + 23228, 23232, 23236, 23240, 23244, 23248, 23252, 23256, 23261, 23265, + 23269, 23275, 23279, 23285, 23289, 23295, 23299, 23303, 23307, 23311, + 23315, 23320, 23324, 23328, 23332, 23336, 23340, 23344, 23348, 23352, + 23356, 23360, 23366, 23372, 23378, 23384, 23390, 23395, 23401, 23407, + 23413, 23417, 23421, 23425, 23429, 23433, 23437, 23441, 23445, 23449, + 23453, 23457, 23461, 23465, 23470, 23475, 23480, 23484, 23488, 23492, + 23496, 23500, 23504, 23508, 23512, 23516, 23520, 23526, 23532, 23538, + 23544, 23550, 23556, 23562, 23568, 23574, 23578, 23582, 23586, 23590, + 23594, 23598, 23602, 23608, 23614, 23620, 23626, 23632, 23638, 23644, + 23650, 23656, 23661, 23666, 23671, 23676, 23682, 23688, 23694, 23700, + 23706, 23712, 23718, 23723, 23729, 23735, 23741, 23746, 23752, 23758, + 23764, 23769, 23774, 23779, 23784, 23789, 23794, 23799, 23804, 23809, + 23814, 23819, 23824, 23828, 23833, 23838, 23843, 23848, 23853, 23858, + 23863, 23868, 23873, 23878, 23883, 23888, 23893, 23898, 23903, 23908, + 23913, 23918, 23923, 23928, 23933, 23938, 23943, 23948, 23953, 23958, + 23963, 23968, 23973, 23977, 23982, 23987, 23992, 23997, 24002, 24007, + 24012, 24017, 24022, 24027, 24032, 24037, 24042, 24047, 24052, 24057, + 24062, 24067, 24072, 24077, 24082, 24087, 24092, 24097, 24102, 24106, + 24111, 24116, 24121, 24126, 24131, 24135, 24140, 24145, 24150, 24155, + 24160, 24164, 24169, 24175, 24180, 24185, 24190, 24195, 24201, 24206, + 24211, 24216, 24221, 24226, 24231, 24236, 24241, 24246, 24251, 24256, + 24261, 24266, 24271, 24276, 24281, 24286, 24291, 24296, 24301, 24306, + 24311, 24316, 24321, 24326, 24331, 24336, 24341, 24346, 24351, 24356, + 24361, 24366, 24371, 24376, 24381, 24386, 24391, 24396, 24401, 24406, + 24411, 24416, 24421, 24427, 24432, 24437, 24442, 24447, 24452, 24457, + 24462, 24467, 24472, 24477, 24482, 24487, 24492, 24497, 24502, 24507, + 24512, 24517, 24522, 24527, 24532, 24537, 24542, 24547, 24552, 24557, + 24562, 24567, 24572, 24577, 24582, 24587, 24592, 24597, 24602, 24607, + 24612, 24617, 24623, 24627, 24631, 24635, 24639, 24643, 24647, 24651, + 24655, 24661, 24667, 24673, 24679, 24685, 24691, 24697, 24704, 24710, + 24715, 24720, 24725, 24730, 24735, 24740, 24745, 24750, 24755, 24760, + 24765, 24770, 24775, 24780, 24785, 24790, 24795, 24800, 24805, 24810, + 24815, 24820, 24825, 24830, 24835, 24840, 24845, 24850, 0, 0, 0, 24856, + 24866, 24870, 24877, 24881, 24885, 24889, 24897, 24901, 24906, 24911, + 24916, 24920, 24925, 24930, 24933, 24937, 24941, 24950, 24954, 24958, + 24964, 24968, 24972, 24980, 24984, 24992, 24998, 25004, 25010, 25016, + 25025, 25030, 25034, 25043, 25046, 25052, 25056, 25062, 25067, 25073, + 25081, 25087, 25092, 25099, 25104, 25108, 25112, 25122, 25128, 25132, + 25142, 25148, 25152, 25156, 25163, 25170, 25175, 25180, 25189, 25193, + 25197, 25201, 25209, 25216, 25220, 25224, 25228, 25232, 25236, 25240, + 25244, 25248, 25252, 25256, 25260, 25265, 25270, 25275, 25279, 25283, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 25287, 25291, 25295, 25299, + 25303, 25308, 25313, 25318, 25323, 25327, 25331, 25336, 25340, 0, 25344, + 25349, 25354, 25359, 25363, 25368, 25373, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 25378, 25382, 25386, 25390, 25394, 25399, 25404, 25409, 25414, 25418, + 25422, 25427, 25431, 25435, 25439, 25444, 25449, 25454, 25458, 25463, + 25468, 25473, 25479, 0, 0, 0, 0, 0, 0, 0, 0, 0, 25484, 25488, 25492, + 25496, 25500, 25505, 25510, 25515, 25520, 25524, 25528, 25533, 25537, + 25541, 25545, 25550, 25555, 25560, 25564, 25569, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 25574, 25578, 25582, 25586, 25590, 25595, 25600, 25605, + 25610, 25614, 25618, 25623, 25627, 0, 25631, 25636, 25641, 0, 25646, + 25651, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 25656, 25659, 25663, 25667, + 25671, 25675, 25679, 25683, 25687, 25691, 25695, 25699, 25703, 25707, + 25711, 25715, 25719, 25723, 25726, 25730, 25734, 25738, 25742, 25746, + 25750, 25754, 25758, 25762, 25766, 25770, 25774, 25778, 25782, 25785, + 25789, 25793, 25799, 25805, 25811, 25817, 25823, 25829, 25835, 25841, + 25847, 25853, 25859, 25865, 25871, 25877, 25886, 25895, 25901, 25907, + 25913, 25918, 25922, 25927, 25932, 25937, 25941, 25946, 25951, 25956, + 25960, 25965, 25969, 25974, 25979, 25984, 25989, 25993, 25997, 26001, + 26005, 26009, 26013, 26017, 26021, 26025, 26029, 26035, 26039, 26043, + 26047, 26051, 26055, 26063, 26069, 26073, 26079, 26083, 26089, 26093, 0, + 0, 26097, 26101, 26104, 26107, 26110, 26113, 26116, 26119, 26122, 26125, + 0, 0, 0, 0, 0, 0, 26128, 26136, 26144, 26152, 26160, 26168, 26176, 26184, + 26192, 26200, 0, 0, 0, 0, 0, 0, 26208, 26211, 26214, 26217, 26222, 26225, + 26230, 26237, 26245, 26250, 26257, 26260, 26267, 26274, 26281, 0, 26285, + 26289, 26292, 26295, 26298, 26301, 26304, 26307, 26310, 26313, 0, 0, 0, + 0, 0, 0, 26316, 26319, 26322, 26325, 26328, 26331, 26335, 26339, 26343, + 26346, 26350, 26354, 26357, 26361, 26365, 26368, 26372, 26376, 26380, + 26384, 26388, 26392, 26396, 26399, 26402, 26406, 26410, 26413, 26417, + 26421, 26425, 26429, 26433, 26437, 26441, 26445, 26452, 26457, 26462, + 26467, 26472, 26478, 26484, 26490, 26496, 26501, 26507, 26513, 26518, + 26524, 26530, 26536, 26542, 26548, 26553, 26559, 26564, 26570, 26576, + 26582, 26588, 26594, 26599, 26604, 26610, 26616, 26621, 26627, 26632, + 26638, 26643, 26648, 26654, 26660, 26666, 26672, 26678, 26684, 26690, + 26696, 26702, 26708, 26714, 26720, 26725, 26730, 26735, 26741, 0, 0, 0, + 0, 0, 0, 0, 0, 26747, 26756, 26765, 26773, 26781, 26791, 26799, 26808, + 26815, 26822, 26829, 26837, 26845, 26853, 26861, 26869, 26877, 26885, + 26893, 26900, 26908, 26916, 26924, 26932, 26940, 26950, 26960, 26970, + 26980, 26990, 27000, 27010, 27020, 27030, 27040, 27050, 27060, 27070, + 27080, 27088, 27096, 27106, 27114, 0, 0, 0, 0, 0, 27124, 27128, 27132, + 27136, 27140, 27144, 27148, 27152, 27156, 27160, 27164, 27168, 27172, + 27176, 27180, 27184, 27188, 27192, 27196, 27200, 27204, 27208, 27212, + 27216, 27222, 27226, 27232, 27236, 27242, 27246, 27252, 27256, 27260, + 27264, 27268, 27272, 27276, 27282, 27288, 27294, 27300, 27305, 27310, + 27315, 27321, 27327, 27333, 27339, 27346, 27352, 27357, 27362, 27366, + 27370, 27374, 27378, 27382, 27386, 27390, 27396, 27402, 27408, 27413, + 27420, 27425, 27430, 27436, 27441, 27448, 27455, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 27461, 27466, 27469, 27473, 27477, 27481, 27485, 27489, 27493, + 27497, 27501, 27505, 27509, 27513, 27517, 27521, 27524, 27527, 27531, + 27535, 27539, 27542, 27545, 27548, 27552, 27556, 27560, 27564, 27568, 0, + 0, 0, 27571, 27575, 27579, 27583, 27588, 27593, 27598, 27603, 27607, + 27611, 27616, 27621, 0, 0, 0, 0, 27627, 27631, 27636, 27641, 27646, + 27650, 27654, 27658, 27662, 27667, 27671, 27675, 0, 0, 0, 0, 27679, 0, 0, + 0, 27683, 27687, 27691, 27695, 27698, 27701, 27704, 27707, 27710, 27713, + 27716, 27719, 27722, 27727, 27733, 27739, 27745, 27751, 27756, 27762, + 27768, 27774, 27779, 27785, 27790, 27796, 27802, 27807, 27813, 27819, + 27825, 27830, 27835, 27840, 27846, 27852, 27857, 27863, 27868, 27874, + 27879, 27885, 0, 0, 27891, 27897, 27903, 27909, 27915, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 27921, 27928, 27935, 27941, 27948, 27955, 27961, 27968, + 27975, 27982, 27989, 27995, 28002, 28009, 28015, 28022, 28029, 28035, + 28042, 28049, 28055, 28061, 28068, 28074, 28080, 28087, 28093, 28100, + 28107, 28114, 28121, 28128, 28135, 28141, 28148, 28155, 28161, 28168, + 28175, 28182, 28189, 28196, 28203, 28210, 0, 0, 0, 0, 28217, 28225, + 28232, 28239, 28245, 28252, 28258, 28265, 28271, 28278, 28285, 28292, + 28299, 28306, 28313, 28320, 28327, 28334, 28341, 28348, 28354, 28360, + 28367, 28374, 28381, 28387, 0, 0, 0, 0, 0, 0, 28393, 28399, 28404, 28409, + 28414, 28419, 28424, 28429, 28434, 28439, 28444, 0, 0, 0, 28450, 28456, + 28462, 28466, 28472, 28478, 28484, 28490, 28496, 28502, 28508, 28514, + 28520, 28526, 28532, 28538, 28544, 28550, 28556, 28560, 28566, 28572, + 28578, 28584, 28590, 28596, 28602, 28608, 28614, 28620, 28626, 28632, + 28638, 28644, 28650, 28654, 28659, 28664, 28669, 28673, 28678, 28682, + 28687, 28692, 28697, 28701, 28706, 28711, 28716, 28721, 28726, 28730, + 28734, 28739, 28744, 28749, 28753, 28757, 28762, 28767, 28772, 28777, 0, + 0, 28783, 28787, 28794, 28799, 28805, 28811, 28816, 28822, 28828, 28833, + 28839, 28845, 28851, 28857, 28863, 28868, 28873, 28879, 28884, 28890, + 28895, 28901, 28907, 28913, 28919, 28923, 28928, 28933, 28939, 28945, + 28950, 28956, 28962, 28966, 28971, 28976, 28980, 28985, 28990, 28995, + 29000, 29006, 29012, 29018, 29023, 29028, 29032, 29037, 29041, 29046, + 29050, 29055, 29060, 29065, 29070, 29077, 29084, 29092, 29103, 29112, + 29120, 29127, 29138, 29144, 29151, 0, 29158, 29163, 29168, 29176, 29182, + 29190, 29195, 29201, 29207, 29213, 29218, 29224, 29229, 29236, 29242, + 29247, 29253, 29259, 29265, 29272, 29279, 29286, 29291, 29296, 29303, + 29310, 29317, 29324, 29331, 0, 0, 29338, 29345, 29352, 29358, 29364, + 29370, 29376, 29382, 29388, 29394, 29400, 0, 0, 0, 0, 0, 0, 29406, 29412, + 29417, 29422, 29427, 29432, 29437, 29442, 29447, 29452, 0, 0, 0, 0, 0, 0, + 29457, 29462, 29467, 29472, 29477, 29482, 29487, 29495, 29502, 29507, + 29512, 29517, 29522, 29527, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 58646, 58654, 58662, 58672, 58678, 58682, 58686, 58692, 58698, 58703, - 58707, 58711, 58715, 58719, 58725, 58729, 58733, 58737, 58747, 58751, - 58755, 58761, 58765, 58771, 58775, 58779, 58785, 58791, 58797, 58805, - 58813, 58817, 58821, 58825, 58831, 58835, 58844, 58850, 58854, 58858, - 58862, 58866, 58870, 58874, 58881, 58887, 58893, 58897, 58903, 58907, - 58913, 58921, 58931, 58935, 58943, 58947, 58953, 58961, 58969, 58973, - 58977, 58983, 58988, 58994, 59000, 59004, 59008, 59011, 59015, 59019, - 59023, 59027, 59031, 59035, 59039, 59042, 59046, 59050, 59054, 59058, - 59062, 59066, 59069, 59073, 59077, 59080, 59084, 59088, 59092, 59096, - 59100, 59104, 59108, 59112, 59116, 59120, 59124, 59128, 59132, 59136, - 59140, 59144, 59148, 59152, 59156, 59160, 59164, 59168, 59172, 59176, - 59180, 59184, 59188, 59192, 59196, 59200, 59204, 59208, 59212, 59216, - 59220, 59224, 59228, 59232, 59236, 59240, 59244, 59248, 59252, 59256, - 59259, 59263, 59267, 59271, 59275, 59279, 59283, 59287, 59291, 59295, - 59299, 59303, 59307, 59311, 59315, 59319, 59323, 59327, 59331, 59335, - 59339, 59343, 59347, 59351, 59355, 59359, 59363, 59367, 59371, 59375, - 59379, 59383, 59387, 59391, 59395, 59399, 59403, 59407, 59411, 59415, - 59419, 59423, 59427, 59431, 59435, 59439, 59443, 59447, 59451, 59455, - 59459, 59463, 59467, 59471, 59475, 59479, 59483, 59487, 59491, 59495, - 59499, 59503, 59507, 59511, 59515, 59519, 59523, 59527, 59531, 59535, - 59539, 59543, 59547, 59551, 59555, 59559, 59563, 59567, 59571, 59575, - 59579, 59583, 59587, 59591, 59595, 59599, 59603, 59607, 59611, 59615, - 59619, 59623, 59627, 59631, 59635, 59639, 59643, 59647, 59651, 59655, - 59659, 59663, 59667, 59671, 59675, 59679, 59683, 59687, 59691, 59695, - 59699, 59703, 59707, 59711, 59715, 59719, 59723, 59727, 59730, 59734, - 59738, 59742, 59746, 59750, 59754, 59758, 59762, 59766, 59770, 59774, - 59778, 59782, 59786, 59790, 59794, 59798, 59802, 59806, 59810, 59814, - 59818, 59822, 59826, 59830, 59834, 59838, 59842, 59846, 59850, 59854, - 59858, 59862, 59866, 59870, 59874, 59878, 59882, 59886, 59890, 59894, - 59898, 59902, 59906, 59910, 59914, 59918, 59922, 59926, 59930, 59934, - 59938, 59942, 59946, 59950, 59954, 59958, 59962, 59966, 59970, 59974, - 59978, 59982, 59986, 59990, 59994, 59998, 60002, 60006, 60010, 60014, - 60018, 60022, 60026, 60030, 60034, 60038, 60042, 60046, 60050, 60054, - 60058, 60062, 60066, 60070, 60074, 60078, 60082, 60086, 60090, 60094, - 60098, 60102, 60106, 60110, 60114, 60118, 60122, 60126, 60130, 60134, - 60138, 60142, 60146, 60150, 60154, 60158, 60162, 60166, 60170, 60174, - 60178, 60182, 60186, 60190, 60193, 60197, 60201, 60205, 60209, 60213, - 60217, 60221, 60225, 60229, 60233, 60237, 60241, 60245, 60249, 60253, - 60257, 60261, 60265, 60269, 60273, 60277, 60281, 60285, 60289, 60293, - 60297, 60301, 60305, 60309, 60313, 60317, 60321, 60325, 60329, 60333, - 60337, 60341, 60345, 60349, 60353, 60357, 60361, 60365, 60369, 60373, - 60377, 60381, 60385, 60389, 60393, 60397, 60401, 60405, 60409, 60413, - 60417, 60421, 60425, 60429, 60433, 60437, 60441, 60445, 60449, 60453, - 60457, 60461, 60465, 60469, 60473, 60477, 60481, 60485, 60489, 60493, - 60497, 60501, 60505, 60509, 60513, 60517, 60521, 60525, 60529, 60533, - 60537, 60541, 60545, 60549, 60553, 60557, 60561, 60565, 60569, 60573, - 60577, 60581, 60585, 60589, 60593, 60597, 60601, 60605, 60609, 60613, - 60617, 60621, 60625, 60629, 60633, 60637, 60641, 60645, 60649, 60653, - 60657, 60661, 60665, 60669, 60673, 60677, 60681, 60685, 60689, 60693, - 60697, 60701, 60705, 60709, 60713, 60717, 60721, 60725, 60729, 60733, - 60737, 60741, 60745, 60749, 60753, 60757, 60761, 60765, 60769, 60773, - 60777, 60781, 60785, 60789, 60793, 60797, 60801, 60805, 60809, 60813, - 60817, 60821, 60825, 60829, 60833, 60837, 60841, 60845, 60849, 60853, - 60857, 60861, 60865, 60869, 60873, 60877, 60881, 60885, 60889, 60893, - 60897, 60901, 60905, 60909, 60913, 60917, 60921, 60925, 60929, 60933, - 60937, 60941, 60945, 60949, 60953, 60957, 60961, 60965, 60969, 60973, - 60977, 60981, 60985, 60989, 60993, 60997, 61001, 61005, 61009, 61013, - 61017, 61021, 61025, 61029, 61033, 61037, 61041, 61045, 61048, 61052, - 61056, 61060, 61064, 61068, 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, 61204, 61208, 61212, - 61216, 61220, 61224, 61228, 61232, 61236, 61240, 61244, 61248, 61252, - 61256, 61260, 61264, 61268, 61272, 61276, 61280, 61284, 61288, 61292, - 61296, 61300, 61304, 61308, 61312, 61316, 61320, 61324, 61328, 61332, - 61336, 61340, 61344, 61348, 61352, 61356, 61360, 61364, 61368, 61372, - 61376, 61380, 61384, 61388, 61392, 61396, 61400, 61404, 61408, 61412, - 61416, 61420, 61424, 61428, 61432, 61436, 61440, 61444, 61448, 61452, - 61456, 61460, 61464, 61468, 61472, 61476, 61480, 61484, 61488, 61492, - 61496, 61500, 61503, 61507, 61511, 61515, 61519, 61523, 61527, 61531, - 61535, 61539, 61543, 61547, 61551, 61555, 61559, 61563, 61567, 61571, - 61575, 61579, 61583, 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, 61715, 61719, 61723, 61727, 61731, - 61735, 61739, 61743, 61747, 61751, 61755, 61759, 61763, 61767, 61771, - 61775, 61779, 61783, 61787, 61791, 61795, 61799, 61803, 61807, 61811, - 61815, 61819, 61823, 61827, 61831, 61835, 61839, 61843, 61847, 61851, - 61855, 61859, 61863, 61867, 61871, 61875, 61879, 61883, 61887, 61891, - 61895, 61899, 61903, 61907, 61911, 61915, 61919, 61923, 61927, 61931, - 61935, 61939, 61943, 61947, 61951, 61955, 61959, 61963, 61967, 61971, - 61975, 61979, 61983, 61987, 61991, 61995, 61999, 62003, 62007, 62011, - 62015, 62019, 62023, 62027, 62031, 62035, 62039, 62043, 62047, 62051, - 62055, 62059, 62063, 62067, 62071, 62075, 62079, 62083, 62087, 62091, - 62095, 62099, 62103, 62106, 62110, 62114, 62118, 62122, 62126, 62130, - 62134, 62138, 62142, 62146, 62150, 62154, 62158, 62162, 62166, 62170, - 62174, 62178, 62182, 62186, 62190, 62194, 62198, 62202, 62206, 62210, - 62214, 62218, 62222, 62226, 62230, 62234, 62238, 62242, 62246, 62250, - 62254, 62258, 62262, 62266, 62270, 62274, 62278, 62282, 62286, 62290, - 62294, 62298, 62302, 62306, 62310, 62314, 62318, 62322, 62326, 62330, - 62334, 62338, 62342, 62346, 62350, 62354, 62358, 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, 62486, 62490, - 62494, 62498, 62502, 62506, 62510, 62514, 62518, 62522, 62526, 62530, - 62534, 62538, 62542, 62546, 62550, 62554, 62558, 62562, 62566, 62570, - 62574, 62578, 62582, 62586, 62590, 62594, 62598, 62602, 62606, 62610, - 62614, 62618, 62622, 62626, 62630, 62634, 62638, 62642, 62646, 62650, - 62654, 62658, 62662, 62666, 62670, 62674, 62678, 62682, 62686, 62690, - 62694, 62698, 62702, 62706, 62710, 62714, 62718, 62722, 62726, 62730, - 62734, 62738, 62742, 62746, 62750, 62754, 62758, 62762, 62766, 62770, - 62774, 62778, 62782, 62786, 62790, 62794, 62798, 62802, 62806, 62810, - 62814, 62818, 62822, 62826, 62830, 62834, 62838, 62842, 62846, 62850, - 62854, 62858, 62862, 62865, 62869, 62873, 62877, 62881, 62885, 62889, - 62893, 62897, 62901, 62905, 62909, 62913, 62917, 62921, 62925, 62929, - 62933, 62937, 62941, 62945, 62949, 62953, 62957, 62961, 62965, 62969, - 62973, 62977, 62981, 62985, 62989, 62993, 62997, 63001, 63005, 63009, - 63013, 63017, 63021, 63025, 63029, 63033, 63037, 63041, 63045, 63049, - 63053, 63057, 63061, 63065, 63069, 63073, 63077, 63081, 63085, 63089, - 63093, 63097, 63101, 63105, 63109, 63113, 63117, 63121, 63125, 63129, - 63133, 63137, 63141, 63145, 63149, 63153, 63157, 63161, 63165, 63169, - 63173, 63177, 63181, 63185, 63189, 63193, 63197, 63201, 63205, 63209, - 63213, 63217, 63221, 63225, 63229, 63233, 63237, 63241, 63245, 63249, - 63253, 63257, 63261, 63265, 63269, 63273, 63277, 63281, 63285, 63289, - 63293, 63297, 63301, 63305, 63309, 63313, 63317, 63321, 63325, 63329, - 63333, 63337, 63341, 63345, 63349, 63353, 63357, 63361, 63365, 63369, - 63373, 63377, 63381, 63385, 63389, 63393, 63397, 63401, 63405, 63409, - 63413, 63417, 63421, 63425, 63429, 63433, 63437, 63441, 63445, 63449, - 63453, 63457, 63461, 63465, 63469, 63473, 63477, 63481, 63485, 63489, - 63493, 63497, 63501, 63505, 63509, 63513, 63517, 63521, 63525, 63529, - 63533, 63537, 63541, 63545, 63549, 63553, 63557, 63561, 63565, 63569, - 63573, 63577, 63581, 63585, 63589, 63593, 63597, 63601, 63605, 63609, - 63613, 63617, 63621, 63625, 63629, 63633, 63637, 63641, 63645, 0, 0, 0, - 63649, 63653, 63657, 63661, 63665, 63669, 63673, 63677, 63681, 63685, - 63689, 63693, 63697, 63701, 63705, 63709, 63713, 63717, 63721, 63725, - 63729, 63733, 63737, 63741, 63745, 63749, 63753, 63757, 63761, 63765, - 63769, 63773, 63777, 63781, 63785, 63789, 63793, 63797, 63801, 63805, - 63809, 63813, 63817, 63821, 63825, 63829, 63833, 63837, 63841, 63845, - 63849, 63853, 63857, 63861, 63865, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63869, 63873, - 63877, 63881, 63885, 63889, 63893, 63897, 63901, 63905, 63909, 63913, - 63917, 63921, 63925, 63929, 63933, 63937, 63941, 63945, 63949, 63953, - 63957, 63961, 63965, 63969, 63973, 63977, 63981, 63985, 63989, 63993, - 63997, 64001, 64005, 64009, 64013, 64016, 64020, 64024, 64028, 64032, - 64036, 64040, 64044, 64048, 64052, 64056, 64060, 64064, 64068, 64072, - 64076, 64080, 64084, 64088, 64092, 64096, 64100, 64104, 64108, 64112, - 64116, 64120, 64124, 64128, 64132, 64136, 64140, 64144, 64148, 64152, - 64156, 64160, 64163, 64167, 64171, 64174, 64178, 64182, 64186, 64189, - 64193, 64197, 64201, 64205, 64209, 64213, 64217, 64221, 64225, 64229, - 64233, 64237, 64241, 64245, 64248, 64252, 64256, 64260, 64264, 64268, - 64272, 64276, 64280, 64284, 64287, 64290, 64294, 64298, 64302, 64305, - 64309, 64313, 64317, 64321, 64325, 64329, 64333, 64337, 64341, 64345, - 64349, 64353, 64357, 64361, 64365, 64369, 64373, 64377, 64381, 64385, - 64389, 64393, 64397, 64401, 64405, 64409, 64413, 64417, 64421, 64425, - 64429, 64433, 64437, 64441, 64445, 64449, 64453, 64457, 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, 64607, 64611, 64615, 64619, 64623, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 29532, 29538, + 29544, 29548, 29552, 29556, 29560, 29566, 29570, 29576, 29580, 29586, + 29592, 29600, 29606, 29614, 29618, 29622, 29626, 29632, 29635, 29640, + 29644, 29650, 29654, 29658, 29664, 29668, 29674, 29678, 29684, 29692, + 29700, 29708, 29714, 29718, 29724, 29728, 29734, 29737, 29740, 29746, + 29750, 29756, 29759, 29762, 29765, 29769, 29773, 29779, 29785, 29789, + 29792, 29796, 29801, 29806, 29813, 29818, 29825, 29832, 29841, 29848, + 29857, 29862, 29869, 29876, 29885, 29890, 29897, 29902, 29908, 29914, + 29920, 29926, 29932, 29938, 0, 0, 0, 0, 29944, 29948, 29951, 29954, + 29957, 29960, 29963, 29966, 29969, 29972, 29975, 29978, 29981, 29984, + 29989, 29994, 29999, 30002, 30007, 30012, 30017, 30022, 30029, 30034, + 30039, 30044, 30049, 30056, 30062, 30068, 30074, 30080, 30086, 30095, + 30104, 30110, 30116, 30125, 30134, 30143, 30152, 30161, 30170, 30179, + 30188, 0, 0, 0, 30197, 30202, 30207, 30212, 30216, 30220, 30224, 30229, + 30233, 30237, 30242, 30246, 30251, 30256, 30261, 30266, 30271, 30276, + 30281, 30286, 30291, 30295, 30299, 30304, 30309, 30314, 30318, 30322, + 30326, 30331, 30336, 30341, 30346, 30350, 30357, 30364, 30371, 30377, + 30383, 30389, 30395, 30401, 30407, 0, 0, 0, 30412, 30417, 30422, 30427, + 30431, 30435, 30439, 30443, 30447, 30451, 30455, 30459, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 30463, 30466, 30470, + 30474, 30478, 30482, 30486, 30490, 30494, 30498, 30502, 30506, 30510, + 30514, 30517, 30520, 30524, 30528, 30532, 30536, 30540, 30544, 30547, + 30551, 30555, 30559, 30563, 30566, 30569, 30573, 30576, 30580, 30584, + 30588, 30592, 30596, 30599, 30604, 30609, 30614, 30618, 30622, 30627, + 30631, 30636, 30640, 30646, 30651, 30656, 30661, 30667, 30672, 30678, + 30684, 30690, 30694, 0, 0, 0, 30698, 30703, 30712, 30717, 30724, 30729, + 30733, 30736, 30739, 30742, 30745, 30748, 30751, 30754, 30757, 0, 0, 0, + 30760, 30764, 30768, 30772, 30779, 30785, 30791, 30797, 30803, 30809, + 30815, 30821, 30827, 30833, 30840, 30847, 30854, 30861, 30868, 30875, + 30882, 30889, 30896, 30903, 30910, 30917, 30924, 30931, 30938, 30945, + 30952, 30959, 30966, 30973, 30980, 30987, 30994, 31001, 31008, 31015, + 31022, 31029, 31036, 31043, 31051, 31059, 31067, 31073, 31079, 31085, + 31093, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 31102, 31107, 31112, 31117, 31122, 31131, + 31142, 31151, 31162, 31168, 31181, 31187, 31194, 31201, 31206, 31212, + 31218, 31229, 31238, 31245, 31252, 31260, 31267, 31275, 31285, 31295, + 31302, 31309, 31316, 31326, 31331, 31339, 31345, 31353, 31362, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 31367, 31372, 31378, 31384, 31392, 31398, + 31404, 31410, 31415, 31422, 31427, 31433, 31439, 31447, 31452, 31458, + 31463, 31470, 31476, 31484, 31492, 31498, 31504, 31511, 31518, 31524, + 31530, 31536, 31542, 31547, 31553, 31561, 31568, 31574, 31580, 31586, + 31592, 31600, 31604, 31610, 31616, 31622, 31628, 31634, 31640, 31644, + 31649, 31654, 31661, 31666, 31670, 31675, 31680, 31685, 31689, 31694, + 31699, 31703, 31707, 31711, 31716, 31720, 31725, 31730, 31734, 31739, + 31743, 31748, 31752, 31757, 31762, 31768, 31773, 31778, 31782, 31787, + 31793, 31800, 31805, 31810, 31815, 31819, 31824, 31828, 31834, 31841, + 31848, 31853, 31858, 31862, 31868, 31873, 31878, 31883, 31888, 31894, + 31899, 31905, 31910, 31916, 31922, 31928, 31935, 31942, 31949, 31956, + 31963, 31970, 31975, 31984, 31994, 32004, 32014, 32024, 32034, 32044, + 32057, 32067, 32077, 32087, 32093, 32098, 32105, 32113, 32121, 32128, + 32135, 32142, 32149, 32157, 32166, 32175, 32184, 32193, 32202, 32211, + 32220, 32229, 32238, 32247, 32256, 32265, 32274, 32283, 32291, 32300, + 32311, 32319, 32329, 32340, 32349, 32358, 32368, 32377, 32385, 32394, + 32400, 32405, 32413, 32418, 32425, 32430, 32439, 32445, 32451, 32458, + 32463, 32468, 32476, 32484, 32493, 32502, 32507, 32514, 32524, 32532, + 32541, 32546, 32552, 32557, 32564, 32569, 32578, 32583, 32588, 32593, + 32600, 32606, 32611, 32620, 32628, 32633, 32638, 32645, 32652, 32656, + 32660, 32663, 32666, 32669, 32672, 32675, 32678, 32685, 32688, 32691, + 32696, 32700, 32704, 32708, 32712, 32716, 32726, 32732, 32738, 32744, + 32752, 32760, 32766, 32772, 32779, 32785, 32790, 32796, 32802, 32807, + 32813, 32819, 32827, 32832, 32838, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 32844, 32850, 32855, 32864, 32872, 32880, + 32887, 32894, 32901, 32908, 32916, 32924, 32934, 32944, 32952, 32960, + 32968, 32976, 32985, 32994, 33002, 33010, 33019, 33028, 33038, 33048, + 33057, 33066, 33074, 33082, 33090, 33098, 33108, 33118, 33126, 33134, + 33142, 33150, 33158, 33166, 33174, 33182, 33190, 33198, 33206, 33214, + 33223, 33232, 33241, 33250, 33260, 33270, 33277, 33284, 33292, 33300, + 33309, 33318, 33326, 33334, 33346, 33358, 33367, 33376, 33385, 33394, + 33401, 33408, 33416, 33424, 33432, 33440, 33448, 33456, 33464, 33472, + 33481, 33490, 33499, 33508, 33517, 33526, 33536, 33546, 33556, 33566, + 33575, 33584, 33591, 33598, 33606, 33614, 33622, 33630, 33638, 33646, + 33658, 33670, 33679, 33688, 33696, 33704, 33712, 33720, 33731, 33742, + 33753, 33764, 33776, 33788, 33796, 33804, 33812, 33820, 33829, 33838, + 33847, 33856, 33864, 33872, 33880, 33888, 33896, 33904, 33913, 33922, + 33932, 33942, 33950, 33958, 33966, 33974, 33982, 33990, 33997, 34004, + 34012, 34020, 34028, 34036, 34044, 34052, 34060, 34068, 34076, 34084, + 34092, 34100, 34108, 34116, 34124, 34132, 34141, 34150, 34159, 34167, + 34176, 34185, 34194, 34203, 34213, 34222, 34228, 34233, 34240, 34247, + 34255, 34263, 34272, 34281, 34291, 34301, 34312, 34323, 34333, 34343, + 34353, 34363, 34372, 34381, 34391, 34401, 34412, 34423, 34433, 34443, + 34453, 34463, 34470, 34477, 34485, 34493, 34500, 34507, 34516, 34525, + 34535, 34545, 34556, 34567, 34577, 34587, 34597, 34607, 34616, 34625, + 34633, 34641, 34648, 34655, 34663, 34671, 34680, 34689, 34699, 34709, + 34720, 34731, 34741, 34751, 34761, 34771, 34780, 34789, 34799, 34809, + 34820, 34831, 34841, 34851, 34861, 34871, 34878, 34885, 34893, 34901, + 34910, 34919, 34929, 34939, 34950, 34961, 34971, 34981, 34991, 35001, + 35009, 35017, 35025, 35033, 35042, 35051, 35059, 35067, 35074, 35081, + 35088, 35095, 35103, 35111, 35119, 35127, 35137, 35147, 35157, 35167, + 35177, 35187, 35195, 35203, 35213, 35223, 35233, 35243, 35253, 35263, + 35271, 35279, 35289, 35299, 35309, 0, 0, 35319, 35327, 35335, 35345, + 35355, 35365, 0, 0, 35375, 35383, 35391, 35401, 35411, 35421, 35431, + 35441, 35451, 35459, 35467, 35477, 35487, 35497, 35507, 35517, 35527, + 35535, 35543, 35553, 35563, 35573, 35583, 35593, 35603, 35611, 35619, + 35629, 35639, 35649, 35659, 35669, 35679, 35687, 35695, 35705, 35715, + 35725, 0, 0, 35735, 35743, 35751, 35761, 35771, 35781, 0, 0, 35791, + 35799, 35807, 35817, 35827, 35837, 35847, 35857, 0, 35867, 0, 35875, 0, + 35885, 0, 35895, 35905, 35913, 35921, 35931, 35941, 35951, 35961, 35971, + 35981, 35989, 35997, 36007, 36017, 36027, 36037, 36047, 36057, 36065, + 36073, 36081, 36089, 36097, 36105, 36113, 36121, 36129, 36137, 36145, + 36153, 36161, 0, 0, 36169, 36179, 36189, 36202, 36215, 36228, 36241, + 36254, 36267, 36277, 36287, 36300, 36313, 36326, 36339, 36352, 36365, + 36375, 36385, 36398, 36411, 36424, 36437, 36450, 36463, 36473, 36483, + 36496, 36509, 36522, 36535, 36548, 36561, 36571, 36581, 36594, 36607, + 36620, 36633, 36646, 36659, 36669, 36679, 36692, 36705, 36718, 36731, + 36744, 36757, 36765, 36773, 36784, 36792, 0, 36803, 36811, 36822, 36830, + 36838, 36846, 36854, 36862, 36865, 36868, 36871, 36874, 36880, 36891, + 36899, 0, 36910, 36918, 36929, 36937, 36945, 36953, 36961, 36969, 36974, + 36979, 36984, 36992, 37000, 37011, 0, 0, 37022, 37030, 37041, 37049, + 37057, 37065, 0, 37073, 37078, 37083, 37088, 37096, 37104, 37115, 37126, + 37134, 37142, 37150, 37161, 37169, 37177, 37185, 37193, 37201, 37207, + 37213, 0, 0, 37216, 37227, 37235, 0, 37246, 37254, 37265, 37273, 37281, + 37289, 37297, 37305, 37308, 0, 37311, 37315, 37319, 37323, 37327, 37331, + 37335, 37339, 37343, 37347, 37351, 37355, 37361, 37367, 37373, 37376, + 37379, 37381, 37385, 37389, 37393, 37397, 37399, 37403, 37407, 37413, + 37419, 37426, 37433, 37438, 37443, 37449, 37455, 37457, 37460, 37462, + 37466, 37470, 37474, 37477, 37481, 37485, 37489, 37493, 37497, 37503, + 37507, 37511, 37517, 37522, 37529, 37531, 37534, 37538, 37541, 37545, + 37550, 37552, 37561, 37570, 37573, 37577, 37579, 37581, 37583, 37586, + 37592, 37594, 37598, 37602, 37609, 37616, 37620, 37625, 37630, 37635, + 37639, 37643, 37647, 37650, 37653, 37657, 37664, 37669, 37673, 37677, + 37682, 37686, 37690, 37695, 37700, 37704, 37708, 37712, 37714, 37719, + 37724, 37728, 37732, 37736, 37740, 0, 0, 0, 0, 0, 37744, 37750, 37756, + 37763, 37770, 37775, 37780, 37784, 0, 0, 37790, 37793, 37796, 37799, + 37802, 37805, 37808, 37812, 37816, 37821, 37826, 37831, 37837, 37841, + 37844, 37847, 37850, 37853, 37856, 37859, 37862, 37865, 37868, 37872, + 37876, 37881, 37886, 0, 37891, 37897, 37903, 37909, 37916, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 37923, 37926, 37929, 37932, 37937, 37940, 37943, 37946, + 37949, 37952, 37955, 37959, 37962, 37965, 37968, 37971, 37974, 37979, + 37982, 37985, 37988, 37991, 37994, 37999, 38002, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 38005, 38010, 38015, 38022, + 38030, 38035, 38040, 38044, 38048, 38053, 38060, 38067, 38071, 38076, + 38081, 38086, 38091, 38098, 38103, 38108, 38113, 38122, 38129, 38135, + 38139, 38144, 38150, 38155, 38162, 38170, 38178, 38182, 38186, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 38190, 38194, 38201, 38205, 38209, + 38214, 38218, 38222, 38226, 38228, 38232, 38236, 38240, 38245, 38249, + 38253, 38261, 38264, 38268, 38271, 38274, 38280, 38283, 38286, 38292, + 38296, 38300, 38304, 38307, 38311, 38314, 38318, 38320, 38323, 38326, + 38330, 38332, 38336, 38339, 38342, 38347, 38352, 38358, 38361, 38364, + 38368, 38373, 38376, 38379, 38382, 38386, 38390, 38393, 38396, 38398, + 38401, 38404, 38407, 38411, 38416, 38419, 38423, 38427, 38431, 38435, + 38440, 38445, 38449, 38453, 38458, 38463, 38468, 38472, 38476, 38481, + 38485, 38488, 38491, 38493, 38497, 38502, 38509, 38516, 38523, 38530, + 38537, 38544, 38551, 38558, 38566, 38573, 38581, 38588, 38595, 38603, + 38611, 38616, 38621, 38626, 38631, 38636, 38641, 38646, 38651, 38656, + 38661, 38667, 38673, 38679, 38685, 38692, 38700, 38707, 38713, 38719, + 38725, 38731, 38737, 38743, 38749, 38755, 38761, 38768, 38775, 38782, + 38789, 38797, 38806, 38814, 38825, 38833, 38841, 38849, 38855, 38864, + 38873, 38881, 38890, 0, 0, 0, 0, 0, 0, 38898, 38900, 38903, 38905, 38908, + 38911, 38914, 38919, 38924, 38929, 38934, 38938, 38942, 38946, 38950, + 38955, 38961, 38966, 38972, 38977, 38982, 38987, 38993, 38998, 39004, + 39010, 39014, 39018, 39023, 39028, 39033, 39038, 39043, 39051, 39059, + 39067, 39075, 39082, 39090, 39097, 39104, 39112, 39122, 39129, 39136, + 39143, 39150, 39158, 39166, 39173, 39180, 39188, 39196, 39201, 39209, + 39214, 39219, 39225, 39230, 39236, 39243, 39250, 39255, 39261, 39266, + 39269, 39273, 39276, 39280, 39284, 39288, 39294, 39300, 39306, 39312, + 39316, 39320, 39324, 39328, 39334, 39340, 39344, 39349, 39353, 39358, + 39362, 39366, 39369, 39373, 39376, 39380, 39387, 39395, 39406, 39417, + 39422, 39431, 39438, 39446, 39454, 39458, 39464, 39472, 39476, 39481, + 39486, 39492, 39498, 39504, 39511, 39515, 39519, 39524, 39527, 39529, + 39533, 39537, 39544, 39548, 39550, 39552, 39556, 39563, 39568, 39574, + 39583, 39590, 39595, 39599, 39603, 39607, 39610, 39613, 39616, 39620, + 39624, 39628, 39632, 39636, 39639, 39643, 39647, 39650, 39652, 39655, + 39657, 39661, 39665, 39667, 39672, 39675, 39679, 39683, 39687, 39689, + 39691, 39693, 39696, 39700, 39704, 39708, 39712, 39716, 39722, 39728, + 39730, 39732, 39734, 39736, 39739, 39741, 39745, 39747, 39751, 39754, + 39759, 39763, 39767, 39770, 39774, 39778, 39783, 39787, 39796, 39806, + 39810, 39815, 39821, 39825, 39829, 39832, 39837, 39841, 39847, 39851, + 39862, 39870, 39874, 39878, 39884, 39888, 39891, 39893, 39896, 39900, + 39904, 39910, 39914, 39918, 39921, 39924, 39928, 39933, 39938, 39943, + 39948, 39953, 39960, 39967, 39971, 39975, 39977, 39981, 39984, 39987, + 39995, 40003, 40009, 40015, 40024, 40033, 40038, 40043, 40051, 40059, + 40061, 40063, 40068, 40073, 40079, 40085, 40090, 40095, 40099, 40103, + 40109, 40115, 40121, 40127, 40137, 40147, 40154, 40161, 40163, 40167, + 40171, 40176, 40181, 40188, 40195, 40198, 40201, 40204, 40207, 40210, + 40215, 40219, 40224, 40229, 40232, 40235, 40238, 40241, 40244, 40248, + 40251, 40254, 40257, 40260, 40262, 40264, 40266, 40268, 40276, 40284, + 40289, 40292, 40297, 40307, 40313, 40319, 40325, 40333, 40341, 40352, + 40356, 40360, 40362, 40368, 40370, 40372, 40374, 40376, 40382, 40385, + 40391, 40397, 40401, 40405, 40409, 40412, 40416, 40420, 40422, 40431, + 40440, 40445, 40450, 40455, 40461, 40467, 40470, 40473, 40476, 40479, + 40481, 40486, 40491, 40496, 40502, 40508, 40515, 40522, 40527, 40532, + 40537, 40542, 40550, 40558, 40566, 40574, 40582, 40590, 40598, 40606, + 40614, 40622, 40629, 40640, 40649, 40663, 40666, 40671, 40677, 40683, + 40690, 40704, 40719, 40725, 40731, 40738, 40744, 40752, 40758, 40771, + 40785, 40790, 40796, 40803, 40806, 40809, 40811, 40814, 40817, 40819, + 40821, 40825, 40828, 40831, 40834, 40837, 40842, 40847, 40852, 40857, + 40860, 40863, 40865, 40867, 40869, 40873, 40877, 40881, 40887, 40890, + 40892, 40894, 40899, 40904, 40909, 40914, 40919, 40924, 40926, 40928, + 40937, 40941, 40948, 40957, 40959, 40964, 40969, 40976, 40980, 40982, + 40986, 40988, 40992, 40996, 41000, 41002, 41004, 41006, 41011, 41018, + 41025, 41032, 41039, 41046, 41053, 41060, 41067, 41073, 41079, 41086, + 41093, 41100, 41107, 41113, 41119, 41126, 41133, 41140, 41148, 41155, + 41163, 41170, 41178, 41185, 41193, 41201, 41208, 41216, 41223, 41231, + 41238, 41246, 41253, 41260, 41267, 41274, 41281, 41289, 41296, 41303, + 41310, 41318, 41325, 41332, 41339, 41346, 41354, 41362, 41369, 41376, + 41382, 41389, 41394, 41401, 41408, 41416, 41423, 41431, 41439, 41444, + 41449, 41454, 41461, 41468, 41475, 41482, 41487, 41491, 41500, 41506, + 41509, 41517, 41520, 41525, 41530, 41533, 41536, 41544, 41547, 41552, + 41555, 41562, 41567, 41575, 41578, 41581, 41584, 41589, 41594, 41597, + 41600, 41608, 41611, 41616, 41623, 41627, 41631, 41636, 41641, 41647, + 41652, 41658, 41664, 41669, 41675, 41683, 41689, 41697, 41705, 41711, + 41719, 41727, 41736, 41744, 41750, 41758, 41767, 41775, 41779, 41784, + 41797, 41810, 41814, 41818, 41822, 41826, 41836, 41840, 41845, 41850, + 41855, 41860, 41865, 41870, 41880, 41890, 41898, 41908, 41918, 41926, + 41936, 41946, 41954, 41964, 41974, 41982, 41990, 42000, 42010, 42013, + 42016, 42019, 42024, 42028, 42034, 42041, 42048, 42056, 42063, 42067, + 42071, 42075, 42079, 42081, 42085, 42089, 42094, 42099, 42106, 42113, + 42116, 42123, 42125, 42127, 42131, 42135, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 42140, 42144, 42151, 42158, 42165, + 42172, 42176, 42180, 42184, 42188, 42193, 42199, 42204, 42210, 42216, + 42222, 42228, 42236, 42243, 42250, 42257, 42264, 42270, 42276, 42285, + 42289, 42296, 42300, 42304, 42310, 42316, 42322, 42328, 42332, 42336, + 42339, 42343, 42347, 42354, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 42361, 42364, 42368, 42372, 42378, 42384, + 42390, 42398, 42405, 42409, 42417, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 42422, 42425, 42428, 42431, 42434, 42437, 42440, + 42443, 42446, 42449, 42453, 42457, 42461, 42465, 42469, 42473, 42477, + 42481, 42485, 42489, 42493, 42496, 42499, 42502, 42505, 42508, 42511, + 42514, 42517, 42520, 42524, 42528, 42532, 42536, 42540, 42544, 42548, + 42552, 42556, 42560, 42564, 42570, 42576, 42582, 42589, 42596, 42603, + 42610, 42617, 42624, 42631, 42638, 42645, 42652, 42659, 42666, 42673, + 42680, 42687, 42694, 42701, 42706, 42712, 42718, 42724, 42729, 42735, + 42741, 42747, 42752, 42758, 42764, 42769, 42774, 42779, 42784, 42790, + 42796, 42801, 42806, 42812, 42817, 42823, 42829, 42835, 42841, 42847, + 42852, 42858, 42864, 42870, 42875, 42881, 42887, 42893, 42898, 42904, + 42910, 42915, 42920, 42925, 42930, 42936, 42942, 42947, 42952, 42958, + 42963, 42969, 42975, 42981, 42987, 42993, 42998, 43004, 43010, 43016, + 43021, 43027, 43033, 43039, 43044, 43050, 43056, 43061, 43066, 43071, + 43076, 43082, 43088, 43093, 43098, 43104, 43109, 43115, 43121, 43127, + 43133, 43139, 43143, 43149, 43155, 43161, 43167, 43173, 43179, 43185, + 43191, 43197, 43203, 43207, 43211, 43215, 43219, 43223, 43227, 43231, + 43235, 43239, 43244, 43250, 43255, 43260, 43265, 43270, 43279, 43288, + 43297, 43306, 43315, 43324, 43333, 43342, 43349, 43357, 43365, 43372, + 43379, 43387, 43395, 43402, 43409, 43417, 43425, 43432, 43439, 43447, + 43455, 43462, 43469, 43477, 43486, 43495, 43503, 43512, 43521, 43528, + 43535, 43543, 43552, 43561, 43569, 43578, 43587, 43594, 43601, 43610, + 43619, 43627, 43635, 43644, 43653, 43660, 43667, 43676, 43685, 43693, + 43701, 43710, 43719, 43726, 43733, 43742, 43751, 43759, 43768, 43777, + 43785, 43795, 43805, 43815, 43825, 43834, 43843, 43852, 43861, 43868, + 43876, 43884, 43892, 43900, 43905, 43910, 43919, 43927, 43934, 43943, + 43951, 43958, 43967, 43975, 43982, 43991, 43999, 44006, 44015, 44023, + 44030, 44039, 44047, 44054, 44063, 44071, 44078, 44087, 44095, 44102, + 44111, 44119, 44126, 44135, 44144, 44153, 44162, 44175, 44188, 44195, + 44200, 44205, 44210, 44215, 44220, 44225, 44230, 44235, 44243, 44251, + 44259, 44267, 44272, 44279, 44286, 44293, 44298, 44306, 44313, 44321, + 44325, 44332, 44338, 44345, 44349, 44355, 44361, 44367, 44371, 44374, + 44378, 44382, 44389, 44395, 44401, 44407, 44413, 44427, 44437, 44451, + 44465, 44471, 44481, 44495, 44498, 44501, 44508, 44516, 44521, 44526, + 44534, 44545, 44556, 44564, 44568, 44572, 44575, 44578, 44582, 44586, + 44589, 44592, 44597, 44602, 44608, 44614, 44619, 44624, 44630, 44636, + 44641, 44646, 44651, 44656, 44662, 44668, 44673, 44678, 44684, 44690, + 44695, 44700, 44703, 44706, 44715, 44717, 44719, 44722, 44726, 44732, + 44734, 44737, 44744, 44751, 44759, 44767, 44777, 44791, 44796, 44801, + 44805, 44810, 44818, 44826, 44835, 44844, 44853, 44862, 44867, 44872, + 44878, 44884, 44890, 44896, 44899, 44905, 44911, 44921, 44931, 44939, + 44947, 44956, 44965, 44969, 44977, 44985, 44993, 45001, 45010, 45019, + 45028, 45037, 45042, 45047, 45052, 45057, 45062, 45068, 45074, 45079, + 45085, 45087, 45089, 45091, 45093, 45096, 45099, 45101, 45103, 45105, + 45109, 45113, 45115, 45117, 45120, 45123, 45127, 45133, 45139, 45141, + 45148, 45152, 45157, 45162, 45164, 45173, 45179, 45185, 45191, 45197, + 45203, 45209, 45214, 45217, 45220, 45223, 45225, 45227, 45231, 45235, + 45240, 45245, 45250, 45253, 45257, 45262, 45265, 45269, 45274, 45279, + 45284, 45289, 45294, 45299, 45304, 45309, 45314, 45319, 45324, 45329, + 45335, 45341, 45347, 45349, 45352, 45354, 45357, 45359, 45361, 45363, + 45365, 45367, 45369, 45371, 45373, 45375, 45377, 45379, 45381, 45383, + 45385, 45387, 45389, 45391, 45396, 45401, 45406, 45411, 45416, 45421, + 45426, 45431, 45436, 45441, 45446, 45451, 45456, 45461, 45466, 45471, + 45476, 45481, 45486, 45491, 45495, 45499, 45503, 45509, 45515, 45520, + 45525, 45530, 45535, 45540, 45545, 45553, 45561, 45569, 45577, 45585, + 45593, 45601, 45609, 45615, 45620, 45625, 45630, 45633, 45637, 45641, + 45645, 45649, 45653, 45657, 45664, 45671, 45679, 45687, 45692, 45697, + 45704, 45711, 45718, 45725, 45728, 45731, 45736, 45738, 45742, 45747, + 45749, 45751, 45753, 45755, 45760, 45763, 45765, 45770, 45777, 45784, + 45787, 45791, 45796, 45801, 45809, 45815, 45820, 45831, 45837, 45843, + 45848, 45853, 45859, 45862, 45865, 45870, 45872, 45876, 45878, 45880, + 45882, 45884, 45886, 45888, 45893, 45895, 45897, 45899, 45901, 45905, + 45907, 45910, 45915, 45920, 45925, 45930, 45936, 45942, 45944, 45947, + 45954, 45960, 45966, 45973, 45977, 0, 45981, 45983, 45987, 45993, 45998, + 46000, 46004, 46013, 46021, 46029, 46035, 46041, 46046, 46052, 46057, + 46060, 46074, 46077, 46082, 0, 46087, 0, 0, 0, 0, 46096, 46103, 46107, + 46109, 46111, 46115, 46121, 46126, 46132, 46134, 46140, 46142, 46148, + 46150, 46152, 46157, 46159, 46163, 46168, 46170, 46175, 46180, 46184, + 46191, 0, 46201, 46207, 46210, 46216, 0, 46219, 46224, 46228, 46230, 0, + 0, 46232, 46236, 46240, 46245, 46247, 46252, 46255, 46258, 46261, 46265, + 46269, 46274, 46278, 46283, 46288, 46292, 46298, 46305, 46308, 46314, + 46319, 46323, 46328, 46334, 46340, 46347, 46353, 46360, 0, 46367, 46374, + 46378, 46385, 46391, 46396, 46402, 46406, 46411, 46414, 46420, 46426, + 46433, 46441, 46448, 46457, 46467, 46474, 46480, 46484, 46492, 46497, + 46506, 46509, 46512, 46521, 46532, 46539, 46541, 46547, 46552, 46554, + 46557, 46561, 46569, 0, 46578, 0, 46583, 46591, 46599, 46607, 0, 0, 0, + 46615, 46623, 46628, 46631, 46635, 46638, 46649, 46659, 46669, 0, 0, + 46678, 46687, 46693, 46701, 46705, 46713, 46717, 46725, 46732, 46739, + 46748, 46757, 46767, 46777, 46787, 46797, 46806, 46815, 46825, 46835, + 46844, 46853, 46860, 46867, 46874, 46881, 46888, 46895, 46902, 46909, + 46916, 46924, 46930, 46936, 46942, 46948, 46954, 46960, 46966, 46972, + 46978, 46985, 46993, 47001, 47009, 47017, 47025, 47033, 47041, 47049, + 47057, 47066, 0, 0, 0, 47071, 47077, 47080, 47086, 47092, 47097, 47101, + 47106, 47112, 47119, 47122, 47129, 47136, 47140, 47149, 47158, 47163, + 47169, 47174, 47179, 47186, 47193, 47201, 47209, 0, 47218, 47227, 47232, + 47236, 47243, 47247, 47254, 47262, 47267, 47275, 47279, 47284, 47288, + 47293, 0, 47297, 47302, 47311, 47313, 47317, 47321, 47328, 47335, 47340, + 47348, 47354, 0, 47360, 0, 0, 0, 47363, 47371, 47375, 47382, 47390, + 47398, 47403, 47408, 47414, 47419, 47424, 47430, 47435, 47438, 47442, + 47446, 47453, 47462, 47467, 47476, 47485, 47491, 47497, 47502, 47507, + 47512, 47517, 47523, 47529, 47537, 47545, 47551, 47557, 47562, 47567, + 47574, 47581, 47587, 47590, 47593, 47597, 47601, 47605, 47610, 47616, + 47622, 47629, 47636, 47641, 47645, 47649, 47653, 47657, 47661, 47665, + 47669, 47673, 47677, 47681, 47685, 47689, 47693, 47697, 47701, 47705, + 47709, 47713, 47717, 47721, 47725, 47729, 47733, 47737, 47741, 47745, + 47749, 47753, 47757, 47761, 47765, 47769, 47773, 47777, 47781, 47785, + 47789, 47793, 47797, 47801, 47805, 47809, 47813, 47817, 47821, 47825, + 47829, 47833, 47837, 47841, 47845, 47849, 47853, 47857, 47861, 47865, + 47869, 47873, 47877, 47881, 47885, 47889, 47893, 47897, 47901, 47905, + 47909, 47913, 47917, 47921, 47925, 47929, 47933, 47937, 47941, 47945, + 47949, 47953, 47957, 47961, 47965, 47969, 47973, 47977, 47981, 47985, + 47989, 47993, 47997, 48001, 48005, 48009, 48013, 48017, 48021, 48025, + 48029, 48033, 48037, 48041, 48045, 48049, 48053, 48057, 48061, 48065, + 48069, 48073, 48077, 48081, 48085, 48089, 48093, 48097, 48101, 48105, + 48109, 48113, 48117, 48121, 48125, 48129, 48133, 48137, 48141, 48145, + 48149, 48153, 48157, 48161, 48165, 48169, 48173, 48177, 48181, 48185, + 48189, 48193, 48197, 48201, 48205, 48209, 48213, 48217, 48221, 48225, + 48229, 48233, 48237, 48241, 48245, 48249, 48253, 48257, 48261, 48265, + 48269, 48273, 48277, 48281, 48285, 48289, 48293, 48297, 48301, 48305, + 48309, 48313, 48317, 48321, 48325, 48329, 48333, 48337, 48341, 48345, + 48349, 48353, 48357, 48361, 48365, 48369, 48373, 48377, 48381, 48385, + 48389, 48393, 48397, 48401, 48405, 48409, 48413, 48417, 48421, 48425, + 48429, 48433, 48437, 48441, 48445, 48449, 48453, 48457, 48461, 48465, + 48469, 48473, 48477, 48481, 48485, 48489, 48493, 48497, 48501, 48505, + 48509, 48513, 48517, 48521, 48525, 48529, 48533, 48537, 48541, 48545, + 48549, 48553, 48557, 48561, 48565, 48569, 48573, 48577, 48581, 48585, + 48589, 48593, 48597, 48601, 48605, 48609, 48613, 48617, 48621, 48625, + 48629, 48633, 48637, 48641, 48645, 48649, 48653, 48657, 48661, 48665, + 48672, 48680, 48686, 48692, 48699, 48706, 48712, 48718, 48724, 48730, + 48735, 48740, 48745, 48750, 48756, 48762, 48770, 48777, 48782, 48787, + 48795, 48804, 48811, 48821, 48832, 48835, 48838, 48842, 48846, 48852, + 48858, 48868, 48878, 48888, 48898, 48905, 48912, 48919, 48926, 48937, + 48948, 48959, 48970, 48980, 48990, 49002, 49014, 49025, 49036, 49048, + 49060, 49069, 49079, 49089, 49100, 49111, 49118, 49125, 49132, 49139, + 49149, 49159, 49167, 49175, 49182, 49189, 49196, 49203, 49210, 49215, + 49220, 49226, 49234, 49244, 49252, 49260, 49268, 49276, 49284, 49292, + 49300, 49308, 49316, 49324, 49333, 49342, 49350, 49358, 49367, 49376, + 49385, 49394, 49404, 49414, 49423, 49432, 49442, 49452, 49466, 49483, + 49497, 49514, 49528, 49542, 49556, 49570, 49580, 49591, 49601, 49612, + 49629, 49646, 49654, 49660, 49667, 49674, 49681, 49688, 49693, 49699, + 49704, 49709, 49715, 49720, 49725, 49730, 49735, 49740, 49747, 49752, + 49759, 49764, 49769, 49773, 49777, 49784, 49791, 49798, 49805, 49812, + 49819, 49832, 49845, 49858, 49871, 49879, 49887, 49893, 49899, 49906, + 49913, 49920, 49927, 49931, 49936, 49944, 49952, 49960, 49967, 49971, + 49979, 49987, 49990, 49993, 49998, 50004, 50012, 50020, 50040, 50060, + 50080, 50100, 50120, 50140, 50160, 50180, 50185, 50192, 50201, 50209, + 50217, 50222, 50225, 50228, 50233, 50236, 50255, 50262, 50268, 50274, + 50278, 50281, 50284, 50287, 50298, 50310, 50317, 50324, 50327, 50331, + 50334, 50339, 50344, 50349, 50355, 50364, 50371, 50378, 50386, 50393, + 50400, 50403, 50409, 50415, 50418, 50421, 50426, 50431, 50437, 50443, + 50447, 50452, 50459, 50463, 50469, 50473, 50477, 50485, 50497, 50505, + 50509, 50511, 50520, 50529, 50535, 50538, 50544, 50550, 50555, 50560, + 50565, 50570, 50575, 50580, 50582, 50588, 50593, 50600, 50604, 50610, + 50613, 50617, 50624, 50631, 50633, 50635, 50641, 50647, 50653, 50662, + 50671, 50678, 50685, 50691, 50697, 50702, 50707, 50712, 50718, 50724, + 50729, 50736, 50740, 50744, 50757, 50770, 50781, 50790, 50796, 50803, + 50808, 50813, 50818, 50823, 50828, 50830, 50837, 50844, 50851, 50858, + 50865, 50873, 50879, 50884, 50890, 50896, 50902, 50909, 50915, 50923, + 50931, 50939, 50947, 50954, 50960, 50966, 50975, 50979, 50988, 50997, + 51006, 51014, 51018, 51024, 51031, 51038, 51042, 51048, 51055, 51060, + 51065, 51071, 51076, 51081, 51088, 51095, 51100, 51105, 51113, 51121, + 51131, 51141, 51148, 51155, 51159, 51163, 51175, 51181, 51187, 51192, + 51197, 51204, 51211, 51217, 51223, 51232, 51240, 51248, 51255, 51262, + 51269, 51275, 51282, 51288, 51295, 51302, 51309, 51316, 51322, 51327, + 51336, 51346, 51353, 51362, 51368, 51373, 51378, 51387, 51393, 51399, + 51405, 51413, 51418, 51425, 51432, 51443, 51450, 51457, 51464, 51471, + 51478, 51485, 51492, 51503, 51514, 51524, 51534, 51546, 51558, 51563, + 51568, 51576, 51584, 51590, 51596, 51605, 51614, 51622, 51630, 51638, + 51646, 51656, 51666, 51680, 51694, 51701, 51708, 51719, 51730, 51737, + 51744, 51753, 51762, 51767, 51772, 51781, 51790, 51795, 51800, 51808, + 51814, 51820, 51828, 51836, 51849, 51862, 51866, 51870, 51877, 51884, + 51891, 51899, 51907, 51915, 51923, 51929, 51935, 51941, 51947, 51954, + 51961, 51969, 51977, 51980, 51983, 51988, 51993, 51999, 52005, 52012, + 52019, 52028, 52037, 52044, 52051, 52059, 52067, 52075, 52083, 52090, + 52097, 52104, 52111, 52115, 52119, 52126, 52133, 52138, 52143, 52148, + 52153, 52159, 52173, 52180, 52187, 52191, 52193, 52195, 52200, 52205, + 52210, 52214, 52222, 52229, 52236, 52244, 52256, 52264, 52272, 52283, + 52287, 52291, 52295, 52300, 52311, 52318, 52325, 52332, 52337, 52344, + 52353, 52361, 52367, 52373, 52379, 52388, 52397, 52405, 52414, 52419, + 52422, 52427, 52433, 52439, 52445, 52451, 52455, 52458, 52462, 52466, + 52472, 52478, 52484, 52490, 52494, 52498, 52505, 52512, 52519, 52526, + 52533, 52540, 52550, 52560, 52567, 52574, 52582, 52590, 52594, 52599, + 52604, 52610, 52616, 52619, 52622, 52625, 52628, 52632, 52637, 52642, + 52647, 52652, 52657, 52661, 52665, 52669, 52673, 52677, 52681, 52685, + 52691, 52695, 52701, 52706, 52713, 52721, 52728, 52736, 52743, 52751, + 52760, 52767, 52777, 52788, 52794, 52803, 52809, 52818, 52827, 52833, + 52839, 52843, 52847, 52856, 52865, 52872, 52879, 52888, 0, 0, 0, 52897, + 52902, 52906, 52910, 52915, 52920, 52925, 52933, 52941, 52944, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 52948, 52953, 52958, 52963, 52968, + 52973, 52978, 52983, 52988, 52993, 52998, 53004, 53008, 53013, 53018, + 53023, 53028, 53033, 53038, 53043, 53048, 53053, 53058, 53063, 53068, + 53073, 53078, 53083, 53088, 53093, 53098, 53103, 53108, 53113, 53118, + 53124, 53129, 53135, 53144, 53149, 53157, 53164, 53173, 53178, 53183, + 53188, 53194, 0, 53201, 53206, 53211, 53216, 53221, 53226, 53231, 53236, + 53241, 53246, 53251, 53257, 53261, 53266, 53271, 53276, 53281, 53286, + 53291, 53296, 53301, 53306, 53311, 53316, 53321, 53326, 53331, 53336, + 53341, 53346, 53351, 53356, 53361, 53366, 53371, 53377, 53382, 53388, + 53397, 53402, 53410, 53417, 53426, 53431, 53436, 53441, 53447, 0, 53454, + 53462, 53470, 53480, 53487, 53495, 53501, 53510, 53518, 53526, 53534, + 53542, 53550, 53558, 53563, 53570, 53575, 53581, 53589, 53596, 53603, + 53611, 53617, 53623, 53630, 53637, 53646, 53656, 53662, 53669, 53674, + 53684, 53694, 53699, 53704, 53709, 53714, 53719, 53724, 53729, 53734, + 53739, 53744, 53749, 53754, 53759, 53764, 53769, 53774, 53779, 53784, + 53789, 53794, 53799, 53804, 53809, 53814, 53819, 53824, 53829, 53834, + 53839, 53844, 53848, 53852, 53857, 53862, 53867, 53872, 53877, 53882, + 53887, 53892, 53897, 53902, 53907, 53912, 53917, 53922, 53927, 53932, + 53937, 53942, 53949, 53956, 53963, 53970, 53977, 53984, 53991, 53998, + 54005, 54012, 54019, 54026, 54033, 54040, 54045, 54050, 54057, 54064, + 54071, 54078, 54085, 54092, 54099, 54106, 54113, 54120, 54127, 54134, + 54140, 54146, 54152, 54158, 54165, 54172, 54179, 54186, 54193, 54200, + 54207, 54214, 54221, 54228, 54236, 54244, 54252, 54260, 54268, 54276, + 54284, 54292, 54296, 54302, 54308, 54312, 54318, 54324, 54330, 54337, + 54344, 54351, 54358, 54363, 54369, 0, 0, 0, 0, 0, 0, 0, 54375, 54383, + 54392, 54401, 54409, 54415, 54420, 54425, 54430, 54435, 54440, 54445, + 54450, 54455, 54460, 54465, 54470, 54475, 54480, 54485, 54490, 54495, + 54500, 54505, 54510, 54515, 54520, 54525, 54530, 54535, 54540, 54545, + 54550, 54555, 54560, 54565, 54570, 54575, 54580, 54585, 54590, 54595, + 54600, 54605, 54610, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 54615, 54619, 54624, + 54629, 54634, 54639, 54648, 54653, 54658, 54663, 54668, 54673, 54678, + 54683, 54688, 54695, 54700, 54705, 54714, 54721, 54726, 54731, 54736, + 54743, 54748, 54755, 54760, 54765, 54772, 54779, 54784, 54789, 54794, + 54801, 54808, 54813, 54818, 54823, 54828, 54833, 54840, 54847, 54852, + 54857, 54862, 54867, 54872, 54877, 54882, 54887, 54892, 54897, 54902, + 54909, 0, 0, 0, 0, 0, 0, 0, 0, 0, 54914, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 54921, 54925, 54929, 54933, 54937, 54941, 54945, 54949, + 54953, 54957, 54961, 54967, 54971, 54975, 54979, 54983, 54987, 54991, + 54995, 54999, 55003, 55007, 55011, 0, 0, 0, 0, 0, 0, 0, 0, 0, 55015, + 55019, 55023, 55027, 55031, 55035, 55039, 0, 55043, 55047, 55051, 55055, + 55059, 55063, 55067, 0, 55071, 55075, 55079, 55083, 55087, 55091, 55095, + 0, 55099, 55103, 55107, 55111, 55115, 55119, 55123, 0, 55127, 55131, + 55135, 55139, 55143, 55147, 55151, 0, 55155, 55159, 55163, 55167, 55171, + 55175, 55179, 0, 55183, 55187, 55191, 55195, 55199, 55203, 55207, 0, + 55211, 55215, 55219, 55223, 55227, 55231, 55235, 0, 55239, 55244, 55249, + 55254, 55259, 55264, 55269, 55273, 55278, 55283, 55288, 55292, 55297, + 55302, 55307, 55312, 55316, 55321, 55326, 55331, 55336, 55341, 55346, + 55350, 55355, 55360, 55367, 55372, 55377, 55383, 55390, 55397, 55406, + 55413, 55422, 55426, 55430, 55436, 55442, 55448, 55456, 55462, 55466, + 55470, 55474, 55480, 55486, 55490, 55492, 55496, 55501, 55503, 55507, + 55511, 55515, 55521, 55526, 55530, 55534, 55539, 55545, 55550, 55555, + 55560, 55565, 55572, 55579, 55584, 55589, 55594, 55599, 55604, 55609, + 55613, 55617, 55624, 55631, 55637, 55641, 55645, 55648, 55652, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 55660, 55664, 55668, 55673, 55678, 55683, 55687, 55691, 55695, + 55700, 55705, 55709, 55713, 55717, 55721, 55726, 55731, 55736, 55741, + 55745, 55749, 55754, 55759, 55764, 55769, 55773, 0, 55777, 55781, 55785, + 55789, 55793, 55797, 55801, 55806, 55811, 55815, 55820, 55825, 55834, + 55838, 55842, 55846, 55853, 55857, 55862, 55867, 55871, 55875, 55881, + 55886, 55891, 55896, 55901, 55905, 55909, 55913, 55917, 55921, 55926, + 55931, 55935, 55939, 55944, 55949, 55954, 55958, 55962, 55967, 55972, + 55978, 55984, 55988, 55994, 56000, 56004, 56010, 56016, 56021, 56026, + 56030, 56036, 56040, 56044, 56050, 56056, 56061, 56066, 56070, 56074, + 56082, 56088, 56094, 56100, 56105, 56110, 56115, 56121, 56125, 56131, + 56135, 56139, 56145, 56151, 56157, 56163, 56169, 56175, 56181, 56187, + 56193, 56199, 56205, 56211, 56215, 56221, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 56227, 56230, 56234, 56238, 56242, 56246, 56249, 56252, 56256, + 56260, 56264, 56268, 56271, 56276, 56280, 56284, 56288, 56294, 56298, + 56302, 56306, 56310, 56317, 56323, 56327, 56331, 56335, 56339, 56343, + 56347, 56351, 56355, 56359, 56363, 56367, 56373, 56377, 56381, 56385, + 56389, 56393, 56397, 56401, 56405, 56409, 56413, 56417, 56421, 56425, + 56429, 56433, 56437, 56443, 56449, 56454, 56459, 56463, 56467, 56471, + 56475, 56479, 56483, 56487, 56491, 56495, 56499, 56503, 56507, 56511, + 56515, 56519, 56523, 56527, 56531, 56535, 56539, 56543, 56547, 56551, + 56555, 56561, 56565, 56569, 56573, 56577, 56581, 56585, 56589, 56593, + 56598, 56605, 56609, 56613, 56617, 56621, 56625, 56629, 56633, 56637, + 56641, 56645, 56649, 56653, 56660, 56664, 56670, 56674, 56678, 56682, + 56686, 56690, 56693, 56697, 56701, 56705, 56709, 56713, 56717, 56721, + 56725, 56729, 56733, 56737, 56741, 56745, 56749, 56753, 56757, 56761, + 56765, 56769, 56773, 56777, 56781, 56785, 56789, 56793, 56797, 56801, + 56805, 56809, 56813, 56817, 56821, 56827, 56831, 56835, 56839, 56843, + 56847, 56851, 56855, 56859, 56863, 56867, 56871, 56875, 56879, 56883, + 56887, 56891, 56895, 56899, 56903, 56907, 56911, 56915, 56919, 56923, + 56927, 56931, 56935, 56943, 56947, 56951, 56955, 56959, 56963, 56969, + 56973, 56977, 56981, 56985, 56989, 56993, 56997, 57001, 57005, 57009, + 57013, 57017, 57021, 57027, 57031, 57035, 57039, 57043, 57047, 57051, + 57055, 57059, 57063, 57067, 57071, 57075, 57079, 57083, 57087, 57091, + 57095, 57099, 57103, 57107, 57111, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 57115, 57123, 57130, 57141, 57151, + 57159, 57168, 57177, 57187, 57199, 57211, 57223, 0, 0, 0, 0, 57229, + 57232, 57235, 57240, 57243, 57250, 57254, 57258, 57262, 57266, 57270, + 57275, 57280, 57284, 57288, 57293, 57298, 57303, 57308, 57311, 57314, + 57320, 57326, 57331, 57336, 57343, 57350, 57354, 57358, 57362, 57369, + 57375, 57382, 57387, 57392, 57397, 57402, 57407, 57412, 57417, 57422, + 57427, 57432, 57437, 57442, 57447, 57452, 57458, 57463, 57467, 57473, + 57484, 57494, 57509, 57519, 57523, 57532, 57538, 57544, 57550, 57555, + 57558, 57563, 57567, 0, 57573, 57577, 57580, 57584, 57587, 57591, 57594, + 57598, 57601, 57605, 57608, 57611, 57615, 57619, 57623, 57627, 57631, + 57635, 57639, 57643, 57647, 57651, 57655, 57659, 57663, 57667, 57671, + 57675, 57679, 57683, 57687, 57691, 57695, 57699, 57703, 57708, 57712, + 57716, 57720, 57724, 57727, 57731, 57734, 57738, 57742, 57746, 57750, + 57753, 57757, 57760, 57764, 57768, 57772, 57776, 57780, 57784, 57788, + 57792, 57796, 57800, 57804, 57808, 57811, 57815, 57819, 57823, 57827, + 57831, 57834, 57839, 57843, 57848, 57852, 57855, 57859, 57863, 57867, + 57871, 57876, 57880, 57884, 57888, 57892, 57895, 57899, 57903, 0, 0, + 57908, 57916, 57924, 57931, 57938, 57942, 57948, 57953, 57958, 57962, + 57965, 57969, 57972, 57976, 57979, 57983, 57986, 57990, 57993, 57996, + 58000, 58004, 58008, 58012, 58016, 58020, 58024, 58028, 58032, 58036, + 58040, 58044, 58048, 58052, 58056, 58060, 58064, 58068, 58072, 58076, + 58080, 58084, 58088, 58093, 58097, 58101, 58105, 58109, 58112, 58116, + 58119, 58123, 58127, 58131, 58135, 58138, 58142, 58145, 58149, 58153, + 58157, 58161, 58165, 58169, 58173, 58177, 58181, 58185, 58189, 58193, + 58196, 58200, 58204, 58208, 58212, 58216, 58219, 58224, 58228, 58233, + 58237, 58240, 58244, 58248, 58252, 58256, 58261, 58265, 58269, 58273, + 58277, 58280, 58284, 58288, 58293, 58297, 58301, 58305, 58309, 58314, + 58321, 58325, 58331, 0, 0, 0, 0, 0, 58336, 58340, 58344, 58347, 58351, + 58355, 58359, 58362, 58365, 58369, 58373, 58377, 58381, 58385, 58389, + 58393, 58397, 58401, 58404, 58408, 58412, 58415, 58418, 58421, 58424, + 58428, 58432, 58436, 58440, 58444, 58448, 58452, 58456, 58460, 58464, + 58467, 58470, 58474, 58478, 58482, 58486, 0, 0, 0, 58490, 58494, 58498, + 58502, 58506, 58510, 58514, 58518, 58522, 58526, 58530, 58534, 58538, + 58542, 58546, 58550, 58554, 58558, 58562, 58566, 58570, 58574, 58578, + 58582, 58586, 58590, 58594, 58598, 58602, 58606, 58610, 58613, 58617, + 58620, 58624, 58628, 58631, 58635, 58639, 58642, 58646, 58650, 58654, + 58658, 58661, 58665, 58669, 58673, 58677, 58681, 58685, 58688, 58691, + 58695, 58699, 58703, 58707, 58711, 58715, 58719, 58723, 58727, 58731, + 58735, 58739, 58743, 58747, 58751, 58755, 58759, 58763, 58767, 58771, + 58775, 58779, 58783, 58787, 58791, 58795, 58799, 58803, 58807, 58811, + 58815, 58819, 58823, 58827, 58831, 58835, 58839, 58843, 58847, 58851, + 58855, 0, 58859, 58865, 58871, 58876, 58881, 58886, 58892, 58898, 58904, + 58910, 58916, 58922, 58928, 58934, 58940, 58946, 58952, 58956, 58960, + 58964, 58968, 58972, 58976, 58980, 58984, 58988, 58992, 58996, 59000, + 59004, 59008, 59012, 59016, 59020, 59024, 59028, 59032, 59037, 59042, + 59047, 0, 0, 0, 0, 0, 0, 0, 0, 59052, 59056, 59060, 59064, 59068, 59072, + 59076, 59080, 59084, 59088, 59092, 59096, 59100, 59104, 59108, 59112, + 59115, 59119, 59122, 59126, 59130, 59134, 59138, 59142, 59146, 59150, + 59154, 59158, 59162, 59166, 59170, 59174, 59178, 59182, 59186, 59190, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 59194, 59199, 59204, 59209, 59213, + 59218, 59222, 59227, 59232, 59237, 59242, 59247, 59251, 59256, 59261, + 59266, 59271, 59275, 59279, 59283, 59287, 59291, 59295, 59299, 59303, + 59307, 59311, 59315, 59319, 59323, 59327, 59332, 59337, 59342, 59347, + 59352, 59357, 59362, 59367, 59372, 59377, 59382, 59387, 59392, 59397, + 59402, 59408, 0, 59415, 59418, 59421, 59424, 59427, 59430, 59433, 59436, + 59439, 59442, 59446, 59450, 59454, 59458, 59462, 59466, 59470, 59474, + 59478, 59482, 59486, 59490, 59494, 59498, 59502, 59506, 59510, 59514, + 59518, 59522, 59526, 59530, 59534, 59538, 59542, 59546, 59550, 59554, + 59558, 59562, 59566, 59575, 59584, 59593, 59602, 59611, 59620, 59629, + 59638, 59641, 59646, 59651, 59656, 59661, 59666, 59671, 59676, 59681, + 59686, 59690, 59695, 59700, 59705, 59710, 59715, 59719, 59723, 59727, + 59731, 59735, 59739, 59743, 59747, 59751, 59755, 59759, 59763, 59767, + 59771, 59776, 59781, 59786, 59791, 59796, 59801, 59806, 59811, 59816, + 59821, 59826, 59831, 59836, 59841, 59847, 59853, 59858, 59863, 59866, + 59869, 59872, 59875, 59878, 59881, 59884, 59887, 59890, 59894, 59898, + 59902, 59906, 59910, 59914, 59918, 59922, 59926, 59930, 59934, 59938, + 59942, 59946, 59950, 59954, 59958, 59962, 59966, 59970, 59974, 59978, + 59982, 59986, 59990, 59994, 59998, 60002, 60006, 60010, 60014, 60018, + 60022, 60026, 60030, 60034, 60038, 60042, 60046, 60050, 60055, 60060, + 60065, 60070, 60074, 60079, 60084, 60089, 60094, 60099, 60104, 60109, + 60114, 60119, 60123, 60129, 60135, 60141, 60147, 60153, 60159, 60165, + 60171, 60177, 60183, 60189, 60195, 60198, 60201, 60204, 60209, 60212, + 60215, 60218, 60221, 60224, 60227, 60231, 60235, 60239, 60243, 60247, + 60251, 60255, 60259, 60263, 60267, 60271, 60275, 60279, 60282, 60285, + 60289, 60293, 60297, 60301, 60304, 60308, 60312, 60316, 60320, 60323, + 60327, 60331, 60335, 60339, 60342, 60346, 60350, 60353, 60357, 60361, + 60365, 60369, 60373, 60377, 60381, 0, 60385, 60388, 60391, 60394, 60397, + 60400, 60403, 60406, 60409, 60412, 60415, 60418, 60421, 60424, 60427, + 60430, 60433, 60436, 60439, 60442, 60445, 60448, 60451, 60454, 60457, + 60460, 60463, 60466, 60469, 60472, 60475, 60478, 60481, 60484, 60487, + 60490, 60493, 60496, 60499, 60502, 60505, 60508, 60511, 60514, 60517, + 60520, 60523, 60526, 60529, 60532, 60535, 60538, 60541, 60544, 60547, + 60550, 60553, 60556, 60559, 60562, 60565, 60568, 60571, 60574, 60577, + 60580, 60583, 60586, 60589, 60592, 60595, 60598, 60601, 60604, 60607, + 60610, 60613, 60616, 60619, 60622, 60625, 60628, 60631, 60634, 60637, + 60640, 60643, 60646, 60649, 60657, 60664, 60671, 60678, 60685, 60692, + 60699, 60706, 60713, 60720, 60728, 60736, 60744, 60752, 60760, 60768, + 60776, 60784, 60792, 60800, 60808, 60816, 60824, 60832, 60840, 60843, + 60846, 60849, 60851, 60854, 60857, 60860, 60865, 60870, 60873, 60880, + 60887, 60894, 60901, 60904, 60909, 60911, 60915, 60917, 60919, 60922, + 60925, 60928, 60931, 60934, 60937, 60940, 60945, 60950, 60953, 60956, + 60959, 60962, 60965, 60968, 60971, 60975, 60978, 60981, 60984, 60987, + 60990, 60994, 60997, 61000, 61003, 61008, 61013, 61018, 61023, 61028, + 61033, 61038, 61043, 61048, 61056, 61058, 61061, 61064, 61067, 61070, + 61075, 61083, 61086, 61089, 61093, 61096, 61099, 61102, 61107, 61110, + 61113, 61118, 61121, 61124, 61129, 61132, 61135, 61140, 61145, 61150, + 61153, 61156, 61159, 61162, 61168, 61171, 61174, 61177, 61179, 61182, + 61185, 61188, 61193, 61196, 61199, 61202, 61205, 61208, 61213, 61216, + 61219, 61222, 61225, 61228, 61231, 61234, 61237, 61240, 61245, 61249, + 61256, 61263, 61270, 61277, 61284, 61291, 61298, 61305, 61312, 61320, + 61328, 61336, 61344, 61352, 61360, 61368, 61376, 61384, 61392, 61400, + 61408, 61416, 61424, 61432, 61440, 61448, 61456, 61464, 61472, 61480, + 61488, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 61491, 61499, + 61507, 61517, 61523, 61527, 61531, 61537, 61543, 61548, 61552, 61556, + 61560, 61564, 61570, 61574, 61578, 61582, 61592, 61596, 61600, 61606, + 61610, 61616, 61620, 61624, 61630, 61636, 61642, 61650, 61658, 61662, + 61666, 61670, 61676, 61680, 61689, 61695, 61699, 61703, 61707, 61711, + 61715, 61719, 61726, 61732, 61738, 61742, 61748, 61752, 61758, 61766, + 61776, 61780, 61788, 61792, 61798, 61806, 61814, 61818, 61822, 61828, + 61833, 61839, 61845, 61849, 61853, 61856, 61860, 61864, 61868, 61872, + 61876, 61880, 61884, 61887, 61891, 61895, 61899, 61903, 61907, 61911, + 61914, 61918, 61922, 61925, 61929, 61933, 61937, 61941, 61945, 61949, + 61953, 61957, 61961, 61965, 61969, 61973, 61977, 61981, 61985, 61989, + 61993, 61997, 62001, 62005, 62009, 62013, 62017, 62021, 62025, 62029, + 62033, 62037, 62041, 62045, 62049, 62053, 62057, 62061, 62065, 62069, + 62073, 62077, 62081, 62085, 62089, 62093, 62097, 62101, 62104, 62108, + 62112, 62116, 62120, 62124, 62128, 62132, 62136, 62140, 62144, 62148, + 62152, 62156, 62160, 62164, 62168, 62172, 62176, 62180, 62184, 62188, + 62192, 62196, 62200, 62204, 62208, 62212, 62216, 62220, 62224, 62228, + 62232, 62236, 62240, 62244, 62248, 62252, 62256, 62260, 62264, 62268, + 62272, 62276, 62280, 62284, 62288, 62292, 62296, 62300, 62304, 62308, + 62312, 62316, 62320, 62324, 62328, 62332, 62336, 62340, 62344, 62348, + 62352, 62356, 62360, 62364, 62368, 62372, 62376, 62380, 62384, 62388, + 62392, 62396, 62400, 62404, 62408, 62412, 62416, 62420, 62424, 62428, + 62432, 62436, 62440, 62444, 62448, 62452, 62456, 62460, 62464, 62468, + 62472, 62476, 62480, 62484, 62488, 62492, 62496, 62500, 62504, 62508, + 62512, 62516, 62520, 62524, 62528, 62532, 62536, 62540, 62544, 62548, + 62552, 62556, 62560, 62564, 62568, 62572, 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, 62731, 62735, 62739, 62743, 62747, + 62751, 62755, 62759, 62763, 62767, 62771, 62775, 62779, 62783, 62787, + 62791, 62795, 62799, 62803, 62807, 62811, 62815, 62819, 62823, 62827, + 62831, 62835, 62839, 62843, 62847, 62851, 62855, 62859, 62863, 62867, + 62871, 62875, 62879, 62883, 62887, 62891, 62895, 62899, 62903, 62907, + 62911, 62915, 62919, 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, 63038, 63042, 63046, 63050, 63054, 63058, 63062, 63066, + 63070, 63074, 63078, 63082, 63086, 63090, 63094, 63098, 63102, 63106, + 63110, 63114, 63118, 63122, 63126, 63130, 63134, 63138, 63142, 63146, + 63150, 63154, 63158, 63162, 63166, 63170, 63174, 63178, 63182, 63186, + 63190, 63194, 63198, 63202, 63206, 63210, 63214, 63218, 63222, 63226, + 63230, 63234, 63238, 63242, 63246, 63250, 63254, 63258, 63262, 63266, + 63270, 63274, 63278, 63282, 63286, 63290, 63294, 63298, 63302, 63306, + 63310, 63314, 63318, 63322, 63326, 63330, 63334, 63338, 63342, 63346, + 63350, 63354, 63358, 63362, 63366, 63370, 63374, 63378, 63382, 63386, + 63390, 63394, 63397, 63401, 63405, 63409, 63413, 63417, 63421, 63425, + 63429, 63433, 63437, 63441, 63445, 63449, 63453, 63457, 63461, 63465, + 63469, 63473, 63477, 63481, 63485, 63489, 63493, 63497, 63501, 63505, + 63509, 63513, 63517, 63521, 63525, 63529, 63533, 63537, 63541, 63545, + 63549, 63553, 63557, 63561, 63565, 63569, 63573, 63577, 63581, 63585, + 63589, 63593, 63597, 63601, 63605, 63609, 63613, 63617, 63621, 63625, + 63629, 63633, 63637, 63641, 63645, 63649, 63653, 63657, 63661, 63665, + 63669, 63673, 63677, 63681, 63685, 63689, 63693, 63697, 63701, 63705, + 63709, 63713, 63717, 63721, 63725, 63729, 63733, 63737, 63741, 63745, + 63749, 63753, 63757, 63761, 63765, 63769, 63773, 63777, 63781, 63785, + 63789, 63793, 63797, 63801, 63805, 63809, 63813, 63817, 63821, 63825, + 63829, 63833, 63837, 63841, 63845, 63849, 63853, 63857, 63861, 63865, + 63869, 63873, 63877, 63881, 63885, 63889, 63892, 63896, 63900, 63904, + 63908, 63912, 63916, 63920, 63924, 63928, 63932, 63936, 63940, 63944, + 63948, 63952, 63956, 63960, 63964, 63968, 63972, 63976, 63980, 63984, + 63988, 63992, 63996, 64000, 64004, 64008, 64012, 64016, 64020, 64024, + 64028, 64032, 64036, 64040, 64044, 64048, 64052, 64056, 64060, 64064, + 64068, 64072, 64076, 64080, 64084, 64088, 64092, 64096, 64100, 64104, + 64108, 64112, 64116, 64120, 64124, 64128, 64132, 64136, 64140, 64144, + 64148, 64152, 64156, 64160, 64164, 64168, 64172, 64176, 64180, 64184, + 64188, 64192, 64196, 64200, 64204, 64208, 64212, 64216, 64220, 64224, + 64228, 64232, 64236, 64240, 64244, 64248, 64252, 64256, 64260, 64264, + 64268, 64272, 64276, 64280, 64284, 64288, 64292, 64296, 64300, 64304, + 64308, 64312, 64316, 64320, 64324, 64328, 64332, 64336, 64340, 64344, + 64347, 64351, 64355, 64359, 64363, 64367, 64371, 64375, 64379, 64383, + 64387, 64391, 64395, 64399, 64403, 64407, 64411, 64415, 64419, 64423, + 64427, 64431, 64435, 64439, 64443, 64447, 64451, 64455, 64459, 64463, + 64467, 64471, 64475, 64479, 64483, 64487, 64491, 64495, 64499, 64503, + 64507, 64511, 64515, 64519, 64523, 64527, 64531, 64535, 64539, 64543, + 64547, 64551, 64555, 64559, 64563, 64567, 64571, 64575, 64579, 64583, + 64587, 64591, 64595, 64599, 64603, 64607, 64611, 64615, 64619, 64623, 64627, 64631, 64635, 64639, 64643, 64647, 64651, 64655, 64659, 64663, - 64667, 64671, 64674, 64678, 64682, 64686, 64690, 64694, 64698, 64702, - 64706, 64710, 64714, 64718, 64722, 64726, 64730, 64734, 64738, 64742, - 64746, 64750, 64754, 64758, 64761, 64765, 64769, 64773, 64777, 64781, - 64785, 64789, 64793, 64797, 64801, 64805, 64809, 64813, 64817, 64821, - 64825, 64829, 64833, 64837, 64841, 64845, 64849, 64853, 64857, 64861, - 64865, 64869, 64873, 64877, 64881, 64885, 64889, 64893, 64897, 64901, - 64905, 64909, 64913, 64917, 64921, 64925, 64929, 64933, 64936, 64941, - 64945, 64951, 64956, 64962, 64966, 64970, 64974, 64978, 64982, 64986, - 64990, 64994, 64998, 65002, 65006, 65010, 65014, 65018, 65021, 65024, - 65027, 65030, 65033, 65036, 65039, 65042, 65045, 65050, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 65056, 65061, 65066, 65071, - 65076, 65082, 65088, 65093, 65098, 65103, 65108, 65115, 65122, 65129, - 65136, 65143, 65150, 65160, 65170, 65177, 65184, 65190, 65196, 65202, - 65208, 65217, 65226, 65233, 65240, 65251, 65262, 65267, 0, 0, 65272, - 65279, 65286, 65293, 65300, 65307, 65314, 65320, 65326, 65332, 65338, - 65345, 65352, 65357, 65361, 65368, 65375, 65382, 0, 0, 0, 0, 0, 0, 0, 0, - 65386, 65390, 65394, 65397, 65400, 65405, 65410, 65415, 65420, 65425, - 65430, 65435, 65440, 65445, 65450, 65459, 65468, 65473, 65478, 65483, - 65488, 65493, 65498, 65503, 65508, 65513, 65518, 65523, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 65528, 65537, 65546, 65555, 65564, 65573, 65582, 65591, 65600, - 65608, 65615, 65623, 65630, 65638, 65648, 65657, 65667, 65676, 65686, - 65694, 65701, 65709, 65716, 65724, 65729, 65734, 65739, 65747, 65753, - 65759, 65766, 65775, 65783, 65791, 65799, 65806, 65813, 65820, 65827, - 65832, 65837, 65842, 65847, 65852, 65857, 65862, 65867, 65875, 65883, - 65889, 65894, 65899, 65904, 65909, 65914, 65919, 65924, 65929, 65934, - 65942, 65950, 65955, 65960, 65969, 65978, 65985, 65992, 66001, 66010, - 66021, 66032, 66038, 66044, 66052, 66060, 66069, 66078, 66085, 66092, - 66097, 66102, 66113, 66124, 66132, 66140, 66150, 66160, 66171, 66182, - 66191, 66200, 66207, 66214, 66221, 66228, 66237, 66246, 66251, 66256, - 66263, 66270, 66277, 66284, 66295, 66306, 66311, 66316, 66321, 66326, - 66331, 66336, 66341, 66346, 66350, 66355, 66360, 66365, 66370, 66375, - 66381, 66386, 66391, 66398, 66405, 66412, 66419, 66425, 66432, 66439, - 66444, 66449, 66455, 66461, 66467, 66473, 66480, 66487, 66494, 66498, - 66505, 66510, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66515, 66522, - 66529, 66536, 66544, 66551, 66557, 66563, 66570, 66576, 66582, 66588, - 66595, 66602, 66609, 66616, 66623, 66630, 66637, 66644, 66651, 66658, - 66665, 66672, 66679, 66686, 66692, 66699, 66706, 66713, 66720, 66727, - 66734, 66741, 66748, 66755, 66762, 66769, 66776, 66783, 66790, 66797, - 66804, 66811, 66818, 66826, 66834, 66842, 66850, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66858, 66861, 66865, 66869, 66873, - 66877, 66881, 66885, 66889, 66893, 66897, 66901, 66905, 66908, 66912, - 66916, 66919, 66923, 66927, 66931, 66935, 66939, 66943, 66947, 66950, - 66953, 66957, 66961, 66965, 66968, 66971, 66974, 66977, 66980, 66983, - 66987, 66991, 66995, 66999, 67003, 67009, 67014, 67018, 67022, 67026, - 67030, 67035, 67041, 67046, 67052, 67057, 67062, 67066, 67072, 67077, - 67081, 0, 0, 0, 0, 0, 0, 0, 0, 67086, 67090, 67094, 67097, 67101, 67104, - 67108, 67111, 67115, 67119, 67124, 67128, 67133, 67136, 67140, 67144, - 67147, 67151, 67155, 67158, 67162, 67166, 67170, 67174, 67178, 67182, - 67186, 67190, 67194, 67198, 67202, 67206, 67210, 67214, 67218, 67222, - 67226, 67230, 67234, 67237, 67241, 67245, 67249, 67252, 67255, 67258, - 67262, 67266, 67270, 67274, 67278, 67281, 67285, 67291, 67296, 67300, - 67305, 67309, 67314, 67319, 67325, 67330, 67336, 67340, 67345, 67350, - 67354, 67359, 67364, 0, 0, 0, 0, 0, 0, 0, 0, 0, 67368, 67371, 67375, - 67379, 67382, 67385, 67388, 67391, 67394, 67397, 67400, 67403, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 67406, 67413, 67419, 67425, 67431, - 67437, 67443, 67449, 67455, 67461, 67467, 67473, 67480, 67487, 67494, - 67501, 67508, 67515, 67522, 67529, 67536, 67543, 67549, 67556, 67562, - 67569, 67576, 67582, 67588, 67595, 67602, 67609, 67615, 67622, 67629, - 67635, 67642, 67648, 67655, 67662, 67668, 67674, 67681, 67687, 67694, - 67701, 67710, 67717, 67724, 67728, 67733, 67738, 67743, 67748, 67753, - 67757, 67762, 67766, 67771, 67776, 67781, 67786, 67790, 67795, 67799, - 67804, 67808, 67813, 67818, 67823, 67828, 67832, 67837, 67842, 67847, - 67853, 67858, 67864, 67870, 67876, 67883, 67889, 67895, 67901, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 67905, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 67910, 67913, - 67916, 67919, 67922, 67926, 67929, 67932, 67936, 67940, 67944, 67948, - 67952, 67956, 67960, 67964, 67968, 67972, 67976, 67980, 67984, 67988, - 67992, 67996, 68000, 68004, 68008, 68011, 68015, 68019, 68023, 68027, - 68031, 68034, 68038, 68041, 68044, 68048, 68052, 68056, 68060, 68063, - 68068, 68072, 68077, 68082, 68086, 68091, 68095, 68100, 68105, 68110, - 68115, 68120, 68126, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68132, 68137, 68141, - 68146, 68153, 68158, 68163, 68167, 68172, 68177, 68181, 68185, 68190, - 68196, 0, 0, 68202, 68206, 68209, 68212, 68215, 68218, 68221, 68224, - 68227, 68230, 0, 0, 68233, 68238, 68243, 68249, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 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, 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, 68992, 68996, 69000, 69004, 69008, 69012, - 69016, 69020, 69024, 69028, 69032, 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, 0, 0, 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, 0, 0, 0, 0, 0, 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, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 70124, 70129, 70134, 70139, 70144, - 70149, 70157, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 70162, 70169, 70176, - 70183, 70190, 0, 0, 0, 0, 0, 70197, 70204, 70211, 70221, 70227, 70233, - 70239, 70245, 70251, 70257, 70264, 70270, 70276, 70282, 70291, 70300, - 70312, 70324, 70330, 70336, 70342, 70349, 70356, 70363, 70370, 70377, 0, - 70384, 70391, 70398, 70406, 70413, 0, 70420, 0, 70427, 70434, 0, 70441, - 70449, 0, 70456, 70463, 70470, 70477, 70484, 70491, 70498, 70505, 70512, - 70519, 70524, 70531, 70538, 70544, 70550, 70556, 70562, 70568, 70574, - 70580, 70586, 70592, 70598, 70604, 70610, 70616, 70622, 70628, 70634, - 70640, 70646, 70652, 70658, 70664, 70670, 70676, 70682, 70688, 70694, - 70700, 70706, 70712, 70718, 70724, 70730, 70736, 70742, 70748, 70754, - 70760, 70766, 70772, 70778, 70784, 70790, 70796, 70802, 70808, 70814, - 70820, 70826, 70832, 70838, 70844, 70850, 70856, 70862, 70868, 70874, - 70880, 70886, 70892, 70898, 70904, 70910, 70916, 70922, 70928, 70934, - 70940, 70946, 70952, 70958, 70964, 70970, 70976, 70982, 70988, 70994, - 71002, 71010, 71016, 71022, 71028, 71034, 71043, 71052, 71060, 71068, - 71076, 71084, 71092, 71100, 71108, 71116, 71123, 71130, 71140, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 71150, 71156, 71162, 71168, 71174, 71179, 71184, 71190, - 71196, 71202, 71208, 71216, 71222, 71228, 71236, 71244, 71252, 71260, - 71265, 71270, 71275, 71280, 71292, 71304, 71314, 71324, 71335, 71346, - 71357, 71368, 71378, 71388, 71399, 71410, 71421, 71432, 71442, 71452, - 71462, 71477, 71492, 71507, 71514, 71521, 71528, 71535, 71545, 71555, - 71565, 71576, 71586, 71594, 71602, 71610, 71618, 71627, 71635, 71643, - 71651, 71659, 71667, 71676, 71684, 71692, 71700, 71709, 71717, 71724, - 71731, 71738, 71745, 71752, 71759, 71766, 71774, 71782, 71790, 71798, - 71806, 71814, 71822, 71830, 71838, 71846, 71854, 71862, 71870, 71878, - 71886, 71894, 71902, 71910, 71918, 71926, 71934, 71943, 71951, 71959, - 71967, 71976, 71984, 71992, 72000, 72008, 72016, 72024, 72032, 72041, - 72049, 72056, 72063, 72070, 72077, 72085, 72092, 72099, 72106, 72113, - 72120, 72128, 72135, 72143, 72151, 72159, 72167, 72176, 72184, 72192, - 72200, 72209, 72217, 72224, 72231, 72238, 72245, 72253, 72260, 72270, - 72280, 72290, 72299, 72308, 72317, 72326, 72335, 72345, 72356, 72367, - 72377, 72388, 72399, 72409, 72418, 72427, 72435, 72444, 72453, 72461, - 72470, 72479, 72487, 72496, 72505, 72513, 72522, 72531, 72539, 72548, - 72557, 72565, 72574, 72582, 72591, 72599, 72607, 72615, 72623, 72632, - 72640, 72647, 72655, 72662, 72669, 72676, 72685, 72694, 72702, 72711, - 72720, 72728, 72738, 72746, 72754, 72761, 72769, 72777, 72784, 72794, - 72804, 72814, 72824, 72835, 72843, 72851, 72859, 72867, 72876, 72884, - 72892, 72900, 72908, 72917, 72925, 72932, 72939, 72946, 72953, 72960, - 72967, 72975, 72983, 72991, 72999, 73007, 73015, 73023, 73031, 73039, - 73047, 73055, 73063, 73071, 73079, 73087, 73095, 73103, 73111, 73119, - 73127, 73135, 73143, 73151, 73159, 73167, 73175, 73183, 73191, 73198, - 73205, 73212, 73219, 73227, 73234, 73241, 73248, 73255, 73263, 73271, - 73279, 73287, 73296, 73304, 73312, 73322, 73329, 73336, 73343, 73350, - 73358, 73368, 73379, 73387, 73396, 73404, 73413, 73421, 73430, 73438, - 73447, 73455, 73464, 73472, 73480, 73487, 73495, 73504, 73511, 73519, - 73528, 73537, 73546, 73555, 73563, 73572, 73580, 73589, 73597, 73606, - 73614, 73623, 73631, 73639, 73646, 73654, 73661, 73669, 73676, 73685, - 73693, 73702, 73710, 73718, 73726, 73734, 73742, 73751, 73760, 73769, - 73778, 73787, 73795, 73804, 73812, 73821, 73829, 73838, 73846, 73855, - 73863, 73871, 73878, 73886, 73893, 73901, 73908, 73917, 73925, 73934, - 73942, 73950, 73958, 73966, 73974, 73983, 73992, 74001, 74010, 74018, - 74026, 74034, 74042, 74051, 74060, 74068, 74076, 74084, 74092, 74100, - 74108, 74116, 74124, 74132, 74140, 74148, 74153, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 74158, 74168, 74178, 74188, 74198, 74208, 74218, - 74228, 74238, 74247, 74256, 74265, 74275, 74285, 74295, 74306, 74316, - 74326, 74336, 74346, 74356, 74366, 74376, 74386, 74396, 74406, 74416, - 74426, 74436, 74446, 74456, 74467, 74477, 74487, 74497, 74507, 74517, - 74527, 74537, 74547, 74557, 74568, 74578, 74588, 74599, 74609, 74619, - 74629, 74639, 74648, 74657, 74667, 74676, 74685, 74694, 74703, 74712, - 74721, 74730, 74739, 74748, 74757, 74766, 74775, 0, 0, 74784, 74793, - 74803, 74813, 74823, 74834, 74844, 74854, 74865, 74875, 74886, 74895, - 74904, 74914, 74924, 74935, 74945, 74956, 74966, 74977, 74986, 74996, - 75006, 75017, 75027, 75037, 75047, 75056, 75065, 75074, 75083, 75092, - 75101, 75111, 75121, 75131, 75140, 75150, 75160, 75170, 75179, 75188, - 75198, 75207, 75217, 75226, 75235, 75244, 75254, 75264, 75274, 75284, - 75294, 75304, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 75314, 75329, - 75344, 75350, 75356, 75362, 75368, 75374, 75380, 75386, 75392, 75400, - 75404, 75407, 0, 0, 75415, 75418, 75421, 75424, 75427, 75430, 75433, - 75436, 75439, 75442, 75445, 75448, 75451, 75454, 75457, 75460, 75463, - 75470, 75478, 75488, 75495, 75502, 75510, 75518, 75528, 75539, 0, 0, 0, - 0, 0, 0, 75547, 75552, 75557, 75564, 75571, 75577, 75583, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 75588, 75597, 75606, 75615, 75623, 75633, 75641, 75649, - 75658, 75667, 75678, 75689, 75699, 75709, 75719, 75729, 75738, 75747, - 75756, 75765, 75775, 75785, 75789, 75794, 75802, 75810, 75814, 75818, - 75822, 75827, 75832, 75837, 75842, 75845, 75849, 0, 75854, 75857, 75860, - 75864, 75868, 75873, 75877, 75881, 75886, 75891, 75898, 75905, 75908, - 75911, 75914, 75917, 75920, 75924, 75928, 0, 75932, 75937, 75941, 75945, - 0, 0, 0, 0, 75950, 75955, 75962, 75967, 75972, 0, 75977, 75982, 75987, - 75992, 75997, 76002, 76007, 76012, 76017, 76022, 76027, 76032, 76041, - 76050, 76058, 76066, 76075, 76084, 76093, 76102, 76110, 76118, 76126, - 76134, 76139, 76144, 76150, 76156, 76162, 76168, 76176, 76184, 76190, - 76196, 76202, 76208, 76214, 76220, 76226, 76232, 76237, 76242, 76247, - 76252, 76257, 76262, 76267, 76272, 76277, 76282, 76287, 76292, 76298, - 76304, 76310, 76316, 76322, 76328, 76334, 76340, 76346, 76352, 76358, - 76364, 76370, 76376, 76382, 76388, 76394, 76400, 76406, 76412, 76418, - 76424, 76430, 76436, 76442, 76448, 76454, 76460, 76466, 76472, 76478, - 76484, 76490, 76496, 76502, 76508, 76514, 76520, 76526, 76532, 76538, - 76544, 76550, 76556, 76562, 76568, 76574, 76580, 76586, 76592, 76598, - 76604, 76609, 76614, 76619, 76624, 76629, 76634, 76639, 76644, 76650, - 76656, 76662, 76668, 76674, 76680, 76686, 76692, 76698, 76704, 76710, - 76716, 76721, 76726, 76731, 76736, 76747, 76758, 76768, 76778, 76789, - 76800, 76807, 0, 0, 76814, 0, 76822, 76826, 76830, 76833, 76837, 76841, - 76844, 76847, 76851, 76855, 76858, 76861, 76864, 76867, 76872, 76875, - 76879, 76882, 76885, 76888, 76891, 76894, 76897, 76900, 76903, 76906, - 76909, 76912, 76916, 76920, 76924, 76928, 76933, 76938, 76944, 76950, - 76956, 76961, 76967, 76972, 76977, 76982, 76988, 76994, 76999, 77004, - 77009, 77014, 77020, 77026, 77031, 77036, 77042, 77047, 77052, 77058, - 77064, 77070, 77076, 77080, 77085, 77089, 77094, 77098, 77103, 77108, - 77114, 77120, 77126, 77131, 77137, 77142, 77147, 77152, 77158, 77164, - 77169, 77174, 77179, 77184, 77190, 77196, 77201, 77206, 77212, 77217, - 77222, 77228, 77234, 77240, 77246, 77251, 77255, 77260, 77262, 77267, - 77272, 77278, 77283, 77288, 77292, 77298, 77303, 77308, 77313, 77318, - 77323, 77328, 77333, 77339, 77345, 77351, 77359, 77363, 77367, 77371, - 77375, 77379, 77383, 77388, 77393, 77398, 77403, 77408, 77413, 77418, - 77423, 77428, 77433, 77438, 77443, 77448, 77452, 77457, 77462, 77467, - 77472, 77477, 77481, 77486, 77491, 77496, 77501, 77505, 77510, 77515, - 77520, 77525, 77529, 77534, 77539, 77543, 77548, 77553, 77558, 77563, - 77568, 77572, 77579, 77586, 77590, 77595, 77600, 77605, 77610, 77615, - 77620, 77625, 77630, 77635, 77640, 77645, 77650, 77655, 77660, 77665, - 77670, 77675, 77680, 77685, 77690, 77695, 77700, 77705, 77710, 77715, - 77720, 77725, 77730, 77735, 0, 0, 0, 77740, 77744, 77749, 77753, 77758, - 77763, 0, 0, 77767, 77772, 77777, 77781, 77786, 77791, 0, 0, 77796, - 77801, 77805, 77810, 77815, 77820, 0, 0, 77825, 77830, 77835, 0, 0, 0, - 77839, 77843, 77847, 77850, 77853, 77857, 77861, 0, 77865, 77871, 77874, - 77878, 77881, 77885, 77889, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 77893, 77899, - 77905, 77911, 77917, 0, 0, 77921, 77927, 77933, 77939, 77945, 77951, - 77958, 77965, 77972, 77979, 77986, 77993, 0, 78000, 78007, 78014, 78020, - 78027, 78034, 78041, 78048, 78054, 78061, 78068, 78075, 78082, 78089, - 78096, 78103, 78110, 78117, 78123, 78130, 78137, 78144, 78151, 78158, - 78165, 78172, 0, 78179, 78185, 78192, 78199, 78206, 78213, 78220, 78227, - 78234, 78241, 78248, 78255, 78262, 78269, 78275, 78282, 78289, 78296, - 78303, 0, 78310, 78317, 0, 78324, 78331, 78338, 78345, 78352, 78359, - 78366, 78373, 78380, 78387, 78394, 78401, 78408, 78415, 78422, 0, 0, - 78428, 78433, 78438, 78443, 78448, 78453, 78458, 78463, 78468, 78473, - 78478, 78483, 78488, 78493, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 78498, 78505, - 78512, 78519, 78526, 78533, 78540, 78547, 78554, 78561, 78568, 78575, - 78582, 78589, 78596, 78603, 78610, 78617, 78624, 78631, 78639, 78647, - 78654, 78661, 78666, 78674, 78682, 78689, 78696, 78701, 78708, 78713, - 78718, 78725, 78730, 78735, 78740, 78748, 78753, 78758, 78765, 78770, - 78775, 78782, 78789, 78794, 78799, 78804, 78809, 78814, 78819, 78824, - 78829, 78834, 78841, 78846, 78853, 78858, 78863, 78868, 78873, 78878, - 78883, 78888, 78893, 78898, 78903, 78908, 78915, 78922, 78929, 78936, - 78942, 78947, 78954, 78959, 78964, 78973, 78980, 78989, 78996, 79001, - 79006, 79014, 79019, 79024, 79029, 79034, 79039, 79046, 79051, 79056, - 79061, 79066, 79071, 79078, 79085, 79092, 79099, 79106, 79113, 79120, - 79127, 79134, 79141, 79148, 79155, 79162, 79169, 79176, 79183, 79190, - 79197, 79204, 79211, 79218, 79225, 79232, 79239, 79246, 79253, 79260, - 79267, 0, 0, 0, 0, 0, 79274, 79281, 79288, 0, 0, 0, 0, 79292, 79295, - 79298, 79301, 79304, 79307, 79310, 79313, 79316, 79319, 79323, 79327, - 79331, 79335, 79339, 79343, 79347, 79351, 79355, 79360, 79365, 79370, - 79376, 79382, 79388, 79394, 79400, 79406, 79411, 79416, 79421, 79427, - 79433, 79439, 79445, 79451, 79457, 79463, 79469, 79475, 79481, 79487, - 79493, 79499, 79505, 0, 0, 0, 79511, 79518, 79525, 79532, 79539, 79546, - 79555, 79564, 79571, 79578, 79586, 79594, 79602, 79608, 79615, 79624, - 79633, 79642, 79651, 79660, 79669, 79679, 79690, 79700, 79711, 79720, - 79729, 79738, 79748, 79759, 79769, 79780, 79791, 79800, 79808, 79814, - 79820, 79826, 79832, 79840, 79848, 79854, 79861, 79871, 79878, 79885, - 79892, 79899, 79906, 79916, 79923, 79930, 79938, 79946, 79955, 79964, - 79973, 79982, 79991, 79999, 80008, 80017, 80026, 80030, 80037, 80042, - 80047, 80051, 80055, 80059, 80063, 80068, 80073, 80079, 80085, 80089, - 80095, 80099, 80103, 80107, 80111, 80115, 80119, 80125, 0, 0, 0, 0, 0, - 80129, 80134, 80139, 80144, 80149, 80156, 80161, 80166, 80171, 80176, - 80181, 80186, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 80191, 80198, 80207, 80216, 80223, 80230, 80237, - 80244, 80251, 80258, 80264, 80271, 80278, 80285, 80292, 80299, 80306, - 80313, 80320, 80329, 80336, 80343, 80350, 80357, 80364, 80371, 80378, - 80385, 80394, 80401, 80408, 80415, 80422, 80429, 80436, 80445, 80452, - 80459, 80466, 80473, 80482, 80489, 80496, 80503, 80511, 80520, 0, 0, - 80529, 80533, 80537, 80542, 80547, 80551, 80556, 80560, 80565, 80570, - 80575, 80580, 80585, 80590, 80594, 80598, 80602, 80607, 80612, 80616, - 80621, 80626, 80630, 80634, 80639, 80644, 80649, 80654, 80658, 0, 0, 0, - 80663, 80667, 80672, 80677, 80681, 80686, 80690, 80695, 80700, 80705, - 80710, 80714, 80718, 80723, 80728, 80733, 80738, 80742, 80747, 80751, - 80756, 80761, 80765, 80770, 80775, 80780, 80784, 80788, 80793, 80798, - 80803, 80808, 80813, 80817, 80822, 80827, 80832, 80837, 80842, 80847, - 80852, 80857, 80862, 80867, 80872, 80877, 80882, 80887, 80892, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 80897, 80901, - 80906, 80911, 80916, 80920, 80925, 80930, 80935, 80940, 80944, 80948, - 80953, 80958, 80963, 80968, 80972, 80977, 80982, 80987, 80992, 80997, - 81002, 81006, 81011, 81016, 81021, 81026, 81031, 81036, 81041, 0, 81046, - 81050, 81054, 81059, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 81064, 81069, - 81074, 81079, 81084, 81089, 81094, 81099, 81104, 81109, 81114, 81119, - 81124, 81129, 81134, 81139, 81144, 81149, 81154, 81159, 81164, 81169, - 81174, 81179, 81184, 81189, 81194, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 81201, 81206, 81211, - 81216, 81221, 81226, 81231, 81236, 81241, 81246, 81251, 81256, 81261, - 81266, 81271, 81276, 81281, 81286, 81291, 81296, 81301, 81306, 81311, - 81316, 81321, 81326, 81331, 81335, 81339, 81343, 0, 81348, 81354, 81359, - 81364, 81369, 81374, 81380, 81386, 81392, 81398, 81404, 81410, 81416, - 81422, 81428, 81434, 81440, 81446, 81452, 81457, 81463, 81469, 81475, - 81481, 81486, 81492, 81498, 81503, 81509, 81515, 81520, 81526, 81532, - 81538, 81544, 81550, 81556, 0, 0, 0, 0, 81561, 81567, 81573, 81579, - 81585, 81591, 81597, 81603, 81609, 81616, 81621, 81626, 81632, 81638, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 81644, 81649, 81654, - 81659, 81665, 81670, 81676, 81682, 81688, 81694, 81701, 81707, 81714, - 81719, 81724, 81729, 81734, 81738, 81743, 81748, 81753, 81758, 81763, - 81768, 81773, 81778, 81783, 81788, 81793, 81798, 81803, 81808, 81813, - 81818, 81823, 81828, 81833, 81838, 81843, 81848, 81853, 81858, 81863, - 81868, 81874, 81879, 81885, 81891, 81897, 81903, 81910, 81916, 81923, - 81928, 81933, 81938, 81943, 81947, 81952, 81957, 81962, 81967, 81972, - 81977, 81982, 81987, 81992, 81997, 82002, 82007, 82012, 82017, 82022, - 82027, 82032, 82037, 82042, 82047, 82052, 82057, 82062, 82067, 82072, - 82077, 82082, 82087, 82092, 82097, 82102, 82107, 82112, 82117, 82122, - 82127, 82132, 82137, 82142, 82147, 82152, 82157, 82162, 82167, 82172, - 82177, 82182, 82187, 82192, 82197, 82202, 82207, 82212, 82217, 82222, - 82227, 82232, 82237, 82242, 82247, 82252, 82257, 82262, 82267, 82272, - 82277, 82282, 82287, 82292, 82297, 82302, 82307, 82312, 82317, 82322, - 82327, 82332, 82337, 82341, 82346, 82351, 82356, 82361, 82366, 82371, - 82376, 82381, 82386, 82391, 82396, 82401, 82405, 82409, 82413, 82417, - 82421, 82425, 82429, 82434, 82439, 0, 0, 82444, 82449, 82453, 82457, - 82461, 82465, 82469, 82473, 82477, 82481, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 82485, 82488, 82491, 82494, 82497, 82500, 0, 0, 82504, 0, - 82508, 82511, 82515, 82519, 82523, 82527, 82531, 82535, 82539, 82543, - 82547, 82550, 82554, 82558, 82562, 82566, 82570, 82574, 82578, 82582, - 82586, 82589, 82593, 82597, 82601, 82605, 82608, 82612, 82616, 82620, - 82624, 82628, 82632, 82636, 82640, 82644, 82648, 82652, 82656, 82659, - 82663, 82667, 82671, 82675, 0, 82679, 82683, 0, 0, 0, 82687, 0, 0, 82691, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82695, 82700, 82705, - 82710, 82715, 82720, 82725, 82730, 82735, 82740, 82745, 82750, 82755, - 82760, 82765, 82770, 82775, 82780, 82785, 82790, 82795, 82800, 82805, - 82809, 82814, 82819, 0, 0, 0, 0, 0, 82825, 82831, 82835, 82840, 82844, - 82849, 82853, 82857, 82861, 82866, 82871, 82875, 82879, 82883, 82887, - 82891, 82896, 82901, 82905, 82910, 82915, 82919, 82924, 82929, 82934, - 82939, 82944, 0, 0, 0, 0, 0, 82949, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 82954, 82957, 82961, 82965, 0, 82970, 82974, 0, 0, 0, 0, 0, - 82978, 82983, 82989, 82993, 82997, 83000, 83004, 83008, 0, 83012, 83016, - 83020, 0, 83024, 83028, 83032, 83036, 83040, 83044, 83048, 83052, 83056, - 83060, 83064, 83068, 83071, 83075, 83079, 83083, 83086, 83089, 83092, - 83096, 83100, 83104, 83108, 83112, 83116, 83119, 83123, 0, 0, 0, 0, - 83127, 83132, 83136, 0, 0, 0, 0, 83140, 83143, 83146, 83149, 83152, - 83155, 83159, 83163, 83168, 0, 0, 0, 0, 0, 0, 0, 0, 83173, 83178, 83184, - 83189, 83195, 83200, 83205, 83210, 83216, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 83221, 83224, 83229, 83235, 83243, 83248, 83254, 83262, - 83268, 83274, 83278, 83282, 83289, 83298, 83305, 83314, 83320, 83329, - 83336, 83343, 83350, 83360, 83366, 83370, 83377, 83386, 83396, 83403, - 83410, 83414, 83418, 83425, 83435, 83439, 83446, 83453, 83460, 83466, - 83473, 83480, 83487, 83494, 83498, 83502, 83506, 83513, 83517, 83524, - 83531, 83545, 83554, 83558, 83562, 83566, 83573, 83577, 83581, 83585, - 83593, 83601, 83620, 83630, 83650, 83654, 83658, 83662, 83666, 83670, - 83674, 83678, 83685, 83689, 83692, 83696, 83700, 83706, 83713, 83722, - 83726, 83735, 83744, 83752, 83756, 83763, 83767, 83771, 83775, 83779, - 83790, 83799, 83808, 83817, 83826, 83838, 83847, 83856, 83865, 83873, - 83882, 83894, 83903, 83912, 83921, 83933, 83942, 83951, 83963, 83972, - 83981, 83993, 84002, 84006, 84010, 84014, 84018, 84022, 84026, 84030, - 84037, 84041, 84045, 84056, 84060, 84064, 84071, 84077, 84083, 84087, - 84094, 84098, 84102, 84106, 84110, 84114, 84118, 84124, 84132, 84136, - 84140, 84143, 84149, 84159, 84163, 84175, 84182, 84189, 84196, 84203, - 84209, 84213, 84217, 84221, 84225, 84232, 84241, 84248, 84256, 84264, - 84270, 84274, 84278, 84282, 84286, 84292, 84301, 84313, 84320, 84327, - 84336, 84347, 84353, 84362, 84371, 84378, 84387, 84394, 84401, 84411, - 84418, 84425, 84432, 84439, 84443, 84449, 84453, 84464, 84472, 84481, - 84493, 84500, 84507, 84517, 84524, 84533, 84540, 84549, 84556, 84563, - 84573, 84580, 84587, 84597, 84604, 84616, 84625, 84632, 84639, 84646, - 84655, 84665, 84678, 84685, 84695, 84705, 84712, 84721, 84734, 84741, - 84748, 84755, 84765, 84775, 84782, 84792, 84799, 84806, 84816, 84822, - 84829, 84836, 84843, 84853, 84860, 84867, 84874, 84880, 84887, 84897, - 84904, 84908, 84916, 84920, 84932, 84936, 84950, 84954, 84958, 84962, - 84966, 84972, 84979, 84987, 84991, 84995, 84999, 85003, 85010, 85014, - 85020, 85026, 85034, 85038, 85045, 85053, 85057, 85061, 85067, 85071, - 85080, 85089, 85096, 85106, 85112, 85116, 85120, 85128, 85135, 85142, - 85148, 85152, 85160, 85164, 85171, 85183, 85190, 85200, 85206, 85210, - 85219, 85226, 85235, 85239, 85243, 85250, 85254, 85258, 85262, 85266, - 85269, 85275, 85281, 85285, 85289, 85296, 85303, 85310, 85317, 85324, - 85331, 85338, 85345, 85351, 85355, 85359, 85366, 85373, 85380, 85387, - 85394, 85398, 85401, 85406, 85410, 85414, 85423, 85432, 85436, 85440, - 85446, 85452, 85469, 85475, 85479, 85488, 85492, 85496, 85503, 85511, - 85519, 85525, 85529, 85533, 85537, 85541, 85544, 85549, 85555, 85564, - 85570, 85576, 85582, 85587, 85593, 85599, 85605, 85611, 85617, 85625, - 85631, 85642, 85648, 85654, 85663, 85673, 85679, 85685, 85691, 85697, - 85703, 85709, 85715, 85721, 85727, 85733, 85742, 85751, 85760, 85766, - 85775, 85781, 85787, 85793, 85799, 85805, 85811, 85817, 85823, 85829, - 85835, 85841, 85847, 85853, 85858, 85864, 85870, 85878, 85884, 85890, - 85894, 85902, 85906, 85910, 85914, 85918, 85922, 85929, 85933, 85942, - 85946, 85953, 85961, 85965, 85969, 85973, 85984, 85998, 86002, 86006, - 86013, 86019, 86026, 86030, 86034, 86038, 86042, 86046, 86053, 86057, - 86075, 86079, 86083, 86090, 86094, 86098, 86104, 86108, 86112, 86120, - 86124, 86128, 86132, 86136, 86141, 86151, 86159, 86167, 86173, 86179, - 86189, 86195, 86201, 86207, 86213, 86219, 86225, 86231, 86240, 86245, - 86251, 86260, 86268, 86274, 86282, 86291, 86297, 86303, 86309, 86315, - 86326, 86332, 86338, 86344, 86350, 86356, 86365, 86371, 86377, 86386, - 86398, 86409, 86415, 86424, 86430, 86436, 86442, 86456, 86461, 86468, - 86477, 86486, 86492, 86498, 86503, 86507, 86514, 86524, 86530, 86543, - 86547, 86551, 86558, 86562, 86568, 86577, 86581, 86585, 86589, 86593, - 86597, 86604, 86608, 86615, 86622, 86629, 86638, 86647, 86657, 86664, - 86671, 86678, 86688, 86695, 86705, 86712, 86722, 86729, 86736, 86746, - 86756, 86763, 86769, 86777, 86785, 86791, 86797, 86801, 86805, 86812, - 86820, 86826, 86830, 86834, 86838, 86845, 86857, 86860, 86867, 86873, - 86877, 86881, 86885, 86889, 86893, 86897, 86901, 86905, 86909, 86913, - 86920, 86924, 86930, 86934, 86938, 86942, 86948, 86955, 86962, 86969, - 86981, 86989, 86993, 86999, 87008, 87015, 87021, 87025, 87029, 87033, - 87039, 87048, 87056, 87060, 87066, 87070, 87074, 87078, 87084, 87091, - 87097, 87101, 87107, 87111, 87115, 87124, 87136, 87140, 87147, 87154, - 87164, 87171, 87183, 87190, 87197, 87204, 87215, 87225, 87238, 87248, - 87255, 87259, 87263, 87267, 87271, 87280, 87289, 87298, 87315, 87324, - 87330, 87337, 87345, 87358, 87362, 87371, 87380, 87389, 87398, 87409, - 87418, 87427, 87436, 87445, 87454, 87463, 87473, 87476, 87480, 87484, - 87488, 87492, 87496, 87502, 87509, 87516, 87523, 87529, 87535, 87542, - 87548, 87555, 87563, 87567, 87574, 87581, 87588, 87596, 87599, 87603, - 87607, 87611, 87615, 87621, 87625, 87631, 87638, 87645, 87651, 87658, - 87665, 87672, 87679, 87686, 87693, 87700, 87707, 87714, 87721, 87728, - 87735, 87742, 87749, 87755, 87759, 87767, 87771, 87775, 87779, 87783, - 87789, 87796, 87803, 87810, 87817, 87824, 87830, 87838, 87842, 87846, - 87850, 87854, 87860, 87877, 87894, 87898, 87902, 87906, 87910, 87914, - 87918, 87924, 87931, 87935, 87941, 87948, 87955, 87962, 87969, 87976, - 87985, 87992, 87999, 88006, 88013, 88017, 88021, 88027, 88039, 88043, - 88047, 88056, 88060, 88064, 88068, 88074, 88078, 88082, 88091, 88095, - 88099, 88103, 88110, 88114, 88118, 88122, 88126, 88130, 88134, 88138, - 88142, 88148, 88155, 88162, 88168, 88172, 88189, 88195, 88199, 88205, - 88211, 88217, 88223, 88229, 88235, 88239, 88243, 88247, 88253, 88257, - 88263, 88267, 88271, 88278, 88285, 88302, 88306, 88310, 88314, 88318, - 88322, 88334, 88337, 88342, 88347, 88362, 88372, 88383, 88387, 88391, - 88395, 88401, 88408, 88415, 88425, 88437, 88443, 88449, 88458, 88462, - 88466, 88473, 88483, 88490, 88496, 88500, 88504, 88511, 88517, 88521, - 88527, 88531, 88539, 88545, 88549, 88557, 88566, 88573, 88579, 88586, - 88593, 88603, 88613, 88617, 88621, 88625, 88629, 88635, 88642, 88648, - 88655, 88662, 88669, 88678, 88685, 88692, 88698, 88705, 88712, 88719, - 88726, 88733, 88740, 88746, 88753, 88760, 88767, 88776, 88783, 88790, - 88794, 88800, 88804, 88810, 88817, 88824, 88831, 88835, 88839, 88843, - 88847, 88851, 88858, 88862, 88866, 88872, 88881, 88885, 88889, 88893, - 88897, 88904, 88908, 88912, 88920, 88924, 88928, 88932, 88936, 88942, - 88946, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 88950, 88956, - 88962, 88969, 88976, 88983, 88990, 88997, 89004, 89010, 89017, 89024, - 89031, 89038, 89045, 89052, 89058, 89064, 89070, 89076, 89082, 89088, - 89094, 89100, 89106, 89113, 89120, 89127, 89134, 89141, 89148, 89154, - 89160, 89166, 89173, 89180, 89186, 89192, 89201, 89208, 89215, 89222, - 89229, 89236, 89243, 89249, 89255, 89261, 89270, 89277, 89284, 89295, - 89306, 89312, 89318, 89324, 89333, 89340, 89347, 89356, 89365, 89375, - 89385, 89396, 89408, 89418, 89428, 89439, 89451, 89461, 89471, 89481, - 89491, 89501, 89512, 89520, 89528, 89537, 89546, 89555, 89561, 89567, - 89573, 89580, 89590, 89597, 89607, 89612, 89617, 89623, 89629, 89637, - 89645, 89654, 89664, 89674, 89682, 89690, 89699, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 89708, 89719, 89726, 89734, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 89742, 89747, 89752, 89757, 89764, 89771, 89778, 89785, 89790, - 89795, 89800, 89805, 89812, 89817, 89824, 89831, 89836, 89841, 89846, - 89853, 89858, 89863, 89870, 89877, 89882, 89887, 89892, 89899, 89906, - 89913, 89918, 89923, 89930, 89937, 89944, 89951, 89956, 89961, 89966, - 89973, 89978, 89983, 89988, 89995, 90004, 90011, 90016, 90021, 90026, - 90031, 90036, 90041, 90050, 90057, 90062, 90069, 90076, 90081, 90086, - 90091, 90098, 90103, 90110, 90117, 90122, 90127, 90132, 90139, 90146, - 90151, 90156, 90163, 90170, 90177, 90182, 90187, 90192, 90197, 90204, - 90213, 90222, 90227, 90234, 90243, 90248, 90253, 90258, 90263, 90270, - 90277, 90284, 90291, 90296, 90301, 90306, 90313, 90320, 90327, 90332, - 90337, 90344, 90349, 90356, 90361, 90368, 90373, 90380, 90387, 90392, - 90397, 90402, 90407, 90412, 90417, 90422, 90427, 90432, 90439, 90446, - 90453, 90460, 90467, 90476, 90481, 90486, 90493, 90500, 90505, 90512, - 90519, 90526, 90533, 90540, 90547, 90552, 90557, 90562, 90567, 90572, - 90581, 90590, 90599, 90608, 90617, 90626, 90635, 90644, 90649, 90660, - 90671, 90680, 90685, 90690, 90695, 90700, 90709, 90716, 90723, 90730, - 90737, 90744, 90751, 90760, 90769, 90780, 90789, 90800, 90809, 90816, - 90825, 90836, 90845, 90854, 90863, 90872, 90879, 90886, 90893, 90902, - 90911, 90922, 90931, 90940, 90951, 90956, 90961, 90972, 90980, 90989, - 90998, 91007, 91018, 91027, 91036, 91047, 91058, 91069, 91080, 91091, - 91102, 91109, 91116, 91123, 91130, 91141, 91150, 91157, 91164, 91171, - 91182, 91193, 91204, 91215, 91226, 91237, 91248, 91259, 91266, 91273, - 91282, 91291, 91298, 91305, 91312, 91321, 91330, 91339, 91346, 91355, - 91364, 91373, 91380, 91387, 91392, 91398, 91405, 91412, 91419, 91426, - 91433, 91440, 91449, 91458, 91467, 91476, 91483, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 91492, 91498, 91503, 91508, 91515, 91521, 91527, 91533, 91539, - 91545, 91551, 91557, 91561, 91565, 91571, 91577, 91583, 91587, 91592, - 91597, 91601, 91605, 91608, 91614, 91620, 91626, 91632, 91638, 91644, - 91650, 91656, 91662, 91672, 91682, 91688, 91694, 91704, 91714, 91720, 0, - 0, 91726, 91734, 91739, 91744, 91750, 91756, 91762, 91768, 91774, 91780, - 91787, 91794, 91800, 91806, 91812, 91818, 91824, 91830, 91836, 91842, - 91847, 91853, 91859, 91865, 91871, 91877, 91886, 91892, 91897, 91905, - 91912, 91919, 91928, 91937, 91946, 91955, 91964, 91973, 91982, 91991, - 92001, 92011, 92019, 92027, 92036, 92045, 92051, 92057, 92063, 92069, - 92077, 92085, 92089, 92095, 92100, 92106, 92112, 92118, 92124, 92130, - 92139, 92144, 92151, 92156, 92161, 92166, 92172, 92178, 92184, 92191, - 92196, 92201, 92206, 92211, 92216, 92222, 92228, 92234, 92240, 92246, - 92252, 92258, 92264, 92269, 92274, 92279, 92284, 92289, 92294, 92299, - 92304, 92310, 92316, 92321, 92326, 92331, 92336, 92341, 92347, 92354, - 92358, 92362, 92366, 92370, 92374, 92378, 92382, 92386, 92394, 92404, - 92408, 92412, 92418, 92424, 92430, 92436, 92442, 92448, 92454, 92460, - 92466, 92472, 92478, 92484, 92490, 92496, 92500, 92504, 92511, 92517, - 92523, 92529, 92534, 92541, 92546, 92552, 92558, 92564, 92570, 92575, - 92579, 92585, 92589, 92593, 92597, 92603, 92609, 92613, 92619, 92625, - 92631, 92637, 92643, 92651, 92659, 92665, 92671, 92677, 92683, 92695, - 92707, 92721, 92733, 92745, 92759, 92773, 92787, 92791, 92799, 92807, - 92812, 92816, 92820, 92824, 92828, 92832, 92836, 92840, 92846, 92852, - 92858, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 92864, 92870, 92876, 92882, 92888, - 92894, 92900, 92906, 92912, 92918, 92924, 92930, 92936, 92942, 92948, - 92954, 92960, 92966, 92972, 92978, 92984, 92990, 92996, 93002, 93008, - 93014, 93020, 93026, 93032, 93038, 93044, 93050, 93056, 93062, 93068, - 93074, 93080, 93086, 93092, 93098, 93104, 93110, 93116, 93122, 93128, - 93134, 93140, 93146, 93152, 93158, 93164, 93170, 93176, 93182, 93188, - 93194, 93200, 93206, 93212, 93218, 93224, 93230, 93236, 93242, 93248, - 93254, 93260, 93265, 93270, 93275, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 93279, - 93284, 93291, 93298, 93305, 93312, 93317, 93321, 93327, 93331, 93335, - 93341, 93345, 93349, 93353, 93359, 93366, 93370, 93374, 93378, 93382, - 93386, 93390, 93396, 93400, 93404, 93408, 93412, 93416, 93420, 93424, - 93428, 93432, 93436, 93440, 93444, 93449, 93453, 93457, 93461, 93465, - 93469, 93473, 93477, 93481, 93485, 93492, 93496, 93503, 93507, 93511, - 93515, 93519, 93523, 93527, 93531, 93538, 93542, 93546, 93550, 93554, - 93558, 93564, 93568, 93574, 93578, 93582, 93586, 93590, 93594, 93598, - 93602, 93606, 93610, 93614, 93618, 93622, 93626, 93630, 93634, 93638, - 93642, 93646, 93650, 93658, 93662, 93666, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 93670, 93678, 93686, 93694, 93702, 93710, 93718, 93726, 93734, 93742, - 93750, 93758, 93766, 93774, 93782, 93790, 93798, 93806, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 93814, 93818, 93823, 93828, 93833, 93837, 93842, - 93846, 93850, 93854, 93859, 93864, 93868, 93872, 93876, 93880, 93885, - 93890, 93894, 93898, 93903, 93907, 93911, 93916, 93921, 93926, 93931, - 93935, 93940, 93945, 93950, 93954, 93959, 93963, 93967, 93971, 93976, - 93981, 93985, 93989, 93993, 93997, 94002, 94007, 94011, 94015, 94020, - 94024, 94028, 94033, 94038, 94043, 94048, 94052, 94057, 94062, 94067, - 94071, 94076, 94080, 94084, 94088, 94093, 94098, 94102, 94106, 94110, - 94114, 94119, 94124, 94128, 94132, 94137, 94141, 94145, 94150, 94155, - 94160, 94165, 94169, 94174, 94179, 94184, 94188, 94193, 0, 94197, 94201, - 94206, 94211, 94215, 94219, 94223, 94227, 94232, 94237, 94241, 94245, - 94250, 94254, 94258, 94263, 94268, 94273, 94278, 94283, 94289, 94295, - 94301, 94306, 94312, 94317, 94322, 94327, 94333, 94339, 94344, 94349, - 94354, 94359, 94365, 94371, 94376, 94381, 94387, 94392, 94397, 94403, - 94409, 94415, 94421, 94426, 94432, 94438, 94444, 94449, 94455, 94460, - 94465, 94470, 94476, 94482, 94487, 94492, 94497, 94502, 94508, 94514, - 94519, 94524, 94530, 94535, 94540, 94546, 94552, 94558, 94564, 0, 94568, - 94573, 0, 0, 94578, 0, 0, 94582, 94587, 0, 0, 94592, 94596, 94600, 94605, - 0, 94610, 94614, 94619, 94623, 94627, 94632, 94637, 94642, 94647, 94651, - 94656, 94661, 0, 94666, 0, 94671, 94675, 94679, 94684, 94689, 94693, - 94697, 0, 94701, 94706, 94711, 94715, 94719, 94724, 94728, 94732, 94737, - 94742, 94747, 94752, 94757, 94763, 94769, 94775, 94780, 94786, 94791, - 94796, 94801, 94807, 94813, 94818, 94823, 94828, 94833, 94839, 94845, - 94850, 94855, 94861, 94866, 94871, 94877, 94883, 94889, 94895, 94900, - 94906, 94912, 94918, 94923, 94929, 94934, 94939, 94944, 94950, 94956, - 94961, 94966, 94971, 94976, 94982, 94988, 94993, 94998, 95004, 95009, - 95014, 95020, 95026, 95032, 95038, 95042, 0, 95047, 95052, 95056, 95061, - 0, 0, 95065, 95070, 95075, 95079, 95083, 95087, 95091, 95096, 0, 95101, - 95105, 95110, 95114, 95118, 95123, 95128, 0, 95133, 95137, 95142, 95147, - 95152, 95156, 95161, 95165, 95169, 95173, 95178, 95183, 95187, 95191, - 95195, 95199, 95204, 95209, 95213, 95217, 95222, 95226, 95230, 95235, - 95240, 95245, 95250, 95254, 0, 95259, 95264, 95268, 95273, 0, 95277, - 95281, 95286, 95291, 95295, 0, 95299, 0, 0, 0, 95303, 95307, 95312, - 95316, 95320, 95325, 95330, 0, 95335, 95339, 95344, 95349, 95354, 95358, - 95363, 95367, 95371, 95375, 95380, 95385, 95389, 95393, 95397, 95401, - 95406, 95411, 95415, 95419, 95424, 95428, 95432, 95437, 95442, 95447, - 95452, 95457, 95463, 95469, 95475, 95480, 95486, 95491, 95496, 95501, - 95507, 95513, 95518, 95523, 95528, 95533, 95539, 95545, 95550, 95555, - 95561, 95566, 95571, 95577, 95583, 95589, 95595, 95600, 95606, 95612, - 95618, 95623, 95629, 95634, 95639, 95644, 95650, 95656, 95661, 95666, - 95671, 95676, 95682, 95688, 95693, 95698, 95704, 95709, 95714, 95720, - 95726, 95732, 95738, 95742, 95747, 95752, 95757, 95761, 95766, 95770, - 95774, 95778, 95783, 95788, 95792, 95796, 95800, 95804, 95809, 95814, - 95818, 95822, 95827, 95831, 95835, 95840, 95845, 95850, 95855, 95859, - 95864, 95869, 95874, 95878, 95883, 95887, 95891, 95895, 95900, 95905, - 95909, 95913, 95917, 95921, 95926, 95931, 95935, 95939, 95944, 95948, - 95952, 95957, 95962, 95967, 95972, 95977, 95983, 95989, 95995, 96000, - 96006, 96011, 96016, 96021, 96027, 96033, 96038, 96043, 96048, 96053, - 96059, 96065, 96070, 96075, 96081, 96086, 96091, 96097, 96103, 96109, - 96115, 96120, 96126, 96132, 96138, 96143, 96149, 96154, 96159, 96164, - 96170, 96176, 96181, 96186, 96191, 96196, 96202, 96208, 96213, 96218, - 96224, 96229, 96234, 96240, 96246, 96252, 96258, 96263, 96269, 96275, - 96281, 96286, 96292, 96297, 96302, 96307, 96313, 96319, 96324, 96329, - 96334, 96339, 96345, 96351, 96356, 96361, 96367, 96372, 96377, 96383, - 96389, 96395, 96401, 96406, 96412, 96418, 96424, 96429, 96435, 96440, - 96445, 96450, 96456, 96462, 96467, 96472, 96477, 96482, 96488, 96494, - 96499, 96504, 96510, 96515, 96520, 96526, 96532, 96538, 96544, 96550, - 96557, 96564, 96571, 96577, 96584, 96590, 96596, 96602, 96609, 96616, - 96622, 96628, 96634, 96640, 96647, 96654, 96660, 96666, 96673, 96679, - 96685, 96692, 96699, 96706, 96713, 96719, 96726, 96733, 96740, 96746, - 96753, 96759, 96765, 96771, 96778, 96785, 96791, 96797, 96803, 96809, - 96816, 96823, 96829, 96835, 96842, 96848, 96854, 96861, 96868, 96875, - 96882, 96886, 96891, 96896, 96901, 96905, 96910, 96914, 96918, 96922, - 96927, 96932, 96936, 96940, 96944, 96948, 96953, 96958, 96962, 96966, - 96971, 96975, 96979, 96984, 96989, 96994, 96999, 97003, 97008, 97013, - 97018, 97022, 97027, 97031, 97035, 97039, 97044, 97049, 97053, 97057, - 97061, 97065, 97070, 97075, 97079, 97083, 97088, 97092, 97096, 97101, - 97106, 97111, 97116, 97122, 0, 0, 97129, 97134, 97139, 97144, 97149, - 97154, 97159, 97164, 97169, 97174, 97179, 97184, 97189, 97194, 97199, - 97204, 97209, 97214, 97220, 97225, 97230, 97235, 97240, 97245, 97250, - 97255, 97259, 97264, 97269, 97274, 97279, 97284, 97289, 97294, 97299, - 97304, 97309, 97314, 97319, 97324, 97329, 97334, 97339, 97344, 97350, - 97355, 97360, 97365, 97370, 97375, 97380, 97385, 97391, 97396, 97401, - 97406, 97411, 97416, 97421, 97426, 97431, 97436, 97441, 97446, 97451, - 97456, 97461, 97466, 97471, 97476, 97481, 97486, 97491, 97496, 97501, - 97506, 97512, 97517, 97522, 97527, 97532, 97537, 97542, 97547, 97551, - 97556, 97561, 97566, 97571, 97576, 97581, 97586, 97591, 97596, 97601, - 97606, 97611, 97616, 97621, 97626, 97631, 97636, 97642, 97647, 97652, - 97657, 97662, 97667, 97672, 97677, 97683, 97688, 97693, 97698, 97703, - 97708, 97713, 97719, 97725, 97731, 97737, 97743, 97749, 97755, 97761, - 97767, 97773, 97779, 97785, 97791, 97797, 97803, 97809, 97815, 97822, - 97828, 97834, 97840, 97846, 97852, 97858, 97864, 97869, 97875, 97881, - 97887, 97893, 97899, 97905, 97911, 97917, 97923, 97929, 97935, 97941, - 97947, 97953, 97959, 97965, 97971, 97978, 97984, 97990, 97996, 98002, - 98008, 98014, 98020, 98027, 98033, 98039, 98045, 98051, 98057, 98063, - 98069, 98075, 98081, 98087, 98093, 98099, 98105, 98111, 98117, 98123, - 98129, 98135, 98141, 98147, 98153, 98159, 98165, 98172, 98178, 98184, - 98190, 98196, 98202, 98208, 98214, 98219, 98225, 98231, 98237, 98243, - 98249, 98255, 98261, 98267, 98273, 98279, 98285, 98291, 98297, 98303, - 98309, 98315, 98321, 98328, 98334, 98340, 98346, 98352, 98358, 98364, - 98370, 98377, 98383, 98389, 98395, 98401, 98407, 98413, 98420, 98427, - 98434, 98441, 98448, 98455, 98462, 98469, 98476, 98483, 98490, 98497, - 98504, 98511, 98518, 98525, 98532, 98540, 98547, 98554, 98561, 98568, - 98575, 98582, 98589, 98595, 98602, 98609, 98616, 98623, 98630, 98637, - 98644, 98651, 98658, 98665, 98672, 98679, 98686, 98693, 98700, 98707, - 98714, 98722, 98729, 98736, 98743, 98750, 98757, 98764, 98771, 98779, - 98786, 98793, 98800, 98807, 98814, 98821, 98826, 0, 0, 98831, 98836, - 98840, 98844, 98848, 98852, 98856, 98860, 98864, 98868, 98872, 98877, - 98881, 98885, 98889, 98893, 98897, 98901, 98905, 98909, 98913, 98918, - 98922, 98926, 98930, 98934, 98938, 98942, 98946, 98950, 98954, 98960, - 98965, 98970, 98975, 98980, 98985, 98990, 98995, 99000, 99005, 99010, - 99014, 99018, 99022, 99026, 99030, 99034, 99038, 99042, 99046, 99053, - 99060, 99067, 99074, 99081, 99088, 99094, 99101, 99108, 99115, 99123, - 99131, 99139, 99147, 99155, 99163, 99170, 99177, 99184, 99192, 99200, - 99208, 99216, 99224, 99232, 99239, 99246, 99253, 99261, 99269, 99277, - 99285, 99293, 99301, 99306, 99311, 99316, 99321, 99326, 99331, 99336, - 99341, 99346, 0, 0, 0, 0, 99351, 99356, 99360, 99364, 99368, 99372, - 99376, 99380, 99384, 99388, 99392, 99396, 99400, 99404, 99408, 99412, - 99416, 99420, 99424, 99428, 99432, 99436, 99440, 99444, 99448, 99452, - 99456, 99460, 99464, 99468, 99472, 99476, 99480, 99484, 99488, 99492, - 99496, 99500, 99504, 99508, 99512, 99516, 99520, 99524, 99528, 99532, - 99536, 99540, 99544, 99548, 99552, 99557, 99561, 99565, 99569, 99573, - 99577, 99581, 99585, 99589, 99593, 99597, 99601, 99605, 99609, 99613, - 99617, 99621, 99625, 99629, 99633, 99637, 99641, 99645, 99649, 99653, - 99657, 99661, 99665, 99669, 99673, 99677, 99681, 99685, 99689, 99693, - 99697, 99701, 99705, 99709, 99713, 99717, 99721, 99725, 99729, 99733, - 99737, 99741, 99745, 99749, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 99753, - 99757, 99761, 99765, 99769, 99773, 99777, 99781, 99785, 99789, 99793, - 99797, 99801, 99805, 99809, 99813, 99817, 99821, 99825, 99829, 99833, - 99837, 99841, 99845, 99849, 99853, 99857, 99861, 99865, 99869, 99873, - 99877, 99881, 99885, 99889, 99893, 99897, 99901, 99905, 99909, 99913, - 99917, 99921, 99925, 99929, 99933, 99937, 99941, 99945, 99949, 99953, - 99957, 99961, 99965, 99969, 99973, 99977, 99981, 99985, 99989, 99993, - 99997, 100001, 100005, 100009, 100013, 100017, 100021, 100025, 100029, - 100033, 100037, 100041, 100045, 100049, 100053, 100057, 100061, 100065, - 100069, 100073, 100077, 100081, 100085, 100089, 100093, 100097, 100101, - 100105, 100109, 100113, 100117, 100121, 100125, 100129, 100133, 100137, - 100141, 100145, 100149, 100153, 100157, 100161, 100165, 100169, 100173, - 100177, 100181, 100185, 100189, 100193, 100197, 100201, 100205, 100209, - 100213, 100217, 100221, 100225, 100229, 100233, 100237, 100241, 100245, - 100249, 100253, 100257, 100261, 100265, 100269, 100273, 100277, 100281, - 100285, 100289, 100293, 100297, 100301, 100305, 100309, 100313, 100317, - 100321, 100325, 100329, 100333, 100337, 100341, 100345, 100349, 100353, - 100357, 100361, 100365, 100369, 100373, 100377, 100381, 100385, 100389, - 100393, 100397, 100401, 100405, 100409, 100413, 100417, 100421, 100425, - 100429, 100433, 100437, 100441, 100445, 100449, 100453, 100457, 100461, - 100465, 100469, 100473, 100477, 100481, 100485, 100489, 100493, 100497, - 100501, 100505, 100509, 100513, 100517, 100521, 100525, 100529, 100533, - 100537, 100541, 100545, 100549, 100553, 100557, 100561, 100565, 100569, - 100573, 100577, 100581, 100585, 100589, 100593, 100597, 100601, 100605, - 100609, 100613, 100617, 100621, 100625, 100629, 100633, 100637, 100641, - 100645, 100649, 100653, 100657, 100661, 100665, 100669, 100673, 100677, - 100681, 100685, 100689, 100693, 100697, 100701, 100705, 100709, 100713, - 100717, 100721, 100725, 100729, 100733, 100737, 100741, 100745, 100749, - 100753, 100757, 100761, 100765, 100769, 100773, 100777, 100781, 100785, - 100789, 100793, 100797, 100801, 100805, 100809, 100813, 100817, 100821, - 100825, 100829, 100833, 100837, 100841, 100845, 100849, 100853, 100857, - 100861, 100865, 100869, 100873, 100877, 100881, 100885, 100889, 100893, - 100897, 100901, 100905, 100909, 100913, 100917, 100921, 100925, 100929, - 100933, 100937, 100941, 100945, 100949, 100953, 100957, 100961, 100965, - 100969, 100973, 100977, 100981, 100985, 100989, 100993, 100997, 101001, - 101005, 101009, 101013, 101017, 101021, 101025, 101029, 101033, 101037, - 101041, 101045, 101049, 101053, 101057, 101061, 101065, 101069, 101073, - 101077, 101081, 101085, 101089, 101093, 101097, 101101, 101105, 101109, - 101113, 101117, 101121, 101125, 101129, 101133, 101137, 101141, 101145, - 101149, 101153, 101157, 101161, 101165, 101169, 101173, 101177, 101181, - 101185, 101189, 101193, 101197, 101201, 101205, 101209, 101213, 101217, - 101221, 101225, 101229, 101233, 101237, 101241, 101245, 101249, 101253, - 101257, 101261, 101265, 101269, 101273, 101277, 101281, 101285, 101289, - 101293, 101297, 101301, 101305, 101309, 101313, 101317, 101321, 101325, - 101329, 101333, 101337, 101341, 101345, 101349, 101353, 101357, 101361, - 101365, 101369, 101373, 101377, 101381, 101385, 101389, 101393, 101397, - 101401, 101405, 101409, 101413, 101417, 101421, 101425, 101429, 101433, - 101437, 101441, 101445, 101449, 101453, 101457, 101461, 101465, 101469, - 101473, 101477, 101481, 101485, 101489, 101493, 101497, 101501, 101505, - 101509, 101513, 101517, 101521, 101525, 101529, 101533, 101537, 101541, - 101545, 101549, 101553, 101557, 101561, 101565, 101569, 101573, 101577, - 101581, 101585, 101589, 101593, 101597, 101601, 101605, 101609, 101613, - 101617, 101621, 101625, 101629, 101633, 101637, 101641, 101645, 101649, - 101653, 101657, 101661, 101665, 101669, 101673, 101677, 101681, 101685, - 101689, 101693, 101697, 101701, 101705, 101709, 101713, 101717, 101721, - 101725, 101729, 101733, 101737, 101741, 101745, 101749, 101753, 101757, - 101761, 101765, 101769, 101773, 101777, 101781, 101785, 101789, 101793, - 101797, 101801, 101805, 101809, 101813, 101817, 101821, 101825, 101829, - 101833, 101837, 101841, 101845, 101849, 101853, 101857, 101861, 101865, - 101869, 101873, 101877, 101881, 101885, 101889, 101893, 101897, 101901, - 101905, 101909, 101913, 101917, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 101921, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 101925, - 101928, 101932, 101936, 101939, 101943, 101947, 101950, 101953, 101957, - 101961, 101964, 101967, 101970, 101973, 101978, 101981, 101985, 101988, - 101991, 101994, 101997, 102000, 102003, 102006, 102009, 102012, 102015, - 102018, 102022, 102026, 102030, 102034, 102039, 102044, 102050, 102056, - 102062, 102067, 102073, 102078, 102083, 102088, 102094, 102100, 102105, - 102110, 102115, 102120, 102126, 102132, 102137, 102142, 102148, 102153, - 102158, 102164, 102170, 102176, 102182, 102186, 102191, 102195, 102200, - 102204, 102209, 102214, 102220, 102226, 102232, 102237, 102243, 102248, - 102253, 102258, 102264, 102270, 102275, 102280, 102285, 102290, 102296, - 102302, 102307, 102312, 102318, 102323, 102328, 102334, 102340, 102346, - 102352, 102357, 102361, 102366, 102368, 102372, 102375, 102378, 102381, - 102384, 102387, 102390, 102393, 102396, 102399, 102402, 102405, 102408, - 102411, 102414, 102417, 102420, 102423, 102426, 102429, 102432, 102435, - 102438, 102441, 102444, 102447, 102450, 102453, 102456, 102459, 102462, - 102465, 102468, 102471, 102474, 102477, 102480, 102483, 102486, 102489, - 102492, 102495, 102498, 102501, 102504, 102507, 102510, 102513, 102516, - 102519, 102522, 102525, 102528, 102531, 102534, 102537, 102540, 102543, - 102546, 102549, 102552, 102555, 102558, 102561, 102564, 102567, 102570, - 102573, 102576, 102579, 102582, 102585, 102588, 102591, 102594, 102597, - 102600, 102603, 102606, 102609, 102612, 102615, 102618, 102621, 102624, - 102627, 102630, 102633, 102636, 102639, 102642, 102645, 102648, 102651, - 102654, 102657, 102660, 102663, 102666, 102669, 102672, 102675, 102678, - 102681, 102684, 102687, 102690, 102693, 102696, 102699, 102702, 102705, - 102708, 102711, 102714, 102717, 102720, 102723, 102726, 102729, 102732, - 102735, 102738, 102741, 102744, 102747, 102750, 102753, 102756, 102759, - 102762, 102765, 102768, 102771, 102774, 102777, 102780, 102783, 102786, - 102789, 102792, 102795, 102798, 102801, 102804, 102807, 102810, 102813, - 102816, 102819, 102822, 102825, 102828, 102831, 102834, 102837, 102840, - 102843, 102846, 102849, 102852, 102855, 102858, 102861, 102864, 102867, - 102870, 102873, 102876, 102879, 102882, 102885, 102888, 102891, 102894, - 102897, 102900, 102903, 102906, 102909, 102912, 102915, 102918, 102921, - 102924, 102927, 102930, 102933, 102936, 102939, 102942, 102945, 102948, - 102951, 102954, 102957, 102960, 102963, 102966, 102969, 102972, 102975, - 102978, 102981, 102984, 102987, 102990, 102993, 102996, 102999, 103002, - 103005, 103008, 103011, 103014, 103017, 103020, 103023, 103026, 103029, - 103032, 103035, 103038, 103041, 103044, 103047, 103050, 103053, 103056, - 103059, 103062, 103065, 103068, 103071, 103074, 103077, 103080, 103083, - 103086, 103089, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 64667, 64671, 64675, 64679, 64683, 64687, 64691, 64695, 64699, 64703, + 64707, 64711, 64715, 64719, 64723, 64727, 64731, 64735, 64739, 64743, + 64747, 64751, 64755, 64759, 64763, 64767, 64771, 64775, 64779, 64783, + 64787, 64791, 64795, 64799, 64803, 64807, 64811, 64815, 64819, 64823, + 64827, 64831, 64835, 64839, 64843, 64847, 64851, 64855, 64859, 64863, + 64867, 64871, 64875, 64879, 64883, 64887, 64891, 64895, 64899, 64903, + 64907, 64911, 64915, 64919, 64923, 64927, 64931, 64935, 64939, 64943, + 64947, 64950, 64954, 64958, 64962, 64966, 64970, 64974, 64978, 64982, + 64986, 64990, 64994, 64998, 65002, 65006, 65010, 65014, 65018, 65022, + 65026, 65030, 65034, 65038, 65042, 65046, 65050, 65054, 65058, 65062, + 65066, 65070, 65074, 65078, 65082, 65086, 65090, 65094, 65098, 65102, + 65106, 65110, 65114, 65118, 65122, 65126, 65130, 65134, 65138, 65142, + 65146, 65150, 65154, 65158, 65162, 65166, 65170, 65174, 65178, 65182, + 65186, 65190, 65194, 65198, 65202, 65206, 65210, 65214, 65218, 65222, + 65226, 65230, 65234, 65238, 65242, 65246, 65250, 65254, 65258, 65262, + 65266, 65270, 65274, 65278, 65282, 65286, 65290, 65294, 65298, 65302, + 65306, 65310, 65314, 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, 65678, 65682, 65686, 65690, 65694, 65698, 65702, + 65706, 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, 66173, 66177, 66181, + 66185, 66189, 66193, 66197, 66201, 66205, 66209, 66213, 66217, 66221, + 66225, 66229, 66233, 66237, 66241, 66245, 66249, 66253, 66257, 66261, + 66265, 66269, 66273, 66277, 66281, 66285, 66289, 66293, 66297, 66301, + 66305, 66309, 66313, 66317, 66321, 66325, 66329, 66333, 66337, 66341, + 66345, 66349, 66353, 66357, 66361, 66365, 66369, 66373, 66377, 66381, + 66385, 66389, 66393, 66397, 66401, 66405, 66409, 66413, 66417, 66421, + 66425, 66429, 66433, 66437, 66441, 66445, 66449, 66453, 66457, 66461, + 66465, 66469, 66473, 66477, 66481, 66485, 66489, 0, 0, 0, 66493, 66497, + 66501, 66505, 66509, 66513, 66517, 66521, 66525, 66529, 66533, 66537, + 66541, 66545, 66549, 66553, 66557, 66561, 66565, 66569, 66573, 66577, + 66581, 66585, 66589, 66593, 66597, 66601, 66605, 66609, 66613, 66617, + 66621, 66625, 66629, 66633, 66637, 66641, 66645, 66649, 66653, 66657, + 66661, 66665, 66669, 66673, 66677, 66681, 66685, 66689, 66693, 66697, + 66701, 66705, 66709, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66713, 66718, 66722, + 66727, 66732, 66737, 66742, 66747, 66751, 66756, 66761, 66766, 66771, + 66776, 66781, 66786, 66790, 66794, 66799, 66804, 66809, 66814, 66819, + 66823, 66828, 66833, 66838, 66843, 66848, 66852, 66857, 66861, 66866, + 66870, 66875, 66879, 66883, 66887, 66892, 66897, 66902, 66910, 66918, + 66926, 66934, 66941, 66949, 66955, 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, 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, 67238, 67242, 67246, 67250, 67254, 67257, + 67261, 67265, 67268, 67272, 67276, 67280, 67283, 67287, 67291, 67295, + 67299, 67303, 67307, 67311, 67315, 67319, 67323, 67327, 67331, 67335, + 67339, 67342, 67346, 67350, 67354, 67358, 67362, 67366, 67370, 67374, + 67378, 67381, 67384, 67388, 67392, 67396, 67399, 67402, 67406, 67410, + 67414, 67418, 67422, 67426, 67430, 67434, 67438, 67442, 67446, 67450, + 67454, 67458, 67462, 67466, 67470, 67474, 67478, 67482, 67486, 67490, + 67494, 67498, 67502, 67506, 67510, 67514, 67518, 67522, 67526, 67530, + 67534, 67538, 67542, 67546, 67550, 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, 67767, + 67771, 67775, 67779, 67783, 67787, 67791, 67795, 67799, 67803, 67807, + 67811, 67815, 67819, 67823, 67827, 67831, 67835, 67839, 67843, 67847, + 67851, 67854, 67858, 67862, 67866, 67870, 67874, 67878, 67882, 67886, + 67890, 67894, 67898, 67902, 67906, 67910, 67914, 67918, 67922, 67926, + 67930, 67934, 67938, 67942, 67946, 67950, 67954, 67958, 67962, 67966, + 67970, 67974, 67978, 67982, 67986, 67990, 67994, 67998, 68002, 68006, + 68010, 68014, 68018, 68022, 68026, 68029, 68034, 68038, 68044, 68049, + 68055, 68059, 68063, 68067, 68071, 68075, 68079, 68083, 68087, 68091, + 68095, 68099, 68103, 68107, 68111, 68114, 68117, 68120, 68123, 68126, + 68129, 68132, 68135, 68138, 68143, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 68149, 68154, 68159, 68164, 68169, 68175, 68181, + 68186, 68191, 68196, 68201, 68208, 68215, 68222, 68229, 68236, 68243, + 68253, 68263, 68270, 68277, 68283, 68289, 68295, 68301, 68310, 68319, + 68326, 68333, 68344, 68355, 68360, 0, 0, 68365, 68372, 68379, 68386, + 68393, 68400, 68407, 68413, 68419, 68425, 68431, 68438, 68445, 68450, + 68454, 68461, 68468, 68475, 0, 0, 0, 0, 0, 0, 0, 0, 68479, 68483, 68487, + 68490, 68493, 68498, 68503, 68508, 68513, 68518, 68523, 68528, 68533, + 68538, 68543, 68552, 68561, 68566, 68571, 68576, 68581, 68586, 68591, + 68596, 68601, 68606, 68611, 68616, 0, 0, 0, 0, 0, 0, 0, 0, 68621, 68624, + 68627, 68630, 68634, 68638, 68642, 68646, 68649, 68653, 68656, 68660, + 68663, 68667, 68671, 68675, 68679, 68683, 68687, 68691, 68694, 68698, + 68702, 68706, 68710, 68714, 68718, 68722, 68726, 68730, 68734, 68738, + 68742, 68746, 68750, 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, 68852, 68856, + 68860, 68864, 68868, 68872, 68876, 68880, 68883, 68887, 68891, 68895, + 68899, 68903, 68907, 68911, 68915, 68919, 68923, 68927, 68931, 68936, + 68941, 68944, 68949, 68952, 68955, 68958, 0, 0, 0, 0, 0, 0, 0, 0, 68962, + 68971, 68980, 68989, 68998, 69007, 69016, 69025, 69034, 69042, 69049, + 69057, 69064, 69072, 69082, 69091, 69101, 69110, 69120, 69128, 69135, + 69143, 69150, 69158, 69163, 69168, 69173, 69182, 69188, 69194, 69201, + 69210, 69218, 69226, 69234, 69241, 69248, 69255, 69262, 69267, 69272, + 69277, 69282, 69287, 69292, 69297, 69302, 69310, 69318, 69324, 69329, + 69334, 69339, 69344, 69349, 69354, 69359, 69364, 69369, 69377, 69385, + 69390, 69395, 69404, 69413, 69420, 69427, 69436, 69445, 69456, 69467, + 69473, 69479, 69487, 69495, 69504, 69513, 69520, 69527, 69532, 69537, + 69548, 69559, 69567, 69575, 69585, 69595, 69606, 69617, 69626, 69635, + 69642, 69649, 69656, 69663, 69672, 69681, 69686, 69691, 69698, 69705, + 69712, 69719, 69730, 69741, 69746, 69751, 69756, 69761, 69766, 69771, + 69776, 69781, 69785, 69790, 69795, 69800, 69805, 69810, 69816, 69821, + 69826, 69833, 69840, 69847, 69854, 69861, 69869, 69877, 69882, 69887, + 69893, 69899, 69905, 69911, 69918, 69925, 69932, 69936, 69943, 69948, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 69953, 69960, 69967, 69974, 69982, + 69989, 69995, 70001, 70008, 70014, 70020, 70026, 70033, 70040, 70047, + 70054, 70061, 70068, 70075, 70082, 70089, 70096, 70103, 70110, 70117, + 70124, 70130, 70137, 70144, 70151, 70158, 70165, 70172, 70179, 70186, + 70193, 70200, 70207, 70214, 70221, 70228, 70235, 70242, 70249, 70256, + 70264, 70272, 70280, 70288, 0, 0, 0, 0, 70296, 70305, 70314, 70323, + 70332, 70341, 70350, 70357, 70364, 70371, 0, 0, 0, 0, 0, 0, 70378, 70382, + 70387, 70392, 70397, 70402, 70407, 70412, 70417, 70422, 70427, 70432, + 70436, 70440, 70445, 70450, 70454, 70459, 70464, 70469, 70474, 70479, + 70484, 70489, 70493, 70497, 70502, 70507, 70512, 70516, 70520, 70524, + 70528, 70532, 70536, 70541, 70546, 70551, 70556, 70561, 70568, 70574, + 70579, 70584, 70589, 70594, 70600, 70607, 70613, 70620, 70626, 70632, + 70637, 70644, 70650, 70655, 0, 0, 0, 0, 0, 0, 0, 0, 70661, 70665, 70669, + 70672, 70676, 70679, 70683, 70686, 70690, 70694, 70699, 70703, 70708, + 70711, 70715, 70719, 70722, 70726, 70730, 70733, 70737, 70741, 70745, + 70749, 70753, 70757, 70761, 70765, 70769, 70773, 70777, 70781, 70785, + 70789, 70793, 70797, 70801, 70805, 70808, 70811, 70815, 70819, 70823, + 70826, 70829, 70832, 70836, 70840, 70844, 70848, 70852, 70855, 70859, + 70865, 70870, 70874, 70879, 70883, 70888, 70893, 70899, 70904, 70910, + 70914, 70919, 70924, 70928, 70933, 70938, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 70942, 70945, 70949, 70953, 70956, 70959, 70962, 70965, 70968, 70971, + 70974, 70977, 0, 0, 0, 0, 0, 0, 70980, 70985, 70989, 70993, 70997, 71001, + 71005, 71009, 71013, 71017, 71021, 71025, 71029, 71033, 71037, 71041, + 71045, 71050, 71055, 71061, 71067, 71074, 71079, 71084, 71090, 71094, + 71099, 71102, 0, 0, 0, 0, 71105, 71112, 71118, 71124, 71130, 71136, + 71142, 71148, 71154, 71160, 71166, 71172, 71179, 71186, 71193, 71200, + 71207, 71214, 71221, 71228, 71235, 71241, 71247, 71254, 71260, 71267, + 71274, 71280, 71286, 71293, 71300, 71307, 71313, 71320, 71327, 71333, + 71340, 71346, 71353, 71360, 71366, 71372, 71379, 71385, 71392, 71399, + 71408, 71415, 71422, 71426, 71431, 71436, 71441, 71446, 71450, 71454, + 71459, 71463, 71468, 71473, 71478, 71483, 71487, 71492, 71496, 71501, + 71505, 71510, 71515, 71520, 71525, 71529, 71534, 71539, 71544, 71550, + 71555, 71561, 71567, 71573, 71580, 71586, 71592, 71599, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 71603, 71608, 71612, 71616, 71620, 71624, 71628, 71632, + 71636, 71640, 71644, 71648, 71652, 71656, 71660, 71664, 71668, 71672, + 71676, 71680, 71684, 71688, 71692, 71696, 71700, 71704, 71708, 71712, + 71716, 71720, 0, 0, 0, 71724, 71728, 71732, 71736, 71740, 71743, 71749, + 71752, 71756, 71759, 71765, 71771, 71779, 71782, 71786, 71789, 71792, + 71797, 71802, 71806, 71812, 71816, 71820, 71826, 71830, 71836, 71842, + 71846, 71850, 71856, 71860, 71866, 71872, 71876, 71882, 71886, 71892, + 71895, 71898, 71904, 71908, 71914, 71917, 71920, 71923, 71929, 71933, + 71937, 71943, 71949, 71953, 71956, 71962, 71967, 71972, 71977, 71984, + 71989, 71996, 72001, 72008, 72013, 72019, 72025, 72031, 72034, 72038, + 72042, 72047, 72052, 72057, 72062, 72067, 72072, 72077, 72082, 72089, + 72094, 0, 72100, 72103, 72107, 72110, 72113, 72116, 72119, 72122, 72125, + 72128, 72131, 0, 0, 0, 0, 72134, 72141, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 72146, + 72149, 72152, 72155, 72158, 72162, 72165, 72168, 72172, 72176, 72180, + 72184, 72188, 72192, 72196, 72200, 72204, 72208, 72212, 72216, 72220, + 72224, 72228, 72232, 72236, 72239, 72243, 72246, 72250, 72254, 72258, + 72262, 72266, 72269, 72273, 72276, 72279, 72283, 72287, 72291, 72295, + 72298, 72303, 72307, 72312, 72317, 72321, 72326, 72330, 72335, 72340, + 72345, 72350, 72355, 72361, 0, 0, 0, 0, 0, 0, 0, 0, 0, 72367, 72372, + 72377, 72382, 72389, 72394, 72399, 72403, 72408, 72413, 72417, 72421, + 72426, 72432, 0, 0, 72439, 72443, 72446, 72449, 72452, 72455, 72458, + 72461, 72464, 72467, 0, 0, 72470, 72475, 72480, 72486, 72493, 72499, + 72505, 72511, 72517, 72523, 72529, 72535, 72541, 72547, 72553, 72559, + 72564, 72570, 72575, 72581, 72587, 72594, 72600, 72606, 72611, 72618, + 72625, 72632, 72638, 72643, 72648, 72653, 0, 0, 0, 0, 72661, 72667, + 72673, 72679, 72685, 72691, 72697, 72703, 72709, 72715, 72721, 72727, + 72733, 72739, 72745, 72751, 72757, 72763, 72769, 72775, 72781, 72786, + 72791, 72797, 72803, 72809, 72815, 72821, 72827, 72833, 72839, 72845, + 72851, 72857, 72863, 72869, 72875, 72881, 72887, 72893, 72899, 72905, + 72911, 72917, 72923, 72929, 72935, 72940, 72945, 72951, 72956, 72960, + 72965, 72969, 72973, 72977, 72983, 72988, 72993, 72998, 73003, 73008, + 73013, 73018, 73025, 73032, 73039, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 73046, 73051, 73056, 73061, 73068, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 73075, + 73082, 73089, 73096, 73103, 73109, 73115, 73122, 73129, 73136, 73143, + 73150, 73157, 73164, 73171, 73178, 73184, 73191, 73198, 73205, 73212, + 73219, 73226, 73233, 73240, 73247, 73254, 73261, 73270, 73279, 73288, + 73297, 73306, 73315, 73324, 73333, 73341, 73349, 73357, 73365, 73373, + 73381, 73389, 73397, 73403, 73411, 0, 0, 73419, 73426, 73432, 73438, + 73444, 73450, 73456, 73462, 73468, 73474, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 73480, 73484, + 73488, 73492, 73496, 73500, 73504, 73508, 73512, 73516, 73520, 73524, + 73528, 73532, 73536, 73540, 73544, 73548, 73552, 73556, 73560, 73564, + 73568, 0, 0, 0, 0, 73572, 73576, 73580, 73584, 73588, 73592, 73596, + 73600, 73604, 73608, 73612, 73616, 73620, 73624, 73628, 73632, 73636, + 73640, 73644, 73648, 73652, 73656, 73660, 73664, 73668, 73672, 73676, + 73680, 73684, 73688, 73692, 73696, 73700, 73704, 73708, 73712, 73716, + 73720, 73724, 73728, 73732, 73736, 73740, 73744, 73748, 73752, 73756, + 73760, 73764, 0, 0, 0, 0, 73768, 73772, 73776, 73780, 73784, 73788, + 73792, 73796, 73800, 73804, 73808, 73812, 73816, 73820, 73824, 73828, + 73832, 73836, 73840, 73844, 73848, 73852, 73856, 73860, 73864, 73868, + 73872, 73876, 73880, 73884, 73888, 73892, 73896, 73900, 73904, 73908, + 73912, 73916, 73920, 73924, 73928, 73932, 73936, 73940, 73944, 73948, + 73952, 73956, 73960, 73964, 73968, 73972, 73976, 73980, 73984, 73988, + 73992, 73996, 74000, 74004, 74008, 74012, 74016, 74020, 74024, 74028, + 74032, 74036, 74040, 74044, 74048, 74052, 74056, 74060, 74064, 74068, + 74072, 74076, 74080, 74084, 74088, 74092, 74096, 74100, 74104, 74108, + 74112, 74116, 74120, 74124, 74128, 74132, 74136, 74140, 74144, 74148, + 74152, 74156, 74160, 74164, 74168, 74172, 74176, 74180, 74184, 74188, + 74192, 74196, 74200, 74204, 74208, 74212, 74216, 74220, 74224, 74228, + 74232, 74236, 74240, 74244, 74248, 74252, 74256, 74260, 74264, 74268, + 74272, 74276, 74280, 74284, 74288, 74292, 74296, 74300, 74304, 74308, + 74312, 74316, 74320, 74324, 74328, 74332, 74336, 74340, 74344, 74348, + 74352, 74356, 74360, 74364, 74368, 74372, 74376, 74380, 74384, 74388, + 74392, 74396, 74400, 74404, 74408, 74412, 74416, 74420, 74424, 74428, + 74432, 74436, 74440, 74444, 74448, 74452, 74456, 74460, 74464, 74468, + 74472, 74476, 74480, 74484, 74488, 74492, 74496, 74500, 74504, 74508, + 74512, 74516, 74520, 74524, 74528, 74532, 74536, 74540, 74544, 74548, + 74552, 74556, 74560, 74564, 74568, 74572, 74576, 74580, 74584, 74588, + 74592, 74596, 74600, 74604, 74608, 74612, 74616, 74620, 74624, 74628, + 74632, 74636, 74640, 74644, 74648, 74652, 74656, 74660, 74664, 74668, + 74672, 74676, 74680, 74684, 74688, 74692, 74696, 74700, 74704, 74708, + 74712, 74716, 74720, 74724, 74728, 74732, 74736, 74740, 74744, 74748, + 74752, 74756, 74760, 74764, 74768, 74772, 74776, 74780, 74784, 74788, + 74792, 74796, 74800, 74804, 74808, 74812, 74816, 74820, 74824, 74828, + 74832, 74836, 74840, 74844, 74848, 74852, 74856, 74860, 74864, 74868, + 74872, 74876, 74880, 74884, 74888, 74892, 74896, 74900, 74904, 74908, + 74912, 74916, 74920, 74924, 74928, 74932, 74936, 74940, 74944, 74948, + 74952, 74956, 74960, 74964, 74968, 74972, 0, 0, 74976, 74980, 74984, + 74988, 74992, 74996, 75000, 75004, 75008, 75012, 75016, 75020, 75024, + 75028, 75032, 75036, 75040, 75044, 75048, 75052, 75056, 75060, 75064, + 75068, 75072, 75076, 75080, 75084, 75088, 75092, 75096, 75100, 75104, + 75108, 75112, 75116, 75120, 75124, 75128, 75132, 75136, 75140, 75144, + 75148, 75152, 75156, 75160, 75164, 75168, 75172, 75176, 75180, 75184, + 75188, 75192, 75196, 75200, 75204, 75208, 75212, 75216, 75220, 0, 0, + 75224, 75228, 75232, 75236, 75240, 75244, 75248, 75252, 75256, 75260, + 75264, 75268, 75272, 75276, 75280, 75284, 75288, 75292, 75296, 75300, + 75304, 75308, 75312, 75316, 75320, 75324, 75328, 75332, 75336, 75340, + 75344, 75348, 75352, 75356, 75360, 75364, 75368, 75372, 75376, 75380, + 75384, 75388, 75392, 75396, 75400, 75404, 75408, 75412, 75416, 75420, + 75424, 75428, 75432, 75436, 75440, 75444, 75448, 75452, 75456, 75460, + 75464, 75468, 75472, 75476, 75480, 75484, 75488, 75492, 75496, 75500, + 75504, 75508, 75512, 75516, 75520, 75524, 75528, 75532, 75536, 75540, + 75544, 75548, 75552, 75556, 75560, 75564, 75568, 75572, 75576, 75580, + 75584, 75588, 75592, 75596, 75600, 75604, 75608, 75612, 75616, 75620, + 75624, 75628, 75632, 75636, 75640, 75644, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 75648, 75653, 75658, 75663, 75668, 75673, 75681, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 75686, 75693, 75700, 75707, 75714, 0, 0, 0, 0, 0, + 75721, 75728, 75735, 75745, 75751, 75757, 75763, 75769, 75775, 75781, + 75788, 75794, 75800, 75806, 75815, 75824, 75836, 75848, 75854, 75860, + 75866, 75873, 75880, 75887, 75894, 75901, 0, 75908, 75915, 75922, 75930, + 75937, 0, 75944, 0, 75951, 75958, 0, 75965, 75973, 0, 75980, 75987, + 75994, 76001, 76008, 76015, 76022, 76029, 76036, 76043, 76048, 76055, + 76062, 76068, 76074, 76080, 76086, 76092, 76098, 76104, 76110, 76116, + 76122, 76128, 76134, 76140, 76146, 76152, 76158, 76164, 76170, 76176, + 76182, 76188, 76194, 76200, 76206, 76212, 76218, 76224, 76230, 76236, + 76242, 76248, 76254, 76260, 76266, 76272, 76278, 76284, 76290, 76296, + 76302, 76308, 76314, 76320, 76326, 76332, 76338, 76344, 76350, 76356, + 76362, 76368, 76374, 76380, 76386, 76392, 76398, 76404, 76410, 76416, + 76422, 76428, 76434, 76440, 76446, 76452, 76458, 76464, 76470, 76476, + 76482, 76488, 76494, 76500, 76506, 76512, 76518, 76526, 76534, 76540, + 76546, 76552, 76558, 76567, 76576, 76584, 76592, 76600, 76608, 76616, + 76624, 76632, 76640, 76647, 76654, 76664, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 76674, 76680, 76686, 76692, 76698, 76703, 76708, 76714, 76720, 76726, + 76732, 76740, 76746, 76752, 76760, 76768, 76776, 76784, 76789, 76794, + 76799, 76804, 76816, 76828, 76838, 76848, 76859, 76870, 76881, 76892, + 76902, 76912, 76923, 76934, 76945, 76956, 76966, 76976, 76986, 77001, + 77016, 77031, 77038, 77045, 77052, 77059, 77069, 77079, 77089, 77100, + 77110, 77118, 77126, 77135, 77143, 77152, 77160, 77168, 77176, 77185, + 77193, 77202, 77210, 77218, 77226, 77235, 77243, 77250, 77257, 77264, + 77271, 77279, 77287, 77295, 77303, 77311, 77320, 77328, 77336, 77344, + 77352, 77360, 77369, 77377, 77385, 77393, 77401, 77409, 77417, 77425, + 77433, 77441, 77449, 77458, 77466, 77475, 77483, 77491, 77499, 77508, + 77516, 77524, 77532, 77540, 77549, 77558, 77566, 77575, 77583, 77591, + 77599, 77608, 77616, 77625, 77633, 77640, 77647, 77655, 77662, 77670, + 77677, 77685, 77693, 77702, 77710, 77719, 77727, 77735, 77743, 77752, + 77760, 77767, 77774, 77782, 77789, 77797, 77804, 77814, 77824, 77834, + 77843, 77852, 77861, 77870, 77879, 77889, 77900, 77911, 77921, 77932, + 77943, 77953, 77962, 77971, 77979, 77988, 77997, 78005, 78014, 78023, + 78031, 78040, 78049, 78057, 78066, 78075, 78083, 78092, 78101, 78109, + 78118, 78126, 78135, 78143, 78151, 78160, 78168, 78177, 78185, 78193, + 78202, 78210, 78217, 78224, 78233, 78242, 78250, 78259, 78268, 78276, + 78286, 78294, 78302, 78309, 78317, 78325, 78332, 78342, 78352, 78363, + 78373, 78384, 78392, 78400, 78409, 78417, 78426, 78434, 78442, 78451, + 78459, 78468, 78476, 78483, 78490, 78497, 78504, 78512, 78520, 78528, + 78536, 78545, 78553, 78561, 78570, 78578, 78586, 78594, 78603, 78611, + 78619, 78627, 78635, 78643, 78651, 78659, 78667, 78675, 78684, 78692, + 78700, 78708, 78716, 78724, 78733, 78742, 78750, 78758, 78766, 78775, + 78783, 78792, 78799, 78806, 78814, 78821, 78829, 78837, 78846, 78854, + 78863, 78871, 78879, 78889, 78896, 78903, 78911, 78918, 78926, 78936, + 78947, 78955, 78964, 78972, 78981, 78989, 78998, 79006, 79015, 79023, + 79032, 79041, 79049, 79057, 79065, 79074, 79081, 79089, 79098, 79107, + 79116, 79125, 79133, 79142, 79150, 79159, 79167, 79176, 79184, 79193, + 79201, 79209, 79216, 79224, 79231, 79240, 79248, 79257, 79265, 79274, + 79282, 79290, 79298, 79307, 79315, 79324, 79333, 79342, 79351, 79360, + 79368, 79377, 79385, 79394, 79402, 79411, 79419, 79428, 79436, 79444, + 79451, 79459, 79466, 79475, 79483, 79492, 79500, 79509, 79517, 79525, + 79533, 79542, 79550, 79559, 79568, 79577, 79586, 79594, 79602, 79611, + 79619, 79628, 79637, 79645, 79653, 79661, 79670, 79678, 79686, 79695, + 79703, 79711, 79719, 79727, 79732, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 79737, 79747, 79757, 79767, 79777, 79788, 79798, 79808, 79819, + 79828, 79837, 79846, 79856, 79866, 79876, 79887, 79897, 79907, 79917, + 79927, 79937, 79947, 79957, 79967, 79977, 79987, 79997, 80008, 80019, + 80029, 80039, 80050, 80061, 80072, 80082, 80092, 80102, 80112, 80122, + 80132, 80142, 80153, 80163, 80173, 80184, 80195, 80206, 80216, 80226, + 80236, 80246, 80257, 80267, 80277, 80288, 80299, 80309, 80319, 80328, + 80337, 80346, 80355, 80364, 80374, 0, 0, 80384, 80394, 80404, 80414, + 80424, 80435, 80445, 80455, 80466, 80476, 80487, 80496, 80505, 80516, + 80526, 80537, 80548, 80560, 80570, 80581, 80590, 80600, 80610, 80622, + 80632, 80642, 80652, 80662, 80672, 80681, 80690, 80699, 80708, 80718, + 80728, 80738, 80748, 80758, 80768, 80778, 80788, 80798, 80808, 80818, + 80828, 80837, 80846, 80855, 80865, 80875, 80885, 80895, 80905, 80916, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 80926, 80941, 80956, 80962, + 80968, 80974, 80980, 80986, 80992, 80998, 81004, 81012, 81016, 81019, 0, + 0, 81027, 81030, 81033, 81036, 81039, 81042, 81045, 81048, 81051, 81054, + 81057, 81060, 81063, 81066, 81069, 81072, 81075, 81083, 81092, 81103, + 81111, 81119, 81128, 81137, 81148, 81160, 0, 0, 0, 0, 0, 0, 81169, 81174, + 81179, 81186, 81193, 81199, 81205, 0, 0, 0, 0, 0, 0, 0, 0, 0, 81210, + 81220, 81230, 81240, 81249, 81260, 81269, 81278, 81288, 81298, 81310, + 81322, 81333, 81344, 81355, 81366, 81376, 81386, 81396, 81406, 81417, + 81428, 81432, 81437, 81446, 81455, 81459, 81463, 81467, 81472, 81477, + 81482, 81487, 81490, 81494, 0, 81499, 81502, 81505, 81509, 81513, 81518, + 81522, 81526, 81531, 81536, 81543, 81550, 81553, 81556, 81559, 81562, + 81565, 81569, 81573, 0, 81577, 81582, 81586, 81590, 0, 0, 0, 0, 81595, + 81600, 81607, 81612, 81617, 0, 81622, 81627, 81632, 81637, 81642, 81647, + 81652, 81657, 81662, 81667, 81672, 81677, 81686, 81695, 81703, 81711, + 81720, 81729, 81738, 81747, 81755, 81763, 81771, 81779, 81784, 81789, + 81795, 81801, 81807, 81813, 81821, 81829, 81835, 81841, 81847, 81853, + 81859, 81865, 81871, 81877, 81882, 81887, 81892, 81897, 81902, 81907, + 81912, 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, 82115, 82121, 82127, 82133, 82139, 82145, + 82151, 82157, 82163, 82169, 82175, 82181, 82187, 82193, 82199, 82205, + 82211, 82217, 82223, 82229, 82235, 82241, 82247, 82253, 82259, 82265, + 82271, 82277, 82282, 82287, 82292, 82297, 82303, 82309, 82315, 82321, + 82327, 82333, 82339, 82345, 82351, 82357, 82363, 82369, 82374, 82379, + 82384, 82389, 82401, 82413, 82424, 82435, 82447, 82459, 82467, 0, 0, + 82475, 0, 82483, 82487, 82491, 82494, 82498, 82502, 82505, 82508, 82512, + 82516, 82519, 82522, 82525, 82528, 82533, 82536, 82540, 82543, 82546, + 82549, 82552, 82555, 82558, 82561, 82564, 82567, 82570, 82573, 82577, + 82581, 82585, 82589, 82594, 82599, 82605, 82611, 82617, 82622, 82628, + 82634, 82640, 82645, 82651, 82657, 82662, 82667, 82672, 82677, 82683, + 82689, 82694, 82699, 82705, 82710, 82716, 82722, 82728, 82734, 82740, + 82744, 82749, 82753, 82758, 82762, 82767, 82772, 82778, 82784, 82790, + 82795, 82801, 82807, 82813, 82818, 82824, 82830, 82835, 82840, 82845, + 82850, 82856, 82862, 82867, 82872, 82878, 82883, 82889, 82895, 82901, + 82907, 82913, 82918, 82922, 82927, 82930, 82935, 82940, 82946, 82951, + 82956, 82960, 82966, 82971, 82976, 82981, 82986, 82991, 82996, 83001, + 83007, 83013, 83019, 83027, 83031, 83035, 83039, 83043, 83047, 83051, + 83056, 83061, 83066, 83071, 83076, 83081, 83086, 83091, 83096, 83101, + 83106, 83111, 83116, 83120, 83124, 83129, 83134, 83139, 83144, 83148, + 83153, 83158, 83163, 83168, 83172, 83177, 83182, 83187, 83192, 83196, + 83201, 83206, 83210, 83215, 83220, 83225, 83230, 83235, 83239, 83246, + 83253, 83257, 83262, 83267, 83272, 83277, 83282, 83287, 83292, 83297, + 83302, 83307, 83312, 83317, 83322, 83327, 83332, 83337, 83342, 83347, + 83352, 83357, 83362, 83367, 83372, 83377, 83382, 83387, 83392, 83397, + 83402, 0, 0, 0, 83407, 83411, 83416, 83420, 83425, 83430, 0, 0, 83434, + 83439, 83444, 83448, 83453, 83458, 0, 0, 83463, 83468, 83472, 83477, + 83482, 83487, 0, 0, 83492, 83497, 83502, 0, 0, 0, 83506, 83510, 83514, + 83517, 83520, 83524, 83528, 0, 83532, 83538, 83541, 83545, 83548, 83552, + 83556, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 83560, 83566, 83572, 83578, 83584, + 0, 0, 83588, 83594, 83600, 83606, 83612, 83618, 83625, 83632, 83639, + 83646, 83653, 83660, 0, 83667, 83674, 83681, 83687, 83694, 83701, 83708, + 83715, 83721, 83728, 83735, 83742, 83749, 83755, 83762, 83769, 83776, + 83783, 83789, 83796, 83803, 83810, 83817, 83824, 83831, 83838, 0, 83845, + 83851, 83858, 83865, 83872, 83879, 83886, 83893, 83900, 83907, 83914, + 83921, 83928, 83935, 83941, 83948, 83955, 83962, 83969, 0, 83976, 83983, + 0, 83990, 83997, 84004, 84011, 84018, 84025, 84032, 84039, 84046, 84053, + 84060, 84067, 84074, 84081, 84088, 0, 0, 84094, 84099, 84104, 84109, + 84114, 84119, 84124, 84129, 84134, 84139, 84144, 84149, 84154, 84159, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 84164, 84171, 84178, 84185, 84192, 84199, + 84206, 84213, 84220, 84227, 84234, 84241, 84248, 84255, 84262, 84269, + 84276, 84283, 84290, 84297, 84305, 84313, 84320, 84327, 84332, 84340, + 84348, 84355, 84362, 84367, 84374, 84379, 84384, 84391, 84396, 84401, + 84406, 84414, 84419, 84424, 84431, 84436, 84441, 84448, 84455, 84460, + 84465, 84470, 84475, 84480, 84485, 84490, 84495, 84500, 84507, 84512, + 84519, 84524, 84529, 84534, 84539, 84544, 84549, 84554, 84559, 84564, + 84569, 84574, 84581, 84588, 84595, 84602, 84608, 84613, 84620, 84625, + 84630, 84639, 84646, 84655, 84662, 84667, 84672, 84680, 84685, 84690, + 84695, 84700, 84705, 84712, 84717, 84722, 84727, 84732, 84737, 84744, + 84751, 84758, 84765, 84772, 84779, 84786, 84793, 84800, 84807, 84814, + 84821, 84828, 84835, 84842, 84849, 84856, 84863, 84870, 84877, 84884, + 84891, 84898, 84905, 84912, 84919, 84926, 84933, 0, 0, 0, 0, 0, 84940, + 84948, 84956, 0, 0, 0, 0, 84961, 84965, 84969, 84973, 84977, 84981, + 84985, 84989, 84993, 84997, 85002, 85007, 85012, 85017, 85022, 85027, + 85032, 85037, 85042, 85048, 85054, 85060, 85067, 85074, 85081, 85088, + 85095, 85102, 85108, 85114, 85120, 85127, 85134, 85141, 85148, 85155, + 85162, 85169, 85176, 85183, 85190, 85197, 85204, 85211, 85218, 0, 0, 0, + 85225, 85233, 85241, 85249, 85257, 85265, 85275, 85285, 85293, 85301, + 85309, 85317, 85325, 85331, 85338, 85347, 85356, 85365, 85374, 85383, + 85392, 85402, 85413, 85423, 85434, 85443, 85452, 85461, 85471, 85482, + 85492, 85503, 85514, 85523, 85531, 85537, 85543, 85549, 85555, 85563, + 85571, 85577, 85584, 85594, 85601, 85608, 85615, 85622, 85629, 85639, + 85646, 85653, 85661, 85669, 85678, 85687, 85696, 85705, 85714, 85722, + 85731, 85740, 85749, 85753, 85760, 85765, 85770, 85774, 85778, 85782, + 85786, 85791, 85796, 85802, 85808, 85812, 85818, 85822, 85826, 85830, + 85834, 85838, 85842, 85848, 0, 0, 0, 0, 0, 85852, 85857, 85862, 85867, + 85872, 85879, 85884, 85889, 85894, 85899, 85904, 85909, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 85914, + 85921, 85930, 85939, 85946, 85953, 85960, 85967, 85974, 85981, 85987, + 85994, 86001, 86008, 86015, 86022, 86029, 86036, 86043, 86052, 86059, + 86066, 86073, 86080, 86087, 86094, 86101, 86108, 86117, 86124, 86131, + 86138, 86145, 86152, 86159, 86168, 86175, 86182, 86189, 86196, 86205, + 86212, 86219, 86226, 86234, 86243, 0, 0, 86252, 86256, 86260, 86265, + 86270, 86275, 86280, 86284, 86289, 86294, 86299, 86304, 86309, 86314, + 86318, 86322, 86326, 86331, 86336, 86340, 86345, 86350, 86354, 86358, + 86363, 86368, 86373, 86378, 86383, 0, 0, 0, 86388, 86392, 86397, 86402, + 86406, 86411, 86415, 86420, 86425, 86430, 86435, 86439, 86443, 86448, + 86453, 86458, 86463, 86467, 86472, 86476, 86481, 86486, 86490, 86495, + 86500, 86505, 86509, 86513, 86518, 86523, 86528, 86533, 86538, 86543, + 86548, 86553, 86558, 86563, 86568, 86573, 86578, 86583, 86588, 86593, + 86598, 86603, 86608, 86613, 86618, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 86623, 86627, 86632, 86637, 86642, 86646, + 86651, 86656, 86661, 86666, 86670, 86674, 86679, 86684, 86689, 86694, + 86698, 86703, 86708, 86713, 86718, 86723, 86728, 86732, 86737, 86742, + 86747, 86752, 86757, 86762, 86767, 0, 86772, 86777, 86782, 86788, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 86794, 86799, 86804, 86809, 86814, 86819, + 86824, 86829, 86834, 86839, 86844, 86849, 86854, 86859, 86864, 86869, + 86874, 86879, 86884, 86889, 86894, 86899, 86904, 86909, 86914, 86919, + 86924, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 86931, 86936, 86941, 86946, 86951, 86956, 86961, + 86966, 86971, 86976, 86981, 86986, 86991, 86996, 87001, 87006, 87011, + 87016, 87021, 87026, 87031, 87036, 87041, 87046, 87051, 87056, 87061, + 87065, 87069, 87073, 0, 87078, 87084, 87089, 87094, 87099, 87104, 87110, + 87116, 87122, 87128, 87134, 87140, 87146, 87152, 87158, 87164, 87170, + 87176, 87182, 87187, 87193, 87199, 87204, 87210, 87215, 87221, 87227, + 87232, 87238, 87244, 87249, 87255, 87261, 87267, 87273, 87279, 87285, 0, + 0, 0, 0, 87290, 87296, 87302, 87308, 87314, 87320, 87326, 87332, 87338, + 87345, 87350, 87355, 87361, 87367, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 87373, 87378, 87383, 87388, 87394, 87399, 87405, 87411, + 87417, 87423, 87430, 87436, 87443, 87448, 87453, 87458, 87463, 87468, + 87473, 87478, 87483, 87488, 87493, 87498, 87503, 87508, 87513, 87518, + 87523, 87528, 87533, 87538, 87543, 87548, 87553, 87558, 87563, 87568, + 87573, 87578, 87583, 87588, 87593, 87598, 87604, 87609, 87615, 87621, + 87627, 87633, 87640, 87646, 87653, 87658, 87663, 87668, 87673, 87678, + 87683, 87688, 87693, 87698, 87703, 87708, 87713, 87718, 87723, 87728, + 87733, 87738, 87743, 87748, 87753, 87758, 87763, 87768, 87773, 87778, + 87783, 87788, 87793, 87798, 87803, 87808, 87813, 87818, 87823, 87828, + 87833, 87838, 87843, 87848, 87853, 87858, 87863, 87868, 87873, 87878, + 87883, 87888, 87893, 87898, 87903, 87908, 87913, 87918, 87923, 87928, + 87933, 87938, 87943, 87948, 87953, 87958, 87963, 87968, 87973, 87978, + 87983, 87988, 87993, 87998, 88003, 88008, 88013, 88018, 88023, 88028, + 88033, 88038, 88043, 88048, 88053, 88058, 88063, 88068, 88072, 88077, + 88082, 88087, 88092, 88097, 88102, 88107, 88112, 88117, 88122, 88127, + 88132, 88136, 88140, 88144, 88148, 88152, 88156, 88160, 88165, 88170, 0, + 0, 88175, 88180, 88184, 88188, 88192, 88196, 88200, 88204, 88208, 88212, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 88216, 88220, 88224, 88228, + 88232, 88236, 0, 0, 88241, 0, 88246, 88250, 88255, 88260, 88265, 88270, + 88275, 88280, 88285, 88290, 88295, 88299, 88304, 88309, 88314, 88319, + 88323, 88328, 88333, 88338, 88343, 88347, 88352, 88357, 88362, 88367, + 88371, 88376, 88381, 88386, 88391, 88396, 88401, 88406, 88411, 88416, + 88421, 88426, 88431, 88435, 88440, 88445, 88450, 88455, 0, 88460, 88465, + 0, 0, 0, 88470, 0, 0, 88475, 88480, 88487, 88494, 88501, 88508, 88515, + 88522, 88529, 88536, 88543, 88550, 88557, 88564, 88571, 88578, 88585, + 88592, 88599, 88606, 88613, 88620, 88627, 0, 88634, 88641, 88647, 88653, + 88659, 88666, 88673, 88681, 88689, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 88698, 88703, + 88708, 88713, 88718, 88723, 88728, 88733, 88738, 88743, 88748, 88753, + 88758, 88763, 88768, 88773, 88778, 88783, 88788, 88793, 88798, 88803, + 88808, 88812, 88817, 88822, 88828, 88832, 0, 0, 0, 88836, 88842, 88846, + 88851, 88856, 88861, 88865, 88870, 88874, 88879, 88884, 88888, 88892, + 88896, 88900, 88904, 88909, 88914, 88918, 88923, 88928, 88932, 88937, + 88942, 88947, 88952, 88957, 0, 0, 0, 0, 0, 88962, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 88967, 88970, 88974, 88978, 0, 88983, 88987, 0, + 0, 0, 0, 0, 88991, 88996, 89002, 89006, 89010, 89013, 89017, 89021, 0, + 89025, 89029, 89033, 0, 89037, 89041, 89045, 89049, 89053, 89057, 89061, + 89065, 89069, 89073, 89077, 89080, 89083, 89087, 89091, 89095, 89098, + 89101, 89104, 89108, 89112, 89116, 89120, 89124, 89128, 89131, 89135, 0, + 0, 0, 0, 89139, 89144, 89148, 0, 0, 0, 0, 89152, 89155, 89158, 89161, + 89164, 89167, 89171, 89175, 89180, 0, 0, 0, 0, 0, 0, 0, 0, 89185, 89190, + 89196, 89201, 89207, 89212, 89217, 89222, 89228, 0, 0, 0, 0, 0, 0, 0, + 89233, 89241, 89249, 89257, 89265, 89273, 89281, 89289, 89297, 89305, + 89313, 89321, 89329, 89337, 89345, 89353, 89361, 89369, 89377, 89385, + 89393, 89401, 89409, 89417, 89425, 89433, 89441, 89449, 89457, 89465, + 89472, 89480, 89488, 89492, 89497, 89502, 89507, 89512, 89517, 89522, + 89527, 89531, 89536, 89540, 89545, 89549, 89554, 89558, 89563, 89568, + 89573, 89578, 89583, 89588, 89593, 89598, 89603, 89608, 89613, 89618, + 89623, 89628, 89633, 89638, 89643, 89648, 89653, 89658, 89663, 89668, + 89673, 89678, 89683, 89688, 89693, 89698, 89703, 89708, 89713, 89718, + 89723, 89728, 89733, 89738, 89743, 89748, 0, 0, 0, 89753, 89758, 89767, + 89775, 89784, 89793, 89804, 89815, 89822, 89829, 89836, 89843, 89850, + 89857, 89864, 89871, 89878, 89885, 89892, 89899, 89906, 89913, 89920, + 89927, 89934, 89941, 89948, 89955, 89962, 0, 0, 89969, 89975, 89981, + 89987, 89993, 90000, 90007, 90015, 90023, 90030, 90037, 90044, 90051, + 90058, 90065, 90072, 90079, 90086, 90093, 90100, 90107, 90114, 90121, + 90128, 90135, 90142, 90149, 0, 0, 0, 0, 0, 90156, 90162, 90168, 90174, + 90180, 90187, 90194, 90202, 90210, 90216, 90222, 90229, 90235, 90241, + 90247, 90253, 90260, 90267, 90274, 90281, 90288, 90295, 90302, 90309, + 90316, 90323, 90330, 90337, 90344, 90351, 90358, 90365, 90372, 90379, + 90386, 90393, 90400, 90407, 90414, 90421, 90428, 90435, 90442, 90449, + 90456, 90463, 90470, 90477, 90484, 90491, 90498, 90505, 90512, 90519, + 90526, 90533, 90540, 90547, 90554, 90561, 90568, 90575, 90582, 90589, + 90596, 90603, 90610, 90617, 90624, 90631, 90638, 90645, 90652, 90659, + 90666, 90673, 90680, 90687, 90694, 90701, 90708, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 90715, 90719, 90723, 90727, 90731, 90735, 90739, 90743, 90747, 90751, + 90756, 90761, 90766, 90771, 90776, 90781, 90786, 90791, 90796, 90802, + 90808, 90814, 90821, 90828, 90835, 90842, 90849, 90856, 90863, 90870, + 90877, 0, 90884, 90888, 90892, 90896, 90899, 90903, 90906, 90910, 90913, + 90917, 90920, 90924, 90927, 90931, 90934, 90938, 90942, 90946, 90950, + 90954, 90958, 90962, 90966, 90970, 90974, 90978, 90982, 90986, 90990, + 90994, 90998, 91002, 91006, 91010, 91014, 91017, 91020, 91024, 91028, + 91032, 91035, 91038, 91041, 91045, 91049, 91053, 91057, 91061, 91064, + 91069, 91073, 91078, 91082, 91087, 91091, 91096, 91100, 91105, 91109, + 91113, 91117, 91121, 91124, 91128, 91133, 91136, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 91140, 91143, 91148, 91154, 91162, 91167, 91173, 91181, + 91187, 91193, 91197, 91201, 91208, 91217, 91224, 91233, 91239, 91248, + 91255, 91262, 91269, 91279, 91285, 91289, 91296, 91305, 91315, 91322, + 91329, 91333, 91337, 91344, 91354, 91358, 91365, 91372, 91379, 91385, + 91392, 91399, 91406, 91413, 91417, 91421, 91425, 91432, 91436, 91443, + 91450, 91464, 91473, 91477, 91481, 91485, 91492, 91496, 91500, 91504, + 91512, 91520, 91539, 91549, 91569, 91573, 91577, 91581, 91585, 91589, + 91593, 91597, 91604, 91608, 91611, 91615, 91619, 91625, 91632, 91641, + 91645, 91654, 91663, 91671, 91675, 91682, 91686, 91690, 91694, 91698, + 91709, 91718, 91727, 91736, 91745, 91757, 91766, 91775, 91784, 91792, + 91801, 91813, 91822, 91831, 91840, 91852, 91861, 91870, 91882, 91891, + 91900, 91912, 91921, 91925, 91929, 91933, 91937, 91941, 91945, 91949, + 91956, 91960, 91964, 91975, 91979, 91983, 91990, 91996, 92002, 92006, + 92013, 92017, 92021, 92025, 92029, 92033, 92037, 92043, 92051, 92055, + 92059, 92062, 92068, 92078, 92082, 92094, 92101, 92108, 92115, 92122, + 92128, 92132, 92136, 92140, 92144, 92151, 92160, 92167, 92175, 92183, + 92189, 92193, 92197, 92201, 92205, 92211, 92220, 92232, 92239, 92246, + 92255, 92266, 92272, 92281, 92290, 92297, 92306, 92313, 92320, 92330, + 92337, 92344, 92351, 92358, 92362, 92368, 92372, 92383, 92391, 92400, + 92412, 92419, 92426, 92436, 92443, 92452, 92459, 92468, 92475, 92482, + 92492, 92499, 92506, 92516, 92523, 92535, 92544, 92551, 92558, 92565, + 92574, 92584, 92597, 92604, 92614, 92624, 92631, 92640, 92653, 92660, + 92667, 92674, 92684, 92694, 92701, 92711, 92718, 92725, 92735, 92741, + 92748, 92755, 92762, 92772, 92779, 92786, 92793, 92799, 92806, 92816, + 92823, 92827, 92835, 92839, 92851, 92855, 92869, 92873, 92877, 92881, + 92885, 92891, 92898, 92906, 92910, 92914, 92918, 92922, 92929, 92933, + 92939, 92945, 92953, 92957, 92964, 92972, 92976, 92980, 92986, 92990, + 92999, 93008, 93015, 93025, 93031, 93035, 93039, 93047, 93054, 93061, + 93067, 93071, 93079, 93083, 93090, 93102, 93109, 93119, 93125, 93129, + 93138, 93145, 93154, 93158, 93162, 93169, 93173, 93177, 93181, 93185, + 93188, 93194, 93200, 93204, 93208, 93215, 93222, 93229, 93236, 93243, + 93250, 93257, 93264, 93270, 93274, 93278, 93285, 93292, 93299, 93306, + 93313, 93317, 93320, 93325, 93329, 93333, 93342, 93351, 93355, 93359, + 93365, 93371, 93388, 93394, 93398, 93407, 93411, 93415, 93422, 93430, + 93438, 93444, 93448, 93452, 93456, 93460, 93463, 93468, 93474, 93483, + 93489, 93495, 93501, 93506, 93512, 93518, 93524, 93530, 93536, 93544, + 93550, 93561, 93567, 93573, 93582, 93592, 93598, 93604, 93610, 93616, + 93622, 93628, 93634, 93640, 93646, 93652, 93661, 93670, 93679, 93685, + 93694, 93700, 93706, 93712, 93718, 93724, 93730, 93736, 93742, 93748, + 93754, 93760, 93766, 93772, 93777, 93783, 93789, 93797, 93803, 93809, + 93813, 93821, 93825, 93829, 93833, 93837, 93841, 93848, 93852, 93861, + 93865, 93872, 93880, 93884, 93888, 93892, 93905, 93921, 93925, 93929, + 93936, 93942, 93949, 93953, 93957, 93961, 93965, 93969, 93976, 93980, + 93998, 94002, 94006, 94013, 94017, 94021, 94027, 94031, 94035, 94043, + 94047, 94051, 94055, 94059, 94065, 94076, 94085, 94094, 94101, 94108, + 94119, 94126, 94133, 94140, 94147, 94154, 94161, 94168, 94178, 94184, + 94191, 94201, 94210, 94217, 94226, 94236, 94243, 94250, 94257, 94264, + 94276, 94283, 94290, 94297, 94304, 94311, 94321, 94328, 94335, 94345, + 94358, 94370, 94377, 94387, 94394, 94401, 94408, 94422, 94428, 94436, + 94446, 94456, 94463, 94470, 94476, 94480, 94487, 94497, 94503, 94516, + 94520, 94524, 94531, 94535, 94542, 94552, 94556, 94560, 94564, 94568, + 94572, 94579, 94583, 94590, 94597, 94604, 94613, 94622, 94632, 94639, + 94646, 94653, 94663, 94670, 94680, 94687, 94697, 94704, 94711, 94721, + 94731, 94738, 94744, 94752, 94760, 94766, 94772, 94776, 94780, 94787, + 94795, 94801, 94805, 94809, 94813, 94820, 94832, 94835, 94842, 94848, + 94852, 94856, 94860, 94864, 94868, 94872, 94876, 94880, 94884, 94888, + 94895, 94899, 94905, 94909, 94913, 94917, 94923, 94930, 94937, 94944, + 94955, 94963, 94967, 94973, 94982, 94989, 94995, 94998, 95002, 95006, + 95012, 95021, 95029, 95033, 95039, 95043, 95047, 95051, 95057, 95064, + 95070, 95074, 95080, 95084, 95088, 95097, 95109, 95113, 95120, 95127, + 95137, 95144, 95156, 95163, 95170, 95177, 95188, 95198, 95211, 95221, + 95228, 95232, 95236, 95240, 95244, 95253, 95262, 95271, 95288, 95297, + 95303, 95310, 95318, 95331, 95335, 95344, 95353, 95362, 95371, 95382, + 95391, 95400, 95409, 95418, 95427, 95436, 95446, 95449, 95453, 95457, + 95461, 95465, 95469, 95475, 95482, 95489, 95496, 95502, 95508, 95515, + 95521, 95528, 95536, 95540, 95547, 95554, 95561, 95569, 95572, 95576, + 95580, 95584, 95588, 95594, 95598, 95604, 95611, 95618, 95624, 95631, + 95638, 95645, 95652, 95659, 95666, 95673, 95680, 95687, 95694, 95701, + 95708, 95715, 95722, 95728, 95732, 95741, 95745, 95749, 95753, 95757, + 95763, 95770, 95777, 95784, 95791, 95798, 95804, 95812, 95816, 95820, + 95824, 95828, 95834, 95851, 95868, 95872, 95876, 95880, 95884, 95888, + 95892, 95898, 95905, 95909, 95915, 95922, 95929, 95936, 95943, 95950, + 95959, 95966, 95973, 95980, 95987, 95991, 95995, 96001, 96013, 96017, + 96021, 96030, 96034, 96038, 96042, 96048, 96052, 96056, 96065, 96069, + 96073, 96077, 96084, 96088, 96092, 96096, 96100, 96104, 96108, 96112, + 96116, 96122, 96129, 96136, 96142, 96146, 96163, 96169, 96173, 96179, + 96185, 96191, 96197, 96203, 96209, 96213, 96217, 96221, 96227, 96231, + 96237, 96241, 96245, 96252, 96259, 96276, 96280, 96284, 96288, 96292, + 96296, 96308, 96311, 96316, 96321, 96336, 96346, 96357, 96361, 96365, + 96369, 96375, 96382, 96389, 96399, 96411, 96417, 96423, 96432, 96436, + 96440, 96447, 96457, 96464, 96470, 96474, 96478, 96485, 96491, 96495, + 96501, 96505, 96513, 96519, 96523, 96531, 96539, 96546, 96552, 96559, + 96566, 96576, 96586, 96590, 96594, 96598, 96602, 96608, 96615, 96621, + 96628, 96635, 96642, 96651, 96658, 96665, 96671, 96678, 96685, 96692, + 96699, 96706, 96713, 96719, 96726, 96733, 96740, 96749, 96756, 96763, + 96767, 96773, 96777, 96783, 96790, 96797, 96804, 96808, 96812, 96816, + 96820, 96824, 96831, 96835, 96839, 96845, 96853, 96857, 96861, 96865, + 96869, 96876, 96880, 96884, 96892, 96896, 96900, 96904, 96908, 96914, + 96918, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 96922, 96928, + 96934, 96941, 96948, 96955, 96962, 96969, 96976, 96982, 96989, 96996, + 97003, 97010, 97017, 97024, 97030, 97036, 97042, 97048, 97054, 97060, + 97066, 97072, 97078, 97085, 97092, 97099, 97106, 97113, 97120, 97126, + 97132, 97138, 97145, 97152, 97158, 97164, 97173, 97180, 97187, 97194, + 97201, 97208, 97215, 97221, 97227, 97233, 97242, 97249, 97256, 97267, + 97278, 97284, 97290, 97296, 97305, 97312, 97319, 97329, 97339, 97350, + 97361, 97373, 97386, 97397, 97408, 97420, 97433, 97444, 97455, 97466, + 97477, 97488, 97500, 97508, 97516, 97525, 97534, 97543, 97549, 97555, + 97561, 97568, 97578, 97585, 97595, 97600, 97605, 97611, 97617, 97625, + 97633, 97642, 97653, 97664, 97672, 97680, 97689, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 97698, 97709, 97716, 97724, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 97732, 97736, 97740, 97744, 97748, 97752, 97756, 97760, 97764, + 97768, 97772, 97776, 97780, 97784, 97788, 97792, 97796, 97800, 97804, + 97808, 97812, 97816, 97820, 97824, 97828, 97832, 97836, 97840, 97844, + 97848, 97852, 97856, 97860, 97864, 97868, 97872, 97876, 97880, 97884, + 97888, 97892, 97896, 97900, 97904, 97908, 97912, 97916, 97920, 97924, + 97928, 97932, 97936, 97940, 97944, 97948, 97952, 97956, 97960, 97964, + 97968, 97972, 97976, 97980, 97984, 97988, 97992, 97996, 98000, 98004, + 98008, 98012, 98016, 98020, 98024, 98028, 98032, 98036, 98040, 98044, + 98048, 98052, 98056, 98060, 98064, 98068, 98072, 98076, 98080, 98084, + 98088, 98092, 98096, 98100, 98104, 98108, 98112, 98116, 98120, 98124, + 98128, 98132, 98136, 98140, 98144, 98148, 98152, 98156, 98160, 98164, + 98168, 98172, 98176, 98180, 98184, 98188, 98192, 98196, 98200, 98204, + 98208, 98212, 98216, 98220, 98224, 98228, 98232, 98236, 98240, 98244, + 98248, 98252, 98256, 98260, 98264, 98268, 98272, 98276, 98280, 98284, + 98288, 98292, 98296, 98300, 98304, 98308, 98312, 98316, 98320, 98324, + 98328, 98332, 98336, 98340, 98344, 98348, 98352, 98356, 98360, 98364, + 98368, 98372, 98376, 98380, 98384, 98388, 98392, 98396, 98400, 98404, + 98408, 98412, 98416, 98420, 98424, 98428, 98432, 98436, 98440, 98444, + 98448, 98452, 98456, 98460, 98464, 98468, 98472, 98476, 98480, 98484, + 98488, 98492, 98496, 98500, 98504, 98508, 98512, 98516, 98520, 98524, + 98528, 98532, 98536, 98540, 98544, 98548, 98552, 98556, 98560, 98564, + 98568, 98572, 98576, 98580, 98584, 98588, 98592, 98596, 98600, 98604, + 98608, 98612, 98616, 98620, 98624, 98628, 98632, 98636, 98640, 98644, + 98648, 98652, 98656, 98660, 98664, 98668, 98672, 98676, 98680, 98684, + 98688, 98692, 98696, 98700, 98704, 98708, 98712, 98716, 98720, 98724, + 98728, 98732, 98736, 98740, 98744, 98748, 98752, 98756, 98760, 98764, + 98768, 98772, 98776, 98780, 98784, 98788, 98792, 98796, 98800, 98804, + 98808, 98812, 98816, 98820, 98824, 98828, 98832, 98836, 98840, 98844, + 98848, 98852, 98856, 98860, 98864, 98868, 98872, 98876, 98880, 98884, + 98888, 98892, 98896, 98900, 98904, 98908, 98912, 98916, 98920, 98924, + 98928, 98932, 98936, 98940, 98944, 98948, 98952, 98956, 98960, 98964, + 98968, 98972, 98976, 98980, 98984, 98988, 98992, 98996, 99000, 99004, + 99008, 99012, 99016, 99020, 99024, 99028, 99032, 99036, 99040, 99044, + 99048, 99052, 99056, 99060, 99064, 99068, 99072, 99076, 99080, 99084, + 99088, 99092, 99096, 99100, 99104, 99108, 99112, 99116, 99120, 99124, + 99128, 99132, 99136, 99140, 99144, 99148, 99152, 99156, 99160, 99164, + 99168, 99172, 99176, 99180, 99184, 99188, 99192, 99196, 99200, 99204, + 99208, 99212, 99216, 99220, 99224, 99228, 99232, 99236, 99240, 99244, + 99248, 99252, 99256, 99260, 99264, 99268, 99272, 99276, 99280, 99284, + 99288, 99292, 99296, 99300, 99304, 99308, 99312, 99316, 99320, 99324, + 99328, 99332, 99336, 99340, 99344, 99348, 99352, 99356, 99360, 99364, + 99368, 99372, 99376, 99380, 99384, 99388, 99392, 99396, 99400, 99404, + 99408, 99412, 99416, 99420, 99424, 99428, 99432, 99436, 99440, 99444, + 99448, 99452, 99456, 99460, 99464, 99468, 99472, 99476, 99480, 99484, + 99488, 99492, 99496, 99500, 99504, 99508, 99512, 99516, 99520, 99524, + 99528, 99532, 99536, 99540, 99544, 99548, 99552, 99556, 99560, 99564, + 99568, 99572, 99576, 99580, 99584, 99588, 99592, 99596, 99600, 99604, + 99608, 99612, 99616, 99620, 99624, 99628, 99632, 99636, 99640, 99644, + 99648, 99652, 99656, 99660, 99664, 99668, 99672, 99676, 99680, 99684, + 99688, 99692, 99696, 99700, 99704, 99708, 99712, 99716, 99720, 99724, + 99728, 99732, 99736, 99740, 99744, 99748, 99752, 99756, 99760, 99764, + 99768, 99772, 99776, 99780, 99784, 99788, 99792, 99796, 99800, 99804, + 99808, 99812, 99816, 99820, 99824, 99828, 99832, 99836, 99840, 99844, + 99848, 99852, 99856, 99860, 99864, 99868, 99872, 99876, 99880, 99884, + 99888, 99892, 99896, 99900, 99904, 99908, 99912, 99916, 99920, 99924, + 99928, 99932, 99936, 99940, 99944, 99948, 99952, 99956, 99960, 99964, + 99968, 99972, 99976, 99980, 99984, 99988, 99992, 99996, 100000, 100004, + 100008, 100012, 100016, 100020, 100024, 100028, 100032, 100036, 100040, + 100044, 100048, 100052, 100056, 100060, 100064, 100068, 100072, 100076, + 100080, 100084, 100088, 100092, 100096, 100100, 100104, 100108, 100112, + 100116, 100120, 100124, 100128, 100132, 100136, 100140, 100144, 100148, + 100152, 100156, 100160, 100164, 100168, 100172, 100176, 100180, 100184, + 100188, 100192, 100196, 100200, 100204, 100208, 100212, 100216, 100220, + 100224, 100228, 100232, 100236, 100240, 100244, 100248, 100252, 100256, + 100260, 100264, 100268, 100272, 100276, 100280, 100284, 100288, 100292, + 100296, 100300, 100304, 100308, 100312, 100316, 100320, 100324, 100328, + 100332, 100336, 100340, 100344, 100348, 100352, 100356, 100360, 100364, + 100368, 100372, 100376, 100380, 100384, 100388, 100392, 100396, 100400, + 100404, 100408, 100412, 100416, 100420, 100424, 100428, 100432, 100436, + 100440, 100444, 100448, 100452, 100456, 100460, 100464, 100468, 100472, + 100476, 100480, 100484, 100488, 100492, 100496, 100500, 100504, 100508, + 100512, 100516, 100520, 100524, 100528, 100532, 100536, 100540, 100544, + 100548, 100552, 100556, 100560, 100564, 100568, 100572, 100576, 100580, + 100584, 100588, 100592, 100596, 100600, 100604, 100608, 100612, 100616, + 100620, 100624, 100628, 100632, 100636, 100640, 100644, 100648, 100652, + 100656, 100660, 100664, 100668, 100672, 100676, 100680, 100684, 100688, + 100692, 100696, 100700, 100704, 100708, 100712, 100716, 100720, 100724, + 100728, 100732, 100736, 100740, 100744, 100748, 100752, 100756, 100760, + 100764, 100768, 100772, 100776, 100780, 100784, 100788, 100792, 100796, + 100800, 100804, 100808, 100812, 100816, 100820, 100824, 100828, 100832, + 100836, 100840, 100844, 100848, 100852, 100856, 100860, 100864, 100868, + 100872, 100876, 100880, 100884, 100888, 100892, 100896, 100900, 100904, + 100908, 100912, 100916, 100920, 100924, 100928, 100932, 100936, 100940, + 100944, 100948, 100952, 100956, 100960, 100964, 100968, 100972, 100976, + 100980, 100984, 100988, 100992, 100996, 101000, 101004, 101008, 101012, + 101016, 101020, 101024, 101028, 101032, 101036, 101040, 101044, 101048, + 101052, 101056, 101060, 101064, 101068, 101072, 101076, 101080, 101084, + 101088, 101092, 101096, 101100, 101104, 101108, 101112, 101116, 101120, + 101124, 101128, 101132, 101136, 101140, 101144, 101148, 101152, 101156, + 101160, 101164, 101168, 101172, 101176, 101180, 101184, 101188, 101192, + 101196, 101200, 101204, 101208, 101212, 101216, 101220, 101224, 101228, + 101232, 101236, 101240, 101244, 101248, 101252, 101256, 101260, 101264, + 101268, 101272, 101276, 101280, 101284, 101288, 101292, 101296, 101300, + 101304, 101308, 101312, 101316, 101320, 101324, 101328, 101332, 101336, + 101340, 101344, 101348, 101352, 101356, 101360, 101364, 101368, 101372, + 101376, 101380, 101384, 101388, 101392, 101396, 101400, 101404, 101408, + 101412, 101416, 101420, 101424, 101428, 101432, 101436, 101440, 101444, + 101448, 101452, 101456, 101460, 101464, 101468, 101472, 101476, 101480, + 101484, 101488, 101492, 101496, 101500, 101504, 101508, 101512, 101516, + 101520, 101524, 101528, 101532, 101536, 101540, 101544, 101548, 101552, + 101556, 101560, 101564, 101568, 101572, 101576, 101580, 101584, 101588, + 101592, 101596, 101600, 101604, 101608, 101612, 101616, 101620, 101624, + 101628, 101632, 101636, 101640, 101644, 101648, 101652, 101656, 101660, + 101664, 101668, 101672, 101676, 101680, 101684, 101688, 101692, 101696, + 101700, 101704, 101708, 101712, 101716, 101720, 101724, 101728, 101732, + 101736, 101740, 101744, 101748, 101752, 101756, 101760, 101764, 101768, + 101772, 101776, 101780, 101784, 101788, 101792, 101796, 101800, 101804, + 101808, 101812, 101816, 101820, 101824, 101828, 101832, 101836, 101840, + 101844, 101848, 101852, 101856, 101860, 101864, 101868, 101872, 101876, + 101880, 101884, 101888, 101892, 101896, 101900, 101904, 101908, 101912, + 101916, 101920, 101924, 101928, 101932, 101936, 101940, 101944, 101948, + 101952, 101956, 101960, 101964, 101968, 101972, 101976, 101980, 101984, + 101988, 101992, 101996, 102000, 102004, 102008, 102012, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 102016, 102021, 102026, 102031, 102038, 102045, 102052, 102059, + 102064, 102069, 102074, 102079, 102086, 102091, 102098, 102105, 102110, + 102115, 102120, 102127, 102132, 102137, 102144, 102151, 102156, 102161, + 102166, 102173, 102180, 102187, 102192, 102197, 102204, 102211, 102218, + 102225, 102230, 102235, 102240, 102247, 102252, 102257, 102262, 102269, + 102278, 102285, 102290, 102295, 102300, 102305, 102310, 102315, 102324, + 102331, 102336, 102343, 102350, 102355, 102360, 102365, 102372, 102377, + 102384, 102391, 102396, 102401, 102406, 102413, 102420, 102425, 102430, + 102437, 102444, 102451, 102456, 102461, 102466, 102471, 102478, 102487, + 102496, 102501, 102508, 102517, 102522, 102527, 102532, 102537, 102544, + 102551, 102558, 102565, 102570, 102575, 102580, 102587, 102594, 102601, + 102606, 102611, 102618, 102623, 102630, 102635, 102642, 102647, 102654, + 102661, 102666, 102671, 102676, 102681, 102686, 102691, 102696, 102701, + 102706, 102713, 102720, 102727, 102734, 102741, 102750, 102755, 102760, + 102767, 102774, 102779, 102786, 102793, 102800, 102807, 102814, 102821, + 102826, 102831, 102836, 102841, 102846, 102855, 102864, 102873, 102882, + 102891, 102900, 102909, 102918, 102923, 102934, 102945, 102954, 102959, + 102964, 102969, 102974, 102983, 102990, 102997, 103004, 103011, 103018, + 103025, 103034, 103043, 103054, 103063, 103074, 103083, 103090, 103099, + 103110, 103119, 103128, 103137, 103146, 103153, 103160, 103167, 103176, + 103185, 103196, 103205, 103214, 103225, 103230, 103235, 103246, 103254, + 103263, 103272, 103281, 103292, 103301, 103310, 103321, 103332, 103343, + 103354, 103365, 103376, 103383, 103390, 103397, 103404, 103415, 103424, + 103431, 103438, 103445, 103456, 103467, 103478, 103489, 103500, 103511, + 103522, 103533, 103540, 103547, 103556, 103565, 103572, 103579, 103586, + 103595, 103604, 103613, 103620, 103629, 103638, 103647, 103654, 103661, + 103666, 103672, 103679, 103686, 103693, 103700, 103707, 103714, 103723, + 103732, 103741, 103750, 103757, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 103766, + 103772, 103777, 103782, 103789, 103795, 103801, 103807, 103813, 103819, + 103825, 103831, 103835, 103839, 103845, 103851, 103857, 103861, 103866, + 103871, 103875, 103879, 103882, 103888, 103894, 103900, 103906, 103912, + 103918, 103924, 103930, 103936, 103946, 103956, 103962, 103968, 103978, + 103988, 103994, 0, 0, 104000, 104008, 104013, 104018, 104024, 104030, + 104036, 104042, 104048, 104054, 104061, 104068, 104074, 104080, 104086, + 104092, 104098, 104104, 104110, 104116, 104121, 104127, 104133, 104139, + 104145, 104151, 104160, 104166, 104171, 104179, 104186, 104193, 104202, + 104211, 104220, 104229, 104238, 104247, 104256, 104265, 104275, 104285, + 104293, 104301, 104310, 104319, 104325, 104331, 104337, 104343, 104351, + 104359, 104363, 104369, 104374, 104380, 104386, 104392, 104398, 104404, + 104413, 104418, 104425, 104430, 104435, 104440, 104446, 104452, 104458, + 104465, 104470, 104475, 104480, 104485, 104490, 104496, 104502, 104508, + 104514, 104520, 104526, 104532, 104538, 104543, 104548, 104553, 104558, + 104563, 104568, 104573, 104578, 104584, 104590, 104595, 104600, 104605, + 104610, 104615, 104621, 104628, 104632, 104636, 104640, 104644, 104648, + 104652, 104656, 104660, 104668, 104678, 104682, 104686, 104692, 104698, + 104704, 104710, 104716, 104722, 104728, 104734, 104740, 104746, 104752, + 104758, 104764, 104770, 104774, 104778, 104785, 104791, 104797, 104803, + 104808, 104815, 104820, 104826, 104832, 104838, 104844, 104849, 104853, + 104859, 104863, 104867, 104871, 104877, 104883, 104887, 104893, 104899, + 104905, 104911, 104917, 104925, 104933, 104939, 104945, 104951, 104957, + 104969, 104981, 104995, 105007, 105019, 105033, 105047, 105061, 105065, + 105073, 105081, 105086, 105090, 105094, 105098, 105102, 105106, 105110, + 105114, 105120, 105126, 105132, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 105138, + 105144, 105150, 105156, 105162, 105168, 105174, 105180, 105186, 105192, + 105198, 105204, 105210, 105216, 105222, 105228, 105234, 105240, 105246, + 105252, 105258, 105264, 105270, 105276, 105282, 105288, 105294, 105300, + 105306, 105312, 105318, 105324, 105330, 105336, 105342, 105348, 105354, + 105360, 105366, 105372, 105378, 105384, 105390, 105396, 105402, 105408, + 105414, 105420, 105426, 105432, 105438, 105444, 105450, 105456, 105462, + 105468, 105474, 105480, 105486, 105492, 105498, 105504, 105510, 105516, + 105522, 105528, 105534, 105539, 105544, 105549, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 105553, 105558, 105565, 105572, 105579, 105586, 105591, 105595, + 105601, 105605, 105609, 105615, 105619, 105623, 105627, 105633, 105640, + 105644, 105648, 105652, 105656, 105660, 105664, 105670, 105674, 105678, + 105682, 105686, 105690, 105694, 105698, 105702, 105706, 105710, 105714, + 105718, 105723, 105727, 105731, 105735, 105739, 105743, 105747, 105751, + 105755, 105759, 105766, 105770, 105777, 105781, 105785, 105789, 105793, + 105797, 105801, 105805, 105812, 105816, 105820, 105824, 105828, 105832, + 105838, 105842, 105848, 105852, 105856, 105860, 105864, 105868, 105872, + 105876, 105880, 105884, 105888, 105892, 105896, 105900, 105904, 105908, + 105912, 105916, 105920, 105924, 105932, 105936, 105940, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 105944, 105952, 105960, 105968, 105976, 105984, 105992, 106000, + 106008, 106016, 106024, 106032, 106040, 106048, 106056, 106064, 106072, + 106080, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 106088, 106092, 106097, + 106102, 106107, 106111, 106116, 106121, 106126, 106130, 106135, 106140, + 106144, 106148, 106152, 106156, 106161, 106166, 106170, 106174, 106179, + 106183, 106188, 106193, 106198, 106203, 106208, 106212, 106217, 106222, + 106227, 106231, 106236, 106241, 106246, 106250, 106255, 106260, 106264, + 106268, 106272, 106276, 106281, 106286, 106290, 106294, 106299, 106303, + 106308, 106313, 106318, 106323, 106328, 106332, 106337, 106342, 106347, + 106351, 106356, 106361, 106366, 106370, 106375, 106380, 106384, 106388, + 106392, 106396, 106401, 106406, 106410, 106414, 106419, 106423, 106428, + 106433, 106438, 106443, 106448, 106452, 106457, 106462, 106467, 106471, + 106476, 0, 106481, 106485, 106490, 106495, 106499, 106503, 106507, + 106511, 106516, 106521, 106525, 106529, 106534, 106538, 106543, 106548, + 106553, 106558, 106563, 106568, 106574, 106580, 106586, 106591, 106597, + 106603, 106609, 106614, 106620, 106626, 106631, 106636, 106641, 106646, + 106652, 106658, 106663, 106668, 106674, 106679, 106685, 106691, 106697, + 106703, 106709, 106714, 106720, 106726, 106732, 106737, 106743, 106749, + 106755, 106760, 106766, 106772, 106777, 106782, 106787, 106792, 106798, + 106804, 106809, 106814, 106820, 106825, 106831, 106837, 106843, 106849, + 106855, 0, 106859, 106864, 0, 0, 106869, 0, 0, 106874, 106879, 0, 0, + 106884, 106888, 106892, 106897, 0, 106902, 106906, 106911, 106915, + 106920, 106925, 106930, 106935, 106940, 106944, 106949, 106954, 0, + 106959, 0, 106964, 106969, 106973, 106978, 106983, 106987, 106991, 0, + 106995, 107000, 107005, 107009, 107013, 107018, 107022, 107027, 107032, + 107037, 107042, 107047, 107052, 107058, 107064, 107070, 107075, 107081, + 107087, 107093, 107098, 107104, 107110, 107115, 107120, 107125, 107130, + 107136, 107142, 107147, 107152, 107158, 107163, 107169, 107175, 107181, + 107187, 107193, 107198, 107204, 107210, 107216, 107221, 107227, 107233, + 107239, 107244, 107250, 107256, 107261, 107266, 107271, 107276, 107282, + 107288, 107293, 107298, 107304, 107309, 107315, 107321, 107327, 107333, + 107339, 107343, 0, 107348, 107353, 107357, 107362, 0, 0, 107367, 107372, + 107377, 107381, 107385, 107389, 107393, 107398, 0, 107403, 107407, + 107412, 107416, 107421, 107426, 107431, 0, 107436, 107440, 107445, + 107450, 107455, 107459, 107464, 107469, 107474, 107478, 107483, 107488, + 107492, 107496, 107500, 107504, 107509, 107514, 107518, 107522, 107527, + 107531, 107536, 107541, 107546, 107551, 107556, 107560, 0, 107565, + 107570, 107574, 107579, 0, 107584, 107588, 107593, 107598, 107602, 0, + 107606, 0, 0, 0, 107610, 107614, 107619, 107623, 107628, 107633, 107638, + 0, 107643, 107647, 107652, 107657, 107662, 107666, 107671, 107676, + 107681, 107685, 107690, 107695, 107699, 107703, 107707, 107711, 107716, + 107721, 107725, 107729, 107734, 107738, 107743, 107748, 107753, 107758, + 107763, 107768, 107774, 107780, 107786, 107791, 107797, 107803, 107809, + 107814, 107820, 107826, 107831, 107836, 107841, 107846, 107852, 107858, + 107863, 107868, 107874, 107879, 107885, 107891, 107897, 107903, 107909, + 107914, 107920, 107926, 107932, 107937, 107943, 107949, 107955, 107960, + 107966, 107972, 107977, 107982, 107987, 107992, 107998, 108004, 108009, + 108014, 108020, 108025, 108031, 108037, 108043, 108049, 108055, 108059, + 108064, 108069, 108074, 108078, 108083, 108088, 108093, 108097, 108102, + 108107, 108111, 108115, 108119, 108123, 108128, 108133, 108137, 108141, + 108146, 108150, 108155, 108160, 108165, 108170, 108175, 108179, 108184, + 108189, 108194, 108198, 108203, 108208, 108213, 108217, 108222, 108227, + 108231, 108235, 108239, 108243, 108248, 108253, 108257, 108261, 108266, + 108270, 108275, 108280, 108285, 108290, 108295, 108300, 108306, 108312, + 108318, 108323, 108329, 108335, 108341, 108346, 108352, 108358, 108363, + 108368, 108373, 108378, 108384, 108390, 108395, 108400, 108406, 108411, + 108417, 108423, 108429, 108435, 108441, 108446, 108452, 108458, 108464, + 108469, 108475, 108481, 108487, 108492, 108498, 108504, 108509, 108514, + 108519, 108524, 108530, 108536, 108541, 108546, 108552, 108557, 108563, + 108569, 108575, 108581, 108587, 108592, 108598, 108604, 108610, 108615, + 108621, 108627, 108633, 108638, 108644, 108650, 108655, 108660, 108665, + 108670, 108676, 108682, 108687, 108692, 108698, 108703, 108709, 108715, + 108721, 108727, 108733, 108738, 108744, 108750, 108756, 108761, 108767, + 108773, 108779, 108784, 108790, 108796, 108801, 108806, 108811, 108816, + 108822, 108828, 108833, 108838, 108844, 108849, 108855, 108861, 108867, + 108873, 108879, 108885, 108892, 108899, 108906, 108912, 108919, 108926, + 108933, 108939, 108946, 108953, 108959, 108965, 108971, 108977, 108984, + 108991, 108997, 109003, 109010, 109016, 109023, 109030, 109037, 109044, + 109051, 109057, 109064, 109071, 109078, 109084, 109091, 109098, 109105, + 109111, 109118, 109125, 109131, 109137, 109143, 109149, 109156, 109163, + 109169, 109175, 109182, 109188, 109195, 109202, 109209, 109216, 109223, + 109227, 109232, 109237, 109242, 109246, 109251, 109256, 109261, 109265, + 109270, 109275, 109279, 109283, 109287, 109291, 109296, 109301, 109305, + 109309, 109314, 109318, 109323, 109328, 109333, 109338, 109343, 109347, + 109352, 109357, 109362, 109366, 109371, 109376, 109381, 109385, 109390, + 109395, 109399, 109403, 109407, 109411, 109416, 109421, 109425, 109429, + 109434, 109438, 109443, 109448, 109453, 109458, 109463, 109469, 0, 0, + 109476, 109481, 109486, 109491, 109496, 109501, 109506, 109511, 109516, + 109521, 109526, 109531, 109536, 109541, 109546, 109551, 109556, 109561, + 109567, 109572, 109577, 109582, 109587, 109592, 109597, 109602, 109606, + 109611, 109616, 109621, 109626, 109631, 109636, 109641, 109646, 109651, + 109656, 109661, 109666, 109671, 109676, 109681, 109686, 109691, 109697, + 109702, 109707, 109712, 109717, 109722, 109727, 109732, 109738, 109743, + 109748, 109753, 109758, 109763, 109768, 109773, 109778, 109783, 109788, + 109793, 109798, 109803, 109808, 109813, 109818, 109823, 109828, 109833, + 109838, 109843, 109848, 109853, 109859, 109864, 109869, 109874, 109879, + 109884, 109889, 109894, 109898, 109903, 109908, 109913, 109918, 109923, + 109928, 109933, 109938, 109943, 109948, 109953, 109958, 109963, 109968, + 109973, 109978, 109983, 109989, 109994, 109999, 110004, 110009, 110014, + 110019, 110024, 110030, 110035, 110040, 110045, 110050, 110055, 110060, + 110066, 110072, 110078, 110084, 110090, 110096, 110102, 110108, 110114, + 110120, 110126, 110132, 110138, 110144, 110150, 110156, 110162, 110169, + 110175, 110181, 110187, 110193, 110199, 110205, 110211, 110216, 110222, + 110228, 110234, 110240, 110246, 110252, 110258, 110264, 110270, 110276, + 110282, 110288, 110294, 110300, 110306, 110312, 110318, 110325, 110331, + 110337, 110343, 110349, 110355, 110361, 110367, 110374, 110380, 110386, + 110392, 110398, 110404, 110410, 110416, 110422, 110428, 110434, 110440, + 110446, 110452, 110458, 110464, 110470, 110476, 110482, 110488, 110494, + 110500, 110506, 110512, 110519, 110525, 110531, 110537, 110543, 110549, + 110555, 110561, 110566, 110572, 110578, 110584, 110590, 110596, 110602, + 110608, 110614, 110620, 110626, 110632, 110638, 110644, 110650, 110656, + 110662, 110668, 110675, 110681, 110687, 110693, 110699, 110705, 110711, + 110717, 110724, 110730, 110736, 110742, 110748, 110754, 110760, 110767, + 110774, 110781, 110788, 110795, 110802, 110809, 110816, 110823, 110830, + 110837, 110844, 110851, 110858, 110865, 110872, 110879, 110887, 110894, + 110901, 110908, 110915, 110922, 110929, 110936, 110942, 110949, 110956, + 110963, 110970, 110977, 110984, 110991, 110998, 111005, 111012, 111019, + 111026, 111033, 111040, 111047, 111054, 111061, 111069, 111076, 111083, + 111090, 111097, 111104, 111111, 111118, 111126, 111133, 111140, 111147, + 111154, 111161, 111168, 111173, 0, 0, 111178, 111183, 111187, 111191, + 111195, 111199, 111203, 111207, 111211, 111215, 111219, 111224, 111228, + 111232, 111236, 111240, 111244, 111248, 111252, 111256, 111260, 111265, + 111269, 111273, 111277, 111281, 111285, 111289, 111293, 111297, 111301, + 111307, 111312, 111317, 111322, 111327, 111332, 111337, 111342, 111347, + 111352, 111357, 111361, 111365, 111369, 111373, 111377, 111381, 111385, + 111389, 111393, 111400, 111407, 111414, 111421, 111428, 111435, 111441, + 111448, 111455, 111462, 111470, 111478, 111486, 111494, 111502, 111510, + 111517, 111524, 111531, 111539, 111547, 111555, 111563, 111571, 111579, + 111586, 111593, 111600, 111608, 111616, 111624, 111632, 111640, 111648, + 111653, 111658, 111663, 111668, 111673, 111678, 111683, 111688, 111693, + 0, 0, 0, 0, 111698, 111703, 111707, 111711, 111715, 111719, 111723, + 111727, 111731, 111735, 111739, 111743, 111747, 111751, 111755, 111759, + 111763, 111767, 111771, 111775, 111779, 111783, 111787, 111791, 111795, + 111799, 111803, 111807, 111811, 111815, 111819, 111823, 111827, 111831, + 111835, 111839, 111843, 111847, 111851, 111855, 111859, 111863, 111867, + 111871, 111875, 111879, 111883, 111887, 111891, 111895, 111899, 111904, + 111908, 111912, 111916, 111920, 111924, 111928, 111932, 111936, 111940, + 111944, 111948, 111952, 111956, 111960, 111964, 111968, 111972, 111976, + 111980, 111984, 111988, 111992, 111996, 112000, 112004, 112008, 112012, + 112016, 112020, 112024, 112028, 112032, 112036, 112040, 112044, 112048, + 112052, 112056, 112060, 112064, 112068, 112072, 112076, 112080, 112084, + 112088, 112092, 112096, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 112100, + 112107, 112112, 112116, 112120, 112124, 112129, 112134, 112139, 112144, + 112149, 0, 0, 0, 0, 0, 112154, 112159, 112165, 112171, 112177, 112182, + 112188, 112194, 112200, 112205, 112211, 112217, 112222, 112227, 112232, + 112237, 112243, 112249, 112254, 112259, 112265, 112270, 112276, 112282, + 112288, 112294, 112300, 112310, 112317, 112323, 112326, 0, 0, 112329, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 112335, 0, 112340, 0, 0, 112346, 0, 0, 0, + 112351, 0, 0, 0, 112357, 112360, 112363, 112366, 112369, 0, 0, 0, 0, 0, + 0, 0, 0, 112372, 0, 0, 0, 0, 0, 0, 0, 112380, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 112388, 0, 112396, + 112403, 0, 0, 112410, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 112418, 112428, + 112433, 112437, 0, 0, 112442, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 112445, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 112449, 112455, + 112461, 112467, 112471, 112477, 112483, 112489, 112495, 112501, 112507, + 112513, 112519, 112525, 112531, 112537, 112543, 112549, 112555, 112561, + 112567, 112573, 112579, 112585, 112591, 112597, 112603, 112609, 112615, + 112621, 112627, 112633, 112639, 112645, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 112651, 112662, 112673, 112684, 112695, 112706, 112717, 112728, + 112739, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 112750, 112754, 112758, 112762, 112766, + 112770, 112774, 112778, 112782, 112786, 112790, 112794, 112798, 112802, + 112806, 112810, 112814, 112818, 112822, 112826, 112830, 112834, 112838, + 112842, 112846, 112850, 112854, 112858, 112862, 112866, 112870, 112874, + 112878, 112882, 112886, 112890, 112894, 112898, 112902, 112906, 112910, + 112914, 112918, 112922, 112926, 112930, 112934, 112938, 112942, 112946, + 112950, 112954, 112958, 112962, 112966, 112970, 112974, 112978, 112982, + 112986, 112990, 112994, 112998, 113002, 113006, 113010, 113014, 113018, + 113022, 113026, 113030, 113034, 113038, 113042, 113046, 113050, 113054, + 113058, 113062, 113066, 113070, 113074, 113078, 113082, 113086, 113090, + 113094, 113098, 113102, 113106, 113110, 113114, 113118, 113122, 113126, + 113130, 113134, 113138, 113142, 113146, 113150, 113154, 113158, 113162, + 113166, 113170, 113174, 113178, 113182, 113186, 113190, 113194, 113198, + 113202, 113206, 113210, 113214, 113218, 113222, 113226, 113230, 113234, + 113238, 113242, 113246, 113250, 113254, 113258, 113262, 113266, 113270, + 113274, 113278, 113282, 113286, 113290, 113294, 113298, 113302, 113306, + 113310, 113314, 113318, 113322, 113326, 113330, 113334, 113338, 113342, + 113346, 113350, 113354, 113358, 113362, 113366, 113370, 113374, 113378, + 113382, 113386, 113390, 113394, 113398, 113402, 113406, 113410, 113414, + 113418, 113422, 113426, 113430, 113434, 113438, 113442, 113446, 113450, + 113454, 113458, 113462, 113466, 113470, 113474, 113478, 113482, 113486, + 113490, 113494, 113498, 113502, 113506, 113510, 113514, 113518, 113522, + 113526, 113530, 113534, 113538, 113542, 113546, 113550, 113554, 113558, + 113562, 113566, 113570, 113574, 113578, 113582, 113586, 113590, 113594, + 113598, 113602, 113606, 113610, 113614, 113618, 113622, 113626, 113630, + 113634, 113638, 113642, 113646, 113650, 113654, 113658, 113662, 113666, + 113670, 113674, 113678, 113682, 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, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 114918, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 114922, 114925, 114929, 114933, 114936, 114940, 114944, 114947, + 114950, 114954, 114958, 114961, 114964, 114967, 114970, 114975, 114978, + 114982, 114985, 114988, 114991, 114994, 114997, 115000, 115003, 115006, + 115009, 115012, 115015, 115019, 115023, 115027, 115031, 115036, 115041, + 115047, 115053, 115059, 115064, 115070, 115076, 115082, 115087, 115093, + 115099, 115104, 115109, 115114, 115119, 115125, 115131, 115136, 115141, + 115147, 115152, 115158, 115164, 115170, 115176, 115182, 115186, 115191, + 115195, 115200, 115204, 115209, 115214, 115220, 115226, 115232, 115237, + 115243, 115249, 115255, 115260, 115266, 115272, 115277, 115282, 115287, + 115292, 115298, 115304, 115309, 115314, 115320, 115325, 115331, 115337, + 115343, 115349, 115355, 115360, 115364, 115369, 115372, 115376, 115379, + 115382, 115385, 115388, 115391, 115394, 115397, 115400, 115403, 115406, + 115409, 115412, 115415, 115418, 115421, 115424, 115427, 115430, 115433, + 115436, 115439, 115442, 115445, 115448, 115451, 115454, 115457, 115460, + 115463, 115466, 115469, 115472, 115475, 115478, 115481, 115484, 115487, + 115490, 115493, 115496, 115499, 115502, 115505, 115508, 115511, 115514, + 115517, 115520, 115523, 115526, 115529, 115532, 115535, 115538, 115541, + 115544, 115547, 115550, 115553, 115556, 115559, 115562, 115565, 115568, + 115571, 115574, 115577, 115580, 115583, 115586, 115589, 115592, 115595, + 115598, 115601, 115604, 115607, 115610, 115613, 115616, 115619, 115622, + 115625, 115628, 115631, 115634, 115637, 115640, 115643, 115646, 115649, + 115652, 115655, 115658, 115661, 115664, 115667, 115670, 115673, 115676, + 115679, 115682, 115685, 115688, 115691, 115694, 115697, 115700, 115703, + 115706, 115709, 115712, 115715, 115718, 115721, 115724, 115727, 115730, + 115733, 115736, 115739, 115742, 115745, 115748, 115751, 115754, 115757, + 115760, 115763, 115766, 115769, 115772, 115775, 115778, 115781, 115784, + 115787, 115790, 115793, 115796, 115799, 115802, 115805, 115808, 115811, + 115814, 115817, 115820, 115823, 115826, 115829, 115832, 115835, 115838, + 115841, 115844, 115847, 115850, 115853, 115856, 115859, 115862, 115865, + 115868, 115871, 115874, 115877, 115880, 115883, 115886, 115889, 115892, + 115895, 115898, 115901, 115904, 115907, 115910, 115913, 115916, 115919, + 115922, 115925, 115928, 115931, 115934, 115937, 115940, 115943, 115946, + 115949, 115952, 115955, 115958, 115961, 115964, 115967, 115970, 115973, + 115976, 115979, 115982, 115985, 115988, 115991, 115994, 115997, 116000, + 116003, 116006, 116009, 116012, 116015, 116018, 116021, 116024, 116027, + 116030, 116033, 116036, 116039, 116042, 116045, 116048, 116051, 116054, + 116057, 116060, 116063, 116066, 116069, 116072, 116075, 116078, 116081, + 116084, 116087, 116090, 116093, 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, 0, 0, 0, 7929, 0, 194682, 0, 0, 66480, 0, 42833, 74529, - 12064, 0, 596, 0, 0, 65842, 8651, 0, 0, 120218, 12995, 64865, 1373, 0, 0, - 5816, 119067, 64810, 4231, 917833, 0, 4233, 4234, 4232, 917836, 0, - 120210, 917841, 917840, 0, 8851, 0, 0, 0, 41601, 8874, 0, 7748, 0, 0, 0, - 0, 41603, 9784, 0, 9188, 41600, 0, 0, 0, 1457, 3535, 0, 0, 0, 0, 65240, - 11951, 0, 3404, 0, 0, 0, 1759, 0, 194964, 0, 0, 0, 66577, 0, 0, 65859, 0, - 0, 0, 0, 0, 0, 65930, 9834, 3055, 9852, 0, 65288, 0, 11398, 0, 0, 119255, - 0, 0, 603, 0, 43548, 0, 0, 917824, 3350, 120817, 64318, 917828, 127089, - 3390, 74483, 43265, 120599, 917830, 917829, 0, 1919, 3400, 0, 917813, 0, - 917540, 66446, 64141, 8562, 64139, 64138, 4043, 8712, 64134, 64133, - 11297, 0, 0, 11966, 64128, 0, 0, 0, 64132, 10867, 64130, 64129, 0, 0, - 9779, 2764, 66002, 0, 9471, 0, 66021, 0, 0, 5457, 5440, 8857, 0, 65282, - 2843, 5355, 0, 0, 0, 5194, 11657, 0, 0, 0, 0, 0, 0, 127027, 10717, 64570, - 5630, 74350, 64143, 10682, 0, 10602, 800, 42499, 66186, 0, 0, 64930, - 11631, 64146, 64145, 64144, 762, 13172, 118859, 0, 0, 10906, 1353, 6960, - 0, 0, 5828, 8724, 917806, 8933, 1601, 42244, 858, 7080, 917808, 917807, - 8090, 0, 74401, 917811, 587, 0, 0, 0, 0, 0, 0, 2750, 0, 556, 64158, - 64157, 0, 12213, 0, 2760, 0, 0, 0, 0, 64156, 64155, 42496, 0, 64151, - 64150, 12679, 10053, 10421, 11787, 64153, 64152, 0, 0, 4839, 0, 0, 1874, - 120352, 0, 6577, 64125, 64124, 64123, 0, 0, 0, 7007, 7590, 65443, 9036, - 0, 64122, 74422, 66609, 0, 64117, 64116, 6287, 64114, 2725, 64120, 64119, - 64118, 42128, 0, 1177, 65601, 12322, 64106, 0, 0, 64102, 7859, 1945, - 64099, 0, 10453, 64104, 7188, 7997, 0, 0, 0, 8705, 64097, 64096, 9571, - 528, 917989, 0, 11429, 0, 0, 0, 0, 73841, 0, 0, 9056, 0, 6188, 120019, - 6155, 64068, 1823, 64066, 64065, 64072, 64071, 63, 7233, 0, 0, 41904, - 6639, 64064, 0, 0, 0, 1176, 118959, 0, 8162, 0, 0, 0, 120519, 66376, - 66242, 11415, 4333, 9855, 64112, 64642, 0, 5388, 0, 0, 0, 7714, 66222, 0, - 7768, 0, 4199, 64708, 0, 0, 0, 8708, 9560, 64077, 64076, 8996, 4992, - 4471, 42622, 64079, 64078, 0, 0, 0, 0, 64615, 0, 0, 12075, 0, 0, 5174, 0, - 0, 0, 3123, 0, 12685, 0, 8408, 64704, 0, 0, 9223, 0, 41616, 0, 73797, 0, - 1116, 0, 43049, 0, 43050, 8548, 0, 0, 119061, 0, 0, 13115, 64092, 64091, - 9322, 0, 120595, 64095, 64094, 8111, 66247, 42332, 64089, 64088, 6199, 0, - 0, 11434, 64083, 64082, 11329, 7737, 64087, 64086, 64085, 64084, 0, 0, - 41335, 4118, 1797, 0, 41334, 0, 46, 0, 0, 298, 0, 0, 0, 42627, 0, 32, - 6187, 119052, 11495, 11459, 3665, 0, 42871, 0, 19923, 74335, 0, 0, 66239, - 0, 64403, 4412, 7240, 0, 0, 0, 65758, 12750, 4181, 8544, 0, 120199, 0, - 120198, 120203, 6181, 65014, 0, 0, 0, 3639, 119588, 0, 0, 0, 10073, - 120206, 0, 0, 0, 42844, 7498, 1098, 0, 0, 0, 0, 10207, 8789, 0, 0, 0, 0, - 9234, 0, 6182, 0, 65058, 0, 0, 0, 0, 5471, 9461, 5573, 118936, 5473, 44, - 0, 66244, 118907, 0, 66238, 12844, 0, 1622, 7767, 1900, 41339, 11458, 0, - 0, 6581, 5576, 0, 64405, 41337, 0, 0, 8947, 0, 0, 41694, 0, 0, 7908, 0, - 10408, 6579, 0, 194829, 0, 0, 0, 6583, 7761, 127010, 120504, 194828, 0, - 5058, 41010, 9992, 0, 5057, 0, 0, 74538, 5054, 118951, 194971, 0, 0, - 1437, 41617, 658, 3497, 0, 7486, 5061, 5060, 4235, 0, 0, 0, 12113, 4236, - 4727, 0, 0, 7693, 10749, 0, 7488, 5773, 978, 0, 0, 41619, 10239, 0, 0, - 66209, 0, 0, 9748, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9341, - 119596, 2379, 11325, 0, 64668, 67854, 8125, 120545, 0, 119175, 917940, - 2369, 0, 0, 0, 119235, 74092, 73936, 7008, 0, 0, 0, 0, 2367, 0, 0, 264, - 2375, 8060, 6194, 119858, 1844, 119084, 0, 12858, 0, 0, 6961, 0, 0, 0, - 8800, 0, 42862, 4463, 65581, 6192, 194676, 42771, 0, 0, 725, 65042, + 74224, 4851, 0, 78156, 78499, 0, 7929, 0, 194682, 0, 78500, 66480, 0, + 42833, 74529, 12064, 0, 596, 0, 0, 13192, 8651, 0, 0, 120218, 12995, + 64865, 1373, 0, 0, 5816, 119067, 64810, 4231, 6825, 0, 4233, 4234, 4232, + 917836, 74415, 120210, 6384, 917840, 78108, 8851, 0, 0, 0, 41601, 8874, + 0, 7748, 0, 0, 0, 0, 41603, 9784, 0, 9188, 41600, 0, 120618, 0, 1457, + 3535, 0, 0, 0, 0, 65240, 11951, 0, 3404, 0, 0, 0, 1759, 0, 41076, 68383, + 120572, 119205, 66577, 0, 0, 65859, 0, 7404, 0, 0, 0, 0, 65908, 9834, + 3055, 9852, 0, 65288, 0, 11398, 0, 0, 119255, 0, 0, 603, 74398, 43548, 0, + 0, 917824, 3350, 120817, 64318, 917828, 127089, 3390, 74483, 43265, + 120599, 917830, 78573, 0, 1919, 3400, 0, 917813, 0, 917540, 66446, 64141, + 8562, 64139, 64138, 4043, 8712, 64134, 64133, 11297, 0, 0, 11966, 64128, + 0, 0, 0, 64132, 10867, 64130, 64129, 0, 43374, 9779, 2764, 66002, 10167, + 9471, 0, 66021, 0, 0, 5457, 5440, 8857, 0, 65282, 2843, 5355, 0, 0, 0, + 5194, 11657, 43984, 0, 0, 0, 0, 0, 127027, 10717, 64570, 5630, 74350, + 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, 0, 0, 0, 0, 78214, 2750, 0, 556, 64158, 64157, 0, + 12213, 194678, 2760, 0, 0, 0, 0, 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, 0, 0, 7007, 7590, 65443, 9036, 0, 64122, + 74422, 66609, 0, 64117, 64116, 6287, 64114, 2725, 64120, 64119, 43981, + 42128, 0, 1177, 65601, 12322, 64106, 0, 127306, 64102, 7859, 1945, 64099, + 0, 10453, 64104, 7188, 7997, 0, 7389, 0, 8705, 64097, 64096, 9571, 528, + 917989, 44017, 11429, 0, 0, 0, 917990, 73841, 0, 0, 9056, 0, 6188, + 120019, 6155, 64068, 1823, 64066, 64065, 64072, 64071, 63, 7233, 120698, + 0, 41904, 6639, 64064, 0, 0, 0, 1176, 118959, 0, 8162, 0, 0, 0, 120519, + 66376, 66242, 11415, 4333, 9855, 64112, 64642, 0, 5388, 0, 0, 0, 7714, + 66222, 0, 7768, 0, 4199, 64708, 0, 0, 0, 8708, 9560, 64077, 64076, 8996, + 4992, 4471, 42622, 64079, 64078, 0, 0, 0, 0, 64615, 0, 0, 12075, 0, 0, + 5174, 0, 0, 127557, 3123, 0, 12685, 0, 8408, 64704, 0, 0, 9223, 0, 41616, + 0, 73797, 0, 1116, 0, 43049, 0, 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, 0, 9927, 41335, 4118, 1797, 0, 41334, 0, 46, 43448, + 0, 298, 0, 0, 0, 42627, 0, 32, 6187, 119052, 11495, 11459, 3665, 0, + 42871, 0, 19923, 74335, 0, 0, 66239, 0, 64403, 4412, 7240, 0, 0, 0, + 65758, 12750, 4181, 8544, 0, 120199, 917897, 120198, 120203, 6181, 65014, + 0, 0, 0, 3639, 119588, 0, 0, 0, 10073, 120206, 0, 0, 68409, 42844, 7498, + 1098, 0, 0, 0, 0, 10207, 8789, 0, 0, 0, 0, 9234, 0, 6182, 0, 65058, 0, 0, + 0, 0, 5471, 9461, 5573, 118936, 5473, 44, 0, 66244, 118907, 0, 66238, + 12844, 0, 1622, 7767, 1900, 41339, 11458, 0, 0, 6581, 5576, 0, 64405, + 41337, 0, 41631, 8947, 68390, 0, 41694, 0, 0, 7908, 0, 10408, 6579, 0, + 64618, 0, 120147, 0, 6583, 7761, 127010, 120504, 194828, 0, 5058, 41010, + 9992, 0, 5057, 0, 0, 74538, 5054, 118951, 194971, 78606, 0, 1437, 41617, + 658, 3497, 0, 7486, 5061, 5060, 4235, 0, 0, 0, 12113, 4236, 4727, 0, 0, + 7693, 10749, 0, 7488, 5773, 978, 0, 0, 41619, 10239, 68611, 0, 66209, 0, + 0, 9748, 0, 127524, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9341, 119596, + 2379, 11325, 0, 64668, 67854, 8125, 120545, 6743, 119175, 917940, 2369, + 0, 0, 0, 119235, 74092, 73936, 7008, 43660, 0, 0, 0, 2367, 0, 0, 264, + 2375, 8060, 6194, 119858, 1844, 119084, 0, 12858, 0, 0, 6961, 0, 118839, + 0, 8800, 0, 42862, 4463, 65581, 6192, 194676, 42771, 0, 0, 725, 65042, 118797, 120800, 0, 12892, 0, 0, 0, 0, 0, 0, 0, 120707, 0, 0, 5074, 5073, - 0, 8983, 0, 917939, 0, 5072, 0, 6198, 11614, 0, 196, 0, 0, 0, 4929, + 0, 8983, 0, 74493, 0, 5072, 0, 6198, 11614, 0, 196, 0, 0, 0, 4929, 120342, 0, 0, 0, 0, 42847, 0, 0, 0, 4934, 0, 41323, 9758, 0, 120341, 0, 42584, 0, 4329, 41321, 4979, 3048, 7752, 41320, 0, 74418, 12819, 0, 5071, - 0, 3642, 0, 5070, 10042, 0, 3987, 5068, 0, 0, 120216, 0, 0, 10636, 73981, - 11806, 43167, 4531, 1245, 9105, 66463, 4921, 120219, 4926, 65544, 73884, - 194619, 0, 0, 64709, 0, 194620, 120790, 4922, 325, 992, 119568, 4925, 0, - 0, 9526, 4920, 0, 948, 0, 120208, 4930, 0, 0, 120275, 4933, 0, 0, 0, - 4928, 0, 0, 74770, 0, 0, 722, 0, 19908, 12637, 0, 119855, 8753, 1509, 0, - 5468, 9511, 0, 0, 1672, 6205, 10864, 74586, 0, 0, 0, 0, 0, 73863, 0, 0, - 41607, 120115, 1679, 120116, 194932, 120113, 0, 7005, 41609, 9580, 0, - 401, 0, 120109, 6968, 5761, 342, 8553, 0, 8143, 127115, 11983, 127113, - 624, 74508, 0, 119630, 5078, 74258, 12478, 0, 5076, 0, 194609, 0, 120097, - 685, 9025, 1524, 12618, 0, 5539, 0, 120095, 120102, 120094, 120552, 0, - 194611, 0, 0, 12520, 8058, 9732, 0, 5080, 64775, 5036, 5035, 120590, - 42604, 0, 0, 8074, 275, 13291, 1907, 0, 4432, 0, 5033, 0, 0, 4836, 3888, - 73792, 10729, 64546, 194600, 120681, 194937, 0, 67588, 119000, 0, 0, - 8858, 6409, 0, 120252, 0, 0, 0, 66321, 0, 12814, 0, 3432, 10218, 0, 6094, + 0, 3642, 0, 5070, 10042, 118835, 3987, 5068, 0, 8909, 78650, 78649, 0, + 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, 0, 120275, + 4933, 0, 0, 118985, 4928, 0, 0, 74770, 120194, 0, 722, 0, 19908, 12637, + 0, 119855, 8753, 1509, 0, 5468, 9511, 0, 0, 1672, 6205, 10864, 74586, 0, + 0, 0, 0, 0, 73863, 0, 0, 41607, 120115, 1679, 120116, 120180, 120113, 0, + 7005, 41609, 9580, 0, 401, 0, 120109, 6968, 5761, 342, 8553, 0, 8143, + 127115, 11983, 127113, 624, 74508, 0, 119630, 5078, 74258, 12478, 0, + 5076, 0, 194609, 0, 120097, 685, 9025, 1524, 12618, 0, 5539, 0, 120095, + 120102, 120094, 120552, 0, 194611, 78752, 0, 12520, 8058, 9732, 0, 5080, + 64775, 5036, 5035, 120590, 42604, 0, 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, 0, 0, 0, 66321, 0, 12814, 127248, 3432, 10218, 0, 6094, 7641, 42445, 0, 0, 42406, 1676, 74320, 194607, 0, 5030, 0, 0, 0, 0, 9622, - 0, 0, 0, 0, 0, 0, 0, 10544, 12919, 0, 0, 0, 0, 0, 0, 0, 947, 119835, - 194586, 194585, 10969, 119935, 7613, 119937, 119936, 4795, 119930, 7018, - 64914, 0, 120192, 120268, 0, 43567, 74056, 917910, 0, 119919, 7216, - 65232, 7217, 251, 7218, 7895, 4395, 43538, 119926, 119929, 119928, 7213, - 119922, 7214, 7215, 0, 74141, 8880, 7685, 0, 120173, 65540, 119618, 625, - 8187, 42861, 1113, 7236, 7915, 3630, 120176, 8179, 74264, 67886, 9316, - 10980, 2489, 65624, 8150, 1359, 0, 0, 0, 73756, 5042, 5041, 42769, 12084, - 0, 0, 0, 0, 0, 0, 0, 0, 12283, 1616, 3795, 0, 8795, 66245, 0, 0, 0, 1138, - 73905, 12677, 0, 0, 3239, 0, 0, 0, 8431, 0, 42164, 0, 11778, 12620, 0, - 73773, 119073, 5040, 0, 0, 0, 0, 0, 5039, 0, 0, 0, 5038, 0, 0, 13184, - 74293, 0, 64648, 0, 9359, 0, 0, 0, 65157, 6662, 0, 0, 3863, 73909, 4835, - 0, 0, 0, 4309, 0, 194569, 0, 194568, 1301, 0, 119595, 569, 0, 0, 711, - 119085, 0, 0, 73880, 11610, 11368, 0, 194571, 41331, 1006, 74240, 0, - 1550, 8201, 73737, 7627, 5499, 5031, 0, 0, 65784, 0, 65267, 3758, 0, - 65781, 64734, 0, 2440, 65780, 0, 8449, 0, 5008, 0, 8822, 0, 12121, 8255, - 5512, 73875, 119560, 0, 64313, 2641, 5906, 1119, 127068, 13038, 0, 2455, - 0, 118809, 0, 0, 0, 0, 8714, 0, 4211, 0, 0, 0, 0, 0, 5052, 66220, 5821, - 6186, 65778, 65775, 5051, 65773, 1429, 42647, 5050, 302, 388, 41115, 735, - 6637, 5907, 120670, 0, 12726, 74594, 9117, 0, 0, 5513, 6666, 5053, 74230, - 5510, 0, 0, 0, 2470, 0, 0, 1925, 0, 0, 0, 0, 5048, 5047, 0, 0, 0, 194863, - 0, 74497, 0, 8089, 6929, 639, 0, 68179, 0, 0, 0, 4599, 41402, 6674, - 120631, 43294, 1476, 648, 0, 65819, 3233, 0, 0, 10164, 0, 0, 3530, 9750, - 0, 0, 6656, 194858, 0, 5046, 8512, 65856, 74261, 8967, 0, 5045, 0, 1916, - 7986, 5044, 120556, 9006, 13128, 5043, 0, 7853, 74068, 74004, 9669, - 12341, 12703, 8402, 0, 119070, 0, 41750, 3586, 64508, 43148, 0, 0, - 119606, 0, 13296, 517, 0, 0, 0, 41528, 123, 65454, 0, 0, 74478, 10531, - 7784, 41526, 10829, 73991, 8057, 1126, 73895, 0, 194591, 0, 3925, 0, - 8069, 43142, 120439, 489, 0, 0, 120441, 120452, 43151, 0, 0, 66200, 0, 0, - 0, 0, 0, 0, 8711, 6183, 0, 0, 0, 120448, 7623, 118925, 194853, 9235, - 12760, 74176, 0, 66445, 43540, 120437, 3743, 11514, 11078, 0, 12136, 0, - 0, 120435, 0, 7726, 0, 19922, 267, 3393, 0, 1371, 194849, 0, 2458, 0, - 6201, 0, 41074, 4266, 10652, 41612, 41077, 3402, 9050, 3398, 0, 0, 0, - 3391, 41075, 2476, 0, 917550, 0, 10625, 0, 12767, 13017, 0, 64261, 64934, - 0, 13014, 13013, 0, 6673, 0, 0, 0, 12438, 0, 0, 0, 0, 0, 9053, 13015, - 74523, 0, 704, 66215, 6195, 0, 6660, 194941, 917760, 917793, 0, 12629, - 11435, 0, 0, 65538, 0, 0, 0, 74547, 0, 65448, 0, 12948, 195003, 195002, - 119238, 195004, 195007, 195006, 0, 0, 4287, 8276, 4902, 1131, 0, 0, - 66728, 1816, 0, 42533, 168, 0, 4898, 64298, 0, 0, 4901, 1821, 0, 578, + 0, 0, 6787, 0, 0, 0, 0, 10544, 12919, 0, 0, 0, 0, 0, 120789, 0, 947, + 119835, 194586, 194585, 10969, 119935, 7613, 119937, 119936, 4795, + 119930, 7018, 7376, 120181, 120192, 120268, 0, 43567, 74056, 917910, + 118963, 119919, 7216, 65232, 7217, 251, 7218, 7895, 4395, 43538, 119926, + 119929, 119928, 7213, 119922, 7214, 7215, 0, 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, 0, 0, + 73756, 5042, 5041, 42769, 12084, 0, 0, 0, 127319, 0, 917906, 0, 0, 12283, + 1616, 3795, 0, 8795, 66245, 0, 0, 0, 1138, 73905, 12677, 0, 0, 3239, 0, + 0, 0, 8431, 0, 42164, 0, 11778, 12620, 6826, 73773, 119073, 5040, 0, 0, + 0, 78420, 0, 5039, 0, 78418, 0, 5038, 0, 0, 13184, 74293, 0, 64648, 0, + 9359, 78416, 0, 0, 65157, 6662, 0, 0, 3863, 73909, 4835, 55266, 43432, 0, + 4309, 0, 194569, 0, 194568, 1301, 0, 42589, 569, 0, 73813, 711, 119085, + 0, 0, 73880, 11610, 11368, 0, 194571, 41331, 1006, 74240, 0, 1550, 8201, + 73737, 7627, 5499, 5031, 77908, 42738, 65784, 77907, 65267, 3758, 0, + 65781, 64734, 0, 2440, 65780, 77913, 8449, 0, 5008, 0, 8822, 0, 12121, + 8255, 5512, 73875, 119560, 0, 64313, 2641, 5906, 1119, 127068, 13038, 0, + 2455, 0, 118809, 0, 0, 0, 0, 8714, 0, 4211, 0, 0, 0, 0, 43713, 5052, + 66220, 5821, 6186, 65778, 65775, 5051, 65773, 1429, 42647, 5050, 302, + 388, 41115, 735, 6637, 5907, 120670, 0, 12726, 74594, 9117, 0, 195010, + 5513, 6666, 5053, 74230, 5510, 78451, 0, 78447, 2470, 78437, 0, 1925, 0, + 0, 74807, 0, 5048, 5047, 0, 0, 0, 194863, 0, 74497, 0, 8089, 6929, 639, + 0, 68179, 0, 0, 0, 4599, 41402, 6674, 43397, 43294, 1476, 648, 0, 65819, + 3233, 0, 41782, 6951, 0, 0, 3530, 9750, 0, 0, 6656, 194858, 0, 5046, + 8512, 65856, 74261, 8967, 0, 5045, 0, 1916, 7986, 5044, 120556, 9006, + 13128, 5043, 0, 7853, 74068, 74004, 9669, 12341, 12703, 8402, 0, 119070, + 0, 41750, 3586, 64508, 43148, 0, 0, 119606, 0, 13296, 517, 0, 0, 0, + 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, 0, 0, 66200, 0, 0, 0, 78423, 0, 0, 8711, 6183, 0, + 0, 0, 120448, 7623, 118925, 194853, 9235, 12760, 74176, 0, 66445, 43540, + 120437, 3743, 11514, 11078, 0, 12136, 0, 0, 120435, 0, 7726, 0, 19922, + 267, 3393, 42198, 1371, 194849, 69233, 2458, 0, 6201, 0, 41074, 4266, + 10652, 41612, 41077, 3402, 9050, 3398, 0, 0, 0, 3391, 41075, 2476, 0, + 917550, 0, 10625, 0, 12767, 13017, 78743, 64261, 64934, 127537, 13014, + 13013, 0, 6673, 0, 0, 0, 12438, 0, 0, 0, 0, 0, 9053, 13015, 74523, 0, + 704, 66215, 6195, 0, 6660, 78758, 917760, 917793, 42212, 12629, 11435, 0, + 55256, 65538, 0, 0, 0, 74547, 0, 65448, 78100, 12948, 119001, 195002, + 119238, 195004, 78099, 127085, 0, 0, 4287, 8276, 4902, 1131, 0, 78458, + 66728, 1816, 0, 42533, 168, 42845, 4898, 64298, 0, 0, 4901, 1821, 0, 578, 3653, 0, 791, 9162, 6977, 0, 119298, 74561, 0, 73731, 8354, 43590, 0, 0, 7557, 0, 119301, 8234, 7241, 0, 194994, 119167, 194996, 12811, 65925, - 3946, 195000, 10998, 0, 673, 194867, 64397, 0, 74599, 0, 0, 194977, - 194976, 2448, 194978, 10267, 8424, 2452, 120760, 194864, 8729, 0, 0, - 7845, 0, 0, 4408, 4122, 0, 11039, 8723, 194990, 194989, 119302, 731, - 119304, 119303, 2438, 64855, 119300, 119299, 1175, 0, 42135, 373, 119172, - 5396, 11457, 11521, 7723, 0, 0, 0, 41952, 0, 5273, 8248, 5269, 0, 5202, - 2404, 5267, 42823, 11291, 19915, 5277, 12963, 0, 6189, 4125, 1314, 12133, - 0, 118873, 1271, 0, 0, 66024, 41482, 3864, 74539, 0, 3879, 0, 12978, - 4166, 4574, 0, 7567, 7459, 0, 41390, 5384, 41882, 67647, 0, 0, 0, 0, - 41388, 0, 41392, 64288, 41387, 0, 8706, 5552, 0, 700, 0, 5553, 0, 7088, - 5356, 7499, 0, 66596, 0, 0, 0, 5554, 0, 12344, 10311, 0, 6665, 0, 0, - 7618, 8517, 11455, 0, 64632, 66017, 5555, 0, 0, 0, 0, 119204, 65033, - 9143, 6668, 195067, 195066, 195069, 656, 195071, 65037, 4577, 64624, 0, - 0, 0, 0, 4269, 73885, 917775, 42846, 917774, 950, 0, 0, 66580, 118895, - 66683, 10554, 917778, 119121, 0, 5098, 917770, 0, 119099, 5097, 4935, - 9848, 10381, 0, 0, 0, 3651, 0, 0, 0, 5102, 5101, 10269, 12983, 8138, 0, - 1932, 5100, 1439, 12093, 1247, 10034, 195064, 5099, 0, 1441, 42087, 3063, - 650, 0, 7838, 0, 195041, 195040, 119142, 9031, 195045, 195044, 9078, - 8545, 66356, 195048, 0, 9154, 9118, 0, 0, 2676, 7750, 0, 73812, 6190, - 8599, 195053, 0, 10795, 9857, 7014, 9858, 195033, 0, 12129, 0, 8481, 0, - 6202, 195035, 10920, 195037, 5203, 195039, 195038, 5108, 5107, 65818, - 66019, 9762, 0, 5541, 74772, 0, 12613, 5284, 6657, 207, 0, 4275, 74819, - 854, 68147, 74381, 0, 0, 5103, 0, 64348, 41368, 0, 488, 0, 0, 0, 10157, - 0, 43034, 11438, 0, 0, 0, 118839, 41771, 5106, 6669, 8504, 65154, 195025, - 41367, 5105, 195030, 195029, 6476, 5104, 0, 304, 3176, 0, 0, 932, 0, - 6567, 238, 74522, 195011, 195010, 19905, 120577, 195015, 120187, 41044, - 67640, 0, 64814, 9912, 65939, 10670, 74093, 13273, 0, 12552, 195019, - 8803, 309, 6622, 8151, 10858, 194596, 67636, 0, 12568, 0, 12553, 0, - 43275, 6950, 9712, 0, 0, 0, 65165, 0, 0, 66466, 0, 0, 0, 66725, 6191, - 11351, 10437, 11316, 67634, 0, 0, 41754, 67635, 9370, 2720, 194975, 0, - 8232, 118817, 0, 3222, 0, 0, 0, 66663, 0, 0, 10834, 0, 0, 65732, 0, 0, - 119579, 0, 195020, 0, 7781, 41383, 64568, 0, 120738, 12077, 0, 0, 0, - 42396, 0, 3475, 0, 2479, 0, 3632, 0, 10698, 0, 3648, 194960, 74844, - 67639, 3636, 67894, 3650, 8837, 65229, 1843, 42283, 0, 41562, 0, 74548, - 0, 3640, 0, 42321, 7284, 194974, 194973, 194950, 194949, 194952, 194951, - 0, 194953, 42080, 2529, 0, 0, 0, 42083, 194955, 194606, 194957, 67619, - 66367, 194958, 9634, 0, 9988, 0, 41068, 0, 0, 65264, 0, 0, 917923, 0, - 785, 8236, 194942, 9027, 68160, 67623, 64383, 0, 925, 0, 0, 41985, 41071, - 9586, 0, 41984, 9217, 0, 0, 0, 9186, 64580, 4016, 0, 0, 381, 0, 0, 42077, - 0, 194946, 5184, 42078, 194947, 10810, 0, 4585, 19943, 5860, 67633, 0, 0, - 812, 3615, 0, 5178, 194929, 120548, 120506, 5188, 74287, 67629, 3605, - 10692, 1166, 64429, 42639, 924, 0, 67631, 0, 0, 2442, 10703, 194940, - 67632, 0, 12771, 12736, 12753, 0, 73933, 67626, 42401, 0, 0, 0, 42288, - 12751, 0, 8542, 13145, 0, 2468, 66706, 41294, 3626, 3883, 64388, 42479, - 0, 41117, 0, 0, 0, 0, 67624, 0, 1290, 0, 65585, 2715, 806, 0, 41884, 0, - 7027, 64731, 0, 0, 0, 66325, 3465, 2405, 9240, 0, 12756, 65259, 0, 0, - 12752, 5833, 1432, 0, 41883, 73912, 9799, 0, 41886, 2480, 0, 43219, 0, - 6494, 5537, 0, 0, 0, 0, 1211, 0, 0, 0, 118832, 12318, 0, 0, 0, 10622, 0, - 0, 0, 6566, 0, 0, 73780, 0, 64864, 0, 194588, 0, 8284, 0, 0, 3589, 0, - 4035, 6492, 0, 4265, 6642, 3977, 74186, 41778, 836, 119216, 2488, 0, + 3946, 78078, 10998, 78080, 673, 194867, 64397, 0, 74599, 78449, 8890, + 194977, 194976, 2448, 78085, 10267, 8424, 2452, 78083, 194864, 8729, + 78456, 0, 7845, 0, 78692, 4408, 4122, 6772, 11039, 8723, 194990, 194989, + 119302, 731, 119304, 119303, 2438, 64855, 119300, 119299, 1175, 0, 42135, + 373, 119172, 5396, 11457, 11521, 7723, 0, 0, 0, 41952, 0, 5273, 8248, + 5269, 6337, 5202, 2404, 5267, 42823, 11291, 19915, 5277, 12963, 0, 6189, + 4125, 1314, 12133, 0, 118873, 1271, 0, 0, 66024, 41482, 3864, 74539, 0, + 3879, 0, 12978, 4166, 4574, 0, 7567, 7459, 0, 41390, 5384, 41882, 67647, + 0, 5759, 0, 0, 41388, 0, 41392, 64288, 41387, 0, 8706, 5552, 0, 700, 0, + 5553, 0, 7088, 5356, 7499, 78110, 66596, 0, 0, 10263, 5554, 0, 12344, + 10311, 78113, 6665, 0, 0, 7618, 8517, 11455, 78440, 64632, 66017, 5555, + 78088, 78093, 78091, 0, 42803, 65033, 9143, 6668, 195067, 195066, 195069, + 656, 195071, 65037, 4577, 64624, 0, 0, 0, 0, 4269, 73885, 917775, 42846, + 917774, 950, 0, 0, 66580, 118895, 66683, 10554, 917778, 119121, 0, 5098, + 917770, 0, 119099, 5097, 4935, 9848, 10381, 0, 917560, 0, 3651, 0, 0, + 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, 195044, 9078, 8545, 66356, 195048, + 0, 9154, 9118, 0, 0, 2676, 7750, 0, 73812, 6190, 8599, 195053, 0, 10795, + 9857, 7014, 9856, 195033, 0, 12129, 0, 8481, 0, 6202, 195035, 10920, + 195037, 5203, 195039, 195038, 5108, 5107, 65818, 66019, 9762, 0, 5541, + 74772, 0, 12613, 5284, 6657, 207, 0, 4275, 74819, 854, 68147, 74381, 0, + 0, 5103, 0, 64348, 41368, 43974, 488, 69811, 0, 0, 10157, 0, 43034, + 11438, 0, 0, 0, 68431, 41771, 5106, 6669, 8504, 65154, 69813, 41367, + 5105, 195030, 69809, 6476, 5104, 0, 304, 3176, 0, 0, 932, 0, 6567, 238, + 74522, 195011, 194595, 19905, 120577, 195015, 120187, 41044, 67640, + 194902, 42055, 9912, 65939, 10670, 74093, 13273, 0, 12552, 195019, 8803, + 309, 6622, 8151, 10858, 194596, 67636, 0, 12568, 0, 12553, 0, 43275, + 6950, 9712, 68680, 43970, 0, 65165, 0, 0, 66466, 0, 0, 0, 66725, 6191, + 11351, 10437, 11316, 67634, 0, 0, 41754, 67635, 9370, 2720, 194975, + 68462, 8232, 118817, 0, 3222, 0, 0, 0, 66663, 0, 0, 10834, 0, 0, 65732, + 0, 917547, 119579, 67679, 195020, 0, 7781, 41383, 64568, 0, 120738, + 12077, 0, 64586, 917620, 42396, 55255, 3475, 0, 2479, 0, 3632, 120728, + 10698, 8376, 3648, 194960, 74844, 67639, 3636, 67894, 3650, 8837, 65229, + 1843, 42283, 43250, 41562, 9100, 74548, 0, 3640, 0, 42321, 7284, 194974, + 194973, 194950, 194949, 194952, 194951, 0, 194953, 42080, 2529, 0, 0, 0, + 42083, 120678, 68398, 194957, 67619, 66367, 194958, 9634, 0, 9988, 0, + 41068, 0, 0, 65264, 0, 0, 917923, 0, 785, 8236, 194942, 9027, 68160, + 67623, 64383, 0, 925, 0, 0, 41985, 41071, 9586, 0, 41984, 9217, 0, 0, 0, + 9186, 2067, 4016, 0, 0, 381, 0, 0, 42077, 0, 194946, 5184, 42078, 194947, + 10810, 0, 4585, 19943, 5860, 67633, 0, 0, 812, 3615, 0, 5178, 44000, + 120548, 78807, 5188, 74287, 67629, 3605, 10692, 1166, 64429, 42639, 924, + 0, 67631, 0, 0, 2442, 10703, 78789, 67632, 917924, 12771, 12736, 12753, + 0, 73933, 67626, 42401, 0, 0, 127373, 42288, 12751, 0, 8542, 13145, 0, + 2468, 66706, 41294, 3626, 3883, 64388, 42479, 0, 41117, 0, 0, 0, 0, + 67624, 0, 1290, 0, 65585, 2715, 806, 65208, 41884, 917883, 7027, 64731, + 0, 0, 0, 66325, 3465, 2405, 9240, 0, 12756, 65259, 0, 0, 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, 0, 10622, 0, 0, + 0, 6566, 78659, 0, 73780, 0, 64864, 0, 78660, 0, 8284, 0, 0, 3589, 0, + 4035, 6492, 118981, 4265, 6642, 3977, 74186, 41778, 836, 119216, 2488, 0, 4582, 0, 0, 41777, 12926, 0, 7528, 10550, 0, 0, 0, 0, 0, 1374, 64878, - 119014, 0, 42389, 41374, 0, 0, 0, 41377, 0, 0, 400, 12597, 0, 0, 0, 6661, - 0, 64827, 0, 73817, 390, 0, 74755, 0, 3473, 7718, 0, 0, 0, 0, 0, 0, 0, - 11969, 0, 0, 8004, 1887, 0, 0, 8080, 7006, 0, 0, 0, 0, 1544, 0, 0, 64677, - 120716, 0, 6146, 0, 771, 0, 0, 12812, 13168, 42272, 12200, 917927, 7904, - 0, 953, 12917, 0, 12300, 0, 11491, 9724, 10341, 0, 9524, 7490, 11389, - 7489, 3379, 0, 7487, 0, 471, 7484, 7482, 7481, 7480, 7479, 7478, 7477, - 6501, 7475, 6918, 7473, 7472, 2474, 7470, 7468, 10232, 10615, 10213, 0, - 120222, 10049, 0, 3544, 0, 6017, 65311, 0, 0, 13306, 10533, 7870, 73949, - 7625, 0, 120544, 0, 0, 0, 0, 0, 0, 19961, 2472, 0, 120699, 0, 6019, 4256, - 120776, 74380, 0, 73847, 73844, 12845, 0, 0, 65138, 119355, 67862, 0, 0, - 120000, 120008, 8066, 7678, 74865, 0, 0, 0, 0, 7186, 0, 120555, 0, 445, - 120566, 0, 0, 0, 8330, 0, 0, 42797, 0, 120215, 0, 3902, 0, 1770, 0, 0, - 1560, 120209, 0, 4584, 73843, 0, 11712, 10866, 0, 1118, 0, 0, 0, 1081, - 7436, 0, 7252, 0, 5996, 0, 4903, 0, 41386, 5162, 119189, 1330, 0, 64530, - 0, 12047, 41384, 0, 0, 1848, 4334, 0, 41975, 64777, 10674, 12308, 0, 0, - 0, 0, 12715, 0, 0, 0, 2018, 66672, 41979, 66685, 119157, 0, 0, 0, 126984, - 0, 9334, 0, 0, 0, 7975, 0, 0, 0, 66621, 4884, 66597, 0, 0, 0, 6313, - 65513, 0, 0, 0, 0, 2345, 0, 463, 0, 0, 119607, 3117, 5460, 0, 0, 0, 0, - 42279, 194577, 0, 0, 0, 0, 0, 13248, 0, 0, 0, 0, 0, 0, 5663, 0, 0, 0, 0, - 2482, 1471, 0, 0, 42247, 12378, 73925, 0, 0, 12374, 0, 0, 0, 0, 2460, 0, - 11944, 12376, 0, 64679, 0, 12380, 10557, 64473, 5870, 0, 2024, 0, 0, 0, - 539, 0, 0, 0, 3853, 65180, 0, 120796, 120245, 0, 0, 8659, 0, 12474, 0, - 9503, 194969, 2478, 0, 4162, 0, 4260, 12953, 0, 120089, 12470, 0, 74189, - 2742, 12476, 11798, 10946, 0, 5000, 0, 0, 0, 0, 8213, 74017, 7771, 6161, - 0, 0, 0, 0, 0, 0, 120582, 0, 0, 10301, 10333, 10397, 0, 0, 73791, 0, 0, - 0, 0, 0, 4014, 12842, 73952, 12015, 0, 8275, 3893, 0, 0, 0, 7221, 42147, - 0, 74550, 74465, 64747, 118841, 0, 12516, 0, 0, 119017, 74537, 10892, - 8231, 0, 6473, 41968, 0, 41973, 3591, 41969, 0, 2453, 0, 0, 0, 0, 0, - 10349, 10413, 43591, 41962, 3202, 74353, 0, 8316, 0, 0, 0, 687, 0, 0, 0, - 1840, 0, 0, 119809, 4883, 285, 4723, 0, 0, 4459, 74577, 0, 41720, 11089, - 240, 19906, 0, 119248, 0, 9743, 120232, 13134, 0, 0, 0, 0, 0, 42634, 0, - 0, 3081, 11463, 120230, 0, 0, 10445, 0, 0, 66717, 2614, 9125, 119023, - 1729, 0, 120236, 65221, 63883, 43334, 64852, 0, 120235, 66201, 0, 66578, - 5001, 41879, 0, 4121, 5003, 884, 66700, 63879, 4943, 5150, 73889, 74182, - 0, 643, 3086, 0, 42448, 42299, 58, 0, 0, 120083, 63873, 8491, 0, 0, 0, - 4530, 42409, 0, 0, 2721, 120074, 119096, 19929, 0, 194574, 0, 4242, 4264, - 0, 0, 66179, 42412, 65941, 13114, 64522, 10740, 3094, 0, 9754, 119102, - 4437, 73948, 0, 0, 65179, 42174, 194925, 42430, 0, 0, 42355, 66026, 4306, - 41380, 0, 0, 0, 66667, 0, 0, 0, 120578, 42566, 0, 0, 5088, 6948, 0, 8524, - 0, 0, 12385, 0, 0, 0, 1386, 65034, 11480, 6116, 65039, 65038, 12392, - 65036, 8064, 0, 12101, 5822, 119004, 0, 710, 0, 11663, 1666, 42091, - 119657, 12383, 0, 42092, 0, 4289, 0, 63896, 12061, 42096, 0, 3362, 12377, - 0, 0, 0, 7461, 73901, 1244, 331, 73786, 12683, 10662, 0, 8112, 0, 65852, - 0, 12379, 0, 120818, 41964, 0, 63843, 12381, 41965, 0, 65866, 4327, 0, - 63840, 0, 41220, 13032, 0, 584, 12933, 43177, 12373, 0, 13000, 1351, 0, - 8698, 12665, 0, 1930, 0, 0, 12427, 0, 0, 13031, 0, 0, 0, 3657, 0, 65202, - 6000, 0, 12426, 0, 0, 41740, 12428, 41283, 41916, 119210, 0, 0, 12429, - 9695, 0, 7562, 0, 5170, 0, 41755, 676, 0, 0, 66664, 74427, 0, 3536, 0, - 9752, 0, 6162, 0, 0, 10113, 41829, 65886, 5159, 12422, 41832, 439, 43077, - 0, 120532, 74549, 11796, 40970, 41830, 0, 917799, 8308, 917797, 917796, - 0, 67864, 917801, 917800, 12336, 4135, 0, 341, 2727, 4129, 3539, 0, - 63861, 0, 7913, 0, 63859, 4131, 63868, 0, 63867, 4133, 11371, 210, 4600, - 0, 74560, 4137, 8082, 0, 119062, 0, 0, 4591, 0, 0, 0, 9680, 0, 120623, - 561, 12159, 195, 0, 41501, 0, 42031, 5719, 7172, 0, 8368, 0, 41499, 0, 0, - 42242, 41498, 917794, 42025, 0, 65805, 42463, 0, 2924, 0, 120510, 0, 0, - 119213, 73941, 0, 42330, 917784, 3969, 0, 0, 7169, 1992, 9652, 73977, - 7246, 42086, 917790, 917789, 0, 0, 0, 0, 0, 327, 0, 9042, 917777, 917776, - 65148, 12433, 917781, 917780, 917779, 12431, 8668, 12434, 0, 917782, - 5999, 0, 7712, 12432, 0, 0, 1726, 1015, 0, 8212, 0, 0, 42423, 119066, 0, - 0, 66709, 0, 8811, 927, 0, 0, 12436, 0, 42021, 0, 0, 1299, 12240, 42350, - 65143, 0, 195016, 0, 0, 11348, 0, 0, 0, 0, 0, 19914, 12179, 0, 9648, 0, - 63836, 63832, 917773, 10967, 63816, 2594, 3444, 63817, 64651, 0, 41503, - 0, 11265, 0, 0, 0, 0, 5664, 3972, 0, 0, 0, 917766, 12416, 917764, 119608, - 10816, 917769, 917768, 12418, 74111, 3882, 8532, 917771, 1573, 0, 119847, - 4596, 66339, 12417, 66001, 65343, 194782, 12414, 8287, 0, 0, 68108, 1143, - 119169, 0, 12415, 6626, 42763, 0, 118884, 9021, 120783, 0, 11724, 0, 0, - 127104, 194794, 0, 0, 8027, 10997, 9171, 12741, 11400, 74197, 194799, 0, - 0, 0, 0, 0, 0, 120190, 194773, 0, 194772, 42368, 0, 7715, 3881, 41487, - 12118, 42514, 0, 0, 0, 3009, 41476, 41489, 0, 3007, 1448, 3018, 0, 3889, + 119014, 0, 42389, 41374, 0, 0, 78492, 41377, 0, 0, 400, 12597, 120586, 0, + 0, 6661, 0, 64827, 0, 73817, 390, 0, 74755, 0, 3473, 7718, 0, 0, 0, + 55285, 0, 0, 0, 11969, 0, 0, 6365, 1887, 6763, 0, 8080, 7006, 0, 0, 6757, + 0, 1544, 0, 6766, 64677, 120716, 0, 6146, 0, 771, 0, 0, 12812, 13168, + 42272, 12200, 917927, 7904, 0, 953, 12917, 0, 12300, 0, 11491, 9724, + 10341, 0, 9524, 7490, 11389, 7489, 3379, 0, 7487, 0, 471, 7484, 7482, + 6753, 7480, 7479, 7478, 7477, 6501, 7475, 6918, 7473, 7472, 2474, 7470, + 7468, 10232, 10615, 10213, 0, 120222, 10049, 78884, 3544, 0, 6017, 65311, + 0, 120216, 13306, 10533, 7870, 73949, 7625, 0, 120544, 0, 0, 0, 0, 0, 0, + 19961, 2472, 42665, 120699, 0, 6019, 4256, 120776, 74380, 0, 42675, + 42658, 12845, 0, 0, 65138, 119355, 67862, 0, 65671, 120000, 120008, 8066, + 7678, 74865, 0, 0, 0, 0, 7186, 0, 120555, 0, 445, 120566, 0, 0, 0, 8330, + 0, 0, 42797, 0, 120215, 0, 3902, 0, 1770, 0, 0, 1560, 120209, 194972, + 4584, 73843, 0, 11712, 10866, 118928, 1118, 0, 0, 0, 1081, 7436, 68420, + 7252, 0, 5996, 0, 4903, 0, 41386, 5162, 119189, 1330, 0, 42848, 0, 12047, + 41384, 0, 0, 1848, 4334, 6324, 41975, 64777, 10674, 12308, 12186, 0, 0, + 0, 12715, 0, 0, 0, 2018, 66672, 41979, 66685, 119157, 0, 0, 0, 126984, 0, + 9334, 0, 127310, 0, 7975, 0, 77957, 0, 66621, 4884, 66597, 0, 0, 0, 6313, + 65513, 0, 0, 0, 0, 2345, 43697, 463, 0, 0, 119607, 3117, 5460, 0, 0, 0, + 0, 42279, 194577, 0, 78415, 0, 0, 0, 13248, 0, 0, 0, 0, 0, 0, 5663, 0, 0, + 0, 0, 2482, 1471, 0, 0, 42247, 12378, 73925, 127233, 0, 12374, 0, 0, 0, + 0, 2460, 0, 11944, 12376, 0, 64679, 0, 12380, 10557, 64473, 5870, 0, + 2024, 0, 0, 0, 539, 0, 0, 0, 3853, 65180, 0, 120796, 120245, 0, 0, 8659, + 0, 12474, 0, 9503, 194969, 2478, 0, 4162, 0, 4260, 12953, 0, 120089, + 12470, 0, 74189, 2742, 12476, 11798, 10946, 0, 5000, 0, 0, 0, 0, 8213, + 74017, 7771, 6161, 0, 6709, 0, 78885, 0, 194892, 120582, 78547, 0, 10301, + 10333, 10397, 0, 0, 73791, 0, 0, 0, 0, 0, 4014, 12842, 73952, 12015, 0, + 8275, 3893, 0, 0, 127555, 7221, 42147, 0, 74550, 74465, 64747, 118841, 0, + 12516, 4444, 0, 119017, 74537, 10892, 8231, 0, 6473, 41968, 78388, 41973, + 3591, 41969, 0, 2453, 0, 0, 64705, 0, 0, 10349, 10413, 43591, 41962, + 3202, 74353, 0, 8316, 0, 0, 0, 687, 0, 0, 0, 1840, 0, 68671, 119809, + 4883, 285, 4723, 77927, 0, 4459, 74577, 0, 41720, 11089, 240, 19906, 0, + 42323, 0, 9743, 120232, 13134, 0, 0, 0, 0, 0, 42634, 0, 43437, 3081, + 11463, 120230, 0, 0, 10445, 0, 0, 66717, 2614, 9125, 119023, 1729, 0, + 120236, 65221, 63883, 43334, 64852, 0, 120235, 66201, 0, 66578, 5001, + 41879, 74427, 4121, 5003, 884, 66700, 63879, 4943, 5150, 73889, 74182, 0, + 643, 3086, 0, 42448, 42299, 58, 0, 0, 120083, 63873, 8491, 0, 0, 0, 4530, + 42409, 0, 194575, 2721, 120074, 119096, 19929, 0, 194574, 0, 4242, 4264, + 120077, 0, 66179, 42412, 65941, 13114, 64522, 10740, 3094, 0, 9754, + 119102, 4437, 73948, 0, 0, 55280, 42174, 194925, 42430, 0, 0, 42355, + 66026, 4306, 41380, 68432, 0, 0, 66667, 127309, 0, 0, 42200, 42566, 0, 0, + 5088, 6948, 0, 8524, 0, 0, 12385, 0, 0, 0, 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, 0, 0, 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, 0, 13000, 1351, 0, 8698, 12665, 0, + 1930, 0, 78229, 12427, 66514, 0, 13031, 0, 63901, 0, 3657, 0, 65202, + 6000, 119206, 12426, 0, 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, 0, 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, 0, 0, 0, 9680, 0, 120623, 561, 12159, 195, 78508, + 41501, 0, 42031, 5719, 7172, 42687, 8368, 0, 41499, 0, 0, 42242, 41498, + 917794, 42025, 78567, 65805, 42463, 0, 2924, 0, 120510, 0, 0, 119213, + 73941, 0, 42330, 917784, 3969, 0, 0, 7169, 1992, 9652, 73977, 7246, + 42086, 917790, 917789, 0, 0, 0, 0, 0, 327, 0, 9042, 917777, 917776, + 65148, 12433, 917781, 127276, 917779, 12431, 8668, 12434, 0, 917782, + 5999, 0, 7712, 12432, 0, 43653, 1726, 1015, 0, 8212, 0, 0, 42423, 119066, + 0, 0, 66709, 0, 8811, 927, 0, 0, 12436, 0, 42021, 0, 0, 1299, 12240, + 42350, 65143, 0, 195016, 0, 78197, 11348, 0, 78037, 0, 0, 0, 19914, + 12179, 0, 9648, 194923, 63836, 63832, 917773, 10967, 63816, 2594, 3444, + 63817, 64651, 0, 41503, 0, 11265, 0, 0, 194922, 0, 5664, 3972, 0, 0, 0, + 917766, 12416, 917764, 119608, 10816, 917769, 917768, 12418, 74111, 3882, + 8532, 917771, 1573, 0, 119847, 4596, 66339, 12417, 66001, 65343, 194782, + 12414, 8287, 68219, 195017, 68108, 1143, 119169, 0, 12415, 6626, 42763, + 0, 118884, 9021, 120783, 0, 11724, 0, 0, 127104, 194794, 0, 0, 8027, + 10997, 9171, 12741, 11400, 74197, 194799, 0, 194798, 0, 0, 0, 127523, + 120190, 194773, 67608, 194772, 42368, 0, 7715, 3881, 41487, 12118, 42514, + 68651, 0, 0, 3009, 41476, 41489, 69825, 3007, 1448, 3018, 194809, 3889, 8521, 5083, 5082, 119859, 120184, 8519, 0, 3014, 5081, 65853, 0, 0, - 120183, 0, 5079, 64802, 65095, 4597, 65532, 0, 0, 12371, 0, 8407, 0, - 10805, 8518, 10779, 120188, 0, 0, 12367, 42170, 0, 0, 629, 1924, 0, - 12037, 74366, 5987, 8462, 8005, 12365, 66689, 0, 120815, 12369, 10649, 0, - 5077, 127108, 10880, 63927, 5075, 0, 0, 65075, 0, 11007, 0, 66659, 0, 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, 0, - 5276, 43021, 0, 0, 0, 0, 66461, 5177, 41324, 12055, 8722, 0, 41327, 0, - 66695, 4114, 409, 4383, 8900, 8948, 41325, 0, 721, 10182, 9108, 0, 0, - 119185, 0, 0, 0, 5998, 0, 42353, 74825, 0, 12587, 0, 0, 0, 0, 0, 41576, - 74121, 0, 119207, 0, 8578, 5995, 7573, 41575, 74789, 74752, 63944, 63949, - 0, 2670, 4167, 0, 11723, 0, 74120, 0, 65076, 938, 73857, 73854, 11737, - 9721, 0, 0, 0, 11742, 0, 0, 11493, 12334, 0, 4153, 12302, 10793, 5250, - 12407, 11978, 4404, 9189, 12401, 42007, 5775, 42005, 65806, 0, 0, 42002, - 12404, 0, 0, 4940, 12410, 7683, 1167, 0, 4983, 0, 861, 0, 0, 0, 0, 65577, - 0, 0, 0, 11956, 0, 0, 0, 9616, 6631, 0, 12816, 74583, 0, 12710, 0, 12721, - 4101, 66185, 0, 5992, 7616, 0, 0, 12577, 0, 0, 853, 0, 0, 0, 0, 5016, - 43535, 0, 42835, 9491, 917913, 0, 917914, 0, 12712, 917919, 0, 65060, + 120183, 78219, 5079, 64802, 42210, 4597, 65532, 78444, 120185, 12371, 0, + 8407, 0, 10805, 8518, 10779, 120188, 0, 0, 12367, 42170, 0, 0, 629, 1924, + 0, 12037, 74366, 5987, 8462, 8005, 12365, 63933, 127370, 120815, 12369, + 10649, 0, 5077, 127108, 10880, 63927, 5075, 0, 0, 65075, 0, 11007, 0, + 66659, 0, 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, 0, 0, 55236, 0, 66461, 5177, 41324, 12055, + 8722, 0, 41327, 0, 66695, 4114, 409, 4383, 8900, 8948, 41325, 0, 721, + 10182, 9108, 0, 0, 119185, 42229, 194912, 0, 5998, 0, 42353, 74825, 0, + 12587, 0, 78571, 0, 0, 0, 41576, 42215, 78570, 119207, 0, 8578, 5995, + 7573, 41575, 74789, 74752, 63944, 63949, 64767, 2670, 4167, 0, 11723, 0, + 74120, 0, 65076, 938, 43414, 73854, 11737, 9721, 0, 0, 0, 11742, 0, 0, + 11493, 12334, 0, 4153, 12302, 10793, 5250, 12407, 11978, 4404, 9189, + 12401, 42007, 5775, 6759, 65806, 43997, 0, 42002, 12404, 0, 0, 4940, + 12410, 7683, 1167, 73729, 4983, 0, 861, 0, 0, 0, 0, 65577, 43370, 0, 0, + 11956, 0, 0, 0, 9616, 6631, 0, 12816, 74583, 42218, 12710, 68674, 12721, + 4101, 66185, 0, 5992, 7616, 0, 0, 12577, 0, 0, 853, 42693, 0, 0, 0, 5016, + 43535, 63893, 42835, 9491, 917913, 0, 917914, 0, 12712, 917919, 0, 65060, 120797, 9900, 0, 0, 194919, 0, 0, 0, 64778, 12585, 10565, 0, 12177, 0, 0, - 0, 0, 0, 4900, 0, 0, 0, 8984, 4119, 0, 8971, 0, 43113, 9702, 0, 11025, - 9245, 13048, 4927, 4138, 0, 194921, 0, 12397, 0, 0, 13054, 12394, 0, 0, - 0, 13053, 0, 3948, 10781, 1546, 0, 5010, 1680, 10507, 0, 0, 0, 0, 0, 0, - 7267, 0, 74833, 0, 5993, 2819, 0, 12706, 0, 1893, 7266, 63915, 7264, - 7265, 0, 1363, 0, 63997, 63910, 63996, 3077, 0, 0, 1512, 0, 12589, 41479, - 0, 0, 43339, 0, 9836, 120727, 0, 41481, 43335, 7832, 42343, 3090, 43337, - 817, 1664, 1850, 0, 3079, 11340, 42408, 42447, 0, 120020, 42307, 12386, - 42304, 0, 0, 12389, 0, 0, 41996, 11526, 63985, 5864, 1147, 66688, 42887, - 1987, 0, 5480, 7858, 11653, 4116, 12391, 66193, 0, 4939, 12384, 0, 0, - 41686, 63905, 119601, 0, 0, 0, 0, 0, 0, 8247, 507, 91, 2042, 120775, 0, - 0, 66028, 10036, 41844, 119830, 774, 119831, 0, 119815, 5994, 12539, 0, - 119817, 120597, 119833, 0, 0, 0, 0, 7719, 6026, 2486, 0, 0, 162, 0, - 65219, 41073, 9687, 41681, 6304, 119812, 66196, 0, 5262, 0, 66658, 12681, - 42379, 0, 7534, 12219, 0, 0, 42810, 10492, 0, 0, 0, 43119, 0, 120753, - 12403, 2500, 195013, 0, 4899, 0, 0, 0, 74113, 2343, 4103, 19946, 74112, - 0, 13112, 0, 0, 12859, 0, 0, 66369, 5861, 0, 11999, 12400, 0, 0, 12645, - 5146, 11320, 0, 67612, 65040, 0, 64184, 12974, 64183, 67613, 120645, - 5147, 0, 0, 74524, 0, 1928, 0, 0, 5991, 3445, 67609, 4976, 64176, 0, - 67610, 8241, 0, 0, 4206, 0, 0, 0, 0, 0, 10138, 0, 0, 8897, 0, 0, 8357, - 4124, 0, 65836, 120641, 0, 0, 0, 0, 1123, 963, 41553, 10120, 12405, 0, 0, - 398, 13278, 9723, 41551, 120311, 7945, 0, 4402, 10896, 12402, 0, 42392, - 1305, 12408, 0, 0, 0, 0, 41464, 12411, 12969, 120824, 41465, 0, 195017, - 1575, 0, 63955, 165, 3024, 41467, 119163, 0, 9093, 0, 9147, 0, 0, 0, - 9148, 9692, 4096, 53, 73776, 12368, 195018, 0, 9594, 0, 0, 43527, 0, 727, - 0, 0, 5805, 0, 0, 0, 42176, 12370, 11655, 119095, 10591, 12364, 0, 12372, - 120642, 0, 0, 0, 0, 12366, 10963, 6066, 1329, 0, 3052, 9220, 0, 64478, 0, - 10803, 4132, 0, 0, 0, 0, 0, 74837, 0, 1499, 0, 8055, 0, 63965, 0, 63962, - 74042, 8924, 43123, 5988, 3660, 63969, 11781, 63968, 8788, 1357, 64851, - 65743, 0, 8774, 0, 127086, 67618, 120172, 0, 1933, 0, 9564, 0, 0, 73866, - 0, 0, 2487, 67614, 3121, 1804, 3311, 67615, 0, 0, 12220, 67616, 120598, - 0, 0, 0, 6675, 0, 0, 67592, 120685, 0, 64771, 1198, 9132, 0, 64619, 510, - 64663, 0, 0, 4561, 7711, 1398, 0, 0, 74034, 41569, 0, 11406, 8167, 12127, - 0, 840, 0, 0, 0, 6967, 0, 0, 9796, 0, 333, 0, 0, 8144, 0, 0, 0, 12406, 0, - 0, 0, 6678, 7769, 0, 12621, 0, 0, 10227, 4764, 43101, 0, 0, 40986, 4127, - 66487, 0, 0, 12754, 195022, 0, 0, 0, 67594, 65609, 12944, 4050, 67595, 0, - 43102, 10581, 12985, 4533, 0, 0, 6490, 0, 12038, 0, 0, 120704, 65461, - 9798, 0, 0, 1948, 119007, 0, 952, 0, 0, 0, 120802, 6449, 9494, 0, 0, - 43098, 4843, 8142, 64160, 4098, 64170, 0, 0, 3436, 0, 0, 12817, 67597, - 6676, 3930, 66708, 0, 0, 67598, 0, 0, 0, 65591, 41581, 65916, 1453, 0, 0, - 0, 8500, 0, 120142, 73743, 120400, 4317, 120140, 0, 64676, 0, 0, 67606, - 119083, 0, 0, 13102, 0, 66003, 6672, 0, 0, 0, 0, 63841, 9613, 9001, 4526, - 11274, 67601, 64520, 64210, 6664, 0, 42056, 10228, 64957, 11281, 0, - 64213, 1469, 66640, 65381, 0, 4988, 42372, 0, 9598, 904, 352, 0, 1451, - 8061, 8453, 4134, 0, 74847, 67600, 0, 0, 10520, 8575, 0, 1201, 0, 12846, - 0, 0, 11919, 64962, 0, 74864, 0, 8511, 9460, 823, 11587, 12305, 0, 64695, - 0, 12387, 1253, 13183, 65766, 500, 42783, 65765, 64208, 64369, 65760, - 65761, 119585, 11606, 64784, 11702, 66498, 9821, 0, 0, 5152, 11048, 7533, - 120121, 64410, 0, 0, 4323, 120062, 0, 0, 0, 42587, 65339, 41394, 0, 4763, - 4112, 118935, 0, 5260, 43143, 0, 326, 120131, 0, 0, 10771, 2876, 194915, - 194835, 194924, 41398, 127079, 9802, 127077, 127076, 453, 41396, 120524, - 0, 12140, 9572, 0, 7003, 194883, 42334, 7704, 0, 0, 43144, 4123, 0, - 43146, 0, 0, 0, 65759, 10765, 64061, 4465, 9808, 64056, 65582, 4126, 0, - 9521, 9589, 64755, 0, 64020, 0, 10464, 0, 0, 194869, 64514, 11528, 64024, - 0, 679, 64013, 0, 5850, 758, 7536, 0, 0, 41441, 10693, 64006, 0, 64005, - 10541, 119019, 0, 64660, 0, 119050, 0, 0, 1139, 43298, 64027, 64029, - 8970, 0, 64000, 0, 10774, 0, 42522, 12421, 194876, 0, 1852, 3057, 0, - 73744, 64034, 64041, 0, 0, 0, 0, 0, 7645, 12854, 74338, 3496, 0, 0, 0, - 9102, 627, 0, 6158, 8327, 74553, 66632, 12419, 0, 11570, 0, 19960, 11696, - 0, 1018, 0, 194909, 0, 1682, 194896, 0, 42756, 12951, 194906, 0, 0, - 73814, 11412, 12563, 10728, 194830, 0, 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, 0, - 64483, 65693, 0, 0, 0, 0, 42240, 0, 0, 42864, 0, 64667, 41868, 1184, 0, - 815, 11484, 0, 67840, 0, 0, 0, 0, 0, 64683, 0, 0, 0, 0, 0, 9879, 0, 0, - 4158, 0, 68166, 0, 0, 0, 0, 0, 332, 118808, 0, 5142, 2407, 0, 0, 0, 0, - 74373, 0, 0, 0, 63870, 43163, 0, 0, 119081, 42867, 1834, 0, 0, 0, 10940, - 65249, 119040, 8662, 0, 0, 2652, 120527, 11539, 10784, 195093, 0, 0, 0, - 0, 0, 118858, 917505, 1828, 74474, 120327, 0, 8531, 12499, 6280, 12324, - 118854, 65238, 0, 4832, 65573, 0, 6279, 12508, 12904, 12502, 9161, 0, - 1620, 0, 3601, 0, 0, 0, 609, 11555, 0, 12496, 0, 74181, 4343, 12505, 0, - 0, 0, 11377, 239, 0, 637, 0, 0, 43029, 0, 0, 0, 43565, 127082, 0, 12696, - 0, 0, 0, 12929, 0, 712, 0, 4197, 0, 42818, 0, 0, 120490, 0, 0, 1506, - 43562, 0, 0, 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, 0, 42571, 0, 0, 0, 0, 0, 0, 0, 3178, 0, 0, 0, 0, 9080, - 127000, 0, 0, 0, 0, 11082, 0, 5699, 195100, 0, 9488, 65166, 119112, 0, 0, - 0, 0, 0, 0, 5265, 0, 0, 11487, 67858, 12464, 0, 43045, 0, 0, 43345, 0, - 10770, 118994, 43344, 465, 9829, 0, 74348, 0, 43346, 8116, 795, 0, 0, - 12462, 10930, 10831, 0, 118952, 64362, 0, 0, 120811, 0, 12468, 8607, - 1008, 0, 10092, 0, 917842, 67855, 0, 73771, 1766, 11282, 11996, 1820, - 4547, 0, 0, 0, 0, 13223, 0, 64595, 0, 0, 0, 4345, 12616, 0, 0, 0, 74467, - 0, 0, 0, 5382, 0, 0, 0, 119060, 64953, 5406, 19920, 0, 66510, 3590, 0, - 1130, 0, 0, 42016, 11823, 43023, 0, 118896, 7742, 0, 13280, 0, 9326, - 73826, 5310, 74812, 0, 119962, 8959, 43589, 74334, 66723, 0, 8568, 0, - 120496, 73816, 120803, 0, 0, 0, 11621, 12460, 0, 0, 0, 0, 74519, 0, 0, 0, + 0, 77824, 0, 4900, 0, 12878, 0, 8984, 4119, 74768, 8971, 78593, 43113, + 9702, 78594, 11025, 9245, 13048, 4927, 4138, 74185, 194921, 0, 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, 0, 5993, + 2819, 0, 12706, 77840, 1893, 7266, 63915, 7264, 7265, 0, 1363, 0, 63997, + 63910, 63996, 3077, 0, 0, 1512, 0, 12589, 41479, 0, 0, 43339, 0, 9836, + 120727, 0, 41481, 43335, 7832, 42343, 3090, 43337, 817, 1664, 1850, 0, + 3079, 11340, 42408, 42447, 194704, 120020, 42307, 12386, 42304, 0, 0, + 12389, 0, 194694, 41996, 11526, 63985, 5864, 1147, 63992, 42887, 1987, 0, + 5480, 7858, 11653, 4116, 12391, 66193, 0, 4939, 12384, 0, 0, 41686, + 63905, 119601, 194688, 0, 0, 12649, 0, 0, 8247, 507, 91, 2042, 120775, + 43643, 194689, 66028, 10036, 41844, 119813, 774, 119831, 0, 119815, 5994, + 12539, 0, 78375, 120597, 119833, 0, 119600, 0, 0, 7719, 6026, 2486, 0, + 119808, 162, 0, 65219, 41073, 9687, 41681, 6304, 119812, 66196, 0, 5262, + 0, 55233, 12681, 42379, 0, 7534, 12219, 0, 127528, 42810, 10492, 0, 0, 0, + 43119, 0, 120753, 12403, 2500, 195013, 0, 4899, 0, 0, 0, 74113, 2343, + 4103, 19946, 74112, 77851, 13112, 0, 0, 12859, 0, 120148, 66369, 5861, 0, + 11999, 12400, 0, 0, 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, 0, 0, + 10138, 0, 0, 8897, 0, 0, 8357, 4124, 77862, 65836, 120641, 0, 77859, 0, + 0, 1123, 963, 41553, 10120, 12405, 120150, 0, 398, 13278, 9723, 6366, + 120311, 7945, 0, 4402, 9970, 12402, 0, 42392, 1305, 12408, 0, 44007, 0, + 0, 41464, 12411, 12969, 120824, 41465, 0, 8528, 1575, 0, 63955, 165, + 3024, 41467, 119163, 0, 9093, 0, 9147, 0, 63958, 0, 9148, 9692, 4096, 53, + 73776, 6750, 195018, 0, 9594, 0, 0, 43527, 0, 727, 0, 0, 5805, 0, 6726, + 0, 42176, 12370, 11655, 119095, 10591, 12364, 0, 12372, 120642, 120307, + 0, 0, 0, 12366, 10963, 6066, 1329, 0, 3052, 9220, 0, 64478, 0, 10803, + 4132, 120306, 68474, 0, 0, 0, 74837, 0, 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, 120154, 9564, 0, + 0, 73866, 0, 0, 2487, 67614, 3121, 1804, 3311, 67615, 0, 78302, 12220, + 67616, 120598, 0, 0, 68200, 6675, 0, 0, 67592, 120685, 0, 64771, 1198, + 9132, 0, 64619, 510, 64663, 0, 0, 4561, 2101, 1398, 0, 0, 74034, 41569, + 0, 11406, 8167, 12127, 0, 840, 0, 0, 0, 6967, 0, 0, 9796, 0, 333, 0, 0, + 8144, 0, 0, 0, 12406, 0, 19931, 119089, 6678, 7769, 0, 12621, 0, 0, + 10227, 4764, 43101, 9981, 0, 40986, 4127, 66487, 0, 42202, 12754, 195022, + 0, 0, 0, 67594, 2048, 12944, 4050, 67595, 917967, 43102, 10581, 12985, + 4533, 195021, 74003, 6490, 0, 12038, 0, 0, 120704, 65461, 9798, 0, 0, + 1948, 119007, 0, 952, 0, 0, 0, 120802, 6449, 9494, 120313, 0, 43098, + 4843, 8142, 64160, 4098, 64170, 0, 0, 3436, 0, 0, 12817, 67597, 6676, + 3930, 66708, 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, 0, 63841, 9613, + 9001, 4526, 11274, 67601, 64520, 64210, 6664, 78704, 42056, 10228, 64957, + 11281, 0, 64213, 1469, 66640, 65381, 42197, 4988, 42372, 0, 9598, 904, + 352, 42225, 1451, 8061, 8453, 4134, 0, 74847, 66576, 0, 0, 10520, 8575, + 9960, 1201, 0, 12846, 0, 0, 11919, 64962, 0, 43739, 127281, 8511, 9460, + 823, 11587, 12305, 0, 64695, 0, 12387, 1253, 13183, 65766, 500, 42783, + 65765, 64208, 64369, 65760, 65761, 119585, 11606, 64784, 11702, 66498, + 9821, 0, 0, 5152, 11048, 7533, 68366, 64410, 0, 0, 4323, 120062, 0, 0, + 127052, 42587, 42214, 41394, 0, 4763, 4112, 118935, 0, 5260, 43143, 0, + 326, 120131, 68423, 0, 10771, 2876, 74074, 194835, 194924, 41398, 7382, + 9802, 127077, 127076, 453, 41396, 120524, 42720, 12140, 9572, 0, 7003, + 194883, 42334, 7704, 0, 0, 43144, 4123, 8494, 43146, 9977, 0, 0, 65759, + 10765, 64061, 4465, 9808, 64056, 65582, 4126, 0, 9521, 9589, 64755, 0, + 64020, 0, 10464, 0, 0, 194869, 64514, 11528, 64024, 0, 679, 64013, 0, + 5850, 758, 7536, 0, 0, 41441, 10693, 64006, 0, 64005, 10541, 119019, 0, + 64660, 0, 119050, 0, 0, 1139, 43298, 64027, 64029, 8970, 0, 64000, 0, + 10774, 0, 42201, 12421, 194876, 0, 1852, 3057, 0, 73744, 64034, 64039, 0, + 0, 0, 0, 0, 7645, 12854, 74338, 3496, 0, 0, 0, 9102, 627, 0, 6158, 8327, + 74553, 66632, 12419, 13309, 11570, 0, 19960, 11696, 0, 1018, 118970, + 194909, 0, 1682, 194896, 194911, 42756, 6765, 194906, 0, 0, 73814, 11412, + 6768, 10728, 194830, 119010, 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, 0, 42240, 0, 0, 42864, 0, 64667, 41868, 1184, 0, 815, + 11484, 127535, 67840, 0, 0, 0, 0, 10986, 64683, 0, 0, 0, 0, 0, 9879, 0, + 0, 4158, 0, 68166, 0, 0, 0, 0, 0, 332, 118808, 0, 5142, 2407, 0, 42199, + 0, 0, 74373, 0, 55217, 0, 63870, 43163, 0, 0, 119081, 42867, 1834, 0, 0, + 69817, 10940, 65249, 119040, 8662, 0, 0, 2652, 120527, 11539, 10784, + 195093, 67674, 0, 0, 0, 0, 74562, 917505, 1828, 74474, 120327, 78620, + 8531, 12499, 6280, 12324, 118854, 65238, 68374, 4832, 65573, 0, 6279, + 12508, 12904, 12502, 9161, 0, 1620, 0, 3601, 195094, 0, 0, 609, 11555, 0, + 12496, 0, 74181, 4343, 12505, 0, 0, 0, 11377, 239, 0, 637, 0, 0, 42671, + 0, 0, 0, 43565, 127082, 0, 12696, 0, 0, 0, 12929, 0, 712, 0, 4197, 0, + 42818, 0, 0, 120490, 0, 0, 1506, 43562, 0, 0, 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, 917837, 0, 0, + 0, 0, 0, 0, 3178, 0, 0, 0, 0, 9080, 127000, 120352, 0, 68209, 0, 11082, + 0, 5699, 195100, 66000, 9488, 65166, 119112, 0, 0, 0, 0, 0, 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, 0, 120811, 0, 12468, 8607, 1008, 0, + 10092, 0, 917842, 67855, 55257, 73771, 1766, 11282, 11996, 1820, 4547, 0, + 0, 0, 0, 13223, 0, 64595, 0, 0, 0, 4345, 12616, 0, 0, 0, 74467, 0, 0, 0, + 5382, 0, 0, 0, 119060, 64953, 5406, 19920, 0, 66510, 3590, 0, 1130, 0, 0, + 42016, 11823, 43023, 0, 118896, 7742, 0, 13280, 0, 9326, 73826, 5310, + 74812, 0, 119962, 8959, 43589, 6747, 66723, 0, 8568, 0, 120496, 73816, + 120803, 0, 42670, 0, 11621, 12460, 0, 120631, 0, 43063, 74519, 0, 0, 0, 0, 0, 11689, 5410, 5783, 10468, 8403, 5400, 11594, 0, 0, 118990, 10491, 0, 64412, 0, 0, 5587, 42865, 64404, 8268, 4923, 65086, 8981, 12382, - 42133, 120755, 9706, 0, 0, 66610, 10461, 12103, 0, 8642, 0, 42766, 0, 0, - 0, 0, 119105, 0, 0, 0, 8816, 41515, 0, 11802, 8041, 1461, 910, 119133, 0, - 0, 3658, 0, 120525, 0, 7617, 0, 12888, 0, 0, 13143, 0, 41514, 0, 5703, 0, - 41517, 41504, 41519, 10016, 64305, 0, 65864, 623, 781, 670, 10660, 5769, - 613, 7543, 120774, 477, 41083, 0, 0, 592, 1578, 12459, 0, 0, 0, 8225, 0, - 654, 11345, 653, 652, 0, 647, 0, 633, 120744, 0, 0, 12480, 74354, 0, 39, - 12487, 0, 120529, 74199, 12482, 0, 12489, 0, 3195, 5550, 0, 7897, 0, - 1203, 74396, 1813, 64544, 41311, 12090, 0, 2877, 0, 0, 1675, 0, 0, 0, 0, - 10070, 10595, 0, 119077, 0, 0, 0, 0, 0, 118827, 0, 0, 0, 119561, 0, 0, 0, - 0, 0, 0, 0, 120692, 0, 0, 270, 0, 10714, 0, 0, 0, 0, 0, 65372, 0, 74038, - 119558, 6273, 66679, 364, 9595, 0, 0, 0, 707, 0, 0, 9282, 66489, 224, 0, - 0, 9332, 4966, 0, 0, 0, 0, 3841, 0, 0, 10732, 0, 850, 4972, 0, 64699, - 2909, 0, 65309, 0, 0, 11544, 10203, 9608, 0, 0, 11962, 0, 12507, 1196, 0, - 0, 777, 0, 4375, 65271, 0, 0, 12198, 0, 64824, 0, 0, 9454, 63778, 8658, - 42528, 0, 2705, 917975, 41520, 0, 0, 11986, 7765, 42502, 8280, 0, 2701, - 0, 0, 5767, 0, 0, 9809, 8353, 63747, 66701, 63772, 0, 63745, 1748, 63770, - 0, 0, 0, 65542, 63766, 0, 3061, 0, 63764, 63789, 9067, 6096, 0, 7694, 0, - 7257, 63768, 3485, 12987, 0, 0, 0, 63807, 1591, 0, 0, 63783, 0, 0, 0, 0, - 0, 0, 74575, 0, 65719, 13083, 64574, 65012, 0, 1640, 12495, 66691, 7624, - 3138, 10996, 0, 1922, 0, 12498, 10987, 0, 0, 3894, 65543, 0, 194842, 0, - 493, 0, 43197, 1717, 4228, 479, 10303, 917934, 0, 917935, 10335, 3520, - 917932, 12490, 64315, 0, 127039, 12493, 6233, 64636, 1002, 12491, 0, - 64911, 127040, 0, 65120, 0, 0, 0, 11611, 66228, 127041, 66213, 63864, - 66221, 66226, 66229, 13218, 66231, 66216, 8507, 66236, 66211, 66218, 0, - 66240, 0, 66233, 8928, 0, 7909, 66234, 11605, 63759, 0, 66208, 73999, - 63799, 0, 244, 11542, 12898, 12494, 73761, 12492, 12669, 0, 0, 74153, 0, - 0, 120680, 4882, 13040, 0, 8612, 4885, 74053, 0, 13042, 4880, 64662, - 2429, 1360, 248, 0, 63797, 0, 63792, 0, 7292, 0, 63756, 42786, 66693, 0, - 1870, 917916, 470, 0, 0, 120306, 0, 0, 4579, 0, 0, 12511, 74453, 12514, - 0, 74579, 7239, 7001, 8623, 0, 0, 0, 0, 12512, 11615, 13041, 0, 0, 659, - 6098, 0, 12234, 0, 127067, 8311, 12510, 41803, 13039, 127072, 12513, - 10202, 12471, 0, 8747, 0, 0, 0, 2323, 0, 2319, 0, 12477, 0, 2311, 0, - 4415, 237, 6281, 0, 0, 0, 2309, 1312, 8173, 0, 12469, 0, 0, 64335, 10609, - 0, 0, 9397, 11524, 9395, 9396, 9393, 9394, 9391, 9392, 9389, 6209, 9387, - 9388, 4932, 9386, 9383, 9384, 0, 0, 65451, 8185, 0, 917832, 43024, 43336, - 74375, 2313, 0, 7948, 9236, 0, 0, 0, 10570, 0, 6289, 10484, 0, 0, 11998, - 12082, 10924, 3147, 0, 0, 12524, 0, 2310, 11818, 9381, 9382, 9379, 9380, + 42133, 120755, 9706, 0, 0, 66610, 10461, 12103, 0, 8642, 0, 42766, 0, + 66566, 9983, 0, 119105, 0, 0, 0, 7398, 41515, 0, 11802, 8041, 1461, 910, + 119133, 0, 6749, 3658, 0, 120525, 0, 7617, 0, 12888, 0, 67668, 13143, 0, + 41514, 11097, 5703, 0, 41517, 41504, 41519, 10016, 64305, 0, 65864, 623, + 781, 670, 10660, 5769, 613, 7543, 120279, 477, 41083, 0, 0, 592, 1578, + 12459, 43449, 0, 0, 8225, 0, 654, 11345, 653, 652, 0, 647, 0, 633, + 120744, 0, 0, 12480, 43243, 0, 39, 12487, 0, 120529, 74199, 12482, 0, + 12489, 0, 3195, 5550, 0, 7897, 0, 1203, 74396, 1813, 64544, 41311, 12090, + 0, 2877, 0, 0, 1675, 0, 0, 0, 0, 10070, 10595, 0, 119077, 0, 0, 0, 0, 0, + 43244, 0, 0, 0, 119561, 0, 0, 0, 0, 0, 0, 0, 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, 64699, 2909, 68619, 44008, + 68627, 0, 11544, 10203, 9608, 0, 0, 11962, 0, 12507, 1196, 0, 0, 777, 0, + 4375, 65271, 67678, 0, 12198, 0, 64824, 0, 0, 9454, 63778, 8658, 42528, + 0, 2705, 917975, 41520, 0, 0, 11986, 7765, 42502, 8280, 0, 2701, 0, 0, + 5767, 0, 0, 9809, 8353, 63747, 66701, 63772, 0, 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, 0, 0, 0, 0, 74575, 0, 65719, 13083, 64574, 65012, 0, 1640, 12495, + 66691, 7624, 3138, 10996, 0, 1922, 0, 12498, 10987, 0, 0, 3894, 65543, 0, + 194842, 0, 493, 0, 43197, 1717, 4228, 479, 10303, 74020, 0, 917935, + 10335, 3520, 917932, 12490, 64315, 0, 127039, 12493, 6233, 42681, 1002, + 12491, 0, 64911, 127040, 2096, 65120, 0, 0, 0, 11611, 66228, 127041, + 66213, 63864, 66221, 66226, 66229, 13218, 66231, 66216, 8507, 66236, + 66211, 66218, 0, 66240, 78041, 66233, 8928, 0, 7909, 66234, 11605, 63759, + 0, 66208, 73999, 63799, 63803, 244, 11542, 12898, 12494, 73761, 12492, + 12669, 0, 0, 74153, 0, 0, 120680, 4882, 13040, 0, 8612, 4885, 74053, 0, + 13042, 4880, 64662, 2429, 1360, 248, 0, 63797, 0, 42358, 0, 7292, 0, + 63756, 42786, 66693, 0, 1870, 78040, 470, 78038, 78035, 78036, 0, 78034, + 4579, 0, 0, 12511, 74453, 12514, 0, 74579, 7239, 7001, 8623, 0, 0, 0, + 7378, 12512, 11615, 6104, 0, 0, 659, 6098, 0, 12234, 127307, 127067, + 8311, 12510, 41803, 13039, 127072, 12513, 10202, 12471, 0, 8747, 0, 0, 0, + 2323, 0, 2319, 77917, 12477, 77916, 2311, 0, 4415, 237, 6281, 0, 0, 0, + 2309, 1312, 8173, 0, 12469, 0, 78505, 64335, 10609, 0, 0, 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, + 0, 7948, 9236, 0, 0, 0, 10570, 43473, 6289, 10484, 0, 0, 11998, 12082, + 10924, 3147, 0, 120684, 12524, 0, 2310, 11818, 9381, 9382, 9379, 9380, 9377, 9378, 9375, 9376, 1683, 9374, 0, 9372, 12444, 0, 0, 13016, 8210, 0, - 42029, 11079, 12331, 0, 42032, 8744, 726, 0, 0, 4155, 0, 0, 42030, 5007, - 12522, 43088, 0, 4951, 0, 0, 0, 9922, 43309, 0, 12525, 0, 12016, 65770, - 9548, 0, 403, 0, 12503, 0, 0, 11030, 0, 0, 65691, 63998, 1819, 10496, 0, - 0, 119920, 0, 0, 0, 12506, 0, 12231, 0, 12500, 67605, 12509, 64393, 0, - 3389, 10589, 6608, 41047, 120321, 0, 0, 74069, 0, 0, 3608, 8281, 917839, - 1107, 0, 9076, 8862, 0, 41052, 13084, 64766, 43217, 7803, 13222, 118963, - 74782, 0, 8546, 11553, 63995, 13177, 9043, 6303, 0, 498, 64471, 120324, - 0, 12529, 8042, 0, 2344, 12528, 8031, 2414, 0, 0, 3231, 0, 6422, 66512, - 0, 12530, 2537, 0, 41429, 12658, 13036, 65772, 0, 0, 41433, 4719, 469, 0, - 4363, 3313, 41428, 0, 2023, 1772, 0, 0, 65706, 10051, 64812, 0, 0, 9920, - 12215, 0, 4931, 1951, 12497, 119363, 9607, 0, 9663, 0, 119634, 6503, - 41110, 0, 1491, 0, 0, 0, 41061, 0, 0, 0, 65026, 41993, 41509, 11045, - 65028, 0, 66476, 41108, 9738, 41995, 1075, 1958, 12535, 41992, 41506, 0, - 41687, 0, 120717, 0, 917816, 0, 7692, 0, 8008, 0, 330, 8566, 65083, - 41133, 9816, 0, 12532, 127055, 127056, 3508, 127058, 127059, 0, 917542, - 917815, 0, 6411, 12910, 120505, 66644, 13028, 0, 12537, 0, 0, 64136, - 12536, 2350, 13029, 0, 0, 0, 13030, 0, 4527, 0, 12538, 0, 0, 65599, - 65717, 12607, 0, 4948, 12484, 4032, 0, 42803, 0, 6207, 0, 6117, 66000, - 8412, 0, 7438, 1296, 2325, 41511, 0, 10149, 74118, 0, 0, 12481, 0, 12488, - 0, 0, 41556, 64414, 118802, 2354, 0, 73766, 0, 6295, 901, 41510, 7953, 0, - 65032, 41513, 0, 11927, 66584, 0, 0, 119010, 0, 0, 0, 848, 9868, 0, 6424, - 0, 119338, 0, 74031, 0, 0, 2352, 0, 893, 64576, 11289, 1407, 0, 0, 13026, - 0, 0, 0, 13023, 8903, 9777, 66715, 1871, 8099, 0, 0, 1343, 0, 0, 9325, - 13025, 6283, 11738, 0, 0, 0, 11741, 0, 0, 9216, 8263, 11279, 194752, 0, - 194754, 13021, 64494, 3136, 194758, 194757, 194760, 13022, 0, 64588, 0, - 0, 74552, 10014, 0, 41260, 119340, 13020, 118993, 194764, 194767, 74340, - 0, 0, 64945, 8029, 0, 0, 0, 3335, 0, 0, 9776, 120526, 194748, 5215, - 42644, 3333, 1632, 194751, 64849, 3342, 0, 5363, 12957, 0, 4156, 0, 0, - 6421, 0, 1611, 0, 13018, 74257, 0, 0, 3337, 4537, 67895, 11736, 0, 0, - 6482, 4214, 73790, 11945, 0, 13046, 8838, 425, 4025, 10709, 0, 73927, - 2392, 13047, 0, 0, 10617, 13049, 6499, 194739, 12424, 194741, 73944, - 13050, 194742, 194745, 6507, 0, 0, 0, 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, 194734, - 41057, 0, 0, 0, 0, 0, 0, 0, 0, 41496, 0, 9165, 1572, 11911, 0, 118842, - 2346, 13270, 8958, 0, 9646, 3773, 43183, 6401, 42536, 0, 0, 13043, 8056, - 0, 65681, 208, 0, 0, 0, 0, 0, 10699, 6408, 0, 7825, 5661, 0, 120630, - 3603, 41109, 2398, 3548, 0, 0, 0, 0, 3115, 0, 0, 11321, 0, 0, 0, 194726, - 4876, 74286, 0, 0, 0, 0, 41558, 41471, 73950, 8158, 41561, 41472, 0, - 13051, 194672, 3143, 194674, 194673, 41559, 1896, 66256, 13052, 194680, - 5665, 0, 119071, 41986, 63974, 0, 74352, 74161, 4154, 9863, 43550, 12310, - 5662, 42382, 194686, 73924, 1121, 194665, 63959, 0, 74378, 13231, 0, - 64752, 4732, 194666, 11596, 194668, 65187, 1626, 63983, 10110, 194671, - 42024, 6420, 42028, 0, 10509, 2795, 4910, 194728, 0, 64753, 6275, 0, - 118830, 63978, 11044, 3229, 6423, 42774, 0, 0, 0, 12823, 2331, 917810, - 42026, 6137, 0, 7524, 0, 0, 119343, 0, 8338, 0, 65043, 0, 822, 0, 9903, - 64721, 194657, 194656, 194659, 194658, 194661, 194660, 0, 41265, 5311, - 1795, 965, 118791, 10587, 0, 11278, 0, 194640, 0, 12946, 194641, 120705, - 194643, 6294, 3144, 194648, 194647, 65019, 194649, 73990, 0, 0, 748, - 41067, 2330, 535, 3148, 12375, 194652, 194629, 10556, 2475, 12388, 4889, - 8968, 67863, 3593, 0, 0, 2342, 0, 194634, 65206, 4894, 194635, 4890, - 194637, 0, 581, 4893, 0, 0, 65545, 4888, 4157, 917805, 0, 0, 0, 0, 10119, - 6415, 0, 0, 0, 0, 0, 11375, 64746, 2332, 0, 412, 0, 64932, 42880, 43587, - 0, 0, 0, 0, 65197, 0, 12203, 0, 0, 8913, 65854, 4875, 65811, 120381, - 194624, 120397, 9344, 8826, 120386, 120395, 13104, 74781, 11997, 120393, - 0, 0, 3134, 0, 65696, 0, 0, 66217, 0, 8334, 119344, 0, 3449, 0, 0, 0, 0, - 118950, 74011, 0, 0, 0, 0, 1908, 0, 4328, 10734, 127014, 0, 0, 7804, 0, - 10811, 6250, 11339, 4914, 11367, 0, 118971, 4917, 74516, 0, 64285, 4912, - 5464, 0, 118893, 2361, 7971, 0, 0, 0, 118986, 0, 8086, 74317, 0, 8319, - 2312, 40977, 10960, 40962, 8305, 12573, 0, 40980, 0, 13202, 0, 12582, 0, - 0, 0, 42438, 0, 6288, 0, 0, 5653, 42400, 10891, 7698, 5658, 74045, 0, 0, - 0, 4913, 0, 0, 0, 42326, 0, 0, 0, 42478, 2327, 0, 12959, 42287, 12705, 0, - 0, 12588, 8821, 6153, 2867, 194708, 66312, 698, 194709, 194712, 10356, - 74075, 194713, 651, 12641, 0, 0, 0, 0, 41552, 65115, 194691, 194690, - 194693, 194692, 194695, 194694, 194697, 74356, 0, 4716, 43277, 0, 0, - 12340, 120568, 0, 194700, 194699, 194702, 120676, 8703, 5462, 917629, 0, + 42029, 11079, 12331, 43451, 42032, 8744, 726, 0, 0, 4155, 0, 0, 42030, + 5007, 12522, 43088, 0, 4951, 0, 127240, 0, 9922, 43309, 0, 12525, 0, + 12016, 65770, 9548, 67665, 403, 78230, 12503, 0, 0, 11030, 0, 0, 65691, + 63998, 1819, 10496, 0, 0, 119920, 0, 0, 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, 0, + 41052, 13084, 64766, 43217, 7803, 13222, 74165, 74782, 0, 8546, 11553, + 63995, 13177, 9043, 6303, 0, 498, 64471, 120324, 0, 12529, 8042, 0, 2344, + 12528, 8031, 2414, 0, 0, 3231, 0, 6422, 66512, 0, 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, 0, 119634, + 6503, 41110, 0, 1491, 0, 0, 0, 41061, 0, 0, 0, 65026, 41993, 41509, + 11045, 65028, 78602, 66476, 41108, 9738, 41995, 1075, 1958, 12535, 41992, + 41506, 0, 41687, 0, 120717, 0, 9940, 0, 7692, 0, 8008, 41131, 330, 8566, + 65083, 41133, 9816, 0, 12532, 78550, 78546, 3508, 127058, 43235, 0, + 127298, 69783, 78231, 6411, 12910, 78554, 66644, 13028, 6737, 12537, 0, + 0, 64136, 12536, 2350, 13029, 78233, 0, 0, 13030, 6702, 4527, 0, 12538, + 0, 0, 65599, 65717, 9966, 0, 4948, 12484, 4032, 0, 12623, 0, 6207, 0, + 6117, 65930, 8412, 0, 7438, 1296, 2325, 41511, 0, 10149, 74118, 0, 0, + 12481, 0, 12488, 0, 0, 41556, 64414, 118802, 2354, 0, 73766, 0, 6295, + 901, 41510, 7953, 0, 65032, 41513, 0, 11927, 66584, 78559, 78560, 78557, + 78558, 0, 78556, 848, 9868, 0, 6424, 78568, 119338, 78565, 74031, 78563, + 78564, 2352, 78572, 893, 64576, 11289, 1407, 0, 0, 13026, 6762, 78579, + 78580, 13023, 8903, 9777, 66715, 1871, 8099, 0, 0, 1343, 0, 0, 9325, + 6818, 6283, 11738, 0, 0, 0, 11741, 0, 0, 9216, 8263, 11279, 194752, 0, + 194754, 13021, 64494, 3136, 194758, 194757, 194760, 13022, 42737, 64588, + 0, 0, 74552, 10014, 0, 41260, 119340, 13020, 118993, 194764, 194767, + 74340, 0, 0, 64945, 8029, 0, 0, 0, 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, 78584, 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, + 194739, 12424, 68614, 73944, 13050, 9924, 194745, 6507, 0, 0, 0, 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, 194734, 41057, 0, 0, 0, 0, 0, 0, 127109, 0, 41496, 0, + 9165, 1572, 11911, 0, 118842, 2346, 13270, 8958, 0, 9646, 3773, 43183, + 6401, 5831, 0, 0, 13043, 8056, 0, 65681, 208, 0, 0, 0, 0, 0, 10699, 6408, + 0, 7825, 5661, 0, 120630, 3603, 41109, 2398, 3548, 0, 0, 119933, 0, 3115, + 9918, 0, 11321, 0, 0, 0, 194726, 4876, 74286, 0, 0, 43468, 0, 41558, + 41471, 73950, 8158, 9944, 41472, 0, 13051, 78689, 3143, 194674, 6701, + 41559, 1896, 66256, 13052, 194680, 5665, 0, 119071, 7025, 63974, 0, + 74352, 74161, 4154, 9863, 43550, 12310, 5662, 42382, 194686, 73924, 1121, + 194665, 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, 917808, 118830, 63978, 11044, 3229, + 6423, 42774, 0, 0, 0, 12823, 2331, 917810, 42026, 6137, 0, 7524, 0, + 917809, 119343, 0, 8338, 0, 65043, 0, 822, 0, 9903, 64721, 42722, 194656, + 194659, 78655, 78661, 194660, 78662, 41265, 5311, 1795, 965, 118791, + 10587, 78055, 11278, 78632, 194640, 0, 12946, 194641, 120705, 194643, + 6294, 3144, 194648, 194647, 65019, 194649, 73990, 0, 0, 748, 41067, 2330, + 535, 3148, 12375, 194652, 194629, 10556, 2475, 12388, 4889, 8968, 67863, + 3593, 0, 0, 2342, 0, 194634, 65206, 4894, 194635, 4890, 194637, 917804, + 581, 4893, 0, 6571, 65545, 4888, 4157, 78048, 78049, 78046, 78047, 0, + 10119, 6415, 0, 0, 0, 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, 0, 0, 66217, 0, 8334, + 119344, 0, 3449, 0, 0, 78414, 78413, 118950, 74011, 0, 0, 0, 0, 1908, + 120167, 4328, 10734, 127014, 0, 0, 7804, 78272, 10811, 6250, 11339, 4914, + 11367, 0, 78054, 4917, 74516, 74208, 64285, 4912, 5464, 0, 118893, 2361, + 7971, 78072, 78073, 55243, 78071, 0, 8086, 74317, 6707, 8319, 2312, + 40977, 10960, 40962, 8305, 12573, 0, 40980, 0, 13202, 0, 12582, 78282, 0, + 0, 42438, 55221, 6288, 78280, 0, 5653, 42400, 10891, 7698, 5658, 74045, + 0, 0, 0, 4913, 0, 0, 0, 42326, 0, 0, 0, 42478, 2327, 0, 12563, 42287, + 12705, 0, 0, 12588, 8821, 6153, 2867, 194708, 66312, 698, 194709, 194606, + 10356, 74075, 194713, 651, 12641, 0, 0, 0, 0, 41552, 65115, 78465, 78467, + 78463, 78464, 194695, 78461, 194697, 74356, 0, 4716, 43277, 0, 78474, + 12340, 120568, 0, 194700, 55264, 41211, 120676, 8703, 5462, 917629, 0, 10101, 0, 0, 8479, 4151, 41933, 0, 0, 66254, 120821, 0, 0, 0, 0, 119194, 74050, 0, 0, 0, 0, 0, 0, 12278, 0, 0, 0, 2700, 12576, 7842, 12899, 0, 0, - 2699, 0, 0, 2985, 119222, 0, 0, 12192, 119314, 0, 119312, 9827, 119310, - 119311, 119308, 119309, 119306, 11481, 41210, 119305, 0, 35, 0, 0, 66694, - 74357, 0, 0, 43596, 6090, 64257, 7812, 10534, 0, 0, 73848, 0, 4272, 0, - 40967, 40964, 917825, 12704, 0, 43306, 0, 64497, 12138, 7930, 0, 43303, - 0, 0, 917826, 5244, 4189, 127098, 67596, 0, 4188, 1879, 0, 968, 0, 0, 0, - 8873, 0, 0, 0, 65555, 12574, 0, 0, 0, 74490, 0, 0, 0, 0, 0, 0, 12578, - 12720, 0, 41227, 0, 12346, 0, 64848, 0, 0, 7251, 0, 0, 118850, 119141, 0, - 66015, 0, 959, 8885, 12564, 66457, 0, 9469, 9632, 0, 74761, 64323, 0, 0, - 0, 0, 310, 0, 41564, 10976, 0, 0, 0, 0, 10054, 6497, 8574, 0, 9012, - 19958, 74420, 65089, 13215, 65047, 65163, 74044, 374, 43195, 816, 0, 0, - 0, 41934, 7465, 0, 0, 0, 4715, 6101, 0, 41936, 0, 4879, 0, 65446, 0, 307, - 0, 9585, 5374, 0, 0, 0, 0, 0, 0, 0, 65567, 120614, 1929, 0, 12142, 0, - 12236, 41419, 194618, 194621, 12982, 194623, 5378, 0, 0, 41421, 0, 4462, - 0, 0, 0, 821, 0, 2498, 5800, 120157, 0, 1760, 0, 4469, 2324, 828, 3611, - 0, 757, 1185, 0, 0, 43597, 10628, 74808, 194572, 7999, 0, 0, 0, 10634, - 10942, 7713, 2348, 0, 64374, 4380, 194608, 119044, 194610, 64324, 41240, - 862, 65626, 194613, 1810, 3673, 5137, 194617, 0, 7277, 65622, 0, 7566, - 64688, 194593, 194592, 194595, 120812, 194597, 4748, 194599, 194598, - 194601, 42260, 5871, 119075, 0, 74576, 0, 0, 194602, 3967, 194604, 13137, - 8775, 194605, 0, 2963, 0, 8410, 4454, 723, 0, 966, 4449, 0, 127060, 0, - 7819, 2320, 194589, 339, 4968, 194590, 120399, 8075, 0, 0, 8047, 0, 0, - 12634, 41542, 0, 7466, 118822, 12174, 42610, 0, 74452, 0, 1584, 66645, - 6045, 0, 120640, 65218, 0, 0, 0, 7537, 0, 11370, 0, 10330, 0, 10394, 0, + 2699, 0, 73845, 2985, 119222, 0, 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, 78483, 4272, 0, 40967, 40964, 917825, 12704, + 78487, 43306, 0, 64497, 12138, 7930, 0, 43303, 68216, 0, 917826, 5244, + 4189, 127098, 67596, 0, 4188, 1879, 0, 968, 0, 43743, 0, 8873, 0, 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, 0, 66015, 0, 959, 8885, 12564, 66457, 78808, 9469, 9632, + 0, 74761, 64323, 0, 0, 0, 0, 310, 0, 41281, 10976, 0, 194768, 0, 74266, + 10054, 6497, 8574, 0, 9012, 19958, 74420, 65089, 13215, 65047, 65163, + 74044, 374, 43195, 816, 0, 0, 0, 41934, 7465, 0, 0, 0, 4715, 6101, 0, + 41936, 0, 4879, 0, 65446, 0, 307, 0, 9585, 5374, 0, 0, 0, 0, 0, 0, 0, + 65567, 120614, 1929, 0, 12142, 0, 12236, 41419, 194618, 194621, 12982, + 194623, 5378, 78791, 0, 41421, 0, 4462, 0, 0, 0, 821, 0, 2498, 5800, + 120157, 0, 1760, 0, 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, 194599, 194598, 194601, 42260, 5871, 119075, + 0, 74576, 44019, 0, 194602, 3967, 194604, 13137, 8775, 194605, 0, 2963, + 0, 8410, 4454, 723, 917600, 966, 4449, 0, 127060, 0, 7819, 2320, 194589, + 339, 4968, 194590, 120399, 8075, 55276, 0, 8047, 0, 78827, 12634, 41542, + 78780, 7466, 6705, 12174, 42610, 0, 74452, 0, 1584, 66645, 6045, 6729, + 120640, 65218, 78777, 0, 78062, 7537, 0, 11370, 0, 10330, 0, 10394, 0, 194783, 0, 0, 9780, 0, 13092, 194576, 119605, 194578, 7074, 120396, 194579, 194582, 11414, 194584, 2531, 13034, 0, 0, 0, 1259, 7517, 0, 0, 194561, 40996, 13037, 7092, 641, 5219, 194567, 194566, 11064, 41129, 0, 42850, 13035, 9075, 0, 5466, 194570, 0, 64098, 65793, 4535, 194573, 4271, - 194575, 0, 0, 41410, 0, 64262, 0, 41407, 0, 0, 41131, 118864, 9046, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 64338, 2563, 13033, 247, 917787, 0, 12338, 4651, - 0, 11270, 0, 0, 11933, 0, 0, 41903, 67892, 11001, 0, 42255, 0, 0, 0, - 41905, 0, 0, 10775, 9793, 5009, 0, 42269, 64587, 0, 42535, 0, 64529, - 41408, 42853, 3877, 0, 0, 8147, 43566, 119021, 0, 10236, 65918, 0, 0, 0, - 64506, 0, 118921, 4747, 0, 0, 43200, 5832, 0, 0, 5141, 42600, 0, 43203, - 0, 0, 43286, 0, 0, 0, 0, 0, 0, 74137, 11303, 65547, 0, 7031, 859, 0, 0, - 0, 6059, 126985, 0, 0, 8535, 0, 0, 194787, 66032, 11488, 0, 120786, 0, 0, - 10558, 63885, 0, 11822, 0, 43189, 0, 0, 1788, 1579, 120482, 917817, 0, 0, - 0, 9028, 119571, 0, 0, 0, 1285, 64882, 41242, 0, 0, 12640, 0, 66642, 0, - 12625, 0, 0, 0, 3940, 41597, 0, 3396, 12642, 8665, 0, 0, 12630, 1653, 0, + 78417, 0, 6769, 41410, 0, 64262, 6767, 41407, 0, 0, 6755, 118864, 9046, + 0, 0, 0, 0, 0, 0, 67675, 0, 0, 0, 64338, 2563, 13033, 247, 118915, 0, + 12338, 4651, 0, 11270, 0, 0, 11933, 0, 0, 41903, 43447, 11001, 0, 42255, + 0, 0, 0, 41905, 0, 0, 10775, 9793, 5009, 0, 42269, 64587, 0, 42535, + 69812, 64529, 41408, 42853, 3877, 120795, 42674, 8147, 43566, 119021, 0, + 10236, 65918, 0, 0, 0, 64506, 0, 118921, 4747, 0, 0, 43200, 5832, 0, 0, + 5141, 42600, 0, 43203, 0, 0, 43286, 0, 0, 0, 0, 41305, 78776, 74137, + 11303, 65547, 0, 7031, 859, 0, 0, 0, 6059, 126985, 55235, 0, 8535, 0, + 65196, 194787, 66032, 11488, 0, 120786, 42233, 127488, 9946, 63885, 0, + 11822, 0, 43189, 0, 0, 1788, 1579, 120482, 917817, 0, 0, 0, 9028, 119571, + 69234, 0, 0, 1285, 64882, 41242, 0, 0, 12640, 0, 7401, 0, 12625, 68198, + 0, 0, 3940, 41597, 55260, 3396, 12642, 8665, 0, 0, 12630, 1653, 917815, 10153, 0, 6166, 120516, 120523, 0, 8815, 66673, 65046, 9285, 913, 42259, - 119317, 119318, 119315, 119316, 42485, 118837, 7878, 8211, 42293, 64377, - 0, 0, 0, 0, 12032, 0, 9725, 0, 0, 5263, 12818, 0, 41939, 10022, 65387, - 118831, 42777, 10139, 980, 0, 65386, 0, 0, 0, 43198, 7184, 0, 194797, - 917819, 10085, 119992, 0, 119999, 6634, 0, 0, 119323, 8072, 119321, - 119322, 0, 8872, 7783, 917992, 12398, 8237, 0, 0, 12395, 0, 0, 120565, - 9914, 127011, 917854, 73975, 74281, 0, 0, 0, 917853, 0, 64735, 41243, 0, - 7808, 1829, 0, 41937, 4358, 43272, 0, 0, 0, 0, 0, 1710, 0, 0, 0, 0, 49, - 6627, 0, 6258, 10683, 0, 9741, 120423, 5649, 917986, 0, 64418, 1643, - 74104, 8405, 3470, 0, 13213, 42452, 917987, 0, 120009, 0, 1072, 0, - 917990, 0, 6576, 41988, 41132, 65675, 1080, 120002, 74100, 0, 1101, - 120001, 12309, 0, 0, 12632, 1086, 1869, 0, 7680, 0, 65458, 120714, 12639, - 3380, 8123, 1091, 12638, 7977, 4501, 0, 0, 66309, 0, 0, 1494, 0, 0, 0, - 11693, 0, 10494, 119230, 65872, 12363, 11386, 0, 0, 0, 0, 64582, 0, - 73794, 0, 8022, 0, 0, 74106, 12413, 0, 0, 0, 0, 5570, 1881, 7210, 0, - 1012, 66630, 0, 120709, 7208, 66442, 5569, 0, 42339, 0, 6063, 0, 0, 0, + 119317, 119318, 119315, 68454, 42485, 118837, 7878, 8211, 42293, 64377, + 0, 0, 0, 194673, 12032, 0, 9725, 0, 78431, 5263, 12818, 78430, 41939, + 10022, 65387, 78419, 42777, 10139, 980, 43698, 65386, 0, 0, 43701, 43198, + 7184, 120673, 194797, 917819, 10085, 119992, 0, 119993, 6634, 0, 0, + 119323, 8072, 119321, 43700, 0, 8872, 7783, 917992, 12398, 8237, 0, 0, + 12395, 0, 126977, 120565, 9914, 127011, 917854, 73975, 6367, 6351, 66688, + 0, 78107, 0, 64735, 41243, 0, 7808, 1829, 0, 41937, 4358, 43272, 6353, 0, + 0, 120422, 0, 1710, 0, 0, 65607, 0, 49, 6627, 0, 6258, 10683, 78672, + 9741, 78443, 5649, 78441, 43443, 64418, 1643, 65213, 8405, 3470, 0, + 13213, 42452, 78331, 0, 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, 0, 0, 66309, 0, 0, 1494, 0, 0, 0, 11693, 0, + 10494, 119230, 65872, 12363, 11386, 0, 0, 0, 0, 64582, 0, 73794, 0, 8022, + 0, 0, 74106, 12413, 194829, 917994, 0, 917995, 5570, 1881, 7210, 0, 1012, + 66630, 0, 120709, 7208, 66442, 5569, 0, 42339, 0, 6063, 0, 0, 119594, 6053, 65602, 0, 0, 64727, 9160, 194827, 0, 0, 0, 10503, 118810, 6055, 3870, 4279, 8490, 120114, 4319, 64786, 8602, 120110, 11326, 0, 0, 0, - 120119, 120413, 120117, 120118, 120099, 120100, 65087, 5571, 3674, 9740, - 9121, 5568, 120107, 120108, 42085, 10107, 64567, 42870, 120101, 589, + 120119, 78333, 120117, 120118, 120099, 120100, 65087, 5571, 3674, 9740, + 9121, 5568, 120107, 120108, 42085, 10107, 42159, 42870, 120101, 589, 7050, 0, 43281, 10233, 41263, 66251, 65729, 66253, 0, 74099, 42645, 0, - 194815, 8583, 0, 5847, 6928, 0, 0, 0, 0, 0, 66592, 12204, 0, 19966, 0, - 42561, 120626, 0, 0, 8120, 120701, 0, 0, 0, 41063, 0, 10664, 0, 8369, 0, - 4551, 0, 74759, 0, 0, 9673, 66334, 65580, 10478, 127002, 12517, 557, - 9457, 12034, 0, 41056, 12519, 41004, 0, 0, 74094, 0, 0, 119001, 0, 0, 0, - 12111, 3927, 0, 12515, 1474, 67893, 5492, 6923, 0, 10441, 73836, 0, 0, - 5493, 0, 74319, 0, 66635, 12019, 0, 1618, 0, 0, 9645, 10430, 0, 5853, - 13063, 10363, 0, 12956, 0, 0, 11314, 0, 12060, 0, 0, 12826, 0, 0, 10514, - 65517, 74395, 2707, 8309, 0, 127054, 0, 43570, 2697, 0, 0, 127057, 2695, - 42171, 0, 0, 0, 67617, 194814, 0, 2693, 12125, 12766, 0, 1164, 0, 0, - 41918, 0, 0, 8687, 66009, 12178, 7053, 0, 7469, 0, 5248, 12218, 120538, - 6427, 42884, 41123, 0, 0, 42873, 41126, 9991, 41128, 74371, 127031, 0, - 9873, 0, 42877, 7994, 64762, 6104, 42843, 6591, 9340, 0, 1589, 0, 296, - 74438, 0, 0, 67841, 74370, 0, 8922, 0, 74600, 74435, 74836, 0, 12579, 0, - 12575, 6416, 5656, 2891, 13262, 65590, 5299, 0, 11473, 5449, 1252, 0, 0, - 41431, 74369, 65373, 5295, 0, 74114, 1223, 1642, 174, 0, 883, 4161, - 12691, 42603, 41413, 3212, 127025, 3211, 74810, 41425, 127029, 0, 74450, - 9728, 3846, 8070, 6150, 6636, 4370, 0, 0, 74178, 74587, 74117, 0, 0, 0, - 4986, 12189, 0, 0, 120499, 917553, 4257, 12104, 119182, 6220, 9004, - 65561, 0, 0, 0, 68135, 917576, 0, 0, 0, 0, 9890, 0, 12971, 0, 0, 73898, - 11979, 0, 118900, 0, 0, 9635, 12600, 8871, 0, 0, 0, 6469, 74227, 0, + 194815, 8583, 0, 5847, 6928, 0, 0, 0, 0, 0, 66592, 12204, 0, 19966, + 77856, 42561, 120626, 0, 0, 8120, 120701, 0, 0, 0, 41063, 0, 10664, 0, + 8369, 0, 4551, 0, 74759, 0, 0, 9673, 66334, 65580, 10478, 118960, 12517, + 557, 9457, 12034, 0, 6355, 12519, 41004, 0, 0, 74094, 0, 0, 77970, 0, 0, + 0, 12111, 3927, 0, 12515, 1474, 67893, 5492, 6923, 0, 10441, 73836, 0, + 43990, 5493, 0, 74319, 0, 66635, 12019, 0, 1618, 0, 120474, 9645, 10430, + 917959, 5853, 13063, 10363, 0, 12956, 0, 120729, 11314, 0, 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, 0, 0, 41918, 0, 0, 8687, 66009, 12178, + 7053, 0, 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, 0, 74600, 12700, 74836, 0, 12579, 0, 12575, 6416, 5656, 2891, + 13262, 65590, 5299, 0, 11473, 5449, 1252, 0, 78404, 41431, 74369, 65373, + 5295, 0, 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, 917553, 4257, 12104, 77942, 6220, 9004, 65561, 0, 77949, + 0, 68135, 917576, 77946, 0, 0, 0, 9890, 78561, 12971, 78453, 0, 73898, + 11979, 0, 118900, 917894, 0, 9635, 12600, 8871, 0, 0, 0, 6469, 74227, 0, 65304, 4679, 10230, 64300, 64867, 3427, 4240, 0, 0, 0, 0, 917952, 0, 0, - 0, 7282, 0, 65733, 64618, 0, 0, 3494, 74606, 6555, 0, 0, 0, 0, 0, 0, 0, - 65898, 0, 65312, 5447, 0, 12895, 65593, 4010, 0, 41106, 0, 65804, 0, - 41105, 0, 65820, 6232, 0, 0, 0, 43608, 119091, 0, 6538, 4335, 0, 3941, - 41122, 11061, 0, 64892, 9113, 1954, 12155, 0, 42878, 0, 0, 0, 74578, 0, - 65832, 0, 0, 0, 0, 0, 4586, 0, 350, 10951, 0, 509, 0, 0, 0, 0, 0, 5133, - 0, 0, 9500, 0, 12162, 64741, 0, 9354, 0, 0, 0, 2496, 11516, 944, 118851, - 3890, 12168, 1438, 0, 0, 0, 41947, 1220, 120828, 0, 0, 0, 1571, 42630, - 41949, 42805, 8270, 943, 564, 0, 312, 41980, 0, 0, 0, 8877, 269, 4429, - 6272, 9617, 1460, 6954, 0, 41120, 65121, 10862, 6060, 41119, 41416, - 74355, 4173, 0, 0, 0, 1906, 0, 11532, 74073, 0, 0, 1985, 6296, 9582, - 917895, 64287, 0, 0, 11428, 1730, 2457, 0, 19918, 10469, 0, 0, 7703, - 8840, 8035, 0, 0, 0, 0, 6129, 0, 0, 0, 0, 7874, 8681, 0, 0, 13136, 0, 0, - 74278, 63886, 118881, 9605, 73892, 13220, 0, 0, 5514, 0, 9228, 0, 0, 0, - 5240, 9811, 10012, 3096, 0, 0, 0, 66676, 65873, 0, 0, 0, 9501, 0, 1272, - 64536, 65465, 64654, 7467, 0, 1467, 10158, 10040, 0, 9519, 0, 0, 0, - 118899, 12193, 0, 0, 0, 0, 0, 19935, 0, 0, 0, 0, 0, 0, 5275, 0, 0, 8637, - 0, 0, 3789, 63880, 11471, 43554, 65862, 11474, 66332, 66603, 0, 0, 12042, - 0, 0, 9537, 3961, 12115, 0, 2605, 4500, 64561, 0, 4981, 0, 0, 63876, - 11667, 0, 0, 42362, 64686, 4499, 41649, 7589, 0, 0, 3237, 0, 120194, 0, - 8541, 0, 0, 41866, 0, 0, 0, 0, 0, 43555, 2823, 9559, 0, 41940, 8299, + 0, 7282, 78728, 65733, 4445, 0, 0, 3494, 74606, 6555, 0, 77976, 0, 0, + 78566, 0, 0, 65898, 0, 65312, 5447, 0, 12895, 65593, 4010, 0, 41106, 0, + 65804, 0, 41105, 0, 65820, 6232, 0, 0, 0, 43608, 119091, 0, 6538, 4335, + 78364, 3941, 41122, 11061, 78363, 64892, 9113, 1954, 12155, 0, 42878, + 11500, 0, 0, 74578, 0, 65832, 0, 0, 0, 77975, 0, 4586, 0, 350, 10951, 0, + 509, 0, 0, 0, 0, 0, 5133, 0, 0, 9500, 0, 12162, 64741, 0, 9354, 0, 0, 0, + 2496, 11516, 944, 118851, 3890, 12168, 1438, 0, 0, 0, 41947, 1220, + 120828, 0, 0, 0, 1571, 42630, 41949, 42805, 8270, 943, 564, 0, 312, + 41980, 0, 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, 0, 0, 1985, 6296, 9582, 917895, 64287, 0, 78115, + 11428, 1730, 2457, 0, 19918, 10469, 0, 0, 7703, 8840, 8035, 0, 0, 0, 0, + 6129, 0, 0, 0, 0, 7874, 8681, 0, 0, 13136, 0, 0, 74278, 63886, 118881, + 9605, 73892, 13220, 0, 120274, 5514, 0, 9228, 0, 0, 0, 5240, 9811, 10012, + 3096, 0, 0, 0, 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, 0, 19935, 0, 0, 0, 0, 0, 0, 5275, 0, 0, 8637, 0, 0, 3789, 63880, + 11471, 43554, 65862, 11474, 66332, 66603, 0, 2426, 12042, 0, 0, 9537, + 3961, 12115, 0, 2605, 4500, 64561, 55224, 4981, 0, 0, 63876, 11667, + 42686, 77973, 42362, 64686, 4499, 41649, 7589, 0, 0, 3237, 0, 68215, 0, + 8541, 78298, 0, 41866, 0, 0, 0, 0, 0, 43555, 2823, 9559, 0, 41940, 8299, 41945, 0, 41941, 3308, 7190, 64880, 8614, 65220, 41493, 0, 41699, 10762, 0, 12999, 0, 0, 8106, 4128, 0, 0, 4494, 0, 4012, 10395, 0, 119567, 65447, 0, 0, 11004, 695, 739, 696, 7611, 0, 42755, 74802, 9227, 7506, 7510, 0, 691, 738, 7511, 7512, 7515, 3868, 688, 41847, 690, 2548, 737, 974, 8003, - 0, 0, 0, 0, 3985, 0, 65860, 63921, 7051, 74208, 4682, 0, 12809, 6406, - 4685, 0, 10879, 10347, 4680, 9055, 0, 3851, 8132, 74325, 0, 917907, 0, - 41958, 119176, 917908, 0, 0, 0, 0, 7643, 42373, 11714, 67587, 43568, 0, - 11717, 7650, 10594, 64951, 7647, 7649, 0, 7646, 0, 0, 9651, 0, 3891, 0, - 0, 2337, 1735, 74324, 67860, 5452, 0, 0, 43561, 0, 0, 74146, 1860, 7495, - 7580, 5812, 7497, 7584, 0, 0, 0, 0, 7727, 0, 8498, 0, 8949, 3065, 0, 0, - 1569, 0, 12534, 12124, 7690, 0, 12533, 0, 6418, 4543, 0, 6969, 0, 74800, - 0, 0, 11980, 0, 0, 63894, 0, 12282, 66192, 0, 0, 8850, 74275, 9238, 0, 0, - 0, 0, 0, 12791, 0, 0, 0, 0, 73732, 12793, 12900, 0, 10950, 0, 0, 12790, - 41400, 119128, 0, 12792, 0, 0, 1744, 12789, 10366, 12317, 41310, 0, - 41399, 0, 0, 0, 0, 12690, 0, 0, 0, 0, 41652, 2974, 0, 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, 0, 0, 0, 0, 6413, - 6550, 0, 1940, 0, 66223, 220, 65193, 43551, 10678, 10044, 0, 0, 0, 0, - 6403, 5707, 10393, 0, 0, 66614, 0, 0, 0, 10297, 0, 3742, 0, 3959, 0, 0, - 0, 2467, 0, 6003, 63844, 6663, 8040, 0, 63845, 4182, 0, 4676, 120501, 0, - 0, 2510, 0, 10208, 0, 0, 11540, 43546, 12186, 0, 41060, 0, 0, 9083, 0, 0, - 0, 1559, 63831, 9677, 120260, 0, 65256, 0, 74070, 0, 0, 365, 12056, - 43027, 0, 41716, 0, 0, 0, 5516, 2845, 7717, 8036, 41717, 73827, 544, - 12045, 6278, 0, 5515, 0, 0, 0, 0, 43221, 65194, 0, 5517, 0, 0, 0, 67884, - 0, 67890, 67885, 67880, 67881, 67882, 67883, 0, 0, 67879, 0, 1902, 67887, - 9638, 12976, 0, 12483, 67872, 41769, 0, 41765, 0, 6667, 67874, 7556, - 67878, 74351, 11264, 989, 67876, 67889, 0, 1311, 0, 4326, 11000, 63824, - 13068, 10932, 0, 6917, 0, 0, 949, 917595, 0, 6148, 8605, 42253, 917967, - 0, 0, 0, 0, 0, 0, 63871, 0, 41796, 1269, 6530, 0, 65057, 0, 5144, 12221, - 0, 0, 4431, 4331, 0, 0, 41834, 5279, 0, 10336, 8312, 0, 118861, 0, 0, - 119654, 66036, 0, 0, 6428, 42270, 0, 0, 118866, 0, 5256, 1067, 255, - 12131, 0, 9493, 0, 41014, 11793, 0, 0, 74394, 43594, 10653, 0, 0, 119632, - 0, 6560, 7016, 74274, 0, 43556, 3929, 0, 6614, 2768, 0, 9746, 5135, - 11811, 12796, 11953, 0, 0, 5139, 346, 74303, 6305, 12795, 4675, 5168, 0, - 0, 74315, 74361, 8253, 8817, 1136, 0, 43563, 0, 0, 0, 65285, 8230, 9365, - 0, 0, 0, 0, 0, 4041, 0, 2357, 0, 12786, 229, 119885, 119884, 0, 43552, + 7406, 0, 0, 0, 3985, 0, 65860, 63921, 7051, 69777, 4682, 917805, 12809, + 6406, 4685, 0, 10879, 10347, 4680, 6341, 0, 3851, 8132, 74325, 0, 917907, + 0, 41958, 119176, 917908, 0, 0, 42657, 0, 7643, 42373, 11714, 67587, + 43568, 0, 11717, 7650, 10594, 64951, 7647, 7649, 0, 7646, 0, 78082, 9651, + 0, 3891, 0, 0, 2337, 1735, 74324, 67860, 5452, 0, 0, 43561, 0, 0, 74146, + 1860, 7495, 7580, 5812, 7497, 7584, 0, 0, 0, 120347, 7727, 0, 8498, + 69818, 8949, 3065, 42719, 0, 1569, 0, 12534, 12124, 7690, 0, 12533, 0, + 6418, 4543, 78086, 6969, 0, 74800, 0, 0, 11980, 0, 0, 63894, 120760, + 12282, 66192, 0, 74592, 8850, 74275, 9238, 10617, 917545, 0, 0, 0, 12791, + 0, 0, 0, 4447, 73732, 12793, 12900, 0, 10950, 0, 78087, 12790, 41400, + 119128, 0, 12792, 42232, 0, 1744, 12789, 10366, 12317, 41310, 0, 41399, + 0, 0, 55258, 0, 12690, 0, 0, 43672, 0, 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, 0, 77829, 0, 0, 6413, + 6550, 0, 1940, 0, 43637, 220, 65193, 43551, 10678, 10044, 0, 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, 63845, 4182, 78171, 4676, + 120501, 0, 0, 2510, 0, 10208, 78168, 0, 11540, 43546, 6692, 0, 41060, 0, + 0, 9083, 0, 0, 78144, 1559, 63831, 9677, 120260, 0, 65256, 0, 74070, 0, + 0, 365, 12056, 43027, 120423, 41716, 0, 0, 120472, 5516, 2845, 7717, + 8036, 41717, 73827, 544, 12045, 6278, 0, 5515, 0, 0, 0, 65339, 43221, + 65194, 0, 5517, 0, 0, 74841, 67884, 0, 67890, 67885, 67880, 67881, 67882, + 67883, 0, 0, 67879, 0, 1902, 67887, 9638, 12976, 0, 12483, 12368, 41769, + 42726, 41765, 0, 6667, 67874, 7556, 67878, 74351, 11264, 989, 42677, + 67889, 0, 1311, 0, 4326, 11000, 63824, 13068, 10932, 0, 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, 0, 0, + 41834, 5279, 0, 10336, 8312, 0, 42701, 0, 0, 78165, 66036, 0, 0, 6428, + 42270, 0, 0, 43059, 42666, 5256, 1067, 255, 12131, 0, 9493, 0, 41014, + 11793, 0, 0, 74394, 43460, 10653, 42723, 0, 119632, 0, 6560, 7016, 74274, + 0, 43556, 3929, 0, 6614, 2768, 0, 9746, 5135, 11811, 12796, 11953, 0, + 69761, 5139, 346, 74303, 6305, 12795, 4675, 5168, 78552, 0, 74315, 74361, + 8253, 8817, 1136, 0, 43563, 0, 0, 194750, 7392, 8230, 9365, 0, 0, 0, 0, + 0, 4041, 0, 2357, 43240, 12786, 229, 119885, 119884, 44004, 43552, 119881, 12350, 65554, 119882, 119877, 119876, 12785, 63863, 119873, 7770, - 10712, 64853, 12686, 118916, 42375, 0, 0, 66352, 10470, 0, 11059, 10791, - 0, 450, 0, 0, 10432, 12097, 5450, 64691, 1233, 0, 63856, 0, 66338, 0, 0, - 1839, 118799, 0, 10927, 1701, 0, 2388, 41749, 41761, 5453, 8361, 119865, - 41758, 5444, 41763, 64889, 119860, 119863, 119862, 0, 0, 0, 66432, 8801, - 3053, 4340, 0, 0, 65812, 0, 0, 41824, 0, 194801, 194800, 194803, 118997, - 194805, 194804, 194807, 194806, 194809, 194808, 0, 0, 4493, 4336, 0, - 2314, 43602, 0, 119325, 194811, 42439, 64638, 42327, 43528, 4489, 194791, - 0, 194793, 1912, 42385, 10306, 10370, 0, 0, 8867, 10250, 10258, 2712, - 1635, 194798, 1410, 0, 0, 118878, 0, 0, 0, 0, 559, 0, 41825, 0, 0, 4892, - 74016, 194781, 6542, 41957, 0, 5777, 0, 759, 65749, 65750, 65248, 12788, - 64487, 64552, 0, 10223, 42062, 0, 0, 0, 3668, 65754, 43560, 12226, 0, - 65149, 2340, 41959, 194786, 194785, 194788, 120154, 65747, 10937, 2962, - 0, 2321, 3587, 65745, 0, 8921, 66013, 0, 0, 194769, 194768, 194771, - 194770, 2949, 66012, 194775, 194774, 2958, 194776, 41820, 43038, 2395, 0, - 0, 120043, 194778, 120058, 194780, 194779, 42809, 42807, 0, 120047, - 10198, 4150, 64371, 8318, 41790, 0, 41898, 2360, 41794, 917942, 0, 0, 0, - 0, 2418, 0, 2411, 11336, 799, 63823, 10276, 10308, 10372, 917541, 41772, - 42813, 2317, 10260, 118980, 119576, 0, 0, 10384, 0, 0, 0, 7753, 2351, - 6655, 64489, 0, 0, 0, 0, 42779, 230, 0, 0, 43549, 4855, 42150, 65739, - 5441, 41896, 10288, 10320, 0, 855, 7046, 6109, 65045, 63839, 119116, 0, - 10098, 0, 74145, 0, 10264, 10280, 9184, 10376, 7013, 4467, 0, 0, 0, - 41887, 0, 4862, 9735, 6537, 120591, 0, 3914, 119604, 0, 9065, 12961, 0, - 0, 0, 0, 289, 0, 4694, 11420, 4690, 0, 120514, 0, 4693, 0, 73919, 0, - 4688, 120454, 0, 0, 119629, 8238, 3110, 120162, 0, 120163, 6528, 0, - 43035, 120161, 218, 0, 1520, 0, 4786, 0, 43225, 0, 0, 120158, 10088, - 6548, 0, 120156, 0, 8988, 8888, 0, 0, 0, 0, 10666, 0, 73902, 0, 0, 0, 0, - 0, 0, 4689, 8932, 0, 65560, 119209, 74441, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 10065, 8207, 0, 0, 0, 0, 662, 0, 9244, 0, 0, 119261, 0, 0, 0, 0, 41929, - 0, 0, 0, 41926, 0, 120443, 10513, 64637, 0, 0, 52, 13118, 6475, 0, 0, - 12095, 10225, 4812, 0, 0, 0, 74085, 0, 3978, 0, 0, 0, 11582, 120761, - 12281, 0, 6544, 13241, 0, 0, 0, 194860, 11765, 65258, 10369, 0, 1585, + 10712, 64853, 12686, 118916, 42375, 0, 127238, 66352, 10470, 0, 11059, + 10791, 917944, 450, 0, 0, 10432, 12097, 5450, 64691, 1233, 0, 44009, + 78284, 66338, 0, 0, 1839, 118799, 0, 10927, 1701, 0, 2388, 41749, 41761, + 5453, 8361, 119865, 41758, 5444, 41763, 64889, 119860, 119863, 78677, 0, + 0, 78174, 66432, 8801, 3053, 4340, 0, 0, 65812, 917831, 0, 41824, 0, + 194801, 194800, 194803, 42700, 194805, 194804, 194807, 78676, 120413, + 194808, 0, 0, 4493, 4336, 0, 2314, 43602, 78826, 119325, 194811, 42439, + 64638, 42327, 43528, 4489, 194791, 0, 194793, 1912, 42385, 10306, 10370, + 0, 0, 8867, 10250, 10258, 2712, 1635, 78821, 1410, 0, 0, 118878, 0, 0, + 9919, 0, 559, 0, 41825, 0, 78188, 4892, 74016, 194781, 6542, 41957, 0, + 5777, 0, 759, 65749, 2079, 65248, 12788, 64487, 64552, 0, 10223, 42062, + 0, 0, 0, 3668, 65754, 43560, 12226, 0, 65149, 2340, 41959, 194786, + 194785, 194788, 43618, 65747, 10937, 2962, 0, 2321, 3587, 65745, 0, 8921, + 9952, 0, 0, 42714, 9951, 43409, 194770, 2949, 66012, 194775, 194774, + 2958, 68359, 41820, 43038, 2395, 0, 9976, 120043, 194778, 120058, 68220, + 194779, 42809, 42807, 0, 120046, 10198, 4150, 64371, 8318, 41790, 0, + 41898, 2360, 41794, 917942, 0, 0, 0, 0, 2418, 0, 2411, 11336, 799, 63823, + 10276, 10308, 10372, 917541, 41772, 42813, 2317, 10260, 118980, 55284, 0, + 0, 10384, 0, 0, 0, 7753, 2351, 6655, 64489, 0, 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, 0, 10264, 10280, + 9184, 10376, 7013, 4467, 0, 0, 0, 41887, 0, 4862, 9735, 6537, 120591, 0, + 3914, 119604, 0, 9065, 12961, 0, 0, 0, 0, 289, 0, 4694, 11420, 4690, 0, + 120514, 917978, 4693, 0, 42724, 0, 4688, 120454, 0, 0, 119629, 8238, + 3110, 120162, 0, 120163, 6528, 127553, 43035, 120161, 218, 0, 1520, 0, + 4786, 0, 43225, 4602, 0, 78167, 10088, 6548, 0, 120156, 43978, 8988, + 8888, 0, 0, 0, 0, 10666, 0, 73902, 0, 0, 0, 9975, 0, 119902, 4689, 8932, + 0, 65560, 119209, 74441, 78810, 0, 0, 0, 0, 0, 0, 0, 0, 10065, 8207, 0, + 120539, 0, 0, 662, 0, 9244, 0, 0, 119261, 0, 0, 0, 0, 41929, 0, 0, 66674, + 41926, 120408, 120443, 10513, 64637, 194862, 0, 52, 13118, 6475, 0, 0, + 12095, 10225, 4812, 0, 0, 0, 74085, 0, 3978, 0, 917945, 0, 11582, 120761, + 12281, 0, 6544, 13241, 0, 69782, 0, 194860, 11765, 65258, 10369, 0, 1585, 7192, 10249, 422, 1500, 2036, 986, 194859, 64394, 5781, 5599, 64294, - 2494, 120450, 4861, 74021, 64334, 0, 0, 0, 0, 65102, 8961, 0, 10243, - 10245, 0, 0, 0, 120453, 64821, 9478, 2508, 0, 0, 202, 0, 74131, 1242, 0, - 0, 63940, 0, 64533, 0, 0, 67842, 11990, 0, 63939, 0, 65440, 2504, 0, 0, - 64829, 0, 6943, 0, 5859, 0, 2858, 0, 74294, 0, 74305, 0, 119027, 12992, - 2753, 1936, 74491, 0, 2751, 12662, 2763, 8953, 64701, 10731, 12922, 0, 0, - 0, 0, 0, 0, 74128, 2856, 119910, 47, 119911, 126986, 65858, 0, 0, 0, - 7899, 0, 8417, 65903, 7072, 0, 0, 4033, 0, 66474, 0, 0, 212, 64600, 1903, - 12320, 0, 0, 0, 0, 8915, 2759, 945, 0, 0, 0, 0, 0, 1291, 74828, 0, 0, - 9531, 13155, 8505, 0, 12062, 0, 0, 65487, 0, 41837, 120611, 120432, 0, 0, - 0, 120433, 0, 63935, 73962, 0, 64787, 43524, 0, 64426, 0, 0, 0, 0, 65664, - 64785, 9843, 0, 8674, 0, 0, 0, 0, 12624, 0, 1673, 4811, 0, 5986, 9338, - 3046, 74480, 5985, 917928, 119598, 9820, 0, 12187, 0, 0, 5984, 0, 43308, - 4393, 0, 0, 0, 0, 0, 74826, 64733, 0, 0, 3491, 0, 0, 0, 3514, 65485, 0, - 7492, 0, 0, 0, 7514, 0, 0, 194731, 7502, 7587, 0, 0, 0, 63925, 0, 7610, - 219, 0, 0, 692, 43588, 74433, 41635, 0, 9688, 0, 9535, 0, 0, 0, 0, 0, - 64610, 11804, 0, 0, 7453, 0, 8013, 0, 0, 0, 8895, 5253, 0, 5458, 0, 2866, - 0, 0, 65111, 0, 12018, 120484, 0, 0, 0, 8962, 0, 9641, 66653, 7059, 0, 0, - 9604, 0, 7441, 63826, 0, 118941, 64392, 0, 0, 2844, 0, 41974, 0, 12139, - 0, 0, 0, 3358, 65295, 0, 3104, 0, 0, 0, 0, 5308, 0, 290, 0, 0, 2862, - 2792, 195088, 0, 0, 3268, 66591, 0, 6552, 42367, 7035, 120558, 0, 0, - 1814, 0, 10240, 0, 195092, 0, 119020, 0, 0, 42646, 7606, 2591, 2837, - 4341, 0, 64482, 0, 8163, 65270, 0, 0, 0, 9112, 74431, 863, 9490, 0, 0, - 43323, 120513, 0, 9071, 0, 0, 3654, 0, 9637, 0, 2535, 65504, 7653, 40993, - 0, 66587, 195098, 0, 0, 0, 11006, 12927, 7807, 8073, 0, 10629, 0, 74088, - 3056, 10823, 0, 0, 8762, 10508, 74506, 73770, 63994, 43193, 10737, 3463, - 0, 0, 66633, 8695, 4815, 11322, 5811, 12345, 7049, 0, 5195, 0, 0, 66639, - 0, 0, 0, 0, 0, 120561, 1262, 0, 6561, 19939, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 119907, 64612, 11991, 0, 0, 0, 1502, 0, 0, 9107, 0, 5702, 3655, 0, 8430, - 0, 74132, 0, 0, 74057, 9603, 0, 5254, 120742, 7724, 74388, 74838, 10796, - 5129, 0, 0, 590, 7579, 5614, 5893, 194744, 11720, 0, 11721, 0, 0, 0, - 120541, 66038, 4793, 67851, 11726, 0, 74204, 0, 0, 917600, 894, 300, 0, - 12306, 66235, 0, 0, 0, 2562, 0, 0, 42503, 0, 11652, 0, 0, 119241, 0, 0, - 5096, 5095, 2863, 3424, 0, 10454, 42530, 5094, 119638, 0, 13156, 0, - 10832, 5093, 0, 0, 0, 5092, 10708, 11327, 0, 5091, 176, 0, 9153, 4104, 0, - 0, 1215, 0, 5744, 12272, 9832, 11777, 0, 0, 42881, 0, 8980, 118988, - 67861, 8844, 7433, 0, 0, 4278, 0, 0, 0, 0, 9074, 4348, 0, 65558, 65946, - 8113, 7087, 5255, 1786, 661, 0, 0, 0, 74423, 0, 586, 74414, 64359, 1267, - 0, 0, 0, 65731, 0, 0, 3621, 0, 66666, 0, 0, 6562, 12928, 0, 1228, 65490, - 11383, 0, 0, 0, 1714, 74406, 0, 0, 0, 0, 66225, 0, 0, 0, 11436, 119615, - 64, 0, 0, 10291, 10323, 2826, 0, 0, 0, 42008, 9708, 0, 0, 42011, 41999, - 0, 12206, 5839, 1702, 1240, 74065, 6286, 0, 0, 65833, 0, 0, 1765, 0, 0, - 65588, 0, 0, 0, 8401, 0, 42014, 0, 7030, 0, 10479, 64959, 2852, 0, 0, 0, - 0, 0, 0, 6963, 0, 12667, 0, 74786, 10147, 12935, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 64947, 12467, 2864, 64719, 1148, 10435, 11462, 41675, 0, 2765, 0, - 0, 0, 0, 0, 0, 66662, 0, 0, 9364, 194685, 74416, 0, 0, 119244, 263, - 10449, 41288, 0, 41839, 0, 0, 0, 0, 6931, 0, 64355, 7177, 120530, 0, 0, - 0, 4262, 10285, 10722, 42020, 0, 0, 6992, 42019, 0, 41290, 0, 750, 0, 0, - 10163, 0, 74066, 7032, 5954, 64931, 4314, 0, 198, 0, 730, 0, 0, 0, 0, - 13165, 10814, 74171, 42804, 678, 8240, 118960, 0, 41378, 11008, 6938, 0, - 0, 42812, 66246, 120560, 0, 0, 0, 3892, 0, 0, 0, 66045, 41470, 64805, 0, - 0, 0, 118982, 0, 497, 12100, 5953, 0, 7796, 0, 0, 73831, 0, 10293, 5952, - 1281, 0, 0, 0, 10677, 604, 41097, 9182, 1859, 0, 0, 3425, 0, 0, 2836, 0, - 0, 9707, 0, 43202, 0, 0, 65199, 1738, 0, 0, 2832, 0, 9670, 12937, 0, 0, - 0, 0, 2822, 0, 4436, 0, 0, 73752, 0, 64872, 0, 1331, 0, 0, 0, 12708, 0, - 5090, 5089, 0, 0, 119109, 0, 0, 319, 118931, 0, 9477, 0, 0, 5087, 0, - 7640, 96, 5086, 0, 0, 0, 5085, 64286, 0, 0, 41422, 0, 119901, 42356, - 3772, 0, 0, 5011, 0, 0, 0, 0, 0, 0, 6677, 7601, 0, 591, 64419, 118953, 0, - 0, 118923, 0, 0, 10939, 6106, 6933, 41271, 0, 119903, 4534, 41270, 0, 0, - 65574, 0, 9224, 0, 3671, 8976, 0, 0, 41275, 0, 0, 0, 7963, 42013, 0, 568, - 0, 41273, 0, 0, 0, 0, 9715, 0, 8258, 11753, 74820, 0, 9602, 118919, 42, - 0, 0, 0, 0, 7458, 0, 0, 65385, 0, 0, 11958, 0, 0, 0, 6254, 0, 66336, + 2494, 120450, 4861, 74021, 64334, 78203, 0, 0, 0, 65102, 8961, 65842, + 10243, 10245, 0, 120410, 0, 120453, 64821, 9478, 2508, 0, 0, 202, 0, + 74131, 1242, 65514, 0, 63940, 0, 64533, 120129, 0, 67842, 11990, 0, + 63939, 43375, 65440, 2504, 0, 78671, 64829, 0, 6943, 917934, 5859, 0, + 2858, 0, 74294, 0, 69239, 0, 119027, 12992, 2753, 1936, 74491, 0, 2751, + 12662, 2763, 8953, 64701, 10731, 12922, 7052, 917839, 0, 0, 0, 63920, + 74128, 2856, 119910, 47, 119911, 126986, 65858, 0, 0, 0, 7899, 0, 8417, + 65903, 7072, 0, 0, 4033, 0, 43992, 0, 0, 212, 64600, 1903, 12320, 0, 0, + 0, 0, 8915, 2759, 945, 6689, 0, 0, 0, 0, 1291, 74828, 0, 0, 9531, 13155, + 8505, 68379, 12062, 0, 0, 65487, 0, 41837, 120611, 120432, 0, 0, 0, + 120433, 0, 63935, 73962, 120806, 64787, 43524, 0, 64426, 0, 0, 0, 0, + 65664, 6693, 9843, 0, 8674, 0, 0, 0, 0, 12624, 0, 1673, 4811, 0, 5986, + 9338, 3046, 74480, 5985, 917928, 119598, 9820, 0, 12187, 0, 0, 5984, 0, + 43308, 4393, 0, 0, 0, 0, 0, 74826, 64733, 0, 0, 3491, 0, 0, 0, 3514, + 65485, 0, 7492, 0, 74605, 119134, 7514, 0, 0, 194731, 7502, 7587, 68353, + 0, 0, 63925, 0, 7610, 219, 0, 0, 692, 43588, 74433, 41635, 43241, 9688, + 0, 9535, 0, 0, 0, 64530, 0, 64610, 11804, 0, 0, 7453, 0, 8013, 0, 0, 0, + 8895, 5253, 0, 5458, 0, 2866, 0, 0, 65111, 68433, 6700, 120484, 0, 0, 0, + 8962, 77960, 9641, 43694, 7059, 0, 0, 9604, 78700, 7441, 63826, 0, + 118941, 64392, 0, 0, 2844, 0, 41974, 0, 12139, 0, 0, 0, 3358, 65295, 0, + 3104, 0, 0, 194765, 0, 5308, 0, 290, 0, 0, 2862, 2792, 195088, 0, 0, + 3268, 66591, 0, 6552, 42367, 7035, 120558, 0, 0, 1814, 0, 10240, 0, + 74305, 0, 74528, 0, 0, 42646, 7606, 2591, 2837, 4341, 77956, 64482, 0, + 8163, 65270, 0, 0, 0, 9112, 74431, 863, 9490, 119898, 0, 43323, 120513, + 119897, 9071, 0, 0, 3654, 7789, 9637, 0, 2535, 65504, 7653, 40993, + 119899, 66587, 195098, 0, 0, 0, 11006, 12927, 7807, 8073, 0, 10629, 0, + 74088, 3056, 10823, 0, 127327, 8762, 10508, 74506, 73770, 43969, 43193, + 10737, 3463, 0, 0, 66633, 8695, 4815, 11322, 5811, 12345, 7049, 0, 5195, + 0, 0, 66639, 0, 0, 0, 0, 0, 120561, 1262, 0, 6561, 19939, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 119907, 64612, 11991, 0, 0, 0, 1502, 0, 0, 9107, 0, 5702, + 3655, 67661, 8430, 0, 74132, 120758, 0, 74057, 9603, 0, 5254, 120742, + 7724, 74388, 68375, 10796, 5129, 0, 0, 590, 7579, 5614, 5893, 194744, + 11720, 0, 11721, 0, 4798, 0, 119316, 66038, 4793, 67851, 11726, 0, 74204, + 68610, 0, 68626, 894, 300, 0, 12306, 66235, 8004, 0, 0, 2562, 0, 0, + 42503, 0, 11652, 0, 0, 119241, 0, 0, 5096, 5095, 2863, 3424, 0, 10454, + 42530, 5094, 119638, 0, 13156, 0, 10832, 5093, 0, 0, 0, 5092, 10708, + 11327, 0, 5091, 176, 0, 9153, 4104, 78599, 78601, 1215, 42712, 5744, + 12272, 9832, 11777, 0, 127371, 42881, 0, 8980, 118988, 67861, 8844, 7209, + 0, 0, 4278, 0, 0, 0, 0, 9074, 4348, 0, 65558, 65946, 8113, 7087, 5255, + 1786, 661, 0, 0, 0, 74423, 0, 586, 74414, 64359, 1267, 0, 65468, 0, + 65731, 0, 0, 3621, 120473, 66666, 64211, 0, 6562, 12928, 0, 1228, 65490, + 11383, 0, 0, 0, 1714, 74406, 0, 0, 0, 0, 66225, 0, 0, 42660, 11436, 2070, + 64, 120694, 0, 10291, 10323, 2826, 0, 0, 0, 42008, 9708, 42710, 0, 42011, + 41999, 0, 12206, 5839, 1702, 1240, 74065, 6286, 0, 0, 65833, 77848, 0, + 1765, 0, 0, 65588, 0, 0, 0, 8401, 0, 42014, 0, 7030, 0, 10479, 64959, + 2852, 0, 0, 0, 0, 195061, 917951, 6963, 0, 12667, 64540, 74786, 10147, + 12935, 0, 0, 0, 0, 0, 78757, 0, 0, 0, 0, 64947, 12467, 2864, 64719, 1148, + 10435, 11462, 41675, 0, 2765, 0, 0, 0, 120719, 0, 0, 66662, 0, 78133, + 9364, 194685, 74416, 0, 0, 77988, 263, 10449, 41288, 0, 41839, 78387, 0, + 77986, 0, 6931, 0, 64355, 7177, 120530, 0, 0, 0, 4262, 10285, 10722, + 42020, 0, 6806, 6992, 42019, 0, 41290, 0, 750, 0, 0, 10163, 63913, 74066, + 7032, 5954, 64931, 4314, 0, 198, 68453, 730, 0, 63907, 77993, 78891, + 13165, 10814, 74171, 42804, 678, 8240, 78015, 0, 41378, 11008, 6938, 0, + 0, 2097, 66246, 120560, 0, 0, 0, 3892, 68632, 0, 6712, 66045, 41470, + 64805, 0, 0, 0, 64801, 0, 497, 12100, 5953, 0, 7796, 0, 43254, 73831, 0, + 10293, 5952, 1281, 0, 0, 0, 10677, 604, 41097, 9182, 1859, 0, 0, 3425, 0, + 0, 2836, 0, 0, 9707, 0, 43202, 0, 0, 65199, 1738, 917818, 0, 2832, 0, + 9670, 12937, 0, 66374, 0, 0, 2822, 0, 4436, 0, 0, 73752, 0, 64872, 0, + 1331, 0, 0, 0, 12708, 0, 5090, 5089, 0, 0, 119109, 0, 0, 319, 118931, + 43479, 9477, 0, 0, 5087, 0, 7640, 96, 5086, 0, 0, 0, 5085, 64286, 0, 0, + 41422, 0, 119901, 42356, 3772, 0, 0, 5011, 0, 0, 0, 0, 0, 127241, 6677, + 7601, 0, 591, 64419, 118953, 0, 0, 118923, 73734, 0, 10939, 6106, 6933, + 41271, 6760, 119903, 4534, 41270, 917962, 0, 65574, 0, 9224, 0, 3671, + 8976, 0, 0, 41275, 6372, 0, 55261, 7963, 6371, 0, 568, 0, 41273, 0, 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, 0, 42858, 11789, 65868, 5557, 917946, 9737, 13109, 0, - 9467, 5558, 8878, 0, 195036, 7451, 7435, 10146, 0, 9086, 64566, 0, 64584, - 7437, 7454, 12594, 0, 0, 4546, 7731, 0, 917948, 74243, 0, 3805, 0, 0, 0, - 41008, 0, 6307, 19949, 0, 7544, 0, 43525, 0, 0, 10152, 64422, 65091, - 119113, 7602, 64729, 0, 43521, 0, 42302, 0, 43523, 41447, 5559, 0, 8704, - 2397, 5556, 0, 0, 0, 9011, 9630, 0, 0, 0, 5506, 0, 1911, 66652, 0, 12598, - 8845, 66698, 0, 10792, 8889, 0, 6951, 0, 64751, 0, 66622, 0, 0, 74364, 0, - 0, 0, 74365, 7552, 0, 0, 65384, 7223, 4559, 0, 1956, 43138, 7024, 65728, - 64501, 1210, 0, 65175, 10184, 43140, 65727, 0, 0, 0, 38, 8533, 66669, 0, - 0, 0, 0, 4357, 0, 0, 0, 74233, 119846, 119852, 42860, 119838, 10941, - 65721, 6962, 0, 0, 0, 0, 11014, 0, 8942, 12000, 0, 0, 0, 11974, 0, 42772, - 0, 11650, 5013, 0, 0, 66210, 118914, 6613, 0, 0, 0, 0, 0, 64714, 0, 0, 0, - 12120, 0, 0, 11024, 74811, 0, 10563, 0, 0, 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, 0, 0, 3483, 127122, 1989, 0, 0, 9104, 3503, 65375, 0, 0, 42633, 1864, - 0, 74306, 41446, 2540, 7736, 0, 74064, 0, 10521, 0, 42173, 9705, 74124, - 8604, 6955, 10916, 0, 6149, 3887, 19956, 1411, 2824, 0, 10106, 0, 1403, - 0, 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, 0, 0, 0, 0, - 74585, 41391, 0, 917903, 376, 6987, 9221, 0, 0, 8823, 0, 12943, 65185, - 41869, 12619, 0, 10154, 0, 74439, 2039, 0, 7446, 1684, 63979, 10974, 458, - 120620, 0, 0, 0, 11916, 65016, 0, 0, 42115, 0, 12288, 0, 0, 1493, 42111, - 7553, 4097, 0, 13080, 0, 65808, 6610, 6030, 8059, 7508, 41636, 0, 0, 0, - 8794, 41278, 41629, 12154, 0, 41277, 64658, 0, 64380, 6625, 0, 19904, 0, - 0, 0, 65371, 7078, 0, 833, 0, 74592, 0, 10979, 41953, 0, 41434, 6062, 0, - 0, 19916, 6913, 933, 1341, 9842, 0, 65744, 0, 0, 0, 0, 41615, 10105, - 65810, 0, 41632, 7493, 0, 0, 41622, 0, 0, 119556, 74584, 7632, 9716, - 19954, 9805, 5990, 900, 0, 63957, 0, 0, 3612, 0, 64376, 0, 5389, 0, 0, - 65938, 2839, 9621, 582, 0, 74368, 3749, 6949, 7569, 74061, 0, 0, 6956, - 4403, 19962, 65559, 3299, 0, 0, 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, 0, 41183, 12907, 10271, 10287, - 684, 74185, 0, 2854, 119586, 4592, 65755, 0, 0, 11963, 65753, 0, 0, 0, 0, - 0, 9881, 0, 65757, 3415, 0, 0, 8648, 0, 118886, 43047, 0, 13180, 0, 418, - 0, 0, 10295, 10327, 10391, 41752, 74339, 8641, 41449, 0, 0, 0, 10911, - 6942, 0, 1024, 42849, 41751, 0, 8941, 0, 4554, 0, 9023, 11685, 0, 0, 0, - 0, 11437, 0, 0, 120700, 63967, 0, 41206, 120724, 9049, 41185, 43166, 0, - 11680, 0, 11686, 0, 65224, 4565, 4655, 119553, 0, 0, 64523, 10343, 10407, - 0, 66671, 11466, 0, 0, 42890, 0, 12050, 194750, 2860, 0, 0, 0, 42792, - 5743, 10424, 12065, 42872, 0, 0, 0, 8875, 0, 0, 917991, 7531, 12847, - 2413, 0, 0, 962, 0, 12855, 41196, 42564, 0, 1582, 0, 5508, 0, 0, 0, - 10801, 0, 118798, 0, 7173, 496, 10439, 4313, 64607, 119557, 7860, 0, 906, - 42793, 2842, 6405, 64722, 13132, 798, 64694, 12801, 8406, 1153, 0, 64788, - 0, 8054, 9174, 194749, 917976, 0, 0, 41611, 4642, 66574, 11556, 0, 0, 0, - 42089, 0, 9008, 0, 0, 195096, 42079, 917981, 917996, 42513, 0, 42842, - 73985, 0, 118974, 127003, 0, 0, 0, 0, 11335, 64069, 42093, 3920, 0, 0, 0, - 0, 4580, 41967, 0, 64384, 0, 119158, 3021, 42004, 0, 0, 42317, 41998, 0, - 6946, 0, 0, 0, 0, 65204, 0, 68113, 65196, 9880, 42010, 0, 64589, 10111, - 64875, 0, 0, 0, 11360, 0, 0, 0, 0, 42149, 0, 0, 0, 64941, 0, 0, 0, 0, - 65671, 4110, 66005, 6959, 10929, 119110, 0, 66703, 0, 8617, 41982, 6025, - 0, 0, 0, 0, 0, 9597, 42099, 43172, 0, 10117, 0, 0, 41642, 0, 0, 0, 8301, - 0, 0, 187, 0, 65669, 0, 4963, 0, 0, 0, 8964, 65676, 65785, 0, 41948, 0, - 0, 0, 41942, 65449, 3160, 10081, 13226, 42121, 42475, 0, 0, 41766, 0, - 65882, 0, 41760, 1189, 905, 480, 10985, 41733, 67859, 9629, 42436, 1745, - 0, 73835, 7888, 0, 0, 0, 0, 41507, 8806, 7023, 0, 74279, 64540, 0, 7867, - 0, 6236, 0, 0, 10505, 0, 12851, 118948, 348, 5474, 0, 3103, 0, 41753, 0, - 0, 0, 0, 0, 41739, 0, 42515, 10931, 41756, 43347, 42560, 5391, 41746, - 119147, 0, 41259, 5561, 74360, 2691, 0, 65553, 7933, 5562, 0, 0, 41262, - 0, 64421, 74846, 41251, 0, 0, 3979, 0, 0, 74813, 0, 0, 0, 0, 118847, - 41266, 0, 0, 917630, 10585, 65741, 41737, 9574, 2666, 0, 41738, 831, 419, - 13126, 10716, 0, 42822, 0, 6434, 0, 6939, 7766, 6432, 0, 0, 916, 769, - 41742, 11968, 120557, 6433, 5563, 547, 1943, 6439, 5560, 4994, 487, 0, - 4497, 3754, 0, 120424, 9039, 0, 41776, 0, 8716, 1595, 119206, 0, 0, - 74260, 0, 43267, 0, 0, 0, 12185, 0, 0, 0, 0, 0, 42856, 8634, 0, 0, 4209, - 120702, 0, 65879, 41538, 65612, 0, 669, 5679, 0, 0, 118961, 0, 0, 5678, - 11821, 0, 0, 460, 0, 0, 0, 0, 120747, 0, 0, 0, 119022, 0, 0, 0, 7782, - 9044, 4974, 11760, 917547, 7577, 65711, 41912, 1216, 0, 0, 5792, 0, 0, 0, - 0, 42264, 12244, 0, 5683, 0, 0, 0, 1549, 0, 0, 120398, 5682, 6206, 8670, - 74520, 5680, 917568, 10001, 0, 0, 1449, 10241, 0, 0, 0, 10552, 64342, - 41922, 0, 8584, 0, 5567, 2717, 0, 0, 5564, 42886, 41908, 42882, 5565, 0, - 0, 0, 65708, 65709, 5566, 0, 65704, 65705, 11904, 42875, 0, 42539, 5942, - 8468, 0, 10361, 10425, 65697, 65698, 65699, 0, 66598, 0, 64664, 10647, 0, - 0, 0, 457, 0, 65701, 1934, 43006, 0, 8802, 0, 65130, 0, 0, 6087, 0, 0, - 41757, 0, 8043, 8950, 65694, 64485, 43534, 10457, 0, 11961, 119006, 0, 0, - 0, 0, 0, 65515, 9499, 10035, 13069, 0, 0, 9889, 68184, 42806, 0, 7256, 0, - 0, 1667, 42161, 0, 42428, 0, 6934, 0, 10802, 64861, 6556, 0, 0, 8101, - 3610, 0, 41748, 4995, 955, 65907, 119208, 5350, 64339, 0, 64549, 10875, - 917956, 5477, 65692, 0, 0, 0, 12896, 10456, 917954, 0, 3874, 0, 0, 0, 0, - 0, 0, 65603, 0, 65687, 0, 41038, 74009, 119570, 67857, 8536, 0, 0, 0, - 74432, 724, 0, 1455, 0, 7183, 64583, 119233, 0, 4175, 917962, 0, 0, 939, - 0, 43520, 0, 74569, 917958, 0, 917959, 917945, 194704, 10788, 6088, 0, 0, - 190, 0, 12593, 0, 8188, 64408, 0, 4417, 0, 0, 41744, 0, 7827, 0, 6965, 0, - 0, 13201, 0, 0, 0, 74382, 73781, 7918, 73988, 0, 0, 917884, 1728, 0, - 120710, 178, 12972, 0, 0, 0, 120671, 0, 0, 0, 120405, 65690, 0, 0, - 119054, 0, 9252, 917889, 4652, 74259, 0, 0, 0, 13065, 9923, 10806, 0, - 11763, 0, 120688, 0, 119098, 0, 6993, 0, 0, 8333, 0, 0, 0, 0, 74464, 0, - 0, 74080, 0, 0, 11910, 0, 8278, 8963, 4034, 0, 0, 65344, 120517, 41747, - 0, 0, 8677, 0, 12707, 9350, 66037, 0, 8836, 12315, 12747, 8300, 0, 0, - 7491, 8856, 0, 0, 43150, 0, 120404, 65389, 120402, 120403, 10813, 2592, - 12853, 43269, 7263, 120244, 6536, 120238, 120239, 65516, 12321, 120391, - 120388, 120389, 10007, 120246, 9588, 120248, 1596, 120383, 41994, 65801, - 0, 0, 66572, 0, 0, 10613, 8092, 12805, 41928, 40981, 0, 0, 5006, 64328, - 0, 65298, 0, 8825, 74555, 65940, 0, 0, 6107, 0, 119177, 0, 0, 0, 11783, - 335, 120227, 64689, 438, 4510, 5765, 8721, 120233, 119227, 6092, 12840, - 43112, 8876, 120231, 8096, 10284, 0, 0, 0, 10380, 8733, 0, 0, 41602, 0, - 0, 74831, 917901, 0, 73747, 65399, 0, 64591, 42405, 0, 917897, 843, - 11541, 0, 0, 0, 41935, 74496, 41902, 0, 0, 215, 41258, 0, 43159, 1953, - 9579, 41938, 1256, 3910, 9407, 6242, 0, 0, 41257, 41900, 8675, 10700, - 8805, 1742, 0, 9333, 8202, 0, 0, 0, 0, 0, 73882, 499, 0, 0, 0, 126983, 0, - 1712, 5932, 0, 41762, 0, 0, 11967, 1775, 0, 0, 0, 0, 0, 9458, 0, 6470, - 9180, 120380, 43176, 0, 0, 42782, 0, 0, 0, 917912, 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, 0, 917980, 7507, - 0, 43149, 0, 65031, 7961, 1636, 0, 65029, 65024, 0, 12473, 6534, 0, 99, - 98, 97, 120571, 67584, 4049, 0, 0, 7090, 0, 7892, 917969, 10777, 0, - 65310, 65562, 66599, 0, 0, 8039, 3363, 66594, 0, 0, 0, 12596, 66595, - 42258, 42570, 5593, 119148, 120711, 0, 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, 0, 1536, - 64093, 73970, 0, 0, 0, 6020, 12716, 127112, 12744, 475, 120394, 13266, 0, - 127111, 0, 73926, 0, 10645, 1212, 6543, 0, 8134, 0, 2913, 73870, 0, 1866, - 0, 195095, 0, 8923, 1645, 12059, 66585, 0, 3196, 0, 0, 5935, 1250, 0, - 8174, 9787, 9856, 9859, 7916, 9861, 9860, 5258, 1882, 1892, 0, 10882, - 405, 11454, 73911, 0, 0, 41169, 8939, 41245, 0, 41170, 1454, 11369, 6477, - 12157, 0, 0, 0, 41172, 7855, 0, 0, 10480, 0, 0, 0, 8264, 12610, 0, 645, - 0, 7609, 40973, 0, 0, 0, 5824, 984, 0, 10688, 5851, 0, 7729, 73982, - 120518, 0, 195086, 66722, 0, 0, 0, 0, 4538, 120406, 43141, 0, 0, 74214, - 0, 0, 0, 118902, 43005, 0, 9552, 0, 0, 0, 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, 0, 8455, 10082, 11575, - 0, 119566, 0, 12808, 12183, 6145, 0, 64929, 0, 0, 0, 43186, 42509, 0, - 3922, 9187, 0, 0, 0, 119057, 11752, 3353, 9358, 0, 0, 66680, 120090, - 11747, 7931, 8558, 9795, 0, 0, 0, 120082, 120081, 120084, 41027, 120086, - 0, 120088, 120087, 7019, 120073, 0, 11751, 120078, 120077, 64657, 8657, - 120048, 8594, 120068, 0, 0, 120069, 120072, 120071, 0, 0, 43154, 41029, - 0, 11332, 65380, 7728, 0, 11294, 0, 66665, 7851, 0, 0, 8699, 0, 42524, 0, - 9085, 0, 7504, 9327, 6160, 0, 0, 0, 8088, 0, 74012, 0, 0, 4439, 6926, 0, - 12924, 0, 42369, 0, 65491, 65145, 9041, 43559, 64577, 10826, 0, 11296, 0, - 0, 0, 65825, 9577, 120494, 0, 64670, 0, 0, 42159, 11295, 0, 0, 120779, 0, - 0, 10902, 0, 0, 0, 0, 10472, 2995, 0, 0, 0, 2371, 0, 120808, 259, 1009, - 0, 2402, 2333, 6440, 0, 0, 65125, 41244, 0, 13271, 9103, 41180, 0, 0, 0, - 0, 10219, 0, 0, 0, 0, 43178, 127070, 41261, 119362, 917974, 8613, 0, - 118989, 917978, 917979, 41492, 12005, 917982, 0, 1890, 120056, 0, 0, 0, - 7293, 7991, 0, 10578, 0, 118840, 0, 0, 0, 0, 0, 0, 120054, 118815, 6635, - 0, 6164, 65170, 0, 0, 0, 11664, 0, 0, 0, 0, 118812, 0, 0, 0, 9175, 11925, - 0, 9088, 0, 64545, 1396, 0, 7546, 3847, 0, 0, 4985, 13288, 672, 8098, - 43196, 194746, 0, 0, 0, 74043, 65072, 1577, 11772, 0, 5928, 4525, 10658, - 65911, 1266, 10180, 0, 0, 12622, 0, 0, 0, 194714, 0, 13310, 773, 19933, - 1539, 0, 0, 66374, 0, 0, 0, 0, 3051, 5862, 7823, 0, 0, 120411, 3250, - 74020, 0, 66649, 9510, 66237, 0, 0, 41066, 64673, 917963, 917964, 0, - 3505, 8707, 917968, 917965, 917966, 917971, 917972, 3471, 917970, 5479, - 882, 6686, 119584, 11613, 120772, 42754, 0, 0, 0, 0, 0, 0, 0, 3225, 0, - 4433, 41156, 73745, 43173, 1443, 4381, 0, 0, 10926, 11756, 11757, 64879, + 9467, 5558, 8878, 0, 195036, 7451, 6706, 10146, 0, 9086, 64566, 0, 64584, + 7437, 7454, 12594, 0, 68362, 4546, 7731, 0, 119909, 74243, 0, 3805, 0, + 194565, 44001, 41008, 0, 6307, 19949, 0, 7544, 0, 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, 0, 0, 0, 5506, 0, + 1911, 66652, 0, 9961, 8845, 66698, 0, 10792, 8889, 0, 2098, 0, 64751, 0, + 66622, 0, 0, 74364, 0, 0, 0, 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, 0, 0, 0, 4357, 0, 0, 0, 74233, + 9967, 119852, 42860, 119838, 10941, 65721, 6962, 0, 0, 119324, 0, 11014, + 0, 8942, 12000, 69224, 0, 0, 11974, 0, 42772, 127518, 11650, 5013, 0, 0, + 66210, 118914, 6613, 0, 0, 0, 0, 0, 64714, 0, 0, 0, 12120, 43476, 0, + 11024, 74811, 0, 10563, 0, 0, 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, 0, + 3483, 119593, 1989, 0, 0, 9104, 3503, 65375, 0, 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, 0, + 1403, 0, 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, + 0, 12943, 65185, 41869, 12619, 0, 10154, 0, 74439, 2039, 0, 7446, 1684, + 63979, 10974, 458, 120620, 0, 69791, 0, 11916, 65016, 0, 78067, 42115, 0, + 12288, 78057, 0, 1493, 42111, 7553, 4097, 0, 13080, 0, 65808, 6610, 6030, + 8059, 7508, 13131, 0, 0, 0, 8794, 41278, 41629, 12154, 0, 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, 0, 195076, 0, 7405, 10105, 65810, 0, 41632, 7493, 0, 0, 41622, + 0, 0, 119556, 74584, 7632, 9716, 19954, 9805, 5990, 900, 0, 63957, 0, 0, + 3612, 0, 64376, 0, 5389, 0, 0, 65938, 2839, 9621, 582, 0, 74368, 3749, + 6949, 7569, 74061, 0, 0, 6956, 4403, 19962, 65559, 3299, 0, 0, 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, 0, 11963, 43620, 0, 78889, 0, 0, 0, 9881, 43115, 65757, 3415, + 0, 0, 8648, 0, 6741, 43047, 0, 13180, 0, 418, 0, 0, 10295, 10327, 10391, + 41752, 74339, 8641, 41449, 0, 74100, 0, 10911, 6942, 0, 1024, 42849, + 41751, 69776, 8941, 0, 4554, 0, 9023, 11685, 0, 9928, 78617, 0, 11437, + 43741, 0, 120700, 63967, 0, 41206, 120724, 9049, 41185, 43166, 0, 11680, + 0, 11686, 0, 65224, 4565, 4655, 119553, 0, 0, 64523, 10343, 10407, 0, + 66671, 11466, 0, 0, 42890, 0, 12050, 68201, 2860, 0, 0, 0, 42792, 5743, + 10424, 12065, 42872, 0, 0, 0, 8875, 0, 0, 917991, 7531, 12847, 2413, 0, + 78635, 962, 0, 12855, 41196, 42564, 0, 1582, 0, 5508, 0, 0, 0, 10801, 0, + 118798, 0, 7173, 496, 10439, 4313, 64607, 119557, 7860, 0, 906, 42793, + 2842, 6405, 64722, 13132, 798, 64694, 12801, 8406, 1153, 0, 64788, 0, + 8054, 9174, 194749, 917976, 9964, 0, 41611, 4642, 66574, 11556, 0, 0, + 78857, 42089, 78855, 9008, 0, 0, 195096, 42079, 917981, 77924, 42513, 0, + 42842, 73985, 65285, 118974, 127003, 0, 0, 0, 0, 11335, 64069, 42093, + 3920, 0, 0, 0, 0, 4580, 41967, 0, 64384, 0, 119158, 3021, 42004, 0, 0, + 42317, 41998, 0, 6946, 0, 0, 0, 0, 65204, 0, 68113, 42690, 9880, 42010, + 74824, 64589, 10111, 64875, 0, 68399, 43998, 11360, 0, 0, 0, 0, 42149, 0, + 0, 0, 64941, 77919, 0, 0, 0, 55247, 4110, 66005, 6959, 10929, 119110, 0, + 66703, 77921, 8617, 41982, 6025, 69242, 0, 0, 0, 0, 9597, 42099, 43172, + 0, 10117, 0, 0, 41636, 0, 0, 120681, 8301, 0, 0, 187, 0, 65669, 0, 4963, + 0, 127517, 0, 8964, 65676, 65785, 0, 41948, 0, 0, 0, 41942, 65449, 3160, + 10081, 13226, 42121, 42475, 42663, 0, 41766, 0, 65882, 78849, 41760, + 1189, 905, 480, 10985, 41733, 67859, 9629, 6742, 1745, 43625, 73835, + 7888, 0, 0, 0, 42656, 41507, 8806, 7023, 0, 74279, 9447, 78651, 7867, + 69218, 6236, 0, 0, 10505, 0, 12851, 118948, 348, 5474, 0, 3103, 0, 41753, + 0, 0, 0, 78844, 78845, 41739, 78843, 42515, 10931, 41756, 43347, 42560, + 5391, 41746, 119147, 0, 41259, 5561, 74360, 2691, 0, 65553, 7933, 5562, + 69800, 917851, 41262, 0, 64421, 74846, 41251, 0, 0, 3979, 0, 0, 74813, 0, + 0, 0, 0, 118847, 41266, 0, 0, 917630, 10585, 65741, 41737, 9574, 2666, 0, + 41738, 831, 419, 13126, 10716, 0, 42822, 0, 6434, 0, 6939, 7766, 6432, 0, + 0, 916, 769, 41742, 11968, 74805, 6433, 5563, 547, 1943, 6439, 5560, + 4994, 487, 0, 4497, 3754, 127056, 120424, 9039, 0, 41776, 0, 8716, 1595, + 41615, 0, 0, 74260, 0, 43267, 43219, 0, 0, 12185, 0, 0, 68355, 68357, 0, + 42856, 8634, 0, 0, 4209, 120702, 0, 65879, 41538, 65612, 0, 669, 5679, 0, + 69786, 118961, 0, 0, 5678, 11821, 0, 6711, 460, 0, 0, 0, 0, 120747, 0, 0, + 78050, 119022, 0, 0, 0, 7782, 9044, 4974, 11760, 78494, 7577, 65711, + 41912, 1216, 0, 0, 5792, 0, 0, 78501, 0, 42264, 12244, 0, 5683, 0, 0, + 78119, 1549, 0, 0, 120398, 5682, 6206, 8670, 10256, 5680, 917568, 10001, + 0, 69768, 1449, 10241, 78290, 0, 0, 10552, 64342, 41922, 0, 8584, 0, + 5567, 2717, 0, 0, 5564, 42886, 41908, 42882, 5565, 0, 0, 0, 65708, 65709, + 5566, 69803, 65704, 65705, 11904, 42875, 43373, 42539, 5942, 8468, 0, + 10361, 10425, 65697, 65698, 65699, 0, 66598, 0, 64664, 10647, 78702, + 78703, 78690, 457, 78502, 65701, 1934, 43006, 0, 8802, 78710, 65130, + 78706, 78709, 6087, 78705, 78716, 41757, 78711, 8043, 8950, 65694, 64485, + 43534, 10457, 0, 11961, 78725, 78722, 78723, 78720, 78721, 0, 65515, + 9499, 10035, 13069, 0, 0, 9889, 68184, 42806, 0, 7256, 0, 0, 1667, 42161, + 0, 42428, 0, 6934, 0, 10802, 64861, 6556, 78390, 0, 8101, 3610, 0, 41748, + 4995, 955, 65907, 119208, 5350, 64339, 78306, 64549, 10875, 917956, 5477, + 65692, 0, 0, 120397, 12896, 10456, 917954, 0, 3874, 0, 0, 0, 0, 0, 0, + 65603, 0, 65687, 0, 41038, 74009, 119570, 42239, 8536, 78740, 0, 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, + 0, 0, 6370, 0, 7827, 68441, 6965, 0, 0, 13201, 0, 0, 0, 74382, 73781, + 7918, 73988, 0, 0, 917884, 1728, 0, 120710, 178, 12972, 0, 0, 0, 120671, + 0, 0, 78327, 120405, 65690, 0, 0, 119054, 0, 9252, 917889, 4652, 68371, + 0, 0, 0, 13065, 9923, 10806, 0, 11763, 0, 120688, 6723, 78187, 0, 6993, + 0, 0, 8333, 0, 0, 11390, 0, 74464, 0, 0, 74080, 0, 0, 11910, 0, 8278, + 8963, 4034, 0, 0, 65344, 120517, 41747, 0, 0, 8677, 0, 12707, 9350, + 66037, 0, 8836, 12315, 12747, 8300, 0, 0, 7491, 8856, 0, 0, 43150, 0, + 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, 0, 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, 0, 11783, 335, 120227, 64689, + 438, 4510, 5765, 8721, 120233, 119227, 6092, 12840, 43112, 8876, 120231, + 8096, 10284, 0, 0, 0, 10380, 8733, 0, 0, 41602, 0, 0, 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, 0, 41257, 41900, 8675, 10700, 8805, 1742, 0, + 9333, 8202, 0, 0, 0, 0, 0, 73882, 499, 0, 43467, 0, 55290, 0, 1712, 5932, + 77845, 41762, 0, 0, 11967, 1775, 0, 0, 0, 0, 0, 9458, 0, 6470, 9180, + 120380, 43176, 0, 0, 42782, 0, 0, 0, 917912, 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, 194964, 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, 0, + 65310, 65562, 66599, 66722, 0, 8039, 3363, 66594, 43434, 0, 0, 12596, + 66595, 42258, 42570, 5593, 119148, 120711, 0, 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, 64093, 73970, 77930, 0, 0, 6020, 12716, 127112, 12744, 475, + 120394, 13266, 0, 127111, 0, 73926, 0, 10645, 1212, 6543, 0, 8134, 0, + 2913, 73870, 0, 1866, 0, 195095, 0, 8923, 1645, 12059, 66585, 78786, + 3196, 0, 0, 5935, 1250, 127066, 8174, 9787, 6733, 9859, 7916, 9861, 9860, + 5258, 1882, 1892, 6731, 10882, 405, 11454, 73911, 0, 0, 41169, 8939, + 41245, 0, 41170, 1454, 11369, 6477, 12157, 0, 0, 0, 41172, 7855, 0, 0, + 10480, 0, 0, 77936, 8264, 12610, 0, 645, 0, 7609, 40973, 0, 73833, 78249, + 5824, 984, 77918, 10688, 5851, 0, 7729, 73982, 120518, 0, 195086, 43369, + 0, 0, 68415, 0, 4538, 120406, 43141, 0, 0, 74214, 73886, 0, 0, 118902, + 43005, 78448, 9552, 0, 0, 0, 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, 0, 8455, 10082, 11575, 0, + 119566, 0, 12808, 12183, 6145, 0, 64929, 0, 0, 0, 43186, 42509, 0, 3922, + 9187, 0, 0, 0, 119057, 11752, 3353, 9358, 0, 917957, 66680, 120090, + 11747, 7931, 8558, 9795, 68380, 0, 0, 120082, 120081, 120084, 41027, + 120086, 0, 120088, 120087, 7019, 120073, 0, 11751, 120078, 78294, 64657, + 8657, 120048, 8594, 120068, 0, 0, 120069, 120072, 120071, 0, 0, 43154, + 41029, 0, 11332, 65380, 7728, 0, 11294, 0, 66665, 7851, 0, 8375, 8699, 0, + 42524, 0, 9085, 0, 7504, 9327, 6160, 0, 0, 0, 8088, 0, 74012, 0, 0, 4439, + 6926, 0, 12924, 0, 42369, 0, 65491, 65145, 9041, 43559, 64577, 10826, 0, + 11296, 0, 0, 0, 65825, 9577, 68199, 0, 64670, 0, 78056, 6793, 11295, 0, + 78053, 73872, 0, 0, 10902, 0, 0, 78070, 78068, 10472, 2995, 0, 0, 64682, + 2371, 78069, 120808, 259, 1009, 0, 2402, 2333, 6440, 0, 0, 65125, 41244, + 0, 13271, 9103, 41180, 0, 0, 0, 0, 10219, 0, 0, 0, 0, 43178, 127070, + 41261, 119362, 43640, 8613, 0, 118989, 6736, 195092, 41492, 12005, + 917982, 0, 1890, 120056, 0, 0, 0, 7293, 7991, 0, 10578, 0, 78076, 0, + 78077, 0, 0, 78800, 0, 120054, 42668, 6635, 0, 6164, 65170, 0, 0, 0, + 11664, 0, 0, 0, 0, 118812, 0, 0, 0, 9175, 11925, 78045, 9088, 0, 64545, + 1396, 0, 7546, 3847, 0, 0, 4985, 13288, 672, 8098, 43196, 194746, 0, 0, + 0, 74043, 65072, 1577, 11772, 13041, 5928, 4525, 10658, 65911, 1266, + 10180, 0, 0, 12622, 0, 0, 0, 194714, 0, 13310, 773, 19933, 1539, 0, + 126983, 42731, 0, 0, 0, 0, 3051, 5862, 7823, 0, 0, 120411, 3250, 43991, + 0, 66649, 9510, 66237, 0, 0, 41066, 64673, 917963, 917964, 0, 3505, 8707, + 917968, 6725, 917966, 917971, 917972, 3471, 917970, 5479, 882, 6686, + 119584, 11613, 120772, 42754, 0, 0, 0, 0, 0, 0, 0, 3225, 917996, 4433, + 41156, 43973, 43173, 1443, 4381, 0, 0, 10926, 11756, 11757, 64879, 917949, 917950, 917947, 13227, 0, 10021, 5160, 1387, 0, 917953, 41418, 0, - 65914, 917957, 217, 917955, 917960, 917961, 10443, 10789, 41158, 119257, - 4274, 0, 41483, 0, 41250, 0, 42179, 0, 5931, 11744, 0, 0, 41252, 66682, - 0, 119637, 41249, 1366, 64635, 0, 12466, 0, 0, 4397, 0, 0, 41296, 9545, - 41291, 0, 0, 41485, 3511, 41282, 5923, 10400, 0, 0, 760, 0, 12088, 5786, - 0, 42256, 119869, 119861, 417, 41474, 119562, 41565, 0, 5934, 119867, - 66583, 119231, 64877, 0, 64481, 0, 0, 41956, 0, 126995, 0, 0, 0, 42273, - 5819, 0, 917556, 0, 0, 0, 65910, 0, 10246, 0, 0, 1237, 10274, 4552, 0, 0, - 0, 1375, 66705, 43573, 65260, 42063, 0, 42811, 10312, 74192, 120794, - 7840, 0, 64890, 10252, 0, 0, 43185, 0, 4396, 0, 119880, 10769, 10331, - 119041, 0, 9753, 0, 8944, 0, 0, 10473, 0, 0, 6072, 43025, 10299, 0, 0, - 120608, 119874, 0, 0, 0, 0, 9330, 0, 7222, 10283, 10315, 10379, 4996, 0, - 13281, 66517, 7865, 10087, 0, 0, 119092, 0, 0, 7565, 66363, 12952, 64806, - 43180, 0, 68096, 0, 0, 74288, 622, 74023, 885, 64772, 1602, 0, 0, 852, 0, - 12160, 0, 10212, 65435, 0, 12071, 9609, 12156, 917983, 917984, 43586, - 11035, 10411, 917988, 10255, 10263, 10279, 4194, 10375, 917993, 0, 4315, - 12644, 917997, 917994, 917995, 43343, 0, 917998, 917999, 41177, 0, 0, - 917792, 0, 0, 8715, 0, 41179, 0, 43313, 0, 41176, 0, 994, 0, 8452, - 127103, 73966, 0, 0, 5921, 0, 2597, 0, 5922, 118903, 127109, 4186, - 127107, 127106, 127105, 73973, 0, 4406, 74601, 8480, 0, 9747, 0, 4413, 0, - 42268, 3198, 5924, 5920, 0, 6921, 0, 74007, 42869, 8418, 11681, 43169, - 10176, 0, 742, 0, 2893, 10772, 65276, 5937, 1914, 2553, 11682, 0, 0, 0, - 8363, 0, 2993, 7772, 3916, 0, 0, 1141, 42407, 8159, 718, 7572, 973, 0, - 120718, 3235, 2415, 43164, 0, 8018, 42333, 74756, 10675, 6937, 42486, 0, - 65390, 0, 0, 1202, 0, 0, 127037, 0, 0, 0, 0, 64542, 3260, 73829, 65388, - 0, 8419, 0, 127036, 0, 0, 74193, 0, 0, 0, 0, 1431, 0, 66565, 10821, 0, - 12804, 0, 8229, 1235, 3307, 11472, 0, 0, 4544, 0, 0, 0, 1740, 0, 8758, - 985, 12882, 64511, 0, 12068, 0, 0, 10141, 0, 63761, 8785, 4476, 0, 63763, - 12655, 8907, 0, 0, 0, 0, 0, 119572, 10665, 64616, 41572, 0, 0, 0, 41573, - 0, 3931, 0, 74143, 0, 0, 0, 0, 11982, 0, 0, 0, 0, 64484, 0, 41167, 0, - 41735, 0, 717, 10754, 0, 0, 0, 0, 63767, 0, 1780, 6936, 0, 0, 819, 10611, - 9694, 126978, 0, 0, 0, 0, 0, 0, 12820, 0, 6578, 7009, 7523, 6922, 74218, - 67848, 7525, 3346, 8339, 0, 0, 575, 268, 0, 8563, 0, 120343, 41541, - 65565, 8336, 5936, 7290, 0, 8337, 13081, 308, 11388, 7522, 120721, 0, - 65466, 11090, 6953, 0, 120346, 0, 120345, 5926, 0, 0, 0, 0, 0, 0, 9038, - 7887, 0, 7830, 11651, 13093, 64002, 0, 65742, 0, 119597, 11590, 0, 74048, - 0, 8595, 0, 0, 0, 13097, 0, 64643, 13283, 12697, 0, 120621, 3488, 5933, - 10033, 73738, 66241, 65570, 0, 12297, 119153, 1955, 0, 5349, 42538, 0, 0, - 65308, 9462, 0, 0, 0, 0, 0, 0, 5831, 0, 7638, 0, 42764, 0, 43109, 7637, - 11957, 120600, 0, 0, 0, 0, 0, 0, 0, 7636, 65171, 9124, 0, 120331, 0, 291, - 0, 0, 2027, 66230, 0, 0, 10403, 0, 4640, 64713, 10224, 120429, 42512, - 120431, 120430, 0, 0, 0, 0, 0, 0, 0, 119094, 74213, 7824, 0, 0, 41274, - 5778, 6302, 0, 0, 12680, 119130, 1417, 0, 194914, 9452, 0, 0, 11552, 0, - 0, 0, 65391, 0, 10172, 65453, 120408, 41264, 120410, 6426, 4641, 9179, - 64819, 64906, 41255, 42036, 41469, 41269, 120412, 41267, 4646, 120425, - 865, 42034, 120426, 120421, 4645, 42033, 120422, 0, 0, 64728, 0, 0, 0, - 1659, 919, 42784, 1671, 195089, 6069, 9219, 195090, 1661, 13120, 63784, - 195094, 10140, 9713, 119143, 0, 0, 0, 2306, 10485, 118943, 6068, 10612, - 195099, 0, 195101, 195078, 41462, 195080, 195079, 5422, 195081, 0, 0, 0, - 10229, 10635, 826, 195083, 195082, 195085, 195084, 195087, 6483, 0, 1808, - 7848, 0, 8100, 0, 0, 0, 13301, 0, 9667, 0, 0, 0, 11003, 9904, 0, 0, - 120690, 9144, 10921, 0, 0, 9840, 65131, 917560, 0, 10313, 0, 0, 64320, - 10265, 0, 10962, 118970, 43008, 8945, 0, 0, 41, 195072, 1792, 120515, - 195073, 8655, 195075, 0, 0, 12066, 0, 385, 4152, 2585, 0, 0, 3126, 0, - 74136, 10957, 0, 0, 0, 0, 13157, 0, 0, 3570, 0, 7443, 0, 0, 6997, 0, 0, - 7879, 8739, 11075, 0, 65216, 0, 0, 2593, 8463, 7810, 917862, 7839, - 119913, 0, 917860, 9691, 4411, 917847, 0, 0, 0, 0, 65254, 10066, 0, 0, 0, - 0, 13061, 8016, 0, 19932, 64831, 0, 0, 12390, 119171, 1634, 68115, 0, + 65914, 6721, 217, 917955, 917960, 917961, 10443, 10789, 41158, 119257, + 4274, 0, 41483, 0, 41250, 0, 42179, 0, 5931, 11744, 69232, 0, 41252, + 66682, 0, 119637, 41249, 1366, 64635, 0, 12466, 0, 0, 4397, 0, 0, 41296, + 9545, 41291, 0, 0, 41485, 3511, 41282, 5923, 10400, 0, 0, 760, 0, 12088, + 5786, 0, 42256, 119869, 119861, 417, 41474, 119562, 41565, 0, 5934, + 119867, 66583, 119231, 64877, 0, 64481, 78614, 66013, 41956, 43455, + 126995, 0, 0, 0, 42273, 5819, 0, 917556, 0, 0, 0, 65910, 0, 10246, + 120816, 0, 1237, 10274, 4552, 0, 0, 0, 1375, 66705, 43573, 65260, 42063, + 0, 42811, 10312, 74192, 120794, 7840, 0, 43630, 10252, 0, 0, 43185, 0, + 4396, 0, 119880, 10769, 9676, 119041, 0, 9753, 0, 8944, 0, 0, 10473, 0, + 0, 6072, 43025, 10299, 0, 0, 120608, 66326, 0, 0, 0, 0, 9330, 0, 7222, + 10283, 10315, 10379, 4996, 0, 13281, 66517, 7865, 10087, 78343, 0, 78347, + 0, 0, 7565, 66363, 12952, 64806, 43180, 77928, 68096, 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, 917993, 0, 4315, 12644, 127516, + 77937, 43639, 43343, 0, 917998, 11501, 41177, 0, 0, 917792, 0, 0, 8715, + 0, 41179, 0, 43313, 0, 41176, 0, 994, 0, 8452, 127103, 73966, 0, 0, 5921, + 0, 2597, 0, 5922, 118903, 77943, 4186, 127107, 127106, 127105, 6718, 0, + 4406, 74601, 8480, 9192, 9747, 0, 4413, 0, 42268, 3198, 5924, 5920, 0, + 6921, 78081, 74007, 42869, 8418, 11681, 43169, 10176, 0, 742, 0, 2893, + 10772, 65276, 5937, 1914, 2553, 11682, 6756, 0, 0, 8363, 0, 2993, 7772, + 3916, 0, 120494, 1141, 42407, 8159, 718, 7572, 973, 0, 120718, 3235, + 2415, 43164, 0, 8018, 42333, 74756, 10675, 6937, 42486, 43381, 65390, 0, + 0, 1202, 0, 0, 127037, 0, 0, 0, 78182, 64542, 3260, 73829, 65388, 9945, + 8419, 78042, 6738, 0, 43681, 74193, 2059, 0, 0, 55237, 1431, 0, 66565, + 10821, 0, 12804, 0, 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, 0, 0, 41573, 0, 3931, 120295, 74143, + 0, 0, 0, 0, 11982, 0, 0, 0, 0, 64484, 0, 41167, 0, 41735, 0, 717, 10754, + 0, 0, 0, 0, 63767, 0, 1780, 6936, 0, 0, 819, 10611, 9694, 126978, 0, 0, + 0, 0, 0, 0, 12820, 0, 6578, 7009, 7523, 6922, 74218, 67848, 7525, 3346, + 8339, 0, 0, 575, 268, 78111, 8563, 5754, 120343, 41541, 65565, 8336, + 5936, 7290, 78117, 8337, 13081, 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, 0, 8595, 0, 0, 43703, 13097, 0, 64643, + 13283, 12697, 0, 12381, 3488, 5933, 10033, 73738, 66241, 65570, 0, 12297, + 119153, 1955, 0, 5349, 42538, 0, 0, 65308, 9462, 0, 0, 0, 0, 42736, 0, + 5756, 0, 7638, 41642, 42764, 0, 43109, 7637, 5752, 120600, 0, 73832, 0, + 120635, 0, 78334, 0, 7636, 65171, 9124, 0, 78892, 0, 291, 0, 0, 2027, + 66230, 78142, 78136, 10403, 0, 4640, 64713, 10224, 120429, 42512, 120431, + 120430, 0, 0, 0, 0, 0, 0, 0, 119094, 74213, 7824, 0, 0, 41274, 5778, + 6302, 0, 0, 12680, 119130, 1417, 77889, 194914, 9452, 0, 74393, 11552, 0, + 0, 0, 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, 0, 0, 64728, 0, 78673, + 78674, 1659, 919, 42784, 1671, 195089, 6069, 9219, 195090, 1661, 13120, + 63784, 69819, 10140, 9713, 119143, 0, 0, 0, 2306, 10485, 118943, 6068, + 10612, 195099, 0, 195101, 195078, 41462, 195080, 195079, 5422, 195081, 0, + 0, 0, 10229, 10635, 826, 195083, 195082, 195085, 195084, 195087, 6483, 0, + 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, 0, 77951, + 12066, 0, 385, 4152, 2585, 0, 119068, 3126, 0, 74136, 10957, 0, 43258, 0, + 0, 13157, 0, 0, 3570, 0, 7443, 0, 44006, 6997, 0, 0, 7879, 8739, 11075, + 0, 65216, 0, 69795, 2593, 8463, 7810, 917862, 7839, 119913, 78806, + 119912, 9691, 4411, 78802, 0, 0, 43442, 78799, 65254, 10066, 0, 0, 0, 0, + 13061, 8016, 78687, 19932, 64831, 0, 0, 12390, 119171, 1634, 68115, 0, 11056, 0, 119925, 0, 41165, 11328, 12450, 0, 41166, 0, 12456, 119914, - 171, 5941, 12452, 917544, 12458, 12531, 0, 43013, 63800, 74162, 0, - 120483, 194920, 0, 12454, 63806, 42132, 12063, 195077, 0, 3230, 0, 0, 0, - 5209, 297, 5810, 8522, 8415, 0, 0, 0, 7077, 2497, 0, 960, 74156, 6981, 0, - 12938, 4292, 0, 74815, 10512, 0, 74814, 0, 0, 0, 2503, 73778, 1762, - 73833, 2495, 0, 5844, 119124, 118838, 0, 12654, 4663, 1899, 0, 2507, 0, - 8726, 65594, 0, 0, 0, 8892, 0, 0, 0, 0, 5782, 420, 0, 0, 120462, 10797, - 63794, 0, 0, 0, 63796, 118965, 0, 66581, 119205, 41608, 0, 0, 0, 4659, - 120788, 0, 0, 0, 0, 0, 0, 0, 329, 120472, 0, 917548, 0, 0, 41188, 13244, - 120466, 42167, 0, 0, 5380, 0, 0, 1155, 11365, 43126, 0, 0, 65684, 0, - 5601, 65192, 42765, 63752, 0, 7987, 0, 1172, 0, 0, 43601, 120476, 74126, - 5603, 0, 4473, 0, 194823, 0, 65347, 65346, 65345, 0, 0, 5347, 0, 0, - 73868, 118944, 10588, 0, 0, 63755, 0, 5343, 120473, 0, 4555, 5341, 0, 0, - 0, 5351, 0, 43104, 65244, 917892, 64541, 42519, 74472, 0, 0, 74765, - 917888, 0, 6638, 0, 65113, 271, 74180, 65370, 8835, 65368, 12653, 65366, - 42172, 41086, 65363, 65362, 65361, 11912, 65359, 11323, 65357, 11800, - 65355, 5345, 65353, 65352, 65351, 761, 65349, 19959, 0, 0, 0, 0, 0, - 64647, 0, 0, 4699, 0, 0, 0, 0, 64605, 0, 0, 0, 4916, 0, 380, 10958, - 66563, 917906, 0, 9773, 13167, 12918, 41096, 73980, 0, 917898, 917893, - 10684, 0, 917896, 0, 7946, 12541, 8182, 0, 0, 0, 0, 0, 0, 9005, 1225, - 6630, 0, 0, 0, 0, 8847, 0, 65876, 5535, 8329, 74590, 0, 0, 0, 0, 3127, - 2595, 65713, 0, 0, 5607, 41089, 0, 0, 74256, 2665, 11304, 0, 74200, 4970, - 8764, 120459, 8934, 0, 41566, 4492, 0, 65011, 41090, 0, 0, 1188, 7254, - 1100, 0, 0, 41081, 2912, 11749, 0, 0, 0, 3572, 10023, 4959, 13079, 0, 0, - 9729, 0, 0, 0, 0, 0, 0, 11803, 7996, 9907, 41450, 13304, 0, 0, 41451, 0, - 0, 8273, 0, 3451, 0, 972, 41453, 0, 0, 73883, 0, 73945, 0, 3455, 19955, - 9538, 0, 0, 0, 0, 0, 0, 11396, 0, 11019, 0, 0, 0, 120507, 41078, 0, 261, - 5927, 7791, 0, 0, 0, 10696, 0, 6073, 9838, 118920, 0, 6075, 0, 282, 0, - 6437, 74078, 0, 65861, 0, 0, 0, 0, 3474, 118787, 0, 120655, 6081, 0, 0, - 74076, 0, 0, 0, 0, 0, 0, 8751, 12623, 120273, 7816, 12636, 4665, 12628, - 4670, 120271, 120272, 0, 9642, 10912, 958, 0, 11387, 0, 4666, 0, 4915, 0, - 4669, 0, 68099, 13287, 4664, 10836, 120550, 0, 0, 0, 43595, 7450, 0, - 917875, 8664, 9697, 3606, 917873, 0, 0, 64815, 1063, 120250, 120251, - 9772, 7255, 8886, 1389, 0, 120257, 120258, 120259, 12941, 120253, 120254, - 120255, 120256, 12301, 120266, 120267, 41102, 66604, 120262, 120263, - 120264, 1017, 66600, 523, 505, 1447, 74436, 0, 0, 0, 8608, 42789, 0, 0, - 0, 119196, 11307, 66707, 917871, 0, 11745, 7919, 0, 1641, 0, 0, 8966, 0, - 0, 5908, 0, 0, 74562, 0, 1699, 74191, 74843, 0, 0, 6306, 10169, 0, - 119251, 0, 3766, 120457, 120456, 120455, 6611, 257, 43170, 13153, 0, - 42386, 0, 9436, 2599, 0, 6496, 9449, 5930, 11476, 11033, 11447, 0, 5622, - 120436, 8477, 3760, 1718, 9442, 66433, 3776, 0, 41435, 4352, 0, 2435, - 120809, 5621, 0, 4201, 3778, 4203, 4202, 4205, 4204, 120447, 3768, 68142, - 765, 41440, 3764, 8473, 120440, 8469, 120438, 12947, 4564, 0, 0, 74271, - 73753, 0, 0, 0, 0, 5225, 0, 0, 0, 0, 0, 0, 74793, 5626, 73807, 11771, 0, - 0, 0, 0, 5353, 5625, 74179, 0, 0, 1010, 64572, 0, 42623, 64277, 0, 6952, - 0, 120752, 119003, 2590, 5629, 65552, 7551, 10325, 5632, 10471, 120038, + 171, 5941, 12452, 917544, 12458, 12531, 78779, 43013, 63800, 74162, 0, + 120483, 9969, 0, 12454, 63806, 42132, 12063, 78425, 78424, 3230, 0, 0, 0, + 5209, 297, 5810, 8522, 8415, 0, 78429, 78428, 7077, 2497, 0, 960, 74156, + 6981, 0, 12938, 4292, 0, 74815, 10512, 0, 74814, 78875, 127505, 78876, + 2503, 73778, 1762, 69794, 2495, 78873, 5844, 78874, 118838, 0, 12654, + 4663, 1899, 78877, 2507, 64121, 8726, 65594, 0, 0, 0, 8892, 0, 0, 0, 0, + 5782, 420, 0, 0, 120462, 10797, 63794, 0, 0, 64814, 63796, 77965, 0, + 66581, 119204, 41608, 0, 0, 63792, 4659, 120788, 0, 43676, 0, 0, 0, 0, 0, + 329, 77968, 0, 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, 0, 1172, 69799, 6786, 43601, 120476, 74126, 5603, + 0, 4473, 0, 194823, 0, 65347, 65346, 65345, 0, 0, 5347, 69802, 0, 73868, + 118944, 10588, 0, 0, 63755, 0, 5343, 78422, 0, 4555, 5341, 0, 0, 0, 5351, + 0, 43104, 65244, 917892, 64541, 42519, 74472, 0, 0, 74765, 917888, 0, + 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, 0, 63856, 0, 0, 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, 0, 69780, 0, 0, 0, + 0, 9005, 1225, 6630, 0, 0, 0, 0, 8847, 0, 65876, 5535, 8329, 74590, 0, 0, + 0, 0, 3127, 2595, 65713, 42013, 0, 5607, 41089, 0, 0, 74256, 2665, 11304, + 0, 74200, 4970, 8764, 120459, 8934, 0, 41566, 4492, 0, 65011, 41090, 0, + 0, 1188, 7254, 1100, 0, 0, 41081, 2912, 11749, 69792, 0, 0, 3572, 10023, + 4959, 13079, 0, 0, 9729, 0, 0, 0, 43361, 0, 0, 11803, 7996, 9907, 41450, + 13304, 0, 127260, 41451, 0, 11095, 8273, 127533, 3451, 0, 972, 41453, 0, + 0, 73883, 0, 73945, 0, 3455, 19955, 9538, 0, 69807, 0, 0, 0, 0, 11396, 0, + 11019, 0, 0, 0, 120507, 41078, 0, 261, 5927, 7791, 0, 0, 0, 10696, 0, + 6073, 9838, 118920, 0, 6075, 0, 282, 0, 6437, 74078, 0, 65861, 0, 0, 0, + 0, 3474, 118787, 0, 120655, 6081, 0, 0, 74076, 78879, 0, 0, 0, 0, 0, + 8751, 11499, 120273, 7816, 12636, 4665, 12628, 4670, 120271, 120272, 0, + 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, 0, 120257, 120258, 120259, 12941, 42661, 120254, 120255, 120256, + 12301, 120266, 69820, 41102, 66604, 120262, 120263, 120264, 1017, 66600, + 523, 505, 1447, 74436, 0, 0, 0, 8608, 42789, 0, 0, 0, 119196, 11307, + 66707, 917871, 0, 11745, 7919, 0, 1641, 0, 0, 8966, 0, 0, 5908, 0, 0, + 6744, 0, 1699, 74191, 74843, 0, 0, 6306, 10169, 0, 119251, 118939, 3766, + 2389, 120456, 120455, 6611, 257, 43170, 13153, 0, 42386, 0, 9436, 2599, + 0, 6496, 9449, 5930, 11476, 11033, 11447, 0, 5622, 120436, 8477, 3760, + 1718, 9442, 66433, 3776, 0, 41435, 4352, 0, 2435, 120809, 5621, 0, 4201, + 3778, 4203, 4202, 4205, 4204, 120447, 3768, 68142, 765, 41440, 3764, + 8473, 6373, 8469, 120438, 12947, 4564, 0, 0, 74271, 73753, 8374, 0, 0, + 6829, 5225, 0, 0, 0, 0, 119615, 0, 74793, 5626, 73807, 11771, 0, 0, 0, 0, + 5353, 5625, 74179, 0, 0, 1010, 64572, 41780, 42623, 64277, 0, 6952, 0, + 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, 10961, 0, 203, 0, 0, 0, 0, 0, 0, - 64378, 42054, 0, 0, 554, 119649, 11358, 0, 12182, 42048, 11065, 0, 73891, - 0, 0, 5694, 7689, 74528, 9323, 4325, 3047, 10317, 175, 0, 0, 74605, 0, 0, - 1243, 42154, 5431, 6652, 0, 0, 0, 0, 68118, 0, 1129, 0, 0, 65900, 1986, - 7846, 0, 8661, 0, 65255, 0, 3845, 4490, 0, 6649, 74400, 1456, 7530, - 11977, 7249, 8366, 0, 7756, 12342, 0, 51, 41516, 0, 8570, 9568, 0, 456, - 7026, 8145, 1168, 9251, 9082, 0, 64055, 42781, 3866, 12323, 41512, 73805, - 68121, 0, 41494, 0, 4660, 0, 10405, 0, 0, 0, 0, 42040, 73918, 119627, - 7944, 41454, 12605, 0, 0, 41455, 236, 0, 0, 8214, 0, 0, 0, 41457, 0, - 119589, 1969, 2384, 8097, 0, 0, 0, 0, 8766, 0, 917863, 5854, 0, 10583, 0, - 119989, 0, 10416, 917869, 3872, 0, 0, 8429, 0, 0, 2838, 917867, 0, 0, 0, - 0, 0, 0, 0, 917864, 120813, 10553, 1662, 8483, 0, 43605, 5892, 917868, 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, 0, 10357, 0, 8170, 1704, 8556, 0, - 9659, 0, 0, 0, 9556, 0, 4503, 11353, 9647, 0, 0, 0, 0, 0, 0, 0, 0, 74229, - 66593, 6438, 0, 9109, 119565, 1289, 64599, 0, 0, 0, 65507, 2447, 0, 0, 0, - 0, 0, 0, 73750, 0, 0, 19937, 0, 0, 0, 5675, 254, 0, 0, 0, 42425, 8918, - 64003, 5716, 42312, 0, 0, 6972, 42826, 0, 42464, 120567, 0, 0, 74796, - 64400, 64693, 0, 0, 65429, 9515, 4435, 0, 0, 0, 0, 11785, 0, 64671, - 41978, 1412, 4594, 1391, 10536, 8067, 9901, 7775, 0, 0, 74588, 120748, - 3140, 0, 7960, 43271, 0, 12518, 10909, 0, 1428, 12472, 0, 0, 7699, 12393, - 0, 0, 0, 74518, 9063, 0, 4261, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64554, - 10574, 3878, 0, 42352, 1752, 73785, 0, 42506, 0, 10199, 0, 0, 0, 65919, - 0, 0, 720, 324, 0, 0, 0, 0, 1464, 40985, 0, 7974, 0, 68123, 0, 64488, 0, - 0, 0, 74787, 0, 0, 0, 65597, 0, 0, 0, 1302, 0, 0, 0, 0, 0, 5204, 74774, - 0, 0, 0, 3995, 0, 65608, 3714, 0, 0, 0, 10999, 11750, 0, 127004, 0, 0, 0, - 0, 8130, 8672, 10845, 11964, 0, 0, 0, 0, 0, 42863, 73839, 0, 0, 0, 0, 0, - 0, 468, 612, 0, 64401, 66448, 0, 0, 1674, 0, 5823, 0, 12280, 0, 540, + 120017, 120018, 120023, 64275, 120021, 10961, 0, 203, 0, 0, 0, 0, 78350, + 0, 64378, 42054, 0, 0, 554, 119649, 11358, 0, 12182, 42048, 11065, 0, + 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, 0, 1129, + 0, 0, 65900, 1986, 7846, 78804, 8661, 0, 65255, 0, 3845, 4490, 118969, + 6649, 74400, 1456, 7530, 11977, 7249, 8366, 0, 7756, 12342, 0, 51, 41516, + 0, 8570, 9568, 917863, 456, 7026, 8145, 1168, 9251, 9082, 0, 64055, + 42781, 3866, 12323, 41512, 73805, 68121, 0, 41494, 0, 4660, 0, 10405, 0, + 78803, 0, 0, 42040, 73918, 119627, 7944, 41454, 12605, 0, 42205, 41455, + 236, 64051, 78867, 8214, 0, 0, 0, 41457, 0, 119589, 1969, 2384, 8097, + 917864, 0, 0, 78029, 8766, 0, 78079, 5854, 0, 10583, 0, 119989, 0, 10416, + 917869, 3872, 917868, 0, 8429, 0, 0, 2838, 917867, 0, 0, 0, 0, 0, 0, 0, + 11096, 120813, 10553, 1662, 8483, 0, 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, 0, 78886, 0, + 0, 74229, 66593, 6438, 0, 9109, 78882, 1289, 64599, 0, 0, 0, 65507, 2447, + 0, 0, 0, 0, 0, 0, 6334, 0, 0, 19937, 0, 0, 0, 5675, 254, 0, 0, 0, 42425, + 8918, 64003, 5716, 42312, 0, 0, 6972, 42826, 0, 42464, 120567, 0, 0, + 74796, 64400, 64693, 0, 77861, 65429, 9515, 4435, 0, 42522, 0, 0, 11785, + 0, 64671, 41978, 1412, 4594, 1391, 10536, 8067, 9901, 7775, 0, 0, 74588, + 120748, 3140, 0, 7960, 43271, 0, 12518, 10909, 127508, 1428, 12472, 0, 0, + 7699, 12393, 0, 0, 0, 74518, 8223, 0, 4261, 0, 0, 0, 0, 0, 0, 0, 0, + 43419, 0, 64554, 10574, 3878, 0, 42352, 1752, 73785, 0, 42506, 0, 10199, + 0, 0, 0, 65919, 0, 6695, 720, 324, 0, 0, 43406, 0, 1464, 40985, 0, 7974, + 0, 43474, 0, 64488, 0, 0, 64041, 74787, 0, 78865, 0, 65597, 0, 78863, 0, + 1302, 0, 78861, 0, 0, 0, 5204, 74774, 43404, 43396, 0, 3995, 68360, + 65608, 3714, 0, 0, 0, 10999, 11750, 0, 43251, 68660, 43301, 0, 120557, + 8130, 8672, 10845, 11964, 0, 0, 0, 0, 68455, 42863, 73839, 0, 0, 0, 0, 0, + 0, 468, 612, 0, 64401, 66448, 68376, 0, 1674, 0, 5823, 0, 12280, 0, 540, 74564, 0, 0, 8432, 0, 11073, 0, 64316, 0, 0, 820, 41741, 0, 120667, 0, 64684, 126992, 3359, 7800, 0, 65177, 6226, 353, 12396, 0, 119612, 64742, - 0, 0, 0, 0, 12412, 19941, 0, 120277, 0, 1884, 9481, 42418, 0, 41157, 0, - 1195, 64898, 7924, 0, 41151, 2010, 0, 41328, 42344, 0, 12409, 0, 4360, - 127009, 9739, 0, 74392, 73921, 0, 42521, 8539, 0, 0, 0, 0, 4788, 0, 0, - 65734, 0, 64353, 0, 13075, 74429, 0, 64569, 43532, 10837, 2492, 0, - 118901, 0, 41136, 64351, 11813, 9649, 41154, 119617, 5128, 4038, 41143, - 65604, 64859, 41592, 0, 1648, 5435, 0, 0, 41343, 119848, 65439, 12709, - 6986, 0, 0, 0, 41349, 0, 12581, 10374, 5175, 0, 73806, 10254, 0, 10278, - 10262, 120295, 41346, 0, 607, 0, 0, 0, 12923, 10314, 10282, 65477, 10378, - 120297, 40976, 8265, 0, 119834, 40975, 5840, 42838, 0, 40978, 0, 119840, - 0, 0, 0, 66444, 10538, 0, 2550, 119836, 0, 0, 0, 3525, 0, 0, 0, 0, 5619, - 65822, 0, 194882, 7455, 0, 5616, 11486, 9656, 0, 0, 10727, 5615, 0, - 120551, 42380, 64895, 0, 66451, 808, 5455, 11347, 0, 1026, 5620, 194887, - 0, 11350, 5617, 0, 9225, 64639, 127073, 9145, 0, 1338, 120581, 0, 12739, - 0, 3084, 0, 0, 41025, 6037, 0, 3974, 0, 10290, 0, 3083, 10322, 0, 0, 0, - 41036, 0, 0, 43321, 65606, 0, 41032, 42388, 0, 64700, 10011, 1445, 40961, - 0, 194893, 0, 40960, 0, 0, 0, 40963, 0, 10402, 0, 0, 0, 10603, 0, 0, 0, - 0, 194923, 10083, 127069, 0, 194922, 0, 0, 0, 9073, 42585, 64302, 10704, - 65030, 4787, 0, 74829, 0, 65423, 0, 0, 9570, 0, 9525, 2689, 917626, - 65426, 0, 917624, 0, 0, 40966, 917623, 13286, 3998, 42598, 42596, 503, 0, - 8735, 2690, 66488, 42836, 194913, 41954, 917617, 1652, 772, 194877, 8310, - 65428, 3487, 0, 3585, 10194, 43320, 119159, 0, 194874, 6468, 41976, 9720, - 917606, 11767, 41970, 0, 5836, 12358, 0, 4355, 9048, 12180, 65027, 64680, - 65025, 64757, 0, 41488, 0, 8527, 194917, 12362, 12435, 12360, 41053, - 3266, 0, 12356, 8616, 41466, 0, 0, 11450, 0, 3638, 12354, 0, 3216, 0, - 2358, 0, 8633, 0, 0, 0, 0, 0, 0, 11759, 0, 0, 74823, 0, 41423, 8078, - 10504, 0, 0, 0, 0, 7002, 0, 41430, 42267, 41051, 41484, 0, 0, 41050, - 41473, 10466, 13099, 0, 0, 0, 6435, 0, 11362, 0, 0, 65382, 0, 41420, 0, - 3625, 0, 41409, 0, 0, 2041, 9178, 9672, 41427, 43541, 43317, 0, 0, 0, - 41424, 917598, 120546, 0, 0, 0, 41417, 1261, 0, 0, 12102, 119662, 41401, - 0, 0, 0, 0, 0, 42290, 3275, 0, 42329, 0, 0, 0, 0, 0, 0, 10989, 74234, 0, - 10598, 0, 2669, 903, 0, 2920, 0, 0, 74603, 64504, 19928, 0, 0, 3917, 0, - 11732, 0, 0, 41448, 41461, 0, 0, 917558, 0, 8819, 12663, 0, 41184, 74014, - 232, 74835, 120646, 9168, 65786, 0, 0, 0, 9094, 0, 11758, 0, 0, 1064, - 42467, 0, 10115, 19924, 0, 0, 7862, 64551, 13224, 8516, 41862, 66650, - 7561, 0, 74018, 1878, 0, 0, 2911, 0, 41178, 5427, 64823, 0, 0, 12617, - 41174, 0, 41458, 0, 41463, 42413, 11292, 2406, 775, 0, 65584, 0, 6074, - 9618, 194903, 0, 0, 0, 194901, 41436, 3656, 0, 194899, 41456, 0, 1599, - 11333, 0, 8514, 8513, 0, 1613, 0, 0, 0, 0, 0, 0, 74500, 41460, 10145, - 10542, 0, 120379, 0, 9905, 0, 65730, 0, 120374, 8427, 120375, 0, 120376, - 0, 11497, 64687, 74008, 120371, 3871, 0, 0, 9111, 5741, 0, 194846, - 120366, 119111, 120745, 0, 120369, 0, 11648, 0, 0, 120364, 41587, 120365, - 0, 74322, 42113, 0, 0, 12172, 0, 74530, 0, 65723, 0, 73871, 65724, 7928, - 120354, 0, 41595, 73730, 0, 42118, 73830, 66042, 10355, 0, 7875, 0, - 41598, 3993, 0, 1545, 40971, 536, 0, 119959, 0, 0, 65173, 65286, 0, 0, 0, - 0, 0, 0, 41375, 5402, 0, 0, 1687, 120503, 0, 0, 0, 64326, 40969, 10526, - 0, 8323, 40968, 1339, 11731, 0, 0, 65460, 12242, 0, 8020, 10843, 11554, - 0, 0, 8266, 41006, 65722, 0, 10710, 0, 118942, 0, 0, 119155, 195091, 0, - 119636, 0, 120687, 0, 0, 11755, 66305, 0, 0, 10917, 120767, 0, 11272, - 2040, 41247, 41326, 0, 1741, 42370, 1227, 0, 0, 11413, 0, 0, 0, 1586, - 4978, 0, 1984, 0, 0, 120651, 40984, 0, 9373, 0, 12916, 6284, 0, 41663, 0, - 0, 0, 9237, 9385, 41648, 0, 0, 0, 41666, 1830, 73783, 41076, 41287, 0, 0, - 0, 0, 0, 0, 41987, 41676, 0, 120823, 0, 41670, 0, 0, 2796, 65167, 11683, - 9902, 74521, 0, 11451, 0, 0, 42631, 2359, 0, 67844, 74164, 41238, 548, - 11405, 13133, 64368, 0, 0, 0, 397, 64678, 42139, 9547, 9590, 0, 1614, 0, - 64356, 66307, 6651, 1358, 0, 428, 9620, 1466, 0, 10982, 0, 1333, 0, 407, - 6425, 0, 74253, 0, 0, 0, 5804, 11976, 8554, 0, 0, 0, 9057, 42294, 41218, - 0, 0, 0, 1883, 10952, 8048, 0, 41225, 0, 118955, 0, 0, 0, 4407, 0, 65809, - 119074, 194821, 8448, 68122, 74183, 0, 12675, 12659, 0, 42363, 120624, - 194824, 119058, 10766, 12012, 2386, 64732, 9170, 917821, 9123, 64585, - 120500, 0, 0, 42051, 0, 4164, 9081, 0, 120569, 42049, 42042, 8709, 0, 0, - 120637, 42419, 0, 42047, 0, 0, 8470, 11807, 65897, 577, 0, 0, 74300, 0, - 0, 74840, 0, 0, 0, 0, 8736, 1414, 42643, 9683, 0, 74344, 0, 2536, 0, - 66330, 0, 0, 0, 0, 0, 0, 0, 66317, 0, 66315, 66316, 0, 11273, 0, 43004, - 7541, 0, 0, 961, 64307, 66324, 0, 0, 3106, 65917, 41284, 1696, 0, 891, - 12105, 0, 42624, 12802, 3264, 8824, 13268, 43003, 10936, 0, 0, 0, 0, 0, - 0, 2322, 0, 0, 11449, 0, 42868, 41285, 3547, 0, 0, 0, 0, 43216, 6089, 0, - 0, 0, 4170, 1029, 0, 0, 119224, 42374, 0, 744, 0, 0, 0, 65823, 0, 0, - 3551, 0, 0, 4623, 0, 0, 4598, 0, 65136, 0, 0, 0, 10851, 0, 6179, 0, 6180, - 0, 11952, 120778, 0, 11972, 0, 0, 0, 0, 177, 0, 6176, 120580, 0, 0, 6177, - 9020, 0, 0, 6178, 120249, 120242, 0, 120243, 7518, 8754, 0, 120237, - 74551, 43081, 0, 0, 9136, 120240, 4401, 41280, 0, 8974, 2308, 0, 74149, - 0, 2318, 0, 66361, 8198, 0, 64360, 12601, 0, 65266, 120827, 74307, 0, - 6970, 5404, 43332, 3667, 7936, 12925, 126989, 42055, 0, 0, 118949, 10874, - 65505, 0, 0, 42053, 0, 42057, 11083, 42052, 0, 0, 73845, 0, 9665, 0, 0, - 13181, 0, 0, 0, 0, 74148, 0, 0, 120225, 120229, 120224, 74172, 41145, 0, - 0, 0, 41148, 8683, 7594, 0, 0, 119090, 10869, 0, 41146, 0, 11441, 0, - 3512, 917612, 0, 8103, 0, 0, 65184, 11780, 41563, 42796, 0, 119106, - 41544, 65146, 0, 0, 0, 0, 19942, 0, 118908, 7988, 10436, 74273, 3271, - 73804, 64711, 0, 0, 0, 0, 3804, 13070, 11557, 42044, 0, 1095, 0, 3599, 0, - 0, 0, 0, 0, 0, 0, 74346, 66697, 0, 11684, 0, 0, 0, 0, 42043, 0, 66677, 0, - 42046, 120751, 4036, 0, 0, 0, 194862, 0, 11954, 0, 1450, 12986, 1340, 0, - 65441, 0, 0, 0, 0, 0, 0, 0, 0, 6539, 0, 0, 0, 0, 0, 0, 41190, 3973, - 194852, 4575, 41193, 7982, 429, 0, 0, 0, 194854, 65792, 0, 118968, 6417, - 118918, 0, 0, 194850, 0, 0, 4919, 10590, 0, 7755, 0, 0, 64548, 0, 1621, - 10214, 65126, 0, 0, 0, 12188, 0, 1617, 8050, 0, 5015, 0, 119174, 42590, - 194871, 1756, 0, 0, 65768, 120694, 41892, 0, 7555, 13103, 5408, 2817, - 1214, 0, 0, 0, 0, 0, 0, 0, 7957, 8689, 64723, 1056, 0, 74147, 0, 0, 0, - 7073, 65850, 12327, 0, 119028, 0, 0, 0, 2341, 8450, 8484, 8474, 0, 0, 0, - 8461, 0, 12153, 12799, 0, 120654, 120684, 9451, 7571, 13073, 0, 0, 681, - 0, 703, 0, 3272, 8781, 12894, 0, 11709, 0, 74446, 0, 0, 0, 11338, 120768, - 3276, 0, 0, 65928, 0, 0, 65021, 64795, 74574, 0, 10047, 0, 3262, 0, 0, 0, - 0, 74329, 163, 576, 9895, 1655, 0, 74591, 0, 0, 0, 0, 0, 0, 10039, 0, 0, - 5623, 5717, 5776, 0, 0, 0, 41591, 120586, 65252, 120795, 0, 0, 0, 0, 0, - 0, 0, 8887, 0, 7295, 11031, 0, 43157, 0, 8946, 10348, 10412, 8755, 0, 0, - 5718, 13221, 0, 0, 0, 0, 0, 8810, 74499, 686, 0, 0, 4619, 118954, 6654, - 73769, 0, 0, 12040, 65689, 10128, 65118, 0, 119151, 118891, 0, 0, 2401, - 68144, 8792, 0, 0, 65455, 0, 0, 0, 119129, 0, 12886, 0, 66624, 0, 43557, - 10300, 10161, 10396, 74135, 0, 0, 0, 73851, 3010, 6441, 0, 1458, 41475, - 0, 0, 0, 11479, 0, 0, 9100, 12864, 0, 0, 1061, 64780, 2001, 43111, 0, 0, - 4052, 0, 7626, 0, 0, 1045, 0, 5631, 0, 0, 0, 0, 74127, 0, 0, 8486, 0, - 73758, 2335, 4362, 0, 0, 73867, 1025, 0, 42625, 0, 0, 41443, 0, 0, 0, - 1774, 1523, 0, 0, 41445, 0, 0, 8567, 41442, 3988, 0, 0, 118910, 0, 65274, - 8564, 0, 0, 0, 0, 0, 65908, 0, 66513, 6256, 0, 579, 0, 10206, 0, 0, 2673, - 0, 11814, 0, 4488, 0, 0, 0, 10444, 120820, 0, 11799, 74407, 0, 4487, 0, - 42832, 1032, 0, 120736, 0, 7203, 0, 614, 0, 0, 120615, 0, 0, 0, 0, 0, + 0, 120282, 0, 0, 12412, 19941, 0, 120277, 78847, 1884, 9481, 42418, 0, + 41157, 0, 1195, 64898, 7924, 0, 41151, 2010, 0, 41328, 42344, 0, 12409, + 0, 4360, 127009, 9739, 0, 74392, 73921, 0, 42521, 8539, 0, 0, 0, 0, 4788, + 0, 0, 65734, 0, 64353, 0, 13075, 74429, 0, 64569, 43532, 10837, 2492, 0, + 118901, 68637, 41136, 64351, 11813, 9649, 41154, 119617, 5128, 4038, + 41143, 65604, 64859, 41592, 6771, 1648, 5435, 0, 6734, 41343, 119848, + 65439, 12709, 6986, 119846, 0, 0, 41349, 0, 12581, 10374, 5175, 0, 73806, + 10254, 0, 10278, 10262, 77950, 41346, 0, 607, 0, 0, 0, 12923, 10314, + 10282, 65477, 10378, 120297, 40976, 8265, 0, 119834, 40975, 5840, 42838, + 0, 40978, 0, 119840, 0, 0, 0, 66444, 10538, 0, 2550, 119836, 6779, 0, 0, + 3525, 6824, 118886, 0, 0, 5619, 65822, 0, 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, 0, 1338, 120581, 0, 12739, 4603, 3084, 0, 0, 9858, 6037, 0, + 3974, 78213, 10290, 0, 3083, 10322, 0, 0, 0, 41036, 0, 0, 43321, 65606, + 0, 41032, 42388, 0, 64700, 10011, 1445, 40961, 0, 194893, 0, 40960, 0, + 194891, 0, 40963, 64952, 10402, 0, 0, 0, 10603, 0, 0, 0, 0, 6714, 10083, + 127069, 194895, 78367, 0, 0, 0, 9073, 42585, 64302, 10704, 65030, 4787, + 0, 74829, 0, 65423, 0, 0, 9570, 0, 9525, 2689, 917626, 65426, 0, 917624, + 43740, 0, 40966, 917623, 13286, 3998, 42598, 42596, 503, 0, 8735, 2690, + 66488, 42836, 194913, 41954, 917617, 1652, 772, 6688, 8310, 65428, 3487, + 43416, 3585, 10194, 43320, 119159, 0, 194874, 6468, 41976, 9720, 917606, + 11767, 41970, 0, 5836, 12358, 0, 4355, 9048, 12180, 65027, 64680, 65025, + 43699, 0, 41488, 0, 8527, 194917, 12362, 12435, 12360, 41053, 3266, 0, + 12356, 8616, 41466, 0, 0, 11450, 0, 3638, 12354, 0, 3216, 0, 2358, + 119069, 8633, 0, 0, 119182, 69244, 0, 0, 11759, 0, 6368, 74823, 0, 41423, + 8078, 10504, 0, 41698, 42237, 0, 7002, 0, 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, 0, 2041, 9178, 9672, 41427, 43541, + 43317, 0, 0, 0, 41424, 917598, 120546, 0, 0, 0, 41417, 1261, 0, 0, 12102, + 119662, 41401, 0, 0, 0, 0, 0, 42290, 3275, 0, 42329, 0, 0, 0, 0, 0, + 120725, 10989, 74234, 0, 10598, 7410, 2669, 903, 0, 2920, 0, 127232, + 74603, 64504, 19928, 0, 0, 3917, 0, 11732, 0, 0, 41448, 41461, 0, 0, + 917558, 0, 8819, 12663, 0, 41184, 74014, 232, 74835, 120646, 9168, 65786, + 0, 0, 0, 9094, 0, 11758, 68425, 0, 1064, 42467, 0, 10115, 19924, 0, 0, + 7862, 64551, 13224, 8516, 41862, 66650, 7561, 78618, 69793, 1878, 0, 0, + 2911, 0, 41178, 5427, 64823, 0, 0, 12617, 41174, 0, 41458, 0, 41463, + 42413, 11292, 2406, 775, 0, 65584, 0, 6074, 9618, 194903, 0, 43440, 0, + 194901, 41436, 3656, 0, 194899, 41456, 0, 1599, 11333, 0, 6703, 8513, 0, + 1613, 0, 68456, 12598, 0, 0, 78745, 74500, 41460, 10145, 10542, 9937, + 78746, 0, 9905, 0, 65730, 0, 120374, 8427, 120375, 55246, 120376, 0, + 11497, 64687, 74008, 120371, 3871, 0, 0, 9111, 5741, 0, 194846, 120366, + 119111, 120745, 0, 120368, 0, 11648, 0, 0, 120364, 41587, 120365, 0, + 74322, 42113, 0, 0, 12172, 0, 74530, 65298, 65723, 194840, 73871, 65724, + 7928, 120354, 0, 41595, 73730, 0, 42118, 73830, 66042, 10355, 0, 7875, 0, + 41598, 3993, 0, 1545, 40971, 536, 0, 43029, 0, 0, 65173, 65286, 0, 0, 0, + 0, 0, 0, 41375, 5402, 0, 0, 1687, 120503, 0, 0, 78194, 64326, 40969, + 10526, 78753, 8323, 40968, 1339, 11731, 78756, 0, 65460, 12242, 0, 8020, + 10843, 11554, 0, 0, 8266, 41006, 65722, 0, 10710, 0, 118942, 67667, + 64567, 119155, 195091, 0, 119636, 67857, 120687, 0, 0, 11755, 66305, 0, + 0, 10917, 120767, 0, 11272, 2040, 41247, 41326, 195060, 1741, 42370, + 1227, 0, 0, 11413, 0, 0, 5283, 1586, 4978, 0, 1984, 0, 0, 120651, 40984, + 0, 9373, 0, 12916, 6284, 0, 41663, 0, 0, 0, 9237, 9385, 41648, 0, 0, 0, + 41666, 1830, 73783, 2056, 41287, 0, 0, 0, 42219, 0, 0, 41987, 41676, 0, + 120823, 0, 41670, 0, 0, 2796, 55291, 11683, 9902, 74521, 0, 11451, 0, 0, + 42631, 2359, 0, 67844, 74164, 41238, 548, 11405, 13133, 64368, 0, 0, 0, + 397, 43622, 42139, 9547, 9590, 0, 1614, 43661, 64356, 66307, 6651, 1358, + 0, 428, 9620, 1466, 78112, 10982, 118831, 1333, 0, 407, 6425, 0, 74253, + 0, 0, 0, 5804, 11976, 8554, 0, 0, 0, 9057, 42294, 41218, 0, 0, 78137, + 1883, 10952, 8048, 0, 41225, 0, 118955, 0, 0, 0, 4407, 0, 65809, 119074, + 194821, 8448, 68122, 74183, 0, 12675, 12659, 0, 42363, 120624, 194824, + 55273, 10766, 12012, 2386, 64732, 9170, 917821, 9123, 64585, 120500, 0, + 43367, 42051, 0, 4164, 9081, 0, 120569, 42049, 42042, 8709, 0, 0, 120637, + 42419, 0, 42047, 0, 0, 8470, 11807, 65897, 577, 0, 0, 74300, 0, 127308, + 74840, 0, 0, 0, 0, 8736, 1414, 42643, 9683, 43486, 74344, 0, 2536, 0, + 66330, 0, 0, 0, 0, 0, 0, 0, 66317, 917612, 66315, 2106, 0, 11273, 0, + 43004, 7541, 0, 0, 961, 64307, 66324, 64906, 0, 3106, 65917, 41284, 1696, + 0, 891, 12105, 0, 42624, 12802, 3264, 8824, 13268, 43003, 10936, 0, 0, 0, + 0, 0, 0, 2322, 0, 0, 11449, 0, 42868, 41285, 3547, 0, 0, 0, 0, 43216, + 6089, 78682, 0, 120578, 4170, 1029, 0, 127036, 119224, 42374, 0, 744, 0, + 0, 0, 65823, 0, 0, 3551, 0, 0, 4623, 55268, 0, 4598, 0, 65136, 0, 0, 0, + 10851, 0, 6179, 0, 6180, 0, 11952, 120778, 78648, 11972, 78646, 78647, + 78644, 78645, 177, 78643, 6176, 120580, 0, 0, 6177, 9020, 78652, 78653, + 6178, 120249, 120242, 0, 67673, 7518, 8754, 0, 120237, 74551, 43081, 0, + 0, 9136, 120240, 4401, 41280, 0, 8974, 2308, 0, 74149, 0, 2318, 0, 66361, + 8198, 0, 64360, 12601, 42536, 65266, 120827, 74307, 0, 6970, 5404, 43332, + 3667, 7936, 12925, 126989, 6385, 0, 0, 118949, 10874, 65505, 0, 0, 42053, + 2075, 42057, 11083, 42052, 0, 0, 67651, 0, 9665, 0, 0, 13181, 0, 0, 0, 0, + 74148, 0, 0, 120225, 120229, 120224, 74172, 41145, 0, 0, 0, 41148, 8683, + 7594, 127519, 0, 119090, 10869, 43458, 41146, 0, 11441, 0, 3512, 119633, + 0, 8103, 0, 0, 65184, 11780, 41563, 42796, 0, 119106, 41544, 65146, 0, 0, + 0, 0, 19942, 0, 118908, 7988, 10436, 74273, 3271, 73804, 64711, 0, 0, 0, + 0, 3804, 13070, 11557, 42044, 0, 1095, 0, 3599, 0, 0, 0, 8514, 0, 0, 0, + 74346, 66697, 0, 11684, 0, 0, 0, 0, 42043, 43232, 66677, 0, 42046, 78241, + 4036, 0, 0, 0, 194861, 0, 11954, 0, 1450, 12986, 1340, 0, 65441, 0, 0, 0, + 0, 0, 917542, 0, 0, 6539, 0, 0, 0, 194856, 0, 120492, 41190, 3973, + 119365, 4575, 41193, 7982, 429, 0, 0, 0, 194854, 65792, 0, 118968, 6417, + 118918, 78178, 0, 194850, 0, 0, 4919, 10590, 0, 7755, 0, 0, 64548, + 120506, 1621, 10214, 65126, 0, 127004, 0, 12188, 0, 1617, 8050, 0, 5015, + 0, 119174, 42590, 194871, 1756, 78181, 0, 65768, 6352, 41892, 0, 7555, + 13103, 5408, 2817, 1214, 0, 0, 0, 0, 0, 0, 0, 7957, 8689, 64723, 1056, 0, + 74147, 0, 0, 55286, 7073, 65850, 12327, 0, 119028, 0, 0, 0, 2341, 8450, + 8484, 8474, 0, 0, 0, 8461, 0, 12153, 12799, 0, 43709, 43708, 9451, 7571, + 13073, 0, 0, 681, 0, 703, 0, 3272, 8781, 12894, 0, 11709, 0, 74446, 0, 0, + 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, 0, 0, 0, 0, 10039, 0, 0, 5623, 5717, 5776, 0, 0, 0, + 41591, 11036, 65252, 120488, 0, 0, 0, 0, 0, 0, 0, 8887, 0, 7295, 11031, + 0, 43157, 0, 8946, 10348, 10412, 8755, 0, 0, 5718, 13221, 0, 0, 78135, 0, + 0, 8810, 74499, 686, 0, 0, 4619, 118954, 6654, 73769, 74426, 0, 12040, + 65689, 10128, 65118, 0, 119151, 118891, 0, 0, 2401, 68144, 8792, 0, 0, + 65455, 0, 0, 0, 119129, 0, 12886, 0, 66624, 0, 43557, 10300, 10161, + 10396, 74135, 0, 118945, 78118, 73851, 3010, 6441, 78122, 1458, 41475, 0, + 0, 0, 11479, 0, 0, 6350, 12864, 0, 78114, 1061, 64780, 2001, 43111, + 55230, 0, 4052, 0, 7626, 0, 0, 1045, 0, 5631, 41113, 0, 0, 43707, 74127, + 0, 0, 8486, 0, 73758, 2335, 4362, 0, 0, 69221, 1025, 0, 42625, 0, 78084, + 41443, 0, 0, 0, 1774, 1523, 0, 0, 41445, 78236, 0, 8567, 41442, 3988, 0, + 78237, 118910, 0, 65274, 8564, 0, 78238, 127515, 0, 0, 43446, 0, 66513, + 6256, 0, 579, 55218, 10206, 0, 6375, 2673, 0, 11814, 0, 4488, 0, 0, + 68451, 10444, 118846, 0, 11799, 74407, 68466, 4487, 0, 42832, 1032, + 120267, 43450, 78257, 7203, 0, 614, 78191, 0, 120615, 0, 78262, 0, 0, 0, 43121, 0, 0, 0, 1050, 7549, 0, 0, 9314, 0, 0, 120616, 0, 10057, 0, 0, 0, - 66504, 0, 0, 2307, 0, 64333, 0, 0, 73873, 0, 0, 0, 0, 0, 0, 10360, 0, 0, - 0, 440, 0, 13085, 9233, 74216, 0, 0, 0, 0, 66447, 8046, 64963, 65777, - 10125, 74212, 42819, 10910, 0, 1521, 9896, 0, 10487, 0, 12527, 0, 7970, - 0, 0, 0, 65769, 5243, 9849, 5239, 65771, 0, 0, 5237, 0, 0, 10103, 5247, - 4769, 0, 118977, 0, 5764, 0, 0, 3008, 4896, 0, 12087, 0, 0, 41103, 0, - 64565, 4773, 0, 0, 0, 4770, 0, 917567, 8731, 65378, 0, 120619, 9122, 0, - 0, 4774, 3019, 9997, 12834, 0, 9456, 10215, 0, 0, 0, 0, 0, 74776, 4281, - 4768, 0, 41535, 4099, 9017, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 42814, 880, 0, - 0, 0, 0, 0, 10116, 9877, 0, 0, 0, 7095, 0, 0, 120632, 0, 0, 8243, 2427, - 0, 7093, 0, 11585, 0, 0, 0, 12223, 0, 0, 1434, 0, 5637, 11573, 0, 0, 0, - 19951, 0, 0, 0, 0, 64432, 0, 0, 118888, 1156, 8740, 0, 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, 0, 0, 42257, 5696, 120470, 120465, 3862, 9643, 0, 0, - 7634, 0, 9845, 0, 0, 5701, 9722, 41490, 0, 1426, 120474, 0, 0, 0, 74345, - 8571, 194991, 0, 0, 0, 0, 43182, 12184, 0, 42022, 0, 10281, 0, 5650, - 43194, 64712, 0, 0, 990, 5647, 0, 0, 0, 41114, 11477, 5646, 0, 11018, 0, - 3945, 0, 0, 0, 0, 0, 0, 0, 1020, 73763, 0, 0, 5648, 64748, 0, 0, 10205, - 3545, 0, 6984, 0, 74051, 0, 118868, 120458, 2667, 0, 0, 0, 9911, 0, - 65020, 10097, 119166, 0, 0, 118836, 0, 0, 1140, 0, 0, 10159, 0, 0, 8128, - 0, 0, 0, 1815, 19910, 890, 0, 3267, 0, 0, 10123, 0, 4410, 1041, 10576, - 8102, 0, 580, 74232, 0, 0, 0, 0, 0, 19938, 65906, 0, 0, 0, 3298, 5375, - 10142, 0, 8215, 0, 6134, 41246, 64402, 0, 0, 0, 0, 0, 41382, 0, 0, 5173, - 65348, 527, 0, 0, 0, 0, 0, 11915, 0, 0, 10072, 0, 66434, 2329, 42250, 0, - 0, 0, 12245, 119237, 0, 0, 0, 0, 0, 74328, 0, 74769, 0, 0, 9069, 6144, 0, - 0, 73822, 0, 0, 64917, 41521, 118934, 494, 13250, 0, 65098, 0, 956, 0, - 12830, 10462, 73740, 0, 0, 0, 0, 66449, 13263, 0, 0, 13171, 0, 0, 0, 0, - 0, 1044, 41276, 0, 0, 0, 42068, 11795, 0, 0, 0, 0, 42450, 3907, 0, 64526, - 0, 0, 12295, 0, 11475, 0, 3020, 11537, 0, 66441, 0, 0, 0, 0, 1057, 566, - 0, 0, 3016, 42274, 0, 66490, 12921, 66571, 0, 0, 3006, 4620, 0, 0, 0, 0, - 64659, 0, 0, 0, 43333, 68129, 8626, 0, 0, 9090, 65377, 41596, 0, 0, 1698, - 0, 64477, 0, 0, 1053, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 1926, 0, 0, 7898, 8110, 10935, 0, 0, 5830, 0, 64594, 0, 0, 0, 0, 8693, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 119187, 11439, 0, 0, 0, 0, 42313, - 5579, 0, 0, 0, 0, 0, 5578, 41774, 0, 42023, 6234, 5669, 0, 0, 0, 0, 0, 0, - 5583, 0, 0, 42426, 5580, 42276, 2923, 892, 5582, 42465, 41330, 0, 5795, - 65512, 0, 65702, 0, 120801, 65251, 0, 65710, 0, 0, 0, 0, 5370, 0, 0, - 1638, 10966, 10188, 65878, 118848, 0, 0, 0, 0, 8172, 42017, 0, 10844, 0, - 0, 0, 0, 0, 0, 286, 0, 1062, 0, 0, 0, 0, 0, 1070, 64900, 0, 6095, 41865, - 0, 3015, 0, 917763, 5211, 0, 6400, 0, 194983, 0, 8189, 11276, 0, 0, 372, - 0, 0, 118874, 42102, 41585, 0, 0, 42101, 276, 0, 0, 33, 74226, 0, 9007, - 118796, 41588, 66033, 427, 10763, 0, 0, 0, 0, 1031, 6257, 0, 42104, 0, 0, - 2328, 0, 1071, 0, 0, 74848, 0, 0, 0, 1047, 0, 0, 64790, 0, 0, 10651, 0, - 0, 0, 0, 0, 119181, 5711, 41633, 12098, 65571, 9166, 0, 5710, 0, 0, - 65213, 13216, 0, 0, 0, 0, 64611, 41623, 0, 5715, 0, 0, 0, 5712, 2761, - 41620, 68124, 3074, 5722, 0, 8643, 73768, 0, 118906, 2757, 11067, 9718, - 74498, 8910, 10689, 6479, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 118911, 0, 0, 0, - 0, 0, 120010, 0, 8701, 68130, 119616, 120522, 0, 42477, 0, 12123, 4495, - 43569, 0, 0, 0, 64946, 10992, 0, 0, 0, 0, 9318, 120661, 13249, 65679, - 73808, 0, 65457, 42249, 7639, 0, 67845, 42641, 5454, 0, 0, 194997, - 120005, 0, 0, 5084, 0, 0, 119173, 0, 733, 0, 0, 0, 0, 41677, 0, 9218, - 1731, 0, 0, 0, 0, 0, 0, 0, 0, 127018, 0, 5155, 0, 5358, 0, 0, 917767, - 64424, 0, 3840, 64314, 41432, 0, 0, 0, 0, 0, 65943, 0, 3371, 10988, 0, - 8771, 1479, 0, 0, 1109, 11580, 0, 64601, 12205, 0, 0, 64507, 8868, 399, - 0, 74842, 0, 0, 12149, 13088, 551, 0, 10156, 12119, 0, 0, 2544, 65074, 0, - 0, 0, 0, 351, 119149, 0, 0, 0, 0, 74268, 0, 0, 0, 42377, 0, 0, 0, 0, 0, - 9013, 5588, 0, 0, 0, 0, 73960, 5585, 65881, 2549, 74469, 0, 0, 5584, - 8358, 0, 74411, 0, 10919, 0, 7980, 0, 0, 0, 41800, 5589, 0, 2664, 41613, - 5586, 118890, 0, 11356, 0, 0, 0, 0, 0, 42573, 67856, 0, 0, 0, 0, 0, 8135, - 6450, 10055, 0, 0, 0, 0, 5657, 0, 9626, 0, 0, 10179, 5654, 12939, 0, - 120799, 0, 0, 5652, 10945, 0, 0, 0, 3661, 7863, 0, 0, 0, 0, 0, 5659, 0, - 0, 66729, 5655, 0, 42168, 0, 1055, 917628, 0, 66310, 74030, 0, 12146, - 73955, 73956, 11618, 0, 126990, 0, 10272, 10304, 10368, 42518, 594, - 10244, 10248, 10256, 0, 64870, 0, 3467, 0, 0, 3331, 946, 10231, 1495, - 8131, 74330, 0, 9562, 0, 65927, 0, 0, 120155, 0, 64656, 0, 0, 194837, 0, - 5666, 65227, 5318, 0, 0, 9091, 10798, 0, 0, 10186, 0, 7732, 0, 64556, 0, - 0, 5668, 74445, 0, 0, 5670, 0, 0, 11820, 2992, 7826, 5667, 19952, 120807, - 0, 12749, 0, 0, 0, 66496, 4361, 119260, 1306, 9286, 1497, 0, 0, 0, 0, - 3571, 13247, 0, 7973, 66353, 0, 0, 67896, 43192, 0, 0, 553, 120653, 0, 0, - 5829, 0, 4587, 0, 65912, 0, 12746, 0, 0, 119924, 5633, 119927, 0, 0, 0, - 64905, 0, 9512, 0, 12742, 6443, 0, 0, 9135, 0, 0, 0, 0, 0, 0, 0, 12148, - 0, 0, 0, 64256, 0, 11669, 0, 5634, 4524, 0, 0, 0, 118880, 74266, 65182, - 0, 0, 5221, 0, 328, 0, 0, 0, 5636, 0, 5329, 0, 5638, 119918, 7940, 64938, - 43223, 0, 5635, 3373, 2986, 0, 74223, 3437, 0, 6203, 4247, 0, 11920, - 8274, 0, 0, 1657, 119921, 0, 0, 5639, 2954, 5660, 5640, 0, 0, 0, 0, 0, 0, - 41637, 0, 0, 0, 41625, 0, 0, 120713, 11705, 5642, 0, 0, 0, 4356, 11710, - 0, 12051, 0, 0, 5641, 8259, 0, 1058, 0, 67630, 0, 0, 1144, 0, 0, 0, 0, - 73890, 118972, 0, 73734, 0, 5645, 64964, 8652, 2547, 66484, 0, 0, 5608, - 65890, 0, 0, 67621, 119934, 9000, 0, 0, 0, 1865, 0, 5613, 74267, 0, 0, - 5610, 0, 0, 65826, 5612, 0, 10787, 917551, 2997, 0, 5609, 0, 65319, - 119933, 12316, 65376, 2412, 0, 8186, 9807, 74269, 0, 13130, 65874, 0, - 5807, 0, 10030, 5306, 12936, 0, 0, 11704, 0, 0, 10211, 0, 0, 0, 0, 11706, - 9710, 0, 0, 0, 413, 65623, 74237, 0, 9133, 74262, 0, 1042, 0, 64779, - 12171, 119240, 6185, 64776, 4984, 0, 708, 0, 0, 12241, 0, 0, 1308, 0, - 2534, 810, 0, 0, 0, 0, 0, 1917, 3000, 0, 0, 120739, 2364, 0, 74470, - 66618, 65680, 0, 10027, 0, 0, 12337, 120722, 0, 0, 2980, 755, 0, 931, - 13124, 68182, 0, 2748, 0, 0, 65041, 0, 73998, 8730, 0, 0, 119009, 7274, - 119250, 0, 7275, 0, 935, 0, 65840, 377, 42325, 11649, 0, 65253, 64301, 0, - 0, 42341, 65284, 2417, 0, 12884, 19912, 7907, 10768, 0, 194998, 0, 10673, - 119217, 7248, 0, 0, 1781, 5496, 3627, 62, 1649, 0, 964, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 13142, 0, 42415, 66575, 4542, 74037, 43547, 0, 0, 0, 2991, - 4946, 42454, 0, 7949, 0, 0, 11341, 42494, 3073, 65625, 9714, 11692, 0, 0, - 0, 6478, 9898, 0, 65237, 6241, 0, 4877, 0, 6238, 0, 10548, 127049, 4409, - 0, 0, 64798, 0, 5346, 0, 120528, 6237, 5461, 0, 9176, 0, 0, 65231, 65884, - 12678, 0, 0, 11378, 0, 42785, 2408, 3251, 0, 0, 5685, 0, 2461, 11052, - 7091, 5342, 8317, 0, 68163, 5340, 0, 0, 0, 73928, 0, 0, 0, 0, 0, 65482, - 0, 9142, 0, 0, 0, 10938, 0, 118790, 1182, 2542, 4826, 0, 0, 0, 529, 8580, - 0, 0, 10586, 10790, 11987, 66023, 41593, 41207, 0, 0, 41594, 225, 42828, - 0, 0, 0, 64705, 74379, 10721, 0, 3438, 42097, 0, 11084, 3194, 41870, 266, - 0, 0, 41873, 120575, 11324, 0, 0, 8420, 64918, 0, 41871, 41338, 3734, - 7734, 0, 8750, 66605, 66011, 0, 40965, 0, 0, 5161, 10572, 0, 0, 0, 64349, - 7287, 42162, 0, 0, 0, 11948, 0, 12359, 66674, 41369, 1697, 12191, 0, 0, - 7286, 0, 0, 10031, 0, 9870, 0, 8620, 65824, 0, 11938, 0, 7285, 0, 119577, - 0, 0, 0, 41583, 0, 65799, 0, 0, 0, 0, 0, 66199, 0, 3609, 0, 0, 832, - 120693, 120770, 0, 66007, 0, 65703, 0, 0, 0, 5180, 0, 41395, 41530, - 11691, 64773, 0, 74002, 0, 0, 0, 11036, 243, 13200, 0, 6024, 0, 74398, - 10037, 41529, 10648, 8538, 0, 0, 0, 4285, 66195, 0, 4230, 0, 13307, 0, 0, - 7563, 42376, 0, 0, 120512, 0, 0, 214, 0, 0, 0, 65893, 12208, 120488, 0, - 66311, 65589, 0, 2603, 0, 0, 0, 0, 0, 6022, 0, 2884, 0, 11620, 0, 43, 0, - 66453, 1016, 41107, 0, 41121, 3885, 92, 65456, 64608, 0, 74801, 0, 12451, - 0, 0, 0, 12453, 0, 0, 74241, 0, 8890, 12457, 0, 0, 0, 0, 118819, 0, 0, 0, - 66637, 7995, 8759, 0, 0, 12449, 0, 0, 0, 8752, 3197, 4720, 10165, 0, - 119249, 0, 11595, 64893, 0, 120180, 0, 0, 4993, 0, 6168, 10934, 1946, - 741, 0, 5494, 4639, 0, 1990, 66589, 4498, 0, 0, 0, 0, 0, 2960, 73779, 0, - 8969, 0, 0, 0, 0, 2950, 0, 6210, 0, 370, 0, 0, 0, 4953, 0, 0, 0, 0, 0, 0, - 0, 65688, 0, 5063, 3517, 2964, 0, 0, 65094, 74791, 10566, 10144, 66333, - 8252, 729, 66016, 0, 0, 0, 64923, 0, 65208, 9032, 0, 0, 0, 41215, 0, - 65883, 0, 0, 120602, 3761, 0, 0, 0, 0, 12912, 119012, 3850, 0, 0, 0, 0, - 0, 908, 0, 8611, 0, 0, 0, 0, 0, 0, 8978, 120540, 119135, 41586, 10527, 0, - 917848, 3848, 0, 0, 0, 65241, 5336, 0, 0, 663, 0, 10780, 0, 0, 0, 0, 0, - 0, 347, 0, 0, 0, 64675, 41582, 119126, 0, 65579, 12980, 0, 12143, 73733, - 0, 0, 0, 41804, 0, 0, 0, 0, 0, 41584, 10681, 0, 0, 73938, 0, 0, 4800, - 66661, 0, 66306, 64715, 0, 9518, 6609, 10434, 0, 11319, 1097, 0, 917850, - 41730, 0, 0, 0, 0, 65172, 41728, 41721, 0, 0, 0, 41203, 0, 13110, 41726, - 0, 0, 1000, 0, 0, 41140, 1209, 0, 0, 0, 1073, 0, 0, 41138, 0, 0, 0, - 12167, 1115, 41605, 9794, 127062, 127063, 127064, 12237, 127066, 66314, - 6587, 9290, 0, 0, 9231, 0, 2959, 7926, 0, 0, 0, 64398, 0, 119970, 12311, - 0, 0, 118846, 0, 0, 0, 119973, 0, 0, 0, 12290, 0, 0, 0, 42142, 10151, - 8205, 0, 5131, 0, 9627, 0, 0, 0, 0, 1944, 1248, 10148, 0, 119990, 119991, - 12701, 119993, 11308, 119995, 0, 119997, 119998, 65305, 74263, 4031, - 42794, 120003, 7075, 8154, 120006, 120007, 41817, 73934, 42275, 120011, - 120012, 120013, 120014, 120015, 6041, 0, 41899, 0, 8002, 0, 4364, 0, 0, - 64332, 0, 7813, 9064, 119986, 10124, 7526, 8601, 7281, 0, 7279, 12041, - 1418, 10885, 12673, 0, 0, 9660, 0, 13012, 4571, 0, 0, 0, 12078, 2970, 0, - 10933, 0, 0, 0, 0, 0, 41599, 0, 0, 0, 12950, 0, 3486, 0, 0, 4239, 0, 0, - 66511, 0, 2637, 64629, 8460, 127053, 8476, 0, 0, 0, 0, 65673, 1019, 0, - 4148, 0, 12289, 0, 4316, 0, 13119, 0, 5412, 66243, 10744, 0, 73864, 0, - 41734, 8206, 74081, 9163, 3286, 9072, 5867, 13302, 7622, 0, 41736, 0, - 41731, 0, 9483, 5416, 0, 119593, 10817, 0, 41539, 0, 0, 73963, 41855, - 41867, 65564, 11277, 65892, 11536, 10620, 0, 12210, 0, 73932, 5498, - 73942, 41536, 0, 0, 0, 3459, 8997, 0, 0, 0, 0, 0, 0, 66377, 0, 0, 0, 0, - 3161, 295, 0, 0, 0, 0, 0, 9016, 0, 63903, 63902, 63901, 0, 3971, 0, - 73972, 2952, 0, 11038, 10901, 63900, 63899, 63898, 0, 667, 12332, 63887, - 6086, 41722, 0, 5172, 0, 0, 4159, 0, 0, 9815, 63884, 19934, 63882, 41198, - 8555, 63878, 63877, 42460, 6050, 0, 63881, 63872, 0, 42421, 0, 41723, - 63875, 63874, 11460, 7432, 1913, 41913, 63852, 0, 0, 42348, 0, 74841, - 446, 41911, 0, 63851, 63850, 41910, 0, 63846, 2972, 12932, 7262, 0, - 63849, 63848, 63847, 0, 0, 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, 0, 0, - 10785, 0, 119170, 4557, 0, 9159, 10171, 13125, 63860, 5540, 63858, 63865, - 281, 13242, 63862, 74154, 0, 5536, 65568, 63857, 1388, 74169, 0, 1077, 0, - 65099, 11531, 0, 0, 0, 0, 0, 42773, 0, 0, 0, 119220, 0, 3663, 0, 1112, - 119122, 8686, 0, 5334, 65081, 0, 74778, 0, 11077, 0, 6509, 0, 5327, 0, - 19907, 63869, 3478, 7583, 7679, 2903, 0, 3001, 1158, 8745, 0, 73748, - 63866, 0, 1915, 4846, 0, 66371, 118984, 42105, 2990, 120128, 805, 120130, - 120125, 12070, 8760, 1117, 118987, 12212, 120123, 65174, 42357, 63835, - 63834, 0, 0, 12225, 63838, 63837, 0, 0, 63833, 6042, 66360, 8083, 0, 0, - 63821, 63820, 63819, 63818, 0, 5227, 9047, 63822, 0, 6091, 0, 10691, 560, - 5643, 8226, 119578, 63812, 63811, 63810, 63809, 5542, 63815, 63814, - 63813, 6047, 1597, 120143, 780, 206, 0, 4936, 65147, 8168, 63930, 0, - 1093, 9882, 63934, 63933, 63932, 917554, 63929, 3546, 1605, 0, 9806, - 65566, 0, 8400, 11343, 63920, 0, 63926, 2984, 5968, 9287, 0, 4618, 0, 0, - 13169, 5290, 5283, 1695, 10743, 1088, 63825, 7268, 1084, 1085, 63829, - 1083, 10131, 7283, 0, 63970, 0, 1092, 4754, 7273, 5252, 0, 0, 0, 0, 0, - 11809, 0, 0, 0, 2965, 7258, 8808, 0, 1089, 4187, 63937, 42119, 42120, 0, - 940, 5787, 10099, 63938, 0, 74494, 12463, 2994, 0, 0, 0, 9664, 0, 0, 0, - 0, 74343, 0, 0, 660, 10127, 666, 9022, 5532, 0, 5533, 0, 0, 6118, 222, - 979, 3884, 0, 74151, 120445, 6502, 0, 127118, 0, 63951, 12465, 0, 0, 0, - 63946, 1707, 63924, 12461, 63950, 63897, 63948, 63947, 63945, 6038, - 63943, 63942, 64685, 63895, 65838, 0, 7776, 0, 0, 0, 120444, 0, 801, - 43165, 1690, 63919, 63918, 63917, 13277, 63893, 0, 120638, 9906, 5486, - 2334, 0, 63916, 5483, 63914, 120610, 63911, 5484, 63909, 63908, 2539, 0, - 63913, 5485, 0, 195060, 9061, 5534, 10672, 4502, 0, 253, 0, 0, 0, 42854, - 0, 0, 11530, 0, 0, 0, 0, 0, 10474, 0, 13257, 42354, 0, 0, 0, 195065, 0, - 8413, 0, 0, 5693, 7272, 0, 13209, 64470, 65831, 0, 195063, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 66608, 3111, 41863, 8804, 66607, 0, 7270, 0, 66606, 6628, - 1076, 41305, 1436, 0, 0, 0, 63982, 10221, 12807, 63907, 63906, 1598, - 63904, 0, 0, 41729, 4423, 1307, 0, 10515, 41589, 0, 0, 6218, 0, 1430, 0, - 0, 120606, 119365, 5413, 7619, 3255, 3493, 74032, 11549, 10735, 0, 73937, - 10517, 0, 0, 10990, 65073, 5167, 4481, 3771, 0, 2710, 0, 0, 41724, 0, - 43073, 41690, 12479, 0, 0, 0, 0, 119659, 1628, 0, 0, 0, 65262, 63854, - 10783, 42315, 0, 63855, 120683, 0, 0, 5339, 74323, 0, 13004, 0, 4457, 0, - 0, 0, 0, 5684, 8678, 10914, 0, 5689, 65807, 0, 120617, 12633, 0, 0, - 65183, 5688, 11926, 6033, 6310, 5686, 0, 0, 0, 120647, 0, 50, 0, 9871, 0, - 0, 0, 0, 0, 66468, 0, 13259, 4448, 0, 0, 0, 0, 67853, 0, 10640, 0, 1151, - 0, 0, 0, 0, 195050, 0, 0, 0, 0, 12501, 64604, 0, 11527, 118870, 8812, 0, - 11538, 8673, 12650, 11020, 0, 66467, 10839, 8087, 0, 0, 9894, 0, 0, 0, - 4636, 0, 118985, 8053, 0, 0, 0, 0, 120495, 0, 0, 12277, 194627, 11995, - 194626, 0, 12158, 0, 8741, 10197, 0, 0, 0, 6531, 0, 0, 473, 0, 0, 0, - 1873, 1087, 0, 0, 0, 0, 66439, 43218, 0, 194716, 7237, 12504, 74282, 0, - 0, 0, 9489, 0, 0, 4384, 74220, 195055, 0, 917561, 13295, 43191, 0, 0, - 1154, 3857, 1205, 0, 0, 13100, 12958, 120706, 74168, 0, 0, 4421, 10592, - 0, 495, 0, 41712, 7983, 0, 0, 0, 8494, 0, 7654, 41710, 4196, 0, 437, - 41709, 73772, 0, 0, 9465, 13290, 119180, 4997, 64306, 0, 0, 4999, 194642, - 0, 0, 4711, 120769, 0, 2739, 0, 8044, 74834, 0, 41789, 0, 10809, 0, 0, 0, - 1779, 6600, 6601, 41543, 5325, 642, 64187, 13058, 0, 0, 0, 0, 13229, 0, - 10575, 0, 0, 0, 41791, 1104, 0, 0, 10655, 0, 0, 0, 0, 1082, 195049, 8428, - 0, 0, 0, 0, 0, 10167, 0, 12993, 8049, 41548, 0, 6458, 0, 0, 4761, 63828, - 4766, 64623, 1273, 194653, 0, 118876, 0, 6912, 1313, 7033, 10483, 0, - 41545, 0, 0, 0, 0, 0, 0, 0, 3484, 74337, 0, 0, 8503, 5122, 41527, 0, - 66320, 0, 0, 0, 0, 41537, 0, 8303, 8282, 11817, 0, 10003, 73859, 65904, - 194663, 1686, 0, 0, 11467, 3664, 65921, 64299, 194664, 0, 0, 4324, 126, - 42246, 119152, 0, 0, 65926, 7744, 194636, 74277, 74302, 0, 0, 6966, 0, - 8136, 0, 65600, 1633, 0, 0, 4762, 1103, 0, 0, 4765, 0, 13078, 0, 4760, - 63827, 0, 10871, 43199, 1102, 0, 0, 0, 0, 11546, 74794, 337, 0, 42591, - 8627, 12279, 1111, 0, 0, 4707, 0, 10143, 7883, 127081, 7880, 4522, 8645, - 5704, 13010, 0, 8304, 0, 0, 119575, 0, 0, 66654, 0, 0, 0, 13008, 0, 4385, - 0, 13011, 0, 0, 119161, 13009, 160, 2677, 0, 0, 41793, 65763, 74221, - 120141, 41792, 42770, 0, 65762, 118829, 64573, 5709, 0, 194638, 0, 0, 0, - 1079, 3867, 5708, 0, 0, 0, 5706, 64768, 5705, 8791, 4005, 0, 10237, - 10991, 0, 917579, 9173, 917581, 917580, 13170, 65942, 917577, 42605, - 120765, 917570, 917573, 917572, 10058, 0, 74867, 194654, 127078, 3339, - 11448, 1106, 917591, 917590, 917593, 3340, 917587, 917586, 917589, - 917588, 917583, 10605, 1309, 63966, 120743, 1754, 127075, 13246, 864, 0, - 118926, 8972, 0, 7849, 120092, 0, 13240, 195068, 5192, 4338, 0, 10948, - 917601, 13199, 120169, 1236, 13208, 13261, 13189, 13188, 120164, 0, 7440, - 0, 120153, 9553, 1590, 63777, 63776, 13178, 63782, 63781, 63780, 63779, - 1583, 0, 13260, 4550, 0, 64205, 0, 0, 41522, 0, 0, 0, 0, 11354, 0, 0, - 42795, 0, 119195, 11394, 194646, 13236, 13272, 13194, 1334, 0, 4479, - 1178, 65586, 120663, 66681, 119193, 4601, 0, 0, 0, 0, 0, 0, 0, 63787, + 66504, 0, 0, 2307, 0, 64333, 0, 0, 73873, 0, 0, 0, 0, 0, 0, 10360, 6746, + 0, 0, 440, 0, 13085, 9233, 74216, 0, 0, 68612, 0, 66447, 8046, 64963, + 65777, 10125, 74212, 42819, 10910, 0, 1521, 9896, 0, 10487, 0, 12527, 0, + 7970, 0, 0, 0, 65769, 5243, 9849, 5239, 65771, 0, 0, 5237, 0, 0, 10103, + 5247, 4769, 0, 118977, 12873, 5764, 0, 0, 3008, 4896, 0, 12087, 0, 55231, + 41103, 0, 64565, 4773, 0, 0, 0, 4770, 0, 917567, 8731, 65378, 0, 120619, + 9122, 0, 0, 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, 0, 0, 0, 10116, 9877, 0, 0, 0, 7095, 0, 0, + 6778, 0, 78090, 8243, 2427, 0, 7093, 0, 11585, 195003, 9962, 0, 12223, 0, + 0, 1434, 0, 5637, 11573, 0, 0, 0, 19951, 0, 78121, 0, 0, 55283, 0, 0, + 74437, 1156, 8740, 0, 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, 0, 0, 42257, 5696, + 120470, 120465, 3862, 9643, 0, 0, 7634, 65167, 9845, 0, 0, 5701, 9722, + 41490, 0, 1426, 68217, 0, 68447, 42204, 55270, 8571, 194991, 0, 0, 78818, + 0, 43182, 12184, 0, 42022, 0, 10281, 0, 5650, 43194, 64712, 10744, 0, + 990, 5647, 0, 7387, 78734, 41114, 11477, 5646, 12879, 11018, 0, 3945, 0, + 0, 0, 0, 0, 78212, 0, 1020, 73763, 0, 78731, 5648, 64748, 194910, 0, + 10205, 3545, 0, 6984, 0, 74051, 0, 43242, 120458, 2667, 0, 0, 0, 9911, 0, + 65020, 10097, 119166, 0, 0, 118836, 0, 78427, 1140, 78426, 0, 10159, 0, + 0, 8128, 0, 0, 917965, 1815, 19910, 890, 0, 3267, 0, 0, 10123, 0, 4410, + 1041, 10576, 6354, 0, 580, 74232, 0, 0, 0, 0, 0, 19938, 65906, 0, 0, 0, + 3298, 5375, 10142, 0, 8215, 0, 6134, 41246, 64402, 0, 0, 0, 0, 0, 41382, + 0, 0, 5173, 65348, 527, 0, 0, 0, 0, 78797, 11915, 0, 0, 10072, 0, 42695, + 2329, 42250, 0, 0, 0, 12245, 9939, 0, 0, 0, 0, 0, 74328, 119576, 74769, + 0, 119087, 9069, 6144, 0, 0, 73822, 0, 0, 64917, 41521, 118934, 494, + 13250, 0, 65098, 6364, 956, 0, 12830, 10462, 73740, 0, 0, 0, 0, 66449, + 13263, 74281, 69217, 13171, 0, 0, 0, 0, 0, 1044, 41276, 0, 0, 0, 42068, + 11795, 0, 0, 0, 0, 42450, 3907, 0, 64526, 0, 68197, 12295, 0, 11475, 0, + 3020, 11537, 0, 66441, 0, 0, 0, 0, 1057, 566, 42696, 0, 3016, 42274, + 43464, 66490, 12921, 66571, 78472, 0, 3006, 4620, 127237, 0, 0, 0, 64659, + 0, 0, 55253, 6357, 6362, 8626, 0, 0, 9090, 65377, 41596, 0, 0, 1698, 0, + 64477, 0, 0, 1053, 0, 78269, 0, 0, 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, 0, 0, 0, 6359, 0, 43471, 0, 0, 0, + 127274, 0, 6358, 6361, 1926, 6356, 0, 7898, 8110, 10935, 0, 43633, 5830, + 0, 43685, 0, 0, 0, 0, 8693, 78611, 119565, 0, 0, 0, 127257, 0, 0, 0, 0, + 0, 0, 0, 119187, 11439, 78868, 0, 0, 78869, 42313, 5579, 0, 0, 0, 0, 0, + 5578, 41774, 0, 42023, 6234, 5669, 0, 0, 0, 0, 127506, 68202, 5583, 0, 0, + 42426, 5580, 42276, 2923, 892, 5582, 42465, 41330, 194987, 5795, 65512, + 119006, 65702, 0, 120801, 65251, 0, 65710, 0, 0, 67672, 0, 5370, 0, + 194986, 1638, 10966, 10188, 65878, 118848, 0, 0, 0, 0, 8172, 42017, 0, + 10844, 0, 0, 0, 6374, 0, 0, 286, 78023, 1062, 0, 119999, 0, 7395, 0, + 1070, 64900, 0, 6095, 41865, 0, 3015, 0, 917763, 5211, 0, 6400, 0, + 194983, 0, 8189, 11276, 0, 0, 372, 0, 0, 118874, 42102, 41585, 0, 0, + 42101, 276, 78402, 0, 33, 74226, 0, 9007, 118796, 41588, 66033, 427, + 10763, 118819, 0, 0, 0, 1031, 6257, 0, 42104, 0, 0, 2328, 0, 1071, 0, 0, + 74848, 0, 0, 0, 1047, 0, 0, 64790, 0, 0, 10651, 0, 0, 0, 0, 0, 119181, + 5711, 41633, 12098, 65571, 9166, 0, 5710, 0, 6790, 65168, 13216, 0, 0, 0, + 0, 64611, 41623, 195001, 5715, 0, 0, 0, 5712, 2761, 41620, 68124, 3074, + 5722, 0, 8643, 73768, 0, 118906, 2757, 11067, 9718, 74498, 8910, 10689, + 6479, 0, 0, 0, 78607, 0, 0, 0, 0, 0, 0, 118911, 0, 0, 0, 0, 0, 120010, 0, + 8701, 68130, 119616, 120522, 0, 42477, 0, 12123, 4495, 43569, 0, 0, 0, + 64946, 10992, 0, 120009, 0, 0, 9318, 120661, 13249, 65679, 73808, 0, + 65457, 42249, 7639, 43995, 67845, 42641, 5454, 0, 0, 194997, 120005, 0, + 0, 5084, 0, 0, 118861, 0, 733, 917876, 78014, 78436, 78435, 41677, 0, + 9218, 1731, 0, 0, 0, 0, 0, 0, 0, 120001, 127018, 0, 5155, 0, 5358, 0, 0, + 917767, 64424, 0, 3840, 64314, 41432, 0, 0, 68430, 119116, 43253, 65943, + 0, 3371, 10988, 0, 8771, 1479, 0, 0, 1109, 11580, 0, 64601, 12205, 0, 0, + 64507, 8868, 399, 0, 74842, 0, 0, 12149, 13088, 551, 0, 10156, 12119, 0, + 0, 2544, 65074, 0, 0, 0, 78011, 351, 119149, 0, 0, 55229, 0, 74268, 0, 0, + 0, 42377, 0, 0, 0, 0, 0, 9013, 4054, 0, 0, 0, 0, 73960, 5585, 65881, + 2549, 74469, 0, 0, 5584, 8358, 0, 74411, 0, 10919, 0, 7980, 0, 0, 0, + 41800, 5589, 0, 2664, 41613, 5586, 118890, 0, 11356, 0, 0, 43452, 78609, + 0, 42573, 67856, 0, 78129, 0, 0, 0, 8135, 6450, 10055, 77996, 0, 0, 0, + 5657, 0, 9626, 0, 77994, 10179, 5654, 12939, 0, 120799, 0, 0, 5652, + 10945, 0, 66486, 0, 3661, 7863, 0, 0, 0, 74509, 0, 5659, 0, 0, 66729, + 5655, 0, 42168, 0, 1055, 917628, 0, 66310, 74030, 0, 12146, 73955, 73956, + 11618, 0, 126990, 0, 10272, 10304, 10368, 42518, 594, 10244, 10248, 7407, + 0, 64870, 0, 3467, 0, 0, 3331, 946, 10231, 1495, 8131, 74330, 0, 9562, + 69222, 65927, 0, 0, 120155, 69769, 64656, 0, 0, 194837, 0, 5666, 65227, + 5318, 63994, 0, 9091, 10798, 0, 917979, 10186, 0, 7732, 0, 64556, 0, 0, + 5668, 74445, 0, 0, 5670, 0, 0, 11820, 2992, 7826, 5667, 19952, 120807, 0, + 12749, 0, 0, 0, 66496, 4361, 119260, 1306, 9286, 1497, 0, 0, 0, 0, 3571, + 13247, 0, 7973, 66353, 68435, 78278, 67896, 43192, 0, 78265, 553, 120653, + 0, 0, 5829, 0, 4587, 78285, 65912, 0, 12746, 0, 0, 119924, 5633, 119927, + 0, 0, 0, 64905, 0, 9512, 0, 12742, 6443, 0, 0, 9135, 0, 41564, 0, 55219, + 0, 0, 0, 12148, 0, 78297, 0, 64256, 0, 11669, 0, 5634, 4524, 0, 127270, + 0, 118880, 2425, 65182, 0, 43636, 5221, 78410, 328, 0, 0, 69815, 5636, 0, + 5329, 0, 5638, 119918, 7940, 64938, 43223, 0, 5635, 3373, 2986, 78292, + 74223, 3437, 78291, 6203, 4247, 0, 11920, 8274, 0, 0, 1657, 41561, 78299, + 78295, 5639, 2954, 5660, 5640, 78303, 0, 78300, 42227, 0, 0, 41637, + 67872, 0, 78310, 41625, 43362, 78309, 120713, 11705, 5642, 0, 5486, 0, + 4356, 11710, 0, 12051, 0, 0, 5641, 8259, 0, 1058, 0, 67630, 0, 0, 1144, + 78750, 0, 42228, 0, 73890, 118972, 0, 65322, 0, 5645, 64964, 8652, 2547, + 66484, 43634, 0, 5608, 65890, 0, 0, 67621, 119934, 9000, 0, 0, 0, 1865, + 0, 5613, 74267, 0, 0, 5610, 0, 0, 65826, 2069, 0, 10787, 43999, 2997, 0, + 5609, 78316, 65319, 78313, 12316, 65376, 2412, 0, 8186, 9807, 74269, 0, + 13130, 65874, 0, 5807, 0, 10030, 5306, 12936, 0, 0, 11704, 0, 0, 10211, + 0, 0, 0, 0, 11706, 9710, 0, 0, 0, 413, 65623, 74237, 0, 9133, 74262, 0, + 1042, 0, 64779, 12171, 119240, 6185, 64776, 4984, 0, 708, 11391, 0, + 12241, 0, 0, 1308, 0, 2534, 810, 0, 0, 0, 0, 0, 1917, 3000, 0, 0, 120739, + 2364, 0, 74470, 66618, 65680, 0, 10027, 0, 0, 12337, 120722, 0, 0, 2980, + 755, 69774, 931, 13124, 68182, 6363, 2748, 0, 0, 65041, 0, 44011, 8730, + 0, 0, 78312, 7274, 119250, 0, 7275, 78304, 935, 0, 65840, 377, 42325, + 11649, 0, 65253, 64301, 0, 78308, 42341, 65284, 2417, 0, 12884, 19912, + 7907, 10768, 0, 194998, 0, 10673, 119217, 7248, 0, 0, 1781, 5496, 3627, + 62, 1649, 0, 964, 0, 0, 78226, 0, 127512, 0, 0, 0, 0, 43689, 0, 13142, + 78812, 42415, 66575, 4542, 74037, 43547, 0, 0, 7677, 2991, 4946, 42454, + 0, 7949, 0, 0, 11341, 42494, 3073, 65625, 9714, 11692, 4657, 0, 0, 6478, + 9898, 43673, 65237, 6241, 0, 4877, 0, 6238, 0, 10548, 127049, 4409, 0, 0, + 64798, 0, 5346, 0, 120528, 6237, 4874, 0, 9176, 0, 0, 65231, 65884, + 12678, 78748, 118912, 11378, 44018, 42785, 2408, 3251, 0, 0, 5685, 0, + 2461, 11052, 7091, 5342, 8317, 0, 68163, 5340, 0, 0, 43635, 73928, + 127529, 0, 0, 0, 0, 65482, 0, 9142, 0, 0, 0, 10938, 0, 118790, 1182, + 2542, 4826, 0, 0, 0, 529, 8580, 0, 0, 10586, 10790, 10839, 66023, 41593, + 41207, 0, 0, 41594, 225, 42828, 0, 0, 0, 11376, 74379, 10721, 67664, + 3438, 42097, 127267, 11084, 3194, 41870, 266, 78305, 0, 41873, 120575, + 11324, 0, 0, 8420, 64918, 0, 41871, 41338, 3734, 7734, 43683, 8750, + 66605, 66011, 0, 40965, 0, 0, 5161, 10572, 0, 0, 0, 64349, 7287, 42162, + 127552, 0, 0, 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, 0, 0, 0, 0, 78169, 66199, 0, + 3609, 68624, 0, 832, 120693, 120770, 78473, 66007, 78471, 65703, 0, 0, + 42732, 5180, 0, 41395, 41530, 11691, 64773, 0, 74002, 0, 0, 0, 6348, 243, + 13200, 0, 6024, 0, 9979, 10037, 41529, 10648, 8538, 43687, 0, 0, 4285, + 66195, 0, 4230, 0, 13307, 43256, 0, 7563, 42376, 0, 68442, 120512, 0, 0, + 214, 0, 0, 78466, 65893, 12208, 9973, 0, 66311, 65589, 0, 2603, 0, 0, 0, + 0, 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, 0, 0, + 74241, 0, 6791, 12457, 78268, 0, 0, 0, 78279, 0, 0, 0, 66637, 7995, 8759, + 43421, 78277, 12449, 0, 0, 0, 8752, 3197, 4720, 10165, 0, 119249, 0, + 11595, 64893, 0, 43435, 0, 0, 4993, 0, 6168, 10934, 1946, 741, 0, 5494, + 4639, 0, 1990, 66589, 4498, 78664, 119183, 0, 0, 0, 2960, 73779, 0, 8969, + 0, 43424, 127059, 0, 2950, 0, 6210, 65753, 370, 0, 0, 0, 4953, 0, 0, 0, + 0, 69230, 0, 0, 65688, 0, 5063, 3517, 2964, 43663, 917762, 6344, 74791, + 10566, 10144, 66333, 8252, 729, 66016, 78253, 0, 0, 64923, 0, 43669, + 9032, 78263, 78264, 0, 41215, 0, 65883, 0, 0, 120602, 3761, 0, 0, 0, 0, + 12912, 119012, 3850, 0, 0, 0, 0, 0, 908, 0, 8611, 0, 0, 0, 43691, 41197, + 0, 8978, 120540, 119135, 41586, 10527, 0, 917848, 3848, 78739, 194937, + 127536, 65241, 5336, 0, 0, 663, 0, 10780, 0, 0, 78767, 0, 0, 68193, 347, + 0, 0, 78775, 64675, 41582, 78774, 78744, 65579, 12980, 78769, 12143, + 73733, 78512, 0, 43441, 41804, 78523, 0, 78525, 0, 0, 41584, 10681, 0, 0, + 73938, 0, 0, 4800, 66661, 0, 66306, 64715, 78534, 9518, 6609, 10434, 0, + 11319, 1097, 0, 917850, 41730, 0, 0, 73847, 78761, 65172, 41728, 41721, + 0, 0, 0, 41203, 0, 13110, 41726, 0, 0, 1000, 0, 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, 0, 78796, + 78798, 78794, 78795, 68434, 78793, 66670, 0, 0, 12290, 0, 0, 0, 42142, + 9968, 8205, 0, 5131, 0, 9627, 78536, 78542, 78535, 0, 1944, 1248, 10148, + 0, 119990, 119991, 12701, 78376, 11308, 119995, 0, 119997, 119998, 65305, + 74263, 4031, 42794, 120003, 7075, 8154, 120006, 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, 0, 13012, 4571, 0, 0, 0, + 12078, 2970, 0, 10933, 0, 77870, 0, 0, 0, 41599, 0, 0, 0, 12950, 0, 3486, + 0, 0, 4239, 0, 0, 66511, 0, 2637, 64629, 8460, 127053, 8476, 0, 0, 0, 0, + 65673, 1019, 78495, 4148, 0, 12289, 0, 4316, 0, 13119, 0, 5412, 66243, + 9935, 0, 73864, 0, 41734, 8206, 74081, 9163, 3286, 9072, 5867, 13302, + 7622, 0, 41736, 0, 41731, 0, 7400, 5416, 68663, 118924, 10817, 0, 41539, + 0, 0, 73963, 41855, 41867, 65564, 11277, 65892, 11536, 10620, 0, 12210, + 66030, 73932, 5498, 73942, 41536, 0, 68204, 0, 3459, 8997, 0, 0, 0, 0, 0, + 0, 66377, 69781, 0, 0, 78511, 3161, 295, 120207, 0, 0, 0, 78742, 9016, + 43454, 63903, 63902, 43641, 0, 3971, 0, 73972, 2952, 78765, 11038, 10901, + 63900, 63899, 63898, 0, 667, 12332, 63887, 6086, 41722, 0, 5172, 0, 0, + 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, 0, 0, 42348, 0, 6752, 446, 41911, 0, 63851, 63850, + 41910, 0, 63846, 2972, 12932, 7262, 0, 63849, 63848, 63847, 0, 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, 0, 65099, 11531, + 5834, 0, 0, 0, 0, 42773, 0, 0, 0, 119220, 0, 3663, 0, 1112, 119122, 8686, + 0, 5334, 65081, 43249, 74778, 0, 11077, 0, 6509, 0, 5327, 0, 19907, + 63869, 3478, 7583, 7679, 2903, 0, 3001, 1158, 8745, 0, 73748, 63866, 0, + 1915, 4846, 0, 66371, 118984, 42105, 2990, 120128, 805, 69238, 120125, + 12070, 8760, 1117, 118987, 12212, 120123, 65174, 42357, 63835, 63834, 0, + 78240, 12225, 63838, 63837, 0, 0, 63833, 6042, 66360, 8083, 0, 0, 63821, + 63820, 63819, 63818, 0, 5227, 9047, 63822, 0, 6091, 0, 10691, 560, 5643, + 8226, 119578, 63812, 63811, 63810, 63809, 5542, 63815, 63814, 63813, + 6047, 1597, 120143, 780, 206, 77925, 4936, 65147, 8168, 63930, 2076, + 1093, 9882, 63934, 2082, 63932, 917554, 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, 0, 1092, 4754, 7273, 5252, + 44016, 43627, 0, 0, 7408, 11809, 0, 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, 120445, 6502, 0, 127118, 0, 63951, 12465, 0, 0, 0, 63946, 1707, + 63924, 12461, 63950, 63897, 63948, 63947, 63945, 6038, 63943, 63942, + 64685, 63895, 65838, 0, 7776, 0, 0, 0, 120444, 78172, 801, 43165, 1690, + 63919, 63918, 63917, 13277, 43659, 12951, 120638, 9906, 2054, 2334, + 78515, 63916, 5483, 63914, 120610, 63911, 5484, 63909, 63908, 2539, 0, + 43980, 5485, 0, 42697, 9061, 5534, 10672, 4502, 0, 253, 0, 68208, 0, + 42854, 78393, 0, 11530, 0, 68668, 0, 0, 0, 10474, 43426, 13257, 42354, 0, + 0, 0, 195065, 0, 8413, 0, 0, 5693, 7272, 0, 13209, 64470, 65831, 78460, + 195063, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66608, 3111, 41863, 8804, 66607, 0, + 7270, 0, 66606, 6628, 1076, 7433, 1436, 73844, 55226, 0, 63982, 7393, + 12807, 43413, 63906, 1598, 63904, 0, 0, 41729, 4423, 1307, 0, 10515, + 41589, 0, 0, 6218, 0, 1430, 0, 0, 120606, 78754, 5413, 7619, 3255, 3493, + 74032, 11549, 10735, 41743, 73937, 6801, 0, 4518, 10990, 65073, 5167, + 4481, 3771, 0, 2710, 0, 69243, 41724, 0, 43073, 41690, 12479, 0, 0, 0, 0, + 119659, 1628, 0, 0, 0, 65262, 6333, 10783, 42315, 0, 63855, 120683, 0, 0, + 5339, 74323, 0, 13004, 0, 4457, 0, 0, 0, 0, 5684, 8678, 10914, 0, 5689, + 65807, 0, 68464, 12633, 12870, 78521, 65183, 5688, 11926, 6033, 6310, + 5686, 0, 74251, 0, 120647, 0, 50, 10558, 9871, 0, 43655, 0, 0, 0, 66468, + 0, 13259, 4448, 0, 0, 0, 0, 67853, 0, 10640, 0, 1151, 0, 917607, 0, + 127079, 195050, 0, 0, 0, 0, 12501, 64604, 0, 11527, 118870, 8812, 0, + 11538, 8673, 12650, 11020, 0, 66467, 2105, 8087, 78163, 0, 9894, 0, 0, 0, + 4636, 55262, 78513, 4515, 2382, 0, 127055, 0, 120495, 0, 0, 12277, + 194627, 11995, 194626, 0, 12158, 0, 8741, 10197, 0, 0, 0, 6531, 0, 0, + 473, 43415, 0, 0, 1873, 1087, 0, 0, 0, 78527, 66439, 43218, 0, 194716, + 7237, 12504, 74282, 0, 0, 0, 9489, 0, 0, 4384, 74220, 195055, 2058, + 917561, 13295, 43191, 0, 0, 1154, 3857, 1205, 0, 0, 13100, 12958, 120706, + 74168, 0, 0, 4421, 10592, 0, 495, 0, 41712, 7983, 0, 120779, 0, 6347, 0, + 7654, 41710, 4196, 0, 437, 41709, 73772, 0, 0, 9465, 13290, 119180, 4997, + 64306, 0, 0, 4999, 194642, 0, 0, 4711, 120769, 0, 2739, 0, 8044, 74834, + 0, 41789, 0, 10809, 0, 0, 0, 1779, 6600, 6601, 41543, 5325, 642, 64187, + 13058, 120449, 12875, 0, 0, 13229, 0, 10575, 43399, 0, 0, 41791, 1104, 0, + 0, 10655, 0, 0, 0, 0, 1082, 195049, 8428, 6569, 0, 0, 0, 0, 6783, 0, + 12993, 8049, 41548, 44021, 6458, 0, 0, 4761, 63828, 4766, 64623, 1273, + 43407, 0, 118876, 195045, 6912, 1313, 6322, 10483, 0, 41545, 0, 0, 0, 0, + 0, 0, 78624, 3484, 74337, 0, 0, 8503, 5122, 41527, 0, 66320, 0, 0, 0, 0, + 41537, 0, 8303, 8282, 11817, 73857, 10003, 73859, 65904, 194663, 1686, 0, + 78406, 11467, 3664, 65921, 64299, 194664, 0, 0, 4324, 126, 42246, 119152, + 0, 74378, 65926, 7744, 194636, 74277, 74302, 78052, 0, 6966, 0, 8136, 0, + 65600, 1633, 0, 0, 4762, 1103, 0, 0, 4765, 0, 13078, 0, 4760, 63827, + 2050, 10871, 43199, 1102, 0, 42236, 0, 194667, 11546, 74794, 337, 0, + 42591, 8627, 12279, 1111, 0, 0, 4707, 68206, 10143, 7883, 127081, 7880, + 4522, 8645, 5704, 13010, 0, 8304, 0, 0, 119575, 0, 0, 66654, 0, 0, 0, + 13008, 0, 4385, 0, 13011, 0, 0, 119161, 13009, 160, 2677, 0, 0, 41793, + 65763, 74221, 120141, 41792, 42770, 0, 65762, 118829, 64573, 5709, 0, + 194638, 0, 0, 0, 1079, 3867, 5708, 0, 0, 0, 5706, 64768, 5705, 8791, + 4005, 0, 10237, 10991, 0, 43459, 9173, 917581, 917580, 13170, 65942, + 917577, 42605, 120765, 917570, 68647, 917572, 10058, 0, 74867, 194654, + 127078, 3339, 11448, 1106, 917591, 917590, 917593, 3340, 917587, 917586, + 917589, 917588, 120541, 10605, 1309, 63966, 120743, 1754, 127075, 13246, + 864, 0, 118926, 8972, 0, 7849, 120092, 0, 13240, 195068, 5192, 4338, 0, + 10948, 917601, 13199, 120169, 1236, 13208, 13261, 13189, 13188, 120164, + 0, 7440, 0, 120153, 9553, 1590, 63777, 63776, 13178, 63782, 63781, 63780, + 63779, 1583, 0, 13260, 4550, 0, 64205, 0, 0, 41522, 0, 0, 0, 0, 11354, 0, + 0, 42795, 0, 119195, 11394, 194646, 13236, 13272, 13194, 1334, 0, 4479, + 1178, 65586, 120663, 66681, 119193, 4601, 0, 0, 0, 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, 0, 0, 0, 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, 0, 41930, 63805, 63804, 63803, 63801, 41082, 8140, 63798, 6260, - 0, 0, 119225, 63793, 11988, 3898, 0, 10201, 12238, 63795, 42358, 10367, - 12521, 10431, 42114, 41932, 1068, 0, 12523, 12945, 0, 0, 7950, 10804, - 63771, 42787, 4386, 12224, 6973, 2793, 12475, 0, 0, 63769, 9530, 0, - 12232, 13135, 8596, 5681, 63762, 4595, 63760, 792, 0, 64803, 0, 8742, 0, - 11053, 0, 63744, 0, 0, 7588, 63748, 1693, 63746, 43204, 5055, 0, 0, 1090, - 120679, 0, 11665, 74133, 4558, 65685, 9523, 0, 0, 0, 11513, 0, 6157, - 63775, 63774, 63773, 13191, 12170, 3500, 3139, 0, 3170, 12485, 0, 10872, - 0, 13006, 64433, 0, 0, 941, 0, 0, 0, 65541, 11063, 0, 8228, 0, 42065, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 43603, 0, 65397, 288, 0, 0, 0, 10025, 0, 2918, - 0, 65300, 119871, 9883, 64726, 2790, 65395, 3793, 0, 0, 65393, 0, 74138, - 0, 0, 0, 74139, 120613, 65394, 11548, 5270, 0, 65396, 0, 65813, 13256, - 1282, 120771, 0, 0, 10888, 0, 65242, 0, 3330, 0, 0, 0, 0, 0, 0, 3304, - 42753, 0, 0, 0, 1627, 0, 0, 0, 5371, 13116, 0, 1826, 0, 0, 43094, 0, 0, - 0, 0, 9035, 0, 0, 0, 0, 0, 68125, 0, 164, 0, 0, 0, 6958, 0, 43116, 0, 0, - 13245, 0, 0, 0, 0, 73893, 0, 12666, 13175, 13207, 120414, 66014, 120428, + 10192, 13105, 8183, 120741, 2037, 0, 0, 10747, 125, 0, 64890, 0, 0, 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, 119225, 63793, 11988, 3898, 0, 10201, 12238, 63795, + 42194, 10367, 12521, 10431, 42114, 41932, 1068, 0, 12523, 12945, 0, + 42203, 7950, 10804, 63771, 42787, 4386, 12224, 6973, 2793, 12475, 0, 0, + 63769, 9530, 0, 12232, 13135, 8596, 5681, 63762, 4595, 63760, 792, 0, + 64803, 0, 8742, 0, 11053, 0, 63744, 0, 0, 7588, 63748, 1693, 63746, + 43204, 5055, 68426, 917853, 1090, 120679, 0, 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, 0, 0, 0, 7386, 0, 68358, 0, + 0, 43603, 0, 65397, 288, 0, 0, 0, 10025, 917916, 2918, 0, 65300, 119871, + 9883, 64726, 2790, 65395, 3793, 0, 0, 65393, 0, 74138, 0, 0, 0, 74139, + 120613, 65394, 11548, 5270, 0, 65396, 0, 65813, 13256, 1282, 120771, 0, + 0, 10888, 0, 65242, 0, 3330, 0, 0, 0, 0, 0, 74259, 3304, 42753, 0, 0, 0, + 1627, 0, 0, 0, 5371, 13116, 0, 1826, 118794, 0, 43094, 0, 43650, 0, 0, + 9035, 0, 0, 0, 0, 0, 68125, 0, 164, 0, 0, 0, 6958, 0, 43116, 0, 0, 13245, + 0, 0, 127376, 0, 73893, 0, 12666, 13175, 13207, 120414, 66014, 120428, 7447, 5929, 0, 65509, 0, 7449, 11306, 0, 73920, 3180, 0, 63808, 9054, - 971, 13062, 0, 0, 65195, 64767, 0, 74428, 0, 0, 0, 0, 0, 0, 10045, 64303, - 13275, 0, 11057, 0, 13276, 0, 41525, 0, 7271, 11444, 0, 0, 0, 12229, - 41523, 0, 0, 73751, 0, 64813, 0, 0, 10476, 3858, 0, 3932, 64958, 0, 0, - 73989, 0, 0, 0, 369, 0, 41784, 0, 64163, 0, 0, 0, 65474, 4796, 41782, 0, - 65479, 0, 41781, 10486, 41480, 120511, 9899, 0, 0, 404, 12821, 3741, 0, - 5788, 0, 0, 41222, 1831, 66020, 0, 0, 4388, 0, 746, 120784, 0, 0, 13131, - 65294, 0, 0, 0, 0, 4422, 4708, 3799, 74292, 119357, 0, 74430, 0, 11700, - 4374, 0, 0, 1364, 0, 8038, 0, 917597, 0, 0, 0, 0, 73979, 13174, 73968, - 13225, 0, 0, 65835, 0, 2365, 7841, 0, 42855, 118856, 42866, 0, 0, 0, - 66438, 41785, 41171, 64172, 13173, 4372, 119354, 0, 0, 0, 0, 0, 0, 12965, - 384, 64512, 10404, 10340, 119352, 1556, 5274, 13210, 0, 10017, 9733, - 41787, 0, 0, 41373, 0, 12303, 0, 13232, 13233, 349, 4863, 41371, 11656, - 0, 120703, 119883, 12861, 4398, 8543, 65618, 0, 1096, 0, 0, 0, 12441, - 12355, 119348, 119347, 4318, 10452, 0, 8032, 13243, 13237, 12719, 0, - 119101, 0, 64884, 119872, 119345, 8597, 0, 0, 9864, 0, 120785, 0, 0, - 13195, 41452, 64961, 7722, 0, 10459, 119878, 0, 119879, 66590, 0, 41533, - 66337, 0, 0, 0, 4965, 0, 917536, 73849, 0, 0, 0, 0, 6261, 119342, 43147, - 66570, 1957, 10420, 982, 2756, 13292, 13206, 0, 0, 2925, 73809, 13056, 0, - 13212, 65110, 0, 13190, 13187, 0, 13198, 118793, 0, 5242, 119179, 64476, - 1694, 8216, 0, 0, 43331, 0, 65620, 0, 43544, 0, 0, 41444, 65621, 120325, - 64799, 5246, 120326, 13185, 9709, 120323, 120322, 12314, 65616, 5238, - 119333, 0, 119337, 5236, 40979, 0, 74201, 8286, 0, 3936, 119331, 11699, - 41347, 0, 13235, 8842, 41248, 0, 4379, 13239, 12692, 7969, 0, 7219, 0, 0, - 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, 0, 0, 42841, 13267, 0, 0, - 41775, 0, 0, 41773, 0, 10663, 0, 0, 0, 6151, 12110, 0, 65572, 119602, - 65250, 13265, 13264, 64518, 0, 6100, 0, 0, 5808, 65922, 0, 12967, 66041, - 9676, 4583, 0, 0, 68097, 64575, 0, 11965, 0, 119211, 0, 0, 0, 0, 68102, - 9698, 7814, 74476, 119651, 0, 0, 41921, 0, 9756, 6985, 119258, 0, 74219, - 0, 0, 0, 8012, 5674, 12353, 0, 12361, 5677, 42323, 0, 41925, 0, 41920, - 5673, 120534, 5676, 41923, 12694, 118978, 5672, 1294, 0, 0, 0, 42511, - 1727, 0, 0, 0, 0, 0, 74222, 8718, 3550, 736, 10268, 4505, 10316, 74090, - 5826, 74270, 5813, 0, 120712, 5841, 5837, 0, 0, 3105, 12829, 5838, 5796, - 0, 119592, 5793, 0, 5866, 5797, 41011, 5865, 120091, 7956, 598, 0, 64649, + 971, 13062, 0, 0, 65195, 10164, 0, 74428, 0, 78146, 0, 0, 0, 0, 10045, + 12882, 13275, 0, 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, 0, 369, 0, 41784, 0, 64163, 0, 0, 0, 65474, + 4796, 12292, 0, 65479, 0, 41781, 10486, 41480, 120511, 9899, 0, 0, 404, + 12821, 3741, 0, 5788, 8092, 68212, 41222, 1831, 66020, 0, 0, 4388, 0, + 746, 120784, 0, 0, 12018, 65294, 0, 0, 0, 0, 4422, 4708, 3799, 74292, + 119357, 0, 74430, 0, 11700, 4374, 0, 0, 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, 41171, 64172, + 13173, 4372, 119354, 0, 0, 0, 0, 0, 0, 12965, 384, 64512, 10404, 10340, + 119352, 1556, 5274, 13210, 0, 10017, 9733, 41787, 0, 126994, 41373, + 78039, 12303, 0, 13232, 13233, 349, 4863, 41371, 11656, 0, 120703, + 119883, 12861, 4398, 8543, 65618, 0, 1096, 0, 0, 42688, 12441, 12355, + 119348, 119347, 4318, 10452, 0, 8032, 13243, 13237, 12719, 0, 119101, 0, + 64884, 119872, 119345, 8597, 0, 0, 9864, 0, 120785, 119874, 0, 13195, + 41452, 64961, 7722, 0, 10459, 119878, 0, 119879, 66590, 0, 41533, 66337, + 0, 0, 0, 4965, 0, 917536, 73849, 0, 43638, 78537, 0, 6261, 119342, 43147, + 66570, 1957, 10420, 982, 2756, 13292, 13206, 0, 0, 2925, 73809, 13056, + 127559, 13212, 43238, 0, 13190, 13187, 0, 13198, 118793, 0, 5242, 119179, + 64476, 1694, 8216, 0, 6770, 43331, 0, 65620, 0, 43544, 0, 0, 41444, + 65621, 120325, 64799, 5246, 120326, 13185, 9709, 120323, 120322, 12314, + 65616, 5238, 119333, 0, 119337, 5236, 40979, 0, 74201, 8286, 0, 3936, + 119331, 11699, 41347, 127249, 13235, 8842, 41248, 0, 4379, 13239, 12692, + 7969, 127266, 7219, 127250, 0, 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, 0, 0, 42841, 13267, 0, 0, 41775, 0, 0, 41773, 0, 10663, 0, 0, 0, + 6151, 12110, 42673, 65572, 119602, 65250, 13265, 13264, 64518, 0, 6100, + 0, 0, 5808, 65922, 0, 12967, 66041, 5612, 4583, 0, 0, 68097, 64575, 0, + 11965, 0, 119211, 0, 69789, 0, 0, 68102, 9698, 7814, 74476, 119651, 0, 0, + 41921, 118858, 9756, 6985, 119258, 0, 74219, 0, 0, 118997, 8012, 5674, + 12353, 0, 12361, 5677, 5588, 0, 41925, 0, 41920, 5673, 120534, 5676, + 41923, 12694, 118978, 5672, 1294, 0, 78059, 0, 42511, 1727, 0, 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, 0, 0, 0, 0, 0, 847, 0, 9529, 0, - 66657, 6980, 0, 120035, 0, 0, 0, 120033, 0, 0, 0, 120039, 0, 0, 0, 9624, - 0, 0, 43190, 65463, 1554, 0, 42611, 42563, 0, 5651, 2929, 0, 43201, 0, - 19963, 5698, 0, 0, 0, 0, 5644, 10292, 65546, 120492, 68141, 8372, 0, - 65116, 0, 120022, 0, 10388, 42799, 0, 41013, 10568, 0, 0, 2869, 0, 41015, - 0, 2785, 4366, 0, 10954, 41802, 0, 42608, 194688, 9884, 4759, 0, 0, - 10266, 41359, 1170, 127017, 0, 73908, 1609, 902, 0, 63936, 0, 11661, - 8122, 5818, 0, 0, 3861, 9540, 11028, 2554, 5158, 5714, 127015, 0, 0, 807, - 43079, 0, 0, 976, 5511, 64553, 0, 42155, 0, 41356, 74110, 118801, 0, 0, - 8676, 0, 0, 11066, 451, 63941, 5798, 9349, 42018, 0, 0, 0, 43609, 194703, - 120553, 1440, 0, 0, 120016, 74283, 11005, 0, 66656, 66044, 0, 194698, 0, - 0, 0, 10094, 0, 11529, 10857, 120643, 66436, 6546, 93, 0, 0, 74440, 0, 0, - 8171, 0, 119097, 127065, 917543, 383, 10377, 41656, 0, 0, 0, 5187, 0, 0, - 11286, 0, 64217, 0, 5232, 0, 41009, 0, 41005, 0, 0, 0, 8292, 195074, - 4980, 8860, 73947, 10028, 66478, 7076, 13182, 194705, 0, 0, 10631, 66031, - 7972, 0, 0, 0, 7900, 0, 11309, 194711, 4198, 64211, 0, 0, 0, 0, 0, 0, - 12931, 0, 0, 74285, 10185, 0, 64366, 65156, 8814, 0, 74771, 0, 0, 12836, - 0, 0, 74342, 8593, 0, 0, 0, 13255, 0, 0, 7464, 0, 65865, 0, 194650, 0, 0, - 9342, 120464, 0, 64516, 0, 0, 10129, 41007, 0, 0, 40995, 12209, 41012, - 119136, 0, 0, 120633, 40992, 0, 0, 0, 43558, 5522, 0, 61, 0, 74105, 3633, - 0, 65162, 41234, 12089, 0, 9771, 0, 13251, 0, 0, 6262, 2784, 0, 0, 8126, - 66483, 0, 0, 441, 42621, 0, 0, 41002, 40999, 119623, 43266, 0, 0, 10890, - 74481, 65834, 8324, 119103, 64417, 74817, 0, 64737, 0, 0, 8930, 0, 74249, - 1193, 10056, 1800, 13253, 13252, 7829, 0, 0, 7743, 0, 0, 0, 0, 0, 9034, - 6039, 0, 10075, 0, 41018, 65683, 10338, 66469, 0, 0, 0, 42815, 0, 41966, - 0, 0, 0, 11792, 0, 0, 911, 7539, 0, 0, 120339, 65159, 64390, 0, 0, 5520, - 11662, 0, 65330, 73886, 0, 0, 12326, 0, 0, 42808, 0, 9348, 64901, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 5857, 65342, 0, 119120, 0, 8644, 0, 0, 0, 74296, - 41909, 0, 120332, 2791, 0, 1891, 0, 0, 41907, 66647, 0, 8761, 12942, - 5748, 0, 10773, 0, 0, 8796, 0, 6412, 120347, 8520, 13146, 0, 63931, 0, - 65902, 2882, 0, 0, 12843, 4520, 0, 0, 0, 0, 0, 73860, 0, 0, 64345, 0, 0, - 0, 0, 0, 0, 0, 917585, 65117, 0, 0, 10427, 0, 3844, 0, 9755, 1110, 6612, - 12222, 0, 0, 0, 0, 783, 194935, 0, 0, 0, 0, 65056, 3620, 0, 118945, 4556, - 0, 0, 194933, 74250, 0, 0, 10510, 4382, 66482, 0, 0, 0, 9177, 8902, 0, - 9839, 0, 12891, 0, 0, 63999, 2016, 41917, 9788, 63928, 0, 1862, 65800, - 9155, 66623, 9786, 65082, 41919, 8579, 41914, 7981, 0, 0, 4508, 64883, 0, - 0, 0, 0, 64592, 74276, 120080, 41780, 120079, 68181, 0, 0, 0, 0, 12147, - 9024, 66378, 66472, 0, 64289, 65289, 0, 0, 0, 64509, 0, 0, 0, 11051, 0, - 0, 11355, 65885, 0, 0, 41214, 0, 12299, 0, 7500, 4506, 7773, 0, 0, - 118912, 0, 0, 4040, 0, 6167, 0, 63922, 6594, 0, 0, 0, 3624, 43036, 0, - 64655, 63990, 19947, 63988, 41955, 0, 63993, 63992, 9611, 0, 0, 0, 7738, - 63986, 11446, 63984, 0, 3435, 119652, 0, 119108, 7029, 64258, 41292, - 118898, 12748, 43115, 9517, 11518, 0, 0, 0, 194777, 63956, 42458, 63954, - 63953, 63960, 9591, 63958, 10217, 118845, 11469, 0, 42306, 2723, 118947, - 0, 0, 0, 0, 0, 11397, 2880, 0, 0, 2872, 0, 0, 3498, 4378, 917539, 4270, - 0, 65551, 118928, 6633, 0, 0, 5230, 0, 0, 0, 0, 0, 8161, 393, 12013, 0, - 0, 0, 415, 63964, 63963, 42345, 0, 5183, 1877, 42498, 0, 2927, 0, 63961, - 4472, 0, 0, 0, 0, 917936, 42340, 4756, 0, 7081, 10730, 7691, 0, 63830, - 119625, 194945, 42103, 8628, 9813, 0, 42453, 1604, 9565, 10539, 0, 65764, - 41415, 65767, 0, 8457, 42301, 11372, 64873, 11992, 0, 0, 63980, 11801, - 3622, 0, 64336, 12017, 10463, 63981, 4967, 64189, 1966, 63976, 0, 0, 0, - 0, 63971, 4347, 4416, 42098, 11009, 10694, 63973, 402, 0, 13147, 0, - 42100, 64646, 13228, 0, 41875, 3515, 74252, 11805, 0, 11302, 6259, 0, 0, - 0, 0, 0, 0, 0, 74425, 11299, 1561, 0, 0, 64942, 0, 194733, 0, 194732, 0, - 74301, 0, 11280, 0, 0, 74060, 0, 0, 119664, 5145, 12486, 65018, 66516, - 5409, 0, 194669, 64347, 5399, 9685, 74089, 7952, 5401, 0, 66616, 0, 0, 0, - 5405, 917555, 64866, 0, 0, 0, 0, 74248, 11330, 194723, 64690, 3254, 0, 0, - 0, 42390, 0, 194725, 0, 65077, 0, 0, 3355, 9508, 9867, 5723, 11520, 5611, - 0, 3377, 0, 0, 0, 0, 0, 0, 0, 119119, 0, 0, 119068, 0, 0, 1379, 246, 0, - 0, 3788, 0, 11041, 0, 66304, 0, 0, 8917, 42403, 301, 0, 0, 0, 0, 0, 0, - 10656, 0, 65214, 119242, 42567, 0, 13163, 0, 120831, 74597, 3182, 0, 0, - 0, 0, 65889, 42169, 4755, 74244, 0, 11443, 0, 66326, 74598, 608, 600, 0, - 1219, 3934, 64206, 11483, 74510, 0, 74485, 42442, 65470, 0, 64202, 13160, - 7759, 42482, 485, 0, 0, 9828, 0, 0, 42280, 0, 9351, 7778, 64379, 7496, - 42431, 6916, 1208, 0, 119631, 11002, 42470, 0, 0, 0, 0, 74041, 0, 0, - 43539, 5411, 0, 0, 0, 0, 9150, 0, 42393, 13086, 1310, 194687, 9337, - 12052, 10643, 64586, 0, 194684, 2546, 194683, 213, 118852, 65611, 0, 0, - 194756, 74310, 6554, 0, 11914, 0, 0, 0, 0, 0, 0, 194681, 118826, 2713, 0, - 9650, 43330, 0, 194675, 1406, 0, 0, 0, 0, 194678, 4143, 194677, 0, 65748, - 4141, 9682, 65287, 1508, 0, 8779, 10569, 8725, 13299, 66638, 0, 42263, - 4145, 0, 65751, 66613, 0, 65738, 73729, 9185, 9550, 0, 0, 0, 0, 0, 65736, - 41951, 64816, 65756, 0, 12955, 10596, 2888, 0, 0, 0, 9657, 9019, 194766, - 0, 2878, 5390, 0, 194961, 0, 0, 0, 7501, 13203, 0, 10429, 10365, 0, 0, - 41946, 7503, 5235, 803, 0, 0, 0, 8986, 0, 10632, 11934, 11452, 1332, 0, - 0, 0, 0, 917545, 1791, 5191, 9288, 64822, 2892, 0, 67849, 555, 0, 0, - 66646, 0, 119002, 13151, 74512, 7289, 74055, 0, 0, 64162, 5858, 41927, - 10582, 0, 1784, 1361, 195047, 0, 7905, 0, 64868, 0, 13158, 0, 7211, 0, - 9371, 0, 0, 0, 1625, 0, 0, 1342, 0, 64171, 0, 10903, 0, 0, 0, 0, 0, 4482, - 41606, 0, 0, 0, 0, 64381, 0, 0, 0, 42245, 0, 41972, 0, 444, 0, 9127, - 66687, 66619, 0, 194972, 0, 11349, 40991, 0, 0, 119599, 120830, 0, 1197, - 0, 1149, 194970, 0, 0, 40990, 0, 0, 3492, 0, 0, 0, 0, 0, 12838, 0, 19948, - 0, 3099, 0, 0, 41087, 0, 0, 0, 119059, 12036, 0, 0, 0, 8152, 0, 64428, - 12227, 0, 0, 12828, 0, 0, 0, 0, 0, 0, 10386, 119574, 0, 0, 0, 0, 68154, - 0, 1743, 0, 0, 0, 65186, 0, 0, 9606, 0, 0, 0, 0, 0, 0, 0, 0, 194967, 0, - 0, 3395, 9362, 10878, 0, 0, 0, 64830, 0, 0, 41091, 3426, 1344, 8870, 0, - 0, 4735, 0, 6119, 12822, 0, 0, 0, 74818, 0, 0, 42637, 41080, 0, 12039, - 10559, 0, 118892, 0, 9472, 0, 11929, 0, 7170, 9596, 6130, 0, 0, 11579, 0, - 0, 194740, 0, 0, 66699, 0, 1004, 0, 194737, 0, 66008, 12627, 0, 0, 0, 0, - 0, 11300, 43304, 9686, 5890, 11776, 7558, 0, 65627, 0, 10718, 13154, - 3461, 9139, 0, 0, 0, 0, 0, 73877, 65628, 0, 0, 0, 41708, 12860, 41703, - 12069, 10838, 5403, 10352, 73917, 10061, 0, 0, 5140, 209, 0, 41704, 0, - 43078, 0, 0, 0, 10899, 65469, 0, 0, 0, 2410, 993, 0, 120589, 120689, 0, - 0, 0, 7232, 0, 119253, 0, 0, 74462, 0, 10489, 42166, 0, 10659, 3600, 0, - 4224, 1336, 41518, 0, 0, 0, 0, 41139, 64820, 0, 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, 0, 0, 0, 0, 7209, 8223, 2409, 7799, 0, 74424, - 0, 0, 4731, 0, 66629, 0, 0, 1255, 4149, 9247, 0, 9913, 0, 0, 0, 0, 65101, - 0, 11694, 0, 11690, 5835, 0, 66625, 10842, 41354, 42123, 43097, 11688, - 66634, 1094, 194, 64692, 0, 8180, 0, 0, 73872, 73865, 0, 6114, 10898, - 43072, 0, 0, 0, 0, 0, 10695, 0, 7540, 0, 881, 7857, 6067, 65164, 0, 0, 0, - 13311, 0, 41857, 64321, 8359, 0, 12689, 0, 194594, 0, 0, 0, 68183, 0, 0, - 1287, 5436, 0, 0, 74142, 127013, 74152, 119078, 6051, 10497, 0, 8985, - 12109, 0, 0, 0, 0, 0, 3652, 10537, 0, 1276, 0, 6549, 279, 0, 0, 0, 0, - 1489, 0, 0, 0, 3899, 1007, 42124, 0, 42122, 0, 0, 0, 11985, 1345, 127006, - 0, 0, 8956, 43083, 0, 42138, 0, 0, 12151, 0, 0, 0, 6285, 0, 0, 0, 74194, - 492, 8685, 0, 0, 0, 0, 0, 2582, 11470, 64538, 7444, 0, 0, 41550, 0, - 73837, 0, 2527, 119824, 197, 2799, 0, 0, 120276, 0, 0, 66515, 767, 5524, - 7028, 0, 0, 119827, 0, 0, 0, 0, 0, 1799, 120497, 6971, 74336, 0, 0, - 65340, 118979, 0, 2434, 0, 0, 120579, 0, 4631, 0, 0, 6407, 0, 19931, - 43214, 0, 7570, 0, 3192, 0, 8414, 0, 0, 0, 0, 0, 9164, 66612, 0, 3171, - 6623, 4961, 0, 886, 0, 8654, 0, 9993, 74390, 64603, 0, 0, 9599, 0, 43084, - 0, 0, 0, 2399, 0, 8994, 10944, 41208, 0, 41168, 8178, 0, 3367, 195008, - 42510, 0, 0, 7789, 0, 1947, 0, 0, 0, 42759, 11068, 1705, 9331, 0, 74798, - 9181, 0, 0, 8017, 0, 65096, 66720, 0, 0, 0, 4909, 12126, 0, 120696, 4904, - 0, 195012, 1365, 9253, 42757, 0, 7462, 0, 0, 0, 0, 119587, 64415, 0, 0, - 5398, 0, 195014, 0, 0, 0, 0, 0, 0, 9476, 0, 0, 12763, 0, 3629, 0, 13005, - 0, 3628, 0, 0, 0, 3469, 42107, 42116, 917578, 64809, 2928, 4905, 9853, - 851, 9040, 0, 64665, 43086, 9114, 0, 42583, 9315, 4822, 4906, 3852, 2847, - 0, 3236, 11317, 1251, 7777, 41852, 11410, 10964, 0, 43222, 12646, 120269, - 10259, 9865, 65821, 0, 6018, 0, 0, 12276, 0, 0, 0, 0, 119613, 0, 0, - 10467, 0, 2443, 10918, 0, 0, 1001, 9241, 1927, 0, 0, 73987, 0, 0, 0, - 118828, 0, 65678, 12867, 0, 8260, 0, 7519, 118794, 12274, 8904, 518, - 65857, 0, 0, 13204, 4387, 857, 0, 65369, 0, 119583, 43125, 120592, 0, 0, - 0, 0, 5136, 1968, 0, 195023, 1337, 64967, 1629, 0, 796, 66506, 0, 74123, - 0, 0, 42314, 195021, 0, 74403, 6120, 478, 65151, 68128, 0, 43082, 6016, - 0, 42284, 0, 4276, 1206, 3619, 41638, 0, 3843, 12011, 8853, 3361, 0, 490, - 10715, 7578, 0, 0, 65350, 10530, 12348, 8653, 74314, 42435, 6154, 9551, - 65354, 0, 784, 42397, 334, 0, 42416, 65356, 65273, 0, 0, 7025, 10364, 0, - 778, 41626, 42455, 7989, 74063, 3227, 0, 0, 73983, 2915, 41698, 41022, - 41702, 10309, 127035, 0, 0, 6975, 0, 5415, 12176, 0, 0, 3462, 65215, - 42629, 0, 73784, 0, 0, 9759, 0, 0, 0, 8114, 0, 0, 0, 0, 8710, 42495, - 118956, 0, 4051, 10460, 74097, 118917, 1356, 12161, 0, 0, 0, 1619, 9703, + 66657, 6980, 0, 120035, 78484, 0, 0, 120033, 78486, 0, 0, 120039, 42683, + 0, 0, 9624, 0, 0, 43190, 65463, 1554, 0, 42611, 42563, 0, 5651, 2929, + 6792, 43201, 0, 19963, 5698, 0, 0, 0, 0, 5644, 10292, 65546, 69821, + 68141, 8372, 0, 65116, 0, 120022, 0, 10388, 42799, 0, 41013, 10568, 0, 0, + 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, 0, 11661, 8122, 5818, 0, 0, 3861, 9540, 11028, 2554, 5158, 5714, + 127015, 0, 0, 807, 43079, 0, 78475, 976, 5511, 64553, 0, 42155, 0, 41356, + 74110, 118801, 0, 0, 8676, 0, 0, 11066, 451, 63941, 5798, 9349, 42018, 0, + 0, 0, 43609, 194703, 120553, 1440, 0, 194701, 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, 10377, 41656, 0, 0, 0, 5187, 0, 127277, 11286, 68620, 64217, 0, + 5232, 0, 41009, 0, 41005, 0, 0, 0, 8292, 195074, 4980, 8860, 73947, + 10028, 66478, 7076, 13182, 194705, 0, 0, 10631, 66031, 7972, 0, 78785, 0, + 7900, 0, 11309, 78319, 4198, 42725, 0, 67656, 78819, 0, 0, 0, 12931, 0, + 42684, 74285, 2088, 0, 64366, 65156, 8814, 42238, 74771, 0, 0, 12836, 0, + 0, 74342, 8593, 0, 0, 68445, 13255, 0, 0, 7464, 0, 65865, 0, 194650, 0, + 0, 9342, 120464, 0, 64516, 0, 78792, 10129, 41007, 74375, 0, 40995, + 12209, 41012, 119136, 0, 0, 120633, 40992, 0, 0, 68653, 43558, 5522, 0, + 61, 0, 74105, 3633, 0, 65162, 41234, 12089, 78281, 9771, 0, 13251, 0, 0, + 6262, 2784, 42743, 0, 8126, 66483, 0, 0, 441, 42621, 0, 0, 41002, 40999, + 119623, 43266, 0, 0, 10890, 74481, 65834, 8324, 119103, 64417, 74817, 0, + 64737, 0, 0, 8930, 66678, 74249, 1193, 10056, 1800, 13253, 13252, 7829, + 0, 0, 7743, 0, 0, 77904, 0, 77905, 9034, 6039, 0, 10075, 0, 41018, 65683, + 10338, 66469, 0, 0, 0, 42815, 0, 41966, 0, 0, 0, 11792, 43064, 41025, + 911, 7539, 0, 0, 120339, 65159, 64390, 0, 0, 5520, 11662, 0, 65330, + 42812, 0, 0, 12326, 0, 0, 42808, 0, 9348, 64901, 0, 0, 0, 0, 0, 0, + 917584, 43702, 0, 5857, 65342, 0, 119120, 120079, 8644, 0, 0, 0, 74296, + 41909, 0, 120332, 2791, 0, 1891, 69824, 0, 41907, 66647, 0, 8761, 12942, + 5748, 0, 10773, 0, 0, 8796, 78149, 6412, 2061, 8520, 13146, 0, 63931, 0, + 65902, 2882, 0, 0, 12843, 4520, 120345, 0, 0, 0, 0, 73860, 0, 0, 64345, + 0, 0, 0, 194940, 0, 0, 43679, 917585, 65117, 194939, 0, 10427, 0, 3844, + 0, 9755, 1110, 6612, 12222, 0, 194934, 0, 0, 783, 194935, 0, 0, 0, + 194720, 65056, 3620, 0, 68378, 4556, 0, 0, 194933, 74250, 0, 67657, + 10510, 4382, 66482, 0, 0, 0, 9177, 8902, 0, 9839, 0, 12891, 0, 0, 63999, + 2016, 41917, 9788, 63928, 0, 1862, 65800, 9155, 66623, 9786, 65082, + 41919, 8579, 41914, 7981, 0, 0, 4508, 64883, 0, 0, 0, 0, 64592, 74276, + 120080, 6784, 78788, 68181, 0, 0, 0, 127534, 12147, 9024, 66378, 66472, + 0, 64289, 65289, 78151, 66658, 194929, 64509, 78152, 0, 0, 11051, 0, 0, + 11355, 65885, 0, 0, 41214, 0, 12299, 0, 7500, 4506, 7773, 0, 0, 9963, + 68649, 0, 4040, 0, 6167, 0, 63922, 6594, 0, 0, 0, 3624, 43036, 0, 6387, + 63990, 19947, 63988, 41955, 0, 63993, 10440, 9611, 0, 6803, 0, 7738, + 63986, 11446, 63984, 120331, 3435, 78164, 0, 119108, 7029, 64258, 41292, + 118898, 12748, 42742, 9517, 11518, 0, 78790, 0, 194777, 63956, 42458, + 63954, 63953, 63960, 9591, 4516, 10217, 68370, 11469, 0, 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, 0, 415, 63964, 63963, 42345, 0, 5183, 1877, 42498, 0, 2927, + 0, 63961, 4472, 0, 0, 78159, 0, 917936, 42340, 4756, 0, 7081, 10730, + 7691, 10331, 63830, 119625, 194945, 42103, 8628, 9813, 0, 42453, 1604, + 9565, 10539, 0, 65764, 41415, 65767, 0, 8457, 42301, 11372, 64873, 11992, + 0, 0, 63980, 11801, 3622, 0, 64336, 12017, 10463, 63981, 4967, 64189, + 1966, 43628, 0, 0, 0, 0, 63971, 4347, 4416, 42098, 11009, 10694, 63973, + 402, 0, 13147, 0, 42100, 64646, 13228, 0, 41875, 3515, 74252, 11805, 0, + 11302, 6259, 43395, 0, 0, 194670, 0, 0, 0, 74425, 11299, 1561, 0, 0, + 64942, 0, 194733, 0, 194732, 0, 74301, 0, 11280, 0, 69784, 74060, 0, 0, + 119664, 5145, 12486, 65018, 66516, 5409, 0, 194669, 7402, 5399, 9685, + 74089, 7952, 5401, 0, 66616, 68421, 0, 0, 5405, 917555, 64866, 0, 0, 0, + 78784, 74248, 11330, 194723, 64690, 3254, 0, 0, 0, 42390, 43678, 194725, + 0, 65077, 0, 6388, 3355, 9508, 9867, 5723, 11520, 5611, 0, 3377, 0, 0, 0, + 0, 78228, 0, 0, 42691, 917886, 0, 74767, 0, 0, 1379, 246, 0, 0, 3788, 0, + 11041, 0, 66304, 0, 0, 8917, 42403, 301, 0, 0, 0, 0, 0, 0, 10656, 0, + 65214, 119242, 42567, 0, 13163, 0, 120831, 74597, 3182, 0, 0, 0, 65034, + 65889, 42169, 4755, 74244, 0, 11443, 0, 66319, 74598, 608, 600, 0, 1219, + 3934, 64206, 11483, 74510, 0, 74485, 42442, 65470, 0, 64202, 13160, 7759, + 42482, 485, 0, 0, 9828, 0, 0, 42280, 0, 9351, 7778, 64379, 7496, 42431, + 6916, 1208, 0, 119631, 11002, 42470, 0, 118946, 0, 0, 74041, 0, 0, 43539, + 5411, 42196, 0, 0, 0, 9150, 0, 42393, 13086, 1310, 194687, 9337, 12052, + 10643, 55271, 0, 194684, 2546, 194683, 213, 118852, 65611, 0, 0, 194756, + 74310, 6554, 0, 11914, 0, 0, 0, 0, 0, 0, 194681, 118826, 2713, 0, 9650, + 43330, 0, 194675, 1406, 0, 0, 0, 0, 68223, 4143, 194677, 0, 65748, 4141, + 9682, 65287, 1508, 194963, 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, 0, 12955, 10596, 2888, 0, 0, 0, 9657, + 9019, 194766, 0, 2878, 5390, 0, 194961, 0, 68679, 0, 7501, 6328, 0, + 10429, 10365, 0, 0, 41946, 7503, 5235, 803, 68381, 0, 0, 8986, 0, 10632, + 11934, 11452, 1332, 0, 0, 0, 0, 118887, 1791, 5191, 9288, 64822, 2892, 0, + 43394, 555, 0, 0, 66646, 0, 119002, 13151, 74512, 7289, 74055, 0, 8854, + 64162, 5858, 41927, 10582, 0, 1784, 1361, 195047, 0, 7905, 0, 64868, 0, + 13158, 0, 7211, 0, 9371, 73973, 0, 6828, 1625, 0, 0, 1342, 68440, 64171, + 0, 10903, 0, 0, 0, 0, 0, 4482, 41606, 0, 0, 0, 0, 64381, 0, 0, 0, 42245, + 0, 41972, 0, 444, 0, 9127, 66687, 66619, 0, 78025, 0, 11349, 40991, 0, 0, + 119599, 120830, 0, 1197, 0, 1149, 194970, 0, 0, 40990, 0, 0, 3492, 0, 0, + 0, 0, 0, 12838, 0, 19948, 0, 3099, 0, 0, 41087, 0, 0, 0, 119059, 12036, + 0, 0, 0, 8152, 0, 64428, 12227, 0, 0, 12828, 127511, 0, 0, 120708, 0, 0, + 10386, 119574, 0, 0, 0, 0, 68154, 0, 1743, 0, 0, 0, 65186, 0, 0, 9606, 0, + 0, 0, 0, 0, 0, 0, 0, 194967, 0, 0, 3395, 9362, 10878, 0, 0, 78362, 64830, + 0, 0, 41091, 3426, 1344, 8870, 0, 0, 4735, 0, 6119, 12822, 42699, 0, 0, + 74818, 0, 0, 42637, 41080, 0, 12039, 10559, 0, 118892, 0, 9472, 0, 11929, + 0, 7170, 9596, 6130, 0, 43629, 11579, 194741, 0, 194740, 0, 0, 66699, 0, + 1004, 0, 194737, 43234, 66008, 12627, 0, 68414, 0, 43619, 43382, 11300, + 43304, 9686, 5890, 11776, 7558, 0, 65627, 0, 10718, 13154, 3461, 9139, 0, + 0, 0, 0, 65365, 73877, 65628, 78019, 0, 0, 41708, 12860, 41703, 12069, + 10838, 5403, 10352, 73917, 10061, 43237, 0, 5140, 209, 0, 41704, 41056, + 43078, 0, 0, 0, 10899, 65469, 0, 0, 0, 2410, 993, 0, 120589, 120689, + 78693, 0, 0, 7232, 0, 119253, 0, 0, 74462, 2066, 10489, 42166, 43463, + 10659, 3600, 0, 4224, 1336, 41518, 0, 0, 0, 0, 41139, 64820, 0, 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, 0, 0, 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, 0, 11690, 5835, 0, 66625, + 10842, 41354, 42123, 43097, 11688, 66634, 1094, 194, 64692, 0, 8180, 0, + 0, 9972, 73865, 4519, 6114, 10898, 43072, 0, 0, 0, 0, 0, 10695, 0, 7540, + 0, 881, 7857, 6067, 65164, 0, 0, 0, 13311, 68403, 41857, 64321, 8359, 0, + 12689, 0, 194594, 0, 0, 0, 68183, 0, 0, 1287, 5436, 0, 0, 74142, 127013, + 74152, 119078, 6051, 10497, 0, 8985, 12109, 0, 0, 0, 0, 0, 3652, 10537, + 0, 1276, 120440, 6549, 279, 73745, 0, 0, 0, 1489, 0, 0, 0, 3899, 1007, + 42124, 0, 42122, 0, 0, 0, 11985, 1345, 78600, 0, 0, 8956, 43083, 119830, + 42138, 78610, 0, 12151, 78608, 78604, 78605, 6285, 78603, 78612, 78613, + 74194, 492, 8685, 0, 0, 0, 78622, 43712, 2582, 11470, 64538, 7444, 78615, + 78616, 41550, 0, 73837, 119823, 2527, 119824, 197, 2799, 0, 41944, + 120276, 9933, 0, 66515, 767, 5524, 7028, 0, 0, 119827, 119817, 119828, + 78633, 10896, 0, 1799, 120497, 6971, 74336, 0, 0, 65340, 118979, 41551, + 2434, 0, 0, 120579, 0, 4631, 0, 0, 6407, 0, 6338, 43214, 0, 7570, 0, + 3192, 0, 8414, 0, 0, 0, 0, 0, 9164, 66612, 0, 3171, 6623, 4961, 68396, + 886, 55216, 8654, 78832, 9993, 74390, 64603, 0, 69241, 9599, 78629, + 43084, 78627, 78628, 78625, 2399, 0, 8994, 10944, 41208, 0, 41168, 8178, + 0, 3367, 195008, 42510, 78641, 78636, 6804, 78634, 1947, 0, 0, 0, 42759, + 11068, 1705, 9331, 0, 74798, 9181, 65359, 0, 8017, 0, 65096, 66720, 0, + 43475, 0, 4909, 12126, 0, 120696, 4904, 0, 195012, 1365, 9253, 42757, + 43436, 7462, 0, 0, 0, 0, 119587, 64415, 0, 0, 5398, 0, 195014, 0, 0, 0, + 119015, 0, 0, 9476, 0, 0, 12763, 0, 3629, 0, 13005, 0, 3628, 0, 0, 0, + 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, 119814, 0, 12276, 0, 68372, 0, 0, 119244, 0, 0, 10467, 0, + 2443, 10918, 78217, 119825, 1001, 9241, 1927, 0, 0, 73987, 0, 0, 0, + 118828, 127504, 65678, 12867, 0, 8260, 77945, 7519, 11505, 12274, 8904, + 518, 65857, 0, 0, 13204, 4387, 857, 0, 65369, 0, 119583, 43125, 120592, + 0, 0, 0, 0, 5136, 1968, 0, 195023, 1337, 64967, 1629, 0, 796, 66506, 0, + 74123, 12877, 0, 42314, 43388, 0, 74403, 6120, 478, 65151, 68128, 0, + 43082, 6016, 0, 42284, 0, 4276, 1206, 3619, 41638, 0, 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, 127265, 4442, 10364, 0, 778, 41626, 42455, 7989, 74063, 3227, 0, + 127275, 73983, 2915, 11502, 41022, 41702, 10309, 127035, 78320, 0, 6975, + 0, 5415, 12176, 0, 0, 3462, 65215, 42629, 78691, 73784, 0, 0, 9759, 0, + 78324, 127254, 8114, 78698, 78697, 78696, 78695, 8710, 42495, 118956, 0, + 4051, 10460, 43364, 118917, 1356, 12161, 42713, 0, 127268, 1619, 9703, 43152, 42489, 42112, 0, 1875, 10808, 42109, 120284, 41860, 64862, 13305, - 64907, 5289, 13144, 0, 0, 5575, 9675, 0, 5940, 226, 2649, 74493, 0, 0, 0, - 3382, 42449, 6498, 1658, 11936, 0, 0, 11269, 0, 73759, 43100, 74449, - 65508, 0, 0, 0, 8935, 917985, 0, 0, 0, 616, 0, 65178, 4684, 0, 119653, 0, - 0, 0, 6048, 74460, 42110, 73965, 10870, 8557, 11054, 0, 0, 9681, 4475, 0, - 0, 0, 0, 120731, 6035, 0, 7651, 10296, 0, 0, 0, 0, 0, 118966, 74144, - 40997, 0, 10392, 10328, 40998, 0, 74488, 0, 9800, 8979, 0, 119131, 41000, - 0, 119239, 6487, 10977, 0, 10344, 0, 65299, 5394, 0, 0, 10220, 66505, - 41200, 0, 4425, 0, 0, 0, 43074, 73799, 0, 0, 0, 12173, 0, 0, 0, 65338, 0, - 0, 119582, 4474, 0, 43093, 0, 1587, 0, 0, 64475, 0, 1369, 0, 0, 0, 0, - 4560, 0, 0, 0, 0, 64948, 4430, 74347, 42601, 4514, 0, 0, 8194, 65462, - 10626, 10965, 0, 8893, 0, 12542, 0, 65341, 0, 65829, 7925, 0, 10475, 0, - 0, 1352, 11069, 7707, 0, 0, 65279, 127102, 127101, 127100, 65605, 6040, - 127097, 10440, 0, 9336, 0, 0, 8899, 7798, 64474, 64259, 0, 65188, 7820, - 43018, 0, 0, 7746, 1492, 0, 10884, 0, 0, 5127, 11285, 42501, 5495, 4273, - 43095, 41426, 10849, 5730, 2999, 0, 120720, 74304, 371, 64373, 6023, 169, - 5497, 11708, 0, 0, 0, 0, 8224, 0, 8938, 6043, 12738, 0, 0, 5321, 0, 0, 0, - 2589, 74332, 1689, 7802, 4683, 74318, 0, 120296, 66704, 0, 0, 0, 0, - 74513, 6049, 0, 4027, 834, 118962, 1803, 0, 1503, 0, 0, 0, 5731, 1381, - 2387, 0, 0, 8289, 64525, 65817, 2881, 65514, 0, 9601, 2879, 9668, 9766, - 0, 5729, 0, 74410, 6036, 64881, 4026, 9361, 127091, 2887, 0, 3526, 6298, - 0, 0, 0, 0, 0, 8572, 6021, 0, 0, 0, 43155, 0, 0, 3146, 10959, 0, 0, 0, - 10981, 166, 0, 8635, 0, 10623, 408, 0, 0, 13298, 0, 7426, 41641, 12717, - 0, 7607, 10639, 66713, 0, 0, 41643, 74134, 0, 8713, 41640, 0, 41645, - 66712, 6645, 646, 66726, 66711, 42129, 0, 0, 3472, 8697, 0, 0, 0, 0, 0, - 0, 5809, 1950, 119356, 0, 74572, 0, 42136, 0, 0, 0, 0, 3247, 119854, - 65017, 0, 0, 66668, 0, 0, 10983, 0, 0, 0, 41567, 0, 0, 0, 0, 0, 0, 0, - 8285, 0, 4509, 0, 66471, 12216, 0, 40988, 0, 0, 41727, 0, 0, 2396, 0, 0, - 0, 0, 64940, 0, 3886, 0, 42457, 0, 0, 996, 0, 917571, 4249, 0, 917594, - 11707, 8222, 0, 7939, 0, 917574, 917582, 917592, 917569, 8534, 0, 40983, - 0, 0, 0, 7201, 12561, 0, 42371, 12558, 0, 0, 10052, 40982, 0, 0, 1488, 0, - 0, 0, 917559, 0, 0, 1563, 0, 9619, 0, 0, 0, 0, 0, 5803, 7797, 6070, - 10006, 0, 2922, 6082, 0, 65009, 0, 12567, 0, 0, 0, 0, 0, 3607, 65863, - 10046, 9612, 42153, 8218, 9485, 0, 2032, 0, 0, 0, 0, 0, 0, 43085, 6057, - 508, 0, 0, 120265, 0, 0, 0, 0, 638, 6083, 119072, 0, 0, 2305, 0, 0, 0, - 6056, 6659, 0, 0, 6085, 0, 0, 3915, 41634, 0, 41639, 63912, 11941, 0, - 4028, 1787, 42180, 43096, 0, 3249, 1768, 0, 12328, 501, 127074, 10601, 0, - 583, 0, 41977, 0, 66004, 119350, 6505, 74010, 0, 13064, 0, 120810, 6500, - 5526, 65049, 0, 74531, 0, 0, 12745, 9678, 0, 120587, 9869, 0, 1771, 0, - 8936, 0, 0, 4208, 0, 119115, 0, 0, 0, 74101, 0, 11762, 0, 0, 0, 0, 66475, - 0, 5027, 0, 0, 0, 5069, 73862, 5028, 9897, 0, 73739, 5026, 0, 0, 0, 0, - 8931, 0, 1415, 8866, 41901, 74790, 0, 119361, 0, 43106, 5029, 119360, - 1580, 3598, 0, 41070, 0, 0, 3440, 119359, 1562, 0, 917827, 119358, 1716, - 0, 10600, 0, 620, 41001, 6028, 0, 42892, 0, 74822, 5024, 120829, 41003, - 0, 5025, 0, 0, 0, 119328, 0, 65557, 0, 0, 0, 11599, 0, 11602, 6243, - 11574, 11581, 11597, 11598, 6253, 6105, 11584, 74195, 11569, 65275, 8906, - 127096, 66491, 2636, 0, 10815, 11619, 0, 41540, 7815, 11616, 6979, 12080, - 7721, 11604, 7869, 1592, 0, 42152, 0, 41048, 0, 829, 0, 0, 19950, 0, 0, - 6616, 0, 118875, 10953, 391, 0, 0, 482, 42296, 11588, 0, 43606, 0, 0, - 66370, 0, 42335, 0, 0, 0, 7538, 5315, 0, 42491, 0, 42061, 0, 4576, 0, 0, - 120241, 4277, 0, 4039, 64472, 42338, 368, 42058, 3960, 11043, 11337, - 120247, 917820, 63989, 3958, 12132, 1849, 0, 9921, 42451, 917818, 41147, - 42064, 11959, 42404, 41160, 0, 3618, 0, 0, 43300, 5156, 0, 0, 929, 0, - 917822, 42437, 1555, 0, 8691, 66435, 0, 41662, 0, 0, 0, 0, 0, 4578, - 64513, 41664, 0, 42578, 0, 41661, 0, 43305, 9356, 0, 0, 0, 1286, 10166, - 0, 0, 64707, 0, 42476, 7730, 0, 0, 42483, 0, 0, 42324, 42291, 10020, - 43359, 0, 6641, 525, 41627, 0, 8763, 0, 41628, 533, 11931, 65225, 8321, - 42504, 42581, 0, 6915, 42310, 4377, 8559, 0, 120234, 0, 13193, 64350, - 11666, 8679, 41924, 1576, 7735, 0, 0, 73840, 0, 11374, 0, 10889, 917909, - 7757, 42462, 120226, 126994, 66493, 2718, 4168, 73842, 13308, 120112, 0, - 1179, 4440, 0, 0, 363, 11015, 0, 0, 64296, 127090, 66692, 120826, 0, - 66492, 6593, 64625, 41963, 0, 119329, 0, 10013, 0, 0, 127095, 9492, - 11782, 64382, 12833, 0, 0, 1297, 41630, 630, 127094, 0, 0, 0, 1043, 0, 0, - 10090, 0, 0, 313, 917563, 41881, 0, 42311, 7445, 0, 5750, 10759, 9419, 0, - 9405, 11268, 0, 9398, 8526, 9399, 9422, 0, 66495, 0, 0, 0, 41718, 10707, - 1603, 0, 0, 0, 631, 0, 0, 13161, 65272, 0, 10546, 74210, 0, 11600, 0, - 2797, 73821, 42427, 306, 714, 3058, 42381, 120036, 127080, 12351, 42395, - 0, 11607, 0, 42282, 0, 0, 9157, 73765, 66364, 42433, 0, 7603, 12803, 180, - 42141, 0, 120612, 66494, 12674, 8244, 362, 0, 0, 8037, 917804, 11535, 0, - 74845, 5185, 66696, 5521, 10334, 5519, 0, 10302, 0, 10104, 1027, 5181, 0, - 0, 10523, 1446, 42320, 41646, 991, 5189, 42472, 41647, 120105, 1722, - 5581, 0, 3405, 0, 194644, 5523, 0, 42620, 0, 0, 9549, 0, 10549, 0, 9661, - 66486, 0, 120537, 120026, 0, 0, 0, 0, 41991, 0, 0, 7630, 9846, 7684, - 10350, 0, 1174, 0, 0, 0, 0, 66485, 0, 42277, 0, 42456, 65667, 0, 12330, - 0, 0, 42417, 42383, 0, 41344, 6293, 0, 66252, 0, 74443, 0, 10209, 8313, - 4195, 0, 9010, 66690, 0, 0, 64894, 0, 65871, 0, 1736, 0, 3901, 12228, - 120151, 65200, 3383, 10446, 0, 693, 9130, 314, 64149, 42420, 11949, 0, 0, - 11026, 0, 5332, 6940, 64154, 12635, 127007, 120628, 1751, 273, 8165, - 13166, 120763, 0, 0, 12824, 0, 4528, 5320, 6301, 0, 6133, 9339, 9463, - 42346, 10922, 64560, 3757, 0, 0, 0, 65869, 73760, 2569, 0, 2326, 65740, - 2565, 42459, 7596, 7921, 0, 74095, 0, 41848, 2567, 66006, 0, 4044, 0, 0, - 12233, 0, 1023, 474, 0, 119818, 0, 0, 42487, 65556, 0, 0, 42295, 0, 0, 0, - 0, 9835, 66499, 0, 0, 12275, 10895, 0, 274, 0, 1858, 0, 0, 0, 10118, - 3133, 0, 73795, 0, 9610, 8068, 8197, 0, 699, 0, 41665, 5868, 0, 0, 42182, - 7581, 19940, 0, 41667, 0, 0, 1923, 65583, 65802, 0, 64597, 0, 119184, 0, - 0, 6464, 7036, 2996, 1937, 0, 0, 41835, 4047, 41842, 0, 65217, 0, 0, - 11017, 0, 0, 293, 0, 0, 64791, 41827, 42466, 65416, 10579, 8560, 0, - 65413, 118835, 4803, 12964, 1739, 1941, 3900, 0, 1713, 0, 0, 73957, + 64907, 5289, 13144, 0, 0, 5575, 9675, 0, 5940, 226, 2649, 6336, 0, 0, + 43236, 3382, 42449, 6498, 1658, 11936, 78232, 0, 11269, 10151, 73759, + 43100, 74449, 65508, 0, 0, 0, 8935, 917985, 0, 0, 0, 616, 74753, 65178, + 4684, 78701, 119653, 0, 0, 0, 6048, 74460, 42110, 73965, 10870, 8557, + 11054, 68664, 119049, 9681, 4475, 0, 41142, 2100, 0, 120731, 6035, 0, + 7651, 10296, 0, 0, 0, 917987, 0, 118966, 74144, 40997, 0, 10392, 10328, + 40998, 43462, 74488, 0, 9800, 8979, 0, 119131, 41000, 0, 119239, 6487, + 10977, 0, 10344, 0, 65299, 5394, 43246, 78243, 10220, 66505, 41200, 0, + 4425, 0, 0, 0, 43074, 73799, 0, 78147, 0, 12173, 78545, 0, 0, 65338, 0, + 0, 119582, 4474, 0, 43093, 0, 1587, 0, 127372, 64475, 0, 1369, 0, 78251, + 7927, 0, 4560, 0, 0, 0, 0, 64948, 4430, 74347, 42601, 4514, 66434, 0, + 8194, 65462, 10626, 10965, 0, 8893, 0, 12542, 0, 65341, 0, 65829, 7925, + 119822, 10475, 0, 0, 1352, 11069, 7707, 127560, 0, 65279, 127102, 68207, + 127100, 65605, 6040, 127097, 10071, 0, 9336, 0, 0, 8899, 7798, 64474, + 64259, 0, 65188, 7820, 43018, 0, 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, 0, 8224, 0, + 8938, 6043, 12738, 0, 0, 5321, 0, 0, 0, 2589, 74332, 1689, 7802, 4683, + 74318, 42704, 120296, 11905, 0, 0, 0, 0, 74513, 6049, 0, 4027, 834, + 118962, 1803, 0, 1503, 0, 0, 0, 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, 0, 78519, + 0, 8572, 6021, 77896, 0, 77895, 43155, 0, 0, 3146, 10959, 9483, 0, 77893, + 10981, 166, 917841, 8635, 0, 10623, 408, 119058, 127507, 13298, 0, 7426, + 41641, 12717, 0, 7607, 10639, 66713, 0, 0, 41643, 74134, 0, 8713, 41640, + 10221, 41645, 66712, 6645, 646, 66726, 66711, 42129, 0, 77901, 3472, + 8697, 0, 0, 0, 0, 0, 0, 5809, 1950, 119356, 0, 74572, 0, 42136, 0, 0, 0, + 0, 3247, 119854, 65017, 0, 68428, 66668, 0, 0, 10983, 0, 0, 0, 41567, 0, + 0, 0, 194624, 0, 0, 0, 8285, 0, 4509, 0, 66471, 12216, 0, 40988, 0, 0, + 41727, 0, 0, 2396, 0, 0, 74018, 917538, 64940, 0, 3886, 0, 42457, 119008, + 0, 996, 68123, 917571, 4249, 0, 917594, 11707, 8222, 0, 7939, 0, 917574, + 917582, 917592, 917569, 8534, 0, 40983, 0, 0, 0, 7201, 12561, 0, 42371, + 12558, 0, 0, 10052, 40982, 0, 0, 1488, 0, 0, 0, 917559, 0, 0, 1563, 0, + 9619, 0, 0, 0, 0, 0, 5803, 7797, 6070, 10006, 0, 2922, 6082, 0, 65009, 0, + 12567, 0, 0, 41412, 0, 0, 3607, 65863, 10046, 9612, 42153, 8218, 9485, 0, + 2032, 78354, 0, 0, 0, 0, 0, 43085, 6057, 508, 0, 0, 120265, 0, 0, 0, 0, + 638, 6083, 119072, 0, 0, 2305, 78348, 0, 0, 6056, 6659, 0, 0, 6085, 0, 0, + 3915, 41634, 0, 41639, 63912, 11941, 0, 4028, 1787, 42180, 43096, 0, + 3249, 1768, 0, 12328, 501, 127074, 10601, 0, 583, 0, 41977, 0, 66004, + 119350, 6505, 74010, 0, 13064, 55267, 120810, 6500, 5526, 65049, 0, + 73764, 0, 0, 12745, 9678, 0, 120587, 9869, 0, 1771, 0, 8936, 0, 0, 4208, + 78341, 119115, 78342, 0, 0, 74101, 0, 11762, 0, 0, 77997, 0, 66475, 0, + 5027, 0, 0, 0, 5069, 73862, 5028, 9897, 0, 73739, 5026, 0, 68639, 6331, + 0, 8931, 0, 1415, 8866, 41901, 74790, 78138, 119361, 0, 43106, 5029, + 65309, 1580, 3598, 68424, 41070, 77903, 0, 3440, 78215, 1562, 0, 127236, + 119358, 1716, 0, 10600, 0, 620, 41001, 6028, 0, 42892, 0, 74822, 5024, + 120829, 41003, 0, 5025, 0, 0, 0, 119328, 0, 65557, 0, 74541, 0, 11599, 0, + 11602, 6243, 11574, 11581, 11597, 11598, 6253, 6105, 11584, 74195, 11569, + 65275, 8906, 127096, 5755, 2636, 0, 10815, 11619, 78717, 41540, 7815, + 11616, 6979, 12080, 7721, 11604, 7869, 1592, 0, 42152, 78498, 41048, 0, + 829, 0, 0, 19950, 0, 0, 6616, 0, 118875, 10953, 391, 0, 69785, 482, + 42296, 11588, 0, 43606, 0, 68397, 66370, 0, 42335, 0, 0, 0, 7538, 5315, + 0, 42491, 0, 42061, 0, 4576, 0, 68417, 120241, 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, 0, 0, 929, 6827, 42035, 42437, 1555, 0, 8691, + 66435, 0, 41662, 0, 0, 0, 0, 0, 4578, 64513, 41664, 0, 42578, 0, 41661, + 78715, 43305, 9356, 0, 0, 0, 1286, 10166, 0, 0, 64707, 0, 42476, 7730, 0, + 0, 42483, 0, 0, 42324, 42291, 10020, 43359, 0, 6641, 525, 41627, 0, 8763, + 0, 41628, 533, 11931, 65225, 8321, 42504, 42581, 0, 6915, 42310, 4377, + 8559, 0, 120234, 0, 13193, 64350, 11666, 8679, 41924, 1576, 7735, 0, 0, + 73840, 0, 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, + 0, 119329, 0, 10013, 0, 0, 127095, 9492, 11782, 64382, 12833, 118986, 0, + 1297, 41630, 630, 127094, 0, 120774, 120570, 1043, 43652, 66223, 10090, + 0, 0, 313, 917563, 41881, 0, 42311, 7445, 0, 5750, 10759, 9419, 55222, + 9405, 11268, 0, 9398, 8526, 9399, 9422, 0, 66495, 0, 0, 127239, 41718, + 10707, 1603, 0, 119003, 0, 631, 77952, 77953, 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, 0, 0, 8037, 917803, 11535, 0, 74845, 5185, 66696, 5521, + 10334, 2093, 77983, 10302, 0, 10104, 1027, 5181, 0, 0, 10523, 1446, + 42320, 41646, 991, 5189, 42472, 41647, 120105, 1722, 5581, 77979, 3405, + 0, 194644, 5523, 0, 42620, 0, 0, 9549, 0, 10549, 55282, 9661, 43682, 0, + 77910, 120026, 78708, 0, 77911, 0, 41991, 0, 0, 7630, 9846, 7684, 10350, + 0, 1174, 77981, 42733, 77978, 77980, 66485, 77977, 42277, 77974, 42456, + 65667, 0, 12330, 0, 0, 42417, 42383, 0, 41344, 6293, 0, 66252, 77984, + 74443, 0, 10209, 8313, 4195, 74435, 1316, 66690, 120032, 6332, 64894, 0, + 65871, 78060, 1736, 0, 3901, 12228, 120151, 65200, 3383, 10446, 78841, + 693, 9130, 314, 64149, 42420, 11949, 0, 120152, 11026, 0, 5332, 6940, + 64154, 12635, 127007, 42706, 1751, 273, 8165, 13166, 120763, 78840, 0, + 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, 0, 74095, 0, 41848, 2567, 66006, 0, 4044, 0, 0, 12233, 0, 1023, + 474, 0, 119818, 0, 0, 42487, 65556, 0, 0, 42295, 0, 0, 0, 0, 9835, 66499, + 0, 5417, 12275, 10895, 0, 274, 0, 1858, 0, 0, 55251, 10118, 3133, 0, + 73795, 0, 9610, 8068, 8197, 0, 699, 0, 41665, 5868, 0, 0, 42182, 7581, + 19940, 43668, 41667, 0, 0, 1923, 65583, 65802, 0, 64597, 43444, 119184, + 0, 0, 6464, 7036, 2996, 1937, 0, 0, 41835, 4047, 41842, 0, 64107, 0, 0, + 11017, 0, 0, 293, 77966, 0, 64791, 41827, 42466, 43422, 10579, 8560, 0, + 65413, 77963, 4803, 12964, 1739, 1941, 3900, 0, 1713, 77969, 0, 73957, 11407, 42441, 41971, 6297, 120098, 64105, 0, 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, 0, 6208, 0, - 5746, 73749, 0, 64416, 42422, 0, 0, 7082, 73775, 338, 5059, 194719, 0, - 42328, 10767, 0, 8115, 0, 0, 0, 8227, 0, 1218, 0, 0, 65848, 0, 0, 0, 0, - 126987, 4486, 0, 0, 0, 10925, 0, 0, 0, 0, 42309, 10257, 0, 10273, 0, - 10305, 42461, 0, 42349, 8832, 0, 64127, 10644, 0, 0, 42278, 74451, - 126988, 917857, 7794, 0, 42429, 11081, 42316, 119026, 3669, 3968, 42468, - 0, 0, 0, 65402, 119581, 0, 0, 64933, 0, 41960, 0, 0, 0, 0, 66678, 42391, - 1588, 65400, 8409, 0, 19967, 65398, 787, 0, 0, 0, 6115, 118940, 41654, - 42480, 0, 0, 41655, 65401, 0, 0, 0, 0, 644, 65500, 41657, 10778, 3659, - 9533, 184, 1553, 13107, 65484, 0, 10502, 74457, 0, 0, 41554, 0, 8220, 0, - 41557, 0, 0, 11070, 0, 5157, 4020, 73858, 41555, 9514, 64818, 65103, - 64641, 0, 119633, 7520, 0, 74377, 11029, 66651, 0, 0, 118930, 64527, 0, - 7877, 73803, 0, 0, 120096, 74602, 0, 0, 0, 42817, 0, 65212, 11715, 12190, - 12319, 0, 0, 0, 9502, 65427, 0, 65424, 0, 0, 9734, 65425, 0, 0, 0, 0, 0, - 10112, 10827, 0, 9866, 74527, 66675, 0, 8625, 64346, 11290, 10477, 0, - 8636, 0, 8315, 65444, 0, 0, 74595, 6152, 0, 0, 6629, 0, 120171, 0, 74589, - 0, 0, 0, 0, 0, 0, 11046, 11490, 43127, 4485, 0, 0, 64926, 0, 0, 0, 5869, - 12437, 0, 0, 7040, 3588, 0, 12825, 0, 0, 12725, 0, 0, 120167, 223, 0, 0, - 120166, 42444, 0, 64499, 65245, 0, 1171, 0, 120165, 0, 1805, 8772, 0, 0, - 65078, 65247, 0, 120111, 2338, 0, 118853, 0, 0, 0, 64800, 65236, 67644, - 68126, 1213, 0, 64075, 797, 64074, 8734, 4212, 0, 64387, 4115, 0, 5005, - 64070, 64073, 10679, 0, 0, 0, 64276, 426, 0, 0, 8251, 10136, 65436, 0, - 65088, 43302, 1224, 0, 65576, 0, 10701, 1764, 3101, 0, 65291, 120159, 0, - 11373, 74566, 0, 120103, 8663, 9312, 41644, 4539, 3787, 0, 9222, 0, 0, - 4259, 9092, 74567, 41961, 0, 12724, 66357, 42331, 64935, 0, 0, 1293, - 7947, 12003, 0, 74593, 120308, 2454, 74807, 3613, 0, 0, 0, 65888, 120307, - 10978, 10840, 0, 10668, 0, 43087, 12595, 120304, 0, 118806, 0, 1157, - 64903, 8638, 0, 0, 0, 0, 120319, 8235, 0, 4405, 10086, 0, 0, 0, 0, 65430, - 74013, 6079, 0, 10764, 0, 64291, 0, 998, 120312, 11062, 120313, 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, 0, 66373, 0, 0, 64908, 0, 6311, 0, 12004, 119192, 12049, - 43108, 0, 0, 41705, 0, 6598, 0, 6599, 0, 0, 42148, 118825, 66027, 0, - 6597, 9412, 8340, 11824, 64745, 0, 0, 0, 1988, 5407, 67865, 2430, 41678, - 0, 0, 2336, 0, 0, 0, 120442, 0, 1921, 10947, 19927, 0, 65406, 0, 19913, - 4284, 13217, 0, 0, 12841, 9229, 10956, 42285, 41674, 19964, 41679, 65084, - 3521, 0, 5774, 8325, 0, 65403, 0, 1854, 10794, 0, 0, 0, 0, 0, 5280, 0, - 4344, 12905, 65433, 6076, 64793, 41610, 768, 12074, 442, 0, 68162, 64081, - 12934, 41682, 65432, 41693, 0, 6071, 65434, 0, 4804, 6994, 0, 0, 0, - 41696, 467, 0, 0, 0, 0, 0, 8421, 0, 0, 64801, 502, 0, 65431, 0, 0, 12043, - 1303, 316, 0, 2029, 65191, 119246, 11533, 64365, 0, 0, 4860, 194645, 0, - 42488, 0, 9583, 0, 5546, 8019, 73856, 0, 0, 0, 5544, 2355, 12150, 65725, - 5543, 119245, 63751, 12137, 5548, 0, 0, 0, 0, 65726, 6077, 0, 65452, 0, - 11301, 0, 0, 0, 9874, 0, 0, 0, 3050, 65410, 0, 0, 0, 0, 42830, 0, 66716, - 0, 4691, 0, 9345, 621, 0, 0, 0, 65411, 0, 41182, 73881, 65408, 73899, 0, - 9474, 10545, 119118, 10887, 3786, 65409, 8894, 43179, 119611, 7923, 3716, + 74327, 7806, 0, 8914, 0, 0, 3183, 1435, 64876, 2969, 6046, 0, 6208, + 67849, 5746, 73749, 0, 64416, 42422, 0, 0, 7082, 73775, 338, 5059, + 194719, 0, 42328, 10767, 0, 8115, 0, 0, 0, 8227, 2073, 1218, 0, 0, 65848, + 0, 0, 0, 0, 126987, 4486, 0, 0, 0, 10925, 0, 0, 0, 0, 42309, 10257, 0, + 10273, 0, 10305, 42461, 0, 42349, 8832, 78051, 64127, 10644, 42662, + 78828, 42278, 74451, 126988, 917857, 7794, 0, 42429, 6377, 42316, 119026, + 3669, 3968, 42468, 0, 78544, 0, 65402, 119581, 0, 0, 64933, 0, 41960, + 6699, 0, 0, 0, 6823, 42391, 1588, 65400, 8409, 78223, 19967, 65398, 787, + 0, 917939, 0, 6115, 2078, 41654, 42480, 0, 0, 41655, 65401, 43975, 0, 0, + 0, 644, 65500, 41657, 10778, 3659, 9533, 184, 1553, 13107, 65484, 0, + 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, 0, 0, 118930, 64527, 0, 7877, 73803, 0, 0, + 120096, 74602, 9955, 0, 4055, 42817, 0, 65212, 11715, 12190, 12319, + 78630, 0, 78631, 9502, 65427, 0, 65424, 12607, 0, 9734, 65425, 0, 0, 0, + 78835, 0, 10112, 10827, 0, 9866, 74527, 66675, 0, 8625, 64346, 11290, + 10477, 0, 8636, 0, 8315, 65444, 0, 0, 74595, 6152, 0, 0, 6629, 0, 120171, + 0, 74589, 43993, 0, 69790, 0, 0, 43690, 11046, 11490, 42730, 4485, 0, 0, + 64926, 0, 0, 0, 5869, 12437, 42728, 0, 7040, 3588, 0, 12825, 0, 0, 12725, + 0, 0, 78642, 223, 0, 69806, 120166, 42444, 0, 64499, 65245, 0, 1171, 0, + 120165, 0, 1805, 8772, 0, 0, 9930, 65247, 78619, 120111, 2338, 0, 118853, + 0, 42676, 0, 64800, 65236, 67644, 68126, 1213, 0, 64075, 797, 64074, + 8734, 4212, 0, 64387, 4115, 0, 5005, 64070, 64073, 10679, 0, 77954, 0, + 64276, 426, 0, 0, 8251, 10136, 65436, 0, 65088, 43302, 1224, 0, 65576, + 120158, 10701, 1764, 3101, 0, 65291, 120159, 0, 11373, 6378, 0, 120103, + 8663, 9312, 41644, 4539, 3787, 0, 9222, 0, 0, 4259, 9092, 74567, 41961, + 0, 12724, 66357, 42331, 64935, 0, 0, 1293, 7947, 12003, 0, 74593, 120308, + 2454, 42717, 3613, 0, 0, 0, 65888, 8816, 10978, 10840, 0, 10668, 0, + 43087, 12595, 120304, 0, 118806, 0, 1157, 64903, 8638, 0, 0, 0, 0, + 120319, 8235, 120316, 4405, 10086, 120247, 0, 69216, 0, 65430, 74013, + 6079, 6817, 10764, 0, 64291, 0, 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, 0, + 66373, 0, 0, 64908, 0, 6311, 0, 12004, 119192, 12049, 43108, 0, 0, 41705, + 0, 6598, 0, 6599, 0, 0, 42148, 118825, 66027, 0, 6597, 9412, 8340, 11824, + 64745, 0, 0, 0, 1988, 5407, 67865, 2430, 41678, 0, 120243, 2336, 0, 0, + 78871, 120442, 0, 1921, 10947, 19927, 0, 65406, 0, 19913, 4284, 13217, 0, + 0, 12841, 9229, 10956, 42285, 41674, 19964, 41679, 65084, 3521, 0, 5774, + 8325, 0, 65403, 0, 1854, 10794, 0, 67660, 0, 0, 78359, 5280, 0, 4344, + 12905, 65433, 6076, 64793, 41610, 768, 12074, 442, 0, 68162, 64081, + 12934, 41682, 65432, 41693, 0, 6071, 65434, 0, 4804, 4053, 0, 0, 194653, + 41696, 467, 69823, 0, 69797, 0, 0, 8421, 0, 0, 43705, 502, 0, 65431, + 119056, 0, 12043, 1303, 316, 0, 2029, 65191, 119246, 11533, 64365, 43480, + 0, 4860, 194645, 0, 42488, 0, 9583, 0, 5546, 8019, 73856, 0, 0, 0, 5544, + 2355, 12150, 65725, 5543, 77989, 63751, 12137, 5548, 77985, 0, 65727, + 68388, 65726, 6077, 0, 65452, 0, 11301, 78013, 78008, 78010, 9874, 78007, + 0, 0, 3050, 65410, 0, 0, 78016, 78017, 42830, 43996, 66716, 0, 4691, 0, + 9345, 621, 0, 0, 0, 65411, 0, 41182, 73881, 65408, 73899, 78024, 9474, + 10545, 119118, 10887, 3786, 65409, 8894, 43179, 119611, 7923, 3716, 119341, 9996, 8508, 0, 7012, 8195, 0, 9566, 0, 3722, 0, 41707, 8493, 545, - 9575, 41379, 10050, 12718, 0, 8859, 41459, 0, 0, 120740, 0, 0, 9119, - 2787, 7920, 118823, 4021, 2012, 7985, 0, 119663, 0, 0, 0, 0, 410, 120449, - 1802, 120789, 74107, 0, 41659, 41671, 1827, 0, 64396, 10126, 12116, - 41673, 120370, 11422, 120372, 120373, 3860, 120367, 120368, 41345, - 120362, 120363, 11748, 42158, 7941, 11076, 8749, 120361, 12698, 64858, - 361, 120357, 845, 0, 41560, 11970, 4562, 917920, 2926, 0, 4569, 74130, 0, - 119221, 194630, 611, 74129, 64871, 0, 65629, 0, 0, 0, 0, 0, 120543, 0, 0, - 6291, 0, 0, 41669, 7094, 917921, 0, 0, 74054, 0, 0, 0, 839, 0, 7695, - 8769, 65246, 4829, 0, 4859, 64467, 0, 0, 118998, 7206, 0, 6647, 0, 0, 0, - 0, 64764, 4210, 0, 0, 804, 0, 0, 12298, 0, 0, 0, 64924, 10091, 73931, - 9468, 74245, 0, 0, 74246, 0, 12839, 64669, 0, 0, 1279, 1425, 6224, - 119229, 11049, 0, 917549, 0, 8482, 0, 0, 5032, 0, 11940, 67888, 664, 0, - 5034, 0, 0, 0, 0, 73888, 0, 13294, 67873, 64869, 6032, 0, 9115, 7430, - 120377, 0, 120819, 0, 120168, 73913, 120170, 41161, 5518, 4174, 10993, - 41162, 120160, 64528, 1169, 434, 41437, 1905, 6034, 41164, 64744, 9528, - 118867, 0, 524, 0, 74029, 788, 74027, 0, 0, 0, 1663, 10419, 74025, 42636, - 0, 0, 0, 120656, 0, 0, 0, 0, 0, 67897, 74039, 0, 0, 11395, 0, 119107, - 43612, 64344, 0, 0, 10855, 5445, 9355, 0, 65198, 0, 8989, 221, 65686, 0, - 0, 8010, 7191, 4962, 0, 8855, 0, 0, 64469, 0, 10555, 0, 0, 0, 0, 120427, - 10451, 0, 120152, 7245, 12443, 74405, 120148, 120149, 120150, 3873, 8367, - 0, 120146, 120147, 0, 66507, 0, 0, 11010, 12723, 74059, 74062, 6217, + 9575, 41379, 10050, 12718, 0, 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, 0, 4569, + 74130, 0, 43487, 194630, 611, 74129, 64871, 120379, 65629, 0, 0, 0, 0, 0, + 120543, 0, 0, 6291, 0, 78639, 41669, 7094, 917921, 0, 0, 74054, 0, + 195029, 0, 839, 0, 7695, 8769, 65246, 4829, 0, 4859, 64467, 0, 0, 118998, + 7206, 0, 6647, 43986, 0, 69766, 0, 64764, 4210, 0, 0, 804, 0, 0, 12298, + 0, 66653, 0, 64924, 10091, 73931, 9468, 74245, 0, 0, 74246, 0, 12839, + 64669, 0, 0, 1279, 1425, 6224, 119229, 11049, 0, 917549, 43239, 8482, 0, + 0, 5032, 77830, 11940, 67888, 664, 0, 5034, 0, 0, 127525, 42702, 73888, + 0, 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, 194668, 524, 0, + 74029, 788, 74027, 0, 0, 0, 1663, 10419, 74025, 42636, 0, 0, 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, 0, 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, 0, 74052, 0, 0, 120549, 119082, 64295, 120418, 0, 64765, 73923, 120417, 120662, 120730, 0, 6216, 0, 10755, 9455, 0, 8124, - 0, 9470, 6944, 0, 0, 0, 2828, 0, 531, 42638, 0, 0, 0, 73764, 8204, 3614, - 2827, 9696, 0, 0, 8728, 4354, 10904, 120502, 19936, 7833, 120691, 0, - 42599, 42597, 0, 120409, 0, 0, 8537, 0, 0, 0, 0, 0, 41199, 10121, 2028, - 0, 0, 0, 0, 3062, 0, 74447, 12608, 0, 66440, 7545, 9700, 12580, 0, - 120777, 0, 41155, 0, 74071, 0, 0, 12713, 0, 0, 0, 0, 0, 1734, 0, 0, 0, 0, - 2456, 231, 0, 74167, 542, 0, 118786, 0, 0, 1230, 0, 0, 3597, 9761, 10584, - 74235, 0, 4037, 0, 8352, 0, 5687, 0, 64515, 0, 0, 0, 67846, 0, 9704, 0, - 0, 74284, 0, 0, 8660, 0, 0, 0, 0, 74482, 4483, 1709, 0, 9909, 6080, 0, 0, - 1746, 1315, 8667, 0, 0, 13140, 65899, 10604, 0, 4480, 11266, 0, 1226, - 6930, 0, 0, 0, 10897, 41230, 605, 0, 74785, 120356, 0, 0, 41500, 0, 311, - 11453, 6221, 10608, 64943, 74280, 10877, 0, 64885, 74272, 0, 0, 0, 0, - 74312, 345, 0, 74456, 64606, 42589, 0, 0, 5037, 0, 1776, 8422, 0, 118814, - 41508, 41201, 323, 43328, 0, 120698, 1295, 0, 4625, 0, 4630, 13117, 0, 0, - 65123, 11293, 2668, 11288, 0, 42640, 65666, 2519, 0, 65420, 0, 0, 917886, - 5049, 0, 119011, 706, 7754, 10854, 8738, 0, 65419, 0, 0, 649, 65421, 0, + 127042, 9470, 6944, 0, 0, 0, 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, 0, 0, 0, 41199, + 10121, 2028, 0, 0, 0, 0, 3062, 0, 74447, 12608, 0, 66440, 7545, 9700, + 12580, 0, 120777, 120502, 41155, 0, 74071, 0, 0, 12713, 0, 0, 0, 78772, + 0, 1734, 0, 0, 0, 64594, 2456, 231, 0, 74167, 542, 0, 118786, 0, 0, 1230, + 0, 0, 3597, 4446, 10584, 74235, 0, 4037, 0, 8352, 0, 5687, 0, 64515, 0, + 0, 55265, 67846, 78434, 9704, 0, 0, 74284, 0, 0, 8660, 0, 0, 0, 78773, + 74482, 4483, 1709, 120617, 9909, 6080, 0, 0, 1746, 1315, 8667, 0, 0, + 13140, 65899, 10604, 0, 4480, 11266, 0, 1226, 6930, 0, 0, 6360, 10897, + 41230, 605, 0, 74785, 120356, 0, 0, 41500, 0, 311, 11453, 6221, 10608, + 64943, 74280, 10877, 118868, 64885, 74272, 0, 0, 0, 120736, 74312, 345, + 0, 74456, 64606, 9917, 0, 0, 5037, 0, 1776, 8422, 0, 118814, 41508, + 41201, 323, 43328, 0, 42698, 1295, 0, 4625, 0, 4630, 13117, 0, 0, 65123, + 11293, 2668, 11288, 0, 42640, 65666, 2519, 0, 65420, 0, 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, 0, 1183, 0, 7017, 42852, - 0, 8157, 9736, 64503, 65418, 0, 0, 74035, 0, 11913, 73874, 42848, 0, - 8920, 0, 0, 7962, 12211, 9837, 0, 66227, 0, 4184, 0, 0, 10177, 73777, - 1857, 0, 4626, 8464, 8472, 0, 4629, 8499, 0, 0, 4624, 7818, 194622, 0, 0, - 7805, 0, 0, 6935, 0, 0, 0, 0, 43327, 0, 119046, 8492, 8250, 8459, 0, - 8497, 8496, 0, 0, 0, 0, 9543, 0, 0, 0, 65849, 0, 0, 0, 0, 0, 8684, 0, - 6102, 0, 5298, 0, 5294, 0, 0, 0, 0, 0, 119826, 0, 119215, 0, 12073, 0, 0, - 0, 13108, 0, 74397, 41468, 0, 0, 5292, 0, 0, 1939, 5302, 3970, 0, 12455, - 1793, 0, 0, 0, 6643, 0, 65263, 0, 0, 41293, 0, 119125, 0, 13219, 9569, 0, - 74383, 0, 0, 0, 5500, 8813, 0, 0, 0, 5322, 0, 0, 0, 5324, 66443, 3784, - 41614, 65269, 6230, 0, 0, 43324, 3360, 0, 11523, 0, 0, 41732, 7197, 0, 0, - 0, 41821, 1249, 0, 0, 0, 118992, 0, 64899, 64763, 41149, 41807, 43162, - 41815, 41150, 0, 10571, 10096, 0, 0, 0, 6947, 41152, 887, 9249, 6565, 0, - 41990, 0, 41811, 74466, 0, 6670, 0, 0, 0, 43092, 43325, 0, 10168, 0, - 9781, 0, 9190, 0, 9666, 8269, 65944, 74005, 13019, 11670, 0, 315, 12813, - 0, 119648, 0, 0, 0, 0, 0, 0, 0, 1378, 9509, 0, 0, 74475, 3066, 0, 67847, - 0, 0, 0, 0, 8787, 0, 194616, 41618, 194615, 0, 194614, 0, 64652, 0, - 194612, 0, 0, 42088, 0, 0, 7176, 0, 10137, 6121, 10995, 0, 74534, 8119, - 64874, 0, 0, 0, 0, 74525, 0, 0, 12930, 1394, 74514, 0, 74515, 0, 118804, - 2998, 9527, 120659, 65190, 12977, 42090, 119165, 0, 119100, 41236, 0, - 65168, 42003, 41237, 5848, 0, 0, 3670, 0, 0, 0, 0, 7890, 0, 11298, 43315, - 0, 6229, 1593, 0, 0, 619, 4635, 65080, 0, 0, 4120, 65337, 65336, 0, - 11808, 119214, 74115, 9366, 42790, 42006, 0, 65327, 65326, 65325, 10757, - 1507, 65322, 65321, 65320, 65335, 65334, 65333, 65332, 65331, 42059, - 65329, 65328, 0, 9128, 118885, 42073, 41631, 64590, 0, 4371, 7196, 65318, - 2035, 65316, 4106, 65314, 65313, 42074, 0, 41228, 0, 119117, 41241, 7903, - 41239, 43533, 127099, 7189, 0, 0, 0, 12357, 42802, 0, 8487, 9131, 0, - 4615, 12695, 0, 0, 12175, 0, 64535, 0, 7809, 0, 0, 562, 12169, 6590, 0, - 66455, 64738, 3219, 0, 0, 0, 1037, 0, 2025, 0, 13098, 0, 10637, 4568, - 549, 1570, 0, 2835, 0, 10624, 194587, 11072, 0, 0, 0, 12606, 0, 2825, 0, - 10825, 8079, 2821, 41046, 0, 0, 0, 120593, 13071, 0, 452, 41049, 42840, - 43614, 2831, 0, 74596, 11465, 5212, 0, 64703, 119191, 42308, 7181, 0, - 41332, 0, 12333, 0, 1668, 0, 0, 0, 1187, 0, 42628, 0, 0, 0, 0, 3240, 0, - 12194, 0, 11591, 41065, 5323, 8166, 0, 0, 0, 74535, 1623, 65297, 0, 571, - 0, 4918, 0, 5288, 0, 8916, 65048, 1909, 8864, 0, 0, 10736, 0, 11571, - 7615, 0, 0, 4237, 0, 1035, 65815, 0, 7881, 701, 65936, 3489, 0, 0, 0, - 11403, 0, 0, 0, 3796, 0, 0, 3994, 11421, 0, 0, 0, 0, 0, 0, 64857, 0, - 2855, 0, 66308, 41621, 0, 0, 0, 10654, 0, 119226, 12164, 3246, 7906, 0, - 65847, 7182, 0, 13024, 194822, 119931, 0, 0, 0, 0, 1496, 747, 0, 942, - 2378, 43136, 0, 8466, 0, 9320, 8001, 1232, 8139, 11617, 0, 0, 11409, 0, - 0, 0, 66319, 0, 0, 11612, 0, 0, 2374, 0, 8475, 11609, 66313, 0, 0, 5286, - 119297, 0, 0, 64925, 0, 0, 0, 194583, 7705, 11942, 11305, 194581, 3309, - 0, 0, 0, 0, 11975, 0, 41653, 1280, 1241, 7168, 12096, 0, 0, 42565, 41651, - 0, 0, 0, 41650, 0, 66470, 0, 12914, 41491, 66010, 119552, 6078, 65100, 0, - 1475, 0, 0, 6084, 917546, 41064, 41062, 0, 0, 3256, 0, 42076, 0, 0, 0, - 8727, 0, 65875, 0, 0, 0, 10562, 74215, 67608, 0, 0, 3248, 74297, 3261, - 9015, 0, 0, 3635, 64337, 0, 0, 0, 7195, 0, 2007, 64431, 0, 0, 0, 0, 635, - 0, 0, 65613, 0, 0, 73997, 0, 0, 119218, 7984, 8600, 74434, 0, 4176, 0, - 2034, 0, 120805, 65891, 127038, 0, 318, 2038, 0, 0, 0, 3649, 13149, - 42145, 42798, 3634, 120291, 118927, 0, 120124, 7866, 0, 11402, 42146, - 120134, 74238, 120129, 2849, 127034, 0, 7938, 12960, 1761, 11812, 65379, - 74509, 0, 1159, 0, 0, 0, 0, 7178, 194632, 0, 41680, 0, 0, 11534, 1514, - 11668, 67891, 9313, 7015, 0, 67877, 0, 12989, 194560, 9368, 12848, 1624, - 43270, 0, 194563, 10818, 194562, 12649, 0, 0, 1194, 3242, 0, 9555, 8598, - 120299, 6169, 0, 1551, 2798, 65176, 120298, 42752, 119025, 0, 67875, - 120301, 3495, 66648, 0, 0, 0, 0, 4891, 0, 10641, 0, 73746, 0, 0, 0, - 73787, 0, 0, 7199, 64955, 0, 0, 0, 0, 0, 64952, 0, 193, 0, 0, 0, 0, 0, + 0, 8157, 9736, 64503, 65418, 0, 0, 74035, 0, 11913, 73874, 6696, 0, 8920, + 0, 0, 7962, 12211, 9837, 2051, 66227, 0, 4184, 0, 0, 10177, 73777, 1857, + 0, 4626, 8464, 8472, 0, 4629, 8499, 78321, 78322, 4624, 7818, 119173, 0, + 0, 7805, 0, 0, 6935, 0, 78325, 78326, 78323, 43327, 43989, 119046, 8492, + 8250, 8459, 0, 8497, 8496, 0, 0, 78336, 78339, 9543, 78335, 78332, 77832, + 65849, 77831, 0, 0, 12451, 0, 8684, 0, 6102, 0, 5298, 0, 5294, 0, 0, 0, + 195062, 9949, 119826, 43617, 119215, 0, 12073, 0, 0, 77863, 13108, 0, + 74397, 41468, 0, 0, 5292, 55272, 0, 1939, 5302, 3970, 0, 12455, 1793, 0, + 0, 0, 6643, 0, 65263, 0, 78330, 41293, 78328, 78329, 0, 13219, 9569, 0, + 74383, 0, 0, 0, 5500, 8813, 0, 0, 74566, 5322, 0, 78340, 43631, 5324, + 66443, 3784, 41614, 65269, 6230, 78349, 78345, 43324, 3360, 78344, 11523, + 0, 0, 9926, 7197, 0, 68429, 0, 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, 0, 6670, 77882, 0, 0, 43092, 43325, 0, 10168, 0, 9781, 194610, + 9190, 0, 9666, 8269, 65944, 74005, 13019, 11670, 0, 315, 12813, 0, 78432, + 78256, 78351, 78352, 0, 0, 0, 0, 1378, 9509, 0, 0, 74475, 3066, 0, 67847, + 0, 0, 0, 78365, 8787, 0, 194616, 41618, 194615, 78261, 194614, 0, 64652, + 0, 194612, 0, 78366, 42088, 0, 0, 7176, 0, 10137, 6121, 10995, 78259, + 74534, 8119, 64874, 917816, 0, 0, 0, 74525, 0, 0, 12930, 1394, 74514, 0, + 74515, 0, 118804, 2998, 9527, 120659, 65190, 12977, 42090, 119165, 0, + 119100, 41236, 0, 42005, 42003, 41237, 5848, 0, 0, 3670, 0, 194600, 0, 0, + 7890, 0, 11298, 43315, 0, 6229, 1593, 0, 0, 619, 4635, 65080, 0, 0, 4120, + 65337, 65336, 0, 11808, 119214, 74115, 9366, 42790, 42006, 0, 65327, + 65326, 65325, 10757, 1507, 42216, 65321, 65320, 65335, 65334, 65333, + 65332, 65331, 42059, 65329, 42689, 0, 9128, 118885, 42073, 6785, 64590, + 0, 4371, 7196, 65318, 2035, 65316, 4106, 65314, 65313, 42074, 0, 41228, + 0, 65609, 41241, 7903, 41239, 43533, 78459, 7189, 0, 0, 0, 12357, 42802, + 78450, 8487, 9131, 0, 4615, 12695, 0, 0, 12175, 0, 64535, 0, 7809, 0, 0, + 562, 12169, 6590, 69762, 66455, 64738, 3219, 68654, 0, 0, 1037, 0, 2025, + 0, 13098, 78442, 10637, 4568, 549, 1570, 0, 2835, 0, 10624, 43623, 11072, + 0, 0, 0, 12606, 78433, 2825, 0, 10825, 8079, 2821, 41046, 0, 0, 0, + 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, 0, 42628, 78575, 0, 0, 0, 3240, 0, 12194, 0, 11591, 41065, 5323, + 8166, 0, 0, 0, 74535, 1623, 65297, 0, 571, 0, 4918, 0, 5288, 127295, + 8916, 65048, 1909, 8864, 0, 0, 10736, 0, 11571, 7615, 0, 0, 4237, 0, + 1035, 65815, 0, 7881, 701, 65936, 3489, 0, 0, 120751, 11403, 0, 0, 0, + 3796, 6800, 0, 3994, 11421, 0, 0, 0, 0, 0, 0, 64857, 0, 2855, 0, 66308, + 41621, 68214, 0, 0, 10654, 0, 119226, 12164, 3246, 7906, 43972, 65847, + 7182, 0, 13024, 194822, 74270, 0, 0, 0, 0, 1496, 747, 0, 942, 2378, + 43136, 0, 8466, 0, 9320, 8001, 1232, 8139, 11617, 0, 0, 11409, 68373, + 6382, 0, 64634, 0, 0, 11612, 0, 67600, 2374, 0, 8475, 11609, 66313, 0, 0, + 5286, 119297, 0, 0, 64925, 0, 0, 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, 65100, 0, 1475, 0, 9938, 6084, 917546, 41064, 41062, + 0, 0, 3256, 0, 42076, 43252, 78823, 0, 8727, 0, 65875, 0, 0, 0, 10562, + 74215, 43065, 0, 0, 3248, 74297, 3261, 9015, 0, 0, 3635, 64337, 0, 0, 0, + 7195, 0, 2007, 64431, 0, 0, 0, 0, 635, 0, 0, 65613, 77909, 0, 73997, 0, + 0, 119218, 7984, 8600, 74434, 0, 4176, 0, 2034, 0, 120805, 65891, 127038, + 0, 318, 2038, 0, 78596, 0, 3649, 13149, 42145, 42798, 3634, 120291, + 118927, 67677, 120124, 7866, 0, 11402, 42146, 120134, 74238, 42664, 2849, + 127034, 0, 7938, 12960, 1761, 11812, 65379, 68386, 0, 1159, 0, 0, 0, 0, + 7178, 194632, 0, 41680, 0, 0, 11534, 1514, 11668, 67891, 9313, 7015, 0, + 67877, 0, 12989, 66474, 9368, 12848, 1624, 43270, 0, 194563, 10818, + 194562, 9953, 0, 78421, 1194, 3242, 9761, 9555, 8598, 120299, 6169, + 12871, 1551, 2798, 65176, 120298, 42752, 119025, 0, 67875, 120301, 3495, + 66648, 0, 0, 68364, 0, 4891, 0, 10641, 0, 73746, 0, 68352, 0, 73787, 0, + 194633, 7199, 64955, 0, 0, 0, 0, 0, 42685, 42679, 193, 0, 0, 0, 42667, 0, 5271, 0, 119661, 118882, 1362, 13297, 0, 0, 0, 0, 73789, 0, 6658, 4426, - 0, 0, 0, 119123, 7276, 42163, 5220, 0, 0, 0, 2416, 3310, 66030, 0, 379, - 0, 0, 0, 0, 3223, 65492, 1284, 0, 4549, 0, 0, 0, 0, 10807, 9558, 0, 0, - 8515, 8688, 12866, 0, 3294, 0, 0, 0, 0, 7564, 0, 43329, 0, 0, 73757, - 66456, 42359, 0, 2031, 0, 7202, 0, 12676, 66615, 0, 3215, 0, 7710, 1610, - 73801, 0, 0, 65682, 0, 0, 65924, 0, 228, 0, 1501, 0, 64395, 5179, 7200, - 6225, 0, 65794, 1725, 65533, 8196, 7476, 74399, 0, 0, 0, 8502, 5762, - 1967, 7483, 0, 0, 8104, 0, 7474, 0, 0, 0, 10414, 13001, 8141, 0, 42537, - 1557, 0, 0, 0, 0, 8631, 2545, 120672, 0, 0, 74190, 0, 0, 0, 42762, 0, 0, - 1650, 262, 1637, 0, 7901, 3238, 0, 41861, 0, 0, 65158, 10860, 0, 119134, - 7527, 0, 43319, 6419, 0, 45, 0, 0, 0, 0, 119810, 7194, 5291, 0, 0, 13129, - 0, 9084, 0, 8737, 0, 12881, 0, 12906, 9639, 7912, 2620, 0, 0, 0, 0, 179, - 65896, 0, 64756, 2853, 0, 118813, 0, 118996, 0, 2850, 8084, 0, 73850, - 2801, 119837, 42069, 119839, 74754, 119841, 42072, 119843, 119842, 74767, - 0, 0, 0, 0, 8245, 119313, 3158, 119853, 4389, 73813, 923, 119857, 119856, - 292, 13002, 119845, 119844, 3221, 1763, 119849, 4612, 119851, 119850, - 7253, 127110, 120618, 0, 10782, 3637, 12996, 43542, 0, 64578, 0, 3228, - 73869, 8783, 0, 119614, 2731, 0, 0, 118939, 4102, 7696, 73878, 0, 0, 0, - 43316, 4177, 11283, 9089, 0, 73996, 0, 64500, 68133, 0, 0, 1856, 0, 0, 0, - 0, 0, 0, 3208, 12975, 0, 0, 0, 0, 74072, 0, 0, 0, 0, 2033, 119008, 0, - 195026, 0, 7740, 0, 0, 0, 73964, 0, 0, 0, 65674, 0, 0, 41689, 0, 74006, - 64909, 6646, 11790, 74019, 0, 0, 0, 8561, 4573, 0, 5326, 0, 120605, 7230, - 8257, 0, 8778, 41688, 0, 65776, 0, 8314, 6459, 0, 7628, 65092, 73903, - 66721, 11342, 0, 0, 0, 0, 127001, 0, 11810, 13164, 10723, 967, 0, 0, - 11946, 0, 3257, 0, 12307, 1845, 0, 43526, 0, 0, 1886, 42342, 10089, 870, - 7648, 3499, 8609, 7652, 876, 871, 877, 0, 878, 42015, 879, 0, 4563, 0, 0, - 7591, 65887, 867, 9520, 872, 0, 868, 873, 7642, 0, 869, 874, 7644, 0, - 875, 790, 0, 0, 0, 0, 66182, 0, 5429, 0, 66180, 0, 66181, 0, 0, 0, 42067, - 0, 5433, 10657, 7911, 0, 1547, 66176, 42012, 0, 5425, 4977, 9999, 5317, - 5423, 4611, 0, 67637, 0, 9679, 74122, 0, 0, 0, 0, 4418, 66184, 4628, - 4245, 0, 0, 0, 1851, 0, 0, 11908, 0, 9360, 118897, 0, 42776, 66187, - 12837, 8829, 0, 0, 0, 0, 43318, 0, 8809, 119974, 0, 0, 120604, 0, 0, 0, - 0, 0, 0, 7427, 0, 4588, 0, 0, 74484, 0, 2433, 0, 119622, 3352, 74363, 0, - 0, 793, 74404, 0, 305, 567, 0, 842, 0, 8208, 0, 41695, 1647, 118877, 0, - 7837, 917625, 818, 5337, 917622, 917621, 41376, 119978, 917618, 120594, - 74086, 917615, 917614, 917613, 10973, 66359, 1372, 917609, 917608, 4969, - 1254, 917605, 917604, 917603, 917602, 65228, 0, 0, 0, 2840, 0, 119982, 0, - 0, 3245, 9068, 119069, 64725, 0, 0, 12991, 0, 2651, 0, 0, 917611, 0, 0, - 0, 0, 0, 0, 0, 43322, 0, 0, 0, 64372, 0, 3226, 655, 752, 7457, 7456, + 0, 0, 0, 119123, 7276, 42163, 5220, 0, 0, 0, 2416, 3310, 42703, 0, 379, + 0, 0, 0, 0, 3223, 65492, 1284, 194771, 4549, 0, 0, 0, 0, 10807, 9558, + 194613, 0, 8515, 8688, 12866, 0, 3294, 0, 8529, 0, 43385, 7564, 0, 43329, + 0, 0, 73757, 66456, 42359, 0, 2031, 0, 7202, 0, 12676, 42729, 0, 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, 0, 8502, 5762, 1967, 7483, 0, 0, 8104, 0, 7474, 0, 0, 0, 10414, 13001, + 8141, 0, 42537, 1557, 43594, 0, 6330, 6805, 8631, 2545, 120672, 0, 0, + 74190, 0, 0, 0, 42762, 0, 127017, 1650, 262, 1637, 0, 7901, 3238, 0, + 41861, 0, 0, 65158, 10860, 0, 43658, 7527, 0, 43319, 6419, 0, 45, 0, 0, + 0, 0, 119810, 7194, 5291, 0, 43666, 13129, 0, 9084, 0, 8737, 0, 12881, 0, + 12906, 9639, 7912, 2620, 0, 0, 0, 0, 179, 65896, 0, 64756, 2853, 0, + 118813, 0, 118996, 119009, 2850, 8084, 0, 73850, 2801, 119837, 42069, + 119839, 74754, 119841, 42072, 119843, 119842, 10398, 0, 0, 0, 0, 8245, + 68401, 3158, 119853, 4389, 43656, 923, 119857, 119856, 292, 13002, + 119845, 119844, 3221, 1763, 119849, 4612, 119851, 119850, 7253, 127110, + 68391, 0, 10782, 3637, 12996, 43542, 0, 64578, 0, 3228, 73869, 8783, 0, + 119614, 2731, 0, 0, 78585, 4102, 7696, 73878, 0, 0, 78586, 43316, 4177, + 11283, 9089, 0, 73996, 0, 64500, 43674, 0, 0, 1856, 0, 0, 6379, 0, 0, 0, + 3208, 12975, 0, 0, 0, 0, 74072, 55269, 0, 0, 0, 2033, 78577, 78576, + 195026, 55254, 7740, 0, 0, 0, 73964, 0, 0, 67612, 65674, 0, 0, 41689, 0, + 74006, 64909, 6646, 11790, 74019, 0, 0, 0, 8561, 4573, 0, 5326, 0, + 120605, 7230, 8257, 0, 8778, 41688, 0, 65776, 2071, 8314, 6459, 0, 7628, + 65092, 73903, 66721, 11342, 0, 0, 0, 0, 127001, 0, 11810, 13164, 10723, + 967, 0, 0, 11946, 0, 3257, 0, 12307, 1845, 0, 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, 0, 868, 873, 7642, 0, + 869, 874, 7644, 0, 875, 790, 0, 0, 0, 0, 66182, 0, 5429, 0, 66180, 0, + 66181, 68452, 0, 0, 42067, 0, 5433, 10657, 7911, 194622, 1547, 66176, + 42012, 120576, 5425, 4977, 9999, 5317, 5423, 4611, 0, 67637, 0, 9679, + 74122, 0, 0, 0, 0, 4418, 66184, 4628, 4245, 119648, 0, 0, 1851, 0, 0, + 11908, 0, 9360, 118897, 0, 42776, 66187, 12837, 8829, 7711, 0, 0, 119973, + 43318, 0, 8809, 119974, 0, 0, 120604, 0, 0, 0, 0, 0, 0, 7427, 0, 4588, + 43680, 0, 74484, 0, 2433, 0, 119622, 3352, 74363, 0, 0, 793, 74404, 0, + 305, 567, 67662, 842, 0, 8208, 0, 41695, 1647, 118877, 0, 7837, 917625, + 818, 5337, 917622, 917621, 41376, 119978, 917618, 120594, 74086, 917615, + 917614, 917613, 10973, 66359, 1372, 917609, 917608, 4969, 1254, 917605, + 917604, 917603, 917602, 65228, 78221, 0, 0, 2840, 0, 119982, 0, 0, 3245, + 9068, 68194, 64725, 0, 0, 12991, 0, 2651, 0, 0, 917611, 127026, 0, 0, 0, + 43648, 120812, 0, 43322, 0, 0, 0, 64372, 0, 3226, 655, 752, 7457, 7456, 7452, 3285, 0, 0, 119988, 65610, 0, 0, 0, 671, 250, 7434, 618, 668, 610, 42800, 7431, 1152, 42801, 640, 120666, 7448, 7439, 628, 3905, 73810, 0, - 0, 64749, 67850, 0, 0, 0, 0, 194873, 0, 0, 65945, 0, 0, 119590, 0, 0, 0, - 987, 6927, 11572, 42261, 11464, 3365, 0, 0, 0, 0, 0, 0, 0, 0, 11334, - 43326, 12609, 11519, 0, 5530, 5210, 0, 4627, 0, 5208, 0, 0, 10332, 5218, - 7976, 9156, 0, 3244, 5529, 0, 73894, 0, 5432, 64965, 5527, 74033, 10516, - 7790, 5528, 0, 42140, 120281, 0, 0, 43545, 120282, 0, 4000, 7429, 7428, - 665, 7424, 3206, 120279, 7884, 0, 0, 0, 0, 211, 2509, 0, 120573, 0, 3220, - 0, 0, 10690, 8951, 5214, 42474, 8118, 0, 7048, 4590, 0, 5852, 0, 0, 0, - 1708, 0, 0, 2623, 0, 0, 0, 0, 4698, 66509, 1066, 0, 4701, 0, 120285, - 74225, 119114, 8267, 0, 0, 0, 7516, 0, 2625, 0, 8034, 74309, 0, 3631, - 10955, 7850, 120293, 8416, 0, 0, 0, 0, 12660, 0, 0, 0, 74850, 41069, 0, - 0, 12099, 4310, 10032, 6252, 713, 7990, 0, 3990, 0, 0, 66368, 5017, - 64956, 7071, 0, 0, 1030, 118800, 0, 9513, 41059, 9357, 0, 1773, 0, - 120350, 0, 0, 7745, 9844, 0, 64650, 94, 1880, 74766, 0, 8908, 0, 0, - 65913, 0, 10752, 13003, 0, 0, 41307, 8732, 120338, 0, 1757, 6964, 4696, - 0, 0, 120806, 10029, 3641, 5419, 0, 0, 0, 0, 120344, 0, 0, 8610, 65230, - 7592, 856, 74299, 936, 13289, 0, 43171, 1459, 0, 65243, 0, 19953, 0, - 1504, 0, 0, 0, 74206, 7529, 0, 0, 0, 120782, 4113, 0, 2372, 336, 0, 7509, - 12152, 0, 682, 66458, 41505, 0, 64743, 10593, 1703, 0, 0, 8033, 0, 0, - 9810, 0, 0, 12970, 0, 42351, 10109, 0, 0, 0, 0, 119247, 0, 0, 74291, - 1965, 7069, 43312, 0, 73887, 0, 0, 64370, 6314, 41714, 8501, 0, 0, 74239, - 41317, 0, 5417, 0, 0, 0, 9353, 0, 41315, 917616, 0, 0, 6569, 0, 0, 0, - 119236, 634, 0, 0, 0, 917610, 4165, 8746, 0, 9654, 12856, 6924, 0, 7066, - 0, 0, 0, 41037, 0, 7786, 917607, 41039, 0, 0, 680, 6274, 0, 1181, 7056, - 3174, 0, 0, 0, 65665, 0, 0, 6920, 0, 0, 0, 0, 0, 64644, 126981, 0, 0, - 41028, 0, 6231, 2613, 65302, 40989, 0, 0, 0, 42760, 0, 0, 0, 40987, 4667, - 0, 0, 8828, 0, 0, 1246, 4746, 0, 0, 11021, 4749, 0, 0, 921, 4744, 0, - 12702, 242, 0, 1566, 8217, 0, 64653, 0, 0, 74036, 74505, 43274, 5313, - 951, 0, 0, 0, 7604, 0, 4009, 0, 0, 120562, 0, 0, 64860, 119138, 119902, - 0, 0, 4048, 0, 0, 120596, 1646, 0, 64534, 73995, 0, 0, 119890, 2579, - 119905, 3177, 11357, 9099, 4107, 3441, 119894, 2975, 74442, 9822, 0, 0, - 10084, 73943, 0, 0, 917562, 0, 3399, 9851, 0, 11909, 9059, 0, 7687, 0, - 8854, 0, 0, 0, 0, 0, 0, 1777, 9151, 1137, 0, 749, 42366, 0, 5385, 0, 0, - 0, 0, 5989, 0, 0, 0, 0, 41685, 0, 0, 9769, 41684, 0, 519, 0, 11740, 5766, - 0, 0, 2600, 8848, 120138, 41297, 0, 3666, 74473, 41300, 74468, 65160, 0, - 74542, 0, 74479, 0, 6558, 0, 0, 0, 120750, 252, 0, 41302, 0, 0, 0, 0, 0, - 11729, 8719, 9060, 0, 120139, 10761, 0, 0, 0, 118792, 11734, 0, 11730, 0, - 9593, 119188, 2403, 64808, 0, 0, 11728, 65894, 0, 0, 7764, 0, 0, 120825, - 0, 0, 4282, 8298, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8456, 0, 74783, 65670, 0, 0, - 0, 7774, 10607, 9792, 0, 0, 0, 0, 120764, 0, 10019, 74762, 0, 3458, 4365, - 0, 0, 3647, 0, 2602, 0, 0, 194707, 41135, 0, 0, 0, 64631, 172, 4971, - 41219, 41137, 1889, 7238, 6545, 0, 0, 7597, 10528, 0, 0, 3732, 73910, 0, - 5344, 0, 0, 0, 9062, 119252, 0, 0, 0, 64479, 9232, 0, 0, 0, 0, 10900, - 41531, 1263, 3720, 12048, 0, 64292, 41524, 7227, 119635, 6099, 41534, 0, - 0, 0, 299, 0, 8525, 0, 3524, 0, 8831, 0, 0, 3075, 0, 0, 0, 66362, 0, - 74758, 0, 0, 5845, 0, 0, 0, 2581, 8200, 65114, 74393, 0, 43283, 5551, 0, - 127085, 0, 0, 118855, 0, 0, 8680, 7204, 0, 2588, 2914, 7011, 0, 0, 2471, - 0, 2883, 2749, 119563, 73774, 10913, 0, 0, 8666, 675, 42493, 0, 0, 0, - 6219, 0, 0, 41232, 10928, 0, 41153, 41229, 118967, 0, 3738, 0, 0, 12711, - 3181, 66212, 74289, 0, 42857, 8262, 0, 0, 0, 0, 42347, 12092, 9615, 7234, - 74047, 0, 0, 64674, 0, 0, 73846, 0, 12722, 0, 922, 74426, 74507, 0, 0, - 3218, 120471, 74290, 120469, 64562, 120475, 8569, 11404, 11932, 73728, - 3214, 120461, 120468, 12128, 3207, 65486, 0, 1901, 0, 0, 120460, 7425, - 3205, 0, 0, 0, 0, 0, 0, 65459, 2606, 0, 73897, 0, 11496, 1173, 0, 41272, - 0, 0, 0, 0, 120737, 0, 0, 0, 378, 2610, 0, 65079, 0, 65695, 0, 37, 7068, - 0, 120480, 120479, 3209, 120477, 0, 10638, 9768, 120481, 0, 0, 0, 0, 0, - 0, 65510, 0, 0, 5233, 0, 64792, 0, 0, 0, 0, 7060, 9847, 0, 1685, 595, 0, - 73971, 1292, 8940, 0, 11088, 0, 10004, 126997, 0, 6541, 0, 0, 0, 3243, - 9014, 5606, 0, 538, 64620, 5602, 8467, 74391, 6547, 0, 8203, 0, 0, 8458, - 65211, 8495, 0, 0, 917552, 779, 0, 64367, 2465, 0, 8193, 0, 9730, 9280, - 0, 7065, 74155, 4346, 0, 73798, 504, 0, 120715, 8982, 0, 0, 0, 782, 0, - 10883, 0, 917876, 732, 3737, 0, 1548, 0, 0, 1832, 5604, 5735, 41141, 0, - 4376, 0, 41142, 3745, 0, 0, 42888, 65712, 0, 3869, 11937, 5725, 0, 1783, - 0, 5728, 0, 0, 0, 11918, 66567, 5724, 0, 5727, 0, 0, 0, 764, 0, 0, 43531, - 0, 9033, 0, 42532, 6223, 11042, 0, 11423, 0, 0, 0, 0, 0, 0, 6559, 64557, - 0, 0, 120648, 43019, 0, 10238, 0, 0, 0, 120675, 0, 1478, 9783, 0, 2607, + 0, 64749, 67850, 2107, 0, 0, 4605, 194873, 0, 43372, 65945, 0, 0, 119590, + 0, 0, 0, 987, 6927, 11572, 42261, 11464, 3365, 9971, 0, 0, 0, 0, 0, 0, 0, + 11334, 43326, 12609, 11519, 11503, 5530, 5210, 0, 4627, 0, 5208, 0, 0, + 10332, 5218, 7976, 9156, 0, 3244, 5529, 0, 73894, 0, 5432, 64965, 5527, + 74033, 10516, 7790, 5528, 0, 42140, 120281, 0, 0, 43545, 9887, 0, 4000, + 7429, 7428, 665, 7424, 3206, 120278, 7884, 0, 0, 0, 0, 211, 2509, 0, + 120573, 68672, 3220, 42235, 0, 10690, 8951, 5214, 42474, 8118, 0, 7048, + 4590, 127258, 5852, 0, 0, 127259, 1708, 0, 0, 2623, 11943, 0, 69226, 0, + 4698, 66509, 1066, 119921, 4701, 0, 120285, 74225, 119114, 8267, 0, 0, 0, + 7516, 0, 2625, 0, 8034, 74309, 0, 3631, 10955, 7850, 120293, 8416, 0, 0, + 0, 43384, 12660, 0, 0, 0, 74850, 41069, 0, 0, 12099, 4310, 10032, 6252, + 713, 7990, 0, 3990, 0, 0, 66368, 5017, 64956, 7071, 0, 119144, 1030, + 118800, 0, 9513, 41059, 9357, 0, 1773, 0, 120350, 0, 6339, 7745, 9844, 0, + 64650, 94, 1880, 74766, 0, 8908, 0, 0, 65913, 78470, 10752, 13003, 0, 0, + 41307, 8732, 120338, 0, 1757, 6964, 4696, 0, 0, 64785, 7394, 3641, 5419, + 0, 0, 0, 0, 120344, 43988, 0, 8610, 43062, 7592, 856, 74299, 936, 13289, + 127521, 43171, 1459, 0, 65243, 78638, 19953, 0, 1504, 0, 0, 12913, 74206, + 7529, 0, 0, 0, 120782, 4113, 0, 2372, 336, 0, 7509, 12152, 0, 682, 66458, + 41505, 0, 64743, 10593, 1703, 0, 0, 8033, 0, 0, 9810, 127269, 0, 12970, + 0, 42351, 10109, 0, 0, 194693, 0, 119247, 0, 0, 74291, 1965, 7069, 43312, + 0, 73887, 0, 2087, 64370, 6314, 41714, 8501, 0, 0, 74239, 41317, 0, 2091, + 0, 2090, 0, 9353, 77887, 2077, 77886, 0, 10498, 2083, 77888, 0, 0, + 119236, 634, 0, 0, 0, 69779, 4165, 8746, 0, 9654, 12856, 6924, 0, 7066, + 0, 0, 0, 41037, 42692, 7786, 12959, 41039, 0, 0, 680, 6274, 0, 1181, + 7056, 3174, 0, 0, 0, 65665, 0, 0, 6920, 0, 0, 0, 118965, 0, 64644, + 126981, 0, 0, 41028, 0, 6231, 2613, 65302, 40989, 0, 194696, 0, 42760, 0, + 0, 0, 40987, 4667, 0, 0, 8828, 0, 0, 1246, 4746, 0, 0, 11021, 4749, 0, 0, + 921, 4744, 0, 12702, 242, 0, 1566, 8217, 0, 64653, 78386, 0, 74036, + 74505, 43274, 5313, 951, 0, 0, 0, 7604, 0, 4009, 0, 0, 120562, 0, 0, + 64860, 119138, 119887, 0, 194702, 4048, 0, 0, 120596, 1646, 77890, 64534, + 73995, 0, 0, 119890, 2579, 119905, 3177, 11357, 9099, 4107, 3441, 119894, + 2975, 74442, 9822, 0, 55220, 10084, 73943, 118840, 0, 917562, 0, 3399, + 9851, 0, 11909, 9059, 0, 7687, 0, 6789, 0, 0, 0, 0, 0, 0, 1777, 9151, + 1137, 69767, 749, 42366, 0, 5385, 0, 0, 0, 0, 5989, 0, 0, 0, 0, 41685, + 69223, 0, 9769, 41684, 0, 519, 0, 11740, 5766, 0, 0, 2600, 8848, 120138, + 41297, 0, 3666, 74473, 41300, 74468, 65160, 0, 74542, 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, 0, 11730, 0, 9593, 5757, + 2403, 64808, 55275, 0, 11728, 65894, 0, 0, 7764, 0, 11094, 120825, 0, 0, + 4282, 8298, 0, 0, 0, 0, 0, 0, 0, 127509, 63854, 8456, 0, 74783, 65670, 0, + 78250, 0, 7774, 10607, 9792, 0, 0, 0, 0, 120764, 0, 10019, 74762, 0, + 3458, 4365, 0, 0, 3647, 0, 2602, 0, 0, 194707, 41135, 0, 0, 0, 64631, + 172, 4971, 41219, 41137, 1889, 7238, 6545, 0, 0, 7597, 10528, 0, 0, 3732, + 73910, 194588, 5344, 0, 43366, 43363, 9062, 119252, 0, 0, 0, 64479, 9232, + 0, 0, 0, 194712, 10900, 41531, 1263, 3720, 12048, 0, 64292, 41524, 7227, + 119635, 6099, 41534, 0, 0, 0, 299, 0, 8525, 0, 3524, 917565, 8831, 0, 0, + 3075, 67867, 0, 0, 66362, 0, 74758, 0, 0, 5845, 0, 0, 0, 2581, 8200, + 65114, 68460, 0, 43283, 5551, 0, 120735, 0, 6340, 118855, 0, 78134, 8680, + 7204, 0, 2588, 2914, 7011, 55281, 0, 2471, 0, 2883, 2749, 119563, 73774, + 10913, 0, 0, 8666, 675, 42493, 0, 43571, 0, 6219, 0, 9980, 41232, 10928, + 0, 41153, 41229, 118967, 0, 3738, 0, 0, 12711, 3181, 66212, 74289, 68472, + 42857, 8262, 0, 0, 0, 0, 42347, 12092, 9615, 7234, 74047, 0, 0, 64674, 0, + 0, 73846, 0, 12722, 0, 922, 43983, 74507, 0, 74461, 3218, 120471, 74290, + 120469, 64562, 120475, 8569, 11404, 11932, 73728, 3214, 120461, 120468, + 12128, 3207, 65486, 78729, 1901, 78727, 0, 120460, 7425, 3205, 0, 78737, + 78736, 78735, 43383, 78733, 65459, 2606, 78730, 73897, 0, 11496, 1173, 0, + 41272, 0, 0, 0, 0, 120737, 0, 0, 0, 378, 2610, 0, 65079, 0, 65695, 0, 37, + 7068, 0, 120480, 120479, 3209, 120477, 0, 10638, 9768, 120481, 0, 0, 0, + 0, 0, 0, 65510, 0, 0, 5233, 0, 64792, 0, 0, 0, 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, 0, + 8203, 78488, 0, 8458, 65211, 8495, 119904, 0, 917552, 779, 78314, 64367, + 2465, 0, 8193, 55279, 9730, 9280, 0, 7065, 74155, 4346, 0, 73798, 504, 0, + 120715, 8982, 0, 0, 0, 782, 0, 10883, 0, 194852, 732, 3737, 127253, 1548, + 68650, 0, 1832, 5604, 5735, 41141, 119020, 4376, 0, 11787, 3745, 0, 0, + 42888, 65712, 0, 3869, 11937, 5725, 0, 1783, 68648, 5728, 0, 0, 0, 11918, + 66567, 5724, 0, 5727, 0, 0, 0, 764, 0, 0, 43531, 0, 9033, 0, 42532, 6223, + 11042, 120749, 11423, 0, 0, 0, 43465, 0, 0, 6559, 64557, 0, 0, 120648, + 43019, 43477, 10238, 0, 0, 43377, 120675, 0, 1478, 9783, 11825, 2607, 64740, 0, 7739, 74543, 0, 0, 0, 6132, 0, 63765, 0, 0, 41144, 0, 0, 43537, - 0, 10093, 4369, 917791, 0, 0, 8820, 3947, 0, 0, 11515, 526, 0, 41295, - 194603, 917785, 0, 0, 7688, 917786, 7686, 8288, 11815, 0, 0, 0, 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, 7052, 0, 0, 12990, 1160, 42084, 119650, 41217, - 119660, 10018, 360, 0, 0, 68176, 5863, 3137, 0, 4147, 0, 41216, 7844, - 2616, 119190, 0, 65234, 0, 13076, 3135, 0, 0, 119139, 3142, 194948, 0, - 10819, 119580, 10183, 0, 2608, 1470, 73967, 0, 6227, 0, 0, 74775, 0, - 6163, 0, 0, 0, 0, 0, 8603, 0, 119866, 3306, 10876, 0, 119573, 0, 5834, 0, - 6222, 0, 0, 12086, 0, 1600, 64309, 64939, 0, 64783, 0, 11310, 0, 8882, 0, - 0, 2570, 7021, 0, 0, 43110, 0, 1234, 6540, 6974, 0, 0, 0, 5002, 0, 41286, - 0, 127019, 0, 43585, 0, 6551, 0, 0, 0, 41289, 0, 0, 0, 8977, 602, 120814, - 0, 0, 0, 0, 0, 41279, 0, 0, 0, 0, 43615, 0, 0, 0, 0, 12727, 0, 0, 0, - 9475, 0, 65105, 0, 9633, 10886, 43592, 7831, 0, 0, 0, 73915, 8076, 43048, - 8290, 8291, 43051, 0, 0, 2596, 43584, 0, 13113, 0, 0, 2393, 7058, 9087, - 74067, 0, 41574, 0, 0, 74058, 42035, 0, 0, 0, 0, 9854, 0, 64696, 0, 0, 0, - 74165, 0, 1720, 0, 0, 0, 6529, 7063, 0, 3751, 9120, 0, 0, 1798, 709, 0, - 1354, 1876, 13152, 6557, 12430, 8137, 0, 0, 0, 0, 245, 0, 11456, 41233, - 7070, 0, 0, 6136, 0, 65677, 8682, 41235, 0, 42045, 9804, 0, 432, 3595, 0, - 65437, 0, 74455, 42399, 0, 0, 0, 0, 119658, 0, 0, 0, 0, 8797, 0, 9052, - 64888, 0, 2356, 95, 74784, 10580, 0, 42286, 0, 64640, 0, 119104, 0, 0, 0, - 10063, 12652, 12199, 127030, 0, 2566, 11971, 0, 0, 1065, 0, 0, 0, 2576, - 0, 0, 0, 43604, 0, 0, 74082, 514, 74502, 0, 2921, 43215, 64493, 5772, - 12968, 0, 0, 74580, 917565, 2580, 0, 41341, 41223, 6564, 1463, 41342, 0, - 5293, 0, 0, 3733, 11346, 0, 12054, 0, 74098, 42827, 0, 13091, 0, 0, 0, - 917915, 0, 127026, 0, 74821, 0, 0, 119042, 0, 0, 13090, 66643, 0, 1270, - 1132, 42360, 0, 74096, 66655, 42569, 0, 0, 64761, 0, 41021, 8510, 42432, - 0, 0, 0, 0, 64496, 74109, 0, 9915, 0, 0, 7061, 41336, 3854, 0, 13141, - 917564, 0, 42319, 13082, 0, 7067, 0, 0, 0, 0, 0, 0, 0, 9029, 43543, 0, - 2353, 6308, 0, 74792, 2611, 119186, 0, 0, 0, 0, 0, 66627, 0, 4484, 8509, - 118976, 0, 65233, 0, 41224, 41017, 0, 3747, 10522, 0, 0, 1691, 41226, 0, - 12107, 0, 10905, 65010, 0, 697, 66018, 9284, 4244, 0, 0, 0, 13121, 0, 0, - 12010, 0, 0, 0, 0, 0, 0, 65816, 68111, 0, 0, 65668, 0, 0, 118784, 66365, - 0, 0, 12648, 0, 0, 0, 5785, 41309, 9764, 41316, 65877, 0, 13230, 41299, - 0, 0, 0, 0, 0, 0, 0, 13122, 0, 191, 74119, 0, 8000, 64411, 120652, 42889, - 64850, 41072, 41578, 0, 41577, 0, 10002, 0, 6533, 73802, 41570, 0, 683, - 396, 41580, 68146, 0, 12901, 0, 0, 343, 0, 0, 41360, 0, 0, 4743, 0, 0, - 74040, 74108, 8743, 1724, 1433, 119324, 0, 3739, 6263, 0, 0, 3964, 6592, - 0, 0, 66040, 0, 42568, 0, 0, 1778, 3956, 0, 42070, 6563, 43075, 9018, 0, - 0, 12067, 41312, 0, 5547, 0, 0, 0, 8175, 0, 284, 8108, 934, 0, 74001, - 173, 66460, 7174, 0, 0, 1750, 0, 4394, 0, 1807, 0, 0, 0, 5889, 0, 7180, - 0, 119145, 0, 0, 42471, 6982, 1721, 119144, 7891, 42243, 42160, 2583, - 4512, 0, 0, 0, 0, 0, 3855, 0, 0, 0, 0, 74295, 0, 0, 119140, 3975, 0, - 74087, 0, 12672, 3798, 2703, 0, 0, 0, 9774, 1275, 0, 0, 41095, 3962, 0, - 7873, 41101, 3954, 6457, 4513, 0, 0, 73994, 73992, 1468, 0, 0, 41851, 0, - 41846, 0, 0, 7633, 41849, 0, 4320, 3224, 0, 0, 0, 42531, 0, 1510, 0, - 8256, 0, 11393, 0, 8879, 0, 0, 8770, 0, 0, 127120, 1910, 8671, 0, 4283, - 0, 127117, 0, 0, 2654, 7893, 0, 0, 0, 0, 65106, 42761, 12857, 4581, 8411, - 119029, 127121, 0, 0, 0, 0, 0, 0, 1733, 4392, 2568, 10786, 0, 0, 8184, - 41486, 0, 0, 0, 0, 0, 0, 7185, 7965, 0, 0, 0, 0, 41350, 9129, 0, 0, 0, 0, - 0, 0, 10481, 0, 0, 7171, 0, 340, 0, 0, 0, 0, 0, 0, 0, 917620, 0, 0, 0, 0, - 0, 65203, 11392, 0, 0, 0, 3210, 0, 0, 0, 0, 0, 0, 917619, 0, 0, 10043, 0, - 1186, 41571, 6999, 617, 9464, 0, 3675, 5207, 65062, 5213, 0, 2617, 41348, - 41568, 0, 3253, 120535, 0, 8630, 0, 0, 5596, 5545, 7288, 2586, 64887, 0, - 5217, 0, 0, 0, 0, 64293, 68098, 2635, 0, 0, 0, 0, 0, 7835, 0, 0, 194988, - 0, 64558, 0, 0, 0, 0, 0, 0, 5784, 0, 0, 0, 0, 4011, 0, 68101, 0, 7864, - 4254, 118975, 0, 5600, 3903, 127083, 10447, 5598, 1207, 120521, 0, 3501, - 42582, 43600, 0, 0, 1124, 5597, 0, 0, 9321, 0, 0, 0, 0, 1719, 120576, 0, - 9671, 1125, 4399, 0, 0, 0, 7631, 5488, 65223, 0, 0, 5491, 0, 8937, 43044, - 2604, 74187, 5490, 43046, 5489, 7212, 11768, 43043, 6300, 0, 194789, 0, - 4390, 454, 41397, 0, 9875, 7593, 194792, 0, 118913, 7207, 0, 65901, 2394, - 2575, 0, 3746, 11016, 65752, 0, 0, 917944, 0, 11989, 0, 0, 0, 0, 0, 8249, - 0, 0, 0, 6640, 74806, 2598, 513, 0, 6586, 8656, 0, 0, 65008, 0, 194784, - 0, 194795, 0, 0, 194987, 0, 0, 0, 194986, 12647, 0, 194796, 0, 1036, 0, - 0, 1723, 0, 0, 0, 41579, 2444, 0, 10705, 73876, 0, 74486, 0, 740, 194985, - 0, 194984, 0, 4238, 11071, 9459, 917943, 0, 0, 0, 8121, 10438, 74487, - 42574, 13285, 195001, 11907, 0, 5690, 194999, 0, 0, 43181, 13095, 0, 0, - 64498, 0, 9506, 6978, 194993, 0, 0, 0, 194992, 0, 0, 1122, 317, 0, 0, 0, - 0, 1920, 0, 10173, 827, 0, 0, 0, 120126, 5223, 1304, 0, 119564, 5226, - 12602, 0, 0, 9329, 7758, 9239, 41173, 5224, 5487, 1222, 5692, 41725, 0, - 9674, 5695, 41711, 64627, 19909, 0, 74604, 5691, 287, 866, 233, 0, 0, - 42816, 0, 65140, 74797, 0, 8830, 6568, 42300, 10524, 41175, 0, 0, 0, - 5296, 0, 42492, 0, 0, 3302, 0, 0, 6516, 6515, 6514, 6513, 6512, 0, 7856, - 8690, 0, 0, 12122, 119628, 194813, 0, 1785, 0, 120635, 65153, 194810, - 5138, 0, 0, 0, 0, 4540, 41181, 0, 6200, 0, 5134, 0, 322, 4643, 5132, 0, - 0, 0, 5143, 0, 8790, 0, 0, 194802, 0, 8869, 120601, 0, 42060, 0, 0, 0, 0, - 10270, 10286, 10318, 10382, 43529, 66477, 0, 0, 74170, 0, 3234, 0, 0, - 74376, 43139, 118924, 127084, 120627, 8767, 0, 74489, 41281, 120746, - 5201, 0, 6215, 12714, 6214, 13101, 0, 0, 65268, 0, 0, 0, 11027, 0, 10059, - 10511, 42075, 9767, 789, 1749, 0, 127071, 0, 320, 0, 8647, 0, 3049, 0, - 6471, 42071, 43156, 0, 0, 0, 0, 4960, 5549, 0, 0, 8485, 4671, 5418, 0, - 3351, 0, 0, 10610, 5414, 3064, 6212, 4286, 5421, 0, 9554, 0, 0, 0, 6653, - 0, 0, 64510, 6213, 12885, 0, 119045, 64720, 0, 120759, 73741, 12603, 0, - 11430, 4566, 7843, 9317, 3801, 10342, 10406, 0, 119259, 42576, 0, 5200, - 0, 0, 0, 9183, 0, 74458, 73825, 395, 5482, 5198, 8786, 10390, 74202, - 5196, 43224, 6113, 42009, 5205, 0, 43307, 0, 118973, 0, 12134, 0, 0, - 118843, 9126, 435, 0, 12014, 12893, 8093, 9079, 3203, 192, 65109, 3385, - 0, 64430, 5383, 10294, 10326, 0, 5738, 0, 3336, 0, 5361, 3623, 41159, 0, - 68112, 7872, 8581, 0, 1260, 3149, 5359, 0, 0, 7914, 5357, 0, 0, 2624, - 5364, 0, 11431, 0, 9101, 11058, 0, 0, 0, 42271, 0, 65737, 120793, 0, 0, - 0, 10619, 0, 0, 0, 0, 0, 0, 0, 0, 9319, 7097, 119055, 0, 3232, 73824, - 74581, 0, 0, 0, 41889, 0, 0, 1161, 41895, 74103, 9701, 8622, 0, 0, 73819, - 120588, 5012, 119049, 41362, 0, 917762, 11921, 0, 11769, 0, 0, 41364, 0, - 74228, 41352, 41361, 0, 41366, 0, 3356, 0, 917, 0, 119915, 119923, 8199, - 119912, 119917, 677, 119916, 0, 119932, 0, 0, 0, 0, 3349, 74125, 7022, - 8927, 4739, 0, 5802, 0, 8615, 0, 0, 491, 0, 0, 0, 65837, 0, 8426, 11092, - 9891, 0, 42497, 0, 7586, 42305, 10852, 0, 0, 0, 0, 9095, 7741, 12684, - 41885, 1046, 0, 0, 0, 5815, 5171, 65539, 0, 6932, 0, 42394, 41878, 74849, - 917951, 0, 5169, 11935, 0, 0, 3175, 120822, 1537, 120804, 5176, 8905, - 4136, 4871, 0, 0, 9833, 0, 0, 1128, 65920, 0, 9711, 7057, 9408, 9409, - 9410, 9411, 3662, 9413, 3378, 9415, 9416, 9417, 9418, 8909, 9420, 9421, - 5897, 9423, 5165, 5126, 41385, 0, 41389, 917938, 8955, 3374, 9400, 9401, - 9402, 9403, 9404, 3507, 9406, 7629, 0, 19925, 0, 73832, 183, 0, 2631, 0, - 10627, 41130, 0, 3996, 0, 0, 0, 0, 119307, 0, 6580, 4332, 64825, 66329, - 10726, 66686, 41125, 5899, 41365, 917918, 12085, 0, 574, 917922, 0, - 73828, 5448, 41058, 5446, 73900, 41322, 74768, 5442, 4190, 0, 0, 5451, 0, - 3616, 0, 0, 0, 7708, 0, 10859, 65867, 10345, 10409, 4191, 0, 120719, - 73800, 42181, 0, 0, 4447, 0, 120708, 11788, 65587, 0, 10415, 74102, 0, - 205, 0, 10351, 119076, 0, 9862, 6588, 0, 64697, 0, 41355, 5505, 119154, - 5503, 8021, 0, 119150, 9819, 41357, 8011, 42885, 5507, 12044, 0, 0, - 10026, 5472, 65108, 1191, 13106, 5470, 10329, 5476, 8991, 66322, 0, 0, - 42874, 8550, 42876, 5592, 2919, 0, 2675, 5595, 0, 0, 4367, 0, 0, 5478, - 5904, 5594, 0, 74150, 7291, 5590, 0, 13067, 118909, 0, 0, 9731, 0, 64633, - 194565, 0, 0, 0, 0, 0, 10750, 0, 0, 74545, 0, 0, 12887, 10551, 194564, 0, - 0, 0, 120570, 0, 5199, 0, 1120, 42387, 0, 1444, 9486, 7554, 65839, 0, 0, - 1442, 0, 5894, 0, 0, 0, 0, 74313, 0, 13162, 0, 3334, 0, 118803, 0, 66022, - 0, 0, 1651, 0, 8861, 0, 0, 1142, 0, 8271, 0, 0, 0, 12903, 0, 4002, 0, - 10442, 10676, 3344, 0, 0, 12920, 0, 0, 0, 0, 1277, 0, 7871, 0, 0, 0, 0, - 119015, 120360, 0, 11784, 0, 0, 4700, 66366, 0, 120359, 11012, 0, 0, - 120358, 0, 4973, 8784, 0, 74804, 0, 0, 118981, 42440, 0, 43118, 0, 42364, - 0, 11543, 0, 0, 10346, 10410, 0, 9243, 2464, 0, 6108, 3372, 0, 6247, - 43117, 74526, 0, 74166, 0, 120355, 0, 0, 0, 0, 0, 0, 0, 74217, 3354, 0, - 4192, 9289, 118999, 41191, 3876, 0, 0, 120660, 0, 0, 0, 0, 0, 0, 11603, - 0, 0, 6589, 0, 194679, 0, 0, 0, 0, 0, 42572, 0, 10630, 74827, 1963, - 118889, 0, 11654, 0, 7550, 10686, 5903, 0, 0, 41329, 9662, 917937, 64698, - 3366, 10399, 0, 0, 11013, 0, 917933, 0, 0, 0, 6925, 0, 0, 917929, 0, - 11568, 0, 917931, 64579, 917930, 7852, 0, 0, 12292, 6312, 0, 64672, - 65296, 0, 118957, 0, 416, 12296, 74753, 73834, 0, 11050, 10984, 0, 0, 0, - 0, 0, 0, 9532, 66355, 0, 0, 917925, 64343, 195032, 0, 195031, 0, 0, - 195057, 11445, 0, 195028, 0, 195027, 0, 1021, 0, 9507, 10210, 74544, - 8023, 1200, 12243, 195062, 5282, 195061, 12540, 11545, 0, 120493, 3343, - 4424, 11047, 1885, 43268, 3896, 0, 66497, 2947, 392, 7894, 4391, 68139, - 0, 13059, 74816, 0, 3381, 7942, 0, 0, 0, 0, 0, 3913, 0, 0, 0, 7044, 1265, - 0, 6309, 7045, 7175, 7047, 0, 11791, 0, 0, 8221, 0, 41864, 0, 0, 0, 0, - 167, 0, 917584, 0, 74211, 41897, 0, 0, 0, 0, 0, 2493, 0, 118811, 0, 0, - 64354, 0, 8777, 0, 406, 8884, 2385, 0, 0, 0, 0, 43030, 42027, 12114, 0, - 0, 64936, 0, 0, 120629, 10561, 0, 8365, 0, 0, 65841, 120787, 11601, 0, 0, - 0, 917575, 7834, 74159, 0, 0, 10298, 6624, 4908, 917596, 1639, 0, 0, - 74157, 0, 0, 0, 0, 0, 0, 4817, 0, 194759, 0, 7043, 9600, 11022, 0, 0, 0, - 0, 0, 0, 7548, 64794, 42050, 12291, 0, 194761, 12343, 657, 195054, 64682, - 4461, 1134, 1838, 0, 0, 0, 4468, 0, 0, 0, 4456, 5206, 10720, 0, 42523, 0, - 0, 0, 0, 65550, 260, 4816, 74163, 10687, 0, 4821, 4466, 0, 195043, 4818, + 6761, 10093, 4369, 917791, 0, 0, 8820, 3947, 0, 0, 11515, 526, 0, 41295, + 194603, 917785, 194932, 0, 7688, 917786, 7686, 8288, 11815, 0, 0, 0, + 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, 0, 41216, + 7844, 2616, 119190, 68461, 65234, 0, 13076, 3135, 0, 78143, 119139, 3142, + 194948, 0, 10819, 119580, 10183, 0, 2608, 1470, 73967, 0, 6227, 0, 0, + 74775, 0, 6163, 0, 0, 0, 0, 0, 8603, 0, 119866, 3306, 10876, 43392, + 119573, 0, 5751, 0, 6222, 0, 0, 12086, 7403, 1600, 64309, 64939, 0, + 64783, 0, 11310, 0, 8882, 0, 0, 2570, 7021, 0, 0, 43110, 0, 1234, 6540, + 6974, 0, 0, 0, 5002, 0, 41286, 0, 127019, 0, 43585, 0, 6551, 0, 0, 0, + 41289, 0, 0, 0, 8977, 602, 120814, 0, 0, 0, 0, 0, 41279, 0, 0, 0, 11081, + 43615, 0, 0, 0, 0, 12727, 0, 0, 78397, 9475, 0, 65105, 0, 9633, 10886, + 43592, 7831, 0, 0, 0, 73915, 8076, 43048, 8290, 8291, 43051, 0, 0, 2596, + 43584, 0, 13113, 0, 0, 2393, 7058, 9087, 74067, 68673, 41574, 78337, 0, + 74058, 6376, 0, 0, 0, 0, 9854, 0, 64696, 0, 0, 0, 6994, 0, 1720, 0, 0, 0, + 6529, 7063, 0, 3751, 9120, 0, 0, 1798, 709, 0, 1354, 1876, 13152, 6557, + 12430, 8137, 0, 0, 0, 0, 245, 0, 11456, 41233, 7070, 0, 0, 6136, 0, + 65677, 8682, 41235, 0, 42045, 9804, 0, 432, 3595, 0, 65437, 0, 74455, + 42399, 0, 0, 0, 0, 119658, 0, 0, 0, 77894, 8797, 0, 9052, 64888, 0, 2356, + 95, 74784, 10580, 0, 42286, 0, 64640, 0, 119104, 0, 0, 0, 10063, 12652, + 12199, 127030, 0, 2566, 11971, 0, 0, 1065, 0, 0, 43400, 2576, 0, 0, 0, + 43604, 0, 0, 74082, 514, 74502, 0, 2921, 43215, 64493, 5772, 12968, 0, + 194944, 74580, 43398, 2580, 0, 41341, 41223, 6564, 1463, 41342, 0, 5293, + 0, 0, 3733, 11346, 0, 12054, 0, 74098, 42827, 0, 13091, 0, 0, 0, 917915, + 0, 127025, 0, 74821, 0, 0, 119042, 0, 0, 13090, 66643, 0, 1270, 1132, + 42360, 0, 74096, 66655, 42569, 0, 0, 64761, 0, 41021, 8510, 42432, 0, 0, + 0, 0, 64496, 74109, 0, 9915, 0, 0, 7061, 41336, 3854, 0, 13141, 68413, + 43401, 42319, 13082, 0, 7067, 68221, 0, 0, 0, 0, 0, 0, 9029, 43543, 0, + 2353, 6308, 0, 74792, 2611, 119186, 0, 0, 0, 43664, 0, 66627, 0, 4484, + 8509, 118976, 78116, 65233, 0, 41224, 41017, 0, 3747, 10522, 0, 0, 1691, + 41226, 0, 12107, 44002, 10905, 65010, 0, 697, 66018, 9284, 4244, 0, 0, 0, + 13121, 120036, 0, 12010, 0, 0, 0, 0, 0, 0, 65816, 68111, 0, 0, 65668, 0, + 6618, 118784, 66365, 0, 42234, 12648, 0, 0, 0, 5785, 41309, 9764, 41316, + 65877, 7383, 13230, 41299, 0, 0, 68365, 0, 0, 0, 0, 13122, 0, 191, 74119, + 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, 0, 42680, 41360, 78154, 0, 4743, 0, 0, 74040, 74108, 8743, 1724, + 1433, 119322, 0, 3739, 6263, 0, 0, 3964, 6592, 0, 0, 66040, 0, 42568, 0, + 0, 1778, 3956, 0, 42070, 6563, 43075, 9018, 0, 0, 12067, 41312, 0, 5547, + 74531, 0, 0, 8175, 0, 284, 8108, 934, 0, 74001, 173, 66460, 7174, 917917, + 118822, 1750, 0, 4394, 68368, 1807, 0, 0, 0, 5889, 0, 7180, 0, 119145, 0, + 0, 42471, 6982, 1721, 44022, 7891, 42243, 42160, 2583, 4512, 119360, + 65230, 0, 0, 0, 3855, 0, 0, 0, 0, 74295, 0, 0, 119140, 3975, 0, 74087, 0, + 12672, 3798, 2703, 0, 0, 2109, 9774, 1275, 0, 0, 41095, 3962, 0, 7873, + 41101, 3954, 6457, 4513, 0, 0, 73994, 73992, 1468, 0, 0, 41851, 0, 41846, + 0, 55238, 7633, 41849, 68385, 4320, 3224, 0, 0, 0, 42531, 0, 1510, 0, + 8256, 0, 11393, 0, 8879, 0, 0, 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, 0, 0, 8184, 41486, 0, 7396, 0, 0, 69788, 0, 7185, + 7965, 0, 0, 0, 0, 41350, 9129, 0, 0, 0, 0, 0, 0, 10481, 0, 0, 7171, 0, + 340, 0, 0, 0, 0, 0, 0, 0, 6764, 0, 0, 0, 0, 0, 65203, 11392, 119098, + 119359, 0, 3210, 0, 0, 0, 0, 0, 0, 917619, 0, 0, 10043, 0, 1186, 41571, + 6999, 617, 9464, 0, 3675, 5207, 65062, 5213, 194769, 2617, 41348, 41568, + 0, 3253, 120535, 0, 8630, 0, 0, 5596, 5545, 7288, 2586, 64887, 0, 5217, + 0, 0, 0, 0, 64293, 68098, 2635, 0, 0, 0, 0, 0, 7835, 0, 0, 194988, 0, + 64558, 127122, 0, 127121, 0, 0, 0, 5784, 0, 0, 0, 0, 4011, 917616, 68101, + 0, 7864, 4254, 65095, 0, 5600, 3903, 127083, 10447, 5598, 1207, 120521, + 66689, 3501, 42582, 43600, 194780, 0, 1124, 5597, 0, 0, 9321, 0, 0, 0, 0, + 1719, 68356, 68354, 9671, 1125, 4399, 0, 917610, 0, 7631, 5488, 65223, + 120532, 0, 5491, 0, 8937, 43044, 2604, 74187, 5490, 43046, 5489, 7212, + 11768, 43043, 6300, 0, 194789, 0, 4390, 454, 41397, 0, 9875, 7593, + 194792, 0, 118913, 7207, 0, 65901, 2394, 2575, 0, 3746, 11016, 65752, + 120037, 0, 43423, 0, 11989, 0, 0, 0, 0, 0, 8249, 0, 0, 78531, 6640, + 74806, 2598, 513, 0, 6586, 8656, 0, 127002, 65008, 0, 194784, 0, 194795, + 0, 0, 68475, 0, 0, 0, 78637, 12647, 0, 194796, 0, 1036, 0, 0, 1723, 0, 0, + 0, 41579, 2444, 0, 10705, 73876, 0, 74486, 0, 740, 194985, 194978, + 194984, 0, 4238, 11071, 9459, 68437, 78140, 78139, 0, 8121, 10438, 74487, + 42574, 13285, 55263, 11907, 195000, 5690, 194999, 0, 0, 43181, 13095, 0, + 0, 64498, 0, 9506, 6978, 194993, 77992, 0, 0, 194992, 0, 0, 1122, 317, 0, + 0, 0, 0, 1920, 0, 10173, 827, 0, 0, 78378, 120126, 5223, 1304, 0, 119564, + 5226, 12602, 0, 0, 9329, 7758, 9239, 41173, 5224, 5487, 1222, 5692, + 41725, 69229, 9674, 5695, 41711, 64627, 19909, 0, 74604, 5691, 287, 866, + 233, 0, 0, 42816, 0, 65140, 74797, 0, 8830, 6568, 42300, 10524, 41175, 0, + 0, 0, 5296, 0, 42492, 43402, 0, 3302, 0, 0, 6516, 6515, 6514, 6513, 6512, + 0, 7856, 8690, 0, 0, 12122, 119628, 43976, 0, 1785, 0, 68622, 65153, + 194810, 5138, 0, 0, 0, 0, 4540, 41181, 0, 6200, 0, 5134, 0, 322, 4643, + 5132, 0, 6389, 0, 5143, 0, 8790, 0, 0, 194802, 0, 8869, 120601, 0, 42060, + 0, 0, 0, 0, 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, 0, 65268, 0, 0, 0, 11027, + 0, 10059, 10511, 42075, 9767, 789, 1749, 78890, 127071, 0, 320, 0, 8647, + 0, 3049, 0, 6471, 42071, 43156, 9925, 127356, 127355, 0, 4960, 5549, + 127359, 0, 8485, 4671, 5418, 0, 3351, 127006, 0, 10610, 5414, 3064, 6212, + 4286, 5421, 0, 9554, 0, 0, 0, 6653, 0, 0, 64510, 6213, 12885, 0, 119045, + 64720, 0, 120759, 73741, 12603, 78654, 11430, 4566, 7843, 9317, 3801, + 10342, 10406, 0, 119259, 42576, 0, 5200, 0, 917948, 0, 9183, 0, 74458, + 73825, 395, 5482, 5198, 8786, 10390, 74202, 5196, 43224, 6113, 42009, + 5205, 0, 43307, 0, 118973, 0, 12134, 0, 0, 118843, 9126, 435, 0, 12014, + 12893, 8093, 9079, 3203, 192, 65109, 3385, 0, 64430, 5383, 10294, 10326, + 0, 5738, 0, 3336, 78355, 5361, 3623, 41159, 0, 68112, 7872, 8581, 0, + 1260, 3149, 5359, 0, 0, 7914, 5357, 0, 0, 2624, 5364, 0, 11431, 120030, + 9101, 11058, 78288, 0, 78293, 42271, 78289, 65737, 120793, 0, 65566, + 6717, 10619, 43360, 78385, 78384, 78383, 78382, 78381, 78380, 78379, + 9319, 7097, 119055, 77906, 3232, 73824, 74581, 120632, 0, 0, 41889, 0, 0, + 1161, 41895, 74103, 9701, 8622, 0, 0, 73819, 120588, 5012, 77912, 41362, + 0, 78296, 11921, 0, 11769, 0, 68609, 41364, 0, 74228, 41352, 41361, 0, + 41366, 0, 3356, 0, 917, 68422, 119915, 119923, 8199, 78389, 119917, 677, + 119916, 0, 119932, 0, 0, 0, 0, 3349, 74125, 7022, 8927, 4739, 0, 5802, 0, + 8615, 0, 0, 491, 0, 0, 0, 65837, 0, 8426, 11092, 9891, 0, 42497, 0, 7586, + 42305, 10852, 0, 0, 4606, 68448, 9095, 7741, 12684, 41885, 1046, 0, 0, 0, + 5815, 5171, 65539, 0, 6932, 78315, 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, 9402, 9403, 9404, + 3507, 9406, 7629, 0, 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, 73900, 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, + 78311, 11788, 65587, 68129, 10415, 74102, 0, 205, 0, 10351, 119076, 0, + 9862, 6588, 43257, 64697, 73998, 41355, 5505, 119154, 5503, 8021, 0, + 119150, 9819, 41357, 8011, 42885, 5507, 12044, 0, 0, 10026, 5472, 65108, + 1191, 13106, 5470, 10329, 5476, 8991, 66322, 69778, 78267, 42874, 8550, + 42876, 5592, 2919, 0, 2675, 5595, 78411, 0, 4367, 0, 0, 5478, 5904, 5594, + 0, 74150, 7291, 5590, 77849, 13067, 118909, 120372, 0, 9731, 0, 64633, + 77857, 77854, 77855, 77852, 77853, 77850, 10750, 43714, 77858, 74545, 0, + 0, 12887, 10551, 194564, 77866, 77867, 77864, 77865, 9929, 5199, 9936, + 1120, 42387, 0, 1444, 9486, 7554, 65839, 55252, 0, 1442, 0, 5894, 0, 0, + 0, 0, 74313, 0, 13162, 0, 3334, 0, 118803, 77881, 66022, 0, 0, 1651, 0, + 8861, 0, 0, 1142, 0, 8271, 0, 0, 0, 12903, 0, 4002, 43626, 10442, 10676, + 3344, 0, 0, 12920, 194560, 0, 0, 66642, 1277, 0, 7871, 0, 0, 78853, 0, + 78854, 120360, 0, 11784, 0, 78012, 4700, 66366, 78858, 120359, 11012, 0, + 78856, 120358, 77879, 4973, 8784, 77877, 74804, 77874, 77869, 77871, + 42440, 0, 43118, 0, 42364, 6774, 6773, 0, 120369, 10346, 10410, 78859, + 9243, 2464, 0, 6108, 3372, 0, 6247, 43117, 74526, 0, 74166, 0, 120355, 0, + 0, 0, 0, 0, 0, 0, 74217, 3354, 0, 4192, 9289, 118999, 41191, 3876, 0, 0, + 120660, 43696, 43380, 0, 0, 0, 0, 11603, 0, 0, 6589, 0, 194679, 0, 0, 0, + 0, 0, 42572, 0, 10630, 74827, 1963, 118889, 0, 11654, 0, 7550, 10686, + 5903, 0, 78009, 41329, 9662, 917937, 64698, 3366, 10399, 0, 0, 11013, 0, + 917933, 0, 78621, 194672, 6925, 0, 0, 917929, 0, 11568, 0, 917931, 64579, + 917930, 7852, 0, 0, 6754, 6312, 0, 64672, 65296, 0, 118957, 0, 416, + 12296, 68457, 73834, 68177, 11050, 10984, 0, 0, 0, 0, 0, 0, 9532, 66355, + 0, 0, 917925, 64343, 195032, 0, 195031, 0, 0, 195057, 11445, 0, 195028, + 195056, 195027, 10185, 1021, 0, 9507, 10210, 74544, 8023, 1200, 12243, + 78001, 5282, 78003, 12540, 11545, 0, 120493, 3343, 4424, 11047, 1885, + 43268, 3896, 78626, 66497, 2947, 392, 7894, 4391, 68139, 0, 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, 0, 78301, 0, 74211, 41897, 68477, 0, 917583, 0, 0, 2493, 0, + 118811, 0, 0, 64354, 0, 8777, 0, 406, 8884, 2385, 0, 0, 0, 917573, 43030, + 42027, 12114, 0, 917579, 64936, 0, 0, 120629, 10561, 0, 8365, 0, 0, + 65841, 120787, 11601, 0, 74121, 0, 917575, 7834, 74159, 0, 0, 10298, + 6624, 4908, 917596, 1639, 0, 0, 74157, 6327, 6724, 0, 0, 0, 0, 4817, + 78446, 194759, 0, 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, 0, 41403, 119977, 0, 0, 41406, 43273, 74160, 119983, 73939, 119985, 119984, 119979, 41404, 1165, 119980, 4451, 13087, 0, 11284, 119987, - 73855, 65155, 43014, 5439, 9363, 0, 3375, 0, 5900, 0, 7889, 2722, 42262, - 0, 0, 0, 0, 0, 0, 0, 11401, 0, 0, 0, 0, 0, 0, 0, 65438, 0, 7280, 0, 0, 0, - 4868, 119967, 119966, 0, 0, 0, 43161, 0, 119964, 0, 5182, 0, 120542, 0, - 0, 4226, 120798, 12135, 5732, 4464, 0, 0, 977, 4458, 0, 0, 64770, 0, 0, - 344, 0, 194790, 1395, 64279, 0, 0, 0, 786, 0, 43174, 64340, 0, 0, 0, - 43026, 7612, 10132, 64413, 0, 0, 0, 0, 0, 0, 120498, 0, 120734, 0, - 119160, 10204, 0, 0, 0, 0, 1399, 0, 0, 0, 8852, 0, 241, 0, 4907, 0, 0, - 7932, 9727, 0, 74255, 8748, 0, 0, 0, 0, 42780, 0, 0, 0, 4217, 0, 8650, 0, - 0, 0, 0, 118872, 43099, 3965, 0, 0, 0, 13300, 0, 0, 0, 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, 0, 42825, 41854, 5304, 0, 0, 6919, - 8619, 119655, 10038, 66454, 9592, 42851, 126993, 1542, 0, 0, 0, 0, 0, - 74311, 0, 0, 10181, 0, 0, 0, 7779, 0, 10195, 9479, 6029, 0, 0, 9689, 0, - 0, 8993, 66358, 0, 42378, 3368, 606, 0, 7697, 0, 0, 2030, 0, 6027, 8370, - 4322, 0, 65207, 0, 0, 0, 0, 0, 2735, 42831, 0, 0, 74866, 8881, 119047, 0, - 0, 73946, 0, 0, 0, 68140, 0, 9576, 0, 3347, 4160, 5154, 0, 3794, 66564, - 66514, 0, 7709, 41112, 0, 66560, 42041, 4572, 0, 66561, 0, 41113, 0, - 1615, 5855, 809, 0, 0, 0, 0, 5799, 0, 0, 0, 7260, 0, 43031, 64425, 65128, - 127061, 64386, 65257, 0, 0, 120607, 9347, 0, 6532, 0, 0, 0, 0, 65828, 0, - 283, 917917, 0, 532, 0, 0, 0, 120609, 0, 3370, 0, 11361, 5443, 0, 8153, - 73767, 0, 10741, 0, 0, 0, 0, 65495, 64706, 0, 0, 0, 0, 9466, 119600, - 9824, 0, 0, 0, 0, 915, 0, 0, 0, 0, 0, 0, 43264, 0, 0, 0, 0, 0, 0, 0, - 68161, 64550, 5186, 12890, 0, 0, 12108, 0, 65124, 0, 66043, 0, 0, 43107, - 0, 0, 42562, 0, 0, 0, 0, 11485, 6103, 127123, 0, 11718, 0, 12889, 0, 0, - 0, 0, 0, 0, 0, 1630, 0, 65483, 0, 12565, 0, 65476, 0, 0, 119554, 9283, - 7700, 917537, 9690, 65499, 0, 64593, 512, 3376, 118862, 0, 0, 0, 632, - 12940, 0, 42529, 0, 0, 5957, 0, 8926, 0, 0, 0, 10745, 10174, 0, 64581, - 5386, 120686, 11713, 10633, 120531, 5056, 0, 0, 0, 120773, 0, 9812, 0, - 4460, 0, 0, 0, 0, 0, 0, 0, 64278, 0, 0, 0, 0, 64389, 2953, 73879, 1801, - 12835, 917627, 0, 73823, 0, 66375, 0, 702, 42579, 0, 0, 13074, 0, 0, 0, - 0, 12106, 0, 74207, 1755, 10482, 12863, 0, 1163, 2951, 9522, 74079, - 195076, 120674, 0, 3384, 120728, 10702, 830, 0, 0, 0, 8451, 0, 0, 0, - 120762, 0, 0, 0, 0, 2908, 0, 0, 64902, 4243, 0, 12239, 0, 0, 4441, 0, 0, - 73940, 64352, 0, 0, 411, 0, 0, 0, 0, 0, 41890, 0, 2730, 41604, 0, 5428, - 194743, 3364, 42265, 0, 0, 118816, 0, 9684, 216, 0, 1401, 0, 0, 0, 0, 0, - 9158, 0, 120664, 5768, 0, 0, 0, 484, 0, 0, 0, 65895, 0, 0, 3338, 73935, - 572, 7041, 2736, 0, 0, 0, 2794, 8807, 64491, 0, 5438, 5222, 5381, 43114, - 0, 5193, 5125, 5456, 5509, 0, 194747, 9534, 0, 0, 0, 3430, 0, 0, 0, 0, - 981, 0, 4330, 120673, 120536, 1824, 10908, 0, 7034, 41683, 64617, 0, - 73754, 3957, 0, 64547, 0, 674, 63991, 0, 2946, 5354, 5251, 5328, 5307, - 3759, 11411, 8364, 5123, 0, 5281, 5469, 5121, 0, 0, 0, 5130, 0, 0, 0, 0, - 120726, 1221, 2733, 11746, 0, 5216, 0, 0, 0, 0, 3468, 0, 9230, 5939, 0, - 0, 0, 120677, 120729, 7278, 10321, 10289, 64613, 10385, 41706, 0, 0, 0, - 0, 11739, 0, 41981, 0, 5938, 0, 0, 12448, 7576, 10401, 10337, 73852, 0, + 73855, 65155, 43014, 5439, 9363, 127558, 3375, 0, 5900, 0, 7889, 2722, + 42262, 0, 0, 0, 0, 0, 0, 0, 11401, 0, 0, 68459, 0, 0, 0, 0, 65438, 0, + 7280, 0, 0, 0, 4868, 119967, 119966, 0, 0, 0, 43161, 0, 119964, 0, 5182, + 0, 120542, 0, 0, 4226, 120798, 12135, 5732, 4464, 0, 0, 977, 4458, 0, 0, + 64770, 74838, 0, 344, 0, 194790, 1395, 64279, 0, 0, 0, 786, 0, 43174, + 64340, 0, 0, 0, 43026, 7612, 10132, 64413, 0, 0, 0, 0, 0, 0, 68444, 0, + 120734, 0, 119160, 10204, 0, 0, 0, 0, 1399, 0, 65217, 0, 8852, 0, 241, 0, + 4907, 0, 0, 7932, 9727, 0, 74255, 8748, 0, 0, 0, 0, 42780, 0, 0, 0, 4217, + 0, 8650, 0, 0, 0, 0, 118872, 43099, 3965, 119119, 6719, 0, 13300, 78439, + 0, 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, 0, 42825, + 41854, 5304, 0, 78516, 6919, 8619, 119655, 10038, 66454, 9592, 42851, + 126993, 1542, 0, 0, 0, 0, 0, 74311, 78497, 0, 10181, 0, 43624, 0, 7779, + 0, 10195, 9479, 6029, 0, 0, 9689, 0, 0, 8993, 66358, 0, 42378, 3368, 606, + 0, 7697, 69237, 69787, 2030, 0, 6027, 8370, 4322, 0, 65207, 0, 0, 0, 0, + 0, 2735, 42831, 77935, 127120, 74866, 8881, 119047, 0, 0, 73946, 0, 0, 0, + 68140, 0, 9576, 0, 3347, 4160, 5154, 55288, 3794, 66564, 8530, 127063, + 7709, 41112, 0, 66560, 42041, 4572, 12876, 66561, 0, 6758, 0, 1615, 5855, + 809, 0, 0, 0, 0, 5799, 0, 0, 0, 7260, 0, 43031, 64425, 65128, 127061, + 64386, 65257, 0, 68616, 120607, 9347, 0, 6532, 0, 0, 0, 0, 65828, 0, 283, + 68665, 78813, 532, 78663, 0, 0, 120609, 0, 3370, 0, 11361, 5443, 78778, + 8153, 73767, 0, 10741, 0, 0, 0, 0, 65495, 64706, 0, 43344, 0, 78870, + 9466, 78866, 9824, 0, 0, 0, 0, 915, 43425, 0, 0, 0, 0, 0, 43264, 0, 0, 0, + 0, 78864, 6730, 78862, 68161, 64550, 5186, 12890, 0, 0, 12108, 0, 65124, + 43127, 66043, 0, 6326, 43107, 77826, 0, 42562, 0, 0, 0, 0, 11485, 6103, + 127123, 0, 11718, 0, 12889, 0, 0, 0, 0, 0, 55245, 0, 1630, 0, 65483, 0, + 12565, 0, 65476, 120013, 0, 119554, 9283, 7700, 917537, 9690, 65499, 0, + 64593, 512, 3376, 68210, 0, 0, 77892, 632, 12940, 77891, 42529, 78587, 0, + 5957, 0, 8926, 0, 0, 0, 10745, 10174, 7379, 64581, 5386, 120686, 11713, + 10633, 120531, 5056, 0, 0, 0, 120773, 0, 9812, 0, 4460, 0, 0, 0, 0, 0, 0, + 0, 64278, 0, 43466, 0, 0, 64389, 2953, 73879, 1801, 12835, 119029, 0, + 73823, 0, 66375, 2085, 702, 42579, 77884, 77885, 13074, 77883, 0, 0, 0, + 12106, 0, 74207, 1755, 10482, 12863, 77898, 1163, 2951, 9522, 74079, + 78266, 120674, 0, 3384, 69227, 10702, 830, 77902, 77899, 77900, 8451, 0, + 0, 0, 120762, 0, 0, 0, 0, 2908, 0, 43386, 64902, 4243, 0, 12239, 0, 0, + 4441, 0, 0, 73940, 64352, 127513, 0, 411, 0, 0, 0, 4056, 118992, 41890, + 0, 2730, 41604, 0, 5428, 194743, 3364, 42265, 0, 0, 118816, 194742, 9684, + 216, 0, 1401, 0, 44012, 0, 0, 0, 9158, 77842, 120664, 5768, 0, 0, 0, 484, + 0, 0, 0, 65895, 0, 0, 3338, 73935, 572, 7041, 2736, 67605, 0, 0, 2794, + 8807, 64491, 77847, 5438, 5222, 5381, 43114, 0, 5193, 5125, 5456, 5509, + 77846, 194747, 9534, 0, 0, 0, 3430, 0, 0, 0, 0, 981, 0, 4330, 73929, + 120536, 1824, 10908, 0, 7034, 41683, 64617, 0, 73754, 3957, 64358, 64547, + 0, 674, 63991, 0, 2946, 5354, 5251, 5328, 5307, 3759, 11411, 8364, 5123, + 0, 5281, 5469, 5121, 119245, 0, 0, 5130, 0, 0, 77990, 0, 120726, 1221, + 2733, 11746, 77991, 5216, 0, 0, 0, 0, 3468, 7033, 9230, 5939, 0, 0, 0, + 120677, 68400, 7278, 10321, 10289, 64613, 10385, 41706, 0, 0, 0, 0, + 11739, 0, 41981, 0, 5938, 0, 0, 12448, 7576, 10401, 10337, 73852, 0, 13057, 0, 126976, 0, 10009, 0, 64304, 0, 12165, 0, 0, 9885, 0, 8077, 0, - 0, 0, 0, 0, 0, 0, 4220, 10725, 10433, 0, 0, 4987, 64519, 0, 0, 0, 0, 0, - 10970, 11733, 0, 120792, 0, 19944, 0, 9009, 8551, 0, 11468, 74003, 7575, - 0, 2724, 0, 0, 12313, 119949, 515, 119947, 42791, 63987, 119942, 119943, - 119940, 119941, 119938, 9775, 4046, 4589, 4521, 0, 9141, 0, 0, 2741, - 64399, 6197, 1370, 0, 0, 0, 0, 0, 0, 6184, 8606, 3303, 41372, 11786, - 9473, 66203, 66177, 0, 11593, 43007, 4478, 66178, 0, 0, 2744, 0, 4477, 0, - 814, 42066, 66183, 66204, 66194, 119961, 66198, 41880, 66188, 66197, - 119954, 11955, 66190, 66191, 41111, 66189, 73788, 7788, 4847, 0, 0, 0, 0, - 0, 1581, 6535, 0, 12954, 430, 194934, 194939, 0, 194938, 5278, 4945, - 42883, 4950, 0, 120547, 0, 7269, 0, 5964, 12908, 0, 0, 74764, 74477, - 119146, 194936, 4949, 0, 443, 0, 4944, 5467, 119603, 0, 65137, 6044, - 65392, 0, 4213, 0, 41303, 0, 194931, 0, 41306, 73984, 2698, 0, 0, 12072, - 3193, 0, 41304, 824, 0, 12091, 119814, 119813, 119816, 4673, 64804, 4678, - 119820, 119819, 65059, 0, 119808, 0, 5481, 3490, 1199, 119811, 8356, - 119829, 119832, 4677, 12688, 3102, 0, 4672, 119822, 119821, 5531, 119823, - 42575, 119825, 119828, 4674, 4548, 0, 0, 0, 119946, 8025, 0, 127024, - 1855, 0, 119945, 0, 120554, 0, 0, 0, 0, 2745, 11797, 0, 0, 119939, 4654, - 0, 0, 194959, 73993, 10525, 4649, 65209, 0, 0, 4648, 43080, 0, 0, 0, - 6246, 64950, 7828, 4650, 0, 0, 119086, 4653, 7822, 0, 0, 43187, 8669, 0, - 0, 65093, 0, 0, 2716, 0, 0, 0, 0, 0, 0, 11060, 8547, 2711, 42165, 0, - 119228, 7992, 0, 0, 4662, 0, 0, 9149, 9146, 599, 4657, 194963, 120754, - 194962, 4656, 10130, 0, 7811, 40994, 194965, 6414, 5967, 4658, 3725, - 5713, 5814, 4661, 42434, 0, 0, 0, 64904, 9026, 10833, 0, 7547, 4867, 0, - 10008, 10222, 3054, 194956, 9744, 0, 7605, 4622, 119656, 0, 0, 0, 0, 0, - 9045, 0, 4225, 19926, 0, 12880, 65307, 4617, 0, 0, 0, 4616, 10518, 10423, - 10359, 0, 5958, 0, 0, 4215, 9789, 917941, 4321, 4621, 0, 41313, 522, - 5368, 0, 65803, 0, 5366, 12201, 5372, 0, 0, 0, 7720, 0, 2696, 0, 0, 4638, - 0, 1790, 0, 5965, 64363, 66569, 0, 194968, 5376, 1835, 5335, 194966, 0, - 4633, 0, 68119, 1180, 4632, 0, 5387, 5333, 0, 0, 42094, 5331, 4634, - 11928, 0, 5338, 4637, 0, 5971, 42414, 0, 1268, 65097, 42361, 0, 0, 73853, - 1427, 0, 0, 5970, 3431, 0, 10358, 10422, 4758, 0, 1608, 2738, 0, 10455, - 4753, 74026, 11344, 4222, 6240, 5231, 74384, 0, 0, 6248, 0, 0, 0, 42318, - 0, 5229, 4757, 0, 0, 2728, 4752, 64563, 65235, 5234, 0, 0, 0, 10713, 0, - 0, 2622, 7460, 0, 0, 0, 8954, 74760, 65189, 2632, 0, 10108, 1011, 5574, - 1853, 2709, 65139, 5577, 0, 0, 118871, 0, 8965, 7635, 42177, 5316, 0, - 5314, 6451, 5572, 0, 5312, 0, 5525, 5330, 5319, 0, 0, 194907, 119016, 0, - 0, 0, 0, 0, 195009, 0, 74022, 0, 64609, 0, 0, 0, 5721, 0, 10398, 8632, - 66465, 11267, 73961, 0, 5720, 0, 1692, 4219, 4610, 8696, 4305, 0, 4609, - 0, 4614, 541, 0, 5287, 5309, 5285, 0, 5961, 4647, 56, 4216, 10577, 41381, - 601, 4613, 0, 0, 0, 4608, 64260, 41124, 5190, 67628, 0, 68145, 7086, 0, - 119243, 67620, 0, 2734, 11074, 0, 67627, 43593, 0, 67625, 5960, 0, 8992, - 65293, 0, 1782, 67622, 68114, 119950, 0, 68180, 5501, 119952, 42508, - 7442, 120749, 359, 41253, 119957, 6239, 119956, 41256, 0, 68134, 0, - 74209, 0, 9346, 118904, 41254, 0, 43291, 3767, 5737, 0, 4865, 0, 5740, 0, - 5736, 4368, 0, 7193, 68137, 0, 5739, 41024, 4866, 0, 73904, 0, 4869, - 120563, 0, 4223, 0, 6650, 0, 0, 0, 0, 4870, 0, 74805, 66566, 0, 120758, - 0, 0, 0, 10122, 4864, 66568, 4144, 7937, 0, 6245, 0, 2732, 66459, 745, 0, - 195097, 0, 4777, 7821, 0, 0, 42775, 0, 194954, 0, 3097, 0, 5966, 0, 4778, - 0, 10863, 0, 4781, 0, 64407, 0, 0, 8577, 0, 118964, 43285, 10216, 4782, - 0, 0, 120757, 917924, 12325, 0, 8717, 0, 0, 4776, 0, 11492, 8700, 0, - 13176, 0, 10426, 0, 917599, 10362, 0, 1715, 4849, 8242, 9561, 73922, - 43278, 42635, 0, 0, 5963, 917926, 0, 0, 4850, 0, 1607, 466, 4853, 118995, - 4854, 0, 5164, 0, 1350, 5124, 64420, 1993, 5362, 8471, 2708, 0, 12445, - 3785, 234, 3199, 0, 41268, 4848, 2530, 0, 4798, 1964, 0, 73762, 10458, 0, - 8576, 0, 0, 2704, 4794, 0, 0, 8322, 4797, 74074, 0, 2694, 4792, 0, 2439, - 65104, 0, 0, 303, 0, 0, 0, 2437, 0, 4221, 4844, 118869, 0, 0, 0, 0, 0, - 43292, 0, 2441, 10739, 65090, 0, 119327, 0, 2451, 2714, 119326, 0, 0, - 4937, 74541, 753, 5849, 10597, 43089, 11722, 9248, 0, 42879, 11725, 0, 0, - 2726, 3107, 73958, 4941, 64937, 917538, 9140, 1408, 5261, 41412, 0, 181, - 0, 4942, 9539, 4938, 0, 65201, 5259, 9369, 64185, 4142, 5257, 0, 0, 4964, - 5264, 64178, 64177, 12979, 0, 64182, 64181, 64180, 64179, 9482, 4873, - 41231, 1822, 42526, 0, 12758, 3865, 0, 0, 10500, 0, 0, 0, 0, 9830, 0, - 389, 10893, 7521, 0, 4872, 5463, 0, 3125, 9567, 0, 4878, 5459, 4874, 0, - 9557, 5465, 0, 0, 11494, 0, 9563, 10865, 74570, 43279, 64186, 0, 0, - 64191, 64190, 8898, 64188, 0, 41030, 0, 0, 917835, 0, 917834, 0, 917837, - 41031, 0, 11960, 0, 3082, 0, 0, 0, 10573, 0, 7079, 5856, 127043, 5163, - 127042, 0, 1817, 66724, 0, 0, 10564, 7763, 13077, 41813, 4400, 41745, - 64207, 10275, 8925, 10371, 10307, 41814, 4248, 0, 0, 4541, 6299, 64204, - 64203, 64201, 64200, 64199, 64198, 0, 42156, 0, 0, 64193, 64192, 0, 0, - 64197, 64196, 64195, 64194, 13282, 64175, 64174, 64173, 0, 846, 0, 0, 0, - 0, 0, 0, 2543, 12163, 3108, 9745, 64167, 64166, 64165, 64164, 41743, 0, - 64169, 64168, 64949, 10972, 10251, 10247, 42768, 715, 64161, 43299, 9453, - 5348, 10943, 120378, 0, 11352, 550, 9910, 0, 0, 66579, 11551, 0, 0, 9504, - 7187, 0, 10373, 0, 120791, 10261, 10253, 6404, 10277, 0, 11984, 1552, - 65222, 6998, 0, 0, 3128, 4789, 5067, 5066, 118849, 4784, 0, 8827, 1146, - 5065, 0, 0, 68136, 0, 0, 5064, 2431, 0, 9450, 1809, 0, 0, 0, 5062, 1264, - 64817, 13254, 11697, 0, 9785, 64716, 0, 3933, 74559, 4740, 7954, 0, 0, - 42609, 0, 74175, 0, 127016, 0, 0, 42130, 0, 5151, 917831, 917823, 0, 0, - 0, 7620, 3800, 65122, 0, 0, 8355, 7854, 0, 954, 64927, 4185, 41045, 0, - 41438, 41439, 73978, 10711, 4593, 0, 120584, 0, 64774, 13309, 10532, - 66727, 0, 0, 0, 64759, 0, 5166, 9888, 0, 5148, 42834, 0, 120634, 118946, - 64140, 0, 64131, 3119, 917814, 0, 3060, 64135, 9986, 0, 0, 636, 11698, 0, - 0, 9916, 11701, 7836, 0, 64137, 8320, 118969, 8863, 0, 119960, 1477, - 43289, 0, 74358, 8618, 0, 9908, 0, 0, 0, 3937, 12312, 0, 0, 0, 64781, - 912, 10498, 4536, 119963, 74532, 0, 6244, 0, 194580, 3935, 120665, 0, 0, - 11950, 5392, 42248, 65129, 0, 5397, 0, 12046, 12599, 0, 0, 5395, 0, 5393, - 354, 0, 119948, 0, 0, 0, 42039, 0, 0, 64142, 626, 0, 5895, 0, 0, 5780, 0, - 0, 0, 0, 0, 43297, 0, 4311, 4644, 8818, 0, 0, 0, 73818, 3918, 66452, - 3797, 1644, 119944, 9658, 4140, 11385, 65947, 6455, 9030, 813, 0, 68131, - 4146, 0, 5360, 2466, 0, 0, 0, 6249, 42117, 0, 0, 0, 0, 74046, 120583, - 4911, 988, 917809, 0, 0, 0, 7054, 64147, 0, 64920, 917812, 917803, - 118933, 120349, 0, 0, 11981, 12202, 0, 11032, 120725, 6093, 11608, 975, - 0, 65843, 170, 0, 0, 4169, 0, 41859, 6058, 120401, 0, 120657, 0, 0, 0, - 9818, 10178, 10324, 42106, 5898, 74540, 4738, 41856, 7062, 917865, 4737, - 11779, 4742, 120564, 917866, 73736, 0, 9825, 6448, 12700, 127008, 4831, - 0, 0, 0, 5300, 4741, 42108, 0, 64159, 4736, 64148, 0, 849, 0, 0, 43288, - 0, 66620, 0, 0, 65549, 9496, 64598, 0, 0, 7876, 68132, 917872, 3928, - 917870, 65283, 10706, 7198, 0, 4842, 12053, 0, 0, 4841, 0, 4171, 12008, - 6251, 3923, 1490, 0, 119591, 0, 40972, 5245, 0, 10114, 42001, 41888, - 4845, 8332, 40974, 0, 4840, 9077, 917851, 1747, 917849, 4825, 0, 917852, - 0, 0, 0, 0, 0, 0, 0, 9850, 118937, 367, 1472, 917859, 6687, 1274, 0, - 5905, 12339, 8919, 73953, 10907, 65261, 11023, 119559, 4830, 9134, 0, - 64126, 43011, 0, 0, 64101, 0, 0, 4824, 10614, 120390, 0, 1888, 1960, - 7861, 917856, 0, 41836, 43012, 6052, 6064, 54, 43009, 12214, 0, 6211, 0, - 358, 41997, 41833, 11442, 10758, 65774, 0, 120384, 64115, 120385, 0, 0, - 0, 119053, 0, 12765, 64121, 126998, 12962, 0, 0, 4017, 12827, 5241, - 120392, 0, 41118, 3924, 0, 11366, 917843, 0, 0, 917846, 41116, 917844, - 917845, 0, 11363, 12057, 11917, 1567, 74000, 4721, 0, 66202, 8957, 4139, - 0, 0, 0, 0, 0, 12740, 0, 4722, 12761, 0, 12759, 4725, 0, 4726, 0, 0, 0, - 917904, 917905, 0, 12755, 12762, 4015, 0, 8052, 476, 0, 0, 0, 64212, - 41020, 1382, 64209, 64216, 64215, 64214, 1656, 41831, 0, 0, 41843, 8720, - 3908, 1452, 13111, 0, 64067, 0, 8552, 64113, 41845, 3849, 0, 66232, 9778, - 120066, 5891, 7064, 55, 74437, 917911, 0, 0, 7935, 67586, 0, 1114, 0, - 67585, 120052, 120053, 120050, 120051, 3938, 120057, 65417, 64717, - 120060, 120061, 65415, 120059, 6292, 65303, 7955, 6452, 4713, 917887, - 66249, 917885, 917890, 917891, 65152, 719, 120044, 120045, 120042, 41944, - 4532, 65412, 120046, 10868, 4717, 2349, 5902, 66450, 4712, 917902, - 917899, 917900, 0, 8155, 4718, 3942, 4714, 9625, 0, 0, 0, 12006, 0, 0, 0, - 0, 0, 65414, 6454, 1229, 0, 66437, 66025, 917894, 0, 42500, 120508, 4809, - 9623, 917874, 917879, 917880, 917877, 917878, 65405, 68159, 917881, - 917882, 5365, 4545, 8901, 917566, 119555, 4813, 0, 0, 5925, 4808, 64330, - 0, 65475, 0, 0, 4814, 0, 4810, 0, 0, 64928, 10543, 0, 3522, 0, 414, - 65404, 0, 0, 6456, 73820, 0, 11905, 917883, 0, 0, 0, 74495, 0, 0, 0, - 118820, 9751, 65407, 0, 11770, 3919, 0, 0, 65061, 0, 0, 0, 12235, 0, 0, - 0, 66576, 0, 64080, 0, 64090, 0, 0, 10162, 10310, 0, 8454, 0, 42038, 387, - 41363, 12737, 0, 4780, 0, 0, 64310, 64621, 0, 0, 0, 0, 0, 0, 8896, 0, - 375, 6976, 0, 119005, 0, 0, 0, 119202, 119203, 12526, 43120, 2315, 0, - 1938, 119197, 0, 4529, 119200, 119201, 119198, 119199, 0, 0, 0, 13150, - 64492, 0, 0, 0, 12902, 0, 42891, 66327, 74298, 0, 10799, 0, 2587, 66372, - 0, 4193, 120334, 4241, 0, 7998, 0, 0, 0, 0, 2316, 118821, 0, 0, 0, 64297, - 74799, 0, 74140, 0, 5373, 0, 0, 3762, 10015, 0, 119232, 0, 41590, 0, 0, - 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, 0, 68138, - 13072, 1894, 0, 0, 65478, 43310, 7231, 0, 11773, 0, 0, 0, 0, 2551, 0, - 6453, 10200, 6235, 0, 0, 0, 0, 4470, 0, 0, 7780, 5369, 118958, 5249, 0, - 5367, 8756, 0, 0, 5377, 120585, 68143, 1688, 0, 0, 0, 0, 0, 0, 0, 41697, - 41319, 1300, 10650, 41692, 64505, 4668, 0, 119624, 1465, 10850, 3943, 0, - 41205, 0, 0, 0, 0, 5352, 0, 0, 8839, 41314, 0, 7785, 41204, 0, 41209, 0, - 0, 43607, 0, 0, 5420, 3897, 0, 0, 74417, 4018, 0, 68127, 0, 0, 0, 0, 0, - 2561, 0, 3542, 41915, 12076, 7951, 68152, 118857, 5303, 6276, 1706, 0, 0, - 74116, 0, 65150, 41819, 0, 73951, 10847, 41822, 9985, 860, 0, 10506, 0, - 0, 10753, 10830, 0, 615, 64490, 7574, 0, 0, 0, 12909, 43016, 64559, - 127028, 0, 0, 0, 2020, 0, 4022, 0, 0, 0, 0, 41691, 0, 0, 0, 0, 64622, - 9070, 0, 0, 3911, 42829, 43122, 1033, 0, 0, 7000, 3904, 0, 0, 0, 0, - 127012, 13123, 10846, 3450, 0, 0, 118807, 0, 42778, 10000, 41088, 449, 0, - 3777, 0, 0, 9636, 0, 10738, 0, 9367, 593, 41085, 3999, 65226, 41713, - 12764, 0, 64409, 3596, 0, 0, 9763, 120280, 120283, 12347, 124, 12981, - 41127, 120278, 0, 0, 0, 0, 10820, 0, 0, 0, 1769, 41715, 2463, 0, 0, - 12770, 0, 1538, 0, 43124, 0, 195058, 7795, 120300, 0, 4828, 1258, 0, - 2006, 0, 0, 9498, 127032, 127033, 120289, 120288, 3939, 120290, 8846, - 8943, 120287, 120286, 2650, 4491, 1961, 42602, 11525, 120292, 1959, - 120294, 0, 11774, 41016, 0, 0, 0, 1511, 9324, 0, 10519, 66331, 3454, - 19930, 0, 41019, 0, 0, 65292, 0, 12862, 0, 0, 42143, 41828, 0, 65531, 0, - 118879, 0, 0, 0, 41826, 8865, 6402, 0, 13279, 7917, 120340, 0, 7733, 0, - 4998, 0, 0, 41950, 0, 4268, 0, 0, 0, 4013, 0, 10881, 0, 0, 0, 74788, - 2014, 0, 0, 9765, 0, 0, 0, 195059, 0, 65281, 0, 10949, 0, 0, 0, 2015, 0, - 0, 0, 66318, 74824, 0, 42517, 0, 0, 0, 0, 8094, 64468, 65909, 6474, 794, - 0, 12656, 0, 119353, 0, 1665, 0, 4833, 0, 119351, 0, 0, 189, 12611, 0, 0, - 2859, 4838, 0, 4834, 0, 0, 0, 4837, 0, 770, 0, 811, 0, 41042, 0, 41318, - 64427, 0, 0, 0, 3895, 0, 74341, 3976, 0, 42859, 10193, 3116, 7747, 0, 0, - 0, 0, 0, 0, 0, 41877, 0, 2871, 64614, 0, 999, 0, 68177, 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, 0, 0, 0, 3078, 1402, 0, 0, 0, 0, 0, 394, 3088, 0, 0, 0, - 3991, 64391, 0, 0, 424, 66328, 1999, 0, 73914, 0, 0, 0, 0, 0, 8246, 0, 0, - 0, 41840, 0, 2377, 1298, 64011, 12572, 11318, 12557, 12559, 12570, 8488, - 1003, 2373, 9446, 9447, 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, 0, 9655, 0, 2004, - 9096, 9782, 0, 9172, 0, 19965, 0, 5955, 120485, 1108, 0, 74773, 0, 0, - 64782, 3926, 0, 65210, 8798, 0, 0, 1392, 0, 0, 917557, 10606, 8065, - 118805, 10353, 10417, 0, 0, 64524, 0, 4019, 0, 0, 43280, 8219, 0, 1812, - 0, 0, 0, 0, 42410, 74448, 119132, 6054, 10697, 3169, 42297, 42322, 10642, - 3909, 74461, 0, 0, 0, 0, 0, 0, 1049, 0, 65707, 11943, 41806, 0, 42336, - 3921, 0, 11775, 64760, 11766, 1038, 42303, 9823, 0, 0, 4008, 64004, 8773, - 10733, 36, 0, 5153, 41805, 0, 73735, 763, 41808, 64910, 0, 2009, 0, 0, 0, - 9640, 119951, 0, 120695, 8621, 0, 12852, 3031, 0, 64361, 0, 182, 194718, - 0, 0, 0, 0, 9058, 366, 0, 9892, 5969, 11754, 10848, 4570, 65301, 0, 4255, - 0, 10102, 41189, 4003, 41026, 68109, 13293, 41192, 0, 0, 42251, 0, 42534, - 0, 11287, 6128, 0, 11034, 10923, 64423, 0, 65506, 0, 0, 74083, 0, 66582, - 0, 0, 119955, 0, 9817, 0, 0, 0, 12117, 66586, 4183, 10540, 66250, 127044, - 127045, 0, 0, 0, 12897, 3792, 2011, 0, 6065, 43160, 0, 194715, 8692, - 41186, 41816, 41023, 41818, 41187, 11659, 7922, 12614, 2005, 8523, - 120144, 0, 7513, 1863, 4710, 0, 5956, 7621, 120274, 127116, 4705, 716, 0, - 0, 4704, 120040, 120270, 42241, 161, 0, 74546, 66214, 4706, 0, 0, 120037, - 4709, 10680, 0, 43293, 0, 0, 119164, 0, 0, 0, 1700, 119223, 0, 0, 0, - 4004, 0, 10968, 43296, 0, 8506, 0, 0, 126996, 1005, 937, 120030, 4734, - 2870, 0, 120032, 0, 7463, 4729, 0, 235, 1384, 4728, 0, 120420, 120644, 0, - 8109, 43105, 0, 4730, 447, 13186, 1513, 4733, 120415, 0, 0, 42527, 12911, - 0, 1383, 8565, 2469, 120024, 119089, 6156, 68117, 0, 7993, 4288, 120416, - 2674, 13238, 11922, 0, 120330, 3510, 13234, 0, 120407, 5605, 42095, - 11364, 0, 1380, 65617, 120320, 120261, 13196, 13197, 120309, 120682, - 9495, 119346, 0, 5959, 0, 73976, 120305, 0, 6941, 119349, 13205, 13211, - 5801, 12769, 65905, 120316, 1283, 120302, 4779, 0, 3719, 4006, 0, 19957, - 0, 2021, 119332, 0, 0, 43028, 65493, 41838, 3875, 5962, 64341, 119339, - 9814, 43571, 5827, 3314, 7787, 0, 65494, 68153, 0, 0, 120636, 64531, 0, - 0, 0, 0, 0, 65467, 5771, 41298, 0, 9742, 521, 0, 10800, 0, 8404, 194625, - 483, 7096, 7089, 66323, 928, 0, 0, 0, 10599, 11586, 3989, 10971, 0, - 65782, 9841, 8843, 12145, 0, 10074, 120816, 0, 3769, 0, 0, 0, 0, 9573, 0, - 65290, 8849, 0, 65855, 65112, 1796, 0, 0, 0, 8164, 41301, 3502, 0, 0, - 10621, 73838, 0, 5825, 13007, 68165, 0, 0, 12661, 7608, 10354, 10418, - 42411, 2022, 0, 1409, 12195, 4001, 3112, 10824, 120639, 1390, 0, 0, 421, - 43536, 5846, 120120, 4130, 0, 7595, 42588, 7600, 0, 66035, 0, 0, 65851, - 42607, 0, 0, 3168, 0, 42134, 0, 2370, 2846, 0, 0, 0, 120132, 0, 1836, 0, - 0, 119137, 3740, 0, 6290, 65374, 120451, 65923, 3944, 66628, 120434, 0, - 6135, 3118, 74265, 119093, 120446, 0, 0, 8127, 8975, 64739, 7943, 0, 0, - 10618, 2584, 0, 0, 0, 9998, 0, 0, 0, 0, 0, 6204, 0, 0, 8279, 8776, 64954, - 4975, 74809, 0, 4267, 0, 0, 0, 0, 195046, 65700, 66562, 0, 64645, 0, 0, - 0, 12586, 0, 9242, 0, 0, 4523, 5842, 10495, 3122, 0, 7793, 0, 9328, 0, 0, - 12604, 0, 6615, 0, 0, 3986, 0, 0, 8912, 64555, 0, 0, 0, 9541, 0, 0, - 11275, 8540, 11498, 0, 0, 41040, 2459, 0, 13060, 41041, 74413, 0, 0, 0, - 0, 10450, 12551, 41043, 7020, 120353, 3765, 0, 0, 1606, 120348, 120351, - 3093, 0, 0, 0, 120649, 0, 0, 4312, 74091, 120337, 120336, 11923, 4023, - 120333, 5763, 120335, 4827, 10894, 12810, 64406, 118785, 4455, 74321, - 433, 119620, 66660, 2499, 0, 0, 0, 11973, 13089, 4293, 120329, 120328, - 42758, 12196, 42837, 0, 119319, 0, 0, 5817, 0, 0, 3120, 9797, 0, 0, 0, - 10389, 0, 0, 4895, 65358, 0, 4359, 585, 0, 3509, 0, 486, 4290, 0, 0, 0, - 0, 7004, 0, 65880, 0, 119048, 2380, 11380, 0, 0, 2376, 0, 0, 0, 5197, - 127046, 127047, 127048, 2366, 127050, 127051, 127052, 0, 0, 0, 0, 0, 0, - 0, 0, 74188, 0, 0, 0, 0, 0, 0, 0, 120049, 0, 1847, 0, 10339, 0, 42384, 0, - 4227, 74158, 0, 0, 43032, 0, 42365, 0, 12671, 11384, 0, 0, 0, 64797, 0, - 5820, 0, 0, 120065, 0, 120064, 120650, 42137, 9893, 2754, 12664, 120063, - 0, 13192, 0, 41799, 65530, 1711, 12984, 43039, 3114, 6255, 0, 118938, 0, - 10853, 926, 0, 74184, 0, 120055, 0, 43175, 0, 43037, 41798, 41035, 11583, - 0, 41801, 119088, 0, 520, 4200, 12699, 8331, 0, 3091, 41034, 0, 0, 8360, - 0, 0, 321, 4229, 64543, 0, 65563, 0, 0, 2861, 0, 10095, 0, 0, 0, 1861, 0, - 0, 0, 0, 43041, 0, 0, 0, 3859, 12181, 41660, 8209, 0, 120678, 12973, 0, - 74757, 0, 41658, 0, 0, 5760, 0, 743, 4414, 120766, 0, 42632, 917973, - 65161, 73896, 0, 0, 1405, 119063, 43220, 43341, 0, 19919, 0, 64532, - 65367, 0, 0, 0, 3513, 0, 118883, 43342, 119064, 65529, 65364, 0, 0, 6485, - 1397, 0, 65365, 0, 0, 0, 0, 0, 7471, 12079, 0, 12682, 43287, 0, 0, 0, 0, - 0, 0, 1099, 10490, 0, 10501, 65181, 74463, 0, 464, 41624, 119594, 0, 0, - 1346, 0, 917631, 64724, 64897, 423, 1818, 65144, 0, 8272, 0, 0, 4218, - 3087, 64960, 0, 43564, 0, 0, 9584, 10465, 0, 74359, 12626, 9106, 0, - 42642, 0, 64750, 9390, 0, 41797, 0, 0, 265, 41795, 64666, 0, 43530, 2752, - 0, 0, 0, 59, 0, 0, 0, 0, 0, 41810, 0, 7010, 0, 41809, 41495, 119364, 0, - 42252, 0, 8009, 3305, 43033, 511, 119320, 66255, 13127, 120067, 0, 0, 0, - 917977, 65915, 1400, 41812, 10685, 194870, 41211, 10387, 4453, 43276, - 917783, 13159, 0, 6481, 41213, 0, 0, 0, 0, 41983, 74198, 6617, 9116, 0, - 0, 462, 68110, 10493, 0, 8129, 0, 0, 74471, 6644, 11658, 0, 0, 3452, - 11906, 9581, 1385, 3098, 0, 119013, 43340, 0, 41033, 6493, 42626, 0, 0, - 11426, 0, 1681, 118789, 1204, 3755, 64661, 7235, 10170, 3966, 8911, 0, - 41841, 43338, 0, 0, 5726, 64915, 42175, 0, 0, 41497, 65044, 0, 2851, - 43017, 0, 0, 4373, 0, 0, 9587, 1789, 6671, 0, 3100, 0, 65360, 0, 0, 0, - 64922, 0, 8190, 12083, 0, 0, 6506, 64312, 74374, 2368, 0, 4419, 0, 0, - 3439, 1825, 1192, 120106, 8891, 3080, 120228, 2347, 5430, 0, 8990, 2848, - 0, 0, 0, 249, 0, 0, 0, 120658, 0, 0, 8883, 917802, 728, 68178, 995, 0, 0, - 64826, 0, 917798, 0, 0, 19945, 8091, 558, 0, 12273, 0, 0, 12112, 0, 0, 0, - 74419, 12335, 120104, 917795, 3443, 3129, 0, 12913, 65445, 0, 64891, 0, - 7725, 0, 0, 0, 8624, 0, 12446, 43295, 0, 41894, 0, 6277, 41672, 41893, - 10010, 0, 3540, 0, 835, 0, 0, 119868, 74408, 0, 73959, 5426, 4258, 0, 0, - 5424, 0, 8283, 0, 5434, 0, 0, 19917, 11408, 0, 11947, 0, 1404, 3095, - 11432, 0, 3464, 6486, 4819, 0, 0, 570, 8095, 3672, 119864, 1498, 0, 0, 0, - 431, 0, 0, 0, 0, 68167, 0, 13096, 0, 0, 0, 9516, 0, 5268, 0, 0, 0, 4450, - 120723, 11547, 64358, 0, 356, 3477, 227, 10488, 0, 382, 11418, 0, 0, 0, - 0, 0, 0, 6484, 2541, 66039, 0, 0, 0, 3549, 0, 9110, 119665, 2743, 0, - 43290, 194812, 9097, 0, 43015, 8782, 0, 776, 2524, 0, 8573, 0, 0, 0, 0, - 120572, 64944, 8952, 3856, 118818, 0, 5872, 6495, 0, 0, 0, 0, 0, 120733, - 12849, 3953, 1897, 0, 0, 11994, 4339, 74556, 0, 67843, 0, 0, 0, 74251, 0, - 5228, 0, 7868, 43184, 0, 0, 73986, 0, 0, 43022, 0, 1162, 0, 2671, 0, 0, - 0, 0, 118865, 4553, 73811, 0, 195005, 0, 0, 19921, 74331, 11424, 0, 4567, - 41891, 0, 0, 119056, 4820, 65239, 194662, 0, 0, 43042, 119212, 1377, 0, - 4897, 42821, 9250, 0, 4438, 64385, 0, 1753, 11331, 6147, 0, 43282, 8833, - 0, 0, 6504, 194667, 126979, 10719, 0, 1898, 1413, 42443, 0, 802, 12141, - 0, 0, 6648, 10671, 2528, 0, 64789, 9169, 838, 127092, 120697, 844, 5014, - 0, 256, 0, 9990, 0, 43301, 0, 7542, 65464, 9726, 0, 6489, 10048, 74326, - 0, 66573, 0, 0, 0, 11761, 194655, 0, 41094, 0, 0, 0, 0, 0, 6196, 6945, - 194628, 194890, 194631, 120491, 11816, 194943, 5733, 0, 0, 0, 41098, 0, - 41093, 0, 66626, 588, 9760, 0, 194717, 1238, 200, 0, 1660, 73916, 0, - 118905, 74362, 0, 0, 194651, 0, 0, 3394, 0, 120668, 0, 0, 0, 66219, 0, - 43284, 0, 7817, 1841, 11055, 120533, 194979, 194982, 1669, 10776, 194981, - 7701, 194980, 0, 194995, 1732, 4030, 0, 3963, 66611, 0, 41768, 6491, 0, - 65324, 914, 65323, 8071, 3538, 0, 0, 0, 0, 74367, 7614, 0, 11819, 0, - 12009, 12399, 0, 67852, 65537, 0, 10841, 0, 5301, 0, 0, 5734, 8960, 0, 0, - 65317, 0, 0, 0, 0, 12304, 0, 0, 65315, 0, 0, 0, 0, 0, 119621, 0, 74536, - 12447, 64486, 0, 0, 0, 0, 0, 0, 42767, 10915, 0, 12007, 0, 120520, 0, - 194878, 0, 0, 0, 8629, 0, 43168, 41872, 0, 4496, 0, 0, 0, 0, 0, 0, 0, - 64730, 0, 66714, 0, 0, 0, 65596, 0, 11416, 4280, 119018, 8765, 12784, - 7792, 1393, 0, 67871, 74386, 0, 8233, 43572, 0, 6683, 0, 3442, 12144, - 2841, 12543, 0, 1473, 42820, 64329, 917772, 0, 0, 6488, 357, 1048, 41100, - 0, 41104, 0, 41099, 1054, 119065, 1040, 65450, 0, 4434, 1069, 0, 0, - 74231, 917765, 0, 0, 0, 9693, 41943, 0, 41931, 41759, 12757, 4353, 0, - 1059, 9790, 8995, 0, 0, 65937, 0, 41764, 10646, 0, 118833, 0, 0, 74830, - 0, 12743, 0, 6480, 917761, 41779, 42580, 66601, 12207, 119619, 10986, - 66602, 11312, 64807, 0, 0, 41767, 0, 0, 43020, 0, 3955, 74254, 0, 0, - 917861, 0, 120735, 9770, 9246, 12230, 0, 0, 0, 10448, 41783, 41786, - 127093, 12797, 2755, 64571, 194912, 194927, 4857, 0, 4428, 12794, 73755, - 0, 0, 0, 0, 0, 5747, 194720, 0, 7978, 41092, 74571, 0, 11924, 74205, - 42144, 65015, 0, 563, 0, 0, 12798, 11271, 57, 0, 0, 0, 119043, 0, 0, - 43137, 694, 0, 9876, 0, 119168, 0, 0, 64537, 0, 277, 74385, 7229, 74459, - 0, 0, 64634, 64811, 8757, 119087, 0, 1574, 194633, 0, 2525, 4852, 5749, - 0, 13027, 42824, 120574, 1039, 9801, 10155, 5745, 188, 41858, 11592, 0, - 74015, 0, 41853, 4858, 0, 0, 436, 4771, 0, 2786, 0, 4856, 8051, 0, - 119609, 0, 9644, 0, 0, 0, 194916, 120732, 66710, 118834, 0, 73906, 0, - 127114, 0, 10234, 5843, 11939, 0, 42157, 0, 3157, 194918, 0, 0, 3504, - 119178, 0, 10822, 5149, 66029, 10226, 65142, 0, 3594, 42424, 0, 40, + 0, 0, 0, 0, 0, 0, 4220, 10725, 10433, 0, 68395, 4987, 64519, 0, 0, 0, 0, + 0, 10970, 11733, 0, 120792, 0, 19944, 0, 9009, 8551, 0, 11468, 64636, + 7575, 0, 2724, 0, 0, 12313, 119949, 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, 0, 11593, 43007, 4478, 66178, 0, 0, + 2744, 0, 4477, 118964, 814, 42066, 66183, 66204, 66194, 119961, 66198, + 41880, 66188, 66197, 78148, 11955, 66190, 66191, 41111, 66189, 73788, + 7788, 4847, 0, 0, 0, 0, 0, 1581, 6535, 78161, 12954, 430, 78160, 55259, + 78158, 194938, 5278, 4945, 42883, 4950, 0, 68625, 0, 7269, 0, 5964, + 12908, 0, 0, 74764, 74477, 119146, 194936, 4949, 0, 443, 0, 4944, 5467, + 119603, 0, 65137, 6044, 65392, 0, 4213, 0, 41303, 0, 194931, 0, 41306, + 73984, 2698, 127531, 0, 12072, 3193, 0, 41304, 824, 0, 12091, 78893, + 78894, 119816, 4673, 64804, 4678, 119820, 119819, 65059, 0, 6739, 0, + 5481, 3490, 1199, 119811, 8356, 119829, 119832, 4677, 12688, 3102, 0, + 4672, 78173, 78175, 5531, 68367, 42575, 78170, 78166, 4674, 4548, 44005, + 0, 68658, 119946, 8025, 68630, 127024, 1855, 0, 68669, 0, 119942, 127554, + 0, 0, 119652, 2745, 11797, 0, 0, 68643, 4654, 0, 0, 68638, 73993, 10525, + 4649, 65209, 0, 0, 4648, 43080, 0, 0, 0, 6246, 64950, 7828, 4650, 6777, + 6776, 6775, 4653, 7822, 78005, 0, 43187, 8669, 0, 6821, 65093, 0, 78881, + 2716, 0, 0, 0, 0, 68369, 0, 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, 0, 0, 0, 64904, 9026, 10833, 74864, 7547, 4867, 0, + 10008, 10222, 3054, 194956, 9744, 78860, 7605, 4622, 119656, 0, 0, 0, 0, + 0, 9045, 78888, 4225, 19926, 78887, 12880, 65307, 4617, 78883, 0, 41732, + 4616, 10518, 10423, 10359, 0, 5958, 0, 0, 4215, 9789, 917941, 4321, 4621, + 0, 41313, 522, 5368, 0, 65803, 0, 5366, 12201, 5372, 0, 0, 0, 7720, 7390, + 2696, 0, 0, 4638, 0, 1790, 78242, 5965, 64363, 66569, 68646, 194968, + 5376, 1835, 5335, 194966, 0, 4633, 0, 68119, 1180, 4632, 0, 5387, 5333, + 0, 0, 42094, 5331, 4634, 11928, 0, 5338, 4637, 0, 5971, 42414, 0, 1268, + 65097, 42361, 0, 0, 73853, 1427, 0, 0, 5970, 3431, 0, 10358, 10422, 4758, + 0, 1608, 2738, 0, 10455, 4753, 74026, 11344, 4222, 6240, 5231, 74384, 0, + 68377, 6248, 0, 0, 0, 42318, 0, 5229, 4757, 0, 0, 2728, 4752, 64563, + 65235, 5234, 0, 0, 0, 10713, 0, 0, 2622, 7460, 0, 0, 0, 8954, 74760, + 65189, 2632, 0, 10108, 1011, 5574, 1853, 2709, 65139, 5577, 0, 0, 118871, + 68641, 8965, 7635, 42177, 5316, 0, 5314, 6451, 5572, 0, 5312, 0, 5525, + 5330, 5319, 0, 0, 194907, 44003, 0, 0, 0, 120498, 0, 195009, 0, 74022, 0, + 64609, 0, 120634, 0, 5721, 0, 5519, 8632, 66465, 11267, 73961, 0, 5720, + 0, 1692, 4219, 4610, 8696, 4305, 0, 4609, 43478, 4614, 541, 0, 5287, + 5309, 5285, 68389, 5961, 4647, 56, 4216, 10577, 41381, 601, 4613, 0, 0, + 0, 4608, 64260, 41124, 5190, 67628, 0, 68145, 7086, 0, 119243, 67620, 0, + 2734, 11074, 0, 67627, 43593, 0, 67625, 5960, 0, 8992, 65293, 0, 1782, + 67622, 68114, 119939, 0, 68180, 5501, 119952, 42508, 7442, 43665, 359, + 41253, 68392, 6239, 119956, 41256, 0, 68134, 0, 74209, 0, 9346, 118904, + 41254, 0, 43291, 3767, 5737, 0, 4865, 0, 5740, 917997, 5736, 4368, 0, + 7193, 68137, 0, 5739, 41024, 4866, 0, 73904, 0, 4869, 120563, 0, 4223, 0, + 6650, 0, 0, 0, 0, 4870, 0, 68661, 6716, 78176, 68667, 68382, 68676, 0, + 10122, 4864, 66568, 4144, 7937, 0, 6245, 68652, 2732, 42734, 745, 0, + 195097, 0, 4777, 7821, 0, 68631, 42775, 0, 194954, 0, 3097, 0, 5966, 0, + 4778, 0, 10863, 0, 4781, 0, 64407, 0, 0, 8577, 0, 68196, 43285, 10216, + 4782, 0, 0, 120757, 68618, 12325, 43056, 8717, 0, 0, 4776, 0, 11492, + 8700, 0, 13176, 68363, 10426, 0, 917599, 10362, 0, 1715, 4849, 8242, + 9561, 73922, 43278, 42635, 0, 0, 5963, 917926, 0, 0, 4850, 0, 1607, 466, + 4853, 118995, 4854, 0, 5164, 0, 1350, 5124, 64420, 1993, 5362, 8471, + 2708, 0, 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, 0, 303, 0, 0, 0, 2437, + 0, 4221, 4844, 118869, 0, 0, 0, 0, 0, 43292, 0, 2441, 10739, 65090, 0, + 119327, 0, 2451, 2714, 119326, 0, 43379, 4937, 43376, 753, 5849, 10597, + 43089, 11722, 9248, 0, 42879, 11725, 0, 0, 2726, 3107, 73958, 4941, + 64937, 119233, 9140, 1408, 5261, 4607, 0, 181, 0, 4942, 9539, 4938, 0, + 65201, 5259, 9369, 64185, 4142, 5257, 0, 0, 4964, 5264, 64178, 64177, + 12979, 41411, 64182, 64181, 64180, 64179, 9482, 4873, 41231, 1822, 42526, + 0, 12758, 3865, 0, 0, 10500, 0, 0, 78028, 0, 9830, 43642, 389, 10893, + 7521, 0, 4872, 5463, 0, 3125, 9567, 0, 4878, 5459, 4604, 0, 9557, 5465, + 68617, 0, 11494, 0, 9563, 10865, 74570, 43279, 64186, 0, 78714, 64191, + 64190, 8898, 64188, 0, 41030, 78836, 0, 917835, 78820, 917834, 0, 78805, + 41031, 78801, 11960, 6745, 3082, 0, 78539, 73919, 10573, 41744, 7079, + 5856, 127043, 5163, 78809, 0, 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, 0, 42156, 78688, 0, + 64193, 64192, 78000, 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, 0, 64169, 64168, 64949, 10972, + 10251, 10247, 42768, 715, 64161, 43299, 9453, 5348, 10943, 120378, 0, + 11352, 550, 9910, 0, 0, 66579, 11551, 0, 0, 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, + 78196, 78192, 68136, 78190, 43412, 5064, 2431, 0, 9450, 1809, 0, 78200, + 78201, 5062, 1264, 64817, 13254, 11697, 0, 9785, 64716, 0, 3933, 74559, + 4740, 7954, 0, 0, 42609, 0, 74175, 0, 127016, 0, 0, 42130, 0, 5151, + 917829, 917823, 0, 0, 0, 7620, 3800, 65122, 0, 0, 8355, 7854, 0, 954, + 64927, 4185, 41045, 0, 41438, 41439, 68666, 10711, 4593, 0, 120584, 0, + 64774, 8053, 10532, 66727, 0, 0, 0, 64759, 6381, 5166, 9888, 0, 5148, + 42834, 0, 78205, 78206, 64140, 78204, 64131, 3119, 917814, 0, 3060, + 64135, 9986, 0, 77876, 636, 11698, 0, 0, 9916, 11701, 7836, 42741, 64137, + 8320, 78640, 8863, 0, 119960, 1477, 43289, 0, 74358, 8618, 0, 9908, 0, 0, + 0, 3937, 12312, 0, 0, 0, 64781, 912, 6349, 4536, 119963, 74532, 0, 6244, + 0, 194580, 3935, 120665, 0, 0, 11950, 5392, 42248, 65129, 68656, 5397, 0, + 12046, 12599, 0, 0, 5395, 0, 5393, 354, 68615, 119948, 78503, 0, 0, + 42039, 0, 0, 64142, 626, 0, 5895, 0, 0, 5780, 0, 0, 0, 0, 0, 43297, 0, + 4311, 4644, 8818, 0, 0, 0, 73818, 3918, 66452, 3797, 1644, 119944, 9658, + 4140, 11385, 65947, 6455, 9030, 813, 119945, 68131, 4146, 119957, 5360, + 2466, 0, 67669, 0, 6249, 42117, 0, 0, 0, 0, 74046, 120583, 4911, 988, + 917807, 0, 0, 43061, 7054, 64147, 0, 64920, 68195, 6698, 118933, 120349, + 0, 0, 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, 917866, 73736, 0, 9825, 6448, 6715, 127008, 4831, 0, 0, 0, + 5300, 4741, 42108, 0, 64159, 4736, 64148, 0, 849, 0, 78491, 43288, 0, + 66620, 0, 194920, 65549, 9496, 64598, 118866, 0, 7876, 68132, 917872, + 3928, 917870, 43378, 10706, 7198, 0, 4842, 12053, 0, 0, 4841, 0, 4171, + 12008, 6251, 3923, 1490, 0, 119591, 0, 40972, 5245, 0, 10114, 42001, + 41888, 4845, 8332, 40974, 64347, 4840, 9077, 78346, 1747, 917849, 4825, + 69240, 917852, 68655, 0, 0, 0, 0, 68628, 0, 9850, 118937, 367, 1472, + 917859, 6687, 1274, 0, 5905, 12339, 8919, 73953, 10907, 65261, 11023, + 119559, 4830, 9134, 78666, 64126, 43011, 0, 0, 64101, 0, 0, 4824, 10614, + 120390, 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, 120385, 0, 0, 0, 119053, 0, 12765, 64118, 126998, 12962, + 0, 0, 4017, 12827, 5241, 120392, 0, 41118, 3924, 0, 11366, 917843, 0, 0, + 917846, 41116, 917844, 917564, 0, 11363, 12057, 11917, 1567, 74000, 4721, + 0, 66202, 8957, 4139, 0, 0, 0, 0, 0, 12740, 0, 4722, 6816, 0, 12759, + 4725, 0, 4726, 0, 0, 0, 917904, 917905, 0, 12755, 12762, 4015, 0, 8052, + 476, 0, 0, 0, 64212, 41020, 1382, 64209, 64216, 64215, 64214, 1656, + 41831, 0, 0, 41843, 8720, 3908, 1452, 13111, 0, 64067, 0, 8552, 64113, + 41845, 3849, 78732, 66232, 9778, 120066, 5891, 7064, 55, 9948, 917911, 0, + 0, 7935, 67586, 0, 1114, 0, 67585, 78675, 120053, 120050, 120051, 3938, + 120057, 65417, 64717, 120060, 120061, 65415, 120059, 6292, 65303, 7955, + 6452, 4713, 917887, 66249, 917885, 917890, 917891, 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, 0, 12006, 0, 0, 0, 0, 0, 65414, 6454, 1229, 0, 66437, 66025, 78699, + 0, 42500, 120508, 4809, 9623, 917874, 78694, 917880, 917877, 917878, + 65405, 68159, 917881, 917882, 5365, 4545, 8901, 917566, 119555, 4813, 0, + 0, 5925, 4808, 64330, 0, 65475, 118940, 0, 4814, 0, 4810, 0, 0, 64928, + 10543, 0, 3522, 0, 414, 65404, 0, 0, 6456, 73820, 0, 6691, 42193, 0, 0, + 0, 74495, 0, 0, 0, 118820, 9751, 65407, 0, 11770, 3919, 0, 0, 65061, 0, + 0, 0, 12235, 0, 0, 195025, 64092, 0, 64080, 0, 64090, 0, 0, 10162, 10310, + 0, 8454, 0, 42038, 387, 41363, 12737, 0, 4780, 43368, 0, 64310, 64621, + 6732, 0, 0, 0, 0, 0, 8896, 0, 375, 6976, 66582, 119005, 0, 0, 0, 119202, + 119203, 12526, 43120, 2315, 0, 1938, 119197, 0, 4529, 119200, 119201, + 119198, 119199, 0, 0, 0, 13150, 64492, 0, 0, 0, 12902, 0, 42891, 66327, + 74298, 0, 10799, 0, 2587, 66372, 0, 4193, 120334, 4241, 0, 7998, 0, 0, 0, + 0, 2316, 118821, 0, 0, 0, 64297, 74799, 0, 74140, 0, 5373, 0, 0, 3762, + 10015, 0, 119232, 0, 41590, 0, 0, 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, 0, 68138, 13072, 1894, 0, 0, 65478, 43310, 7231, 0, + 11773, 0, 0, 0, 0, 2551, 0, 6453, 10200, 6235, 0, 119237, 0, 0, 4470, + 119613, 0, 7780, 5369, 118958, 5249, 0, 5367, 8756, 0, 0, 5377, 120585, + 68143, 1688, 78245, 0, 0, 0, 0, 0, 44020, 6808, 41319, 1300, 10650, + 41692, 64505, 4668, 0, 119624, 1465, 10850, 3943, 0, 41205, 41315, 0, 0, + 0, 5352, 0, 0, 8839, 41314, 7384, 7785, 41204, 0, 41209, 0, 0, 43607, 0, + 0, 5420, 3897, 0, 0, 74417, 4018, 0, 68127, 0, 0, 0, 0, 127526, 2561, + 68621, 3542, 41915, 12076, 7951, 68152, 118857, 5303, 6276, 1706, 0, + 78751, 74116, 0, 65150, 41819, 0, 73951, 10847, 41822, 9985, 860, 0, + 10506, 0, 0, 10753, 10830, 0, 615, 64490, 7574, 0, 77922, 0, 12909, + 43016, 64559, 127028, 0, 0, 0, 2020, 0, 4022, 0, 0, 77923, 0, 41691, 0, + 0, 74329, 0, 64622, 9070, 0, 68411, 3911, 42829, 43122, 1033, 74440, 0, + 7000, 3904, 0, 0, 0, 0, 127012, 13123, 10846, 3450, 0, 7397, 118807, 0, + 42778, 10000, 41088, 449, 0, 3777, 68458, 0, 9636, 0, 10738, 0, 9367, + 593, 41085, 3999, 65226, 41713, 12764, 0, 64409, 3596, 0, 0, 9763, + 120280, 120283, 12347, 124, 12981, 41127, 2092, 0, 0, 0, 0, 10820, 43987, + 0, 0, 1769, 41715, 2463, 78489, 0, 12770, 0, 1538, 0, 43124, 0, 195058, + 7795, 120300, 0, 4828, 1258, 0, 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, 0, + 1511, 9324, 78211, 10519, 66331, 3454, 19930, 0, 41019, 0, 0, 65292, + 6822, 12862, 0, 0, 42143, 41828, 78207, 65531, 78208, 118879, 55223, 0, + 0, 41826, 8865, 6402, 0, 13279, 7917, 120340, 0, 7733, 0, 4998, 0, 0, + 41950, 0, 4268, 0, 0, 0, 4013, 0, 10881, 0, 0, 0, 74788, 2014, 0, 0, + 9765, 0, 0, 0, 195059, 78357, 65281, 0, 10949, 0, 0, 0, 2015, 0, 0, 0, + 66318, 43233, 0, 42517, 0, 0, 0, 12698, 8094, 43445, 65909, 6474, 794, 0, + 12656, 0, 119353, 0, 1665, 0, 4833, 0, 119351, 0, 0, 189, 12611, 0, 0, + 2859, 4838, 0, 4834, 65078, 0, 0, 4837, 0, 770, 0, 811, 0, 41042, 917551, + 41318, 64427, 0, 0, 78848, 3895, 0, 74341, 3976, 0, 42859, 10193, 3116, + 7747, 0, 0, 0, 0, 0, 43686, 78846, 41877, 0, 2871, 64614, 0, 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, 0, 0, 0, + 119248, 394, 3088, 0, 0, 0, 3991, 64391, 0, 0, 424, 66328, 1999, 0, + 73914, 0, 0, 0, 0, 42231, 8246, 0, 0, 0, 41840, 0, 2377, 1298, 64011, + 12572, 11318, 12557, 12559, 12570, 8488, 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, 0, 9655, 0, 2004, 9096, 9782, 0, 9172, 0, 19965, + 0, 5955, 67666, 1108, 0, 74773, 0, 0, 64782, 3926, 0, 65210, 8798, 0, 0, + 1392, 0, 0, 917557, 10606, 8065, 118805, 10353, 10417, 0, 0, 64524, 0, + 4019, 0, 0, 43280, 8219, 68402, 1812, 0, 0, 0, 0, 42410, 74448, 119132, + 6054, 10697, 3169, 42297, 42322, 10642, 3909, 9950, 0, 0, 0, 68678, 0, 0, + 1049, 0, 65707, 2304, 41806, 0, 42336, 3921, 0, 11775, 64760, 11766, + 1038, 42303, 9823, 127278, 69236, 4008, 64004, 8773, 10733, 36, 0, 5153, + 41805, 0, 73735, 763, 41808, 64910, 0, 2009, 0, 0, 0, 9640, 119951, 0, + 120695, 8621, 0, 12852, 3031, 0, 64361, 0, 182, 194718, 0, 0, 119950, 0, + 9058, 366, 0, 9892, 5969, 11754, 10848, 4570, 65301, 44013, 4255, 0, + 10102, 41189, 4003, 41026, 68109, 13293, 41192, 0, 0, 42251, 0, 42534, + 65179, 11287, 6128, 0, 11034, 10923, 64423, 0, 65506, 0, 0, 74083, 0, + 9932, 0, 0, 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, 127116, + 4705, 716, 78004, 0, 4704, 120040, 120270, 42241, 161, 43977, 74546, + 66214, 4706, 0, 0, 42672, 4709, 10680, 0, 43293, 0, 0, 119164, 120328, 0, + 0, 1700, 119223, 0, 0, 0, 4004, 0, 10968, 43296, 0, 8506, 0, 0, 126996, + 1005, 937, 78216, 4734, 2870, 0, 78218, 0, 7463, 4729, 0, 235, 1384, + 4728, 0, 120420, 120644, 120421, 8109, 43105, 0, 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, 0, 73976, + 120305, 43371, 6941, 119349, 13205, 13211, 5801, 12769, 65905, 41697, + 1283, 120302, 4779, 0, 3719, 4006, 0, 19957, 0, 2021, 119332, 0, 0, + 43028, 65493, 41838, 3875, 5962, 64341, 119339, 9814, 43457, 5827, 3314, + 7787, 78234, 65494, 68153, 0, 0, 120636, 64531, 120692, 0, 0, 0, 66316, + 65467, 5771, 41298, 0, 9742, 521, 0, 10800, 0, 8404, 194625, 483, 7096, + 7089, 66323, 928, 0, 0, 119018, 10599, 11586, 3989, 10971, 0, 65782, + 9841, 8843, 12145, 0, 10074, 78548, 0, 3769, 0, 0, 0, 0, 9573, 0, 65290, + 8849, 0, 65855, 65112, 1796, 120505, 0, 78555, 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, 0, 7595, 42588, 7600, 120121, + 66035, 0, 0, 65851, 42607, 0, 0, 3168, 0, 42134, 0, 2370, 2846, 0, 0, 0, + 120132, 0, 1836, 0, 0, 119137, 3740, 0, 6290, 65374, 120451, 65923, 3944, + 66628, 120434, 0, 6135, 3118, 74265, 119093, 120446, 0, 0, 8127, 8975, + 64739, 7943, 0, 0, 10618, 2584, 0, 0, 0, 9998, 0, 0, 0, 0, 0, 6204, 0, 0, + 8279, 8776, 64954, 4975, 74809, 120130, 4267, 0, 42206, 0, 0, 195046, + 65700, 66562, 0, 64645, 0, 0, 0, 12586, 0, 9242, 0, 0, 4523, 5842, 10495, + 3122, 0, 7793, 78275, 9328, 0, 0, 12604, 0, 6615, 67650, 0, 3986, 44025, + 0, 8912, 64555, 7409, 0, 0, 9541, 78276, 0, 11275, 8540, 11498, 0, 0, + 41040, 2459, 0, 13060, 41041, 74413, 0, 0, 0, 68427, 10450, 12551, 41043, + 7020, 120353, 3765, 0, 0, 1606, 120348, 120351, 3093, 68436, 0, 0, + 120649, 0, 0, 4312, 74091, 120337, 120336, 11923, 4023, 120333, 5763, + 120335, 4827, 10894, 12810, 64406, 118785, 4455, 74321, 433, 119620, + 66660, 2499, 0, 0, 0, 11973, 13089, 4293, 120329, 42224, 42758, 12196, + 42837, 42226, 119319, 0, 119126, 5817, 0, 55277, 3120, 9797, 0, 0, 0, + 10389, 0, 0, 4895, 65358, 0, 4359, 585, 0, 3509, 0, 486, 4290, 5758, 0, + 0, 0, 7004, 0, 65880, 0, 119048, 2380, 11380, 0, 0, 2376, 0, 917847, 0, + 5197, 127046, 127047, 127048, 2366, 127050, 127051, 120554, 120045, 0, 0, + 0, 0, 0, 0, 0, 74188, 0, 0, 0, 120047, 0, 0, 0, 120049, 0, 1847, 0, + 10339, 0, 42384, 0, 4227, 74158, 0, 0, 43032, 0, 42365, 0, 12671, 11384, + 0, 0, 0, 64797, 0, 5820, 0, 120052, 120065, 0, 120064, 120650, 42137, + 9893, 2754, 12664, 120063, 0, 7377, 0, 41799, 65530, 1711, 12984, 43039, + 3114, 6255, 0, 118938, 0, 10853, 926, 0, 74184, 0, 120055, 0, 43175, 0, + 43037, 41798, 41035, 11583, 0, 41801, 119088, 0, 520, 4200, 12699, 8331, + 0, 3091, 41034, 127353, 0, 8360, 0, 78044, 321, 4229, 64543, 0, 65563, 0, + 917974, 2861, 0, 10095, 0, 0, 0, 1861, 0, 0, 0, 0, 43041, 0, 0, 0, 3859, + 12181, 41660, 8209, 0, 73867, 12973, 0, 74757, 127514, 41658, 0, 0, 5760, + 0, 743, 4414, 120766, 0, 42632, 917973, 65161, 73896, 0, 0, 1405, 119063, + 43220, 43341, 0, 19919, 0, 64532, 65367, 43710, 0, 0, 3513, 0, 118883, + 43342, 119064, 65529, 65364, 0, 0, 6485, 1397, 0, 41986, 0, 0, 0, 74097, + 0, 7471, 12079, 0, 12682, 43287, 0, 0, 0, 0, 0, 0, 1099, 10490, 0, 10501, + 65181, 74463, 0, 464, 41624, 65283, 67663, 78222, 1346, 0, 917631, 64724, + 64897, 423, 1818, 65144, 0, 8272, 0, 19911, 4218, 3087, 64960, 127234, + 43564, 0, 0, 9584, 10465, 0, 74359, 12626, 9106, 0, 42642, 0, 64750, + 9390, 0, 41797, 0, 0, 265, 41795, 64666, 0, 43530, 2752, 0, 0, 0, 59, 0, + 0, 0, 0, 77873, 41810, 0, 7010, 0, 41809, 41495, 119364, 0, 42252, 42213, + 8009, 3305, 43033, 511, 119320, 66255, 13127, 120067, 0, 0, 0, 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, 0, 3452, 11906, + 9581, 1385, 3098, 0, 119013, 43340, 0, 41033, 6493, 42626, 0, 0, 11426, + 0, 1681, 118789, 1204, 3755, 64661, 7235, 10170, 3966, 8911, 0, 41841, + 43338, 0, 0, 5726, 64915, 42175, 0, 0, 41497, 65044, 0, 2851, 43017, 0, + 0, 4373, 78058, 0, 9587, 1789, 6671, 0, 3100, 0, 65360, 0, 127510, 0, + 64922, 0, 8190, 12083, 0, 0, 6506, 64312, 74374, 2368, 0, 4419, 0, + 119125, 3439, 1825, 1192, 120106, 8891, 3080, 120228, 2347, 5430, 0, + 8990, 2848, 0, 0, 0, 249, 0, 0, 0, 120658, 0, 0, 8883, 917802, 728, + 68178, 995, 0, 0, 64826, 0, 917798, 0, 0, 19945, 8091, 558, 0, 12273, + 194814, 0, 12112, 0, 0, 0, 74419, 12335, 120104, 917795, 3443, 3129, 0, + 2102, 65445, 78258, 64891, 0, 7725, 0, 78255, 0, 8624, 69246, 12446, + 43295, 0, 41894, 0, 6277, 41672, 41893, 10010, 0, 3540, 0, 835, 0, 69816, + 119868, 74408, 0, 73959, 5426, 4258, 0, 0, 5424, 0, 8283, 0, 5434, 0, 0, + 19917, 11408, 0, 11947, 0, 1404, 3095, 11432, 194813, 3464, 6486, 4819, + 0, 0, 570, 8095, 3672, 119864, 1498, 67866, 0, 0, 431, 0, 0, 0, 0, 68167, + 0, 13096, 0, 0, 43408, 9516, 0, 5268, 42230, 42220, 0, 4450, 120723, + 11547, 43417, 0, 356, 3477, 227, 10488, 68203, 382, 11418, 0, 0, 0, 0, 0, + 0, 6484, 2541, 66039, 0, 78718, 0, 3549, 0, 9110, 119665, 2743, 0, 43290, + 194812, 9097, 0, 43015, 8782, 0, 776, 2524, 42707, 8573, 0, 0, 0, 0, + 42694, 64944, 8952, 3856, 118818, 0, 5872, 6495, 0, 0, 0, 0, 0, 120733, + 12849, 3953, 1897, 0, 65094, 11994, 4339, 74556, 0, 67843, 0, 0, 0, + 68473, 74104, 5228, 0, 7868, 43184, 0, 0, 73986, 43438, 0, 43022, 0, + 1162, 0, 2671, 0, 0, 0, 0, 118865, 4553, 73811, 0, 195005, 0, 0, 19921, + 74331, 11424, 195006, 4567, 41891, 0, 0, 55249, 4820, 65239, 194662, 0, + 0, 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, 127092, 120697, 844, 5014, 0, 256, 0, 9990, 0, 42739, + 0, 7542, 65464, 9726, 0, 6489, 10048, 74326, 78719, 66573, 0, 78724, + 78712, 11761, 194655, 0, 41094, 0, 0, 0, 0, 0, 6196, 6945, 194628, + 194890, 194631, 120491, 11816, 194943, 5733, 0, 0, 0, 41098, 0, 41093, 0, + 66626, 588, 9760, 0, 194717, 1238, 200, 0, 1660, 73916, 0, 118905, 74362, + 0, 0, 194651, 0, 0, 3394, 194894, 120668, 0, 0, 0, 66219, 0, 43284, + 194657, 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, 78713, 65328, 0, 74367, 7614, 0, + 11819, 0, 12009, 12399, 0, 67852, 65537, 0, 10841, 43430, 5301, 0, 0, + 5734, 8960, 0, 127527, 65317, 77880, 0, 0, 0, 12304, 0, 0, 65315, 0, 0, + 0, 0, 0, 119621, 0, 74536, 12447, 64486, 0, 0, 0, 0, 0, 0, 42767, 10915, + 0, 12007, 43695, 120520, 11975, 194878, 0, 0, 2555, 8629, 0, 43168, + 41872, 43706, 4496, 194879, 0, 0, 0, 0, 0, 0, 64730, 0, 66714, 68222, 0, + 0, 65596, 0, 11416, 4280, 67655, 8765, 12784, 7792, 1393, 127242, 67871, + 74386, 0, 8233, 43572, 0, 6683, 0, 3442, 12144, 2841, 12543, 0, 1473, + 42820, 64329, 917772, 0, 68642, 6488, 357, 1048, 41100, 0, 41104, 0, + 41099, 1054, 119065, 1040, 65450, 0, 4434, 1069, 0, 118862, 74231, + 917765, 0, 0, 0, 9693, 41943, 0, 41931, 41759, 12757, 4353, 0, 1059, + 9790, 8995, 0, 0, 65937, 0, 41764, 10646, 0, 118833, 0, 0, 74830, 78569, + 12743, 0, 6480, 917761, 41779, 42580, 66601, 12207, 119619, 6335, 66602, + 11312, 64807, 0, 0, 41767, 0, 0, 43020, 0, 3955, 74254, 0, 0, 917861, 0, + 77926, 9770, 9246, 12230, 0, 0, 0, 10448, 41783, 41786, 127093, 12797, + 2755, 64571, 78578, 194927, 4857, 0, 4428, 12794, 73755, 0, 78574, 0, 0, + 0, 5747, 78825, 0, 7978, 41092, 74571, 0, 11924, 74205, 42144, 65015, 0, + 563, 0, 0, 12798, 11271, 57, 0, 0, 917860, 119043, 0, 0, 43137, 694, 0, + 9876, 0, 119168, 0, 78822, 64537, 0, 277, 74385, 7229, 12761, 0, 0, + 13025, 64811, 8757, 78824, 0, 1574, 7381, 0, 2525, 4852, 5749, 68465, + 13027, 42824, 120574, 1039, 9801, 10155, 5745, 188, 41858, 11592, 0, + 74015, 9055, 41853, 4858, 917780, 0, 436, 4771, 0, 2786, 0, 4856, 8051, + 0, 119609, 0, 9644, 0, 0, 0, 194916, 120732, 66710, 118834, 0, 73906, 0, + 127114, 0, 10234, 5843, 11939, 0, 42157, 0, 3157, 194918, 68393, 0, 3504, + 119178, 0, 10822, 5149, 66029, 10226, 65142, 0, 3594, 42424, 194959, 40, 12657, 0, 0, 386, 0, 8834, 0, 12815, 43574, 0, 73907, 0, 74196, 7220, - 74504, 0, 74316, 0, 0, 4304, 74503, 8160, 0, 194753, 0, 0, 0, 1348, 0, 0, - 0, 13303, 0, 0, 194755, 7599, 1278, 0, 13269, 0, 0, 74387, 0, 0, 74492, - 6097, 7568, 8780, 4982, 0, 74501, 194763, 0, 194762, 2672, 3735, 194735, - 13138, 42266, 9484, 10724, 41202, 119024, 0, 0, 0, 9487, 0, 194765, 3842, - 195034, 195056, 12442, 6193, 9791, 0, 0, 42516, 7228, 7559, 74803, - 194689, 194851, 11399, 119219, 194856, 194855, 0, 194857, 3604, 0, 0, 0, - 0, 0, 42507, 1962, 194861, 194696, 42505, 11660, 0, 0, 0, 6995, 74173, - 5437, 74174, 10669, 8702, 7964, 194706, 0, 199, 194843, 4105, 194845, - 194701, 194847, 194710, 119875, 13148, 7560, 0, 9226, 0, 195070, 6472, - 65814, 73954, 0, 4724, 0, 0, 9191, 0, 0, 0, 0, 195024, 10196, 7886, 0, - 6585, 0, 6680, 195042, 0, 195051, 6679, 74412, 0, 194866, 74421, 11382, - 0, 0, 0, 0, 194833, 194832, 6681, 194834, 12693, 194836, 194839, 194838, - 194841, 194840, 65442, 119610, 118887, 12166, 74415, 66248, 194816, 0, - 194818, 194817, 194820, 194819, 5297, 7042, 13284, 6112, 7968, 194825, - 73929, 194738, 194736, 65746, 0, 74409, 74389, 194826, 4342, 42839, - 194831, 1677, 0, 0, 0, 917855, 11091, 11011, 2719, 0, 0, 0, 64495, 0, 0, - 7585, 65169, 42845, 4308, 917858, 74177, 7505, 543, 64916, 64736, 0, 0, - 66670, 0, 118922, 19911, 0, 43158, 7902, 0, 65265, 194639, 0, 0, 0, 0, 0, + 74504, 0, 74316, 0, 77932, 4304, 74503, 8160, 78707, 194753, 0, 0, 0, + 1348, 0, 78597, 0, 13303, 0, 0, 194755, 7599, 1278, 43616, 13269, 0, 0, + 74387, 78179, 78598, 74492, 6097, 7568, 8780, 4982, 0, 74501, 194763, + 78592, 194762, 2672, 3735, 194735, 13138, 42266, 9484, 10724, 41202, + 119024, 0, 43742, 0, 9487, 119959, 119117, 3842, 195034, 78668, 12442, + 6193, 9791, 0, 0, 42516, 7228, 7559, 74803, 78468, 194851, 11399, 119219, + 194691, 194855, 194690, 194857, 3604, 0, 119188, 0, 78540, 78541, 42507, + 1962, 78490, 78476, 42505, 11660, 0, 2072, 0, 6995, 74173, 5437, 74174, + 10669, 8702, 7964, 194706, 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, 0, 0, 195024, 10196, 7886, 0, 6585, + 0, 6680, 195042, 0, 195051, 6679, 74412, 0, 194866, 74421, 11382, 0, 0, + 0, 0, 194833, 194832, 6681, 194834, 12693, 194836, 42727, 194838, 194841, + 78195, 65442, 119610, 78199, 12166, 43248, 66248, 194816, 0, 194818, + 194817, 194820, 194819, 5297, 7042, 13284, 6112, 7968, 194825, 73927, + 194738, 194736, 65746, 0, 74409, 74389, 194826, 4342, 42839, 194831, + 1677, 0, 0, 194806, 917855, 11091, 11011, 2719, 0, 0, 119595, 64495, 0, + 0, 7585, 65169, 2052, 4308, 917858, 74177, 7505, 543, 64916, 64736, 0, 0, + 64655, 0, 118922, 2064, 0, 43158, 7902, 0, 65265, 194639, 0, 0, 0, 0, 0, 0, 12994, 0, 10828, 0, 6228, 4307, 3482, 0, 0, 0, 0, 506, 74573, 41194, - 65735, 0, 0, 41195, 0, 8169, 0, 8841, 0, 516, 0, 41197, 119051, 34, 0, - 120186, 120185, 1612, 74333, 120182, 120181, 74308, 12001, 120178, 10242, - 64564, 120179, 120174, 6584, 7749, 11037, 0, 1758, 0, 10667, 10560, - 120197, 120756, 1935, 11517, 120193, 120196, 120195, 1931, 120189, 74839, - 120191, 1217, 64702, 12643, 825, 0, 194905, 12294, 0, 194908, 9138, - 194910, 194902, 12631, 194911, 11080, 74554, 0, 5591, 1239, 0, 11313, 0, - 3403, 0, 0, 64364, 0, 0, 74582, 8998, 12988, 0, 9152, 0, 0, 194898, - 67589, 41850, 64290, 3433, 0, 12615, 1594, 65607, 6914, 67603, 0, 119569, + 65735, 2055, 43255, 41195, 0, 8169, 0, 8841, 0, 516, 0, 2063, 119051, 34, + 0, 120186, 11504, 1612, 74333, 120182, 74520, 74308, 12001, 120178, + 10242, 64564, 120179, 120174, 6584, 7749, 11037, 0, 1758, 0, 10667, + 10560, 120197, 120756, 1935, 11517, 120193, 120196, 120195, 1931, 120189, + 74839, 120191, 1217, 64702, 12643, 825, 0, 194905, 12294, 127261, 78834, + 9138, 78831, 78833, 12631, 78829, 11080, 74554, 0, 5591, 1239, 0, 11313, + 0, 3403, 0, 0, 64364, 0, 0, 74582, 8998, 12988, 0, 9152, 0, 0, 194898, + 67589, 41850, 64290, 3433, 0, 12615, 1594, 42192, 6914, 67603, 0, 119569, 74565, 41353, 67602, 67611, 4337, 0, 194897, 918, 65035, 41351, 7681, - 194900, 42577, 41393, 12668, 194904, 2477, 0, 0, 0, 0, 67604, 194880, 0, - 573, 194881, 194884, 11417, 194886, 194885, 194888, 67599, 0, 194889, - 67607, 11482, 0, 0, 3357, 0, 194891, 4207, 1288, 194892, 194895, 194894, - 0, 11589, 66354, 194872, 0, 0, 64602, 194670, 0, 0, 42788, 0, 64480, - 194875, 8423, 3348, 448, 194879, 9717, 0, 0, 997, 0, 0, 0, 0, 11440, - 11379, 42000, 13139, 0, 65013, 126999, 0, 73796, 0, 0, 12035, 0, 2818, 0, - 0, 73793, 0, 4172, 0, 0, 8373, 10873, 12197, 0, 0, 0, 0, 0, 126977, 0, 0, - 194865, 126982, 74563, 64828, 11419, 194868, 766, 1257, 0, 0, 11381, - 3265, 66617, 3274, 0, 0, 0, 0, 0, 41989, 0, 0, 0, 3263, 0, 65672, 0, - 3270, 64539, 11489, 0, 0, 0, 0, 9505, 65518, 0, 756, 195052, 0, 0, 0, - 7261, 0, 186, 0, 119156, 5770, 13179, 65830, 12612, 12949, 64856, 12800, - 0, 74203, 64718, 0, 0, 0, 118929, 0, 11578, 0, 119296, 0, 0, 0, 0, 74568, - 9254, 0, 1794, 120217, 64521, 5624, 120220, 120221, 119958, 120223, 3617, - 66636, 64886, 120211, 120212, 120213, 120214, 1872, 66508, 120467, 41079, - 10748, 5502, 119330, 4452, 0, 0, 0, 4511, 0, 0, 0, 11425, 0, 0, 1231, 0, - 0, 0, 9003, 8192, 0, 5305, 9653, 10616, 8694, 9546, 0, 0, 120478, 120200, - 65205, 120202, 64063, 9878, 74780, 119626, 120207, 64058, 8799, 42131, 0, - 64062, 1028, 64060, 64059, 837, 10567, 0, 43103, 0, 0, 11427, 2902, - 64043, 64042, 66464, 10756, 0, 42606, 64045, 64044, 0, 10076, 64040, - 64039, 0, 1034, 3392, 0, 43091, 64033, 64032, 65468, 64038, 64037, 64036, - 64035, 4291, 194928, 64015, 64014, 64681, 194930, 0, 194944, 0, 43090, 0, - 3476, 8973, 64012, 42473, 64010, 64008, 64007, 2003, 7706, 64517, 119183, + 194900, 42577, 41393, 12668, 194904, 2477, 0, 0, 127302, 0, 67604, + 194880, 127235, 573, 194881, 194884, 11417, 194886, 194885, 194888, + 67599, 0, 194889, 67607, 11482, 0, 0, 3357, 0, 42223, 4207, 1288, 78842, + 78839, 68419, 78837, 11589, 42195, 194872, 917627, 127263, 64602, 67618, + 0, 0, 42788, 68416, 64480, 194875, 8423, 3348, 448, 68476, 9717, 0, 0, + 997, 0, 0, 0, 0, 11440, 11379, 42000, 13139, 42221, 65013, 126999, 0, + 73796, 0, 119228, 12035, 0, 2818, 0, 0, 73793, 0, 4172, 0, 0, 8373, + 10873, 12197, 0, 0, 0, 0, 0, 78210, 0, 0, 194865, 126982, 74563, 64828, + 11419, 194868, 766, 1257, 0, 118845, 11381, 3265, 66617, 3274, 0, 0, 0, + 0, 119092, 41989, 0, 0, 0, 3263, 0, 65672, 0, 3270, 64539, 11489, 0, 0, + 0, 0, 9505, 65518, 194776, 756, 195052, 0, 0, 0, 7261, 0, 186, 0, 119156, + 5770, 13179, 65830, 12612, 12949, 64856, 12800, 0, 74203, 64718, 0, 0, 0, + 118929, 0, 11578, 0, 119296, 0, 0, 0, 0, 74568, 9254, 0, 1794, 120217, + 64521, 5624, 120220, 120221, 119958, 120223, 3617, 66636, 64886, 120211, + 120212, 120213, 120214, 1872, 66508, 120467, 41079, 10748, 5502, 119330, + 4452, 0, 0, 917879, 4511, 0, 0, 64678, 11425, 0, 43245, 1231, 0, 0, 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, 66464, 10756, 0, 42606, 64045, 64044, 43979, 10076, 64040, + 43060, 0, 1034, 3392, 0, 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, 0, 0, 4767, 9343, 64049, 64048, 120034, 1133, 64053, 64052, - 64051, 64050, 41340, 0, 0, 10005, 12329, 41333, 0, 8489, 1942, 0, 0, - 42520, 0, 0, 0, 10760, 64023, 64022, 64021, 6582, 0, 0, 64025, 9167, - 42151, 0, 0, 2026, 64019, 64018, 64017, 64016, 12768, 0, 7582, 0, 118915, - 0, 0, 0, 0, 120539, 0, 41411, 13094, 0, 7532, 41414, 0, 3179, 0, 64769, - 0, 0, 11461, 74454, 10751, 9051, 0, 0, 10535, 0, 0, 0, 2008, 64031, - 64030, 294, 41874, 0, 126991, 65929, 0, 0, 0, 0, 64028, 8146, 64026, - 41788, 194844, 0, 118795, 0, 119887, 119888, 0, 119886, 119891, 119892, - 119889, 11433, 119895, 119896, 0, 7801, 65578, 0, 12915, 0, 3297, 9699, - 0, 1135, 0, 0, 0, 1995, 7927, 0, 0, 2552, 41546, 60, 0, 8649, 41549, 0, - 0, 0, 6682, 0, 0, 64710, 41547, 0, 2013, 0, 119899, 119900, 119897, - 119898, 12832, 119904, 8081, 8362, 3537, 119908, 9137, 119906, 8999, 0, - 119909, 3466, 0, 0, 1996, 0, 3453, 6282, 0, 2002, 2000, 120175, 537, 0, - 4179, 65119, 1998, 0, 1842, 0, 0, 9628, 0, 12081, 9826, 64502, 1767, 0, - 0, 0, 120201, 0, 0, 0, 3059, 0, 120204, 119953, 120205, 0, 0, 0, 4100, - 920, 1811, 1355, 0, 0, 3592, 10078, 0, 0, 0, 8592, 65870, 68164, 0, + 43453, 64050, 41340, 118975, 0, 10005, 12329, 41333, 0, 8489, 1942, 0, 0, + 42520, 0, 0, 0, 10760, 64023, 64022, 64021, 6582, 43670, 0, 64025, 9167, + 42151, 78244, 0, 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, 0, 68218, 55274, 2008, 64031, 64030, 294, + 41874, 0, 126991, 65929, 0, 0, 0, 0, 64028, 8146, 64026, 41788, 194844, + 0, 118795, 6343, 43247, 119888, 0, 119886, 119891, 119892, 119889, 11433, + 119895, 119896, 0, 7801, 65578, 194839, 12915, 43968, 3297, 9699, 194955, + 1135, 0, 0, 0, 1995, 6722, 0, 0, 2552, 41546, 60, 68394, 8649, 41549, + 78496, 0, 0, 6682, 0, 78679, 64710, 41547, 0, 2013, 0, 78530, 78532, + 78528, 78529, 12832, 78493, 8081, 8362, 3537, 119908, 9137, 119906, 8999, + 0, 78533, 3466, 0, 0, 1996, 0, 3453, 6282, 0, 2002, 2000, 120175, 537, 0, + 4179, 65119, 1998, 0, 1842, 0, 0, 9628, 68446, 12081, 9826, 64502, 1767, + 0, 0, 0, 120201, 0, 0, 0, 3059, 44024, 120204, 119953, 120205, 0, 0, 0, + 4100, 920, 1811, 1355, 0, 0, 3592, 10078, 0, 0, 0, 8592, 65870, 68164, 0, 10742, 0, 0, 1994, 9281, 3296, 12865, 1997, 1895, }; Modified: python/trunk/Objects/unicodetype_db.h ============================================================================== --- python/trunk/Objects/unicodetype_db.h (original) +++ python/trunk/Objects/unicodetype_db.h Thu Mar 18 22:50:06 2010 @@ -61,11 +61,13 @@ {0, 10795, 0, 0, 0, 129}, {0, 65373, 0, 0, 0, 129}, {0, 10792, 0, 0, 0, 129}, + {10815, 0, 10815, 0, 0, 9}, {0, 65341, 0, 0, 0, 129}, {0, 69, 0, 0, 0, 129}, {0, 71, 0, 0, 0, 129}, {10783, 0, 10783, 0, 0, 9}, {10780, 0, 10780, 0, 0, 9}, + {10782, 0, 10782, 0, 0, 9}, {65326, 0, 65326, 0, 0, 9}, {65330, 0, 65330, 0, 0, 9}, {65331, 0, 65331, 0, 0, 9}, @@ -159,6 +161,8 @@ {0, 54756, 0, 0, 0, 129}, {0, 54787, 0, 0, 0, 129}, {0, 54753, 0, 0, 0, 129}, + {0, 54754, 0, 0, 0, 129}, + {0, 54721, 0, 0, 0, 129}, {58272, 0, 58272, 0, 0, 9}, {0, 0, 0, 0, 0, 513}, {42877, 7545, 42877, 0, 0, 385}, @@ -169,491 +173,491 @@ /* type indexes */ #define SHIFT 7 static unsigned char index1[] = { - 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 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, 40, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 16, 50, 51, 52, - 16, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 63, 63, 64, 65, 66, 63, - 63, 63, 67, 68, 69, 63, 63, 63, 63, 63, 63, 70, 16, 71, 72, 73, 74, 75, - 76, 63, 77, 78, 79, 80, 81, 82, 83, 63, 63, 84, 85, 40, 40, 40, 40, 40, - 40, 86, 40, 40, 40, 40, 40, 87, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, - 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, - 40, 40, 40, 40, 40, 40, 40, 40, 88, 89, 90, 91, 40, 40, 40, 92, 40, 40, - 40, 93, 94, 40, 40, 40, 40, 40, 95, 40, 40, 40, 96, 40, 40, 40, 40, 40, - 40, 40, 40, 40, 40, 97, 98, 99, 40, 40, 40, 40, 40, 40, 100, 101, 40, 40, - 40, 40, 40, 40, 40, 40, 102, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, - 40, 40, 40, 103, 40, 40, 40, 40, 40, 40, 40, 40, 104, 40, 40, 40, 40, - 100, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, - 40, 40, 40, 103, 40, 40, 40, 40, 40, 40, 105, 40, 40, 40, 40, 40, 40, 40, - 40, 40, 40, 40, 40, 40, 40, 40, 40, 106, 107, 40, 40, 40, 40, 40, 40, 40, - 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 108, 109, 40, 40, 40, 40, 40, 40, - 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 110, 40, 40, 40, 40, 40, 40, - 40, 40, 40, 111, 40, 40, 112, 113, 114, 115, 116, 117, 118, 16, 119, 16, - 16, 16, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, - 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, - 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, - 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, - 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 120, - 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, - 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, - 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, - 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 121, 122, 123, 124, 125, - 126, 40, 40, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 16, 137, - 138, 139, 140, 141, 16, 16, 16, 16, 16, 16, 142, 16, 143, 16, 144, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 40, 40, 40, 40, 40, 40, 145, 16, 146, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 63, 147, - 148, 149, 150, 16, 151, 16, 152, 153, 154, 155, 156, 157, 158, 159, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 160, 161, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 162, 163, 164, 40, 40, 40, 40, 40, 40, 40, - 40, 40, 40, 40, 40, 40, 40, 40, 86, 165, 40, 166, 167, 40, 40, 40, 40, - 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, - 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, - 40, 40, 40, 40, 40, 40, 40, 40, 168, 40, 40, 40, 40, 40, 40, 40, 40, 40, - 40, 40, 169, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, - 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, - 40, 170, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, - 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, - 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, - 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, - 40, 40, 40, 40, 40, 40, 40, 171, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, - 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, - 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, - 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, - 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, - 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, - 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, - 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, - 172, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 40, 168, 40, 40, 173, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 174, 16, 63, - 175, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, - 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, - 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, - 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, - 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, - 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, - 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, - 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, - 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, - 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, - 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, - 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, - 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, - 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, - 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, - 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, - 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, - 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, - 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, - 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, - 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, - 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, - 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, - 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, - 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, - 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, - 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, - 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, - 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 176, 63, 63, 63, 63, 63, - 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, - 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, - 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, - 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, - 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, - 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, - 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, - 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, - 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, - 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, - 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, - 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, - 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, - 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, - 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, - 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, - 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, - 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, - 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, - 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, - 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, - 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, - 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, - 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, - 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, - 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, - 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, - 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, - 63, 63, 176, + 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, 34, 35, 36, 37, + 38, 39, 34, 34, 34, 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, 64, 64, 65, 66, 67, 64, + 64, 64, 68, 69, 70, 64, 64, 64, 64, 64, 64, 71, 17, 72, 73, 74, 75, 76, + 77, 64, 78, 79, 80, 81, 82, 83, 84, 64, 64, 85, 86, 34, 34, 34, 34, 34, + 34, 87, 34, 34, 34, 34, 34, 88, 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, 89, 90, 91, 92, 34, 34, 34, 93, 34, 34, + 34, 94, 95, 34, 34, 34, 34, 34, 96, 34, 34, 34, 97, 34, 34, 34, 34, 34, + 34, 34, 34, 34, 34, 98, 99, 100, 34, 34, 34, 34, 34, 34, 101, 102, 34, + 34, 34, 34, 34, 34, 34, 34, 103, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, + 34, 34, 34, 34, 104, 34, 34, 34, 34, 34, 34, 34, 34, 105, 34, 34, 34, 34, + 101, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, + 34, 34, 34, 104, 34, 34, 34, 34, 34, 34, 106, 34, 34, 34, 34, 34, 34, 34, + 34, 34, 34, 34, 34, 34, 34, 34, 34, 107, 108, 34, 34, 34, 34, 34, 34, 34, + 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 109, 110, 34, 34, 34, 34, 34, 34, + 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 111, 34, 34, 34, 34, 34, 34, + 34, 34, 34, 112, 34, 34, 113, 114, 115, 116, 117, 118, 119, 120, 121, + 122, 17, 123, 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, + 124, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, + 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, + 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, + 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 125, 126, 127, 128, + 129, 130, 34, 34, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 17, + 141, 142, 143, 144, 145, 17, 17, 17, 17, 17, 17, 146, 17, 147, 17, 148, + 17, 149, 17, 150, 17, 17, 17, 151, 17, 17, 17, 17, 152, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 34, 34, 34, 34, 34, 34, 153, 17, 154, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 34, 34, 34, 34, 34, 34, 34, 34, 155, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 64, 156, 157, 158, 159, 17, 160, 17, 161, 162, 163, 164, 165, 166, 167, + 168, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 169, 170, 171, 172, + 173, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 174, 175, 176, 34, 34, 34, 34, + 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 87, 177, 34, 178, 179, 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, 180, 34, 34, 34, 34, 34, 34, + 34, 34, 34, 34, 34, 181, 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, 182, 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, 183, 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, 184, 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, + 185, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 34, 180, 34, 34, 186, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 187, 17, 64, 188, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, + 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, + 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, + 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, + 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, + 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, + 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, + 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, + 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, + 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, + 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, + 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, + 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, + 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, + 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, + 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, + 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, + 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, + 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, + 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, + 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, + 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, + 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, + 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, + 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, + 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, + 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, + 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, + 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 189, 64, 64, + 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, + 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, + 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, + 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, + 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, + 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, + 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, + 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, + 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, + 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, + 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, + 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, + 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, + 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, + 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, + 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, + 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, + 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, + 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, + 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, + 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, + 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, + 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, + 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, + 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, + 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, + 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, + 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, + 64, 64, 64, 64, 64, 189, }; static unsigned char index2[] = { @@ -687,11 +691,11 @@ 24, 23, 24, 23, 24, 23, 24, 23, 24, 23, 24, 23, 24, 23, 24, 23, 24, 23, 24, 23, 24, 23, 24, 23, 24, 55, 16, 23, 24, 23, 24, 23, 24, 23, 24, 23, 24, 23, 24, 23, 24, 23, 24, 23, 24, 16, 16, 16, 16, 16, 16, 56, 23, 24, - 57, 58, 16, 16, 23, 24, 59, 60, 61, 23, 24, 23, 24, 23, 24, 23, 24, 23, - 24, 62, 63, 16, 64, 65, 16, 66, 66, 16, 67, 16, 68, 16, 16, 16, 16, 66, - 16, 16, 69, 16, 16, 16, 16, 70, 71, 16, 72, 16, 16, 16, 71, 16, 73, 74, - 16, 16, 75, 16, 16, 16, 16, 16, 16, 16, 76, 16, 16, 77, 16, 16, 77, 16, - 16, 16, 16, 77, 78, 79, 79, 80, 16, 16, 16, 16, 16, 81, 16, 47, 16, 16, + 57, 58, 59, 59, 23, 24, 60, 61, 62, 23, 24, 23, 24, 23, 24, 23, 24, 23, + 24, 63, 64, 65, 66, 67, 16, 68, 68, 16, 69, 16, 70, 16, 16, 16, 16, 68, + 16, 16, 71, 16, 16, 16, 16, 72, 73, 16, 74, 16, 16, 16, 73, 16, 75, 76, + 16, 16, 77, 16, 16, 16, 16, 16, 16, 16, 78, 16, 16, 79, 16, 16, 79, 16, + 16, 16, 16, 79, 80, 81, 81, 82, 16, 16, 16, 16, 16, 83, 16, 47, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 1, 1, 1, 1, 47, 47, 47, 47, 47, 47, 47, 47, @@ -700,217 +704,214 @@ 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, 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, 82, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 84, 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, 23, 24, - 23, 24, 47, 1, 23, 24, 0, 0, 47, 42, 42, 42, 1, 0, 0, 0, 0, 0, 1, 1, 83, - 1, 84, 84, 84, 0, 85, 0, 86, 86, 16, 14, 14, 14, 14, 14, 14, 14, 14, 14, + 23, 24, 47, 1, 23, 24, 0, 0, 47, 42, 42, 42, 1, 0, 0, 0, 0, 0, 1, 1, 85, + 1, 86, 86, 86, 0, 87, 0, 88, 88, 16, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 0, 14, 14, 14, 14, 14, 14, 14, 14, 14, - 87, 88, 88, 88, 16, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, - 15, 15, 15, 15, 89, 15, 15, 15, 15, 15, 15, 15, 15, 15, 90, 91, 91, 92, - 93, 94, 95, 95, 95, 96, 97, 98, 23, 24, 23, 24, 23, 24, 23, 24, 23, 24, - 23, 24, 23, 24, 23, 24, 23, 24, 23, 24, 23, 24, 23, 24, 99, 100, 101, 16, - 102, 103, 1, 23, 24, 104, 23, 24, 16, 55, 55, 55, 105, 105, 105, 105, - 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 14, 14, 14, + 89, 90, 90, 90, 16, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, + 15, 15, 15, 15, 91, 15, 15, 15, 15, 15, 15, 15, 15, 15, 92, 93, 93, 94, + 95, 96, 97, 97, 97, 98, 99, 100, 23, 24, 23, 24, 23, 24, 23, 24, 23, 24, + 23, 24, 23, 24, 23, 24, 23, 24, 23, 24, 23, 24, 23, 24, 101, 102, 103, + 16, 104, 105, 1, 23, 24, 106, 23, 24, 16, 55, 55, 55, 107, 107, 107, 107, + 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, - 15, 15, 15, 15, 15, 15, 15, 100, 100, 100, 100, 100, 100, 100, 100, 100, - 100, 100, 100, 100, 100, 100, 100, 23, 24, 23, 24, 23, 24, 23, 24, 23, + 15, 15, 15, 15, 15, 15, 15, 102, 102, 102, 102, 102, 102, 102, 102, 102, + 102, 102, 102, 102, 102, 102, 102, 23, 24, 23, 24, 23, 24, 23, 24, 23, 24, 23, 24, 23, 24, 23, 24, 23, 24, 23, 24, 23, 24, 23, 24, 23, 24, 23, 24, 23, 24, 23, 24, 23, 24, 1, 1, 1, 1, 1, 1, 1, 1, 23, 24, 23, 24, 23, 24, 23, 24, 23, 24, 23, 24, 23, 24, 23, 24, 23, 24, 23, 24, 23, 24, 23, 24, 23, 24, 23, 24, 23, 24, 23, 24, 23, 24, 23, 24, 23, 24, 23, 24, 23, - 24, 23, 24, 23, 24, 23, 24, 23, 24, 23, 24, 23, 24, 106, 23, 24, 23, 24, - 23, 24, 23, 24, 23, 24, 23, 24, 23, 24, 107, 23, 24, 23, 24, 23, 24, 23, + 24, 23, 24, 23, 24, 23, 24, 23, 24, 23, 24, 23, 24, 108, 23, 24, 23, 24, + 23, 24, 23, 24, 23, 24, 23, 24, 23, 24, 109, 23, 24, 23, 24, 23, 24, 23, 24, 23, 24, 23, 24, 23, 24, 23, 24, 23, 24, 23, 24, 23, 24, 23, 24, 23, 24, 23, 24, 23, 24, 23, 24, 23, 24, 23, 24, 23, 24, 23, 24, 23, 24, 23, 24, 23, 24, 23, 24, 23, 24, 23, 24, 23, 24, 23, 24, 23, 24, 23, 24, 23, 24, 23, 24, 23, 24, 23, 24, 23, 24, 23, 24, 23, 24, 23, 24, 23, 24, 23, - 24, 23, 24, 23, 24, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 108, 108, 108, - 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, - 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, - 108, 108, 108, 108, 108, 108, 108, 0, 0, 47, 1, 1, 1, 1, 1, 1, 0, 109, - 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, - 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, - 109, 109, 109, 109, 109, 109, 109, 109, 109, 16, 0, 1, 1, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 24, 23, 24, 23, 24, 23, 24, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 110, 110, + 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, + 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, + 110, 110, 110, 110, 110, 110, 110, 110, 0, 0, 47, 1, 1, 1, 1, 1, 1, 0, + 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, + 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, + 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 16, 0, 1, 1, 0, 0, 0, + 0, 0, 0, 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, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 47, 47, 47, 47, 47, 47, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 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, 0, 0, 0, 0, 0, 47, 47, 47, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 0, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, + 47, 47, 47, 47, 0, 0, 0, 0, 0, 47, 47, 47, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 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, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 4, 5, 6, 7, 8, 9, 10, 11, - 12, 13, 1, 1, 1, 1, 47, 47, 1, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, + 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 4, 5, 6, 7, 8, 9, 10, + 11, 12, 13, 1, 1, 1, 1, 47, 47, 1, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, - 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 1, - 47, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 47, 47, 1, 1, 1, 1, 1, - 1, 1, 47, 47, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 47, 47, 47, 1, 1, 47, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 47, 1, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, - 47, 47, 47, 47, 47, 47, 47, 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, 0, 0, 47, 47, 47, 47, 47, 47, 47, 47, + 1, 47, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 47, 47, 1, 1, 1, 1, + 1, 1, 1, 47, 47, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 47, 47, 47, 1, 1, 47, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 47, 1, 47, 47, 47, 47, + 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, + 47, 47, 47, 47, 47, 47, 47, 47, 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, 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, 47, 47, 47, 47, 47, + 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 47, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 5, 6, 7, 8, 9, 10, 11, + 12, 13, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, + 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 47, 47, 1, 1, 1, 1, 47, 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, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 47, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 5, 6, 7, 8, 9, 10, 11, 12, - 13, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, - 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 47, 47, 1, 1, 1, 1, 47, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 47, 1, 1, 1, 1, 47, 1, 1, 1, 1, 1, 1, 1, 1, 1, 47, 1, 1, 1, 47, 1, 1, 1, + 1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 1, 1, 1, 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, 1, 1, 1, 1, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 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, 1, 47, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 0, 0, 47, 1, 1, 1, 1, 0, 0, 0, 47, 47, 47, 47, 47, 47, 47, 47, - 47, 47, 1, 1, 1, 1, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 1, 47, 47, 0, 0, 0, - 0, 0, 0, 0, 0, 47, 47, 47, 47, 47, 0, 1, 1, 1, 0, 47, 47, 47, 47, 47, 47, - 47, 47, 0, 0, 47, 47, 0, 0, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, - 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 0, 47, 47, 47, 47, 47, 47, - 47, 0, 47, 0, 0, 0, 47, 47, 47, 47, 0, 0, 1, 47, 1, 1, 1, 1, 1, 1, 1, 0, - 0, 1, 1, 0, 0, 1, 1, 1, 47, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 47, - 47, 0, 47, 47, 47, 1, 1, 0, 0, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 47, 47, - 1, 1, 21, 21, 21, 21, 1, 21, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 47, 47, 47, - 47, 47, 47, 0, 0, 0, 0, 47, 47, 0, 0, 47, 47, 47, 47, 47, 47, 47, 47, 47, - 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 0, 47, 47, 47, 47, - 47, 47, 47, 0, 47, 47, 0, 47, 47, 0, 47, 47, 0, 0, 1, 0, 1, 1, 1, 1, 1, - 0, 0, 0, 0, 1, 1, 0, 0, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 47, 47, - 47, 47, 0, 47, 0, 0, 0, 0, 0, 0, 0, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 1, - 1, 47, 47, 47, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 47, 47, - 47, 47, 47, 47, 47, 47, 47, 0, 47, 47, 47, 0, 47, 47, 47, 47, 47, 47, 47, - 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 0, 47, 47, - 47, 47, 47, 47, 47, 0, 47, 47, 0, 47, 47, 47, 47, 47, 0, 0, 1, 47, 1, 1, - 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 0, 1, 1, 1, 0, 0, 47, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 47, 47, 1, 1, 0, 0, 4, 5, 6, 7, 8, 9, 10, 11, 12, - 13, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 47, - 47, 47, 47, 47, 47, 47, 47, 0, 0, 47, 47, 0, 0, 47, 47, 47, 47, 47, 47, - 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 0, 47, - 47, 47, 47, 47, 47, 47, 0, 47, 47, 0, 47, 47, 47, 47, 47, 0, 0, 1, 47, 1, - 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, - 1, 0, 0, 0, 0, 47, 47, 0, 47, 47, 47, 1, 1, 0, 0, 4, 5, 6, 7, 8, 9, 10, - 11, 12, 13, 1, 47, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 47, - 0, 47, 47, 47, 47, 47, 47, 0, 0, 0, 47, 47, 47, 0, 47, 47, 47, 47, 0, 0, - 0, 47, 47, 0, 47, 0, 47, 47, 0, 0, 0, 47, 47, 0, 0, 0, 47, 47, 47, 0, 0, - 0, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 0, 0, 0, 0, 1, 1, 1, - 1, 1, 0, 0, 0, 1, 1, 1, 0, 1, 1, 1, 1, 0, 0, 47, 0, 0, 0, 0, 0, 0, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, - 21, 21, 21, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 47, 47, - 47, 47, 47, 47, 47, 47, 0, 47, 47, 47, 0, 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, 47, - 47, 47, 47, 47, 47, 47, 47, 47, 0, 47, 47, 47, 47, 47, 0, 0, 0, 47, 1, 1, - 1, 1, 1, 1, 1, 0, 1, 1, 1, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, - 47, 47, 0, 0, 0, 0, 0, 0, 47, 47, 1, 1, 0, 0, 4, 5, 6, 7, 8, 9, 10, 11, - 12, 13, 0, 0, 0, 0, 0, 0, 0, 0, 21, 21, 21, 21, 21, 21, 21, 1, 0, 0, 1, - 1, 0, 47, 47, 47, 47, 47, 47, 47, 47, 0, 47, 47, 47, 0, 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, 47, 47, 47, 47, 47, 47, 47, 47, 47, 0, 47, 47, 47, 47, 47, 0, - 0, 1, 47, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, - 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 47, 0, 47, 47, 1, 1, 0, 0, 4, 5, 6, 7, - 8, 9, 10, 11, 12, 13, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 0, 47, 47, 47, 47, 47, 47, 47, 47, 0, 47, 47, 47, 0, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, + 0, 0, 1, 47, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 47, 1, + 1, 1, 1, 1, 0, 0, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 1, 1, 1, 1, 4, + 5, 6, 7, 8, 9, 10, 11, 12, 13, 1, 47, 47, 0, 0, 0, 0, 0, 0, 47, 47, 47, + 47, 47, 47, 47, 0, 1, 1, 1, 0, 47, 47, 47, 47, 47, 47, 47, 47, 0, 0, 47, + 47, 0, 0, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, + 47, 47, 47, 47, 47, 47, 0, 47, 47, 47, 47, 47, 47, 47, 0, 47, 0, 0, 0, + 47, 47, 47, 47, 0, 0, 1, 47, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 0, 0, 1, 1, + 1, 47, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 47, 47, 0, 47, 47, 47, 1, + 1, 0, 0, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 47, 47, 1, 1, 21, 21, 21, 21, + 21, 21, 1, 1, 0, 0, 0, 0, 0, 1, 1, 1, 0, 47, 47, 47, 47, 47, 47, 0, 0, 0, + 0, 47, 47, 0, 0, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, + 47, 47, 47, 47, 47, 47, 47, 47, 0, 47, 47, 47, 47, 47, 47, 47, 0, 47, 47, + 0, 47, 47, 0, 47, 47, 0, 0, 1, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 0, 0, + 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 47, 47, 47, 47, 0, 47, 0, 0, 0, + 0, 0, 0, 0, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 1, 1, 47, 47, 47, 1, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 47, 47, 47, 47, 47, 47, 47, 47, + 47, 0, 47, 47, 47, 0, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, + 47, 47, 47, 47, 47, 47, 47, 47, 47, 0, 47, 47, 47, 47, 47, 47, 47, 0, 47, + 47, 0, 47, 47, 47, 47, 47, 0, 0, 1, 47, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, + 1, 0, 1, 1, 1, 0, 0, 47, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 47, + 47, 1, 1, 0, 0, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 0, 1, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 47, 47, 47, 47, 47, 47, 47, 47, 0, + 0, 47, 47, 0, 0, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, + 47, 47, 47, 47, 47, 47, 47, 47, 0, 47, 47, 47, 47, 47, 47, 47, 0, 47, 47, + 0, 47, 47, 47, 47, 47, 0, 0, 1, 47, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 0, + 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 47, 47, 0, 47, 47, + 47, 1, 1, 0, 0, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 1, 47, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 47, 0, 47, 47, 47, 47, 47, 47, 0, 0, + 0, 47, 47, 47, 0, 47, 47, 47, 47, 0, 0, 0, 47, 47, 0, 47, 0, 47, 47, 0, + 0, 0, 47, 47, 0, 0, 0, 47, 47, 47, 0, 0, 0, 47, 47, 47, 47, 47, 47, 47, + 47, 47, 47, 47, 47, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 1, 1, 1, 0, 1, 1, + 1, 1, 0, 0, 47, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 21, 21, 21, 1, 1, 1, 1, 1, 1, 1, + 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 47, 47, 47, 47, 47, 47, 47, 47, 0, 47, 47, 47, 0, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, - 47, 0, 0, 0, 47, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 0, 1, 1, 1, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 47, 47, 1, 1, 0, 0, 4, 5, 6, - 7, 8, 9, 10, 11, 12, 13, 21, 21, 21, 21, 21, 21, 0, 0, 0, 1, 47, 47, 47, - 47, 47, 47, 0, 0, 1, 1, 0, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, - 47, 47, 47, 47, 47, 47, 47, 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, 0, 47, 47, - 47, 47, 47, 47, 47, 47, 47, 0, 47, 0, 0, 47, 47, 47, 47, 47, 47, 47, 0, - 0, 0, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 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, 47, 47, 47, 47, 47, 47, 47, - 47, 1, 47, 47, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 47, 47, 47, 47, 47, - 47, 47, 1, 1, 1, 1, 1, 1, 1, 1, 1, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 1, - 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, 47, 47, 0, 47, 0, 0, 47, 47, 0, - 47, 0, 0, 47, 0, 0, 0, 0, 0, 0, 47, 47, 47, 47, 0, 47, 47, 47, 47, 47, - 47, 47, 0, 47, 47, 47, 0, 47, 0, 47, 0, 0, 47, 47, 0, 47, 47, 47, 47, 1, - 47, 47, 1, 1, 1, 1, 1, 1, 0, 1, 1, 47, 0, 0, 47, 47, 47, 47, 47, 0, 47, - 0, 1, 1, 1, 1, 1, 1, 0, 0, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 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, 47, 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, 4, 5, 6, 7, 8, - 9, 10, 11, 12, 13, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 47, 47, 47, 47, 47, 47, 47, 47, 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, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 47, 47, - 47, 47, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 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, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, - 1, 1, 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, 47, 47, - 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, - 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, - 47, 47, 47, 47, 47, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 47, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 1, 1, 1, 1, 1, 1, 47, 47, 47, - 47, 47, 47, 1, 1, 1, 1, 47, 47, 47, 47, 1, 1, 1, 47, 1, 1, 1, 47, 47, 1, - 1, 1, 1, 1, 1, 1, 47, 47, 47, 1, 1, 1, 1, 47, 47, 47, 47, 47, 47, 47, 47, - 47, 47, 47, 47, 47, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 47, 1, 4, 5, 6, - 7, 8, 9, 10, 11, 12, 13, 0, 0, 0, 0, 1, 1, 110, 110, 110, 110, 110, 110, - 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, - 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, - 110, 110, 110, 110, 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, 1, 47, 0, 0, 0, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, + 47, 47, 47, 47, 47, 47, 47, 47, 0, 47, 47, 47, 47, 47, 47, 47, 47, 47, + 47, 0, 47, 47, 47, 47, 47, 0, 0, 0, 47, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, + 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 47, 47, 0, 0, 0, 0, 0, 0, + 47, 47, 1, 1, 0, 0, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 0, 0, 0, 0, 0, 0, + 0, 0, 21, 21, 21, 21, 21, 21, 21, 1, 0, 0, 1, 1, 0, 47, 47, 47, 47, 47, + 47, 47, 47, 0, 47, 47, 47, 0, 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, 47, 47, 47, 47, + 47, 47, 47, 47, 47, 0, 47, 47, 47, 47, 47, 0, 0, 1, 47, 1, 1, 1, 1, 1, 1, + 1, 0, 1, 1, 1, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, + 0, 0, 47, 0, 47, 47, 1, 1, 0, 0, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 0, 1, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 47, 47, 47, 47, + 47, 47, 47, 47, 0, 47, 47, 47, 0, 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, 47, 47, 47, + 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 0, 0, 0, 47, 1, 1, 1, 1, + 1, 1, 1, 0, 1, 1, 1, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, + 0, 0, 0, 0, 0, 0, 47, 47, 1, 1, 0, 0, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, + 21, 21, 21, 21, 21, 21, 0, 0, 0, 1, 47, 47, 47, 47, 47, 47, 0, 0, 1, 1, + 0, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, + 47, 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, 0, 47, 47, 47, 47, 47, 47, 47, 47, + 47, 0, 47, 0, 0, 47, 47, 47, 47, 47, 47, 47, 0, 0, 0, 1, 0, 0, 0, 0, 1, + 1, 1, 1, 1, 1, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 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, 47, 47, 47, 47, 47, 47, 47, 47, 1, 47, 47, 1, 1, 1, + 1, 1, 1, 1, 0, 0, 0, 0, 1, 47, 47, 47, 47, 47, 47, 47, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 1, 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, 47, 47, 0, 47, 0, 0, 47, 47, 0, 47, 0, 0, 47, 0, 0, 0, 0, + 0, 0, 47, 47, 47, 47, 0, 47, 47, 47, 47, 47, 47, 47, 0, 47, 47, 47, 0, + 47, 0, 47, 0, 0, 47, 47, 0, 47, 47, 47, 47, 1, 47, 47, 1, 1, 1, 1, 1, 1, + 0, 1, 1, 47, 0, 0, 47, 47, 47, 47, 47, 0, 47, 0, 1, 1, 1, 1, 1, 1, 0, 0, + 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 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, 47, 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, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 21, 21, + 21, 21, 21, 21, 21, 21, 21, 21, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 47, + 47, 47, 47, 47, 47, 47, 47, 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, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 47, 47, 47, 47, 0, 0, 0, 0, 1, 1, + 1, 1, 1, 1, 1, 1, 0, 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, 0, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 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, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, + 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 47, 4, 5, 6, 7, 8, + 9, 10, 11, 12, 13, 1, 1, 1, 1, 1, 1, 47, 47, 47, 47, 47, 47, 1, 1, 1, 1, + 47, 47, 47, 47, 1, 1, 1, 47, 1, 1, 1, 47, 47, 1, 1, 1, 1, 1, 1, 1, 47, + 47, 47, 1, 1, 1, 1, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 47, 1, 4, 5, 6, 7, 8, 9, 10, 11, 12, + 13, 1, 1, 1, 1, 1, 1, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, + 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, + 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 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, 1, 47, 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, 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, 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, 47, 47, 47, 47, 47, 47, 47, - 47, 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, 0, 47, 47, 47, 47, 0, 0, 47, 47, 47, 47, 47, 47, 47, 0, 47, + 0, 47, 47, 47, 47, 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, 47, 47, 47, 47, 0, 0, 47, 47, 47, 47, 47, 47, - 47, 0, 47, 0, 47, 47, 47, 47, 0, 0, 47, 47, 47, 47, 47, 47, 47, 47, 47, + 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 0, 47, 47, 47, 47, 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, 0, 47, 47, 47, - 47, 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, 0, - 47, 47, 47, 47, 0, 0, 47, 47, 47, 47, 47, 47, 47, 0, 47, 0, 47, 47, 47, - 47, 0, 0, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 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, 0, 0, 47, 47, 47, 47, 47, 47, 47, 0, 47, 0, 47, 47, 47, 47, 0, 0, 47, + 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 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, 0, 47, 47, 47, 47, 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, + 0, 47, 47, 47, 47, 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, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 20, 17, 18, - 111, 112, 113, 114, 115, 116, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, - 0, 0, 0, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 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, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 20, 17, 18, 113, 114, 115, + 116, 117, 118, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 0, 0, 0, 47, + 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 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, 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, 47, 47, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, @@ -923,60 +924,62 @@ 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, + 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 1, 1, 47, 47, + 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 2, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, + 47, 47, 47, 47, 47, 47, 1, 1, 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, 47, 1, 1, 1, 21, 21, 21, + 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, 0, 47, 47, 47, 47, 1, 1, 1, 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, 1, 1, 1, 1, 1, 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, 1, 1, 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, + 0, 47, 47, 47, 0, 1, 1, 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, 47, 1, 1, 47, 47, 47, 47, 47, 47, 47, 47, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 2, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, - 47, 47, 47, 47, 47, 47, 47, 47, 47, 1, 1, 0, 0, 0, 47, 47, 47, 47, 47, + 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 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, 47, 1, 1, 1, 1, 47, 1, 0, 0, 4, 5, 6, 7, 8, 9, 10, 11, 12, + 13, 0, 0, 0, 0, 0, 0, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 0, 0, 0, 0, + 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 0, 4, 5, 6, 7, 8, 9, + 10, 11, 12, 13, 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, 47, 47, 47, 47, 47, 47, 1, 1, 1, - 21, 21, 21, 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, 0, 47, 47, 47, 47, 1, 1, 1, 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, 1, 1, 1, 1, 1, 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, 1, 1, 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, 0, 47, 47, 47, 0, 1, 1, 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, 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, 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, 47, 1, 1, 1, 1, 47, 1, 0, 0, 4, 5, 6, 7, 8, 9, - 10, 11, 12, 13, 0, 0, 0, 0, 0, 0, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, - 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 0, 4, 5, - 6, 7, 8, 9, 10, 11, 12, 13, 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, 1, + 47, 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, 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, 0, 0, 0, 0, 0, 0, 0, 0, 47, 47, 47, + 47, 47, 47, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 4, 5, 6, + 7, 8, 9, 10, 11, 12, 13, 47, 47, 47, 47, 47, 47, 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, 47, 47, 47, 47, 47, 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, 1, 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, 47, 47, 47, 47, 47, 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, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 0, 0, 0, 1, - 1, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 47, 47, 47, 47, 47, 47, 47, 47, 47, + 47, 47, 47, 47, 47, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 47, 47, 47, 47, 47, 47, 47, 1, 1, 0, 0, 0, 0, 0, 0, 4, 5, 6, 7, + 8, 9, 10, 11, 12, 13, 5, 0, 0, 0, 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, 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, 47, 47, 47, 47, 47, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 47, 47, 47, 1, 1, 1, 1, 1, 0, 0, 1, 1, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 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, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 47, 47, 47, 47, 47, 47, 47, 1, 1, 0, 0, 0, 0, 0, 0, - 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 47, 47, 47, 47, 47, 47, 47, 47, 47, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 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, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, - 47, 47, 47, 47, 47, 47, 1, 1, 1, 1, 1, 0, 0, 1, 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, + 1, 1, 1, 1, 0, 0, 1, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 0, 0, 0, 0, 0, 0, + 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, + 47, 1, 1, 1, 1, 1, 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, 1, 1, 1, 1, 1, 47, 47, @@ -998,70 +1001,76 @@ 11, 12, 13, 0, 0, 0, 47, 47, 47, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 1, 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, 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, 47, 47, 47, 47, 1, 47, 47, 47, 47, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, - 47, 47, 47, 47, 47, 47, 47, 47, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 47, 117, 16, 16, 16, 118, + 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 47, 119, 16, 16, 16, 120, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, - 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 1, 1, 1, 1, 1, 1, 1, 1, + 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, + 47, 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, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 23, 24, 23, 24, 23, + 24, 23, 24, 23, 24, 23, 24, 23, 24, 23, 24, 23, 24, 23, 24, 23, 24, 23, + 24, 23, 24, 23, 24, 23, 24, 23, 24, 23, 24, 23, 24, 23, 24, 23, 24, 23, + 24, 23, 24, 23, 24, 23, 24, 23, 24, 23, 24, 23, 24, 23, 24, 23, 24, 23, + 24, 23, 24, 23, 24, 23, 24, 23, 24, 23, 24, 23, 24, 23, 24, 23, 24, 23, + 24, 23, 24, 23, 24, 23, 24, 23, 24, 23, 24, 23, 24, 23, 24, 23, 24, 23, + 24, 23, 24, 23, 24, 23, 24, 23, 24, 23, 24, 23, 24, 23, 24, 23, 24, 23, + 24, 23, 24, 23, 24, 23, 24, 23, 24, 23, 24, 23, 24, 23, 24, 23, 24, 23, + 24, 23, 24, 23, 24, 23, 24, 23, 24, 23, 24, 23, 24, 23, 24, 23, 24, 23, + 24, 16, 16, 16, 16, 16, 121, 16, 16, 122, 16, 23, 24, 23, 24, 23, 24, 23, + 24, 23, 24, 23, 24, 23, 24, 23, 24, 23, 24, 23, 24, 23, 24, 23, 24, 23, + 24, 23, 24, 23, 24, 23, 24, 23, 24, 23, 24, 23, 24, 23, 24, 23, 24, 23, + 24, 23, 24, 23, 24, 23, 24, 23, 24, 23, 24, 23, 24, 23, 24, 23, 24, 23, + 24, 23, 24, 23, 24, 23, 24, 23, 24, 23, 24, 23, 24, 23, 24, 23, 24, 23, + 24, 23, 24, 23, 24, 23, 24, 23, 24, 23, 24, 23, 24, 23, 24, 23, 24, 123, + 123, 123, 123, 123, 123, 123, 123, 124, 124, 124, 124, 124, 124, 124, + 124, 123, 123, 123, 123, 123, 123, 0, 0, 124, 124, 124, 124, 124, 124, 0, + 0, 123, 123, 123, 123, 123, 123, 123, 123, 124, 124, 124, 124, 124, 124, + 124, 124, 123, 123, 123, 123, 123, 123, 123, 123, 124, 124, 124, 124, + 124, 124, 124, 124, 123, 123, 123, 123, 123, 123, 0, 0, 124, 124, 124, + 124, 124, 124, 0, 0, 16, 123, 16, 123, 16, 123, 16, 123, 0, 124, 0, 124, + 0, 124, 0, 124, 123, 123, 123, 123, 123, 123, 123, 123, 124, 124, 124, + 124, 124, 124, 124, 124, 125, 125, 126, 126, 126, 126, 127, 127, 128, + 128, 129, 129, 130, 130, 0, 0, 123, 123, 123, 123, 123, 123, 123, 123, + 131, 131, 131, 131, 131, 131, 131, 131, 123, 123, 123, 123, 123, 123, + 123, 123, 131, 131, 131, 131, 131, 131, 131, 131, 123, 123, 123, 123, + 123, 123, 123, 123, 131, 131, 131, 131, 131, 131, 131, 131, 123, 123, 16, + 132, 16, 0, 16, 16, 124, 124, 133, 133, 134, 1, 135, 1, 1, 1, 16, 132, + 16, 0, 16, 16, 136, 136, 136, 136, 134, 1, 1, 1, 123, 123, 16, 16, 0, 0, + 16, 16, 124, 124, 137, 137, 0, 1, 1, 1, 123, 123, 16, 16, 16, 103, 16, + 16, 124, 124, 138, 138, 106, 1, 1, 1, 0, 0, 16, 132, 16, 0, 16, 16, 139, + 139, 140, 140, 134, 1, 1, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 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, 3, 3, 1, 1, 1, 1, 1, 2, 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, 2, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, + 1, 141, 47, 0, 0, 113, 114, 115, 116, 117, 118, 1, 1, 1, 1, 1, 47, 141, + 20, 17, 18, 113, 114, 115, 116, 117, 118, 1, 1, 1, 1, 1, 0, 47, 47, 47, + 47, 47, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 97, 1, 1, 1, 1, 97, 1, 1, + 16, 97, 97, 97, 16, 16, 97, 97, 97, 16, 1, 97, 1, 1, 1, 97, 97, 97, 97, + 97, 1, 1, 1, 1, 1, 1, 97, 1, 142, 1, 97, 1, 143, 144, 97, 97, 1, 16, 97, + 97, 145, 97, 16, 47, 47, 47, 47, 16, 1, 1, 16, 16, 97, 97, 1, 1, 1, 1, 1, + 97, 16, 16, 16, 16, 1, 1, 1, 1, 146, 1, 21, 21, 21, 21, 21, 21, 21, 21, + 21, 21, 21, 21, 21, 21, 21, 21, 147, 147, 147, 147, 147, 147, 147, 147, + 147, 147, 147, 147, 147, 147, 147, 147, 148, 148, 148, 148, 148, 148, + 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 21, 21, 21, 23, 24, 21, + 21, 21, 21, 21, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 1, 1, 23, 24, 23, 24, 23, 24, 23, 24, 23, 24, 23, 24, - 23, 24, 23, 24, 23, 24, 23, 24, 23, 24, 23, 24, 23, 24, 23, 24, 23, 24, - 23, 24, 23, 24, 23, 24, 23, 24, 23, 24, 23, 24, 23, 24, 23, 24, 23, 24, - 23, 24, 23, 24, 23, 24, 23, 24, 23, 24, 23, 24, 23, 24, 23, 24, 23, 24, - 23, 24, 23, 24, 23, 24, 23, 24, 23, 24, 23, 24, 23, 24, 23, 24, 23, 24, - 23, 24, 23, 24, 23, 24, 23, 24, 23, 24, 23, 24, 23, 24, 23, 24, 23, 24, - 23, 24, 23, 24, 23, 24, 23, 24, 23, 24, 23, 24, 23, 24, 23, 24, 23, 24, - 23, 24, 23, 24, 23, 24, 23, 24, 23, 24, 23, 24, 23, 24, 23, 24, 23, 24, - 23, 24, 23, 24, 23, 24, 23, 24, 23, 24, 23, 24, 16, 16, 16, 16, 16, 119, - 16, 16, 120, 16, 23, 24, 23, 24, 23, 24, 23, 24, 23, 24, 23, 24, 23, 24, - 23, 24, 23, 24, 23, 24, 23, 24, 23, 24, 23, 24, 23, 24, 23, 24, 23, 24, - 23, 24, 23, 24, 23, 24, 23, 24, 23, 24, 23, 24, 23, 24, 23, 24, 23, 24, - 23, 24, 23, 24, 23, 24, 23, 24, 23, 24, 23, 24, 23, 24, 23, 24, 23, 24, - 23, 24, 23, 24, 23, 24, 23, 24, 23, 24, 23, 24, 23, 24, 23, 24, 23, 24, - 23, 24, 23, 24, 23, 24, 23, 24, 23, 24, 121, 121, 121, 121, 121, 121, - 121, 121, 122, 122, 122, 122, 122, 122, 122, 122, 121, 121, 121, 121, - 121, 121, 0, 0, 122, 122, 122, 122, 122, 122, 0, 0, 121, 121, 121, 121, - 121, 121, 121, 121, 122, 122, 122, 122, 122, 122, 122, 122, 121, 121, - 121, 121, 121, 121, 121, 121, 122, 122, 122, 122, 122, 122, 122, 122, - 121, 121, 121, 121, 121, 121, 0, 0, 122, 122, 122, 122, 122, 122, 0, 0, - 16, 121, 16, 121, 16, 121, 16, 121, 0, 122, 0, 122, 0, 122, 0, 122, 121, - 121, 121, 121, 121, 121, 121, 121, 122, 122, 122, 122, 122, 122, 122, - 122, 123, 123, 124, 124, 124, 124, 125, 125, 126, 126, 127, 127, 128, - 128, 0, 0, 121, 121, 121, 121, 121, 121, 121, 121, 129, 129, 129, 129, - 129, 129, 129, 129, 121, 121, 121, 121, 121, 121, 121, 121, 129, 129, - 129, 129, 129, 129, 129, 129, 121, 121, 121, 121, 121, 121, 121, 121, - 129, 129, 129, 129, 129, 129, 129, 129, 121, 121, 16, 130, 16, 0, 16, 16, - 122, 122, 131, 131, 132, 1, 133, 1, 1, 1, 16, 130, 16, 0, 16, 16, 134, - 134, 134, 134, 132, 1, 1, 1, 121, 121, 16, 16, 0, 0, 16, 16, 122, 122, - 135, 135, 0, 1, 1, 1, 121, 121, 16, 16, 16, 101, 16, 16, 122, 122, 136, - 136, 104, 1, 1, 1, 0, 0, 16, 130, 16, 0, 16, 16, 137, 137, 138, 138, 132, - 1, 1, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 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, 3, 3, 1, 1, 1, - 1, 1, 2, 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, 2, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 139, 16, 0, 0, - 111, 112, 113, 114, 115, 116, 1, 1, 1, 1, 1, 16, 139, 20, 17, 18, 111, - 112, 113, 114, 115, 116, 1, 1, 1, 1, 1, 0, 47, 47, 47, 47, 47, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 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, 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, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 95, 1, 1, 1, 1, 95, 1, 1, 16, 95, 95, 95, - 16, 16, 95, 95, 95, 16, 1, 95, 1, 1, 1, 95, 95, 95, 95, 95, 1, 1, 1, 1, - 1, 1, 95, 1, 140, 1, 95, 1, 141, 142, 95, 95, 1, 16, 95, 95, 143, 95, 16, - 47, 47, 47, 47, 16, 1, 1, 16, 16, 95, 95, 1, 1, 1, 1, 1, 95, 16, 16, 16, - 16, 1, 1, 1, 1, 144, 1, 0, 0, 0, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, - 21, 21, 21, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, - 145, 145, 145, 145, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, - 146, 146, 146, 146, 146, 146, 21, 21, 21, 23, 24, 21, 21, 21, 21, 0, 0, - 0, 0, 0, 0, 0, 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, 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, @@ -1074,135 +1083,134 @@ 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, 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, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 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, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 20, 17, 18, 113, + 114, 115, 116, 117, 118, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 20, + 17, 18, 113, 114, 115, 116, 117, 118, 21, 21, 21, 21, 21, 21, 21, 21, 21, + 21, 21, 20, 17, 18, 113, 114, 115, 116, 117, 118, 21, 21, 21, 21, 21, 21, + 21, 21, 21, 21, 21, 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, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, + 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, + 149, 149, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, + 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, + 141, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 20, 17, 18, 113, 114, 115, + 116, 117, 118, 21, 141, 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, 0, 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, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 20, 17, 18, 111, 112, 113, 114, - 115, 116, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 20, 17, 18, 111, - 112, 113, 114, 115, 116, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 20, - 17, 18, 111, 112, 113, 114, 115, 116, 21, 21, 21, 21, 21, 21, 21, 21, 21, - 21, 21, 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, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, - 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, - 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, 139, 21, 21, - 21, 21, 21, 21, 21, 21, 21, 21, 20, 17, 18, 111, 112, 113, 114, 115, 116, - 21, 139, 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, 0, 0, 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, 0, 0, 0, 1, 1, 1, 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, 1, 1, 1, 1, 0, 1, 1, 1, 1, 0, 0, 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, 0, 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, 0, 1, 0, 1, 1, 1, 1, 0, 0, - 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 20, 17, 18, 111, 112, 113, 114, 115, 116, 21, - 20, 17, 18, 111, 112, 113, 114, 115, 116, 21, 20, 17, 18, 111, 112, 113, - 114, 115, 116, 21, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 0, 1, 1, + 1, 1, 0, 0, 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, 0, 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, 0, 1, 0, 1, + 1, 1, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 20, 17, 18, 113, 114, 115, 116, + 117, 118, 21, 20, 17, 18, 113, 114, 115, 116, 117, 118, 21, 20, 17, 18, + 113, 114, 115, 116, 117, 118, 21, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 0, 0, 0, 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, 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, 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, 0, - 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 1, 1, 1, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 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, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, - 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, - 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, - 108, 108, 108, 108, 108, 108, 0, 109, 109, 109, 109, 109, 109, 109, 109, - 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, - 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, - 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 0, 23, 24, 149, - 150, 151, 152, 153, 23, 24, 23, 24, 23, 24, 154, 155, 156, 0, 16, 23, 24, - 16, 23, 24, 16, 16, 16, 16, 16, 16, 47, 0, 0, 23, 24, 23, 24, 23, 24, 23, + 0, 0, 0, 0, 0, 0, 0, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, + 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, + 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, + 110, 110, 110, 110, 110, 110, 110, 110, 110, 0, 111, 111, 111, 111, 111, + 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, + 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, + 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 0, + 23, 24, 151, 152, 153, 154, 155, 23, 24, 23, 24, 23, 24, 156, 157, 158, + 159, 16, 23, 24, 16, 23, 24, 16, 16, 16, 16, 16, 16, 47, 160, 160, 23, 24, 23, 24, 23, 24, 23, 24, 23, 24, 23, 24, 23, 24, 23, 24, 23, 24, 23, 24, 23, 24, 23, 24, 23, 24, 23, 24, 23, 24, 23, 24, 23, 24, 23, 24, 23, 24, 23, 24, 23, 24, 23, 24, 23, 24, 23, 24, 23, 24, 23, 24, 23, 24, 23, 24, 23, 24, 23, 24, 23, 24, 23, 24, 23, 24, 23, 24, 23, 24, 23, 24, 23, 24, 23, 24, 23, 24, 23, 24, 23, 24, 23, 24, 23, 24, 23, 24, 23, 24, 23, - 24, 23, 24, 16, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 1, 21, 1, 1, 157, 157, 157, 157, 157, 157, 157, 157, 157, - 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, - 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, - 157, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 47, 47, 47, 47, 47, 47, 47, 47, 47, + 24, 23, 24, 23, 24, 23, 24, 23, 24, 16, 1, 1, 1, 1, 1, 1, 23, 24, 23, 24, + 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 21, 1, 1, 161, 161, 161, 161, + 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, + 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, + 161, 161, 161, 161, 161, 161, 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, 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, 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, 47, 47, 47, 47, 47, 47, 47, 0, 47, 47, 47, 47, 47, 47, 47, - 0, 47, 47, 47, 47, 47, 47, 47, 0, 47, 47, 47, 47, 47, 47, 47, 0, 47, 47, - 47, 47, 47, 47, 47, 0, 47, 47, 47, 47, 47, 47, 47, 0, 47, 47, 47, 47, 47, - 47, 47, 0, 47, 47, 47, 47, 47, 47, 47, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 0, 0, 0, 0, 0, 47, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 47, 47, 47, 47, 47, 47, 47, 0, + 47, 47, 47, 47, 47, 47, 47, 0, 47, 47, 47, 47, 47, 47, 47, 0, 47, 47, 47, + 47, 47, 47, 47, 0, 47, 47, 47, 47, 47, 47, 47, 0, 47, 47, 47, 47, 47, 47, + 47, 0, 47, 47, 47, 47, 47, 47, 47, 0, 47, 47, 47, 47, 47, 47, 47, 0, 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, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 47, 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, + 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, 47, 1, 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, 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, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 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, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, 0, 0, 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, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 2, 1, - 1, 1, 1, 47, 47, 21, 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, 21, 21, 21, 21, 21, 21, 21, 21, 21, 1, 1, 1, 1, - 1, 1, 1, 47, 47, 47, 47, 47, 1, 1, 21, 21, 21, 47, 47, 1, 1, 1, 0, 47, - 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 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, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 0, 0, 0, 0, 2, 1, 1, 1, 1, 47, 47, 21, 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, 21, 21, 21, 21, 21, + 21, 21, 21, 21, 1, 1, 1, 1, 1, 1, 1, 47, 47, 47, 47, 47, 1, 1, 21, 21, + 21, 47, 47, 1, 1, 1, 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, 47, 47, 47, 47, 47, 0, 0, 1, 1, 1, 1, 47, - 47, 47, 1, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 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, 1, 1, 1, 1, 47, 47, 47, 1, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, - 47, 47, 47, 1, 47, 47, 47, 47, 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, 0, 0, 0, + 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 1, 47, 47, 47, 47, 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, 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, 0, 1, 1, 21, 21, 21, 21, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 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, 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, 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, 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, 0, 21, 21, - 21, 21, 21, 21, 21, 21, 21, 21, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 1, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 1, 1, 1, + 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 0, 1, 1, 21, 21, 21, 21, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 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, 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, 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, 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, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 0, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 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, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 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, 21, 21, 21, 21, 21, 21, 21, 21, + 21, 21, 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, 21, 21, 21, 21, 21, + 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 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, 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, 0, 47, 47, - 47, 47, 47, 158, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, + 1, 1, 1, 1, 0, 47, 47, 47, 47, 47, 162, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, - 47, 47, 47, 158, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, + 47, 47, 47, 47, 47, 47, 47, 47, 47, 162, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, @@ -1211,7 +1219,7 @@ 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, - 47, 47, 47, 47, 47, 47, 47, 47, 158, 47, 47, 47, 47, 47, 47, 47, 47, 47, + 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 162, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, @@ -1220,88 +1228,89 @@ 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, - 47, 47, 47, 47, 47, 47, 47, 47, 47, 158, 47, 47, 47, 47, 47, 47, 47, 47, + 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 162, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 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, 1, 1, 1, 1, 1, 1, + 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 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, 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, 158, 47, 47, 158, 47, 47, 47, 158, 47, 158, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 162, 47, 47, 162, + 47, 47, 47, 162, 47, 162, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, + 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 162, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, - 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 158, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, + 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 162, 47, 47, 47, 47, 47, 47, 47, + 162, 47, 162, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, - 47, 47, 47, 47, 158, 47, 47, 47, 47, 47, 47, 47, 158, 47, 158, 47, 47, + 47, 47, 47, 47, 47, 47, 47, 162, 162, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, + 47, 47, 47, 162, 47, 47, 47, 47, 47, 47, 47, 47, 162, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, - 47, 47, 158, 158, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, - 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 158, 47, - 47, 47, 47, 47, 47, 47, 47, 158, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, + 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 162, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, - 47, 47, 47, 47, 47, 47, 47, 47, 158, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, - 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 158, + 47, 47, 47, 47, 162, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, + 47, 47, 47, 47, 47, 47, 162, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, - 47, 158, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, - 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 158, 47, 47, 47, 47, + 162, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, + 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 162, + 47, 162, 47, 162, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, - 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 158, 47, 158, 47, 158, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, + 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 162, 47, 162, + 162, 162, 47, 47, 47, 47, 47, 47, 162, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, - 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 158, 47, 158, 158, 158, 47, - 47, 47, 47, 47, 47, 158, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, + 162, 162, 162, 162, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, - 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 158, 158, 158, - 158, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, + 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 162, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, - 47, 47, 47, 47, 47, 47, 47, 158, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, + 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 162, + 47, 47, 47, 47, 47, 47, 47, 162, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, - 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 158, 47, 47, 47, 47, - 47, 47, 47, 158, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, + 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 162, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, - 47, 47, 47, 47, 47, 47, 158, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, + 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 162, 162, + 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 162, 162, 162, 47, 162, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, - 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 158, 158, 47, 47, 47, 47, - 47, 47, 47, 47, 47, 47, 47, 47, 158, 158, 158, 47, 158, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, @@ -1314,30 +1323,30 @@ 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, - 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 158, + 47, 47, 47, 162, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, + 47, 47, 47, 47, 47, 47, 47, 47, 47, 162, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, - 47, 47, 47, 47, 47, 158, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, + 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 162, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, - 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 158, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, + 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 162, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, - 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 158, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, + 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 162, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, - 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 158, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, @@ -1345,71 +1354,72 @@ 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, - 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 158, + 47, 47, 47, 162, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, + 47, 47, 47, 47, 47, 47, 47, 162, 47, 47, 47, 47, 162, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, - 47, 47, 47, 158, 47, 47, 47, 47, 158, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, + 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 162, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, - 47, 47, 47, 47, 47, 47, 47, 158, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, + 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 162, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, - 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 158, 47, 47, 47, 47, 47, + 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 162, + 47, 47, 47, 47, 47, 162, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, - 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 158, 47, 47, 47, 47, - 47, 158, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, + 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 162, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, - 47, 47, 47, 47, 47, 47, 47, 47, 47, 158, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, + 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 162, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, - 47, 47, 47, 47, 47, 47, 47, 47, 47, 158, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 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, 0, 0, 0, 0, + 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, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, - 47, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 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, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 1, 1, 47, 47, 47, 47, 47, 47, - 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, - 47, 47, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 23, - 24, 23, 24, 23, 24, 23, 24, 23, 24, 23, 24, 23, 24, 23, 24, 23, 24, 23, - 24, 23, 24, 23, 24, 23, 24, 23, 24, 23, 24, 23, 24, 0, 0, 23, 24, 23, 24, - 23, 24, 23, 24, 23, 24, 23, 24, 47, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 47, 23, 24, 23, 24, 23, 24, 23, 24, 23, 24, 23, 24, 23, 24, - 23, 24, 23, 24, 23, 24, 23, 24, 23, 24, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 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, 1, 1, 47, 47, 47, 47, + 47, 47, 47, 47, 47, 47, 47, 47, 47, 1, 1, 1, 47, 47, 47, 47, 47, 47, 47, + 47, 47, 47, 47, 47, 47, 47, 47, 47, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 47, + 47, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 23, 24, + 23, 24, 23, 24, 23, 24, 23, 24, 23, 24, 23, 24, 23, 24, 23, 24, 23, 24, + 23, 24, 23, 24, 23, 24, 23, 24, 23, 24, 23, 24, 0, 0, 23, 24, 23, 24, 23, + 24, 23, 24, 23, 24, 23, 24, 47, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, + 1, 1, 47, 23, 24, 23, 24, 23, 24, 23, 24, 23, 24, 23, 24, 23, 24, 23, 24, + 23, 24, 23, 24, 23, 24, 23, 24, 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, 21, 21, 21, 21, 21, 21, + 21, 21, 21, 21, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 47, 47, 47, 47, 47, 47, 47, 47, 47, 1, 1, 23, 24, 23, 24, 23, 24, 23, 24, 23, 24, 23, 24, 23, 24, 16, 16, 23, 24, 23, 24, 23, 24, 23, 24, 23, 24, 23, 24, 23, 24, 23, 24, 23, 24, 23, 24, 23, 24, 23, 24, 23, 24, 23, 24, 23, 24, 23, 24, 23, 24, 23, 24, 23, 24, 23, 24, 23, 24, 23, 24, 23, 24, 23, 24, 23, 24, 23, 24, 23, 24, 23, 24, 23, 24, 23, 24, 23, 24, 47, 16, 16, 16, 16, - 16, 16, 16, 16, 23, 24, 23, 24, 159, 23, 24, 23, 24, 23, 24, 23, 24, 23, + 16, 16, 16, 16, 23, 24, 23, 24, 163, 23, 24, 23, 24, 23, 24, 23, 24, 23, 24, 47, 1, 1, 23, 24, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -1417,55 +1427,75 @@ 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, 1, 47, 47, 47, 1, 47, 47, 47, 47, 1, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, - 47, 1, 1, 1, 1, 1, 1, 1, 1, 1, 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, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 21, 21, 21, 21, 21, 21, 1, 1, + 1, 1, 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, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 47, 47, 47, 47, 47, 47, + 47, 47, 47, 47, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, - 47, 47, 47, 47, 47, 47, 47, 47, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 4, 5, 6, 7, 8, 9, 10, 11, 12, - 13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 5, 6, 7, 8, 9, 10, 11, - 12, 13, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, - 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, - 47, 47, 47, 47, 47, 47, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 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, 47, 47, 47, 47, 47, + 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 4, 5, 6, 7, 8, 9, 10, + 11, 12, 13, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 47, 47, 47, 47, 47, 47, 1, 1, 1, 47, 0, 0, 0, 0, 4, 5, 6, 7, + 8, 9, 10, 11, 12, 13, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, + 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, + 47, 47, 47, 47, 47, 47, 47, 47, 47, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 47, 47, 47, 47, 47, 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, 1, 1, 1, 1, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 47, - 47, 47, 1, 47, 47, 47, 47, 47, 47, 47, 47, 1, 1, 0, 0, 4, 5, 6, 7, 8, 9, - 10, 11, 12, 13, 0, 0, 1, 1, 1, 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, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 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, + 47, 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, 0, 47, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 0, 0, 0, 0, 1, 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, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, + 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, + 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 47, 47, 47, 1, 47, 47, 47, 47, 47, + 47, 47, 47, 1, 1, 0, 0, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 0, 0, 1, 1, 1, + 1, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, + 47, 47, 47, 47, 47, 47, 1, 1, 1, 47, 1, 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, 1, 47, 1, 1, 1, 47, 47, 1, 1, 47, 47, 47, 47, + 47, 1, 1, 47, 1, 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, 47, 47, 47, 1, 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, 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, 47, 47, 47, 47, 47, 47, 47, 47, + 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, + 47, 47, 47, 47, 47, 47, 47, 47, 47, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, + 0, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 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, 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, 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, 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, 47, 47, 47, 47, 47, 47, - 47, 47, 47, 47, 47, 47, 47, 47, 47, 158, 47, 47, 47, 47, 47, 47, 47, 158, - 47, 47, 47, 47, 158, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, + 47, 47, 47, 47, 47, 47, 47, 47, 47, 162, 47, 47, 47, 47, 47, 47, 47, 162, + 47, 47, 47, 47, 162, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, - 47, 47, 47, 47, 47, 47, 47, 47, 158, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, - 47, 47, 47, 158, 47, 158, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, + 47, 47, 47, 47, 47, 47, 47, 47, 162, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, - 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 158, 47, 47, 47, 47, 47, 47, + 47, 47, 47, 162, 47, 162, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, + 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, + 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 162, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 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, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 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, 47, 47, + 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 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, @@ -1570,12 +1600,12 @@ 47, 47, 47, 47, 47, 47, 47, 47, 0, 0, 0, 0, 47, 47, 47, 47, 47, 47, 47, 47, 1, 21, 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, 0, 0, - 0, 0, 0, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, - 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, - 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 161, - 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, - 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, - 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 47, 47, 47, 47, + 0, 0, 0, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, + 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, + 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 165, + 165, 165, 165, 165, 165, 165, 165, 165, 165, 165, 165, 165, 165, 165, + 165, 165, 165, 165, 165, 165, 165, 165, 165, 165, 165, 165, 165, 165, + 165, 165, 165, 165, 165, 165, 165, 165, 165, 165, 165, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, @@ -1587,42 +1617,74 @@ 0, 0, 0, 0, 0, 0, 47, 47, 47, 47, 47, 47, 0, 0, 47, 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, 0, 47, 47, 0, 0, 0, 47, 0, 0, 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, + 47, 47, 47, 47, 0, 47, 47, 0, 0, 0, 47, 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, 0, 1, 21, + 21, 21, 21, 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, 47, 47, 47, 47, 47, + 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 21, + 21, 21, 21, 21, 21, 0, 0, 0, 1, 47, 47, 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, 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, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, - 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 21, 21, 21, 21, 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, 47, 1, 1, 1, 0, + 1, 1, 0, 0, 0, 0, 0, 1, 1, 1, 1, 47, 47, 47, 47, 0, 47, 47, 47, 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, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 1, 20, + 17, 18, 113, 21, 21, 21, 21, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 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, + 21, 21, 1, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, + 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, + 47, 47, 47, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 47, 47, 47, 47, 47, 47, 47, 47, + 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 0, 0, 21, 21, 21, + 21, 21, 21, 21, 21, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, + 47, 47, 47, 47, 47, 47, 0, 0, 0, 0, 0, 21, 21, 21, 21, 21, 21, 21, 21, + 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, + 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, + 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 1, 1, 0, 1, 1, 0, 0, 0, 0, 0, 1, 1, 1, 1, - 47, 47, 47, 47, 0, 47, 47, 47, 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, 0, 0, - 0, 0, 1, 1, 1, 0, 0, 0, 0, 1, 20, 17, 18, 111, 21, 21, 21, 21, 0, 0, 0, - 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 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, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, + 0, 0, 0, 0, 0, 0, 0, 0, 20, 17, 18, 113, 114, 115, 116, 117, 118, 21, 21, + 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, + 21, 21, 0, 1, 1, 1, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, + 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, + 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 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, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 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, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, + 47, 47, 47, 47, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, - 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 1, 1, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, - 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 1, 1, 21, 21, 21, - 21, 21, 21, 21, 21, 21, 21, 21, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, - 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 1, 1, 21, 21, 21, 21, + 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, + 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 1, 1, 21, 21, 21, 21, 21, + 21, 21, 21, 21, 21, 21, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, + 1, 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, 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, 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, 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, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 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, 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, @@ -1630,109 +1692,126 @@ 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, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 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, 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, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 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, 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, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 21, - 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 95, 95, 95, 95, 95, 95, 95, 95, 95, - 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, - 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 16, 16, 16, - 16, 16, 16, 16, 0, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, - 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 95, 0, 95, 95, 0, 0, 95, 0, 0, 95, 95, 0, 0, 95, 95, 95, 95, - 0, 95, 95, 95, 95, 95, 95, 95, 95, 16, 16, 16, 16, 0, 16, 0, 16, 16, 16, - 16, 16, 16, 16, 0, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 95, 95, - 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, - 95, 95, 95, 95, 95, 95, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 95, 95, 0, 95, - 95, 95, 95, 0, 0, 95, 95, 95, 95, 95, 95, 95, 95, 0, 95, 95, 95, 95, 95, - 95, 95, 0, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 95, 95, 0, 95, 95, 95, 95, 0, - 95, 95, 95, 95, 95, 0, 95, 0, 0, 0, 95, 95, 95, 95, 95, 95, 95, 0, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, - 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, - 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, - 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, - 95, 95, 95, 95, 95, 95, 95, 95, 95, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 95, - 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, - 95, 95, 95, 95, 95, 95, 95, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 95, 95, 95, - 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, - 95, 95, 95, 95, 95, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 0, 0, 95, 95, - 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, - 95, 95, 95, 95, 95, 1, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 1, 16, 16, 16, 16, - 16, 16, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, - 95, 95, 95, 95, 95, 95, 95, 95, 95, 1, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 1, - 16, 16, 16, 16, 16, 16, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, - 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 1, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 1, 16, 16, 16, 16, 16, 16, 95, 95, 95, 95, 95, 95, 95, 95, - 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 1, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 1, 16, 16, 16, 16, 16, 16, 95, 95, 95, 95, - 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, - 95, 95, 95, 1, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 1, 16, 16, 16, 16, 16, 16, - 95, 16, 0, 0, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 4, 5, 6, 7, 8, 9, 10, 11, - 12, 13, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 4, 5, 6, 7, 8, 9, 10, 11, 12, - 13, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 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, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 21, 21, + 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, + 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, + 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 16, 16, 16, 16, + 16, 16, 16, 0, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, + 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 97, 0, 97, 97, 0, 0, 97, 0, 0, 97, 97, 0, 0, 97, 97, 97, 97, 0, + 97, 97, 97, 97, 97, 97, 97, 97, 16, 16, 16, 16, 0, 16, 0, 16, 16, 16, 16, + 16, 16, 16, 0, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 97, 97, 97, + 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, + 97, 97, 97, 97, 97, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 97, 97, 0, 97, 97, + 97, 97, 0, 0, 97, 97, 97, 97, 97, 97, 97, 97, 0, 97, 97, 97, 97, 97, 97, + 97, 0, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 97, 97, 0, 97, 97, 97, 97, 0, 97, + 97, 97, 97, 97, 0, 97, 0, 0, 0, 97, 97, 97, 97, 97, 97, 97, 0, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, + 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, + 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, + 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, + 97, 97, 97, 97, 97, 97, 97, 97, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 97, 97, + 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, + 97, 97, 97, 97, 97, 97, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 97, 97, 97, 97, + 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, + 97, 97, 97, 97, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 0, 0, 97, 97, 97, + 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, + 97, 97, 97, 97, 1, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 1, 16, 16, 16, 16, 16, + 16, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, + 97, 97, 97, 97, 97, 97, 97, 97, 1, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 1, 16, + 16, 16, 16, 16, 16, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, + 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 1, 16, 16, 16, 16, 16, 16, 97, 97, 97, 97, 97, 97, 97, 97, 97, + 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 1, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 1, 16, 16, 16, 16, 16, 16, 97, 97, 97, 97, 97, + 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, + 97, 97, 1, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 1, 16, 16, 16, 16, 16, 16, 97, + 16, 0, 0, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 4, 5, 6, 7, 8, 9, 10, 11, 12, + 13, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, + 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 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, 0, 0, 0, 0, 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, 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, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 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, 141, 141, 20, 17, 18, 113, 114, 115, 116, 117, 118, 0, 0, 0, 0, + 0, 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, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, + 1, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, + 1, 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, 1, 0, 1, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 1, 1, 1, 1, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, + 1, 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, 47, 158, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 47, 162, 47, 47, 47, 47, 47, 47, 47, 47, 47, + 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, + 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 162, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, - 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 158, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, + 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 162, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, - 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 158, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, + 47, 47, 47, 47, 47, 47, 47, 47, 162, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, - 47, 47, 47, 47, 158, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, + 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 162, 47, + 47, 47, 47, 47, 47, 47, 47, 162, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, + 47, 47, 47, 47, 47, 162, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, - 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 158, 47, 47, 47, 47, 47, - 47, 47, 47, 158, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, - 47, 158, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, @@ -1742,32 +1821,32 @@ 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, + 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 162, 47, 47, 47, 47, + 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 162, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, - 47, 47, 47, 47, 47, 47, 47, 47, 47, 158, 47, 47, 47, 47, 47, 47, 47, 47, - 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 158, 47, 47, 47, 47, 47, 47, 47, + 47, 47, 47, 47, 47, 47, 162, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, - 47, 47, 158, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, + 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 162, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, - 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 158, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, + 47, 47, 47, 47, 47, 47, 47, 47, 47, 162, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, - 47, 47, 47, 47, 47, 158, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, + 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 162, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, - 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 158, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, @@ -1778,23 +1857,28 @@ 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, + 47, 47, 47, 47, 47, 47, 47, 47, 162, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, - 47, 47, 47, 47, 158, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 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, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, + 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, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, 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, @@ -1802,13 +1886,13 @@ 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, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 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, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, }; /* Returns the numeric value as double for Unicode characters @@ -1843,20 +1927,26 @@ case 0x1810: case 0x1946: case 0x19D0: + case 0x1A80: + case 0x1A90: case 0x1B50: case 0x1BB0: case 0x1C40: case 0x1C50: case 0x2070: case 0x2080: + case 0x2189: case 0x24EA: case 0x24FF: case 0x3007: case 0x96F6: case 0xA620: + case 0xA6EF: case 0xA8D0: case 0xA900: + case 0xA9D0: case 0xAA50: + case 0xABF0: case 0xF9B2: case 0xFF10: #ifdef Py_UNICODE_WIDE @@ -1867,6 +1957,8 @@ case 0x1D7E2: case 0x1D7EC: case 0x1D7F6: + case 0x1F100: + case 0x1F101: #endif return (double) 0.0; case 0x0031: @@ -1876,7 +1968,6 @@ case 0x07C1: case 0x0967: case 0x09E7: - case 0x09F4: case 0x0A67: case 0x0AE7: case 0x0B67: @@ -1897,6 +1988,9 @@ case 0x1811: case 0x1947: case 0x19D1: + case 0x19DA: + case 0x1A81: + case 0x1A91: case 0x1B51: case 0x1BB1: case 0x1C41: @@ -1922,9 +2016,12 @@ case 0x5E7A: case 0x5F0C: case 0xA621: + case 0xA6E6: case 0xA8D1: case 0xA901: + case 0xA9D1: case 0xAA51: + case 0xABF1: case 0xFF11: #ifdef Py_UNICODE_WIDE case 0x10107: @@ -1935,8 +2032,13 @@ case 0x10320: case 0x103D1: case 0x104A1: + case 0x10858: case 0x10916: case 0x10A40: + case 0x10A7D: + case 0x10B58: + case 0x10B78: + case 0x10E60: case 0x12415: case 0x1241E: case 0x1242C: @@ -1949,29 +2051,41 @@ case 0x1D7E3: case 0x1D7ED: case 0x1D7F7: + case 0x1F102: case 0x2092A: #endif return (double) 1.0; + case 0x2152: + return (double) 1.0/10.0; + case 0x09F4: + case 0xA833: + return (double) 1.0/16.0; case 0x00BD: case 0x0D74: case 0x0F2A: case 0x2CFD: + case 0xA831: #ifdef Py_UNICODE_WIDE case 0x10141: case 0x10175: case 0x10176: + case 0x10E7B: #endif return (double) 1.0/2.0; case 0x2153: #ifdef Py_UNICODE_WIDE + case 0x10E7D: case 0x1245A: case 0x1245D: #endif return (double) 1.0/3.0; case 0x00BC: + case 0x09F7: case 0x0D73: + case 0xA830: #ifdef Py_UNICODE_WIDE case 0x10140: + case 0x10E7C: case 0x12460: case 0x12462: #endif @@ -1983,11 +2097,17 @@ case 0x12461: #endif return (double) 1.0/6.0; + case 0x2150: + return (double) 1.0/7.0; + case 0x09F5: case 0x215B: + case 0xA834: #ifdef Py_UNICODE_WIDE case 0x1245F: #endif return (double) 1.0/8.0; + case 0x2151: + return (double) 1.0/9.0; case 0x0BF0: case 0x0D70: case 0x1372: @@ -2020,8 +2140,12 @@ case 0x10164: case 0x10322: case 0x103D3: + case 0x1085B: case 0x10917: case 0x10A44: + case 0x10B5C: + case 0x10B7C: + case 0x10E69: case 0x1D369: #endif return (double) 10.0; @@ -2039,8 +2163,12 @@ case 0x10152: case 0x1016A: case 0x103D5: + case 0x1085D: case 0x10919: case 0x10A46: + case 0x10B5E: + case 0x10B7E: + case 0x10E72: #endif return (double) 100.0; case 0x0BF2: @@ -2056,7 +2184,10 @@ case 0x1014D: case 0x10154: case 0x10171: + case 0x1085E: case 0x10A47: + case 0x10B5F: + case 0x10B7F: #endif return (double) 1000.0; case 0x137C: @@ -2066,6 +2197,7 @@ #ifdef Py_UNICODE_WIDE case 0x1012B: case 0x10155: + case 0x1085F: #endif return (double) 10000.0; case 0x2188: @@ -2143,7 +2275,6 @@ case 0x07C2: case 0x0968: case 0x09E8: - case 0x09F5: case 0x0A68: case 0x0AE8: case 0x0B68: @@ -2164,6 +2295,8 @@ case 0x1812: case 0x1948: case 0x19D2: + case 0x1A82: + case 0x1A92: case 0x1B52: case 0x1BB2: case 0x1C42: @@ -2191,9 +2324,12 @@ case 0x8CB3: case 0x8D30: case 0xA622: + case 0xA6E7: case 0xA8D2: case 0xA902: + case 0xA9D2: case 0xAA52: + case 0xABF2: case 0xF978: case 0xFF12: #ifdef Py_UNICODE_WIDE @@ -2204,7 +2340,12 @@ case 0x1015E: case 0x103D2: case 0x104A2: + case 0x10859: + case 0x1091A: case 0x10A41: + case 0x10B59: + case 0x10B79: + case 0x10E61: case 0x12400: case 0x12416: case 0x1241F: @@ -2220,12 +2361,14 @@ case 0x1D7E4: case 0x1D7EE: case 0x1D7F8: + case 0x1F103: case 0x22390: #endif return (double) 2.0; case 0x2154: #ifdef Py_UNICODE_WIDE case 0x10177: + case 0x10E7E: case 0x1245B: case 0x1245E: #endif @@ -2243,13 +2386,18 @@ #ifdef Py_UNICODE_WIDE case 0x10111: case 0x103D4: + case 0x1085C: case 0x10918: case 0x10A45: + case 0x10B5D: + case 0x10B7D: + case 0x10E6A: case 0x1D36A: #endif return (double) 20.0; #ifdef Py_UNICODE_WIDE case 0x1011A: + case 0x10E73: return (double) 200.0; #endif #ifdef Py_UNICODE_WIDE @@ -2285,7 +2433,6 @@ case 0x07C3: case 0x0969: case 0x09E9: - case 0x09F6: case 0x0A69: case 0x0AE9: case 0x0B69: @@ -2306,6 +2453,8 @@ case 0x1813: case 0x1949: case 0x19D3: + case 0x1A83: + case 0x1A93: case 0x1B53: case 0x1BB3: case 0x1C43: @@ -2332,15 +2481,23 @@ case 0x53C4: case 0x5F0E: case 0xA623: + case 0xA6E8: case 0xA8D3: case 0xA903: + case 0xA9D3: case 0xAA53: + case 0xABF3: case 0xF96B: case 0xFF13: #ifdef Py_UNICODE_WIDE case 0x10109: case 0x104A3: + case 0x1085A: + case 0x1091B: case 0x10A42: + case 0x10B5A: + case 0x10B7A: + case 0x10E62: case 0x12401: case 0x12408: case 0x12417: @@ -2361,16 +2518,22 @@ case 0x1D7E5: case 0x1D7EF: case 0x1D7F9: + case 0x1F104: case 0x20AFD: case 0x20B19: case 0x22998: case 0x23B1B: #endif return (double) 3.0; + case 0x09F6: + case 0xA835: + return (double) 3.0/16.0; case 0x0F2B: return (double) 3.0/2.0; case 0x00BE: + case 0x09F8: case 0x0D75: + case 0xA832: #ifdef Py_UNICODE_WIDE case 0x10178: #endif @@ -2386,6 +2549,7 @@ #ifdef Py_UNICODE_WIDE case 0x10112: case 0x10165: + case 0x10E6B: case 0x1D36B: case 0x20983: #endif @@ -2393,6 +2557,7 @@ #ifdef Py_UNICODE_WIDE case 0x1011B: case 0x1016B: + case 0x10E74: return (double) 300.0; #endif #ifdef Py_UNICODE_WIDE @@ -2427,7 +2592,6 @@ case 0x07C4: case 0x096A: case 0x09EA: - case 0x09F7: case 0x0A6A: case 0x0AEA: case 0x0B6A: @@ -2446,6 +2610,8 @@ case 0x1814: case 0x194A: case 0x19D4: + case 0x1A84: + case 0x1A94: case 0x1B54: case 0x1BB4: case 0x1C44: @@ -2469,14 +2635,20 @@ case 0x56DB: case 0x8086: case 0xA624: + case 0xA6E9: case 0xA8D4: case 0xA904: + case 0xA9D4: case 0xAA54: + case 0xABF4: case 0xFF14: #ifdef Py_UNICODE_WIDE case 0x1010A: case 0x104A4: case 0x10A43: + case 0x10B5B: + case 0x10B7B: + case 0x10E63: case 0x12402: case 0x12409: case 0x1240F: @@ -2498,6 +2670,7 @@ case 0x1D7E6: case 0x1D7F0: case 0x1D7FA: + case 0x1F105: case 0x20064: case 0x200E2: case 0x2626D: @@ -2510,6 +2683,7 @@ case 0x534C: #ifdef Py_UNICODE_WIDE case 0x10113: + case 0x10E6C: case 0x1D36C: case 0x2098C: case 0x2099C: @@ -2517,6 +2691,7 @@ return (double) 40.0; #ifdef Py_UNICODE_WIDE case 0x1011C: + case 0x10E75: return (double) 400.0; #endif #ifdef Py_UNICODE_WIDE @@ -2569,6 +2744,8 @@ case 0x1815: case 0x194B: case 0x19D5: + case 0x1A85: + case 0x1A95: case 0x1B55: case 0x1BB5: case 0x1C45: @@ -2592,9 +2769,12 @@ case 0x4E94: case 0x4F0D: case 0xA625: + case 0xA6EA: case 0xA8D5: case 0xA905: + case 0xA9D5: case 0xAA55: + case 0xABF5: case 0xFF15: #ifdef Py_UNICODE_WIDE case 0x1010B: @@ -2605,6 +2785,7 @@ case 0x10173: case 0x10321: case 0x104A5: + case 0x10E64: case 0x12403: case 0x1240A: case 0x12410: @@ -2622,6 +2803,7 @@ case 0x1D7E7: case 0x1D7F1: case 0x1D7FB: + case 0x1F106: case 0x20121: #endif return (double) 5.0; @@ -2650,6 +2832,8 @@ case 0x10169: case 0x10174: case 0x10323: + case 0x10A7E: + case 0x10E6D: case 0x1D36D: #endif return (double) 50.0; @@ -2665,6 +2849,7 @@ case 0x1016E: case 0x1016F: case 0x10170: + case 0x10E76: #endif return (double) 500.0; case 0x2181: @@ -2706,6 +2891,8 @@ case 0x1816: case 0x194C: case 0x19D6: + case 0x1A86: + case 0x1A96: case 0x1B56: case 0x1BB6: case 0x1C46: @@ -2729,15 +2916,19 @@ case 0x9646: case 0x9678: case 0xA626: + case 0xA6EB: case 0xA8D6: case 0xA906: + case 0xA9D6: case 0xAA56: + case 0xABF6: case 0xF9D1: case 0xF9D3: case 0xFF16: #ifdef Py_UNICODE_WIDE case 0x1010C: case 0x104A6: + case 0x10E65: case 0x12404: case 0x1240B: case 0x12411: @@ -2751,17 +2942,20 @@ case 0x1D7E8: case 0x1D7F2: case 0x1D7FC: + case 0x1F107: case 0x20AEA: #endif return (double) 6.0; case 0x1377: #ifdef Py_UNICODE_WIDE case 0x10115: + case 0x10E6E: case 0x1D36E: #endif return (double) 60.0; #ifdef Py_UNICODE_WIDE case 0x1011E: + case 0x10E77: return (double) 600.0; #endif #ifdef Py_UNICODE_WIDE @@ -2796,6 +2990,8 @@ case 0x1817: case 0x194D: case 0x19D7: + case 0x1A87: + case 0x1A97: case 0x1B57: case 0x1BB7: case 0x1C47: @@ -2819,13 +3015,17 @@ case 0x67D2: case 0x6F06: case 0xA627: + case 0xA6EC: case 0xA8D7: case 0xA907: + case 0xA9D7: case 0xAA57: + case 0xABF7: case 0xFF17: #ifdef Py_UNICODE_WIDE case 0x1010D: case 0x104A7: + case 0x10E66: case 0x12405: case 0x1240C: case 0x12412: @@ -2840,6 +3040,7 @@ case 0x1D7E9: case 0x1D7F3: case 0x1D7FD: + case 0x1F108: case 0x20001: #endif return (double) 7.0; @@ -2850,11 +3051,13 @@ case 0x1378: #ifdef Py_UNICODE_WIDE case 0x10116: + case 0x10E6F: case 0x1D36F: #endif return (double) 70.0; #ifdef Py_UNICODE_WIDE case 0x1011F: + case 0x10E78: return (double) 700.0; #endif #ifdef Py_UNICODE_WIDE @@ -2889,6 +3092,8 @@ case 0x1818: case 0x194E: case 0x19D8: + case 0x1A88: + case 0x1A98: case 0x1B58: case 0x1BB8: case 0x1C48: @@ -2910,13 +3115,17 @@ case 0x516B: case 0x634C: case 0xA628: + case 0xA6ED: case 0xA8D8: case 0xA908: + case 0xA9D8: case 0xAA58: + case 0xABF8: case 0xFF18: #ifdef Py_UNICODE_WIDE case 0x1010E: case 0x104A8: + case 0x10E67: case 0x12406: case 0x1240D: case 0x12413: @@ -2930,16 +3139,19 @@ case 0x1D7EA: case 0x1D7F4: case 0x1D7FE: + case 0x1F109: #endif return (double) 8.0; case 0x1379: #ifdef Py_UNICODE_WIDE case 0x10117: + case 0x10E70: case 0x1D370: #endif return (double) 80.0; #ifdef Py_UNICODE_WIDE case 0x10120: + case 0x10E79: return (double) 800.0; #endif #ifdef Py_UNICODE_WIDE @@ -2974,6 +3186,8 @@ case 0x1819: case 0x194F: case 0x19D9: + case 0x1A89: + case 0x1A99: case 0x1B59: case 0x1BB9: case 0x1C49: @@ -2996,13 +3210,17 @@ case 0x5EFE: case 0x7396: case 0xA629: + case 0xA6EE: case 0xA8D9: case 0xA909: + case 0xA9D9: case 0xAA59: + case 0xABF9: case 0xFF19: #ifdef Py_UNICODE_WIDE case 0x1010F: case 0x104A9: + case 0x10E68: case 0x12407: case 0x1240E: case 0x12414: @@ -3018,6 +3236,7 @@ case 0x1D7EB: case 0x1D7F5: case 0x1D7FF: + case 0x1F10A: case 0x2F890: #endif return (double) 9.0; @@ -3027,12 +3246,14 @@ #ifdef Py_UNICODE_WIDE case 0x10118: case 0x10341: + case 0x10E71: case 0x1D371: #endif return (double) 90.0; #ifdef Py_UNICODE_WIDE case 0x10121: case 0x1034A: + case 0x10E7A: return (double) 900.0; #endif #ifdef Py_UNICODE_WIDE Modified: python/trunk/Tools/unicode/makeunicodedata.py ============================================================================== --- python/trunk/Tools/unicode/makeunicodedata.py (original) +++ python/trunk/Tools/unicode/makeunicodedata.py Thu Mar 18 22:50:06 2010 @@ -30,7 +30,7 @@ VERSION = "2.6" # The Unicode Database -UNIDATA_VERSION = "5.1.0" +UNIDATA_VERSION = "5.2.0" UNICODE_DATA = "UnicodeData%s.txt" COMPOSITION_EXCLUSIONS = "CompositionExclusions%s.txt" EASTASIAN_WIDTH = "EastAsianWidth%s.txt" From python-checkins at python.org Thu Mar 18 22:54:01 2010 From: python-checkins at python.org (collin.winter) Date: Thu, 18 Mar 2010 22:54:01 +0100 (CET) Subject: [Python-checkins] r79060 - in python/trunk: Doc/library/weakref.rst Include/code.h Lib/test/test_code.py Lib/test/test_sys.py Misc/NEWS Objects/codeobject.c Message-ID: <20100318215401.4E4BCE417@mail.python.org> Author: collin.winter Date: Thu Mar 18 22:54:01 2010 New Revision: 79060 Log: Add support for weak references to code objects. This will be used by an optimization in the incoming Python 3 JIT. Patch by Reid Kleckner! Modified: python/trunk/Doc/library/weakref.rst python/trunk/Include/code.h python/trunk/Lib/test/test_code.py python/trunk/Lib/test/test_sys.py python/trunk/Misc/NEWS python/trunk/Objects/codeobject.c Modified: python/trunk/Doc/library/weakref.rst ============================================================================== --- python/trunk/Doc/library/weakref.rst (original) +++ python/trunk/Doc/library/weakref.rst Thu Mar 18 22:54:01 2010 @@ -59,13 +59,13 @@ instances, functions written in Python (but not in C), methods (both bound and unbound), sets, frozensets, file objects, :term:`generator`\s, type objects, :class:`DBcursor` objects from the :mod:`bsddb` module, sockets, arrays, deques, -and regular expression pattern objects. +regular expression pattern objects, and code objects. .. versionchanged:: 2.4 Added support for files, sockets, arrays, and patterns. .. versionchanged:: 2.7 - Added support for thread.lock and threading.Lock. + Added support for thread.lock, threading.Lock, and code objects. Several built-in types such as :class:`list` and :class:`dict` do not directly support weak references but can add support through subclassing:: Modified: python/trunk/Include/code.h ============================================================================== --- python/trunk/Include/code.h (original) +++ python/trunk/Include/code.h Thu Mar 18 22:54:01 2010 @@ -26,6 +26,7 @@ PyObject *co_lnotab; /* string (encoding addr<->lineno mapping) See Objects/lnotab_notes.txt for details. */ void *co_zombieframe; /* for optimization only (see frameobject.c) */ + PyObject *co_weakreflist; /* to support weakrefs to code objects */ } PyCodeObject; /* Masks for co_flags above */ Modified: python/trunk/Lib/test/test_code.py ============================================================================== --- python/trunk/Lib/test/test_code.py (original) +++ python/trunk/Lib/test/test_code.py Thu Mar 18 22:54:01 2010 @@ -81,8 +81,10 @@ """ import unittest +import weakref import _testcapi + def consts(t): """Yield a doctest-safe sequence of object reprs.""" for elt in t: @@ -109,12 +111,37 @@ self.assertEquals(co.co_firstlineno, 15) +class CodeWeakRefTest(unittest.TestCase): + + def test_basic(self): + # Create a code object in a clean environment so that we know we have + # the only reference to it left. + namespace = {} + exec "def f(): pass" in globals(), namespace + f = namespace["f"] + del namespace + + self.called = False + def callback(code): + self.called = True + + # f is now the last reference to the function, and through it, the code + # object. While we hold it, check that we can create a weakref and + # deref it. Then delete it, and check that the callback gets called and + # the reference dies. + coderef = weakref.ref(f.__code__, callback) + self.assertTrue(bool(coderef())) + del f + self.assertFalse(bool(coderef())) + self.assertTrue(self.called) + + def test_main(verbose=None): from test.test_support import run_doctest, run_unittest from test import test_code run_doctest(test_code, verbose) - run_unittest(CodeTest) + run_unittest(CodeTest, CodeWeakRefTest) -if __name__ == '__main__': +if __name__ == "__main__": test_main() Modified: python/trunk/Lib/test/test_sys.py ============================================================================== --- python/trunk/Lib/test/test_sys.py (original) +++ python/trunk/Lib/test/test_sys.py Thu Mar 18 22:54:01 2010 @@ -552,7 +552,7 @@ # complex check(complex(0,1), size(h + '2d')) # code - check(get_cell().func_code, size(h + '4i8Pi2P')) + check(get_cell().func_code, size(h + '4i8Pi3P')) # BaseException check(BaseException(), size(h + '3P')) # UnicodeEncodeError Modified: python/trunk/Misc/NEWS ============================================================================== --- python/trunk/Misc/NEWS (original) +++ python/trunk/Misc/NEWS Thu Mar 18 22:54:01 2010 @@ -19,6 +19,8 @@ printed and Python exits. Initialize the GIL before importing the site module. +- Code objects now support weak references. + Library ------- Modified: python/trunk/Objects/codeobject.c ============================================================================== --- python/trunk/Objects/codeobject.c (original) +++ python/trunk/Objects/codeobject.c Thu Mar 18 22:54:01 2010 @@ -103,6 +103,7 @@ Py_INCREF(lnotab); co->co_lnotab = lnotab; co->co_zombieframe = NULL; + co->co_weakreflist = NULL; } return co; } @@ -314,6 +315,8 @@ Py_XDECREF(co->co_lnotab); if (co->co_zombieframe != NULL) PyObject_GC_Del(co->co_zombieframe); + if (co->co_weakreflist != NULL) + PyObject_ClearWeakRefs((PyObject*)co); PyObject_DEL(co); } @@ -490,8 +493,8 @@ code_doc, /* tp_doc */ 0, /* tp_traverse */ 0, /* tp_clear */ - code_richcompare, /* tp_richcompare */ - 0, /* tp_weaklistoffset */ + code_richcompare, /* tp_richcompare */ + offsetof(PyCodeObject, co_weakreflist), /* tp_weaklistoffset */ 0, /* tp_iter */ 0, /* tp_iternext */ 0, /* tp_methods */ From python-checkins at python.org Thu Mar 18 22:58:43 2010 From: python-checkins at python.org (benjamin.peterson) Date: Thu, 18 Mar 2010 22:58:43 +0100 (CET) Subject: [Python-checkins] r79061 - in python/branches/py3k: Lib/py_compile.py Message-ID: <20100318215843.EDF8EE436@mail.python.org> Author: benjamin.peterson Date: Thu Mar 18 22:58:43 2010 New Revision: 79061 Log: Merged revisions 78971-78972 via svnmerge from svn+ssh://pythondev at svn.python.org/python/trunk ........ r78971 | benjamin.peterson | 2010-03-14 22:00:35 -0500 (Sun, 14 Mar 2010) | 1 line remove mac 9 code ........ r78972 | benjamin.peterson | 2010-03-14 22:02:37 -0500 (Sun, 14 Mar 2010) | 1 line clean up files correctly ........ Modified: python/branches/py3k/ (props changed) python/branches/py3k/Lib/py_compile.py Modified: python/branches/py3k/Lib/py_compile.py ============================================================================== --- python/branches/py3k/Lib/py_compile.py (original) +++ python/branches/py3k/Lib/py_compile.py Thu Mar 18 22:58:43 2010 @@ -62,15 +62,6 @@ return self.msg -# Define an internal helper according to the platform -if os.name == "mac": - import MacOS - def set_creator_type(file): - MacOS.SetCreatorAndType(file, 'Pyth', 'PYC ') -else: - def set_creator_type(file): - pass - def wr_long(f, x): """Internal; write a 32-bit int to a file in little-endian order.""" f.write(bytes([x & 0xff, @@ -129,13 +120,12 @@ """ encoding = read_encoding(file, "utf-8") - f = open(file, 'U', encoding=encoding) - try: - timestamp = int(os.fstat(f.fileno()).st_mtime) - except AttributeError: - timestamp = int(os.stat(file).st_mtime) - codestring = f.read() - f.close() + with open(file, encoding=encoding) as f: + try: + timestamp = int(os.fstat(f.fileno()).st_mtime) + except AttributeError: + timestamp = int(os.stat(file).st_mtime) + codestring = f.read() if codestring and codestring[-1] != '\n': codestring = codestring + '\n' try: @@ -149,15 +139,13 @@ return if cfile is None: cfile = file + (__debug__ and 'c' or 'o') - fc = open(cfile, 'wb') - fc.write(b'\0\0\0\0') - wr_long(fc, timestamp) - marshal.dump(codeobject, fc) - fc.flush() - fc.seek(0, 0) - fc.write(MAGIC) - fc.close() - set_creator_type(cfile) + with open(cfile, 'wb') as fc: + fc.write(b'\0\0\0\0') + wr_long(fc, timestamp) + marshal.dump(codeobject, fc) + fc.flush() + fc.seek(0, 0) + fc.write(MAGIC) def main(args=None): """Compile several source files. From python-checkins at python.org Thu Mar 18 23:11:04 2010 From: python-checkins at python.org (florent.xicluna) Date: Thu, 18 Mar 2010 23:11:04 +0100 (CET) Subject: [Python-checkins] r79062 - in python/branches/py3k: Lib/test/test_unicodedata.py Misc/NEWS Modules/unicodedata_db.h Modules/unicodename_db.h Objects/unicodetype_db.h Message-ID: <20100318221104.4AA3AFAAD@mail.python.org> Author: florent.xicluna Date: Thu Mar 18 23:11:01 2010 New Revision: 79062 Log: Merged revisions 79059 via svnmerge from svn+ssh://pythondev at svn.python.org/python/trunk ........ r79059 | florent.xicluna | 2010-03-18 22:50:06 +0100 (jeu, 18 mar 2010) | 2 lines Issue #8024: Update the Unicode database to 5.2 ........ Modified: python/branches/py3k/ (props changed) python/branches/py3k/Lib/test/test_unicodedata.py python/branches/py3k/Misc/NEWS python/branches/py3k/Modules/unicodedata_db.h python/branches/py3k/Modules/unicodename_db.h python/branches/py3k/Objects/unicodetype_db.h Modified: python/branches/py3k/Lib/test/test_unicodedata.py ============================================================================== --- python/branches/py3k/Lib/test/test_unicodedata.py (original) +++ python/branches/py3k/Lib/test/test_unicodedata.py Thu Mar 18 23:11:01 2010 @@ -21,7 +21,7 @@ class UnicodeMethodsTest(unittest.TestCase): # update this, if the database changes - expectedchecksum = '0b915116051f3ed029a98542c2b7df63c9646272' + expectedchecksum = '4504dffd035baea02c5b9de82bebc3d65e0e0baf' def test_method_checksum(self): h = hashlib.sha1() @@ -80,7 +80,7 @@ class UnicodeFunctionsTest(UnicodeDatabaseTest): # update this, if the database changes - expectedchecksum = 'd4169ccff998ebbd1ec007a0b3fbd66e5ccf0229' + expectedchecksum = 'dd36312c31318f938b9d9ecff757393508c5bd48' def test_function_checksum(self): data = [] Modified: python/branches/py3k/Misc/NEWS ============================================================================== --- python/branches/py3k/Misc/NEWS (original) +++ python/branches/py3k/Misc/NEWS Thu Mar 18 23:11:01 2010 @@ -283,6 +283,8 @@ Library ------- +- Issue #8024: Update the Unicode database to 5.2. + - Issue #6716/2: Backslash-replace error output in compilall. - Issue #4961: Inconsistent/wrong result of askyesno function in tkMessageBox Modified: python/branches/py3k/Modules/unicodedata_db.h ============================================================================== --- python/branches/py3k/Modules/unicodedata_db.h (original) +++ python/branches/py3k/Modules/unicodedata_db.h Thu Mar 18 23:11:01 2010 @@ -1,6 +1,6 @@ /* this file was generated by Tools/unicode/makeunicodedata.py 2.6 */ -#define UNIDATA_VERSION "5.1.0" +#define UNIDATA_VERSION "5.2.0" /* a list of unique database records */ const _PyUnicode_DatabaseRecord _PyUnicode_Database_Records[] = { {0, 0, 0, 0, 0, 0}, @@ -178,6 +178,7 @@ {8, 0, 1, 0, 5, 0}, {14, 0, 1, 0, 5, 0}, {5, 9, 1, 0, 5, 0}, + {4, 1, 14, 0, 5, 0}, {4, 234, 14, 0, 5, 0}, {4, 214, 14, 0, 5, 0}, {4, 202, 14, 0, 5, 0}, @@ -214,9 +215,9 @@ {27, 0, 19, 0, 5, 136}, {22, 0, 19, 1, 5, 136}, {23, 0, 19, 1, 5, 136}, + {18, 0, 1, 0, 4, 136}, {28, 0, 11, 0, 5, 136}, {28, 0, 11, 0, 1, 0}, - {4, 1, 14, 0, 5, 0}, {30, 0, 19, 0, 5, 136}, {30, 0, 19, 0, 4, 136}, {1, 0, 1, 0, 4, 170}, @@ -264,6 +265,7 @@ {30, 0, 1, 0, 2, 0}, {9, 0, 1, 0, 2, 136}, {30, 0, 1, 0, 2, 136}, + {30, 0, 1, 0, 4, 0}, {9, 0, 19, 0, 2, 136}, {29, 0, 1, 0, 5, 0}, {15, 0, 1, 0, 5, 0}, @@ -314,17 +316,18 @@ {14, 0, 19, 0, 5, 0}, {8, 0, 19, 0, 5, 0}, {9, 0, 4, 0, 5, 0}, + {9, 0, 12, 0, 5, 0}, {30, 0, 1, 0, 5, 170}, {5, 216, 1, 0, 5, 0}, {5, 226, 1, 0, 5, 0}, {27, 0, 1, 0, 5, 136}, - {27, 0, 1, 1, 5, 136}, {7, 0, 9, 0, 5, 136}, + {30, 0, 1, 0, 5, 136}, }; /* Reindexing of NFC first characters. */ -#define TOTAL_FIRST 367 -#define TOTAL_LAST 54 +#define TOTAL_FIRST 370 +#define TOTAL_LAST 55 struct reindex{int start;short count,index;}; static struct reindex nfc_first[] = { { 60, 2, 0}, @@ -530,6 +533,9 @@ { 12507, 0, 361}, { 12527, 3, 362}, { 12541, 0, 366}, + { 69785, 0, 367}, + { 69787, 0, 368}, + { 69797, 0, 369}, {0,0,0} }; @@ -565,6 +571,7 @@ { 4142, 0, 50}, { 6965, 0, 51}, { 12441, 1, 52}, + { 69818, 0, 54}, {0,0,0} }; @@ -658,1229 +665,1262 @@ /* index tables for the database records */ #define SHIFT 7 static unsigned char index1[] = { - 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 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, 40, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 16, 50, 51, 52, - 16, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, - 70, 71, 72, 73, 74, 75, 75, 76, 77, 78, 79, 80, 16, 81, 82, 83, 84, 85, - 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 97, 97, 97, 97, 97, 97, - 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, - 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, - 97, 97, 97, 97, 97, 97, 97, 97, 98, 97, 97, 97, 97, 97, 97, 97, 97, 97, - 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, - 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, - 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, - 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, - 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, - 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, - 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, - 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, - 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 99, 100, 97, 97, 97, 97, 97, 97, - 97, 97, 101, 40, 40, 102, 103, 104, 105, 106, 107, 108, 16, 109, 16, 16, - 16, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, - 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, - 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, - 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, - 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, - 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, - 110, 110, 110, 111, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, - 112, 112, 112, 112, 112, 112, 113, 113, 113, 113, 113, 113, 113, 113, - 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, - 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, - 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, - 114, 114, 115, 116, 117, 118, 119, 119, 120, 121, 122, 123, 124, 125, - 126, 127, 128, 129, 16, 130, 131, 132, 133, 134, 16, 16, 16, 16, 16, 16, - 135, 16, 136, 16, 137, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 40, 40, 40, 40, 40, - 40, 138, 16, 139, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 75, 140, 141, 142, 143, 16, 144, 16, 145, 146, 147, - 148, 149, 150, 151, 152, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 153, 154, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 97, 97, 97, 97, - 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, - 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, - 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, - 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, - 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, - 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, - 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, - 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, - 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, - 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, - 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, - 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, - 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, - 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, - 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, - 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, - 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, - 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, - 97, 97, 97, 97, 97, 155, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 114, 114, 114, 114, 156, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 157, 16, 158, 159, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 113, 113, 113, 113, 113, - 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, - 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, - 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, - 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, - 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, - 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, - 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, - 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, - 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, - 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, - 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, - 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, - 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, - 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, - 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, - 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, - 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, - 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, - 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, - 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, - 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, - 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, - 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, - 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, - 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, - 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, - 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, - 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, - 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, - 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, - 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, - 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, - 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, - 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, - 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, - 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, - 113, 113, 160, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, - 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, - 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, - 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, - 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, - 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, - 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, - 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, - 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, - 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, - 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, - 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, - 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, - 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, - 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, - 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, - 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, - 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, - 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, - 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, - 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, - 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, - 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, - 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, - 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, - 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, - 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, - 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, - 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, - 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, - 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, - 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, - 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, - 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, - 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, - 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, - 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 160, -}; - -static unsigned short index2[] = { - 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 3, 2, 4, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 3, 3, 3, 2, 5, 6, 6, 7, 8, 7, 6, 6, 9, 10, 6, 11, 12, 13, 12, - 12, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 12, 6, 15, 16, 15, 6, 6, 17, + 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, 41, 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, 78, 79, 80, 81, 82, 83, 17, 84, 85, 86, 87, 88, + 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 100, 100, 100, 100, 100, + 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, + 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, + 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, + 100, 100, 100, 101, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, + 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, + 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, + 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, + 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, + 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, + 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, + 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, + 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, + 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, + 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, + 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 102, + 103, 100, 100, 100, 100, 100, 100, 100, 100, 104, 41, 41, 105, 106, 107, + 108, 109, 110, 111, 112, 113, 114, 17, 115, 116, 116, 116, 116, 116, 116, + 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, + 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, + 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, + 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, + 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, + 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 117, 118, 118, + 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, + 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, + 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, + 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, + 119, 119, 119, 119, 119, 119, 119, 119, 120, 120, 121, 122, 123, 124, + 125, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 17, 136, 137, + 138, 139, 140, 17, 17, 17, 17, 17, 17, 141, 17, 142, 17, 143, 17, 144, + 17, 145, 17, 17, 17, 146, 17, 17, 17, 17, 147, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 9, 6, 10, 18, 19, 18, 20, 20, 20, 20, 20, 20, - 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, - 20, 20, 9, 16, 10, 16, 1, 1, 1, 1, 1, 1, 3, 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, 21, 22, 8, 8, 23, 8, 24, - 25, 26, 27, 28, 29, 16, 30, 25, 31, 32, 33, 34, 34, 26, 35, 25, 22, 26, - 34, 28, 36, 37, 37, 37, 22, 38, 38, 38, 38, 38, 38, 39, 38, 38, 38, 38, - 38, 38, 38, 38, 38, 39, 38, 38, 38, 38, 38, 38, 40, 39, 38, 38, 38, 38, - 38, 39, 41, 42, 42, 43, 43, 43, 43, 41, 43, 42, 42, 42, 43, 42, 42, 43, - 43, 41, 43, 42, 42, 43, 43, 43, 40, 41, 42, 42, 43, 42, 43, 41, 43, 38, - 42, 38, 43, 38, 43, 38, 43, 38, 43, 38, 43, 38, 43, 38, 43, 44, 41, 38, - 42, 38, 43, 38, 43, 38, 43, 38, 42, 38, 43, 38, 43, 38, 43, 38, 43, 38, - 43, 39, 41, 38, 43, 38, 42, 38, 43, 38, 43, 38, 41, 45, 28, 38, 43, 38, - 43, 41, 38, 43, 38, 43, 38, 43, 45, 28, 39, 41, 38, 42, 38, 43, 38, 42, - 28, 39, 41, 38, 42, 38, 43, 38, 43, 39, 41, 38, 43, 38, 43, 38, 43, 38, - 43, 38, 43, 38, 43, 38, 43, 38, 43, 38, 43, 39, 41, 38, 43, 38, 42, 38, - 43, 38, 43, 38, 43, 38, 43, 38, 43, 38, 43, 38, 38, 43, 38, 43, 38, 43, - 35, 46, 44, 44, 46, 44, 46, 44, 44, 46, 44, 44, 44, 46, 46, 44, 44, 44, - 44, 46, 44, 44, 46, 44, 44, 44, 46, 46, 46, 44, 44, 46, 44, 38, 43, 44, - 46, 44, 46, 44, 44, 46, 44, 46, 46, 44, 46, 44, 38, 43, 44, 44, 44, 46, - 44, 46, 44, 44, 46, 46, 47, 44, 46, 46, 46, 47, 47, 47, 47, 48, 49, 35, - 48, 49, 35, 48, 49, 35, 38, 42, 38, 42, 38, 42, 38, 42, 38, 42, 38, 42, - 38, 42, 38, 42, 46, 38, 43, 38, 43, 38, 43, 44, 46, 38, 43, 38, 43, 38, - 43, 38, 43, 38, 43, 43, 48, 49, 35, 38, 43, 44, 44, 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, 46, 38, 43, 44, - 46, 44, 46, 44, 46, 38, 43, 38, 43, 38, 43, 38, 43, 38, 43, 38, 43, 38, - 43, 46, 46, 46, 46, 46, 46, 44, 44, 46, 44, 44, 46, 46, 44, 46, 44, 44, - 44, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 46, 41, 46, 46, 46, 46, 46, - 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 41, 46, 46, 46, 46, 46, 46, 46, - 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, - 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, - 46, 46, 46, 46, 46, 46, 46, 47, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, - 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 50, - 50, 50, 50, 50, 50, 50, 50, 50, 51, 51, 52, 52, 52, 52, 52, 52, 52, 53, - 53, 54, 53, 51, 55, 51, 55, 55, 55, 51, 55, 51, 51, 56, 52, 53, 53, 53, - 53, 53, 53, 26, 26, 26, 26, 57, 26, 53, 54, 50, 50, 50, 50, 50, 53, 53, - 53, 53, 53, 53, 53, 51, 53, 52, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, - 53, 53, 53, 53, 53, 53, 53, 58, 58, 58, 58, 58, 59, 58, 58, 58, 58, 58, - 58, 58, 59, 59, 58, 59, 58, 59, 58, 58, 60, 61, 61, 61, 61, 60, 62, 61, - 61, 61, 61, 61, 63, 63, 64, 64, 64, 64, 65, 65, 61, 61, 61, 61, 64, 64, - 61, 64, 64, 61, 61, 66, 66, 66, 66, 67, 61, 61, 61, 61, 59, 59, 59, 68, - 68, 58, 68, 68, 69, 59, 61, 61, 61, 59, 59, 59, 61, 61, 70, 59, 59, 59, - 61, 61, 61, 61, 59, 60, 61, 61, 59, 71, 72, 72, 71, 72, 72, 71, 59, 59, - 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 44, 46, 44, 46, 73, 53, 44, - 46, 0, 0, 50, 46, 46, 46, 74, 0, 0, 0, 0, 0, 57, 75, 38, 74, 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, - 46, 41, 41, 41, 41, 41, 41, 41, 43, 43, 43, 43, 43, 44, 35, 35, 48, 76, - 76, 35, 35, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, - 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 35, 35, 35, 46, 48, 35, 77, 44, - 46, 48, 44, 46, 46, 44, 44, 44, 38, 78, 44, 38, 44, 44, 44, 38, 44, 44, - 44, 44, 38, 38, 38, 44, 39, 39, 39, 39, 39, 39, 39, 39, 39, 78, 39, 39, - 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, - 39, 39, 41, 41, 41, 41, 41, 41, 41, 41, 41, 42, 41, 41, 41, 41, 41, 41, - 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 43, 42, - 46, 43, 46, 46, 46, 43, 46, 46, 46, 46, 43, 43, 43, 46, 44, 46, 44, 46, - 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, - 38, 43, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 79, 80, 80, 80, 80, 80, - 81, 81, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, - 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, - 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, - 44, 46, 44, 38, 43, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 46, - 38, 43, 38, 43, 44, 46, 38, 43, 44, 46, 38, 43, 38, 43, 38, 43, 44, 46, - 38, 43, 38, 43, 38, 43, 44, 46, 38, 43, 38, 43, 38, 43, 38, 43, 38, 43, - 38, 43, 44, 46, 38, 43, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, - 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, - 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 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, 0, 0, 52, 82, 82, 82, 82, 82, 82, 0, 46, 46, 46, - 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, - 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 35, - 0, 82, 83, 0, 0, 0, 0, 0, 0, 84, 80, 80, 80, 80, 84, 80, 80, 80, 85, 84, - 80, 80, 80, 80, 80, 80, 84, 84, 84, 84, 84, 84, 80, 80, 84, 80, 80, 85, - 86, 80, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 96, 97, 98, 99, 100, 101, - 102, 103, 104, 102, 80, 84, 102, 95, 0, 0, 0, 0, 0, 0, 0, 0, 105, 105, - 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, - 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 0, 0, 0, 0, 0, - 105, 105, 105, 102, 102, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 106, 106, 106, - 106, 0, 0, 77, 77, 107, 108, 108, 109, 110, 111, 27, 27, 80, 80, 80, 80, - 80, 80, 80, 80, 112, 113, 114, 111, 0, 0, 111, 111, 0, 115, 116, 116, - 116, 116, 116, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, - 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, - 117, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 118, 119, 120, - 112, 113, 114, 121, 122, 123, 123, 124, 84, 80, 80, 80, 80, 80, 84, 80, - 80, 0, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 108, 126, 126, - 111, 115, 115, 127, 115, 115, 115, 115, 128, 128, 128, 128, 115, 115, - 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, - 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, - 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, - 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, - 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 116, - 115, 116, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, - 115, 115, 115, 115, 116, 111, 115, 80, 80, 80, 80, 80, 80, 80, 106, 81, - 80, 80, 80, 80, 84, 80, 117, 117, 80, 80, 27, 84, 80, 80, 84, 115, 115, - 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 115, 115, 115, 130, - 130, 115, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, - 111, 111, 0, 131, 115, 132, 115, 115, 115, 115, 115, 115, 115, 115, 115, - 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, - 115, 115, 115, 115, 115, 115, 115, 80, 84, 80, 80, 84, 80, 80, 84, 84, - 84, 80, 84, 84, 80, 84, 80, 80, 80, 84, 80, 84, 80, 84, 80, 84, 80, 80, - 0, 0, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, - 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, - 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, - 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, - 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, - 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, - 115, 115, 115, 115, 115, 115, 133, 133, 133, 133, 133, 133, 133, 133, - 133, 133, 133, 115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 134, 134, - 134, 134, 134, 134, 134, 134, 134, 134, 105, 105, 105, 105, 105, 105, - 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, - 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 80, 80, - 80, 80, 80, 80, 80, 84, 80, 135, 135, 27, 136, 136, 136, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 133, 133, 137, 47, 47, 47, 47, 47, 47, 47, - 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, - 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 138, 47, 47, 47, 47, 47, - 47, 47, 138, 47, 47, 138, 47, 47, 47, 47, 47, 0, 0, 139, 47, 137, 137, - 137, 133, 133, 133, 133, 133, 133, 133, 133, 137, 137, 137, 137, 140, 0, - 0, 47, 80, 84, 80, 80, 0, 0, 0, 141, 141, 141, 141, 141, 141, 141, 141, - 47, 47, 133, 133, 82, 82, 142, 142, 142, 142, 142, 142, 142, 142, 142, - 142, 82, 52, 47, 0, 0, 0, 0, 0, 0, 0, 0, 47, 47, 47, 47, 47, 0, 133, 137, - 137, 0, 47, 47, 47, 47, 47, 47, 47, 47, 0, 0, 47, 47, 0, 0, 47, 47, 47, - 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, - 47, 0, 47, 47, 47, 47, 47, 47, 47, 0, 47, 0, 0, 0, 47, 47, 47, 47, 0, 0, - 143, 47, 144, 137, 137, 133, 133, 133, 133, 0, 0, 137, 137, 0, 0, 145, - 145, 140, 47, 0, 0, 0, 0, 0, 0, 0, 0, 144, 0, 0, 0, 0, 141, 141, 0, 141, - 47, 47, 133, 133, 0, 0, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, - 47, 47, 146, 146, 147, 147, 147, 147, 147, 147, 79, 0, 0, 0, 0, 0, 0, - 133, 133, 137, 0, 47, 47, 47, 47, 47, 47, 0, 0, 0, 0, 47, 47, 0, 0, 47, - 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, - 47, 47, 47, 0, 47, 47, 47, 47, 47, 47, 47, 0, 47, 141, 0, 47, 141, 0, 47, - 47, 0, 0, 143, 0, 137, 137, 137, 133, 133, 0, 0, 0, 0, 133, 133, 0, 0, - 133, 133, 140, 0, 0, 0, 133, 0, 0, 0, 0, 0, 0, 0, 141, 141, 141, 47, 0, - 141, 0, 0, 0, 0, 0, 0, 0, 142, 142, 142, 142, 142, 142, 142, 142, 142, - 142, 133, 133, 47, 47, 47, 133, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 133, - 133, 137, 0, 47, 47, 47, 47, 47, 47, 47, 47, 47, 0, 47, 47, 47, 0, 47, - 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, - 47, 47, 47, 0, 47, 47, 47, 47, 47, 47, 47, 0, 47, 47, 0, 47, 47, 47, 47, - 47, 0, 0, 143, 47, 137, 137, 137, 133, 133, 133, 133, 133, 0, 133, 133, - 137, 0, 137, 137, 140, 0, 0, 47, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 47, 47, 133, 133, 0, 0, 142, 142, 142, 142, 142, 142, 142, 142, - 142, 142, 0, 146, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 133, 137, - 137, 0, 47, 47, 47, 47, 47, 47, 47, 47, 0, 0, 47, 47, 0, 0, 47, 47, 47, - 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, - 47, 0, 47, 47, 47, 47, 47, 47, 47, 0, 47, 47, 0, 47, 47, 47, 47, 47, 0, - 0, 143, 47, 144, 133, 137, 133, 133, 133, 133, 0, 0, 137, 145, 0, 0, 145, - 145, 140, 0, 0, 0, 0, 0, 0, 0, 0, 148, 144, 0, 0, 0, 0, 141, 141, 0, 47, - 47, 47, 133, 133, 0, 0, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, - 79, 47, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 133, 47, 0, 47, - 47, 47, 47, 47, 47, 0, 0, 0, 47, 47, 47, 0, 47, 47, 138, 47, 0, 0, 0, 47, - 47, 0, 47, 0, 47, 47, 0, 0, 0, 47, 47, 0, 0, 0, 47, 47, 47, 0, 0, 0, 47, - 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 0, 0, 0, 0, 144, 137, 133, - 137, 137, 0, 0, 0, 137, 137, 137, 0, 145, 145, 145, 140, 0, 0, 47, 0, 0, - 0, 0, 0, 0, 144, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 142, 142, 142, - 142, 142, 142, 142, 142, 142, 142, 147, 147, 147, 27, 27, 27, 27, 27, 27, - 146, 27, 0, 0, 0, 0, 0, 0, 137, 137, 137, 0, 47, 47, 47, 47, 47, 47, 47, - 47, 0, 47, 47, 47, 0, 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, 47, 47, 47, 47, 47, 47, - 47, 47, 47, 0, 47, 47, 47, 47, 47, 0, 0, 0, 47, 133, 133, 133, 137, 137, - 137, 137, 0, 133, 133, 149, 0, 133, 133, 133, 140, 0, 0, 0, 0, 0, 0, 0, - 150, 151, 0, 47, 47, 0, 0, 0, 0, 0, 0, 47, 47, 133, 133, 0, 0, 142, 142, - 142, 142, 142, 142, 142, 142, 142, 142, 0, 0, 0, 0, 0, 0, 0, 0, 152, 152, - 152, 152, 152, 152, 152, 79, 0, 0, 137, 137, 0, 47, 47, 47, 47, 47, 47, - 47, 47, 0, 47, 47, 47, 0, 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, 47, 47, 47, 47, 47, - 47, 47, 47, 47, 0, 47, 47, 47, 47, 47, 0, 0, 143, 47, 137, 153, 145, 137, - 144, 137, 137, 0, 153, 145, 145, 0, 145, 145, 133, 140, 0, 0, 0, 0, 0, 0, - 0, 144, 144, 0, 0, 0, 0, 0, 0, 0, 47, 0, 47, 47, 133, 133, 0, 0, 142, - 142, 142, 142, 142, 142, 142, 142, 142, 142, 0, 27, 27, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 137, 137, 0, 47, 47, 47, 47, 47, 47, 47, 47, - 0, 47, 47, 47, 0, 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, 47, 47, 47, 47, 47, 47, 47, - 47, 47, 47, 47, 47, 47, 47, 47, 0, 0, 0, 47, 144, 137, 137, 133, 133, - 133, 133, 0, 137, 137, 137, 0, 145, 145, 145, 140, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 144, 0, 0, 0, 0, 0, 0, 0, 0, 47, 47, 133, 133, 0, 0, 142, 142, 142, - 142, 142, 142, 142, 142, 142, 142, 147, 147, 147, 147, 147, 147, 0, 0, 0, - 79, 47, 47, 47, 47, 47, 47, 0, 0, 137, 137, 0, 47, 47, 47, 47, 47, 47, - 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 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, 0, 47, 47, 47, 47, 47, 47, 47, 47, 47, 0, 47, 0, 0, 47, 47, 47, - 47, 47, 47, 47, 0, 0, 0, 154, 0, 0, 0, 0, 144, 137, 137, 133, 133, 133, - 0, 133, 0, 137, 137, 145, 137, 145, 145, 145, 144, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 137, 137, 82, 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, 47, 47, 47, 47, 47, 47, 47, 47, 133, 47, 155, - 133, 133, 133, 133, 156, 156, 140, 0, 0, 0, 0, 146, 47, 47, 47, 47, 47, - 47, 52, 133, 157, 157, 157, 157, 133, 133, 133, 82, 142, 142, 142, 142, - 142, 142, 142, 142, 142, 142, 82, 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, 47, 47, 0, 47, 0, 0, 47, 47, 0, 47, 0, 0, 47, 0, 0, 0, 0, 0, 0, 47, - 47, 47, 47, 0, 47, 47, 47, 47, 47, 47, 47, 0, 47, 47, 47, 0, 47, 0, 47, - 0, 0, 47, 47, 0, 47, 47, 47, 47, 133, 47, 155, 133, 133, 133, 133, 158, - 158, 0, 133, 133, 47, 0, 0, 47, 47, 47, 47, 47, 0, 52, 0, 159, 159, 159, - 159, 133, 133, 0, 0, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 0, - 0, 155, 155, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 79, 79, 79, 82, 82, 82, 82, - 82, 82, 82, 82, 160, 82, 82, 82, 82, 82, 82, 79, 79, 79, 79, 79, 84, 84, - 79, 79, 79, 79, 79, 79, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, - 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 79, 84, 79, 84, 79, - 161, 162, 163, 162, 163, 137, 137, 47, 47, 47, 141, 47, 47, 47, 47, 0, - 47, 47, 47, 47, 141, 47, 47, 47, 47, 141, 47, 47, 47, 47, 141, 47, 47, - 47, 47, 141, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 141, 47, 47, - 47, 0, 0, 0, 0, 164, 165, 166, 167, 166, 166, 168, 166, 168, 165, 165, - 165, 165, 133, 137, 165, 166, 80, 80, 140, 82, 80, 80, 47, 47, 47, 47, 0, - 0, 0, 0, 133, 133, 133, 166, 133, 133, 133, 133, 0, 133, 133, 133, 133, - 166, 133, 133, 133, 133, 166, 133, 133, 133, 133, 166, 133, 133, 133, - 133, 166, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, - 166, 133, 133, 133, 0, 79, 79, 79, 79, 79, 79, 79, 79, 84, 79, 79, 79, - 79, 79, 79, 0, 79, 79, 82, 82, 82, 82, 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, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, - 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, - 47, 47, 47, 47, 47, 47, 47, 47, 47, 138, 47, 47, 47, 47, 137, 137, 133, - 148, 133, 133, 137, 133, 133, 133, 133, 133, 143, 137, 140, 140, 137, - 137, 133, 133, 47, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 82, - 82, 82, 82, 82, 82, 47, 47, 47, 47, 47, 47, 137, 137, 133, 133, 47, 47, - 47, 47, 133, 133, 133, 47, 137, 137, 137, 47, 47, 137, 137, 137, 137, - 137, 137, 137, 47, 47, 47, 133, 133, 133, 133, 47, 47, 47, 47, 47, 47, - 47, 47, 47, 47, 47, 47, 47, 133, 137, 137, 133, 133, 137, 137, 137, 137, - 137, 137, 84, 47, 137, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, - 0, 0, 0, 0, 79, 79, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, - 44, 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, 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, 82, 50, 0, 0, 0, 169, 169, 169, 169, 169, 169, 169, 169, 169, - 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, - 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, - 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, - 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, - 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, - 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 0, 0, 0, 0, 0, - 169, 47, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, - 170, 170, 170, 170, 170, 170, 170, 170, 47, 47, 47, 47, 47, 47, 47, 47, - 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 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, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, - 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, - 170, 170, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, - 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 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, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, - 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, - 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, - 47, 47, 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, 47, 47, 47, 0, 0, 47, 47, 47, 47, - 47, 47, 47, 0, 47, 0, 47, 47, 47, 47, 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, 0, 47, - 47, 47, 47, 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, 0, 47, 47, 47, 47, 0, 0, 47, 47, 47, 47, 47, 47, 47, 0, 47, 0, 47, - 47, 47, 47, 0, 0, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, - 47, 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, 0, 47, 47, 47, 47, 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, 0, 0, 0, 0, 80, 79, 82, 82, 82, 82, 82, 82, 82, - 82, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, - 147, 147, 147, 147, 147, 147, 0, 0, 0, 47, 47, 47, 47, 47, 47, 47, 47, - 47, 47, 47, 47, 47, 47, 47, 47, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, - 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, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 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, 47, 47, 47, 47, 47, 47, 47, - 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, - 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, - 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, - 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, - 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, - 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, - 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, - 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, - 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, - 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, - 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, - 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, - 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, - 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, - 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, - 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, - 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, - 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 82, 82, 47, 47, 47, 47, 47, - 47, 47, 47, 0, 0, 0, 0, 0, 0, 0, 0, 0, 171, 47, 47, 47, 47, 47, 47, 47, - 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, - 47, 162, 163, 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, 47, 82, 82, 82, 172, 172, 172, 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, 0, 47, 47, 47, 47, 133, 133, 140, 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, 133, 133, 140, 82, 82, 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, 133, 133, 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, 0, 47, 47, 47, 0, 133, 133, 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, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 173, 173, - 137, 133, 133, 133, 133, 133, 133, 133, 137, 137, 137, 137, 137, 137, - 137, 137, 133, 137, 137, 133, 133, 133, 133, 133, 133, 133, 133, 133, - 140, 133, 82, 82, 82, 52, 82, 82, 82, 146, 47, 80, 0, 0, 142, 142, 142, - 142, 142, 142, 142, 142, 142, 142, 0, 0, 0, 0, 0, 0, 152, 152, 152, 152, - 152, 152, 152, 152, 152, 152, 0, 0, 0, 0, 0, 0, 136, 136, 136, 136, 136, - 136, 83, 136, 136, 136, 136, 133, 133, 133, 171, 0, 142, 142, 142, 142, - 142, 142, 142, 142, 142, 142, 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, 52, 47, 47, 47, 47, 47, 47, - 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, - 47, 47, 47, 47, 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, 47, 47, - 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, - 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, - 47, 47, 47, 86, 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, 47, 47, 47, 47, - 47, 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, 133, 133, 133, 137, 137, 137, 137, - 133, 133, 137, 137, 137, 0, 0, 0, 0, 137, 137, 133, 137, 137, 137, 137, - 137, 137, 85, 80, 84, 0, 0, 0, 0, 27, 0, 0, 0, 136, 136, 142, 142, 142, - 142, 142, 142, 142, 142, 142, 142, 47, 47, 47, 47, 47, 47, 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, 47, 47, 47, 47, 47, 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, 47, 47, 0, 0, 0, 0, 0, 0, 137, 137, 137, 137, 137, 137, - 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 47, 47, 47, 47, - 47, 47, 47, 137, 137, 0, 0, 0, 0, 0, 0, 142, 142, 142, 142, 142, 142, - 142, 142, 142, 142, 0, 0, 0, 0, 136, 136, 27, 27, 27, 27, 27, 27, 27, 27, - 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, - 27, 27, 27, 27, 27, 27, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, - 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 80, 84, 137, 137, 137, 0, 0, - 82, 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, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 133, 133, 133, 133, 137, 47, 138, 47, 138, 47, 138, 47, 138, 47, - 138, 47, 47, 47, 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, 143, 144, 133, 133, 133, 133, 133, 145, 133, 145, 137, 137, 145, - 145, 133, 145, 174, 47, 47, 47, 47, 47, 47, 47, 0, 0, 0, 0, 142, 142, - 142, 142, 142, 142, 142, 142, 142, 142, 82, 82, 82, 82, 82, 82, 82, 79, - 79, 79, 79, 79, 79, 79, 79, 79, 79, 80, 84, 80, 80, 80, 80, 80, 80, 80, - 79, 79, 79, 79, 79, 79, 79, 79, 79, 0, 0, 0, 133, 133, 137, 47, 47, 47, - 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, - 47, 47, 47, 47, 47, 47, 47, 47, 47, 137, 133, 133, 133, 133, 137, 137, - 133, 133, 174, 0, 0, 0, 47, 47, 142, 142, 142, 142, 142, 142, 142, 142, - 142, 142, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 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, 137, 137, 137, 137, 137, 137, 137, 137, 133, 133, 133, 133, 133, 133, - 133, 133, 137, 137, 133, 143, 0, 0, 0, 82, 82, 82, 82, 82, 142, 142, 142, - 142, 142, 142, 142, 142, 142, 142, 0, 0, 0, 47, 47, 47, 142, 142, 142, - 142, 142, 142, 142, 142, 142, 142, 47, 47, 47, 47, 47, 47, 47, 47, 47, - 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, - 47, 47, 47, 52, 52, 52, 52, 52, 52, 82, 82, 46, 46, 46, 46, 46, 46, 46, - 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, - 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, - 46, 50, 50, 50, 52, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 52, 50, - 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 52, - 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, - 50, 35, 35, 35, 35, 35, 35, 35, 35, 35, 46, 46, 46, 46, 46, 46, 46, 46, - 46, 46, 46, 46, 46, 50, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, - 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, - 46, 46, 46, 46, 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, 80, 80, 84, 80, 80, 80, 80, 80, 80, 80, 84, 80, 80, - 175, 176, 84, 177, 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, 80, 84, 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, 178, 46, 46, 44, 46, 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, 46, 44, 46, 44, 46, 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, 179, 43, 179, - 43, 179, 43, 179, 43, 179, 43, 179, 43, 179, 0, 0, 43, 43, 43, 43, 43, - 43, 43, 43, 180, 180, 180, 180, 180, 180, 180, 180, 43, 43, 43, 43, 43, - 43, 43, 43, 180, 180, 180, 180, 180, 180, 180, 180, 43, 43, 43, 43, 43, - 43, 43, 43, 180, 180, 180, 180, 180, 180, 180, 180, 43, 43, 43, 43, 43, - 0, 43, 43, 38, 38, 38, 181, 180, 57, 179, 57, 57, 75, 43, 43, 43, 0, 43, - 43, 38, 181, 38, 181, 180, 75, 75, 75, 43, 43, 43, 179, 0, 0, 43, 43, 38, - 38, 38, 181, 0, 75, 75, 75, 43, 43, 43, 179, 43, 43, 43, 43, 38, 38, 38, - 181, 38, 75, 182, 182, 0, 0, 43, 43, 43, 0, 43, 43, 38, 181, 38, 181, - 180, 182, 57, 0, 183, 183, 184, 184, 184, 184, 184, 184, 184, 184, 184, - 131, 131, 131, 173, 185, 186, 187, 83, 186, 186, 186, 22, 188, 189, 190, - 191, 192, 189, 190, 191, 192, 22, 22, 22, 136, 193, 193, 193, 22, 194, - 195, 196, 197, 198, 199, 200, 21, 201, 108, 201, 202, 203, 22, 188, 188, - 136, 29, 36, 22, 188, 136, 193, 204, 204, 136, 136, 136, 205, 162, 163, - 188, 188, 188, 136, 136, 136, 136, 136, 136, 136, 136, 77, 136, 204, 136, - 136, 188, 136, 136, 136, 136, 136, 136, 136, 184, 131, 131, 131, 131, - 131, 0, 0, 0, 0, 0, 131, 131, 131, 131, 131, 131, 206, 35, 0, 0, 34, 206, - 206, 206, 206, 206, 207, 207, 208, 209, 210, 28, 206, 34, 34, 34, 34, - 206, 206, 206, 206, 206, 207, 207, 208, 209, 210, 0, 50, 50, 50, 50, 50, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 146, 146, 146, 146, 146, 146, 146, 146, - 211, 212, 146, 146, 23, 146, 146, 146, 146, 146, 146, 146, 146, 146, 0, - 0, 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, 213, 213, 80, 80, 80, 80, 213, 213, 213, 80, 80, 81, 81, 81, - 81, 80, 81, 81, 81, 213, 213, 80, 84, 80, 213, 213, 84, 84, 84, 84, 80, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 214, 214, 48, 215, 27, 215, - 214, 48, 27, 215, 35, 48, 48, 48, 35, 35, 48, 48, 48, 28, 27, 48, 215, - 27, 27, 48, 48, 48, 48, 48, 27, 27, 214, 215, 215, 27, 48, 27, 216, 27, - 48, 27, 181, 216, 48, 48, 217, 35, 48, 48, 44, 48, 35, 155, 155, 155, - 155, 35, 27, 214, 35, 35, 48, 48, 218, 77, 77, 77, 77, 48, 35, 35, 35, - 35, 27, 77, 27, 27, 46, 79, 0, 0, 0, 37, 37, 219, 219, 219, 219, 219, - 219, 37, 37, 37, 37, 219, 220, 220, 220, 220, 220, 220, 220, 220, 220, - 220, 220, 220, 221, 221, 221, 221, 220, 220, 220, 220, 220, 220, 220, - 220, 220, 220, 221, 221, 221, 221, 221, 221, 172, 172, 172, 44, 46, 172, - 172, 172, 172, 0, 0, 0, 0, 0, 0, 0, 40, 40, 40, 40, 40, 25, 25, 25, 25, - 25, 222, 222, 27, 27, 27, 27, 77, 27, 27, 77, 27, 27, 77, 27, 27, 27, 27, - 27, 27, 27, 222, 27, 27, 27, 27, 27, 27, 27, 27, 27, 25, 25, 27, 27, 27, - 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 223, 222, - 222, 27, 27, 40, 27, 40, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, - 27, 27, 27, 27, 27, 27, 25, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, - 27, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 40, 224, 225, 225, - 226, 77, 77, 40, 225, 226, 224, 225, 226, 224, 77, 40, 77, 225, 227, 228, - 77, 225, 224, 77, 77, 77, 225, 224, 224, 225, 40, 225, 225, 224, 224, 40, - 226, 40, 226, 40, 40, 40, 40, 225, 229, 218, 225, 218, 218, 224, 224, - 224, 40, 40, 40, 40, 77, 224, 77, 224, 225, 225, 224, 224, 224, 226, 224, - 224, 226, 224, 224, 226, 225, 226, 224, 224, 225, 77, 77, 77, 77, 77, - 225, 224, 224, 224, 77, 77, 77, 77, 77, 77, 77, 77, 77, 224, 230, 40, - 226, 77, 225, 225, 225, 225, 224, 224, 225, 225, 77, 222, 230, 230, 226, - 226, 224, 224, 226, 226, 224, 224, 226, 226, 224, 224, 224, 224, 224, - 224, 226, 226, 225, 225, 226, 226, 225, 225, 226, 226, 224, 224, 224, 77, - 77, 224, 224, 224, 224, 77, 77, 40, 77, 77, 224, 40, 77, 77, 77, 77, 77, - 77, 77, 77, 224, 224, 77, 40, 224, 224, 224, 224, 224, 224, 226, 226, - 226, 226, 224, 224, 224, 224, 224, 224, 224, 224, 224, 77, 77, 77, 77, - 77, 224, 225, 77, 77, 77, 77, 77, 77, 77, 77, 77, 224, 224, 224, 224, - 224, 77, 77, 224, 224, 77, 77, 77, 77, 224, 224, 224, 224, 224, 224, 224, - 224, 224, 224, 226, 226, 226, 226, 224, 224, 224, 224, 224, 224, 226, - 226, 226, 226, 77, 77, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, - 224, 224, 224, 224, 224, 224, 27, 27, 27, 27, 27, 27, 27, 27, 224, 224, - 224, 224, 27, 27, 27, 27, 27, 27, 25, 27, 27, 27, 27, 27, 27, 27, 27, 27, - 27, 27, 27, 27, 224, 224, 27, 27, 27, 27, 27, 27, 27, 231, 232, 27, 27, - 27, 27, 27, 27, 27, 27, 27, 27, 27, 79, 79, 79, 79, 79, 79, 79, 79, 79, - 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, - 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, - 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, - 79, 79, 79, 79, 79, 79, 27, 77, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, - 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 79, 27, 27, 27, - 27, 27, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, - 77, 77, 77, 77, 77, 77, 77, 77, 77, 27, 27, 27, 27, 27, 27, 27, 27, 27, - 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, - 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 77, 77, 77, 77, 77, - 77, 27, 27, 27, 27, 27, 27, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, - 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, - 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 27, 27, 27, 27, 27, 27, 27, 27, - 27, 27, 27, 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, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, - 34, 34, 34, 34, 34, 34, 34, 233, 233, 233, 233, 233, 233, 233, 233, 233, - 233, 233, 233, 233, 233, 233, 233, 233, 233, 233, 233, 233, 233, 233, - 233, 233, 233, 233, 233, 233, 233, 233, 233, 233, 233, 233, 233, 233, - 233, 233, 233, 233, 233, 233, 233, 233, 233, 233, 233, 233, 233, 233, - 233, 233, 233, 233, 233, 233, 233, 233, 233, 233, 233, 233, 233, 233, - 233, 233, 233, 233, 233, 233, 233, 233, 233, 233, 233, 233, 233, 219, - 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, - 234, 234, 234, 234, 234, 234, 234, 25, 25, 25, 25, 25, 25, 25, 25, 25, - 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, - 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, - 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, - 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 27, 27, 27, 27, 25, - 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, - 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 27, - 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 25, 25, 25, 25, 25, 25, 25, - 25, 25, 25, 25, 25, 25, 25, 25, 25, 27, 27, 25, 25, 25, 25, 27, 27, 27, - 27, 27, 27, 27, 27, 27, 27, 25, 25, 27, 25, 25, 25, 25, 25, 25, 25, 27, - 27, 27, 27, 27, 27, 27, 27, 25, 25, 27, 27, 25, 40, 27, 27, 27, 27, 25, - 25, 27, 27, 25, 40, 27, 27, 27, 27, 25, 25, 25, 27, 27, 25, 27, 27, 25, - 25, 25, 25, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, - 27, 25, 25, 25, 25, 27, 27, 27, 27, 27, 27, 27, 27, 27, 25, 27, 27, 27, - 27, 27, 27, 27, 27, 77, 77, 77, 77, 77, 77, 77, 77, 27, 27, 27, 27, 27, - 25, 25, 27, 27, 25, 27, 27, 27, 27, 25, 25, 27, 27, 27, 27, 25, 25, 27, - 27, 27, 27, 27, 27, 25, 27, 25, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, - 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, - 27, 27, 27, 27, 27, 25, 27, 25, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, - 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, - 27, 25, 25, 27, 25, 25, 25, 27, 25, 25, 25, 25, 27, 25, 25, 27, 40, 27, - 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, - 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, - 27, 27, 27, 27, 27, 27, 27, 27, 27, 0, 0, 27, 27, 27, 27, 27, 27, 27, 27, - 27, 27, 27, 27, 79, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, - 27, 27, 27, 0, 0, 0, 27, 27, 27, 27, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 27, 27, 27, 27, 0, 27, 27, 27, 27, 0, 0, 27, 27, 27, 27, 27, 27, 27, - 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, - 27, 27, 27, 0, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, - 27, 27, 27, 27, 27, 27, 25, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, - 27, 27, 27, 0, 27, 0, 27, 27, 27, 27, 0, 0, 0, 27, 0, 27, 27, 27, 27, 27, - 27, 27, 0, 0, 27, 27, 27, 27, 27, 27, 27, 162, 163, 162, 163, 162, 163, - 162, 163, 162, 163, 162, 163, 162, 163, 234, 234, 234, 234, 234, 234, - 234, 234, 234, 234, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, - 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 27, 0, 0, 0, 27, 27, - 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, - 27, 27, 27, 27, 0, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, - 27, 0, 224, 77, 77, 224, 224, 162, 163, 77, 224, 224, 77, 0, 224, 0, 0, - 0, 77, 77, 77, 224, 224, 224, 224, 77, 77, 77, 77, 77, 224, 224, 224, 77, - 77, 77, 224, 224, 224, 224, 9, 10, 9, 10, 9, 10, 9, 10, 162, 163, 77, 77, - 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 79, 79, 79, 79, - 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, - 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, - 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, - 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, - 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, - 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, - 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 77, 77, - 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, - 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, - 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, - 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, - 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, - 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, - 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, - 77, 77, 77, 162, 163, 9, 10, 162, 163, 162, 163, 162, 163, 162, 163, 162, - 163, 162, 163, 162, 163, 162, 163, 162, 163, 77, 77, 224, 224, 224, 224, - 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, - 224, 224, 224, 77, 77, 77, 77, 77, 77, 77, 77, 224, 77, 77, 77, 77, 77, - 77, 77, 224, 224, 224, 224, 224, 224, 77, 77, 77, 224, 77, 77, 77, 77, - 224, 224, 224, 224, 224, 77, 224, 224, 77, 77, 162, 163, 162, 163, 224, - 77, 77, 77, 77, 224, 77, 224, 224, 224, 77, 77, 224, 224, 77, 77, 77, 77, - 77, 77, 77, 77, 77, 77, 224, 224, 224, 224, 224, 224, 77, 77, 162, 163, - 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 224, 224, 218, 224, 224, - 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 77, - 224, 224, 224, 224, 77, 77, 224, 77, 224, 77, 77, 224, 77, 224, 224, 224, - 224, 77, 77, 77, 77, 77, 224, 224, 77, 77, 77, 77, 77, 77, 224, 224, 224, - 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, - 77, 77, 77, 77, 77, 77, 224, 224, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, - 77, 224, 224, 77, 77, 77, 77, 224, 224, 224, 224, 77, 224, 224, 77, 77, - 224, 218, 208, 208, 77, 77, 224, 224, 224, 224, 224, 224, 224, 224, 224, - 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, - 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, - 224, 224, 224, 224, 224, 224, 77, 77, 224, 224, 224, 224, 224, 224, 224, - 224, 77, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, - 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, - 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 77, 77, - 77, 77, 77, 235, 77, 224, 77, 77, 77, 224, 224, 224, 224, 224, 77, 77, - 77, 77, 77, 224, 224, 224, 77, 77, 77, 77, 224, 77, 77, 77, 224, 224, - 224, 224, 224, 77, 224, 77, 77, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, - 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, - 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, - 27, 27, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, - 77, 77, 77, 77, 77, 27, 27, 77, 77, 77, 77, 77, 77, 0, 0, 0, 27, 27, 27, - 27, 27, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, + 17, 17, 17, 17, 17, 17, 41, 41, 41, 41, 41, 41, 148, 17, 149, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 41, 41, 41, 41, 41, 41, 41, 41, 150, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 78, 151, + 152, 153, 154, 17, 155, 17, 156, 157, 158, 159, 160, 161, 162, 163, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 164, 165, 166, 167, 168, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 100, 100, 100, 100, 100, 100, 100, 100, + 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, + 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, + 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, + 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, + 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, + 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, + 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, + 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, + 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, + 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, + 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, + 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, + 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, + 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, + 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, + 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, + 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, + 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, + 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, + 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, + 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, + 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, + 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, + 100, 100, 100, 169, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, + 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, + 100, 100, 100, 100, 100, 100, 100, 100, 170, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 120, 120, 120, + 120, 171, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 172, 17, 173, 174, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, + 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, + 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, + 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, + 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, + 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, + 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, + 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, + 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, + 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, + 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, + 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, + 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, + 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, + 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, + 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, + 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, + 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, + 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, + 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, + 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, + 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, + 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, + 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, + 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, + 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, + 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, + 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, + 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, + 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, + 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, + 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, + 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, + 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, + 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, + 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, + 119, 119, 119, 119, 119, 119, 119, 119, 175, 119, 119, 119, 119, 119, + 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, + 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, + 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, + 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, + 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, + 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, + 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, + 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, + 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, + 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, + 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, + 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, + 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, + 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, + 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, + 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, + 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, + 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, + 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, + 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, + 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, + 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, + 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, + 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, + 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, + 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, + 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, + 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, + 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, + 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, + 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, + 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, + 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, + 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, + 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, + 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, + 119, 119, 175, +}; + +static unsigned short index2[] = { + 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 3, 2, 4, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 3, 3, 3, 2, 5, 6, 6, 7, 8, 7, 6, 6, 9, 10, 6, 11, 12, 13, 12, + 12, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 12, 6, 15, 16, 15, 6, 6, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 9, 6, 10, 18, 19, 18, 20, 20, 20, 20, 20, 20, + 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, + 20, 20, 9, 16, 10, 16, 1, 1, 1, 1, 1, 1, 3, 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, 21, 22, 8, 8, 23, 8, 24, + 25, 26, 27, 28, 29, 16, 30, 25, 31, 32, 33, 34, 34, 26, 35, 25, 22, 26, + 34, 28, 36, 37, 37, 37, 22, 38, 38, 38, 38, 38, 38, 39, 38, 38, 38, 38, + 38, 38, 38, 38, 38, 39, 38, 38, 38, 38, 38, 38, 40, 39, 38, 38, 38, 38, + 38, 39, 41, 42, 42, 43, 43, 43, 43, 41, 43, 42, 42, 42, 43, 42, 42, 43, + 43, 41, 43, 42, 42, 43, 43, 43, 40, 41, 42, 42, 43, 42, 43, 41, 43, 38, + 42, 38, 43, 38, 43, 38, 43, 38, 43, 38, 43, 38, 43, 38, 43, 44, 41, 38, + 42, 38, 43, 38, 43, 38, 43, 38, 42, 38, 43, 38, 43, 38, 43, 38, 43, 38, + 43, 39, 41, 38, 43, 38, 42, 38, 43, 38, 43, 38, 41, 45, 28, 38, 43, 38, + 43, 41, 38, 43, 38, 43, 38, 43, 45, 28, 39, 41, 38, 42, 38, 43, 38, 42, + 28, 39, 41, 38, 42, 38, 43, 38, 43, 39, 41, 38, 43, 38, 43, 38, 43, 38, + 43, 38, 43, 38, 43, 38, 43, 38, 43, 38, 43, 39, 41, 38, 43, 38, 42, 38, + 43, 38, 43, 38, 43, 38, 43, 38, 43, 38, 43, 38, 38, 43, 38, 43, 38, 43, + 35, 46, 44, 44, 46, 44, 46, 44, 44, 46, 44, 44, 44, 46, 46, 44, 44, 44, + 44, 46, 44, 44, 46, 44, 44, 44, 46, 46, 46, 44, 44, 46, 44, 38, 43, 44, + 46, 44, 46, 44, 44, 46, 44, 46, 46, 44, 46, 44, 38, 43, 44, 44, 44, 46, + 44, 46, 44, 44, 46, 46, 47, 44, 46, 46, 46, 47, 47, 47, 47, 48, 49, 35, + 48, 49, 35, 48, 49, 35, 38, 42, 38, 42, 38, 42, 38, 42, 38, 42, 38, 42, + 38, 42, 38, 42, 46, 38, 43, 38, 43, 38, 43, 44, 46, 38, 43, 38, 43, 38, + 43, 38, 43, 38, 43, 43, 48, 49, 35, 38, 43, 44, 44, 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, 46, 38, 43, 44, + 46, 44, 46, 44, 46, 38, 43, 38, 43, 38, 43, 38, 43, 38, 43, 38, 43, 38, + 43, 46, 46, 46, 46, 46, 46, 44, 44, 46, 44, 44, 46, 46, 44, 46, 44, 44, + 44, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 46, 41, 46, 46, 46, 46, 46, + 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 41, 46, 46, 46, 46, 46, 46, 46, + 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, + 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, + 46, 46, 46, 46, 46, 46, 46, 47, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, + 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 50, + 50, 50, 50, 50, 50, 50, 50, 50, 51, 51, 52, 52, 52, 52, 52, 52, 52, 53, + 53, 54, 53, 51, 55, 51, 55, 55, 55, 51, 55, 51, 51, 56, 52, 53, 53, 53, + 53, 53, 53, 26, 26, 26, 26, 57, 26, 53, 54, 50, 50, 50, 50, 50, 53, 53, + 53, 53, 53, 53, 53, 51, 53, 52, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, + 53, 53, 53, 53, 53, 53, 53, 58, 58, 58, 58, 58, 59, 58, 58, 58, 58, 58, + 58, 58, 59, 59, 58, 59, 58, 59, 58, 58, 60, 61, 61, 61, 61, 60, 62, 61, + 61, 61, 61, 61, 63, 63, 64, 64, 64, 64, 65, 65, 61, 61, 61, 61, 64, 64, + 61, 64, 64, 61, 61, 66, 66, 66, 66, 67, 61, 61, 61, 61, 59, 59, 59, 68, + 68, 58, 68, 68, 69, 59, 61, 61, 61, 59, 59, 59, 61, 61, 70, 59, 59, 59, + 61, 61, 61, 61, 59, 60, 61, 61, 59, 71, 72, 72, 71, 72, 72, 71, 59, 59, + 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 44, 46, 44, 46, 73, 53, 44, + 46, 0, 0, 50, 46, 46, 46, 74, 0, 0, 0, 0, 0, 57, 75, 38, 74, 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, + 46, 41, 41, 41, 41, 41, 41, 41, 43, 43, 43, 43, 43, 44, 35, 35, 48, 76, + 76, 35, 35, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, + 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 35, 35, 35, 46, 48, 35, 77, 44, + 46, 48, 44, 46, 46, 44, 44, 44, 38, 78, 44, 38, 44, 44, 44, 38, 44, 44, + 44, 44, 38, 38, 38, 44, 39, 39, 39, 39, 39, 39, 39, 39, 39, 78, 39, 39, + 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, + 39, 39, 41, 41, 41, 41, 41, 41, 41, 41, 41, 42, 41, 41, 41, 41, 41, 41, + 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 43, 42, + 46, 43, 46, 46, 46, 43, 46, 46, 46, 46, 43, 43, 43, 46, 44, 46, 44, 46, + 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, + 38, 43, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 79, 80, 80, 80, 80, 80, + 81, 81, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, + 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, + 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, + 44, 46, 44, 38, 43, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 46, + 38, 43, 38, 43, 44, 46, 38, 43, 44, 46, 38, 43, 38, 43, 38, 43, 44, 46, + 38, 43, 38, 43, 38, 43, 44, 46, 38, 43, 38, 43, 38, 43, 38, 43, 38, 43, + 38, 43, 44, 46, 38, 43, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, + 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, + 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 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, 0, 0, 52, 82, 82, 82, 82, 82, 82, 0, 46, 46, 46, + 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, + 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 35, + 0, 82, 83, 0, 0, 0, 0, 0, 0, 84, 80, 80, 80, 80, 84, 80, 80, 80, 85, 84, + 80, 80, 80, 80, 80, 80, 84, 84, 84, 84, 84, 84, 80, 80, 84, 80, 80, 85, + 86, 80, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 96, 97, 98, 99, 100, 101, + 102, 103, 104, 102, 80, 84, 102, 95, 0, 0, 0, 0, 0, 0, 0, 0, 105, 105, + 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, + 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 0, 0, 0, 0, 0, + 105, 105, 105, 102, 102, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 106, 106, 106, + 106, 0, 0, 77, 77, 107, 108, 108, 109, 110, 111, 27, 27, 80, 80, 80, 80, + 80, 80, 80, 80, 112, 113, 114, 111, 0, 0, 111, 111, 0, 115, 116, 116, + 116, 116, 116, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, + 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, + 117, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 118, 119, 120, + 112, 113, 114, 121, 122, 123, 123, 124, 84, 80, 80, 80, 80, 80, 84, 80, + 80, 0, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 108, 126, 126, + 111, 115, 115, 127, 115, 115, 115, 115, 128, 128, 128, 128, 115, 115, + 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, + 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, + 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, + 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, + 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 116, + 115, 116, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, + 115, 115, 115, 115, 116, 111, 115, 80, 80, 80, 80, 80, 80, 80, 106, 81, + 80, 80, 80, 80, 84, 80, 117, 117, 80, 80, 27, 84, 80, 80, 84, 115, 115, + 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 115, 115, 115, 130, + 130, 115, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, + 111, 111, 0, 131, 115, 132, 115, 115, 115, 115, 115, 115, 115, 115, 115, + 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, + 115, 115, 115, 115, 115, 115, 115, 80, 84, 80, 80, 84, 80, 80, 84, 84, + 84, 80, 84, 84, 80, 84, 80, 80, 80, 84, 80, 84, 80, 84, 80, 84, 80, 80, + 0, 0, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, + 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, + 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, + 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, + 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, + 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, + 115, 115, 115, 115, 115, 115, 133, 133, 133, 133, 133, 133, 133, 133, + 133, 133, 133, 115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 134, 134, + 134, 134, 134, 134, 134, 134, 134, 134, 105, 105, 105, 105, 105, 105, + 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, + 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 80, 80, + 80, 80, 80, 80, 80, 84, 80, 135, 135, 27, 136, 136, 136, 135, 0, 0, 0, 0, + 0, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, + 105, 105, 105, 105, 105, 105, 105, 105, 80, 80, 80, 80, 135, 80, 80, 80, + 80, 80, 80, 80, 80, 80, 135, 80, 80, 80, 135, 80, 80, 80, 80, 80, 0, 0, + 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, + 102, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 133, 133, 133, 137, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, + 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, + 47, 47, 47, 47, 47, 47, 47, 138, 47, 47, 47, 47, 47, 47, 47, 138, 47, 47, + 138, 47, 47, 47, 47, 47, 0, 0, 139, 47, 137, 137, 137, 133, 133, 133, + 133, 133, 133, 133, 133, 137, 137, 137, 137, 140, 137, 0, 47, 80, 84, 80, + 80, 133, 0, 0, 141, 141, 141, 141, 141, 141, 141, 141, 47, 47, 133, 133, + 82, 82, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 82, 52, 47, 0, + 0, 0, 0, 0, 0, 47, 47, 47, 47, 47, 47, 47, 0, 133, 137, 137, 0, 47, 47, + 47, 47, 47, 47, 47, 47, 0, 0, 47, 47, 0, 0, 47, 47, 47, 47, 47, 47, 47, + 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 0, 47, 47, + 47, 47, 47, 47, 47, 0, 47, 0, 0, 0, 47, 47, 47, 47, 0, 0, 143, 47, 144, + 137, 137, 133, 133, 133, 133, 0, 0, 137, 137, 0, 0, 145, 145, 140, 47, 0, + 0, 0, 0, 0, 0, 0, 0, 144, 0, 0, 0, 0, 141, 141, 0, 141, 47, 47, 133, 133, + 0, 0, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 47, 47, 146, 146, + 147, 147, 147, 147, 147, 147, 79, 146, 0, 0, 0, 0, 0, 133, 133, 137, 0, + 47, 47, 47, 47, 47, 47, 0, 0, 0, 0, 47, 47, 0, 0, 47, 47, 47, 47, 47, 47, + 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 0, 47, + 47, 47, 47, 47, 47, 47, 0, 47, 141, 0, 47, 141, 0, 47, 47, 0, 0, 143, 0, + 137, 137, 137, 133, 133, 0, 0, 0, 0, 133, 133, 0, 0, 133, 133, 140, 0, 0, + 0, 133, 0, 0, 0, 0, 0, 0, 0, 141, 141, 141, 47, 0, 141, 0, 0, 0, 0, 0, 0, + 0, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 133, 133, 47, 47, + 47, 133, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 133, 133, 137, 0, 47, 47, 47, + 47, 47, 47, 47, 47, 47, 0, 47, 47, 47, 0, 47, 47, 47, 47, 47, 47, 47, 47, + 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 0, 47, 47, 47, + 47, 47, 47, 47, 0, 47, 47, 0, 47, 47, 47, 47, 47, 0, 0, 143, 47, 137, + 137, 137, 133, 133, 133, 133, 133, 0, 133, 133, 137, 0, 137, 137, 140, 0, + 0, 47, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 47, 47, 133, 133, 0, + 0, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 0, 146, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 133, 137, 137, 0, 47, 47, 47, 47, 47, + 47, 47, 47, 0, 0, 47, 47, 0, 0, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, + 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 0, 47, 47, 47, 47, 47, + 47, 47, 0, 47, 47, 0, 47, 47, 47, 47, 47, 0, 0, 143, 47, 144, 133, 137, + 133, 133, 133, 133, 0, 0, 137, 145, 0, 0, 145, 145, 140, 0, 0, 0, 0, 0, + 0, 0, 0, 148, 144, 0, 0, 0, 0, 141, 141, 0, 47, 47, 47, 133, 133, 0, 0, + 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 79, 47, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 133, 47, 0, 47, 47, 47, 47, 47, 47, 0, + 0, 0, 47, 47, 47, 0, 47, 47, 138, 47, 0, 0, 0, 47, 47, 0, 47, 0, 47, 47, + 0, 0, 0, 47, 47, 0, 0, 0, 47, 47, 47, 0, 0, 0, 47, 47, 47, 47, 47, 47, + 47, 47, 47, 47, 47, 47, 0, 0, 0, 0, 144, 137, 133, 137, 137, 0, 0, 0, + 137, 137, 137, 0, 145, 145, 145, 140, 0, 0, 47, 0, 0, 0, 0, 0, 0, 144, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 142, 142, 142, 142, 142, 142, 142, + 142, 142, 142, 147, 147, 147, 27, 27, 27, 27, 27, 27, 146, 27, 0, 0, 0, + 0, 0, 0, 137, 137, 137, 0, 47, 47, 47, 47, 47, 47, 47, 47, 0, 47, 47, 47, + 0, 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, 47, 47, 47, 47, 47, 47, 47, 47, 47, 0, 47, + 47, 47, 47, 47, 0, 0, 0, 47, 133, 133, 133, 137, 137, 137, 137, 0, 133, + 133, 149, 0, 133, 133, 133, 140, 0, 0, 0, 0, 0, 0, 0, 150, 151, 0, 47, + 47, 0, 0, 0, 0, 0, 0, 47, 47, 133, 133, 0, 0, 142, 142, 142, 142, 142, + 142, 142, 142, 142, 142, 0, 0, 0, 0, 0, 0, 0, 0, 152, 152, 152, 152, 152, + 152, 152, 79, 0, 0, 137, 137, 0, 47, 47, 47, 47, 47, 47, 47, 47, 0, 47, + 47, 47, 0, 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, 47, 47, 47, 47, 47, 47, 47, 47, + 47, 0, 47, 47, 47, 47, 47, 0, 0, 143, 47, 137, 153, 145, 137, 144, 137, + 137, 0, 153, 145, 145, 0, 145, 145, 133, 140, 0, 0, 0, 0, 0, 0, 0, 144, + 144, 0, 0, 0, 0, 0, 0, 0, 47, 0, 47, 47, 133, 133, 0, 0, 142, 142, 142, + 142, 142, 142, 142, 142, 142, 142, 0, 27, 27, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 137, 137, 0, 47, 47, 47, 47, 47, 47, 47, 47, 0, 47, 47, + 47, 0, 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, 47, 47, 47, 47, 47, 47, 47, 47, 47, + 47, 47, 47, 47, 47, 47, 0, 0, 0, 47, 144, 137, 137, 133, 133, 133, 133, + 0, 137, 137, 137, 0, 145, 145, 145, 140, 0, 0, 0, 0, 0, 0, 0, 0, 0, 144, + 0, 0, 0, 0, 0, 0, 0, 0, 47, 47, 133, 133, 0, 0, 142, 142, 142, 142, 142, + 142, 142, 142, 142, 142, 147, 147, 147, 147, 147, 147, 0, 0, 0, 79, 47, + 47, 47, 47, 47, 47, 0, 0, 137, 137, 0, 47, 47, 47, 47, 47, 47, 47, 47, + 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 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, + 0, 47, 47, 47, 47, 47, 47, 47, 47, 47, 0, 47, 0, 0, 47, 47, 47, 47, 47, + 47, 47, 0, 0, 0, 154, 0, 0, 0, 0, 144, 137, 137, 133, 133, 133, 0, 133, + 0, 137, 137, 145, 137, 145, 145, 145, 144, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 137, 137, 82, 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, 47, 47, 47, 47, 47, 47, 47, 47, 133, 47, 155, 133, 133, + 133, 133, 156, 156, 140, 0, 0, 0, 0, 146, 47, 47, 47, 47, 47, 47, 52, + 133, 157, 157, 157, 157, 133, 133, 133, 82, 142, 142, 142, 142, 142, 142, + 142, 142, 142, 142, 82, 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, 47, 47, + 0, 47, 0, 0, 47, 47, 0, 47, 0, 0, 47, 0, 0, 0, 0, 0, 0, 47, 47, 47, 47, + 0, 47, 47, 47, 47, 47, 47, 47, 0, 47, 47, 47, 0, 47, 0, 47, 0, 0, 47, 47, + 0, 47, 47, 47, 47, 133, 47, 155, 133, 133, 133, 133, 158, 158, 0, 133, + 133, 47, 0, 0, 47, 47, 47, 47, 47, 0, 52, 0, 159, 159, 159, 159, 133, + 133, 0, 0, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 0, 0, 155, + 155, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 79, 79, 79, 82, 82, 82, 82, 82, 82, + 82, 82, 160, 82, 82, 82, 82, 82, 82, 79, 79, 79, 79, 79, 84, 84, 79, 79, + 79, 79, 79, 79, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 147, + 147, 147, 147, 147, 147, 147, 147, 147, 147, 79, 84, 79, 84, 79, 161, + 162, 163, 162, 163, 137, 137, 47, 47, 47, 141, 47, 47, 47, 47, 0, 47, 47, + 47, 47, 141, 47, 47, 47, 47, 141, 47, 47, 47, 47, 141, 47, 47, 47, 47, + 141, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 141, 47, 47, 47, 0, + 0, 0, 0, 164, 165, 166, 167, 166, 166, 168, 166, 168, 165, 165, 165, 165, + 133, 137, 165, 166, 80, 80, 140, 82, 80, 80, 47, 47, 47, 47, 0, 0, 0, 0, + 133, 133, 133, 166, 133, 133, 133, 133, 0, 133, 133, 133, 133, 166, 133, + 133, 133, 133, 166, 133, 133, 133, 133, 166, 133, 133, 133, 133, 166, + 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 166, 133, + 133, 133, 0, 79, 79, 79, 79, 79, 79, 79, 79, 84, 79, 79, 79, 79, 79, 79, + 0, 79, 79, 82, 82, 82, 82, 82, 79, 79, 79, 79, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 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, 138, 47, 47, 47, 47, 137, 137, 133, 148, 133, + 133, 137, 133, 133, 133, 133, 133, 143, 137, 140, 140, 137, 137, 133, + 133, 47, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 82, 82, 82, + 82, 82, 82, 47, 47, 47, 47, 47, 47, 137, 137, 133, 133, 47, 47, 47, 47, + 133, 133, 133, 47, 137, 137, 137, 47, 47, 137, 137, 137, 137, 137, 137, + 137, 47, 47, 47, 133, 133, 133, 133, 47, 47, 47, 47, 47, 47, 47, 47, 47, + 47, 47, 47, 47, 133, 137, 137, 133, 133, 137, 137, 137, 137, 137, 137, + 84, 47, 137, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 137, 137, + 137, 133, 79, 79, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 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, 46, 46, 46, 46, 46, 46, 46, 46, + 44, 44, 44, 44, 44, 44, 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, 82, 50, 0, 0, 0, 169, 169, 169, 169, 169, 169, 169, 169, 169, + 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, + 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, + 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, + 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, + 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, + 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, + 169, 169, 169, 47, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, + 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 47, 47, 47, 47, 47, 47, + 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, + 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, + 47, 47, 47, 169, 169, 169, 169, 169, 170, 170, 170, 170, 170, 170, 170, + 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, + 170, 170, 170, 170, 170, 170, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, + 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, + 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, + 47, 47, 47, 47, 47, 47, 47, 47, 169, 169, 169, 169, 169, 169, 47, 47, 47, + 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, + 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, + 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 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, + 47, 47, 47, 0, 0, 47, 47, 47, 47, 47, 47, 47, 0, 47, 0, 47, 47, 47, 47, + 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, 0, 47, 47, 47, 47, 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, 0, 47, 47, 47, 47, 0, 0, 47, 47, 47, + 47, 47, 47, 47, 0, 47, 0, 47, 47, 47, 47, 0, 0, 47, 47, 47, 47, 47, 47, + 47, 47, 47, 47, 47, 47, 47, 47, 47, 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, 0, 47, 47, 47, 47, 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, 0, 0, 0, 0, 80, + 79, 82, 82, 82, 82, 82, 82, 82, 82, 147, 147, 147, 147, 147, 147, 147, + 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 0, 0, 0, + 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 27, 27, + 27, 27, 27, 27, 27, 27, 27, 27, 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, 47, 47, 47, 47, + 47, 47, 47, 47, 47, 47, 47, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 83, 47, 47, + 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, + 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, + 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, + 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, + 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, + 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, + 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, + 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, + 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, + 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, + 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, + 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, + 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, + 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, + 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, + 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, + 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, + 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, + 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, + 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, + 47, 47, 82, 82, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, + 47, 47, 47, 171, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, + 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 162, 163, 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, 47, 82, 82, 82, 172, 172, 172, 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, 0, 47, 47, 47, + 47, 133, 133, 140, 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, 133, 133, 140, 82, + 82, 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, 133, 133, 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, 0, 47, 47, 47, + 0, 133, 133, 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, 47, 47, + 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 173, 173, 137, 133, 133, 133, + 133, 133, 133, 133, 137, 137, 137, 137, 137, 137, 137, 137, 133, 137, + 137, 133, 133, 133, 133, 133, 133, 133, 133, 133, 140, 133, 82, 82, 82, + 52, 82, 82, 82, 146, 47, 80, 0, 0, 142, 142, 142, 142, 142, 142, 142, + 142, 142, 142, 0, 0, 0, 0, 0, 0, 152, 152, 152, 152, 152, 152, 152, 152, + 152, 152, 0, 0, 0, 0, 0, 0, 136, 136, 136, 136, 136, 136, 83, 136, 136, + 136, 136, 133, 133, 133, 171, 0, 142, 142, 142, 142, 142, 142, 142, 142, + 142, 142, 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, 52, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, + 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 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, 47, 47, 47, 47, 47, 47, 47, + 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, + 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 86, 47, + 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, 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, 0, 0, 0, 133, 133, 133, 137, 137, 137, 137, 133, 133, 137, 137, + 137, 0, 0, 0, 0, 137, 137, 133, 137, 137, 137, 137, 137, 137, 85, 80, 84, + 0, 0, 0, 0, 27, 0, 0, 0, 136, 136, 142, 142, 142, 142, 142, 142, 142, + 142, 142, 142, 47, 47, 47, 47, 47, 47, 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, 47, + 47, 47, 47, 47, 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, 47, 47, + 47, 47, 0, 0, 0, 0, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, + 137, 137, 137, 137, 137, 137, 137, 47, 47, 47, 47, 47, 47, 47, 137, 137, + 0, 0, 0, 0, 0, 0, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, + 0, 0, 0, 136, 136, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, + 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, + 27, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, + 47, 47, 47, 47, 47, 47, 80, 84, 137, 137, 137, 0, 0, 82, 82, 47, 47, 47, + 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, + 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, + 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 137, 133, 137, + 133, 133, 133, 133, 133, 133, 133, 0, 140, 137, 133, 137, 137, 133, 133, + 133, 133, 133, 133, 133, 133, 137, 137, 137, 137, 137, 137, 133, 133, 80, + 80, 80, 80, 80, 80, 80, 80, 0, 0, 84, 142, 142, 142, 142, 142, 142, 142, + 142, 142, 142, 0, 0, 0, 0, 0, 0, 142, 142, 142, 142, 142, 142, 142, 142, + 142, 142, 0, 0, 0, 0, 0, 0, 82, 82, 82, 82, 82, 82, 82, 52, 82, 82, 82, + 82, 82, 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, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 133, 133, 133, 133, 137, 47, + 138, 47, 138, 47, 138, 47, 138, 47, 138, 47, 47, 47, 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, 143, 144, 133, 133, 133, 133, + 133, 145, 133, 145, 137, 137, 145, 145, 133, 145, 174, 47, 47, 47, 47, + 47, 47, 47, 0, 0, 0, 0, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, + 82, 82, 82, 82, 82, 82, 82, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 80, + 84, 80, 80, 80, 80, 80, 80, 80, 79, 79, 79, 79, 79, 79, 79, 79, 79, 0, 0, + 0, 133, 133, 137, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, + 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 137, 133, + 133, 133, 133, 137, 137, 133, 133, 174, 0, 0, 0, 47, 47, 142, 142, 142, + 142, 142, 142, 142, 142, 142, 142, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 137, 137, 137, 137, 137, 137, 137, 137, 133, + 133, 133, 133, 133, 133, 133, 133, 137, 137, 133, 143, 0, 0, 0, 82, 82, + 82, 82, 82, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 0, 0, 0, + 47, 47, 47, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 47, 47, 47, + 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, + 47, 47, 47, 47, 47, 47, 47, 47, 47, 52, 52, 52, 52, 52, 52, 82, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 80, 80, 80, 82, 175, 84, 84, 84, 84, 84, 80, 80, 84, + 84, 84, 84, 80, 137, 175, 175, 175, 175, 175, 175, 175, 47, 47, 47, 47, + 84, 47, 47, 47, 47, 137, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, - 46, 46, 46, 0, 44, 46, 44, 44, 44, 46, 46, 44, 46, 44, 46, 44, 46, 44, - 44, 44, 0, 46, 44, 46, 46, 44, 46, 46, 46, 46, 46, 46, 35, 50, 0, 0, 44, - 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, - 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, - 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, - 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, - 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, - 46, 44, 46, 44, 46, 44, 46, 44, 46, 46, 27, 27, 27, 27, 27, 27, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 136, 136, 136, 136, 152, 136, 136, 46, + 46, 46, 46, 46, 46, 46, 50, 50, 50, 52, 50, 50, 50, 50, 50, 50, 50, 50, + 50, 50, 50, 52, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, + 50, 50, 50, 50, 52, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, + 50, 50, 50, 50, 50, 50, 35, 35, 35, 35, 35, 35, 35, 35, 35, 46, 46, 46, + 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 50, 46, 46, 46, 46, 46, 46, 46, + 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, + 46, 46, 46, 46, 46, 46, 46, 46, 46, 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, 80, 80, 84, 80, 80, 80, 80, 80, + 80, 80, 84, 80, 80, 176, 177, 84, 178, 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, 84, 80, 84, 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, 179, 46, 46, 44, 46, 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, 46, 44, 46, 44, + 46, 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, 180, 43, 180, 43, 180, 43, 180, 43, 180, 43, 180, 43, 180, 0, 0, + 43, 43, 43, 43, 43, 43, 43, 43, 181, 181, 181, 181, 181, 181, 181, 181, + 43, 43, 43, 43, 43, 43, 43, 43, 181, 181, 181, 181, 181, 181, 181, 181, + 43, 43, 43, 43, 43, 43, 43, 43, 181, 181, 181, 181, 181, 181, 181, 181, + 43, 43, 43, 43, 43, 0, 43, 43, 38, 38, 38, 182, 181, 57, 180, 57, 57, 75, + 43, 43, 43, 0, 43, 43, 38, 182, 38, 182, 181, 75, 75, 75, 43, 43, 43, + 180, 0, 0, 43, 43, 38, 38, 38, 182, 0, 75, 75, 75, 43, 43, 43, 180, 43, + 43, 43, 43, 38, 38, 38, 182, 38, 75, 183, 183, 0, 0, 43, 43, 43, 0, 43, + 43, 38, 182, 38, 182, 181, 183, 57, 0, 184, 184, 185, 185, 185, 185, 185, + 185, 185, 185, 185, 131, 131, 131, 173, 186, 187, 188, 83, 187, 187, 187, + 22, 189, 190, 191, 192, 193, 190, 191, 192, 193, 22, 22, 22, 136, 194, + 194, 194, 22, 195, 196, 197, 198, 199, 200, 201, 21, 202, 108, 202, 203, + 204, 22, 189, 189, 136, 29, 36, 22, 189, 136, 194, 205, 205, 136, 136, + 136, 206, 162, 163, 189, 189, 189, 136, 136, 136, 136, 136, 136, 136, + 136, 77, 136, 205, 136, 136, 189, 136, 136, 136, 136, 136, 136, 136, 185, + 131, 131, 131, 131, 131, 0, 0, 0, 0, 0, 131, 131, 131, 131, 131, 131, + 207, 50, 0, 0, 34, 207, 207, 207, 207, 207, 208, 208, 209, 210, 211, 212, + 207, 34, 34, 34, 34, 207, 207, 207, 207, 207, 208, 208, 209, 210, 211, 0, + 50, 50, 50, 50, 50, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 146, 146, 146, 146, + 146, 146, 146, 146, 213, 214, 146, 146, 23, 146, 146, 146, 146, 146, 146, + 146, 146, 146, 146, 146, 146, 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, 175, 175, 80, 80, 80, 80, 175, 175, + 175, 80, 80, 81, 81, 81, 81, 80, 81, 81, 81, 175, 175, 80, 84, 80, 175, + 175, 84, 84, 84, 84, 80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 215, 215, 48, 216, 27, 216, 215, 48, 27, 216, 35, 48, 48, 48, 35, 35, 48, + 48, 48, 28, 27, 48, 216, 27, 27, 48, 48, 48, 48, 48, 27, 27, 215, 216, + 216, 27, 48, 27, 217, 27, 48, 27, 182, 217, 48, 48, 218, 35, 48, 48, 44, + 48, 35, 155, 155, 155, 155, 35, 27, 215, 35, 35, 48, 48, 219, 77, 77, 77, + 77, 48, 35, 35, 35, 35, 27, 77, 27, 27, 46, 79, 220, 220, 220, 37, 37, + 220, 220, 220, 220, 220, 220, 37, 37, 37, 37, 220, 221, 221, 221, 221, + 221, 221, 221, 221, 221, 221, 221, 221, 222, 222, 222, 222, 221, 221, + 221, 221, 221, 221, 221, 221, 221, 221, 222, 222, 222, 222, 222, 222, + 172, 172, 172, 44, 46, 172, 172, 172, 172, 37, 0, 0, 0, 0, 0, 0, 40, 40, + 40, 40, 40, 25, 25, 25, 25, 25, 223, 223, 27, 27, 27, 27, 77, 27, 27, 77, + 27, 27, 77, 27, 27, 27, 27, 27, 27, 27, 223, 27, 27, 27, 27, 27, 27, 27, + 27, 27, 25, 25, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, + 27, 27, 27, 27, 27, 224, 223, 223, 27, 27, 40, 27, 40, 27, 27, 27, 27, + 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 25, 27, 27, 27, + 27, 27, 27, 27, 27, 27, 27, 27, 27, 77, 77, 77, 77, 77, 77, 77, 77, 77, + 77, 77, 77, 40, 225, 226, 226, 227, 77, 77, 40, 226, 227, 225, 226, 227, + 225, 77, 40, 77, 226, 228, 229, 77, 226, 225, 77, 77, 77, 226, 225, 225, + 226, 40, 226, 226, 225, 225, 40, 227, 40, 227, 40, 40, 40, 40, 226, 230, + 219, 226, 219, 219, 225, 225, 225, 40, 40, 40, 40, 77, 225, 77, 225, 226, + 226, 225, 225, 225, 227, 225, 225, 227, 225, 225, 227, 226, 227, 225, + 225, 226, 77, 77, 77, 77, 77, 226, 225, 225, 225, 77, 77, 77, 77, 77, 77, + 77, 77, 77, 225, 231, 40, 227, 77, 226, 226, 226, 226, 225, 225, 226, + 226, 77, 223, 231, 231, 227, 227, 225, 225, 227, 227, 225, 225, 227, 227, + 225, 225, 225, 225, 225, 225, 227, 227, 226, 226, 227, 227, 226, 226, + 227, 227, 225, 225, 225, 77, 77, 225, 225, 225, 225, 77, 77, 40, 77, 77, + 225, 40, 77, 77, 77, 77, 77, 77, 77, 77, 225, 225, 77, 40, 225, 225, 225, + 225, 225, 225, 227, 227, 227, 227, 225, 225, 225, 225, 225, 225, 225, + 225, 225, 77, 77, 77, 77, 77, 225, 226, 77, 77, 77, 77, 77, 77, 77, 77, + 77, 225, 225, 225, 225, 225, 77, 77, 225, 225, 77, 77, 77, 77, 225, 225, + 225, 225, 225, 225, 225, 225, 225, 225, 227, 227, 227, 227, 225, 225, + 225, 225, 225, 225, 227, 227, 227, 227, 77, 77, 225, 225, 225, 225, 225, + 225, 225, 225, 225, 225, 225, 225, 225, 225, 225, 225, 27, 27, 27, 27, + 27, 27, 27, 27, 225, 225, 225, 225, 27, 27, 27, 27, 27, 27, 25, 27, 27, + 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 225, 225, 27, 27, 27, 27, 27, + 27, 27, 232, 233, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 79, 79, 79, + 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, + 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, + 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, + 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 27, 77, 27, 27, 27, 27, + 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, + 27, 27, 79, 27, 27, 27, 27, 27, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, + 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 27, 27, 27, + 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, + 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, + 27, 77, 77, 77, 77, 77, 77, 27, 27, 27, 27, 27, 27, 27, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 27, 27, 27, 27, 27, + 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, + 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 27, 27, + 27, 27, 27, 27, 27, 27, 27, 27, 27, 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, 34, 34, 34, 34, 34, 34, 34, + 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 234, 234, 234, 234, + 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, + 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, + 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, + 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, + 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, + 234, 234, 234, 234, 220, 235, 235, 235, 235, 235, 235, 235, 235, 235, + 235, 235, 235, 235, 235, 235, 235, 235, 235, 235, 235, 235, 25, 25, 25, + 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, + 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, + 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, + 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, + 25, 27, 27, 27, 27, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, + 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, + 25, 25, 25, 25, 25, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 25, + 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 27, 27, 25, + 25, 25, 25, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 25, 25, 27, 25, 25, + 25, 25, 25, 25, 25, 27, 27, 27, 27, 27, 27, 27, 27, 25, 25, 27, 27, 25, + 40, 27, 27, 27, 27, 25, 25, 27, 27, 25, 40, 27, 27, 27, 27, 25, 25, 25, + 27, 27, 25, 27, 27, 25, 25, 25, 25, 27, 27, 27, 27, 27, 27, 27, 27, 27, + 27, 27, 27, 27, 27, 27, 27, 25, 25, 25, 25, 27, 27, 27, 27, 27, 27, 27, + 27, 27, 25, 27, 27, 27, 27, 27, 27, 27, 27, 77, 77, 77, 77, 77, 77, 77, + 77, 27, 27, 27, 27, 27, 25, 25, 27, 27, 25, 27, 27, 27, 27, 25, 25, 27, + 27, 27, 27, 25, 25, 27, 27, 27, 27, 27, 27, 25, 27, 25, 27, 27, 27, 27, + 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, + 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 25, 27, 25, 27, 27, 27, 27, + 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, + 27, 27, 27, 27, 27, 27, 27, 25, 25, 27, 25, 25, 25, 27, 25, 25, 25, 25, + 27, 25, 25, 27, 40, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, + 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, + 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 25, 25, 27, + 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 79, 27, 27, 27, 27, 27, 27, + 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 25, 25, 27, 27, 27, 27, 25, + 25, 25, 25, 25, 25, 25, 25, 25, 25, 0, 25, 25, 25, 25, 25, 25, 25, 25, + 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 0, 25, 0, 0, 0, 0, 25, 25, + 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, + 25, 25, 25, 25, 0, 27, 27, 27, 27, 0, 27, 27, 27, 27, 0, 0, 27, 27, 27, + 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, + 27, 27, 27, 27, 27, 27, 27, 0, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, + 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 25, 27, 27, 27, 27, 27, 27, 27, + 27, 27, 27, 27, 27, 27, 27, 0, 27, 0, 27, 27, 27, 27, 0, 0, 0, 27, 25, + 27, 27, 27, 27, 27, 27, 27, 0, 0, 27, 27, 27, 27, 27, 27, 27, 162, 163, + 162, 163, 162, 163, 162, 163, 162, 163, 162, 163, 162, 163, 235, 235, + 235, 235, 235, 235, 235, 235, 235, 235, 152, 152, 152, 152, 152, 152, + 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 27, + 0, 0, 0, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, + 27, 27, 27, 27, 27, 27, 27, 27, 0, 27, 27, 27, 27, 27, 27, 27, 27, 27, + 27, 27, 27, 27, 27, 0, 225, 77, 77, 225, 225, 162, 163, 77, 225, 225, 77, + 0, 225, 0, 0, 0, 77, 77, 77, 225, 225, 225, 225, 77, 77, 77, 77, 77, 225, + 225, 225, 77, 77, 77, 225, 225, 225, 225, 9, 10, 9, 10, 9, 10, 9, 10, + 162, 163, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, + 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, + 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, + 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, + 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, + 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, + 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, + 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, + 79, 79, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, + 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, + 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, + 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, + 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, + 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, + 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, + 77, 77, 77, 77, 77, 77, 77, 162, 163, 9, 10, 162, 163, 162, 163, 162, + 163, 162, 163, 162, 163, 162, 163, 162, 163, 162, 163, 162, 163, 77, 77, + 225, 225, 225, 225, 225, 225, 225, 225, 225, 225, 225, 225, 225, 225, + 225, 225, 225, 225, 225, 225, 225, 77, 77, 77, 77, 77, 77, 77, 77, 225, + 77, 77, 77, 77, 77, 77, 77, 225, 225, 225, 225, 225, 225, 77, 77, 77, + 225, 77, 77, 77, 77, 225, 225, 225, 225, 225, 77, 225, 225, 77, 77, 162, + 163, 162, 163, 225, 77, 77, 77, 77, 225, 77, 225, 225, 225, 77, 77, 225, + 225, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 225, 225, 225, 225, 225, + 225, 77, 77, 162, 163, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, + 225, 225, 219, 225, 225, 225, 225, 225, 225, 225, 225, 225, 225, 225, + 225, 225, 225, 225, 225, 77, 225, 225, 225, 225, 77, 77, 225, 77, 225, + 77, 77, 225, 77, 225, 225, 225, 225, 77, 77, 77, 77, 77, 225, 225, 77, + 77, 77, 77, 77, 77, 225, 225, 225, 77, 77, 77, 77, 77, 77, 77, 77, 77, + 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 225, 225, 77, + 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 225, 225, 77, 77, 77, 77, 225, + 225, 225, 225, 77, 225, 225, 77, 77, 225, 219, 209, 209, 77, 77, 225, + 225, 225, 225, 225, 225, 225, 225, 225, 225, 225, 225, 225, 225, 225, + 225, 225, 225, 225, 225, 225, 225, 225, 225, 225, 225, 225, 225, 225, + 225, 225, 225, 225, 225, 225, 225, 225, 225, 225, 225, 225, 225, 225, 77, + 77, 225, 225, 225, 225, 225, 225, 225, 225, 77, 225, 225, 225, 225, 225, + 225, 225, 225, 225, 225, 225, 225, 225, 225, 225, 225, 225, 225, 225, + 225, 225, 225, 225, 225, 225, 225, 225, 225, 225, 225, 225, 225, 225, + 225, 225, 225, 225, 225, 225, 225, 77, 77, 77, 77, 77, 236, 77, 225, 77, + 77, 77, 225, 225, 225, 225, 225, 77, 77, 77, 77, 77, 225, 225, 225, 77, + 77, 77, 77, 225, 77, 77, 77, 225, 225, 225, 225, 225, 77, 225, 77, 77, + 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, + 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, + 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 77, 77, 77, 77, 77, 77, + 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 27, 27, 77, + 77, 77, 77, 77, 77, 0, 0, 0, 27, 27, 27, 27, 27, 25, 25, 25, 25, 25, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, + 44, 44, 44, 0, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, + 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 0, 44, 46, + 44, 44, 44, 46, 46, 44, 46, 44, 46, 44, 46, 44, 44, 44, 44, 46, 44, 46, + 46, 44, 46, 46, 46, 46, 46, 46, 35, 50, 44, 44, 44, 46, 44, 46, 44, 46, + 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, + 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, + 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, + 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, + 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, + 44, 46, 44, 46, 46, 27, 27, 27, 27, 27, 27, 44, 46, 44, 46, 80, 80, 80, + 0, 0, 0, 0, 0, 0, 0, 136, 136, 136, 136, 152, 136, 136, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, - 46, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, + 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 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, 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, 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, 47, 47, 47, 47, 47, 47, 47, 0, 47, 47, 47, 47, 47, 47, 47, + 47, 47, 47, 47, 47, 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, 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, 47, 47, 47, 47, 47, 47, 47, 0, 47, 47, 47, 47, 47, 47, 47, 0, 47, 47, 47, 47, 47, 47, 47, 0, 47, 47, 47, 47, 47, 47, 47, 0, 47, 47, 47, 47, 47, - 47, 47, 0, 47, 47, 47, 47, 47, 47, 47, 0, 80, 80, 80, 80, 80, 80, 80, 80, + 47, 47, 0, 47, 47, 47, 47, 47, 47, 47, 0, 47, 47, 47, 47, 47, 47, 47, 0, + 47, 47, 47, 47, 47, 47, 47, 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, 136, 136, 29, 36, 29, 36, 136, 136, 136, 29, 36, - 136, 29, 36, 136, 136, 136, 136, 136, 136, 136, 136, 136, 83, 136, 136, - 83, 136, 29, 36, 136, 136, 29, 36, 162, 163, 162, 163, 162, 163, 162, - 163, 136, 136, 136, 136, 136, 51, 136, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 236, 236, - 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, - 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 0, 236, 236, 236, 236, - 237, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, - 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, - 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, - 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, - 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, - 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, - 237, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 237, 237, 237, 237, 237, 237, - 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, - 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, - 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, - 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, - 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, - 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, + 80, 80, 80, 80, 136, 136, 29, 36, 29, 36, 136, 136, 136, 29, 36, 136, 29, + 36, 136, 136, 136, 136, 136, 136, 136, 136, 136, 83, 136, 136, 83, 136, + 29, 36, 136, 136, 29, 36, 162, 163, 162, 163, 162, 163, 162, 163, 136, + 136, 136, 136, 136, 51, 136, 136, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, + 237, 237, 237, 237, 237, 237, 237, 237, 0, 237, 237, 237, 237, 238, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, + 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 238, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 238, 238, 238, 238, 238, 238, 238, 238, 238, + 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, + 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, + 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, + 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, + 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, + 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, + 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, + 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, + 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, + 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, + 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, + 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, + 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, + 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, + 238, 238, 238, 238, 238, 238, 238, 238, 238, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 237, 237, 237, 237, + 237, 237, 237, 237, 237, 237, 237, 237, 0, 0, 0, 0, 239, 240, 240, 240, + 237, 241, 169, 242, 243, 244, 243, 244, 243, 244, 243, 244, 243, 244, + 237, 237, 243, 244, 243, 244, 243, 244, 243, 244, 245, 246, 247, 247, + 237, 242, 242, 242, 242, 242, 242, 242, 242, 242, 248, 249, 250, 251, + 252, 252, 245, 241, 241, 241, 241, 241, 238, 237, 253, 253, 253, 241, + 169, 240, 237, 27, 0, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, + 169, 254, 169, 254, 169, 254, 169, 254, 169, 254, 169, 254, 169, 254, + 169, 254, 169, 254, 169, 254, 169, 254, 169, 254, 169, 169, 254, 169, + 254, 169, 254, 169, 169, 169, 169, 169, 169, 254, 254, 169, 254, 254, + 169, 254, 254, 169, 254, 254, 169, 254, 254, 169, 169, 169, 169, 169, + 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, + 169, 169, 169, 254, 169, 169, 0, 0, 255, 255, 256, 256, 241, 257, 258, + 245, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 254, 169, + 254, 169, 254, 169, 254, 169, 254, 169, 254, 169, 254, 169, 254, 169, + 254, 169, 254, 169, 254, 169, 254, 169, 169, 254, 169, 254, 169, 254, + 169, 169, 169, 169, 169, 169, 254, 254, 169, 254, 254, 169, 254, 254, + 169, 254, 254, 169, 254, 254, 169, 169, 169, 169, 169, 169, 169, 169, + 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, + 254, 169, 169, 254, 254, 254, 254, 240, 241, 241, 257, 258, 0, 0, 0, 0, + 0, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, + 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, + 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 0, 0, 0, + 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, + 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, + 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, + 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, + 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, + 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, + 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 0, 259, 259, 260, 260, + 260, 260, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 169, 169, + 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, + 169, 169, 169, 169, 169, 169, 169, 169, 0, 0, 0, 0, 0, 0, 0, 0, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, - 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 236, - 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 0, 0, 0, 0, 238, - 239, 239, 239, 236, 240, 169, 241, 242, 243, 242, 243, 242, 243, 242, - 243, 242, 243, 236, 236, 242, 243, 242, 243, 242, 243, 242, 243, 244, - 245, 246, 246, 236, 241, 241, 241, 241, 241, 241, 241, 241, 241, 247, - 248, 249, 250, 251, 251, 244, 240, 240, 240, 240, 240, 237, 236, 252, - 252, 252, 240, 169, 239, 236, 27, 0, 169, 169, 169, 169, 169, 169, 169, - 169, 169, 169, 169, 253, 169, 253, 169, 253, 169, 253, 169, 253, 169, - 253, 169, 253, 169, 253, 169, 253, 169, 253, 169, 253, 169, 253, 169, - 169, 253, 169, 253, 169, 253, 169, 169, 169, 169, 169, 169, 253, 253, - 169, 253, 253, 169, 253, 253, 169, 253, 253, 169, 253, 253, 169, 169, - 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, - 169, 169, 169, 169, 169, 169, 253, 169, 169, 0, 0, 254, 254, 255, 255, - 240, 256, 257, 244, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, - 169, 253, 169, 253, 169, 253, 169, 253, 169, 253, 169, 253, 169, 253, - 169, 253, 169, 253, 169, 253, 169, 253, 169, 253, 169, 169, 253, 169, - 253, 169, 253, 169, 169, 169, 169, 169, 169, 253, 253, 169, 253, 253, - 169, 253, 253, 169, 253, 253, 169, 253, 253, 169, 169, 169, 169, 169, - 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, - 169, 169, 169, 253, 169, 169, 253, 253, 253, 253, 239, 240, 240, 256, - 257, 0, 0, 0, 0, 0, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, - 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, - 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, - 169, 169, 169, 0, 0, 0, 257, 257, 257, 257, 257, 257, 257, 257, 257, 257, - 257, 257, 257, 257, 257, 257, 257, 257, 257, 257, 257, 257, 257, 257, - 257, 257, 257, 257, 257, 257, 257, 257, 257, 257, 257, 257, 257, 257, - 257, 257, 257, 257, 257, 257, 257, 257, 257, 257, 257, 257, 257, 257, - 257, 257, 257, 257, 257, 257, 257, 257, 257, 257, 257, 257, 257, 257, - 257, 257, 257, 257, 257, 257, 257, 257, 257, 257, 257, 257, 257, 257, - 257, 257, 257, 257, 257, 257, 257, 257, 257, 257, 257, 257, 257, 257, 0, - 258, 258, 259, 259, 259, 259, 260, 260, 260, 260, 260, 260, 260, 260, - 260, 260, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, - 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 0, 0, 0, 0, - 0, 0, 0, 0, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, - 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, - 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, - 169, 169, 169, 169, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, - 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, - 260, 260, 260, 260, 260, 237, 237, 0, 259, 259, 259, 259, 259, 259, 259, - 259, 259, 259, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, - 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, - 260, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 237, 261, 261, 261, 261, 261, - 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 260, 260, 260, 260, - 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, - 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 237, 237, 237, 258, - 259, 259, 259, 259, 259, 259, 259, 259, 259, 259, 260, 260, 260, 260, - 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, - 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, - 260, 260, 260, 260, 260, 260, 260, 261, 261, 261, 261, 261, 261, 261, - 261, 261, 261, 261, 261, 261, 261, 261, 260, 260, 260, 260, 260, 260, - 260, 260, 260, 260, 260, 260, 237, 237, 237, 237, 260, 260, 260, 260, - 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, - 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, - 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, - 260, 0, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, - 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, - 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, - 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, - 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, - 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, - 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, - 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, - 260, 260, 260, 260, 260, 260, 260, 260, 237, 237, 237, 237, 260, 260, - 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, - 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, - 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, - 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, - 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, - 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, - 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 237, - 237, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, - 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, - 260, 260, 260, 260, 237, 169, 169, 169, 169, 169, 169, 169, 169, 169, + 237, 237, 237, 237, 237, 237, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, + 169, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, + 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, + 261, 261, 238, 238, 0, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, + 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, + 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, + 261, 261, 262, 262, 262, 262, 262, 262, 262, 262, 238, 263, 263, 263, + 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, 261, 261, + 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, + 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 238, 238, + 238, 259, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 261, 261, + 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, + 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, + 261, 261, 261, 261, 261, 261, 261, 261, 261, 263, 263, 263, 263, 263, + 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, 261, 261, 261, 261, + 261, 261, 261, 261, 261, 261, 261, 261, 238, 238, 238, 238, 261, 261, + 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, + 261, 261, 261, 261, 261, 261, 261, 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, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, + 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, + 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, + 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, + 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, + 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, + 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, + 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, + 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 238, 238, 238, 238, + 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, + 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, + 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, + 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, + 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, + 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, + 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, + 261, 238, 238, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, + 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, + 261, 261, 261, 261, 261, 261, 238, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, @@ -1892,20 +1932,21 @@ 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, - 169, 169, 169, 169, 169, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 27, 27, 27, 27, + 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, + 169, 169, 169, 169, 169, 169, 169, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, - 27, 27, 27, 27, 27, 27, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, + 27, 27, 27, 27, 27, 27, 27, 27, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, - 169, 169, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, - 169, 169, 240, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, + 169, 169, 169, 169, 169, 169, 169, 241, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, @@ -1913,139 +1954,165 @@ 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, - 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 0, 0, 0, 236, 236, 236, - 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, - 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, - 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, - 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 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, 52, 136, 136, 136, 47, - 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 142, 142, - 142, 142, 142, 142, 142, 142, 142, 142, 47, 47, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 44, 46, 44, 46, 44, 46, 44, 46, 44, + 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, + 169, 0, 0, 0, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, + 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, + 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, + 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, + 237, 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, 52, 52, 52, 52, 52, 52, + 82, 82, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 52, 136, 136, + 136, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 142, + 142, 142, 142, 142, 142, 142, 142, 142, 142, 47, 47, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 44, 46, 44, 46, 44, 46, 44, 46, + 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, + 44, 46, 44, 46, 44, 46, 0, 0, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, + 46, 47, 80, 81, 81, 81, 136, 0, 0, 0, 0, 0, 0, 0, 0, 80, 80, 136, 51, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, - 46, 44, 46, 44, 46, 0, 0, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, - 47, 80, 81, 81, 81, 136, 0, 0, 0, 0, 0, 0, 0, 0, 80, 80, 136, 51, 44, 46, + 46, 44, 46, 44, 46, 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, 172, 172, 172, 172, 172, 172, 172, + 172, 172, 172, 80, 80, 82, 82, 82, 82, 82, 82, 0, 0, 0, 0, 0, 0, 0, 0, + 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, + 53, 53, 53, 53, 53, 51, 51, 51, 51, 51, 51, 51, 51, 51, 53, 53, 44, 46, + 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 46, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, - 44, 46, 44, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 53, 53, 53, 53, 53, 53, 53, 53, - 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 51, 51, 51, - 51, 51, 51, 51, 51, 51, 53, 53, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, - 44, 46, 44, 46, 46, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, - 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 50, 46, 46, 46, - 46, 46, 46, 46, 46, 44, 46, 44, 46, 44, 44, 46, 44, 46, 44, 46, 44, 46, - 44, 46, 51, 262, 262, 44, 46, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 44, 46, 44, 46, 50, 46, 46, 46, 46, 46, 46, 46, 46, 44, 46, 44, 46, 44, + 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 51, 264, 264, 44, 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, 0, 0, 0, 0, 0, 0, 0, 0, - 47, 47, 47, 47, 47, 47, 47, 133, 47, 47, 47, 140, 47, 47, 47, 47, 133, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 47, 47, 47, 47, 47, 47, 47, 133, 47, 47, + 47, 140, 47, 47, 47, 47, 133, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, + 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 137, 137, 133, 133, 137, + 27, 27, 27, 27, 0, 0, 0, 0, 147, 147, 147, 147, 147, 147, 79, 79, 146, + 218, 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, 137, 137, 133, 133, 137, 27, 27, 27, 27, 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, 136, 136, 136, 136, 0, 0, 0, 0, 0, 0, 0, 0, 137, 137, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, - 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 136, 136, 136, 136, 0, 0, 0, 0, - 0, 0, 0, 0, 137, 137, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, + 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 137, 137, 137, 137, + 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 140, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 82, 82, 142, 142, 142, 142, 142, 142, 142, 142, 142, + 142, 0, 0, 0, 0, 0, 0, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, + 80, 80, 80, 80, 80, 80, 47, 47, 47, 47, 47, 47, 82, 82, 82, 47, 0, 0, 0, + 0, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, - 47, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, - 137, 137, 140, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 82, 142, 142, 142, 142, - 142, 142, 142, 142, 142, 142, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 47, 47, 47, 47, 47, 47, + 47, 47, 47, 47, 47, 133, 133, 133, 133, 133, 84, 84, 84, 82, 82, 47, 47, + 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, + 47, 47, 47, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 137, + 174, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 169, 169, 169, 169, 169, 169, + 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, + 169, 169, 169, 169, 169, 169, 169, 169, 169, 0, 0, 0, 133, 133, 133, 137, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, - 47, 47, 47, 47, 133, 133, 133, 133, 133, 84, 84, 84, 82, 82, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, - 47, 47, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 137, 174, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 47, 47, 47, + 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 143, 137, 137, 133, 133, 133, + 133, 137, 137, 133, 137, 137, 137, 174, 82, 82, 82, 82, 82, 82, 82, 82, + 82, 82, 82, 82, 82, 0, 52, 142, 142, 142, 142, 142, 142, 142, 142, 142, + 142, 0, 0, 0, 0, 82, 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, 47, 47, 47, 47, 47, 47, + 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, + 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 133, + 133, 133, 133, 133, 133, 137, 137, 133, 133, 137, 137, 133, 133, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 47, 47, 47, 133, 47, 47, 47, 47, 47, 47, 47, 47, 133, + 137, 0, 0, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 0, 0, 82, + 82, 82, 82, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, + 47, 52, 47, 47, 47, 47, 47, 47, 79, 79, 79, 47, 137, 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, 133, 133, 133, 133, 133, 133, 137, 137, 133, 133, 137, 137, 133, - 133, 0, 0, 0, 0, 0, 0, 0, 0, 0, 47, 47, 47, 133, 47, 47, 47, 47, 47, 47, - 47, 47, 133, 137, 0, 0, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, - 0, 0, 82, 82, 82, 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, 253, 253, 253, 253, 253, - 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, - 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, - 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, - 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, - 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, - 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, - 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, - 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, - 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, - 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, - 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, - 253, 253, 253, 253, 253, 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, 80, 47, 80, 80, 84, 47, 47, 80, + 80, 47, 47, 47, 47, 47, 80, 80, 47, 80, 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, 47, 47, 52, 82, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, - 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, - 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, - 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, - 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, - 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, - 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, - 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, - 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, - 264, 264, 264, 264, 264, 264, 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, 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, 169, 169, 265, 169, 265, 169, - 169, 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, 169, 265, 169, - 265, 169, 169, 265, 265, 169, 169, 169, 265, 265, 265, 265, 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, + 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, 137, 137, 133, + 137, 137, 133, 137, 137, 82, 137, 140, 0, 0, 142, 142, 142, 142, 142, + 142, 142, 142, 142, 142, 0, 0, 0, 0, 0, 0, 254, 254, 254, 254, 254, 254, + 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, + 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, + 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, + 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, + 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, + 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, + 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, + 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, + 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, + 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, + 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, + 254, 254, 254, 254, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 169, 169, 169, + 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, + 169, 169, 169, 169, 169, 169, 0, 0, 0, 0, 169, 169, 169, 169, 169, 169, + 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, + 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, + 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, + 169, 0, 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, 0, 0, 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, 265, 265, 265, 265, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 266, 267, 266, - 268, 268, 268, 268, 268, 268, 268, 268, 268, 207, 266, 266, 266, 266, - 266, 266, 266, 266, 266, 266, 266, 266, 266, 0, 266, 266, 266, 266, 266, - 0, 266, 0, 266, 266, 0, 266, 266, 0, 266, 266, 266, 266, 266, 266, 266, - 266, 266, 268, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, + 265, 265, 265, 265, 265, 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, 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, 267, 267, 267, 267, 267, 267, 267, + 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, + 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, + 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, + 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, + 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, + 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, + 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, + 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, + 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, + 267, 267, 267, 267, 267, 267, 267, 267, 267, 169, 169, 267, 169, 267, + 169, 169, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 169, 267, + 169, 267, 169, 169, 267, 267, 169, 169, 169, 267, 267, 267, 267, 0, 0, + 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, + 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, + 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, + 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, + 267, 267, 267, 267, 267, 267, 0, 0, 267, 267, 267, 267, 267, 267, 267, + 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, + 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, + 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, + 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, + 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, + 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, + 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, + 267, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, + 268, 269, 268, 270, 270, 270, 270, 270, 270, 270, 270, 270, 208, 268, + 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 0, 268, 268, + 268, 268, 268, 0, 268, 0, 268, 268, 0, 268, 268, 0, 268, 268, 268, 268, + 268, 268, 268, 268, 268, 270, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, - 128, 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 128, 128, 128, + 128, 128, 128, 128, 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, @@ -2062,26 +2129,26 @@ 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, - 128, 128, 128, 128, 128, 191, 269, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 128, 128, 128, 128, 128, 128, 192, 271, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, - 128, 128, 128, 128, 128, 128, 128, 128, 128, 0, 0, 128, 128, 128, 128, + 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 0, 0, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, - 128, 128, 128, 128, 128, 128, 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, - 128, 270, 27, 0, 0, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, - 70, 70, 70, 271, 271, 271, 271, 271, 271, 271, 272, 273, 271, 0, 0, 0, 0, - 0, 0, 80, 80, 80, 80, 80, 80, 80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 271, 274, - 274, 275, 275, 272, 273, 272, 273, 272, 273, 272, 273, 272, 273, 272, - 273, 272, 273, 272, 273, 239, 239, 272, 273, 271, 271, 271, 271, 275, - 275, 275, 276, 271, 276, 0, 271, 276, 271, 271, 274, 277, 278, 277, 278, - 277, 278, 279, 271, 271, 280, 281, 282, 282, 283, 0, 271, 284, 279, 271, - 0, 0, 0, 0, 128, 128, 128, 115, 128, 0, 128, 128, 128, 128, 128, 128, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 128, 128, 272, 27, 0, 0, 70, 70, 70, 70, 70, 70, 70, 70, 70, + 70, 70, 70, 70, 70, 70, 70, 273, 273, 273, 273, 273, 273, 273, 274, 275, + 273, 0, 0, 0, 0, 0, 0, 80, 80, 80, 80, 80, 80, 80, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 273, 276, 276, 277, 277, 274, 275, 274, 275, 274, 275, 274, 275, + 274, 275, 274, 275, 274, 275, 274, 275, 240, 240, 274, 275, 273, 273, + 273, 273, 277, 277, 277, 278, 273, 278, 0, 273, 278, 273, 273, 276, 279, + 280, 279, 280, 279, 280, 281, 273, 273, 282, 283, 284, 284, 285, 0, 273, + 286, 281, 273, 0, 0, 0, 0, 128, 128, 128, 115, 128, 0, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, @@ -2091,173 +2158,210 @@ 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, - 128, 128, 128, 0, 0, 131, 0, 285, 285, 286, 287, 286, 285, 285, 288, 289, - 285, 290, 291, 292, 291, 291, 293, 293, 293, 293, 293, 293, 293, 293, - 293, 293, 291, 285, 294, 295, 294, 285, 285, 296, 296, 296, 296, 296, - 296, 296, 296, 296, 296, 296, 296, 296, 296, 296, 296, 296, 296, 296, - 296, 296, 296, 296, 296, 296, 296, 288, 285, 289, 297, 298, 297, 299, - 299, 299, 299, 299, 299, 299, 299, 299, 299, 299, 299, 299, 299, 299, - 299, 299, 299, 299, 299, 299, 299, 299, 299, 299, 299, 288, 295, 289, - 295, 288, 289, 300, 301, 302, 300, 300, 303, 303, 303, 303, 303, 303, - 303, 303, 303, 303, 304, 303, 303, 303, 303, 303, 303, 303, 303, 303, - 303, 303, 303, 303, 303, 303, 303, 303, 303, 303, 303, 303, 303, 303, - 303, 303, 303, 303, 303, 303, 303, 303, 303, 303, 303, 303, 303, 303, - 303, 303, 303, 303, 303, 303, 303, 303, 304, 304, 303, 303, 303, 303, - 303, 303, 303, 303, 303, 303, 303, 303, 303, 303, 303, 303, 303, 303, - 303, 303, 303, 303, 303, 303, 303, 303, 303, 303, 303, 303, 303, 0, 0, 0, - 303, 303, 303, 303, 303, 303, 0, 0, 303, 303, 303, 303, 303, 303, 0, 0, - 303, 303, 303, 303, 303, 303, 0, 0, 303, 303, 303, 0, 0, 0, 287, 287, - 295, 297, 305, 287, 287, 0, 306, 307, 307, 307, 307, 306, 306, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 308, 308, 308, 27, 25, 0, 0, 47, 47, 47, 47, 47, 47, - 47, 47, 47, 47, 47, 47, 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, 0, 47, 47, - 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 0, - 47, 47, 0, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 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, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, + 128, 128, 128, 128, 128, 128, 0, 0, 131, 0, 287, 287, 288, 289, 288, 287, + 287, 290, 291, 287, 292, 293, 294, 293, 293, 295, 295, 295, 295, 295, + 295, 295, 295, 295, 295, 293, 287, 296, 297, 296, 287, 287, 298, 298, + 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, + 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, 290, 287, 291, 299, + 300, 299, 301, 301, 301, 301, 301, 301, 301, 301, 301, 301, 301, 301, + 301, 301, 301, 301, 301, 301, 301, 301, 301, 301, 301, 301, 301, 301, + 290, 297, 291, 297, 290, 291, 302, 303, 304, 302, 302, 305, 305, 305, + 305, 305, 305, 305, 305, 305, 305, 306, 305, 305, 305, 305, 305, 305, + 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, + 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, + 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 306, 306, 305, + 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, + 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, + 305, 305, 0, 0, 0, 305, 305, 305, 305, 305, 305, 0, 0, 305, 305, 305, + 305, 305, 305, 0, 0, 305, 305, 305, 305, 305, 305, 0, 0, 305, 305, 305, + 0, 0, 0, 289, 289, 297, 299, 307, 289, 289, 0, 308, 309, 309, 309, 309, + 308, 308, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 310, 310, 310, 27, 25, 0, 0, 47, + 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 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, 0, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, + 47, 47, 47, 47, 0, 47, 47, 0, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, + 47, 47, 47, 47, 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, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 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, 82, 136, 79, 0, 0, 0, 0, 147, 147, 147, 147, 147, 147, + 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, 82, 136, 79, 0, 0, 0, 0, 147, 147, + 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, - 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 0, 0, 0, 79, 79, - 79, 79, 79, 79, 79, 79, 79, 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, 309, 309, 309, - 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, - 309, 309, 152, 152, 152, 152, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, - 27, 27, 27, 27, 27, 27, 152, 0, 0, 0, 0, 0, 27, 27, 27, 27, 27, 27, 27, - 27, 27, 27, 27, 27, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 147, 0, 0, 0, 79, 79, 79, 79, 79, 79, 79, 79, 79, 311, 311, 311, 311, + 311, 311, 311, 311, 311, 311, 311, 311, 311, 311, 311, 311, 311, 311, + 311, 311, 311, 311, 311, 311, 311, 311, 311, 311, 311, 311, 311, 311, + 311, 311, 311, 311, 311, 311, 311, 311, 311, 311, 311, 311, 311, 311, + 311, 311, 311, 311, 311, 311, 311, 152, 152, 152, 152, 27, 27, 27, 27, + 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 152, 0, 0, 0, 0, 0, + 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, - 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 84, 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, 0, 0, 0, 47, 47, 47, 47, 47, + 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, + 79, 79, 79, 79, 79, 79, 84, 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, 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, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, + 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, 0, 147, 147, 147, 147, 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, 172, 47, - 47, 47, 47, 47, 47, 47, 47, 172, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 0, 147, 147, 147, 147, 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, 172, 47, 47, 47, 47, 47, 47, 47, 47, 172, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 82, 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, 47, 47, 47, 47, 47, 47, 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, 82, 47, 47, 47, 47, 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, 47, 47, 47, 47, 47, 47, 47, - 47, 82, 172, 172, 172, 172, 172, 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, 0, 0, 0, + 0, 47, 47, 47, 47, 47, 47, 47, 47, 82, 172, 172, 172, 172, 172, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, + 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, - 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 47, 47, 47, 47, 47, 47, - 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, + 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, + 46, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 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, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 0, 0, 0, 0, 0, 0, - 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, 0, 0, 142, 142, 142, 142, 142, 142, 142, 142, + 142, 142, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 105, 105, 105, 105, 105, 105, 0, 0, 105, 0, 105, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 105, 105, 105, 105, + 105, 105, 0, 0, 105, 0, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, + 105, 105, 105, 105, 105, 105, 0, 105, 105, 0, 0, 0, 105, 0, 0, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, - 105, 0, 105, 105, 0, 0, 0, 105, 0, 0, 105, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 105, 105, 105, 105, 105, 105, 105, 0, 102, 312, 312, 312, 312, 312, 312, + 312, 312, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 105, 105, 105, 105, 105, 105, 105, 105, + 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, + 312, 312, 312, 312, 312, 312, 0, 0, 0, 136, 105, 105, 105, 105, 105, 105, + 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, + 105, 105, 105, 105, 105, 105, 0, 0, 0, 0, 0, 102, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, - 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 310, 310, 310, - 310, 0, 0, 0, 0, 0, 136, 105, 105, 105, 105, 105, 105, 105, 105, 105, + 0, 0, 0, 0, 0, 0, 0, 0, 105, 133, 133, 133, 0, 133, 133, 0, 0, 0, 0, 0, + 133, 84, 133, 80, 105, 105, 105, 105, 0, 105, 105, 105, 0, 105, 105, 105, + 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, + 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 0, 0, 0, 0, 80, 175, + 84, 0, 0, 0, 0, 140, 312, 312, 312, 312, 312, 312, 312, 312, 0, 0, 0, 0, + 0, 0, 0, 0, 102, 102, 102, 102, 102, 102, 102, 102, 102, 0, 0, 0, 0, 0, + 0, 0, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, + 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, + 105, 105, 312, 312, 102, 105, 105, 105, 105, 105, 105, 105, 105, 105, + 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, + 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, + 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, + 105, 105, 105, 0, 0, 0, 136, 136, 136, 136, 136, 136, 136, 105, 105, 105, + 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, + 105, 105, 105, 105, 105, 0, 0, 312, 312, 312, 312, 312, 312, 312, 312, + 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, + 105, 105, 105, 105, 105, 0, 0, 0, 0, 0, 312, 312, 312, 312, 312, 312, + 312, 312, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, + 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, + 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, + 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, - 105, 105, 105, 0, 0, 0, 0, 0, 102, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 105, 105, 105, 105, 105, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 105, 133, 133, 133, 0, 133, 133, 0, 0, 0, 0, 0, 133, 84, 133, - 80, 105, 105, 105, 105, 0, 105, 105, 105, 0, 105, 105, 105, 105, 105, - 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, - 105, 105, 105, 105, 105, 105, 105, 105, 0, 0, 0, 0, 80, 213, 84, 0, 0, 0, - 0, 140, 310, 310, 310, 310, 310, 310, 310, 310, 0, 0, 0, 0, 0, 0, 0, 0, - 102, 102, 102, 102, 102, 102, 102, 102, 102, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 133, 133, + 137, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, + 47, 47, 47, 47, 47, 47, 138, 47, 138, 47, 47, 47, 47, 47, 47, 47, 47, 47, + 47, 47, 47, 47, 47, 138, 47, 47, 47, 47, 137, 137, 137, 133, 133, 133, + 133, 137, 137, 140, 139, 82, 82, 173, 82, 82, 82, 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, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 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, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, + 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, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, - 172, 172, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 82, 82, 82, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, + 172, 172, 172, 172, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 82, 82, + 82, 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, 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, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, - 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, - 79, 79, 79, 79, 79, 79, 79, 79, 79, 0, 0, 79, 79, 79, 79, 79, 79, 79, 79, + 79, 79, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, + 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 0, 0, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, - 79, 79, 79, 79, 79, 79, 79, 79, 79, 311, 311, 311, 311, 311, 311, 311, - 312, 312, 213, 213, 213, 79, 79, 79, 313, 312, 312, 312, 312, 312, 131, - 131, 131, 131, 131, 131, 131, 131, 84, 84, 84, 84, 84, 84, 84, 84, 79, - 79, 80, 80, 80, 80, 80, 84, 84, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, - 79, 79, 80, 80, 80, 80, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, - 79, 311, 311, 311, 311, 311, 311, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, + 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 314, 314, 314, 314, 314, + 314, 314, 315, 315, 175, 175, 175, 79, 79, 79, 316, 315, 315, 315, 315, + 315, 131, 131, 131, 131, 131, 131, 131, 131, 84, 84, 84, 84, 84, 84, 84, + 84, 79, 79, 80, 80, 80, 80, 80, 84, 84, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, - 79, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, + 79, 79, 79, 79, 80, 80, 80, 80, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, + 79, 79, 79, 314, 314, 314, 314, 314, 314, 79, 79, 79, 79, 79, 79, 79, 79, + 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, + 79, 79, 79, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, - 27, 27, 80, 80, 80, 27, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 27, 27, 27, 27, 80, 80, 80, 27, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 27, 27, 27, 27, 27, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, - 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 0, 0, 0, 0, 0, 0, 0, 0, 0, 147, - 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, - 147, 147, 147, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, 48, 48, 48, + 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, + 147, 147, 147, 147, 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, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, - 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, + 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, - 48, 48, 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, 48, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 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, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, + 48, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, + 35, 35, 35, 35, 35, 35, 35, 35, 35, 48, 0, 48, 48, 0, 0, 48, 0, 0, 48, + 48, 0, 0, 48, 48, 48, 48, 0, 48, 48, 48, 48, 48, 48, 48, 48, 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, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, - 35, 35, 35, 35, 35, 35, 35, 35, 48, 0, 48, 48, 0, 0, 48, 0, 0, 48, 48, 0, - 0, 48, 48, 48, 48, 0, 48, 48, 48, 48, 48, 48, 48, 48, 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, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, - 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 35, 35, 35, 35, 35, 35, 35, 35, - 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, - 48, 48, 0, 48, 48, 48, 48, 0, 0, 48, 48, 48, 48, 48, 48, 48, 48, 0, 48, - 48, 48, 48, 48, 48, 48, 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, 48, 48, 0, - 48, 48, 48, 48, 0, 48, 48, 48, 48, 48, 0, 48, 0, 0, 0, 48, 48, 48, 48, + 35, 35, 48, 48, 0, 48, 48, 48, 48, 0, 0, 48, 48, 48, 48, 48, 48, 48, 48, + 0, 48, 48, 48, 48, 48, 48, 48, 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, 48, 48, + 0, 48, 48, 48, 48, 0, 48, 48, 48, 48, 48, 0, 48, 0, 0, 0, 48, 48, 48, 48, 48, 48, 48, 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, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, @@ -2278,25 +2382,25 @@ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 35, 35, 35, 35, 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, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, - 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 314, 35, 35, 35, 35, 35, 35, 35, + 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 317, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, - 315, 35, 35, 35, 35, 35, 35, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, - 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 314, 35, 35, 35, + 219, 35, 35, 35, 35, 35, 35, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 317, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, - 35, 35, 35, 35, 315, 35, 35, 35, 35, 35, 35, 48, 48, 48, 48, 48, 48, 48, + 35, 35, 35, 35, 219, 35, 35, 35, 35, 35, 35, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, - 314, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, - 35, 35, 35, 35, 35, 35, 35, 35, 315, 35, 35, 35, 35, 35, 35, 48, 48, 48, + 317, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, + 35, 35, 35, 35, 35, 35, 35, 35, 219, 35, 35, 35, 35, 35, 35, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, - 48, 48, 48, 48, 314, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, - 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 315, 35, 35, 35, 35, 35, + 48, 48, 48, 48, 317, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, + 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 219, 35, 35, 35, 35, 35, 35, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, - 48, 48, 48, 48, 48, 48, 48, 48, 314, 35, 35, 35, 35, 35, 35, 35, 35, 35, - 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 315, 35, - 35, 35, 35, 35, 35, 48, 35, 0, 0, 316, 316, 316, 316, 316, 316, 316, 316, - 316, 316, 316, 316, 316, 316, 316, 316, 316, 316, 316, 316, 316, 316, - 316, 316, 316, 316, 316, 316, 316, 316, 316, 316, 316, 316, 316, 316, - 316, 316, 316, 316, 316, 316, 316, 316, 316, 316, 316, 316, 316, 316, 27, + 48, 48, 48, 48, 48, 48, 48, 48, 317, 35, 35, 35, 35, 35, 35, 35, 35, 35, + 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 219, 35, + 35, 35, 35, 35, 35, 48, 35, 0, 0, 318, 318, 318, 318, 318, 318, 318, 318, + 318, 318, 318, 318, 318, 318, 318, 318, 318, 318, 318, 318, 318, 318, + 318, 318, 318, 318, 318, 318, 318, 318, 318, 318, 318, 318, 318, 318, + 318, 318, 318, 318, 318, 318, 318, 318, 318, 318, 318, 318, 318, 318, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 0, 0, 0, 0, 27, 27, 27, 27, 27, 27, 27, 27, @@ -2309,29 +2413,55 @@ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 169, 169, 169, 169, 169, 169, + 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, 234, 234, 234, 234, 234, 234, 234, 234, 234, + 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, + 234, 234, 234, 234, 234, 234, 234, 319, 0, 0, 234, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 234, 0, 234, 0, 0, 234, 0, 0, 0, 234, 0, 0, 0, 234, 234, 234, + 234, 234, 0, 0, 0, 0, 0, 0, 0, 0, 262, 0, 0, 0, 0, 0, 0, 0, 262, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 262, 0, + 262, 262, 0, 0, 262, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 262, 262, 262, 262, 0, + 0, 234, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 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, 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, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 261, 261, 261, 261, 261, 261, 261, 261, 261, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, - 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 0, 0, 0, 0, 0, 0, + 169, 169, 169, 169, 169, 169, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, + 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, + 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, + 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 267, + 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, + 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, + 267, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 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, + 0, 0, 0, 0, 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, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, - 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 70, 70, 70, 70, + 131, 131, 131, 131, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, @@ -2344,17 +2474,17 @@ 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, - 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, - 70, 70, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 264, 264, 264, - 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, - 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, - 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, - 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, - 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, - 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, - 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, - 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, - 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 0, 0, + 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 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, 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, 0, }; /* decomposition data */ @@ -2591,552 +2721,555 @@ 69, 262, 70, 262, 77, 262, 111, 258, 1488, 258, 1489, 258, 1490, 258, 1491, 262, 105, 770, 70, 65, 88, 262, 960, 262, 947, 262, 915, 262, 928, 262, 8721, 262, 68, 262, 100, 262, 101, 262, 105, 262, 106, 772, 49, - 8260, 51, 772, 50, 8260, 51, 772, 49, 8260, 53, 772, 50, 8260, 53, 772, - 51, 8260, 53, 772, 52, 8260, 53, 772, 49, 8260, 54, 772, 53, 8260, 54, - 772, 49, 8260, 56, 772, 51, 8260, 56, 772, 53, 8260, 56, 772, 55, 8260, - 56, 516, 49, 8260, 258, 73, 514, 73, 73, 770, 73, 73, 73, 514, 73, 86, - 258, 86, 514, 86, 73, 770, 86, 73, 73, 1026, 86, 73, 73, 73, 514, 73, 88, - 258, 88, 514, 88, 73, 770, 88, 73, 73, 258, 76, 258, 67, 258, 68, 258, - 77, 258, 105, 514, 105, 105, 770, 105, 105, 105, 514, 105, 118, 258, 118, - 514, 118, 105, 770, 118, 105, 105, 1026, 118, 105, 105, 105, 514, 105, - 120, 258, 120, 514, 120, 105, 770, 120, 105, 105, 258, 108, 258, 99, 258, - 100, 258, 109, 512, 8592, 824, 512, 8594, 824, 512, 8596, 824, 512, 8656, - 824, 512, 8660, 824, 512, 8658, 824, 512, 8707, 824, 512, 8712, 824, 512, - 8715, 824, 512, 8739, 824, 512, 8741, 824, 514, 8747, 8747, 770, 8747, - 8747, 8747, 514, 8750, 8750, 770, 8750, 8750, 8750, 512, 8764, 824, 512, - 8771, 824, 512, 8773, 824, 512, 8776, 824, 512, 61, 824, 512, 8801, 824, - 512, 8781, 824, 512, 60, 824, 512, 62, 824, 512, 8804, 824, 512, 8805, - 824, 512, 8818, 824, 512, 8819, 824, 512, 8822, 824, 512, 8823, 824, 512, - 8826, 824, 512, 8827, 824, 512, 8834, 824, 512, 8835, 824, 512, 8838, - 824, 512, 8839, 824, 512, 8866, 824, 512, 8872, 824, 512, 8873, 824, 512, - 8875, 824, 512, 8828, 824, 512, 8829, 824, 512, 8849, 824, 512, 8850, - 824, 512, 8882, 824, 512, 8883, 824, 512, 8884, 824, 512, 8885, 824, 256, - 12296, 256, 12297, 263, 49, 263, 50, 263, 51, 263, 52, 263, 53, 263, 54, - 263, 55, 263, 56, 263, 57, 519, 49, 48, 519, 49, 49, 519, 49, 50, 519, - 49, 51, 519, 49, 52, 519, 49, 53, 519, 49, 54, 519, 49, 55, 519, 49, 56, - 519, 49, 57, 519, 50, 48, 770, 40, 49, 41, 770, 40, 50, 41, 770, 40, 51, - 41, 770, 40, 52, 41, 770, 40, 53, 41, 770, 40, 54, 41, 770, 40, 55, 41, - 770, 40, 56, 41, 770, 40, 57, 41, 1026, 40, 49, 48, 41, 1026, 40, 49, 49, - 41, 1026, 40, 49, 50, 41, 1026, 40, 49, 51, 41, 1026, 40, 49, 52, 41, - 1026, 40, 49, 53, 41, 1026, 40, 49, 54, 41, 1026, 40, 49, 55, 41, 1026, - 40, 49, 56, 41, 1026, 40, 49, 57, 41, 1026, 40, 50, 48, 41, 514, 49, 46, - 514, 50, 46, 514, 51, 46, 514, 52, 46, 514, 53, 46, 514, 54, 46, 514, 55, - 46, 514, 56, 46, 514, 57, 46, 770, 49, 48, 46, 770, 49, 49, 46, 770, 49, - 50, 46, 770, 49, 51, 46, 770, 49, 52, 46, 770, 49, 53, 46, 770, 49, 54, - 46, 770, 49, 55, 46, 770, 49, 56, 46, 770, 49, 57, 46, 770, 50, 48, 46, - 770, 40, 97, 41, 770, 40, 98, 41, 770, 40, 99, 41, 770, 40, 100, 41, 770, - 40, 101, 41, 770, 40, 102, 41, 770, 40, 103, 41, 770, 40, 104, 41, 770, - 40, 105, 41, 770, 40, 106, 41, 770, 40, 107, 41, 770, 40, 108, 41, 770, - 40, 109, 41, 770, 40, 110, 41, 770, 40, 111, 41, 770, 40, 112, 41, 770, - 40, 113, 41, 770, 40, 114, 41, 770, 40, 115, 41, 770, 40, 116, 41, 770, - 40, 117, 41, 770, 40, 118, 41, 770, 40, 119, 41, 770, 40, 120, 41, 770, - 40, 121, 41, 770, 40, 122, 41, 263, 65, 263, 66, 263, 67, 263, 68, 263, - 69, 263, 70, 263, 71, 263, 72, 263, 73, 263, 74, 263, 75, 263, 76, 263, - 77, 263, 78, 263, 79, 263, 80, 263, 81, 263, 82, 263, 83, 263, 84, 263, - 85, 263, 86, 263, 87, 263, 88, 263, 89, 263, 90, 263, 97, 263, 98, 263, - 99, 263, 100, 263, 101, 263, 102, 263, 103, 263, 104, 263, 105, 263, 106, - 263, 107, 263, 108, 263, 109, 263, 110, 263, 111, 263, 112, 263, 113, - 263, 114, 263, 115, 263, 116, 263, 117, 263, 118, 263, 119, 263, 120, - 263, 121, 263, 122, 263, 48, 1026, 8747, 8747, 8747, 8747, 770, 58, 58, - 61, 514, 61, 61, 770, 61, 61, 61, 512, 10973, 824, 261, 106, 259, 86, - 259, 11617, 258, 27597, 258, 40863, 258, 19968, 258, 20008, 258, 20022, - 258, 20031, 258, 20057, 258, 20101, 258, 20108, 258, 20128, 258, 20154, - 258, 20799, 258, 20837, 258, 20843, 258, 20866, 258, 20886, 258, 20907, - 258, 20960, 258, 20981, 258, 20992, 258, 21147, 258, 21241, 258, 21269, - 258, 21274, 258, 21304, 258, 21313, 258, 21340, 258, 21353, 258, 21378, - 258, 21430, 258, 21448, 258, 21475, 258, 22231, 258, 22303, 258, 22763, - 258, 22786, 258, 22794, 258, 22805, 258, 22823, 258, 22899, 258, 23376, - 258, 23424, 258, 23544, 258, 23567, 258, 23586, 258, 23608, 258, 23662, - 258, 23665, 258, 24027, 258, 24037, 258, 24049, 258, 24062, 258, 24178, - 258, 24186, 258, 24191, 258, 24308, 258, 24318, 258, 24331, 258, 24339, - 258, 24400, 258, 24417, 258, 24435, 258, 24515, 258, 25096, 258, 25142, - 258, 25163, 258, 25903, 258, 25908, 258, 25991, 258, 26007, 258, 26020, - 258, 26041, 258, 26080, 258, 26085, 258, 26352, 258, 26376, 258, 26408, - 258, 27424, 258, 27490, 258, 27513, 258, 27571, 258, 27595, 258, 27604, - 258, 27611, 258, 27663, 258, 27668, 258, 27700, 258, 28779, 258, 29226, - 258, 29238, 258, 29243, 258, 29247, 258, 29255, 258, 29273, 258, 29275, - 258, 29356, 258, 29572, 258, 29577, 258, 29916, 258, 29926, 258, 29976, - 258, 29983, 258, 29992, 258, 30000, 258, 30091, 258, 30098, 258, 30326, - 258, 30333, 258, 30382, 258, 30399, 258, 30446, 258, 30683, 258, 30690, - 258, 30707, 258, 31034, 258, 31160, 258, 31166, 258, 31348, 258, 31435, - 258, 31481, 258, 31859, 258, 31992, 258, 32566, 258, 32593, 258, 32650, - 258, 32701, 258, 32769, 258, 32780, 258, 32786, 258, 32819, 258, 32895, - 258, 32905, 258, 33251, 258, 33258, 258, 33267, 258, 33276, 258, 33292, - 258, 33307, 258, 33311, 258, 33390, 258, 33394, 258, 33400, 258, 34381, - 258, 34411, 258, 34880, 258, 34892, 258, 34915, 258, 35198, 258, 35211, - 258, 35282, 258, 35328, 258, 35895, 258, 35910, 258, 35925, 258, 35960, - 258, 35997, 258, 36196, 258, 36208, 258, 36275, 258, 36523, 258, 36554, - 258, 36763, 258, 36784, 258, 36789, 258, 37009, 258, 37193, 258, 37318, - 258, 37324, 258, 37329, 258, 38263, 258, 38272, 258, 38428, 258, 38582, - 258, 38585, 258, 38632, 258, 38737, 258, 38750, 258, 38754, 258, 38761, - 258, 38859, 258, 38893, 258, 38899, 258, 38913, 258, 39080, 258, 39131, - 258, 39135, 258, 39318, 258, 39321, 258, 39340, 258, 39592, 258, 39640, - 258, 39647, 258, 39717, 258, 39727, 258, 39730, 258, 39740, 258, 39770, - 258, 40165, 258, 40565, 258, 40575, 258, 40613, 258, 40635, 258, 40643, - 258, 40653, 258, 40657, 258, 40697, 258, 40701, 258, 40718, 258, 40723, - 258, 40736, 258, 40763, 258, 40778, 258, 40786, 258, 40845, 258, 40860, - 258, 40864, 264, 32, 258, 12306, 258, 21313, 258, 21316, 258, 21317, 512, - 12363, 12441, 512, 12365, 12441, 512, 12367, 12441, 512, 12369, 12441, - 512, 12371, 12441, 512, 12373, 12441, 512, 12375, 12441, 512, 12377, - 12441, 512, 12379, 12441, 512, 12381, 12441, 512, 12383, 12441, 512, - 12385, 12441, 512, 12388, 12441, 512, 12390, 12441, 512, 12392, 12441, - 512, 12399, 12441, 512, 12399, 12442, 512, 12402, 12441, 512, 12402, - 12442, 512, 12405, 12441, 512, 12405, 12442, 512, 12408, 12441, 512, - 12408, 12442, 512, 12411, 12441, 512, 12411, 12442, 512, 12358, 12441, - 514, 32, 12441, 514, 32, 12442, 512, 12445, 12441, 521, 12424, 12426, - 512, 12459, 12441, 512, 12461, 12441, 512, 12463, 12441, 512, 12465, - 12441, 512, 12467, 12441, 512, 12469, 12441, 512, 12471, 12441, 512, - 12473, 12441, 512, 12475, 12441, 512, 12477, 12441, 512, 12479, 12441, - 512, 12481, 12441, 512, 12484, 12441, 512, 12486, 12441, 512, 12488, - 12441, 512, 12495, 12441, 512, 12495, 12442, 512, 12498, 12441, 512, - 12498, 12442, 512, 12501, 12441, 512, 12501, 12442, 512, 12504, 12441, - 512, 12504, 12442, 512, 12507, 12441, 512, 12507, 12442, 512, 12454, - 12441, 512, 12527, 12441, 512, 12528, 12441, 512, 12529, 12441, 512, - 12530, 12441, 512, 12541, 12441, 521, 12467, 12488, 258, 4352, 258, 4353, - 258, 4522, 258, 4354, 258, 4524, 258, 4525, 258, 4355, 258, 4356, 258, - 4357, 258, 4528, 258, 4529, 258, 4530, 258, 4531, 258, 4532, 258, 4533, - 258, 4378, 258, 4358, 258, 4359, 258, 4360, 258, 4385, 258, 4361, 258, - 4362, 258, 4363, 258, 4364, 258, 4365, 258, 4366, 258, 4367, 258, 4368, - 258, 4369, 258, 4370, 258, 4449, 258, 4450, 258, 4451, 258, 4452, 258, - 4453, 258, 4454, 258, 4455, 258, 4456, 258, 4457, 258, 4458, 258, 4459, - 258, 4460, 258, 4461, 258, 4462, 258, 4463, 258, 4464, 258, 4465, 258, - 4466, 258, 4467, 258, 4468, 258, 4469, 258, 4448, 258, 4372, 258, 4373, - 258, 4551, 258, 4552, 258, 4556, 258, 4558, 258, 4563, 258, 4567, 258, - 4569, 258, 4380, 258, 4573, 258, 4575, 258, 4381, 258, 4382, 258, 4384, - 258, 4386, 258, 4387, 258, 4391, 258, 4393, 258, 4395, 258, 4396, 258, - 4397, 258, 4398, 258, 4399, 258, 4402, 258, 4406, 258, 4416, 258, 4423, - 258, 4428, 258, 4593, 258, 4594, 258, 4439, 258, 4440, 258, 4441, 258, - 4484, 258, 4485, 258, 4488, 258, 4497, 258, 4498, 258, 4500, 258, 4510, - 258, 4513, 259, 19968, 259, 20108, 259, 19977, 259, 22235, 259, 19978, - 259, 20013, 259, 19979, 259, 30002, 259, 20057, 259, 19993, 259, 19969, - 259, 22825, 259, 22320, 259, 20154, 770, 40, 4352, 41, 770, 40, 4354, 41, - 770, 40, 4355, 41, 770, 40, 4357, 41, 770, 40, 4358, 41, 770, 40, 4359, - 41, 770, 40, 4361, 41, 770, 40, 4363, 41, 770, 40, 4364, 41, 770, 40, - 4366, 41, 770, 40, 4367, 41, 770, 40, 4368, 41, 770, 40, 4369, 41, 770, - 40, 4370, 41, 1026, 40, 4352, 4449, 41, 1026, 40, 4354, 4449, 41, 1026, - 40, 4355, 4449, 41, 1026, 40, 4357, 4449, 41, 1026, 40, 4358, 4449, 41, - 1026, 40, 4359, 4449, 41, 1026, 40, 4361, 4449, 41, 1026, 40, 4363, 4449, - 41, 1026, 40, 4364, 4449, 41, 1026, 40, 4366, 4449, 41, 1026, 40, 4367, - 4449, 41, 1026, 40, 4368, 4449, 41, 1026, 40, 4369, 4449, 41, 1026, 40, - 4370, 4449, 41, 1026, 40, 4364, 4462, 41, 1794, 40, 4363, 4457, 4364, - 4453, 4523, 41, 1538, 40, 4363, 4457, 4370, 4462, 41, 770, 40, 19968, 41, - 770, 40, 20108, 41, 770, 40, 19977, 41, 770, 40, 22235, 41, 770, 40, - 20116, 41, 770, 40, 20845, 41, 770, 40, 19971, 41, 770, 40, 20843, 41, - 770, 40, 20061, 41, 770, 40, 21313, 41, 770, 40, 26376, 41, 770, 40, - 28779, 41, 770, 40, 27700, 41, 770, 40, 26408, 41, 770, 40, 37329, 41, - 770, 40, 22303, 41, 770, 40, 26085, 41, 770, 40, 26666, 41, 770, 40, - 26377, 41, 770, 40, 31038, 41, 770, 40, 21517, 41, 770, 40, 29305, 41, - 770, 40, 36001, 41, 770, 40, 31069, 41, 770, 40, 21172, 41, 770, 40, - 20195, 41, 770, 40, 21628, 41, 770, 40, 23398, 41, 770, 40, 30435, 41, - 770, 40, 20225, 41, 770, 40, 36039, 41, 770, 40, 21332, 41, 770, 40, - 31085, 41, 770, 40, 20241, 41, 770, 40, 33258, 41, 770, 40, 33267, 41, - 778, 80, 84, 69, 519, 50, 49, 519, 50, 50, 519, 50, 51, 519, 50, 52, 519, - 50, 53, 519, 50, 54, 519, 50, 55, 519, 50, 56, 519, 50, 57, 519, 51, 48, - 519, 51, 49, 519, 51, 50, 519, 51, 51, 519, 51, 52, 519, 51, 53, 263, - 4352, 263, 4354, 263, 4355, 263, 4357, 263, 4358, 263, 4359, 263, 4361, - 263, 4363, 263, 4364, 263, 4366, 263, 4367, 263, 4368, 263, 4369, 263, - 4370, 519, 4352, 4449, 519, 4354, 4449, 519, 4355, 4449, 519, 4357, 4449, - 519, 4358, 4449, 519, 4359, 4449, 519, 4361, 4449, 519, 4363, 4449, 519, - 4364, 4449, 519, 4366, 4449, 519, 4367, 4449, 519, 4368, 4449, 519, 4369, - 4449, 519, 4370, 4449, 1287, 4366, 4449, 4535, 4352, 4457, 1031, 4364, - 4462, 4363, 4468, 519, 4363, 4462, 263, 19968, 263, 20108, 263, 19977, - 263, 22235, 263, 20116, 263, 20845, 263, 19971, 263, 20843, 263, 20061, - 263, 21313, 263, 26376, 263, 28779, 263, 27700, 263, 26408, 263, 37329, - 263, 22303, 263, 26085, 263, 26666, 263, 26377, 263, 31038, 263, 21517, - 263, 29305, 263, 36001, 263, 31069, 263, 21172, 263, 31192, 263, 30007, - 263, 22899, 263, 36969, 263, 20778, 263, 21360, 263, 27880, 263, 38917, - 263, 20241, 263, 20889, 263, 27491, 263, 19978, 263, 20013, 263, 19979, - 263, 24038, 263, 21491, 263, 21307, 263, 23447, 263, 23398, 263, 30435, - 263, 20225, 263, 36039, 263, 21332, 263, 22812, 519, 51, 54, 519, 51, 55, - 519, 51, 56, 519, 51, 57, 519, 52, 48, 519, 52, 49, 519, 52, 50, 519, 52, - 51, 519, 52, 52, 519, 52, 53, 519, 52, 54, 519, 52, 55, 519, 52, 56, 519, - 52, 57, 519, 53, 48, 514, 49, 26376, 514, 50, 26376, 514, 51, 26376, 514, - 52, 26376, 514, 53, 26376, 514, 54, 26376, 514, 55, 26376, 514, 56, - 26376, 514, 57, 26376, 770, 49, 48, 26376, 770, 49, 49, 26376, 770, 49, - 50, 26376, 522, 72, 103, 778, 101, 114, 103, 522, 101, 86, 778, 76, 84, - 68, 263, 12450, 263, 12452, 263, 12454, 263, 12456, 263, 12458, 263, - 12459, 263, 12461, 263, 12463, 263, 12465, 263, 12467, 263, 12469, 263, - 12471, 263, 12473, 263, 12475, 263, 12477, 263, 12479, 263, 12481, 263, - 12484, 263, 12486, 263, 12488, 263, 12490, 263, 12491, 263, 12492, 263, - 12493, 263, 12494, 263, 12495, 263, 12498, 263, 12501, 263, 12504, 263, - 12507, 263, 12510, 263, 12511, 263, 12512, 263, 12513, 263, 12514, 263, - 12516, 263, 12518, 263, 12520, 263, 12521, 263, 12522, 263, 12523, 263, - 12524, 263, 12525, 263, 12527, 263, 12528, 263, 12529, 263, 12530, 1034, - 12450, 12497, 12540, 12488, 1034, 12450, 12523, 12501, 12449, 1034, - 12450, 12531, 12506, 12450, 778, 12450, 12540, 12523, 1034, 12452, 12491, - 12531, 12464, 778, 12452, 12531, 12481, 778, 12454, 12457, 12531, 1290, - 12456, 12473, 12463, 12540, 12489, 1034, 12456, 12540, 12459, 12540, 778, - 12458, 12531, 12473, 778, 12458, 12540, 12512, 778, 12459, 12452, 12522, - 1034, 12459, 12521, 12483, 12488, 1034, 12459, 12525, 12522, 12540, 778, - 12460, 12525, 12531, 778, 12460, 12531, 12510, 522, 12462, 12460, 778, - 12462, 12491, 12540, 1034, 12461, 12517, 12522, 12540, 1034, 12462, - 12523, 12480, 12540, 522, 12461, 12525, 1290, 12461, 12525, 12464, 12521, - 12512, 1546, 12461, 12525, 12513, 12540, 12488, 12523, 1290, 12461, - 12525, 12527, 12483, 12488, 778, 12464, 12521, 12512, 1290, 12464, 12521, - 12512, 12488, 12531, 1290, 12463, 12523, 12476, 12452, 12525, 1034, - 12463, 12525, 12540, 12493, 778, 12465, 12540, 12473, 778, 12467, 12523, - 12490, 778, 12467, 12540, 12509, 1034, 12469, 12452, 12463, 12523, 1290, - 12469, 12531, 12481, 12540, 12512, 1034, 12471, 12522, 12531, 12464, 778, - 12475, 12531, 12481, 778, 12475, 12531, 12488, 778, 12480, 12540, 12473, - 522, 12487, 12471, 522, 12489, 12523, 522, 12488, 12531, 522, 12490, - 12494, 778, 12494, 12483, 12488, 778, 12495, 12452, 12484, 1290, 12497, - 12540, 12475, 12531, 12488, 778, 12497, 12540, 12484, 1034, 12496, 12540, - 12524, 12523, 1290, 12500, 12450, 12473, 12488, 12523, 778, 12500, 12463, - 12523, 522, 12500, 12467, 522, 12499, 12523, 1290, 12501, 12449, 12521, - 12483, 12489, 1034, 12501, 12451, 12540, 12488, 1290, 12502, 12483, - 12471, 12455, 12523, 778, 12501, 12521, 12531, 1290, 12504, 12463, 12479, - 12540, 12523, 522, 12506, 12477, 778, 12506, 12491, 12498, 778, 12504, - 12523, 12484, 778, 12506, 12531, 12473, 778, 12506, 12540, 12472, 778, - 12505, 12540, 12479, 1034, 12509, 12452, 12531, 12488, 778, 12508, 12523, - 12488, 522, 12507, 12531, 778, 12509, 12531, 12489, 778, 12507, 12540, - 12523, 778, 12507, 12540, 12531, 1034, 12510, 12452, 12463, 12525, 778, - 12510, 12452, 12523, 778, 12510, 12483, 12495, 778, 12510, 12523, 12463, - 1290, 12510, 12531, 12471, 12519, 12531, 1034, 12511, 12463, 12525, - 12531, 522, 12511, 12522, 1290, 12511, 12522, 12496, 12540, 12523, 522, - 12513, 12460, 1034, 12513, 12460, 12488, 12531, 1034, 12513, 12540, - 12488, 12523, 778, 12516, 12540, 12489, 778, 12516, 12540, 12523, 778, - 12518, 12450, 12531, 1034, 12522, 12483, 12488, 12523, 522, 12522, 12521, - 778, 12523, 12500, 12540, 1034, 12523, 12540, 12502, 12523, 522, 12524, - 12512, 1290, 12524, 12531, 12488, 12466, 12531, 778, 12527, 12483, 12488, - 514, 48, 28857, 514, 49, 28857, 514, 50, 28857, 514, 51, 28857, 514, 52, - 28857, 514, 53, 28857, 514, 54, 28857, 514, 55, 28857, 514, 56, 28857, - 514, 57, 28857, 770, 49, 48, 28857, 770, 49, 49, 28857, 770, 49, 50, - 28857, 770, 49, 51, 28857, 770, 49, 52, 28857, 770, 49, 53, 28857, 770, - 49, 54, 28857, 770, 49, 55, 28857, 770, 49, 56, 28857, 770, 49, 57, - 28857, 770, 50, 48, 28857, 770, 50, 49, 28857, 770, 50, 50, 28857, 770, - 50, 51, 28857, 770, 50, 52, 28857, 778, 104, 80, 97, 522, 100, 97, 522, - 65, 85, 778, 98, 97, 114, 522, 111, 86, 522, 112, 99, 522, 100, 109, 778, - 100, 109, 178, 778, 100, 109, 179, 522, 73, 85, 522, 24179, 25104, 522, - 26157, 21644, 522, 22823, 27491, 522, 26126, 27835, 1034, 26666, 24335, - 20250, 31038, 522, 112, 65, 522, 110, 65, 522, 956, 65, 522, 109, 65, - 522, 107, 65, 522, 75, 66, 522, 77, 66, 522, 71, 66, 778, 99, 97, 108, - 1034, 107, 99, 97, 108, 522, 112, 70, 522, 110, 70, 522, 956, 70, 522, - 956, 103, 522, 109, 103, 522, 107, 103, 522, 72, 122, 778, 107, 72, 122, - 778, 77, 72, 122, 778, 71, 72, 122, 778, 84, 72, 122, 522, 956, 8467, - 522, 109, 8467, 522, 100, 8467, 522, 107, 8467, 522, 102, 109, 522, 110, - 109, 522, 956, 109, 522, 109, 109, 522, 99, 109, 522, 107, 109, 778, 109, - 109, 178, 778, 99, 109, 178, 522, 109, 178, 778, 107, 109, 178, 778, 109, - 109, 179, 778, 99, 109, 179, 522, 109, 179, 778, 107, 109, 179, 778, 109, - 8725, 115, 1034, 109, 8725, 115, 178, 522, 80, 97, 778, 107, 80, 97, 778, - 77, 80, 97, 778, 71, 80, 97, 778, 114, 97, 100, 1290, 114, 97, 100, 8725, - 115, 1546, 114, 97, 100, 8725, 115, 178, 522, 112, 115, 522, 110, 115, - 522, 956, 115, 522, 109, 115, 522, 112, 86, 522, 110, 86, 522, 956, 86, - 522, 109, 86, 522, 107, 86, 522, 77, 86, 522, 112, 87, 522, 110, 87, 522, - 956, 87, 522, 109, 87, 522, 107, 87, 522, 77, 87, 522, 107, 937, 522, 77, - 937, 1034, 97, 46, 109, 46, 522, 66, 113, 522, 99, 99, 522, 99, 100, - 1034, 67, 8725, 107, 103, 778, 67, 111, 46, 522, 100, 66, 522, 71, 121, - 522, 104, 97, 522, 72, 80, 522, 105, 110, 522, 75, 75, 522, 75, 77, 522, - 107, 116, 522, 108, 109, 522, 108, 110, 778, 108, 111, 103, 522, 108, - 120, 522, 109, 98, 778, 109, 105, 108, 778, 109, 111, 108, 522, 80, 72, - 1034, 112, 46, 109, 46, 778, 80, 80, 77, 522, 80, 82, 522, 115, 114, 522, - 83, 118, 522, 87, 98, 778, 86, 8725, 109, 778, 65, 8725, 109, 514, 49, - 26085, 514, 50, 26085, 514, 51, 26085, 514, 52, 26085, 514, 53, 26085, - 514, 54, 26085, 514, 55, 26085, 514, 56, 26085, 514, 57, 26085, 770, 49, - 48, 26085, 770, 49, 49, 26085, 770, 49, 50, 26085, 770, 49, 51, 26085, - 770, 49, 52, 26085, 770, 49, 53, 26085, 770, 49, 54, 26085, 770, 49, 55, - 26085, 770, 49, 56, 26085, 770, 49, 57, 26085, 770, 50, 48, 26085, 770, - 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, 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, 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, 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, 119127, 119141, 512, 119128, 119141, 512, 119135, + 8260, 55, 772, 49, 8260, 57, 1028, 49, 8260, 49, 48, 772, 49, 8260, 51, + 772, 50, 8260, 51, 772, 49, 8260, 53, 772, 50, 8260, 53, 772, 51, 8260, + 53, 772, 52, 8260, 53, 772, 49, 8260, 54, 772, 53, 8260, 54, 772, 49, + 8260, 56, 772, 51, 8260, 56, 772, 53, 8260, 56, 772, 55, 8260, 56, 516, + 49, 8260, 258, 73, 514, 73, 73, 770, 73, 73, 73, 514, 73, 86, 258, 86, + 514, 86, 73, 770, 86, 73, 73, 1026, 86, 73, 73, 73, 514, 73, 88, 258, 88, + 514, 88, 73, 770, 88, 73, 73, 258, 76, 258, 67, 258, 68, 258, 77, 258, + 105, 514, 105, 105, 770, 105, 105, 105, 514, 105, 118, 258, 118, 514, + 118, 105, 770, 118, 105, 105, 1026, 118, 105, 105, 105, 514, 105, 120, + 258, 120, 514, 120, 105, 770, 120, 105, 105, 258, 108, 258, 99, 258, 100, + 258, 109, 772, 48, 8260, 51, 512, 8592, 824, 512, 8594, 824, 512, 8596, + 824, 512, 8656, 824, 512, 8660, 824, 512, 8658, 824, 512, 8707, 824, 512, + 8712, 824, 512, 8715, 824, 512, 8739, 824, 512, 8741, 824, 514, 8747, + 8747, 770, 8747, 8747, 8747, 514, 8750, 8750, 770, 8750, 8750, 8750, 512, + 8764, 824, 512, 8771, 824, 512, 8773, 824, 512, 8776, 824, 512, 61, 824, + 512, 8801, 824, 512, 8781, 824, 512, 60, 824, 512, 62, 824, 512, 8804, + 824, 512, 8805, 824, 512, 8818, 824, 512, 8819, 824, 512, 8822, 824, 512, + 8823, 824, 512, 8826, 824, 512, 8827, 824, 512, 8834, 824, 512, 8835, + 824, 512, 8838, 824, 512, 8839, 824, 512, 8866, 824, 512, 8872, 824, 512, + 8873, 824, 512, 8875, 824, 512, 8828, 824, 512, 8829, 824, 512, 8849, + 824, 512, 8850, 824, 512, 8882, 824, 512, 8883, 824, 512, 8884, 824, 512, + 8885, 824, 256, 12296, 256, 12297, 263, 49, 263, 50, 263, 51, 263, 52, + 263, 53, 263, 54, 263, 55, 263, 56, 263, 57, 519, 49, 48, 519, 49, 49, + 519, 49, 50, 519, 49, 51, 519, 49, 52, 519, 49, 53, 519, 49, 54, 519, 49, + 55, 519, 49, 56, 519, 49, 57, 519, 50, 48, 770, 40, 49, 41, 770, 40, 50, + 41, 770, 40, 51, 41, 770, 40, 52, 41, 770, 40, 53, 41, 770, 40, 54, 41, + 770, 40, 55, 41, 770, 40, 56, 41, 770, 40, 57, 41, 1026, 40, 49, 48, 41, + 1026, 40, 49, 49, 41, 1026, 40, 49, 50, 41, 1026, 40, 49, 51, 41, 1026, + 40, 49, 52, 41, 1026, 40, 49, 53, 41, 1026, 40, 49, 54, 41, 1026, 40, 49, + 55, 41, 1026, 40, 49, 56, 41, 1026, 40, 49, 57, 41, 1026, 40, 50, 48, 41, + 514, 49, 46, 514, 50, 46, 514, 51, 46, 514, 52, 46, 514, 53, 46, 514, 54, + 46, 514, 55, 46, 514, 56, 46, 514, 57, 46, 770, 49, 48, 46, 770, 49, 49, + 46, 770, 49, 50, 46, 770, 49, 51, 46, 770, 49, 52, 46, 770, 49, 53, 46, + 770, 49, 54, 46, 770, 49, 55, 46, 770, 49, 56, 46, 770, 49, 57, 46, 770, + 50, 48, 46, 770, 40, 97, 41, 770, 40, 98, 41, 770, 40, 99, 41, 770, 40, + 100, 41, 770, 40, 101, 41, 770, 40, 102, 41, 770, 40, 103, 41, 770, 40, + 104, 41, 770, 40, 105, 41, 770, 40, 106, 41, 770, 40, 107, 41, 770, 40, + 108, 41, 770, 40, 109, 41, 770, 40, 110, 41, 770, 40, 111, 41, 770, 40, + 112, 41, 770, 40, 113, 41, 770, 40, 114, 41, 770, 40, 115, 41, 770, 40, + 116, 41, 770, 40, 117, 41, 770, 40, 118, 41, 770, 40, 119, 41, 770, 40, + 120, 41, 770, 40, 121, 41, 770, 40, 122, 41, 263, 65, 263, 66, 263, 67, + 263, 68, 263, 69, 263, 70, 263, 71, 263, 72, 263, 73, 263, 74, 263, 75, + 263, 76, 263, 77, 263, 78, 263, 79, 263, 80, 263, 81, 263, 82, 263, 83, + 263, 84, 263, 85, 263, 86, 263, 87, 263, 88, 263, 89, 263, 90, 263, 97, + 263, 98, 263, 99, 263, 100, 263, 101, 263, 102, 263, 103, 263, 104, 263, + 105, 263, 106, 263, 107, 263, 108, 263, 109, 263, 110, 263, 111, 263, + 112, 263, 113, 263, 114, 263, 115, 263, 116, 263, 117, 263, 118, 263, + 119, 263, 120, 263, 121, 263, 122, 263, 48, 1026, 8747, 8747, 8747, 8747, + 770, 58, 58, 61, 514, 61, 61, 770, 61, 61, 61, 512, 10973, 824, 261, 106, + 259, 86, 259, 11617, 258, 27597, 258, 40863, 258, 19968, 258, 20008, 258, + 20022, 258, 20031, 258, 20057, 258, 20101, 258, 20108, 258, 20128, 258, + 20154, 258, 20799, 258, 20837, 258, 20843, 258, 20866, 258, 20886, 258, + 20907, 258, 20960, 258, 20981, 258, 20992, 258, 21147, 258, 21241, 258, + 21269, 258, 21274, 258, 21304, 258, 21313, 258, 21340, 258, 21353, 258, + 21378, 258, 21430, 258, 21448, 258, 21475, 258, 22231, 258, 22303, 258, + 22763, 258, 22786, 258, 22794, 258, 22805, 258, 22823, 258, 22899, 258, + 23376, 258, 23424, 258, 23544, 258, 23567, 258, 23586, 258, 23608, 258, + 23662, 258, 23665, 258, 24027, 258, 24037, 258, 24049, 258, 24062, 258, + 24178, 258, 24186, 258, 24191, 258, 24308, 258, 24318, 258, 24331, 258, + 24339, 258, 24400, 258, 24417, 258, 24435, 258, 24515, 258, 25096, 258, + 25142, 258, 25163, 258, 25903, 258, 25908, 258, 25991, 258, 26007, 258, + 26020, 258, 26041, 258, 26080, 258, 26085, 258, 26352, 258, 26376, 258, + 26408, 258, 27424, 258, 27490, 258, 27513, 258, 27571, 258, 27595, 258, + 27604, 258, 27611, 258, 27663, 258, 27668, 258, 27700, 258, 28779, 258, + 29226, 258, 29238, 258, 29243, 258, 29247, 258, 29255, 258, 29273, 258, + 29275, 258, 29356, 258, 29572, 258, 29577, 258, 29916, 258, 29926, 258, + 29976, 258, 29983, 258, 29992, 258, 30000, 258, 30091, 258, 30098, 258, + 30326, 258, 30333, 258, 30382, 258, 30399, 258, 30446, 258, 30683, 258, + 30690, 258, 30707, 258, 31034, 258, 31160, 258, 31166, 258, 31348, 258, + 31435, 258, 31481, 258, 31859, 258, 31992, 258, 32566, 258, 32593, 258, + 32650, 258, 32701, 258, 32769, 258, 32780, 258, 32786, 258, 32819, 258, + 32895, 258, 32905, 258, 33251, 258, 33258, 258, 33267, 258, 33276, 258, + 33292, 258, 33307, 258, 33311, 258, 33390, 258, 33394, 258, 33400, 258, + 34381, 258, 34411, 258, 34880, 258, 34892, 258, 34915, 258, 35198, 258, + 35211, 258, 35282, 258, 35328, 258, 35895, 258, 35910, 258, 35925, 258, + 35960, 258, 35997, 258, 36196, 258, 36208, 258, 36275, 258, 36523, 258, + 36554, 258, 36763, 258, 36784, 258, 36789, 258, 37009, 258, 37193, 258, + 37318, 258, 37324, 258, 37329, 258, 38263, 258, 38272, 258, 38428, 258, + 38582, 258, 38585, 258, 38632, 258, 38737, 258, 38750, 258, 38754, 258, + 38761, 258, 38859, 258, 38893, 258, 38899, 258, 38913, 258, 39080, 258, + 39131, 258, 39135, 258, 39318, 258, 39321, 258, 39340, 258, 39592, 258, + 39640, 258, 39647, 258, 39717, 258, 39727, 258, 39730, 258, 39740, 258, + 39770, 258, 40165, 258, 40565, 258, 40575, 258, 40613, 258, 40635, 258, + 40643, 258, 40653, 258, 40657, 258, 40697, 258, 40701, 258, 40718, 258, + 40723, 258, 40736, 258, 40763, 258, 40778, 258, 40786, 258, 40845, 258, + 40860, 258, 40864, 264, 32, 258, 12306, 258, 21313, 258, 21316, 258, + 21317, 512, 12363, 12441, 512, 12365, 12441, 512, 12367, 12441, 512, + 12369, 12441, 512, 12371, 12441, 512, 12373, 12441, 512, 12375, 12441, + 512, 12377, 12441, 512, 12379, 12441, 512, 12381, 12441, 512, 12383, + 12441, 512, 12385, 12441, 512, 12388, 12441, 512, 12390, 12441, 512, + 12392, 12441, 512, 12399, 12441, 512, 12399, 12442, 512, 12402, 12441, + 512, 12402, 12442, 512, 12405, 12441, 512, 12405, 12442, 512, 12408, + 12441, 512, 12408, 12442, 512, 12411, 12441, 512, 12411, 12442, 512, + 12358, 12441, 514, 32, 12441, 514, 32, 12442, 512, 12445, 12441, 521, + 12424, 12426, 512, 12459, 12441, 512, 12461, 12441, 512, 12463, 12441, + 512, 12465, 12441, 512, 12467, 12441, 512, 12469, 12441, 512, 12471, + 12441, 512, 12473, 12441, 512, 12475, 12441, 512, 12477, 12441, 512, + 12479, 12441, 512, 12481, 12441, 512, 12484, 12441, 512, 12486, 12441, + 512, 12488, 12441, 512, 12495, 12441, 512, 12495, 12442, 512, 12498, + 12441, 512, 12498, 12442, 512, 12501, 12441, 512, 12501, 12442, 512, + 12504, 12441, 512, 12504, 12442, 512, 12507, 12441, 512, 12507, 12442, + 512, 12454, 12441, 512, 12527, 12441, 512, 12528, 12441, 512, 12529, + 12441, 512, 12530, 12441, 512, 12541, 12441, 521, 12467, 12488, 258, + 4352, 258, 4353, 258, 4522, 258, 4354, 258, 4524, 258, 4525, 258, 4355, + 258, 4356, 258, 4357, 258, 4528, 258, 4529, 258, 4530, 258, 4531, 258, + 4532, 258, 4533, 258, 4378, 258, 4358, 258, 4359, 258, 4360, 258, 4385, + 258, 4361, 258, 4362, 258, 4363, 258, 4364, 258, 4365, 258, 4366, 258, + 4367, 258, 4368, 258, 4369, 258, 4370, 258, 4449, 258, 4450, 258, 4451, + 258, 4452, 258, 4453, 258, 4454, 258, 4455, 258, 4456, 258, 4457, 258, + 4458, 258, 4459, 258, 4460, 258, 4461, 258, 4462, 258, 4463, 258, 4464, + 258, 4465, 258, 4466, 258, 4467, 258, 4468, 258, 4469, 258, 4448, 258, + 4372, 258, 4373, 258, 4551, 258, 4552, 258, 4556, 258, 4558, 258, 4563, + 258, 4567, 258, 4569, 258, 4380, 258, 4573, 258, 4575, 258, 4381, 258, + 4382, 258, 4384, 258, 4386, 258, 4387, 258, 4391, 258, 4393, 258, 4395, + 258, 4396, 258, 4397, 258, 4398, 258, 4399, 258, 4402, 258, 4406, 258, + 4416, 258, 4423, 258, 4428, 258, 4593, 258, 4594, 258, 4439, 258, 4440, + 258, 4441, 258, 4484, 258, 4485, 258, 4488, 258, 4497, 258, 4498, 258, + 4500, 258, 4510, 258, 4513, 259, 19968, 259, 20108, 259, 19977, 259, + 22235, 259, 19978, 259, 20013, 259, 19979, 259, 30002, 259, 20057, 259, + 19993, 259, 19969, 259, 22825, 259, 22320, 259, 20154, 770, 40, 4352, 41, + 770, 40, 4354, 41, 770, 40, 4355, 41, 770, 40, 4357, 41, 770, 40, 4358, + 41, 770, 40, 4359, 41, 770, 40, 4361, 41, 770, 40, 4363, 41, 770, 40, + 4364, 41, 770, 40, 4366, 41, 770, 40, 4367, 41, 770, 40, 4368, 41, 770, + 40, 4369, 41, 770, 40, 4370, 41, 1026, 40, 4352, 4449, 41, 1026, 40, + 4354, 4449, 41, 1026, 40, 4355, 4449, 41, 1026, 40, 4357, 4449, 41, 1026, + 40, 4358, 4449, 41, 1026, 40, 4359, 4449, 41, 1026, 40, 4361, 4449, 41, + 1026, 40, 4363, 4449, 41, 1026, 40, 4364, 4449, 41, 1026, 40, 4366, 4449, + 41, 1026, 40, 4367, 4449, 41, 1026, 40, 4368, 4449, 41, 1026, 40, 4369, + 4449, 41, 1026, 40, 4370, 4449, 41, 1026, 40, 4364, 4462, 41, 1794, 40, + 4363, 4457, 4364, 4453, 4523, 41, 1538, 40, 4363, 4457, 4370, 4462, 41, + 770, 40, 19968, 41, 770, 40, 20108, 41, 770, 40, 19977, 41, 770, 40, + 22235, 41, 770, 40, 20116, 41, 770, 40, 20845, 41, 770, 40, 19971, 41, + 770, 40, 20843, 41, 770, 40, 20061, 41, 770, 40, 21313, 41, 770, 40, + 26376, 41, 770, 40, 28779, 41, 770, 40, 27700, 41, 770, 40, 26408, 41, + 770, 40, 37329, 41, 770, 40, 22303, 41, 770, 40, 26085, 41, 770, 40, + 26666, 41, 770, 40, 26377, 41, 770, 40, 31038, 41, 770, 40, 21517, 41, + 770, 40, 29305, 41, 770, 40, 36001, 41, 770, 40, 31069, 41, 770, 40, + 21172, 41, 770, 40, 20195, 41, 770, 40, 21628, 41, 770, 40, 23398, 41, + 770, 40, 30435, 41, 770, 40, 20225, 41, 770, 40, 36039, 41, 770, 40, + 21332, 41, 770, 40, 31085, 41, 770, 40, 20241, 41, 770, 40, 33258, 41, + 770, 40, 33267, 41, 263, 21839, 263, 24188, 263, 25991, 263, 31631, 778, + 80, 84, 69, 519, 50, 49, 519, 50, 50, 519, 50, 51, 519, 50, 52, 519, 50, + 53, 519, 50, 54, 519, 50, 55, 519, 50, 56, 519, 50, 57, 519, 51, 48, 519, + 51, 49, 519, 51, 50, 519, 51, 51, 519, 51, 52, 519, 51, 53, 263, 4352, + 263, 4354, 263, 4355, 263, 4357, 263, 4358, 263, 4359, 263, 4361, 263, + 4363, 263, 4364, 263, 4366, 263, 4367, 263, 4368, 263, 4369, 263, 4370, + 519, 4352, 4449, 519, 4354, 4449, 519, 4355, 4449, 519, 4357, 4449, 519, + 4358, 4449, 519, 4359, 4449, 519, 4361, 4449, 519, 4363, 4449, 519, 4364, + 4449, 519, 4366, 4449, 519, 4367, 4449, 519, 4368, 4449, 519, 4369, 4449, + 519, 4370, 4449, 1287, 4366, 4449, 4535, 4352, 4457, 1031, 4364, 4462, + 4363, 4468, 519, 4363, 4462, 263, 19968, 263, 20108, 263, 19977, 263, + 22235, 263, 20116, 263, 20845, 263, 19971, 263, 20843, 263, 20061, 263, + 21313, 263, 26376, 263, 28779, 263, 27700, 263, 26408, 263, 37329, 263, + 22303, 263, 26085, 263, 26666, 263, 26377, 263, 31038, 263, 21517, 263, + 29305, 263, 36001, 263, 31069, 263, 21172, 263, 31192, 263, 30007, 263, + 22899, 263, 36969, 263, 20778, 263, 21360, 263, 27880, 263, 38917, 263, + 20241, 263, 20889, 263, 27491, 263, 19978, 263, 20013, 263, 19979, 263, + 24038, 263, 21491, 263, 21307, 263, 23447, 263, 23398, 263, 30435, 263, + 20225, 263, 36039, 263, 21332, 263, 22812, 519, 51, 54, 519, 51, 55, 519, + 51, 56, 519, 51, 57, 519, 52, 48, 519, 52, 49, 519, 52, 50, 519, 52, 51, + 519, 52, 52, 519, 52, 53, 519, 52, 54, 519, 52, 55, 519, 52, 56, 519, 52, + 57, 519, 53, 48, 514, 49, 26376, 514, 50, 26376, 514, 51, 26376, 514, 52, + 26376, 514, 53, 26376, 514, 54, 26376, 514, 55, 26376, 514, 56, 26376, + 514, 57, 26376, 770, 49, 48, 26376, 770, 49, 49, 26376, 770, 49, 50, + 26376, 522, 72, 103, 778, 101, 114, 103, 522, 101, 86, 778, 76, 84, 68, + 263, 12450, 263, 12452, 263, 12454, 263, 12456, 263, 12458, 263, 12459, + 263, 12461, 263, 12463, 263, 12465, 263, 12467, 263, 12469, 263, 12471, + 263, 12473, 263, 12475, 263, 12477, 263, 12479, 263, 12481, 263, 12484, + 263, 12486, 263, 12488, 263, 12490, 263, 12491, 263, 12492, 263, 12493, + 263, 12494, 263, 12495, 263, 12498, 263, 12501, 263, 12504, 263, 12507, + 263, 12510, 263, 12511, 263, 12512, 263, 12513, 263, 12514, 263, 12516, + 263, 12518, 263, 12520, 263, 12521, 263, 12522, 263, 12523, 263, 12524, + 263, 12525, 263, 12527, 263, 12528, 263, 12529, 263, 12530, 1034, 12450, + 12497, 12540, 12488, 1034, 12450, 12523, 12501, 12449, 1034, 12450, + 12531, 12506, 12450, 778, 12450, 12540, 12523, 1034, 12452, 12491, 12531, + 12464, 778, 12452, 12531, 12481, 778, 12454, 12457, 12531, 1290, 12456, + 12473, 12463, 12540, 12489, 1034, 12456, 12540, 12459, 12540, 778, 12458, + 12531, 12473, 778, 12458, 12540, 12512, 778, 12459, 12452, 12522, 1034, + 12459, 12521, 12483, 12488, 1034, 12459, 12525, 12522, 12540, 778, 12460, + 12525, 12531, 778, 12460, 12531, 12510, 522, 12462, 12460, 778, 12462, + 12491, 12540, 1034, 12461, 12517, 12522, 12540, 1034, 12462, 12523, + 12480, 12540, 522, 12461, 12525, 1290, 12461, 12525, 12464, 12521, 12512, + 1546, 12461, 12525, 12513, 12540, 12488, 12523, 1290, 12461, 12525, + 12527, 12483, 12488, 778, 12464, 12521, 12512, 1290, 12464, 12521, 12512, + 12488, 12531, 1290, 12463, 12523, 12476, 12452, 12525, 1034, 12463, + 12525, 12540, 12493, 778, 12465, 12540, 12473, 778, 12467, 12523, 12490, + 778, 12467, 12540, 12509, 1034, 12469, 12452, 12463, 12523, 1290, 12469, + 12531, 12481, 12540, 12512, 1034, 12471, 12522, 12531, 12464, 778, 12475, + 12531, 12481, 778, 12475, 12531, 12488, 778, 12480, 12540, 12473, 522, + 12487, 12471, 522, 12489, 12523, 522, 12488, 12531, 522, 12490, 12494, + 778, 12494, 12483, 12488, 778, 12495, 12452, 12484, 1290, 12497, 12540, + 12475, 12531, 12488, 778, 12497, 12540, 12484, 1034, 12496, 12540, 12524, + 12523, 1290, 12500, 12450, 12473, 12488, 12523, 778, 12500, 12463, 12523, + 522, 12500, 12467, 522, 12499, 12523, 1290, 12501, 12449, 12521, 12483, + 12489, 1034, 12501, 12451, 12540, 12488, 1290, 12502, 12483, 12471, + 12455, 12523, 778, 12501, 12521, 12531, 1290, 12504, 12463, 12479, 12540, + 12523, 522, 12506, 12477, 778, 12506, 12491, 12498, 778, 12504, 12523, + 12484, 778, 12506, 12531, 12473, 778, 12506, 12540, 12472, 778, 12505, + 12540, 12479, 1034, 12509, 12452, 12531, 12488, 778, 12508, 12523, 12488, + 522, 12507, 12531, 778, 12509, 12531, 12489, 778, 12507, 12540, 12523, + 778, 12507, 12540, 12531, 1034, 12510, 12452, 12463, 12525, 778, 12510, + 12452, 12523, 778, 12510, 12483, 12495, 778, 12510, 12523, 12463, 1290, + 12510, 12531, 12471, 12519, 12531, 1034, 12511, 12463, 12525, 12531, 522, + 12511, 12522, 1290, 12511, 12522, 12496, 12540, 12523, 522, 12513, 12460, + 1034, 12513, 12460, 12488, 12531, 1034, 12513, 12540, 12488, 12523, 778, + 12516, 12540, 12489, 778, 12516, 12540, 12523, 778, 12518, 12450, 12531, + 1034, 12522, 12483, 12488, 12523, 522, 12522, 12521, 778, 12523, 12500, + 12540, 1034, 12523, 12540, 12502, 12523, 522, 12524, 12512, 1290, 12524, + 12531, 12488, 12466, 12531, 778, 12527, 12483, 12488, 514, 48, 28857, + 514, 49, 28857, 514, 50, 28857, 514, 51, 28857, 514, 52, 28857, 514, 53, + 28857, 514, 54, 28857, 514, 55, 28857, 514, 56, 28857, 514, 57, 28857, + 770, 49, 48, 28857, 770, 49, 49, 28857, 770, 49, 50, 28857, 770, 49, 51, + 28857, 770, 49, 52, 28857, 770, 49, 53, 28857, 770, 49, 54, 28857, 770, + 49, 55, 28857, 770, 49, 56, 28857, 770, 49, 57, 28857, 770, 50, 48, + 28857, 770, 50, 49, 28857, 770, 50, 50, 28857, 770, 50, 51, 28857, 770, + 50, 52, 28857, 778, 104, 80, 97, 522, 100, 97, 522, 65, 85, 778, 98, 97, + 114, 522, 111, 86, 522, 112, 99, 522, 100, 109, 778, 100, 109, 178, 778, + 100, 109, 179, 522, 73, 85, 522, 24179, 25104, 522, 26157, 21644, 522, + 22823, 27491, 522, 26126, 27835, 1034, 26666, 24335, 20250, 31038, 522, + 112, 65, 522, 110, 65, 522, 956, 65, 522, 109, 65, 522, 107, 65, 522, 75, + 66, 522, 77, 66, 522, 71, 66, 778, 99, 97, 108, 1034, 107, 99, 97, 108, + 522, 112, 70, 522, 110, 70, 522, 956, 70, 522, 956, 103, 522, 109, 103, + 522, 107, 103, 522, 72, 122, 778, 107, 72, 122, 778, 77, 72, 122, 778, + 71, 72, 122, 778, 84, 72, 122, 522, 956, 8467, 522, 109, 8467, 522, 100, + 8467, 522, 107, 8467, 522, 102, 109, 522, 110, 109, 522, 956, 109, 522, + 109, 109, 522, 99, 109, 522, 107, 109, 778, 109, 109, 178, 778, 99, 109, + 178, 522, 109, 178, 778, 107, 109, 178, 778, 109, 109, 179, 778, 99, 109, + 179, 522, 109, 179, 778, 107, 109, 179, 778, 109, 8725, 115, 1034, 109, + 8725, 115, 178, 522, 80, 97, 778, 107, 80, 97, 778, 77, 80, 97, 778, 71, + 80, 97, 778, 114, 97, 100, 1290, 114, 97, 100, 8725, 115, 1546, 114, 97, + 100, 8725, 115, 178, 522, 112, 115, 522, 110, 115, 522, 956, 115, 522, + 109, 115, 522, 112, 86, 522, 110, 86, 522, 956, 86, 522, 109, 86, 522, + 107, 86, 522, 77, 86, 522, 112, 87, 522, 110, 87, 522, 956, 87, 522, 109, + 87, 522, 107, 87, 522, 77, 87, 522, 107, 937, 522, 77, 937, 1034, 97, 46, + 109, 46, 522, 66, 113, 522, 99, 99, 522, 99, 100, 1034, 67, 8725, 107, + 103, 778, 67, 111, 46, 522, 100, 66, 522, 71, 121, 522, 104, 97, 522, 72, + 80, 522, 105, 110, 522, 75, 75, 522, 75, 77, 522, 107, 116, 522, 108, + 109, 522, 108, 110, 778, 108, 111, 103, 522, 108, 120, 522, 109, 98, 778, + 109, 105, 108, 778, 109, 111, 108, 522, 80, 72, 1034, 112, 46, 109, 46, + 778, 80, 80, 77, 522, 80, 82, 522, 115, 114, 522, 83, 118, 522, 87, 98, + 778, 86, 8725, 109, 778, 65, 8725, 109, 514, 49, 26085, 514, 50, 26085, + 514, 51, 26085, 514, 52, 26085, 514, 53, 26085, 514, 54, 26085, 514, 55, + 26085, 514, 56, 26085, 514, 57, 26085, 770, 49, 48, 26085, 770, 49, 49, + 26085, 770, 49, 50, 26085, 770, 49, 51, 26085, 770, 49, 52, 26085, 770, + 49, 53, 26085, 770, 49, 54, 26085, 770, 49, 55, 26085, 770, 49, 56, + 26085, 770, 49, 57, 26085, 770, 50, 48, 26085, 770, 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, 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, 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, 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, @@ -3274,71 +3407,91 @@ 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, 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, + 262, 53, 262, 54, 262, 55, 262, 56, 262, 57, 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, 66, 266, 78, 266, 80, + 266, 83, 266, 87, 522, 72, 86, 522, 77, 86, 522, 83, 68, 522, 83, 83, + 778, 80, 80, 86, 522, 68, 74, 522, 12411, 12363, 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, 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, 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, @@ -3382,17 +3535,17 @@ 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 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, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 41, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 42, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 42, 7, 7, 43, 44, - 45, 46, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 43, 7, 7, 44, 45, + 46, 47, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 48, 49, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, @@ -3403,7 +3556,7 @@ 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 47, 48, 49, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 50, 51, 52, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, @@ -3828,30 +3981,74 @@ 0, 3271, 0, 3273, 0, 3275, 0, 3277, 3279, 3281, 3283, 0, 3285, 3287, 3289, 0, 3291, 3293, 3295, 3297, 3299, 3301, 3303, 0, 3305, 3309, 3311, 3313, 3315, 3317, 0, 0, 0, 0, 3319, 3321, 3323, 3325, 3327, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 3329, 3333, 3337, 3341, 3345, 3349, 3353, 3357, 3361, - 3365, 3369, 3373, 3377, 3380, 3382, 3385, 3389, 3392, 3394, 3397, 3401, - 3406, 3409, 3411, 3414, 3418, 3420, 3422, 3424, 3426, 3428, 3431, 3435, - 3438, 3440, 3443, 3447, 3452, 3455, 3457, 3460, 3464, 3466, 3468, 3470, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 3472, 3475, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 3478, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 3481, 3484, 3487, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3490, 0, 0, 0, 0, - 3493, 0, 0, 3496, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 3499, 0, 3502, 0, 0, 0, 0, 0, 3505, 3508, 0, 3512, 3515, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3519, 0, 0, 3522, 0, 0, - 3525, 0, 3528, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 3531, 0, 3534, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3537, 3540, 3543, - 3546, 3549, 0, 0, 3552, 3555, 0, 0, 3558, 3561, 0, 0, 0, 0, 0, 0, 3564, - 3567, 0, 0, 3570, 3573, 0, 0, 3576, 3579, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 3582, 3585, 3588, 3591, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 3594, 3597, 3600, 3603, 0, 0, 0, 0, 0, 0, 3606, - 3609, 3612, 3615, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3618, 3620, 0, 0, 0, + 0, 0, 3329, 3333, 3337, 3342, 3346, 3350, 3354, 3358, 3362, 3366, 3370, + 3374, 3378, 3382, 3386, 3390, 3393, 3395, 3398, 3402, 3405, 3407, 3410, + 3414, 3419, 3422, 3424, 3427, 3431, 3433, 3435, 3437, 3439, 3441, 3444, + 3448, 3451, 3453, 3456, 3460, 3465, 3468, 3470, 3473, 3477, 3479, 3481, + 3483, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3485, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 3489, 3492, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 3495, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3498, 3501, 3504, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3507, 0, + 0, 0, 0, 3510, 0, 0, 3513, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 3516, 0, 3519, 0, 0, 0, 0, 0, 3522, 3525, 0, + 3529, 3532, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3536, 0, 0, + 3539, 0, 0, 3542, 0, 3545, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 3548, 0, 3551, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3554, + 3557, 3560, 3563, 3566, 0, 0, 3569, 3572, 0, 0, 3575, 3578, 0, 0, 0, 0, + 0, 0, 3581, 3584, 0, 0, 3587, 3590, 0, 0, 3593, 3596, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 3599, 3602, 3605, 3608, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3611, 3614, 3617, 3620, 0, 0, 0, 0, + 0, 0, 3623, 3626, 3629, 3632, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3635, + 3637, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 3639, 3641, 3643, 3645, 3647, 3649, 3651, 3653, 3655, 3657, 3660, 3663, + 3666, 3669, 3672, 3675, 3678, 3681, 3684, 3687, 3690, 3694, 3698, 3702, + 3706, 3710, 3714, 3718, 3722, 3726, 3731, 3736, 3741, 3746, 3751, 3756, + 3761, 3766, 3771, 3776, 3781, 3784, 3787, 3790, 3793, 3796, 3799, 3802, + 3805, 3808, 3812, 3816, 3820, 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, 3958, 3960, 3962, 3964, 3966, 3968, 3970, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 4062, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 4067, 4071, 4074, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4081, 4083, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -3859,41 +4056,12 @@ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4085, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3622, 3624, 3626, - 3628, 3630, 3632, 3634, 3636, 3638, 3640, 3643, 3646, 3649, 3652, 3655, - 3658, 3661, 3664, 3667, 3670, 3673, 3677, 3681, 3685, 3689, 3693, 3697, - 3701, 3705, 3709, 3714, 3719, 3724, 3729, 3734, 3739, 3744, 3749, 3754, - 3759, 3764, 3767, 3770, 3773, 3776, 3779, 3782, 3785, 3788, 3791, 3795, - 3799, 3803, 3807, 3811, 3815, 3819, 3823, 3827, 3831, 3835, 3839, 3843, - 3847, 3851, 3855, 3859, 3863, 3867, 3871, 3875, 3879, 3883, 3887, 3891, - 3895, 3899, 3903, 3907, 3911, 3915, 3919, 3923, 3927, 3931, 3935, 3939, - 3941, 3943, 3945, 3947, 3949, 3951, 3953, 3955, 3957, 3959, 3961, 3963, - 3965, 3967, 3969, 3971, 3973, 3975, 3977, 3979, 3981, 3983, 3985, 3987, - 3989, 3991, 3993, 3995, 3997, 3999, 4001, 4003, 4005, 4007, 4009, 4011, - 4013, 4015, 4017, 4019, 4021, 4023, 4025, 4027, 4029, 4031, 4033, 4035, - 4037, 4039, 4041, 4043, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4045, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 4050, 4054, 4057, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4061, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 4064, 4066, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -3901,435 +4069,458 @@ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4087, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4068, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 4089, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4091, 4093, 4095, 4097, 4099, + 4101, 4103, 4105, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 4519, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4521, 0, 4523, 4525, 4527, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4529, 0, 4532, 0, 4535, 0, 4538, + 0, 4541, 0, 4544, 0, 4547, 0, 4550, 0, 4553, 0, 4556, 0, 4559, 0, 4562, + 0, 0, 4565, 0, 4568, 0, 4571, 0, 0, 0, 0, 0, 0, 4574, 4577, 0, 4580, + 4583, 0, 4586, 4589, 0, 4592, 4595, 0, 4598, 4601, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4604, 0, 0, 0, 0, 0, 0, + 4607, 4610, 0, 4613, 4616, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4619, 0, + 4622, 0, 4625, 0, 4628, 0, 4631, 0, 4634, 0, 4637, 0, 4640, 0, 4643, 0, + 4646, 0, 4649, 0, 4652, 0, 0, 4655, 0, 4658, 0, 4661, 0, 0, 0, 0, 0, 0, + 4664, 4667, 0, 4670, 4673, 0, 4676, 4679, 0, 4682, 4685, 0, 4688, 4691, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4694, + 0, 0, 4697, 4700, 4703, 4706, 0, 0, 0, 4709, 4712, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4715, 4717, 4719, + 4721, 4723, 4725, 4727, 4729, 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, 0, 0, 0, 4903, 4905, 4907, + 4909, 4911, 4913, 4915, 4917, 4919, 4921, 4923, 4925, 4927, 4929, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4931, + 4935, 4939, 4943, 4947, 4951, 4955, 4959, 4963, 4967, 4971, 4975, 4979, + 4983, 4987, 4992, 4997, 5002, 5007, 5012, 5017, 5022, 5027, 5032, 5037, + 5042, 5047, 5052, 5057, 5062, 5070, 0, 5077, 5081, 5085, 5089, 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, 5223, 5225, 5227, 0, 0, + 0, 0, 0, 0, 0, 0, 5229, 5233, 5236, 5239, 5242, 5245, 5248, 5251, 5254, + 5257, 5260, 5263, 5266, 5269, 5272, 5275, 5278, 5280, 5282, 5284, 5286, + 5288, 5290, 5292, 5294, 5296, 5298, 5300, 5302, 5304, 5306, 5309, 5312, + 5315, 5318, 5321, 5324, 5327, 5330, 5333, 5336, 5339, 5342, 5345, 5348, + 5354, 5359, 0, 5362, 5364, 5366, 5368, 5370, 5372, 5374, 5376, 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, 5463, 5466, 5469, 5472, 5475, 5478, 5481, + 5484, 5487, 5490, 5493, 5496, 5499, 5502, 5505, 5508, 5511, 5514, 5517, + 5520, 5523, 5526, 5529, 5532, 5536, 5540, 5544, 5547, 5551, 5554, 5558, + 5560, 5562, 5564, 5566, 5568, 5570, 5572, 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, 0, 5652, + 5657, 5662, 5667, 5671, 5676, 5680, 5684, 5690, 5695, 5699, 5703, 5707, + 5712, 5717, 5721, 5725, 5728, 5732, 5737, 5742, 5745, 5751, 5758, 5764, + 5768, 5774, 5780, 5785, 5789, 5793, 5797, 5802, 5808, 5813, 5817, 5821, + 5825, 5828, 5831, 5834, 5837, 5841, 5845, 5851, 5855, 5860, 5866, 5870, + 5873, 5876, 5882, 5887, 5893, 5897, 5903, 5906, 5910, 5914, 5918, 5922, + 5926, 5931, 5935, 5938, 5942, 5946, 5950, 5955, 5959, 5963, 5967, 5973, + 5978, 5981, 5987, 5990, 5995, 6000, 6004, 6008, 6012, 6017, 6020, 6024, + 6029, 6032, 6038, 6042, 6045, 6048, 6051, 6054, 6057, 6060, 6063, 6066, + 6069, 6072, 6076, 6080, 6084, 6088, 6092, 6096, 6100, 6104, 6108, 6112, + 6116, 6120, 6124, 6128, 6132, 6136, 6139, 6142, 6146, 6149, 6152, 6155, + 6159, 6163, 6166, 6169, 6172, 6175, 6178, 6183, 6186, 6189, 6192, 6195, + 6198, 6201, 6204, 6207, 6211, 6216, 6219, 6222, 6225, 6228, 6231, 6234, + 6237, 6241, 6245, 6249, 6253, 6256, 6259, 6262, 6265, 6268, 6271, 6274, + 6277, 6280, 6283, 6287, 6291, 6294, 6298, 6302, 6306, 6309, 6313, 6317, + 6322, 6325, 6329, 6333, 6337, 6341, 6347, 6354, 6357, 6360, 6363, 6366, + 6369, 6372, 6375, 6378, 6381, 6384, 6387, 6390, 6393, 6396, 6399, 6402, + 6405, 6408, 6413, 6416, 6419, 6422, 6427, 6431, 6434, 6437, 6440, 6443, + 6446, 6449, 6452, 6455, 6458, 6461, 6465, 6468, 6471, 6475, 6479, 6482, + 6487, 6491, 6494, 6497, 6500, 6503, 6507, 6511, 6514, 6517, 6520, 6523, + 6526, 6529, 6532, 6535, 6538, 6542, 6546, 6550, 6554, 6558, 6562, 6566, + 6570, 6574, 6578, 6582, 6586, 6590, 6594, 6598, 6602, 6606, 6610, 6614, + 6618, 6622, 6626, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6630, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 4070, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4072, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 4074, 4076, 4078, 4080, 4082, 4084, 4086, 4088, - 4090, 4092, 4094, 4096, 4098, 4100, 4102, 4104, 4106, 4108, 4110, 4112, - 4114, 4116, 4118, 4120, 4122, 4124, 4126, 4128, 4130, 4132, 4134, 4136, - 4138, 4140, 4142, 4144, 4146, 4148, 4150, 4152, 4154, 4156, 4158, 4160, - 4162, 4164, 4166, 4168, 4170, 4172, 4174, 4176, 4178, 4180, 4182, 4184, - 4186, 4188, 4190, 4192, 4194, 4196, 4198, 4200, 4202, 4204, 4206, 4208, - 4210, 4212, 4214, 4216, 4218, 4220, 4222, 4224, 4226, 4228, 4230, 4232, - 4234, 4236, 4238, 4240, 4242, 4244, 4246, 4248, 4250, 4252, 4254, 4256, - 4258, 4260, 4262, 4264, 4266, 4268, 4270, 4272, 4274, 4276, 4278, 4280, - 4282, 4284, 4286, 4288, 4290, 4292, 4294, 4296, 4298, 4300, 4302, 4304, - 4306, 4308, 4310, 4312, 4314, 4316, 4318, 4320, 4322, 4324, 4326, 4328, - 4330, 4332, 4334, 4336, 4338, 4340, 4342, 4344, 4346, 4348, 4350, 4352, - 4354, 4356, 4358, 4360, 4362, 4364, 4366, 4368, 4370, 4372, 4374, 4376, - 4378, 4380, 4382, 4384, 4386, 4388, 4390, 4392, 4394, 4396, 4398, 4400, - 4402, 4404, 4406, 4408, 4410, 4412, 4414, 4416, 4418, 4420, 4422, 4424, - 4426, 4428, 4430, 4432, 4434, 4436, 4438, 4440, 4442, 4444, 4446, 4448, - 4450, 4452, 4454, 4456, 4458, 4460, 4462, 4464, 4466, 4468, 4470, 4472, - 4474, 4476, 4478, 4480, 4482, 4484, 4486, 4488, 4490, 4492, 4494, 4496, - 4498, 4500, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4502, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 4504, 0, 4506, 4508, 4510, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 4512, 0, 4515, 0, 4518, 0, 4521, 0, 4524, 0, 4527, - 0, 4530, 0, 4533, 0, 4536, 0, 4539, 0, 4542, 0, 4545, 0, 0, 4548, 0, - 4551, 0, 4554, 0, 0, 0, 0, 0, 0, 4557, 4560, 0, 4563, 4566, 0, 4569, - 4572, 0, 4575, 4578, 0, 4581, 4584, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4587, 0, 0, 0, 0, 0, 0, 4590, 4593, 0, - 4596, 4599, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4602, 0, 4605, 0, 4608, - 0, 4611, 0, 4614, 0, 4617, 0, 4620, 0, 4623, 0, 4626, 0, 4629, 0, 4632, - 0, 4635, 0, 0, 4638, 0, 4641, 0, 4644, 0, 0, 0, 0, 0, 0, 4647, 4650, 0, - 4653, 4656, 0, 4659, 4662, 0, 4665, 4668, 0, 4671, 4674, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4677, 0, 0, 4680, - 4683, 4686, 4689, 0, 0, 0, 4692, 4695, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4698, 4700, 4702, 4704, 4706, - 4708, 4710, 4712, 4714, 4716, 4718, 4720, 4722, 4724, 4726, 4728, 4730, - 4732, 4734, 4736, 4738, 4740, 4742, 4744, 4746, 4748, 4750, 4752, 4754, - 4756, 4758, 4760, 4762, 4764, 4766, 4768, 4770, 4772, 4774, 4776, 4778, - 4780, 4782, 4784, 4786, 4788, 4790, 4792, 4794, 4796, 4798, 4800, 4802, - 4804, 4806, 4808, 4810, 4812, 4814, 4816, 4818, 4820, 4822, 4824, 4826, - 4828, 4830, 4832, 4834, 4836, 4838, 4840, 4842, 4844, 4846, 4848, 4850, - 4852, 4854, 4856, 4858, 4860, 4862, 4864, 4866, 4868, 4870, 4872, 4874, - 4876, 4878, 4880, 4882, 4884, 0, 0, 0, 4886, 4888, 4890, 4892, 4894, - 4896, 4898, 4900, 4902, 4904, 4906, 4908, 4910, 4912, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4914, 4918, 4922, - 4926, 4930, 4934, 4938, 4942, 4946, 4950, 4954, 4958, 4962, 4966, 4970, - 4975, 4980, 4985, 4990, 4995, 5000, 5005, 5010, 5015, 5020, 5025, 5030, - 5035, 5040, 5045, 5053, 0, 5060, 5064, 5068, 5072, 5076, 5080, 5084, - 5088, 5092, 5096, 5100, 5104, 5108, 5112, 5116, 5120, 5124, 5128, 5132, - 5136, 5140, 5144, 5148, 5152, 5156, 5160, 5164, 5168, 5172, 5176, 5180, - 5184, 5188, 5192, 5196, 5200, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5204, - 5208, 5211, 5214, 5217, 5220, 5223, 5226, 5229, 5232, 5235, 5238, 5241, - 5244, 5247, 5250, 5253, 5255, 5257, 5259, 5261, 5263, 5265, 5267, 5269, - 5271, 5273, 5275, 5277, 5279, 5281, 5284, 5287, 5290, 5293, 5296, 5299, - 5302, 5305, 5308, 5311, 5314, 5317, 5320, 5323, 5329, 5334, 0, 5337, - 5339, 5341, 5343, 5345, 5347, 5349, 5351, 5353, 5355, 5357, 5359, 5361, - 5363, 5365, 5367, 5369, 5371, 5373, 5375, 5377, 5379, 5381, 5383, 5385, - 5387, 5389, 5391, 5393, 5395, 5397, 5399, 5401, 5403, 5405, 5407, 5409, - 5411, 5413, 5415, 5417, 5419, 5421, 5423, 5425, 5427, 5429, 5431, 5433, - 5435, 5438, 5441, 5444, 5447, 5450, 5453, 5456, 5459, 5462, 5465, 5468, - 5471, 5474, 5477, 5480, 5483, 5486, 5489, 5492, 5495, 5498, 5501, 5504, - 5507, 5511, 5515, 5519, 5522, 5526, 5529, 5533, 5535, 5537, 5539, 5541, - 5543, 5545, 5547, 5549, 5551, 5553, 5555, 5557, 5559, 5561, 5563, 5565, - 5567, 5569, 5571, 5573, 5575, 5577, 5579, 5581, 5583, 5585, 5587, 5589, - 5591, 5593, 5595, 5597, 5599, 5601, 5603, 5605, 5607, 5609, 5611, 5613, - 5615, 5617, 5619, 5621, 5623, 5625, 0, 5627, 5632, 5637, 5642, 5646, - 5651, 5655, 5659, 5665, 5670, 5674, 5678, 5682, 5687, 5692, 5696, 5700, - 5703, 5707, 5712, 5717, 5720, 5726, 5733, 5739, 5743, 5749, 5755, 5760, - 5764, 5768, 5772, 5777, 5783, 5788, 5792, 5796, 5800, 5803, 5806, 5809, - 5812, 5816, 5820, 5826, 5830, 5835, 5841, 5845, 5848, 5851, 5857, 5862, - 5868, 5872, 5878, 5881, 5885, 5889, 5893, 5897, 5901, 5906, 5910, 5913, - 5917, 5921, 5925, 5930, 5934, 5938, 5942, 5948, 5953, 5956, 5962, 5965, - 5970, 5975, 5979, 5983, 5987, 5992, 5995, 5999, 6004, 6007, 6013, 6017, - 6020, 6023, 6026, 6029, 6032, 6035, 6038, 6041, 6044, 6047, 6051, 6055, - 6059, 6063, 6067, 6071, 6075, 6079, 6083, 6087, 6091, 6095, 6099, 6103, - 6107, 6111, 6114, 6117, 6121, 6124, 6127, 6130, 6134, 6138, 6141, 6144, - 6147, 6150, 6153, 6158, 6161, 6164, 6167, 6170, 6173, 6176, 6179, 6182, - 6186, 6191, 6194, 6197, 6200, 6203, 6206, 6209, 6212, 6216, 6220, 6224, - 6228, 6231, 6234, 6237, 6240, 6243, 6246, 6249, 6252, 6255, 6258, 6262, - 6266, 6269, 6273, 6277, 6281, 6284, 6288, 6292, 6297, 6300, 6304, 6308, - 6312, 6316, 6322, 6329, 6332, 6335, 6338, 6341, 6344, 6347, 6350, 6353, - 6356, 6359, 6362, 6365, 6368, 6371, 6374, 6377, 6380, 6383, 6388, 6391, - 6394, 6397, 6402, 6406, 6409, 6412, 6415, 6418, 6421, 6424, 6427, 6430, - 6433, 6436, 6440, 6443, 6446, 6450, 6454, 6457, 6462, 6466, 6469, 6472, - 6475, 6478, 6482, 6486, 6489, 6492, 6495, 6498, 6501, 6504, 6507, 6510, - 6513, 6517, 6521, 6525, 6529, 6533, 6537, 6541, 6545, 6549, 6553, 6557, - 6561, 6565, 6569, 6573, 6577, 6581, 6585, 6589, 6593, 6597, 6601, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6605, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6607, 6609, 6611, 6613, - 6615, 6617, 6619, 6621, 6623, 6625, 6627, 6629, 6631, 6633, 6635, 6637, - 6639, 6641, 6643, 6645, 6647, 6649, 6651, 6653, 6655, 6657, 6659, 6661, - 6663, 6665, 6667, 6669, 6671, 6673, 6675, 6677, 6679, 6681, 6683, 6685, - 6687, 6689, 6691, 6693, 6695, 6697, 6699, 6701, 6703, 6705, 6707, 6709, - 6711, 6713, 6715, 6717, 6719, 6721, 6723, 6725, 6727, 6729, 6731, 6733, - 6735, 6737, 6739, 6741, 6743, 6745, 6747, 6749, 6751, 6753, 6755, 6757, - 6759, 6761, 6763, 6765, 6767, 6769, 6771, 6773, 6775, 6777, 6779, 6781, - 6783, 6785, 6787, 6789, 6791, 6793, 6795, 6797, 6799, 6801, 6803, 6805, - 6807, 6809, 6811, 6813, 6815, 6817, 6819, 6821, 6823, 6825, 6827, 6829, - 6831, 6833, 6835, 6837, 6839, 6841, 6843, 6845, 6847, 6849, 6851, 6853, - 6855, 6857, 6859, 6861, 6863, 6865, 6867, 6869, 6871, 6873, 6875, 6877, - 6879, 6881, 6883, 6885, 6887, 6889, 6891, 6893, 6895, 6897, 6899, 6901, - 6903, 6905, 6907, 6909, 6911, 6913, 6915, 6917, 6919, 6921, 6923, 6925, - 6927, 6929, 6931, 6933, 6935, 6937, 6939, 6941, 6943, 6945, 6947, 6949, - 6951, 6953, 6955, 6957, 6959, 6961, 6963, 6965, 6967, 6969, 6971, 6973, - 6975, 6977, 6979, 6981, 6983, 6985, 6987, 6989, 6991, 6993, 6995, 6997, - 6999, 7001, 7003, 7005, 7007, 7009, 7011, 7013, 7015, 7017, 7019, 7021, - 7023, 7025, 7027, 7029, 7031, 7033, 7035, 7037, 7039, 7041, 7043, 7045, - 7047, 7049, 7051, 7053, 7055, 7057, 7059, 7061, 7063, 7065, 7067, 7069, - 7071, 7073, 7075, 7077, 7079, 7081, 7083, 7085, 7087, 7089, 7091, 7093, - 7095, 7097, 7099, 7101, 7103, 7105, 7107, 7109, 7111, 7113, 7115, 7117, - 7119, 7121, 7123, 7125, 7127, 7129, 7131, 7133, 7135, 7137, 7139, 7141, - 7143, 7145, 0, 0, 7147, 0, 7149, 0, 0, 7151, 7153, 7155, 7157, 7159, - 7161, 7163, 7165, 7167, 7169, 0, 7171, 0, 7173, 0, 0, 7175, 7177, 0, 0, - 0, 7179, 7181, 7183, 7185, 0, 0, 7187, 7189, 7191, 7193, 7195, 7197, - 7199, 7201, 7203, 7205, 7207, 7209, 7211, 7213, 7215, 7217, 7219, 7221, - 7223, 7225, 7227, 7229, 7231, 7233, 7235, 7237, 7239, 7241, 7243, 7245, - 7247, 7249, 7251, 7253, 7255, 7257, 7259, 7261, 7263, 7265, 7267, 7269, - 7271, 7273, 7275, 7277, 7279, 7281, 7283, 7285, 7287, 7289, 7291, 7293, - 7295, 7297, 7299, 7301, 7303, 0, 0, 0, 0, 0, 7305, 7307, 7309, 7311, - 7313, 7315, 7317, 7319, 7321, 7323, 7325, 7327, 7329, 7331, 7333, 7335, - 7337, 7339, 7341, 7343, 7345, 7347, 7349, 7351, 7353, 7355, 7357, 7359, - 7361, 7363, 7365, 7367, 7369, 7371, 7373, 7375, 7377, 7379, 7381, 7383, - 7385, 7387, 7389, 7391, 7393, 7395, 7397, 7399, 7401, 7403, 7405, 7407, - 7409, 7411, 7413, 7415, 7417, 7419, 7421, 7423, 7425, 7427, 7429, 7431, - 7433, 7435, 7437, 7439, 7441, 7443, 7445, 7447, 7449, 7451, 7453, 7455, - 7457, 7459, 7461, 7463, 7465, 7467, 7469, 7471, 7473, 7475, 7477, 7479, - 7481, 7483, 7485, 7487, 7489, 7491, 7493, 7495, 7497, 7499, 7501, 7503, - 7505, 7507, 7509, 7511, 7513, 7515, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 7517, 7520, 7523, 7526, 7530, 7534, 7537, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 7540, 7543, 7546, 7549, 7552, 0, 0, 0, 0, 0, 7555, 0, 7558, - 7561, 7563, 7565, 7567, 7569, 7571, 7573, 7575, 7577, 7579, 7581, 7584, - 7587, 7590, 7593, 7596, 7599, 7602, 7605, 7608, 7611, 7614, 7617, 0, - 7620, 7623, 7626, 7629, 7632, 0, 7635, 0, 7638, 7641, 0, 7644, 7647, 0, - 7650, 7653, 7656, 7659, 7662, 7665, 7668, 7671, 7674, 7677, 7680, 7682, - 7684, 7686, 7688, 7690, 7692, 7694, 7696, 7698, 7700, 7702, 7704, 7706, - 7708, 7710, 7712, 7714, 7716, 7718, 7720, 7722, 7724, 7726, 7728, 7730, - 7732, 7734, 7736, 7738, 7740, 7742, 7744, 7746, 7748, 7750, 7752, 7754, - 7756, 7758, 7760, 7762, 7764, 7766, 7768, 7770, 7772, 7774, 7776, 7778, - 7780, 7782, 7784, 7786, 7788, 7790, 7792, 7794, 7796, 7798, 7800, 7802, - 7804, 7806, 7808, 7810, 7812, 7814, 7816, 7818, 7820, 7822, 7824, 7826, - 7828, 7830, 7832, 7834, 7836, 7838, 7840, 7842, 7844, 7846, 7848, 7850, - 7852, 7854, 7856, 7858, 7860, 7862, 7864, 7866, 7868, 7870, 7872, 7874, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 7876, 7878, 7880, 7882, 7884, 7886, 7888, - 7890, 7892, 7894, 7896, 7898, 7900, 7902, 7904, 7906, 7908, 7910, 7912, - 7914, 7916, 7918, 7920, 7922, 7925, 7928, 7931, 7934, 7937, 7940, 7943, - 7946, 7949, 7952, 7955, 7958, 7961, 7964, 7967, 7970, 7973, 7976, 7978, - 7980, 7982, 7984, 7987, 7990, 7993, 7996, 7999, 8002, 8005, 8008, 8011, - 8014, 8017, 8020, 8023, 8026, 8029, 8032, 8035, 8038, 8041, 8044, 8047, - 8050, 8053, 8056, 8059, 8062, 8065, 8068, 8071, 8074, 8077, 8080, 8083, - 8086, 8089, 8092, 8095, 8098, 8101, 8104, 8107, 8110, 8113, 8116, 8119, - 8122, 8125, 8128, 8131, 8134, 8137, 8140, 8143, 8146, 8149, 8152, 8155, - 8158, 8161, 8164, 8167, 8170, 8173, 8176, 8179, 8182, 8185, 8188, 8191, - 8194, 8197, 8200, 8203, 8206, 8209, 8212, 8215, 8218, 8221, 8224, 8227, - 8230, 8233, 8236, 8239, 8242, 8245, 8248, 8251, 8254, 8257, 8260, 8263, - 8266, 8270, 8274, 8278, 8282, 8286, 8290, 8293, 8296, 8299, 8302, 8305, - 8308, 8311, 8314, 8317, 8320, 8323, 8326, 8329, 8332, 8335, 8338, 8341, - 8344, 8347, 8350, 8353, 8356, 8359, 8362, 8365, 8368, 8371, 8374, 8377, - 8380, 8383, 8386, 8389, 8392, 8395, 8398, 8401, 8404, 8407, 8410, 8413, - 8416, 8419, 8422, 8425, 8428, 8431, 8434, 8437, 8440, 8443, 8446, 8449, - 8452, 8455, 8458, 8461, 8464, 8467, 8470, 8473, 8476, 8479, 8482, 8485, - 8488, 8491, 8494, 8497, 8500, 8503, 8506, 8509, 8512, 8515, 8518, 8521, - 8524, 8527, 8530, 8533, 8536, 8539, 8542, 8545, 8548, 8551, 8554, 8557, - 8560, 8563, 8566, 8569, 8572, 8575, 8578, 8581, 8584, 8587, 8590, 8593, - 8596, 8599, 8602, 8605, 8608, 8611, 8614, 8617, 8620, 8623, 8626, 8629, - 8632, 8635, 8638, 8641, 8644, 8647, 8650, 8653, 8656, 8659, 8662, 8665, - 8668, 8671, 8674, 8677, 8680, 8683, 8686, 8689, 8692, 8695, 8698, 8701, - 8704, 8707, 8710, 8713, 8716, 8720, 8724, 8728, 8731, 8734, 8737, 8740, - 8743, 8746, 8749, 8752, 8755, 8758, 8761, 8764, 8767, 8770, 8773, 8776, - 8779, 8782, 8785, 8788, 8791, 8794, 8797, 8800, 8803, 8806, 8809, 8812, - 8815, 8818, 8821, 8824, 8827, 8830, 8833, 8836, 8839, 8842, 8845, 8848, - 8851, 8854, 8857, 8860, 8863, 8866, 8869, 8872, 8875, 8878, 8881, 8884, - 8887, 8890, 8893, 8896, 8899, 8902, 8905, 8908, 8911, 8914, 8917, 8920, - 8923, 8926, 8929, 8932, 8935, 8938, 8941, 8944, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8947, 8951, 8955, 8959, 8963, 8967, 8971, - 8975, 8979, 8983, 8987, 8991, 8995, 8999, 9003, 9007, 9011, 9015, 9019, - 9023, 9027, 9031, 9035, 9039, 9043, 9047, 9051, 9055, 9059, 9063, 9067, - 9071, 9075, 9079, 9083, 9087, 9091, 9095, 9099, 9103, 9107, 9111, 9115, - 9119, 9123, 9127, 9131, 9135, 9139, 9143, 9147, 9151, 9155, 9159, 9163, - 9167, 9171, 9175, 9179, 9183, 9187, 9191, 9195, 9199, 0, 0, 9203, 9207, - 9211, 9215, 9219, 9223, 9227, 9231, 9235, 9239, 9243, 9247, 9251, 9255, - 9259, 9263, 9267, 9271, 9275, 9279, 9283, 9287, 9291, 9295, 9299, 9303, - 9307, 9311, 9315, 9319, 9323, 9327, 9331, 9335, 9339, 9343, 9347, 9351, - 9355, 9359, 9363, 9367, 9371, 9375, 9379, 9383, 9387, 9391, 9395, 9399, - 9403, 9407, 9411, 9415, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 9419, 9423, 9427, 9432, 9437, 9442, 9447, 9452, 9457, 9462, 9466, 9485, - 9494, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9499, - 9501, 9503, 9505, 9507, 9509, 9511, 9513, 9515, 9517, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9519, 9521, 9523, 9525, - 9527, 9529, 9531, 9533, 9535, 9537, 9539, 9541, 9543, 9545, 9547, 9549, - 9551, 9553, 9555, 9557, 9559, 0, 0, 9561, 9563, 9565, 9567, 9569, 9571, - 9573, 9575, 9577, 9579, 9581, 9583, 0, 9585, 9587, 9589, 9591, 9593, - 9595, 9597, 9599, 9601, 9603, 9605, 9607, 9609, 9611, 9613, 9615, 9617, - 9619, 9621, 0, 9623, 9625, 9627, 9629, 0, 0, 0, 0, 9631, 9634, 9637, 0, - 9640, 0, 9643, 9646, 9649, 9652, 9655, 9658, 9661, 9664, 9667, 9670, - 9673, 9675, 9677, 9679, 9681, 9683, 9685, 9687, 9689, 9691, 9693, 9695, - 9697, 9699, 9701, 9703, 9705, 9707, 9709, 9711, 9713, 9715, 9717, 9719, - 9721, 9723, 9725, 9727, 9729, 9731, 9733, 9735, 9737, 9739, 9741, 9743, - 9745, 9747, 9749, 9751, 9753, 9755, 9757, 9759, 9761, 9763, 9765, 9767, - 9769, 9771, 9773, 9775, 9777, 9779, 9781, 9783, 9785, 9787, 9789, 9791, - 9793, 9795, 9797, 9799, 9801, 9803, 9805, 9807, 9809, 9811, 9813, 9815, - 9817, 9819, 9821, 9823, 9825, 9827, 9829, 9831, 9833, 9835, 9837, 9839, - 9841, 9843, 9845, 9847, 9849, 9851, 9853, 9855, 9857, 9859, 9861, 9863, - 9865, 9867, 9869, 9871, 9873, 9875, 9877, 9879, 9881, 9883, 9885, 9887, - 9889, 9891, 9893, 9895, 9897, 9899, 9901, 9903, 9905, 9907, 9910, 9913, - 9916, 9919, 9922, 9925, 9928, 0, 0, 0, 0, 9931, 9933, 9935, 9937, 9939, - 9941, 9943, 9945, 9947, 9949, 9951, 9953, 9955, 9957, 9959, 9961, 9963, - 9965, 9967, 9969, 9971, 9973, 9975, 9977, 9979, 9981, 9983, 9985, 9987, - 9989, 9991, 9993, 9995, 9997, 9999, 10001, 10003, 10005, 10007, 10009, - 10011, 10013, 10015, 10017, 10019, 10021, 10023, 10025, 10027, 10029, - 10031, 10033, 10035, 10037, 10039, 10041, 10043, 10045, 10047, 10049, - 10051, 10053, 10055, 10057, 10059, 10061, 10063, 10065, 10067, 10069, - 10071, 10073, 10075, 10077, 10079, 10081, 10083, 10085, 10087, 10089, - 10091, 10093, 10095, 10097, 10099, 10101, 10103, 10105, 10107, 10109, - 10111, 10113, 10115, 10117, 10119, 10121, 10123, 10125, 10127, 10129, - 10131, 10133, 10135, 10137, 10139, 10141, 10143, 10145, 10147, 10149, - 10151, 10153, 10155, 10157, 10159, 10161, 10163, 10165, 10167, 10169, - 10171, 10173, 10175, 10177, 10179, 10181, 10183, 10185, 10187, 10189, - 10191, 10193, 10195, 10197, 10199, 10201, 10203, 10205, 10207, 10209, - 10211, 10213, 10215, 10217, 10219, 10221, 10223, 10225, 10227, 10229, - 10231, 10233, 10235, 10237, 10239, 10241, 10243, 10245, 10247, 10249, - 10251, 10253, 10255, 10257, 10259, 10261, 10263, 10265, 10267, 10269, - 10271, 10273, 10275, 10277, 10279, 10281, 10283, 10285, 10287, 10289, - 10291, 10293, 10295, 10297, 10299, 10301, 10303, 10305, 10307, 10309, 0, - 0, 0, 10311, 10313, 10315, 10317, 10319, 10321, 0, 0, 10323, 10325, - 10327, 10329, 10331, 10333, 0, 0, 10335, 10337, 10339, 10341, 10343, - 10345, 0, 0, 10347, 10349, 10351, 0, 0, 0, 10353, 10355, 10357, 10359, - 10361, 10363, 10365, 0, 10367, 10369, 10371, 10373, 10375, 10377, 10379, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10381, 10384, 10387, 10390, - 10393, 10396, 10399, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10402, - 10405, 10408, 10411, 10414, 10417, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 10420, 10422, 10424, 10426, 10428, 10430, 10432, 10434, 10436, - 10438, 10440, 10442, 10444, 10446, 10448, 10450, 10452, 10454, 10456, - 10458, 10460, 10462, 10464, 10466, 10468, 10470, 10472, 10474, 10476, - 10478, 10480, 10482, 10484, 10486, 10488, 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, 0, 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, 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, 0, 10732, 10734, 0, 0, - 10736, 0, 0, 10738, 10740, 0, 0, 10742, 10744, 10746, 10748, 0, 10750, - 10752, 10754, 10756, 10758, 10760, 10762, 10764, 10766, 10768, 10770, - 10772, 0, 10774, 0, 10776, 10778, 10780, 10782, 10784, 10786, 10788, 0, - 10790, 10792, 10794, 10796, 10798, 10800, 10802, 10804, 10806, 10808, - 10810, 10812, 10814, 10816, 10818, 10820, 10822, 10824, 10826, 10828, - 10830, 10832, 10834, 10836, 10838, 10840, 10842, 10844, 10846, 10848, - 10850, 10852, 10854, 10856, 10858, 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, 0, 10920, 10922, 10924, 10926, 0, 0, - 10928, 10930, 10932, 10934, 10936, 10938, 10940, 10942, 0, 10944, 10946, - 10948, 10950, 10952, 10954, 10956, 0, 10958, 10960, 10962, 10964, 10966, - 10968, 10970, 10972, 10974, 10976, 10978, 10980, 10982, 10984, 10986, - 10988, 10990, 10992, 10994, 10996, 10998, 11000, 11002, 11004, 11006, - 11008, 11010, 11012, 0, 11014, 11016, 11018, 11020, 0, 11022, 11024, - 11026, 11028, 11030, 0, 11032, 0, 0, 0, 11034, 11036, 11038, 11040, - 11042, 11044, 11046, 0, 11048, 11050, 11052, 11054, 11056, 11058, 11060, - 11062, 11064, 11066, 11068, 11070, 11072, 11074, 11076, 11078, 11080, - 11082, 11084, 11086, 11088, 11090, 11092, 11094, 11096, 11098, 11100, - 11102, 11104, 11106, 11108, 11110, 11112, 11114, 11116, 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, 0, 0, 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, 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, 0, 0, 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, 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, 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, 12544, 12546, 12548, 12550, 12552, 12554, 12556, - 12558, 12560, 12562, 12564, 12566, 12568, 12570, 12572, 12574, 12576, - 12578, 12580, 12582, 12584, 12586, 12588, 12590, 12592, 12594, 12596, - 12598, 12600, 12602, 12604, 12606, 12608, 12610, 12612, 12614, 12616, - 12618, 12620, 12622, 12624, 12626, 12628, 12630, 12632, 12634, 12636, - 12638, 12640, 12642, 12644, 12646, 12648, 12650, 12652, 12654, 12656, - 12658, 12660, 12662, 12664, 12666, 12668, 12670, 12672, 12674, 12676, - 12678, 12680, 12682, 12684, 12686, 12688, 12690, 12692, 12694, 12696, - 12698, 12700, 12702, 12704, 12706, 12708, 12710, 12712, 12714, 12716, - 12718, 12720, 12722, 12724, 12726, 12728, 12730, 12732, 12734, 12736, - 12738, 12740, 12742, 12744, 12746, 12748, 12750, 12752, 12754, 12756, - 12758, 12760, 12762, 12764, 12766, 12768, 12770, 12772, 12774, 12776, - 12778, 12780, 12782, 12784, 12786, 12788, 12790, 12792, 12794, 12796, - 12798, 12800, 12802, 12804, 12806, 12808, 12810, 12812, 12814, 12816, - 12818, 12820, 12822, 12824, 12826, 12828, 12830, 12832, 12834, 12836, - 12838, 12840, 12842, 12844, 12846, 12848, 12850, 12852, 12854, 12856, - 12858, 12860, 12862, 12864, 12866, 12868, 12870, 12872, 12874, 12876, - 12878, 12880, 12882, 12884, 12886, 12888, 12890, 12892, 12894, 12896, - 12898, 12900, 12902, 12904, 12906, 12908, 12910, 12912, 12914, 12916, - 12918, 12920, 12922, 12924, 12926, 12928, 12930, 12932, 12934, 12936, - 12938, 12940, 12942, 12944, 12946, 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, 13002, 13004, 13006, 13008, 13010, 13012, 13014, 13016, - 13018, 13020, 13022, 13024, 13026, 13028, 13030, 13032, 13034, 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, 13122, 13124, 13126, 13128, 13130, 13132, 13134, 13136, - 13138, 13140, 13142, 13144, 13146, 13148, 13150, 13152, 13154, 13156, - 13158, 13160, 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, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 6632, 6634, 6636, 6638, 6640, 6642, 6644, 6646, 6648, 6650, 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, 0, 0, 7172, 0, 7174, 0, 0, 7176, + 7178, 7180, 7182, 7184, 7186, 7188, 7190, 7192, 7194, 0, 7196, 0, 7198, + 0, 0, 7200, 7202, 0, 0, 0, 7204, 7206, 7208, 7210, 0, 0, 7212, 7214, + 7216, 7218, 7220, 7222, 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, + 0, 0, 7336, 7338, 7340, 7342, 7344, 7346, 7348, 7350, 7352, 7354, 7356, + 7358, 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, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7548, 7551, 7554, 7557, 7561, 7565, + 7568, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7571, 7574, 7577, 7580, 7583, + 0, 0, 0, 0, 0, 7586, 0, 7589, 7592, 7594, 7596, 7598, 7600, 7602, 7604, + 7606, 7608, 7610, 7612, 7615, 7618, 7621, 7624, 7627, 7630, 7633, 7636, + 7639, 7642, 7645, 7648, 0, 7651, 7654, 7657, 7660, 7663, 0, 7666, 0, + 7669, 7672, 0, 7675, 7678, 0, 7681, 7684, 7687, 7690, 7693, 7696, 7699, + 7702, 7705, 7708, 7711, 7713, 7715, 7717, 7719, 7721, 7723, 7725, 7727, + 7729, 7731, 7733, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7907, 7909, + 7911, 7913, 7915, 7917, 7919, 7921, 7923, 7925, 7927, 7929, 7931, 7933, + 7935, 7937, 7939, 7941, 7943, 7945, 7947, 7949, 7951, 7953, 7956, 7959, + 7962, 7965, 7968, 7971, 7974, 7977, 7980, 7983, 7986, 7989, 7992, 7995, + 7998, 8001, 8004, 8007, 8009, 8011, 8013, 8015, 8018, 8021, 8024, 8027, + 8030, 8033, 8036, 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, 8301, 8305, 8309, 8313, 8317, 8321, + 8324, 8327, 8330, 8333, 8336, 8339, 8342, 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, 8751, 8755, + 8759, 8762, 8765, 8768, 8771, 8774, 8777, 8780, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8978, 8982, + 8986, 8990, 8994, 8998, 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, 0, 0, 9234, 9238, 9242, 9246, 9250, 9254, 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, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9450, 9454, 9458, 9463, 9468, 9473, 9478, + 9483, 9488, 9493, 9497, 9516, 9525, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 9530, 9532, 9534, 9536, 9538, 9540, 9542, 9544, + 9546, 9548, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 9550, 9552, 9554, 9556, 9558, 9560, 9562, 9564, 9566, 9568, 9570, + 9572, 9574, 9576, 9578, 9580, 9582, 9584, 9586, 9588, 9590, 0, 0, 9592, + 9594, 9596, 9598, 9600, 9602, 9604, 9606, 9608, 9610, 9612, 9614, 0, + 9616, 9618, 9620, 9622, 9624, 9626, 9628, 9630, 9632, 9634, 9636, 9638, + 9640, 9642, 9644, 9646, 9648, 9650, 9652, 0, 9654, 9656, 9658, 9660, 0, + 0, 0, 0, 9662, 9665, 9668, 0, 9671, 0, 9674, 9677, 9680, 9683, 9686, + 9689, 9692, 9695, 9698, 9701, 9704, 9706, 9708, 9710, 9712, 9714, 9716, + 9718, 9720, 9722, 9724, 9726, 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, 9941, 9944, 9947, 9950, 9953, 9956, 9959, 0, 0, 0, 0, + 9962, 9964, 9966, 9968, 9970, 9972, 9974, 9976, 9978, 9980, 9982, 9984, + 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, 0, 0, 0, 10342, 10344, + 10346, 10348, 10350, 10352, 0, 0, 10354, 10356, 10358, 10360, 10362, + 10364, 0, 0, 10366, 10368, 10370, 10372, 10374, 10376, 0, 0, 10378, + 10380, 10382, 0, 0, 0, 10384, 10386, 10388, 10390, 10392, 10394, 10396, + 0, 10398, 10400, 10402, 10404, 10406, 10408, 10410, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10412, 0, + 10415, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10418, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 10421, 10424, 10427, 10430, 10433, 10436, 10439, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10442, 10445, 10448, 10451, 10454, 10457, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10460, 10462, 10464, 10466, + 10468, 10470, 10472, 10474, 10476, 10478, 10480, 10482, 10484, 10486, + 10488, 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, 0, 10630, 10632, 10634, 10636, 10638, 10640, 10642, 10644, 10646, + 10648, 10650, 10652, 10654, 10656, 10658, 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, 0, 10772, 10774, 0, 0, 10776, 0, 0, 10778, 10780, 0, 0, + 10782, 10784, 10786, 10788, 0, 10790, 10792, 10794, 10796, 10798, 10800, + 10802, 10804, 10806, 10808, 10810, 10812, 0, 10814, 0, 10816, 10818, + 10820, 10822, 10824, 10826, 10828, 0, 10830, 10832, 10834, 10836, 10838, + 10840, 10842, 10844, 10846, 10848, 10850, 10852, 10854, 10856, 10858, + 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, 0, + 10960, 10962, 10964, 10966, 0, 0, 10968, 10970, 10972, 10974, 10976, + 10978, 10980, 10982, 0, 10984, 10986, 10988, 10990, 10992, 10994, 10996, + 0, 10998, 11000, 11002, 11004, 11006, 11008, 11010, 11012, 11014, 11016, + 11018, 11020, 11022, 11024, 11026, 11028, 11030, 11032, 11034, 11036, + 11038, 11040, 11042, 11044, 11046, 11048, 11050, 11052, 0, 11054, 11056, + 11058, 11060, 0, 11062, 11064, 11066, 11068, 11070, 0, 11072, 0, 0, 0, + 11074, 11076, 11078, 11080, 11082, 11084, 11086, 0, 11088, 11090, 11092, + 11094, 11096, 11098, 11100, 11102, 11104, 11106, 11108, 11110, 11112, + 11114, 11116, 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, 0, 0, 11768, 11770, + 11772, 11774, 11776, 11778, 11780, 11782, 11784, 11786, 11788, 11790, + 11792, 11794, 11796, 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, 0, + 0, 12352, 12354, 12356, 12358, 12360, 12362, 12364, 12366, 12368, 12370, + 12372, 12374, 12376, 12378, 12380, 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, 12455, 12458, 12461, 12464, 12467, 12470, 12473, 12476, 12479, + 12482, 0, 0, 0, 0, 0, 12485, 12489, 12493, 12497, 12501, 12505, 12509, + 12513, 12517, 12521, 12525, 12529, 12533, 12537, 12541, 12545, 12549, + 12553, 12557, 12561, 12565, 12569, 12573, 12577, 12581, 12585, 12589, + 12593, 12595, 12597, 12600, 0, 0, 12603, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 12605, 0, 12607, 0, 0, 12609, 0, 0, 0, 12611, 0, 0, 0, 12613, 12616, + 12619, 12622, 12625, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 12629, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12632, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12635, 12637, 12639, 12641, 12643, 12645, + 12647, 12649, 12651, 12653, 12655, 12657, 12659, 12661, 12663, 12665, + 12667, 12669, 12671, 12673, 12675, 12677, 12679, 12681, 12683, 12685, + 12687, 12689, 12691, 12693, 12695, 12697, 12699, 12701, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 12703, 12707, 12711, 12715, 12719, 12723, 12727, + 12731, 12735, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12739, 12741, + 12743, 12745, 12747, 12749, 12751, 12753, 12755, 12757, 12759, 12761, + 12763, 12765, 12767, 12769, 12771, 12773, 12775, 12777, 12779, 12781, + 12783, 12785, 12787, 12789, 12791, 12793, 12795, 12797, 12799, 12801, + 12803, 12805, 12807, 12809, 12811, 12813, 12815, 12817, 12819, 12821, + 12823, 12825, 12827, 12829, 12831, 12833, 12835, 12837, 12839, 12841, + 12843, 12845, 12847, 12849, 12851, 12853, 12855, 12857, 12859, 12861, + 12863, 12865, 12867, 12869, 12871, 12873, 12875, 12877, 12879, 12881, + 12883, 12885, 12887, 12889, 12891, 12893, 12895, 12897, 12899, 12901, + 12903, 12905, 12907, 12909, 12911, 12913, 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, 12969, 12971, 12973, 12975, 12977, 12979, 12981, + 12983, 12985, 12987, 12989, 12991, 12993, 12995, 12997, 12999, 13001, + 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, 13089, 13091, 13093, 13095, 13097, 13099, 13101, + 13103, 13105, 13107, 13109, 13111, 13113, 13115, 13117, 13119, 13121, + 13123, 13125, 13127, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -4339,352 +4530,390 @@ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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 3 +#define COMP_SHIFT 2 static unsigned short comp_index[] = { - 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 3, 0, 0, 0, 4, 5, 6, 7, - 0, 0, 0, 8, 0, 9, 10, 0, 0, 11, 12, 13, 14, 0, 0, 0, 0, 15, 16, 17, 0, 0, - 0, 18, 19, 20, 21, 0, 0, 0, 22, 0, 0, 0, 0, 0, 23, 24, 25, 26, 0, 0, 0, - 27, 28, 29, 30, 0, 0, 0, 31, 32, 33, 34, 0, 0, 0, 35, 0, 0, 0, 0, 0, 36, - 0, 37, 38, 39, 0, 0, 40, 41, 42, 43, 0, 0, 0, 44, 45, 46, 0, 0, 0, 0, 47, - 48, 49, 50, 0, 0, 51, 52, 53, 54, 0, 0, 0, 55, 56, 0, 0, 0, 0, 0, 57, 58, - 59, 60, 0, 0, 0, 61, 62, 63, 0, 0, 0, 0, 64, 65, 66, 67, 0, 0, 68, 69, - 70, 71, 0, 0, 0, 72, 0, 73, 0, 0, 0, 0, 74, 0, 75, 0, 0, 0, 0, 76, 0, 0, - 0, 0, 0, 77, 78, 79, 0, 0, 0, 0, 80, 81, 82, 83, 0, 0, 0, 84, 85, 86, 0, - 0, 0, 0, 87, 88, 0, 89, 0, 0, 90, 91, 0, 92, 0, 0, 0, 0, 93, 94, 95, 0, - 0, 0, 96, 97, 98, 99, 0, 0, 0, 100, 0, 0, 0, 0, 0, 101, 102, 0, 103, 0, - 0, 0, 104, 105, 106, 107, 0, 0, 0, 108, 109, 110, 111, 0, 0, 0, 112, 113, - 0, 0, 0, 0, 114, 115, 116, 117, 0, 0, 0, 118, 119, 120, 121, 0, 0, 0, - 122, 0, 123, 0, 0, 0, 124, 125, 126, 127, 128, 0, 0, 129, 130, 131, 132, - 0, 0, 0, 133, 134, 0, 0, 0, 0, 0, 135, 136, 137, 138, 0, 0, 139, 140, - 141, 142, 0, 0, 0, 0, 143, 144, 145, 0, 0, 0, 146, 147, 148, 149, 0, 0, - 0, 150, 0, 151, 0, 0, 0, 152, 153, 154, 0, 0, 0, 0, 0, 155, 0, 0, 0, 0, - 0, 156, 157, 158, 0, 0, 0, 0, 159, 160, 161, 162, 0, 0, 163, 0, 0, 0, - 164, 0, 0, 165, 166, 0, 0, 0, 0, 0, 167, 0, 0, 0, 0, 0, 0, 168, 0, 0, 0, - 0, 0, 169, 170, 0, 0, 0, 0, 0, 171, 0, 0, 0, 0, 0, 0, 172, 173, 0, 0, 0, - 0, 0, 174, 0, 0, 0, 0, 0, 175, 176, 0, 0, 0, 0, 0, 177, 178, 0, 0, 0, 0, - 0, 179, 0, 0, 0, 0, 0, 0, 180, 0, 0, 0, 0, 0, 181, 182, 183, 0, 0, 0, 0, - 184, 185, 0, 0, 0, 0, 0, 186, 0, 0, 0, 0, 0, 0, 187, 0, 0, 0, 0, 0, 188, - 189, 0, 0, 0, 0, 0, 190, 0, 0, 0, 0, 0, 0, 191, 192, 0, 0, 0, 0, 0, 193, - 0, 0, 0, 0, 0, 194, 195, 0, 0, 0, 0, 0, 196, 197, 0, 0, 0, 0, 0, 198, 0, - 0, 0, 0, 0, 0, 199, 0, 0, 0, 0, 0, 200, 201, 202, 0, 0, 0, 0, 203, 204, - 0, 0, 0, 0, 0, 205, 206, 0, 0, 0, 0, 0, 207, 0, 0, 0, 0, 0, 208, 0, 0, 0, - 0, 0, 0, 209, 0, 0, 0, 0, 0, 0, 210, 0, 0, 0, 0, 0, 0, 211, 0, 0, 0, 0, - 0, 0, 212, 0, 0, 0, 0, 0, 0, 213, 0, 0, 0, 0, 0, 0, 214, 0, 0, 0, 0, 0, - 215, 0, 0, 0, 0, 0, 216, 0, 0, 0, 0, 0, 0, 0, 217, 0, 0, 0, 0, 0, 0, 218, - 0, 0, 0, 0, 0, 219, 0, 0, 0, 0, 0, 220, 221, 222, 0, 0, 0, 0, 223, 224, - 225, 0, 0, 0, 0, 226, 227, 228, 0, 0, 0, 0, 229, 230, 231, 0, 0, 0, 0, 0, - 232, 0, 0, 0, 0, 0, 233, 0, 0, 0, 0, 0, 234, 0, 0, 0, 0, 0, 0, 235, 0, 0, - 0, 0, 0, 0, 236, 0, 0, 0, 0, 0, 0, 237, 0, 0, 0, 0, 0, 238, 0, 0, 0, 0, - 0, 0, 239, 0, 0, 0, 0, 0, 0, 240, 0, 0, 0, 0, 0, 0, 241, 0, 0, 0, 0, 0, - 242, 0, 243, 244, 0, 0, 0, 245, 246, 0, 0, 0, 0, 247, 0, 248, 0, 249, 0, - 0, 250, 251, 252, 0, 0, 0, 0, 253, 0, 254, 0, 0, 0, 0, 0, 255, 0, 0, 0, - 0, 256, 257, 258, 0, 0, 0, 0, 259, 0, 260, 0, 261, 0, 0, 0, 0, 0, 262, 0, - 0, 0, 0, 0, 0, 263, 0, 0, 264, 265, 266, 0, 267, 0, 0, 268, 0, 269, 0, 0, - 0, 0, 270, 0, 271, 272, 0, 0, 0, 273, 274, 0, 275, 0, 0, 276, 0, 277, 0, - 0, 0, 0, 0, 0, 278, 0, 0, 0, 0, 279, 280, 281, 282, 0, 0, 0, 283, 284, 0, - 285, 0, 0, 286, 0, 0, 0, 287, 0, 0, 288, 0, 0, 0, 289, 0, 0, 0, 0, 0, - 290, 0, 0, 0, 291, 0, 0, 0, 0, 0, 0, 292, 0, 0, 0, 0, 0, 0, 293, 0, 0, 0, - 0, 0, 294, 0, 0, 0, 0, 0, 0, 295, 0, 0, 0, 0, 0, 0, 296, 0, 0, 0, 0, 0, - 0, 297, 0, 0, 0, 0, 0, 298, 299, 0, 0, 0, 0, 0, 300, 0, 0, 0, 0, 0, 0, - 301, 0, 0, 0, 0, 0, 0, 302, 0, 0, 0, 0, 0, 0, 303, 0, 0, 0, 0, 0, 304, 0, - 0, 0, 0, 0, 0, 305, 0, 0, 0, 0, 0, 0, 306, 0, 0, 0, 0, 0, 307, 0, 0, 0, - 0, 0, 0, 308, 0, 0, 0, 0, 0, 0, 309, 0, 0, 0, 0, 0, 0, 310, 0, 0, 0, 0, - 0, 311, 312, 0, 0, 0, 0, 0, 313, 0, 0, 0, 0, 0, 0, 314, 0, 0, 0, 0, 0, 0, - 315, 0, 0, 0, 0, 0, 0, 316, 0, 0, 0, 0, 0, 317, 0, 0, 0, 0, 0, 0, 318, 0, - 0, 0, 0, 0, 0, 319, 0, 0, 0, 0, 0, 0, 320, 0, 0, 0, 0, 0, 0, 321, 0, 0, - 0, 0, 0, 322, 0, 0, 0, 0, 0, 0, 323, 0, 0, 0, 0, 0, 0, 324, 0, 0, 0, 0, - 0, 325, 0, 0, 0, 0, 0, 0, 0, 0, 0, 326, 0, 0, 0, 0, 0, 0, 327, 0, 0, 0, - 0, 0, 0, 328, 0, 0, 0, 0, 0, 329, 0, 0, 0, 0, 0, 0, 330, 0, 0, 0, 0, 0, - 0, 331, 0, 0, 0, 0, 0, 0, 332, 0, 0, 0, 0, 0, 0, 333, 0, 0, 0, 0, 0, 334, - 0, 0, 0, 0, 0, 0, 335, 0, 0, 0, 0, 0, 0, 336, 337, 0, 0, 0, 0, 0, 0, 338, - 0, 0, 0, 0, 0, 339, 0, 0, 0, 0, 0, 0, 340, 0, 0, 0, 0, 0, 0, 341, 0, 0, - 0, 0, 0, 0, 342, 0, 0, 0, 0, 0, 0, 343, 0, 0, 0, 0, 0, 344, 0, 0, 0, 0, - 0, 0, 345, 346, 0, 0, 0, 0, 0, 347, 0, 0, 0, 0, 0, 0, 348, 0, 0, 0, 0, 0, - 0, 349, 0, 0, 0, 0, 0, 0, 350, 0, 0, 0, 0, 0, 0, 351, 0, 0, 0, 0, 0, 0, - 352, 0, 0, 0, 0, 0, 353, 0, 0, 0, 0, 0, 0, 354, 0, 0, 0, 0, 0, 0, 355, 0, - 0, 0, 0, 0, 0, 356, 0, 0, 0, 0, 0, 357, 0, 0, 0, 0, 0, 0, 358, 0, 0, 0, - 0, 0, 0, 359, 0, 0, 0, 0, 0, 0, 360, 0, 0, 0, 0, 0, 361, 362, 0, 0, 0, 0, - 0, 0, 363, 0, 0, 0, 0, 0, 0, 364, 0, 0, 0, 0, 0, 0, 365, 0, 0, 0, 0, 0, - 0, 366, 0, 0, 0, 0, 0, 367, 0, 0, 0, 0, 0, 0, 368, 0, 0, 0, 0, 0, 369, - 370, 0, 0, 0, 0, 0, 371, 0, 0, 0, 0, 0, 0, 372, 0, 0, 0, 0, 0, 0, 373, 0, - 0, 0, 0, 0, 374, 0, 0, 0, 0, 0, 0, 375, 0, 0, 376, 0, 0, 0, 377, 0, 0, - 378, 0, 0, 0, 0, 0, 0, 379, 0, 0, 0, 0, 0, 0, 380, 0, 0, 0, 0, 0, 381, 0, - 0, 0, 0, 0, 0, 382, 0, 0, 0, 0, 0, 0, 383, 0, 0, 0, 0, 0, 0, 384, 0, 0, - 385, 0, 0, 386, 0, 0, 0, 387, 0, 0, 388, 0, 0, 0, 0, 0, 0, 389, 0, 0, 0, - 0, 0, 0, 390, 0, 0, 0, 0, 0, 391, 0, 0, 0, 0, 0, 0, 392, 0, 0, 0, 0, 0, - 0, 393, 0, 0, 0, 0, 0, 0, 394, 0, 0, 395, 0, 0, 0, 0, 0, 0, 396, 0, 0, 0, - 0, 0, 397, 0, 0, 0, 0, 0, 0, 398, 0, 0, 0, 0, 0, 0, 399, 0, 0, 400, 0, 0, - 0, 401, 0, 0, 402, 0, 0, 0, 0, 0, 0, 403, 0, 0, 0, 0, 0, 0, 404, 0, 0, 0, - 0, 0, 405, 0, 0, 0, 0, 0, 0, 406, 0, 0, 0, 0, 0, 0, 407, 0, 0, 0, 0, 0, - 0, 408, 0, 0, 409, 0, 0, 410, 0, 0, 0, 411, 0, 0, 412, 0, 0, 0, 0, 0, 0, - 413, 0, 0, 0, 0, 0, 0, 414, 0, 0, 0, 0, 0, 415, 0, 0, 0, 0, 0, 0, 416, 0, - 0, 0, 0, 0, 0, 417, 0, 0, 0, 0, 0, 0, 418, 0, 0, 419, 0, 0, 420, 0, 0, 0, - 421, 0, 0, 422, 0, 0, 423, 0, 0, 0, 424, 0, 0, 425, 0, 0, 0, 426, 0, 0, - 427, 0, 0, 0, 0, 0, 0, 428, 0, 0, 0, 0, 0, 429, 0, 0, 0, 0, 0, 0, 430, 0, - 0, 0, 0, 0, 0, 431, 0, 0, 432, 0, 0, 0, 433, 0, 0, 434, 0, 0, 435, 0, 0, - 0, 436, 0, 0, 437, 0, 0, 0, 438, 0, 0, 439, 0, 0, 440, 0, 0, 0, 0, 0, 0, - 441, 0, 0, 0, 0, 0, 0, 442, 0, 0, 0, 0, 0, 0, 443, 0, 0, 0, 0, 0, 444, 0, - 0, 0, 0, 0, 0, 445, 0, 0, 0, 0, 0, 0, 446, 0, 0, 447, 0, 0, 0, 448, 0, 0, - 449, 0, 0, 450, 0, 0, 0, 0, 0, 0, 451, 0, 0, 0, 0, 0, 0, 452, 0, 0, 0, 0, - 0, 0, 453, 0, 0, 0, 0, 0, 454, 0, 0, 0, 0, 0, 0, 455, 0, 0, 0, 0, 0, 0, - 456, 0, 0, 0, 0, 0, 0, 457, 0, 0, 0, 0, 0, 458, 0, 0, 0, 0, 0, 0, 459, 0, - 0, 0, 0, 0, 0, 460, 0, 0, 461, 0, 0, 0, 462, 0, 0, 0, 0, 0, 463, 0, 0, 0, - 0, 0, 0, 464, 0, 0, 465, 0, 0, 0, 466, 0, 0, 0, 0, 0, 467, 0, 0, 0, 0, 0, - 0, 468, 0, 0, 0, 0, 0, 0, 469, 0, 0, 0, 0, 0, 0, 470, 0, 0, 0, 0, 0, 471, - 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, 475, 0, 0, 0, 0, 0, 0, 476, 0, 0, 0, 0, 0, 0, 477, 0, 0, 0, - 0, 0, 0, 478, 0, 0, 0, 0, 0, 479, 0, 0, 0, 0, 0, 0, 480, 0, 0, 0, 0, 0, - 0, 481, 0, 0, 0, 0, 0, 0, 482, 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, 486, 0, 0, 0, 0, 0, 487, 0, 0, - 0, 0, 0, 0, 488, 0, 0, 0, 0, 0, 0, 489, 0, 0, 0, 0, 0, 0, 490, 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, 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, 499, 0, 0, 0, 0, 0, 0, 500, 0, 0, - 0, 0, 0, 0, 501, 0, 0, 0, 0, 0, 0, 502, 0, 0, 0, 0, 0, 503, 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, - 507, 0, 0, 0, 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, 512, 0, 0, 0, 0, 0, 0, - 513, 0, 0, 0, 0, 0, 0, 514, 0, 0, 0, 0, 0, 0, 515, 0, 0, 0, 0, 0, 516, 0, - 0, 0, 0, 0, 0, 517, 0, 0, 0, 0, 0, 0, 518, 0, 0, 0, 0, 0, 0, 519, 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, 524, 0, 0, 0, 0, 0, 0, 525, 0, 0, 0, 0, 0, 0, - 526, 0, 0, 0, 0, 0, 0, 527, 0, 0, 0, 0, 0, 528, 0, 0, 0, 0, 0, 0, 529, 0, - 0, 0, 0, 0, 0, 530, 0, 0, 0, 0, 0, 0, 531, 0, 0, 0, 0, 0, 532, 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, 536, 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, 540, 0, 0, 0, 0, 0, 0, 541, 0, 0, 0, 0, 0, 0, 542, 0, - 0, 0, 0, 0, 0, 543, 0, 0, 0, 0, 0, 544, 0, 0, 0, 0, 0, 0, 545, 0, 0, 0, - 0, 0, 0, 546, 0, 0, 0, 0, 0, 0, 547, 0, 0, 0, 0, 0, 548, 0, 0, 0, 0, 0, - 0, 549, 0, 0, 0, 0, 0, 0, 550, 0, 0, 0, 0, 0, 0, 551, 0, 0, 0, 0, 0, 552, - 0, 0, 0, 0, 0, 0, 553, 0, 0, 0, 0, 0, 0, 554, 0, 0, 0, 0, 0, 0, 555, + 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, 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, 19, 20, 21, 22, 0, 0, 0, + 0, 0, 0, 23, 24, 25, 26, 27, 28, 29, 0, 0, 0, 0, 0, 0, 0, 0, 30, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 31, 32, 33, 0, 0, 34, 0, 0, 0, 0, 0, 0, 0, 0, + 35, 36, 37, 38, 39, 40, 0, 0, 0, 0, 0, 0, 0, 41, 42, 43, 44, 45, 46, 47, + 0, 0, 0, 0, 0, 0, 0, 48, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 49, 0, + 50, 0, 51, 52, 53, 0, 0, 0, 0, 0, 0, 54, 0, 0, 55, 56, 57, 58, 59, 0, 0, + 0, 0, 0, 0, 60, 61, 0, 0, 62, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 64, 65, 0, + 66, 67, 68, 0, 0, 0, 0, 0, 0, 69, 70, 71, 72, 73, 74, 75, 0, 0, 0, 0, 0, + 0, 0, 76, 0, 77, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 78, 79, 0, 80, 81, 82, + 83, 0, 0, 0, 0, 0, 0, 0, 84, 85, 86, 0, 87, 88, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 89, 90, 0, 91, 92, 93, 0, 0, 0, 0, 0, 0, 94, 95, 96, 97, 98, 99, 100, + 0, 0, 0, 0, 0, 0, 0, 0, 101, 0, 0, 102, 0, 0, 0, 0, 0, 0, 0, 0, 0, 103, + 104, 0, 0, 105, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 106, 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, 111, 112, + 0, 113, 114, 0, 115, 0, 0, 0, 0, 0, 0, 0, 116, 117, 118, 119, 120, 121, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 122, 0, 0, 123, 0, 124, 0, 0, 0, 0, 0, 0, 125, + 126, 127, 128, 0, 129, 0, 0, 0, 0, 0, 0, 0, 0, 0, 130, 0, 131, 132, 133, + 134, 0, 0, 0, 0, 0, 0, 0, 135, 136, 137, 138, 139, 140, 141, 0, 0, 0, 0, + 0, 0, 0, 0, 142, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 143, 144, 145, 146, 0, + 147, 0, 0, 0, 0, 0, 0, 0, 0, 148, 149, 150, 151, 152, 153, 154, 0, 0, 0, + 0, 0, 0, 0, 155, 156, 157, 158, 159, 160, 161, 0, 0, 0, 0, 0, 0, 0, 162, + 0, 163, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 164, 0, 0, 165, 166, 167, 0, 168, + 0, 0, 0, 0, 0, 0, 169, 0, 0, 170, 171, 172, 173, 0, 0, 0, 0, 0, 0, 0, + 174, 175, 0, 0, 176, 0, 0, 0, 0, 0, 0, 0, 0, 177, 178, 179, 180, 0, 181, + 182, 183, 0, 0, 0, 0, 0, 0, 184, 185, 186, 187, 188, 0, 189, 0, 0, 0, 0, + 0, 0, 0, 190, 191, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 192, 193, 194, + 195, 196, 197, 198, 0, 0, 0, 0, 0, 0, 0, 199, 200, 201, 0, 202, 203, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 204, 205, 206, 207, 208, 209, 0, 0, 0, 0, 0, 0, + 210, 211, 212, 213, 214, 215, 216, 0, 0, 0, 0, 0, 0, 0, 217, 0, 0, 0, + 218, 0, 0, 0, 0, 0, 0, 0, 0, 219, 220, 221, 222, 0, 223, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 224, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 225, 226, 227, 0, + 228, 0, 0, 0, 0, 0, 0, 0, 0, 0, 229, 230, 231, 0, 232, 0, 233, 0, 0, 0, + 0, 0, 0, 234, 235, 0, 0, 0, 0, 0, 236, 0, 0, 0, 0, 0, 0, 237, 238, 239, + 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, 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, 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, 251, 252, 253, 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, 255, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 256, 257, 0, 258, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 259, 260, 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, 263, 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, 265, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 266, 267, 268, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 269, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 270, 271, 272, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 273, 274, 275, 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, 277, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 278, 279, + 0, 280, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 281, 282, 283, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 284, 285, 286, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 287, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 288, 289, 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, 291, 0, 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, 293, 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, + 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, 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, + 300, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 301, 302, 303, 0, 0, 304, 0, 0, 0, + 0, 0, 0, 0, 0, 305, 306, 307, 0, 308, 0, 0, 0, 0, 0, 0, 0, 0, 0, 309, + 310, 311, 0, 312, 0, 0, 0, 0, 0, 0, 0, 0, 0, 313, 0, 314, 0, 315, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 316, 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, 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, 0, 0, 320, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 321, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 322, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 323, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 324, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 325, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 326, 327, 0, 328, 329, 0, 0, 330, 0, 0, 0, 0, 0, 0, 331, 0, + 0, 332, 0, 0, 0, 0, 0, 0, 0, 0, 0, 333, 334, 0, 0, 335, 0, 0, 0, 336, 0, + 0, 0, 0, 0, 337, 338, 339, 0, 340, 0, 0, 0, 0, 0, 0, 0, 0, 0, 341, 0, 0, + 342, 343, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 344, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 345, 346, 347, 0, 348, 0, 0, 0, 0, 0, 0, 0, 0, 0, 349, 0, 0, 0, + 350, 0, 0, 351, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 352, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 353, 0, 0, 0, 0, 0, 354, 355, 356, 0, 357, 0, + 0, 358, 359, 0, 0, 0, 0, 0, 360, 0, 0, 0, 361, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 362, 0, 0, 363, 364, 0, 0, 365, 0, 0, 0, 0, 0, 0, 366, 367, 0, 368, 0, 0, + 0, 369, 0, 0, 0, 0, 0, 370, 371, 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, 374, 375, 376, 377, 378, 0, 0, + 379, 0, 0, 0, 0, 0, 0, 380, 0, 0, 381, 0, 0, 0, 382, 0, 0, 0, 0, 0, 383, + 384, 0, 0, 0, 0, 0, 385, 0, 0, 0, 0, 0, 0, 386, 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, 389, 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, + 0, 392, 393, 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, 396, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 397, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 398, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 399, 400, 401, 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, 404, + 405, 406, 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, 408, 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, 410, 411, 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, 414, 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, 416, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 417, 418, 419, 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, 422, 423, 424, 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, 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, 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, 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, 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, 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, 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, 0, 440, 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, 442, 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, 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, 0, 446, 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, 0, 0, 0, 0, 0, 0, 0, 449, 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, 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, 456, 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, 458, 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, 460, 0, 0, 0, 0, 0, 0, 0, 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, 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, 467, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 468, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 469, 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, 472, 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, 474, 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, 476, 477, 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, 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, 0, 0, 0, 0, 0, 0, 0, 482, 0, 0, 0, 0, 0, 0, 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, 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, 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, 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, 0, 0, 0, 0, 0, 0, 0, 497, 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, 499, 0, 0, 0, 0, 0, 0, + 0, 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, 502, 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, 0, 0, 0, 0, 0, 0, 505, + 506, 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, 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, 0, 0, 0, 0, 0, 0, 0, 512, 0, 0, 0, 0, 0, + 0, 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, 517, 0, 0, 0, 0, 0, 0, + 518, 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, 0, 0, 0, 0, 0, 0, 0, 522, 0, 0, 0, 0, 0, 0, 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, 527, 0, 0, 0, 0, 0, 0, 528, 0, 0, 0, 0, + 0, 0, 529, 0, 0, 0, 0, 0, 0, 530, 0, 0, 0, 0, 0, 0, 531, 0, 0, 0, 0, 0, + 532, 533, 0, 0, 0, 0, 0, 534, 0, 0, 0, 0, 0, 0, 535, 0, 0, 0, 0, 0, 0, + 536, 0, 0, 0, 0, 0, 0, 537, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 538, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 539, 540, 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, 543, 0, 0, 0, 0, 0, 0, 544, 0, 0, 0, 0, 0, 0, 545, 0, 0, 0, 0, 0, 546, + 547, 0, 0, 0, 0, 0, 548, 0, 0, 0, 0, 0, 0, 549, 0, 0, 0, 0, 0, 0, 550, 0, + 0, 0, 0, 0, 0, 551, 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, 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, 559, 0, 0, 0, 0, 0, 0, 560, 0, 0, 0, 0, 0, 0, + 561, 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, 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, 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, 573, 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, 577, 578, 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, 581, 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, 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, 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, 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, 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, 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, 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, + 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, 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, 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, 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, + 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, 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, 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, 0, 0, 0, 0, 0, 0, 0, 634, 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, 636, 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, + 638, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 639, 640, 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, 642, 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, + 644, 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, 646, 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, 648, 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, 650, 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, 652, 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, + 654, 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, 656, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 657, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 658, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 659, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 660, 661, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 662, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 663, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 664, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 665, 666, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 667, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 668, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 669, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 670, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 671, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 672, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 673, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 674, }; -static unsigned short comp_data[] = { - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8814, 0, 0, 0, 0, 0, 8800, 0, 0, 0, 0, - 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 7682, 0, 0, 7684, 0, 0, 0, 0, 0, 0, - 0, 0, 7686, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 262, 264, 0, 0, 0, 266, - 0, 0, 0, 0, 268, 0, 0, 0, 0, 0, 0, 0, 0, 0, 199, 0, 0, 0, 0, 0, 0, 7690, - 0, 0, 0, 0, 270, 0, 0, 0, 0, 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, 0, 0, 0, 0, - 0, 0, 0, 0, 7710, 0, 0, 0, 0, 0, 0, 0, 0, 500, 284, 0, 7712, 286, 288, 0, - 0, 0, 0, 486, 0, 0, 0, 0, 0, 0, 0, 0, 0, 290, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 292, 0, 0, 0, 7714, 7718, 0, 0, 0, 542, 0, 0, 0, 0, 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, 0, 0, 0, 0, 302, 0, 0, 7724, 0, - 0, 0, 0, 0, 0, 308, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7728, 0, 488, 0, - 0, 0, 0, 0, 7730, 0, 0, 0, 310, 0, 0, 0, 0, 7732, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 313, 0, 0, 0, 0, 0, 0, 0, 0, 0, 317, 0, 0, 0, 0, 0, 7734, 0, - 0, 0, 315, 0, 7740, 0, 0, 7738, 0, 0, 0, 0, 7742, 0, 0, 0, 0, 7744, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 7746, 0, 0, 0, 0, 504, 323, 0, 209, 0, 0, 7748, - 0, 0, 0, 0, 327, 0, 0, 0, 0, 0, 7750, 0, 0, 0, 325, 0, 7754, 0, 0, 7752, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, - 0, 0, 0, 0, 0, 7764, 0, 0, 0, 0, 7766, 0, 0, 0, 0, 0, 0, 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, 0, 0, 346, 348, 0, 0, 0, 7776, 0, 0, 0, 0, 352, 0, 0, - 0, 0, 0, 7778, 0, 0, 536, 350, 0, 0, 0, 0, 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, 0, 0, - 0, 0, 0, 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, 0, 0, 0, 0, 7804, 0, 0, 0, 0, 0, 7806, 0, 0, 0, 0, 7808, 7810, 372, 0, - 0, 0, 7814, 7812, 0, 7816, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7818, 7820, 0, - 0, 0, 0, 0, 0, 7922, 221, 374, 7928, 562, 0, 7822, 376, 7926, 0, 0, 0, 0, - 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, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 7683, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 7685, 7687, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 263, 265, 0, 0, 0, - 267, 0, 0, 0, 0, 269, 0, 231, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 7711, 0, - 0, 0, 0, 0, 0, 0, 0, 501, 285, 0, 7713, 287, 289, 0, 0, 0, 0, 487, 0, - 291, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 309, 0, 0, 0, 0, 0, - 0, 0, 0, 496, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7729, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 489, 0, 0, 0, 0, 0, 7731, 0, 0, 0, 311, 0, 0, 0, 0, 7733, 0, 0, 0, - 0, 314, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 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, 0, - 0, 0, 0, 7765, 0, 0, 0, 0, 7767, 0, 0, 0, 0, 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, 0, 0, 0, 0, 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, 0, 0, 0, 0, 7787, - 7831, 0, 0, 0, 357, 0, 0, 0, 0, 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, 0, - 0, 0, 0, 7805, 0, 0, 0, 0, 0, 7807, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 7809, 7811, 373, 0, 0, 0, 7815, 7813, 0, 7832, 0, 0, 0, 0, 0, 0, 0, 7817, - 0, 0, 7819, 7821, 0, 0, 0, 0, 0, 0, 7923, 253, 375, 7929, 563, 0, 7823, - 255, 7927, 7833, 0, 0, 0, 0, 0, 0, 0, 7925, 0, 0, 0, 0, 0, 378, 7825, 0, - 0, 0, 380, 0, 0, 0, 0, 382, 0, 0, 0, 0, 0, 7827, 0, 0, 0, 0, 0, 0, 0, 0, - 7829, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8173, 901, 0, 0, 8129, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 7846, 7844, 0, 7850, 0, 0, 0, 0, 7848, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 478, 0, 0, 506, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 508, 0, - 0, 482, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7688, 0, 0, 0, 0, 7872, 7870, 0, - 7876, 0, 0, 0, 0, 7874, 0, 0, 0, 0, 0, 0, 7726, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 7890, 7888, 0, 7894, 0, 0, 0, 0, 7892, 0, 0, 0, 0, 0, 0, - 7756, 0, 0, 556, 0, 0, 7758, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 554, 0, 0, - 510, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 475, 471, 0, 0, 469, 0, 0, 0, 0, - 0, 0, 473, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7847, 7845, 0, 7851, 0, 0, 0, 0, - 7849, 0, 0, 0, 0, 0, 0, 0, 0, 0, 479, 0, 0, 507, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 509, 0, 0, 483, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7689, 0, 0, - 0, 0, 7873, 7871, 0, 7877, 0, 0, 0, 0, 7875, 0, 0, 0, 0, 0, 0, 7727, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7891, 7889, 0, 7895, 0, 0, 0, 0, 7893, - 0, 0, 0, 0, 0, 0, 7757, 0, 0, 557, 0, 0, 7759, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 555, 0, 0, 511, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 476, 472, 0, 0, - 470, 0, 0, 0, 0, 0, 0, 474, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7856, 7854, 0, - 7860, 0, 0, 0, 0, 7858, 0, 0, 0, 0, 0, 7857, 7855, 0, 7861, 0, 0, 0, 0, - 7859, 0, 0, 0, 0, 0, 7700, 7702, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 7701, 7703, 0, 0, 0, 0, 7760, 7762, 0, 0, 0, 0, 7761, 7763, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 7780, 0, 0, 0, 0, 0, 7781, 0, 0, 0, 0, 0, 7782, 0, 0, - 0, 0, 0, 7783, 0, 0, 0, 0, 0, 0, 0, 0, 7800, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 7801, 0, 0, 0, 7802, 0, 0, 0, 0, 0, 7803, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 7835, 0, 0, 0, 0, 0, 0, 0, 7900, 7898, 0, 7904, 0, 0, - 0, 0, 7902, 0, 0, 0, 0, 0, 0, 0, 0, 7906, 0, 0, 0, 0, 7901, 7899, 0, - 7905, 0, 0, 0, 0, 7903, 0, 0, 0, 0, 0, 0, 0, 0, 7907, 0, 0, 0, 0, 7914, - 7912, 0, 7918, 0, 0, 0, 0, 7916, 0, 0, 0, 0, 0, 0, 0, 0, 7920, 0, 0, 0, - 0, 7915, 7913, 0, 7919, 0, 0, 0, 0, 7917, 0, 0, 0, 0, 0, 0, 0, 0, 7921, - 0, 0, 0, 0, 0, 0, 0, 494, 0, 0, 0, 0, 0, 0, 492, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 493, 0, 0, 0, 0, 0, 480, 0, 0, 0, 0, 0, 481, 0, 0, 0, 0, - 0, 0, 7708, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7709, 0, 0, 0, 0, 560, - 0, 0, 0, 0, 0, 561, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 495, 0, 0, 8122, - 902, 0, 0, 8121, 8120, 7944, 7945, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 8124, 8136, 904, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7960, 7961, 0, 0, 0, - 0, 0, 0, 8138, 905, 0, 0, 0, 0, 7976, 7977, 0, 0, 0, 0, 0, 8140, 0, 0, 0, - 0, 0, 0, 0, 0, 8154, 906, 0, 0, 8153, 8152, 0, 938, 0, 0, 0, 0, 0, 0, - 7992, 7993, 0, 0, 0, 0, 0, 0, 8184, 908, 0, 0, 0, 0, 8008, 8009, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8172, 0, 0, 0, 0, 0, 0, 8170, 910, 0, 0, - 8169, 8168, 0, 939, 0, 0, 0, 0, 0, 0, 0, 8025, 0, 0, 0, 0, 0, 0, 8186, - 911, 0, 0, 0, 0, 8040, 8041, 0, 0, 0, 0, 0, 8188, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 8116, 0, 0, 0, 0, 0, 8132, 0, 0, 0, 0, 0, 0, 0, 0, 8048, - 940, 0, 0, 8113, 8112, 0, 0, 0, 0, 0, 0, 0, 0, 7936, 7937, 0, 0, 0, 0, - 8118, 8115, 0, 0, 0, 0, 0, 0, 0, 0, 8050, 941, 0, 0, 0, 0, 7952, 7953, 0, - 0, 0, 0, 0, 0, 8052, 942, 0, 0, 0, 0, 7968, 7969, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 8134, 8131, 8054, 943, 0, 0, 8145, 8144, 0, 970, 0, 0, 0, 0, - 0, 0, 7984, 7985, 0, 0, 0, 0, 8150, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8056, 972, - 0, 0, 0, 0, 8000, 8001, 0, 0, 0, 0, 8164, 8165, 0, 0, 0, 0, 0, 0, 8058, - 973, 0, 0, 8161, 8160, 0, 971, 0, 0, 0, 0, 0, 0, 8016, 8017, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 8166, 0, 8060, 974, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 8032, 8033, 0, 0, 0, 0, 8182, 8179, 0, 0, 0, 0, 0, 0, 0, 0, 8146, - 912, 0, 0, 8151, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8162, 944, 0, 0, 8167, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8180, 0, 979, 0, 0, 0, 0, 0, 980, 0, - 0, 0, 0, 0, 1031, 0, 0, 0, 1232, 0, 1234, 0, 0, 0, 0, 0, 0, 0, 1027, 0, - 0, 0, 0, 1024, 0, 0, 0, 0, 1238, 0, 1025, 0, 0, 0, 1217, 0, 1244, 0, 0, - 0, 0, 0, 1246, 0, 0, 0, 0, 0, 0, 1037, 0, 0, 0, 1250, 1049, 0, 1252, 0, - 0, 0, 0, 0, 0, 0, 1036, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1254, 0, 0, - 1262, 1038, 0, 1264, 0, 0, 1266, 0, 0, 1268, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 1272, 0, 0, 0, 0, 0, 1260, 0, 0, 0, 1233, 0, 1235, 0, 0, 0, - 0, 0, 0, 0, 1107, 0, 0, 0, 0, 1104, 0, 0, 0, 0, 1239, 0, 1105, 0, 0, 0, - 1218, 0, 1245, 0, 0, 0, 0, 0, 1247, 0, 0, 0, 0, 0, 0, 1117, 0, 0, 0, - 1251, 1081, 0, 1253, 0, 0, 0, 0, 0, 0, 0, 1116, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 1255, 0, 0, 1263, 1118, 0, 1265, 0, 0, 1267, 0, 0, 1269, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1273, 0, 0, 0, 0, 0, 1261, 0, 0, 0, 0, - 0, 1111, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1142, 0, 0, 0, 0, 0, 1143, 0, 0, - 0, 0, 0, 0, 0, 0, 1242, 0, 0, 0, 0, 0, 1243, 0, 0, 0, 0, 0, 1258, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1259, 0, 0, 0, 0, 1570, 1571, 1573, 0, - 0, 0, 0, 1572, 0, 0, 0, 0, 0, 1574, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1730, 0, 0, 0, 0, 0, 1747, 0, 0, 0, 0, 0, 1728, 0, 0, 0, 0, 0, 0, 0, - 2345, 0, 0, 0, 0, 0, 2353, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2356, - 0, 0, 0, 0, 0, 0, 2507, 2508, 0, 0, 0, 0, 0, 0, 2891, 2888, 2892, 0, 0, - 0, 0, 0, 0, 0, 2964, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3018, 3020, 0, - 0, 0, 0, 3019, 0, 0, 0, 0, 0, 0, 0, 3144, 0, 0, 0, 0, 0, 0, 0, 3264, 0, - 0, 0, 0, 3274, 3271, 3272, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3275, 0, - 0, 0, 0, 0, 0, 0, 3402, 3404, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3403, - 0, 0, 0, 0, 0, 0, 0, 3546, 3548, 3550, 0, 0, 0, 3549, 0, 0, 0, 0, 0, 0, - 0, 0, 4134, 0, 0, 0, 0, 0, 0, 6918, 0, 0, 0, 0, 0, 6920, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 6922, 0, 0, 0, 0, 0, 6924, 0, 0, 0, 0, 0, 6926, - 0, 0, 0, 0, 0, 6930, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6971, 0, 0, - 0, 0, 0, 6973, 0, 0, 0, 0, 0, 6976, 0, 0, 0, 0, 0, 6977, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 6979, 0, 0, 0, 0, 0, 0, 7736, 0, 0, 0, 0, 0, - 7737, 0, 0, 0, 0, 0, 7772, 0, 0, 0, 0, 0, 7773, 0, 0, 0, 0, 0, 0, 0, - 7784, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7785, 0, 7852, 0, 0, 7862, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7853, 0, 0, 7863, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 7878, 0, 0, 0, 0, 0, 7879, 0, 0, 0, 0, 0, 7896, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 7897, 0, 0, 0, 7938, 7940, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 7942, 8064, 7939, 7941, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7943, 8065, - 0, 0, 0, 0, 0, 8066, 0, 0, 0, 0, 0, 8067, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 8068, 0, 0, 0, 0, 0, 8069, 0, 0, 0, 0, 0, 8070, 0, 0, 0, 0, 0, - 8071, 0, 0, 0, 0, 0, 0, 0, 0, 7946, 7948, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 7950, 8072, 7947, 7949, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7951, 8073, 0, 0, - 0, 0, 0, 8074, 0, 0, 0, 0, 0, 8075, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 8076, 0, 0, 0, 0, 0, 8077, 0, 0, 0, 0, 0, 8078, 0, 0, 0, 0, 0, 8079, - 0, 0, 0, 0, 0, 0, 0, 0, 7954, 7956, 0, 0, 0, 0, 7955, 7957, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 7962, 7964, 0, 0, 0, 0, 7963, 7965, 0, 0, 0, 0, - 7970, 7972, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7974, 8080, 7971, 7973, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 7975, 8081, 0, 0, 0, 0, 0, 8082, 0, 0, 0, 0, 0, - 8083, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8084, 0, 0, 0, 0, 0, 8085, - 0, 0, 0, 0, 0, 8086, 0, 0, 0, 0, 0, 8087, 0, 0, 0, 0, 0, 0, 0, 0, 7978, - 7980, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7982, 8088, 7979, 7981, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 7983, 8089, 0, 0, 0, 0, 0, 8090, 0, 0, 0, 0, 0, 8091, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8092, 0, 0, 0, 0, 0, 8093, 0, 0, - 0, 0, 0, 8094, 0, 0, 0, 0, 0, 8095, 0, 0, 0, 0, 0, 0, 0, 0, 7986, 7988, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7990, 0, 7987, 7989, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 7991, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7994, 7996, 0, 0, 7998, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 7995, 7997, 0, 0, 7999, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 8002, 8004, 0, 0, 0, 0, 8003, 8005, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 8010, 8012, 0, 0, 0, 0, 8011, 8013, 0, 0, 0, 0, 8018, 8020, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 8022, 0, 8019, 8021, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 8023, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8027, 8029, 0, 0, 8031, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 8034, 8036, 0, 0, 8038, 8096, 0, 0, 0, 0, 0, 0, 0, 0, 8035, - 8037, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8039, 8097, 0, 0, 0, 0, 0, 8098, 0, - 0, 0, 0, 0, 8099, 0, 0, 0, 0, 0, 8100, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 8101, 0, 0, 0, 0, 0, 8102, 0, 0, 0, 0, 0, 8103, 0, 0, 0, 0, 0, 0, - 0, 0, 8042, 8044, 0, 0, 8046, 8104, 0, 0, 0, 0, 0, 0, 0, 0, 8043, 8045, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8047, 8105, 0, 0, 0, 0, 0, 8106, 0, 0, 0, - 0, 0, 8107, 0, 0, 0, 0, 0, 8108, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 8109, 0, 0, 0, 0, 0, 8110, 0, 0, 0, 0, 0, 8111, 0, 0, 0, 0, 0, 8114, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8130, 0, 0, 0, 0, 0, 8178, 0, 0, 0, - 0, 0, 8119, 0, 0, 0, 0, 0, 0, 0, 0, 8141, 8142, 0, 0, 8143, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8135, 0, 0, 0, 0, 0, 8183, 0, 0, 0, 0, 0, - 0, 0, 0, 8157, 8158, 0, 0, 8159, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 8602, 0, 0, 0, 0, 0, 8603, 0, 0, 0, 0, 0, 8622, 0, 0, 0, 0, 0, 8653, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8655, 0, 0, 0, 0, 0, 8654, 0, 0, 0, - 0, 0, 8708, 0, 0, 0, 0, 0, 8713, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 8716, 0, 0, 0, 0, 0, 8740, 0, 0, 0, 0, 0, 8742, 0, 0, 0, 0, 0, 8769, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8772, 0, 0, 0, 0, 0, 8775, 0, 0, 0, - 0, 0, 8777, 0, 0, 0, 0, 0, 8813, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 8802, 0, 0, 0, 0, 0, 8816, 0, 0, 0, 0, 0, 8817, 0, 0, 0, 0, 0, 8820, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8821, 0, 0, 0, 0, 0, 8824, 0, 0, 0, - 0, 0, 8825, 0, 0, 0, 0, 0, 8832, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 8833, 0, 0, 0, 0, 0, 8928, 0, 0, 0, 0, 0, 8929, 0, 0, 0, 0, 0, 8836, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8837, 0, 0, 0, 0, 0, 8840, 0, 0, 0, - 0, 0, 8841, 0, 0, 0, 0, 0, 8930, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 8931, 0, 0, 0, 0, 0, 8876, 0, 0, 0, 0, 0, 8877, 0, 0, 0, 0, 0, 8878, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8879, 0, 0, 0, 0, 0, 8938, 0, 0, 0, - 0, 0, 8939, 0, 0, 0, 0, 0, 8940, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 8941, 0, 0, 0, 0, 0, 0, 12436, 0, 0, 0, 0, 0, 12364, 0, 0, 0, 0, 0, - 12366, 0, 0, 0, 0, 0, 12368, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 12370, 0, 0, 0, 0, 0, 12372, 0, 0, 0, 0, 0, 12374, 0, 0, 0, 0, 0, 12376, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12378, 0, 0, 0, 0, 0, 12380, 0, 0, - 0, 0, 0, 12382, 0, 0, 0, 0, 0, 12384, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 12386, 0, 0, 0, 0, 0, 12389, 0, 0, 0, 0, 0, 12391, 0, 0, 0, 0, 0, - 12393, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12400, 12401, 0, 0, 0, 0, - 12403, 12404, 0, 0, 0, 0, 12406, 12407, 0, 0, 0, 0, 12409, 12410, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12412, 12413, 0, 0, 0, 0, 12446, 0, 0, 0, - 0, 0, 12532, 0, 0, 0, 0, 0, 12460, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 12462, 0, 0, 0, 0, 0, 12464, 0, 0, 0, 0, 0, 12466, 0, 0, 0, 0, 0, 12468, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12470, 0, 0, 0, 0, 0, 12472, 0, 0, - 0, 0, 0, 12474, 0, 0, 0, 0, 0, 12476, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 12478, 0, 0, 0, 0, 0, 12480, 0, 0, 0, 0, 0, 12482, 0, 0, 0, 0, 0, - 12485, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12487, 0, 0, 0, 0, 0, - 12489, 0, 0, 0, 0, 0, 12496, 12497, 0, 0, 0, 0, 12499, 12500, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 12502, 12503, 0, 0, 0, 0, 12505, 12506, 0, 0, 0, - 0, 12508, 12509, 0, 0, 0, 0, 12535, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 12536, 0, 0, 0, 0, 0, 12537, 0, 0, 0, 0, 0, 12538, 0, 0, 0, 0, 0, - 12542, 0, +static unsigned int comp_data[] = { + 0, 0, 0, 0, 0, 0, 0, 8814, 0, 0, 8800, 0, 0, 8815, 0, 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, 7682, 0, 0, 7684, 0, 0, 0, 0, 7686, 0, 262, + 264, 0, 0, 0, 266, 0, 0, 0, 0, 268, 0, 199, 0, 0, 0, 7690, 0, 0, 0, 0, + 270, 0, 0, 0, 0, 0, 7692, 0, 0, 0, 7696, 0, 7698, 0, 0, 7694, 0, 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, 0, 7710, 0, 500, 284, 0, + 7712, 286, 288, 0, 0, 0, 0, 486, 0, 290, 0, 0, 0, 292, 0, 0, 0, 7714, + 7718, 0, 0, 0, 542, 0, 0, 0, 0, 0, 7716, 0, 0, 0, 7720, 0, 0, 7722, 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, 308, 0, 7728, 0, 0, 0, 0, + 0, 488, 0, 7730, 0, 0, 0, 310, 0, 0, 0, 0, 7732, 0, 0, 0, 0, 0, 313, 0, + 317, 0, 0, 0, 0, 0, 7734, 0, 0, 0, 315, 0, 7740, 0, 0, 7738, 0, 0, 0, 0, + 0, 7742, 0, 0, 0, 0, 7744, 0, 0, 7746, 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, 0, 0, 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, 0, 0, 0, 7764, 7766, 0, 0, 0, 0, 0, + 340, 0, 0, 0, 0, 7768, 344, 528, 530, 0, 0, 0, 7770, 0, 0, 0, 342, 0, 0, + 0, 0, 7774, 0, 346, 348, 0, 0, 0, 7776, 0, 0, 0, 0, 352, 0, 7778, 0, 0, + 536, 350, 0, 0, 0, 7786, 0, 0, 0, 0, 356, 0, 7788, 0, 0, 538, 354, 0, + 7792, 0, 0, 7790, 0, 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, 7804, 0, 0, 0, 0, 0, 7806, 0, 7808, 7810, 372, 0, 0, 0, 7814, 7812, + 0, 7816, 0, 0, 0, 7818, 7820, 0, 0, 0, 7922, 221, 374, 7928, 562, 0, + 7822, 376, 7926, 0, 0, 0, 0, 7924, 0, 0, 377, 7824, 0, 0, 0, 379, 381, 0, + 0, 0, 0, 0, 7826, 0, 0, 0, 0, 7828, 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, 7683, 0, 0, 7685, 0, 0, 0, 0, 7687, 0, 0, 0, 0, 0, 263, 265, 0, 0, 0, + 267, 0, 0, 0, 0, 269, 0, 0, 0, 0, 0, 231, 0, 0, 0, 7691, 271, 0, 0, 0, 0, + 0, 7693, 0, 0, 0, 7697, 0, 7699, 0, 0, 7695, 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, 7711, 0, 0, 0, 0, 0, 501, 285, 0, 7713, 287, + 289, 0, 0, 0, 0, 487, 0, 0, 0, 0, 0, 291, 0, 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, 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, 309, 0, 0, 0, 0, 496, + 0, 0, 0, 0, 7729, 0, 489, 0, 0, 0, 0, 0, 7731, 0, 0, 0, 311, 7733, 0, 0, + 0, 0, 0, 314, 0, 318, 0, 0, 0, 0, 0, 7735, 0, 0, 0, 316, 0, 7741, 0, 0, + 7739, 0, 7743, 0, 0, 0, 0, 7745, 0, 0, 7747, 0, 0, 0, 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, 0, 0, 0, 242, 243, 244, 245, 333, 335, 559, 246, 7887, 0, 337, + 466, 525, 527, 0, 0, 417, 7885, 491, 0, 0, 0, 0, 0, 7765, 0, 0, 0, 0, + 7767, 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, 347, 349, 0, 0, 0, 7777, 0, 0, 0, 0, + 353, 0, 7779, 0, 0, 537, 351, 0, 0, 0, 7787, 7831, 0, 0, 0, 357, 0, 0, 0, + 0, 0, 7789, 0, 0, 539, 355, 0, 7793, 0, 0, 7791, 0, 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, 0, 7805, 0, 7807, 0, 0, + 0, 0, 0, 7809, 7811, 373, 0, 0, 0, 7815, 7813, 0, 7832, 0, 0, 0, 7817, 0, + 0, 0, 7819, 7821, 0, 0, 0, 7923, 253, 375, 7929, 563, 0, 7823, 255, 7927, + 7833, 0, 0, 0, 7925, 0, 0, 378, 7825, 0, 0, 0, 380, 0, 0, 0, 0, 382, 0, + 7827, 0, 0, 0, 0, 7829, 0, 0, 0, 0, 8173, 901, 0, 0, 0, 0, 0, 0, 8129, 0, + 0, 7846, 7844, 0, 7850, 0, 0, 0, 0, 7848, 0, 0, 478, 0, 0, 0, 506, 0, 0, + 508, 0, 0, 482, 0, 0, 0, 7688, 0, 7872, 7870, 0, 7876, 0, 0, 0, 0, 7874, + 0, 0, 0, 7726, 0, 0, 0, 0, 0, 7890, 7888, 0, 7894, 0, 0, 0, 0, 7892, 0, + 0, 0, 7756, 0, 0, 556, 0, 0, 7758, 0, 0, 0, 554, 0, 0, 0, 510, 0, 0, 0, + 0, 0, 475, 471, 0, 0, 469, 0, 0, 473, 0, 0, 0, 7847, 7845, 0, 7851, 0, 0, + 0, 0, 7849, 0, 0, 479, 0, 0, 0, 507, 0, 0, 509, 0, 0, 483, 0, 0, 0, 7689, + 0, 7873, 7871, 0, 7877, 0, 0, 0, 0, 7875, 0, 0, 0, 7727, 0, 0, 0, 0, 0, + 7891, 7889, 0, 7895, 0, 0, 0, 0, 7893, 0, 0, 0, 7757, 0, 0, 557, 0, 0, + 7759, 0, 0, 0, 555, 0, 0, 0, 511, 0, 0, 0, 0, 0, 476, 472, 0, 0, 470, 0, + 0, 474, 0, 0, 0, 7856, 7854, 0, 7860, 0, 0, 0, 0, 7858, 0, 0, 7857, 7855, + 0, 7861, 0, 0, 0, 0, 7859, 0, 0, 7700, 7702, 0, 0, 0, 0, 0, 7701, 7703, + 0, 0, 0, 0, 0, 7760, 7762, 0, 7761, 7763, 0, 0, 0, 7780, 0, 0, 7781, 0, + 0, 7782, 0, 0, 0, 0, 0, 0, 7783, 0, 7800, 0, 0, 7801, 0, 0, 0, 0, 7802, + 0, 0, 7803, 0, 0, 0, 0, 0, 7835, 0, 0, 0, 0, 7900, 7898, 0, 7904, 0, 0, + 0, 0, 7902, 7906, 0, 0, 0, 0, 0, 7901, 7899, 0, 7905, 0, 0, 0, 0, 7903, + 0, 0, 0, 0, 7907, 0, 7914, 7912, 0, 7918, 0, 0, 0, 0, 7916, 0, 0, 0, 0, + 7920, 0, 7915, 7913, 0, 7919, 7917, 0, 0, 0, 0, 7921, 0, 0, 0, 0, 494, 0, + 0, 0, 492, 0, 0, 493, 0, 0, 480, 0, 0, 0, 0, 0, 0, 481, 0, 0, 0, 7708, 0, + 0, 7709, 0, 560, 0, 0, 0, 0, 0, 0, 561, 0, 495, 0, 0, 0, 8122, 902, 0, 0, + 8121, 8120, 0, 0, 0, 0, 7944, 7945, 0, 0, 0, 0, 0, 8124, 0, 8136, 904, 0, + 0, 0, 0, 7960, 7961, 0, 0, 0, 8138, 905, 0, 0, 0, 0, 7976, 7977, 0, 8140, + 0, 0, 0, 0, 0, 8154, 906, 0, 0, 8153, 8152, 0, 938, 0, 0, 7992, 7993, 0, + 0, 0, 8184, 908, 0, 0, 0, 0, 8008, 8009, 0, 0, 0, 0, 0, 0, 8172, 0, 0, 0, + 8170, 910, 0, 0, 8169, 8168, 0, 939, 0, 0, 0, 8025, 0, 0, 0, 8186, 911, + 8040, 8041, 0, 0, 0, 0, 0, 8188, 0, 0, 8116, 0, 0, 8132, 0, 0, 0, 0, 0, + 8048, 940, 0, 0, 8113, 8112, 0, 0, 0, 0, 7936, 7937, 0, 0, 0, 0, 8118, + 8115, 0, 0, 0, 0, 0, 8050, 941, 7952, 7953, 0, 0, 0, 8052, 942, 0, 0, 0, + 0, 7968, 7969, 0, 0, 0, 0, 8134, 8131, 0, 8054, 943, 0, 0, 8145, 8144, 0, + 970, 0, 0, 7984, 7985, 8150, 0, 0, 0, 0, 0, 0, 8056, 972, 0, 0, 0, 0, + 8000, 8001, 0, 8164, 8165, 0, 0, 0, 8058, 973, 0, 0, 8161, 8160, 0, 971, + 0, 0, 0, 0, 0, 0, 8016, 8017, 0, 0, 0, 0, 8166, 0, 0, 8060, 974, 0, 0, 0, + 0, 8032, 8033, 8182, 8179, 0, 0, 0, 0, 0, 8146, 912, 0, 0, 0, 0, 0, 0, + 8151, 0, 0, 8162, 944, 0, 0, 8167, 0, 0, 0, 8180, 0, 0, 979, 0, 0, 0, 0, + 0, 980, 0, 0, 1031, 0, 0, 0, 0, 1232, 0, 1234, 0, 0, 0, 0, 1027, 0, 1024, + 0, 0, 0, 0, 1238, 0, 1025, 1217, 0, 1244, 0, 0, 1246, 0, 0, 0, 1037, 0, + 0, 0, 1250, 1049, 0, 1252, 0, 0, 0, 0, 1036, 0, 0, 0, 0, 1254, 0, 0, 0, + 1262, 1038, 0, 1264, 0, 0, 1266, 0, 0, 0, 1268, 0, 0, 0, 0, 0, 0, 1272, + 0, 0, 1260, 0, 0, 0, 0, 1233, 0, 1235, 0, 0, 0, 0, 1107, 0, 1104, 0, 0, + 0, 0, 1239, 0, 1105, 1218, 0, 1245, 0, 0, 1247, 0, 0, 0, 1117, 0, 0, 0, + 1251, 1081, 0, 1253, 0, 0, 0, 0, 1116, 0, 0, 0, 0, 1255, 0, 0, 0, 1263, + 1118, 0, 1265, 0, 0, 1267, 0, 0, 0, 1269, 0, 0, 0, 0, 0, 0, 1273, 0, 0, + 1261, 0, 0, 1111, 0, 0, 0, 1142, 0, 0, 1143, 0, 0, 0, 0, 0, 1242, 0, 0, + 1243, 0, 0, 1258, 0, 0, 0, 0, 0, 0, 1259, 0, 1570, 1571, 1573, 0, 1572, + 0, 0, 1574, 0, 0, 0, 0, 0, 0, 1730, 0, 0, 1747, 0, 0, 1728, 0, 0, 0, 0, + 2345, 0, 0, 2353, 0, 0, 2356, 0, 0, 0, 2507, 2508, 0, 0, 0, 2891, 2888, + 2892, 2964, 0, 0, 0, 0, 0, 3018, 3020, 0, 3019, 0, 0, 0, 0, 3144, 0, 0, + 0, 0, 3264, 0, 3274, 3271, 3272, 0, 3275, 0, 0, 0, 0, 3402, 3404, 0, + 3403, 0, 0, 0, 0, 3546, 3548, 3550, 0, 0, 0, 0, 3549, 0, 0, 0, 0, 0, + 4134, 0, 0, 0, 6918, 0, 0, 6920, 0, 0, 6922, 0, 0, 6924, 0, 0, 0, 0, 0, + 0, 6926, 0, 0, 6930, 0, 0, 6971, 0, 0, 6973, 0, 0, 0, 0, 0, 0, 6976, 0, + 0, 6977, 0, 0, 6979, 0, 0, 0, 7736, 0, 0, 7737, 0, 0, 0, 0, 0, 0, 7772, + 0, 0, 7773, 0, 0, 0, 0, 7784, 0, 0, 7785, 0, 0, 7852, 0, 0, 7862, 0, 0, + 0, 7853, 0, 0, 7863, 0, 0, 0, 7878, 0, 0, 7879, 0, 0, 7896, 0, 0, 7897, + 0, 0, 0, 0, 7938, 7940, 0, 0, 7942, 8064, 0, 7939, 7941, 0, 0, 7943, + 8065, 0, 0, 8066, 0, 0, 0, 0, 0, 0, 8067, 0, 0, 8068, 0, 0, 8069, 0, 0, + 8070, 0, 0, 0, 0, 0, 0, 8071, 0, 7946, 7948, 0, 0, 7950, 8072, 0, 7947, + 7949, 0, 0, 7951, 8073, 0, 0, 8074, 0, 0, 0, 0, 0, 0, 8075, 0, 0, 8076, + 0, 0, 8077, 0, 0, 8078, 0, 0, 0, 0, 0, 0, 8079, 0, 7954, 7956, 0, 7955, + 7957, 0, 0, 0, 0, 0, 7962, 7964, 0, 0, 0, 0, 0, 7963, 7965, 0, 7970, + 7972, 0, 0, 7974, 8080, 0, 7971, 7973, 0, 0, 7975, 8081, 0, 0, 8082, 0, + 0, 0, 0, 0, 0, 8083, 0, 0, 8084, 0, 0, 8085, 0, 0, 8086, 0, 0, 0, 0, 0, + 0, 8087, 0, 7978, 7980, 0, 0, 7982, 8088, 0, 7979, 7981, 0, 0, 7983, + 8089, 0, 0, 8090, 0, 0, 0, 0, 0, 0, 8091, 0, 0, 8092, 0, 0, 8093, 0, 0, + 8094, 0, 0, 0, 0, 0, 0, 8095, 0, 7986, 7988, 0, 0, 7990, 0, 0, 7987, + 7989, 0, 0, 7991, 0, 0, 0, 0, 0, 0, 7994, 7996, 0, 0, 0, 0, 0, 0, 7998, + 0, 0, 7995, 7997, 0, 0, 7999, 0, 0, 8002, 8004, 0, 8003, 8005, 0, 0, 0, + 0, 0, 8010, 8012, 0, 0, 0, 0, 0, 8011, 8013, 0, 8018, 8020, 0, 0, 8022, + 0, 0, 8019, 8021, 0, 0, 8023, 0, 0, 0, 0, 0, 0, 8027, 8029, 0, 0, 0, 0, + 0, 0, 8031, 0, 0, 8034, 8036, 0, 0, 8038, 8096, 0, 8035, 8037, 0, 0, + 8039, 8097, 0, 0, 8098, 0, 0, 8099, 0, 0, 0, 0, 0, 0, 8100, 0, 0, 8101, + 0, 0, 8102, 0, 0, 8103, 0, 0, 0, 0, 0, 8042, 8044, 0, 0, 8046, 8104, 0, + 8043, 8045, 0, 0, 8047, 8105, 0, 0, 8106, 0, 0, 8107, 0, 0, 0, 0, 0, 0, + 8108, 0, 0, 8109, 0, 0, 8110, 0, 0, 8111, 0, 0, 0, 0, 0, 0, 8114, 0, 0, + 8130, 0, 0, 8178, 0, 0, 8119, 0, 0, 0, 0, 0, 8141, 8142, 0, 0, 8143, 0, + 0, 0, 8135, 0, 0, 8183, 0, 0, 0, 0, 0, 8157, 8158, 0, 0, 0, 0, 0, 0, + 8159, 0, 8602, 0, 0, 8603, 0, 0, 0, 0, 0, 0, 8622, 0, 0, 8653, 0, 0, + 8655, 0, 0, 8654, 0, 0, 0, 0, 0, 0, 8708, 0, 0, 8713, 0, 0, 8716, 0, 0, + 8740, 0, 0, 0, 0, 0, 0, 8742, 0, 0, 8769, 0, 0, 8772, 0, 0, 8775, 0, 0, + 0, 0, 0, 0, 8777, 0, 0, 8813, 0, 0, 8802, 0, 0, 8816, 0, 0, 0, 0, 0, 0, + 8817, 0, 0, 8820, 0, 0, 8821, 0, 0, 8824, 0, 0, 0, 0, 0, 0, 8825, 0, 0, + 8832, 0, 0, 8833, 0, 0, 8928, 0, 0, 0, 0, 0, 0, 8929, 0, 0, 8836, 0, 0, + 8837, 0, 0, 8840, 0, 0, 0, 0, 0, 0, 8841, 0, 0, 8930, 0, 0, 8931, 0, 0, + 8876, 0, 0, 0, 0, 0, 0, 8877, 0, 0, 8878, 0, 0, 8879, 0, 0, 8938, 0, 0, + 0, 0, 0, 0, 8939, 0, 0, 8940, 0, 0, 8941, 0, 0, 0, 12436, 0, 0, 12364, 0, + 0, 0, 0, 0, 0, 12366, 0, 0, 12368, 0, 0, 12370, 0, 0, 12372, 0, 0, 0, 0, + 0, 0, 12374, 0, 0, 12376, 0, 0, 12378, 0, 0, 12380, 0, 0, 0, 0, 0, 0, + 12382, 0, 0, 12384, 0, 0, 12386, 0, 0, 12389, 0, 0, 0, 0, 0, 0, 12391, 0, + 0, 12393, 0, 0, 12400, 12401, 0, 12403, 12404, 0, 0, 0, 0, 0, 12406, + 12407, 0, 0, 0, 0, 0, 12409, 12410, 0, 12412, 12413, 0, 12446, 0, 0, 0, + 0, 0, 0, 12532, 0, 0, 12460, 0, 0, 12462, 0, 0, 12464, 0, 0, 0, 0, 0, 0, + 12466, 0, 0, 12468, 0, 0, 12470, 0, 0, 12472, 0, 0, 0, 0, 0, 0, 12474, 0, + 0, 12476, 0, 0, 12478, 0, 0, 12480, 0, 0, 0, 0, 0, 0, 12482, 0, 0, 12485, + 0, 0, 12487, 0, 0, 12489, 0, 0, 0, 0, 0, 0, 12496, 12497, 0, 0, 0, 0, 0, + 12499, 12500, 0, 12502, 12503, 0, 12505, 12506, 0, 0, 0, 0, 0, 12508, + 12509, 0, 0, 0, 0, 0, 12535, 0, 0, 12536, 0, 0, 12537, 0, 0, 0, 0, 0, 0, + 12538, 0, 0, 12542, 0, 0, 0, 0, 69786, 0, 0, 69788, 0, 0, 69803, }; static const change_record change_records_3_2_0[] = { @@ -4700,6 +4929,11 @@ { 255, 29, 255, 255, 0 }, { 255, 26, 255, 255, 0 }, { 5, 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 }, @@ -4729,42 +4963,42 @@ { 255, 23, 255, 255, 0 }, { 9, 255, 255, 255, 0 }, { 255, 20, 255, 255, 0 }, - { 255, 255, 255, 255, -1 }, { 255, 255, 255, 255, 1e+16 }, { 255, 255, 255, 255, 1e+20 }, { 255, 19, 255, 255, 0 }, { 15, 255, 255, 255, 0 }, { 255, 19, 255, 255, -1 }, + { 1, 255, 255, 0, 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, 2, 2, 14, 15, 16, 17, - 18, 19, 20, 21, 22, 2, 2, 2, 23, 24, 25, 26, 2, 2, 27, 28, 29, 30, 2, 2, - 2, 2, 2, 31, 2, 32, 33, 34, 35, 36, 37, 2, 38, 39, 40, 2, 41, 42, 2, 43, - 2, 2, 44, 45, 46, 47, 48, 2, 2, 49, 50, 51, 2, 2, 52, 53, 2, 54, 55, 55, - 2, 2, 2, 2, 56, 2, 57, 58, 59, 60, 61, 2, 2, 2, 2, 62, 63, 64, 65, 66, - 67, 68, 69, 70, 2, 2, 2, 2, 2, 2, 71, 2, 2, 2, 2, 2, 72, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 73, 2, 74, 2, 2, 2, 2, 2, 2, 2, 2, 75, 76, 2, 2, 2, - 2, 2, 2, 2, 77, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 78, 79, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 80, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 0, 1, 2, 2, 3, 4, 5, 6, 2, 7, 8, 9, 10, 11, 12, 13, 14, 2, 15, 16, 17, + 18, 19, 20, 21, 22, 23, 2, 2, 2, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, + 34, 2, 2, 2, 35, 36, 2, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, + 49, 2, 50, 2, 2, 51, 52, 53, 54, 55, 2, 2, 56, 57, 58, 2, 2, 59, 60, 61, + 62, 63, 63, 2, 2, 2, 2, 64, 2, 65, 66, 67, 68, 69, 2, 2, 2, 2, 70, 71, + 72, 73, 74, 75, 76, 77, 78, 2, 2, 2, 2, 2, 2, 79, 2, 2, 2, 2, 2, 80, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 81, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 82, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 83, 84, 2, 2, 2, 2, 2, 2, 2, 2, 2, 41, 41, 85, 86, 41, 87, - 88, 89, 90, 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, 2, 2, 81, 2, 82, 2, 2, 2, 2, 2, 2, 2, 2, 83, + 84, 2, 2, 2, 2, 2, 2, 2, 85, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 86, 87, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 88, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 89, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 90, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 91, 92, 2, 2, 2, 2, 2, 2, 2, 2, 93, 48, 48, + 94, 95, 48, 96, 97, 98, 99, 100, 101, 102, 2, 103, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 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, 93, 94, 95, - 96, 2, 2, 2, 2, 97, 98, 2, 99, 100, 101, 102, 103, 104, 2, 105, 106, 107, - 108, 109, 2, 2, 2, 2, 2, 2, 110, 2, 111, 2, 112, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 104, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 41, 41, 41, 41, 41, 41, 113, 2, 114, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 105, 106, 107, 108, 109, 2, 2, 2, 2, 110, 111, 2, 112, 113, 114, + 115, 116, 117, 2, 118, 119, 120, 121, 122, 2, 2, 2, 2, 2, 2, 123, 2, 124, + 2, 125, 2, 126, 2, 127, 2, 2, 2, 128, 2, 2, 2, 2, 129, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 48, 48, 48, 48, 48, 48, 130, 2, 131, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 48, 48, 48, 48, 48, 48, 48, 48, 132, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, @@ -4777,33 +5011,33 @@ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 115, 2, 116, 2, 117, 2, 2, 118, 2, 2, 2, 119, - 120, 121, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 122, 123, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 124, 125, 82, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 71, 126, 2, 127, 128, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 133, 2, 134, 2, 135, 2, 2, 136, 2, 2, 2, 137, 138, 139, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 129, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 130, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 131, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 132, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 140, 141, 142, 143, + 144, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 145, 146, 90, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 79, 147, 2, 148, 149, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 150, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 151, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 152, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 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, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, + 48, 154, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 129, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 150, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, @@ -5037,8 +5271,9 @@ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 41, 133, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 48, + 155, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, @@ -5101,7 +5336,7 @@ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 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[] = { @@ -5149,7 +5384,7 @@ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 0, 0, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -5179,263 +5414,305 @@ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 7, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 0, 0, 0, 0, 0, + 0, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 12, 13, 14, 15, 16, 0, 0, 7, 0, 0, 0, 0, 0, 7, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, + 0, 0, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 0, 0, 0, 0, 0, + 0, 0, 0, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 0, + 17, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 0, 0, 0, 7, 7, 7, 7, 7, 7, + 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 18, 18, 18, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, + 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 7, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, + 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 0, 12, 0, 0, 0, 0, 0, 0, 12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 0, 0, 0, 0, 0, + 0, 0, 0, 7, 7, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, - 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 7, 7, 7, 7, 7, 7, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 13, 13, 13, 13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, + 7, 7, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 7, 0, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, - 0, 7, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 0, 0, 0, 0, 7, 7, 7, 7, 7, - 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 7, - 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 0, 7, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 0, 0, 0, 0, 0, + 0, 0, 0, 19, 20, 21, 22, 23, 24, 25, 26, 27, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 0, 0, 0, 0, 0, 0, - 0, 0, 14, 15, 16, 17, 18, 19, 20, 21, 22, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 18, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 23, 23, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 24, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 28, 28, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 29, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, + 0, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 7, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, - 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, - 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 0, 0, 0, 0, 7, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 7, 7, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, + 7, 7, 7, 0, 0, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, + 0, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, - 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, + 0, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 7, - 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, 0, 0, 0, 0, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 27, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, 0, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, - 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 28, 0, 0, 0, 29, 30, 31, 32, 33, 34, - 1, 1, 0, 0, 0, 0, 28, 6, 4, 5, 29, 30, 31, 32, 33, 34, 1, 1, 0, 0, 0, 0, - 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, + 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 7, 7, 7, 7, 7, + 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, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, 0, 7, 7, 7, + 7, 7, 7, 7, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 33, 8, 0, + 0, 34, 35, 36, 37, 38, 39, 1, 1, 0, 0, 0, 8, 33, 6, 4, 5, 34, 35, 36, 37, + 38, 39, 1, 1, 0, 0, 0, 0, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, - 0, 0, 0, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, + 0, 0, 0, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 36, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 40, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 41, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, 37, 38, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 43, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, - 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, - 39, 39, 39, 39, 39, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 44, 44, 44, 44, 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, 39, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 7, 7, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 7, 7, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 0, 0, 0, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 7, 7, 7, 7, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 0, 7, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, - 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, - 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, - 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, - 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, - 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, - 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, - 27, 27, 27, 27, 27, 27, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 7, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 32, + 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, + 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, + 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, + 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, + 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, + 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, + 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 7, 7, 7, 7, 7, 0, 0, 0, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, + 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, + 7, 7, 7, 7, 7, 7, 7, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 0, 7, 7, 7, 7, 7, 7, 7, 0, 7, 7, 7, 7, 7, 7, 7, 0, 7, 7, 7, 7, 7, 7, 7, 0, 7, 7, 7, 7, 7, 7, 7, 0, 7, 7, 7, 7, 7, 7, 7, 0, 7, 7, 7, 7, 7, 7, 7, 0, - 7, 7, 7, 7, 7, 7, 7, 0, 7, 7, 7, 7, 7, 7, 7, 0, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -5443,83 +5720,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, 40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 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, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, - 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 41, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 41, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 41, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 41, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 41, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 41, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 41, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 46, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 41, 0, 0, 0, 0, 0, 0, 0, 41, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 41, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -5528,50 +5805,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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 41, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 41, 0, 0, 0, 0, 0, 0, 0, 41, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, + 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 41, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 41, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -5579,50 +5862,70 @@ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 41, 0, 0, 0, 0, - 0, 0, 0, 41, 0, 0, 0, 0, 41, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 41, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 41, 0, 41, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 41, 0, 0, + 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 0, + 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, @@ -5630,158 +5933,202 @@ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 13, 13, 13, 13, 13, 13, 0, 0, 0, 1, 1, 13, 13, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 18, 18, 18, 18, 18, 18, 0, 0, 0, 1, 1, 18, + 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, 40, + 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 49, 49, 49, 0, 0, 0, 0, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 0, 7, 7, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, + 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 7, - 7, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 7, 7, 7, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, - 0, 0, 0, 7, 7, 7, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, - 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 7, 7, 7, 7, 7, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, - 0, 0, 0, 0, 0, 41, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 7, 7, 7, 7, 7, 7, + 0, 0, 0, 0, 0, 50, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 7, 7, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, + 7, 7, 0, 0, 7, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, + 7, 7, 0, 7, 7, 0, 0, 0, 7, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 0, 0, 7, 0, 7, 7, 7, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, 0, 7, 7, 0, 0, 0, 0, 0, + 7, 7, 7, 7, 7, 7, 7, 7, 0, 7, 7, 7, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 7, 7, 7, 0, + 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 7, 7, 0, 0, 0, 7, - 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, - 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 7, 7, 7, 7, 0, 7, 7, 0, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 0, - 7, 7, 7, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 7, 7, 7, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, 7, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, - 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 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, 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, 13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 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, 13, 0, - 0, 0, 0, 0, 0, 7, 7, 0, 0, 0, 0, 0, 0, 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, 51, + 0, 0, 0, 0, 0, 0, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 41, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 7, 0, 0, 7, 0, + 0, 0, 7, 0, 0, 0, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, + 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 7, 0, 7, 7, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, + 7, 7, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 41, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 41, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 41, 0, - 0, 0, 0, 0, 0, 0, 0, 41, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 41, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, + 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -5789,25 +6136,25 @@ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 41, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 41, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 41, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 41, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 41, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 41, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -5816,13 +6163,18 @@ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 41, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 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) Modified: python/branches/py3k/Modules/unicodename_db.h ============================================================================== --- python/branches/py3k/Modules/unicodename_db.h (original) +++ python/branches/py3k/Modules/unicodename_db.h Thu Mar 18 23:11:01 2010 @@ -6,498 +6,614 @@ static unsigned char lexicon[] = { 76, 69, 84, 84, 69, 210, 87, 73, 84, 200, 83, 77, 65, 76, 204, 83, 89, 76, 76, 65, 66, 76, 197, 83, 73, 71, 206, 67, 65, 80, 73, 84, 65, 204, - 76, 65, 84, 73, 206, 89, 201, 67, 74, 203, 65, 82, 65, 66, 73, 195, 67, - 79, 77, 80, 65, 84, 73, 66, 73, 76, 73, 84, 217, 77, 65, 84, 72, 69, 77, - 65, 84, 73, 67, 65, 204, 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, 79, 76, 196, 71, 82, 69, 69, 203, - 76, 73, 71, 65, 84, 85, 82, 197, 68, 73, 71, 73, 212, 65, 78, 196, 77, - 85, 83, 73, 67, 65, 204, 84, 73, 77, 69, 211, 69, 84, 72, 73, 79, 80, 73, - 195, 72, 65, 78, 71, 85, 204, 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, 86, 79, 87, 69, 204, 70, 79, 210, 67, 73, 82, 67, 76, 69, - 196, 86, 65, 201, 70, 73, 78, 65, 204, 67, 79, 77, 66, 73, 78, 73, 78, - 199, 83, 81, 85, 65, 82, 197, 86, 65, 82, 73, 65, 84, 73, 79, 206, 66, - 82, 65, 73, 76, 76, 197, 80, 65, 84, 84, 69, 82, 206, 82, 73, 71, 72, - 212, 76, 69, 70, 212, 66, 89, 90, 65, 78, 84, 73, 78, 197, 73, 83, 79, - 76, 65, 84, 69, 196, 194, 65, 66, 79, 86, 69, 128, 68, 79, 85, 66, 76, - 197, 75, 65, 84, 65, 75, 65, 78, 193, 75, 65, 78, 71, 88, 201, 76, 73, - 78, 69, 65, 210, 66, 69, 76, 79, 87, 128, 77, 79, 68, 73, 70, 73, 69, - 210, 83, 73, 71, 78, 128, 84, 73, 66, 69, 84, 65, 206, 77, 69, 69, 205, - 68, 79, 212, 65, 128, 65, 82, 82, 79, 87, 128, 73, 78, 73, 84, 73, 65, - 204, 67, 65, 82, 82, 73, 69, 210, 86, 69, 82, 84, 73, 67, 65, 204, 89, - 69, 200, 87, 72, 73, 84, 197, 65, 66, 79, 86, 197, 78, 85, 77, 66, 69, - 210, 85, 128, 65, 82, 82, 79, 215, 77, 79, 78, 71, 79, 76, 73, 65, 206, - 77, 89, 65, 78, 77, 65, 210, 67, 79, 80, 84, 73, 195, 75, 72, 77, 69, - 210, 79, 128, 73, 128, 84, 73, 76, 197, 77, 65, 82, 75, 128, 66, 79, 216, - 72, 69, 66, 82, 69, 215, 80, 76, 85, 211, 68, 82, 65, 87, 73, 78, 71, - 211, 82, 73, 71, 72, 84, 87, 65, 82, 68, 211, 83, 84, 82, 79, 75, 69, + 76, 65, 84, 73, 206, 89, 201, 67, 74, 203, 69, 71, 89, 80, 84, 73, 65, + 206, 72, 73, 69, 82, 79, 71, 76, 89, 80, 200, 65, 82, 65, 66, 73, 195, + 67, 79, 77, 80, 65, 84, 73, 66, 73, 76, 73, 84, 217, 77, 65, 84, 72, 69, + 77, 65, 84, 73, 67, 65, 204, 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, 68, 73, 71, 73, 212, 66, 79, 76, + 196, 72, 65, 78, 71, 85, 204, 71, 82, 69, 69, 203, 76, 73, 71, 65, 84, + 85, 82, 197, 65, 78, 196, 77, 85, 83, 73, 67, 65, 204, 84, 73, 77, 69, + 211, 69, 84, 72, 73, 79, 80, 73, 195, 86, 79, 87, 69, 204, 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, 67, 73, 82, 67, 76, 69, + 196, 70, 79, 210, 67, 79, 77, 66, 73, 78, 73, 78, 199, 84, 65, 201, 86, + 65, 201, 70, 73, 78, 65, 204, 83, 81, 85, 65, 82, 197, 86, 65, 82, 73, + 65, 84, 73, 79, 206, 76, 69, 70, 212, 66, 82, 65, 73, 76, 76, 197, 80, + 65, 84, 84, 69, 82, 206, 82, 73, 71, 72, 212, 66, 89, 90, 65, 78, 84, 73, + 78, 197, 73, 83, 79, 76, 65, 84, 69, 196, 194, 65, 66, 79, 86, 69, 128, + 68, 79, 85, 66, 76, 197, 75, 65, 84, 65, 75, 65, 78, 193, 75, 65, 78, 71, + 88, 201, 78, 85, 77, 66, 69, 210, 83, 73, 71, 78, 128, 66, 69, 76, 79, + 87, 128, 76, 73, 78, 69, 65, 210, 77, 79, 68, 73, 70, 73, 69, 210, 84, + 73, 66, 69, 84, 65, 206, 65, 128, 68, 79, 212, 77, 69, 69, 205, 77, 89, + 65, 78, 77, 65, 210, 67, 65, 82, 82, 73, 69, 210, 65, 82, 82, 79, 87, + 128, 73, 78, 73, 84, 73, 65, 204, 87, 72, 73, 84, 197, 85, 128, 86, 69, + 82, 84, 73, 67, 65, 204, 89, 69, 200, 65, 66, 79, 86, 197, 73, 128, 79, + 128, 67, 79, 80, 84, 73, 195, 65, 82, 82, 79, 215, 77, 79, 78, 71, 79, + 76, 73, 65, 206, 77, 65, 82, 75, 128, 75, 72, 77, 69, 210, 68, 69, 86, + 65, 78, 65, 71, 65, 82, 201, 84, 73, 76, 197, 80, 65, 82, 69, 78, 84, 72, + 69, 83, 73, 90, 69, 196, 84, 72, 65, 205, 66, 76, 65, 67, 203, 74, 79, + 78, 71, 83, 69, 79, 78, 199, 66, 79, 216, 72, 69, 66, 82, 69, 215, 80, + 76, 85, 211, 68, 82, 65, 87, 73, 78, 71, 211, 82, 73, 71, 72, 84, 87, 65, + 82, 68, 211, 67, 72, 79, 83, 69, 79, 78, 199, 83, 84, 82, 79, 75, 69, 128, 72, 65, 76, 70, 87, 73, 68, 84, 200, 66, 65, 76, 73, 78, 69, 83, - 197, 66, 76, 65, 67, 203, 71, 69, 79, 82, 71, 73, 65, 206, 72, 79, 79, - 75, 128, 73, 68, 69, 79, 71, 82, 65, 205, 73, 68, 69, 79, 71, 82, 65, 80, - 72, 73, 195, 84, 65, 201, 65, 76, 69, 198, 80, 65, 82, 69, 78, 84, 72, - 69, 83, 73, 90, 69, 196, 68, 69, 86, 65, 78, 65, 71, 65, 82, 201, 83, 67, - 82, 73, 80, 212, 84, 79, 128, 213, 83, 89, 77, 66, 79, 76, 128, 85, 208, - 70, 85, 76, 76, 87, 73, 68, 84, 200, 72, 65, 200, 68, 79, 87, 206, 66, - 82, 65, 67, 75, 69, 84, 128, 69, 81, 85, 65, 204, 79, 198, 79, 86, 69, - 210, 84, 65, 199, 68, 79, 77, 73, 78, 207, 70, 82, 65, 75, 84, 85, 210, - 78, 85, 77, 69, 82, 73, 195, 72, 69, 65, 86, 217, 84, 87, 79, 128, 77, - 65, 76, 65, 89, 65, 76, 65, 205, 71, 76, 65, 71, 79, 76, 73, 84, 73, 195, - 67, 72, 65, 82, 65, 67, 84, 69, 210, 76, 69, 70, 84, 87, 65, 82, 68, 211, - 79, 78, 69, 128, 84, 69, 76, 85, 71, 213, 65, 82, 77, 69, 78, 73, 65, - 206, 66, 69, 78, 71, 65, 76, 201, 67, 72, 79, 83, 69, 79, 78, 199, 74, - 69, 69, 205, 77, 69, 68, 73, 65, 204, 66, 65, 82, 128, 72, 73, 82, 65, - 71, 65, 78, 193, 87, 69, 83, 84, 45, 67, 82, 69, 197, 84, 72, 65, 201, - 75, 65, 78, 78, 65, 68, 193, 67, 72, 69, 82, 79, 75, 69, 197, 72, 65, 76, - 198, 73, 68, 69, 79, 71, 82, 65, 80, 200, 79, 82, 73, 89, 193, 84, 87, - 207, 67, 72, 65, 205, 71, 85, 74, 65, 82, 65, 84, 201, 74, 79, 78, 71, - 83, 69, 79, 78, 199, 78, 69, 215, 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, 76, 85, 197, 83, 73, 78, 72, 65, 76, 193, 71, 85, 82, - 77, 85, 75, 72, 201, 78, 79, 84, 65, 84, 73, 79, 206, 83, 89, 82, 73, 65, - 195, 84, 72, 82, 69, 197, 86, 79, 67, 65, 76, 73, 195, 72, 65, 128, 65, - 67, 85, 84, 69, 128, 76, 69, 80, 67, 72, 193, 76, 73, 71, 72, 212, 70, - 79, 85, 82, 128, 68, 79, 85, 66, 76, 69, 45, 83, 84, 82, 85, 67, 203, 84, - 65, 77, 73, 204, 65, 80, 204, 70, 85, 78, 67, 84, 73, 79, 78, 65, 204, - 72, 65, 77, 90, 193, 77, 65, 82, 203, 84, 72, 82, 69, 69, 128, 84, 69, - 76, 69, 71, 82, 65, 80, 200, 79, 78, 197, 72, 79, 82, 73, 90, 79, 78, 84, - 65, 204, 74, 85, 78, 71, 83, 69, 79, 78, 199, 66, 65, 82, 194, 68, 65, - 83, 73, 193, 70, 73, 86, 69, 128, 76, 73, 77, 66, 213, 77, 65, 75, 83, - 85, 82, 193, 66, 79, 80, 79, 77, 79, 70, 207, 75, 65, 128, 75, 72, 65, - 82, 79, 83, 72, 84, 72, 201, 76, 65, 207, 84, 207, 72, 69, 88, 65, 71, - 82, 65, 205, 76, 79, 78, 199, 83, 73, 88, 128, 76, 79, 215, 80, 83, 73, - 76, 201, 69, 73, 71, 72, 84, 128, 75, 193, 77, 79, 78, 79, 83, 80, 65, - 67, 197, 78, 79, 212, 89, 65, 128, 78, 73, 78, 69, 128, 83, 128, 83, 69, - 86, 69, 78, 128, 83, 84, 82, 79, 75, 197, 86, 128, 68, 79, 84, 211, 77, - 65, 128, 82, 69, 86, 69, 82, 83, 69, 196, 72, 73, 71, 200, 75, 72, 65, - 200, 76, 79, 87, 69, 210, 78, 75, 207, 84, 73, 76, 68, 69, 128, 84, 79, - 78, 197, 78, 85, 77, 69, 82, 65, 204, 82, 65, 128, 84, 85, 82, 78, 69, - 196, 65, 69, 71, 69, 65, 206, 72, 128, 80, 65, 128, 71, 128, 76, 65, 71, - 65, 194, 80, 72, 65, 71, 83, 45, 80, 193, 67, 89, 80, 82, 73, 79, 212, - 68, 73, 65, 69, 82, 69, 83, 73, 83, 128, 83, 85, 78, 68, 65, 78, 69, 83, - 197, 84, 73, 70, 73, 78, 65, 71, 200, 68, 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, 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, - 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, 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, 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, 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, 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, - 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, 65, 128, 89, 89, 128, 89, 87, 79, 79, + 197, 71, 69, 79, 82, 71, 73, 65, 206, 72, 79, 79, 75, 128, 73, 68, 69, + 79, 71, 82, 65, 205, 73, 68, 69, 79, 71, 82, 65, 80, 72, 73, 195, 65, 76, + 69, 198, 83, 89, 77, 66, 79, 76, 128, 84, 79, 128, 83, 67, 82, 73, 80, + 212, 84, 87, 79, 128, 79, 86, 69, 210, 213, 72, 69, 65, 86, 217, 79, 78, + 69, 128, 85, 208, 76, 79, 215, 70, 85, 76, 76, 87, 73, 68, 84, 200, 72, + 65, 200, 68, 79, 87, 206, 69, 81, 85, 65, 204, 66, 82, 65, 67, 75, 69, + 84, 128, 72, 73, 71, 200, 79, 198, 84, 65, 199, 68, 79, 77, 73, 78, 207, + 78, 85, 77, 69, 82, 73, 195, 70, 82, 65, 75, 84, 85, 210, 74, 85, 78, 71, + 83, 69, 79, 78, 199, 77, 65, 76, 65, 89, 65, 76, 65, 205, 84, 87, 207, + 71, 76, 65, 71, 79, 76, 73, 84, 73, 195, 67, 72, 65, 82, 65, 67, 84, 69, + 210, 76, 69, 70, 84, 87, 65, 82, 68, 211, 77, 69, 68, 73, 65, 204, 84, + 69, 76, 85, 71, 213, 66, 69, 78, 71, 65, 76, 201, 79, 78, 197, 65, 82, + 77, 69, 78, 73, 65, 206, 74, 65, 86, 65, 78, 69, 83, 197, 74, 69, 69, + 205, 66, 65, 82, 128, 72, 73, 82, 65, 71, 65, 78, 193, 87, 69, 83, 84, + 45, 67, 82, 69, 197, 73, 68, 69, 79, 71, 82, 65, 80, 200, 66, 65, 77, 85, + 205, 84, 72, 65, 201, 75, 65, 78, 78, 65, 68, 193, 67, 72, 69, 82, 79, + 75, 69, 197, 72, 65, 76, 198, 84, 79, 78, 197, 78, 69, 215, 79, 82, 73, + 89, 193, 84, 72, 82, 69, 197, 67, 72, 65, 205, 71, 85, 74, 65, 82, 65, + 84, 201, 76, 85, 197, 70, 79, 85, 82, 128, 72, 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, 84, 72, 82, 69, 69, 128, 68, 69, 83, 69, 82, 69, 212, 83, 73, + 78, 72, 65, 76, 193, 71, 85, 82, 77, 85, 75, 72, 201, 77, 65, 82, 203, + 78, 79, 84, 65, 84, 73, 79, 206, 83, 89, 82, 73, 65, 195, 86, 79, 67, 65, + 76, 73, 195, 65, 67, 85, 84, 69, 128, 76, 69, 80, 67, 72, 193, 76, 73, + 71, 72, 212, 76, 79, 78, 199, 84, 85, 82, 75, 73, 195, 68, 79, 85, 66, + 76, 69, 45, 83, 84, 82, 85, 67, 203, 70, 73, 86, 69, 128, 75, 65, 128, + 84, 65, 77, 73, 204, 86, 73, 69, 212, 65, 80, 204, 70, 85, 78, 67, 84, + 73, 79, 78, 65, 204, 72, 65, 77, 90, 193, 83, 73, 88, 128, 84, 69, 76, + 69, 71, 82, 65, 80, 200, 89, 65, 128, 69, 73, 71, 72, 84, 128, 72, 79, + 82, 73, 90, 79, 78, 84, 65, 204, 80, 65, 128, 68, 79, 84, 211, 78, 73, + 78, 69, 128, 83, 69, 86, 69, 78, 128, 66, 65, 82, 194, 68, 65, 83, 73, + 193, 75, 65, 73, 84, 72, 201, 76, 73, 77, 66, 213, 77, 65, 128, 77, 65, + 75, 83, 85, 82, 193, 83, 128, 84, 207, 66, 79, 80, 79, 77, 79, 70, 207, + 75, 72, 65, 82, 79, 83, 72, 84, 72, 201, 76, 65, 207, 82, 65, 128, 83, + 81, 85, 65, 82, 69, 196, 72, 69, 88, 65, 71, 82, 65, 205, 75, 193, 78, + 65, 128, 80, 83, 73, 76, 201, 82, 69, 86, 69, 82, 83, 69, 196, 77, 79, + 78, 79, 83, 80, 65, 67, 197, 78, 79, 212, 83, 65, 77, 65, 82, 73, 84, 65, + 206, 83, 84, 82, 79, 75, 197, 84, 85, 82, 78, 69, 196, 86, 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, 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, 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, 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, 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, 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, 85, 75, 65, 76, 69, 65, 80, 73, 78, 84, 85, 128, 89, 85, 84, 128, 89, 85, 83, 128, 89, 85, 211, 89, 85, 82, 88, 128, 89, 85, 82, 128, 89, - 85, 80, 128, 89, 85, 79, 88, 128, 89, 85, 79, 84, 128, 89, 85, 79, 80, - 128, 89, 85, 79, 128, 89, 85, 68, 72, 128, 89, 85, 68, 200, 89, 85, 65, - 78, 128, 89, 85, 45, 89, 69, 79, 128, 89, 85, 45, 89, 69, 128, 89, 85, - 45, 85, 128, 89, 85, 45, 73, 128, 89, 85, 45, 69, 79, 128, 89, 85, 45, - 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, 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, 80, 128, 89, 79, 79, 128, 89, 79, 77, - 79, 128, 89, 79, 71, 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, 128, - 89, 207, 89, 78, 128, 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, 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, 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, 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, - 85, 128, 89, 69, 79, 45, 79, 128, 89, 69, 206, 89, 69, 76, 76, 79, 87, - 128, 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, 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, 71, 128, 89, 65, 78, 199, 89, 65, 78, 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, 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, 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, 65, 128, 89, 65, 45, 89, 79, 128, 89, - 65, 45, 79, 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, 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, 87, 89, 78, 78, 128, 87, 89, 78, 206, 87, 86, 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, 128, 87, 82, 79, 78, 71, 128, 87, 82, 73, 84, - 73, 78, 199, 87, 82, 69, 65, 84, 200, 87, 82, 65, 80, 128, 87, 79, 88, - 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, 65, 78, 128, 87, 79, 76, - 79, 83, 79, 128, 87, 79, 69, 128, 87, 79, 65, 128, 87, 73, 78, 84, 69, - 82, 128, 87, 73, 78, 74, 65, 128, 87, 73, 78, 69, 128, 87, 73, 78, 68, - 85, 128, 87, 73, 78, 68, 128, 87, 73, 78, 128, 87, 73, 71, 71, 76, 217, - 87, 73, 68, 69, 45, 72, 69, 65, 68, 69, 196, 87, 73, 68, 197, 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, 71, 128, 87, 69, 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, 69, 78, 128, 87, 69, 68, 71, 69, 45, 84, 65, 73, 76, 69, 196, 87, 69, - 65, 80, 79, 78, 128, 87, 66, 128, 87, 65, 88, 128, 87, 65, 87, 128, 87, - 65, 215, 87, 65, 86, 217, 87, 65, 86, 69, 128, 87, 65, 86, 197, 87, 65, - 85, 128, 87, 65, 84, 84, 79, 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, 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, 69, 78, 128, 87, 65, 69, 128, 87, 65, 65, 86, 85, 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, 84, 128, 86, 85, 82, 88, 128, 86, 85, 82, 128, 86, - 85, 80, 128, 86, 85, 76, 71, 65, 210, 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, 76, 85, 77, 197, 86, 79, 76, 84, 65, 71, 197, 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, 204, 86, 79, 128, 86, 73, - 88, 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, 78, 69, 128, 86, 73, 78, 128, 86, 73, 76, 76, 65, 71, 69, - 128, 86, 73, 69, 88, 128, 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, 65, 128, 86, - 73, 67, 84, 79, 82, 217, 86, 73, 128, 86, 69, 88, 128, 86, 69, 87, 128, - 86, 69, 215, 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, 80, 128, - 86, 69, 78, 68, 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, - 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, - 128, 86, 65, 78, 69, 128, 86, 65, 76, 76, 69, 89, 128, 86, 65, 65, 86, - 85, 128, 86, 65, 65, 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, - 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, 50, 128, 85, - 83, 72, 128, 85, 83, 200, 85, 83, 69, 196, 85, 83, 69, 128, 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, 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, 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, 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, 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, 76, 85, 128, 85, 76, 213, 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, 69, 128, 85, 69, - 128, 85, 68, 85, 71, 128, 85, 68, 65, 84, 84, 65, 128, 85, 68, 65, 65, - 84, 128, 85, 68, 128, 85, 196, 85, 67, 128, 85, 66, 85, 70, 73, 76, 73, - 128, 85, 66, 65, 68, 65, 77, 65, 128, 85, 66, 128, 85, 65, 84, 72, 128, - 85, 65, 128, 85, 178, 85, 45, 69, 79, 45, 69, 85, 128, 85, 45, 65, 69, - 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, 76, 73, - 78, 197, 84, 87, 79, 45, 72, 69, 65, 68, 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, - 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, 84, 69, 89, 65, - 83, 65, 84, 128, 84, 85, 84, 128, 84, 85, 82, 88, 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, 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, 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, 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, - 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, 73, 128, 84, - 84, 72, 79, 128, 84, 84, 72, 73, 128, 84, 84, 72, 69, 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, 69, 128, 84, 84, - 65, 89, 65, 78, 78, 65, 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, 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, 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, 69, 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, 75, 85, 84, 65, 83, 84, 201, 84, 82, 79, 69, 90, 69, 78, 73, 65, 206, - 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, 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, 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, - 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, 83, 83, 73, 79, 78, 128, 84, 82, 65, 78, 83, 77, 73, 83, 83, 73, - 79, 206, 84, 82, 65, 68, 197, 84, 82, 65, 67, 75, 128, 84, 82, 128, 84, - 79, 88, 128, 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, 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, 128, 84, 79, 78, 79, 83, 128, 84, 79, 78, 71, 85, 69, 128, 84, 79, - 78, 71, 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, 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, 85, 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, 76, 79, 128, 84, 73, 84, 128, - 84, 73, 82, 79, 78, 73, 65, 206, 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, 78, 69, 128, 84, 73, 78, 65, 71, - 77, 65, 128, 84, 73, 77, 69, 83, 128, 84, 73, 77, 69, 128, 84, 73, 76, - 68, 197, 84, 73, 76, 128, 84, 73, 75, 69, 85, 84, 45, 82, 73, 69, 85, 76, - 128, 84, 73, 75, 69, 85, 84, 45, 75, 73, 89, 69, 79, 75, 128, 84, 73, 75, - 69, 85, 84, 128, 84, 73, 75, 69, 85, 212, 84, 73, 73, 128, 84, 73, 71, - 72, 212, 84, 73, 71, 69, 82, 128, 84, 73, 69, 88, 128, 84, 73, 69, 80, - 128, 84, 73, 197, 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, 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, 128, 84, 72, - 82, 79, 85, 71, 72, 128, 84, 72, 82, 79, 85, 71, 200, 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, 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, 82, 78, 128, 84, 72, 79, 82, 206, 84, 72, 79, - 79, 128, 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, 89, 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, 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, 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, 69, 69, 128, 84, 72, 197, 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, 65, 65, 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, 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, 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, 128, 84, 69, - 78, 211, 84, 69, 78, 128, 84, 69, 206, 84, 69, 77, 80, 85, 211, 84, 69, - 76, 79, 85, 211, 84, 69, 76, 73, 83, 72, 193, 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, 73, 87, 83, 128, 84, 69, 71, 69, 72, 128, 84, 69, 197, 84, - 69, 68, 85, 78, 71, 128, 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, - 45, 85, 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, 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, - 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, - 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, 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, 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, 67, - 75, 128, 84, 65, 67, 203, 84, 65, 66, 85, 76, 65, 84, 73, 79, 78, 128, - 84, 65, 66, 76, 69, 128, 84, 65, 66, 128, 84, 65, 194, 84, 65, 65, 76, - 85, 74, 193, 84, 65, 65, 73, 128, 84, 65, 50, 128, 84, 65, 45, 82, 79, - 76, 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, 82, 88, 128, 83, 89, 82, 77, 65, 84, - 73, 75, 73, 128, 83, 89, 82, 77, 65, 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, - 77, 77, 69, 84, 82, 89, 128, 83, 89, 77, 77, 69, 84, 82, 73, 195, 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, 65, 128, 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, 73, 128, 83, 87, 73, - 128, 83, 87, 71, 128, 83, 87, 69, 69, 84, 128, 83, 87, 65, 83, 200, 83, - 87, 65, 80, 80, 73, 78, 71, 128, 83, 87, 65, 65, 128, 83, 87, 128, 83, - 85, 88, 128, 83, 85, 84, 128, 83, 85, 83, 80, 69, 78, 83, 73, 79, 206, - 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, 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, 128, 83, 85, 79, 88, 128, 83, 85, 79, 80, 128, 83, 85, 79, - 128, 83, 85, 78, 71, 128, 83, 85, 78, 128, 83, 85, 206, 83, 85, 77, 77, + 85, 81, 128, 89, 85, 80, 128, 89, 85, 79, 88, 128, 89, 85, 79, 84, 128, + 89, 85, 79, 80, 128, 89, 85, 79, 128, 89, 85, 68, 72, 128, 89, 85, 68, + 200, 89, 85, 65, 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, 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, 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, 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, 206, 89, + 69, 76, 76, 79, 87, 128, 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, 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, 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, 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, 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, 65, 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, 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, 128, 87, 82, 79, 78, 71, 128, + 87, 82, 73, 84, 73, 78, 199, 87, 82, 69, 65, 84, 200, 87, 82, 65, 80, + 128, 87, 79, 88, 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, 65, + 78, 128, 87, 79, 76, 79, 83, 79, 128, 87, 79, 69, 128, 87, 79, 65, 128, + 87, 73, 84, 72, 79, 85, 212, 87, 73, 78, 84, 69, 82, 128, 87, 73, 78, 74, + 65, 128, 87, 73, 78, 69, 128, 87, 73, 78, 68, 85, 128, 87, 73, 78, 68, + 128, 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, 71, 128, 87, 69, 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, 69, 78, 128, 87, 69, 68, 71, 69, 45, 84, 65, 73, 76, 69, 196, 87, + 69, 65, 80, 79, 78, 128, 87, 66, 128, 87, 65, 89, 128, 87, 65, 217, 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, 69, 128, 87, 65, + 86, 197, 87, 65, 85, 128, 87, 65, 84, 84, 79, 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, 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, 84, 128, 86, 85, 82, 88, 128, 86, + 85, 82, 128, 86, 85, 80, 128, 86, 85, 76, 71, 65, 210, 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, 76, 85, 77, 197, 86, 79, 76, 84, 65, 71, + 197, 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, 204, 86, + 79, 128, 86, 73, 88, 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, 78, 69, 128, 86, 73, 78, 128, 86, 73, 76, + 76, 65, 71, 69, 128, 86, 73, 69, 88, 128, 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, 65, 128, 86, 73, 67, 84, 79, 82, 217, 86, 73, 128, 86, 69, 88, 128, + 86, 69, 87, 128, 86, 69, 215, 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, 80, 128, 86, 69, 78, 68, 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, 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, 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, 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, 50, 128, 85, 83, 72, 128, 85, 83, 200, + 85, 83, 69, 196, 85, 83, 69, 128, 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, 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, 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, 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, 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, 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, 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, 76, 73, 78, 197, 84, 87, 79, 45, 72, 69, 65, 68, 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, 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, + 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, 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, 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, + 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, 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, 73, 128, 84, 84, 72, 87, 69, 128, 84, 84, + 72, 79, 79, 128, 84, 84, 72, 79, 128, 84, 84, 72, 73, 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, 69, 128, 84, 84, 65, 89, 65, 78, 78, 65, + 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, 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, 69, 128, 84, 82, 85, 67, 75, 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, 75, 85, 84, 65, 83, 84, 201, 84, 82, + 79, 69, 90, 69, 78, 73, 65, 206, 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, 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, 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, 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, 83, 83, 73, 79, 78, 128, 84, 82, + 65, 78, 83, 77, 73, 83, 83, 73, 79, 206, 84, 82, 65, 70, 70, 73, 67, 128, + 84, 82, 65, 68, 197, 84, 82, 65, 67, 75, 128, 84, 82, 128, 84, 79, 88, + 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, 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, 128, 84, 79, 78, 79, 83, 128, 84, + 79, 78, 71, 85, 69, 128, 84, 79, 78, 71, 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, 76, 79, 78, 71, + 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, 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, 76, 79, 128, 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, 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, 65, 71, 77, 65, 128, 84, 73, 77, 69, 83, + 128, 84, 73, 77, 69, 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, 73, 128, 84, 73, 71, 72, 212, 84, 73, 71, 69, 82, + 128, 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, 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, 128, + 84, 72, 82, 79, 85, 71, 72, 128, 84, 72, 82, 79, 85, 71, 200, 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, 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, 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, 89, 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, 69, 69, 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, 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, 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, + 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, 71, + 197, 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, 73, 83, 72, 193, 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, 73, 87, 83, 128, 84, 69, 71, 69, 72, + 128, 84, 69, 197, 84, 69, 68, 85, 78, 71, 128, 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, 45, 85, 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, 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, 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, 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, 199, 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, 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, 128, 84, 65, 67, 75, 128, 84, 65, 67, 203, 84, 65, 66, 85, 76, + 65, 84, 73, 79, 78, 128, 84, 65, 66, 76, 69, 128, 84, 65, 66, 128, 84, + 65, 194, 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, 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, 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, 82, 88, 128, 83, 89, 82, 77, 65, + 84, 73, 75, 73, 128, 83, 89, 82, 77, 65, 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, 77, 77, 69, 84, 82, 89, 128, 83, 89, 77, 77, 69, 84, 82, 73, 195, 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, 65, 128, 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, 73, 128, 83, 87, + 73, 128, 83, 87, 71, 128, 83, 87, 69, 69, 84, 128, 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, 82, 88, 128, 83, 85, 82, 82, 79, + 85, 78, 68, 128, 83, 85, 82, 82, 79, 85, 78, 196, 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, 128, 83, 85, 79, 88, 128, + 83, 85, 79, 80, 128, 83, 85, 79, 128, 83, 85, 78, 71, 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, 75, 85, 78, 128, 83, 85, 75, 85, 206, 83, 85, 75, 85, 128, 83, 85, 75, @@ -519,463 +635,529 @@ 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, 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, 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, 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, - 205, 83, 84, 69, 65, 77, 128, 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, 69, 82, 83, 128, 83, 84, 65, 82, 212, 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, 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, 128, - 83, 83, 73, 88, 128, 83, 83, 73, 84, 128, 83, 83, 73, 80, 128, 83, 83, - 73, 69, 88, 128, 83, 83, 73, 69, 80, 128, 83, 83, 73, 69, 128, 83, 83, - 73, 128, 83, 83, 69, 88, 128, 83, 83, 69, 80, 128, 83, 83, 69, 69, 128, - 83, 83, 65, 88, 128, 83, 83, 65, 84, 128, 83, 83, 65, 80, 128, 83, 83, - 65, 78, 71, 84, 73, 75, 69, 85, 84, 128, 83, 83, 65, 78, 71, 83, 73, 79, - 83, 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, 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, 128, 83, 83, 65, 78, 71, 65, 82, 65, 69, 65, - 128, 83, 83, 65, 65, 128, 83, 83, 65, 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, 196, 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, 84, 128, 83, - 80, 79, 79, 78, 128, 83, 80, 76, 73, 84, 84, 73, 78, 199, 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, 68, 69, 82, 217, 83, 80, 73, 67, - 69, 128, 83, 80, 72, 69, 82, 73, 67, 65, 204, 83, 80, 69, 69, 67, 72, - 128, 83, 80, 69, 67, 73, 65, 76, 128, 83, 80, 69, 65, 82, 128, 83, 80, - 65, 84, 72, 73, 128, 83, 80, 65, 82, 75, 76, 69, 128, 83, 80, 65, 68, - 197, 83, 80, 65, 67, 73, 78, 199, 83, 80, 128, 83, 79, 87, 73, 76, 207, - 83, 79, 87, 128, 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, 128, 83, 79, 79, 128, 83, 79, 78, 128, 83, - 79, 76, 73, 68, 85, 83, 128, 83, 79, 76, 73, 68, 85, 211, 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, 212, 83, 79, 198, 83, 79, 67, 73, 69, 84, 89, 128, - 83, 79, 65, 128, 83, 207, 83, 78, 79, 87, 77, 65, 78, 128, 83, 78, 79, - 87, 70, 76, 65, 75, 69, 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, 193, 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, 86, 79, 128, 83, 76, 79, 80, 73, 78, 199, 83, 76, 79, 80, 69, - 128, 83, 76, 73, 78, 71, 128, 83, 76, 73, 67, 69, 128, 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, 204, 83, 75, 76, 73, 82, 79, 206, 83, 75, - 73, 78, 128, 83, 75, 69, 87, 69, 196, 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, 200, 83, 73, 88, - 84, 69, 69, 78, 128, 83, 73, 88, 84, 69, 69, 206, 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, 82, 73, 78, 71, 85, 128, 83, 73, - 79, 83, 45, 84, 73, 75, 69, 85, 84, 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, 73, 69, 85, 80, 128, 83, 73, 79, 83, 45, 80, 72, 73, 69, 85, 80, 72, - 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, 73, 89, 69, 79, 75, 128, 83, - 73, 79, 83, 45, 75, 72, 73, 69, 85, 75, 72, 128, 83, 73, 79, 83, 45, 73, + 83, 84, 82, 73, 80, 69, 128, 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, 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, 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, 205, 83, 84, 69, 65, 77, 128, 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, 69, 82, 83, + 128, 83, 84, 65, 82, 212, 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, 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, 128, 83, 83, 73, 88, 128, 83, 83, 73, 84, 128, 83, + 83, 73, 80, 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, 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, 65, + 128, 83, 83, 65, 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, 84, 128, 83, 80, 79, 79, 78, 128, 83, 80, 76, 73, 84, 84, 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, 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, 67, 72, 128, 83, 80, 69, 67, 73, 65, 76, 128, 83, 80, 69, 65, 82, + 128, 83, 80, 65, 84, 72, 73, 128, 83, 80, 65, 82, 75, 76, 69, 128, 83, + 80, 65, 68, 197, 83, 80, 65, 67, 73, 78, 199, 83, 80, 128, 83, 79, 89, + 128, 83, 79, 87, 73, 76, 207, 83, 79, 87, 128, 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, 79, 128, 83, 79, 78, 71, 128, 83, 79, + 78, 128, 83, 79, 76, 73, 68, 85, 83, 128, 83, 79, 76, 73, 68, 85, 211, + 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, 212, 83, 79, 198, 83, 79, 67, 73, + 69, 84, 89, 128, 83, 79, 67, 67, 69, 210, 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, 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, 193, 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, + 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, 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, 204, 83, 75, 76, 73, 82, 79, 206, 83, 75, 73, + 78, 128, 83, 75, 73, 69, 82, 128, 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, 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, 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, 76, 73, 78, 197, 83, 73, 78, 71, 76, 69, 128, 83, - 73, 78, 71, 76, 197, 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, 128, 83, 73, 76, 75, 128, 83, 73, 76, 73, 81, 85, 193, 83, - 73, 76, 65, 51, 128, 83, 73, 75, 73, 128, 83, 73, 75, 50, 128, 83, 73, - 75, 178, 83, 73, 73, 128, 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, 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, 65, 128, - 83, 72, 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, 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, 70, 70, 76, 197, 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, 79, 88, 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, 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, 80, 128, 83, 72, 79, 79, 84, 128, 83, 72, 79, 79, 128, - 83, 72, 79, 71, 201, 83, 72, 79, 199, 83, 72, 79, 197, 83, 72, 79, 65, - 128, 83, 72, 79, 128, 83, 72, 73, 84, 65, 128, 83, 72, 73, 84, 193, 83, - 72, 73, 82, 128, 83, 72, 73, 210, 83, 72, 73, 80, 128, 83, 72, 73, 78, - 73, 71, 128, 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, 73, 128, - 83, 72, 72, 65, 128, 83, 72, 69, 88, 128, 83, 72, 69, 86, 65, 128, 83, - 72, 69, 84, 128, 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, 88, 128, - 83, 72, 65, 86, 73, 89, 65, 78, 73, 128, 83, 72, 65, 86, 73, 65, 206, 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, 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, 128, 83, 72, 65, 78, 71, 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, 68, 79, 87, 69, 196, 83, - 72, 65, 68, 69, 128, 83, 72, 65, 68, 68, 65, 128, 83, 72, 65, 68, 68, + 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, 128, 83, 73, 76, 75, 128, + 83, 73, 76, 73, 81, 85, 193, 83, 73, 76, 65, 51, 128, 83, 73, 75, 73, + 128, 83, 73, 75, 50, 128, 83, 73, 75, 178, 83, 73, 73, 128, 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, + 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, + 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, 70, 70, 76, 197, 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, 79, 89, 128, 83, 72, 79, 88, 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, + 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, + 80, 128, 83, 72, 79, 79, 84, 128, 83, 72, 79, 79, 128, 83, 72, 79, 71, + 201, 83, 72, 79, 199, 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, 128, 83, 72, 73, 210, 83, 72, + 73, 80, 128, 83, 72, 73, 78, 84, 207, 83, 72, 73, 78, 73, 71, 128, 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, 73, 128, 83, 72, 72, 65, + 128, 83, 72, 69, 88, 128, 83, 72, 69, 86, 65, 128, 83, 72, 69, 85, 88, + 128, 83, 72, 69, 84, 128, 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, 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, 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, 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, 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, 69, 69, 78, 128, 83, 69, 86, 69, 78, 84, 69, 69, 206, - 83, 69, 86, 69, 206, 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, 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, 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, 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, 76, 128, 83, 69, 65, 71, 85, 76, 204, 83, 68, 79, 78, 199, - 83, 67, 87, 65, 128, 83, 67, 82, 85, 80, 76, 69, 128, 83, 67, 82, 73, 80, - 84, 128, 83, 67, 82, 69, 69, 78, 128, 83, 67, 82, 69, 69, 206, 83, 67, - 79, 82, 80, 73, 85, 83, 128, 83, 67, 73, 83, 83, 79, 82, 83, 128, 83, 67, - 72, 87, 65, 128, 83, 67, 72, 87, 193, 83, 67, 72, 79, 76, 65, 82, 128, - 83, 67, 72, 69, 77, 193, 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, 73, 77, 65, 84, - 65, 128, 83, 65, 87, 128, 83, 65, 85, 73, 76, 128, 83, 65, 84, 85, 82, - 78, 128, 83, 65, 83, 65, 75, 128, 83, 65, 82, 73, 128, 83, 65, 82, 193, - 83, 65, 82, 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, 65, 72, - 128, 83, 65, 78, 128, 83, 65, 77, 89, 79, 203, 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, 65, 82, 73, 84, 65, - 206, 83, 65, 76, 84, 73, 82, 69, 128, 83, 65, 76, 84, 73, 76, 76, 79, - 128, 83, 65, 76, 84, 128, 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, 128, 83, 65, 74, 68, 65, 72, 128, 83, 65, 73, 76, 128, 83, 65, 73, - 75, 85, 82, 85, 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, 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, 89, - 65, 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, 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, 128, 82, 85, 77, 65, 201, 82, 85, 77, 128, 82, 85, 205, 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, 194, 82, 85, 65, - 128, 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, 89, 128, 82, 82, 85, 88, 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, 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, 128, 82, 82, 65, 88, 128, 82, - 82, 65, 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, 79, - 84, 128, 82, 79, 79, 75, 128, 82, 79, 79, 70, 128, 82, 79, 79, 128, 82, - 79, 77, 65, 206, 82, 79, 196, 82, 79, 67, 128, 82, 79, 66, 65, 84, 128, - 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, 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, 70, 79, 82, 90, 65, 78, 68, 79, 128, 82, 73, - 206, 82, 73, 75, 82, 73, 75, 128, 82, 73, 73, 128, 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, 196, 82, 73, - 71, 72, 84, 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, 83, 73, 79, 83, 128, 82, 73, 69, 85, 76, 45, - 83, 73, 79, 83, 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, 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, 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, 128, 82, 73, 69, 85, 76, 45, 75, 72, 73, - 69, 85, 75, 72, 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, 204, 82, 73, 69, 76, 128, 82, 73, 67, 69, 77, 128, - 82, 73, 67, 69, 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, 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, 197, 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, 83, 85, 80, 73, 78, 85, 83, - 128, 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, 72, 128, 82, 69, 83, 200, 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, 69, 65, 84, 69, 196, 82, 69, 80, 69, - 65, 84, 128, 82, 69, 80, 69, 65, 212, 82, 69, 80, 65, 128, 82, 69, 80, - 193, 82, 69, 78, 84, 79, 71, 69, 78, 128, 82, 69, 77, 85, 128, 82, 69, - 76, 73, 71, 73, 79, 78, 128, 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, - 73, 83, 84, 69, 82, 69, 196, 82, 69, 70, 69, 82, 69, 78, 67, 197, 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, 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, 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, 89, 128, 82, 65, 84, 73, 79, 128, 82, 65, - 84, 128, 82, 65, 83, 79, 85, 204, 82, 65, 83, 72, 65, 128, 82, 65, 80, - 73, 83, 77, 65, 128, 82, 65, 78, 71, 197, 82, 65, 78, 128, 82, 65, 77, - 211, 82, 65, 77, 66, 65, 84, 128, 82, 65, 77, 128, 82, 65, 75, 72, 65, - 78, 71, 128, 82, 65, 73, 83, 69, 196, 82, 65, 73, 78, 128, 82, 65, 73, - 206, 82, 65, 73, 68, 207, 82, 65, 73, 68, 65, 128, 82, 65, 72, 77, 65, - 84, 85, 76, 76, 65, 200, 82, 65, 70, 69, 128, 82, 65, 69, 128, 82, 65, - 68, 73, 79, 65, 67, 84, 73, 86, 197, 82, 65, 68, 201, 82, 65, 68, 128, - 82, 65, 196, 82, 65, 66, 128, 82, 65, 65, 73, 128, 82, 65, 65, 128, 82, - 65, 51, 128, 82, 65, 50, 128, 82, 45, 67, 82, 69, 197, 81, 89, 88, 128, + 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, 206, 83, 69, 85, 88, + 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, 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, 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, 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, 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, + 73, 80, 84, 128, 83, 67, 82, 69, 69, 78, 128, 83, 67, 82, 69, 69, 206, + 83, 67, 79, 82, 80, 73, 85, 83, 128, 83, 67, 73, 83, 83, 79, 82, 83, 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, 76, 65, 82, + 128, 83, 67, 72, 69, 77, 193, 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, 73, 77, 65, + 84, 65, 128, 83, 65, 87, 65, 78, 128, 83, 65, 87, 128, 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, 83, 65, 75, 128, 83, + 65, 82, 73, 128, 83, 65, 82, 193, 83, 65, 82, 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, 65, 72, 128, 83, 65, 78, 128, 83, 65, 77, 89, 79, + 203, 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, 128, 83, 65, 76, 84, 73, 82, 69, + 128, 83, 65, 76, 84, 73, 76, 76, 79, 128, 83, 65, 76, 84, 128, 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, 128, 83, 65, 75, 79, 84, 128, 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, 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, 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, 89, 65, 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, 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, 128, 82, 85, 77, 201, 82, 85, 77, 65, 201, 82, 85, + 77, 128, 82, 85, 205, 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, 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, 89, 128, 82, 82, 85, 88, 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, 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, 128, 82, 82, 65, 88, 128, 82, 82, 65, + 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, 79, 84, + 128, 82, 79, 79, 75, 128, 82, 79, 79, 70, 128, 82, 79, 79, 128, 82, 79, + 77, 65, 206, 82, 79, 196, 82, 79, 67, 128, 82, 79, 66, 65, 84, 128, 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, 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, 75, 82, 73, 75, 128, 82, 73, 73, 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, 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, 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, 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, 197, 82, 69, 85, 88, 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, 83, 85, 80, 73, 78, 85, + 83, 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, 69, 65, 84, 69, 196, 82, 69, 80, 69, 65, 84, + 128, 82, 69, 80, 69, 65, 212, 82, 69, 80, 65, 128, 82, 69, 80, 193, 82, + 69, 78, 84, 79, 71, 69, 78, 128, 82, 69, 78, 128, 82, 69, 77, 85, 128, + 82, 69, 76, 73, 71, 73, 79, 78, 128, 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, 73, 83, 84, 69, 82, 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, 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, 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, 89, 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, 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, 77, 128, 82, 65, 75, 72, 65, 78, 71, 128, 82, 65, 73, 83, 69, + 196, 82, 65, 73, 78, 128, 82, 65, 73, 206, 82, 65, 73, 68, 207, 82, 65, + 73, 68, 65, 128, 82, 65, 73, 128, 82, 65, 72, 77, 65, 84, 85, 76, 76, 65, + 200, 82, 65, 70, 69, 128, 82, 65, 69, 128, 82, 65, 68, 73, 79, 65, 67, + 84, 73, 86, 197, 82, 65, 68, 201, 82, 65, 68, 128, 82, 65, 196, 82, 65, + 66, 128, 82, 65, 65, 73, 128, 82, 65, 65, 128, 82, 65, 51, 128, 82, 65, + 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, @@ -987,37 +1169,42 @@ 85, 79, 84, 128, 81, 85, 79, 80, 128, 81, 85, 79, 128, 81, 85, 75, 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, 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, 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, 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, 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, - 73, 88, 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, 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, 65, 65, 128, 209, 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, 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, 84, 128, 80, 85, 83, 72, 73, 78, 199, 80, 85, 82, 88, 128, - 80, 85, 82, 73, 84, 89, 128, 80, 85, 82, 128, 80, 85, 80, 128, 80, 85, - 79, 88, 128, 80, 85, 79, 80, 128, 80, 85, 79, 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, 50, 128, 80, 85, 128, 80, 84, 72, 65, 72, + 128, 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, 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, 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, 209, 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, 84, 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, 73, 84, 89, 128, 80, 85, 82, 128, 80, 85, 80, + 128, 80, 85, 79, 88, 128, 80, 85, 79, 80, 128, 80, 85, 79, 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, 69, 128, + 80, 85, 65, 69, 128, 80, 85, 50, 128, 80, 85, 128, 80, 84, 72, 65, 72, 193, 80, 84, 69, 128, 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, @@ -1031,247 +1218,318 @@ 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, 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, 78, 84, 128, 80, 82, 73, 78, 212, 80, - 82, 73, 77, 69, 128, 80, 82, 73, 77, 197, 80, 82, 69, 86, 73, 79, 85, - 211, 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, 70, 65, 67, 197, 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, 77, 128, 80, 80, 65, 128, 80, 79, 88, 128, 80, 79, 87, - 69, 82, 211, 80, 79, 87, 69, 82, 128, 80, 79, 85, 78, 196, 80, 79, 83, - 84, 80, 79, 83, 73, 84, 73, 79, 206, 80, 79, 83, 84, 65, 204, 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, 128, 80, 79, 208, 80, - 79, 79, 128, 80, 79, 78, 68, 79, 128, 80, 79, 76, 201, 80, 79, 76, 69, - 128, 80, 79, 75, 82, 89, 84, 73, 69, 128, 80, 79, 75, 79, 74, 73, 128, - 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, 77, 69, 196, 80, 76, 85, 77, 128, - 80, 76, 85, 75, 128, 80, 76, 79, 87, 128, 80, 76, 79, 80, 72, 85, 128, - 80, 76, 69, 84, 72, 82, 79, 78, 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, 197, - 80, 76, 65, 128, 80, 73, 90, 90, 73, 67, 65, 84, 79, 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, 67, 69, 83, - 128, 80, 73, 82, 73, 71, 128, 80, 73, 82, 73, 199, 80, 73, 80, 73, 78, - 71, 128, 80, 73, 80, 128, 80, 73, 78, 87, 72, 69, 69, 204, 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, 69, 88, 128, 80, 73, 69, 85, 80, 45, 84, 73, 75, 69, - 85, 84, 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, 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, 128, 80, 73, 69, 85, 80, 45, 80, 72, 73, 69, 85, - 80, 72, 128, 80, 73, 69, 85, 80, 45, 78, 73, 69, 85, 78, 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, 80, 128, 80, 73, - 69, 67, 69, 128, 80, 73, 69, 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, 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, 73, 80, 80, 73, 78, 197, 80, 72, 73, 69, 85, 80, 72, - 45, 80, 73, 69, 85, 80, 128, 80, 72, 73, 69, 85, 80, 200, 80, 72, 73, + 86, 65, 84, 69, 128, 80, 82, 73, 83, 72, 84, 72, 65, 77, 65, 84, 82, 193, + 80, 82, 73, 78, 84, 128, 80, 82, 73, 78, 212, 80, 82, 73, 77, 69, 128, + 80, 82, 73, 77, 197, 80, 82, 69, 86, 73, 79, 85, 211, 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, 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, 85, 78, 196, 80, 79, 83, 84, 80, 79, 83, 73, 84, 73, 79, + 206, 80, 79, 83, 84, 65, 204, 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, 128, 80, 79, 208, 80, 79, 79, 128, 80, 79, 78, 68, + 79, 128, 80, 79, 76, 201, 80, 79, 76, 69, 128, 80, 79, 75, 82, 89, 84, + 73, 69, 128, 80, 79, 75, 79, 74, 73, 128, 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, 77, 69, 196, 80, 76, 85, 77, 128, 80, 76, 85, 75, 128, 80, 76, + 79, 87, 128, 80, 76, 79, 80, 72, 85, 128, 80, 76, 69, 84, 72, 82, 79, 78, + 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, 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, + 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, 80, 73, 78, 71, 128, 80, 73, 80, 128, + 80, 73, 78, 87, 72, 69, 69, 204, 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, 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, 80, 128, 80, 73, 69, 67, 69, 128, 80, + 73, 69, 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, 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, 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, 82, 89, 78, 71, 69, 65, 204, 80, 72, 65, 82, 128, 80, 72, 65, 78, 128, 80, - 72, 65, 73, 83, 84, 79, 211, 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, 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, + 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, 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, 128, 80, 69, - 82, 83, 73, 65, 206, 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, - 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, 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, 78, 84, 65, 83, 69, 77, 69, 128, 80, 69, 78, 84, 65, 71, 79, - 78, 128, 80, 69, 78, 83, 85, 128, 80, 69, 78, 78, 217, 80, 69, 78, 73, - 72, 73, 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, 80, 128, 80, 69, 69, 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, 69, 128, 80, 69, 65, 67, 197, - 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, 88, 128, 80, 65, - 87, 78, 128, 80, 65, 215, 80, 65, 86, 73, 89, 65, 78, 73, 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, 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, 69, 81, 128, 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, 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, 210, 80, 65, 80, 128, 80, 65, 208, 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, 75, 82, 65, 128, 80, 65, 78, 84, 73, 128, 80, 65, 78, 79, - 76, 79, 78, 71, 128, 80, 65, 78, 71, 87, 73, 83, 65, 68, 128, 80, 65, 78, - 71, 76, 65, 89, 65, 82, 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, 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, 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, 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, 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, 68, 77, 193, 80, 65, 68, 128, 80, 65, 67, 75, - 73, 78, 71, 128, 80, 65, 65, 84, 85, 128, 80, 65, 65, 83, 69, 78, 84, 79, - 128, 80, 65, 65, 73, 128, 80, 65, 65, 45, 80, 73, 76, 76, 65, 128, 80, - 65, 65, 128, 80, 50, 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, 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, 128, 79, 85, 84, 76, 73, - 78, 69, 196, 79, 85, 84, 76, 73, 78, 69, 128, 79, 85, 84, 69, 210, 79, - 85, 78, 75, 73, 193, 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, 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, - 73, 71, 73, 78, 65, 204, 79, 82, 73, 71, 73, 78, 128, 79, 82, 68, 73, 78, - 65, 204, 79, 82, 67, 72, 73, 68, 128, 79, 80, 84, 73, 79, 206, 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, 69, 82, 65, 84, 79, 82, 128, 79, 80, 69, 82, 65, 84, 79, 210, 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, 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, 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, - 76, 73, 78, 197, 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, 77, 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, 69, 79, 78, 128, 79, - 73, 76, 128, 79, 72, 77, 128, 79, 72, 205, 79, 72, 128, 79, 71, 79, 78, - 69, 75, 128, 79, 71, 79, 78, 69, 203, 79, 71, 72, 65, 205, 79, 68, 196, - 79, 67, 84, 79, 66, 69, 82, 128, 79, 67, 210, 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, 45, 89, 69, 128, 79, 45, 69, 79, 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, 80, 128, 78, - 90, 85, 79, 88, 128, 78, 90, 85, 79, 128, 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, - 128, 78, 90, 65, 88, 128, 78, 90, 65, 84, 128, 78, 90, 65, 80, 128, 78, - 90, 65, 128, 78, 89, 87, 65, 128, 78, 89, 85, 88, 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, 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, 211, 78, 89, 73, 80, 128, 78, 89, 73, 78, 45, - 68, 79, 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, 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, 65, 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, 84, 73, 76, 76, - 85, 128, 78, 85, 84, 128, 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, 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, 66, 69, 82, - 128, 78, 85, 77, 128, 78, 85, 76, 76, 128, 78, 85, 76, 204, 78, 85, 75, - 84, 65, 128, 78, 85, 69, 128, 78, 85, 66, 73, 65, 206, 78, 85, 49, 49, - 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, 88, 128, 78, 79, - 87, 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, 128, 78, 79, 84, 197, 78, 79, 84, - 67, 72, 69, 196, 78, 79, 84, 67, 72, 128, 78, 79, 84, 128, 78, 79, 83, - 69, 128, 78, 79, 82, 84, 72, 87, 69, 83, 212, 78, 79, 82, 84, 200, 78, - 79, 82, 77, 65, 204, 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, 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, 79, 128, 78, 78, 78, 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, 77, 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, 80, 128, 78, - 74, 85, 79, 88, 128, 78, 74, 85, 79, 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, 128, 78, 74, 73, 128, 78, 74, 69, 69, 128, - 78, 74, 69, 128, 78, 74, 128, 78, 73, 88, 128, 78, 73, 83, 65, 71, 128, - 78, 73, 82, 85, 71, 85, 128, 78, 73, 80, 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, 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, 73, - 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, 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, 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, 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, 65, 128, 78, 72, 128, 78, 71, 85, 79, 88, 128, 78, 71, 85, - 79, 84, 128, 78, 71, 85, 79, 128, 78, 71, 79, 88, 128, 78, 71, 79, 84, - 128, 78, 71, 79, 80, 128, 78, 71, 79, 78, 128, 78, 71, 79, 69, 72, 128, - 78, 71, 79, 69, 200, 78, 71, 207, 78, 71, 75, 65, 128, 78, 71, 73, 69, - 88, 128, 78, 71, 73, 69, 80, 128, 78, 71, 73, 69, 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, 78, 128, 78, 71, 71, 69, 69, 128, 78, 71, 71, 69, 128, - 78, 71, 71, 65, 128, 78, 71, 71, 128, 78, 71, 69, 88, 128, 78, 71, 69, - 80, 128, 78, 71, 69, 78, 128, 78, 71, 69, 65, 68, 65, 76, 128, 78, 71, - 69, 128, 78, 71, 65, 88, 128, 78, 71, 65, 84, 128, 78, 71, 65, 211, 78, - 71, 65, 80, 128, 78, 71, 65, 78, 128, 78, 71, 65, 73, 128, 78, 71, 65, - 65, 73, 128, 78, 71, 193, 78, 70, 128, 78, 69, 88, 212, 78, 69, 88, 128, - 78, 69, 87, 76, 73, 78, 69, 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, + 82, 83, 79, 206, 80, 69, 82, 83, 73, 65, 206, 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, 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, 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, 78, 84, 65, 83, 69, 77, 69, 128, 80, 69, + 78, 84, 65, 71, 79, 78, 128, 80, 69, 78, 83, 85, 128, 80, 69, 78, 78, + 217, 80, 69, 78, 73, 72, 73, 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, 80, 128, + 80, 69, 69, 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, 69, 128, 80, 69, 65, 67, 197, 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, 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, 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, 69, 81, 128, 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, 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, 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, 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, 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, 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, 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, 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, 72, 76, 65, 86, 201, 80, 65, 68, 77, 193, 80, 65, + 68, 193, 80, 65, 68, 128, 80, 65, 67, 75, 73, 78, 71, 128, 80, 65, 65, + 84, 85, 128, 80, 65, 65, 83, 69, 78, 84, 79, 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, 78, 75, 73, 193, 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, 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, 68, 73, 78, 65, 204, 79, 82, 67, 72, 73, 68, + 128, 79, 80, 84, 73, 79, 206, 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, 69, 82, 65, 84, 79, 82, + 128, 79, 80, 69, 82, 65, 84, 79, 210, 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, 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, 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, + 76, 73, 78, 197, 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, 77, + 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, 72, 128, 79, 71, 79, 78, 69, 75, 128, 79, 71, + 79, 78, 69, 203, 79, 71, 72, 65, 205, 79, 69, 75, 128, 79, 68, 196, 79, + 67, 84, 79, 66, 69, 82, 128, 79, 67, 210, 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, 80, + 128, 78, 90, 85, 79, 88, 128, 78, 90, 85, 79, 128, 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, 128, 78, 90, 65, 88, 128, 78, 90, 65, 84, 128, 78, 90, 65, 80, + 128, 78, 90, 65, 128, 78, 89, 87, 65, 128, 78, 89, 85, 88, 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, 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, 211, 78, 89, 73, 80, 128, 78, 89, 73, + 78, 45, 68, 79, 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, 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, + 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, 84, + 73, 76, 76, 85, 128, 78, 85, 84, 128, 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, 128, + 78, 85, 77, 128, 78, 85, 76, 76, 128, 78, 85, 76, 204, 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, 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, 69, 69, 128, 78, 83, 72, 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, 128, 78, 79, 84, 197, 78, 79, 84, 67, 72, 69, 196, + 78, 79, 84, 67, 72, 128, 78, 79, 84, 128, 78, 79, 83, 69, 128, 78, 79, + 82, 84, 72, 87, 69, 83, 212, 78, 79, 82, 84, 200, 78, 79, 82, 77, 65, + 204, 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, 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, 79, 128, + 78, 78, 78, 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, 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, 75, 207, 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, 80, 128, 78, 74, 85, 79, 88, 128, + 78, 74, 85, 79, 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, 128, 78, 74, 73, 128, 78, 74, 69, 69, + 128, 78, 74, 69, 128, 78, 74, 65, 69, 77, 76, 73, 128, 78, 74, 65, 69, + 77, 128, 78, 74, 128, 78, 73, 88, 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, 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, 73, 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, 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, 65, 128, 78, 72, 128, 78, 71, 89, 69, 128, 78, + 71, 86, 69, 128, 78, 71, 85, 79, 88, 128, 78, 71, 85, 79, 84, 128, 78, + 71, 85, 79, 128, 78, 71, 79, 88, 128, 78, 71, 79, 85, 128, 78, 71, 79, + 213, 78, 71, 79, 84, 128, 78, 71, 79, 80, 128, 78, 71, 79, 78, 128, 78, + 71, 79, 69, 72, 128, 78, 71, 79, 69, 200, 78, 71, 207, 78, 71, 75, 87, + 65, 69, 78, 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, 71, 85, 128, 78, 71, 71, + 79, 79, 128, 78, 71, 71, 79, 128, 78, 71, 71, 73, 128, 78, 71, 71, 69, + 78, 128, 78, 71, 71, 69, 69, 128, 78, 71, 71, 69, 128, 78, 71, 71, 128, + 78, 71, 69, 88, 128, 78, 71, 69, 80, 128, 78, 71, 69, 78, 128, 78, 71, + 69, 65, 68, 65, 76, 128, 78, 71, 69, 128, 78, 71, 65, 88, 128, 78, 71, + 65, 84, 128, 78, 71, 65, 211, 78, 71, 65, 80, 128, 78, 71, 65, 78, 128, + 78, 71, 65, 73, 128, 78, 71, 65, 65, 73, 128, 78, 71, 193, 78, 70, 128, + 78, 69, 88, 212, 78, 69, 88, 128, 78, 69, 87, 76, 73, 78, 69, 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, 73, 84, 72, 69, 210, 78, 69, 71, 65, 84, 73, 86, 197, 78, 69, 71, 65, 84, 73, 79, @@ -1283,1367 +1541,1488 @@ 78, 68, 73, 80, 128, 78, 68, 73, 69, 88, 128, 78, 68, 73, 69, 128, 78, 68, 73, 128, 78, 68, 69, 88, 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, 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, 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, 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, 206, 78, 65, 82, 82, 79, 215, 78, 65, 82, 128, 78, 65, 80, 128, 78, - 65, 79, 211, 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, 73, 82, 193, 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, 66, 76, 65, 128, 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, 65, 128, 78, 65, 193, 78, 65, 50, 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, 128, 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, 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, 84, 128, 77, 85, 83, 73, 67, 128, 77, 85, 83, - 73, 195, 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, 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, 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, 128, 77, 85, 199, 77, 85, 69, 128, - 77, 85, 67, 200, 77, 85, 67, 65, 65, 68, 128, 77, 85, 65, 78, 128, 77, - 85, 45, 71, 65, 65, 72, 76, 65, 193, 77, 213, 77, 83, 128, 77, 80, 65, - 128, 77, 79, 88, 128, 77, 79, 86, 69, 196, 77, 79, 85, 84, 72, 128, 77, - 79, 85, 84, 200, 77, 79, 85, 78, 84, 65, 73, 78, 128, 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, 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, 128, 77, 79, 78, 84, 72, 128, 77, 79, 78, 84, 200, 77, 79, 78, - 79, 83, 84, 65, 66, 76, 197, 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, 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, 65, 128, 77, 207, 77, 78, 89, - 65, 205, 77, 78, 65, 83, 128, 77, 77, 128, 77, 205, 77, 76, 65, 128, 77, - 76, 128, 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, 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, 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, 83, 83, 65, 78, 71, 83, 73, 79, 83, 128, 77, 73, - 69, 85, 77, 45, 82, 73, 69, 85, 76, 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, 72, 73, 69, 85, 72, 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, 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, 196, 77, - 73, 67, 82, 207, 77, 73, 128, 77, 201, 77, 72, 90, 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, 128, 77, 71, 66, 73, 128, 77, 71, 66, 69, 69, - 128, 77, 71, 66, 69, 128, 77, 71, 66, 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, - 69, 90, 90, 79, 128, 77, 69, 88, 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, 71, 128, 77, 69, 84, 65, 76, - 128, 77, 69, 84, 193, 77, 69, 83, 83, 69, 78, 73, 65, 206, 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, 128, 77, 69, 82, 67, - 85, 82, 89, 128, 77, 69, 78, 128, 77, 69, 206, 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, 128, 77, 69, 205, 77, 69, 76, 79, 78, 128, 77, 69, 73, - 90, 73, 128, 77, 69, 71, 65, 84, 79, 78, 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, 128, 77, 69, 68, 73, 85, + 65, 80, 128, 78, 68, 65, 65, 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, 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, 206, 78, 65, 82, 82, 79, + 215, 78, 65, 82, 128, 78, 65, 79, 211, 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, 73, + 82, 193, 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, 66, 76, 65, + 128, 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, 65, 128, 78, 65, + 193, 78, 65, 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, 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, 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, 84, 128, 77, + 85, 83, 73, 67, 128, 77, 85, 83, 73, 195, 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, 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, 128, 77, 85, 199, 77, 85, 69, + 128, 77, 85, 67, 200, 77, 85, 67, 65, 65, 68, 128, 77, 85, 65, 78, 128, + 77, 85, 45, 71, 65, 65, 72, 76, 65, 193, 77, 213, 77, 83, 128, 77, 80, + 65, 128, 77, 79, 88, 128, 77, 79, 86, 69, 196, 77, 79, 85, 84, 72, 128, + 77, 79, 85, 84, 200, 77, 79, 85, 78, 84, 65, 73, 78, 128, 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, 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, 128, 77, 79, 78, 84, 72, 128, 77, 79, 78, 84, 200, 77, 79, + 78, 79, 83, 84, 65, 66, 76, 197, 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, 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, 65, 128, 77, 207, 77, 78, + 89, 65, 205, 77, 78, 65, 83, 128, 77, 77, 128, 77, 205, 77, 76, 65, 128, + 77, 76, 128, 77, 73, 88, 128, 77, 73, 84, 128, 77, 73, 212, 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, + 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, + 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, 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, 196, 77, 73, 67, 82, 207, 77, 73, 128, 77, 72, 90, + 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, 128, 77, 71, 66, 73, 128, + 77, 71, 66, 69, 69, 128, 77, 71, 66, 69, 128, 77, 71, 66, 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, 69, 90, 90, 79, 128, 77, 69, 88, 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, 71, + 128, 77, 69, 84, 65, 76, 128, 77, 69, 84, 193, 77, 69, 83, 83, 69, 78, + 73, 65, 206, 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, 128, 77, 69, 82, 71, 69, 128, 77, 69, 82, 67, 85, 82, 89, 128, 77, + 69, 78, 68, 85, 84, 128, 77, 69, 78, 128, 77, 69, 206, 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, 78, 128, 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, 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, 69, 69, 128, 77, 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, 65, 84, 128, 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, 67, 72, 213, 77, 66, 85, 128, 77, 66, 79, 79, 128, 77, 66, 79, 128, 77, 66, 73, - 128, 77, 66, 69, 69, 128, 77, 66, 69, 128, 77, 66, 65, 128, 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, 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, 79, 82, 193, 77, - 65, 83, 72, 50, 128, 77, 65, 83, 67, 85, 76, 73, 78, 197, 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, 66, 85, 84, 65, - 128, 77, 65, 82, 66, 85, 84, 193, 77, 65, 82, 128, 77, 65, 81, 65, 70, - 128, 77, 65, 80, 73, 81, 128, 77, 65, 78, 83, 89, 79, 78, 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, 67, 72, 213, 77, 65, 78, 65, 67, 76, 69, 83, 128, 77, - 65, 76, 84, 69, 83, 197, 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, 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, 75, 85, 82, 79, 128, 77, 65, 73, 68, 69, 78, 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, 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, 65, - 73, 128, 77, 65, 65, 128, 77, 65, 50, 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, 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, 65, 84, 197, 76, 85, 205, 76, 85, 76, 128, 76, 85, 73, 83, - 128, 76, 85, 72, 128, 76, 85, 71, 65, 76, 128, 76, 85, 71, 65, 204, 76, - 85, 51, 128, 76, 85, 50, 128, 76, 85, 178, 76, 79, 90, 69, 78, 71, 69, - 128, 76, 79, 90, 69, 78, 71, 197, 76, 79, 88, 128, 76, 79, 87, 45, 185, - 76, 79, 85, 82, 69, 128, 76, 79, 84, 85, 83, 128, 76, 79, 84, 128, 76, - 79, 82, 82, 65, 73, 78, 69, 128, 76, 79, 80, 128, 76, 79, 79, 84, 128, - 76, 79, 79, 80, 128, 76, 79, 79, 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, 76, 76, 128, 76, 79, 71, 210, 76, 79, - 71, 79, 84, 89, 80, 197, 76, 79, 71, 128, 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, - 77, 128, 76, 76, 76, 65, 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, 84, - 84, 76, 197, 76, 73, 84, 82, 193, 76, 73, 84, 128, 76, 73, 83, 72, 128, - 76, 73, 82, 193, 76, 73, 81, 85, 73, 196, 76, 73, 80, 128, 76, 73, 78, - 75, 73, 78, 199, 76, 73, 78, 203, 76, 73, 78, 69, 83, 128, 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, 76, 89, 128, 76, 73, 76, 73, 84, 72, 128, - 76, 73, 76, 128, 76, 73, 73, 128, 76, 73, 71, 72, 84, 78, 73, 78, 71, - 128, 76, 73, 71, 72, 84, 128, 76, 73, 70, 69, 128, 76, 73, 69, 88, 128, - 76, 73, 69, 84, 128, 76, 73, 69, 80, 128, 76, 73, 69, 128, 76, 73, 68, - 128, 76, 73, 66, 82, 65, 128, 76, 73, 65, 66, 73, 76, 73, 84, 217, 76, - 72, 79, 79, 128, 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, 84, 84, 69, 82, 128, - 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, 128, 76, 69, - 78, 84, 73, 67, 85, 76, 65, 210, 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, 73, 128, 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, 69, 70, 84, 45, 72, 65, 78, 196, 76, 69, 70, - 84, 128, 76, 69, 69, 75, 128, 76, 69, 65, 84, 72, 69, 82, 128, 76, 69, - 65, 70, 128, 76, 69, 65, 68, 69, 82, 128, 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, 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, 84, 128, 76, - 65, 83, 212, 76, 65, 82, 89, 78, 71, 69, 65, 204, 76, 65, 82, 71, 69, - 210, 76, 65, 82, 71, 197, 76, 65, 80, 128, 76, 65, 78, 71, 85, 65, 71, - 197, 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, 72, 83, 72, 85, 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, 69, 86, 128, 76, 65, 69, 128, 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, 65, 78, 128, 76, 65, 65, 77, 85, 128, 76, 65, 65, 73, 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, 69, 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, 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, 80, 128, 75, 85, 79, 88, 128, 75, - 85, 79, 80, 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, 55, - 128, 75, 85, 52, 128, 75, 85, 180, 75, 85, 51, 128, 75, 85, 179, 75, 84, - 128, 75, 83, 83, 65, 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, 79, 128, 75, 80, 79, 128, 75, 80, 73, 128, 75, 80, 69, - 78, 128, 75, 80, 69, 69, 128, 75, 80, 69, 128, 75, 80, 65, 78, 128, 75, - 80, 65, 128, 75, 79, 88, 128, 75, 79, 84, 79, 128, 75, 79, 84, 128, 75, + 128, 77, 66, 69, 78, 128, 77, 66, 69, 69, 128, 77, 66, 69, 128, 77, 66, + 65, 65, 128, 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, 65, 128, 77, 65, 88, 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, 79, 82, 193, 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, 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, 66, 85, + 84, 65, 128, 77, 65, 82, 66, 85, 84, 193, 77, 65, 82, 128, 77, 65, 81, + 65, 70, 128, 77, 65, 80, 73, 81, 128, 77, 65, 208, 77, 65, 78, 83, 89, + 79, 78, 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, 67, 72, 213, 77, 65, 78, 65, 67, + 76, 69, 83, 128, 77, 65, 76, 84, 69, 83, 197, 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, 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, 75, 85, 82, 79, 128, 77, 65, + 73, 68, 69, 78, 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, 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, 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, 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, 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, 65, 76, 128, 76, 85, 71, + 65, 204, 76, 85, 69, 128, 76, 85, 51, 128, 76, 85, 50, 128, 76, 85, 178, + 76, 79, 90, 69, 78, 71, 69, 128, 76, 79, 90, 69, 78, 71, 197, 76, 79, 88, + 128, 76, 79, 87, 69, 210, 76, 79, 87, 45, 185, 76, 79, 85, 82, 69, 128, + 76, 79, 84, 85, 83, 128, 76, 79, 84, 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, 128, 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, 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, 67, 65, 84, 73, 86, 69, 128, 76, 79, 67, 65, 84, + 73, 79, 206, 76, 79, 65, 128, 76, 78, 128, 76, 77, 128, 76, 76, 76, 65, + 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, 82, 193, 76, 73, 84, 128, 76, 73, 83, 213, 76, 73, + 83, 72, 128, 76, 73, 82, 193, 76, 73, 81, 85, 73, 196, 76, 73, 80, 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, 76, 89, 128, 76, 73, 76, 73, 84, 72, 128, 76, 73, 76, + 128, 76, 73, 73, 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, 128, 76, 73, 69, 84, 128, 76, 73, 69, 80, 128, + 76, 73, 69, 128, 76, 73, 68, 128, 76, 73, 66, 82, 65, 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, 84, 84, 69, + 82, 128, 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, + 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, 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, 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, 75, 128, 76, 69, 69, 69, 69, 128, 76, 69, 65, 84, 72, 69, 82, 128, + 76, 69, 65, 70, 128, 76, 69, 65, 68, 69, 82, 128, 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, 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, + 84, 128, 76, 65, 83, 212, 76, 65, 82, 89, 78, 71, 69, 65, 204, 76, 65, + 82, 71, 69, 210, 76, 65, 82, 71, 197, 76, 65, 80, 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, + 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, 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, 65, 84, 128, 76, 65, 65, + 78, 128, 76, 65, 65, 77, 85, 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, 69, 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, 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, 80, 128, 75, 85, 79, 88, 128, 75, 85, 79, 80, + 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, 55, 128, 75, 85, + 52, 128, 75, 85, 180, 75, 85, 51, 128, 75, 85, 179, 75, 84, 128, 75, 83, + 83, 65, 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, 79, 128, 75, 80, 79, 128, 75, 80, 73, 128, 75, 80, 69, 78, 128, + 75, 80, 69, 69, 128, 75, 80, 69, 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, 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, 72, 128, 75, 79, 69, 84, - 128, 75, 79, 65, 128, 75, 78, 73, 71, 72, 84, 128, 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, 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, 203, 75, 73, 88, 128, 75, 73, 84, 128, 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, 80, 128, 75, 73, - 208, 75, 73, 78, 83, 72, 73, 80, 128, 75, 73, 73, 128, 75, 73, 72, 128, - 75, 73, 69, 88, 128, 75, 73, 69, 80, 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, 65, 84, 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, 73, - 69, 85, 75, 200, 75, 72, 73, 128, 75, 72, 72, 65, 128, 75, 72, 69, 73, - 128, 75, 72, 69, 69, 128, 75, 72, 69, 128, 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, 75, 65, 83, 83, 73, 65, 206, 75, 72, 65, 73, - 128, 75, 72, 65, 72, 128, 75, 72, 65, 65, 128, 75, 71, 128, 75, 69, 89, - 67, 65, 80, 128, 75, 69, 89, 66, 79, 65, 82, 68, 128, 75, 69, 89, 128, - 75, 69, 217, 75, 69, 88, 128, 75, 69, 84, 84, 201, 75, 69, 83, 72, 50, - 128, 75, 69, 80, 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, 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, 86, 89, 75, 65, 128, 75, 65, - 85, 78, 65, 128, 75, 65, 85, 206, 75, 65, 84, 79, 128, 75, 65, 84, 72, - 73, 83, 84, 73, 128, 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, 84, 128, 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, 82, 79, 82, - 73, 73, 128, 75, 65, 82, 69, 206, 75, 65, 82, 65, 84, 84, 79, 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, 80, 128, 75, 65, 78, 84, 65, 74, 193, 75, - 65, 78, 71, 128, 75, 65, 78, 65, 75, 79, 128, 75, 65, 77, 52, 128, 75, - 65, 77, 50, 128, 75, 65, 75, 79, 128, 75, 65, 75, 65, 66, 65, 84, 128, - 75, 65, 75, 128, 75, 65, 203, 75, 65, 73, 82, 73, 128, 75, 65, 73, 128, - 75, 65, 201, 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, 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, 65, - 178, 74, 87, 65, 128, 74, 85, 84, 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, - 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, 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, 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, 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, 65, 89, 65, 78, 78, 65, 128, 74, - 65, 86, 73, 89, 65, 78, 73, 128, 74, 65, 82, 128, 74, 65, 80, 65, 78, 69, - 83, 197, 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, 68, 69, 128, 74, 65, 65, 128, - 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, 89, - 65, 78, 78, 65, 128, 73, 89, 128, 73, 85, 74, 65, 128, 73, 85, 128, 73, - 84, 69, 82, 65, 84, 73, 79, 206, 73, 84, 69, 77, 128, 73, 83, 83, 72, 65, - 82, 128, 73, 83, 211, 73, 83, 79, 78, 128, 73, 83, 79, 206, 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, 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, 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, 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, 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, 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, - 76, 85, 68, 73, 78, 199, 73, 78, 67, 72, 128, 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, 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, - 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, 77, 73, 69, 85, 77, 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, 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, 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, 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, 45, 89, 65, 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, 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, 65, 82, 65, 68, 68, 79, 128, - 72, 82, 89, 86, 78, 73, 193, 72, 80, 87, 71, 128, 72, 80, 65, 128, 72, - 80, 128, 72, 79, 85, 83, 69, 128, 72, 79, 85, 82, 71, 76, 65, 83, 83, - 128, 72, 79, 85, 210, 72, 79, 84, 65, 128, 72, 79, 82, 83, 69, 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, 79, 82, - 85, 128, 72, 79, 79, 78, 128, 72, 79, 77, 79, 84, 72, 69, 84, 73, 67, - 128, 72, 79, 77, 79, 84, 72, 69, 84, 73, 195, 72, 79, 76, 68, 73, 78, - 199, 72, 79, 76, 65, 77, 128, 72, 79, 76, 65, 205, 72, 79, 69, 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, 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, 82, 73, 81, 128, - 72, 73, 71, 72, 45, 82, 69, 86, 69, 82, 83, 69, 68, 45, 185, 72, 73, 69, - 88, 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, 128, 72, 73, 68, 73, 78, 199, 72, 73, 68, 69, 84, 128, - 72, 73, 68, 69, 128, 72, 72, 87, 65, 128, 72, 72, 85, 128, 72, 72, 79, - 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, 65, 71, 79, 78, 128, 72, 69, 84, 72, - 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, 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, 205, 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, 128, - 72, 69, 65, 82, 212, 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, 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, 78, 85, 78, 79, 207, 72, 65, 78, 71, 90, - 72, 79, 213, 72, 65, 78, 68, 83, 128, 72, 65, 78, 68, 128, 72, 65, 78, + 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, 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, 128, + 75, 78, 73, 71, 72, 84, 128, 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, 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, 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, 73, + 128, 75, 73, 72, 128, 75, 73, 69, 88, 128, 75, 73, 69, 80, 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, 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, 73, 84, 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, 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, 66, 79, 65, 82, 68, 128, 75, 69, 89, 128, 75, + 69, 217, 75, 69, 88, 128, 75, 69, 85, 88, 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, 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, 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, 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, 80, 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, + 75, 79, 128, 75, 65, 75, 65, 66, 65, 84, 128, 75, 65, 75, 128, 75, 65, + 203, 75, 65, 73, 82, 73, 128, 75, 65, 73, 128, 75, 65, 201, 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, + 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, 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, 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, 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, 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, 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, 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, 65, 89, 65, 78, 78, 65, 128, 74, 65, 86, 73, 89, 65, + 78, 73, 128, 74, 65, 82, 128, 74, 65, 80, 65, 78, 69, 83, 197, 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, 68, 69, 128, 74, 65, 65, 128, 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, 89, 69, 75, 128, + 73, 89, 65, 78, 78, 65, 128, 73, 85, 74, 65, 128, 73, 85, 128, 73, 84, + 69, 82, 65, 84, 73, 79, 206, 73, 84, 69, 77, 128, 73, 83, 83, 72, 65, 82, + 128, 73, 83, 211, 73, 83, 79, 78, 128, 73, 83, 79, 206, 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, 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, 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, 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, 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, 195, 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, 76, 85, 68, 73, 78, 199, 73, + 78, 67, 72, 128, 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, 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, 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, 54, 68, 55, 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, 55, 50, 67, 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, 52, 51, 57, 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, 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, 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, 82, 89, 86, 78, 73, 193, 72, 80, 87, 71, 128, 72, 80, + 65, 128, 72, 80, 128, 72, 79, 85, 82, 71, 76, 65, 83, 83, 128, 72, 79, + 85, 210, 72, 79, 84, 65, 128, 72, 79, 82, 83, 69, 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, 78, 128, 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, 72, 79, 76, 65, 77, 128, 72, 79, 76, 65, + 205, 72, 79, 75, 65, 128, 72, 79, 73, 128, 72, 79, 69, 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, 82, 69, 86, + 69, 82, 83, 69, 68, 45, 185, 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, 128, 72, 73, 68, 73, 78, 199, 72, 73, 68, + 69, 84, 128, 72, 73, 68, 69, 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, + 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, 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, 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, 128, 72, 69, 65, 82, 212, 72, 69, 65, 68, 83, + 84, 82, 79, 75, 69, 128, 72, 69, 65, 68, 83, 84, 79, 78, 197, 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, 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, 78, + 85, 78, 79, 207, 72, 65, 78, 71, 90, 72, 79, 213, 72, 65, 78, 68, 83, + 128, 72, 65, 78, 68, 76, 69, 83, 128, 72, 65, 78, 68, 128, 72, 65, 78, 45, 65, 75, 65, 84, 128, 72, 65, 77, 90, 65, 128, 72, 65, 77, 77, 69, 210, 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, 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, 69, 128, - 72, 65, 65, 82, 85, 128, 72, 65, 193, 72, 65, 45, 72, 65, 128, 72, 45, + 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, 69, 128, - 71, 89, 65, 83, 128, 71, 89, 65, 65, 128, 71, 89, 65, 128, 71, 89, 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, @@ -2656,462 +3035,558 @@ 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, 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, 77, 77, 193, - 71, 82, 65, 73, 78, 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, 78, 71, 128, 71, 79, 76, 68, 128, - 71, 79, 73, 78, 199, 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, 84, 84, 65, 204, 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, 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, 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, 83, 84, - 128, 71, 72, 79, 128, 71, 72, 73, 128, 71, 72, 72, 65, 128, 71, 72, 69, - 69, 128, 71, 72, 69, 128, 71, 72, 197, 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, 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, 80, 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, 80, 128, 71, 71, 65, 65, 128, 71, 69, 84, - 193, 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, 68, 79, 76, 65, 128, 71, 69, 68, 69, 128, 71, 69, 66, 207, - 71, 69, 66, 193, 71, 69, 65, 82, 128, 71, 68, 65, 78, 128, 71, 67, 73, - 71, 128, 71, 67, 65, 206, 71, 66, 79, 78, 128, 71, 66, 69, 78, 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, 51, 128, 71, - 65, 80, 80, 69, 196, 71, 65, 78, 77, 65, 128, 71, 65, 78, 71, 73, 65, - 128, 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, 65, 76, 128, 71, - 65, 77, 65, 204, 71, 65, 77, 128, 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, 70, 89, 88, 128, 70, 89, - 84, 128, 70, 89, 80, 128, 70, 89, 65, 128, 70, 89, 128, 70, 87, 73, 128, - 70, 87, 69, 69, 128, 70, 87, 69, 128, 70, 87, 65, 65, 128, 70, 87, 65, - 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, 82, 128, 70, 85, 80, 128, 70, 85, 78, - 69, 82, 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, 84, 72, 79, 82, 193, 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, 205, 70, 82, 79, 71, 128, 70, 82, 73, - 84, 85, 128, 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, 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, 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, 83, 84, 69, 82, 73, 78, 71, 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, 78, 79, 84, - 197, 70, 79, 79, 84, 128, 70, 79, 79, 128, 70, 79, 78, 71, 77, 65, 78, - 128, 70, 79, 76, 76, 89, 128, 70, 79, 76, 76, 79, 87, 73, 78, 71, 128, - 70, 79, 128, 70, 77, 128, 70, 76, 89, 128, 70, 76, 85, 84, 69, 128, 70, - 76, 79, 87, 69, 82, 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, 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, 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, - 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, 128, 70, 76, 128, 70, 73, 88, 69, 68, 45, 70, 79, 82, - 205, 70, 73, 88, 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, 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, 69, 128, 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, - 83, 84, 73, 86, 65, 76, 128, 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, 65, 89, 65, 78, 78, 65, - 128, 70, 65, 88, 128, 70, 65, 84, 72, 69, 82, 128, 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, - 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, 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, 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, 73, 128, - 70, 65, 65, 70, 85, 128, 70, 65, 65, 128, 69, 90, 200, 69, 90, 69, 78, - 128, 69, 90, 69, 206, 69, 89, 66, 69, 89, 70, 73, 76, 73, 128, 69, 89, - 65, 78, 78, 65, 128, 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, 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, 69, 83, 83, 128, 69, 88, 67, 69, - 76, 76, 69, 78, 84, 128, 69, 87, 69, 128, 69, 86, 69, 78, 73, 78, 71, - 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, 69, 85, 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, 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, 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, 206, 69, 80, 73, 71, 82, 65, 80, 72, 73, 195, 69, - 80, 73, 68, 65, 85, 82, 69, 65, 206, 69, 80, 69, 71, 69, 82, 77, 65, 128, - 69, 79, 76, 72, 88, 128, 69, 79, 72, 128, 69, 78, 86, 69, 76, 79, 80, 69, - 128, 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, 79, - 211, 69, 78, 78, 128, 69, 78, 76, 65, 82, 71, 69, 77, 69, 78, 84, 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, 196, - 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, 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, 69, 76, 76, 73, 83, 72, 77, - 69, 78, 84, 128, 69, 77, 66, 69, 68, 68, 73, 78, 71, 128, 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, 128, 69, 76, 69, 86, 69, 206, 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, 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, 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, 200, 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, 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, - 68, 90, 90, 69, 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, 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, 128, 68, - 85, 84, 73, 69, 83, 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, 78, 128, 68, 85, 77, 128, 68, 85, 76, 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, 213, 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, 45, 83, 72, 65, - 68, 79, 87, 69, 196, 68, 82, 73, 86, 69, 128, 68, 82, 73, 204, 68, 82, - 65, 85, 71, 72, 84, 211, 68, 82, 65, 71, 79, 78, 128, 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, 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, 55, 128, 68, 79, 84, 83, 45, 50, 53, 54, 56, 128, - 68, 79, 84, 83, 45, 50, 53, 54, 55, 56, 128, 68, 79, 84, 83, 45, 50, 53, - 54, 55, 128, 68, 79, 84, 83, 45, 50, 53, 54, 128, 68, 79, 84, 83, 45, 50, - 53, 128, 68, 79, 84, 83, 45, 50, 52, 56, 128, 68, 79, 84, 83, 45, 50, 52, - 55, 56, 128, 68, 79, 84, 83, 45, 50, 52, 55, 128, 68, 79, 84, 83, 45, 50, - 52, 54, 56, 128, 68, 79, 84, 83, 45, 50, 52, 54, 55, 56, 128, 68, 79, 84, - 83, 45, 50, 52, 54, 55, 128, 68, 79, 84, 83, 45, 50, 52, 54, 128, 68, 79, - 84, 83, 45, 50, 52, 53, 56, 128, 68, 79, 84, 83, 45, 50, 52, 53, 55, 56, - 128, 68, 79, 84, 83, 45, 50, 52, 53, 55, 128, 68, 79, 84, 83, 45, 50, 52, - 53, 54, 56, 128, 68, 79, 84, 83, 45, 50, 52, 53, 54, 55, 56, 128, 68, 79, - 84, 83, 45, 50, 52, 53, 54, 55, 128, 68, 79, 84, 83, 45, 50, 52, 53, 54, - 128, 68, 79, 84, 83, 45, 50, 52, 53, 128, 68, 79, 84, 83, 45, 50, 52, - 128, 68, 79, 84, 83, 45, 50, 51, 56, 128, 68, 79, 84, 83, 45, 50, 51, 55, - 56, 128, 68, 79, 84, 83, 45, 50, 51, 55, 128, 68, 79, 84, 83, 45, 50, 51, - 54, 56, 128, 68, 79, 84, 83, 45, 50, 51, 54, 55, 56, 128, 68, 79, 84, 83, - 45, 50, 51, 54, 55, 128, 68, 79, 84, 83, 45, 50, 51, 54, 128, 68, 79, 84, - 83, 45, 50, 51, 53, 56, 128, 68, 79, 84, 83, 45, 50, 51, 53, 55, 56, 128, - 68, 79, 84, 83, 45, 50, 51, 53, 55, 128, 68, 79, 84, 83, 45, 50, 51, 53, - 54, 56, 128, 68, 79, 84, 83, 45, 50, 51, 53, 54, 55, 56, 128, 68, 79, 84, - 83, 45, 50, 51, 53, 54, 55, 128, 68, 79, 84, 83, 45, 50, 51, 53, 54, 128, - 68, 79, 84, 83, 45, 50, 51, 53, 128, 68, 79, 84, 83, 45, 50, 51, 52, 56, - 128, 68, 79, 84, 83, 45, 50, 51, 52, 55, 56, 128, 68, 79, 84, 83, 45, 50, - 51, 52, 55, 128, 68, 79, 84, 83, 45, 50, 51, 52, 54, 56, 128, 68, 79, 84, - 83, 45, 50, 51, 52, 54, 55, 56, 128, 68, 79, 84, 83, 45, 50, 51, 52, 54, - 55, 128, 68, 79, 84, 83, 45, 50, 51, 52, 54, 128, 68, 79, 84, 83, 45, 50, - 51, 52, 53, 56, 128, 68, 79, 84, 83, 45, 50, 51, 52, 53, 55, 56, 128, 68, - 79, 84, 83, 45, 50, 51, 52, 53, 55, 128, 68, 79, 84, 83, 45, 50, 51, 52, - 53, 54, 56, 128, 68, 79, 84, 83, 45, 50, 51, 52, 53, 54, 55, 56, 128, 68, - 79, 84, 83, 45, 50, 51, 52, 53, 54, 55, 128, 68, 79, 84, 83, 45, 50, 51, - 52, 53, 54, 128, 68, 79, 84, 83, 45, 50, 51, 52, 53, 128, 68, 79, 84, 83, - 45, 50, 51, 52, 128, 68, 79, 84, 83, 45, 50, 51, 128, 68, 79, 84, 83, 45, - 50, 128, 68, 79, 84, 83, 45, 49, 56, 128, 68, 79, 84, 83, 45, 49, 55, 56, - 128, 68, 79, 84, 83, 45, 49, 55, 128, 68, 79, 84, 83, 45, 49, 54, 56, - 128, 68, 79, 84, 83, 45, 49, 54, 55, 56, 128, 68, 79, 84, 83, 45, 49, 54, - 55, 128, 68, 79, 84, 83, 45, 49, 54, 128, 68, 79, 84, 83, 45, 49, 53, 56, - 128, 68, 79, 84, 83, 45, 49, 53, 55, 56, 128, 68, 79, 84, 83, 45, 49, 53, - 55, 128, 68, 79, 84, 83, 45, 49, 53, 54, 56, 128, 68, 79, 84, 83, 45, 49, - 53, 54, 55, 56, 128, 68, 79, 84, 83, 45, 49, 53, 54, 55, 128, 68, 79, 84, - 83, 45, 49, 53, 54, 128, 68, 79, 84, 83, 45, 49, 53, 128, 68, 79, 84, 83, - 45, 49, 52, 56, 128, 68, 79, 84, 83, 45, 49, 52, 55, 56, 128, 68, 79, 84, - 83, 45, 49, 52, 55, 128, 68, 79, 84, 83, 45, 49, 52, 54, 56, 128, 68, 79, - 84, 83, 45, 49, 52, 54, 55, 56, 128, 68, 79, 84, 83, 45, 49, 52, 54, 55, - 128, 68, 79, 84, 83, 45, 49, 52, 54, 128, 68, 79, 84, 83, 45, 49, 52, 53, - 56, 128, 68, 79, 84, 83, 45, 49, 52, 53, 55, 56, 128, 68, 79, 84, 83, 45, - 49, 52, 53, 55, 128, 68, 79, 84, 83, 45, 49, 52, 53, 54, 56, 128, 68, 79, - 84, 83, 45, 49, 52, 53, 54, 55, 56, 128, 68, 79, 84, 83, 45, 49, 52, 53, - 54, 55, 128, 68, 79, 84, 83, 45, 49, 52, 53, 54, 128, 68, 79, 84, 83, 45, - 49, 52, 53, 128, 68, 79, 84, 83, 45, 49, 52, 128, 68, 79, 84, 83, 45, 49, - 51, 56, 128, 68, 79, 84, 83, 45, 49, 51, 55, 56, 128, 68, 79, 84, 83, 45, - 49, 51, 55, 128, 68, 79, 84, 83, 45, 49, 51, 54, 56, 128, 68, 79, 84, 83, - 45, 49, 51, 54, 55, 56, 128, 68, 79, 84, 83, 45, 49, 51, 54, 55, 128, 68, - 79, 84, 83, 45, 49, 51, 54, 128, 68, 79, 84, 83, 45, 49, 51, 53, 56, 128, - 68, 79, 84, 83, 45, 49, 51, 53, 55, 56, 128, 68, 79, 84, 83, 45, 49, 51, - 53, 55, 128, 68, 79, 84, 83, 45, 49, 51, 53, 54, 56, 128, 68, 79, 84, 83, - 45, 49, 51, 53, 54, 55, 56, 128, 68, 79, 84, 83, 45, 49, 51, 53, 54, 55, - 128, 68, 79, 84, 83, 45, 49, 51, 53, 54, 128, 68, 79, 84, 83, 45, 49, 51, - 53, 128, 68, 79, 84, 83, 45, 49, 51, 52, 56, 128, 68, 79, 84, 83, 45, 49, - 51, 52, 55, 56, 128, 68, 79, 84, 83, 45, 49, 51, 52, 55, 128, 68, 79, 84, - 83, 45, 49, 51, 52, 54, 56, 128, 68, 79, 84, 83, 45, 49, 51, 52, 54, 55, - 56, 128, 68, 79, 84, 83, 45, 49, 51, 52, 54, 55, 128, 68, 79, 84, 83, 45, - 49, 51, 52, 54, 128, 68, 79, 84, 83, 45, 49, 51, 52, 53, 56, 128, 68, 79, - 84, 83, 45, 49, 51, 52, 53, 55, 56, 128, 68, 79, 84, 83, 45, 49, 51, 52, - 53, 55, 128, 68, 79, 84, 83, 45, 49, 51, 52, 53, 54, 56, 128, 68, 79, 84, - 83, 45, 49, 51, 52, 53, 54, 55, 56, 128, 68, 79, 84, 83, 45, 49, 51, 52, - 53, 54, 55, 128, 68, 79, 84, 83, 45, 49, 51, 52, 53, 54, 128, 68, 79, 84, - 83, 45, 49, 51, 52, 53, 128, 68, 79, 84, 83, 45, 49, 51, 52, 128, 68, 79, - 84, 83, 45, 49, 51, 128, 68, 79, 84, 83, 45, 49, 50, 56, 128, 68, 79, 84, - 83, 45, 49, 50, 55, 56, 128, 68, 79, 84, 83, 45, 49, 50, 55, 128, 68, 79, - 84, 83, 45, 49, 50, 54, 56, 128, 68, 79, 84, 83, 45, 49, 50, 54, 55, 56, - 128, 68, 79, 84, 83, 45, 49, 50, 54, 55, 128, 68, 79, 84, 83, 45, 49, 50, - 54, 128, 68, 79, 84, 83, 45, 49, 50, 53, 56, 128, 68, 79, 84, 83, 45, 49, - 50, 53, 55, 56, 128, 68, 79, 84, 83, 45, 49, 50, 53, 55, 128, 68, 79, 84, - 83, 45, 49, 50, 53, 54, 56, 128, 68, 79, 84, 83, 45, 49, 50, 53, 54, 55, - 56, 128, 68, 79, 84, 83, 45, 49, 50, 53, 54, 55, 128, 68, 79, 84, 83, 45, - 49, 50, 53, 54, 128, 68, 79, 84, 83, 45, 49, 50, 53, 128, 68, 79, 84, 83, - 45, 49, 50, 52, 56, 128, 68, 79, 84, 83, 45, 49, 50, 52, 55, 56, 128, 68, - 79, 84, 83, 45, 49, 50, 52, 55, 128, 68, 79, 84, 83, 45, 49, 50, 52, 54, - 56, 128, 68, 79, 84, 83, 45, 49, 50, 52, 54, 55, 56, 128, 68, 79, 84, 83, - 45, 49, 50, 52, 54, 55, 128, 68, 79, 84, 83, 45, 49, 50, 52, 54, 128, 68, - 79, 84, 83, 45, 49, 50, 52, 53, 56, 128, 68, 79, 84, 83, 45, 49, 50, 52, - 53, 55, 56, 128, 68, 79, 84, 83, 45, 49, 50, 52, 53, 55, 128, 68, 79, 84, - 83, 45, 49, 50, 52, 53, 54, 56, 128, 68, 79, 84, 83, 45, 49, 50, 52, 53, - 54, 55, 56, 128, 68, 79, 84, 83, 45, 49, 50, 52, 53, 54, 55, 128, 68, 79, - 84, 83, 45, 49, 50, 52, 53, 54, 128, 68, 79, 84, 83, 45, 49, 50, 52, 53, - 128, 68, 79, 84, 83, 45, 49, 50, 52, 128, 68, 79, 84, 83, 45, 49, 50, 51, - 56, 128, 68, 79, 84, 83, 45, 49, 50, 51, 55, 56, 128, 68, 79, 84, 83, 45, - 49, 50, 51, 55, 128, 68, 79, 84, 83, 45, 49, 50, 51, 54, 56, 128, 68, 79, - 84, 83, 45, 49, 50, 51, 54, 55, 56, 128, 68, 79, 84, 83, 45, 49, 50, 51, - 54, 55, 128, 68, 79, 84, 83, 45, 49, 50, 51, 54, 128, 68, 79, 84, 83, 45, - 49, 50, 51, 53, 56, 128, 68, 79, 84, 83, 45, 49, 50, 51, 53, 55, 56, 128, - 68, 79, 84, 83, 45, 49, 50, 51, 53, 55, 128, 68, 79, 84, 83, 45, 49, 50, - 51, 53, 54, 56, 128, 68, 79, 84, 83, 45, 49, 50, 51, 53, 54, 55, 56, 128, - 68, 79, 84, 83, 45, 49, 50, 51, 53, 54, 55, 128, 68, 79, 84, 83, 45, 49, - 50, 51, 53, 54, 128, 68, 79, 84, 83, 45, 49, 50, 51, 53, 128, 68, 79, 84, - 83, 45, 49, 50, 51, 52, 56, 128, 68, 79, 84, 83, 45, 49, 50, 51, 52, 55, - 56, 128, 68, 79, 84, 83, 45, 49, 50, 51, 52, 55, 128, 68, 79, 84, 83, 45, - 49, 50, 51, 52, 54, 56, 128, 68, 79, 84, 83, 45, 49, 50, 51, 52, 54, 55, - 56, 128, 68, 79, 84, 83, 45, 49, 50, 51, 52, 54, 55, 128, 68, 79, 84, 83, - 45, 49, 50, 51, 52, 54, 128, 68, 79, 84, 83, 45, 49, 50, 51, 52, 53, 56, - 128, 68, 79, 84, 83, 45, 49, 50, 51, 52, 53, 55, 56, 128, 68, 79, 84, 83, - 45, 49, 50, 51, 52, 53, 55, 128, 68, 79, 84, 83, 45, 49, 50, 51, 52, 53, - 54, 56, 128, 68, 79, 84, 83, 45, 49, 50, 51, 52, 53, 54, 55, 56, 128, 68, - 79, 84, 83, 45, 49, 50, 51, 52, 53, 54, 55, 128, 68, 79, 84, 83, 45, 49, - 50, 51, 52, 53, 54, 128, 68, 79, 84, 83, 45, 49, 50, 51, 52, 53, 128, 68, - 79, 84, 83, 45, 49, 50, 51, 52, 128, 68, 79, 84, 83, 45, 49, 50, 51, 128, - 68, 79, 84, 83, 45, 49, 50, 128, 68, 79, 84, 83, 45, 49, 128, 68, 79, 84, - 83, 128, 68, 79, 84, 76, 69, 83, 211, 68, 79, 82, 85, 128, 68, 79, 79, - 82, 128, 68, 79, 79, 78, 71, 128, 68, 79, 78, 71, 128, 68, 79, 78, 128, - 68, 79, 77, 65, 73, 206, 68, 79, 76, 76, 65, 210, 68, 79, 76, 73, 85, 77, - 128, 68, 79, 73, 84, 128, 68, 79, 71, 128, 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, 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, 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, 80, 69, 82, 83, 73, 79, 78, 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, 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, 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, - 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, 211, 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, 65, 84, 72, 128, 68, 72, 65, 76, 128, - 68, 72, 65, 65, 76, 85, 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, 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, + 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, 77, 77, 193, 71, 82, 65, 73, 78, 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, 78, 71, 128, 71, 79, 76, 68, 128, 71, 79, 75, 128, 71, 79, 73, + 78, 199, 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, 84, + 84, 65, 204, 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, 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, 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, 69, 128, 71, 72, 69, 128, 71, 72, 197, 71, 72, 65, 89, 78, 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, 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, 80, 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, 80, 128, 71, + 71, 65, 65, 128, 71, 69, 84, 193, 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, 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, 69, 78, 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, 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, + 65, 78, 128, 71, 65, 77, 65, 76, 128, 71, 65, 77, 65, 204, 71, 65, 77, + 128, 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, 89, 128, 70, 87, 73, + 128, 70, 87, 69, 69, 128, 70, 87, 69, 128, 70, 87, 65, 65, 128, 70, 87, + 65, 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, 82, 128, 70, 85, 80, 128, 70, 85, + 78, 69, 82, 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, 69, 204, 70, 84, 72, 79, + 82, 193, 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, 205, 70, 82, 79, + 71, 128, 70, 82, 73, 84, 85, 128, 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, 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, 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, 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, 78, 79, 84, 197, 70, 79, 79, 84, + 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, + 128, 70, 77, 128, 70, 76, 89, 128, 70, 76, 85, 84, 69, 128, 70, 76, 79, + 87, 69, 82, 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, 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, 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, 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, 76, 73, 78, 197, + 70, 73, 86, 197, 70, 73, 84, 65, 128, 70, 73, 84, 128, 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, 69, 128, 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, 83, 84, 73, 86, 65, 76, 128, 70, 69, 82, 82, 89, 128, 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, 65, 89, 65, 78, 78, 65, 128, 70, 65, 88, 128, 70, 65, 84, 72, + 69, 82, 128, 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, 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, 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, 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, 65, 65, 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, 66, 69, 89, 70, 73, 76, 73, 128, 69, 89, 65, 78, 78, 65, + 128, 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, 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, 69, 83, 83, 128, + 69, 88, 67, 69, 76, 76, 69, 78, 84, 128, 69, 87, 69, 128, 69, 86, 69, 78, + 73, 78, 71, 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, 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, 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, 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, 206, 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, 76, 72, 88, 128, 69, 79, 72, 128, 69, 78, 89, 128, 69, + 78, 86, 69, 76, 79, 80, 69, 128, 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, 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, 79, 211, 69, 78, 78, 128, 69, 78, 76, 65, 82, 71, 69, 77, + 69, 78, 84, 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, 196, 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, 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, 83, 73, 83, + 128, 69, 76, 76, 73, 80, 83, 69, 128, 69, 76, 73, 70, 73, 128, 69, 76, + 69, 86, 69, 78, 128, 69, 76, 69, 86, 69, 206, 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, + 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, 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, 200, 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, 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, 68, 90, 90, 69, 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, 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, 128, 68, 85, 84, 73, 69, 83, 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, 78, 128, 68, 85, 77, 128, 68, 85, 76, 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, 213, 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, 45, 83, 72, 65, 68, 79, 87, 69, 196, 68, 82, 73, 86, 69, 128, 68, 82, + 73, 86, 197, 68, 82, 73, 204, 68, 82, 65, 85, 71, 72, 84, 211, 68, 82, + 65, 71, 79, 78, 128, 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, 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, + 55, 128, 68, 79, 84, 83, 45, 50, 53, 54, 56, 128, 68, 79, 84, 83, 45, 50, + 53, 54, 55, 56, 128, 68, 79, 84, 83, 45, 50, 53, 54, 55, 128, 68, 79, 84, + 83, 45, 50, 53, 54, 128, 68, 79, 84, 83, 45, 50, 53, 128, 68, 79, 84, 83, + 45, 50, 52, 56, 128, 68, 79, 84, 83, 45, 50, 52, 55, 56, 128, 68, 79, 84, + 83, 45, 50, 52, 55, 128, 68, 79, 84, 83, 45, 50, 52, 54, 56, 128, 68, 79, + 84, 83, 45, 50, 52, 54, 55, 56, 128, 68, 79, 84, 83, 45, 50, 52, 54, 55, + 128, 68, 79, 84, 83, 45, 50, 52, 54, 128, 68, 79, 84, 83, 45, 50, 52, 53, + 56, 128, 68, 79, 84, 83, 45, 50, 52, 53, 55, 56, 128, 68, 79, 84, 83, 45, + 50, 52, 53, 55, 128, 68, 79, 84, 83, 45, 50, 52, 53, 54, 56, 128, 68, 79, + 84, 83, 45, 50, 52, 53, 54, 55, 56, 128, 68, 79, 84, 83, 45, 50, 52, 53, + 54, 55, 128, 68, 79, 84, 83, 45, 50, 52, 53, 54, 128, 68, 79, 84, 83, 45, + 50, 52, 53, 128, 68, 79, 84, 83, 45, 50, 52, 128, 68, 79, 84, 83, 45, 50, + 51, 56, 128, 68, 79, 84, 83, 45, 50, 51, 55, 56, 128, 68, 79, 84, 83, 45, + 50, 51, 55, 128, 68, 79, 84, 83, 45, 50, 51, 54, 56, 128, 68, 79, 84, 83, + 45, 50, 51, 54, 55, 56, 128, 68, 79, 84, 83, 45, 50, 51, 54, 55, 128, 68, + 79, 84, 83, 45, 50, 51, 54, 128, 68, 79, 84, 83, 45, 50, 51, 53, 56, 128, + 68, 79, 84, 83, 45, 50, 51, 53, 55, 56, 128, 68, 79, 84, 83, 45, 50, 51, + 53, 55, 128, 68, 79, 84, 83, 45, 50, 51, 53, 54, 56, 128, 68, 79, 84, 83, + 45, 50, 51, 53, 54, 55, 56, 128, 68, 79, 84, 83, 45, 50, 51, 53, 54, 55, + 128, 68, 79, 84, 83, 45, 50, 51, 53, 54, 128, 68, 79, 84, 83, 45, 50, 51, + 53, 128, 68, 79, 84, 83, 45, 50, 51, 52, 56, 128, 68, 79, 84, 83, 45, 50, + 51, 52, 55, 56, 128, 68, 79, 84, 83, 45, 50, 51, 52, 55, 128, 68, 79, 84, + 83, 45, 50, 51, 52, 54, 56, 128, 68, 79, 84, 83, 45, 50, 51, 52, 54, 55, + 56, 128, 68, 79, 84, 83, 45, 50, 51, 52, 54, 55, 128, 68, 79, 84, 83, 45, + 50, 51, 52, 54, 128, 68, 79, 84, 83, 45, 50, 51, 52, 53, 56, 128, 68, 79, + 84, 83, 45, 50, 51, 52, 53, 55, 56, 128, 68, 79, 84, 83, 45, 50, 51, 52, + 53, 55, 128, 68, 79, 84, 83, 45, 50, 51, 52, 53, 54, 56, 128, 68, 79, 84, + 83, 45, 50, 51, 52, 53, 54, 55, 56, 128, 68, 79, 84, 83, 45, 50, 51, 52, + 53, 54, 55, 128, 68, 79, 84, 83, 45, 50, 51, 52, 53, 54, 128, 68, 79, 84, + 83, 45, 50, 51, 52, 53, 128, 68, 79, 84, 83, 45, 50, 51, 52, 128, 68, 79, + 84, 83, 45, 50, 51, 128, 68, 79, 84, 83, 45, 50, 128, 68, 79, 84, 83, 45, + 49, 56, 128, 68, 79, 84, 83, 45, 49, 55, 56, 128, 68, 79, 84, 83, 45, 49, + 55, 128, 68, 79, 84, 83, 45, 49, 54, 56, 128, 68, 79, 84, 83, 45, 49, 54, + 55, 56, 128, 68, 79, 84, 83, 45, 49, 54, 55, 128, 68, 79, 84, 83, 45, 49, + 54, 128, 68, 79, 84, 83, 45, 49, 53, 56, 128, 68, 79, 84, 83, 45, 49, 53, + 55, 56, 128, 68, 79, 84, 83, 45, 49, 53, 55, 128, 68, 79, 84, 83, 45, 49, + 53, 54, 56, 128, 68, 79, 84, 83, 45, 49, 53, 54, 55, 56, 128, 68, 79, 84, + 83, 45, 49, 53, 54, 55, 128, 68, 79, 84, 83, 45, 49, 53, 54, 128, 68, 79, + 84, 83, 45, 49, 53, 128, 68, 79, 84, 83, 45, 49, 52, 56, 128, 68, 79, 84, + 83, 45, 49, 52, 55, 56, 128, 68, 79, 84, 83, 45, 49, 52, 55, 128, 68, 79, + 84, 83, 45, 49, 52, 54, 56, 128, 68, 79, 84, 83, 45, 49, 52, 54, 55, 56, + 128, 68, 79, 84, 83, 45, 49, 52, 54, 55, 128, 68, 79, 84, 83, 45, 49, 52, + 54, 128, 68, 79, 84, 83, 45, 49, 52, 53, 56, 128, 68, 79, 84, 83, 45, 49, + 52, 53, 55, 56, 128, 68, 79, 84, 83, 45, 49, 52, 53, 55, 128, 68, 79, 84, + 83, 45, 49, 52, 53, 54, 56, 128, 68, 79, 84, 83, 45, 49, 52, 53, 54, 55, + 56, 128, 68, 79, 84, 83, 45, 49, 52, 53, 54, 55, 128, 68, 79, 84, 83, 45, + 49, 52, 53, 54, 128, 68, 79, 84, 83, 45, 49, 52, 53, 128, 68, 79, 84, 83, + 45, 49, 52, 128, 68, 79, 84, 83, 45, 49, 51, 56, 128, 68, 79, 84, 83, 45, + 49, 51, 55, 56, 128, 68, 79, 84, 83, 45, 49, 51, 55, 128, 68, 79, 84, 83, + 45, 49, 51, 54, 56, 128, 68, 79, 84, 83, 45, 49, 51, 54, 55, 56, 128, 68, + 79, 84, 83, 45, 49, 51, 54, 55, 128, 68, 79, 84, 83, 45, 49, 51, 54, 128, + 68, 79, 84, 83, 45, 49, 51, 53, 56, 128, 68, 79, 84, 83, 45, 49, 51, 53, + 55, 56, 128, 68, 79, 84, 83, 45, 49, 51, 53, 55, 128, 68, 79, 84, 83, 45, + 49, 51, 53, 54, 56, 128, 68, 79, 84, 83, 45, 49, 51, 53, 54, 55, 56, 128, + 68, 79, 84, 83, 45, 49, 51, 53, 54, 55, 128, 68, 79, 84, 83, 45, 49, 51, + 53, 54, 128, 68, 79, 84, 83, 45, 49, 51, 53, 128, 68, 79, 84, 83, 45, 49, + 51, 52, 56, 128, 68, 79, 84, 83, 45, 49, 51, 52, 55, 56, 128, 68, 79, 84, + 83, 45, 49, 51, 52, 55, 128, 68, 79, 84, 83, 45, 49, 51, 52, 54, 56, 128, + 68, 79, 84, 83, 45, 49, 51, 52, 54, 55, 56, 128, 68, 79, 84, 83, 45, 49, + 51, 52, 54, 55, 128, 68, 79, 84, 83, 45, 49, 51, 52, 54, 128, 68, 79, 84, + 83, 45, 49, 51, 52, 53, 56, 128, 68, 79, 84, 83, 45, 49, 51, 52, 53, 55, + 56, 128, 68, 79, 84, 83, 45, 49, 51, 52, 53, 55, 128, 68, 79, 84, 83, 45, + 49, 51, 52, 53, 54, 56, 128, 68, 79, 84, 83, 45, 49, 51, 52, 53, 54, 55, + 56, 128, 68, 79, 84, 83, 45, 49, 51, 52, 53, 54, 55, 128, 68, 79, 84, 83, + 45, 49, 51, 52, 53, 54, 128, 68, 79, 84, 83, 45, 49, 51, 52, 53, 128, 68, + 79, 84, 83, 45, 49, 51, 52, 128, 68, 79, 84, 83, 45, 49, 51, 128, 68, 79, + 84, 83, 45, 49, 50, 56, 128, 68, 79, 84, 83, 45, 49, 50, 55, 56, 128, 68, + 79, 84, 83, 45, 49, 50, 55, 128, 68, 79, 84, 83, 45, 49, 50, 54, 56, 128, + 68, 79, 84, 83, 45, 49, 50, 54, 55, 56, 128, 68, 79, 84, 83, 45, 49, 50, + 54, 55, 128, 68, 79, 84, 83, 45, 49, 50, 54, 128, 68, 79, 84, 83, 45, 49, + 50, 53, 56, 128, 68, 79, 84, 83, 45, 49, 50, 53, 55, 56, 128, 68, 79, 84, + 83, 45, 49, 50, 53, 55, 128, 68, 79, 84, 83, 45, 49, 50, 53, 54, 56, 128, + 68, 79, 84, 83, 45, 49, 50, 53, 54, 55, 56, 128, 68, 79, 84, 83, 45, 49, + 50, 53, 54, 55, 128, 68, 79, 84, 83, 45, 49, 50, 53, 54, 128, 68, 79, 84, + 83, 45, 49, 50, 53, 128, 68, 79, 84, 83, 45, 49, 50, 52, 56, 128, 68, 79, + 84, 83, 45, 49, 50, 52, 55, 56, 128, 68, 79, 84, 83, 45, 49, 50, 52, 55, + 128, 68, 79, 84, 83, 45, 49, 50, 52, 54, 56, 128, 68, 79, 84, 83, 45, 49, + 50, 52, 54, 55, 56, 128, 68, 79, 84, 83, 45, 49, 50, 52, 54, 55, 128, 68, + 79, 84, 83, 45, 49, 50, 52, 54, 128, 68, 79, 84, 83, 45, 49, 50, 52, 53, + 56, 128, 68, 79, 84, 83, 45, 49, 50, 52, 53, 55, 56, 128, 68, 79, 84, 83, + 45, 49, 50, 52, 53, 55, 128, 68, 79, 84, 83, 45, 49, 50, 52, 53, 54, 56, + 128, 68, 79, 84, 83, 45, 49, 50, 52, 53, 54, 55, 56, 128, 68, 79, 84, 83, + 45, 49, 50, 52, 53, 54, 55, 128, 68, 79, 84, 83, 45, 49, 50, 52, 53, 54, + 128, 68, 79, 84, 83, 45, 49, 50, 52, 53, 128, 68, 79, 84, 83, 45, 49, 50, + 52, 128, 68, 79, 84, 83, 45, 49, 50, 51, 56, 128, 68, 79, 84, 83, 45, 49, + 50, 51, 55, 56, 128, 68, 79, 84, 83, 45, 49, 50, 51, 55, 128, 68, 79, 84, + 83, 45, 49, 50, 51, 54, 56, 128, 68, 79, 84, 83, 45, 49, 50, 51, 54, 55, + 56, 128, 68, 79, 84, 83, 45, 49, 50, 51, 54, 55, 128, 68, 79, 84, 83, 45, + 49, 50, 51, 54, 128, 68, 79, 84, 83, 45, 49, 50, 51, 53, 56, 128, 68, 79, + 84, 83, 45, 49, 50, 51, 53, 55, 56, 128, 68, 79, 84, 83, 45, 49, 50, 51, + 53, 55, 128, 68, 79, 84, 83, 45, 49, 50, 51, 53, 54, 56, 128, 68, 79, 84, + 83, 45, 49, 50, 51, 53, 54, 55, 56, 128, 68, 79, 84, 83, 45, 49, 50, 51, + 53, 54, 55, 128, 68, 79, 84, 83, 45, 49, 50, 51, 53, 54, 128, 68, 79, 84, + 83, 45, 49, 50, 51, 53, 128, 68, 79, 84, 83, 45, 49, 50, 51, 52, 56, 128, + 68, 79, 84, 83, 45, 49, 50, 51, 52, 55, 56, 128, 68, 79, 84, 83, 45, 49, + 50, 51, 52, 55, 128, 68, 79, 84, 83, 45, 49, 50, 51, 52, 54, 56, 128, 68, + 79, 84, 83, 45, 49, 50, 51, 52, 54, 55, 56, 128, 68, 79, 84, 83, 45, 49, + 50, 51, 52, 54, 55, 128, 68, 79, 84, 83, 45, 49, 50, 51, 52, 54, 128, 68, + 79, 84, 83, 45, 49, 50, 51, 52, 53, 56, 128, 68, 79, 84, 83, 45, 49, 50, + 51, 52, 53, 55, 56, 128, 68, 79, 84, 83, 45, 49, 50, 51, 52, 53, 55, 128, + 68, 79, 84, 83, 45, 49, 50, 51, 52, 53, 54, 56, 128, 68, 79, 84, 83, 45, + 49, 50, 51, 52, 53, 54, 55, 56, 128, 68, 79, 84, 83, 45, 49, 50, 51, 52, + 53, 54, 55, 128, 68, 79, 84, 83, 45, 49, 50, 51, 52, 53, 54, 128, 68, 79, + 84, 83, 45, 49, 50, 51, 52, 53, 128, 68, 79, 84, 83, 45, 49, 50, 51, 52, + 128, 68, 79, 84, 83, 45, 49, 50, 51, 128, 68, 79, 84, 83, 45, 49, 50, + 128, 68, 79, 84, 83, 45, 49, 128, 68, 79, 84, 83, 128, 68, 79, 84, 76, + 69, 83, 211, 68, 79, 82, 85, 128, 68, 79, 79, 82, 128, 68, 79, 79, 78, + 71, 128, 68, 79, 78, 71, 128, 68, 79, 77, 65, 73, 206, 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, 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, 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, 74, 128, + 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, 80, 69, 82, 83, 73, 79, 78, 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, 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, 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, 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, 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, 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, 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, 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, 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, 69, 70, 69, 67, 84, - 73, 86, 69, 78, 69, 83, 211, 68, 69, 69, 82, 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, 73, 83, 73, 86, 69, 78, 69, 83, 83, 128, 68, 69, - 67, 73, 77, 65, 204, 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, 79, 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, 194, - 68, 65, 217, 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, 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, 128, 68, 65, - 78, 199, 68, 65, 78, 68, 65, 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, 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, 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, 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, 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, 69, 82, 85, 83, 128, 67, 89, 80, 128, 67, 89, 76, 73, 78, 68, 82, 73, - 67, 73, 84, 89, 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, 84, 128, 67, 85, 212, 67, 85, 83, 84, 79, 77, 69, 210, 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, 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, 82, 89, 80, 84, 79, 71, 82, 65, 77, 77, 73, + 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, 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, 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, 69, + 70, 69, 67, 84, 73, 86, 69, 78, 69, 83, 211, 68, 69, 69, 82, 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, 73, 83, 73, 86, 69, 78, 69, 83, 83, + 128, 68, 69, 67, 73, 77, 65, 204, 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, 79, 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, 194, 68, 65, 217, 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, + 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, 128, + 68, 65, 78, 199, 68, 65, 78, 68, 65, 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, 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, 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, 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, 84, 128, + 67, 85, 212, 67, 85, 83, 84, 79, 77, 69, 210, 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, 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, 208, 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, 82, 89, 80, 84, 79, 71, 82, 65, 77, 77, 73, 195, 67, 82, 85, 90, 69, 73, 82, 207, 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, @@ -3128,32 +3603,33 @@ 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, 128, 67, 79, 79, 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, 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, 79, 78, 65, 78, 212, 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, 76, - 73, 67, 84, 128, 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, 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, 128, 67, 79, 77, 77, 193, 67, 79, 77, 73, 78, - 199, 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, 128, 67, 79, 70, 70, - 73, 78, 128, 67, 79, 69, 78, 71, 128, 67, 79, 68, 65, 128, 67, 79, 65, - 128, 67, 79, 128, 67, 77, 128, 67, 205, 67, 76, 85, 83, 84, 69, 210, 67, - 76, 85, 66, 45, 83, 80, 79, 75, 69, 196, 67, 76, 85, 66, 128, 67, 76, 85, - 194, 67, 76, 79, 85, 68, 128, 67, 76, 79, 84, 72, 69, 83, 128, 67, 76, + 86, 69, 82, 71, 73, 78, 199, 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, 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, + 79, 78, 65, 78, 212, 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, 76, 73, 67, 84, 128, 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, 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, + 128, 67, 79, 77, 77, 193, 67, 79, 77, 73, 78, 199, 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, 128, 67, 79, 70, 70, 73, 78, 128, 67, 79, 69, + 78, 71, 128, 67, 79, 68, 65, 128, 67, 79, 65, 128, 67, 79, 128, 67, 77, + 128, 67, 205, 67, 76, 85, 83, 84, 69, 210, 67, 76, 85, 66, 45, 83, 80, + 79, 75, 69, 196, 67, 76, 85, 66, 128, 67, 76, 85, 194, 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, 78, 69, 83, 83, 128, 67, 76, 79, 83, 69, 68, 128, 67, 76, 79, 83, 69, 196, 67, 76, 79, 83, 197, 67, 76, 79, 67, 75, 87, 73, 83, 197, 67, 76, 73, 86, 73, 83, 128, 67, 76, 73, 78, 71, @@ -3165,31 +3641,34 @@ 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, 73, 128, 67, 73, 69, 88, 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, 73, 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, 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, 65, - 128, 67, 72, 79, 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, 76, - 76, 213, 67, 72, 73, 76, 68, 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, 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, 73, 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, 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, 65, 128, 67, 72, 79, 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, 76, 76, 213, 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, 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, 211, 67, 72, 69, - 80, 128, 67, 72, 69, 206, 67, 72, 69, 69, 128, 67, 72, 69, 67, 75, 128, + 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, 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, 73, 79, 84, 128, 67, 72, 65, 82, 73, 79, 212, @@ -3197,41 +3676,53 @@ 69, 82, 128, 67, 72, 65, 82, 128, 67, 72, 65, 80, 128, 67, 72, 65, 78, 71, 69, 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, 73, 82, 128, 67, 72, 65, 68, 65, 128, 67, 72, - 65, 196, 67, 72, 65, 65, 128, 67, 69, 88, 128, 67, 69, 82, 69, 83, 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, 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, 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, 69, 69, 128, 67, 67, 72, 69, 128, 67, 67, - 72, 65, 65, 128, 67, 67, 72, 65, 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, 84, 65, 87, 65, 128, 67, 65, 84, 128, 67, 65, 82, 89, - 83, 84, 73, 65, 206, 67, 65, 82, 84, 128, 67, 65, 82, 82, 73, 65, 71, - 197, 67, 65, 82, 80, 69, 78, 84, 82, 217, 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, 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, 82, 65, 66, 73, 78, 68, 85, - 128, 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, 76, 89, 65, 128, 67, 65, 76, 89, 193, 67, 65, - 76, 76, 128, 67, 65, 76, 67, 128, 67, 65, 69, 83, 85, 82, 65, 128, 67, - 65, 68, 85, 67, 69, 85, 83, 128, 67, 65, 68, 193, 67, 65, 65, 73, 128, - 67, 193, 67, 45, 83, 73, 77, 80, 76, 73, 70, 73, 69, 196, 67, 45, 51, 57, + 76, 73, 128, 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, 69, 88, + 128, 67, 69, 82, 69, 83, 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, 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, 69, 69, 128, + 67, 67, 72, 69, 128, 67, 67, 72, 65, 65, 128, 67, 67, 72, 65, 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, 84, 65, 87, 65, 128, 67, + 65, 84, 128, 67, 65, 83, 84, 76, 69, 128, 67, 65, 82, 89, 83, 84, 73, 65, + 206, 67, 65, 82, 84, 128, 67, 65, 82, 82, 73, 65, 71, 197, 67, 65, 82, + 80, 69, 78, 84, 82, 217, 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, 128, 67, 65, 210, 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, 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, 76, 89, 65, 128, 67, 65, 76, 89, 193, 67, 65, 76, 76, 128, 67, + 65, 76, 67, 128, 67, 65, 75, 82, 65, 128, 67, 65, 69, 83, 85, 82, 65, + 128, 67, 65, 68, 85, 67, 69, 85, 83, 128, 67, 65, 68, 193, 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, 69, 76, 79, 82, 85, 83, 83, 73, 65, 78, 45, 85, 75, 82, 65, 73, 78, 73, 65, 206, 66, 217, 66, 88, 71, 128, 66, 87, 73, 128, 66, 87, 69, 69, 128, @@ -3250,167 +3741,178 @@ 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, 128, 66, 82, 65, - 78, 67, 200, 66, 82, 65, 75, 67, 69, 84, 128, 66, 82, 65, 67, 75, 69, - 212, 66, 82, 65, 67, 69, 128, 66, 81, 128, 66, 79, 87, 84, 73, 69, 128, - 66, 79, 87, 84, 73, 197, 66, 79, 87, 128, 66, 79, 215, 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, 82, 85, 84, - 79, 128, 66, 79, 79, 77, 69, 82, 65, 78, 71, 128, 66, 79, 78, 69, 128, - 66, 79, 76, 212, 66, 79, 68, 89, 128, 66, 79, 65, 84, 128, 66, 79, 65, - 82, 128, 66, 79, 65, 128, 66, 76, 85, 69, 128, 66, 76, 79, 79, 68, 128, - 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, 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, 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, - 65, 66, 73, 65, 204, 66, 73, 71, 128, 66, 73, 199, 66, 73, 69, 84, 128, - 66, 73, 68, 69, 78, 84, 65, 204, 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, 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, 84, 128, 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, - 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, 73, 84, 72, 128, 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, 206, 66, 69, 70, 79, 82, - 197, 66, 69, 69, 84, 65, 128, 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, 84, 128, 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, 84, 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, 128, 66, 66, 65, 88, 128, 66, - 66, 65, 84, 128, 66, 66, 65, 80, 128, 66, 66, 65, 128, 66, 65, 89, 65, - 78, 78, 65, 128, 66, 65, 84, 72, 84, 85, 66, 128, 66, 65, 84, 72, 65, 77, - 65, 83, 65, 84, 128, 66, 65, 83, 83, 65, 128, 66, 65, 83, 72, 75, 73, - 210, 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, 65, 50, 128, 66, 65, 210, 66, 65, 78, 84, 79, 67, 128, 66, - 65, 78, 203, 66, 65, 78, 68, 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, 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, 65, 82, 50, 128, 66, 65, 71, 65, 128, - 66, 65, 71, 51, 128, 66, 65, 199, 66, 65, 68, 71, 69, 82, 128, 66, 65, - 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, 45, - 84, 73, 76, 84, 69, 196, 66, 65, 67, 75, 128, 66, 65, 67, 203, 66, 65, - 65, 82, 69, 82, 85, 128, 66, 65, 65, 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, 185, 66, 48, 48, 184, 66, 48, 48, 183, 66, 48, 48, 182, 66, - 48, 48, 181, 66, 48, 48, 180, 66, 48, 48, 179, 66, 48, 48, 178, 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, 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, 83, 84, 82, 65, 204, 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, 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, 72, 65, 80, 65, 83, 67, 65, 206, 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, 76, 79, 71, 73, 67, 65, 204, 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, 69, 196, 65, 83, 72, 71, - 65, 66, 128, 65, 83, 72, 57, 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, 65, 66, 197, 65, 82, 83, 69, 79, - 83, 128, 65, 82, 83, 69, 79, 211, 65, 82, 82, 79, 87, 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, 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, + 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, 79, 87, 84, 73, 69, 128, 66, 79, 87, 84, 73, 197, 66, 79, 87, + 128, 66, 79, 215, 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, 82, 85, 84, 79, 128, 66, 79, 79, 77, 69, 82, 65, + 78, 71, 128, 66, 79, 78, 69, 128, 66, 79, 76, 212, 66, 79, 68, 89, 128, + 66, 79, 65, 82, 128, 66, 79, 65, 128, 66, 76, 85, 69, 128, 66, 76, 79, + 79, 68, 128, 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, 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, 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, 65, 66, 73, 65, 204, 66, 73, 71, 128, 66, 73, 199, 66, + 73, 69, 84, 128, 66, 73, 68, 69, 78, 84, 65, 204, 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, 77, 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, 84, + 128, 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, 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, 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, 206, 66, 69, 70, 79, 82, 197, + 66, 69, 69, 84, 65, 128, 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, 128, 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, 84, 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, 128, 66, 66, + 65, 88, 128, 66, 66, 65, 84, 128, 66, 66, 65, 80, 128, 66, 66, 65, 128, + 66, 65, 89, 65, 78, 78, 65, 128, 66, 65, 85, 128, 66, 65, 84, 72, 84, 85, + 66, 128, 66, 65, 84, 72, 65, 77, 65, 83, 65, 84, 128, 66, 65, 83, 83, 65, + 128, 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, 65, 50, 128, 66, 65, 210, 66, 65, 78, + 84, 79, 67, 128, 66, 65, 78, 203, 66, 65, 78, 68, 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, 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, 71, 65, + 128, 66, 65, 71, 51, 128, 66, 65, 199, 66, 65, 68, 71, 69, 82, 128, 66, + 65, 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, + 45, 84, 73, 76, 84, 69, 196, 66, 65, 67, 75, 128, 66, 65, 67, 203, 66, + 65, 65, 82, 69, 82, 85, 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, 83, 84, 82, 65, 204, 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, 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, 65, 82, 86, 65, 86, 69, 68, 73, 195, + 65, 84, 72, 65, 80, 65, 83, 67, 65, 206, 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, 76, + 79, 71, 73, 67, 65, 204, 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, 69, 196, 65, 83, 80, 69, 82, 128, 65, 83, 72, 71, 65, + 66, 128, 65, 83, 72, 57, 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, 65, 66, 197, 65, 82, 83, 69, 79, 83, + 128, 65, 82, 83, 69, 79, 211, 65, 82, 82, 79, 87, 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, 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, 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, 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, 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, 68, - 128, 65, 82, 65, 196, 65, 82, 65, 66, 73, 67, 45, 73, 78, 68, 73, 195, - 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, 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, 79, 84, 72, 69, 83, 128, 65, 80, 79, 84, 72, 69, 77, 65, + 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, 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, 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, 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, @@ -3418,45 +3920,52 @@ 65, 80, 73, 78, 128, 65, 80, 69, 83, 207, 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, 84, 73, 82, 69, 83, 84, 82, 73, 67, - 84, 73, 79, 78, 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, 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, 75, 72, 128, 65, 78, 72, 85, 128, - 65, 78, 71, 85, 76, 65, 82, 128, 65, 78, 71, 83, 84, 82, 79, 205, 65, 78, - 71, 75, 72, 65, 78, 75, 72, 85, 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, 77, 80, 83, 128, 65, 77, 80, 69, 82, 83, 65, 78, 68, 128, 65, 77, 79, - 85, 78, 212, 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, 76, 86, 69, 79, 76, 65, - 210, 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, 76, 79, 128, 65, 76, 76, 73, - 65, 78, 67, 69, 128, 65, 76, 76, 201, 65, 76, 76, 65, 200, 65, 76, 73, - 71, 78, 69, 196, 65, 76, 73, 70, 85, 128, 65, 76, 71, 73, 218, 65, 76, - 70, 65, 128, 65, 76, 69, 85, 212, 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, 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, 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, 82, 80, 76, 65, 78, 69, 128, 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, - 71, 71, 65, 210, 65, 72, 65, 68, 128, 65, 71, 79, 71, 201, 65, 71, 71, - 82, 65, 86, 65, 84, 73, 79, 78, 128, 65, 71, 65, 73, 78, 128, 65, 70, 84, - 69, 210, 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, 69, 89, 65, 78, - 78, 65, 128, 65, 69, 83, 67, 85, 76, 65, 80, 73, 85, 83, 128, 65, 69, 83, - 67, 128, 65, 69, 76, 65, 45, 80, 73, 76, 76, 65, 128, 65, 69, 69, 89, 65, - 78, 78, 65, 128, 65, 69, 68, 65, 45, 80, 73, 76, 76, 65, 128, 65, 197, - 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, 65, 75, 128, 65, 68, 65, + 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, 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, 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, 72, 85, 128, 65, 78, 71, 85, 76, 65, 82, 128, + 65, 78, 71, 83, 84, 82, 79, 205, 65, 78, 71, 75, 72, 65, 78, 75, 72, 85, + 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, 66, + 193, 65, 77, 65, 82, 128, 65, 77, 65, 210, 65, 77, 65, 76, 71, 65, 77, + 65, 84, 73, 79, 206, 65, 76, 86, 69, 79, 76, 65, 210, 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, 76, 79, 128, 65, 76, 76, 73, 65, 78, 67, 69, 128, 65, + 76, 76, 201, 65, 76, 76, 65, 200, 65, 76, 73, 71, 78, 69, 196, 65, 76, + 73, 70, 85, 128, 65, 76, 71, 73, 218, 65, 76, 70, 65, 128, 65, 76, 69, + 85, 212, 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, 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, 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, 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, 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, + 69, 89, 65, 78, 78, 65, 128, 65, 69, 89, 128, 65, 69, 84, 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, 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, 197, 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, 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, @@ -3468,11856 +3977,13280 @@ 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, 77, 128, 65, 65, 75, 128, 65, 65, 74, 128, 65, 65, 66, 65, - 65, 70, 73, 76, 73, 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, 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, }; -static unsigned short lexicon_offset[] = { - 0, 0, 6, 10, 15, 23, 27, 34, 39, 41, 44, 50, 63, 75, 84, 90, 95, 103, - 112, 116, 121, 129, 134, 137, 144, 149, 157, 163, 169, 177, 184, 194, - 199, 202, 209, 212, 217, 226, 232, 241, 248, 255, 260, 264, 273, 281, - 282, 288, 294, 302, 308, 314, 320, 328, 333, 340, 344, 347, 349, 355, - 362, 369, 377, 380, 385, 390, 396, 398, 403, 412, 419, 425, 286, 430, - 432, 434, 438, 443, 446, 452, 456, 464, 474, 481, 113, 490, 498, 503, - 511, 516, 524, 535, 538, 542, 555, 565, 571, 574, 575, 582, 584, 593, - 301, 596, 600, 608, 613, 615, 619, 622, 628, 635, 642, 647, 651, 660, - 670, 679, 688, 692, 698, 706, 713, 721, 725, 731, 735, 743, 752, 756, - 627, 763, 771, 775, 784, 789, 792, 796, 804, 813, 816, 821, 831, 840, - 847, 200, 733, 850, 857, 580, 865, 873, 879, 884, 891, 894, 900, 906, - 911, 916, 929, 22, 934, 937, 947, 952, 956, 962, 971, 974, 984, 993, 997, - 1002, 1007, 1012, 1019, 1027, 1030, 1040, 1043, 1045, 1053, 1057, 1061, - 93, 1064, 1069, 1075, 1077, 1086, 1089, 1092, 1097, 1099, 1105, 1111, - 1113, 1117, 331, 1120, 1128, 1132, 1136, 1141, 1144, 1150, 1154, 1161, - 1164, 1170, 80, 1176, 1178, 1181, 1183, 657, 1188, 1196, 1203, 1213, - 1222, 1230, 1232, 1237, 1242, 1248, 1253, 1258, 1262, 1267, 1273, 1278, - 1283, 1287, 1292, 1297, 1301, 1306, 1311, 1316, 1322, 1328, 1334, 1339, - 1343, 1348, 1353, 1358, 1362, 1367, 1372, 1377, 1382, 1233, 1238, 1243, - 1249, 1254, 1386, 1259, 1392, 1401, 1263, 1405, 1268, 1274, 1279, 1409, - 1414, 1419, 1423, 1427, 1433, 1437, 1284, 1440, 1444, 1288, 1450, 1293, - 1454, 1458, 1298, 1462, 1467, 1471, 1474, 1478, 1302, 1307, 1312, 1483, - 1489, 1495, 1501, 1317, 1329, 1335, 1505, 1509, 1513, 1516, 1340, 1520, - 1522, 1527, 1532, 1538, 1543, 1548, 1552, 1557, 1562, 1567, 1572, 1578, - 1583, 1588, 1594, 1600, 1605, 1609, 1614, 1619, 1624, 1629, 1633, 1641, - 1645, 1650, 1655, 1660, 1665, 1669, 1672, 1677, 1682, 1687, 1692, 1698, - 1703, 1707, 1344, 1710, 1715, 1720, 1349, 1724, 1728, 1735, 1354, 1742, - 1359, 1746, 1748, 1754, 1363, 1759, 1768, 1368, 1773, 1779, 1373, 1784, - 1789, 1792, 1797, 1801, 1805, 1809, 1812, 1378, 1383, 950, 1816, 1818, - 1819, 1823, 1827, 1832, 1836, 1840, 1844, 1847, 1852, 1856, 1861, 1865, - 1869, 1874, 1878, 1881, 1885, 1899, 1903, 1907, 1910, 1915, 1919, 1923, - 1928, 1933, 1938, 1942, 1947, 1951, 1956, 1963, 1969, 1974, 1979, 1985, - 1990, 1995, 1998, 1250, 2000, 2007, 2015, 2025, 2034, 2048, 2052, 2065, - 2073, 2077, 2082, 2086, 2090, 2095, 2100, 2104, 2107, 2111, 2118, 2125, - 2131, 2136, 2141, 2144, 2146, 2149, 2155, 2159, 2164, 2168, 2172, 1750, - 1756, 2177, 2181, 2184, 2189, 2194, 2199, 2203, 2210, 2215, 2218, 2225, - 2231, 2235, 2239, 2243, 2249, 2255, 2269, 2286, 2295, 2300, 2304, 2309, - 2314, 2318, 2330, 2336, 1959, 2342, 2345, 2352, 2356, 2360, 2364, 1966, - 2368, 2373, 2378, 2382, 2390, 2394, 2398, 2402, 2407, 2412, 2417, 2421, - 2426, 2431, 2435, 2440, 2444, 2447, 2451, 2455, 2460, 2464, 2468, 2477, - 2481, 2485, 2491, 2496, 2503, 2507, 2511, 2516, 2520, 2525, 2531, 2536, - 2540, 2121, 2544, 2549, 2555, 2560, 2564, 2569, 2574, 2578, 2584, 2589, - 2595, 2599, 2605, 2610, 1260, 62, 2616, 2620, 2624, 2628, 2633, 2637, - 2641, 2645, 2649, 2654, 2658, 2663, 2667, 2670, 2674, 2679, 2683, 2688, - 2692, 2696, 2701, 2705, 2708, 2721, 2725, 2729, 2733, 2737, 2741, 2744, - 2748, 2752, 2757, 2761, 2766, 2771, 2776, 2780, 2783, 2786, 2792, 2796, - 2800, 2803, 2807, 2811, 1059, 445, 2814, 2819, 2823, 2826, 2831, 2836, - 2840, 2845, 2849, 2852, 2858, 2865, 2871, 2876, 2880, 2885, 2889, 2899, - 2903, 2907, 2912, 2917, 2927, 1848, 2932, 2936, 2939, 2945, 2952, 2956, - 648, 790, 2960, 2967, 2973, 2978, 2984, 2989, 1857, 2993, 485, 2999, - 3010, 1862, 3014, 3019, 3034, 3040, 3047, 3057, 3063, 3068, 3074, 3077, - 3081, 3088, 3093, 3097, 3101, 3105, 3109, 3114, 3120, 2675, 3125, 3137, - 1554, 3144, 3147, 3151, 3155, 3158, 3162, 3167, 3171, 3175, 3181, 3187, - 3192, 3198, 3202, 3210, 3220, 3226, 3231, 3240, 3248, 3255, 3259, 3268, - 3272, 3277, 3282, 3286, 3294, 3299, 3303, 1870, 1402, 318, 402, 3309, - 3315, 3319, 3323, 3328, 3332, 3336, 3339, 3343, 3347, 3351, 3356, 3360, - 3364, 3306, 3370, 3377, 3381, 3394, 3398, 3402, 3406, 3410, 3414, 3420, - 3427, 3431, 3439, 3448, 3454, 3459, 3462, 3466, 3470, 3480, 3490, 3498, - 3505, 3512, 3518, 3524, 3531, 3535, 3540, 3544, 3552, 3557, 3565, 3570, - 3575, 3579, 3584, 3591, 3594, 3598, 3602, 3605, 3611, 3617, 3621, 3632, - 3642, 3657, 3672, 3687, 3702, 3717, 3732, 3747, 3762, 3777, 3792, 3807, - 3822, 3837, 3852, 3867, 3882, 3897, 3912, 3927, 3942, 3957, 3972, 3987, - 4002, 4017, 4032, 4047, 4062, 4077, 4092, 4107, 4122, 4137, 4152, 4167, - 4182, 4197, 4212, 4227, 4242, 4257, 4272, 4287, 4302, 4317, 4332, 4347, - 4362, 4377, 4386, 4395, 4400, 4406, 4410, 4415, 4419, 4422, 4426, 4429, - 4434, 285, 388, 4440, 4448, 4452, 4456, 4459, 4465, 4469, 4477, 4483, - 4488, 4495, 4502, 4508, 4513, 4520, 4526, 4530, 4535, 4542, 4548, 2693, - 4458, 4552, 4556, 4560, 4563, 4570, 4573, 4581, 4586, 4591, 4582, 4583, - 4596, 4602, 4608, 4613, 4618, 4625, 4630, 4634, 4637, 4641, 1904, 454, - 4645, 4649, 4654, 4660, 4665, 4669, 4672, 4676, 4681, 4685, 4692, 4696, - 4700, 4704, 913, 633, 4707, 4715, 4722, 4729, 4735, 4742, 4750, 4757, - 4764, 4769, 4781, 1280, 1410, 1415, 4792, 1420, 4796, 4800, 4809, 4818, - 4824, 4829, 4833, 4839, 4844, 4848, 4857, 4866, 4875, 4884, 4889, 4894, - 4906, 2846, 4910, 4912, 4917, 4921, 4930, 4938, 1424, 4919, 4944, 4948, - 4951, 4955, 4964, 4970, 4975, 4978, 4987, 4993, 5001, 5005, 5009, 5012, - 5017, 5024, 5030, 5033, 5035, 5038, 5046, 5054, 5057, 5062, 4593, 5065, - 1964, 1970, 5067, 5075, 1991, 5080, 5084, 5089, 5093, 5097, 5101, 5106, - 5110, 5115, 5119, 5122, 5125, 5131, 5137, 5143, 5149, 5155, 5161, 5167, - 5171, 5175, 5179, 5183, 5187, 5192, 5200, 5210, 5215, 5219, 5230, 5243, - 5254, 5267, 5278, 5290, 5302, 5314, 5327, 5340, 5347, 5353, 5360, 5366, - 5370, 5375, 5379, 5386, 5394, 5398, 5404, 5414, 5418, 5423, 5430, 5436, - 4737, 5446, 5450, 5457, 632, 5461, 5465, 5470, 5475, 5480, 5484, 5490, - 5494, 5498, 5504, 5509, 5513, 1896, 5519, 5527, 5536, 5540, 5546, 5551, - 5556, 5561, 5567, 5572, 3177, 5577, 5581, 5586, 5591, 5541, 5596, 5600, - 5607, 5613, 5618, 5622, 5627, 5631, 5640, 5020, 5645, 2404, 5649, 5654, - 5659, 5547, 5663, 5552, 5557, 5668, 5675, 5682, 5688, 5694, 5700, 5705, - 5710, 5715, 5562, 5568, 5721, 5727, 5732, 5573, 5737, 1115, 5740, 5748, - 5754, 5760, 5769, 5774, 5789, 5806, 5825, 5834, 5842, 5857, 5867, 5877, - 5883, 5895, 5904, 5912, 5919, 5926, 5932, 5937, 5945, 5955, 5962, 5972, - 5982, 5992, 6001, 6011, 6025, 6040, 6049, 6057, 6062, 6066, 6075, 6085, - 6095, 6105, 6110, 6114, 6123, 6133, 6144, 6157, 6170, 6182, 6187, 6193, - 6196, 6200, 6205, 6209, 6217, 6226, 6234, 6241, 6252, 6256, 6259, 6265, - 6269, 6275, 6282, 6287, 6294, 6301, 6308, 6315, 6322, 6329, 6334, 5802, - 6339, 6348, 6352, 6364, 6368, 6371, 6375, 6379, 6383, 6387, 6392, 6397, - 6402, 6408, 6413, 6418, 5426, 6423, 6427, 6431, 6435, 6440, 6445, 6451, - 6455, 6463, 6467, 6470, 6476, 6483, 6487, 6490, 6495, 3205, 6501, 6509, - 6515, 5441, 6520, 6525, 6529, 6542, 6556, 6563, 6569, 6573, 6578, 6584, - 6589, 4853, 6594, 6597, 6602, 6606, 2409, 802, 6612, 6616, 6622, 6628, - 6633, 6638, 6646, 6652, 6665, 6673, 6677, 6685, 6692, 6704, 6714, 6721, - 6728, 6737, 6746, 6754, 6760, 6765, 6770, 6776, 5582, 6781, 6784, 6791, - 6797, 6810, 6821, 6828, 6834, 6843, 6851, 6858, 6864, 6870, 6875, 6879, - 6884, 6890, 6898, 5587, 6905, 6910, 6917, 6923, 6928, 6936, 6944, 6951, - 6955, 6969, 6979, 6984, 6988, 6999, 7005, 7010, 7015, 7019, 5592, 7024, - 7027, 7039, 7046, 7051, 7055, 7060, 7064, 7071, 7077, 7084, 5542, 7089, - 2414, 8, 7096, 7101, 7105, 7111, 7122, 7132, 7141, 7153, 7158, 7162, - 7170, 7184, 7188, 7191, 7199, 7206, 7214, 7218, 7229, 7233, 7240, 7245, - 7249, 7254, 7258, 7262, 7265, 7271, 7277, 7284, 7294, 7303, 7310, 5601, - 5608, 5614, 5619, 7316, 5623, 7322, 7325, 7332, 7347, 7363, 7378, 897, - 383, 7383, 7391, 7398, 7404, 7409, 7414, 5632, 7416, 7420, 7430, 7435, - 7439, 7448, 7452, 7455, 7462, 7466, 7469, 7477, 7484, 7492, 7496, 7500, - 7506, 7510, 7514, 7518, 7524, 7528, 7535, 7539, 7544, 7548, 7555, 7561, - 7569, 7575, 7585, 7590, 7595, 7599, 7607, 3131, 7615, 7620, 7624, 7628, - 7631, 7639, 7646, 7650, 7655, 7659, 7670, 7676, 7680, 7683, 7690, 5641, - 7695, 7699, 1712, 3563, 606, 133, 7706, 7710, 7715, 7720, 7724, 7728, - 7732, 7737, 7741, 7746, 7750, 7753, 7757, 7761, 7766, 7776, 7782, 7786, - 7790, 7797, 7805, 7814, 7825, 7832, 7839, 7848, 7857, 7866, 7875, 7884, - 7893, 7903, 7913, 7923, 7933, 7943, 7952, 7962, 7972, 7982, 7992, 8002, - 8012, 8022, 8031, 8041, 8051, 8061, 8071, 8081, 8091, 8100, 8110, 8120, - 8130, 8140, 8150, 8160, 8170, 8180, 8190, 8199, 8209, 8219, 8229, 8239, - 8249, 8259, 8269, 8279, 8289, 8299, 8308, 8314, 8318, 8321, 8325, 8330, - 8337, 8343, 8348, 8352, 8357, 8361, 8365, 5650, 8371, 8376, 8385, 5655, - 8390, 5660, 8393, 8397, 8401, 8411, 8416, 8425, 8433, 8440, 8445, 8452, - 8457, 8461, 8464, 8475, 8485, 8494, 8502, 8513, 8525, 8535, 8539, 8544, - 8549, 8553, 8558, 8562, 8565, 8572, 8582, 8591, 8598, 8602, 8608, 8613, - 8618, 8622, 8631, 8636, 8642, 8647, 8651, 8660, 8668, 8676, 8683, 8691, - 8703, 8714, 8724, 8731, 8737, 8746, 8757, 8766, 8775, 8783, 8790, 8799, - 8807, 4610, 8811, 8813, 8818, 8824, 8832, 8839, 8848, 8857, 8866, 8875, - 8884, 8893, 8902, 8911, 8921, 8931, 8940, 8954, 8961, 8969, 8978, 8984, - 8993, 9001, 9010, 9023, 9031, 9038, 9051, 9057, 9066, 9075, 9080, 9084, - 9090, 9096, 9103, 5440, 9108, 9113, 9120, 9125, 9130, 9134, 9140, 9148, - 9156, 9163, 9171, 9179, 9184, 9190, 9195, 9199, 9210, 9218, 9224, 9229, - 9238, 9244, 9249, 9258, 9272, 3090, 9276, 9281, 9286, 9292, 9297, 9302, - 9306, 9311, 9316, 4609, 9321, 9326, 9331, 9336, 9340, 9345, 9350, 9355, - 9361, 9367, 9372, 9376, 9381, 9386, 5664, 9391, 9396, 9401, 9406, 9418, - 9428, 9439, 9450, 9461, 9473, 9484, 9495, 9506, 9517, 9522, 2062, 9526, - 9529, 9535, 9543, 9551, 9556, 9564, 9572, 9579, 9586, 9591, 9597, 9604, - 9612, 9619, 9631, 9636, 7341, 9642, 9651, 9658, 9664, 9672, 9679, 9686, - 9692, 9701, 9708, 9716, 9722, 9729, 9737, 9742, 2893, 1081, 9749, 9322, - 9752, 9758, 9762, 9774, 9779, 9786, 9792, 9797, 9327, 9332, 9801, 9805, - 9809, 9817, 9824, 9831, 9848, 9852, 9855, 9863, 2949, 9867, 9869, 9877, - 9887, 9893, 9898, 9902, 9908, 9913, 9916, 9923, 9929, 9935, 9940, 9947, - 9953, 9958, 9965, 9971, 9978, 9984, 9990, 9996, 10004, 10010, 10016, - 10021, 10028, 10033, 10037, 10042, 10049, 10054, 10060, 10063, 10067, - 10079, 10085, 10090, 10097, 10103, 10109, 10118, 10126, 10133, 10143, - 10153, 10161, 9346, 10164, 9351, 10172, 10184, 10197, 10212, 10223, - 10241, 10252, 10265, 10276, 10287, 10299, 10312, 10323, 10334, 10345, - 2264, 10358, 10362, 10370, 10381, 10388, 10394, 10398, 10404, 10407, - 10417, 10425, 10432, 10440, 10445, 10450, 10457, 10463, 10468, 10473, - 10477, 10481, 10487, 10493, 10498, 10503, 10508, 10512, 9356, 9362, 9368, - 10516, 10524, 10533, 10540, 5558, 10544, 10546, 10551, 10556, 10562, - 10567, 10572, 10577, 10581, 10587, 10592, 10598, 10603, 10608, 10614, - 10619, 10624, 10629, 10635, 10640, 10645, 10651, 10657, 10662, 10669, - 10676, 10681, 10685, 10689, 10692, 10700, 10705, 10710, 10720, 10725, - 10732, 10738, 10748, 10762, 10776, 10790, 10804, 10819, 10834, 10851, - 10869, 10882, 10888, 10893, 10898, 10904, 10909, 10914, 10918, 10922, - 10927, 10931, 10937, 10942, 10947, 10951, 10956, 10963, 10968, 10972, - 10978, 10983, 10988, 10992, 10998, 11003, 11008, 11015, 11020, 11024, - 11028, 11033, 11038, 11044, 11049, 11058, 11066, 11073, 11080, 11086, - 11092, 11097, 11102, 11108, 11113, 11119, 11124, 11130, 11136, 11143, - 11149, 11154, 11159, 5706, 11168, 11171, 11177, 11182, 11192, 11199, - 11204, 11210, 11215, 11221, 11226, 11232, 11237, 11245, 11252, 11257, - 11263, 11267, 11276, 11287, 11294, 11302, 11308, 11315, 11321, 11326, - 11330, 11336, 11341, 11346, 11351, 5711, 4626, 2428, 11355, 11359, 11363, - 11367, 11371, 11374, 11381, 11389, 9377, 11396, 11406, 11414, 11421, - 11431, 11440, 8490, 8499, 11445, 11455, 11470, 11476, 11483, 11490, - 11496, 11506, 11516, 9382, 11525, 11531, 11537, 11545, 11553, 11558, - 11567, 11575, 11587, 11597, 11607, 11617, 11626, 11638, 11648, 11658, - 11669, 11674, 11686, 11698, 11710, 11722, 11734, 11746, 11758, 11770, - 11782, 11794, 11805, 11817, 11829, 11841, 11853, 11865, 11877, 11889, - 11901, 11913, 11925, 11936, 11948, 11960, 11972, 11984, 11996, 12008, - 12020, 12032, 12044, 12056, 12067, 12079, 12091, 12103, 12115, 12127, - 12139, 12151, 12163, 12175, 12187, 12198, 12210, 12222, 12234, 12246, - 12258, 12270, 12282, 12294, 12306, 12318, 12329, 12341, 12353, 12365, - 12377, 12389, 12401, 12413, 12425, 12437, 12449, 12460, 12472, 12484, - 12496, 12508, 12520, 12532, 12544, 12556, 12568, 12580, 12591, 12603, - 12615, 12627, 12639, 12652, 12665, 12678, 12691, 12704, 12717, 12730, - 12742, 12755, 12768, 12781, 12794, 12807, 12820, 12833, 12846, 12859, - 12872, 12884, 12897, 12910, 12923, 12936, 12949, 12962, 12975, 12988, - 13001, 13014, 13026, 13039, 13052, 13065, 13078, 13091, 13104, 13117, - 13130, 13143, 13156, 13168, 13181, 13194, 13207, 13220, 13233, 13246, - 13259, 13272, 13285, 13298, 13310, 13323, 13336, 13349, 13362, 13375, - 13388, 13401, 13414, 13427, 13440, 13452, 13463, 13476, 13489, 13502, - 13515, 13528, 13541, 13554, 13567, 13580, 13593, 13605, 13618, 13631, - 13644, 13657, 13670, 13683, 13696, 13709, 13722, 13735, 13747, 13760, - 13773, 13786, 13799, 13812, 13825, 13838, 13851, 13864, 13877, 13889, - 13902, 13915, 13928, 13941, 13954, 13967, 13980, 13993, 14006, 14019, - 14031, 14044, 14057, 14070, 14083, 14096, 14109, 14122, 14135, 14148, - 14161, 14173, 14186, 14199, 14212, 14225, 14238, 14251, 14264, 14277, - 14290, 14303, 14315, 14328, 14341, 14354, 14367, 14380, 14393, 14406, - 14419, 14432, 14445, 14457, 14470, 14483, 14496, 14509, 14522, 14535, - 14548, 14561, 14574, 14587, 14599, 14612, 14625, 14638, 14651, 14664, - 14677, 14690, 14703, 14716, 14729, 14741, 14754, 14767, 14780, 14793, - 14806, 14819, 14832, 14845, 14858, 14871, 14883, 14894, 14902, 14909, - 14915, 14919, 14925, 14931, 14939, 14945, 14950, 5563, 14954, 14961, - 14969, 14976, 14983, 6804, 14990, 14999, 15004, 4642, 15011, 15016, - 15021, 15029, 15036, 15043, 15049, 15058, 15067, 15073, 15078, 15086, - 15092, 15102, 15111, 15115, 15122, 15126, 15131, 15137, 15145, 15149, - 9392, 15158, 15162, 15168, 5410, 15175, 15181, 15186, 15190, 15194, 5941, - 15199, 15207, 15214, 15223, 15230, 15237, 15243, 15247, 15253, 15259, - 15267, 15273, 15280, 15286, 15295, 15303, 15312, 15317, 15328, 15333, - 15338, 15343, 4815, 15347, 15354, 15359, 15367, 15379, 15384, 15388, - 15391, 15397, 15403, 15408, 15412, 15415, 15426, 15431, 5733, 15438, - 5574, 5738, 15443, 15447, 111, 15455, 15459, 15463, 15467, 15472, 15476, - 15480, 7845, 15484, 15490, 15495, 15499, 15503, 15511, 15515, 15520, - 15525, 15529, 15535, 15540, 15544, 15549, 15554, 15558, 15565, 15569, - 15574, 15578, 15581, 15594, 15599, 15608, 15613, 15616, 2297, 2302, - 15620, 15626, 15631, 15636, 15641, 15647, 15652, 15657, 15661, 15666, - 15671, 15677, 15682, 15687, 15693, 15698, 15702, 15707, 15712, 15717, - 15721, 15726, 15731, 15736, 15741, 15745, 15749, 15754, 2437, 15703, - 15758, 15765, 6020, 15777, 15785, 15708, 15792, 15797, 15713, 15805, - 15810, 15815, 15820, 15824, 15829, 15832, 15836, 15842, 15847, 5432, - 1717, 1722, 15851, 15857, 15863, 15868, 15872, 15876, 15880, 15883, - 15889, 15896, 15904, 15910, 15916, 15921, 15926, 9614, 10139, 15930, - 15942, 15945, 15952, 15956, 15967, 15976, 15989, 15999, 16013, 16025, - 16039, 16049, 16055, 16073, 16092, 16105, 16119, 16135, 16146, 16163, - 16181, 16193, 16207, 16221, 16233, 16250, 16269, 16281, 16299, 16312, - 16326, 16346, 6536, 16358, 16363, 16368, 16374, 16379, 2079, 16383, - 16389, 16393, 16396, 16400, 16408, 16414, 15722, 16418, 16429, 16435, - 16441, 16450, 16457, 16464, 16470, 16479, 16487, 16497, 16502, 16511, - 16520, 16531, 16542, 16552, 16557, 16561, 16569, 16579, 16590, 16598, - 16605, 16611, 16616, 15732, 16620, 16629, 16634, 16643, 16651, 16661, - 16670, 16676, 16682, 15737, 15742, 16686, 16696, 958, 9568, 3031, 16705, - 16714, 16722, 16733, 16744, 16754, 16763, 16772, 16781, 16787, 16796, - 16804, 5718, 16810, 16813, 16817, 16822, 16827, 16835, 15750, 16839, - 16845, 16849, 16855, 16861, 2872, 16869, 16874, 16878, 16882, 16889, - 16893, 16901, 16907, 16912, 16916, 16921, 16927, 16938, 16943, 16947, - 16958, 16962, 16966, 16969, 16973, 16978, 16982, 16986, 829, 16990, 5, - 16996, 17000, 17004, 17008, 17013, 17017, 17021, 17025, 17029, 17034, - 17038, 17043, 17047, 17050, 17054, 17059, 17063, 17068, 17072, 17076, - 17080, 17085, 17089, 17093, 17103, 17108, 17112, 17116, 17121, 17126, - 17135, 17140, 17145, 17149, 17153, 17165, 17174, 17183, 17189, 17193, - 17203, 17212, 17220, 17226, 17230, 17237, 17247, 17256, 17264, 17272, - 17279, 17288, 17297, 17305, 17310, 17314, 17318, 17321, 17323, 17327, - 17331, 17336, 17340, 17344, 17347, 17351, 17354, 17358, 17361, 17365, - 17369, 17373, 17377, 17382, 17387, 17392, 17396, 17399, 17404, 17410, - 17415, 17421, 17426, 17430, 17434, 17438, 17443, 17447, 17452, 17456, - 17463, 17467, 17470, 17474, 17480, 17486, 17490, 17494, 17499, 17506, - 17512, 17516, 17525, 17529, 17533, 17536, 17542, 17547, 17553, 17558, - 1776, 2449, 17562, 17563, 17566, 17570, 17574, 17579, 17583, 17587, - 17590, 17595, 17599, 17602, 17607, 17611, 17616, 17620, 9587, 17625, - 17628, 17631, 17635, 17639, 17646, 17651, 17658, 17662, 17666, 17671, - 17676, 17680, 17685, 17697, 17708, 17712, 17715, 17721, 4743, 2001, - 17725, 17741, 5796, 17761, 17770, 17786, 17790, 17793, 17799, 17809, - 17815, 17830, 17842, 17853, 17861, 17870, 17876, 17885, 17895, 17906, - 17917, 17926, 17935, 17943, 17950, 17958, 17964, 17969, 17975, 17980, - 17988, 18000, 18012, 18026, 18033, 18042, 18051, 18059, 18067, 18075, - 18082, 18091, 18099, 18109, 18118, 18128, 18137, 18146, 18154, 18159, - 18163, 18166, 18170, 18174, 18178, 18184, 18190, 9632, 18195, 18207, - 18213, 6149, 18224, 18234, 18243, 18247, 18250, 18254, 18260, 18264, - 18269, 18278, 18285, 4784, 18292, 18300, 18307, 18313, 18318, 18324, - 18330, 18338, 18342, 18345, 18347, 18167, 18356, 18362, 18372, 18377, - 18383, 18388, 18393, 18398, 18405, 18414, 18423, 18429, 18434, 18440, - 18445, 18452, 18457, 18461, 18471, 18475, 18480, 18490, 18499, 18503, - 18510, 18516, 18521, 18528, 18532, 8380, 18540, 18547, 18554, 15531, - 18096, 18559, 18563, 18568, 18581, 18595, 18611, 18629, 18646, 18664, - 16152, 18681, 18693, 18707, 10228, 16169, 18719, 18731, 9444, 18745, - 18750, 18755, 18761, 18765, 18770, 18780, 18786, 6473, 18792, 18794, - 18799, 18807, 18811, 18401, 18817, 18824, 18834, 18839, 18843, 18846, - 18852, 18860, 18870, 10257, 18884, 18891, 18895, 18898, 18903, 18907, - 18917, 18922, 18927, 18935, 18944, 18949, 10262, 18953, 18956, 18959, - 18975, 18983, 18991, 18999, 19004, 19008, 19014, 19020, 19023, 19029, - 19041, 19048, 19055, 19069, 19082, 19091, 19103, 19114, 19123, 19132, - 19140, 19151, 4766, 19158, 19164, 19169, 19175, 19185, 19194, 19200, - 19205, 19212, 19224, 19231, 19240, 19248, 19254, 19260, 19265, 19269, - 19272, 19278, 19283, 19287, 19298, 19307, 19315, 19320, 19326, 9981, - 5169, 19331, 19334, 19337, 19343, 19351, 19359, 19363, 19368, 19371, - 19380, 19388, 19399, 19403, 19409, 19415, 19419, 19425, 19447, 19471, - 19478, 19484, 19495, 19513, 19520, 19524, 19533, 19546, 19554, 19566, - 19577, 19587, 19601, 19610, 19618, 19630, 5813, 19641, 19652, 19664, - 19674, 19683, 19688, 19692, 19700, 19705, 19709, 19712, 19720, 19728, - 19737, 19746, 2278, 19752, 19761, 19771, 19781, 19790, 19795, 19806, - 19817, 19821, 19831, 19840, 19850, 19860, 19868, 19877, 19884, 19892, - 19899, 19908, 19912, 19920, 19927, 19934, 19945, 19960, 19967, 19977, - 19986, 9070, 19992, 19997, 20001, 20009, 20015, 20024, 20029, 20039, - 1194, 20043, 1256, 583, 20046, 20055, 18106, 20062, 20067, 20071, 20077, - 1289, 444, 317, 20082, 20091, 20100, 20108, 20119, 20128, 20136, 20139, - 20147, 20155, 9600, 20160, 20166, 3399, 20171, 20175, 20181, 20185, - 20192, 1451, 20198, 5881, 20205, 20215, 20223, 20229, 20238, 20246, - 20254, 20261, 20268, 1486, 20275, 20281, 20292, 20303, 20311, 20318, - 20327, 20335, 20342, 20349, 20362, 20373, 20392, 1294, 20396, 20401, - 20409, 2908, 20413, 20418, 1455, 17345, 20428, 20432, 20437, 20441, 2854, - 20447, 20455, 2909, 239, 20463, 20471, 20479, 20486, 20492, 20497, 20504, - 20507, 20513, 18265, 20519, 88, 20523, 20527, 20533, 20538, 20544, 2012, - 20548, 20552, 20555, 20558, 20565, 20571, 15817, 2953, 10920, 20576, - 20579, 20587, 20590, 20602, 20607, 20611, 20619, 20626, 20632, 20639, - 20646, 20649, 20653, 20657, 1459, 20667, 2332, 2132, 20672, 20677, 20681, - 20686, 20691, 20697, 20702, 20707, 20711, 20716, 20722, 20727, 20732, - 20738, 20743, 20747, 20752, 20757, 20762, 20767, 20772, 20778, 20784, - 20789, 20793, 20798, 20802, 20807, 20812, 20817, 20821, 20826, 20831, - 20836, 20841, 20847, 20853, 20858, 20862, 20867, 20872, 20877, 20882, - 20887, 20891, 20896, 20901, 20906, 20910, 20915, 20923, 20929, 20935, - 20941, 20946, 20950, 20953, 20957, 20962, 20966, 20971, 20975, 20978, - 20983, 15226, 20202, 20988, 20992, 20997, 21001, 21004, 21007, 21011, - 21016, 21024, 21028, 21033, 21037, 21041, 21046, 21051, 21055, 21061, - 21066, 21073, 21080, 21084, 21087, 21093, 21102, 21109, 21113, 21118, - 21122, 21128, 21132, 21138, 7242, 10484, 21143, 21148, 21153, 21159, - 21164, 21169, 21173, 21178, 21183, 21189, 21194, 21199, 21203, 21208, - 21213, 21217, 21222, 21227, 21232, 21236, 21241, 21246, 21251, 21255, - 21259, 21263, 21272, 21278, 21284, 21293, 21301, 21306, 21310, 21317, - 21323, 21327, 21332, 21341, 21346, 1485, 21352, 21355, 21359, 15858, - 15864, 21365, 21369, 21380, 21391, 21403, 21410, 21417, 21422, 21426, - 14928, 626, 15225, 21434, 21438, 21443, 21449, 21454, 21460, 21465, - 21471, 21476, 2386, 2816, 21480, 21483, 21488, 21493, 21499, 21504, - 21509, 21513, 21518, 21524, 21529, 21534, 21540, 21545, 21549, 21554, - 21559, 21564, 21569, 21573, 21578, 21583, 21588, 21594, 21600, 21606, - 21611, 21615, 21620, 2969, 21624, 21627, 4825, 21631, 21637, 21644, 4834, - 21648, 21655, 21661, 21670, 21678, 21682, 21689, 21695, 21699, 21702, - 21711, 21719, 21723, 21733, 21743, 21749, 21759, 21764, 21777, 21791, - 21802, 21814, 21828, 21841, 21853, 9455, 21865, 21870, 21875, 21879, - 21883, 21887, 1765, 19112, 21891, 21896, 21901, 21905, 21908, 21914, - 21920, 6277, 10168, 21925, 21930, 21935, 21444, 21940, 21945, 21951, - 21450, 21956, 21959, 21455, 21964, 21970, 21976, 21461, 21981, 21986, - 21992, 21997, 22002, 22008, 22014, 22019, 22024, 22028, 22033, 22038, - 22043, 22051, 22055, 22060, 22065, 22069, 22074, 22079, 22084, 21466, - 21472, 22090, 2174, 224, 22093, 22096, 22100, 22104, 22112, 22119, 22126, - 22130, 22133, 22139, 22147, 22151, 22155, 22158, 22165, 22169, 22176, - 22184, 22192, 22199, 22203, 689, 271, 22215, 22220, 22225, 22231, 22236, - 2980, 22241, 22246, 22251, 22256, 22261, 15938, 22266, 22271, 22276, - 22281, 22287, 22292, 22296, 22301, 22306, 22311, 22315, 22320, 22325, - 15781, 2986, 22330, 22335, 22340, 22346, 22351, 22356, 22360, 22365, - 22370, 22376, 22381, 22386, 22390, 22395, 22400, 22405, 22409, 22414, - 22419, 22424, 22430, 22436, 22441, 22445, 22450, 22455, 22460, 22464, - 22472, 22478, 22482, 22489, 10815, 22495, 22502, 22510, 22517, 22523, - 22535, 22541, 22545, 22549, 22160, 22553, 22564, 22569, 22574, 22579, - 22583, 22588, 15869, 22592, 15239, 22597, 22602, 22608, 22613, 22617, - 22621, 22624, 22630, 22641, 22653, 22658, 22662, 22665, 2387, 300, 22669, - 22675, 26, 22680, 22684, 22688, 22696, 22700, 22704, 22707, 22712, 22716, - 22721, 22725, 22730, 22734, 22739, 22743, 22746, 22748, 22751, 22753, - 22757, 22769, 22778, 22782, 22788, 22793, 22799, 22804, 22809, 22813, - 22818, 22825, 22830, 22834, 22841, 18104, 18114, 22845, 22850, 22855, - 22860, 22864, 22871, 4913, 22877, 22886, 22894, 22909, 22923, 22931, - 22942, 22951, 22956, 22966, 22971, 22975, 22978, 22982, 22986, 22993, - 22998, 5401, 23008, 23010, 23013, 23017, 23021, 23026, 23032, 23037, - 23046, 23052, 23057, 23064, 23068, 23075, 23088, 23096, 23100, 23110, - 23115, 23119, 23123, 23129, 23134, 23144, 23153, 23164, 23172, 23183, - 23192, 23195, 23199, 23207, 23213, 23221, 23228, 23234, 2092, 23238, - 23240, 23245, 23250, 23253, 23255, 23259, 23262, 23266, 23270, 23276, - 23286, 23291, 23297, 23301, 23306, 23319, 18367, 23325, 23334, 11591, - 21729, 23341, 23346, 23350, 23358, 23365, 23370, 23374, 23378, 23386, - 23392, 23398, 23403, 23407, 23410, 23415, 16239, 23431, 23443, 23455, - 16256, 23469, 23481, 10281, 23495, 23500, 23505, 23509, 23516, 23528, - 23534, 23537, 23542, 23545, 23547, 23551, 23554, 23559, 23564, 23570, - 23575, 23580, 23586, 23592, 23597, 23601, 23606, 23611, 23616, 23620, - 23623, 23629, 23634, 23639, 23644, 23648, 23653, 23659, 23664, 23669, - 23675, 23680, 23685, 23690, 23695, 23700, 23704, 23707, 23713, 23717, - 23725, 23732, 23740, 23750, 23756, 23762, 23766, 23775, 23780, 23785, - 6511, 23790, 23797, 23803, 23808, 23816, 23820, 23823, 23834, 23841, - 23847, 23851, 23854, 23860, 23866, 23874, 20487, 23881, 23889, 23894, - 23900, 23905, 23909, 23916, 23922, 18380, 23931, 23936, 23944, 23952, - 5909, 3418, 23959, 23963, 23967, 23971, 23976, 23980, 23984, 23989, - 23993, 23997, 24001, 24005, 24009, 24012, 24014, 24022, 24026, 24033, - 24037, 24045, 24052, 24062, 24066, 24070, 24078, 24084, 8593, 24090, - 24099, 24106, 24114, 24122, 24130, 24137, 24144, 24151, 24158, 24165, - 24170, 24176, 24193, 24201, 24209, 24216, 416, 24220, 24226, 22947, - 24232, 24240, 24246, 24252, 24261, 24267, 2941, 15826, 24276, 24283, - 24288, 24292, 24299, 24307, 24316, 24326, 24332, 24340, 24349, 24357, - 15571, 24364, 24371, 24377, 24387, 24396, 24407, 24411, 24416, 24422, - 24428, 24433, 24446, 24459, 24472, 24479, 24485, 24490, 24494, 1465, 83, - 24498, 24500, 24504, 24508, 24512, 24517, 24521, 5849, 24525, 24531, - 3629, 24537, 24540, 24545, 24549, 24554, 24558, 24562, 24567, 6372, - 24571, 24575, 24579, 9954, 24584, 24588, 24593, 24598, 24603, 24607, - 18384, 24613, 24616, 24620, 24625, 24629, 24635, 24640, 24644, 24648, - 4945, 4949, 20605, 24651, 24659, 24666, 24670, 316, 24675, 24681, 24687, - 24691, 24700, 24704, 24709, 24714, 24718, 24724, 24729, 24744, 24759, - 24774, 24790, 24808, 19756, 24822, 24827, 24831, 23081, 24839, 24843, - 24852, 24860, 6072, 9756, 24864, 24867, 24870, 4926, 3111, 24875, 24883, - 24887, 24890, 24894, 24899, 24905, 24910, 24914, 24919, 24923, 24929, - 24933, 24940, 7550, 24944, 24950, 24957, 24964, 24971, 20095, 4862, - 24978, 24985, 24992, 24998, 25003, 25010, 25021, 25027, 25032, 25039, - 25043, 25047, 25057, 25063, 25068, 25073, 25078, 25083, 25087, 25091, - 25097, 2004, 711, 6388, 25106, 6393, 25111, 6398, 6403, 6409, 25116, - 25126, 25130, 6414, 25135, 25138, 25143, 25147, 25152, 25159, 25165, - 25175, 3444, 25184, 25188, 25192, 25202, 25213, 25219, 25225, 25230, - 25236, 25239, 25246, 25252, 25257, 25264, 25271, 25275, 25285, 25298, - 25307, 25316, 25327, 25340, 25349, 25354, 6419, 25359, 25367, 25372, - 4392, 21, 25379, 25384, 11012, 25388, 25391, 25394, 25398, 25406, 25410, - 25413, 25419, 25425, 25433, 25439, 25446, 25450, 25454, 19923, 25458, - 25467, 25473, 25478, 25482, 25490, 25496, 25501, 25506, 25510, 25516, - 25521, 25527, 3216, 25534, 25538, 25541, 9882, 25553, 25564, 25571, - 25577, 25581, 25587, 25592, 25598, 25603, 25607, 25612, 25617, 25627, - 25633, 25646, 25651, 25657, 16672, 1468, 855, 25662, 25668, 14, 25676, - 25683, 25687, 25691, 25699, 25703, 25708, 25712, 25719, 25724, 25728, - 25733, 25739, 25744, 25750, 25755, 25759, 25763, 25767, 25772, 25776, - 25781, 25785, 25792, 25797, 25801, 25806, 25810, 25815, 25819, 10029, - 10034, 25824, 25828, 25831, 25835, 25840, 25844, 25850, 25857, 25862, - 25872, 25877, 25885, 25889, 25892, 25896, 25901, 25906, 25910, 25915, - 8604, 25926, 25930, 25933, 25937, 25941, 25944, 25948, 4952, 8620, 25951, - 25954, 25959, 25963, 25972, 25988, 26004, 26014, 19742, 26021, 26025, - 26030, 26034, 26038, 26043, 26048, 26052, 26057, 26061, 18966, 26065, - 26070, 26074, 26081, 26089, 26095, 26102, 26108, 26112, 26118, 26126, - 26130, 26139, 5830, 26147, 26151, 26159, 26166, 26171, 26175, 26180, - 18556, 1142, 26184, 26191, 26197, 26202, 26205, 26207, 26214, 26221, - 26227, 26231, 26234, 26238, 26242, 26246, 26251, 26255, 26259, 26262, - 26266, 16287, 26285, 6549, 26298, 26304, 26308, 26312, 26319, 26325, - 26330, 26336, 26346, 26358, 26369, 26374, 26381, 26385, 26388, 10365, - 10050, 26396, 26400, 26404, 26409, 26414, 26418, 26422, 26425, 4599, - 19639, 26430, 26434, 26440, 24322, 26446, 26450, 26455, 26462, 26466, - 10304, 26469, 26476, 862, 26480, 26485, 26490, 26495, 26499, 26504, - 26510, 26515, 26521, 26526, 26536, 26541, 26546, 15604, 23800, 26551, - 26554, 26561, 26570, 26574, 26577, 26581, 604, 26586, 26592, 26596, - 26606, 26615, 26622, 26628, 26632, 26639, 26645, 26652, 26658, 26668, - 26676, 26682, 26688, 26693, 26697, 26704, 26710, 26717, 26247, 478, 1109, - 26723, 26728, 26731, 26737, 26745, 1397, 26750, 26754, 26761, 26767, - 26771, 26776, 26785, 26795, 26801, 26818, 26822, 26831, 26839, 26845, - 26850, 26857, 26863, 26871, 26876, 26884, 26903, 16332, 26917, 26933, - 26947, 26953, 26958, 26963, 26968, 26974, 26979, 26983, 26990, 26995, - 298, 2473, 27002, 27007, 19856, 26860, 27012, 27017, 27025, 27029, 27032, - 27038, 27042, 19827, 27045, 27049, 27052, 27057, 27061, 27066, 27071, - 27075, 27080, 27084, 27088, 27093, 27099, 18940, 27104, 27108, 10470, - 441, 43, 21484, 21489, 21494, 21500, 21505, 21510, 27111, 21514, 27115, - 21519, 21525, 27119, 21530, 21535, 27127, 27132, 21541, 27137, 27142, - 27147, 27152, 27158, 27164, 21546, 27177, 27183, 21550, 21555, 27187, - 21560, 21565, 27190, 27195, 27199, 21384, 27205, 8769, 27212, 27217, - 21570, 27221, 27226, 27231, 27236, 27240, 27245, 27250, 27256, 27261, - 27266, 27272, 27278, 27283, 27287, 27292, 27297, 27302, 27306, 27311, - 27316, 27321, 27327, 27333, 27339, 27344, 27348, 27353, 27357, 21574, - 21579, 21584, 27361, 27365, 21589, 21595, 21601, 21607, 27377, 18282, - 27381, 27385, 27390, 27395, 27399, 27409, 27414, 27419, 27423, 27427, - 27430, 27438, 21616, 1475, 27443, 27451, 27460, 27464, 27472, 27480, - 27496, 27501, 1739, 7688, 27505, 2509, 27517, 27518, 27526, 27533, 27538, - 27545, 1058, 6441, 27548, 27553, 27556, 27565, 1308, 27570, 27577, 27580, - 27585, 15917, 2207, 6642, 27589, 27595, 1210, 2032, 27604, 27613, 23287, - 6464, 3055, 1313, 27623, 27631, 27638, 27643, 27647, 27651, 16842, 6491, - 27659, 27668, 27677, 27685, 27692, 27697, 27710, 27723, 27735, 27747, - 27759, 27772, 27783, 27794, 27802, 27810, 27822, 27834, 27845, 27854, - 27862, 27869, 27881, 27888, 27897, 27904, 27914, 27919, 27925, 27930, - 27934, 27941, 27945, 27952, 27960, 2173, 27967, 27978, 27988, 27997, - 28005, 28015, 28023, 28033, 28039, 28050, 28060, 28069, 28078, 28088, - 28097, 1695, 37, 28102, 28113, 28124, 28134, 28141, 28147, 28152, 28156, - 28167, 28177, 28186, 28197, 10985, 10990, 28202, 28211, 28216, 28226, - 28231, 28239, 28247, 28254, 28260, 6526, 932, 28264, 28270, 28275, 28278, - 1858, 26401, 28286, 28290, 28293, 1502, 28299, 9035, 1318, 28304, 28317, - 28331, 2258, 28349, 28361, 2272, 28375, 28387, 28400, 28414, 28426, 2289, - 28440, 1324, 1330, 1336, 6595, 28445, 28450, 28455, 28459, 28474, 28489, - 28504, 28519, 28534, 28549, 28564, 28579, 28594, 28609, 28624, 28639, - 28654, 28669, 28684, 28699, 28714, 28729, 28744, 28759, 28774, 28789, - 28804, 28819, 28834, 28849, 28864, 28879, 28894, 28909, 28924, 28939, - 28954, 28969, 28984, 28999, 29014, 29029, 29044, 29059, 29074, 29089, - 29104, 29119, 29134, 29149, 29164, 29179, 29194, 29209, 29224, 29239, - 29254, 29269, 29284, 29299, 29314, 29329, 29344, 29359, 29374, 29389, - 29404, 29419, 29434, 29449, 29464, 29479, 29494, 29509, 29524, 29539, - 29554, 29569, 29584, 29599, 29614, 29629, 29644, 29659, 29674, 29689, - 29704, 29719, 29734, 29749, 29764, 29779, 29794, 29809, 29824, 29839, - 29854, 29869, 29884, 29899, 29914, 29929, 29944, 29959, 29974, 29989, - 30004, 30019, 30034, 30049, 30064, 30079, 30094, 30109, 30124, 30139, - 30154, 30169, 30184, 30199, 30214, 30229, 30244, 30259, 30274, 30289, - 30304, 30319, 30334, 30349, 30364, 30379, 30394, 30409, 30424, 30439, - 30454, 30469, 30484, 30499, 30514, 30529, 30544, 30559, 30574, 30589, - 30604, 30619, 30634, 30649, 30664, 30679, 30694, 30709, 30724, 30739, - 30754, 30769, 30784, 30799, 30814, 30829, 30844, 30859, 30874, 30889, - 30904, 30919, 30934, 30949, 30964, 30979, 30994, 31009, 31024, 31039, - 31054, 31069, 31084, 31099, 31114, 31129, 31144, 31159, 31174, 31189, - 31204, 31219, 31234, 31249, 31264, 31279, 31294, 31309, 31324, 31339, - 31354, 31369, 31384, 31399, 31414, 31429, 31444, 31459, 31474, 31489, - 31504, 31519, 31534, 31549, 31564, 31579, 31594, 31609, 31624, 31639, - 31654, 31669, 31684, 31699, 31714, 31729, 31744, 31759, 31774, 31789, - 31804, 31819, 31834, 31849, 31864, 31879, 31894, 31909, 31924, 31939, - 31954, 31969, 31984, 31999, 32014, 32029, 32044, 32059, 32074, 32089, - 32104, 32119, 32134, 32149, 32164, 32179, 32194, 32209, 32224, 32239, - 32254, 32269, 32284, 32299, 32314, 32329, 32344, 32359, 32374, 32389, - 32404, 32419, 32434, 32449, 32464, 32479, 32494, 32509, 32524, 32539, - 32554, 32569, 32584, 32599, 32614, 32629, 32644, 32659, 32674, 32689, - 32704, 32719, 32734, 32749, 32764, 32779, 32794, 32809, 32824, 32839, - 32854, 32869, 32884, 32899, 32914, 32929, 32944, 32959, 32974, 32989, - 33004, 33019, 33034, 33049, 33064, 33079, 33094, 33109, 33124, 33139, - 33154, 33169, 33184, 33199, 33214, 33229, 33244, 33259, 33274, 33289, - 33304, 33319, 33334, 33349, 33364, 33379, 33394, 33409, 33424, 33439, - 33454, 33469, 33484, 33499, 33514, 33529, 33544, 33559, 33574, 33589, - 33604, 33619, 33634, 33649, 33664, 33679, 33694, 33709, 33724, 33739, - 33754, 33769, 33784, 33799, 33814, 33829, 33844, 33859, 33874, 33889, - 33904, 33919, 33934, 33949, 33964, 33979, 33994, 34009, 34024, 34039, - 34054, 34069, 34084, 34099, 34114, 34129, 34144, 34159, 34174, 34189, - 34204, 34219, 34234, 34249, 34264, 34279, 34294, 34309, 34324, 34339, - 34354, 34369, 34384, 34399, 34414, 34429, 34444, 34459, 34474, 34489, - 34504, 34519, 34534, 34549, 34564, 34579, 34594, 34609, 34624, 34639, - 34654, 34669, 34684, 34699, 34714, 34729, 34744, 34759, 34774, 34789, - 34804, 34819, 34834, 34849, 34864, 34879, 34894, 34909, 34924, 34939, - 34954, 34969, 34984, 34999, 35014, 35029, 35044, 35059, 35074, 35089, - 35104, 35119, 35134, 35149, 35164, 35179, 35194, 35209, 35224, 35239, - 35254, 35269, 35284, 35299, 35314, 35329, 35344, 35359, 35374, 35389, - 35404, 35419, 35434, 35449, 35464, 35480, 35496, 35512, 35528, 35544, - 35560, 35576, 35592, 35608, 35624, 35640, 35656, 35672, 35688, 35704, - 35720, 35736, 35752, 35768, 35784, 35800, 35816, 35832, 35848, 35864, - 35880, 35896, 35912, 35928, 35944, 35960, 35976, 35992, 36008, 36024, - 36040, 36056, 36072, 36088, 36104, 36120, 36136, 36152, 36168, 36184, - 36200, 36216, 36232, 36248, 36264, 36280, 36296, 36312, 36328, 36344, - 36360, 36376, 36392, 36408, 36424, 36440, 36456, 36472, 36488, 36504, - 36520, 36536, 36552, 36568, 36584, 36600, 36616, 36632, 36648, 36664, - 36680, 36696, 36712, 36728, 36744, 36760, 36776, 36792, 36808, 36824, - 36840, 36856, 36872, 36888, 36904, 36920, 36936, 36952, 36968, 36984, - 37000, 37016, 37032, 37048, 37064, 37080, 37096, 37112, 37128, 37144, - 37160, 37176, 37192, 37208, 37224, 37240, 37256, 37272, 37288, 37304, - 37320, 37336, 37352, 37368, 37384, 37400, 37416, 37432, 37448, 37464, - 37480, 37496, 37512, 37528, 37544, 37560, 37576, 37592, 37608, 37624, - 37640, 37656, 37672, 37688, 37704, 37720, 37736, 37752, 37768, 37784, - 37800, 37816, 37832, 37848, 37864, 37880, 37896, 37912, 37928, 37944, - 37960, 37976, 37992, 38008, 38024, 38040, 38056, 38072, 38088, 38104, - 38120, 38136, 38152, 38168, 38184, 38200, 38216, 38232, 38248, 38264, - 38280, 38296, 38312, 38328, 38344, 38360, 38376, 38392, 38408, 38424, - 38440, 38456, 38472, 38488, 38504, 38520, 38536, 38552, 38568, 38584, - 38600, 38616, 38632, 38648, 38664, 38680, 38696, 38712, 38728, 38744, - 38760, 38776, 38792, 38808, 38824, 38840, 38856, 38872, 38888, 38904, - 38920, 38936, 38952, 38968, 38984, 39000, 39016, 39032, 39048, 39064, - 39080, 39096, 39112, 39128, 39144, 39160, 39176, 39192, 39208, 39224, - 39240, 39256, 39272, 39288, 39304, 39320, 39336, 39352, 39368, 39384, - 39400, 39416, 39432, 39448, 39464, 39480, 39496, 39512, 39528, 39544, - 39560, 39576, 39592, 39608, 39624, 39640, 39656, 39672, 39688, 39704, - 39720, 39736, 39752, 39768, 39784, 39800, 39816, 39832, 39848, 39864, - 39880, 39896, 39912, 39928, 39944, 39960, 39976, 39992, 40008, 40024, - 40040, 40056, 40072, 40088, 40104, 40120, 40136, 40152, 40168, 40184, - 40200, 40216, 40232, 40248, 40264, 40280, 40296, 40312, 40328, 40344, - 40360, 40376, 40392, 40408, 40424, 40440, 40456, 40472, 40488, 40504, - 40520, 40536, 40552, 40568, 40584, 40600, 40616, 40632, 40648, 40664, - 40680, 40696, 40712, 40728, 40744, 40760, 40776, 40792, 40808, 40824, - 40840, 40856, 40872, 40888, 40904, 40920, 40936, 40952, 40968, 40984, - 41000, 41016, 41032, 41048, 41064, 41080, 41096, 41112, 41128, 41144, - 41160, 41176, 41192, 41208, 41224, 41240, 41256, 41272, 41288, 41304, - 41320, 41336, 41352, 41368, 41384, 41400, 41416, 41432, 41448, 41464, - 41480, 41496, 41512, 41528, 41544, 41560, 41576, 41592, 41608, 41624, - 41640, 41656, 41672, 41688, 41704, 41720, 41736, 41752, 41768, 41784, - 41800, 41816, 41832, 41848, 41864, 41880, 41896, 41912, 41928, 41944, - 41960, 41976, 41992, 42008, 42024, 42040, 42056, 42072, 42088, 42104, - 42120, 42136, 42152, 42168, 42184, 42200, 42216, 42232, 42248, 42264, - 42280, 42296, 42312, 42328, 42344, 42360, 42376, 42392, 42408, 42424, - 42440, 42456, 42472, 42488, 42504, 42520, 42536, 42552, 42568, 42584, - 42600, 42616, 42632, 42648, 42664, 42680, 42696, 42712, 42728, 42744, - 42760, 42776, 42792, 42808, 42824, 42840, 42856, 42872, 42888, 42904, - 42920, 42936, 42952, 42968, 42984, 43000, 43016, 43032, 43048, 43064, - 43080, 43096, 43112, 43128, 43144, 43160, 43176, 43192, 43208, 43224, - 43240, 43256, 43272, 43288, 43304, 43320, 43336, 43352, 43368, 43384, - 43400, 43416, 43432, 43448, 43464, 43480, 43496, 43512, 43528, 43544, - 43560, 43576, 43592, 43608, 43624, 43640, 43656, 43672, 43688, 43704, - 43720, 43736, 43752, 43768, 43784, 43800, 43816, 43832, 43848, 43864, - 43880, 43896, 43912, 43928, 43944, 43960, 43976, 43992, 44008, 44024, - 44040, 44056, 44072, 44088, 44104, 44120, 44136, 44151, 44160, 44166, - 44172, 44182, 44190, 9688, 44203, 1510, 44211, 19294, 44217, 2211, 44222, - 44226, 44231, 44238, 44246, 40, 44250, 44256, 44261, 44266, 44270, 44275, - 44279, 44283, 6613, 44287, 44297, 44310, 44321, 44334, 44341, 44347, - 44352, 44358, 44364, 44370, 44375, 44380, 44385, 44390, 44394, 44399, - 44404, 44409, 44415, 44421, 44427, 44432, 44436, 44441, 44446, 44450, - 44455, 44460, 44465, 44469, 10588, 10599, 17405, 1553, 44473, 1558, - 44479, 44482, 1589, 44488, 1595, 1601, 6647, 44493, 44501, 44508, 44512, - 44518, 44523, 44528, 44535, 44540, 44544, 1606, 10690, 10701, 44553, - 44560, 44565, 44569, 1610, 44572, 44578, 44588, 44592, 1615, 26447, - 44597, 6755, 6761, 44603, 44615, 44632, 44649, 44666, 44683, 44700, - 44717, 44734, 44751, 44768, 44785, 44802, 44819, 44836, 44853, 44870, - 44887, 44904, 44921, 44938, 44955, 44972, 44989, 45006, 45023, 45040, - 45057, 45074, 45091, 45108, 45125, 45142, 45159, 45176, 45193, 45210, - 45227, 45244, 45261, 45278, 45295, 45312, 45329, 45346, 45363, 45380, - 45397, 45414, 45431, 45448, 45459, 1620, 45464, 45470, 5684, 1625, 19529, - 45475, 45486, 45496, 45503, 45509, 45514, 6777, 1630, 6782, 45518, 45523, - 45529, 45534, 45539, 45544, 45549, 45554, 45559, 45564, 45570, 45576, - 45582, 45587, 45591, 45596, 45601, 45605, 45610, 45615, 45620, 45624, - 45629, 45635, 45640, 45645, 45649, 45654, 45659, 45665, 45670, 45675, - 45681, 45687, 45692, 45696, 45701, 45706, 45711, 45715, 45720, 45725, - 45730, 45736, 45742, 45747, 45751, 45756, 45761, 45766, 45770, 45775, - 45780, 45786, 45791, 45796, 45800, 45805, 45810, 45816, 45821, 45826, - 45832, 45838, 45843, 45847, 45852, 45857, 45861, 45866, 45871, 45876, - 45882, 45888, 45893, 45897, 45902, 45907, 45911, 45916, 45921, 45926, - 45930, 45933, 21707, 45938, 10952, 10964, 6880, 45944, 6885, 45959, - 45964, 45976, 45988, 46000, 2324, 46012, 46017, 46021, 46027, 46033, - 1642, 863, 46038, 46043, 46047, 46051, 46055, 46060, 46064, 11029, 46069, - 46072, 1646, 46080, 6918, 1651, 46085, 46092, 46097, 46106, 46116, 46123, - 1656, 46130, 46135, 11098, 46139, 46144, 46151, 46155, 46165, 11120, - 5603, 5610, 1661, 46172, 46178, 46186, 46193, 46199, 46205, 46210, 3004, - 21288, 21297, 11160, 1666, 1670, 46218, 46229, 46234, 1673, 46242, 46247, - 46259, 46265, 46270, 1678, 46275, 46280, 46288, 46296, 46303, 46312, - 46320, 46329, 1683, 1688, 46333, 46340, 46348, 46354, 46359, 7047, 46368, - 46374, 46380, 46385, 46393, 7056, 7061, 46401, 46407, 3053, 26542, 46412, - 46418, 46423, 46431, 46438, 46443, 46447, 1699, 46453, 46456, 904, 46462, - 9, 46468, 46472, 46477, 46481, 46485, 46489, 46494, 46498, 46503, 46508, - 46512, 46515, 46519, 46524, 46528, 46533, 46537, 23555, 23560, 23565, - 46540, 46547, 46553, 26362, 46563, 23571, 23576, 21909, 21915, 23587, - 21921, 46568, 46573, 46577, 46581, 46584, 46588, 46591, 46596, 46600, - 46604, 46607, 46619, 22821, 46626, 10169, 696, 46629, 46633, 46638, - 46642, 8802, 46645, 46652, 46665, 46674, 46679, 46689, 46702, 46714, - 46721, 46726, 46739, 24440, 46757, 46762, 46769, 46775, 46780, 46788, - 19596, 520, 46794, 46800, 46806, 46811, 21926, 3474, 21931, 46815, 46825, - 46830, 46840, 46855, 46861, 46867, 21936, 21445, 46872, 46877, 46882, - 46887, 46892, 46896, 3515, 21957, 46900, 46906, 330, 46916, 46923, 46932, - 46938, 46946, 46950, 46954, 46958, 46962, 46967, 46971, 46977, 46985, - 46990, 46994, 46999, 47003, 47007, 47013, 47019, 47024, 47028, 21965, - 47033, 21971, 21977, 47038, 47044, 47049, 47053, 21462, 10912, 47056, - 47060, 47065, 47072, 47078, 47082, 47088, 47092, 47096, 47101, 47106, - 47110, 47113, 47118, 47125, 47132, 47138, 47143, 47148, 47152, 47157, - 47163, 47168, 47174, 47179, 47184, 47189, 47195, 47200, 47205, 47211, - 47217, 47223, 21982, 47228, 47233, 47238, 21993, 47243, 47248, 47253, - 47259, 47265, 21998, 47270, 47275, 47280, 22009, 22015, 47285, 47290, - 47295, 47300, 22020, 22025, 22029, 47305, 47276, 47309, 47315, 47323, - 47330, 47336, 47346, 47352, 47359, 6580, 22034, 47365, 47378, 47387, - 47393, 47402, 47408, 16625, 47415, 47422, 22010, 47432, 47439, 47444, - 47448, 47452, 3549, 47457, 47462, 47467, 23649, 23654, 47471, 23660, - 23665, 47476, 23670, 23676, 47481, 23681, 47492, 47495, 47507, 47515, - 22056, 47519, 47528, 47538, 47547, 22061, 47552, 47559, 47568, 47574, - 47582, 22604, 3367, 47587, 22070, 47593, 47599, 47606, 47611, 22075, - 47615, 47621, 47627, 47632, 47638, 47643, 709, 24255, 24631, 24637, - 47647, 47651, 47655, 47658, 47671, 47677, 47681, 47684, 47689, 23001, - 47693, 21467, 15233, 47699, 3495, 3503, 5506, 225, 47702, 47706, 47710, - 47714, 47718, 47721, 47725, 47730, 47734, 47739, 47743, 47747, 47751, - 47756, 47760, 47765, 47769, 47773, 47780, 9840, 47789, 47798, 17550, - 47802, 47808, 47816, 47822, 47834, 47838, 47843, 47849, 47859, 47869, - 47875, 47879, 47884, 47890, 47899, 47908, 47916, 10073, 47920, 47929, - 47937, 47948, 47959, 47968, 47972, 47982, 47988, 47993, 47999, 48004, - 21372, 48015, 18485, 48021, 48028, 48034, 48038, 48048, 48056, 48061, - 48065, 48073, 48079, 48089, 1025, 48092, 48095, 48099, 48105, 48112, - 48118, 48127, 48136, 48142, 48148, 48153, 48160, 48167, 48180, 48189, - 48198, 48203, 48207, 48214, 48221, 48228, 48235, 48242, 48247, 48251, - 48254, 48264, 48268, 48277, 48281, 48286, 48290, 48299, 48307, 48315, - 48320, 48324, 48329, 48334, 48338, 48344, 48356, 48364, 48374, 48381, - 48387, 48392, 48396, 48400, 48404, 48413, 48422, 48431, 48437, 48443, - 48449, 48454, 48461, 48467, 48475, 48482, 7836, 48488, 48494, 48498, - 9241, 48502, 48511, 48519, 48526, 48530, 48534, 48540, 48548, 48555, - 48561, 48572, 48576, 48580, 48584, 48587, 48593, 48598, 48602, 48606, - 48615, 48623, 48630, 16940, 26200, 48636, 48644, 48648, 48655, 48664, - 48672, 48678, 48683, 48687, 48692, 48696, 48701, 48710, 48714, 48721, - 48728, 48736, 48742, 48753, 48759, 48768, 48775, 48782, 48789, 48796, - 48803, 28634, 48810, 48815, 48821, 31711, 2542, 193, 25139, 48825, 48828, - 48833, 48311, 48837, 48847, 48854, 48863, 48873, 48883, 48891, 48895, - 48898, 48905, 48911, 48922, 48934, 48945, 48952, 1319, 16477, 48962, - 2240, 48966, 1100, 11441, 25600, 48974, 48987, 48991, 48996, 49001, 5072, - 49007, 49015, 7154, 49020, 49026, 1711, 6925, 605, 49035, 49044, 49054, - 19000, 49063, 49069, 11075, 49075, 49079, 11082, 7215, 49085, 46224, - 49092, 5691, 147, 9175, 49098, 49110, 49114, 49120, 19549, 49124, 7203, - 2315, 4, 49129, 49139, 49145, 49156, 49163, 49169, 49175, 49183, 49190, - 49200, 49210, 1331, 49219, 49225, 2331, 2337, 5069, 1960, 49229, 49238, - 49249, 49260, 49268, 49274, 49279, 49287, 49291, 49295, 19813, 49307, - 49317, 49323, 49329, 49339, 49342, 49353, 49363, 49372, 49379, 1102, - 2233, 49389, 49394, 49402, 49410, 49421, 49435, 9127, 342, 49445, 49454, - 49462, 49468, 49475, 49481, 49488, 49498, 49506, 3060, 197, 49514, 49525, - 49529, 49541, 19734, 119, 49547, 49552, 49556, 49563, 49569, 49577, - 49584, 5321, 49591, 49600, 3115, 49608, 11121, 49612, 2353, 378, 49617, - 49630, 49635, 31876, 540, 49639, 3121, 49647, 49653, 959, 49663, 49672, - 49677, 9704, 49681, 49684, 3070, 16608, 49692, 49699, 16646, 49703, - 49710, 49716, 49721, 9718, 49726, 49738, 49744, 49752, 2365, 1743, 49760, - 49762, 49767, 49772, 49776, 49780, 49785, 49789, 49794, 49799, 49805, - 49810, 49814, 49818, 49821, 49823, 49827, 49830, 49835, 49839, 49843, - 49847, 49851, 49860, 22216, 49863, 22221, 22226, 49870, 49879, 22232, - 49884, 22237, 49893, 49898, 7327, 49902, 49907, 49912, 49916, 49920, - 49924, 49928, 49931, 49935, 5013, 49941, 49946, 49950, 2981, 49953, - 49955, 49959, 49962, 49967, 49971, 49977, 49990, 49996, 50000, 50008, - 50015, 50023, 50032, 50040, 22242, 50047, 50057, 50066, 50079, 50084, - 50089, 50095, 50102, 50113, 50125, 50132, 50141, 50150, 50159, 50166, - 50172, 50179, 50187, 50194, 50202, 50211, 50219, 50226, 50234, 50243, - 50251, 50260, 50270, 50279, 50287, 50294, 50302, 50311, 50319, 50328, - 50338, 50347, 50355, 50364, 50374, 50383, 50393, 50404, 50414, 50423, - 50431, 50438, 50446, 50455, 50463, 50472, 50482, 50491, 50499, 50508, - 50518, 50527, 50537, 50548, 50558, 50567, 50575, 50584, 50594, 50603, - 50613, 50624, 50634, 50643, 50653, 50664, 50674, 50685, 50697, 50708, - 50718, 50727, 50735, 50742, 50750, 50759, 50767, 50776, 50786, 50795, - 50803, 50812, 50822, 50831, 50841, 50852, 50862, 50871, 50879, 50888, - 50898, 50907, 50917, 50928, 50938, 50947, 50957, 50968, 50978, 50989, - 51001, 51012, 51022, 51031, 51039, 51048, 51058, 51067, 51077, 51088, - 51098, 51107, 51117, 51128, 51138, 51149, 51161, 51172, 51182, 51191, - 51201, 51212, 51222, 51233, 51245, 51256, 51266, 51277, 51289, 51300, - 51312, 51325, 51337, 51348, 51358, 51367, 51375, 51382, 51390, 51399, - 51407, 51416, 51426, 51435, 51443, 51452, 51462, 51471, 51481, 51492, - 51502, 51511, 51519, 51528, 51538, 51547, 51557, 51568, 51578, 51587, - 51597, 51608, 51618, 51629, 51641, 51652, 51662, 51671, 51679, 51688, - 51698, 51707, 51717, 51728, 51738, 51747, 51757, 51768, 51778, 51789, - 51801, 51812, 51822, 51831, 51841, 51852, 51862, 51873, 51885, 51896, - 51906, 51917, 51929, 51940, 51952, 51965, 51977, 51988, 51998, 52007, - 52015, 52024, 52034, 52043, 52053, 52064, 52074, 52083, 52093, 52104, - 52114, 52125, 52137, 52148, 52158, 52167, 52177, 52188, 52198, 52209, - 52221, 52232, 52242, 52253, 52265, 52276, 52288, 52301, 52313, 52324, - 52334, 52343, 52353, 52364, 52374, 52385, 52397, 52408, 52418, 52429, - 52441, 52452, 52464, 52477, 52489, 52500, 52510, 52521, 52533, 52544, - 52556, 52569, 52581, 52592, 52604, 52617, 52629, 52642, 52656, 52669, - 52681, 52692, 52702, 52711, 52719, 52726, 52731, 4871, 52738, 22252, - 52743, 52748, 22257, 52754, 15012, 52759, 52763, 52769, 52775, 52782, - 52787, 52791, 52795, 52804, 52810, 52822, 52833, 52837, 2592, 4846, - 52842, 52845, 52847, 52851, 52855, 52859, 28446, 52864, 52868, 52871, - 52876, 52880, 52887, 52893, 52897, 22267, 52901, 52908, 52917, 52925, - 52936, 52944, 52952, 52959, 52966, 52972, 52983, 22272, 52988, 52999, - 53011, 53022, 53030, 2206, 53035, 53048, 53052, 53060, 11601, 53071, - 53077, 53084, 53092, 53098, 22277, 53103, 6118, 44186, 53110, 53113, - 53121, 53134, 53147, 53160, 53173, 53180, 53191, 53200, 28451, 28456, - 53205, 53213, 53220, 53229, 53237, 53243, 53252, 53260, 53268, 53272, - 53281, 53290, 53300, 53313, 53326, 53336, 22282, 53342, 53349, 53355, - 22288, 53360, 53363, 53367, 53375, 53384, 28189, 53392, 53400, 53407, - 53415, 53425, 53434, 53443, 53452, 53460, 53471, 5724, 15434, 53480, - 53485, 53489, 53493, 53498, 53504, 53509, 53514, 53520, 53525, 53530, - 15399, 53535, 53542, 53550, 53555, 53562, 53566, 53570, 53578, 53586, - 22297, 53592, 53598, 53610, 53616, 53621, 53632, 53642, 53652, 53664, - 53670, 53680, 22302, 53689, 53698, 53704, 53716, 53727, 53734, 53739, - 53747, 53753, 53758, 53763, 53770, 53782, 53792, 53801, 53808, 23230, - 16814, 53814, 53819, 53823, 53827, 53832, 53838, 53849, 53862, 53867, - 22307, 53872, 53884, 53893, 53906, 53913, 53922, 53930, 53935, 53941, - 1147, 53946, 53951, 53956, 53961, 53967, 53972, 53977, 53983, 53989, - 53994, 53998, 54003, 54008, 54013, 44549, 54018, 54023, 54028, 54033, - 54039, 54045, 54050, 54054, 54059, 54064, 54069, 54074, 54079, 54083, - 54089, 54094, 54103, 54108, 54113, 54118, 54123, 54127, 54134, 54140, - 11311, 32176, 54145, 54095, 54147, 22316, 54150, 54159, 54165, 3561, - 22321, 54169, 54175, 54181, 54186, 54190, 54197, 54202, 54212, 54221, - 54225, 54231, 54237, 54243, 54247, 54255, 54262, 54270, 54278, 22326, - 54285, 54288, 54295, 54300, 54304, 54310, 54315, 54319, 54328, 54336, - 54342, 54347, 22837, 54354, 54360, 54365, 54371, 54378, 22047, 19317, - 54384, 54389, 54395, 54407, 54128, 54135, 54417, 54422, 54429, 54436, - 54442, 54453, 54458, 5523, 54466, 54469, 54475, 54479, 54483, 54486, - 54492, 46981, 3581, 761, 8644, 115, 54499, 54503, 54507, 54512, 54520, - 54524, 54532, 54536, 54549, 54553, 54556, 54561, 54565, 54570, 54574, - 54582, 54586, 15017, 54591, 54595, 54599, 54602, 54610, 54615, 54622, - 54628, 54634, 54639, 54647, 48979, 54654, 54659, 54664, 54668, 54672, - 54677, 54682, 54686, 54689, 54695, 54699, 54709, 54718, 54721, 54734, - 54742, 54750, 54760, 54773, 54780, 54791, 54797, 54802, 54807, 54813, - 54822, 53874, 54830, 54836, 54844, 54848, 54852, 54858, 54866, 54878, - 54890, 54897, 54901, 54912, 54920, 54927, 54939, 54947, 54955, 54962, - 54968, 54978, 54987, 54992, 55002, 55006, 55010, 55017, 55029, 55041, - 55050, 53038, 55057, 55068, 55082, 55090, 55100, 55107, 55115, 55124, - 55132, 55142, 55151, 55162, 55174, 55183, 55193, 55200, 55209, 55224, - 55233, 55246, 55261, 55265, 55277, 55288, 55299, 55310, 55320, 55331, - 55339, 55345, 55355, 55361, 55366, 55372, 55378, 55383, 55390, 5995, - 11621, 55396, 55401, 55408, 55414, 55419, 55423, 55426, 55429, 55431, - 55438, 55449, 55454, 55458, 55464, 55472, 49355, 49365, 55478, 55488, - 55495, 55501, 55506, 55515, 55522, 55530, 55539, 55545, 55551, 55558, - 55565, 55570, 55574, 55579, 55584, 55589, 55593, 54544, 55602, 55606, - 55617, 55627, 11630, 55638, 55646, 11642, 55653, 19227, 55657, 55661, - 55666, 9500, 55678, 55683, 55688, 55693, 55697, 55700, 55705, 55710, - 55716, 55721, 3373, 15068, 55726, 55731, 55737, 55744, 55749, 55754, - 55760, 55766, 55772, 55777, 55783, 55787, 55801, 55809, 55817, 55823, - 55828, 55835, 55840, 55845, 55853, 55858, 55864, 55869, 55874, 55878, - 55881, 55899, 55918, 55931, 55945, 55961, 55968, 55975, 55981, 55988, - 55993, 55999, 56005, 56010, 56026, 10350, 56040, 56047, 56051, 56054, - 56059, 56064, 56071, 56076, 56081, 56086, 7399, 56090, 56095, 56101, - 7410, 56106, 56109, 56114, 56124, 56133, 56138, 56146, 56153, 56164, - 56174, 56179, 56184, 56191, 56197, 56202, 56209, 56218, 56226, 56232, - 56238, 56242, 11173, 2566, 56247, 56251, 56257, 56264, 56268, 56289, - 56311, 56327, 56344, 56363, 56372, 56382, 56389, 56396, 19154, 56402, - 56406, 56414, 56420, 56428, 56432, 56440, 56447, 56451, 56457, 2896, - 28651, 56463, 56467, 56471, 56475, 56480, 56485, 56490, 56496, 56501, - 56507, 56512, 56517, 56521, 56526, 28666, 56530, 56535, 56543, 56547, - 56552, 56559, 56568, 56574, 56581, 56585, 56594, 56599, 56607, 56616, - 56622, 56627, 56632, 56638, 56644, 56649, 56653, 56661, 56671, 56676, - 26557, 56684, 56696, 56700, 56712, 56719, 56725, 56732, 56744, 56751, - 56757, 15112, 56761, 56767, 56773, 56778, 56783, 4382, 56788, 56796, - 56805, 56809, 56522, 20980, 56814, 56816, 56828, 56833, 5036, 49, 56838, - 56843, 22331, 22336, 22341, 22347, 22352, 56847, 22357, 56869, 56871, - 56875, 56879, 56884, 56888, 22361, 56892, 22366, 56900, 56903, 22371, - 15506, 56912, 56916, 1429, 56921, 22382, 56924, 56929, 18123, 18133, - 56934, 56938, 56943, 56949, 56954, 56963, 56968, 56975, 56981, 56986, - 56991, 56996, 57004, 22387, 1010, 57011, 57017, 57022, 57027, 57032, - 57038, 57043, 57050, 57056, 57061, 57069, 57075, 11652, 57082, 24453, - 57095, 57100, 57106, 57119, 57123, 57132, 57139, 57145, 57153, 57160, - 57166, 22391, 57169, 57176, 57182, 57186, 57189, 57197, 57211, 57218, - 22396, 57224, 22401, 57231, 23655, 57241, 57246, 57250, 57255, 57260, - 57265, 22406, 47446, 57269, 57274, 57280, 57286, 57293, 57299, 57304, - 57309, 57318, 57330, 57345, 22626, 57351, 10862, 22410, 57355, 57362, - 22415, 57368, 57377, 57384, 57393, 57399, 57404, 57410, 22420, 57415, - 57424, 57433, 57440, 57446, 57452, 57460, 57464, 22425, 57467, 22431, - 22437, 57472, 57480, 57490, 22442, 57494, 57496, 57500, 57505, 57509, - 57513, 57519, 57524, 57528, 2571, 57532, 57539, 57543, 57552, 57560, - 57567, 57572, 57577, 57581, 57585, 57588, 57594, 57602, 57608, 57612, - 57617, 57624, 57630, 47477, 57635, 57638, 57643, 57647, 57652, 57657, - 57661, 57669, 18142, 18151, 57675, 57681, 57686, 57690, 57693, 57703, - 57708, 57714, 57720, 57728, 57733, 23671, 57737, 57745, 57750, 57755, - 44233, 23677, 57761, 57766, 57770, 57775, 57780, 57785, 57789, 57794, - 57799, 57805, 57810, 57815, 57821, 57827, 57832, 57836, 57841, 57846, - 57851, 57855, 57860, 57865, 57870, 57876, 57882, 57888, 57893, 57897, - 57902, 57907, 57911, 57916, 57921, 57926, 57930, 22446, 57938, 57946, - 15838, 57957, 57963, 57970, 57975, 57979, 57984, 57992, 58000, 58007, - 49104, 58013, 58021, 58028, 58039, 58045, 22456, 58048, 58055, 26671, - 58059, 58064, 58069, 5453, 58073, 58081, 58088, 58095, 58101, 58115, - 58121, 58125, 58128, 58136, 58143, 58148, 58155, 58160, 58165, 58168, - 58175, 58179, 58189, 58199, 58208, 58219, 58224, 58228, 58236, 22461, - 27082, 58240, 58245, 58250, 58255, 58260, 58265, 58270, 58274, 58279, - 58284, 58289, 58294, 58299, 58304, 58308, 58313, 58318, 58322, 58326, - 58330, 58334, 58339, 58344, 58348, 58353, 58357, 58361, 58366, 58371, - 58376, 58381, 58385, 58390, 58395, 58399, 58404, 58409, 58414, 58419, - 58424, 58429, 58434, 58439, 58444, 58449, 58454, 58459, 58464, 58469, - 58474, 58479, 58484, 58489, 58494, 58499, 58503, 58508, 58513, 58518, - 58523, 58528, 58533, 58538, 58543, 58548, 58553, 58558, 58562, 58567, - 58571, 58576, 58581, 58586, 58591, 58596, 58601, 58606, 58611, 58616, - 58620, 58624, 58629, 58634, 58638, 58643, 58648, 58652, 58657, 58662, - 58667, 58672, 58676, 58681, 58686, 58690, 58695, 58699, 58703, 58707, - 58711, 58716, 58720, 58724, 58728, 58732, 58736, 58740, 58744, 58748, - 58752, 58757, 58762, 58767, 58772, 58777, 58782, 58787, 58792, 58797, - 58802, 58806, 58810, 58814, 58818, 58822, 58826, 58831, 58835, 58840, - 58844, 58849, 58854, 58858, 58862, 58867, 58871, 58875, 58879, 58883, - 58887, 58891, 58895, 58899, 58903, 58907, 58911, 58915, 58919, 58923, - 58928, 58933, 58937, 58941, 58945, 58949, 58953, 58957, 58962, 58966, - 58970, 58974, 58978, 58982, 58986, 58991, 58995, 59000, 59004, 59008, - 59012, 59016, 59020, 59024, 59028, 59032, 59036, 59040, 59044, 59049, - 59053, 59057, 59061, 59065, 59069, 59073, 59077, 59081, 59085, 59089, - 59093, 59098, 59102, 59106, 59111, 59116, 59120, 59124, 59128, 59132, - 59136, 59140, 59144, 59148, 59152, 59156, 59160, 59164, 59168, 59172, - 59176, 59180, 1511, 59184, 1749, 59188, 59192, 2383, 59196, 1398, 59201, - 1364, 59205, 59209, 59216, 59230, 2399, 4457, 59239, 59247, 59254, 59261, - 59274, 59287, 59298, 59303, 59310, 59322, 3172, 7467, 59326, 59331, - 59340, 59350, 59355, 59359, 59364, 1369, 9554, 59374, 59380, 59394, - 59406, 59415, 59424, 59433, 59441, 59452, 59460, 3211, 59470, 59479, - 59486, 24085, 59491, 2427, 8373, 59495, 59502, 5409, 59511, 2432, 22067, - 59517, 59524, 59530, 59537, 59543, 59550, 59560, 59569, 59580, 59587, - 59593, 59603, 59611, 59617, 59632, 59638, 59643, 59650, 59653, 59659, - 59666, 59672, 59681, 59689, 59695, 59704, 28191, 59718, 59723, 9582, - 59729, 59738, 59746, 59753, 59757, 59761, 59764, 59771, 59779, 59787, - 9511, 59796, 59801, 59805, 59817, 59826, 59836, 2448, 59845, 59851, - 59864, 59876, 59886, 59895, 59907, 59915, 59924, 59935, 59946, 59956, - 59966, 59975, 59983, 7136, 59990, 59994, 59999, 60004, 60010, 1374, 7515, - 60017, 60028, 60037, 60045, 60054, 60070, 60081, 60097, 60107, 60128, - 60141, 60146, 60152, 18788, 60158, 60161, 60168, 4983, 60178, 60183, - 60188, 60196, 6043, 6052, 60204, 2456, 2461, 6742, 60215, 60222, 60229, - 1953, 101, 60242, 60247, 60257, 60263, 60267, 60272, 60276, 2478, 60288, - 60296, 60307, 60318, 60327, 60332, 60338, 60343, 60353, 60363, 60368, - 60374, 60379, 60388, 15321, 60392, 3273, 12, 60397, 60404, 710, 60410, - 60415, 46381, 60420, 60425, 60431, 60439, 60444, 60451, 60457, 25559, - 60463, 2482, 32, 60473, 60486, 60494, 60499, 60505, 2504, 21432, 60510, - 60518, 60525, 44475, 47127, 60534, 1694, 1798, 60539, 60544, 60551, 1802, - 210, 60558, 60564, 60569, 60576, 1806, 60581, 60586, 3548, 60598, 1813, - 60604, 60609, 60616, 60631, 60638, 60646, 60658, 60663, 60674, 60683, - 2122, 60694, 60696, 2591, 5729, 60704, 60709, 60713, 60722, 60728, 2561, - 11328, 60732, 60745, 60763, 60768, 60776, 60784, 60794, 60806, 60819, - 60826, 60842, 60849, 60855, 877, 60862, 60869, 60879, 60888, 60900, - 29055, 60908, 2575, 1186, 60911, 60919, 60923, 2579, 60927, 60931, 60935, - 2585, 60939, 1379, 10460, 7696, 59775, 2606, 60949, 60952, 60958, 60964, - 60971, 60976, 60981, 1992, +static unsigned int lexicon_offset[] = { + 0, 0, 6, 10, 15, 23, 27, 34, 39, 41, 44, 52, 62, 68, 81, 93, 102, 108, + 113, 121, 130, 135, 139, 145, 150, 158, 161, 168, 173, 181, 186, 192, + 200, 207, 217, 224, 227, 236, 239, 242, 247, 253, 262, 266, 273, 280, + 285, 294, 136, 302, 303, 309, 315, 323, 329, 335, 340, 346, 352, 360, + 367, 369, 372, 376, 383, 390, 396, 403, 408, 410, 418, 421, 426, 307, + 428, 430, 436, 441, 450, 455, 460, 470, 474, 487, 491, 496, 505, 508, + 514, 518, 526, 536, 544, 551, 560, 568, 576, 581, 589, 600, 604, 611, + 614, 620, 624, 628, 629, 634, 638, 640, 643, 652, 322, 655, 659, 664, + 672, 676, 678, 681, 687, 694, 701, 710, 719, 722, 732, 741, 750, 756, + 762, 769, 772, 780, 788, 792, 796, 804, 813, 822, 827, 831, 686, 838, + 846, 850, 854, 857, 862, 867, 871, 879, 794, 609, 882, 887, 225, 890, + 895, 905, 914, 920, 927, 934, 942, 946, 954, 960, 967, 973, 979, 984, + 988, 994, 1007, 1012, 1015, 1020, 22, 1024, 1027, 1037, 1042, 1046, 1055, + 1058, 1064, 1074, 1077, 111, 1081, 1086, 1092, 1096, 1101, 1107, 1112, + 1115, 1122, 1124, 1126, 1134, 1144, 1147, 1150, 1157, 1165, 338, 1167, + 1170, 1175, 1183, 1192, 1195, 1204, 1210, 1216, 1218, 1223, 1228, 1234, + 1239, 1244, 1248, 1253, 1259, 1264, 1269, 1273, 1278, 1283, 1287, 1292, + 1297, 1302, 1308, 1314, 1320, 1325, 1329, 1334, 1339, 1344, 1348, 1353, + 1358, 1363, 1368, 1219, 1224, 1229, 1235, 1240, 1372, 1245, 1378, 1387, + 1249, 1391, 1254, 1260, 1265, 1395, 1400, 1405, 1409, 1413, 1419, 1423, + 1270, 1426, 1430, 1274, 1436, 1279, 1440, 1444, 1284, 1448, 1453, 1457, + 1460, 1464, 1288, 1293, 1469, 1298, 1475, 1481, 1487, 1493, 1303, 1315, + 1321, 1497, 1501, 1505, 1508, 1326, 1512, 1514, 1519, 1524, 1530, 1535, + 1540, 1544, 1549, 1554, 1559, 1564, 1570, 1575, 1580, 1586, 1592, 1597, + 1601, 1606, 1611, 1616, 1621, 1625, 1633, 1637, 1642, 1647, 1652, 1657, + 1661, 1664, 1669, 1674, 1679, 1684, 1690, 1695, 1699, 1330, 1702, 1707, + 1712, 1335, 1716, 1720, 1727, 1340, 1734, 1345, 1738, 1740, 1745, 1751, + 1349, 1756, 1765, 1354, 1770, 1776, 1359, 1781, 1786, 1789, 1794, 1798, + 1802, 1806, 1809, 1813, 1364, 1369, 1040, 1818, 1824, 1830, 1836, 1842, + 1848, 1854, 1860, 1866, 1871, 1877, 1883, 1889, 1895, 1901, 1907, 1913, + 1919, 1925, 1930, 1935, 1940, 1945, 1950, 1955, 1960, 1965, 1970, 1975, + 1981, 1986, 1992, 1997, 2003, 2009, 2014, 2020, 2026, 2032, 2038, 2043, + 2048, 2050, 2051, 2055, 2059, 2064, 2068, 2072, 2076, 2080, 2083, 2088, + 2092, 2097, 2101, 2105, 2110, 2114, 2117, 2121, 2135, 2139, 2143, 2146, + 2151, 2155, 2159, 2163, 2168, 2173, 2178, 2182, 2187, 2191, 2196, 2203, + 2209, 2214, 2219, 2224, 2230, 2235, 2241, 2246, 2249, 1236, 2251, 2258, + 2266, 2276, 2285, 2299, 2303, 2307, 2320, 2328, 2332, 2337, 2341, 2345, + 2349, 2354, 2359, 2364, 2368, 2371, 2375, 2382, 2389, 2395, 2400, 2405, + 2411, 2417, 2422, 2425, 1742, 2427, 2433, 2437, 2442, 2446, 2450, 1747, + 1753, 2455, 2459, 2462, 2467, 2472, 2477, 2481, 2488, 2493, 2496, 2503, + 2509, 2513, 2517, 2521, 2527, 2533, 2547, 2564, 2579, 2594, 2603, 2608, + 2612, 2617, 2622, 2626, 2638, 2645, 2651, 2199, 2657, 2664, 2670, 2673, + 2680, 2684, 2688, 2692, 2073, 2696, 2701, 2706, 2710, 2718, 2722, 2726, + 2730, 2735, 2740, 2745, 2749, 2754, 2759, 2763, 2768, 2772, 2775, 2779, + 2783, 2788, 2792, 2796, 2802, 2811, 2815, 2819, 2825, 2830, 2837, 2841, + 2851, 2855, 2860, 2864, 2869, 2875, 2880, 2884, 2385, 2888, 2893, 2899, + 2904, 2908, 2913, 2918, 2922, 2928, 2933, 2939, 2943, 2949, 2954, 2959, + 2964, 2969, 2974, 2979, 2984, 2989, 2994, 3000, 3005, 1246, 80, 3011, + 3015, 3019, 3023, 3028, 3032, 3036, 3040, 3044, 3049, 3053, 3058, 3062, + 3065, 3069, 3074, 3078, 3083, 3087, 3091, 3095, 3100, 3104, 3107, 3120, + 3124, 3128, 3132, 3136, 3140, 3143, 3147, 3151, 3156, 3160, 3165, 3170, + 3175, 3179, 3182, 3185, 3191, 3195, 3199, 3202, 3206, 3210, 3213, 3219, + 3224, 3229, 3235, 3240, 3245, 3251, 3257, 3262, 3267, 3272, 1044, 507, + 3277, 3280, 3285, 3289, 3292, 3297, 3302, 3306, 3311, 3315, 3320, 3324, + 3328, 3331, 3337, 3344, 3350, 3355, 3359, 3364, 3368, 3378, 3382, 3386, + 3391, 3396, 3406, 2084, 3411, 3415, 3418, 3424, 3431, 3435, 621, 720, + 3439, 3446, 3453, 3459, 3464, 3470, 3475, 2093, 3479, 3487, 555, 3493, + 3504, 3508, 3518, 2098, 3524, 3529, 3544, 3550, 3557, 3567, 3573, 3578, + 3584, 3587, 3591, 3598, 3603, 3607, 3611, 3615, 3619, 3624, 3630, 3070, + 3635, 3647, 1546, 3654, 3657, 3661, 3664, 3668, 3682, 3686, 3689, 3693, + 3698, 3702, 3706, 3712, 3718, 3723, 3729, 3733, 3741, 3751, 3757, 3762, + 3771, 3779, 3786, 3790, 3799, 3803, 3808, 3813, 3817, 3825, 3829, 3834, + 3838, 2106, 1388, 3844, 3849, 3855, 3860, 3865, 3870, 3875, 3880, 3885, + 3891, 3896, 3902, 3907, 3912, 3917, 3923, 3928, 3933, 3938, 3943, 3949, + 3954, 3960, 3965, 3970, 3975, 3980, 3985, 3990, 3996, 4001, 4006, 344, + 440, 4011, 4017, 4021, 4025, 4030, 4034, 4038, 4041, 4045, 4049, 4053, + 4058, 4062, 4066, 3841, 4072, 4079, 4083, 4096, 4100, 4104, 4108, 4112, + 4116, 4122, 4129, 4133, 4141, 4150, 4156, 4161, 4164, 4168, 4172, 4182, + 4192, 4200, 4207, 4214, 4220, 4226, 4233, 4237, 4242, 4246, 4254, 4259, + 4267, 4272, 4277, 4281, 4286, 4293, 4296, 4300, 4304, 4307, 4313, 4319, + 4323, 4334, 4344, 4359, 4374, 4389, 4404, 4419, 4434, 4449, 4464, 4479, + 4494, 4509, 4524, 4539, 4554, 4569, 4584, 4599, 4614, 4629, 4644, 4659, + 4674, 4689, 4704, 4719, 4734, 4749, 4764, 4779, 4794, 4809, 4824, 4839, + 4854, 4869, 4884, 4899, 4914, 4929, 4944, 4959, 4974, 4989, 5004, 5019, + 5034, 5049, 5064, 5079, 5088, 5097, 5102, 5108, 5112, 5117, 5121, 5124, + 5128, 2846, 5131, 5136, 306, 424, 5142, 5150, 5154, 5158, 5161, 5167, + 5171, 5179, 5185, 5190, 5197, 5204, 5210, 5215, 5222, 5228, 5232, 5237, + 5249, 5260, 5267, 5273, 3092, 5277, 5283, 5288, 5293, 5298, 5304, 5309, + 5314, 5319, 5324, 5330, 5335, 5340, 5346, 5351, 5357, 5362, 5368, 5373, + 5379, 5384, 5389, 5394, 5399, 5404, 5410, 5415, 5420, 5425, 5431, 5437, + 5443, 5449, 5455, 5461, 5467, 5473, 5479, 5485, 5491, 5497, 5502, 5507, + 5512, 5517, 5522, 5527, 5532, 5537, 5543, 5549, 5554, 5560, 5566, 5572, + 5577, 5582, 5587, 5592, 5598, 5604, 5609, 5614, 5619, 5624, 5629, 5635, + 5640, 5646, 5652, 5658, 5664, 5670, 5676, 5682, 5688, 5694, 5160, 5699, + 5703, 5707, 5710, 5717, 5720, 5728, 5733, 5738, 5729, 5743, 5730, 5747, + 5753, 5759, 5764, 5769, 5776, 5781, 5785, 5788, 5792, 2140, 516, 5796, + 5800, 5805, 5811, 5816, 5820, 5823, 5827, 5832, 5836, 5843, 5847, 5851, + 5855, 884, 699, 5858, 5866, 5873, 5880, 5886, 5893, 5901, 5908, 5915, + 5920, 5932, 1266, 1396, 1401, 5943, 1406, 5947, 5951, 5960, 5969, 5975, + 5980, 5984, 5990, 5995, 6002, 6006, 6015, 6024, 6033, 6042, 6047, 6052, + 6064, 6069, 3312, 6073, 6075, 6080, 6084, 6093, 6101, 1410, 825, 3316, + 3321, 6107, 6111, 6120, 6126, 6131, 6134, 6143, 2591, 6149, 6157, 6161, + 6165, 3325, 6169, 6174, 6181, 6187, 6193, 6196, 6198, 6201, 6209, 6217, + 6225, 6228, 6233, 5740, 6236, 6238, 6243, 6248, 6253, 6258, 6263, 6268, + 6273, 6278, 6283, 6288, 6294, 6299, 6304, 6309, 6315, 6320, 6325, 6330, + 6335, 6340, 6345, 6351, 6356, 6361, 6366, 6371, 6376, 6381, 6386, 6391, + 6396, 6401, 6406, 6411, 6416, 6421, 6426, 6431, 6436, 6442, 6448, 6453, + 6458, 6463, 6468, 6473, 2197, 2204, 2210, 6478, 6484, 2236, 2242, 6492, + 6496, 6501, 6505, 6509, 6513, 6518, 6522, 6527, 6531, 6534, 6537, 6543, + 6549, 6555, 6561, 6567, 6573, 6579, 6583, 6587, 6591, 6595, 6599, 6604, + 6611, 6619, 6629, 6634, 6638, 6649, 6662, 6673, 6686, 6697, 6709, 6721, + 6733, 6746, 6759, 6766, 6772, 6779, 6785, 6789, 6794, 6798, 6805, 6813, + 6817, 6823, 6833, 6837, 6842, 6847, 6854, 6860, 5888, 6870, 6874, 6881, + 698, 6885, 6889, 6894, 6899, 6904, 6908, 6914, 6922, 6926, 6936, 6940, + 6946, 6951, 6955, 2132, 6961, 6969, 6978, 6982, 6988, 6993, 6998, 7003, + 7009, 7014, 3708, 7019, 7023, 7029, 7035, 7040, 7045, 7050, 6983, 7056, + 7060, 7067, 7073, 7078, 7082, 7087, 7091, 7100, 6177, 6184, 7105, 2732, + 7109, 7114, 7119, 6989, 7123, 6994, 6999, 7128, 7135, 7142, 7148, 7154, + 7160, 7165, 7170, 7175, 7004, 7010, 7181, 7187, 7192, 7200, 7015, 7205, + 1079, 7208, 7216, 7222, 7228, 7237, 7242, 7248, 7263, 7280, 7299, 7308, + 7316, 7331, 7341, 7351, 7357, 7369, 7378, 7386, 7393, 7400, 7406, 7411, + 7419, 7429, 7436, 7446, 7456, 7466, 7475, 7485, 7499, 7514, 7523, 7531, + 7536, 7540, 7549, 7559, 7569, 7579, 7584, 7588, 7597, 7607, 7618, 7631, + 7644, 7656, 7664, 7669, 7675, 7678, 7682, 7690, 7695, 7699, 7707, 7716, + 7724, 7731, 7742, 7746, 7749, 7755, 7759, 7765, 7772, 7777, 7784, 7791, + 7798, 7805, 7812, 7819, 7824, 7276, 7829, 7836, 7845, 7849, 7861, 7865, + 7868, 7872, 7876, 7880, 7884, 7890, 7895, 7901, 7906, 7911, 7917, 7922, + 7927, 6850, 7932, 7936, 7940, 7944, 7949, 7954, 7960, 7964, 7971, 7976, + 7984, 7988, 7991, 7997, 8004, 8008, 8011, 8016, 8020, 3736, 8026, 8034, + 8040, 6865, 8045, 8051, 8056, 8060, 8063, 8078, 8097, 8109, 8122, 8135, + 8148, 8162, 8175, 8190, 8197, 8203, 8207, 8212, 8218, 8226, 8231, 6011, + 8236, 8239, 8244, 8248, 2737, 877, 8254, 8258, 8264, 8270, 8275, 8281, + 8286, 7024, 8292, 8298, 8303, 8308, 8316, 8322, 8335, 8343, 8350, 8354, + 8362, 8369, 8381, 8391, 8398, 8405, 8414, 8423, 8431, 8436, 8442, 7030, + 8447, 8453, 7036, 8458, 8461, 8468, 8474, 8487, 8498, 8505, 8511, 8520, + 8528, 8535, 8541, 8547, 8552, 8556, 8561, 8070, 8567, 7041, 8574, 8579, + 8586, 8592, 8598, 8603, 8611, 8619, 8626, 8630, 8644, 8654, 8659, 8663, + 8674, 8680, 8685, 8690, 8694, 7046, 8699, 8702, 8707, 8719, 8726, 8731, + 8735, 8740, 8744, 8751, 8757, 7051, 6984, 8764, 2742, 8, 8771, 8776, + 8780, 8786, 8797, 8807, 8816, 8828, 8833, 8837, 8845, 8859, 8863, 8866, + 8874, 8881, 8889, 8893, 8904, 8908, 8915, 8920, 8924, 8930, 8935, 8939, + 8944, 8948, 8951, 8957, 8962, 8968, 8975, 8985, 8994, 9001, 7061, 7068, + 7074, 7079, 9007, 7083, 9013, 9016, 9023, 9038, 9054, 9069, 970, 406, + 9074, 9082, 9089, 9095, 9100, 9105, 7092, 9107, 9111, 9115, 9125, 9130, + 9134, 9143, 9147, 9150, 9157, 9161, 9164, 9172, 9179, 9187, 9191, 9198, + 9202, 9208, 9212, 9216, 9220, 9226, 9230, 9234, 9241, 9245, 9250, 9254, + 9261, 9267, 9275, 9281, 9291, 9296, 9301, 9305, 9313, 3641, 9321, 9326, + 9330, 9334, 9337, 9345, 9352, 9356, 9360, 9365, 9369, 9380, 9386, 9390, + 9393, 9400, 9405, 7101, 9410, 9414, 1704, 4265, 9421, 9426, 9431, 9436, + 9442, 9447, 9453, 9458, 9463, 9468, 9473, 9478, 9483, 9488, 9493, 9498, + 9503, 9508, 9513, 9518, 9523, 9528, 9533, 9539, 9544, 9549, 9554, 9559, + 9564, 9570, 9575, 9580, 9586, 9591, 9597, 9602, 9608, 9613, 9618, 9623, + 9628, 9634, 9639, 9644, 670, 134, 9649, 9653, 9658, 9663, 9667, 9671, + 9675, 9680, 9684, 9689, 9693, 9696, 9700, 9704, 9709, 9719, 9725, 9729, + 9733, 9740, 9748, 9757, 9768, 9775, 9782, 9791, 9800, 9809, 9818, 9827, + 9836, 9846, 9856, 9866, 9876, 9886, 9895, 9905, 9915, 9925, 9935, 9945, + 9955, 9965, 9974, 9984, 9994, 10004, 10014, 10024, 10034, 10043, 10053, + 10063, 10073, 10083, 10093, 10103, 10113, 10123, 10133, 10142, 10152, + 10162, 10172, 10182, 10192, 10202, 10212, 10222, 10232, 10242, 10251, + 10257, 10261, 10264, 10268, 10273, 10280, 10286, 10291, 10295, 10300, + 10304, 10308, 7110, 10314, 10319, 10328, 7115, 10333, 10336, 10342, + 10350, 7120, 10357, 10361, 10365, 10369, 10379, 10384, 10393, 10401, + 10408, 10413, 10420, 10425, 10429, 10432, 10443, 10453, 10462, 10470, + 10481, 10493, 10503, 10507, 10512, 10517, 10521, 10526, 10535, 10539, + 10542, 10549, 10559, 10568, 10575, 10579, 10585, 10590, 10595, 10599, + 10608, 10613, 10619, 10624, 10628, 10637, 10645, 10653, 10660, 10668, + 10680, 10691, 10701, 10708, 10714, 10723, 10734, 10743, 10752, 10760, + 10767, 10776, 10784, 5761, 10788, 10790, 10795, 10801, 10809, 10816, + 10825, 10834, 10843, 10852, 10861, 10870, 10879, 10888, 10898, 10908, + 10917, 10924, 10938, 10945, 10953, 10962, 10968, 10977, 10985, 10994, + 11007, 11015, 11022, 11035, 11041, 11050, 11059, 11064, 11068, 11074, + 11080, 11087, 6864, 11092, 11097, 11104, 11109, 11114, 11118, 11124, + 11132, 11140, 11147, 11155, 11163, 11168, 11174, 11179, 11183, 11194, + 11202, 11208, 11213, 11222, 11228, 11233, 11242, 11256, 3600, 11260, + 11265, 11270, 11276, 11281, 11286, 11290, 11295, 11300, 5760, 11305, + 11310, 11315, 11320, 11324, 11329, 11334, 11339, 11345, 11351, 11356, + 11360, 11365, 11370, 11375, 7124, 11380, 11385, 11390, 11395, 11412, + 11430, 11442, 11455, 11472, 11488, 11505, 11515, 11534, 11545, 11556, + 11567, 11578, 11590, 11601, 11612, 11629, 11640, 11651, 11656, 2317, + 11660, 11663, 11669, 11677, 11685, 11690, 11698, 11706, 11713, 11718, + 11724, 11731, 11739, 11746, 11758, 11763, 9032, 11769, 11778, 11786, + 11793, 11799, 11807, 11814, 11821, 11827, 11836, 11844, 11851, 11859, + 11865, 11872, 11880, 11885, 3372, 1187, 11892, 11895, 11306, 11899, + 11905, 11909, 11921, 11926, 11933, 11939, 11944, 11951, 11311, 11316, + 11955, 11959, 11964, 11968, 11976, 11983, 11990, 12007, 12011, 12014, + 12022, 12028, 3428, 12032, 12034, 12042, 12049, 12059, 12064, 12070, + 12075, 12079, 12085, 12090, 12093, 12100, 12106, 12112, 12117, 12124, + 12130, 12135, 12142, 12146, 12152, 12159, 12165, 12171, 12179, 12185, + 12193, 12199, 12205, 12210, 12217, 12222, 12226, 12231, 12238, 12243, + 12249, 12255, 12261, 12264, 12268, 12280, 12286, 12291, 12298, 12304, + 12310, 12321, 12331, 12340, 12348, 12355, 12365, 12375, 12383, 12386, + 11330, 12391, 11335, 11460, 12399, 12412, 12427, 12438, 11477, 12456, + 12469, 12482, 12493, 8085, 12504, 12517, 12536, 12547, 12558, 12569, + 2542, 12582, 12586, 12594, 12605, 12612, 12618, 12626, 12630, 12636, + 12639, 12649, 12657, 12664, 12672, 12677, 12682, 12689, 12695, 12700, + 12705, 12709, 12713, 12719, 12725, 12730, 12735, 12740, 12744, 11340, + 11346, 11352, 12748, 12756, 12765, 12772, 7000, 12776, 12778, 12783, + 12788, 12794, 12799, 12804, 12809, 12814, 12818, 12824, 12830, 12835, + 12841, 12846, 12851, 12857, 12862, 12867, 12872, 12878, 12883, 12888, + 12894, 12900, 12905, 12912, 12919, 12924, 12928, 12932, 12935, 12943, + 12948, 12955, 12960, 12965, 12975, 12980, 12987, 12993, 13003, 13017, + 13031, 13045, 13059, 13074, 13089, 13106, 13124, 13137, 13143, 13148, + 13153, 13159, 13164, 13169, 13173, 13177, 13182, 13186, 13197, 13203, + 13208, 13213, 13217, 13222, 13228, 13235, 13240, 13244, 13250, 13255, + 13260, 13264, 13270, 13275, 13280, 13287, 13292, 13296, 13300, 13305, + 13310, 13316, 13322, 13327, 13336, 13344, 13351, 13358, 13364, 13370, + 13375, 13380, 13386, 13391, 13397, 13402, 13408, 13414, 13421, 13427, + 13432, 13437, 7166, 13446, 13449, 13455, 13460, 13465, 13475, 13482, + 13487, 13493, 13498, 13504, 13509, 13515, 13521, 13526, 13534, 13541, + 13546, 13552, 13557, 13561, 13570, 13581, 13588, 13596, 13602, 13609, + 13615, 13620, 13624, 13630, 13635, 13640, 13645, 7171, 5777, 2756, 13649, + 13653, 13657, 13661, 13665, 13668, 13675, 13683, 11366, 13690, 13700, + 13708, 13715, 13723, 13733, 13742, 13747, 10458, 10467, 13752, 13762, + 13777, 13783, 13790, 13797, 13803, 13813, 13823, 11371, 13832, 13838, + 13844, 13852, 13860, 13865, 13874, 13882, 13894, 13904, 13914, 13924, + 13933, 13945, 13955, 13965, 13976, 13981, 13993, 14005, 14017, 14029, + 14041, 14053, 14065, 14077, 14089, 14101, 14112, 14124, 14136, 14148, + 14160, 14172, 14184, 14196, 14208, 14220, 14232, 14243, 14255, 14267, + 14279, 14291, 14303, 14315, 14327, 14339, 14351, 14363, 14374, 14386, + 14398, 14410, 14422, 14434, 14446, 14458, 14470, 14482, 14494, 14505, + 14517, 14529, 14541, 14553, 14565, 14577, 14589, 14601, 14613, 14625, + 14636, 14648, 14660, 14672, 14684, 14696, 14708, 14720, 14732, 14744, + 14756, 14767, 14779, 14791, 14803, 14815, 14827, 14839, 14851, 14863, + 14875, 14887, 14898, 14910, 14922, 14934, 14946, 14959, 14972, 14985, + 14998, 15011, 15024, 15037, 15049, 15062, 15075, 15088, 15101, 15114, + 15127, 15140, 15153, 15166, 15179, 15191, 15204, 15217, 15230, 15243, + 15256, 15269, 15282, 15295, 15308, 15321, 15333, 15346, 15359, 15372, + 15385, 15398, 15411, 15424, 15437, 15450, 15463, 15475, 15488, 15501, + 15514, 15527, 15540, 15553, 15566, 15579, 15592, 15605, 15617, 15630, + 15643, 15656, 15669, 15682, 15695, 15708, 15721, 15734, 15747, 15759, + 15770, 15783, 15796, 15809, 15822, 15835, 15848, 15861, 15874, 15887, + 15900, 15912, 15925, 15938, 15951, 15964, 15977, 15990, 16003, 16016, + 16029, 16042, 16054, 16067, 16080, 16093, 16106, 16119, 16132, 16145, + 16158, 16171, 16184, 16196, 16209, 16222, 16235, 16248, 16261, 16274, + 16287, 16300, 16313, 16326, 16338, 16351, 16364, 16377, 16390, 16403, + 16416, 16429, 16442, 16455, 16468, 16480, 16493, 16506, 16519, 16532, + 16545, 16558, 16571, 16584, 16597, 16610, 16622, 16635, 16648, 16661, + 16674, 16687, 16700, 16713, 16726, 16739, 16752, 16764, 16777, 16790, + 16803, 16816, 16829, 16842, 16855, 16868, 16881, 16894, 16906, 16919, + 16932, 16945, 16958, 16971, 16984, 16997, 17010, 17023, 17036, 17048, + 17061, 17074, 17087, 17100, 17113, 17126, 17139, 17152, 17165, 17178, + 17190, 17201, 17209, 17216, 17222, 17226, 17232, 17238, 17246, 17252, + 17257, 7005, 17261, 17268, 17276, 17283, 17290, 8481, 17297, 17306, + 17311, 5793, 17318, 17323, 17326, 17331, 17339, 17346, 17353, 17359, + 17368, 17377, 17383, 17388, 17398, 17405, 17413, 17419, 17429, 17438, + 17442, 17449, 17453, 17458, 17464, 17472, 17476, 11381, 17485, 17491, + 17495, 17501, 17508, 17519, 6829, 17527, 17533, 17538, 17542, 17546, + 7415, 17551, 17559, 17566, 17575, 17582, 17589, 17595, 17599, 17605, + 17611, 17619, 17625, 17632, 17638, 17644, 17648, 17656, 17665, 17670, + 17681, 17686, 17691, 17696, 5966, 17700, 17706, 17713, 17722, 17727, + 17735, 17747, 17752, 17756, 17759, 17765, 17771, 17776, 17780, 17783, + 17794, 17799, 7201, 17806, 7016, 7206, 17811, 17816, 17821, 17826, 17831, + 17836, 17841, 17846, 17851, 17856, 17861, 17866, 17872, 17877, 17882, + 17887, 17892, 17897, 17902, 17907, 17912, 17917, 17923, 17929, 17934, + 17939, 17944, 17949, 17954, 17959, 17964, 17969, 17974, 17980, 17985, + 17990, 17995, 18001, 18007, 18012, 18017, 18022, 18027, 18032, 18037, + 18042, 18047, 18053, 18058, 18063, 18068, 18073, 18079, 18084, 18089, + 18093, 129, 18101, 18105, 18109, 18113, 18118, 18122, 18126, 9788, 18130, + 18135, 18139, 18144, 18148, 18153, 18157, 18163, 18168, 18172, 18176, + 18184, 18188, 18193, 18198, 18202, 18208, 18213, 18217, 18222, 18227, + 18231, 18238, 18242, 18246, 18251, 18255, 18258, 18271, 18276, 18285, + 7238, 18290, 18293, 2605, 2610, 18297, 18303, 18309, 18314, 18319, 18324, + 18330, 18335, 18340, 18344, 18349, 18354, 18360, 18365, 18370, 18376, + 18381, 18385, 18390, 18395, 18400, 18404, 18409, 18414, 18419, 18424, + 18428, 18432, 18437, 2765, 18386, 18441, 18448, 7494, 18460, 18468, + 18391, 18475, 18480, 18396, 18488, 18493, 18498, 18503, 18507, 18512, + 18515, 18519, 18525, 18530, 6856, 1709, 1714, 18534, 18540, 18546, 18551, + 18555, 18559, 18563, 18566, 18572, 18579, 18587, 18593, 18599, 18604, + 18609, 18613, 11741, 12361, 18618, 18630, 18633, 18640, 18644, 18652, + 18663, 18672, 18685, 18695, 18709, 18721, 18735, 18745, 18757, 18763, + 18778, 18802, 18820, 18839, 18852, 18866, 18884, 18900, 18917, 18935, + 18946, 18965, 18982, 19002, 19020, 19032, 19046, 19060, 19072, 19089, + 19108, 19126, 19138, 19156, 19175, 11520, 19188, 19208, 19220, 8116, + 19232, 19237, 19242, 19247, 19253, 19258, 2334, 19262, 19268, 19272, + 19275, 19279, 19287, 19293, 18405, 19297, 19308, 19314, 19320, 19329, + 19336, 19341, 19348, 19354, 19363, 19371, 19381, 19391, 19396, 19405, + 19414, 19425, 19436, 3677, 19446, 19450, 19460, 19468, 19478, 19489, + 19497, 19504, 19510, 19515, 18415, 19519, 19528, 19532, 19537, 19546, + 19554, 19564, 19573, 19579, 19585, 18420, 18425, 19589, 19599, 916, + 19608, 11702, 1154, 19622, 19631, 19639, 19650, 19661, 19671, 19680, + 19689, 19698, 19704, 19713, 19721, 7178, 19727, 19730, 19734, 19739, + 19744, 19752, 18433, 19756, 19762, 19768, 19773, 19778, 19782, 19790, + 19796, 19802, 3351, 19810, 19815, 19820, 19824, 19828, 19835, 19839, + 19847, 19853, 19858, 19862, 19867, 19873, 19877, 19888, 19893, 19897, + 19908, 19912, 19916, 19919, 19923, 19928, 19932, 19936, 903, 19940, + 19945, 19950, 19955, 19960, 19965, 19970, 19975, 19980, 19985, 19990, + 19995, 20000, 20005, 20011, 20016, 20021, 20026, 20031, 20036, 20041, + 20047, 20052, 20057, 20062, 20067, 20072, 20077, 20082, 20088, 20094, + 20099, 20105, 20110, 20115, 5, 20121, 20125, 20129, 20133, 20138, 20142, + 20146, 20150, 20154, 20159, 20163, 20168, 20172, 20175, 20179, 20184, + 20188, 20193, 20197, 20201, 20205, 20210, 20214, 20218, 20228, 20233, + 20237, 20241, 20246, 20251, 20260, 20265, 20270, 20274, 20278, 20290, + 20299, 20308, 20314, 20318, 20322, 20332, 20341, 20349, 20355, 20359, + 20366, 20376, 20385, 20393, 20401, 20408, 20416, 20425, 20434, 20442, + 20447, 20451, 20455, 20458, 20460, 20464, 20468, 20473, 20478, 20482, + 20486, 20489, 20493, 20496, 20500, 20503, 20506, 20510, 20516, 20520, + 20524, 20528, 20533, 20538, 20543, 20547, 20550, 20555, 20561, 20566, + 20572, 20577, 20581, 20585, 20589, 20594, 20598, 20603, 20607, 20614, + 20618, 20621, 20625, 20631, 20637, 20641, 20645, 20650, 20657, 20663, + 20667, 20676, 20680, 20684, 20687, 20693, 20698, 20704, 1471, 1773, + 20709, 20714, 20719, 20724, 20729, 20734, 20739, 2157, 20744, 20745, + 20748, 20752, 20756, 20761, 20765, 20769, 20772, 20777, 20782, 20786, + 20789, 20794, 20798, 20803, 20807, 11714, 20812, 20815, 20818, 20822, + 20826, 20835, 20842, 20847, 20854, 20858, 20862, 20867, 20872, 20876, + 20881, 20893, 20904, 20909, 20913, 20918, 20922, 20925, 20931, 5894, + 2252, 20935, 20951, 7270, 20971, 20980, 20996, 21000, 21003, 21009, + 21019, 21025, 21040, 21052, 21063, 21071, 21080, 21086, 21095, 21105, + 21116, 21127, 21136, 21145, 21153, 21160, 21168, 21181, 21187, 21192, + 21198, 21203, 21211, 21223, 21235, 21249, 21257, 21264, 21273, 21282, + 21290, 21298, 21306, 21313, 21322, 21330, 21340, 21349, 21359, 21368, + 21377, 21385, 21390, 21394, 21397, 21401, 21405, 21409, 21413, 21417, + 21423, 21429, 11759, 21434, 21446, 21452, 7623, 21463, 21473, 21482, + 21486, 21489, 21493, 21499, 21503, 21508, 21517, 21524, 5935, 21531, + 21539, 21546, 21552, 21557, 21563, 21569, 21577, 21581, 21584, 21586, + 21402, 21595, 21601, 21611, 21616, 21622, 21627, 21632, 21637, 21644, + 21653, 21662, 21668, 21673, 21679, 21684, 21691, 21702, 21707, 21711, + 21721, 21725, 21730, 21740, 21749, 21753, 21761, 21768, 21774, 21779, + 21786, 21790, 10323, 21798, 21805, 21812, 18204, 21327, 21817, 21821, + 18952, 21826, 21840, 21856, 21874, 21893, 21910, 21928, 18971, 21945, + 21965, 18988, 21977, 21989, 12443, 22001, 19008, 22015, 22027, 8129, + 22041, 22046, 22051, 22057, 22061, 22066, 22076, 22082, 7994, 22088, + 22090, 22095, 22103, 22107, 21640, 22113, 22120, 22130, 22135, 22139, + 22142, 22148, 22156, 22166, 22182, 22195, 22209, 12461, 22223, 22230, + 22234, 22237, 22242, 22246, 22256, 22261, 22266, 22271, 22279, 22287, + 22296, 22301, 12466, 22305, 22308, 22311, 22316, 22332, 22340, 22348, + 22356, 22361, 22365, 22371, 22377, 22380, 22386, 22398, 22405, 22411, + 22418, 22432, 22445, 22454, 22466, 22477, 22486, 22495, 22503, 22514, + 5917, 22521, 22527, 22532, 22538, 22548, 22557, 22563, 22568, 22575, + 22583, 22595, 22602, 22611, 22619, 22625, 22631, 22636, 22640, 22643, + 22649, 22654, 22658, 22669, 22678, 22686, 22691, 22697, 10921, 6581, + 22702, 22705, 22708, 22714, 22722, 22730, 22734, 22738, 22743, 22746, + 22755, 22763, 22774, 22778, 22784, 22790, 22794, 22800, 22822, 22846, + 22853, 22859, 22870, 22888, 22895, 22903, 22907, 22916, 22929, 22937, + 22949, 22960, 22970, 22984, 22993, 23001, 23013, 7287, 23024, 23035, + 23047, 23057, 23066, 23071, 23075, 23083, 23088, 23092, 23095, 23098, + 23106, 23114, 23123, 23133, 23142, 23148, 23162, 2556, 23184, 23193, + 23203, 23215, 23225, 23233, 23241, 23250, 23255, 23266, 23277, 23281, + 23291, 23300, 23310, 23320, 23328, 23337, 23344, 23352, 23359, 23368, + 23372, 23380, 23387, 23394, 23405, 23420, 23427, 23437, 23446, 23452, + 11054, 23459, 23464, 23468, 23472, 23480, 23486, 23495, 23500, 23510, + 19517, 23514, 23517, 23522, 23527, 23532, 23537, 23542, 23547, 23552, + 23557, 23563, 23568, 23573, 23579, 1242, 639, 23584, 23593, 2300, 23600, + 23605, 23609, 23615, 1275, 506, 343, 23620, 23629, 23637, 23646, 23654, + 23665, 23674, 23682, 23686, 23689, 23697, 23705, 11727, 23710, 23716, + 4101, 23721, 23725, 23731, 23735, 23742, 1437, 23748, 7355, 23755, 23765, + 23773, 23779, 23788, 23796, 23802, 23810, 23817, 23824, 1478, 2338, + 23831, 23837, 23848, 23859, 23867, 23874, 23883, 23891, 23898, 23905, + 23918, 23929, 23948, 1280, 23952, 23957, 23965, 3387, 23969, 23974, 1441, + 20487, 23984, 23988, 23993, 23997, 3333, 24003, 24011, 24018, 24026, + 3388, 260, 24031, 24039, 24047, 24054, 24060, 24065, 24072, 24075, 24081, + 21504, 24087, 106, 24091, 24095, 24101, 24106, 24113, 24119, 2263, 24123, + 24127, 24130, 24133, 24140, 24146, 18500, 24151, 3432, 13175, 24155, + 24158, 24166, 24169, 24179, 24191, 24196, 24200, 24208, 24215, 24221, + 24228, 24235, 24238, 24242, 24246, 1445, 24256, 24258, 24263, 24269, + 24275, 24280, 24285, 24290, 24295, 24300, 24305, 24310, 24315, 24320, + 24325, 24330, 24335, 24340, 24345, 24351, 24357, 24363, 24369, 24374, + 24379, 24384, 24390, 24395, 24400, 24405, 24411, 24416, 24422, 24427, + 24432, 24437, 24442, 24448, 24453, 24459, 24464, 24469, 24474, 24479, + 24485, 24490, 24496, 24501, 24506, 24511, 24516, 24521, 24526, 24531, + 24536, 24541, 24547, 24553, 24559, 24564, 24569, 24574, 24579, 24585, + 24591, 24597, 24603, 24609, 24615, 24620, 24626, 24631, 24636, 24641, + 24646, 24652, 2376, 24657, 2383, 2390, 2647, 24662, 2396, 2406, 24668, + 24672, 24677, 24682, 24688, 24693, 24698, 24702, 24707, 24713, 24718, + 24723, 24729, 24734, 24738, 24743, 24748, 24753, 24758, 24763, 24769, + 24775, 24780, 24784, 24789, 24793, 24798, 24803, 24808, 24812, 24817, + 24822, 24827, 24832, 24838, 24844, 24849, 24853, 24858, 24863, 24868, + 24873, 24878, 24882, 24887, 24892, 24897, 24901, 24906, 24914, 24920, + 24926, 24932, 24937, 24941, 24944, 24948, 24953, 24957, 24962, 24966, + 24969, 24974, 17578, 23752, 24979, 24984, 24988, 24993, 24997, 25001, + 25006, 25010, 25013, 25016, 25020, 25025, 25033, 25037, 25042, 25046, + 25050, 25055, 25060, 25064, 25070, 25075, 25080, 25087, 25094, 25098, + 25101, 25107, 25116, 25123, 25130, 25134, 25139, 25143, 25149, 25155, + 25159, 25165, 25170, 25175, 25182, 25188, 25194, 25200, 25206, 25213, + 25219, 25225, 25231, 25237, 25243, 25249, 25255, 25262, 25268, 25275, + 25281, 25287, 25293, 25299, 25305, 25311, 25317, 25323, 25329, 8917, + 25335, 25340, 25345, 12716, 25350, 25355, 25360, 25366, 25371, 25376, + 25380, 25385, 25390, 25396, 25401, 25406, 25410, 25415, 25420, 25424, + 25429, 25434, 25439, 25443, 25448, 25453, 25458, 25462, 25466, 12060, + 25470, 25479, 25485, 25491, 25500, 25508, 25513, 25517, 25524, 25530, + 25534, 25539, 25548, 25553, 1477, 25559, 25562, 25566, 18541, 18547, + 25572, 25576, 25587, 25598, 25610, 25617, 25624, 25629, 25633, 17235, + 685, 17577, 25641, 25645, 25650, 25656, 25661, 25667, 25672, 25678, + 25683, 8022, 2714, 3282, 25687, 25690, 25696, 25702, 25708, 25715, 25721, + 25727, 25733, 25739, 25745, 25751, 25757, 25763, 25769, 25775, 25781, + 25787, 25794, 25800, 25806, 25812, 25818, 25824, 25827, 25832, 25837, + 25843, 25848, 25853, 25857, 25862, 25868, 25873, 25878, 25884, 25889, + 25895, 25899, 25904, 25909, 25914, 25919, 25923, 25928, 25933, 25938, + 25944, 25950, 25956, 25961, 25965, 25970, 25974, 25982, 3455, 25988, + 25991, 5976, 25995, 26001, 26008, 5985, 26012, 26018, 26025, 26031, + 26040, 26048, 26052, 26059, 26065, 26069, 26072, 26081, 26089, 26093, + 26103, 26113, 26123, 26129, 26139, 26144, 26157, 26171, 26182, 26194, + 26206, 26220, 26233, 26245, 26257, 11561, 26271, 26276, 26281, 26285, + 26289, 26293, 1762, 22475, 26297, 26302, 26307, 26311, 26314, 26319, + 26324, 26330, 26336, 7767, 12395, 26341, 26346, 26351, 26355, 26360, + 25651, 26365, 26370, 26376, 25657, 26381, 26384, 26392, 25662, 26397, + 26403, 26409, 25668, 26414, 26419, 26425, 26430, 26435, 26441, 26447, + 23128, 26452, 26456, 26461, 26466, 26471, 26479, 26483, 26488, 26493, + 26497, 26502, 26507, 26512, 25673, 25679, 26518, 2452, 234, 26521, 26524, + 26528, 26532, 26540, 26547, 26554, 26558, 26561, 26567, 26575, 26583, + 26587, 26591, 26594, 26601, 26605, 26612, 26620, 26628, 26635, 26639, + 635, 292, 26651, 26656, 26661, 26667, 26672, 3466, 26677, 26682, 26687, + 26692, 26697, 18626, 26702, 26707, 26712, 26717, 26723, 26728, 26732, + 26737, 26742, 26747, 26751, 26756, 26761, 26766, 18464, 3472, 26771, + 26776, 26781, 26787, 26792, 26797, 26801, 26806, 26811, 26817, 26822, + 26827, 26831, 26836, 26841, 26846, 26850, 26855, 26860, 26865, 26871, + 26877, 26882, 26886, 26891, 26896, 26901, 26905, 26913, 26917, 26923, + 26927, 26934, 13070, 26940, 26947, 26955, 26962, 26968, 26980, 26986, + 2666, 26990, 26596, 26994, 27005, 27010, 27015, 27020, 27024, 27029, + 18552, 27033, 17591, 27038, 27043, 27049, 27054, 27058, 27062, 27065, + 27071, 27082, 27094, 27099, 27103, 27106, 321, 27110, 27115, 27120, + 27125, 27130, 27135, 27141, 27146, 27151, 27157, 27162, 27168, 27173, + 27179, 27184, 27189, 27194, 27199, 27204, 27209, 27214, 27219, 27225, + 27230, 27235, 27240, 27245, 27250, 27255, 27260, 27266, 27272, 27277, + 27282, 27287, 27292, 27297, 27302, 27307, 27312, 27317, 27322, 27327, + 27332, 27337, 27342, 27347, 27352, 27357, 27362, 27368, 26, 27373, 27377, + 27381, 27389, 27393, 27397, 27400, 27403, 27408, 27412, 27417, 27421, + 27426, 27430, 27435, 27439, 27442, 27444, 27447, 27449, 27453, 27465, + 27474, 27478, 27484, 27489, 27495, 27500, 27505, 27509, 27514, 27521, + 27526, 27532, 27537, 27541, 27548, 21335, 21345, 27552, 27557, 27562, + 27567, 27571, 27578, 6076, 27584, 27593, 27601, 27616, 27630, 27638, + 27649, 27658, 27663, 5243, 27673, 27678, 27682, 27685, 27689, 27693, + 27700, 27705, 6820, 27715, 27717, 27720, 27724, 27728, 27733, 27739, + 27744, 27753, 27759, 27764, 27771, 27775, 27782, 27795, 27803, 27807, + 27817, 27822, 27826, 27830, 27836, 27841, 27851, 27860, 27871, 27879, + 27890, 27899, 27902, 27906, 27914, 27920, 27928, 27935, 27941, 2351, + 27945, 27947, 27952, 27957, 27960, 27962, 27966, 27969, 27973, 27977, + 27980, 27986, 27996, 28001, 28007, 28011, 28016, 28029, 21606, 28035, + 28044, 13898, 26109, 28051, 28056, 28060, 28068, 28075, 28080, 28084, + 28088, 28096, 28102, 28108, 28113, 28117, 28120, 28125, 28138, 28154, + 19078, 28171, 28183, 28200, 28212, 28226, 19095, 19114, 28238, 28250, + 2573, 28264, 28269, 28274, 28278, 28285, 28297, 28303, 28306, 28311, + 18244, 28314, 28318, 28321, 28326, 28331, 28337, 28342, 28347, 28353, + 28359, 28364, 28368, 28373, 28378, 28383, 28387, 28390, 28396, 28401, + 28406, 28411, 28415, 28420, 28426, 28431, 28436, 28442, 28447, 28452, + 28457, 28462, 28467, 28471, 28474, 28480, 28484, 28492, 28499, 28507, + 28517, 28523, 28529, 28533, 28542, 28547, 28552, 8036, 28557, 28564, + 28570, 28575, 28581, 28589, 28596, 28600, 28603, 28614, 28621, 28627, + 28636, 28640, 28643, 28649, 28656, 28662, 28668, 28676, 24055, 28683, + 28691, 28697, 28702, 28708, 28713, 28719, 28723, 28730, 28736, 21619, + 28745, 28750, 28758, 28766, 7383, 4120, 28773, 28777, 28781, 28785, + 28790, 28794, 28798, 28803, 28808, 28812, 17640, 28817, 28821, 28825, + 28829, 28832, 28834, 28839, 28847, 28851, 28858, 28862, 28870, 28877, + 28887, 28891, 28895, 28903, 28909, 28918, 10570, 28924, 28933, 28940, + 28948, 28956, 28964, 28971, 28978, 28985, 28992, 28999, 29004, 29010, + 29027, 29035, 29043, 29050, 380, 29054, 29060, 27654, 29066, 29069, + 29077, 29083, 29089, 29098, 29104, 3420, 12046, 29113, 29120, 29125, + 29129, 29136, 29144, 29153, 29163, 29169, 29177, 29186, 29194, 18248, + 29201, 29208, 29214, 29224, 29233, 29244, 29248, 29254, 29259, 29265, + 29271, 29276, 29289, 29302, 29315, 29322, 29328, 29333, 29337, 1451, + 29341, 29346, 29351, 29356, 29361, 29367, 29372, 29377, 29382, 29387, + 29392, 29397, 29402, 29408, 29414, 29419, 29424, 29430, 29435, 29440, + 29445, 29451, 29456, 29461, 29466, 29471, 29477, 29482, 29487, 29493, + 29498, 29503, 29508, 29513, 29518, 29524, 29529, 29535, 29540, 29546, + 29551, 29556, 29561, 29567, 29573, 29579, 29585, 29591, 29597, 29603, + 29609, 29614, 29619, 29625, 29630, 29635, 29640, 29645, 29650, 29655, + 29660, 29666, 29671, 29676, 29682, 29688, 101, 29693, 29695, 29699, + 29703, 29707, 29712, 29716, 7323, 29720, 29726, 4331, 29732, 29735, + 29740, 29744, 29749, 29753, 29757, 29762, 7869, 29766, 29770, 29774, + 12131, 29779, 29783, 29788, 29793, 29798, 29802, 29809, 21623, 29815, + 29818, 29822, 29827, 29833, 29837, 29843, 29848, 29852, 29856, 29860, + 3317, 3322, 24194, 29863, 29871, 29878, 29882, 29887, 342, 29892, 29898, + 29904, 29908, 29917, 29921, 29925, 29930, 29935, 29939, 29946, 29952, + 29957, 29972, 29987, 30002, 30018, 30036, 7831, 30050, 30055, 30059, + 30067, 27788, 30075, 30079, 30088, 30096, 7546, 11842, 30100, 30103, + 30106, 6089, 3621, 30111, 30119, 30123, 30126, 30130, 30135, 30140, + 30146, 30151, 30155, 30159, 30164, 30168, 30174, 30178, 30185, 30189, + 9256, 30196, 30202, 30207, 30214, 30221, 30228, 23641, 6020, 30235, + 30242, 30249, 30255, 30260, 30267, 30278, 30284, 30289, 30296, 30300, + 30304, 30314, 30325, 30331, 30336, 30341, 30346, 30351, 30355, 30359, + 30365, 2255, 767, 7891, 7896, 7902, 30374, 7907, 7912, 7918, 30379, + 30389, 30393, 7923, 30398, 30401, 30406, 30410, 30415, 30422, 30428, + 30438, 4146, 30447, 30451, 30455, 30465, 30471, 30482, 30488, 30494, + 30499, 30505, 30511, 30516, 30519, 30526, 30532, 30537, 30544, 30551, + 30555, 30565, 30578, 30587, 30596, 30607, 30620, 30629, 30640, 30645, + 30650, 7928, 30656, 30664, 30669, 5094, 21, 30676, 30681, 13284, 30685, + 30688, 30691, 23219, 30695, 23650, 30703, 30707, 30710, 30716, 30722, + 30730, 30736, 30743, 30747, 30751, 23383, 30755, 30764, 30770, 30775, + 30779, 30787, 21669, 30793, 30800, 30806, 30811, 30816, 30820, 30826, + 30831, 30837, 3747, 716, 30844, 30848, 30851, 12054, 30863, 29182, 30874, + 30877, 30884, 30890, 30894, 30900, 30905, 30911, 30916, 30921, 30925, + 30930, 30935, 30945, 30951, 30964, 30970, 30975, 30981, 13193, 1454, 932, + 25770, 25776, 30986, 25782, 25795, 25801, 25807, 30992, 25813, 25819, + 30998, 31004, 14, 31012, 31019, 31023, 31027, 31035, 31039, 31044, 31048, + 31055, 31060, 31064, 31069, 31075, 31080, 31086, 31091, 31095, 31099, + 31103, 31108, 31112, 31117, 31121, 31128, 31133, 31137, 31142, 31146, + 31151, 31155, 31160, 12218, 12223, 31165, 31169, 31172, 31176, 31181, + 31185, 31191, 31198, 31203, 31213, 31218, 31226, 31230, 31233, 31237, + 31242, 31247, 31251, 31256, 10581, 31267, 31271, 31274, 31278, 31282, + 31285, 31289, 6108, 10597, 31292, 31295, 31300, 31304, 31313, 31329, + 31345, 31355, 23138, 31362, 31366, 31371, 31375, 31379, 31384, 31389, + 31393, 31398, 31402, 31406, 22323, 31412, 17702, 31417, 31424, 31432, + 31438, 31445, 31453, 31459, 31463, 31469, 31477, 31481, 31490, 7304, + 31498, 31502, 31510, 31517, 31522, 31526, 31529, 31533, 31536, 31540, + 31547, 31552, 21814, 25825, 31556, 31563, 31569, 31574, 31577, 31579, + 31586, 31593, 31599, 31603, 31606, 31610, 31614, 31618, 31623, 31627, + 31631, 31634, 31638, 31652, 19144, 31671, 31684, 31697, 31710, 19162, + 31725, 8090, 31740, 31746, 31750, 31754, 31761, 31767, 31772, 31778, + 31788, 31800, 31811, 31816, 31823, 31827, 31830, 12589, 31838, 12239, + 31851, 31855, 31859, 31864, 31869, 31873, 31877, 31880, 5750, 23022, + 31885, 31889, 31895, 31904, 31909, 29159, 31915, 31920, 31924, 31929, + 31936, 31940, 31943, 11526, 31948, 31955, 939, 31959, 31964, 31969, + 31975, 31980, 31985, 31989, 31994, 32000, 32005, 32011, 32016, 32022, + 32032, 32037, 32042, 32046, 5245, 5257, 32051, 32054, 32061, 32070, + 32074, 32077, 32081, 32086, 668, 32091, 32097, 23211, 32103, 32108, + 32118, 32127, 32134, 32140, 32144, 32151, 32157, 32164, 32170, 32180, + 32188, 32194, 32200, 32205, 32209, 32216, 32222, 32229, 31619, 548, 1208, + 32235, 32240, 32243, 32249, 32257, 1383, 32262, 32266, 32271, 32278, + 32284, 32288, 32293, 32302, 32309, 32319, 32325, 23237, 32342, 32351, + 32359, 32365, 32370, 32377, 32383, 32391, 32400, 32408, 32413, 32421, + 32427, 32446, 12522, 32460, 32476, 32490, 32496, 32501, 32506, 32511, + 32517, 32522, 32526, 32533, 32538, 32542, 319, 2807, 32549, 32554, 22579, + 32380, 32559, 32564, 32572, 32576, 32579, 32585, 32589, 23287, 32592, + 32596, 32599, 32604, 32608, 32613, 32618, 32622, 32627, 32631, 17511, + 17522, 32635, 32640, 32646, 22292, 32651, 32655, 12702, 32658, 32663, + 32668, 32673, 32678, 32683, 32688, 32693, 453, 43, 25828, 25833, 25838, + 25844, 25849, 25854, 32698, 25858, 32702, 32706, 25863, 25869, 32710, + 25874, 25879, 32718, 32723, 25885, 32728, 32733, 32738, 32743, 32749, + 32755, 25896, 32768, 32774, 25900, 25905, 32778, 25910, 25915, 32781, + 32786, 32790, 25591, 32796, 10746, 32803, 32808, 25920, 32812, 32817, + 32822, 32827, 32831, 32836, 32841, 32847, 32852, 32857, 32863, 32869, + 32874, 32878, 32883, 32888, 32893, 32897, 32902, 32907, 32912, 32918, + 32924, 32930, 32935, 32939, 32944, 32948, 25924, 25929, 25934, 32952, + 32956, 25939, 25945, 25951, 25957, 32968, 21521, 32972, 32976, 32981, + 32986, 32991, 32995, 32999, 33009, 33014, 33019, 33023, 33027, 33030, + 33038, 25966, 1461, 33043, 33051, 33060, 33064, 33072, 33080, 33096, + 33101, 1731, 9398, 33105, 2853, 33117, 33118, 33126, 33133, 33138, 33143, + 7197, 1043, 7950, 33150, 33155, 33158, 33167, 1294, 33172, 33179, 33182, + 33187, 18600, 2485, 33191, 8312, 33201, 33207, 2273, 2283, 33216, 33225, + 27997, 7985, 3565, 29063, 1299, 33235, 33243, 33250, 33255, 33259, 33263, + 19759, 8012, 33271, 33280, 33289, 33297, 33304, 33309, 33322, 33335, + 33347, 33359, 33371, 33384, 33395, 33406, 33414, 33422, 33434, 33446, + 33457, 33466, 33474, 33481, 33493, 33500, 33509, 33516, 33529, 33539, + 33544, 33550, 33555, 33559, 33566, 33570, 33577, 33585, 2451, 33592, + 33603, 33613, 33622, 33630, 33640, 33648, 33658, 33663, 33669, 33680, + 33690, 33699, 33708, 33718, 33727, 33732, 33737, 1687, 37, 33745, 33753, + 33764, 33775, 33785, 33792, 33798, 33803, 33807, 33818, 33828, 33837, + 33848, 13257, 13262, 33853, 33862, 33867, 33877, 33882, 33890, 33898, + 33905, 33911, 8057, 1018, 33915, 33921, 33926, 33929, 2094, 31856, 33937, + 33941, 33944, 1494, 33950, 11019, 1304, 33955, 33968, 33982, 2536, 34000, + 34012, 34024, 2550, 2567, 34038, 34051, 2582, 34065, 34077, 2597, 34091, + 1310, 1316, 1322, 8237, 34096, 34101, 34106, 34110, 34125, 34140, 34155, + 34170, 34185, 34200, 34215, 34230, 34245, 34260, 34275, 34290, 34305, + 34320, 34335, 34350, 34365, 34380, 34395, 34410, 34425, 34440, 34455, + 34470, 34485, 34500, 34515, 34530, 34545, 34560, 34575, 34590, 34605, + 34620, 34635, 34650, 34665, 34680, 34695, 34710, 34725, 34740, 34755, + 34770, 34785, 34800, 34815, 34830, 34845, 34860, 34875, 34890, 34905, + 34920, 34935, 34950, 34965, 34980, 34995, 35010, 35025, 35040, 35055, + 35070, 35085, 35100, 35115, 35130, 35145, 35160, 35175, 35190, 35205, + 35220, 35235, 35250, 35265, 35280, 35295, 35310, 35325, 35340, 35355, + 35370, 35385, 35400, 35415, 35430, 35445, 35460, 35475, 35490, 35505, + 35520, 35535, 35550, 35565, 35580, 35595, 35610, 35625, 35640, 35655, + 35670, 35685, 35700, 35715, 35730, 35745, 35760, 35775, 35790, 35805, + 35820, 35835, 35850, 35865, 35880, 35895, 35910, 35925, 35940, 35955, + 35970, 35985, 36000, 36015, 36030, 36045, 36060, 36075, 36090, 36105, + 36120, 36135, 36150, 36165, 36180, 36195, 36210, 36225, 36240, 36255, + 36270, 36285, 36300, 36315, 36330, 36345, 36360, 36375, 36390, 36405, + 36420, 36435, 36450, 36465, 36480, 36495, 36510, 36525, 36540, 36555, + 36570, 36585, 36600, 36615, 36630, 36645, 36660, 36675, 36690, 36705, + 36720, 36735, 36750, 36765, 36780, 36795, 36810, 36825, 36840, 36855, + 36870, 36885, 36900, 36915, 36930, 36945, 36960, 36975, 36990, 37005, + 37020, 37035, 37050, 37065, 37080, 37095, 37110, 37125, 37140, 37155, + 37170, 37185, 37200, 37215, 37230, 37245, 37260, 37275, 37290, 37305, + 37320, 37335, 37350, 37365, 37380, 37395, 37410, 37425, 37440, 37455, + 37470, 37485, 37500, 37515, 37530, 37545, 37560, 37575, 37590, 37605, + 37620, 37635, 37650, 37665, 37680, 37695, 37710, 37725, 37740, 37755, + 37770, 37785, 37800, 37815, 37830, 37845, 37860, 37875, 37890, 37905, + 37920, 37935, 37950, 37965, 37980, 37995, 38010, 38025, 38040, 38055, + 38070, 38085, 38100, 38115, 38130, 38145, 38160, 38175, 38190, 38205, + 38220, 38235, 38250, 38265, 38280, 38295, 38310, 38325, 38340, 38355, + 38370, 38385, 38400, 38415, 38430, 38445, 38460, 38475, 38490, 38505, + 38520, 38535, 38550, 38565, 38580, 38595, 38610, 38625, 38640, 38655, + 38670, 38685, 38700, 38715, 38730, 38745, 38760, 38775, 38790, 38805, + 38820, 38835, 38850, 38865, 38880, 38895, 38910, 38925, 38940, 38955, + 38970, 38985, 39000, 39015, 39030, 39045, 39060, 39075, 39090, 39105, + 39120, 39135, 39150, 39165, 39180, 39195, 39210, 39225, 39240, 39255, + 39270, 39285, 39300, 39315, 39330, 39345, 39360, 39375, 39390, 39405, + 39420, 39435, 39450, 39465, 39480, 39495, 39510, 39525, 39540, 39555, + 39570, 39585, 39600, 39615, 39630, 39645, 39660, 39675, 39690, 39705, + 39720, 39735, 39750, 39765, 39780, 39795, 39810, 39825, 39840, 39855, + 39870, 39885, 39900, 39915, 39930, 39945, 39960, 39975, 39990, 40005, + 40020, 40035, 40050, 40065, 40080, 40095, 40110, 40125, 40140, 40155, + 40170, 40185, 40200, 40215, 40230, 40245, 40260, 40275, 40290, 40305, + 40320, 40335, 40350, 40365, 40380, 40395, 40410, 40425, 40440, 40455, + 40470, 40485, 40500, 40515, 40530, 40545, 40560, 40575, 40590, 40605, + 40620, 40635, 40650, 40665, 40680, 40695, 40710, 40725, 40740, 40755, + 40770, 40785, 40800, 40815, 40830, 40845, 40860, 40875, 40890, 40905, + 40920, 40935, 40950, 40965, 40980, 40995, 41010, 41025, 41040, 41055, + 41070, 41085, 41100, 41115, 41130, 41145, 41160, 41175, 41190, 41205, + 41220, 41235, 41250, 41265, 41280, 41295, 41310, 41325, 41340, 41355, + 41370, 41385, 41400, 41415, 41430, 41445, 41460, 41475, 41490, 41505, + 41520, 41535, 41550, 41565, 41580, 41595, 41610, 41625, 41640, 41655, + 41670, 41685, 41700, 41715, 41730, 41745, 41761, 41777, 41793, 41809, + 41825, 41841, 41857, 41873, 41889, 41905, 41921, 41937, 41953, 41969, + 41985, 42001, 42017, 42033, 42049, 42065, 42081, 42097, 42113, 42129, + 42145, 42161, 42177, 42193, 42209, 42225, 42241, 42257, 42273, 42289, + 42305, 42321, 42337, 42353, 42369, 42385, 42401, 42417, 42433, 42449, + 42465, 42481, 42497, 42513, 42529, 42545, 42561, 42577, 42593, 42609, + 42625, 42641, 42657, 42673, 42689, 42705, 42721, 42737, 42753, 42769, + 42785, 42801, 42817, 42833, 42849, 42865, 42881, 42897, 42913, 42929, + 42945, 42961, 42977, 42993, 43009, 43025, 43041, 43057, 43073, 43089, + 43105, 43121, 43137, 43153, 43169, 43185, 43201, 43217, 43233, 43249, + 43265, 43281, 43297, 43313, 43329, 43345, 43361, 43377, 43393, 43409, + 43425, 43441, 43457, 43473, 43489, 43505, 43521, 43537, 43553, 43569, + 43585, 43601, 43617, 43633, 43649, 43665, 43681, 43697, 43713, 43729, + 43745, 43761, 43777, 43793, 43809, 43825, 43841, 43857, 43873, 43889, + 43905, 43921, 43937, 43953, 43969, 43985, 44001, 44017, 44033, 44049, + 44065, 44081, 44097, 44113, 44129, 44145, 44161, 44177, 44193, 44209, + 44225, 44241, 44257, 44273, 44289, 44305, 44321, 44337, 44353, 44369, + 44385, 44401, 44417, 44433, 44449, 44465, 44481, 44497, 44513, 44529, + 44545, 44561, 44577, 44593, 44609, 44625, 44641, 44657, 44673, 44689, + 44705, 44721, 44737, 44753, 44769, 44785, 44801, 44817, 44833, 44849, + 44865, 44881, 44897, 44913, 44929, 44945, 44961, 44977, 44993, 45009, + 45025, 45041, 45057, 45073, 45089, 45105, 45121, 45137, 45153, 45169, + 45185, 45201, 45217, 45233, 45249, 45265, 45281, 45297, 45313, 45329, + 45345, 45361, 45377, 45393, 45409, 45425, 45441, 45457, 45473, 45489, + 45505, 45521, 45537, 45553, 45569, 45585, 45601, 45617, 45633, 45649, + 45665, 45681, 45697, 45713, 45729, 45745, 45761, 45777, 45793, 45809, + 45825, 45841, 45857, 45873, 45889, 45905, 45921, 45937, 45953, 45969, + 45985, 46001, 46017, 46033, 46049, 46065, 46081, 46097, 46113, 46129, + 46145, 46161, 46177, 46193, 46209, 46225, 46241, 46257, 46273, 46289, + 46305, 46321, 46337, 46353, 46369, 46385, 46401, 46417, 46433, 46449, + 46465, 46481, 46497, 46513, 46529, 46545, 46561, 46577, 46593, 46609, + 46625, 46641, 46657, 46673, 46689, 46705, 46721, 46737, 46753, 46769, + 46785, 46801, 46817, 46833, 46849, 46865, 46881, 46897, 46913, 46929, + 46945, 46961, 46977, 46993, 47009, 47025, 47041, 47057, 47073, 47089, + 47105, 47121, 47137, 47153, 47169, 47185, 47201, 47217, 47233, 47249, + 47265, 47281, 47297, 47313, 47329, 47345, 47361, 47377, 47393, 47409, + 47425, 47441, 47457, 47473, 47489, 47505, 47521, 47537, 47553, 47569, + 47585, 47601, 47617, 47633, 47649, 47665, 47681, 47697, 47713, 47729, + 47745, 47761, 47777, 47793, 47809, 47825, 47841, 47857, 47873, 47889, + 47905, 47921, 47937, 47953, 47969, 47985, 48001, 48017, 48033, 48049, + 48065, 48081, 48097, 48113, 48129, 48145, 48161, 48177, 48193, 48209, + 48225, 48241, 48257, 48273, 48289, 48305, 48321, 48337, 48353, 48369, + 48385, 48401, 48417, 48433, 48449, 48465, 48481, 48497, 48513, 48529, + 48545, 48561, 48577, 48593, 48609, 48625, 48641, 48657, 48673, 48689, + 48705, 48721, 48737, 48753, 48769, 48785, 48801, 48817, 48833, 48849, + 48865, 48881, 48897, 48913, 48929, 48945, 48961, 48977, 48993, 49009, + 49025, 49041, 49057, 49073, 49089, 49105, 49121, 49137, 49153, 49169, + 49185, 49201, 49217, 49233, 49249, 49265, 49281, 49297, 49313, 49329, + 49345, 49361, 49377, 49393, 49409, 49425, 49441, 49457, 49473, 49489, + 49505, 49521, 49537, 49553, 49569, 49585, 49601, 49617, 49633, 49649, + 49665, 49681, 49697, 49713, 49729, 49745, 49761, 49777, 49793, 49809, + 49825, 49841, 49857, 49873, 49889, 49905, 49921, 49937, 49953, 49969, + 49985, 50001, 50017, 50033, 50049, 50065, 50081, 50097, 50113, 50129, + 50145, 50161, 50177, 50193, 50209, 50225, 50241, 50257, 50273, 50289, + 50305, 50321, 50337, 50353, 50369, 50385, 50401, 50417, 50432, 50441, + 50447, 50453, 50463, 50471, 11823, 13787, 7661, 50484, 1502, 50492, + 22665, 5207, 50498, 50503, 50508, 50513, 50518, 50524, 50529, 50535, + 50540, 50546, 50551, 50556, 50561, 50566, 50572, 50577, 50582, 50587, + 50592, 50597, 50602, 50607, 50613, 50618, 50624, 50631, 2489, 50636, + 50642, 6480, 50646, 50651, 50658, 50666, 40, 50670, 50676, 50681, 50686, + 50690, 50695, 50699, 50703, 8255, 50707, 50717, 50730, 50741, 50754, + 50761, 50767, 50772, 50778, 50784, 50790, 50795, 50800, 50805, 50810, + 50814, 50819, 50824, 50829, 50835, 50841, 50847, 50852, 50856, 50861, + 50866, 50870, 50875, 50880, 50885, 50889, 8271, 8282, 8287, 1545, 50893, + 1550, 50899, 50902, 1581, 50908, 1587, 1593, 8317, 50913, 50921, 50928, + 50932, 50938, 50943, 25620, 50948, 50955, 50960, 50964, 50968, 1598, + 12933, 12944, 50977, 50984, 50989, 50993, 12956, 1602, 30319, 50996, + 51006, 51010, 1607, 31921, 51015, 8437, 8443, 51021, 51033, 51050, 51067, + 51084, 51101, 51118, 51135, 51152, 51169, 51186, 51203, 51220, 51237, + 51254, 51271, 51288, 51305, 51322, 51339, 51356, 51373, 51390, 51407, + 51424, 51441, 51458, 51475, 51492, 51509, 51526, 51543, 51560, 51577, + 51594, 51611, 51628, 51645, 51662, 51679, 51696, 51713, 51730, 51747, + 51764, 51781, 51798, 51815, 51832, 51849, 51866, 51877, 51882, 1612, + 51886, 51892, 7144, 1617, 22912, 51897, 51908, 51918, 51923, 51930, + 51936, 51941, 51946, 51950, 8454, 1622, 8459, 51954, 51959, 51965, 51970, + 51975, 51980, 51985, 51990, 51995, 52000, 52006, 52012, 52018, 52023, + 52027, 52032, 52037, 52041, 52046, 52051, 52056, 52060, 52065, 52071, + 52076, 52081, 52085, 52090, 52095, 52101, 52106, 52111, 52117, 52123, + 52128, 52132, 52137, 52142, 52147, 52151, 52156, 52161, 52166, 52172, + 52178, 52183, 52187, 52191, 52196, 52201, 52206, 24124, 52210, 52215, + 52220, 52226, 52231, 52236, 52240, 52245, 52250, 52256, 52261, 52266, + 52272, 52278, 52283, 52287, 52292, 52297, 52301, 52306, 52311, 52316, + 52322, 52328, 52333, 52337, 52342, 52347, 52351, 52356, 52361, 52366, + 52370, 52373, 26077, 52378, 52386, 13218, 13236, 8557, 52392, 8562, + 52407, 52412, 52423, 52435, 52447, 52459, 2588, 52471, 52476, 52480, + 52486, 52492, 1634, 940, 52497, 52502, 31960, 52506, 52510, 52515, 52519, + 13301, 52524, 52527, 52535, 1638, 8587, 8593, 1643, 52543, 52550, 52555, + 52564, 52574, 52581, 1648, 52588, 52593, 13376, 52597, 52602, 52609, + 52615, 52619, 52629, 13398, 7063, 7070, 1653, 52636, 52642, 52650, 52657, + 52663, 52669, 52674, 52685, 52694, 3498, 25495, 25504, 13438, 1658, 1662, + 52702, 52713, 52718, 1665, 52726, 52731, 52743, 52749, 52754, 1670, + 52759, 52764, 52772, 52780, 52787, 52796, 52804, 52813, 1675, 1680, + 52817, 52824, 13547, 52832, 52838, 52846, 52851, 8727, 52860, 52866, + 52872, 52877, 52885, 8736, 8741, 52893, 52899, 3563, 32038, 52904, 52910, + 52915, 52923, 52930, 52935, 52939, 52945, 1691, 52950, 52953, 977, 52959, + 52964, 52969, 52975, 52980, 52985, 52990, 52995, 53000, 53005, 1700, 9, + 53011, 53015, 53020, 53024, 53028, 53032, 26315, 53037, 53042, 53047, + 53051, 53054, 53058, 53062, 53067, 53071, 53076, 53080, 28322, 28327, + 28332, 53083, 53090, 53096, 31804, 53106, 28338, 28343, 26325, 26331, + 28354, 26337, 53111, 53116, 53120, 53124, 53127, 53131, 53134, 53139, + 53143, 53147, 53150, 53162, 27517, 53169, 12396, 760, 53172, 53176, + 53181, 53185, 10779, 53188, 53195, 53208, 53217, 53222, 53232, 53245, + 53257, 53264, 53269, 53278, 53291, 29283, 53309, 53314, 53321, 53327, + 53332, 53340, 22979, 585, 53346, 53352, 53358, 53363, 26342, 4176, 26356, + 53367, 53377, 53382, 53392, 53407, 53413, 53419, 26361, 25652, 53424, + 53429, 53434, 53438, 53443, 53448, 53452, 4217, 26382, 53456, 53462, 337, + 53472, 53479, 53488, 53494, 53502, 53506, 53510, 53514, 53518, 53523, + 53527, 53533, 53541, 53546, 53550, 53555, 53559, 53563, 53569, 53575, + 53580, 53584, 26398, 53589, 26404, 26410, 53594, 53600, 53605, 53609, + 25669, 13167, 53612, 53616, 53621, 53628, 53634, 53638, 53643, 53649, + 53653, 53657, 53662, 53667, 53671, 53674, 53680, 53685, 53692, 53699, + 53705, 53710, 53715, 53719, 53724, 53730, 53735, 53741, 53746, 53751, + 53756, 53762, 53767, 53772, 53778, 53784, 53790, 26415, 53795, 53800, + 53805, 26426, 53810, 53815, 53820, 53826, 53832, 26431, 53837, 53842, + 53847, 26442, 26448, 53852, 53857, 53862, 53867, 23129, 26453, 26457, + 53872, 53843, 53876, 53882, 53890, 53897, 53903, 53913, 53919, 53926, + 8214, 26462, 53932, 53945, 53954, 53960, 53969, 53975, 19524, 53982, + 53989, 26443, 53999, 54006, 54011, 54015, 54019, 54024, 4251, 54028, + 54033, 54038, 28416, 28421, 54042, 28427, 28432, 54047, 28437, 28443, + 54052, 28448, 54063, 54066, 54078, 54086, 26484, 54090, 54099, 54109, + 54118, 26489, 54123, 54130, 54139, 54145, 54153, 27045, 4069, 54158, + 26498, 54164, 54167, 54173, 54180, 54185, 54190, 19456, 54194, 54200, + 54206, 54211, 54217, 54223, 54228, 765, 29092, 29839, 29845, 54232, + 54236, 54240, 54243, 54256, 54262, 54266, 54269, 54274, 27708, 54278, + 25674, 17585, 54284, 4197, 4205, 6948, 54287, 54292, 54297, 54302, 54307, + 54312, 54317, 54322, 54327, 54332, 54338, 54343, 54348, 54354, 54359, + 54364, 54369, 54374, 54379, 54384, 54390, 54395, 54401, 54406, 54411, + 54416, 54421, 54426, 54431, 54436, 54441, 54446, 54451, 54457, 54462, + 54467, 54472, 54477, 54482, 54487, 54493, 54498, 54503, 54508, 54513, + 54518, 54523, 54528, 54533, 54538, 54544, 54549, 54554, 54559, 54564, + 54570, 54576, 54581, 54587, 54592, 54597, 54602, 54607, 54612, 1495, 235, + 54617, 54621, 54625, 54629, 54633, 54636, 54640, 54645, 54649, 54654, + 54658, 54662, 54666, 54671, 54675, 54680, 54684, 54688, 54695, 11999, + 54704, 54713, 54717, 20701, 54721, 54727, 54735, 54741, 54753, 54757, + 54762, 54768, 54778, 54788, 54794, 54798, 54803, 54809, 54818, 54827, + 54835, 12274, 54839, 54848, 54856, 54867, 54878, 54887, 54891, 54900, + 54910, 54916, 54921, 54927, 54932, 98, 25579, 54943, 21735, 54949, 54956, + 54962, 54966, 54976, 54984, 54989, 54993, 55001, 55005, 55011, 55021, + 1132, 55024, 55027, 55031, 55037, 55044, 55050, 55059, 55068, 55074, + 55080, 55085, 55092, 55099, 55112, 55121, 55130, 55135, 55139, 55146, + 55153, 55160, 55167, 55174, 55179, 55183, 55187, 55190, 55200, 55204, + 55213, 55217, 55222, 55226, 55235, 55243, 55251, 55256, 55260, 55265, + 55270, 55274, 55280, 55292, 55300, 55310, 55317, 55323, 55328, 55332, + 55336, 55340, 55349, 55358, 55367, 55373, 55379, 55385, 55390, 55397, + 55403, 55411, 55418, 9779, 55424, 55430, 55434, 11225, 55438, 55447, + 55453, 55461, 55468, 55472, 55476, 55482, 55490, 55497, 55503, 55514, + 55518, 55522, 55526, 55529, 55535, 55540, 55544, 55548, 55557, 55565, + 55572, 19890, 31572, 55578, 55586, 55590, 55597, 55606, 55614, 55620, + 55625, 55629, 55634, 55638, 55643, 55652, 55656, 55663, 55670, 55678, + 55684, 55695, 55701, 55710, 55717, 55724, 55731, 55738, 55745, 34285, + 55752, 55759, 55764, 55770, 37407, 55774, 55779, 55784, 55790, 55796, + 55802, 55807, 55812, 55817, 55822, 55828, 55833, 55839, 55844, 55850, + 55855, 55860, 55865, 55870, 55875, 55880, 55885, 55891, 55896, 55902, + 55907, 55912, 55917, 55922, 55927, 55932, 55938, 55943, 55948, 55953, + 55958, 55963, 55968, 55973, 55978, 55983, 55988, 55994, 55999, 56004, + 56009, 56014, 56019, 56024, 56029, 56034, 56040, 56045, 56050, 56055, + 56060, 56065, 56070, 56075, 56080, 56085, 56090, 56095, 56100, 56106, + 1816, 216, 30402, 56111, 56114, 56119, 56123, 55247, 56126, 56136, 56143, + 56152, 56162, 56172, 56180, 56188, 56192, 56195, 56202, 56208, 56219, + 56231, 56242, 56249, 1305, 19361, 56259, 2518, 56263, 1087, 13743, 30918, + 56271, 56284, 56288, 56293, 56298, 56303, 56309, 56315, 56320, 6489, + 56325, 56333, 8588, 56338, 56344, 1703, 8600, 669, 56353, 56362, 56372, + 22357, 56381, 56387, 13353, 56393, 56397, 3678, 8890, 56403, 52708, + 56410, 6919, 171, 11159, 56416, 56428, 56432, 56438, 22932, 56442, 8878, + 2623, 4, 56447, 56457, 56463, 56474, 56481, 56487, 56493, 56501, 56508, + 56518, 56528, 56538, 1317, 56547, 56553, 2646, 2652, 6486, 2200, 56557, + 56561, 56570, 56581, 56589, 56597, 56603, 56614, 56625, 56633, 56639, + 8931, 56644, 56652, 56656, 56660, 23273, 56672, 56682, 56688, 56694, + 56704, 56707, 56718, 56728, 56737, 56741, 56748, 1089, 2511, 56758, + 56763, 56771, 56779, 56790, 56804, 11111, 374, 56814, 56818, 56827, + 56835, 56841, 56848, 56854, 56861, 56871, 56879, 3570, 184, 56887, 56898, + 56902, 56914, 23120, 148, 56920, 56925, 56929, 56936, 56942, 56950, + 56957, 6740, 56964, 56973, 3625, 56981, 13399, 56985, 2681, 419, 56990, + 57003, 57008, 1815, 602, 57012, 3631, 57020, 57026, 917, 57036, 57045, + 57050, 11847, 57054, 37617, 57057, 3580, 19507, 57065, 57072, 19549, + 57076, 57083, 57089, 57094, 11861, 57099, 57111, 57117, 57125, 2693, + 1735, 57133, 57135, 57140, 57145, 57150, 57156, 57161, 57166, 57171, + 57176, 57181, 57186, 57192, 57197, 57202, 57207, 57212, 57217, 57222, + 57227, 57232, 57238, 57243, 57248, 57253, 57259, 57264, 57270, 57275, + 57280, 57285, 57290, 57295, 57300, 57305, 57311, 57316, 57322, 57327, + 57332, 57337, 57342, 57347, 57352, 57357, 57362, 57367, 57372, 57376, + 57380, 57385, 57389, 57394, 57399, 57405, 57410, 57414, 57418, 57421, + 57423, 57427, 57430, 57435, 57439, 57443, 57447, 57451, 57460, 26652, + 57463, 26657, 26662, 57470, 57479, 26668, 57484, 26673, 57493, 57498, + 9018, 57502, 57507, 57512, 57516, 57520, 57524, 57528, 57531, 57535, + 6170, 57541, 57546, 57550, 3467, 57553, 57555, 57559, 57562, 57567, + 57571, 57577, 57590, 57596, 57601, 57605, 57613, 57620, 57628, 57637, + 57645, 26678, 57652, 57662, 57671, 57684, 57689, 57694, 57700, 57707, + 57718, 57730, 57737, 57746, 57755, 57764, 57771, 57777, 57784, 57792, + 57799, 57807, 57816, 57824, 57831, 57839, 57848, 57856, 57865, 57875, + 57884, 57892, 57899, 57907, 57916, 57924, 57933, 57943, 57952, 57960, + 57969, 57979, 57988, 57998, 58009, 58019, 58028, 58036, 58043, 58051, + 58060, 58068, 58077, 58087, 58096, 58104, 58113, 58123, 58132, 58142, + 58153, 58163, 58172, 58180, 58189, 58199, 58208, 58218, 58229, 58239, + 58248, 58258, 58269, 58279, 58290, 58302, 58313, 58323, 58332, 58340, + 58347, 58355, 58364, 58372, 58381, 58391, 58400, 58408, 58417, 58427, + 58436, 58446, 58457, 58467, 58476, 58484, 58493, 58503, 58512, 58522, + 58533, 58543, 58552, 58562, 58573, 58583, 58594, 58606, 58617, 58627, + 58636, 58644, 58653, 58663, 58672, 58682, 58693, 58703, 58712, 58722, + 58733, 58743, 58754, 58766, 58777, 58787, 58796, 58806, 58817, 58827, + 58838, 58850, 58861, 58871, 58882, 58894, 58905, 58917, 58930, 58942, + 58953, 58963, 58972, 58980, 58987, 58995, 59004, 59012, 59021, 59031, + 59040, 59048, 59057, 59067, 59076, 59086, 59097, 59107, 59116, 59124, + 59133, 59143, 59152, 59162, 59173, 59183, 59192, 59202, 59213, 59223, + 59234, 59246, 59257, 59267, 59276, 59284, 59293, 59303, 59312, 59322, + 59333, 59343, 59352, 59362, 59373, 59383, 59394, 59406, 59417, 59427, + 59436, 59446, 59457, 59467, 59478, 59490, 59501, 59511, 59522, 59534, + 59545, 59557, 59570, 59582, 59593, 59603, 59612, 59620, 59629, 59639, + 59648, 59658, 59669, 59679, 59688, 59698, 59709, 59719, 59730, 59742, + 59753, 59763, 59772, 59782, 59793, 59803, 59814, 59826, 59837, 59847, + 59858, 59870, 59881, 59893, 59906, 59918, 59929, 59939, 59948, 59958, + 59969, 59979, 59990, 60002, 60013, 60023, 60034, 60046, 60057, 60069, + 60082, 60094, 60105, 60115, 60126, 60138, 60149, 60161, 60174, 60186, + 60197, 60209, 60222, 60234, 60247, 60261, 60274, 60286, 60297, 60307, + 60316, 60324, 60331, 60336, 6029, 60343, 26688, 60348, 60353, 26693, + 60359, 17319, 31449, 60364, 60370, 60376, 60383, 60390, 60395, 60399, + 60403, 60412, 60418, 60430, 60441, 60445, 2936, 6004, 60450, 60453, + 60455, 60459, 60463, 60467, 34097, 60472, 60476, 60479, 60484, 60488, + 60495, 60501, 60505, 60509, 26703, 60512, 60519, 60528, 60536, 60547, + 60555, 60563, 60570, 60577, 60583, 60594, 26708, 60599, 60610, 60622, + 60633, 60641, 2484, 60646, 60659, 60663, 60671, 60676, 60684, 13908, + 60695, 60701, 60708, 60716, 60722, 26713, 60727, 7592, 50467, 60734, + 60737, 60745, 60758, 60771, 60784, 60797, 60804, 60815, 60824, 34102, + 34107, 60829, 60833, 60841, 60848, 60857, 60865, 60871, 60880, 60888, + 60896, 60900, 60909, 60918, 60928, 60941, 60954, 60964, 26718, 60970, + 60977, 60983, 26724, 60988, 60991, 60995, 61003, 61012, 33840, 61020, + 61028, 61035, 61043, 61053, 61062, 61071, 61080, 61088, 61099, 61109, + 7184, 17802, 61118, 61123, 61128, 61132, 61136, 61141, 61147, 61152, + 61157, 61163, 61168, 61173, 17767, 61178, 61185, 61193, 61201, 61206, + 61213, 61220, 61224, 61228, 61236, 61244, 26733, 61250, 61256, 61268, + 61274, 61279, 61290, 61300, 61310, 61322, 61328, 61338, 26738, 61347, + 61356, 61362, 61374, 61385, 61392, 61397, 61401, 61409, 61415, 61420, + 61425, 61432, 61444, 61454, 61463, 61470, 27937, 19731, 61476, 61481, + 61485, 61489, 61494, 61500, 61511, 61524, 61529, 26743, 61534, 61546, + 61555, 61568, 61575, 61584, 61592, 61597, 61603, 1484, 61608, 61613, + 61618, 61623, 61629, 61634, 61639, 61645, 61651, 61656, 61660, 61665, + 61670, 61675, 50973, 61680, 61685, 61690, 61695, 61701, 61707, 61712, + 61716, 61721, 61726, 61731, 61736, 61741, 61745, 61751, 61756, 61765, + 61770, 61775, 61780, 61785, 61789, 61796, 61802, 13605, 13612, 37872, + 61807, 61757, 61809, 26752, 61812, 61821, 61827, 4263, 26757, 61831, + 61837, 61843, 61848, 61852, 61859, 61864, 61874, 61883, 61887, 61893, + 61899, 61905, 61909, 61917, 61924, 61932, 61940, 26762, 61947, 61950, + 61957, 61962, 61966, 61972, 61977, 61981, 61990, 61998, 62004, 62009, + 27544, 62016, 62023, 62029, 62034, 62040, 62047, 62053, 26475, 22688, + 62059, 62064, 62070, 62082, 61790, 61797, 62092, 62097, 62104, 62111, + 62117, 62128, 62133, 6965, 62141, 62144, 62150, 62154, 62158, 62161, + 62167, 26571, 4283, 836, 10621, 62174, 62180, 62186, 62192, 62198, 62204, + 62210, 62216, 62222, 62227, 62232, 62237, 62242, 62247, 62252, 62257, + 62262, 62267, 62272, 62277, 62282, 62287, 62293, 62298, 62303, 62309, + 62314, 62319, 62325, 62331, 62337, 62343, 62349, 62355, 62361, 62367, + 62373, 62378, 62383, 62389, 62394, 62399, 62405, 62410, 62415, 62420, + 62425, 62430, 62435, 62440, 62445, 62450, 62455, 62460, 62465, 62471, + 62476, 62481, 62486, 62492, 62497, 62502, 62507, 62512, 62518, 62523, + 62528, 62533, 62538, 62543, 62548, 62553, 62558, 62563, 62568, 62573, + 62578, 62583, 62588, 62593, 62598, 62603, 62608, 62613, 62619, 62624, + 62629, 62634, 62639, 62644, 62649, 62654, 1846, 138, 62659, 62663, 62667, + 62672, 62680, 62684, 62691, 62699, 62703, 62716, 62720, 62723, 62728, + 62732, 62737, 62741, 62749, 62753, 17327, 62758, 62762, 62766, 62769, + 62777, 62782, 62789, 62795, 62801, 62806, 62814, 56276, 62821, 62826, + 62831, 62835, 62839, 62842, 62847, 62852, 62856, 62859, 62865, 62869, + 62879, 62888, 62891, 62904, 62912, 62920, 62930, 62943, 62950, 62961, + 62967, 62972, 62977, 62983, 62992, 61536, 63000, 63006, 63014, 63018, + 63022, 63028, 63036, 63048, 63060, 63067, 63071, 63082, 63090, 63097, + 63109, 63117, 63125, 63132, 63138, 63148, 63157, 63162, 63172, 63176, + 63180, 63190, 63197, 63209, 63221, 63230, 60649, 63237, 63248, 63262, + 63270, 63280, 63287, 63295, 63304, 63312, 63322, 63331, 63342, 63354, + 63363, 63373, 63380, 63389, 63404, 63413, 63426, 63441, 63445, 63457, + 63468, 63479, 63490, 63500, 63511, 63519, 63525, 63535, 63541, 63546, + 63552, 63558, 63563, 63570, 7469, 13928, 63576, 63581, 63588, 63594, + 63599, 63603, 63606, 63609, 63611, 63618, 63629, 63634, 63638, 63644, + 63649, 63657, 56720, 56730, 63663, 63673, 63680, 63686, 63691, 63700, + 63707, 63715, 63724, 63730, 63736, 63743, 63750, 63755, 63759, 63764, + 63769, 63774, 63778, 62711, 63787, 63791, 63802, 63812, 13937, 63823, + 63831, 13949, 63838, 22598, 63842, 63846, 63851, 63868, 63880, 8169, + 63892, 63897, 63902, 63907, 63911, 63914, 63919, 63924, 63930, 63935, + 4075, 17378, 63940, 63945, 63951, 63958, 63963, 63968, 63974, 63980, + 63986, 63991, 63997, 64001, 64015, 64023, 64031, 64037, 64042, 64049, + 64054, 64059, 64067, 64072, 64078, 64083, 64088, 64092, 64095, 64113, + 64132, 64145, 64159, 64175, 64182, 64189, 64195, 64202, 64207, 64213, + 64219, 64224, 64229, 64245, 8182, 64259, 64266, 64270, 64273, 64278, + 64283, 64290, 64295, 64300, 64305, 64309, 64317, 9090, 64326, 64331, + 64337, 9101, 64342, 64345, 64350, 64360, 64369, 64374, 64382, 64389, + 64400, 64410, 64415, 64420, 64427, 64433, 64438, 64445, 64454, 64462, + 64468, 64475, 64481, 64485, 13451, 2910, 64490, 64494, 64500, 64506, + 64513, 64517, 64538, 64560, 64576, 64593, 64612, 64621, 64631, 64638, + 64645, 22517, 64651, 64655, 64663, 64669, 64677, 64681, 64689, 64696, + 64700, 64706, 64712, 64717, 3375, 34302, 64723, 64727, 64731, 64735, + 64740, 64745, 64750, 64756, 64761, 64767, 64772, 64777, 64781, 64786, + 34317, 64790, 64795, 64803, 64807, 64812, 64819, 64828, 64834, 64841, + 64845, 64852, 64861, 64866, 64874, 64883, 64889, 64894, 64899, 64905, + 64911, 64916, 64920, 64924, 64927, 64935, 64945, 64950, 32057, 64958, + 64970, 64974, 64986, 64997, 65004, 65010, 65017, 65029, 65036, 65042, + 17439, 65046, 65052, 65058, 65063, 65068, 5084, 65073, 65079, 65087, + 65096, 65100, 65106, 64782, 24971, 65111, 65113, 65118, 65123, 65128, + 65133, 65138, 65143, 65148, 65153, 65158, 65163, 65168, 65173, 65178, + 65183, 65189, 65194, 65199, 65204, 65209, 65214, 65219, 65224, 65229, + 65235, 65241, 65247, 65252, 65257, 65269, 65274, 1852, 67, 65279, 65284, + 26772, 26777, 26782, 26788, 26793, 65288, 26798, 65310, 65312, 65316, + 65320, 65325, 65329, 26802, 65333, 26807, 65341, 65344, 26812, 18179, + 65353, 65357, 1415, 65362, 26823, 65365, 65370, 21354, 21364, 65375, + 65379, 65384, 65390, 65395, 65404, 65409, 65416, 65422, 65427, 65432, + 65437, 65445, 26828, 1110, 65452, 65458, 65463, 65468, 65473, 65479, + 65484, 65491, 65497, 65502, 65510, 65516, 13959, 65523, 29296, 65536, + 65541, 65547, 65560, 65564, 65573, 65580, 65586, 65594, 65603, 65610, + 65616, 26832, 65619, 65626, 65632, 65636, 65639, 65647, 65661, 65668, + 26837, 65674, 26842, 65681, 28422, 65691, 65696, 65700, 17717, 65705, + 65710, 26847, 54013, 65714, 65719, 65725, 65731, 65738, 65744, 65749, + 65754, 65763, 65775, 65790, 27067, 65796, 13117, 26851, 65800, 65807, + 26856, 65813, 65822, 65829, 65838, 65844, 65849, 65855, 26861, 65860, + 65869, 65878, 65885, 65891, 65897, 65905, 65909, 26866, 65912, 26872, + 26878, 65917, 65925, 65935, 26883, 65939, 65941, 65945, 65950, 65954, + 65958, 65964, 65969, 65973, 65978, 2915, 65982, 65989, 65993, 66002, + 66010, 66017, 66022, 66027, 66031, 66035, 66038, 66044, 66052, 66058, + 66062, 66067, 66074, 66080, 28799, 66085, 66088, 66093, 66097, 66102, + 66107, 66111, 66119, 21373, 21382, 66125, 66131, 66137, 66142, 66146, + 66149, 66159, 66164, 66170, 66176, 66184, 66189, 28438, 66193, 66201, + 66207, 66212, 66217, 50653, 28444, 66223, 66228, 66232, 66237, 66242, + 66247, 66251, 66256, 66261, 66267, 66272, 66277, 66283, 66289, 66294, + 66298, 66303, 66308, 66313, 66317, 66322, 66327, 66332, 66338, 66344, + 66350, 66355, 66359, 66364, 66369, 66373, 66378, 66383, 66388, 66392, + 26887, 66400, 66404, 66412, 18521, 66423, 66429, 66436, 66441, 66450, + 66455, 66459, 66464, 66472, 66480, 66487, 56422, 66493, 66501, 66508, + 66519, 66525, 26897, 66528, 66535, 32183, 66539, 66544, 66549, 6877, + 66553, 66561, 66568, 66575, 66581, 66445, 66595, 66601, 66605, 66608, + 66616, 66623, 66628, 66641, 66648, 66653, 66658, 66661, 66668, 66672, + 66682, 66692, 66701, 66712, 66717, 66721, 28813, 17641, 32629, 66729, + 66734, 66739, 66744, 66749, 66754, 66759, 66763, 66768, 66773, 66778, + 66783, 66788, 66793, 66797, 66802, 66807, 66811, 66815, 66819, 66823, + 66828, 66833, 66837, 66842, 66846, 66850, 66855, 66860, 66865, 66870, + 66874, 66879, 66884, 66888, 66893, 66898, 66903, 66908, 66913, 66918, + 66923, 66928, 66933, 66938, 66943, 66948, 66953, 66958, 66963, 66968, + 66973, 66978, 66983, 66988, 66992, 66997, 67002, 67007, 67012, 67017, + 67022, 67027, 67032, 67037, 67042, 67047, 67051, 67056, 67060, 67065, + 67070, 67075, 67080, 67085, 67090, 67095, 67100, 67105, 67109, 67113, + 67118, 67123, 67127, 67132, 67137, 67141, 67146, 67151, 67156, 67161, + 67165, 67170, 67175, 67179, 67184, 67188, 67192, 67196, 67200, 67205, + 67209, 67213, 67217, 67221, 67225, 67229, 67233, 67237, 67241, 67246, + 67251, 67256, 67261, 67266, 67271, 67276, 67281, 67286, 67291, 67295, + 67299, 67303, 67307, 67311, 67315, 67320, 67324, 67329, 67333, 67338, + 67343, 67347, 67351, 67356, 67360, 67364, 67368, 67372, 67376, 67380, + 67384, 67388, 67392, 67396, 67400, 67404, 67408, 67412, 67417, 67422, + 67426, 67430, 67434, 67438, 67442, 67446, 67451, 67455, 67459, 67463, + 67467, 67471, 67475, 67480, 67484, 67489, 67493, 67497, 67501, 67505, + 67509, 67513, 67517, 67521, 67525, 67529, 67533, 67538, 67542, 67546, + 67550, 67554, 67558, 67562, 67566, 67570, 67574, 67578, 67582, 67587, + 67591, 67595, 67600, 67605, 67609, 67613, 67617, 67621, 67625, 67629, + 67633, 67637, 67642, 67646, 67651, 67655, 67660, 67664, 67669, 67673, + 67679, 67684, 67688, 67693, 67697, 67702, 67706, 67711, 67715, 67720, + 1503, 67724, 1741, 1746, 67728, 67732, 2711, 67736, 1384, 67741, 1350, + 67745, 67749, 67756, 67763, 67777, 2727, 5159, 67786, 67794, 67801, + 67808, 67821, 67834, 67845, 67850, 67857, 67869, 3703, 9162, 67873, + 67878, 67887, 67897, 67902, 67906, 67911, 67918, 67924, 67936, 1355, + 11688, 67946, 67952, 67966, 67978, 67987, 67996, 68005, 68013, 68024, + 68032, 3742, 68042, 68051, 68057, 68064, 28919, 68069, 2755, 10316, + 68073, 68080, 6828, 68089, 2760, 26495, 68095, 68102, 68108, 68115, + 68121, 68128, 68138, 68147, 68158, 68165, 68171, 68181, 68189, 68195, + 68210, 68216, 68221, 68228, 68231, 68237, 68244, 68250, 68258, 68267, + 68275, 68281, 68290, 33842, 68304, 68309, 11709, 68315, 68328, 68337, + 68345, 68352, 68356, 68360, 68363, 68370, 68377, 68385, 68393, 68402, + 68410, 11645, 68418, 68423, 68427, 68439, 68446, 68455, 793, 68465, 2776, + 68474, 68478, 68484, 68497, 68509, 68519, 68528, 68540, 68548, 68557, + 68568, 68579, 68589, 68599, 68608, 68616, 8811, 68623, 68627, 68632, + 68637, 68643, 1360, 9217, 68650, 68661, 68670, 68678, 68687, 68695, + 68711, 68722, 68738, 68748, 68769, 68782, 68795, 68800, 68806, 22084, + 68812, 68815, 68822, 68832, 6139, 68839, 68844, 68849, 68857, 7517, 7526, + 68865, 68876, 2784, 2789, 68882, 8419, 68888, 68895, 68902, 68915, 2193, + 50, 68920, 68925, 68935, 68941, 68945, 68950, 68954, 2812, 68966, 68974, + 68985, 68996, 69005, 69010, 69016, 69021, 69031, 69041, 69046, 69052, + 69057, 69066, 17674, 69070, 3804, 12, 69075, 69082, 766, 69088, 69093, + 52873, 69098, 69103, 69109, 69117, 69122, 69129, 69135, 30869, 33740, + 69141, 2816, 32, 69151, 69164, 69172, 69177, 69183, 2838, 25639, 69188, + 69196, 69203, 69208, 50895, 53694, 69217, 1686, 1795, 69222, 69227, + 69234, 1799, 237, 69241, 69247, 69252, 69259, 1803, 69264, 69270, 69275, + 69287, 4250, 69297, 1810, 69303, 69308, 69315, 69322, 69337, 69344, + 69352, 69356, 69360, 69372, 69377, 69381, 23272, 3830, 69385, 69396, + 69400, 69404, 69410, 69414, 69423, 69427, 69438, 69442, 2238, 69446, + 69448, 2935, 7189, 69456, 69461, 69465, 69474, 69480, 2905, 13622, 69484, + 69497, 69515, 69520, 69528, 69536, 69546, 69558, 69571, 69578, 69594, + 69601, 69607, 958, 69614, 69621, 69631, 69640, 69652, 34706, 69660, 2919, + 9391, 69663, 69671, 69675, 2923, 69679, 17523, 52946, 3514, 69683, 2929, + 69687, 69697, 69703, 69709, 69715, 69721, 69727, 69733, 69739, 69745, + 69751, 69757, 69763, 69769, 69775, 69781, 69787, 69793, 69799, 69805, + 69811, 69817, 69823, 69829, 69835, 69841, 69847, 69854, 69861, 69867, + 69873, 69879, 69885, 69891, 69897, 1365, 12692, 9411, 69903, 69908, + 69913, 69918, 69923, 69928, 69933, 69938, 69943, 69948, 69953, 69958, + 69963, 69968, 69973, 69978, 69983, 69988, 69993, 69998, 70003, 70008, + 70013, 70018, 70023, 70028, 70034, 70039, 70044, 70050, 70055, 70061, + 70066, 70071, 70077, 70082, 70087, 70092, 70097, 70102, 70107, 70112, + 70117, 69698, 69704, 69710, 69716, 69722, 69728, 69734, 69740, 69746, + 69752, 69758, 69764, 69770, 69776, 69782, 70123, 69788, 69794, 69800, + 70129, 69806, 69812, 69818, 69824, 69830, 69836, 69842, 69862, 70135, + 70141, 69868, 70147, 69874, 69880, 69886, 69892, 69898, 2950, 2955, + 70153, 70158, 70161, 70167, 70173, 70180, 70185, 70190, 2243, }; /* code->name phrasebook */ #define phrasebook_shift 7 -#define phrasebook_short 222 +#define phrasebook_short 216 static unsigned char phrasebook[] = { - 0, 228, 145, 247, 149, 76, 232, 57, 76, 65, 53, 249, 150, 53, 233, 123, - 53, 254, 193, 254, 144, 42, 233, 180, 41, 233, 180, 254, 69, 79, 53, 251, - 54, 244, 94, 246, 218, 228, 38, 228, 161, 21, 223, 89, 21, 118, 21, 113, - 21, 166, 21, 158, 21, 173, 21, 183, 21, 194, 21, 187, 21, 192, 251, 61, - 229, 186, 237, 213, 53, 247, 204, 53, 245, 231, 53, 232, 69, 76, 251, 53, - 254, 62, 7, 6, 1, 57, 7, 6, 1, 254, 27, 7, 6, 1, 252, 44, 7, 6, 1, 222, - 222, 7, 6, 1, 72, 7, 6, 1, 247, 130, 7, 6, 1, 214, 7, 6, 1, 212, 7, 6, 1, - 74, 7, 6, 1, 239, 182, 7, 6, 1, 239, 76, 7, 6, 1, 149, 7, 6, 1, 185, 7, - 6, 1, 199, 7, 6, 1, 73, 7, 6, 1, 233, 244, 7, 6, 1, 232, 139, 7, 6, 1, - 146, 7, 6, 1, 193, 7, 6, 1, 227, 109, 7, 6, 1, 66, 7, 6, 1, 196, 7, 6, 1, - 224, 174, 7, 6, 1, 224, 73, 7, 6, 1, 224, 25, 7, 6, 1, 223, 119, 42, 37, - 104, 231, 193, 228, 161, 41, 37, 104, 251, 102, 255, 41, 184, 237, 170, - 245, 237, 255, 41, 7, 3, 1, 57, 7, 3, 1, 254, 27, 7, 3, 1, 252, 44, 7, 3, - 1, 222, 222, 7, 3, 1, 72, 7, 3, 1, 247, 130, 7, 3, 1, 214, 7, 3, 1, 212, - 7, 3, 1, 74, 7, 3, 1, 239, 182, 7, 3, 1, 239, 76, 7, 3, 1, 149, 7, 3, 1, - 185, 7, 3, 1, 199, 7, 3, 1, 73, 7, 3, 1, 233, 244, 7, 3, 1, 232, 139, 7, - 3, 1, 146, 7, 3, 1, 193, 7, 3, 1, 227, 109, 7, 3, 1, 66, 7, 3, 1, 196, 7, - 3, 1, 224, 174, 7, 3, 1, 224, 73, 7, 3, 1, 224, 25, 7, 3, 1, 223, 119, - 42, 250, 223, 104, 61, 237, 170, 41, 250, 223, 104, 205, 235, 5, 228, - 145, 239, 223, 247, 149, 76, 251, 220, 53, 232, 234, 53, 250, 222, 53, - 223, 222, 53, 252, 99, 125, 230, 206, 53, 219, 251, 13, 53, 247, 81, 234, - 29, 240, 7, 237, 235, 47, 254, 182, 232, 57, 76, 190, 53, 228, 165, 244, - 95, 231, 227, 53, 237, 63, 250, 62, 53, 233, 9, 53, 227, 219, 113, 227, - 219, 166, 255, 33, 255, 41, 236, 156, 53, 233, 38, 53, 236, 154, 249, - 140, 251, 226, 227, 219, 118, 237, 8, 234, 29, 240, 7, 231, 151, 47, 254, - 182, 232, 57, 76, 224, 189, 246, 235, 168, 232, 76, 224, 189, 246, 235, - 168, 245, 151, 224, 189, 246, 235, 152, 232, 74, 239, 223, 232, 69, 76, - 7, 6, 1, 102, 2, 245, 236, 7, 6, 1, 102, 2, 155, 7, 6, 1, 102, 2, 251, - 101, 7, 6, 1, 102, 2, 205, 7, 6, 1, 102, 2, 219, 7, 6, 1, 102, 2, 231, - 140, 46, 7, 6, 1, 255, 19, 7, 6, 1, 252, 45, 2, 251, 226, 7, 6, 1, 161, - 2, 245, 236, 7, 6, 1, 161, 2, 155, 7, 6, 1, 161, 2, 251, 101, 7, 6, 1, - 161, 2, 219, 7, 6, 1, 244, 81, 2, 245, 236, 7, 6, 1, 244, 81, 2, 155, 7, - 6, 1, 244, 81, 2, 251, 101, 7, 6, 1, 244, 81, 2, 219, 7, 6, 1, 247, 168, - 7, 6, 1, 236, 5, 2, 205, 7, 6, 1, 130, 2, 245, 236, 7, 6, 1, 130, 2, 155, - 7, 6, 1, 130, 2, 251, 101, 7, 6, 1, 130, 2, 205, 7, 6, 1, 130, 2, 219, - 236, 52, 53, 7, 6, 1, 130, 2, 82, 7, 6, 1, 97, 2, 245, 236, 7, 6, 1, 97, - 2, 155, 7, 6, 1, 97, 2, 251, 101, 7, 6, 1, 97, 2, 219, 7, 6, 1, 224, 26, - 2, 155, 7, 6, 1, 226, 196, 7, 3, 1, 229, 124, 193, 7, 3, 1, 102, 2, 245, - 236, 7, 3, 1, 102, 2, 155, 7, 3, 1, 102, 2, 251, 101, 7, 3, 1, 102, 2, - 205, 7, 3, 1, 102, 2, 219, 7, 3, 1, 102, 2, 231, 140, 46, 7, 3, 1, 255, - 19, 7, 3, 1, 252, 45, 2, 251, 226, 7, 3, 1, 161, 2, 245, 236, 7, 3, 1, - 161, 2, 155, 7, 3, 1, 161, 2, 251, 101, 7, 3, 1, 161, 2, 219, 7, 3, 1, - 244, 81, 2, 245, 236, 7, 3, 1, 244, 81, 2, 155, 7, 3, 1, 244, 81, 2, 251, - 101, 7, 3, 1, 244, 81, 2, 219, 7, 3, 1, 247, 168, 7, 3, 1, 236, 5, 2, - 205, 7, 3, 1, 130, 2, 245, 236, 7, 3, 1, 130, 2, 155, 7, 3, 1, 130, 2, - 251, 101, 7, 3, 1, 130, 2, 205, 7, 3, 1, 130, 2, 219, 249, 181, 53, 7, 3, - 1, 130, 2, 82, 7, 3, 1, 97, 2, 245, 236, 7, 3, 1, 97, 2, 155, 7, 3, 1, - 97, 2, 251, 101, 7, 3, 1, 97, 2, 219, 7, 3, 1, 224, 26, 2, 155, 7, 3, 1, - 226, 196, 7, 3, 1, 224, 26, 2, 219, 7, 6, 1, 102, 2, 237, 63, 7, 3, 1, - 102, 2, 237, 63, 7, 6, 1, 102, 2, 252, 106, 7, 3, 1, 102, 2, 252, 106, 7, - 6, 1, 102, 2, 234, 84, 7, 3, 1, 102, 2, 234, 84, 7, 6, 1, 252, 45, 2, - 155, 7, 3, 1, 252, 45, 2, 155, 7, 6, 1, 252, 45, 2, 251, 101, 7, 3, 1, - 252, 45, 2, 251, 101, 7, 6, 1, 252, 45, 2, 56, 46, 7, 3, 1, 252, 45, 2, - 56, 46, 7, 6, 1, 252, 45, 2, 252, 5, 7, 3, 1, 252, 45, 2, 252, 5, 7, 6, - 1, 250, 192, 2, 252, 5, 7, 3, 1, 250, 192, 2, 252, 5, 7, 6, 1, 250, 192, - 2, 82, 7, 3, 1, 250, 192, 2, 82, 7, 6, 1, 161, 2, 237, 63, 7, 3, 1, 161, - 2, 237, 63, 7, 6, 1, 161, 2, 252, 106, 7, 3, 1, 161, 2, 252, 106, 7, 6, - 1, 161, 2, 56, 46, 7, 3, 1, 161, 2, 56, 46, 7, 6, 1, 161, 2, 234, 84, 7, - 3, 1, 161, 2, 234, 84, 7, 6, 1, 161, 2, 252, 5, 7, 3, 1, 161, 2, 252, 5, - 7, 6, 1, 246, 196, 2, 251, 101, 7, 3, 1, 246, 196, 2, 251, 101, 7, 6, 1, - 246, 196, 2, 252, 106, 7, 3, 1, 246, 196, 2, 252, 106, 7, 6, 1, 246, 196, - 2, 56, 46, 7, 3, 1, 246, 196, 2, 56, 46, 7, 6, 1, 246, 196, 2, 251, 226, - 7, 3, 1, 246, 196, 2, 251, 226, 7, 6, 1, 245, 172, 2, 251, 101, 7, 3, 1, - 245, 172, 2, 251, 101, 7, 6, 1, 245, 172, 2, 82, 7, 3, 1, 245, 172, 2, - 82, 7, 6, 1, 244, 81, 2, 205, 7, 3, 1, 244, 81, 2, 205, 7, 6, 1, 244, 81, - 2, 237, 63, 7, 3, 1, 244, 81, 2, 237, 63, 7, 6, 1, 244, 81, 2, 252, 106, - 7, 3, 1, 244, 81, 2, 252, 106, 7, 6, 1, 244, 81, 2, 234, 84, 7, 3, 1, - 244, 81, 2, 234, 84, 7, 6, 1, 244, 81, 2, 56, 46, 7, 3, 1, 249, 139, 74, - 7, 6, 20, 240, 45, 7, 3, 20, 240, 45, 7, 6, 1, 239, 183, 2, 251, 101, 7, - 3, 1, 239, 183, 2, 251, 101, 7, 6, 1, 239, 77, 2, 251, 226, 7, 3, 1, 239, - 77, 2, 251, 226, 7, 3, 1, 238, 117, 7, 6, 1, 238, 47, 2, 155, 7, 3, 1, - 238, 47, 2, 155, 7, 6, 1, 238, 47, 2, 251, 226, 7, 3, 1, 238, 47, 2, 251, - 226, 7, 6, 1, 238, 47, 2, 252, 5, 7, 3, 1, 238, 47, 2, 252, 5, 7, 6, 1, - 238, 47, 2, 236, 154, 249, 140, 7, 3, 1, 238, 47, 2, 236, 154, 249, 140, - 7, 6, 1, 238, 47, 2, 82, 7, 3, 1, 238, 47, 2, 82, 7, 6, 1, 236, 5, 2, - 155, 7, 3, 1, 236, 5, 2, 155, 7, 6, 1, 236, 5, 2, 251, 226, 7, 3, 1, 236, - 5, 2, 251, 226, 7, 6, 1, 236, 5, 2, 252, 5, 7, 3, 1, 236, 5, 2, 252, 5, - 7, 3, 1, 236, 5, 232, 215, 252, 55, 254, 144, 7, 6, 1, 247, 228, 7, 3, 1, - 247, 228, 7, 6, 1, 130, 2, 237, 63, 7, 3, 1, 130, 2, 237, 63, 7, 6, 1, - 130, 2, 252, 106, 7, 3, 1, 130, 2, 252, 106, 7, 6, 1, 130, 2, 47, 155, 7, - 3, 1, 130, 2, 47, 155, 7, 6, 20, 234, 88, 7, 3, 20, 234, 88, 7, 6, 1, - 232, 27, 2, 155, 7, 3, 1, 232, 27, 2, 155, 7, 6, 1, 232, 27, 2, 251, 226, - 7, 3, 1, 232, 27, 2, 251, 226, 7, 6, 1, 232, 27, 2, 252, 5, 7, 3, 1, 232, - 27, 2, 252, 5, 7, 6, 1, 231, 35, 2, 155, 7, 3, 1, 231, 35, 2, 155, 7, 6, - 1, 231, 35, 2, 251, 101, 7, 3, 1, 231, 35, 2, 251, 101, 7, 6, 1, 231, 35, - 2, 251, 226, 7, 3, 1, 231, 35, 2, 251, 226, 7, 6, 1, 231, 35, 2, 252, 5, - 7, 3, 1, 231, 35, 2, 252, 5, 7, 6, 1, 227, 110, 2, 251, 226, 7, 3, 1, - 227, 110, 2, 251, 226, 7, 6, 1, 227, 110, 2, 252, 5, 7, 3, 1, 227, 110, - 2, 252, 5, 7, 6, 1, 227, 110, 2, 82, 7, 3, 1, 227, 110, 2, 82, 7, 6, 1, - 97, 2, 205, 7, 3, 1, 97, 2, 205, 7, 6, 1, 97, 2, 237, 63, 7, 3, 1, 97, 2, - 237, 63, 7, 6, 1, 97, 2, 252, 106, 7, 3, 1, 97, 2, 252, 106, 7, 6, 1, 97, - 2, 231, 140, 46, 7, 3, 1, 97, 2, 231, 140, 46, 7, 6, 1, 97, 2, 47, 155, - 7, 3, 1, 97, 2, 47, 155, 7, 6, 1, 97, 2, 234, 84, 7, 3, 1, 97, 2, 234, - 84, 7, 6, 1, 224, 175, 2, 251, 101, 7, 3, 1, 224, 175, 2, 251, 101, 7, 6, - 1, 224, 26, 2, 251, 101, 7, 3, 1, 224, 26, 2, 251, 101, 7, 6, 1, 224, 26, - 2, 219, 7, 6, 1, 223, 120, 2, 155, 7, 3, 1, 223, 120, 2, 155, 7, 6, 1, - 223, 120, 2, 56, 46, 7, 3, 1, 223, 120, 2, 56, 46, 7, 6, 1, 223, 120, 2, - 252, 5, 7, 3, 1, 223, 120, 2, 252, 5, 7, 3, 1, 182, 193, 7, 3, 1, 45, 2, - 82, 7, 6, 1, 45, 2, 88, 7, 6, 1, 45, 2, 226, 103, 7, 3, 1, 45, 2, 226, - 103, 7, 6, 1, 206, 183, 7, 3, 1, 206, 183, 7, 6, 1, 234, 44, 73, 7, 6, 1, - 252, 45, 2, 88, 7, 3, 1, 252, 45, 2, 88, 7, 6, 1, 255, 10, 222, 222, 7, - 6, 1, 250, 192, 2, 88, 7, 6, 1, 250, 192, 2, 226, 103, 7, 3, 1, 250, 192, - 2, 226, 103, 7, 3, 1, 209, 250, 47, 7, 6, 1, 200, 72, 7, 6, 1, 230, 222, - 7, 6, 1, 234, 44, 72, 7, 6, 1, 247, 131, 2, 88, 7, 3, 1, 247, 131, 2, 88, - 7, 6, 1, 246, 196, 2, 88, 7, 6, 1, 246, 169, 7, 3, 1, 244, 128, 7, 6, 1, - 239, 215, 7, 6, 1, 244, 81, 2, 82, 7, 6, 1, 239, 77, 2, 88, 7, 3, 1, 239, - 77, 2, 88, 7, 3, 1, 238, 47, 2, 125, 7, 3, 1, 238, 18, 2, 82, 7, 6, 1, - 209, 185, 7, 6, 1, 236, 5, 2, 42, 88, 7, 3, 1, 236, 5, 2, 182, 41, 237, - 229, 7, 6, 1, 130, 2, 236, 154, 205, 7, 6, 1, 130, 2, 244, 160, 7, 3, 1, - 130, 2, 244, 160, 7, 6, 1, 234, 80, 7, 3, 1, 234, 80, 7, 6, 1, 233, 245, - 2, 88, 7, 3, 1, 233, 245, 2, 88, 7, 1, 223, 160, 7, 6, 1, 206, 113, 7, 3, - 1, 206, 113, 7, 6, 1, 247, 183, 7, 1, 200, 247, 184, 237, 124, 7, 3, 1, - 227, 110, 2, 233, 229, 88, 7, 6, 1, 227, 110, 2, 88, 7, 3, 1, 227, 110, - 2, 88, 7, 6, 1, 227, 110, 2, 231, 196, 88, 7, 6, 1, 97, 2, 244, 160, 7, - 3, 1, 97, 2, 244, 160, 7, 6, 1, 225, 110, 7, 6, 1, 225, 65, 2, 88, 7, 6, - 1, 224, 26, 2, 88, 7, 3, 1, 224, 26, 2, 88, 7, 6, 1, 223, 120, 2, 82, 7, - 3, 1, 223, 120, 2, 82, 7, 6, 1, 247, 132, 7, 6, 1, 247, 133, 231, 192, 7, - 3, 1, 247, 133, 231, 192, 7, 3, 1, 247, 133, 2, 227, 89, 7, 1, 135, 2, - 82, 7, 6, 1, 206, 173, 7, 3, 1, 206, 173, 7, 1, 239, 223, 246, 16, 228, - 39, 2, 82, 7, 1, 224, 75, 7, 1, 250, 41, 251, 89, 7, 1, 238, 2, 251, 89, - 7, 1, 254, 200, 251, 89, 7, 1, 231, 196, 251, 89, 7, 6, 1, 248, 72, 2, - 252, 5, 7, 6, 1, 250, 192, 2, 3, 1, 223, 120, 2, 252, 5, 7, 3, 1, 248, - 72, 2, 252, 5, 7, 6, 1, 237, 152, 7, 6, 1, 238, 47, 2, 3, 1, 239, 182, 7, - 3, 1, 237, 152, 7, 6, 1, 235, 50, 7, 6, 1, 236, 5, 2, 3, 1, 239, 182, 7, - 3, 1, 235, 50, 7, 6, 1, 102, 2, 252, 5, 7, 3, 1, 102, 2, 252, 5, 7, 6, 1, - 244, 81, 2, 252, 5, 7, 3, 1, 244, 81, 2, 252, 5, 7, 6, 1, 130, 2, 252, 5, - 7, 3, 1, 130, 2, 252, 5, 7, 6, 1, 97, 2, 252, 5, 7, 3, 1, 97, 2, 252, 5, - 7, 6, 1, 97, 2, 250, 3, 22, 237, 63, 7, 3, 1, 97, 2, 250, 3, 22, 237, 63, - 7, 6, 1, 97, 2, 250, 3, 22, 155, 7, 3, 1, 97, 2, 250, 3, 22, 155, 7, 6, - 1, 97, 2, 250, 3, 22, 252, 5, 7, 3, 1, 97, 2, 250, 3, 22, 252, 5, 7, 6, - 1, 97, 2, 250, 3, 22, 245, 236, 7, 3, 1, 97, 2, 250, 3, 22, 245, 236, 7, - 3, 1, 209, 72, 7, 6, 1, 102, 2, 250, 3, 22, 237, 63, 7, 3, 1, 102, 2, - 250, 3, 22, 237, 63, 7, 6, 1, 102, 2, 56, 64, 22, 237, 63, 7, 3, 1, 102, - 2, 56, 64, 22, 237, 63, 7, 6, 1, 255, 20, 2, 237, 63, 7, 3, 1, 255, 20, - 2, 237, 63, 7, 6, 1, 246, 196, 2, 82, 7, 3, 1, 246, 196, 2, 82, 7, 6, 1, - 246, 196, 2, 252, 5, 7, 3, 1, 246, 196, 2, 252, 5, 7, 6, 1, 239, 77, 2, - 252, 5, 7, 3, 1, 239, 77, 2, 252, 5, 7, 6, 1, 130, 2, 234, 84, 7, 3, 1, - 130, 2, 234, 84, 7, 6, 1, 130, 2, 234, 85, 22, 237, 63, 7, 3, 1, 130, 2, - 234, 85, 22, 237, 63, 7, 6, 1, 247, 133, 2, 252, 5, 7, 3, 1, 247, 133, 2, - 252, 5, 7, 3, 1, 239, 183, 2, 252, 5, 7, 6, 1, 248, 71, 7, 6, 1, 250, - 192, 2, 3, 1, 223, 119, 7, 3, 1, 248, 71, 7, 6, 1, 246, 196, 2, 155, 7, - 3, 1, 246, 196, 2, 155, 7, 6, 1, 244, 126, 7, 6, 1, 224, 75, 7, 6, 1, - 236, 5, 2, 245, 236, 7, 3, 1, 236, 5, 2, 245, 236, 7, 6, 1, 102, 2, 231, - 140, 64, 22, 155, 7, 3, 1, 102, 2, 231, 140, 64, 22, 155, 7, 6, 1, 255, - 20, 2, 155, 7, 3, 1, 255, 20, 2, 155, 7, 6, 1, 130, 2, 195, 22, 155, 7, - 3, 1, 130, 2, 195, 22, 155, 7, 6, 1, 102, 2, 47, 245, 236, 7, 3, 1, 102, - 2, 47, 245, 236, 7, 6, 1, 102, 2, 239, 223, 252, 106, 7, 3, 1, 102, 2, - 239, 223, 252, 106, 7, 6, 1, 161, 2, 47, 245, 236, 7, 3, 1, 161, 2, 47, - 245, 236, 7, 6, 1, 161, 2, 239, 223, 252, 106, 7, 3, 1, 161, 2, 239, 223, - 252, 106, 7, 6, 1, 244, 81, 2, 47, 245, 236, 7, 3, 1, 244, 81, 2, 47, - 245, 236, 7, 6, 1, 244, 81, 2, 239, 223, 252, 106, 7, 3, 1, 244, 81, 2, - 239, 223, 252, 106, 7, 6, 1, 130, 2, 47, 245, 236, 7, 3, 1, 130, 2, 47, - 245, 236, 7, 6, 1, 130, 2, 239, 223, 252, 106, 7, 3, 1, 130, 2, 239, 223, - 252, 106, 7, 6, 1, 232, 27, 2, 47, 245, 236, 7, 3, 1, 232, 27, 2, 47, - 245, 236, 7, 6, 1, 232, 27, 2, 239, 223, 252, 106, 7, 3, 1, 232, 27, 2, - 239, 223, 252, 106, 7, 6, 1, 97, 2, 47, 245, 236, 7, 3, 1, 97, 2, 47, - 245, 236, 7, 6, 1, 97, 2, 239, 223, 252, 106, 7, 3, 1, 97, 2, 239, 223, - 252, 106, 7, 6, 1, 231, 35, 2, 251, 55, 51, 7, 3, 1, 231, 35, 2, 251, 55, - 51, 7, 6, 1, 227, 110, 2, 251, 55, 51, 7, 3, 1, 227, 110, 2, 251, 55, 51, - 7, 6, 1, 223, 174, 7, 3, 1, 223, 174, 7, 6, 1, 245, 172, 2, 252, 5, 7, 3, - 1, 245, 172, 2, 252, 5, 7, 6, 1, 236, 5, 2, 182, 41, 237, 229, 7, 3, 1, - 250, 192, 2, 250, 224, 7, 6, 1, 234, 13, 7, 3, 1, 234, 13, 7, 6, 1, 223, - 120, 2, 88, 7, 3, 1, 223, 120, 2, 88, 7, 6, 1, 102, 2, 56, 46, 7, 3, 1, - 102, 2, 56, 46, 7, 6, 1, 161, 2, 251, 226, 7, 3, 1, 161, 2, 251, 226, 7, - 6, 1, 130, 2, 250, 3, 22, 237, 63, 7, 3, 1, 130, 2, 250, 3, 22, 237, 63, - 7, 6, 1, 130, 2, 226, 159, 22, 237, 63, 7, 3, 1, 130, 2, 226, 159, 22, - 237, 63, 7, 6, 1, 130, 2, 56, 46, 7, 3, 1, 130, 2, 56, 46, 7, 6, 1, 130, - 2, 56, 64, 22, 237, 63, 7, 3, 1, 130, 2, 56, 64, 22, 237, 63, 7, 6, 1, - 224, 26, 2, 237, 63, 7, 3, 1, 224, 26, 2, 237, 63, 7, 3, 1, 238, 47, 2, - 250, 224, 7, 3, 1, 236, 5, 2, 250, 224, 7, 3, 1, 227, 110, 2, 250, 224, - 7, 3, 1, 249, 139, 239, 182, 7, 3, 1, 250, 119, 249, 223, 7, 3, 1, 232, - 85, 249, 223, 7, 6, 1, 102, 2, 82, 7, 6, 1, 252, 45, 2, 82, 7, 3, 1, 252, - 45, 2, 82, 7, 6, 1, 238, 47, 2, 125, 7, 6, 1, 227, 110, 2, 250, 1, 82, 7, - 3, 1, 231, 35, 2, 227, 197, 227, 89, 7, 3, 1, 223, 120, 2, 227, 197, 227, - 89, 7, 6, 1, 246, 16, 228, 38, 7, 3, 1, 246, 16, 228, 38, 7, 6, 1, 45, 2, - 82, 7, 6, 1, 97, 125, 7, 6, 1, 209, 196, 7, 6, 1, 161, 2, 82, 7, 3, 1, - 161, 2, 82, 7, 6, 1, 239, 183, 2, 82, 7, 3, 1, 239, 183, 2, 82, 7, 6, 1, - 3, 232, 140, 2, 244, 217, 227, 89, 7, 3, 1, 232, 140, 2, 244, 217, 227, - 89, 7, 6, 1, 232, 27, 2, 82, 7, 3, 1, 232, 27, 2, 82, 7, 6, 1, 224, 26, - 2, 82, 7, 3, 1, 224, 26, 2, 82, 7, 3, 1, 209, 57, 7, 3, 1, 254, 205, 7, - 3, 1, 209, 254, 205, 7, 3, 1, 45, 2, 88, 7, 3, 1, 234, 44, 73, 7, 3, 1, - 252, 45, 2, 250, 224, 7, 3, 1, 250, 192, 2, 227, 89, 7, 3, 1, 250, 192, - 2, 88, 7, 3, 1, 200, 72, 7, 3, 1, 230, 222, 7, 3, 1, 230, 223, 2, 88, 7, - 3, 1, 234, 44, 72, 7, 3, 1, 200, 234, 44, 72, 7, 3, 1, 200, 234, 44, 161, - 2, 88, 7, 3, 1, 251, 82, 200, 234, 44, 72, 7, 3, 1, 249, 139, 239, 183, - 2, 82, 7, 3, 1, 246, 196, 2, 88, 7, 3, 1, 95, 214, 7, 1, 3, 6, 214, 7, 3, - 1, 246, 169, 7, 3, 1, 232, 4, 244, 160, 7, 3, 1, 209, 212, 7, 3, 1, 245, - 172, 2, 88, 7, 3, 1, 245, 99, 2, 88, 7, 3, 1, 244, 81, 2, 82, 7, 3, 1, - 239, 215, 7, 1, 3, 6, 74, 7, 3, 1, 238, 47, 2, 236, 154, 205, 7, 3, 1, - 238, 47, 2, 252, 212, 7, 3, 1, 238, 47, 2, 231, 196, 88, 7, 3, 1, 237, - 207, 7, 3, 1, 209, 185, 7, 3, 1, 209, 237, 69, 2, 182, 237, 229, 7, 3, 1, - 237, 69, 2, 88, 7, 3, 1, 236, 5, 2, 42, 88, 7, 3, 1, 236, 5, 2, 231, 196, - 88, 7, 1, 3, 6, 199, 7, 3, 1, 253, 31, 73, 7, 1, 3, 6, 234, 88, 7, 3, 1, - 251, 82, 234, 66, 7, 3, 1, 233, 87, 7, 3, 1, 209, 146, 7, 3, 1, 209, 232, - 27, 2, 182, 237, 229, 7, 3, 1, 209, 232, 27, 2, 88, 7, 3, 1, 232, 27, 2, - 182, 237, 229, 7, 3, 1, 232, 27, 2, 227, 89, 7, 3, 1, 232, 27, 2, 247, - 40, 7, 3, 1, 200, 232, 27, 2, 247, 40, 7, 1, 3, 6, 146, 7, 1, 3, 6, 239, - 223, 146, 7, 3, 1, 231, 35, 2, 88, 7, 3, 1, 247, 183, 7, 3, 1, 249, 139, - 239, 183, 2, 195, 22, 88, 7, 3, 1, 228, 116, 200, 247, 183, 7, 3, 1, 247, - 184, 2, 250, 224, 7, 3, 1, 209, 227, 109, 7, 3, 1, 227, 110, 2, 231, 196, - 88, 7, 3, 1, 97, 125, 7, 3, 1, 225, 110, 7, 3, 1, 225, 65, 2, 88, 7, 3, - 1, 209, 196, 7, 3, 1, 209, 224, 174, 7, 3, 1, 209, 224, 25, 7, 1, 3, 6, - 224, 25, 7, 3, 1, 223, 120, 2, 231, 196, 88, 7, 3, 1, 223, 120, 2, 250, - 224, 7, 3, 1, 247, 132, 7, 3, 1, 247, 133, 2, 250, 224, 7, 1, 246, 16, - 228, 38, 7, 1, 233, 91, 224, 204, 246, 227, 7, 1, 239, 223, 246, 16, 228, - 38, 7, 1, 228, 26, 252, 44, 7, 1, 252, 171, 251, 89, 7, 1, 3, 6, 254, 27, - 7, 3, 1, 251, 82, 234, 44, 72, 7, 1, 3, 6, 246, 196, 2, 88, 7, 1, 3, 6, - 212, 7, 3, 1, 239, 183, 2, 250, 240, 7, 3, 1, 209, 239, 76, 7, 1, 3, 6, - 149, 7, 3, 1, 232, 140, 2, 88, 7, 1, 246, 16, 228, 39, 2, 82, 7, 1, 200, - 246, 16, 228, 39, 2, 82, 7, 3, 1, 248, 72, 249, 223, 7, 3, 1, 250, 23, - 249, 223, 7, 3, 1, 248, 72, 249, 224, 2, 250, 224, 7, 3, 1, 226, 46, 249, - 223, 7, 3, 1, 227, 15, 249, 223, 7, 3, 1, 227, 51, 249, 224, 2, 250, 224, - 7, 3, 1, 247, 79, 249, 223, 7, 3, 1, 237, 112, 249, 223, 7, 3, 1, 237, - 70, 249, 223, 7, 1, 252, 171, 233, 122, 7, 1, 252, 178, 233, 122, 7, 3, - 1, 209, 245, 172, 2, 247, 40, 7, 3, 1, 209, 245, 172, 2, 247, 41, 22, - 227, 89, 52, 1, 3, 212, 52, 1, 3, 245, 172, 2, 88, 52, 1, 3, 239, 182, - 52, 1, 3, 146, 52, 1, 3, 209, 146, 52, 1, 3, 209, 232, 27, 2, 88, 52, 1, - 3, 6, 239, 223, 146, 52, 1, 3, 224, 174, 52, 1, 3, 224, 25, 52, 1, 232, - 205, 52, 1, 47, 232, 205, 52, 1, 209, 251, 54, 52, 1, 254, 144, 52, 1, - 200, 251, 54, 52, 1, 41, 132, 231, 139, 52, 1, 42, 132, 231, 139, 52, 1, - 246, 16, 228, 38, 52, 1, 200, 246, 16, 228, 38, 52, 1, 42, 254, 93, 52, - 1, 41, 254, 93, 52, 1, 99, 254, 93, 52, 1, 103, 254, 93, 52, 1, 251, 102, - 255, 41, 252, 5, 52, 1, 61, 237, 170, 52, 1, 237, 63, 52, 1, 255, 33, - 255, 41, 52, 1, 245, 237, 255, 41, 52, 1, 184, 61, 237, 170, 52, 1, 184, - 237, 63, 52, 1, 184, 245, 237, 255, 41, 52, 1, 184, 255, 33, 255, 41, 52, - 1, 226, 75, 251, 61, 52, 1, 132, 226, 75, 251, 61, 52, 1, 251, 217, 41, - 132, 231, 139, 52, 1, 251, 217, 42, 132, 231, 139, 52, 1, 99, 227, 96, - 52, 1, 103, 227, 96, 52, 1, 79, 53, 52, 1, 236, 121, 53, 252, 106, 56, - 46, 231, 140, 46, 234, 84, 3, 205, 47, 255, 33, 255, 41, 52, 1, 231, 181, - 88, 52, 1, 250, 244, 255, 41, 52, 1, 3, 246, 169, 52, 1, 3, 149, 52, 1, - 3, 193, 52, 1, 3, 224, 73, 52, 1, 3, 200, 246, 16, 228, 38, 52, 1, 247, - 140, 206, 125, 52, 1, 201, 206, 125, 52, 1, 236, 155, 206, 125, 52, 1, - 184, 206, 125, 52, 1, 247, 139, 206, 125, 52, 1, 223, 193, 250, 38, 206, - 76, 52, 1, 223, 249, 250, 38, 206, 76, 52, 1, 224, 202, 52, 1, 225, 136, - 52, 1, 47, 254, 144, 52, 1, 184, 103, 254, 93, 52, 1, 184, 99, 254, 93, - 52, 1, 184, 42, 254, 93, 52, 1, 184, 41, 254, 93, 52, 1, 184, 231, 139, - 52, 1, 236, 154, 245, 237, 255, 41, 52, 1, 236, 154, 47, 245, 237, 255, - 41, 52, 1, 236, 154, 47, 255, 33, 255, 41, 52, 1, 184, 205, 52, 1, 232, - 8, 251, 61, 52, 1, 252, 226, 201, 226, 118, 52, 1, 247, 233, 201, 226, - 118, 52, 1, 252, 226, 184, 226, 118, 52, 1, 247, 233, 184, 226, 118, 52, - 1, 229, 105, 52, 1, 234, 44, 229, 105, 52, 1, 184, 42, 58, 36, 245, 237, - 255, 41, 36, 255, 33, 255, 41, 36, 251, 102, 255, 41, 36, 205, 36, 237, - 63, 36, 234, 1, 36, 252, 106, 36, 56, 46, 36, 219, 36, 244, 217, 46, 36, - 231, 140, 46, 36, 47, 255, 33, 255, 41, 36, 252, 5, 36, 61, 237, 171, 46, - 36, 47, 61, 237, 171, 46, 36, 47, 245, 237, 255, 41, 36, 252, 19, 36, - 239, 223, 252, 106, 36, 209, 251, 55, 46, 36, 251, 55, 46, 36, 200, 251, - 55, 46, 36, 251, 55, 64, 231, 153, 36, 245, 237, 255, 42, 51, 36, 255, - 33, 255, 42, 51, 36, 42, 227, 97, 51, 36, 41, 227, 97, 51, 36, 42, 254, - 182, 46, 36, 244, 160, 36, 42, 132, 231, 140, 51, 36, 99, 227, 97, 51, - 36, 103, 227, 97, 51, 36, 79, 5, 51, 36, 236, 121, 5, 51, 36, 233, 227, - 244, 217, 51, 36, 231, 196, 244, 217, 51, 36, 56, 51, 36, 250, 3, 51, 36, - 231, 140, 51, 36, 251, 55, 51, 36, 251, 226, 36, 234, 84, 36, 61, 237, - 171, 51, 36, 252, 102, 51, 36, 239, 223, 47, 254, 121, 51, 36, 252, 6, - 51, 36, 251, 102, 255, 42, 51, 36, 252, 107, 51, 36, 239, 223, 252, 107, - 51, 36, 226, 159, 51, 36, 237, 64, 51, 36, 184, 237, 170, 36, 47, 184, - 237, 170, 36, 226, 159, 234, 2, 36, 229, 63, 195, 234, 2, 36, 182, 195, - 234, 2, 36, 229, 63, 228, 162, 234, 2, 36, 182, 228, 162, 234, 2, 36, 41, - 132, 231, 140, 51, 36, 239, 223, 252, 102, 51, 36, 37, 51, 36, 230, 212, - 51, 36, 224, 74, 46, 36, 61, 205, 36, 47, 234, 1, 36, 245, 237, 206, 76, - 36, 255, 33, 206, 76, 36, 19, 233, 117, 36, 19, 238, 132, 36, 19, 249, - 254, 226, 109, 36, 19, 223, 165, 36, 252, 102, 46, 36, 247, 204, 5, 51, - 36, 47, 61, 237, 171, 51, 36, 42, 254, 182, 51, 36, 190, 226, 159, 46, - 36, 244, 221, 46, 36, 254, 210, 105, 180, 46, 36, 42, 41, 67, 51, 36, - 225, 106, 67, 51, 36, 245, 241, 239, 112, 36, 41, 254, 94, 46, 36, 42, - 132, 231, 140, 46, 36, 247, 76, 36, 224, 74, 51, 36, 42, 254, 94, 51, 36, - 41, 254, 94, 51, 36, 41, 254, 94, 22, 99, 254, 94, 51, 36, 41, 132, 231, - 140, 46, 36, 56, 64, 231, 153, 36, 254, 70, 51, 36, 47, 231, 140, 51, 36, - 223, 38, 46, 36, 47, 252, 107, 51, 36, 47, 252, 106, 36, 47, 237, 63, 36, - 47, 237, 64, 51, 36, 47, 205, 36, 47, 239, 223, 252, 106, 36, 47, 81, 67, - 51, 36, 7, 3, 1, 57, 36, 7, 3, 1, 72, 36, 7, 3, 1, 74, 36, 7, 3, 1, 73, - 36, 7, 3, 1, 66, 36, 7, 3, 1, 252, 44, 36, 7, 3, 1, 222, 222, 36, 7, 3, - 1, 212, 36, 7, 3, 1, 185, 36, 7, 3, 1, 146, 36, 7, 3, 1, 227, 109, 36, 7, - 3, 1, 196, 36, 7, 3, 1, 224, 73, 19, 6, 1, 245, 89, 19, 3, 1, 245, 89, - 19, 6, 1, 254, 120, 230, 255, 19, 3, 1, 254, 120, 230, 255, 19, 207, 53, - 19, 203, 207, 53, 19, 6, 1, 233, 215, 249, 230, 19, 3, 1, 233, 215, 249, - 230, 19, 223, 165, 19, 3, 200, 237, 99, 229, 3, 98, 19, 3, 248, 138, 237, - 99, 229, 3, 98, 19, 3, 200, 248, 138, 237, 99, 229, 3, 98, 19, 232, 69, - 76, 19, 226, 109, 19, 249, 254, 226, 109, 19, 6, 1, 254, 206, 2, 226, - 109, 19, 254, 173, 227, 30, 19, 6, 1, 247, 207, 2, 226, 109, 19, 6, 1, - 247, 172, 2, 226, 109, 19, 6, 1, 239, 216, 2, 226, 109, 19, 6, 1, 234, - 65, 2, 226, 109, 19, 6, 1, 225, 111, 2, 226, 109, 19, 6, 1, 234, 67, 2, - 226, 109, 19, 3, 1, 239, 216, 2, 249, 254, 22, 226, 109, 19, 6, 1, 254, - 205, 19, 6, 1, 252, 198, 19, 6, 1, 246, 169, 19, 6, 1, 250, 47, 19, 6, 1, - 247, 206, 19, 6, 1, 223, 88, 19, 6, 1, 247, 171, 19, 6, 1, 226, 223, 19, - 6, 1, 239, 215, 19, 6, 1, 239, 35, 19, 6, 1, 238, 16, 19, 6, 1, 236, 66, - 19, 6, 1, 234, 206, 19, 6, 1, 224, 64, 19, 6, 1, 234, 64, 19, 6, 1, 233, - 69, 19, 6, 1, 231, 182, 19, 6, 1, 229, 2, 19, 6, 1, 227, 61, 19, 6, 1, - 225, 110, 19, 6, 1, 233, 87, 19, 6, 1, 251, 169, 19, 6, 1, 232, 183, 19, - 6, 1, 234, 66, 19, 6, 1, 239, 216, 2, 249, 253, 19, 6, 1, 225, 111, 2, - 249, 253, 19, 3, 1, 254, 206, 2, 226, 109, 19, 3, 1, 247, 207, 2, 226, - 109, 19, 3, 1, 247, 172, 2, 226, 109, 19, 3, 1, 239, 216, 2, 226, 109, - 19, 3, 1, 225, 111, 2, 249, 254, 22, 226, 109, 19, 3, 1, 254, 205, 19, 3, - 1, 252, 198, 19, 3, 1, 246, 169, 19, 3, 1, 250, 47, 19, 3, 1, 247, 206, - 19, 3, 1, 223, 88, 19, 3, 1, 247, 171, 19, 3, 1, 226, 223, 19, 3, 1, 239, - 215, 19, 3, 1, 239, 35, 19, 3, 1, 238, 16, 19, 3, 1, 236, 66, 19, 3, 1, - 234, 206, 19, 3, 1, 224, 64, 19, 3, 1, 234, 64, 19, 3, 1, 233, 69, 19, 3, - 1, 231, 182, 19, 3, 1, 35, 229, 2, 19, 3, 1, 229, 2, 19, 3, 1, 227, 61, - 19, 3, 1, 225, 110, 19, 3, 1, 233, 87, 19, 3, 1, 251, 169, 19, 3, 1, 232, - 183, 19, 3, 1, 234, 66, 19, 3, 1, 239, 216, 2, 249, 253, 19, 3, 1, 225, - 111, 2, 249, 253, 19, 3, 1, 234, 65, 2, 226, 109, 19, 3, 1, 225, 111, 2, - 226, 109, 19, 3, 1, 234, 67, 2, 226, 109, 19, 6, 239, 57, 98, 19, 252, - 199, 98, 19, 226, 224, 98, 19, 225, 111, 2, 244, 217, 98, 19, 225, 111, - 2, 255, 33, 22, 244, 217, 98, 19, 225, 111, 2, 250, 3, 22, 244, 217, 98, - 19, 233, 88, 98, 19, 233, 70, 98, 19, 239, 57, 98, 19, 1, 254, 120, 238, - 135, 19, 3, 1, 254, 120, 238, 135, 19, 1, 228, 46, 19, 3, 1, 228, 46, 19, - 1, 249, 230, 19, 3, 1, 249, 230, 19, 1, 238, 135, 19, 3, 1, 238, 135, 19, - 1, 230, 255, 19, 3, 1, 230, 255, 70, 6, 1, 229, 106, 70, 3, 1, 229, 106, - 70, 6, 1, 247, 85, 70, 3, 1, 247, 85, 70, 6, 1, 238, 215, 70, 3, 1, 238, - 215, 70, 6, 1, 244, 213, 70, 3, 1, 244, 213, 70, 6, 1, 246, 165, 70, 3, - 1, 246, 165, 70, 6, 1, 229, 80, 70, 3, 1, 229, 80, 70, 6, 1, 250, 60, 70, - 3, 1, 250, 60, 19, 239, 36, 98, 19, 231, 183, 98, 19, 237, 99, 229, 3, - 98, 19, 1, 223, 169, 19, 6, 226, 224, 98, 19, 237, 99, 247, 207, 98, 19, - 200, 237, 99, 247, 207, 98, 19, 6, 1, 229, 71, 19, 3, 1, 229, 71, 19, 6, - 237, 99, 229, 3, 98, 19, 6, 1, 230, 253, 19, 3, 1, 230, 253, 19, 231, - 183, 2, 195, 98, 19, 6, 200, 237, 99, 229, 3, 98, 19, 6, 248, 138, 237, - 99, 229, 3, 98, 19, 6, 200, 248, 138, 237, 99, 229, 3, 98, 28, 6, 1, 240, - 73, 2, 245, 236, 28, 6, 1, 239, 219, 28, 6, 1, 249, 176, 28, 6, 1, 246, - 21, 28, 6, 1, 225, 150, 240, 72, 28, 6, 1, 248, 69, 28, 6, 1, 252, 53, - 74, 28, 6, 1, 223, 202, 28, 6, 1, 239, 170, 28, 6, 1, 237, 151, 28, 6, 1, - 235, 48, 28, 6, 1, 226, 36, 28, 6, 1, 238, 169, 28, 6, 1, 244, 81, 2, - 245, 236, 28, 6, 1, 229, 63, 66, 28, 6, 1, 248, 65, 28, 6, 1, 57, 28, 6, - 1, 252, 238, 28, 6, 1, 225, 42, 28, 6, 1, 246, 58, 28, 6, 1, 250, 77, 28, - 6, 1, 240, 72, 28, 6, 1, 223, 77, 28, 6, 1, 223, 97, 28, 6, 1, 74, 28, 6, - 1, 229, 63, 74, 28, 6, 1, 177, 28, 6, 1, 248, 2, 28, 6, 1, 247, 247, 28, - 6, 1, 247, 239, 28, 6, 1, 73, 28, 6, 1, 233, 151, 28, 6, 1, 247, 198, 28, - 6, 1, 247, 188, 28, 6, 1, 227, 44, 28, 6, 1, 66, 28, 6, 1, 248, 29, 28, - 6, 1, 154, 28, 6, 1, 226, 40, 28, 6, 1, 251, 182, 28, 6, 1, 229, 146, 28, - 6, 1, 229, 116, 28, 6, 1, 245, 140, 53, 28, 6, 1, 223, 213, 28, 6, 1, - 228, 165, 53, 28, 6, 1, 72, 28, 6, 1, 223, 158, 28, 6, 1, 191, 28, 3, 1, - 57, 28, 3, 1, 252, 238, 28, 3, 1, 225, 42, 28, 3, 1, 246, 58, 28, 3, 1, - 250, 77, 28, 3, 1, 240, 72, 28, 3, 1, 223, 77, 28, 3, 1, 223, 97, 28, 3, - 1, 74, 28, 3, 1, 229, 63, 74, 28, 3, 1, 177, 28, 3, 1, 248, 2, 28, 3, 1, - 247, 247, 28, 3, 1, 247, 239, 28, 3, 1, 73, 28, 3, 1, 233, 151, 28, 3, 1, - 247, 198, 28, 3, 1, 247, 188, 28, 3, 1, 227, 44, 28, 3, 1, 66, 28, 3, 1, - 248, 29, 28, 3, 1, 154, 28, 3, 1, 226, 40, 28, 3, 1, 251, 182, 28, 3, 1, - 229, 146, 28, 3, 1, 229, 116, 28, 3, 1, 245, 140, 53, 28, 3, 1, 223, 213, - 28, 3, 1, 228, 165, 53, 28, 3, 1, 72, 28, 3, 1, 223, 158, 28, 3, 1, 191, - 28, 3, 1, 240, 73, 2, 245, 236, 28, 3, 1, 239, 219, 28, 3, 1, 249, 176, - 28, 3, 1, 246, 21, 28, 3, 1, 225, 150, 240, 72, 28, 3, 1, 248, 69, 28, 3, - 1, 252, 53, 74, 28, 3, 1, 223, 202, 28, 3, 1, 239, 170, 28, 3, 1, 237, - 151, 28, 3, 1, 235, 48, 28, 3, 1, 226, 36, 28, 3, 1, 238, 169, 28, 3, 1, - 244, 81, 2, 245, 236, 28, 3, 1, 229, 63, 66, 28, 3, 1, 248, 65, 28, 6, 1, - 234, 66, 28, 3, 1, 234, 66, 28, 6, 1, 223, 239, 28, 3, 1, 223, 239, 28, - 6, 1, 239, 213, 72, 28, 3, 1, 239, 213, 72, 28, 6, 1, 237, 155, 223, 139, - 28, 3, 1, 237, 155, 223, 139, 28, 6, 1, 239, 213, 237, 155, 223, 139, 28, - 3, 1, 239, 213, 237, 155, 223, 139, 28, 6, 1, 252, 173, 223, 139, 28, 3, - 1, 252, 173, 223, 139, 28, 6, 1, 239, 213, 252, 173, 223, 139, 28, 3, 1, - 239, 213, 252, 173, 223, 139, 28, 6, 1, 238, 111, 28, 3, 1, 238, 111, 28, - 6, 1, 232, 183, 28, 3, 1, 232, 183, 28, 6, 1, 247, 38, 28, 3, 1, 247, 38, - 28, 6, 1, 239, 184, 28, 3, 1, 239, 184, 28, 6, 1, 239, 185, 2, 47, 245, - 237, 255, 41, 28, 3, 1, 239, 185, 2, 47, 245, 237, 255, 41, 28, 6, 1, - 225, 153, 28, 3, 1, 225, 153, 28, 6, 1, 231, 104, 234, 66, 28, 3, 1, 231, - 104, 234, 66, 28, 6, 1, 234, 67, 2, 226, 143, 28, 3, 1, 234, 67, 2, 226, - 143, 28, 6, 1, 234, 19, 28, 3, 1, 234, 19, 28, 6, 1, 238, 135, 28, 3, 1, - 238, 135, 28, 226, 193, 53, 36, 28, 226, 143, 36, 28, 233, 228, 36, 28, - 172, 233, 6, 36, 28, 186, 233, 6, 36, 28, 232, 248, 36, 28, 244, 136, - 226, 193, 53, 36, 28, 236, 128, 53, 28, 6, 1, 229, 63, 244, 81, 2, 227, - 89, 28, 3, 1, 229, 63, 244, 81, 2, 227, 89, 28, 6, 1, 229, 182, 53, 28, - 3, 1, 229, 182, 53, 28, 6, 1, 247, 199, 2, 226, 172, 28, 3, 1, 247, 199, - 2, 226, 172, 28, 6, 1, 246, 59, 2, 225, 109, 28, 3, 1, 246, 59, 2, 225, - 109, 28, 6, 1, 246, 59, 2, 82, 28, 3, 1, 246, 59, 2, 82, 28, 6, 1, 246, - 59, 2, 236, 154, 88, 28, 3, 1, 246, 59, 2, 236, 154, 88, 28, 6, 1, 223, - 78, 2, 250, 34, 28, 3, 1, 223, 78, 2, 250, 34, 28, 6, 1, 223, 98, 2, 250, - 34, 28, 3, 1, 223, 98, 2, 250, 34, 28, 6, 1, 188, 2, 250, 34, 28, 3, 1, - 188, 2, 250, 34, 28, 6, 1, 188, 2, 61, 82, 28, 3, 1, 188, 2, 61, 82, 28, - 6, 1, 188, 2, 82, 28, 3, 1, 188, 2, 82, 28, 6, 1, 253, 23, 177, 28, 3, 1, - 253, 23, 177, 28, 6, 1, 247, 240, 2, 250, 34, 28, 3, 1, 247, 240, 2, 250, - 34, 28, 6, 20, 247, 240, 246, 58, 28, 3, 20, 247, 240, 246, 58, 28, 6, 1, - 233, 152, 2, 236, 154, 88, 28, 3, 1, 233, 152, 2, 236, 154, 88, 28, 6, 1, - 255, 47, 154, 28, 3, 1, 255, 47, 154, 28, 6, 1, 247, 189, 2, 250, 34, 28, - 3, 1, 247, 189, 2, 250, 34, 28, 6, 1, 227, 45, 2, 250, 34, 28, 3, 1, 227, - 45, 2, 250, 34, 28, 6, 1, 228, 32, 66, 28, 3, 1, 228, 32, 66, 28, 6, 1, - 228, 32, 97, 2, 82, 28, 3, 1, 228, 32, 97, 2, 82, 28, 6, 1, 245, 170, 2, - 250, 34, 28, 3, 1, 245, 170, 2, 250, 34, 28, 6, 20, 227, 45, 226, 40, 28, - 3, 20, 227, 45, 226, 40, 28, 6, 1, 251, 183, 2, 250, 34, 28, 3, 1, 251, - 183, 2, 250, 34, 28, 6, 1, 251, 183, 2, 61, 82, 28, 3, 1, 251, 183, 2, - 61, 82, 28, 6, 1, 229, 91, 28, 3, 1, 229, 91, 28, 6, 1, 255, 47, 251, - 182, 28, 3, 1, 255, 47, 251, 182, 28, 6, 1, 255, 47, 251, 183, 2, 250, - 34, 28, 3, 1, 255, 47, 251, 183, 2, 250, 34, 28, 1, 233, 222, 28, 6, 1, - 223, 78, 2, 252, 106, 28, 3, 1, 223, 78, 2, 252, 106, 28, 6, 1, 188, 2, - 88, 28, 3, 1, 188, 2, 88, 28, 6, 1, 248, 3, 2, 227, 89, 28, 3, 1, 248, 3, - 2, 227, 89, 28, 6, 1, 247, 240, 2, 88, 28, 3, 1, 247, 240, 2, 88, 28, 6, - 1, 247, 240, 2, 227, 89, 28, 3, 1, 247, 240, 2, 227, 89, 28, 6, 1, 238, - 223, 251, 182, 28, 3, 1, 238, 223, 251, 182, 28, 6, 1, 247, 248, 2, 227, - 89, 28, 3, 1, 247, 248, 2, 227, 89, 28, 3, 1, 233, 222, 28, 6, 1, 102, 2, - 252, 106, 28, 3, 1, 102, 2, 252, 106, 28, 6, 1, 102, 2, 219, 28, 3, 1, - 102, 2, 219, 28, 6, 20, 102, 240, 72, 28, 3, 20, 102, 240, 72, 28, 6, 1, - 240, 73, 2, 252, 106, 28, 3, 1, 240, 73, 2, 252, 106, 28, 6, 1, 230, 222, - 28, 3, 1, 230, 222, 28, 6, 1, 230, 223, 2, 219, 28, 3, 1, 230, 223, 2, - 219, 28, 6, 1, 223, 78, 2, 219, 28, 3, 1, 223, 78, 2, 219, 28, 6, 1, 223, - 98, 2, 219, 28, 3, 1, 223, 98, 2, 219, 28, 6, 1, 255, 47, 248, 69, 28, 3, - 1, 255, 47, 248, 69, 28, 6, 1, 244, 81, 2, 237, 63, 28, 3, 1, 244, 81, 2, - 237, 63, 28, 6, 1, 244, 81, 2, 219, 28, 3, 1, 244, 81, 2, 219, 28, 6, 1, - 130, 2, 219, 28, 3, 1, 130, 2, 219, 28, 6, 1, 253, 31, 73, 28, 3, 1, 253, - 31, 73, 28, 6, 1, 253, 31, 130, 2, 219, 28, 3, 1, 253, 31, 130, 2, 219, - 28, 6, 1, 161, 2, 219, 28, 3, 1, 161, 2, 219, 28, 6, 1, 97, 2, 237, 63, - 28, 3, 1, 97, 2, 237, 63, 28, 6, 1, 97, 2, 219, 28, 3, 1, 97, 2, 219, 28, - 6, 1, 97, 2, 47, 155, 28, 3, 1, 97, 2, 47, 155, 28, 6, 1, 251, 183, 2, - 219, 28, 3, 1, 251, 183, 2, 219, 28, 6, 1, 246, 59, 2, 250, 34, 28, 3, 1, - 246, 59, 2, 250, 34, 28, 6, 1, 223, 214, 2, 219, 28, 3, 1, 223, 214, 2, - 219, 28, 6, 1, 246, 59, 2, 195, 22, 88, 28, 3, 1, 246, 59, 2, 195, 22, - 88, 28, 6, 1, 245, 170, 2, 88, 28, 3, 1, 245, 170, 2, 88, 28, 6, 1, 245, - 170, 2, 82, 28, 3, 1, 245, 170, 2, 82, 28, 6, 1, 238, 143, 250, 77, 28, - 3, 1, 238, 143, 250, 77, 28, 6, 1, 238, 143, 249, 176, 28, 3, 1, 238, - 143, 249, 176, 28, 6, 1, 238, 143, 223, 31, 28, 3, 1, 238, 143, 223, 31, - 28, 6, 1, 238, 143, 248, 63, 28, 3, 1, 238, 143, 248, 63, 28, 6, 1, 238, - 143, 237, 151, 28, 3, 1, 238, 143, 237, 151, 28, 6, 1, 238, 143, 235, 48, - 28, 3, 1, 238, 143, 235, 48, 28, 6, 1, 238, 143, 228, 204, 28, 3, 1, 238, - 143, 228, 204, 28, 6, 1, 238, 143, 226, 139, 28, 3, 1, 238, 143, 226, - 139, 28, 6, 1, 200, 223, 97, 28, 3, 1, 200, 223, 97, 28, 6, 1, 248, 3, 2, - 88, 28, 3, 1, 248, 3, 2, 88, 28, 6, 1, 237, 205, 28, 3, 1, 237, 205, 28, - 6, 1, 231, 184, 28, 3, 1, 231, 184, 28, 6, 1, 224, 10, 28, 3, 1, 224, 10, - 28, 6, 1, 232, 138, 28, 3, 1, 232, 138, 28, 6, 1, 224, 141, 28, 3, 1, - 224, 141, 28, 6, 1, 254, 224, 177, 28, 3, 1, 254, 224, 177, 28, 6, 1, - 248, 3, 2, 236, 154, 88, 28, 3, 1, 248, 3, 2, 236, 154, 88, 28, 6, 1, - 247, 240, 2, 236, 154, 88, 28, 3, 1, 247, 240, 2, 236, 154, 88, 120, 6, - 1, 254, 31, 120, 6, 1, 252, 210, 120, 6, 1, 246, 36, 120, 6, 1, 250, 189, - 120, 6, 1, 248, 39, 120, 6, 1, 223, 117, 120, 6, 1, 248, 24, 120, 6, 1, - 247, 173, 120, 6, 1, 96, 120, 6, 1, 223, 77, 120, 6, 1, 239, 252, 120, 6, - 1, 237, 154, 120, 6, 1, 224, 67, 120, 6, 1, 252, 39, 120, 6, 1, 238, 243, - 120, 6, 1, 244, 227, 120, 6, 1, 239, 179, 120, 6, 1, 246, 65, 120, 6, 1, - 251, 178, 120, 6, 1, 236, 210, 120, 6, 1, 223, 202, 120, 6, 1, 234, 232, - 120, 6, 1, 229, 146, 120, 6, 1, 224, 206, 120, 6, 1, 251, 204, 120, 6, 1, - 233, 140, 120, 6, 1, 239, 158, 120, 6, 1, 208, 120, 6, 1, 230, 196, 120, - 6, 1, 224, 230, 120, 6, 1, 226, 141, 120, 6, 1, 231, 225, 120, 6, 1, 251, - 68, 120, 6, 1, 223, 188, 120, 6, 1, 233, 27, 120, 6, 1, 238, 253, 120, 6, - 1, 234, 83, 120, 6, 1, 247, 87, 120, 52, 1, 42, 132, 231, 139, 120, 254, - 144, 120, 247, 243, 76, 120, 247, 149, 76, 120, 251, 54, 120, 232, 69, - 76, 120, 255, 48, 76, 120, 3, 1, 254, 31, 120, 3, 1, 252, 210, 120, 3, 1, - 246, 36, 120, 3, 1, 250, 189, 120, 3, 1, 248, 39, 120, 3, 1, 223, 117, - 120, 3, 1, 248, 24, 120, 3, 1, 247, 173, 120, 3, 1, 96, 120, 3, 1, 223, - 77, 120, 3, 1, 239, 252, 120, 3, 1, 237, 154, 120, 3, 1, 224, 67, 120, 3, - 1, 252, 39, 120, 3, 1, 238, 243, 120, 3, 1, 244, 227, 120, 3, 1, 239, - 179, 120, 3, 1, 246, 65, 120, 3, 1, 251, 178, 120, 3, 1, 236, 210, 120, - 3, 1, 223, 202, 120, 3, 1, 234, 232, 120, 3, 1, 229, 146, 120, 3, 1, 224, - 206, 120, 3, 1, 251, 204, 120, 3, 1, 233, 140, 120, 3, 1, 239, 158, 120, - 3, 1, 208, 120, 3, 1, 230, 196, 120, 3, 1, 224, 230, 120, 3, 1, 226, 141, - 120, 3, 1, 231, 225, 120, 3, 1, 251, 68, 120, 3, 1, 223, 188, 120, 3, 1, - 233, 27, 120, 3, 1, 238, 253, 120, 3, 1, 234, 83, 120, 3, 1, 247, 87, - 120, 3, 20, 248, 40, 223, 188, 120, 246, 218, 228, 38, 120, 244, 95, 78, - 255, 42, 247, 166, 78, 255, 42, 230, 197, 78, 255, 42, 229, 133, 78, 255, - 42, 223, 106, 232, 121, 78, 255, 42, 223, 106, 246, 183, 78, 255, 42, - 226, 149, 78, 255, 42, 231, 191, 78, 255, 42, 223, 105, 78, 255, 42, 233, - 171, 78, 255, 42, 223, 208, 78, 255, 42, 227, 1, 78, 255, 42, 246, 112, - 78, 255, 42, 246, 113, 236, 38, 78, 255, 42, 246, 110, 78, 255, 42, 232, - 122, 233, 193, 78, 255, 42, 227, 27, 246, 126, 78, 255, 42, 233, 155, 78, - 255, 42, 254, 60, 245, 163, 78, 255, 42, 236, 47, 78, 255, 42, 237, 53, - 78, 255, 42, 236, 206, 78, 255, 42, 236, 207, 238, 254, 78, 255, 42, 250, - 137, 78, 255, 42, 232, 133, 78, 255, 42, 227, 27, 232, 117, 78, 255, 42, - 223, 216, 252, 211, 223, 173, 78, 255, 42, 234, 72, 78, 255, 42, 240, 33, - 78, 255, 42, 250, 61, 78, 255, 42, 223, 36, 78, 165, 237, 5, 251, 106, - 78, 232, 255, 229, 93, 78, 232, 255, 245, 131, 230, 197, 78, 232, 255, - 245, 131, 233, 166, 78, 232, 255, 245, 131, 232, 126, 78, 232, 255, 245, - 58, 78, 232, 255, 226, 38, 78, 232, 255, 230, 197, 78, 232, 255, 233, - 166, 78, 232, 255, 232, 126, 78, 232, 255, 244, 223, 78, 232, 255, 244, - 224, 245, 133, 32, 225, 46, 78, 232, 255, 232, 72, 78, 232, 255, 250, - 176, 145, 237, 27, 78, 232, 255, 236, 198, 78, 232, 171, 237, 26, 78, - 232, 255, 232, 14, 78, 232, 171, 233, 172, 78, 232, 255, 229, 79, 249, - 140, 78, 232, 255, 228, 244, 249, 140, 78, 232, 171, 228, 166, 233, 168, - 78, 165, 225, 113, 249, 140, 78, 165, 203, 249, 140, 78, 232, 171, 234, - 195, 245, 162, 78, 232, 255, 232, 127, 232, 121, 78, 1, 254, 227, 78, 1, - 252, 200, 78, 1, 246, 34, 78, 1, 250, 160, 78, 1, 245, 121, 78, 1, 225, - 46, 78, 1, 223, 99, 78, 1, 245, 90, 78, 1, 227, 10, 78, 1, 223, 175, 78, - 1, 35, 239, 59, 78, 1, 239, 59, 78, 1, 238, 12, 78, 1, 35, 236, 215, 78, - 1, 236, 215, 78, 1, 35, 234, 194, 78, 1, 234, 194, 78, 1, 231, 2, 78, 1, - 254, 29, 78, 1, 35, 233, 151, 78, 1, 233, 151, 78, 1, 35, 226, 41, 78, 1, - 226, 41, 78, 1, 232, 92, 78, 1, 231, 205, 78, 1, 229, 78, 78, 1, 227, 58, - 78, 20, 223, 200, 47, 225, 46, 78, 20, 223, 200, 225, 47, 223, 175, 78, - 20, 223, 200, 47, 223, 175, 78, 232, 171, 246, 112, 78, 232, 171, 246, - 110, 10, 65, 53, 10, 5, 230, 252, 10, 247, 1, 237, 13, 10, 5, 231, 21, - 254, 131, 250, 232, 231, 111, 254, 131, 246, 237, 231, 111, 10, 231, 250, - 254, 131, 233, 124, 236, 130, 53, 254, 131, 233, 124, 227, 24, 226, 195, - 53, 255, 12, 53, 10, 251, 54, 10, 250, 125, 229, 173, 10, 233, 1, 225, - 32, 53, 10, 5, 236, 113, 10, 5, 231, 8, 254, 229, 224, 156, 10, 5, 254, - 229, 254, 74, 10, 5, 232, 13, 254, 228, 10, 5, 232, 17, 254, 214, 254, - 178, 10, 5, 227, 82, 10, 3, 201, 227, 91, 10, 3, 201, 20, 92, 2, 216, 2, - 223, 224, 10, 3, 201, 223, 110, 10, 3, 247, 104, 10, 3, 250, 156, 10, 3, - 239, 23, 10, 229, 186, 10, 226, 66, 56, 232, 171, 76, 10, 232, 69, 76, - 10, 1, 245, 149, 10, 1, 92, 2, 237, 59, 46, 10, 1, 92, 2, 164, 46, 10, 1, - 224, 145, 2, 164, 46, 10, 1, 92, 2, 164, 51, 10, 1, 62, 2, 164, 46, 10, - 1, 254, 227, 10, 1, 252, 223, 10, 1, 227, 35, 237, 22, 10, 1, 227, 34, - 10, 1, 226, 236, 10, 1, 239, 168, 10, 1, 245, 159, 10, 1, 238, 225, 10, - 1, 250, 165, 10, 1, 226, 245, 10, 1, 231, 225, 10, 1, 223, 110, 10, 1, - 230, 201, 10, 1, 229, 110, 10, 1, 231, 24, 10, 1, 250, 184, 10, 1, 227, - 91, 10, 1, 223, 113, 10, 1, 254, 248, 10, 1, 246, 63, 10, 1, 238, 252, 2, - 135, 197, 46, 10, 1, 238, 252, 2, 152, 197, 51, 10, 1, 247, 107, 62, 2, - 239, 223, 196, 10, 1, 247, 107, 62, 2, 135, 197, 46, 10, 1, 247, 107, 62, - 2, 152, 197, 46, 10, 227, 63, 10, 1, 247, 87, 10, 1, 232, 131, 10, 1, - 239, 59, 10, 1, 238, 20, 10, 1, 236, 225, 10, 1, 234, 251, 10, 1, 245, - 107, 10, 1, 224, 144, 10, 1, 92, 237, 41, 10, 1, 223, 224, 10, 247, 102, - 10, 250, 154, 10, 239, 21, 10, 247, 104, 10, 250, 156, 10, 239, 23, 10, - 229, 137, 10, 227, 234, 10, 237, 57, 46, 10, 164, 46, 10, 164, 51, 10, - 227, 253, 254, 227, 10, 239, 223, 250, 156, 10, 165, 234, 252, 246, 50, - 10, 223, 5, 10, 31, 5, 3, 225, 65, 46, 10, 31, 5, 239, 223, 3, 225, 65, - 46, 10, 31, 5, 56, 51, 10, 200, 250, 156, 10, 247, 105, 2, 135, 249, 138, - 254, 131, 21, 223, 89, 254, 131, 21, 118, 254, 131, 21, 113, 254, 131, - 21, 166, 254, 131, 21, 158, 254, 131, 21, 173, 254, 131, 21, 183, 254, - 131, 21, 194, 254, 131, 21, 187, 254, 131, 21, 192, 10, 233, 123, 53, 10, - 250, 71, 229, 173, 10, 226, 193, 229, 173, 10, 247, 37, 232, 253, 228, - 58, 10, 1, 249, 139, 252, 223, 10, 1, 249, 139, 232, 131, 10, 1, 227, - 219, 254, 227, 10, 1, 92, 224, 157, 10, 1, 92, 2, 224, 146, 164, 46, 10, - 1, 92, 2, 224, 146, 164, 51, 10, 1, 201, 245, 149, 10, 1, 201, 164, 254, - 227, 10, 1, 201, 164, 224, 144, 10, 1, 97, 2, 164, 46, 10, 1, 201, 164, - 223, 224, 10, 1, 226, 14, 10, 1, 226, 12, 10, 1, 252, 230, 10, 1, 227, - 35, 2, 231, 139, 10, 1, 227, 35, 2, 152, 197, 64, 248, 124, 10, 1, 233, - 140, 10, 1, 227, 32, 10, 1, 252, 221, 10, 1, 101, 2, 164, 46, 10, 1, 101, - 2, 135, 197, 61, 46, 10, 1, 234, 166, 10, 1, 248, 75, 10, 1, 101, 2, 152, - 197, 46, 10, 1, 227, 48, 10, 1, 227, 46, 10, 1, 250, 112, 10, 1, 250, - 166, 2, 231, 139, 10, 1, 250, 166, 2, 56, 51, 10, 1, 250, 166, 2, 56, - 252, 214, 22, 3, 227, 91, 10, 1, 250, 171, 10, 1, 250, 114, 10, 1, 248, - 99, 10, 1, 250, 166, 2, 152, 197, 64, 248, 124, 10, 1, 250, 166, 2, 246, - 243, 197, 46, 10, 1, 231, 95, 10, 1, 231, 226, 2, 3, 196, 10, 1, 231, - 226, 2, 231, 139, 10, 1, 231, 226, 2, 56, 51, 10, 1, 231, 226, 2, 3, 225, - 65, 51, 10, 1, 231, 226, 2, 56, 252, 214, 22, 56, 46, 10, 1, 231, 226, 2, - 135, 197, 46, 10, 1, 239, 165, 10, 1, 231, 226, 2, 246, 243, 197, 46, 10, - 1, 230, 202, 2, 56, 252, 214, 22, 56, 46, 10, 1, 230, 202, 2, 152, 197, - 51, 10, 1, 230, 202, 2, 152, 197, 252, 214, 22, 152, 197, 46, 10, 1, 231, - 25, 2, 135, 197, 51, 10, 1, 231, 25, 2, 152, 197, 46, 10, 1, 227, 92, 2, - 152, 197, 46, 10, 1, 254, 249, 2, 152, 197, 46, 10, 1, 249, 139, 247, 87, - 10, 1, 247, 88, 2, 56, 236, 71, 51, 10, 1, 247, 88, 2, 56, 51, 10, 1, - 225, 36, 10, 1, 247, 88, 2, 152, 197, 51, 10, 1, 233, 138, 10, 1, 232, - 132, 2, 56, 46, 10, 1, 232, 132, 2, 152, 197, 46, 10, 1, 238, 251, 10, 1, - 227, 197, 239, 59, 10, 1, 239, 60, 2, 231, 139, 10, 1, 239, 60, 2, 56, - 46, 10, 1, 235, 139, 10, 1, 239, 60, 2, 152, 197, 51, 10, 1, 246, 180, - 10, 1, 246, 181, 2, 231, 139, 10, 1, 235, 105, 10, 1, 246, 181, 2, 135, - 197, 51, 10, 1, 245, 210, 10, 1, 246, 181, 2, 152, 197, 46, 10, 1, 216, - 2, 3, 196, 10, 1, 216, 2, 56, 46, 10, 1, 216, 2, 152, 197, 46, 10, 1, - 216, 2, 152, 197, 51, 10, 1, 234, 252, 2, 56, 51, 10, 1, 234, 252, 246, - 50, 10, 1, 231, 125, 10, 1, 234, 252, 2, 231, 139, 10, 1, 234, 252, 2, - 152, 197, 46, 10, 1, 245, 108, 249, 157, 10, 1, 227, 49, 2, 56, 46, 10, - 1, 245, 108, 2, 62, 46, 10, 1, 245, 108, 246, 8, 10, 1, 245, 108, 246, 9, - 2, 164, 46, 10, 1, 227, 35, 237, 23, 246, 8, 10, 1, 224, 145, 2, 231, - 139, 10, 1, 238, 185, 234, 88, 10, 1, 234, 88, 10, 1, 66, 10, 1, 223, - 158, 10, 1, 238, 185, 223, 158, 10, 1, 224, 145, 2, 135, 197, 46, 10, 1, - 225, 42, 10, 1, 247, 107, 223, 224, 10, 1, 62, 2, 227, 89, 10, 1, 62, 2, - 3, 196, 10, 1, 224, 145, 2, 56, 46, 10, 1, 72, 10, 1, 62, 2, 152, 197, - 51, 10, 1, 62, 253, 29, 10, 1, 62, 253, 30, 2, 164, 46, 10, 246, 218, - 228, 38, 10, 1, 255, 19, 10, 3, 201, 20, 231, 25, 2, 216, 2, 92, 237, 41, - 10, 3, 201, 20, 232, 132, 2, 216, 2, 92, 237, 41, 10, 3, 201, 55, 59, 15, - 10, 3, 201, 216, 254, 227, 10, 3, 201, 239, 168, 10, 3, 201, 152, 249, - 138, 10, 3, 201, 230, 201, 10, 247, 233, 106, 254, 33, 10, 228, 56, 106, - 231, 68, 248, 3, 245, 56, 10, 3, 201, 231, 102, 223, 89, 10, 3, 201, 225, - 112, 231, 235, 223, 89, 10, 3, 201, 249, 139, 245, 119, 106, 238, 225, - 10, 3, 201, 55, 44, 15, 10, 3, 184, 230, 201, 10, 3, 201, 237, 58, 10, 3, - 224, 144, 10, 3, 223, 224, 10, 3, 201, 223, 224, 10, 3, 201, 234, 251, - 10, 233, 23, 106, 231, 14, 10, 247, 241, 251, 219, 184, 228, 38, 10, 247, - 241, 251, 219, 201, 228, 38, 10, 231, 102, 201, 228, 39, 2, 247, 53, 251, - 218, 10, 3, 184, 236, 225, 10, 1, 250, 166, 2, 239, 223, 196, 10, 1, 231, - 226, 2, 239, 223, 196, 247, 142, 254, 131, 21, 223, 89, 247, 142, 254, - 131, 21, 118, 247, 142, 254, 131, 21, 113, 247, 142, 254, 131, 21, 166, - 247, 142, 254, 131, 21, 158, 247, 142, 254, 131, 21, 173, 247, 142, 254, - 131, 21, 183, 247, 142, 254, 131, 21, 194, 247, 142, 254, 131, 21, 187, - 247, 142, 254, 131, 21, 192, 10, 1, 229, 111, 2, 56, 51, 10, 1, 250, 185, - 2, 56, 51, 10, 1, 246, 64, 2, 56, 51, 10, 5, 228, 243, 254, 193, 10, 5, - 228, 243, 232, 236, 236, 210, 10, 1, 245, 108, 2, 239, 223, 196, 151, - 247, 233, 106, 233, 191, 151, 227, 215, 246, 218, 228, 38, 151, 227, 255, - 246, 218, 228, 38, 151, 227, 215, 251, 61, 151, 227, 255, 251, 61, 151, - 169, 251, 61, 151, 251, 62, 228, 202, 237, 237, 151, 251, 62, 228, 202, - 231, 153, 151, 227, 215, 251, 62, 228, 202, 237, 237, 151, 227, 255, 251, - 62, 228, 202, 231, 153, 151, 251, 20, 151, 245, 138, 234, 99, 151, 245, - 138, 236, 197, 151, 245, 138, 254, 71, 151, 255, 48, 76, 151, 1, 254, - 230, 151, 1, 227, 219, 254, 230, 151, 1, 252, 197, 151, 1, 246, 172, 151, - 1, 246, 173, 246, 156, 151, 1, 250, 163, 151, 1, 249, 139, 250, 164, 231, - 136, 151, 1, 245, 121, 151, 1, 224, 144, 151, 1, 223, 110, 151, 1, 245, - 88, 151, 1, 227, 6, 151, 1, 227, 7, 246, 156, 151, 1, 223, 148, 151, 1, - 223, 149, 245, 121, 151, 1, 239, 38, 151, 1, 238, 19, 151, 1, 236, 127, - 151, 1, 234, 194, 151, 1, 229, 179, 151, 1, 35, 229, 179, 151, 1, 72, - 151, 1, 233, 151, 151, 1, 200, 233, 151, 151, 1, 231, 22, 151, 1, 232, - 125, 151, 1, 231, 136, 151, 1, 229, 78, 151, 1, 227, 56, 151, 1, 233, - 113, 252, 187, 151, 1, 233, 113, 246, 61, 151, 1, 233, 113, 250, 19, 151, - 232, 174, 46, 151, 232, 174, 51, 151, 232, 174, 248, 137, 151, 223, 21, - 46, 151, 223, 21, 51, 151, 223, 21, 248, 137, 151, 231, 247, 46, 151, - 231, 247, 51, 151, 248, 138, 223, 28, 244, 212, 151, 248, 138, 223, 28, - 254, 179, 151, 245, 124, 46, 151, 245, 124, 51, 151, 245, 123, 248, 137, - 151, 247, 186, 46, 151, 247, 186, 51, 151, 231, 44, 151, 247, 81, 249, - 140, 151, 232, 51, 151, 231, 66, 151, 135, 61, 197, 46, 151, 135, 61, - 197, 51, 151, 152, 197, 46, 151, 152, 197, 51, 151, 234, 97, 237, 171, - 46, 151, 234, 97, 237, 171, 51, 151, 236, 28, 151, 253, 28, 151, 1, 228, - 163, 223, 83, 151, 1, 228, 163, 238, 219, 151, 1, 228, 163, 247, 97, 10, - 1, 252, 224, 2, 152, 197, 244, 162, 51, 10, 1, 252, 224, 2, 56, 252, 214, - 22, 152, 197, 46, 10, 1, 252, 224, 2, 152, 197, 232, 251, 225, 106, 51, - 10, 1, 252, 224, 2, 152, 197, 232, 251, 225, 106, 252, 214, 22, 135, 197, - 46, 10, 1, 252, 224, 2, 135, 197, 252, 214, 22, 56, 46, 10, 1, 252, 224, - 2, 239, 223, 3, 225, 65, 51, 10, 1, 252, 224, 2, 3, 196, 10, 1, 101, 2, - 135, 197, 46, 10, 1, 101, 2, 152, 197, 232, 251, 225, 106, 51, 10, 1, - 250, 166, 2, 135, 197, 224, 236, 252, 214, 22, 3, 227, 91, 10, 1, 250, - 166, 2, 239, 223, 3, 225, 65, 51, 10, 1, 231, 226, 2, 82, 10, 1, 230, - 202, 2, 246, 243, 197, 46, 10, 1, 254, 249, 2, 135, 197, 46, 10, 1, 254, - 249, 2, 152, 197, 232, 251, 248, 125, 46, 10, 1, 254, 249, 2, 135, 197, - 224, 236, 46, 10, 1, 247, 88, 2, 135, 197, 51, 10, 1, 247, 88, 2, 152, - 197, 232, 251, 225, 106, 51, 10, 1, 238, 252, 2, 56, 46, 10, 1, 238, 252, - 2, 152, 197, 46, 10, 1, 238, 252, 2, 152, 197, 232, 251, 225, 106, 51, - 10, 1, 55, 2, 56, 46, 10, 1, 55, 2, 56, 51, 10, 1, 234, 252, 2, 135, 197, - 51, 10, 1, 234, 252, 2, 3, 227, 91, 10, 1, 234, 252, 2, 3, 196, 10, 1, - 216, 2, 125, 10, 1, 231, 226, 2, 135, 197, 224, 236, 46, 10, 1, 231, 226, - 2, 164, 46, 10, 1, 230, 202, 2, 135, 197, 224, 236, 46, 10, 1, 101, 2, 3, - 10, 1, 227, 92, 51, 10, 1, 101, 2, 3, 10, 1, 227, 92, 22, 135, 249, 138, - 10, 1, 230, 202, 2, 3, 10, 1, 227, 92, 22, 135, 249, 138, 10, 1, 231, - 226, 2, 3, 10, 1, 227, 92, 22, 135, 249, 138, 10, 1, 101, 2, 3, 10, 1, - 227, 92, 46, 10, 1, 92, 2, 247, 142, 254, 131, 21, 135, 46, 10, 1, 92, 2, - 247, 142, 254, 131, 21, 152, 46, 10, 1, 247, 107, 62, 2, 247, 142, 254, - 131, 21, 135, 46, 10, 1, 247, 107, 62, 2, 247, 142, 254, 131, 21, 152, - 46, 10, 1, 247, 107, 62, 2, 247, 142, 254, 131, 21, 246, 243, 51, 10, 1, - 224, 145, 2, 247, 142, 254, 131, 21, 135, 46, 10, 1, 224, 145, 2, 247, - 142, 254, 131, 21, 152, 46, 10, 1, 62, 253, 30, 2, 247, 142, 254, 131, - 21, 135, 46, 10, 1, 62, 253, 30, 2, 247, 142, 254, 131, 21, 152, 46, 10, - 1, 101, 2, 247, 142, 254, 131, 21, 246, 243, 51, 10, 1, 230, 202, 2, 247, - 142, 254, 131, 21, 246, 243, 46, 10, 1, 230, 202, 2, 239, 223, 196, 10, - 1, 239, 60, 2, 135, 197, 46, 226, 248, 1, 245, 167, 226, 248, 1, 229, - 118, 226, 248, 1, 234, 250, 226, 248, 1, 232, 22, 226, 248, 1, 253, 69, - 226, 248, 1, 237, 202, 226, 248, 1, 239, 70, 226, 248, 1, 254, 219, 226, - 248, 1, 225, 62, 226, 248, 1, 236, 224, 226, 248, 1, 247, 127, 226, 248, - 1, 250, 21, 226, 248, 1, 226, 250, 226, 248, 1, 238, 40, 226, 248, 1, - 246, 189, 226, 248, 1, 246, 14, 226, 248, 1, 230, 200, 226, 248, 1, 250, - 123, 226, 248, 1, 223, 102, 226, 248, 1, 227, 57, 226, 248, 1, 224, 21, - 226, 248, 1, 233, 161, 226, 248, 1, 239, 172, 226, 248, 1, 251, 185, 226, - 248, 1, 226, 19, 226, 248, 1, 245, 83, 226, 248, 1, 238, 226, 226, 248, - 1, 226, 249, 226, 248, 1, 223, 116, 226, 248, 1, 229, 109, 226, 248, 1, - 231, 28, 226, 248, 1, 250, 187, 226, 248, 1, 96, 226, 248, 1, 223, 27, - 226, 248, 1, 254, 246, 226, 248, 1, 246, 62, 226, 248, 1, 232, 135, 226, - 248, 1, 224, 171, 226, 248, 255, 49, 226, 248, 255, 62, 226, 248, 244, - 70, 226, 248, 248, 34, 226, 248, 225, 166, 226, 248, 234, 51, 226, 248, - 248, 41, 226, 248, 247, 137, 226, 248, 234, 96, 226, 248, 234, 104, 226, - 248, 227, 234, 226, 248, 1, 235, 254, 204, 21, 223, 89, 204, 21, 118, - 204, 21, 113, 204, 21, 166, 204, 21, 158, 204, 21, 173, 204, 21, 183, - 204, 21, 194, 204, 21, 187, 204, 21, 192, 204, 1, 57, 204, 1, 248, 35, - 204, 1, 74, 204, 1, 72, 204, 1, 66, 204, 1, 234, 52, 204, 1, 73, 204, 1, - 250, 177, 204, 1, 199, 204, 1, 253, 70, 204, 1, 213, 204, 1, 227, 107, - 204, 1, 239, 179, 204, 1, 251, 204, 204, 1, 250, 189, 204, 1, 208, 204, - 1, 231, 99, 204, 1, 231, 31, 204, 1, 246, 144, 204, 1, 247, 129, 204, 1, - 177, 204, 1, 238, 43, 204, 1, 236, 2, 224, 102, 204, 1, 198, 204, 1, 234, - 173, 204, 1, 236, 1, 204, 1, 154, 204, 1, 224, 173, 204, 1, 191, 204, 1, - 234, 174, 224, 102, 204, 1, 239, 110, 239, 179, 204, 1, 239, 110, 251, - 204, 204, 1, 239, 110, 208, 204, 36, 229, 63, 201, 226, 118, 204, 36, - 229, 63, 184, 226, 118, 204, 36, 229, 63, 231, 135, 226, 118, 204, 36, - 182, 250, 33, 226, 118, 204, 36, 182, 201, 226, 118, 204, 36, 182, 184, - 226, 118, 204, 36, 182, 231, 135, 226, 118, 204, 36, 235, 228, 76, 204, - 36, 47, 56, 46, 204, 201, 206, 254, 144, 204, 184, 206, 254, 144, 204, - 14, 234, 53, 250, 44, 204, 14, 246, 143, 204, 251, 54, 204, 247, 149, 76, - 204, 238, 25, 94, 5, 252, 19, 94, 5, 254, 160, 94, 5, 224, 211, 94, 1, - 229, 63, 57, 94, 1, 57, 94, 1, 255, 63, 94, 1, 74, 94, 1, 240, 47, 94, 1, - 66, 94, 1, 225, 76, 94, 1, 153, 146, 94, 1, 153, 149, 94, 1, 252, 21, 72, - 94, 1, 229, 63, 72, 94, 1, 72, 94, 1, 254, 253, 94, 1, 252, 21, 73, 94, - 1, 229, 63, 73, 94, 1, 73, 94, 1, 254, 53, 94, 1, 177, 94, 1, 238, 227, - 94, 1, 246, 193, 94, 1, 246, 66, 94, 1, 235, 137, 94, 1, 252, 39, 94, 1, - 251, 204, 94, 1, 239, 179, 94, 1, 239, 160, 94, 1, 234, 173, 94, 1, 226, - 20, 94, 1, 226, 10, 94, 1, 250, 117, 94, 1, 250, 101, 94, 1, 235, 18, 94, - 1, 227, 107, 94, 1, 226, 251, 94, 1, 250, 189, 94, 1, 250, 22, 94, 1, - 236, 1, 94, 1, 235, 10, 94, 1, 213, 94, 1, 233, 97, 94, 1, 253, 70, 94, - 1, 252, 190, 94, 1, 198, 94, 1, 191, 94, 1, 208, 94, 1, 231, 99, 94, 1, - 238, 43, 94, 1, 237, 148, 94, 1, 237, 147, 94, 1, 225, 64, 94, 1, 229, - 146, 94, 1, 228, 110, 94, 1, 231, 31, 94, 1, 154, 94, 5, 234, 202, 94, 5, - 254, 40, 94, 31, 5, 255, 63, 94, 31, 5, 74, 94, 31, 5, 240, 47, 94, 31, - 5, 66, 94, 31, 5, 225, 76, 94, 31, 5, 153, 146, 94, 31, 5, 153, 231, 100, - 94, 31, 5, 252, 21, 72, 94, 31, 5, 229, 63, 72, 94, 31, 5, 72, 94, 31, 5, - 254, 253, 94, 31, 5, 252, 21, 73, 94, 31, 5, 229, 63, 73, 94, 31, 5, 73, - 94, 31, 5, 254, 53, 94, 5, 224, 216, 94, 234, 69, 94, 228, 27, 5, 225, - 161, 94, 228, 27, 5, 254, 162, 94, 245, 237, 255, 41, 94, 255, 33, 255, - 41, 94, 1, 232, 138, 94, 1, 238, 214, 94, 1, 246, 56, 94, 1, 223, 117, - 94, 1, 250, 106, 94, 1, 231, 184, 94, 1, 247, 129, 94, 1, 223, 126, 94, - 1, 153, 231, 100, 94, 1, 153, 237, 149, 94, 31, 5, 153, 149, 94, 31, 5, - 153, 237, 149, 94, 250, 151, 94, 47, 250, 151, 94, 21, 223, 89, 94, 21, - 118, 94, 21, 113, 94, 21, 166, 94, 21, 158, 94, 21, 173, 94, 21, 183, 94, - 21, 194, 94, 21, 187, 94, 21, 192, 94, 255, 48, 53, 94, 5, 201, 228, 144, - 249, 140, 94, 1, 252, 21, 57, 94, 1, 246, 101, 94, 1, 239, 145, 94, 1, - 246, 16, 228, 38, 94, 1, 250, 107, 94, 1, 253, 16, 121, 5, 252, 19, 121, - 5, 254, 160, 121, 5, 224, 211, 121, 1, 57, 121, 1, 255, 63, 121, 1, 74, - 121, 1, 240, 47, 121, 1, 66, 121, 1, 225, 76, 121, 1, 153, 146, 121, 1, - 153, 149, 121, 1, 72, 121, 1, 254, 253, 121, 1, 73, 121, 1, 254, 53, 121, - 1, 177, 121, 1, 238, 227, 121, 1, 246, 193, 121, 1, 246, 66, 121, 1, 235, - 137, 121, 1, 252, 39, 121, 1, 251, 204, 121, 1, 239, 179, 121, 1, 239, - 160, 121, 1, 234, 173, 121, 1, 226, 20, 121, 1, 226, 10, 121, 1, 250, - 117, 121, 1, 250, 101, 121, 1, 235, 18, 121, 1, 227, 107, 121, 1, 226, - 251, 121, 1, 250, 189, 121, 1, 250, 22, 121, 1, 236, 1, 121, 1, 213, 121, - 1, 233, 97, 121, 1, 253, 70, 121, 1, 252, 190, 121, 1, 198, 121, 1, 191, - 121, 1, 208, 121, 1, 238, 43, 121, 1, 229, 146, 121, 1, 228, 110, 121, 1, - 231, 31, 121, 1, 154, 121, 5, 234, 202, 121, 5, 254, 40, 121, 31, 5, 255, - 63, 121, 31, 5, 74, 121, 31, 5, 240, 47, 121, 31, 5, 66, 121, 31, 5, 225, - 76, 121, 31, 5, 153, 146, 121, 31, 5, 153, 231, 100, 121, 31, 5, 72, 121, - 31, 5, 254, 253, 121, 31, 5, 73, 121, 31, 5, 254, 53, 121, 5, 224, 216, - 121, 1, 238, 221, 227, 107, 121, 254, 54, 237, 219, 76, 121, 1, 231, 99, - 121, 1, 231, 184, 121, 1, 223, 126, 121, 1, 153, 231, 100, 121, 1, 153, - 237, 149, 121, 31, 5, 153, 149, 121, 31, 5, 153, 237, 149, 121, 21, 223, - 89, 121, 21, 118, 121, 21, 113, 121, 21, 166, 121, 21, 158, 121, 21, 173, - 121, 21, 183, 121, 21, 194, 121, 21, 187, 121, 21, 192, 121, 1, 232, 25, - 2, 236, 154, 250, 0, 121, 1, 232, 25, 2, 203, 250, 0, 121, 231, 54, 76, - 121, 231, 54, 53, 121, 250, 222, 234, 197, 118, 121, 250, 222, 234, 197, - 113, 121, 250, 222, 234, 197, 166, 121, 250, 222, 234, 197, 158, 121, - 250, 222, 234, 197, 168, 237, 214, 226, 244, 226, 240, 250, 42, 121, 250, - 222, 250, 43, 228, 212, 121, 239, 196, 148, 5, 255, 28, 252, 169, 148, 5, - 252, 169, 148, 5, 224, 211, 148, 1, 57, 148, 1, 255, 63, 148, 1, 74, 148, - 1, 240, 47, 148, 1, 66, 148, 1, 225, 76, 148, 1, 248, 35, 148, 1, 254, - 253, 148, 1, 234, 52, 148, 1, 254, 53, 148, 1, 177, 148, 1, 238, 227, - 148, 1, 246, 193, 148, 1, 246, 66, 148, 1, 235, 137, 148, 1, 252, 39, - 148, 1, 251, 204, 148, 1, 239, 179, 148, 1, 239, 160, 148, 1, 234, 173, - 148, 1, 226, 20, 148, 1, 226, 10, 148, 1, 250, 117, 148, 1, 250, 101, - 148, 1, 235, 18, 148, 1, 227, 107, 148, 1, 226, 251, 148, 1, 250, 189, - 148, 1, 250, 22, 148, 1, 236, 1, 148, 1, 213, 148, 1, 233, 97, 148, 1, - 253, 70, 148, 1, 252, 190, 148, 1, 198, 148, 1, 191, 148, 1, 208, 148, 1, - 238, 43, 148, 1, 237, 148, 148, 1, 225, 64, 148, 1, 229, 146, 148, 1, - 231, 31, 148, 1, 154, 148, 5, 234, 202, 148, 31, 5, 255, 63, 148, 31, 5, - 74, 148, 31, 5, 240, 47, 148, 31, 5, 66, 148, 31, 5, 225, 76, 148, 31, 5, - 248, 35, 148, 31, 5, 254, 253, 148, 31, 5, 234, 52, 148, 31, 5, 254, 53, - 148, 5, 224, 216, 148, 5, 225, 162, 148, 1, 238, 214, 148, 1, 246, 56, - 148, 1, 223, 117, 148, 1, 231, 99, 148, 1, 247, 129, 148, 21, 223, 89, - 148, 21, 118, 148, 21, 113, 148, 21, 166, 148, 21, 158, 148, 21, 173, - 148, 21, 183, 148, 21, 194, 148, 21, 187, 148, 21, 192, 148, 226, 148, - 148, 255, 27, 148, 239, 209, 148, 225, 99, 148, 248, 9, 234, 57, 148, 5, - 224, 0, 137, 5, 252, 19, 137, 5, 254, 160, 137, 5, 224, 211, 137, 1, 57, - 137, 1, 255, 63, 137, 1, 74, 137, 1, 240, 47, 137, 1, 66, 137, 1, 225, - 76, 137, 1, 153, 146, 137, 1, 153, 149, 137, 31, 252, 21, 72, 137, 1, 72, - 137, 1, 254, 253, 137, 31, 252, 21, 73, 137, 1, 73, 137, 1, 254, 53, 137, - 1, 177, 137, 1, 238, 227, 137, 1, 246, 193, 137, 1, 246, 66, 137, 1, 235, - 137, 137, 1, 252, 39, 137, 1, 251, 204, 137, 1, 239, 179, 137, 1, 239, - 160, 137, 1, 234, 173, 137, 1, 226, 20, 137, 1, 226, 10, 137, 1, 250, - 117, 137, 1, 250, 101, 137, 1, 235, 18, 137, 1, 227, 107, 137, 1, 226, - 251, 137, 1, 250, 189, 137, 1, 250, 22, 137, 1, 236, 1, 137, 1, 213, 137, - 1, 233, 97, 137, 1, 253, 70, 137, 1, 252, 190, 137, 1, 198, 137, 1, 191, - 137, 1, 208, 137, 1, 238, 43, 137, 1, 237, 148, 137, 1, 225, 64, 137, 1, - 229, 146, 137, 1, 228, 110, 137, 1, 231, 31, 137, 1, 154, 137, 5, 234, - 202, 137, 5, 254, 40, 137, 31, 5, 255, 63, 137, 31, 5, 74, 137, 31, 5, - 240, 47, 137, 31, 5, 66, 137, 31, 5, 225, 76, 137, 31, 5, 153, 146, 137, - 31, 5, 153, 231, 100, 137, 31, 5, 252, 21, 72, 137, 31, 5, 72, 137, 31, - 5, 254, 253, 137, 31, 5, 252, 21, 73, 137, 31, 5, 73, 137, 31, 5, 254, - 53, 137, 5, 224, 216, 137, 234, 69, 137, 1, 153, 231, 100, 137, 1, 153, - 237, 149, 137, 31, 5, 153, 149, 137, 31, 5, 153, 237, 149, 137, 21, 223, - 89, 137, 21, 118, 137, 21, 113, 137, 21, 166, 137, 21, 158, 137, 21, 173, - 137, 21, 183, 137, 21, 194, 137, 21, 187, 137, 21, 192, 137, 231, 54, 53, - 134, 5, 252, 19, 134, 5, 254, 160, 134, 5, 224, 211, 134, 1, 57, 134, 1, - 255, 63, 134, 1, 74, 134, 1, 240, 47, 134, 1, 66, 134, 1, 225, 76, 134, - 1, 153, 146, 134, 1, 153, 149, 134, 1, 72, 134, 1, 254, 253, 134, 1, 73, - 134, 1, 254, 53, 134, 1, 177, 134, 1, 238, 227, 134, 1, 246, 193, 134, 1, - 246, 66, 134, 1, 235, 137, 134, 1, 252, 39, 134, 1, 251, 204, 134, 1, - 239, 179, 134, 1, 239, 160, 134, 1, 234, 173, 134, 1, 226, 20, 134, 1, - 226, 10, 134, 1, 250, 117, 134, 1, 250, 101, 134, 1, 235, 18, 134, 1, - 227, 107, 134, 1, 226, 251, 134, 1, 250, 189, 134, 1, 250, 22, 134, 1, - 236, 1, 134, 1, 213, 134, 1, 233, 97, 134, 1, 253, 70, 134, 1, 252, 190, - 134, 1, 198, 134, 1, 191, 134, 1, 208, 134, 1, 238, 43, 134, 1, 237, 148, - 134, 1, 225, 64, 134, 1, 229, 146, 134, 1, 228, 110, 134, 1, 231, 31, - 134, 1, 154, 134, 5, 234, 202, 134, 5, 254, 40, 134, 31, 5, 255, 63, 134, - 31, 5, 74, 134, 31, 5, 240, 47, 134, 31, 5, 66, 134, 31, 5, 225, 76, 134, - 31, 5, 153, 146, 134, 31, 5, 153, 231, 100, 134, 31, 5, 72, 134, 31, 5, - 254, 253, 134, 31, 5, 73, 134, 31, 5, 254, 53, 134, 5, 224, 216, 134, - 254, 254, 237, 219, 76, 134, 254, 54, 237, 219, 76, 134, 1, 231, 99, 134, - 1, 231, 184, 134, 1, 223, 126, 134, 1, 153, 231, 100, 134, 1, 153, 237, - 149, 134, 31, 5, 153, 149, 134, 31, 5, 153, 237, 149, 134, 21, 223, 89, - 134, 21, 118, 134, 21, 113, 134, 21, 166, 134, 21, 158, 134, 21, 173, - 134, 21, 183, 134, 21, 194, 134, 21, 187, 134, 21, 192, 134, 239, 196, - 134, 1, 224, 173, 160, 5, 254, 160, 160, 5, 224, 211, 160, 1, 57, 160, 1, - 255, 63, 160, 1, 74, 160, 1, 240, 47, 160, 1, 66, 160, 1, 225, 76, 160, - 1, 72, 160, 1, 248, 35, 160, 1, 254, 253, 160, 1, 73, 160, 1, 234, 52, - 160, 1, 254, 53, 160, 1, 177, 160, 1, 235, 137, 160, 1, 252, 39, 160, 1, - 239, 179, 160, 1, 234, 173, 160, 1, 226, 20, 160, 1, 235, 18, 160, 1, - 227, 107, 160, 1, 236, 1, 160, 1, 235, 10, 160, 1, 213, 160, 1, 198, 160, - 1, 191, 160, 1, 208, 160, 1, 231, 99, 160, 1, 238, 43, 160, 1, 237, 148, - 160, 1, 237, 147, 160, 1, 225, 64, 160, 1, 229, 146, 160, 1, 228, 110, - 160, 1, 231, 31, 160, 1, 154, 160, 31, 5, 255, 63, 160, 31, 5, 74, 160, - 31, 5, 240, 47, 160, 31, 5, 66, 160, 31, 5, 225, 76, 160, 31, 5, 72, 160, - 31, 5, 248, 35, 160, 31, 5, 254, 253, 160, 31, 5, 73, 160, 31, 5, 234, - 52, 160, 31, 5, 254, 53, 160, 5, 224, 216, 160, 234, 69, 160, 254, 54, - 237, 219, 76, 160, 21, 223, 89, 160, 21, 118, 160, 21, 113, 160, 21, 166, - 160, 21, 158, 160, 21, 173, 160, 21, 183, 160, 21, 194, 160, 21, 187, - 160, 21, 192, 160, 65, 227, 23, 160, 65, 168, 244, 135, 160, 65, 168, - 226, 194, 160, 250, 121, 53, 160, 236, 88, 53, 160, 223, 226, 53, 160, - 250, 74, 53, 160, 250, 250, 53, 160, 254, 87, 64, 53, 160, 231, 54, 53, - 160, 65, 53, 119, 5, 252, 19, 119, 5, 254, 160, 119, 5, 224, 211, 119, 1, - 57, 119, 1, 255, 63, 119, 1, 74, 119, 1, 240, 47, 119, 1, 66, 119, 1, - 225, 76, 119, 1, 153, 146, 119, 1, 153, 149, 119, 1, 72, 119, 1, 248, 35, - 119, 1, 254, 253, 119, 1, 73, 119, 1, 234, 52, 119, 1, 254, 53, 119, 1, - 177, 119, 1, 238, 227, 119, 1, 246, 193, 119, 1, 246, 66, 119, 1, 235, - 137, 119, 1, 252, 39, 119, 1, 251, 204, 119, 1, 239, 179, 119, 1, 239, - 160, 119, 1, 234, 173, 119, 1, 226, 20, 119, 1, 226, 10, 119, 1, 250, - 117, 119, 1, 250, 101, 119, 1, 235, 18, 119, 1, 227, 107, 119, 1, 226, - 251, 119, 1, 250, 189, 119, 1, 250, 22, 119, 1, 236, 1, 119, 1, 213, 119, - 1, 233, 97, 119, 1, 253, 70, 119, 1, 252, 190, 119, 1, 198, 119, 1, 191, - 119, 1, 208, 119, 1, 231, 99, 119, 1, 238, 43, 119, 1, 237, 148, 119, 1, - 225, 64, 119, 1, 229, 146, 119, 1, 228, 110, 119, 1, 231, 31, 119, 1, - 154, 119, 5, 254, 40, 119, 31, 5, 255, 63, 119, 31, 5, 74, 119, 31, 5, - 240, 47, 119, 31, 5, 66, 119, 31, 5, 225, 76, 119, 31, 5, 153, 146, 119, - 31, 5, 153, 231, 100, 119, 31, 5, 72, 119, 31, 5, 248, 35, 119, 31, 5, - 254, 253, 119, 31, 5, 73, 119, 31, 5, 234, 52, 119, 31, 5, 254, 53, 119, - 5, 224, 216, 119, 237, 219, 76, 119, 254, 254, 237, 219, 76, 119, 1, 226, - 44, 119, 1, 248, 70, 119, 1, 153, 231, 100, 119, 1, 153, 237, 149, 119, - 31, 5, 153, 149, 119, 31, 5, 153, 237, 149, 119, 21, 223, 89, 119, 21, - 118, 119, 21, 113, 119, 21, 166, 119, 21, 158, 119, 21, 173, 119, 21, - 183, 119, 21, 194, 119, 21, 187, 119, 21, 192, 119, 246, 235, 21, 223, - 90, 32, 234, 90, 232, 232, 106, 158, 119, 246, 235, 21, 168, 32, 234, 90, - 232, 232, 106, 158, 119, 246, 235, 21, 135, 32, 234, 90, 232, 232, 106, - 158, 119, 246, 235, 21, 152, 32, 234, 90, 232, 232, 106, 158, 119, 246, - 235, 21, 168, 32, 247, 158, 232, 232, 106, 158, 119, 246, 235, 21, 135, - 32, 247, 158, 232, 232, 106, 158, 119, 246, 235, 21, 152, 32, 247, 158, - 232, 232, 106, 158, 119, 5, 225, 226, 129, 5, 254, 160, 129, 5, 224, 211, - 129, 1, 57, 129, 1, 255, 63, 129, 1, 74, 129, 1, 240, 47, 129, 1, 66, - 129, 1, 225, 76, 129, 1, 153, 146, 129, 1, 153, 149, 129, 1, 72, 129, 1, - 248, 35, 129, 1, 254, 253, 129, 1, 73, 129, 1, 234, 52, 129, 1, 254, 53, - 129, 1, 177, 129, 1, 238, 227, 129, 1, 246, 193, 129, 1, 246, 66, 129, 1, - 235, 137, 129, 1, 252, 39, 129, 1, 251, 204, 129, 1, 239, 179, 129, 1, - 239, 160, 129, 1, 234, 173, 129, 1, 226, 20, 129, 1, 226, 10, 129, 1, - 250, 117, 129, 1, 250, 101, 129, 1, 235, 18, 129, 1, 227, 107, 129, 1, - 226, 251, 129, 1, 250, 189, 129, 1, 250, 22, 129, 1, 236, 1, 129, 1, 213, - 129, 1, 233, 97, 129, 1, 253, 70, 129, 1, 252, 190, 129, 1, 198, 129, 1, - 191, 129, 1, 208, 129, 1, 231, 99, 129, 1, 238, 43, 129, 1, 237, 148, - 129, 1, 225, 64, 129, 1, 229, 146, 129, 1, 228, 110, 129, 1, 231, 31, - 129, 1, 154, 129, 5, 234, 202, 129, 5, 254, 40, 129, 31, 5, 255, 63, 129, - 31, 5, 74, 129, 31, 5, 240, 47, 129, 31, 5, 66, 129, 31, 5, 225, 76, 129, - 31, 5, 153, 146, 129, 31, 5, 153, 231, 100, 129, 31, 5, 72, 129, 31, 5, - 248, 35, 129, 31, 5, 254, 253, 129, 31, 5, 73, 129, 31, 5, 234, 52, 129, - 31, 5, 254, 53, 129, 5, 224, 216, 129, 237, 219, 76, 129, 254, 254, 237, - 219, 76, 129, 1, 247, 129, 129, 1, 153, 231, 100, 129, 1, 153, 237, 149, - 129, 31, 5, 153, 149, 129, 31, 5, 153, 237, 149, 129, 21, 223, 89, 129, - 21, 118, 129, 21, 113, 129, 21, 166, 129, 21, 158, 129, 21, 173, 129, 21, - 183, 129, 21, 194, 129, 21, 187, 129, 21, 192, 129, 5, 239, 150, 129, 5, - 225, 114, 114, 5, 254, 160, 114, 5, 224, 211, 114, 1, 57, 114, 1, 255, - 63, 114, 1, 74, 114, 1, 240, 47, 114, 1, 66, 114, 1, 225, 76, 114, 1, - 153, 146, 114, 1, 153, 149, 114, 1, 72, 114, 1, 248, 35, 114, 1, 254, - 253, 114, 1, 73, 114, 1, 234, 52, 114, 1, 254, 53, 114, 1, 177, 114, 1, - 238, 227, 114, 1, 246, 193, 114, 1, 246, 66, 114, 1, 235, 137, 114, 1, - 252, 39, 114, 1, 251, 204, 114, 1, 239, 179, 114, 1, 239, 160, 114, 1, - 234, 173, 114, 1, 226, 20, 114, 1, 226, 10, 114, 1, 250, 117, 114, 1, - 250, 101, 114, 1, 235, 18, 114, 1, 227, 107, 114, 1, 226, 251, 114, 1, - 250, 189, 114, 1, 250, 22, 114, 1, 236, 1, 114, 1, 213, 114, 1, 233, 97, - 114, 1, 253, 70, 114, 1, 252, 190, 114, 1, 198, 114, 1, 191, 114, 1, 208, - 114, 1, 231, 99, 114, 1, 238, 43, 114, 1, 237, 148, 114, 1, 237, 147, - 114, 1, 225, 64, 114, 1, 229, 146, 114, 1, 228, 110, 114, 1, 231, 31, - 114, 1, 154, 114, 5, 254, 40, 114, 31, 5, 255, 63, 114, 31, 5, 74, 114, - 31, 5, 240, 47, 114, 31, 5, 66, 114, 31, 5, 225, 76, 114, 31, 5, 153, - 146, 114, 31, 5, 153, 231, 100, 114, 31, 5, 72, 114, 31, 5, 248, 35, 114, - 31, 5, 254, 253, 114, 31, 5, 73, 114, 31, 5, 234, 52, 114, 31, 5, 254, - 53, 114, 5, 224, 216, 114, 254, 54, 237, 219, 76, 114, 1, 153, 231, 100, - 114, 1, 153, 237, 149, 114, 31, 5, 153, 149, 114, 31, 5, 153, 237, 149, - 114, 21, 223, 89, 114, 21, 118, 114, 21, 113, 114, 21, 166, 114, 21, 158, - 114, 21, 173, 114, 21, 183, 114, 21, 194, 114, 21, 187, 114, 21, 192, - 114, 65, 227, 23, 114, 65, 168, 244, 135, 114, 65, 168, 226, 194, 114, - 246, 235, 168, 232, 76, 114, 246, 235, 168, 245, 151, 114, 246, 235, 152, - 232, 74, 114, 250, 125, 76, 114, 1, 251, 162, 235, 19, 114, 1, 251, 162, - 199, 114, 1, 251, 162, 231, 100, 114, 1, 251, 162, 149, 114, 1, 251, 162, - 237, 149, 114, 1, 251, 162, 239, 76, 147, 5, 254, 159, 147, 5, 224, 210, - 147, 1, 254, 32, 147, 1, 255, 54, 147, 1, 255, 13, 147, 1, 255, 17, 147, - 1, 239, 187, 147, 1, 240, 46, 147, 1, 225, 69, 147, 1, 225, 71, 147, 1, - 239, 207, 147, 1, 239, 208, 147, 1, 240, 32, 147, 1, 240, 34, 147, 1, - 247, 138, 147, 1, 248, 31, 147, 1, 254, 242, 147, 1, 233, 247, 147, 1, - 234, 47, 147, 1, 254, 43, 147, 1, 254, 208, 239, 8, 147, 1, 237, 54, 239, - 8, 147, 1, 254, 208, 246, 147, 147, 1, 237, 54, 246, 147, 147, 1, 239, - 42, 235, 251, 147, 1, 230, 248, 246, 147, 147, 1, 254, 208, 251, 249, - 147, 1, 237, 54, 251, 249, 147, 1, 254, 208, 239, 171, 147, 1, 237, 54, - 239, 171, 147, 1, 227, 102, 235, 251, 147, 1, 227, 102, 230, 247, 235, - 252, 147, 1, 230, 248, 239, 171, 147, 1, 254, 208, 226, 18, 147, 1, 237, - 54, 226, 18, 147, 1, 254, 208, 250, 108, 147, 1, 237, 54, 250, 108, 147, - 1, 236, 26, 235, 218, 147, 1, 230, 248, 250, 108, 147, 1, 254, 208, 227, - 52, 147, 1, 237, 54, 227, 52, 147, 1, 254, 208, 250, 120, 147, 1, 237, - 54, 250, 120, 147, 1, 250, 148, 235, 218, 147, 1, 230, 248, 250, 120, - 147, 1, 254, 208, 233, 157, 147, 1, 237, 54, 233, 157, 147, 1, 254, 208, - 253, 17, 147, 1, 237, 54, 253, 17, 147, 1, 236, 251, 147, 1, 254, 195, - 253, 17, 147, 1, 223, 232, 147, 1, 231, 249, 147, 1, 250, 148, 237, 251, - 147, 1, 225, 44, 147, 1, 227, 102, 230, 233, 147, 1, 236, 26, 230, 233, - 147, 1, 250, 148, 230, 233, 147, 1, 245, 125, 147, 1, 236, 26, 237, 251, - 147, 1, 247, 99, 147, 5, 254, 232, 147, 31, 5, 255, 16, 147, 31, 5, 238, - 235, 255, 18, 147, 31, 5, 249, 231, 255, 18, 147, 31, 5, 238, 235, 239, - 204, 147, 31, 5, 249, 231, 239, 204, 147, 31, 5, 238, 235, 233, 240, 147, - 31, 5, 249, 231, 233, 240, 147, 31, 5, 246, 182, 147, 31, 5, 238, 144, - 147, 31, 5, 249, 231, 238, 144, 147, 31, 5, 238, 146, 250, 58, 147, 31, - 5, 238, 145, 245, 168, 255, 16, 147, 31, 5, 238, 145, 245, 168, 249, 231, - 255, 16, 147, 31, 5, 238, 145, 245, 168, 246, 146, 147, 31, 5, 246, 146, - 147, 31, 5, 249, 231, 246, 182, 147, 31, 5, 249, 231, 246, 146, 147, 232, - 171, 238, 98, 128, 116, 238, 151, 239, 56, 128, 116, 238, 209, 238, 224, - 128, 116, 238, 209, 238, 203, 128, 116, 238, 209, 238, 202, 128, 116, - 238, 209, 238, 206, 128, 116, 238, 209, 232, 7, 128, 116, 235, 108, 235, - 99, 128, 116, 251, 151, 251, 196, 128, 116, 251, 151, 251, 159, 128, 116, - 251, 151, 251, 195, 128, 116, 228, 170, 228, 169, 128, 116, 251, 151, - 251, 148, 128, 116, 223, 184, 223, 191, 128, 116, 249, 162, 251, 201, - 128, 116, 180, 233, 165, 128, 116, 226, 202, 226, 243, 128, 116, 226, - 202, 235, 234, 128, 116, 226, 202, 233, 72, 128, 116, 235, 7, 235, 155, - 128, 116, 249, 162, 250, 59, 128, 116, 180, 227, 71, 128, 116, 226, 202, - 226, 183, 128, 116, 226, 202, 226, 247, 128, 116, 226, 202, 226, 199, - 128, 116, 235, 7, 234, 206, 128, 116, 252, 139, 253, 54, 128, 116, 233, - 5, 233, 24, 128, 116, 233, 80, 233, 74, 128, 116, 247, 8, 247, 129, 128, - 116, 233, 80, 233, 93, 128, 116, 247, 8, 247, 111, 128, 116, 233, 80, - 231, 0, 128, 116, 236, 104, 198, 128, 116, 223, 184, 224, 1, 128, 116, - 231, 123, 231, 69, 128, 116, 231, 70, 128, 116, 237, 144, 237, 164, 128, - 116, 237, 110, 128, 116, 224, 106, 224, 169, 128, 116, 228, 170, 231, 11, - 128, 116, 228, 170, 231, 50, 128, 116, 228, 170, 228, 5, 128, 116, 244, - 228, 245, 59, 128, 116, 237, 144, 251, 135, 128, 116, 130, 254, 184, 128, - 116, 244, 228, 235, 2, 128, 116, 233, 230, 128, 116, 230, 243, 57, 128, - 116, 237, 49, 245, 147, 128, 116, 230, 243, 255, 63, 128, 116, 230, 243, - 254, 199, 128, 116, 230, 243, 74, 128, 116, 230, 243, 240, 47, 128, 116, - 230, 243, 225, 159, 128, 116, 230, 243, 225, 158, 128, 116, 230, 243, 66, - 128, 116, 230, 243, 225, 76, 128, 116, 233, 82, 128, 250, 222, 14, 253, - 55, 128, 116, 230, 243, 72, 128, 116, 230, 243, 255, 19, 128, 116, 230, - 243, 73, 128, 116, 230, 243, 254, 254, 237, 45, 128, 116, 230, 243, 254, - 254, 237, 46, 128, 116, 238, 23, 128, 116, 237, 42, 128, 116, 237, 43, - 128, 116, 237, 49, 248, 8, 128, 116, 237, 49, 226, 201, 128, 116, 237, - 49, 226, 81, 128, 116, 237, 49, 251, 186, 128, 116, 226, 241, 128, 116, - 235, 66, 128, 116, 223, 251, 128, 116, 247, 4, 128, 21, 223, 89, 128, 21, - 118, 128, 21, 113, 128, 21, 166, 128, 21, 158, 128, 21, 173, 128, 21, - 183, 128, 21, 194, 128, 21, 187, 128, 21, 192, 128, 116, 254, 183, 128, - 116, 238, 207, 179, 1, 238, 150, 179, 1, 238, 209, 227, 226, 179, 1, 238, - 209, 227, 75, 179, 1, 235, 107, 179, 1, 251, 68, 179, 1, 228, 170, 227, - 75, 179, 1, 234, 152, 179, 1, 249, 161, 179, 1, 96, 179, 1, 226, 202, - 227, 226, 179, 1, 226, 202, 227, 75, 179, 1, 235, 6, 179, 1, 252, 138, - 179, 1, 233, 4, 179, 1, 233, 80, 227, 226, 179, 1, 247, 8, 227, 75, 179, - 1, 233, 80, 227, 75, 179, 1, 247, 8, 227, 226, 179, 1, 236, 103, 179, 1, - 223, 183, 179, 1, 237, 144, 237, 164, 179, 1, 237, 144, 237, 123, 179, 1, - 224, 105, 179, 1, 228, 170, 227, 226, 179, 1, 244, 228, 227, 226, 179, 1, - 73, 179, 1, 244, 228, 227, 75, 179, 247, 249, 179, 31, 5, 57, 179, 31, 5, - 237, 49, 239, 46, 179, 31, 5, 255, 63, 179, 31, 5, 254, 199, 179, 31, 5, - 74, 179, 31, 5, 240, 47, 179, 31, 5, 224, 25, 179, 31, 5, 223, 127, 179, - 31, 5, 66, 179, 31, 5, 225, 76, 179, 31, 5, 237, 49, 238, 142, 179, 229, - 181, 5, 237, 143, 179, 229, 181, 5, 234, 152, 179, 31, 5, 72, 179, 31, 5, - 248, 22, 179, 31, 5, 73, 179, 31, 5, 254, 34, 179, 31, 5, 254, 253, 179, - 238, 151, 238, 43, 179, 206, 237, 49, 248, 8, 179, 206, 237, 49, 226, - 201, 179, 206, 237, 49, 226, 175, 179, 206, 237, 49, 251, 255, 179, 252, - 23, 76, 179, 235, 72, 179, 21, 223, 89, 179, 21, 118, 179, 21, 113, 179, - 21, 166, 179, 21, 158, 179, 21, 173, 179, 21, 183, 179, 21, 194, 179, 21, - 187, 179, 21, 192, 179, 244, 228, 235, 6, 179, 244, 228, 236, 103, 54, 4, - 234, 69, 54, 165, 245, 220, 223, 195, 236, 174, 226, 50, 57, 54, 165, - 245, 220, 223, 195, 236, 174, 255, 68, 231, 127, 252, 240, 198, 54, 165, - 245, 220, 223, 195, 236, 174, 255, 68, 245, 220, 226, 35, 198, 54, 165, - 59, 223, 195, 236, 174, 236, 237, 198, 54, 165, 251, 79, 223, 195, 236, - 174, 229, 152, 198, 54, 165, 252, 10, 223, 195, 236, 174, 233, 73, 229, - 140, 198, 54, 165, 223, 195, 236, 174, 226, 35, 229, 140, 198, 54, 165, - 230, 231, 229, 139, 54, 165, 252, 93, 223, 195, 236, 173, 54, 165, 252, - 152, 229, 68, 223, 195, 236, 173, 54, 165, 239, 226, 226, 34, 54, 165, - 250, 53, 226, 35, 252, 92, 54, 165, 229, 139, 54, 165, 234, 156, 229, - 139, 54, 165, 226, 35, 229, 139, 54, 165, 234, 156, 226, 35, 229, 139, - 54, 165, 231, 142, 251, 177, 228, 122, 229, 139, 54, 165, 231, 187, 245, - 244, 229, 139, 54, 165, 252, 10, 255, 72, 231, 73, 236, 236, 182, 252, - 26, 54, 165, 245, 220, 226, 34, 54, 237, 137, 5, 251, 202, 231, 72, 54, - 237, 137, 5, 237, 203, 231, 72, 54, 254, 66, 5, 229, 149, 246, 134, 255, - 73, 231, 72, 54, 254, 66, 5, 255, 70, 213, 54, 254, 66, 5, 230, 214, 226, - 30, 54, 5, 231, 246, 249, 173, 246, 133, 54, 5, 231, 246, 249, 173, 246, - 13, 54, 5, 231, 246, 249, 173, 245, 221, 54, 5, 231, 246, 235, 249, 246, - 133, 54, 5, 231, 246, 235, 249, 246, 13, 54, 5, 231, 246, 249, 173, 231, - 246, 235, 248, 54, 21, 223, 89, 54, 21, 118, 54, 21, 113, 54, 21, 166, - 54, 21, 158, 54, 21, 173, 54, 21, 183, 54, 21, 194, 54, 21, 187, 54, 21, - 192, 54, 21, 132, 118, 54, 21, 132, 113, 54, 21, 132, 166, 54, 21, 132, - 158, 54, 21, 132, 173, 54, 21, 132, 183, 54, 21, 132, 194, 54, 21, 132, - 187, 54, 21, 132, 192, 54, 21, 132, 223, 89, 54, 165, 252, 95, 231, 72, - 54, 165, 235, 131, 252, 46, 234, 164, 223, 29, 54, 165, 252, 10, 255, 72, - 231, 73, 252, 47, 236, 138, 252, 26, 54, 165, 235, 131, 252, 46, 229, - 150, 231, 72, 54, 165, 251, 183, 236, 173, 54, 165, 226, 45, 255, 69, 54, - 165, 245, 209, 231, 73, 245, 174, 54, 165, 245, 209, 231, 73, 245, 180, - 54, 165, 254, 185, 238, 220, 245, 174, 54, 165, 254, 185, 238, 220, 245, - 180, 54, 5, 223, 245, 226, 33, 54, 5, 237, 25, 226, 33, 54, 1, 177, 54, - 1, 238, 227, 54, 1, 246, 193, 54, 1, 246, 66, 54, 1, 235, 137, 54, 1, - 252, 39, 54, 1, 251, 204, 54, 1, 239, 179, 54, 1, 234, 173, 54, 1, 226, - 20, 54, 1, 226, 10, 54, 1, 250, 117, 54, 1, 250, 101, 54, 1, 235, 18, 54, - 1, 227, 107, 54, 1, 226, 251, 54, 1, 250, 189, 54, 1, 250, 22, 54, 1, - 236, 1, 54, 1, 213, 54, 1, 233, 97, 54, 1, 253, 70, 54, 1, 252, 190, 54, - 1, 198, 54, 1, 226, 44, 54, 1, 226, 37, 54, 1, 248, 70, 54, 1, 248, 66, - 54, 1, 224, 173, 54, 1, 223, 85, 54, 1, 223, 117, 54, 1, 255, 75, 54, 1, - 191, 54, 1, 208, 54, 1, 238, 43, 54, 1, 229, 146, 54, 1, 228, 110, 54, 1, - 231, 31, 54, 1, 154, 54, 1, 57, 54, 1, 238, 110, 54, 1, 247, 34, 208, 54, - 1, 238, 167, 54, 1, 231, 99, 54, 31, 5, 255, 63, 54, 31, 5, 74, 54, 31, - 5, 240, 47, 54, 31, 5, 66, 54, 31, 5, 225, 76, 54, 31, 5, 153, 146, 54, - 31, 5, 153, 231, 100, 54, 31, 5, 153, 149, 54, 31, 5, 153, 237, 149, 54, - 31, 5, 72, 54, 31, 5, 248, 35, 54, 31, 5, 73, 54, 31, 5, 234, 52, 54, 5, - 231, 128, 228, 7, 235, 138, 231, 122, 54, 5, 231, 127, 252, 239, 54, 31, - 5, 200, 74, 54, 31, 5, 200, 240, 47, 54, 5, 234, 164, 223, 30, 235, 255, - 250, 189, 54, 5, 228, 178, 237, 245, 54, 165, 245, 153, 54, 165, 233, - 221, 54, 5, 237, 248, 231, 72, 54, 5, 223, 249, 231, 72, 54, 5, 237, 249, - 226, 45, 252, 26, 54, 5, 236, 238, 252, 26, 54, 5, 245, 223, 252, 27, - 231, 185, 54, 5, 245, 223, 236, 230, 231, 185, 54, 228, 0, 1, 177, 54, - 228, 0, 1, 238, 227, 54, 228, 0, 1, 246, 193, 54, 228, 0, 1, 246, 66, 54, - 228, 0, 1, 235, 137, 54, 228, 0, 1, 252, 39, 54, 228, 0, 1, 251, 204, 54, - 228, 0, 1, 239, 179, 54, 228, 0, 1, 234, 173, 54, 228, 0, 1, 226, 20, 54, - 228, 0, 1, 226, 10, 54, 228, 0, 1, 250, 117, 54, 228, 0, 1, 250, 101, 54, - 228, 0, 1, 235, 18, 54, 228, 0, 1, 227, 107, 54, 228, 0, 1, 226, 251, 54, - 228, 0, 1, 250, 189, 54, 228, 0, 1, 250, 22, 54, 228, 0, 1, 236, 1, 54, - 228, 0, 1, 213, 54, 228, 0, 1, 233, 97, 54, 228, 0, 1, 253, 70, 54, 228, - 0, 1, 252, 190, 54, 228, 0, 1, 198, 54, 228, 0, 1, 226, 44, 54, 228, 0, - 1, 226, 37, 54, 228, 0, 1, 248, 70, 54, 228, 0, 1, 248, 66, 54, 228, 0, - 1, 224, 173, 54, 228, 0, 1, 223, 85, 54, 228, 0, 1, 223, 117, 54, 228, 0, - 1, 255, 75, 54, 228, 0, 1, 191, 54, 228, 0, 1, 208, 54, 228, 0, 1, 238, - 43, 54, 228, 0, 1, 229, 146, 54, 228, 0, 1, 228, 110, 54, 228, 0, 1, 231, - 31, 54, 228, 0, 1, 154, 54, 228, 0, 1, 57, 54, 228, 0, 1, 238, 110, 54, - 228, 0, 1, 247, 34, 224, 173, 54, 228, 0, 1, 247, 34, 191, 54, 228, 0, 1, - 247, 34, 208, 54, 238, 108, 231, 71, 238, 227, 54, 238, 108, 231, 71, - 238, 228, 252, 47, 236, 138, 252, 26, 54, 252, 17, 5, 112, 252, 234, 54, - 252, 17, 5, 157, 252, 234, 54, 252, 17, 5, 252, 18, 227, 43, 54, 252, 17, - 5, 230, 230, 255, 74, 54, 14, 248, 116, 252, 90, 54, 14, 231, 245, 231, - 129, 54, 14, 233, 234, 246, 132, 54, 14, 231, 245, 231, 130, 231, 187, - 245, 243, 54, 14, 233, 73, 213, 54, 14, 234, 248, 252, 90, 54, 14, 234, - 248, 252, 91, 234, 156, 255, 71, 54, 14, 234, 248, 252, 91, 245, 222, - 255, 71, 54, 14, 234, 248, 252, 91, 252, 47, 255, 71, 54, 5, 231, 246, - 235, 249, 231, 246, 249, 172, 54, 5, 231, 246, 235, 249, 245, 221, 54, - 165, 252, 94, 229, 68, 246, 47, 236, 174, 231, 186, 54, 165, 236, 105, - 223, 195, 246, 47, 236, 174, 231, 186, 54, 165, 234, 156, 226, 34, 54, - 165, 59, 252, 110, 231, 124, 223, 195, 236, 174, 236, 237, 198, 54, 165, - 251, 79, 252, 110, 231, 124, 223, 195, 236, 174, 229, 152, 198, 69, 1, - 177, 69, 1, 238, 227, 69, 1, 246, 193, 69, 1, 246, 66, 69, 1, 235, 137, - 69, 1, 252, 39, 69, 1, 251, 204, 69, 1, 239, 179, 69, 1, 239, 160, 69, 1, - 234, 173, 69, 1, 235, 8, 69, 1, 226, 20, 69, 1, 226, 10, 69, 1, 250, 117, - 69, 1, 250, 101, 69, 1, 235, 18, 69, 1, 227, 107, 69, 1, 226, 251, 69, 1, - 250, 189, 69, 1, 250, 22, 69, 1, 236, 1, 69, 1, 213, 69, 1, 233, 97, 69, - 1, 253, 70, 69, 1, 252, 190, 69, 1, 198, 69, 1, 191, 69, 1, 208, 69, 1, - 238, 43, 69, 1, 224, 173, 69, 1, 231, 31, 69, 1, 154, 69, 1, 237, 148, - 69, 1, 57, 69, 1, 229, 131, 57, 69, 1, 74, 69, 1, 240, 47, 69, 1, 66, 69, - 1, 225, 76, 69, 1, 72, 69, 1, 236, 95, 72, 69, 1, 73, 69, 1, 254, 53, 69, - 31, 5, 227, 77, 255, 63, 69, 31, 5, 255, 63, 69, 31, 5, 74, 69, 31, 5, - 240, 47, 69, 31, 5, 66, 69, 31, 5, 225, 76, 69, 31, 5, 72, 69, 31, 5, - 254, 253, 69, 31, 5, 236, 95, 240, 47, 69, 31, 5, 236, 95, 73, 69, 31, 5, - 161, 46, 69, 5, 254, 160, 69, 5, 56, 51, 69, 5, 224, 211, 69, 5, 224, - 216, 69, 5, 254, 84, 69, 251, 33, 5, 124, 191, 69, 251, 33, 5, 124, 208, - 69, 251, 33, 5, 124, 224, 173, 69, 251, 33, 5, 124, 154, 69, 1, 245, 233, - 231, 31, 69, 21, 223, 89, 69, 21, 118, 69, 21, 113, 69, 21, 166, 69, 21, - 158, 69, 21, 173, 69, 21, 183, 69, 21, 194, 69, 21, 187, 69, 21, 192, 69, - 5, 237, 155, 230, 205, 69, 5, 230, 205, 69, 14, 237, 140, 69, 14, 251, - 49, 69, 14, 255, 11, 69, 14, 246, 119, 69, 1, 229, 146, 69, 1, 228, 110, - 69, 1, 153, 146, 69, 1, 153, 231, 100, 69, 1, 153, 149, 69, 1, 153, 237, - 149, 69, 31, 5, 153, 146, 69, 31, 5, 153, 231, 100, 69, 31, 5, 153, 149, - 69, 31, 5, 153, 237, 149, 69, 1, 236, 95, 235, 137, 69, 1, 236, 95, 239, - 160, 69, 1, 236, 95, 253, 16, 69, 1, 236, 95, 253, 12, 69, 251, 33, 5, - 236, 95, 124, 236, 1, 69, 251, 33, 5, 236, 95, 124, 198, 69, 251, 33, 5, - 236, 95, 124, 238, 43, 69, 1, 229, 151, 239, 28, 229, 146, 69, 31, 5, - 229, 151, 239, 28, 247, 165, 69, 206, 165, 229, 151, 239, 28, 245, 129, - 69, 206, 165, 229, 151, 239, 28, 239, 4, 233, 79, 69, 1, 224, 129, 232, - 150, 239, 28, 226, 251, 69, 1, 224, 129, 232, 150, 239, 28, 232, 156, 69, - 31, 5, 224, 129, 232, 150, 239, 28, 247, 165, 69, 31, 5, 224, 129, 232, - 150, 239, 28, 225, 159, 69, 5, 224, 129, 232, 150, 239, 28, 226, 117, 69, - 5, 224, 129, 232, 150, 239, 28, 226, 116, 69, 5, 224, 129, 232, 150, 239, - 28, 226, 115, 69, 5, 224, 129, 232, 150, 239, 28, 226, 114, 69, 5, 224, - 129, 232, 150, 239, 28, 226, 113, 69, 1, 248, 44, 232, 150, 239, 28, 235, - 18, 69, 1, 248, 44, 232, 150, 239, 28, 223, 134, 69, 1, 248, 44, 232, - 150, 239, 28, 246, 49, 69, 31, 5, 246, 129, 239, 28, 74, 69, 31, 5, 239, - 9, 234, 88, 69, 31, 5, 239, 9, 66, 69, 31, 5, 239, 9, 248, 35, 69, 1, - 229, 131, 177, 69, 1, 229, 131, 238, 227, 69, 1, 229, 131, 246, 193, 69, - 1, 229, 131, 252, 39, 69, 1, 229, 131, 223, 117, 69, 1, 229, 131, 234, - 173, 69, 1, 229, 131, 250, 189, 69, 1, 229, 131, 236, 1, 69, 1, 229, 131, - 233, 97, 69, 1, 229, 131, 247, 129, 69, 1, 229, 131, 253, 70, 69, 1, 229, - 131, 226, 251, 69, 1, 229, 131, 154, 69, 251, 33, 5, 229, 131, 124, 224, - 173, 69, 31, 5, 229, 131, 255, 63, 69, 31, 5, 229, 131, 72, 69, 31, 5, - 229, 131, 161, 46, 69, 31, 5, 229, 131, 35, 224, 25, 69, 5, 229, 131, - 226, 116, 69, 5, 229, 131, 226, 115, 69, 5, 229, 131, 226, 113, 69, 5, - 229, 131, 226, 112, 69, 5, 229, 131, 251, 2, 226, 116, 69, 5, 229, 131, - 251, 2, 226, 115, 69, 5, 229, 131, 251, 2, 247, 242, 226, 118, 69, 1, - 231, 61, 233, 226, 247, 129, 69, 5, 231, 61, 233, 226, 226, 113, 69, 229, - 131, 21, 223, 89, 69, 229, 131, 21, 118, 69, 229, 131, 21, 113, 69, 229, - 131, 21, 166, 69, 229, 131, 21, 158, 69, 229, 131, 21, 173, 69, 229, 131, - 21, 183, 69, 229, 131, 21, 194, 69, 229, 131, 21, 187, 69, 229, 131, 21, - 192, 69, 14, 229, 131, 118, 69, 14, 229, 131, 247, 148, 87, 6, 1, 254, - 190, 87, 6, 1, 253, 44, 87, 6, 1, 246, 168, 87, 6, 1, 249, 148, 87, 6, 1, - 247, 239, 87, 6, 1, 224, 219, 87, 6, 1, 223, 92, 87, 6, 1, 227, 73, 87, - 6, 1, 240, 16, 87, 6, 1, 239, 46, 87, 6, 1, 238, 6, 87, 6, 1, 237, 35, - 87, 6, 1, 235, 230, 87, 6, 1, 234, 61, 87, 6, 1, 233, 194, 87, 6, 1, 223, - 81, 87, 6, 1, 232, 15, 87, 6, 1, 230, 253, 87, 6, 1, 227, 67, 87, 6, 1, - 225, 138, 87, 6, 1, 233, 92, 87, 6, 1, 238, 218, 87, 6, 1, 246, 60, 87, - 6, 1, 232, 123, 87, 6, 1, 229, 78, 87, 6, 1, 251, 161, 87, 6, 1, 252, 26, - 87, 6, 1, 239, 149, 87, 6, 1, 251, 109, 87, 6, 1, 251, 192, 87, 6, 1, - 224, 70, 87, 6, 1, 239, 159, 87, 6, 1, 245, 165, 87, 6, 1, 245, 121, 87, - 6, 1, 245, 71, 87, 6, 1, 224, 141, 87, 6, 1, 245, 141, 87, 6, 1, 244, - 225, 87, 1, 254, 190, 87, 1, 253, 44, 87, 1, 246, 168, 87, 1, 249, 148, - 87, 1, 247, 239, 87, 1, 224, 219, 87, 1, 223, 92, 87, 1, 227, 73, 87, 1, - 240, 16, 87, 1, 239, 46, 87, 1, 238, 6, 87, 1, 237, 35, 87, 1, 235, 230, - 87, 1, 234, 61, 87, 1, 233, 194, 87, 1, 223, 81, 87, 1, 232, 15, 87, 1, - 230, 253, 87, 1, 227, 67, 87, 1, 225, 138, 87, 1, 233, 92, 87, 1, 238, - 218, 87, 1, 246, 60, 87, 1, 232, 123, 87, 1, 229, 78, 87, 1, 251, 161, - 87, 1, 252, 26, 87, 1, 239, 149, 87, 1, 251, 109, 87, 1, 251, 192, 87, 1, - 224, 70, 87, 1, 239, 159, 87, 1, 245, 165, 87, 1, 245, 121, 87, 1, 245, - 71, 87, 1, 224, 141, 87, 1, 245, 141, 87, 1, 244, 225, 87, 1, 247, 70, - 87, 1, 223, 185, 87, 1, 247, 251, 87, 1, 209, 246, 168, 87, 1, 254, 248, - 87, 233, 192, 229, 173, 52, 1, 87, 235, 230, 26, 122, 238, 173, 26, 122, - 228, 104, 26, 122, 235, 82, 26, 122, 226, 163, 26, 122, 228, 99, 26, 122, - 231, 174, 26, 122, 236, 148, 26, 122, 233, 60, 26, 122, 228, 102, 26, - 122, 228, 236, 26, 122, 228, 100, 26, 122, 240, 68, 26, 122, 251, 113, - 26, 122, 228, 107, 26, 122, 251, 167, 26, 122, 238, 210, 26, 122, 226, - 218, 26, 122, 233, 85, 26, 122, 245, 69, 26, 122, 235, 79, 26, 122, 228, - 103, 26, 122, 235, 74, 26, 122, 235, 77, 26, 122, 226, 162, 26, 122, 231, - 165, 26, 122, 228, 101, 26, 122, 231, 173, 26, 122, 239, 31, 26, 122, - 236, 143, 26, 122, 239, 34, 26, 122, 233, 56, 26, 122, 233, 55, 26, 122, - 233, 45, 26, 122, 233, 52, 26, 122, 233, 50, 26, 122, 233, 48, 26, 122, - 233, 49, 26, 122, 233, 47, 26, 122, 233, 51, 26, 122, 233, 58, 26, 122, - 233, 59, 26, 122, 233, 46, 26, 122, 233, 54, 26, 122, 239, 32, 26, 122, - 239, 30, 26, 122, 228, 230, 26, 122, 228, 228, 26, 122, 228, 221, 26, - 122, 228, 224, 26, 122, 228, 229, 26, 122, 228, 226, 26, 122, 228, 225, - 26, 122, 228, 223, 26, 122, 228, 232, 26, 122, 228, 234, 26, 122, 228, - 235, 26, 122, 228, 231, 26, 122, 228, 222, 26, 122, 228, 227, 26, 122, - 228, 233, 26, 122, 251, 154, 26, 122, 251, 152, 26, 122, 251, 212, 26, - 122, 251, 210, 26, 122, 233, 204, 26, 122, 240, 64, 26, 122, 240, 56, 26, - 122, 240, 63, 26, 122, 240, 60, 26, 122, 240, 59, 26, 122, 240, 62, 26, - 122, 228, 105, 26, 122, 240, 66, 26, 122, 240, 67, 26, 122, 240, 57, 26, - 122, 240, 61, 26, 122, 223, 212, 26, 122, 251, 112, 26, 122, 251, 155, - 26, 122, 251, 153, 26, 122, 251, 213, 26, 122, 251, 211, 26, 122, 251, - 165, 26, 122, 251, 166, 26, 122, 251, 156, 26, 122, 251, 214, 26, 122, - 233, 84, 26, 122, 239, 33, 26, 122, 228, 106, 26, 122, 223, 218, 26, 122, - 247, 52, 26, 170, 247, 52, 26, 170, 57, 26, 170, 255, 19, 26, 170, 191, - 26, 170, 224, 10, 26, 170, 247, 217, 26, 170, 72, 26, 170, 223, 221, 26, - 170, 223, 228, 26, 170, 73, 26, 170, 224, 173, 26, 170, 224, 170, 26, - 170, 234, 88, 26, 170, 223, 183, 26, 170, 66, 26, 170, 224, 133, 26, 170, - 224, 141, 26, 170, 224, 118, 26, 170, 223, 158, 26, 170, 247, 165, 26, - 170, 223, 202, 26, 170, 74, 26, 170, 255, 67, 26, 170, 255, 66, 26, 170, - 224, 23, 26, 170, 224, 22, 26, 170, 247, 215, 26, 170, 247, 214, 26, 170, - 247, 216, 26, 170, 223, 220, 26, 170, 223, 219, 26, 170, 234, 109, 26, - 170, 234, 110, 26, 170, 234, 106, 26, 170, 234, 108, 26, 170, 234, 107, - 26, 170, 223, 180, 26, 170, 223, 179, 26, 170, 223, 178, 26, 170, 223, - 181, 26, 170, 223, 182, 26, 170, 225, 177, 26, 170, 225, 176, 26, 170, - 225, 175, 26, 170, 225, 173, 26, 170, 225, 174, 26, 170, 223, 157, 26, - 170, 223, 155, 26, 170, 223, 156, 26, 170, 223, 151, 26, 170, 223, 152, - 26, 170, 223, 153, 26, 170, 223, 154, 26, 170, 247, 163, 26, 170, 247, - 164, 26, 170, 223, 201, 26, 170, 244, 80, 26, 170, 244, 74, 26, 170, 244, - 76, 26, 170, 244, 75, 26, 170, 244, 77, 26, 170, 244, 79, 26, 170, 254, - 128, 26, 170, 254, 127, 26, 170, 254, 125, 26, 170, 254, 126, 26, 170, - 228, 108, 26, 138, 238, 173, 26, 138, 228, 104, 26, 138, 238, 171, 26, - 138, 235, 82, 26, 138, 235, 81, 26, 138, 235, 80, 26, 138, 226, 163, 26, - 138, 231, 174, 26, 138, 231, 170, 26, 138, 231, 168, 26, 138, 231, 162, - 26, 138, 231, 159, 26, 138, 231, 157, 26, 138, 231, 163, 26, 138, 231, - 173, 26, 138, 236, 148, 26, 138, 233, 60, 26, 138, 233, 52, 26, 138, 228, - 236, 26, 138, 228, 100, 26, 138, 240, 68, 26, 138, 251, 113, 26, 138, - 251, 167, 26, 138, 238, 210, 26, 138, 226, 218, 26, 138, 233, 85, 26, - 138, 245, 69, 26, 138, 238, 172, 26, 138, 238, 170, 26, 138, 235, 79, 26, - 138, 235, 74, 26, 138, 235, 76, 26, 138, 235, 78, 26, 138, 235, 75, 26, - 138, 226, 162, 26, 138, 226, 161, 26, 138, 231, 169, 26, 138, 231, 165, - 26, 138, 231, 156, 26, 138, 231, 155, 26, 138, 228, 101, 26, 138, 231, - 167, 26, 138, 231, 166, 26, 138, 231, 160, 26, 138, 231, 161, 26, 138, - 231, 172, 26, 138, 231, 158, 26, 138, 231, 164, 26, 138, 231, 171, 26, - 138, 231, 154, 26, 138, 236, 145, 26, 138, 236, 142, 26, 138, 236, 143, - 26, 138, 236, 141, 26, 138, 236, 140, 26, 138, 236, 144, 26, 138, 236, - 147, 26, 138, 236, 146, 26, 138, 239, 34, 26, 138, 233, 53, 26, 138, 233, - 54, 26, 138, 233, 57, 26, 138, 239, 32, 26, 138, 228, 230, 26, 138, 228, - 221, 26, 138, 228, 224, 26, 138, 228, 226, 26, 138, 233, 204, 26, 138, - 240, 64, 26, 138, 240, 58, 26, 138, 228, 105, 26, 138, 240, 65, 26, 138, - 223, 212, 26, 138, 223, 210, 26, 138, 223, 211, 26, 138, 233, 84, 26, - 138, 239, 33, 26, 138, 245, 67, 26, 138, 245, 65, 26, 138, 245, 68, 26, - 138, 245, 66, 26, 138, 223, 218, 25, 4, 154, 25, 4, 244, 145, 25, 4, 245, - 75, 25, 4, 245, 167, 25, 4, 245, 109, 25, 4, 245, 121, 25, 4, 244, 227, - 25, 4, 244, 226, 25, 4, 238, 43, 25, 4, 237, 110, 25, 4, 237, 193, 25, 4, - 238, 42, 25, 4, 237, 239, 25, 4, 237, 243, 25, 4, 237, 143, 25, 4, 237, - 88, 25, 4, 245, 84, 25, 4, 245, 78, 25, 4, 245, 80, 25, 4, 245, 83, 25, - 4, 245, 81, 25, 4, 245, 82, 25, 4, 245, 79, 25, 4, 245, 77, 25, 4, 198, - 25, 4, 236, 66, 25, 4, 236, 157, 25, 4, 237, 66, 25, 4, 236, 226, 25, 4, - 236, 235, 25, 4, 236, 103, 25, 4, 236, 19, 25, 4, 227, 120, 25, 4, 227, - 114, 25, 4, 227, 116, 25, 4, 227, 119, 25, 4, 227, 117, 25, 4, 227, 118, - 25, 4, 227, 115, 25, 4, 227, 113, 25, 4, 208, 25, 4, 231, 70, 25, 4, 231, - 180, 25, 4, 232, 22, 25, 4, 231, 229, 25, 4, 231, 244, 25, 4, 231, 122, - 25, 4, 231, 46, 25, 4, 231, 31, 25, 4, 228, 6, 25, 4, 229, 15, 25, 4, - 231, 29, 25, 4, 230, 203, 25, 4, 230, 213, 25, 4, 228, 169, 25, 4, 227, - 200, 25, 4, 229, 146, 25, 4, 229, 43, 25, 4, 229, 90, 25, 4, 229, 142, - 25, 4, 229, 112, 25, 4, 229, 114, 25, 4, 229, 71, 25, 4, 229, 30, 25, 4, - 232, 138, 25, 4, 232, 84, 25, 4, 232, 104, 25, 4, 232, 137, 25, 4, 232, - 118, 25, 4, 232, 119, 25, 4, 232, 95, 25, 4, 232, 94, 25, 4, 232, 45, 25, - 4, 232, 41, 25, 4, 232, 44, 25, 4, 232, 42, 25, 4, 232, 43, 25, 4, 232, - 116, 25, 4, 232, 110, 25, 4, 232, 112, 25, 4, 232, 115, 25, 4, 232, 113, - 25, 4, 232, 114, 25, 4, 232, 111, 25, 4, 232, 109, 25, 4, 232, 105, 25, - 4, 232, 108, 25, 4, 232, 106, 25, 4, 232, 107, 25, 4, 253, 70, 25, 4, - 252, 90, 25, 4, 252, 181, 25, 4, 253, 69, 25, 4, 252, 232, 25, 4, 252, - 238, 25, 4, 252, 138, 25, 4, 252, 60, 25, 4, 225, 64, 25, 4, 224, 190, - 25, 4, 224, 228, 25, 4, 225, 63, 25, 4, 225, 38, 25, 4, 225, 42, 25, 4, - 224, 206, 25, 4, 224, 183, 25, 4, 227, 107, 25, 4, 225, 250, 25, 4, 226, - 175, 25, 4, 227, 104, 25, 4, 227, 37, 25, 4, 227, 44, 25, 4, 96, 25, 4, - 225, 222, 25, 4, 252, 39, 25, 4, 250, 235, 25, 4, 251, 118, 25, 4, 252, - 38, 25, 4, 251, 225, 25, 4, 251, 231, 25, 4, 251, 68, 25, 4, 250, 210, - 25, 4, 224, 72, 25, 4, 224, 48, 25, 4, 224, 64, 25, 4, 224, 71, 25, 4, - 224, 68, 25, 4, 224, 69, 25, 4, 224, 55, 25, 4, 224, 54, 25, 4, 224, 44, - 25, 4, 224, 40, 25, 4, 224, 43, 25, 4, 224, 41, 25, 4, 224, 42, 25, 4, - 236, 1, 25, 4, 234, 206, 25, 4, 235, 89, 25, 4, 235, 254, 25, 4, 235, - 160, 25, 4, 235, 162, 25, 4, 235, 6, 25, 4, 234, 177, 25, 4, 234, 173, - 25, 4, 234, 146, 25, 4, 234, 163, 25, 4, 234, 172, 25, 4, 234, 168, 25, - 4, 234, 169, 25, 4, 234, 152, 25, 4, 234, 139, 25, 4, 246, 16, 57, 25, 4, - 246, 16, 66, 25, 4, 246, 16, 74, 25, 4, 246, 16, 255, 63, 25, 4, 246, 16, - 248, 35, 25, 4, 246, 16, 72, 25, 4, 246, 16, 73, 25, 4, 246, 16, 224, - 173, 25, 4, 177, 25, 4, 238, 107, 25, 4, 238, 199, 25, 4, 239, 72, 25, 4, - 239, 2, 25, 4, 239, 3, 25, 4, 238, 150, 25, 4, 238, 149, 25, 4, 238, 78, - 25, 4, 238, 74, 25, 4, 238, 77, 25, 4, 238, 75, 25, 4, 238, 76, 25, 4, - 238, 69, 25, 4, 238, 63, 25, 4, 238, 65, 25, 4, 238, 68, 25, 4, 238, 66, - 25, 4, 238, 67, 25, 4, 238, 64, 25, 4, 238, 62, 25, 4, 238, 58, 25, 4, - 238, 61, 25, 4, 238, 59, 25, 4, 238, 60, 25, 4, 224, 173, 25, 4, 224, 83, - 25, 4, 224, 118, 25, 4, 224, 172, 25, 4, 224, 138, 25, 4, 224, 141, 25, - 4, 224, 105, 25, 4, 224, 104, 25, 4, 233, 91, 57, 25, 4, 233, 91, 66, 25, - 4, 233, 91, 74, 25, 4, 233, 91, 255, 63, 25, 4, 233, 91, 248, 35, 25, 4, - 233, 91, 72, 25, 4, 233, 91, 73, 25, 4, 223, 117, 25, 4, 223, 19, 25, 4, - 223, 47, 25, 4, 223, 116, 25, 4, 223, 95, 25, 4, 223, 97, 25, 4, 223, 27, - 25, 4, 223, 6, 25, 4, 223, 85, 25, 4, 223, 65, 25, 4, 223, 72, 25, 4, - 223, 84, 25, 4, 223, 76, 25, 4, 223, 77, 25, 4, 223, 70, 25, 4, 223, 56, - 25, 4, 191, 25, 4, 223, 158, 25, 4, 223, 202, 25, 4, 224, 21, 25, 4, 223, - 225, 25, 4, 223, 228, 25, 4, 223, 183, 25, 4, 223, 177, 25, 4, 250, 189, - 25, 4, 248, 107, 25, 4, 250, 4, 25, 4, 250, 188, 25, 4, 250, 67, 25, 4, - 250, 77, 25, 4, 249, 161, 25, 4, 248, 79, 25, 4, 250, 117, 25, 4, 250, - 87, 25, 4, 250, 99, 25, 4, 250, 116, 25, 4, 250, 104, 25, 4, 250, 105, - 25, 4, 250, 92, 25, 4, 250, 78, 25, 4, 239, 179, 25, 4, 239, 101, 25, 4, - 239, 156, 25, 4, 239, 178, 25, 4, 239, 169, 25, 4, 239, 170, 25, 4, 239, - 117, 25, 4, 239, 84, 25, 4, 246, 193, 25, 4, 245, 218, 25, 4, 246, 46, - 25, 4, 246, 190, 25, 4, 246, 125, 25, 4, 246, 131, 25, 4, 246, 11, 25, 4, - 246, 10, 25, 4, 245, 188, 25, 4, 245, 184, 25, 4, 245, 187, 25, 4, 245, - 185, 25, 4, 245, 186, 25, 4, 246, 101, 25, 4, 246, 81, 25, 4, 246, 91, - 25, 4, 246, 100, 25, 4, 246, 95, 25, 4, 246, 96, 25, 4, 246, 85, 25, 4, - 246, 70, 25, 4, 226, 251, 25, 4, 226, 186, 25, 4, 226, 220, 25, 4, 226, - 250, 25, 4, 226, 238, 25, 4, 226, 239, 25, 4, 226, 201, 25, 4, 226, 180, - 25, 4, 251, 204, 25, 4, 251, 136, 25, 4, 251, 169, 25, 4, 251, 203, 25, - 4, 251, 179, 25, 4, 251, 182, 25, 4, 251, 150, 25, 4, 251, 125, 25, 4, - 233, 97, 25, 4, 233, 75, 25, 4, 233, 87, 25, 4, 233, 96, 25, 4, 233, 89, - 25, 4, 233, 90, 25, 4, 233, 79, 25, 4, 233, 71, 25, 4, 226, 44, 25, 4, - 226, 26, 25, 4, 226, 29, 25, 4, 226, 43, 25, 4, 226, 39, 25, 4, 226, 40, - 25, 4, 226, 28, 25, 4, 226, 24, 25, 4, 225, 186, 25, 4, 225, 178, 25, 4, - 225, 182, 25, 4, 225, 185, 25, 4, 225, 183, 25, 4, 225, 184, 25, 4, 225, - 180, 25, 4, 225, 179, 25, 4, 247, 129, 25, 4, 246, 219, 25, 4, 247, 70, - 25, 4, 247, 128, 25, 4, 247, 92, 25, 4, 247, 97, 25, 4, 247, 7, 25, 4, - 246, 206, 25, 4, 213, 25, 4, 232, 173, 25, 4, 233, 69, 25, 4, 233, 241, - 25, 4, 233, 144, 25, 4, 233, 151, 25, 4, 233, 4, 25, 4, 232, 156, 25, 4, - 231, 42, 25, 4, 236, 10, 25, 4, 246, 200, 25, 36, 246, 124, 76, 25, 230, - 206, 76, 25, 224, 91, 25, 246, 218, 228, 38, 25, 251, 54, 25, 229, 186, - 25, 251, 61, 25, 232, 211, 251, 61, 25, 232, 69, 76, 25, 233, 192, 229, - 173, 25, 21, 118, 25, 21, 113, 25, 21, 166, 25, 21, 158, 25, 21, 173, 25, - 21, 183, 25, 21, 194, 25, 21, 187, 25, 21, 192, 25, 65, 227, 23, 25, 65, - 225, 216, 25, 65, 226, 207, 25, 65, 246, 245, 25, 65, 247, 63, 25, 65, - 228, 206, 25, 65, 229, 159, 25, 65, 248, 12, 25, 65, 235, 57, 25, 65, - 244, 135, 25, 65, 227, 24, 226, 194, 25, 4, 230, 210, 236, 19, 25, 4, - 236, 15, 25, 4, 236, 16, 25, 4, 236, 17, 25, 4, 230, 210, 252, 60, 25, 4, - 252, 57, 25, 4, 252, 58, 25, 4, 252, 59, 25, 4, 230, 210, 246, 206, 25, - 4, 246, 202, 25, 4, 246, 203, 25, 4, 246, 204, 25, 4, 230, 210, 232, 156, - 25, 4, 232, 152, 25, 4, 232, 153, 25, 4, 232, 154, 25, 226, 119, 165, - 223, 186, 25, 226, 119, 165, 250, 36, 25, 226, 119, 165, 231, 143, 25, - 226, 119, 165, 229, 63, 231, 143, 25, 226, 119, 165, 249, 238, 25, 226, - 119, 165, 238, 242, 25, 226, 119, 165, 251, 158, 25, 226, 119, 165, 245, - 73, 25, 226, 119, 165, 250, 35, 25, 226, 119, 165, 238, 89, 131, 1, 57, - 131, 1, 72, 131, 1, 74, 131, 1, 73, 131, 1, 66, 131, 1, 196, 131, 1, 246, - 193, 131, 1, 177, 131, 1, 246, 131, 131, 1, 246, 46, 131, 1, 246, 11, - 131, 1, 245, 218, 131, 1, 245, 189, 131, 1, 154, 131, 1, 245, 121, 131, - 1, 245, 75, 131, 1, 244, 227, 131, 1, 244, 145, 131, 1, 244, 128, 131, 1, - 238, 43, 131, 1, 237, 243, 131, 1, 237, 193, 131, 1, 237, 143, 131, 1, - 237, 110, 131, 1, 237, 89, 131, 1, 198, 131, 1, 236, 235, 131, 1, 236, - 157, 131, 1, 236, 103, 131, 1, 236, 66, 131, 1, 236, 1, 131, 1, 244, 249, - 131, 1, 235, 243, 131, 1, 235, 162, 131, 1, 235, 89, 131, 1, 235, 6, 131, - 1, 234, 206, 131, 1, 234, 179, 131, 1, 232, 83, 131, 1, 232, 71, 131, 1, - 232, 66, 131, 1, 232, 60, 131, 1, 232, 49, 131, 1, 232, 47, 131, 1, 231, - 31, 131, 1, 193, 131, 1, 230, 213, 131, 1, 229, 15, 131, 1, 228, 169, - 131, 1, 228, 6, 131, 1, 227, 202, 131, 1, 250, 189, 131, 1, 227, 107, - 131, 1, 250, 77, 131, 1, 227, 44, 131, 1, 250, 4, 131, 1, 226, 175, 131, - 1, 249, 161, 131, 1, 248, 107, 131, 1, 248, 81, 131, 1, 249, 170, 131, 1, - 226, 138, 131, 1, 226, 137, 131, 1, 226, 129, 131, 1, 226, 128, 131, 1, - 226, 127, 131, 1, 226, 126, 131, 1, 226, 44, 131, 1, 226, 40, 131, 1, - 226, 29, 131, 1, 226, 28, 131, 1, 226, 26, 131, 1, 226, 25, 131, 1, 224, - 173, 131, 1, 224, 141, 131, 1, 224, 118, 131, 1, 224, 105, 131, 1, 224, - 83, 131, 1, 224, 77, 131, 1, 191, 131, 1, 223, 228, 131, 1, 223, 202, - 131, 1, 223, 183, 131, 1, 223, 158, 131, 1, 223, 135, 16, 17, 72, 16, 17, - 255, 61, 16, 17, 74, 16, 17, 240, 47, 16, 17, 73, 16, 17, 234, 52, 16, - 17, 224, 24, 234, 52, 16, 17, 60, 248, 35, 16, 17, 60, 74, 16, 17, 57, - 16, 17, 255, 63, 16, 17, 224, 141, 16, 17, 127, 224, 141, 16, 17, 224, - 118, 16, 17, 127, 224, 118, 16, 17, 224, 113, 16, 17, 127, 224, 113, 16, - 17, 224, 105, 16, 17, 127, 224, 105, 16, 17, 224, 98, 16, 17, 127, 224, - 98, 16, 17, 235, 226, 224, 98, 16, 17, 224, 173, 16, 17, 127, 224, 173, - 16, 17, 224, 172, 16, 17, 127, 224, 172, 16, 17, 235, 226, 224, 172, 16, - 17, 254, 253, 16, 17, 224, 24, 224, 174, 16, 17, 246, 16, 228, 38, 16, - 17, 35, 155, 16, 17, 35, 245, 236, 16, 17, 35, 252, 126, 132, 231, 139, - 16, 17, 35, 226, 106, 132, 231, 139, 16, 17, 35, 41, 132, 231, 139, 16, - 17, 35, 231, 139, 16, 17, 35, 47, 155, 16, 17, 35, 47, 229, 63, 61, 228, - 10, 16, 17, 35, 236, 154, 249, 140, 16, 17, 35, 229, 63, 169, 82, 16, 17, - 35, 233, 10, 16, 17, 35, 103, 227, 96, 16, 17, 247, 239, 16, 17, 240, 16, - 16, 17, 234, 61, 16, 17, 254, 190, 16, 17, 233, 151, 16, 17, 233, 239, - 16, 17, 233, 69, 16, 17, 233, 41, 16, 17, 233, 4, 16, 17, 232, 244, 16, - 17, 224, 24, 232, 244, 16, 17, 60, 245, 109, 16, 17, 60, 245, 75, 16, 17, - 213, 16, 17, 233, 241, 16, 17, 232, 154, 16, 17, 127, 232, 154, 16, 17, - 232, 152, 16, 17, 127, 232, 152, 16, 17, 232, 151, 16, 17, 127, 232, 151, - 16, 17, 232, 149, 16, 17, 127, 232, 149, 16, 17, 232, 148, 16, 17, 127, - 232, 148, 16, 17, 232, 156, 16, 17, 127, 232, 156, 16, 17, 232, 155, 16, - 17, 127, 232, 155, 16, 17, 224, 24, 232, 155, 16, 17, 233, 244, 16, 17, - 127, 233, 244, 16, 17, 60, 212, 16, 17, 227, 44, 16, 17, 227, 103, 16, - 17, 226, 175, 16, 17, 226, 165, 16, 17, 96, 16, 17, 226, 108, 16, 17, - 224, 24, 226, 108, 16, 17, 60, 250, 67, 16, 17, 60, 250, 4, 16, 17, 227, - 107, 16, 17, 227, 104, 16, 17, 225, 220, 16, 17, 127, 225, 220, 16, 17, - 225, 205, 16, 17, 127, 225, 205, 16, 17, 225, 204, 16, 17, 127, 225, 204, - 16, 17, 113, 16, 17, 127, 113, 16, 17, 225, 201, 16, 17, 127, 225, 201, - 16, 17, 225, 222, 16, 17, 127, 225, 222, 16, 17, 225, 221, 16, 17, 127, - 225, 221, 16, 17, 235, 226, 225, 221, 16, 17, 227, 109, 16, 17, 226, 17, - 16, 17, 226, 6, 16, 17, 226, 5, 16, 17, 226, 20, 16, 17, 239, 3, 16, 17, - 239, 69, 16, 17, 238, 199, 16, 17, 238, 191, 16, 17, 238, 150, 16, 17, - 238, 139, 16, 17, 224, 24, 238, 139, 16, 17, 177, 16, 17, 239, 72, 16, - 17, 238, 76, 16, 17, 127, 238, 76, 16, 17, 238, 74, 16, 17, 127, 238, 74, - 16, 17, 238, 73, 16, 17, 127, 238, 73, 16, 17, 238, 72, 16, 17, 127, 238, - 72, 16, 17, 238, 71, 16, 17, 127, 238, 71, 16, 17, 238, 78, 16, 17, 127, - 238, 78, 16, 17, 238, 77, 16, 17, 127, 238, 77, 16, 17, 235, 226, 238, - 77, 16, 17, 239, 76, 16, 17, 238, 79, 16, 17, 228, 151, 238, 253, 16, 17, - 228, 151, 238, 192, 16, 17, 228, 151, 238, 147, 16, 17, 228, 151, 239, - 58, 16, 17, 251, 231, 16, 17, 252, 37, 16, 17, 251, 118, 16, 17, 251, - 110, 16, 17, 251, 68, 16, 17, 251, 17, 16, 17, 224, 24, 251, 17, 16, 17, - 252, 39, 16, 17, 252, 38, 16, 17, 250, 208, 16, 17, 127, 250, 208, 16, - 17, 250, 206, 16, 17, 127, 250, 206, 16, 17, 250, 205, 16, 17, 127, 250, - 205, 16, 17, 250, 204, 16, 17, 127, 250, 204, 16, 17, 250, 203, 16, 17, - 127, 250, 203, 16, 17, 250, 210, 16, 17, 127, 250, 210, 16, 17, 250, 209, - 16, 17, 127, 250, 209, 16, 17, 235, 226, 250, 209, 16, 17, 252, 44, 16, - 17, 230, 232, 226, 253, 16, 17, 236, 235, 16, 17, 237, 65, 16, 17, 236, - 157, 16, 17, 236, 137, 16, 17, 236, 103, 16, 17, 236, 86, 16, 17, 224, - 24, 236, 86, 16, 17, 198, 16, 17, 237, 66, 16, 17, 236, 17, 16, 17, 127, - 236, 17, 16, 17, 236, 15, 16, 17, 127, 236, 15, 16, 17, 236, 14, 16, 17, - 127, 236, 14, 16, 17, 236, 13, 16, 17, 127, 236, 13, 16, 17, 236, 12, 16, - 17, 127, 236, 12, 16, 17, 236, 19, 16, 17, 127, 236, 19, 16, 17, 236, 18, - 16, 17, 127, 236, 18, 16, 17, 235, 226, 236, 18, 16, 17, 185, 16, 17, - 127, 185, 16, 17, 236, 160, 16, 17, 254, 61, 185, 16, 17, 230, 232, 185, - 16, 17, 235, 162, 16, 17, 235, 253, 16, 17, 235, 89, 16, 17, 235, 68, 16, - 17, 235, 6, 16, 17, 234, 253, 16, 17, 224, 24, 234, 253, 16, 17, 236, 1, - 16, 17, 235, 254, 16, 17, 234, 175, 16, 17, 127, 234, 175, 16, 17, 234, - 177, 16, 17, 127, 234, 177, 16, 17, 234, 176, 16, 17, 127, 234, 176, 16, - 17, 235, 226, 234, 176, 16, 17, 199, 16, 17, 60, 235, 139, 16, 17, 235, - 94, 16, 17, 237, 243, 16, 17, 238, 41, 16, 17, 237, 193, 16, 17, 237, - 182, 16, 17, 237, 143, 16, 17, 237, 125, 16, 17, 224, 24, 237, 125, 16, - 17, 238, 43, 16, 17, 238, 42, 16, 17, 237, 86, 16, 17, 127, 237, 86, 16, - 17, 237, 85, 16, 17, 127, 237, 85, 16, 17, 237, 84, 16, 17, 127, 237, 84, - 16, 17, 237, 83, 16, 17, 127, 237, 83, 16, 17, 237, 82, 16, 17, 127, 237, - 82, 16, 17, 237, 88, 16, 17, 127, 237, 88, 16, 17, 237, 87, 16, 17, 127, - 237, 87, 16, 17, 149, 16, 17, 127, 149, 16, 17, 124, 149, 16, 17, 230, - 213, 16, 17, 231, 27, 16, 17, 229, 15, 16, 17, 229, 0, 16, 17, 228, 169, - 16, 17, 228, 159, 16, 17, 224, 24, 228, 159, 16, 17, 231, 31, 16, 17, - 231, 29, 16, 17, 227, 196, 16, 17, 127, 227, 196, 16, 17, 227, 193, 16, - 17, 127, 227, 193, 16, 17, 227, 192, 16, 17, 127, 227, 192, 16, 17, 227, - 191, 16, 17, 127, 227, 191, 16, 17, 227, 190, 16, 17, 127, 227, 190, 16, - 17, 227, 200, 16, 17, 127, 227, 200, 16, 17, 227, 199, 16, 17, 127, 227, - 199, 16, 17, 235, 226, 227, 199, 16, 17, 193, 16, 17, 254, 61, 193, 16, - 17, 227, 201, 16, 17, 252, 147, 193, 16, 17, 236, 83, 228, 203, 16, 17, - 235, 226, 228, 198, 16, 17, 235, 226, 231, 33, 16, 17, 235, 226, 228, - 121, 16, 17, 235, 226, 228, 8, 16, 17, 235, 226, 228, 197, 16, 17, 235, - 226, 230, 215, 16, 17, 229, 114, 16, 17, 229, 90, 16, 17, 229, 85, 16, - 17, 229, 71, 16, 17, 229, 66, 16, 17, 229, 146, 16, 17, 229, 142, 16, 17, - 229, 28, 16, 17, 127, 229, 28, 16, 17, 229, 27, 16, 17, 127, 229, 27, 16, - 17, 229, 26, 16, 17, 127, 229, 26, 16, 17, 229, 25, 16, 17, 127, 229, 25, - 16, 17, 229, 24, 16, 17, 127, 229, 24, 16, 17, 229, 30, 16, 17, 127, 229, - 30, 16, 17, 229, 29, 16, 17, 127, 229, 29, 16, 17, 229, 148, 16, 17, 223, - 228, 16, 17, 224, 19, 16, 17, 223, 202, 16, 17, 223, 194, 16, 17, 223, - 183, 16, 17, 223, 172, 16, 17, 224, 24, 223, 172, 16, 17, 191, 16, 17, - 224, 21, 16, 17, 223, 132, 16, 17, 127, 223, 132, 16, 17, 223, 131, 16, - 17, 127, 223, 131, 16, 17, 223, 130, 16, 17, 127, 223, 130, 16, 17, 223, - 129, 16, 17, 127, 223, 129, 16, 17, 223, 128, 16, 17, 127, 223, 128, 16, - 17, 223, 134, 16, 17, 127, 223, 134, 16, 17, 223, 133, 16, 17, 127, 223, - 133, 16, 17, 235, 226, 223, 133, 16, 17, 224, 25, 16, 17, 252, 179, 224, - 25, 16, 17, 127, 224, 25, 16, 17, 230, 232, 223, 202, 16, 17, 231, 244, - 16, 17, 232, 26, 231, 244, 16, 17, 127, 237, 243, 16, 17, 232, 21, 16, - 17, 231, 180, 16, 17, 231, 144, 16, 17, 231, 122, 16, 17, 231, 114, 16, - 17, 127, 237, 143, 16, 17, 208, 16, 17, 232, 22, 16, 17, 127, 238, 43, - 16, 17, 231, 45, 16, 17, 127, 231, 45, 16, 17, 146, 16, 17, 127, 146, 16, - 17, 124, 146, 16, 17, 247, 97, 16, 17, 247, 126, 16, 17, 247, 70, 16, 17, - 247, 57, 16, 17, 247, 7, 16, 17, 247, 3, 16, 17, 247, 129, 16, 17, 247, - 128, 16, 17, 246, 205, 16, 17, 127, 246, 205, 16, 17, 247, 130, 16, 17, - 226, 239, 16, 17, 236, 3, 226, 239, 16, 17, 226, 220, 16, 17, 236, 3, - 226, 220, 16, 17, 226, 216, 16, 17, 236, 3, 226, 216, 16, 17, 226, 201, - 16, 17, 226, 198, 16, 17, 226, 251, 16, 17, 226, 250, 16, 17, 226, 179, - 16, 17, 127, 226, 179, 16, 17, 226, 253, 16, 17, 226, 9, 16, 17, 226, 8, - 16, 17, 226, 7, 16, 17, 226, 10, 16, 17, 226, 11, 16, 17, 225, 199, 16, - 17, 225, 198, 16, 17, 225, 197, 16, 17, 225, 200, 16, 17, 234, 193, 245, - 121, 16, 17, 234, 193, 245, 75, 16, 17, 234, 193, 245, 61, 16, 17, 234, - 193, 244, 227, 16, 17, 234, 193, 244, 218, 16, 17, 234, 193, 154, 16, 17, - 234, 193, 245, 167, 16, 17, 234, 193, 212, 16, 17, 234, 192, 212, 16, 17, - 245, 55, 16, 17, 232, 134, 16, 17, 232, 104, 16, 17, 232, 99, 16, 17, - 232, 95, 16, 17, 232, 90, 16, 17, 232, 138, 16, 17, 232, 137, 16, 17, - 232, 139, 16, 17, 226, 134, 16, 17, 226, 132, 16, 17, 226, 131, 16, 17, - 226, 135, 16, 17, 127, 231, 244, 16, 17, 127, 231, 180, 16, 17, 127, 231, - 122, 16, 17, 127, 208, 16, 17, 235, 135, 16, 17, 235, 114, 16, 17, 235, - 110, 16, 17, 235, 107, 16, 17, 235, 103, 16, 17, 235, 137, 16, 17, 235, - 136, 16, 17, 235, 139, 16, 17, 235, 17, 16, 17, 230, 232, 229, 114, 16, - 17, 230, 232, 229, 90, 16, 17, 230, 232, 229, 71, 16, 17, 230, 232, 229, - 146, 16, 17, 224, 96, 226, 239, 16, 17, 224, 96, 226, 220, 16, 17, 224, - 96, 226, 201, 16, 17, 224, 96, 226, 251, 16, 17, 224, 96, 226, 253, 16, - 17, 237, 199, 16, 17, 237, 198, 16, 17, 237, 197, 16, 17, 237, 196, 16, - 17, 237, 205, 16, 17, 237, 204, 16, 17, 237, 206, 16, 17, 226, 252, 226, - 239, 16, 17, 226, 252, 226, 220, 16, 17, 226, 252, 226, 216, 16, 17, 226, - 252, 226, 201, 16, 17, 226, 252, 226, 198, 16, 17, 226, 252, 226, 251, - 16, 17, 226, 252, 226, 250, 16, 17, 226, 252, 226, 253, 16, 17, 254, 243, - 254, 27, 16, 17, 252, 147, 72, 16, 17, 252, 147, 74, 16, 17, 252, 147, - 73, 16, 17, 252, 147, 57, 16, 17, 252, 147, 224, 141, 16, 17, 252, 147, - 224, 118, 16, 17, 252, 147, 224, 105, 16, 17, 252, 147, 224, 173, 16, 17, - 252, 147, 235, 162, 16, 17, 252, 147, 235, 89, 16, 17, 252, 147, 235, 6, - 16, 17, 252, 147, 236, 1, 16, 17, 252, 147, 239, 3, 16, 17, 252, 147, - 238, 199, 16, 17, 252, 147, 238, 150, 16, 17, 252, 147, 177, 16, 17, 230, - 232, 245, 121, 16, 17, 230, 232, 245, 75, 16, 17, 230, 232, 244, 227, 16, - 17, 230, 232, 154, 16, 17, 60, 246, 52, 16, 17, 60, 246, 54, 16, 17, 60, - 246, 58, 16, 17, 60, 246, 57, 16, 17, 60, 246, 55, 16, 17, 60, 246, 66, - 16, 17, 60, 231, 70, 16, 17, 60, 231, 122, 16, 17, 60, 231, 244, 16, 17, - 60, 231, 229, 16, 17, 60, 231, 180, 16, 17, 60, 208, 16, 17, 60, 224, 83, - 16, 17, 60, 224, 105, 16, 17, 60, 224, 141, 16, 17, 60, 224, 138, 16, 17, - 60, 224, 118, 16, 17, 60, 224, 173, 16, 17, 60, 244, 121, 16, 17, 60, - 244, 122, 16, 17, 60, 244, 125, 16, 17, 60, 244, 124, 16, 17, 60, 244, - 123, 16, 17, 60, 244, 127, 16, 17, 60, 226, 186, 16, 17, 60, 226, 201, - 16, 17, 60, 226, 239, 16, 17, 60, 226, 238, 16, 17, 60, 226, 220, 16, 17, - 60, 226, 251, 16, 17, 60, 225, 253, 16, 17, 60, 226, 5, 16, 17, 60, 226, - 17, 16, 17, 60, 226, 16, 16, 17, 60, 226, 6, 16, 17, 60, 226, 20, 16, 17, - 60, 232, 173, 16, 17, 60, 233, 4, 16, 17, 60, 233, 151, 16, 17, 60, 233, - 144, 16, 17, 60, 233, 69, 16, 17, 60, 213, 16, 17, 60, 233, 244, 16, 17, - 60, 245, 218, 16, 17, 60, 246, 11, 16, 17, 60, 246, 131, 16, 17, 60, 246, - 125, 16, 17, 60, 246, 46, 16, 17, 60, 246, 193, 16, 17, 60, 238, 204, 16, - 17, 60, 238, 208, 16, 17, 60, 238, 217, 16, 17, 60, 238, 216, 16, 17, 60, - 238, 212, 16, 17, 60, 238, 227, 16, 17, 60, 238, 162, 16, 17, 60, 238, - 163, 16, 17, 60, 238, 166, 16, 17, 60, 238, 165, 16, 17, 60, 238, 164, - 16, 17, 60, 238, 167, 16, 17, 60, 238, 168, 16, 17, 60, 234, 206, 16, 17, - 60, 235, 6, 16, 17, 60, 235, 162, 16, 17, 60, 235, 160, 16, 17, 60, 235, - 89, 16, 17, 60, 236, 1, 16, 17, 60, 236, 66, 16, 17, 60, 236, 103, 16, - 17, 60, 236, 235, 16, 17, 60, 236, 226, 16, 17, 60, 236, 157, 16, 17, 60, - 198, 16, 17, 60, 223, 158, 16, 17, 60, 223, 183, 16, 17, 60, 223, 228, - 16, 17, 60, 223, 225, 16, 17, 60, 223, 202, 16, 17, 60, 191, 16, 17, 60, - 239, 101, 16, 17, 230, 232, 239, 101, 16, 17, 60, 239, 117, 16, 17, 60, - 239, 170, 16, 17, 60, 239, 169, 16, 17, 60, 239, 156, 16, 17, 230, 232, - 239, 156, 16, 17, 60, 239, 179, 16, 17, 60, 239, 130, 16, 17, 60, 239, - 134, 16, 17, 60, 239, 144, 16, 17, 60, 239, 143, 16, 17, 60, 239, 142, - 16, 17, 60, 239, 145, 16, 17, 60, 237, 110, 16, 17, 60, 237, 143, 16, 17, - 60, 237, 243, 16, 17, 60, 237, 239, 16, 17, 60, 237, 193, 16, 17, 60, - 238, 43, 16, 17, 60, 249, 165, 16, 17, 60, 249, 166, 16, 17, 60, 249, - 169, 16, 17, 60, 249, 168, 16, 17, 60, 249, 167, 16, 17, 60, 249, 170, - 16, 17, 60, 237, 195, 16, 17, 60, 237, 197, 16, 17, 60, 237, 201, 16, 17, - 60, 237, 200, 16, 17, 60, 237, 199, 16, 17, 60, 237, 205, 16, 17, 60, - 226, 130, 16, 17, 60, 226, 131, 16, 17, 60, 226, 134, 16, 17, 60, 226, - 133, 16, 17, 60, 226, 132, 16, 17, 60, 226, 135, 16, 17, 60, 226, 127, - 16, 17, 60, 226, 128, 16, 17, 60, 226, 137, 16, 17, 60, 226, 136, 16, 17, - 60, 226, 129, 16, 17, 60, 226, 138, 16, 17, 60, 223, 19, 16, 17, 60, 223, - 27, 16, 17, 60, 223, 97, 16, 17, 60, 223, 95, 16, 17, 60, 223, 47, 16, - 17, 60, 223, 117, 16, 17, 60, 223, 119, 16, 17, 60, 59, 223, 119, 16, 17, - 60, 248, 61, 16, 17, 60, 248, 62, 16, 17, 60, 248, 69, 16, 17, 60, 248, - 68, 16, 17, 60, 248, 64, 16, 17, 60, 248, 70, 16, 17, 60, 228, 6, 16, 17, - 60, 228, 169, 16, 17, 60, 230, 213, 16, 17, 60, 230, 203, 16, 17, 60, - 229, 15, 16, 17, 60, 231, 31, 16, 17, 60, 229, 43, 16, 17, 60, 229, 71, - 16, 17, 60, 229, 114, 16, 17, 60, 229, 112, 16, 17, 60, 229, 90, 16, 17, - 60, 229, 146, 16, 17, 60, 229, 148, 16, 17, 60, 226, 26, 16, 17, 60, 226, - 28, 16, 17, 60, 226, 40, 16, 17, 60, 226, 39, 16, 17, 60, 226, 29, 16, - 17, 60, 226, 44, 16, 17, 60, 251, 136, 16, 17, 60, 251, 150, 16, 17, 60, - 251, 182, 16, 17, 60, 251, 179, 16, 17, 60, 251, 169, 16, 17, 60, 251, - 204, 16, 17, 60, 225, 255, 16, 17, 60, 226, 0, 16, 17, 60, 226, 3, 16, - 17, 60, 226, 2, 16, 17, 60, 226, 1, 16, 17, 60, 226, 4, 16, 17, 251, 170, - 53, 16, 17, 246, 218, 228, 38, 16, 17, 232, 130, 16, 17, 235, 134, 16, - 17, 235, 14, 16, 17, 235, 13, 16, 17, 235, 12, 16, 17, 235, 11, 16, 17, - 235, 16, 16, 17, 235, 15, 234, 86, 228, 146, 76, 234, 86, 1, 252, 218, - 234, 86, 1, 237, 103, 234, 86, 1, 247, 96, 234, 86, 1, 231, 15, 234, 86, - 1, 235, 56, 234, 86, 1, 225, 169, 234, 86, 1, 250, 167, 234, 86, 1, 226, - 153, 234, 86, 1, 251, 63, 234, 86, 1, 251, 223, 234, 86, 1, 236, 58, 234, - 86, 1, 245, 253, 234, 86, 1, 235, 127, 234, 86, 1, 228, 33, 234, 86, 1, - 231, 67, 234, 86, 1, 254, 250, 234, 86, 1, 234, 56, 234, 86, 1, 225, 103, - 234, 86, 1, 248, 54, 234, 86, 1, 239, 218, 234, 86, 1, 248, 55, 234, 86, - 1, 234, 31, 234, 86, 1, 225, 154, 234, 86, 1, 240, 53, 234, 86, 1, 248, - 52, 234, 86, 1, 233, 137, 234, 86, 247, 95, 76, 234, 86, 200, 247, 95, - 76, 140, 1, 247, 86, 247, 78, 247, 98, 247, 130, 140, 1, 196, 140, 1, - 225, 89, 225, 104, 66, 140, 1, 223, 160, 140, 1, 224, 25, 140, 1, 224, - 174, 140, 1, 226, 182, 226, 181, 226, 196, 140, 1, 247, 168, 140, 1, 254, - 169, 57, 140, 1, 234, 21, 73, 140, 1, 255, 44, 57, 140, 1, 255, 15, 140, - 1, 237, 130, 73, 140, 1, 229, 56, 73, 140, 1, 73, 140, 1, 234, 88, 140, - 1, 234, 61, 140, 1, 232, 11, 232, 19, 231, 224, 146, 140, 1, 239, 13, - 140, 1, 251, 221, 140, 1, 239, 14, 239, 76, 140, 1, 214, 140, 1, 247, - 228, 140, 1, 246, 128, 245, 177, 214, 140, 1, 246, 160, 140, 1, 224, 81, - 224, 76, 224, 174, 140, 1, 245, 160, 212, 140, 1, 245, 164, 212, 140, 1, - 237, 132, 212, 140, 1, 229, 59, 212, 140, 1, 235, 222, 234, 170, 235, - 223, 199, 140, 1, 229, 57, 199, 140, 1, 248, 135, 140, 1, 239, 202, 239, - 206, 239, 197, 74, 140, 1, 72, 140, 1, 239, 162, 239, 182, 140, 1, 246, - 114, 140, 1, 237, 133, 255, 19, 140, 1, 229, 61, 57, 140, 1, 239, 190, - 247, 213, 140, 1, 233, 110, 233, 127, 233, 244, 140, 1, 254, 221, 247, - 212, 140, 1, 228, 149, 193, 140, 1, 229, 4, 237, 129, 193, 140, 1, 229, - 55, 193, 140, 1, 252, 44, 140, 1, 223, 119, 140, 1, 226, 142, 226, 147, - 225, 188, 227, 109, 140, 1, 229, 54, 227, 109, 140, 1, 222, 222, 140, 1, - 252, 203, 252, 206, 252, 153, 254, 27, 140, 1, 229, 60, 254, 27, 140, 1, - 248, 134, 140, 1, 234, 40, 140, 1, 248, 23, 248, 25, 72, 140, 1, 237, 30, - 237, 36, 185, 140, 1, 237, 131, 185, 140, 1, 229, 58, 185, 140, 1, 237, - 255, 238, 28, 237, 136, 149, 140, 1, 248, 136, 140, 1, 239, 255, 140, 1, - 240, 0, 140, 1, 250, 178, 250, 183, 222, 222, 140, 1, 234, 17, 247, 167, - 73, 140, 1, 248, 51, 140, 1, 239, 217, 140, 1, 250, 207, 140, 1, 252, 32, - 140, 1, 251, 230, 140, 1, 228, 63, 140, 1, 237, 128, 140, 1, 229, 53, - 140, 1, 244, 68, 140, 1, 232, 139, 140, 1, 224, 73, 140, 228, 241, 232, - 170, 140, 236, 53, 232, 170, 140, 250, 244, 232, 170, 140, 254, 106, 98, - 140, 225, 224, 98, 140, 252, 217, 98, 227, 94, 1, 57, 227, 94, 1, 74, - 227, 94, 1, 66, 227, 94, 1, 177, 227, 94, 1, 246, 193, 227, 94, 1, 235, - 137, 227, 94, 1, 227, 107, 227, 94, 1, 250, 189, 227, 94, 1, 236, 1, 227, - 94, 1, 213, 227, 94, 1, 253, 70, 227, 94, 1, 198, 227, 94, 1, 191, 227, - 94, 1, 238, 43, 227, 94, 1, 224, 173, 227, 94, 1, 231, 31, 227, 94, 1, - 154, 227, 94, 31, 5, 74, 227, 94, 31, 5, 66, 227, 94, 5, 224, 216, 245, - 143, 1, 57, 245, 143, 1, 74, 245, 143, 1, 66, 245, 143, 1, 177, 245, 143, - 1, 246, 193, 245, 143, 1, 235, 137, 245, 143, 1, 227, 107, 245, 143, 1, - 250, 189, 245, 143, 1, 236, 1, 245, 143, 1, 213, 245, 143, 1, 253, 70, - 245, 143, 1, 198, 245, 143, 1, 191, 245, 143, 1, 208, 245, 143, 1, 238, - 43, 245, 143, 1, 224, 173, 245, 143, 1, 231, 31, 245, 143, 1, 154, 245, - 143, 31, 5, 74, 245, 143, 31, 5, 66, 245, 143, 5, 233, 214, 233, 83, 228, - 241, 232, 170, 233, 83, 47, 232, 170, 252, 87, 1, 57, 252, 87, 1, 74, - 252, 87, 1, 66, 252, 87, 1, 177, 252, 87, 1, 246, 193, 252, 87, 1, 235, - 137, 252, 87, 1, 227, 107, 252, 87, 1, 250, 189, 252, 87, 1, 236, 1, 252, - 87, 1, 213, 252, 87, 1, 253, 70, 252, 87, 1, 198, 252, 87, 1, 191, 252, - 87, 1, 208, 252, 87, 1, 238, 43, 252, 87, 1, 224, 173, 252, 87, 1, 231, - 31, 252, 87, 1, 154, 252, 87, 31, 5, 74, 252, 87, 31, 5, 66, 227, 93, 1, - 57, 227, 93, 1, 74, 227, 93, 1, 66, 227, 93, 1, 177, 227, 93, 1, 246, - 193, 227, 93, 1, 235, 137, 227, 93, 1, 227, 107, 227, 93, 1, 250, 189, - 227, 93, 1, 236, 1, 227, 93, 1, 213, 227, 93, 1, 253, 70, 227, 93, 1, - 198, 227, 93, 1, 191, 227, 93, 1, 238, 43, 227, 93, 1, 224, 173, 227, 93, - 1, 231, 31, 227, 93, 31, 5, 74, 227, 93, 31, 5, 66, 71, 1, 177, 71, 1, - 238, 227, 71, 1, 238, 150, 71, 1, 238, 208, 71, 1, 235, 107, 71, 1, 252, - 39, 71, 1, 251, 204, 71, 1, 251, 68, 71, 1, 251, 150, 71, 1, 234, 152, - 71, 1, 250, 189, 71, 1, 226, 10, 71, 1, 249, 161, 71, 1, 226, 7, 71, 1, - 235, 9, 71, 1, 227, 107, 71, 1, 226, 251, 71, 1, 96, 71, 1, 226, 201, 71, - 1, 235, 6, 71, 1, 253, 70, 71, 1, 233, 97, 71, 1, 233, 4, 71, 1, 233, 79, - 71, 1, 236, 103, 71, 1, 223, 183, 71, 1, 231, 122, 71, 1, 237, 143, 71, - 1, 224, 206, 71, 1, 229, 146, 71, 1, 228, 84, 71, 1, 231, 31, 71, 1, 154, - 71, 1, 238, 43, 71, 1, 232, 138, 71, 240, 9, 31, 232, 124, 71, 240, 9, - 31, 232, 137, 71, 240, 9, 31, 232, 104, 71, 240, 9, 31, 232, 99, 71, 240, - 9, 31, 232, 84, 71, 240, 9, 31, 232, 61, 71, 240, 9, 31, 232, 49, 71, - 240, 9, 31, 232, 48, 71, 240, 9, 31, 231, 43, 71, 240, 9, 31, 231, 36, - 71, 240, 9, 31, 237, 80, 71, 240, 9, 31, 237, 71, 71, 240, 9, 31, 232, - 119, 71, 240, 9, 31, 232, 130, 71, 240, 9, 31, 232, 91, 225, 196, 118, - 71, 240, 9, 31, 232, 91, 225, 196, 113, 71, 240, 9, 31, 232, 120, 71, 31, - 239, 254, 254, 135, 71, 31, 239, 254, 255, 63, 71, 31, 5, 255, 63, 71, - 31, 5, 74, 71, 31, 5, 240, 47, 71, 31, 5, 224, 25, 71, 31, 5, 223, 127, - 71, 31, 5, 66, 71, 31, 5, 225, 76, 71, 31, 5, 225, 170, 71, 31, 5, 234, - 88, 71, 31, 5, 191, 71, 31, 5, 240, 72, 71, 31, 5, 72, 71, 31, 5, 255, - 19, 71, 31, 5, 254, 253, 71, 31, 5, 234, 52, 71, 31, 5, 254, 53, 71, 5, - 235, 67, 71, 5, 231, 242, 71, 5, 223, 137, 71, 5, 236, 25, 71, 5, 226, - 68, 71, 5, 253, 38, 71, 5, 231, 118, 71, 5, 226, 123, 71, 5, 239, 52, 71, - 5, 254, 255, 71, 5, 230, 254, 230, 250, 71, 5, 224, 213, 71, 5, 251, 65, - 71, 5, 253, 20, 71, 5, 238, 222, 71, 5, 253, 34, 71, 5, 252, 28, 233, 42, - 238, 83, 71, 5, 237, 223, 226, 108, 71, 5, 252, 192, 71, 5, 233, 81, 236, - 64, 71, 5, 238, 138, 71, 250, 222, 14, 231, 176, 71, 5, 254, 39, 71, 5, - 254, 56, 71, 21, 223, 89, 71, 21, 118, 71, 21, 113, 71, 21, 166, 71, 21, - 158, 71, 21, 173, 71, 21, 183, 71, 21, 194, 71, 21, 187, 71, 21, 192, 71, - 14, 237, 223, 254, 58, 228, 160, 71, 14, 237, 223, 254, 58, 236, 40, 71, - 14, 237, 223, 254, 58, 233, 41, 71, 14, 237, 223, 254, 58, 252, 219, 71, - 14, 237, 223, 254, 58, 252, 75, 71, 14, 237, 223, 254, 58, 232, 226, 71, - 14, 237, 223, 254, 58, 232, 220, 71, 14, 237, 223, 254, 58, 232, 218, 71, - 14, 237, 223, 254, 58, 232, 224, 71, 14, 237, 223, 254, 58, 232, 222, 68, - 252, 163, 68, 247, 249, 68, 251, 54, 68, 246, 218, 228, 38, 68, 251, 61, - 68, 246, 243, 249, 138, 68, 226, 122, 228, 165, 244, 95, 68, 229, 14, 4, - 252, 123, 237, 13, 68, 237, 33, 251, 54, 68, 237, 33, 246, 218, 228, 38, - 68, 235, 54, 68, 246, 230, 38, 230, 193, 118, 68, 246, 230, 38, 230, 193, - 113, 68, 246, 230, 38, 230, 193, 166, 68, 31, 229, 173, 68, 21, 223, 89, - 68, 21, 118, 68, 21, 113, 68, 21, 166, 68, 21, 158, 68, 21, 173, 68, 21, - 183, 68, 21, 194, 68, 21, 187, 68, 21, 192, 68, 1, 57, 68, 1, 72, 68, 1, - 74, 68, 1, 73, 68, 1, 66, 68, 1, 234, 88, 68, 1, 225, 159, 68, 1, 248, - 35, 68, 1, 236, 1, 68, 1, 254, 184, 68, 1, 253, 70, 68, 1, 213, 68, 1, - 232, 138, 68, 1, 246, 193, 68, 1, 198, 68, 1, 238, 43, 68, 1, 231, 31, - 68, 1, 229, 146, 68, 1, 227, 107, 68, 1, 250, 189, 68, 1, 251, 204, 68, - 1, 239, 179, 68, 1, 191, 68, 1, 208, 68, 1, 224, 173, 68, 1, 247, 129, - 68, 1, 177, 68, 1, 238, 227, 68, 1, 226, 44, 68, 1, 223, 117, 68, 1, 245, - 167, 68, 1, 223, 20, 68, 1, 237, 205, 68, 1, 223, 72, 68, 1, 251, 169, - 68, 1, 226, 122, 182, 31, 53, 68, 1, 226, 122, 72, 68, 1, 226, 122, 74, - 68, 1, 226, 122, 73, 68, 1, 226, 122, 66, 68, 1, 226, 122, 234, 88, 68, - 1, 226, 122, 225, 159, 68, 1, 226, 122, 254, 184, 68, 1, 226, 122, 253, - 70, 68, 1, 226, 122, 213, 68, 1, 226, 122, 232, 138, 68, 1, 226, 122, - 246, 193, 68, 1, 226, 122, 198, 68, 1, 226, 122, 227, 107, 68, 1, 226, - 122, 250, 189, 68, 1, 226, 122, 251, 204, 68, 1, 226, 122, 239, 179, 68, - 1, 226, 122, 226, 44, 68, 1, 226, 122, 191, 68, 1, 226, 122, 224, 173, - 68, 1, 226, 122, 177, 68, 1, 226, 122, 246, 190, 68, 1, 226, 122, 245, - 167, 68, 1, 226, 122, 239, 155, 68, 1, 226, 122, 235, 87, 68, 1, 226, - 122, 248, 70, 68, 1, 229, 14, 72, 68, 1, 229, 14, 74, 68, 1, 229, 14, - 239, 188, 68, 1, 229, 14, 225, 159, 68, 1, 229, 14, 66, 68, 1, 229, 14, - 254, 184, 68, 1, 229, 14, 177, 68, 1, 229, 14, 246, 193, 68, 1, 229, 14, - 154, 68, 1, 229, 14, 213, 68, 1, 229, 14, 229, 146, 68, 1, 229, 14, 227, - 107, 68, 1, 229, 14, 250, 189, 68, 1, 229, 14, 239, 179, 68, 1, 229, 14, - 247, 129, 68, 1, 229, 14, 246, 190, 68, 1, 229, 14, 245, 167, 68, 1, 229, - 14, 226, 44, 68, 1, 229, 14, 223, 117, 68, 1, 229, 14, 232, 22, 68, 1, - 229, 14, 251, 204, 68, 1, 229, 14, 223, 85, 68, 1, 237, 33, 74, 68, 1, - 237, 33, 177, 68, 1, 237, 33, 208, 68, 1, 237, 33, 247, 129, 68, 1, 237, - 33, 223, 85, 68, 1, 254, 220, 246, 175, 254, 161, 118, 68, 1, 254, 220, - 246, 175, 224, 212, 118, 68, 1, 254, 220, 246, 175, 250, 158, 68, 1, 254, - 220, 246, 175, 225, 167, 68, 1, 254, 220, 246, 175, 239, 223, 225, 167, - 68, 1, 254, 220, 246, 175, 253, 47, 68, 1, 254, 220, 246, 175, 152, 253, - 47, 68, 1, 254, 220, 246, 175, 57, 68, 1, 254, 220, 246, 175, 74, 68, 1, - 254, 220, 246, 175, 177, 68, 1, 254, 220, 246, 175, 235, 137, 68, 1, 254, - 220, 246, 175, 252, 39, 68, 1, 254, 220, 246, 175, 226, 20, 68, 1, 254, - 220, 246, 175, 226, 10, 68, 1, 254, 220, 246, 175, 250, 117, 68, 1, 254, - 220, 246, 175, 235, 18, 68, 1, 254, 220, 246, 175, 227, 107, 68, 1, 254, - 220, 246, 175, 250, 189, 68, 1, 254, 220, 246, 175, 213, 68, 1, 254, 220, - 246, 175, 233, 97, 68, 1, 254, 220, 246, 175, 228, 110, 68, 1, 254, 220, - 246, 175, 223, 85, 68, 1, 254, 220, 246, 175, 223, 117, 68, 1, 254, 220, - 246, 175, 255, 3, 68, 1, 226, 122, 254, 220, 246, 175, 227, 107, 68, 1, - 226, 122, 254, 220, 246, 175, 223, 85, 68, 1, 237, 33, 254, 220, 246, - 175, 246, 66, 68, 1, 237, 33, 254, 220, 246, 175, 235, 137, 68, 1, 237, - 33, 254, 220, 246, 175, 252, 39, 68, 1, 237, 33, 254, 220, 246, 175, 239, - 160, 68, 1, 237, 33, 254, 220, 246, 175, 226, 20, 68, 1, 237, 33, 254, - 220, 246, 175, 250, 101, 68, 1, 237, 33, 254, 220, 246, 175, 227, 107, - 68, 1, 237, 33, 254, 220, 246, 175, 250, 22, 68, 1, 237, 33, 254, 220, - 246, 175, 228, 110, 68, 1, 237, 33, 254, 220, 246, 175, 250, 201, 68, 1, - 237, 33, 254, 220, 246, 175, 223, 85, 68, 1, 237, 33, 254, 220, 246, 175, - 223, 117, 68, 1, 254, 220, 246, 175, 132, 66, 68, 1, 254, 220, 246, 175, - 132, 191, 68, 1, 237, 33, 254, 220, 246, 175, 252, 190, 68, 1, 254, 220, - 246, 175, 250, 179, 68, 1, 237, 33, 254, 220, 246, 175, 237, 205, 174, - 224, 193, 237, 210, 174, 1, 177, 174, 1, 238, 227, 174, 1, 246, 193, 174, - 1, 246, 66, 174, 1, 235, 137, 174, 1, 252, 39, 174, 1, 251, 204, 174, 1, - 239, 179, 174, 1, 239, 160, 174, 1, 223, 250, 174, 1, 227, 107, 174, 1, - 226, 251, 174, 1, 250, 189, 174, 1, 250, 22, 174, 1, 236, 1, 174, 1, 213, - 174, 1, 233, 97, 174, 1, 253, 70, 174, 1, 252, 190, 174, 1, 198, 174, 1, - 191, 174, 1, 208, 174, 1, 238, 43, 174, 1, 224, 173, 174, 1, 229, 146, - 174, 1, 228, 110, 174, 1, 231, 31, 174, 1, 154, 174, 31, 5, 57, 174, 31, - 5, 74, 174, 31, 5, 66, 174, 31, 5, 248, 35, 174, 31, 5, 254, 253, 174, - 31, 5, 234, 52, 174, 31, 5, 254, 53, 174, 31, 5, 72, 174, 31, 5, 73, 174, - 228, 0, 1, 191, 174, 228, 0, 1, 208, 174, 228, 0, 1, 224, 173, 174, 3, 1, - 177, 174, 3, 1, 235, 137, 174, 3, 1, 254, 160, 174, 3, 1, 227, 107, 174, - 3, 1, 236, 1, 174, 3, 1, 213, 174, 3, 1, 198, 174, 3, 1, 208, 174, 3, 1, - 238, 43, 174, 5, 236, 57, 174, 5, 238, 248, 174, 5, 231, 30, 174, 5, 237, - 125, 174, 247, 149, 76, 174, 232, 69, 76, 174, 21, 223, 89, 174, 21, 118, - 174, 21, 113, 174, 21, 166, 174, 21, 158, 174, 21, 173, 174, 21, 183, - 174, 21, 194, 174, 21, 187, 174, 21, 192, 91, 237, 244, 1, 177, 91, 237, - 244, 1, 224, 72, 91, 237, 244, 1, 235, 137, 91, 237, 244, 1, 226, 44, 91, - 237, 244, 1, 231, 31, 91, 237, 244, 1, 191, 91, 237, 244, 1, 227, 107, - 91, 237, 244, 1, 226, 251, 91, 237, 244, 1, 238, 43, 91, 237, 244, 1, - 213, 91, 237, 244, 1, 233, 97, 91, 237, 244, 1, 198, 91, 237, 244, 1, - 247, 129, 91, 237, 244, 1, 225, 64, 91, 237, 244, 1, 154, 91, 237, 244, - 1, 232, 138, 91, 237, 244, 1, 238, 227, 91, 237, 244, 1, 226, 37, 91, - 237, 244, 1, 236, 1, 91, 237, 244, 1, 57, 91, 237, 244, 1, 74, 91, 237, - 244, 1, 248, 35, 91, 237, 244, 1, 248, 24, 91, 237, 244, 1, 66, 91, 237, - 244, 1, 234, 52, 91, 237, 244, 1, 73, 91, 237, 244, 1, 225, 159, 91, 237, - 244, 1, 72, 91, 237, 244, 1, 254, 52, 91, 237, 244, 1, 254, 253, 91, 237, - 244, 1, 226, 116, 91, 237, 244, 1, 226, 115, 91, 237, 244, 1, 226, 114, - 91, 237, 244, 1, 226, 113, 91, 237, 244, 1, 226, 112, 139, 91, 144, 1, - 201, 232, 138, 139, 91, 144, 1, 184, 232, 138, 139, 91, 144, 1, 201, 177, - 139, 91, 144, 1, 201, 224, 72, 139, 91, 144, 1, 201, 235, 137, 139, 91, - 144, 1, 184, 177, 139, 91, 144, 1, 184, 224, 72, 139, 91, 144, 1, 184, - 235, 137, 139, 91, 144, 1, 201, 226, 44, 139, 91, 144, 1, 201, 231, 31, - 139, 91, 144, 1, 201, 191, 139, 91, 144, 1, 184, 226, 44, 139, 91, 144, - 1, 184, 231, 31, 139, 91, 144, 1, 184, 191, 139, 91, 144, 1, 201, 227, - 107, 139, 91, 144, 1, 201, 226, 251, 139, 91, 144, 1, 201, 236, 1, 139, - 91, 144, 1, 184, 227, 107, 139, 91, 144, 1, 184, 226, 251, 139, 91, 144, - 1, 184, 236, 1, 139, 91, 144, 1, 201, 213, 139, 91, 144, 1, 201, 233, 97, - 139, 91, 144, 1, 201, 198, 139, 91, 144, 1, 184, 213, 139, 91, 144, 1, - 184, 233, 97, 139, 91, 144, 1, 184, 198, 139, 91, 144, 1, 201, 247, 129, - 139, 91, 144, 1, 201, 225, 64, 139, 91, 144, 1, 201, 238, 43, 139, 91, - 144, 1, 184, 247, 129, 139, 91, 144, 1, 184, 225, 64, 139, 91, 144, 1, - 184, 238, 43, 139, 91, 144, 1, 201, 154, 139, 91, 144, 1, 201, 250, 189, - 139, 91, 144, 1, 201, 253, 70, 139, 91, 144, 1, 184, 154, 139, 91, 144, - 1, 184, 250, 189, 139, 91, 144, 1, 184, 253, 70, 139, 91, 144, 1, 201, - 238, 80, 139, 91, 144, 1, 201, 224, 45, 139, 91, 144, 1, 184, 238, 80, - 139, 91, 144, 1, 184, 224, 45, 139, 91, 144, 31, 5, 31, 229, 52, 139, 91, - 144, 31, 5, 255, 63, 139, 91, 144, 31, 5, 240, 47, 139, 91, 144, 31, 5, - 66, 139, 91, 144, 31, 5, 225, 76, 139, 91, 144, 31, 5, 72, 139, 91, 144, - 31, 5, 255, 19, 139, 91, 144, 31, 5, 73, 139, 91, 144, 31, 5, 234, 105, - 139, 91, 144, 31, 5, 225, 159, 139, 91, 144, 31, 5, 254, 34, 139, 91, - 144, 31, 5, 255, 55, 139, 91, 144, 31, 5, 225, 70, 139, 91, 144, 31, 5, - 233, 248, 139, 91, 144, 31, 5, 234, 102, 139, 91, 144, 31, 5, 225, 157, - 139, 91, 144, 31, 5, 239, 188, 139, 91, 144, 1, 35, 196, 139, 91, 144, 1, - 35, 235, 139, 139, 91, 144, 1, 35, 199, 139, 91, 144, 1, 35, 185, 139, - 91, 144, 1, 35, 239, 76, 139, 91, 144, 1, 35, 222, 222, 139, 91, 144, 1, - 35, 254, 27, 139, 91, 144, 206, 237, 17, 139, 91, 144, 206, 237, 16, 139, - 91, 144, 21, 223, 89, 139, 91, 144, 21, 118, 139, 91, 144, 21, 113, 139, - 91, 144, 21, 166, 139, 91, 144, 21, 158, 139, 91, 144, 21, 173, 139, 91, - 144, 21, 183, 139, 91, 144, 21, 194, 139, 91, 144, 21, 187, 139, 91, 144, - 21, 192, 139, 91, 144, 5, 238, 33, 139, 91, 144, 5, 238, 32, 71, 14, 233, - 163, 71, 14, 236, 41, 238, 148, 71, 14, 233, 42, 238, 148, 71, 14, 252, - 220, 238, 148, 71, 14, 252, 76, 238, 148, 71, 14, 232, 227, 238, 148, 71, - 14, 232, 221, 238, 148, 71, 14, 232, 219, 238, 148, 71, 14, 232, 225, - 238, 148, 71, 14, 232, 223, 238, 148, 71, 14, 250, 147, 238, 148, 71, 14, - 250, 143, 238, 148, 71, 14, 250, 142, 238, 148, 71, 14, 250, 145, 238, - 148, 71, 14, 250, 144, 238, 148, 71, 14, 250, 141, 238, 148, 71, 14, 225, - 227, 71, 14, 236, 41, 231, 117, 71, 14, 233, 42, 231, 117, 71, 14, 252, - 220, 231, 117, 71, 14, 252, 76, 231, 117, 71, 14, 232, 227, 231, 117, 71, - 14, 232, 221, 231, 117, 71, 14, 232, 219, 231, 117, 71, 14, 232, 225, - 231, 117, 71, 14, 232, 223, 231, 117, 71, 14, 250, 147, 231, 117, 71, 14, - 250, 143, 231, 117, 71, 14, 250, 142, 231, 117, 71, 14, 250, 145, 231, - 117, 71, 14, 250, 144, 231, 117, 71, 14, 250, 141, 231, 117, 252, 88, 1, - 177, 252, 88, 1, 246, 193, 252, 88, 1, 235, 137, 252, 88, 1, 235, 109, - 252, 88, 1, 213, 252, 88, 1, 253, 70, 252, 88, 1, 198, 252, 88, 1, 236, - 69, 252, 88, 1, 227, 107, 252, 88, 1, 250, 189, 252, 88, 1, 236, 1, 252, - 88, 1, 234, 230, 252, 88, 1, 252, 39, 252, 88, 1, 239, 179, 252, 88, 1, - 234, 173, 252, 88, 1, 234, 171, 252, 88, 1, 191, 252, 88, 1, 208, 252, - 88, 1, 238, 43, 252, 88, 1, 225, 64, 252, 88, 1, 231, 31, 252, 88, 1, 57, - 252, 88, 1, 154, 252, 88, 31, 5, 74, 252, 88, 31, 5, 66, 252, 88, 31, 5, - 72, 252, 88, 31, 5, 73, 252, 88, 31, 5, 255, 19, 252, 88, 233, 224, 252, - 88, 247, 233, 106, 230, 205, 85, 5, 225, 148, 231, 177, 85, 5, 225, 148, - 252, 20, 85, 5, 251, 229, 85, 5, 227, 211, 85, 5, 252, 161, 85, 1, 254, - 238, 85, 1, 254, 239, 227, 39, 85, 1, 240, 43, 85, 1, 240, 44, 227, 39, - 85, 1, 225, 151, 85, 1, 225, 152, 227, 39, 85, 1, 232, 25, 231, 213, 85, - 1, 232, 25, 231, 214, 227, 39, 85, 1, 238, 44, 237, 220, 85, 1, 238, 44, - 237, 221, 227, 39, 85, 1, 248, 7, 85, 1, 254, 251, 85, 1, 234, 76, 85, 1, - 234, 77, 227, 39, 85, 1, 177, 85, 1, 188, 237, 52, 85, 1, 246, 193, 85, - 1, 246, 194, 246, 2, 85, 1, 235, 137, 85, 1, 252, 39, 85, 1, 252, 40, - 238, 35, 85, 1, 239, 179, 85, 1, 239, 180, 239, 163, 85, 1, 234, 173, 85, - 1, 227, 108, 238, 1, 85, 1, 227, 108, 236, 36, 237, 52, 85, 1, 250, 190, - 236, 36, 254, 207, 85, 1, 250, 190, 236, 36, 237, 52, 85, 1, 236, 2, 232, - 5, 85, 1, 227, 107, 85, 1, 227, 108, 227, 55, 85, 1, 250, 189, 85, 1, - 250, 190, 237, 56, 85, 1, 236, 1, 85, 1, 213, 85, 1, 233, 242, 239, 39, - 85, 1, 253, 70, 85, 1, 253, 71, 238, 249, 85, 1, 198, 85, 1, 191, 85, 1, - 208, 85, 1, 238, 43, 85, 1, 224, 173, 85, 1, 231, 32, 231, 18, 85, 1, - 231, 32, 230, 245, 85, 1, 231, 31, 85, 1, 154, 85, 5, 231, 207, 85, 31, - 5, 227, 39, 85, 31, 5, 225, 147, 85, 31, 5, 225, 148, 230, 242, 85, 31, - 5, 227, 236, 85, 31, 5, 227, 237, 240, 35, 85, 31, 5, 232, 25, 231, 213, - 85, 31, 5, 232, 25, 231, 214, 227, 39, 85, 31, 5, 238, 44, 237, 220, 85, - 31, 5, 238, 44, 237, 221, 227, 39, 85, 31, 5, 227, 78, 85, 31, 5, 227, - 79, 231, 213, 85, 31, 5, 227, 79, 227, 39, 85, 31, 5, 227, 79, 231, 214, - 227, 39, 85, 31, 5, 233, 125, 85, 31, 5, 233, 126, 227, 39, 85, 255, 25, - 255, 24, 85, 1, 239, 60, 230, 241, 85, 1, 238, 205, 230, 241, 85, 1, 225, - 181, 230, 241, 85, 1, 248, 30, 230, 241, 85, 1, 225, 43, 230, 241, 85, 1, - 223, 109, 230, 241, 85, 1, 254, 64, 230, 241, 85, 21, 223, 89, 85, 21, - 118, 85, 21, 113, 85, 21, 166, 85, 21, 158, 85, 21, 173, 85, 21, 183, 85, - 21, 194, 85, 21, 187, 85, 21, 192, 85, 233, 203, 85, 233, 219, 85, 224, - 110, 85, 252, 7, 233, 213, 85, 252, 7, 228, 253, 85, 252, 7, 233, 179, - 85, 233, 218, 85, 23, 14, 249, 146, 85, 23, 14, 250, 45, 85, 23, 14, 248, - 93, 85, 23, 14, 250, 149, 85, 23, 14, 250, 150, 227, 211, 85, 23, 14, - 249, 209, 85, 23, 14, 250, 182, 85, 23, 14, 250, 30, 85, 23, 14, 250, - 168, 85, 23, 14, 250, 150, 246, 127, 85, 23, 14, 36, 227, 36, 85, 23, 14, - 36, 247, 231, 85, 23, 14, 36, 238, 244, 85, 23, 14, 36, 238, 246, 85, 23, - 14, 36, 239, 167, 85, 23, 14, 36, 238, 245, 2, 239, 167, 85, 23, 14, 36, - 238, 247, 2, 239, 167, 85, 23, 14, 36, 252, 208, 85, 23, 14, 36, 246, 5, - 85, 23, 14, 231, 152, 234, 44, 248, 103, 85, 23, 14, 231, 152, 234, 44, - 250, 180, 85, 23, 14, 231, 152, 251, 82, 225, 245, 85, 23, 14, 231, 152, - 251, 82, 227, 85, 85, 23, 14, 237, 236, 234, 44, 233, 209, 85, 23, 14, - 237, 236, 234, 44, 232, 169, 85, 23, 14, 237, 236, 251, 82, 233, 21, 85, - 23, 14, 237, 236, 251, 82, 233, 13, 85, 23, 14, 237, 236, 234, 44, 233, - 37, 220, 5, 233, 201, 220, 5, 233, 207, 220, 5, 233, 206, 220, 1, 57, - 220, 1, 74, 220, 1, 66, 220, 1, 255, 19, 220, 1, 73, 220, 1, 72, 220, 1, - 247, 165, 220, 1, 177, 220, 1, 232, 138, 220, 1, 246, 193, 220, 1, 235, - 137, 220, 1, 252, 39, 220, 1, 239, 179, 220, 1, 223, 117, 220, 1, 234, - 173, 220, 1, 227, 107, 220, 1, 250, 189, 220, 1, 236, 1, 220, 1, 213, - 220, 1, 247, 129, 220, 1, 225, 64, 220, 1, 253, 70, 220, 1, 198, 220, 1, - 191, 220, 1, 208, 220, 1, 238, 43, 220, 1, 224, 173, 220, 1, 231, 31, - 220, 1, 224, 72, 220, 1, 154, 220, 251, 33, 5, 233, 216, 220, 251, 33, 5, - 233, 202, 220, 251, 33, 5, 233, 200, 220, 31, 5, 233, 208, 220, 31, 5, - 233, 199, 220, 31, 5, 233, 211, 220, 31, 5, 233, 205, 220, 31, 5, 233, - 217, 220, 31, 5, 233, 210, 220, 5, 233, 220, 220, 1, 238, 227, 220, 1, - 227, 184, 220, 21, 223, 89, 220, 21, 118, 220, 21, 113, 220, 21, 166, - 220, 21, 158, 220, 21, 173, 220, 21, 183, 220, 21, 194, 220, 21, 187, - 220, 21, 192, 156, 1, 177, 156, 1, 238, 160, 156, 1, 238, 227, 156, 1, - 246, 193, 156, 1, 246, 20, 156, 1, 235, 137, 156, 1, 252, 39, 156, 1, - 251, 204, 156, 1, 239, 179, 156, 1, 234, 173, 156, 1, 227, 107, 156, 1, - 226, 251, 156, 1, 250, 189, 156, 1, 236, 1, 156, 1, 213, 156, 1, 233, 24, - 156, 1, 233, 97, 156, 1, 247, 129, 156, 1, 247, 32, 156, 1, 253, 70, 156, - 1, 252, 151, 156, 1, 198, 156, 1, 236, 109, 156, 1, 226, 44, 156, 1, 226, - 37, 156, 1, 248, 70, 156, 1, 191, 156, 1, 208, 156, 1, 238, 43, 156, 1, - 154, 156, 1, 245, 54, 156, 1, 225, 64, 156, 1, 231, 31, 156, 1, 229, 146, - 156, 1, 224, 173, 156, 1, 57, 156, 228, 0, 1, 191, 156, 228, 0, 1, 208, - 156, 31, 5, 255, 63, 156, 31, 5, 74, 156, 31, 5, 73, 156, 31, 5, 234, 52, - 156, 31, 5, 66, 156, 31, 5, 225, 76, 156, 31, 5, 72, 156, 251, 33, 5, - 239, 76, 156, 251, 33, 5, 185, 156, 251, 33, 5, 149, 156, 251, 33, 5, - 199, 156, 251, 33, 5, 233, 244, 156, 251, 33, 5, 146, 156, 251, 33, 5, - 227, 109, 156, 251, 33, 5, 234, 158, 156, 251, 33, 5, 239, 43, 156, 5, - 232, 3, 156, 5, 234, 202, 156, 232, 171, 227, 106, 156, 232, 171, 234, - 165, 226, 178, 227, 106, 156, 232, 171, 251, 208, 156, 232, 171, 226, 32, - 251, 208, 156, 232, 171, 226, 31, 156, 21, 223, 89, 156, 21, 118, 156, - 21, 113, 156, 21, 166, 156, 21, 158, 156, 21, 173, 156, 21, 183, 156, 21, - 194, 156, 21, 187, 156, 21, 192, 156, 1, 226, 20, 156, 1, 226, 10, 156, - 1, 250, 117, 234, 74, 251, 164, 21, 223, 89, 234, 74, 251, 164, 21, 118, - 234, 74, 251, 164, 21, 113, 234, 74, 251, 164, 21, 166, 234, 74, 251, - 164, 21, 158, 234, 74, 251, 164, 21, 173, 234, 74, 251, 164, 21, 183, - 234, 74, 251, 164, 21, 194, 234, 74, 251, 164, 21, 187, 234, 74, 251, - 164, 21, 192, 234, 74, 251, 164, 1, 238, 43, 234, 74, 251, 164, 1, 254, - 62, 234, 74, 251, 164, 1, 255, 8, 234, 74, 251, 164, 1, 254, 184, 234, - 74, 251, 164, 1, 254, 233, 234, 74, 251, 164, 1, 238, 42, 234, 74, 251, - 164, 1, 255, 59, 234, 74, 251, 164, 1, 255, 60, 234, 74, 251, 164, 1, - 255, 58, 234, 74, 251, 164, 1, 255, 56, 234, 74, 251, 164, 1, 237, 193, - 234, 74, 251, 164, 1, 239, 205, 234, 74, 251, 164, 1, 240, 48, 234, 74, - 251, 164, 1, 239, 220, 234, 74, 251, 164, 1, 239, 210, 234, 74, 251, 164, - 1, 237, 110, 234, 74, 251, 164, 1, 225, 165, 234, 74, 251, 164, 1, 225, - 163, 234, 74, 251, 164, 1, 225, 121, 234, 74, 251, 164, 1, 225, 70, 234, - 74, 251, 164, 1, 237, 243, 234, 74, 251, 164, 1, 247, 211, 234, 74, 251, - 164, 1, 248, 38, 234, 74, 251, 164, 1, 247, 239, 234, 74, 251, 164, 1, - 247, 192, 234, 74, 251, 164, 1, 237, 143, 234, 74, 251, 164, 1, 234, 16, - 234, 74, 251, 164, 1, 234, 101, 234, 74, 251, 164, 1, 234, 6, 234, 74, - 251, 164, 1, 234, 83, 234, 74, 251, 164, 236, 67, 225, 251, 234, 74, 251, - 164, 246, 188, 225, 252, 234, 74, 251, 164, 236, 65, 225, 252, 234, 74, - 251, 164, 231, 222, 234, 74, 251, 164, 233, 95, 234, 74, 251, 164, 255, - 2, 234, 74, 251, 164, 232, 171, 236, 63, 234, 74, 251, 164, 232, 171, 47, - 236, 63, 7, 1, 3, 6, 57, 7, 1, 3, 6, 255, 19, 7, 3, 1, 209, 255, 19, 7, - 1, 3, 6, 253, 31, 254, 27, 7, 1, 3, 6, 252, 44, 7, 1, 3, 6, 222, 222, 7, - 1, 3, 6, 247, 168, 7, 1, 3, 6, 72, 7, 3, 1, 209, 234, 44, 72, 7, 3, 1, - 209, 74, 7, 1, 3, 6, 239, 182, 7, 1, 3, 6, 239, 76, 7, 1, 3, 6, 238, 47, - 2, 82, 7, 1, 3, 6, 185, 7, 1, 3, 6, 200, 199, 7, 1, 3, 6, 73, 7, 1, 3, 6, - 234, 44, 73, 7, 3, 1, 229, 11, 73, 7, 3, 1, 229, 11, 234, 44, 73, 7, 3, - 1, 229, 11, 130, 2, 82, 7, 3, 1, 209, 234, 88, 7, 1, 3, 6, 234, 13, 7, 3, - 1, 226, 106, 132, 73, 7, 3, 1, 252, 126, 132, 73, 7, 1, 3, 6, 233, 244, - 7, 1, 3, 6, 200, 146, 7, 1, 3, 6, 209, 146, 7, 1, 3, 6, 227, 109, 7, 1, - 3, 6, 66, 7, 3, 1, 229, 11, 66, 7, 3, 1, 229, 11, 250, 2, 66, 7, 3, 1, - 229, 11, 209, 185, 7, 1, 3, 6, 196, 7, 1, 3, 6, 224, 174, 7, 1, 3, 6, - 223, 119, 7, 1, 3, 6, 247, 132, 7, 1, 224, 204, 238, 7, 228, 133, 7, 1, - 254, 248, 19, 1, 3, 6, 246, 169, 19, 1, 3, 6, 238, 16, 19, 1, 3, 6, 233, - 69, 19, 1, 3, 6, 231, 182, 19, 1, 3, 6, 232, 183, 28, 1, 3, 6, 248, 2, - 52, 1, 6, 57, 52, 1, 6, 255, 19, 52, 1, 6, 254, 27, 52, 1, 6, 253, 31, - 254, 27, 52, 1, 6, 222, 222, 52, 1, 6, 72, 52, 1, 6, 200, 72, 52, 1, 6, - 214, 52, 1, 6, 212, 52, 1, 6, 74, 52, 1, 6, 239, 182, 52, 1, 6, 239, 76, - 52, 1, 6, 149, 52, 1, 6, 185, 52, 1, 6, 199, 52, 1, 6, 200, 199, 52, 1, - 6, 73, 52, 1, 6, 234, 13, 52, 1, 6, 233, 244, 52, 1, 6, 146, 52, 1, 6, - 227, 109, 52, 1, 6, 66, 52, 1, 6, 224, 174, 52, 1, 3, 57, 52, 1, 3, 209, - 57, 52, 1, 3, 254, 205, 52, 1, 3, 209, 255, 19, 52, 1, 3, 254, 27, 52, 1, - 3, 222, 222, 52, 1, 3, 72, 52, 1, 3, 230, 222, 52, 1, 3, 234, 44, 72, 52, - 1, 3, 209, 234, 44, 72, 52, 1, 3, 214, 52, 1, 3, 209, 74, 52, 1, 3, 239, - 76, 52, 1, 3, 185, 52, 1, 3, 247, 228, 52, 1, 3, 73, 52, 1, 3, 234, 44, - 73, 52, 1, 3, 226, 106, 132, 73, 52, 1, 3, 252, 126, 132, 73, 52, 1, 3, - 233, 244, 52, 1, 3, 227, 109, 52, 1, 3, 66, 52, 1, 3, 229, 11, 66, 52, 1, - 3, 209, 185, 52, 1, 3, 196, 52, 1, 3, 254, 248, 52, 1, 3, 252, 198, 52, - 1, 3, 19, 246, 169, 52, 1, 3, 250, 47, 52, 1, 3, 19, 233, 87, 52, 1, 3, - 251, 169, 7, 227, 253, 3, 1, 74, 7, 227, 253, 3, 1, 146, 7, 227, 253, 3, - 1, 66, 7, 227, 253, 3, 1, 196, 19, 227, 253, 3, 1, 252, 198, 19, 227, - 253, 3, 1, 246, 169, 19, 227, 253, 3, 1, 231, 182, 19, 227, 253, 3, 1, - 233, 87, 19, 227, 253, 3, 1, 251, 169, 7, 3, 1, 225, 159, 7, 3, 1, 45, 2, - 236, 154, 205, 7, 3, 1, 250, 192, 2, 236, 154, 205, 7, 3, 1, 247, 131, 2, - 236, 154, 205, 7, 3, 1, 237, 69, 2, 236, 154, 205, 7, 3, 1, 236, 5, 2, - 236, 154, 205, 7, 3, 1, 233, 245, 2, 236, 154, 205, 7, 3, 1, 232, 27, 2, - 236, 154, 205, 7, 3, 1, 232, 27, 2, 247, 41, 22, 236, 154, 205, 7, 3, 1, - 231, 35, 2, 236, 154, 205, 7, 3, 1, 227, 110, 2, 236, 154, 205, 7, 3, 1, - 223, 120, 2, 236, 154, 205, 7, 3, 1, 209, 214, 52, 1, 28, 247, 239, 7, 3, - 1, 239, 241, 214, 7, 3, 1, 226, 254, 2, 228, 23, 7, 3, 6, 1, 244, 81, 2, - 82, 7, 3, 1, 239, 216, 2, 82, 7, 3, 1, 233, 245, 2, 82, 7, 3, 6, 1, 97, - 2, 82, 7, 3, 1, 225, 111, 2, 82, 7, 3, 1, 45, 2, 233, 229, 88, 7, 3, 1, - 250, 192, 2, 233, 229, 88, 7, 3, 1, 247, 131, 2, 233, 229, 88, 7, 3, 1, - 246, 196, 2, 233, 229, 88, 7, 3, 1, 239, 77, 2, 233, 229, 88, 7, 3, 1, - 238, 47, 2, 233, 229, 88, 7, 3, 1, 237, 69, 2, 233, 229, 88, 7, 3, 1, - 236, 5, 2, 233, 229, 88, 7, 3, 1, 233, 245, 2, 233, 229, 88, 7, 3, 1, - 232, 27, 2, 233, 229, 88, 7, 3, 1, 231, 35, 2, 233, 229, 88, 7, 3, 1, - 247, 184, 2, 233, 229, 88, 7, 3, 1, 225, 65, 2, 233, 229, 88, 7, 3, 1, - 224, 74, 2, 233, 229, 88, 7, 3, 1, 223, 120, 2, 233, 229, 88, 7, 3, 1, - 102, 2, 231, 196, 88, 7, 3, 1, 254, 206, 2, 231, 196, 88, 7, 3, 1, 250, - 192, 2, 244, 217, 22, 227, 89, 7, 3, 1, 161, 2, 231, 196, 88, 7, 3, 1, - 234, 44, 161, 2, 231, 196, 88, 7, 3, 1, 200, 234, 44, 161, 2, 231, 196, - 88, 7, 3, 1, 230, 223, 2, 231, 196, 88, 7, 3, 1, 244, 81, 2, 231, 196, - 88, 7, 3, 1, 234, 44, 130, 2, 231, 196, 88, 7, 3, 1, 247, 184, 2, 231, - 196, 88, 7, 3, 1, 97, 2, 231, 196, 88, 7, 3, 1, 247, 133, 2, 231, 196, - 88, 52, 1, 3, 209, 254, 205, 52, 1, 3, 252, 44, 52, 1, 3, 252, 45, 2, - 250, 224, 52, 1, 3, 247, 168, 52, 1, 3, 200, 234, 44, 72, 52, 1, 3, 247, - 130, 52, 1, 3, 249, 139, 239, 183, 2, 82, 52, 1, 3, 95, 214, 52, 1, 3, - 209, 212, 52, 1, 3, 244, 81, 2, 82, 52, 1, 3, 239, 215, 52, 1, 3, 6, 74, - 52, 1, 3, 6, 244, 81, 2, 82, 52, 1, 3, 239, 183, 2, 250, 240, 52, 1, 3, - 238, 47, 2, 231, 196, 88, 52, 1, 3, 238, 47, 2, 233, 229, 88, 52, 1, 3, - 6, 149, 52, 1, 3, 237, 69, 2, 88, 52, 1, 3, 209, 237, 69, 2, 182, 237, - 229, 52, 1, 3, 236, 5, 2, 42, 88, 52, 1, 3, 236, 5, 2, 231, 196, 88, 52, - 1, 3, 6, 199, 52, 1, 3, 253, 31, 73, 52, 1, 3, 233, 87, 52, 1, 3, 231, - 35, 2, 88, 52, 1, 3, 247, 183, 52, 1, 3, 227, 110, 2, 233, 229, 88, 52, - 1, 3, 97, 125, 52, 1, 3, 225, 110, 52, 1, 3, 6, 66, 52, 1, 3, 225, 65, 2, - 88, 52, 1, 3, 209, 196, 52, 1, 3, 223, 119, 52, 1, 3, 223, 120, 2, 231, - 196, 88, 52, 1, 3, 223, 120, 2, 250, 224, 52, 1, 3, 247, 132, 52, 1, 3, - 226, 223, 36, 248, 138, 245, 237, 255, 41, 36, 248, 138, 255, 33, 255, - 41, 36, 228, 177, 51, 36, 227, 205, 76, 36, 237, 62, 36, 245, 234, 36, - 237, 60, 36, 255, 31, 36, 245, 235, 36, 255, 32, 36, 7, 3, 1, 232, 27, - 51, 36, 252, 105, 36, 237, 61, 36, 47, 251, 102, 46, 36, 234, 85, 46, 36, - 223, 38, 51, 36, 239, 206, 51, 36, 225, 104, 46, 36, 225, 88, 46, 36, 7, - 3, 1, 247, 22, 234, 44, 102, 46, 36, 7, 3, 1, 255, 19, 36, 7, 3, 1, 254, - 158, 36, 7, 3, 1, 254, 41, 36, 7, 3, 1, 252, 45, 251, 226, 36, 7, 3, 1, - 239, 241, 222, 222, 36, 7, 3, 1, 247, 168, 36, 7, 3, 1, 214, 36, 7, 1, 3, - 6, 214, 36, 7, 3, 1, 239, 76, 36, 7, 3, 1, 149, 36, 7, 1, 3, 6, 149, 36, - 7, 1, 3, 6, 185, 36, 7, 3, 1, 199, 36, 7, 1, 3, 6, 199, 36, 7, 1, 3, 6, - 146, 36, 7, 3, 1, 232, 27, 231, 105, 36, 7, 3, 1, 193, 36, 7, 3, 1, 182, - 193, 36, 7, 3, 1, 223, 119, 36, 42, 254, 94, 46, 36, 41, 254, 94, 22, - 103, 254, 94, 51, 7, 6, 1, 102, 2, 231, 140, 51, 7, 3, 1, 102, 2, 231, - 140, 51, 7, 6, 1, 45, 2, 56, 46, 7, 3, 1, 45, 2, 56, 46, 7, 6, 1, 45, 2, - 56, 51, 7, 3, 1, 45, 2, 56, 51, 7, 6, 1, 45, 2, 237, 171, 51, 7, 3, 1, - 45, 2, 237, 171, 51, 7, 6, 1, 252, 45, 2, 251, 227, 22, 155, 7, 3, 1, - 252, 45, 2, 251, 227, 22, 155, 7, 6, 1, 250, 192, 2, 56, 46, 7, 3, 1, - 250, 192, 2, 56, 46, 7, 6, 1, 250, 192, 2, 56, 51, 7, 3, 1, 250, 192, 2, - 56, 51, 7, 6, 1, 250, 192, 2, 237, 171, 51, 7, 3, 1, 250, 192, 2, 237, - 171, 51, 7, 6, 1, 250, 192, 2, 251, 226, 7, 3, 1, 250, 192, 2, 251, 226, - 7, 6, 1, 250, 192, 2, 251, 102, 51, 7, 3, 1, 250, 192, 2, 251, 102, 51, - 7, 6, 1, 161, 2, 237, 64, 22, 245, 236, 7, 3, 1, 161, 2, 237, 64, 22, - 245, 236, 7, 6, 1, 161, 2, 237, 64, 22, 155, 7, 3, 1, 161, 2, 237, 64, - 22, 155, 7, 6, 1, 161, 2, 251, 102, 51, 7, 3, 1, 161, 2, 251, 102, 51, 7, - 6, 1, 161, 2, 226, 159, 51, 7, 3, 1, 161, 2, 226, 159, 51, 7, 6, 1, 161, - 2, 251, 227, 22, 252, 106, 7, 3, 1, 161, 2, 251, 227, 22, 252, 106, 7, 6, - 1, 247, 131, 2, 56, 46, 7, 3, 1, 247, 131, 2, 56, 46, 7, 6, 1, 246, 196, - 2, 237, 63, 7, 3, 1, 246, 196, 2, 237, 63, 7, 6, 1, 245, 172, 2, 56, 46, - 7, 3, 1, 245, 172, 2, 56, 46, 7, 6, 1, 245, 172, 2, 56, 51, 7, 3, 1, 245, - 172, 2, 56, 51, 7, 6, 1, 245, 172, 2, 219, 7, 3, 1, 245, 172, 2, 219, 7, - 6, 1, 245, 172, 2, 251, 226, 7, 3, 1, 245, 172, 2, 251, 226, 7, 6, 1, - 245, 172, 2, 252, 107, 51, 7, 3, 1, 245, 172, 2, 252, 107, 51, 7, 6, 1, - 244, 81, 2, 226, 159, 51, 7, 3, 1, 244, 81, 2, 226, 159, 51, 7, 6, 1, - 244, 81, 2, 250, 3, 22, 155, 7, 3, 1, 244, 81, 2, 250, 3, 22, 155, 7, 6, - 1, 239, 77, 2, 155, 7, 3, 1, 239, 77, 2, 155, 7, 6, 1, 239, 77, 2, 56, - 51, 7, 3, 1, 239, 77, 2, 56, 51, 7, 6, 1, 239, 77, 2, 237, 171, 51, 7, 3, - 1, 239, 77, 2, 237, 171, 51, 7, 6, 1, 238, 47, 2, 56, 51, 7, 3, 1, 238, - 47, 2, 56, 51, 7, 6, 1, 238, 47, 2, 56, 252, 214, 22, 237, 63, 7, 3, 1, - 238, 47, 2, 56, 252, 214, 22, 237, 63, 7, 6, 1, 238, 47, 2, 237, 171, 51, - 7, 3, 1, 238, 47, 2, 237, 171, 51, 7, 6, 1, 238, 47, 2, 251, 102, 51, 7, - 3, 1, 238, 47, 2, 251, 102, 51, 7, 6, 1, 237, 69, 2, 155, 7, 3, 1, 237, - 69, 2, 155, 7, 6, 1, 237, 69, 2, 56, 46, 7, 3, 1, 237, 69, 2, 56, 46, 7, - 6, 1, 237, 69, 2, 56, 51, 7, 3, 1, 237, 69, 2, 56, 51, 7, 6, 1, 236, 5, - 2, 56, 46, 7, 3, 1, 236, 5, 2, 56, 46, 7, 6, 1, 236, 5, 2, 56, 51, 7, 3, - 1, 236, 5, 2, 56, 51, 7, 6, 1, 236, 5, 2, 237, 171, 51, 7, 3, 1, 236, 5, - 2, 237, 171, 51, 7, 6, 1, 236, 5, 2, 251, 102, 51, 7, 3, 1, 236, 5, 2, - 251, 102, 51, 7, 6, 1, 130, 2, 226, 159, 22, 155, 7, 3, 1, 130, 2, 226, - 159, 22, 155, 7, 6, 1, 130, 2, 226, 159, 22, 219, 7, 3, 1, 130, 2, 226, - 159, 22, 219, 7, 6, 1, 130, 2, 237, 64, 22, 245, 236, 7, 3, 1, 130, 2, - 237, 64, 22, 245, 236, 7, 6, 1, 130, 2, 237, 64, 22, 155, 7, 3, 1, 130, - 2, 237, 64, 22, 155, 7, 6, 1, 233, 245, 2, 155, 7, 3, 1, 233, 245, 2, - 155, 7, 6, 1, 233, 245, 2, 56, 46, 7, 3, 1, 233, 245, 2, 56, 46, 7, 6, 1, - 232, 27, 2, 56, 46, 7, 3, 1, 232, 27, 2, 56, 46, 7, 6, 1, 232, 27, 2, 56, - 51, 7, 3, 1, 232, 27, 2, 56, 51, 7, 6, 1, 232, 27, 2, 56, 252, 214, 22, - 237, 63, 7, 3, 1, 232, 27, 2, 56, 252, 214, 22, 237, 63, 7, 6, 1, 232, - 27, 2, 237, 171, 51, 7, 3, 1, 232, 27, 2, 237, 171, 51, 7, 6, 1, 231, 35, - 2, 56, 46, 7, 3, 1, 231, 35, 2, 56, 46, 7, 6, 1, 231, 35, 2, 56, 51, 7, - 3, 1, 231, 35, 2, 56, 51, 7, 6, 1, 231, 35, 2, 255, 33, 22, 56, 46, 7, 3, - 1, 231, 35, 2, 255, 33, 22, 56, 46, 7, 6, 1, 231, 35, 2, 252, 6, 22, 56, - 46, 7, 3, 1, 231, 35, 2, 252, 6, 22, 56, 46, 7, 6, 1, 231, 35, 2, 56, - 252, 214, 22, 56, 46, 7, 3, 1, 231, 35, 2, 56, 252, 214, 22, 56, 46, 7, - 6, 1, 227, 110, 2, 56, 46, 7, 3, 1, 227, 110, 2, 56, 46, 7, 6, 1, 227, - 110, 2, 56, 51, 7, 3, 1, 227, 110, 2, 56, 51, 7, 6, 1, 227, 110, 2, 237, - 171, 51, 7, 3, 1, 227, 110, 2, 237, 171, 51, 7, 6, 1, 227, 110, 2, 251, - 102, 51, 7, 3, 1, 227, 110, 2, 251, 102, 51, 7, 6, 1, 97, 2, 250, 3, 51, - 7, 3, 1, 97, 2, 250, 3, 51, 7, 6, 1, 97, 2, 226, 159, 51, 7, 3, 1, 97, 2, - 226, 159, 51, 7, 6, 1, 97, 2, 251, 102, 51, 7, 3, 1, 97, 2, 251, 102, 51, - 7, 6, 1, 97, 2, 226, 159, 22, 155, 7, 3, 1, 97, 2, 226, 159, 22, 155, 7, - 6, 1, 97, 2, 237, 64, 22, 219, 7, 3, 1, 97, 2, 237, 64, 22, 219, 7, 6, 1, - 225, 65, 2, 205, 7, 3, 1, 225, 65, 2, 205, 7, 6, 1, 225, 65, 2, 56, 51, - 7, 3, 1, 225, 65, 2, 56, 51, 7, 6, 1, 224, 175, 2, 245, 236, 7, 3, 1, - 224, 175, 2, 245, 236, 7, 6, 1, 224, 175, 2, 155, 7, 3, 1, 224, 175, 2, - 155, 7, 6, 1, 224, 175, 2, 219, 7, 3, 1, 224, 175, 2, 219, 7, 6, 1, 224, - 175, 2, 56, 46, 7, 3, 1, 224, 175, 2, 56, 46, 7, 6, 1, 224, 175, 2, 56, - 51, 7, 3, 1, 224, 175, 2, 56, 51, 7, 6, 1, 224, 74, 2, 56, 46, 7, 3, 1, - 224, 74, 2, 56, 46, 7, 6, 1, 224, 74, 2, 219, 7, 3, 1, 224, 74, 2, 219, - 7, 6, 1, 224, 26, 2, 56, 46, 7, 3, 1, 224, 26, 2, 56, 46, 7, 6, 1, 223, - 120, 2, 251, 101, 7, 3, 1, 223, 120, 2, 251, 101, 7, 6, 1, 223, 120, 2, - 56, 51, 7, 3, 1, 223, 120, 2, 56, 51, 7, 6, 1, 223, 120, 2, 237, 171, 51, - 7, 3, 1, 223, 120, 2, 237, 171, 51, 7, 3, 1, 245, 172, 2, 237, 171, 51, - 7, 3, 1, 227, 110, 2, 219, 7, 3, 1, 224, 175, 2, 231, 140, 46, 7, 3, 1, - 224, 26, 2, 231, 140, 46, 7, 3, 1, 102, 2, 41, 132, 231, 139, 7, 3, 1, - 182, 231, 35, 2, 56, 46, 7, 3, 1, 182, 231, 35, 2, 250, 1, 82, 7, 3, 1, - 182, 231, 35, 2, 201, 82, 7, 6, 1, 229, 124, 193, 7, 3, 1, 250, 47, 7, 6, - 1, 102, 2, 56, 51, 7, 3, 1, 102, 2, 56, 51, 7, 6, 1, 102, 2, 244, 217, - 46, 7, 3, 1, 102, 2, 244, 217, 46, 7, 6, 1, 102, 2, 251, 102, 22, 155, 7, - 3, 1, 102, 2, 251, 102, 22, 155, 7, 6, 1, 102, 2, 251, 102, 22, 245, 236, - 7, 3, 1, 102, 2, 251, 102, 22, 245, 236, 7, 6, 1, 102, 2, 251, 102, 22, - 244, 217, 46, 7, 3, 1, 102, 2, 251, 102, 22, 244, 217, 46, 7, 6, 1, 102, - 2, 251, 102, 22, 205, 7, 3, 1, 102, 2, 251, 102, 22, 205, 7, 6, 1, 102, - 2, 251, 102, 22, 56, 51, 7, 3, 1, 102, 2, 251, 102, 22, 56, 51, 7, 6, 1, - 102, 2, 252, 107, 22, 155, 7, 3, 1, 102, 2, 252, 107, 22, 155, 7, 6, 1, - 102, 2, 252, 107, 22, 245, 236, 7, 3, 1, 102, 2, 252, 107, 22, 245, 236, - 7, 6, 1, 102, 2, 252, 107, 22, 244, 217, 46, 7, 3, 1, 102, 2, 252, 107, - 22, 244, 217, 46, 7, 6, 1, 102, 2, 252, 107, 22, 205, 7, 3, 1, 102, 2, - 252, 107, 22, 205, 7, 6, 1, 102, 2, 252, 107, 22, 56, 51, 7, 3, 1, 102, - 2, 252, 107, 22, 56, 51, 7, 6, 1, 161, 2, 56, 51, 7, 3, 1, 161, 2, 56, - 51, 7, 6, 1, 161, 2, 244, 217, 46, 7, 3, 1, 161, 2, 244, 217, 46, 7, 6, - 1, 161, 2, 205, 7, 3, 1, 161, 2, 205, 7, 6, 1, 161, 2, 251, 102, 22, 155, - 7, 3, 1, 161, 2, 251, 102, 22, 155, 7, 6, 1, 161, 2, 251, 102, 22, 245, - 236, 7, 3, 1, 161, 2, 251, 102, 22, 245, 236, 7, 6, 1, 161, 2, 251, 102, - 22, 244, 217, 46, 7, 3, 1, 161, 2, 251, 102, 22, 244, 217, 46, 7, 6, 1, - 161, 2, 251, 102, 22, 205, 7, 3, 1, 161, 2, 251, 102, 22, 205, 7, 6, 1, - 161, 2, 251, 102, 22, 56, 51, 7, 3, 1, 161, 2, 251, 102, 22, 56, 51, 7, - 6, 1, 244, 81, 2, 244, 217, 46, 7, 3, 1, 244, 81, 2, 244, 217, 46, 7, 6, - 1, 244, 81, 2, 56, 51, 7, 3, 1, 244, 81, 2, 56, 51, 7, 6, 1, 130, 2, 56, - 51, 7, 3, 1, 130, 2, 56, 51, 7, 6, 1, 130, 2, 244, 217, 46, 7, 3, 1, 130, - 2, 244, 217, 46, 7, 6, 1, 130, 2, 251, 102, 22, 155, 7, 3, 1, 130, 2, - 251, 102, 22, 155, 7, 6, 1, 130, 2, 251, 102, 22, 245, 236, 7, 3, 1, 130, - 2, 251, 102, 22, 245, 236, 7, 6, 1, 130, 2, 251, 102, 22, 244, 217, 46, - 7, 3, 1, 130, 2, 251, 102, 22, 244, 217, 46, 7, 6, 1, 130, 2, 251, 102, - 22, 205, 7, 3, 1, 130, 2, 251, 102, 22, 205, 7, 6, 1, 130, 2, 251, 102, - 22, 56, 51, 7, 3, 1, 130, 2, 251, 102, 22, 56, 51, 7, 6, 1, 130, 2, 244, - 161, 22, 155, 7, 3, 1, 130, 2, 244, 161, 22, 155, 7, 6, 1, 130, 2, 244, - 161, 22, 245, 236, 7, 3, 1, 130, 2, 244, 161, 22, 245, 236, 7, 6, 1, 130, - 2, 244, 161, 22, 244, 217, 46, 7, 3, 1, 130, 2, 244, 161, 22, 244, 217, - 46, 7, 6, 1, 130, 2, 244, 161, 22, 205, 7, 3, 1, 130, 2, 244, 161, 22, - 205, 7, 6, 1, 130, 2, 244, 161, 22, 56, 51, 7, 3, 1, 130, 2, 244, 161, - 22, 56, 51, 7, 6, 1, 97, 2, 56, 51, 7, 3, 1, 97, 2, 56, 51, 7, 6, 1, 97, - 2, 244, 217, 46, 7, 3, 1, 97, 2, 244, 217, 46, 7, 6, 1, 97, 2, 244, 161, - 22, 155, 7, 3, 1, 97, 2, 244, 161, 22, 155, 7, 6, 1, 97, 2, 244, 161, 22, - 245, 236, 7, 3, 1, 97, 2, 244, 161, 22, 245, 236, 7, 6, 1, 97, 2, 244, - 161, 22, 244, 217, 46, 7, 3, 1, 97, 2, 244, 161, 22, 244, 217, 46, 7, 6, - 1, 97, 2, 244, 161, 22, 205, 7, 3, 1, 97, 2, 244, 161, 22, 205, 7, 6, 1, - 97, 2, 244, 161, 22, 56, 51, 7, 3, 1, 97, 2, 244, 161, 22, 56, 51, 7, 6, - 1, 224, 26, 2, 245, 236, 7, 3, 1, 224, 26, 2, 245, 236, 7, 6, 1, 224, 26, - 2, 56, 51, 7, 3, 1, 224, 26, 2, 56, 51, 7, 6, 1, 224, 26, 2, 244, 217, - 46, 7, 3, 1, 224, 26, 2, 244, 217, 46, 7, 6, 1, 224, 26, 2, 205, 7, 3, 1, - 224, 26, 2, 205, 7, 6, 1, 236, 153, 237, 149, 7, 3, 1, 236, 153, 237, - 149, 7, 6, 1, 236, 153, 196, 7, 3, 1, 236, 153, 196, 7, 6, 1, 224, 26, 2, - 237, 124, 7, 3, 1, 224, 26, 2, 237, 124, 19, 3, 1, 254, 206, 2, 232, 177, - 19, 3, 1, 254, 206, 2, 250, 128, 19, 3, 1, 254, 206, 2, 186, 22, 225, 55, - 19, 3, 1, 254, 206, 2, 172, 22, 225, 55, 19, 3, 1, 254, 206, 2, 186, 22, - 233, 249, 19, 3, 1, 254, 206, 2, 172, 22, 233, 249, 19, 3, 1, 254, 206, - 2, 186, 22, 233, 117, 19, 3, 1, 254, 206, 2, 172, 22, 233, 117, 19, 6, 1, - 254, 206, 2, 232, 177, 19, 6, 1, 254, 206, 2, 250, 128, 19, 6, 1, 254, - 206, 2, 186, 22, 225, 55, 19, 6, 1, 254, 206, 2, 172, 22, 225, 55, 19, 6, - 1, 254, 206, 2, 186, 22, 233, 249, 19, 6, 1, 254, 206, 2, 172, 22, 233, - 249, 19, 6, 1, 254, 206, 2, 186, 22, 233, 117, 19, 6, 1, 254, 206, 2, - 172, 22, 233, 117, 19, 3, 1, 247, 207, 2, 232, 177, 19, 3, 1, 247, 207, - 2, 250, 128, 19, 3, 1, 247, 207, 2, 186, 22, 225, 55, 19, 3, 1, 247, 207, - 2, 172, 22, 225, 55, 19, 3, 1, 247, 207, 2, 186, 22, 233, 249, 19, 3, 1, - 247, 207, 2, 172, 22, 233, 249, 19, 6, 1, 247, 207, 2, 232, 177, 19, 6, - 1, 247, 207, 2, 250, 128, 19, 6, 1, 247, 207, 2, 186, 22, 225, 55, 19, 6, - 1, 247, 207, 2, 172, 22, 225, 55, 19, 6, 1, 247, 207, 2, 186, 22, 233, - 249, 19, 6, 1, 247, 207, 2, 172, 22, 233, 249, 19, 3, 1, 247, 172, 2, - 232, 177, 19, 3, 1, 247, 172, 2, 250, 128, 19, 3, 1, 247, 172, 2, 186, - 22, 225, 55, 19, 3, 1, 247, 172, 2, 172, 22, 225, 55, 19, 3, 1, 247, 172, - 2, 186, 22, 233, 249, 19, 3, 1, 247, 172, 2, 172, 22, 233, 249, 19, 3, 1, - 247, 172, 2, 186, 22, 233, 117, 19, 3, 1, 247, 172, 2, 172, 22, 233, 117, - 19, 6, 1, 247, 172, 2, 232, 177, 19, 6, 1, 247, 172, 2, 250, 128, 19, 6, - 1, 247, 172, 2, 186, 22, 225, 55, 19, 6, 1, 247, 172, 2, 172, 22, 225, - 55, 19, 6, 1, 247, 172, 2, 186, 22, 233, 249, 19, 6, 1, 247, 172, 2, 172, - 22, 233, 249, 19, 6, 1, 247, 172, 2, 186, 22, 233, 117, 19, 6, 1, 247, - 172, 2, 172, 22, 233, 117, 19, 3, 1, 239, 216, 2, 232, 177, 19, 3, 1, - 239, 216, 2, 250, 128, 19, 3, 1, 239, 216, 2, 186, 22, 225, 55, 19, 3, 1, - 239, 216, 2, 172, 22, 225, 55, 19, 3, 1, 239, 216, 2, 186, 22, 233, 249, - 19, 3, 1, 239, 216, 2, 172, 22, 233, 249, 19, 3, 1, 239, 216, 2, 186, 22, - 233, 117, 19, 3, 1, 239, 216, 2, 172, 22, 233, 117, 19, 6, 1, 239, 216, - 2, 232, 177, 19, 6, 1, 239, 216, 2, 250, 128, 19, 6, 1, 239, 216, 2, 186, - 22, 225, 55, 19, 6, 1, 239, 216, 2, 172, 22, 225, 55, 19, 6, 1, 239, 216, - 2, 186, 22, 233, 249, 19, 6, 1, 239, 216, 2, 172, 22, 233, 249, 19, 6, 1, - 239, 216, 2, 186, 22, 233, 117, 19, 6, 1, 239, 216, 2, 172, 22, 233, 117, - 19, 3, 1, 234, 65, 2, 232, 177, 19, 3, 1, 234, 65, 2, 250, 128, 19, 3, 1, - 234, 65, 2, 186, 22, 225, 55, 19, 3, 1, 234, 65, 2, 172, 22, 225, 55, 19, - 3, 1, 234, 65, 2, 186, 22, 233, 249, 19, 3, 1, 234, 65, 2, 172, 22, 233, - 249, 19, 6, 1, 234, 65, 2, 232, 177, 19, 6, 1, 234, 65, 2, 250, 128, 19, - 6, 1, 234, 65, 2, 186, 22, 225, 55, 19, 6, 1, 234, 65, 2, 172, 22, 225, - 55, 19, 6, 1, 234, 65, 2, 186, 22, 233, 249, 19, 6, 1, 234, 65, 2, 172, - 22, 233, 249, 19, 3, 1, 225, 111, 2, 232, 177, 19, 3, 1, 225, 111, 2, - 250, 128, 19, 3, 1, 225, 111, 2, 186, 22, 225, 55, 19, 3, 1, 225, 111, 2, - 172, 22, 225, 55, 19, 3, 1, 225, 111, 2, 186, 22, 233, 249, 19, 3, 1, - 225, 111, 2, 172, 22, 233, 249, 19, 3, 1, 225, 111, 2, 186, 22, 233, 117, - 19, 3, 1, 225, 111, 2, 172, 22, 233, 117, 19, 6, 1, 225, 111, 2, 250, - 128, 19, 6, 1, 225, 111, 2, 172, 22, 225, 55, 19, 6, 1, 225, 111, 2, 172, - 22, 233, 249, 19, 6, 1, 225, 111, 2, 172, 22, 233, 117, 19, 3, 1, 234, - 67, 2, 232, 177, 19, 3, 1, 234, 67, 2, 250, 128, 19, 3, 1, 234, 67, 2, - 186, 22, 225, 55, 19, 3, 1, 234, 67, 2, 172, 22, 225, 55, 19, 3, 1, 234, - 67, 2, 186, 22, 233, 249, 19, 3, 1, 234, 67, 2, 172, 22, 233, 249, 19, 3, - 1, 234, 67, 2, 186, 22, 233, 117, 19, 3, 1, 234, 67, 2, 172, 22, 233, - 117, 19, 6, 1, 234, 67, 2, 232, 177, 19, 6, 1, 234, 67, 2, 250, 128, 19, - 6, 1, 234, 67, 2, 186, 22, 225, 55, 19, 6, 1, 234, 67, 2, 172, 22, 225, - 55, 19, 6, 1, 234, 67, 2, 186, 22, 233, 249, 19, 6, 1, 234, 67, 2, 172, - 22, 233, 249, 19, 6, 1, 234, 67, 2, 186, 22, 233, 117, 19, 6, 1, 234, 67, - 2, 172, 22, 233, 117, 19, 3, 1, 254, 206, 2, 225, 55, 19, 3, 1, 254, 206, - 2, 233, 249, 19, 3, 1, 247, 207, 2, 225, 55, 19, 3, 1, 247, 207, 2, 233, - 249, 19, 3, 1, 247, 172, 2, 225, 55, 19, 3, 1, 247, 172, 2, 233, 249, 19, - 3, 1, 239, 216, 2, 225, 55, 19, 3, 1, 239, 216, 2, 233, 249, 19, 3, 1, - 234, 65, 2, 225, 55, 19, 3, 1, 234, 65, 2, 233, 249, 19, 3, 1, 225, 111, - 2, 225, 55, 19, 3, 1, 225, 111, 2, 233, 249, 19, 3, 1, 234, 67, 2, 225, - 55, 19, 3, 1, 234, 67, 2, 233, 249, 19, 3, 1, 254, 206, 2, 186, 22, 223, - 165, 19, 3, 1, 254, 206, 2, 172, 22, 223, 165, 19, 3, 1, 254, 206, 2, - 186, 22, 225, 56, 22, 223, 165, 19, 3, 1, 254, 206, 2, 172, 22, 225, 56, - 22, 223, 165, 19, 3, 1, 254, 206, 2, 186, 22, 233, 250, 22, 223, 165, 19, - 3, 1, 254, 206, 2, 172, 22, 233, 250, 22, 223, 165, 19, 3, 1, 254, 206, - 2, 186, 22, 233, 118, 22, 223, 165, 19, 3, 1, 254, 206, 2, 172, 22, 233, - 118, 22, 223, 165, 19, 6, 1, 254, 206, 2, 186, 22, 232, 188, 19, 6, 1, - 254, 206, 2, 172, 22, 232, 188, 19, 6, 1, 254, 206, 2, 186, 22, 225, 56, - 22, 232, 188, 19, 6, 1, 254, 206, 2, 172, 22, 225, 56, 22, 232, 188, 19, - 6, 1, 254, 206, 2, 186, 22, 233, 250, 22, 232, 188, 19, 6, 1, 254, 206, - 2, 172, 22, 233, 250, 22, 232, 188, 19, 6, 1, 254, 206, 2, 186, 22, 233, - 118, 22, 232, 188, 19, 6, 1, 254, 206, 2, 172, 22, 233, 118, 22, 232, - 188, 19, 3, 1, 247, 172, 2, 186, 22, 223, 165, 19, 3, 1, 247, 172, 2, - 172, 22, 223, 165, 19, 3, 1, 247, 172, 2, 186, 22, 225, 56, 22, 223, 165, - 19, 3, 1, 247, 172, 2, 172, 22, 225, 56, 22, 223, 165, 19, 3, 1, 247, - 172, 2, 186, 22, 233, 250, 22, 223, 165, 19, 3, 1, 247, 172, 2, 172, 22, - 233, 250, 22, 223, 165, 19, 3, 1, 247, 172, 2, 186, 22, 233, 118, 22, - 223, 165, 19, 3, 1, 247, 172, 2, 172, 22, 233, 118, 22, 223, 165, 19, 6, - 1, 247, 172, 2, 186, 22, 232, 188, 19, 6, 1, 247, 172, 2, 172, 22, 232, - 188, 19, 6, 1, 247, 172, 2, 186, 22, 225, 56, 22, 232, 188, 19, 6, 1, - 247, 172, 2, 172, 22, 225, 56, 22, 232, 188, 19, 6, 1, 247, 172, 2, 186, - 22, 233, 250, 22, 232, 188, 19, 6, 1, 247, 172, 2, 172, 22, 233, 250, 22, - 232, 188, 19, 6, 1, 247, 172, 2, 186, 22, 233, 118, 22, 232, 188, 19, 6, - 1, 247, 172, 2, 172, 22, 233, 118, 22, 232, 188, 19, 3, 1, 234, 67, 2, - 186, 22, 223, 165, 19, 3, 1, 234, 67, 2, 172, 22, 223, 165, 19, 3, 1, - 234, 67, 2, 186, 22, 225, 56, 22, 223, 165, 19, 3, 1, 234, 67, 2, 172, - 22, 225, 56, 22, 223, 165, 19, 3, 1, 234, 67, 2, 186, 22, 233, 250, 22, - 223, 165, 19, 3, 1, 234, 67, 2, 172, 22, 233, 250, 22, 223, 165, 19, 3, - 1, 234, 67, 2, 186, 22, 233, 118, 22, 223, 165, 19, 3, 1, 234, 67, 2, - 172, 22, 233, 118, 22, 223, 165, 19, 6, 1, 234, 67, 2, 186, 22, 232, 188, - 19, 6, 1, 234, 67, 2, 172, 22, 232, 188, 19, 6, 1, 234, 67, 2, 186, 22, - 225, 56, 22, 232, 188, 19, 6, 1, 234, 67, 2, 172, 22, 225, 56, 22, 232, - 188, 19, 6, 1, 234, 67, 2, 186, 22, 233, 250, 22, 232, 188, 19, 6, 1, - 234, 67, 2, 172, 22, 233, 250, 22, 232, 188, 19, 6, 1, 234, 67, 2, 186, - 22, 233, 118, 22, 232, 188, 19, 6, 1, 234, 67, 2, 172, 22, 233, 118, 22, - 232, 188, 19, 3, 1, 254, 206, 2, 224, 191, 19, 3, 1, 254, 206, 2, 237, - 63, 19, 3, 1, 254, 206, 2, 225, 56, 22, 223, 165, 19, 3, 1, 254, 206, 2, - 223, 165, 19, 3, 1, 254, 206, 2, 233, 250, 22, 223, 165, 19, 3, 1, 254, - 206, 2, 233, 117, 19, 3, 1, 254, 206, 2, 233, 118, 22, 223, 165, 19, 6, - 1, 254, 206, 2, 224, 191, 19, 6, 1, 254, 206, 2, 237, 63, 19, 6, 1, 254, - 206, 2, 225, 55, 19, 6, 1, 254, 206, 2, 233, 249, 19, 6, 1, 254, 206, 2, - 232, 188, 19, 238, 132, 19, 232, 188, 19, 232, 177, 19, 233, 117, 19, - 249, 254, 22, 233, 117, 19, 3, 1, 247, 172, 2, 225, 56, 22, 223, 165, 19, - 3, 1, 247, 172, 2, 223, 165, 19, 3, 1, 247, 172, 2, 233, 250, 22, 223, - 165, 19, 3, 1, 247, 172, 2, 233, 117, 19, 3, 1, 247, 172, 2, 233, 118, - 22, 223, 165, 19, 6, 1, 247, 207, 2, 225, 55, 19, 6, 1, 247, 207, 2, 233, - 249, 19, 6, 1, 247, 172, 2, 225, 55, 19, 6, 1, 247, 172, 2, 233, 249, 19, - 6, 1, 247, 172, 2, 232, 188, 19, 186, 22, 225, 55, 19, 186, 22, 233, 249, - 19, 186, 22, 233, 117, 19, 3, 1, 239, 216, 2, 224, 191, 19, 3, 1, 239, - 216, 2, 237, 63, 19, 3, 1, 239, 216, 2, 249, 254, 22, 225, 55, 19, 3, 1, - 239, 216, 2, 249, 254, 22, 233, 249, 19, 3, 1, 239, 216, 2, 233, 117, 19, - 3, 1, 239, 216, 2, 249, 254, 22, 233, 117, 19, 6, 1, 239, 216, 2, 224, - 191, 19, 6, 1, 239, 216, 2, 237, 63, 19, 6, 1, 239, 216, 2, 225, 55, 19, - 6, 1, 239, 216, 2, 233, 249, 19, 172, 22, 225, 55, 19, 172, 22, 233, 249, - 19, 172, 22, 233, 117, 19, 3, 1, 225, 111, 2, 224, 191, 19, 3, 1, 225, - 111, 2, 237, 63, 19, 3, 1, 225, 111, 2, 249, 254, 22, 225, 55, 19, 3, 1, - 225, 111, 2, 249, 254, 22, 233, 249, 19, 3, 1, 231, 183, 2, 232, 177, 19, - 3, 1, 231, 183, 2, 250, 128, 19, 3, 1, 225, 111, 2, 233, 117, 19, 3, 1, - 225, 111, 2, 249, 254, 22, 233, 117, 19, 6, 1, 225, 111, 2, 224, 191, 19, - 6, 1, 225, 111, 2, 237, 63, 19, 6, 1, 225, 111, 2, 225, 55, 19, 6, 1, - 225, 111, 2, 233, 249, 19, 6, 1, 231, 183, 2, 250, 128, 19, 249, 254, 22, - 225, 55, 19, 249, 254, 22, 233, 249, 19, 225, 55, 19, 3, 1, 234, 67, 2, - 225, 56, 22, 223, 165, 19, 3, 1, 234, 67, 2, 223, 165, 19, 3, 1, 234, 67, - 2, 233, 250, 22, 223, 165, 19, 3, 1, 234, 67, 2, 233, 117, 19, 3, 1, 234, - 67, 2, 233, 118, 22, 223, 165, 19, 6, 1, 234, 65, 2, 225, 55, 19, 6, 1, - 234, 65, 2, 233, 249, 19, 6, 1, 234, 67, 2, 225, 55, 19, 6, 1, 234, 67, - 2, 233, 249, 19, 6, 1, 234, 67, 2, 232, 188, 19, 233, 249, 19, 250, 128, - 247, 240, 232, 81, 247, 248, 232, 81, 247, 240, 228, 145, 247, 248, 228, - 145, 226, 189, 228, 145, 246, 241, 228, 145, 228, 215, 228, 145, 247, 61, - 228, 145, 232, 171, 228, 145, 226, 215, 228, 145, 245, 158, 228, 145, - 223, 90, 224, 115, 228, 145, 223, 90, 224, 115, 234, 255, 223, 90, 224, - 115, 239, 112, 237, 231, 76, 231, 147, 76, 244, 95, 235, 0, 244, 95, 247, - 61, 250, 130, 247, 240, 250, 130, 247, 248, 250, 130, 169, 125, 47, 61, - 237, 170, 47, 184, 237, 170, 42, 228, 241, 232, 57, 76, 41, 228, 241, - 232, 57, 76, 228, 241, 237, 116, 232, 57, 76, 228, 241, 245, 62, 232, 57, - 76, 42, 47, 232, 57, 76, 41, 47, 232, 57, 76, 47, 237, 116, 232, 57, 76, - 47, 245, 62, 232, 57, 76, 250, 174, 47, 250, 174, 252, 83, 226, 75, 252, - 83, 168, 56, 237, 242, 135, 56, 237, 242, 169, 247, 249, 244, 93, 232, - 254, 237, 171, 229, 173, 233, 192, 229, 173, 237, 231, 247, 246, 231, - 147, 247, 246, 232, 243, 249, 200, 246, 249, 237, 231, 234, 0, 231, 147, - 234, 0, 235, 229, 235, 5, 228, 145, 233, 124, 236, 130, 53, 233, 124, - 227, 24, 226, 195, 53, 232, 205, 47, 232, 205, 226, 66, 232, 205, 200, - 232, 205, 200, 47, 232, 205, 200, 226, 66, 232, 205, 252, 9, 228, 241, - 237, 235, 254, 182, 232, 57, 76, 228, 241, 231, 151, 254, 182, 232, 57, - 76, 231, 228, 76, 47, 247, 149, 76, 239, 230, 234, 1, 225, 130, 116, 226, - 170, 252, 10, 239, 244, 232, 254, 254, 67, 244, 96, 252, 83, 246, 235, - 228, 194, 42, 37, 252, 115, 2, 232, 65, 41, 37, 252, 115, 2, 232, 65, 47, - 232, 69, 76, 232, 69, 247, 149, 76, 247, 149, 232, 69, 76, 226, 145, 5, - 247, 173, 200, 233, 38, 53, 86, 117, 252, 83, 86, 81, 252, 83, 184, 254, - 69, 200, 229, 186, 251, 83, 225, 116, 135, 254, 68, 254, 218, 224, 235, - 251, 53, 236, 121, 53, 227, 187, 250, 130, 239, 223, 225, 130, 247, 13, - 232, 171, 76, 152, 56, 232, 170, 232, 78, 232, 205, 246, 243, 56, 232, - 170, 247, 37, 56, 232, 170, 135, 56, 232, 170, 246, 243, 56, 76, 248, - 138, 250, 243, 226, 74, 61, 246, 243, 249, 138, 236, 228, 12, 228, 145, - 224, 92, 239, 112, 246, 216, 254, 141, 239, 221, 226, 156, 239, 221, 229, - 173, 239, 221, 233, 10, 239, 253, 227, 136, 227, 198, 255, 35, 227, 136, - 227, 198, 239, 253, 10, 211, 229, 127, 255, 35, 10, 211, 229, 127, 235, - 225, 21, 229, 128, 235, 1, 21, 229, 128, 227, 219, 223, 89, 227, 219, 7, - 3, 1, 74, 227, 219, 158, 227, 219, 173, 227, 219, 183, 227, 219, 194, - 227, 219, 187, 227, 219, 192, 227, 219, 79, 53, 227, 219, 236, 120, 227, - 219, 247, 204, 53, 227, 219, 42, 233, 180, 227, 219, 41, 233, 180, 227, - 219, 7, 3, 1, 199, 227, 253, 223, 89, 227, 253, 118, 227, 253, 113, 227, - 253, 166, 227, 253, 158, 227, 253, 173, 227, 253, 183, 227, 253, 194, - 227, 253, 187, 227, 253, 192, 227, 253, 79, 53, 227, 253, 236, 120, 227, - 253, 247, 204, 53, 227, 253, 42, 233, 180, 227, 253, 41, 233, 180, 7, - 227, 253, 3, 1, 57, 7, 227, 253, 3, 1, 72, 7, 227, 253, 3, 1, 73, 7, 227, - 253, 3, 1, 224, 73, 7, 227, 253, 3, 1, 230, 222, 247, 160, 53, 251, 62, - 53, 250, 237, 53, 246, 229, 246, 231, 53, 237, 159, 53, 236, 131, 53, - 235, 242, 53, 233, 108, 53, 231, 54, 53, 224, 100, 53, 139, 229, 100, 53, - 249, 147, 53, 247, 161, 53, 238, 187, 53, 225, 246, 53, 248, 122, 53, - 246, 111, 233, 131, 53, 233, 106, 53, 245, 215, 53, 254, 45, 53, 244, - 148, 53, 251, 228, 53, 36, 42, 245, 136, 46, 36, 41, 245, 136, 46, 36, - 182, 61, 237, 171, 234, 2, 36, 229, 63, 61, 237, 171, 234, 2, 36, 254, - 168, 67, 46, 36, 251, 84, 67, 46, 36, 42, 67, 46, 36, 41, 67, 46, 36, - 231, 140, 234, 2, 36, 251, 84, 231, 140, 234, 2, 36, 254, 168, 231, 140, - 234, 2, 36, 152, 197, 46, 36, 246, 243, 197, 46, 36, 247, 236, 251, 106, - 36, 247, 236, 228, 120, 36, 247, 236, 249, 250, 36, 247, 236, 251, 107, - 253, 63, 36, 42, 41, 67, 46, 36, 247, 236, 230, 218, 36, 247, 236, 238, - 230, 36, 247, 236, 225, 108, 232, 251, 226, 78, 36, 231, 193, 228, 162, - 234, 2, 36, 47, 61, 195, 234, 2, 36, 254, 174, 98, 36, 226, 66, 225, 132, - 36, 224, 117, 252, 102, 46, 36, 117, 67, 234, 2, 36, 182, 47, 228, 162, - 234, 2, 36, 81, 245, 136, 2, 171, 248, 124, 36, 117, 245, 136, 2, 171, - 248, 124, 36, 42, 67, 51, 36, 41, 67, 51, 36, 254, 70, 46, 255, 39, 234, - 87, 255, 26, 180, 226, 240, 228, 1, 159, 6, 252, 44, 250, 62, 251, 222, - 251, 219, 237, 171, 98, 252, 11, 234, 87, 252, 36, 225, 137, 247, 162, - 251, 30, 230, 216, 250, 62, 247, 116, 95, 3, 214, 95, 6, 212, 252, 148, - 6, 212, 159, 6, 212, 233, 20, 251, 30, 233, 20, 251, 31, 107, 135, 233, - 69, 95, 6, 74, 252, 148, 6, 74, 95, 6, 149, 95, 3, 149, 238, 47, 45, 253, - 36, 98, 159, 6, 199, 234, 196, 53, 228, 155, 231, 238, 251, 12, 95, 6, - 233, 244, 159, 6, 233, 244, 159, 6, 232, 139, 95, 6, 146, 252, 148, 6, - 146, 159, 6, 146, 232, 209, 227, 83, 231, 200, 229, 169, 76, 227, 29, 53, - 226, 94, 165, 53, 225, 31, 159, 6, 223, 119, 234, 12, 53, 234, 82, 53, - 239, 223, 234, 82, 53, 252, 148, 6, 223, 119, 209, 19, 3, 1, 239, 215, - 238, 250, 53, 254, 180, 53, 95, 6, 254, 27, 252, 148, 6, 252, 44, 247, - 176, 98, 95, 3, 72, 95, 6, 72, 95, 6, 247, 130, 209, 6, 247, 130, 95, 6, - 185, 95, 3, 73, 92, 98, 252, 201, 98, 246, 35, 98, 250, 161, 98, 240, 1, - 228, 153, 231, 106, 6, 232, 139, 247, 118, 53, 159, 3, 233, 69, 159, 3, - 246, 169, 159, 6, 246, 169, 159, 6, 233, 69, 159, 236, 4, 227, 230, 209, - 30, 6, 214, 209, 30, 6, 149, 200, 30, 6, 149, 209, 30, 6, 224, 25, 159, - 27, 6, 222, 222, 159, 27, 3, 222, 222, 159, 27, 3, 72, 159, 27, 3, 74, - 159, 27, 3, 239, 182, 232, 191, 237, 170, 209, 254, 193, 233, 124, 53, - 254, 235, 209, 3, 247, 130, 14, 32, 231, 4, 228, 153, 224, 189, 246, 235, - 168, 226, 213, 224, 189, 246, 235, 135, 226, 211, 224, 189, 246, 235, - 168, 247, 66, 224, 189, 246, 235, 135, 247, 65, 224, 189, 246, 235, 152, - 247, 65, 224, 189, 246, 235, 246, 243, 247, 65, 224, 189, 246, 235, 168, - 228, 210, 224, 189, 246, 235, 247, 37, 228, 208, 224, 189, 246, 235, 168, - 248, 16, 224, 189, 246, 235, 152, 248, 14, 224, 189, 246, 235, 247, 37, - 248, 14, 224, 189, 246, 235, 229, 163, 248, 14, 246, 235, 234, 197, 118, - 231, 115, 207, 118, 231, 115, 207, 113, 231, 115, 207, 166, 231, 115, - 207, 158, 231, 115, 207, 173, 231, 115, 207, 183, 231, 115, 207, 194, - 231, 115, 207, 187, 231, 115, 207, 192, 231, 115, 207, 227, 23, 231, 115, - 207, 247, 252, 231, 115, 207, 225, 218, 231, 115, 207, 247, 63, 231, 115, - 207, 168, 244, 135, 231, 115, 207, 247, 37, 244, 135, 231, 115, 207, 168, - 226, 194, 3, 231, 115, 207, 118, 3, 231, 115, 207, 113, 3, 231, 115, 207, - 166, 3, 231, 115, 207, 158, 3, 231, 115, 207, 173, 3, 231, 115, 207, 183, - 3, 231, 115, 207, 194, 3, 231, 115, 207, 187, 3, 231, 115, 207, 192, 3, - 231, 115, 207, 227, 23, 3, 231, 115, 207, 247, 252, 3, 231, 115, 207, - 225, 218, 3, 231, 115, 207, 247, 63, 3, 231, 115, 207, 168, 244, 135, 3, - 231, 115, 207, 247, 37, 244, 135, 3, 231, 115, 207, 168, 226, 194, 231, - 115, 207, 168, 226, 195, 252, 45, 222, 222, 231, 115, 207, 247, 37, 226, - 194, 231, 115, 207, 227, 24, 226, 194, 231, 115, 207, 200, 168, 244, 135, - 7, 3, 1, 200, 252, 44, 231, 115, 207, 228, 217, 238, 3, 15, 231, 115, - 207, 247, 64, 248, 50, 15, 231, 115, 207, 247, 64, 226, 194, 231, 115, - 207, 168, 244, 136, 226, 194, 117, 58, 225, 106, 58, 81, 58, 248, 125, - 58, 42, 41, 58, 99, 103, 58, 234, 245, 224, 131, 58, 234, 245, 248, 45, - 58, 228, 152, 248, 45, 58, 228, 152, 224, 131, 58, 117, 67, 2, 82, 81, - 67, 2, 82, 117, 224, 148, 58, 81, 224, 148, 58, 117, 135, 245, 117, 58, - 225, 106, 135, 245, 117, 58, 81, 135, 245, 117, 58, 248, 125, 135, 245, - 117, 58, 117, 67, 2, 227, 89, 81, 67, 2, 227, 89, 117, 67, 246, 224, 125, - 225, 106, 67, 246, 224, 125, 81, 67, 246, 224, 125, 248, 125, 67, 246, - 224, 125, 99, 103, 67, 2, 253, 24, 117, 67, 2, 88, 81, 67, 2, 88, 117, - 67, 2, 237, 124, 81, 67, 2, 237, 124, 42, 41, 224, 148, 58, 42, 41, 67, - 2, 82, 248, 125, 223, 38, 58, 225, 106, 67, 2, 226, 151, 237, 230, 225, - 106, 67, 2, 226, 151, 231, 145, 248, 125, 67, 2, 226, 151, 237, 230, 248, - 125, 67, 2, 226, 151, 231, 145, 81, 67, 2, 251, 11, 248, 124, 248, 125, - 67, 2, 251, 11, 237, 230, 254, 168, 226, 106, 229, 189, 58, 251, 84, 226, - 106, 229, 189, 58, 234, 245, 224, 131, 67, 180, 182, 125, 117, 67, 180, - 253, 36, 107, 81, 67, 180, 125, 254, 168, 234, 44, 251, 107, 58, 251, 84, - 234, 44, 251, 107, 58, 117, 245, 136, 2, 171, 225, 105, 117, 245, 136, 2, - 171, 248, 124, 225, 106, 245, 136, 2, 171, 231, 145, 225, 106, 245, 136, - 2, 171, 237, 230, 81, 245, 136, 2, 171, 225, 105, 81, 245, 136, 2, 171, - 248, 124, 248, 125, 245, 136, 2, 171, 231, 145, 248, 125, 245, 136, 2, - 171, 237, 230, 81, 67, 107, 117, 58, 225, 106, 67, 117, 106, 248, 125, - 58, 117, 67, 107, 81, 58, 117, 233, 232, 254, 92, 225, 106, 233, 232, - 254, 92, 81, 233, 232, 254, 92, 248, 125, 233, 232, 254, 92, 117, 245, - 136, 107, 81, 245, 135, 81, 245, 136, 107, 117, 245, 135, 117, 47, 67, 2, - 82, 42, 41, 47, 67, 2, 82, 81, 47, 67, 2, 82, 117, 47, 58, 225, 106, 47, - 58, 81, 47, 58, 248, 125, 47, 58, 42, 41, 47, 58, 99, 103, 47, 58, 234, - 245, 224, 131, 47, 58, 234, 245, 248, 45, 47, 58, 228, 152, 248, 45, 47, - 58, 228, 152, 224, 131, 47, 58, 117, 226, 66, 58, 81, 226, 66, 58, 117, - 228, 115, 58, 81, 228, 115, 58, 225, 106, 67, 2, 47, 82, 248, 125, 67, 2, - 47, 82, 117, 250, 129, 58, 225, 106, 250, 129, 58, 81, 250, 129, 58, 248, - 125, 250, 129, 58, 117, 67, 180, 125, 81, 67, 180, 125, 117, 63, 58, 225, - 106, 63, 58, 81, 63, 58, 248, 125, 63, 58, 225, 106, 63, 67, 246, 224, - 125, 225, 106, 63, 67, 234, 62, 233, 146, 225, 106, 63, 67, 234, 62, 233, - 147, 2, 169, 125, 225, 106, 63, 67, 234, 62, 233, 147, 2, 61, 125, 225, - 106, 63, 47, 58, 225, 106, 63, 47, 67, 234, 62, 233, 146, 81, 63, 67, - 246, 224, 224, 165, 234, 245, 224, 131, 67, 180, 251, 10, 228, 152, 248, - 45, 67, 180, 251, 10, 99, 103, 63, 58, 41, 67, 2, 3, 251, 106, 248, 125, - 67, 117, 106, 225, 106, 58, 152, 81, 254, 92, 117, 67, 2, 61, 82, 81, 67, - 2, 61, 82, 42, 41, 67, 2, 61, 82, 117, 67, 2, 47, 61, 82, 81, 67, 2, 47, - 61, 82, 42, 41, 67, 2, 47, 61, 82, 117, 234, 42, 58, 81, 234, 42, 58, 42, - 41, 234, 42, 58, 32, 254, 216, 251, 50, 233, 175, 249, 236, 226, 231, - 247, 145, 226, 231, 249, 154, 190, 247, 146, 247, 241, 229, 164, 240, 10, - 235, 250, 247, 254, 234, 87, 190, 254, 191, 247, 254, 234, 87, 3, 247, - 254, 234, 87, 251, 26, 254, 87, 236, 213, 249, 154, 190, 251, 28, 254, - 87, 236, 213, 3, 251, 26, 254, 87, 236, 213, 247, 233, 106, 232, 193, - 236, 4, 232, 200, 236, 4, 251, 15, 236, 4, 227, 230, 236, 121, 53, 236, - 119, 53, 56, 233, 10, 249, 181, 228, 194, 229, 165, 236, 120, 254, 70, - 234, 37, 231, 140, 234, 37, 252, 84, 234, 37, 37, 231, 111, 250, 232, - 231, 111, 246, 237, 231, 111, 232, 189, 96, 240, 3, 41, 254, 181, 254, - 181, 236, 232, 254, 181, 228, 137, 254, 181, 249, 183, 249, 154, 190, - 249, 186, 233, 185, 96, 190, 233, 185, 96, 237, 138, 254, 186, 237, 138, - 234, 31, 239, 227, 225, 127, 239, 239, 47, 239, 239, 226, 66, 239, 239, - 251, 22, 239, 239, 227, 209, 239, 239, 224, 199, 239, 239, 251, 84, 239, - 239, 251, 84, 251, 22, 239, 239, 254, 168, 251, 22, 239, 239, 226, 230, - 252, 233, 231, 252, 232, 190, 56, 236, 120, 247, 150, 246, 117, 232, 190, - 244, 220, 226, 159, 234, 37, 200, 205, 239, 223, 237, 250, 193, 228, 242, - 224, 147, 224, 86, 232, 200, 190, 205, 236, 121, 205, 254, 65, 105, 96, - 190, 254, 65, 105, 96, 254, 137, 105, 96, 254, 137, 252, 64, 190, 255, - 34, 105, 96, 235, 156, 254, 137, 234, 248, 255, 34, 105, 96, 254, 210, - 105, 96, 190, 254, 210, 105, 96, 254, 210, 105, 145, 105, 96, 226, 66, - 205, 254, 217, 105, 96, 247, 200, 96, 246, 116, 247, 200, 96, 249, 237, - 252, 195, 254, 139, 226, 240, 237, 178, 246, 116, 105, 96, 254, 137, 105, - 180, 145, 226, 240, 240, 29, 234, 87, 240, 29, 106, 145, 254, 137, 105, - 96, 251, 62, 247, 203, 247, 204, 251, 61, 231, 140, 240, 17, 105, 96, - 231, 140, 105, 96, 251, 4, 96, 247, 175, 247, 202, 96, 228, 59, 247, 203, - 250, 48, 105, 96, 105, 180, 252, 55, 250, 63, 236, 232, 252, 54, 232, 67, - 105, 96, 190, 105, 96, 244, 63, 96, 190, 244, 63, 96, 228, 25, 247, 200, - 96, 237, 213, 145, 105, 96, 245, 231, 145, 105, 96, 237, 213, 107, 105, - 96, 245, 231, 107, 105, 96, 237, 213, 252, 64, 190, 105, 96, 245, 231, - 252, 64, 190, 105, 96, 236, 62, 237, 212, 236, 62, 245, 230, 252, 195, - 190, 247, 200, 96, 190, 237, 212, 190, 245, 230, 235, 156, 237, 213, 234, - 248, 105, 96, 235, 156, 245, 231, 234, 248, 105, 96, 237, 213, 145, 247, - 200, 96, 245, 231, 145, 247, 200, 96, 235, 156, 237, 213, 234, 248, 247, - 200, 96, 235, 156, 245, 231, 234, 248, 247, 200, 96, 237, 213, 145, 245, - 230, 245, 231, 145, 237, 212, 235, 156, 237, 213, 234, 248, 245, 230, - 235, 156, 245, 231, 234, 248, 237, 212, 232, 213, 227, 243, 232, 214, - 145, 105, 96, 227, 244, 145, 105, 96, 232, 214, 145, 247, 200, 96, 227, - 244, 145, 247, 200, 96, 249, 154, 190, 232, 216, 249, 154, 190, 227, 245, - 227, 252, 234, 87, 227, 218, 234, 87, 190, 102, 227, 252, 234, 87, 190, - 102, 227, 218, 234, 87, 227, 252, 106, 145, 105, 96, 227, 218, 106, 145, - 105, 96, 235, 156, 102, 227, 252, 106, 234, 248, 105, 96, 235, 156, 102, - 227, 218, 106, 234, 248, 105, 96, 227, 252, 106, 2, 190, 105, 96, 227, - 218, 106, 2, 190, 105, 96, 236, 49, 236, 50, 236, 51, 236, 50, 225, 127, - 37, 240, 29, 234, 87, 37, 234, 27, 234, 87, 37, 240, 29, 106, 145, 105, - 96, 37, 234, 27, 106, 145, 105, 96, 37, 252, 16, 37, 250, 226, 33, 233, - 10, 33, 236, 120, 33, 226, 156, 33, 249, 181, 228, 194, 33, 56, 234, 37, - 33, 231, 140, 234, 37, 33, 254, 70, 234, 37, 33, 247, 203, 33, 250, 130, - 228, 119, 233, 10, 228, 119, 236, 120, 228, 119, 226, 156, 228, 119, 56, - 234, 37, 41, 227, 96, 42, 227, 96, 103, 227, 96, 99, 227, 96, 254, 73, - 236, 100, 226, 51, 246, 253, 226, 66, 61, 253, 36, 41, 225, 232, 47, 61, - 253, 36, 47, 41, 225, 232, 249, 154, 190, 232, 185, 190, 226, 51, 249, - 154, 190, 246, 254, 235, 159, 47, 61, 253, 36, 47, 41, 225, 232, 232, - 214, 225, 134, 231, 221, 227, 244, 225, 134, 231, 221, 234, 246, 228, 4, - 234, 87, 251, 26, 254, 87, 234, 246, 228, 3, 234, 246, 228, 4, 106, 145, - 105, 96, 251, 26, 254, 87, 234, 246, 228, 4, 145, 105, 96, 234, 27, 234, - 87, 240, 29, 234, 87, 236, 55, 245, 93, 251, 36, 237, 0, 239, 236, 224, - 52, 235, 235, 234, 247, 41, 254, 182, 2, 254, 122, 41, 226, 78, 236, 4, - 237, 138, 254, 186, 236, 4, 237, 138, 234, 31, 236, 4, 239, 227, 236, 4, - 225, 127, 249, 251, 234, 37, 56, 234, 37, 228, 59, 234, 37, 249, 181, - 226, 156, 252, 119, 42, 234, 246, 247, 117, 229, 185, 232, 200, 41, 234, - 246, 247, 117, 229, 185, 232, 200, 42, 229, 185, 232, 200, 41, 229, 185, - 232, 200, 200, 226, 159, 247, 203, 250, 223, 237, 138, 234, 31, 250, 223, - 237, 138, 254, 186, 47, 227, 251, 47, 227, 217, 47, 239, 227, 47, 225, - 127, 233, 28, 105, 22, 233, 185, 96, 237, 213, 2, 249, 140, 245, 231, 2, - 249, 140, 224, 234, 236, 62, 237, 212, 224, 234, 236, 62, 245, 230, 237, - 213, 105, 180, 145, 245, 230, 245, 231, 105, 180, 145, 237, 212, 105, - 180, 145, 237, 212, 105, 180, 145, 245, 230, 105, 180, 145, 232, 213, - 105, 180, 145, 227, 243, 249, 154, 190, 232, 217, 145, 247, 205, 249, - 154, 190, 227, 246, 145, 247, 205, 190, 37, 240, 29, 106, 145, 105, 96, - 190, 37, 234, 27, 106, 145, 105, 96, 37, 240, 29, 106, 145, 190, 105, 96, - 37, 234, 27, 106, 145, 190, 105, 96, 237, 213, 252, 64, 190, 247, 200, - 96, 245, 231, 252, 64, 190, 247, 200, 96, 232, 214, 252, 64, 190, 247, - 200, 96, 227, 244, 252, 64, 190, 247, 200, 96, 190, 234, 246, 228, 4, - 234, 87, 249, 154, 190, 251, 28, 254, 87, 234, 246, 228, 3, 190, 234, - 246, 228, 4, 106, 145, 105, 96, 249, 154, 190, 251, 28, 254, 87, 234, - 246, 228, 4, 145, 247, 205, 61, 247, 249, 236, 152, 169, 247, 249, 99, - 41, 250, 1, 247, 249, 103, 41, 250, 1, 247, 249, 247, 254, 106, 2, 182, - 169, 82, 247, 254, 106, 2, 61, 253, 36, 254, 63, 247, 233, 106, 169, 82, - 3, 247, 254, 106, 2, 61, 253, 36, 254, 63, 247, 233, 106, 169, 82, 247, - 254, 106, 2, 56, 46, 247, 254, 106, 2, 234, 5, 3, 247, 254, 106, 2, 234, - 5, 247, 254, 106, 2, 225, 133, 247, 254, 106, 2, 135, 169, 228, 10, 251, - 26, 2, 182, 169, 82, 251, 26, 2, 61, 253, 36, 254, 63, 247, 233, 106, - 169, 82, 3, 251, 26, 2, 61, 253, 36, 254, 63, 247, 233, 106, 169, 82, - 251, 26, 2, 234, 5, 3, 251, 26, 2, 234, 5, 223, 120, 150, 253, 59, 236, - 212, 249, 252, 53, 248, 0, 58, 244, 153, 99, 254, 93, 103, 254, 93, 232, - 196, 233, 111, 224, 146, 237, 170, 42, 251, 224, 41, 251, 224, 42, 247, - 17, 41, 247, 17, 252, 126, 41, 250, 245, 252, 126, 42, 250, 245, 226, - 106, 41, 250, 245, 226, 106, 42, 250, 245, 200, 190, 53, 37, 237, 113, - 254, 122, 230, 199, 230, 204, 227, 29, 231, 239, 232, 239, 240, 7, 224, - 222, 228, 120, 233, 23, 106, 239, 235, 53, 209, 190, 53, 224, 153, 244, - 154, 226, 106, 42, 251, 10, 226, 106, 41, 251, 10, 252, 126, 42, 251, 10, - 252, 126, 41, 251, 10, 226, 106, 132, 239, 239, 252, 126, 132, 239, 239, - 246, 222, 228, 180, 99, 254, 94, 252, 196, 135, 169, 253, 26, 234, 32, - 238, 232, 247, 196, 180, 226, 240, 231, 153, 224, 74, 240, 17, 102, 231, - 237, 252, 118, 238, 231, 237, 235, 254, 182, 104, 231, 151, 254, 182, - 104, 247, 196, 180, 226, 240, 237, 237, 252, 207, 231, 139, 250, 200, - 254, 217, 254, 101, 227, 135, 226, 98, 231, 59, 249, 219, 234, 28, 251, - 38, 227, 68, 228, 189, 251, 1, 251, 0, 162, 163, 14, 244, 78, 162, 163, - 14, 228, 113, 232, 81, 162, 163, 14, 232, 82, 247, 205, 162, 163, 14, - 232, 82, 249, 186, 162, 163, 14, 232, 82, 249, 250, 162, 163, 14, 232, - 82, 239, 105, 162, 163, 14, 232, 82, 251, 106, 162, 163, 14, 251, 107, - 228, 44, 162, 163, 14, 251, 107, 239, 105, 162, 163, 14, 228, 195, 125, - 162, 163, 14, 253, 64, 125, 162, 163, 14, 232, 82, 228, 194, 162, 163, - 14, 232, 82, 253, 63, 162, 163, 14, 232, 82, 237, 212, 162, 163, 14, 232, - 82, 245, 230, 162, 163, 14, 117, 225, 60, 162, 163, 14, 81, 225, 60, 162, - 163, 14, 232, 82, 117, 58, 162, 163, 14, 232, 82, 81, 58, 162, 163, 14, - 251, 107, 253, 63, 162, 163, 14, 103, 227, 97, 225, 133, 162, 163, 14, - 250, 48, 228, 44, 162, 163, 14, 232, 82, 103, 252, 9, 162, 163, 14, 232, - 82, 250, 47, 162, 163, 14, 103, 227, 97, 239, 105, 162, 163, 14, 225, - 106, 225, 60, 162, 163, 14, 232, 82, 225, 106, 58, 162, 163, 14, 99, 227, - 97, 234, 5, 162, 163, 14, 250, 57, 228, 44, 162, 163, 14, 232, 82, 99, - 252, 9, 162, 163, 14, 232, 82, 250, 56, 162, 163, 14, 99, 227, 97, 239, - 105, 162, 163, 14, 248, 125, 225, 60, 162, 163, 14, 232, 82, 248, 125, - 58, 162, 163, 14, 232, 56, 225, 133, 162, 163, 14, 250, 48, 225, 133, - 162, 163, 14, 249, 251, 225, 133, 162, 163, 14, 239, 106, 225, 133, 162, - 163, 14, 251, 107, 225, 133, 162, 163, 14, 99, 229, 69, 239, 105, 162, - 163, 14, 232, 56, 232, 81, 162, 163, 14, 251, 107, 228, 58, 162, 163, 14, - 232, 82, 251, 61, 162, 163, 14, 99, 227, 97, 219, 162, 163, 14, 250, 57, - 219, 162, 163, 14, 228, 59, 219, 162, 163, 14, 239, 106, 219, 162, 163, - 14, 251, 107, 219, 162, 163, 14, 103, 229, 69, 228, 44, 162, 163, 14, 42, - 229, 69, 228, 44, 162, 163, 14, 226, 159, 219, 162, 163, 14, 245, 231, - 219, 162, 163, 14, 251, 55, 125, 162, 163, 14, 250, 57, 205, 162, 163, - 14, 223, 37, 162, 163, 14, 228, 45, 205, 162, 163, 14, 229, 187, 225, - 133, 162, 163, 14, 232, 82, 190, 247, 205, 162, 163, 14, 232, 82, 232, - 68, 162, 163, 14, 103, 252, 10, 205, 162, 163, 14, 99, 252, 10, 205, 162, - 163, 14, 239, 215, 162, 163, 14, 231, 182, 162, 163, 14, 234, 66, 162, - 163, 14, 254, 206, 225, 133, 162, 163, 14, 247, 207, 225, 133, 162, 163, - 14, 239, 216, 225, 133, 162, 163, 14, 234, 67, 225, 133, 162, 163, 14, - 254, 205, 190, 251, 181, 76, 41, 254, 182, 2, 248, 125, 223, 38, 58, 229, - 48, 234, 44, 252, 118, 252, 216, 98, 61, 237, 171, 2, 236, 154, 249, 140, - 239, 244, 98, 251, 23, 225, 131, 98, 249, 197, 225, 131, 98, 247, 243, - 98, 251, 46, 98, 63, 37, 2, 251, 219, 61, 237, 170, 247, 223, 98, 254, - 201, 238, 233, 98, 245, 103, 98, 33, 169, 253, 36, 2, 234, 241, 33, 226, - 79, 248, 127, 252, 99, 251, 107, 2, 234, 244, 58, 225, 129, 98, 236, 89, - 98, 244, 91, 98, 234, 43, 245, 171, 98, 234, 43, 238, 45, 98, 233, 170, - 98, 233, 169, 98, 249, 201, 250, 221, 14, 211, 113, 228, 164, 98, 162, - 163, 14, 232, 81, 250, 71, 229, 174, 238, 233, 98, 232, 207, 233, 233, - 235, 142, 233, 233, 232, 204, 230, 219, 98, 251, 94, 230, 219, 98, 42, - 233, 181, 225, 113, 88, 42, 233, 181, 247, 141, 42, 233, 181, 203, 88, - 41, 233, 181, 225, 113, 88, 41, 233, 181, 247, 141, 41, 233, 181, 203, - 88, 42, 37, 252, 115, 225, 113, 251, 10, 42, 37, 252, 115, 247, 141, 42, - 37, 252, 115, 203, 251, 10, 41, 37, 252, 115, 225, 113, 251, 10, 41, 37, - 252, 115, 247, 141, 41, 37, 252, 115, 203, 251, 10, 42, 250, 223, 252, - 115, 225, 113, 88, 42, 250, 223, 252, 115, 236, 154, 233, 63, 42, 250, - 223, 252, 115, 203, 88, 250, 223, 252, 115, 247, 141, 41, 250, 223, 252, - 115, 225, 113, 88, 41, 250, 223, 252, 115, 236, 154, 233, 63, 41, 250, - 223, 252, 115, 203, 88, 239, 240, 247, 141, 169, 237, 171, 247, 141, 225, - 113, 42, 145, 203, 41, 250, 223, 252, 115, 230, 205, 225, 113, 41, 145, - 203, 42, 250, 223, 252, 115, 230, 205, 227, 231, 226, 105, 227, 231, 252, - 125, 226, 106, 37, 104, 252, 126, 37, 104, 252, 126, 37, 252, 115, 107, - 226, 106, 37, 104, 29, 14, 252, 125, 42, 61, 77, 237, 170, 41, 61, 77, - 237, 170, 169, 230, 228, 237, 169, 169, 230, 228, 237, 168, 169, 230, - 228, 237, 167, 169, 230, 228, 237, 166, 250, 40, 14, 157, 61, 22, 226, - 106, 231, 153, 250, 40, 14, 157, 61, 22, 252, 126, 231, 153, 250, 40, 14, - 157, 61, 2, 251, 106, 250, 40, 14, 157, 103, 22, 169, 2, 251, 106, 250, - 40, 14, 157, 99, 22, 169, 2, 251, 106, 250, 40, 14, 157, 61, 2, 226, 78, - 250, 40, 14, 157, 103, 22, 169, 2, 226, 78, 250, 40, 14, 157, 99, 22, - 169, 2, 226, 78, 250, 40, 14, 157, 61, 22, 224, 147, 250, 40, 14, 157, - 103, 22, 169, 2, 224, 147, 250, 40, 14, 157, 99, 22, 169, 2, 224, 147, - 250, 40, 14, 157, 103, 22, 244, 212, 250, 40, 14, 157, 99, 22, 244, 212, - 250, 40, 14, 157, 61, 22, 226, 106, 237, 237, 250, 40, 14, 157, 61, 22, - 252, 126, 237, 237, 37, 247, 2, 231, 195, 98, 248, 10, 98, 61, 237, 171, - 247, 141, 236, 194, 252, 106, 236, 194, 182, 107, 229, 62, 236, 194, 229, - 63, 107, 237, 134, 236, 194, 182, 107, 135, 229, 50, 236, 194, 135, 229, - 51, 107, 237, 134, 236, 194, 135, 229, 51, 239, 113, 236, 194, 226, 63, - 236, 194, 227, 3, 236, 194, 233, 128, 248, 49, 245, 225, 246, 209, 226, - 106, 233, 180, 252, 126, 233, 180, 226, 106, 250, 223, 104, 252, 126, - 250, 223, 104, 226, 106, 226, 100, 229, 104, 104, 252, 126, 226, 100, - 229, 104, 104, 63, 226, 89, 252, 207, 231, 140, 2, 251, 106, 228, 31, - 247, 23, 255, 44, 250, 220, 247, 255, 239, 227, 14, 32, 234, 200, 14, 32, - 228, 56, 106, 245, 116, 14, 32, 228, 56, 106, 226, 255, 14, 32, 247, 233, - 106, 226, 255, 14, 32, 247, 233, 106, 226, 92, 14, 32, 247, 224, 14, 32, - 255, 37, 14, 32, 252, 215, 14, 32, 253, 62, 14, 32, 169, 227, 98, 14, 32, - 237, 171, 247, 90, 14, 32, 61, 227, 98, 14, 32, 211, 247, 90, 14, 32, - 252, 3, 231, 194, 14, 32, 229, 86, 234, 10, 14, 32, 229, 86, 240, 16, 14, - 32, 250, 126, 237, 163, 247, 185, 14, 32, 250, 28, 251, 18, 118, 14, 32, - 250, 28, 251, 18, 113, 14, 32, 250, 28, 251, 18, 166, 14, 32, 250, 28, - 251, 18, 158, 14, 32, 235, 157, 255, 37, 14, 32, 227, 132, 240, 74, 14, - 32, 247, 233, 106, 226, 93, 252, 142, 14, 32, 252, 24, 14, 32, 247, 233, - 106, 236, 227, 14, 32, 227, 249, 14, 32, 247, 185, 14, 32, 247, 56, 229, - 173, 14, 32, 245, 224, 229, 173, 14, 32, 231, 240, 229, 173, 14, 32, 225, - 126, 229, 173, 14, 32, 228, 145, 14, 32, 250, 54, 252, 145, 98, 234, 44, - 252, 118, 14, 32, 235, 144, 14, 32, 250, 55, 211, 113, 14, 32, 227, 250, - 211, 113, 234, 92, 88, 234, 92, 251, 200, 234, 92, 246, 252, 234, 92, - 239, 223, 246, 252, 234, 92, 252, 213, 252, 89, 234, 92, 252, 122, 226, - 170, 234, 92, 252, 113, 253, 39, 244, 62, 234, 92, 254, 194, 106, 251, - 180, 234, 92, 250, 130, 234, 92, 250, 214, 255, 39, 234, 198, 234, 92, - 47, 253, 63, 33, 21, 118, 33, 21, 113, 33, 21, 166, 33, 21, 158, 33, 21, - 173, 33, 21, 183, 33, 21, 194, 33, 21, 187, 33, 21, 192, 33, 65, 227, 23, - 33, 65, 247, 252, 33, 65, 225, 218, 33, 65, 226, 209, 33, 65, 246, 238, - 33, 65, 247, 67, 33, 65, 228, 212, 33, 65, 229, 161, 33, 65, 248, 18, 33, - 65, 235, 59, 33, 65, 225, 216, 93, 21, 118, 93, 21, 113, 93, 21, 166, 93, - 21, 158, 93, 21, 173, 93, 21, 183, 93, 21, 194, 93, 21, 187, 93, 21, 192, - 93, 65, 227, 23, 93, 65, 247, 252, 93, 65, 225, 218, 93, 65, 226, 209, - 93, 65, 246, 238, 93, 65, 247, 67, 93, 65, 228, 212, 93, 65, 229, 161, - 93, 65, 248, 18, 93, 65, 235, 59, 93, 65, 225, 216, 21, 168, 246, 218, - 228, 38, 21, 135, 246, 218, 228, 38, 21, 152, 246, 218, 228, 38, 21, 246, - 243, 246, 218, 228, 38, 21, 247, 37, 246, 218, 228, 38, 21, 228, 217, - 246, 218, 228, 38, 21, 229, 163, 246, 218, 228, 38, 21, 248, 20, 246, - 218, 228, 38, 21, 235, 61, 246, 218, 228, 38, 65, 227, 24, 246, 218, 228, - 38, 65, 247, 253, 246, 218, 228, 38, 65, 225, 219, 246, 218, 228, 38, 65, - 226, 210, 246, 218, 228, 38, 65, 246, 239, 246, 218, 228, 38, 65, 247, - 68, 246, 218, 228, 38, 65, 228, 213, 246, 218, 228, 38, 65, 229, 162, - 246, 218, 228, 38, 65, 248, 19, 246, 218, 228, 38, 65, 235, 60, 246, 218, - 228, 38, 65, 225, 217, 246, 218, 228, 38, 93, 7, 3, 1, 57, 93, 7, 3, 1, - 254, 27, 93, 7, 3, 1, 252, 44, 93, 7, 3, 1, 222, 222, 93, 7, 3, 1, 72, - 93, 7, 3, 1, 247, 130, 93, 7, 3, 1, 214, 93, 7, 3, 1, 212, 93, 7, 3, 1, - 74, 93, 7, 3, 1, 239, 182, 93, 7, 3, 1, 239, 76, 93, 7, 3, 1, 149, 93, 7, - 3, 1, 185, 93, 7, 3, 1, 199, 93, 7, 3, 1, 73, 93, 7, 3, 1, 233, 244, 93, - 7, 3, 1, 232, 139, 93, 7, 3, 1, 146, 93, 7, 3, 1, 193, 93, 7, 3, 1, 227, - 109, 93, 7, 3, 1, 66, 93, 7, 3, 1, 196, 93, 7, 3, 1, 224, 174, 93, 7, 3, - 1, 224, 73, 93, 7, 3, 1, 224, 25, 93, 7, 3, 1, 223, 119, 33, 7, 6, 1, 57, - 33, 7, 6, 1, 254, 27, 33, 7, 6, 1, 252, 44, 33, 7, 6, 1, 222, 222, 33, 7, - 6, 1, 72, 33, 7, 6, 1, 247, 130, 33, 7, 6, 1, 214, 33, 7, 6, 1, 212, 33, - 7, 6, 1, 74, 33, 7, 6, 1, 239, 182, 33, 7, 6, 1, 239, 76, 33, 7, 6, 1, - 149, 33, 7, 6, 1, 185, 33, 7, 6, 1, 199, 33, 7, 6, 1, 73, 33, 7, 6, 1, - 233, 244, 33, 7, 6, 1, 232, 139, 33, 7, 6, 1, 146, 33, 7, 6, 1, 193, 33, - 7, 6, 1, 227, 109, 33, 7, 6, 1, 66, 33, 7, 6, 1, 196, 33, 7, 6, 1, 224, - 174, 33, 7, 6, 1, 224, 73, 33, 7, 6, 1, 224, 25, 33, 7, 6, 1, 223, 119, - 33, 7, 3, 1, 57, 33, 7, 3, 1, 254, 27, 33, 7, 3, 1, 252, 44, 33, 7, 3, 1, - 222, 222, 33, 7, 3, 1, 72, 33, 7, 3, 1, 247, 130, 33, 7, 3, 1, 214, 33, - 7, 3, 1, 212, 33, 7, 3, 1, 74, 33, 7, 3, 1, 239, 182, 33, 7, 3, 1, 239, - 76, 33, 7, 3, 1, 149, 33, 7, 3, 1, 185, 33, 7, 3, 1, 199, 33, 7, 3, 1, - 73, 33, 7, 3, 1, 233, 244, 33, 7, 3, 1, 232, 139, 33, 7, 3, 1, 146, 33, - 7, 3, 1, 193, 33, 7, 3, 1, 227, 109, 33, 7, 3, 1, 66, 33, 7, 3, 1, 196, - 33, 7, 3, 1, 224, 174, 33, 7, 3, 1, 224, 73, 33, 7, 3, 1, 224, 25, 33, 7, - 3, 1, 223, 119, 33, 21, 223, 89, 235, 157, 33, 65, 247, 252, 235, 157, - 33, 65, 225, 218, 235, 157, 33, 65, 226, 209, 235, 157, 33, 65, 246, 238, - 235, 157, 33, 65, 247, 67, 235, 157, 33, 65, 228, 212, 235, 157, 33, 65, - 229, 161, 235, 157, 33, 65, 248, 18, 235, 157, 33, 65, 235, 59, 235, 157, - 33, 65, 225, 216, 47, 33, 21, 118, 47, 33, 21, 113, 47, 33, 21, 166, 47, - 33, 21, 158, 47, 33, 21, 173, 47, 33, 21, 183, 47, 33, 21, 194, 47, 33, - 21, 187, 47, 33, 21, 192, 47, 33, 65, 227, 23, 235, 157, 33, 21, 223, 89, - 77, 80, 157, 244, 212, 77, 80, 112, 244, 212, 77, 80, 157, 225, 30, 77, - 80, 112, 225, 30, 77, 80, 157, 226, 66, 250, 131, 244, 212, 77, 80, 112, - 226, 66, 250, 131, 244, 212, 77, 80, 157, 226, 66, 250, 131, 225, 30, 77, - 80, 112, 226, 66, 250, 131, 225, 30, 77, 80, 157, 232, 78, 250, 131, 244, - 212, 77, 80, 112, 232, 78, 250, 131, 244, 212, 77, 80, 157, 232, 78, 250, - 131, 225, 30, 77, 80, 112, 232, 78, 250, 131, 225, 30, 77, 80, 157, 103, - 22, 231, 153, 77, 80, 103, 157, 22, 41, 245, 110, 77, 80, 103, 112, 22, - 41, 237, 184, 77, 80, 112, 103, 22, 231, 153, 77, 80, 157, 103, 22, 237, - 237, 77, 80, 103, 157, 22, 42, 245, 110, 77, 80, 103, 112, 22, 42, 237, - 184, 77, 80, 112, 103, 22, 237, 237, 77, 80, 157, 99, 22, 231, 153, 77, - 80, 99, 157, 22, 41, 245, 110, 77, 80, 99, 112, 22, 41, 237, 184, 77, 80, - 112, 99, 22, 231, 153, 77, 80, 157, 99, 22, 237, 237, 77, 80, 99, 157, - 22, 42, 245, 110, 77, 80, 99, 112, 22, 42, 237, 184, 77, 80, 112, 99, 22, - 237, 237, 77, 80, 157, 61, 22, 231, 153, 77, 80, 61, 157, 22, 41, 245, - 110, 77, 80, 99, 112, 22, 41, 103, 237, 184, 77, 80, 103, 112, 22, 41, - 99, 237, 184, 77, 80, 61, 112, 22, 41, 237, 184, 77, 80, 103, 157, 22, - 41, 99, 245, 110, 77, 80, 99, 157, 22, 41, 103, 245, 110, 77, 80, 112, - 61, 22, 231, 153, 77, 80, 157, 61, 22, 237, 237, 77, 80, 61, 157, 22, 42, - 245, 110, 77, 80, 99, 112, 22, 42, 103, 237, 184, 77, 80, 103, 112, 22, - 42, 99, 237, 184, 77, 80, 61, 112, 22, 42, 237, 184, 77, 80, 103, 157, - 22, 42, 99, 245, 110, 77, 80, 99, 157, 22, 42, 103, 245, 110, 77, 80, - 112, 61, 22, 237, 237, 77, 80, 157, 103, 22, 244, 212, 77, 80, 42, 112, - 22, 41, 103, 237, 184, 77, 80, 41, 112, 22, 42, 103, 237, 184, 77, 80, - 103, 157, 22, 169, 245, 110, 77, 80, 103, 112, 22, 169, 237, 184, 77, 80, - 41, 157, 22, 42, 103, 245, 110, 77, 80, 42, 157, 22, 41, 103, 245, 110, - 77, 80, 112, 103, 22, 244, 212, 77, 80, 157, 99, 22, 244, 212, 77, 80, - 42, 112, 22, 41, 99, 237, 184, 77, 80, 41, 112, 22, 42, 99, 237, 184, 77, - 80, 99, 157, 22, 169, 245, 110, 77, 80, 99, 112, 22, 169, 237, 184, 77, - 80, 41, 157, 22, 42, 99, 245, 110, 77, 80, 42, 157, 22, 41, 99, 245, 110, - 77, 80, 112, 99, 22, 244, 212, 77, 80, 157, 61, 22, 244, 212, 77, 80, 42, - 112, 22, 41, 61, 237, 184, 77, 80, 41, 112, 22, 42, 61, 237, 184, 77, 80, - 61, 157, 22, 169, 245, 110, 77, 80, 99, 112, 22, 103, 169, 237, 184, 77, - 80, 103, 112, 22, 99, 169, 237, 184, 77, 80, 61, 112, 22, 169, 237, 184, - 77, 80, 42, 99, 112, 22, 41, 103, 237, 184, 77, 80, 41, 99, 112, 22, 42, - 103, 237, 184, 77, 80, 42, 103, 112, 22, 41, 99, 237, 184, 77, 80, 41, - 103, 112, 22, 42, 99, 237, 184, 77, 80, 103, 157, 22, 99, 169, 245, 110, - 77, 80, 99, 157, 22, 103, 169, 245, 110, 77, 80, 41, 157, 22, 42, 61, - 245, 110, 77, 80, 42, 157, 22, 41, 61, 245, 110, 77, 80, 112, 61, 22, - 244, 212, 77, 80, 157, 47, 250, 131, 244, 212, 77, 80, 112, 47, 250, 131, - 244, 212, 77, 80, 157, 47, 250, 131, 225, 30, 77, 80, 112, 47, 250, 131, - 225, 30, 77, 80, 47, 244, 212, 77, 80, 47, 225, 30, 77, 80, 103, 228, - 241, 22, 41, 248, 133, 77, 80, 103, 47, 22, 41, 228, 240, 77, 80, 47, - 103, 22, 231, 153, 77, 80, 103, 228, 241, 22, 42, 248, 133, 77, 80, 103, - 47, 22, 42, 228, 240, 77, 80, 47, 103, 22, 237, 237, 77, 80, 99, 228, - 241, 22, 41, 248, 133, 77, 80, 99, 47, 22, 41, 228, 240, 77, 80, 47, 99, - 22, 231, 153, 77, 80, 99, 228, 241, 22, 42, 248, 133, 77, 80, 99, 47, 22, - 42, 228, 240, 77, 80, 47, 99, 22, 237, 237, 77, 80, 61, 228, 241, 22, 41, - 248, 133, 77, 80, 61, 47, 22, 41, 228, 240, 77, 80, 47, 61, 22, 231, 153, - 77, 80, 61, 228, 241, 22, 42, 248, 133, 77, 80, 61, 47, 22, 42, 228, 240, - 77, 80, 47, 61, 22, 237, 237, 77, 80, 103, 228, 241, 22, 169, 248, 133, - 77, 80, 103, 47, 22, 169, 228, 240, 77, 80, 47, 103, 22, 244, 212, 77, - 80, 99, 228, 241, 22, 169, 248, 133, 77, 80, 99, 47, 22, 169, 228, 240, - 77, 80, 47, 99, 22, 244, 212, 77, 80, 61, 228, 241, 22, 169, 248, 133, - 77, 80, 61, 47, 22, 169, 228, 240, 77, 80, 47, 61, 22, 244, 212, 77, 80, - 157, 254, 123, 103, 22, 231, 153, 77, 80, 157, 254, 123, 103, 22, 237, - 237, 77, 80, 157, 254, 123, 99, 22, 237, 237, 77, 80, 157, 254, 123, 99, - 22, 231, 153, 77, 80, 157, 250, 1, 225, 113, 41, 180, 203, 237, 237, 77, - 80, 157, 250, 1, 225, 113, 42, 180, 203, 231, 153, 77, 80, 157, 250, 1, - 250, 243, 77, 80, 157, 237, 237, 77, 80, 157, 225, 116, 77, 80, 157, 231, - 153, 77, 80, 157, 248, 127, 77, 80, 112, 237, 237, 77, 80, 112, 225, 116, - 77, 80, 112, 231, 153, 77, 80, 112, 248, 127, 77, 80, 157, 42, 22, 112, - 231, 153, 77, 80, 157, 99, 22, 112, 248, 127, 77, 80, 112, 42, 22, 157, - 231, 153, 77, 80, 112, 99, 22, 157, 248, 127, 225, 113, 132, 252, 142, - 203, 168, 248, 17, 252, 142, 203, 168, 232, 77, 252, 142, 203, 152, 248, - 15, 252, 142, 203, 132, 252, 142, 203, 247, 37, 248, 15, 252, 142, 203, - 152, 232, 75, 252, 142, 203, 229, 163, 248, 15, 252, 142, 246, 218, 252, - 142, 42, 229, 163, 248, 15, 252, 142, 42, 152, 232, 75, 252, 142, 42, - 247, 37, 248, 15, 252, 142, 42, 132, 252, 142, 42, 152, 248, 15, 252, - 142, 42, 168, 232, 77, 252, 142, 42, 168, 248, 17, 252, 142, 41, 132, - 252, 142, 157, 229, 136, 236, 228, 229, 136, 250, 136, 229, 136, 225, - 113, 168, 248, 17, 252, 142, 41, 168, 248, 17, 252, 142, 232, 80, 203, - 237, 237, 232, 80, 203, 231, 153, 232, 80, 225, 113, 237, 237, 232, 80, - 225, 113, 42, 22, 203, 42, 22, 203, 231, 153, 232, 80, 225, 113, 42, 22, - 203, 231, 153, 232, 80, 225, 113, 42, 22, 225, 113, 41, 22, 203, 237, - 237, 232, 80, 225, 113, 42, 22, 225, 113, 41, 22, 203, 231, 153, 232, 80, - 225, 113, 231, 153, 232, 80, 225, 113, 41, 22, 203, 237, 237, 232, 80, - 225, 113, 41, 22, 203, 42, 22, 203, 231, 153, 86, 228, 120, 63, 228, 120, - 63, 37, 2, 231, 102, 251, 9, 63, 37, 251, 27, 86, 3, 228, 120, 37, 2, - 169, 247, 54, 37, 2, 61, 247, 54, 37, 2, 234, 22, 250, 239, 247, 54, 37, - 2, 225, 113, 42, 180, 203, 41, 247, 54, 37, 2, 225, 113, 41, 180, 203, - 42, 247, 54, 37, 2, 250, 1, 250, 239, 247, 54, 86, 3, 228, 120, 63, 3, - 228, 120, 86, 231, 236, 63, 231, 236, 86, 61, 231, 236, 63, 61, 231, 236, - 86, 233, 183, 63, 233, 183, 86, 225, 115, 226, 78, 63, 225, 115, 226, 78, - 86, 225, 115, 3, 226, 78, 63, 225, 115, 3, 226, 78, 86, 231, 151, 226, - 78, 63, 231, 151, 226, 78, 86, 231, 151, 3, 226, 78, 63, 231, 151, 3, - 226, 78, 86, 231, 151, 232, 252, 63, 231, 151, 232, 252, 86, 248, 126, - 226, 78, 63, 248, 126, 226, 78, 86, 248, 126, 3, 226, 78, 63, 248, 126, - 3, 226, 78, 86, 237, 235, 226, 78, 63, 237, 235, 226, 78, 86, 237, 235, - 3, 226, 78, 63, 237, 235, 3, 226, 78, 86, 237, 235, 232, 252, 63, 237, - 235, 232, 252, 86, 249, 250, 63, 249, 250, 63, 249, 251, 251, 27, 86, 3, - 249, 250, 247, 42, 237, 113, 63, 251, 106, 248, 138, 251, 106, 251, 107, - 2, 61, 247, 54, 252, 81, 86, 251, 106, 251, 107, 2, 42, 132, 252, 150, - 251, 107, 2, 41, 132, 252, 150, 251, 107, 2, 203, 132, 252, 150, 251, - 107, 2, 225, 113, 132, 252, 150, 251, 107, 2, 225, 113, 41, 232, 80, 252, - 150, 251, 107, 2, 254, 217, 252, 64, 225, 113, 42, 232, 80, 252, 150, 42, - 132, 86, 251, 106, 41, 132, 86, 251, 106, 239, 224, 252, 83, 239, 224, - 63, 251, 106, 225, 113, 132, 239, 224, 63, 251, 106, 203, 132, 239, 224, - 63, 251, 106, 225, 113, 42, 232, 80, 251, 104, 254, 122, 225, 113, 41, - 232, 80, 251, 104, 254, 122, 203, 41, 232, 80, 251, 104, 254, 122, 203, - 42, 232, 80, 251, 104, 254, 122, 225, 113, 132, 251, 106, 203, 132, 251, - 106, 86, 203, 41, 226, 78, 86, 203, 42, 226, 78, 86, 225, 113, 42, 226, - 78, 86, 225, 113, 41, 226, 78, 63, 252, 83, 37, 2, 42, 132, 252, 150, 37, - 2, 41, 132, 252, 150, 37, 2, 225, 113, 42, 250, 1, 132, 252, 150, 37, 2, - 203, 41, 250, 1, 132, 252, 150, 63, 37, 2, 61, 252, 160, 237, 170, 63, - 225, 115, 226, 79, 2, 249, 140, 225, 115, 226, 79, 2, 42, 132, 252, 150, - 225, 115, 226, 79, 2, 41, 132, 252, 150, 238, 9, 251, 106, 63, 37, 2, - 225, 113, 42, 232, 79, 63, 37, 2, 203, 42, 232, 79, 63, 37, 2, 203, 41, - 232, 79, 63, 37, 2, 225, 113, 41, 232, 79, 63, 251, 107, 2, 225, 113, 42, - 232, 79, 63, 251, 107, 2, 203, 42, 232, 79, 63, 251, 107, 2, 203, 41, - 232, 79, 63, 251, 107, 2, 225, 113, 41, 232, 79, 225, 113, 42, 226, 78, - 225, 113, 41, 226, 78, 203, 42, 226, 78, 63, 236, 228, 228, 120, 86, 236, - 228, 228, 120, 63, 236, 228, 3, 228, 120, 86, 236, 228, 3, 228, 120, 203, - 41, 226, 78, 86, 227, 228, 2, 231, 248, 251, 75, 225, 142, 228, 171, 251, - 57, 86, 228, 58, 63, 228, 58, 237, 183, 226, 184, 227, 227, 254, 83, 235, - 3, 250, 33, 235, 3, 251, 35, 234, 34, 86, 227, 28, 63, 227, 28, 253, 48, - 252, 118, 253, 48, 77, 2, 251, 180, 253, 48, 77, 2, 224, 73, 231, 5, 225, - 143, 2, 232, 10, 248, 113, 244, 158, 252, 194, 63, 229, 67, 233, 63, 86, - 229, 67, 233, 63, 229, 132, 200, 231, 106, 247, 16, 245, 115, 252, 83, - 86, 42, 232, 251, 240, 8, 86, 41, 232, 251, 240, 8, 63, 42, 232, 251, - 240, 8, 63, 99, 232, 251, 240, 8, 63, 41, 232, 251, 240, 8, 63, 103, 232, - 251, 240, 8, 228, 199, 22, 250, 242, 251, 252, 53, 232, 16, 53, 252, 166, - 53, 252, 35, 254, 177, 234, 23, 250, 243, 251, 170, 231, 182, 250, 244, - 106, 237, 121, 250, 244, 106, 239, 161, 228, 59, 22, 250, 247, 247, 107, - 98, 255, 23, 229, 134, 245, 150, 22, 229, 13, 233, 150, 98, 223, 193, - 223, 248, 226, 70, 32, 245, 112, 226, 70, 32, 238, 24, 226, 70, 32, 247, - 46, 226, 70, 32, 226, 185, 226, 70, 32, 224, 111, 226, 70, 32, 224, 151, - 226, 70, 32, 236, 74, 226, 70, 32, 248, 48, 224, 125, 106, 250, 18, 63, - 246, 221, 247, 125, 63, 228, 179, 247, 125, 86, 228, 179, 247, 125, 63, - 227, 228, 2, 231, 248, 247, 45, 232, 77, 236, 84, 238, 5, 232, 77, 236, - 84, 236, 209, 247, 83, 53, 248, 48, 237, 39, 53, 239, 89, 230, 239, 225, - 98, 235, 150, 233, 8, 254, 111, 227, 60, 246, 123, 252, 22, 237, 216, - 224, 214, 237, 191, 230, 220, 231, 17, 252, 13, 254, 134, 233, 31, 63, - 251, 175, 238, 189, 63, 251, 175, 232, 70, 63, 251, 175, 231, 112, 63, - 251, 175, 252, 159, 63, 251, 175, 238, 152, 63, 251, 175, 233, 159, 86, - 251, 175, 238, 189, 86, 251, 175, 232, 70, 86, 251, 175, 231, 112, 86, - 251, 175, 252, 159, 86, 251, 175, 238, 152, 86, 251, 175, 233, 159, 86, - 228, 143, 227, 239, 63, 245, 115, 227, 239, 63, 249, 251, 227, 239, 86, - 251, 74, 227, 239, 63, 228, 143, 227, 239, 86, 245, 115, 227, 239, 86, - 249, 251, 227, 239, 63, 251, 74, 227, 239, 244, 158, 228, 124, 232, 77, - 234, 238, 248, 17, 234, 238, 252, 236, 248, 17, 234, 235, 252, 236, 228, - 211, 234, 235, 236, 29, 247, 25, 53, 236, 29, 235, 224, 53, 236, 29, 229, - 124, 53, 224, 131, 151, 250, 243, 248, 45, 151, 250, 243, 225, 123, 231, - 232, 98, 231, 232, 14, 32, 225, 195, 233, 17, 231, 232, 14, 32, 225, 194, - 233, 17, 231, 232, 14, 32, 225, 193, 233, 17, 231, 232, 14, 32, 225, 192, - 233, 17, 231, 232, 14, 32, 225, 191, 233, 17, 231, 232, 14, 32, 225, 190, - 233, 17, 231, 232, 14, 32, 225, 189, 233, 17, 231, 232, 14, 32, 246, 121, - 237, 1, 86, 225, 123, 231, 232, 98, 231, 233, 233, 196, 98, 233, 174, - 233, 196, 98, 233, 116, 233, 196, 53, 224, 123, 98, 249, 244, 247, 124, - 249, 244, 247, 123, 249, 244, 247, 122, 249, 244, 247, 121, 249, 244, - 247, 120, 249, 244, 247, 119, 63, 251, 107, 2, 56, 231, 153, 63, 251, - 107, 2, 135, 249, 138, 86, 251, 107, 2, 63, 56, 231, 153, 86, 251, 107, - 2, 135, 63, 249, 138, 236, 92, 32, 223, 248, 236, 92, 32, 223, 192, 249, - 227, 32, 245, 232, 223, 248, 249, 227, 32, 237, 211, 223, 192, 249, 227, - 32, 237, 211, 223, 248, 249, 227, 32, 245, 232, 223, 192, 63, 247, 31, - 86, 247, 31, 245, 150, 22, 233, 65, 254, 188, 250, 241, 227, 188, 228, - 66, 106, 255, 14, 230, 229, 254, 226, 247, 12, 246, 130, 228, 66, 106, - 245, 95, 254, 59, 98, 247, 21, 234, 7, 63, 228, 58, 224, 161, 53, 201, - 224, 200, 53, 248, 130, 247, 83, 53, 248, 130, 237, 39, 53, 239, 232, - 247, 83, 22, 237, 39, 53, 237, 39, 22, 247, 83, 53, 237, 39, 2, 195, 53, - 237, 39, 2, 195, 22, 237, 39, 22, 247, 83, 53, 61, 237, 39, 2, 195, 53, - 169, 237, 39, 2, 195, 53, 236, 228, 63, 251, 106, 236, 228, 86, 251, 106, - 236, 228, 3, 63, 251, 106, 237, 12, 98, 249, 179, 98, 225, 122, 233, 173, - 98, 251, 64, 246, 214, 225, 95, 235, 146, 251, 207, 233, 225, 239, 95, - 224, 232, 251, 157, 86, 236, 85, 237, 180, 229, 155, 229, 183, 232, 63, - 229, 167, 63, 248, 117, 237, 35, 63, 248, 117, 238, 189, 86, 248, 117, - 237, 35, 86, 248, 117, 238, 189, 225, 113, 252, 146, 230, 221, 86, 230, - 221, 203, 252, 146, 230, 221, 63, 230, 221, 227, 29, 237, 141, 53, 227, - 69, 248, 115, 254, 244, 247, 218, 224, 227, 245, 146, 224, 85, 245, 146, - 203, 41, 233, 134, 233, 134, 225, 113, 41, 233, 134, 63, 235, 86, 86, - 235, 86, 251, 181, 76, 112, 251, 181, 76, 236, 52, 224, 73, 112, 236, 52, - 224, 73, 253, 48, 224, 73, 112, 253, 48, 224, 73, 234, 7, 19, 250, 243, - 112, 19, 250, 243, 234, 44, 251, 219, 250, 243, 112, 234, 44, 251, 219, - 250, 243, 7, 250, 243, 229, 135, 63, 7, 250, 243, 234, 7, 7, 250, 243, - 237, 37, 250, 243, 228, 59, 106, 250, 124, 246, 243, 227, 40, 254, 69, - 246, 243, 253, 49, 254, 69, 112, 246, 243, 253, 49, 254, 69, 246, 243, - 251, 72, 254, 69, 86, 246, 243, 232, 253, 228, 58, 63, 246, 243, 232, - 253, 228, 58, 228, 27, 234, 7, 63, 228, 58, 33, 63, 228, 58, 234, 44, - 251, 219, 86, 228, 58, 86, 251, 219, 63, 228, 58, 234, 7, 86, 228, 58, - 112, 234, 7, 86, 228, 58, 233, 36, 228, 58, 229, 135, 63, 228, 58, 112, - 254, 69, 234, 44, 251, 219, 254, 69, 248, 20, 228, 129, 254, 69, 248, 20, - 232, 253, 86, 228, 58, 248, 20, 232, 253, 233, 36, 228, 58, 228, 217, - 232, 253, 86, 228, 58, 248, 20, 232, 253, 231, 234, 86, 228, 58, 112, - 248, 20, 232, 253, 231, 234, 86, 228, 58, 225, 219, 232, 253, 86, 228, - 58, 228, 213, 232, 253, 254, 69, 227, 40, 254, 69, 234, 44, 251, 219, - 227, 40, 254, 69, 112, 227, 40, 254, 69, 228, 217, 233, 104, 86, 22, 63, - 247, 15, 86, 247, 15, 63, 247, 15, 248, 20, 233, 104, 234, 7, 86, 247, - 15, 33, 234, 44, 251, 219, 248, 20, 232, 253, 228, 58, 112, 227, 40, 233, - 36, 254, 69, 228, 172, 226, 166, 226, 73, 228, 172, 112, 251, 173, 228, - 172, 228, 142, 112, 228, 142, 253, 49, 254, 69, 248, 20, 227, 40, 232, - 192, 254, 69, 112, 248, 20, 227, 40, 232, 192, 254, 69, 229, 135, 63, - 251, 106, 203, 41, 248, 114, 63, 228, 120, 225, 113, 41, 248, 114, 63, - 228, 120, 203, 41, 229, 135, 63, 228, 120, 225, 113, 41, 229, 135, 63, - 228, 120, 86, 249, 251, 236, 121, 63, 224, 73, 157, 61, 125, 236, 228, - 61, 125, 112, 61, 125, 112, 228, 241, 209, 251, 55, 232, 57, 165, 234, - 25, 112, 228, 241, 251, 55, 232, 57, 165, 234, 25, 112, 47, 209, 251, 55, - 232, 57, 165, 234, 25, 112, 47, 251, 55, 232, 57, 165, 234, 25, 250, 217, - 228, 49, 233, 192, 5, 234, 25, 112, 247, 149, 165, 234, 25, 112, 245, - 115, 247, 149, 165, 234, 25, 112, 86, 245, 114, 231, 106, 112, 86, 245, - 115, 252, 83, 247, 16, 245, 114, 231, 106, 247, 16, 245, 115, 252, 83, - 236, 228, 42, 233, 181, 234, 25, 236, 228, 41, 233, 181, 234, 25, 236, - 228, 247, 22, 42, 233, 181, 234, 25, 236, 228, 247, 22, 41, 233, 181, - 234, 25, 236, 228, 237, 235, 254, 182, 252, 115, 234, 25, 236, 228, 231, - 151, 254, 182, 252, 115, 234, 25, 112, 237, 235, 254, 182, 232, 57, 165, - 234, 25, 112, 231, 151, 254, 182, 232, 57, 165, 234, 25, 112, 237, 235, - 254, 182, 252, 115, 234, 25, 112, 231, 151, 254, 182, 252, 115, 234, 25, - 157, 42, 226, 100, 229, 104, 252, 115, 234, 25, 157, 41, 226, 100, 229, - 104, 252, 115, 234, 25, 236, 228, 42, 250, 223, 252, 115, 234, 25, 236, - 228, 41, 250, 223, 252, 115, 234, 25, 249, 208, 235, 157, 33, 21, 118, - 249, 208, 235, 157, 33, 21, 113, 249, 208, 235, 157, 33, 21, 166, 249, - 208, 235, 157, 33, 21, 158, 249, 208, 235, 157, 33, 21, 173, 249, 208, - 235, 157, 33, 21, 183, 249, 208, 235, 157, 33, 21, 194, 249, 208, 235, - 157, 33, 21, 187, 249, 208, 235, 157, 33, 21, 192, 249, 208, 235, 157, - 33, 65, 227, 23, 249, 208, 33, 30, 21, 118, 249, 208, 33, 30, 21, 113, - 249, 208, 33, 30, 21, 166, 249, 208, 33, 30, 21, 158, 249, 208, 33, 30, - 21, 173, 249, 208, 33, 30, 21, 183, 249, 208, 33, 30, 21, 194, 249, 208, - 33, 30, 21, 187, 249, 208, 33, 30, 21, 192, 249, 208, 33, 30, 65, 227, - 23, 249, 208, 235, 157, 33, 30, 21, 118, 249, 208, 235, 157, 33, 30, 21, - 113, 249, 208, 235, 157, 33, 30, 21, 166, 249, 208, 235, 157, 33, 30, 21, - 158, 249, 208, 235, 157, 33, 30, 21, 173, 249, 208, 235, 157, 33, 30, 21, - 183, 249, 208, 235, 157, 33, 30, 21, 194, 249, 208, 235, 157, 33, 30, 21, - 187, 249, 208, 235, 157, 33, 30, 21, 192, 249, 208, 235, 157, 33, 30, 65, - 227, 23, 112, 224, 116, 81, 58, 112, 228, 152, 248, 45, 58, 112, 81, 58, - 112, 234, 245, 248, 45, 58, 248, 119, 232, 255, 81, 58, 112, 231, 103, - 81, 58, 226, 77, 81, 58, 112, 226, 77, 81, 58, 250, 129, 226, 77, 81, 58, - 112, 250, 129, 226, 77, 81, 58, 86, 81, 58, 226, 191, 226, 104, 81, 254, - 93, 226, 191, 252, 124, 81, 254, 93, 86, 81, 254, 93, 112, 86, 250, 217, - 248, 125, 22, 81, 58, 112, 86, 250, 217, 225, 106, 22, 81, 58, 228, 116, - 86, 81, 58, 112, 251, 43, 86, 81, 58, 231, 150, 63, 81, 58, 237, 234, 63, - 81, 58, 253, 65, 229, 135, 63, 81, 58, 246, 223, 229, 135, 63, 81, 58, - 112, 203, 231, 149, 63, 81, 58, 112, 225, 113, 231, 149, 63, 81, 58, 234, - 240, 203, 231, 149, 63, 81, 58, 234, 240, 225, 113, 231, 149, 63, 81, 58, - 33, 112, 63, 81, 58, 224, 120, 81, 58, 252, 149, 228, 152, 248, 45, 58, - 252, 149, 81, 58, 252, 149, 234, 245, 248, 45, 58, 112, 252, 149, 228, - 152, 248, 45, 58, 112, 252, 149, 81, 58, 112, 252, 149, 234, 245, 248, - 45, 58, 227, 42, 81, 58, 112, 227, 41, 81, 58, 224, 139, 81, 58, 112, - 224, 139, 81, 58, 234, 41, 81, 58, 152, 249, 218, 254, 181, 63, 226, 79, - 251, 27, 3, 63, 226, 78, 233, 114, 234, 44, 227, 251, 234, 44, 227, 217, - 42, 231, 34, 253, 59, 250, 52, 41, 231, 34, 253, 59, 250, 52, 145, 2, 56, - 239, 243, 231, 193, 228, 162, 232, 212, 227, 251, 227, 218, 232, 212, - 228, 161, 61, 253, 36, 2, 169, 82, 182, 249, 180, 63, 249, 251, 2, 251, - 217, 249, 140, 22, 2, 249, 140, 247, 254, 106, 234, 39, 225, 105, 203, - 41, 251, 11, 2, 249, 140, 225, 113, 42, 251, 11, 2, 249, 140, 42, 234, 9, - 239, 115, 41, 234, 9, 239, 115, 246, 218, 234, 9, 239, 115, 238, 9, 99, - 227, 96, 238, 9, 103, 227, 96, 42, 22, 41, 47, 225, 232, 42, 22, 41, 227, - 96, 42, 236, 55, 182, 41, 227, 96, 182, 42, 227, 96, 99, 227, 97, 2, 251, - 107, 46, 237, 114, 249, 185, 252, 55, 169, 231, 65, 63, 251, 42, 249, - 250, 63, 251, 42, 249, 251, 2, 117, 226, 172, 63, 251, 42, 249, 251, 2, - 81, 226, 172, 63, 37, 2, 117, 226, 172, 63, 37, 2, 81, 226, 172, 12, 42, - 63, 37, 104, 12, 41, 63, 37, 104, 12, 42, 254, 182, 104, 12, 41, 254, - 182, 104, 12, 42, 47, 254, 182, 104, 12, 41, 47, 254, 182, 104, 12, 42, - 63, 226, 100, 229, 104, 104, 12, 41, 63, 226, 100, 229, 104, 104, 12, 42, - 247, 22, 233, 180, 12, 41, 247, 22, 233, 180, 225, 106, 232, 78, 58, 248, - 125, 232, 78, 58, 254, 168, 246, 162, 251, 107, 58, 251, 84, 246, 162, - 251, 107, 58, 41, 67, 2, 33, 233, 10, 182, 117, 58, 182, 81, 58, 182, 42, - 41, 58, 182, 117, 47, 58, 182, 81, 47, 58, 182, 42, 41, 47, 58, 182, 117, - 67, 246, 224, 125, 182, 81, 67, 246, 224, 125, 182, 117, 47, 67, 246, - 224, 125, 182, 81, 47, 67, 246, 224, 125, 182, 81, 228, 115, 58, 39, 40, - 252, 144, 39, 40, 249, 137, 39, 40, 249, 9, 39, 40, 249, 136, 39, 40, - 248, 201, 39, 40, 249, 72, 39, 40, 249, 8, 39, 40, 249, 135, 39, 40, 248, - 169, 39, 40, 249, 40, 39, 40, 248, 232, 39, 40, 249, 103, 39, 40, 248, - 200, 39, 40, 249, 71, 39, 40, 249, 7, 39, 40, 249, 134, 39, 40, 248, 153, - 39, 40, 249, 24, 39, 40, 248, 216, 39, 40, 249, 87, 39, 40, 248, 184, 39, - 40, 249, 55, 39, 40, 248, 247, 39, 40, 249, 118, 39, 40, 248, 168, 39, - 40, 249, 39, 39, 40, 248, 231, 39, 40, 249, 102, 39, 40, 248, 199, 39, - 40, 249, 70, 39, 40, 249, 6, 39, 40, 249, 133, 39, 40, 248, 145, 39, 40, - 249, 16, 39, 40, 248, 208, 39, 40, 249, 79, 39, 40, 248, 176, 39, 40, - 249, 47, 39, 40, 248, 239, 39, 40, 249, 110, 39, 40, 248, 160, 39, 40, - 249, 31, 39, 40, 248, 223, 39, 40, 249, 94, 39, 40, 248, 191, 39, 40, - 249, 62, 39, 40, 248, 254, 39, 40, 249, 125, 39, 40, 248, 152, 39, 40, - 249, 23, 39, 40, 248, 215, 39, 40, 249, 86, 39, 40, 248, 183, 39, 40, - 249, 54, 39, 40, 248, 246, 39, 40, 249, 117, 39, 40, 248, 167, 39, 40, - 249, 38, 39, 40, 248, 230, 39, 40, 249, 101, 39, 40, 248, 198, 39, 40, - 249, 69, 39, 40, 249, 5, 39, 40, 249, 132, 39, 40, 248, 141, 39, 40, 249, - 12, 39, 40, 248, 204, 39, 40, 249, 75, 39, 40, 248, 172, 39, 40, 249, 43, - 39, 40, 248, 235, 39, 40, 249, 106, 39, 40, 248, 156, 39, 40, 249, 27, - 39, 40, 248, 219, 39, 40, 249, 90, 39, 40, 248, 187, 39, 40, 249, 58, 39, - 40, 248, 250, 39, 40, 249, 121, 39, 40, 248, 148, 39, 40, 249, 19, 39, - 40, 248, 211, 39, 40, 249, 82, 39, 40, 248, 179, 39, 40, 249, 50, 39, 40, - 248, 242, 39, 40, 249, 113, 39, 40, 248, 163, 39, 40, 249, 34, 39, 40, - 248, 226, 39, 40, 249, 97, 39, 40, 248, 194, 39, 40, 249, 65, 39, 40, - 249, 1, 39, 40, 249, 128, 39, 40, 248, 144, 39, 40, 249, 15, 39, 40, 248, - 207, 39, 40, 249, 78, 39, 40, 248, 175, 39, 40, 249, 46, 39, 40, 248, - 238, 39, 40, 249, 109, 39, 40, 248, 159, 39, 40, 249, 30, 39, 40, 248, - 222, 39, 40, 249, 93, 39, 40, 248, 190, 39, 40, 249, 61, 39, 40, 248, - 253, 39, 40, 249, 124, 39, 40, 248, 151, 39, 40, 249, 22, 39, 40, 248, - 214, 39, 40, 249, 85, 39, 40, 248, 182, 39, 40, 249, 53, 39, 40, 248, - 245, 39, 40, 249, 116, 39, 40, 248, 166, 39, 40, 249, 37, 39, 40, 248, - 229, 39, 40, 249, 100, 39, 40, 248, 197, 39, 40, 249, 68, 39, 40, 249, 4, - 39, 40, 249, 131, 39, 40, 248, 139, 39, 40, 249, 10, 39, 40, 248, 202, - 39, 40, 249, 73, 39, 40, 248, 170, 39, 40, 249, 41, 39, 40, 248, 233, 39, - 40, 249, 104, 39, 40, 248, 154, 39, 40, 249, 25, 39, 40, 248, 217, 39, - 40, 249, 88, 39, 40, 248, 185, 39, 40, 249, 56, 39, 40, 248, 248, 39, 40, - 249, 119, 39, 40, 248, 146, 39, 40, 249, 17, 39, 40, 248, 209, 39, 40, - 249, 80, 39, 40, 248, 177, 39, 40, 249, 48, 39, 40, 248, 240, 39, 40, - 249, 111, 39, 40, 248, 161, 39, 40, 249, 32, 39, 40, 248, 224, 39, 40, - 249, 95, 39, 40, 248, 192, 39, 40, 249, 63, 39, 40, 248, 255, 39, 40, - 249, 126, 39, 40, 248, 142, 39, 40, 249, 13, 39, 40, 248, 205, 39, 40, - 249, 76, 39, 40, 248, 173, 39, 40, 249, 44, 39, 40, 248, 236, 39, 40, - 249, 107, 39, 40, 248, 157, 39, 40, 249, 28, 39, 40, 248, 220, 39, 40, - 249, 91, 39, 40, 248, 188, 39, 40, 249, 59, 39, 40, 248, 251, 39, 40, - 249, 122, 39, 40, 248, 149, 39, 40, 249, 20, 39, 40, 248, 212, 39, 40, - 249, 83, 39, 40, 248, 180, 39, 40, 249, 51, 39, 40, 248, 243, 39, 40, - 249, 114, 39, 40, 248, 164, 39, 40, 249, 35, 39, 40, 248, 227, 39, 40, - 249, 98, 39, 40, 248, 195, 39, 40, 249, 66, 39, 40, 249, 2, 39, 40, 249, - 129, 39, 40, 248, 140, 39, 40, 249, 11, 39, 40, 248, 203, 39, 40, 249, - 74, 39, 40, 248, 171, 39, 40, 249, 42, 39, 40, 248, 234, 39, 40, 249, - 105, 39, 40, 248, 155, 39, 40, 249, 26, 39, 40, 248, 218, 39, 40, 249, - 89, 39, 40, 248, 186, 39, 40, 249, 57, 39, 40, 248, 249, 39, 40, 249, - 120, 39, 40, 248, 147, 39, 40, 249, 18, 39, 40, 248, 210, 39, 40, 249, - 81, 39, 40, 248, 178, 39, 40, 249, 49, 39, 40, 248, 241, 39, 40, 249, - 112, 39, 40, 248, 162, 39, 40, 249, 33, 39, 40, 248, 225, 39, 40, 249, - 96, 39, 40, 248, 193, 39, 40, 249, 64, 39, 40, 249, 0, 39, 40, 249, 127, - 39, 40, 248, 143, 39, 40, 249, 14, 39, 40, 248, 206, 39, 40, 249, 77, 39, - 40, 248, 174, 39, 40, 249, 45, 39, 40, 248, 237, 39, 40, 249, 108, 39, - 40, 248, 158, 39, 40, 249, 29, 39, 40, 248, 221, 39, 40, 249, 92, 39, 40, - 248, 189, 39, 40, 249, 60, 39, 40, 248, 252, 39, 40, 249, 123, 39, 40, - 248, 150, 39, 40, 249, 21, 39, 40, 248, 213, 39, 40, 249, 84, 39, 40, - 248, 181, 39, 40, 249, 52, 39, 40, 248, 244, 39, 40, 249, 115, 39, 40, - 248, 165, 39, 40, 249, 36, 39, 40, 248, 228, 39, 40, 249, 99, 39, 40, - 248, 196, 39, 40, 249, 67, 39, 40, 249, 3, 39, 40, 249, 130, 81, 225, - 203, 67, 2, 61, 82, 81, 225, 203, 67, 2, 47, 61, 82, 117, 47, 67, 2, 61, - 82, 81, 47, 67, 2, 61, 82, 42, 41, 47, 67, 2, 61, 82, 81, 225, 203, 67, - 246, 224, 125, 117, 47, 67, 246, 224, 125, 81, 47, 67, 246, 224, 125, - 248, 125, 67, 2, 169, 82, 225, 106, 67, 2, 169, 82, 225, 106, 226, 66, - 58, 248, 125, 226, 66, 58, 117, 47, 250, 131, 58, 81, 47, 250, 131, 58, - 117, 226, 66, 250, 131, 58, 81, 226, 66, 250, 131, 58, 81, 225, 203, 226, - 66, 250, 131, 58, 81, 67, 2, 248, 138, 228, 48, 225, 106, 67, 180, 125, - 248, 125, 67, 180, 125, 81, 67, 2, 227, 90, 2, 61, 82, 81, 67, 2, 227, - 90, 2, 47, 61, 82, 81, 225, 203, 67, 2, 227, 89, 81, 225, 203, 67, 2, - 227, 90, 2, 61, 82, 81, 225, 203, 67, 2, 227, 90, 2, 47, 61, 82, 117, - 254, 95, 81, 254, 95, 117, 47, 254, 95, 81, 47, 254, 95, 117, 67, 180, - 86, 249, 250, 81, 67, 180, 86, 249, 250, 117, 67, 246, 224, 253, 36, 180, - 86, 249, 250, 81, 67, 246, 224, 253, 36, 180, 86, 249, 250, 234, 245, - 224, 131, 22, 228, 152, 248, 45, 58, 234, 245, 248, 45, 22, 228, 152, - 224, 131, 58, 234, 245, 224, 131, 67, 2, 88, 234, 245, 248, 45, 67, 2, - 88, 228, 152, 248, 45, 67, 2, 88, 228, 152, 224, 131, 67, 2, 88, 234, - 245, 224, 131, 67, 22, 234, 245, 248, 45, 58, 234, 245, 248, 45, 67, 22, - 228, 152, 248, 45, 58, 228, 152, 248, 45, 67, 22, 228, 152, 224, 131, 58, - 228, 152, 224, 131, 67, 22, 234, 245, 224, 131, 58, 231, 135, 250, 1, - 250, 238, 247, 113, 250, 0, 247, 113, 250, 1, 250, 238, 231, 135, 250, 0, - 228, 152, 248, 45, 67, 250, 238, 234, 245, 248, 45, 58, 234, 245, 248, - 45, 67, 250, 238, 228, 152, 248, 45, 58, 247, 113, 250, 1, 250, 238, 234, - 245, 248, 45, 58, 231, 135, 250, 1, 250, 238, 228, 152, 248, 45, 58, 234, - 245, 248, 45, 67, 250, 238, 234, 245, 224, 131, 58, 234, 245, 224, 131, - 67, 250, 238, 234, 245, 248, 45, 58, 224, 148, 67, 232, 251, 249, 199, - 231, 153, 67, 232, 251, 81, 226, 232, 250, 216, 225, 105, 67, 232, 251, - 81, 226, 232, 250, 216, 248, 124, 67, 232, 251, 248, 125, 226, 232, 250, - 216, 237, 230, 67, 232, 251, 248, 125, 226, 232, 250, 216, 231, 145, 231, - 148, 254, 123, 251, 84, 58, 237, 233, 254, 123, 254, 168, 58, 226, 106, - 254, 123, 254, 168, 58, 252, 126, 254, 123, 254, 168, 58, 226, 106, 254, - 123, 251, 84, 67, 2, 236, 120, 226, 106, 254, 123, 254, 168, 67, 2, 233, - 10, 203, 41, 229, 188, 251, 84, 58, 203, 42, 229, 188, 254, 168, 58, 254, - 168, 251, 82, 251, 107, 58, 251, 84, 251, 82, 251, 107, 58, 81, 67, 64, - 229, 63, 117, 58, 117, 67, 64, 229, 63, 81, 58, 229, 63, 81, 67, 64, 117, - 58, 81, 67, 2, 79, 51, 117, 67, 2, 79, 51, 81, 67, 226, 188, 224, 73, 42, - 41, 67, 226, 188, 3, 251, 106, 225, 106, 225, 203, 67, 246, 224, 3, 251, - 106, 42, 171, 99, 41, 171, 103, 245, 135, 42, 171, 103, 41, 171, 99, 245, - 135, 99, 171, 41, 103, 171, 42, 245, 135, 99, 171, 42, 103, 171, 41, 245, - 135, 42, 171, 99, 41, 171, 99, 245, 135, 99, 171, 41, 103, 171, 41, 245, - 135, 42, 171, 103, 41, 171, 103, 245, 135, 99, 171, 42, 103, 171, 42, - 245, 135, 117, 245, 136, 2, 171, 99, 180, 125, 81, 245, 136, 2, 171, 99, - 180, 125, 225, 106, 245, 136, 2, 171, 41, 180, 125, 248, 125, 245, 136, - 2, 171, 41, 180, 125, 117, 245, 136, 2, 171, 103, 180, 125, 81, 245, 136, - 2, 171, 103, 180, 125, 225, 106, 245, 136, 2, 171, 42, 180, 125, 248, - 125, 245, 136, 2, 171, 42, 180, 125, 117, 245, 136, 2, 171, 99, 246, 224, - 125, 81, 245, 136, 2, 171, 99, 246, 224, 125, 225, 106, 245, 136, 2, 171, - 41, 246, 224, 125, 248, 125, 245, 136, 2, 171, 41, 246, 224, 125, 117, - 245, 136, 2, 171, 103, 246, 224, 125, 81, 245, 136, 2, 171, 103, 246, - 224, 125, 225, 106, 245, 136, 2, 171, 42, 246, 224, 125, 248, 125, 245, - 136, 2, 171, 42, 246, 224, 125, 117, 245, 136, 2, 171, 99, 64, 117, 245, - 136, 2, 171, 248, 127, 225, 106, 245, 136, 2, 171, 42, 252, 202, 225, - 106, 245, 136, 2, 171, 231, 153, 81, 245, 136, 2, 171, 99, 64, 81, 245, - 136, 2, 171, 248, 127, 248, 125, 245, 136, 2, 171, 42, 252, 202, 248, - 125, 245, 136, 2, 171, 231, 153, 117, 245, 136, 2, 171, 99, 64, 81, 245, - 136, 2, 171, 225, 116, 117, 245, 136, 2, 171, 103, 64, 81, 245, 136, 2, - 171, 248, 127, 81, 245, 136, 2, 171, 99, 64, 117, 245, 136, 2, 171, 225, - 116, 81, 245, 136, 2, 171, 103, 64, 117, 245, 136, 2, 171, 248, 127, 117, - 245, 136, 2, 171, 99, 64, 182, 250, 130, 117, 245, 136, 2, 171, 103, 252, - 214, 182, 250, 130, 81, 245, 136, 2, 171, 99, 64, 182, 250, 130, 81, 245, - 136, 2, 171, 103, 252, 214, 182, 250, 130, 225, 106, 245, 136, 2, 171, - 42, 252, 202, 248, 125, 245, 136, 2, 171, 231, 153, 248, 125, 245, 136, - 2, 171, 42, 252, 202, 225, 106, 245, 136, 2, 171, 231, 153, 41, 47, 67, - 2, 231, 102, 245, 118, 247, 204, 5, 64, 81, 58, 226, 159, 234, 38, 64, - 81, 58, 117, 67, 64, 226, 159, 234, 37, 81, 67, 64, 226, 159, 234, 37, - 81, 67, 64, 254, 210, 105, 96, 237, 213, 64, 117, 58, 117, 67, 226, 188, - 237, 212, 245, 231, 64, 81, 58, 227, 252, 64, 81, 58, 117, 67, 226, 188, - 227, 251, 227, 218, 64, 117, 58, 42, 247, 44, 227, 89, 41, 247, 44, 227, - 89, 99, 247, 44, 227, 89, 103, 247, 44, 227, 89, 226, 66, 61, 253, 36, - 250, 52, 223, 120, 150, 228, 127, 223, 120, 150, 225, 196, 251, 61, 42, - 63, 250, 223, 104, 41, 63, 250, 223, 104, 42, 63, 233, 180, 41, 63, 233, - 180, 223, 120, 150, 42, 240, 29, 104, 223, 120, 150, 41, 240, 29, 104, - 223, 120, 150, 42, 252, 168, 104, 223, 120, 150, 41, 252, 168, 104, 42, - 37, 252, 115, 2, 225, 133, 41, 37, 252, 115, 2, 225, 133, 42, 37, 252, - 115, 2, 226, 173, 240, 17, 226, 106, 251, 10, 41, 37, 252, 115, 2, 226, - 173, 240, 17, 252, 126, 251, 10, 42, 37, 252, 115, 2, 226, 173, 240, 17, - 252, 126, 251, 10, 41, 37, 252, 115, 2, 226, 173, 240, 17, 226, 106, 251, - 10, 42, 254, 182, 252, 115, 2, 249, 140, 41, 254, 182, 252, 115, 2, 249, - 140, 42, 254, 123, 237, 213, 104, 41, 254, 123, 245, 231, 104, 47, 42, - 254, 123, 245, 231, 104, 47, 41, 254, 123, 237, 213, 104, 42, 86, 226, - 100, 229, 104, 104, 41, 86, 226, 100, 229, 104, 104, 248, 138, 247, 80, - 61, 223, 38, 237, 170, 236, 232, 254, 182, 234, 39, 237, 237, 41, 254, - 182, 225, 54, 2, 228, 120, 236, 232, 41, 254, 182, 2, 249, 140, 254, 182, - 2, 231, 35, 239, 243, 255, 33, 254, 181, 228, 137, 254, 182, 234, 39, - 237, 237, 228, 137, 254, 182, 234, 39, 225, 116, 209, 254, 181, 200, 254, - 181, 254, 182, 2, 225, 133, 200, 254, 182, 2, 225, 133, 234, 97, 254, - 182, 234, 39, 225, 116, 234, 97, 254, 182, 234, 39, 248, 127, 236, 232, - 254, 182, 2, 234, 44, 254, 105, 247, 230, 240, 17, 67, 232, 251, 99, 22, - 231, 153, 236, 232, 254, 182, 2, 234, 44, 254, 105, 247, 230, 240, 17, - 67, 232, 251, 99, 22, 237, 237, 236, 232, 254, 182, 2, 234, 44, 254, 105, - 247, 230, 240, 17, 67, 232, 251, 103, 22, 231, 153, 236, 232, 254, 182, - 2, 234, 44, 254, 105, 247, 230, 240, 17, 67, 232, 251, 103, 22, 237, 237, - 236, 232, 254, 182, 2, 234, 44, 254, 105, 247, 230, 240, 17, 67, 232, - 251, 41, 22, 225, 116, 236, 232, 254, 182, 2, 234, 44, 254, 105, 247, - 230, 240, 17, 67, 232, 251, 42, 22, 225, 116, 236, 232, 254, 182, 2, 234, - 44, 254, 105, 247, 230, 240, 17, 67, 232, 251, 41, 22, 248, 127, 236, - 232, 254, 182, 2, 234, 44, 254, 105, 247, 230, 240, 17, 67, 232, 251, 42, - 22, 248, 127, 200, 247, 241, 229, 164, 247, 241, 229, 165, 2, 234, 5, - 247, 241, 229, 165, 2, 3, 251, 107, 46, 247, 241, 229, 165, 2, 41, 67, - 46, 247, 241, 229, 165, 2, 42, 67, 46, 251, 107, 2, 169, 125, 33, 61, - 125, 33, 233, 184, 33, 231, 193, 228, 161, 33, 233, 114, 251, 107, 249, - 185, 252, 55, 169, 253, 36, 22, 226, 106, 132, 249, 185, 252, 55, 61, - 125, 251, 107, 2, 227, 220, 224, 73, 33, 254, 167, 249, 181, 53, 99, 67, - 226, 188, 251, 106, 33, 63, 252, 83, 33, 252, 83, 33, 237, 212, 33, 245, - 230, 251, 107, 2, 3, 251, 107, 180, 226, 240, 231, 153, 251, 107, 2, 135, - 169, 228, 11, 180, 226, 240, 231, 153, 228, 119, 231, 135, 250, 1, 228, - 194, 228, 119, 247, 113, 250, 1, 228, 194, 228, 119, 254, 69, 228, 119, - 3, 251, 106, 228, 119, 228, 120, 135, 239, 114, 228, 117, 226, 79, 2, 56, - 46, 226, 79, 2, 225, 133, 231, 35, 240, 17, 226, 78, 226, 79, 2, 229, - 171, 254, 63, 252, 125, 41, 226, 79, 64, 42, 226, 78, 42, 226, 79, 252, - 202, 61, 125, 61, 253, 36, 252, 202, 41, 226, 78, 252, 120, 2, 42, 132, - 252, 150, 252, 120, 2, 41, 132, 252, 150, 86, 252, 119, 24, 2, 42, 132, - 252, 150, 24, 2, 41, 132, 252, 150, 63, 244, 154, 86, 244, 154, 42, 224, - 114, 247, 80, 41, 224, 114, 247, 80, 42, 47, 224, 114, 247, 80, 41, 47, - 224, 114, 247, 80, 240, 13, 240, 3, 226, 171, 107, 240, 3, 240, 4, 235, - 159, 2, 61, 125, 248, 132, 236, 55, 37, 2, 251, 21, 234, 8, 240, 11, 254, - 86, 229, 39, 232, 200, 247, 204, 5, 22, 228, 196, 233, 184, 247, 204, 5, - 22, 228, 196, 233, 185, 2, 226, 159, 46, 244, 63, 180, 22, 228, 196, 233, - 184, 246, 18, 228, 57, 226, 229, 248, 126, 226, 79, 2, 42, 132, 252, 150, - 248, 126, 226, 79, 2, 41, 132, 252, 150, 86, 249, 251, 2, 103, 58, 86, - 237, 113, 63, 251, 107, 2, 103, 58, 86, 251, 107, 2, 103, 58, 247, 191, - 63, 228, 120, 247, 191, 86, 228, 120, 247, 191, 63, 249, 250, 247, 191, - 86, 249, 250, 247, 191, 63, 251, 106, 247, 191, 86, 251, 106, 231, 64, - 231, 193, 228, 162, 234, 37, 228, 162, 2, 234, 5, 231, 193, 228, 162, 2, - 169, 82, 252, 173, 228, 161, 252, 173, 231, 193, 228, 161, 47, 233, 10, - 226, 66, 233, 10, 237, 235, 250, 217, 254, 182, 104, 231, 151, 250, 217, - 254, 182, 104, 226, 152, 236, 118, 236, 4, 33, 56, 234, 37, 236, 4, 33, - 79, 234, 37, 236, 4, 33, 24, 234, 37, 236, 4, 225, 128, 234, 38, 2, 249, - 140, 236, 4, 225, 128, 234, 38, 2, 233, 10, 236, 4, 37, 239, 228, 234, - 37, 236, 4, 37, 225, 128, 234, 37, 135, 237, 138, 22, 234, 37, 135, 237, - 138, 145, 234, 37, 236, 4, 24, 234, 37, 236, 98, 135, 227, 233, 227, 231, - 2, 239, 239, 232, 78, 239, 240, 234, 37, 247, 48, 233, 176, 239, 239, - 239, 240, 2, 47, 82, 239, 240, 254, 38, 2, 228, 194, 251, 103, 246, 215, - 254, 168, 239, 237, 237, 171, 239, 238, 2, 231, 235, 233, 164, 254, 102, - 232, 247, 237, 171, 239, 238, 2, 229, 188, 233, 164, 254, 102, 232, 247, - 237, 171, 239, 238, 190, 240, 14, 226, 240, 232, 247, 239, 240, 254, 102, - 102, 232, 255, 234, 37, 232, 73, 239, 240, 234, 37, 239, 240, 2, 117, 67, - 2, 88, 239, 240, 2, 24, 53, 239, 240, 2, 239, 227, 239, 240, 2, 225, 127, - 239, 240, 2, 234, 5, 239, 240, 2, 225, 133, 239, 115, 238, 9, 42, 226, - 79, 234, 37, 223, 120, 150, 230, 225, 251, 45, 223, 120, 150, 230, 225, - 233, 34, 223, 120, 150, 230, 225, 232, 197, 79, 5, 2, 3, 251, 107, 46, - 79, 5, 2, 251, 102, 255, 42, 46, 79, 5, 2, 226, 159, 46, 79, 5, 2, 56, - 51, 79, 5, 2, 226, 159, 51, 79, 5, 2, 227, 253, 113, 79, 5, 2, 86, 226, - 78, 236, 121, 5, 2, 251, 55, 46, 236, 121, 5, 2, 56, 51, 236, 121, 5, 2, - 247, 113, 249, 138, 236, 121, 5, 2, 231, 135, 249, 138, 79, 5, 240, 17, - 42, 132, 251, 106, 79, 5, 240, 17, 41, 132, 251, 106, 225, 41, 145, 250, - 244, 232, 200, 236, 52, 5, 2, 56, 46, 236, 52, 5, 2, 225, 133, 229, 185, - 232, 201, 2, 252, 126, 251, 81, 228, 182, 232, 200, 236, 52, 5, 240, 17, - 42, 132, 251, 106, 236, 52, 5, 240, 17, 41, 132, 251, 106, 33, 236, 52, - 5, 2, 251, 102, 255, 41, 236, 52, 5, 240, 17, 47, 251, 106, 33, 249, 181, - 53, 79, 5, 240, 17, 226, 78, 236, 121, 5, 240, 17, 226, 78, 236, 52, 5, - 240, 17, 226, 78, 239, 234, 232, 200, 231, 146, 239, 234, 232, 200, 223, - 120, 150, 231, 220, 251, 45, 254, 198, 145, 251, 15, 239, 228, 2, 249, - 140, 225, 128, 2, 236, 121, 53, 225, 128, 2, 234, 5, 239, 228, 2, 234, 5, - 239, 228, 2, 237, 138, 254, 186, 225, 128, 2, 237, 138, 234, 31, 225, - 128, 64, 239, 227, 239, 228, 64, 225, 127, 225, 128, 64, 253, 36, 64, - 239, 227, 239, 228, 64, 253, 36, 64, 225, 127, 225, 128, 252, 202, 22, - 239, 114, 2, 225, 127, 239, 228, 252, 202, 22, 239, 114, 2, 239, 227, - 251, 82, 225, 128, 2, 229, 170, 251, 82, 239, 228, 2, 229, 170, 47, 37, - 239, 227, 47, 37, 225, 127, 251, 82, 225, 128, 2, 229, 171, 22, 228, 182, - 232, 200, 237, 138, 22, 2, 56, 46, 237, 138, 145, 2, 56, 46, 47, 237, - 138, 254, 186, 47, 237, 138, 234, 31, 135, 239, 229, 237, 138, 254, 186, - 135, 239, 229, 237, 138, 234, 31, 228, 188, 238, 9, 234, 31, 228, 188, - 238, 9, 254, 186, 237, 138, 145, 234, 3, 237, 138, 254, 186, 237, 138, - 22, 2, 236, 154, 228, 48, 237, 138, 145, 2, 236, 154, 228, 48, 237, 138, - 22, 2, 169, 250, 130, 237, 138, 145, 2, 169, 250, 130, 237, 138, 22, 2, - 47, 234, 5, 237, 138, 22, 2, 225, 133, 237, 138, 22, 2, 47, 225, 133, 3, - 225, 39, 2, 225, 133, 237, 138, 145, 2, 47, 234, 5, 237, 138, 145, 2, 47, - 225, 133, 223, 120, 150, 249, 149, 254, 163, 223, 120, 150, 232, 2, 254, - 163, 247, 204, 5, 2, 56, 51, 244, 63, 2, 56, 46, 226, 66, 169, 253, 36, - 2, 47, 61, 82, 226, 66, 169, 253, 36, 2, 226, 66, 61, 82, 226, 159, 234, - 38, 2, 56, 46, 226, 159, 234, 38, 2, 231, 135, 249, 138, 228, 247, 236, - 121, 228, 246, 251, 39, 2, 56, 46, 247, 204, 2, 254, 69, 254, 210, 105, - 180, 2, 251, 102, 255, 41, 254, 137, 105, 145, 105, 96, 247, 204, 5, 64, - 79, 53, 79, 5, 64, 247, 204, 53, 247, 204, 5, 64, 226, 159, 234, 37, 47, - 251, 62, 247, 205, 135, 251, 34, 247, 204, 229, 1, 152, 251, 34, 247, - 204, 229, 1, 247, 204, 5, 2, 135, 197, 64, 22, 135, 197, 51, 247, 200, 2, - 246, 243, 197, 46, 237, 213, 2, 251, 107, 239, 243, 245, 231, 2, 251, - 107, 239, 243, 237, 213, 2, 232, 69, 165, 46, 245, 231, 2, 232, 69, 165, - 46, 237, 213, 145, 228, 196, 105, 96, 245, 231, 145, 228, 196, 105, 96, - 237, 213, 145, 228, 196, 105, 180, 2, 56, 239, 243, 245, 231, 145, 228, - 196, 105, 180, 2, 56, 239, 243, 237, 213, 145, 228, 196, 105, 180, 2, 56, - 46, 245, 231, 145, 228, 196, 105, 180, 2, 56, 46, 237, 213, 145, 228, - 196, 105, 180, 2, 56, 64, 231, 153, 245, 231, 145, 228, 196, 105, 180, 2, - 56, 64, 237, 237, 237, 213, 145, 254, 138, 245, 231, 145, 254, 138, 237, - 213, 22, 228, 239, 190, 105, 96, 245, 231, 22, 228, 239, 190, 105, 96, - 237, 213, 22, 190, 254, 138, 245, 231, 22, 190, 254, 138, 237, 213, 64, - 248, 131, 105, 64, 245, 230, 245, 231, 64, 248, 131, 105, 64, 237, 212, - 237, 213, 64, 228, 247, 145, 247, 205, 245, 231, 64, 228, 247, 145, 247, - 205, 237, 213, 64, 228, 247, 64, 245, 230, 245, 231, 64, 228, 247, 64, - 237, 212, 237, 213, 64, 245, 231, 64, 248, 131, 247, 205, 245, 231, 64, - 237, 213, 64, 248, 131, 247, 205, 237, 213, 64, 228, 196, 105, 64, 245, - 231, 64, 228, 196, 247, 205, 245, 231, 64, 228, 196, 105, 64, 237, 213, - 64, 228, 196, 247, 205, 228, 196, 105, 180, 145, 237, 212, 228, 196, 105, - 180, 145, 245, 230, 228, 196, 105, 180, 145, 237, 213, 2, 56, 239, 243, - 228, 196, 105, 180, 145, 245, 231, 2, 56, 239, 243, 248, 131, 105, 180, - 145, 237, 212, 248, 131, 105, 180, 145, 245, 230, 248, 131, 228, 196, - 105, 180, 145, 237, 212, 248, 131, 228, 196, 105, 180, 145, 245, 230, - 228, 247, 145, 237, 212, 228, 247, 145, 245, 230, 228, 247, 64, 237, 213, - 64, 247, 204, 53, 228, 247, 64, 245, 231, 64, 247, 204, 53, 47, 235, 149, - 237, 212, 47, 235, 149, 245, 230, 47, 235, 149, 237, 213, 2, 225, 133, - 245, 231, 234, 3, 237, 212, 245, 231, 252, 202, 237, 212, 237, 213, 251, - 82, 252, 55, 250, 218, 245, 231, 251, 82, 252, 55, 250, 218, 237, 213, - 251, 82, 252, 55, 250, 219, 64, 228, 196, 247, 205, 245, 231, 251, 82, - 252, 55, 250, 219, 64, 228, 196, 247, 205, 228, 183, 226, 243, 238, 8, - 226, 243, 228, 183, 226, 244, 145, 105, 96, 238, 8, 226, 244, 145, 105, - 96, 247, 204, 5, 2, 252, 78, 46, 232, 214, 64, 228, 239, 247, 204, 53, - 227, 244, 64, 228, 239, 247, 204, 53, 232, 214, 64, 228, 239, 190, 105, - 96, 227, 244, 64, 228, 239, 190, 105, 96, 232, 214, 64, 247, 204, 53, - 227, 244, 64, 247, 204, 53, 232, 214, 64, 190, 105, 96, 227, 244, 64, - 190, 105, 96, 232, 214, 64, 254, 210, 105, 96, 227, 244, 64, 254, 210, - 105, 96, 232, 214, 64, 190, 254, 210, 105, 96, 227, 244, 64, 190, 254, - 210, 105, 96, 47, 232, 213, 47, 227, 243, 227, 252, 2, 249, 140, 227, - 218, 2, 249, 140, 227, 252, 2, 79, 5, 51, 227, 218, 2, 79, 5, 51, 227, - 252, 2, 236, 52, 5, 51, 227, 218, 2, 236, 52, 5, 51, 227, 252, 106, 145, - 105, 180, 2, 56, 46, 227, 218, 106, 145, 105, 180, 2, 56, 46, 227, 252, - 106, 64, 247, 204, 53, 227, 218, 106, 64, 247, 204, 53, 227, 252, 106, - 64, 226, 159, 234, 37, 227, 218, 106, 64, 226, 159, 234, 37, 227, 252, - 106, 64, 254, 210, 105, 96, 227, 218, 106, 64, 254, 210, 105, 96, 227, - 252, 106, 64, 190, 105, 96, 227, 218, 106, 64, 190, 105, 96, 37, 42, 234, - 44, 77, 234, 37, 37, 41, 234, 44, 77, 234, 37, 251, 82, 227, 251, 251, - 82, 227, 217, 251, 82, 227, 252, 145, 105, 96, 251, 82, 227, 218, 145, - 105, 96, 227, 252, 64, 227, 217, 227, 218, 64, 227, 251, 227, 252, 64, - 227, 251, 227, 218, 64, 227, 217, 227, 218, 252, 202, 227, 251, 227, 218, - 252, 202, 22, 239, 114, 252, 55, 250, 131, 2, 227, 251, 247, 254, 106, - 234, 39, 248, 124, 233, 29, 2, 227, 38, 226, 105, 226, 90, 239, 227, 246, - 250, 234, 254, 229, 63, 42, 227, 96, 229, 63, 103, 227, 96, 229, 63, 99, - 227, 96, 233, 115, 2, 193, 61, 253, 36, 226, 66, 41, 225, 232, 47, 61, - 253, 36, 42, 225, 232, 61, 253, 36, 47, 42, 225, 232, 47, 61, 253, 36, - 47, 42, 225, 232, 182, 250, 131, 246, 224, 42, 236, 214, 106, 47, 225, - 30, 229, 63, 103, 227, 97, 2, 234, 5, 229, 63, 99, 227, 97, 2, 225, 133, - 229, 63, 99, 227, 97, 64, 229, 63, 103, 227, 96, 47, 103, 227, 96, 47, - 99, 227, 96, 47, 195, 190, 53, 200, 47, 195, 190, 53, 249, 154, 190, 249, - 187, 2, 200, 235, 158, 228, 194, 61, 237, 171, 2, 251, 107, 46, 61, 237, - 171, 2, 251, 107, 51, 103, 227, 97, 2, 251, 107, 51, 233, 185, 2, 169, - 82, 233, 185, 2, 226, 159, 234, 37, 226, 66, 61, 253, 36, 252, 170, 231, - 221, 226, 66, 61, 253, 36, 2, 169, 82, 226, 66, 251, 62, 234, 37, 226, - 66, 235, 149, 237, 212, 226, 66, 235, 149, 245, 230, 248, 131, 228, 196, - 237, 213, 145, 105, 96, 248, 131, 228, 196, 245, 231, 145, 105, 96, 226, - 66, 228, 162, 252, 170, 231, 221, 238, 9, 226, 66, 61, 253, 36, 234, 37, - 47, 228, 162, 234, 37, 63, 61, 125, 236, 4, 63, 61, 125, 234, 245, 248, - 45, 63, 58, 234, 245, 224, 131, 63, 58, 228, 152, 248, 45, 63, 58, 228, - 152, 224, 131, 63, 58, 42, 41, 63, 58, 117, 86, 58, 225, 106, 86, 58, - 248, 125, 86, 58, 234, 245, 248, 45, 86, 58, 234, 245, 224, 131, 86, 58, - 228, 152, 248, 45, 86, 58, 228, 152, 224, 131, 86, 58, 42, 41, 86, 58, - 99, 103, 86, 58, 81, 67, 2, 226, 151, 248, 124, 81, 67, 2, 226, 151, 225, - 105, 117, 67, 2, 226, 151, 248, 124, 117, 67, 2, 226, 151, 225, 105, 37, - 2, 226, 106, 132, 252, 150, 37, 2, 252, 126, 132, 252, 150, 37, 2, 225, - 113, 41, 250, 1, 132, 252, 150, 37, 2, 203, 42, 250, 1, 132, 252, 150, - 249, 251, 2, 42, 132, 252, 150, 249, 251, 2, 41, 132, 252, 150, 249, 251, - 2, 226, 106, 132, 252, 150, 249, 251, 2, 252, 126, 132, 252, 150, 248, - 138, 228, 120, 86, 238, 9, 228, 120, 63, 238, 9, 228, 120, 86, 224, 234, - 3, 228, 120, 63, 224, 234, 3, 228, 120, 86, 233, 129, 63, 233, 129, 63, - 245, 86, 86, 245, 86, 169, 86, 245, 86, 86, 238, 9, 251, 106, 86, 236, - 228, 249, 250, 63, 236, 228, 249, 250, 86, 236, 228, 237, 113, 63, 236, - 228, 237, 113, 86, 3, 249, 250, 86, 3, 237, 113, 63, 3, 237, 113, 86, - 169, 247, 250, 63, 169, 247, 250, 86, 61, 247, 250, 63, 61, 247, 250, 42, - 67, 2, 3, 251, 106, 152, 117, 254, 92, 42, 67, 2, 33, 233, 10, 182, 117, - 228, 115, 58, 117, 225, 203, 67, 2, 61, 82, 117, 225, 203, 67, 2, 47, 61, - 82, 117, 225, 203, 67, 246, 224, 125, 117, 225, 203, 226, 66, 250, 131, - 58, 117, 67, 2, 248, 138, 228, 48, 117, 67, 2, 227, 90, 2, 61, 82, 117, - 67, 2, 227, 90, 2, 47, 61, 82, 117, 225, 203, 67, 2, 227, 89, 117, 225, - 203, 67, 2, 227, 90, 2, 61, 82, 117, 225, 203, 67, 2, 227, 90, 2, 47, 61, - 82, 117, 67, 226, 188, 224, 73, 224, 148, 67, 232, 251, 249, 199, 237, - 237, 247, 204, 5, 64, 117, 58, 231, 193, 226, 159, 234, 38, 64, 117, 58, - 117, 67, 64, 231, 193, 254, 210, 105, 96, 81, 67, 226, 188, 245, 230, 81, - 67, 226, 188, 227, 217, 117, 232, 78, 58, 81, 232, 78, 58, 231, 193, 226, - 159, 234, 38, 64, 81, 58, 81, 67, 64, 231, 193, 254, 210, 105, 96, 226, - 159, 234, 38, 64, 117, 58, 117, 67, 64, 254, 210, 105, 96, 117, 67, 64, - 231, 193, 226, 159, 234, 37, 81, 67, 64, 231, 193, 226, 159, 234, 37, 63, - 236, 228, 228, 58, 86, 3, 228, 58, 63, 3, 228, 58, 86, 231, 151, 233, - 129, 63, 231, 151, 233, 129, 115, 6, 1, 254, 28, 115, 6, 1, 252, 86, 115, - 6, 1, 225, 40, 115, 6, 1, 246, 19, 115, 6, 1, 249, 156, 115, 6, 1, 223, - 209, 115, 6, 1, 223, 71, 115, 6, 1, 248, 67, 115, 6, 1, 223, 94, 115, 6, - 1, 239, 186, 115, 6, 1, 59, 239, 186, 115, 6, 1, 74, 115, 6, 1, 249, 174, - 115, 6, 1, 239, 51, 115, 6, 1, 237, 150, 115, 6, 1, 236, 8, 115, 6, 1, - 235, 227, 115, 6, 1, 234, 54, 115, 6, 1, 232, 249, 115, 6, 1, 231, 134, - 115, 6, 1, 228, 187, 115, 6, 1, 225, 223, 115, 6, 1, 225, 149, 115, 6, 1, - 246, 226, 115, 6, 1, 245, 92, 115, 6, 1, 234, 14, 115, 6, 1, 233, 151, - 115, 6, 1, 229, 46, 115, 6, 1, 226, 29, 115, 6, 1, 251, 142, 115, 6, 1, - 229, 146, 115, 6, 1, 223, 213, 115, 6, 1, 223, 215, 115, 6, 1, 223, 237, - 115, 6, 1, 228, 135, 154, 115, 6, 1, 223, 158, 115, 6, 1, 3, 223, 139, - 115, 6, 1, 3, 223, 140, 2, 227, 89, 115, 6, 1, 223, 183, 115, 6, 1, 239, - 214, 3, 223, 139, 115, 6, 1, 252, 173, 223, 139, 115, 6, 1, 239, 214, - 252, 173, 223, 139, 115, 6, 1, 247, 38, 115, 6, 1, 239, 184, 115, 6, 1, - 229, 45, 115, 6, 1, 226, 58, 57, 115, 6, 1, 238, 0, 236, 8, 115, 3, 1, - 254, 28, 115, 3, 1, 252, 86, 115, 3, 1, 225, 40, 115, 3, 1, 246, 19, 115, - 3, 1, 249, 156, 115, 3, 1, 223, 209, 115, 3, 1, 223, 71, 115, 3, 1, 248, - 67, 115, 3, 1, 223, 94, 115, 3, 1, 239, 186, 115, 3, 1, 59, 239, 186, - 115, 3, 1, 74, 115, 3, 1, 249, 174, 115, 3, 1, 239, 51, 115, 3, 1, 237, - 150, 115, 3, 1, 236, 8, 115, 3, 1, 235, 227, 115, 3, 1, 234, 54, 115, 3, - 1, 232, 249, 115, 3, 1, 231, 134, 115, 3, 1, 228, 187, 115, 3, 1, 225, - 223, 115, 3, 1, 225, 149, 115, 3, 1, 246, 226, 115, 3, 1, 245, 92, 115, - 3, 1, 234, 14, 115, 3, 1, 233, 151, 115, 3, 1, 229, 46, 115, 3, 1, 226, - 29, 115, 3, 1, 251, 142, 115, 3, 1, 229, 146, 115, 3, 1, 223, 213, 115, - 3, 1, 223, 215, 115, 3, 1, 223, 237, 115, 3, 1, 228, 135, 154, 115, 3, 1, - 223, 158, 115, 3, 1, 3, 223, 139, 115, 3, 1, 3, 223, 140, 2, 227, 89, - 115, 3, 1, 223, 183, 115, 3, 1, 239, 214, 3, 223, 139, 115, 3, 1, 252, - 173, 223, 139, 115, 3, 1, 239, 214, 252, 173, 223, 139, 115, 3, 1, 247, - 38, 115, 3, 1, 239, 184, 115, 3, 1, 229, 45, 115, 3, 1, 226, 58, 57, 115, - 3, 1, 238, 0, 236, 8, 7, 6, 1, 238, 47, 2, 47, 125, 7, 3, 1, 238, 47, 2, - 47, 125, 7, 6, 1, 238, 47, 2, 236, 154, 205, 7, 6, 1, 233, 245, 2, 82, 7, - 6, 1, 232, 27, 2, 227, 89, 7, 3, 1, 102, 2, 82, 7, 3, 1, 227, 110, 2, - 250, 1, 82, 7, 6, 1, 245, 172, 2, 250, 34, 7, 3, 1, 245, 172, 2, 250, 34, - 7, 6, 1, 239, 77, 2, 250, 34, 7, 3, 1, 239, 77, 2, 250, 34, 7, 6, 1, 223, - 120, 2, 250, 34, 7, 3, 1, 223, 120, 2, 250, 34, 7, 6, 1, 254, 205, 7, 6, - 1, 237, 69, 2, 88, 7, 6, 1, 209, 57, 7, 3, 1, 225, 65, 2, 41, 88, 7, 6, - 1, 224, 175, 2, 88, 7, 3, 1, 224, 175, 2, 88, 7, 3, 1, 225, 65, 2, 250, - 224, 7, 6, 1, 132, 212, 7, 3, 1, 132, 212, 7, 3, 1, 227, 87, 233, 87, 7, - 3, 1, 161, 2, 234, 241, 7, 3, 1, 209, 232, 27, 2, 227, 89, 7, 3, 1, 130, - 2, 184, 231, 140, 239, 243, 7, 1, 3, 6, 209, 72, 7, 227, 253, 3, 1, 239, - 182, 52, 1, 6, 196, 70, 6, 1, 254, 222, 70, 3, 1, 254, 222, 70, 6, 1, - 224, 226, 70, 3, 1, 224, 226, 70, 6, 1, 246, 169, 70, 3, 1, 246, 169, 70, - 6, 1, 250, 162, 70, 3, 1, 250, 162, 70, 6, 1, 248, 21, 70, 3, 1, 248, 21, - 70, 6, 1, 228, 156, 70, 3, 1, 228, 156, 70, 6, 1, 223, 103, 70, 3, 1, - 223, 103, 70, 6, 1, 245, 130, 70, 3, 1, 245, 130, 70, 6, 1, 226, 222, 70, - 3, 1, 226, 222, 70, 6, 1, 244, 72, 70, 3, 1, 244, 72, 70, 6, 1, 239, 40, - 70, 3, 1, 239, 40, 70, 6, 1, 237, 254, 70, 3, 1, 237, 254, 70, 6, 1, 236, - 157, 70, 3, 1, 236, 157, 70, 6, 1, 235, 89, 70, 3, 1, 235, 89, 70, 6, 1, - 238, 111, 70, 3, 1, 238, 111, 70, 6, 1, 73, 70, 3, 1, 73, 70, 6, 1, 233, - 69, 70, 3, 1, 233, 69, 70, 6, 1, 231, 122, 70, 3, 1, 231, 122, 70, 6, 1, - 228, 249, 70, 3, 1, 228, 249, 70, 6, 1, 227, 61, 70, 3, 1, 227, 61, 70, - 6, 1, 225, 170, 70, 3, 1, 225, 170, 70, 6, 1, 247, 70, 70, 3, 1, 247, 70, - 70, 6, 1, 238, 212, 70, 3, 1, 238, 212, 70, 6, 1, 232, 183, 70, 3, 1, - 232, 183, 70, 6, 1, 234, 48, 70, 3, 1, 234, 48, 70, 6, 1, 249, 255, 254, - 227, 70, 3, 1, 249, 255, 254, 227, 70, 6, 1, 84, 70, 254, 248, 70, 3, 1, - 84, 70, 254, 248, 70, 6, 1, 250, 236, 248, 21, 70, 3, 1, 250, 236, 248, - 21, 70, 6, 1, 249, 255, 239, 40, 70, 3, 1, 249, 255, 239, 40, 70, 6, 1, - 249, 255, 235, 89, 70, 3, 1, 249, 255, 235, 89, 70, 6, 1, 250, 236, 235, - 89, 70, 3, 1, 250, 236, 235, 89, 70, 6, 1, 84, 70, 234, 48, 70, 3, 1, 84, - 70, 234, 48, 70, 6, 1, 230, 255, 70, 3, 1, 230, 255, 70, 6, 1, 250, 241, - 229, 106, 70, 3, 1, 250, 241, 229, 106, 70, 6, 1, 84, 70, 229, 106, 70, - 3, 1, 84, 70, 229, 106, 70, 6, 1, 84, 70, 247, 183, 70, 3, 1, 84, 70, - 247, 183, 70, 6, 1, 254, 236, 238, 215, 70, 3, 1, 254, 236, 238, 215, 70, - 6, 1, 249, 255, 244, 213, 70, 3, 1, 249, 255, 244, 213, 70, 6, 1, 84, 70, - 244, 213, 70, 3, 1, 84, 70, 244, 213, 70, 6, 1, 84, 70, 154, 70, 3, 1, - 84, 70, 154, 70, 6, 1, 238, 46, 154, 70, 3, 1, 238, 46, 154, 70, 6, 1, - 84, 70, 245, 106, 70, 3, 1, 84, 70, 245, 106, 70, 6, 1, 84, 70, 245, 132, - 70, 3, 1, 84, 70, 245, 132, 70, 6, 1, 84, 70, 246, 165, 70, 3, 1, 84, 70, - 246, 165, 70, 6, 1, 84, 70, 249, 177, 70, 3, 1, 84, 70, 249, 177, 70, 6, - 1, 84, 70, 229, 80, 70, 3, 1, 84, 70, 229, 80, 70, 6, 1, 84, 234, 204, - 229, 80, 70, 3, 1, 84, 234, 204, 229, 80, 70, 6, 1, 84, 234, 204, 235, - 114, 70, 3, 1, 84, 234, 204, 235, 114, 70, 6, 1, 84, 234, 204, 234, 163, - 70, 3, 1, 84, 234, 204, 234, 163, 70, 6, 1, 84, 234, 204, 224, 149, 70, - 3, 1, 84, 234, 204, 224, 149, 70, 14, 239, 56, 70, 14, 236, 158, 231, - 122, 70, 14, 233, 70, 231, 122, 70, 14, 228, 54, 70, 14, 227, 62, 231, - 122, 70, 14, 238, 213, 231, 122, 70, 14, 229, 81, 228, 249, 70, 84, 234, - 204, 246, 218, 228, 38, 70, 84, 234, 204, 249, 201, 232, 69, 76, 70, 84, - 234, 204, 240, 6, 232, 69, 76, 70, 84, 234, 204, 225, 32, 249, 184, 70, - 246, 235, 168, 245, 151, 70, 246, 218, 228, 38, 70, 236, 80, 249, 184, - 87, 3, 1, 254, 190, 87, 3, 1, 253, 44, 87, 3, 1, 246, 168, 87, 3, 1, 249, - 148, 87, 3, 1, 247, 239, 87, 3, 1, 224, 219, 87, 3, 1, 223, 92, 87, 3, 1, - 227, 73, 87, 3, 1, 240, 16, 87, 3, 1, 239, 46, 87, 3, 1, 238, 6, 87, 3, - 1, 237, 35, 87, 3, 1, 235, 230, 87, 3, 1, 234, 61, 87, 3, 1, 233, 194, - 87, 3, 1, 223, 81, 87, 3, 1, 232, 15, 87, 3, 1, 230, 253, 87, 3, 1, 227, - 67, 87, 3, 1, 225, 138, 87, 3, 1, 233, 92, 87, 3, 1, 238, 218, 87, 3, 1, - 246, 60, 87, 3, 1, 232, 123, 87, 3, 1, 229, 78, 87, 3, 1, 251, 161, 87, - 3, 1, 252, 26, 87, 3, 1, 239, 149, 87, 3, 1, 251, 109, 87, 3, 1, 251, - 192, 87, 3, 1, 224, 70, 87, 3, 1, 239, 159, 87, 3, 1, 245, 165, 87, 3, 1, - 245, 121, 87, 3, 1, 245, 71, 87, 3, 1, 224, 141, 87, 3, 1, 245, 141, 87, - 3, 1, 244, 225, 221, 1, 191, 221, 1, 224, 17, 221, 1, 224, 16, 221, 1, - 224, 8, 221, 1, 224, 6, 221, 1, 252, 204, 255, 43, 224, 2, 221, 1, 224, - 2, 221, 1, 224, 14, 221, 1, 224, 11, 221, 1, 224, 13, 221, 1, 224, 12, - 221, 1, 223, 206, 221, 1, 224, 9, 221, 1, 224, 1, 221, 1, 225, 249, 224, - 1, 221, 1, 223, 254, 221, 1, 224, 4, 221, 1, 252, 204, 255, 43, 224, 4, - 221, 1, 225, 249, 224, 4, 221, 1, 224, 3, 221, 1, 224, 21, 221, 1, 223, - 255, 221, 1, 225, 249, 223, 255, 221, 1, 223, 246, 221, 1, 225, 249, 223, - 246, 221, 1, 223, 202, 221, 1, 223, 230, 221, 1, 255, 1, 223, 230, 221, - 1, 225, 249, 223, 230, 221, 1, 223, 253, 221, 1, 223, 252, 221, 1, 223, - 250, 221, 1, 225, 249, 224, 5, 221, 1, 225, 249, 223, 248, 221, 1, 223, - 247, 221, 1, 223, 158, 221, 1, 223, 244, 221, 1, 223, 243, 221, 1, 224, - 7, 221, 1, 225, 249, 224, 7, 221, 1, 254, 30, 224, 7, 221, 1, 223, 242, - 221, 1, 223, 240, 221, 1, 223, 241, 221, 1, 223, 239, 221, 1, 223, 238, - 221, 1, 224, 15, 221, 1, 223, 236, 221, 1, 223, 235, 221, 1, 223, 234, - 221, 1, 223, 233, 221, 1, 223, 231, 221, 1, 227, 54, 223, 231, 221, 1, - 223, 229, 221, 52, 1, 238, 38, 76, 25, 4, 237, 142, 25, 4, 236, 102, 25, - 4, 231, 120, 25, 4, 228, 168, 25, 4, 229, 70, 25, 4, 252, 137, 25, 4, - 226, 124, 25, 4, 251, 67, 25, 4, 235, 4, 25, 4, 234, 151, 25, 4, 246, 16, - 234, 105, 25, 4, 223, 26, 25, 4, 249, 159, 25, 4, 250, 91, 25, 4, 239, - 116, 25, 4, 226, 200, 25, 4, 251, 149, 25, 4, 233, 78, 25, 4, 233, 3, 25, - 4, 246, 71, 25, 4, 246, 67, 25, 4, 246, 68, 25, 4, 246, 69, 25, 4, 228, - 110, 25, 4, 228, 80, 25, 4, 228, 91, 25, 4, 228, 109, 25, 4, 228, 94, 25, - 4, 228, 95, 25, 4, 228, 84, 25, 4, 251, 246, 25, 4, 251, 233, 25, 4, 251, - 235, 25, 4, 251, 245, 25, 4, 251, 243, 25, 4, 251, 244, 25, 4, 251, 234, - 25, 4, 222, 253, 25, 4, 222, 233, 25, 4, 222, 244, 25, 4, 222, 252, 25, - 4, 222, 247, 25, 4, 222, 248, 25, 4, 222, 236, 25, 4, 251, 242, 25, 4, - 251, 236, 25, 4, 251, 238, 25, 4, 251, 241, 25, 4, 251, 239, 25, 4, 251, - 240, 25, 4, 251, 237, 25, 4, 232, 39, 25, 4, 232, 29, 25, 4, 232, 35, 25, - 4, 232, 38, 25, 4, 232, 36, 25, 4, 232, 37, 25, 4, 232, 34, 25, 4, 238, - 57, 25, 4, 238, 49, 25, 4, 238, 52, 25, 4, 238, 56, 25, 4, 238, 53, 25, - 4, 238, 54, 25, 4, 238, 50, 25, 4, 224, 38, 25, 4, 224, 28, 25, 4, 224, - 34, 25, 4, 224, 37, 25, 4, 224, 35, 25, 4, 224, 36, 25, 4, 224, 33, 25, - 4, 245, 182, 25, 4, 245, 173, 25, 4, 245, 176, 25, 4, 245, 181, 25, 4, - 245, 178, 25, 4, 245, 179, 25, 4, 245, 175, 36, 28, 1, 252, 238, 36, 28, - 1, 225, 42, 36, 28, 1, 246, 58, 36, 28, 1, 250, 77, 36, 28, 1, 223, 77, - 36, 28, 1, 223, 97, 36, 28, 1, 177, 36, 28, 1, 248, 2, 36, 28, 1, 247, - 247, 36, 28, 1, 247, 239, 36, 28, 1, 73, 36, 28, 1, 233, 151, 36, 28, 1, - 247, 198, 36, 28, 1, 247, 188, 36, 28, 1, 227, 44, 36, 28, 1, 154, 36, - 28, 1, 226, 40, 36, 28, 1, 251, 182, 36, 28, 1, 229, 146, 36, 28, 1, 229, - 116, 36, 28, 1, 247, 38, 36, 28, 1, 247, 187, 36, 28, 1, 57, 36, 28, 1, - 240, 72, 36, 28, 1, 249, 175, 36, 28, 1, 236, 90, 225, 153, 36, 28, 1, - 223, 239, 36, 28, 1, 223, 158, 36, 28, 1, 239, 213, 57, 36, 28, 1, 237, - 155, 223, 139, 36, 28, 1, 252, 173, 223, 139, 36, 28, 1, 239, 213, 252, - 173, 223, 139, 41, 254, 182, 227, 248, 237, 13, 41, 254, 182, 248, 138, - 227, 248, 237, 13, 42, 227, 248, 104, 41, 227, 248, 104, 42, 248, 138, - 227, 248, 104, 41, 248, 138, 227, 248, 104, 232, 8, 239, 231, 237, 13, - 232, 8, 248, 138, 239, 231, 237, 13, 248, 138, 226, 91, 237, 13, 42, 226, - 91, 104, 41, 226, 91, 104, 232, 8, 228, 120, 42, 232, 8, 234, 63, 104, - 41, 232, 8, 234, 63, 104, 248, 36, 251, 8, 233, 190, 246, 251, 233, 190, - 200, 246, 251, 233, 190, 244, 92, 248, 138, 234, 100, 248, 125, 254, 187, - 225, 106, 254, 187, 248, 138, 231, 151, 254, 181, 47, 234, 97, 244, 95, - 239, 223, 239, 230, 233, 223, 252, 112, 244, 96, 2, 219, 226, 159, 2, - 231, 140, 46, 42, 184, 233, 182, 104, 41, 184, 233, 182, 104, 226, 159, - 2, 56, 46, 226, 159, 2, 56, 51, 42, 61, 253, 36, 2, 232, 65, 41, 61, 253, - 36, 2, 232, 65, 226, 106, 42, 132, 104, 226, 106, 41, 132, 104, 252, 126, - 42, 132, 104, 252, 126, 41, 132, 104, 42, 229, 11, 97, 104, 41, 229, 11, - 97, 104, 42, 47, 233, 180, 41, 47, 233, 180, 135, 197, 107, 168, 56, 232, - 170, 168, 56, 107, 135, 197, 232, 170, 228, 119, 246, 243, 56, 232, 170, - 247, 37, 56, 76, 200, 232, 69, 76, 61, 205, 231, 140, 232, 254, 9, 29, - 231, 211, 9, 29, 251, 88, 9, 29, 230, 209, 118, 9, 29, 230, 209, 113, 9, - 29, 230, 209, 166, 9, 29, 233, 112, 9, 29, 252, 118, 9, 29, 227, 99, 9, - 29, 238, 154, 118, 9, 29, 238, 154, 113, 9, 29, 249, 182, 9, 29, 230, - 211, 9, 29, 3, 118, 9, 29, 3, 113, 9, 29, 238, 15, 118, 9, 29, 238, 15, - 113, 9, 29, 238, 15, 166, 9, 29, 238, 15, 158, 9, 29, 228, 176, 9, 29, - 226, 192, 9, 29, 228, 174, 118, 9, 29, 228, 174, 113, 9, 29, 245, 115, - 118, 9, 29, 245, 115, 113, 9, 29, 245, 146, 9, 29, 232, 1, 9, 29, 251, - 147, 9, 29, 227, 227, 9, 29, 236, 84, 9, 29, 250, 75, 9, 29, 236, 77, 9, - 29, 251, 98, 9, 29, 224, 152, 118, 9, 29, 224, 152, 113, 9, 29, 247, 46, - 9, 29, 233, 160, 118, 9, 29, 233, 160, 113, 9, 29, 228, 245, 132, 226, - 87, 226, 49, 9, 29, 250, 253, 9, 29, 249, 153, 9, 29, 239, 177, 9, 29, - 252, 133, 106, 251, 77, 9, 29, 247, 136, 9, 29, 228, 132, 118, 9, 29, - 228, 132, 113, 9, 29, 253, 46, 9, 29, 228, 250, 9, 29, 252, 41, 228, 250, - 9, 29, 235, 148, 118, 9, 29, 235, 148, 113, 9, 29, 235, 148, 166, 9, 29, - 235, 148, 158, 9, 29, 236, 204, 9, 29, 229, 108, 9, 29, 232, 6, 9, 29, - 247, 154, 9, 29, 234, 73, 9, 29, 252, 97, 118, 9, 29, 252, 97, 113, 9, - 29, 236, 231, 9, 29, 236, 79, 9, 29, 245, 240, 118, 9, 29, 245, 240, 113, - 9, 29, 245, 240, 166, 9, 29, 226, 167, 9, 29, 251, 76, 9, 29, 224, 131, - 118, 9, 29, 224, 131, 113, 9, 29, 252, 41, 230, 203, 9, 29, 228, 245, - 244, 160, 9, 29, 244, 160, 9, 29, 252, 41, 228, 138, 9, 29, 252, 41, 229, - 103, 9, 29, 247, 2, 9, 29, 252, 41, 252, 2, 9, 29, 228, 245, 224, 166, 9, - 29, 224, 167, 118, 9, 29, 224, 167, 113, 9, 29, 251, 99, 9, 29, 252, 41, - 246, 6, 9, 29, 182, 118, 9, 29, 182, 113, 9, 29, 252, 41, 237, 134, 9, - 29, 252, 41, 246, 153, 9, 29, 236, 76, 118, 9, 29, 236, 76, 113, 9, 29, - 232, 9, 9, 29, 252, 140, 9, 29, 252, 41, 227, 72, 237, 240, 9, 29, 252, - 41, 237, 241, 9, 29, 252, 41, 224, 111, 9, 29, 252, 41, 247, 10, 9, 29, - 248, 43, 118, 9, 29, 248, 43, 113, 9, 29, 248, 43, 166, 9, 29, 252, 41, - 248, 42, 9, 29, 245, 118, 9, 29, 252, 41, 244, 159, 9, 29, 252, 132, 9, - 29, 246, 53, 9, 29, 252, 41, 247, 43, 9, 29, 252, 41, 252, 164, 9, 29, - 252, 41, 231, 7, 9, 29, 228, 245, 224, 126, 9, 29, 228, 245, 223, 223, 9, - 29, 252, 41, 246, 225, 9, 29, 239, 181, 247, 157, 9, 29, 252, 41, 247, - 157, 9, 29, 239, 181, 226, 107, 9, 29, 252, 41, 226, 107, 9, 29, 239, - 181, 248, 118, 9, 29, 252, 41, 248, 118, 9, 29, 225, 230, 9, 29, 239, - 181, 225, 230, 9, 29, 252, 41, 225, 230, 49, 29, 118, 49, 29, 237, 170, - 49, 29, 249, 140, 49, 29, 228, 194, 49, 29, 230, 208, 49, 29, 88, 49, 29, - 113, 49, 29, 237, 190, 49, 29, 237, 35, 49, 29, 237, 226, 49, 29, 247, - 222, 49, 29, 187, 49, 29, 103, 252, 118, 49, 29, 250, 254, 49, 29, 244, - 69, 49, 29, 227, 99, 49, 29, 234, 44, 252, 118, 49, 29, 238, 153, 49, 29, - 232, 233, 49, 29, 224, 87, 49, 29, 228, 128, 49, 29, 41, 234, 44, 252, - 118, 49, 29, 245, 72, 247, 235, 49, 29, 227, 23, 49, 29, 249, 182, 49, - 29, 230, 211, 49, 29, 251, 88, 49, 29, 232, 202, 49, 29, 255, 7, 49, 29, - 236, 72, 49, 29, 247, 235, 49, 29, 248, 48, 49, 29, 230, 224, 49, 29, - 246, 11, 49, 29, 246, 12, 228, 186, 49, 29, 247, 156, 49, 29, 252, 172, - 49, 29, 224, 101, 49, 29, 251, 163, 49, 29, 231, 113, 49, 29, 240, 15, - 49, 29, 228, 184, 49, 29, 238, 14, 49, 29, 251, 6, 49, 29, 228, 123, 49, - 29, 236, 74, 49, 29, 231, 131, 49, 29, 224, 89, 49, 29, 234, 59, 49, 29, - 225, 235, 49, 29, 248, 109, 49, 29, 229, 63, 226, 192, 49, 29, 248, 138, - 251, 88, 49, 29, 182, 228, 24, 49, 29, 135, 245, 145, 49, 29, 229, 65, - 49, 29, 252, 121, 49, 29, 228, 173, 49, 29, 252, 101, 49, 29, 228, 47, - 49, 29, 245, 114, 49, 29, 245, 152, 49, 29, 249, 143, 49, 29, 245, 146, - 49, 29, 252, 112, 49, 29, 232, 1, 49, 29, 230, 217, 49, 29, 249, 203, 49, - 29, 254, 35, 49, 29, 228, 120, 49, 29, 234, 242, 49, 29, 227, 227, 49, - 29, 230, 234, 49, 29, 236, 84, 49, 29, 226, 86, 49, 29, 238, 34, 49, 29, - 228, 38, 49, 29, 250, 75, 49, 29, 224, 140, 49, 29, 249, 162, 234, 242, - 49, 29, 251, 51, 49, 29, 246, 212, 49, 29, 251, 96, 49, 29, 228, 50, 49, - 29, 224, 151, 49, 29, 247, 46, 49, 29, 251, 95, 49, 29, 247, 101, 49, 29, - 47, 224, 73, 49, 29, 132, 226, 87, 226, 49, 49, 29, 228, 191, 49, 29, - 247, 109, 49, 29, 250, 253, 49, 29, 249, 153, 49, 29, 232, 199, 49, 29, - 239, 177, 49, 29, 236, 217, 49, 29, 226, 158, 49, 29, 227, 195, 49, 29, - 237, 185, 49, 29, 225, 86, 49, 29, 247, 69, 49, 29, 252, 133, 106, 251, - 77, 49, 29, 229, 12, 49, 29, 248, 138, 227, 21, 49, 29, 224, 121, 49, 29, - 228, 201, 49, 29, 249, 195, 49, 29, 247, 136, 49, 29, 228, 140, 49, 29, - 58, 49, 29, 228, 40, 49, 29, 228, 131, 49, 29, 226, 95, 49, 29, 245, 245, - 49, 29, 251, 251, 49, 29, 228, 62, 49, 29, 253, 46, 49, 29, 231, 178, 49, - 29, 228, 250, 49, 29, 239, 173, 49, 29, 235, 147, 49, 29, 229, 108, 49, - 29, 247, 94, 49, 29, 234, 73, 49, 29, 254, 186, 49, 29, 233, 14, 49, 29, - 248, 51, 49, 29, 252, 96, 49, 29, 236, 231, 49, 29, 236, 122, 49, 29, - 229, 192, 49, 29, 254, 96, 49, 29, 236, 79, 49, 29, 226, 110, 49, 29, - 234, 36, 49, 29, 252, 135, 49, 29, 228, 36, 49, 29, 251, 60, 49, 29, 245, - 239, 49, 29, 226, 167, 49, 29, 239, 245, 49, 29, 252, 141, 49, 29, 224, - 167, 247, 235, 49, 29, 251, 76, 49, 29, 224, 130, 49, 29, 230, 203, 49, - 29, 244, 160, 49, 29, 228, 138, 49, 29, 225, 61, 49, 29, 252, 235, 49, - 29, 233, 43, 49, 29, 253, 60, 49, 29, 229, 103, 49, 29, 231, 230, 49, 29, - 231, 60, 49, 29, 247, 2, 49, 29, 252, 134, 49, 29, 252, 2, 49, 29, 252, - 155, 49, 29, 236, 81, 49, 29, 224, 166, 49, 29, 251, 99, 49, 29, 224, - 109, 49, 29, 249, 192, 49, 29, 224, 220, 49, 29, 246, 6, 49, 29, 237, - 134, 49, 29, 246, 153, 49, 29, 236, 75, 49, 29, 228, 193, 49, 29, 229, - 63, 227, 88, 252, 164, 49, 29, 232, 9, 49, 29, 252, 140, 49, 29, 224, 84, - 49, 29, 247, 125, 49, 29, 237, 240, 49, 29, 227, 72, 237, 240, 49, 29, - 237, 238, 49, 29, 228, 154, 49, 29, 237, 241, 49, 29, 224, 111, 49, 29, - 247, 10, 49, 29, 248, 42, 49, 29, 245, 118, 49, 29, 246, 233, 49, 29, - 244, 159, 49, 29, 252, 132, 49, 29, 227, 76, 49, 29, 245, 157, 49, 29, - 247, 62, 49, 29, 231, 26, 224, 109, 49, 29, 251, 253, 49, 29, 246, 53, - 49, 29, 247, 43, 49, 29, 252, 164, 49, 29, 231, 7, 49, 29, 250, 65, 49, - 29, 224, 126, 49, 29, 245, 101, 49, 29, 223, 223, 49, 29, 236, 129, 49, - 29, 252, 150, 49, 29, 247, 244, 49, 29, 246, 225, 49, 29, 226, 64, 49, - 29, 248, 111, 49, 29, 231, 253, 49, 29, 234, 243, 49, 29, 247, 157, 49, - 29, 226, 107, 49, 29, 248, 118, 49, 29, 225, 230, 49, 29, 247, 11, 90, - 250, 32, 116, 42, 180, 231, 153, 90, 250, 32, 116, 64, 180, 51, 90, 250, - 32, 116, 42, 180, 236, 154, 22, 231, 153, 90, 250, 32, 116, 64, 180, 236, - 154, 22, 51, 90, 250, 32, 116, 246, 218, 227, 207, 90, 250, 32, 116, 227, - 208, 246, 224, 46, 90, 250, 32, 116, 227, 208, 246, 224, 51, 90, 250, 32, - 116, 227, 208, 246, 224, 237, 237, 90, 250, 32, 116, 227, 208, 246, 224, - 225, 113, 237, 237, 90, 250, 32, 116, 227, 208, 246, 224, 225, 113, 231, - 153, 90, 250, 32, 116, 227, 208, 246, 224, 203, 237, 237, 90, 250, 32, - 116, 234, 4, 90, 228, 145, 90, 251, 54, 90, 246, 218, 228, 38, 249, 189, - 76, 239, 174, 240, 5, 228, 61, 98, 90, 239, 193, 76, 90, 251, 79, 76, 90, - 65, 223, 89, 42, 254, 182, 104, 41, 254, 182, 104, 42, 47, 254, 182, 104, - 41, 47, 254, 182, 104, 42, 251, 11, 104, 41, 251, 11, 104, 42, 63, 251, - 11, 104, 41, 63, 251, 11, 104, 42, 86, 237, 217, 104, 41, 86, 237, 217, - 104, 232, 237, 76, 246, 104, 76, 42, 226, 100, 229, 104, 104, 41, 226, - 100, 229, 104, 104, 42, 63, 237, 217, 104, 41, 63, 237, 217, 104, 42, 63, - 226, 100, 229, 104, 104, 41, 63, 226, 100, 229, 104, 104, 42, 63, 37, - 104, 41, 63, 37, 104, 224, 148, 250, 130, 200, 47, 232, 206, 232, 57, 76, - 47, 232, 206, 232, 57, 76, 184, 47, 232, 206, 232, 57, 76, 232, 237, 165, - 247, 125, 245, 144, 207, 118, 245, 144, 207, 113, 245, 144, 207, 166, - 245, 144, 207, 158, 245, 144, 207, 173, 245, 144, 207, 183, 245, 144, - 207, 194, 245, 144, 207, 187, 245, 144, 207, 192, 90, 237, 209, 206, 76, - 90, 231, 135, 206, 76, 90, 250, 38, 206, 76, 90, 247, 221, 206, 76, 26, - 228, 241, 56, 206, 76, 26, 47, 56, 206, 76, 224, 146, 250, 130, 61, 239, - 45, 231, 212, 76, 61, 239, 45, 231, 212, 2, 224, 204, 228, 155, 76, 61, - 239, 45, 231, 212, 165, 225, 113, 245, 151, 61, 239, 45, 231, 212, 2, - 224, 204, 228, 155, 165, 225, 113, 245, 151, 61, 239, 45, 231, 212, 165, - 203, 245, 151, 33, 232, 237, 76, 90, 167, 237, 171, 247, 91, 229, 174, - 98, 245, 144, 207, 227, 23, 245, 144, 207, 225, 216, 245, 144, 207, 226, - 207, 61, 90, 239, 193, 76, 237, 3, 76, 233, 176, 254, 202, 76, 90, 38, - 240, 7, 90, 132, 247, 55, 228, 145, 126, 1, 3, 57, 126, 1, 57, 126, 1, 3, - 74, 126, 1, 74, 126, 1, 3, 66, 126, 1, 66, 126, 1, 3, 72, 126, 1, 72, - 126, 1, 3, 73, 126, 1, 73, 126, 1, 177, 126, 1, 246, 193, 126, 1, 238, - 199, 126, 1, 246, 46, 126, 1, 238, 107, 126, 1, 245, 218, 126, 1, 239, 3, - 126, 1, 246, 131, 126, 1, 238, 150, 126, 1, 246, 11, 126, 1, 231, 31, - 126, 1, 223, 117, 126, 1, 229, 15, 126, 1, 223, 47, 126, 1, 228, 6, 126, - 1, 223, 19, 126, 1, 230, 213, 126, 1, 223, 97, 126, 1, 228, 169, 126, 1, - 223, 27, 126, 1, 227, 107, 126, 1, 250, 189, 126, 1, 226, 175, 126, 1, - 250, 4, 126, 1, 3, 225, 250, 126, 1, 225, 250, 126, 1, 248, 107, 126, 1, - 227, 44, 126, 1, 250, 77, 126, 1, 96, 126, 1, 249, 161, 126, 1, 236, 1, - 126, 1, 235, 89, 126, 1, 234, 206, 126, 1, 235, 162, 126, 1, 235, 6, 126, - 1, 154, 126, 1, 253, 70, 126, 1, 213, 126, 1, 245, 75, 126, 1, 252, 181, - 126, 1, 233, 69, 126, 1, 244, 145, 126, 1, 252, 90, 126, 1, 232, 173, - 126, 1, 245, 121, 126, 1, 252, 238, 126, 1, 233, 151, 126, 1, 244, 227, - 126, 1, 252, 138, 126, 1, 233, 4, 126, 1, 198, 126, 1, 236, 157, 126, 1, - 236, 66, 126, 1, 236, 235, 126, 1, 236, 103, 126, 1, 3, 191, 126, 1, 191, - 126, 1, 3, 223, 158, 126, 1, 223, 158, 126, 1, 3, 223, 183, 126, 1, 223, - 183, 126, 1, 208, 126, 1, 231, 180, 126, 1, 231, 70, 126, 1, 231, 244, - 126, 1, 231, 122, 126, 1, 3, 224, 173, 126, 1, 224, 173, 126, 1, 224, - 118, 126, 1, 224, 141, 126, 1, 224, 105, 126, 1, 199, 126, 1, 224, 190, - 126, 1, 3, 177, 126, 1, 3, 239, 3, 36, 239, 19, 224, 204, 228, 155, 76, - 36, 239, 19, 229, 191, 228, 155, 76, 239, 19, 224, 204, 228, 155, 76, - 239, 19, 229, 191, 228, 155, 76, 126, 239, 193, 76, 126, 224, 204, 239, - 193, 76, 126, 249, 224, 223, 170, 239, 19, 47, 244, 95, 48, 1, 3, 57, 48, - 1, 57, 48, 1, 3, 74, 48, 1, 74, 48, 1, 3, 66, 48, 1, 66, 48, 1, 3, 72, - 48, 1, 72, 48, 1, 3, 73, 48, 1, 73, 48, 1, 177, 48, 1, 246, 193, 48, 1, - 238, 199, 48, 1, 246, 46, 48, 1, 238, 107, 48, 1, 245, 218, 48, 1, 239, - 3, 48, 1, 246, 131, 48, 1, 238, 150, 48, 1, 246, 11, 48, 1, 231, 31, 48, - 1, 223, 117, 48, 1, 229, 15, 48, 1, 223, 47, 48, 1, 228, 6, 48, 1, 223, - 19, 48, 1, 230, 213, 48, 1, 223, 97, 48, 1, 228, 169, 48, 1, 223, 27, 48, - 1, 227, 107, 48, 1, 250, 189, 48, 1, 226, 175, 48, 1, 250, 4, 48, 1, 3, - 225, 250, 48, 1, 225, 250, 48, 1, 248, 107, 48, 1, 227, 44, 48, 1, 250, - 77, 48, 1, 96, 48, 1, 249, 161, 48, 1, 236, 1, 48, 1, 235, 89, 48, 1, - 234, 206, 48, 1, 235, 162, 48, 1, 235, 6, 48, 1, 154, 48, 1, 253, 70, 48, - 1, 213, 48, 1, 245, 75, 48, 1, 252, 181, 48, 1, 233, 69, 48, 1, 244, 145, - 48, 1, 252, 90, 48, 1, 232, 173, 48, 1, 245, 121, 48, 1, 252, 238, 48, 1, - 233, 151, 48, 1, 244, 227, 48, 1, 252, 138, 48, 1, 233, 4, 48, 1, 198, - 48, 1, 236, 157, 48, 1, 236, 66, 48, 1, 236, 235, 48, 1, 236, 103, 48, 1, - 3, 191, 48, 1, 191, 48, 1, 3, 223, 158, 48, 1, 223, 158, 48, 1, 3, 223, - 183, 48, 1, 223, 183, 48, 1, 208, 48, 1, 231, 180, 48, 1, 231, 70, 48, 1, - 231, 244, 48, 1, 231, 122, 48, 1, 3, 224, 173, 48, 1, 224, 173, 48, 1, - 224, 118, 48, 1, 224, 141, 48, 1, 224, 105, 48, 1, 199, 48, 1, 224, 190, - 48, 1, 3, 177, 48, 1, 3, 239, 3, 48, 1, 225, 64, 48, 1, 224, 228, 48, 1, - 225, 42, 48, 1, 224, 206, 48, 236, 154, 249, 140, 239, 19, 232, 194, 228, - 155, 76, 48, 239, 193, 76, 48, 224, 204, 239, 193, 76, 48, 249, 224, 238, - 129, 176, 1, 254, 27, 176, 1, 233, 244, 176, 1, 185, 176, 1, 247, 130, - 176, 1, 222, 222, 176, 1, 227, 109, 176, 1, 199, 176, 1, 149, 176, 1, - 214, 176, 1, 239, 76, 176, 1, 212, 176, 1, 239, 182, 176, 1, 232, 139, - 176, 1, 224, 73, 176, 1, 223, 86, 176, 1, 251, 205, 176, 1, 229, 148, - 176, 1, 146, 176, 1, 223, 119, 176, 1, 252, 44, 176, 1, 193, 176, 1, 57, - 176, 1, 73, 176, 1, 72, 176, 1, 248, 24, 176, 1, 254, 253, 176, 1, 248, - 22, 176, 1, 254, 53, 176, 1, 234, 13, 176, 1, 254, 190, 176, 1, 247, 239, - 176, 1, 254, 184, 176, 1, 247, 228, 176, 1, 247, 198, 176, 1, 74, 176, 1, - 66, 176, 1, 239, 192, 176, 1, 196, 176, 1, 235, 139, 176, 1, 246, 15, - 176, 1, 240, 48, 26, 1, 238, 173, 26, 1, 228, 104, 26, 1, 238, 171, 26, - 1, 235, 82, 26, 1, 235, 81, 26, 1, 235, 80, 26, 1, 226, 163, 26, 1, 228, - 99, 26, 1, 231, 174, 26, 1, 231, 170, 26, 1, 231, 168, 26, 1, 231, 162, - 26, 1, 231, 159, 26, 1, 231, 157, 26, 1, 231, 163, 26, 1, 231, 173, 26, - 1, 236, 148, 26, 1, 233, 60, 26, 1, 228, 102, 26, 1, 233, 52, 26, 1, 228, - 236, 26, 1, 228, 100, 26, 1, 240, 68, 26, 1, 251, 113, 26, 1, 228, 107, - 26, 1, 251, 167, 26, 1, 238, 210, 26, 1, 226, 218, 26, 1, 233, 85, 26, 1, - 245, 69, 26, 1, 57, 26, 1, 255, 19, 26, 1, 191, 26, 1, 224, 10, 26, 1, - 247, 217, 26, 1, 72, 26, 1, 223, 221, 26, 1, 223, 228, 26, 1, 73, 26, 1, - 224, 173, 26, 1, 224, 170, 26, 1, 234, 88, 26, 1, 223, 183, 26, 1, 66, - 26, 1, 224, 133, 26, 1, 224, 141, 26, 1, 224, 118, 26, 1, 223, 158, 26, - 1, 247, 165, 26, 1, 223, 202, 26, 1, 74, 26, 247, 52, 26, 1, 228, 103, - 26, 1, 235, 74, 26, 1, 235, 76, 26, 1, 235, 78, 26, 1, 231, 169, 26, 1, - 231, 156, 26, 1, 231, 160, 26, 1, 231, 164, 26, 1, 231, 154, 26, 1, 236, - 143, 26, 1, 236, 141, 26, 1, 236, 144, 26, 1, 239, 34, 26, 1, 233, 56, - 26, 1, 233, 45, 26, 1, 233, 50, 26, 1, 233, 48, 26, 1, 233, 58, 26, 1, - 233, 46, 26, 1, 239, 32, 26, 1, 239, 30, 26, 1, 228, 230, 26, 1, 228, - 228, 26, 1, 228, 221, 26, 1, 228, 226, 26, 1, 228, 234, 26, 1, 233, 204, - 26, 1, 228, 105, 26, 1, 223, 212, 26, 1, 223, 210, 26, 1, 223, 211, 26, - 1, 239, 33, 26, 1, 228, 106, 26, 1, 223, 218, 26, 1, 223, 180, 26, 1, - 223, 179, 26, 1, 223, 182, 26, 1, 223, 151, 26, 1, 223, 152, 26, 1, 223, - 154, 26, 1, 254, 128, 26, 1, 254, 124, 90, 254, 175, 237, 162, 76, 90, - 254, 175, 231, 193, 76, 90, 254, 175, 168, 76, 90, 254, 175, 135, 76, 90, - 254, 175, 152, 76, 90, 254, 175, 246, 243, 76, 90, 254, 175, 226, 106, - 76, 90, 254, 175, 236, 154, 76, 90, 254, 175, 252, 126, 76, 90, 254, 175, - 247, 45, 76, 90, 254, 175, 230, 209, 76, 90, 254, 175, 226, 214, 76, 90, - 254, 175, 246, 237, 76, 90, 254, 175, 245, 113, 76, 90, 254, 175, 248, - 49, 76, 90, 254, 175, 237, 36, 76, 176, 1, 252, 90, 176, 1, 223, 47, 176, - 1, 239, 156, 176, 1, 245, 218, 176, 1, 248, 35, 176, 1, 247, 226, 176, 1, - 234, 52, 176, 1, 234, 56, 176, 1, 239, 210, 176, 1, 254, 176, 176, 1, - 239, 250, 176, 1, 225, 121, 176, 1, 240, 30, 176, 1, 235, 123, 176, 1, - 254, 247, 176, 1, 254, 49, 176, 1, 254, 199, 176, 1, 234, 69, 176, 1, - 234, 58, 176, 1, 239, 247, 176, 35, 1, 233, 244, 176, 35, 1, 227, 109, - 176, 35, 1, 239, 76, 176, 35, 1, 212, 9, 195, 227, 109, 9, 195, 224, 127, - 9, 195, 224, 65, 9, 195, 252, 56, 9, 195, 227, 201, 9, 195, 244, 85, 9, - 195, 244, 89, 9, 195, 244, 151, 9, 195, 244, 86, 9, 195, 227, 112, 9, - 195, 244, 88, 9, 195, 244, 84, 9, 195, 244, 149, 9, 195, 244, 87, 9, 195, - 244, 83, 9, 195, 199, 9, 195, 212, 9, 195, 193, 9, 195, 233, 244, 9, 195, - 228, 147, 9, 195, 222, 222, 9, 195, 244, 90, 9, 195, 245, 85, 9, 195, - 227, 121, 9, 195, 227, 186, 9, 195, 228, 70, 9, 195, 229, 153, 9, 195, - 233, 153, 9, 195, 232, 141, 9, 195, 226, 125, 9, 195, 227, 111, 9, 195, - 227, 194, 9, 195, 244, 97, 9, 195, 244, 82, 9, 195, 233, 99, 9, 195, 232, - 139, 48, 1, 3, 238, 107, 48, 1, 3, 229, 15, 48, 1, 3, 228, 6, 48, 1, 3, - 96, 48, 1, 3, 234, 206, 48, 1, 3, 154, 48, 1, 3, 245, 75, 48, 1, 3, 244, - 145, 48, 1, 3, 245, 121, 48, 1, 3, 244, 227, 48, 1, 3, 236, 66, 48, 1, 3, - 208, 48, 1, 3, 231, 180, 48, 1, 3, 231, 70, 48, 1, 3, 231, 244, 48, 1, 3, - 231, 122, 93, 26, 238, 173, 93, 26, 235, 82, 93, 26, 226, 163, 93, 26, - 231, 174, 93, 26, 236, 148, 93, 26, 233, 60, 93, 26, 228, 236, 93, 26, - 240, 68, 93, 26, 251, 113, 93, 26, 251, 167, 93, 26, 238, 210, 93, 26, - 226, 218, 93, 26, 233, 85, 93, 26, 245, 69, 93, 26, 238, 174, 57, 93, 26, - 235, 83, 57, 93, 26, 226, 164, 57, 93, 26, 231, 175, 57, 93, 26, 236, - 149, 57, 93, 26, 233, 61, 57, 93, 26, 228, 237, 57, 93, 26, 240, 69, 57, - 93, 26, 251, 114, 57, 93, 26, 251, 168, 57, 93, 26, 238, 211, 57, 93, 26, - 226, 219, 57, 93, 26, 233, 86, 57, 93, 26, 245, 70, 57, 93, 26, 251, 114, - 66, 93, 238, 133, 116, 234, 78, 93, 238, 133, 116, 130, 244, 145, 93, - 133, 118, 93, 133, 113, 93, 133, 166, 93, 133, 158, 93, 133, 173, 93, - 133, 183, 93, 133, 194, 93, 133, 187, 93, 133, 192, 93, 133, 227, 23, 93, - 133, 236, 84, 93, 133, 247, 46, 93, 133, 224, 151, 93, 133, 224, 97, 93, - 133, 236, 199, 93, 133, 248, 48, 93, 133, 227, 227, 93, 133, 228, 41, 93, - 133, 245, 127, 93, 133, 228, 167, 93, 133, 235, 237, 93, 133, 228, 139, - 93, 133, 247, 51, 93, 133, 251, 40, 93, 133, 238, 37, 93, 133, 231, 208, - 93, 133, 252, 31, 93, 133, 228, 9, 93, 133, 227, 216, 93, 133, 247, 220, - 93, 133, 231, 201, 93, 133, 254, 212, 93, 133, 247, 75, 93, 133, 231, - 199, 93, 133, 229, 192, 93, 133, 231, 243, 233, 173, 53, 33, 65, 225, - 217, 118, 33, 65, 225, 217, 113, 33, 65, 225, 217, 166, 33, 65, 225, 217, - 158, 33, 65, 225, 217, 173, 33, 65, 225, 217, 183, 33, 65, 225, 217, 194, - 33, 65, 225, 217, 187, 33, 65, 225, 217, 192, 33, 65, 226, 207, 33, 65, - 226, 208, 118, 33, 65, 226, 208, 113, 33, 65, 226, 208, 166, 33, 65, 226, - 208, 158, 33, 65, 226, 208, 173, 33, 26, 238, 173, 33, 26, 235, 82, 33, - 26, 226, 163, 33, 26, 231, 174, 33, 26, 236, 148, 33, 26, 233, 60, 33, - 26, 228, 236, 33, 26, 240, 68, 33, 26, 251, 113, 33, 26, 251, 167, 33, - 26, 238, 210, 33, 26, 226, 218, 33, 26, 233, 85, 33, 26, 245, 69, 33, 26, - 238, 174, 57, 33, 26, 235, 83, 57, 33, 26, 226, 164, 57, 33, 26, 231, - 175, 57, 33, 26, 236, 149, 57, 33, 26, 233, 61, 57, 33, 26, 228, 237, 57, - 33, 26, 240, 69, 57, 33, 26, 251, 114, 57, 33, 26, 251, 168, 57, 33, 26, - 238, 211, 57, 33, 26, 226, 219, 57, 33, 26, 233, 86, 57, 33, 26, 245, 70, - 57, 33, 238, 133, 116, 251, 197, 33, 238, 133, 116, 239, 98, 33, 26, 240, - 69, 66, 238, 133, 228, 61, 98, 33, 133, 118, 33, 133, 113, 33, 133, 166, - 33, 133, 158, 33, 133, 173, 33, 133, 183, 33, 133, 194, 33, 133, 187, 33, - 133, 192, 33, 133, 227, 23, 33, 133, 236, 84, 33, 133, 247, 46, 33, 133, - 224, 151, 33, 133, 224, 97, 33, 133, 236, 199, 33, 133, 248, 48, 33, 133, - 227, 227, 33, 133, 228, 41, 33, 133, 245, 127, 33, 133, 228, 167, 33, - 133, 235, 237, 33, 133, 228, 139, 33, 133, 247, 51, 33, 133, 251, 40, 33, - 133, 238, 37, 33, 133, 230, 207, 33, 133, 237, 38, 33, 133, 247, 82, 33, - 133, 227, 238, 33, 133, 247, 151, 33, 133, 232, 203, 33, 133, 254, 57, - 33, 133, 239, 194, 33, 133, 231, 199, 33, 133, 251, 14, 33, 133, 251, 5, - 33, 133, 245, 63, 33, 133, 251, 218, 33, 133, 237, 117, 33, 133, 237, - 237, 33, 133, 231, 153, 33, 133, 236, 229, 33, 133, 231, 218, 33, 133, - 228, 9, 33, 133, 227, 216, 33, 133, 247, 220, 33, 133, 231, 201, 33, 133, - 254, 212, 33, 133, 235, 71, 33, 65, 226, 208, 183, 33, 65, 226, 208, 194, - 33, 65, 226, 208, 187, 33, 65, 226, 208, 192, 33, 65, 246, 245, 33, 65, - 246, 246, 118, 33, 65, 246, 246, 113, 33, 65, 246, 246, 166, 33, 65, 246, - 246, 158, 33, 65, 246, 246, 173, 33, 65, 246, 246, 183, 33, 65, 246, 246, - 194, 33, 65, 246, 246, 187, 33, 65, 246, 246, 192, 33, 65, 247, 63, 90, - 167, 14, 32, 239, 175, 90, 167, 14, 32, 247, 93, 90, 167, 14, 32, 237, - 19, 90, 167, 14, 32, 254, 136, 90, 167, 14, 32, 236, 252, 90, 167, 14, - 32, 239, 96, 90, 167, 14, 32, 239, 97, 90, 167, 14, 32, 254, 50, 90, 167, - 14, 32, 229, 172, 90, 167, 14, 32, 234, 91, 90, 167, 14, 32, 234, 233, - 90, 167, 14, 32, 250, 72, 37, 245, 85, 37, 247, 194, 37, 247, 159, 237, - 176, 237, 192, 53, 33, 48, 57, 33, 48, 74, 33, 48, 66, 33, 48, 72, 33, - 48, 73, 33, 48, 177, 33, 48, 238, 199, 33, 48, 238, 107, 33, 48, 239, 3, - 33, 48, 238, 150, 33, 48, 231, 31, 33, 48, 229, 15, 33, 48, 228, 6, 33, - 48, 230, 213, 33, 48, 228, 169, 33, 48, 227, 107, 33, 48, 226, 175, 33, - 48, 225, 250, 33, 48, 227, 44, 33, 48, 96, 33, 48, 236, 1, 33, 48, 235, - 89, 33, 48, 234, 206, 33, 48, 235, 162, 33, 48, 235, 6, 33, 48, 154, 33, - 48, 245, 75, 33, 48, 244, 145, 33, 48, 245, 121, 33, 48, 244, 227, 33, - 48, 198, 33, 48, 236, 157, 33, 48, 236, 66, 33, 48, 236, 235, 33, 48, - 236, 103, 33, 48, 191, 33, 48, 223, 158, 33, 48, 223, 183, 33, 48, 208, - 33, 48, 231, 180, 33, 48, 231, 70, 33, 48, 231, 244, 33, 48, 231, 122, - 33, 48, 224, 173, 33, 48, 224, 118, 33, 48, 224, 141, 33, 48, 224, 105, - 37, 254, 156, 37, 254, 88, 37, 254, 171, 37, 255, 57, 37, 239, 251, 37, - 239, 225, 37, 225, 119, 37, 247, 174, 37, 248, 33, 37, 234, 55, 37, 234, - 50, 37, 239, 55, 37, 239, 29, 37, 239, 27, 37, 246, 157, 37, 246, 164, - 37, 246, 37, 37, 246, 33, 37, 238, 48, 37, 246, 27, 37, 238, 184, 37, - 238, 183, 37, 238, 182, 37, 238, 181, 37, 245, 196, 37, 245, 195, 37, - 238, 88, 37, 238, 90, 37, 238, 255, 37, 238, 131, 37, 238, 137, 37, 231, - 16, 37, 230, 249, 37, 228, 219, 37, 229, 177, 37, 229, 176, 37, 250, 186, - 37, 250, 31, 37, 249, 141, 37, 226, 120, 37, 235, 233, 37, 234, 234, 37, - 245, 156, 37, 233, 238, 37, 233, 237, 37, 253, 68, 37, 233, 66, 37, 233, - 39, 37, 233, 40, 37, 252, 162, 37, 244, 144, 37, 244, 141, 37, 252, 65, - 37, 244, 129, 37, 245, 104, 37, 233, 105, 37, 233, 132, 37, 245, 91, 37, - 233, 130, 37, 233, 142, 37, 252, 228, 37, 232, 250, 37, 252, 128, 37, - 244, 219, 37, 232, 245, 37, 244, 215, 37, 244, 216, 37, 237, 47, 37, 237, - 44, 37, 237, 51, 37, 237, 9, 37, 237, 29, 37, 236, 133, 37, 236, 115, 37, - 236, 114, 37, 236, 221, 37, 236, 219, 37, 236, 222, 37, 224, 20, 37, 224, - 18, 37, 223, 150, 37, 231, 133, 37, 231, 137, 37, 231, 53, 37, 231, 48, - 37, 231, 217, 37, 231, 216, 37, 224, 150, 90, 167, 14, 32, 244, 155, 223, - 89, 90, 167, 14, 32, 244, 155, 118, 90, 167, 14, 32, 244, 155, 113, 90, - 167, 14, 32, 244, 155, 166, 90, 167, 14, 32, 244, 155, 158, 90, 167, 14, - 32, 244, 155, 173, 90, 167, 14, 32, 244, 155, 183, 90, 167, 14, 32, 244, - 155, 194, 90, 167, 14, 32, 244, 155, 187, 90, 167, 14, 32, 244, 155, 192, - 90, 167, 14, 32, 244, 155, 227, 23, 90, 167, 14, 32, 244, 155, 247, 252, - 90, 167, 14, 32, 244, 155, 225, 218, 90, 167, 14, 32, 244, 155, 226, 209, - 90, 167, 14, 32, 244, 155, 246, 238, 90, 167, 14, 32, 244, 155, 247, 67, - 90, 167, 14, 32, 244, 155, 228, 212, 90, 167, 14, 32, 244, 155, 229, 161, - 90, 167, 14, 32, 244, 155, 248, 18, 90, 167, 14, 32, 244, 155, 235, 59, - 90, 167, 14, 32, 244, 155, 225, 216, 90, 167, 14, 32, 244, 155, 225, 210, - 90, 167, 14, 32, 244, 155, 225, 206, 90, 167, 14, 32, 244, 155, 225, 207, - 90, 167, 14, 32, 244, 155, 225, 212, 37, 244, 150, 37, 250, 189, 37, 254, - 53, 37, 125, 37, 234, 6, 37, 233, 154, 37, 249, 163, 37, 249, 164, 228, - 118, 37, 249, 164, 250, 231, 37, 239, 192, 37, 247, 197, 235, 238, 245, - 105, 37, 247, 197, 235, 238, 227, 129, 37, 247, 197, 235, 238, 227, 86, - 37, 247, 197, 235, 238, 236, 218, 37, 251, 7, 37, 233, 242, 254, 192, 37, - 236, 1, 37, 236, 67, 57, 37, 198, 37, 177, 37, 239, 6, 37, 236, 249, 37, - 246, 145, 37, 252, 33, 37, 239, 5, 37, 233, 100, 37, 235, 141, 37, 236, - 67, 247, 130, 37, 236, 67, 214, 37, 236, 191, 37, 238, 229, 37, 244, 90, - 37, 238, 201, 37, 236, 159, 37, 246, 48, 37, 226, 177, 37, 236, 67, 149, - 37, 236, 110, 37, 249, 171, 37, 238, 161, 37, 247, 9, 37, 235, 20, 37, - 236, 67, 185, 37, 236, 107, 37, 251, 69, 37, 238, 155, 37, 236, 108, 228, - 118, 37, 251, 70, 228, 118, 37, 237, 69, 228, 118, 37, 238, 156, 228, - 118, 37, 236, 108, 250, 231, 37, 251, 70, 250, 231, 37, 237, 69, 250, - 231, 37, 238, 156, 250, 231, 37, 237, 69, 107, 193, 37, 237, 69, 107, - 231, 35, 228, 118, 37, 213, 37, 238, 126, 37, 236, 69, 37, 245, 248, 37, - 232, 18, 37, 232, 19, 107, 193, 37, 232, 19, 107, 231, 35, 228, 118, 37, - 232, 184, 37, 234, 207, 37, 236, 67, 193, 37, 236, 68, 37, 232, 158, 37, - 234, 179, 37, 236, 67, 196, 37, 236, 22, 37, 238, 81, 37, 236, 23, 236, - 221, 37, 232, 157, 37, 234, 178, 37, 236, 67, 224, 174, 37, 236, 20, 37, - 238, 79, 37, 236, 21, 236, 221, 37, 239, 77, 234, 81, 37, 237, 69, 234, - 81, 37, 254, 199, 37, 252, 117, 37, 251, 247, 37, 251, 232, 37, 252, 45, - 107, 238, 229, 37, 251, 68, 37, 250, 118, 37, 245, 183, 37, 154, 37, 244, - 151, 37, 240, 16, 37, 238, 168, 37, 238, 156, 252, 15, 37, 238, 109, 37, - 237, 146, 37, 237, 145, 37, 237, 139, 37, 237, 81, 37, 236, 250, 228, - 184, 37, 236, 132, 37, 236, 96, 37, 233, 98, 37, 233, 7, 37, 232, 229, - 37, 232, 228, 37, 228, 112, 37, 227, 202, 37, 224, 142, 37, 225, 65, 107, - 185, 37, 102, 107, 185, 90, 167, 14, 32, 250, 121, 118, 90, 167, 14, 32, - 250, 121, 113, 90, 167, 14, 32, 250, 121, 166, 90, 167, 14, 32, 250, 121, - 158, 90, 167, 14, 32, 250, 121, 173, 90, 167, 14, 32, 250, 121, 183, 90, - 167, 14, 32, 250, 121, 194, 90, 167, 14, 32, 250, 121, 187, 90, 167, 14, - 32, 250, 121, 192, 90, 167, 14, 32, 250, 121, 227, 23, 90, 167, 14, 32, - 250, 121, 247, 252, 90, 167, 14, 32, 250, 121, 225, 218, 90, 167, 14, 32, - 250, 121, 226, 209, 90, 167, 14, 32, 250, 121, 246, 238, 90, 167, 14, 32, - 250, 121, 247, 67, 90, 167, 14, 32, 250, 121, 228, 212, 90, 167, 14, 32, - 250, 121, 229, 161, 90, 167, 14, 32, 250, 121, 248, 18, 90, 167, 14, 32, - 250, 121, 235, 59, 90, 167, 14, 32, 250, 121, 225, 216, 90, 167, 14, 32, - 250, 121, 225, 210, 90, 167, 14, 32, 250, 121, 225, 206, 90, 167, 14, 32, - 250, 121, 225, 207, 90, 167, 14, 32, 250, 121, 225, 212, 90, 167, 14, 32, - 250, 121, 225, 213, 90, 167, 14, 32, 250, 121, 225, 208, 90, 167, 14, 32, - 250, 121, 225, 209, 90, 167, 14, 32, 250, 121, 225, 215, 90, 167, 14, 32, - 250, 121, 225, 211, 90, 167, 14, 32, 250, 121, 226, 207, 90, 167, 14, 32, - 250, 121, 226, 206, 37, 246, 177, 181, 32, 226, 240, 250, 251, 245, 112, - 181, 32, 226, 240, 231, 241, 248, 48, 181, 32, 249, 234, 254, 63, 226, - 240, 252, 225, 181, 32, 223, 168, 247, 5, 181, 32, 224, 168, 181, 32, - 251, 41, 181, 32, 226, 240, 254, 103, 181, 32, 244, 222, 226, 121, 181, - 32, 3, 227, 74, 181, 32, 226, 88, 181, 32, 233, 149, 181, 32, 228, 60, - 181, 32, 247, 84, 181, 32, 245, 233, 232, 238, 181, 32, 236, 99, 181, 32, - 247, 219, 181, 32, 247, 6, 181, 32, 224, 90, 234, 62, 226, 240, 250, 73, - 181, 32, 254, 140, 181, 32, 251, 25, 181, 32, 252, 156, 226, 187, 181, - 32, 245, 246, 181, 32, 228, 130, 254, 155, 181, 32, 231, 194, 181, 32, - 239, 246, 181, 32, 245, 233, 227, 74, 181, 32, 236, 73, 251, 9, 181, 32, - 245, 233, 232, 210, 181, 32, 226, 240, 255, 45, 224, 151, 181, 32, 226, - 240, 251, 86, 247, 46, 181, 32, 240, 2, 181, 32, 248, 86, 181, 32, 231, - 197, 181, 32, 245, 233, 232, 233, 181, 32, 232, 198, 181, 32, 250, 135, - 106, 226, 240, 237, 184, 181, 32, 226, 240, 247, 112, 181, 32, 234, 34, - 181, 32, 234, 93, 181, 32, 250, 51, 181, 32, 250, 69, 181, 32, 240, 12, - 181, 32, 252, 109, 181, 32, 251, 56, 180, 236, 223, 181, 32, 246, 152, - 226, 121, 181, 32, 232, 161, 225, 107, 181, 32, 234, 33, 181, 32, 226, - 240, 224, 135, 181, 32, 231, 189, 181, 32, 226, 240, 251, 253, 181, 32, - 226, 240, 254, 99, 226, 185, 181, 32, 226, 240, 239, 0, 228, 43, 236, 74, - 181, 32, 250, 29, 181, 32, 226, 240, 237, 11, 237, 48, 181, 32, 255, 46, - 181, 32, 226, 240, 224, 163, 181, 32, 226, 240, 246, 118, 224, 111, 181, - 32, 226, 240, 239, 102, 238, 24, 181, 32, 249, 193, 181, 32, 237, 177, - 181, 32, 239, 249, 226, 48, 181, 32, 3, 232, 210, 181, 32, 255, 9, 251, - 48, 181, 32, 252, 227, 251, 48, 8, 4, 239, 195, 8, 4, 239, 189, 8, 4, 74, - 8, 4, 239, 212, 8, 4, 240, 70, 8, 4, 240, 55, 8, 4, 240, 72, 8, 4, 240, - 71, 8, 4, 254, 62, 8, 4, 254, 36, 8, 4, 57, 8, 4, 254, 157, 8, 4, 225, - 117, 8, 4, 225, 120, 8, 4, 225, 118, 8, 4, 234, 19, 8, 4, 233, 253, 8, 4, - 73, 8, 4, 234, 45, 8, 4, 247, 152, 8, 4, 72, 8, 4, 224, 83, 8, 4, 252, - 157, 8, 4, 252, 154, 8, 4, 252, 181, 8, 4, 252, 165, 8, 4, 252, 175, 8, - 4, 252, 174, 8, 4, 252, 177, 8, 4, 252, 176, 8, 4, 253, 21, 8, 4, 253, - 18, 8, 4, 253, 70, 8, 4, 253, 37, 8, 4, 252, 73, 8, 4, 252, 77, 8, 4, - 252, 74, 8, 4, 252, 127, 8, 4, 252, 118, 8, 4, 252, 138, 8, 4, 252, 129, - 8, 4, 252, 193, 8, 4, 252, 238, 8, 4, 252, 205, 8, 4, 252, 63, 8, 4, 252, - 61, 8, 4, 252, 90, 8, 4, 252, 72, 8, 4, 252, 66, 8, 4, 252, 70, 8, 4, - 252, 49, 8, 4, 252, 48, 8, 4, 252, 54, 8, 4, 252, 52, 8, 4, 252, 50, 8, - 4, 252, 51, 8, 4, 233, 30, 8, 4, 233, 26, 8, 4, 233, 69, 8, 4, 233, 35, - 8, 4, 233, 44, 8, 4, 233, 64, 8, 4, 233, 62, 8, 4, 233, 167, 8, 4, 233, - 158, 8, 4, 213, 8, 4, 233, 197, 8, 4, 232, 166, 8, 4, 232, 168, 8, 4, - 232, 167, 8, 4, 232, 235, 8, 4, 232, 231, 8, 4, 233, 4, 8, 4, 232, 242, - 8, 4, 232, 160, 8, 4, 232, 159, 8, 4, 232, 173, 8, 4, 232, 165, 8, 4, - 232, 162, 8, 4, 232, 164, 8, 4, 232, 143, 8, 4, 232, 142, 8, 4, 232, 147, - 8, 4, 232, 146, 8, 4, 232, 144, 8, 4, 232, 145, 8, 4, 253, 3, 8, 4, 253, - 2, 8, 4, 253, 9, 8, 4, 253, 4, 8, 4, 253, 6, 8, 4, 253, 5, 8, 4, 253, 8, - 8, 4, 253, 7, 8, 4, 253, 14, 8, 4, 253, 13, 8, 4, 253, 16, 8, 4, 253, 15, - 8, 4, 252, 250, 8, 4, 252, 252, 8, 4, 252, 251, 8, 4, 252, 255, 8, 4, - 252, 254, 8, 4, 253, 1, 8, 4, 253, 0, 8, 4, 253, 10, 8, 4, 253, 12, 8, 4, - 253, 11, 8, 4, 252, 246, 8, 4, 252, 245, 8, 4, 252, 253, 8, 4, 252, 249, - 8, 4, 252, 247, 8, 4, 252, 248, 8, 4, 252, 242, 8, 4, 252, 241, 8, 4, - 252, 244, 8, 4, 252, 243, 8, 4, 235, 208, 8, 4, 235, 207, 8, 4, 235, 213, - 8, 4, 235, 209, 8, 4, 235, 210, 8, 4, 235, 212, 8, 4, 235, 211, 8, 4, - 235, 215, 8, 4, 235, 214, 8, 4, 235, 217, 8, 4, 235, 216, 8, 4, 235, 204, - 8, 4, 235, 203, 8, 4, 235, 206, 8, 4, 235, 205, 8, 4, 235, 198, 8, 4, - 235, 197, 8, 4, 235, 202, 8, 4, 235, 201, 8, 4, 235, 199, 8, 4, 235, 200, - 8, 4, 235, 192, 8, 4, 235, 191, 8, 4, 235, 196, 8, 4, 235, 195, 8, 4, - 235, 193, 8, 4, 235, 194, 8, 4, 245, 13, 8, 4, 245, 12, 8, 4, 245, 18, 8, - 4, 245, 14, 8, 4, 245, 15, 8, 4, 245, 17, 8, 4, 245, 16, 8, 4, 245, 20, - 8, 4, 245, 19, 8, 4, 245, 22, 8, 4, 245, 21, 8, 4, 245, 4, 8, 4, 245, 6, - 8, 4, 245, 5, 8, 4, 245, 9, 8, 4, 245, 8, 8, 4, 245, 11, 8, 4, 245, 10, - 8, 4, 245, 0, 8, 4, 244, 255, 8, 4, 245, 7, 8, 4, 245, 3, 8, 4, 245, 1, - 8, 4, 245, 2, 8, 4, 244, 250, 8, 4, 244, 254, 8, 4, 244, 253, 8, 4, 244, - 251, 8, 4, 244, 252, 8, 4, 236, 112, 8, 4, 236, 111, 8, 4, 236, 157, 8, - 4, 236, 117, 8, 4, 236, 139, 8, 4, 236, 151, 8, 4, 236, 150, 8, 4, 237, - 2, 8, 4, 236, 254, 8, 4, 198, 8, 4, 237, 28, 8, 4, 236, 43, 8, 4, 236, - 42, 8, 4, 236, 45, 8, 4, 236, 44, 8, 4, 236, 78, 8, 4, 236, 70, 8, 4, - 236, 103, 8, 4, 236, 82, 8, 4, 236, 193, 8, 4, 236, 235, 8, 4, 236, 27, - 8, 4, 236, 24, 8, 4, 236, 66, 8, 4, 236, 39, 8, 4, 236, 34, 8, 4, 236, - 37, 8, 4, 236, 7, 8, 4, 236, 6, 8, 4, 236, 11, 8, 4, 236, 9, 8, 4, 247, - 39, 8, 4, 247, 35, 8, 4, 247, 70, 8, 4, 247, 47, 8, 4, 247, 106, 8, 4, - 247, 100, 8, 4, 247, 129, 8, 4, 247, 108, 8, 4, 246, 236, 8, 4, 247, 7, - 8, 4, 246, 255, 8, 4, 246, 208, 8, 4, 246, 207, 8, 4, 246, 219, 8, 4, - 246, 213, 8, 4, 246, 211, 8, 4, 246, 212, 8, 4, 246, 198, 8, 4, 246, 197, - 8, 4, 246, 201, 8, 4, 246, 199, 8, 4, 224, 208, 8, 4, 224, 207, 8, 4, - 224, 228, 8, 4, 224, 217, 8, 4, 224, 223, 8, 4, 224, 221, 8, 4, 224, 225, - 8, 4, 224, 224, 8, 4, 225, 49, 8, 4, 225, 45, 8, 4, 225, 64, 8, 4, 225, - 59, 8, 4, 224, 196, 8, 4, 224, 192, 8, 4, 224, 206, 8, 4, 224, 197, 8, 4, - 224, 229, 8, 4, 225, 34, 8, 4, 224, 185, 8, 4, 224, 184, 8, 4, 224, 190, - 8, 4, 224, 188, 8, 4, 224, 186, 8, 4, 224, 187, 8, 4, 224, 178, 8, 4, - 224, 177, 8, 4, 224, 182, 8, 4, 224, 181, 8, 4, 224, 179, 8, 4, 224, 180, - 8, 4, 249, 190, 8, 4, 249, 178, 8, 4, 250, 4, 8, 4, 249, 207, 8, 4, 249, - 239, 8, 4, 249, 243, 8, 4, 249, 242, 8, 4, 250, 127, 8, 4, 250, 122, 8, - 4, 250, 189, 8, 4, 250, 146, 8, 4, 248, 91, 8, 4, 248, 92, 8, 4, 249, - 140, 8, 4, 248, 123, 8, 4, 249, 161, 8, 4, 249, 142, 8, 4, 250, 27, 8, 4, - 250, 77, 8, 4, 250, 39, 8, 4, 248, 84, 8, 4, 248, 82, 8, 4, 248, 107, 8, - 4, 248, 90, 8, 4, 248, 85, 8, 4, 248, 88, 8, 4, 226, 144, 8, 4, 226, 140, - 8, 4, 226, 175, 8, 4, 226, 150, 8, 4, 226, 168, 8, 4, 226, 170, 8, 4, - 226, 169, 8, 4, 227, 66, 8, 4, 227, 53, 8, 4, 227, 107, 8, 4, 227, 70, 8, - 4, 225, 240, 8, 4, 225, 239, 8, 4, 225, 242, 8, 4, 225, 241, 8, 4, 226, - 99, 8, 4, 226, 97, 8, 4, 96, 8, 4, 226, 105, 8, 4, 227, 0, 8, 4, 227, 44, - 8, 4, 227, 17, 8, 4, 225, 228, 8, 4, 225, 225, 8, 4, 225, 250, 8, 4, 225, - 238, 8, 4, 225, 229, 8, 4, 225, 236, 8, 4, 250, 94, 8, 4, 250, 93, 8, 4, - 250, 99, 8, 4, 250, 95, 8, 4, 250, 96, 8, 4, 250, 98, 8, 4, 250, 97, 8, - 4, 250, 110, 8, 4, 250, 109, 8, 4, 250, 117, 8, 4, 250, 111, 8, 4, 250, - 84, 8, 4, 250, 86, 8, 4, 250, 85, 8, 4, 250, 89, 8, 4, 250, 88, 8, 4, - 250, 92, 8, 4, 250, 90, 8, 4, 250, 102, 8, 4, 250, 105, 8, 4, 250, 103, - 8, 4, 250, 80, 8, 4, 250, 79, 8, 4, 250, 87, 8, 4, 250, 83, 8, 4, 250, - 81, 8, 4, 250, 82, 8, 4, 235, 177, 8, 4, 235, 176, 8, 4, 235, 181, 8, 4, - 235, 178, 8, 4, 235, 179, 8, 4, 235, 180, 8, 4, 235, 187, 8, 4, 235, 186, - 8, 4, 235, 189, 8, 4, 235, 188, 8, 4, 235, 171, 8, 4, 235, 170, 8, 4, - 235, 175, 8, 4, 235, 172, 8, 4, 235, 182, 8, 4, 235, 185, 8, 4, 235, 183, - 8, 4, 235, 165, 8, 4, 235, 164, 8, 4, 235, 169, 8, 4, 235, 168, 8, 4, - 235, 166, 8, 4, 235, 167, 8, 4, 244, 236, 8, 4, 244, 235, 8, 4, 244, 242, - 8, 4, 244, 237, 8, 4, 244, 239, 8, 4, 244, 238, 8, 4, 244, 241, 8, 4, - 244, 240, 8, 4, 244, 247, 8, 4, 244, 246, 8, 4, 244, 249, 8, 4, 244, 248, - 8, 4, 244, 230, 8, 4, 244, 231, 8, 4, 244, 233, 8, 4, 244, 232, 8, 4, - 244, 234, 8, 4, 244, 243, 8, 4, 244, 245, 8, 4, 244, 244, 8, 4, 244, 229, - 8, 4, 235, 52, 8, 4, 235, 51, 8, 4, 235, 89, 8, 4, 235, 55, 8, 4, 235, - 73, 8, 4, 235, 85, 8, 4, 235, 84, 8, 4, 235, 220, 8, 4, 236, 1, 8, 4, - 235, 231, 8, 4, 234, 187, 8, 4, 234, 189, 8, 4, 234, 188, 8, 4, 234, 242, - 8, 4, 234, 231, 8, 4, 235, 6, 8, 4, 234, 249, 8, 4, 235, 143, 8, 4, 235, - 162, 8, 4, 235, 151, 8, 4, 234, 183, 8, 4, 234, 180, 8, 4, 234, 206, 8, - 4, 234, 186, 8, 4, 234, 184, 8, 4, 234, 185, 8, 4, 245, 42, 8, 4, 245, - 41, 8, 4, 245, 47, 8, 4, 245, 43, 8, 4, 245, 44, 8, 4, 245, 46, 8, 4, - 245, 45, 8, 4, 245, 52, 8, 4, 245, 51, 8, 4, 245, 54, 8, 4, 245, 53, 8, - 4, 245, 34, 8, 4, 245, 36, 8, 4, 245, 35, 8, 4, 245, 38, 8, 4, 245, 40, - 8, 4, 245, 39, 8, 4, 245, 48, 8, 4, 245, 50, 8, 4, 245, 49, 8, 4, 245, - 30, 8, 4, 245, 29, 8, 4, 245, 37, 8, 4, 245, 33, 8, 4, 245, 31, 8, 4, - 245, 32, 8, 4, 245, 24, 8, 4, 245, 23, 8, 4, 245, 28, 8, 4, 245, 27, 8, - 4, 245, 25, 8, 4, 245, 26, 8, 4, 237, 157, 8, 4, 237, 153, 8, 4, 237, - 193, 8, 4, 237, 161, 8, 4, 237, 187, 8, 4, 237, 186, 8, 4, 237, 189, 8, - 4, 237, 188, 8, 4, 238, 4, 8, 4, 237, 252, 8, 4, 238, 43, 8, 4, 238, 10, - 8, 4, 237, 96, 8, 4, 237, 95, 8, 4, 237, 98, 8, 4, 237, 97, 8, 4, 237, - 120, 8, 4, 237, 115, 8, 4, 237, 143, 8, 4, 237, 122, 8, 4, 237, 208, 8, - 4, 237, 243, 8, 4, 237, 215, 8, 4, 237, 91, 8, 4, 237, 90, 8, 4, 237, - 110, 8, 4, 237, 94, 8, 4, 237, 92, 8, 4, 237, 93, 8, 4, 237, 73, 8, 4, - 237, 72, 8, 4, 237, 80, 8, 4, 237, 76, 8, 4, 237, 74, 8, 4, 237, 75, 8, - 4, 246, 23, 8, 4, 246, 22, 8, 4, 246, 46, 8, 4, 246, 32, 8, 4, 246, 39, - 8, 4, 246, 38, 8, 4, 246, 41, 8, 4, 246, 40, 8, 4, 246, 154, 8, 4, 246, - 149, 8, 4, 246, 193, 8, 4, 246, 163, 8, 4, 245, 201, 8, 4, 245, 200, 8, - 4, 245, 203, 8, 4, 245, 202, 8, 4, 245, 251, 8, 4, 245, 249, 8, 4, 246, - 11, 8, 4, 246, 3, 8, 4, 246, 105, 8, 4, 246, 103, 8, 4, 246, 131, 8, 4, - 246, 115, 8, 4, 245, 191, 8, 4, 245, 190, 8, 4, 245, 218, 8, 4, 245, 199, - 8, 4, 245, 192, 8, 4, 245, 198, 8, 4, 238, 176, 8, 4, 238, 175, 8, 4, - 238, 199, 8, 4, 238, 186, 8, 4, 238, 193, 8, 4, 238, 195, 8, 4, 238, 194, - 8, 4, 239, 20, 8, 4, 239, 11, 8, 4, 177, 8, 4, 239, 41, 8, 4, 238, 94, 8, - 4, 238, 96, 8, 4, 238, 95, 8, 4, 238, 130, 8, 4, 238, 127, 8, 4, 238, - 150, 8, 4, 238, 136, 8, 4, 238, 236, 8, 4, 238, 234, 8, 4, 239, 3, 8, 4, - 238, 238, 8, 4, 238, 84, 8, 4, 238, 82, 8, 4, 238, 107, 8, 4, 238, 93, 8, - 4, 238, 87, 8, 4, 238, 91, 8, 4, 246, 87, 8, 4, 246, 86, 8, 4, 246, 91, - 8, 4, 246, 88, 8, 4, 246, 90, 8, 4, 246, 89, 8, 4, 246, 98, 8, 4, 246, - 97, 8, 4, 246, 101, 8, 4, 246, 99, 8, 4, 246, 78, 8, 4, 246, 77, 8, 4, - 246, 80, 8, 4, 246, 79, 8, 4, 246, 83, 8, 4, 246, 82, 8, 4, 246, 85, 8, - 4, 246, 84, 8, 4, 246, 93, 8, 4, 246, 92, 8, 4, 246, 96, 8, 4, 246, 94, - 8, 4, 246, 73, 8, 4, 246, 72, 8, 4, 246, 81, 8, 4, 246, 76, 8, 4, 246, - 74, 8, 4, 246, 75, 8, 4, 236, 175, 8, 4, 236, 176, 8, 4, 236, 188, 8, 4, - 236, 187, 8, 4, 236, 190, 8, 4, 236, 189, 8, 4, 236, 166, 8, 4, 236, 168, - 8, 4, 236, 167, 8, 4, 236, 171, 8, 4, 236, 170, 8, 4, 236, 173, 8, 4, - 236, 172, 8, 4, 236, 177, 8, 4, 236, 179, 8, 4, 236, 178, 8, 4, 236, 162, - 8, 4, 236, 161, 8, 4, 236, 169, 8, 4, 236, 165, 8, 4, 236, 163, 8, 4, - 236, 164, 8, 4, 244, 107, 8, 4, 244, 106, 8, 4, 244, 113, 8, 4, 244, 108, - 8, 4, 244, 110, 8, 4, 244, 109, 8, 4, 244, 112, 8, 4, 244, 111, 8, 4, - 244, 118, 8, 4, 244, 117, 8, 4, 244, 120, 8, 4, 244, 119, 8, 4, 244, 99, - 8, 4, 244, 98, 8, 4, 244, 101, 8, 4, 244, 100, 8, 4, 244, 103, 8, 4, 244, - 102, 8, 4, 244, 105, 8, 4, 244, 104, 8, 4, 244, 114, 8, 4, 244, 116, 8, - 4, 244, 115, 8, 4, 235, 111, 8, 4, 235, 113, 8, 4, 235, 112, 8, 4, 235, - 130, 8, 4, 235, 129, 8, 4, 235, 137, 8, 4, 235, 132, 8, 4, 235, 96, 8, 4, - 235, 95, 8, 4, 235, 97, 8, 4, 235, 101, 8, 4, 235, 100, 8, 4, 235, 107, - 8, 4, 235, 102, 8, 4, 235, 124, 8, 4, 235, 128, 8, 4, 235, 125, 8, 4, - 245, 57, 8, 4, 245, 64, 8, 4, 245, 71, 8, 4, 245, 132, 8, 4, 245, 126, 8, - 4, 154, 8, 4, 245, 142, 8, 4, 244, 131, 8, 4, 244, 130, 8, 4, 244, 133, - 8, 4, 244, 132, 8, 4, 244, 157, 8, 4, 244, 152, 8, 4, 244, 227, 8, 4, - 244, 214, 8, 4, 245, 87, 8, 4, 245, 121, 8, 4, 245, 97, 8, 4, 224, 154, - 8, 4, 224, 143, 8, 4, 224, 173, 8, 4, 224, 162, 8, 4, 224, 78, 8, 4, 224, - 80, 8, 4, 224, 79, 8, 4, 224, 88, 8, 4, 224, 105, 8, 4, 224, 93, 8, 4, - 224, 128, 8, 4, 224, 141, 8, 4, 224, 132, 8, 4, 223, 34, 8, 4, 223, 33, - 8, 4, 223, 47, 8, 4, 223, 35, 8, 4, 223, 40, 8, 4, 223, 42, 8, 4, 223, - 41, 8, 4, 223, 104, 8, 4, 223, 101, 8, 4, 223, 117, 8, 4, 223, 107, 8, 4, - 223, 12, 8, 4, 223, 14, 8, 4, 223, 13, 8, 4, 223, 23, 8, 4, 223, 22, 8, - 4, 223, 27, 8, 4, 223, 24, 8, 4, 223, 87, 8, 4, 223, 97, 8, 4, 223, 91, - 8, 4, 223, 8, 8, 4, 223, 7, 8, 4, 223, 19, 8, 4, 223, 11, 8, 4, 223, 9, - 8, 4, 223, 10, 8, 4, 222, 255, 8, 4, 222, 254, 8, 4, 223, 4, 8, 4, 223, - 2, 8, 4, 223, 0, 8, 4, 223, 1, 8, 4, 251, 100, 8, 4, 251, 97, 8, 4, 251, - 118, 8, 4, 251, 108, 8, 4, 251, 115, 8, 4, 251, 111, 8, 4, 251, 117, 8, - 4, 251, 116, 8, 4, 252, 0, 8, 4, 251, 250, 8, 4, 252, 39, 8, 4, 252, 16, - 8, 4, 250, 227, 8, 4, 250, 229, 8, 4, 250, 228, 8, 4, 251, 3, 8, 4, 250, - 252, 8, 4, 251, 68, 8, 4, 251, 16, 8, 4, 251, 206, 8, 4, 251, 231, 8, 4, - 251, 209, 8, 4, 250, 212, 8, 4, 250, 211, 8, 4, 250, 235, 8, 4, 250, 226, - 8, 4, 250, 215, 8, 4, 250, 225, 8, 4, 250, 194, 8, 4, 250, 193, 8, 4, - 250, 202, 8, 4, 250, 199, 8, 4, 250, 195, 8, 4, 250, 197, 8, 4, 222, 238, - 8, 4, 222, 237, 8, 4, 222, 244, 8, 4, 222, 239, 8, 4, 222, 241, 8, 4, - 222, 240, 8, 4, 222, 243, 8, 4, 222, 242, 8, 4, 222, 250, 8, 4, 222, 249, - 8, 4, 222, 253, 8, 4, 222, 251, 8, 4, 222, 234, 8, 4, 222, 236, 8, 4, - 222, 235, 8, 4, 222, 245, 8, 4, 222, 248, 8, 4, 222, 246, 8, 4, 222, 229, - 8, 4, 222, 233, 8, 4, 222, 232, 8, 4, 222, 230, 8, 4, 222, 231, 8, 4, - 222, 224, 8, 4, 222, 223, 8, 4, 222, 228, 8, 4, 222, 227, 8, 4, 222, 225, - 8, 4, 222, 226, 8, 4, 234, 127, 8, 4, 234, 126, 8, 4, 234, 132, 8, 4, - 234, 128, 8, 4, 234, 129, 8, 4, 234, 131, 8, 4, 234, 130, 8, 4, 234, 136, - 8, 4, 234, 135, 8, 4, 234, 138, 8, 4, 234, 137, 8, 4, 234, 121, 8, 4, - 234, 122, 8, 4, 234, 124, 8, 4, 234, 125, 8, 4, 234, 133, 8, 4, 234, 134, - 8, 4, 234, 117, 8, 4, 234, 123, 8, 4, 234, 120, 8, 4, 234, 118, 8, 4, - 234, 119, 8, 4, 234, 112, 8, 4, 234, 111, 8, 4, 234, 116, 8, 4, 234, 115, - 8, 4, 234, 113, 8, 4, 234, 114, 8, 4, 228, 218, 8, 4, 183, 8, 4, 229, 15, - 8, 4, 228, 220, 8, 4, 229, 8, 8, 4, 229, 10, 8, 4, 229, 9, 8, 4, 230, - 240, 8, 4, 230, 236, 8, 4, 231, 31, 8, 4, 230, 246, 8, 4, 227, 223, 8, 4, - 227, 225, 8, 4, 227, 224, 8, 4, 228, 157, 8, 4, 228, 148, 8, 4, 228, 169, - 8, 4, 228, 158, 8, 4, 229, 157, 8, 4, 230, 213, 8, 4, 229, 175, 8, 4, - 227, 204, 8, 4, 227, 203, 8, 4, 228, 6, 8, 4, 227, 222, 8, 4, 227, 206, - 8, 4, 227, 213, 8, 4, 227, 123, 8, 4, 227, 122, 8, 4, 227, 185, 8, 4, - 227, 128, 8, 4, 227, 124, 8, 4, 227, 127, 8, 4, 228, 86, 8, 4, 228, 85, - 8, 4, 228, 91, 8, 4, 228, 87, 8, 4, 228, 88, 8, 4, 228, 90, 8, 4, 228, - 89, 8, 4, 228, 97, 8, 4, 228, 96, 8, 4, 228, 110, 8, 4, 228, 98, 8, 4, - 228, 82, 8, 4, 228, 81, 8, 4, 228, 84, 8, 4, 228, 83, 8, 4, 228, 92, 8, - 4, 228, 95, 8, 4, 228, 93, 8, 4, 228, 78, 8, 4, 228, 77, 8, 4, 228, 80, - 8, 4, 228, 79, 8, 4, 228, 72, 8, 4, 228, 71, 8, 4, 228, 76, 8, 4, 228, - 75, 8, 4, 228, 73, 8, 4, 228, 74, 8, 4, 223, 80, 8, 4, 223, 79, 8, 4, - 223, 85, 8, 4, 223, 82, 8, 4, 223, 62, 8, 4, 223, 64, 8, 4, 223, 63, 8, - 4, 223, 67, 8, 4, 223, 66, 8, 4, 223, 70, 8, 4, 223, 68, 8, 4, 223, 74, - 8, 4, 223, 73, 8, 4, 223, 77, 8, 4, 223, 75, 8, 4, 223, 58, 8, 4, 223, - 57, 8, 4, 223, 65, 8, 4, 223, 61, 8, 4, 223, 59, 8, 4, 223, 60, 8, 4, - 223, 50, 8, 4, 223, 49, 8, 4, 223, 54, 8, 4, 223, 53, 8, 4, 223, 51, 8, - 4, 223, 52, 8, 4, 251, 187, 8, 4, 251, 184, 8, 4, 251, 204, 8, 4, 251, - 193, 8, 4, 251, 132, 8, 4, 251, 131, 8, 4, 251, 134, 8, 4, 251, 133, 8, - 4, 251, 144, 8, 4, 251, 143, 8, 4, 251, 150, 8, 4, 251, 146, 8, 4, 251, - 174, 8, 4, 251, 172, 8, 4, 251, 182, 8, 4, 251, 176, 8, 4, 251, 126, 8, - 4, 251, 136, 8, 4, 251, 130, 8, 4, 251, 127, 8, 4, 251, 129, 8, 4, 251, - 120, 8, 4, 251, 119, 8, 4, 251, 124, 8, 4, 251, 123, 8, 4, 251, 121, 8, - 4, 251, 122, 8, 4, 231, 98, 8, 4, 231, 99, 8, 4, 231, 85, 8, 4, 231, 86, - 8, 4, 231, 89, 8, 4, 231, 88, 8, 4, 231, 91, 8, 4, 231, 90, 8, 4, 231, - 93, 8, 4, 231, 92, 8, 4, 231, 97, 8, 4, 231, 94, 8, 4, 231, 81, 8, 4, - 231, 80, 8, 4, 231, 87, 8, 4, 231, 84, 8, 4, 231, 82, 8, 4, 231, 83, 8, - 4, 231, 75, 8, 4, 231, 74, 8, 4, 231, 79, 8, 4, 231, 78, 8, 4, 231, 76, - 8, 4, 231, 77, 8, 4, 234, 228, 8, 4, 234, 227, 8, 4, 234, 230, 8, 4, 234, - 229, 8, 4, 234, 220, 8, 4, 234, 222, 8, 4, 234, 221, 8, 4, 234, 224, 8, - 4, 234, 223, 8, 4, 234, 226, 8, 4, 234, 225, 8, 4, 234, 215, 8, 4, 234, - 214, 8, 4, 234, 219, 8, 4, 234, 218, 8, 4, 234, 216, 8, 4, 234, 217, 8, - 4, 234, 209, 8, 4, 234, 208, 8, 4, 234, 213, 8, 4, 234, 212, 8, 4, 234, - 210, 8, 4, 234, 211, 8, 4, 229, 120, 8, 4, 229, 117, 8, 4, 229, 146, 8, - 4, 229, 129, 8, 4, 229, 36, 8, 4, 229, 38, 8, 4, 229, 37, 8, 4, 229, 49, - 8, 4, 229, 47, 8, 4, 229, 71, 8, 4, 229, 64, 8, 4, 229, 94, 8, 4, 229, - 92, 8, 4, 229, 114, 8, 4, 229, 101, 8, 4, 229, 32, 8, 4, 229, 31, 8, 4, - 229, 43, 8, 4, 229, 35, 8, 4, 229, 33, 8, 4, 229, 34, 8, 4, 229, 18, 8, - 4, 229, 17, 8, 4, 229, 23, 8, 4, 229, 21, 8, 4, 229, 19, 8, 4, 229, 20, - 8, 4, 231, 253, 8, 4, 231, 251, 8, 4, 208, 8, 4, 232, 1, 8, 4, 231, 56, - 8, 4, 231, 58, 8, 4, 231, 57, 8, 4, 231, 107, 8, 4, 231, 101, 8, 4, 231, - 122, 8, 4, 231, 110, 8, 4, 231, 188, 8, 4, 231, 244, 8, 4, 231, 215, 8, - 4, 231, 49, 8, 4, 231, 47, 8, 4, 231, 70, 8, 4, 231, 55, 8, 4, 231, 51, - 8, 4, 231, 52, 8, 4, 231, 38, 8, 4, 231, 37, 8, 4, 231, 43, 8, 4, 231, - 41, 8, 4, 231, 39, 8, 4, 231, 40, 8, 4, 239, 147, 8, 4, 239, 146, 8, 4, - 239, 156, 8, 4, 239, 148, 8, 4, 239, 152, 8, 4, 239, 151, 8, 4, 239, 154, - 8, 4, 239, 153, 8, 4, 239, 92, 8, 4, 239, 91, 8, 4, 239, 94, 8, 4, 239, - 93, 8, 4, 239, 105, 8, 4, 239, 104, 8, 4, 239, 117, 8, 4, 239, 107, 8, 4, - 239, 86, 8, 4, 239, 85, 8, 4, 239, 101, 8, 4, 239, 90, 8, 4, 239, 87, 8, - 4, 239, 88, 8, 4, 239, 79, 8, 4, 239, 78, 8, 4, 239, 83, 8, 4, 239, 82, - 8, 4, 239, 80, 8, 4, 239, 81, 8, 4, 232, 97, 8, 4, 232, 96, 8, 4, 232, - 104, 8, 4, 232, 98, 8, 4, 232, 101, 8, 4, 232, 100, 8, 4, 232, 103, 8, 4, - 232, 102, 8, 4, 232, 58, 8, 4, 232, 55, 8, 4, 232, 60, 8, 4, 232, 59, 8, - 4, 232, 87, 8, 4, 232, 86, 8, 4, 232, 95, 8, 4, 232, 89, 8, 4, 232, 50, - 8, 4, 232, 46, 8, 4, 232, 84, 8, 4, 232, 54, 8, 4, 232, 52, 8, 4, 232, - 53, 8, 4, 232, 30, 8, 4, 232, 28, 8, 4, 232, 40, 8, 4, 232, 33, 8, 4, - 232, 31, 8, 4, 232, 32, 8, 4, 239, 136, 8, 4, 239, 135, 8, 4, 239, 142, - 8, 4, 239, 137, 8, 4, 239, 139, 8, 4, 239, 138, 8, 4, 239, 141, 8, 4, - 239, 140, 8, 4, 239, 127, 8, 4, 239, 129, 8, 4, 239, 128, 8, 4, 239, 132, - 8, 4, 239, 131, 8, 4, 239, 134, 8, 4, 239, 133, 8, 4, 239, 123, 8, 4, - 239, 122, 8, 4, 239, 130, 8, 4, 239, 126, 8, 4, 239, 124, 8, 4, 239, 125, - 8, 4, 239, 119, 8, 4, 239, 118, 8, 4, 239, 121, 8, 4, 239, 120, 8, 4, - 235, 40, 8, 4, 235, 39, 8, 4, 235, 46, 8, 4, 235, 41, 8, 4, 235, 43, 8, - 4, 235, 42, 8, 4, 235, 45, 8, 4, 235, 44, 8, 4, 235, 31, 8, 4, 235, 32, - 8, 4, 235, 35, 8, 4, 235, 34, 8, 4, 235, 38, 8, 4, 235, 36, 8, 4, 235, - 27, 8, 4, 235, 33, 8, 4, 235, 30, 8, 4, 235, 28, 8, 4, 235, 29, 8, 4, - 235, 22, 8, 4, 235, 21, 8, 4, 235, 26, 8, 4, 235, 25, 8, 4, 235, 23, 8, - 4, 235, 24, 8, 4, 234, 155, 8, 4, 234, 154, 8, 4, 234, 163, 8, 4, 234, - 157, 8, 4, 234, 160, 8, 4, 234, 159, 8, 4, 234, 162, 8, 4, 234, 161, 8, - 4, 234, 143, 8, 4, 234, 145, 8, 4, 234, 144, 8, 4, 234, 148, 8, 4, 234, - 147, 8, 4, 234, 152, 8, 4, 234, 149, 8, 4, 234, 141, 8, 4, 234, 140, 8, - 4, 234, 146, 8, 4, 234, 142, 8, 4, 224, 57, 8, 4, 224, 56, 8, 4, 224, 64, - 8, 4, 224, 59, 8, 4, 224, 61, 8, 4, 224, 60, 8, 4, 224, 63, 8, 4, 224, - 62, 8, 4, 224, 46, 8, 4, 224, 47, 8, 4, 224, 51, 8, 4, 224, 50, 8, 4, - 224, 55, 8, 4, 224, 53, 8, 4, 224, 29, 8, 4, 224, 27, 8, 4, 224, 39, 8, - 4, 224, 32, 8, 4, 224, 30, 8, 4, 224, 31, 8, 4, 223, 189, 8, 4, 223, 187, - 8, 4, 223, 202, 8, 4, 223, 190, 8, 4, 223, 197, 8, 4, 223, 196, 8, 4, - 223, 199, 8, 4, 223, 198, 8, 4, 223, 145, 8, 4, 223, 144, 8, 4, 223, 147, - 8, 4, 223, 146, 8, 4, 223, 169, 8, 4, 223, 166, 8, 4, 223, 183, 8, 4, - 223, 171, 8, 4, 223, 138, 8, 4, 223, 136, 8, 4, 223, 158, 8, 4, 223, 143, - 8, 4, 223, 141, 8, 4, 223, 142, 8, 4, 223, 122, 8, 4, 223, 121, 8, 4, - 223, 127, 8, 4, 223, 125, 8, 4, 223, 123, 8, 4, 223, 124, 8, 29, 232, 87, - 8, 29, 237, 193, 8, 29, 238, 176, 8, 29, 234, 157, 8, 29, 250, 199, 8, - 29, 228, 91, 8, 29, 246, 84, 8, 29, 246, 115, 8, 29, 236, 157, 8, 29, - 244, 107, 8, 29, 237, 75, 8, 29, 252, 246, 8, 29, 236, 82, 8, 29, 223, - 183, 8, 29, 232, 160, 8, 29, 244, 101, 8, 29, 227, 66, 8, 29, 246, 193, - 8, 29, 223, 11, 8, 29, 250, 194, 8, 29, 250, 82, 8, 29, 252, 70, 8, 29, - 246, 80, 8, 29, 234, 149, 8, 29, 225, 250, 8, 29, 234, 45, 8, 29, 239, - 123, 8, 29, 223, 23, 8, 29, 232, 143, 8, 29, 245, 11, 8, 29, 223, 189, 8, - 29, 224, 187, 8, 29, 229, 23, 8, 29, 225, 34, 8, 29, 223, 117, 8, 29, - 239, 117, 8, 29, 234, 120, 8, 29, 239, 121, 8, 29, 245, 251, 8, 29, 239, - 141, 8, 29, 224, 105, 8, 29, 248, 107, 8, 29, 229, 34, 8, 29, 237, 189, - 8, 29, 250, 202, 8, 29, 250, 228, 8, 29, 251, 108, 8, 29, 244, 104, 8, - 29, 229, 120, 8, 29, 223, 10, 8, 29, 229, 64, 8, 29, 251, 182, 8, 29, - 222, 241, 8, 29, 235, 212, 8, 29, 239, 3, 34, 4, 248, 35, 34, 4, 248, 32, - 34, 4, 245, 109, 34, 4, 224, 138, 34, 4, 224, 137, 34, 4, 233, 144, 34, - 4, 252, 188, 34, 4, 252, 232, 34, 4, 236, 243, 34, 4, 238, 123, 34, 4, - 236, 184, 34, 4, 246, 141, 34, 4, 247, 92, 34, 4, 225, 38, 34, 4, 227, - 37, 34, 4, 226, 238, 34, 4, 250, 16, 34, 4, 250, 13, 34, 4, 237, 239, 34, - 4, 231, 229, 34, 4, 250, 67, 34, 4, 235, 184, 34, 4, 230, 203, 34, 4, - 229, 112, 34, 4, 223, 95, 34, 4, 223, 76, 34, 4, 251, 225, 34, 4, 239, - 169, 34, 4, 235, 47, 34, 4, 223, 225, 34, 4, 239, 2, 34, 4, 235, 120, 34, - 4, 246, 125, 34, 4, 236, 226, 34, 4, 235, 160, 34, 4, 234, 168, 34, 4, - 74, 34, 4, 240, 16, 34, 4, 245, 75, 34, 4, 245, 60, 34, 4, 224, 118, 34, - 4, 224, 112, 34, 4, 233, 69, 34, 4, 252, 186, 34, 4, 252, 181, 34, 4, - 236, 242, 34, 4, 238, 121, 34, 4, 236, 183, 34, 4, 246, 139, 34, 4, 247, - 70, 34, 4, 224, 228, 34, 4, 226, 175, 34, 4, 226, 220, 34, 4, 250, 8, 34, - 4, 250, 12, 34, 4, 237, 193, 34, 4, 231, 180, 34, 4, 250, 4, 34, 4, 235, - 181, 34, 4, 229, 15, 34, 4, 229, 90, 34, 4, 223, 47, 34, 4, 223, 72, 34, - 4, 251, 118, 34, 4, 239, 156, 34, 4, 235, 46, 34, 4, 223, 202, 34, 4, - 238, 199, 34, 4, 235, 118, 34, 4, 246, 46, 34, 4, 236, 157, 34, 4, 235, - 89, 34, 4, 234, 163, 34, 4, 57, 34, 4, 254, 190, 34, 4, 235, 133, 34, 4, - 154, 34, 4, 245, 148, 34, 4, 224, 173, 34, 4, 224, 164, 34, 4, 213, 34, - 4, 252, 190, 34, 4, 253, 70, 34, 4, 236, 245, 34, 4, 238, 126, 34, 4, - 238, 125, 34, 4, 236, 186, 34, 4, 246, 144, 34, 4, 247, 129, 34, 4, 225, - 64, 34, 4, 227, 107, 34, 4, 226, 251, 34, 4, 250, 22, 34, 4, 250, 15, 34, - 4, 238, 43, 34, 4, 208, 34, 4, 250, 189, 34, 4, 235, 189, 34, 4, 231, 31, - 34, 4, 229, 146, 34, 4, 223, 117, 34, 4, 223, 85, 34, 4, 252, 39, 34, 4, - 239, 179, 34, 4, 235, 49, 34, 4, 191, 34, 4, 177, 34, 4, 239, 46, 34, 4, - 235, 122, 34, 4, 246, 193, 34, 4, 198, 34, 4, 236, 1, 34, 4, 234, 173, - 34, 4, 234, 52, 34, 4, 234, 49, 34, 4, 244, 218, 34, 4, 224, 98, 34, 4, - 224, 94, 34, 4, 232, 244, 34, 4, 252, 184, 34, 4, 252, 131, 34, 4, 236, - 240, 34, 4, 238, 119, 34, 4, 236, 181, 34, 4, 246, 136, 34, 4, 247, 3, - 34, 4, 224, 198, 34, 4, 226, 108, 34, 4, 226, 198, 34, 4, 250, 6, 34, 4, - 250, 10, 34, 4, 237, 125, 34, 4, 231, 114, 34, 4, 249, 145, 34, 4, 235, - 173, 34, 4, 228, 159, 34, 4, 229, 66, 34, 4, 223, 25, 34, 4, 223, 69, 34, - 4, 251, 17, 34, 4, 239, 108, 34, 4, 235, 37, 34, 4, 223, 172, 34, 4, 238, - 139, 34, 4, 235, 116, 34, 4, 246, 4, 34, 4, 236, 86, 34, 4, 234, 253, 34, - 4, 234, 150, 34, 4, 66, 34, 4, 225, 138, 34, 4, 244, 145, 34, 4, 244, - 137, 34, 4, 224, 83, 34, 4, 224, 82, 34, 4, 232, 173, 34, 4, 252, 183, - 34, 4, 252, 90, 34, 4, 236, 239, 34, 4, 238, 118, 34, 4, 236, 180, 34, 4, - 246, 135, 34, 4, 246, 219, 34, 4, 224, 190, 34, 4, 225, 250, 34, 4, 226, - 186, 34, 4, 250, 5, 34, 4, 250, 9, 34, 4, 237, 110, 34, 4, 231, 70, 34, - 4, 248, 107, 34, 4, 235, 169, 34, 4, 228, 6, 34, 4, 229, 43, 34, 4, 223, - 19, 34, 4, 223, 65, 34, 4, 250, 235, 34, 4, 239, 101, 34, 4, 235, 33, 34, - 4, 223, 158, 34, 4, 238, 107, 34, 4, 235, 115, 34, 4, 245, 218, 34, 4, - 236, 66, 34, 4, 234, 206, 34, 4, 234, 146, 34, 4, 73, 34, 4, 234, 61, 34, - 4, 235, 104, 34, 4, 244, 227, 34, 4, 244, 219, 34, 4, 224, 105, 34, 4, - 224, 99, 34, 4, 233, 4, 34, 4, 252, 185, 34, 4, 252, 138, 34, 4, 236, - 241, 34, 4, 238, 120, 34, 4, 236, 182, 34, 4, 246, 138, 34, 4, 246, 137, - 34, 4, 247, 7, 34, 4, 224, 206, 34, 4, 96, 34, 4, 226, 201, 34, 4, 250, - 7, 34, 4, 250, 11, 34, 4, 237, 143, 34, 4, 231, 122, 34, 4, 249, 161, 34, - 4, 235, 175, 34, 4, 228, 169, 34, 4, 229, 71, 34, 4, 223, 27, 34, 4, 223, - 70, 34, 4, 251, 68, 34, 4, 239, 117, 34, 4, 235, 38, 34, 4, 223, 183, 34, - 4, 238, 150, 34, 4, 235, 117, 34, 4, 246, 11, 34, 4, 236, 103, 34, 4, - 235, 6, 34, 4, 234, 152, 34, 4, 72, 34, 4, 247, 239, 34, 4, 235, 126, 34, - 4, 245, 121, 34, 4, 245, 100, 34, 4, 224, 141, 34, 4, 224, 134, 34, 4, - 233, 151, 34, 4, 252, 189, 34, 4, 252, 238, 34, 4, 236, 244, 34, 4, 238, - 124, 34, 4, 238, 122, 34, 4, 236, 185, 34, 4, 246, 142, 34, 4, 246, 140, - 34, 4, 247, 97, 34, 4, 225, 42, 34, 4, 227, 44, 34, 4, 226, 239, 34, 4, - 250, 17, 34, 4, 250, 14, 34, 4, 237, 243, 34, 4, 231, 244, 34, 4, 250, - 77, 34, 4, 235, 185, 34, 4, 230, 213, 34, 4, 229, 114, 34, 4, 223, 97, - 34, 4, 223, 77, 34, 4, 251, 231, 34, 4, 239, 170, 34, 4, 235, 48, 34, 4, - 223, 228, 34, 4, 239, 3, 34, 4, 235, 121, 34, 4, 235, 119, 34, 4, 246, - 131, 34, 4, 246, 122, 34, 4, 236, 235, 34, 4, 235, 162, 34, 4, 234, 169, - 34, 4, 235, 139, 34, 4, 237, 218, 34, 251, 54, 34, 246, 218, 228, 38, 34, - 232, 69, 76, 34, 4, 235, 174, 247, 129, 34, 4, 235, 174, 177, 34, 4, 235, - 174, 228, 159, 34, 14, 247, 89, 34, 14, 239, 1, 34, 14, 226, 154, 34, 14, - 235, 68, 34, 14, 253, 40, 34, 14, 247, 128, 34, 14, 227, 104, 34, 14, - 250, 149, 34, 14, 249, 144, 34, 14, 238, 97, 34, 14, 226, 111, 34, 14, - 249, 160, 34, 14, 239, 109, 34, 21, 223, 89, 34, 21, 118, 34, 21, 113, - 34, 21, 166, 34, 21, 158, 34, 21, 173, 34, 21, 183, 34, 21, 194, 34, 21, - 187, 34, 21, 192, 34, 4, 235, 174, 198, 34, 4, 235, 174, 249, 161, 28, 6, - 1, 223, 93, 28, 3, 1, 223, 93, 28, 6, 1, 248, 67, 28, 3, 1, 248, 67, 28, - 6, 1, 200, 248, 69, 28, 3, 1, 200, 248, 69, 28, 6, 1, 239, 215, 28, 3, 1, - 239, 215, 28, 6, 1, 249, 175, 28, 3, 1, 249, 175, 28, 6, 1, 236, 90, 225, - 153, 28, 3, 1, 236, 90, 225, 153, 28, 6, 1, 252, 100, 234, 66, 28, 3, 1, - 252, 100, 234, 66, 28, 6, 1, 235, 145, 223, 217, 28, 3, 1, 235, 145, 223, - 217, 28, 6, 1, 223, 214, 2, 253, 67, 223, 217, 28, 3, 1, 223, 214, 2, - 253, 67, 223, 217, 28, 6, 1, 239, 213, 223, 239, 28, 3, 1, 239, 213, 223, - 239, 28, 6, 1, 200, 223, 158, 28, 3, 1, 200, 223, 158, 28, 6, 1, 239, - 213, 57, 28, 3, 1, 239, 213, 57, 28, 6, 1, 251, 82, 237, 155, 223, 139, - 28, 3, 1, 251, 82, 237, 155, 223, 139, 28, 6, 1, 252, 143, 223, 139, 28, - 3, 1, 252, 143, 223, 139, 28, 6, 1, 239, 213, 251, 82, 237, 155, 223, - 139, 28, 3, 1, 239, 213, 251, 82, 237, 155, 223, 139, 28, 6, 1, 223, 185, - 28, 3, 1, 223, 185, 28, 6, 1, 228, 165, 250, 77, 28, 3, 1, 228, 165, 250, - 77, 28, 6, 1, 228, 165, 248, 2, 28, 3, 1, 228, 165, 248, 2, 28, 6, 1, - 228, 165, 247, 247, 28, 3, 1, 228, 165, 247, 247, 28, 6, 1, 236, 94, 73, - 28, 3, 1, 236, 94, 73, 28, 6, 1, 252, 167, 73, 28, 3, 1, 252, 167, 73, - 28, 6, 1, 47, 236, 94, 73, 28, 3, 1, 47, 236, 94, 73, 28, 1, 236, 54, 73, - 36, 28, 224, 176, 36, 28, 227, 24, 236, 128, 53, 36, 28, 244, 136, 236, - 128, 53, 36, 28, 226, 195, 236, 128, 53, 228, 192, 254, 69, 36, 28, 239, - 12, 36, 28, 233, 156, 28, 239, 12, 28, 233, 156, 28, 6, 1, 248, 78, 28, - 3, 1, 248, 78, 28, 6, 1, 248, 60, 28, 3, 1, 248, 60, 28, 6, 1, 223, 55, - 28, 3, 1, 223, 55, 28, 6, 1, 251, 240, 28, 3, 1, 251, 240, 28, 6, 1, 248, - 59, 28, 3, 1, 248, 59, 28, 6, 1, 227, 45, 2, 236, 154, 88, 28, 3, 1, 227, - 45, 2, 236, 154, 88, 28, 6, 1, 225, 220, 28, 3, 1, 225, 220, 28, 6, 1, - 226, 23, 28, 3, 1, 226, 23, 28, 6, 1, 226, 27, 28, 3, 1, 226, 27, 28, 6, - 1, 227, 50, 28, 3, 1, 227, 50, 28, 6, 1, 244, 125, 28, 3, 1, 244, 125, - 28, 6, 1, 229, 28, 28, 3, 1, 229, 28, 52, 1, 251, 160, 206, 223, 193, - 233, 37, 52, 1, 251, 160, 206, 223, 249, 233, 37, 52, 1, 251, 160, 206, - 223, 193, 229, 130, 52, 1, 251, 160, 206, 223, 249, 229, 130, 52, 1, 251, - 160, 206, 223, 193, 232, 84, 52, 1, 251, 160, 206, 223, 249, 232, 84, 52, - 1, 251, 160, 206, 223, 193, 231, 70, 52, 1, 251, 160, 206, 223, 249, 231, - 70, 52, 1, 247, 140, 248, 138, 206, 125, 52, 1, 201, 248, 138, 206, 125, - 52, 1, 236, 155, 248, 138, 206, 125, 52, 1, 184, 248, 138, 206, 125, 52, - 1, 247, 139, 248, 138, 206, 125, 52, 1, 247, 140, 248, 138, 237, 232, - 206, 125, 52, 1, 201, 248, 138, 237, 232, 206, 125, 52, 1, 236, 155, 248, - 138, 237, 232, 206, 125, 52, 1, 184, 248, 138, 237, 232, 206, 125, 52, 1, - 247, 139, 248, 138, 237, 232, 206, 125, 52, 1, 247, 140, 237, 232, 206, - 125, 52, 1, 201, 237, 232, 206, 125, 52, 1, 236, 155, 237, 232, 206, 125, - 52, 1, 184, 237, 232, 206, 125, 52, 1, 247, 139, 237, 232, 206, 125, 52, - 1, 56, 61, 125, 52, 1, 56, 228, 194, 52, 1, 56, 169, 125, 52, 1, 203, 41, - 251, 11, 254, 181, 52, 1, 232, 8, 99, 58, 52, 1, 232, 8, 103, 58, 52, 1, - 232, 8, 247, 149, 76, 52, 1, 232, 8, 239, 223, 247, 149, 76, 52, 1, 184, - 239, 223, 247, 149, 76, 52, 1, 228, 27, 22, 201, 226, 118, 52, 1, 228, - 27, 22, 184, 226, 118, 7, 6, 1, 248, 26, 254, 227, 7, 3, 1, 248, 26, 254, - 227, 7, 6, 1, 248, 26, 254, 248, 7, 3, 1, 248, 26, 254, 248, 7, 6, 1, - 245, 98, 7, 3, 1, 245, 98, 7, 6, 1, 225, 187, 7, 3, 1, 225, 187, 7, 6, 1, - 226, 82, 7, 3, 1, 226, 82, 7, 6, 1, 250, 233, 7, 3, 1, 250, 233, 7, 6, 1, - 250, 234, 2, 251, 54, 7, 3, 1, 250, 234, 2, 251, 54, 7, 1, 3, 6, 247, - 130, 7, 1, 3, 6, 193, 7, 6, 1, 255, 63, 7, 3, 1, 255, 63, 7, 6, 1, 254, - 158, 7, 3, 1, 254, 158, 7, 6, 1, 254, 53, 7, 3, 1, 254, 53, 7, 6, 1, 254, - 41, 7, 3, 1, 254, 41, 7, 6, 1, 254, 42, 2, 169, 125, 7, 3, 1, 254, 42, 2, - 169, 125, 7, 6, 1, 254, 34, 7, 3, 1, 254, 34, 7, 6, 1, 200, 252, 45, 2, - 249, 140, 7, 3, 1, 200, 252, 45, 2, 249, 140, 7, 6, 1, 239, 77, 2, 82, 7, - 3, 1, 239, 77, 2, 82, 7, 6, 1, 239, 77, 2, 250, 1, 82, 7, 3, 1, 239, 77, - 2, 250, 1, 82, 7, 6, 1, 239, 77, 2, 195, 22, 250, 1, 82, 7, 3, 1, 239, - 77, 2, 195, 22, 250, 1, 82, 7, 6, 1, 252, 99, 149, 7, 3, 1, 252, 99, 149, - 7, 6, 1, 238, 47, 2, 201, 82, 7, 3, 1, 238, 47, 2, 201, 82, 7, 6, 1, 130, - 2, 182, 195, 234, 2, 7, 3, 1, 130, 2, 182, 195, 234, 2, 7, 6, 1, 130, 2, - 237, 124, 7, 3, 1, 130, 2, 237, 124, 7, 6, 1, 234, 52, 7, 3, 1, 234, 52, - 7, 6, 1, 233, 245, 2, 195, 226, 188, 250, 34, 7, 3, 1, 233, 245, 2, 195, - 226, 188, 250, 34, 7, 6, 1, 233, 245, 2, 247, 14, 7, 3, 1, 233, 245, 2, - 247, 14, 7, 6, 1, 233, 245, 2, 228, 114, 227, 89, 7, 3, 1, 233, 245, 2, - 228, 114, 227, 89, 7, 6, 1, 232, 140, 2, 195, 226, 188, 250, 34, 7, 3, 1, - 232, 140, 2, 195, 226, 188, 250, 34, 7, 6, 1, 232, 140, 2, 250, 1, 82, 7, - 3, 1, 232, 140, 2, 250, 1, 82, 7, 6, 1, 232, 27, 231, 105, 7, 3, 1, 232, - 27, 231, 105, 7, 6, 1, 231, 63, 231, 105, 7, 3, 1, 231, 63, 231, 105, 7, - 6, 1, 225, 65, 2, 250, 1, 82, 7, 3, 1, 225, 65, 2, 250, 1, 82, 7, 6, 1, - 224, 182, 7, 3, 1, 224, 182, 7, 6, 1, 224, 209, 223, 119, 7, 3, 1, 224, - 209, 223, 119, 7, 6, 1, 226, 197, 2, 82, 7, 3, 1, 226, 197, 2, 82, 7, 6, - 1, 226, 197, 2, 195, 226, 188, 250, 34, 7, 3, 1, 226, 197, 2, 195, 226, - 188, 250, 34, 7, 6, 1, 225, 35, 7, 3, 1, 225, 35, 7, 6, 1, 247, 173, 7, - 3, 1, 247, 173, 7, 6, 1, 239, 205, 7, 3, 1, 239, 205, 7, 6, 1, 251, 44, - 7, 3, 1, 251, 44, 52, 1, 225, 87, 7, 3, 1, 248, 98, 7, 3, 1, 237, 100, 7, - 3, 1, 236, 48, 7, 3, 1, 234, 199, 7, 3, 1, 231, 62, 7, 1, 3, 6, 231, 62, - 7, 3, 1, 225, 244, 7, 3, 1, 225, 145, 7, 6, 1, 239, 241, 222, 222, 7, 3, - 1, 239, 241, 222, 222, 7, 6, 1, 239, 241, 247, 130, 7, 3, 1, 239, 241, - 247, 130, 7, 6, 1, 239, 241, 214, 7, 6, 1, 209, 239, 241, 214, 7, 3, 1, - 209, 239, 241, 214, 7, 6, 1, 209, 149, 7, 3, 1, 209, 149, 7, 6, 1, 239, - 241, 146, 7, 3, 1, 239, 241, 146, 7, 6, 1, 239, 241, 193, 7, 3, 1, 239, - 241, 193, 7, 6, 1, 239, 241, 227, 109, 7, 3, 1, 239, 241, 227, 109, 52, - 1, 184, 251, 102, 255, 41, 52, 1, 251, 61, 52, 1, 229, 63, 247, 204, 53, - 7, 6, 1, 231, 6, 7, 3, 1, 231, 6, 7, 247, 208, 1, 200, 247, 130, 7, 247, - 208, 1, 200, 233, 244, 7, 247, 208, 1, 239, 223, 185, 7, 247, 208, 1, - 244, 81, 237, 126, 7, 247, 208, 1, 254, 120, 185, 227, 183, 235, 244, 1, - 57, 227, 183, 235, 244, 1, 74, 227, 183, 235, 244, 5, 248, 80, 227, 183, - 235, 244, 1, 66, 227, 183, 235, 244, 1, 72, 227, 183, 235, 244, 1, 73, - 227, 183, 235, 244, 5, 245, 134, 227, 183, 235, 244, 1, 238, 150, 227, - 183, 235, 244, 1, 238, 208, 227, 183, 235, 244, 1, 246, 11, 227, 183, - 235, 244, 1, 246, 54, 227, 183, 235, 244, 5, 254, 160, 227, 183, 235, - 244, 1, 251, 68, 227, 183, 235, 244, 1, 251, 150, 227, 183, 235, 244, 1, - 239, 117, 227, 183, 235, 244, 1, 239, 157, 227, 183, 235, 244, 1, 226, 5, - 227, 183, 235, 244, 1, 226, 7, 227, 183, 235, 244, 1, 250, 92, 227, 183, - 235, 244, 1, 250, 100, 227, 183, 235, 244, 1, 96, 227, 183, 235, 244, 1, - 226, 201, 227, 183, 235, 244, 1, 249, 161, 227, 183, 235, 244, 1, 250, 7, - 227, 183, 235, 244, 1, 235, 6, 227, 183, 235, 244, 1, 233, 4, 227, 183, - 235, 244, 1, 233, 79, 227, 183, 235, 244, 1, 252, 138, 227, 183, 235, - 244, 1, 252, 185, 227, 183, 235, 244, 1, 236, 103, 227, 183, 235, 244, 1, - 231, 122, 227, 183, 235, 244, 1, 237, 143, 227, 183, 235, 244, 1, 231, - 91, 227, 183, 235, 244, 1, 228, 169, 227, 183, 235, 244, 1, 244, 227, - 227, 183, 235, 244, 31, 5, 57, 227, 183, 235, 244, 31, 5, 74, 227, 183, - 235, 244, 31, 5, 66, 227, 183, 235, 244, 31, 5, 72, 227, 183, 235, 244, - 31, 5, 234, 52, 227, 183, 235, 244, 233, 0, 237, 17, 227, 183, 235, 244, - 233, 0, 237, 16, 227, 183, 235, 244, 233, 0, 237, 15, 227, 183, 235, 244, - 233, 0, 237, 14, 217, 1, 177, 217, 1, 238, 227, 217, 1, 246, 193, 217, 1, - 235, 137, 217, 1, 252, 39, 217, 1, 251, 204, 217, 1, 239, 179, 217, 1, - 234, 173, 217, 1, 227, 107, 217, 1, 226, 251, 217, 1, 250, 189, 217, 1, - 236, 1, 217, 1, 213, 217, 1, 233, 97, 217, 1, 253, 70, 217, 1, 198, 217, - 1, 226, 44, 217, 1, 226, 37, 217, 1, 248, 70, 217, 1, 224, 173, 217, 1, - 223, 85, 217, 1, 223, 117, 217, 1, 3, 57, 217, 1, 191, 217, 1, 208, 217, - 1, 238, 43, 217, 1, 229, 146, 217, 1, 231, 31, 217, 1, 154, 217, 1, 57, - 217, 1, 74, 217, 1, 66, 217, 1, 72, 217, 1, 73, 217, 1, 232, 138, 217, 1, - 224, 72, 217, 1, 247, 129, 217, 1, 246, 101, 217, 1, 248, 35, 217, 228, - 0, 1, 224, 173, 217, 228, 0, 1, 191, 217, 1, 226, 20, 217, 1, 226, 10, - 217, 1, 250, 117, 217, 1, 235, 18, 217, 1, 254, 203, 191, 217, 1, 224, - 203, 229, 146, 217, 1, 224, 204, 154, 217, 1, 254, 75, 247, 129, 217, - 228, 0, 1, 208, 217, 227, 221, 1, 208, 217, 1, 252, 19, 217, 228, 241, - 245, 119, 76, 217, 47, 245, 119, 76, 217, 165, 229, 139, 217, 165, 47, - 229, 139, 141, 5, 254, 160, 141, 5, 224, 211, 141, 1, 57, 141, 1, 255, - 63, 141, 1, 74, 141, 1, 240, 47, 141, 1, 66, 141, 1, 225, 76, 141, 1, - 153, 146, 141, 1, 153, 231, 100, 141, 1, 153, 149, 141, 1, 153, 237, 149, - 141, 1, 72, 141, 1, 248, 35, 141, 1, 254, 253, 141, 1, 73, 141, 1, 234, - 52, 141, 1, 254, 53, 141, 1, 177, 141, 1, 238, 227, 141, 1, 246, 193, - 141, 1, 246, 66, 141, 1, 235, 137, 141, 1, 252, 39, 141, 1, 251, 204, - 141, 1, 239, 179, 141, 1, 239, 160, 141, 1, 234, 173, 141, 1, 226, 20, - 141, 1, 226, 10, 141, 1, 250, 117, 141, 1, 250, 101, 141, 1, 235, 18, - 141, 1, 227, 107, 141, 1, 226, 251, 141, 1, 250, 189, 141, 1, 250, 22, - 141, 1, 236, 1, 141, 1, 213, 141, 1, 233, 97, 141, 1, 253, 70, 141, 1, - 252, 190, 141, 1, 198, 141, 1, 191, 141, 1, 208, 141, 1, 238, 43, 141, 1, - 225, 64, 141, 1, 229, 146, 141, 1, 228, 110, 141, 1, 231, 31, 141, 1, - 154, 141, 1, 237, 148, 141, 251, 33, 5, 245, 166, 141, 31, 5, 255, 63, - 141, 31, 5, 74, 141, 31, 5, 240, 47, 141, 31, 5, 66, 141, 31, 5, 225, 76, - 141, 31, 5, 153, 146, 141, 31, 5, 153, 231, 100, 141, 31, 5, 153, 149, - 141, 31, 5, 153, 237, 149, 141, 31, 5, 72, 141, 31, 5, 248, 35, 141, 31, - 5, 254, 253, 141, 31, 5, 73, 141, 31, 5, 234, 52, 141, 31, 5, 254, 53, - 141, 5, 224, 216, 141, 250, 151, 141, 47, 250, 151, 141, 21, 223, 89, - 141, 21, 118, 141, 21, 113, 141, 21, 166, 141, 21, 158, 141, 21, 173, - 141, 21, 183, 141, 21, 194, 141, 21, 187, 141, 21, 192, 239, 9, 237, 194, - 21, 223, 89, 239, 9, 237, 194, 21, 118, 239, 9, 237, 194, 21, 113, 239, - 9, 237, 194, 21, 166, 239, 9, 237, 194, 21, 158, 239, 9, 237, 194, 21, - 173, 239, 9, 237, 194, 21, 183, 239, 9, 237, 194, 21, 194, 239, 9, 237, - 194, 21, 187, 239, 9, 237, 194, 21, 192, 239, 9, 237, 194, 1, 177, 239, - 9, 237, 194, 1, 238, 227, 239, 9, 237, 194, 1, 246, 193, 239, 9, 237, - 194, 1, 235, 137, 239, 9, 237, 194, 1, 231, 31, 239, 9, 237, 194, 1, 229, - 146, 239, 9, 237, 194, 1, 223, 117, 239, 9, 237, 194, 1, 234, 173, 239, - 9, 237, 194, 1, 227, 107, 239, 9, 237, 194, 1, 244, 147, 239, 9, 237, - 194, 1, 236, 1, 239, 9, 237, 194, 1, 213, 239, 9, 237, 194, 1, 233, 97, - 239, 9, 237, 194, 1, 198, 239, 9, 237, 194, 1, 250, 189, 239, 9, 237, - 194, 1, 253, 70, 239, 9, 237, 194, 1, 208, 239, 9, 237, 194, 1, 191, 239, - 9, 237, 194, 1, 238, 43, 239, 9, 237, 194, 1, 224, 173, 239, 9, 237, 194, - 1, 226, 251, 239, 9, 237, 194, 1, 154, 239, 9, 237, 194, 1, 225, 64, 239, - 9, 237, 194, 1, 252, 39, 239, 9, 237, 194, 1, 57, 239, 9, 237, 194, 1, - 234, 88, 239, 9, 237, 194, 1, 74, 239, 9, 237, 194, 1, 234, 52, 239, 9, - 237, 194, 31, 225, 159, 239, 9, 237, 194, 31, 72, 239, 9, 237, 194, 31, - 66, 239, 9, 237, 194, 31, 248, 35, 239, 9, 237, 194, 31, 73, 239, 9, 237, - 194, 206, 233, 15, 239, 9, 237, 194, 206, 252, 29, 239, 9, 237, 194, 206, - 252, 30, 233, 15, 239, 9, 237, 194, 5, 250, 206, 239, 9, 237, 194, 5, - 229, 22, 231, 223, 1, 177, 231, 223, 1, 246, 193, 231, 223, 1, 235, 137, - 231, 223, 1, 227, 107, 231, 223, 1, 250, 189, 231, 223, 1, 236, 1, 231, - 223, 1, 213, 231, 223, 1, 253, 70, 231, 223, 1, 198, 231, 223, 1, 252, - 39, 231, 223, 1, 239, 179, 231, 223, 1, 234, 173, 231, 223, 1, 231, 31, - 231, 223, 1, 208, 231, 223, 1, 238, 43, 231, 223, 1, 191, 231, 223, 1, - 224, 173, 231, 223, 1, 154, 231, 223, 1, 236, 245, 231, 223, 1, 235, 122, - 231, 223, 1, 235, 189, 231, 223, 1, 234, 153, 231, 223, 1, 57, 231, 223, - 31, 5, 74, 231, 223, 31, 5, 66, 231, 223, 31, 5, 72, 231, 223, 31, 5, - 254, 253, 231, 223, 31, 5, 73, 231, 223, 31, 5, 254, 53, 231, 223, 31, 5, - 247, 165, 231, 223, 31, 5, 248, 56, 231, 223, 251, 33, 5, 235, 139, 231, - 223, 251, 33, 5, 199, 231, 223, 251, 33, 5, 146, 231, 223, 251, 33, 5, - 212, 231, 223, 224, 216, 231, 223, 230, 206, 76, 136, 1, 57, 136, 1, 74, - 136, 1, 66, 136, 1, 72, 136, 1, 254, 253, 136, 1, 73, 136, 1, 177, 136, - 1, 238, 227, 136, 1, 246, 193, 136, 1, 246, 66, 136, 1, 235, 98, 136, 1, - 235, 137, 136, 1, 251, 204, 136, 1, 251, 171, 136, 1, 239, 179, 136, 1, - 239, 160, 136, 1, 235, 91, 136, 1, 235, 93, 136, 1, 235, 92, 136, 1, 227, - 107, 136, 1, 226, 251, 136, 1, 250, 189, 136, 1, 250, 22, 136, 1, 234, - 203, 136, 1, 236, 1, 136, 1, 250, 117, 136, 1, 213, 136, 1, 232, 230, - 136, 1, 233, 97, 136, 1, 253, 70, 136, 1, 252, 190, 136, 1, 236, 61, 136, - 1, 198, 136, 1, 253, 16, 136, 1, 191, 136, 1, 208, 136, 1, 238, 43, 136, - 1, 225, 64, 136, 1, 228, 110, 136, 1, 231, 31, 136, 1, 154, 136, 31, 5, - 255, 63, 136, 31, 5, 74, 136, 31, 5, 240, 47, 136, 31, 5, 248, 22, 136, - 31, 5, 66, 136, 31, 5, 234, 88, 136, 31, 5, 73, 136, 31, 5, 254, 253, - 136, 31, 5, 254, 53, 136, 31, 5, 225, 159, 136, 251, 33, 5, 191, 136, - 251, 33, 5, 208, 136, 251, 33, 5, 238, 43, 136, 251, 33, 5, 224, 173, - 136, 1, 35, 239, 76, 136, 1, 35, 214, 136, 1, 35, 235, 139, 136, 251, 33, - 5, 35, 235, 139, 136, 1, 35, 251, 205, 136, 1, 35, 227, 109, 136, 1, 35, - 199, 136, 1, 35, 233, 244, 136, 1, 35, 224, 25, 136, 1, 35, 146, 136, 1, - 35, 149, 136, 1, 35, 228, 111, 136, 251, 33, 5, 35, 185, 136, 251, 33, 5, - 35, 212, 136, 21, 223, 89, 136, 21, 118, 136, 21, 113, 136, 21, 166, 136, - 21, 158, 136, 21, 173, 136, 21, 183, 136, 21, 194, 136, 21, 187, 136, 21, - 192, 136, 232, 171, 228, 134, 136, 232, 171, 250, 151, 136, 232, 171, 47, - 250, 151, 136, 232, 171, 226, 66, 250, 151, 9, 11, 242, 31, 9, 11, 242, - 30, 9, 11, 242, 29, 9, 11, 242, 28, 9, 11, 242, 27, 9, 11, 242, 26, 9, - 11, 242, 25, 9, 11, 242, 24, 9, 11, 242, 23, 9, 11, 242, 22, 9, 11, 242, - 21, 9, 11, 242, 20, 9, 11, 242, 19, 9, 11, 242, 18, 9, 11, 242, 17, 9, - 11, 242, 16, 9, 11, 242, 15, 9, 11, 242, 14, 9, 11, 242, 13, 9, 11, 242, - 12, 9, 11, 242, 11, 9, 11, 242, 10, 9, 11, 242, 9, 9, 11, 242, 8, 9, 11, - 242, 7, 9, 11, 242, 6, 9, 11, 242, 5, 9, 11, 242, 4, 9, 11, 242, 3, 9, - 11, 242, 2, 9, 11, 242, 1, 9, 11, 242, 0, 9, 11, 241, 255, 9, 11, 241, - 254, 9, 11, 241, 253, 9, 11, 241, 252, 9, 11, 241, 251, 9, 11, 241, 250, - 9, 11, 241, 249, 9, 11, 241, 248, 9, 11, 241, 247, 9, 11, 241, 246, 9, - 11, 241, 245, 9, 11, 241, 244, 9, 11, 241, 243, 9, 11, 241, 242, 9, 11, - 241, 241, 9, 11, 241, 240, 9, 11, 241, 239, 9, 11, 241, 238, 9, 11, 241, - 237, 9, 11, 241, 236, 9, 11, 241, 235, 9, 11, 241, 234, 9, 11, 241, 233, - 9, 11, 241, 232, 9, 11, 241, 231, 9, 11, 241, 230, 9, 11, 241, 229, 9, - 11, 241, 228, 9, 11, 241, 227, 9, 11, 241, 226, 9, 11, 241, 225, 9, 11, - 241, 224, 9, 11, 241, 223, 9, 11, 241, 222, 9, 11, 241, 221, 9, 11, 241, - 220, 9, 11, 241, 219, 9, 11, 241, 218, 9, 11, 241, 217, 9, 11, 241, 216, - 9, 11, 241, 215, 9, 11, 241, 214, 9, 11, 241, 213, 9, 11, 241, 212, 9, - 11, 241, 211, 9, 11, 241, 210, 9, 11, 241, 209, 9, 11, 241, 208, 9, 11, - 241, 207, 9, 11, 241, 206, 9, 11, 241, 205, 9, 11, 241, 204, 9, 11, 241, - 203, 9, 11, 241, 202, 9, 11, 241, 201, 9, 11, 241, 200, 9, 11, 241, 199, - 9, 11, 241, 198, 9, 11, 241, 197, 9, 11, 241, 196, 9, 11, 241, 195, 9, - 11, 241, 194, 9, 11, 241, 193, 9, 11, 241, 192, 9, 11, 241, 191, 9, 11, - 241, 190, 9, 11, 241, 189, 9, 11, 241, 188, 9, 11, 241, 187, 9, 11, 241, - 186, 9, 11, 241, 185, 9, 11, 241, 184, 9, 11, 241, 183, 9, 11, 241, 182, - 9, 11, 241, 181, 9, 11, 241, 180, 9, 11, 241, 179, 9, 11, 241, 178, 9, - 11, 241, 177, 9, 11, 241, 176, 9, 11, 241, 175, 9, 11, 241, 174, 9, 11, - 241, 173, 9, 11, 241, 172, 9, 11, 241, 171, 9, 11, 241, 170, 9, 11, 241, - 169, 9, 11, 241, 168, 9, 11, 241, 167, 9, 11, 241, 166, 9, 11, 241, 165, - 9, 11, 241, 164, 9, 11, 241, 163, 9, 11, 241, 162, 9, 11, 241, 161, 9, - 11, 241, 160, 9, 11, 241, 159, 9, 11, 241, 158, 9, 11, 241, 157, 9, 11, - 241, 156, 9, 11, 241, 155, 9, 11, 241, 154, 9, 11, 241, 153, 9, 11, 241, - 152, 9, 11, 241, 151, 9, 11, 241, 150, 9, 11, 241, 149, 9, 11, 241, 148, - 9, 11, 241, 147, 9, 11, 241, 146, 9, 11, 241, 145, 9, 11, 241, 144, 9, - 11, 241, 143, 9, 11, 241, 142, 9, 11, 241, 141, 9, 11, 241, 140, 9, 11, - 241, 139, 9, 11, 241, 138, 9, 11, 241, 137, 9, 11, 241, 136, 9, 11, 241, - 135, 9, 11, 241, 134, 9, 11, 241, 133, 9, 11, 241, 132, 9, 11, 241, 131, - 9, 11, 241, 130, 9, 11, 241, 129, 9, 11, 241, 128, 9, 11, 241, 127, 9, - 11, 241, 126, 9, 11, 241, 125, 9, 11, 241, 124, 9, 11, 241, 123, 9, 11, - 241, 122, 9, 11, 241, 121, 9, 11, 241, 120, 9, 11, 241, 119, 9, 11, 241, - 118, 9, 11, 241, 117, 9, 11, 241, 116, 9, 11, 241, 115, 9, 11, 241, 114, - 9, 11, 241, 113, 9, 11, 241, 112, 9, 11, 241, 111, 9, 11, 241, 110, 9, - 11, 241, 109, 9, 11, 241, 108, 9, 11, 241, 107, 9, 11, 241, 106, 9, 11, - 241, 105, 9, 11, 241, 104, 9, 11, 241, 103, 9, 11, 241, 102, 9, 11, 241, - 101, 9, 11, 241, 100, 9, 11, 241, 99, 9, 11, 241, 98, 9, 11, 241, 97, 9, - 11, 241, 96, 9, 11, 241, 95, 9, 11, 241, 94, 9, 11, 241, 93, 9, 11, 241, - 92, 9, 11, 241, 91, 9, 11, 241, 90, 9, 11, 241, 89, 9, 11, 241, 88, 9, - 11, 241, 87, 9, 11, 241, 86, 9, 11, 241, 85, 9, 11, 241, 84, 9, 11, 241, - 83, 9, 11, 241, 82, 9, 11, 241, 81, 9, 11, 241, 80, 9, 11, 241, 79, 9, - 11, 241, 78, 9, 11, 241, 77, 9, 11, 241, 76, 9, 11, 241, 75, 9, 11, 241, - 74, 9, 11, 241, 73, 9, 11, 241, 72, 9, 11, 241, 71, 9, 11, 241, 70, 9, - 11, 241, 69, 9, 11, 241, 68, 9, 11, 241, 67, 9, 11, 241, 66, 9, 11, 241, - 65, 9, 11, 241, 64, 9, 11, 241, 63, 9, 11, 241, 62, 9, 11, 241, 61, 9, - 11, 241, 60, 9, 11, 241, 59, 9, 11, 241, 58, 9, 11, 241, 57, 9, 11, 241, - 56, 9, 11, 241, 55, 9, 11, 241, 54, 9, 11, 241, 53, 9, 11, 241, 52, 9, - 11, 241, 51, 9, 11, 241, 50, 9, 11, 241, 49, 9, 11, 241, 48, 9, 11, 241, - 47, 9, 11, 241, 46, 9, 11, 241, 45, 9, 11, 241, 44, 9, 11, 241, 43, 9, - 11, 241, 42, 9, 11, 241, 41, 9, 11, 241, 40, 9, 11, 241, 39, 9, 11, 241, - 38, 9, 11, 241, 37, 9, 11, 241, 36, 9, 11, 241, 35, 9, 11, 241, 34, 9, - 11, 241, 33, 9, 11, 241, 32, 9, 11, 241, 31, 9, 11, 241, 30, 9, 11, 241, - 29, 9, 11, 241, 28, 9, 11, 241, 27, 9, 11, 241, 26, 9, 11, 241, 25, 9, - 11, 241, 24, 9, 11, 241, 23, 9, 11, 241, 22, 9, 11, 241, 21, 9, 11, 241, - 20, 9, 11, 241, 19, 9, 11, 241, 18, 9, 11, 241, 17, 9, 11, 241, 16, 9, - 11, 241, 15, 9, 11, 241, 14, 9, 11, 241, 13, 9, 11, 241, 12, 9, 11, 241, - 11, 9, 11, 241, 10, 9, 11, 241, 9, 9, 11, 241, 8, 9, 11, 241, 7, 9, 11, - 241, 6, 9, 11, 241, 5, 9, 11, 241, 4, 9, 11, 241, 3, 9, 11, 241, 2, 9, - 11, 241, 1, 9, 11, 241, 0, 9, 11, 240, 255, 9, 11, 240, 254, 9, 11, 240, - 253, 9, 11, 240, 252, 9, 11, 240, 251, 9, 11, 240, 250, 9, 11, 240, 249, - 9, 11, 240, 248, 9, 11, 240, 247, 9, 11, 240, 246, 9, 11, 240, 245, 9, - 11, 240, 244, 9, 11, 240, 243, 9, 11, 240, 242, 9, 11, 240, 241, 9, 11, - 240, 240, 9, 11, 240, 239, 9, 11, 240, 238, 9, 11, 240, 237, 9, 11, 240, - 236, 9, 11, 240, 235, 9, 11, 240, 234, 9, 11, 240, 233, 9, 11, 240, 232, - 9, 11, 240, 231, 9, 11, 240, 230, 9, 11, 240, 229, 9, 11, 240, 228, 9, - 11, 240, 227, 9, 11, 240, 226, 9, 11, 240, 225, 9, 11, 240, 224, 9, 11, - 240, 223, 9, 11, 240, 222, 9, 11, 240, 221, 9, 11, 240, 220, 9, 11, 240, - 219, 9, 11, 240, 218, 9, 11, 240, 217, 9, 11, 240, 216, 9, 11, 240, 215, - 9, 11, 240, 214, 9, 11, 240, 213, 9, 11, 240, 212, 9, 11, 240, 211, 9, - 11, 240, 210, 9, 11, 240, 209, 9, 11, 240, 208, 9, 11, 240, 207, 9, 11, - 240, 206, 9, 11, 240, 205, 9, 11, 240, 204, 9, 11, 240, 203, 9, 11, 240, - 202, 9, 11, 240, 201, 9, 11, 240, 200, 9, 11, 240, 199, 9, 11, 240, 198, - 9, 11, 240, 197, 9, 11, 240, 196, 9, 11, 240, 195, 9, 11, 240, 194, 9, - 11, 240, 193, 9, 11, 240, 192, 9, 11, 240, 191, 9, 11, 240, 190, 9, 11, - 240, 189, 9, 11, 240, 188, 9, 11, 240, 187, 9, 11, 240, 186, 9, 11, 240, - 185, 9, 11, 240, 184, 9, 11, 240, 183, 9, 11, 240, 182, 9, 11, 240, 181, - 9, 11, 240, 180, 9, 11, 240, 179, 9, 11, 240, 178, 9, 11, 240, 177, 9, - 11, 240, 176, 9, 11, 240, 175, 9, 11, 240, 174, 9, 11, 240, 173, 9, 11, - 240, 172, 9, 11, 240, 171, 9, 11, 240, 170, 9, 11, 240, 169, 9, 11, 240, - 168, 9, 11, 240, 167, 9, 11, 240, 166, 9, 11, 240, 165, 9, 11, 240, 164, - 9, 11, 240, 163, 9, 11, 240, 162, 9, 11, 240, 161, 9, 11, 240, 160, 9, - 11, 240, 159, 9, 11, 240, 158, 9, 11, 240, 157, 9, 11, 240, 156, 9, 11, - 240, 155, 9, 11, 240, 154, 9, 11, 240, 153, 9, 11, 240, 152, 9, 11, 240, - 151, 9, 11, 240, 150, 9, 11, 240, 149, 9, 11, 240, 148, 9, 11, 240, 147, - 9, 11, 240, 146, 9, 11, 240, 145, 9, 11, 240, 144, 9, 11, 240, 143, 9, - 11, 240, 142, 9, 11, 240, 141, 9, 11, 240, 140, 9, 11, 240, 139, 9, 11, - 240, 138, 9, 11, 240, 137, 9, 11, 240, 136, 9, 11, 240, 135, 9, 11, 240, - 134, 9, 11, 240, 133, 9, 11, 240, 132, 9, 11, 240, 131, 9, 11, 240, 130, - 9, 11, 240, 129, 9, 11, 240, 128, 9, 11, 240, 127, 9, 11, 240, 126, 9, - 11, 240, 125, 9, 11, 240, 124, 9, 11, 240, 123, 9, 11, 240, 122, 9, 11, - 240, 121, 9, 11, 240, 120, 9, 11, 240, 119, 9, 11, 240, 118, 9, 11, 240, - 117, 9, 11, 240, 116, 9, 11, 240, 115, 9, 11, 240, 114, 9, 11, 240, 113, - 9, 11, 240, 112, 9, 11, 240, 111, 9, 11, 240, 110, 9, 11, 240, 109, 9, - 11, 240, 108, 9, 11, 240, 107, 9, 11, 240, 106, 9, 11, 240, 105, 9, 11, - 240, 104, 9, 11, 240, 103, 9, 11, 240, 102, 9, 11, 240, 101, 9, 11, 240, - 100, 9, 11, 240, 99, 9, 11, 240, 98, 9, 11, 240, 97, 9, 11, 240, 96, 9, - 11, 240, 95, 9, 11, 240, 94, 9, 11, 240, 93, 9, 11, 240, 92, 9, 11, 240, - 91, 9, 11, 240, 90, 9, 11, 240, 89, 9, 11, 240, 88, 9, 11, 240, 87, 9, - 11, 240, 86, 9, 11, 240, 85, 9, 11, 240, 84, 9, 11, 240, 83, 9, 11, 240, - 82, 9, 11, 240, 81, 9, 11, 240, 80, 9, 11, 240, 79, 9, 11, 240, 78, 9, - 11, 240, 77, 7, 3, 20, 247, 74, 7, 3, 20, 247, 70, 7, 3, 20, 247, 33, 7, - 3, 20, 247, 73, 7, 3, 20, 247, 72, 7, 3, 20, 182, 231, 35, 227, 109, 7, - 3, 20, 228, 70, 120, 3, 20, 236, 211, 234, 232, 120, 3, 20, 236, 211, - 248, 39, 120, 3, 20, 236, 211, 239, 252, 120, 3, 20, 224, 231, 234, 232, - 120, 3, 20, 236, 211, 224, 67, 78, 1, 223, 176, 2, 245, 58, 78, 232, 255, - 239, 100, 225, 53, 78, 20, 223, 200, 223, 176, 223, 176, 233, 166, 78, 1, - 254, 201, 254, 29, 78, 1, 224, 117, 254, 227, 78, 1, 224, 117, 250, 160, - 78, 1, 224, 117, 245, 121, 78, 1, 224, 117, 239, 59, 78, 1, 224, 117, - 238, 12, 78, 1, 224, 117, 35, 236, 215, 78, 1, 224, 117, 231, 205, 78, 1, - 224, 117, 227, 58, 78, 1, 254, 201, 79, 53, 78, 1, 229, 79, 2, 229, 79, - 249, 140, 78, 1, 229, 79, 2, 228, 244, 249, 140, 78, 1, 229, 79, 2, 250, - 176, 22, 229, 79, 249, 140, 78, 1, 229, 79, 2, 250, 176, 22, 228, 244, - 249, 140, 78, 1, 92, 2, 233, 166, 78, 1, 92, 2, 232, 126, 78, 1, 92, 2, - 237, 27, 78, 1, 252, 201, 2, 250, 175, 78, 1, 246, 35, 2, 250, 175, 78, - 1, 250, 161, 2, 250, 175, 78, 1, 245, 122, 2, 237, 27, 78, 1, 225, 47, 2, - 250, 175, 78, 1, 223, 100, 2, 250, 175, 78, 1, 227, 11, 2, 250, 175, 78, - 1, 223, 176, 2, 250, 175, 78, 1, 35, 239, 60, 2, 250, 175, 78, 1, 239, - 60, 2, 250, 175, 78, 1, 238, 13, 2, 250, 175, 78, 1, 236, 216, 2, 250, - 175, 78, 1, 234, 195, 2, 250, 175, 78, 1, 231, 3, 2, 250, 175, 78, 1, 35, - 233, 152, 2, 250, 175, 78, 1, 233, 152, 2, 250, 175, 78, 1, 226, 42, 2, - 250, 175, 78, 1, 232, 93, 2, 250, 175, 78, 1, 231, 206, 2, 250, 175, 78, - 1, 229, 79, 2, 250, 175, 78, 1, 227, 59, 2, 250, 175, 78, 1, 225, 47, 2, - 244, 223, 78, 1, 252, 201, 2, 232, 14, 78, 1, 239, 60, 2, 232, 14, 78, 1, - 233, 152, 2, 232, 14, 78, 20, 92, 238, 12, 10, 1, 92, 224, 158, 44, 15, - 10, 1, 92, 224, 158, 35, 15, 10, 1, 252, 231, 44, 15, 10, 1, 252, 231, - 35, 15, 10, 1, 252, 231, 59, 15, 10, 1, 252, 231, 124, 15, 10, 1, 233, - 141, 44, 15, 10, 1, 233, 141, 35, 15, 10, 1, 233, 141, 59, 15, 10, 1, - 233, 141, 124, 15, 10, 1, 252, 222, 44, 15, 10, 1, 252, 222, 35, 15, 10, - 1, 252, 222, 59, 15, 10, 1, 252, 222, 124, 15, 10, 1, 226, 13, 44, 15, - 10, 1, 226, 13, 35, 15, 10, 1, 226, 13, 59, 15, 10, 1, 226, 13, 124, 15, - 10, 1, 227, 33, 44, 15, 10, 1, 227, 33, 35, 15, 10, 1, 227, 33, 59, 15, - 10, 1, 227, 33, 124, 15, 10, 1, 226, 15, 44, 15, 10, 1, 226, 15, 35, 15, - 10, 1, 226, 15, 59, 15, 10, 1, 226, 15, 124, 15, 10, 1, 225, 37, 44, 15, - 10, 1, 225, 37, 35, 15, 10, 1, 225, 37, 59, 15, 10, 1, 225, 37, 124, 15, - 10, 1, 233, 139, 44, 15, 10, 1, 233, 139, 35, 15, 10, 1, 233, 139, 59, - 15, 10, 1, 233, 139, 124, 15, 10, 1, 248, 76, 44, 15, 10, 1, 248, 76, 35, - 15, 10, 1, 248, 76, 59, 15, 10, 1, 248, 76, 124, 15, 10, 1, 234, 167, 44, - 15, 10, 1, 234, 167, 35, 15, 10, 1, 234, 167, 59, 15, 10, 1, 234, 167, - 124, 15, 10, 1, 227, 49, 44, 15, 10, 1, 227, 49, 35, 15, 10, 1, 227, 49, - 59, 15, 10, 1, 227, 49, 124, 15, 10, 1, 227, 47, 44, 15, 10, 1, 227, 47, - 35, 15, 10, 1, 227, 47, 59, 15, 10, 1, 227, 47, 124, 15, 10, 1, 250, 115, - 44, 15, 10, 1, 250, 115, 35, 15, 10, 1, 250, 172, 44, 15, 10, 1, 250, - 172, 35, 15, 10, 1, 248, 100, 44, 15, 10, 1, 248, 100, 35, 15, 10, 1, - 250, 113, 44, 15, 10, 1, 250, 113, 35, 15, 10, 1, 239, 166, 44, 15, 10, - 1, 239, 166, 35, 15, 10, 1, 231, 96, 44, 15, 10, 1, 231, 96, 35, 15, 10, - 1, 238, 252, 44, 15, 10, 1, 238, 252, 35, 15, 10, 1, 238, 252, 59, 15, - 10, 1, 238, 252, 124, 15, 10, 1, 246, 181, 44, 15, 10, 1, 246, 181, 35, - 15, 10, 1, 246, 181, 59, 15, 10, 1, 246, 181, 124, 15, 10, 1, 245, 211, - 44, 15, 10, 1, 245, 211, 35, 15, 10, 1, 245, 211, 59, 15, 10, 1, 245, - 211, 124, 15, 10, 1, 235, 106, 44, 15, 10, 1, 235, 106, 35, 15, 10, 1, - 235, 106, 59, 15, 10, 1, 235, 106, 124, 15, 10, 1, 234, 252, 246, 51, 44, - 15, 10, 1, 234, 252, 246, 51, 35, 15, 10, 1, 231, 126, 44, 15, 10, 1, - 231, 126, 35, 15, 10, 1, 231, 126, 59, 15, 10, 1, 231, 126, 124, 15, 10, - 1, 245, 108, 2, 62, 64, 44, 15, 10, 1, 245, 108, 2, 62, 64, 35, 15, 10, - 1, 245, 108, 246, 9, 44, 15, 10, 1, 245, 108, 246, 9, 35, 15, 10, 1, 245, - 108, 246, 9, 59, 15, 10, 1, 245, 108, 246, 9, 124, 15, 10, 1, 245, 108, - 249, 158, 44, 15, 10, 1, 245, 108, 249, 158, 35, 15, 10, 1, 245, 108, - 249, 158, 59, 15, 10, 1, 245, 108, 249, 158, 124, 15, 10, 1, 62, 253, 30, - 44, 15, 10, 1, 62, 253, 30, 35, 15, 10, 1, 62, 253, 30, 2, 164, 64, 44, - 15, 10, 1, 62, 253, 30, 2, 164, 64, 35, 15, 10, 1, 235, 140, 44, 15, 10, - 1, 235, 140, 35, 15, 10, 1, 235, 140, 59, 15, 10, 1, 235, 140, 124, 15, - 10, 1, 97, 44, 15, 10, 1, 97, 35, 15, 10, 1, 234, 89, 44, 15, 10, 1, 234, - 89, 35, 15, 10, 1, 223, 159, 44, 15, 10, 1, 223, 159, 35, 15, 10, 1, 97, - 2, 164, 64, 44, 15, 10, 1, 225, 43, 44, 15, 10, 1, 225, 43, 35, 15, 10, - 1, 238, 185, 234, 89, 44, 15, 10, 1, 238, 185, 234, 89, 35, 15, 10, 1, - 238, 185, 223, 159, 44, 15, 10, 1, 238, 185, 223, 159, 35, 15, 10, 1, - 161, 44, 15, 10, 1, 161, 35, 15, 10, 1, 161, 59, 15, 10, 1, 161, 124, 15, - 10, 1, 225, 155, 239, 7, 238, 185, 92, 175, 59, 15, 10, 1, 225, 155, 239, - 7, 238, 185, 92, 175, 124, 15, 10, 20, 62, 2, 164, 64, 2, 92, 44, 15, 10, - 20, 62, 2, 164, 64, 2, 92, 35, 15, 10, 20, 62, 2, 164, 64, 2, 255, 20, - 44, 15, 10, 20, 62, 2, 164, 64, 2, 255, 20, 35, 15, 10, 20, 62, 2, 164, - 64, 2, 224, 145, 44, 15, 10, 20, 62, 2, 164, 64, 2, 224, 145, 35, 15, 10, - 20, 62, 2, 164, 64, 2, 97, 44, 15, 10, 20, 62, 2, 164, 64, 2, 97, 35, 15, - 10, 20, 62, 2, 164, 64, 2, 234, 89, 44, 15, 10, 20, 62, 2, 164, 64, 2, - 234, 89, 35, 15, 10, 20, 62, 2, 164, 64, 2, 223, 159, 44, 15, 10, 20, 62, - 2, 164, 64, 2, 223, 159, 35, 15, 10, 20, 62, 2, 164, 64, 2, 161, 44, 15, - 10, 20, 62, 2, 164, 64, 2, 161, 35, 15, 10, 20, 62, 2, 164, 64, 2, 161, - 59, 15, 10, 20, 225, 155, 238, 185, 62, 2, 164, 64, 2, 92, 175, 44, 15, - 10, 20, 225, 155, 238, 185, 62, 2, 164, 64, 2, 92, 175, 35, 15, 10, 20, - 225, 155, 238, 185, 62, 2, 164, 64, 2, 92, 175, 59, 15, 10, 1, 247, 107, - 62, 44, 15, 10, 1, 247, 107, 62, 35, 15, 10, 1, 247, 107, 62, 59, 15, 10, - 1, 247, 107, 62, 124, 15, 10, 20, 62, 2, 164, 64, 2, 123, 44, 15, 10, 20, - 62, 2, 164, 64, 2, 101, 44, 15, 10, 20, 62, 2, 164, 64, 2, 55, 44, 15, - 10, 20, 62, 2, 164, 64, 2, 92, 175, 44, 15, 10, 20, 62, 2, 164, 64, 2, - 62, 44, 15, 10, 20, 252, 224, 2, 123, 44, 15, 10, 20, 252, 224, 2, 101, - 44, 15, 10, 20, 252, 224, 2, 202, 44, 15, 10, 20, 252, 224, 2, 55, 44, - 15, 10, 20, 252, 224, 2, 92, 175, 44, 15, 10, 20, 252, 224, 2, 62, 44, - 15, 10, 20, 227, 35, 2, 123, 44, 15, 10, 20, 227, 35, 2, 101, 44, 15, 10, - 20, 227, 35, 2, 202, 44, 15, 10, 20, 227, 35, 2, 55, 44, 15, 10, 20, 227, - 35, 2, 92, 175, 44, 15, 10, 20, 227, 35, 2, 62, 44, 15, 10, 20, 226, 237, - 2, 123, 44, 15, 10, 20, 226, 237, 2, 55, 44, 15, 10, 20, 226, 237, 2, 92, - 175, 44, 15, 10, 20, 226, 237, 2, 62, 44, 15, 10, 20, 123, 2, 101, 44, - 15, 10, 20, 123, 2, 55, 44, 15, 10, 20, 101, 2, 123, 44, 15, 10, 20, 101, - 2, 55, 44, 15, 10, 20, 202, 2, 123, 44, 15, 10, 20, 202, 2, 101, 44, 15, - 10, 20, 202, 2, 55, 44, 15, 10, 20, 230, 202, 2, 123, 44, 15, 10, 20, - 230, 202, 2, 101, 44, 15, 10, 20, 230, 202, 2, 202, 44, 15, 10, 20, 230, - 202, 2, 55, 44, 15, 10, 20, 231, 25, 2, 101, 44, 15, 10, 20, 231, 25, 2, - 55, 44, 15, 10, 20, 250, 185, 2, 123, 44, 15, 10, 20, 250, 185, 2, 101, - 44, 15, 10, 20, 250, 185, 2, 202, 44, 15, 10, 20, 250, 185, 2, 55, 44, - 15, 10, 20, 227, 92, 2, 101, 44, 15, 10, 20, 227, 92, 2, 55, 44, 15, 10, - 20, 223, 114, 2, 55, 44, 15, 10, 20, 254, 249, 2, 123, 44, 15, 10, 20, - 254, 249, 2, 55, 44, 15, 10, 20, 246, 64, 2, 123, 44, 15, 10, 20, 246, - 64, 2, 55, 44, 15, 10, 20, 247, 88, 2, 123, 44, 15, 10, 20, 247, 88, 2, - 101, 44, 15, 10, 20, 247, 88, 2, 202, 44, 15, 10, 20, 247, 88, 2, 55, 44, - 15, 10, 20, 247, 88, 2, 92, 175, 44, 15, 10, 20, 247, 88, 2, 62, 44, 15, - 10, 20, 232, 132, 2, 101, 44, 15, 10, 20, 232, 132, 2, 55, 44, 15, 10, - 20, 232, 132, 2, 92, 175, 44, 15, 10, 20, 232, 132, 2, 62, 44, 15, 10, - 20, 239, 60, 2, 92, 44, 15, 10, 20, 239, 60, 2, 123, 44, 15, 10, 20, 239, - 60, 2, 101, 44, 15, 10, 20, 239, 60, 2, 202, 44, 15, 10, 20, 239, 60, 2, - 216, 44, 15, 10, 20, 239, 60, 2, 55, 44, 15, 10, 20, 239, 60, 2, 92, 175, - 44, 15, 10, 20, 239, 60, 2, 62, 44, 15, 10, 20, 216, 2, 123, 44, 15, 10, - 20, 216, 2, 101, 44, 15, 10, 20, 216, 2, 202, 44, 15, 10, 20, 216, 2, 55, - 44, 15, 10, 20, 216, 2, 92, 175, 44, 15, 10, 20, 216, 2, 62, 44, 15, 10, - 20, 55, 2, 123, 44, 15, 10, 20, 55, 2, 101, 44, 15, 10, 20, 55, 2, 202, - 44, 15, 10, 20, 55, 2, 55, 44, 15, 10, 20, 55, 2, 92, 175, 44, 15, 10, - 20, 55, 2, 62, 44, 15, 10, 20, 234, 252, 2, 123, 44, 15, 10, 20, 234, - 252, 2, 101, 44, 15, 10, 20, 234, 252, 2, 202, 44, 15, 10, 20, 234, 252, - 2, 55, 44, 15, 10, 20, 234, 252, 2, 92, 175, 44, 15, 10, 20, 234, 252, 2, - 62, 44, 15, 10, 20, 245, 108, 2, 123, 44, 15, 10, 20, 245, 108, 2, 55, - 44, 15, 10, 20, 245, 108, 2, 92, 175, 44, 15, 10, 20, 245, 108, 2, 62, - 44, 15, 10, 20, 62, 2, 123, 44, 15, 10, 20, 62, 2, 101, 44, 15, 10, 20, - 62, 2, 202, 44, 15, 10, 20, 62, 2, 55, 44, 15, 10, 20, 62, 2, 92, 175, - 44, 15, 10, 20, 62, 2, 62, 44, 15, 10, 20, 226, 246, 2, 227, 219, 92, 44, - 15, 10, 20, 231, 226, 2, 227, 219, 92, 44, 15, 10, 20, 92, 175, 2, 227, - 219, 92, 44, 15, 10, 20, 229, 138, 2, 250, 155, 44, 15, 10, 20, 229, 138, - 2, 239, 22, 44, 15, 10, 20, 229, 138, 2, 247, 105, 44, 15, 10, 20, 229, - 138, 2, 250, 157, 44, 15, 10, 20, 229, 138, 2, 239, 24, 44, 15, 10, 20, - 229, 138, 2, 227, 219, 92, 44, 15, 10, 20, 62, 2, 164, 64, 2, 231, 226, - 35, 15, 10, 20, 62, 2, 164, 64, 2, 223, 111, 35, 15, 10, 20, 62, 2, 164, - 64, 2, 55, 35, 15, 10, 20, 62, 2, 164, 64, 2, 234, 252, 35, 15, 10, 20, - 62, 2, 164, 64, 2, 92, 175, 35, 15, 10, 20, 62, 2, 164, 64, 2, 62, 35, - 15, 10, 20, 252, 224, 2, 231, 226, 35, 15, 10, 20, 252, 224, 2, 223, 111, - 35, 15, 10, 20, 252, 224, 2, 55, 35, 15, 10, 20, 252, 224, 2, 234, 252, - 35, 15, 10, 20, 252, 224, 2, 92, 175, 35, 15, 10, 20, 252, 224, 2, 62, - 35, 15, 10, 20, 227, 35, 2, 231, 226, 35, 15, 10, 20, 227, 35, 2, 223, - 111, 35, 15, 10, 20, 227, 35, 2, 55, 35, 15, 10, 20, 227, 35, 2, 234, - 252, 35, 15, 10, 20, 227, 35, 2, 92, 175, 35, 15, 10, 20, 227, 35, 2, 62, - 35, 15, 10, 20, 226, 237, 2, 231, 226, 35, 15, 10, 20, 226, 237, 2, 223, - 111, 35, 15, 10, 20, 226, 237, 2, 55, 35, 15, 10, 20, 226, 237, 2, 234, - 252, 35, 15, 10, 20, 226, 237, 2, 92, 175, 35, 15, 10, 20, 226, 237, 2, - 62, 35, 15, 10, 20, 247, 88, 2, 92, 175, 35, 15, 10, 20, 247, 88, 2, 62, - 35, 15, 10, 20, 232, 132, 2, 92, 175, 35, 15, 10, 20, 232, 132, 2, 62, - 35, 15, 10, 20, 239, 60, 2, 92, 35, 15, 10, 20, 239, 60, 2, 216, 35, 15, - 10, 20, 239, 60, 2, 55, 35, 15, 10, 20, 239, 60, 2, 92, 175, 35, 15, 10, - 20, 239, 60, 2, 62, 35, 15, 10, 20, 216, 2, 55, 35, 15, 10, 20, 216, 2, - 92, 175, 35, 15, 10, 20, 216, 2, 62, 35, 15, 10, 20, 55, 2, 92, 35, 15, - 10, 20, 55, 2, 55, 35, 15, 10, 20, 234, 252, 2, 231, 226, 35, 15, 10, 20, - 234, 252, 2, 223, 111, 35, 15, 10, 20, 234, 252, 2, 55, 35, 15, 10, 20, - 234, 252, 2, 234, 252, 35, 15, 10, 20, 234, 252, 2, 92, 175, 35, 15, 10, - 20, 234, 252, 2, 62, 35, 15, 10, 20, 92, 175, 2, 227, 219, 92, 35, 15, - 10, 20, 62, 2, 231, 226, 35, 15, 10, 20, 62, 2, 223, 111, 35, 15, 10, 20, - 62, 2, 55, 35, 15, 10, 20, 62, 2, 234, 252, 35, 15, 10, 20, 62, 2, 92, - 175, 35, 15, 10, 20, 62, 2, 62, 35, 15, 10, 20, 62, 2, 164, 64, 2, 123, - 59, 15, 10, 20, 62, 2, 164, 64, 2, 101, 59, 15, 10, 20, 62, 2, 164, 64, - 2, 202, 59, 15, 10, 20, 62, 2, 164, 64, 2, 55, 59, 15, 10, 20, 62, 2, - 164, 64, 2, 245, 108, 59, 15, 10, 20, 252, 224, 2, 123, 59, 15, 10, 20, - 252, 224, 2, 101, 59, 15, 10, 20, 252, 224, 2, 202, 59, 15, 10, 20, 252, - 224, 2, 55, 59, 15, 10, 20, 252, 224, 2, 245, 108, 59, 15, 10, 20, 227, - 35, 2, 123, 59, 15, 10, 20, 227, 35, 2, 101, 59, 15, 10, 20, 227, 35, 2, - 202, 59, 15, 10, 20, 227, 35, 2, 55, 59, 15, 10, 20, 227, 35, 2, 245, - 108, 59, 15, 10, 20, 226, 237, 2, 55, 59, 15, 10, 20, 123, 2, 101, 59, - 15, 10, 20, 123, 2, 55, 59, 15, 10, 20, 101, 2, 123, 59, 15, 10, 20, 101, - 2, 55, 59, 15, 10, 20, 202, 2, 123, 59, 15, 10, 20, 202, 2, 55, 59, 15, - 10, 20, 230, 202, 2, 123, 59, 15, 10, 20, 230, 202, 2, 101, 59, 15, 10, - 20, 230, 202, 2, 202, 59, 15, 10, 20, 230, 202, 2, 55, 59, 15, 10, 20, - 231, 25, 2, 101, 59, 15, 10, 20, 231, 25, 2, 202, 59, 15, 10, 20, 231, - 25, 2, 55, 59, 15, 10, 20, 250, 185, 2, 123, 59, 15, 10, 20, 250, 185, 2, - 101, 59, 15, 10, 20, 250, 185, 2, 202, 59, 15, 10, 20, 250, 185, 2, 55, - 59, 15, 10, 20, 227, 92, 2, 101, 59, 15, 10, 20, 223, 114, 2, 55, 59, 15, - 10, 20, 254, 249, 2, 123, 59, 15, 10, 20, 254, 249, 2, 55, 59, 15, 10, - 20, 246, 64, 2, 123, 59, 15, 10, 20, 246, 64, 2, 55, 59, 15, 10, 20, 247, - 88, 2, 123, 59, 15, 10, 20, 247, 88, 2, 101, 59, 15, 10, 20, 247, 88, 2, - 202, 59, 15, 10, 20, 247, 88, 2, 55, 59, 15, 10, 20, 232, 132, 2, 101, - 59, 15, 10, 20, 232, 132, 2, 55, 59, 15, 10, 20, 239, 60, 2, 123, 59, 15, - 10, 20, 239, 60, 2, 101, 59, 15, 10, 20, 239, 60, 2, 202, 59, 15, 10, 20, - 239, 60, 2, 216, 59, 15, 10, 20, 239, 60, 2, 55, 59, 15, 10, 20, 216, 2, - 123, 59, 15, 10, 20, 216, 2, 101, 59, 15, 10, 20, 216, 2, 202, 59, 15, - 10, 20, 216, 2, 55, 59, 15, 10, 20, 216, 2, 245, 108, 59, 15, 10, 20, 55, - 2, 123, 59, 15, 10, 20, 55, 2, 101, 59, 15, 10, 20, 55, 2, 202, 59, 15, - 10, 20, 55, 2, 55, 59, 15, 10, 20, 234, 252, 2, 123, 59, 15, 10, 20, 234, - 252, 2, 101, 59, 15, 10, 20, 234, 252, 2, 202, 59, 15, 10, 20, 234, 252, - 2, 55, 59, 15, 10, 20, 234, 252, 2, 245, 108, 59, 15, 10, 20, 245, 108, - 2, 123, 59, 15, 10, 20, 245, 108, 2, 55, 59, 15, 10, 20, 245, 108, 2, - 227, 219, 92, 59, 15, 10, 20, 62, 2, 123, 59, 15, 10, 20, 62, 2, 101, 59, - 15, 10, 20, 62, 2, 202, 59, 15, 10, 20, 62, 2, 55, 59, 15, 10, 20, 62, 2, - 245, 108, 59, 15, 10, 20, 62, 2, 164, 64, 2, 55, 124, 15, 10, 20, 62, 2, - 164, 64, 2, 245, 108, 124, 15, 10, 20, 252, 224, 2, 55, 124, 15, 10, 20, - 252, 224, 2, 245, 108, 124, 15, 10, 20, 227, 35, 2, 55, 124, 15, 10, 20, - 227, 35, 2, 245, 108, 124, 15, 10, 20, 226, 237, 2, 55, 124, 15, 10, 20, - 226, 237, 2, 245, 108, 124, 15, 10, 20, 230, 202, 2, 55, 124, 15, 10, 20, - 230, 202, 2, 245, 108, 124, 15, 10, 20, 229, 111, 2, 55, 124, 15, 10, 20, - 229, 111, 2, 245, 108, 124, 15, 10, 20, 239, 60, 2, 216, 124, 15, 10, 20, - 239, 60, 2, 55, 124, 15, 10, 20, 216, 2, 55, 124, 15, 10, 20, 234, 252, - 2, 55, 124, 15, 10, 20, 234, 252, 2, 245, 108, 124, 15, 10, 20, 62, 2, - 55, 124, 15, 10, 20, 62, 2, 245, 108, 124, 15, 10, 20, 229, 138, 2, 247, - 105, 124, 15, 10, 20, 229, 138, 2, 250, 157, 124, 15, 10, 20, 229, 138, - 2, 239, 24, 124, 15, 10, 20, 227, 92, 2, 92, 175, 44, 15, 10, 20, 227, - 92, 2, 62, 44, 15, 10, 20, 254, 249, 2, 92, 175, 44, 15, 10, 20, 254, - 249, 2, 62, 44, 15, 10, 20, 246, 64, 2, 92, 175, 44, 15, 10, 20, 246, 64, - 2, 62, 44, 15, 10, 20, 230, 202, 2, 92, 175, 44, 15, 10, 20, 230, 202, 2, - 62, 44, 15, 10, 20, 229, 111, 2, 92, 175, 44, 15, 10, 20, 229, 111, 2, - 62, 44, 15, 10, 20, 101, 2, 92, 175, 44, 15, 10, 20, 101, 2, 62, 44, 15, - 10, 20, 123, 2, 92, 175, 44, 15, 10, 20, 123, 2, 62, 44, 15, 10, 20, 202, - 2, 92, 175, 44, 15, 10, 20, 202, 2, 62, 44, 15, 10, 20, 231, 25, 2, 92, - 175, 44, 15, 10, 20, 231, 25, 2, 62, 44, 15, 10, 20, 250, 185, 2, 92, - 175, 44, 15, 10, 20, 250, 185, 2, 62, 44, 15, 10, 20, 229, 111, 2, 123, - 44, 15, 10, 20, 229, 111, 2, 101, 44, 15, 10, 20, 229, 111, 2, 202, 44, - 15, 10, 20, 229, 111, 2, 55, 44, 15, 10, 20, 229, 111, 2, 231, 226, 44, - 15, 10, 20, 230, 202, 2, 231, 226, 44, 15, 10, 20, 231, 25, 2, 231, 226, - 44, 15, 10, 20, 250, 185, 2, 231, 226, 44, 15, 10, 20, 227, 92, 2, 92, - 175, 35, 15, 10, 20, 227, 92, 2, 62, 35, 15, 10, 20, 254, 249, 2, 92, - 175, 35, 15, 10, 20, 254, 249, 2, 62, 35, 15, 10, 20, 246, 64, 2, 92, - 175, 35, 15, 10, 20, 246, 64, 2, 62, 35, 15, 10, 20, 230, 202, 2, 92, - 175, 35, 15, 10, 20, 230, 202, 2, 62, 35, 15, 10, 20, 229, 111, 2, 92, - 175, 35, 15, 10, 20, 229, 111, 2, 62, 35, 15, 10, 20, 101, 2, 92, 175, - 35, 15, 10, 20, 101, 2, 62, 35, 15, 10, 20, 123, 2, 92, 175, 35, 15, 10, - 20, 123, 2, 62, 35, 15, 10, 20, 202, 2, 92, 175, 35, 15, 10, 20, 202, 2, - 62, 35, 15, 10, 20, 231, 25, 2, 92, 175, 35, 15, 10, 20, 231, 25, 2, 62, - 35, 15, 10, 20, 250, 185, 2, 92, 175, 35, 15, 10, 20, 250, 185, 2, 62, - 35, 15, 10, 20, 229, 111, 2, 123, 35, 15, 10, 20, 229, 111, 2, 101, 35, - 15, 10, 20, 229, 111, 2, 202, 35, 15, 10, 20, 229, 111, 2, 55, 35, 15, - 10, 20, 229, 111, 2, 231, 226, 35, 15, 10, 20, 230, 202, 2, 231, 226, 35, - 15, 10, 20, 231, 25, 2, 231, 226, 35, 15, 10, 20, 250, 185, 2, 231, 226, - 35, 15, 10, 20, 229, 111, 2, 123, 59, 15, 10, 20, 229, 111, 2, 101, 59, - 15, 10, 20, 229, 111, 2, 202, 59, 15, 10, 20, 229, 111, 2, 55, 59, 15, - 10, 20, 230, 202, 2, 245, 108, 59, 15, 10, 20, 229, 111, 2, 245, 108, 59, - 15, 10, 20, 227, 92, 2, 55, 59, 15, 10, 20, 230, 202, 2, 123, 124, 15, - 10, 20, 230, 202, 2, 101, 124, 15, 10, 20, 230, 202, 2, 202, 124, 15, 10, - 20, 229, 111, 2, 123, 124, 15, 10, 20, 229, 111, 2, 101, 124, 15, 10, 20, - 229, 111, 2, 202, 124, 15, 10, 20, 227, 92, 2, 55, 124, 15, 10, 20, 223, - 114, 2, 55, 124, 15, 10, 20, 92, 2, 247, 103, 35, 15, 10, 20, 92, 2, 247, - 103, 44, 15, 234, 24, 42, 233, 180, 234, 24, 41, 233, 180, 10, 20, 227, - 35, 2, 123, 2, 55, 59, 15, 10, 20, 227, 35, 2, 101, 2, 123, 35, 15, 10, - 20, 227, 35, 2, 101, 2, 123, 59, 15, 10, 20, 227, 35, 2, 101, 2, 55, 59, - 15, 10, 20, 227, 35, 2, 202, 2, 55, 59, 15, 10, 20, 227, 35, 2, 55, 2, - 123, 59, 15, 10, 20, 227, 35, 2, 55, 2, 101, 59, 15, 10, 20, 227, 35, 2, - 55, 2, 202, 59, 15, 10, 20, 123, 2, 55, 2, 101, 35, 15, 10, 20, 123, 2, - 55, 2, 101, 59, 15, 10, 20, 101, 2, 55, 2, 62, 35, 15, 10, 20, 101, 2, - 55, 2, 92, 175, 35, 15, 10, 20, 230, 202, 2, 101, 2, 123, 59, 15, 10, 20, - 230, 202, 2, 123, 2, 101, 59, 15, 10, 20, 230, 202, 2, 123, 2, 92, 175, - 35, 15, 10, 20, 230, 202, 2, 55, 2, 101, 35, 15, 10, 20, 230, 202, 2, 55, - 2, 101, 59, 15, 10, 20, 230, 202, 2, 55, 2, 123, 59, 15, 10, 20, 230, - 202, 2, 55, 2, 55, 35, 15, 10, 20, 230, 202, 2, 55, 2, 55, 59, 15, 10, - 20, 231, 25, 2, 101, 2, 101, 35, 15, 10, 20, 231, 25, 2, 101, 2, 101, 59, - 15, 10, 20, 231, 25, 2, 55, 2, 55, 35, 15, 10, 20, 229, 111, 2, 101, 2, - 55, 35, 15, 10, 20, 229, 111, 2, 101, 2, 55, 59, 15, 10, 20, 229, 111, 2, - 123, 2, 62, 35, 15, 10, 20, 229, 111, 2, 55, 2, 202, 35, 15, 10, 20, 229, - 111, 2, 55, 2, 202, 59, 15, 10, 20, 229, 111, 2, 55, 2, 55, 35, 15, 10, - 20, 229, 111, 2, 55, 2, 55, 59, 15, 10, 20, 250, 185, 2, 101, 2, 92, 175, - 35, 15, 10, 20, 250, 185, 2, 202, 2, 55, 35, 15, 10, 20, 250, 185, 2, - 202, 2, 55, 59, 15, 10, 20, 227, 92, 2, 55, 2, 101, 35, 15, 10, 20, 227, - 92, 2, 55, 2, 101, 59, 15, 10, 20, 227, 92, 2, 55, 2, 55, 59, 15, 10, 20, - 227, 92, 2, 55, 2, 62, 35, 15, 10, 20, 254, 249, 2, 123, 2, 55, 35, 15, - 10, 20, 254, 249, 2, 55, 2, 55, 35, 15, 10, 20, 254, 249, 2, 55, 2, 55, - 59, 15, 10, 20, 254, 249, 2, 55, 2, 92, 175, 35, 15, 10, 20, 246, 64, 2, - 55, 2, 55, 35, 15, 10, 20, 246, 64, 2, 55, 2, 62, 35, 15, 10, 20, 246, - 64, 2, 55, 2, 92, 175, 35, 15, 10, 20, 247, 88, 2, 202, 2, 55, 35, 15, - 10, 20, 247, 88, 2, 202, 2, 55, 59, 15, 10, 20, 232, 132, 2, 55, 2, 101, - 35, 15, 10, 20, 232, 132, 2, 55, 2, 55, 35, 15, 10, 20, 216, 2, 101, 2, - 55, 35, 15, 10, 20, 216, 2, 101, 2, 62, 35, 15, 10, 20, 216, 2, 101, 2, - 92, 175, 35, 15, 10, 20, 216, 2, 123, 2, 123, 59, 15, 10, 20, 216, 2, - 123, 2, 123, 35, 15, 10, 20, 216, 2, 202, 2, 55, 35, 15, 10, 20, 216, 2, - 202, 2, 55, 59, 15, 10, 20, 216, 2, 55, 2, 101, 35, 15, 10, 20, 216, 2, - 55, 2, 101, 59, 15, 10, 20, 55, 2, 101, 2, 123, 59, 15, 10, 20, 55, 2, - 101, 2, 55, 59, 15, 10, 20, 55, 2, 101, 2, 62, 35, 15, 10, 20, 55, 2, - 123, 2, 101, 59, 15, 10, 20, 55, 2, 123, 2, 55, 59, 15, 10, 20, 55, 2, - 202, 2, 123, 59, 15, 10, 20, 55, 2, 202, 2, 55, 59, 15, 10, 20, 55, 2, - 123, 2, 202, 59, 15, 10, 20, 245, 108, 2, 55, 2, 123, 59, 15, 10, 20, - 245, 108, 2, 55, 2, 55, 59, 15, 10, 20, 234, 252, 2, 101, 2, 55, 59, 15, - 10, 20, 234, 252, 2, 101, 2, 92, 175, 35, 15, 10, 20, 234, 252, 2, 123, - 2, 55, 35, 15, 10, 20, 234, 252, 2, 123, 2, 55, 59, 15, 10, 20, 234, 252, - 2, 123, 2, 92, 175, 35, 15, 10, 20, 234, 252, 2, 55, 2, 62, 35, 15, 10, - 20, 234, 252, 2, 55, 2, 92, 175, 35, 15, 10, 20, 62, 2, 55, 2, 55, 35, - 15, 10, 20, 62, 2, 55, 2, 55, 59, 15, 10, 20, 252, 224, 2, 202, 2, 62, - 35, 15, 10, 20, 227, 35, 2, 123, 2, 62, 35, 15, 10, 20, 227, 35, 2, 123, - 2, 92, 175, 35, 15, 10, 20, 227, 35, 2, 202, 2, 62, 35, 15, 10, 20, 227, - 35, 2, 202, 2, 92, 175, 35, 15, 10, 20, 227, 35, 2, 55, 2, 62, 35, 15, - 10, 20, 227, 35, 2, 55, 2, 92, 175, 35, 15, 10, 20, 123, 2, 55, 2, 62, - 35, 15, 10, 20, 123, 2, 101, 2, 92, 175, 35, 15, 10, 20, 123, 2, 55, 2, - 92, 175, 35, 15, 10, 20, 230, 202, 2, 202, 2, 92, 175, 35, 15, 10, 20, - 231, 25, 2, 101, 2, 62, 35, 15, 10, 20, 229, 111, 2, 101, 2, 62, 35, 15, - 10, 20, 250, 185, 2, 101, 2, 62, 35, 15, 10, 20, 216, 2, 123, 2, 62, 35, - 15, 10, 20, 216, 2, 55, 2, 62, 35, 15, 10, 20, 62, 2, 101, 2, 62, 35, 15, - 10, 20, 62, 2, 123, 2, 62, 35, 15, 10, 20, 62, 2, 55, 2, 62, 35, 15, 10, - 20, 55, 2, 55, 2, 62, 35, 15, 10, 20, 232, 132, 2, 55, 2, 62, 35, 15, 10, - 20, 234, 252, 2, 101, 2, 62, 35, 15, 10, 20, 232, 132, 2, 55, 2, 101, 59, - 15, 10, 20, 216, 2, 101, 2, 55, 59, 15, 10, 20, 254, 249, 2, 55, 2, 62, - 35, 15, 10, 20, 239, 60, 2, 55, 2, 62, 35, 15, 10, 20, 234, 252, 2, 123, - 2, 101, 59, 15, 10, 20, 55, 2, 202, 2, 62, 35, 15, 10, 20, 216, 2, 123, - 2, 55, 59, 15, 10, 20, 239, 60, 2, 55, 2, 55, 35, 15, 10, 20, 216, 2, - 123, 2, 55, 35, 15, 10, 20, 234, 252, 2, 123, 2, 101, 35, 15, 10, 20, - 123, 2, 101, 2, 62, 35, 15, 10, 20, 101, 2, 123, 2, 62, 35, 15, 10, 20, - 55, 2, 123, 2, 62, 35, 15, 10, 20, 247, 88, 2, 55, 2, 62, 35, 15, 10, 20, - 252, 224, 2, 101, 2, 62, 35, 15, 10, 20, 239, 60, 2, 55, 2, 55, 59, 15, - 10, 20, 254, 249, 2, 123, 2, 55, 59, 15, 10, 20, 231, 25, 2, 55, 2, 55, - 59, 15, 10, 20, 230, 202, 2, 202, 2, 62, 35, 15, 10, 20, 234, 252, 2, - 123, 2, 62, 35, 15, 10, 20, 231, 9, 225, 85, 254, 87, 238, 134, 228, 39, - 5, 44, 15, 10, 20, 232, 128, 225, 85, 254, 87, 238, 134, 228, 39, 5, 44, - 15, 10, 20, 254, 215, 44, 15, 10, 20, 254, 237, 44, 15, 10, 20, 236, 97, - 44, 15, 10, 20, 231, 10, 44, 15, 10, 20, 231, 254, 44, 15, 10, 20, 254, - 229, 44, 15, 10, 20, 224, 160, 44, 15, 10, 20, 231, 9, 44, 15, 10, 20, - 231, 8, 254, 229, 224, 159, 10, 20, 239, 176, 231, 179, 53, 10, 20, 252, - 158, 254, 132, 254, 133, 38, 230, 192, 38, 230, 81, 38, 230, 13, 38, 230, - 2, 38, 229, 247, 38, 229, 236, 38, 229, 225, 38, 229, 214, 38, 229, 203, - 38, 230, 191, 38, 230, 180, 38, 230, 169, 38, 230, 158, 38, 230, 147, 38, - 230, 136, 38, 230, 125, 232, 208, 211, 32, 61, 251, 54, 232, 208, 211, - 32, 61, 90, 251, 54, 232, 208, 211, 32, 61, 90, 246, 218, 228, 38, 232, - 208, 211, 32, 61, 251, 61, 232, 208, 211, 32, 61, 229, 186, 232, 208, - 211, 32, 61, 247, 149, 76, 232, 208, 211, 32, 61, 232, 69, 76, 232, 208, - 211, 32, 61, 42, 63, 237, 217, 104, 232, 208, 211, 32, 61, 41, 63, 237, - 217, 252, 114, 232, 208, 211, 32, 61, 169, 247, 249, 36, 20, 42, 245, - 151, 36, 20, 41, 245, 151, 36, 47, 226, 159, 42, 245, 151, 36, 47, 226, - 159, 41, 245, 151, 36, 237, 64, 42, 245, 151, 36, 237, 64, 41, 245, 151, - 36, 251, 37, 237, 63, 232, 208, 211, 32, 61, 135, 56, 237, 242, 232, 208, - 211, 32, 61, 247, 248, 250, 130, 232, 208, 211, 32, 61, 247, 240, 250, - 130, 232, 208, 211, 32, 61, 184, 237, 170, 232, 208, 211, 32, 61, 224, - 146, 184, 237, 170, 232, 208, 211, 32, 61, 42, 233, 180, 232, 208, 211, - 32, 61, 41, 233, 180, 232, 208, 211, 32, 61, 42, 250, 223, 104, 232, 208, - 211, 32, 61, 41, 250, 223, 104, 232, 208, 211, 32, 61, 42, 226, 100, 229, - 104, 104, 232, 208, 211, 32, 61, 41, 226, 100, 229, 104, 104, 232, 208, - 211, 32, 61, 42, 86, 237, 217, 104, 232, 208, 211, 32, 61, 41, 86, 237, - 217, 104, 232, 208, 211, 32, 61, 42, 47, 254, 182, 104, 232, 208, 211, - 32, 61, 41, 47, 254, 182, 104, 232, 208, 211, 32, 61, 42, 254, 182, 104, - 232, 208, 211, 32, 61, 41, 254, 182, 104, 232, 208, 211, 32, 61, 42, 251, - 11, 104, 232, 208, 211, 32, 61, 41, 251, 11, 104, 232, 208, 211, 32, 61, - 42, 63, 251, 11, 104, 232, 208, 211, 32, 61, 41, 63, 251, 11, 104, 229, - 168, 249, 140, 63, 229, 168, 249, 140, 232, 208, 211, 32, 61, 42, 37, - 104, 232, 208, 211, 32, 61, 41, 37, 104, 250, 129, 234, 1, 251, 216, 234, - 1, 224, 146, 234, 1, 47, 224, 146, 234, 1, 250, 129, 184, 237, 170, 251, - 216, 184, 237, 170, 224, 146, 184, 237, 170, 3, 251, 54, 3, 90, 251, 54, - 3, 246, 218, 228, 38, 3, 229, 186, 3, 251, 61, 3, 232, 69, 76, 3, 247, - 149, 76, 3, 247, 248, 250, 130, 3, 42, 233, 180, 3, 41, 233, 180, 3, 42, - 250, 223, 104, 3, 41, 250, 223, 104, 3, 42, 226, 100, 229, 104, 104, 3, - 41, 226, 100, 229, 104, 104, 3, 65, 53, 3, 254, 193, 3, 254, 69, 3, 79, - 53, 3, 244, 94, 3, 237, 213, 53, 3, 245, 231, 53, 3, 247, 204, 53, 3, - 231, 193, 228, 161, 3, 249, 150, 53, 3, 233, 123, 53, 3, 251, 53, 254, - 62, 10, 247, 103, 44, 15, 10, 227, 64, 2, 247, 103, 46, 10, 250, 155, 44, - 15, 10, 227, 90, 246, 234, 10, 239, 22, 44, 15, 10, 247, 105, 44, 15, 10, - 247, 105, 124, 15, 10, 250, 157, 44, 15, 10, 250, 157, 124, 15, 10, 239, - 24, 44, 15, 10, 239, 24, 124, 15, 10, 229, 138, 44, 15, 10, 229, 138, - 124, 15, 10, 227, 235, 44, 15, 10, 227, 235, 124, 15, 10, 1, 164, 44, 15, - 10, 1, 92, 2, 237, 59, 64, 44, 15, 10, 1, 92, 2, 237, 59, 64, 35, 15, 10, - 1, 92, 2, 164, 64, 44, 15, 10, 1, 92, 2, 164, 64, 35, 15, 10, 1, 224, - 145, 2, 164, 64, 44, 15, 10, 1, 224, 145, 2, 164, 64, 35, 15, 10, 1, 92, - 2, 164, 252, 214, 44, 15, 10, 1, 92, 2, 164, 252, 214, 35, 15, 10, 1, 62, - 2, 164, 64, 44, 15, 10, 1, 62, 2, 164, 64, 35, 15, 10, 1, 62, 2, 164, 64, - 59, 15, 10, 1, 62, 2, 164, 64, 124, 15, 10, 1, 92, 44, 15, 10, 1, 92, 35, - 15, 10, 1, 252, 224, 44, 15, 10, 1, 252, 224, 35, 15, 10, 1, 252, 224, - 59, 15, 10, 1, 252, 224, 124, 15, 10, 1, 227, 35, 237, 23, 44, 15, 10, 1, - 227, 35, 237, 23, 35, 15, 10, 1, 227, 35, 44, 15, 10, 1, 227, 35, 35, 15, - 10, 1, 227, 35, 59, 15, 10, 1, 227, 35, 124, 15, 10, 1, 226, 237, 44, 15, - 10, 1, 226, 237, 35, 15, 10, 1, 226, 237, 59, 15, 10, 1, 226, 237, 124, - 15, 10, 1, 123, 44, 15, 10, 1, 123, 35, 15, 10, 1, 123, 59, 15, 10, 1, - 123, 124, 15, 10, 1, 101, 44, 15, 10, 1, 101, 35, 15, 10, 1, 101, 59, 15, - 10, 1, 101, 124, 15, 10, 1, 202, 44, 15, 10, 1, 202, 35, 15, 10, 1, 202, - 59, 15, 10, 1, 202, 124, 15, 10, 1, 250, 166, 44, 15, 10, 1, 250, 166, - 35, 15, 10, 1, 226, 246, 44, 15, 10, 1, 226, 246, 35, 15, 10, 1, 231, - 226, 44, 15, 10, 1, 231, 226, 35, 15, 10, 1, 223, 111, 44, 15, 10, 1, - 223, 111, 35, 15, 10, 1, 230, 202, 44, 15, 10, 1, 230, 202, 35, 15, 10, - 1, 230, 202, 59, 15, 10, 1, 230, 202, 124, 15, 10, 1, 229, 111, 44, 15, - 10, 1, 229, 111, 35, 15, 10, 1, 229, 111, 59, 15, 10, 1, 229, 111, 124, - 15, 10, 1, 231, 25, 44, 15, 10, 1, 231, 25, 35, 15, 10, 1, 231, 25, 59, - 15, 10, 1, 231, 25, 124, 15, 10, 1, 250, 185, 44, 15, 10, 1, 250, 185, - 35, 15, 10, 1, 250, 185, 59, 15, 10, 1, 250, 185, 124, 15, 10, 1, 227, - 92, 44, 15, 10, 1, 227, 92, 35, 15, 10, 1, 227, 92, 59, 15, 10, 1, 227, - 92, 124, 15, 10, 1, 223, 114, 44, 15, 10, 1, 223, 114, 35, 15, 10, 1, - 223, 114, 59, 15, 10, 1, 223, 114, 124, 15, 10, 1, 254, 249, 44, 15, 10, - 1, 254, 249, 35, 15, 10, 1, 254, 249, 59, 15, 10, 1, 254, 249, 124, 15, - 10, 1, 246, 64, 44, 15, 10, 1, 246, 64, 35, 15, 10, 1, 246, 64, 59, 15, - 10, 1, 246, 64, 124, 15, 10, 1, 247, 88, 44, 15, 10, 1, 247, 88, 35, 15, - 10, 1, 247, 88, 59, 15, 10, 1, 247, 88, 124, 15, 10, 1, 232, 132, 44, 15, - 10, 1, 232, 132, 35, 15, 10, 1, 232, 132, 59, 15, 10, 1, 232, 132, 124, - 15, 10, 1, 239, 60, 44, 15, 10, 1, 239, 60, 35, 15, 10, 1, 239, 60, 59, - 15, 10, 1, 239, 60, 124, 15, 10, 1, 216, 44, 15, 10, 1, 216, 35, 15, 10, - 1, 216, 59, 15, 10, 1, 216, 124, 15, 10, 1, 55, 44, 15, 10, 1, 55, 35, - 15, 10, 1, 55, 59, 15, 10, 1, 55, 124, 15, 10, 1, 234, 252, 44, 15, 10, - 1, 234, 252, 35, 15, 10, 1, 234, 252, 59, 15, 10, 1, 234, 252, 124, 15, - 10, 1, 245, 108, 44, 15, 10, 1, 245, 108, 35, 15, 10, 1, 245, 108, 59, - 15, 10, 1, 245, 108, 124, 15, 10, 1, 224, 145, 44, 15, 10, 1, 224, 145, - 35, 15, 10, 1, 92, 175, 44, 15, 10, 1, 92, 175, 35, 15, 10, 1, 62, 44, - 15, 10, 1, 62, 35, 15, 10, 1, 62, 59, 15, 10, 1, 62, 124, 15, 10, 20, - 216, 2, 92, 2, 237, 59, 64, 44, 15, 10, 20, 216, 2, 92, 2, 237, 59, 64, - 35, 15, 10, 20, 216, 2, 92, 2, 164, 64, 44, 15, 10, 20, 216, 2, 92, 2, - 164, 64, 35, 15, 10, 20, 216, 2, 92, 2, 164, 252, 214, 44, 15, 10, 20, - 216, 2, 92, 2, 164, 252, 214, 35, 15, 10, 20, 216, 2, 92, 44, 15, 10, 20, - 216, 2, 92, 35, 15, 223, 90, 224, 115, 235, 5, 228, 145, 100, 247, 149, - 76, 100, 232, 57, 76, 100, 65, 53, 100, 249, 150, 53, 100, 233, 123, 53, - 100, 254, 193, 100, 254, 144, 100, 42, 233, 180, 100, 41, 233, 180, 100, - 254, 69, 100, 79, 53, 100, 251, 54, 100, 244, 94, 100, 246, 218, 228, 38, - 100, 228, 161, 100, 21, 223, 89, 100, 21, 118, 100, 21, 113, 100, 21, - 166, 100, 21, 158, 100, 21, 173, 100, 21, 183, 100, 21, 194, 100, 21, - 187, 100, 21, 192, 100, 251, 61, 100, 229, 186, 100, 237, 213, 53, 100, - 247, 204, 53, 100, 245, 231, 53, 100, 232, 69, 76, 100, 251, 53, 254, 62, - 100, 7, 6, 1, 57, 100, 7, 6, 1, 254, 27, 100, 7, 6, 1, 252, 44, 100, 7, - 6, 1, 222, 222, 100, 7, 6, 1, 72, 100, 7, 6, 1, 247, 130, 100, 7, 6, 1, - 214, 100, 7, 6, 1, 212, 100, 7, 6, 1, 74, 100, 7, 6, 1, 239, 182, 100, 7, - 6, 1, 239, 76, 100, 7, 6, 1, 149, 100, 7, 6, 1, 185, 100, 7, 6, 1, 199, - 100, 7, 6, 1, 73, 100, 7, 6, 1, 233, 244, 100, 7, 6, 1, 232, 139, 100, 7, - 6, 1, 146, 100, 7, 6, 1, 193, 100, 7, 6, 1, 227, 109, 100, 7, 6, 1, 66, - 100, 7, 6, 1, 196, 100, 7, 6, 1, 224, 174, 100, 7, 6, 1, 224, 73, 100, 7, - 6, 1, 224, 25, 100, 7, 6, 1, 223, 119, 100, 42, 37, 104, 100, 231, 193, - 228, 161, 100, 41, 37, 104, 100, 251, 102, 255, 41, 100, 184, 237, 170, - 100, 245, 237, 255, 41, 100, 7, 3, 1, 57, 100, 7, 3, 1, 254, 27, 100, 7, - 3, 1, 252, 44, 100, 7, 3, 1, 222, 222, 100, 7, 3, 1, 72, 100, 7, 3, 1, - 247, 130, 100, 7, 3, 1, 214, 100, 7, 3, 1, 212, 100, 7, 3, 1, 74, 100, 7, - 3, 1, 239, 182, 100, 7, 3, 1, 239, 76, 100, 7, 3, 1, 149, 100, 7, 3, 1, - 185, 100, 7, 3, 1, 199, 100, 7, 3, 1, 73, 100, 7, 3, 1, 233, 244, 100, 7, - 3, 1, 232, 139, 100, 7, 3, 1, 146, 100, 7, 3, 1, 193, 100, 7, 3, 1, 227, - 109, 100, 7, 3, 1, 66, 100, 7, 3, 1, 196, 100, 7, 3, 1, 224, 174, 100, 7, - 3, 1, 224, 73, 100, 7, 3, 1, 224, 25, 100, 7, 3, 1, 223, 119, 100, 42, - 250, 223, 104, 100, 61, 237, 170, 100, 41, 250, 223, 104, 100, 205, 100, - 42, 63, 233, 180, 100, 41, 63, 233, 180, 83, 90, 246, 218, 228, 38, 83, - 42, 251, 11, 104, 83, 41, 251, 11, 104, 83, 90, 251, 54, 83, 48, 236, - 154, 249, 140, 83, 48, 1, 224, 105, 83, 48, 1, 3, 57, 83, 48, 1, 3, 74, - 83, 48, 1, 3, 66, 83, 48, 1, 3, 72, 83, 48, 1, 3, 73, 83, 48, 1, 3, 191, - 83, 48, 1, 3, 223, 158, 83, 48, 1, 3, 223, 183, 83, 48, 1, 3, 225, 250, - 83, 239, 19, 232, 194, 228, 155, 76, 83, 48, 1, 57, 83, 48, 1, 74, 83, - 48, 1, 66, 83, 48, 1, 72, 83, 48, 1, 73, 83, 48, 1, 177, 83, 48, 1, 238, - 199, 83, 48, 1, 238, 107, 83, 48, 1, 239, 3, 83, 48, 1, 238, 150, 83, 48, - 1, 231, 31, 83, 48, 1, 229, 15, 83, 48, 1, 228, 6, 83, 48, 1, 230, 213, - 83, 48, 1, 228, 169, 83, 48, 1, 227, 107, 83, 48, 1, 226, 175, 83, 48, 1, - 225, 250, 83, 48, 1, 227, 44, 83, 48, 1, 96, 83, 48, 1, 236, 1, 83, 48, - 1, 235, 89, 83, 48, 1, 234, 206, 83, 48, 1, 235, 162, 83, 48, 1, 235, 6, - 83, 48, 1, 154, 83, 48, 1, 245, 75, 83, 48, 1, 244, 145, 83, 48, 1, 245, - 121, 83, 48, 1, 244, 227, 83, 48, 1, 198, 83, 48, 1, 236, 157, 83, 48, 1, - 236, 66, 83, 48, 1, 236, 235, 83, 48, 1, 236, 103, 83, 48, 1, 191, 83, - 48, 1, 223, 158, 83, 48, 1, 223, 183, 83, 48, 1, 208, 83, 48, 1, 231, - 180, 83, 48, 1, 231, 70, 83, 48, 1, 231, 244, 83, 48, 1, 231, 122, 83, - 48, 1, 224, 173, 83, 48, 1, 199, 83, 48, 224, 204, 228, 155, 76, 83, 48, - 229, 191, 228, 155, 76, 83, 26, 247, 52, 83, 26, 1, 238, 173, 83, 26, 1, - 228, 104, 83, 26, 1, 238, 171, 83, 26, 1, 235, 82, 83, 26, 1, 235, 81, - 83, 26, 1, 235, 80, 83, 26, 1, 226, 163, 83, 26, 1, 228, 99, 83, 26, 1, - 231, 174, 83, 26, 1, 231, 170, 83, 26, 1, 231, 168, 83, 26, 1, 231, 162, - 83, 26, 1, 231, 159, 83, 26, 1, 231, 157, 83, 26, 1, 231, 163, 83, 26, 1, - 231, 173, 83, 26, 1, 236, 148, 83, 26, 1, 233, 60, 83, 26, 1, 228, 102, - 83, 26, 1, 233, 52, 83, 26, 1, 228, 236, 83, 26, 1, 228, 100, 83, 26, 1, - 240, 68, 83, 26, 1, 251, 113, 83, 26, 1, 228, 107, 83, 26, 1, 251, 167, - 83, 26, 1, 238, 210, 83, 26, 1, 226, 218, 83, 26, 1, 233, 85, 83, 26, 1, - 245, 69, 83, 26, 1, 57, 83, 26, 1, 255, 19, 83, 26, 1, 191, 83, 26, 1, - 224, 10, 83, 26, 1, 247, 217, 83, 26, 1, 72, 83, 26, 1, 223, 221, 83, 26, - 1, 223, 228, 83, 26, 1, 73, 83, 26, 1, 224, 173, 83, 26, 1, 224, 170, 83, - 26, 1, 234, 88, 83, 26, 1, 223, 183, 83, 26, 1, 66, 83, 26, 1, 224, 133, - 83, 26, 1, 224, 141, 83, 26, 1, 224, 118, 83, 26, 1, 223, 158, 83, 26, 1, - 247, 165, 83, 26, 1, 223, 202, 83, 26, 1, 74, 100, 251, 220, 53, 100, - 232, 234, 53, 100, 190, 53, 100, 237, 63, 100, 252, 99, 125, 100, 223, - 222, 53, 100, 224, 100, 53, 83, 246, 248, 157, 225, 30, 83, 117, 58, 83, - 225, 106, 58, 83, 81, 58, 83, 248, 125, 58, 83, 86, 228, 120, 83, 63, - 251, 106, 239, 233, 254, 175, 254, 188, 239, 233, 254, 175, 229, 173, - 239, 233, 254, 175, 227, 16, 234, 98, 231, 209, 251, 191, 231, 209, 251, - 191, 50, 45, 4, 254, 19, 57, 50, 45, 4, 253, 246, 72, 50, 45, 4, 253, - 255, 74, 50, 45, 4, 253, 223, 73, 50, 45, 4, 254, 17, 66, 50, 45, 4, 254, - 26, 250, 189, 50, 45, 4, 253, 239, 250, 77, 50, 45, 4, 254, 20, 250, 4, - 50, 45, 4, 254, 13, 249, 161, 50, 45, 4, 253, 233, 248, 107, 50, 45, 4, - 253, 227, 239, 179, 50, 45, 4, 253, 238, 239, 170, 50, 45, 4, 253, 248, - 239, 117, 50, 45, 4, 253, 219, 239, 101, 50, 45, 4, 253, 207, 177, 50, - 45, 4, 253, 240, 239, 3, 50, 45, 4, 253, 217, 238, 199, 50, 45, 4, 253, - 214, 238, 150, 50, 45, 4, 253, 203, 238, 107, 50, 45, 4, 253, 204, 198, - 50, 45, 4, 254, 14, 236, 235, 50, 45, 4, 253, 211, 236, 157, 50, 45, 4, - 254, 12, 236, 103, 50, 45, 4, 254, 4, 236, 66, 50, 45, 4, 254, 21, 236, - 1, 50, 45, 4, 254, 3, 235, 162, 50, 45, 4, 253, 253, 235, 89, 50, 45, 4, - 253, 232, 235, 6, 50, 45, 4, 253, 229, 234, 206, 50, 45, 4, 254, 24, 213, - 50, 45, 4, 253, 212, 233, 151, 50, 45, 4, 253, 245, 233, 69, 50, 45, 4, - 254, 16, 233, 4, 50, 45, 4, 253, 234, 232, 173, 50, 45, 4, 254, 11, 232, - 138, 50, 45, 4, 253, 206, 232, 119, 50, 45, 4, 254, 6, 232, 104, 50, 45, - 4, 253, 251, 232, 95, 50, 45, 4, 253, 224, 208, 50, 45, 4, 254, 0, 231, - 244, 50, 45, 4, 253, 231, 231, 180, 50, 45, 4, 254, 25, 231, 122, 50, 45, - 4, 254, 1, 231, 70, 50, 45, 4, 253, 252, 231, 31, 50, 45, 4, 254, 18, - 230, 213, 50, 45, 4, 253, 243, 229, 15, 50, 45, 4, 254, 15, 228, 169, 50, - 45, 4, 253, 226, 228, 6, 50, 45, 4, 253, 225, 227, 107, 50, 45, 4, 254, - 23, 227, 44, 50, 45, 4, 253, 247, 226, 175, 50, 45, 4, 254, 22, 96, 50, - 45, 4, 253, 215, 225, 250, 50, 45, 4, 253, 230, 224, 173, 50, 45, 4, 253, - 209, 224, 141, 50, 45, 4, 253, 244, 224, 118, 50, 45, 4, 253, 242, 224, - 105, 50, 45, 4, 254, 10, 223, 117, 50, 45, 4, 253, 210, 223, 97, 50, 45, - 4, 254, 7, 223, 27, 50, 45, 4, 254, 2, 255, 65, 50, 45, 4, 253, 241, 255, - 64, 50, 45, 4, 253, 200, 254, 53, 50, 45, 4, 253, 213, 248, 78, 50, 45, - 4, 253, 196, 248, 77, 50, 45, 4, 253, 236, 234, 177, 50, 45, 4, 253, 254, - 232, 172, 50, 45, 4, 253, 222, 232, 175, 50, 45, 4, 253, 208, 232, 24, - 50, 45, 4, 253, 250, 232, 23, 50, 45, 4, 253, 216, 231, 121, 50, 45, 4, - 253, 218, 227, 105, 50, 45, 4, 253, 198, 225, 220, 50, 45, 4, 253, 195, - 113, 50, 45, 14, 254, 9, 50, 45, 14, 254, 8, 50, 45, 14, 254, 5, 50, 45, - 14, 253, 249, 50, 45, 14, 253, 237, 50, 45, 14, 253, 235, 50, 45, 14, - 253, 228, 50, 45, 14, 253, 221, 50, 45, 14, 253, 220, 50, 45, 14, 253, - 205, 50, 45, 14, 253, 202, 50, 45, 14, 253, 201, 50, 45, 14, 253, 199, - 50, 45, 14, 253, 197, 50, 45, 89, 253, 194, 237, 35, 50, 45, 89, 253, - 193, 224, 101, 50, 45, 89, 253, 192, 250, 65, 50, 45, 89, 253, 191, 247, - 201, 50, 45, 89, 253, 190, 237, 18, 50, 45, 89, 253, 189, 228, 64, 50, - 45, 89, 253, 188, 247, 154, 50, 45, 89, 253, 187, 232, 6, 50, 45, 89, - 253, 186, 229, 113, 50, 45, 89, 253, 185, 245, 120, 50, 45, 89, 253, 184, - 228, 150, 50, 45, 89, 253, 183, 252, 136, 50, 45, 89, 253, 182, 250, 253, - 50, 45, 89, 253, 181, 252, 85, 50, 45, 89, 253, 180, 224, 126, 50, 45, - 89, 253, 179, 253, 33, 50, 45, 89, 253, 178, 234, 70, 50, 45, 89, 253, - 177, 228, 136, 50, 45, 89, 253, 176, 250, 198, 50, 45, 236, 92, 253, 175, - 239, 37, 50, 45, 236, 92, 253, 174, 239, 44, 50, 45, 89, 253, 173, 234, - 79, 50, 45, 89, 253, 172, 224, 109, 50, 45, 89, 253, 171, 50, 45, 236, - 92, 253, 170, 254, 116, 50, 45, 236, 92, 253, 169, 236, 208, 50, 45, 89, - 253, 168, 252, 98, 50, 45, 89, 253, 167, 246, 6, 50, 45, 89, 253, 166, - 50, 45, 89, 253, 165, 224, 95, 50, 45, 89, 253, 164, 50, 45, 89, 253, - 163, 50, 45, 89, 253, 162, 244, 160, 50, 45, 89, 253, 161, 50, 45, 89, - 253, 160, 50, 45, 89, 253, 159, 50, 45, 236, 92, 253, 157, 225, 231, 50, - 45, 89, 253, 156, 50, 45, 89, 253, 155, 50, 45, 89, 253, 154, 251, 77, - 50, 45, 89, 253, 153, 50, 45, 89, 253, 152, 50, 45, 89, 253, 151, 246, - 158, 50, 45, 89, 253, 150, 254, 104, 50, 45, 89, 253, 149, 50, 45, 89, - 253, 148, 50, 45, 89, 253, 147, 50, 45, 89, 253, 146, 50, 45, 89, 253, - 145, 50, 45, 89, 253, 144, 50, 45, 89, 253, 143, 50, 45, 89, 253, 142, - 50, 45, 89, 253, 141, 50, 45, 89, 253, 140, 236, 87, 50, 45, 89, 253, - 139, 50, 45, 89, 253, 138, 226, 86, 50, 45, 89, 253, 137, 50, 45, 89, - 253, 136, 50, 45, 89, 253, 135, 50, 45, 89, 253, 134, 50, 45, 89, 253, - 133, 50, 45, 89, 253, 132, 50, 45, 89, 253, 131, 50, 45, 89, 253, 130, - 50, 45, 89, 253, 129, 50, 45, 89, 253, 128, 50, 45, 89, 253, 127, 50, 45, - 89, 253, 126, 245, 102, 50, 45, 89, 253, 105, 247, 0, 50, 45, 89, 253, - 102, 253, 19, 50, 45, 89, 253, 97, 228, 140, 50, 45, 89, 253, 96, 58, 50, - 45, 89, 253, 95, 50, 45, 89, 253, 94, 227, 189, 50, 45, 89, 253, 93, 50, - 45, 89, 253, 92, 50, 45, 89, 253, 91, 224, 122, 251, 188, 50, 45, 89, - 253, 90, 251, 188, 50, 45, 89, 253, 89, 251, 189, 246, 232, 50, 45, 89, - 253, 88, 224, 124, 50, 45, 89, 253, 87, 50, 45, 89, 253, 86, 50, 45, 236, - 92, 253, 85, 249, 202, 50, 45, 89, 253, 84, 50, 45, 89, 253, 83, 50, 45, - 89, 253, 81, 50, 45, 89, 253, 80, 50, 45, 89, 253, 79, 50, 45, 89, 253, - 78, 250, 133, 50, 45, 89, 253, 77, 50, 45, 89, 253, 76, 50, 45, 89, 253, - 75, 50, 45, 89, 253, 74, 50, 45, 89, 253, 73, 50, 45, 89, 224, 233, 253, - 158, 50, 45, 89, 224, 233, 253, 125, 50, 45, 89, 224, 233, 253, 124, 50, - 45, 89, 224, 233, 253, 123, 50, 45, 89, 224, 233, 253, 122, 50, 45, 89, - 224, 233, 253, 121, 50, 45, 89, 224, 233, 253, 120, 50, 45, 89, 224, 233, - 253, 119, 50, 45, 89, 224, 233, 253, 118, 50, 45, 89, 224, 233, 253, 117, - 50, 45, 89, 224, 233, 253, 116, 50, 45, 89, 224, 233, 253, 115, 50, 45, - 89, 224, 233, 253, 114, 50, 45, 89, 224, 233, 253, 113, 50, 45, 89, 224, - 233, 253, 112, 50, 45, 89, 224, 233, 253, 111, 50, 45, 89, 224, 233, 253, - 110, 50, 45, 89, 224, 233, 253, 109, 50, 45, 89, 224, 233, 253, 108, 50, - 45, 89, 224, 233, 253, 107, 50, 45, 89, 224, 233, 253, 106, 50, 45, 89, - 224, 233, 253, 104, 50, 45, 89, 224, 233, 253, 103, 50, 45, 89, 224, 233, - 253, 101, 50, 45, 89, 224, 233, 253, 100, 50, 45, 89, 224, 233, 253, 99, - 50, 45, 89, 224, 233, 253, 98, 50, 45, 89, 224, 233, 253, 82, 50, 45, 89, - 224, 233, 253, 72, 210, 224, 92, 229, 174, 237, 170, 210, 224, 92, 229, - 174, 249, 140, 210, 251, 181, 76, 210, 65, 118, 210, 65, 113, 210, 65, - 166, 210, 65, 158, 210, 65, 173, 210, 65, 183, 210, 65, 194, 210, 65, - 187, 210, 65, 192, 210, 65, 227, 23, 210, 65, 225, 216, 210, 65, 226, - 207, 210, 65, 246, 245, 210, 65, 247, 63, 210, 65, 228, 206, 210, 65, - 229, 159, 210, 65, 248, 12, 210, 65, 235, 57, 210, 65, 168, 244, 135, - 210, 65, 135, 244, 135, 210, 65, 152, 244, 135, 210, 65, 246, 243, 244, - 135, 210, 65, 247, 37, 244, 135, 210, 65, 228, 217, 244, 135, 210, 65, - 229, 163, 244, 135, 210, 65, 248, 20, 244, 135, 210, 65, 235, 61, 244, - 135, 210, 65, 168, 226, 194, 210, 65, 135, 226, 194, 210, 65, 152, 226, - 194, 210, 65, 246, 243, 226, 194, 210, 65, 247, 37, 226, 194, 210, 65, - 228, 217, 226, 194, 210, 65, 229, 163, 226, 194, 210, 65, 248, 20, 226, - 194, 210, 65, 235, 61, 226, 194, 210, 65, 227, 24, 226, 194, 210, 65, - 225, 217, 226, 194, 210, 65, 226, 208, 226, 194, 210, 65, 246, 246, 226, - 194, 210, 65, 247, 64, 226, 194, 210, 65, 228, 207, 226, 194, 210, 65, - 229, 160, 226, 194, 210, 65, 248, 13, 226, 194, 210, 65, 235, 58, 226, - 194, 210, 224, 136, 253, 25, 225, 125, 210, 224, 136, 247, 45, 227, 247, - 210, 224, 136, 230, 209, 227, 247, 210, 224, 136, 226, 214, 227, 247, - 210, 224, 136, 246, 237, 227, 247, 210, 248, 110, 236, 234, 247, 45, 227, - 247, 210, 237, 160, 236, 234, 247, 45, 227, 247, 210, 236, 234, 230, 209, - 227, 247, 210, 236, 234, 226, 214, 227, 247, 19, 255, 36, 254, 55, 168, - 232, 76, 19, 255, 36, 254, 55, 168, 245, 151, 19, 255, 36, 254, 55, 168, - 248, 121, 19, 255, 36, 254, 55, 173, 19, 255, 36, 254, 55, 247, 63, 19, - 255, 36, 254, 55, 247, 37, 244, 135, 19, 255, 36, 254, 55, 247, 37, 226, - 194, 19, 255, 36, 254, 55, 247, 64, 226, 194, 19, 255, 36, 254, 55, 247, - 37, 227, 80, 19, 255, 36, 254, 55, 227, 24, 227, 80, 19, 255, 36, 254, - 55, 247, 64, 227, 80, 19, 255, 36, 254, 55, 168, 244, 136, 227, 80, 19, - 255, 36, 254, 55, 247, 37, 244, 136, 227, 80, 19, 255, 36, 254, 55, 168, - 226, 195, 227, 80, 19, 255, 36, 254, 55, 247, 37, 226, 195, 227, 80, 19, - 255, 36, 254, 55, 247, 37, 228, 55, 19, 255, 36, 254, 55, 227, 24, 228, - 55, 19, 255, 36, 254, 55, 247, 64, 228, 55, 19, 255, 36, 254, 55, 168, - 244, 136, 228, 55, 19, 255, 36, 254, 55, 247, 37, 244, 136, 228, 55, 19, - 255, 36, 254, 55, 168, 226, 195, 228, 55, 19, 255, 36, 254, 55, 227, 24, - 226, 195, 228, 55, 19, 255, 36, 254, 55, 247, 64, 226, 195, 228, 55, 19, - 255, 36, 254, 55, 227, 24, 236, 106, 19, 255, 36, 245, 96, 168, 233, 16, - 19, 255, 36, 226, 225, 118, 19, 255, 36, 245, 94, 118, 19, 255, 36, 247, - 209, 113, 19, 255, 36, 226, 225, 113, 19, 255, 36, 250, 196, 135, 248, - 120, 19, 255, 36, 247, 209, 135, 248, 120, 19, 255, 36, 226, 59, 173, 19, - 255, 36, 226, 59, 227, 23, 19, 255, 36, 226, 59, 227, 24, 254, 203, 15, - 19, 255, 36, 245, 94, 227, 23, 19, 255, 36, 236, 201, 227, 23, 19, 255, - 36, 226, 225, 227, 23, 19, 255, 36, 226, 225, 226, 207, 19, 255, 36, 226, - 59, 247, 63, 19, 255, 36, 226, 59, 247, 64, 254, 203, 15, 19, 255, 36, - 245, 94, 247, 63, 19, 255, 36, 226, 225, 247, 63, 19, 255, 36, 226, 225, - 168, 244, 135, 19, 255, 36, 226, 225, 152, 244, 135, 19, 255, 36, 247, - 209, 247, 37, 244, 135, 19, 255, 36, 226, 59, 247, 37, 244, 135, 19, 255, - 36, 226, 225, 247, 37, 244, 135, 19, 255, 36, 252, 1, 247, 37, 244, 135, - 19, 255, 36, 235, 219, 247, 37, 244, 135, 19, 255, 36, 226, 225, 168, - 226, 194, 19, 255, 36, 226, 225, 247, 37, 226, 194, 19, 255, 36, 250, 50, - 247, 37, 236, 106, 19, 255, 36, 228, 29, 247, 64, 236, 106, 19, 168, 132, - 53, 19, 168, 132, 5, 254, 203, 15, 19, 135, 226, 212, 53, 19, 152, 232, - 75, 53, 19, 223, 226, 53, 19, 227, 81, 53, 19, 248, 122, 53, 19, 234, 95, - 53, 19, 135, 234, 94, 53, 19, 152, 234, 94, 53, 19, 246, 243, 234, 94, - 53, 19, 247, 37, 234, 94, 53, 19, 236, 196, 53, 19, 238, 55, 253, 25, 53, - 19, 237, 156, 53, 19, 234, 11, 53, 19, 224, 66, 53, 19, 254, 89, 53, 19, - 254, 100, 53, 19, 245, 242, 53, 19, 226, 47, 253, 25, 53, 19, 223, 90, - 53, 231, 115, 229, 156, 53, 231, 115, 225, 135, 53, 231, 115, 229, 178, - 53, 231, 115, 229, 154, 53, 231, 115, 249, 217, 229, 154, 53, 231, 115, - 228, 251, 53, 231, 115, 250, 46, 53, 231, 115, 232, 64, 53, 231, 115, - 229, 166, 53, 231, 115, 248, 89, 53, 231, 115, 254, 87, 53, 231, 115, - 251, 215, 53, 233, 94, 249, 198, 5, 233, 145, 233, 94, 249, 198, 5, 233, - 11, 245, 118, 233, 94, 249, 198, 5, 227, 65, 245, 118, 233, 94, 249, 198, - 5, 252, 12, 233, 94, 249, 198, 5, 251, 163, 233, 94, 249, 198, 5, 224, - 101, 233, 94, 249, 198, 5, 245, 102, 233, 94, 249, 198, 5, 246, 150, 233, - 94, 249, 198, 5, 226, 174, 233, 94, 249, 198, 5, 58, 233, 94, 249, 198, - 5, 252, 121, 233, 94, 249, 198, 5, 229, 87, 233, 94, 249, 198, 5, 251, - 73, 233, 94, 249, 198, 5, 237, 34, 233, 94, 249, 198, 5, 236, 255, 233, - 94, 249, 198, 5, 230, 237, 233, 94, 249, 198, 5, 237, 190, 233, 94, 249, - 198, 5, 252, 130, 233, 94, 249, 198, 5, 252, 4, 233, 18, 233, 94, 249, - 198, 5, 249, 151, 233, 94, 249, 198, 5, 251, 58, 233, 94, 249, 198, 5, - 228, 190, 233, 94, 249, 198, 5, 251, 59, 233, 94, 249, 198, 5, 252, 229, - 233, 94, 249, 198, 5, 229, 76, 233, 94, 249, 198, 5, 244, 160, 233, 94, - 249, 198, 5, 245, 74, 233, 94, 249, 198, 5, 252, 82, 237, 229, 233, 94, - 249, 198, 5, 252, 0, 233, 94, 249, 198, 5, 232, 6, 233, 94, 249, 198, 5, - 248, 53, 233, 94, 249, 198, 5, 248, 128, 233, 94, 249, 198, 5, 225, 243, - 233, 94, 249, 198, 5, 252, 232, 233, 94, 249, 198, 5, 233, 19, 226, 86, - 233, 94, 249, 198, 5, 224, 218, 233, 94, 249, 198, 5, 233, 195, 233, 94, - 249, 198, 5, 231, 109, 233, 94, 249, 198, 5, 237, 179, 233, 94, 249, 198, - 5, 233, 254, 253, 66, 233, 94, 249, 198, 5, 247, 11, 233, 94, 249, 198, - 5, 245, 238, 233, 94, 249, 198, 5, 228, 30, 233, 94, 249, 198, 5, 3, 254, - 35, 233, 94, 249, 198, 5, 224, 146, 253, 41, 233, 94, 249, 198, 5, 36, - 234, 97, 82, 237, 79, 1, 57, 237, 79, 1, 72, 237, 79, 1, 254, 27, 237, - 79, 1, 252, 191, 237, 79, 1, 214, 237, 79, 1, 222, 222, 237, 79, 1, 74, - 237, 79, 1, 224, 174, 237, 79, 1, 223, 119, 237, 79, 1, 226, 253, 237, - 79, 1, 239, 182, 237, 79, 1, 239, 76, 237, 79, 1, 232, 139, 237, 79, 1, - 149, 237, 79, 1, 185, 237, 79, 1, 199, 237, 79, 1, 236, 107, 237, 79, 1, - 235, 19, 237, 79, 1, 66, 237, 79, 1, 233, 244, 237, 79, 1, 238, 168, 237, - 79, 1, 146, 237, 79, 1, 193, 237, 79, 1, 227, 109, 237, 79, 1, 226, 22, - 237, 79, 1, 254, 190, 237, 79, 1, 247, 239, 237, 79, 1, 212, 237, 79, 1, - 224, 73, 252, 8, 1, 57, 252, 8, 1, 233, 243, 252, 8, 1, 222, 222, 252, 8, - 1, 149, 252, 8, 1, 225, 75, 252, 8, 1, 146, 252, 8, 1, 237, 247, 252, 8, - 1, 255, 65, 252, 8, 1, 232, 139, 252, 8, 1, 254, 27, 252, 8, 1, 185, 252, - 8, 1, 73, 252, 8, 1, 250, 191, 252, 8, 1, 227, 109, 252, 8, 1, 229, 148, - 252, 8, 1, 229, 147, 252, 8, 1, 193, 252, 8, 1, 252, 43, 252, 8, 1, 66, - 252, 8, 1, 235, 19, 252, 8, 1, 224, 73, 252, 8, 1, 199, 252, 8, 1, 226, - 21, 252, 8, 1, 233, 244, 252, 8, 1, 228, 111, 252, 8, 1, 74, 252, 8, 1, - 72, 252, 8, 1, 225, 72, 252, 8, 1, 239, 76, 252, 8, 1, 239, 75, 252, 8, - 1, 235, 190, 252, 8, 1, 225, 76, 252, 8, 1, 214, 252, 8, 1, 246, 195, - 252, 8, 1, 228, 70, 252, 8, 1, 228, 69, 252, 8, 1, 235, 139, 252, 8, 1, - 240, 47, 252, 8, 1, 252, 42, 252, 8, 1, 226, 22, 252, 8, 1, 225, 74, 252, - 8, 1, 231, 100, 252, 8, 1, 236, 249, 252, 8, 1, 236, 248, 252, 8, 1, 236, - 247, 252, 8, 1, 236, 246, 252, 8, 1, 237, 246, 252, 8, 1, 248, 57, 252, - 8, 1, 225, 73, 84, 27, 1, 57, 84, 27, 1, 252, 238, 84, 27, 1, 239, 3, 84, - 27, 1, 250, 77, 84, 27, 1, 72, 84, 27, 1, 225, 42, 84, 27, 1, 223, 97, - 84, 27, 1, 245, 121, 84, 27, 1, 226, 239, 84, 27, 1, 74, 84, 27, 1, 177, - 84, 27, 1, 248, 2, 84, 27, 1, 247, 247, 84, 27, 1, 247, 239, 84, 27, 1, - 247, 183, 84, 27, 1, 73, 84, 27, 1, 233, 151, 84, 27, 1, 229, 114, 84, - 27, 1, 238, 107, 84, 27, 1, 247, 198, 84, 27, 1, 247, 188, 84, 27, 1, - 227, 44, 84, 27, 1, 66, 84, 27, 1, 248, 5, 84, 27, 1, 233, 90, 84, 27, 1, - 238, 217, 84, 27, 1, 248, 29, 84, 27, 1, 247, 190, 84, 27, 1, 251, 182, - 84, 27, 1, 240, 47, 84, 27, 1, 225, 76, 84, 27, 207, 118, 84, 27, 207, - 173, 84, 27, 207, 227, 23, 84, 27, 207, 247, 63, 245, 250, 1, 255, 0, - 245, 250, 1, 253, 53, 245, 250, 1, 246, 43, 245, 250, 1, 250, 173, 245, - 250, 1, 254, 252, 245, 250, 1, 232, 129, 245, 250, 1, 239, 191, 245, 250, - 1, 245, 161, 245, 250, 1, 226, 203, 245, 250, 1, 248, 11, 245, 250, 1, - 238, 85, 245, 250, 1, 238, 27, 245, 250, 1, 237, 31, 245, 250, 1, 235, - 221, 245, 250, 1, 239, 164, 245, 250, 1, 225, 90, 245, 250, 1, 233, 231, - 245, 250, 1, 235, 57, 245, 250, 1, 232, 12, 245, 250, 1, 230, 238, 245, - 250, 1, 227, 31, 245, 250, 1, 224, 108, 245, 250, 1, 247, 115, 245, 250, - 1, 240, 51, 245, 250, 1, 244, 126, 245, 250, 1, 234, 18, 245, 250, 1, - 235, 61, 244, 135, 225, 156, 1, 254, 209, 225, 156, 1, 252, 198, 225, - 156, 1, 246, 170, 225, 156, 1, 238, 227, 225, 156, 1, 250, 47, 225, 156, - 1, 244, 227, 225, 156, 1, 224, 105, 225, 156, 1, 223, 88, 225, 156, 1, - 244, 156, 225, 156, 1, 227, 10, 225, 156, 1, 223, 175, 225, 156, 1, 239, - 59, 225, 156, 1, 229, 78, 225, 156, 1, 238, 16, 225, 156, 1, 236, 215, - 225, 156, 1, 250, 20, 225, 156, 1, 234, 194, 225, 156, 1, 223, 19, 225, - 156, 1, 231, 1, 225, 156, 1, 254, 248, 225, 156, 1, 232, 173, 225, 156, - 1, 231, 23, 225, 156, 1, 232, 88, 225, 156, 1, 231, 255, 225, 156, 1, - 226, 242, 225, 156, 1, 246, 63, 225, 156, 1, 96, 225, 156, 1, 74, 225, - 156, 1, 66, 225, 156, 1, 228, 80, 225, 156, 224, 92, 249, 184, 84, 233, - 113, 5, 57, 84, 233, 113, 5, 74, 84, 233, 113, 5, 66, 84, 233, 113, 5, - 177, 84, 233, 113, 5, 238, 107, 84, 233, 113, 5, 246, 193, 84, 233, 113, - 5, 245, 218, 84, 233, 113, 5, 224, 72, 84, 233, 113, 5, 252, 39, 84, 233, - 113, 5, 239, 179, 84, 233, 113, 5, 239, 156, 84, 233, 113, 5, 227, 107, - 84, 233, 113, 5, 225, 250, 84, 233, 113, 5, 250, 189, 84, 233, 113, 5, - 250, 4, 84, 233, 113, 5, 248, 107, 84, 233, 113, 5, 226, 251, 84, 233, - 113, 5, 213, 84, 233, 113, 5, 253, 70, 84, 233, 113, 5, 247, 129, 84, - 233, 113, 5, 236, 1, 84, 233, 113, 5, 234, 206, 84, 233, 113, 5, 198, 84, - 233, 113, 5, 236, 157, 84, 233, 113, 5, 236, 66, 84, 233, 113, 5, 191, - 84, 233, 113, 5, 225, 64, 84, 233, 113, 5, 224, 228, 84, 233, 113, 5, - 208, 84, 233, 113, 5, 231, 70, 84, 233, 113, 5, 238, 43, 84, 233, 113, 5, - 231, 31, 84, 233, 113, 5, 223, 117, 84, 233, 113, 5, 229, 146, 84, 233, - 113, 5, 228, 110, 84, 233, 113, 5, 154, 84, 233, 113, 5, 254, 48, 84, - 233, 113, 5, 254, 47, 84, 233, 113, 5, 254, 46, 84, 233, 113, 5, 224, 49, - 84, 233, 113, 5, 250, 170, 84, 233, 113, 5, 250, 169, 84, 233, 113, 5, - 253, 57, 84, 233, 113, 5, 252, 62, 84, 233, 113, 224, 92, 249, 184, 84, - 233, 113, 65, 118, 84, 233, 113, 65, 113, 84, 233, 113, 65, 227, 23, 84, - 233, 113, 65, 225, 216, 84, 233, 113, 65, 244, 135, 143, 6, 1, 182, 74, - 143, 6, 1, 182, 72, 143, 6, 1, 182, 57, 143, 6, 1, 182, 255, 3, 143, 6, - 1, 182, 73, 143, 6, 1, 182, 234, 52, 143, 6, 1, 229, 63, 74, 143, 6, 1, - 229, 63, 72, 143, 6, 1, 229, 63, 57, 143, 6, 1, 229, 63, 255, 3, 143, 6, - 1, 229, 63, 73, 143, 6, 1, 229, 63, 234, 52, 143, 6, 1, 254, 34, 143, 6, - 1, 233, 255, 143, 6, 1, 224, 83, 143, 6, 1, 223, 225, 143, 6, 1, 212, - 143, 6, 1, 233, 144, 143, 6, 1, 252, 232, 143, 6, 1, 227, 37, 143, 6, 1, - 250, 67, 143, 6, 1, 251, 179, 143, 6, 1, 239, 169, 143, 6, 1, 239, 10, - 143, 6, 1, 246, 148, 143, 6, 1, 248, 29, 143, 6, 1, 225, 38, 143, 6, 1, - 247, 168, 143, 6, 1, 226, 238, 143, 6, 1, 247, 188, 143, 6, 1, 223, 95, - 143, 6, 1, 247, 183, 143, 6, 1, 223, 76, 143, 6, 1, 247, 198, 143, 6, 1, - 248, 2, 143, 6, 1, 247, 247, 143, 6, 1, 247, 239, 143, 6, 1, 247, 228, - 143, 6, 1, 234, 80, 143, 6, 1, 247, 155, 143, 3, 1, 182, 74, 143, 3, 1, - 182, 72, 143, 3, 1, 182, 57, 143, 3, 1, 182, 255, 3, 143, 3, 1, 182, 73, - 143, 3, 1, 182, 234, 52, 143, 3, 1, 229, 63, 74, 143, 3, 1, 229, 63, 72, - 143, 3, 1, 229, 63, 57, 143, 3, 1, 229, 63, 255, 3, 143, 3, 1, 229, 63, - 73, 143, 3, 1, 229, 63, 234, 52, 143, 3, 1, 254, 34, 143, 3, 1, 233, 255, - 143, 3, 1, 224, 83, 143, 3, 1, 223, 225, 143, 3, 1, 212, 143, 3, 1, 233, - 144, 143, 3, 1, 252, 232, 143, 3, 1, 227, 37, 143, 3, 1, 250, 67, 143, 3, - 1, 251, 179, 143, 3, 1, 239, 169, 143, 3, 1, 239, 10, 143, 3, 1, 246, - 148, 143, 3, 1, 248, 29, 143, 3, 1, 225, 38, 143, 3, 1, 247, 168, 143, 3, - 1, 226, 238, 143, 3, 1, 247, 188, 143, 3, 1, 223, 95, 143, 3, 1, 247, - 183, 143, 3, 1, 223, 76, 143, 3, 1, 247, 198, 143, 3, 1, 248, 2, 143, 3, - 1, 247, 247, 143, 3, 1, 247, 239, 143, 3, 1, 247, 228, 143, 3, 1, 234, - 80, 143, 3, 1, 247, 155, 229, 119, 1, 233, 143, 229, 119, 1, 226, 99, - 229, 119, 1, 238, 198, 229, 119, 1, 247, 92, 229, 119, 1, 226, 217, 229, - 119, 1, 228, 169, 229, 119, 1, 227, 210, 229, 119, 1, 251, 128, 229, 119, - 1, 223, 227, 229, 119, 1, 244, 134, 229, 119, 1, 252, 180, 229, 119, 1, - 250, 76, 229, 119, 1, 246, 179, 229, 119, 1, 224, 194, 229, 119, 1, 226, - 221, 229, 119, 1, 223, 25, 229, 119, 1, 236, 233, 229, 119, 1, 239, 99, - 229, 119, 1, 224, 103, 229, 119, 1, 245, 169, 229, 119, 1, 237, 135, 229, - 119, 1, 236, 126, 229, 119, 1, 240, 54, 229, 119, 1, 248, 28, 229, 119, - 1, 254, 80, 229, 119, 1, 255, 22, 229, 119, 1, 234, 61, 229, 119, 1, 224, - 95, 229, 119, 1, 234, 10, 229, 119, 1, 255, 3, 229, 119, 1, 231, 119, - 229, 119, 1, 234, 194, 229, 119, 1, 248, 42, 229, 119, 1, 255, 6, 229, - 119, 1, 244, 69, 229, 119, 1, 225, 116, 229, 119, 1, 234, 103, 229, 119, - 1, 234, 46, 229, 119, 1, 234, 79, 229, 119, 1, 254, 37, 229, 119, 1, 254, - 117, 229, 119, 1, 234, 31, 229, 119, 1, 254, 245, 229, 119, 1, 247, 192, - 229, 119, 1, 254, 97, 229, 119, 1, 248, 51, 229, 119, 1, 244, 73, 229, - 119, 1, 223, 207, 234, 20, 1, 254, 227, 234, 20, 1, 253, 70, 234, 20, 1, - 227, 107, 234, 20, 1, 239, 179, 234, 20, 1, 224, 72, 234, 20, 1, 238, - 227, 234, 20, 1, 250, 66, 234, 20, 1, 208, 234, 20, 1, 231, 31, 234, 20, - 1, 229, 84, 234, 20, 1, 250, 22, 234, 20, 1, 251, 248, 234, 20, 1, 246, - 193, 234, 20, 1, 247, 129, 234, 20, 1, 232, 136, 234, 20, 1, 239, 71, - 234, 20, 1, 238, 39, 234, 20, 1, 236, 136, 234, 20, 1, 234, 181, 234, 20, - 1, 224, 144, 234, 20, 1, 154, 234, 20, 1, 191, 234, 20, 1, 57, 234, 20, - 1, 72, 234, 20, 1, 74, 234, 20, 1, 73, 234, 20, 1, 66, 234, 20, 1, 255, - 63, 234, 20, 1, 248, 35, 234, 20, 1, 234, 52, 234, 20, 21, 223, 89, 234, - 20, 21, 118, 234, 20, 21, 113, 234, 20, 21, 166, 234, 20, 21, 158, 234, - 20, 21, 173, 234, 20, 21, 183, 234, 20, 21, 194, 234, 20, 21, 187, 234, - 20, 21, 192, 218, 4, 57, 218, 4, 72, 218, 4, 74, 218, 4, 73, 218, 4, 66, - 218, 4, 239, 179, 218, 4, 239, 117, 218, 4, 177, 218, 4, 239, 3, 218, 4, - 238, 199, 218, 4, 238, 150, 218, 4, 238, 107, 218, 4, 238, 43, 218, 4, - 237, 243, 218, 4, 237, 193, 218, 4, 237, 143, 218, 4, 237, 110, 218, 4, - 198, 218, 4, 236, 235, 218, 4, 236, 157, 218, 4, 236, 103, 218, 4, 236, - 66, 218, 4, 236, 1, 218, 4, 235, 162, 218, 4, 235, 89, 218, 4, 235, 6, - 218, 4, 234, 206, 218, 4, 213, 218, 4, 233, 151, 218, 4, 233, 69, 218, 4, - 233, 4, 218, 4, 232, 173, 218, 4, 208, 218, 4, 231, 244, 218, 4, 231, - 180, 218, 4, 231, 122, 218, 4, 231, 70, 218, 4, 231, 31, 218, 4, 230, - 213, 218, 4, 229, 15, 218, 4, 228, 169, 218, 4, 228, 6, 218, 4, 227, 107, - 218, 4, 227, 44, 218, 4, 226, 175, 218, 4, 96, 218, 4, 225, 250, 218, 4, - 224, 173, 218, 4, 224, 141, 218, 4, 224, 118, 218, 4, 224, 105, 218, 4, - 224, 72, 218, 4, 224, 69, 218, 4, 223, 117, 218, 4, 223, 27, 233, 77, 1, - 254, 223, 233, 77, 1, 252, 200, 233, 77, 1, 246, 171, 233, 77, 1, 250, - 49, 233, 77, 1, 245, 121, 233, 77, 1, 224, 149, 233, 77, 1, 223, 112, - 233, 77, 1, 245, 90, 233, 77, 1, 227, 10, 233, 77, 1, 223, 175, 233, 77, - 1, 239, 59, 233, 77, 1, 238, 17, 233, 77, 1, 236, 215, 233, 77, 1, 234, - 194, 233, 77, 1, 229, 180, 233, 77, 1, 254, 248, 233, 77, 1, 233, 151, - 233, 77, 1, 231, 23, 233, 77, 1, 232, 92, 233, 77, 1, 231, 108, 233, 77, - 1, 229, 78, 233, 77, 1, 227, 61, 233, 77, 65, 118, 233, 77, 65, 227, 23, - 233, 77, 65, 225, 216, 233, 77, 65, 168, 244, 135, 233, 77, 224, 92, 229, - 173, 237, 78, 1, 57, 237, 78, 1, 254, 27, 237, 78, 1, 214, 237, 78, 1, - 222, 222, 237, 78, 1, 72, 237, 78, 1, 196, 237, 78, 1, 74, 237, 78, 1, - 224, 25, 237, 78, 1, 239, 76, 237, 78, 1, 149, 237, 78, 1, 185, 237, 78, - 1, 199, 237, 78, 1, 73, 237, 78, 1, 146, 237, 78, 1, 228, 111, 237, 78, - 1, 227, 109, 237, 78, 1, 66, 237, 78, 1, 247, 130, 237, 78, 1, 232, 139, - 237, 78, 1, 193, 237, 78, 1, 226, 22, 237, 78, 1, 254, 190, 237, 78, 1, - 247, 239, 237, 78, 1, 237, 80, 237, 78, 1, 235, 19, 237, 78, 1, 252, 44, - 237, 78, 226, 75, 76, 178, 1, 57, 178, 31, 5, 74, 178, 31, 5, 66, 178, - 31, 5, 153, 146, 178, 31, 5, 72, 178, 31, 5, 73, 178, 31, 237, 219, 76, - 178, 5, 47, 231, 140, 51, 178, 5, 254, 160, 178, 5, 224, 211, 178, 1, - 177, 178, 1, 238, 227, 178, 1, 246, 193, 178, 1, 246, 66, 178, 1, 252, - 39, 178, 1, 251, 204, 178, 1, 239, 179, 178, 1, 234, 173, 178, 1, 226, - 20, 178, 1, 226, 10, 178, 1, 250, 117, 178, 1, 250, 101, 178, 1, 235, 18, - 178, 1, 227, 107, 178, 1, 226, 251, 178, 1, 250, 189, 178, 1, 250, 22, - 178, 1, 236, 1, 178, 1, 213, 178, 1, 233, 97, 178, 1, 253, 70, 178, 1, - 252, 190, 178, 1, 198, 178, 1, 191, 178, 1, 208, 178, 1, 238, 43, 178, 1, - 225, 64, 178, 1, 229, 146, 178, 1, 228, 110, 178, 1, 231, 31, 178, 1, - 223, 117, 178, 1, 154, 178, 1, 238, 167, 178, 1, 225, 254, 178, 5, 253, - 36, 46, 178, 5, 251, 254, 178, 5, 56, 51, 178, 224, 216, 178, 21, 118, - 178, 21, 113, 178, 21, 166, 178, 21, 158, 178, 65, 227, 23, 178, 65, 225, - 216, 178, 65, 168, 244, 135, 178, 65, 168, 226, 194, 178, 232, 171, 249, - 140, 178, 232, 171, 3, 251, 106, 178, 232, 171, 251, 106, 178, 232, 171, - 250, 248, 125, 178, 232, 171, 237, 32, 178, 232, 171, 237, 119, 178, 232, - 171, 250, 151, 178, 232, 171, 47, 250, 151, 178, 232, 171, 237, 165, 13, - 5, 57, 13, 5, 102, 24, 57, 13, 5, 102, 24, 253, 61, 13, 5, 102, 24, 246, - 167, 227, 19, 13, 5, 102, 24, 154, 13, 5, 102, 24, 240, 49, 13, 5, 102, - 24, 238, 30, 245, 204, 13, 5, 102, 24, 236, 32, 13, 5, 102, 24, 231, 19, - 13, 5, 255, 65, 13, 5, 255, 52, 13, 5, 255, 53, 24, 254, 78, 13, 5, 255, - 53, 24, 248, 96, 245, 204, 13, 5, 255, 53, 24, 246, 177, 13, 5, 255, 53, - 24, 246, 167, 227, 19, 13, 5, 255, 53, 24, 154, 13, 5, 255, 53, 24, 240, - 50, 245, 204, 13, 5, 255, 53, 24, 240, 23, 13, 5, 255, 53, 24, 238, 31, - 13, 5, 255, 53, 24, 229, 99, 13, 5, 255, 53, 24, 97, 79, 97, 79, 66, 13, - 5, 255, 53, 245, 204, 13, 5, 255, 50, 13, 5, 255, 51, 24, 253, 50, 13, 5, - 255, 51, 24, 246, 167, 227, 19, 13, 5, 255, 51, 24, 236, 236, 79, 247, - 239, 13, 5, 255, 51, 24, 229, 144, 13, 5, 255, 51, 24, 227, 84, 13, 5, - 255, 29, 13, 5, 254, 240, 13, 5, 254, 241, 24, 247, 193, 13, 5, 254, 241, - 24, 229, 73, 79, 246, 24, 13, 5, 254, 233, 13, 5, 254, 234, 24, 254, 233, - 13, 5, 254, 234, 24, 249, 220, 13, 5, 254, 234, 24, 246, 24, 13, 5, 254, - 234, 24, 154, 13, 5, 254, 234, 24, 239, 64, 13, 5, 254, 234, 24, 238, - 199, 13, 5, 254, 234, 24, 229, 114, 13, 5, 254, 234, 24, 225, 83, 13, 5, - 254, 231, 13, 5, 254, 225, 13, 5, 254, 196, 13, 5, 254, 197, 24, 229, - 114, 13, 5, 254, 190, 13, 5, 254, 191, 107, 254, 190, 13, 5, 254, 191, - 152, 226, 156, 13, 5, 254, 191, 79, 235, 247, 234, 35, 254, 191, 79, 235, - 246, 13, 5, 254, 191, 79, 235, 247, 228, 118, 13, 5, 254, 170, 13, 5, - 254, 153, 13, 5, 254, 129, 13, 5, 254, 130, 24, 238, 91, 13, 5, 254, 108, - 13, 5, 254, 85, 13, 5, 254, 80, 13, 5, 254, 81, 223, 43, 227, 19, 13, 5, - 254, 81, 239, 67, 227, 19, 13, 5, 254, 81, 107, 254, 81, 225, 248, 107, - 225, 248, 225, 248, 107, 225, 248, 233, 197, 13, 5, 254, 81, 107, 254, - 81, 107, 254, 80, 13, 5, 254, 81, 107, 254, 81, 107, 254, 81, 250, 238, - 254, 81, 107, 254, 81, 107, 254, 80, 13, 5, 254, 78, 13, 5, 254, 76, 13, - 5, 253, 70, 13, 5, 253, 61, 13, 5, 253, 58, 13, 5, 253, 56, 13, 5, 253, - 51, 13, 5, 253, 52, 107, 253, 51, 13, 5, 253, 50, 13, 5, 125, 13, 5, 253, - 35, 13, 5, 252, 181, 13, 5, 252, 182, 24, 57, 13, 5, 252, 182, 24, 246, - 160, 13, 5, 252, 182, 24, 240, 50, 245, 204, 13, 5, 252, 90, 13, 5, 252, - 91, 107, 252, 91, 255, 52, 13, 5, 252, 91, 107, 252, 91, 225, 138, 13, 5, - 252, 91, 250, 238, 252, 90, 13, 5, 252, 79, 13, 5, 252, 80, 107, 252, 79, - 13, 5, 252, 70, 13, 5, 252, 69, 13, 5, 250, 189, 13, 5, 250, 180, 13, 5, - 250, 181, 238, 178, 24, 102, 79, 237, 7, 13, 5, 250, 181, 238, 178, 24, - 254, 196, 13, 5, 250, 181, 238, 178, 24, 253, 50, 13, 5, 250, 181, 238, - 178, 24, 252, 181, 13, 5, 250, 181, 238, 178, 24, 246, 193, 13, 5, 250, - 181, 238, 178, 24, 246, 194, 79, 237, 7, 13, 5, 250, 181, 238, 178, 24, - 246, 46, 13, 5, 250, 181, 238, 178, 24, 246, 30, 13, 5, 250, 181, 238, - 178, 24, 245, 212, 13, 5, 250, 181, 238, 178, 24, 154, 13, 5, 250, 181, - 238, 178, 24, 239, 210, 13, 5, 250, 181, 238, 178, 24, 239, 211, 79, 237, - 110, 13, 5, 250, 181, 238, 178, 24, 239, 53, 13, 5, 250, 181, 238, 178, - 24, 238, 43, 13, 5, 250, 181, 238, 178, 24, 237, 110, 13, 5, 250, 181, - 238, 178, 24, 237, 111, 79, 237, 6, 13, 5, 250, 181, 238, 178, 24, 237, - 100, 13, 5, 250, 181, 238, 178, 24, 235, 162, 13, 5, 250, 181, 238, 178, - 24, 233, 198, 79, 233, 197, 13, 5, 250, 181, 238, 178, 24, 229, 15, 13, - 5, 250, 181, 238, 178, 24, 227, 84, 13, 5, 250, 181, 238, 178, 24, 225, - 172, 79, 246, 30, 13, 5, 250, 181, 238, 178, 24, 225, 83, 13, 5, 250, - 159, 13, 5, 250, 140, 13, 5, 250, 139, 13, 5, 250, 138, 13, 5, 250, 4, - 13, 5, 249, 245, 13, 5, 249, 221, 13, 5, 249, 222, 24, 229, 114, 13, 5, - 249, 220, 13, 5, 249, 210, 13, 5, 249, 211, 239, 26, 97, 245, 205, 249, - 195, 13, 5, 249, 195, 13, 5, 248, 107, 13, 5, 248, 108, 107, 248, 107, - 13, 5, 248, 108, 245, 204, 13, 5, 248, 108, 229, 96, 13, 5, 248, 105, 13, - 5, 248, 106, 24, 247, 180, 13, 5, 248, 104, 13, 5, 248, 103, 13, 5, 248, - 102, 13, 5, 248, 101, 13, 5, 248, 97, 13, 5, 248, 95, 13, 5, 248, 96, - 245, 204, 13, 5, 248, 96, 245, 205, 245, 204, 13, 5, 248, 94, 13, 5, 248, - 87, 13, 5, 72, 13, 5, 161, 24, 233, 197, 13, 5, 161, 107, 161, 234, 195, - 107, 234, 194, 13, 5, 248, 57, 13, 5, 248, 58, 24, 102, 79, 245, 170, 79, - 250, 189, 13, 5, 248, 58, 24, 246, 160, 13, 5, 248, 58, 24, 236, 157, 13, - 5, 248, 58, 24, 231, 12, 13, 5, 248, 58, 24, 229, 114, 13, 5, 248, 58, - 24, 66, 13, 5, 248, 37, 13, 5, 248, 27, 13, 5, 248, 2, 13, 5, 247, 239, - 13, 5, 247, 240, 24, 246, 166, 13, 5, 247, 240, 24, 246, 167, 227, 19, - 13, 5, 247, 240, 24, 236, 235, 13, 5, 247, 240, 250, 238, 247, 239, 13, - 5, 247, 240, 234, 35, 247, 239, 13, 5, 247, 240, 228, 118, 13, 5, 247, - 195, 13, 5, 247, 193, 13, 5, 247, 180, 13, 5, 247, 134, 13, 5, 247, 135, - 24, 57, 13, 5, 247, 135, 24, 102, 79, 238, 21, 13, 5, 247, 135, 24, 102, - 79, 238, 22, 24, 238, 21, 13, 5, 247, 135, 24, 254, 190, 13, 5, 247, 135, - 24, 253, 61, 13, 5, 247, 135, 24, 248, 96, 245, 204, 13, 5, 247, 135, 24, - 248, 96, 245, 205, 245, 204, 13, 5, 247, 135, 24, 154, 13, 5, 247, 135, - 24, 245, 170, 245, 204, 13, 5, 247, 135, 24, 240, 50, 245, 204, 13, 5, - 247, 135, 24, 239, 25, 13, 5, 247, 135, 24, 239, 26, 228, 118, 13, 5, - 247, 135, 24, 238, 105, 13, 5, 247, 135, 24, 238, 43, 13, 5, 247, 135, - 24, 238, 22, 24, 238, 21, 13, 5, 247, 135, 24, 237, 193, 13, 5, 247, 135, - 24, 237, 110, 13, 5, 247, 135, 24, 225, 171, 13, 5, 247, 135, 24, 225, - 163, 13, 5, 246, 193, 13, 5, 246, 194, 245, 204, 13, 5, 246, 191, 13, 5, - 246, 192, 24, 102, 79, 250, 190, 79, 154, 13, 5, 246, 192, 24, 102, 79, - 154, 13, 5, 246, 192, 24, 102, 79, 240, 49, 13, 5, 246, 192, 24, 255, 51, - 227, 20, 79, 227, 100, 13, 5, 246, 192, 24, 254, 190, 13, 5, 246, 192, - 24, 254, 80, 13, 5, 246, 192, 24, 254, 79, 79, 246, 177, 13, 5, 246, 192, - 24, 253, 61, 13, 5, 246, 192, 24, 253, 36, 79, 208, 13, 5, 246, 192, 24, - 252, 70, 13, 5, 246, 192, 24, 252, 71, 79, 208, 13, 5, 246, 192, 24, 250, - 189, 13, 5, 246, 192, 24, 250, 4, 13, 5, 246, 192, 24, 249, 222, 24, 229, - 114, 13, 5, 246, 192, 24, 248, 105, 13, 5, 246, 192, 24, 248, 2, 13, 5, - 246, 192, 24, 248, 3, 79, 238, 43, 13, 5, 246, 192, 24, 247, 239, 13, 5, - 246, 192, 24, 247, 240, 24, 246, 167, 227, 19, 13, 5, 246, 192, 24, 246, - 167, 227, 19, 13, 5, 246, 192, 24, 246, 160, 13, 5, 246, 192, 24, 246, - 46, 13, 5, 246, 192, 24, 246, 44, 13, 5, 246, 192, 24, 246, 45, 79, 57, - 13, 5, 246, 192, 24, 246, 31, 79, 228, 6, 13, 5, 246, 192, 24, 245, 170, - 79, 237, 111, 79, 247, 180, 13, 5, 246, 192, 24, 245, 154, 13, 5, 246, - 192, 24, 245, 155, 79, 238, 43, 13, 5, 246, 192, 24, 245, 76, 79, 237, - 193, 13, 5, 246, 192, 24, 244, 142, 13, 5, 246, 192, 24, 240, 50, 245, - 204, 13, 5, 246, 192, 24, 239, 201, 79, 244, 146, 79, 254, 80, 13, 5, - 246, 192, 24, 239, 53, 13, 5, 246, 192, 24, 239, 25, 13, 5, 246, 192, 24, - 238, 196, 13, 5, 246, 192, 24, 238, 197, 79, 238, 21, 13, 5, 246, 192, - 24, 238, 106, 79, 254, 190, 13, 5, 246, 192, 24, 238, 43, 13, 5, 246, - 192, 24, 236, 236, 79, 247, 239, 13, 5, 246, 192, 24, 236, 157, 13, 5, - 246, 192, 24, 234, 194, 13, 5, 246, 192, 24, 234, 195, 107, 234, 194, 13, - 5, 246, 192, 24, 213, 13, 5, 246, 192, 24, 231, 12, 13, 5, 246, 192, 24, - 230, 244, 13, 5, 246, 192, 24, 229, 114, 13, 5, 246, 192, 24, 229, 115, - 79, 225, 236, 13, 5, 246, 192, 24, 229, 88, 13, 5, 246, 192, 24, 227, - 233, 13, 5, 246, 192, 24, 227, 84, 13, 5, 246, 192, 24, 66, 13, 5, 246, - 192, 24, 225, 163, 13, 5, 246, 192, 24, 225, 164, 79, 248, 107, 13, 5, - 246, 192, 107, 246, 191, 13, 5, 246, 186, 13, 5, 246, 187, 250, 238, 246, - 186, 13, 5, 246, 184, 13, 5, 246, 185, 107, 246, 185, 246, 161, 107, 246, - 160, 13, 5, 246, 177, 13, 5, 246, 178, 246, 185, 107, 246, 185, 246, 161, - 107, 246, 160, 13, 5, 246, 176, 13, 5, 246, 174, 13, 5, 246, 168, 13, 5, - 246, 166, 13, 5, 246, 167, 227, 19, 13, 5, 246, 167, 107, 246, 166, 13, - 5, 246, 167, 250, 238, 246, 166, 13, 5, 246, 160, 13, 5, 246, 159, 13, 5, - 246, 155, 13, 5, 246, 107, 13, 5, 246, 108, 24, 238, 91, 13, 5, 246, 46, - 13, 5, 246, 47, 24, 72, 13, 5, 246, 47, 24, 66, 13, 5, 246, 47, 250, 238, - 246, 46, 13, 5, 246, 44, 13, 5, 246, 45, 107, 246, 44, 13, 5, 246, 45, - 250, 238, 246, 44, 13, 5, 246, 42, 13, 5, 246, 30, 13, 5, 246, 31, 245, - 204, 13, 5, 246, 28, 13, 5, 246, 29, 24, 102, 79, 240, 49, 13, 5, 246, - 29, 24, 246, 167, 227, 19, 13, 5, 246, 29, 24, 240, 49, 13, 5, 246, 29, - 24, 237, 111, 79, 240, 49, 13, 5, 246, 29, 24, 213, 13, 5, 246, 26, 13, - 5, 246, 24, 13, 5, 246, 25, 250, 238, 246, 24, 13, 5, 246, 25, 24, 253, - 61, 13, 5, 246, 25, 24, 227, 84, 13, 5, 246, 25, 227, 19, 13, 5, 245, - 218, 13, 5, 245, 219, 250, 238, 245, 218, 13, 5, 245, 216, 13, 5, 245, - 217, 24, 239, 53, 13, 5, 245, 217, 24, 239, 54, 24, 240, 50, 245, 204, - 13, 5, 245, 217, 24, 234, 194, 13, 5, 245, 217, 24, 231, 13, 79, 225, - 247, 13, 5, 245, 217, 245, 204, 13, 5, 245, 212, 13, 5, 245, 213, 24, - 102, 79, 238, 91, 13, 5, 245, 213, 24, 238, 91, 13, 5, 245, 213, 107, - 245, 213, 237, 105, 13, 5, 245, 208, 13, 5, 245, 206, 13, 5, 245, 207, - 24, 229, 114, 13, 5, 245, 198, 13, 5, 245, 197, 13, 5, 245, 194, 13, 5, - 245, 193, 13, 5, 154, 13, 5, 245, 170, 227, 19, 13, 5, 245, 170, 245, - 204, 13, 5, 245, 154, 13, 5, 245, 75, 13, 5, 245, 76, 24, 254, 80, 13, 5, - 245, 76, 24, 254, 78, 13, 5, 245, 76, 24, 253, 61, 13, 5, 245, 76, 24, - 249, 195, 13, 5, 245, 76, 24, 246, 184, 13, 5, 245, 76, 24, 238, 190, 13, - 5, 245, 76, 24, 234, 194, 13, 5, 245, 76, 24, 229, 114, 13, 5, 245, 76, - 24, 66, 13, 5, 244, 145, 13, 5, 244, 142, 13, 5, 244, 143, 24, 254, 190, - 13, 5, 244, 143, 24, 245, 154, 13, 5, 244, 143, 24, 239, 25, 13, 5, 244, - 143, 24, 237, 158, 13, 5, 244, 143, 24, 225, 163, 13, 5, 244, 140, 13, 5, - 74, 13, 5, 244, 81, 57, 13, 5, 244, 71, 13, 5, 240, 75, 13, 5, 240, 76, - 107, 240, 76, 252, 70, 13, 5, 240, 76, 107, 240, 76, 228, 118, 13, 5, - 240, 52, 13, 5, 240, 49, 13, 5, 240, 50, 249, 245, 13, 5, 240, 50, 231, - 180, 13, 5, 240, 50, 107, 240, 50, 229, 75, 107, 229, 75, 225, 164, 107, - 225, 163, 13, 5, 240, 50, 245, 204, 13, 5, 240, 41, 13, 5, 240, 42, 24, - 246, 167, 227, 19, 13, 5, 240, 40, 13, 5, 240, 30, 13, 5, 240, 31, 24, - 227, 84, 13, 5, 240, 31, 250, 238, 240, 30, 13, 5, 240, 31, 234, 35, 240, - 30, 13, 5, 240, 31, 228, 118, 13, 5, 240, 23, 13, 5, 240, 16, 13, 5, 239, - 210, 13, 5, 239, 200, 13, 5, 177, 13, 5, 188, 24, 57, 13, 5, 188, 24, - 255, 29, 13, 5, 188, 24, 255, 30, 79, 238, 105, 13, 5, 188, 24, 254, 78, - 13, 5, 188, 24, 253, 61, 13, 5, 188, 24, 253, 50, 13, 5, 188, 24, 125, - 13, 5, 188, 24, 252, 181, 13, 5, 188, 24, 247, 193, 13, 5, 188, 24, 247, - 180, 13, 5, 188, 24, 246, 193, 13, 5, 188, 24, 246, 177, 13, 5, 188, 24, - 246, 167, 227, 19, 13, 5, 188, 24, 246, 160, 13, 5, 188, 24, 246, 161, - 79, 229, 145, 79, 57, 13, 5, 188, 24, 246, 46, 13, 5, 188, 24, 246, 30, - 13, 5, 188, 24, 246, 25, 79, 230, 244, 13, 5, 188, 24, 246, 25, 250, 238, - 246, 24, 13, 5, 188, 24, 245, 218, 13, 5, 188, 24, 245, 197, 13, 5, 188, - 24, 240, 49, 13, 5, 188, 24, 240, 30, 13, 5, 188, 24, 239, 53, 13, 5, - 188, 24, 238, 199, 13, 5, 188, 24, 238, 196, 13, 5, 188, 24, 237, 193, - 13, 5, 188, 24, 237, 110, 13, 5, 188, 24, 236, 235, 13, 5, 188, 24, 236, - 236, 79, 248, 107, 13, 5, 188, 24, 236, 236, 79, 246, 46, 13, 5, 188, 24, - 236, 236, 79, 227, 44, 13, 5, 188, 24, 236, 157, 13, 5, 188, 24, 236, - 158, 79, 234, 190, 13, 5, 188, 24, 235, 162, 13, 5, 188, 24, 234, 194, - 13, 5, 188, 24, 233, 69, 13, 5, 188, 24, 231, 70, 13, 5, 188, 24, 231, - 31, 13, 5, 188, 24, 230, 244, 13, 5, 188, 24, 229, 146, 13, 5, 188, 24, - 229, 114, 13, 5, 188, 24, 229, 88, 13, 5, 188, 24, 229, 43, 13, 5, 188, - 24, 229, 7, 13, 5, 188, 24, 227, 240, 13, 5, 188, 24, 227, 67, 13, 5, - 188, 24, 66, 13, 5, 188, 24, 225, 171, 13, 5, 188, 24, 225, 163, 13, 5, - 188, 24, 225, 141, 24, 213, 13, 5, 188, 24, 225, 83, 13, 5, 188, 24, 223, - 47, 13, 5, 239, 73, 13, 5, 239, 74, 250, 238, 239, 73, 13, 5, 239, 68, - 13, 5, 239, 66, 13, 5, 239, 64, 13, 5, 239, 63, 13, 5, 239, 61, 13, 5, - 239, 62, 107, 239, 61, 13, 5, 239, 53, 13, 5, 239, 54, 24, 240, 50, 245, - 204, 13, 5, 239, 49, 13, 5, 239, 50, 24, 253, 61, 13, 5, 239, 50, 250, - 238, 239, 49, 13, 5, 239, 48, 13, 5, 239, 47, 13, 5, 239, 25, 13, 5, 239, - 26, 215, 24, 97, 107, 215, 24, 66, 13, 5, 239, 26, 107, 239, 26, 215, 24, - 97, 107, 215, 24, 66, 13, 5, 238, 237, 13, 5, 238, 199, 13, 5, 238, 200, - 24, 253, 61, 13, 5, 238, 200, 24, 66, 13, 5, 238, 200, 24, 225, 163, 13, - 5, 238, 196, 13, 5, 238, 190, 13, 5, 238, 180, 13, 5, 238, 179, 13, 5, - 238, 177, 13, 5, 238, 178, 107, 238, 177, 13, 5, 238, 107, 13, 5, 238, - 108, 107, 245, 76, 24, 254, 79, 238, 108, 107, 245, 76, 24, 254, 78, 13, - 5, 238, 105, 13, 5, 238, 103, 13, 5, 238, 104, 225, 54, 15, 13, 5, 238, - 102, 13, 5, 238, 100, 13, 5, 238, 101, 245, 204, 13, 5, 238, 99, 13, 5, - 238, 91, 13, 5, 238, 92, 234, 35, 238, 91, 13, 5, 238, 86, 13, 5, 238, - 70, 13, 5, 238, 43, 13, 5, 238, 31, 13, 5, 215, 24, 57, 13, 5, 215, 24, - 102, 79, 250, 190, 79, 154, 13, 5, 215, 24, 102, 79, 246, 160, 13, 5, - 215, 24, 102, 79, 238, 21, 13, 5, 215, 24, 254, 233, 13, 5, 215, 24, 254, - 190, 13, 5, 215, 24, 254, 81, 223, 43, 227, 19, 13, 5, 215, 24, 253, 61, - 13, 5, 215, 24, 252, 181, 13, 5, 215, 24, 250, 140, 13, 5, 215, 24, 247, - 239, 13, 5, 215, 24, 246, 193, 13, 5, 215, 24, 246, 160, 13, 5, 215, 24, - 245, 212, 13, 5, 215, 24, 245, 213, 79, 245, 212, 13, 5, 215, 24, 154, - 13, 5, 215, 24, 245, 154, 13, 5, 215, 24, 245, 76, 24, 234, 194, 13, 5, - 215, 24, 240, 50, 245, 204, 13, 5, 215, 24, 240, 30, 13, 5, 215, 24, 240, - 31, 79, 154, 13, 5, 215, 24, 240, 31, 79, 237, 110, 13, 5, 215, 24, 238, - 199, 13, 5, 215, 24, 238, 190, 13, 5, 215, 24, 238, 105, 13, 5, 215, 24, - 238, 100, 13, 5, 215, 24, 238, 101, 79, 245, 76, 79, 57, 13, 5, 215, 24, - 238, 31, 13, 5, 215, 24, 237, 158, 13, 5, 215, 24, 237, 110, 13, 5, 215, - 24, 237, 102, 13, 5, 215, 24, 236, 235, 13, 5, 215, 24, 236, 236, 79, - 247, 239, 13, 5, 215, 24, 236, 32, 13, 5, 215, 24, 235, 162, 13, 5, 215, - 24, 229, 115, 79, 227, 233, 13, 5, 215, 24, 229, 73, 79, 246, 25, 79, - 247, 193, 13, 5, 215, 24, 229, 73, 79, 246, 25, 227, 19, 13, 5, 215, 24, - 229, 41, 13, 5, 215, 24, 229, 42, 79, 229, 41, 13, 5, 215, 24, 227, 233, - 13, 5, 215, 24, 227, 95, 13, 5, 215, 24, 227, 84, 13, 5, 215, 24, 227, - 45, 79, 102, 79, 228, 7, 79, 236, 1, 13, 5, 215, 24, 66, 13, 5, 215, 24, - 97, 79, 57, 13, 5, 215, 24, 97, 79, 97, 79, 66, 13, 5, 215, 24, 225, 172, - 79, 254, 80, 13, 5, 215, 24, 225, 163, 13, 5, 215, 24, 225, 83, 13, 5, - 215, 228, 118, 13, 5, 238, 29, 13, 5, 238, 30, 24, 229, 114, 13, 5, 238, - 30, 24, 229, 115, 79, 227, 233, 13, 5, 238, 30, 245, 204, 13, 5, 238, 30, - 245, 205, 107, 238, 30, 245, 205, 229, 114, 13, 5, 238, 26, 13, 5, 238, - 21, 13, 5, 238, 22, 24, 238, 21, 13, 5, 238, 20, 13, 5, 216, 24, 238, 91, - 13, 5, 216, 24, 238, 92, 79, 231, 70, 13, 5, 237, 193, 13, 5, 237, 181, - 13, 5, 237, 173, 13, 5, 237, 158, 13, 5, 237, 110, 13, 5, 237, 111, 24, - 253, 61, 13, 5, 237, 108, 13, 5, 237, 109, 24, 254, 233, 13, 5, 237, 109, - 24, 253, 61, 13, 5, 237, 109, 24, 247, 180, 13, 5, 237, 109, 24, 247, - 181, 227, 19, 13, 5, 237, 109, 24, 246, 167, 227, 19, 13, 5, 237, 109, - 24, 245, 76, 24, 253, 61, 13, 5, 237, 109, 24, 240, 30, 13, 5, 237, 109, - 24, 239, 66, 13, 5, 237, 109, 24, 239, 64, 13, 5, 237, 109, 24, 239, 65, - 79, 254, 80, 13, 5, 237, 109, 24, 238, 199, 13, 5, 237, 109, 24, 238, 44, - 79, 254, 80, 13, 5, 237, 109, 24, 238, 31, 13, 5, 237, 109, 24, 236, 236, - 79, 247, 239, 13, 5, 237, 109, 24, 235, 162, 13, 5, 237, 109, 24, 234, - 206, 13, 5, 237, 109, 24, 229, 16, 79, 254, 80, 13, 5, 237, 109, 24, 228, - 255, 79, 252, 90, 13, 5, 237, 109, 24, 225, 247, 13, 5, 237, 109, 227, - 19, 13, 5, 237, 109, 250, 238, 237, 108, 13, 5, 237, 109, 234, 35, 237, - 108, 13, 5, 237, 109, 228, 118, 13, 5, 237, 109, 229, 96, 13, 5, 237, - 107, 13, 5, 237, 105, 13, 5, 237, 106, 107, 237, 105, 13, 5, 237, 106, - 234, 35, 237, 105, 13, 5, 237, 106, 229, 96, 13, 5, 237, 104, 13, 5, 237, - 102, 13, 5, 237, 100, 13, 5, 237, 101, 107, 237, 100, 13, 5, 237, 101, - 107, 237, 101, 246, 161, 107, 246, 160, 13, 5, 198, 13, 5, 237, 68, 24, - 227, 84, 13, 5, 237, 68, 245, 204, 13, 5, 237, 67, 13, 5, 237, 55, 13, 5, - 237, 24, 13, 5, 237, 7, 13, 5, 237, 6, 13, 5, 236, 235, 13, 5, 236, 205, - 13, 5, 236, 157, 13, 5, 236, 125, 13, 5, 236, 66, 13, 5, 236, 67, 107, - 236, 66, 13, 5, 236, 59, 13, 5, 236, 60, 245, 204, 13, 5, 236, 46, 13, 5, - 236, 35, 13, 5, 236, 32, 13, 5, 236, 33, 24, 57, 13, 5, 236, 33, 24, 238, - 91, 13, 5, 236, 33, 24, 223, 117, 13, 5, 236, 33, 107, 236, 32, 13, 5, - 236, 33, 107, 236, 33, 24, 102, 79, 236, 1, 13, 5, 236, 33, 250, 238, - 236, 32, 13, 5, 236, 30, 13, 5, 236, 31, 24, 57, 13, 5, 236, 31, 24, 102, - 79, 250, 4, 13, 5, 236, 31, 24, 250, 4, 13, 5, 236, 31, 245, 204, 13, 5, - 236, 1, 13, 5, 236, 0, 13, 5, 235, 246, 13, 5, 235, 247, 239, 222, 13, 5, - 235, 247, 24, 229, 44, 227, 19, 13, 5, 235, 247, 234, 35, 235, 246, 13, - 5, 235, 245, 13, 5, 235, 241, 234, 182, 13, 5, 235, 240, 13, 5, 235, 239, - 13, 5, 235, 162, 13, 5, 235, 163, 24, 57, 13, 5, 235, 163, 24, 225, 163, - 13, 5, 235, 163, 229, 96, 13, 5, 235, 89, 13, 5, 235, 90, 24, 72, 13, 5, - 235, 88, 13, 5, 235, 64, 13, 5, 235, 65, 24, 246, 167, 227, 19, 13, 5, - 235, 65, 24, 246, 161, 79, 246, 167, 227, 19, 13, 5, 235, 62, 13, 5, 235, - 63, 24, 254, 190, 13, 5, 235, 63, 24, 254, 80, 13, 5, 235, 63, 24, 254, - 81, 79, 254, 80, 13, 5, 235, 63, 24, 245, 212, 13, 5, 235, 63, 24, 236, - 236, 79, 246, 167, 227, 19, 13, 5, 235, 63, 24, 235, 162, 13, 5, 235, 63, - 24, 234, 194, 13, 5, 235, 63, 24, 229, 114, 13, 5, 235, 63, 24, 229, 115, - 79, 102, 254, 190, 13, 5, 235, 63, 24, 229, 115, 79, 254, 80, 13, 5, 235, - 63, 24, 229, 115, 79, 254, 81, 79, 254, 80, 13, 5, 235, 63, 24, 225, 172, - 79, 254, 80, 13, 5, 235, 63, 24, 225, 83, 13, 5, 235, 53, 13, 5, 234, - 206, 13, 5, 234, 205, 13, 5, 234, 194, 13, 5, 234, 195, 238, 30, 24, 246, - 160, 13, 5, 234, 195, 238, 30, 24, 237, 7, 13, 5, 234, 195, 238, 30, 24, - 231, 12, 13, 5, 234, 195, 238, 30, 24, 231, 13, 107, 234, 195, 238, 30, - 24, 231, 12, 13, 5, 234, 195, 238, 30, 24, 225, 83, 13, 5, 234, 195, 227, - 19, 13, 5, 234, 195, 107, 234, 194, 13, 5, 234, 195, 250, 238, 234, 194, - 13, 5, 234, 195, 250, 238, 234, 195, 238, 30, 107, 238, 29, 13, 5, 234, - 190, 13, 5, 234, 191, 255, 51, 24, 254, 76, 13, 5, 234, 191, 255, 51, 24, - 252, 181, 13, 5, 234, 191, 255, 51, 24, 248, 103, 13, 5, 234, 191, 255, - 51, 24, 245, 212, 13, 5, 234, 191, 255, 51, 24, 240, 50, 245, 204, 13, 5, - 234, 191, 255, 51, 24, 239, 64, 13, 5, 234, 191, 255, 51, 24, 238, 43, - 13, 5, 234, 191, 255, 51, 24, 235, 162, 13, 5, 234, 191, 255, 51, 24, - 228, 252, 13, 5, 234, 191, 255, 51, 24, 225, 171, 13, 5, 234, 191, 238, - 178, 24, 252, 181, 13, 5, 234, 191, 238, 178, 24, 252, 182, 66, 13, 5, - 213, 13, 5, 233, 235, 13, 5, 233, 212, 13, 5, 233, 197, 13, 5, 233, 107, - 13, 5, 233, 69, 13, 5, 233, 70, 24, 57, 13, 5, 233, 70, 24, 255, 52, 13, - 5, 233, 70, 24, 252, 181, 13, 5, 233, 70, 24, 252, 90, 13, 5, 233, 70, - 24, 72, 13, 5, 233, 70, 24, 74, 13, 5, 233, 70, 24, 244, 71, 13, 5, 233, - 70, 24, 66, 13, 5, 233, 70, 24, 225, 171, 13, 5, 233, 70, 250, 238, 233, - 69, 13, 5, 233, 32, 13, 5, 233, 33, 24, 239, 49, 13, 5, 233, 33, 24, 225, - 163, 13, 5, 233, 33, 24, 223, 117, 13, 5, 233, 33, 234, 35, 233, 32, 13, - 5, 208, 13, 5, 232, 20, 13, 5, 231, 180, 13, 5, 231, 70, 13, 5, 231, 31, - 13, 5, 231, 20, 234, 182, 13, 5, 231, 19, 13, 5, 231, 20, 24, 57, 13, 5, - 231, 20, 24, 248, 107, 13, 5, 231, 20, 24, 248, 105, 13, 5, 231, 20, 24, - 154, 13, 5, 231, 20, 24, 239, 53, 13, 5, 231, 20, 24, 238, 91, 13, 5, - 231, 20, 24, 237, 100, 13, 5, 231, 20, 24, 236, 157, 13, 5, 231, 20, 24, - 234, 194, 13, 5, 231, 20, 24, 231, 12, 13, 5, 231, 20, 24, 229, 88, 13, - 5, 231, 20, 24, 227, 100, 13, 5, 231, 20, 24, 225, 171, 13, 5, 231, 20, - 24, 225, 168, 13, 5, 231, 20, 24, 225, 145, 13, 5, 231, 20, 24, 225, 103, - 13, 5, 231, 20, 24, 225, 83, 13, 5, 231, 20, 107, 231, 19, 13, 5, 231, - 20, 245, 204, 13, 5, 231, 12, 13, 5, 231, 13, 215, 24, 254, 78, 13, 5, - 230, 251, 13, 5, 230, 244, 13, 5, 229, 146, 13, 5, 229, 144, 13, 5, 229, - 145, 24, 57, 13, 5, 229, 145, 24, 253, 61, 13, 5, 229, 145, 24, 246, 24, - 13, 5, 229, 145, 24, 235, 162, 13, 5, 229, 145, 24, 229, 41, 13, 5, 229, - 145, 24, 225, 236, 13, 5, 229, 145, 24, 66, 13, 5, 229, 145, 24, 97, 79, - 57, 13, 5, 229, 143, 13, 5, 229, 141, 13, 5, 229, 125, 13, 5, 229, 114, - 13, 5, 229, 115, 244, 145, 13, 5, 229, 115, 107, 229, 115, 246, 185, 107, - 246, 185, 246, 161, 107, 246, 160, 13, 5, 229, 115, 107, 229, 115, 227, - 101, 107, 227, 101, 246, 161, 107, 246, 160, 13, 5, 229, 107, 13, 5, 229, - 102, 13, 5, 229, 99, 13, 5, 229, 98, 13, 5, 229, 95, 13, 5, 229, 88, 13, - 5, 229, 89, 24, 57, 13, 5, 229, 89, 24, 240, 30, 13, 5, 229, 82, 13, 5, - 229, 83, 24, 57, 13, 5, 229, 83, 24, 253, 51, 13, 5, 229, 83, 24, 252, - 79, 13, 5, 229, 83, 24, 249, 210, 13, 5, 229, 83, 24, 246, 160, 13, 5, - 229, 83, 24, 240, 49, 13, 5, 229, 83, 24, 240, 50, 245, 204, 13, 5, 229, - 83, 24, 238, 86, 13, 5, 229, 83, 24, 237, 102, 13, 5, 229, 83, 24, 236, - 59, 13, 5, 229, 83, 24, 231, 12, 13, 5, 229, 77, 13, 5, 229, 74, 13, 5, - 229, 75, 227, 19, 13, 5, 229, 75, 107, 229, 75, 252, 71, 107, 252, 70, - 13, 5, 229, 72, 13, 5, 229, 43, 13, 5, 229, 44, 107, 239, 223, 229, 43, - 13, 5, 229, 41, 13, 5, 229, 40, 13, 5, 229, 15, 13, 5, 229, 16, 245, 204, - 13, 5, 229, 7, 13, 5, 229, 5, 13, 5, 229, 6, 107, 229, 6, 229, 41, 13, 5, - 228, 254, 13, 5, 228, 252, 13, 5, 228, 6, 13, 5, 228, 7, 107, 228, 6, 13, - 5, 227, 242, 13, 5, 227, 241, 13, 5, 227, 240, 13, 5, 227, 233, 13, 5, - 227, 232, 13, 5, 227, 213, 13, 5, 227, 212, 13, 5, 227, 107, 13, 5, 227, - 108, 254, 69, 13, 5, 227, 108, 24, 245, 75, 13, 5, 227, 108, 24, 236, - 157, 13, 5, 227, 108, 245, 204, 13, 5, 227, 100, 13, 5, 227, 101, 107, - 227, 101, 235, 90, 107, 235, 90, 249, 196, 107, 249, 195, 13, 5, 227, - 101, 228, 118, 13, 5, 227, 95, 13, 5, 108, 24, 252, 181, 13, 5, 108, 24, - 245, 212, 13, 5, 108, 24, 229, 114, 13, 5, 108, 24, 229, 43, 13, 5, 108, - 24, 225, 247, 13, 5, 108, 24, 225, 163, 13, 5, 227, 84, 13, 5, 227, 67, - 13, 5, 227, 44, 13, 5, 227, 45, 245, 204, 13, 5, 226, 175, 13, 5, 226, - 176, 227, 19, 13, 5, 226, 160, 13, 5, 226, 146, 13, 5, 226, 147, 24, 227, - 84, 13, 5, 226, 147, 107, 226, 146, 13, 5, 226, 147, 107, 226, 147, 246, - 185, 107, 246, 185, 246, 161, 107, 246, 160, 13, 5, 225, 250, 13, 5, 225, - 247, 13, 5, 225, 245, 13, 5, 225, 244, 13, 5, 225, 236, 13, 5, 225, 237, - 107, 225, 237, 223, 118, 107, 223, 117, 13, 5, 66, 13, 5, 97, 245, 212, - 13, 5, 97, 97, 66, 13, 5, 97, 107, 97, 233, 242, 107, 233, 242, 246, 161, - 107, 246, 160, 13, 5, 97, 107, 97, 227, 214, 107, 227, 213, 13, 5, 97, - 107, 97, 97, 200, 107, 97, 231, 192, 13, 5, 225, 171, 13, 5, 225, 168, - 13, 5, 225, 163, 13, 5, 225, 164, 238, 86, 13, 5, 225, 164, 24, 253, 61, - 13, 5, 225, 164, 24, 236, 157, 13, 5, 225, 164, 24, 97, 79, 97, 79, 66, - 13, 5, 225, 164, 24, 97, 79, 97, 79, 97, 245, 204, 13, 5, 225, 164, 245, - 204, 13, 5, 225, 164, 229, 96, 13, 5, 225, 164, 229, 97, 24, 253, 61, 13, - 5, 225, 160, 13, 5, 225, 145, 13, 5, 225, 146, 24, 238, 31, 13, 5, 225, - 146, 24, 236, 236, 79, 250, 189, 13, 5, 225, 146, 24, 229, 144, 13, 5, - 225, 146, 24, 66, 13, 5, 225, 144, 13, 5, 225, 140, 13, 5, 225, 141, 24, - 239, 25, 13, 5, 225, 141, 24, 213, 13, 5, 225, 138, 13, 5, 225, 139, 245, - 204, 13, 5, 225, 103, 13, 5, 225, 104, 250, 238, 225, 103, 13, 5, 225, - 104, 229, 96, 13, 5, 225, 101, 13, 5, 225, 102, 24, 102, 79, 154, 13, 5, - 225, 102, 24, 102, 79, 236, 1, 13, 5, 225, 102, 24, 254, 233, 13, 5, 225, - 102, 24, 154, 13, 5, 225, 102, 24, 234, 194, 13, 5, 225, 102, 24, 225, - 171, 13, 5, 225, 102, 24, 225, 172, 79, 254, 80, 13, 5, 225, 102, 24, - 225, 172, 79, 252, 181, 13, 5, 225, 100, 13, 5, 225, 97, 13, 5, 225, 96, - 13, 5, 225, 93, 13, 5, 225, 94, 24, 57, 13, 5, 225, 94, 24, 254, 76, 13, - 5, 225, 94, 24, 125, 13, 5, 225, 94, 24, 248, 97, 13, 5, 225, 94, 24, - 246, 193, 13, 5, 225, 94, 24, 246, 177, 13, 5, 225, 94, 24, 246, 167, - 227, 19, 13, 5, 225, 94, 24, 246, 160, 13, 5, 225, 94, 24, 245, 218, 13, - 5, 225, 94, 24, 154, 13, 5, 225, 94, 24, 240, 49, 13, 5, 225, 94, 24, - 240, 30, 13, 5, 225, 94, 24, 239, 200, 13, 5, 225, 94, 24, 238, 199, 13, - 5, 225, 94, 24, 237, 100, 13, 5, 225, 94, 24, 236, 125, 13, 5, 225, 94, - 24, 213, 13, 5, 225, 94, 24, 229, 114, 13, 5, 225, 94, 24, 229, 5, 13, 5, - 225, 94, 24, 225, 250, 13, 5, 225, 94, 24, 97, 79, 245, 212, 13, 5, 225, - 94, 24, 225, 163, 13, 5, 225, 94, 24, 225, 91, 13, 5, 225, 91, 13, 5, - 225, 92, 24, 66, 13, 5, 225, 83, 13, 5, 225, 84, 24, 57, 13, 5, 225, 84, - 24, 238, 107, 13, 5, 225, 84, 24, 238, 91, 13, 5, 225, 84, 24, 227, 84, - 13, 5, 225, 80, 13, 5, 225, 82, 13, 5, 225, 81, 13, 5, 225, 77, 13, 5, - 225, 67, 13, 5, 225, 68, 24, 239, 25, 13, 5, 225, 66, 13, 5, 223, 117, - 13, 5, 223, 118, 227, 19, 13, 5, 223, 118, 228, 119, 24, 238, 91, 13, 5, - 223, 115, 13, 5, 223, 108, 13, 5, 223, 96, 13, 5, 223, 47, 13, 5, 223, - 48, 107, 223, 47, 13, 5, 223, 46, 13, 5, 223, 44, 13, 5, 223, 45, 239, - 67, 227, 19, 13, 5, 223, 39, 13, 5, 223, 32, 13, 5, 223, 19, 13, 5, 223, - 17, 13, 5, 223, 18, 24, 57, 13, 5, 223, 16, 13, 5, 223, 15, 13, 111, 5, - 135, 254, 80, 13, 111, 5, 152, 254, 80, 13, 111, 5, 246, 243, 254, 80, - 13, 111, 5, 247, 37, 254, 80, 13, 111, 5, 228, 217, 254, 80, 13, 111, 5, - 229, 163, 254, 80, 13, 111, 5, 248, 20, 254, 80, 13, 111, 5, 235, 61, - 254, 80, 13, 111, 5, 152, 249, 195, 13, 111, 5, 246, 243, 249, 195, 13, - 111, 5, 247, 37, 249, 195, 13, 111, 5, 228, 217, 249, 195, 13, 111, 5, - 229, 163, 249, 195, 13, 111, 5, 248, 20, 249, 195, 13, 111, 5, 235, 61, - 249, 195, 13, 111, 5, 246, 243, 66, 13, 111, 5, 247, 37, 66, 13, 111, 5, - 228, 217, 66, 13, 111, 5, 229, 163, 66, 13, 111, 5, 248, 20, 66, 13, 111, - 5, 235, 61, 66, 13, 111, 5, 168, 246, 109, 13, 111, 5, 135, 246, 109, 13, - 111, 5, 152, 246, 109, 13, 111, 5, 246, 243, 246, 109, 13, 111, 5, 247, - 37, 246, 109, 13, 111, 5, 228, 217, 246, 109, 13, 111, 5, 229, 163, 246, - 109, 13, 111, 5, 248, 20, 246, 109, 13, 111, 5, 235, 61, 246, 109, 13, - 111, 5, 168, 246, 106, 13, 111, 5, 135, 246, 106, 13, 111, 5, 152, 246, - 106, 13, 111, 5, 246, 243, 246, 106, 13, 111, 5, 247, 37, 246, 106, 13, - 111, 5, 135, 229, 125, 13, 111, 5, 152, 229, 125, 13, 111, 5, 152, 229, - 126, 225, 54, 15, 13, 111, 5, 246, 243, 229, 125, 13, 111, 5, 247, 37, - 229, 125, 13, 111, 5, 228, 217, 229, 125, 13, 111, 5, 229, 163, 229, 125, - 13, 111, 5, 248, 20, 229, 125, 13, 111, 5, 235, 61, 229, 125, 13, 111, 5, - 168, 229, 121, 13, 111, 5, 135, 229, 121, 13, 111, 5, 152, 229, 121, 13, - 111, 5, 152, 229, 122, 225, 54, 15, 13, 111, 5, 246, 243, 229, 121, 13, - 111, 5, 247, 37, 229, 121, 13, 111, 5, 229, 126, 24, 246, 178, 79, 249, - 195, 13, 111, 5, 229, 126, 24, 246, 178, 79, 236, 125, 13, 111, 5, 168, - 252, 67, 13, 111, 5, 135, 252, 67, 13, 111, 5, 152, 252, 67, 13, 111, 5, - 152, 252, 68, 225, 54, 15, 13, 111, 5, 246, 243, 252, 67, 13, 111, 5, - 247, 37, 252, 67, 13, 111, 5, 152, 225, 54, 211, 247, 182, 13, 111, 5, - 152, 225, 54, 211, 247, 179, 13, 111, 5, 246, 243, 225, 54, 211, 237, - 174, 13, 111, 5, 246, 243, 225, 54, 211, 237, 172, 13, 111, 5, 246, 243, - 225, 54, 211, 237, 175, 57, 13, 111, 5, 246, 243, 225, 54, 211, 237, 175, - 254, 27, 13, 111, 5, 228, 217, 225, 54, 211, 254, 77, 13, 111, 5, 229, - 163, 225, 54, 211, 240, 22, 13, 111, 5, 229, 163, 225, 54, 211, 240, 24, - 57, 13, 111, 5, 229, 163, 225, 54, 211, 240, 24, 254, 27, 13, 111, 5, - 248, 20, 225, 54, 211, 225, 79, 13, 111, 5, 248, 20, 225, 54, 211, 225, - 78, 13, 111, 5, 235, 61, 225, 54, 211, 240, 38, 13, 111, 5, 235, 61, 225, - 54, 211, 240, 37, 13, 111, 5, 235, 61, 225, 54, 211, 240, 36, 13, 111, 5, - 235, 61, 225, 54, 211, 240, 39, 57, 13, 111, 5, 135, 254, 81, 227, 19, - 13, 111, 5, 152, 254, 81, 227, 19, 13, 111, 5, 246, 243, 254, 81, 227, - 19, 13, 111, 5, 247, 37, 254, 81, 227, 19, 13, 111, 5, 228, 217, 254, 81, - 227, 19, 13, 111, 5, 168, 253, 42, 13, 111, 5, 135, 253, 42, 13, 111, 5, - 152, 253, 42, 13, 111, 5, 246, 243, 253, 42, 13, 111, 5, 246, 243, 253, - 43, 225, 54, 15, 13, 111, 5, 247, 37, 253, 42, 13, 111, 5, 247, 37, 253, - 43, 225, 54, 15, 13, 111, 5, 235, 69, 13, 111, 5, 235, 70, 13, 111, 5, - 168, 247, 178, 13, 111, 5, 135, 247, 178, 13, 111, 5, 168, 226, 214, 249, - 195, 13, 111, 5, 135, 226, 212, 249, 195, 13, 111, 5, 247, 37, 228, 209, - 249, 195, 13, 111, 5, 168, 226, 214, 225, 54, 211, 57, 13, 111, 5, 135, - 226, 212, 225, 54, 211, 57, 13, 111, 5, 168, 248, 17, 254, 80, 13, 111, - 5, 168, 232, 77, 254, 80, 13, 111, 5, 84, 254, 72, 168, 228, 210, 13, - 111, 5, 84, 254, 72, 168, 232, 76, 13, 232, 171, 5, 84, 254, 72, 224, 92, - 249, 184, 13, 232, 171, 5, 61, 251, 61, 13, 232, 171, 5, 250, 1, 251, 61, - 13, 232, 171, 5, 250, 1, 226, 74, 43, 23, 14, 232, 177, 43, 23, 14, 250, - 132, 43, 23, 14, 233, 117, 43, 23, 14, 233, 252, 248, 6, 43, 23, 14, 233, - 252, 249, 205, 43, 23, 14, 225, 58, 248, 6, 43, 23, 14, 225, 58, 249, - 205, 43, 23, 14, 239, 16, 43, 23, 14, 227, 125, 43, 23, 14, 233, 186, 43, - 23, 14, 223, 163, 43, 23, 14, 223, 164, 249, 205, 43, 23, 14, 238, 112, - 43, 23, 14, 254, 154, 248, 6, 43, 23, 14, 247, 144, 248, 6, 43, 23, 14, - 227, 30, 43, 23, 14, 238, 239, 43, 23, 14, 254, 145, 43, 23, 14, 254, - 146, 249, 205, 43, 23, 14, 227, 130, 43, 23, 14, 226, 204, 43, 23, 14, - 234, 71, 254, 118, 43, 23, 14, 246, 0, 254, 118, 43, 23, 14, 232, 176, - 43, 23, 14, 251, 198, 43, 23, 14, 225, 48, 43, 23, 14, 239, 199, 254, - 118, 43, 23, 14, 238, 241, 254, 118, 43, 23, 14, 238, 240, 254, 118, 43, - 23, 14, 230, 235, 43, 23, 14, 233, 177, 43, 23, 14, 228, 53, 254, 148, - 43, 23, 14, 233, 251, 254, 118, 43, 23, 14, 225, 57, 254, 118, 43, 23, - 14, 254, 149, 254, 118, 43, 23, 14, 254, 143, 43, 23, 14, 238, 158, 43, - 23, 14, 231, 190, 43, 23, 14, 233, 67, 254, 118, 43, 23, 14, 226, 155, - 43, 23, 14, 254, 189, 43, 23, 14, 230, 194, 43, 23, 14, 227, 133, 254, - 118, 43, 23, 14, 227, 133, 236, 200, 228, 51, 43, 23, 14, 233, 246, 254, - 118, 43, 23, 14, 226, 234, 43, 23, 14, 237, 222, 43, 23, 14, 248, 73, 43, - 23, 14, 226, 80, 43, 23, 14, 227, 12, 43, 23, 14, 238, 115, 43, 23, 14, - 254, 154, 247, 144, 235, 152, 43, 23, 14, 246, 220, 254, 118, 43, 23, 14, - 240, 26, 43, 23, 14, 226, 56, 254, 118, 43, 23, 14, 239, 18, 226, 55, 43, - 23, 14, 233, 135, 43, 23, 14, 232, 180, 43, 23, 14, 238, 140, 43, 23, 14, - 251, 145, 254, 118, 43, 23, 14, 232, 0, 43, 23, 14, 233, 189, 254, 118, - 43, 23, 14, 233, 187, 254, 118, 43, 23, 14, 244, 67, 43, 23, 14, 235, - 236, 43, 23, 14, 233, 103, 43, 23, 14, 238, 141, 254, 211, 43, 23, 14, - 226, 56, 254, 211, 43, 23, 14, 228, 34, 43, 23, 14, 245, 226, 43, 23, 14, - 239, 199, 235, 152, 43, 23, 14, 234, 71, 235, 152, 43, 23, 14, 233, 252, - 235, 152, 43, 23, 14, 233, 102, 43, 23, 14, 238, 128, 43, 23, 14, 233, - 101, 43, 23, 14, 238, 114, 43, 23, 14, 233, 136, 235, 152, 43, 23, 14, - 238, 240, 235, 153, 254, 172, 43, 23, 14, 238, 241, 235, 153, 254, 172, - 43, 23, 14, 223, 161, 43, 23, 14, 254, 146, 235, 152, 43, 23, 14, 254, - 147, 227, 131, 235, 152, 43, 23, 14, 223, 162, 43, 23, 14, 238, 113, 43, - 23, 14, 248, 1, 43, 23, 14, 251, 199, 43, 23, 14, 236, 134, 239, 198, 43, - 23, 14, 225, 58, 235, 152, 43, 23, 14, 233, 67, 235, 152, 43, 23, 14, - 232, 181, 235, 152, 43, 23, 14, 234, 68, 43, 23, 14, 254, 164, 43, 23, - 14, 237, 77, 43, 23, 14, 233, 187, 235, 152, 43, 23, 14, 233, 189, 235, - 152, 43, 23, 14, 247, 169, 233, 188, 43, 23, 14, 238, 51, 43, 23, 14, - 254, 165, 43, 23, 14, 226, 56, 235, 152, 43, 23, 14, 248, 4, 43, 23, 14, - 227, 133, 235, 152, 43, 23, 14, 227, 126, 43, 23, 14, 251, 145, 235, 152, - 43, 23, 14, 247, 210, 43, 23, 14, 230, 195, 235, 152, 43, 23, 14, 224, - 58, 238, 158, 43, 23, 14, 226, 53, 43, 23, 14, 232, 182, 43, 23, 14, 226, - 57, 43, 23, 14, 226, 54, 43, 23, 14, 232, 179, 43, 23, 14, 226, 52, 43, - 23, 14, 232, 178, 43, 23, 14, 245, 255, 43, 23, 14, 254, 113, 43, 23, 14, - 247, 169, 254, 113, 43, 23, 14, 233, 246, 235, 152, 43, 23, 14, 226, 233, - 247, 177, 43, 23, 14, 226, 233, 247, 143, 43, 23, 14, 226, 235, 254, 150, - 43, 23, 14, 226, 228, 239, 57, 254, 142, 43, 23, 14, 239, 17, 43, 23, 14, - 247, 229, 43, 23, 14, 223, 205, 239, 15, 43, 23, 14, 223, 205, 254, 172, - 43, 23, 14, 228, 52, 43, 23, 14, 238, 159, 254, 172, 43, 23, 14, 249, - 206, 254, 118, 43, 23, 14, 238, 116, 254, 118, 43, 23, 14, 238, 116, 254, - 211, 43, 23, 14, 238, 116, 235, 152, 43, 23, 14, 254, 149, 235, 152, 43, - 23, 14, 254, 151, 43, 23, 14, 249, 205, 43, 23, 14, 226, 65, 43, 23, 14, - 227, 4, 43, 23, 14, 238, 132, 43, 23, 14, 237, 225, 247, 225, 251, 138, - 43, 23, 14, 237, 225, 248, 74, 251, 139, 43, 23, 14, 237, 225, 226, 67, - 251, 139, 43, 23, 14, 237, 225, 227, 14, 251, 139, 43, 23, 14, 237, 225, - 240, 21, 251, 138, 43, 23, 14, 246, 0, 235, 153, 254, 172, 43, 23, 14, - 246, 0, 233, 178, 254, 109, 43, 23, 14, 246, 0, 233, 178, 250, 26, 43, - 23, 14, 249, 228, 43, 23, 14, 249, 229, 233, 178, 254, 110, 239, 15, 43, - 23, 14, 249, 229, 233, 178, 254, 110, 254, 172, 43, 23, 14, 249, 229, - 233, 178, 250, 26, 43, 23, 14, 226, 71, 43, 23, 14, 254, 114, 43, 23, 14, - 240, 28, 43, 23, 14, 249, 249, 43, 23, 14, 255, 4, 232, 246, 254, 115, - 43, 23, 14, 255, 4, 254, 112, 43, 23, 14, 255, 4, 254, 115, 43, 23, 14, - 255, 4, 236, 195, 43, 23, 14, 255, 4, 236, 203, 43, 23, 14, 255, 4, 246, - 1, 43, 23, 14, 255, 4, 245, 254, 43, 23, 14, 255, 4, 232, 246, 246, 1, - 43, 23, 14, 237, 10, 232, 187, 244, 65, 43, 23, 14, 237, 10, 254, 213, - 232, 187, 244, 65, 43, 23, 14, 237, 10, 250, 25, 244, 65, 43, 23, 14, - 237, 10, 254, 213, 250, 25, 244, 65, 43, 23, 14, 237, 10, 226, 60, 244, - 65, 43, 23, 14, 237, 10, 226, 72, 43, 23, 14, 237, 10, 227, 8, 244, 65, - 43, 23, 14, 237, 10, 227, 8, 237, 228, 244, 65, 43, 23, 14, 237, 10, 237, - 228, 244, 65, 43, 23, 14, 237, 10, 233, 22, 244, 65, 43, 23, 14, 239, - 203, 227, 26, 244, 66, 43, 23, 14, 254, 147, 227, 26, 244, 66, 43, 23, - 14, 247, 110, 227, 5, 43, 23, 14, 247, 110, 236, 93, 43, 23, 14, 247, - 110, 249, 233, 43, 23, 14, 237, 10, 225, 52, 244, 65, 43, 23, 14, 237, - 10, 232, 186, 244, 65, 43, 23, 14, 237, 10, 233, 22, 227, 8, 244, 65, 43, - 23, 14, 245, 252, 236, 5, 254, 150, 43, 23, 14, 245, 252, 236, 5, 249, - 204, 43, 23, 14, 247, 237, 239, 57, 246, 220, 224, 195, 43, 23, 14, 240, - 27, 43, 23, 14, 240, 25, 43, 23, 14, 246, 220, 254, 119, 250, 24, 244, - 64, 43, 23, 14, 246, 220, 249, 247, 213, 43, 23, 14, 246, 220, 249, 247, - 235, 236, 43, 23, 14, 246, 220, 235, 232, 244, 65, 43, 23, 14, 246, 220, - 249, 247, 250, 4, 43, 23, 14, 246, 220, 228, 200, 249, 246, 250, 4, 43, - 23, 14, 246, 220, 249, 247, 239, 3, 43, 23, 14, 246, 220, 249, 247, 223, - 27, 43, 23, 14, 246, 220, 249, 247, 235, 90, 239, 15, 43, 23, 14, 246, - 220, 249, 247, 235, 90, 254, 172, 43, 23, 14, 246, 220, 237, 40, 251, - 140, 249, 233, 43, 23, 14, 246, 220, 237, 40, 251, 140, 236, 93, 43, 23, - 14, 247, 71, 228, 200, 251, 140, 225, 51, 43, 23, 14, 246, 220, 228, 200, - 251, 140, 227, 134, 43, 23, 14, 246, 220, 235, 154, 43, 23, 14, 251, 141, - 223, 3, 43, 23, 14, 251, 141, 238, 157, 43, 23, 14, 251, 141, 228, 141, - 43, 23, 14, 246, 220, 244, 81, 223, 204, 227, 9, 43, 23, 14, 246, 220, - 247, 238, 254, 166, 43, 23, 14, 223, 204, 226, 61, 43, 23, 14, 249, 241, - 226, 61, 43, 23, 14, 249, 241, 227, 9, 43, 23, 14, 249, 241, 254, 152, - 248, 74, 249, 155, 43, 23, 14, 249, 241, 236, 91, 227, 13, 249, 155, 43, - 23, 14, 249, 241, 249, 225, 247, 153, 249, 155, 43, 23, 14, 249, 241, - 226, 69, 234, 75, 249, 155, 43, 23, 14, 223, 204, 254, 152, 248, 74, 249, - 155, 43, 23, 14, 223, 204, 236, 91, 227, 13, 249, 155, 43, 23, 14, 223, - 204, 249, 225, 247, 153, 249, 155, 43, 23, 14, 223, 204, 226, 69, 234, - 75, 249, 155, 43, 23, 14, 246, 120, 249, 240, 43, 23, 14, 246, 120, 223, - 203, 43, 23, 14, 249, 248, 254, 152, 236, 135, 43, 23, 14, 249, 248, 254, - 152, 236, 220, 43, 23, 14, 249, 248, 249, 205, 43, 23, 14, 249, 248, 226, - 226, 43, 23, 14, 228, 248, 226, 226, 43, 23, 14, 228, 248, 226, 227, 249, - 194, 43, 23, 14, 228, 248, 226, 227, 226, 62, 43, 23, 14, 228, 248, 226, - 227, 227, 2, 43, 23, 14, 228, 248, 254, 90, 43, 23, 14, 228, 248, 254, - 91, 249, 194, 43, 23, 14, 228, 248, 254, 91, 226, 62, 43, 23, 14, 228, - 248, 254, 91, 227, 2, 43, 23, 14, 249, 226, 246, 102, 43, 23, 14, 249, - 232, 234, 13, 43, 23, 14, 228, 46, 43, 23, 14, 254, 107, 213, 43, 23, 14, - 254, 107, 224, 195, 43, 23, 14, 254, 107, 246, 193, 43, 23, 14, 254, 107, - 250, 4, 43, 23, 14, 254, 107, 239, 3, 43, 23, 14, 254, 107, 223, 27, 43, - 23, 14, 254, 107, 235, 89, 43, 23, 14, 238, 240, 235, 153, 236, 202, 43, - 23, 14, 238, 241, 235, 153, 236, 202, 43, 23, 14, 238, 240, 235, 153, - 239, 15, 43, 23, 14, 238, 241, 235, 153, 239, 15, 43, 23, 14, 238, 159, - 239, 15, 43, 23, 14, 246, 0, 235, 153, 239, 15, 23, 14, 228, 241, 253, - 32, 23, 14, 47, 253, 32, 23, 14, 35, 253, 32, 23, 14, 231, 193, 35, 253, - 32, 23, 14, 250, 129, 253, 32, 23, 14, 229, 63, 253, 32, 23, 14, 42, 231, - 212, 53, 23, 14, 41, 231, 212, 53, 23, 14, 231, 212, 249, 138, 23, 14, - 250, 166, 230, 198, 23, 14, 250, 190, 252, 14, 23, 14, 230, 198, 23, 14, - 251, 66, 23, 14, 231, 210, 247, 60, 23, 14, 231, 210, 247, 59, 23, 14, - 231, 210, 247, 58, 23, 14, 247, 76, 23, 14, 247, 77, 51, 23, 14, 252, - 108, 76, 23, 14, 252, 34, 23, 14, 252, 116, 23, 14, 104, 23, 14, 234, 60, - 228, 65, 23, 14, 225, 202, 228, 65, 23, 14, 226, 190, 228, 65, 23, 14, - 246, 242, 228, 65, 23, 14, 247, 36, 228, 65, 23, 14, 228, 216, 228, 65, - 23, 14, 228, 214, 246, 228, 23, 14, 246, 240, 246, 228, 23, 14, 246, 196, - 251, 92, 23, 14, 246, 196, 251, 93, 234, 15, 254, 204, 23, 14, 246, 196, - 251, 93, 234, 15, 253, 22, 23, 14, 252, 45, 251, 92, 23, 14, 247, 131, - 251, 92, 23, 14, 247, 131, 251, 93, 234, 15, 254, 204, 23, 14, 247, 131, - 251, 93, 234, 15, 253, 22, 23, 14, 248, 112, 251, 91, 23, 14, 248, 112, - 251, 90, 23, 14, 236, 53, 236, 234, 231, 199, 23, 14, 47, 229, 123, 23, - 14, 47, 247, 24, 23, 14, 247, 25, 225, 116, 23, 14, 247, 25, 248, 127, - 23, 14, 235, 224, 225, 116, 23, 14, 235, 224, 248, 127, 23, 14, 229, 124, - 225, 116, 23, 14, 229, 124, 248, 127, 23, 14, 232, 77, 206, 229, 123, 23, - 14, 232, 77, 206, 247, 24, 23, 14, 251, 52, 226, 157, 23, 14, 250, 213, - 226, 157, 23, 14, 234, 15, 254, 204, 23, 14, 234, 15, 253, 22, 23, 14, - 232, 62, 254, 204, 23, 14, 232, 62, 253, 22, 23, 14, 236, 56, 231, 199, - 23, 14, 224, 119, 231, 199, 23, 14, 132, 231, 199, 23, 14, 232, 77, 231, - 199, 23, 14, 248, 17, 231, 199, 23, 14, 228, 211, 231, 199, 23, 14, 226, - 205, 231, 199, 23, 14, 228, 205, 231, 199, 23, 14, 168, 244, 136, 225, - 214, 231, 199, 23, 14, 224, 74, 234, 236, 23, 14, 79, 234, 236, 23, 14, - 251, 107, 224, 74, 234, 236, 23, 14, 37, 234, 237, 224, 121, 23, 14, 37, - 234, 237, 252, 150, 23, 14, 226, 79, 234, 237, 99, 224, 121, 23, 14, 226, - 79, 234, 237, 99, 252, 150, 23, 14, 226, 79, 234, 237, 42, 224, 121, 23, - 14, 226, 79, 234, 237, 42, 252, 150, 23, 14, 226, 79, 234, 237, 41, 224, - 121, 23, 14, 226, 79, 234, 237, 41, 252, 150, 23, 14, 226, 79, 234, 237, - 103, 224, 121, 23, 14, 226, 79, 234, 237, 103, 252, 150, 23, 14, 226, 79, - 234, 237, 99, 41, 224, 121, 23, 14, 226, 79, 234, 237, 99, 41, 252, 150, - 23, 14, 236, 85, 234, 237, 224, 121, 23, 14, 236, 85, 234, 237, 252, 150, - 23, 14, 226, 76, 234, 237, 103, 224, 121, 23, 14, 226, 76, 234, 237, 103, - 252, 150, 23, 14, 233, 181, 234, 236, 23, 14, 224, 201, 234, 236, 23, 14, - 234, 237, 252, 150, 23, 14, 234, 201, 234, 236, 23, 14, 251, 71, 234, - 237, 224, 121, 23, 14, 251, 71, 234, 237, 252, 150, 23, 14, 252, 106, 23, - 14, 224, 119, 234, 238, 23, 14, 132, 234, 238, 23, 14, 232, 77, 234, 238, - 23, 14, 248, 17, 234, 238, 23, 14, 228, 211, 234, 238, 23, 14, 226, 205, - 234, 238, 23, 14, 228, 205, 234, 238, 23, 14, 168, 244, 136, 225, 214, - 234, 238, 23, 14, 36, 228, 48, 23, 14, 36, 228, 126, 228, 48, 23, 14, 36, - 226, 85, 23, 14, 36, 226, 84, 23, 14, 36, 226, 83, 23, 14, 247, 50, 226, - 85, 23, 14, 247, 50, 226, 84, 23, 14, 247, 50, 226, 83, 23, 14, 36, 254, - 51, 249, 140, 23, 14, 36, 247, 30, 23, 14, 36, 247, 29, 23, 14, 36, 247, - 28, 23, 14, 36, 247, 27, 23, 14, 36, 247, 26, 23, 14, 252, 226, 252, 237, - 23, 14, 247, 233, 252, 237, 23, 14, 252, 226, 226, 170, 23, 14, 247, 233, - 226, 170, 23, 14, 252, 226, 228, 185, 23, 14, 247, 233, 228, 185, 23, 14, - 252, 226, 233, 76, 23, 14, 247, 233, 233, 76, 23, 14, 36, 255, 41, 23, - 14, 36, 228, 67, 23, 14, 36, 227, 18, 23, 14, 36, 228, 68, 23, 14, 36, - 237, 21, 23, 14, 36, 237, 20, 23, 14, 36, 255, 40, 23, 14, 36, 237, 118, - 23, 14, 254, 98, 225, 116, 23, 14, 254, 98, 248, 127, 23, 14, 36, 249, - 152, 23, 14, 36, 231, 138, 23, 14, 36, 247, 18, 23, 14, 36, 228, 181, 23, - 14, 36, 252, 209, 23, 14, 36, 47, 226, 110, 23, 14, 36, 226, 66, 226, - 110, 23, 14, 231, 141, 23, 14, 228, 2, 23, 14, 223, 119, 23, 14, 233, 68, - 23, 14, 236, 192, 23, 14, 246, 247, 23, 14, 250, 249, 23, 14, 250, 68, - 23, 14, 245, 247, 234, 239, 228, 194, 23, 14, 245, 247, 234, 239, 235, 7, - 228, 194, 23, 14, 226, 96, 23, 14, 225, 233, 23, 14, 239, 223, 225, 233, - 23, 14, 225, 234, 228, 194, 23, 14, 225, 234, 225, 116, 23, 14, 234, 26, - 228, 22, 23, 14, 234, 26, 228, 19, 23, 14, 234, 26, 228, 18, 23, 14, 234, - 26, 228, 17, 23, 14, 234, 26, 228, 16, 23, 14, 234, 26, 228, 15, 23, 14, - 234, 26, 228, 14, 23, 14, 234, 26, 228, 13, 23, 14, 234, 26, 228, 12, 23, - 14, 234, 26, 228, 21, 23, 14, 234, 26, 228, 20, 23, 14, 245, 128, 23, 14, - 235, 161, 23, 14, 247, 233, 106, 228, 42, 23, 14, 250, 62, 228, 194, 23, - 14, 36, 103, 252, 121, 23, 14, 36, 99, 252, 121, 23, 14, 36, 245, 137, - 23, 14, 36, 228, 175, 233, 25, 23, 14, 233, 148, 76, 23, 14, 233, 148, - 99, 76, 23, 14, 132, 233, 148, 76, 23, 14, 246, 17, 225, 116, 23, 14, - 246, 17, 248, 127, 23, 14, 2, 247, 49, 23, 14, 250, 152, 23, 14, 250, - 153, 254, 216, 23, 14, 236, 253, 23, 14, 237, 126, 23, 14, 252, 103, 23, - 14, 229, 190, 224, 121, 23, 14, 229, 190, 252, 150, 23, 14, 236, 123, 23, - 14, 236, 124, 252, 150, 23, 14, 229, 184, 224, 121, 23, 14, 229, 184, - 252, 150, 23, 14, 246, 210, 224, 121, 23, 14, 246, 210, 252, 150, 23, 14, - 237, 127, 233, 121, 231, 199, 23, 14, 237, 127, 240, 20, 231, 199, 23, - 14, 252, 104, 231, 199, 23, 14, 229, 190, 231, 199, 23, 14, 236, 124, - 231, 199, 23, 14, 229, 184, 231, 199, 23, 14, 227, 25, 233, 119, 250, - 230, 232, 195, 233, 120, 23, 14, 227, 25, 233, 119, 250, 230, 232, 195, - 240, 19, 23, 14, 227, 25, 233, 119, 250, 230, 232, 195, 233, 121, 249, - 215, 23, 14, 227, 25, 240, 18, 250, 230, 232, 195, 233, 120, 23, 14, 227, - 25, 240, 18, 250, 230, 232, 195, 240, 19, 23, 14, 227, 25, 240, 18, 250, - 230, 232, 195, 240, 20, 249, 215, 23, 14, 227, 25, 240, 18, 250, 230, - 232, 195, 240, 20, 249, 214, 23, 14, 227, 25, 240, 18, 250, 230, 232, - 195, 240, 20, 249, 213, 23, 14, 250, 246, 23, 14, 245, 227, 252, 45, 251, - 92, 23, 14, 245, 227, 247, 131, 251, 92, 23, 14, 37, 254, 27, 23, 14, - 224, 215, 23, 14, 233, 2, 23, 14, 251, 85, 23, 14, 230, 226, 23, 14, 251, - 87, 23, 14, 226, 101, 23, 14, 232, 240, 23, 14, 232, 241, 247, 20, 23, - 14, 230, 227, 247, 20, 23, 14, 226, 102, 231, 198, 23, 14, 233, 109, 227, - 254, 19, 224, 205, 150, 227, 182, 19, 224, 205, 150, 227, 171, 19, 224, - 205, 150, 227, 161, 19, 224, 205, 150, 227, 154, 19, 224, 205, 150, 227, - 146, 19, 224, 205, 150, 227, 140, 19, 224, 205, 150, 227, 139, 19, 224, - 205, 150, 227, 138, 19, 224, 205, 150, 227, 137, 19, 224, 205, 150, 227, - 181, 19, 224, 205, 150, 227, 180, 19, 224, 205, 150, 227, 179, 19, 224, - 205, 150, 227, 178, 19, 224, 205, 150, 227, 177, 19, 224, 205, 150, 227, - 176, 19, 224, 205, 150, 227, 175, 19, 224, 205, 150, 227, 174, 19, 224, - 205, 150, 227, 173, 19, 224, 205, 150, 227, 172, 19, 224, 205, 150, 227, - 170, 19, 224, 205, 150, 227, 169, 19, 224, 205, 150, 227, 168, 19, 224, - 205, 150, 227, 167, 19, 224, 205, 150, 227, 166, 19, 224, 205, 150, 227, - 145, 19, 224, 205, 150, 227, 144, 19, 224, 205, 150, 227, 143, 19, 224, - 205, 150, 227, 142, 19, 224, 205, 150, 227, 141, 19, 239, 242, 150, 227, - 182, 19, 239, 242, 150, 227, 171, 19, 239, 242, 150, 227, 154, 19, 239, - 242, 150, 227, 146, 19, 239, 242, 150, 227, 139, 19, 239, 242, 150, 227, - 138, 19, 239, 242, 150, 227, 180, 19, 239, 242, 150, 227, 179, 19, 239, - 242, 150, 227, 178, 19, 239, 242, 150, 227, 177, 19, 239, 242, 150, 227, - 174, 19, 239, 242, 150, 227, 173, 19, 239, 242, 150, 227, 172, 19, 239, - 242, 150, 227, 167, 19, 239, 242, 150, 227, 166, 19, 239, 242, 150, 227, - 165, 19, 239, 242, 150, 227, 164, 19, 239, 242, 150, 227, 163, 19, 239, - 242, 150, 227, 162, 19, 239, 242, 150, 227, 160, 19, 239, 242, 150, 227, - 159, 19, 239, 242, 150, 227, 158, 19, 239, 242, 150, 227, 157, 19, 239, - 242, 150, 227, 156, 19, 239, 242, 150, 227, 155, 19, 239, 242, 150, 227, - 153, 19, 239, 242, 150, 227, 152, 19, 239, 242, 150, 227, 151, 19, 239, - 242, 150, 227, 150, 19, 239, 242, 150, 227, 149, 19, 239, 242, 150, 227, - 148, 19, 239, 242, 150, 227, 147, 19, 239, 242, 150, 227, 145, 19, 239, - 242, 150, 227, 144, 19, 239, 242, 150, 227, 143, 19, 239, 242, 150, 227, - 142, 19, 239, 242, 150, 227, 141, 36, 19, 23, 226, 63, 36, 19, 23, 227, - 3, 36, 19, 23, 233, 128, 19, 23, 237, 224, 236, 92, 32, 248, 48, 249, - 227, 32, 245, 111, 248, 48, 249, 227, 32, 244, 139, 248, 48, 249, 227, - 32, 248, 47, 245, 112, 249, 227, 32, 248, 47, 244, 138, 249, 227, 32, - 248, 48, 142, 32, 251, 218, 142, 32, 246, 218, 251, 106, 142, 32, 236, - 116, 142, 32, 253, 27, 142, 32, 239, 0, 228, 184, 142, 32, 251, 19, 142, - 32, 254, 82, 142, 32, 234, 34, 142, 32, 252, 111, 234, 10, 142, 32, 250, - 64, 145, 249, 191, 142, 32, 249, 188, 142, 32, 223, 167, 142, 32, 240, - 12, 142, 32, 233, 133, 142, 32, 231, 243, 142, 32, 251, 29, 142, 32, 244, - 222, 253, 66, 142, 32, 224, 168, 142, 32, 247, 6, 142, 32, 255, 21, 142, - 32, 231, 219, 142, 32, 231, 203, 142, 32, 248, 46, 142, 32, 239, 103, - 142, 32, 251, 24, 142, 32, 247, 232, 142, 32, 248, 83, 142, 32, 251, 194, - 142, 32, 250, 70, 142, 32, 18, 231, 202, 142, 32, 233, 236, 142, 32, 237, - 227, 142, 32, 251, 80, 142, 32, 238, 188, 142, 32, 246, 151, 142, 32, - 228, 28, 142, 32, 232, 163, 142, 32, 246, 217, 142, 32, 231, 204, 142, - 32, 237, 253, 145, 236, 101, 142, 32, 231, 200, 142, 32, 246, 7, 180, - 236, 223, 142, 32, 247, 234, 142, 32, 228, 35, 142, 32, 245, 229, 142, - 32, 247, 227, 142, 32, 233, 162, 142, 32, 231, 132, 142, 32, 247, 19, - 142, 32, 225, 50, 145, 224, 155, 142, 32, 251, 32, 142, 32, 236, 233, - 142, 32, 247, 170, 142, 32, 225, 124, 142, 32, 249, 216, 142, 32, 251, - 82, 236, 72, 142, 32, 245, 214, 142, 32, 246, 152, 240, 16, 142, 32, 237, - 4, 142, 32, 255, 38, 142, 32, 247, 245, 142, 32, 248, 129, 142, 32, 224, - 153, 142, 32, 228, 238, 142, 32, 239, 248, 142, 32, 250, 37, 142, 32, - 250, 134, 142, 32, 249, 212, 142, 32, 247, 147, 142, 32, 229, 158, 142, - 32, 228, 37, 142, 32, 245, 139, 142, 32, 251, 48, 142, 32, 251, 78, 142, - 32, 247, 114, 142, 32, 255, 5, 142, 32, 251, 47, 142, 32, 234, 62, 226, - 240, 225, 33, 142, 32, 249, 235, 142, 32, 238, 36, 142, 32, 246, 244, - 250, 255, 231, 116, 225, 126, 21, 118, 250, 255, 231, 116, 225, 126, 21, - 113, 250, 255, 231, 116, 225, 126, 21, 166, 250, 255, 231, 116, 225, 126, - 21, 158, 250, 255, 231, 116, 225, 126, 21, 173, 250, 255, 231, 116, 225, - 126, 21, 183, 250, 255, 231, 116, 225, 126, 21, 194, 250, 255, 231, 116, - 225, 126, 21, 187, 250, 255, 231, 116, 225, 126, 21, 192, 250, 255, 231, - 116, 227, 22, 21, 118, 250, 255, 231, 116, 227, 22, 21, 113, 250, 255, - 231, 116, 227, 22, 21, 166, 250, 255, 231, 116, 227, 22, 21, 158, 250, - 255, 231, 116, 227, 22, 21, 173, 250, 255, 231, 116, 227, 22, 21, 183, - 250, 255, 231, 116, 227, 22, 21, 194, 250, 255, 231, 116, 227, 22, 21, - 187, 250, 255, 231, 116, 227, 22, 21, 192, 12, 18, 6, 57, 12, 18, 6, 254, - 27, 12, 18, 6, 252, 44, 12, 18, 6, 222, 222, 12, 18, 6, 72, 12, 18, 6, - 247, 130, 12, 18, 6, 214, 12, 18, 6, 212, 12, 18, 6, 74, 12, 18, 6, 239, - 182, 12, 18, 6, 239, 76, 12, 18, 6, 149, 12, 18, 6, 185, 12, 18, 6, 199, - 12, 18, 6, 73, 12, 18, 6, 233, 244, 12, 18, 6, 232, 139, 12, 18, 6, 146, - 12, 18, 6, 193, 12, 18, 6, 227, 109, 12, 18, 6, 66, 12, 18, 6, 196, 12, - 18, 6, 224, 174, 12, 18, 6, 224, 73, 12, 18, 6, 224, 25, 12, 18, 6, 223, - 119, 12, 18, 3, 57, 12, 18, 3, 254, 27, 12, 18, 3, 252, 44, 12, 18, 3, - 222, 222, 12, 18, 3, 72, 12, 18, 3, 247, 130, 12, 18, 3, 214, 12, 18, 3, - 212, 12, 18, 3, 74, 12, 18, 3, 239, 182, 12, 18, 3, 239, 76, 12, 18, 3, - 149, 12, 18, 3, 185, 12, 18, 3, 199, 12, 18, 3, 73, 12, 18, 3, 233, 244, - 12, 18, 3, 232, 139, 12, 18, 3, 146, 12, 18, 3, 193, 12, 18, 3, 227, 109, - 12, 18, 3, 66, 12, 18, 3, 196, 12, 18, 3, 224, 174, 12, 18, 3, 224, 73, - 12, 18, 3, 224, 25, 12, 18, 3, 223, 119, 12, 27, 6, 57, 12, 27, 6, 254, - 27, 12, 27, 6, 252, 44, 12, 27, 6, 222, 222, 12, 27, 6, 72, 12, 27, 6, - 247, 130, 12, 27, 6, 214, 12, 27, 6, 212, 12, 27, 6, 74, 12, 27, 6, 239, - 182, 12, 27, 6, 239, 76, 12, 27, 6, 149, 12, 27, 6, 185, 12, 27, 6, 199, - 12, 27, 6, 73, 12, 27, 6, 233, 244, 12, 27, 6, 232, 139, 12, 27, 6, 146, - 12, 27, 6, 193, 12, 27, 6, 227, 109, 12, 27, 6, 66, 12, 27, 6, 196, 12, - 27, 6, 224, 174, 12, 27, 6, 224, 73, 12, 27, 6, 224, 25, 12, 27, 6, 223, - 119, 12, 27, 3, 57, 12, 27, 3, 254, 27, 12, 27, 3, 252, 44, 12, 27, 3, - 222, 222, 12, 27, 3, 72, 12, 27, 3, 247, 130, 12, 27, 3, 214, 12, 27, 3, - 74, 12, 27, 3, 239, 182, 12, 27, 3, 239, 76, 12, 27, 3, 149, 12, 27, 3, - 185, 12, 27, 3, 199, 12, 27, 3, 73, 12, 27, 3, 233, 244, 12, 27, 3, 232, - 139, 12, 27, 3, 146, 12, 27, 3, 193, 12, 27, 3, 227, 109, 12, 27, 3, 66, - 12, 27, 3, 196, 12, 27, 3, 224, 174, 12, 27, 3, 224, 73, 12, 27, 3, 224, - 25, 12, 27, 3, 223, 119, 12, 18, 27, 6, 57, 12, 18, 27, 6, 254, 27, 12, - 18, 27, 6, 252, 44, 12, 18, 27, 6, 222, 222, 12, 18, 27, 6, 72, 12, 18, - 27, 6, 247, 130, 12, 18, 27, 6, 214, 12, 18, 27, 6, 212, 12, 18, 27, 6, - 74, 12, 18, 27, 6, 239, 182, 12, 18, 27, 6, 239, 76, 12, 18, 27, 6, 149, - 12, 18, 27, 6, 185, 12, 18, 27, 6, 199, 12, 18, 27, 6, 73, 12, 18, 27, 6, - 233, 244, 12, 18, 27, 6, 232, 139, 12, 18, 27, 6, 146, 12, 18, 27, 6, - 193, 12, 18, 27, 6, 227, 109, 12, 18, 27, 6, 66, 12, 18, 27, 6, 196, 12, - 18, 27, 6, 224, 174, 12, 18, 27, 6, 224, 73, 12, 18, 27, 6, 224, 25, 12, - 18, 27, 6, 223, 119, 12, 18, 27, 3, 57, 12, 18, 27, 3, 254, 27, 12, 18, - 27, 3, 252, 44, 12, 18, 27, 3, 222, 222, 12, 18, 27, 3, 72, 12, 18, 27, - 3, 247, 130, 12, 18, 27, 3, 214, 12, 18, 27, 3, 212, 12, 18, 27, 3, 74, - 12, 18, 27, 3, 239, 182, 12, 18, 27, 3, 239, 76, 12, 18, 27, 3, 149, 12, - 18, 27, 3, 185, 12, 18, 27, 3, 199, 12, 18, 27, 3, 73, 12, 18, 27, 3, - 233, 244, 12, 18, 27, 3, 232, 139, 12, 18, 27, 3, 146, 12, 18, 27, 3, - 193, 12, 18, 27, 3, 227, 109, 12, 18, 27, 3, 66, 12, 18, 27, 3, 196, 12, - 18, 27, 3, 224, 174, 12, 18, 27, 3, 224, 73, 12, 18, 27, 3, 224, 25, 12, - 18, 27, 3, 223, 119, 12, 95, 6, 57, 12, 95, 6, 252, 44, 12, 95, 6, 222, - 222, 12, 95, 6, 214, 12, 95, 6, 239, 182, 12, 95, 6, 239, 76, 12, 95, 6, - 199, 12, 95, 6, 73, 12, 95, 6, 233, 244, 12, 95, 6, 232, 139, 12, 95, 6, - 193, 12, 95, 6, 227, 109, 12, 95, 6, 66, 12, 95, 6, 196, 12, 95, 6, 224, - 174, 12, 95, 6, 224, 73, 12, 95, 6, 224, 25, 12, 95, 6, 223, 119, 12, 95, - 3, 57, 12, 95, 3, 254, 27, 12, 95, 3, 252, 44, 12, 95, 3, 222, 222, 12, - 95, 3, 247, 130, 12, 95, 3, 212, 12, 95, 3, 74, 12, 95, 3, 239, 182, 12, - 95, 3, 239, 76, 12, 95, 3, 149, 12, 95, 3, 185, 12, 95, 3, 199, 12, 95, - 3, 233, 244, 12, 95, 3, 232, 139, 12, 95, 3, 146, 12, 95, 3, 193, 12, 95, - 3, 227, 109, 12, 95, 3, 66, 12, 95, 3, 196, 12, 95, 3, 224, 174, 12, 95, - 3, 224, 73, 12, 95, 3, 224, 25, 12, 95, 3, 223, 119, 12, 18, 95, 6, 57, - 12, 18, 95, 6, 254, 27, 12, 18, 95, 6, 252, 44, 12, 18, 95, 6, 222, 222, - 12, 18, 95, 6, 72, 12, 18, 95, 6, 247, 130, 12, 18, 95, 6, 214, 12, 18, - 95, 6, 212, 12, 18, 95, 6, 74, 12, 18, 95, 6, 239, 182, 12, 18, 95, 6, - 239, 76, 12, 18, 95, 6, 149, 12, 18, 95, 6, 185, 12, 18, 95, 6, 199, 12, - 18, 95, 6, 73, 12, 18, 95, 6, 233, 244, 12, 18, 95, 6, 232, 139, 12, 18, - 95, 6, 146, 12, 18, 95, 6, 193, 12, 18, 95, 6, 227, 109, 12, 18, 95, 6, - 66, 12, 18, 95, 6, 196, 12, 18, 95, 6, 224, 174, 12, 18, 95, 6, 224, 73, - 12, 18, 95, 6, 224, 25, 12, 18, 95, 6, 223, 119, 12, 18, 95, 3, 57, 12, - 18, 95, 3, 254, 27, 12, 18, 95, 3, 252, 44, 12, 18, 95, 3, 222, 222, 12, - 18, 95, 3, 72, 12, 18, 95, 3, 247, 130, 12, 18, 95, 3, 214, 12, 18, 95, - 3, 212, 12, 18, 95, 3, 74, 12, 18, 95, 3, 239, 182, 12, 18, 95, 3, 239, - 76, 12, 18, 95, 3, 149, 12, 18, 95, 3, 185, 12, 18, 95, 3, 199, 12, 18, - 95, 3, 73, 12, 18, 95, 3, 233, 244, 12, 18, 95, 3, 232, 139, 12, 18, 95, - 3, 146, 12, 18, 95, 3, 193, 12, 18, 95, 3, 227, 109, 12, 18, 95, 3, 66, - 12, 18, 95, 3, 196, 12, 18, 95, 3, 224, 174, 12, 18, 95, 3, 224, 73, 12, - 18, 95, 3, 224, 25, 12, 18, 95, 3, 223, 119, 12, 110, 6, 57, 12, 110, 6, - 254, 27, 12, 110, 6, 222, 222, 12, 110, 6, 72, 12, 110, 6, 247, 130, 12, - 110, 6, 214, 12, 110, 6, 239, 182, 12, 110, 6, 239, 76, 12, 110, 6, 149, - 12, 110, 6, 185, 12, 110, 6, 199, 12, 110, 6, 73, 12, 110, 6, 233, 244, - 12, 110, 6, 232, 139, 12, 110, 6, 193, 12, 110, 6, 227, 109, 12, 110, 6, - 66, 12, 110, 6, 196, 12, 110, 6, 224, 174, 12, 110, 6, 224, 73, 12, 110, - 6, 224, 25, 12, 110, 3, 57, 12, 110, 3, 254, 27, 12, 110, 3, 252, 44, 12, - 110, 3, 222, 222, 12, 110, 3, 72, 12, 110, 3, 247, 130, 12, 110, 3, 214, - 12, 110, 3, 212, 12, 110, 3, 74, 12, 110, 3, 239, 182, 12, 110, 3, 239, - 76, 12, 110, 3, 149, 12, 110, 3, 185, 12, 110, 3, 199, 12, 110, 3, 73, - 12, 110, 3, 233, 244, 12, 110, 3, 232, 139, 12, 110, 3, 146, 12, 110, 3, - 193, 12, 110, 3, 227, 109, 12, 110, 3, 66, 12, 110, 3, 196, 12, 110, 3, - 224, 174, 12, 110, 3, 224, 73, 12, 110, 3, 224, 25, 12, 110, 3, 223, 119, - 12, 159, 6, 57, 12, 159, 6, 254, 27, 12, 159, 6, 222, 222, 12, 159, 6, - 72, 12, 159, 6, 247, 130, 12, 159, 6, 214, 12, 159, 6, 74, 12, 159, 6, - 239, 182, 12, 159, 6, 239, 76, 12, 159, 6, 149, 12, 159, 6, 185, 12, 159, - 6, 73, 12, 159, 6, 193, 12, 159, 6, 227, 109, 12, 159, 6, 66, 12, 159, 6, - 196, 12, 159, 6, 224, 174, 12, 159, 6, 224, 73, 12, 159, 6, 224, 25, 12, - 159, 3, 57, 12, 159, 3, 254, 27, 12, 159, 3, 252, 44, 12, 159, 3, 222, - 222, 12, 159, 3, 72, 12, 159, 3, 247, 130, 12, 159, 3, 214, 12, 159, 3, - 212, 12, 159, 3, 74, 12, 159, 3, 239, 182, 12, 159, 3, 239, 76, 12, 159, - 3, 149, 12, 159, 3, 185, 12, 159, 3, 199, 12, 159, 3, 73, 12, 159, 3, - 233, 244, 12, 159, 3, 232, 139, 12, 159, 3, 146, 12, 159, 3, 193, 12, - 159, 3, 227, 109, 12, 159, 3, 66, 12, 159, 3, 196, 12, 159, 3, 224, 174, - 12, 159, 3, 224, 73, 12, 159, 3, 224, 25, 12, 159, 3, 223, 119, 12, 18, - 110, 6, 57, 12, 18, 110, 6, 254, 27, 12, 18, 110, 6, 252, 44, 12, 18, - 110, 6, 222, 222, 12, 18, 110, 6, 72, 12, 18, 110, 6, 247, 130, 12, 18, - 110, 6, 214, 12, 18, 110, 6, 212, 12, 18, 110, 6, 74, 12, 18, 110, 6, - 239, 182, 12, 18, 110, 6, 239, 76, 12, 18, 110, 6, 149, 12, 18, 110, 6, - 185, 12, 18, 110, 6, 199, 12, 18, 110, 6, 73, 12, 18, 110, 6, 233, 244, - 12, 18, 110, 6, 232, 139, 12, 18, 110, 6, 146, 12, 18, 110, 6, 193, 12, - 18, 110, 6, 227, 109, 12, 18, 110, 6, 66, 12, 18, 110, 6, 196, 12, 18, - 110, 6, 224, 174, 12, 18, 110, 6, 224, 73, 12, 18, 110, 6, 224, 25, 12, - 18, 110, 6, 223, 119, 12, 18, 110, 3, 57, 12, 18, 110, 3, 254, 27, 12, - 18, 110, 3, 252, 44, 12, 18, 110, 3, 222, 222, 12, 18, 110, 3, 72, 12, - 18, 110, 3, 247, 130, 12, 18, 110, 3, 214, 12, 18, 110, 3, 212, 12, 18, - 110, 3, 74, 12, 18, 110, 3, 239, 182, 12, 18, 110, 3, 239, 76, 12, 18, - 110, 3, 149, 12, 18, 110, 3, 185, 12, 18, 110, 3, 199, 12, 18, 110, 3, - 73, 12, 18, 110, 3, 233, 244, 12, 18, 110, 3, 232, 139, 12, 18, 110, 3, - 146, 12, 18, 110, 3, 193, 12, 18, 110, 3, 227, 109, 12, 18, 110, 3, 66, - 12, 18, 110, 3, 196, 12, 18, 110, 3, 224, 174, 12, 18, 110, 3, 224, 73, - 12, 18, 110, 3, 224, 25, 12, 18, 110, 3, 223, 119, 12, 30, 6, 57, 12, 30, - 6, 254, 27, 12, 30, 6, 252, 44, 12, 30, 6, 222, 222, 12, 30, 6, 72, 12, - 30, 6, 247, 130, 12, 30, 6, 214, 12, 30, 6, 212, 12, 30, 6, 74, 12, 30, - 6, 239, 182, 12, 30, 6, 239, 76, 12, 30, 6, 149, 12, 30, 6, 185, 12, 30, - 6, 199, 12, 30, 6, 73, 12, 30, 6, 233, 244, 12, 30, 6, 232, 139, 12, 30, - 6, 146, 12, 30, 6, 193, 12, 30, 6, 227, 109, 12, 30, 6, 66, 12, 30, 6, - 196, 12, 30, 6, 224, 174, 12, 30, 6, 224, 73, 12, 30, 6, 224, 25, 12, 30, - 6, 223, 119, 12, 30, 3, 57, 12, 30, 3, 254, 27, 12, 30, 3, 252, 44, 12, - 30, 3, 222, 222, 12, 30, 3, 72, 12, 30, 3, 247, 130, 12, 30, 3, 214, 12, - 30, 3, 212, 12, 30, 3, 74, 12, 30, 3, 239, 182, 12, 30, 3, 239, 76, 12, - 30, 3, 149, 12, 30, 3, 185, 12, 30, 3, 199, 12, 30, 3, 73, 12, 30, 3, - 233, 244, 12, 30, 3, 232, 139, 12, 30, 3, 146, 12, 30, 3, 193, 12, 30, 3, - 227, 109, 12, 30, 3, 66, 12, 30, 3, 196, 12, 30, 3, 224, 174, 12, 30, 3, - 224, 73, 12, 30, 3, 224, 25, 12, 30, 3, 223, 119, 12, 30, 18, 6, 57, 12, - 30, 18, 6, 254, 27, 12, 30, 18, 6, 252, 44, 12, 30, 18, 6, 222, 222, 12, - 30, 18, 6, 72, 12, 30, 18, 6, 247, 130, 12, 30, 18, 6, 214, 12, 30, 18, - 6, 212, 12, 30, 18, 6, 74, 12, 30, 18, 6, 239, 182, 12, 30, 18, 6, 239, - 76, 12, 30, 18, 6, 149, 12, 30, 18, 6, 185, 12, 30, 18, 6, 199, 12, 30, - 18, 6, 73, 12, 30, 18, 6, 233, 244, 12, 30, 18, 6, 232, 139, 12, 30, 18, - 6, 146, 12, 30, 18, 6, 193, 12, 30, 18, 6, 227, 109, 12, 30, 18, 6, 66, - 12, 30, 18, 6, 196, 12, 30, 18, 6, 224, 174, 12, 30, 18, 6, 224, 73, 12, - 30, 18, 6, 224, 25, 12, 30, 18, 6, 223, 119, 12, 30, 18, 3, 57, 12, 30, - 18, 3, 254, 27, 12, 30, 18, 3, 252, 44, 12, 30, 18, 3, 222, 222, 12, 30, - 18, 3, 72, 12, 30, 18, 3, 247, 130, 12, 30, 18, 3, 214, 12, 30, 18, 3, - 212, 12, 30, 18, 3, 74, 12, 30, 18, 3, 239, 182, 12, 30, 18, 3, 239, 76, - 12, 30, 18, 3, 149, 12, 30, 18, 3, 185, 12, 30, 18, 3, 199, 12, 30, 18, - 3, 73, 12, 30, 18, 3, 233, 244, 12, 30, 18, 3, 232, 139, 12, 30, 18, 3, - 146, 12, 30, 18, 3, 193, 12, 30, 18, 3, 227, 109, 12, 30, 18, 3, 66, 12, - 30, 18, 3, 196, 12, 30, 18, 3, 224, 174, 12, 30, 18, 3, 224, 73, 12, 30, - 18, 3, 224, 25, 12, 30, 18, 3, 223, 119, 12, 30, 27, 6, 57, 12, 30, 27, - 6, 254, 27, 12, 30, 27, 6, 252, 44, 12, 30, 27, 6, 222, 222, 12, 30, 27, - 6, 72, 12, 30, 27, 6, 247, 130, 12, 30, 27, 6, 214, 12, 30, 27, 6, 212, - 12, 30, 27, 6, 74, 12, 30, 27, 6, 239, 182, 12, 30, 27, 6, 239, 76, 12, - 30, 27, 6, 149, 12, 30, 27, 6, 185, 12, 30, 27, 6, 199, 12, 30, 27, 6, - 73, 12, 30, 27, 6, 233, 244, 12, 30, 27, 6, 232, 139, 12, 30, 27, 6, 146, - 12, 30, 27, 6, 193, 12, 30, 27, 6, 227, 109, 12, 30, 27, 6, 66, 12, 30, - 27, 6, 196, 12, 30, 27, 6, 224, 174, 12, 30, 27, 6, 224, 73, 12, 30, 27, - 6, 224, 25, 12, 30, 27, 6, 223, 119, 12, 30, 27, 3, 57, 12, 30, 27, 3, - 254, 27, 12, 30, 27, 3, 252, 44, 12, 30, 27, 3, 222, 222, 12, 30, 27, 3, - 72, 12, 30, 27, 3, 247, 130, 12, 30, 27, 3, 214, 12, 30, 27, 3, 212, 12, - 30, 27, 3, 74, 12, 30, 27, 3, 239, 182, 12, 30, 27, 3, 239, 76, 12, 30, - 27, 3, 149, 12, 30, 27, 3, 185, 12, 30, 27, 3, 199, 12, 30, 27, 3, 73, - 12, 30, 27, 3, 233, 244, 12, 30, 27, 3, 232, 139, 12, 30, 27, 3, 146, 12, - 30, 27, 3, 193, 12, 30, 27, 3, 227, 109, 12, 30, 27, 3, 66, 12, 30, 27, - 3, 196, 12, 30, 27, 3, 224, 174, 12, 30, 27, 3, 224, 73, 12, 30, 27, 3, - 224, 25, 12, 30, 27, 3, 223, 119, 12, 30, 18, 27, 6, 57, 12, 30, 18, 27, - 6, 254, 27, 12, 30, 18, 27, 6, 252, 44, 12, 30, 18, 27, 6, 222, 222, 12, - 30, 18, 27, 6, 72, 12, 30, 18, 27, 6, 247, 130, 12, 30, 18, 27, 6, 214, - 12, 30, 18, 27, 6, 212, 12, 30, 18, 27, 6, 74, 12, 30, 18, 27, 6, 239, - 182, 12, 30, 18, 27, 6, 239, 76, 12, 30, 18, 27, 6, 149, 12, 30, 18, 27, - 6, 185, 12, 30, 18, 27, 6, 199, 12, 30, 18, 27, 6, 73, 12, 30, 18, 27, 6, - 233, 244, 12, 30, 18, 27, 6, 232, 139, 12, 30, 18, 27, 6, 146, 12, 30, - 18, 27, 6, 193, 12, 30, 18, 27, 6, 227, 109, 12, 30, 18, 27, 6, 66, 12, - 30, 18, 27, 6, 196, 12, 30, 18, 27, 6, 224, 174, 12, 30, 18, 27, 6, 224, - 73, 12, 30, 18, 27, 6, 224, 25, 12, 30, 18, 27, 6, 223, 119, 12, 30, 18, - 27, 3, 57, 12, 30, 18, 27, 3, 254, 27, 12, 30, 18, 27, 3, 252, 44, 12, - 30, 18, 27, 3, 222, 222, 12, 30, 18, 27, 3, 72, 12, 30, 18, 27, 3, 247, - 130, 12, 30, 18, 27, 3, 214, 12, 30, 18, 27, 3, 212, 12, 30, 18, 27, 3, - 74, 12, 30, 18, 27, 3, 239, 182, 12, 30, 18, 27, 3, 239, 76, 12, 30, 18, - 27, 3, 149, 12, 30, 18, 27, 3, 185, 12, 30, 18, 27, 3, 199, 12, 30, 18, - 27, 3, 73, 12, 30, 18, 27, 3, 233, 244, 12, 30, 18, 27, 3, 232, 139, 12, - 30, 18, 27, 3, 146, 12, 30, 18, 27, 3, 193, 12, 30, 18, 27, 3, 227, 109, - 12, 30, 18, 27, 3, 66, 12, 30, 18, 27, 3, 196, 12, 30, 18, 27, 3, 224, - 174, 12, 30, 18, 27, 3, 224, 73, 12, 30, 18, 27, 3, 224, 25, 12, 30, 18, - 27, 3, 223, 119, 12, 189, 6, 57, 12, 189, 6, 254, 27, 12, 189, 6, 252, - 44, 12, 189, 6, 222, 222, 12, 189, 6, 72, 12, 189, 6, 247, 130, 12, 189, - 6, 214, 12, 189, 6, 212, 12, 189, 6, 74, 12, 189, 6, 239, 182, 12, 189, - 6, 239, 76, 12, 189, 6, 149, 12, 189, 6, 185, 12, 189, 6, 199, 12, 189, - 6, 73, 12, 189, 6, 233, 244, 12, 189, 6, 232, 139, 12, 189, 6, 146, 12, - 189, 6, 193, 12, 189, 6, 227, 109, 12, 189, 6, 66, 12, 189, 6, 196, 12, - 189, 6, 224, 174, 12, 189, 6, 224, 73, 12, 189, 6, 224, 25, 12, 189, 6, - 223, 119, 12, 189, 3, 57, 12, 189, 3, 254, 27, 12, 189, 3, 252, 44, 12, - 189, 3, 222, 222, 12, 189, 3, 72, 12, 189, 3, 247, 130, 12, 189, 3, 214, - 12, 189, 3, 212, 12, 189, 3, 74, 12, 189, 3, 239, 182, 12, 189, 3, 239, - 76, 12, 189, 3, 149, 12, 189, 3, 185, 12, 189, 3, 199, 12, 189, 3, 73, - 12, 189, 3, 233, 244, 12, 189, 3, 232, 139, 12, 189, 3, 146, 12, 189, 3, - 193, 12, 189, 3, 227, 109, 12, 189, 3, 66, 12, 189, 3, 196, 12, 189, 3, - 224, 174, 12, 189, 3, 224, 73, 12, 189, 3, 224, 25, 12, 189, 3, 223, 119, - 12, 27, 3, 249, 139, 74, 12, 27, 3, 249, 139, 239, 182, 12, 18, 6, 254, - 205, 12, 18, 6, 252, 198, 12, 18, 6, 246, 169, 12, 18, 6, 250, 47, 12, - 18, 6, 247, 206, 12, 18, 6, 223, 88, 12, 18, 6, 247, 171, 12, 18, 6, 226, - 223, 12, 18, 6, 239, 215, 12, 18, 6, 239, 35, 12, 18, 6, 238, 16, 12, 18, - 6, 236, 66, 12, 18, 6, 234, 206, 12, 18, 6, 224, 64, 12, 18, 6, 234, 64, - 12, 18, 6, 233, 69, 12, 18, 6, 231, 182, 12, 18, 6, 226, 224, 98, 12, 18, - 6, 229, 2, 12, 18, 6, 227, 61, 12, 18, 6, 225, 110, 12, 18, 6, 233, 87, - 12, 18, 6, 251, 169, 12, 18, 6, 232, 183, 12, 18, 6, 234, 66, 12, 18, - 235, 250, 12, 18, 3, 254, 205, 12, 18, 3, 252, 198, 12, 18, 3, 246, 169, - 12, 18, 3, 250, 47, 12, 18, 3, 247, 206, 12, 18, 3, 223, 88, 12, 18, 3, - 247, 171, 12, 18, 3, 226, 223, 12, 18, 3, 239, 215, 12, 18, 3, 239, 35, - 12, 18, 3, 238, 16, 12, 18, 3, 236, 66, 12, 18, 3, 234, 206, 12, 18, 3, - 224, 64, 12, 18, 3, 234, 64, 12, 18, 3, 233, 69, 12, 18, 3, 231, 182, 12, - 18, 3, 35, 229, 2, 12, 18, 3, 229, 2, 12, 18, 3, 227, 61, 12, 18, 3, 225, - 110, 12, 18, 3, 233, 87, 12, 18, 3, 251, 169, 12, 18, 3, 232, 183, 12, - 18, 3, 234, 66, 12, 18, 233, 175, 249, 236, 12, 18, 247, 207, 98, 12, 18, - 226, 224, 98, 12, 18, 239, 36, 98, 12, 18, 233, 88, 98, 12, 18, 231, 183, - 98, 12, 18, 233, 70, 98, 12, 27, 6, 254, 205, 12, 27, 6, 252, 198, 12, - 27, 6, 246, 169, 12, 27, 6, 250, 47, 12, 27, 6, 247, 206, 12, 27, 6, 223, - 88, 12, 27, 6, 247, 171, 12, 27, 6, 226, 223, 12, 27, 6, 239, 215, 12, - 27, 6, 239, 35, 12, 27, 6, 238, 16, 12, 27, 6, 236, 66, 12, 27, 6, 234, - 206, 12, 27, 6, 224, 64, 12, 27, 6, 234, 64, 12, 27, 6, 233, 69, 12, 27, - 6, 231, 182, 12, 27, 6, 226, 224, 98, 12, 27, 6, 229, 2, 12, 27, 6, 227, - 61, 12, 27, 6, 225, 110, 12, 27, 6, 233, 87, 12, 27, 6, 251, 169, 12, 27, - 6, 232, 183, 12, 27, 6, 234, 66, 12, 27, 235, 250, 12, 27, 3, 254, 205, - 12, 27, 3, 252, 198, 12, 27, 3, 246, 169, 12, 27, 3, 250, 47, 12, 27, 3, - 247, 206, 12, 27, 3, 223, 88, 12, 27, 3, 247, 171, 12, 27, 3, 226, 223, - 12, 27, 3, 239, 215, 12, 27, 3, 239, 35, 12, 27, 3, 238, 16, 12, 27, 3, - 236, 66, 12, 27, 3, 234, 206, 12, 27, 3, 224, 64, 12, 27, 3, 234, 64, 12, - 27, 3, 233, 69, 12, 27, 3, 231, 182, 12, 27, 3, 35, 229, 2, 12, 27, 3, - 229, 2, 12, 27, 3, 227, 61, 12, 27, 3, 225, 110, 12, 27, 3, 233, 87, 12, - 27, 3, 251, 169, 12, 27, 3, 232, 183, 12, 27, 3, 234, 66, 12, 27, 233, - 175, 249, 236, 12, 27, 247, 207, 98, 12, 27, 226, 224, 98, 12, 27, 239, - 36, 98, 12, 27, 233, 88, 98, 12, 27, 231, 183, 98, 12, 27, 233, 70, 98, - 12, 18, 27, 6, 254, 205, 12, 18, 27, 6, 252, 198, 12, 18, 27, 6, 246, - 169, 12, 18, 27, 6, 250, 47, 12, 18, 27, 6, 247, 206, 12, 18, 27, 6, 223, - 88, 12, 18, 27, 6, 247, 171, 12, 18, 27, 6, 226, 223, 12, 18, 27, 6, 239, - 215, 12, 18, 27, 6, 239, 35, 12, 18, 27, 6, 238, 16, 12, 18, 27, 6, 236, - 66, 12, 18, 27, 6, 234, 206, 12, 18, 27, 6, 224, 64, 12, 18, 27, 6, 234, - 64, 12, 18, 27, 6, 233, 69, 12, 18, 27, 6, 231, 182, 12, 18, 27, 6, 226, - 224, 98, 12, 18, 27, 6, 229, 2, 12, 18, 27, 6, 227, 61, 12, 18, 27, 6, - 225, 110, 12, 18, 27, 6, 233, 87, 12, 18, 27, 6, 251, 169, 12, 18, 27, 6, - 232, 183, 12, 18, 27, 6, 234, 66, 12, 18, 27, 235, 250, 12, 18, 27, 3, - 254, 205, 12, 18, 27, 3, 252, 198, 12, 18, 27, 3, 246, 169, 12, 18, 27, - 3, 250, 47, 12, 18, 27, 3, 247, 206, 12, 18, 27, 3, 223, 88, 12, 18, 27, - 3, 247, 171, 12, 18, 27, 3, 226, 223, 12, 18, 27, 3, 239, 215, 12, 18, - 27, 3, 239, 35, 12, 18, 27, 3, 238, 16, 12, 18, 27, 3, 236, 66, 12, 18, - 27, 3, 234, 206, 12, 18, 27, 3, 224, 64, 12, 18, 27, 3, 234, 64, 12, 18, - 27, 3, 233, 69, 12, 18, 27, 3, 231, 182, 12, 18, 27, 3, 35, 229, 2, 12, - 18, 27, 3, 229, 2, 12, 18, 27, 3, 227, 61, 12, 18, 27, 3, 225, 110, 12, - 18, 27, 3, 233, 87, 12, 18, 27, 3, 251, 169, 12, 18, 27, 3, 232, 183, 12, - 18, 27, 3, 234, 66, 12, 18, 27, 233, 175, 249, 236, 12, 18, 27, 247, 207, - 98, 12, 18, 27, 226, 224, 98, 12, 18, 27, 239, 36, 98, 12, 18, 27, 233, - 88, 98, 12, 18, 27, 231, 183, 98, 12, 18, 27, 233, 70, 98, 12, 30, 18, 6, - 254, 205, 12, 30, 18, 6, 252, 198, 12, 30, 18, 6, 246, 169, 12, 30, 18, - 6, 250, 47, 12, 30, 18, 6, 247, 206, 12, 30, 18, 6, 223, 88, 12, 30, 18, - 6, 247, 171, 12, 30, 18, 6, 226, 223, 12, 30, 18, 6, 239, 215, 12, 30, - 18, 6, 239, 35, 12, 30, 18, 6, 238, 16, 12, 30, 18, 6, 236, 66, 12, 30, - 18, 6, 234, 206, 12, 30, 18, 6, 224, 64, 12, 30, 18, 6, 234, 64, 12, 30, - 18, 6, 233, 69, 12, 30, 18, 6, 231, 182, 12, 30, 18, 6, 226, 224, 98, 12, - 30, 18, 6, 229, 2, 12, 30, 18, 6, 227, 61, 12, 30, 18, 6, 225, 110, 12, - 30, 18, 6, 233, 87, 12, 30, 18, 6, 251, 169, 12, 30, 18, 6, 232, 183, 12, - 30, 18, 6, 234, 66, 12, 30, 18, 235, 250, 12, 30, 18, 3, 254, 205, 12, - 30, 18, 3, 252, 198, 12, 30, 18, 3, 246, 169, 12, 30, 18, 3, 250, 47, 12, - 30, 18, 3, 247, 206, 12, 30, 18, 3, 223, 88, 12, 30, 18, 3, 247, 171, 12, - 30, 18, 3, 226, 223, 12, 30, 18, 3, 239, 215, 12, 30, 18, 3, 239, 35, 12, - 30, 18, 3, 238, 16, 12, 30, 18, 3, 236, 66, 12, 30, 18, 3, 234, 206, 12, - 30, 18, 3, 224, 64, 12, 30, 18, 3, 234, 64, 12, 30, 18, 3, 233, 69, 12, - 30, 18, 3, 231, 182, 12, 30, 18, 3, 35, 229, 2, 12, 30, 18, 3, 229, 2, - 12, 30, 18, 3, 227, 61, 12, 30, 18, 3, 225, 110, 12, 30, 18, 3, 233, 87, - 12, 30, 18, 3, 251, 169, 12, 30, 18, 3, 232, 183, 12, 30, 18, 3, 234, 66, - 12, 30, 18, 233, 175, 249, 236, 12, 30, 18, 247, 207, 98, 12, 30, 18, - 226, 224, 98, 12, 30, 18, 239, 36, 98, 12, 30, 18, 233, 88, 98, 12, 30, - 18, 231, 183, 98, 12, 30, 18, 233, 70, 98, 12, 30, 18, 27, 6, 254, 205, - 12, 30, 18, 27, 6, 252, 198, 12, 30, 18, 27, 6, 246, 169, 12, 30, 18, 27, - 6, 250, 47, 12, 30, 18, 27, 6, 247, 206, 12, 30, 18, 27, 6, 223, 88, 12, - 30, 18, 27, 6, 247, 171, 12, 30, 18, 27, 6, 226, 223, 12, 30, 18, 27, 6, - 239, 215, 12, 30, 18, 27, 6, 239, 35, 12, 30, 18, 27, 6, 238, 16, 12, 30, - 18, 27, 6, 236, 66, 12, 30, 18, 27, 6, 234, 206, 12, 30, 18, 27, 6, 224, - 64, 12, 30, 18, 27, 6, 234, 64, 12, 30, 18, 27, 6, 233, 69, 12, 30, 18, - 27, 6, 231, 182, 12, 30, 18, 27, 6, 226, 224, 98, 12, 30, 18, 27, 6, 229, - 2, 12, 30, 18, 27, 6, 227, 61, 12, 30, 18, 27, 6, 225, 110, 12, 30, 18, - 27, 6, 233, 87, 12, 30, 18, 27, 6, 251, 169, 12, 30, 18, 27, 6, 232, 183, - 12, 30, 18, 27, 6, 234, 66, 12, 30, 18, 27, 235, 250, 12, 30, 18, 27, 3, - 254, 205, 12, 30, 18, 27, 3, 252, 198, 12, 30, 18, 27, 3, 246, 169, 12, - 30, 18, 27, 3, 250, 47, 12, 30, 18, 27, 3, 247, 206, 12, 30, 18, 27, 3, - 223, 88, 12, 30, 18, 27, 3, 247, 171, 12, 30, 18, 27, 3, 226, 223, 12, - 30, 18, 27, 3, 239, 215, 12, 30, 18, 27, 3, 239, 35, 12, 30, 18, 27, 3, - 238, 16, 12, 30, 18, 27, 3, 236, 66, 12, 30, 18, 27, 3, 234, 206, 12, 30, - 18, 27, 3, 224, 64, 12, 30, 18, 27, 3, 234, 64, 12, 30, 18, 27, 3, 233, - 69, 12, 30, 18, 27, 3, 231, 182, 12, 30, 18, 27, 3, 35, 229, 2, 12, 30, - 18, 27, 3, 229, 2, 12, 30, 18, 27, 3, 227, 61, 12, 30, 18, 27, 3, 225, - 110, 12, 30, 18, 27, 3, 233, 87, 12, 30, 18, 27, 3, 251, 169, 12, 30, 18, - 27, 3, 232, 183, 12, 30, 18, 27, 3, 234, 66, 12, 30, 18, 27, 233, 175, - 249, 236, 12, 30, 18, 27, 247, 207, 98, 12, 30, 18, 27, 226, 224, 98, 12, - 30, 18, 27, 239, 36, 98, 12, 30, 18, 27, 233, 88, 98, 12, 30, 18, 27, - 231, 183, 98, 12, 30, 18, 27, 233, 70, 98, 12, 18, 6, 249, 230, 12, 18, - 3, 249, 230, 12, 18, 21, 223, 89, 12, 18, 21, 118, 12, 18, 21, 113, 12, - 18, 21, 166, 12, 18, 21, 158, 12, 18, 21, 173, 12, 18, 21, 183, 12, 18, - 21, 194, 12, 18, 21, 187, 12, 18, 21, 192, 12, 159, 21, 223, 89, 12, 159, - 21, 118, 12, 159, 21, 113, 12, 159, 21, 166, 12, 159, 21, 158, 12, 159, - 21, 173, 12, 159, 21, 183, 12, 159, 21, 194, 12, 159, 21, 187, 12, 159, - 21, 192, 12, 30, 21, 223, 89, 12, 30, 21, 118, 12, 30, 21, 113, 12, 30, - 21, 166, 12, 30, 21, 158, 12, 30, 21, 173, 12, 30, 21, 183, 12, 30, 21, - 194, 12, 30, 21, 187, 12, 30, 21, 192, 12, 30, 18, 21, 223, 89, 12, 30, - 18, 21, 118, 12, 30, 18, 21, 113, 12, 30, 18, 21, 166, 12, 30, 18, 21, - 158, 12, 30, 18, 21, 173, 12, 30, 18, 21, 183, 12, 30, 18, 21, 194, 12, - 30, 18, 21, 187, 12, 30, 18, 21, 192, 12, 189, 21, 223, 89, 12, 189, 21, - 118, 12, 189, 21, 113, 12, 189, 21, 166, 12, 189, 21, 158, 12, 189, 21, - 173, 12, 189, 21, 183, 12, 189, 21, 194, 12, 189, 21, 187, 12, 189, 21, - 192, 237, 50, 75, 248, 45, 224, 111, 237, 50, 75, 228, 152, 224, 111, - 237, 50, 75, 224, 131, 224, 111, 237, 50, 75, 234, 245, 224, 111, 237, - 50, 75, 231, 231, 248, 118, 237, 50, 75, 245, 228, 248, 118, 237, 50, 75, - 63, 248, 118, 237, 50, 75, 168, 106, 251, 190, 237, 50, 75, 135, 106, - 251, 190, 237, 50, 75, 152, 106, 251, 190, 237, 50, 75, 246, 243, 106, - 251, 190, 237, 50, 75, 247, 37, 106, 251, 190, 237, 50, 75, 228, 217, - 106, 251, 190, 237, 50, 75, 229, 163, 106, 251, 190, 237, 50, 75, 248, - 20, 106, 251, 190, 237, 50, 75, 235, 61, 106, 251, 190, 237, 50, 75, 168, - 106, 253, 45, 237, 50, 75, 135, 106, 253, 45, 237, 50, 75, 152, 106, 253, - 45, 237, 50, 75, 246, 243, 106, 253, 45, 237, 50, 75, 247, 37, 106, 253, - 45, 237, 50, 75, 228, 217, 106, 253, 45, 237, 50, 75, 229, 163, 106, 253, - 45, 237, 50, 75, 248, 20, 106, 253, 45, 237, 50, 75, 235, 61, 106, 253, - 45, 237, 50, 75, 168, 106, 251, 105, 237, 50, 75, 135, 106, 251, 105, - 237, 50, 75, 152, 106, 251, 105, 237, 50, 75, 246, 243, 106, 251, 105, - 237, 50, 75, 247, 37, 106, 251, 105, 237, 50, 75, 228, 217, 106, 251, - 105, 237, 50, 75, 229, 163, 106, 251, 105, 237, 50, 75, 248, 20, 106, - 251, 105, 237, 50, 75, 235, 61, 106, 251, 105, 237, 50, 75, 233, 12, 237, - 50, 75, 234, 30, 237, 50, 75, 253, 46, 237, 50, 75, 251, 137, 237, 50, - 75, 228, 125, 237, 50, 75, 227, 229, 237, 50, 75, 254, 44, 237, 50, 75, - 224, 107, 237, 50, 75, 239, 111, 237, 50, 75, 253, 66, 109, 75, 169, 253, - 66, 109, 75, 244, 211, 109, 75, 244, 210, 109, 75, 244, 209, 109, 75, - 244, 208, 109, 75, 244, 207, 109, 75, 244, 206, 109, 75, 244, 205, 109, - 75, 244, 204, 109, 75, 244, 203, 109, 75, 244, 202, 109, 75, 244, 201, - 109, 75, 244, 200, 109, 75, 244, 199, 109, 75, 244, 198, 109, 75, 244, - 197, 109, 75, 244, 196, 109, 75, 244, 195, 109, 75, 244, 194, 109, 75, - 244, 193, 109, 75, 244, 192, 109, 75, 244, 191, 109, 75, 244, 190, 109, - 75, 244, 189, 109, 75, 244, 188, 109, 75, 244, 187, 109, 75, 244, 186, - 109, 75, 244, 185, 109, 75, 244, 184, 109, 75, 244, 183, 109, 75, 244, - 182, 109, 75, 244, 181, 109, 75, 244, 180, 109, 75, 244, 179, 109, 75, - 244, 178, 109, 75, 244, 177, 109, 75, 244, 176, 109, 75, 244, 175, 109, - 75, 244, 174, 109, 75, 244, 173, 109, 75, 244, 172, 109, 75, 244, 171, - 109, 75, 244, 170, 109, 75, 244, 169, 109, 75, 244, 168, 109, 75, 244, - 167, 109, 75, 244, 166, 109, 75, 244, 165, 109, 75, 244, 164, 109, 75, - 244, 163, 109, 75, 61, 253, 66, 109, 75, 225, 29, 109, 75, 225, 28, 109, - 75, 225, 27, 109, 75, 225, 26, 109, 75, 225, 25, 109, 75, 225, 24, 109, - 75, 225, 23, 109, 75, 225, 22, 109, 75, 225, 21, 109, 75, 225, 20, 109, - 75, 225, 19, 109, 75, 225, 18, 109, 75, 225, 17, 109, 75, 225, 16, 109, - 75, 225, 15, 109, 75, 225, 14, 109, 75, 225, 13, 109, 75, 225, 12, 109, - 75, 225, 11, 109, 75, 225, 10, 109, 75, 225, 9, 109, 75, 225, 8, 109, 75, - 225, 7, 109, 75, 225, 6, 109, 75, 225, 5, 109, 75, 225, 4, 109, 75, 225, - 3, 109, 75, 225, 2, 109, 75, 225, 1, 109, 75, 225, 0, 109, 75, 224, 255, - 109, 75, 224, 254, 109, 75, 224, 253, 109, 75, 224, 252, 109, 75, 224, - 251, 109, 75, 224, 250, 109, 75, 224, 249, 109, 75, 224, 248, 109, 75, - 224, 247, 109, 75, 224, 246, 109, 75, 224, 245, 109, 75, 224, 244, 109, - 75, 224, 243, 109, 75, 224, 242, 109, 75, 224, 241, 109, 75, 224, 240, - 109, 75, 224, 239, 109, 75, 224, 238, 109, 75, 224, 237, 9, 11, 244, 61, - 9, 11, 244, 60, 9, 11, 244, 59, 9, 11, 244, 58, 9, 11, 244, 57, 9, 11, - 244, 56, 9, 11, 244, 55, 9, 11, 244, 54, 9, 11, 244, 53, 9, 11, 244, 52, - 9, 11, 244, 51, 9, 11, 244, 50, 9, 11, 244, 49, 9, 11, 244, 48, 9, 11, - 244, 47, 9, 11, 244, 46, 9, 11, 244, 45, 9, 11, 244, 44, 9, 11, 244, 43, - 9, 11, 244, 42, 9, 11, 244, 41, 9, 11, 244, 40, 9, 11, 244, 39, 9, 11, - 244, 38, 9, 11, 244, 37, 9, 11, 244, 36, 9, 11, 244, 35, 9, 11, 244, 34, - 9, 11, 244, 33, 9, 11, 244, 32, 9, 11, 244, 31, 9, 11, 244, 30, 9, 11, - 244, 29, 9, 11, 244, 28, 9, 11, 244, 27, 9, 11, 244, 26, 9, 11, 244, 25, - 9, 11, 244, 24, 9, 11, 244, 23, 9, 11, 244, 22, 9, 11, 244, 21, 9, 11, - 244, 20, 9, 11, 244, 19, 9, 11, 244, 18, 9, 11, 244, 17, 9, 11, 244, 16, - 9, 11, 244, 15, 9, 11, 244, 14, 9, 11, 244, 13, 9, 11, 244, 12, 9, 11, - 244, 11, 9, 11, 244, 10, 9, 11, 244, 9, 9, 11, 244, 8, 9, 11, 244, 7, 9, - 11, 244, 6, 9, 11, 244, 5, 9, 11, 244, 4, 9, 11, 244, 3, 9, 11, 244, 2, - 9, 11, 244, 1, 9, 11, 244, 0, 9, 11, 243, 255, 9, 11, 243, 254, 9, 11, - 243, 253, 9, 11, 243, 252, 9, 11, 243, 251, 9, 11, 243, 250, 9, 11, 243, - 249, 9, 11, 243, 248, 9, 11, 243, 247, 9, 11, 243, 246, 9, 11, 243, 245, - 9, 11, 243, 244, 9, 11, 243, 243, 9, 11, 243, 242, 9, 11, 243, 241, 9, - 11, 243, 240, 9, 11, 243, 239, 9, 11, 243, 238, 9, 11, 243, 237, 9, 11, - 243, 236, 9, 11, 243, 235, 9, 11, 243, 234, 9, 11, 243, 233, 9, 11, 243, - 232, 9, 11, 243, 231, 9, 11, 243, 230, 9, 11, 243, 229, 9, 11, 243, 228, - 9, 11, 243, 227, 9, 11, 243, 226, 9, 11, 243, 225, 9, 11, 243, 224, 9, - 11, 243, 223, 9, 11, 243, 222, 9, 11, 243, 221, 9, 11, 243, 220, 9, 11, - 243, 219, 9, 11, 243, 218, 9, 11, 243, 217, 9, 11, 243, 216, 9, 11, 243, - 215, 9, 11, 243, 214, 9, 11, 243, 213, 9, 11, 243, 212, 9, 11, 243, 211, - 9, 11, 243, 210, 9, 11, 243, 209, 9, 11, 243, 208, 9, 11, 243, 207, 9, - 11, 243, 206, 9, 11, 243, 205, 9, 11, 243, 204, 9, 11, 243, 203, 9, 11, - 243, 202, 9, 11, 243, 201, 9, 11, 243, 200, 9, 11, 243, 199, 9, 11, 243, - 198, 9, 11, 243, 197, 9, 11, 243, 196, 9, 11, 243, 195, 9, 11, 243, 194, - 9, 11, 243, 193, 9, 11, 243, 192, 9, 11, 243, 191, 9, 11, 243, 190, 9, - 11, 243, 189, 9, 11, 243, 188, 9, 11, 243, 187, 9, 11, 243, 186, 9, 11, - 243, 185, 9, 11, 243, 184, 9, 11, 243, 183, 9, 11, 243, 182, 9, 11, 243, - 181, 9, 11, 243, 180, 9, 11, 243, 179, 9, 11, 243, 178, 9, 11, 243, 177, - 9, 11, 243, 176, 9, 11, 243, 175, 9, 11, 243, 174, 9, 11, 243, 173, 9, - 11, 243, 172, 9, 11, 243, 171, 9, 11, 243, 170, 9, 11, 243, 169, 9, 11, - 243, 168, 9, 11, 243, 167, 9, 11, 243, 166, 9, 11, 243, 165, 9, 11, 243, - 164, 9, 11, 243, 163, 9, 11, 243, 162, 9, 11, 243, 161, 9, 11, 243, 160, - 9, 11, 243, 159, 9, 11, 243, 158, 9, 11, 243, 157, 9, 11, 243, 156, 9, - 11, 243, 155, 9, 11, 243, 154, 9, 11, 243, 153, 9, 11, 243, 152, 9, 11, - 243, 151, 9, 11, 243, 150, 9, 11, 243, 149, 9, 11, 243, 148, 9, 11, 243, - 147, 9, 11, 243, 146, 9, 11, 243, 145, 9, 11, 243, 144, 9, 11, 243, 143, - 9, 11, 243, 142, 9, 11, 243, 141, 9, 11, 243, 140, 9, 11, 243, 139, 9, - 11, 243, 138, 9, 11, 243, 137, 9, 11, 243, 136, 9, 11, 243, 135, 9, 11, - 243, 134, 9, 11, 243, 133, 9, 11, 243, 132, 9, 11, 243, 131, 9, 11, 243, - 130, 9, 11, 243, 129, 9, 11, 243, 128, 9, 11, 243, 127, 9, 11, 243, 126, - 9, 11, 243, 125, 9, 11, 243, 124, 9, 11, 243, 123, 9, 11, 243, 122, 9, - 11, 243, 121, 9, 11, 243, 120, 9, 11, 243, 119, 9, 11, 243, 118, 9, 11, - 243, 117, 9, 11, 243, 116, 9, 11, 243, 115, 9, 11, 243, 114, 9, 11, 243, - 113, 9, 11, 243, 112, 9, 11, 243, 111, 9, 11, 243, 110, 9, 11, 243, 109, - 9, 11, 243, 108, 9, 11, 243, 107, 9, 11, 243, 106, 9, 11, 243, 105, 9, - 11, 243, 104, 9, 11, 243, 103, 9, 11, 243, 102, 9, 11, 243, 101, 9, 11, - 243, 100, 9, 11, 243, 99, 9, 11, 243, 98, 9, 11, 243, 97, 9, 11, 243, 96, - 9, 11, 243, 95, 9, 11, 243, 94, 9, 11, 243, 93, 9, 11, 243, 92, 9, 11, - 243, 91, 9, 11, 243, 90, 9, 11, 243, 89, 9, 11, 243, 88, 9, 11, 243, 87, - 9, 11, 243, 86, 9, 11, 243, 85, 9, 11, 243, 84, 9, 11, 243, 83, 9, 11, - 243, 82, 9, 11, 243, 81, 9, 11, 243, 80, 9, 11, 243, 79, 9, 11, 243, 78, - 9, 11, 243, 77, 9, 11, 243, 76, 9, 11, 243, 75, 9, 11, 243, 74, 9, 11, - 243, 73, 9, 11, 243, 72, 9, 11, 243, 71, 9, 11, 243, 70, 9, 11, 243, 69, - 9, 11, 243, 68, 9, 11, 243, 67, 9, 11, 243, 66, 9, 11, 243, 65, 9, 11, - 243, 64, 9, 11, 243, 63, 9, 11, 243, 62, 9, 11, 243, 61, 9, 11, 243, 60, - 9, 11, 243, 59, 9, 11, 243, 58, 9, 11, 243, 57, 9, 11, 243, 56, 9, 11, - 243, 55, 9, 11, 243, 54, 9, 11, 243, 53, 9, 11, 243, 52, 9, 11, 243, 51, - 9, 11, 243, 50, 9, 11, 243, 49, 9, 11, 243, 48, 9, 11, 243, 47, 9, 11, - 243, 46, 9, 11, 243, 45, 9, 11, 243, 44, 9, 11, 243, 43, 9, 11, 243, 42, - 9, 11, 243, 41, 9, 11, 243, 40, 9, 11, 243, 39, 9, 11, 243, 38, 9, 11, - 243, 37, 9, 11, 243, 36, 9, 11, 243, 35, 9, 11, 243, 34, 9, 11, 243, 33, - 9, 11, 243, 32, 9, 11, 243, 31, 9, 11, 243, 30, 9, 11, 243, 29, 9, 11, - 243, 28, 9, 11, 243, 27, 9, 11, 243, 26, 9, 11, 243, 25, 9, 11, 243, 24, - 9, 11, 243, 23, 9, 11, 243, 22, 9, 11, 243, 21, 9, 11, 243, 20, 9, 11, - 243, 19, 9, 11, 243, 18, 9, 11, 243, 17, 9, 11, 243, 16, 9, 11, 243, 15, - 9, 11, 243, 14, 9, 11, 243, 13, 9, 11, 243, 12, 9, 11, 243, 11, 9, 11, - 243, 10, 9, 11, 243, 9, 9, 11, 243, 8, 9, 11, 243, 7, 9, 11, 243, 6, 9, - 11, 243, 5, 9, 11, 243, 4, 9, 11, 243, 3, 9, 11, 243, 2, 9, 11, 243, 1, - 9, 11, 243, 0, 9, 11, 242, 255, 9, 11, 242, 254, 9, 11, 242, 253, 9, 11, - 242, 252, 9, 11, 242, 251, 9, 11, 242, 250, 9, 11, 242, 249, 9, 11, 242, - 248, 9, 11, 242, 247, 9, 11, 242, 246, 9, 11, 242, 245, 9, 11, 242, 244, - 9, 11, 242, 243, 9, 11, 242, 242, 9, 11, 242, 241, 9, 11, 242, 240, 9, - 11, 242, 239, 9, 11, 242, 238, 9, 11, 242, 237, 9, 11, 242, 236, 9, 11, - 242, 235, 9, 11, 242, 234, 9, 11, 242, 233, 9, 11, 242, 232, 9, 11, 242, - 231, 9, 11, 242, 230, 9, 11, 242, 229, 9, 11, 242, 228, 9, 11, 242, 227, - 9, 11, 242, 226, 9, 11, 242, 225, 9, 11, 242, 224, 9, 11, 242, 223, 9, - 11, 242, 222, 9, 11, 242, 221, 9, 11, 242, 220, 9, 11, 242, 219, 9, 11, - 242, 218, 9, 11, 242, 217, 9, 11, 242, 216, 9, 11, 242, 215, 9, 11, 242, - 214, 9, 11, 242, 213, 9, 11, 242, 212, 9, 11, 242, 211, 9, 11, 242, 210, - 9, 11, 242, 209, 9, 11, 242, 208, 9, 11, 242, 207, 9, 11, 242, 206, 9, - 11, 242, 205, 9, 11, 242, 204, 9, 11, 242, 203, 9, 11, 242, 202, 9, 11, - 242, 201, 9, 11, 242, 200, 9, 11, 242, 199, 9, 11, 242, 198, 9, 11, 242, - 197, 9, 11, 242, 196, 9, 11, 242, 195, 9, 11, 242, 194, 9, 11, 242, 193, - 9, 11, 242, 192, 9, 11, 242, 191, 9, 11, 242, 190, 9, 11, 242, 189, 9, - 11, 242, 188, 9, 11, 242, 187, 9, 11, 242, 186, 9, 11, 242, 185, 9, 11, - 242, 184, 9, 11, 242, 183, 9, 11, 242, 182, 9, 11, 242, 181, 9, 11, 242, - 180, 9, 11, 242, 179, 9, 11, 242, 178, 9, 11, 242, 177, 9, 11, 242, 176, - 9, 11, 242, 175, 9, 11, 242, 174, 9, 11, 242, 173, 9, 11, 242, 172, 9, - 11, 242, 171, 9, 11, 242, 170, 9, 11, 242, 169, 9, 11, 242, 168, 9, 11, - 242, 167, 9, 11, 242, 166, 9, 11, 242, 165, 9, 11, 242, 164, 9, 11, 242, - 163, 9, 11, 242, 162, 9, 11, 242, 161, 9, 11, 242, 160, 9, 11, 242, 159, - 9, 11, 242, 158, 9, 11, 242, 157, 9, 11, 242, 156, 9, 11, 242, 155, 9, - 11, 242, 154, 9, 11, 242, 153, 9, 11, 242, 152, 9, 11, 242, 151, 9, 11, - 242, 150, 9, 11, 242, 149, 9, 11, 242, 148, 9, 11, 242, 147, 9, 11, 242, - 146, 9, 11, 242, 145, 9, 11, 242, 144, 9, 11, 242, 143, 9, 11, 242, 142, - 9, 11, 242, 141, 9, 11, 242, 140, 9, 11, 242, 139, 9, 11, 242, 138, 9, - 11, 242, 137, 9, 11, 242, 136, 9, 11, 242, 135, 9, 11, 242, 134, 9, 11, - 242, 133, 9, 11, 242, 132, 9, 11, 242, 131, 9, 11, 242, 130, 9, 11, 242, - 129, 9, 11, 242, 128, 9, 11, 242, 127, 9, 11, 242, 126, 9, 11, 242, 125, - 9, 11, 242, 124, 9, 11, 242, 123, 9, 11, 242, 122, 9, 11, 242, 121, 9, - 11, 242, 120, 9, 11, 242, 119, 9, 11, 242, 118, 9, 11, 242, 117, 9, 11, - 242, 116, 9, 11, 242, 115, 9, 11, 242, 114, 9, 11, 242, 113, 9, 11, 242, - 112, 9, 11, 242, 111, 9, 11, 242, 110, 9, 11, 242, 109, 9, 11, 242, 108, - 9, 11, 242, 107, 9, 11, 242, 106, 9, 11, 242, 105, 9, 11, 242, 104, 9, - 11, 242, 103, 9, 11, 242, 102, 9, 11, 242, 101, 9, 11, 242, 100, 9, 11, - 242, 99, 9, 11, 242, 98, 9, 11, 242, 97, 9, 11, 242, 96, 9, 11, 242, 95, - 9, 11, 242, 94, 9, 11, 242, 93, 9, 11, 242, 92, 9, 11, 242, 91, 9, 11, - 242, 90, 9, 11, 242, 89, 9, 11, 242, 88, 9, 11, 242, 87, 9, 11, 242, 86, - 9, 11, 242, 85, 9, 11, 242, 84, 9, 11, 242, 83, 9, 11, 242, 82, 9, 11, - 242, 81, 9, 11, 242, 80, 9, 11, 242, 79, 9, 11, 242, 78, 9, 11, 242, 77, - 9, 11, 242, 76, 9, 11, 242, 75, 9, 11, 242, 74, 9, 11, 242, 73, 9, 11, - 242, 72, 9, 11, 242, 71, 9, 11, 242, 70, 9, 11, 242, 69, 9, 11, 242, 68, - 9, 11, 242, 67, 9, 11, 242, 66, 9, 11, 242, 65, 9, 11, 242, 64, 9, 11, - 242, 63, 9, 11, 242, 62, 9, 11, 242, 61, 9, 11, 242, 60, 9, 11, 242, 59, - 9, 11, 242, 58, 9, 11, 242, 57, 9, 11, 242, 56, 9, 11, 242, 55, 9, 11, - 242, 54, 9, 11, 242, 53, 9, 11, 242, 52, 9, 11, 242, 51, 9, 11, 242, 50, - 9, 11, 242, 49, 9, 11, 242, 48, 9, 11, 242, 47, 9, 11, 242, 46, 9, 11, - 242, 45, 9, 11, 242, 44, 9, 11, 242, 43, 9, 11, 242, 42, 9, 11, 242, 41, - 9, 11, 242, 40, 9, 11, 242, 39, 9, 11, 242, 38, 9, 11, 242, 37, 9, 11, - 242, 36, 9, 11, 242, 35, 9, 11, 242, 34, 9, 11, 242, 33, 9, 11, 242, 32, - 238, 11, 227, 95, 108, 228, 145, 108, 247, 149, 76, 108, 232, 57, 76, - 108, 65, 53, 108, 249, 150, 53, 108, 233, 123, 53, 108, 254, 193, 108, - 254, 144, 108, 42, 233, 180, 108, 41, 233, 180, 108, 254, 69, 108, 79, - 53, 108, 251, 54, 108, 244, 94, 108, 246, 218, 228, 38, 108, 228, 161, - 108, 21, 223, 89, 108, 21, 118, 108, 21, 113, 108, 21, 166, 108, 21, 158, - 108, 21, 173, 108, 21, 183, 108, 21, 194, 108, 21, 187, 108, 21, 192, - 108, 251, 61, 108, 229, 186, 108, 237, 213, 53, 108, 247, 204, 53, 108, - 245, 231, 53, 108, 232, 69, 76, 108, 251, 53, 254, 62, 108, 7, 6, 1, 57, - 108, 7, 6, 1, 254, 27, 108, 7, 6, 1, 252, 44, 108, 7, 6, 1, 222, 222, - 108, 7, 6, 1, 72, 108, 7, 6, 1, 247, 130, 108, 7, 6, 1, 214, 108, 7, 6, - 1, 212, 108, 7, 6, 1, 74, 108, 7, 6, 1, 239, 182, 108, 7, 6, 1, 239, 76, - 108, 7, 6, 1, 149, 108, 7, 6, 1, 185, 108, 7, 6, 1, 199, 108, 7, 6, 1, - 73, 108, 7, 6, 1, 233, 244, 108, 7, 6, 1, 232, 139, 108, 7, 6, 1, 146, - 108, 7, 6, 1, 193, 108, 7, 6, 1, 227, 109, 108, 7, 6, 1, 66, 108, 7, 6, - 1, 196, 108, 7, 6, 1, 224, 174, 108, 7, 6, 1, 224, 73, 108, 7, 6, 1, 224, - 25, 108, 7, 6, 1, 223, 119, 108, 42, 37, 104, 108, 231, 193, 228, 161, - 108, 41, 37, 104, 108, 251, 102, 255, 41, 108, 184, 237, 170, 108, 245, - 237, 255, 41, 108, 7, 3, 1, 57, 108, 7, 3, 1, 254, 27, 108, 7, 3, 1, 252, - 44, 108, 7, 3, 1, 222, 222, 108, 7, 3, 1, 72, 108, 7, 3, 1, 247, 130, - 108, 7, 3, 1, 214, 108, 7, 3, 1, 212, 108, 7, 3, 1, 74, 108, 7, 3, 1, - 239, 182, 108, 7, 3, 1, 239, 76, 108, 7, 3, 1, 149, 108, 7, 3, 1, 185, - 108, 7, 3, 1, 199, 108, 7, 3, 1, 73, 108, 7, 3, 1, 233, 244, 108, 7, 3, - 1, 232, 139, 108, 7, 3, 1, 146, 108, 7, 3, 1, 193, 108, 7, 3, 1, 227, - 109, 108, 7, 3, 1, 66, 108, 7, 3, 1, 196, 108, 7, 3, 1, 224, 174, 108, 7, - 3, 1, 224, 73, 108, 7, 3, 1, 224, 25, 108, 7, 3, 1, 223, 119, 108, 42, - 250, 223, 104, 108, 61, 237, 170, 108, 41, 250, 223, 104, 108, 205, 252, - 25, 227, 95, 38, 230, 114, 38, 230, 103, 38, 230, 92, 38, 230, 80, 38, - 230, 69, 38, 230, 58, 38, 230, 47, 38, 230, 36, 38, 230, 25, 38, 230, 17, - 38, 230, 16, 38, 230, 15, 38, 230, 14, 38, 230, 12, 38, 230, 11, 38, 230, - 10, 38, 230, 9, 38, 230, 8, 38, 230, 7, 38, 230, 6, 38, 230, 5, 38, 230, - 4, 38, 230, 3, 38, 230, 1, 38, 230, 0, 38, 229, 255, 38, 229, 254, 38, - 229, 253, 38, 229, 252, 38, 229, 251, 38, 229, 250, 38, 229, 249, 38, - 229, 248, 38, 229, 246, 38, 229, 245, 38, 229, 244, 38, 229, 243, 38, - 229, 242, 38, 229, 241, 38, 229, 240, 38, 229, 239, 38, 229, 238, 38, - 229, 237, 38, 229, 235, 38, 229, 234, 38, 229, 233, 38, 229, 232, 38, - 229, 231, 38, 229, 230, 38, 229, 229, 38, 229, 228, 38, 229, 227, 38, - 229, 226, 38, 229, 224, 38, 229, 223, 38, 229, 222, 38, 229, 221, 38, - 229, 220, 38, 229, 219, 38, 229, 218, 38, 229, 217, 38, 229, 216, 38, - 229, 215, 38, 229, 213, 38, 229, 212, 38, 229, 211, 38, 229, 210, 38, - 229, 209, 38, 229, 208, 38, 229, 207, 38, 229, 206, 38, 229, 205, 38, - 229, 204, 38, 229, 202, 38, 229, 201, 38, 229, 200, 38, 229, 199, 38, - 229, 198, 38, 229, 197, 38, 229, 196, 38, 229, 195, 38, 229, 194, 38, - 229, 193, 38, 230, 190, 38, 230, 189, 38, 230, 188, 38, 230, 187, 38, - 230, 186, 38, 230, 185, 38, 230, 184, 38, 230, 183, 38, 230, 182, 38, - 230, 181, 38, 230, 179, 38, 230, 178, 38, 230, 177, 38, 230, 176, 38, - 230, 175, 38, 230, 174, 38, 230, 173, 38, 230, 172, 38, 230, 171, 38, - 230, 170, 38, 230, 168, 38, 230, 167, 38, 230, 166, 38, 230, 165, 38, - 230, 164, 38, 230, 163, 38, 230, 162, 38, 230, 161, 38, 230, 160, 38, - 230, 159, 38, 230, 157, 38, 230, 156, 38, 230, 155, 38, 230, 154, 38, - 230, 153, 38, 230, 152, 38, 230, 151, 38, 230, 150, 38, 230, 149, 38, - 230, 148, 38, 230, 146, 38, 230, 145, 38, 230, 144, 38, 230, 143, 38, - 230, 142, 38, 230, 141, 38, 230, 140, 38, 230, 139, 38, 230, 138, 38, - 230, 137, 38, 230, 135, 38, 230, 134, 38, 230, 133, 38, 230, 132, 38, - 230, 131, 38, 230, 130, 38, 230, 129, 38, 230, 128, 38, 230, 127, 38, - 230, 126, 38, 230, 124, 38, 230, 123, 38, 230, 122, 38, 230, 121, 38, - 230, 120, 38, 230, 119, 38, 230, 118, 38, 230, 117, 38, 230, 116, 38, - 230, 115, 38, 230, 113, 38, 230, 112, 38, 230, 111, 38, 230, 110, 38, - 230, 109, 38, 230, 108, 38, 230, 107, 38, 230, 106, 38, 230, 105, 38, - 230, 104, 38, 230, 102, 38, 230, 101, 38, 230, 100, 38, 230, 99, 38, 230, - 98, 38, 230, 97, 38, 230, 96, 38, 230, 95, 38, 230, 94, 38, 230, 93, 38, - 230, 91, 38, 230, 90, 38, 230, 89, 38, 230, 88, 38, 230, 87, 38, 230, 86, - 38, 230, 85, 38, 230, 84, 38, 230, 83, 38, 230, 82, 38, 230, 79, 38, 230, - 78, 38, 230, 77, 38, 230, 76, 38, 230, 75, 38, 230, 74, 38, 230, 73, 38, - 230, 72, 38, 230, 71, 38, 230, 70, 38, 230, 68, 38, 230, 67, 38, 230, 66, - 38, 230, 65, 38, 230, 64, 38, 230, 63, 38, 230, 62, 38, 230, 61, 38, 230, - 60, 38, 230, 59, 38, 230, 57, 38, 230, 56, 38, 230, 55, 38, 230, 54, 38, - 230, 53, 38, 230, 52, 38, 230, 51, 38, 230, 50, 38, 230, 49, 38, 230, 48, - 38, 230, 46, 38, 230, 45, 38, 230, 44, 38, 230, 43, 38, 230, 42, 38, 230, - 41, 38, 230, 40, 38, 230, 39, 38, 230, 38, 38, 230, 37, 38, 230, 35, 38, - 230, 34, 38, 230, 33, 38, 230, 32, 38, 230, 31, 38, 230, 30, 38, 230, 29, - 38, 230, 28, 38, 230, 27, 38, 230, 26, 38, 230, 24, 38, 230, 23, 38, 230, - 22, 38, 230, 21, 38, 230, 20, 38, 230, 19, 38, 230, 18, + 0, 223, 254, 246, 95, 78, 228, 69, 78, 54, 55, 248, 155, 55, 229, 169, + 55, 254, 134, 254, 79, 42, 229, 229, 45, 229, 229, 253, 251, 88, 55, 250, + 168, 242, 120, 245, 90, 223, 136, 224, 17, 20, 217, 84, 20, 107, 20, 103, + 20, 160, 20, 154, 20, 174, 20, 182, 20, 191, 20, 185, 20, 190, 250, 175, + 225, 67, 235, 87, 55, 246, 154, 55, 244, 30, 55, 228, 82, 78, 250, 167, + 253, 244, 7, 6, 1, 60, 7, 6, 1, 253, 204, 7, 6, 1, 251, 202, 7, 6, 1, + 250, 46, 7, 6, 1, 73, 7, 6, 1, 246, 74, 7, 6, 1, 245, 67, 7, 6, 1, 243, + 225, 7, 6, 1, 72, 7, 6, 1, 237, 126, 7, 6, 1, 237, 17, 7, 6, 1, 153, 7, + 6, 1, 189, 7, 6, 1, 207, 7, 6, 1, 74, 7, 6, 1, 230, 59, 7, 6, 1, 228, + 163, 7, 6, 1, 152, 7, 6, 1, 198, 7, 6, 1, 222, 201, 7, 6, 1, 68, 7, 6, 1, + 216, 216, 7, 6, 1, 219, 40, 7, 6, 1, 218, 151, 7, 6, 1, 218, 90, 7, 6, 1, + 217, 157, 42, 40, 115, 227, 160, 224, 17, 45, 40, 115, 250, 217, 255, 0, + 109, 235, 43, 244, 37, 255, 0, 7, 3, 1, 60, 7, 3, 1, 253, 204, 7, 3, 1, + 251, 202, 7, 3, 1, 250, 46, 7, 3, 1, 73, 7, 3, 1, 246, 74, 7, 3, 1, 245, + 67, 7, 3, 1, 243, 225, 7, 3, 1, 72, 7, 3, 1, 237, 126, 7, 3, 1, 237, 17, + 7, 3, 1, 153, 7, 3, 1, 189, 7, 3, 1, 207, 7, 3, 1, 74, 7, 3, 1, 230, 59, + 7, 3, 1, 228, 163, 7, 3, 1, 152, 7, 3, 1, 198, 7, 3, 1, 222, 201, 7, 3, + 1, 68, 7, 3, 1, 216, 216, 7, 3, 1, 219, 40, 7, 3, 1, 218, 151, 7, 3, 1, + 218, 90, 7, 3, 1, 217, 157, 42, 250, 79, 115, 69, 235, 43, 45, 250, 79, + 115, 221, 179, 231, 203, 223, 254, 237, 170, 246, 95, 78, 251, 86, 55, + 229, 11, 55, 250, 78, 55, 218, 19, 55, 252, 1, 135, 226, 87, 55, 249, 13, + 250, 126, 55, 245, 215, 230, 103, 237, 211, 235, 112, 51, 254, 120, 228, + 69, 78, 212, 55, 224, 21, 242, 121, 227, 198, 55, 234, 115, 249, 77, 55, + 229, 42, 55, 223, 59, 103, 223, 59, 160, 254, 248, 255, 0, 233, 195, 55, + 229, 73, 55, 233, 193, 248, 145, 251, 92, 223, 59, 107, 234, 58, 230, + 103, 237, 211, 227, 106, 51, 254, 120, 228, 69, 78, 219, 55, 245, 108, + 131, 228, 89, 219, 55, 245, 108, 131, 243, 194, 219, 55, 245, 108, 148, + 228, 87, 237, 170, 228, 82, 78, 7, 6, 1, 112, 2, 244, 36, 7, 6, 1, 112, + 2, 168, 7, 6, 1, 112, 2, 250, 216, 7, 6, 1, 112, 2, 221, 179, 7, 6, 1, + 112, 2, 249, 13, 7, 6, 1, 112, 2, 227, 94, 50, 7, 6, 1, 254, 234, 7, 6, + 1, 251, 203, 2, 251, 92, 7, 6, 1, 178, 2, 244, 36, 7, 6, 1, 178, 2, 168, + 7, 6, 1, 178, 2, 250, 216, 7, 6, 1, 178, 2, 249, 13, 7, 6, 1, 242, 107, + 2, 244, 36, 7, 6, 1, 242, 107, 2, 168, 7, 6, 1, 242, 107, 2, 250, 216, 7, + 6, 1, 242, 107, 2, 249, 13, 7, 6, 1, 246, 118, 7, 6, 1, 233, 34, 2, 221, + 179, 7, 6, 1, 142, 2, 244, 36, 7, 6, 1, 142, 2, 168, 7, 6, 1, 142, 2, + 250, 216, 7, 6, 1, 142, 2, 221, 179, 7, 6, 1, 142, 2, 249, 13, 233, 84, + 55, 7, 6, 1, 142, 2, 92, 7, 6, 1, 105, 2, 244, 36, 7, 6, 1, 105, 2, 168, + 7, 6, 1, 105, 2, 250, 216, 7, 6, 1, 105, 2, 249, 13, 7, 6, 1, 218, 91, 2, + 168, 7, 6, 1, 221, 234, 7, 3, 1, 225, 1, 198, 7, 3, 1, 112, 2, 244, 36, + 7, 3, 1, 112, 2, 168, 7, 3, 1, 112, 2, 250, 216, 7, 3, 1, 112, 2, 221, + 179, 7, 3, 1, 112, 2, 249, 13, 7, 3, 1, 112, 2, 227, 94, 50, 7, 3, 1, + 254, 234, 7, 3, 1, 251, 203, 2, 251, 92, 7, 3, 1, 178, 2, 244, 36, 7, 3, + 1, 178, 2, 168, 7, 3, 1, 178, 2, 250, 216, 7, 3, 1, 178, 2, 249, 13, 7, + 3, 1, 242, 107, 2, 244, 36, 7, 3, 1, 242, 107, 2, 168, 7, 3, 1, 242, 107, + 2, 250, 216, 7, 3, 1, 242, 107, 2, 249, 13, 7, 3, 1, 246, 118, 7, 3, 1, + 233, 34, 2, 221, 179, 7, 3, 1, 142, 2, 244, 36, 7, 3, 1, 142, 2, 168, 7, + 3, 1, 142, 2, 250, 216, 7, 3, 1, 142, 2, 221, 179, 7, 3, 1, 142, 2, 249, + 13, 248, 188, 55, 7, 3, 1, 142, 2, 92, 7, 3, 1, 105, 2, 244, 36, 7, 3, 1, + 105, 2, 168, 7, 3, 1, 105, 2, 250, 216, 7, 3, 1, 105, 2, 249, 13, 7, 3, + 1, 218, 91, 2, 168, 7, 3, 1, 221, 234, 7, 3, 1, 218, 91, 2, 249, 13, 7, + 6, 1, 112, 2, 234, 115, 7, 3, 1, 112, 2, 234, 115, 7, 6, 1, 112, 2, 252, + 8, 7, 3, 1, 112, 2, 252, 8, 7, 6, 1, 112, 2, 230, 162, 7, 3, 1, 112, 2, + 230, 162, 7, 6, 1, 251, 203, 2, 168, 7, 3, 1, 251, 203, 2, 168, 7, 6, 1, + 251, 203, 2, 250, 216, 7, 3, 1, 251, 203, 2, 250, 216, 7, 6, 1, 251, 203, + 2, 61, 50, 7, 3, 1, 251, 203, 2, 61, 50, 7, 6, 1, 251, 203, 2, 251, 130, + 7, 3, 1, 251, 203, 2, 251, 130, 7, 6, 1, 250, 47, 2, 251, 130, 7, 3, 1, + 250, 47, 2, 251, 130, 7, 6, 1, 250, 47, 2, 92, 7, 3, 1, 250, 47, 2, 92, + 7, 6, 1, 178, 2, 234, 115, 7, 3, 1, 178, 2, 234, 115, 7, 6, 1, 178, 2, + 252, 8, 7, 3, 1, 178, 2, 252, 8, 7, 6, 1, 178, 2, 61, 50, 7, 3, 1, 178, + 2, 61, 50, 7, 6, 1, 178, 2, 230, 162, 7, 3, 1, 178, 2, 230, 162, 7, 6, 1, + 178, 2, 251, 130, 7, 3, 1, 178, 2, 251, 130, 7, 6, 1, 245, 68, 2, 250, + 216, 7, 3, 1, 245, 68, 2, 250, 216, 7, 6, 1, 245, 68, 2, 252, 8, 7, 3, 1, + 245, 68, 2, 252, 8, 7, 6, 1, 245, 68, 2, 61, 50, 7, 3, 1, 245, 68, 2, 61, + 50, 7, 6, 1, 245, 68, 2, 251, 92, 7, 3, 1, 245, 68, 2, 251, 92, 7, 6, 1, + 243, 226, 2, 250, 216, 7, 3, 1, 243, 226, 2, 250, 216, 7, 6, 1, 243, 226, + 2, 92, 7, 3, 1, 243, 226, 2, 92, 7, 6, 1, 242, 107, 2, 221, 179, 7, 3, 1, + 242, 107, 2, 221, 179, 7, 6, 1, 242, 107, 2, 234, 115, 7, 3, 1, 242, 107, + 2, 234, 115, 7, 6, 1, 242, 107, 2, 252, 8, 7, 3, 1, 242, 107, 2, 252, 8, + 7, 6, 1, 242, 107, 2, 230, 162, 7, 3, 1, 242, 107, 2, 230, 162, 7, 6, 1, + 242, 107, 2, 61, 50, 7, 3, 1, 248, 144, 72, 7, 6, 24, 237, 253, 7, 3, 24, + 237, 253, 7, 6, 1, 237, 127, 2, 250, 216, 7, 3, 1, 237, 127, 2, 250, 216, + 7, 6, 1, 237, 18, 2, 251, 92, 7, 3, 1, 237, 18, 2, 251, 92, 7, 3, 1, 236, + 17, 7, 6, 1, 235, 202, 2, 168, 7, 3, 1, 235, 202, 2, 168, 7, 6, 1, 235, + 202, 2, 251, 92, 7, 3, 1, 235, 202, 2, 251, 92, 7, 6, 1, 235, 202, 2, + 251, 130, 7, 3, 1, 235, 202, 2, 251, 130, 7, 6, 1, 235, 202, 2, 233, 193, + 248, 145, 7, 3, 1, 235, 202, 2, 233, 193, 248, 145, 7, 6, 1, 235, 202, 2, + 92, 7, 3, 1, 235, 202, 2, 92, 7, 6, 1, 233, 34, 2, 168, 7, 3, 1, 233, 34, + 2, 168, 7, 6, 1, 233, 34, 2, 251, 92, 7, 3, 1, 233, 34, 2, 251, 92, 7, 6, + 1, 233, 34, 2, 251, 130, 7, 3, 1, 233, 34, 2, 251, 130, 7, 3, 1, 233, 34, + 228, 246, 251, 213, 254, 79, 7, 6, 1, 246, 185, 7, 3, 1, 246, 185, 7, 6, + 1, 142, 2, 234, 115, 7, 3, 1, 142, 2, 234, 115, 7, 6, 1, 142, 2, 252, 8, + 7, 3, 1, 142, 2, 252, 8, 7, 6, 1, 142, 2, 51, 168, 7, 3, 1, 142, 2, 51, + 168, 7, 6, 24, 230, 167, 7, 3, 24, 230, 167, 7, 6, 1, 228, 39, 2, 168, 7, + 3, 1, 228, 39, 2, 168, 7, 6, 1, 228, 39, 2, 251, 92, 7, 3, 1, 228, 39, 2, + 251, 92, 7, 6, 1, 228, 39, 2, 251, 130, 7, 3, 1, 228, 39, 2, 251, 130, 7, + 6, 1, 226, 235, 2, 168, 7, 3, 1, 226, 235, 2, 168, 7, 6, 1, 226, 235, 2, + 250, 216, 7, 3, 1, 226, 235, 2, 250, 216, 7, 6, 1, 226, 235, 2, 251, 92, + 7, 3, 1, 226, 235, 2, 251, 92, 7, 6, 1, 226, 235, 2, 251, 130, 7, 3, 1, + 226, 235, 2, 251, 130, 7, 6, 1, 222, 202, 2, 251, 92, 7, 3, 1, 222, 202, + 2, 251, 92, 7, 6, 1, 222, 202, 2, 251, 130, 7, 3, 1, 222, 202, 2, 251, + 130, 7, 6, 1, 222, 202, 2, 92, 7, 3, 1, 222, 202, 2, 92, 7, 6, 1, 105, 2, + 221, 179, 7, 3, 1, 105, 2, 221, 179, 7, 6, 1, 105, 2, 234, 115, 7, 3, 1, + 105, 2, 234, 115, 7, 6, 1, 105, 2, 252, 8, 7, 3, 1, 105, 2, 252, 8, 7, 6, + 1, 105, 2, 227, 94, 50, 7, 3, 1, 105, 2, 227, 94, 50, 7, 6, 1, 105, 2, + 51, 168, 7, 3, 1, 105, 2, 51, 168, 7, 6, 1, 105, 2, 230, 162, 7, 3, 1, + 105, 2, 230, 162, 7, 6, 1, 219, 41, 2, 250, 216, 7, 3, 1, 219, 41, 2, + 250, 216, 7, 6, 1, 218, 91, 2, 250, 216, 7, 3, 1, 218, 91, 2, 250, 216, + 7, 6, 1, 218, 91, 2, 249, 13, 7, 6, 1, 217, 158, 2, 168, 7, 3, 1, 217, + 158, 2, 168, 7, 6, 1, 217, 158, 2, 61, 50, 7, 3, 1, 217, 158, 2, 61, 50, + 7, 6, 1, 217, 158, 2, 251, 130, 7, 3, 1, 217, 158, 2, 251, 130, 7, 3, 1, + 171, 198, 7, 3, 1, 49, 2, 92, 7, 6, 1, 49, 2, 96, 7, 6, 1, 49, 2, 221, + 117, 7, 3, 1, 49, 2, 221, 117, 7, 6, 1, 145, 182, 7, 3, 1, 145, 182, 7, + 6, 1, 230, 119, 74, 7, 6, 1, 251, 203, 2, 96, 7, 3, 1, 251, 203, 2, 96, + 7, 6, 1, 254, 212, 250, 46, 7, 6, 1, 250, 47, 2, 96, 7, 6, 1, 250, 47, 2, + 221, 117, 7, 3, 1, 250, 47, 2, 221, 117, 7, 3, 1, 215, 249, 62, 7, 6, 1, + 210, 73, 7, 6, 1, 226, 104, 7, 6, 1, 230, 119, 73, 7, 6, 1, 246, 75, 2, + 96, 7, 3, 1, 246, 75, 2, 96, 7, 6, 1, 245, 68, 2, 96, 7, 6, 1, 244, 231, + 7, 3, 1, 242, 154, 7, 6, 1, 237, 162, 7, 6, 1, 242, 107, 2, 92, 7, 6, 1, + 237, 18, 2, 96, 7, 3, 1, 237, 18, 2, 96, 7, 3, 1, 235, 202, 2, 135, 7, 3, + 1, 235, 158, 2, 92, 7, 6, 1, 215, 189, 7, 6, 1, 233, 34, 2, 42, 96, 7, 3, + 1, 233, 34, 2, 171, 45, 235, 106, 7, 6, 1, 142, 2, 233, 193, 221, 179, 7, + 6, 1, 142, 2, 242, 189, 7, 3, 1, 142, 2, 242, 189, 7, 6, 1, 230, 158, 7, + 3, 1, 230, 158, 7, 6, 1, 230, 60, 2, 96, 7, 3, 1, 230, 60, 2, 96, 7, 1, + 217, 202, 7, 6, 1, 145, 103, 7, 3, 1, 145, 103, 7, 6, 1, 246, 133, 7, 1, + 210, 246, 134, 234, 247, 7, 3, 1, 222, 202, 2, 230, 29, 96, 7, 6, 1, 222, + 202, 2, 96, 7, 3, 1, 222, 202, 2, 96, 7, 6, 1, 222, 202, 2, 227, 164, 96, + 7, 6, 1, 105, 2, 242, 189, 7, 3, 1, 105, 2, 242, 189, 7, 6, 1, 220, 57, + 7, 6, 1, 220, 11, 2, 96, 7, 6, 1, 218, 91, 2, 96, 7, 3, 1, 218, 91, 2, + 96, 7, 6, 1, 217, 158, 2, 92, 7, 3, 1, 217, 158, 2, 92, 7, 6, 1, 246, 76, + 7, 6, 1, 246, 77, 227, 159, 7, 3, 1, 246, 77, 227, 159, 7, 3, 1, 246, 77, + 2, 222, 135, 7, 1, 124, 2, 92, 7, 6, 1, 145, 174, 7, 3, 1, 145, 174, 7, + 1, 237, 170, 244, 73, 223, 137, 2, 92, 7, 1, 218, 154, 7, 1, 249, 55, + 250, 204, 7, 1, 235, 139, 250, 204, 7, 1, 254, 141, 250, 204, 7, 1, 227, + 164, 250, 204, 7, 6, 1, 247, 76, 2, 251, 130, 7, 6, 1, 250, 47, 2, 3, 1, + 217, 158, 2, 251, 130, 7, 3, 1, 247, 76, 2, 251, 130, 7, 6, 1, 235, 21, + 7, 6, 1, 235, 202, 2, 3, 1, 237, 126, 7, 3, 1, 235, 21, 7, 6, 1, 232, 19, + 7, 6, 1, 233, 34, 2, 3, 1, 237, 126, 7, 3, 1, 232, 19, 7, 6, 1, 112, 2, + 251, 130, 7, 3, 1, 112, 2, 251, 130, 7, 6, 1, 242, 107, 2, 251, 130, 7, + 3, 1, 242, 107, 2, 251, 130, 7, 6, 1, 142, 2, 251, 130, 7, 3, 1, 142, 2, + 251, 130, 7, 6, 1, 105, 2, 251, 130, 7, 3, 1, 105, 2, 251, 130, 7, 6, 1, + 105, 2, 249, 14, 25, 234, 115, 7, 3, 1, 105, 2, 249, 14, 25, 234, 115, 7, + 6, 1, 105, 2, 249, 14, 25, 168, 7, 3, 1, 105, 2, 249, 14, 25, 168, 7, 6, + 1, 105, 2, 249, 14, 25, 251, 130, 7, 3, 1, 105, 2, 249, 14, 25, 251, 130, + 7, 6, 1, 105, 2, 249, 14, 25, 244, 36, 7, 3, 1, 105, 2, 249, 14, 25, 244, + 36, 7, 3, 1, 215, 73, 7, 6, 1, 112, 2, 249, 14, 25, 234, 115, 7, 3, 1, + 112, 2, 249, 14, 25, 234, 115, 7, 6, 1, 112, 2, 61, 71, 25, 234, 115, 7, + 3, 1, 112, 2, 61, 71, 25, 234, 115, 7, 6, 1, 254, 235, 2, 234, 115, 7, 3, + 1, 254, 235, 2, 234, 115, 7, 6, 1, 245, 68, 2, 92, 7, 3, 1, 245, 68, 2, + 92, 7, 6, 1, 245, 68, 2, 251, 130, 7, 3, 1, 245, 68, 2, 251, 130, 7, 6, + 1, 237, 18, 2, 251, 130, 7, 3, 1, 237, 18, 2, 251, 130, 7, 6, 1, 142, 2, + 230, 162, 7, 3, 1, 142, 2, 230, 162, 7, 6, 1, 142, 2, 230, 163, 25, 234, + 115, 7, 3, 1, 142, 2, 230, 163, 25, 234, 115, 7, 6, 1, 246, 77, 2, 251, + 130, 7, 3, 1, 246, 77, 2, 251, 130, 7, 3, 1, 237, 127, 2, 251, 130, 7, 6, + 1, 247, 75, 7, 6, 1, 250, 47, 2, 3, 1, 217, 157, 7, 3, 1, 247, 75, 7, 6, + 1, 245, 68, 2, 168, 7, 3, 1, 245, 68, 2, 168, 7, 6, 1, 242, 152, 7, 6, 1, + 218, 154, 7, 6, 1, 233, 34, 2, 244, 36, 7, 3, 1, 233, 34, 2, 244, 36, 7, + 6, 1, 112, 2, 227, 94, 71, 25, 168, 7, 3, 1, 112, 2, 227, 94, 71, 25, + 168, 7, 6, 1, 254, 235, 2, 168, 7, 3, 1, 254, 235, 2, 168, 7, 6, 1, 142, + 2, 214, 25, 168, 7, 3, 1, 142, 2, 214, 25, 168, 7, 6, 1, 112, 2, 51, 244, + 36, 7, 3, 1, 112, 2, 51, 244, 36, 7, 6, 1, 112, 2, 237, 170, 252, 8, 7, + 3, 1, 112, 2, 237, 170, 252, 8, 7, 6, 1, 178, 2, 51, 244, 36, 7, 3, 1, + 178, 2, 51, 244, 36, 7, 6, 1, 178, 2, 237, 170, 252, 8, 7, 3, 1, 178, 2, + 237, 170, 252, 8, 7, 6, 1, 242, 107, 2, 51, 244, 36, 7, 3, 1, 242, 107, + 2, 51, 244, 36, 7, 6, 1, 242, 107, 2, 237, 170, 252, 8, 7, 3, 1, 242, + 107, 2, 237, 170, 252, 8, 7, 6, 1, 142, 2, 51, 244, 36, 7, 3, 1, 142, 2, + 51, 244, 36, 7, 6, 1, 142, 2, 237, 170, 252, 8, 7, 3, 1, 142, 2, 237, + 170, 252, 8, 7, 6, 1, 228, 39, 2, 51, 244, 36, 7, 3, 1, 228, 39, 2, 51, + 244, 36, 7, 6, 1, 228, 39, 2, 237, 170, 252, 8, 7, 3, 1, 228, 39, 2, 237, + 170, 252, 8, 7, 6, 1, 105, 2, 51, 244, 36, 7, 3, 1, 105, 2, 51, 244, 36, + 7, 6, 1, 105, 2, 237, 170, 252, 8, 7, 3, 1, 105, 2, 237, 170, 252, 8, 7, + 6, 1, 226, 235, 2, 250, 169, 56, 7, 3, 1, 226, 235, 2, 250, 169, 56, 7, + 6, 1, 222, 202, 2, 250, 169, 56, 7, 3, 1, 222, 202, 2, 250, 169, 56, 7, + 6, 1, 217, 218, 7, 3, 1, 217, 218, 7, 6, 1, 243, 226, 2, 251, 130, 7, 3, + 1, 243, 226, 2, 251, 130, 7, 6, 1, 233, 34, 2, 171, 45, 235, 106, 7, 3, + 1, 250, 47, 2, 250, 80, 7, 6, 1, 230, 86, 7, 3, 1, 230, 86, 7, 6, 1, 217, + 158, 2, 96, 7, 3, 1, 217, 158, 2, 96, 7, 6, 1, 112, 2, 61, 50, 7, 3, 1, + 112, 2, 61, 50, 7, 6, 1, 178, 2, 251, 92, 7, 3, 1, 178, 2, 251, 92, 7, 6, + 1, 142, 2, 249, 14, 25, 234, 115, 7, 3, 1, 142, 2, 249, 14, 25, 234, 115, + 7, 6, 1, 142, 2, 221, 180, 25, 234, 115, 7, 3, 1, 142, 2, 221, 180, 25, + 234, 115, 7, 6, 1, 142, 2, 61, 50, 7, 3, 1, 142, 2, 61, 50, 7, 6, 1, 142, + 2, 61, 71, 25, 234, 115, 7, 3, 1, 142, 2, 61, 71, 25, 234, 115, 7, 6, 1, + 218, 91, 2, 234, 115, 7, 3, 1, 218, 91, 2, 234, 115, 7, 3, 1, 235, 202, + 2, 250, 80, 7, 3, 1, 233, 34, 2, 250, 80, 7, 3, 1, 222, 202, 2, 250, 80, + 7, 3, 1, 248, 144, 237, 126, 7, 3, 1, 249, 135, 248, 233, 7, 3, 1, 228, + 99, 248, 233, 7, 6, 1, 112, 2, 92, 7, 6, 1, 251, 203, 2, 92, 7, 3, 1, + 251, 203, 2, 92, 7, 6, 1, 235, 202, 2, 135, 7, 6, 1, 222, 202, 2, 249, + 11, 92, 7, 3, 1, 226, 235, 2, 223, 33, 222, 135, 7, 3, 1, 217, 158, 2, + 223, 33, 222, 135, 7, 6, 1, 244, 73, 223, 136, 7, 3, 1, 244, 73, 223, + 136, 7, 6, 1, 49, 2, 92, 7, 6, 1, 105, 135, 7, 6, 1, 215, 216, 216, 7, 6, + 1, 178, 2, 92, 7, 3, 1, 178, 2, 92, 7, 6, 1, 237, 127, 2, 92, 7, 3, 1, + 237, 127, 2, 92, 7, 6, 1, 3, 228, 164, 2, 242, 247, 222, 135, 7, 3, 1, + 228, 164, 2, 242, 247, 222, 135, 7, 6, 1, 228, 39, 2, 92, 7, 3, 1, 228, + 39, 2, 92, 7, 6, 1, 218, 91, 2, 92, 7, 3, 1, 218, 91, 2, 92, 7, 3, 1, + 215, 60, 7, 3, 1, 254, 146, 7, 3, 1, 215, 254, 146, 7, 3, 1, 49, 2, 96, + 7, 3, 1, 230, 119, 74, 7, 3, 1, 251, 203, 2, 250, 80, 7, 3, 1, 250, 47, + 2, 222, 135, 7, 3, 1, 250, 47, 2, 96, 7, 3, 1, 210, 73, 7, 3, 1, 226, + 104, 7, 3, 1, 226, 105, 2, 96, 7, 3, 1, 230, 119, 73, 7, 3, 1, 210, 230, + 119, 73, 7, 3, 1, 210, 230, 119, 178, 2, 96, 7, 3, 1, 250, 197, 210, 230, + 119, 73, 7, 3, 1, 248, 144, 237, 127, 2, 92, 7, 3, 1, 245, 68, 2, 96, 7, + 3, 1, 102, 245, 67, 7, 1, 3, 6, 245, 67, 7, 3, 1, 244, 231, 7, 3, 1, 227, + 237, 242, 189, 7, 3, 1, 215, 243, 225, 7, 3, 1, 243, 226, 2, 96, 7, 3, 1, + 243, 137, 2, 96, 7, 3, 1, 242, 107, 2, 92, 7, 3, 1, 237, 162, 7, 1, 3, 6, + 72, 7, 3, 1, 235, 202, 2, 233, 193, 221, 179, 7, 3, 1, 235, 202, 2, 252, + 116, 7, 3, 1, 235, 202, 2, 227, 164, 96, 7, 3, 1, 235, 81, 7, 3, 1, 215, + 189, 7, 3, 1, 215, 234, 187, 2, 171, 235, 106, 7, 3, 1, 234, 187, 2, 96, + 7, 3, 1, 233, 34, 2, 42, 96, 7, 3, 1, 233, 34, 2, 227, 164, 96, 7, 1, 3, + 6, 207, 7, 3, 1, 252, 196, 74, 7, 1, 3, 6, 230, 167, 7, 3, 1, 250, 197, + 230, 143, 7, 3, 1, 229, 129, 7, 3, 1, 215, 152, 7, 3, 1, 215, 228, 39, 2, + 171, 235, 106, 7, 3, 1, 215, 228, 39, 2, 96, 7, 3, 1, 228, 39, 2, 171, + 235, 106, 7, 3, 1, 228, 39, 2, 222, 135, 7, 3, 1, 228, 39, 2, 245, 173, + 7, 3, 1, 210, 228, 39, 2, 245, 173, 7, 1, 3, 6, 152, 7, 1, 3, 6, 237, + 170, 152, 7, 3, 1, 226, 235, 2, 96, 7, 3, 1, 246, 133, 7, 3, 1, 248, 144, + 237, 127, 2, 214, 25, 96, 7, 3, 1, 223, 224, 210, 246, 133, 7, 3, 1, 246, + 134, 2, 250, 80, 7, 3, 1, 215, 222, 201, 7, 3, 1, 222, 202, 2, 227, 164, + 96, 7, 3, 1, 105, 135, 7, 3, 1, 220, 57, 7, 3, 1, 220, 11, 2, 96, 7, 3, + 1, 215, 216, 216, 7, 3, 1, 215, 219, 40, 7, 3, 1, 215, 218, 90, 7, 1, 3, + 6, 218, 90, 7, 3, 1, 217, 158, 2, 227, 164, 96, 7, 3, 1, 217, 158, 2, + 250, 80, 7, 3, 1, 246, 76, 7, 3, 1, 246, 77, 2, 250, 80, 7, 1, 244, 73, + 223, 136, 7, 1, 229, 133, 219, 70, 245, 100, 7, 1, 237, 170, 244, 73, + 223, 136, 7, 1, 223, 124, 251, 202, 7, 1, 252, 74, 250, 204, 7, 1, 3, 6, + 253, 204, 7, 3, 1, 250, 197, 230, 119, 73, 7, 1, 3, 6, 245, 68, 2, 96, 7, + 1, 3, 6, 243, 225, 7, 3, 1, 237, 127, 2, 250, 97, 7, 3, 1, 215, 237, 17, + 7, 1, 3, 6, 153, 7, 3, 1, 228, 164, 2, 96, 7, 1, 244, 73, 223, 137, 2, + 92, 7, 1, 210, 244, 73, 223, 137, 2, 92, 7, 3, 1, 247, 76, 248, 233, 7, + 3, 1, 249, 37, 248, 233, 7, 3, 1, 247, 76, 248, 234, 2, 250, 80, 7, 3, 1, + 221, 57, 248, 233, 7, 3, 1, 222, 55, 248, 233, 7, 3, 1, 222, 94, 248, + 234, 2, 250, 80, 7, 3, 1, 245, 213, 248, 233, 7, 3, 1, 234, 233, 248, + 233, 7, 3, 1, 234, 188, 248, 233, 7, 1, 252, 74, 229, 168, 7, 1, 252, 81, + 229, 168, 7, 3, 1, 215, 243, 226, 2, 245, 173, 7, 3, 1, 215, 243, 226, 2, + 245, 174, 25, 222, 135, 58, 1, 3, 243, 225, 58, 1, 3, 243, 226, 2, 96, + 58, 1, 3, 237, 126, 58, 1, 3, 152, 58, 1, 3, 215, 152, 58, 1, 3, 215, + 228, 39, 2, 96, 58, 1, 3, 6, 237, 170, 152, 58, 1, 3, 219, 40, 58, 1, 3, + 218, 90, 58, 1, 228, 235, 58, 1, 51, 228, 235, 58, 1, 215, 250, 168, 58, + 1, 254, 79, 58, 1, 210, 250, 168, 58, 1, 45, 144, 227, 93, 58, 1, 42, + 144, 227, 93, 58, 1, 244, 73, 223, 136, 58, 1, 210, 244, 73, 223, 136, + 58, 1, 42, 254, 20, 58, 1, 45, 254, 20, 58, 1, 108, 254, 20, 58, 1, 113, + 254, 20, 58, 1, 250, 217, 255, 0, 251, 130, 58, 1, 69, 235, 43, 58, 1, + 234, 115, 58, 1, 254, 248, 255, 0, 58, 1, 244, 37, 255, 0, 58, 1, 109, + 69, 235, 43, 58, 1, 109, 234, 115, 58, 1, 109, 244, 37, 255, 0, 58, 1, + 109, 254, 248, 255, 0, 58, 1, 221, 87, 250, 175, 58, 1, 144, 221, 87, + 250, 175, 58, 1, 251, 83, 45, 144, 227, 93, 58, 1, 251, 83, 42, 144, 227, + 93, 58, 1, 108, 222, 143, 58, 1, 113, 222, 143, 58, 1, 88, 55, 58, 1, + 233, 155, 55, 252, 8, 61, 50, 227, 94, 50, 230, 162, 3, 221, 179, 51, + 254, 248, 255, 0, 58, 1, 227, 148, 96, 58, 1, 250, 101, 255, 0, 58, 1, 3, + 244, 231, 58, 1, 3, 153, 58, 1, 3, 198, 58, 1, 3, 218, 151, 58, 1, 3, + 210, 244, 73, 223, 136, 58, 1, 246, 85, 145, 135, 58, 1, 116, 145, 135, + 58, 1, 233, 194, 145, 135, 58, 1, 109, 145, 135, 58, 1, 246, 84, 145, + 135, 58, 1, 217, 241, 249, 52, 145, 78, 58, 1, 218, 46, 249, 52, 145, 78, + 58, 1, 219, 68, 58, 1, 220, 84, 58, 1, 51, 254, 79, 58, 1, 109, 113, 254, + 20, 58, 1, 109, 108, 254, 20, 58, 1, 109, 42, 254, 20, 58, 1, 109, 45, + 254, 20, 58, 1, 109, 227, 93, 58, 1, 233, 193, 244, 37, 255, 0, 58, 1, + 233, 193, 51, 244, 37, 255, 0, 58, 1, 233, 193, 51, 254, 248, 255, 0, 58, + 1, 109, 221, 179, 58, 1, 227, 241, 250, 175, 58, 1, 252, 131, 116, 221, + 132, 58, 1, 246, 190, 116, 221, 132, 58, 1, 252, 131, 109, 221, 132, 58, + 1, 246, 190, 109, 221, 132, 58, 1, 224, 237, 58, 1, 230, 119, 224, 237, + 58, 1, 109, 42, 65, 36, 244, 37, 255, 0, 36, 254, 248, 255, 0, 36, 250, + 217, 255, 0, 36, 221, 179, 36, 234, 115, 36, 230, 73, 36, 252, 8, 36, 61, + 50, 36, 249, 13, 36, 242, 247, 50, 36, 227, 94, 50, 36, 51, 254, 248, + 255, 0, 36, 251, 130, 36, 69, 235, 44, 50, 36, 51, 69, 235, 44, 50, 36, + 51, 244, 37, 255, 0, 36, 251, 146, 36, 237, 170, 252, 8, 36, 215, 250, + 169, 50, 36, 250, 169, 50, 36, 210, 250, 169, 50, 36, 250, 169, 71, 227, + 109, 36, 244, 37, 255, 1, 56, 36, 254, 248, 255, 1, 56, 36, 42, 222, 144, + 56, 36, 45, 222, 144, 56, 36, 42, 254, 120, 50, 36, 242, 189, 36, 42, + 144, 227, 94, 56, 36, 108, 222, 144, 56, 36, 113, 222, 144, 56, 36, 88, + 5, 56, 36, 233, 155, 5, 56, 36, 230, 27, 242, 247, 56, 36, 227, 164, 242, + 247, 56, 36, 61, 56, 36, 249, 14, 56, 36, 227, 94, 56, 36, 250, 169, 56, + 36, 251, 92, 36, 230, 162, 36, 69, 235, 44, 56, 36, 252, 4, 56, 36, 237, + 170, 51, 254, 50, 56, 36, 251, 131, 56, 36, 250, 217, 255, 1, 56, 36, + 252, 9, 56, 36, 237, 170, 252, 9, 56, 36, 221, 180, 56, 36, 234, 116, 56, + 36, 109, 235, 43, 36, 51, 109, 235, 43, 36, 221, 180, 230, 74, 36, 224, + 192, 214, 230, 74, 36, 171, 214, 230, 74, 36, 224, 192, 224, 18, 230, 74, + 36, 171, 224, 18, 230, 74, 36, 45, 144, 227, 94, 56, 36, 237, 170, 252, + 4, 56, 36, 40, 56, 36, 226, 93, 56, 36, 218, 152, 50, 36, 69, 221, 179, + 36, 51, 230, 73, 36, 244, 37, 145, 78, 36, 254, 248, 145, 78, 36, 23, + 229, 163, 36, 23, 236, 33, 36, 23, 249, 8, 221, 123, 36, 23, 217, 207, + 36, 252, 4, 50, 36, 246, 154, 5, 56, 36, 51, 69, 235, 44, 56, 36, 42, + 254, 120, 56, 36, 212, 221, 180, 50, 36, 242, 251, 50, 36, 254, 151, 114, + 199, 50, 36, 42, 45, 76, 56, 36, 220, 53, 76, 56, 36, 244, 41, 237, 54, + 36, 45, 254, 21, 50, 36, 42, 144, 227, 94, 50, 36, 245, 210, 36, 218, + 152, 56, 36, 42, 254, 21, 56, 36, 45, 254, 21, 56, 36, 45, 254, 21, 25, + 108, 254, 21, 56, 36, 45, 144, 227, 94, 50, 36, 61, 71, 227, 109, 36, + 253, 252, 56, 36, 51, 227, 94, 56, 36, 217, 33, 50, 36, 51, 252, 9, 56, + 36, 51, 252, 8, 36, 51, 234, 115, 36, 51, 234, 116, 56, 36, 51, 221, 179, + 36, 51, 237, 170, 252, 8, 36, 51, 90, 76, 56, 36, 7, 3, 1, 60, 36, 7, 3, + 1, 73, 36, 7, 3, 1, 72, 36, 7, 3, 1, 74, 36, 7, 3, 1, 68, 36, 7, 3, 1, + 251, 202, 36, 7, 3, 1, 250, 46, 36, 7, 3, 1, 243, 225, 36, 7, 3, 1, 189, + 36, 7, 3, 1, 152, 36, 7, 3, 1, 222, 201, 36, 7, 3, 1, 216, 216, 36, 7, 3, + 1, 218, 151, 23, 6, 1, 243, 127, 23, 3, 1, 243, 127, 23, 6, 1, 254, 49, + 226, 142, 23, 3, 1, 254, 49, 226, 142, 23, 231, 107, 55, 23, 234, 237, + 231, 107, 55, 23, 6, 1, 230, 15, 248, 240, 23, 3, 1, 230, 15, 248, 240, + 23, 217, 207, 23, 3, 210, 234, 218, 224, 128, 100, 23, 3, 247, 143, 234, + 218, 224, 128, 100, 23, 3, 210, 247, 143, 234, 218, 224, 128, 100, 23, + 228, 82, 78, 23, 221, 123, 23, 249, 8, 221, 123, 23, 6, 1, 254, 147, 2, + 221, 123, 23, 254, 110, 222, 73, 23, 6, 1, 246, 157, 2, 221, 123, 23, 6, + 1, 246, 122, 2, 221, 123, 23, 6, 1, 237, 163, 2, 221, 123, 23, 6, 1, 230, + 142, 2, 221, 123, 23, 6, 1, 220, 58, 2, 221, 123, 23, 6, 1, 230, 144, 2, + 221, 123, 23, 3, 1, 237, 163, 2, 249, 8, 25, 221, 123, 23, 6, 1, 254, + 146, 23, 6, 1, 252, 102, 23, 6, 1, 244, 231, 23, 6, 1, 249, 62, 23, 6, 1, + 246, 156, 23, 6, 1, 217, 83, 23, 6, 1, 246, 121, 23, 6, 1, 222, 6, 23, 6, + 1, 237, 162, 23, 6, 1, 236, 221, 23, 6, 1, 235, 156, 23, 6, 1, 233, 99, + 23, 6, 1, 231, 144, 23, 6, 1, 218, 130, 23, 6, 1, 230, 141, 23, 6, 1, + 229, 108, 23, 6, 1, 227, 149, 23, 6, 1, 224, 127, 23, 6, 1, 222, 105, 23, + 6, 1, 220, 57, 23, 6, 1, 229, 129, 23, 6, 1, 251, 31, 23, 6, 1, 228, 212, + 23, 6, 1, 230, 143, 23, 6, 1, 237, 163, 2, 249, 7, 23, 6, 1, 220, 58, 2, + 249, 7, 23, 3, 1, 254, 147, 2, 221, 123, 23, 3, 1, 246, 157, 2, 221, 123, + 23, 3, 1, 246, 122, 2, 221, 123, 23, 3, 1, 237, 163, 2, 221, 123, 23, 3, + 1, 220, 58, 2, 249, 8, 25, 221, 123, 23, 3, 1, 254, 146, 23, 3, 1, 252, + 102, 23, 3, 1, 244, 231, 23, 3, 1, 249, 62, 23, 3, 1, 246, 156, 23, 3, 1, + 217, 83, 23, 3, 1, 246, 121, 23, 3, 1, 222, 6, 23, 3, 1, 237, 162, 23, 3, + 1, 236, 221, 23, 3, 1, 235, 156, 23, 3, 1, 233, 99, 23, 3, 1, 231, 144, + 23, 3, 1, 218, 130, 23, 3, 1, 230, 141, 23, 3, 1, 229, 108, 23, 3, 1, + 227, 149, 23, 3, 1, 39, 224, 127, 23, 3, 1, 224, 127, 23, 3, 1, 222, 105, + 23, 3, 1, 220, 57, 23, 3, 1, 229, 129, 23, 3, 1, 251, 31, 23, 3, 1, 228, + 212, 23, 3, 1, 230, 143, 23, 3, 1, 237, 163, 2, 249, 7, 23, 3, 1, 220, + 58, 2, 249, 7, 23, 3, 1, 230, 142, 2, 221, 123, 23, 3, 1, 220, 58, 2, + 221, 123, 23, 3, 1, 230, 144, 2, 221, 123, 23, 6, 236, 244, 100, 23, 252, + 103, 100, 23, 222, 7, 100, 23, 220, 58, 2, 242, 247, 100, 23, 220, 58, 2, + 254, 248, 25, 242, 247, 100, 23, 220, 58, 2, 249, 14, 25, 242, 247, 100, + 23, 229, 130, 100, 23, 229, 109, 100, 23, 236, 244, 100, 23, 1, 254, 49, + 236, 37, 23, 3, 1, 254, 49, 236, 37, 23, 1, 223, 144, 23, 3, 1, 223, 144, + 23, 1, 248, 240, 23, 3, 1, 248, 240, 23, 1, 236, 37, 23, 3, 1, 236, 37, + 23, 1, 226, 142, 23, 3, 1, 226, 142, 75, 6, 1, 224, 238, 75, 3, 1, 224, + 238, 75, 6, 1, 245, 219, 75, 3, 1, 245, 219, 75, 6, 1, 236, 135, 75, 3, + 1, 236, 135, 75, 6, 1, 242, 242, 75, 3, 1, 242, 242, 75, 6, 1, 244, 226, + 75, 3, 1, 244, 226, 75, 6, 1, 224, 211, 75, 3, 1, 224, 211, 75, 6, 1, + 249, 75, 75, 3, 1, 249, 75, 23, 236, 222, 100, 23, 227, 150, 100, 23, + 234, 218, 224, 128, 100, 23, 1, 217, 212, 23, 6, 222, 7, 100, 23, 234, + 218, 246, 157, 100, 23, 210, 234, 218, 246, 157, 100, 23, 6, 1, 224, 200, + 23, 3, 1, 224, 200, 23, 6, 234, 218, 224, 128, 100, 23, 6, 1, 226, 140, + 23, 3, 1, 226, 140, 23, 227, 150, 2, 214, 100, 23, 6, 210, 234, 218, 224, + 128, 100, 23, 6, 247, 143, 234, 218, 224, 128, 100, 23, 6, 210, 247, 143, + 234, 218, 224, 128, 100, 31, 6, 1, 238, 27, 2, 244, 36, 31, 6, 1, 237, + 166, 31, 6, 1, 248, 182, 31, 6, 1, 244, 78, 31, 6, 1, 220, 99, 238, 26, + 31, 6, 1, 247, 73, 31, 6, 1, 251, 211, 72, 31, 6, 1, 217, 250, 31, 6, 1, + 237, 114, 31, 6, 1, 235, 20, 31, 6, 1, 232, 15, 31, 6, 1, 221, 46, 31, 6, + 1, 236, 76, 31, 6, 1, 242, 107, 2, 244, 36, 31, 6, 1, 224, 192, 68, 31, + 6, 1, 247, 69, 31, 6, 1, 60, 31, 6, 1, 252, 144, 31, 6, 1, 219, 165, 31, + 6, 1, 244, 116, 31, 6, 1, 249, 92, 31, 6, 1, 238, 26, 31, 6, 1, 217, 72, + 31, 6, 1, 217, 92, 31, 6, 1, 72, 31, 6, 1, 224, 192, 72, 31, 6, 1, 175, + 31, 6, 1, 246, 217, 31, 6, 1, 246, 205, 31, 6, 1, 246, 197, 31, 6, 1, 74, + 31, 6, 1, 229, 198, 31, 6, 1, 246, 148, 31, 6, 1, 246, 138, 31, 6, 1, + 222, 87, 31, 6, 1, 68, 31, 6, 1, 246, 244, 31, 6, 1, 155, 31, 6, 1, 221, + 50, 31, 6, 1, 251, 46, 31, 6, 1, 225, 25, 31, 6, 1, 224, 248, 31, 6, 1, + 243, 181, 55, 31, 6, 1, 218, 7, 31, 6, 1, 224, 21, 55, 31, 6, 1, 73, 31, + 6, 1, 217, 200, 31, 6, 1, 184, 31, 3, 1, 60, 31, 3, 1, 252, 144, 31, 3, + 1, 219, 165, 31, 3, 1, 244, 116, 31, 3, 1, 249, 92, 31, 3, 1, 238, 26, + 31, 3, 1, 217, 72, 31, 3, 1, 217, 92, 31, 3, 1, 72, 31, 3, 1, 224, 192, + 72, 31, 3, 1, 175, 31, 3, 1, 246, 217, 31, 3, 1, 246, 205, 31, 3, 1, 246, + 197, 31, 3, 1, 74, 31, 3, 1, 229, 198, 31, 3, 1, 246, 148, 31, 3, 1, 246, + 138, 31, 3, 1, 222, 87, 31, 3, 1, 68, 31, 3, 1, 246, 244, 31, 3, 1, 155, + 31, 3, 1, 221, 50, 31, 3, 1, 251, 46, 31, 3, 1, 225, 25, 31, 3, 1, 224, + 248, 31, 3, 1, 243, 181, 55, 31, 3, 1, 218, 7, 31, 3, 1, 224, 21, 55, 31, + 3, 1, 73, 31, 3, 1, 217, 200, 31, 3, 1, 184, 31, 3, 1, 238, 27, 2, 244, + 36, 31, 3, 1, 237, 166, 31, 3, 1, 248, 182, 31, 3, 1, 244, 78, 31, 3, 1, + 220, 99, 238, 26, 31, 3, 1, 247, 73, 31, 3, 1, 251, 211, 72, 31, 3, 1, + 217, 250, 31, 3, 1, 237, 114, 31, 3, 1, 235, 20, 31, 3, 1, 232, 15, 31, + 3, 1, 221, 46, 31, 3, 1, 236, 76, 31, 3, 1, 242, 107, 2, 244, 36, 31, 3, + 1, 224, 192, 68, 31, 3, 1, 247, 69, 31, 6, 1, 230, 143, 31, 3, 1, 230, + 143, 31, 6, 1, 218, 36, 31, 3, 1, 218, 36, 31, 6, 1, 237, 160, 73, 31, 3, + 1, 237, 160, 73, 31, 6, 1, 235, 25, 217, 178, 31, 3, 1, 235, 25, 217, + 178, 31, 6, 1, 237, 160, 235, 25, 217, 178, 31, 3, 1, 237, 160, 235, 25, + 217, 178, 31, 6, 1, 252, 76, 217, 178, 31, 3, 1, 252, 76, 217, 178, 31, + 6, 1, 237, 160, 252, 76, 217, 178, 31, 3, 1, 237, 160, 252, 76, 217, 178, + 31, 6, 1, 236, 11, 31, 3, 1, 236, 11, 31, 6, 1, 228, 212, 31, 3, 1, 228, + 212, 31, 6, 1, 245, 171, 31, 3, 1, 245, 171, 31, 6, 1, 237, 128, 31, 3, + 1, 237, 128, 31, 6, 1, 237, 129, 2, 51, 244, 37, 255, 0, 31, 3, 1, 237, + 129, 2, 51, 244, 37, 255, 0, 31, 6, 1, 220, 102, 31, 3, 1, 220, 102, 31, + 6, 1, 227, 57, 230, 143, 31, 3, 1, 227, 57, 230, 143, 31, 6, 1, 230, 144, + 2, 221, 160, 31, 3, 1, 230, 144, 2, 221, 160, 31, 6, 1, 230, 92, 31, 3, + 1, 230, 92, 31, 6, 1, 236, 37, 31, 3, 1, 236, 37, 31, 221, 230, 55, 36, + 31, 221, 160, 36, 31, 230, 28, 36, 31, 193, 229, 39, 36, 31, 209, 229, + 39, 36, 31, 229, 25, 36, 31, 242, 162, 221, 230, 55, 36, 31, 233, 162, + 55, 31, 6, 1, 224, 192, 242, 107, 2, 222, 135, 31, 3, 1, 224, 192, 242, + 107, 2, 222, 135, 31, 6, 1, 225, 63, 55, 31, 3, 1, 225, 63, 55, 31, 6, 1, + 246, 149, 2, 221, 202, 31, 3, 1, 246, 149, 2, 221, 202, 31, 6, 1, 244, + 117, 2, 220, 56, 31, 3, 1, 244, 117, 2, 220, 56, 31, 6, 1, 244, 117, 2, + 92, 31, 3, 1, 244, 117, 2, 92, 31, 6, 1, 244, 117, 2, 233, 193, 96, 31, + 3, 1, 244, 117, 2, 233, 193, 96, 31, 6, 1, 217, 73, 2, 249, 48, 31, 3, 1, + 217, 73, 2, 249, 48, 31, 6, 1, 217, 93, 2, 249, 48, 31, 3, 1, 217, 93, 2, + 249, 48, 31, 6, 1, 206, 2, 249, 48, 31, 3, 1, 206, 2, 249, 48, 31, 6, 1, + 206, 2, 69, 92, 31, 3, 1, 206, 2, 69, 92, 31, 6, 1, 206, 2, 92, 31, 3, 1, + 206, 2, 92, 31, 6, 1, 252, 186, 175, 31, 3, 1, 252, 186, 175, 31, 6, 1, + 246, 198, 2, 249, 48, 31, 3, 1, 246, 198, 2, 249, 48, 31, 6, 24, 246, + 198, 244, 116, 31, 3, 24, 246, 198, 244, 116, 31, 6, 1, 229, 199, 2, 233, + 193, 96, 31, 3, 1, 229, 199, 2, 233, 193, 96, 31, 6, 1, 255, 6, 155, 31, + 3, 1, 255, 6, 155, 31, 6, 1, 246, 139, 2, 249, 48, 31, 3, 1, 246, 139, 2, + 249, 48, 31, 6, 1, 222, 88, 2, 249, 48, 31, 3, 1, 222, 88, 2, 249, 48, + 31, 6, 1, 223, 130, 68, 31, 3, 1, 223, 130, 68, 31, 6, 1, 223, 130, 105, + 2, 92, 31, 3, 1, 223, 130, 105, 2, 92, 31, 6, 1, 243, 214, 2, 249, 48, + 31, 3, 1, 243, 214, 2, 249, 48, 31, 6, 24, 222, 88, 221, 50, 31, 3, 24, + 222, 88, 221, 50, 31, 6, 1, 251, 47, 2, 249, 48, 31, 3, 1, 251, 47, 2, + 249, 48, 31, 6, 1, 251, 47, 2, 69, 92, 31, 3, 1, 251, 47, 2, 69, 92, 31, + 6, 1, 224, 222, 31, 3, 1, 224, 222, 31, 6, 1, 255, 6, 251, 46, 31, 3, 1, + 255, 6, 251, 46, 31, 6, 1, 255, 6, 251, 47, 2, 249, 48, 31, 3, 1, 255, 6, + 251, 47, 2, 249, 48, 31, 1, 230, 22, 31, 6, 1, 217, 73, 2, 252, 8, 31, 3, + 1, 217, 73, 2, 252, 8, 31, 6, 1, 206, 2, 96, 31, 3, 1, 206, 2, 96, 31, 6, + 1, 246, 218, 2, 222, 135, 31, 3, 1, 246, 218, 2, 222, 135, 31, 6, 1, 246, + 198, 2, 96, 31, 3, 1, 246, 198, 2, 96, 31, 6, 1, 246, 198, 2, 222, 135, + 31, 3, 1, 246, 198, 2, 222, 135, 31, 6, 1, 236, 144, 251, 46, 31, 3, 1, + 236, 144, 251, 46, 31, 6, 1, 246, 206, 2, 222, 135, 31, 3, 1, 246, 206, + 2, 222, 135, 31, 3, 1, 230, 22, 31, 6, 1, 112, 2, 252, 8, 31, 3, 1, 112, + 2, 252, 8, 31, 6, 1, 112, 2, 249, 13, 31, 3, 1, 112, 2, 249, 13, 31, 6, + 24, 112, 238, 26, 31, 3, 24, 112, 238, 26, 31, 6, 1, 238, 27, 2, 252, 8, + 31, 3, 1, 238, 27, 2, 252, 8, 31, 6, 1, 226, 104, 31, 3, 1, 226, 104, 31, + 6, 1, 226, 105, 2, 249, 13, 31, 3, 1, 226, 105, 2, 249, 13, 31, 6, 1, + 217, 73, 2, 249, 13, 31, 3, 1, 217, 73, 2, 249, 13, 31, 6, 1, 217, 93, 2, + 249, 13, 31, 3, 1, 217, 93, 2, 249, 13, 31, 6, 1, 255, 6, 247, 73, 31, 3, + 1, 255, 6, 247, 73, 31, 6, 1, 242, 107, 2, 234, 115, 31, 3, 1, 242, 107, + 2, 234, 115, 31, 6, 1, 242, 107, 2, 249, 13, 31, 3, 1, 242, 107, 2, 249, + 13, 31, 6, 1, 142, 2, 249, 13, 31, 3, 1, 142, 2, 249, 13, 31, 6, 1, 252, + 196, 74, 31, 3, 1, 252, 196, 74, 31, 6, 1, 252, 196, 142, 2, 249, 13, 31, + 3, 1, 252, 196, 142, 2, 249, 13, 31, 6, 1, 178, 2, 249, 13, 31, 3, 1, + 178, 2, 249, 13, 31, 6, 1, 105, 2, 234, 115, 31, 3, 1, 105, 2, 234, 115, + 31, 6, 1, 105, 2, 249, 13, 31, 3, 1, 105, 2, 249, 13, 31, 6, 1, 105, 2, + 51, 168, 31, 3, 1, 105, 2, 51, 168, 31, 6, 1, 251, 47, 2, 249, 13, 31, 3, + 1, 251, 47, 2, 249, 13, 31, 6, 1, 244, 117, 2, 249, 48, 31, 3, 1, 244, + 117, 2, 249, 48, 31, 6, 1, 218, 8, 2, 249, 13, 31, 3, 1, 218, 8, 2, 249, + 13, 31, 6, 1, 244, 117, 2, 214, 25, 96, 31, 3, 1, 244, 117, 2, 214, 25, + 96, 31, 6, 1, 243, 214, 2, 96, 31, 3, 1, 243, 214, 2, 96, 31, 6, 1, 243, + 214, 2, 92, 31, 3, 1, 243, 214, 2, 92, 31, 6, 1, 236, 45, 249, 92, 31, 3, + 1, 236, 45, 249, 92, 31, 6, 1, 236, 45, 248, 182, 31, 3, 1, 236, 45, 248, + 182, 31, 6, 1, 236, 45, 217, 25, 31, 3, 1, 236, 45, 217, 25, 31, 6, 1, + 236, 45, 247, 67, 31, 3, 1, 236, 45, 247, 67, 31, 6, 1, 236, 45, 235, 20, + 31, 3, 1, 236, 45, 235, 20, 31, 6, 1, 236, 45, 232, 15, 31, 3, 1, 236, + 45, 232, 15, 31, 6, 1, 236, 45, 224, 67, 31, 3, 1, 236, 45, 224, 67, 31, + 6, 1, 236, 45, 221, 156, 31, 3, 1, 236, 45, 221, 156, 31, 6, 1, 210, 217, + 92, 31, 3, 1, 210, 217, 92, 31, 6, 1, 246, 218, 2, 96, 31, 3, 1, 246, + 218, 2, 96, 31, 6, 1, 235, 79, 31, 3, 1, 235, 79, 31, 6, 1, 227, 151, 31, + 3, 1, 227, 151, 31, 6, 1, 218, 65, 31, 3, 1, 218, 65, 31, 6, 1, 228, 155, + 31, 3, 1, 228, 155, 31, 6, 1, 218, 227, 31, 3, 1, 218, 227, 31, 6, 1, + 254, 165, 175, 31, 3, 1, 254, 165, 175, 31, 6, 1, 246, 218, 2, 233, 193, + 96, 31, 3, 1, 246, 218, 2, 233, 193, 96, 31, 6, 1, 246, 198, 2, 233, 193, + 96, 31, 3, 1, 246, 198, 2, 233, 193, 96, 31, 6, 1, 229, 199, 2, 249, 48, + 31, 3, 1, 229, 199, 2, 249, 48, 132, 6, 1, 253, 209, 132, 6, 1, 252, 114, + 132, 6, 1, 244, 93, 132, 6, 1, 249, 207, 132, 6, 1, 246, 254, 132, 6, 1, + 217, 114, 132, 6, 1, 246, 239, 132, 6, 1, 246, 123, 132, 6, 1, 101, 132, + 6, 1, 217, 72, 132, 6, 1, 237, 200, 132, 6, 1, 235, 23, 132, 6, 1, 218, + 133, 132, 6, 1, 251, 169, 132, 6, 1, 236, 168, 132, 6, 1, 243, 4, 132, 6, + 1, 237, 123, 132, 6, 1, 244, 124, 132, 6, 1, 251, 42, 132, 6, 1, 233, + 251, 132, 6, 1, 217, 250, 132, 6, 1, 231, 174, 132, 6, 1, 225, 25, 132, + 6, 1, 219, 72, 132, 6, 1, 251, 69, 132, 6, 1, 229, 187, 132, 6, 1, 237, + 100, 132, 6, 1, 203, 132, 6, 1, 226, 77, 132, 6, 1, 219, 96, 132, 6, 1, + 221, 158, 132, 6, 1, 227, 196, 132, 6, 1, 250, 182, 132, 6, 1, 217, 236, + 132, 6, 1, 229, 61, 132, 6, 1, 236, 178, 132, 6, 1, 230, 161, 132, 6, 1, + 245, 221, 132, 58, 1, 42, 144, 227, 93, 132, 254, 79, 132, 246, 201, 78, + 132, 246, 95, 78, 132, 250, 168, 132, 228, 82, 78, 132, 255, 7, 78, 132, + 3, 1, 253, 209, 132, 3, 1, 252, 114, 132, 3, 1, 244, 93, 132, 3, 1, 249, + 207, 132, 3, 1, 246, 254, 132, 3, 1, 217, 114, 132, 3, 1, 246, 239, 132, + 3, 1, 246, 123, 132, 3, 1, 101, 132, 3, 1, 217, 72, 132, 3, 1, 237, 200, + 132, 3, 1, 235, 23, 132, 3, 1, 218, 133, 132, 3, 1, 251, 169, 132, 3, 1, + 236, 168, 132, 3, 1, 243, 4, 132, 3, 1, 237, 123, 132, 3, 1, 244, 124, + 132, 3, 1, 251, 42, 132, 3, 1, 233, 251, 132, 3, 1, 217, 250, 132, 3, 1, + 231, 174, 132, 3, 1, 225, 25, 132, 3, 1, 219, 72, 132, 3, 1, 251, 69, + 132, 3, 1, 229, 187, 132, 3, 1, 237, 100, 132, 3, 1, 203, 132, 3, 1, 226, + 77, 132, 3, 1, 219, 96, 132, 3, 1, 221, 158, 132, 3, 1, 227, 196, 132, 3, + 1, 250, 182, 132, 3, 1, 217, 236, 132, 3, 1, 229, 61, 132, 3, 1, 236, + 178, 132, 3, 1, 230, 161, 132, 3, 1, 245, 221, 132, 3, 24, 246, 255, 217, + 236, 132, 245, 90, 223, 136, 132, 242, 121, 87, 255, 1, 246, 116, 87, + 255, 1, 226, 78, 87, 255, 1, 225, 12, 87, 255, 1, 217, 102, 228, 138, 87, + 255, 1, 217, 102, 244, 246, 87, 255, 1, 221, 168, 87, 255, 1, 227, 158, + 87, 255, 1, 217, 101, 87, 255, 1, 229, 219, 87, 255, 1, 218, 0, 87, 255, + 1, 222, 41, 87, 255, 1, 244, 171, 87, 255, 1, 244, 172, 233, 70, 87, 255, + 1, 244, 169, 87, 255, 1, 228, 139, 229, 242, 87, 255, 1, 222, 70, 244, + 185, 87, 255, 1, 229, 202, 87, 255, 1, 253, 239, 243, 206, 87, 255, 1, + 233, 79, 87, 255, 1, 234, 104, 87, 255, 1, 233, 245, 87, 255, 1, 233, + 246, 236, 179, 87, 255, 1, 249, 153, 87, 255, 1, 228, 150, 87, 255, 1, + 222, 70, 228, 134, 87, 255, 1, 218, 10, 252, 115, 217, 217, 87, 255, 1, + 230, 149, 87, 255, 1, 237, 241, 87, 255, 1, 249, 76, 87, 255, 1, 217, 31, + 87, 164, 234, 54, 250, 221, 87, 229, 32, 224, 224, 87, 229, 32, 243, 172, + 226, 78, 87, 229, 32, 243, 172, 229, 214, 87, 229, 32, 243, 172, 228, + 143, 87, 229, 32, 243, 94, 87, 229, 32, 221, 48, 87, 229, 32, 226, 78, + 87, 229, 32, 229, 214, 87, 229, 32, 228, 143, 87, 229, 32, 242, 254, 87, + 229, 32, 242, 255, 243, 174, 35, 219, 169, 87, 229, 32, 228, 85, 87, 229, + 32, 249, 194, 156, 234, 77, 87, 229, 32, 233, 237, 87, 228, 197, 234, 76, + 87, 229, 32, 227, 248, 87, 228, 197, 229, 220, 87, 229, 32, 224, 210, + 248, 145, 87, 229, 32, 224, 113, 248, 145, 87, 228, 197, 224, 22, 229, + 216, 87, 164, 220, 60, 248, 145, 87, 164, 234, 237, 248, 145, 87, 228, + 197, 231, 104, 243, 205, 87, 229, 32, 228, 144, 228, 138, 87, 1, 254, + 168, 87, 1, 252, 104, 87, 1, 244, 91, 87, 1, 249, 177, 87, 1, 243, 162, + 87, 1, 219, 169, 87, 1, 217, 95, 87, 1, 243, 128, 87, 1, 222, 50, 87, 1, + 217, 220, 87, 1, 39, 236, 246, 87, 1, 236, 246, 87, 1, 235, 152, 87, 1, + 39, 234, 1, 87, 1, 234, 1, 87, 1, 39, 231, 103, 87, 1, 231, 103, 87, 1, + 226, 145, 87, 1, 253, 207, 87, 1, 39, 229, 198, 87, 1, 229, 198, 87, 1, + 39, 221, 51, 87, 1, 221, 51, 87, 1, 228, 107, 87, 1, 227, 174, 87, 1, + 224, 209, 87, 1, 222, 102, 87, 24, 217, 248, 51, 219, 169, 87, 24, 217, + 248, 219, 170, 217, 220, 87, 24, 217, 248, 51, 217, 220, 87, 228, 197, + 244, 171, 87, 228, 197, 244, 169, 12, 54, 55, 12, 5, 226, 139, 12, 245, + 132, 234, 63, 12, 5, 226, 167, 254, 63, 250, 89, 227, 64, 254, 63, 245, + 110, 227, 64, 12, 227, 222, 254, 63, 229, 170, 233, 164, 55, 254, 63, + 229, 170, 222, 66, 221, 232, 55, 254, 214, 55, 12, 250, 168, 12, 249, + 141, 225, 54, 12, 229, 34, 219, 154, 55, 12, 5, 233, 147, 12, 5, 226, + 152, 254, 170, 218, 245, 12, 5, 254, 170, 254, 0, 12, 5, 227, 247, 254, + 169, 12, 5, 227, 251, 254, 155, 254, 116, 12, 5, 222, 128, 12, 3, 116, + 222, 137, 12, 3, 116, 24, 99, 2, 235, 161, 2, 218, 21, 12, 3, 116, 217, + 106, 12, 3, 245, 238, 12, 3, 249, 172, 12, 3, 236, 206, 12, 225, 67, 12, + 221, 78, 61, 228, 197, 78, 12, 228, 82, 78, 12, 1, 243, 192, 12, 1, 99, + 2, 234, 111, 50, 12, 1, 99, 2, 181, 50, 12, 1, 218, 234, 2, 181, 50, 12, + 1, 99, 2, 181, 56, 12, 1, 70, 2, 181, 50, 12, 1, 254, 168, 12, 1, 252, + 128, 12, 1, 222, 78, 234, 72, 12, 1, 222, 77, 12, 1, 222, 19, 12, 1, 237, + 112, 12, 1, 243, 202, 12, 1, 236, 146, 12, 1, 249, 183, 12, 1, 222, 29, + 12, 1, 227, 196, 12, 1, 217, 106, 12, 1, 226, 82, 12, 1, 224, 242, 12, 1, + 226, 170, 12, 1, 249, 202, 12, 1, 222, 137, 12, 1, 217, 109, 12, 1, 254, + 191, 12, 1, 244, 122, 12, 1, 236, 177, 2, 124, 188, 50, 12, 1, 236, 177, + 2, 148, 188, 56, 12, 1, 245, 241, 70, 2, 237, 170, 216, 216, 12, 1, 245, + 241, 70, 2, 124, 188, 50, 12, 1, 245, 241, 70, 2, 148, 188, 50, 12, 222, + 107, 12, 1, 245, 221, 12, 1, 228, 148, 12, 1, 236, 246, 12, 1, 235, 160, + 12, 1, 234, 14, 12, 1, 231, 193, 12, 1, 243, 146, 12, 1, 218, 233, 12, 1, + 99, 234, 92, 12, 1, 218, 21, 12, 245, 236, 12, 249, 170, 12, 236, 204, + 12, 245, 238, 12, 249, 172, 12, 236, 206, 12, 225, 16, 12, 223, 75, 12, + 234, 109, 50, 12, 181, 50, 12, 181, 56, 12, 223, 94, 254, 168, 12, 237, + 170, 249, 172, 12, 164, 231, 194, 244, 107, 12, 216, 255, 12, 29, 5, 3, + 220, 11, 50, 12, 29, 5, 237, 170, 3, 220, 11, 50, 12, 29, 5, 61, 56, 12, + 210, 249, 172, 12, 245, 239, 2, 124, 248, 143, 254, 63, 20, 217, 84, 254, + 63, 20, 107, 254, 63, 20, 103, 254, 63, 20, 160, 254, 63, 20, 154, 254, + 63, 20, 174, 254, 63, 20, 182, 254, 63, 20, 191, 254, 63, 20, 185, 254, + 63, 20, 190, 12, 229, 169, 55, 12, 249, 86, 225, 54, 12, 221, 230, 225, + 54, 12, 245, 170, 229, 30, 223, 156, 12, 1, 248, 144, 252, 128, 12, 1, + 248, 144, 228, 148, 12, 1, 223, 59, 254, 168, 12, 1, 99, 218, 246, 12, 1, + 99, 2, 218, 235, 181, 50, 12, 1, 99, 2, 218, 235, 181, 56, 12, 1, 116, + 243, 192, 12, 1, 116, 181, 254, 168, 12, 1, 116, 181, 218, 233, 12, 1, + 105, 2, 181, 50, 12, 1, 116, 181, 218, 21, 12, 1, 221, 23, 12, 1, 221, + 21, 12, 1, 252, 135, 12, 1, 222, 78, 2, 227, 93, 12, 1, 222, 78, 2, 148, + 188, 71, 247, 129, 12, 1, 229, 187, 12, 1, 222, 75, 12, 1, 252, 126, 12, + 1, 111, 2, 181, 50, 12, 1, 111, 2, 124, 188, 69, 50, 12, 1, 231, 70, 12, + 1, 247, 79, 12, 1, 111, 2, 148, 188, 50, 12, 1, 222, 91, 12, 1, 222, 89, + 12, 1, 249, 127, 12, 1, 249, 184, 2, 227, 93, 12, 1, 249, 184, 2, 61, 56, + 12, 1, 249, 184, 2, 61, 252, 118, 25, 3, 222, 137, 12, 1, 249, 189, 12, + 1, 249, 129, 12, 1, 247, 103, 12, 1, 249, 184, 2, 148, 188, 71, 247, 129, + 12, 1, 249, 184, 2, 245, 116, 188, 50, 12, 1, 227, 48, 12, 1, 227, 197, + 2, 3, 216, 216, 12, 1, 227, 197, 2, 227, 93, 12, 1, 227, 197, 2, 61, 56, + 12, 1, 227, 197, 2, 3, 220, 11, 56, 12, 1, 227, 197, 2, 61, 252, 118, 25, + 61, 50, 12, 1, 227, 197, 2, 124, 188, 50, 12, 1, 237, 109, 12, 1, 227, + 197, 2, 245, 116, 188, 50, 12, 1, 226, 83, 2, 61, 252, 118, 25, 61, 50, + 12, 1, 226, 83, 2, 148, 188, 56, 12, 1, 226, 83, 2, 148, 188, 252, 118, + 25, 148, 188, 50, 12, 1, 226, 171, 2, 124, 188, 56, 12, 1, 226, 171, 2, + 148, 188, 50, 12, 1, 222, 138, 2, 148, 188, 50, 12, 1, 254, 192, 2, 148, + 188, 50, 12, 1, 248, 144, 245, 221, 12, 1, 245, 222, 2, 61, 233, 104, 56, + 12, 1, 245, 222, 2, 61, 56, 12, 1, 219, 158, 12, 1, 245, 222, 2, 148, + 188, 56, 12, 1, 229, 185, 12, 1, 228, 149, 2, 61, 50, 12, 1, 228, 149, 2, + 148, 188, 50, 12, 1, 236, 176, 12, 1, 223, 33, 236, 246, 12, 1, 236, 247, + 2, 227, 93, 12, 1, 236, 247, 2, 61, 50, 12, 1, 232, 117, 12, 1, 236, 247, + 2, 148, 188, 56, 12, 1, 244, 243, 12, 1, 244, 244, 2, 227, 93, 12, 1, + 232, 82, 12, 1, 244, 244, 2, 124, 188, 56, 12, 1, 244, 9, 12, 1, 244, + 244, 2, 148, 188, 50, 12, 1, 235, 161, 2, 3, 216, 216, 12, 1, 235, 161, + 2, 61, 50, 12, 1, 235, 161, 2, 148, 188, 50, 12, 1, 235, 161, 2, 148, + 188, 56, 12, 1, 231, 194, 2, 61, 56, 12, 1, 231, 194, 244, 107, 12, 1, + 227, 78, 12, 1, 231, 194, 2, 227, 93, 12, 1, 231, 194, 2, 148, 188, 50, + 12, 1, 243, 147, 248, 163, 12, 1, 222, 92, 2, 61, 50, 12, 1, 243, 147, 2, + 70, 50, 12, 1, 243, 147, 244, 65, 12, 1, 243, 147, 244, 66, 2, 181, 50, + 12, 1, 222, 78, 234, 73, 244, 65, 12, 1, 218, 234, 2, 227, 93, 12, 1, + 236, 98, 230, 167, 12, 1, 230, 167, 12, 1, 68, 12, 1, 217, 200, 12, 1, + 236, 98, 217, 200, 12, 1, 218, 234, 2, 124, 188, 50, 12, 1, 219, 165, 12, + 1, 245, 241, 218, 21, 12, 1, 70, 2, 222, 135, 12, 1, 70, 2, 3, 216, 216, + 12, 1, 218, 234, 2, 61, 50, 12, 1, 73, 12, 1, 70, 2, 148, 188, 56, 12, 1, + 70, 252, 194, 12, 1, 70, 252, 195, 2, 181, 50, 12, 245, 90, 223, 136, 12, + 1, 254, 234, 12, 3, 116, 24, 226, 171, 2, 235, 161, 2, 99, 234, 92, 12, + 3, 116, 24, 228, 149, 2, 235, 161, 2, 99, 234, 92, 12, 3, 116, 62, 66, + 17, 12, 3, 116, 235, 161, 254, 168, 12, 3, 116, 237, 112, 12, 3, 116, + 148, 248, 143, 12, 3, 116, 226, 82, 12, 246, 190, 117, 253, 211, 12, 223, + 154, 117, 227, 20, 246, 218, 243, 91, 12, 3, 116, 227, 55, 217, 84, 12, + 3, 116, 220, 59, 227, 207, 217, 84, 12, 3, 116, 248, 144, 243, 160, 117, + 236, 146, 12, 3, 116, 62, 47, 17, 12, 3, 109, 226, 82, 12, 3, 116, 234, + 110, 12, 3, 218, 233, 12, 3, 218, 21, 12, 3, 116, 218, 21, 12, 3, 116, + 231, 193, 12, 229, 57, 117, 226, 159, 12, 246, 199, 251, 85, 109, 223, + 136, 12, 246, 199, 251, 85, 116, 223, 136, 12, 227, 55, 116, 223, 137, 2, + 245, 186, 251, 84, 12, 3, 109, 234, 14, 12, 1, 249, 184, 2, 237, 170, + 216, 216, 12, 1, 227, 197, 2, 237, 170, 216, 216, 246, 87, 254, 63, 20, + 217, 84, 246, 87, 254, 63, 20, 107, 246, 87, 254, 63, 20, 103, 246, 87, + 254, 63, 20, 160, 246, 87, 254, 63, 20, 154, 246, 87, 254, 63, 20, 174, + 246, 87, 254, 63, 20, 182, 246, 87, 254, 63, 20, 191, 246, 87, 254, 63, + 20, 185, 246, 87, 254, 63, 20, 190, 12, 1, 224, 243, 2, 61, 56, 12, 1, + 249, 203, 2, 61, 56, 12, 1, 244, 123, 2, 61, 56, 12, 5, 224, 112, 254, + 134, 12, 5, 224, 112, 229, 13, 233, 251, 12, 1, 243, 147, 2, 237, 170, + 216, 216, 166, 246, 190, 117, 229, 240, 166, 223, 55, 245, 90, 223, 136, + 166, 223, 96, 245, 90, 223, 136, 166, 223, 55, 250, 175, 166, 223, 96, + 250, 175, 166, 186, 250, 175, 166, 250, 176, 224, 64, 235, 115, 166, 250, + 176, 224, 64, 227, 109, 166, 223, 55, 250, 176, 224, 64, 235, 115, 166, + 223, 96, 250, 176, 224, 64, 227, 109, 166, 250, 134, 166, 243, 179, 230, + 179, 166, 243, 179, 233, 236, 166, 243, 179, 253, 253, 166, 255, 7, 78, + 166, 1, 254, 171, 166, 1, 223, 59, 254, 171, 166, 1, 252, 101, 166, 1, + 244, 235, 166, 1, 244, 236, 244, 216, 166, 1, 249, 180, 166, 1, 248, 144, + 249, 181, 227, 89, 166, 1, 243, 162, 166, 1, 218, 233, 166, 1, 217, 106, + 166, 1, 243, 126, 166, 1, 222, 46, 166, 1, 222, 47, 244, 216, 166, 1, + 217, 188, 166, 1, 217, 189, 243, 162, 166, 1, 236, 224, 166, 1, 235, 159, + 166, 1, 233, 161, 166, 1, 231, 103, 166, 1, 225, 60, 166, 1, 39, 225, 60, + 166, 1, 73, 166, 1, 229, 198, 166, 1, 210, 229, 198, 166, 1, 226, 168, + 166, 1, 228, 142, 166, 1, 227, 89, 166, 1, 224, 209, 166, 1, 222, 100, + 166, 1, 229, 159, 252, 90, 166, 1, 229, 159, 244, 120, 166, 1, 229, 159, + 249, 32, 166, 228, 203, 50, 166, 228, 203, 56, 166, 228, 203, 247, 142, + 166, 217, 15, 50, 166, 217, 15, 56, 166, 217, 15, 247, 142, 166, 227, + 219, 50, 166, 227, 219, 56, 166, 247, 143, 217, 22, 242, 241, 166, 247, + 143, 217, 22, 254, 117, 166, 243, 165, 50, 166, 243, 165, 56, 166, 243, + 164, 247, 142, 166, 246, 136, 50, 166, 246, 136, 56, 166, 226, 250, 166, + 245, 215, 248, 145, 166, 228, 63, 166, 227, 17, 166, 124, 69, 188, 50, + 166, 124, 69, 188, 56, 166, 148, 188, 50, 166, 148, 188, 56, 166, 230, + 177, 235, 44, 50, 166, 230, 177, 235, 44, 56, 166, 233, 58, 166, 252, + 193, 166, 1, 224, 19, 217, 78, 166, 1, 224, 19, 236, 139, 166, 1, 224, + 19, 245, 231, 12, 1, 252, 129, 2, 148, 188, 242, 191, 56, 12, 1, 252, + 129, 2, 61, 252, 118, 25, 148, 188, 50, 12, 1, 252, 129, 2, 148, 188, + 229, 28, 220, 53, 56, 12, 1, 252, 129, 2, 148, 188, 229, 28, 220, 53, + 252, 118, 25, 124, 188, 50, 12, 1, 252, 129, 2, 124, 188, 252, 118, 25, + 61, 50, 12, 1, 252, 129, 2, 237, 170, 3, 220, 11, 56, 12, 1, 252, 129, 2, + 3, 216, 216, 12, 1, 111, 2, 124, 188, 50, 12, 1, 111, 2, 148, 188, 229, + 28, 220, 53, 56, 12, 1, 249, 184, 2, 124, 188, 219, 102, 252, 118, 25, 3, + 222, 137, 12, 1, 249, 184, 2, 237, 170, 3, 220, 11, 56, 12, 1, 227, 197, + 2, 92, 12, 1, 226, 83, 2, 245, 116, 188, 50, 12, 1, 254, 192, 2, 124, + 188, 50, 12, 1, 254, 192, 2, 148, 188, 229, 28, 247, 130, 50, 12, 1, 254, + 192, 2, 124, 188, 219, 102, 50, 12, 1, 245, 222, 2, 124, 188, 56, 12, 1, + 245, 222, 2, 148, 188, 229, 28, 220, 53, 56, 12, 1, 236, 177, 2, 61, 50, + 12, 1, 236, 177, 2, 148, 188, 50, 12, 1, 236, 177, 2, 148, 188, 229, 28, + 220, 53, 56, 12, 1, 62, 2, 61, 50, 12, 1, 62, 2, 61, 56, 12, 1, 231, 194, + 2, 124, 188, 56, 12, 1, 231, 194, 2, 3, 222, 137, 12, 1, 231, 194, 2, 3, + 216, 216, 12, 1, 235, 161, 2, 135, 12, 1, 227, 197, 2, 124, 188, 219, + 102, 50, 12, 1, 227, 197, 2, 181, 50, 12, 1, 226, 83, 2, 124, 188, 219, + 102, 50, 12, 1, 111, 2, 3, 12, 1, 222, 138, 56, 12, 1, 111, 2, 3, 12, 1, + 222, 138, 25, 124, 248, 143, 12, 1, 226, 83, 2, 3, 12, 1, 222, 138, 25, + 124, 248, 143, 12, 1, 227, 197, 2, 3, 12, 1, 222, 138, 25, 124, 248, 143, + 12, 1, 111, 2, 3, 12, 1, 222, 138, 50, 12, 1, 99, 2, 246, 87, 254, 63, + 20, 124, 50, 12, 1, 99, 2, 246, 87, 254, 63, 20, 148, 50, 12, 1, 245, + 241, 70, 2, 246, 87, 254, 63, 20, 124, 50, 12, 1, 245, 241, 70, 2, 246, + 87, 254, 63, 20, 148, 50, 12, 1, 245, 241, 70, 2, 246, 87, 254, 63, 20, + 245, 116, 56, 12, 1, 218, 234, 2, 246, 87, 254, 63, 20, 124, 50, 12, 1, + 218, 234, 2, 246, 87, 254, 63, 20, 148, 50, 12, 1, 70, 252, 195, 2, 246, + 87, 254, 63, 20, 124, 50, 12, 1, 70, 252, 195, 2, 246, 87, 254, 63, 20, + 148, 50, 12, 1, 111, 2, 246, 87, 254, 63, 20, 245, 116, 56, 12, 1, 226, + 83, 2, 246, 87, 254, 63, 20, 245, 116, 50, 12, 1, 226, 83, 2, 237, 170, + 216, 216, 12, 1, 236, 247, 2, 124, 188, 50, 222, 32, 1, 243, 211, 222, + 32, 1, 224, 251, 222, 32, 1, 231, 192, 222, 32, 1, 228, 0, 222, 32, 1, + 252, 236, 222, 32, 1, 235, 76, 222, 32, 1, 237, 3, 222, 32, 1, 254, 160, + 222, 32, 1, 219, 187, 222, 32, 1, 234, 13, 222, 32, 1, 246, 6, 222, 32, + 1, 249, 35, 222, 32, 1, 222, 34, 222, 32, 1, 235, 185, 222, 32, 1, 244, + 252, 222, 32, 1, 244, 71, 222, 32, 1, 226, 81, 222, 32, 1, 249, 139, 222, + 32, 1, 217, 98, 222, 32, 1, 222, 101, 222, 32, 1, 218, 76, 222, 32, 1, + 229, 209, 222, 32, 1, 237, 116, 222, 32, 1, 251, 49, 222, 32, 1, 221, 28, + 222, 32, 1, 243, 120, 222, 32, 1, 236, 148, 222, 32, 1, 222, 33, 222, 32, + 1, 217, 113, 222, 32, 1, 224, 241, 222, 32, 1, 226, 174, 222, 32, 1, 249, + 205, 222, 32, 1, 101, 222, 32, 1, 217, 21, 222, 32, 1, 254, 189, 222, 32, + 1, 244, 121, 222, 32, 1, 228, 152, 222, 32, 1, 219, 5, 222, 32, 255, 8, + 222, 32, 255, 23, 222, 32, 242, 68, 222, 32, 246, 249, 222, 32, 220, 118, + 222, 32, 230, 126, 222, 32, 247, 1, 222, 32, 246, 82, 222, 32, 230, 176, + 222, 32, 230, 184, 222, 32, 223, 75, 222, 32, 1, 232, 235, 231, 242, 20, + 217, 84, 231, 242, 20, 107, 231, 242, 20, 103, 231, 242, 20, 160, 231, + 242, 20, 154, 231, 242, 20, 174, 231, 242, 20, 182, 231, 242, 20, 191, + 231, 242, 20, 185, 231, 242, 20, 190, 231, 242, 1, 60, 231, 242, 1, 246, + 250, 231, 242, 1, 72, 231, 242, 1, 73, 231, 242, 1, 68, 231, 242, 1, 230, + 127, 231, 242, 1, 74, 231, 242, 1, 249, 195, 231, 242, 1, 207, 231, 242, + 1, 252, 237, 231, 242, 1, 187, 231, 242, 1, 222, 155, 231, 242, 1, 237, + 123, 231, 242, 1, 251, 69, 231, 242, 1, 249, 207, 231, 242, 1, 203, 231, + 242, 1, 227, 52, 231, 242, 1, 226, 177, 231, 242, 1, 244, 204, 231, 242, + 1, 246, 8, 231, 242, 1, 175, 231, 242, 1, 235, 188, 231, 242, 1, 232, + 238, 218, 184, 231, 242, 1, 196, 231, 242, 1, 231, 77, 231, 242, 1, 208, + 231, 242, 1, 155, 231, 242, 1, 219, 7, 231, 242, 1, 184, 231, 242, 1, + 231, 78, 218, 184, 231, 242, 1, 237, 52, 237, 123, 231, 242, 1, 237, 52, + 251, 69, 231, 242, 1, 237, 52, 203, 231, 242, 36, 224, 192, 116, 221, + 132, 231, 242, 36, 224, 192, 109, 221, 132, 231, 242, 36, 224, 192, 227, + 88, 221, 132, 231, 242, 36, 171, 249, 47, 221, 132, 231, 242, 36, 171, + 116, 221, 132, 231, 242, 36, 171, 109, 221, 132, 231, 242, 36, 171, 227, + 88, 221, 132, 231, 242, 36, 232, 209, 78, 231, 242, 36, 51, 61, 50, 231, + 242, 116, 145, 254, 79, 231, 242, 109, 145, 254, 79, 231, 242, 16, 230, + 128, 249, 58, 231, 242, 16, 244, 203, 231, 242, 250, 168, 231, 242, 246, + 95, 78, 231, 242, 235, 166, 213, 1, 254, 173, 213, 1, 252, 60, 213, 1, + 244, 234, 213, 1, 249, 182, 213, 1, 237, 133, 213, 1, 252, 236, 213, 1, + 217, 87, 213, 1, 237, 140, 213, 1, 221, 161, 213, 1, 217, 177, 213, 1, + 237, 4, 213, 1, 235, 183, 213, 1, 233, 161, 213, 1, 231, 103, 213, 1, + 224, 110, 213, 1, 237, 223, 213, 1, 245, 203, 213, 1, 221, 53, 213, 1, + 228, 79, 213, 1, 227, 89, 213, 1, 225, 9, 213, 1, 222, 151, 213, 164, + 237, 223, 213, 164, 237, 222, 213, 164, 230, 172, 213, 164, 249, 193, + 213, 58, 1, 246, 160, 217, 177, 213, 164, 246, 160, 217, 177, 213, 29, 5, + 171, 73, 213, 29, 5, 73, 213, 29, 5, 230, 72, 255, 58, 213, 29, 5, 171, + 255, 58, 213, 29, 5, 255, 58, 213, 29, 5, 230, 72, 60, 213, 29, 5, 171, + 60, 213, 29, 5, 60, 213, 58, 1, 224, 192, 60, 213, 29, 5, 224, 192, 60, + 213, 29, 5, 171, 68, 213, 29, 5, 68, 213, 58, 1, 72, 213, 29, 5, 171, 72, + 213, 29, 5, 72, 213, 29, 5, 74, 213, 29, 5, 223, 75, 213, 164, 232, 128, + 213, 228, 197, 232, 128, 213, 228, 197, 254, 211, 213, 228, 197, 254, + 122, 213, 228, 197, 252, 181, 213, 228, 197, 253, 240, 213, 228, 197, + 224, 201, 213, 255, 7, 78, 213, 228, 197, 234, 4, 228, 113, 213, 228, + 197, 217, 29, 213, 228, 197, 228, 113, 213, 228, 197, 217, 112, 213, 228, + 197, 220, 233, 213, 228, 197, 254, 36, 213, 228, 197, 224, 22, 234, 55, + 213, 228, 197, 254, 113, 80, 5, 237, 170, 251, 146, 80, 5, 251, 146, 80, + 5, 254, 95, 80, 5, 219, 77, 80, 1, 224, 192, 60, 80, 1, 60, 80, 1, 255, + 58, 80, 1, 72, 80, 1, 237, 255, 80, 1, 68, 80, 1, 220, 23, 80, 1, 167, + 152, 80, 1, 167, 153, 80, 1, 251, 149, 73, 80, 1, 224, 192, 73, 80, 1, + 73, 80, 1, 254, 196, 80, 1, 251, 149, 74, 80, 1, 224, 192, 74, 80, 1, 74, + 80, 1, 253, 232, 80, 1, 175, 80, 1, 236, 149, 80, 1, 245, 0, 80, 1, 244, + 125, 80, 1, 232, 115, 80, 1, 251, 169, 80, 1, 251, 69, 80, 1, 237, 123, + 80, 1, 237, 103, 80, 1, 231, 77, 80, 1, 221, 29, 80, 1, 221, 19, 80, 1, + 249, 132, 80, 1, 249, 116, 80, 1, 231, 217, 80, 1, 222, 155, 80, 1, 222, + 35, 80, 1, 249, 207, 80, 1, 249, 36, 80, 1, 208, 80, 1, 231, 208, 80, 1, + 187, 80, 1, 229, 141, 80, 1, 252, 237, 80, 1, 252, 94, 80, 1, 196, 80, 1, + 184, 80, 1, 203, 80, 1, 227, 52, 80, 1, 235, 188, 80, 1, 235, 17, 80, 1, + 235, 16, 80, 1, 219, 189, 80, 1, 225, 25, 80, 1, 223, 218, 80, 1, 226, + 177, 80, 1, 155, 80, 5, 231, 112, 80, 5, 253, 219, 80, 29, 5, 255, 58, + 80, 29, 5, 72, 80, 29, 5, 237, 255, 80, 29, 5, 68, 80, 29, 5, 220, 23, + 80, 29, 5, 167, 152, 80, 29, 5, 167, 227, 53, 80, 29, 5, 251, 149, 73, + 80, 29, 5, 224, 192, 73, 80, 29, 5, 73, 80, 29, 5, 254, 196, 80, 29, 5, + 251, 149, 74, 80, 29, 5, 224, 192, 74, 80, 29, 5, 74, 80, 29, 5, 253, + 232, 80, 5, 219, 82, 80, 29, 5, 228, 232, 73, 80, 230, 146, 80, 223, 125, + 5, 220, 112, 80, 223, 125, 5, 254, 97, 80, 244, 37, 255, 0, 80, 254, 248, + 255, 0, 80, 29, 5, 251, 149, 171, 73, 80, 1, 228, 155, 80, 1, 236, 133, + 80, 1, 244, 114, 80, 1, 217, 114, 80, 1, 249, 121, 80, 1, 227, 151, 80, + 1, 246, 8, 80, 1, 217, 165, 80, 1, 167, 227, 53, 80, 1, 167, 235, 18, 80, + 29, 5, 167, 153, 80, 29, 5, 167, 235, 18, 80, 249, 167, 80, 51, 249, 167, + 80, 20, 217, 84, 80, 20, 107, 80, 20, 103, 80, 20, 160, 80, 20, 154, 80, + 20, 174, 80, 20, 182, 80, 20, 191, 80, 20, 185, 80, 20, 190, 80, 255, 7, + 55, 80, 5, 116, 223, 253, 248, 145, 80, 1, 251, 149, 60, 80, 1, 217, 80, + 80, 1, 106, 184, 80, 1, 244, 160, 80, 1, 237, 87, 80, 1, 244, 73, 223, + 136, 80, 1, 249, 122, 80, 1, 252, 178, 130, 5, 251, 146, 130, 5, 254, 95, + 130, 5, 219, 77, 130, 1, 60, 130, 1, 255, 58, 130, 1, 72, 130, 1, 237, + 255, 130, 1, 68, 130, 1, 220, 23, 130, 1, 167, 152, 130, 1, 167, 153, + 130, 1, 73, 130, 1, 254, 196, 130, 1, 74, 130, 1, 253, 232, 130, 1, 175, + 130, 1, 236, 149, 130, 1, 245, 0, 130, 1, 244, 125, 130, 1, 232, 115, + 130, 1, 251, 169, 130, 1, 251, 69, 130, 1, 237, 123, 130, 1, 237, 103, + 130, 1, 231, 77, 130, 1, 221, 29, 130, 1, 221, 19, 130, 1, 249, 132, 130, + 1, 249, 116, 130, 1, 231, 217, 130, 1, 222, 155, 130, 1, 222, 35, 130, 1, + 249, 207, 130, 1, 249, 36, 130, 1, 208, 130, 1, 187, 130, 1, 229, 141, + 130, 1, 252, 237, 130, 1, 252, 94, 130, 1, 196, 130, 1, 184, 130, 1, 203, + 130, 1, 235, 188, 130, 1, 225, 25, 130, 1, 223, 218, 130, 1, 226, 177, + 130, 1, 155, 130, 5, 231, 112, 130, 5, 253, 219, 130, 29, 5, 255, 58, + 130, 29, 5, 72, 130, 29, 5, 237, 255, 130, 29, 5, 68, 130, 29, 5, 220, + 23, 130, 29, 5, 167, 152, 130, 29, 5, 167, 227, 53, 130, 29, 5, 73, 130, + 29, 5, 254, 196, 130, 29, 5, 74, 130, 29, 5, 253, 232, 130, 5, 219, 82, + 130, 1, 236, 141, 222, 155, 130, 253, 233, 235, 94, 78, 130, 1, 227, 52, + 130, 1, 227, 151, 130, 1, 217, 165, 130, 1, 167, 227, 53, 130, 1, 167, + 235, 18, 130, 29, 5, 167, 153, 130, 29, 5, 167, 235, 18, 130, 20, 217, + 84, 130, 20, 107, 130, 20, 103, 130, 20, 160, 130, 20, 154, 130, 20, 174, + 130, 20, 182, 130, 20, 191, 130, 20, 185, 130, 20, 190, 130, 1, 228, 3, + 2, 233, 193, 249, 10, 130, 1, 228, 3, 2, 234, 237, 249, 10, 130, 227, 4, + 78, 130, 227, 4, 55, 130, 250, 78, 231, 106, 107, 130, 250, 78, 231, 106, + 103, 130, 250, 78, 231, 106, 160, 130, 250, 78, 231, 106, 154, 130, 250, + 78, 231, 106, 131, 235, 88, 222, 28, 222, 23, 249, 56, 130, 250, 78, 249, + 57, 224, 77, 130, 237, 141, 130, 244, 227, 78, 163, 5, 254, 243, 252, 72, + 163, 5, 252, 72, 163, 5, 219, 77, 163, 1, 60, 163, 1, 255, 58, 163, 1, + 72, 163, 1, 237, 255, 163, 1, 68, 163, 1, 220, 23, 163, 1, 246, 250, 163, + 1, 254, 196, 163, 1, 230, 127, 163, 1, 253, 232, 163, 1, 175, 163, 1, + 236, 149, 163, 1, 245, 0, 163, 1, 244, 125, 163, 1, 232, 115, 163, 1, + 251, 169, 163, 1, 251, 69, 163, 1, 237, 123, 163, 1, 237, 103, 163, 1, + 231, 77, 163, 1, 221, 29, 163, 1, 221, 19, 163, 1, 249, 132, 163, 1, 249, + 116, 163, 1, 231, 217, 163, 1, 222, 155, 163, 1, 222, 35, 163, 1, 249, + 207, 163, 1, 249, 36, 163, 1, 208, 163, 1, 187, 163, 1, 229, 141, 163, 1, + 252, 237, 163, 1, 252, 94, 163, 1, 196, 163, 1, 184, 163, 1, 203, 163, 1, + 235, 188, 163, 1, 235, 17, 163, 1, 219, 189, 163, 1, 225, 25, 163, 1, + 226, 177, 163, 1, 155, 163, 5, 231, 112, 163, 29, 5, 255, 58, 163, 29, 5, + 72, 163, 29, 5, 237, 255, 163, 29, 5, 68, 163, 29, 5, 220, 23, 163, 29, + 5, 246, 250, 163, 29, 5, 254, 196, 163, 29, 5, 230, 127, 163, 29, 5, 253, + 232, 163, 5, 219, 82, 163, 5, 220, 114, 163, 1, 236, 133, 163, 1, 244, + 114, 163, 1, 217, 114, 163, 1, 227, 52, 163, 1, 246, 8, 163, 20, 217, 84, + 163, 20, 107, 163, 20, 103, 163, 20, 160, 163, 20, 154, 163, 20, 174, + 163, 20, 182, 163, 20, 191, 163, 20, 185, 163, 20, 190, 163, 221, 167, + 163, 254, 242, 163, 237, 155, 163, 220, 46, 163, 246, 224, 230, 132, 163, + 5, 218, 54, 150, 5, 251, 146, 150, 5, 254, 95, 150, 5, 219, 77, 150, 1, + 60, 150, 1, 255, 58, 150, 1, 72, 150, 1, 237, 255, 150, 1, 68, 150, 1, + 220, 23, 150, 1, 167, 152, 150, 1, 167, 153, 150, 29, 251, 149, 73, 150, + 1, 73, 150, 1, 254, 196, 150, 29, 251, 149, 74, 150, 1, 74, 150, 1, 253, + 232, 150, 1, 175, 150, 1, 236, 149, 150, 1, 245, 0, 150, 1, 244, 125, + 150, 1, 232, 115, 150, 1, 251, 169, 150, 1, 251, 69, 150, 1, 237, 123, + 150, 1, 237, 103, 150, 1, 231, 77, 150, 1, 221, 29, 150, 1, 221, 19, 150, + 1, 249, 132, 150, 1, 249, 116, 150, 1, 231, 217, 150, 1, 222, 155, 150, + 1, 222, 35, 150, 1, 249, 207, 150, 1, 249, 36, 150, 1, 208, 150, 1, 187, + 150, 1, 229, 141, 150, 1, 252, 237, 150, 1, 252, 94, 150, 1, 196, 150, 1, + 184, 150, 1, 203, 150, 1, 235, 188, 150, 1, 235, 17, 150, 1, 219, 189, + 150, 1, 225, 25, 150, 1, 223, 218, 150, 1, 226, 177, 150, 1, 155, 150, 5, + 231, 112, 150, 5, 253, 219, 150, 29, 5, 255, 58, 150, 29, 5, 72, 150, 29, + 5, 237, 255, 150, 29, 5, 68, 150, 29, 5, 220, 23, 150, 29, 5, 167, 152, + 150, 29, 5, 167, 227, 53, 150, 29, 5, 251, 149, 73, 150, 29, 5, 73, 150, + 29, 5, 254, 196, 150, 29, 5, 251, 149, 74, 150, 29, 5, 74, 150, 29, 5, + 253, 232, 150, 5, 219, 82, 150, 230, 146, 150, 1, 167, 227, 53, 150, 1, + 167, 235, 18, 150, 29, 5, 167, 153, 150, 29, 5, 167, 235, 18, 150, 20, + 217, 84, 150, 20, 107, 150, 20, 103, 150, 20, 160, 150, 20, 154, 150, 20, + 174, 150, 20, 182, 150, 20, 191, 150, 20, 185, 150, 20, 190, 150, 227, 4, + 55, 147, 5, 251, 146, 147, 5, 254, 95, 147, 5, 219, 77, 147, 1, 60, 147, + 1, 255, 58, 147, 1, 72, 147, 1, 237, 255, 147, 1, 68, 147, 1, 220, 23, + 147, 1, 167, 152, 147, 1, 167, 153, 147, 1, 73, 147, 1, 254, 196, 147, 1, + 74, 147, 1, 253, 232, 147, 1, 175, 147, 1, 236, 149, 147, 1, 245, 0, 147, + 1, 244, 125, 147, 1, 232, 115, 147, 1, 251, 169, 147, 1, 251, 69, 147, 1, + 237, 123, 147, 1, 237, 103, 147, 1, 231, 77, 147, 1, 221, 29, 147, 1, + 221, 19, 147, 1, 249, 132, 147, 1, 249, 116, 147, 1, 231, 217, 147, 1, + 222, 155, 147, 1, 222, 35, 147, 1, 249, 207, 147, 1, 249, 36, 147, 1, + 208, 147, 1, 187, 147, 1, 229, 141, 147, 1, 252, 237, 147, 1, 252, 94, + 147, 1, 196, 147, 1, 184, 147, 1, 203, 147, 1, 235, 188, 147, 1, 235, 17, + 147, 1, 219, 189, 147, 1, 225, 25, 147, 1, 223, 218, 147, 1, 226, 177, + 147, 1, 155, 147, 5, 231, 112, 147, 5, 253, 219, 147, 29, 5, 255, 58, + 147, 29, 5, 72, 147, 29, 5, 237, 255, 147, 29, 5, 68, 147, 29, 5, 220, + 23, 147, 29, 5, 167, 152, 147, 29, 5, 167, 227, 53, 147, 29, 5, 73, 147, + 29, 5, 254, 196, 147, 29, 5, 74, 147, 29, 5, 253, 232, 147, 5, 219, 82, + 147, 254, 197, 235, 94, 78, 147, 253, 233, 235, 94, 78, 147, 1, 227, 52, + 147, 1, 227, 151, 147, 1, 217, 165, 147, 1, 167, 227, 53, 147, 1, 167, + 235, 18, 147, 29, 5, 167, 153, 147, 29, 5, 167, 235, 18, 147, 20, 217, + 84, 147, 20, 107, 147, 20, 103, 147, 20, 160, 147, 20, 154, 147, 20, 174, + 147, 20, 182, 147, 20, 191, 147, 20, 185, 147, 20, 190, 147, 237, 141, + 147, 1, 219, 7, 176, 5, 254, 95, 176, 5, 219, 77, 176, 1, 60, 176, 1, + 255, 58, 176, 1, 72, 176, 1, 237, 255, 176, 1, 68, 176, 1, 220, 23, 176, + 1, 73, 176, 1, 246, 250, 176, 1, 254, 196, 176, 1, 74, 176, 1, 230, 127, + 176, 1, 253, 232, 176, 1, 175, 176, 1, 232, 115, 176, 1, 251, 169, 176, + 1, 237, 123, 176, 1, 231, 77, 176, 1, 221, 29, 176, 1, 231, 217, 176, 1, + 222, 155, 176, 1, 208, 176, 1, 231, 208, 176, 1, 187, 176, 1, 196, 176, + 1, 184, 176, 1, 203, 176, 1, 227, 52, 176, 1, 235, 188, 176, 1, 235, 17, + 176, 1, 235, 16, 176, 1, 219, 189, 176, 1, 225, 25, 176, 1, 223, 218, + 176, 1, 226, 177, 176, 1, 155, 176, 29, 5, 255, 58, 176, 29, 5, 72, 176, + 29, 5, 237, 255, 176, 29, 5, 68, 176, 29, 5, 220, 23, 176, 29, 5, 73, + 176, 29, 5, 246, 250, 176, 29, 5, 254, 196, 176, 29, 5, 74, 176, 29, 5, + 230, 127, 176, 29, 5, 253, 232, 176, 5, 219, 82, 176, 230, 146, 176, 253, + 233, 235, 94, 78, 176, 20, 217, 84, 176, 20, 107, 176, 20, 103, 176, 20, + 160, 176, 20, 154, 176, 20, 174, 176, 20, 182, 176, 20, 191, 176, 20, + 185, 176, 20, 190, 176, 54, 222, 65, 176, 54, 131, 242, 161, 176, 54, + 131, 221, 231, 176, 249, 137, 55, 176, 233, 121, 55, 176, 218, 23, 55, + 176, 249, 89, 55, 176, 250, 107, 55, 176, 254, 14, 71, 55, 176, 227, 4, + 55, 176, 54, 55, 129, 5, 251, 146, 129, 5, 254, 95, 129, 5, 219, 77, 129, + 1, 60, 129, 1, 255, 58, 129, 1, 72, 129, 1, 237, 255, 129, 1, 68, 129, 1, + 220, 23, 129, 1, 167, 152, 129, 1, 167, 153, 129, 1, 73, 129, 1, 246, + 250, 129, 1, 254, 196, 129, 1, 74, 129, 1, 230, 127, 129, 1, 253, 232, + 129, 1, 175, 129, 1, 236, 149, 129, 1, 245, 0, 129, 1, 244, 125, 129, 1, + 232, 115, 129, 1, 251, 169, 129, 1, 251, 69, 129, 1, 237, 123, 129, 1, + 237, 103, 129, 1, 231, 77, 129, 1, 221, 29, 129, 1, 221, 19, 129, 1, 249, + 132, 129, 1, 249, 116, 129, 1, 231, 217, 129, 1, 222, 155, 129, 1, 222, + 35, 129, 1, 249, 207, 129, 1, 249, 36, 129, 1, 208, 129, 1, 187, 129, 1, + 229, 141, 129, 1, 252, 237, 129, 1, 252, 94, 129, 1, 196, 129, 1, 184, + 129, 1, 203, 129, 1, 227, 52, 129, 1, 235, 188, 129, 1, 235, 17, 129, 1, + 219, 189, 129, 1, 225, 25, 129, 1, 223, 218, 129, 1, 226, 177, 129, 1, + 155, 129, 5, 253, 219, 129, 29, 5, 255, 58, 129, 29, 5, 72, 129, 29, 5, + 237, 255, 129, 29, 5, 68, 129, 29, 5, 220, 23, 129, 29, 5, 167, 152, 129, + 29, 5, 167, 227, 53, 129, 29, 5, 73, 129, 29, 5, 246, 250, 129, 29, 5, + 254, 196, 129, 29, 5, 74, 129, 29, 5, 230, 127, 129, 29, 5, 253, 232, + 129, 5, 219, 82, 129, 235, 94, 78, 129, 254, 197, 235, 94, 78, 129, 1, + 221, 55, 129, 1, 247, 74, 129, 1, 167, 227, 53, 129, 1, 167, 235, 18, + 129, 29, 5, 167, 153, 129, 29, 5, 167, 235, 18, 129, 20, 217, 84, 129, + 20, 107, 129, 20, 103, 129, 20, 160, 129, 20, 154, 129, 20, 174, 129, 20, + 182, 129, 20, 191, 129, 20, 185, 129, 20, 190, 129, 245, 108, 20, 217, + 85, 35, 230, 169, 229, 9, 117, 154, 129, 245, 108, 20, 131, 35, 230, 169, + 229, 9, 117, 154, 129, 245, 108, 20, 124, 35, 230, 169, 229, 9, 117, 154, + 129, 245, 108, 20, 148, 35, 230, 169, 229, 9, 117, 154, 129, 245, 108, + 20, 131, 35, 246, 104, 229, 9, 117, 154, 129, 245, 108, 20, 124, 35, 246, + 104, 229, 9, 117, 154, 129, 245, 108, 20, 148, 35, 246, 104, 229, 9, 117, + 154, 129, 5, 220, 229, 141, 5, 254, 95, 141, 5, 219, 77, 141, 1, 60, 141, + 1, 255, 58, 141, 1, 72, 141, 1, 237, 255, 141, 1, 68, 141, 1, 220, 23, + 141, 1, 167, 152, 141, 1, 167, 153, 141, 1, 73, 141, 1, 246, 250, 141, 1, + 254, 196, 141, 1, 74, 141, 1, 230, 127, 141, 1, 253, 232, 141, 1, 175, + 141, 1, 236, 149, 141, 1, 245, 0, 141, 1, 244, 125, 141, 1, 232, 115, + 141, 1, 251, 169, 141, 1, 251, 69, 141, 1, 237, 123, 141, 1, 237, 103, + 141, 1, 231, 77, 141, 1, 221, 29, 141, 1, 221, 19, 141, 1, 249, 132, 141, + 1, 249, 116, 141, 1, 231, 217, 141, 1, 222, 155, 141, 1, 222, 35, 141, 1, + 249, 207, 141, 1, 249, 36, 141, 1, 208, 141, 1, 187, 141, 1, 229, 141, + 141, 1, 252, 237, 141, 1, 252, 94, 141, 1, 196, 141, 1, 184, 141, 1, 203, + 141, 1, 227, 52, 141, 1, 235, 188, 141, 1, 235, 17, 141, 1, 219, 189, + 141, 1, 225, 25, 141, 1, 223, 218, 141, 1, 226, 177, 141, 1, 155, 141, 5, + 231, 112, 141, 5, 253, 219, 141, 29, 5, 255, 58, 141, 29, 5, 72, 141, 29, + 5, 237, 255, 141, 29, 5, 68, 141, 29, 5, 220, 23, 141, 29, 5, 167, 152, + 141, 29, 5, 167, 227, 53, 141, 29, 5, 73, 141, 29, 5, 246, 250, 141, 29, + 5, 254, 196, 141, 29, 5, 74, 141, 29, 5, 230, 127, 141, 29, 5, 253, 232, + 141, 5, 219, 82, 141, 235, 94, 78, 141, 254, 197, 235, 94, 78, 141, 1, + 246, 8, 141, 1, 167, 227, 53, 141, 1, 167, 235, 18, 141, 29, 5, 167, 153, + 141, 29, 5, 167, 235, 18, 141, 20, 217, 84, 141, 20, 107, 141, 20, 103, + 141, 20, 160, 141, 20, 154, 141, 20, 174, 141, 20, 182, 141, 20, 191, + 141, 20, 185, 141, 20, 190, 141, 5, 237, 92, 141, 5, 220, 61, 123, 5, + 254, 95, 123, 5, 219, 77, 123, 1, 60, 123, 1, 255, 58, 123, 1, 72, 123, + 1, 237, 255, 123, 1, 68, 123, 1, 220, 23, 123, 1, 167, 152, 123, 1, 167, + 153, 123, 1, 73, 123, 1, 246, 250, 123, 1, 254, 196, 123, 1, 74, 123, 1, + 230, 127, 123, 1, 253, 232, 123, 1, 175, 123, 1, 236, 149, 123, 1, 245, + 0, 123, 1, 244, 125, 123, 1, 232, 115, 123, 1, 251, 169, 123, 1, 251, 69, + 123, 1, 237, 123, 123, 1, 237, 103, 123, 1, 231, 77, 123, 1, 221, 29, + 123, 1, 221, 19, 123, 1, 249, 132, 123, 1, 249, 116, 123, 1, 231, 217, + 123, 1, 222, 155, 123, 1, 222, 35, 123, 1, 249, 207, 123, 1, 249, 36, + 123, 1, 208, 123, 1, 187, 123, 1, 229, 141, 123, 1, 252, 237, 123, 1, + 252, 94, 123, 1, 196, 123, 1, 184, 123, 1, 203, 123, 1, 227, 52, 123, 1, + 235, 188, 123, 1, 235, 17, 123, 1, 235, 16, 123, 1, 219, 189, 123, 1, + 225, 25, 123, 1, 223, 218, 123, 1, 226, 177, 123, 1, 155, 123, 5, 253, + 219, 123, 29, 5, 255, 58, 123, 29, 5, 72, 123, 29, 5, 237, 255, 123, 29, + 5, 68, 123, 29, 5, 220, 23, 123, 29, 5, 167, 152, 123, 29, 5, 167, 227, + 53, 123, 29, 5, 73, 123, 29, 5, 246, 250, 123, 29, 5, 254, 196, 123, 29, + 5, 74, 123, 29, 5, 230, 127, 123, 29, 5, 253, 232, 123, 5, 219, 82, 123, + 253, 233, 235, 94, 78, 123, 1, 167, 227, 53, 123, 1, 167, 235, 18, 123, + 29, 5, 167, 153, 123, 29, 5, 167, 235, 18, 123, 20, 217, 84, 123, 20, + 107, 123, 20, 103, 123, 20, 160, 123, 20, 154, 123, 20, 174, 123, 20, + 182, 123, 20, 191, 123, 20, 185, 123, 20, 190, 123, 54, 222, 65, 123, 54, + 131, 242, 161, 123, 54, 131, 221, 231, 123, 245, 108, 131, 228, 89, 123, + 245, 108, 131, 243, 194, 123, 245, 108, 148, 228, 87, 123, 249, 141, 78, + 123, 1, 251, 23, 231, 218, 123, 1, 251, 23, 207, 123, 1, 251, 23, 227, + 53, 123, 1, 251, 23, 153, 123, 1, 251, 23, 235, 18, 123, 1, 251, 23, 237, + 17, 162, 5, 254, 94, 162, 5, 219, 76, 162, 1, 253, 210, 162, 1, 255, 13, + 162, 1, 254, 215, 162, 1, 254, 229, 162, 1, 237, 132, 162, 1, 237, 254, + 162, 1, 220, 15, 162, 1, 220, 17, 162, 1, 237, 153, 162, 1, 237, 154, + 162, 1, 237, 240, 162, 1, 237, 242, 162, 1, 246, 83, 162, 1, 246, 246, + 162, 1, 254, 184, 162, 1, 230, 62, 162, 1, 230, 122, 162, 1, 253, 222, + 162, 1, 254, 149, 236, 189, 162, 1, 234, 105, 236, 189, 162, 1, 254, 149, + 244, 207, 162, 1, 234, 105, 244, 207, 162, 1, 236, 228, 232, 232, 162, 1, + 226, 135, 244, 207, 162, 1, 254, 149, 251, 117, 162, 1, 234, 105, 251, + 117, 162, 1, 254, 149, 237, 115, 162, 1, 234, 105, 237, 115, 162, 1, 222, + 149, 232, 232, 162, 1, 222, 149, 226, 134, 232, 233, 162, 1, 226, 135, + 237, 115, 162, 1, 254, 149, 221, 27, 162, 1, 234, 105, 221, 27, 162, 1, + 254, 149, 249, 123, 162, 1, 234, 105, 249, 123, 162, 1, 233, 56, 232, + 198, 162, 1, 226, 135, 249, 123, 162, 1, 254, 149, 222, 95, 162, 1, 234, + 105, 222, 95, 162, 1, 254, 149, 249, 136, 162, 1, 234, 105, 249, 136, + 162, 1, 249, 164, 232, 198, 162, 1, 226, 135, 249, 136, 162, 1, 254, 149, + 229, 204, 162, 1, 234, 105, 229, 204, 162, 1, 254, 149, 252, 179, 162, 1, + 234, 105, 252, 179, 162, 1, 234, 44, 162, 1, 254, 136, 252, 179, 162, 1, + 218, 29, 162, 1, 227, 221, 162, 1, 249, 164, 235, 131, 162, 1, 219, 167, + 162, 1, 222, 149, 226, 117, 162, 1, 233, 56, 226, 117, 162, 1, 249, 164, + 226, 117, 162, 1, 243, 166, 162, 1, 233, 56, 235, 131, 162, 1, 245, 233, + 162, 5, 254, 174, 162, 29, 5, 254, 224, 162, 29, 5, 236, 158, 254, 231, + 162, 29, 5, 248, 241, 254, 231, 162, 29, 5, 236, 158, 237, 150, 162, 29, + 5, 248, 241, 237, 150, 162, 29, 5, 236, 158, 230, 42, 162, 29, 5, 248, + 241, 230, 42, 162, 29, 5, 244, 245, 162, 29, 5, 236, 46, 162, 29, 5, 248, + 241, 236, 46, 162, 29, 5, 236, 48, 249, 73, 162, 29, 5, 236, 47, 243, + 212, 254, 224, 162, 29, 5, 236, 47, 243, 212, 248, 241, 254, 224, 162, + 29, 5, 236, 47, 243, 212, 244, 206, 162, 29, 5, 244, 206, 162, 29, 5, + 248, 241, 244, 245, 162, 29, 5, 248, 241, 244, 206, 162, 228, 197, 235, + 254, 140, 126, 236, 58, 236, 243, 140, 126, 236, 126, 236, 145, 140, 126, + 236, 126, 236, 119, 140, 126, 236, 126, 236, 116, 140, 126, 236, 126, + 236, 123, 140, 126, 236, 126, 227, 240, 140, 126, 232, 85, 232, 74, 140, + 126, 251, 12, 251, 60, 140, 126, 251, 12, 251, 20, 140, 126, 251, 12, + 251, 59, 140, 126, 224, 27, 224, 26, 140, 126, 251, 12, 251, 9, 140, 126, + 217, 232, 217, 239, 140, 126, 248, 168, 251, 66, 140, 126, 199, 229, 213, + 140, 126, 221, 240, 222, 27, 140, 126, 221, 240, 232, 215, 140, 126, 221, + 240, 229, 111, 140, 126, 231, 205, 232, 134, 140, 126, 248, 168, 249, 74, + 140, 126, 199, 222, 116, 140, 126, 221, 240, 221, 219, 140, 126, 221, + 240, 222, 31, 140, 126, 221, 240, 221, 237, 140, 126, 231, 205, 231, 144, + 140, 126, 252, 42, 252, 220, 140, 126, 229, 38, 229, 58, 140, 126, 229, + 119, 229, 113, 140, 126, 245, 140, 246, 8, 140, 126, 229, 119, 229, 135, + 140, 126, 245, 140, 245, 245, 140, 126, 229, 119, 226, 143, 140, 126, + 233, 137, 196, 140, 126, 217, 232, 218, 55, 140, 126, 227, 76, 227, 21, + 140, 126, 227, 22, 140, 126, 235, 13, 235, 36, 140, 126, 234, 231, 140, + 126, 218, 188, 219, 3, 140, 126, 224, 27, 226, 155, 140, 126, 224, 27, + 227, 0, 140, 126, 224, 27, 223, 102, 140, 126, 243, 5, 243, 95, 140, 126, + 235, 13, 250, 252, 140, 126, 142, 254, 123, 140, 126, 243, 5, 231, 200, + 140, 126, 230, 30, 140, 126, 226, 130, 60, 140, 126, 234, 100, 243, 190, + 140, 126, 226, 130, 255, 58, 140, 126, 226, 130, 254, 140, 140, 126, 226, + 130, 72, 140, 126, 226, 130, 237, 255, 140, 126, 226, 130, 220, 110, 140, + 126, 226, 130, 220, 108, 140, 126, 226, 130, 68, 140, 126, 226, 130, 220, + 23, 140, 126, 229, 121, 140, 250, 78, 16, 252, 221, 140, 126, 226, 130, + 73, 140, 126, 226, 130, 254, 234, 140, 126, 226, 130, 74, 140, 126, 226, + 130, 254, 197, 234, 96, 140, 126, 226, 130, 254, 197, 234, 97, 140, 126, + 235, 164, 140, 126, 234, 93, 140, 126, 234, 94, 140, 126, 234, 100, 246, + 223, 140, 126, 234, 100, 221, 239, 140, 126, 234, 100, 221, 93, 140, 126, + 234, 100, 251, 50, 140, 126, 222, 25, 140, 126, 232, 36, 140, 126, 218, + 49, 140, 126, 245, 135, 140, 20, 217, 84, 140, 20, 107, 140, 20, 103, + 140, 20, 160, 140, 20, 154, 140, 20, 174, 140, 20, 182, 140, 20, 191, + 140, 20, 185, 140, 20, 190, 140, 126, 254, 121, 140, 126, 236, 124, 202, + 1, 236, 57, 202, 1, 236, 126, 223, 66, 202, 1, 236, 126, 222, 121, 202, + 1, 232, 84, 202, 1, 250, 182, 202, 1, 224, 27, 222, 121, 202, 1, 231, 56, + 202, 1, 248, 167, 202, 1, 101, 202, 1, 221, 240, 223, 66, 202, 1, 221, + 240, 222, 121, 202, 1, 231, 204, 202, 1, 252, 41, 202, 1, 229, 37, 202, + 1, 229, 119, 223, 66, 202, 1, 245, 140, 222, 121, 202, 1, 229, 119, 222, + 121, 202, 1, 245, 140, 223, 66, 202, 1, 233, 136, 202, 1, 217, 231, 202, + 1, 235, 13, 235, 36, 202, 1, 235, 13, 234, 246, 202, 1, 218, 187, 202, 1, + 224, 27, 223, 66, 202, 1, 243, 5, 223, 66, 202, 1, 74, 202, 1, 243, 5, + 222, 121, 202, 246, 208, 202, 29, 5, 60, 202, 29, 5, 234, 100, 236, 233, + 202, 29, 5, 255, 58, 202, 29, 5, 254, 140, 202, 29, 5, 72, 202, 29, 5, + 237, 255, 202, 29, 5, 218, 90, 202, 29, 5, 217, 166, 202, 29, 5, 68, 202, + 29, 5, 220, 23, 202, 29, 5, 234, 100, 236, 44, 202, 225, 62, 5, 235, 12, + 202, 225, 62, 5, 231, 56, 202, 29, 5, 73, 202, 29, 5, 246, 237, 202, 29, + 5, 74, 202, 29, 5, 253, 212, 202, 29, 5, 254, 196, 202, 236, 58, 235, + 188, 202, 145, 234, 100, 246, 223, 202, 145, 234, 100, 221, 239, 202, + 145, 234, 100, 221, 205, 202, 145, 234, 100, 251, 123, 202, 251, 151, 78, + 202, 232, 43, 202, 20, 217, 84, 202, 20, 107, 202, 20, 103, 202, 20, 160, + 202, 20, 154, 202, 20, 174, 202, 20, 182, 202, 20, 191, 202, 20, 185, + 202, 20, 190, 202, 243, 5, 231, 204, 202, 243, 5, 233, 136, 59, 4, 230, + 146, 59, 164, 244, 19, 217, 243, 233, 213, 221, 61, 60, 59, 164, 244, 19, + 217, 243, 233, 213, 255, 144, 227, 80, 252, 146, 196, 59, 164, 244, 19, + 217, 243, 233, 213, 255, 144, 244, 19, 221, 45, 196, 59, 164, 66, 217, + 243, 233, 213, 234, 27, 196, 59, 164, 250, 194, 217, 243, 233, 213, 225, + 31, 196, 59, 164, 251, 135, 217, 243, 233, 213, 229, 112, 225, 19, 196, + 59, 164, 217, 243, 233, 213, 221, 45, 225, 19, 196, 59, 164, 226, 115, + 225, 18, 59, 164, 251, 251, 217, 243, 233, 212, 59, 164, 252, 55, 224, + 197, 217, 243, 233, 212, 59, 164, 237, 173, 221, 44, 59, 164, 249, 68, + 221, 45, 251, 250, 59, 164, 225, 18, 59, 164, 231, 60, 225, 18, 59, 164, + 221, 45, 225, 18, 59, 164, 231, 60, 221, 45, 225, 18, 59, 164, 227, 96, + 251, 39, 223, 229, 225, 18, 59, 164, 227, 154, 244, 44, 225, 18, 59, 164, + 251, 135, 255, 148, 227, 26, 234, 26, 171, 251, 154, 59, 164, 244, 19, + 221, 44, 59, 235, 5, 5, 251, 67, 227, 25, 59, 235, 5, 5, 235, 77, 227, + 25, 59, 253, 248, 5, 225, 28, 244, 194, 255, 149, 227, 25, 59, 253, 248, + 5, 255, 146, 187, 59, 253, 248, 5, 226, 95, 221, 40, 59, 5, 227, 218, + 248, 179, 244, 193, 59, 5, 227, 218, 248, 179, 244, 70, 59, 5, 227, 218, + 248, 179, 244, 20, 59, 5, 227, 218, 232, 230, 244, 193, 59, 5, 227, 218, + 232, 230, 244, 70, 59, 5, 227, 218, 248, 179, 227, 218, 232, 229, 59, 20, + 217, 84, 59, 20, 107, 59, 20, 103, 59, 20, 160, 59, 20, 154, 59, 20, 174, + 59, 20, 182, 59, 20, 191, 59, 20, 185, 59, 20, 190, 59, 20, 144, 107, 59, + 20, 144, 103, 59, 20, 144, 160, 59, 20, 144, 154, 59, 20, 144, 174, 59, + 20, 144, 182, 59, 20, 144, 191, 59, 20, 144, 185, 59, 20, 144, 190, 59, + 20, 144, 217, 84, 59, 164, 251, 253, 227, 25, 59, 164, 232, 109, 251, + 204, 231, 68, 217, 23, 59, 164, 251, 135, 255, 148, 227, 26, 251, 205, + 233, 172, 251, 154, 59, 164, 232, 109, 251, 204, 225, 29, 227, 25, 59, + 164, 251, 47, 233, 212, 59, 164, 221, 56, 255, 145, 59, 164, 244, 8, 227, + 26, 243, 228, 59, 164, 244, 8, 227, 26, 243, 234, 59, 164, 254, 124, 236, + 140, 243, 228, 59, 164, 254, 124, 236, 140, 243, 234, 59, 5, 218, 42, + 221, 43, 59, 5, 234, 75, 221, 43, 59, 1, 175, 59, 1, 236, 149, 59, 1, + 245, 0, 59, 1, 244, 125, 59, 1, 232, 115, 59, 1, 251, 169, 59, 1, 251, + 69, 59, 1, 237, 123, 59, 1, 231, 77, 59, 1, 221, 29, 59, 1, 221, 19, 59, + 1, 249, 132, 59, 1, 249, 116, 59, 1, 231, 217, 59, 1, 222, 155, 59, 1, + 222, 35, 59, 1, 249, 207, 59, 1, 249, 36, 59, 1, 208, 59, 1, 187, 59, 1, + 229, 141, 59, 1, 252, 237, 59, 1, 252, 94, 59, 1, 196, 59, 1, 221, 55, + 59, 1, 221, 47, 59, 1, 247, 74, 59, 1, 247, 70, 59, 1, 219, 7, 59, 1, + 217, 80, 59, 1, 217, 114, 59, 1, 255, 151, 59, 1, 184, 59, 1, 203, 59, 1, + 235, 188, 59, 1, 225, 25, 59, 1, 223, 218, 59, 1, 226, 177, 59, 1, 155, + 59, 1, 60, 59, 1, 236, 10, 59, 1, 245, 167, 203, 59, 1, 236, 74, 59, 1, + 227, 52, 59, 29, 5, 255, 58, 59, 29, 5, 72, 59, 29, 5, 237, 255, 59, 29, + 5, 68, 59, 29, 5, 220, 23, 59, 29, 5, 167, 152, 59, 29, 5, 167, 227, 53, + 59, 29, 5, 167, 153, 59, 29, 5, 167, 235, 18, 59, 29, 5, 73, 59, 29, 5, + 246, 250, 59, 29, 5, 74, 59, 29, 5, 230, 127, 59, 5, 227, 81, 223, 104, + 232, 116, 227, 75, 59, 5, 227, 80, 252, 145, 59, 29, 5, 210, 72, 59, 29, + 5, 210, 237, 255, 59, 5, 231, 68, 217, 24, 232, 236, 249, 207, 59, 5, + 224, 37, 235, 124, 59, 164, 243, 196, 59, 164, 230, 21, 59, 5, 235, 127, + 227, 25, 59, 5, 218, 46, 227, 25, 59, 5, 235, 128, 221, 56, 251, 154, 59, + 5, 234, 28, 251, 154, 59, 5, 244, 22, 251, 155, 227, 152, 59, 5, 244, 22, + 234, 20, 227, 152, 59, 223, 97, 1, 175, 59, 223, 97, 1, 236, 149, 59, + 223, 97, 1, 245, 0, 59, 223, 97, 1, 244, 125, 59, 223, 97, 1, 232, 115, + 59, 223, 97, 1, 251, 169, 59, 223, 97, 1, 251, 69, 59, 223, 97, 1, 237, + 123, 59, 223, 97, 1, 231, 77, 59, 223, 97, 1, 221, 29, 59, 223, 97, 1, + 221, 19, 59, 223, 97, 1, 249, 132, 59, 223, 97, 1, 249, 116, 59, 223, 97, + 1, 231, 217, 59, 223, 97, 1, 222, 155, 59, 223, 97, 1, 222, 35, 59, 223, + 97, 1, 249, 207, 59, 223, 97, 1, 249, 36, 59, 223, 97, 1, 208, 59, 223, + 97, 1, 187, 59, 223, 97, 1, 229, 141, 59, 223, 97, 1, 252, 237, 59, 223, + 97, 1, 252, 94, 59, 223, 97, 1, 196, 59, 223, 97, 1, 221, 55, 59, 223, + 97, 1, 221, 47, 59, 223, 97, 1, 247, 74, 59, 223, 97, 1, 247, 70, 59, + 223, 97, 1, 219, 7, 59, 223, 97, 1, 217, 80, 59, 223, 97, 1, 217, 114, + 59, 223, 97, 1, 255, 151, 59, 223, 97, 1, 184, 59, 223, 97, 1, 203, 59, + 223, 97, 1, 235, 188, 59, 223, 97, 1, 225, 25, 59, 223, 97, 1, 223, 218, + 59, 223, 97, 1, 226, 177, 59, 223, 97, 1, 155, 59, 223, 97, 1, 60, 59, + 223, 97, 1, 236, 10, 59, 223, 97, 1, 245, 167, 219, 7, 59, 223, 97, 1, + 245, 167, 184, 59, 223, 97, 1, 245, 167, 203, 59, 236, 8, 227, 23, 236, + 149, 59, 236, 8, 227, 23, 236, 150, 251, 205, 233, 172, 251, 154, 59, + 251, 144, 5, 106, 252, 140, 59, 251, 144, 5, 170, 252, 140, 59, 251, 144, + 5, 251, 145, 222, 86, 59, 251, 144, 5, 226, 114, 255, 150, 59, 16, 247, + 121, 251, 248, 59, 16, 227, 217, 227, 82, 59, 16, 230, 35, 244, 192, 59, + 16, 227, 217, 227, 83, 227, 154, 244, 43, 59, 16, 229, 112, 187, 59, 16, + 231, 190, 251, 248, 59, 16, 231, 190, 251, 249, 231, 60, 255, 147, 59, + 16, 231, 190, 251, 249, 244, 21, 255, 147, 59, 16, 231, 190, 251, 249, + 251, 205, 255, 147, 59, 5, 227, 218, 232, 230, 227, 218, 248, 178, 59, 5, + 227, 218, 232, 230, 244, 20, 59, 164, 251, 252, 224, 197, 244, 104, 233, + 213, 227, 153, 59, 164, 233, 138, 217, 243, 244, 104, 233, 213, 227, 153, + 59, 164, 231, 60, 221, 44, 59, 164, 66, 252, 12, 227, 77, 217, 243, 233, + 213, 234, 27, 196, 59, 164, 250, 194, 252, 12, 227, 77, 217, 243, 233, + 213, 225, 31, 196, 227, 108, 223, 38, 55, 235, 114, 223, 38, 55, 227, + 108, 223, 38, 5, 2, 248, 143, 235, 114, 223, 38, 5, 2, 248, 143, 63, 1, + 175, 63, 1, 236, 149, 63, 1, 245, 0, 63, 1, 244, 125, 63, 1, 232, 115, + 63, 1, 251, 169, 63, 1, 251, 69, 63, 1, 237, 123, 63, 1, 237, 103, 63, 1, + 231, 77, 63, 1, 231, 206, 63, 1, 221, 29, 63, 1, 221, 19, 63, 1, 249, + 132, 63, 1, 249, 116, 63, 1, 231, 217, 63, 1, 222, 155, 63, 1, 222, 35, + 63, 1, 249, 207, 63, 1, 249, 36, 63, 1, 208, 63, 1, 187, 63, 1, 229, 141, + 63, 1, 252, 237, 63, 1, 252, 94, 63, 1, 196, 63, 1, 184, 63, 1, 203, 63, + 1, 235, 188, 63, 1, 219, 7, 63, 1, 226, 177, 63, 1, 155, 63, 1, 235, 17, + 63, 1, 60, 63, 1, 225, 10, 60, 63, 1, 72, 63, 1, 237, 255, 63, 1, 68, 63, + 1, 220, 23, 63, 1, 73, 63, 1, 233, 128, 73, 63, 1, 74, 63, 1, 253, 232, + 63, 29, 5, 222, 123, 255, 58, 63, 29, 5, 255, 58, 63, 29, 5, 72, 63, 29, + 5, 237, 255, 63, 29, 5, 68, 63, 29, 5, 220, 23, 63, 29, 5, 73, 63, 29, 5, + 254, 196, 63, 29, 5, 233, 128, 237, 255, 63, 29, 5, 233, 128, 74, 63, 29, + 5, 178, 50, 63, 5, 254, 95, 63, 5, 61, 56, 63, 5, 219, 77, 63, 5, 219, + 82, 63, 5, 254, 11, 63, 250, 147, 5, 128, 184, 63, 250, 147, 5, 128, 203, + 63, 250, 147, 5, 128, 219, 7, 63, 250, 147, 5, 128, 155, 63, 1, 244, 32, + 226, 177, 63, 20, 217, 84, 63, 20, 107, 63, 20, 103, 63, 20, 160, 63, 20, + 154, 63, 20, 174, 63, 20, 182, 63, 20, 191, 63, 20, 185, 63, 20, 190, 63, + 5, 235, 25, 226, 86, 63, 5, 226, 86, 63, 16, 235, 9, 63, 16, 250, 163, + 63, 16, 254, 213, 63, 16, 244, 178, 63, 1, 225, 25, 63, 1, 223, 218, 63, + 1, 167, 152, 63, 1, 167, 227, 53, 63, 1, 167, 153, 63, 1, 167, 235, 18, + 63, 29, 5, 167, 152, 63, 29, 5, 167, 227, 53, 63, 29, 5, 167, 153, 63, + 29, 5, 167, 235, 18, 63, 1, 233, 128, 232, 115, 63, 1, 233, 128, 237, + 103, 63, 1, 233, 128, 252, 178, 63, 1, 233, 128, 252, 174, 63, 250, 147, + 5, 233, 128, 128, 208, 63, 250, 147, 5, 233, 128, 128, 196, 63, 250, 147, + 5, 233, 128, 128, 235, 188, 63, 1, 225, 30, 236, 213, 225, 25, 63, 29, 5, + 225, 30, 236, 213, 246, 115, 63, 145, 164, 225, 30, 236, 213, 243, 170, + 63, 145, 164, 225, 30, 236, 213, 236, 185, 229, 118, 63, 1, 218, 215, + 228, 175, 236, 213, 222, 35, 63, 1, 218, 215, 228, 175, 236, 213, 228, + 181, 63, 29, 5, 218, 215, 228, 175, 236, 213, 246, 115, 63, 29, 5, 218, + 215, 228, 175, 236, 213, 220, 110, 63, 5, 218, 215, 228, 175, 236, 213, + 221, 131, 63, 5, 218, 215, 228, 175, 236, 213, 221, 130, 63, 5, 218, 215, + 228, 175, 236, 213, 221, 129, 63, 5, 218, 215, 228, 175, 236, 213, 221, + 128, 63, 5, 218, 215, 228, 175, 236, 213, 221, 127, 63, 1, 247, 4, 228, + 175, 236, 213, 231, 217, 63, 1, 247, 4, 228, 175, 236, 213, 217, 173, 63, + 1, 247, 4, 228, 175, 236, 213, 244, 106, 63, 29, 5, 244, 188, 236, 213, + 72, 63, 29, 5, 236, 190, 230, 167, 63, 29, 5, 236, 190, 68, 63, 29, 5, + 236, 190, 246, 250, 63, 1, 225, 10, 175, 63, 1, 225, 10, 236, 149, 63, 1, + 225, 10, 245, 0, 63, 1, 225, 10, 251, 169, 63, 1, 225, 10, 217, 114, 63, + 1, 225, 10, 231, 77, 63, 1, 225, 10, 249, 207, 63, 1, 225, 10, 208, 63, + 1, 225, 10, 229, 141, 63, 1, 225, 10, 246, 8, 63, 1, 225, 10, 252, 237, + 63, 1, 225, 10, 222, 35, 63, 1, 225, 10, 155, 63, 250, 147, 5, 225, 10, + 128, 219, 7, 63, 29, 5, 225, 10, 255, 58, 63, 29, 5, 225, 10, 73, 63, 29, + 5, 225, 10, 178, 50, 63, 29, 5, 225, 10, 39, 218, 90, 63, 5, 225, 10, + 221, 130, 63, 5, 225, 10, 221, 129, 63, 5, 225, 10, 221, 127, 63, 5, 225, + 10, 221, 126, 63, 5, 225, 10, 250, 115, 221, 130, 63, 5, 225, 10, 250, + 115, 221, 129, 63, 5, 225, 10, 250, 115, 246, 200, 221, 132, 63, 1, 227, + 12, 230, 26, 246, 8, 63, 5, 227, 12, 230, 26, 221, 127, 63, 225, 10, 20, + 217, 84, 63, 225, 10, 20, 107, 63, 225, 10, 20, 103, 63, 225, 10, 20, + 160, 63, 225, 10, 20, 154, 63, 225, 10, 20, 174, 63, 225, 10, 20, 182, + 63, 225, 10, 20, 191, 63, 225, 10, 20, 185, 63, 225, 10, 20, 190, 63, 5, + 236, 143, 221, 131, 63, 5, 236, 143, 221, 129, 63, 29, 5, 254, 186, 60, + 63, 29, 5, 254, 186, 254, 196, 63, 16, 225, 10, 107, 63, 16, 225, 10, + 246, 94, 95, 6, 1, 254, 131, 95, 6, 1, 252, 209, 95, 6, 1, 244, 230, 95, + 6, 1, 248, 153, 95, 6, 1, 246, 197, 95, 6, 1, 219, 85, 95, 6, 1, 217, 87, + 95, 6, 1, 222, 119, 95, 6, 1, 237, 223, 95, 6, 1, 236, 233, 95, 6, 1, + 235, 143, 95, 6, 1, 234, 86, 95, 6, 1, 232, 211, 95, 6, 1, 230, 138, 95, + 6, 1, 229, 243, 95, 6, 1, 217, 76, 95, 6, 1, 227, 249, 95, 6, 1, 226, + 140, 95, 6, 1, 222, 112, 95, 6, 1, 220, 87, 95, 6, 1, 229, 134, 95, 6, 1, + 236, 138, 95, 6, 1, 244, 119, 95, 6, 1, 228, 140, 95, 6, 1, 224, 209, 95, + 6, 1, 251, 22, 95, 6, 1, 251, 154, 95, 6, 1, 237, 91, 95, 6, 1, 250, 224, + 95, 6, 1, 251, 56, 95, 6, 1, 218, 136, 95, 6, 1, 237, 101, 95, 6, 1, 243, + 208, 95, 6, 1, 243, 162, 95, 6, 1, 243, 108, 95, 6, 1, 218, 227, 95, 6, + 1, 243, 182, 95, 6, 1, 243, 2, 95, 1, 254, 131, 95, 1, 252, 209, 95, 1, + 244, 230, 95, 1, 248, 153, 95, 1, 246, 197, 95, 1, 219, 85, 95, 1, 217, + 87, 95, 1, 222, 119, 95, 1, 237, 223, 95, 1, 236, 233, 95, 1, 235, 143, + 95, 1, 234, 86, 95, 1, 232, 211, 95, 1, 230, 138, 95, 1, 229, 243, 95, 1, + 217, 76, 95, 1, 227, 249, 95, 1, 226, 140, 95, 1, 222, 112, 95, 1, 220, + 87, 95, 1, 229, 134, 95, 1, 236, 138, 95, 1, 244, 119, 95, 1, 228, 140, + 95, 1, 224, 209, 95, 1, 251, 22, 95, 1, 251, 154, 95, 1, 237, 91, 95, 1, + 250, 224, 95, 1, 251, 56, 95, 1, 218, 136, 95, 1, 237, 101, 95, 1, 243, + 208, 95, 1, 243, 162, 95, 1, 243, 108, 95, 1, 218, 227, 95, 1, 243, 182, + 95, 1, 243, 2, 95, 1, 245, 203, 95, 1, 217, 233, 95, 1, 246, 210, 95, 1, + 215, 244, 230, 95, 1, 254, 191, 95, 229, 241, 225, 54, 58, 1, 95, 232, + 211, 22, 91, 236, 86, 22, 91, 223, 211, 22, 91, 232, 55, 22, 91, 221, + 192, 22, 91, 223, 200, 22, 91, 227, 140, 22, 91, 233, 187, 22, 91, 229, + 99, 22, 91, 223, 208, 22, 91, 224, 104, 22, 91, 223, 205, 22, 91, 238, + 22, 22, 91, 250, 230, 22, 91, 223, 215, 22, 91, 251, 29, 22, 91, 236, + 128, 22, 91, 222, 0, 22, 91, 229, 127, 22, 91, 243, 106, 22, 91, 232, 51, + 22, 91, 223, 209, 22, 91, 232, 45, 22, 91, 232, 49, 22, 91, 221, 189, 22, + 91, 227, 128, 22, 91, 223, 207, 22, 91, 227, 138, 22, 91, 236, 217, 22, + 91, 233, 180, 22, 91, 236, 220, 22, 91, 229, 94, 22, 91, 229, 92, 22, 91, + 229, 80, 22, 91, 229, 88, 22, 91, 229, 86, 22, 91, 229, 83, 22, 91, 229, + 85, 22, 91, 229, 82, 22, 91, 229, 87, 22, 91, 229, 97, 22, 91, 229, 98, + 22, 91, 229, 81, 22, 91, 229, 91, 22, 91, 236, 218, 22, 91, 236, 216, 22, + 91, 224, 97, 22, 91, 224, 95, 22, 91, 224, 87, 22, 91, 224, 90, 22, 91, + 224, 96, 22, 91, 224, 92, 22, 91, 224, 91, 22, 91, 224, 89, 22, 91, 224, + 100, 22, 91, 224, 102, 22, 91, 224, 103, 22, 91, 224, 98, 22, 91, 224, + 88, 22, 91, 224, 93, 22, 91, 224, 101, 22, 91, 251, 15, 22, 91, 251, 13, + 22, 91, 251, 78, 22, 91, 251, 76, 22, 91, 230, 1, 22, 91, 238, 17, 22, + 91, 238, 8, 22, 91, 238, 16, 22, 91, 238, 13, 22, 91, 238, 11, 22, 91, + 238, 15, 22, 91, 223, 212, 22, 91, 238, 20, 22, 91, 238, 21, 22, 91, 238, + 9, 22, 91, 238, 14, 22, 91, 218, 6, 22, 91, 250, 229, 22, 91, 251, 16, + 22, 91, 251, 14, 22, 91, 251, 79, 22, 91, 251, 77, 22, 91, 251, 27, 22, + 91, 251, 28, 22, 91, 251, 17, 22, 91, 251, 80, 22, 91, 229, 125, 22, 91, + 236, 219, 22, 91, 223, 213, 22, 91, 218, 12, 22, 91, 236, 77, 22, 91, + 232, 47, 22, 91, 232, 53, 22, 91, 232, 52, 22, 91, 221, 186, 22, 91, 245, + 185, 22, 122, 245, 185, 22, 122, 60, 22, 122, 254, 234, 22, 122, 184, 22, + 122, 218, 65, 22, 122, 246, 168, 22, 122, 73, 22, 122, 218, 16, 22, 122, + 218, 25, 22, 122, 74, 22, 122, 219, 7, 22, 122, 219, 4, 22, 122, 230, + 167, 22, 122, 217, 231, 22, 122, 68, 22, 122, 218, 219, 22, 122, 218, + 227, 22, 122, 218, 204, 22, 122, 217, 200, 22, 122, 246, 115, 22, 122, + 217, 250, 22, 122, 72, 22, 122, 255, 142, 22, 122, 255, 141, 22, 122, + 218, 79, 22, 122, 218, 77, 22, 122, 246, 166, 22, 122, 246, 165, 22, 122, + 246, 167, 22, 122, 218, 15, 22, 122, 218, 14, 22, 122, 231, 13, 22, 122, + 231, 14, 22, 122, 231, 7, 22, 122, 231, 12, 22, 122, 231, 10, 22, 122, + 217, 225, 22, 122, 217, 224, 22, 122, 217, 223, 22, 122, 217, 226, 22, + 122, 217, 227, 22, 122, 220, 179, 22, 122, 220, 178, 22, 122, 220, 177, + 22, 122, 220, 174, 22, 122, 220, 175, 22, 122, 217, 199, 22, 122, 217, + 196, 22, 122, 217, 197, 22, 122, 217, 191, 22, 122, 217, 192, 22, 122, + 217, 193, 22, 122, 217, 195, 22, 122, 246, 109, 22, 122, 246, 111, 22, + 122, 217, 249, 22, 122, 242, 106, 22, 122, 242, 98, 22, 122, 242, 101, + 22, 122, 242, 99, 22, 122, 242, 103, 22, 122, 242, 105, 22, 122, 254, 60, + 22, 122, 254, 57, 22, 122, 254, 55, 22, 122, 254, 56, 22, 122, 223, 216, + 22, 122, 255, 143, 22, 122, 218, 78, 22, 122, 218, 13, 22, 122, 231, 9, + 22, 122, 231, 8, 22, 85, 236, 86, 22, 85, 223, 211, 22, 85, 236, 79, 22, + 85, 232, 55, 22, 85, 232, 53, 22, 85, 232, 52, 22, 85, 221, 192, 22, 85, + 227, 140, 22, 85, 227, 135, 22, 85, 227, 132, 22, 85, 227, 125, 22, 85, + 227, 120, 22, 85, 227, 115, 22, 85, 227, 126, 22, 85, 227, 138, 22, 85, + 233, 187, 22, 85, 229, 99, 22, 85, 229, 88, 22, 85, 224, 104, 22, 85, + 223, 205, 22, 85, 238, 22, 22, 85, 250, 230, 22, 85, 251, 29, 22, 85, + 236, 128, 22, 85, 222, 0, 22, 85, 229, 127, 22, 85, 243, 106, 22, 85, + 236, 80, 22, 85, 236, 78, 22, 85, 232, 51, 22, 85, 232, 45, 22, 85, 232, + 47, 22, 85, 232, 50, 22, 85, 232, 46, 22, 85, 221, 189, 22, 85, 221, 186, + 22, 85, 227, 133, 22, 85, 227, 128, 22, 85, 227, 114, 22, 85, 227, 113, + 22, 85, 223, 207, 22, 85, 227, 130, 22, 85, 227, 129, 22, 85, 227, 122, + 22, 85, 227, 124, 22, 85, 227, 137, 22, 85, 227, 117, 22, 85, 227, 127, + 22, 85, 227, 136, 22, 85, 227, 112, 22, 85, 233, 183, 22, 85, 233, 178, + 22, 85, 233, 180, 22, 85, 233, 177, 22, 85, 233, 175, 22, 85, 233, 181, + 22, 85, 233, 186, 22, 85, 233, 184, 22, 85, 236, 220, 22, 85, 229, 90, + 22, 85, 229, 91, 22, 85, 229, 96, 22, 85, 236, 218, 22, 85, 224, 97, 22, + 85, 224, 87, 22, 85, 224, 90, 22, 85, 224, 92, 22, 85, 230, 1, 22, 85, + 238, 17, 22, 85, 238, 10, 22, 85, 223, 212, 22, 85, 238, 18, 22, 85, 218, + 6, 22, 85, 218, 2, 22, 85, 218, 3, 22, 85, 229, 125, 22, 85, 236, 219, + 22, 85, 243, 104, 22, 85, 243, 102, 22, 85, 243, 105, 22, 85, 243, 103, + 22, 85, 218, 12, 22, 85, 236, 82, 22, 85, 236, 81, 22, 85, 236, 85, 22, + 85, 236, 83, 22, 85, 236, 84, 22, 85, 223, 209, 28, 4, 155, 28, 4, 242, + 173, 28, 4, 243, 112, 28, 4, 243, 211, 28, 4, 243, 148, 28, 4, 243, 162, + 28, 4, 243, 4, 28, 4, 243, 3, 28, 4, 235, 188, 28, 4, 234, 231, 28, 4, + 235, 67, 28, 4, 235, 187, 28, 4, 235, 118, 28, 4, 235, 122, 28, 4, 235, + 12, 28, 4, 234, 206, 28, 4, 243, 121, 28, 4, 243, 115, 28, 4, 243, 117, + 28, 4, 243, 120, 28, 4, 243, 118, 28, 4, 243, 119, 28, 4, 243, 116, 28, + 4, 243, 114, 28, 4, 196, 28, 4, 233, 99, 28, 4, 233, 196, 28, 4, 234, + 118, 28, 4, 234, 16, 28, 4, 234, 25, 28, 4, 233, 136, 28, 4, 233, 49, 28, + 4, 222, 212, 28, 4, 222, 206, 28, 4, 222, 208, 28, 4, 222, 211, 28, 4, + 222, 209, 28, 4, 222, 210, 28, 4, 222, 207, 28, 4, 222, 205, 28, 4, 203, + 28, 4, 227, 22, 28, 4, 227, 147, 28, 4, 228, 0, 28, 4, 227, 200, 28, 4, + 227, 216, 28, 4, 227, 75, 28, 4, 226, 252, 28, 4, 226, 177, 28, 4, 223, + 103, 28, 4, 224, 140, 28, 4, 226, 175, 28, 4, 226, 84, 28, 4, 226, 94, + 28, 4, 224, 26, 28, 4, 223, 36, 28, 4, 225, 25, 28, 4, 224, 170, 28, 4, + 224, 221, 28, 4, 225, 21, 28, 4, 224, 244, 28, 4, 224, 246, 28, 4, 224, + 200, 28, 4, 224, 157, 28, 4, 228, 155, 28, 4, 228, 98, 28, 4, 228, 121, + 28, 4, 228, 154, 28, 4, 228, 135, 28, 4, 228, 136, 28, 4, 228, 110, 28, + 4, 228, 109, 28, 4, 228, 57, 28, 4, 228, 53, 28, 4, 228, 56, 28, 4, 228, + 54, 28, 4, 228, 55, 28, 4, 228, 133, 28, 4, 228, 127, 28, 4, 228, 129, + 28, 4, 228, 132, 28, 4, 228, 130, 28, 4, 228, 131, 28, 4, 228, 128, 28, + 4, 228, 126, 28, 4, 228, 122, 28, 4, 228, 125, 28, 4, 228, 123, 28, 4, + 228, 124, 28, 4, 252, 237, 28, 4, 251, 248, 28, 4, 252, 84, 28, 4, 252, + 236, 28, 4, 252, 137, 28, 4, 252, 144, 28, 4, 252, 41, 28, 4, 251, 218, + 28, 4, 219, 189, 28, 4, 219, 56, 28, 4, 219, 94, 28, 4, 219, 188, 28, 4, + 219, 160, 28, 4, 219, 165, 28, 4, 219, 72, 28, 4, 219, 49, 28, 4, 222, + 155, 28, 4, 221, 0, 28, 4, 221, 205, 28, 4, 222, 152, 28, 4, 222, 80, 28, + 4, 222, 87, 28, 4, 101, 28, 4, 220, 225, 28, 4, 251, 169, 28, 4, 250, 92, + 28, 4, 250, 235, 28, 4, 251, 168, 28, 4, 251, 91, 28, 4, 251, 99, 28, 4, + 250, 182, 28, 4, 250, 66, 28, 4, 218, 138, 28, 4, 218, 114, 28, 4, 218, + 130, 28, 4, 218, 137, 28, 4, 218, 134, 28, 4, 218, 135, 28, 4, 218, 121, + 28, 4, 218, 120, 28, 4, 218, 109, 28, 4, 218, 105, 28, 4, 218, 108, 28, + 4, 218, 106, 28, 4, 218, 107, 28, 4, 208, 28, 4, 231, 144, 28, 4, 232, + 62, 28, 4, 232, 235, 28, 4, 232, 139, 28, 4, 232, 141, 28, 4, 231, 204, + 28, 4, 231, 85, 28, 4, 231, 77, 28, 4, 231, 50, 28, 4, 231, 67, 28, 4, + 231, 76, 28, 4, 231, 72, 28, 4, 231, 73, 28, 4, 231, 56, 28, 4, 231, 43, + 28, 4, 244, 73, 60, 28, 4, 244, 73, 68, 28, 4, 244, 73, 72, 28, 4, 244, + 73, 255, 58, 28, 4, 244, 73, 246, 250, 28, 4, 244, 73, 73, 28, 4, 244, + 73, 74, 28, 4, 244, 73, 219, 7, 28, 4, 175, 28, 4, 236, 7, 28, 4, 236, + 113, 28, 4, 237, 5, 28, 4, 236, 183, 28, 4, 236, 184, 28, 4, 236, 57, 28, + 4, 236, 56, 28, 4, 235, 234, 28, 4, 235, 229, 28, 4, 235, 233, 28, 4, + 235, 230, 28, 4, 235, 231, 28, 4, 235, 224, 28, 4, 235, 218, 28, 4, 235, + 220, 28, 4, 235, 223, 28, 4, 235, 221, 28, 4, 235, 222, 28, 4, 235, 219, + 28, 4, 235, 217, 28, 4, 235, 213, 28, 4, 235, 216, 28, 4, 235, 214, 28, + 4, 235, 215, 28, 4, 219, 7, 28, 4, 218, 165, 28, 4, 218, 204, 28, 4, 219, + 6, 28, 4, 218, 224, 28, 4, 218, 227, 28, 4, 218, 187, 28, 4, 218, 186, + 28, 4, 229, 133, 60, 28, 4, 229, 133, 68, 28, 4, 229, 133, 72, 28, 4, + 229, 133, 255, 58, 28, 4, 229, 133, 246, 250, 28, 4, 229, 133, 73, 28, 4, + 229, 133, 74, 28, 4, 217, 114, 28, 4, 217, 13, 28, 4, 217, 42, 28, 4, + 217, 113, 28, 4, 217, 90, 28, 4, 217, 92, 28, 4, 217, 21, 28, 4, 217, 0, + 28, 4, 217, 80, 28, 4, 217, 60, 28, 4, 217, 67, 28, 4, 217, 79, 28, 4, + 217, 71, 28, 4, 217, 72, 28, 4, 217, 65, 28, 4, 217, 51, 28, 4, 184, 28, + 4, 217, 200, 28, 4, 217, 250, 28, 4, 218, 76, 28, 4, 218, 22, 28, 4, 218, + 25, 28, 4, 217, 231, 28, 4, 217, 222, 28, 4, 249, 207, 28, 4, 247, 111, + 28, 4, 249, 15, 28, 4, 249, 206, 28, 4, 249, 82, 28, 4, 249, 92, 28, 4, + 248, 167, 28, 4, 247, 83, 28, 4, 249, 132, 28, 4, 249, 102, 28, 4, 249, + 114, 28, 4, 249, 131, 28, 4, 249, 119, 28, 4, 249, 120, 28, 4, 249, 107, + 28, 4, 249, 93, 28, 4, 237, 123, 28, 4, 237, 43, 28, 4, 237, 98, 28, 4, + 237, 122, 28, 4, 237, 113, 28, 4, 237, 114, 28, 4, 237, 59, 28, 4, 237, + 25, 28, 4, 245, 0, 28, 4, 244, 17, 28, 4, 244, 103, 28, 4, 244, 253, 28, + 4, 244, 184, 28, 4, 244, 191, 28, 4, 244, 68, 28, 4, 244, 67, 28, 4, 243, + 243, 28, 4, 243, 239, 28, 4, 243, 242, 28, 4, 243, 240, 28, 4, 243, 241, + 28, 4, 244, 160, 28, 4, 244, 140, 28, 4, 244, 150, 28, 4, 244, 159, 28, + 4, 244, 154, 28, 4, 244, 155, 28, 4, 244, 144, 28, 4, 244, 129, 28, 4, + 222, 35, 28, 4, 221, 223, 28, 4, 222, 2, 28, 4, 222, 34, 28, 4, 222, 21, + 28, 4, 222, 22, 28, 4, 221, 239, 28, 4, 221, 216, 28, 4, 251, 69, 28, 4, + 250, 253, 28, 4, 251, 31, 28, 4, 251, 68, 28, 4, 251, 43, 28, 4, 251, 46, + 28, 4, 251, 11, 28, 4, 250, 242, 28, 4, 229, 141, 28, 4, 229, 114, 28, 4, + 229, 129, 28, 4, 229, 140, 28, 4, 229, 131, 28, 4, 229, 132, 28, 4, 229, + 118, 28, 4, 229, 110, 28, 4, 221, 55, 28, 4, 221, 36, 28, 4, 221, 39, 28, + 4, 221, 54, 28, 4, 221, 49, 28, 4, 221, 50, 28, 4, 221, 38, 28, 4, 221, + 34, 28, 4, 220, 188, 28, 4, 220, 180, 28, 4, 220, 184, 28, 4, 220, 187, + 28, 4, 220, 185, 28, 4, 220, 186, 28, 4, 220, 182, 28, 4, 220, 181, 28, + 4, 246, 8, 28, 4, 245, 92, 28, 4, 245, 203, 28, 4, 246, 7, 28, 4, 245, + 226, 28, 4, 245, 231, 28, 4, 245, 139, 28, 4, 245, 78, 28, 4, 187, 28, 4, + 228, 202, 28, 4, 229, 108, 28, 4, 230, 43, 28, 4, 229, 191, 28, 4, 229, + 198, 28, 4, 229, 37, 28, 4, 228, 181, 28, 4, 226, 242, 28, 4, 233, 39, + 28, 4, 245, 72, 28, 36, 244, 183, 78, 28, 226, 87, 78, 28, 218, 173, 28, + 245, 90, 223, 136, 28, 250, 168, 28, 225, 67, 28, 250, 175, 28, 228, 242, + 250, 175, 28, 228, 82, 78, 28, 229, 241, 225, 54, 28, 20, 107, 28, 20, + 103, 28, 20, 160, 28, 20, 154, 28, 20, 174, 28, 20, 182, 28, 20, 191, 28, + 20, 185, 28, 20, 190, 28, 54, 222, 65, 28, 54, 220, 219, 28, 54, 221, + 245, 28, 54, 245, 119, 28, 54, 245, 196, 28, 54, 224, 69, 28, 54, 225, + 38, 28, 54, 246, 227, 28, 54, 232, 27, 28, 54, 242, 161, 28, 54, 222, 66, + 221, 231, 28, 4, 226, 91, 233, 49, 28, 4, 233, 45, 28, 4, 233, 46, 28, 4, + 233, 47, 28, 4, 226, 91, 251, 218, 28, 4, 251, 215, 28, 4, 251, 216, 28, + 4, 251, 217, 28, 4, 226, 91, 245, 78, 28, 4, 245, 74, 28, 4, 245, 75, 28, + 4, 245, 76, 28, 4, 226, 91, 228, 181, 28, 4, 228, 177, 28, 4, 228, 178, + 28, 4, 228, 179, 28, 221, 133, 164, 217, 234, 28, 221, 133, 164, 249, 50, + 28, 221, 133, 164, 227, 97, 28, 221, 133, 164, 224, 192, 227, 97, 28, + 221, 133, 164, 248, 248, 28, 221, 133, 164, 236, 167, 28, 221, 133, 164, + 251, 19, 28, 221, 133, 164, 243, 110, 28, 221, 133, 164, 249, 49, 28, + 221, 133, 164, 235, 245, 143, 1, 60, 143, 1, 73, 143, 1, 72, 143, 1, 74, + 143, 1, 68, 143, 1, 216, 216, 143, 1, 245, 0, 143, 1, 175, 143, 1, 244, + 191, 143, 1, 244, 103, 143, 1, 244, 68, 143, 1, 244, 17, 143, 1, 243, + 244, 143, 1, 155, 143, 1, 243, 162, 143, 1, 243, 112, 143, 1, 243, 4, + 143, 1, 242, 173, 143, 1, 242, 154, 143, 1, 235, 188, 143, 1, 235, 122, + 143, 1, 235, 67, 143, 1, 235, 12, 143, 1, 234, 231, 143, 1, 234, 207, + 143, 1, 196, 143, 1, 234, 25, 143, 1, 233, 196, 143, 1, 233, 136, 143, 1, + 233, 99, 143, 1, 208, 143, 1, 243, 26, 143, 1, 232, 224, 143, 1, 232, + 141, 143, 1, 232, 62, 143, 1, 231, 204, 143, 1, 231, 144, 143, 1, 231, + 87, 143, 1, 228, 97, 143, 1, 228, 84, 143, 1, 228, 78, 143, 1, 228, 72, + 143, 1, 228, 61, 143, 1, 228, 59, 143, 1, 226, 177, 143, 1, 198, 143, 1, + 226, 94, 143, 1, 224, 140, 143, 1, 224, 26, 143, 1, 223, 103, 143, 1, + 223, 41, 143, 1, 249, 207, 143, 1, 222, 155, 143, 1, 249, 92, 143, 1, + 222, 87, 143, 1, 249, 15, 143, 1, 221, 205, 143, 1, 248, 167, 143, 1, + 247, 111, 143, 1, 247, 85, 143, 1, 248, 176, 143, 1, 221, 155, 143, 1, + 221, 154, 143, 1, 221, 144, 143, 1, 221, 143, 143, 1, 221, 142, 143, 1, + 221, 141, 143, 1, 221, 55, 143, 1, 221, 50, 143, 1, 221, 39, 143, 1, 221, + 38, 143, 1, 221, 36, 143, 1, 221, 35, 143, 1, 219, 7, 143, 1, 218, 227, + 143, 1, 218, 204, 143, 1, 218, 187, 143, 1, 218, 165, 143, 1, 218, 156, + 143, 1, 184, 143, 1, 218, 25, 143, 1, 217, 250, 143, 1, 217, 231, 143, 1, + 217, 200, 143, 1, 217, 174, 18, 19, 242, 121, 18, 19, 73, 18, 19, 255, + 22, 18, 19, 72, 18, 19, 237, 255, 18, 19, 74, 18, 19, 230, 127, 18, 19, + 218, 89, 230, 127, 18, 19, 64, 246, 250, 18, 19, 64, 72, 18, 19, 60, 18, + 19, 255, 58, 18, 19, 218, 227, 18, 19, 137, 218, 227, 18, 19, 218, 204, + 18, 19, 137, 218, 204, 18, 19, 218, 196, 18, 19, 137, 218, 196, 18, 19, + 218, 187, 18, 19, 137, 218, 187, 18, 19, 218, 180, 18, 19, 137, 218, 180, + 18, 19, 232, 207, 218, 180, 18, 19, 219, 7, 18, 19, 137, 219, 7, 18, 19, + 219, 6, 18, 19, 137, 219, 6, 18, 19, 232, 207, 219, 6, 18, 19, 254, 196, + 18, 19, 218, 89, 219, 40, 18, 19, 244, 73, 223, 136, 18, 19, 39, 168, 18, + 19, 39, 244, 36, 18, 19, 39, 252, 29, 144, 227, 93, 18, 19, 39, 221, 120, + 144, 227, 93, 18, 19, 39, 45, 144, 227, 93, 18, 19, 39, 227, 93, 18, 19, + 39, 51, 168, 18, 19, 39, 51, 224, 192, 69, 223, 107, 18, 19, 39, 233, + 193, 248, 145, 18, 19, 39, 224, 192, 186, 92, 18, 19, 39, 229, 43, 18, + 19, 39, 113, 222, 143, 18, 19, 246, 197, 18, 19, 237, 223, 18, 19, 230, + 138, 18, 19, 254, 131, 18, 19, 229, 198, 18, 19, 230, 41, 18, 19, 229, + 108, 18, 19, 229, 76, 18, 19, 229, 37, 18, 19, 229, 21, 18, 19, 218, 89, + 229, 21, 18, 19, 64, 243, 148, 18, 19, 64, 243, 112, 18, 19, 187, 18, 19, + 230, 43, 18, 19, 228, 179, 18, 19, 137, 228, 179, 18, 19, 228, 177, 18, + 19, 137, 228, 177, 18, 19, 228, 176, 18, 19, 137, 228, 176, 18, 19, 228, + 174, 18, 19, 137, 228, 174, 18, 19, 228, 173, 18, 19, 137, 228, 173, 18, + 19, 228, 181, 18, 19, 137, 228, 181, 18, 19, 228, 180, 18, 19, 137, 228, + 180, 18, 19, 218, 89, 228, 180, 18, 19, 230, 59, 18, 19, 137, 230, 59, + 18, 19, 64, 243, 225, 18, 19, 222, 87, 18, 19, 222, 150, 18, 19, 221, + 205, 18, 19, 221, 194, 18, 19, 101, 18, 19, 221, 122, 18, 19, 218, 89, + 221, 122, 18, 19, 64, 249, 82, 18, 19, 64, 249, 15, 18, 19, 222, 155, 18, + 19, 222, 152, 18, 19, 220, 223, 18, 19, 137, 220, 223, 18, 19, 220, 208, + 18, 19, 137, 220, 208, 18, 19, 220, 207, 18, 19, 137, 220, 207, 18, 19, + 103, 18, 19, 137, 103, 18, 19, 220, 203, 18, 19, 137, 220, 203, 18, 19, + 220, 225, 18, 19, 137, 220, 225, 18, 19, 220, 224, 18, 19, 137, 220, 224, + 18, 19, 232, 207, 220, 224, 18, 19, 222, 201, 18, 19, 221, 26, 18, 19, + 221, 12, 18, 19, 221, 11, 18, 19, 221, 29, 18, 19, 236, 184, 18, 19, 237, + 2, 18, 19, 236, 113, 18, 19, 236, 105, 18, 19, 236, 57, 18, 19, 236, 41, + 18, 19, 218, 89, 236, 41, 18, 19, 175, 18, 19, 237, 5, 18, 19, 235, 231, + 18, 19, 137, 235, 231, 18, 19, 235, 229, 18, 19, 137, 235, 229, 18, 19, + 235, 228, 18, 19, 137, 235, 228, 18, 19, 235, 227, 18, 19, 137, 235, 227, + 18, 19, 235, 226, 18, 19, 137, 235, 226, 18, 19, 235, 234, 18, 19, 137, + 235, 234, 18, 19, 235, 233, 18, 19, 137, 235, 233, 18, 19, 232, 207, 235, + 233, 18, 19, 237, 17, 18, 19, 235, 235, 18, 19, 224, 5, 236, 178, 18, 19, + 224, 5, 236, 106, 18, 19, 224, 5, 236, 53, 18, 19, 224, 5, 236, 245, 18, + 19, 251, 99, 18, 19, 251, 167, 18, 19, 250, 235, 18, 19, 250, 225, 18, + 19, 250, 182, 18, 19, 250, 130, 18, 19, 218, 89, 250, 130, 18, 19, 251, + 169, 18, 19, 251, 168, 18, 19, 250, 64, 18, 19, 137, 250, 64, 18, 19, + 250, 62, 18, 19, 137, 250, 62, 18, 19, 250, 61, 18, 19, 137, 250, 61, 18, + 19, 250, 60, 18, 19, 137, 250, 60, 18, 19, 250, 59, 18, 19, 137, 250, 59, + 18, 19, 250, 66, 18, 19, 137, 250, 66, 18, 19, 250, 65, 18, 19, 137, 250, + 65, 18, 19, 232, 207, 250, 65, 18, 19, 251, 202, 18, 19, 226, 116, 222, + 37, 18, 19, 234, 25, 18, 19, 234, 117, 18, 19, 233, 196, 18, 19, 233, + 171, 18, 19, 233, 136, 18, 19, 233, 119, 18, 19, 218, 89, 233, 119, 18, + 19, 196, 18, 19, 234, 118, 18, 19, 233, 47, 18, 19, 137, 233, 47, 18, 19, + 233, 45, 18, 19, 137, 233, 45, 18, 19, 233, 44, 18, 19, 137, 233, 44, 18, + 19, 233, 43, 18, 19, 137, 233, 43, 18, 19, 233, 42, 18, 19, 137, 233, 42, + 18, 19, 233, 49, 18, 19, 137, 233, 49, 18, 19, 233, 48, 18, 19, 137, 233, + 48, 18, 19, 232, 207, 233, 48, 18, 19, 189, 18, 19, 137, 189, 18, 19, + 233, 199, 18, 19, 253, 243, 189, 18, 19, 226, 116, 189, 18, 19, 232, 141, + 18, 19, 232, 234, 18, 19, 232, 62, 18, 19, 232, 38, 18, 19, 231, 204, 18, + 19, 231, 195, 18, 19, 218, 89, 231, 195, 18, 19, 208, 18, 19, 232, 235, + 18, 19, 231, 83, 18, 19, 137, 231, 83, 18, 19, 231, 85, 18, 19, 137, 231, + 85, 18, 19, 231, 84, 18, 19, 137, 231, 84, 18, 19, 232, 207, 231, 84, 18, + 19, 207, 18, 19, 64, 232, 117, 18, 19, 232, 67, 18, 19, 235, 122, 18, 19, + 235, 186, 18, 19, 235, 67, 18, 19, 235, 55, 18, 19, 235, 12, 18, 19, 234, + 248, 18, 19, 218, 89, 234, 248, 18, 19, 235, 188, 18, 19, 235, 187, 18, + 19, 234, 204, 18, 19, 137, 234, 204, 18, 19, 234, 203, 18, 19, 137, 234, + 203, 18, 19, 234, 202, 18, 19, 137, 234, 202, 18, 19, 234, 201, 18, 19, + 137, 234, 201, 18, 19, 234, 200, 18, 19, 137, 234, 200, 18, 19, 234, 206, + 18, 19, 137, 234, 206, 18, 19, 234, 205, 18, 19, 137, 234, 205, 18, 19, + 153, 18, 19, 137, 153, 18, 19, 128, 153, 18, 19, 226, 94, 18, 19, 226, + 173, 18, 19, 224, 140, 18, 19, 224, 125, 18, 19, 224, 26, 18, 19, 224, + 14, 18, 19, 218, 89, 224, 14, 18, 19, 226, 177, 18, 19, 226, 175, 18, 19, + 223, 32, 18, 19, 137, 223, 32, 18, 19, 223, 29, 18, 19, 137, 223, 29, 18, + 19, 223, 28, 18, 19, 137, 223, 28, 18, 19, 223, 27, 18, 19, 137, 223, 27, + 18, 19, 223, 26, 18, 19, 137, 223, 26, 18, 19, 223, 36, 18, 19, 137, 223, + 36, 18, 19, 223, 35, 18, 19, 137, 223, 35, 18, 19, 232, 207, 223, 35, 18, + 19, 198, 18, 19, 253, 243, 198, 18, 19, 223, 37, 18, 19, 252, 50, 198, + 18, 19, 233, 116, 224, 66, 18, 19, 232, 207, 224, 59, 18, 19, 232, 207, + 226, 233, 18, 19, 232, 207, 223, 228, 18, 19, 232, 207, 223, 105, 18, 19, + 232, 207, 224, 58, 18, 19, 232, 207, 226, 97, 18, 19, 224, 246, 18, 19, + 224, 221, 18, 19, 224, 216, 18, 19, 224, 200, 18, 19, 224, 195, 18, 19, + 225, 25, 18, 19, 225, 21, 18, 19, 224, 155, 18, 19, 137, 224, 155, 18, + 19, 224, 154, 18, 19, 137, 224, 154, 18, 19, 224, 153, 18, 19, 137, 224, + 153, 18, 19, 224, 152, 18, 19, 137, 224, 152, 18, 19, 224, 151, 18, 19, + 137, 224, 151, 18, 19, 224, 157, 18, 19, 137, 224, 157, 18, 19, 224, 156, + 18, 19, 137, 224, 156, 18, 19, 225, 27, 18, 19, 218, 25, 18, 19, 218, 74, + 18, 19, 217, 250, 18, 19, 217, 242, 18, 19, 217, 231, 18, 19, 217, 216, + 18, 19, 218, 89, 217, 216, 18, 19, 184, 18, 19, 218, 76, 18, 19, 217, + 171, 18, 19, 137, 217, 171, 18, 19, 217, 170, 18, 19, 137, 217, 170, 18, + 19, 217, 169, 18, 19, 137, 217, 169, 18, 19, 217, 168, 18, 19, 137, 217, + 168, 18, 19, 217, 167, 18, 19, 137, 217, 167, 18, 19, 217, 173, 18, 19, + 137, 217, 173, 18, 19, 217, 172, 18, 19, 137, 217, 172, 18, 19, 232, 207, + 217, 172, 18, 19, 218, 90, 18, 19, 252, 82, 218, 90, 18, 19, 137, 218, + 90, 18, 19, 226, 116, 217, 250, 18, 19, 227, 216, 18, 19, 228, 38, 227, + 216, 18, 19, 137, 235, 122, 18, 19, 227, 255, 18, 19, 227, 147, 18, 19, + 227, 98, 18, 19, 227, 75, 18, 19, 227, 67, 18, 19, 137, 235, 12, 18, 19, + 203, 18, 19, 228, 0, 18, 19, 137, 235, 188, 18, 19, 226, 251, 18, 19, + 137, 226, 251, 18, 19, 152, 18, 19, 137, 152, 18, 19, 128, 152, 18, 19, + 245, 231, 18, 19, 246, 5, 18, 19, 245, 203, 18, 19, 245, 190, 18, 19, + 245, 139, 18, 19, 245, 134, 18, 19, 246, 8, 18, 19, 246, 7, 18, 19, 245, + 77, 18, 19, 137, 245, 77, 18, 19, 246, 74, 18, 19, 222, 22, 18, 19, 233, + 32, 222, 22, 18, 19, 222, 2, 18, 19, 233, 32, 222, 2, 18, 19, 221, 254, + 18, 19, 233, 32, 221, 254, 18, 19, 221, 239, 18, 19, 221, 236, 18, 19, + 222, 35, 18, 19, 222, 34, 18, 19, 221, 215, 18, 19, 137, 221, 215, 18, + 19, 222, 37, 18, 19, 221, 17, 18, 19, 221, 16, 18, 19, 221, 15, 18, 19, + 221, 19, 18, 19, 221, 20, 18, 19, 220, 201, 18, 19, 220, 200, 18, 19, + 220, 199, 18, 19, 220, 202, 18, 19, 231, 102, 243, 162, 18, 19, 231, 102, + 243, 112, 18, 19, 231, 102, 243, 97, 18, 19, 231, 102, 243, 4, 18, 19, + 231, 102, 242, 248, 18, 19, 231, 102, 155, 18, 19, 231, 102, 243, 211, + 18, 19, 231, 102, 243, 225, 18, 19, 231, 101, 243, 225, 18, 19, 243, 90, + 18, 19, 228, 151, 18, 19, 228, 121, 18, 19, 228, 116, 18, 19, 228, 110, + 18, 19, 228, 105, 18, 19, 228, 155, 18, 19, 228, 154, 18, 19, 228, 163, + 18, 19, 221, 151, 18, 19, 221, 149, 18, 19, 221, 148, 18, 19, 221, 152, + 18, 19, 137, 227, 216, 18, 19, 137, 227, 147, 18, 19, 137, 227, 75, 18, + 19, 137, 203, 18, 19, 232, 113, 18, 19, 232, 92, 18, 19, 232, 88, 18, 19, + 232, 84, 18, 19, 232, 80, 18, 19, 232, 115, 18, 19, 232, 114, 18, 19, + 232, 117, 18, 19, 231, 215, 18, 19, 226, 116, 224, 246, 18, 19, 226, 116, + 224, 221, 18, 19, 226, 116, 224, 200, 18, 19, 226, 116, 225, 25, 18, 19, + 218, 178, 222, 22, 18, 19, 218, 178, 222, 2, 18, 19, 218, 178, 221, 239, + 18, 19, 218, 178, 222, 35, 18, 19, 218, 178, 222, 37, 18, 19, 235, 73, + 18, 19, 235, 72, 18, 19, 235, 71, 18, 19, 235, 70, 18, 19, 235, 79, 18, + 19, 235, 78, 18, 19, 235, 80, 18, 19, 222, 36, 222, 22, 18, 19, 222, 36, + 222, 2, 18, 19, 222, 36, 221, 254, 18, 19, 222, 36, 221, 239, 18, 19, + 222, 36, 221, 236, 18, 19, 222, 36, 222, 35, 18, 19, 222, 36, 222, 34, + 18, 19, 222, 36, 222, 37, 18, 19, 254, 185, 253, 204, 18, 19, 252, 50, + 73, 18, 19, 252, 50, 72, 18, 19, 252, 50, 74, 18, 19, 252, 50, 60, 18, + 19, 252, 50, 218, 227, 18, 19, 252, 50, 218, 204, 18, 19, 252, 50, 218, + 187, 18, 19, 252, 50, 219, 7, 18, 19, 252, 50, 232, 141, 18, 19, 252, 50, + 232, 62, 18, 19, 252, 50, 231, 204, 18, 19, 252, 50, 208, 18, 19, 252, + 50, 236, 184, 18, 19, 252, 50, 236, 113, 18, 19, 252, 50, 236, 57, 18, + 19, 252, 50, 175, 18, 19, 226, 116, 243, 162, 18, 19, 226, 116, 243, 112, + 18, 19, 226, 116, 243, 4, 18, 19, 226, 116, 155, 18, 19, 64, 244, 109, + 18, 19, 64, 244, 112, 18, 19, 64, 244, 116, 18, 19, 64, 244, 115, 18, 19, + 64, 244, 113, 18, 19, 64, 244, 125, 18, 19, 64, 227, 22, 18, 19, 64, 227, + 75, 18, 19, 64, 227, 216, 18, 19, 64, 227, 200, 18, 19, 64, 227, 147, 18, + 19, 64, 203, 18, 19, 64, 218, 165, 18, 19, 64, 218, 187, 18, 19, 64, 218, + 227, 18, 19, 64, 218, 224, 18, 19, 64, 218, 204, 18, 19, 64, 219, 7, 18, + 19, 64, 242, 147, 18, 19, 64, 242, 148, 18, 19, 64, 242, 151, 18, 19, 64, + 242, 150, 18, 19, 64, 242, 149, 18, 19, 64, 242, 153, 18, 19, 64, 221, + 223, 18, 19, 64, 221, 239, 18, 19, 64, 222, 22, 18, 19, 64, 222, 21, 18, + 19, 64, 222, 2, 18, 19, 64, 222, 35, 18, 19, 64, 221, 3, 18, 19, 64, 221, + 11, 18, 19, 64, 221, 26, 18, 19, 64, 221, 25, 18, 19, 64, 221, 12, 18, + 19, 64, 221, 29, 18, 19, 64, 228, 202, 18, 19, 64, 229, 37, 18, 19, 64, + 229, 198, 18, 19, 64, 229, 191, 18, 19, 64, 229, 108, 18, 19, 64, 187, + 18, 19, 64, 230, 59, 18, 19, 64, 244, 17, 18, 19, 64, 244, 68, 18, 19, + 64, 244, 191, 18, 19, 64, 244, 184, 18, 19, 64, 244, 103, 18, 19, 64, + 245, 0, 18, 19, 64, 236, 120, 18, 19, 64, 236, 125, 18, 19, 64, 236, 137, + 18, 19, 64, 236, 136, 18, 19, 64, 236, 130, 18, 19, 64, 236, 149, 18, 19, + 64, 236, 69, 18, 19, 64, 236, 70, 18, 19, 64, 236, 73, 18, 19, 64, 236, + 72, 18, 19, 64, 236, 71, 18, 19, 64, 236, 74, 18, 19, 64, 236, 75, 18, + 19, 64, 231, 144, 18, 19, 64, 231, 204, 18, 19, 64, 232, 141, 18, 19, 64, + 232, 139, 18, 19, 64, 232, 62, 18, 19, 64, 208, 18, 19, 64, 233, 99, 18, + 19, 64, 233, 136, 18, 19, 64, 234, 25, 18, 19, 64, 234, 16, 18, 19, 64, + 233, 196, 18, 19, 64, 196, 18, 19, 64, 217, 200, 18, 19, 64, 217, 231, + 18, 19, 64, 218, 25, 18, 19, 64, 218, 22, 18, 19, 64, 217, 250, 18, 19, + 64, 184, 18, 19, 64, 237, 43, 18, 19, 226, 116, 237, 43, 18, 19, 64, 237, + 59, 18, 19, 64, 237, 114, 18, 19, 64, 237, 113, 18, 19, 64, 237, 98, 18, + 19, 226, 116, 237, 98, 18, 19, 64, 237, 123, 18, 19, 64, 237, 72, 18, 19, + 64, 237, 76, 18, 19, 64, 237, 86, 18, 19, 64, 237, 85, 18, 19, 64, 237, + 84, 18, 19, 64, 237, 87, 18, 19, 64, 234, 231, 18, 19, 64, 235, 12, 18, + 19, 64, 235, 122, 18, 19, 64, 235, 118, 18, 19, 64, 235, 67, 18, 19, 64, + 235, 188, 18, 19, 64, 248, 171, 18, 19, 64, 248, 172, 18, 19, 64, 248, + 175, 18, 19, 64, 248, 174, 18, 19, 64, 248, 173, 18, 19, 64, 248, 176, + 18, 19, 64, 235, 69, 18, 19, 64, 235, 71, 18, 19, 64, 235, 75, 18, 19, + 64, 235, 74, 18, 19, 64, 235, 73, 18, 19, 64, 235, 79, 18, 19, 64, 221, + 146, 18, 19, 64, 221, 148, 18, 19, 64, 221, 151, 18, 19, 64, 221, 150, + 18, 19, 64, 221, 149, 18, 19, 64, 221, 152, 18, 19, 64, 221, 142, 18, 19, + 64, 221, 143, 18, 19, 64, 221, 154, 18, 19, 64, 221, 153, 18, 19, 64, + 221, 144, 18, 19, 64, 221, 155, 18, 19, 64, 217, 13, 18, 19, 64, 217, 21, + 18, 19, 64, 217, 92, 18, 19, 64, 217, 90, 18, 19, 64, 217, 42, 18, 19, + 64, 217, 114, 18, 19, 64, 217, 157, 18, 19, 64, 66, 217, 157, 18, 19, 64, + 247, 65, 18, 19, 64, 247, 66, 18, 19, 64, 247, 73, 18, 19, 64, 247, 72, + 18, 19, 64, 247, 68, 18, 19, 64, 247, 74, 18, 19, 64, 223, 103, 18, 19, + 64, 224, 26, 18, 19, 64, 226, 94, 18, 19, 64, 226, 84, 18, 19, 64, 224, + 140, 18, 19, 64, 226, 177, 18, 19, 64, 224, 170, 18, 19, 64, 224, 200, + 18, 19, 64, 224, 246, 18, 19, 64, 224, 244, 18, 19, 64, 224, 221, 18, 19, + 64, 225, 25, 18, 19, 64, 225, 27, 18, 19, 64, 221, 36, 18, 19, 64, 221, + 38, 18, 19, 64, 221, 50, 18, 19, 64, 221, 49, 18, 19, 64, 221, 39, 18, + 19, 64, 221, 55, 18, 19, 64, 250, 253, 18, 19, 64, 251, 11, 18, 19, 64, + 251, 46, 18, 19, 64, 251, 43, 18, 19, 64, 251, 31, 18, 19, 64, 251, 69, + 18, 19, 64, 221, 5, 18, 19, 64, 221, 6, 18, 19, 64, 221, 9, 18, 19, 64, + 221, 8, 18, 19, 64, 221, 7, 18, 19, 64, 221, 10, 18, 19, 251, 32, 55, 18, + 19, 245, 90, 223, 136, 18, 19, 228, 147, 18, 19, 232, 112, 18, 19, 231, + 212, 18, 19, 231, 211, 18, 19, 231, 210, 18, 19, 231, 209, 18, 19, 231, + 214, 18, 19, 231, 213, 18, 19, 218, 178, 221, 213, 18, 19, 218, 178, 221, + 212, 18, 19, 218, 178, 221, 211, 18, 19, 218, 178, 221, 210, 18, 19, 218, + 178, 221, 209, 18, 19, 218, 178, 221, 216, 18, 19, 218, 178, 221, 215, + 18, 19, 218, 178, 39, 222, 37, 18, 19, 252, 50, 219, 40, 230, 164, 223, + 255, 78, 230, 164, 1, 252, 122, 230, 164, 1, 234, 222, 230, 164, 1, 245, + 230, 230, 164, 1, 226, 161, 230, 164, 1, 232, 25, 230, 164, 1, 220, 122, + 230, 164, 1, 249, 185, 230, 164, 1, 221, 173, 230, 164, 1, 250, 177, 230, + 164, 1, 251, 89, 230, 164, 1, 233, 91, 230, 164, 1, 244, 53, 230, 164, 1, + 232, 105, 230, 164, 1, 223, 131, 230, 164, 1, 227, 18, 230, 164, 1, 254, + 193, 230, 164, 1, 230, 131, 230, 164, 1, 220, 50, 230, 164, 1, 247, 14, + 230, 164, 1, 237, 165, 230, 164, 1, 247, 15, 230, 164, 1, 230, 105, 230, + 164, 1, 220, 103, 230, 164, 1, 238, 5, 230, 164, 1, 247, 12, 230, 164, 1, + 229, 184, 230, 164, 245, 229, 78, 230, 164, 210, 245, 229, 78, 157, 1, + 245, 220, 245, 212, 245, 232, 246, 74, 157, 1, 216, 216, 157, 1, 220, 36, + 220, 51, 68, 157, 1, 217, 202, 157, 1, 218, 90, 157, 1, 219, 40, 157, 1, + 221, 218, 221, 217, 221, 234, 157, 1, 246, 118, 157, 1, 254, 106, 60, + 157, 1, 230, 94, 74, 157, 1, 255, 3, 60, 157, 1, 254, 219, 157, 1, 234, + 254, 74, 157, 1, 224, 185, 74, 157, 1, 74, 157, 1, 230, 167, 157, 1, 230, + 138, 157, 1, 227, 244, 227, 253, 227, 195, 152, 157, 1, 236, 195, 157, 1, + 251, 87, 157, 1, 236, 196, 237, 17, 157, 1, 245, 67, 157, 1, 246, 185, + 157, 1, 244, 187, 243, 231, 245, 67, 157, 1, 244, 220, 157, 1, 218, 160, + 218, 155, 219, 40, 157, 1, 243, 203, 243, 225, 157, 1, 243, 207, 243, + 225, 157, 1, 235, 0, 243, 225, 157, 1, 224, 188, 243, 225, 157, 1, 232, + 203, 231, 74, 232, 204, 207, 157, 1, 224, 186, 207, 157, 1, 247, 140, + 157, 1, 237, 148, 237, 152, 237, 142, 72, 157, 1, 73, 157, 1, 237, 106, + 237, 126, 157, 1, 244, 173, 157, 1, 235, 1, 254, 234, 157, 1, 224, 190, + 60, 157, 1, 237, 135, 246, 164, 157, 1, 229, 155, 229, 173, 230, 59, 157, + 1, 254, 162, 246, 163, 157, 1, 224, 3, 198, 157, 1, 224, 129, 234, 253, + 198, 157, 1, 224, 184, 198, 157, 1, 251, 202, 157, 1, 217, 157, 157, 1, + 221, 159, 221, 166, 220, 190, 222, 201, 157, 1, 224, 183, 222, 201, 157, + 1, 250, 46, 157, 1, 252, 107, 252, 110, 252, 56, 253, 204, 157, 1, 224, + 189, 253, 204, 157, 1, 247, 139, 157, 1, 230, 115, 157, 1, 246, 238, 246, + 240, 73, 157, 1, 234, 81, 234, 87, 189, 157, 1, 234, 255, 189, 157, 1, + 224, 187, 189, 157, 1, 235, 136, 235, 171, 235, 4, 153, 157, 1, 247, 141, + 157, 1, 237, 203, 157, 1, 237, 204, 157, 1, 249, 196, 249, 201, 250, 46, + 157, 1, 230, 90, 246, 117, 74, 157, 1, 247, 11, 157, 1, 237, 164, 157, 1, + 250, 63, 157, 1, 251, 160, 157, 1, 251, 98, 157, 1, 223, 161, 157, 1, + 234, 252, 157, 1, 224, 182, 157, 1, 242, 64, 157, 1, 228, 163, 157, 1, + 218, 151, 157, 224, 109, 228, 196, 157, 233, 85, 228, 196, 157, 250, 101, + 228, 196, 157, 254, 33, 100, 157, 220, 227, 100, 157, 252, 121, 100, 222, + 140, 1, 60, 222, 140, 1, 72, 222, 140, 1, 68, 222, 140, 1, 175, 222, 140, + 1, 245, 0, 222, 140, 1, 232, 115, 222, 140, 1, 222, 155, 222, 140, 1, + 249, 207, 222, 140, 1, 208, 222, 140, 1, 187, 222, 140, 1, 252, 237, 222, + 140, 1, 196, 222, 140, 1, 184, 222, 140, 1, 235, 188, 222, 140, 1, 219, + 7, 222, 140, 1, 226, 177, 222, 140, 1, 155, 222, 140, 29, 5, 72, 222, + 140, 29, 5, 68, 222, 140, 5, 219, 82, 243, 184, 1, 60, 243, 184, 1, 72, + 243, 184, 1, 68, 243, 184, 1, 175, 243, 184, 1, 245, 0, 243, 184, 1, 232, + 115, 243, 184, 1, 222, 155, 243, 184, 1, 249, 207, 243, 184, 1, 208, 243, + 184, 1, 187, 243, 184, 1, 252, 237, 243, 184, 1, 196, 243, 184, 1, 184, + 243, 184, 1, 203, 243, 184, 1, 235, 188, 243, 184, 1, 219, 7, 243, 184, + 1, 226, 177, 243, 184, 1, 155, 243, 184, 29, 5, 72, 243, 184, 29, 5, 68, + 243, 184, 5, 230, 14, 229, 122, 224, 109, 228, 196, 229, 122, 51, 228, + 196, 251, 245, 1, 60, 251, 245, 1, 72, 251, 245, 1, 68, 251, 245, 1, 175, + 251, 245, 1, 245, 0, 251, 245, 1, 232, 115, 251, 245, 1, 222, 155, 251, + 245, 1, 249, 207, 251, 245, 1, 208, 251, 245, 1, 187, 251, 245, 1, 252, + 237, 251, 245, 1, 196, 251, 245, 1, 184, 251, 245, 1, 203, 251, 245, 1, + 235, 188, 251, 245, 1, 219, 7, 251, 245, 1, 226, 177, 251, 245, 1, 155, + 251, 245, 29, 5, 72, 251, 245, 29, 5, 68, 222, 139, 1, 60, 222, 139, 1, + 72, 222, 139, 1, 68, 222, 139, 1, 175, 222, 139, 1, 245, 0, 222, 139, 1, + 232, 115, 222, 139, 1, 222, 155, 222, 139, 1, 249, 207, 222, 139, 1, 208, + 222, 139, 1, 187, 222, 139, 1, 252, 237, 222, 139, 1, 196, 222, 139, 1, + 184, 222, 139, 1, 235, 188, 222, 139, 1, 219, 7, 222, 139, 1, 226, 177, + 222, 139, 29, 5, 72, 222, 139, 29, 5, 68, 79, 1, 175, 79, 1, 236, 149, + 79, 1, 236, 57, 79, 1, 236, 125, 79, 1, 232, 84, 79, 1, 251, 169, 79, 1, + 251, 69, 79, 1, 250, 182, 79, 1, 251, 11, 79, 1, 231, 56, 79, 1, 249, + 207, 79, 1, 221, 19, 79, 1, 248, 167, 79, 1, 221, 15, 79, 1, 231, 207, + 79, 1, 222, 155, 79, 1, 222, 35, 79, 1, 101, 79, 1, 221, 239, 79, 1, 231, + 204, 79, 1, 252, 237, 79, 1, 229, 141, 79, 1, 229, 37, 79, 1, 229, 118, + 79, 1, 233, 136, 79, 1, 217, 231, 79, 1, 227, 75, 79, 1, 235, 12, 79, 1, + 219, 72, 79, 1, 225, 25, 79, 1, 223, 182, 79, 1, 226, 177, 79, 1, 155, + 79, 1, 235, 188, 79, 1, 228, 155, 79, 237, 214, 29, 228, 141, 79, 237, + 214, 29, 228, 154, 79, 237, 214, 29, 228, 121, 79, 237, 214, 29, 228, + 116, 79, 237, 214, 29, 228, 98, 79, 237, 214, 29, 228, 73, 79, 237, 214, + 29, 228, 61, 79, 237, 214, 29, 228, 60, 79, 237, 214, 29, 226, 243, 79, + 237, 214, 29, 226, 236, 79, 237, 214, 29, 234, 198, 79, 237, 214, 29, + 234, 189, 79, 237, 214, 29, 228, 136, 79, 237, 214, 29, 228, 147, 79, + 237, 214, 29, 228, 106, 220, 198, 107, 79, 237, 214, 29, 228, 106, 220, + 198, 103, 79, 237, 214, 29, 228, 137, 79, 29, 237, 202, 254, 69, 79, 29, + 237, 202, 255, 58, 79, 29, 5, 255, 58, 79, 29, 5, 72, 79, 29, 5, 237, + 255, 79, 29, 5, 218, 90, 79, 29, 5, 217, 166, 79, 29, 5, 68, 79, 29, 5, + 220, 23, 79, 29, 5, 220, 123, 79, 29, 5, 230, 167, 79, 29, 5, 184, 79, + 29, 5, 238, 26, 79, 29, 5, 73, 79, 29, 5, 254, 234, 79, 29, 5, 254, 196, + 79, 29, 5, 230, 127, 79, 29, 5, 253, 232, 79, 5, 232, 37, 79, 5, 227, + 214, 79, 5, 217, 176, 79, 5, 233, 55, 79, 5, 221, 80, 79, 5, 252, 203, + 79, 5, 227, 71, 79, 5, 221, 138, 79, 5, 236, 239, 79, 5, 254, 198, 79, 5, + 226, 141, 226, 137, 79, 5, 219, 79, 79, 5, 250, 179, 79, 5, 252, 183, 79, + 5, 236, 142, 79, 5, 252, 199, 79, 5, 251, 156, 229, 77, 235, 239, 79, 5, + 235, 100, 221, 122, 79, 5, 252, 96, 79, 5, 229, 120, 233, 97, 79, 5, 236, + 40, 79, 250, 78, 16, 227, 142, 79, 5, 253, 218, 79, 5, 253, 235, 79, 20, + 217, 84, 79, 20, 107, 79, 20, 103, 79, 20, 160, 79, 20, 154, 79, 20, 174, + 79, 20, 182, 79, 20, 191, 79, 20, 185, 79, 20, 190, 79, 16, 235, 100, + 253, 237, 224, 16, 79, 16, 235, 100, 253, 237, 233, 72, 79, 16, 235, 100, + 253, 237, 229, 76, 79, 16, 235, 100, 253, 237, 252, 123, 79, 16, 235, + 100, 253, 237, 251, 233, 79, 16, 235, 100, 253, 237, 229, 1, 79, 16, 235, + 100, 253, 237, 228, 251, 79, 16, 235, 100, 253, 237, 228, 249, 79, 16, + 235, 100, 253, 237, 228, 255, 79, 16, 235, 100, 253, 237, 228, 253, 77, + 252, 66, 77, 246, 208, 77, 250, 168, 77, 245, 90, 223, 136, 77, 250, 175, + 77, 245, 116, 248, 143, 77, 221, 137, 224, 21, 242, 121, 77, 224, 139, 4, + 252, 26, 234, 63, 77, 234, 84, 250, 168, 77, 234, 84, 245, 90, 223, 136, + 77, 232, 23, 77, 245, 103, 41, 226, 74, 107, 77, 245, 103, 41, 226, 74, + 103, 77, 245, 103, 41, 226, 74, 160, 77, 29, 225, 54, 77, 20, 217, 84, + 77, 20, 107, 77, 20, 103, 77, 20, 160, 77, 20, 154, 77, 20, 174, 77, 20, + 182, 77, 20, 191, 77, 20, 185, 77, 20, 190, 77, 1, 60, 77, 1, 73, 77, 1, + 72, 77, 1, 74, 77, 1, 68, 77, 1, 230, 167, 77, 1, 220, 110, 77, 1, 246, + 250, 77, 1, 208, 77, 1, 254, 123, 77, 1, 252, 237, 77, 1, 187, 77, 1, + 228, 155, 77, 1, 245, 0, 77, 1, 196, 77, 1, 235, 188, 77, 1, 226, 177, + 77, 1, 225, 25, 77, 1, 222, 155, 77, 1, 249, 207, 77, 1, 251, 69, 77, 1, + 237, 123, 77, 1, 184, 77, 1, 203, 77, 1, 219, 7, 77, 1, 246, 8, 77, 1, + 175, 77, 1, 236, 149, 77, 1, 221, 55, 77, 1, 217, 114, 77, 1, 243, 211, + 77, 1, 217, 14, 77, 1, 235, 79, 77, 1, 217, 67, 77, 1, 251, 31, 77, 1, + 221, 137, 171, 29, 55, 77, 1, 221, 137, 73, 77, 1, 221, 137, 72, 77, 1, + 221, 137, 74, 77, 1, 221, 137, 68, 77, 1, 221, 137, 230, 167, 77, 1, 221, + 137, 220, 110, 77, 1, 221, 137, 254, 123, 77, 1, 221, 137, 252, 237, 77, + 1, 221, 137, 187, 77, 1, 221, 137, 228, 155, 77, 1, 221, 137, 245, 0, 77, + 1, 221, 137, 196, 77, 1, 221, 137, 222, 155, 77, 1, 221, 137, 249, 207, + 77, 1, 221, 137, 251, 69, 77, 1, 221, 137, 237, 123, 77, 1, 221, 137, + 221, 55, 77, 1, 221, 137, 184, 77, 1, 221, 137, 219, 7, 77, 1, 221, 137, + 175, 77, 1, 221, 137, 244, 253, 77, 1, 221, 137, 243, 211, 77, 1, 221, + 137, 237, 97, 77, 1, 221, 137, 232, 60, 77, 1, 221, 137, 247, 74, 77, 1, + 224, 139, 73, 77, 1, 224, 139, 72, 77, 1, 224, 139, 237, 133, 77, 1, 224, + 139, 220, 110, 77, 1, 224, 139, 68, 77, 1, 224, 139, 254, 123, 77, 1, + 224, 139, 175, 77, 1, 224, 139, 245, 0, 77, 1, 224, 139, 155, 77, 1, 224, + 139, 187, 77, 1, 224, 139, 225, 25, 77, 1, 224, 139, 222, 155, 77, 1, + 224, 139, 249, 207, 77, 1, 224, 139, 237, 123, 77, 1, 224, 139, 246, 8, + 77, 1, 224, 139, 244, 253, 77, 1, 224, 139, 243, 211, 77, 1, 224, 139, + 221, 55, 77, 1, 224, 139, 217, 114, 77, 1, 224, 139, 228, 0, 77, 1, 224, + 139, 251, 69, 77, 1, 224, 139, 217, 80, 77, 1, 234, 84, 72, 77, 1, 234, + 84, 175, 77, 1, 234, 84, 203, 77, 1, 234, 84, 246, 8, 77, 1, 234, 84, + 217, 80, 77, 1, 254, 161, 244, 238, 254, 96, 107, 77, 1, 254, 161, 244, + 238, 219, 78, 107, 77, 1, 254, 161, 244, 238, 249, 174, 77, 1, 254, 161, + 244, 238, 220, 120, 77, 1, 254, 161, 244, 238, 237, 170, 220, 120, 77, 1, + 254, 161, 244, 238, 252, 212, 77, 1, 254, 161, 244, 238, 148, 252, 212, + 77, 1, 254, 161, 244, 238, 60, 77, 1, 254, 161, 244, 238, 72, 77, 1, 254, + 161, 244, 238, 175, 77, 1, 254, 161, 244, 238, 232, 115, 77, 1, 254, 161, + 244, 238, 251, 169, 77, 1, 254, 161, 244, 238, 221, 29, 77, 1, 254, 161, + 244, 238, 221, 19, 77, 1, 254, 161, 244, 238, 249, 132, 77, 1, 254, 161, + 244, 238, 231, 217, 77, 1, 254, 161, 244, 238, 222, 155, 77, 1, 254, 161, + 244, 238, 249, 207, 77, 1, 254, 161, 244, 238, 187, 77, 1, 254, 161, 244, + 238, 229, 141, 77, 1, 254, 161, 244, 238, 223, 218, 77, 1, 254, 161, 244, + 238, 217, 80, 77, 1, 254, 161, 244, 238, 217, 114, 77, 1, 254, 161, 244, + 238, 254, 202, 77, 1, 221, 137, 254, 161, 244, 238, 222, 155, 77, 1, 221, + 137, 254, 161, 244, 238, 217, 80, 77, 1, 234, 84, 254, 161, 244, 238, + 244, 125, 77, 1, 234, 84, 254, 161, 244, 238, 232, 115, 77, 1, 234, 84, + 254, 161, 244, 238, 251, 169, 77, 1, 234, 84, 254, 161, 244, 238, 237, + 103, 77, 1, 234, 84, 254, 161, 244, 238, 221, 29, 77, 1, 234, 84, 254, + 161, 244, 238, 249, 116, 77, 1, 234, 84, 254, 161, 244, 238, 222, 155, + 77, 1, 234, 84, 254, 161, 244, 238, 249, 36, 77, 1, 234, 84, 254, 161, + 244, 238, 223, 218, 77, 1, 234, 84, 254, 161, 244, 238, 250, 57, 77, 1, + 234, 84, 254, 161, 244, 238, 217, 80, 77, 1, 234, 84, 254, 161, 244, 238, + 217, 114, 77, 1, 254, 161, 244, 238, 144, 68, 77, 1, 254, 161, 244, 238, + 144, 184, 77, 1, 234, 84, 254, 161, 244, 238, 252, 94, 77, 1, 254, 161, + 244, 238, 249, 197, 77, 1, 234, 84, 254, 161, 244, 238, 235, 79, 18, 19, + 230, 63, 18, 19, 253, 212, 18, 19, 255, 14, 18, 19, 218, 229, 18, 19, + 229, 7, 18, 19, 229, 205, 18, 19, 228, 172, 18, 19, 222, 96, 18, 19, 236, + 191, 18, 19, 235, 232, 18, 19, 234, 45, 18, 19, 231, 172, 18, 19, 232, + 199, 18, 19, 235, 132, 18, 19, 224, 1, 18, 19, 226, 118, 18, 19, 224, + 175, 18, 19, 224, 249, 18, 19, 224, 150, 18, 19, 217, 208, 18, 19, 218, + 30, 18, 19, 227, 222, 18, 19, 231, 82, 18, 19, 230, 155, 231, 82, 18, 19, + 231, 81, 18, 19, 230, 155, 231, 81, 18, 19, 231, 80, 18, 19, 230, 155, + 231, 80, 18, 19, 231, 79, 18, 19, 230, 155, 231, 79, 18, 19, 226, 248, + 18, 19, 226, 247, 18, 19, 226, 246, 18, 19, 226, 245, 18, 19, 226, 244, + 18, 19, 226, 252, 18, 19, 230, 155, 230, 59, 18, 19, 230, 155, 222, 201, + 18, 19, 230, 155, 237, 17, 18, 19, 230, 155, 251, 202, 18, 19, 230, 155, + 189, 18, 19, 230, 155, 207, 18, 19, 230, 155, 198, 18, 19, 230, 155, 225, + 27, 18, 19, 247, 4, 219, 40, 18, 19, 218, 215, 219, 40, 18, 19, 39, 3, + 227, 93, 18, 19, 39, 227, 241, 248, 145, 18, 19, 228, 38, 226, 249, 18, + 19, 137, 234, 248, 18, 19, 137, 235, 187, 18, 19, 221, 214, 18, 19, 221, + 216, 18, 19, 221, 13, 18, 19, 221, 14, 18, 19, 221, 18, 18, 19, 221, 145, + 18, 19, 221, 147, 18, 19, 226, 116, 224, 155, 18, 19, 226, 116, 224, 195, + 18, 19, 226, 116, 242, 248, 18, 19, 64, 243, 238, 18, 19, 64, 249, 60, + 244, 184, 18, 19, 64, 244, 253, 18, 19, 64, 243, 243, 18, 19, 226, 116, + 237, 27, 18, 19, 64, 237, 25, 18, 19, 252, 139, 249, 60, 153, 18, 19, + 252, 139, 249, 60, 152, 18, 19, 64, 249, 55, 198, 195, 219, 59, 235, 84, + 195, 1, 175, 195, 1, 236, 149, 195, 1, 245, 0, 195, 1, 244, 125, 195, 1, + 232, 115, 195, 1, 251, 169, 195, 1, 251, 69, 195, 1, 237, 123, 195, 1, + 237, 103, 195, 1, 218, 47, 195, 1, 222, 155, 195, 1, 222, 35, 195, 1, + 249, 207, 195, 1, 249, 36, 195, 1, 208, 195, 1, 187, 195, 1, 229, 141, + 195, 1, 252, 237, 195, 1, 252, 94, 195, 1, 196, 195, 1, 184, 195, 1, 203, + 195, 1, 235, 188, 195, 1, 219, 7, 195, 1, 225, 25, 195, 1, 223, 218, 195, + 1, 226, 177, 195, 1, 155, 195, 29, 5, 60, 195, 29, 5, 72, 195, 29, 5, 68, + 195, 29, 5, 246, 250, 195, 29, 5, 254, 196, 195, 29, 5, 230, 127, 195, + 29, 5, 253, 232, 195, 29, 5, 73, 195, 29, 5, 74, 195, 223, 97, 1, 184, + 195, 223, 97, 1, 203, 195, 223, 97, 1, 219, 7, 195, 3, 1, 175, 195, 3, 1, + 232, 115, 195, 3, 1, 254, 95, 195, 3, 1, 222, 155, 195, 3, 1, 208, 195, + 3, 1, 187, 195, 3, 1, 196, 195, 3, 1, 203, 195, 3, 1, 235, 188, 195, 5, + 233, 89, 195, 5, 236, 173, 195, 5, 226, 176, 195, 5, 234, 248, 195, 246, + 95, 78, 195, 228, 82, 78, 195, 20, 217, 84, 195, 20, 107, 195, 20, 103, + 195, 20, 160, 195, 20, 154, 195, 20, 174, 195, 20, 182, 195, 20, 191, + 195, 20, 185, 195, 20, 190, 37, 235, 123, 1, 175, 37, 235, 123, 1, 218, + 138, 37, 235, 123, 1, 232, 115, 37, 235, 123, 1, 221, 55, 37, 235, 123, + 1, 226, 177, 37, 235, 123, 1, 184, 37, 235, 123, 1, 222, 155, 37, 235, + 123, 1, 222, 35, 37, 235, 123, 1, 235, 188, 37, 235, 123, 1, 187, 37, + 235, 123, 1, 229, 141, 37, 235, 123, 1, 196, 37, 235, 123, 1, 246, 8, 37, + 235, 123, 1, 219, 189, 37, 235, 123, 1, 155, 37, 235, 123, 1, 228, 155, + 37, 235, 123, 1, 236, 149, 37, 235, 123, 1, 221, 47, 37, 235, 123, 1, + 208, 37, 235, 123, 1, 60, 37, 235, 123, 1, 72, 37, 235, 123, 1, 246, 250, + 37, 235, 123, 1, 246, 239, 37, 235, 123, 1, 68, 37, 235, 123, 1, 230, + 127, 37, 235, 123, 1, 74, 37, 235, 123, 1, 220, 110, 37, 235, 123, 1, 73, + 37, 235, 123, 1, 253, 231, 37, 235, 123, 1, 254, 196, 37, 235, 123, 1, + 221, 130, 37, 235, 123, 1, 221, 129, 37, 235, 123, 1, 221, 128, 37, 235, + 123, 1, 221, 127, 37, 235, 123, 1, 221, 126, 146, 37, 151, 1, 116, 228, + 155, 146, 37, 151, 1, 109, 228, 155, 146, 37, 151, 1, 116, 175, 146, 37, + 151, 1, 116, 218, 138, 146, 37, 151, 1, 116, 232, 115, 146, 37, 151, 1, + 109, 175, 146, 37, 151, 1, 109, 218, 138, 146, 37, 151, 1, 109, 232, 115, + 146, 37, 151, 1, 116, 221, 55, 146, 37, 151, 1, 116, 226, 177, 146, 37, + 151, 1, 116, 184, 146, 37, 151, 1, 109, 221, 55, 146, 37, 151, 1, 109, + 226, 177, 146, 37, 151, 1, 109, 184, 146, 37, 151, 1, 116, 222, 155, 146, + 37, 151, 1, 116, 222, 35, 146, 37, 151, 1, 116, 208, 146, 37, 151, 1, + 109, 222, 155, 146, 37, 151, 1, 109, 222, 35, 146, 37, 151, 1, 109, 208, + 146, 37, 151, 1, 116, 187, 146, 37, 151, 1, 116, 229, 141, 146, 37, 151, + 1, 116, 196, 146, 37, 151, 1, 109, 187, 146, 37, 151, 1, 109, 229, 141, + 146, 37, 151, 1, 109, 196, 146, 37, 151, 1, 116, 246, 8, 146, 37, 151, 1, + 116, 219, 189, 146, 37, 151, 1, 116, 235, 188, 146, 37, 151, 1, 109, 246, + 8, 146, 37, 151, 1, 109, 219, 189, 146, 37, 151, 1, 109, 235, 188, 146, + 37, 151, 1, 116, 155, 146, 37, 151, 1, 116, 249, 207, 146, 37, 151, 1, + 116, 252, 237, 146, 37, 151, 1, 109, 155, 146, 37, 151, 1, 109, 249, 207, + 146, 37, 151, 1, 109, 252, 237, 146, 37, 151, 1, 116, 235, 236, 146, 37, + 151, 1, 116, 218, 111, 146, 37, 151, 1, 109, 235, 236, 146, 37, 151, 1, + 109, 218, 111, 146, 37, 151, 1, 116, 223, 102, 146, 37, 151, 1, 109, 223, + 102, 146, 37, 151, 29, 5, 29, 224, 181, 146, 37, 151, 29, 5, 255, 58, + 146, 37, 151, 29, 5, 237, 255, 146, 37, 151, 29, 5, 68, 146, 37, 151, 29, + 5, 220, 23, 146, 37, 151, 29, 5, 73, 146, 37, 151, 29, 5, 254, 234, 146, + 37, 151, 29, 5, 74, 146, 37, 151, 29, 5, 230, 185, 146, 37, 151, 29, 5, + 220, 110, 146, 37, 151, 29, 5, 253, 212, 146, 37, 151, 29, 5, 255, 14, + 146, 37, 151, 29, 5, 220, 16, 146, 37, 151, 29, 5, 230, 63, 146, 37, 151, + 29, 5, 230, 182, 146, 37, 151, 29, 5, 220, 107, 146, 37, 151, 29, 5, 237, + 133, 146, 37, 151, 1, 39, 216, 216, 146, 37, 151, 1, 39, 232, 117, 146, + 37, 151, 1, 39, 207, 146, 37, 151, 1, 39, 189, 146, 37, 151, 1, 39, 237, + 17, 146, 37, 151, 1, 39, 250, 46, 146, 37, 151, 1, 39, 253, 204, 146, 37, + 151, 145, 234, 67, 146, 37, 151, 145, 234, 66, 146, 37, 151, 20, 217, 84, + 146, 37, 151, 20, 107, 146, 37, 151, 20, 103, 146, 37, 151, 20, 160, 146, + 37, 151, 20, 154, 146, 37, 151, 20, 174, 146, 37, 151, 20, 182, 146, 37, + 151, 20, 191, 146, 37, 151, 20, 185, 146, 37, 151, 20, 190, 146, 37, 151, + 83, 20, 107, 146, 37, 151, 5, 235, 177, 146, 37, 151, 5, 235, 176, 79, + 16, 229, 211, 79, 16, 233, 73, 236, 55, 79, 16, 229, 77, 236, 55, 79, 16, + 252, 124, 236, 55, 79, 16, 251, 234, 236, 55, 79, 16, 229, 2, 236, 55, + 79, 16, 228, 252, 236, 55, 79, 16, 228, 250, 236, 55, 79, 16, 229, 0, + 236, 55, 79, 16, 228, 254, 236, 55, 79, 16, 249, 163, 236, 55, 79, 16, + 249, 159, 236, 55, 79, 16, 249, 158, 236, 55, 79, 16, 249, 161, 236, 55, + 79, 16, 249, 160, 236, 55, 79, 16, 249, 157, 236, 55, 79, 16, 220, 230, + 79, 16, 233, 73, 227, 70, 79, 16, 229, 77, 227, 70, 79, 16, 252, 124, + 227, 70, 79, 16, 251, 234, 227, 70, 79, 16, 229, 2, 227, 70, 79, 16, 228, + 252, 227, 70, 79, 16, 228, 250, 227, 70, 79, 16, 229, 0, 227, 70, 79, 16, + 228, 254, 227, 70, 79, 16, 249, 163, 227, 70, 79, 16, 249, 159, 227, 70, + 79, 16, 249, 158, 227, 70, 79, 16, 249, 161, 227, 70, 79, 16, 249, 160, + 227, 70, 79, 16, 249, 157, 227, 70, 251, 246, 1, 175, 251, 246, 1, 245, + 0, 251, 246, 1, 232, 115, 251, 246, 1, 232, 87, 251, 246, 1, 187, 251, + 246, 1, 252, 237, 251, 246, 1, 196, 251, 246, 1, 233, 102, 251, 246, 1, + 222, 155, 251, 246, 1, 249, 207, 251, 246, 1, 208, 251, 246, 1, 231, 171, + 251, 246, 1, 251, 169, 251, 246, 1, 237, 123, 251, 246, 1, 231, 77, 251, + 246, 1, 231, 75, 251, 246, 1, 184, 251, 246, 1, 203, 251, 246, 1, 235, + 188, 251, 246, 1, 219, 189, 251, 246, 1, 226, 177, 251, 246, 1, 60, 251, + 246, 1, 155, 251, 246, 29, 5, 72, 251, 246, 29, 5, 68, 251, 246, 29, 5, + 73, 251, 246, 29, 5, 74, 251, 246, 29, 5, 254, 234, 251, 246, 230, 24, + 251, 246, 246, 190, 117, 226, 86, 37, 83, 1, 116, 175, 37, 83, 1, 116, + 236, 149, 37, 83, 1, 116, 235, 224, 37, 83, 1, 109, 175, 37, 83, 1, 109, + 235, 224, 37, 83, 1, 109, 236, 149, 37, 83, 1, 232, 115, 37, 83, 1, 116, + 251, 169, 37, 83, 1, 116, 251, 69, 37, 83, 1, 109, 251, 169, 37, 83, 1, + 109, 226, 177, 37, 83, 1, 109, 251, 69, 37, 83, 1, 231, 77, 37, 83, 1, + 227, 227, 37, 83, 1, 116, 227, 225, 37, 83, 1, 249, 207, 37, 83, 1, 109, + 227, 225, 37, 83, 1, 227, 235, 37, 83, 1, 116, 222, 155, 37, 83, 1, 116, + 222, 35, 37, 83, 1, 109, 222, 155, 37, 83, 1, 109, 222, 35, 37, 83, 1, + 208, 37, 83, 1, 252, 237, 37, 83, 1, 116, 187, 37, 83, 1, 116, 229, 141, + 37, 83, 1, 116, 246, 8, 37, 83, 1, 109, 187, 37, 83, 1, 109, 246, 8, 37, + 83, 1, 109, 229, 141, 37, 83, 1, 196, 37, 83, 1, 109, 184, 37, 83, 1, + 116, 184, 37, 83, 1, 203, 37, 83, 1, 227, 19, 37, 83, 1, 235, 188, 37, + 83, 1, 234, 227, 37, 83, 1, 219, 7, 37, 83, 1, 116, 225, 25, 37, 83, 1, + 116, 223, 218, 37, 83, 1, 116, 226, 177, 37, 83, 1, 116, 155, 37, 83, 1, + 235, 17, 37, 83, 1, 60, 37, 83, 1, 109, 155, 37, 83, 1, 72, 37, 83, 1, + 237, 255, 37, 83, 1, 68, 37, 83, 1, 220, 23, 37, 83, 1, 246, 250, 37, 83, + 1, 230, 127, 37, 83, 1, 235, 177, 37, 83, 1, 244, 32, 226, 177, 37, 83, + 250, 147, 5, 128, 203, 37, 83, 250, 147, 5, 128, 235, 188, 37, 83, 250, + 147, 5, 235, 189, 222, 118, 235, 167, 37, 83, 5, 234, 100, 236, 230, 235, + 167, 37, 83, 250, 147, 5, 39, 232, 115, 37, 83, 250, 147, 5, 109, 187, + 37, 83, 250, 147, 5, 116, 227, 226, 156, 109, 187, 37, 83, 250, 147, 5, + 196, 37, 83, 250, 147, 5, 252, 237, 37, 83, 250, 147, 5, 226, 177, 37, + 83, 5, 226, 158, 37, 83, 29, 5, 60, 37, 83, 29, 5, 234, 100, 226, 127, + 37, 83, 29, 5, 255, 58, 37, 83, 29, 5, 222, 123, 255, 58, 37, 83, 29, 5, + 72, 37, 83, 29, 5, 237, 255, 37, 83, 29, 5, 220, 110, 37, 83, 29, 5, 220, + 22, 37, 83, 29, 5, 68, 37, 83, 29, 5, 220, 23, 37, 83, 29, 5, 74, 37, 83, + 29, 5, 230, 186, 56, 37, 83, 29, 5, 230, 63, 37, 83, 29, 5, 73, 37, 83, + 29, 5, 254, 234, 37, 83, 29, 5, 230, 127, 37, 83, 29, 5, 254, 196, 37, + 83, 29, 5, 83, 254, 196, 37, 83, 29, 5, 230, 186, 50, 37, 83, 5, 234, + 100, 236, 229, 37, 83, 5, 221, 131, 37, 83, 5, 221, 130, 37, 83, 5, 236, + 118, 221, 129, 37, 83, 5, 236, 118, 221, 128, 37, 83, 5, 236, 118, 221, + 127, 37, 83, 5, 228, 3, 243, 210, 37, 83, 5, 234, 100, 226, 148, 37, 83, + 5, 236, 117, 236, 215, 37, 83, 36, 250, 93, 248, 145, 37, 83, 242, 243, + 20, 217, 84, 37, 83, 242, 243, 20, 107, 37, 83, 242, 243, 20, 103, 37, + 83, 242, 243, 20, 160, 37, 83, 242, 243, 20, 154, 37, 83, 242, 243, 20, + 174, 37, 83, 242, 243, 20, 182, 37, 83, 242, 243, 20, 191, 37, 83, 242, + 243, 20, 185, 37, 83, 242, 243, 20, 190, 37, 83, 83, 20, 217, 84, 37, 83, + 83, 20, 107, 37, 83, 83, 20, 103, 37, 83, 83, 20, 160, 37, 83, 83, 20, + 154, 37, 83, 83, 20, 174, 37, 83, 83, 20, 182, 37, 83, 83, 20, 191, 37, + 83, 83, 20, 185, 37, 83, 83, 20, 190, 37, 83, 5, 218, 203, 37, 83, 5, + 218, 202, 37, 83, 5, 226, 121, 37, 83, 5, 236, 163, 37, 83, 5, 242, 180, + 37, 83, 5, 248, 157, 37, 83, 5, 210, 227, 59, 227, 235, 37, 83, 5, 234, + 100, 218, 48, 37, 83, 5, 237, 1, 37, 83, 5, 237, 0, 37, 83, 5, 226, 126, + 37, 83, 5, 226, 125, 37, 83, 5, 243, 186, 37, 83, 5, 251, 166, 94, 5, + 220, 97, 227, 144, 94, 5, 220, 97, 251, 148, 94, 5, 251, 95, 94, 5, 223, + 51, 94, 5, 252, 64, 94, 1, 254, 180, 94, 1, 254, 181, 222, 82, 94, 1, + 237, 251, 94, 1, 237, 252, 222, 82, 94, 1, 220, 100, 94, 1, 220, 101, + 222, 82, 94, 1, 228, 3, 227, 183, 94, 1, 228, 3, 227, 184, 222, 82, 94, + 1, 235, 189, 235, 95, 94, 1, 235, 189, 235, 96, 222, 82, 94, 1, 246, 222, + 94, 1, 254, 194, 94, 1, 230, 153, 94, 1, 230, 154, 222, 82, 94, 1, 175, + 94, 1, 206, 234, 103, 94, 1, 245, 0, 94, 1, 245, 1, 244, 58, 94, 1, 232, + 115, 94, 1, 251, 169, 94, 1, 251, 170, 235, 179, 94, 1, 237, 123, 94, 1, + 237, 124, 237, 107, 94, 1, 231, 77, 94, 1, 222, 156, 235, 138, 94, 1, + 222, 156, 233, 68, 234, 103, 94, 1, 249, 208, 233, 68, 254, 148, 94, 1, + 249, 208, 233, 68, 234, 103, 94, 1, 232, 238, 227, 238, 94, 1, 222, 155, + 94, 1, 222, 156, 222, 99, 94, 1, 249, 207, 94, 1, 249, 208, 234, 108, 94, + 1, 208, 94, 1, 187, 94, 1, 230, 44, 236, 225, 94, 1, 252, 237, 94, 1, + 252, 238, 236, 174, 94, 1, 196, 94, 1, 184, 94, 1, 203, 94, 1, 235, 188, + 94, 1, 219, 7, 94, 1, 226, 178, 226, 164, 94, 1, 226, 178, 226, 132, 94, + 1, 226, 177, 94, 1, 155, 94, 5, 227, 177, 94, 29, 5, 222, 82, 94, 29, 5, + 220, 96, 94, 29, 5, 220, 97, 226, 129, 94, 29, 5, 223, 77, 94, 29, 5, + 223, 78, 237, 243, 94, 29, 5, 228, 3, 227, 183, 94, 29, 5, 228, 3, 227, + 184, 222, 82, 94, 29, 5, 235, 189, 235, 95, 94, 29, 5, 235, 189, 235, 96, + 222, 82, 94, 29, 5, 222, 124, 94, 29, 5, 222, 125, 227, 183, 94, 29, 5, + 222, 125, 222, 82, 94, 29, 5, 222, 125, 227, 184, 222, 82, 94, 29, 5, + 229, 171, 94, 29, 5, 229, 172, 222, 82, 94, 254, 240, 254, 239, 94, 1, + 236, 247, 226, 128, 94, 1, 236, 122, 226, 128, 94, 1, 220, 183, 226, 128, + 94, 1, 246, 245, 226, 128, 94, 1, 219, 166, 226, 128, 94, 1, 217, 105, + 226, 128, 94, 1, 253, 246, 226, 128, 94, 20, 217, 84, 94, 20, 107, 94, + 20, 103, 94, 20, 160, 94, 20, 154, 94, 20, 174, 94, 20, 182, 94, 20, 191, + 94, 20, 185, 94, 20, 190, 94, 229, 254, 94, 230, 19, 94, 218, 193, 94, + 251, 132, 230, 13, 94, 251, 132, 224, 122, 94, 251, 132, 229, 228, 94, + 230, 18, 94, 26, 16, 248, 151, 94, 26, 16, 249, 59, 94, 26, 16, 247, 97, + 94, 26, 16, 249, 165, 94, 26, 16, 249, 166, 223, 51, 94, 26, 16, 248, + 218, 94, 26, 16, 249, 200, 94, 26, 16, 249, 44, 94, 26, 16, 249, 186, 94, + 26, 16, 249, 166, 244, 186, 94, 26, 16, 36, 222, 79, 94, 26, 16, 36, 246, + 188, 94, 26, 16, 36, 236, 169, 94, 26, 16, 36, 236, 171, 94, 26, 16, 36, + 237, 111, 94, 26, 16, 36, 236, 170, 2, 237, 111, 94, 26, 16, 36, 236, + 172, 2, 237, 111, 94, 26, 16, 36, 252, 112, 94, 26, 16, 36, 244, 61, 94, + 26, 16, 227, 107, 230, 119, 247, 107, 94, 26, 16, 227, 107, 230, 119, + 249, 198, 94, 26, 16, 227, 107, 250, 197, 220, 251, 94, 26, 16, 227, 107, + 250, 197, 222, 131, 94, 26, 16, 235, 113, 230, 119, 230, 9, 94, 26, 16, + 235, 113, 230, 119, 228, 195, 94, 26, 16, 235, 113, 250, 197, 229, 54, + 94, 26, 16, 235, 113, 250, 197, 229, 46, 94, 26, 16, 235, 113, 230, 119, + 229, 72, 223, 67, 5, 229, 251, 223, 67, 5, 230, 5, 223, 67, 5, 230, 3, + 223, 67, 1, 60, 223, 67, 1, 72, 223, 67, 1, 68, 223, 67, 1, 254, 234, + 223, 67, 1, 74, 223, 67, 1, 73, 223, 67, 1, 246, 115, 223, 67, 1, 175, + 223, 67, 1, 228, 155, 223, 67, 1, 245, 0, 223, 67, 1, 232, 115, 223, 67, + 1, 251, 169, 223, 67, 1, 237, 123, 223, 67, 1, 217, 114, 223, 67, 1, 231, + 77, 223, 67, 1, 222, 155, 223, 67, 1, 249, 207, 223, 67, 1, 208, 223, 67, + 1, 187, 223, 67, 1, 246, 8, 223, 67, 1, 219, 189, 223, 67, 1, 252, 237, + 223, 67, 1, 196, 223, 67, 1, 184, 223, 67, 1, 203, 223, 67, 1, 235, 188, + 223, 67, 1, 219, 7, 223, 67, 1, 226, 177, 223, 67, 1, 218, 138, 223, 67, + 1, 155, 223, 67, 250, 147, 5, 230, 16, 223, 67, 250, 147, 5, 229, 253, + 223, 67, 250, 147, 5, 229, 250, 223, 67, 29, 5, 230, 8, 223, 67, 29, 5, + 229, 249, 223, 67, 29, 5, 230, 11, 223, 67, 29, 5, 230, 2, 223, 67, 29, + 5, 230, 17, 223, 67, 29, 5, 230, 10, 223, 67, 5, 230, 20, 223, 67, 1, + 236, 149, 223, 67, 1, 223, 20, 223, 67, 20, 217, 84, 223, 67, 20, 107, + 223, 67, 20, 103, 223, 67, 20, 160, 223, 67, 20, 154, 223, 67, 20, 174, + 223, 67, 20, 182, 223, 67, 20, 191, 223, 67, 20, 185, 223, 67, 20, 190, + 169, 1, 175, 169, 1, 236, 67, 169, 1, 236, 149, 169, 1, 245, 0, 169, 1, + 244, 77, 169, 1, 232, 115, 169, 1, 251, 169, 169, 1, 251, 69, 169, 1, + 237, 123, 169, 1, 231, 77, 169, 1, 222, 155, 169, 1, 222, 35, 169, 1, + 249, 207, 169, 1, 208, 169, 1, 187, 169, 1, 229, 58, 169, 1, 229, 141, + 169, 1, 246, 8, 169, 1, 245, 165, 169, 1, 252, 237, 169, 1, 252, 54, 169, + 1, 196, 169, 1, 233, 142, 169, 1, 221, 55, 169, 1, 221, 47, 169, 1, 247, + 74, 169, 1, 184, 169, 1, 203, 169, 1, 235, 188, 169, 1, 155, 169, 1, 243, + 89, 169, 1, 219, 189, 169, 1, 226, 177, 169, 1, 225, 25, 169, 1, 219, 7, + 169, 1, 60, 169, 223, 97, 1, 184, 169, 223, 97, 1, 203, 169, 29, 5, 255, + 58, 169, 29, 5, 72, 169, 29, 5, 74, 169, 29, 5, 230, 127, 169, 29, 5, 68, + 169, 29, 5, 220, 23, 169, 29, 5, 73, 169, 250, 147, 5, 237, 17, 169, 250, + 147, 5, 189, 169, 250, 147, 5, 153, 169, 250, 147, 5, 207, 169, 250, 147, + 5, 230, 59, 169, 250, 147, 5, 152, 169, 250, 147, 5, 222, 201, 169, 250, + 147, 5, 231, 62, 169, 250, 147, 5, 236, 229, 169, 5, 227, 236, 169, 5, + 231, 112, 169, 228, 197, 222, 154, 169, 228, 197, 231, 69, 221, 208, 222, + 154, 169, 228, 197, 251, 74, 169, 228, 197, 221, 42, 251, 74, 169, 228, + 197, 221, 41, 169, 20, 217, 84, 169, 20, 107, 169, 20, 103, 169, 20, 160, + 169, 20, 154, 169, 20, 174, 169, 20, 182, 169, 20, 191, 169, 20, 185, + 169, 20, 190, 169, 1, 221, 29, 169, 1, 221, 19, 169, 1, 249, 132, 230, + 151, 251, 26, 20, 217, 84, 230, 151, 251, 26, 20, 107, 230, 151, 251, 26, + 20, 103, 230, 151, 251, 26, 20, 160, 230, 151, 251, 26, 20, 154, 230, + 151, 251, 26, 20, 174, 230, 151, 251, 26, 20, 182, 230, 151, 251, 26, 20, + 191, 230, 151, 251, 26, 20, 185, 230, 151, 251, 26, 20, 190, 230, 151, + 251, 26, 1, 235, 188, 230, 151, 251, 26, 1, 253, 244, 230, 151, 251, 26, + 1, 254, 209, 230, 151, 251, 26, 1, 254, 123, 230, 151, 251, 26, 1, 254, + 175, 230, 151, 251, 26, 1, 235, 187, 230, 151, 251, 26, 1, 255, 20, 230, + 151, 251, 26, 1, 255, 21, 230, 151, 251, 26, 1, 255, 19, 230, 151, 251, + 26, 1, 255, 15, 230, 151, 251, 26, 1, 235, 67, 230, 151, 251, 26, 1, 237, + 151, 230, 151, 251, 26, 1, 238, 0, 230, 151, 251, 26, 1, 237, 167, 230, + 151, 251, 26, 1, 237, 156, 230, 151, 251, 26, 1, 234, 231, 230, 151, 251, + 26, 1, 220, 117, 230, 151, 251, 26, 1, 220, 115, 230, 151, 251, 26, 1, + 220, 68, 230, 151, 251, 26, 1, 220, 16, 230, 151, 251, 26, 1, 235, 122, + 230, 151, 251, 26, 1, 246, 162, 230, 151, 251, 26, 1, 246, 253, 230, 151, + 251, 26, 1, 246, 197, 230, 151, 251, 26, 1, 246, 142, 230, 151, 251, 26, + 1, 235, 12, 230, 151, 251, 26, 1, 230, 89, 230, 151, 251, 26, 1, 230, + 181, 230, 151, 251, 26, 1, 230, 79, 230, 151, 251, 26, 1, 230, 161, 230, + 151, 251, 26, 233, 100, 221, 1, 230, 151, 251, 26, 244, 251, 221, 2, 230, + 151, 251, 26, 233, 98, 221, 2, 230, 151, 251, 26, 227, 193, 230, 151, + 251, 26, 229, 139, 230, 151, 251, 26, 254, 201, 230, 151, 251, 26, 228, + 197, 233, 96, 230, 151, 251, 26, 228, 197, 51, 233, 96, 219, 162, 145, + 236, 211, 219, 162, 145, 225, 2, 219, 162, 145, 228, 241, 219, 162, 5, + 232, 39, 219, 162, 5, 218, 56, 233, 191, 223, 39, 219, 162, 145, 218, 56, + 254, 206, 237, 214, 223, 39, 219, 162, 145, 218, 56, 237, 214, 223, 39, + 219, 162, 145, 218, 56, 236, 199, 237, 214, 223, 39, 219, 162, 145, 251, + 149, 56, 219, 162, 145, 218, 56, 236, 199, 237, 214, 223, 40, 226, 106, + 219, 162, 145, 51, 223, 39, 219, 162, 145, 221, 78, 223, 39, 219, 162, + 145, 236, 199, 254, 97, 219, 162, 145, 61, 56, 219, 162, 145, 124, 188, + 56, 219, 162, 145, 148, 188, 56, 219, 162, 145, 227, 99, 236, 210, 237, + 214, 223, 39, 219, 162, 145, 253, 242, 237, 214, 223, 39, 219, 162, 5, + 219, 78, 223, 39, 219, 162, 5, 219, 78, 220, 112, 219, 162, 5, 210, 219, + 78, 220, 112, 219, 162, 5, 219, 78, 254, 97, 219, 162, 5, 210, 219, 78, + 254, 97, 219, 162, 5, 219, 78, 220, 113, 2, 222, 135, 219, 162, 5, 219, + 78, 254, 98, 2, 222, 135, 219, 162, 5, 254, 96, 254, 105, 219, 162, 5, + 254, 96, 252, 222, 219, 162, 5, 254, 96, 219, 184, 219, 162, 5, 254, 96, + 219, 185, 2, 222, 135, 219, 162, 5, 221, 162, 219, 162, 5, 243, 123, 171, + 254, 95, 219, 162, 5, 171, 254, 95, 219, 162, 5, 227, 24, 171, 254, 95, + 219, 162, 5, 254, 96, 220, 119, 233, 90, 219, 162, 5, 254, 46, 7, 1, 3, + 6, 60, 7, 1, 3, 6, 254, 234, 7, 3, 1, 215, 254, 234, 7, 1, 3, 6, 252, + 196, 253, 204, 7, 1, 3, 6, 251, 202, 7, 1, 3, 6, 250, 46, 7, 1, 3, 6, + 246, 118, 7, 1, 3, 6, 73, 7, 3, 1, 215, 230, 119, 73, 7, 3, 1, 215, 72, + 7, 1, 3, 6, 237, 126, 7, 1, 3, 6, 237, 17, 7, 1, 3, 6, 235, 202, 2, 92, + 7, 1, 3, 6, 189, 7, 1, 3, 6, 210, 207, 7, 1, 3, 6, 74, 7, 1, 3, 6, 230, + 119, 74, 7, 3, 1, 224, 136, 74, 7, 3, 1, 224, 136, 230, 119, 74, 7, 3, 1, + 224, 136, 142, 2, 92, 7, 3, 1, 215, 230, 167, 7, 1, 3, 6, 230, 86, 7, 3, + 1, 221, 120, 144, 74, 7, 3, 1, 252, 29, 144, 74, 7, 1, 3, 6, 230, 59, 7, + 1, 3, 6, 210, 152, 7, 1, 3, 6, 215, 152, 7, 1, 3, 6, 222, 201, 7, 1, 3, + 6, 68, 7, 3, 1, 224, 136, 68, 7, 3, 1, 224, 136, 249, 12, 68, 7, 3, 1, + 224, 136, 215, 189, 7, 1, 3, 6, 216, 216, 7, 1, 3, 6, 219, 40, 7, 1, 3, + 6, 217, 157, 7, 1, 3, 6, 246, 76, 7, 1, 219, 70, 235, 144, 223, 241, 7, + 1, 254, 191, 23, 1, 3, 6, 244, 231, 23, 1, 3, 6, 235, 156, 23, 1, 3, 6, + 229, 108, 23, 1, 3, 6, 227, 149, 23, 1, 3, 6, 228, 212, 31, 1, 3, 6, 246, + 217, 58, 1, 6, 60, 58, 1, 6, 254, 234, 58, 1, 6, 253, 204, 58, 1, 6, 252, + 196, 253, 204, 58, 1, 6, 250, 46, 58, 1, 6, 73, 58, 1, 6, 210, 73, 58, 1, + 6, 245, 67, 58, 1, 6, 243, 225, 58, 1, 6, 72, 58, 1, 6, 237, 126, 58, 1, + 6, 237, 17, 58, 1, 6, 153, 58, 1, 6, 189, 58, 1, 6, 207, 58, 1, 6, 210, + 207, 58, 1, 6, 74, 58, 1, 6, 230, 86, 58, 1, 6, 230, 59, 58, 1, 6, 152, + 58, 1, 6, 222, 201, 58, 1, 6, 68, 58, 1, 6, 219, 40, 58, 1, 3, 60, 58, 1, + 3, 215, 60, 58, 1, 3, 254, 146, 58, 1, 3, 215, 254, 234, 58, 1, 3, 253, + 204, 58, 1, 3, 250, 46, 58, 1, 3, 73, 58, 1, 3, 226, 104, 58, 1, 3, 230, + 119, 73, 58, 1, 3, 215, 230, 119, 73, 58, 1, 3, 245, 67, 58, 1, 3, 215, + 72, 58, 1, 3, 237, 17, 58, 1, 3, 189, 58, 1, 3, 246, 185, 58, 1, 3, 74, + 58, 1, 3, 230, 119, 74, 58, 1, 3, 221, 120, 144, 74, 58, 1, 3, 252, 29, + 144, 74, 58, 1, 3, 230, 59, 58, 1, 3, 222, 201, 58, 1, 3, 68, 58, 1, 3, + 224, 136, 68, 58, 1, 3, 215, 189, 58, 1, 3, 216, 216, 58, 1, 3, 254, 191, + 58, 1, 3, 252, 102, 58, 1, 3, 23, 244, 231, 58, 1, 3, 249, 62, 58, 1, 3, + 23, 229, 129, 58, 1, 3, 251, 31, 7, 223, 94, 3, 1, 72, 7, 223, 94, 3, 1, + 152, 7, 223, 94, 3, 1, 68, 7, 223, 94, 3, 1, 216, 216, 23, 223, 94, 3, 1, + 252, 102, 23, 223, 94, 3, 1, 244, 231, 23, 223, 94, 3, 1, 227, 149, 23, + 223, 94, 3, 1, 229, 129, 23, 223, 94, 3, 1, 251, 31, 7, 3, 1, 220, 110, + 7, 3, 1, 49, 2, 233, 193, 221, 179, 7, 3, 1, 250, 47, 2, 233, 193, 221, + 179, 7, 3, 1, 246, 75, 2, 233, 193, 221, 179, 7, 3, 1, 234, 187, 2, 233, + 193, 221, 179, 7, 3, 1, 233, 34, 2, 233, 193, 221, 179, 7, 3, 1, 230, 60, + 2, 233, 193, 221, 179, 7, 3, 1, 228, 39, 2, 233, 193, 221, 179, 7, 3, 1, + 228, 39, 2, 245, 174, 25, 233, 193, 221, 179, 7, 3, 1, 226, 235, 2, 233, + 193, 221, 179, 7, 3, 1, 222, 202, 2, 233, 193, 221, 179, 7, 3, 1, 217, + 158, 2, 233, 193, 221, 179, 7, 3, 1, 215, 245, 67, 58, 1, 31, 246, 197, + 7, 3, 1, 237, 188, 245, 67, 7, 3, 1, 222, 38, 2, 223, 121, 7, 3, 6, 1, + 242, 107, 2, 92, 7, 3, 1, 237, 163, 2, 92, 7, 3, 1, 230, 60, 2, 92, 7, 3, + 6, 1, 105, 2, 92, 7, 3, 1, 220, 58, 2, 92, 7, 3, 1, 49, 2, 230, 29, 96, + 7, 3, 1, 250, 47, 2, 230, 29, 96, 7, 3, 1, 246, 75, 2, 230, 29, 96, 7, 3, + 1, 245, 68, 2, 230, 29, 96, 7, 3, 1, 237, 18, 2, 230, 29, 96, 7, 3, 1, + 235, 202, 2, 230, 29, 96, 7, 3, 1, 234, 187, 2, 230, 29, 96, 7, 3, 1, + 233, 34, 2, 230, 29, 96, 7, 3, 1, 230, 60, 2, 230, 29, 96, 7, 3, 1, 228, + 39, 2, 230, 29, 96, 7, 3, 1, 226, 235, 2, 230, 29, 96, 7, 3, 1, 246, 134, + 2, 230, 29, 96, 7, 3, 1, 220, 11, 2, 230, 29, 96, 7, 3, 1, 218, 152, 2, + 230, 29, 96, 7, 3, 1, 217, 158, 2, 230, 29, 96, 7, 3, 1, 112, 2, 227, + 164, 96, 7, 3, 1, 254, 147, 2, 227, 164, 96, 7, 3, 1, 250, 47, 2, 242, + 247, 25, 222, 135, 7, 3, 1, 178, 2, 227, 164, 96, 7, 3, 1, 230, 119, 178, + 2, 227, 164, 96, 7, 3, 1, 210, 230, 119, 178, 2, 227, 164, 96, 7, 3, 1, + 226, 105, 2, 227, 164, 96, 7, 3, 1, 242, 107, 2, 227, 164, 96, 7, 3, 1, + 230, 119, 142, 2, 227, 164, 96, 7, 3, 1, 246, 134, 2, 227, 164, 96, 7, 3, + 1, 105, 2, 227, 164, 96, 7, 3, 1, 246, 77, 2, 227, 164, 96, 58, 1, 3, + 215, 254, 146, 58, 1, 3, 251, 202, 58, 1, 3, 251, 203, 2, 250, 80, 58, 1, + 3, 246, 118, 58, 1, 3, 210, 230, 119, 73, 58, 1, 3, 246, 74, 58, 1, 3, + 248, 144, 237, 127, 2, 92, 58, 1, 3, 102, 245, 67, 58, 1, 3, 215, 243, + 225, 58, 1, 3, 242, 107, 2, 92, 58, 1, 3, 237, 162, 58, 1, 3, 6, 72, 58, + 1, 3, 6, 242, 107, 2, 92, 58, 1, 3, 237, 127, 2, 250, 97, 58, 1, 3, 235, + 202, 2, 227, 164, 96, 58, 1, 3, 235, 202, 2, 230, 29, 96, 58, 1, 3, 6, + 153, 58, 1, 3, 234, 187, 2, 96, 58, 1, 3, 215, 234, 187, 2, 171, 235, + 106, 58, 1, 3, 233, 34, 2, 42, 96, 58, 1, 3, 233, 34, 2, 227, 164, 96, + 58, 1, 3, 6, 207, 58, 1, 3, 252, 196, 74, 58, 1, 3, 229, 129, 58, 1, 3, + 226, 235, 2, 96, 58, 1, 3, 246, 133, 58, 1, 3, 222, 202, 2, 230, 29, 96, + 58, 1, 3, 105, 135, 58, 1, 3, 220, 57, 58, 1, 3, 6, 68, 58, 1, 3, 220, + 11, 2, 96, 58, 1, 3, 215, 216, 216, 58, 1, 3, 217, 157, 58, 1, 3, 217, + 158, 2, 227, 164, 96, 58, 1, 3, 217, 158, 2, 250, 80, 58, 1, 3, 246, 76, + 58, 1, 3, 222, 6, 36, 247, 143, 244, 37, 255, 0, 36, 247, 143, 254, 248, + 255, 0, 36, 224, 36, 56, 36, 223, 45, 78, 36, 234, 114, 36, 244, 34, 36, + 234, 112, 36, 254, 246, 36, 244, 35, 36, 254, 247, 36, 7, 3, 1, 228, 39, + 56, 36, 252, 7, 36, 234, 113, 36, 51, 250, 217, 50, 36, 230, 163, 50, 36, + 217, 33, 56, 36, 237, 152, 56, 36, 220, 51, 50, 36, 220, 35, 50, 36, 7, + 3, 1, 245, 154, 230, 119, 112, 50, 36, 7, 3, 1, 254, 234, 36, 7, 3, 1, + 254, 93, 36, 7, 3, 1, 253, 220, 36, 7, 3, 1, 251, 203, 251, 92, 36, 7, 3, + 1, 237, 188, 250, 46, 36, 7, 3, 1, 246, 118, 36, 7, 3, 1, 245, 67, 36, 7, + 1, 3, 6, 245, 67, 36, 7, 3, 1, 237, 17, 36, 7, 3, 1, 153, 36, 7, 1, 3, 6, + 153, 36, 7, 1, 3, 6, 189, 36, 7, 3, 1, 207, 36, 7, 1, 3, 6, 207, 36, 7, + 1, 3, 6, 152, 36, 7, 3, 1, 228, 39, 227, 58, 36, 7, 3, 1, 198, 36, 7, 3, + 1, 171, 198, 36, 7, 3, 1, 217, 157, 36, 254, 151, 114, 199, 56, 36, 42, + 254, 21, 50, 36, 45, 254, 21, 25, 113, 254, 21, 56, 7, 6, 1, 112, 2, 227, + 94, 56, 7, 3, 1, 112, 2, 227, 94, 56, 7, 6, 1, 49, 2, 61, 50, 7, 3, 1, + 49, 2, 61, 50, 7, 6, 1, 49, 2, 61, 56, 7, 3, 1, 49, 2, 61, 56, 7, 6, 1, + 49, 2, 235, 44, 56, 7, 3, 1, 49, 2, 235, 44, 56, 7, 6, 1, 251, 203, 2, + 251, 93, 25, 168, 7, 3, 1, 251, 203, 2, 251, 93, 25, 168, 7, 6, 1, 250, + 47, 2, 61, 50, 7, 3, 1, 250, 47, 2, 61, 50, 7, 6, 1, 250, 47, 2, 61, 56, + 7, 3, 1, 250, 47, 2, 61, 56, 7, 6, 1, 250, 47, 2, 235, 44, 56, 7, 3, 1, + 250, 47, 2, 235, 44, 56, 7, 6, 1, 250, 47, 2, 251, 92, 7, 3, 1, 250, 47, + 2, 251, 92, 7, 6, 1, 250, 47, 2, 250, 217, 56, 7, 3, 1, 250, 47, 2, 250, + 217, 56, 7, 6, 1, 178, 2, 234, 116, 25, 244, 36, 7, 3, 1, 178, 2, 234, + 116, 25, 244, 36, 7, 6, 1, 178, 2, 234, 116, 25, 168, 7, 3, 1, 178, 2, + 234, 116, 25, 168, 7, 6, 1, 178, 2, 250, 217, 56, 7, 3, 1, 178, 2, 250, + 217, 56, 7, 6, 1, 178, 2, 221, 180, 56, 7, 3, 1, 178, 2, 221, 180, 56, 7, + 6, 1, 178, 2, 251, 93, 25, 252, 8, 7, 3, 1, 178, 2, 251, 93, 25, 252, 8, + 7, 6, 1, 246, 75, 2, 61, 50, 7, 3, 1, 246, 75, 2, 61, 50, 7, 6, 1, 245, + 68, 2, 234, 115, 7, 3, 1, 245, 68, 2, 234, 115, 7, 6, 1, 243, 226, 2, 61, + 50, 7, 3, 1, 243, 226, 2, 61, 50, 7, 6, 1, 243, 226, 2, 61, 56, 7, 3, 1, + 243, 226, 2, 61, 56, 7, 6, 1, 243, 226, 2, 249, 13, 7, 3, 1, 243, 226, 2, + 249, 13, 7, 6, 1, 243, 226, 2, 251, 92, 7, 3, 1, 243, 226, 2, 251, 92, 7, + 6, 1, 243, 226, 2, 252, 9, 56, 7, 3, 1, 243, 226, 2, 252, 9, 56, 7, 6, 1, + 242, 107, 2, 221, 180, 56, 7, 3, 1, 242, 107, 2, 221, 180, 56, 7, 6, 1, + 242, 107, 2, 249, 14, 25, 168, 7, 3, 1, 242, 107, 2, 249, 14, 25, 168, 7, + 6, 1, 237, 18, 2, 168, 7, 3, 1, 237, 18, 2, 168, 7, 6, 1, 237, 18, 2, 61, + 56, 7, 3, 1, 237, 18, 2, 61, 56, 7, 6, 1, 237, 18, 2, 235, 44, 56, 7, 3, + 1, 237, 18, 2, 235, 44, 56, 7, 6, 1, 235, 202, 2, 61, 56, 7, 3, 1, 235, + 202, 2, 61, 56, 7, 6, 1, 235, 202, 2, 61, 252, 118, 25, 234, 115, 7, 3, + 1, 235, 202, 2, 61, 252, 118, 25, 234, 115, 7, 6, 1, 235, 202, 2, 235, + 44, 56, 7, 3, 1, 235, 202, 2, 235, 44, 56, 7, 6, 1, 235, 202, 2, 250, + 217, 56, 7, 3, 1, 235, 202, 2, 250, 217, 56, 7, 6, 1, 234, 187, 2, 168, + 7, 3, 1, 234, 187, 2, 168, 7, 6, 1, 234, 187, 2, 61, 50, 7, 3, 1, 234, + 187, 2, 61, 50, 7, 6, 1, 234, 187, 2, 61, 56, 7, 3, 1, 234, 187, 2, 61, + 56, 7, 6, 1, 233, 34, 2, 61, 50, 7, 3, 1, 233, 34, 2, 61, 50, 7, 6, 1, + 233, 34, 2, 61, 56, 7, 3, 1, 233, 34, 2, 61, 56, 7, 6, 1, 233, 34, 2, + 235, 44, 56, 7, 3, 1, 233, 34, 2, 235, 44, 56, 7, 6, 1, 233, 34, 2, 250, + 217, 56, 7, 3, 1, 233, 34, 2, 250, 217, 56, 7, 6, 1, 142, 2, 221, 180, + 25, 168, 7, 3, 1, 142, 2, 221, 180, 25, 168, 7, 6, 1, 142, 2, 221, 180, + 25, 249, 13, 7, 3, 1, 142, 2, 221, 180, 25, 249, 13, 7, 6, 1, 142, 2, + 234, 116, 25, 244, 36, 7, 3, 1, 142, 2, 234, 116, 25, 244, 36, 7, 6, 1, + 142, 2, 234, 116, 25, 168, 7, 3, 1, 142, 2, 234, 116, 25, 168, 7, 6, 1, + 230, 60, 2, 168, 7, 3, 1, 230, 60, 2, 168, 7, 6, 1, 230, 60, 2, 61, 50, + 7, 3, 1, 230, 60, 2, 61, 50, 7, 6, 1, 228, 39, 2, 61, 50, 7, 3, 1, 228, + 39, 2, 61, 50, 7, 6, 1, 228, 39, 2, 61, 56, 7, 3, 1, 228, 39, 2, 61, 56, + 7, 6, 1, 228, 39, 2, 61, 252, 118, 25, 234, 115, 7, 3, 1, 228, 39, 2, 61, + 252, 118, 25, 234, 115, 7, 6, 1, 228, 39, 2, 235, 44, 56, 7, 3, 1, 228, + 39, 2, 235, 44, 56, 7, 6, 1, 226, 235, 2, 61, 50, 7, 3, 1, 226, 235, 2, + 61, 50, 7, 6, 1, 226, 235, 2, 61, 56, 7, 3, 1, 226, 235, 2, 61, 56, 7, 6, + 1, 226, 235, 2, 254, 248, 25, 61, 50, 7, 3, 1, 226, 235, 2, 254, 248, 25, + 61, 50, 7, 6, 1, 226, 235, 2, 251, 131, 25, 61, 50, 7, 3, 1, 226, 235, 2, + 251, 131, 25, 61, 50, 7, 6, 1, 226, 235, 2, 61, 252, 118, 25, 61, 50, 7, + 3, 1, 226, 235, 2, 61, 252, 118, 25, 61, 50, 7, 6, 1, 222, 202, 2, 61, + 50, 7, 3, 1, 222, 202, 2, 61, 50, 7, 6, 1, 222, 202, 2, 61, 56, 7, 3, 1, + 222, 202, 2, 61, 56, 7, 6, 1, 222, 202, 2, 235, 44, 56, 7, 3, 1, 222, + 202, 2, 235, 44, 56, 7, 6, 1, 222, 202, 2, 250, 217, 56, 7, 3, 1, 222, + 202, 2, 250, 217, 56, 7, 6, 1, 105, 2, 249, 14, 56, 7, 3, 1, 105, 2, 249, + 14, 56, 7, 6, 1, 105, 2, 221, 180, 56, 7, 3, 1, 105, 2, 221, 180, 56, 7, + 6, 1, 105, 2, 250, 217, 56, 7, 3, 1, 105, 2, 250, 217, 56, 7, 6, 1, 105, + 2, 221, 180, 25, 168, 7, 3, 1, 105, 2, 221, 180, 25, 168, 7, 6, 1, 105, + 2, 234, 116, 25, 249, 13, 7, 3, 1, 105, 2, 234, 116, 25, 249, 13, 7, 6, + 1, 220, 11, 2, 221, 179, 7, 3, 1, 220, 11, 2, 221, 179, 7, 6, 1, 220, 11, + 2, 61, 56, 7, 3, 1, 220, 11, 2, 61, 56, 7, 6, 1, 219, 41, 2, 244, 36, 7, + 3, 1, 219, 41, 2, 244, 36, 7, 6, 1, 219, 41, 2, 168, 7, 3, 1, 219, 41, 2, + 168, 7, 6, 1, 219, 41, 2, 249, 13, 7, 3, 1, 219, 41, 2, 249, 13, 7, 6, 1, + 219, 41, 2, 61, 50, 7, 3, 1, 219, 41, 2, 61, 50, 7, 6, 1, 219, 41, 2, 61, + 56, 7, 3, 1, 219, 41, 2, 61, 56, 7, 6, 1, 218, 152, 2, 61, 50, 7, 3, 1, + 218, 152, 2, 61, 50, 7, 6, 1, 218, 152, 2, 249, 13, 7, 3, 1, 218, 152, 2, + 249, 13, 7, 6, 1, 218, 91, 2, 61, 50, 7, 3, 1, 218, 91, 2, 61, 50, 7, 6, + 1, 217, 158, 2, 250, 216, 7, 3, 1, 217, 158, 2, 250, 216, 7, 6, 1, 217, + 158, 2, 61, 56, 7, 3, 1, 217, 158, 2, 61, 56, 7, 6, 1, 217, 158, 2, 235, + 44, 56, 7, 3, 1, 217, 158, 2, 235, 44, 56, 7, 3, 1, 243, 226, 2, 235, 44, + 56, 7, 3, 1, 222, 202, 2, 249, 13, 7, 3, 1, 219, 41, 2, 227, 94, 50, 7, + 3, 1, 218, 91, 2, 227, 94, 50, 7, 3, 1, 112, 2, 45, 144, 227, 93, 7, 3, + 1, 171, 226, 235, 2, 61, 50, 7, 3, 1, 171, 226, 235, 2, 249, 11, 92, 7, + 3, 1, 171, 226, 235, 2, 116, 92, 7, 6, 1, 225, 1, 198, 7, 3, 1, 249, 62, + 7, 6, 1, 112, 2, 61, 56, 7, 3, 1, 112, 2, 61, 56, 7, 6, 1, 112, 2, 242, + 247, 50, 7, 3, 1, 112, 2, 242, 247, 50, 7, 6, 1, 112, 2, 250, 217, 25, + 168, 7, 3, 1, 112, 2, 250, 217, 25, 168, 7, 6, 1, 112, 2, 250, 217, 25, + 244, 36, 7, 3, 1, 112, 2, 250, 217, 25, 244, 36, 7, 6, 1, 112, 2, 250, + 217, 25, 242, 247, 50, 7, 3, 1, 112, 2, 250, 217, 25, 242, 247, 50, 7, 6, + 1, 112, 2, 250, 217, 25, 221, 179, 7, 3, 1, 112, 2, 250, 217, 25, 221, + 179, 7, 6, 1, 112, 2, 250, 217, 25, 61, 56, 7, 3, 1, 112, 2, 250, 217, + 25, 61, 56, 7, 6, 1, 112, 2, 252, 9, 25, 168, 7, 3, 1, 112, 2, 252, 9, + 25, 168, 7, 6, 1, 112, 2, 252, 9, 25, 244, 36, 7, 3, 1, 112, 2, 252, 9, + 25, 244, 36, 7, 6, 1, 112, 2, 252, 9, 25, 242, 247, 50, 7, 3, 1, 112, 2, + 252, 9, 25, 242, 247, 50, 7, 6, 1, 112, 2, 252, 9, 25, 221, 179, 7, 3, 1, + 112, 2, 252, 9, 25, 221, 179, 7, 6, 1, 112, 2, 252, 9, 25, 61, 56, 7, 3, + 1, 112, 2, 252, 9, 25, 61, 56, 7, 6, 1, 178, 2, 61, 56, 7, 3, 1, 178, 2, + 61, 56, 7, 6, 1, 178, 2, 242, 247, 50, 7, 3, 1, 178, 2, 242, 247, 50, 7, + 6, 1, 178, 2, 221, 179, 7, 3, 1, 178, 2, 221, 179, 7, 6, 1, 178, 2, 250, + 217, 25, 168, 7, 3, 1, 178, 2, 250, 217, 25, 168, 7, 6, 1, 178, 2, 250, + 217, 25, 244, 36, 7, 3, 1, 178, 2, 250, 217, 25, 244, 36, 7, 6, 1, 178, + 2, 250, 217, 25, 242, 247, 50, 7, 3, 1, 178, 2, 250, 217, 25, 242, 247, + 50, 7, 6, 1, 178, 2, 250, 217, 25, 221, 179, 7, 3, 1, 178, 2, 250, 217, + 25, 221, 179, 7, 6, 1, 178, 2, 250, 217, 25, 61, 56, 7, 3, 1, 178, 2, + 250, 217, 25, 61, 56, 7, 6, 1, 242, 107, 2, 242, 247, 50, 7, 3, 1, 242, + 107, 2, 242, 247, 50, 7, 6, 1, 242, 107, 2, 61, 56, 7, 3, 1, 242, 107, 2, + 61, 56, 7, 6, 1, 142, 2, 61, 56, 7, 3, 1, 142, 2, 61, 56, 7, 6, 1, 142, + 2, 242, 247, 50, 7, 3, 1, 142, 2, 242, 247, 50, 7, 6, 1, 142, 2, 250, + 217, 25, 168, 7, 3, 1, 142, 2, 250, 217, 25, 168, 7, 6, 1, 142, 2, 250, + 217, 25, 244, 36, 7, 3, 1, 142, 2, 250, 217, 25, 244, 36, 7, 6, 1, 142, + 2, 250, 217, 25, 242, 247, 50, 7, 3, 1, 142, 2, 250, 217, 25, 242, 247, + 50, 7, 6, 1, 142, 2, 250, 217, 25, 221, 179, 7, 3, 1, 142, 2, 250, 217, + 25, 221, 179, 7, 6, 1, 142, 2, 250, 217, 25, 61, 56, 7, 3, 1, 142, 2, + 250, 217, 25, 61, 56, 7, 6, 1, 142, 2, 242, 190, 25, 168, 7, 3, 1, 142, + 2, 242, 190, 25, 168, 7, 6, 1, 142, 2, 242, 190, 25, 244, 36, 7, 3, 1, + 142, 2, 242, 190, 25, 244, 36, 7, 6, 1, 142, 2, 242, 190, 25, 242, 247, + 50, 7, 3, 1, 142, 2, 242, 190, 25, 242, 247, 50, 7, 6, 1, 142, 2, 242, + 190, 25, 221, 179, 7, 3, 1, 142, 2, 242, 190, 25, 221, 179, 7, 6, 1, 142, + 2, 242, 190, 25, 61, 56, 7, 3, 1, 142, 2, 242, 190, 25, 61, 56, 7, 6, 1, + 105, 2, 61, 56, 7, 3, 1, 105, 2, 61, 56, 7, 6, 1, 105, 2, 242, 247, 50, + 7, 3, 1, 105, 2, 242, 247, 50, 7, 6, 1, 105, 2, 242, 190, 25, 168, 7, 3, + 1, 105, 2, 242, 190, 25, 168, 7, 6, 1, 105, 2, 242, 190, 25, 244, 36, 7, + 3, 1, 105, 2, 242, 190, 25, 244, 36, 7, 6, 1, 105, 2, 242, 190, 25, 242, + 247, 50, 7, 3, 1, 105, 2, 242, 190, 25, 242, 247, 50, 7, 6, 1, 105, 2, + 242, 190, 25, 221, 179, 7, 3, 1, 105, 2, 242, 190, 25, 221, 179, 7, 6, 1, + 105, 2, 242, 190, 25, 61, 56, 7, 3, 1, 105, 2, 242, 190, 25, 61, 56, 7, + 6, 1, 218, 91, 2, 244, 36, 7, 3, 1, 218, 91, 2, 244, 36, 7, 6, 1, 218, + 91, 2, 61, 56, 7, 3, 1, 218, 91, 2, 61, 56, 7, 6, 1, 218, 91, 2, 242, + 247, 50, 7, 3, 1, 218, 91, 2, 242, 247, 50, 7, 6, 1, 218, 91, 2, 221, + 179, 7, 3, 1, 218, 91, 2, 221, 179, 7, 6, 1, 233, 192, 235, 18, 7, 3, 1, + 233, 192, 235, 18, 7, 6, 1, 233, 192, 216, 216, 7, 3, 1, 233, 192, 216, + 216, 7, 6, 1, 218, 91, 2, 234, 247, 7, 3, 1, 218, 91, 2, 234, 247, 23, 3, + 1, 254, 147, 2, 228, 206, 23, 3, 1, 254, 147, 2, 249, 144, 23, 3, 1, 254, + 147, 2, 209, 25, 219, 178, 23, 3, 1, 254, 147, 2, 193, 25, 219, 178, 23, + 3, 1, 254, 147, 2, 209, 25, 230, 64, 23, 3, 1, 254, 147, 2, 193, 25, 230, + 64, 23, 3, 1, 254, 147, 2, 209, 25, 229, 163, 23, 3, 1, 254, 147, 2, 193, + 25, 229, 163, 23, 6, 1, 254, 147, 2, 228, 206, 23, 6, 1, 254, 147, 2, + 249, 144, 23, 6, 1, 254, 147, 2, 209, 25, 219, 178, 23, 6, 1, 254, 147, + 2, 193, 25, 219, 178, 23, 6, 1, 254, 147, 2, 209, 25, 230, 64, 23, 6, 1, + 254, 147, 2, 193, 25, 230, 64, 23, 6, 1, 254, 147, 2, 209, 25, 229, 163, + 23, 6, 1, 254, 147, 2, 193, 25, 229, 163, 23, 3, 1, 246, 157, 2, 228, + 206, 23, 3, 1, 246, 157, 2, 249, 144, 23, 3, 1, 246, 157, 2, 209, 25, + 219, 178, 23, 3, 1, 246, 157, 2, 193, 25, 219, 178, 23, 3, 1, 246, 157, + 2, 209, 25, 230, 64, 23, 3, 1, 246, 157, 2, 193, 25, 230, 64, 23, 6, 1, + 246, 157, 2, 228, 206, 23, 6, 1, 246, 157, 2, 249, 144, 23, 6, 1, 246, + 157, 2, 209, 25, 219, 178, 23, 6, 1, 246, 157, 2, 193, 25, 219, 178, 23, + 6, 1, 246, 157, 2, 209, 25, 230, 64, 23, 6, 1, 246, 157, 2, 193, 25, 230, + 64, 23, 3, 1, 246, 122, 2, 228, 206, 23, 3, 1, 246, 122, 2, 249, 144, 23, + 3, 1, 246, 122, 2, 209, 25, 219, 178, 23, 3, 1, 246, 122, 2, 193, 25, + 219, 178, 23, 3, 1, 246, 122, 2, 209, 25, 230, 64, 23, 3, 1, 246, 122, 2, + 193, 25, 230, 64, 23, 3, 1, 246, 122, 2, 209, 25, 229, 163, 23, 3, 1, + 246, 122, 2, 193, 25, 229, 163, 23, 6, 1, 246, 122, 2, 228, 206, 23, 6, + 1, 246, 122, 2, 249, 144, 23, 6, 1, 246, 122, 2, 209, 25, 219, 178, 23, + 6, 1, 246, 122, 2, 193, 25, 219, 178, 23, 6, 1, 246, 122, 2, 209, 25, + 230, 64, 23, 6, 1, 246, 122, 2, 193, 25, 230, 64, 23, 6, 1, 246, 122, 2, + 209, 25, 229, 163, 23, 6, 1, 246, 122, 2, 193, 25, 229, 163, 23, 3, 1, + 237, 163, 2, 228, 206, 23, 3, 1, 237, 163, 2, 249, 144, 23, 3, 1, 237, + 163, 2, 209, 25, 219, 178, 23, 3, 1, 237, 163, 2, 193, 25, 219, 178, 23, + 3, 1, 237, 163, 2, 209, 25, 230, 64, 23, 3, 1, 237, 163, 2, 193, 25, 230, + 64, 23, 3, 1, 237, 163, 2, 209, 25, 229, 163, 23, 3, 1, 237, 163, 2, 193, + 25, 229, 163, 23, 6, 1, 237, 163, 2, 228, 206, 23, 6, 1, 237, 163, 2, + 249, 144, 23, 6, 1, 237, 163, 2, 209, 25, 219, 178, 23, 6, 1, 237, 163, + 2, 193, 25, 219, 178, 23, 6, 1, 237, 163, 2, 209, 25, 230, 64, 23, 6, 1, + 237, 163, 2, 193, 25, 230, 64, 23, 6, 1, 237, 163, 2, 209, 25, 229, 163, + 23, 6, 1, 237, 163, 2, 193, 25, 229, 163, 23, 3, 1, 230, 142, 2, 228, + 206, 23, 3, 1, 230, 142, 2, 249, 144, 23, 3, 1, 230, 142, 2, 209, 25, + 219, 178, 23, 3, 1, 230, 142, 2, 193, 25, 219, 178, 23, 3, 1, 230, 142, + 2, 209, 25, 230, 64, 23, 3, 1, 230, 142, 2, 193, 25, 230, 64, 23, 6, 1, + 230, 142, 2, 228, 206, 23, 6, 1, 230, 142, 2, 249, 144, 23, 6, 1, 230, + 142, 2, 209, 25, 219, 178, 23, 6, 1, 230, 142, 2, 193, 25, 219, 178, 23, + 6, 1, 230, 142, 2, 209, 25, 230, 64, 23, 6, 1, 230, 142, 2, 193, 25, 230, + 64, 23, 3, 1, 220, 58, 2, 228, 206, 23, 3, 1, 220, 58, 2, 249, 144, 23, + 3, 1, 220, 58, 2, 209, 25, 219, 178, 23, 3, 1, 220, 58, 2, 193, 25, 219, + 178, 23, 3, 1, 220, 58, 2, 209, 25, 230, 64, 23, 3, 1, 220, 58, 2, 193, + 25, 230, 64, 23, 3, 1, 220, 58, 2, 209, 25, 229, 163, 23, 3, 1, 220, 58, + 2, 193, 25, 229, 163, 23, 6, 1, 220, 58, 2, 249, 144, 23, 6, 1, 220, 58, + 2, 193, 25, 219, 178, 23, 6, 1, 220, 58, 2, 193, 25, 230, 64, 23, 6, 1, + 220, 58, 2, 193, 25, 229, 163, 23, 3, 1, 230, 144, 2, 228, 206, 23, 3, 1, + 230, 144, 2, 249, 144, 23, 3, 1, 230, 144, 2, 209, 25, 219, 178, 23, 3, + 1, 230, 144, 2, 193, 25, 219, 178, 23, 3, 1, 230, 144, 2, 209, 25, 230, + 64, 23, 3, 1, 230, 144, 2, 193, 25, 230, 64, 23, 3, 1, 230, 144, 2, 209, + 25, 229, 163, 23, 3, 1, 230, 144, 2, 193, 25, 229, 163, 23, 6, 1, 230, + 144, 2, 228, 206, 23, 6, 1, 230, 144, 2, 249, 144, 23, 6, 1, 230, 144, 2, + 209, 25, 219, 178, 23, 6, 1, 230, 144, 2, 193, 25, 219, 178, 23, 6, 1, + 230, 144, 2, 209, 25, 230, 64, 23, 6, 1, 230, 144, 2, 193, 25, 230, 64, + 23, 6, 1, 230, 144, 2, 209, 25, 229, 163, 23, 6, 1, 230, 144, 2, 193, 25, + 229, 163, 23, 3, 1, 254, 147, 2, 219, 178, 23, 3, 1, 254, 147, 2, 230, + 64, 23, 3, 1, 246, 157, 2, 219, 178, 23, 3, 1, 246, 157, 2, 230, 64, 23, + 3, 1, 246, 122, 2, 219, 178, 23, 3, 1, 246, 122, 2, 230, 64, 23, 3, 1, + 237, 163, 2, 219, 178, 23, 3, 1, 237, 163, 2, 230, 64, 23, 3, 1, 230, + 142, 2, 219, 178, 23, 3, 1, 230, 142, 2, 230, 64, 23, 3, 1, 220, 58, 2, + 219, 178, 23, 3, 1, 220, 58, 2, 230, 64, 23, 3, 1, 230, 144, 2, 219, 178, + 23, 3, 1, 230, 144, 2, 230, 64, 23, 3, 1, 254, 147, 2, 209, 25, 217, 207, + 23, 3, 1, 254, 147, 2, 193, 25, 217, 207, 23, 3, 1, 254, 147, 2, 209, 25, + 219, 179, 25, 217, 207, 23, 3, 1, 254, 147, 2, 193, 25, 219, 179, 25, + 217, 207, 23, 3, 1, 254, 147, 2, 209, 25, 230, 65, 25, 217, 207, 23, 3, + 1, 254, 147, 2, 193, 25, 230, 65, 25, 217, 207, 23, 3, 1, 254, 147, 2, + 209, 25, 229, 164, 25, 217, 207, 23, 3, 1, 254, 147, 2, 193, 25, 229, + 164, 25, 217, 207, 23, 6, 1, 254, 147, 2, 209, 25, 228, 217, 23, 6, 1, + 254, 147, 2, 193, 25, 228, 217, 23, 6, 1, 254, 147, 2, 209, 25, 219, 179, + 25, 228, 217, 23, 6, 1, 254, 147, 2, 193, 25, 219, 179, 25, 228, 217, 23, + 6, 1, 254, 147, 2, 209, 25, 230, 65, 25, 228, 217, 23, 6, 1, 254, 147, 2, + 193, 25, 230, 65, 25, 228, 217, 23, 6, 1, 254, 147, 2, 209, 25, 229, 164, + 25, 228, 217, 23, 6, 1, 254, 147, 2, 193, 25, 229, 164, 25, 228, 217, 23, + 3, 1, 246, 122, 2, 209, 25, 217, 207, 23, 3, 1, 246, 122, 2, 193, 25, + 217, 207, 23, 3, 1, 246, 122, 2, 209, 25, 219, 179, 25, 217, 207, 23, 3, + 1, 246, 122, 2, 193, 25, 219, 179, 25, 217, 207, 23, 3, 1, 246, 122, 2, + 209, 25, 230, 65, 25, 217, 207, 23, 3, 1, 246, 122, 2, 193, 25, 230, 65, + 25, 217, 207, 23, 3, 1, 246, 122, 2, 209, 25, 229, 164, 25, 217, 207, 23, + 3, 1, 246, 122, 2, 193, 25, 229, 164, 25, 217, 207, 23, 6, 1, 246, 122, + 2, 209, 25, 228, 217, 23, 6, 1, 246, 122, 2, 193, 25, 228, 217, 23, 6, 1, + 246, 122, 2, 209, 25, 219, 179, 25, 228, 217, 23, 6, 1, 246, 122, 2, 193, + 25, 219, 179, 25, 228, 217, 23, 6, 1, 246, 122, 2, 209, 25, 230, 65, 25, + 228, 217, 23, 6, 1, 246, 122, 2, 193, 25, 230, 65, 25, 228, 217, 23, 6, + 1, 246, 122, 2, 209, 25, 229, 164, 25, 228, 217, 23, 6, 1, 246, 122, 2, + 193, 25, 229, 164, 25, 228, 217, 23, 3, 1, 230, 144, 2, 209, 25, 217, + 207, 23, 3, 1, 230, 144, 2, 193, 25, 217, 207, 23, 3, 1, 230, 144, 2, + 209, 25, 219, 179, 25, 217, 207, 23, 3, 1, 230, 144, 2, 193, 25, 219, + 179, 25, 217, 207, 23, 3, 1, 230, 144, 2, 209, 25, 230, 65, 25, 217, 207, + 23, 3, 1, 230, 144, 2, 193, 25, 230, 65, 25, 217, 207, 23, 3, 1, 230, + 144, 2, 209, 25, 229, 164, 25, 217, 207, 23, 3, 1, 230, 144, 2, 193, 25, + 229, 164, 25, 217, 207, 23, 6, 1, 230, 144, 2, 209, 25, 228, 217, 23, 6, + 1, 230, 144, 2, 193, 25, 228, 217, 23, 6, 1, 230, 144, 2, 209, 25, 219, + 179, 25, 228, 217, 23, 6, 1, 230, 144, 2, 193, 25, 219, 179, 25, 228, + 217, 23, 6, 1, 230, 144, 2, 209, 25, 230, 65, 25, 228, 217, 23, 6, 1, + 230, 144, 2, 193, 25, 230, 65, 25, 228, 217, 23, 6, 1, 230, 144, 2, 209, + 25, 229, 164, 25, 228, 217, 23, 6, 1, 230, 144, 2, 193, 25, 229, 164, 25, + 228, 217, 23, 3, 1, 254, 147, 2, 219, 57, 23, 3, 1, 254, 147, 2, 234, + 115, 23, 3, 1, 254, 147, 2, 219, 179, 25, 217, 207, 23, 3, 1, 254, 147, + 2, 217, 207, 23, 3, 1, 254, 147, 2, 230, 65, 25, 217, 207, 23, 3, 1, 254, + 147, 2, 229, 163, 23, 3, 1, 254, 147, 2, 229, 164, 25, 217, 207, 23, 6, + 1, 254, 147, 2, 219, 57, 23, 6, 1, 254, 147, 2, 234, 115, 23, 6, 1, 254, + 147, 2, 219, 178, 23, 6, 1, 254, 147, 2, 230, 64, 23, 6, 1, 254, 147, 2, + 228, 217, 23, 236, 33, 23, 228, 217, 23, 228, 206, 23, 229, 163, 23, 249, + 8, 25, 229, 163, 23, 3, 1, 246, 122, 2, 219, 179, 25, 217, 207, 23, 3, 1, + 246, 122, 2, 217, 207, 23, 3, 1, 246, 122, 2, 230, 65, 25, 217, 207, 23, + 3, 1, 246, 122, 2, 229, 163, 23, 3, 1, 246, 122, 2, 229, 164, 25, 217, + 207, 23, 6, 1, 246, 157, 2, 219, 178, 23, 6, 1, 246, 157, 2, 230, 64, 23, + 6, 1, 246, 122, 2, 219, 178, 23, 6, 1, 246, 122, 2, 230, 64, 23, 6, 1, + 246, 122, 2, 228, 217, 23, 209, 25, 219, 178, 23, 209, 25, 230, 64, 23, + 209, 25, 229, 163, 23, 3, 1, 237, 163, 2, 219, 57, 23, 3, 1, 237, 163, 2, + 234, 115, 23, 3, 1, 237, 163, 2, 249, 8, 25, 219, 178, 23, 3, 1, 237, + 163, 2, 249, 8, 25, 230, 64, 23, 3, 1, 237, 163, 2, 229, 163, 23, 3, 1, + 237, 163, 2, 249, 8, 25, 229, 163, 23, 6, 1, 237, 163, 2, 219, 57, 23, 6, + 1, 237, 163, 2, 234, 115, 23, 6, 1, 237, 163, 2, 219, 178, 23, 6, 1, 237, + 163, 2, 230, 64, 23, 193, 25, 219, 178, 23, 193, 25, 230, 64, 23, 193, + 25, 229, 163, 23, 3, 1, 220, 58, 2, 219, 57, 23, 3, 1, 220, 58, 2, 234, + 115, 23, 3, 1, 220, 58, 2, 249, 8, 25, 219, 178, 23, 3, 1, 220, 58, 2, + 249, 8, 25, 230, 64, 23, 3, 1, 227, 150, 2, 228, 206, 23, 3, 1, 227, 150, + 2, 249, 144, 23, 3, 1, 220, 58, 2, 229, 163, 23, 3, 1, 220, 58, 2, 249, + 8, 25, 229, 163, 23, 6, 1, 220, 58, 2, 219, 57, 23, 6, 1, 220, 58, 2, + 234, 115, 23, 6, 1, 220, 58, 2, 219, 178, 23, 6, 1, 220, 58, 2, 230, 64, + 23, 6, 1, 227, 150, 2, 249, 144, 23, 249, 8, 25, 219, 178, 23, 249, 8, + 25, 230, 64, 23, 219, 178, 23, 3, 1, 230, 144, 2, 219, 179, 25, 217, 207, + 23, 3, 1, 230, 144, 2, 217, 207, 23, 3, 1, 230, 144, 2, 230, 65, 25, 217, + 207, 23, 3, 1, 230, 144, 2, 229, 163, 23, 3, 1, 230, 144, 2, 229, 164, + 25, 217, 207, 23, 6, 1, 230, 142, 2, 219, 178, 23, 6, 1, 230, 142, 2, + 230, 64, 23, 6, 1, 230, 144, 2, 219, 178, 23, 6, 1, 230, 144, 2, 230, 64, + 23, 6, 1, 230, 144, 2, 228, 217, 23, 230, 64, 23, 249, 144, 246, 198, + 228, 95, 246, 206, 228, 95, 246, 198, 223, 254, 246, 206, 223, 254, 221, + 226, 223, 254, 245, 114, 223, 254, 224, 80, 223, 254, 245, 194, 223, 254, + 228, 197, 223, 254, 221, 253, 223, 254, 243, 201, 223, 254, 217, 85, 218, + 199, 223, 254, 217, 85, 218, 199, 231, 197, 217, 85, 218, 199, 237, 54, + 235, 108, 78, 227, 102, 78, 242, 121, 231, 198, 242, 121, 245, 194, 249, + 146, 246, 198, 249, 146, 246, 206, 249, 146, 186, 135, 51, 69, 235, 43, + 51, 109, 235, 43, 42, 224, 109, 228, 69, 78, 45, 224, 109, 228, 69, 78, + 224, 109, 234, 238, 228, 69, 78, 224, 109, 243, 98, 228, 69, 78, 42, 51, + 228, 69, 78, 45, 51, 228, 69, 78, 51, 234, 238, 228, 69, 78, 51, 243, 98, + 228, 69, 78, 249, 192, 51, 249, 192, 251, 241, 221, 87, 251, 241, 131, + 61, 235, 121, 124, 61, 235, 121, 186, 246, 208, 242, 119, 229, 31, 235, + 44, 225, 54, 229, 241, 225, 54, 235, 108, 246, 204, 227, 102, 246, 204, + 229, 20, 248, 209, 245, 123, 235, 108, 230, 71, 227, 102, 230, 71, 232, + 210, 231, 203, 223, 254, 229, 170, 233, 164, 55, 229, 170, 222, 66, 221, + 232, 55, 228, 235, 51, 228, 235, 221, 78, 228, 235, 210, 228, 235, 210, + 51, 228, 235, 210, 221, 78, 228, 235, 251, 134, 224, 109, 235, 112, 254, + 120, 228, 69, 78, 224, 109, 227, 106, 254, 120, 228, 69, 78, 227, 199, + 78, 51, 246, 95, 78, 237, 177, 230, 73, 220, 78, 126, 221, 200, 251, 135, + 237, 191, 229, 31, 253, 249, 242, 122, 251, 241, 245, 108, 224, 55, 42, + 40, 252, 18, 2, 228, 77, 45, 40, 252, 18, 2, 228, 77, 51, 228, 82, 78, + 228, 82, 246, 95, 78, 246, 95, 228, 82, 78, 221, 164, 5, 246, 123, 210, + 229, 73, 55, 84, 127, 251, 241, 84, 90, 251, 241, 109, 253, 251, 210, + 225, 67, 250, 198, 220, 63, 124, 253, 250, 254, 159, 219, 101, 250, 167, + 233, 155, 55, 223, 23, 249, 146, 237, 170, 220, 78, 245, 145, 228, 197, + 78, 148, 61, 228, 196, 228, 92, 228, 235, 245, 116, 61, 228, 196, 245, + 170, 61, 228, 196, 124, 61, 228, 196, 245, 116, 61, 78, 247, 143, 250, + 100, 221, 86, 69, 245, 116, 248, 143, 234, 18, 14, 223, 254, 218, 174, + 237, 54, 245, 88, 254, 76, 237, 168, 221, 176, 237, 168, 225, 54, 237, + 168, 229, 43, 237, 201, 222, 228, 223, 34, 254, 250, 222, 228, 223, 34, + 237, 201, 12, 245, 124, 225, 5, 254, 250, 12, 245, 124, 225, 5, 232, 206, + 20, 225, 6, 231, 199, 20, 225, 6, 223, 59, 217, 84, 223, 59, 7, 3, 1, 72, + 223, 59, 154, 223, 59, 174, 223, 59, 182, 223, 59, 191, 223, 59, 185, + 223, 59, 190, 223, 59, 88, 55, 223, 59, 233, 154, 223, 59, 246, 154, 55, + 223, 59, 42, 229, 229, 223, 59, 45, 229, 229, 223, 59, 7, 3, 1, 207, 223, + 94, 217, 84, 223, 94, 107, 223, 94, 103, 223, 94, 160, 223, 94, 154, 223, + 94, 174, 223, 94, 182, 223, 94, 191, 223, 94, 185, 223, 94, 190, 223, 94, + 88, 55, 223, 94, 233, 154, 223, 94, 246, 154, 55, 223, 94, 42, 229, 229, + 223, 94, 45, 229, 229, 7, 223, 94, 3, 1, 60, 7, 223, 94, 3, 1, 73, 7, + 223, 94, 3, 1, 74, 7, 223, 94, 3, 1, 218, 151, 7, 223, 94, 3, 1, 226, + 104, 246, 106, 55, 250, 176, 55, 250, 94, 55, 245, 102, 245, 104, 55, + 235, 30, 55, 233, 165, 55, 232, 223, 55, 229, 153, 55, 227, 4, 55, 218, + 182, 55, 146, 224, 232, 55, 248, 152, 55, 246, 107, 55, 236, 100, 55, + 220, 252, 55, 247, 127, 55, 244, 170, 229, 177, 55, 229, 151, 55, 244, + 14, 55, 253, 224, 55, 242, 176, 55, 251, 94, 55, 235, 24, 221, 111, 55, + 223, 246, 55, 222, 64, 55, 36, 42, 243, 177, 50, 36, 45, 243, 177, 50, + 36, 171, 69, 235, 44, 230, 74, 36, 224, 192, 69, 235, 44, 230, 74, 36, + 254, 104, 76, 50, 36, 250, 199, 76, 50, 36, 42, 76, 50, 36, 45, 76, 50, + 36, 227, 94, 230, 74, 36, 250, 199, 227, 94, 230, 74, 36, 254, 104, 227, + 94, 230, 74, 36, 148, 188, 50, 36, 245, 116, 188, 50, 36, 246, 193, 250, + 221, 36, 246, 193, 223, 227, 36, 246, 193, 249, 4, 36, 246, 193, 250, + 222, 252, 230, 36, 42, 45, 76, 50, 36, 246, 193, 226, 100, 36, 246, 193, + 236, 152, 36, 246, 193, 220, 55, 229, 28, 221, 90, 36, 227, 160, 224, 18, + 230, 74, 36, 51, 69, 214, 230, 74, 36, 254, 111, 100, 36, 221, 78, 220, + 80, 36, 218, 201, 252, 4, 50, 36, 127, 76, 230, 74, 36, 171, 51, 224, 18, + 230, 74, 36, 90, 243, 177, 2, 192, 247, 129, 36, 127, 243, 177, 2, 192, + 247, 129, 36, 42, 76, 56, 36, 45, 76, 56, 36, 253, 252, 50, 254, 254, + 230, 165, 254, 241, 199, 222, 23, 223, 98, 173, 6, 251, 202, 249, 77, + 251, 88, 251, 85, 235, 44, 100, 251, 136, 230, 165, 251, 165, 220, 86, + 246, 108, 250, 144, 226, 98, 249, 77, 245, 250, 102, 3, 245, 67, 102, 6, + 243, 225, 252, 51, 6, 243, 225, 173, 6, 243, 225, 229, 53, 250, 144, 229, + 53, 250, 145, 104, 124, 229, 108, 102, 6, 72, 252, 51, 6, 72, 102, 6, + 153, 102, 3, 153, 235, 202, 49, 252, 201, 100, 173, 6, 207, 231, 105, 55, + 224, 9, 227, 210, 250, 125, 102, 6, 230, 59, 173, 6, 230, 59, 173, 6, + 228, 163, 102, 6, 152, 252, 51, 6, 152, 173, 6, 152, 228, 239, 222, 129, + 227, 169, 225, 50, 78, 222, 72, 55, 221, 107, 164, 55, 219, 153, 173, 6, + 217, 157, 230, 85, 55, 230, 160, 55, 237, 170, 230, 160, 55, 252, 51, 6, + 217, 157, 215, 23, 3, 1, 237, 162, 236, 175, 55, 254, 118, 55, 102, 6, + 253, 204, 252, 51, 6, 251, 202, 246, 126, 100, 102, 3, 73, 102, 6, 73, + 102, 6, 246, 74, 215, 6, 246, 74, 102, 6, 189, 102, 3, 74, 99, 100, 252, + 105, 100, 244, 92, 100, 249, 178, 100, 237, 205, 224, 7, 227, 59, 6, 228, + 163, 245, 252, 55, 173, 3, 229, 108, 173, 3, 244, 231, 173, 6, 244, 231, + 173, 6, 229, 108, 173, 233, 33, 223, 71, 215, 33, 6, 245, 67, 215, 33, 6, + 153, 210, 33, 6, 153, 215, 33, 6, 218, 90, 173, 30, 6, 250, 46, 173, 30, + 3, 250, 46, 173, 30, 3, 73, 173, 30, 3, 72, 173, 30, 3, 237, 126, 228, + 220, 235, 43, 215, 254, 134, 229, 170, 55, 254, 177, 215, 3, 246, 74, 16, + 35, 213, 224, 7, 219, 55, 245, 108, 131, 225, 40, 219, 55, 245, 108, 131, + 232, 26, 219, 55, 245, 108, 131, 222, 61, 219, 55, 245, 108, 131, 221, + 251, 219, 55, 245, 108, 124, 221, 249, 219, 55, 245, 108, 131, 245, 199, + 219, 55, 245, 108, 124, 245, 198, 219, 55, 245, 108, 148, 245, 198, 219, + 55, 245, 108, 245, 116, 245, 198, 219, 55, 245, 108, 131, 224, 73, 219, + 55, 245, 108, 245, 170, 224, 71, 219, 55, 245, 108, 131, 246, 231, 219, + 55, 245, 108, 148, 246, 229, 219, 55, 245, 108, 245, 170, 246, 229, 219, + 55, 245, 108, 225, 43, 246, 229, 245, 108, 231, 106, 107, 227, 68, 231, + 107, 107, 227, 68, 231, 107, 103, 227, 68, 231, 107, 160, 227, 68, 231, + 107, 154, 227, 68, 231, 107, 174, 227, 68, 231, 107, 182, 227, 68, 231, + 107, 191, 227, 68, 231, 107, 185, 227, 68, 231, 107, 190, 227, 68, 231, + 107, 222, 65, 227, 68, 231, 107, 246, 211, 227, 68, 231, 107, 220, 221, + 227, 68, 231, 107, 245, 196, 227, 68, 231, 107, 131, 242, 161, 227, 68, + 231, 107, 245, 170, 242, 161, 227, 68, 231, 107, 131, 221, 231, 3, 227, + 68, 231, 107, 107, 3, 227, 68, 231, 107, 103, 3, 227, 68, 231, 107, 160, + 3, 227, 68, 231, 107, 154, 3, 227, 68, 231, 107, 174, 3, 227, 68, 231, + 107, 182, 3, 227, 68, 231, 107, 191, 3, 227, 68, 231, 107, 185, 3, 227, + 68, 231, 107, 190, 3, 227, 68, 231, 107, 222, 65, 3, 227, 68, 231, 107, + 246, 211, 3, 227, 68, 231, 107, 220, 221, 3, 227, 68, 231, 107, 245, 196, + 3, 227, 68, 231, 107, 131, 242, 161, 3, 227, 68, 231, 107, 245, 170, 242, + 161, 3, 227, 68, 231, 107, 131, 221, 231, 227, 68, 231, 107, 131, 221, + 232, 251, 203, 250, 46, 227, 68, 231, 107, 245, 170, 221, 231, 227, 68, + 231, 107, 222, 66, 221, 231, 227, 68, 231, 107, 210, 131, 242, 161, 7, 3, + 1, 210, 251, 202, 227, 68, 231, 107, 224, 82, 235, 140, 17, 227, 68, 231, + 107, 245, 197, 247, 10, 17, 227, 68, 231, 107, 245, 197, 221, 231, 227, + 68, 231, 107, 131, 242, 162, 221, 231, 219, 55, 245, 108, 217, 85, 221, + 249, 127, 65, 220, 53, 65, 90, 65, 247, 130, 65, 42, 45, 65, 108, 113, + 65, 231, 187, 218, 217, 65, 231, 187, 247, 5, 65, 224, 6, 247, 5, 65, + 224, 6, 218, 217, 65, 127, 76, 2, 92, 90, 76, 2, 92, 127, 218, 237, 65, + 90, 218, 237, 65, 127, 124, 243, 158, 65, 220, 53, 124, 243, 158, 65, 90, + 124, 243, 158, 65, 247, 130, 124, 243, 158, 65, 127, 76, 2, 222, 135, 90, + 76, 2, 222, 135, 127, 76, 245, 97, 135, 220, 53, 76, 245, 97, 135, 90, + 76, 245, 97, 135, 247, 130, 76, 245, 97, 135, 108, 113, 76, 2, 252, 189, + 127, 76, 2, 96, 90, 76, 2, 96, 127, 76, 2, 234, 247, 90, 76, 2, 234, 247, + 42, 45, 218, 237, 65, 42, 45, 76, 2, 92, 247, 130, 217, 33, 65, 220, 53, + 76, 2, 221, 170, 235, 107, 220, 53, 76, 2, 221, 170, 227, 100, 247, 130, + 76, 2, 221, 170, 235, 107, 247, 130, 76, 2, 221, 170, 227, 100, 90, 76, + 2, 250, 124, 247, 129, 247, 130, 76, 2, 250, 124, 235, 107, 254, 104, + 221, 120, 225, 70, 65, 250, 199, 221, 120, 225, 70, 65, 231, 187, 218, + 217, 76, 199, 171, 135, 127, 76, 199, 252, 201, 104, 90, 76, 199, 135, + 254, 104, 230, 119, 250, 222, 65, 250, 199, 230, 119, 250, 222, 65, 127, + 243, 177, 2, 192, 220, 52, 127, 243, 177, 2, 192, 247, 129, 220, 53, 243, + 177, 2, 192, 227, 100, 220, 53, 243, 177, 2, 192, 235, 107, 90, 243, 177, + 2, 192, 220, 52, 90, 243, 177, 2, 192, 247, 129, 247, 130, 243, 177, 2, + 192, 227, 100, 247, 130, 243, 177, 2, 192, 235, 107, 90, 76, 104, 127, + 65, 220, 53, 76, 127, 117, 247, 130, 65, 127, 76, 104, 90, 65, 127, 230, + 32, 254, 19, 220, 53, 230, 32, 254, 19, 90, 230, 32, 254, 19, 247, 130, + 230, 32, 254, 19, 127, 243, 177, 104, 90, 243, 176, 90, 243, 177, 104, + 127, 243, 176, 127, 51, 76, 2, 92, 42, 45, 51, 76, 2, 92, 90, 51, 76, 2, + 92, 127, 51, 65, 220, 53, 51, 65, 90, 51, 65, 247, 130, 51, 65, 42, 45, + 51, 65, 108, 113, 51, 65, 231, 187, 218, 217, 51, 65, 231, 187, 247, 5, + 51, 65, 224, 6, 247, 5, 51, 65, 224, 6, 218, 217, 51, 65, 127, 221, 78, + 65, 90, 221, 78, 65, 127, 223, 223, 65, 90, 223, 223, 65, 220, 53, 76, 2, + 51, 92, 247, 130, 76, 2, 51, 92, 127, 249, 145, 65, 220, 53, 249, 145, + 65, 90, 249, 145, 65, 247, 130, 249, 145, 65, 127, 76, 199, 135, 90, 76, + 199, 135, 127, 67, 65, 220, 53, 67, 65, 90, 67, 65, 247, 130, 67, 65, + 220, 53, 67, 76, 245, 97, 135, 220, 53, 67, 76, 230, 139, 229, 193, 220, + 53, 67, 76, 230, 139, 229, 194, 2, 186, 135, 220, 53, 67, 76, 230, 139, + 229, 194, 2, 69, 135, 220, 53, 67, 51, 65, 220, 53, 67, 51, 76, 230, 139, + 229, 193, 90, 67, 76, 245, 97, 218, 254, 231, 187, 218, 217, 76, 199, + 250, 123, 224, 6, 247, 5, 76, 199, 250, 123, 108, 113, 67, 65, 45, 76, 2, + 3, 250, 221, 247, 130, 76, 127, 117, 220, 53, 65, 148, 90, 254, 19, 127, + 76, 2, 69, 92, 90, 76, 2, 69, 92, 42, 45, 76, 2, 69, 92, 127, 76, 2, 51, + 69, 92, 90, 76, 2, 51, 69, 92, 42, 45, 76, 2, 51, 69, 92, 127, 230, 117, + 65, 90, 230, 117, 65, 42, 45, 230, 117, 65, 35, 254, 157, 250, 164, 229, + 223, 248, 246, 222, 14, 246, 91, 222, 14, 248, 160, 212, 246, 92, 246, + 199, 225, 45, 237, 215, 232, 231, 246, 213, 230, 165, 212, 254, 132, 246, + 213, 230, 165, 3, 246, 213, 230, 165, 250, 140, 254, 14, 233, 254, 248, + 160, 212, 250, 142, 254, 14, 233, 254, 3, 250, 140, 254, 14, 233, 254, + 246, 190, 117, 228, 222, 233, 33, 228, 229, 233, 33, 250, 128, 233, 33, + 223, 71, 233, 155, 55, 233, 153, 55, 61, 229, 43, 248, 188, 224, 55, 225, + 46, 233, 154, 253, 252, 230, 112, 227, 94, 230, 112, 251, 242, 230, 112, + 40, 227, 64, 250, 89, 227, 64, 245, 110, 227, 64, 228, 218, 101, 237, + 207, 45, 254, 119, 254, 119, 234, 22, 254, 119, 223, 245, 254, 119, 248, + 190, 248, 160, 212, 248, 193, 229, 234, 101, 212, 229, 234, 101, 235, 7, + 254, 126, 235, 7, 230, 105, 237, 174, 220, 74, 237, 186, 51, 237, 186, + 221, 78, 237, 186, 250, 136, 237, 186, 223, 49, 237, 186, 219, 65, 237, + 186, 250, 199, 237, 186, 250, 199, 250, 136, 237, 186, 254, 104, 250, + 136, 237, 186, 222, 13, 252, 138, 227, 224, 228, 219, 61, 233, 154, 246, + 96, 244, 176, 228, 219, 242, 250, 221, 180, 230, 112, 210, 221, 179, 237, + 170, 235, 129, 198, 224, 111, 218, 236, 218, 168, 228, 229, 212, 221, + 179, 233, 155, 221, 179, 253, 247, 114, 101, 212, 253, 247, 114, 101, + 254, 72, 114, 101, 254, 72, 251, 222, 212, 254, 249, 114, 101, 232, 135, + 254, 72, 231, 190, 254, 249, 114, 101, 254, 151, 114, 101, 212, 254, 151, + 114, 101, 254, 151, 114, 156, 114, 101, 221, 78, 221, 179, 254, 158, 114, + 101, 246, 150, 101, 244, 175, 246, 150, 101, 248, 247, 252, 99, 254, 74, + 222, 23, 235, 51, 244, 175, 114, 101, 254, 72, 114, 199, 156, 222, 23, + 237, 237, 230, 165, 237, 237, 117, 156, 254, 72, 114, 101, 250, 176, 246, + 153, 246, 154, 250, 175, 227, 94, 237, 224, 114, 101, 227, 94, 114, 101, + 250, 117, 101, 246, 125, 246, 152, 101, 223, 157, 246, 153, 249, 63, 114, + 101, 114, 199, 251, 213, 249, 78, 234, 22, 251, 212, 228, 80, 114, 101, + 212, 114, 101, 242, 59, 101, 212, 242, 59, 101, 223, 123, 246, 150, 101, + 235, 87, 156, 114, 101, 244, 30, 156, 114, 101, 235, 87, 104, 114, 101, + 244, 30, 104, 114, 101, 235, 87, 251, 222, 212, 114, 101, 244, 30, 251, + 222, 212, 114, 101, 233, 95, 235, 86, 233, 95, 244, 29, 252, 99, 212, + 246, 150, 101, 212, 235, 86, 212, 244, 29, 232, 135, 235, 87, 231, 190, + 114, 101, 232, 135, 244, 30, 231, 190, 114, 101, 235, 87, 156, 246, 150, + 101, 244, 30, 156, 246, 150, 101, 232, 135, 235, 87, 231, 190, 246, 150, + 101, 232, 135, 244, 30, 231, 190, 246, 150, 101, 235, 87, 156, 244, 29, + 244, 30, 156, 235, 86, 232, 135, 235, 87, 231, 190, 244, 29, 232, 135, + 244, 30, 231, 190, 235, 86, 228, 244, 223, 84, 228, 245, 156, 114, 101, + 223, 85, 156, 114, 101, 228, 245, 156, 246, 150, 101, 223, 85, 156, 246, + 150, 101, 248, 160, 212, 228, 247, 248, 160, 212, 223, 86, 223, 93, 230, + 165, 223, 58, 230, 165, 212, 112, 223, 93, 230, 165, 212, 112, 223, 58, + 230, 165, 223, 93, 117, 156, 114, 101, 223, 58, 117, 156, 114, 101, 232, + 135, 112, 223, 93, 117, 231, 190, 114, 101, 232, 135, 112, 223, 58, 117, + 231, 190, 114, 101, 223, 93, 117, 2, 212, 114, 101, 223, 58, 117, 2, 212, + 114, 101, 233, 81, 233, 82, 233, 83, 233, 82, 220, 74, 40, 237, 237, 230, + 165, 40, 230, 101, 230, 165, 40, 237, 237, 117, 156, 114, 101, 40, 230, + 101, 117, 156, 114, 101, 40, 251, 143, 40, 250, 82, 34, 229, 43, 34, 233, + 154, 34, 221, 176, 34, 248, 188, 224, 55, 34, 61, 230, 112, 34, 227, 94, + 230, 112, 34, 253, 252, 230, 112, 34, 246, 153, 34, 249, 146, 204, 229, + 43, 204, 233, 154, 204, 221, 176, 204, 61, 230, 112, 45, 222, 143, 42, + 222, 143, 113, 222, 143, 108, 222, 143, 253, 255, 233, 133, 221, 62, 245, + 128, 221, 78, 69, 252, 201, 45, 220, 236, 51, 69, 252, 201, 51, 45, 220, + 236, 248, 160, 212, 228, 214, 212, 221, 62, 248, 160, 212, 245, 129, 232, + 138, 51, 69, 252, 201, 51, 45, 220, 236, 228, 245, 220, 82, 227, 192, + 223, 85, 220, 82, 227, 192, 231, 188, 223, 101, 230, 165, 250, 140, 254, + 14, 231, 188, 223, 100, 231, 188, 223, 101, 117, 156, 114, 101, 250, 140, + 254, 14, 231, 188, 223, 101, 156, 114, 101, 230, 101, 230, 165, 237, 237, + 230, 165, 233, 87, 243, 131, 250, 150, 234, 49, 237, 183, 218, 118, 232, + 216, 231, 189, 45, 254, 120, 2, 254, 51, 45, 221, 90, 233, 33, 235, 7, + 254, 126, 233, 33, 235, 7, 230, 105, 233, 33, 237, 174, 233, 33, 220, 74, + 249, 5, 230, 112, 61, 230, 112, 223, 157, 230, 112, 248, 188, 221, 176, + 252, 22, 42, 231, 188, 245, 251, 225, 66, 228, 229, 45, 231, 188, 245, + 251, 225, 66, 228, 229, 42, 225, 66, 228, 229, 45, 225, 66, 228, 229, + 210, 221, 180, 246, 153, 250, 79, 235, 7, 230, 105, 250, 79, 235, 7, 254, + 126, 51, 223, 92, 51, 223, 57, 51, 237, 174, 51, 220, 74, 229, 62, 114, + 25, 229, 234, 101, 235, 87, 2, 248, 145, 244, 30, 2, 248, 145, 219, 100, + 233, 95, 235, 86, 219, 100, 233, 95, 244, 29, 235, 87, 114, 199, 156, + 244, 29, 244, 30, 114, 199, 156, 235, 86, 114, 199, 156, 235, 86, 114, + 199, 156, 244, 29, 114, 199, 156, 228, 244, 114, 199, 156, 223, 84, 248, + 160, 212, 228, 248, 156, 246, 155, 248, 160, 212, 223, 87, 156, 246, 155, + 212, 40, 237, 237, 117, 156, 114, 101, 212, 40, 230, 101, 117, 156, 114, + 101, 40, 237, 237, 117, 156, 212, 114, 101, 40, 230, 101, 117, 156, 212, + 114, 101, 235, 87, 251, 222, 212, 246, 150, 101, 244, 30, 251, 222, 212, + 246, 150, 101, 228, 245, 251, 222, 212, 246, 150, 101, 223, 85, 251, 222, + 212, 246, 150, 101, 212, 231, 188, 223, 101, 230, 165, 248, 160, 212, + 250, 142, 254, 14, 231, 188, 223, 100, 212, 231, 188, 223, 101, 117, 156, + 114, 101, 248, 160, 212, 250, 142, 254, 14, 231, 188, 223, 101, 156, 246, + 155, 69, 246, 208, 233, 191, 186, 246, 208, 108, 45, 249, 11, 246, 208, + 113, 45, 249, 11, 246, 208, 246, 213, 117, 2, 171, 186, 92, 246, 213, + 117, 2, 69, 252, 201, 253, 245, 246, 190, 117, 186, 92, 3, 246, 213, 117, + 2, 69, 252, 201, 253, 245, 246, 190, 117, 186, 92, 246, 213, 117, 2, 61, + 50, 246, 213, 117, 2, 230, 77, 3, 246, 213, 117, 2, 230, 77, 246, 213, + 117, 2, 220, 81, 246, 213, 117, 2, 124, 186, 223, 107, 250, 140, 2, 171, + 186, 92, 250, 140, 2, 69, 252, 201, 253, 245, 246, 190, 117, 186, 92, 3, + 250, 140, 2, 69, 252, 201, 253, 245, 246, 190, 117, 186, 92, 250, 140, 2, + 230, 77, 3, 250, 140, 2, 230, 77, 217, 158, 165, 252, 226, 233, 253, 249, + 6, 55, 246, 215, 65, 242, 182, 108, 254, 20, 113, 254, 20, 228, 225, 229, + 156, 218, 235, 235, 43, 42, 251, 90, 45, 251, 90, 42, 245, 149, 45, 245, + 149, 252, 29, 45, 250, 102, 252, 29, 42, 250, 102, 221, 120, 45, 250, + 102, 221, 120, 42, 250, 102, 210, 212, 55, 40, 234, 234, 254, 51, 226, + 80, 226, 85, 222, 72, 227, 211, 229, 16, 237, 211, 219, 88, 223, 227, + 229, 57, 117, 237, 182, 55, 215, 212, 55, 218, 242, 242, 183, 221, 120, + 42, 250, 123, 221, 120, 45, 250, 123, 252, 29, 42, 250, 123, 252, 29, 45, + 250, 123, 221, 120, 144, 237, 186, 252, 29, 144, 237, 186, 245, 95, 224, + 39, 108, 254, 21, 252, 100, 124, 186, 252, 191, 230, 107, 236, 154, 246, + 146, 199, 222, 23, 227, 109, 218, 152, 237, 224, 112, 227, 209, 252, 21, + 236, 153, 235, 112, 254, 120, 115, 227, 106, 254, 120, 115, 246, 146, + 199, 222, 23, 235, 115, 252, 111, 227, 93, 250, 56, 254, 158, 254, 28, + 222, 227, 221, 112, 227, 9, 248, 228, 230, 102, 250, 152, 222, 113, 224, + 49, 250, 114, 250, 113, 179, 180, 16, 242, 104, 179, 180, 16, 223, 221, + 228, 95, 179, 180, 16, 228, 96, 246, 155, 179, 180, 16, 228, 96, 248, + 193, 179, 180, 16, 228, 96, 249, 4, 179, 180, 16, 228, 96, 237, 47, 179, + 180, 16, 228, 96, 250, 221, 179, 180, 16, 250, 222, 223, 142, 179, 180, + 16, 250, 222, 237, 47, 179, 180, 16, 224, 56, 135, 179, 180, 16, 252, + 231, 135, 179, 180, 16, 228, 96, 224, 55, 179, 180, 16, 228, 96, 252, + 230, 179, 180, 16, 228, 96, 235, 86, 179, 180, 16, 228, 96, 244, 29, 179, + 180, 16, 127, 219, 183, 179, 180, 16, 90, 219, 183, 179, 180, 16, 228, + 96, 127, 65, 179, 180, 16, 228, 96, 90, 65, 179, 180, 16, 250, 222, 252, + 230, 179, 180, 16, 113, 222, 144, 220, 81, 179, 180, 16, 249, 63, 223, + 142, 179, 180, 16, 228, 96, 113, 251, 134, 179, 180, 16, 228, 96, 249, + 62, 179, 180, 16, 113, 222, 144, 237, 47, 179, 180, 16, 220, 53, 219, + 183, 179, 180, 16, 228, 96, 220, 53, 65, 179, 180, 16, 108, 222, 144, + 230, 77, 179, 180, 16, 249, 72, 223, 142, 179, 180, 16, 228, 96, 108, + 251, 134, 179, 180, 16, 228, 96, 249, 71, 179, 180, 16, 108, 222, 144, + 237, 47, 179, 180, 16, 247, 130, 219, 183, 179, 180, 16, 228, 96, 247, + 130, 65, 179, 180, 16, 228, 68, 220, 81, 179, 180, 16, 249, 63, 220, 81, + 179, 180, 16, 249, 5, 220, 81, 179, 180, 16, 237, 48, 220, 81, 179, 180, + 16, 250, 222, 220, 81, 179, 180, 16, 108, 224, 198, 237, 47, 179, 180, + 16, 228, 68, 228, 95, 179, 180, 16, 250, 222, 223, 156, 179, 180, 16, + 228, 96, 250, 175, 179, 180, 16, 108, 222, 144, 249, 13, 179, 180, 16, + 249, 72, 249, 13, 179, 180, 16, 223, 157, 249, 13, 179, 180, 16, 237, 48, + 249, 13, 179, 180, 16, 250, 222, 249, 13, 179, 180, 16, 113, 224, 198, + 223, 142, 179, 180, 16, 42, 224, 198, 223, 142, 179, 180, 16, 221, 180, + 249, 13, 179, 180, 16, 244, 30, 249, 13, 179, 180, 16, 250, 169, 135, + 179, 180, 16, 249, 72, 221, 179, 179, 180, 16, 217, 32, 179, 180, 16, + 223, 143, 221, 179, 179, 180, 16, 225, 68, 220, 81, 179, 180, 16, 228, + 96, 212, 246, 155, 179, 180, 16, 228, 96, 228, 81, 179, 180, 16, 113, + 251, 135, 221, 179, 179, 180, 16, 108, 251, 135, 221, 179, 179, 180, 16, + 237, 162, 179, 180, 16, 227, 149, 179, 180, 16, 230, 143, 179, 180, 16, + 254, 147, 220, 81, 179, 180, 16, 246, 157, 220, 81, 179, 180, 16, 237, + 163, 220, 81, 179, 180, 16, 230, 144, 220, 81, 179, 180, 16, 254, 146, + 212, 251, 45, 78, 45, 254, 120, 2, 247, 130, 217, 33, 65, 224, 177, 230, + 119, 252, 21, 252, 120, 100, 69, 235, 44, 2, 233, 193, 248, 145, 237, + 191, 100, 250, 137, 220, 79, 100, 248, 204, 220, 79, 100, 246, 201, 100, + 250, 160, 100, 67, 40, 2, 251, 85, 69, 235, 43, 246, 179, 100, 254, 142, + 236, 155, 100, 243, 142, 100, 34, 186, 252, 201, 2, 231, 183, 34, 221, + 91, 247, 132, 252, 1, 250, 222, 2, 231, 186, 65, 220, 77, 100, 233, 122, + 100, 242, 117, 100, 230, 118, 243, 224, 100, 230, 118, 235, 200, 100, + 229, 218, 100, 229, 217, 100, 248, 210, 250, 77, 16, 245, 124, 103, 224, + 20, 100, 179, 180, 16, 228, 95, 249, 86, 225, 55, 236, 155, 100, 228, + 237, 230, 34, 232, 120, 230, 34, 228, 234, 226, 101, 100, 250, 209, 226, + 101, 100, 42, 229, 230, 220, 60, 96, 42, 229, 230, 246, 86, 42, 229, 230, + 234, 237, 96, 45, 229, 230, 220, 60, 96, 45, 229, 230, 246, 86, 45, 229, + 230, 234, 237, 96, 42, 40, 252, 18, 220, 60, 250, 123, 42, 40, 252, 18, + 246, 86, 42, 40, 252, 18, 234, 237, 250, 123, 45, 40, 252, 18, 220, 60, + 250, 123, 45, 40, 252, 18, 246, 86, 45, 40, 252, 18, 234, 237, 250, 123, + 42, 250, 79, 252, 18, 220, 60, 96, 42, 250, 79, 252, 18, 233, 193, 229, + 102, 42, 250, 79, 252, 18, 234, 237, 96, 250, 79, 252, 18, 246, 86, 45, + 250, 79, 252, 18, 220, 60, 96, 45, 250, 79, 252, 18, 233, 193, 229, 102, + 45, 250, 79, 252, 18, 234, 237, 96, 237, 187, 246, 86, 186, 235, 44, 246, + 86, 220, 60, 42, 156, 234, 237, 45, 250, 79, 252, 18, 226, 86, 220, 60, + 45, 156, 234, 237, 42, 250, 79, 252, 18, 226, 86, 223, 72, 221, 119, 223, + 72, 252, 28, 221, 120, 40, 115, 252, 29, 40, 115, 252, 29, 40, 252, 18, + 104, 221, 120, 40, 115, 32, 16, 252, 28, 42, 69, 86, 235, 43, 45, 69, 86, + 235, 43, 186, 226, 112, 235, 42, 186, 226, 112, 235, 41, 186, 226, 112, + 235, 40, 186, 226, 112, 235, 39, 249, 54, 16, 170, 69, 25, 221, 120, 227, + 109, 249, 54, 16, 170, 69, 25, 252, 29, 227, 109, 249, 54, 16, 170, 69, + 2, 250, 221, 249, 54, 16, 170, 113, 25, 186, 2, 250, 221, 249, 54, 16, + 170, 108, 25, 186, 2, 250, 221, 249, 54, 16, 170, 69, 2, 221, 90, 249, + 54, 16, 170, 113, 25, 186, 2, 221, 90, 249, 54, 16, 170, 108, 25, 186, 2, + 221, 90, 249, 54, 16, 170, 69, 25, 218, 236, 249, 54, 16, 170, 113, 25, + 186, 2, 218, 236, 249, 54, 16, 170, 108, 25, 186, 2, 218, 236, 249, 54, + 16, 170, 113, 25, 242, 241, 249, 54, 16, 170, 108, 25, 242, 241, 249, 54, + 16, 170, 69, 25, 221, 120, 235, 115, 249, 54, 16, 170, 69, 25, 252, 29, + 235, 115, 40, 245, 133, 227, 163, 100, 246, 225, 100, 69, 235, 44, 246, + 86, 233, 233, 252, 8, 233, 233, 171, 104, 224, 191, 233, 233, 224, 192, + 104, 235, 2, 233, 233, 171, 104, 124, 224, 179, 233, 233, 124, 224, 180, + 104, 235, 2, 233, 233, 124, 224, 180, 237, 55, 233, 233, 221, 75, 233, + 233, 222, 43, 233, 233, 229, 174, 247, 9, 244, 24, 245, 81, 221, 120, + 229, 229, 252, 29, 229, 229, 221, 120, 250, 79, 115, 252, 29, 250, 79, + 115, 221, 120, 221, 114, 224, 236, 115, 252, 29, 221, 114, 224, 236, 115, + 67, 221, 101, 252, 111, 227, 94, 2, 250, 221, 223, 129, 245, 155, 255, 3, + 250, 76, 246, 214, 237, 174, 249, 86, 246, 88, 100, 16, 35, 231, 110, 16, + 35, 223, 154, 117, 243, 157, 16, 35, 223, 154, 117, 222, 39, 16, 35, 246, + 190, 117, 222, 39, 16, 35, 246, 190, 117, 221, 104, 16, 35, 246, 181, 16, + 35, 254, 252, 16, 35, 252, 119, 16, 35, 252, 229, 16, 35, 186, 222, 145, + 16, 35, 235, 44, 245, 224, 16, 35, 69, 222, 145, 16, 35, 245, 124, 245, + 224, 16, 35, 251, 128, 227, 162, 16, 35, 224, 217, 230, 83, 16, 35, 224, + 217, 237, 223, 16, 35, 249, 142, 235, 34, 246, 135, 16, 35, 249, 42, 250, + 132, 107, 16, 35, 249, 42, 250, 132, 103, 16, 35, 249, 42, 250, 132, 160, + 16, 35, 249, 42, 250, 132, 154, 16, 35, 232, 136, 254, 252, 16, 35, 222, + 224, 238, 28, 16, 35, 246, 190, 117, 221, 105, 252, 45, 16, 35, 251, 152, + 16, 35, 246, 190, 117, 234, 17, 16, 35, 223, 90, 16, 35, 246, 135, 16, + 35, 245, 189, 225, 54, 16, 35, 244, 23, 225, 54, 16, 35, 227, 212, 225, + 54, 16, 35, 220, 73, 225, 54, 16, 35, 223, 254, 16, 35, 249, 69, 252, 48, + 100, 230, 119, 252, 21, 16, 35, 232, 122, 16, 35, 249, 70, 245, 124, 103, + 16, 35, 223, 91, 245, 124, 103, 230, 171, 96, 230, 171, 251, 64, 230, + 171, 245, 127, 230, 171, 237, 170, 245, 127, 230, 171, 252, 117, 251, + 247, 230, 171, 252, 25, 221, 200, 230, 171, 252, 15, 252, 204, 242, 58, + 230, 171, 254, 135, 117, 251, 44, 230, 171, 249, 146, 230, 171, 250, 70, + 254, 254, 231, 108, 230, 171, 51, 252, 230, 34, 20, 107, 34, 20, 103, 34, + 20, 160, 34, 20, 154, 34, 20, 174, 34, 20, 182, 34, 20, 191, 34, 20, 185, + 34, 20, 190, 34, 54, 222, 65, 34, 54, 246, 211, 34, 54, 220, 221, 34, 54, + 221, 247, 34, 54, 245, 111, 34, 54, 245, 200, 34, 54, 224, 77, 34, 54, + 225, 41, 34, 54, 246, 233, 34, 54, 232, 29, 34, 54, 220, 219, 82, 20, + 107, 82, 20, 103, 82, 20, 160, 82, 20, 154, 82, 20, 174, 82, 20, 182, 82, + 20, 191, 82, 20, 185, 82, 20, 190, 82, 54, 222, 65, 82, 54, 246, 211, 82, + 54, 220, 221, 82, 54, 221, 247, 82, 54, 245, 111, 82, 54, 245, 200, 82, + 54, 224, 77, 82, 54, 225, 41, 82, 54, 246, 233, 82, 54, 232, 29, 82, 54, + 220, 219, 20, 131, 245, 90, 223, 136, 20, 124, 245, 90, 223, 136, 20, + 148, 245, 90, 223, 136, 20, 245, 116, 245, 90, 223, 136, 20, 245, 170, + 245, 90, 223, 136, 20, 224, 82, 245, 90, 223, 136, 20, 225, 43, 245, 90, + 223, 136, 20, 246, 235, 245, 90, 223, 136, 20, 232, 31, 245, 90, 223, + 136, 54, 222, 66, 245, 90, 223, 136, 54, 246, 212, 245, 90, 223, 136, 54, + 220, 222, 245, 90, 223, 136, 54, 221, 248, 245, 90, 223, 136, 54, 245, + 112, 245, 90, 223, 136, 54, 245, 201, 245, 90, 223, 136, 54, 224, 78, + 245, 90, 223, 136, 54, 225, 42, 245, 90, 223, 136, 54, 246, 234, 245, 90, + 223, 136, 54, 232, 30, 245, 90, 223, 136, 54, 220, 220, 245, 90, 223, + 136, 82, 7, 3, 1, 60, 82, 7, 3, 1, 253, 204, 82, 7, 3, 1, 251, 202, 82, + 7, 3, 1, 250, 46, 82, 7, 3, 1, 73, 82, 7, 3, 1, 246, 74, 82, 7, 3, 1, + 245, 67, 82, 7, 3, 1, 243, 225, 82, 7, 3, 1, 72, 82, 7, 3, 1, 237, 126, + 82, 7, 3, 1, 237, 17, 82, 7, 3, 1, 153, 82, 7, 3, 1, 189, 82, 7, 3, 1, + 207, 82, 7, 3, 1, 74, 82, 7, 3, 1, 230, 59, 82, 7, 3, 1, 228, 163, 82, 7, + 3, 1, 152, 82, 7, 3, 1, 198, 82, 7, 3, 1, 222, 201, 82, 7, 3, 1, 68, 82, + 7, 3, 1, 216, 216, 82, 7, 3, 1, 219, 40, 82, 7, 3, 1, 218, 151, 82, 7, 3, + 1, 218, 90, 82, 7, 3, 1, 217, 157, 34, 7, 6, 1, 60, 34, 7, 6, 1, 253, + 204, 34, 7, 6, 1, 251, 202, 34, 7, 6, 1, 250, 46, 34, 7, 6, 1, 73, 34, 7, + 6, 1, 246, 74, 34, 7, 6, 1, 245, 67, 34, 7, 6, 1, 243, 225, 34, 7, 6, 1, + 72, 34, 7, 6, 1, 237, 126, 34, 7, 6, 1, 237, 17, 34, 7, 6, 1, 153, 34, 7, + 6, 1, 189, 34, 7, 6, 1, 207, 34, 7, 6, 1, 74, 34, 7, 6, 1, 230, 59, 34, + 7, 6, 1, 228, 163, 34, 7, 6, 1, 152, 34, 7, 6, 1, 198, 34, 7, 6, 1, 222, + 201, 34, 7, 6, 1, 68, 34, 7, 6, 1, 216, 216, 34, 7, 6, 1, 219, 40, 34, 7, + 6, 1, 218, 151, 34, 7, 6, 1, 218, 90, 34, 7, 6, 1, 217, 157, 34, 7, 3, 1, + 60, 34, 7, 3, 1, 253, 204, 34, 7, 3, 1, 251, 202, 34, 7, 3, 1, 250, 46, + 34, 7, 3, 1, 73, 34, 7, 3, 1, 246, 74, 34, 7, 3, 1, 245, 67, 34, 7, 3, 1, + 243, 225, 34, 7, 3, 1, 72, 34, 7, 3, 1, 237, 126, 34, 7, 3, 1, 237, 17, + 34, 7, 3, 1, 153, 34, 7, 3, 1, 189, 34, 7, 3, 1, 207, 34, 7, 3, 1, 74, + 34, 7, 3, 1, 230, 59, 34, 7, 3, 1, 228, 163, 34, 7, 3, 1, 152, 34, 7, 3, + 1, 198, 34, 7, 3, 1, 222, 201, 34, 7, 3, 1, 68, 34, 7, 3, 1, 216, 216, + 34, 7, 3, 1, 219, 40, 34, 7, 3, 1, 218, 151, 34, 7, 3, 1, 218, 90, 34, 7, + 3, 1, 217, 157, 34, 20, 217, 84, 232, 136, 34, 54, 246, 211, 232, 136, + 34, 54, 220, 221, 232, 136, 34, 54, 221, 247, 232, 136, 34, 54, 245, 111, + 232, 136, 34, 54, 245, 200, 232, 136, 34, 54, 224, 77, 232, 136, 34, 54, + 225, 41, 232, 136, 34, 54, 246, 233, 232, 136, 34, 54, 232, 29, 232, 136, + 34, 54, 220, 219, 51, 34, 20, 107, 51, 34, 20, 103, 51, 34, 20, 160, 51, + 34, 20, 154, 51, 34, 20, 174, 51, 34, 20, 182, 51, 34, 20, 191, 51, 34, + 20, 185, 51, 34, 20, 190, 51, 34, 54, 222, 65, 232, 136, 34, 20, 217, 84, + 86, 89, 170, 242, 241, 86, 89, 106, 242, 241, 86, 89, 170, 219, 152, 86, + 89, 106, 219, 152, 86, 89, 170, 221, 78, 249, 147, 242, 241, 86, 89, 106, + 221, 78, 249, 147, 242, 241, 86, 89, 170, 221, 78, 249, 147, 219, 152, + 86, 89, 106, 221, 78, 249, 147, 219, 152, 86, 89, 170, 228, 92, 249, 147, + 242, 241, 86, 89, 106, 228, 92, 249, 147, 242, 241, 86, 89, 170, 228, 92, + 249, 147, 219, 152, 86, 89, 106, 228, 92, 249, 147, 219, 152, 86, 89, + 170, 113, 25, 227, 109, 86, 89, 113, 170, 25, 45, 243, 149, 86, 89, 113, + 106, 25, 45, 235, 58, 86, 89, 106, 113, 25, 227, 109, 86, 89, 170, 113, + 25, 235, 115, 86, 89, 113, 170, 25, 42, 243, 149, 86, 89, 113, 106, 25, + 42, 235, 58, 86, 89, 106, 113, 25, 235, 115, 86, 89, 170, 108, 25, 227, + 109, 86, 89, 108, 170, 25, 45, 243, 149, 86, 89, 108, 106, 25, 45, 235, + 58, 86, 89, 106, 108, 25, 227, 109, 86, 89, 170, 108, 25, 235, 115, 86, + 89, 108, 170, 25, 42, 243, 149, 86, 89, 108, 106, 25, 42, 235, 58, 86, + 89, 106, 108, 25, 235, 115, 86, 89, 170, 69, 25, 227, 109, 86, 89, 69, + 170, 25, 45, 243, 149, 86, 89, 108, 106, 25, 45, 113, 235, 58, 86, 89, + 113, 106, 25, 45, 108, 235, 58, 86, 89, 69, 106, 25, 45, 235, 58, 86, 89, + 113, 170, 25, 45, 108, 243, 149, 86, 89, 108, 170, 25, 45, 113, 243, 149, + 86, 89, 106, 69, 25, 227, 109, 86, 89, 170, 69, 25, 235, 115, 86, 89, 69, + 170, 25, 42, 243, 149, 86, 89, 108, 106, 25, 42, 113, 235, 58, 86, 89, + 113, 106, 25, 42, 108, 235, 58, 86, 89, 69, 106, 25, 42, 235, 58, 86, 89, + 113, 170, 25, 42, 108, 243, 149, 86, 89, 108, 170, 25, 42, 113, 243, 149, + 86, 89, 106, 69, 25, 235, 115, 86, 89, 170, 113, 25, 242, 241, 86, 89, + 42, 106, 25, 45, 113, 235, 58, 86, 89, 45, 106, 25, 42, 113, 235, 58, 86, + 89, 113, 170, 25, 186, 243, 149, 86, 89, 113, 106, 25, 186, 235, 58, 86, + 89, 45, 170, 25, 42, 113, 243, 149, 86, 89, 42, 170, 25, 45, 113, 243, + 149, 86, 89, 106, 113, 25, 242, 241, 86, 89, 170, 108, 25, 242, 241, 86, + 89, 42, 106, 25, 45, 108, 235, 58, 86, 89, 45, 106, 25, 42, 108, 235, 58, + 86, 89, 108, 170, 25, 186, 243, 149, 86, 89, 108, 106, 25, 186, 235, 58, + 86, 89, 45, 170, 25, 42, 108, 243, 149, 86, 89, 42, 170, 25, 45, 108, + 243, 149, 86, 89, 106, 108, 25, 242, 241, 86, 89, 170, 69, 25, 242, 241, + 86, 89, 42, 106, 25, 45, 69, 235, 58, 86, 89, 45, 106, 25, 42, 69, 235, + 58, 86, 89, 69, 170, 25, 186, 243, 149, 86, 89, 108, 106, 25, 113, 186, + 235, 58, 86, 89, 113, 106, 25, 108, 186, 235, 58, 86, 89, 69, 106, 25, + 186, 235, 58, 86, 89, 42, 108, 106, 25, 45, 113, 235, 58, 86, 89, 45, + 108, 106, 25, 42, 113, 235, 58, 86, 89, 42, 113, 106, 25, 45, 108, 235, + 58, 86, 89, 45, 113, 106, 25, 42, 108, 235, 58, 86, 89, 113, 170, 25, + 108, 186, 243, 149, 86, 89, 108, 170, 25, 113, 186, 243, 149, 86, 89, 45, + 170, 25, 42, 69, 243, 149, 86, 89, 42, 170, 25, 45, 69, 243, 149, 86, 89, + 106, 69, 25, 242, 241, 86, 89, 170, 51, 249, 147, 242, 241, 86, 89, 106, + 51, 249, 147, 242, 241, 86, 89, 170, 51, 249, 147, 219, 152, 86, 89, 106, + 51, 249, 147, 219, 152, 86, 89, 51, 242, 241, 86, 89, 51, 219, 152, 86, + 89, 113, 224, 109, 25, 45, 247, 138, 86, 89, 113, 51, 25, 45, 224, 108, + 86, 89, 51, 113, 25, 227, 109, 86, 89, 113, 224, 109, 25, 42, 247, 138, + 86, 89, 113, 51, 25, 42, 224, 108, 86, 89, 51, 113, 25, 235, 115, 86, 89, + 108, 224, 109, 25, 45, 247, 138, 86, 89, 108, 51, 25, 45, 224, 108, 86, + 89, 51, 108, 25, 227, 109, 86, 89, 108, 224, 109, 25, 42, 247, 138, 86, + 89, 108, 51, 25, 42, 224, 108, 86, 89, 51, 108, 25, 235, 115, 86, 89, 69, + 224, 109, 25, 45, 247, 138, 86, 89, 69, 51, 25, 45, 224, 108, 86, 89, 51, + 69, 25, 227, 109, 86, 89, 69, 224, 109, 25, 42, 247, 138, 86, 89, 69, 51, + 25, 42, 224, 108, 86, 89, 51, 69, 25, 235, 115, 86, 89, 113, 224, 109, + 25, 186, 247, 138, 86, 89, 113, 51, 25, 186, 224, 108, 86, 89, 51, 113, + 25, 242, 241, 86, 89, 108, 224, 109, 25, 186, 247, 138, 86, 89, 108, 51, + 25, 186, 224, 108, 86, 89, 51, 108, 25, 242, 241, 86, 89, 69, 224, 109, + 25, 186, 247, 138, 86, 89, 69, 51, 25, 186, 224, 108, 86, 89, 51, 69, 25, + 242, 241, 86, 89, 170, 254, 52, 113, 25, 227, 109, 86, 89, 170, 254, 52, + 113, 25, 235, 115, 86, 89, 170, 254, 52, 108, 25, 235, 115, 86, 89, 170, + 254, 52, 108, 25, 227, 109, 86, 89, 170, 249, 11, 220, 60, 45, 199, 234, + 237, 235, 115, 86, 89, 170, 249, 11, 220, 60, 42, 199, 234, 237, 227, + 109, 86, 89, 170, 249, 11, 250, 100, 86, 89, 170, 235, 115, 86, 89, 170, + 220, 63, 86, 89, 170, 227, 109, 86, 89, 170, 247, 132, 86, 89, 106, 235, + 115, 86, 89, 106, 220, 63, 86, 89, 106, 227, 109, 86, 89, 106, 247, 132, + 86, 89, 170, 42, 25, 106, 227, 109, 86, 89, 170, 108, 25, 106, 247, 132, + 86, 89, 106, 42, 25, 170, 227, 109, 86, 89, 106, 108, 25, 170, 247, 132, + 220, 60, 144, 252, 45, 234, 237, 131, 246, 232, 252, 45, 234, 237, 131, + 228, 90, 252, 45, 234, 237, 148, 246, 230, 252, 45, 234, 237, 144, 252, + 45, 234, 237, 245, 170, 246, 230, 252, 45, 234, 237, 148, 228, 88, 252, + 45, 234, 237, 225, 43, 246, 230, 252, 45, 245, 90, 252, 45, 42, 225, 43, + 246, 230, 252, 45, 42, 148, 228, 88, 252, 45, 42, 245, 170, 246, 230, + 252, 45, 42, 144, 252, 45, 42, 148, 246, 230, 252, 45, 42, 131, 228, 90, + 252, 45, 42, 131, 246, 232, 252, 45, 45, 144, 252, 45, 170, 225, 15, 234, + 18, 225, 15, 249, 152, 225, 15, 220, 60, 131, 246, 232, 252, 45, 45, 131, + 246, 232, 252, 45, 228, 94, 234, 237, 235, 115, 228, 94, 234, 237, 227, + 109, 228, 94, 220, 60, 235, 115, 228, 94, 220, 60, 42, 25, 234, 237, 42, + 25, 234, 237, 227, 109, 228, 94, 220, 60, 42, 25, 234, 237, 227, 109, + 228, 94, 220, 60, 42, 25, 220, 60, 45, 25, 234, 237, 235, 115, 228, 94, + 220, 60, 42, 25, 220, 60, 45, 25, 234, 237, 227, 109, 228, 94, 220, 60, + 227, 109, 228, 94, 220, 60, 45, 25, 234, 237, 235, 115, 228, 94, 220, 60, + 45, 25, 234, 237, 42, 25, 234, 237, 227, 109, 84, 223, 227, 67, 223, 227, + 67, 40, 2, 227, 55, 250, 122, 67, 40, 250, 141, 84, 3, 223, 227, 40, 2, + 186, 245, 187, 40, 2, 69, 245, 187, 40, 2, 230, 95, 250, 96, 245, 187, + 40, 2, 220, 60, 42, 199, 234, 237, 45, 245, 187, 40, 2, 220, 60, 45, 199, + 234, 237, 42, 245, 187, 40, 2, 249, 11, 250, 96, 245, 187, 84, 3, 223, + 227, 67, 3, 223, 227, 84, 227, 208, 67, 227, 208, 84, 69, 227, 208, 67, + 69, 227, 208, 84, 229, 232, 67, 229, 232, 84, 220, 62, 221, 90, 67, 220, + 62, 221, 90, 84, 220, 62, 3, 221, 90, 67, 220, 62, 3, 221, 90, 84, 227, + 106, 221, 90, 67, 227, 106, 221, 90, 84, 227, 106, 3, 221, 90, 67, 227, + 106, 3, 221, 90, 84, 227, 106, 229, 29, 67, 227, 106, 229, 29, 84, 247, + 131, 221, 90, 67, 247, 131, 221, 90, 84, 247, 131, 3, 221, 90, 67, 247, + 131, 3, 221, 90, 84, 235, 112, 221, 90, 67, 235, 112, 221, 90, 84, 235, + 112, 3, 221, 90, 67, 235, 112, 3, 221, 90, 84, 235, 112, 229, 29, 67, + 235, 112, 229, 29, 84, 249, 4, 67, 249, 4, 67, 249, 5, 250, 141, 84, 3, + 249, 4, 245, 175, 234, 234, 67, 250, 221, 247, 143, 250, 221, 250, 222, + 2, 69, 245, 187, 251, 239, 84, 250, 221, 250, 222, 2, 42, 144, 252, 53, + 250, 222, 2, 45, 144, 252, 53, 250, 222, 2, 234, 237, 144, 252, 53, 250, + 222, 2, 220, 60, 144, 252, 53, 250, 222, 2, 220, 60, 45, 228, 94, 252, + 53, 250, 222, 2, 254, 158, 251, 222, 220, 60, 42, 228, 94, 252, 53, 42, + 144, 84, 250, 221, 45, 144, 84, 250, 221, 237, 171, 251, 241, 237, 171, + 67, 250, 221, 220, 60, 144, 237, 171, 67, 250, 221, 234, 237, 144, 237, + 171, 67, 250, 221, 220, 60, 42, 228, 94, 250, 219, 254, 51, 220, 60, 45, + 228, 94, 250, 219, 254, 51, 234, 237, 45, 228, 94, 250, 219, 254, 51, + 234, 237, 42, 228, 94, 250, 219, 254, 51, 220, 60, 144, 250, 221, 234, + 237, 144, 250, 221, 84, 234, 237, 45, 221, 90, 84, 234, 237, 42, 221, 90, + 84, 220, 60, 42, 221, 90, 84, 220, 60, 45, 221, 90, 67, 251, 241, 40, 2, + 42, 144, 252, 53, 40, 2, 45, 144, 252, 53, 40, 2, 220, 60, 42, 249, 11, + 144, 252, 53, 40, 2, 234, 237, 45, 249, 11, 144, 252, 53, 67, 40, 2, 69, + 252, 63, 235, 43, 67, 220, 62, 221, 91, 2, 248, 145, 220, 62, 221, 91, 2, + 42, 144, 252, 53, 220, 62, 221, 91, 2, 45, 144, 252, 53, 235, 146, 250, + 221, 67, 40, 2, 220, 60, 42, 228, 93, 67, 40, 2, 234, 237, 42, 228, 93, + 67, 40, 2, 234, 237, 45, 228, 93, 67, 40, 2, 220, 60, 45, 228, 93, 67, + 250, 222, 2, 220, 60, 42, 228, 93, 67, 250, 222, 2, 234, 237, 42, 228, + 93, 67, 250, 222, 2, 234, 237, 45, 228, 93, 67, 250, 222, 2, 220, 60, 45, + 228, 93, 220, 60, 42, 221, 90, 220, 60, 45, 221, 90, 234, 237, 42, 221, + 90, 67, 234, 18, 223, 227, 84, 234, 18, 223, 227, 67, 234, 18, 3, 223, + 227, 84, 234, 18, 3, 223, 227, 234, 237, 45, 221, 90, 84, 223, 69, 2, + 227, 220, 250, 189, 220, 91, 224, 28, 250, 171, 84, 223, 156, 67, 223, + 156, 235, 56, 221, 220, 223, 68, 254, 10, 231, 201, 249, 47, 231, 201, + 250, 149, 230, 109, 84, 222, 71, 67, 222, 71, 252, 213, 252, 21, 252, + 213, 86, 2, 251, 44, 252, 213, 86, 2, 218, 151, 226, 149, 220, 92, 2, + 227, 243, 247, 117, 242, 187, 252, 98, 67, 224, 196, 229, 102, 84, 224, + 196, 229, 102, 225, 11, 210, 227, 59, 245, 148, 243, 154, 251, 241, 84, + 42, 229, 28, 237, 213, 84, 45, 229, 28, 237, 213, 67, 42, 229, 28, 237, + 213, 67, 108, 229, 28, 237, 213, 67, 45, 229, 28, 237, 213, 67, 113, 229, + 28, 237, 213, 224, 60, 25, 250, 99, 251, 120, 55, 227, 250, 55, 252, 69, + 55, 251, 164, 254, 115, 230, 96, 250, 100, 251, 32, 227, 149, 250, 101, + 117, 234, 243, 250, 101, 117, 237, 105, 223, 157, 25, 250, 104, 245, 241, + 100, 254, 238, 225, 13, 243, 193, 25, 224, 138, 229, 197, 100, 217, 241, + 218, 45, 221, 82, 35, 243, 151, 221, 82, 35, 235, 165, 221, 82, 35, 245, + 179, 221, 82, 35, 221, 221, 221, 82, 35, 218, 194, 221, 82, 35, 218, 240, + 221, 82, 35, 233, 107, 221, 82, 35, 247, 8, 218, 211, 117, 249, 30, 67, + 245, 94, 246, 3, 67, 224, 38, 246, 3, 84, 224, 38, 246, 3, 67, 223, 69, + 2, 227, 220, 245, 178, 228, 90, 233, 117, 235, 142, 228, 90, 233, 117, + 233, 249, 245, 217, 55, 247, 8, 234, 90, 55, 237, 31, 226, 124, 220, 45, + 232, 129, 229, 41, 254, 39, 222, 104, 244, 182, 251, 150, 235, 90, 219, + 80, 235, 65, 226, 102, 226, 163, 251, 140, 254, 68, 229, 66, 67, 251, 37, + 236, 102, 67, 251, 37, 228, 83, 67, 251, 37, 227, 65, 67, 251, 37, 252, + 62, 67, 251, 37, 236, 59, 67, 251, 37, 229, 207, 84, 251, 37, 236, 102, + 84, 251, 37, 228, 83, 84, 251, 37, 227, 65, 84, 251, 37, 252, 62, 84, + 251, 37, 236, 59, 84, 251, 37, 229, 207, 84, 223, 252, 223, 80, 67, 243, + 154, 223, 80, 67, 249, 5, 223, 80, 84, 250, 188, 223, 80, 67, 223, 252, + 223, 80, 84, 243, 154, 223, 80, 84, 249, 5, 223, 80, 67, 250, 188, 223, + 80, 242, 187, 223, 231, 228, 90, 231, 180, 246, 232, 231, 180, 252, 142, + 246, 232, 231, 177, 252, 142, 224, 76, 231, 177, 233, 59, 245, 157, 55, + 233, 59, 232, 205, 55, 233, 59, 225, 1, 55, 218, 217, 166, 250, 100, 247, + 5, 166, 250, 100, 220, 70, 227, 204, 100, 227, 204, 16, 35, 220, 197, + 229, 50, 227, 204, 16, 35, 220, 196, 229, 50, 227, 204, 16, 35, 220, 195, + 229, 50, 227, 204, 16, 35, 220, 194, 229, 50, 227, 204, 16, 35, 220, 193, + 229, 50, 227, 204, 16, 35, 220, 192, 229, 50, 227, 204, 16, 35, 220, 191, + 229, 50, 227, 204, 16, 35, 244, 180, 234, 50, 84, 220, 70, 227, 204, 100, + 227, 205, 229, 245, 100, 229, 222, 229, 245, 100, 229, 162, 229, 245, 55, + 218, 209, 100, 248, 254, 246, 2, 248, 254, 246, 1, 248, 254, 246, 0, 248, + 254, 245, 255, 248, 254, 245, 254, 248, 254, 245, 253, 67, 250, 222, 2, + 61, 227, 109, 67, 250, 222, 2, 124, 248, 143, 84, 250, 222, 2, 67, 61, + 227, 109, 84, 250, 222, 2, 124, 67, 248, 143, 233, 125, 35, 218, 45, 233, + 125, 35, 217, 240, 248, 237, 35, 244, 31, 218, 45, 248, 237, 35, 235, 85, + 217, 240, 248, 237, 35, 235, 85, 218, 45, 248, 237, 35, 244, 31, 217, + 240, 67, 245, 163, 84, 245, 163, 243, 193, 25, 229, 104, 254, 128, 250, + 98, 223, 24, 223, 164, 117, 254, 218, 226, 113, 254, 167, 245, 144, 244, + 189, 223, 164, 117, 243, 133, 253, 238, 100, 245, 153, 230, 80, 67, 223, + 156, 148, 235, 38, 250, 131, 227, 109, 148, 235, 38, 250, 131, 235, 115, + 218, 250, 55, 116, 219, 66, 55, 247, 135, 245, 217, 55, 247, 135, 234, + 90, 55, 237, 179, 245, 217, 25, 234, 90, 55, 234, 90, 25, 245, 217, 55, + 234, 90, 2, 214, 55, 234, 90, 2, 214, 25, 234, 90, 25, 245, 217, 55, 69, + 234, 90, 2, 214, 55, 186, 234, 90, 2, 214, 55, 234, 18, 67, 250, 221, + 234, 18, 84, 250, 221, 234, 18, 3, 67, 250, 221, 234, 62, 100, 248, 186, + 100, 220, 69, 229, 221, 100, 250, 178, 245, 86, 220, 42, 232, 124, 251, + 72, 230, 25, 237, 37, 219, 98, 251, 18, 84, 233, 118, 235, 53, 225, 34, + 225, 64, 228, 75, 225, 48, 224, 24, 252, 215, 252, 188, 204, 236, 154, + 67, 247, 122, 234, 86, 67, 247, 122, 236, 102, 84, 247, 122, 234, 86, 84, + 247, 122, 236, 102, 224, 29, 218, 189, 224, 31, 223, 69, 252, 125, 250, + 189, 227, 242, 84, 224, 28, 221, 222, 250, 190, 25, 227, 242, 215, 67, + 224, 196, 229, 102, 215, 84, 224, 196, 229, 102, 67, 249, 5, 237, 224, + 223, 227, 250, 95, 235, 149, 248, 206, 251, 137, 229, 104, 251, 138, 224, + 51, 243, 141, 2, 67, 250, 100, 34, 250, 95, 235, 149, 251, 65, 231, 205, + 246, 174, 254, 144, 230, 135, 42, 218, 230, 221, 106, 84, 220, 204, 42, + 218, 230, 221, 106, 67, 220, 204, 42, 218, 230, 221, 106, 84, 42, 235, + 150, 233, 248, 67, 42, 235, 150, 233, 248, 247, 120, 224, 46, 55, 106, + 67, 247, 131, 221, 90, 42, 250, 197, 246, 174, 204, 226, 149, 245, 247, + 249, 11, 237, 224, 67, 250, 222, 237, 224, 84, 223, 227, 84, 221, 63, + 227, 167, 42, 246, 173, 227, 167, 42, 246, 172, 106, 250, 222, 2, 214, + 25, 124, 188, 50, 84, 250, 101, 230, 139, 224, 218, 224, 207, 224, 174, + 250, 245, 251, 125, 243, 93, 224, 83, 244, 190, 218, 189, 242, 171, 244, + 190, 2, 243, 188, 234, 79, 16, 35, 235, 57, 233, 107, 220, 92, 230, 139, + 244, 24, 245, 117, 245, 164, 237, 224, 242, 252, 245, 209, 226, 160, 40, + 245, 116, 250, 122, 224, 63, 242, 66, 224, 65, 229, 158, 2, 252, 215, + 222, 62, 237, 118, 252, 204, 100, 243, 156, 244, 33, 100, 245, 91, 228, + 198, 250, 83, 230, 139, 84, 223, 227, 67, 245, 164, 2, 186, 233, 193, 84, + 223, 120, 220, 60, 252, 49, 226, 103, 84, 226, 103, 234, 237, 252, 49, + 226, 103, 67, 226, 103, 222, 72, 235, 10, 55, 222, 114, 247, 119, 254, + 187, 246, 170, 219, 93, 243, 189, 218, 167, 243, 189, 234, 237, 45, 229, + 181, 229, 181, 220, 60, 45, 229, 181, 67, 232, 59, 84, 232, 59, 251, 45, + 78, 106, 251, 45, 78, 233, 84, 218, 151, 106, 233, 84, 218, 151, 252, + 213, 218, 151, 106, 252, 213, 218, 151, 230, 80, 23, 250, 100, 106, 23, + 250, 100, 230, 119, 251, 85, 250, 100, 106, 230, 119, 251, 85, 250, 100, + 7, 250, 100, 225, 14, 67, 7, 250, 100, 230, 80, 7, 250, 100, 234, 88, + 250, 100, 223, 157, 117, 249, 140, 245, 116, 222, 83, 253, 251, 245, 116, + 252, 214, 253, 251, 106, 245, 116, 252, 214, 253, 251, 245, 116, 250, + 186, 253, 251, 84, 245, 116, 229, 30, 223, 156, 67, 245, 116, 229, 30, + 223, 156, 223, 125, 230, 80, 67, 223, 156, 34, 67, 223, 156, 230, 119, + 251, 85, 84, 223, 156, 84, 251, 85, 67, 223, 156, 230, 80, 84, 223, 156, + 106, 230, 80, 84, 223, 156, 229, 71, 223, 156, 225, 14, 67, 223, 156, + 106, 253, 251, 230, 119, 251, 85, 253, 251, 246, 235, 223, 236, 253, 251, + 246, 235, 229, 30, 84, 223, 156, 246, 235, 229, 30, 229, 71, 223, 156, + 224, 82, 229, 30, 84, 223, 156, 246, 235, 229, 30, 227, 206, 84, 223, + 156, 106, 246, 235, 229, 30, 227, 206, 84, 223, 156, 220, 222, 229, 30, + 84, 223, 156, 224, 78, 229, 30, 253, 251, 222, 83, 253, 251, 230, 119, + 251, 85, 222, 83, 253, 251, 106, 222, 83, 253, 251, 224, 82, 229, 149, + 84, 25, 67, 245, 147, 84, 245, 147, 67, 245, 147, 246, 235, 229, 149, + 230, 80, 84, 245, 147, 34, 230, 119, 251, 85, 246, 235, 229, 30, 223, + 156, 106, 222, 83, 229, 71, 253, 251, 224, 30, 221, 195, 221, 85, 224, + 30, 106, 251, 35, 224, 30, 223, 251, 106, 223, 251, 252, 214, 253, 251, + 246, 235, 222, 83, 228, 221, 253, 251, 106, 246, 235, 222, 83, 228, 221, + 253, 251, 225, 14, 67, 250, 221, 234, 237, 45, 247, 118, 67, 223, 227, + 220, 60, 45, 247, 118, 67, 223, 227, 234, 237, 45, 225, 14, 67, 223, 227, + 220, 60, 45, 225, 14, 67, 223, 227, 84, 249, 5, 233, 155, 67, 218, 151, + 106, 246, 95, 164, 100, 170, 69, 135, 234, 18, 69, 135, 106, 69, 135, + 106, 224, 109, 215, 250, 169, 228, 69, 164, 230, 98, 106, 224, 109, 250, + 169, 228, 69, 164, 230, 98, 106, 51, 215, 250, 169, 228, 69, 164, 230, + 98, 106, 51, 250, 169, 228, 69, 164, 230, 98, 250, 73, 223, 147, 229, + 241, 5, 230, 98, 106, 246, 95, 164, 230, 98, 106, 243, 154, 246, 95, 164, + 230, 98, 106, 84, 243, 153, 227, 59, 106, 84, 243, 154, 251, 241, 245, + 148, 243, 153, 227, 59, 245, 148, 243, 154, 251, 241, 234, 18, 42, 229, + 230, 230, 98, 234, 18, 45, 229, 230, 230, 98, 234, 18, 245, 154, 42, 229, + 230, 230, 98, 234, 18, 245, 154, 45, 229, 230, 230, 98, 234, 18, 235, + 112, 254, 120, 252, 18, 230, 98, 234, 18, 227, 106, 254, 120, 252, 18, + 230, 98, 106, 235, 112, 254, 120, 228, 69, 164, 230, 98, 106, 227, 106, + 254, 120, 228, 69, 164, 230, 98, 106, 235, 112, 254, 120, 252, 18, 230, + 98, 106, 227, 106, 254, 120, 252, 18, 230, 98, 170, 42, 221, 114, 224, + 236, 252, 18, 230, 98, 170, 45, 221, 114, 224, 236, 252, 18, 230, 98, + 234, 18, 42, 250, 79, 252, 18, 230, 98, 234, 18, 45, 250, 79, 252, 18, + 230, 98, 248, 217, 232, 136, 34, 20, 107, 248, 217, 232, 136, 34, 20, + 103, 248, 217, 232, 136, 34, 20, 160, 248, 217, 232, 136, 34, 20, 154, + 248, 217, 232, 136, 34, 20, 174, 248, 217, 232, 136, 34, 20, 182, 248, + 217, 232, 136, 34, 20, 191, 248, 217, 232, 136, 34, 20, 185, 248, 217, + 232, 136, 34, 20, 190, 248, 217, 232, 136, 34, 54, 222, 65, 248, 217, 34, + 33, 20, 107, 248, 217, 34, 33, 20, 103, 248, 217, 34, 33, 20, 160, 248, + 217, 34, 33, 20, 154, 248, 217, 34, 33, 20, 174, 248, 217, 34, 33, 20, + 182, 248, 217, 34, 33, 20, 191, 248, 217, 34, 33, 20, 185, 248, 217, 34, + 33, 20, 190, 248, 217, 34, 33, 54, 222, 65, 248, 217, 232, 136, 34, 33, + 20, 107, 248, 217, 232, 136, 34, 33, 20, 103, 248, 217, 232, 136, 34, 33, + 20, 160, 248, 217, 232, 136, 34, 33, 20, 154, 248, 217, 232, 136, 34, 33, + 20, 174, 248, 217, 232, 136, 34, 33, 20, 182, 248, 217, 232, 136, 34, 33, + 20, 191, 248, 217, 232, 136, 34, 33, 20, 185, 248, 217, 232, 136, 34, 33, + 20, 190, 248, 217, 232, 136, 34, 33, 54, 222, 65, 106, 218, 200, 90, 65, + 106, 224, 6, 247, 5, 65, 106, 90, 65, 106, 231, 187, 247, 5, 65, 247, + 124, 229, 32, 90, 65, 106, 227, 56, 90, 65, 221, 89, 90, 65, 106, 221, + 89, 90, 65, 249, 145, 221, 89, 90, 65, 106, 249, 145, 221, 89, 90, 65, + 84, 90, 65, 221, 228, 221, 118, 90, 254, 20, 221, 228, 252, 27, 90, 254, + 20, 84, 90, 254, 20, 106, 84, 250, 73, 247, 130, 25, 90, 65, 106, 84, + 250, 73, 220, 53, 25, 90, 65, 223, 224, 84, 90, 65, 106, 250, 157, 84, + 90, 65, 227, 105, 67, 90, 65, 235, 111, 67, 90, 65, 252, 232, 225, 14, + 67, 90, 65, 245, 96, 225, 14, 67, 90, 65, 106, 234, 237, 227, 104, 67, + 90, 65, 106, 220, 60, 227, 104, 67, 90, 65, 231, 182, 234, 237, 227, 104, + 67, 90, 65, 231, 182, 220, 60, 227, 104, 67, 90, 65, 34, 106, 67, 90, 65, + 218, 206, 90, 65, 252, 52, 224, 6, 247, 5, 65, 252, 52, 90, 65, 252, 52, + 231, 187, 247, 5, 65, 106, 252, 52, 224, 6, 247, 5, 65, 106, 252, 52, 90, + 65, 106, 252, 52, 231, 187, 247, 5, 65, 222, 85, 90, 65, 106, 222, 84, + 90, 65, 218, 225, 90, 65, 106, 218, 225, 90, 65, 230, 116, 90, 65, 148, + 248, 227, 254, 119, 67, 221, 91, 250, 141, 3, 67, 221, 90, 229, 160, 230, + 119, 223, 92, 230, 119, 223, 57, 42, 226, 234, 252, 226, 249, 67, 45, + 226, 234, 252, 226, 249, 67, 156, 2, 61, 237, 190, 227, 160, 224, 18, + 228, 243, 223, 92, 223, 58, 228, 243, 224, 17, 69, 252, 201, 2, 186, 92, + 171, 248, 187, 67, 249, 5, 2, 251, 83, 248, 145, 25, 2, 248, 145, 246, + 213, 117, 230, 114, 220, 52, 234, 237, 45, 250, 124, 2, 248, 145, 220, + 60, 42, 250, 124, 2, 248, 145, 42, 230, 82, 237, 57, 45, 230, 82, 237, + 57, 245, 90, 230, 82, 237, 57, 235, 146, 108, 222, 143, 235, 146, 113, + 222, 143, 42, 25, 45, 51, 220, 236, 42, 25, 45, 222, 143, 42, 233, 87, + 171, 45, 222, 143, 171, 42, 222, 143, 108, 222, 144, 2, 250, 222, 50, + 234, 235, 248, 192, 251, 213, 186, 227, 16, 67, 250, 156, 249, 4, 67, + 250, 156, 249, 5, 2, 127, 221, 202, 67, 250, 156, 249, 5, 2, 90, 221, + 202, 67, 40, 2, 127, 221, 202, 67, 40, 2, 90, 221, 202, 14, 42, 67, 40, + 115, 14, 45, 67, 40, 115, 14, 42, 254, 120, 115, 14, 45, 254, 120, 115, + 14, 42, 51, 254, 120, 115, 14, 45, 51, 254, 120, 115, 14, 42, 67, 221, + 114, 224, 236, 115, 14, 45, 67, 221, 114, 224, 236, 115, 14, 42, 245, + 154, 229, 229, 14, 45, 245, 154, 229, 229, 220, 53, 228, 92, 65, 247, + 130, 228, 92, 65, 254, 104, 244, 222, 250, 222, 65, 250, 199, 244, 222, + 250, 222, 65, 45, 76, 2, 34, 229, 43, 171, 127, 65, 171, 90, 65, 171, 42, + 45, 65, 171, 127, 51, 65, 171, 90, 51, 65, 171, 42, 45, 51, 65, 171, 127, + 76, 245, 97, 135, 171, 90, 76, 245, 97, 135, 171, 127, 51, 76, 245, 97, + 135, 171, 90, 51, 76, 245, 97, 135, 171, 90, 223, 223, 65, 43, 44, 252, + 47, 43, 44, 248, 142, 43, 44, 248, 14, 43, 44, 248, 141, 43, 44, 247, + 206, 43, 44, 248, 77, 43, 44, 248, 13, 43, 44, 248, 140, 43, 44, 247, + 174, 43, 44, 248, 45, 43, 44, 247, 237, 43, 44, 248, 108, 43, 44, 247, + 205, 43, 44, 248, 76, 43, 44, 248, 12, 43, 44, 248, 139, 43, 44, 247, + 158, 43, 44, 248, 29, 43, 44, 247, 221, 43, 44, 248, 92, 43, 44, 247, + 189, 43, 44, 248, 60, 43, 44, 247, 252, 43, 44, 248, 123, 43, 44, 247, + 173, 43, 44, 248, 44, 43, 44, 247, 236, 43, 44, 248, 107, 43, 44, 247, + 204, 43, 44, 248, 75, 43, 44, 248, 11, 43, 44, 248, 138, 43, 44, 247, + 150, 43, 44, 248, 21, 43, 44, 247, 213, 43, 44, 248, 84, 43, 44, 247, + 181, 43, 44, 248, 52, 43, 44, 247, 244, 43, 44, 248, 115, 43, 44, 247, + 165, 43, 44, 248, 36, 43, 44, 247, 228, 43, 44, 248, 99, 43, 44, 247, + 196, 43, 44, 248, 67, 43, 44, 248, 3, 43, 44, 248, 130, 43, 44, 247, 157, + 43, 44, 248, 28, 43, 44, 247, 220, 43, 44, 248, 91, 43, 44, 247, 188, 43, + 44, 248, 59, 43, 44, 247, 251, 43, 44, 248, 122, 43, 44, 247, 172, 43, + 44, 248, 43, 43, 44, 247, 235, 43, 44, 248, 106, 43, 44, 247, 203, 43, + 44, 248, 74, 43, 44, 248, 10, 43, 44, 248, 137, 43, 44, 247, 146, 43, 44, + 248, 17, 43, 44, 247, 209, 43, 44, 248, 80, 43, 44, 247, 177, 43, 44, + 248, 48, 43, 44, 247, 240, 43, 44, 248, 111, 43, 44, 247, 161, 43, 44, + 248, 32, 43, 44, 247, 224, 43, 44, 248, 95, 43, 44, 247, 192, 43, 44, + 248, 63, 43, 44, 247, 255, 43, 44, 248, 126, 43, 44, 247, 153, 43, 44, + 248, 24, 43, 44, 247, 216, 43, 44, 248, 87, 43, 44, 247, 184, 43, 44, + 248, 55, 43, 44, 247, 247, 43, 44, 248, 118, 43, 44, 247, 168, 43, 44, + 248, 39, 43, 44, 247, 231, 43, 44, 248, 102, 43, 44, 247, 199, 43, 44, + 248, 70, 43, 44, 248, 6, 43, 44, 248, 133, 43, 44, 247, 149, 43, 44, 248, + 20, 43, 44, 247, 212, 43, 44, 248, 83, 43, 44, 247, 180, 43, 44, 248, 51, + 43, 44, 247, 243, 43, 44, 248, 114, 43, 44, 247, 164, 43, 44, 248, 35, + 43, 44, 247, 227, 43, 44, 248, 98, 43, 44, 247, 195, 43, 44, 248, 66, 43, + 44, 248, 2, 43, 44, 248, 129, 43, 44, 247, 156, 43, 44, 248, 27, 43, 44, + 247, 219, 43, 44, 248, 90, 43, 44, 247, 187, 43, 44, 248, 58, 43, 44, + 247, 250, 43, 44, 248, 121, 43, 44, 247, 171, 43, 44, 248, 42, 43, 44, + 247, 234, 43, 44, 248, 105, 43, 44, 247, 202, 43, 44, 248, 73, 43, 44, + 248, 9, 43, 44, 248, 136, 43, 44, 247, 144, 43, 44, 248, 15, 43, 44, 247, + 207, 43, 44, 248, 78, 43, 44, 247, 175, 43, 44, 248, 46, 43, 44, 247, + 238, 43, 44, 248, 109, 43, 44, 247, 159, 43, 44, 248, 30, 43, 44, 247, + 222, 43, 44, 248, 93, 43, 44, 247, 190, 43, 44, 248, 61, 43, 44, 247, + 253, 43, 44, 248, 124, 43, 44, 247, 151, 43, 44, 248, 22, 43, 44, 247, + 214, 43, 44, 248, 85, 43, 44, 247, 182, 43, 44, 248, 53, 43, 44, 247, + 245, 43, 44, 248, 116, 43, 44, 247, 166, 43, 44, 248, 37, 43, 44, 247, + 229, 43, 44, 248, 100, 43, 44, 247, 197, 43, 44, 248, 68, 43, 44, 248, 4, + 43, 44, 248, 131, 43, 44, 247, 147, 43, 44, 248, 18, 43, 44, 247, 210, + 43, 44, 248, 81, 43, 44, 247, 178, 43, 44, 248, 49, 43, 44, 247, 241, 43, + 44, 248, 112, 43, 44, 247, 162, 43, 44, 248, 33, 43, 44, 247, 225, 43, + 44, 248, 96, 43, 44, 247, 193, 43, 44, 248, 64, 43, 44, 248, 0, 43, 44, + 248, 127, 43, 44, 247, 154, 43, 44, 248, 25, 43, 44, 247, 217, 43, 44, + 248, 88, 43, 44, 247, 185, 43, 44, 248, 56, 43, 44, 247, 248, 43, 44, + 248, 119, 43, 44, 247, 169, 43, 44, 248, 40, 43, 44, 247, 232, 43, 44, + 248, 103, 43, 44, 247, 200, 43, 44, 248, 71, 43, 44, 248, 7, 43, 44, 248, + 134, 43, 44, 247, 145, 43, 44, 248, 16, 43, 44, 247, 208, 43, 44, 248, + 79, 43, 44, 247, 176, 43, 44, 248, 47, 43, 44, 247, 239, 43, 44, 248, + 110, 43, 44, 247, 160, 43, 44, 248, 31, 43, 44, 247, 223, 43, 44, 248, + 94, 43, 44, 247, 191, 43, 44, 248, 62, 43, 44, 247, 254, 43, 44, 248, + 125, 43, 44, 247, 152, 43, 44, 248, 23, 43, 44, 247, 215, 43, 44, 248, + 86, 43, 44, 247, 183, 43, 44, 248, 54, 43, 44, 247, 246, 43, 44, 248, + 117, 43, 44, 247, 167, 43, 44, 248, 38, 43, 44, 247, 230, 43, 44, 248, + 101, 43, 44, 247, 198, 43, 44, 248, 69, 43, 44, 248, 5, 43, 44, 248, 132, + 43, 44, 247, 148, 43, 44, 248, 19, 43, 44, 247, 211, 43, 44, 248, 82, 43, + 44, 247, 179, 43, 44, 248, 50, 43, 44, 247, 242, 43, 44, 248, 113, 43, + 44, 247, 163, 43, 44, 248, 34, 43, 44, 247, 226, 43, 44, 248, 97, 43, 44, + 247, 194, 43, 44, 248, 65, 43, 44, 248, 1, 43, 44, 248, 128, 43, 44, 247, + 155, 43, 44, 248, 26, 43, 44, 247, 218, 43, 44, 248, 89, 43, 44, 247, + 186, 43, 44, 248, 57, 43, 44, 247, 249, 43, 44, 248, 120, 43, 44, 247, + 170, 43, 44, 248, 41, 43, 44, 247, 233, 43, 44, 248, 104, 43, 44, 247, + 201, 43, 44, 248, 72, 43, 44, 248, 8, 43, 44, 248, 135, 90, 220, 206, 76, + 2, 69, 92, 90, 220, 206, 76, 2, 51, 69, 92, 127, 51, 76, 2, 69, 92, 90, + 51, 76, 2, 69, 92, 42, 45, 51, 76, 2, 69, 92, 90, 220, 206, 76, 245, 97, + 135, 127, 51, 76, 245, 97, 135, 90, 51, 76, 245, 97, 135, 247, 130, 76, + 2, 186, 92, 220, 53, 76, 2, 186, 92, 220, 53, 221, 78, 65, 247, 130, 221, + 78, 65, 127, 51, 249, 147, 65, 90, 51, 249, 147, 65, 127, 221, 78, 249, + 147, 65, 90, 221, 78, 249, 147, 65, 90, 220, 206, 221, 78, 249, 147, 65, + 90, 76, 2, 247, 143, 223, 146, 220, 53, 76, 199, 135, 247, 130, 76, 199, + 135, 90, 76, 2, 222, 136, 2, 69, 92, 90, 76, 2, 222, 136, 2, 51, 69, 92, + 90, 220, 206, 76, 2, 222, 135, 90, 220, 206, 76, 2, 222, 136, 2, 69, 92, + 90, 220, 206, 76, 2, 222, 136, 2, 51, 69, 92, 127, 254, 22, 90, 254, 22, + 127, 51, 254, 22, 90, 51, 254, 22, 127, 76, 199, 84, 249, 4, 90, 76, 199, + 84, 249, 4, 127, 76, 245, 97, 252, 201, 199, 84, 249, 4, 90, 76, 245, 97, + 252, 201, 199, 84, 249, 4, 231, 187, 218, 217, 25, 224, 6, 247, 5, 65, + 231, 187, 247, 5, 25, 224, 6, 218, 217, 65, 231, 187, 218, 217, 76, 2, + 96, 231, 187, 247, 5, 76, 2, 96, 224, 6, 247, 5, 76, 2, 96, 224, 6, 218, + 217, 76, 2, 96, 231, 187, 218, 217, 76, 25, 231, 187, 247, 5, 65, 231, + 187, 247, 5, 76, 25, 224, 6, 247, 5, 65, 224, 6, 247, 5, 76, 25, 224, 6, + 218, 217, 65, 224, 6, 218, 217, 76, 25, 231, 187, 218, 217, 65, 227, 88, + 249, 11, 250, 95, 245, 247, 249, 10, 245, 247, 249, 11, 250, 95, 227, 88, + 249, 10, 224, 6, 247, 5, 76, 250, 95, 231, 187, 247, 5, 65, 231, 187, + 247, 5, 76, 250, 95, 224, 6, 247, 5, 65, 245, 247, 249, 11, 250, 95, 231, + 187, 247, 5, 65, 227, 88, 249, 11, 250, 95, 224, 6, 247, 5, 65, 231, 187, + 247, 5, 76, 250, 95, 231, 187, 218, 217, 65, 231, 187, 218, 217, 76, 250, + 95, 231, 187, 247, 5, 65, 218, 237, 76, 229, 28, 248, 208, 227, 109, 76, + 229, 28, 90, 222, 15, 250, 72, 220, 52, 76, 229, 28, 90, 222, 15, 250, + 72, 247, 129, 76, 229, 28, 247, 130, 222, 15, 250, 72, 235, 107, 76, 229, + 28, 247, 130, 222, 15, 250, 72, 227, 100, 227, 103, 254, 52, 250, 199, + 65, 235, 110, 254, 52, 254, 104, 65, 221, 120, 254, 52, 254, 104, 65, + 252, 29, 254, 52, 254, 104, 65, 221, 120, 254, 52, 250, 199, 76, 2, 233, + 154, 221, 120, 254, 52, 254, 104, 76, 2, 229, 43, 234, 237, 45, 225, 69, + 250, 199, 65, 234, 237, 42, 225, 69, 254, 104, 65, 254, 104, 250, 197, + 250, 222, 65, 250, 199, 250, 197, 250, 222, 65, 90, 76, 71, 224, 192, + 127, 65, 127, 76, 71, 224, 192, 90, 65, 224, 192, 90, 76, 71, 127, 65, + 90, 76, 2, 88, 56, 127, 76, 2, 88, 56, 90, 76, 221, 225, 218, 151, 42, + 45, 76, 221, 225, 3, 250, 221, 220, 53, 220, 206, 76, 245, 97, 3, 250, + 221, 42, 192, 108, 45, 192, 113, 243, 176, 42, 192, 113, 45, 192, 108, + 243, 176, 108, 192, 45, 113, 192, 42, 243, 176, 108, 192, 42, 113, 192, + 45, 243, 176, 42, 192, 108, 45, 192, 108, 243, 176, 108, 192, 45, 113, + 192, 45, 243, 176, 42, 192, 113, 45, 192, 113, 243, 176, 108, 192, 42, + 113, 192, 42, 243, 176, 127, 243, 177, 2, 192, 108, 199, 135, 90, 243, + 177, 2, 192, 108, 199, 135, 220, 53, 243, 177, 2, 192, 45, 199, 135, 247, + 130, 243, 177, 2, 192, 45, 199, 135, 127, 243, 177, 2, 192, 113, 199, + 135, 90, 243, 177, 2, 192, 113, 199, 135, 220, 53, 243, 177, 2, 192, 42, + 199, 135, 247, 130, 243, 177, 2, 192, 42, 199, 135, 127, 243, 177, 2, + 192, 108, 245, 97, 135, 90, 243, 177, 2, 192, 108, 245, 97, 135, 220, 53, + 243, 177, 2, 192, 45, 245, 97, 135, 247, 130, 243, 177, 2, 192, 45, 245, + 97, 135, 127, 243, 177, 2, 192, 113, 245, 97, 135, 90, 243, 177, 2, 192, + 113, 245, 97, 135, 220, 53, 243, 177, 2, 192, 42, 245, 97, 135, 247, 130, + 243, 177, 2, 192, 42, 245, 97, 135, 127, 243, 177, 2, 192, 108, 71, 127, + 243, 177, 2, 192, 247, 132, 220, 53, 243, 177, 2, 192, 42, 252, 106, 220, + 53, 243, 177, 2, 192, 227, 109, 90, 243, 177, 2, 192, 108, 71, 90, 243, + 177, 2, 192, 247, 132, 247, 130, 243, 177, 2, 192, 42, 252, 106, 247, + 130, 243, 177, 2, 192, 227, 109, 127, 243, 177, 2, 192, 108, 71, 90, 243, + 177, 2, 192, 220, 63, 127, 243, 177, 2, 192, 113, 71, 90, 243, 177, 2, + 192, 247, 132, 90, 243, 177, 2, 192, 108, 71, 127, 243, 177, 2, 192, 220, + 63, 90, 243, 177, 2, 192, 113, 71, 127, 243, 177, 2, 192, 247, 132, 127, + 243, 177, 2, 192, 108, 71, 171, 249, 146, 127, 243, 177, 2, 192, 113, + 252, 118, 171, 249, 146, 90, 243, 177, 2, 192, 108, 71, 171, 249, 146, + 90, 243, 177, 2, 192, 113, 252, 118, 171, 249, 146, 220, 53, 243, 177, 2, + 192, 42, 252, 106, 247, 130, 243, 177, 2, 192, 227, 109, 247, 130, 243, + 177, 2, 192, 42, 252, 106, 220, 53, 243, 177, 2, 192, 227, 109, 45, 51, + 76, 2, 227, 55, 243, 159, 246, 154, 5, 71, 90, 65, 221, 180, 230, 113, + 71, 90, 65, 127, 76, 71, 221, 180, 230, 112, 90, 76, 71, 221, 180, 230, + 112, 90, 76, 71, 254, 151, 114, 101, 235, 87, 71, 127, 65, 127, 76, 221, + 225, 235, 86, 244, 30, 71, 90, 65, 223, 93, 71, 90, 65, 127, 76, 221, + 225, 223, 92, 223, 58, 71, 127, 65, 42, 245, 177, 222, 135, 45, 245, 177, + 222, 135, 108, 245, 177, 222, 135, 113, 245, 177, 222, 135, 221, 78, 69, + 252, 201, 249, 67, 217, 158, 165, 223, 234, 217, 158, 165, 220, 198, 250, + 175, 42, 67, 250, 79, 115, 45, 67, 250, 79, 115, 42, 67, 229, 229, 45, + 67, 229, 229, 217, 158, 165, 42, 237, 237, 115, 217, 158, 165, 45, 237, + 237, 115, 217, 158, 165, 42, 252, 71, 115, 217, 158, 165, 45, 252, 71, + 115, 42, 40, 252, 18, 2, 220, 81, 45, 40, 252, 18, 2, 220, 81, 42, 40, + 252, 18, 2, 221, 203, 237, 224, 221, 120, 250, 123, 45, 40, 252, 18, 2, + 221, 203, 237, 224, 252, 29, 250, 123, 42, 40, 252, 18, 2, 221, 203, 237, + 224, 252, 29, 250, 123, 45, 40, 252, 18, 2, 221, 203, 237, 224, 221, 120, + 250, 123, 42, 254, 120, 252, 18, 2, 248, 145, 45, 254, 120, 252, 18, 2, + 248, 145, 42, 254, 52, 235, 87, 115, 45, 254, 52, 244, 30, 115, 51, 42, + 254, 52, 244, 30, 115, 51, 45, 254, 52, 235, 87, 115, 42, 84, 221, 114, + 224, 236, 115, 45, 84, 221, 114, 224, 236, 115, 247, 143, 245, 214, 69, + 217, 33, 235, 43, 234, 22, 254, 120, 230, 114, 235, 115, 45, 254, 120, + 219, 177, 2, 223, 227, 234, 22, 45, 254, 120, 2, 248, 145, 254, 120, 2, + 226, 235, 237, 190, 254, 248, 254, 119, 223, 245, 254, 120, 230, 114, + 235, 115, 223, 245, 254, 120, 230, 114, 220, 63, 215, 254, 119, 210, 254, + 119, 254, 120, 2, 220, 81, 210, 254, 120, 2, 220, 81, 230, 177, 254, 120, + 230, 114, 220, 63, 230, 177, 254, 120, 230, 114, 247, 132, 234, 22, 254, + 120, 2, 230, 119, 254, 32, 246, 187, 237, 224, 76, 229, 28, 108, 25, 227, + 109, 234, 22, 254, 120, 2, 230, 119, 254, 32, 246, 187, 237, 224, 76, + 229, 28, 108, 25, 235, 115, 234, 22, 254, 120, 2, 230, 119, 254, 32, 246, + 187, 237, 224, 76, 229, 28, 113, 25, 227, 109, 234, 22, 254, 120, 2, 230, + 119, 254, 32, 246, 187, 237, 224, 76, 229, 28, 113, 25, 235, 115, 234, + 22, 254, 120, 2, 230, 119, 254, 32, 246, 187, 237, 224, 76, 229, 28, 45, + 25, 220, 63, 234, 22, 254, 120, 2, 230, 119, 254, 32, 246, 187, 237, 224, + 76, 229, 28, 42, 25, 220, 63, 234, 22, 254, 120, 2, 230, 119, 254, 32, + 246, 187, 237, 224, 76, 229, 28, 45, 25, 247, 132, 234, 22, 254, 120, 2, + 230, 119, 254, 32, 246, 187, 237, 224, 76, 229, 28, 42, 25, 247, 132, + 210, 246, 199, 225, 45, 246, 199, 225, 46, 2, 230, 77, 246, 199, 225, 46, + 2, 3, 250, 222, 50, 246, 199, 225, 46, 2, 45, 76, 50, 246, 199, 225, 46, + 2, 42, 76, 50, 250, 222, 2, 186, 135, 34, 69, 135, 34, 229, 233, 34, 227, + 160, 224, 17, 34, 229, 160, 250, 222, 248, 192, 251, 213, 186, 252, 201, + 25, 221, 120, 144, 248, 192, 251, 213, 69, 135, 250, 222, 2, 223, 60, + 218, 151, 34, 254, 103, 248, 188, 55, 108, 76, 221, 225, 250, 221, 34, + 67, 251, 241, 34, 251, 241, 34, 235, 86, 34, 244, 29, 250, 222, 2, 3, + 250, 222, 199, 222, 23, 227, 109, 250, 222, 2, 124, 186, 223, 108, 199, + 222, 23, 227, 109, 204, 227, 88, 249, 11, 224, 55, 204, 245, 247, 249, + 11, 224, 55, 204, 253, 251, 204, 3, 250, 221, 204, 223, 227, 124, 237, + 56, 223, 225, 221, 91, 2, 61, 50, 221, 91, 2, 220, 81, 226, 235, 237, + 224, 221, 90, 221, 91, 2, 225, 52, 253, 245, 252, 28, 45, 221, 91, 71, + 42, 221, 90, 42, 221, 91, 252, 106, 69, 135, 69, 252, 201, 252, 106, 45, + 221, 90, 252, 23, 2, 42, 144, 252, 53, 252, 23, 2, 45, 144, 252, 53, 84, + 252, 22, 27, 2, 42, 144, 252, 53, 27, 2, 45, 144, 252, 53, 67, 242, 183, + 84, 242, 183, 42, 218, 198, 245, 214, 45, 218, 198, 245, 214, 42, 51, + 218, 198, 245, 214, 45, 51, 218, 198, 245, 214, 237, 218, 237, 207, 221, + 201, 104, 237, 207, 237, 208, 232, 138, 2, 69, 135, 247, 137, 233, 87, + 40, 2, 250, 135, 230, 81, 237, 216, 254, 13, 224, 166, 228, 229, 246, + 154, 5, 25, 224, 57, 229, 233, 246, 154, 5, 25, 224, 57, 229, 234, 2, + 221, 180, 50, 242, 59, 199, 25, 224, 57, 229, 233, 244, 75, 223, 155, + 222, 12, 247, 131, 221, 91, 2, 42, 144, 252, 53, 247, 131, 221, 91, 2, + 45, 144, 252, 53, 84, 249, 5, 2, 113, 65, 84, 234, 234, 67, 250, 222, 2, + 113, 65, 84, 250, 222, 2, 113, 65, 246, 141, 67, 223, 227, 246, 141, 84, + 223, 227, 246, 141, 67, 249, 4, 246, 141, 84, 249, 4, 246, 141, 67, 250, + 221, 246, 141, 84, 250, 221, 227, 15, 227, 160, 224, 18, 230, 112, 224, + 18, 2, 230, 77, 227, 160, 224, 18, 2, 186, 92, 252, 76, 224, 17, 252, 76, + 227, 160, 224, 17, 51, 229, 43, 221, 78, 229, 43, 235, 112, 250, 73, 254, + 120, 115, 227, 106, 250, 73, 254, 120, 115, 221, 171, 233, 152, 233, 33, + 34, 61, 230, 112, 233, 33, 34, 88, 230, 112, 233, 33, 34, 27, 230, 112, + 233, 33, 220, 75, 230, 113, 2, 248, 145, 233, 33, 220, 75, 230, 113, 2, + 229, 43, 233, 33, 40, 237, 175, 230, 112, 233, 33, 40, 220, 75, 230, 112, + 124, 235, 7, 25, 230, 112, 124, 235, 7, 156, 230, 112, 233, 33, 27, 230, + 112, 233, 131, 124, 223, 74, 223, 72, 2, 237, 186, 228, 92, 237, 187, + 230, 112, 245, 181, 229, 225, 237, 186, 237, 187, 2, 51, 92, 237, 187, + 253, 217, 2, 224, 55, 250, 218, 245, 87, 254, 104, 237, 184, 235, 44, + 237, 185, 2, 227, 207, 229, 212, 254, 29, 229, 24, 235, 44, 237, 185, 2, + 225, 69, 229, 212, 254, 29, 229, 24, 235, 44, 237, 185, 212, 237, 219, + 222, 23, 229, 24, 237, 187, 254, 29, 112, 229, 32, 230, 112, 228, 86, + 237, 187, 230, 112, 237, 187, 2, 127, 76, 2, 96, 237, 187, 2, 27, 55, + 237, 187, 2, 237, 174, 237, 187, 2, 220, 74, 237, 187, 2, 230, 77, 237, + 187, 2, 220, 81, 237, 57, 235, 146, 42, 221, 91, 230, 112, 217, 158, 165, + 226, 109, 250, 159, 217, 158, 165, 226, 109, 229, 69, 217, 158, 165, 226, + 109, 228, 226, 88, 5, 2, 3, 250, 222, 50, 88, 5, 2, 250, 217, 255, 1, 50, + 88, 5, 2, 221, 180, 50, 88, 5, 2, 61, 56, 88, 5, 2, 221, 180, 56, 88, 5, + 2, 223, 94, 103, 88, 5, 2, 84, 221, 90, 233, 155, 5, 2, 250, 169, 50, + 233, 155, 5, 2, 61, 56, 233, 155, 5, 2, 245, 247, 248, 143, 233, 155, 5, + 2, 227, 88, 248, 143, 88, 5, 237, 224, 42, 144, 250, 221, 88, 5, 237, + 224, 45, 144, 250, 221, 219, 164, 156, 250, 101, 228, 229, 233, 84, 5, 2, + 61, 50, 233, 84, 5, 2, 220, 81, 225, 66, 228, 230, 2, 252, 29, 250, 196, + 224, 41, 228, 229, 233, 84, 5, 237, 224, 42, 144, 250, 221, 233, 84, 5, + 237, 224, 45, 144, 250, 221, 34, 233, 84, 5, 2, 250, 217, 255, 0, 233, + 84, 5, 237, 224, 51, 250, 221, 34, 248, 188, 55, 88, 5, 237, 224, 221, + 90, 233, 155, 5, 237, 224, 221, 90, 233, 84, 5, 237, 224, 221, 90, 237, + 181, 228, 229, 227, 101, 237, 181, 228, 229, 217, 158, 165, 227, 191, + 250, 159, 254, 139, 156, 250, 128, 237, 175, 2, 248, 145, 220, 75, 2, + 233, 155, 55, 220, 75, 2, 230, 77, 237, 175, 2, 230, 77, 237, 175, 2, + 235, 7, 254, 126, 220, 75, 2, 235, 7, 230, 105, 220, 75, 71, 237, 174, + 237, 175, 71, 220, 74, 220, 75, 71, 252, 201, 71, 237, 174, 237, 175, 71, + 252, 201, 71, 220, 74, 220, 75, 252, 106, 25, 237, 56, 2, 220, 74, 237, + 175, 252, 106, 25, 237, 56, 2, 237, 174, 250, 197, 220, 75, 2, 225, 51, + 250, 197, 237, 175, 2, 225, 51, 51, 40, 237, 174, 51, 40, 220, 74, 250, + 197, 220, 75, 2, 225, 52, 25, 224, 41, 228, 229, 235, 7, 25, 2, 61, 50, + 235, 7, 156, 2, 61, 50, 51, 235, 7, 254, 126, 51, 235, 7, 230, 105, 124, + 237, 176, 235, 7, 254, 126, 124, 237, 176, 235, 7, 230, 105, 224, 48, + 235, 146, 230, 105, 224, 48, 235, 146, 254, 126, 235, 7, 156, 230, 75, + 235, 7, 254, 126, 235, 7, 25, 2, 233, 193, 223, 146, 235, 7, 156, 2, 233, + 193, 223, 146, 235, 7, 25, 2, 186, 249, 146, 235, 7, 156, 2, 186, 249, + 146, 235, 7, 25, 2, 51, 230, 77, 235, 7, 25, 2, 220, 81, 235, 7, 25, 2, + 51, 220, 81, 3, 219, 161, 2, 220, 81, 235, 7, 156, 2, 51, 230, 77, 235, + 7, 156, 2, 51, 220, 81, 217, 158, 165, 248, 154, 254, 99, 217, 158, 165, + 227, 234, 254, 99, 246, 154, 5, 2, 61, 56, 242, 59, 2, 61, 50, 221, 78, + 186, 252, 201, 2, 51, 69, 92, 221, 78, 186, 252, 201, 2, 221, 78, 69, 92, + 221, 180, 230, 113, 2, 61, 50, 221, 180, 230, 113, 2, 227, 88, 248, 143, + 224, 116, 233, 155, 224, 115, 250, 153, 2, 61, 50, 246, 154, 2, 253, 251, + 254, 151, 114, 199, 2, 250, 217, 255, 0, 254, 72, 114, 156, 114, 101, + 246, 154, 5, 71, 88, 55, 88, 5, 71, 246, 154, 55, 246, 154, 5, 71, 221, + 180, 230, 112, 51, 250, 176, 246, 155, 124, 250, 148, 246, 154, 224, 126, + 148, 250, 148, 246, 154, 224, 126, 246, 154, 5, 2, 124, 188, 71, 25, 124, + 188, 56, 246, 150, 2, 245, 116, 188, 50, 235, 87, 2, 250, 222, 237, 190, + 244, 30, 2, 250, 222, 237, 190, 235, 87, 2, 228, 82, 164, 50, 244, 30, 2, + 228, 82, 164, 50, 235, 87, 156, 224, 57, 114, 101, 244, 30, 156, 224, 57, + 114, 101, 235, 87, 156, 224, 57, 114, 199, 2, 61, 237, 190, 244, 30, 156, + 224, 57, 114, 199, 2, 61, 237, 190, 235, 87, 156, 224, 57, 114, 199, 2, + 61, 50, 244, 30, 156, 224, 57, 114, 199, 2, 61, 50, 235, 87, 156, 224, + 57, 114, 199, 2, 61, 71, 227, 109, 244, 30, 156, 224, 57, 114, 199, 2, + 61, 71, 235, 115, 235, 87, 156, 254, 73, 244, 30, 156, 254, 73, 235, 87, + 25, 224, 107, 212, 114, 101, 244, 30, 25, 224, 107, 212, 114, 101, 235, + 87, 25, 212, 254, 73, 244, 30, 25, 212, 254, 73, 235, 87, 71, 247, 136, + 114, 71, 244, 29, 244, 30, 71, 247, 136, 114, 71, 235, 86, 235, 87, 71, + 224, 116, 156, 246, 155, 244, 30, 71, 224, 116, 156, 246, 155, 235, 87, + 71, 224, 116, 71, 244, 29, 244, 30, 71, 224, 116, 71, 235, 86, 235, 87, + 71, 244, 30, 71, 247, 136, 246, 155, 244, 30, 71, 235, 87, 71, 247, 136, + 246, 155, 235, 87, 71, 224, 57, 114, 71, 244, 30, 71, 224, 57, 246, 155, + 244, 30, 71, 224, 57, 114, 71, 235, 87, 71, 224, 57, 246, 155, 224, 57, + 114, 199, 156, 235, 86, 224, 57, 114, 199, 156, 244, 29, 224, 57, 114, + 199, 156, 235, 87, 2, 61, 237, 190, 224, 57, 114, 199, 156, 244, 30, 2, + 61, 237, 190, 247, 136, 114, 199, 156, 235, 86, 247, 136, 114, 199, 156, + 244, 29, 247, 136, 224, 57, 114, 199, 156, 235, 86, 247, 136, 224, 57, + 114, 199, 156, 244, 29, 224, 116, 156, 235, 86, 224, 116, 156, 244, 29, + 224, 116, 71, 235, 87, 71, 246, 154, 55, 224, 116, 71, 244, 30, 71, 246, + 154, 55, 51, 232, 127, 235, 86, 51, 232, 127, 244, 29, 51, 232, 127, 235, + 87, 2, 220, 81, 244, 30, 230, 75, 235, 86, 244, 30, 252, 106, 235, 86, + 235, 87, 250, 197, 251, 213, 250, 74, 244, 30, 250, 197, 251, 213, 250, + 74, 235, 87, 250, 197, 251, 213, 250, 75, 71, 224, 57, 246, 155, 244, 30, + 250, 197, 251, 213, 250, 75, 71, 224, 57, 246, 155, 224, 42, 222, 27, + 235, 145, 222, 27, 224, 42, 222, 28, 156, 114, 101, 235, 145, 222, 28, + 156, 114, 101, 246, 154, 5, 2, 251, 236, 50, 228, 245, 71, 224, 107, 246, + 154, 55, 223, 85, 71, 224, 107, 246, 154, 55, 228, 245, 71, 224, 107, + 212, 114, 101, 223, 85, 71, 224, 107, 212, 114, 101, 228, 245, 71, 246, + 154, 55, 223, 85, 71, 246, 154, 55, 228, 245, 71, 212, 114, 101, 223, 85, + 71, 212, 114, 101, 228, 245, 71, 254, 151, 114, 101, 223, 85, 71, 254, + 151, 114, 101, 228, 245, 71, 212, 254, 151, 114, 101, 223, 85, 71, 212, + 254, 151, 114, 101, 51, 228, 244, 51, 223, 84, 223, 93, 2, 248, 145, 223, + 58, 2, 248, 145, 223, 93, 2, 88, 5, 56, 223, 58, 2, 88, 5, 56, 223, 93, + 2, 233, 84, 5, 56, 223, 58, 2, 233, 84, 5, 56, 223, 93, 117, 156, 114, + 199, 2, 61, 50, 223, 58, 117, 156, 114, 199, 2, 61, 50, 223, 93, 117, 71, + 246, 154, 55, 223, 58, 117, 71, 246, 154, 55, 223, 93, 117, 71, 221, 180, + 230, 112, 223, 58, 117, 71, 221, 180, 230, 112, 223, 93, 117, 71, 254, + 151, 114, 101, 223, 58, 117, 71, 254, 151, 114, 101, 223, 93, 117, 71, + 212, 114, 101, 223, 58, 117, 71, 212, 114, 101, 40, 42, 230, 119, 86, + 230, 112, 40, 45, 230, 119, 86, 230, 112, 250, 197, 223, 92, 250, 197, + 223, 57, 250, 197, 223, 93, 156, 114, 101, 250, 197, 223, 58, 156, 114, + 101, 223, 93, 71, 223, 57, 223, 58, 71, 223, 92, 223, 93, 71, 223, 92, + 223, 58, 71, 223, 57, 223, 58, 252, 106, 223, 92, 223, 58, 252, 106, 25, + 237, 56, 251, 213, 249, 147, 2, 223, 92, 246, 213, 117, 230, 114, 247, + 129, 229, 63, 2, 222, 81, 221, 119, 221, 102, 237, 174, 245, 125, 231, + 196, 224, 192, 42, 222, 143, 224, 192, 113, 222, 143, 224, 192, 108, 222, + 143, 229, 161, 2, 198, 69, 252, 201, 221, 78, 45, 220, 236, 51, 69, 252, + 201, 42, 220, 236, 69, 252, 201, 51, 42, 220, 236, 51, 69, 252, 201, 51, + 42, 220, 236, 171, 249, 147, 245, 97, 42, 233, 255, 117, 51, 219, 152, + 224, 192, 113, 222, 144, 2, 230, 77, 224, 192, 108, 222, 144, 2, 220, 81, + 224, 192, 108, 222, 144, 71, 224, 192, 113, 222, 143, 51, 113, 222, 143, + 51, 108, 222, 143, 51, 214, 212, 55, 210, 51, 214, 212, 55, 248, 160, + 212, 248, 194, 2, 210, 232, 137, 224, 55, 69, 235, 44, 2, 250, 222, 50, + 69, 235, 44, 2, 250, 222, 56, 113, 222, 144, 2, 250, 222, 56, 229, 234, + 2, 186, 92, 229, 234, 2, 221, 180, 230, 112, 221, 78, 69, 252, 201, 252, + 73, 227, 192, 221, 78, 69, 252, 201, 2, 186, 92, 221, 78, 250, 176, 230, + 112, 221, 78, 232, 127, 235, 86, 221, 78, 232, 127, 244, 29, 247, 136, + 224, 57, 235, 87, 156, 114, 101, 247, 136, 224, 57, 244, 30, 156, 114, + 101, 221, 78, 224, 18, 252, 73, 227, 192, 235, 146, 221, 78, 69, 252, + 201, 230, 112, 51, 224, 18, 230, 112, 67, 69, 135, 233, 33, 67, 69, 135, + 231, 187, 247, 5, 67, 65, 231, 187, 218, 217, 67, 65, 224, 6, 247, 5, 67, + 65, 224, 6, 218, 217, 67, 65, 42, 45, 67, 65, 127, 84, 65, 220, 53, 84, + 65, 247, 130, 84, 65, 231, 187, 247, 5, 84, 65, 231, 187, 218, 217, 84, + 65, 224, 6, 247, 5, 84, 65, 224, 6, 218, 217, 84, 65, 42, 45, 84, 65, + 108, 113, 84, 65, 90, 76, 2, 221, 170, 247, 129, 90, 76, 2, 221, 170, + 220, 52, 127, 76, 2, 221, 170, 247, 129, 127, 76, 2, 221, 170, 220, 52, + 40, 2, 221, 120, 144, 252, 53, 40, 2, 252, 29, 144, 252, 53, 40, 2, 220, + 60, 45, 249, 11, 144, 252, 53, 40, 2, 234, 237, 42, 249, 11, 144, 252, + 53, 249, 5, 2, 42, 144, 252, 53, 249, 5, 2, 45, 144, 252, 53, 249, 5, 2, + 221, 120, 144, 252, 53, 249, 5, 2, 252, 29, 144, 252, 53, 247, 143, 223, + 227, 84, 235, 146, 223, 227, 67, 235, 146, 223, 227, 84, 219, 100, 3, + 223, 227, 67, 219, 100, 3, 223, 227, 84, 229, 175, 67, 229, 175, 67, 243, + 124, 84, 243, 124, 186, 84, 243, 124, 84, 235, 146, 250, 221, 84, 234, + 18, 249, 4, 67, 234, 18, 249, 4, 84, 234, 18, 234, 234, 67, 234, 18, 234, + 234, 84, 3, 249, 4, 84, 3, 234, 234, 67, 3, 234, 234, 84, 186, 246, 209, + 67, 186, 246, 209, 84, 69, 246, 209, 67, 69, 246, 209, 42, 76, 2, 3, 250, + 221, 148, 127, 254, 19, 42, 76, 2, 34, 229, 43, 171, 127, 223, 223, 65, + 127, 220, 206, 76, 2, 69, 92, 127, 220, 206, 76, 2, 51, 69, 92, 127, 220, + 206, 76, 245, 97, 135, 127, 220, 206, 221, 78, 249, 147, 65, 127, 76, 2, + 247, 143, 223, 146, 127, 76, 2, 222, 136, 2, 69, 92, 127, 76, 2, 222, + 136, 2, 51, 69, 92, 127, 220, 206, 76, 2, 222, 135, 127, 220, 206, 76, 2, + 222, 136, 2, 69, 92, 127, 220, 206, 76, 2, 222, 136, 2, 51, 69, 92, 127, + 76, 221, 225, 218, 151, 218, 237, 76, 229, 28, 248, 208, 235, 115, 246, + 154, 5, 71, 127, 65, 227, 160, 221, 180, 230, 113, 71, 127, 65, 127, 76, + 71, 227, 160, 254, 151, 114, 101, 90, 76, 221, 225, 244, 29, 90, 76, 221, + 225, 223, 57, 127, 228, 92, 65, 90, 228, 92, 65, 227, 160, 221, 180, 230, + 113, 71, 90, 65, 90, 76, 71, 227, 160, 254, 151, 114, 101, 221, 180, 230, + 113, 71, 127, 65, 127, 76, 71, 254, 151, 114, 101, 127, 76, 71, 227, 160, + 221, 180, 230, 112, 90, 76, 71, 227, 160, 221, 180, 230, 112, 67, 234, + 18, 223, 156, 84, 3, 223, 156, 67, 3, 223, 156, 84, 227, 106, 229, 175, + 67, 227, 106, 229, 175, 106, 235, 146, 250, 221, 106, 230, 78, 2, 230, + 78, 237, 190, 106, 250, 222, 2, 250, 222, 237, 190, 106, 250, 221, 106, + 34, 226, 149, 125, 6, 1, 253, 205, 125, 6, 1, 251, 244, 125, 6, 1, 219, + 163, 125, 6, 1, 244, 76, 125, 6, 1, 248, 162, 125, 6, 1, 218, 1, 125, 6, + 1, 217, 66, 125, 6, 1, 247, 71, 125, 6, 1, 217, 89, 125, 6, 1, 237, 130, + 125, 6, 1, 66, 237, 130, 125, 6, 1, 72, 125, 6, 1, 248, 180, 125, 6, 1, + 236, 238, 125, 6, 1, 235, 19, 125, 6, 1, 233, 37, 125, 6, 1, 232, 208, + 125, 6, 1, 230, 129, 125, 6, 1, 229, 26, 125, 6, 1, 227, 87, 125, 6, 1, + 224, 47, 125, 6, 1, 220, 226, 125, 6, 1, 220, 98, 125, 6, 1, 245, 99, + 125, 6, 1, 243, 130, 125, 6, 1, 230, 87, 125, 6, 1, 229, 198, 125, 6, 1, + 224, 173, 125, 6, 1, 221, 39, 125, 6, 1, 251, 3, 125, 6, 1, 225, 25, 125, + 6, 1, 218, 7, 125, 6, 1, 218, 9, 125, 6, 1, 218, 34, 125, 6, 1, 223, 243, + 155, 125, 6, 1, 217, 200, 125, 6, 1, 3, 217, 178, 125, 6, 1, 3, 217, 179, + 2, 222, 135, 125, 6, 1, 217, 231, 125, 6, 1, 237, 161, 3, 217, 178, 125, + 6, 1, 252, 76, 217, 178, 125, 6, 1, 237, 161, 252, 76, 217, 178, 125, 6, + 1, 245, 171, 125, 6, 1, 237, 128, 125, 6, 1, 224, 172, 125, 6, 1, 221, + 70, 60, 125, 6, 1, 235, 137, 233, 37, 125, 3, 1, 253, 205, 125, 3, 1, + 251, 244, 125, 3, 1, 219, 163, 125, 3, 1, 244, 76, 125, 3, 1, 248, 162, + 125, 3, 1, 218, 1, 125, 3, 1, 217, 66, 125, 3, 1, 247, 71, 125, 3, 1, + 217, 89, 125, 3, 1, 237, 130, 125, 3, 1, 66, 237, 130, 125, 3, 1, 72, + 125, 3, 1, 248, 180, 125, 3, 1, 236, 238, 125, 3, 1, 235, 19, 125, 3, 1, + 233, 37, 125, 3, 1, 232, 208, 125, 3, 1, 230, 129, 125, 3, 1, 229, 26, + 125, 3, 1, 227, 87, 125, 3, 1, 224, 47, 125, 3, 1, 220, 226, 125, 3, 1, + 220, 98, 125, 3, 1, 245, 99, 125, 3, 1, 243, 130, 125, 3, 1, 230, 87, + 125, 3, 1, 229, 198, 125, 3, 1, 224, 173, 125, 3, 1, 221, 39, 125, 3, 1, + 251, 3, 125, 3, 1, 225, 25, 125, 3, 1, 218, 7, 125, 3, 1, 218, 9, 125, 3, + 1, 218, 34, 125, 3, 1, 223, 243, 155, 125, 3, 1, 217, 200, 125, 3, 1, 3, + 217, 178, 125, 3, 1, 3, 217, 179, 2, 222, 135, 125, 3, 1, 217, 231, 125, + 3, 1, 237, 161, 3, 217, 178, 125, 3, 1, 252, 76, 217, 178, 125, 3, 1, + 237, 161, 252, 76, 217, 178, 125, 3, 1, 245, 171, 125, 3, 1, 237, 128, + 125, 3, 1, 224, 172, 125, 3, 1, 221, 70, 60, 125, 3, 1, 235, 137, 233, + 37, 7, 6, 1, 235, 202, 2, 51, 135, 7, 3, 1, 235, 202, 2, 51, 135, 7, 6, + 1, 235, 202, 2, 233, 193, 221, 179, 7, 6, 1, 230, 60, 2, 92, 7, 6, 1, + 228, 39, 2, 222, 135, 7, 3, 1, 112, 2, 92, 7, 3, 1, 222, 202, 2, 249, 11, + 92, 7, 6, 1, 243, 226, 2, 249, 48, 7, 3, 1, 243, 226, 2, 249, 48, 7, 6, + 1, 237, 18, 2, 249, 48, 7, 3, 1, 237, 18, 2, 249, 48, 7, 6, 1, 217, 158, + 2, 249, 48, 7, 3, 1, 217, 158, 2, 249, 48, 7, 6, 1, 254, 146, 7, 6, 1, + 234, 187, 2, 96, 7, 6, 1, 215, 60, 7, 6, 1, 215, 254, 146, 7, 3, 1, 220, + 11, 2, 45, 96, 7, 6, 1, 219, 41, 2, 96, 7, 3, 1, 219, 41, 2, 96, 7, 3, 1, + 220, 11, 2, 250, 80, 7, 6, 1, 144, 243, 225, 7, 3, 1, 144, 243, 225, 7, + 3, 1, 222, 133, 229, 129, 7, 3, 1, 178, 2, 231, 183, 7, 3, 1, 215, 228, + 39, 2, 222, 135, 7, 3, 1, 142, 2, 109, 227, 94, 237, 190, 7, 1, 3, 6, + 215, 73, 7, 223, 94, 3, 1, 237, 126, 58, 1, 6, 216, 216, 7, 6, 1, 226, + 235, 2, 223, 33, 222, 135, 7, 6, 1, 217, 158, 2, 223, 33, 222, 135, 75, + 6, 1, 254, 163, 75, 3, 1, 254, 163, 75, 6, 1, 219, 92, 75, 3, 1, 219, 92, + 75, 6, 1, 244, 231, 75, 3, 1, 244, 231, 75, 6, 1, 249, 179, 75, 3, 1, + 249, 179, 75, 6, 1, 246, 236, 75, 3, 1, 246, 236, 75, 6, 1, 224, 11, 75, + 3, 1, 224, 11, 75, 6, 1, 217, 99, 75, 3, 1, 217, 99, 75, 6, 1, 243, 171, + 75, 3, 1, 243, 171, 75, 6, 1, 222, 4, 75, 3, 1, 222, 4, 75, 6, 1, 242, + 70, 75, 3, 1, 242, 70, 75, 6, 1, 236, 226, 75, 3, 1, 236, 226, 75, 6, 1, + 235, 135, 75, 3, 1, 235, 135, 75, 6, 1, 233, 196, 75, 3, 1, 233, 196, 75, + 6, 1, 232, 62, 75, 3, 1, 232, 62, 75, 6, 1, 236, 11, 75, 3, 1, 236, 11, + 75, 6, 1, 74, 75, 3, 1, 74, 75, 6, 1, 229, 108, 75, 3, 1, 229, 108, 75, + 6, 1, 227, 75, 75, 3, 1, 227, 75, 75, 6, 1, 224, 118, 75, 3, 1, 224, 118, + 75, 6, 1, 222, 105, 75, 3, 1, 222, 105, 75, 6, 1, 220, 123, 75, 3, 1, + 220, 123, 75, 6, 1, 245, 203, 75, 3, 1, 245, 203, 75, 6, 1, 236, 130, 75, + 3, 1, 236, 130, 75, 6, 1, 228, 212, 75, 3, 1, 228, 212, 75, 6, 1, 230, + 123, 75, 3, 1, 230, 123, 75, 6, 1, 249, 9, 254, 168, 75, 3, 1, 249, 9, + 254, 168, 75, 6, 1, 48, 75, 254, 191, 75, 3, 1, 48, 75, 254, 191, 75, 6, + 1, 250, 93, 246, 236, 75, 3, 1, 250, 93, 246, 236, 75, 6, 1, 249, 9, 236, + 226, 75, 3, 1, 249, 9, 236, 226, 75, 6, 1, 249, 9, 232, 62, 75, 3, 1, + 249, 9, 232, 62, 75, 6, 1, 250, 93, 232, 62, 75, 3, 1, 250, 93, 232, 62, + 75, 6, 1, 48, 75, 230, 123, 75, 3, 1, 48, 75, 230, 123, 75, 6, 1, 226, + 142, 75, 3, 1, 226, 142, 75, 6, 1, 250, 98, 224, 238, 75, 3, 1, 250, 98, + 224, 238, 75, 6, 1, 48, 75, 224, 238, 75, 3, 1, 48, 75, 224, 238, 75, 6, + 1, 48, 75, 246, 133, 75, 3, 1, 48, 75, 246, 133, 75, 6, 1, 254, 178, 236, + 135, 75, 3, 1, 254, 178, 236, 135, 75, 6, 1, 249, 9, 242, 242, 75, 3, 1, + 249, 9, 242, 242, 75, 6, 1, 48, 75, 242, 242, 75, 3, 1, 48, 75, 242, 242, + 75, 6, 1, 48, 75, 155, 75, 3, 1, 48, 75, 155, 75, 6, 1, 235, 201, 155, + 75, 3, 1, 235, 201, 155, 75, 6, 1, 48, 75, 243, 145, 75, 3, 1, 48, 75, + 243, 145, 75, 6, 1, 48, 75, 243, 173, 75, 3, 1, 48, 75, 243, 173, 75, 6, + 1, 48, 75, 244, 226, 75, 3, 1, 48, 75, 244, 226, 75, 6, 1, 48, 75, 248, + 183, 75, 3, 1, 48, 75, 248, 183, 75, 6, 1, 48, 75, 224, 211, 75, 3, 1, + 48, 75, 224, 211, 75, 6, 1, 48, 231, 115, 224, 211, 75, 3, 1, 48, 231, + 115, 224, 211, 75, 6, 1, 48, 231, 115, 232, 92, 75, 3, 1, 48, 231, 115, + 232, 92, 75, 6, 1, 48, 231, 115, 231, 67, 75, 3, 1, 48, 231, 115, 231, + 67, 75, 6, 1, 48, 231, 115, 218, 238, 75, 3, 1, 48, 231, 115, 218, 238, + 75, 16, 236, 243, 75, 16, 233, 197, 227, 75, 75, 16, 229, 109, 227, 75, + 75, 16, 223, 152, 75, 16, 222, 106, 227, 75, 75, 16, 236, 131, 227, 75, + 75, 16, 224, 212, 224, 118, 75, 6, 1, 250, 93, 224, 238, 75, 3, 1, 250, + 93, 224, 238, 75, 6, 1, 250, 93, 244, 226, 75, 3, 1, 250, 93, 244, 226, + 75, 36, 232, 63, 50, 75, 36, 223, 238, 254, 2, 75, 36, 223, 238, 235, 92, + 75, 48, 231, 115, 245, 90, 223, 136, 75, 48, 231, 115, 248, 210, 228, 82, + 78, 75, 48, 231, 115, 237, 210, 228, 82, 78, 75, 48, 231, 115, 219, 154, + 248, 191, 75, 245, 108, 131, 243, 194, 75, 245, 90, 223, 136, 75, 233, + 113, 248, 191, 95, 3, 1, 254, 131, 95, 3, 1, 252, 209, 95, 3, 1, 244, + 230, 95, 3, 1, 248, 153, 95, 3, 1, 246, 197, 95, 3, 1, 219, 85, 95, 3, 1, + 217, 87, 95, 3, 1, 222, 119, 95, 3, 1, 237, 223, 95, 3, 1, 236, 233, 95, + 3, 1, 235, 143, 95, 3, 1, 234, 86, 95, 3, 1, 232, 211, 95, 3, 1, 230, + 138, 95, 3, 1, 229, 243, 95, 3, 1, 217, 76, 95, 3, 1, 227, 249, 95, 3, 1, + 226, 140, 95, 3, 1, 222, 112, 95, 3, 1, 220, 87, 95, 3, 1, 229, 134, 95, + 3, 1, 236, 138, 95, 3, 1, 244, 119, 95, 3, 1, 228, 140, 95, 3, 1, 224, + 209, 95, 3, 1, 251, 22, 95, 3, 1, 251, 154, 95, 3, 1, 237, 91, 95, 3, 1, + 250, 224, 95, 3, 1, 251, 56, 95, 3, 1, 218, 136, 95, 3, 1, 237, 101, 95, + 3, 1, 243, 208, 95, 3, 1, 243, 162, 95, 3, 1, 243, 108, 95, 3, 1, 218, + 227, 95, 3, 1, 243, 182, 95, 3, 1, 243, 2, 221, 197, 1, 184, 221, 197, 1, + 218, 72, 221, 197, 1, 218, 71, 221, 197, 1, 218, 63, 221, 197, 1, 218, + 61, 221, 197, 1, 252, 108, 255, 2, 218, 57, 221, 197, 1, 218, 57, 221, + 197, 1, 218, 69, 221, 197, 1, 218, 66, 221, 197, 1, 218, 68, 221, 197, 1, + 218, 67, 221, 197, 1, 217, 254, 221, 197, 1, 218, 64, 221, 197, 1, 218, + 55, 221, 197, 1, 220, 255, 218, 55, 221, 197, 1, 218, 52, 221, 197, 1, + 218, 59, 221, 197, 1, 252, 108, 255, 2, 218, 59, 221, 197, 1, 220, 255, + 218, 59, 221, 197, 1, 218, 58, 221, 197, 1, 218, 76, 221, 197, 1, 218, + 53, 221, 197, 1, 220, 255, 218, 53, 221, 197, 1, 218, 43, 221, 197, 1, + 220, 255, 218, 43, 221, 197, 1, 217, 250, 221, 197, 1, 218, 27, 221, 197, + 1, 254, 200, 218, 27, 221, 197, 1, 220, 255, 218, 27, 221, 197, 1, 218, + 51, 221, 197, 1, 218, 50, 221, 197, 1, 218, 47, 221, 197, 1, 220, 255, + 218, 60, 221, 197, 1, 220, 255, 218, 45, 221, 197, 1, 218, 44, 221, 197, + 1, 217, 200, 221, 197, 1, 218, 41, 221, 197, 1, 218, 40, 221, 197, 1, + 218, 62, 221, 197, 1, 220, 255, 218, 62, 221, 197, 1, 253, 208, 218, 62, + 221, 197, 1, 218, 39, 221, 197, 1, 218, 37, 221, 197, 1, 218, 38, 221, + 197, 1, 218, 36, 221, 197, 1, 218, 35, 221, 197, 1, 218, 70, 221, 197, 1, + 218, 33, 221, 197, 1, 218, 32, 221, 197, 1, 218, 31, 221, 197, 1, 218, + 30, 221, 197, 1, 218, 28, 221, 197, 1, 222, 98, 218, 28, 221, 197, 1, + 218, 26, 221, 197, 58, 1, 235, 182, 78, 28, 4, 235, 11, 28, 4, 233, 135, + 28, 4, 227, 73, 28, 4, 224, 25, 28, 4, 224, 199, 28, 4, 252, 40, 28, 4, + 221, 139, 28, 4, 250, 181, 28, 4, 231, 202, 28, 4, 231, 55, 28, 4, 244, + 73, 230, 185, 28, 4, 217, 20, 28, 4, 248, 165, 28, 4, 249, 106, 28, 4, + 237, 58, 28, 4, 221, 238, 28, 4, 251, 10, 28, 4, 229, 117, 28, 4, 229, + 36, 28, 4, 244, 130, 28, 4, 244, 126, 28, 4, 244, 127, 28, 4, 244, 128, + 28, 4, 223, 218, 28, 4, 223, 178, 28, 4, 223, 189, 28, 4, 223, 217, 28, + 4, 223, 193, 28, 4, 223, 194, 28, 4, 223, 182, 28, 4, 251, 114, 28, 4, + 251, 101, 28, 4, 251, 103, 28, 4, 251, 113, 28, 4, 251, 111, 28, 4, 251, + 112, 28, 4, 251, 102, 28, 4, 216, 247, 28, 4, 216, 227, 28, 4, 216, 238, + 28, 4, 216, 246, 28, 4, 216, 241, 28, 4, 216, 242, 28, 4, 216, 230, 28, + 4, 251, 110, 28, 4, 251, 104, 28, 4, 251, 106, 28, 4, 251, 109, 28, 4, + 251, 107, 28, 4, 251, 108, 28, 4, 251, 105, 28, 4, 228, 51, 28, 4, 228, + 41, 28, 4, 228, 47, 28, 4, 228, 50, 28, 4, 228, 48, 28, 4, 228, 49, 28, + 4, 228, 46, 28, 4, 235, 212, 28, 4, 235, 204, 28, 4, 235, 207, 28, 4, + 235, 211, 28, 4, 235, 208, 28, 4, 235, 209, 28, 4, 235, 205, 28, 4, 218, + 103, 28, 4, 218, 93, 28, 4, 218, 99, 28, 4, 218, 102, 28, 4, 218, 100, + 28, 4, 218, 101, 28, 4, 218, 98, 28, 4, 243, 236, 28, 4, 243, 227, 28, 4, + 243, 230, 28, 4, 243, 235, 28, 4, 243, 232, 28, 4, 243, 233, 28, 4, 243, + 229, 36, 31, 1, 252, 144, 36, 31, 1, 219, 165, 36, 31, 1, 244, 116, 36, + 31, 1, 249, 92, 36, 31, 1, 217, 72, 36, 31, 1, 217, 92, 36, 31, 1, 175, + 36, 31, 1, 246, 217, 36, 31, 1, 246, 205, 36, 31, 1, 246, 197, 36, 31, 1, + 74, 36, 31, 1, 229, 198, 36, 31, 1, 246, 148, 36, 31, 1, 246, 138, 36, + 31, 1, 222, 87, 36, 31, 1, 155, 36, 31, 1, 221, 50, 36, 31, 1, 251, 46, + 36, 31, 1, 225, 25, 36, 31, 1, 224, 248, 36, 31, 1, 245, 171, 36, 31, 1, + 246, 137, 36, 31, 1, 60, 36, 31, 1, 238, 26, 36, 31, 1, 248, 181, 36, 31, + 1, 233, 123, 220, 102, 36, 31, 1, 218, 36, 36, 31, 1, 217, 200, 36, 31, + 1, 237, 160, 60, 36, 31, 1, 235, 25, 217, 178, 36, 31, 1, 252, 76, 217, + 178, 36, 31, 1, 237, 160, 252, 76, 217, 178, 45, 254, 120, 223, 89, 234, + 63, 45, 254, 120, 247, 143, 223, 89, 234, 63, 42, 223, 89, 115, 45, 223, + 89, 115, 42, 247, 143, 223, 89, 115, 45, 247, 143, 223, 89, 115, 227, + 241, 237, 178, 234, 63, 227, 241, 247, 143, 237, 178, 234, 63, 247, 143, + 221, 103, 234, 63, 42, 221, 103, 115, 45, 221, 103, 115, 227, 241, 223, + 227, 42, 227, 241, 230, 140, 115, 45, 227, 241, 230, 140, 115, 246, 251, + 250, 121, 229, 239, 245, 126, 229, 239, 210, 245, 126, 229, 239, 242, + 118, 247, 143, 230, 180, 247, 130, 254, 127, 220, 53, 254, 127, 247, 143, + 227, 106, 254, 119, 51, 230, 177, 242, 121, 237, 170, 237, 177, 230, 23, + 252, 14, 242, 122, 2, 249, 13, 221, 180, 2, 227, 94, 50, 42, 109, 229, + 231, 115, 45, 109, 229, 231, 115, 221, 180, 2, 61, 50, 221, 180, 2, 61, + 56, 42, 69, 252, 201, 2, 228, 77, 45, 69, 252, 201, 2, 228, 77, 221, 120, + 42, 144, 115, 221, 120, 45, 144, 115, 252, 29, 42, 144, 115, 252, 29, 45, + 144, 115, 42, 224, 136, 105, 115, 45, 224, 136, 105, 115, 42, 51, 229, + 229, 45, 51, 229, 229, 124, 188, 104, 131, 61, 228, 196, 131, 61, 104, + 124, 188, 228, 196, 204, 245, 116, 61, 228, 196, 245, 170, 61, 78, 210, + 228, 82, 78, 69, 221, 179, 227, 94, 229, 31, 218, 174, 225, 55, 233, 193, + 248, 145, 9, 32, 227, 181, 9, 32, 250, 203, 9, 32, 226, 90, 107, 9, 32, + 226, 90, 103, 9, 32, 226, 90, 160, 9, 32, 229, 157, 9, 32, 252, 21, 9, + 32, 222, 146, 9, 32, 236, 61, 107, 9, 32, 236, 61, 103, 9, 32, 248, 189, + 9, 32, 226, 92, 9, 32, 3, 107, 9, 32, 3, 103, 9, 32, 235, 155, 107, 9, + 32, 235, 155, 103, 9, 32, 235, 155, 160, 9, 32, 235, 155, 154, 9, 32, + 224, 35, 9, 32, 221, 229, 9, 32, 224, 33, 107, 9, 32, 224, 33, 103, 9, + 32, 243, 154, 107, 9, 32, 243, 154, 103, 9, 32, 243, 189, 9, 32, 227, + 233, 9, 32, 251, 8, 9, 32, 223, 68, 9, 32, 233, 117, 9, 32, 249, 90, 9, + 32, 233, 110, 9, 32, 250, 213, 9, 32, 218, 241, 107, 9, 32, 218, 241, + 103, 9, 32, 245, 179, 9, 32, 229, 208, 107, 9, 32, 229, 208, 103, 9, 32, + 224, 114, 144, 221, 99, 221, 60, 9, 32, 250, 110, 9, 32, 248, 159, 9, 32, + 237, 121, 9, 32, 252, 36, 117, 250, 192, 9, 32, 246, 81, 9, 32, 223, 240, + 107, 9, 32, 223, 240, 103, 9, 32, 252, 211, 9, 32, 224, 119, 9, 32, 251, + 199, 224, 119, 9, 32, 232, 126, 107, 9, 32, 232, 126, 103, 9, 32, 232, + 126, 160, 9, 32, 232, 126, 154, 9, 32, 233, 243, 9, 32, 224, 240, 9, 32, + 227, 239, 9, 32, 246, 100, 9, 32, 230, 150, 9, 32, 251, 255, 107, 9, 32, + 251, 255, 103, 9, 32, 234, 21, 9, 32, 233, 112, 9, 32, 244, 40, 107, 9, + 32, 244, 40, 103, 9, 32, 244, 40, 160, 9, 32, 221, 196, 9, 32, 250, 191, + 9, 32, 218, 217, 107, 9, 32, 218, 217, 103, 9, 32, 251, 199, 226, 84, 9, + 32, 224, 114, 242, 189, 9, 32, 242, 189, 9, 32, 251, 199, 223, 247, 9, + 32, 251, 199, 224, 235, 9, 32, 245, 133, 9, 32, 251, 199, 251, 127, 9, + 32, 224, 114, 218, 255, 9, 32, 219, 0, 107, 9, 32, 219, 0, 103, 9, 32, + 250, 214, 9, 32, 251, 199, 244, 62, 9, 32, 171, 107, 9, 32, 171, 103, 9, + 32, 251, 199, 235, 2, 9, 32, 251, 199, 244, 213, 9, 32, 233, 109, 107, 9, + 32, 233, 109, 103, 9, 32, 227, 242, 9, 32, 252, 43, 9, 32, 251, 199, 222, + 117, 235, 119, 9, 32, 251, 199, 235, 120, 9, 32, 251, 199, 218, 194, 9, + 32, 251, 199, 245, 142, 9, 32, 247, 3, 107, 9, 32, 247, 3, 103, 9, 32, + 247, 3, 160, 9, 32, 251, 199, 247, 2, 9, 32, 243, 159, 9, 32, 251, 199, + 242, 188, 9, 32, 252, 35, 9, 32, 244, 111, 9, 32, 251, 199, 245, 176, 9, + 32, 251, 199, 252, 67, 9, 32, 251, 199, 226, 151, 9, 32, 224, 114, 218, + 212, 9, 32, 224, 114, 218, 20, 9, 32, 251, 199, 245, 98, 9, 32, 237, 125, + 246, 103, 9, 32, 251, 199, 246, 103, 9, 32, 237, 125, 221, 121, 9, 32, + 251, 199, 221, 121, 9, 32, 237, 125, 247, 123, 9, 32, 251, 199, 247, 123, + 9, 32, 220, 234, 9, 32, 237, 125, 220, 234, 9, 32, 251, 199, 220, 234, + 53, 32, 107, 53, 32, 235, 43, 53, 32, 248, 145, 53, 32, 224, 55, 53, 32, + 226, 89, 53, 32, 96, 53, 32, 103, 53, 32, 235, 64, 53, 32, 234, 86, 53, + 32, 235, 103, 53, 32, 246, 178, 53, 32, 185, 53, 32, 113, 252, 21, 53, + 32, 250, 111, 53, 32, 242, 65, 53, 32, 222, 146, 53, 32, 230, 119, 252, + 21, 53, 32, 236, 60, 53, 32, 229, 10, 53, 32, 218, 169, 53, 32, 223, 235, + 53, 32, 45, 230, 119, 252, 21, 53, 32, 243, 109, 246, 192, 53, 32, 222, + 65, 53, 32, 248, 189, 53, 32, 226, 92, 53, 32, 250, 203, 53, 32, 228, + 231, 53, 32, 254, 208, 53, 32, 233, 105, 53, 32, 246, 192, 53, 32, 247, + 8, 53, 32, 226, 108, 53, 32, 244, 68, 53, 32, 244, 69, 224, 45, 53, 32, + 246, 102, 53, 32, 252, 75, 53, 32, 218, 183, 53, 32, 251, 24, 53, 32, + 227, 66, 53, 32, 237, 220, 53, 32, 224, 43, 53, 32, 235, 154, 53, 32, + 250, 119, 53, 32, 223, 230, 53, 32, 233, 107, 53, 32, 227, 84, 53, 32, + 218, 171, 53, 32, 230, 134, 53, 32, 220, 239, 53, 32, 247, 113, 53, 32, + 224, 192, 221, 229, 53, 32, 247, 143, 250, 203, 53, 32, 171, 223, 122, + 53, 32, 124, 243, 187, 53, 32, 224, 194, 53, 32, 252, 24, 53, 32, 224, + 32, 53, 32, 252, 3, 53, 32, 223, 145, 53, 32, 243, 153, 53, 32, 243, 195, + 53, 32, 248, 148, 53, 32, 243, 189, 53, 32, 252, 14, 53, 32, 227, 233, + 53, 32, 226, 99, 53, 32, 248, 212, 53, 32, 253, 213, 53, 32, 223, 227, + 53, 32, 231, 184, 53, 32, 223, 68, 53, 32, 226, 118, 53, 32, 233, 117, + 53, 32, 221, 98, 53, 32, 235, 178, 53, 32, 223, 136, 53, 32, 249, 90, 53, + 32, 218, 226, 53, 32, 248, 168, 231, 184, 53, 32, 250, 165, 53, 32, 245, + 84, 53, 32, 250, 211, 53, 32, 223, 148, 53, 32, 218, 240, 53, 32, 245, + 179, 53, 32, 250, 210, 53, 32, 245, 235, 53, 32, 51, 218, 151, 53, 32, + 144, 221, 99, 221, 60, 53, 32, 224, 52, 53, 32, 245, 243, 53, 32, 250, + 110, 53, 32, 248, 159, 53, 32, 228, 228, 53, 32, 237, 121, 53, 32, 234, + 3, 53, 32, 221, 178, 53, 32, 223, 31, 53, 32, 235, 59, 53, 32, 220, 33, + 53, 32, 245, 202, 53, 32, 252, 36, 117, 250, 192, 53, 32, 224, 137, 53, + 32, 247, 143, 222, 62, 53, 32, 218, 207, 53, 32, 224, 62, 53, 32, 248, + 202, 53, 32, 246, 81, 53, 32, 223, 249, 53, 32, 65, 53, 32, 223, 138, 53, + 32, 223, 239, 53, 32, 221, 108, 53, 32, 244, 45, 53, 32, 251, 119, 53, + 32, 223, 160, 53, 32, 252, 211, 53, 32, 227, 145, 53, 32, 224, 119, 53, + 32, 237, 117, 53, 32, 232, 125, 53, 32, 224, 240, 53, 32, 245, 228, 53, + 32, 230, 150, 53, 32, 254, 126, 53, 32, 229, 47, 53, 32, 247, 11, 53, 32, + 251, 254, 53, 32, 234, 21, 53, 32, 233, 156, 53, 32, 225, 73, 53, 32, + 254, 23, 53, 32, 233, 112, 53, 32, 221, 124, 53, 32, 230, 111, 53, 32, + 252, 38, 53, 32, 223, 134, 53, 32, 250, 174, 53, 32, 244, 39, 53, 32, + 221, 196, 53, 32, 237, 192, 53, 32, 252, 44, 53, 32, 219, 0, 246, 192, + 53, 32, 250, 191, 53, 32, 218, 216, 53, 32, 226, 84, 53, 32, 242, 189, + 53, 32, 223, 247, 53, 32, 219, 186, 53, 32, 252, 141, 53, 32, 229, 78, + 53, 32, 252, 227, 53, 32, 224, 235, 53, 32, 227, 202, 53, 32, 227, 10, + 53, 32, 245, 133, 53, 32, 252, 37, 53, 32, 251, 127, 53, 32, 252, 58, 53, + 32, 233, 114, 53, 32, 218, 255, 53, 32, 250, 214, 53, 32, 218, 192, 53, + 32, 248, 199, 53, 32, 219, 86, 53, 32, 244, 62, 53, 32, 235, 2, 53, 32, + 244, 213, 53, 32, 233, 108, 53, 32, 224, 54, 53, 32, 224, 192, 222, 134, + 252, 67, 53, 32, 227, 242, 53, 32, 252, 43, 53, 32, 218, 166, 53, 32, + 246, 3, 53, 32, 235, 119, 53, 32, 222, 117, 235, 119, 53, 32, 235, 116, + 53, 32, 224, 8, 53, 32, 235, 120, 53, 32, 218, 194, 53, 32, 245, 142, 53, + 32, 247, 2, 53, 32, 243, 159, 53, 32, 245, 106, 53, 32, 242, 188, 53, 32, + 252, 35, 53, 32, 222, 122, 53, 32, 243, 200, 53, 32, 245, 195, 53, 32, + 226, 172, 218, 192, 53, 32, 251, 121, 53, 32, 244, 111, 53, 32, 245, 176, + 53, 32, 252, 67, 53, 32, 226, 151, 53, 32, 249, 80, 53, 32, 218, 212, 53, + 32, 243, 139, 53, 32, 218, 20, 53, 32, 233, 163, 53, 32, 252, 53, 53, 32, + 246, 202, 53, 32, 245, 98, 53, 32, 221, 76, 53, 32, 247, 115, 53, 32, + 227, 228, 53, 32, 231, 185, 53, 32, 246, 103, 53, 32, 221, 121, 53, 32, + 247, 123, 53, 32, 220, 234, 53, 32, 245, 143, 98, 249, 46, 126, 42, 199, + 227, 109, 98, 249, 46, 126, 71, 199, 56, 98, 249, 46, 126, 42, 199, 233, + 193, 25, 227, 109, 98, 249, 46, 126, 71, 199, 233, 193, 25, 56, 98, 249, + 46, 126, 245, 90, 223, 47, 98, 249, 46, 126, 223, 48, 245, 97, 50, 98, + 249, 46, 126, 223, 48, 245, 97, 56, 98, 249, 46, 126, 223, 48, 245, 97, + 235, 115, 98, 249, 46, 126, 223, 48, 245, 97, 220, 60, 235, 115, 98, 249, + 46, 126, 223, 48, 245, 97, 220, 60, 227, 109, 98, 249, 46, 126, 223, 48, + 245, 97, 234, 237, 235, 115, 98, 249, 46, 126, 230, 76, 98, 223, 254, 98, + 250, 168, 98, 245, 90, 223, 136, 248, 196, 78, 237, 118, 237, 209, 223, + 159, 100, 98, 237, 138, 78, 98, 250, 194, 78, 98, 54, 217, 84, 42, 254, + 120, 115, 45, 254, 120, 115, 42, 51, 254, 120, 115, 45, 51, 254, 120, + 115, 42, 250, 124, 115, 45, 250, 124, 115, 42, 67, 250, 124, 115, 45, 67, + 250, 124, 115, 42, 84, 235, 91, 115, 45, 84, 235, 91, 115, 229, 14, 78, + 244, 163, 78, 42, 221, 114, 224, 236, 115, 45, 221, 114, 224, 236, 115, + 42, 67, 235, 91, 115, 45, 67, 235, 91, 115, 42, 67, 221, 114, 224, 236, + 115, 45, 67, 221, 114, 224, 236, 115, 42, 67, 40, 115, 45, 67, 40, 115, + 218, 237, 249, 146, 210, 51, 228, 236, 228, 69, 78, 51, 228, 236, 228, + 69, 78, 109, 51, 228, 236, 228, 69, 78, 229, 14, 164, 246, 3, 243, 185, + 231, 107, 107, 243, 185, 231, 107, 103, 243, 185, 231, 107, 160, 243, + 185, 231, 107, 154, 243, 185, 231, 107, 174, 243, 185, 231, 107, 182, + 243, 185, 231, 107, 191, 243, 185, 231, 107, 185, 243, 185, 231, 107, + 190, 98, 235, 83, 145, 78, 98, 227, 88, 145, 78, 98, 249, 52, 145, 78, + 98, 246, 177, 145, 78, 22, 224, 109, 61, 145, 78, 22, 51, 61, 145, 78, + 218, 235, 249, 146, 69, 236, 232, 227, 182, 78, 69, 236, 232, 227, 182, + 2, 219, 70, 224, 9, 78, 69, 236, 232, 227, 182, 164, 220, 60, 243, 194, + 69, 236, 232, 227, 182, 2, 219, 70, 224, 9, 164, 220, 60, 243, 194, 69, + 236, 232, 227, 182, 164, 234, 237, 243, 194, 34, 229, 14, 78, 98, 183, + 235, 44, 245, 225, 225, 55, 100, 243, 185, 231, 107, 222, 65, 243, 185, + 231, 107, 220, 219, 243, 185, 231, 107, 221, 245, 69, 98, 237, 138, 78, + 234, 52, 78, 229, 225, 254, 143, 78, 98, 41, 237, 211, 98, 144, 245, 188, + 223, 254, 136, 1, 3, 60, 136, 1, 60, 136, 1, 3, 72, 136, 1, 72, 136, 1, + 3, 68, 136, 1, 68, 136, 1, 3, 73, 136, 1, 73, 136, 1, 3, 74, 136, 1, 74, + 136, 1, 175, 136, 1, 245, 0, 136, 1, 236, 113, 136, 1, 244, 103, 136, 1, + 236, 7, 136, 1, 244, 17, 136, 1, 236, 184, 136, 1, 244, 191, 136, 1, 236, + 57, 136, 1, 244, 68, 136, 1, 226, 177, 136, 1, 217, 114, 136, 1, 224, + 140, 136, 1, 217, 42, 136, 1, 223, 103, 136, 1, 217, 13, 136, 1, 226, 94, + 136, 1, 217, 92, 136, 1, 224, 26, 136, 1, 217, 21, 136, 1, 222, 155, 136, + 1, 249, 207, 136, 1, 221, 205, 136, 1, 249, 15, 136, 1, 3, 221, 0, 136, + 1, 221, 0, 136, 1, 247, 111, 136, 1, 222, 87, 136, 1, 249, 92, 136, 1, + 101, 136, 1, 248, 167, 136, 1, 208, 136, 1, 232, 62, 136, 1, 231, 144, + 136, 1, 232, 141, 136, 1, 231, 204, 136, 1, 155, 136, 1, 252, 237, 136, + 1, 187, 136, 1, 243, 112, 136, 1, 252, 84, 136, 1, 229, 108, 136, 1, 242, + 173, 136, 1, 251, 248, 136, 1, 228, 202, 136, 1, 243, 162, 136, 1, 252, + 144, 136, 1, 229, 198, 136, 1, 243, 4, 136, 1, 252, 41, 136, 1, 229, 37, + 136, 1, 196, 136, 1, 233, 196, 136, 1, 233, 99, 136, 1, 234, 25, 136, 1, + 233, 136, 136, 1, 3, 184, 136, 1, 184, 136, 1, 3, 217, 200, 136, 1, 217, + 200, 136, 1, 3, 217, 231, 136, 1, 217, 231, 136, 1, 203, 136, 1, 227, + 147, 136, 1, 227, 22, 136, 1, 227, 216, 136, 1, 227, 75, 136, 1, 3, 219, + 7, 136, 1, 219, 7, 136, 1, 218, 204, 136, 1, 218, 227, 136, 1, 218, 187, + 136, 1, 207, 136, 1, 219, 56, 136, 1, 3, 175, 136, 1, 3, 236, 184, 36, + 236, 202, 219, 70, 224, 9, 78, 36, 236, 202, 225, 72, 224, 9, 78, 236, + 202, 219, 70, 224, 9, 78, 236, 202, 225, 72, 224, 9, 78, 136, 237, 138, + 78, 136, 219, 70, 237, 138, 78, 136, 248, 234, 217, 213, 236, 202, 51, + 242, 121, 52, 1, 3, 60, 52, 1, 60, 52, 1, 3, 72, 52, 1, 72, 52, 1, 3, 68, + 52, 1, 68, 52, 1, 3, 73, 52, 1, 73, 52, 1, 3, 74, 52, 1, 74, 52, 1, 175, + 52, 1, 245, 0, 52, 1, 236, 113, 52, 1, 244, 103, 52, 1, 236, 7, 52, 1, + 244, 17, 52, 1, 236, 184, 52, 1, 244, 191, 52, 1, 236, 57, 52, 1, 244, + 68, 52, 1, 226, 177, 52, 1, 217, 114, 52, 1, 224, 140, 52, 1, 217, 42, + 52, 1, 223, 103, 52, 1, 217, 13, 52, 1, 226, 94, 52, 1, 217, 92, 52, 1, + 224, 26, 52, 1, 217, 21, 52, 1, 222, 155, 52, 1, 249, 207, 52, 1, 221, + 205, 52, 1, 249, 15, 52, 1, 3, 221, 0, 52, 1, 221, 0, 52, 1, 247, 111, + 52, 1, 222, 87, 52, 1, 249, 92, 52, 1, 101, 52, 1, 248, 167, 52, 1, 208, + 52, 1, 232, 62, 52, 1, 231, 144, 52, 1, 232, 141, 52, 1, 231, 204, 52, 1, + 155, 52, 1, 252, 237, 52, 1, 187, 52, 1, 243, 112, 52, 1, 252, 84, 52, 1, + 229, 108, 52, 1, 242, 173, 52, 1, 251, 248, 52, 1, 228, 202, 52, 1, 243, + 162, 52, 1, 252, 144, 52, 1, 229, 198, 52, 1, 243, 4, 52, 1, 252, 41, 52, + 1, 229, 37, 52, 1, 196, 52, 1, 233, 196, 52, 1, 233, 99, 52, 1, 234, 25, + 52, 1, 233, 136, 52, 1, 3, 184, 52, 1, 184, 52, 1, 3, 217, 200, 52, 1, + 217, 200, 52, 1, 3, 217, 231, 52, 1, 217, 231, 52, 1, 203, 52, 1, 227, + 147, 52, 1, 227, 22, 52, 1, 227, 216, 52, 1, 227, 75, 52, 1, 3, 219, 7, + 52, 1, 219, 7, 52, 1, 218, 204, 52, 1, 218, 227, 52, 1, 218, 187, 52, 1, + 207, 52, 1, 219, 56, 52, 1, 3, 175, 52, 1, 3, 236, 184, 52, 1, 219, 189, + 52, 1, 219, 94, 52, 1, 219, 165, 52, 1, 219, 72, 52, 233, 193, 248, 145, + 236, 202, 228, 223, 224, 9, 78, 52, 237, 138, 78, 52, 219, 70, 237, 138, + 78, 52, 248, 234, 236, 30, 200, 1, 253, 204, 200, 1, 230, 59, 200, 1, + 189, 200, 1, 246, 74, 200, 1, 250, 46, 200, 1, 222, 201, 200, 1, 207, + 200, 1, 153, 200, 1, 245, 67, 200, 1, 237, 17, 200, 1, 243, 225, 200, 1, + 237, 126, 200, 1, 228, 163, 200, 1, 218, 151, 200, 1, 217, 81, 200, 1, + 251, 70, 200, 1, 225, 27, 200, 1, 152, 200, 1, 217, 157, 200, 1, 251, + 202, 200, 1, 198, 200, 1, 60, 200, 1, 74, 200, 1, 73, 200, 1, 246, 239, + 200, 1, 254, 196, 200, 1, 246, 237, 200, 1, 253, 232, 200, 1, 230, 86, + 200, 1, 254, 131, 200, 1, 246, 197, 200, 1, 254, 123, 200, 1, 246, 185, + 200, 1, 246, 148, 200, 1, 72, 200, 1, 68, 200, 1, 237, 137, 200, 1, 216, + 216, 200, 1, 232, 117, 200, 1, 244, 72, 200, 1, 238, 0, 22, 1, 236, 86, + 22, 1, 223, 211, 22, 1, 236, 79, 22, 1, 232, 55, 22, 1, 232, 53, 22, 1, + 232, 52, 22, 1, 221, 192, 22, 1, 223, 200, 22, 1, 227, 140, 22, 1, 227, + 135, 22, 1, 227, 132, 22, 1, 227, 125, 22, 1, 227, 120, 22, 1, 227, 115, + 22, 1, 227, 126, 22, 1, 227, 138, 22, 1, 233, 187, 22, 1, 229, 99, 22, 1, + 223, 208, 22, 1, 229, 88, 22, 1, 224, 104, 22, 1, 223, 205, 22, 1, 238, + 22, 22, 1, 250, 230, 22, 1, 223, 215, 22, 1, 251, 29, 22, 1, 236, 128, + 22, 1, 222, 0, 22, 1, 229, 127, 22, 1, 243, 106, 22, 1, 60, 22, 1, 254, + 234, 22, 1, 184, 22, 1, 218, 65, 22, 1, 246, 168, 22, 1, 73, 22, 1, 218, + 16, 22, 1, 218, 25, 22, 1, 74, 22, 1, 219, 7, 22, 1, 219, 4, 22, 1, 230, + 167, 22, 1, 217, 231, 22, 1, 68, 22, 1, 218, 219, 22, 1, 218, 227, 22, 1, + 218, 204, 22, 1, 217, 200, 22, 1, 246, 115, 22, 1, 217, 250, 22, 1, 72, + 22, 245, 185, 22, 1, 223, 209, 22, 1, 232, 45, 22, 1, 232, 47, 22, 1, + 232, 50, 22, 1, 227, 133, 22, 1, 227, 114, 22, 1, 227, 122, 22, 1, 227, + 127, 22, 1, 227, 112, 22, 1, 233, 180, 22, 1, 233, 177, 22, 1, 233, 181, + 22, 1, 236, 220, 22, 1, 229, 94, 22, 1, 229, 80, 22, 1, 229, 86, 22, 1, + 229, 83, 22, 1, 229, 97, 22, 1, 229, 81, 22, 1, 236, 218, 22, 1, 236, + 216, 22, 1, 224, 97, 22, 1, 224, 95, 22, 1, 224, 87, 22, 1, 224, 92, 22, + 1, 224, 102, 22, 1, 230, 1, 22, 1, 223, 212, 22, 1, 218, 6, 22, 1, 218, + 2, 22, 1, 218, 3, 22, 1, 236, 219, 22, 1, 223, 213, 22, 1, 218, 12, 22, + 1, 217, 225, 22, 1, 217, 224, 22, 1, 217, 227, 22, 1, 217, 191, 22, 1, + 217, 192, 22, 1, 217, 195, 22, 1, 254, 60, 22, 1, 254, 54, 98, 254, 112, + 235, 33, 78, 98, 254, 112, 227, 160, 78, 98, 254, 112, 131, 78, 98, 254, + 112, 124, 78, 98, 254, 112, 148, 78, 98, 254, 112, 245, 116, 78, 98, 254, + 112, 221, 120, 78, 98, 254, 112, 233, 193, 78, 98, 254, 112, 252, 29, 78, + 98, 254, 112, 245, 178, 78, 98, 254, 112, 226, 90, 78, 98, 254, 112, 221, + 252, 78, 98, 254, 112, 245, 110, 78, 98, 254, 112, 243, 152, 78, 98, 254, + 112, 247, 9, 78, 98, 254, 112, 234, 87, 78, 200, 1, 251, 248, 200, 1, + 217, 42, 200, 1, 237, 98, 200, 1, 244, 17, 200, 1, 246, 250, 200, 1, 246, + 183, 200, 1, 230, 127, 200, 1, 230, 131, 200, 1, 237, 156, 200, 1, 254, + 114, 200, 1, 237, 198, 200, 1, 220, 68, 200, 1, 237, 238, 200, 1, 232, + 101, 200, 1, 254, 190, 200, 1, 253, 228, 200, 1, 254, 140, 200, 1, 230, + 146, 200, 1, 230, 133, 200, 1, 237, 195, 200, 39, 1, 230, 59, 200, 39, 1, + 222, 201, 200, 39, 1, 237, 17, 200, 39, 1, 243, 225, 9, 214, 222, 201, 9, + 214, 218, 213, 9, 214, 218, 131, 9, 214, 251, 214, 9, 214, 223, 37, 9, + 214, 242, 111, 9, 214, 242, 115, 9, 214, 242, 179, 9, 214, 242, 112, 9, + 214, 222, 204, 9, 214, 242, 114, 9, 214, 242, 110, 9, 214, 242, 177, 9, + 214, 242, 113, 9, 214, 242, 109, 9, 214, 207, 9, 214, 243, 225, 9, 214, + 198, 9, 214, 230, 59, 9, 214, 224, 0, 9, 214, 250, 46, 9, 214, 242, 116, + 9, 214, 243, 122, 9, 214, 222, 213, 9, 214, 223, 22, 9, 214, 223, 168, 9, + 214, 225, 32, 9, 214, 229, 200, 9, 214, 228, 165, 9, 214, 221, 140, 9, + 214, 222, 203, 9, 214, 223, 30, 9, 214, 242, 123, 9, 214, 242, 108, 9, + 214, 229, 143, 9, 214, 228, 163, 52, 1, 3, 236, 7, 52, 1, 3, 224, 140, + 52, 1, 3, 223, 103, 52, 1, 3, 101, 52, 1, 3, 231, 144, 52, 1, 3, 155, 52, + 1, 3, 243, 112, 52, 1, 3, 242, 173, 52, 1, 3, 243, 162, 52, 1, 3, 243, 4, + 52, 1, 3, 233, 99, 52, 1, 3, 203, 52, 1, 3, 227, 147, 52, 1, 3, 227, 22, + 52, 1, 3, 227, 216, 52, 1, 3, 227, 75, 82, 22, 236, 86, 82, 22, 232, 55, + 82, 22, 221, 192, 82, 22, 227, 140, 82, 22, 233, 187, 82, 22, 229, 99, + 82, 22, 224, 104, 82, 22, 238, 22, 82, 22, 250, 230, 82, 22, 251, 29, 82, + 22, 236, 128, 82, 22, 222, 0, 82, 22, 229, 127, 82, 22, 243, 106, 82, 22, + 236, 87, 60, 82, 22, 232, 56, 60, 82, 22, 221, 193, 60, 82, 22, 227, 141, + 60, 82, 22, 233, 188, 60, 82, 22, 229, 100, 60, 82, 22, 224, 105, 60, 82, + 22, 238, 23, 60, 82, 22, 250, 231, 60, 82, 22, 251, 30, 60, 82, 22, 236, + 129, 60, 82, 22, 222, 1, 60, 82, 22, 229, 128, 60, 82, 22, 243, 107, 60, + 82, 22, 250, 231, 68, 82, 236, 34, 126, 230, 156, 82, 236, 34, 126, 142, + 242, 173, 82, 138, 107, 82, 138, 103, 82, 138, 160, 82, 138, 154, 82, + 138, 174, 82, 138, 182, 82, 138, 191, 82, 138, 185, 82, 138, 190, 82, + 138, 222, 65, 82, 138, 233, 117, 82, 138, 245, 179, 82, 138, 218, 240, + 82, 138, 218, 179, 82, 138, 233, 238, 82, 138, 247, 8, 82, 138, 223, 68, + 82, 138, 223, 139, 82, 138, 243, 168, 82, 138, 224, 23, 82, 138, 232, + 218, 82, 138, 223, 248, 82, 138, 245, 184, 82, 138, 250, 154, 82, 138, + 235, 181, 82, 138, 227, 178, 82, 138, 251, 159, 82, 138, 223, 106, 82, + 138, 223, 56, 82, 138, 246, 176, 82, 138, 227, 170, 82, 138, 254, 153, + 82, 138, 245, 208, 82, 138, 227, 168, 82, 138, 225, 73, 82, 138, 227, + 215, 34, 138, 228, 81, 34, 138, 236, 103, 34, 138, 226, 107, 34, 138, + 236, 30, 34, 54, 222, 66, 230, 139, 84, 223, 227, 34, 54, 220, 220, 230, + 139, 84, 223, 227, 34, 54, 221, 246, 230, 139, 84, 223, 227, 34, 54, 245, + 120, 230, 139, 84, 223, 227, 34, 54, 245, 197, 230, 139, 84, 223, 227, + 34, 54, 224, 70, 230, 139, 84, 223, 227, 34, 54, 225, 39, 230, 139, 84, + 223, 227, 34, 54, 246, 228, 230, 139, 84, 223, 227, 229, 221, 55, 34, 54, + 220, 220, 107, 34, 54, 220, 220, 103, 34, 54, 220, 220, 160, 34, 54, 220, + 220, 154, 34, 54, 220, 220, 174, 34, 54, 220, 220, 182, 34, 54, 220, 220, + 191, 34, 54, 220, 220, 185, 34, 54, 220, 220, 190, 34, 54, 221, 245, 34, + 54, 221, 246, 107, 34, 54, 221, 246, 103, 34, 54, 221, 246, 160, 34, 54, + 221, 246, 154, 34, 54, 221, 246, 174, 34, 22, 236, 86, 34, 22, 232, 55, + 34, 22, 221, 192, 34, 22, 227, 140, 34, 22, 233, 187, 34, 22, 229, 99, + 34, 22, 224, 104, 34, 22, 238, 22, 34, 22, 250, 230, 34, 22, 251, 29, 34, + 22, 236, 128, 34, 22, 222, 0, 34, 22, 229, 127, 34, 22, 243, 106, 34, 22, + 236, 87, 60, 34, 22, 232, 56, 60, 34, 22, 221, 193, 60, 34, 22, 227, 141, + 60, 34, 22, 233, 188, 60, 34, 22, 229, 100, 60, 34, 22, 224, 105, 60, 34, + 22, 238, 23, 60, 34, 22, 250, 231, 60, 34, 22, 251, 30, 60, 34, 22, 236, + 129, 60, 34, 22, 222, 1, 60, 34, 22, 229, 128, 60, 34, 22, 243, 107, 60, + 34, 236, 34, 126, 251, 61, 34, 236, 34, 126, 237, 40, 34, 22, 238, 23, + 68, 236, 34, 223, 159, 100, 34, 138, 107, 34, 138, 103, 34, 138, 160, 34, + 138, 154, 34, 138, 174, 34, 138, 182, 34, 138, 191, 34, 138, 185, 34, + 138, 190, 34, 138, 222, 65, 34, 138, 233, 117, 34, 138, 245, 179, 34, + 138, 218, 240, 34, 138, 218, 179, 34, 138, 233, 238, 34, 138, 247, 8, 34, + 138, 223, 68, 34, 138, 223, 139, 34, 138, 243, 168, 34, 138, 224, 23, 34, + 138, 232, 218, 34, 138, 223, 248, 34, 138, 245, 184, 34, 138, 250, 154, + 34, 138, 235, 181, 34, 138, 226, 88, 34, 138, 234, 89, 34, 138, 245, 216, + 34, 138, 223, 79, 34, 138, 246, 97, 34, 138, 228, 233, 34, 138, 253, 236, + 34, 138, 237, 139, 34, 138, 227, 168, 34, 138, 250, 127, 34, 138, 250, + 118, 34, 138, 243, 99, 34, 138, 251, 84, 34, 138, 234, 239, 34, 138, 235, + 115, 34, 138, 227, 109, 34, 138, 234, 19, 34, 138, 227, 189, 34, 138, + 223, 106, 34, 138, 223, 56, 34, 138, 246, 176, 34, 138, 227, 170, 34, + 138, 254, 153, 34, 138, 232, 42, 34, 54, 221, 246, 182, 34, 54, 221, 246, + 191, 34, 54, 221, 246, 185, 34, 54, 221, 246, 190, 34, 54, 245, 119, 34, + 54, 245, 120, 107, 34, 54, 245, 120, 103, 34, 54, 245, 120, 160, 34, 54, + 245, 120, 154, 34, 54, 245, 120, 174, 34, 54, 245, 120, 182, 34, 54, 245, + 120, 191, 34, 54, 245, 120, 185, 34, 54, 245, 120, 190, 34, 54, 245, 196, + 98, 183, 16, 35, 237, 119, 98, 183, 16, 35, 245, 227, 98, 183, 16, 35, + 234, 69, 98, 183, 16, 35, 254, 71, 98, 183, 16, 35, 234, 45, 98, 183, 16, + 35, 237, 38, 98, 183, 16, 35, 237, 39, 98, 183, 16, 35, 253, 229, 98, + 183, 16, 35, 225, 53, 98, 183, 16, 35, 230, 170, 98, 183, 16, 35, 231, + 175, 98, 183, 16, 35, 249, 87, 40, 243, 122, 40, 246, 144, 40, 246, 105, + 235, 49, 235, 66, 55, 34, 52, 60, 34, 52, 72, 34, 52, 68, 34, 52, 73, 34, + 52, 74, 34, 52, 175, 34, 52, 236, 113, 34, 52, 236, 7, 34, 52, 236, 184, + 34, 52, 236, 57, 34, 52, 226, 177, 34, 52, 224, 140, 34, 52, 223, 103, + 34, 52, 226, 94, 34, 52, 224, 26, 34, 52, 222, 155, 34, 52, 221, 205, 34, + 52, 221, 0, 34, 52, 222, 87, 34, 52, 101, 34, 52, 208, 34, 52, 232, 62, + 34, 52, 231, 144, 34, 52, 232, 141, 34, 52, 231, 204, 34, 52, 155, 34, + 52, 243, 112, 34, 52, 242, 173, 34, 52, 243, 162, 34, 52, 243, 4, 34, 52, + 196, 34, 52, 233, 196, 34, 52, 233, 99, 34, 52, 234, 25, 34, 52, 233, + 136, 34, 52, 184, 34, 52, 217, 200, 34, 52, 217, 231, 34, 52, 203, 34, + 52, 227, 147, 34, 52, 227, 22, 34, 52, 227, 216, 34, 52, 227, 75, 34, 52, + 219, 7, 34, 52, 218, 204, 34, 52, 218, 227, 34, 52, 218, 187, 40, 254, + 91, 40, 254, 15, 40, 254, 108, 40, 255, 16, 40, 237, 199, 40, 237, 172, + 40, 220, 66, 40, 246, 124, 40, 246, 248, 40, 230, 130, 40, 230, 125, 40, + 236, 242, 40, 236, 214, 40, 236, 212, 40, 244, 217, 40, 244, 225, 40, + 244, 94, 40, 244, 90, 40, 235, 203, 40, 244, 84, 40, 236, 97, 40, 236, + 96, 40, 236, 95, 40, 236, 94, 40, 243, 251, 40, 243, 250, 40, 235, 244, + 40, 235, 246, 40, 236, 180, 40, 236, 32, 40, 236, 39, 40, 226, 162, 40, + 226, 136, 40, 224, 85, 40, 225, 58, 40, 225, 57, 40, 249, 204, 40, 249, + 45, 40, 248, 146, 40, 221, 134, 40, 232, 214, 40, 231, 176, 40, 243, 199, + 40, 230, 40, 40, 230, 39, 40, 252, 235, 40, 229, 105, 40, 229, 74, 40, + 229, 75, 40, 252, 65, 40, 242, 172, 40, 242, 168, 40, 251, 223, 40, 242, + 155, 40, 243, 143, 40, 229, 150, 40, 229, 178, 40, 243, 129, 40, 229, + 176, 40, 229, 189, 40, 252, 133, 40, 229, 27, 40, 252, 31, 40, 242, 249, + 40, 229, 22, 40, 242, 245, 40, 242, 246, 40, 234, 98, 40, 234, 95, 40, + 234, 102, 40, 234, 59, 40, 234, 80, 40, 233, 167, 40, 233, 149, 40, 233, + 148, 40, 234, 9, 40, 234, 7, 40, 234, 10, 40, 218, 75, 40, 218, 73, 40, + 217, 190, 40, 227, 86, 40, 227, 90, 40, 227, 3, 40, 226, 254, 40, 227, + 188, 40, 227, 186, 40, 218, 239, 98, 183, 16, 35, 242, 184, 217, 84, 98, + 183, 16, 35, 242, 184, 107, 98, 183, 16, 35, 242, 184, 103, 98, 183, 16, + 35, 242, 184, 160, 98, 183, 16, 35, 242, 184, 154, 98, 183, 16, 35, 242, + 184, 174, 98, 183, 16, 35, 242, 184, 182, 98, 183, 16, 35, 242, 184, 191, + 98, 183, 16, 35, 242, 184, 185, 98, 183, 16, 35, 242, 184, 190, 98, 183, + 16, 35, 242, 184, 222, 65, 98, 183, 16, 35, 242, 184, 246, 211, 98, 183, + 16, 35, 242, 184, 220, 221, 98, 183, 16, 35, 242, 184, 221, 247, 98, 183, + 16, 35, 242, 184, 245, 111, 98, 183, 16, 35, 242, 184, 245, 200, 98, 183, + 16, 35, 242, 184, 224, 77, 98, 183, 16, 35, 242, 184, 225, 41, 98, 183, + 16, 35, 242, 184, 246, 233, 98, 183, 16, 35, 242, 184, 232, 29, 98, 183, + 16, 35, 242, 184, 220, 219, 98, 183, 16, 35, 242, 184, 220, 213, 98, 183, + 16, 35, 242, 184, 220, 209, 98, 183, 16, 35, 242, 184, 220, 210, 98, 183, + 16, 35, 242, 184, 220, 215, 40, 242, 178, 40, 249, 207, 40, 253, 232, 40, + 135, 40, 230, 79, 40, 229, 201, 40, 248, 169, 40, 248, 170, 223, 226, 40, + 248, 170, 250, 88, 40, 237, 137, 40, 246, 147, 232, 219, 243, 144, 40, + 246, 147, 232, 219, 222, 221, 40, 246, 147, 232, 219, 222, 132, 40, 246, + 147, 232, 219, 234, 6, 40, 250, 120, 40, 230, 44, 254, 133, 40, 208, 40, + 233, 100, 60, 40, 196, 40, 175, 40, 236, 187, 40, 234, 41, 40, 244, 205, + 40, 251, 161, 40, 236, 186, 40, 229, 144, 40, 232, 119, 40, 233, 100, + 246, 74, 40, 233, 100, 245, 67, 40, 233, 230, 40, 236, 151, 40, 242, 116, + 40, 236, 115, 40, 233, 198, 40, 244, 105, 40, 221, 207, 40, 233, 100, + 153, 40, 233, 143, 40, 248, 177, 40, 236, 68, 40, 245, 141, 40, 231, 219, + 40, 233, 100, 189, 40, 233, 140, 40, 250, 183, 40, 236, 62, 40, 233, 141, + 223, 226, 40, 250, 184, 223, 226, 40, 234, 187, 223, 226, 40, 236, 63, + 223, 226, 40, 233, 141, 250, 88, 40, 250, 184, 250, 88, 40, 234, 187, + 250, 88, 40, 236, 63, 250, 88, 40, 234, 187, 104, 198, 40, 234, 187, 104, + 226, 235, 223, 226, 40, 187, 40, 236, 26, 40, 233, 102, 40, 244, 48, 40, + 227, 252, 40, 227, 253, 104, 198, 40, 227, 253, 104, 226, 235, 223, 226, + 40, 228, 213, 40, 231, 148, 40, 233, 100, 198, 40, 233, 101, 40, 228, + 183, 40, 231, 87, 40, 233, 100, 216, 216, 40, 233, 52, 40, 235, 237, 40, + 233, 53, 234, 9, 40, 228, 182, 40, 231, 86, 40, 233, 100, 219, 40, 40, + 233, 50, 40, 235, 235, 40, 233, 51, 234, 9, 40, 237, 18, 230, 159, 40, + 234, 187, 230, 159, 40, 254, 140, 40, 252, 20, 40, 251, 115, 40, 251, + 100, 40, 251, 203, 104, 236, 151, 40, 250, 182, 40, 249, 134, 40, 243, + 237, 40, 155, 40, 242, 179, 40, 237, 223, 40, 236, 75, 40, 236, 63, 251, + 142, 40, 236, 9, 40, 235, 15, 40, 235, 14, 40, 235, 8, 40, 234, 199, 40, + 234, 42, 224, 43, 40, 233, 166, 40, 233, 129, 40, 229, 142, 40, 229, 40, + 40, 229, 5, 40, 229, 3, 40, 223, 220, 40, 223, 41, 40, 218, 228, 40, 220, + 11, 104, 189, 40, 112, 104, 189, 98, 183, 16, 35, 249, 137, 107, 98, 183, + 16, 35, 249, 137, 103, 98, 183, 16, 35, 249, 137, 160, 98, 183, 16, 35, + 249, 137, 154, 98, 183, 16, 35, 249, 137, 174, 98, 183, 16, 35, 249, 137, + 182, 98, 183, 16, 35, 249, 137, 191, 98, 183, 16, 35, 249, 137, 185, 98, + 183, 16, 35, 249, 137, 190, 98, 183, 16, 35, 249, 137, 222, 65, 98, 183, + 16, 35, 249, 137, 246, 211, 98, 183, 16, 35, 249, 137, 220, 221, 98, 183, + 16, 35, 249, 137, 221, 247, 98, 183, 16, 35, 249, 137, 245, 111, 98, 183, + 16, 35, 249, 137, 245, 200, 98, 183, 16, 35, 249, 137, 224, 77, 98, 183, + 16, 35, 249, 137, 225, 41, 98, 183, 16, 35, 249, 137, 246, 233, 98, 183, + 16, 35, 249, 137, 232, 29, 98, 183, 16, 35, 249, 137, 220, 219, 98, 183, + 16, 35, 249, 137, 220, 213, 98, 183, 16, 35, 249, 137, 220, 209, 98, 183, + 16, 35, 249, 137, 220, 210, 98, 183, 16, 35, 249, 137, 220, 215, 98, 183, + 16, 35, 249, 137, 220, 216, 98, 183, 16, 35, 249, 137, 220, 211, 98, 183, + 16, 35, 249, 137, 220, 212, 98, 183, 16, 35, 249, 137, 220, 218, 98, 183, + 16, 35, 249, 137, 220, 214, 98, 183, 16, 35, 249, 137, 221, 245, 98, 183, + 16, 35, 249, 137, 221, 244, 40, 244, 240, 205, 35, 222, 23, 250, 108, + 243, 151, 205, 35, 222, 23, 227, 213, 247, 8, 205, 35, 248, 244, 253, + 245, 222, 23, 252, 130, 205, 35, 217, 211, 245, 137, 205, 35, 219, 1, + 205, 35, 250, 155, 205, 35, 222, 23, 254, 30, 205, 35, 242, 253, 221, + 136, 205, 35, 3, 222, 120, 205, 35, 221, 100, 205, 35, 229, 196, 205, 35, + 223, 158, 205, 35, 245, 218, 205, 35, 244, 32, 229, 15, 205, 35, 233, + 132, 205, 35, 246, 175, 205, 35, 245, 138, 205, 35, 218, 172, 230, 139, + 222, 23, 249, 88, 205, 35, 254, 75, 205, 35, 250, 139, 205, 35, 252, 59, + 221, 224, 205, 35, 244, 46, 205, 35, 223, 237, 254, 90, 205, 35, 227, + 162, 205, 35, 237, 194, 205, 35, 244, 32, 222, 120, 205, 35, 233, 106, + 250, 122, 205, 35, 244, 32, 228, 240, 205, 35, 222, 23, 255, 4, 218, 240, + 205, 35, 222, 23, 250, 201, 245, 179, 205, 35, 237, 206, 205, 35, 247, + 90, 205, 35, 227, 165, 205, 35, 244, 32, 229, 10, 205, 35, 228, 227, 205, + 35, 249, 151, 117, 222, 23, 235, 58, 205, 35, 222, 23, 245, 246, 205, 35, + 230, 109, 205, 35, 230, 173, 205, 35, 249, 66, 205, 35, 249, 84, 205, 35, + 237, 217, 205, 35, 252, 11, 205, 35, 250, 170, 199, 234, 12, 205, 35, + 244, 212, 221, 136, 205, 35, 228, 187, 220, 54, 205, 35, 230, 108, 205, + 35, 222, 23, 218, 221, 205, 35, 227, 156, 205, 35, 222, 23, 251, 121, + 205, 35, 222, 23, 254, 26, 221, 221, 205, 35, 222, 23, 236, 181, 223, + 141, 233, 107, 205, 35, 249, 43, 205, 35, 222, 23, 234, 61, 234, 99, 205, + 35, 255, 5, 205, 35, 222, 23, 218, 252, 205, 35, 222, 23, 244, 177, 218, + 194, 205, 35, 222, 23, 237, 44, 235, 165, 205, 35, 248, 200, 205, 35, + 235, 50, 205, 35, 237, 197, 221, 59, 205, 35, 3, 228, 240, 205, 35, 254, + 210, 250, 162, 205, 35, 252, 132, 250, 162, 8, 4, 237, 140, 8, 4, 237, + 134, 8, 4, 72, 8, 4, 237, 159, 8, 4, 238, 24, 8, 4, 238, 7, 8, 4, 238, + 26, 8, 4, 238, 25, 8, 4, 253, 244, 8, 4, 253, 214, 8, 4, 60, 8, 4, 254, + 92, 8, 4, 220, 64, 8, 4, 220, 67, 8, 4, 220, 65, 8, 4, 230, 92, 8, 4, + 230, 68, 8, 4, 74, 8, 4, 230, 120, 8, 4, 246, 98, 8, 4, 73, 8, 4, 218, + 165, 8, 4, 252, 60, 8, 4, 252, 57, 8, 4, 252, 84, 8, 4, 252, 68, 8, 4, + 252, 78, 8, 4, 252, 77, 8, 4, 252, 80, 8, 4, 252, 79, 8, 4, 252, 184, 8, + 4, 252, 180, 8, 4, 252, 237, 8, 4, 252, 202, 8, 4, 251, 231, 8, 4, 251, + 235, 8, 4, 251, 232, 8, 4, 252, 30, 8, 4, 252, 21, 8, 4, 252, 41, 8, 4, + 252, 32, 8, 4, 252, 97, 8, 4, 252, 144, 8, 4, 252, 109, 8, 4, 251, 221, + 8, 4, 251, 219, 8, 4, 251, 248, 8, 4, 251, 230, 8, 4, 251, 224, 8, 4, + 251, 228, 8, 4, 251, 207, 8, 4, 251, 206, 8, 4, 251, 212, 8, 4, 251, 210, + 8, 4, 251, 208, 8, 4, 251, 209, 8, 4, 229, 64, 8, 4, 229, 60, 8, 4, 229, + 108, 8, 4, 229, 70, 8, 4, 229, 79, 8, 4, 229, 103, 8, 4, 229, 101, 8, 4, + 229, 215, 8, 4, 229, 206, 8, 4, 187, 8, 4, 229, 246, 8, 4, 228, 192, 8, + 4, 228, 194, 8, 4, 228, 193, 8, 4, 229, 12, 8, 4, 229, 8, 8, 4, 229, 37, + 8, 4, 229, 19, 8, 4, 228, 185, 8, 4, 228, 184, 8, 4, 228, 202, 8, 4, 228, + 191, 8, 4, 228, 188, 8, 4, 228, 190, 8, 4, 228, 167, 8, 4, 228, 166, 8, + 4, 228, 171, 8, 4, 228, 170, 8, 4, 228, 168, 8, 4, 228, 169, 8, 4, 252, + 165, 8, 4, 252, 164, 8, 4, 252, 171, 8, 4, 252, 166, 8, 4, 252, 168, 8, + 4, 252, 167, 8, 4, 252, 170, 8, 4, 252, 169, 8, 4, 252, 176, 8, 4, 252, + 175, 8, 4, 252, 178, 8, 4, 252, 177, 8, 4, 252, 156, 8, 4, 252, 158, 8, + 4, 252, 157, 8, 4, 252, 161, 8, 4, 252, 160, 8, 4, 252, 163, 8, 4, 252, + 162, 8, 4, 252, 172, 8, 4, 252, 174, 8, 4, 252, 173, 8, 4, 252, 152, 8, + 4, 252, 151, 8, 4, 252, 159, 8, 4, 252, 155, 8, 4, 252, 153, 8, 4, 252, + 154, 8, 4, 252, 148, 8, 4, 252, 147, 8, 4, 252, 150, 8, 4, 252, 149, 8, + 4, 232, 188, 8, 4, 232, 187, 8, 4, 232, 193, 8, 4, 232, 189, 8, 4, 232, + 190, 8, 4, 232, 192, 8, 4, 232, 191, 8, 4, 232, 195, 8, 4, 232, 194, 8, + 4, 232, 197, 8, 4, 232, 196, 8, 4, 232, 184, 8, 4, 232, 183, 8, 4, 232, + 186, 8, 4, 232, 185, 8, 4, 232, 178, 8, 4, 232, 177, 8, 4, 232, 182, 8, + 4, 232, 181, 8, 4, 232, 179, 8, 4, 232, 180, 8, 4, 232, 172, 8, 4, 232, + 171, 8, 4, 232, 176, 8, 4, 232, 175, 8, 4, 232, 173, 8, 4, 232, 174, 8, + 4, 243, 46, 8, 4, 243, 45, 8, 4, 243, 51, 8, 4, 243, 47, 8, 4, 243, 48, + 8, 4, 243, 50, 8, 4, 243, 49, 8, 4, 243, 54, 8, 4, 243, 53, 8, 4, 243, + 56, 8, 4, 243, 55, 8, 4, 243, 37, 8, 4, 243, 39, 8, 4, 243, 38, 8, 4, + 243, 42, 8, 4, 243, 41, 8, 4, 243, 44, 8, 4, 243, 43, 8, 4, 243, 33, 8, + 4, 243, 32, 8, 4, 243, 40, 8, 4, 243, 36, 8, 4, 243, 34, 8, 4, 243, 35, + 8, 4, 243, 27, 8, 4, 243, 31, 8, 4, 243, 30, 8, 4, 243, 28, 8, 4, 243, + 29, 8, 4, 233, 145, 8, 4, 233, 144, 8, 4, 233, 196, 8, 4, 233, 151, 8, 4, + 233, 173, 8, 4, 233, 190, 8, 4, 233, 189, 8, 4, 234, 51, 8, 4, 234, 47, + 8, 4, 196, 8, 4, 234, 78, 8, 4, 233, 75, 8, 4, 233, 74, 8, 4, 233, 77, 8, + 4, 233, 76, 8, 4, 233, 111, 8, 4, 233, 103, 8, 4, 233, 136, 8, 4, 233, + 115, 8, 4, 233, 232, 8, 4, 234, 25, 8, 4, 233, 57, 8, 4, 233, 54, 8, 4, + 233, 99, 8, 4, 233, 71, 8, 4, 233, 64, 8, 4, 233, 69, 8, 4, 233, 36, 8, + 4, 233, 35, 8, 4, 233, 41, 8, 4, 233, 38, 8, 4, 245, 172, 8, 4, 245, 168, + 8, 4, 245, 203, 8, 4, 245, 180, 8, 4, 245, 240, 8, 4, 245, 234, 8, 4, + 246, 8, 8, 4, 245, 242, 8, 4, 245, 109, 8, 4, 245, 139, 8, 4, 245, 130, + 8, 4, 245, 80, 8, 4, 245, 79, 8, 4, 245, 92, 8, 4, 245, 85, 8, 4, 245, + 83, 8, 4, 245, 84, 8, 4, 245, 70, 8, 4, 245, 69, 8, 4, 245, 73, 8, 4, + 245, 71, 8, 4, 219, 74, 8, 4, 219, 73, 8, 4, 219, 94, 8, 4, 219, 83, 8, + 4, 219, 89, 8, 4, 219, 87, 8, 4, 219, 91, 8, 4, 219, 90, 8, 4, 219, 172, + 8, 4, 219, 168, 8, 4, 219, 189, 8, 4, 219, 182, 8, 4, 219, 62, 8, 4, 219, + 58, 8, 4, 219, 72, 8, 4, 219, 63, 8, 4, 219, 95, 8, 4, 219, 156, 8, 4, + 219, 51, 8, 4, 219, 50, 8, 4, 219, 56, 8, 4, 219, 54, 8, 4, 219, 52, 8, + 4, 219, 53, 8, 4, 219, 44, 8, 4, 219, 43, 8, 4, 219, 48, 8, 4, 219, 47, + 8, 4, 219, 45, 8, 4, 219, 46, 8, 4, 248, 197, 8, 4, 248, 185, 8, 4, 249, + 15, 8, 4, 248, 216, 8, 4, 248, 249, 8, 4, 248, 253, 8, 4, 248, 252, 8, 4, + 249, 143, 8, 4, 249, 138, 8, 4, 249, 207, 8, 4, 249, 162, 8, 4, 247, 95, + 8, 4, 247, 96, 8, 4, 248, 145, 8, 4, 247, 128, 8, 4, 248, 167, 8, 4, 248, + 147, 8, 4, 249, 41, 8, 4, 249, 92, 8, 4, 249, 53, 8, 4, 247, 88, 8, 4, + 247, 86, 8, 4, 247, 111, 8, 4, 247, 94, 8, 4, 247, 89, 8, 4, 247, 92, 8, + 4, 221, 161, 8, 4, 221, 157, 8, 4, 221, 205, 8, 4, 221, 169, 8, 4, 221, + 198, 8, 4, 221, 200, 8, 4, 221, 199, 8, 4, 222, 110, 8, 4, 222, 97, 8, 4, + 222, 155, 8, 4, 222, 115, 8, 4, 220, 244, 8, 4, 220, 243, 8, 4, 220, 246, + 8, 4, 220, 245, 8, 4, 221, 113, 8, 4, 221, 110, 8, 4, 101, 8, 4, 221, + 119, 8, 4, 222, 40, 8, 4, 222, 87, 8, 4, 222, 57, 8, 4, 220, 231, 8, 4, + 220, 228, 8, 4, 221, 0, 8, 4, 220, 242, 8, 4, 220, 232, 8, 4, 220, 240, + 8, 4, 249, 109, 8, 4, 249, 108, 8, 4, 249, 114, 8, 4, 249, 110, 8, 4, + 249, 111, 8, 4, 249, 113, 8, 4, 249, 112, 8, 4, 249, 125, 8, 4, 249, 124, + 8, 4, 249, 132, 8, 4, 249, 126, 8, 4, 249, 99, 8, 4, 249, 101, 8, 4, 249, + 100, 8, 4, 249, 104, 8, 4, 249, 103, 8, 4, 249, 107, 8, 4, 249, 105, 8, + 4, 249, 117, 8, 4, 249, 120, 8, 4, 249, 118, 8, 4, 249, 95, 8, 4, 249, + 94, 8, 4, 249, 102, 8, 4, 249, 98, 8, 4, 249, 96, 8, 4, 249, 97, 8, 4, + 232, 156, 8, 4, 232, 155, 8, 4, 232, 160, 8, 4, 232, 157, 8, 4, 232, 158, + 8, 4, 232, 159, 8, 4, 232, 166, 8, 4, 232, 165, 8, 4, 232, 169, 8, 4, + 232, 167, 8, 4, 232, 150, 8, 4, 232, 149, 8, 4, 232, 154, 8, 4, 232, 151, + 8, 4, 232, 161, 8, 4, 232, 164, 8, 4, 232, 162, 8, 4, 232, 144, 8, 4, + 232, 143, 8, 4, 232, 148, 8, 4, 232, 147, 8, 4, 232, 145, 8, 4, 232, 146, + 8, 4, 243, 13, 8, 4, 243, 12, 8, 4, 243, 19, 8, 4, 243, 14, 8, 4, 243, + 16, 8, 4, 243, 15, 8, 4, 243, 18, 8, 4, 243, 17, 8, 4, 243, 24, 8, 4, + 243, 23, 8, 4, 243, 26, 8, 4, 243, 25, 8, 4, 243, 7, 8, 4, 243, 8, 8, 4, + 243, 10, 8, 4, 243, 9, 8, 4, 243, 11, 8, 4, 243, 20, 8, 4, 243, 22, 8, 4, + 243, 21, 8, 4, 243, 6, 8, 4, 232, 21, 8, 4, 232, 20, 8, 4, 232, 62, 8, 4, + 232, 24, 8, 4, 232, 44, 8, 4, 232, 58, 8, 4, 232, 57, 8, 4, 232, 201, 8, + 4, 208, 8, 4, 232, 212, 8, 4, 231, 95, 8, 4, 231, 97, 8, 4, 231, 96, 8, + 4, 231, 184, 8, 4, 231, 173, 8, 4, 231, 204, 8, 4, 231, 191, 8, 4, 232, + 121, 8, 4, 232, 141, 8, 4, 232, 130, 8, 4, 231, 91, 8, 4, 231, 88, 8, 4, + 231, 144, 8, 4, 231, 94, 8, 4, 231, 92, 8, 4, 231, 93, 8, 4, 243, 77, 8, + 4, 243, 76, 8, 4, 243, 82, 8, 4, 243, 78, 8, 4, 243, 79, 8, 4, 243, 81, + 8, 4, 243, 80, 8, 4, 243, 87, 8, 4, 243, 86, 8, 4, 243, 89, 8, 4, 243, + 88, 8, 4, 243, 69, 8, 4, 243, 71, 8, 4, 243, 70, 8, 4, 243, 73, 8, 4, + 243, 75, 8, 4, 243, 74, 8, 4, 243, 83, 8, 4, 243, 85, 8, 4, 243, 84, 8, + 4, 243, 65, 8, 4, 243, 64, 8, 4, 243, 72, 8, 4, 243, 68, 8, 4, 243, 66, + 8, 4, 243, 67, 8, 4, 243, 59, 8, 4, 243, 58, 8, 4, 243, 63, 8, 4, 243, + 62, 8, 4, 243, 60, 8, 4, 243, 61, 8, 4, 235, 27, 8, 4, 235, 22, 8, 4, + 235, 67, 8, 4, 235, 32, 8, 4, 235, 61, 8, 4, 235, 60, 8, 4, 235, 63, 8, + 4, 235, 62, 8, 4, 235, 141, 8, 4, 235, 133, 8, 4, 235, 188, 8, 4, 235, + 147, 8, 4, 234, 214, 8, 4, 234, 213, 8, 4, 234, 216, 8, 4, 234, 215, 8, + 4, 234, 242, 8, 4, 234, 236, 8, 4, 235, 12, 8, 4, 234, 245, 8, 4, 235, + 82, 8, 4, 235, 122, 8, 4, 235, 89, 8, 4, 234, 209, 8, 4, 234, 208, 8, 4, + 234, 231, 8, 4, 234, 212, 8, 4, 234, 210, 8, 4, 234, 211, 8, 4, 234, 191, + 8, 4, 234, 190, 8, 4, 234, 198, 8, 4, 234, 194, 8, 4, 234, 192, 8, 4, + 234, 193, 8, 4, 244, 80, 8, 4, 244, 79, 8, 4, 244, 103, 8, 4, 244, 89, 8, + 4, 244, 96, 8, 4, 244, 95, 8, 4, 244, 98, 8, 4, 244, 97, 8, 4, 244, 214, + 8, 4, 244, 209, 8, 4, 245, 0, 8, 4, 244, 223, 8, 4, 244, 0, 8, 4, 243, + 255, 8, 4, 244, 2, 8, 4, 244, 1, 8, 4, 244, 51, 8, 4, 244, 49, 8, 4, 244, + 68, 8, 4, 244, 59, 8, 4, 244, 164, 8, 4, 244, 162, 8, 4, 244, 191, 8, 4, + 244, 174, 8, 4, 243, 246, 8, 4, 243, 245, 8, 4, 244, 17, 8, 4, 243, 254, + 8, 4, 243, 247, 8, 4, 243, 253, 8, 4, 236, 89, 8, 4, 236, 88, 8, 4, 236, + 113, 8, 4, 236, 99, 8, 4, 236, 107, 8, 4, 236, 109, 8, 4, 236, 108, 8, 4, + 236, 203, 8, 4, 236, 192, 8, 4, 175, 8, 4, 236, 227, 8, 4, 235, 250, 8, + 4, 235, 252, 8, 4, 235, 251, 8, 4, 236, 31, 8, 4, 236, 27, 8, 4, 236, 57, + 8, 4, 236, 38, 8, 4, 236, 159, 8, 4, 236, 156, 8, 4, 236, 184, 8, 4, 236, + 162, 8, 4, 235, 240, 8, 4, 235, 238, 8, 4, 236, 7, 8, 4, 235, 249, 8, 4, + 235, 243, 8, 4, 235, 247, 8, 4, 244, 146, 8, 4, 244, 145, 8, 4, 244, 150, + 8, 4, 244, 147, 8, 4, 244, 149, 8, 4, 244, 148, 8, 4, 244, 157, 8, 4, + 244, 156, 8, 4, 244, 160, 8, 4, 244, 158, 8, 4, 244, 137, 8, 4, 244, 136, + 8, 4, 244, 139, 8, 4, 244, 138, 8, 4, 244, 142, 8, 4, 244, 141, 8, 4, + 244, 144, 8, 4, 244, 143, 8, 4, 244, 152, 8, 4, 244, 151, 8, 4, 244, 155, + 8, 4, 244, 153, 8, 4, 244, 132, 8, 4, 244, 131, 8, 4, 244, 140, 8, 4, + 244, 135, 8, 4, 244, 133, 8, 4, 244, 134, 8, 4, 233, 214, 8, 4, 233, 215, + 8, 4, 233, 227, 8, 4, 233, 226, 8, 4, 233, 229, 8, 4, 233, 228, 8, 4, + 233, 205, 8, 4, 233, 207, 8, 4, 233, 206, 8, 4, 233, 210, 8, 4, 233, 209, + 8, 4, 233, 212, 8, 4, 233, 211, 8, 4, 233, 216, 8, 4, 233, 218, 8, 4, + 233, 217, 8, 4, 233, 201, 8, 4, 233, 200, 8, 4, 233, 208, 8, 4, 233, 204, + 8, 4, 233, 202, 8, 4, 233, 203, 8, 4, 242, 133, 8, 4, 242, 132, 8, 4, + 242, 139, 8, 4, 242, 134, 8, 4, 242, 136, 8, 4, 242, 135, 8, 4, 242, 138, + 8, 4, 242, 137, 8, 4, 242, 144, 8, 4, 242, 143, 8, 4, 242, 146, 8, 4, + 242, 145, 8, 4, 242, 125, 8, 4, 242, 124, 8, 4, 242, 127, 8, 4, 242, 126, + 8, 4, 242, 129, 8, 4, 242, 128, 8, 4, 242, 131, 8, 4, 242, 130, 8, 4, + 242, 140, 8, 4, 242, 142, 8, 4, 242, 141, 8, 4, 232, 89, 8, 4, 232, 91, + 8, 4, 232, 90, 8, 4, 232, 108, 8, 4, 232, 107, 8, 4, 232, 115, 8, 4, 232, + 110, 8, 4, 232, 71, 8, 4, 232, 70, 8, 4, 232, 72, 8, 4, 232, 78, 8, 4, + 232, 75, 8, 4, 232, 84, 8, 4, 232, 79, 8, 4, 232, 102, 8, 4, 232, 106, 8, + 4, 232, 103, 8, 4, 243, 92, 8, 4, 243, 100, 8, 4, 243, 108, 8, 4, 243, + 173, 8, 4, 243, 167, 8, 4, 155, 8, 4, 243, 183, 8, 4, 242, 157, 8, 4, + 242, 156, 8, 4, 242, 159, 8, 4, 242, 158, 8, 4, 242, 186, 8, 4, 242, 181, + 8, 4, 243, 4, 8, 4, 242, 244, 8, 4, 243, 125, 8, 4, 243, 162, 8, 4, 243, + 135, 8, 4, 218, 243, 8, 4, 218, 231, 8, 4, 219, 7, 8, 4, 218, 251, 8, 4, + 218, 157, 8, 4, 218, 159, 8, 4, 218, 158, 8, 4, 218, 170, 8, 4, 218, 187, + 8, 4, 218, 175, 8, 4, 218, 214, 8, 4, 218, 227, 8, 4, 218, 218, 8, 4, + 217, 28, 8, 4, 217, 27, 8, 4, 217, 42, 8, 4, 217, 30, 8, 4, 217, 35, 8, + 4, 217, 37, 8, 4, 217, 36, 8, 4, 217, 100, 8, 4, 217, 97, 8, 4, 217, 114, + 8, 4, 217, 103, 8, 4, 217, 6, 8, 4, 217, 8, 8, 4, 217, 7, 8, 4, 217, 17, + 8, 4, 217, 16, 8, 4, 217, 21, 8, 4, 217, 18, 8, 4, 217, 82, 8, 4, 217, + 92, 8, 4, 217, 86, 8, 4, 217, 2, 8, 4, 217, 1, 8, 4, 217, 13, 8, 4, 217, + 5, 8, 4, 217, 3, 8, 4, 217, 4, 8, 4, 216, 249, 8, 4, 216, 248, 8, 4, 216, + 254, 8, 4, 216, 252, 8, 4, 216, 250, 8, 4, 216, 251, 8, 4, 250, 215, 8, + 4, 250, 212, 8, 4, 250, 235, 8, 4, 250, 223, 8, 4, 250, 232, 8, 4, 250, + 226, 8, 4, 250, 234, 8, 4, 250, 233, 8, 4, 251, 124, 8, 4, 251, 118, 8, + 4, 251, 169, 8, 4, 251, 143, 8, 4, 250, 84, 8, 4, 250, 86, 8, 4, 250, 85, + 8, 4, 250, 116, 8, 4, 250, 109, 8, 4, 250, 182, 8, 4, 250, 129, 8, 4, + 251, 71, 8, 4, 251, 99, 8, 4, 251, 75, 8, 4, 250, 68, 8, 4, 250, 67, 8, + 4, 250, 92, 8, 4, 250, 82, 8, 4, 250, 71, 8, 4, 250, 81, 8, 4, 250, 49, + 8, 4, 250, 48, 8, 4, 250, 58, 8, 4, 250, 55, 8, 4, 250, 50, 8, 4, 250, + 52, 8, 4, 216, 232, 8, 4, 216, 231, 8, 4, 216, 238, 8, 4, 216, 233, 8, 4, + 216, 235, 8, 4, 216, 234, 8, 4, 216, 237, 8, 4, 216, 236, 8, 4, 216, 244, + 8, 4, 216, 243, 8, 4, 216, 247, 8, 4, 216, 245, 8, 4, 216, 228, 8, 4, + 216, 230, 8, 4, 216, 229, 8, 4, 216, 239, 8, 4, 216, 242, 8, 4, 216, 240, + 8, 4, 216, 223, 8, 4, 216, 227, 8, 4, 216, 226, 8, 4, 216, 224, 8, 4, + 216, 225, 8, 4, 216, 218, 8, 4, 216, 217, 8, 4, 216, 222, 8, 4, 216, 221, + 8, 4, 216, 219, 8, 4, 216, 220, 8, 4, 231, 31, 8, 4, 231, 30, 8, 4, 231, + 36, 8, 4, 231, 32, 8, 4, 231, 33, 8, 4, 231, 35, 8, 4, 231, 34, 8, 4, + 231, 40, 8, 4, 231, 39, 8, 4, 231, 42, 8, 4, 231, 41, 8, 4, 231, 25, 8, + 4, 231, 26, 8, 4, 231, 28, 8, 4, 231, 29, 8, 4, 231, 37, 8, 4, 231, 38, + 8, 4, 231, 21, 8, 4, 231, 27, 8, 4, 231, 24, 8, 4, 231, 22, 8, 4, 231, + 23, 8, 4, 231, 16, 8, 4, 231, 15, 8, 4, 231, 20, 8, 4, 231, 19, 8, 4, + 231, 17, 8, 4, 231, 18, 8, 4, 224, 84, 8, 4, 182, 8, 4, 224, 140, 8, 4, + 224, 86, 8, 4, 224, 133, 8, 4, 224, 135, 8, 4, 224, 134, 8, 4, 226, 127, + 8, 4, 226, 120, 8, 4, 226, 177, 8, 4, 226, 133, 8, 4, 223, 63, 8, 4, 223, + 65, 8, 4, 223, 64, 8, 4, 224, 12, 8, 4, 224, 2, 8, 4, 224, 26, 8, 4, 224, + 13, 8, 4, 225, 36, 8, 4, 226, 94, 8, 4, 225, 56, 8, 4, 223, 44, 8, 4, + 223, 42, 8, 4, 223, 103, 8, 4, 223, 62, 8, 4, 223, 46, 8, 4, 223, 53, 8, + 4, 222, 215, 8, 4, 222, 214, 8, 4, 223, 21, 8, 4, 222, 220, 8, 4, 222, + 216, 8, 4, 222, 219, 8, 4, 223, 184, 8, 4, 223, 183, 8, 4, 223, 189, 8, + 4, 223, 185, 8, 4, 223, 186, 8, 4, 223, 188, 8, 4, 223, 187, 8, 4, 223, + 196, 8, 4, 223, 195, 8, 4, 223, 218, 8, 4, 223, 197, 8, 4, 223, 180, 8, + 4, 223, 179, 8, 4, 223, 182, 8, 4, 223, 181, 8, 4, 223, 191, 8, 4, 223, + 194, 8, 4, 223, 192, 8, 4, 223, 176, 8, 4, 223, 175, 8, 4, 223, 178, 8, + 4, 223, 177, 8, 4, 223, 170, 8, 4, 223, 169, 8, 4, 223, 174, 8, 4, 223, + 173, 8, 4, 223, 171, 8, 4, 223, 172, 8, 4, 217, 75, 8, 4, 217, 74, 8, 4, + 217, 80, 8, 4, 217, 77, 8, 4, 217, 57, 8, 4, 217, 59, 8, 4, 217, 58, 8, + 4, 217, 62, 8, 4, 217, 61, 8, 4, 217, 65, 8, 4, 217, 63, 8, 4, 217, 69, + 8, 4, 217, 68, 8, 4, 217, 72, 8, 4, 217, 70, 8, 4, 217, 53, 8, 4, 217, + 52, 8, 4, 217, 60, 8, 4, 217, 56, 8, 4, 217, 54, 8, 4, 217, 55, 8, 4, + 217, 45, 8, 4, 217, 44, 8, 4, 217, 49, 8, 4, 217, 48, 8, 4, 217, 46, 8, + 4, 217, 47, 8, 4, 251, 51, 8, 4, 251, 48, 8, 4, 251, 69, 8, 4, 251, 57, + 8, 4, 250, 249, 8, 4, 250, 248, 8, 4, 250, 251, 8, 4, 250, 250, 8, 4, + 251, 5, 8, 4, 251, 4, 8, 4, 251, 11, 8, 4, 251, 7, 8, 4, 251, 36, 8, 4, + 251, 34, 8, 4, 251, 46, 8, 4, 251, 38, 8, 4, 250, 243, 8, 4, 250, 253, 8, + 4, 250, 247, 8, 4, 250, 244, 8, 4, 250, 246, 8, 4, 250, 237, 8, 4, 250, + 236, 8, 4, 250, 241, 8, 4, 250, 240, 8, 4, 250, 238, 8, 4, 250, 239, 8, + 4, 227, 51, 8, 4, 227, 52, 8, 4, 227, 38, 8, 4, 227, 39, 8, 4, 227, 42, + 8, 4, 227, 41, 8, 4, 227, 44, 8, 4, 227, 43, 8, 4, 227, 46, 8, 4, 227, + 45, 8, 4, 227, 50, 8, 4, 227, 47, 8, 4, 227, 34, 8, 4, 227, 33, 8, 4, + 227, 40, 8, 4, 227, 37, 8, 4, 227, 35, 8, 4, 227, 36, 8, 4, 227, 28, 8, + 4, 227, 27, 8, 4, 227, 32, 8, 4, 227, 31, 8, 4, 227, 29, 8, 4, 227, 30, + 8, 4, 231, 169, 8, 4, 231, 168, 8, 4, 231, 171, 8, 4, 231, 170, 8, 4, + 231, 161, 8, 4, 231, 163, 8, 4, 231, 162, 8, 4, 231, 165, 8, 4, 231, 164, + 8, 4, 231, 167, 8, 4, 231, 166, 8, 4, 231, 156, 8, 4, 231, 155, 8, 4, + 231, 160, 8, 4, 231, 159, 8, 4, 231, 157, 8, 4, 231, 158, 8, 4, 231, 150, + 8, 4, 231, 149, 8, 4, 231, 154, 8, 4, 231, 153, 8, 4, 231, 151, 8, 4, + 231, 152, 8, 4, 224, 253, 8, 4, 224, 250, 8, 4, 225, 25, 8, 4, 225, 7, 8, + 4, 224, 163, 8, 4, 224, 165, 8, 4, 224, 164, 8, 4, 224, 178, 8, 4, 224, + 176, 8, 4, 224, 200, 8, 4, 224, 193, 8, 4, 224, 226, 8, 4, 224, 223, 8, + 4, 224, 246, 8, 4, 224, 233, 8, 4, 224, 159, 8, 4, 224, 158, 8, 4, 224, + 170, 8, 4, 224, 162, 8, 4, 224, 160, 8, 4, 224, 161, 8, 4, 224, 143, 8, + 4, 224, 142, 8, 4, 224, 149, 8, 4, 224, 146, 8, 4, 224, 144, 8, 4, 224, + 145, 8, 4, 227, 228, 8, 4, 227, 223, 8, 4, 203, 8, 4, 227, 233, 8, 4, + 227, 6, 8, 4, 227, 8, 8, 4, 227, 7, 8, 4, 227, 60, 8, 4, 227, 54, 8, 4, + 227, 75, 8, 4, 227, 63, 8, 4, 227, 155, 8, 4, 227, 216, 8, 4, 227, 185, + 8, 4, 226, 255, 8, 4, 226, 253, 8, 4, 227, 22, 8, 4, 227, 5, 8, 4, 227, + 1, 8, 4, 227, 2, 8, 4, 226, 238, 8, 4, 226, 237, 8, 4, 226, 243, 8, 4, + 226, 241, 8, 4, 226, 239, 8, 4, 226, 240, 8, 4, 237, 89, 8, 4, 237, 88, + 8, 4, 237, 98, 8, 4, 237, 90, 8, 4, 237, 94, 8, 4, 237, 93, 8, 4, 237, + 96, 8, 4, 237, 95, 8, 4, 237, 34, 8, 4, 237, 33, 8, 4, 237, 36, 8, 4, + 237, 35, 8, 4, 237, 47, 8, 4, 237, 46, 8, 4, 237, 59, 8, 4, 237, 49, 8, + 4, 237, 28, 8, 4, 237, 26, 8, 4, 237, 43, 8, 4, 237, 32, 8, 4, 237, 29, + 8, 4, 237, 30, 8, 4, 237, 20, 8, 4, 237, 19, 8, 4, 237, 24, 8, 4, 237, + 23, 8, 4, 237, 21, 8, 4, 237, 22, 8, 4, 228, 114, 8, 4, 228, 112, 8, 4, + 228, 121, 8, 4, 228, 115, 8, 4, 228, 118, 8, 4, 228, 117, 8, 4, 228, 120, + 8, 4, 228, 119, 8, 4, 228, 70, 8, 4, 228, 67, 8, 4, 228, 72, 8, 4, 228, + 71, 8, 4, 228, 101, 8, 4, 228, 100, 8, 4, 228, 110, 8, 4, 228, 104, 8, 4, + 228, 62, 8, 4, 228, 58, 8, 4, 228, 98, 8, 4, 228, 66, 8, 4, 228, 64, 8, + 4, 228, 65, 8, 4, 228, 42, 8, 4, 228, 40, 8, 4, 228, 52, 8, 4, 228, 45, + 8, 4, 228, 43, 8, 4, 228, 44, 8, 4, 237, 78, 8, 4, 237, 77, 8, 4, 237, + 84, 8, 4, 237, 79, 8, 4, 237, 81, 8, 4, 237, 80, 8, 4, 237, 83, 8, 4, + 237, 82, 8, 4, 237, 69, 8, 4, 237, 71, 8, 4, 237, 70, 8, 4, 237, 74, 8, + 4, 237, 73, 8, 4, 237, 76, 8, 4, 237, 75, 8, 4, 237, 65, 8, 4, 237, 64, + 8, 4, 237, 72, 8, 4, 237, 68, 8, 4, 237, 66, 8, 4, 237, 67, 8, 4, 237, + 61, 8, 4, 237, 60, 8, 4, 237, 63, 8, 4, 237, 62, 8, 4, 232, 7, 8, 4, 232, + 6, 8, 4, 232, 13, 8, 4, 232, 8, 8, 4, 232, 10, 8, 4, 232, 9, 8, 4, 232, + 12, 8, 4, 232, 11, 8, 4, 231, 253, 8, 4, 231, 254, 8, 4, 232, 2, 8, 4, + 232, 1, 8, 4, 232, 5, 8, 4, 232, 3, 8, 4, 231, 249, 8, 4, 232, 0, 8, 4, + 231, 252, 8, 4, 231, 250, 8, 4, 231, 251, 8, 4, 231, 244, 8, 4, 231, 243, + 8, 4, 231, 248, 8, 4, 231, 247, 8, 4, 231, 245, 8, 4, 231, 246, 8, 4, + 231, 59, 8, 4, 231, 58, 8, 4, 231, 67, 8, 4, 231, 61, 8, 4, 231, 64, 8, + 4, 231, 63, 8, 4, 231, 66, 8, 4, 231, 65, 8, 4, 231, 47, 8, 4, 231, 49, + 8, 4, 231, 48, 8, 4, 231, 52, 8, 4, 231, 51, 8, 4, 231, 56, 8, 4, 231, + 53, 8, 4, 231, 45, 8, 4, 231, 44, 8, 4, 231, 50, 8, 4, 231, 46, 8, 4, + 218, 123, 8, 4, 218, 122, 8, 4, 218, 130, 8, 4, 218, 125, 8, 4, 218, 127, + 8, 4, 218, 126, 8, 4, 218, 129, 8, 4, 218, 128, 8, 4, 218, 112, 8, 4, + 218, 113, 8, 4, 218, 117, 8, 4, 218, 116, 8, 4, 218, 121, 8, 4, 218, 119, + 8, 4, 218, 94, 8, 4, 218, 92, 8, 4, 218, 104, 8, 4, 218, 97, 8, 4, 218, + 95, 8, 4, 218, 96, 8, 4, 217, 237, 8, 4, 217, 235, 8, 4, 217, 250, 8, 4, + 217, 238, 8, 4, 217, 245, 8, 4, 217, 244, 8, 4, 217, 247, 8, 4, 217, 246, + 8, 4, 217, 185, 8, 4, 217, 184, 8, 4, 217, 187, 8, 4, 217, 186, 8, 4, + 217, 212, 8, 4, 217, 209, 8, 4, 217, 231, 8, 4, 217, 215, 8, 4, 217, 177, + 8, 4, 217, 175, 8, 4, 217, 200, 8, 4, 217, 183, 8, 4, 217, 180, 8, 4, + 217, 181, 8, 4, 217, 160, 8, 4, 217, 159, 8, 4, 217, 166, 8, 4, 217, 163, + 8, 4, 217, 161, 8, 4, 217, 162, 8, 32, 228, 101, 8, 32, 235, 67, 8, 32, + 236, 89, 8, 32, 231, 61, 8, 32, 250, 55, 8, 32, 223, 189, 8, 32, 244, + 143, 8, 32, 244, 174, 8, 32, 233, 196, 8, 32, 242, 133, 8, 32, 234, 193, + 8, 32, 252, 152, 8, 32, 233, 115, 8, 32, 217, 231, 8, 32, 228, 185, 8, + 32, 242, 127, 8, 32, 222, 110, 8, 32, 245, 0, 8, 32, 217, 5, 8, 32, 250, + 49, 8, 32, 249, 97, 8, 32, 251, 228, 8, 32, 244, 139, 8, 32, 231, 53, 8, + 32, 221, 0, 8, 32, 230, 120, 8, 32, 237, 65, 8, 32, 217, 17, 8, 32, 228, + 167, 8, 32, 243, 44, 8, 32, 217, 237, 8, 32, 219, 53, 8, 32, 224, 149, 8, + 32, 219, 156, 8, 32, 217, 114, 8, 32, 237, 59, 8, 32, 231, 24, 8, 32, + 237, 63, 8, 32, 244, 51, 8, 32, 237, 83, 8, 32, 218, 187, 8, 32, 247, + 111, 8, 32, 224, 161, 8, 32, 235, 63, 8, 32, 250, 58, 8, 32, 250, 85, 8, + 32, 250, 223, 8, 32, 242, 130, 8, 32, 224, 253, 8, 32, 217, 4, 8, 32, + 224, 193, 8, 32, 251, 46, 8, 32, 216, 235, 8, 32, 232, 192, 8, 32, 236, + 184, 235, 28, 1, 252, 237, 235, 28, 1, 187, 235, 28, 1, 229, 141, 235, + 28, 1, 249, 207, 235, 28, 1, 222, 155, 235, 28, 1, 222, 35, 235, 28, 1, + 245, 0, 235, 28, 1, 175, 235, 28, 1, 236, 149, 235, 28, 1, 237, 123, 235, + 28, 1, 251, 169, 235, 28, 1, 251, 69, 235, 28, 1, 247, 74, 235, 28, 1, + 221, 55, 235, 28, 1, 221, 47, 235, 28, 1, 196, 235, 28, 1, 208, 235, 28, + 1, 235, 188, 235, 28, 1, 226, 177, 235, 28, 1, 217, 80, 235, 28, 1, 217, + 114, 235, 28, 1, 232, 115, 235, 28, 1, 155, 235, 28, 1, 218, 138, 235, + 28, 1, 243, 121, 235, 28, 1, 246, 8, 235, 28, 1, 219, 7, 235, 28, 1, 225, + 25, 235, 28, 1, 184, 235, 28, 1, 244, 125, 235, 28, 1, 60, 235, 28, 1, + 254, 234, 235, 28, 1, 73, 235, 28, 1, 246, 115, 235, 28, 1, 72, 235, 28, + 1, 74, 235, 28, 1, 68, 235, 28, 1, 220, 110, 235, 28, 1, 220, 105, 235, + 28, 1, 230, 167, 235, 28, 1, 145, 233, 40, 221, 205, 235, 28, 1, 145, + 232, 238, 229, 37, 235, 28, 1, 145, 233, 40, 250, 57, 235, 28, 1, 145, + 233, 40, 252, 41, 235, 28, 1, 145, 233, 40, 208, 235, 28, 1, 145, 233, + 40, 237, 104, 235, 28, 228, 197, 250, 168, 235, 28, 228, 197, 245, 90, + 223, 136, 38, 4, 246, 250, 38, 4, 246, 247, 38, 4, 243, 148, 38, 4, 218, + 224, 38, 4, 218, 223, 38, 4, 229, 191, 38, 4, 252, 91, 38, 4, 252, 137, + 38, 4, 234, 34, 38, 4, 236, 23, 38, 4, 233, 223, 38, 4, 244, 201, 38, 4, + 245, 226, 38, 4, 219, 160, 38, 4, 222, 80, 38, 4, 222, 21, 38, 4, 249, + 28, 38, 4, 249, 25, 38, 4, 235, 118, 38, 4, 227, 200, 38, 4, 249, 82, 38, + 4, 232, 163, 38, 4, 226, 84, 38, 4, 224, 244, 38, 4, 217, 90, 38, 4, 217, + 71, 38, 4, 251, 91, 38, 4, 237, 113, 38, 4, 232, 14, 38, 4, 218, 22, 38, + 4, 236, 183, 38, 4, 232, 98, 38, 4, 244, 184, 38, 4, 234, 16, 38, 4, 232, + 139, 38, 4, 231, 72, 38, 4, 72, 38, 4, 237, 223, 38, 4, 243, 112, 38, 4, + 243, 96, 38, 4, 218, 204, 38, 4, 218, 195, 38, 4, 229, 108, 38, 4, 252, + 89, 38, 4, 252, 84, 38, 4, 234, 32, 38, 4, 236, 21, 38, 4, 233, 222, 38, + 4, 244, 199, 38, 4, 245, 203, 38, 4, 219, 94, 38, 4, 221, 205, 38, 4, + 222, 2, 38, 4, 249, 20, 38, 4, 249, 24, 38, 4, 235, 67, 38, 4, 227, 147, + 38, 4, 249, 15, 38, 4, 232, 160, 38, 4, 224, 140, 38, 4, 224, 221, 38, 4, + 217, 42, 38, 4, 217, 67, 38, 4, 250, 235, 38, 4, 237, 98, 38, 4, 232, 13, + 38, 4, 217, 250, 38, 4, 236, 113, 38, 4, 232, 96, 38, 4, 244, 103, 38, 4, + 233, 196, 38, 4, 232, 62, 38, 4, 231, 67, 38, 4, 60, 38, 4, 254, 131, 38, + 4, 232, 111, 38, 4, 155, 38, 4, 243, 191, 38, 4, 219, 7, 38, 4, 218, 253, + 38, 4, 187, 38, 4, 252, 94, 38, 4, 252, 237, 38, 4, 234, 37, 38, 4, 236, + 26, 38, 4, 236, 25, 38, 4, 233, 225, 38, 4, 244, 204, 38, 4, 246, 8, 38, + 4, 219, 189, 38, 4, 222, 155, 38, 4, 222, 35, 38, 4, 249, 36, 38, 4, 249, + 27, 38, 4, 235, 188, 38, 4, 203, 38, 4, 249, 207, 38, 4, 232, 169, 38, 4, + 226, 177, 38, 4, 225, 25, 38, 4, 217, 114, 38, 4, 217, 80, 38, 4, 251, + 169, 38, 4, 237, 123, 38, 4, 232, 18, 38, 4, 184, 38, 4, 175, 38, 4, 236, + 233, 38, 4, 232, 100, 38, 4, 245, 0, 38, 4, 196, 38, 4, 208, 38, 4, 231, + 77, 38, 4, 230, 127, 38, 4, 230, 124, 38, 4, 242, 248, 38, 4, 218, 180, + 38, 4, 218, 176, 38, 4, 229, 21, 38, 4, 252, 87, 38, 4, 252, 34, 38, 4, + 234, 30, 38, 4, 236, 19, 38, 4, 233, 220, 38, 4, 244, 196, 38, 4, 245, + 134, 38, 4, 219, 64, 38, 4, 221, 122, 38, 4, 221, 236, 38, 4, 249, 18, + 38, 4, 249, 22, 38, 4, 234, 248, 38, 4, 227, 67, 38, 4, 248, 150, 38, 4, + 232, 152, 38, 4, 224, 14, 38, 4, 224, 195, 38, 4, 217, 19, 38, 4, 217, + 64, 38, 4, 250, 130, 38, 4, 237, 50, 38, 4, 232, 4, 38, 4, 217, 216, 38, + 4, 236, 41, 38, 4, 232, 94, 38, 4, 244, 60, 38, 4, 233, 119, 38, 4, 231, + 195, 38, 4, 231, 54, 38, 4, 68, 38, 4, 220, 87, 38, 4, 242, 173, 38, 4, + 242, 163, 38, 4, 218, 165, 38, 4, 218, 161, 38, 4, 228, 202, 38, 4, 252, + 86, 38, 4, 251, 248, 38, 4, 234, 29, 38, 4, 236, 18, 38, 4, 233, 219, 38, + 4, 244, 195, 38, 4, 245, 92, 38, 4, 219, 56, 38, 4, 221, 0, 38, 4, 221, + 223, 38, 4, 249, 16, 38, 4, 249, 21, 38, 4, 234, 231, 38, 4, 227, 22, 38, + 4, 247, 111, 38, 4, 232, 148, 38, 4, 223, 103, 38, 4, 224, 170, 38, 4, + 217, 13, 38, 4, 217, 60, 38, 4, 250, 92, 38, 4, 237, 43, 38, 4, 232, 0, + 38, 4, 217, 200, 38, 4, 236, 7, 38, 4, 232, 93, 38, 4, 244, 17, 38, 4, + 233, 99, 38, 4, 231, 144, 38, 4, 231, 50, 38, 4, 74, 38, 4, 230, 138, 38, + 4, 232, 81, 38, 4, 243, 4, 38, 4, 242, 249, 38, 4, 218, 187, 38, 4, 218, + 181, 38, 4, 229, 37, 38, 4, 252, 88, 38, 4, 252, 41, 38, 4, 234, 31, 38, + 4, 236, 20, 38, 4, 233, 221, 38, 4, 244, 198, 38, 4, 244, 197, 38, 4, + 245, 139, 38, 4, 219, 72, 38, 4, 101, 38, 4, 221, 239, 38, 4, 249, 19, + 38, 4, 249, 23, 38, 4, 235, 12, 38, 4, 227, 75, 38, 4, 248, 167, 38, 4, + 232, 154, 38, 4, 224, 26, 38, 4, 224, 200, 38, 4, 217, 21, 38, 4, 217, + 65, 38, 4, 250, 182, 38, 4, 237, 59, 38, 4, 232, 5, 38, 4, 217, 231, 38, + 4, 236, 57, 38, 4, 232, 95, 38, 4, 244, 68, 38, 4, 233, 136, 38, 4, 231, + 204, 38, 4, 231, 56, 38, 4, 73, 38, 4, 246, 197, 38, 4, 232, 104, 38, 4, + 243, 162, 38, 4, 243, 138, 38, 4, 218, 227, 38, 4, 218, 220, 38, 4, 229, + 198, 38, 4, 252, 92, 38, 4, 252, 144, 38, 4, 234, 35, 38, 4, 236, 24, 38, + 4, 236, 22, 38, 4, 233, 224, 38, 4, 244, 202, 38, 4, 244, 200, 38, 4, + 245, 231, 38, 4, 219, 165, 38, 4, 222, 87, 38, 4, 222, 22, 38, 4, 249, + 29, 38, 4, 249, 26, 38, 4, 235, 122, 38, 4, 227, 216, 38, 4, 249, 92, 38, + 4, 232, 164, 38, 4, 226, 94, 38, 4, 224, 246, 38, 4, 217, 92, 38, 4, 217, + 72, 38, 4, 251, 99, 38, 4, 237, 114, 38, 4, 232, 15, 38, 4, 218, 25, 38, + 4, 236, 184, 38, 4, 232, 99, 38, 4, 232, 97, 38, 4, 244, 191, 38, 4, 244, + 181, 38, 4, 234, 25, 38, 4, 232, 141, 38, 4, 231, 73, 38, 4, 232, 117, + 38, 4, 235, 93, 38, 250, 168, 38, 245, 90, 223, 136, 38, 228, 82, 78, 38, + 4, 232, 153, 246, 8, 38, 4, 232, 153, 175, 38, 4, 232, 153, 224, 14, 38, + 16, 245, 223, 38, 16, 236, 182, 38, 16, 221, 174, 38, 16, 232, 38, 38, + 16, 252, 205, 38, 16, 246, 7, 38, 16, 222, 152, 38, 16, 249, 165, 38, 16, + 248, 149, 38, 16, 235, 253, 38, 16, 221, 125, 38, 16, 248, 166, 38, 16, + 237, 51, 38, 20, 217, 84, 38, 20, 107, 38, 20, 103, 38, 20, 160, 38, 20, + 154, 38, 20, 174, 38, 20, 182, 38, 20, 191, 38, 20, 185, 38, 20, 190, 38, + 4, 232, 153, 196, 38, 4, 232, 153, 248, 167, 31, 6, 1, 217, 88, 31, 3, 1, + 217, 88, 31, 6, 1, 247, 71, 31, 3, 1, 247, 71, 31, 6, 1, 210, 247, 73, + 31, 3, 1, 210, 247, 73, 31, 6, 1, 237, 162, 31, 3, 1, 237, 162, 31, 6, 1, + 248, 181, 31, 3, 1, 248, 181, 31, 6, 1, 233, 123, 220, 102, 31, 3, 1, + 233, 123, 220, 102, 31, 6, 1, 252, 2, 230, 143, 31, 3, 1, 252, 2, 230, + 143, 31, 6, 1, 232, 123, 218, 11, 31, 3, 1, 232, 123, 218, 11, 31, 6, 1, + 218, 8, 2, 252, 234, 218, 11, 31, 3, 1, 218, 8, 2, 252, 234, 218, 11, 31, + 6, 1, 237, 160, 218, 36, 31, 3, 1, 237, 160, 218, 36, 31, 6, 1, 210, 217, + 200, 31, 3, 1, 210, 217, 200, 31, 6, 1, 237, 160, 60, 31, 3, 1, 237, 160, + 60, 31, 6, 1, 250, 197, 235, 25, 217, 178, 31, 3, 1, 250, 197, 235, 25, + 217, 178, 31, 6, 1, 252, 46, 217, 178, 31, 3, 1, 252, 46, 217, 178, 31, + 6, 1, 237, 160, 250, 197, 235, 25, 217, 178, 31, 3, 1, 237, 160, 250, + 197, 235, 25, 217, 178, 31, 6, 1, 217, 233, 31, 3, 1, 217, 233, 31, 6, 1, + 224, 21, 249, 92, 31, 3, 1, 224, 21, 249, 92, 31, 6, 1, 224, 21, 246, + 217, 31, 3, 1, 224, 21, 246, 217, 31, 6, 1, 224, 21, 246, 205, 31, 3, 1, + 224, 21, 246, 205, 31, 6, 1, 233, 127, 74, 31, 3, 1, 233, 127, 74, 31, 6, + 1, 252, 70, 74, 31, 3, 1, 252, 70, 74, 31, 6, 1, 51, 233, 127, 74, 31, 3, + 1, 51, 233, 127, 74, 31, 1, 233, 86, 74, 36, 31, 219, 42, 36, 31, 222, + 66, 233, 162, 55, 36, 31, 242, 162, 233, 162, 55, 36, 31, 221, 232, 233, + 162, 55, 224, 53, 253, 251, 36, 31, 236, 194, 36, 31, 229, 203, 31, 236, + 194, 31, 229, 203, 31, 6, 1, 247, 82, 31, 3, 1, 247, 82, 31, 6, 1, 247, + 64, 31, 3, 1, 247, 64, 31, 6, 1, 217, 50, 31, 3, 1, 217, 50, 31, 6, 1, + 251, 108, 31, 3, 1, 251, 108, 31, 6, 1, 247, 63, 31, 3, 1, 247, 63, 31, + 6, 1, 222, 88, 2, 233, 193, 96, 31, 3, 1, 222, 88, 2, 233, 193, 96, 31, + 6, 1, 220, 223, 31, 3, 1, 220, 223, 31, 6, 1, 221, 33, 31, 3, 1, 221, 33, + 31, 6, 1, 221, 37, 31, 3, 1, 221, 37, 31, 6, 1, 222, 93, 31, 3, 1, 222, + 93, 31, 6, 1, 242, 151, 31, 3, 1, 242, 151, 31, 6, 1, 224, 155, 31, 3, 1, + 224, 155, 139, 1, 60, 139, 1, 175, 139, 1, 68, 139, 1, 236, 7, 139, 1, + 246, 250, 139, 1, 227, 200, 139, 1, 222, 142, 139, 1, 74, 139, 1, 231, + 67, 139, 1, 72, 139, 1, 235, 188, 139, 1, 187, 139, 1, 227, 98, 139, 1, + 227, 143, 139, 1, 235, 117, 139, 1, 234, 15, 139, 1, 222, 152, 139, 1, + 232, 168, 139, 1, 232, 17, 139, 1, 189, 139, 1, 223, 43, 139, 1, 233, 99, + 139, 1, 224, 216, 139, 1, 224, 140, 139, 1, 224, 225, 139, 1, 225, 44, + 139, 1, 235, 208, 139, 1, 236, 159, 139, 1, 231, 116, 139, 1, 231, 144, + 139, 1, 231, 255, 139, 1, 217, 214, 139, 1, 224, 170, 139, 1, 217, 182, + 139, 1, 184, 139, 1, 231, 147, 139, 1, 236, 157, 139, 1, 229, 145, 139, + 1, 232, 14, 139, 1, 231, 146, 139, 1, 228, 199, 139, 1, 218, 164, 139, 1, + 229, 191, 139, 1, 245, 226, 139, 1, 227, 22, 139, 1, 234, 231, 139, 1, + 233, 196, 139, 1, 232, 62, 139, 1, 227, 161, 139, 1, 227, 249, 139, 1, + 236, 168, 139, 1, 232, 86, 139, 1, 232, 100, 139, 1, 232, 115, 139, 1, + 224, 200, 139, 1, 228, 200, 139, 1, 245, 92, 139, 1, 245, 136, 139, 1, + 219, 7, 139, 1, 208, 139, 1, 235, 67, 139, 1, 229, 108, 139, 1, 234, 244, + 139, 1, 236, 57, 139, 1, 234, 33, 139, 1, 227, 187, 139, 1, 233, 251, + 139, 1, 196, 139, 1, 221, 205, 139, 1, 236, 113, 139, 1, 233, 136, 139, + 1, 234, 36, 139, 1, 222, 50, 139, 1, 236, 26, 139, 1, 222, 65, 139, 1, + 231, 145, 139, 1, 226, 147, 139, 1, 246, 4, 139, 1, 236, 28, 139, 1, 236, + 54, 139, 36, 164, 236, 36, 139, 36, 164, 220, 250, 139, 232, 16, 139, + 245, 90, 223, 136, 139, 250, 175, 139, 250, 168, 139, 225, 67, 139, 228, + 82, 78, 58, 1, 251, 21, 145, 217, 241, 229, 72, 58, 1, 251, 21, 145, 218, + 46, 229, 72, 58, 1, 251, 21, 145, 217, 241, 225, 8, 58, 1, 251, 21, 145, + 218, 46, 225, 8, 58, 1, 251, 21, 145, 217, 241, 228, 98, 58, 1, 251, 21, + 145, 218, 46, 228, 98, 58, 1, 251, 21, 145, 217, 241, 227, 22, 58, 1, + 251, 21, 145, 218, 46, 227, 22, 58, 1, 246, 85, 247, 143, 145, 135, 58, + 1, 116, 247, 143, 145, 135, 58, 1, 233, 194, 247, 143, 145, 135, 58, 1, + 109, 247, 143, 145, 135, 58, 1, 246, 84, 247, 143, 145, 135, 58, 1, 246, + 85, 247, 143, 235, 109, 145, 135, 58, 1, 116, 247, 143, 235, 109, 145, + 135, 58, 1, 233, 194, 247, 143, 235, 109, 145, 135, 58, 1, 109, 247, 143, + 235, 109, 145, 135, 58, 1, 246, 84, 247, 143, 235, 109, 145, 135, 58, 1, + 246, 85, 235, 109, 145, 135, 58, 1, 116, 235, 109, 145, 135, 58, 1, 233, + 194, 235, 109, 145, 135, 58, 1, 109, 235, 109, 145, 135, 58, 1, 246, 84, + 235, 109, 145, 135, 58, 1, 61, 69, 135, 58, 1, 61, 224, 55, 58, 1, 61, + 186, 135, 58, 1, 234, 237, 45, 250, 124, 254, 119, 58, 1, 227, 241, 108, + 65, 58, 1, 227, 241, 113, 65, 58, 1, 227, 241, 246, 95, 78, 58, 1, 227, + 241, 237, 170, 246, 95, 78, 58, 1, 109, 237, 170, 246, 95, 78, 58, 1, + 223, 125, 25, 116, 221, 132, 58, 1, 223, 125, 25, 109, 221, 132, 7, 6, 1, + 246, 241, 254, 168, 7, 3, 1, 246, 241, 254, 168, 7, 6, 1, 246, 241, 254, + 191, 7, 3, 1, 246, 241, 254, 191, 7, 6, 1, 243, 136, 7, 3, 1, 243, 136, + 7, 6, 1, 220, 189, 7, 3, 1, 220, 189, 7, 6, 1, 221, 94, 7, 3, 1, 221, 94, + 7, 6, 1, 250, 90, 7, 3, 1, 250, 90, 7, 6, 1, 250, 91, 2, 250, 168, 7, 3, + 1, 250, 91, 2, 250, 168, 7, 1, 3, 6, 246, 74, 7, 1, 3, 6, 198, 7, 6, 1, + 255, 58, 7, 3, 1, 255, 58, 7, 6, 1, 254, 93, 7, 3, 1, 254, 93, 7, 6, 1, + 253, 232, 7, 3, 1, 253, 232, 7, 6, 1, 253, 220, 7, 3, 1, 253, 220, 7, 6, + 1, 253, 221, 2, 186, 135, 7, 3, 1, 253, 221, 2, 186, 135, 7, 6, 1, 253, + 212, 7, 3, 1, 253, 212, 7, 6, 1, 210, 251, 203, 2, 248, 145, 7, 3, 1, + 210, 251, 203, 2, 248, 145, 7, 6, 1, 237, 18, 2, 92, 7, 3, 1, 237, 18, 2, + 92, 7, 6, 1, 237, 18, 2, 249, 11, 92, 7, 3, 1, 237, 18, 2, 249, 11, 92, + 7, 6, 1, 237, 18, 2, 214, 25, 249, 11, 92, 7, 3, 1, 237, 18, 2, 214, 25, + 249, 11, 92, 7, 6, 1, 252, 1, 153, 7, 3, 1, 252, 1, 153, 7, 6, 1, 235, + 202, 2, 116, 92, 7, 3, 1, 235, 202, 2, 116, 92, 7, 6, 1, 142, 2, 171, + 214, 230, 74, 7, 3, 1, 142, 2, 171, 214, 230, 74, 7, 6, 1, 142, 2, 234, + 247, 7, 3, 1, 142, 2, 234, 247, 7, 6, 1, 230, 127, 7, 3, 1, 230, 127, 7, + 6, 1, 230, 60, 2, 214, 221, 225, 249, 48, 7, 3, 1, 230, 60, 2, 214, 221, + 225, 249, 48, 7, 6, 1, 230, 60, 2, 245, 146, 7, 3, 1, 230, 60, 2, 245, + 146, 7, 6, 1, 230, 60, 2, 223, 222, 222, 135, 7, 3, 1, 230, 60, 2, 223, + 222, 222, 135, 7, 6, 1, 228, 164, 2, 214, 221, 225, 249, 48, 7, 3, 1, + 228, 164, 2, 214, 221, 225, 249, 48, 7, 6, 1, 228, 164, 2, 249, 11, 92, + 7, 3, 1, 228, 164, 2, 249, 11, 92, 7, 6, 1, 228, 39, 227, 58, 7, 3, 1, + 228, 39, 227, 58, 7, 6, 1, 227, 14, 227, 58, 7, 3, 1, 227, 14, 227, 58, + 7, 6, 1, 220, 11, 2, 249, 11, 92, 7, 3, 1, 220, 11, 2, 249, 11, 92, 7, 6, + 1, 219, 48, 7, 3, 1, 219, 48, 7, 6, 1, 219, 75, 217, 157, 7, 3, 1, 219, + 75, 217, 157, 7, 6, 1, 221, 235, 2, 92, 7, 3, 1, 221, 235, 2, 92, 7, 6, + 1, 221, 235, 2, 214, 221, 225, 249, 48, 7, 3, 1, 221, 235, 2, 214, 221, + 225, 249, 48, 7, 6, 1, 219, 157, 7, 3, 1, 219, 157, 7, 6, 1, 246, 123, 7, + 3, 1, 246, 123, 7, 6, 1, 237, 151, 7, 3, 1, 237, 151, 7, 6, 1, 250, 158, + 7, 3, 1, 250, 158, 58, 1, 220, 34, 7, 3, 1, 247, 102, 7, 3, 1, 234, 219, + 7, 3, 1, 233, 80, 7, 3, 1, 231, 109, 7, 3, 1, 227, 13, 7, 1, 3, 6, 227, + 13, 7, 3, 1, 220, 249, 7, 3, 1, 220, 94, 7, 6, 1, 237, 188, 250, 46, 7, + 3, 1, 237, 188, 250, 46, 7, 6, 1, 237, 188, 246, 74, 7, 3, 1, 237, 188, + 246, 74, 7, 6, 1, 237, 188, 245, 67, 7, 6, 1, 215, 237, 188, 245, 67, 7, + 3, 1, 215, 237, 188, 245, 67, 7, 6, 1, 215, 153, 7, 3, 1, 215, 153, 7, 6, + 1, 237, 188, 152, 7, 3, 1, 237, 188, 152, 7, 6, 1, 237, 188, 198, 7, 3, + 1, 237, 188, 198, 7, 6, 1, 237, 188, 222, 201, 7, 3, 1, 237, 188, 222, + 201, 58, 1, 109, 250, 217, 255, 0, 58, 1, 250, 175, 58, 1, 224, 192, 246, + 154, 55, 7, 6, 1, 226, 150, 7, 3, 1, 226, 150, 7, 246, 158, 1, 210, 246, + 74, 7, 246, 158, 1, 210, 230, 59, 7, 246, 158, 1, 237, 170, 189, 7, 246, + 158, 1, 242, 107, 234, 250, 7, 246, 158, 1, 254, 49, 189, 223, 19, 232, + 225, 1, 60, 223, 19, 232, 225, 1, 72, 223, 19, 232, 225, 5, 247, 84, 223, + 19, 232, 225, 1, 68, 223, 19, 232, 225, 1, 73, 223, 19, 232, 225, 1, 74, + 223, 19, 232, 225, 5, 243, 175, 223, 19, 232, 225, 1, 236, 57, 223, 19, + 232, 225, 1, 236, 125, 223, 19, 232, 225, 1, 244, 68, 223, 19, 232, 225, + 1, 244, 112, 223, 19, 232, 225, 5, 254, 95, 223, 19, 232, 225, 1, 250, + 182, 223, 19, 232, 225, 1, 251, 11, 223, 19, 232, 225, 1, 237, 59, 223, + 19, 232, 225, 1, 237, 99, 223, 19, 232, 225, 1, 221, 11, 223, 19, 232, + 225, 1, 221, 15, 223, 19, 232, 225, 1, 249, 107, 223, 19, 232, 225, 1, + 249, 115, 223, 19, 232, 225, 1, 101, 223, 19, 232, 225, 1, 221, 239, 223, + 19, 232, 225, 1, 248, 167, 223, 19, 232, 225, 1, 249, 19, 223, 19, 232, + 225, 1, 231, 204, 223, 19, 232, 225, 1, 229, 37, 223, 19, 232, 225, 1, + 229, 118, 223, 19, 232, 225, 1, 252, 41, 223, 19, 232, 225, 1, 252, 88, + 223, 19, 232, 225, 1, 233, 136, 223, 19, 232, 225, 1, 227, 75, 223, 19, + 232, 225, 1, 235, 12, 223, 19, 232, 225, 1, 227, 44, 223, 19, 232, 225, + 1, 224, 26, 223, 19, 232, 225, 1, 243, 4, 223, 19, 232, 225, 29, 5, 60, + 223, 19, 232, 225, 29, 5, 72, 223, 19, 232, 225, 29, 5, 68, 223, 19, 232, + 225, 29, 5, 73, 223, 19, 232, 225, 29, 5, 230, 127, 223, 19, 232, 225, + 229, 33, 234, 67, 223, 19, 232, 225, 229, 33, 234, 66, 223, 19, 232, 225, + 229, 33, 234, 65, 223, 19, 232, 225, 229, 33, 234, 64, 231, 187, 237, + 212, 245, 108, 131, 228, 89, 231, 187, 237, 212, 245, 108, 131, 243, 194, + 231, 187, 237, 212, 245, 108, 148, 228, 87, 231, 187, 237, 212, 245, 108, + 131, 224, 75, 231, 187, 237, 212, 245, 108, 131, 246, 231, 231, 187, 237, + 212, 245, 108, 148, 224, 74, 231, 187, 237, 212, 228, 90, 78, 231, 187, + 237, 212, 229, 56, 78, 231, 187, 237, 212, 227, 4, 78, 231, 187, 237, + 212, 228, 91, 78, 229, 138, 1, 175, 229, 138, 1, 236, 149, 229, 138, 1, + 245, 0, 229, 138, 1, 232, 115, 229, 138, 1, 251, 169, 229, 138, 1, 251, + 69, 229, 138, 1, 237, 123, 229, 138, 1, 231, 77, 229, 138, 1, 222, 155, + 229, 138, 1, 222, 35, 229, 138, 1, 249, 207, 229, 138, 1, 208, 229, 138, + 1, 187, 229, 138, 1, 229, 141, 229, 138, 1, 252, 237, 229, 138, 1, 196, + 229, 138, 1, 221, 55, 229, 138, 1, 221, 47, 229, 138, 1, 247, 74, 229, + 138, 1, 219, 7, 229, 138, 1, 217, 80, 229, 138, 1, 217, 114, 229, 138, 1, + 3, 60, 229, 138, 1, 184, 229, 138, 1, 203, 229, 138, 1, 235, 188, 229, + 138, 1, 225, 25, 229, 138, 1, 226, 177, 229, 138, 1, 155, 229, 138, 1, + 60, 229, 138, 1, 72, 229, 138, 1, 68, 229, 138, 1, 73, 229, 138, 1, 74, + 229, 138, 1, 228, 155, 229, 138, 1, 218, 138, 229, 138, 1, 246, 8, 229, + 138, 1, 244, 160, 229, 138, 1, 246, 250, 229, 138, 223, 97, 1, 219, 7, + 229, 138, 223, 97, 1, 184, 229, 138, 1, 221, 29, 229, 138, 1, 221, 19, + 229, 138, 1, 249, 132, 229, 138, 1, 231, 217, 229, 138, 1, 254, 144, 184, + 229, 138, 1, 219, 69, 225, 25, 229, 138, 1, 219, 70, 155, 229, 138, 1, + 254, 1, 246, 8, 229, 138, 223, 97, 1, 203, 229, 138, 223, 61, 1, 203, + 229, 138, 1, 251, 146, 229, 138, 224, 109, 243, 160, 78, 229, 138, 51, + 243, 160, 78, 229, 138, 164, 225, 18, 229, 138, 164, 51, 225, 18, 158, 5, + 254, 95, 158, 5, 219, 77, 158, 1, 60, 158, 1, 255, 58, 158, 1, 72, 158, + 1, 237, 255, 158, 1, 68, 158, 1, 220, 23, 158, 1, 167, 152, 158, 1, 167, + 227, 53, 158, 1, 167, 153, 158, 1, 167, 235, 18, 158, 1, 73, 158, 1, 246, + 250, 158, 1, 254, 196, 158, 1, 74, 158, 1, 230, 127, 158, 1, 253, 232, + 158, 1, 175, 158, 1, 236, 149, 158, 1, 245, 0, 158, 1, 244, 125, 158, 1, + 232, 115, 158, 1, 251, 169, 158, 1, 251, 69, 158, 1, 237, 123, 158, 1, + 237, 103, 158, 1, 231, 77, 158, 1, 221, 29, 158, 1, 221, 19, 158, 1, 249, + 132, 158, 1, 249, 116, 158, 1, 231, 217, 158, 1, 222, 155, 158, 1, 222, + 35, 158, 1, 249, 207, 158, 1, 249, 36, 158, 1, 208, 158, 1, 187, 158, 1, + 229, 141, 158, 1, 252, 237, 158, 1, 252, 94, 158, 1, 196, 158, 1, 184, + 158, 1, 203, 158, 1, 235, 188, 158, 1, 219, 189, 158, 1, 225, 25, 158, 1, + 223, 218, 158, 1, 226, 177, 158, 1, 155, 158, 1, 235, 17, 158, 250, 147, + 5, 243, 209, 158, 29, 5, 255, 58, 158, 29, 5, 72, 158, 29, 5, 237, 255, + 158, 29, 5, 68, 158, 29, 5, 220, 23, 158, 29, 5, 167, 152, 158, 29, 5, + 167, 227, 53, 158, 29, 5, 167, 153, 158, 29, 5, 167, 235, 18, 158, 29, 5, + 73, 158, 29, 5, 246, 250, 158, 29, 5, 254, 196, 158, 29, 5, 74, 158, 29, + 5, 230, 127, 158, 29, 5, 253, 232, 158, 5, 219, 82, 158, 249, 167, 158, + 51, 249, 167, 158, 20, 217, 84, 158, 20, 107, 158, 20, 103, 158, 20, 160, + 158, 20, 154, 158, 20, 174, 158, 20, 182, 158, 20, 191, 158, 20, 185, + 158, 20, 190, 36, 80, 20, 217, 84, 36, 80, 20, 107, 36, 80, 20, 103, 36, + 80, 20, 160, 36, 80, 20, 154, 36, 80, 20, 174, 36, 80, 20, 182, 36, 80, + 20, 191, 36, 80, 20, 185, 36, 80, 20, 190, 36, 80, 1, 60, 36, 80, 1, 68, + 36, 80, 1, 175, 36, 80, 1, 208, 36, 80, 1, 187, 36, 80, 1, 203, 36, 80, + 1, 219, 94, 36, 80, 5, 253, 219, 80, 5, 223, 253, 251, 146, 80, 5, 251, + 147, 219, 82, 80, 5, 51, 251, 147, 219, 82, 80, 5, 251, 147, 103, 80, 5, + 251, 147, 160, 80, 5, 251, 147, 253, 219, 80, 5, 228, 186, 80, 244, 224, + 245, 185, 80, 251, 134, 80, 243, 155, 236, 190, 235, 68, 20, 217, 84, + 236, 190, 235, 68, 20, 107, 236, 190, 235, 68, 20, 103, 236, 190, 235, + 68, 20, 160, 236, 190, 235, 68, 20, 154, 236, 190, 235, 68, 20, 174, 236, + 190, 235, 68, 20, 182, 236, 190, 235, 68, 20, 191, 236, 190, 235, 68, 20, + 185, 236, 190, 235, 68, 20, 190, 236, 190, 235, 68, 1, 175, 236, 190, + 235, 68, 1, 236, 149, 236, 190, 235, 68, 1, 245, 0, 236, 190, 235, 68, 1, + 232, 115, 236, 190, 235, 68, 1, 226, 177, 236, 190, 235, 68, 1, 225, 25, + 236, 190, 235, 68, 1, 217, 114, 236, 190, 235, 68, 1, 231, 77, 236, 190, + 235, 68, 1, 222, 155, 236, 190, 235, 68, 1, 242, 175, 236, 190, 235, 68, + 1, 208, 236, 190, 235, 68, 1, 187, 236, 190, 235, 68, 1, 229, 141, 236, + 190, 235, 68, 1, 196, 236, 190, 235, 68, 1, 249, 207, 236, 190, 235, 68, + 1, 252, 237, 236, 190, 235, 68, 1, 203, 236, 190, 235, 68, 1, 184, 236, + 190, 235, 68, 1, 235, 188, 236, 190, 235, 68, 1, 219, 7, 236, 190, 235, + 68, 1, 222, 35, 236, 190, 235, 68, 1, 155, 236, 190, 235, 68, 1, 219, + 189, 236, 190, 235, 68, 1, 251, 169, 236, 190, 235, 68, 1, 60, 236, 190, + 235, 68, 1, 230, 167, 236, 190, 235, 68, 1, 72, 236, 190, 235, 68, 1, + 230, 127, 236, 190, 235, 68, 29, 220, 110, 236, 190, 235, 68, 29, 73, + 236, 190, 235, 68, 29, 68, 236, 190, 235, 68, 29, 246, 250, 236, 190, + 235, 68, 29, 74, 236, 190, 235, 68, 145, 229, 48, 236, 190, 235, 68, 145, + 251, 157, 236, 190, 235, 68, 145, 251, 158, 229, 48, 236, 190, 235, 68, + 5, 250, 62, 236, 190, 235, 68, 5, 224, 148, 227, 194, 1, 175, 227, 194, + 1, 245, 0, 227, 194, 1, 232, 115, 227, 194, 1, 222, 155, 227, 194, 1, + 249, 207, 227, 194, 1, 208, 227, 194, 1, 187, 227, 194, 1, 252, 237, 227, + 194, 1, 196, 227, 194, 1, 251, 169, 227, 194, 1, 237, 123, 227, 194, 1, + 231, 77, 227, 194, 1, 226, 177, 227, 194, 1, 203, 227, 194, 1, 235, 188, + 227, 194, 1, 184, 227, 194, 1, 219, 7, 227, 194, 1, 155, 227, 194, 1, + 234, 37, 227, 194, 1, 232, 100, 227, 194, 1, 232, 169, 227, 194, 1, 231, + 57, 227, 194, 1, 60, 227, 194, 29, 5, 72, 227, 194, 29, 5, 68, 227, 194, + 29, 5, 73, 227, 194, 29, 5, 254, 196, 227, 194, 29, 5, 74, 227, 194, 29, + 5, 253, 232, 227, 194, 29, 5, 246, 115, 227, 194, 29, 5, 247, 16, 227, + 194, 250, 147, 5, 232, 117, 227, 194, 250, 147, 5, 207, 227, 194, 250, + 147, 5, 152, 227, 194, 250, 147, 5, 243, 225, 227, 194, 219, 82, 227, + 194, 226, 87, 78, 22, 91, 221, 188, 22, 91, 221, 187, 22, 91, 221, 185, + 22, 91, 221, 190, 22, 91, 227, 135, 22, 91, 227, 119, 22, 91, 227, 114, + 22, 91, 227, 116, 22, 91, 227, 132, 22, 91, 227, 125, 22, 91, 227, 118, + 22, 91, 227, 137, 22, 91, 227, 120, 22, 91, 227, 139, 22, 91, 227, 136, + 22, 91, 233, 183, 22, 91, 233, 174, 22, 91, 233, 177, 22, 91, 229, 84, + 22, 91, 229, 95, 22, 91, 229, 96, 22, 91, 223, 203, 22, 91, 238, 12, 22, + 91, 238, 19, 22, 91, 223, 214, 22, 91, 223, 201, 22, 91, 229, 126, 22, + 91, 243, 101, 22, 91, 223, 198, 133, 5, 229, 252, 133, 5, 251, 96, 133, + 5, 235, 130, 133, 5, 218, 197, 133, 1, 60, 133, 1, 242, 107, 236, 193, + 133, 1, 72, 133, 1, 237, 255, 133, 1, 68, 133, 1, 230, 44, 251, 73, 133, + 1, 232, 116, 235, 98, 133, 1, 232, 116, 235, 99, 227, 229, 133, 1, 73, + 133, 1, 254, 196, 133, 1, 74, 133, 1, 175, 133, 1, 206, 226, 128, 133, 1, + 206, 233, 67, 133, 1, 245, 0, 133, 1, 245, 1, 233, 67, 133, 1, 232, 115, + 133, 1, 251, 169, 133, 1, 251, 170, 233, 67, 133, 1, 237, 123, 133, 1, + 231, 78, 233, 67, 133, 1, 237, 124, 234, 103, 133, 1, 231, 77, 133, 1, + 221, 29, 133, 1, 221, 30, 234, 103, 133, 1, 249, 132, 133, 1, 249, 133, + 234, 103, 133, 1, 232, 238, 233, 67, 133, 1, 222, 155, 133, 1, 222, 156, + 233, 67, 133, 1, 249, 207, 133, 1, 249, 208, 234, 103, 133, 1, 208, 133, + 1, 187, 133, 1, 230, 44, 233, 67, 133, 1, 252, 237, 133, 1, 252, 238, + 233, 67, 133, 1, 196, 133, 1, 184, 133, 1, 203, 133, 1, 228, 3, 254, 203, + 133, 1, 235, 188, 133, 1, 219, 7, 133, 1, 226, 178, 233, 67, 133, 1, 226, + 178, 234, 103, 133, 1, 226, 177, 133, 1, 155, 133, 5, 251, 97, 222, 68, + 133, 29, 5, 222, 111, 133, 29, 5, 221, 135, 133, 29, 5, 218, 162, 133, + 29, 5, 218, 163, 234, 5, 133, 29, 5, 223, 77, 133, 29, 5, 223, 78, 233, + 250, 133, 29, 5, 222, 124, 133, 29, 5, 248, 207, 233, 66, 133, 29, 5, + 229, 171, 133, 250, 147, 5, 236, 161, 133, 250, 147, 5, 229, 179, 133, + 250, 147, 5, 251, 162, 133, 230, 6, 133, 42, 227, 176, 133, 45, 227, 176, + 133, 230, 36, 254, 125, 133, 230, 36, 234, 107, 133, 230, 36, 234, 223, + 133, 230, 36, 218, 193, 133, 230, 36, 230, 7, 133, 230, 36, 235, 35, 133, + 230, 36, 234, 217, 133, 230, 36, 254, 239, 133, 230, 36, 254, 240, 254, + 239, 133, 230, 36, 229, 65, 133, 215, 230, 36, 229, 65, 133, 230, 4, 133, + 20, 217, 84, 133, 20, 107, 133, 20, 103, 133, 20, 160, 133, 20, 154, 133, + 20, 174, 133, 20, 182, 133, 20, 191, 133, 20, 185, 133, 20, 190, 133, + 230, 36, 221, 163, 220, 248, 133, 230, 36, 237, 147, 149, 1, 60, 149, 1, + 72, 149, 1, 68, 149, 1, 73, 149, 1, 254, 196, 149, 1, 74, 149, 1, 175, + 149, 1, 236, 149, 149, 1, 245, 0, 149, 1, 244, 125, 149, 1, 232, 73, 149, + 1, 232, 115, 149, 1, 251, 69, 149, 1, 251, 33, 149, 1, 237, 123, 149, 1, + 237, 103, 149, 1, 232, 64, 149, 1, 232, 66, 149, 1, 232, 65, 149, 1, 222, + 155, 149, 1, 222, 35, 149, 1, 249, 207, 149, 1, 249, 36, 149, 1, 231, + 114, 149, 1, 208, 149, 1, 249, 132, 149, 1, 187, 149, 1, 229, 6, 149, 1, + 229, 141, 149, 1, 252, 237, 149, 1, 252, 94, 149, 1, 233, 94, 149, 1, + 196, 149, 1, 252, 178, 149, 1, 184, 149, 1, 203, 149, 1, 235, 188, 149, + 1, 219, 189, 149, 1, 223, 218, 149, 1, 226, 177, 149, 1, 155, 149, 29, 5, + 255, 58, 149, 29, 5, 72, 149, 29, 5, 237, 255, 149, 29, 5, 246, 237, 149, + 29, 5, 68, 149, 29, 5, 230, 167, 149, 29, 5, 74, 149, 29, 5, 254, 196, + 149, 29, 5, 253, 232, 149, 29, 5, 220, 110, 149, 250, 147, 5, 184, 149, + 250, 147, 5, 203, 149, 250, 147, 5, 235, 188, 149, 250, 147, 5, 219, 7, + 149, 1, 39, 237, 17, 149, 1, 39, 245, 67, 149, 1, 39, 232, 117, 149, 250, + 147, 5, 39, 232, 117, 149, 1, 39, 251, 70, 149, 1, 39, 222, 201, 149, 1, + 39, 207, 149, 1, 39, 230, 59, 149, 1, 39, 218, 90, 149, 1, 39, 152, 149, + 1, 39, 153, 149, 1, 39, 223, 219, 149, 250, 147, 5, 39, 189, 149, 250, + 147, 5, 39, 243, 225, 149, 20, 217, 84, 149, 20, 107, 149, 20, 103, 149, + 20, 160, 149, 20, 154, 149, 20, 174, 149, 20, 182, 149, 20, 191, 149, 20, + 185, 149, 20, 190, 149, 228, 197, 223, 242, 149, 228, 197, 249, 167, 149, + 228, 197, 51, 249, 167, 149, 228, 197, 221, 78, 249, 167, 63, 1, 236, + 143, 245, 0, 63, 1, 236, 143, 251, 169, 63, 1, 236, 143, 251, 69, 63, 1, + 236, 143, 237, 123, 63, 1, 236, 143, 237, 103, 63, 1, 236, 143, 231, 77, + 63, 1, 236, 143, 221, 29, 63, 1, 236, 143, 221, 19, 63, 1, 236, 143, 249, + 132, 63, 1, 236, 143, 249, 116, 63, 1, 236, 143, 249, 36, 63, 1, 236, + 143, 208, 63, 1, 236, 143, 226, 177, 63, 1, 236, 143, 155, 63, 1, 236, + 143, 243, 121, 63, 1, 236, 143, 246, 8, 63, 58, 1, 236, 143, 227, 201, + 63, 1, 236, 143, 218, 138, 63, 1, 236, 143, 217, 114, 63, 1, 236, 143, + 203, 63, 235, 6, 236, 143, 230, 182, 63, 235, 6, 236, 143, 228, 111, 63, + 235, 6, 236, 143, 243, 57, 63, 16, 254, 186, 246, 94, 63, 16, 254, 186, + 107, 63, 16, 254, 186, 103, 63, 1, 254, 186, 203, 63, 5, 229, 248, 236, + 213, 221, 132, 37, 177, 1, 109, 236, 57, 37, 177, 1, 116, 236, 57, 37, + 177, 1, 109, 236, 125, 37, 177, 1, 116, 236, 125, 37, 177, 1, 109, 236, + 132, 37, 177, 1, 116, 236, 132, 37, 177, 1, 109, 244, 68, 37, 177, 1, + 116, 244, 68, 37, 177, 1, 109, 232, 84, 37, 177, 1, 116, 232, 84, 37, + 177, 1, 109, 250, 182, 37, 177, 1, 116, 250, 182, 37, 177, 1, 109, 251, + 11, 37, 177, 1, 116, 251, 11, 37, 177, 1, 109, 224, 26, 37, 177, 1, 116, + 224, 26, 37, 177, 1, 109, 231, 56, 37, 177, 1, 116, 231, 56, 37, 177, 1, + 109, 248, 167, 37, 177, 1, 116, 248, 167, 37, 177, 1, 109, 101, 37, 177, + 1, 116, 101, 37, 177, 1, 109, 221, 239, 37, 177, 1, 116, 221, 239, 37, + 177, 1, 109, 231, 204, 37, 177, 1, 116, 231, 204, 37, 177, 1, 109, 252, + 41, 37, 177, 1, 116, 252, 41, 37, 177, 1, 109, 229, 37, 37, 177, 1, 116, + 229, 37, 37, 177, 1, 109, 229, 118, 37, 177, 1, 116, 229, 118, 37, 177, + 1, 109, 245, 139, 37, 177, 1, 116, 245, 139, 37, 177, 1, 109, 233, 136, + 37, 177, 1, 116, 233, 136, 37, 177, 1, 109, 217, 231, 37, 177, 1, 116, + 217, 231, 37, 177, 1, 109, 227, 75, 37, 177, 1, 116, 227, 75, 37, 177, 1, + 109, 235, 12, 37, 177, 1, 116, 235, 12, 37, 177, 1, 109, 219, 72, 37, + 177, 1, 116, 219, 72, 37, 177, 1, 109, 243, 4, 37, 177, 1, 116, 243, 4, + 37, 177, 1, 109, 74, 37, 177, 1, 116, 74, 37, 177, 234, 100, 236, 229, + 37, 177, 29, 255, 58, 37, 177, 29, 72, 37, 177, 29, 220, 110, 37, 177, + 29, 68, 37, 177, 29, 73, 37, 177, 29, 74, 37, 177, 234, 100, 236, 127, + 37, 177, 29, 242, 72, 37, 177, 29, 220, 109, 37, 177, 29, 220, 123, 37, + 177, 29, 253, 231, 37, 177, 29, 253, 212, 37, 177, 29, 254, 131, 37, 177, + 29, 254, 140, 37, 177, 145, 234, 100, 246, 223, 37, 177, 145, 234, 100, + 231, 113, 37, 177, 145, 234, 100, 221, 239, 37, 177, 145, 234, 100, 224, + 15, 37, 177, 16, 236, 44, 37, 177, 16, 231, 113, 37, 177, 16, 226, 148, + 37, 177, 16, 243, 5, 243, 1, 37, 177, 16, 236, 52, 236, 51, 234, 11, 234, + 43, 1, 236, 49, 234, 11, 234, 43, 1, 226, 148, 234, 11, 234, 43, 1, 235, + 167, 234, 11, 234, 43, 1, 233, 145, 234, 11, 234, 43, 1, 187, 234, 11, + 234, 43, 1, 208, 234, 11, 234, 43, 1, 251, 25, 234, 11, 234, 43, 1, 221, + 181, 234, 11, 234, 43, 1, 236, 121, 234, 11, 234, 43, 1, 232, 76, 234, + 11, 234, 43, 1, 221, 233, 234, 11, 234, 43, 1, 219, 2, 234, 11, 234, 43, + 1, 218, 45, 234, 11, 234, 43, 1, 242, 167, 234, 11, 234, 43, 1, 220, 87, + 234, 11, 234, 43, 1, 72, 234, 11, 234, 43, 1, 229, 136, 234, 11, 234, 43, + 1, 253, 241, 234, 11, 234, 43, 1, 244, 63, 234, 11, 234, 43, 1, 237, 102, + 234, 11, 234, 43, 1, 227, 246, 234, 11, 234, 43, 1, 252, 237, 234, 11, + 234, 43, 1, 237, 91, 234, 11, 234, 43, 1, 248, 232, 234, 11, 234, 43, 1, + 244, 110, 234, 11, 234, 43, 1, 249, 17, 234, 11, 234, 43, 1, 252, 93, + 234, 11, 234, 43, 1, 236, 50, 234, 249, 234, 11, 234, 43, 1, 235, 168, + 234, 249, 234, 11, 234, 43, 1, 233, 146, 234, 249, 234, 11, 234, 43, 1, + 230, 44, 234, 249, 234, 11, 234, 43, 1, 232, 238, 234, 249, 234, 11, 234, + 43, 1, 221, 182, 234, 249, 234, 11, 234, 43, 1, 232, 77, 234, 249, 234, + 11, 234, 43, 1, 242, 107, 234, 249, 234, 11, 234, 43, 29, 5, 230, 137, + 234, 11, 234, 43, 29, 5, 237, 221, 234, 11, 234, 43, 29, 5, 254, 130, + 234, 11, 234, 43, 29, 5, 218, 18, 234, 11, 234, 43, 29, 5, 224, 10, 234, + 11, 234, 43, 29, 5, 220, 85, 234, 11, 234, 43, 29, 5, 251, 40, 234, 11, + 234, 43, 29, 5, 231, 100, 234, 11, 234, 43, 251, 41, 234, 11, 234, 43, + 234, 220, 237, 131, 234, 11, 234, 43, 254, 70, 237, 131, 234, 11, 234, + 43, 20, 217, 84, 234, 11, 234, 43, 20, 107, 234, 11, 234, 43, 20, 103, + 234, 11, 234, 43, 20, 160, 234, 11, 234, 43, 20, 154, 234, 11, 234, 43, + 20, 174, 234, 11, 234, 43, 20, 182, 234, 11, 234, 43, 20, 191, 234, 11, + 234, 43, 20, 185, 234, 11, 234, 43, 20, 190, 22, 122, 231, 6, 22, 122, + 231, 11, 22, 122, 217, 230, 22, 122, 217, 229, 22, 122, 217, 228, 22, + 122, 220, 173, 22, 122, 220, 176, 22, 122, 217, 198, 22, 122, 217, 194, + 22, 122, 246, 114, 22, 122, 246, 112, 22, 122, 246, 113, 22, 122, 246, + 110, 22, 122, 242, 97, 22, 122, 242, 96, 22, 122, 242, 94, 22, 122, 242, + 95, 22, 122, 242, 100, 22, 122, 242, 93, 22, 122, 242, 92, 22, 122, 242, + 102, 22, 122, 254, 59, 22, 122, 254, 58, 22, 85, 232, 48, 22, 85, 232, + 54, 22, 85, 223, 200, 22, 85, 223, 199, 22, 85, 221, 187, 22, 85, 221, + 185, 22, 85, 221, 184, 22, 85, 221, 190, 22, 85, 221, 191, 22, 85, 221, + 183, 22, 85, 227, 119, 22, 85, 227, 134, 22, 85, 223, 206, 22, 85, 227, + 131, 22, 85, 227, 121, 22, 85, 227, 123, 22, 85, 227, 110, 22, 85, 227, + 111, 22, 85, 236, 217, 22, 85, 233, 182, 22, 85, 233, 176, 22, 85, 223, + 210, 22, 85, 233, 179, 22, 85, 233, 185, 22, 85, 229, 80, 22, 85, 229, + 89, 22, 85, 229, 93, 22, 85, 223, 208, 22, 85, 229, 83, 22, 85, 229, 97, + 22, 85, 229, 98, 22, 85, 224, 96, 22, 85, 224, 99, 22, 85, 223, 204, 22, + 85, 223, 202, 22, 85, 224, 94, 22, 85, 224, 102, 22, 85, 224, 103, 22, + 85, 224, 88, 22, 85, 224, 101, 22, 85, 229, 255, 22, 85, 230, 0, 22, 85, + 218, 4, 22, 85, 218, 5, 22, 85, 250, 228, 22, 85, 250, 227, 22, 85, 223, + 215, 22, 85, 229, 124, 22, 85, 229, 123, 9, 13, 239, 244, 9, 13, 239, + 243, 9, 13, 239, 242, 9, 13, 239, 241, 9, 13, 239, 240, 9, 13, 239, 239, + 9, 13, 239, 238, 9, 13, 239, 237, 9, 13, 239, 236, 9, 13, 239, 235, 9, + 13, 239, 234, 9, 13, 239, 233, 9, 13, 239, 232, 9, 13, 239, 231, 9, 13, + 239, 230, 9, 13, 239, 229, 9, 13, 239, 228, 9, 13, 239, 227, 9, 13, 239, + 226, 9, 13, 239, 225, 9, 13, 239, 224, 9, 13, 239, 223, 9, 13, 239, 222, + 9, 13, 239, 221, 9, 13, 239, 220, 9, 13, 239, 219, 9, 13, 239, 218, 9, + 13, 239, 217, 9, 13, 239, 216, 9, 13, 239, 215, 9, 13, 239, 214, 9, 13, + 239, 213, 9, 13, 239, 212, 9, 13, 239, 211, 9, 13, 239, 210, 9, 13, 239, + 209, 9, 13, 239, 208, 9, 13, 239, 207, 9, 13, 239, 206, 9, 13, 239, 205, + 9, 13, 239, 204, 9, 13, 239, 203, 9, 13, 239, 202, 9, 13, 239, 201, 9, + 13, 239, 200, 9, 13, 239, 199, 9, 13, 239, 198, 9, 13, 239, 197, 9, 13, + 239, 196, 9, 13, 239, 195, 9, 13, 239, 194, 9, 13, 239, 193, 9, 13, 239, + 192, 9, 13, 239, 191, 9, 13, 239, 190, 9, 13, 239, 189, 9, 13, 239, 188, + 9, 13, 239, 187, 9, 13, 239, 186, 9, 13, 239, 185, 9, 13, 239, 184, 9, + 13, 239, 183, 9, 13, 239, 182, 9, 13, 239, 181, 9, 13, 239, 180, 9, 13, + 239, 179, 9, 13, 239, 178, 9, 13, 239, 177, 9, 13, 239, 176, 9, 13, 239, + 175, 9, 13, 239, 174, 9, 13, 239, 173, 9, 13, 239, 172, 9, 13, 239, 171, + 9, 13, 239, 170, 9, 13, 239, 169, 9, 13, 239, 168, 9, 13, 239, 167, 9, + 13, 239, 166, 9, 13, 239, 165, 9, 13, 239, 164, 9, 13, 239, 163, 9, 13, + 239, 162, 9, 13, 239, 161, 9, 13, 239, 160, 9, 13, 239, 159, 9, 13, 239, + 158, 9, 13, 239, 157, 9, 13, 239, 156, 9, 13, 239, 155, 9, 13, 239, 154, + 9, 13, 239, 153, 9, 13, 239, 152, 9, 13, 239, 151, 9, 13, 239, 150, 9, + 13, 239, 149, 9, 13, 239, 148, 9, 13, 239, 147, 9, 13, 239, 146, 9, 13, + 239, 145, 9, 13, 239, 144, 9, 13, 239, 143, 9, 13, 239, 142, 9, 13, 239, + 141, 9, 13, 239, 140, 9, 13, 239, 139, 9, 13, 239, 138, 9, 13, 239, 137, + 9, 13, 239, 136, 9, 13, 239, 135, 9, 13, 239, 134, 9, 13, 239, 133, 9, + 13, 239, 132, 9, 13, 239, 131, 9, 13, 239, 130, 9, 13, 239, 129, 9, 13, + 239, 128, 9, 13, 239, 127, 9, 13, 239, 126, 9, 13, 239, 125, 9, 13, 239, + 124, 9, 13, 239, 123, 9, 13, 239, 122, 9, 13, 239, 121, 9, 13, 239, 120, + 9, 13, 239, 119, 9, 13, 239, 118, 9, 13, 239, 117, 9, 13, 239, 116, 9, + 13, 239, 115, 9, 13, 239, 114, 9, 13, 239, 113, 9, 13, 239, 112, 9, 13, + 239, 111, 9, 13, 239, 110, 9, 13, 239, 109, 9, 13, 239, 108, 9, 13, 239, + 107, 9, 13, 239, 106, 9, 13, 239, 105, 9, 13, 239, 104, 9, 13, 239, 103, + 9, 13, 239, 102, 9, 13, 239, 101, 9, 13, 239, 100, 9, 13, 239, 99, 9, 13, + 239, 98, 9, 13, 239, 97, 9, 13, 239, 96, 9, 13, 239, 95, 9, 13, 239, 94, + 9, 13, 239, 93, 9, 13, 239, 92, 9, 13, 239, 91, 9, 13, 239, 90, 9, 13, + 239, 89, 9, 13, 239, 88, 9, 13, 239, 87, 9, 13, 239, 86, 9, 13, 239, 85, + 9, 13, 239, 84, 9, 13, 239, 83, 9, 13, 239, 82, 9, 13, 239, 81, 9, 13, + 239, 80, 9, 13, 239, 79, 9, 13, 239, 78, 9, 13, 239, 77, 9, 13, 239, 76, + 9, 13, 239, 75, 9, 13, 239, 74, 9, 13, 239, 73, 9, 13, 239, 72, 9, 13, + 239, 71, 9, 13, 239, 70, 9, 13, 239, 69, 9, 13, 239, 68, 9, 13, 239, 67, + 9, 13, 239, 66, 9, 13, 239, 65, 9, 13, 239, 64, 9, 13, 239, 63, 9, 13, + 239, 62, 9, 13, 239, 61, 9, 13, 239, 60, 9, 13, 239, 59, 9, 13, 239, 58, + 9, 13, 239, 57, 9, 13, 239, 56, 9, 13, 239, 55, 9, 13, 239, 54, 9, 13, + 239, 53, 9, 13, 239, 52, 9, 13, 239, 51, 9, 13, 239, 50, 9, 13, 239, 49, + 9, 13, 239, 48, 9, 13, 239, 47, 9, 13, 239, 46, 9, 13, 239, 45, 9, 13, + 239, 44, 9, 13, 239, 43, 9, 13, 239, 42, 9, 13, 239, 41, 9, 13, 239, 40, + 9, 13, 239, 39, 9, 13, 239, 38, 9, 13, 239, 37, 9, 13, 239, 36, 9, 13, + 239, 35, 9, 13, 239, 34, 9, 13, 239, 33, 9, 13, 239, 32, 9, 13, 239, 31, + 9, 13, 239, 30, 9, 13, 239, 29, 9, 13, 239, 28, 9, 13, 239, 27, 9, 13, + 239, 26, 9, 13, 239, 25, 9, 13, 239, 24, 9, 13, 239, 23, 9, 13, 239, 22, + 9, 13, 239, 21, 9, 13, 239, 20, 9, 13, 239, 19, 9, 13, 239, 18, 9, 13, + 239, 17, 9, 13, 239, 16, 9, 13, 239, 15, 9, 13, 239, 14, 9, 13, 239, 13, + 9, 13, 239, 12, 9, 13, 239, 11, 9, 13, 239, 10, 9, 13, 239, 9, 9, 13, + 239, 8, 9, 13, 239, 7, 9, 13, 239, 6, 9, 13, 239, 5, 9, 13, 239, 4, 9, + 13, 239, 3, 9, 13, 239, 2, 9, 13, 239, 1, 9, 13, 239, 0, 9, 13, 238, 255, + 9, 13, 238, 254, 9, 13, 238, 253, 9, 13, 238, 252, 9, 13, 238, 251, 9, + 13, 238, 250, 9, 13, 238, 249, 9, 13, 238, 248, 9, 13, 238, 247, 9, 13, + 238, 246, 9, 13, 238, 245, 9, 13, 238, 244, 9, 13, 238, 243, 9, 13, 238, + 242, 9, 13, 238, 241, 9, 13, 238, 240, 9, 13, 238, 239, 9, 13, 238, 238, + 9, 13, 238, 237, 9, 13, 238, 236, 9, 13, 238, 235, 9, 13, 238, 234, 9, + 13, 238, 233, 9, 13, 238, 232, 9, 13, 238, 231, 9, 13, 238, 230, 9, 13, + 238, 229, 9, 13, 238, 228, 9, 13, 238, 227, 9, 13, 238, 226, 9, 13, 238, + 225, 9, 13, 238, 224, 9, 13, 238, 223, 9, 13, 238, 222, 9, 13, 238, 221, + 9, 13, 238, 220, 9, 13, 238, 219, 9, 13, 238, 218, 9, 13, 238, 217, 9, + 13, 238, 216, 9, 13, 238, 215, 9, 13, 238, 214, 9, 13, 238, 213, 9, 13, + 238, 212, 9, 13, 238, 211, 9, 13, 238, 210, 9, 13, 238, 209, 9, 13, 238, + 208, 9, 13, 238, 207, 9, 13, 238, 206, 9, 13, 238, 205, 9, 13, 238, 204, + 9, 13, 238, 203, 9, 13, 238, 202, 9, 13, 238, 201, 9, 13, 238, 200, 9, + 13, 238, 199, 9, 13, 238, 198, 9, 13, 238, 197, 9, 13, 238, 196, 9, 13, + 238, 195, 9, 13, 238, 194, 9, 13, 238, 193, 9, 13, 238, 192, 9, 13, 238, + 191, 9, 13, 238, 190, 9, 13, 238, 189, 9, 13, 238, 188, 9, 13, 238, 187, + 9, 13, 238, 186, 9, 13, 238, 185, 9, 13, 238, 184, 9, 13, 238, 183, 9, + 13, 238, 182, 9, 13, 238, 181, 9, 13, 238, 180, 9, 13, 238, 179, 9, 13, + 238, 178, 9, 13, 238, 177, 9, 13, 238, 176, 9, 13, 238, 175, 9, 13, 238, + 174, 9, 13, 238, 173, 9, 13, 238, 172, 9, 13, 238, 171, 9, 13, 238, 170, + 9, 13, 238, 169, 9, 13, 238, 168, 9, 13, 238, 167, 9, 13, 238, 166, 9, + 13, 238, 165, 9, 13, 238, 164, 9, 13, 238, 163, 9, 13, 238, 162, 9, 13, + 238, 161, 9, 13, 238, 160, 9, 13, 238, 159, 9, 13, 238, 158, 9, 13, 238, + 157, 9, 13, 238, 156, 9, 13, 238, 155, 9, 13, 238, 154, 9, 13, 238, 153, + 9, 13, 238, 152, 9, 13, 238, 151, 9, 13, 238, 150, 9, 13, 238, 149, 9, + 13, 238, 148, 9, 13, 238, 147, 9, 13, 238, 146, 9, 13, 238, 145, 9, 13, + 238, 144, 9, 13, 238, 143, 9, 13, 238, 142, 9, 13, 238, 141, 9, 13, 238, + 140, 9, 13, 238, 139, 9, 13, 238, 138, 9, 13, 238, 137, 9, 13, 238, 136, + 9, 13, 238, 135, 9, 13, 238, 134, 9, 13, 238, 133, 9, 13, 238, 132, 9, + 13, 238, 131, 9, 13, 238, 130, 9, 13, 238, 129, 9, 13, 238, 128, 9, 13, + 238, 127, 9, 13, 238, 126, 9, 13, 238, 125, 9, 13, 238, 124, 9, 13, 238, + 123, 9, 13, 238, 122, 9, 13, 238, 121, 9, 13, 238, 120, 9, 13, 238, 119, + 9, 13, 238, 118, 9, 13, 238, 117, 9, 13, 238, 116, 9, 13, 238, 115, 9, + 13, 238, 114, 9, 13, 238, 113, 9, 13, 238, 112, 9, 13, 238, 111, 9, 13, + 238, 110, 9, 13, 238, 109, 9, 13, 238, 108, 9, 13, 238, 107, 9, 13, 238, + 106, 9, 13, 238, 105, 9, 13, 238, 104, 9, 13, 238, 103, 9, 13, 238, 102, + 9, 13, 238, 101, 9, 13, 238, 100, 9, 13, 238, 99, 9, 13, 238, 98, 9, 13, + 238, 97, 9, 13, 238, 96, 9, 13, 238, 95, 9, 13, 238, 94, 9, 13, 238, 93, + 9, 13, 238, 92, 9, 13, 238, 91, 9, 13, 238, 90, 9, 13, 238, 89, 9, 13, + 238, 88, 9, 13, 238, 87, 9, 13, 238, 86, 9, 13, 238, 85, 9, 13, 238, 84, + 9, 13, 238, 83, 9, 13, 238, 82, 9, 13, 238, 81, 9, 13, 238, 80, 9, 13, + 238, 79, 9, 13, 238, 78, 9, 13, 238, 77, 9, 13, 238, 76, 9, 13, 238, 75, + 9, 13, 238, 74, 9, 13, 238, 73, 9, 13, 238, 72, 9, 13, 238, 71, 9, 13, + 238, 70, 9, 13, 238, 69, 9, 13, 238, 68, 9, 13, 238, 67, 9, 13, 238, 66, + 9, 13, 238, 65, 9, 13, 238, 64, 9, 13, 238, 63, 9, 13, 238, 62, 9, 13, + 238, 61, 9, 13, 238, 60, 9, 13, 238, 59, 9, 13, 238, 58, 9, 13, 238, 57, + 9, 13, 238, 56, 9, 13, 238, 55, 9, 13, 238, 54, 9, 13, 238, 53, 9, 13, + 238, 52, 9, 13, 238, 51, 9, 13, 238, 50, 9, 13, 238, 49, 9, 13, 238, 48, + 9, 13, 238, 47, 9, 13, 238, 46, 9, 13, 238, 45, 9, 13, 238, 44, 9, 13, + 238, 43, 9, 13, 238, 42, 9, 13, 238, 41, 9, 13, 238, 40, 9, 13, 238, 39, + 9, 13, 238, 38, 9, 13, 238, 37, 9, 13, 238, 36, 9, 13, 238, 35, 9, 13, + 238, 34, 9, 13, 238, 33, 9, 13, 238, 32, 9, 13, 238, 31, 7, 3, 24, 245, + 207, 7, 3, 24, 245, 203, 7, 3, 24, 245, 166, 7, 3, 24, 245, 206, 7, 3, + 24, 245, 205, 7, 3, 24, 171, 226, 235, 222, 201, 7, 3, 24, 223, 168, 132, + 3, 24, 233, 252, 231, 174, 132, 3, 24, 233, 252, 246, 254, 132, 3, 24, + 233, 252, 237, 200, 132, 3, 24, 219, 97, 231, 174, 132, 3, 24, 233, 252, + 218, 133, 87, 1, 217, 221, 2, 243, 94, 87, 229, 32, 237, 42, 219, 176, + 87, 24, 217, 248, 217, 221, 217, 221, 229, 214, 87, 1, 254, 142, 253, + 207, 87, 1, 218, 201, 254, 168, 87, 1, 218, 201, 249, 177, 87, 1, 218, + 201, 243, 162, 87, 1, 218, 201, 236, 246, 87, 1, 218, 201, 235, 152, 87, + 1, 218, 201, 39, 234, 1, 87, 1, 218, 201, 227, 174, 87, 1, 218, 201, 222, + 102, 87, 1, 254, 142, 88, 55, 87, 1, 224, 210, 2, 224, 210, 248, 145, 87, + 1, 224, 210, 2, 224, 113, 248, 145, 87, 1, 224, 210, 2, 249, 194, 25, + 224, 210, 248, 145, 87, 1, 224, 210, 2, 249, 194, 25, 224, 113, 248, 145, + 87, 1, 99, 2, 229, 214, 87, 1, 99, 2, 228, 143, 87, 1, 99, 2, 234, 77, + 87, 1, 252, 105, 2, 249, 193, 87, 1, 244, 92, 2, 249, 193, 87, 1, 249, + 178, 2, 249, 193, 87, 1, 243, 163, 2, 234, 77, 87, 1, 219, 170, 2, 249, + 193, 87, 1, 217, 96, 2, 249, 193, 87, 1, 222, 51, 2, 249, 193, 87, 1, + 217, 221, 2, 249, 193, 87, 1, 39, 236, 247, 2, 249, 193, 87, 1, 236, 247, + 2, 249, 193, 87, 1, 235, 153, 2, 249, 193, 87, 1, 234, 2, 2, 249, 193, + 87, 1, 231, 104, 2, 249, 193, 87, 1, 226, 146, 2, 249, 193, 87, 1, 39, + 229, 199, 2, 249, 193, 87, 1, 229, 199, 2, 249, 193, 87, 1, 221, 52, 2, + 249, 193, 87, 1, 228, 108, 2, 249, 193, 87, 1, 227, 175, 2, 249, 193, 87, + 1, 224, 210, 2, 249, 193, 87, 1, 222, 103, 2, 249, 193, 87, 1, 219, 170, + 2, 242, 254, 87, 1, 252, 105, 2, 227, 248, 87, 1, 236, 247, 2, 227, 248, + 87, 1, 229, 199, 2, 227, 248, 87, 24, 99, 235, 152, 12, 1, 99, 218, 247, + 47, 17, 12, 1, 99, 218, 247, 39, 17, 12, 1, 252, 136, 47, 17, 12, 1, 252, + 136, 39, 17, 12, 1, 252, 136, 66, 17, 12, 1, 252, 136, 128, 17, 12, 1, + 229, 188, 47, 17, 12, 1, 229, 188, 39, 17, 12, 1, 229, 188, 66, 17, 12, + 1, 229, 188, 128, 17, 12, 1, 252, 127, 47, 17, 12, 1, 252, 127, 39, 17, + 12, 1, 252, 127, 66, 17, 12, 1, 252, 127, 128, 17, 12, 1, 221, 22, 47, + 17, 12, 1, 221, 22, 39, 17, 12, 1, 221, 22, 66, 17, 12, 1, 221, 22, 128, + 17, 12, 1, 222, 76, 47, 17, 12, 1, 222, 76, 39, 17, 12, 1, 222, 76, 66, + 17, 12, 1, 222, 76, 128, 17, 12, 1, 221, 24, 47, 17, 12, 1, 221, 24, 39, + 17, 12, 1, 221, 24, 66, 17, 12, 1, 221, 24, 128, 17, 12, 1, 219, 159, 47, + 17, 12, 1, 219, 159, 39, 17, 12, 1, 219, 159, 66, 17, 12, 1, 219, 159, + 128, 17, 12, 1, 229, 186, 47, 17, 12, 1, 229, 186, 39, 17, 12, 1, 229, + 186, 66, 17, 12, 1, 229, 186, 128, 17, 12, 1, 247, 80, 47, 17, 12, 1, + 247, 80, 39, 17, 12, 1, 247, 80, 66, 17, 12, 1, 247, 80, 128, 17, 12, 1, + 231, 71, 47, 17, 12, 1, 231, 71, 39, 17, 12, 1, 231, 71, 66, 17, 12, 1, + 231, 71, 128, 17, 12, 1, 222, 92, 47, 17, 12, 1, 222, 92, 39, 17, 12, 1, + 222, 92, 66, 17, 12, 1, 222, 92, 128, 17, 12, 1, 222, 90, 47, 17, 12, 1, + 222, 90, 39, 17, 12, 1, 222, 90, 66, 17, 12, 1, 222, 90, 128, 17, 12, 1, + 249, 130, 47, 17, 12, 1, 249, 130, 39, 17, 12, 1, 249, 190, 47, 17, 12, + 1, 249, 190, 39, 17, 12, 1, 247, 104, 47, 17, 12, 1, 247, 104, 39, 17, + 12, 1, 249, 128, 47, 17, 12, 1, 249, 128, 39, 17, 12, 1, 237, 110, 47, + 17, 12, 1, 237, 110, 39, 17, 12, 1, 227, 49, 47, 17, 12, 1, 227, 49, 39, + 17, 12, 1, 236, 177, 47, 17, 12, 1, 236, 177, 39, 17, 12, 1, 236, 177, + 66, 17, 12, 1, 236, 177, 128, 17, 12, 1, 244, 244, 47, 17, 12, 1, 244, + 244, 39, 17, 12, 1, 244, 244, 66, 17, 12, 1, 244, 244, 128, 17, 12, 1, + 244, 10, 47, 17, 12, 1, 244, 10, 39, 17, 12, 1, 244, 10, 66, 17, 12, 1, + 244, 10, 128, 17, 12, 1, 232, 83, 47, 17, 12, 1, 232, 83, 39, 17, 12, 1, + 232, 83, 66, 17, 12, 1, 232, 83, 128, 17, 12, 1, 231, 194, 244, 108, 47, + 17, 12, 1, 231, 194, 244, 108, 39, 17, 12, 1, 227, 79, 47, 17, 12, 1, + 227, 79, 39, 17, 12, 1, 227, 79, 66, 17, 12, 1, 227, 79, 128, 17, 12, 1, + 243, 147, 2, 70, 71, 47, 17, 12, 1, 243, 147, 2, 70, 71, 39, 17, 12, 1, + 243, 147, 244, 66, 47, 17, 12, 1, 243, 147, 244, 66, 39, 17, 12, 1, 243, + 147, 244, 66, 66, 17, 12, 1, 243, 147, 244, 66, 128, 17, 12, 1, 243, 147, + 248, 164, 47, 17, 12, 1, 243, 147, 248, 164, 39, 17, 12, 1, 243, 147, + 248, 164, 66, 17, 12, 1, 243, 147, 248, 164, 128, 17, 12, 1, 70, 252, + 195, 47, 17, 12, 1, 70, 252, 195, 39, 17, 12, 1, 70, 252, 195, 2, 181, + 71, 47, 17, 12, 1, 70, 252, 195, 2, 181, 71, 39, 17, 12, 1, 232, 118, 47, + 17, 12, 1, 232, 118, 39, 17, 12, 1, 232, 118, 66, 17, 12, 1, 232, 118, + 128, 17, 12, 1, 105, 47, 17, 12, 1, 105, 39, 17, 12, 1, 230, 168, 47, 17, + 12, 1, 230, 168, 39, 17, 12, 1, 217, 201, 47, 17, 12, 1, 217, 201, 39, + 17, 12, 1, 105, 2, 181, 71, 47, 17, 12, 1, 219, 166, 47, 17, 12, 1, 219, + 166, 39, 17, 12, 1, 236, 98, 230, 168, 47, 17, 12, 1, 236, 98, 230, 168, + 39, 17, 12, 1, 236, 98, 217, 201, 47, 17, 12, 1, 236, 98, 217, 201, 39, + 17, 12, 1, 178, 47, 17, 12, 1, 178, 39, 17, 12, 1, 178, 66, 17, 12, 1, + 178, 128, 17, 12, 1, 220, 104, 236, 188, 236, 98, 99, 197, 66, 17, 12, 1, + 220, 104, 236, 188, 236, 98, 99, 197, 128, 17, 12, 24, 70, 2, 181, 71, 2, + 99, 47, 17, 12, 24, 70, 2, 181, 71, 2, 99, 39, 17, 12, 24, 70, 2, 181, + 71, 2, 254, 235, 47, 17, 12, 24, 70, 2, 181, 71, 2, 254, 235, 39, 17, 12, + 24, 70, 2, 181, 71, 2, 218, 234, 47, 17, 12, 24, 70, 2, 181, 71, 2, 218, + 234, 39, 17, 12, 24, 70, 2, 181, 71, 2, 105, 47, 17, 12, 24, 70, 2, 181, + 71, 2, 105, 39, 17, 12, 24, 70, 2, 181, 71, 2, 230, 168, 47, 17, 12, 24, + 70, 2, 181, 71, 2, 230, 168, 39, 17, 12, 24, 70, 2, 181, 71, 2, 217, 201, + 47, 17, 12, 24, 70, 2, 181, 71, 2, 217, 201, 39, 17, 12, 24, 70, 2, 181, + 71, 2, 178, 47, 17, 12, 24, 70, 2, 181, 71, 2, 178, 39, 17, 12, 24, 70, + 2, 181, 71, 2, 178, 66, 17, 12, 24, 220, 104, 236, 98, 70, 2, 181, 71, 2, + 99, 197, 47, 17, 12, 24, 220, 104, 236, 98, 70, 2, 181, 71, 2, 99, 197, + 39, 17, 12, 24, 220, 104, 236, 98, 70, 2, 181, 71, 2, 99, 197, 66, 17, + 12, 1, 245, 241, 70, 47, 17, 12, 1, 245, 241, 70, 39, 17, 12, 1, 245, + 241, 70, 66, 17, 12, 1, 245, 241, 70, 128, 17, 12, 24, 70, 2, 181, 71, 2, + 134, 47, 17, 12, 24, 70, 2, 181, 71, 2, 111, 47, 17, 12, 24, 70, 2, 181, + 71, 2, 62, 47, 17, 12, 24, 70, 2, 181, 71, 2, 99, 197, 47, 17, 12, 24, + 70, 2, 181, 71, 2, 70, 47, 17, 12, 24, 252, 129, 2, 134, 47, 17, 12, 24, + 252, 129, 2, 111, 47, 17, 12, 24, 252, 129, 2, 236, 147, 47, 17, 12, 24, + 252, 129, 2, 62, 47, 17, 12, 24, 252, 129, 2, 99, 197, 47, 17, 12, 24, + 252, 129, 2, 70, 47, 17, 12, 24, 222, 78, 2, 134, 47, 17, 12, 24, 222, + 78, 2, 111, 47, 17, 12, 24, 222, 78, 2, 236, 147, 47, 17, 12, 24, 222, + 78, 2, 62, 47, 17, 12, 24, 222, 78, 2, 99, 197, 47, 17, 12, 24, 222, 78, + 2, 70, 47, 17, 12, 24, 222, 20, 2, 134, 47, 17, 12, 24, 222, 20, 2, 62, + 47, 17, 12, 24, 222, 20, 2, 99, 197, 47, 17, 12, 24, 222, 20, 2, 70, 47, + 17, 12, 24, 134, 2, 111, 47, 17, 12, 24, 134, 2, 62, 47, 17, 12, 24, 111, + 2, 134, 47, 17, 12, 24, 111, 2, 62, 47, 17, 12, 24, 236, 147, 2, 134, 47, + 17, 12, 24, 236, 147, 2, 111, 47, 17, 12, 24, 236, 147, 2, 62, 47, 17, + 12, 24, 226, 83, 2, 134, 47, 17, 12, 24, 226, 83, 2, 111, 47, 17, 12, 24, + 226, 83, 2, 236, 147, 47, 17, 12, 24, 226, 83, 2, 62, 47, 17, 12, 24, + 226, 171, 2, 111, 47, 17, 12, 24, 226, 171, 2, 62, 47, 17, 12, 24, 249, + 203, 2, 134, 47, 17, 12, 24, 249, 203, 2, 111, 47, 17, 12, 24, 249, 203, + 2, 236, 147, 47, 17, 12, 24, 249, 203, 2, 62, 47, 17, 12, 24, 222, 138, + 2, 111, 47, 17, 12, 24, 222, 138, 2, 62, 47, 17, 12, 24, 217, 110, 2, 62, + 47, 17, 12, 24, 254, 192, 2, 134, 47, 17, 12, 24, 254, 192, 2, 62, 47, + 17, 12, 24, 244, 123, 2, 134, 47, 17, 12, 24, 244, 123, 2, 62, 47, 17, + 12, 24, 245, 222, 2, 134, 47, 17, 12, 24, 245, 222, 2, 111, 47, 17, 12, + 24, 245, 222, 2, 236, 147, 47, 17, 12, 24, 245, 222, 2, 62, 47, 17, 12, + 24, 245, 222, 2, 99, 197, 47, 17, 12, 24, 245, 222, 2, 70, 47, 17, 12, + 24, 228, 149, 2, 111, 47, 17, 12, 24, 228, 149, 2, 62, 47, 17, 12, 24, + 228, 149, 2, 99, 197, 47, 17, 12, 24, 228, 149, 2, 70, 47, 17, 12, 24, + 236, 247, 2, 99, 47, 17, 12, 24, 236, 247, 2, 134, 47, 17, 12, 24, 236, + 247, 2, 111, 47, 17, 12, 24, 236, 247, 2, 236, 147, 47, 17, 12, 24, 236, + 247, 2, 235, 161, 47, 17, 12, 24, 236, 247, 2, 62, 47, 17, 12, 24, 236, + 247, 2, 99, 197, 47, 17, 12, 24, 236, 247, 2, 70, 47, 17, 12, 24, 235, + 161, 2, 134, 47, 17, 12, 24, 235, 161, 2, 111, 47, 17, 12, 24, 235, 161, + 2, 236, 147, 47, 17, 12, 24, 235, 161, 2, 62, 47, 17, 12, 24, 235, 161, + 2, 99, 197, 47, 17, 12, 24, 235, 161, 2, 70, 47, 17, 12, 24, 62, 2, 134, + 47, 17, 12, 24, 62, 2, 111, 47, 17, 12, 24, 62, 2, 236, 147, 47, 17, 12, + 24, 62, 2, 62, 47, 17, 12, 24, 62, 2, 99, 197, 47, 17, 12, 24, 62, 2, 70, + 47, 17, 12, 24, 231, 194, 2, 134, 47, 17, 12, 24, 231, 194, 2, 111, 47, + 17, 12, 24, 231, 194, 2, 236, 147, 47, 17, 12, 24, 231, 194, 2, 62, 47, + 17, 12, 24, 231, 194, 2, 99, 197, 47, 17, 12, 24, 231, 194, 2, 70, 47, + 17, 12, 24, 243, 147, 2, 134, 47, 17, 12, 24, 243, 147, 2, 62, 47, 17, + 12, 24, 243, 147, 2, 99, 197, 47, 17, 12, 24, 243, 147, 2, 70, 47, 17, + 12, 24, 70, 2, 134, 47, 17, 12, 24, 70, 2, 111, 47, 17, 12, 24, 70, 2, + 236, 147, 47, 17, 12, 24, 70, 2, 62, 47, 17, 12, 24, 70, 2, 99, 197, 47, + 17, 12, 24, 70, 2, 70, 47, 17, 12, 24, 222, 30, 2, 223, 59, 99, 47, 17, + 12, 24, 227, 197, 2, 223, 59, 99, 47, 17, 12, 24, 99, 197, 2, 223, 59, + 99, 47, 17, 12, 24, 225, 17, 2, 249, 171, 47, 17, 12, 24, 225, 17, 2, + 236, 205, 47, 17, 12, 24, 225, 17, 2, 245, 239, 47, 17, 12, 24, 225, 17, + 2, 249, 173, 47, 17, 12, 24, 225, 17, 2, 236, 207, 47, 17, 12, 24, 225, + 17, 2, 223, 59, 99, 47, 17, 12, 24, 70, 2, 181, 71, 2, 227, 197, 39, 17, + 12, 24, 70, 2, 181, 71, 2, 217, 107, 39, 17, 12, 24, 70, 2, 181, 71, 2, + 62, 39, 17, 12, 24, 70, 2, 181, 71, 2, 231, 194, 39, 17, 12, 24, 70, 2, + 181, 71, 2, 99, 197, 39, 17, 12, 24, 70, 2, 181, 71, 2, 70, 39, 17, 12, + 24, 252, 129, 2, 227, 197, 39, 17, 12, 24, 252, 129, 2, 217, 107, 39, 17, + 12, 24, 252, 129, 2, 62, 39, 17, 12, 24, 252, 129, 2, 231, 194, 39, 17, + 12, 24, 252, 129, 2, 99, 197, 39, 17, 12, 24, 252, 129, 2, 70, 39, 17, + 12, 24, 222, 78, 2, 227, 197, 39, 17, 12, 24, 222, 78, 2, 217, 107, 39, + 17, 12, 24, 222, 78, 2, 62, 39, 17, 12, 24, 222, 78, 2, 231, 194, 39, 17, + 12, 24, 222, 78, 2, 99, 197, 39, 17, 12, 24, 222, 78, 2, 70, 39, 17, 12, + 24, 222, 20, 2, 227, 197, 39, 17, 12, 24, 222, 20, 2, 217, 107, 39, 17, + 12, 24, 222, 20, 2, 62, 39, 17, 12, 24, 222, 20, 2, 231, 194, 39, 17, 12, + 24, 222, 20, 2, 99, 197, 39, 17, 12, 24, 222, 20, 2, 70, 39, 17, 12, 24, + 245, 222, 2, 99, 197, 39, 17, 12, 24, 245, 222, 2, 70, 39, 17, 12, 24, + 228, 149, 2, 99, 197, 39, 17, 12, 24, 228, 149, 2, 70, 39, 17, 12, 24, + 236, 247, 2, 99, 39, 17, 12, 24, 236, 247, 2, 235, 161, 39, 17, 12, 24, + 236, 247, 2, 62, 39, 17, 12, 24, 236, 247, 2, 99, 197, 39, 17, 12, 24, + 236, 247, 2, 70, 39, 17, 12, 24, 235, 161, 2, 62, 39, 17, 12, 24, 235, + 161, 2, 99, 197, 39, 17, 12, 24, 235, 161, 2, 70, 39, 17, 12, 24, 62, 2, + 99, 39, 17, 12, 24, 62, 2, 62, 39, 17, 12, 24, 231, 194, 2, 227, 197, 39, + 17, 12, 24, 231, 194, 2, 217, 107, 39, 17, 12, 24, 231, 194, 2, 62, 39, + 17, 12, 24, 231, 194, 2, 231, 194, 39, 17, 12, 24, 231, 194, 2, 99, 197, + 39, 17, 12, 24, 231, 194, 2, 70, 39, 17, 12, 24, 99, 197, 2, 223, 59, 99, + 39, 17, 12, 24, 70, 2, 227, 197, 39, 17, 12, 24, 70, 2, 217, 107, 39, 17, + 12, 24, 70, 2, 62, 39, 17, 12, 24, 70, 2, 231, 194, 39, 17, 12, 24, 70, + 2, 99, 197, 39, 17, 12, 24, 70, 2, 70, 39, 17, 12, 24, 70, 2, 181, 71, 2, + 134, 66, 17, 12, 24, 70, 2, 181, 71, 2, 111, 66, 17, 12, 24, 70, 2, 181, + 71, 2, 236, 147, 66, 17, 12, 24, 70, 2, 181, 71, 2, 62, 66, 17, 12, 24, + 70, 2, 181, 71, 2, 243, 147, 66, 17, 12, 24, 252, 129, 2, 134, 66, 17, + 12, 24, 252, 129, 2, 111, 66, 17, 12, 24, 252, 129, 2, 236, 147, 66, 17, + 12, 24, 252, 129, 2, 62, 66, 17, 12, 24, 252, 129, 2, 243, 147, 66, 17, + 12, 24, 222, 78, 2, 134, 66, 17, 12, 24, 222, 78, 2, 111, 66, 17, 12, 24, + 222, 78, 2, 236, 147, 66, 17, 12, 24, 222, 78, 2, 62, 66, 17, 12, 24, + 222, 78, 2, 243, 147, 66, 17, 12, 24, 222, 20, 2, 62, 66, 17, 12, 24, + 134, 2, 111, 66, 17, 12, 24, 134, 2, 62, 66, 17, 12, 24, 111, 2, 134, 66, + 17, 12, 24, 111, 2, 62, 66, 17, 12, 24, 236, 147, 2, 134, 66, 17, 12, 24, + 236, 147, 2, 62, 66, 17, 12, 24, 226, 83, 2, 134, 66, 17, 12, 24, 226, + 83, 2, 111, 66, 17, 12, 24, 226, 83, 2, 236, 147, 66, 17, 12, 24, 226, + 83, 2, 62, 66, 17, 12, 24, 226, 171, 2, 111, 66, 17, 12, 24, 226, 171, 2, + 236, 147, 66, 17, 12, 24, 226, 171, 2, 62, 66, 17, 12, 24, 249, 203, 2, + 134, 66, 17, 12, 24, 249, 203, 2, 111, 66, 17, 12, 24, 249, 203, 2, 236, + 147, 66, 17, 12, 24, 249, 203, 2, 62, 66, 17, 12, 24, 222, 138, 2, 111, + 66, 17, 12, 24, 217, 110, 2, 62, 66, 17, 12, 24, 254, 192, 2, 134, 66, + 17, 12, 24, 254, 192, 2, 62, 66, 17, 12, 24, 244, 123, 2, 134, 66, 17, + 12, 24, 244, 123, 2, 62, 66, 17, 12, 24, 245, 222, 2, 134, 66, 17, 12, + 24, 245, 222, 2, 111, 66, 17, 12, 24, 245, 222, 2, 236, 147, 66, 17, 12, + 24, 245, 222, 2, 62, 66, 17, 12, 24, 228, 149, 2, 111, 66, 17, 12, 24, + 228, 149, 2, 62, 66, 17, 12, 24, 236, 247, 2, 134, 66, 17, 12, 24, 236, + 247, 2, 111, 66, 17, 12, 24, 236, 247, 2, 236, 147, 66, 17, 12, 24, 236, + 247, 2, 235, 161, 66, 17, 12, 24, 236, 247, 2, 62, 66, 17, 12, 24, 235, + 161, 2, 134, 66, 17, 12, 24, 235, 161, 2, 111, 66, 17, 12, 24, 235, 161, + 2, 236, 147, 66, 17, 12, 24, 235, 161, 2, 62, 66, 17, 12, 24, 235, 161, + 2, 243, 147, 66, 17, 12, 24, 62, 2, 134, 66, 17, 12, 24, 62, 2, 111, 66, + 17, 12, 24, 62, 2, 236, 147, 66, 17, 12, 24, 62, 2, 62, 66, 17, 12, 24, + 231, 194, 2, 134, 66, 17, 12, 24, 231, 194, 2, 111, 66, 17, 12, 24, 231, + 194, 2, 236, 147, 66, 17, 12, 24, 231, 194, 2, 62, 66, 17, 12, 24, 231, + 194, 2, 243, 147, 66, 17, 12, 24, 243, 147, 2, 134, 66, 17, 12, 24, 243, + 147, 2, 62, 66, 17, 12, 24, 243, 147, 2, 223, 59, 99, 66, 17, 12, 24, 70, + 2, 134, 66, 17, 12, 24, 70, 2, 111, 66, 17, 12, 24, 70, 2, 236, 147, 66, + 17, 12, 24, 70, 2, 62, 66, 17, 12, 24, 70, 2, 243, 147, 66, 17, 12, 24, + 70, 2, 181, 71, 2, 62, 128, 17, 12, 24, 70, 2, 181, 71, 2, 243, 147, 128, + 17, 12, 24, 252, 129, 2, 62, 128, 17, 12, 24, 252, 129, 2, 243, 147, 128, + 17, 12, 24, 222, 78, 2, 62, 128, 17, 12, 24, 222, 78, 2, 243, 147, 128, + 17, 12, 24, 222, 20, 2, 62, 128, 17, 12, 24, 222, 20, 2, 243, 147, 128, + 17, 12, 24, 226, 83, 2, 62, 128, 17, 12, 24, 226, 83, 2, 243, 147, 128, + 17, 12, 24, 224, 243, 2, 62, 128, 17, 12, 24, 224, 243, 2, 243, 147, 128, + 17, 12, 24, 236, 247, 2, 235, 161, 128, 17, 12, 24, 236, 247, 2, 62, 128, + 17, 12, 24, 235, 161, 2, 62, 128, 17, 12, 24, 231, 194, 2, 62, 128, 17, + 12, 24, 231, 194, 2, 243, 147, 128, 17, 12, 24, 70, 2, 62, 128, 17, 12, + 24, 70, 2, 243, 147, 128, 17, 12, 24, 225, 17, 2, 245, 239, 128, 17, 12, + 24, 225, 17, 2, 249, 173, 128, 17, 12, 24, 225, 17, 2, 236, 207, 128, 17, + 12, 24, 222, 138, 2, 99, 197, 47, 17, 12, 24, 222, 138, 2, 70, 47, 17, + 12, 24, 254, 192, 2, 99, 197, 47, 17, 12, 24, 254, 192, 2, 70, 47, 17, + 12, 24, 244, 123, 2, 99, 197, 47, 17, 12, 24, 244, 123, 2, 70, 47, 17, + 12, 24, 226, 83, 2, 99, 197, 47, 17, 12, 24, 226, 83, 2, 70, 47, 17, 12, + 24, 224, 243, 2, 99, 197, 47, 17, 12, 24, 224, 243, 2, 70, 47, 17, 12, + 24, 111, 2, 99, 197, 47, 17, 12, 24, 111, 2, 70, 47, 17, 12, 24, 134, 2, + 99, 197, 47, 17, 12, 24, 134, 2, 70, 47, 17, 12, 24, 236, 147, 2, 99, + 197, 47, 17, 12, 24, 236, 147, 2, 70, 47, 17, 12, 24, 226, 171, 2, 99, + 197, 47, 17, 12, 24, 226, 171, 2, 70, 47, 17, 12, 24, 249, 203, 2, 99, + 197, 47, 17, 12, 24, 249, 203, 2, 70, 47, 17, 12, 24, 224, 243, 2, 134, + 47, 17, 12, 24, 224, 243, 2, 111, 47, 17, 12, 24, 224, 243, 2, 236, 147, + 47, 17, 12, 24, 224, 243, 2, 62, 47, 17, 12, 24, 224, 243, 2, 227, 197, + 47, 17, 12, 24, 226, 83, 2, 227, 197, 47, 17, 12, 24, 226, 171, 2, 227, + 197, 47, 17, 12, 24, 249, 203, 2, 227, 197, 47, 17, 12, 24, 222, 138, 2, + 99, 197, 39, 17, 12, 24, 222, 138, 2, 70, 39, 17, 12, 24, 254, 192, 2, + 99, 197, 39, 17, 12, 24, 254, 192, 2, 70, 39, 17, 12, 24, 244, 123, 2, + 99, 197, 39, 17, 12, 24, 244, 123, 2, 70, 39, 17, 12, 24, 226, 83, 2, 99, + 197, 39, 17, 12, 24, 226, 83, 2, 70, 39, 17, 12, 24, 224, 243, 2, 99, + 197, 39, 17, 12, 24, 224, 243, 2, 70, 39, 17, 12, 24, 111, 2, 99, 197, + 39, 17, 12, 24, 111, 2, 70, 39, 17, 12, 24, 134, 2, 99, 197, 39, 17, 12, + 24, 134, 2, 70, 39, 17, 12, 24, 236, 147, 2, 99, 197, 39, 17, 12, 24, + 236, 147, 2, 70, 39, 17, 12, 24, 226, 171, 2, 99, 197, 39, 17, 12, 24, + 226, 171, 2, 70, 39, 17, 12, 24, 249, 203, 2, 99, 197, 39, 17, 12, 24, + 249, 203, 2, 70, 39, 17, 12, 24, 224, 243, 2, 134, 39, 17, 12, 24, 224, + 243, 2, 111, 39, 17, 12, 24, 224, 243, 2, 236, 147, 39, 17, 12, 24, 224, + 243, 2, 62, 39, 17, 12, 24, 224, 243, 2, 227, 197, 39, 17, 12, 24, 226, + 83, 2, 227, 197, 39, 17, 12, 24, 226, 171, 2, 227, 197, 39, 17, 12, 24, + 249, 203, 2, 227, 197, 39, 17, 12, 24, 224, 243, 2, 134, 66, 17, 12, 24, + 224, 243, 2, 111, 66, 17, 12, 24, 224, 243, 2, 236, 147, 66, 17, 12, 24, + 224, 243, 2, 62, 66, 17, 12, 24, 226, 83, 2, 243, 147, 66, 17, 12, 24, + 224, 243, 2, 243, 147, 66, 17, 12, 24, 222, 138, 2, 62, 66, 17, 12, 24, + 226, 83, 2, 134, 128, 17, 12, 24, 226, 83, 2, 111, 128, 17, 12, 24, 226, + 83, 2, 236, 147, 128, 17, 12, 24, 224, 243, 2, 134, 128, 17, 12, 24, 224, + 243, 2, 111, 128, 17, 12, 24, 224, 243, 2, 236, 147, 128, 17, 12, 24, + 222, 138, 2, 62, 128, 17, 12, 24, 217, 110, 2, 62, 128, 17, 12, 24, 99, + 2, 245, 237, 39, 17, 12, 24, 99, 2, 245, 237, 47, 17, 230, 97, 42, 229, + 229, 230, 97, 45, 229, 229, 12, 24, 222, 78, 2, 134, 2, 62, 66, 17, 12, + 24, 222, 78, 2, 111, 2, 134, 39, 17, 12, 24, 222, 78, 2, 111, 2, 134, 66, + 17, 12, 24, 222, 78, 2, 111, 2, 62, 66, 17, 12, 24, 222, 78, 2, 236, 147, + 2, 62, 66, 17, 12, 24, 222, 78, 2, 62, 2, 134, 66, 17, 12, 24, 222, 78, + 2, 62, 2, 111, 66, 17, 12, 24, 222, 78, 2, 62, 2, 236, 147, 66, 17, 12, + 24, 134, 2, 62, 2, 111, 39, 17, 12, 24, 134, 2, 62, 2, 111, 66, 17, 12, + 24, 111, 2, 62, 2, 70, 39, 17, 12, 24, 111, 2, 62, 2, 99, 197, 39, 17, + 12, 24, 226, 83, 2, 111, 2, 134, 66, 17, 12, 24, 226, 83, 2, 134, 2, 111, + 66, 17, 12, 24, 226, 83, 2, 134, 2, 99, 197, 39, 17, 12, 24, 226, 83, 2, + 62, 2, 111, 39, 17, 12, 24, 226, 83, 2, 62, 2, 111, 66, 17, 12, 24, 226, + 83, 2, 62, 2, 134, 66, 17, 12, 24, 226, 83, 2, 62, 2, 62, 39, 17, 12, 24, + 226, 83, 2, 62, 2, 62, 66, 17, 12, 24, 226, 171, 2, 111, 2, 111, 39, 17, + 12, 24, 226, 171, 2, 111, 2, 111, 66, 17, 12, 24, 226, 171, 2, 62, 2, 62, + 39, 17, 12, 24, 224, 243, 2, 111, 2, 62, 39, 17, 12, 24, 224, 243, 2, + 111, 2, 62, 66, 17, 12, 24, 224, 243, 2, 134, 2, 70, 39, 17, 12, 24, 224, + 243, 2, 62, 2, 236, 147, 39, 17, 12, 24, 224, 243, 2, 62, 2, 236, 147, + 66, 17, 12, 24, 224, 243, 2, 62, 2, 62, 39, 17, 12, 24, 224, 243, 2, 62, + 2, 62, 66, 17, 12, 24, 249, 203, 2, 111, 2, 99, 197, 39, 17, 12, 24, 249, + 203, 2, 236, 147, 2, 62, 39, 17, 12, 24, 249, 203, 2, 236, 147, 2, 62, + 66, 17, 12, 24, 222, 138, 2, 62, 2, 111, 39, 17, 12, 24, 222, 138, 2, 62, + 2, 111, 66, 17, 12, 24, 222, 138, 2, 62, 2, 62, 66, 17, 12, 24, 222, 138, + 2, 62, 2, 70, 39, 17, 12, 24, 254, 192, 2, 134, 2, 62, 39, 17, 12, 24, + 254, 192, 2, 62, 2, 62, 39, 17, 12, 24, 254, 192, 2, 62, 2, 62, 66, 17, + 12, 24, 254, 192, 2, 62, 2, 99, 197, 39, 17, 12, 24, 244, 123, 2, 62, 2, + 62, 39, 17, 12, 24, 244, 123, 2, 62, 2, 70, 39, 17, 12, 24, 244, 123, 2, + 62, 2, 99, 197, 39, 17, 12, 24, 245, 222, 2, 236, 147, 2, 62, 39, 17, 12, + 24, 245, 222, 2, 236, 147, 2, 62, 66, 17, 12, 24, 228, 149, 2, 62, 2, + 111, 39, 17, 12, 24, 228, 149, 2, 62, 2, 62, 39, 17, 12, 24, 235, 161, 2, + 111, 2, 62, 39, 17, 12, 24, 235, 161, 2, 111, 2, 70, 39, 17, 12, 24, 235, + 161, 2, 111, 2, 99, 197, 39, 17, 12, 24, 235, 161, 2, 134, 2, 134, 66, + 17, 12, 24, 235, 161, 2, 134, 2, 134, 39, 17, 12, 24, 235, 161, 2, 236, + 147, 2, 62, 39, 17, 12, 24, 235, 161, 2, 236, 147, 2, 62, 66, 17, 12, 24, + 235, 161, 2, 62, 2, 111, 39, 17, 12, 24, 235, 161, 2, 62, 2, 111, 66, 17, + 12, 24, 62, 2, 111, 2, 134, 66, 17, 12, 24, 62, 2, 111, 2, 62, 66, 17, + 12, 24, 62, 2, 111, 2, 70, 39, 17, 12, 24, 62, 2, 134, 2, 111, 66, 17, + 12, 24, 62, 2, 134, 2, 62, 66, 17, 12, 24, 62, 2, 236, 147, 2, 134, 66, + 17, 12, 24, 62, 2, 236, 147, 2, 62, 66, 17, 12, 24, 62, 2, 134, 2, 236, + 147, 66, 17, 12, 24, 243, 147, 2, 62, 2, 134, 66, 17, 12, 24, 243, 147, + 2, 62, 2, 62, 66, 17, 12, 24, 231, 194, 2, 111, 2, 62, 66, 17, 12, 24, + 231, 194, 2, 111, 2, 99, 197, 39, 17, 12, 24, 231, 194, 2, 134, 2, 62, + 39, 17, 12, 24, 231, 194, 2, 134, 2, 62, 66, 17, 12, 24, 231, 194, 2, + 134, 2, 99, 197, 39, 17, 12, 24, 231, 194, 2, 62, 2, 70, 39, 17, 12, 24, + 231, 194, 2, 62, 2, 99, 197, 39, 17, 12, 24, 70, 2, 62, 2, 62, 39, 17, + 12, 24, 70, 2, 62, 2, 62, 66, 17, 12, 24, 252, 129, 2, 236, 147, 2, 70, + 39, 17, 12, 24, 222, 78, 2, 134, 2, 70, 39, 17, 12, 24, 222, 78, 2, 134, + 2, 99, 197, 39, 17, 12, 24, 222, 78, 2, 236, 147, 2, 70, 39, 17, 12, 24, + 222, 78, 2, 236, 147, 2, 99, 197, 39, 17, 12, 24, 222, 78, 2, 62, 2, 70, + 39, 17, 12, 24, 222, 78, 2, 62, 2, 99, 197, 39, 17, 12, 24, 134, 2, 62, + 2, 70, 39, 17, 12, 24, 134, 2, 111, 2, 99, 197, 39, 17, 12, 24, 134, 2, + 62, 2, 99, 197, 39, 17, 12, 24, 226, 83, 2, 236, 147, 2, 99, 197, 39, 17, + 12, 24, 226, 171, 2, 111, 2, 70, 39, 17, 12, 24, 224, 243, 2, 111, 2, 70, + 39, 17, 12, 24, 249, 203, 2, 111, 2, 70, 39, 17, 12, 24, 235, 161, 2, + 134, 2, 70, 39, 17, 12, 24, 235, 161, 2, 62, 2, 70, 39, 17, 12, 24, 70, + 2, 111, 2, 70, 39, 17, 12, 24, 70, 2, 134, 2, 70, 39, 17, 12, 24, 70, 2, + 62, 2, 70, 39, 17, 12, 24, 62, 2, 62, 2, 70, 39, 17, 12, 24, 228, 149, 2, + 62, 2, 70, 39, 17, 12, 24, 231, 194, 2, 111, 2, 70, 39, 17, 12, 24, 228, + 149, 2, 62, 2, 111, 66, 17, 12, 24, 235, 161, 2, 111, 2, 62, 66, 17, 12, + 24, 254, 192, 2, 62, 2, 70, 39, 17, 12, 24, 236, 247, 2, 62, 2, 70, 39, + 17, 12, 24, 231, 194, 2, 134, 2, 111, 66, 17, 12, 24, 62, 2, 236, 147, 2, + 70, 39, 17, 12, 24, 235, 161, 2, 134, 2, 62, 66, 17, 12, 24, 236, 247, 2, + 62, 2, 62, 39, 17, 12, 24, 235, 161, 2, 134, 2, 62, 39, 17, 12, 24, 231, + 194, 2, 134, 2, 111, 39, 17, 12, 24, 134, 2, 111, 2, 70, 39, 17, 12, 24, + 111, 2, 134, 2, 70, 39, 17, 12, 24, 62, 2, 134, 2, 70, 39, 17, 12, 24, + 245, 222, 2, 62, 2, 70, 39, 17, 12, 24, 252, 129, 2, 111, 2, 70, 39, 17, + 12, 24, 236, 247, 2, 62, 2, 62, 66, 17, 12, 24, 254, 192, 2, 134, 2, 62, + 66, 17, 12, 24, 226, 171, 2, 62, 2, 62, 66, 17, 12, 24, 226, 83, 2, 236, + 147, 2, 70, 39, 17, 12, 24, 231, 194, 2, 134, 2, 70, 39, 17, 12, 24, 226, + 153, 220, 32, 254, 14, 236, 35, 223, 137, 5, 47, 17, 12, 24, 228, 145, + 220, 32, 254, 14, 236, 35, 223, 137, 5, 47, 17, 12, 24, 254, 156, 47, 17, + 12, 24, 254, 179, 47, 17, 12, 24, 233, 130, 47, 17, 12, 24, 226, 154, 47, + 17, 12, 24, 227, 230, 47, 17, 12, 24, 254, 170, 47, 17, 12, 24, 218, 249, + 47, 17, 12, 24, 226, 153, 47, 17, 12, 24, 226, 152, 254, 170, 218, 248, + 12, 24, 237, 120, 227, 146, 55, 12, 24, 252, 61, 254, 65, 254, 66, 41, + 226, 73, 41, 225, 218, 41, 225, 150, 41, 225, 139, 41, 225, 128, 41, 225, + 117, 41, 225, 106, 41, 225, 95, 41, 225, 84, 41, 226, 72, 41, 226, 61, + 41, 226, 50, 41, 226, 39, 41, 226, 28, 41, 226, 17, 41, 226, 6, 228, 238, + 245, 124, 35, 69, 250, 168, 228, 238, 245, 124, 35, 69, 98, 250, 168, + 228, 238, 245, 124, 35, 69, 98, 245, 90, 223, 136, 228, 238, 245, 124, + 35, 69, 250, 175, 228, 238, 245, 124, 35, 69, 225, 67, 228, 238, 245, + 124, 35, 69, 246, 95, 78, 228, 238, 245, 124, 35, 69, 228, 82, 78, 228, + 238, 245, 124, 35, 69, 42, 67, 235, 91, 115, 228, 238, 245, 124, 35, 69, + 45, 67, 235, 91, 252, 16, 228, 238, 245, 124, 35, 69, 186, 246, 208, 36, + 24, 42, 243, 194, 36, 24, 45, 243, 194, 36, 51, 221, 180, 42, 243, 194, + 36, 51, 221, 180, 45, 243, 194, 36, 234, 116, 42, 243, 194, 36, 234, 116, + 45, 243, 194, 36, 250, 151, 234, 115, 228, 238, 245, 124, 35, 69, 124, + 61, 235, 121, 228, 238, 245, 124, 35, 69, 246, 206, 249, 146, 228, 238, + 245, 124, 35, 69, 246, 198, 249, 146, 228, 238, 245, 124, 35, 69, 109, + 235, 43, 228, 238, 245, 124, 35, 69, 218, 235, 109, 235, 43, 228, 238, + 245, 124, 35, 69, 42, 229, 229, 228, 238, 245, 124, 35, 69, 45, 229, 229, + 228, 238, 245, 124, 35, 69, 42, 250, 79, 115, 228, 238, 245, 124, 35, 69, + 45, 250, 79, 115, 228, 238, 245, 124, 35, 69, 42, 221, 114, 224, 236, + 115, 228, 238, 245, 124, 35, 69, 45, 221, 114, 224, 236, 115, 228, 238, + 245, 124, 35, 69, 42, 84, 235, 91, 115, 228, 238, 245, 124, 35, 69, 45, + 84, 235, 91, 115, 228, 238, 245, 124, 35, 69, 42, 51, 254, 120, 115, 228, + 238, 245, 124, 35, 69, 45, 51, 254, 120, 115, 228, 238, 245, 124, 35, 69, + 42, 254, 120, 115, 228, 238, 245, 124, 35, 69, 45, 254, 120, 115, 228, + 238, 245, 124, 35, 69, 42, 250, 124, 115, 228, 238, 245, 124, 35, 69, 45, + 250, 124, 115, 228, 238, 245, 124, 35, 69, 42, 67, 250, 124, 115, 228, + 238, 245, 124, 35, 69, 45, 67, 250, 124, 115, 225, 49, 248, 145, 67, 225, + 49, 248, 145, 228, 238, 245, 124, 35, 69, 42, 40, 115, 228, 238, 245, + 124, 35, 69, 45, 40, 115, 249, 145, 230, 73, 251, 82, 230, 73, 218, 235, + 230, 73, 51, 218, 235, 230, 73, 249, 145, 109, 235, 43, 251, 82, 109, + 235, 43, 218, 235, 109, 235, 43, 3, 250, 168, 3, 98, 250, 168, 3, 245, + 90, 223, 136, 3, 225, 67, 3, 250, 175, 3, 228, 82, 78, 3, 246, 95, 78, 3, + 246, 206, 249, 146, 3, 42, 229, 229, 3, 45, 229, 229, 3, 42, 250, 79, + 115, 3, 45, 250, 79, 115, 3, 42, 221, 114, 224, 236, 115, 3, 45, 221, + 114, 224, 236, 115, 3, 54, 55, 3, 254, 134, 3, 253, 251, 3, 88, 55, 3, + 242, 120, 3, 235, 87, 55, 3, 244, 30, 55, 3, 246, 154, 55, 3, 227, 160, + 224, 17, 3, 248, 155, 55, 3, 229, 169, 55, 3, 250, 167, 253, 244, 12, + 245, 237, 47, 17, 12, 222, 108, 2, 245, 237, 50, 12, 249, 171, 47, 17, + 12, 222, 136, 245, 107, 12, 236, 205, 47, 17, 12, 245, 239, 47, 17, 12, + 245, 239, 128, 17, 12, 249, 173, 47, 17, 12, 249, 173, 128, 17, 12, 236, + 207, 47, 17, 12, 236, 207, 128, 17, 12, 225, 17, 47, 17, 12, 225, 17, + 128, 17, 12, 223, 76, 47, 17, 12, 223, 76, 128, 17, 12, 1, 181, 47, 17, + 12, 1, 99, 2, 234, 111, 71, 47, 17, 12, 1, 99, 2, 234, 111, 71, 39, 17, + 12, 1, 99, 2, 181, 71, 47, 17, 12, 1, 99, 2, 181, 71, 39, 17, 12, 1, 218, + 234, 2, 181, 71, 47, 17, 12, 1, 218, 234, 2, 181, 71, 39, 17, 12, 1, 99, + 2, 181, 252, 118, 47, 17, 12, 1, 99, 2, 181, 252, 118, 39, 17, 12, 1, 70, + 2, 181, 71, 47, 17, 12, 1, 70, 2, 181, 71, 39, 17, 12, 1, 70, 2, 181, 71, + 66, 17, 12, 1, 70, 2, 181, 71, 128, 17, 12, 1, 99, 47, 17, 12, 1, 99, 39, + 17, 12, 1, 252, 129, 47, 17, 12, 1, 252, 129, 39, 17, 12, 1, 252, 129, + 66, 17, 12, 1, 252, 129, 128, 17, 12, 1, 222, 78, 234, 73, 47, 17, 12, 1, + 222, 78, 234, 73, 39, 17, 12, 1, 222, 78, 47, 17, 12, 1, 222, 78, 39, 17, + 12, 1, 222, 78, 66, 17, 12, 1, 222, 78, 128, 17, 12, 1, 222, 20, 47, 17, + 12, 1, 222, 20, 39, 17, 12, 1, 222, 20, 66, 17, 12, 1, 222, 20, 128, 17, + 12, 1, 134, 47, 17, 12, 1, 134, 39, 17, 12, 1, 134, 66, 17, 12, 1, 134, + 128, 17, 12, 1, 111, 47, 17, 12, 1, 111, 39, 17, 12, 1, 111, 66, 17, 12, + 1, 111, 128, 17, 12, 1, 236, 147, 47, 17, 12, 1, 236, 147, 39, 17, 12, 1, + 236, 147, 66, 17, 12, 1, 236, 147, 128, 17, 12, 1, 249, 184, 47, 17, 12, + 1, 249, 184, 39, 17, 12, 1, 222, 30, 47, 17, 12, 1, 222, 30, 39, 17, 12, + 1, 227, 197, 47, 17, 12, 1, 227, 197, 39, 17, 12, 1, 217, 107, 47, 17, + 12, 1, 217, 107, 39, 17, 12, 1, 226, 83, 47, 17, 12, 1, 226, 83, 39, 17, + 12, 1, 226, 83, 66, 17, 12, 1, 226, 83, 128, 17, 12, 1, 224, 243, 47, 17, + 12, 1, 224, 243, 39, 17, 12, 1, 224, 243, 66, 17, 12, 1, 224, 243, 128, + 17, 12, 1, 226, 171, 47, 17, 12, 1, 226, 171, 39, 17, 12, 1, 226, 171, + 66, 17, 12, 1, 226, 171, 128, 17, 12, 1, 249, 203, 47, 17, 12, 1, 249, + 203, 39, 17, 12, 1, 249, 203, 66, 17, 12, 1, 249, 203, 128, 17, 12, 1, + 222, 138, 47, 17, 12, 1, 222, 138, 39, 17, 12, 1, 222, 138, 66, 17, 12, + 1, 222, 138, 128, 17, 12, 1, 217, 110, 47, 17, 12, 1, 217, 110, 39, 17, + 12, 1, 217, 110, 66, 17, 12, 1, 217, 110, 128, 17, 12, 1, 254, 192, 47, + 17, 12, 1, 254, 192, 39, 17, 12, 1, 254, 192, 66, 17, 12, 1, 254, 192, + 128, 17, 12, 1, 244, 123, 47, 17, 12, 1, 244, 123, 39, 17, 12, 1, 244, + 123, 66, 17, 12, 1, 244, 123, 128, 17, 12, 1, 245, 222, 47, 17, 12, 1, + 245, 222, 39, 17, 12, 1, 245, 222, 66, 17, 12, 1, 245, 222, 128, 17, 12, + 1, 228, 149, 47, 17, 12, 1, 228, 149, 39, 17, 12, 1, 228, 149, 66, 17, + 12, 1, 228, 149, 128, 17, 12, 1, 236, 247, 47, 17, 12, 1, 236, 247, 39, + 17, 12, 1, 236, 247, 66, 17, 12, 1, 236, 247, 128, 17, 12, 1, 235, 161, + 47, 17, 12, 1, 235, 161, 39, 17, 12, 1, 235, 161, 66, 17, 12, 1, 235, + 161, 128, 17, 12, 1, 62, 47, 17, 12, 1, 62, 39, 17, 12, 1, 62, 66, 17, + 12, 1, 62, 128, 17, 12, 1, 231, 194, 47, 17, 12, 1, 231, 194, 39, 17, 12, + 1, 231, 194, 66, 17, 12, 1, 231, 194, 128, 17, 12, 1, 243, 147, 47, 17, + 12, 1, 243, 147, 39, 17, 12, 1, 243, 147, 66, 17, 12, 1, 243, 147, 128, + 17, 12, 1, 218, 234, 47, 17, 12, 1, 218, 234, 39, 17, 12, 1, 99, 197, 47, + 17, 12, 1, 99, 197, 39, 17, 12, 1, 70, 47, 17, 12, 1, 70, 39, 17, 12, 1, + 70, 66, 17, 12, 1, 70, 128, 17, 12, 24, 235, 161, 2, 99, 2, 234, 111, 71, + 47, 17, 12, 24, 235, 161, 2, 99, 2, 234, 111, 71, 39, 17, 12, 24, 235, + 161, 2, 99, 2, 181, 71, 47, 17, 12, 24, 235, 161, 2, 99, 2, 181, 71, 39, + 17, 12, 24, 235, 161, 2, 99, 2, 181, 252, 118, 47, 17, 12, 24, 235, 161, + 2, 99, 2, 181, 252, 118, 39, 17, 12, 24, 235, 161, 2, 99, 47, 17, 12, 24, + 235, 161, 2, 99, 39, 17, 217, 85, 218, 199, 231, 203, 223, 254, 110, 246, + 95, 78, 110, 228, 69, 78, 110, 54, 55, 110, 248, 155, 55, 110, 229, 169, + 55, 110, 254, 134, 110, 254, 79, 110, 42, 229, 229, 110, 45, 229, 229, + 110, 253, 251, 110, 88, 55, 110, 250, 168, 110, 242, 120, 110, 245, 90, + 223, 136, 110, 224, 17, 110, 20, 217, 84, 110, 20, 107, 110, 20, 103, + 110, 20, 160, 110, 20, 154, 110, 20, 174, 110, 20, 182, 110, 20, 191, + 110, 20, 185, 110, 20, 190, 110, 250, 175, 110, 225, 67, 110, 235, 87, + 55, 110, 246, 154, 55, 110, 244, 30, 55, 110, 228, 82, 78, 110, 250, 167, + 253, 244, 110, 7, 6, 1, 60, 110, 7, 6, 1, 253, 204, 110, 7, 6, 1, 251, + 202, 110, 7, 6, 1, 250, 46, 110, 7, 6, 1, 73, 110, 7, 6, 1, 246, 74, 110, + 7, 6, 1, 245, 67, 110, 7, 6, 1, 243, 225, 110, 7, 6, 1, 72, 110, 7, 6, 1, + 237, 126, 110, 7, 6, 1, 237, 17, 110, 7, 6, 1, 153, 110, 7, 6, 1, 189, + 110, 7, 6, 1, 207, 110, 7, 6, 1, 74, 110, 7, 6, 1, 230, 59, 110, 7, 6, 1, + 228, 163, 110, 7, 6, 1, 152, 110, 7, 6, 1, 198, 110, 7, 6, 1, 222, 201, + 110, 7, 6, 1, 68, 110, 7, 6, 1, 216, 216, 110, 7, 6, 1, 219, 40, 110, 7, + 6, 1, 218, 151, 110, 7, 6, 1, 218, 90, 110, 7, 6, 1, 217, 157, 110, 42, + 40, 115, 110, 227, 160, 224, 17, 110, 45, 40, 115, 110, 250, 217, 255, 0, + 110, 109, 235, 43, 110, 244, 37, 255, 0, 110, 7, 3, 1, 60, 110, 7, 3, 1, + 253, 204, 110, 7, 3, 1, 251, 202, 110, 7, 3, 1, 250, 46, 110, 7, 3, 1, + 73, 110, 7, 3, 1, 246, 74, 110, 7, 3, 1, 245, 67, 110, 7, 3, 1, 243, 225, + 110, 7, 3, 1, 72, 110, 7, 3, 1, 237, 126, 110, 7, 3, 1, 237, 17, 110, 7, + 3, 1, 153, 110, 7, 3, 1, 189, 110, 7, 3, 1, 207, 110, 7, 3, 1, 74, 110, + 7, 3, 1, 230, 59, 110, 7, 3, 1, 228, 163, 110, 7, 3, 1, 152, 110, 7, 3, + 1, 198, 110, 7, 3, 1, 222, 201, 110, 7, 3, 1, 68, 110, 7, 3, 1, 216, 216, + 110, 7, 3, 1, 219, 40, 110, 7, 3, 1, 218, 151, 110, 7, 3, 1, 218, 90, + 110, 7, 3, 1, 217, 157, 110, 42, 250, 79, 115, 110, 69, 235, 43, 110, 45, + 250, 79, 115, 110, 221, 179, 110, 42, 67, 229, 229, 110, 45, 67, 229, + 229, 93, 98, 245, 90, 223, 136, 93, 42, 250, 124, 115, 93, 45, 250, 124, + 115, 93, 98, 250, 168, 93, 52, 233, 193, 248, 145, 93, 52, 1, 218, 187, + 93, 52, 1, 3, 60, 93, 52, 1, 3, 72, 93, 52, 1, 3, 68, 93, 52, 1, 3, 73, + 93, 52, 1, 3, 74, 93, 52, 1, 3, 184, 93, 52, 1, 3, 217, 200, 93, 52, 1, + 3, 217, 231, 93, 52, 1, 3, 221, 0, 93, 236, 202, 228, 223, 224, 9, 78, + 93, 52, 1, 60, 93, 52, 1, 72, 93, 52, 1, 68, 93, 52, 1, 73, 93, 52, 1, + 74, 93, 52, 1, 175, 93, 52, 1, 236, 113, 93, 52, 1, 236, 7, 93, 52, 1, + 236, 184, 93, 52, 1, 236, 57, 93, 52, 1, 226, 177, 93, 52, 1, 224, 140, + 93, 52, 1, 223, 103, 93, 52, 1, 226, 94, 93, 52, 1, 224, 26, 93, 52, 1, + 222, 155, 93, 52, 1, 221, 205, 93, 52, 1, 221, 0, 93, 52, 1, 222, 87, 93, + 52, 1, 101, 93, 52, 1, 208, 93, 52, 1, 232, 62, 93, 52, 1, 231, 144, 93, + 52, 1, 232, 141, 93, 52, 1, 231, 204, 93, 52, 1, 155, 93, 52, 1, 243, + 112, 93, 52, 1, 242, 173, 93, 52, 1, 243, 162, 93, 52, 1, 243, 4, 93, 52, + 1, 196, 93, 52, 1, 233, 196, 93, 52, 1, 233, 99, 93, 52, 1, 234, 25, 93, + 52, 1, 233, 136, 93, 52, 1, 184, 93, 52, 1, 217, 200, 93, 52, 1, 217, + 231, 93, 52, 1, 203, 93, 52, 1, 227, 147, 93, 52, 1, 227, 22, 93, 52, 1, + 227, 216, 93, 52, 1, 227, 75, 93, 52, 1, 219, 7, 93, 52, 1, 207, 93, 52, + 219, 70, 224, 9, 78, 93, 52, 225, 72, 224, 9, 78, 93, 22, 245, 185, 93, + 22, 1, 236, 86, 93, 22, 1, 223, 211, 93, 22, 1, 236, 79, 93, 22, 1, 232, + 55, 93, 22, 1, 232, 53, 93, 22, 1, 232, 52, 93, 22, 1, 221, 192, 93, 22, + 1, 223, 200, 93, 22, 1, 227, 140, 93, 22, 1, 227, 135, 93, 22, 1, 227, + 132, 93, 22, 1, 227, 125, 93, 22, 1, 227, 120, 93, 22, 1, 227, 115, 93, + 22, 1, 227, 126, 93, 22, 1, 227, 138, 93, 22, 1, 233, 187, 93, 22, 1, + 229, 99, 93, 22, 1, 223, 208, 93, 22, 1, 229, 88, 93, 22, 1, 224, 104, + 93, 22, 1, 223, 205, 93, 22, 1, 238, 22, 93, 22, 1, 250, 230, 93, 22, 1, + 223, 215, 93, 22, 1, 251, 29, 93, 22, 1, 236, 128, 93, 22, 1, 222, 0, 93, + 22, 1, 229, 127, 93, 22, 1, 243, 106, 93, 22, 1, 60, 93, 22, 1, 254, 234, + 93, 22, 1, 184, 93, 22, 1, 218, 65, 93, 22, 1, 246, 168, 93, 22, 1, 73, + 93, 22, 1, 218, 16, 93, 22, 1, 218, 25, 93, 22, 1, 74, 93, 22, 1, 219, 7, + 93, 22, 1, 219, 4, 93, 22, 1, 230, 167, 93, 22, 1, 217, 231, 93, 22, 1, + 68, 93, 22, 1, 218, 219, 93, 22, 1, 218, 227, 93, 22, 1, 218, 204, 93, + 22, 1, 217, 200, 93, 22, 1, 246, 115, 93, 22, 1, 217, 250, 93, 22, 1, 72, + 110, 251, 86, 55, 110, 229, 11, 55, 110, 212, 55, 110, 234, 115, 110, + 252, 1, 135, 110, 218, 19, 55, 110, 218, 182, 55, 93, 245, 122, 170, 219, + 152, 93, 127, 65, 93, 220, 53, 65, 93, 90, 65, 93, 247, 130, 65, 93, 84, + 223, 227, 93, 67, 250, 221, 237, 180, 254, 112, 254, 128, 237, 180, 254, + 112, 225, 54, 237, 180, 254, 112, 222, 56, 230, 178, 227, 179, 251, 55, + 227, 179, 251, 55, 57, 49, 4, 253, 188, 60, 57, 49, 4, 253, 157, 73, 57, + 49, 4, 253, 166, 72, 57, 49, 4, 253, 134, 74, 57, 49, 4, 253, 184, 68, + 57, 49, 4, 253, 203, 249, 207, 57, 49, 4, 253, 150, 249, 92, 57, 49, 4, + 253, 190, 249, 15, 57, 49, 4, 253, 180, 248, 167, 57, 49, 4, 253, 144, + 247, 111, 57, 49, 4, 253, 138, 237, 123, 57, 49, 4, 253, 149, 237, 114, + 57, 49, 4, 253, 159, 237, 59, 57, 49, 4, 253, 130, 237, 43, 57, 49, 4, + 253, 118, 175, 57, 49, 4, 253, 151, 236, 184, 57, 49, 4, 253, 128, 236, + 113, 57, 49, 4, 253, 125, 236, 57, 57, 49, 4, 253, 114, 236, 7, 57, 49, + 4, 253, 115, 196, 57, 49, 4, 253, 181, 234, 25, 57, 49, 4, 253, 122, 233, + 196, 57, 49, 4, 253, 179, 233, 136, 57, 49, 4, 253, 171, 233, 99, 57, 49, + 4, 253, 192, 208, 57, 49, 4, 253, 170, 232, 141, 57, 49, 4, 253, 164, + 232, 62, 57, 49, 4, 253, 143, 231, 204, 57, 49, 4, 253, 140, 231, 144, + 57, 49, 4, 253, 199, 187, 57, 49, 4, 253, 123, 229, 198, 57, 49, 4, 253, + 156, 229, 108, 57, 49, 4, 253, 183, 229, 37, 57, 49, 4, 253, 145, 228, + 202, 57, 49, 4, 253, 178, 228, 155, 57, 49, 4, 253, 117, 228, 136, 57, + 49, 4, 253, 173, 228, 121, 57, 49, 4, 253, 162, 228, 110, 57, 49, 4, 253, + 135, 203, 57, 49, 4, 253, 167, 227, 216, 57, 49, 4, 253, 142, 227, 147, + 57, 49, 4, 253, 201, 227, 75, 57, 49, 4, 253, 168, 227, 22, 57, 49, 4, + 253, 163, 226, 177, 57, 49, 4, 253, 186, 226, 94, 57, 49, 4, 253, 154, + 224, 140, 57, 49, 4, 253, 182, 224, 26, 57, 49, 4, 253, 137, 223, 103, + 57, 49, 4, 253, 136, 222, 155, 57, 49, 4, 253, 197, 222, 87, 57, 49, 4, + 253, 158, 221, 205, 57, 49, 4, 253, 195, 101, 57, 49, 4, 253, 126, 221, + 0, 57, 49, 4, 253, 141, 219, 7, 57, 49, 4, 253, 120, 218, 227, 57, 49, 4, + 253, 155, 218, 204, 57, 49, 4, 253, 153, 218, 187, 57, 49, 4, 253, 177, + 217, 114, 57, 49, 4, 253, 121, 217, 92, 57, 49, 4, 253, 174, 217, 21, 57, + 49, 4, 253, 169, 255, 60, 57, 49, 4, 253, 152, 255, 59, 57, 49, 4, 253, + 111, 253, 232, 57, 49, 4, 253, 124, 247, 82, 57, 49, 4, 253, 107, 247, + 81, 57, 49, 4, 253, 147, 231, 85, 57, 49, 4, 253, 165, 228, 201, 57, 49, + 4, 253, 133, 228, 204, 57, 49, 4, 253, 119, 228, 2, 57, 49, 4, 253, 161, + 228, 1, 57, 49, 4, 253, 127, 227, 74, 57, 49, 4, 253, 129, 222, 153, 57, + 49, 4, 253, 109, 220, 223, 57, 49, 4, 253, 106, 103, 57, 49, 16, 253, + 176, 57, 49, 16, 253, 175, 57, 49, 16, 253, 172, 57, 49, 16, 253, 160, + 57, 49, 16, 253, 148, 57, 49, 16, 253, 146, 57, 49, 16, 253, 139, 57, 49, + 16, 253, 132, 57, 49, 16, 253, 131, 57, 49, 16, 253, 116, 57, 49, 16, + 253, 113, 57, 49, 16, 253, 112, 57, 49, 16, 253, 110, 57, 49, 16, 253, + 108, 57, 49, 97, 253, 105, 234, 86, 57, 49, 97, 253, 104, 218, 183, 57, + 49, 97, 253, 103, 249, 80, 57, 49, 97, 253, 102, 246, 151, 57, 49, 97, + 253, 101, 234, 68, 57, 49, 97, 253, 100, 223, 162, 57, 49, 97, 253, 99, + 246, 100, 57, 49, 97, 253, 98, 227, 239, 57, 49, 97, 253, 97, 224, 245, + 57, 49, 97, 253, 96, 243, 161, 57, 49, 97, 253, 95, 224, 4, 57, 49, 97, + 253, 94, 252, 39, 57, 49, 97, 253, 93, 250, 110, 57, 49, 97, 253, 92, + 251, 243, 57, 49, 97, 253, 91, 218, 212, 57, 49, 97, 253, 90, 252, 198, + 57, 49, 97, 253, 89, 230, 147, 57, 49, 97, 253, 88, 223, 244, 57, 49, 97, + 253, 87, 250, 54, 57, 49, 233, 125, 253, 86, 236, 223, 57, 49, 233, 125, + 253, 85, 236, 231, 57, 49, 97, 253, 84, 230, 157, 57, 49, 97, 253, 83, + 218, 192, 57, 49, 97, 253, 82, 57, 49, 233, 125, 253, 81, 254, 44, 57, + 49, 233, 125, 253, 80, 233, 247, 57, 49, 97, 253, 79, 252, 0, 57, 49, 97, + 253, 78, 244, 62, 57, 49, 97, 253, 77, 57, 49, 97, 253, 76, 218, 177, 57, + 49, 97, 253, 75, 57, 49, 97, 253, 74, 57, 49, 97, 253, 73, 242, 189, 57, + 49, 97, 253, 72, 57, 49, 97, 253, 71, 57, 49, 97, 253, 70, 57, 49, 233, + 125, 253, 68, 220, 235, 57, 49, 97, 253, 67, 57, 49, 97, 253, 66, 57, 49, + 97, 253, 65, 250, 192, 57, 49, 97, 253, 64, 57, 49, 97, 253, 63, 57, 49, + 97, 253, 62, 244, 218, 57, 49, 97, 253, 61, 254, 31, 57, 49, 97, 253, 60, + 57, 49, 97, 253, 59, 57, 49, 97, 253, 58, 57, 49, 97, 253, 57, 57, 49, + 97, 253, 56, 57, 49, 97, 253, 55, 57, 49, 97, 253, 54, 57, 49, 97, 253, + 53, 57, 49, 97, 253, 52, 57, 49, 97, 253, 51, 233, 120, 57, 49, 97, 253, + 50, 57, 49, 97, 253, 49, 221, 98, 57, 49, 97, 253, 48, 57, 49, 97, 253, + 47, 57, 49, 97, 253, 46, 57, 49, 97, 253, 45, 57, 49, 97, 253, 44, 57, + 49, 97, 253, 43, 57, 49, 97, 253, 42, 57, 49, 97, 253, 41, 57, 49, 97, + 253, 40, 57, 49, 97, 253, 39, 57, 49, 97, 253, 38, 57, 49, 97, 253, 37, + 243, 140, 57, 49, 97, 253, 16, 245, 131, 57, 49, 97, 253, 13, 252, 182, + 57, 49, 97, 253, 8, 223, 249, 57, 49, 97, 253, 7, 65, 57, 49, 97, 253, 6, + 57, 49, 97, 253, 5, 223, 25, 57, 49, 97, 253, 4, 57, 49, 97, 253, 3, 57, + 49, 97, 253, 2, 218, 208, 251, 52, 57, 49, 97, 253, 1, 251, 52, 57, 49, + 97, 253, 0, 251, 53, 245, 105, 57, 49, 97, 252, 255, 218, 210, 57, 49, + 97, 252, 254, 57, 49, 97, 252, 253, 57, 49, 233, 125, 252, 252, 248, 211, + 57, 49, 97, 252, 251, 57, 49, 97, 252, 250, 57, 49, 97, 252, 248, 57, 49, + 97, 252, 247, 57, 49, 97, 252, 246, 57, 49, 97, 252, 245, 249, 149, 57, + 49, 97, 252, 244, 57, 49, 97, 252, 243, 57, 49, 97, 252, 242, 57, 49, 97, + 252, 241, 57, 49, 97, 252, 240, 57, 49, 97, 219, 99, 253, 69, 57, 49, 97, + 219, 99, 253, 36, 57, 49, 97, 219, 99, 253, 35, 57, 49, 97, 219, 99, 253, + 34, 57, 49, 97, 219, 99, 253, 33, 57, 49, 97, 219, 99, 253, 32, 57, 49, + 97, 219, 99, 253, 31, 57, 49, 97, 219, 99, 253, 30, 57, 49, 97, 219, 99, + 253, 29, 57, 49, 97, 219, 99, 253, 28, 57, 49, 97, 219, 99, 253, 27, 57, + 49, 97, 219, 99, 253, 26, 57, 49, 97, 219, 99, 253, 25, 57, 49, 97, 219, + 99, 253, 24, 57, 49, 97, 219, 99, 253, 23, 57, 49, 97, 219, 99, 253, 22, + 57, 49, 97, 219, 99, 253, 21, 57, 49, 97, 219, 99, 253, 20, 57, 49, 97, + 219, 99, 253, 19, 57, 49, 97, 219, 99, 253, 18, 57, 49, 97, 219, 99, 253, + 17, 57, 49, 97, 219, 99, 253, 15, 57, 49, 97, 219, 99, 253, 14, 57, 49, + 97, 219, 99, 253, 12, 57, 49, 97, 219, 99, 253, 11, 57, 49, 97, 219, 99, + 253, 10, 57, 49, 97, 219, 99, 253, 9, 57, 49, 97, 219, 99, 252, 249, 57, + 49, 97, 219, 99, 252, 239, 254, 227, 218, 174, 225, 55, 235, 43, 254, + 227, 218, 174, 225, 55, 248, 145, 254, 227, 251, 45, 78, 254, 227, 54, + 107, 254, 227, 54, 103, 254, 227, 54, 160, 254, 227, 54, 154, 254, 227, + 54, 174, 254, 227, 54, 182, 254, 227, 54, 191, 254, 227, 54, 185, 254, + 227, 54, 190, 254, 227, 54, 222, 65, 254, 227, 54, 220, 219, 254, 227, + 54, 221, 245, 254, 227, 54, 245, 119, 254, 227, 54, 245, 196, 254, 227, + 54, 224, 69, 254, 227, 54, 225, 38, 254, 227, 54, 246, 227, 254, 227, 54, + 232, 27, 254, 227, 54, 131, 242, 161, 254, 227, 54, 124, 242, 161, 254, + 227, 54, 148, 242, 161, 254, 227, 54, 245, 116, 242, 161, 254, 227, 54, + 245, 170, 242, 161, 254, 227, 54, 224, 82, 242, 161, 254, 227, 54, 225, + 43, 242, 161, 254, 227, 54, 246, 235, 242, 161, 254, 227, 54, 232, 31, + 242, 161, 254, 227, 54, 131, 221, 231, 254, 227, 54, 124, 221, 231, 254, + 227, 54, 148, 221, 231, 254, 227, 54, 245, 116, 221, 231, 254, 227, 54, + 245, 170, 221, 231, 254, 227, 54, 224, 82, 221, 231, 254, 227, 54, 225, + 43, 221, 231, 254, 227, 54, 246, 235, 221, 231, 254, 227, 54, 232, 31, + 221, 231, 254, 227, 54, 222, 66, 221, 231, 254, 227, 54, 220, 220, 221, + 231, 254, 227, 54, 221, 246, 221, 231, 254, 227, 54, 245, 120, 221, 231, + 254, 227, 54, 245, 197, 221, 231, 254, 227, 54, 224, 70, 221, 231, 254, + 227, 54, 225, 39, 221, 231, 254, 227, 54, 246, 228, 221, 231, 254, 227, + 54, 232, 28, 221, 231, 254, 227, 218, 222, 252, 190, 220, 72, 254, 227, + 218, 222, 245, 178, 223, 88, 254, 227, 218, 222, 226, 90, 223, 88, 254, + 227, 218, 222, 221, 252, 223, 88, 254, 227, 218, 222, 245, 110, 223, 88, + 254, 227, 247, 114, 234, 24, 245, 178, 223, 88, 254, 227, 235, 31, 234, + 24, 245, 178, 223, 88, 254, 227, 234, 24, 226, 90, 223, 88, 254, 227, + 234, 24, 221, 252, 223, 88, 23, 254, 251, 253, 234, 131, 228, 89, 23, + 254, 251, 253, 234, 131, 243, 194, 23, 254, 251, 253, 234, 131, 247, 126, + 23, 254, 251, 253, 234, 174, 23, 254, 251, 253, 234, 245, 196, 23, 254, + 251, 253, 234, 245, 170, 242, 161, 23, 254, 251, 253, 234, 245, 170, 221, + 231, 23, 254, 251, 253, 234, 245, 197, 221, 231, 23, 254, 251, 253, 234, + 245, 170, 222, 126, 23, 254, 251, 253, 234, 222, 66, 222, 126, 23, 254, + 251, 253, 234, 245, 197, 222, 126, 23, 254, 251, 253, 234, 131, 242, 162, + 222, 126, 23, 254, 251, 253, 234, 245, 170, 242, 162, 222, 126, 23, 254, + 251, 253, 234, 131, 221, 232, 222, 126, 23, 254, 251, 253, 234, 245, 170, + 221, 232, 222, 126, 23, 254, 251, 253, 234, 245, 170, 223, 153, 23, 254, + 251, 253, 234, 222, 66, 223, 153, 23, 254, 251, 253, 234, 245, 197, 223, + 153, 23, 254, 251, 253, 234, 131, 242, 162, 223, 153, 23, 254, 251, 253, + 234, 245, 170, 242, 162, 223, 153, 23, 254, 251, 253, 234, 131, 221, 232, + 223, 153, 23, 254, 251, 253, 234, 222, 66, 221, 232, 223, 153, 23, 254, + 251, 253, 234, 245, 197, 221, 232, 223, 153, 23, 254, 251, 253, 234, 222, + 66, 233, 139, 23, 254, 251, 243, 134, 131, 229, 49, 23, 254, 251, 222, 8, + 107, 23, 254, 251, 243, 132, 107, 23, 254, 251, 246, 159, 103, 23, 254, + 251, 222, 8, 103, 23, 254, 251, 250, 51, 124, 247, 125, 23, 254, 251, + 246, 159, 124, 247, 125, 23, 254, 251, 221, 71, 174, 23, 254, 251, 221, + 71, 222, 65, 23, 254, 251, 221, 71, 222, 66, 254, 144, 17, 23, 254, 251, + 243, 132, 222, 65, 23, 254, 251, 233, 240, 222, 65, 23, 254, 251, 222, 8, + 222, 65, 23, 254, 251, 222, 8, 221, 245, 23, 254, 251, 221, 71, 245, 196, + 23, 254, 251, 221, 71, 245, 197, 254, 144, 17, 23, 254, 251, 243, 132, + 245, 196, 23, 254, 251, 222, 8, 245, 196, 23, 254, 251, 222, 8, 131, 242, + 161, 23, 254, 251, 222, 8, 148, 242, 161, 23, 254, 251, 246, 159, 245, + 170, 242, 161, 23, 254, 251, 221, 71, 245, 170, 242, 161, 23, 254, 251, + 222, 8, 245, 170, 242, 161, 23, 254, 251, 251, 126, 245, 170, 242, 161, + 23, 254, 251, 232, 200, 245, 170, 242, 161, 23, 254, 251, 222, 8, 131, + 221, 231, 23, 254, 251, 222, 8, 245, 170, 221, 231, 23, 254, 251, 249, + 65, 245, 170, 233, 139, 23, 254, 251, 223, 127, 245, 197, 233, 139, 23, + 131, 144, 55, 23, 131, 144, 5, 254, 144, 17, 23, 124, 221, 250, 55, 23, + 148, 228, 88, 55, 23, 218, 23, 55, 23, 222, 127, 55, 23, 247, 127, 55, + 23, 230, 175, 55, 23, 124, 230, 174, 55, 23, 148, 230, 174, 55, 23, 245, + 116, 230, 174, 55, 23, 245, 170, 230, 174, 55, 23, 233, 235, 55, 23, 235, + 210, 252, 190, 55, 23, 235, 26, 55, 23, 230, 84, 55, 23, 218, 132, 55, + 23, 254, 16, 55, 23, 254, 27, 55, 23, 244, 42, 55, 23, 221, 58, 252, 190, + 55, 23, 217, 85, 55, 227, 68, 225, 35, 55, 227, 68, 220, 83, 55, 227, 68, + 225, 59, 55, 227, 68, 225, 33, 55, 227, 68, 248, 226, 225, 33, 55, 227, + 68, 224, 120, 55, 227, 68, 249, 61, 55, 227, 68, 228, 76, 55, 227, 68, + 225, 47, 55, 227, 68, 247, 93, 55, 227, 68, 254, 14, 55, 227, 68, 251, + 81, 55, 229, 137, 248, 205, 5, 229, 192, 229, 137, 248, 205, 5, 229, 44, + 243, 159, 229, 137, 248, 205, 5, 222, 109, 243, 159, 229, 137, 248, 205, + 5, 251, 139, 229, 137, 248, 205, 5, 251, 24, 229, 137, 248, 205, 5, 218, + 183, 229, 137, 248, 205, 5, 243, 140, 229, 137, 248, 205, 5, 244, 210, + 229, 137, 248, 205, 5, 221, 204, 229, 137, 248, 205, 5, 65, 229, 137, + 248, 205, 5, 252, 24, 229, 137, 248, 205, 5, 224, 218, 229, 137, 248, + 205, 5, 250, 187, 229, 137, 248, 205, 5, 234, 85, 229, 137, 248, 205, 5, + 234, 48, 229, 137, 248, 205, 5, 226, 122, 229, 137, 248, 205, 5, 235, 64, + 229, 137, 248, 205, 5, 252, 33, 229, 137, 248, 205, 5, 251, 129, 229, 51, + 229, 137, 248, 205, 5, 248, 156, 229, 137, 248, 205, 5, 250, 172, 229, + 137, 248, 205, 5, 224, 50, 229, 137, 248, 205, 5, 250, 173, 229, 137, + 248, 205, 5, 252, 134, 229, 137, 248, 205, 5, 224, 206, 229, 137, 248, + 205, 5, 242, 189, 229, 137, 248, 205, 5, 243, 111, 229, 137, 248, 205, 5, + 251, 240, 235, 106, 229, 137, 248, 205, 5, 251, 124, 229, 137, 248, 205, + 5, 227, 239, 229, 137, 248, 205, 5, 247, 13, 229, 137, 248, 205, 5, 247, + 133, 229, 137, 248, 205, 5, 220, 247, 229, 137, 248, 205, 5, 252, 137, + 229, 137, 248, 205, 5, 229, 52, 221, 98, 229, 137, 248, 205, 5, 219, 84, + 229, 137, 248, 205, 5, 229, 244, 229, 137, 248, 205, 5, 227, 62, 229, + 137, 248, 205, 5, 235, 52, 229, 137, 248, 205, 5, 230, 69, 252, 233, 229, + 137, 248, 205, 5, 245, 143, 229, 137, 248, 205, 5, 244, 38, 229, 137, + 248, 205, 5, 223, 128, 229, 137, 248, 205, 5, 3, 253, 213, 229, 137, 248, + 205, 5, 218, 235, 252, 206, 229, 137, 248, 205, 5, 36, 230, 177, 92, 234, + 197, 1, 60, 234, 197, 1, 73, 234, 197, 1, 253, 204, 234, 197, 1, 252, 95, + 234, 197, 1, 245, 67, 234, 197, 1, 250, 46, 234, 197, 1, 72, 234, 197, 1, + 219, 40, 234, 197, 1, 217, 157, 234, 197, 1, 222, 37, 234, 197, 1, 237, + 126, 234, 197, 1, 237, 17, 234, 197, 1, 228, 163, 234, 197, 1, 153, 234, + 197, 1, 189, 234, 197, 1, 207, 234, 197, 1, 233, 140, 234, 197, 1, 231, + 218, 234, 197, 1, 68, 234, 197, 1, 230, 59, 234, 197, 1, 236, 75, 234, + 197, 1, 152, 234, 197, 1, 198, 234, 197, 1, 222, 201, 234, 197, 1, 221, + 32, 234, 197, 1, 254, 131, 234, 197, 1, 246, 197, 234, 197, 1, 243, 225, + 234, 197, 1, 218, 151, 251, 133, 1, 60, 251, 133, 1, 230, 45, 251, 133, + 1, 250, 46, 251, 133, 1, 153, 251, 133, 1, 220, 21, 251, 133, 1, 152, + 251, 133, 1, 235, 126, 251, 133, 1, 255, 60, 251, 133, 1, 228, 163, 251, + 133, 1, 253, 204, 251, 133, 1, 189, 251, 133, 1, 74, 251, 133, 1, 249, + 209, 251, 133, 1, 222, 201, 251, 133, 1, 225, 27, 251, 133, 1, 225, 26, + 251, 133, 1, 198, 251, 133, 1, 251, 201, 251, 133, 1, 68, 251, 133, 1, + 231, 218, 251, 133, 1, 218, 151, 251, 133, 1, 207, 251, 133, 1, 221, 31, + 251, 133, 1, 230, 59, 251, 133, 1, 223, 219, 251, 133, 1, 72, 251, 133, + 1, 73, 251, 133, 1, 220, 18, 251, 133, 1, 237, 17, 251, 133, 1, 237, 8, + 251, 133, 1, 232, 170, 251, 133, 1, 220, 23, 251, 133, 1, 245, 67, 251, + 133, 1, 245, 2, 251, 133, 1, 223, 168, 251, 133, 1, 223, 167, 251, 133, + 1, 232, 117, 251, 133, 1, 237, 255, 251, 133, 1, 251, 200, 251, 133, 1, + 221, 32, 251, 133, 1, 220, 20, 251, 133, 1, 227, 53, 251, 133, 1, 234, + 41, 251, 133, 1, 234, 40, 251, 133, 1, 234, 39, 251, 133, 1, 234, 38, + 251, 133, 1, 235, 125, 251, 133, 1, 247, 17, 251, 133, 1, 220, 19, 48, + 30, 1, 60, 48, 30, 1, 252, 144, 48, 30, 1, 236, 184, 48, 30, 1, 249, 92, + 48, 30, 1, 73, 48, 30, 1, 219, 165, 48, 30, 1, 217, 92, 48, 30, 1, 243, + 162, 48, 30, 1, 222, 22, 48, 30, 1, 72, 48, 30, 1, 175, 48, 30, 1, 246, + 217, 48, 30, 1, 246, 205, 48, 30, 1, 246, 197, 48, 30, 1, 246, 133, 48, + 30, 1, 74, 48, 30, 1, 229, 198, 48, 30, 1, 224, 246, 48, 30, 1, 236, 7, + 48, 30, 1, 246, 148, 48, 30, 1, 246, 138, 48, 30, 1, 222, 87, 48, 30, 1, + 68, 48, 30, 1, 246, 220, 48, 30, 1, 229, 132, 48, 30, 1, 236, 137, 48, + 30, 1, 246, 244, 48, 30, 1, 246, 140, 48, 30, 1, 251, 46, 48, 30, 1, 237, + 255, 48, 30, 1, 220, 23, 48, 30, 231, 107, 107, 48, 30, 231, 107, 174, + 48, 30, 231, 107, 222, 65, 48, 30, 231, 107, 245, 196, 244, 50, 1, 254, + 199, 244, 50, 1, 252, 219, 244, 50, 1, 244, 100, 244, 50, 1, 249, 191, + 244, 50, 1, 254, 195, 244, 50, 1, 228, 146, 244, 50, 1, 237, 136, 244, + 50, 1, 243, 204, 244, 50, 1, 221, 241, 244, 50, 1, 246, 226, 244, 50, 1, + 235, 241, 244, 50, 1, 235, 170, 244, 50, 1, 234, 82, 244, 50, 1, 232, + 202, 244, 50, 1, 237, 108, 244, 50, 1, 220, 37, 244, 50, 1, 230, 31, 244, + 50, 1, 232, 27, 244, 50, 1, 227, 245, 244, 50, 1, 226, 123, 244, 50, 1, + 222, 74, 244, 50, 1, 218, 191, 244, 50, 1, 245, 249, 244, 50, 1, 238, 3, + 244, 50, 1, 242, 152, 244, 50, 1, 230, 91, 244, 50, 1, 232, 31, 242, 161, + 220, 106, 1, 254, 150, 220, 106, 1, 252, 102, 220, 106, 1, 244, 232, 220, + 106, 1, 236, 149, 220, 106, 1, 249, 62, 220, 106, 1, 243, 4, 220, 106, 1, + 218, 187, 220, 106, 1, 217, 83, 220, 106, 1, 242, 185, 220, 106, 1, 222, + 50, 220, 106, 1, 217, 220, 220, 106, 1, 236, 246, 220, 106, 1, 224, 209, + 220, 106, 1, 235, 156, 220, 106, 1, 234, 1, 220, 106, 1, 249, 33, 220, + 106, 1, 231, 103, 220, 106, 1, 217, 13, 220, 106, 1, 226, 144, 220, 106, + 1, 254, 191, 220, 106, 1, 228, 202, 220, 106, 1, 226, 169, 220, 106, 1, + 228, 103, 220, 106, 1, 227, 231, 220, 106, 1, 222, 26, 220, 106, 1, 244, + 122, 220, 106, 1, 101, 220, 106, 1, 72, 220, 106, 1, 68, 220, 106, 1, + 223, 178, 220, 106, 218, 174, 248, 191, 48, 229, 159, 5, 60, 48, 229, + 159, 5, 72, 48, 229, 159, 5, 68, 48, 229, 159, 5, 175, 48, 229, 159, 5, + 236, 7, 48, 229, 159, 5, 245, 0, 48, 229, 159, 5, 244, 17, 48, 229, 159, + 5, 218, 138, 48, 229, 159, 5, 251, 169, 48, 229, 159, 5, 237, 123, 48, + 229, 159, 5, 237, 98, 48, 229, 159, 5, 222, 155, 48, 229, 159, 5, 221, 0, + 48, 229, 159, 5, 249, 207, 48, 229, 159, 5, 249, 15, 48, 229, 159, 5, + 247, 111, 48, 229, 159, 5, 222, 35, 48, 229, 159, 5, 187, 48, 229, 159, + 5, 252, 237, 48, 229, 159, 5, 246, 8, 48, 229, 159, 5, 208, 48, 229, 159, + 5, 231, 144, 48, 229, 159, 5, 196, 48, 229, 159, 5, 233, 196, 48, 229, + 159, 5, 233, 99, 48, 229, 159, 5, 184, 48, 229, 159, 5, 219, 189, 48, + 229, 159, 5, 219, 94, 48, 229, 159, 5, 203, 48, 229, 159, 5, 227, 22, 48, + 229, 159, 5, 235, 188, 48, 229, 159, 5, 226, 177, 48, 229, 159, 5, 217, + 114, 48, 229, 159, 5, 225, 25, 48, 229, 159, 5, 223, 218, 48, 229, 159, + 5, 155, 48, 229, 159, 5, 253, 227, 48, 229, 159, 5, 253, 226, 48, 229, + 159, 5, 253, 225, 48, 229, 159, 5, 218, 115, 48, 229, 159, 5, 249, 188, + 48, 229, 159, 5, 249, 187, 48, 229, 159, 5, 252, 224, 48, 229, 159, 5, + 251, 220, 48, 229, 159, 218, 174, 248, 191, 48, 229, 159, 54, 107, 48, + 229, 159, 54, 103, 48, 229, 159, 54, 222, 65, 48, 229, 159, 54, 220, 219, + 48, 229, 159, 54, 242, 161, 161, 6, 1, 171, 72, 161, 6, 1, 171, 73, 161, + 6, 1, 171, 60, 161, 6, 1, 171, 254, 202, 161, 6, 1, 171, 74, 161, 6, 1, + 171, 230, 127, 161, 6, 1, 224, 192, 72, 161, 6, 1, 224, 192, 73, 161, 6, + 1, 224, 192, 60, 161, 6, 1, 224, 192, 254, 202, 161, 6, 1, 224, 192, 74, + 161, 6, 1, 224, 192, 230, 127, 161, 6, 1, 253, 212, 161, 6, 1, 230, 70, + 161, 6, 1, 218, 165, 161, 6, 1, 218, 22, 161, 6, 1, 243, 225, 161, 6, 1, + 229, 191, 161, 6, 1, 252, 137, 161, 6, 1, 222, 80, 161, 6, 1, 249, 82, + 161, 6, 1, 251, 43, 161, 6, 1, 237, 113, 161, 6, 1, 236, 191, 161, 6, 1, + 244, 208, 161, 6, 1, 246, 244, 161, 6, 1, 219, 160, 161, 6, 1, 246, 118, + 161, 6, 1, 222, 21, 161, 6, 1, 246, 138, 161, 6, 1, 217, 90, 161, 6, 1, + 246, 133, 161, 6, 1, 217, 71, 161, 6, 1, 246, 148, 161, 6, 1, 246, 217, + 161, 6, 1, 246, 205, 161, 6, 1, 246, 197, 161, 6, 1, 246, 185, 161, 6, 1, + 230, 158, 161, 6, 1, 246, 101, 161, 3, 1, 171, 72, 161, 3, 1, 171, 73, + 161, 3, 1, 171, 60, 161, 3, 1, 171, 254, 202, 161, 3, 1, 171, 74, 161, 3, + 1, 171, 230, 127, 161, 3, 1, 224, 192, 72, 161, 3, 1, 224, 192, 73, 161, + 3, 1, 224, 192, 60, 161, 3, 1, 224, 192, 254, 202, 161, 3, 1, 224, 192, + 74, 161, 3, 1, 224, 192, 230, 127, 161, 3, 1, 253, 212, 161, 3, 1, 230, + 70, 161, 3, 1, 218, 165, 161, 3, 1, 218, 22, 161, 3, 1, 243, 225, 161, 3, + 1, 229, 191, 161, 3, 1, 252, 137, 161, 3, 1, 222, 80, 161, 3, 1, 249, 82, + 161, 3, 1, 251, 43, 161, 3, 1, 237, 113, 161, 3, 1, 236, 191, 161, 3, 1, + 244, 208, 161, 3, 1, 246, 244, 161, 3, 1, 219, 160, 161, 3, 1, 246, 118, + 161, 3, 1, 222, 21, 161, 3, 1, 246, 138, 161, 3, 1, 217, 90, 161, 3, 1, + 246, 133, 161, 3, 1, 217, 71, 161, 3, 1, 246, 148, 161, 3, 1, 246, 217, + 161, 3, 1, 246, 205, 161, 3, 1, 246, 197, 161, 3, 1, 246, 185, 161, 3, 1, + 230, 158, 161, 3, 1, 246, 101, 224, 252, 1, 229, 190, 224, 252, 1, 221, + 113, 224, 252, 1, 236, 112, 224, 252, 1, 245, 226, 224, 252, 1, 221, 255, + 224, 252, 1, 224, 26, 224, 252, 1, 223, 50, 224, 252, 1, 250, 245, 224, + 252, 1, 218, 24, 224, 252, 1, 242, 160, 224, 252, 1, 252, 83, 224, 252, + 1, 249, 91, 224, 252, 1, 244, 242, 224, 252, 1, 219, 60, 224, 252, 1, + 222, 3, 224, 252, 1, 217, 19, 224, 252, 1, 234, 23, 224, 252, 1, 237, 41, + 224, 252, 1, 218, 185, 224, 252, 1, 243, 213, 224, 252, 1, 235, 3, 224, + 252, 1, 233, 160, 224, 252, 1, 238, 6, 224, 252, 1, 246, 243, 224, 252, + 1, 254, 7, 224, 252, 1, 254, 237, 224, 252, 1, 230, 138, 224, 252, 1, + 218, 177, 224, 252, 1, 230, 83, 224, 252, 1, 254, 202, 224, 252, 1, 227, + 72, 224, 252, 1, 231, 103, 224, 252, 1, 247, 2, 224, 252, 1, 254, 207, + 224, 252, 1, 242, 65, 224, 252, 1, 220, 63, 224, 252, 1, 230, 183, 224, + 252, 1, 230, 121, 224, 252, 1, 230, 157, 224, 252, 1, 253, 215, 224, 252, + 1, 254, 45, 224, 252, 1, 230, 105, 224, 252, 1, 254, 188, 224, 252, 1, + 246, 142, 224, 252, 1, 254, 24, 224, 252, 1, 247, 11, 224, 252, 1, 242, + 71, 224, 252, 1, 217, 255, 230, 93, 1, 254, 168, 230, 93, 1, 252, 237, + 230, 93, 1, 222, 155, 230, 93, 1, 237, 123, 230, 93, 1, 218, 138, 230, + 93, 1, 236, 149, 230, 93, 1, 249, 81, 230, 93, 1, 203, 230, 93, 1, 226, + 177, 230, 93, 1, 224, 215, 230, 93, 1, 249, 36, 230, 93, 1, 251, 116, + 230, 93, 1, 245, 0, 230, 93, 1, 246, 8, 230, 93, 1, 228, 153, 230, 93, 1, + 237, 4, 230, 93, 1, 235, 184, 230, 93, 1, 233, 170, 230, 93, 1, 231, 89, + 230, 93, 1, 218, 233, 230, 93, 1, 155, 230, 93, 1, 184, 230, 93, 1, 60, + 230, 93, 1, 73, 230, 93, 1, 72, 230, 93, 1, 74, 230, 93, 1, 68, 230, 93, + 1, 255, 58, 230, 93, 1, 246, 250, 230, 93, 1, 230, 127, 230, 93, 20, 217, + 84, 230, 93, 20, 107, 230, 93, 20, 103, 230, 93, 20, 160, 230, 93, 20, + 154, 230, 93, 20, 174, 230, 93, 20, 182, 230, 93, 20, 191, 230, 93, 20, + 185, 230, 93, 20, 190, 250, 53, 4, 60, 250, 53, 4, 73, 250, 53, 4, 72, + 250, 53, 4, 74, 250, 53, 4, 68, 250, 53, 4, 237, 123, 250, 53, 4, 237, + 59, 250, 53, 4, 175, 250, 53, 4, 236, 184, 250, 53, 4, 236, 113, 250, 53, + 4, 236, 57, 250, 53, 4, 236, 7, 250, 53, 4, 235, 188, 250, 53, 4, 235, + 122, 250, 53, 4, 235, 67, 250, 53, 4, 235, 12, 250, 53, 4, 234, 231, 250, + 53, 4, 196, 250, 53, 4, 234, 25, 250, 53, 4, 233, 196, 250, 53, 4, 233, + 136, 250, 53, 4, 233, 99, 250, 53, 4, 208, 250, 53, 4, 232, 141, 250, 53, + 4, 232, 62, 250, 53, 4, 231, 204, 250, 53, 4, 231, 144, 250, 53, 4, 187, + 250, 53, 4, 229, 198, 250, 53, 4, 229, 108, 250, 53, 4, 229, 37, 250, 53, + 4, 228, 202, 250, 53, 4, 203, 250, 53, 4, 227, 216, 250, 53, 4, 227, 147, + 250, 53, 4, 227, 75, 250, 53, 4, 227, 22, 250, 53, 4, 226, 177, 250, 53, + 4, 226, 94, 250, 53, 4, 224, 140, 250, 53, 4, 224, 26, 250, 53, 4, 223, + 103, 250, 53, 4, 222, 155, 250, 53, 4, 222, 87, 250, 53, 4, 221, 205, + 250, 53, 4, 101, 250, 53, 4, 221, 0, 250, 53, 4, 219, 7, 250, 53, 4, 218, + 227, 250, 53, 4, 218, 204, 250, 53, 4, 218, 187, 250, 53, 4, 218, 138, + 250, 53, 4, 218, 135, 250, 53, 4, 217, 114, 250, 53, 4, 217, 21, 237, + 225, 254, 53, 1, 254, 166, 237, 225, 254, 53, 1, 252, 101, 237, 225, 254, + 53, 1, 244, 91, 237, 225, 254, 53, 1, 249, 176, 237, 225, 254, 53, 1, + 243, 162, 237, 225, 254, 53, 1, 218, 233, 237, 225, 254, 53, 1, 217, 95, + 237, 225, 254, 53, 1, 243, 126, 237, 225, 254, 53, 1, 222, 46, 237, 225, + 254, 53, 1, 217, 219, 237, 225, 254, 53, 1, 236, 224, 237, 225, 254, 53, + 1, 235, 151, 237, 225, 254, 53, 1, 234, 1, 237, 225, 254, 53, 1, 231, + 103, 237, 225, 254, 53, 1, 226, 145, 237, 225, 254, 53, 1, 253, 207, 237, + 225, 254, 53, 1, 229, 198, 237, 225, 254, 53, 1, 226, 168, 237, 225, 254, + 53, 1, 228, 102, 237, 225, 254, 53, 1, 227, 174, 237, 225, 254, 53, 1, + 224, 209, 237, 225, 254, 53, 1, 222, 100, 237, 225, 254, 53, 226, 87, 55, + 237, 225, 254, 53, 54, 107, 237, 225, 254, 53, 54, 103, 237, 225, 254, + 53, 54, 160, 237, 225, 254, 53, 54, 222, 65, 237, 225, 254, 53, 54, 220, + 219, 237, 225, 254, 53, 54, 131, 242, 161, 237, 225, 254, 53, 54, 131, + 221, 231, 237, 225, 254, 53, 54, 222, 66, 221, 231, 229, 116, 1, 254, + 164, 229, 116, 1, 252, 104, 229, 116, 1, 244, 233, 229, 116, 1, 249, 64, + 229, 116, 1, 243, 162, 229, 116, 1, 218, 238, 229, 116, 1, 217, 108, 229, + 116, 1, 243, 128, 229, 116, 1, 222, 50, 229, 116, 1, 217, 220, 229, 116, + 1, 236, 246, 229, 116, 1, 235, 157, 229, 116, 1, 234, 1, 229, 116, 1, + 231, 103, 229, 116, 1, 225, 61, 229, 116, 1, 254, 191, 229, 116, 1, 229, + 198, 229, 116, 1, 226, 169, 229, 116, 1, 228, 107, 229, 116, 1, 227, 61, + 229, 116, 1, 224, 209, 229, 116, 1, 222, 105, 229, 116, 54, 107, 229, + 116, 54, 222, 65, 229, 116, 54, 220, 219, 229, 116, 54, 131, 242, 161, + 229, 116, 54, 103, 229, 116, 54, 160, 229, 116, 218, 174, 225, 54, 234, + 196, 1, 60, 234, 196, 1, 253, 204, 234, 196, 1, 245, 67, 234, 196, 1, + 250, 46, 234, 196, 1, 73, 234, 196, 1, 216, 216, 234, 196, 1, 72, 234, + 196, 1, 218, 90, 234, 196, 1, 237, 17, 234, 196, 1, 153, 234, 196, 1, + 189, 234, 196, 1, 207, 234, 196, 1, 74, 234, 196, 1, 152, 234, 196, 1, + 223, 219, 234, 196, 1, 222, 201, 234, 196, 1, 68, 234, 196, 1, 246, 74, + 234, 196, 1, 228, 163, 234, 196, 1, 198, 234, 196, 1, 221, 32, 234, 196, + 1, 254, 131, 234, 196, 1, 246, 197, 234, 196, 1, 234, 198, 234, 196, 1, + 231, 218, 234, 196, 1, 251, 202, 234, 196, 221, 87, 78, 201, 1, 60, 201, + 29, 5, 72, 201, 29, 5, 68, 201, 29, 5, 167, 152, 201, 29, 5, 73, 201, 29, + 5, 74, 201, 29, 235, 94, 78, 201, 5, 51, 227, 94, 56, 201, 5, 254, 95, + 201, 5, 219, 77, 201, 1, 175, 201, 1, 236, 149, 201, 1, 245, 0, 201, 1, + 244, 125, 201, 1, 251, 169, 201, 1, 251, 69, 201, 1, 237, 123, 201, 1, + 231, 77, 201, 1, 221, 29, 201, 1, 221, 19, 201, 1, 249, 132, 201, 1, 249, + 116, 201, 1, 231, 217, 201, 1, 222, 155, 201, 1, 222, 35, 201, 1, 249, + 207, 201, 1, 249, 36, 201, 1, 208, 201, 1, 187, 201, 1, 229, 141, 201, 1, + 252, 237, 201, 1, 252, 94, 201, 1, 196, 201, 1, 184, 201, 1, 203, 201, 1, + 235, 188, 201, 1, 219, 189, 201, 1, 225, 25, 201, 1, 223, 218, 201, 1, + 226, 177, 201, 1, 217, 114, 201, 1, 155, 201, 1, 236, 74, 201, 1, 221, 4, + 201, 5, 252, 201, 50, 201, 5, 251, 122, 201, 5, 61, 56, 201, 219, 82, + 201, 20, 107, 201, 20, 103, 201, 20, 160, 201, 20, 154, 201, 54, 222, 65, + 201, 54, 220, 219, 201, 54, 131, 242, 161, 201, 54, 131, 221, 231, 201, + 228, 197, 248, 145, 201, 228, 197, 3, 250, 221, 201, 228, 197, 250, 221, + 201, 228, 197, 250, 105, 135, 201, 228, 197, 234, 83, 201, 228, 197, 234, + 241, 201, 228, 197, 249, 167, 201, 228, 197, 51, 249, 167, 201, 228, 197, + 235, 37, 48, 224, 6, 254, 64, 1, 243, 162, 48, 224, 6, 254, 64, 1, 235, + 151, 48, 224, 6, 254, 64, 1, 243, 126, 48, 224, 6, 254, 64, 1, 234, 1, + 48, 224, 6, 254, 64, 1, 228, 102, 48, 224, 6, 254, 64, 1, 218, 233, 48, + 224, 6, 254, 64, 1, 224, 209, 48, 224, 6, 254, 64, 1, 227, 174, 48, 224, + 6, 254, 64, 1, 252, 101, 48, 224, 6, 254, 64, 1, 222, 100, 48, 224, 6, + 254, 64, 1, 226, 127, 48, 224, 6, 254, 64, 1, 236, 224, 48, 224, 6, 254, + 64, 1, 231, 103, 48, 224, 6, 254, 64, 1, 236, 134, 48, 224, 6, 254, 64, + 1, 226, 168, 48, 224, 6, 254, 64, 1, 226, 145, 48, 224, 6, 254, 64, 1, + 245, 231, 48, 224, 6, 254, 64, 1, 254, 168, 48, 224, 6, 254, 64, 1, 253, + 206, 48, 224, 6, 254, 64, 1, 249, 34, 48, 224, 6, 254, 64, 1, 244, 91, + 48, 224, 6, 254, 64, 1, 249, 176, 48, 224, 6, 254, 64, 1, 244, 118, 48, + 224, 6, 254, 64, 1, 222, 46, 48, 224, 6, 254, 64, 1, 217, 94, 48, 224, 6, + 254, 64, 1, 249, 31, 48, 224, 6, 254, 64, 1, 217, 219, 48, 224, 6, 254, + 64, 1, 222, 24, 48, 224, 6, 254, 64, 1, 222, 5, 48, 224, 6, 254, 64, 54, + 107, 48, 224, 6, 254, 64, 54, 245, 196, 48, 224, 6, 254, 64, 120, 237, + 211, 253, 216, 1, 60, 253, 216, 1, 255, 58, 253, 216, 1, 254, 93, 253, + 216, 1, 255, 17, 253, 216, 1, 254, 131, 253, 216, 1, 255, 18, 253, 216, + 1, 254, 234, 253, 216, 1, 254, 230, 253, 216, 1, 73, 253, 216, 1, 246, + 250, 253, 216, 1, 74, 253, 216, 1, 230, 127, 253, 216, 1, 72, 253, 216, + 1, 237, 255, 253, 216, 1, 68, 253, 216, 1, 220, 23, 253, 216, 1, 236, + 184, 253, 216, 1, 218, 135, 253, 216, 1, 218, 101, 253, 216, 1, 218, 110, + 253, 216, 1, 244, 191, 253, 216, 1, 244, 155, 253, 216, 1, 244, 116, 253, + 216, 1, 251, 99, 253, 216, 1, 237, 114, 253, 216, 1, 222, 87, 253, 216, + 1, 222, 22, 253, 216, 1, 249, 92, 253, 216, 1, 249, 29, 253, 216, 1, 221, + 26, 253, 216, 1, 229, 198, 253, 216, 1, 245, 231, 253, 216, 1, 252, 144, + 253, 216, 1, 252, 92, 253, 216, 1, 232, 106, 253, 216, 1, 232, 68, 253, + 216, 1, 232, 69, 253, 216, 1, 232, 141, 253, 216, 1, 231, 73, 253, 216, + 1, 231, 216, 253, 216, 1, 234, 25, 253, 216, 1, 243, 52, 253, 216, 1, + 217, 164, 253, 216, 1, 218, 25, 253, 216, 1, 219, 165, 253, 216, 1, 227, + 216, 253, 216, 1, 235, 122, 253, 216, 1, 226, 94, 253, 216, 1, 217, 92, + 253, 216, 1, 224, 246, 253, 216, 1, 217, 72, 253, 216, 1, 224, 147, 253, + 216, 1, 223, 190, 253, 216, 1, 243, 162, 253, 216, 255, 7, 78, 221, 172, + 124, 188, 104, 131, 61, 228, 196, 3, 124, 188, 104, 131, 61, 228, 196, + 235, 146, 124, 188, 104, 131, 61, 228, 196, 235, 146, 131, 61, 104, 124, + 188, 228, 196, 235, 146, 124, 227, 92, 104, 131, 227, 94, 228, 196, 235, + 146, 131, 227, 94, 104, 124, 227, 92, 228, 196, 237, 193, 229, 224, 1, + 254, 166, 237, 193, 229, 224, 1, 252, 101, 237, 193, 229, 224, 1, 244, + 91, 237, 193, 229, 224, 1, 249, 176, 237, 193, 229, 224, 1, 243, 162, + 237, 193, 229, 224, 1, 218, 233, 237, 193, 229, 224, 1, 217, 95, 237, + 193, 229, 224, 1, 243, 126, 237, 193, 229, 224, 1, 222, 46, 237, 193, + 229, 224, 1, 217, 219, 237, 193, 229, 224, 1, 236, 224, 237, 193, 229, + 224, 1, 235, 151, 237, 193, 229, 224, 1, 234, 1, 237, 193, 229, 224, 1, + 231, 103, 237, 193, 229, 224, 1, 226, 145, 237, 193, 229, 224, 1, 253, + 207, 237, 193, 229, 224, 1, 229, 198, 237, 193, 229, 224, 1, 226, 168, + 237, 193, 229, 224, 1, 228, 102, 237, 193, 229, 224, 1, 227, 174, 237, + 193, 229, 224, 1, 224, 209, 237, 193, 229, 224, 1, 222, 100, 237, 193, + 229, 224, 54, 107, 237, 193, 229, 224, 54, 103, 237, 193, 229, 224, 54, + 160, 237, 193, 229, 224, 54, 154, 237, 193, 229, 224, 54, 222, 65, 237, + 193, 229, 224, 54, 220, 219, 237, 193, 229, 224, 54, 131, 242, 161, 237, + 193, 229, 224, 54, 131, 221, 231, 237, 193, 230, 33, 1, 254, 166, 237, + 193, 230, 33, 1, 252, 101, 237, 193, 230, 33, 1, 244, 91, 237, 193, 230, + 33, 1, 249, 176, 237, 193, 230, 33, 1, 243, 162, 237, 193, 230, 33, 1, + 218, 232, 237, 193, 230, 33, 1, 217, 95, 237, 193, 230, 33, 1, 243, 126, + 237, 193, 230, 33, 1, 222, 46, 237, 193, 230, 33, 1, 217, 219, 237, 193, + 230, 33, 1, 236, 224, 237, 193, 230, 33, 1, 235, 151, 237, 193, 230, 33, + 1, 234, 0, 237, 193, 230, 33, 1, 231, 103, 237, 193, 230, 33, 1, 226, + 145, 237, 193, 230, 33, 1, 229, 198, 237, 193, 230, 33, 1, 226, 168, 237, + 193, 230, 33, 1, 224, 209, 237, 193, 230, 33, 1, 222, 100, 237, 193, 230, + 33, 54, 107, 237, 193, 230, 33, 54, 103, 237, 193, 230, 33, 54, 160, 237, + 193, 230, 33, 54, 154, 237, 193, 230, 33, 54, 222, 65, 237, 193, 230, 33, + 54, 220, 219, 237, 193, 230, 33, 54, 131, 242, 161, 237, 193, 230, 33, + 54, 131, 221, 231, 48, 172, 1, 230, 100, 60, 48, 172, 1, 218, 17, 60, 48, + 172, 1, 218, 17, 254, 234, 48, 172, 1, 230, 100, 72, 48, 172, 1, 218, 17, + 72, 48, 172, 1, 218, 17, 73, 48, 172, 1, 230, 100, 74, 48, 172, 1, 230, + 100, 230, 167, 48, 172, 1, 218, 17, 230, 167, 48, 172, 1, 230, 100, 255, + 11, 48, 172, 1, 218, 17, 255, 11, 48, 172, 1, 230, 100, 254, 233, 48, + 172, 1, 218, 17, 254, 233, 48, 172, 1, 230, 100, 254, 209, 48, 172, 1, + 218, 17, 254, 209, 48, 172, 1, 230, 100, 254, 228, 48, 172, 1, 218, 17, + 254, 228, 48, 172, 1, 230, 100, 254, 244, 48, 172, 1, 218, 17, 254, 244, + 48, 172, 1, 230, 100, 254, 232, 48, 172, 1, 230, 100, 246, 80, 48, 172, + 1, 218, 17, 246, 80, 48, 172, 1, 230, 100, 253, 212, 48, 172, 1, 218, 17, + 253, 212, 48, 172, 1, 230, 100, 254, 216, 48, 172, 1, 218, 17, 254, 216, + 48, 172, 1, 230, 100, 254, 226, 48, 172, 1, 218, 17, 254, 226, 48, 172, + 1, 230, 100, 230, 166, 48, 172, 1, 218, 17, 230, 166, 48, 172, 1, 230, + 100, 254, 175, 48, 172, 1, 218, 17, 254, 175, 48, 172, 1, 230, 100, 254, + 225, 48, 172, 1, 230, 100, 246, 207, 48, 172, 1, 230, 100, 246, 205, 48, + 172, 1, 230, 100, 254, 131, 48, 172, 1, 230, 100, 254, 223, 48, 172, 1, + 218, 17, 254, 223, 48, 172, 1, 230, 100, 246, 180, 48, 172, 1, 218, 17, + 246, 180, 48, 172, 1, 230, 100, 246, 194, 48, 172, 1, 218, 17, 246, 194, + 48, 172, 1, 230, 100, 246, 169, 48, 172, 1, 218, 17, 246, 169, 48, 172, + 1, 218, 17, 254, 123, 48, 172, 1, 230, 100, 246, 185, 48, 172, 1, 218, + 17, 254, 222, 48, 172, 1, 230, 100, 246, 162, 48, 172, 1, 230, 100, 230, + 120, 48, 172, 1, 230, 100, 242, 67, 48, 172, 1, 230, 100, 247, 0, 48, + 172, 1, 218, 17, 247, 0, 48, 172, 1, 230, 100, 254, 69, 48, 172, 1, 218, + 17, 254, 69, 48, 172, 1, 230, 100, 237, 158, 48, 172, 1, 218, 17, 237, + 158, 48, 172, 1, 230, 100, 230, 106, 48, 172, 1, 218, 17, 230, 106, 48, + 172, 1, 230, 100, 254, 67, 48, 172, 1, 218, 17, 254, 67, 48, 172, 1, 230, + 100, 254, 221, 48, 172, 1, 230, 100, 254, 13, 48, 172, 1, 230, 100, 254, + 220, 48, 172, 1, 230, 100, 254, 7, 48, 172, 1, 218, 17, 254, 7, 48, 172, + 1, 230, 100, 246, 133, 48, 172, 1, 218, 17, 246, 133, 48, 172, 1, 230, + 100, 253, 244, 48, 172, 1, 218, 17, 253, 244, 48, 172, 1, 230, 100, 254, + 217, 48, 172, 1, 218, 17, 254, 217, 48, 172, 1, 230, 100, 230, 92, 48, + 172, 1, 230, 100, 252, 187, 227, 11, 20, 107, 227, 11, 20, 103, 227, 11, + 20, 160, 227, 11, 20, 154, 227, 11, 20, 174, 227, 11, 20, 182, 227, 11, + 20, 191, 227, 11, 20, 185, 227, 11, 20, 190, 227, 11, 54, 222, 65, 227, + 11, 54, 220, 219, 227, 11, 54, 221, 245, 227, 11, 54, 245, 119, 227, 11, + 54, 245, 196, 227, 11, 54, 224, 69, 227, 11, 54, 225, 38, 227, 11, 54, + 246, 227, 227, 11, 54, 232, 27, 227, 11, 54, 131, 242, 161, 227, 11, 54, + 124, 242, 161, 227, 11, 54, 148, 242, 161, 227, 11, 54, 245, 116, 242, + 161, 227, 11, 54, 245, 170, 242, 161, 227, 11, 54, 224, 82, 242, 161, + 227, 11, 54, 225, 43, 242, 161, 227, 11, 54, 246, 235, 242, 161, 227, 11, + 54, 232, 31, 242, 161, 227, 11, 245, 108, 131, 243, 194, 227, 11, 245, + 108, 131, 228, 89, 227, 11, 245, 108, 131, 221, 251, 227, 11, 245, 108, + 124, 221, 249, 194, 5, 251, 146, 194, 5, 254, 95, 194, 5, 219, 77, 194, + 1, 60, 194, 1, 255, 58, 194, 1, 72, 194, 1, 237, 255, 194, 1, 68, 194, 1, + 220, 23, 194, 1, 73, 194, 1, 254, 196, 194, 1, 74, 194, 1, 253, 232, 194, + 1, 175, 194, 1, 236, 149, 194, 1, 245, 0, 194, 1, 244, 125, 194, 1, 232, + 115, 194, 1, 251, 169, 194, 1, 251, 69, 194, 1, 237, 123, 194, 1, 237, + 103, 194, 1, 231, 77, 194, 1, 221, 29, 194, 1, 221, 19, 194, 1, 249, 132, + 194, 1, 249, 121, 194, 1, 249, 116, 194, 1, 227, 151, 194, 1, 231, 217, + 194, 1, 222, 155, 194, 1, 222, 35, 194, 1, 249, 207, 194, 1, 249, 36, + 194, 1, 208, 194, 1, 187, 194, 1, 229, 141, 194, 1, 252, 237, 194, 1, + 252, 94, 194, 1, 196, 194, 1, 184, 194, 1, 203, 194, 1, 235, 188, 194, 1, + 219, 189, 194, 1, 225, 25, 194, 1, 223, 218, 194, 1, 226, 177, 194, 1, + 155, 194, 29, 5, 255, 58, 194, 29, 5, 72, 194, 29, 5, 237, 255, 194, 29, + 5, 68, 194, 29, 5, 220, 23, 194, 29, 5, 73, 194, 29, 5, 254, 196, 194, + 29, 5, 74, 194, 29, 5, 253, 232, 194, 5, 219, 82, 194, 5, 231, 112, 194, + 255, 7, 55, 194, 246, 171, 55, 194, 54, 55, 194, 226, 87, 78, 194, 51, + 226, 87, 78, 194, 249, 167, 194, 51, 249, 167, 15, 5, 60, 15, 5, 112, 27, + 60, 15, 5, 112, 27, 252, 228, 15, 5, 112, 27, 244, 229, 222, 59, 15, 5, + 112, 27, 155, 15, 5, 112, 27, 238, 1, 15, 5, 112, 27, 235, 173, 244, 3, + 15, 5, 112, 27, 233, 62, 15, 5, 112, 27, 226, 165, 15, 5, 255, 60, 15, 5, + 255, 11, 15, 5, 255, 12, 27, 254, 5, 15, 5, 255, 12, 27, 247, 100, 244, + 3, 15, 5, 255, 12, 27, 244, 240, 15, 5, 255, 12, 27, 244, 229, 222, 59, + 15, 5, 255, 12, 27, 155, 15, 5, 255, 12, 27, 238, 2, 244, 3, 15, 5, 255, + 12, 27, 237, 231, 15, 5, 255, 12, 27, 235, 174, 15, 5, 255, 12, 27, 224, + 231, 15, 5, 255, 12, 27, 105, 88, 105, 88, 68, 15, 5, 255, 12, 244, 3, + 15, 5, 255, 9, 15, 5, 255, 10, 27, 252, 216, 15, 5, 255, 10, 27, 244, + 229, 222, 59, 15, 5, 255, 10, 27, 234, 26, 88, 246, 197, 15, 5, 255, 10, + 27, 225, 23, 15, 5, 255, 10, 27, 222, 130, 15, 5, 254, 244, 15, 5, 254, + 182, 15, 5, 254, 183, 27, 246, 143, 15, 5, 254, 183, 27, 224, 203, 88, + 244, 81, 15, 5, 254, 175, 15, 5, 254, 176, 27, 254, 175, 15, 5, 254, 176, + 27, 248, 229, 15, 5, 254, 176, 27, 244, 81, 15, 5, 254, 176, 27, 155, 15, + 5, 254, 176, 27, 236, 251, 15, 5, 254, 176, 27, 236, 113, 15, 5, 254, + 176, 27, 224, 246, 15, 5, 254, 176, 27, 220, 30, 15, 5, 254, 172, 15, 5, + 254, 166, 15, 5, 254, 137, 15, 5, 254, 138, 27, 224, 246, 15, 5, 254, + 131, 15, 5, 254, 132, 104, 254, 131, 15, 5, 254, 132, 148, 221, 176, 15, + 5, 254, 132, 88, 232, 228, 230, 110, 254, 132, 88, 232, 227, 15, 5, 254, + 132, 88, 232, 228, 223, 226, 15, 5, 254, 107, 15, 5, 254, 88, 15, 5, 254, + 61, 15, 5, 254, 62, 27, 235, 247, 15, 5, 254, 35, 15, 5, 254, 12, 15, 5, + 254, 7, 15, 5, 254, 8, 217, 38, 222, 59, 15, 5, 254, 8, 236, 254, 222, + 59, 15, 5, 254, 8, 104, 254, 8, 220, 254, 104, 220, 254, 220, 254, 104, + 220, 254, 229, 246, 15, 5, 254, 8, 104, 254, 8, 104, 254, 7, 15, 5, 254, + 8, 104, 254, 8, 104, 254, 8, 250, 95, 254, 8, 104, 254, 8, 104, 254, 7, + 15, 5, 254, 5, 15, 5, 254, 3, 15, 5, 252, 237, 15, 5, 252, 228, 15, 5, + 252, 225, 15, 5, 252, 223, 15, 5, 252, 217, 15, 5, 252, 218, 104, 252, + 217, 15, 5, 252, 216, 15, 5, 135, 15, 5, 252, 200, 15, 5, 252, 84, 15, 5, + 252, 85, 27, 60, 15, 5, 252, 85, 27, 244, 220, 15, 5, 252, 85, 27, 238, + 2, 244, 3, 15, 5, 251, 248, 15, 5, 251, 249, 104, 251, 249, 255, 11, 15, + 5, 251, 249, 104, 251, 249, 220, 87, 15, 5, 251, 249, 250, 95, 251, 248, + 15, 5, 251, 237, 15, 5, 251, 238, 104, 251, 237, 15, 5, 251, 228, 15, 5, + 251, 227, 15, 5, 249, 207, 15, 5, 249, 198, 15, 5, 249, 199, 236, 91, 27, + 112, 88, 234, 57, 15, 5, 249, 199, 236, 91, 27, 254, 137, 15, 5, 249, + 199, 236, 91, 27, 252, 216, 15, 5, 249, 199, 236, 91, 27, 252, 84, 15, 5, + 249, 199, 236, 91, 27, 245, 0, 15, 5, 249, 199, 236, 91, 27, 245, 1, 88, + 234, 57, 15, 5, 249, 199, 236, 91, 27, 244, 103, 15, 5, 249, 199, 236, + 91, 27, 244, 87, 15, 5, 249, 199, 236, 91, 27, 244, 11, 15, 5, 249, 199, + 236, 91, 27, 155, 15, 5, 249, 199, 236, 91, 27, 237, 156, 15, 5, 249, + 199, 236, 91, 27, 237, 157, 88, 234, 231, 15, 5, 249, 199, 236, 91, 27, + 236, 240, 15, 5, 249, 199, 236, 91, 27, 235, 188, 15, 5, 249, 199, 236, + 91, 27, 234, 231, 15, 5, 249, 199, 236, 91, 27, 234, 232, 88, 234, 56, + 15, 5, 249, 199, 236, 91, 27, 234, 219, 15, 5, 249, 199, 236, 91, 27, + 232, 141, 15, 5, 249, 199, 236, 91, 27, 229, 247, 88, 229, 246, 15, 5, + 249, 199, 236, 91, 27, 224, 140, 15, 5, 249, 199, 236, 91, 27, 222, 130, + 15, 5, 249, 199, 236, 91, 27, 220, 125, 88, 244, 87, 15, 5, 249, 199, + 236, 91, 27, 220, 30, 15, 5, 249, 175, 15, 5, 249, 156, 15, 5, 249, 155, + 15, 5, 249, 154, 15, 5, 249, 15, 15, 5, 248, 255, 15, 5, 248, 230, 15, 5, + 248, 231, 27, 224, 246, 15, 5, 248, 229, 15, 5, 248, 219, 15, 5, 248, + 220, 236, 209, 105, 244, 4, 248, 202, 15, 5, 248, 202, 15, 5, 247, 111, + 15, 5, 247, 112, 104, 247, 111, 15, 5, 247, 112, 244, 3, 15, 5, 247, 112, + 224, 228, 15, 5, 247, 109, 15, 5, 247, 110, 27, 246, 130, 15, 5, 247, + 108, 15, 5, 247, 107, 15, 5, 247, 106, 15, 5, 247, 105, 15, 5, 247, 101, + 15, 5, 247, 99, 15, 5, 247, 100, 244, 3, 15, 5, 247, 100, 244, 4, 244, 3, + 15, 5, 247, 98, 15, 5, 247, 91, 15, 5, 73, 15, 5, 178, 27, 229, 246, 15, + 5, 178, 104, 178, 231, 104, 104, 231, 103, 15, 5, 247, 17, 15, 5, 247, + 18, 27, 112, 88, 243, 214, 88, 249, 207, 15, 5, 247, 18, 27, 244, 220, + 15, 5, 247, 18, 27, 233, 196, 15, 5, 247, 18, 27, 226, 156, 15, 5, 247, + 18, 27, 224, 246, 15, 5, 247, 18, 27, 68, 15, 5, 246, 252, 15, 5, 246, + 242, 15, 5, 246, 217, 15, 5, 246, 197, 15, 5, 246, 198, 27, 244, 228, 15, + 5, 246, 198, 27, 244, 229, 222, 59, 15, 5, 246, 198, 27, 234, 25, 15, 5, + 246, 198, 250, 95, 246, 197, 15, 5, 246, 198, 230, 110, 246, 197, 15, 5, + 246, 198, 223, 226, 15, 5, 246, 145, 15, 5, 246, 143, 15, 5, 246, 130, + 15, 5, 246, 78, 15, 5, 246, 79, 27, 60, 15, 5, 246, 79, 27, 112, 88, 235, + 162, 15, 5, 246, 79, 27, 112, 88, 235, 163, 27, 235, 162, 15, 5, 246, 79, + 27, 254, 131, 15, 5, 246, 79, 27, 252, 228, 15, 5, 246, 79, 27, 247, 100, + 244, 3, 15, 5, 246, 79, 27, 247, 100, 244, 4, 244, 3, 15, 5, 246, 79, 27, + 155, 15, 5, 246, 79, 27, 243, 214, 244, 3, 15, 5, 246, 79, 27, 238, 2, + 244, 3, 15, 5, 246, 79, 27, 236, 208, 15, 5, 246, 79, 27, 236, 209, 223, + 226, 15, 5, 246, 79, 27, 236, 5, 15, 5, 246, 79, 27, 235, 188, 15, 5, + 246, 79, 27, 235, 163, 27, 235, 162, 15, 5, 246, 79, 27, 235, 67, 15, 5, + 246, 79, 27, 234, 231, 15, 5, 246, 79, 27, 220, 124, 15, 5, 246, 79, 27, + 220, 115, 15, 5, 245, 0, 15, 5, 245, 1, 244, 3, 15, 5, 244, 254, 15, 5, + 244, 255, 27, 112, 88, 249, 208, 88, 155, 15, 5, 244, 255, 27, 112, 88, + 155, 15, 5, 244, 255, 27, 112, 88, 238, 1, 15, 5, 244, 255, 27, 255, 10, + 222, 60, 88, 222, 147, 15, 5, 244, 255, 27, 254, 131, 15, 5, 244, 255, + 27, 254, 7, 15, 5, 244, 255, 27, 254, 6, 88, 244, 240, 15, 5, 244, 255, + 27, 252, 228, 15, 5, 244, 255, 27, 252, 201, 88, 203, 15, 5, 244, 255, + 27, 251, 228, 15, 5, 244, 255, 27, 251, 229, 88, 203, 15, 5, 244, 255, + 27, 249, 207, 15, 5, 244, 255, 27, 249, 15, 15, 5, 244, 255, 27, 248, + 231, 27, 224, 246, 15, 5, 244, 255, 27, 247, 109, 15, 5, 244, 255, 27, + 246, 217, 15, 5, 244, 255, 27, 246, 218, 88, 235, 188, 15, 5, 244, 255, + 27, 246, 197, 15, 5, 244, 255, 27, 246, 198, 27, 244, 229, 222, 59, 15, + 5, 244, 255, 27, 244, 229, 222, 59, 15, 5, 244, 255, 27, 244, 220, 15, 5, + 244, 255, 27, 244, 103, 15, 5, 244, 255, 27, 244, 101, 15, 5, 244, 255, + 27, 244, 102, 88, 60, 15, 5, 244, 255, 27, 244, 88, 88, 223, 103, 15, 5, + 244, 255, 27, 243, 214, 88, 234, 232, 88, 246, 130, 15, 5, 244, 255, 27, + 243, 197, 15, 5, 244, 255, 27, 243, 198, 88, 235, 188, 15, 5, 244, 255, + 27, 243, 113, 88, 235, 67, 15, 5, 244, 255, 27, 242, 169, 15, 5, 244, + 255, 27, 238, 2, 244, 3, 15, 5, 244, 255, 27, 237, 146, 88, 242, 174, 88, + 254, 7, 15, 5, 244, 255, 27, 236, 240, 15, 5, 244, 255, 27, 236, 208, 15, + 5, 244, 255, 27, 236, 110, 15, 5, 244, 255, 27, 236, 111, 88, 235, 162, + 15, 5, 244, 255, 27, 236, 6, 88, 254, 131, 15, 5, 244, 255, 27, 235, 188, + 15, 5, 244, 255, 27, 234, 26, 88, 246, 197, 15, 5, 244, 255, 27, 233, + 196, 15, 5, 244, 255, 27, 231, 103, 15, 5, 244, 255, 27, 231, 104, 104, + 231, 103, 15, 5, 244, 255, 27, 187, 15, 5, 244, 255, 27, 226, 156, 15, 5, + 244, 255, 27, 226, 131, 15, 5, 244, 255, 27, 224, 246, 15, 5, 244, 255, + 27, 224, 247, 88, 220, 240, 15, 5, 244, 255, 27, 224, 219, 15, 5, 244, + 255, 27, 223, 74, 15, 5, 244, 255, 27, 222, 130, 15, 5, 244, 255, 27, 68, + 15, 5, 244, 255, 27, 220, 115, 15, 5, 244, 255, 27, 220, 116, 88, 247, + 111, 15, 5, 244, 255, 104, 244, 254, 15, 5, 244, 249, 15, 5, 244, 250, + 250, 95, 244, 249, 15, 5, 244, 247, 15, 5, 244, 248, 104, 244, 248, 244, + 221, 104, 244, 220, 15, 5, 244, 240, 15, 5, 244, 241, 244, 248, 104, 244, + 248, 244, 221, 104, 244, 220, 15, 5, 244, 239, 15, 5, 244, 237, 15, 5, + 244, 230, 15, 5, 244, 228, 15, 5, 244, 229, 222, 59, 15, 5, 244, 229, + 104, 244, 228, 15, 5, 244, 229, 250, 95, 244, 228, 15, 5, 244, 220, 15, + 5, 244, 219, 15, 5, 244, 215, 15, 5, 244, 166, 15, 5, 244, 167, 27, 235, + 247, 15, 5, 244, 103, 15, 5, 244, 104, 27, 73, 15, 5, 244, 104, 27, 68, + 15, 5, 244, 104, 250, 95, 244, 103, 15, 5, 244, 101, 15, 5, 244, 102, + 104, 244, 101, 15, 5, 244, 102, 250, 95, 244, 101, 15, 5, 244, 99, 15, 5, + 244, 87, 15, 5, 244, 88, 244, 3, 15, 5, 244, 85, 15, 5, 244, 86, 27, 112, + 88, 238, 1, 15, 5, 244, 86, 27, 244, 229, 222, 59, 15, 5, 244, 86, 27, + 238, 1, 15, 5, 244, 86, 27, 234, 232, 88, 238, 1, 15, 5, 244, 86, 27, + 187, 15, 5, 244, 83, 15, 5, 244, 81, 15, 5, 244, 82, 250, 95, 244, 81, + 15, 5, 244, 82, 27, 252, 228, 15, 5, 244, 82, 27, 222, 130, 15, 5, 244, + 82, 222, 59, 15, 5, 244, 17, 15, 5, 244, 18, 250, 95, 244, 17, 15, 5, + 244, 15, 15, 5, 244, 16, 27, 236, 240, 15, 5, 244, 16, 27, 236, 241, 27, + 238, 2, 244, 3, 15, 5, 244, 16, 27, 231, 103, 15, 5, 244, 16, 27, 226, + 157, 88, 220, 253, 15, 5, 244, 16, 244, 3, 15, 5, 244, 11, 15, 5, 244, + 12, 27, 112, 88, 235, 247, 15, 5, 244, 12, 27, 235, 247, 15, 5, 244, 12, + 104, 244, 12, 234, 225, 15, 5, 244, 7, 15, 5, 244, 5, 15, 5, 244, 6, 27, + 224, 246, 15, 5, 243, 253, 15, 5, 243, 252, 15, 5, 243, 249, 15, 5, 243, + 248, 15, 5, 155, 15, 5, 243, 214, 222, 59, 15, 5, 243, 214, 244, 3, 15, + 5, 243, 197, 15, 5, 243, 112, 15, 5, 243, 113, 27, 254, 7, 15, 5, 243, + 113, 27, 254, 5, 15, 5, 243, 113, 27, 252, 228, 15, 5, 243, 113, 27, 248, + 202, 15, 5, 243, 113, 27, 244, 247, 15, 5, 243, 113, 27, 236, 104, 15, 5, + 243, 113, 27, 231, 103, 15, 5, 243, 113, 27, 224, 246, 15, 5, 243, 113, + 27, 68, 15, 5, 242, 173, 15, 5, 242, 169, 15, 5, 242, 170, 27, 254, 131, + 15, 5, 242, 170, 27, 243, 197, 15, 5, 242, 170, 27, 236, 208, 15, 5, 242, + 170, 27, 235, 29, 15, 5, 242, 170, 27, 220, 115, 15, 5, 242, 166, 15, 5, + 72, 15, 5, 242, 107, 60, 15, 5, 242, 69, 15, 5, 238, 29, 15, 5, 238, 30, + 104, 238, 30, 251, 228, 15, 5, 238, 30, 104, 238, 30, 223, 226, 15, 5, + 238, 4, 15, 5, 238, 1, 15, 5, 238, 2, 248, 255, 15, 5, 238, 2, 227, 147, + 15, 5, 238, 2, 104, 238, 2, 224, 205, 104, 224, 205, 220, 116, 104, 220, + 115, 15, 5, 238, 2, 244, 3, 15, 5, 237, 249, 15, 5, 237, 250, 27, 244, + 229, 222, 59, 15, 5, 237, 248, 15, 5, 237, 238, 15, 5, 237, 239, 27, 222, + 130, 15, 5, 237, 239, 250, 95, 237, 238, 15, 5, 237, 239, 230, 110, 237, + 238, 15, 5, 237, 239, 223, 226, 15, 5, 237, 231, 15, 5, 237, 223, 15, 5, + 237, 156, 15, 5, 237, 145, 15, 5, 175, 15, 5, 206, 27, 60, 15, 5, 206, + 27, 254, 244, 15, 5, 206, 27, 254, 245, 88, 236, 5, 15, 5, 206, 27, 254, + 5, 15, 5, 206, 27, 252, 228, 15, 5, 206, 27, 252, 216, 15, 5, 206, 27, + 135, 15, 5, 206, 27, 252, 84, 15, 5, 206, 27, 246, 143, 15, 5, 206, 27, + 246, 130, 15, 5, 206, 27, 245, 0, 15, 5, 206, 27, 244, 240, 15, 5, 206, + 27, 244, 229, 222, 59, 15, 5, 206, 27, 244, 220, 15, 5, 206, 27, 244, + 221, 88, 225, 24, 88, 60, 15, 5, 206, 27, 244, 103, 15, 5, 206, 27, 244, + 87, 15, 5, 206, 27, 244, 82, 88, 226, 131, 15, 5, 206, 27, 244, 82, 250, + 95, 244, 81, 15, 5, 206, 27, 244, 17, 15, 5, 206, 27, 243, 252, 15, 5, + 206, 27, 238, 1, 15, 5, 206, 27, 237, 238, 15, 5, 206, 27, 236, 240, 15, + 5, 206, 27, 236, 113, 15, 5, 206, 27, 236, 110, 15, 5, 206, 27, 235, 67, + 15, 5, 206, 27, 234, 231, 15, 5, 206, 27, 234, 25, 15, 5, 206, 27, 234, + 26, 88, 247, 111, 15, 5, 206, 27, 234, 26, 88, 244, 103, 15, 5, 206, 27, + 234, 26, 88, 222, 87, 15, 5, 206, 27, 233, 196, 15, 5, 206, 27, 233, 197, + 88, 231, 98, 15, 5, 206, 27, 232, 141, 15, 5, 206, 27, 231, 103, 15, 5, + 206, 27, 229, 108, 15, 5, 206, 27, 227, 22, 15, 5, 206, 27, 226, 177, 15, + 5, 206, 27, 226, 131, 15, 5, 206, 27, 225, 25, 15, 5, 206, 27, 224, 246, + 15, 5, 206, 27, 224, 219, 15, 5, 206, 27, 224, 170, 15, 5, 206, 27, 224, + 132, 15, 5, 206, 27, 223, 81, 15, 5, 206, 27, 222, 112, 15, 5, 206, 27, + 68, 15, 5, 206, 27, 220, 124, 15, 5, 206, 27, 220, 115, 15, 5, 206, 27, + 220, 90, 27, 187, 15, 5, 206, 27, 220, 30, 15, 5, 206, 27, 217, 42, 15, + 5, 237, 6, 15, 5, 237, 7, 250, 95, 237, 6, 15, 5, 236, 255, 15, 5, 236, + 253, 15, 5, 236, 251, 15, 5, 236, 250, 15, 5, 236, 248, 15, 5, 236, 249, + 104, 236, 248, 15, 5, 236, 240, 15, 5, 236, 241, 27, 238, 2, 244, 3, 15, + 5, 236, 236, 15, 5, 236, 237, 27, 252, 228, 15, 5, 236, 237, 250, 95, + 236, 236, 15, 5, 236, 235, 15, 5, 236, 234, 15, 5, 236, 208, 15, 5, 236, + 209, 235, 175, 27, 105, 104, 235, 175, 27, 68, 15, 5, 236, 209, 104, 236, + 209, 235, 175, 27, 105, 104, 235, 175, 27, 68, 15, 5, 236, 160, 15, 5, + 236, 113, 15, 5, 236, 114, 27, 252, 228, 15, 5, 236, 114, 27, 68, 15, 5, + 236, 114, 27, 220, 115, 15, 5, 236, 110, 15, 5, 236, 104, 15, 5, 236, 93, + 15, 5, 236, 92, 15, 5, 236, 90, 15, 5, 236, 91, 104, 236, 90, 15, 5, 236, + 7, 15, 5, 236, 8, 104, 243, 113, 27, 254, 6, 236, 8, 104, 243, 113, 27, + 254, 5, 15, 5, 236, 5, 15, 5, 236, 3, 15, 5, 236, 4, 219, 177, 17, 15, 5, + 236, 2, 15, 5, 236, 0, 15, 5, 236, 1, 244, 3, 15, 5, 235, 255, 15, 5, + 235, 247, 15, 5, 235, 248, 230, 110, 235, 247, 15, 5, 235, 242, 15, 5, + 235, 225, 15, 5, 235, 188, 15, 5, 235, 174, 15, 5, 235, 175, 27, 60, 15, + 5, 235, 175, 27, 112, 88, 249, 208, 88, 155, 15, 5, 235, 175, 27, 112, + 88, 244, 220, 15, 5, 235, 175, 27, 112, 88, 235, 162, 15, 5, 235, 175, + 27, 254, 175, 15, 5, 235, 175, 27, 254, 131, 15, 5, 235, 175, 27, 254, 8, + 217, 38, 222, 59, 15, 5, 235, 175, 27, 252, 228, 15, 5, 235, 175, 27, + 252, 84, 15, 5, 235, 175, 27, 249, 156, 15, 5, 235, 175, 27, 246, 197, + 15, 5, 235, 175, 27, 245, 0, 15, 5, 235, 175, 27, 244, 220, 15, 5, 235, + 175, 27, 244, 11, 15, 5, 235, 175, 27, 244, 12, 88, 244, 11, 15, 5, 235, + 175, 27, 155, 15, 5, 235, 175, 27, 243, 197, 15, 5, 235, 175, 27, 243, + 113, 27, 231, 103, 15, 5, 235, 175, 27, 238, 2, 244, 3, 15, 5, 235, 175, + 27, 237, 238, 15, 5, 235, 175, 27, 237, 239, 88, 155, 15, 5, 235, 175, + 27, 237, 239, 88, 234, 231, 15, 5, 235, 175, 27, 236, 113, 15, 5, 235, + 175, 27, 236, 104, 15, 5, 235, 175, 27, 236, 5, 15, 5, 235, 175, 27, 236, + 0, 15, 5, 235, 175, 27, 236, 1, 88, 243, 113, 88, 60, 15, 5, 235, 175, + 27, 235, 174, 15, 5, 235, 175, 27, 235, 29, 15, 5, 235, 175, 27, 234, + 231, 15, 5, 235, 175, 27, 234, 221, 15, 5, 235, 175, 27, 234, 25, 15, 5, + 235, 175, 27, 234, 26, 88, 246, 197, 15, 5, 235, 175, 27, 233, 62, 15, 5, + 235, 175, 27, 232, 141, 15, 5, 235, 175, 27, 224, 247, 88, 223, 74, 15, + 5, 235, 175, 27, 224, 203, 88, 244, 82, 88, 246, 143, 15, 5, 235, 175, + 27, 224, 203, 88, 244, 82, 222, 59, 15, 5, 235, 175, 27, 224, 168, 15, 5, + 235, 175, 27, 224, 169, 88, 224, 168, 15, 5, 235, 175, 27, 223, 74, 15, + 5, 235, 175, 27, 222, 141, 15, 5, 235, 175, 27, 222, 130, 15, 5, 235, + 175, 27, 222, 88, 88, 112, 88, 223, 104, 88, 208, 15, 5, 235, 175, 27, + 68, 15, 5, 235, 175, 27, 105, 88, 60, 15, 5, 235, 175, 27, 105, 88, 105, + 88, 68, 15, 5, 235, 175, 27, 220, 125, 88, 254, 7, 15, 5, 235, 175, 27, + 220, 115, 15, 5, 235, 175, 27, 220, 30, 15, 5, 235, 175, 223, 226, 15, 5, + 235, 172, 15, 5, 235, 173, 27, 224, 246, 15, 5, 235, 173, 27, 224, 247, + 88, 223, 74, 15, 5, 235, 173, 244, 3, 15, 5, 235, 173, 244, 4, 104, 235, + 173, 244, 4, 224, 246, 15, 5, 235, 169, 15, 5, 235, 162, 15, 5, 235, 163, + 27, 235, 162, 15, 5, 235, 160, 15, 5, 235, 161, 27, 235, 247, 15, 5, 235, + 161, 27, 235, 248, 88, 227, 22, 15, 5, 235, 67, 15, 5, 235, 54, 15, 5, + 235, 46, 15, 5, 235, 29, 15, 5, 234, 231, 15, 5, 234, 232, 27, 252, 228, + 15, 5, 234, 229, 15, 5, 234, 230, 27, 254, 175, 15, 5, 234, 230, 27, 252, + 228, 15, 5, 234, 230, 27, 246, 130, 15, 5, 234, 230, 27, 246, 131, 222, + 59, 15, 5, 234, 230, 27, 244, 229, 222, 59, 15, 5, 234, 230, 27, 243, + 113, 27, 252, 228, 15, 5, 234, 230, 27, 237, 238, 15, 5, 234, 230, 27, + 236, 253, 15, 5, 234, 230, 27, 236, 251, 15, 5, 234, 230, 27, 236, 252, + 88, 254, 7, 15, 5, 234, 230, 27, 236, 113, 15, 5, 234, 230, 27, 235, 189, + 88, 254, 7, 15, 5, 234, 230, 27, 235, 174, 15, 5, 234, 230, 27, 234, 26, + 88, 246, 197, 15, 5, 234, 230, 27, 232, 141, 15, 5, 234, 230, 27, 231, + 144, 15, 5, 234, 230, 27, 224, 141, 88, 254, 7, 15, 5, 234, 230, 27, 224, + 124, 88, 251, 248, 15, 5, 234, 230, 27, 220, 253, 15, 5, 234, 230, 222, + 59, 15, 5, 234, 230, 250, 95, 234, 229, 15, 5, 234, 230, 230, 110, 234, + 229, 15, 5, 234, 230, 223, 226, 15, 5, 234, 230, 224, 228, 15, 5, 234, + 228, 15, 5, 234, 225, 15, 5, 234, 226, 104, 234, 225, 15, 5, 234, 226, + 230, 110, 234, 225, 15, 5, 234, 226, 224, 228, 15, 5, 234, 224, 15, 5, + 234, 221, 15, 5, 234, 219, 15, 5, 234, 220, 104, 234, 219, 15, 5, 234, + 220, 104, 234, 220, 244, 221, 104, 244, 220, 15, 5, 196, 15, 5, 234, 120, + 27, 222, 130, 15, 5, 234, 120, 244, 3, 15, 5, 234, 119, 15, 5, 234, 106, + 15, 5, 234, 74, 15, 5, 234, 57, 15, 5, 234, 56, 15, 5, 234, 25, 15, 5, + 233, 244, 15, 5, 233, 196, 15, 5, 233, 159, 15, 5, 233, 99, 15, 5, 233, + 100, 104, 233, 99, 15, 5, 233, 92, 15, 5, 233, 93, 244, 3, 15, 5, 233, + 78, 15, 5, 233, 65, 15, 5, 233, 62, 15, 5, 233, 63, 27, 60, 15, 5, 233, + 63, 27, 235, 247, 15, 5, 233, 63, 27, 217, 114, 15, 5, 233, 63, 104, 233, + 62, 15, 5, 233, 63, 104, 233, 63, 27, 112, 88, 208, 15, 5, 233, 63, 250, + 95, 233, 62, 15, 5, 233, 60, 15, 5, 233, 61, 27, 60, 15, 5, 233, 61, 27, + 112, 88, 249, 15, 15, 5, 233, 61, 27, 249, 15, 15, 5, 233, 61, 244, 3, + 15, 5, 208, 15, 5, 232, 237, 15, 5, 232, 227, 15, 5, 232, 228, 237, 169, + 15, 5, 232, 228, 27, 224, 171, 222, 59, 15, 5, 232, 228, 230, 110, 232, + 227, 15, 5, 232, 226, 15, 5, 232, 222, 231, 90, 15, 5, 232, 221, 15, 5, + 232, 220, 15, 5, 232, 141, 15, 5, 232, 142, 27, 60, 15, 5, 232, 142, 27, + 220, 115, 15, 5, 232, 142, 224, 228, 15, 5, 232, 62, 15, 5, 232, 63, 27, + 73, 15, 5, 232, 61, 15, 5, 232, 34, 15, 5, 232, 35, 27, 244, 229, 222, + 59, 15, 5, 232, 35, 27, 244, 221, 88, 244, 229, 222, 59, 15, 5, 232, 32, + 15, 5, 232, 33, 27, 254, 131, 15, 5, 232, 33, 27, 254, 7, 15, 5, 232, 33, + 27, 254, 8, 88, 254, 7, 15, 5, 232, 33, 27, 244, 11, 15, 5, 232, 33, 27, + 234, 26, 88, 244, 229, 222, 59, 15, 5, 232, 33, 27, 232, 141, 15, 5, 232, + 33, 27, 231, 103, 15, 5, 232, 33, 27, 224, 246, 15, 5, 232, 33, 27, 224, + 247, 88, 112, 254, 131, 15, 5, 232, 33, 27, 224, 247, 88, 254, 7, 15, 5, + 232, 33, 27, 224, 247, 88, 254, 8, 88, 254, 7, 15, 5, 232, 33, 27, 220, + 125, 88, 254, 7, 15, 5, 232, 33, 27, 220, 30, 15, 5, 232, 22, 15, 5, 231, + 144, 15, 5, 231, 117, 15, 5, 231, 103, 15, 5, 231, 104, 235, 173, 27, + 244, 220, 15, 5, 231, 104, 235, 173, 27, 234, 57, 15, 5, 231, 104, 235, + 173, 27, 226, 156, 15, 5, 231, 104, 235, 173, 27, 226, 157, 104, 231, + 104, 235, 173, 27, 226, 156, 15, 5, 231, 104, 235, 173, 27, 220, 30, 15, + 5, 231, 104, 222, 59, 15, 5, 231, 104, 104, 231, 103, 15, 5, 231, 104, + 250, 95, 231, 103, 15, 5, 231, 104, 250, 95, 231, 104, 235, 173, 104, + 235, 172, 15, 5, 231, 98, 15, 5, 231, 99, 255, 10, 27, 254, 3, 15, 5, + 231, 99, 255, 10, 27, 252, 84, 15, 5, 231, 99, 255, 10, 27, 247, 107, 15, + 5, 231, 99, 255, 10, 27, 244, 11, 15, 5, 231, 99, 255, 10, 27, 238, 2, + 244, 3, 15, 5, 231, 99, 255, 10, 27, 236, 251, 15, 5, 231, 99, 255, 10, + 27, 235, 188, 15, 5, 231, 99, 255, 10, 27, 232, 141, 15, 5, 231, 99, 255, + 10, 27, 224, 121, 15, 5, 231, 99, 255, 10, 27, 220, 124, 15, 5, 231, 99, + 236, 91, 27, 252, 84, 15, 5, 231, 99, 236, 91, 27, 252, 85, 68, 15, 5, + 187, 15, 5, 230, 37, 15, 5, 230, 12, 15, 5, 229, 246, 15, 5, 229, 152, + 15, 5, 229, 108, 15, 5, 229, 109, 27, 60, 15, 5, 229, 109, 27, 255, 11, + 15, 5, 229, 109, 27, 252, 84, 15, 5, 229, 109, 27, 251, 248, 15, 5, 229, + 109, 27, 73, 15, 5, 229, 109, 27, 72, 15, 5, 229, 109, 27, 242, 69, 15, + 5, 229, 109, 27, 68, 15, 5, 229, 109, 27, 220, 124, 15, 5, 229, 109, 250, + 95, 229, 108, 15, 5, 229, 67, 15, 5, 229, 68, 27, 236, 236, 15, 5, 229, + 68, 27, 220, 115, 15, 5, 229, 68, 27, 217, 114, 15, 5, 229, 68, 230, 110, + 229, 67, 15, 5, 203, 15, 5, 227, 254, 15, 5, 227, 147, 15, 5, 227, 22, + 15, 5, 226, 177, 15, 5, 226, 166, 231, 90, 15, 5, 226, 165, 15, 5, 226, + 166, 27, 60, 15, 5, 226, 166, 27, 247, 111, 15, 5, 226, 166, 27, 247, + 109, 15, 5, 226, 166, 27, 155, 15, 5, 226, 166, 27, 236, 240, 15, 5, 226, + 166, 27, 235, 247, 15, 5, 226, 166, 27, 234, 219, 15, 5, 226, 166, 27, + 233, 196, 15, 5, 226, 166, 27, 231, 103, 15, 5, 226, 166, 27, 226, 156, + 15, 5, 226, 166, 27, 224, 219, 15, 5, 226, 166, 27, 222, 147, 15, 5, 226, + 166, 27, 220, 124, 15, 5, 226, 166, 27, 220, 121, 15, 5, 226, 166, 27, + 220, 94, 15, 5, 226, 166, 27, 220, 50, 15, 5, 226, 166, 27, 220, 30, 15, + 5, 226, 166, 104, 226, 165, 15, 5, 226, 166, 244, 3, 15, 5, 226, 156, 15, + 5, 226, 157, 235, 175, 27, 254, 5, 15, 5, 226, 138, 15, 5, 226, 131, 15, + 5, 225, 25, 15, 5, 225, 23, 15, 5, 225, 24, 27, 60, 15, 5, 225, 24, 27, + 252, 228, 15, 5, 225, 24, 27, 244, 81, 15, 5, 225, 24, 27, 232, 141, 15, + 5, 225, 24, 27, 224, 168, 15, 5, 225, 24, 27, 220, 240, 15, 5, 225, 24, + 27, 68, 15, 5, 225, 24, 27, 105, 88, 60, 15, 5, 225, 22, 15, 5, 225, 20, + 15, 5, 225, 3, 15, 5, 224, 246, 15, 5, 224, 247, 242, 173, 15, 5, 224, + 247, 104, 224, 247, 244, 248, 104, 244, 248, 244, 221, 104, 244, 220, 15, + 5, 224, 247, 104, 224, 247, 222, 148, 104, 222, 148, 244, 221, 104, 244, + 220, 15, 5, 224, 239, 15, 5, 224, 234, 15, 5, 224, 231, 15, 5, 224, 230, + 15, 5, 224, 227, 15, 5, 224, 219, 15, 5, 224, 220, 27, 60, 15, 5, 224, + 220, 27, 237, 238, 15, 5, 224, 213, 15, 5, 224, 214, 27, 60, 15, 5, 224, + 214, 27, 252, 217, 15, 5, 224, 214, 27, 251, 237, 15, 5, 224, 214, 27, + 248, 219, 15, 5, 224, 214, 27, 244, 220, 15, 5, 224, 214, 27, 238, 1, 15, + 5, 224, 214, 27, 238, 2, 244, 3, 15, 5, 224, 214, 27, 235, 242, 15, 5, + 224, 214, 27, 234, 221, 15, 5, 224, 214, 27, 233, 92, 15, 5, 224, 214, + 27, 226, 156, 15, 5, 224, 208, 15, 5, 224, 204, 15, 5, 224, 205, 222, 59, + 15, 5, 224, 205, 104, 224, 205, 251, 229, 104, 251, 228, 15, 5, 224, 202, + 15, 5, 224, 170, 15, 5, 224, 171, 104, 237, 170, 224, 170, 15, 5, 224, + 168, 15, 5, 224, 167, 15, 5, 224, 140, 15, 5, 224, 141, 244, 3, 15, 5, + 224, 132, 15, 5, 224, 130, 15, 5, 224, 131, 104, 224, 131, 224, 168, 15, + 5, 224, 123, 15, 5, 224, 121, 15, 5, 223, 103, 15, 5, 223, 104, 104, 223, + 103, 15, 5, 223, 83, 15, 5, 223, 82, 15, 5, 223, 81, 15, 5, 223, 74, 15, + 5, 223, 73, 15, 5, 223, 53, 15, 5, 223, 52, 15, 5, 222, 155, 15, 5, 222, + 156, 253, 251, 15, 5, 222, 156, 27, 243, 112, 15, 5, 222, 156, 27, 233, + 196, 15, 5, 222, 156, 244, 3, 15, 5, 222, 147, 15, 5, 222, 148, 104, 222, + 148, 232, 63, 104, 232, 63, 248, 203, 104, 248, 202, 15, 5, 222, 148, + 223, 226, 15, 5, 222, 141, 15, 5, 118, 27, 252, 84, 15, 5, 118, 27, 244, + 11, 15, 5, 118, 27, 224, 246, 15, 5, 118, 27, 224, 170, 15, 5, 118, 27, + 220, 253, 15, 5, 118, 27, 220, 115, 15, 5, 222, 130, 15, 5, 222, 112, 15, + 5, 222, 87, 15, 5, 222, 88, 244, 3, 15, 5, 221, 205, 15, 5, 221, 206, + 222, 59, 15, 5, 221, 181, 15, 5, 221, 165, 15, 5, 221, 166, 27, 222, 130, + 15, 5, 221, 166, 104, 221, 165, 15, 5, 221, 166, 104, 221, 166, 244, 248, + 104, 244, 248, 244, 221, 104, 244, 220, 15, 5, 221, 0, 15, 5, 220, 253, + 15, 5, 220, 251, 15, 5, 220, 249, 15, 5, 220, 240, 15, 5, 220, 241, 104, + 220, 241, 217, 115, 104, 217, 114, 15, 5, 68, 15, 5, 105, 244, 11, 15, 5, + 105, 105, 68, 15, 5, 105, 104, 105, 230, 44, 104, 230, 44, 244, 221, 104, + 244, 220, 15, 5, 105, 104, 105, 223, 54, 104, 223, 53, 15, 5, 105, 104, + 105, 105, 210, 104, 105, 227, 159, 15, 5, 220, 124, 15, 5, 220, 121, 15, + 5, 220, 115, 15, 5, 220, 116, 235, 242, 15, 5, 220, 116, 27, 252, 228, + 15, 5, 220, 116, 27, 233, 196, 15, 5, 220, 116, 27, 105, 88, 105, 88, 68, + 15, 5, 220, 116, 27, 105, 88, 105, 88, 105, 244, 3, 15, 5, 220, 116, 244, + 3, 15, 5, 220, 116, 224, 228, 15, 5, 220, 116, 224, 229, 27, 252, 228, + 15, 5, 220, 111, 15, 5, 220, 94, 15, 5, 220, 95, 27, 235, 174, 15, 5, + 220, 95, 27, 234, 26, 88, 249, 207, 15, 5, 220, 95, 27, 225, 23, 15, 5, + 220, 95, 27, 68, 15, 5, 220, 93, 15, 5, 220, 89, 15, 5, 220, 90, 27, 236, + 208, 15, 5, 220, 90, 27, 187, 15, 5, 220, 87, 15, 5, 220, 88, 244, 3, 15, + 5, 220, 50, 15, 5, 220, 51, 250, 95, 220, 50, 15, 5, 220, 51, 224, 228, + 15, 5, 220, 48, 15, 5, 220, 49, 27, 112, 88, 155, 15, 5, 220, 49, 27, + 112, 88, 208, 15, 5, 220, 49, 27, 254, 175, 15, 5, 220, 49, 27, 155, 15, + 5, 220, 49, 27, 231, 103, 15, 5, 220, 49, 27, 220, 124, 15, 5, 220, 49, + 27, 220, 125, 88, 254, 7, 15, 5, 220, 49, 27, 220, 125, 88, 252, 84, 15, + 5, 220, 47, 15, 5, 220, 44, 15, 5, 220, 43, 15, 5, 220, 40, 15, 5, 220, + 41, 27, 60, 15, 5, 220, 41, 27, 254, 3, 15, 5, 220, 41, 27, 135, 15, 5, + 220, 41, 27, 247, 101, 15, 5, 220, 41, 27, 245, 0, 15, 5, 220, 41, 27, + 244, 240, 15, 5, 220, 41, 27, 244, 229, 222, 59, 15, 5, 220, 41, 27, 244, + 220, 15, 5, 220, 41, 27, 244, 17, 15, 5, 220, 41, 27, 155, 15, 5, 220, + 41, 27, 238, 1, 15, 5, 220, 41, 27, 237, 238, 15, 5, 220, 41, 27, 237, + 145, 15, 5, 220, 41, 27, 236, 113, 15, 5, 220, 41, 27, 234, 219, 15, 5, + 220, 41, 27, 233, 159, 15, 5, 220, 41, 27, 187, 15, 5, 220, 41, 27, 224, + 246, 15, 5, 220, 41, 27, 224, 130, 15, 5, 220, 41, 27, 221, 0, 15, 5, + 220, 41, 27, 105, 88, 244, 11, 15, 5, 220, 41, 27, 220, 115, 15, 5, 220, + 41, 27, 220, 38, 15, 5, 220, 38, 15, 5, 220, 39, 27, 68, 15, 5, 220, 30, + 15, 5, 220, 31, 27, 60, 15, 5, 220, 31, 27, 236, 7, 15, 5, 220, 31, 27, + 235, 247, 15, 5, 220, 31, 27, 222, 130, 15, 5, 220, 27, 15, 5, 220, 29, + 15, 5, 220, 28, 15, 5, 220, 24, 15, 5, 220, 13, 15, 5, 220, 14, 27, 236, + 208, 15, 5, 220, 12, 15, 5, 217, 114, 15, 5, 217, 115, 222, 59, 15, 5, + 217, 115, 204, 27, 235, 247, 15, 5, 217, 111, 15, 5, 217, 104, 15, 5, + 217, 91, 15, 5, 217, 42, 15, 5, 217, 43, 104, 217, 42, 15, 5, 217, 41, + 15, 5, 217, 39, 15, 5, 217, 40, 236, 254, 222, 59, 15, 5, 217, 34, 15, 5, + 217, 26, 15, 5, 217, 13, 15, 5, 217, 11, 15, 5, 217, 12, 27, 60, 15, 5, + 217, 10, 15, 5, 217, 9, 15, 120, 5, 124, 254, 7, 15, 120, 5, 148, 254, 7, + 15, 120, 5, 245, 116, 254, 7, 15, 120, 5, 245, 170, 254, 7, 15, 120, 5, + 224, 82, 254, 7, 15, 120, 5, 225, 43, 254, 7, 15, 120, 5, 246, 235, 254, + 7, 15, 120, 5, 232, 31, 254, 7, 15, 120, 5, 148, 248, 202, 15, 120, 5, + 245, 116, 248, 202, 15, 120, 5, 245, 170, 248, 202, 15, 120, 5, 224, 82, + 248, 202, 15, 120, 5, 225, 43, 248, 202, 15, 120, 5, 246, 235, 248, 202, + 15, 120, 5, 232, 31, 248, 202, 15, 120, 5, 245, 116, 68, 15, 120, 5, 245, + 170, 68, 15, 120, 5, 224, 82, 68, 15, 120, 5, 225, 43, 68, 15, 120, 5, + 246, 235, 68, 15, 120, 5, 232, 31, 68, 15, 120, 5, 131, 244, 168, 15, + 120, 5, 124, 244, 168, 15, 120, 5, 148, 244, 168, 15, 120, 5, 245, 116, + 244, 168, 15, 120, 5, 245, 170, 244, 168, 15, 120, 5, 224, 82, 244, 168, + 15, 120, 5, 225, 43, 244, 168, 15, 120, 5, 246, 235, 244, 168, 15, 120, + 5, 232, 31, 244, 168, 15, 120, 5, 131, 244, 165, 15, 120, 5, 124, 244, + 165, 15, 120, 5, 148, 244, 165, 15, 120, 5, 245, 116, 244, 165, 15, 120, + 5, 245, 170, 244, 165, 15, 120, 5, 124, 225, 3, 15, 120, 5, 148, 225, 3, + 15, 120, 5, 148, 225, 4, 219, 177, 17, 15, 120, 5, 245, 116, 225, 3, 15, + 120, 5, 245, 170, 225, 3, 15, 120, 5, 224, 82, 225, 3, 15, 120, 5, 225, + 43, 225, 3, 15, 120, 5, 246, 235, 225, 3, 15, 120, 5, 232, 31, 225, 3, + 15, 120, 5, 131, 224, 254, 15, 120, 5, 124, 224, 254, 15, 120, 5, 148, + 224, 254, 15, 120, 5, 148, 224, 255, 219, 177, 17, 15, 120, 5, 245, 116, + 224, 254, 15, 120, 5, 245, 170, 224, 254, 15, 120, 5, 225, 4, 27, 244, + 241, 88, 248, 202, 15, 120, 5, 225, 4, 27, 244, 241, 88, 233, 159, 15, + 120, 5, 131, 251, 225, 15, 120, 5, 124, 251, 225, 15, 120, 5, 148, 251, + 225, 15, 120, 5, 148, 251, 226, 219, 177, 17, 15, 120, 5, 245, 116, 251, + 225, 15, 120, 5, 245, 170, 251, 225, 15, 120, 5, 148, 219, 177, 245, 124, + 246, 132, 15, 120, 5, 148, 219, 177, 245, 124, 246, 129, 15, 120, 5, 245, + 116, 219, 177, 245, 124, 235, 47, 15, 120, 5, 245, 116, 219, 177, 245, + 124, 235, 45, 15, 120, 5, 245, 116, 219, 177, 245, 124, 235, 48, 60, 15, + 120, 5, 245, 116, 219, 177, 245, 124, 235, 48, 253, 204, 15, 120, 5, 224, + 82, 219, 177, 245, 124, 254, 4, 15, 120, 5, 225, 43, 219, 177, 245, 124, + 237, 230, 15, 120, 5, 225, 43, 219, 177, 245, 124, 237, 232, 60, 15, 120, + 5, 225, 43, 219, 177, 245, 124, 237, 232, 253, 204, 15, 120, 5, 246, 235, + 219, 177, 245, 124, 220, 26, 15, 120, 5, 246, 235, 219, 177, 245, 124, + 220, 25, 15, 120, 5, 232, 31, 219, 177, 245, 124, 237, 246, 15, 120, 5, + 232, 31, 219, 177, 245, 124, 237, 245, 15, 120, 5, 232, 31, 219, 177, + 245, 124, 237, 244, 15, 120, 5, 232, 31, 219, 177, 245, 124, 237, 247, + 60, 15, 120, 5, 124, 254, 8, 222, 59, 15, 120, 5, 148, 254, 8, 222, 59, + 15, 120, 5, 245, 116, 254, 8, 222, 59, 15, 120, 5, 245, 170, 254, 8, 222, + 59, 15, 120, 5, 224, 82, 254, 8, 222, 59, 15, 120, 5, 131, 252, 207, 15, + 120, 5, 124, 252, 207, 15, 120, 5, 148, 252, 207, 15, 120, 5, 245, 116, + 252, 207, 15, 120, 5, 245, 116, 252, 208, 219, 177, 17, 15, 120, 5, 245, + 170, 252, 207, 15, 120, 5, 245, 170, 252, 208, 219, 177, 17, 15, 120, 5, + 232, 40, 15, 120, 5, 232, 41, 15, 120, 5, 131, 246, 128, 15, 120, 5, 124, + 246, 128, 15, 120, 5, 131, 221, 252, 248, 202, 15, 120, 5, 124, 221, 250, + 248, 202, 15, 120, 5, 245, 170, 224, 72, 248, 202, 15, 120, 5, 131, 221, + 252, 219, 177, 245, 124, 60, 15, 120, 5, 124, 221, 250, 219, 177, 245, + 124, 60, 15, 120, 5, 131, 246, 232, 254, 7, 15, 120, 5, 131, 228, 90, + 254, 7, 15, 120, 5, 48, 253, 254, 131, 224, 73, 15, 120, 5, 48, 253, 254, + 131, 228, 89, 15, 228, 197, 5, 48, 253, 254, 218, 174, 248, 191, 15, 228, + 197, 5, 69, 250, 175, 15, 228, 197, 5, 249, 11, 250, 175, 15, 228, 197, + 5, 249, 11, 221, 86, 10, 11, 255, 140, 10, 11, 255, 139, 10, 11, 255, + 138, 10, 11, 255, 137, 10, 11, 255, 136, 10, 11, 255, 135, 10, 11, 255, + 134, 10, 11, 255, 133, 10, 11, 255, 132, 10, 11, 255, 131, 10, 11, 255, + 130, 10, 11, 255, 129, 10, 11, 255, 128, 10, 11, 255, 127, 10, 11, 255, + 126, 10, 11, 255, 125, 10, 11, 255, 124, 10, 11, 255, 123, 10, 11, 255, + 122, 10, 11, 255, 121, 10, 11, 255, 120, 10, 11, 255, 119, 10, 11, 255, + 118, 10, 11, 255, 117, 10, 11, 255, 116, 10, 11, 255, 115, 10, 11, 255, + 114, 10, 11, 255, 113, 10, 11, 255, 112, 10, 11, 255, 111, 10, 11, 255, + 110, 10, 11, 255, 109, 10, 11, 255, 108, 10, 11, 255, 107, 10, 11, 255, + 106, 10, 11, 255, 105, 10, 11, 255, 104, 10, 11, 255, 103, 10, 11, 255, + 102, 10, 11, 255, 101, 10, 11, 255, 100, 10, 11, 255, 99, 10, 11, 255, + 98, 10, 11, 255, 97, 10, 11, 255, 96, 10, 11, 255, 95, 10, 11, 255, 94, + 10, 11, 255, 93, 10, 11, 255, 92, 10, 11, 255, 91, 10, 11, 255, 90, 10, + 11, 255, 89, 10, 11, 255, 88, 10, 11, 255, 87, 10, 11, 255, 86, 10, 11, + 255, 85, 10, 11, 255, 84, 10, 11, 255, 83, 10, 11, 255, 82, 10, 11, 255, + 81, 10, 11, 255, 80, 10, 11, 255, 79, 10, 11, 255, 78, 10, 11, 255, 77, + 10, 11, 255, 76, 10, 11, 255, 75, 10, 11, 255, 74, 10, 11, 255, 73, 10, + 11, 255, 72, 10, 11, 255, 71, 10, 11, 255, 70, 10, 11, 255, 69, 10, 11, + 255, 68, 10, 11, 255, 67, 10, 11, 255, 66, 10, 11, 255, 65, 10, 11, 255, + 64, 10, 11, 255, 63, 10, 11, 255, 62, 10, 11, 255, 61, 10, 11, 253, 202, + 10, 11, 253, 200, 10, 11, 253, 198, 10, 11, 253, 196, 10, 11, 253, 194, + 10, 11, 253, 193, 10, 11, 253, 191, 10, 11, 253, 189, 10, 11, 253, 187, + 10, 11, 253, 185, 10, 11, 251, 198, 10, 11, 251, 197, 10, 11, 251, 196, + 10, 11, 251, 195, 10, 11, 251, 194, 10, 11, 251, 193, 10, 11, 251, 192, + 10, 11, 251, 191, 10, 11, 251, 190, 10, 11, 251, 189, 10, 11, 251, 188, + 10, 11, 251, 187, 10, 11, 251, 186, 10, 11, 251, 185, 10, 11, 251, 184, + 10, 11, 251, 183, 10, 11, 251, 182, 10, 11, 251, 181, 10, 11, 251, 180, + 10, 11, 251, 179, 10, 11, 251, 178, 10, 11, 251, 177, 10, 11, 251, 176, + 10, 11, 251, 175, 10, 11, 251, 174, 10, 11, 251, 173, 10, 11, 251, 172, + 10, 11, 251, 171, 10, 11, 250, 45, 10, 11, 250, 44, 10, 11, 250, 43, 10, + 11, 250, 42, 10, 11, 250, 41, 10, 11, 250, 40, 10, 11, 250, 39, 10, 11, + 250, 38, 10, 11, 250, 37, 10, 11, 250, 36, 10, 11, 250, 35, 10, 11, 250, + 34, 10, 11, 250, 33, 10, 11, 250, 32, 10, 11, 250, 31, 10, 11, 250, 30, + 10, 11, 250, 29, 10, 11, 250, 28, 10, 11, 250, 27, 10, 11, 250, 26, 10, + 11, 250, 25, 10, 11, 250, 24, 10, 11, 250, 23, 10, 11, 250, 22, 10, 11, + 250, 21, 10, 11, 250, 20, 10, 11, 250, 19, 10, 11, 250, 18, 10, 11, 250, + 17, 10, 11, 250, 16, 10, 11, 250, 15, 10, 11, 250, 14, 10, 11, 250, 13, + 10, 11, 250, 12, 10, 11, 250, 11, 10, 11, 250, 10, 10, 11, 250, 9, 10, + 11, 250, 8, 10, 11, 250, 7, 10, 11, 250, 6, 10, 11, 250, 5, 10, 11, 250, + 4, 10, 11, 250, 3, 10, 11, 250, 2, 10, 11, 250, 1, 10, 11, 250, 0, 10, + 11, 249, 255, 10, 11, 249, 254, 10, 11, 249, 253, 10, 11, 249, 252, 10, + 11, 249, 251, 10, 11, 249, 250, 10, 11, 249, 249, 10, 11, 249, 248, 10, + 11, 249, 247, 10, 11, 249, 246, 10, 11, 249, 245, 10, 11, 249, 244, 10, + 11, 249, 243, 10, 11, 249, 242, 10, 11, 249, 241, 10, 11, 249, 240, 10, + 11, 249, 239, 10, 11, 249, 238, 10, 11, 249, 237, 10, 11, 249, 236, 10, + 11, 249, 235, 10, 11, 249, 234, 10, 11, 249, 233, 10, 11, 249, 232, 10, + 11, 249, 231, 10, 11, 249, 230, 10, 11, 249, 229, 10, 11, 249, 228, 10, + 11, 249, 227, 10, 11, 249, 226, 10, 11, 249, 225, 10, 11, 249, 224, 10, + 11, 249, 223, 10, 11, 249, 222, 10, 11, 249, 221, 10, 11, 249, 220, 10, + 11, 249, 219, 10, 11, 249, 218, 10, 11, 249, 217, 10, 11, 249, 216, 10, + 11, 249, 215, 10, 11, 249, 214, 10, 11, 249, 213, 10, 11, 249, 212, 10, + 11, 249, 211, 10, 11, 249, 210, 10, 11, 247, 62, 10, 11, 247, 61, 10, 11, + 247, 60, 10, 11, 247, 59, 10, 11, 247, 58, 10, 11, 247, 57, 10, 11, 247, + 56, 10, 11, 247, 55, 10, 11, 247, 54, 10, 11, 247, 53, 10, 11, 247, 52, + 10, 11, 247, 51, 10, 11, 247, 50, 10, 11, 247, 49, 10, 11, 247, 48, 10, + 11, 247, 47, 10, 11, 247, 46, 10, 11, 247, 45, 10, 11, 247, 44, 10, 11, + 247, 43, 10, 11, 247, 42, 10, 11, 247, 41, 10, 11, 247, 40, 10, 11, 247, + 39, 10, 11, 247, 38, 10, 11, 247, 37, 10, 11, 247, 36, 10, 11, 247, 35, + 10, 11, 247, 34, 10, 11, 247, 33, 10, 11, 247, 32, 10, 11, 247, 31, 10, + 11, 247, 30, 10, 11, 247, 29, 10, 11, 247, 28, 10, 11, 247, 27, 10, 11, + 247, 26, 10, 11, 247, 25, 10, 11, 247, 24, 10, 11, 247, 23, 10, 11, 247, + 22, 10, 11, 247, 21, 10, 11, 247, 20, 10, 11, 247, 19, 10, 11, 246, 73, + 10, 11, 246, 72, 10, 11, 246, 71, 10, 11, 246, 70, 10, 11, 246, 69, 10, + 11, 246, 68, 10, 11, 246, 67, 10, 11, 246, 66, 10, 11, 246, 65, 10, 11, + 246, 64, 10, 11, 246, 63, 10, 11, 246, 62, 10, 11, 246, 61, 10, 11, 246, + 60, 10, 11, 246, 59, 10, 11, 246, 58, 10, 11, 246, 57, 10, 11, 246, 56, + 10, 11, 246, 55, 10, 11, 246, 54, 10, 11, 246, 53, 10, 11, 246, 52, 10, + 11, 246, 51, 10, 11, 246, 50, 10, 11, 246, 49, 10, 11, 246, 48, 10, 11, + 246, 47, 10, 11, 246, 46, 10, 11, 246, 45, 10, 11, 246, 44, 10, 11, 246, + 43, 10, 11, 246, 42, 10, 11, 246, 41, 10, 11, 246, 40, 10, 11, 246, 39, + 10, 11, 246, 38, 10, 11, 246, 37, 10, 11, 246, 36, 10, 11, 246, 35, 10, + 11, 246, 34, 10, 11, 246, 33, 10, 11, 246, 32, 10, 11, 246, 31, 10, 11, + 246, 30, 10, 11, 246, 29, 10, 11, 246, 28, 10, 11, 246, 27, 10, 11, 246, + 26, 10, 11, 246, 25, 10, 11, 246, 24, 10, 11, 246, 23, 10, 11, 246, 22, + 10, 11, 246, 21, 10, 11, 246, 20, 10, 11, 246, 19, 10, 11, 246, 18, 10, + 11, 246, 17, 10, 11, 246, 16, 10, 11, 246, 15, 10, 11, 246, 14, 10, 11, + 246, 13, 10, 11, 246, 12, 10, 11, 246, 11, 10, 11, 246, 10, 10, 11, 246, + 9, 10, 11, 245, 66, 10, 11, 245, 65, 10, 11, 245, 64, 10, 11, 245, 63, + 10, 11, 245, 62, 10, 11, 245, 61, 10, 11, 245, 60, 10, 11, 245, 59, 10, + 11, 245, 58, 10, 11, 245, 57, 10, 11, 245, 56, 10, 11, 245, 55, 10, 11, + 245, 54, 10, 11, 245, 53, 10, 11, 245, 52, 10, 11, 245, 51, 10, 11, 245, + 50, 10, 11, 245, 49, 10, 11, 245, 48, 10, 11, 245, 47, 10, 11, 245, 46, + 10, 11, 245, 45, 10, 11, 245, 44, 10, 11, 245, 43, 10, 11, 245, 42, 10, + 11, 245, 41, 10, 11, 245, 40, 10, 11, 245, 39, 10, 11, 245, 38, 10, 11, + 245, 37, 10, 11, 245, 36, 10, 11, 245, 35, 10, 11, 245, 34, 10, 11, 245, + 33, 10, 11, 245, 32, 10, 11, 245, 31, 10, 11, 245, 30, 10, 11, 245, 29, + 10, 11, 245, 28, 10, 11, 245, 27, 10, 11, 245, 26, 10, 11, 245, 25, 10, + 11, 245, 24, 10, 11, 245, 23, 10, 11, 245, 22, 10, 11, 245, 21, 10, 11, + 245, 20, 10, 11, 245, 19, 10, 11, 245, 18, 10, 11, 245, 17, 10, 11, 245, + 16, 10, 11, 245, 15, 10, 11, 245, 14, 10, 11, 245, 13, 10, 11, 245, 12, + 10, 11, 245, 11, 10, 11, 245, 10, 10, 11, 245, 9, 10, 11, 245, 8, 10, 11, + 245, 7, 10, 11, 245, 6, 10, 11, 245, 5, 10, 11, 245, 4, 10, 11, 245, 3, + 10, 11, 243, 223, 10, 11, 243, 222, 10, 11, 243, 221, 10, 11, 243, 220, + 10, 11, 243, 219, 10, 11, 243, 218, 10, 11, 243, 217, 10, 11, 243, 216, + 10, 11, 243, 215, 10, 11, 242, 91, 10, 11, 242, 90, 10, 11, 242, 89, 10, + 11, 242, 88, 10, 11, 242, 87, 10, 11, 242, 86, 10, 11, 242, 85, 10, 11, + 242, 84, 10, 11, 242, 83, 10, 11, 242, 82, 10, 11, 242, 81, 10, 11, 242, + 80, 10, 11, 242, 79, 10, 11, 242, 78, 10, 11, 242, 77, 10, 11, 242, 76, + 10, 11, 242, 75, 10, 11, 242, 74, 10, 11, 242, 73, 10, 11, 237, 16, 10, + 11, 237, 15, 10, 11, 237, 14, 10, 11, 237, 13, 10, 11, 237, 12, 10, 11, + 237, 11, 10, 11, 237, 10, 10, 11, 237, 9, 10, 11, 235, 199, 10, 11, 235, + 198, 10, 11, 235, 197, 10, 11, 235, 196, 10, 11, 235, 195, 10, 11, 235, + 194, 10, 11, 235, 193, 10, 11, 235, 192, 10, 11, 235, 191, 10, 11, 235, + 190, 10, 11, 234, 186, 10, 11, 234, 185, 10, 11, 234, 184, 10, 11, 234, + 183, 10, 11, 234, 182, 10, 11, 234, 181, 10, 11, 234, 180, 10, 11, 234, + 179, 10, 11, 234, 178, 10, 11, 234, 177, 10, 11, 234, 176, 10, 11, 234, + 175, 10, 11, 234, 174, 10, 11, 234, 173, 10, 11, 234, 172, 10, 11, 234, + 171, 10, 11, 234, 170, 10, 11, 234, 169, 10, 11, 234, 168, 10, 11, 234, + 167, 10, 11, 234, 166, 10, 11, 234, 165, 10, 11, 234, 164, 10, 11, 234, + 163, 10, 11, 234, 162, 10, 11, 234, 161, 10, 11, 234, 160, 10, 11, 234, + 159, 10, 11, 234, 158, 10, 11, 234, 157, 10, 11, 234, 156, 10, 11, 234, + 155, 10, 11, 234, 154, 10, 11, 234, 153, 10, 11, 234, 152, 10, 11, 234, + 151, 10, 11, 234, 150, 10, 11, 234, 149, 10, 11, 234, 148, 10, 11, 234, + 147, 10, 11, 234, 146, 10, 11, 234, 145, 10, 11, 234, 144, 10, 11, 234, + 143, 10, 11, 234, 142, 10, 11, 234, 141, 10, 11, 234, 140, 10, 11, 234, + 139, 10, 11, 234, 138, 10, 11, 234, 137, 10, 11, 234, 136, 10, 11, 234, + 135, 10, 11, 234, 134, 10, 11, 234, 133, 10, 11, 234, 132, 10, 11, 234, + 131, 10, 11, 234, 130, 10, 11, 234, 129, 10, 11, 234, 128, 10, 11, 234, + 127, 10, 11, 234, 126, 10, 11, 234, 125, 10, 11, 234, 124, 10, 11, 234, + 123, 10, 11, 234, 122, 10, 11, 234, 121, 10, 11, 233, 31, 10, 11, 233, + 30, 10, 11, 233, 29, 10, 11, 233, 28, 10, 11, 233, 27, 10, 11, 233, 26, + 10, 11, 233, 25, 10, 11, 233, 24, 10, 11, 233, 23, 10, 11, 233, 22, 10, + 11, 233, 21, 10, 11, 233, 20, 10, 11, 233, 19, 10, 11, 233, 18, 10, 11, + 233, 17, 10, 11, 233, 16, 10, 11, 233, 15, 10, 11, 233, 14, 10, 11, 233, + 13, 10, 11, 233, 12, 10, 11, 233, 11, 10, 11, 233, 10, 10, 11, 233, 9, + 10, 11, 233, 8, 10, 11, 233, 7, 10, 11, 233, 6, 10, 11, 233, 5, 10, 11, + 233, 4, 10, 11, 233, 3, 10, 11, 233, 2, 10, 11, 233, 1, 10, 11, 233, 0, + 10, 11, 232, 255, 10, 11, 232, 254, 10, 11, 232, 253, 10, 11, 232, 252, + 10, 11, 232, 251, 10, 11, 232, 250, 10, 11, 232, 249, 10, 11, 232, 248, + 10, 11, 232, 247, 10, 11, 232, 246, 10, 11, 232, 245, 10, 11, 232, 244, + 10, 11, 232, 243, 10, 11, 232, 242, 10, 11, 232, 241, 10, 11, 232, 240, + 10, 11, 232, 239, 10, 11, 231, 241, 10, 11, 231, 240, 10, 11, 231, 239, + 10, 11, 231, 238, 10, 11, 231, 237, 10, 11, 231, 236, 10, 11, 231, 235, + 10, 11, 231, 234, 10, 11, 231, 233, 10, 11, 231, 232, 10, 11, 231, 231, + 10, 11, 231, 230, 10, 11, 231, 229, 10, 11, 231, 228, 10, 11, 231, 227, + 10, 11, 231, 226, 10, 11, 231, 225, 10, 11, 231, 224, 10, 11, 231, 223, + 10, 11, 231, 222, 10, 11, 231, 221, 10, 11, 231, 220, 10, 11, 231, 143, + 10, 11, 231, 142, 10, 11, 231, 141, 10, 11, 231, 140, 10, 11, 231, 139, + 10, 11, 231, 138, 10, 11, 231, 137, 10, 11, 231, 136, 10, 11, 231, 135, + 10, 11, 231, 134, 10, 11, 231, 133, 10, 11, 231, 132, 10, 11, 231, 131, + 10, 11, 231, 130, 10, 11, 231, 129, 10, 11, 231, 128, 10, 11, 231, 127, + 10, 11, 231, 126, 10, 11, 231, 125, 10, 11, 231, 124, 10, 11, 231, 123, + 10, 11, 231, 122, 10, 11, 231, 121, 10, 11, 231, 120, 10, 11, 231, 119, + 10, 11, 231, 118, 10, 11, 231, 5, 10, 11, 231, 4, 10, 11, 231, 3, 10, 11, + 231, 2, 10, 11, 231, 1, 10, 11, 231, 0, 10, 11, 230, 255, 10, 11, 230, + 254, 10, 11, 230, 253, 10, 11, 230, 252, 10, 11, 230, 251, 10, 11, 230, + 250, 10, 11, 230, 249, 10, 11, 230, 248, 10, 11, 230, 247, 10, 11, 230, + 246, 10, 11, 230, 245, 10, 11, 230, 244, 10, 11, 230, 243, 10, 11, 230, + 242, 10, 11, 230, 241, 10, 11, 230, 240, 10, 11, 230, 239, 10, 11, 230, + 238, 10, 11, 230, 237, 10, 11, 230, 236, 10, 11, 230, 235, 10, 11, 230, + 234, 10, 11, 230, 233, 10, 11, 230, 232, 10, 11, 230, 231, 10, 11, 230, + 230, 10, 11, 230, 229, 10, 11, 230, 228, 10, 11, 230, 227, 10, 11, 230, + 226, 10, 11, 230, 225, 10, 11, 230, 224, 10, 11, 230, 223, 10, 11, 230, + 222, 10, 11, 230, 221, 10, 11, 230, 220, 10, 11, 230, 219, 10, 11, 230, + 218, 10, 11, 230, 217, 10, 11, 230, 216, 10, 11, 230, 215, 10, 11, 230, + 214, 10, 11, 230, 213, 10, 11, 230, 212, 10, 11, 230, 211, 10, 11, 230, + 210, 10, 11, 230, 209, 10, 11, 230, 208, 10, 11, 230, 207, 10, 11, 230, + 206, 10, 11, 230, 205, 10, 11, 230, 204, 10, 11, 230, 203, 10, 11, 230, + 202, 10, 11, 230, 201, 10, 11, 230, 200, 10, 11, 230, 199, 10, 11, 230, + 198, 10, 11, 230, 197, 10, 11, 230, 196, 10, 11, 230, 195, 10, 11, 230, + 194, 10, 11, 230, 193, 10, 11, 230, 192, 10, 11, 230, 191, 10, 11, 230, + 190, 10, 11, 230, 189, 10, 11, 230, 188, 10, 11, 230, 187, 10, 11, 230, + 58, 10, 11, 230, 57, 10, 11, 230, 56, 10, 11, 230, 55, 10, 11, 230, 54, + 10, 11, 230, 53, 10, 11, 230, 52, 10, 11, 230, 51, 10, 11, 230, 50, 10, + 11, 230, 49, 10, 11, 230, 48, 10, 11, 230, 47, 10, 11, 230, 46, 10, 11, + 228, 162, 10, 11, 228, 161, 10, 11, 228, 160, 10, 11, 228, 159, 10, 11, + 228, 158, 10, 11, 228, 157, 10, 11, 228, 156, 10, 11, 228, 37, 10, 11, + 228, 36, 10, 11, 228, 35, 10, 11, 228, 34, 10, 11, 228, 33, 10, 11, 228, + 32, 10, 11, 228, 31, 10, 11, 228, 30, 10, 11, 228, 29, 10, 11, 228, 28, + 10, 11, 228, 27, 10, 11, 228, 26, 10, 11, 228, 25, 10, 11, 228, 24, 10, + 11, 228, 23, 10, 11, 228, 22, 10, 11, 228, 21, 10, 11, 228, 20, 10, 11, + 228, 19, 10, 11, 228, 18, 10, 11, 228, 17, 10, 11, 228, 16, 10, 11, 228, + 15, 10, 11, 228, 14, 10, 11, 228, 13, 10, 11, 228, 12, 10, 11, 228, 11, + 10, 11, 228, 10, 10, 11, 228, 9, 10, 11, 228, 8, 10, 11, 228, 7, 10, 11, + 228, 6, 10, 11, 228, 5, 10, 11, 228, 4, 10, 11, 226, 232, 10, 11, 226, + 231, 10, 11, 226, 230, 10, 11, 226, 229, 10, 11, 226, 228, 10, 11, 226, + 227, 10, 11, 226, 226, 10, 11, 226, 225, 10, 11, 226, 224, 10, 11, 226, + 223, 10, 11, 226, 222, 10, 11, 226, 221, 10, 11, 226, 220, 10, 11, 226, + 219, 10, 11, 226, 218, 10, 11, 226, 217, 10, 11, 226, 216, 10, 11, 226, + 215, 10, 11, 226, 214, 10, 11, 226, 213, 10, 11, 226, 212, 10, 11, 226, + 211, 10, 11, 226, 210, 10, 11, 226, 209, 10, 11, 226, 208, 10, 11, 226, + 207, 10, 11, 226, 206, 10, 11, 226, 205, 10, 11, 226, 204, 10, 11, 226, + 203, 10, 11, 226, 202, 10, 11, 226, 201, 10, 11, 226, 200, 10, 11, 226, + 199, 10, 11, 226, 198, 10, 11, 226, 197, 10, 11, 226, 196, 10, 11, 226, + 195, 10, 11, 226, 194, 10, 11, 226, 193, 10, 11, 226, 192, 10, 11, 226, + 191, 10, 11, 226, 190, 10, 11, 226, 189, 10, 11, 226, 188, 10, 11, 226, + 187, 10, 11, 226, 186, 10, 11, 226, 185, 10, 11, 226, 184, 10, 11, 226, + 183, 10, 11, 226, 182, 10, 11, 226, 181, 10, 11, 226, 180, 10, 11, 226, + 179, 10, 11, 222, 200, 10, 11, 222, 199, 10, 11, 222, 198, 10, 11, 222, + 197, 10, 11, 222, 196, 10, 11, 222, 195, 10, 11, 222, 194, 10, 11, 222, + 193, 10, 11, 222, 192, 10, 11, 222, 191, 10, 11, 222, 190, 10, 11, 222, + 189, 10, 11, 222, 188, 10, 11, 222, 187, 10, 11, 222, 186, 10, 11, 222, + 185, 10, 11, 222, 184, 10, 11, 222, 183, 10, 11, 222, 182, 10, 11, 222, + 181, 10, 11, 222, 180, 10, 11, 222, 179, 10, 11, 222, 178, 10, 11, 222, + 177, 10, 11, 222, 176, 10, 11, 222, 175, 10, 11, 222, 174, 10, 11, 222, + 173, 10, 11, 222, 172, 10, 11, 222, 171, 10, 11, 222, 170, 10, 11, 222, + 169, 10, 11, 222, 168, 10, 11, 222, 167, 10, 11, 222, 166, 10, 11, 222, + 165, 10, 11, 222, 164, 10, 11, 222, 163, 10, 11, 222, 162, 10, 11, 222, + 161, 10, 11, 222, 160, 10, 11, 222, 159, 10, 11, 222, 158, 10, 11, 222, + 157, 10, 11, 220, 172, 10, 11, 220, 171, 10, 11, 220, 170, 10, 11, 220, + 169, 10, 11, 220, 168, 10, 11, 220, 167, 10, 11, 220, 166, 10, 11, 220, + 165, 10, 11, 220, 164, 10, 11, 220, 163, 10, 11, 220, 162, 10, 11, 220, + 161, 10, 11, 220, 160, 10, 11, 220, 159, 10, 11, 220, 158, 10, 11, 220, + 157, 10, 11, 220, 156, 10, 11, 220, 155, 10, 11, 220, 154, 10, 11, 220, + 153, 10, 11, 220, 152, 10, 11, 220, 151, 10, 11, 220, 150, 10, 11, 220, + 149, 10, 11, 220, 148, 10, 11, 220, 147, 10, 11, 220, 146, 10, 11, 220, + 145, 10, 11, 220, 144, 10, 11, 220, 143, 10, 11, 220, 142, 10, 11, 220, + 141, 10, 11, 220, 140, 10, 11, 220, 139, 10, 11, 220, 138, 10, 11, 220, + 137, 10, 11, 220, 136, 10, 11, 220, 135, 10, 11, 220, 134, 10, 11, 220, + 133, 10, 11, 220, 132, 10, 11, 220, 131, 10, 11, 220, 130, 10, 11, 220, + 129, 10, 11, 220, 128, 10, 11, 220, 127, 10, 11, 220, 126, 10, 11, 220, + 10, 10, 11, 220, 9, 10, 11, 220, 8, 10, 11, 220, 7, 10, 11, 220, 6, 10, + 11, 220, 5, 10, 11, 220, 4, 10, 11, 220, 3, 10, 11, 220, 2, 10, 11, 220, + 1, 10, 11, 220, 0, 10, 11, 219, 255, 10, 11, 219, 254, 10, 11, 219, 253, + 10, 11, 219, 252, 10, 11, 219, 251, 10, 11, 219, 250, 10, 11, 219, 249, + 10, 11, 219, 248, 10, 11, 219, 247, 10, 11, 219, 246, 10, 11, 219, 245, + 10, 11, 219, 244, 10, 11, 219, 243, 10, 11, 219, 242, 10, 11, 219, 241, + 10, 11, 219, 240, 10, 11, 219, 239, 10, 11, 219, 238, 10, 11, 219, 237, + 10, 11, 219, 236, 10, 11, 219, 235, 10, 11, 219, 234, 10, 11, 219, 233, + 10, 11, 219, 232, 10, 11, 219, 231, 10, 11, 219, 230, 10, 11, 219, 229, + 10, 11, 219, 228, 10, 11, 219, 227, 10, 11, 219, 226, 10, 11, 219, 225, + 10, 11, 219, 224, 10, 11, 219, 223, 10, 11, 219, 222, 10, 11, 219, 221, + 10, 11, 219, 220, 10, 11, 219, 219, 10, 11, 219, 218, 10, 11, 219, 217, + 10, 11, 219, 216, 10, 11, 219, 215, 10, 11, 219, 214, 10, 11, 219, 213, + 10, 11, 219, 212, 10, 11, 219, 211, 10, 11, 219, 210, 10, 11, 219, 209, + 10, 11, 219, 208, 10, 11, 219, 207, 10, 11, 219, 206, 10, 11, 219, 205, + 10, 11, 219, 204, 10, 11, 219, 203, 10, 11, 219, 202, 10, 11, 219, 201, + 10, 11, 219, 200, 10, 11, 219, 199, 10, 11, 219, 198, 10, 11, 219, 197, + 10, 11, 219, 196, 10, 11, 219, 195, 10, 11, 219, 194, 10, 11, 219, 193, + 10, 11, 219, 192, 10, 11, 219, 191, 10, 11, 219, 190, 10, 11, 219, 39, + 10, 11, 219, 38, 10, 11, 219, 37, 10, 11, 219, 36, 10, 11, 219, 35, 10, + 11, 219, 34, 10, 11, 219, 33, 10, 11, 219, 32, 10, 11, 219, 31, 10, 11, + 219, 30, 10, 11, 219, 29, 10, 11, 219, 28, 10, 11, 219, 27, 10, 11, 219, + 26, 10, 11, 219, 25, 10, 11, 219, 24, 10, 11, 219, 23, 10, 11, 219, 22, + 10, 11, 219, 21, 10, 11, 219, 20, 10, 11, 219, 19, 10, 11, 219, 18, 10, + 11, 219, 17, 10, 11, 219, 16, 10, 11, 219, 15, 10, 11, 219, 14, 10, 11, + 219, 13, 10, 11, 219, 12, 10, 11, 219, 11, 10, 11, 219, 10, 10, 11, 219, + 9, 10, 11, 219, 8, 10, 11, 218, 150, 10, 11, 218, 149, 10, 11, 218, 148, + 10, 11, 218, 147, 10, 11, 218, 146, 10, 11, 218, 145, 10, 11, 218, 144, + 10, 11, 218, 143, 10, 11, 218, 142, 10, 11, 218, 141, 10, 11, 218, 140, + 10, 11, 218, 139, 10, 11, 218, 88, 10, 11, 218, 87, 10, 11, 218, 86, 10, + 11, 218, 85, 10, 11, 218, 84, 10, 11, 218, 83, 10, 11, 218, 82, 10, 11, + 218, 81, 10, 11, 218, 80, 10, 11, 217, 156, 10, 11, 217, 155, 10, 11, + 217, 154, 10, 11, 217, 153, 10, 11, 217, 152, 10, 11, 217, 151, 10, 11, + 217, 150, 10, 11, 217, 149, 10, 11, 217, 148, 10, 11, 217, 147, 10, 11, + 217, 146, 10, 11, 217, 145, 10, 11, 217, 144, 10, 11, 217, 143, 10, 11, + 217, 142, 10, 11, 217, 141, 10, 11, 217, 140, 10, 11, 217, 139, 10, 11, + 217, 138, 10, 11, 217, 137, 10, 11, 217, 136, 10, 11, 217, 135, 10, 11, + 217, 134, 10, 11, 217, 133, 10, 11, 217, 132, 10, 11, 217, 131, 10, 11, + 217, 130, 10, 11, 217, 129, 10, 11, 217, 128, 10, 11, 217, 127, 10, 11, + 217, 126, 10, 11, 217, 125, 10, 11, 217, 124, 10, 11, 217, 123, 10, 11, + 217, 122, 10, 11, 217, 121, 10, 11, 217, 120, 10, 11, 217, 119, 10, 11, + 217, 118, 10, 11, 217, 117, 10, 11, 217, 116, 10, 11, 255, 57, 10, 11, + 255, 56, 10, 11, 255, 55, 10, 11, 255, 54, 10, 11, 255, 53, 10, 11, 255, + 52, 10, 11, 255, 51, 10, 11, 255, 50, 10, 11, 255, 49, 10, 11, 255, 48, + 10, 11, 255, 47, 10, 11, 255, 46, 10, 11, 255, 45, 10, 11, 255, 44, 10, + 11, 255, 43, 10, 11, 255, 42, 10, 11, 255, 41, 10, 11, 255, 40, 10, 11, + 255, 39, 10, 11, 255, 38, 10, 11, 255, 37, 10, 11, 255, 36, 10, 11, 255, + 35, 10, 11, 255, 34, 10, 11, 255, 33, 10, 11, 255, 32, 10, 11, 255, 31, + 10, 11, 255, 30, 10, 11, 255, 29, 10, 11, 255, 28, 10, 11, 255, 27, 10, + 11, 255, 26, 10, 11, 255, 25, 10, 11, 255, 24, 46, 26, 16, 228, 206, 46, + 26, 16, 249, 148, 46, 26, 16, 229, 163, 46, 26, 16, 230, 67, 246, 221, + 46, 26, 16, 230, 67, 248, 214, 46, 26, 16, 219, 181, 246, 221, 46, 26, + 16, 219, 181, 248, 214, 46, 26, 16, 236, 198, 46, 26, 16, 222, 217, 46, + 26, 16, 229, 235, 46, 26, 16, 217, 205, 46, 26, 16, 217, 206, 248, 214, + 46, 26, 16, 236, 12, 46, 26, 16, 254, 89, 246, 221, 46, 26, 16, 246, 90, + 246, 221, 46, 26, 16, 222, 73, 46, 26, 16, 236, 164, 46, 26, 16, 254, 80, + 46, 26, 16, 254, 81, 248, 214, 46, 26, 16, 222, 222, 46, 26, 16, 221, + 242, 46, 26, 16, 230, 148, 254, 47, 46, 26, 16, 244, 56, 254, 47, 46, 26, + 16, 228, 205, 46, 26, 16, 251, 62, 46, 26, 16, 219, 171, 46, 26, 16, 237, + 144, 254, 47, 46, 26, 16, 236, 166, 254, 47, 46, 26, 16, 236, 165, 254, + 47, 46, 26, 16, 226, 119, 46, 26, 16, 229, 226, 46, 26, 16, 223, 151, + 254, 83, 46, 26, 16, 230, 66, 254, 47, 46, 26, 16, 219, 180, 254, 47, 46, + 26, 16, 254, 84, 254, 47, 46, 26, 16, 254, 78, 46, 26, 16, 236, 65, 46, + 26, 16, 227, 157, 46, 26, 16, 229, 106, 254, 47, 46, 26, 16, 221, 175, + 46, 26, 16, 254, 129, 46, 26, 16, 226, 75, 46, 26, 16, 222, 225, 254, 47, + 46, 26, 16, 222, 225, 233, 239, 223, 149, 46, 26, 16, 230, 61, 254, 47, + 46, 26, 16, 222, 17, 46, 26, 16, 235, 97, 46, 26, 16, 247, 77, 46, 26, + 16, 221, 92, 46, 26, 16, 222, 52, 46, 26, 16, 236, 15, 46, 26, 16, 254, + 89, 246, 90, 232, 131, 46, 26, 16, 245, 93, 254, 47, 46, 26, 16, 237, + 234, 46, 26, 16, 221, 68, 254, 47, 46, 26, 16, 236, 201, 221, 67, 46, 26, + 16, 229, 182, 46, 26, 16, 228, 209, 46, 26, 16, 236, 42, 46, 26, 16, 251, + 6, 254, 47, 46, 26, 16, 227, 232, 46, 26, 16, 229, 238, 254, 47, 46, 26, + 16, 229, 236, 254, 47, 46, 26, 16, 242, 63, 46, 26, 16, 232, 217, 46, 26, + 16, 229, 148, 46, 26, 16, 236, 43, 254, 152, 46, 26, 16, 221, 68, 254, + 152, 46, 26, 16, 223, 132, 46, 26, 16, 244, 25, 46, 26, 16, 237, 144, + 232, 131, 46, 26, 16, 230, 148, 232, 131, 46, 26, 16, 230, 67, 232, 131, + 46, 26, 16, 229, 147, 46, 26, 16, 236, 29, 46, 26, 16, 229, 146, 46, 26, + 16, 236, 14, 46, 26, 16, 229, 183, 232, 131, 46, 26, 16, 236, 165, 232, + 132, 254, 109, 46, 26, 16, 236, 166, 232, 132, 254, 109, 46, 26, 16, 217, + 203, 46, 26, 16, 254, 81, 232, 131, 46, 26, 16, 254, 82, 222, 223, 232, + 131, 46, 26, 16, 217, 204, 46, 26, 16, 236, 13, 46, 26, 16, 246, 216, 46, + 26, 16, 251, 63, 46, 26, 16, 233, 168, 237, 143, 46, 26, 16, 219, 181, + 232, 131, 46, 26, 16, 229, 106, 232, 131, 46, 26, 16, 228, 210, 232, 131, + 46, 26, 16, 230, 145, 46, 26, 16, 254, 100, 46, 26, 16, 234, 195, 46, 26, + 16, 229, 236, 232, 131, 46, 26, 16, 229, 238, 232, 131, 46, 26, 16, 246, + 119, 229, 237, 46, 26, 16, 235, 206, 46, 26, 16, 254, 101, 46, 26, 16, + 221, 68, 232, 131, 46, 26, 16, 246, 219, 46, 26, 16, 222, 225, 232, 131, + 46, 26, 16, 222, 218, 46, 26, 16, 251, 6, 232, 131, 46, 26, 16, 246, 161, + 46, 26, 16, 226, 76, 232, 131, 46, 26, 16, 218, 124, 236, 65, 46, 26, 16, + 221, 65, 46, 26, 16, 228, 211, 46, 26, 16, 221, 69, 46, 26, 16, 221, 66, + 46, 26, 16, 228, 208, 46, 26, 16, 221, 64, 46, 26, 16, 228, 207, 46, 26, + 16, 244, 55, 46, 26, 16, 254, 41, 46, 26, 16, 246, 119, 254, 41, 46, 26, + 16, 230, 61, 232, 131, 46, 26, 16, 222, 16, 246, 127, 46, 26, 16, 222, + 16, 246, 89, 46, 26, 16, 222, 18, 254, 85, 46, 26, 16, 222, 11, 236, 244, + 254, 77, 46, 26, 16, 236, 200, 46, 26, 16, 246, 186, 46, 26, 16, 217, + 253, 236, 197, 46, 26, 16, 217, 253, 254, 109, 46, 26, 16, 223, 150, 46, + 26, 16, 236, 66, 254, 109, 46, 26, 16, 248, 215, 254, 47, 46, 26, 16, + 236, 16, 254, 47, 46, 26, 16, 236, 16, 254, 152, 46, 26, 16, 236, 16, + 232, 131, 46, 26, 16, 254, 84, 232, 131, 46, 26, 16, 254, 86, 46, 26, 16, + 248, 214, 46, 26, 16, 221, 77, 46, 26, 16, 222, 44, 46, 26, 16, 236, 33, + 46, 26, 16, 235, 102, 246, 182, 250, 255, 46, 26, 16, 235, 102, 247, 78, + 251, 0, 46, 26, 16, 235, 102, 221, 79, 251, 0, 46, 26, 16, 235, 102, 222, + 54, 251, 0, 46, 26, 16, 235, 102, 237, 229, 250, 255, 46, 26, 16, 244, + 56, 232, 132, 254, 109, 46, 26, 16, 244, 56, 229, 227, 254, 37, 46, 26, + 16, 244, 56, 229, 227, 249, 40, 46, 26, 16, 248, 238, 46, 26, 16, 248, + 239, 229, 227, 254, 38, 236, 197, 46, 26, 16, 248, 239, 229, 227, 254, + 38, 254, 109, 46, 26, 16, 248, 239, 229, 227, 249, 40, 46, 26, 16, 221, + 83, 46, 26, 16, 254, 42, 46, 26, 16, 237, 236, 46, 26, 16, 249, 3, 46, + 26, 16, 254, 204, 229, 23, 254, 43, 46, 26, 16, 254, 204, 254, 40, 46, + 26, 16, 254, 204, 254, 43, 46, 26, 16, 254, 204, 233, 234, 46, 26, 16, + 254, 204, 233, 242, 46, 26, 16, 254, 204, 244, 57, 46, 26, 16, 254, 204, + 244, 54, 46, 26, 16, 254, 204, 229, 23, 244, 57, 46, 26, 16, 234, 60, + 228, 216, 242, 61, 46, 26, 16, 234, 60, 254, 154, 228, 216, 242, 61, 46, + 26, 16, 234, 60, 249, 39, 242, 61, 46, 26, 16, 234, 60, 254, 154, 249, + 39, 242, 61, 46, 26, 16, 234, 60, 221, 72, 242, 61, 46, 26, 16, 234, 60, + 221, 84, 46, 26, 16, 234, 60, 222, 48, 242, 61, 46, 26, 16, 234, 60, 222, + 48, 235, 105, 242, 61, 46, 26, 16, 234, 60, 235, 105, 242, 61, 46, 26, + 16, 234, 60, 229, 55, 242, 61, 46, 26, 16, 237, 149, 222, 69, 242, 62, + 46, 26, 16, 254, 82, 222, 69, 242, 62, 46, 26, 16, 245, 244, 222, 45, 46, + 26, 16, 245, 244, 233, 126, 46, 26, 16, 245, 244, 248, 243, 46, 26, 16, + 234, 60, 219, 175, 242, 61, 46, 26, 16, 234, 60, 228, 215, 242, 61, 46, + 26, 16, 234, 60, 229, 55, 222, 48, 242, 61, 46, 26, 16, 244, 52, 233, 34, + 254, 85, 46, 26, 16, 244, 52, 233, 34, 248, 213, 46, 26, 16, 246, 195, + 236, 244, 245, 93, 219, 61, 46, 26, 16, 237, 235, 46, 26, 16, 237, 233, + 46, 26, 16, 245, 93, 254, 48, 249, 38, 242, 60, 46, 26, 16, 245, 93, 249, + 1, 187, 46, 26, 16, 245, 93, 249, 1, 232, 217, 46, 26, 16, 245, 93, 232, + 213, 242, 61, 46, 26, 16, 245, 93, 249, 1, 249, 15, 46, 26, 16, 245, 93, + 224, 61, 249, 0, 249, 15, 46, 26, 16, 245, 93, 249, 1, 236, 184, 46, 26, + 16, 245, 93, 249, 1, 217, 21, 46, 26, 16, 245, 93, 249, 1, 232, 63, 236, + 197, 46, 26, 16, 245, 93, 249, 1, 232, 63, 254, 109, 46, 26, 16, 245, 93, + 234, 91, 251, 1, 248, 243, 46, 26, 16, 245, 93, 234, 91, 251, 1, 233, + 126, 46, 26, 16, 245, 204, 224, 61, 251, 1, 219, 174, 46, 26, 16, 245, + 93, 224, 61, 251, 1, 222, 226, 46, 26, 16, 245, 93, 232, 133, 46, 26, 16, + 251, 2, 216, 253, 46, 26, 16, 251, 2, 236, 64, 46, 26, 16, 251, 2, 223, + 250, 46, 26, 16, 245, 93, 242, 107, 217, 252, 222, 49, 46, 26, 16, 245, + 93, 246, 196, 254, 102, 46, 26, 16, 217, 252, 221, 73, 46, 26, 16, 248, + 251, 221, 73, 46, 26, 16, 248, 251, 222, 49, 46, 26, 16, 248, 251, 254, + 87, 247, 78, 248, 161, 46, 26, 16, 248, 251, 233, 124, 222, 53, 248, 161, + 46, 26, 16, 248, 251, 248, 235, 246, 99, 248, 161, 46, 26, 16, 248, 251, + 221, 81, 230, 152, 248, 161, 46, 26, 16, 217, 252, 254, 87, 247, 78, 248, + 161, 46, 26, 16, 217, 252, 233, 124, 222, 53, 248, 161, 46, 26, 16, 217, + 252, 248, 235, 246, 99, 248, 161, 46, 26, 16, 217, 252, 221, 81, 230, + 152, 248, 161, 46, 26, 16, 244, 179, 248, 250, 46, 26, 16, 244, 179, 217, + 251, 46, 26, 16, 249, 2, 254, 87, 233, 169, 46, 26, 16, 249, 2, 254, 87, + 234, 8, 46, 26, 16, 249, 2, 248, 214, 46, 26, 16, 249, 2, 222, 9, 46, 26, + 16, 224, 117, 222, 9, 46, 26, 16, 224, 117, 222, 10, 248, 201, 46, 26, + 16, 224, 117, 222, 10, 221, 74, 46, 26, 16, 224, 117, 222, 10, 222, 42, + 46, 26, 16, 224, 117, 254, 17, 46, 26, 16, 224, 117, 254, 18, 248, 201, + 46, 26, 16, 224, 117, 254, 18, 221, 74, 46, 26, 16, 224, 117, 254, 18, + 222, 42, 46, 26, 16, 248, 236, 244, 161, 46, 26, 16, 248, 242, 230, 86, + 46, 26, 16, 223, 144, 46, 26, 16, 254, 34, 187, 46, 26, 16, 254, 34, 219, + 61, 46, 26, 16, 254, 34, 245, 0, 46, 26, 16, 254, 34, 249, 15, 46, 26, + 16, 254, 34, 236, 184, 46, 26, 16, 254, 34, 217, 21, 46, 26, 16, 254, 34, + 232, 62, 46, 26, 16, 236, 165, 232, 132, 233, 241, 46, 26, 16, 236, 166, + 232, 132, 233, 241, 46, 26, 16, 236, 165, 232, 132, 236, 197, 46, 26, 16, + 236, 166, 232, 132, 236, 197, 46, 26, 16, 236, 66, 236, 197, 46, 26, 16, + 244, 56, 232, 132, 236, 197, 26, 16, 224, 109, 252, 197, 26, 16, 51, 252, + 197, 26, 16, 39, 252, 197, 26, 16, 227, 160, 39, 252, 197, 26, 16, 249, + 145, 252, 197, 26, 16, 224, 192, 252, 197, 26, 16, 42, 227, 182, 55, 26, + 16, 45, 227, 182, 55, 26, 16, 227, 182, 248, 143, 26, 16, 249, 184, 226, + 79, 26, 16, 249, 208, 251, 141, 26, 16, 226, 79, 26, 16, 250, 180, 26, + 16, 227, 180, 245, 193, 26, 16, 227, 180, 245, 192, 26, 16, 227, 180, + 245, 191, 26, 16, 245, 210, 26, 16, 245, 211, 56, 26, 16, 252, 10, 78, + 26, 16, 251, 163, 26, 16, 252, 19, 26, 16, 115, 26, 16, 230, 136, 223, + 163, 26, 16, 220, 205, 223, 163, 26, 16, 221, 227, 223, 163, 26, 16, 245, + 115, 223, 163, 26, 16, 245, 169, 223, 163, 26, 16, 224, 81, 223, 163, 26, + 16, 224, 79, 245, 101, 26, 16, 245, 113, 245, 101, 26, 16, 245, 68, 250, + 207, 26, 16, 245, 68, 250, 208, 230, 88, 254, 145, 26, 16, 245, 68, 250, + 208, 230, 88, 252, 185, 26, 16, 251, 203, 250, 207, 26, 16, 246, 75, 250, + 207, 26, 16, 246, 75, 250, 208, 230, 88, 254, 145, 26, 16, 246, 75, 250, + 208, 230, 88, 252, 185, 26, 16, 247, 116, 250, 206, 26, 16, 247, 116, + 250, 205, 26, 16, 233, 85, 234, 24, 227, 168, 26, 16, 51, 225, 0, 26, 16, + 51, 245, 156, 26, 16, 245, 157, 220, 63, 26, 16, 245, 157, 247, 132, 26, + 16, 232, 205, 220, 63, 26, 16, 232, 205, 247, 132, 26, 16, 225, 1, 220, + 63, 26, 16, 225, 1, 247, 132, 26, 16, 228, 90, 145, 225, 0, 26, 16, 228, + 90, 145, 245, 156, 26, 16, 250, 166, 221, 177, 26, 16, 250, 69, 221, 177, + 26, 16, 230, 88, 254, 145, 26, 16, 230, 88, 252, 185, 26, 16, 228, 74, + 254, 145, 26, 16, 228, 74, 252, 185, 26, 16, 233, 88, 227, 168, 26, 16, + 218, 205, 227, 168, 26, 16, 144, 227, 168, 26, 16, 228, 90, 227, 168, 26, + 16, 246, 232, 227, 168, 26, 16, 224, 76, 227, 168, 26, 16, 221, 243, 227, + 168, 26, 16, 224, 68, 227, 168, 26, 16, 131, 242, 162, 220, 217, 227, + 168, 26, 16, 218, 152, 231, 178, 26, 16, 88, 231, 178, 26, 16, 250, 222, + 218, 152, 231, 178, 26, 16, 40, 231, 179, 218, 207, 26, 16, 40, 231, 179, + 252, 53, 26, 16, 221, 91, 231, 179, 108, 218, 207, 26, 16, 221, 91, 231, + 179, 108, 252, 53, 26, 16, 221, 91, 231, 179, 42, 218, 207, 26, 16, 221, + 91, 231, 179, 42, 252, 53, 26, 16, 221, 91, 231, 179, 45, 218, 207, 26, + 16, 221, 91, 231, 179, 45, 252, 53, 26, 16, 221, 91, 231, 179, 113, 218, + 207, 26, 16, 221, 91, 231, 179, 113, 252, 53, 26, 16, 221, 91, 231, 179, + 108, 45, 218, 207, 26, 16, 221, 91, 231, 179, 108, 45, 252, 53, 26, 16, + 233, 118, 231, 179, 218, 207, 26, 16, 233, 118, 231, 179, 252, 53, 26, + 16, 221, 88, 231, 179, 113, 218, 207, 26, 16, 221, 88, 231, 179, 113, + 252, 53, 26, 16, 229, 230, 231, 178, 26, 16, 219, 67, 231, 178, 26, 16, + 231, 179, 252, 53, 26, 16, 231, 111, 231, 178, 26, 16, 250, 185, 231, + 179, 218, 207, 26, 16, 250, 185, 231, 179, 252, 53, 26, 16, 252, 8, 26, + 16, 218, 205, 231, 180, 26, 16, 144, 231, 180, 26, 16, 228, 90, 231, 180, + 26, 16, 246, 232, 231, 180, 26, 16, 224, 76, 231, 180, 26, 16, 221, 243, + 231, 180, 26, 16, 224, 68, 231, 180, 26, 16, 131, 242, 162, 220, 217, + 231, 180, 26, 16, 36, 223, 146, 26, 16, 36, 223, 233, 223, 146, 26, 16, + 36, 221, 97, 26, 16, 36, 221, 96, 26, 16, 36, 221, 95, 26, 16, 245, 183, + 221, 97, 26, 16, 245, 183, 221, 96, 26, 16, 245, 183, 221, 95, 26, 16, + 36, 253, 230, 248, 145, 26, 16, 36, 245, 162, 26, 16, 36, 245, 161, 26, + 16, 36, 245, 160, 26, 16, 36, 245, 159, 26, 16, 36, 245, 158, 26, 16, + 252, 131, 252, 143, 26, 16, 246, 190, 252, 143, 26, 16, 252, 131, 221, + 200, 26, 16, 246, 190, 221, 200, 26, 16, 252, 131, 224, 44, 26, 16, 246, + 190, 224, 44, 26, 16, 252, 131, 229, 115, 26, 16, 246, 190, 229, 115, 26, + 16, 36, 255, 0, 26, 16, 36, 223, 165, 26, 16, 36, 222, 58, 26, 16, 36, + 223, 166, 26, 16, 36, 234, 71, 26, 16, 36, 234, 70, 26, 16, 36, 254, 255, + 26, 16, 36, 234, 240, 26, 16, 254, 25, 220, 63, 26, 16, 254, 25, 247, + 132, 26, 16, 36, 248, 158, 26, 16, 36, 227, 91, 26, 16, 36, 245, 150, 26, + 16, 36, 224, 40, 26, 16, 36, 252, 113, 26, 16, 36, 51, 221, 124, 26, 16, + 36, 221, 78, 221, 124, 26, 16, 227, 95, 26, 16, 223, 99, 26, 16, 217, + 157, 26, 16, 229, 107, 26, 16, 233, 231, 26, 16, 245, 121, 26, 16, 250, + 106, 26, 16, 249, 83, 26, 16, 244, 47, 231, 181, 224, 55, 26, 16, 244, + 47, 231, 181, 231, 205, 224, 55, 26, 16, 221, 109, 26, 16, 220, 237, 26, + 16, 237, 170, 220, 237, 26, 16, 220, 238, 224, 55, 26, 16, 220, 238, 220, + 63, 26, 16, 230, 99, 223, 119, 26, 16, 230, 99, 223, 116, 26, 16, 230, + 99, 223, 115, 26, 16, 230, 99, 223, 114, 26, 16, 230, 99, 223, 113, 26, + 16, 230, 99, 223, 112, 26, 16, 230, 99, 223, 111, 26, 16, 230, 99, 223, + 110, 26, 16, 230, 99, 223, 109, 26, 16, 230, 99, 223, 118, 26, 16, 230, + 99, 223, 117, 26, 16, 243, 169, 26, 16, 232, 140, 26, 16, 246, 190, 117, + 223, 140, 26, 16, 249, 77, 224, 55, 26, 16, 36, 113, 252, 24, 26, 16, 36, + 108, 252, 24, 26, 16, 36, 243, 178, 26, 16, 36, 224, 34, 229, 59, 26, 16, + 229, 195, 78, 26, 16, 229, 195, 108, 78, 26, 16, 144, 229, 195, 78, 26, + 16, 244, 74, 220, 63, 26, 16, 244, 74, 247, 132, 26, 16, 2, 245, 182, 26, + 16, 249, 168, 26, 16, 249, 169, 254, 157, 26, 16, 234, 46, 26, 16, 234, + 250, 26, 16, 252, 5, 26, 16, 225, 71, 218, 207, 26, 16, 225, 71, 252, 53, + 26, 16, 233, 157, 26, 16, 233, 158, 252, 53, 26, 16, 225, 65, 218, 207, + 26, 16, 225, 65, 252, 53, 26, 16, 245, 82, 218, 207, 26, 16, 245, 82, + 252, 53, 26, 16, 234, 251, 229, 167, 227, 168, 26, 16, 234, 251, 237, + 228, 227, 168, 26, 16, 252, 6, 227, 168, 26, 16, 225, 71, 227, 168, 26, + 16, 233, 158, 227, 168, 26, 16, 225, 65, 227, 168, 26, 16, 222, 67, 229, + 165, 250, 87, 228, 224, 229, 166, 26, 16, 222, 67, 229, 165, 250, 87, + 228, 224, 237, 227, 26, 16, 222, 67, 229, 165, 250, 87, 228, 224, 229, + 167, 248, 224, 26, 16, 222, 67, 237, 226, 250, 87, 228, 224, 229, 166, + 26, 16, 222, 67, 237, 226, 250, 87, 228, 224, 237, 227, 26, 16, 222, 67, + 237, 226, 250, 87, 228, 224, 237, 228, 248, 224, 26, 16, 222, 67, 237, + 226, 250, 87, 228, 224, 237, 228, 248, 223, 26, 16, 222, 67, 237, 226, + 250, 87, 228, 224, 237, 228, 248, 222, 26, 16, 250, 103, 26, 16, 244, 26, + 251, 203, 250, 207, 26, 16, 244, 26, 246, 75, 250, 207, 26, 16, 40, 253, + 204, 26, 16, 219, 81, 26, 16, 229, 35, 26, 16, 250, 200, 26, 16, 226, + 110, 26, 16, 250, 202, 26, 16, 221, 115, 26, 16, 229, 17, 26, 16, 229, + 18, 245, 152, 26, 16, 226, 111, 245, 152, 26, 16, 221, 116, 227, 166, 26, + 16, 229, 154, 223, 95, 23, 219, 71, 165, 223, 18, 23, 219, 71, 165, 223, + 7, 23, 219, 71, 165, 222, 253, 23, 219, 71, 165, 222, 246, 23, 219, 71, + 165, 222, 238, 23, 219, 71, 165, 222, 232, 23, 219, 71, 165, 222, 231, + 23, 219, 71, 165, 222, 230, 23, 219, 71, 165, 222, 229, 23, 219, 71, 165, + 223, 17, 23, 219, 71, 165, 223, 16, 23, 219, 71, 165, 223, 15, 23, 219, + 71, 165, 223, 14, 23, 219, 71, 165, 223, 13, 23, 219, 71, 165, 223, 12, + 23, 219, 71, 165, 223, 11, 23, 219, 71, 165, 223, 10, 23, 219, 71, 165, + 223, 9, 23, 219, 71, 165, 223, 8, 23, 219, 71, 165, 223, 6, 23, 219, 71, + 165, 223, 5, 23, 219, 71, 165, 223, 4, 23, 219, 71, 165, 223, 3, 23, 219, + 71, 165, 223, 2, 23, 219, 71, 165, 222, 237, 23, 219, 71, 165, 222, 236, + 23, 219, 71, 165, 222, 235, 23, 219, 71, 165, 222, 234, 23, 219, 71, 165, + 222, 233, 23, 237, 189, 165, 223, 18, 23, 237, 189, 165, 223, 7, 23, 237, + 189, 165, 222, 246, 23, 237, 189, 165, 222, 238, 23, 237, 189, 165, 222, + 231, 23, 237, 189, 165, 222, 230, 23, 237, 189, 165, 223, 16, 23, 237, + 189, 165, 223, 15, 23, 237, 189, 165, 223, 14, 23, 237, 189, 165, 223, + 13, 23, 237, 189, 165, 223, 10, 23, 237, 189, 165, 223, 9, 23, 237, 189, + 165, 223, 8, 23, 237, 189, 165, 223, 3, 23, 237, 189, 165, 223, 2, 23, + 237, 189, 165, 223, 1, 23, 237, 189, 165, 223, 0, 23, 237, 189, 165, 222, + 255, 23, 237, 189, 165, 222, 254, 23, 237, 189, 165, 222, 252, 23, 237, + 189, 165, 222, 251, 23, 237, 189, 165, 222, 250, 23, 237, 189, 165, 222, + 249, 23, 237, 189, 165, 222, 248, 23, 237, 189, 165, 222, 247, 23, 237, + 189, 165, 222, 245, 23, 237, 189, 165, 222, 244, 23, 237, 189, 165, 222, + 243, 23, 237, 189, 165, 222, 242, 23, 237, 189, 165, 222, 241, 23, 237, + 189, 165, 222, 240, 23, 237, 189, 165, 222, 239, 23, 237, 189, 165, 222, + 237, 23, 237, 189, 165, 222, 236, 23, 237, 189, 165, 222, 235, 23, 237, + 189, 165, 222, 234, 23, 237, 189, 165, 222, 233, 36, 23, 26, 221, 75, 36, + 23, 26, 222, 43, 36, 23, 26, 229, 174, 23, 26, 235, 101, 233, 125, 35, + 247, 8, 248, 237, 35, 243, 150, 247, 8, 248, 237, 35, 242, 165, 247, 8, + 248, 237, 35, 247, 7, 243, 151, 248, 237, 35, 247, 7, 242, 164, 248, 237, + 35, 247, 8, 159, 35, 251, 84, 159, 35, 245, 90, 250, 221, 159, 35, 233, + 150, 159, 35, 252, 192, 159, 35, 236, 181, 224, 43, 159, 35, 250, 133, + 159, 35, 254, 9, 159, 35, 230, 109, 159, 35, 252, 13, 230, 83, 159, 35, + 249, 79, 156, 248, 198, 159, 35, 248, 195, 159, 35, 217, 210, 159, 35, + 237, 217, 159, 35, 229, 180, 159, 35, 227, 215, 159, 35, 250, 143, 159, + 35, 242, 253, 252, 233, 159, 35, 219, 1, 159, 35, 245, 138, 159, 35, 254, + 236, 159, 35, 227, 190, 159, 35, 227, 172, 159, 35, 247, 6, 159, 35, 237, + 45, 159, 35, 250, 138, 159, 35, 246, 189, 159, 35, 247, 87, 159, 35, 251, + 58, 159, 35, 249, 85, 159, 35, 21, 227, 171, 159, 35, 230, 38, 159, 35, + 235, 104, 159, 35, 250, 195, 159, 35, 236, 101, 159, 35, 244, 211, 159, + 35, 223, 126, 159, 35, 228, 189, 159, 35, 245, 89, 159, 35, 227, 173, + 159, 35, 235, 134, 156, 233, 134, 159, 35, 227, 169, 159, 35, 244, 64, + 199, 234, 12, 159, 35, 246, 191, 159, 35, 223, 133, 159, 35, 244, 28, + 159, 35, 246, 184, 159, 35, 229, 210, 159, 35, 227, 85, 159, 35, 245, + 151, 159, 35, 219, 173, 156, 218, 244, 159, 35, 250, 146, 159, 35, 234, + 23, 159, 35, 246, 120, 159, 35, 220, 71, 159, 35, 248, 225, 159, 35, 250, + 197, 233, 105, 159, 35, 244, 13, 159, 35, 244, 212, 237, 223, 159, 35, + 234, 53, 159, 35, 254, 253, 159, 35, 246, 203, 159, 35, 247, 134, 159, + 35, 218, 242, 159, 35, 224, 106, 159, 35, 237, 196, 159, 35, 249, 51, + 159, 35, 249, 150, 159, 35, 248, 221, 159, 35, 246, 93, 159, 35, 225, 37, + 159, 35, 223, 135, 159, 35, 243, 180, 159, 35, 250, 162, 159, 35, 250, + 193, 159, 35, 245, 248, 159, 35, 254, 205, 159, 35, 250, 161, 159, 35, + 230, 139, 222, 23, 219, 155, 159, 35, 248, 245, 159, 35, 235, 180, 159, + 35, 245, 118, 250, 112, 227, 69, 220, 73, 20, 107, 250, 112, 227, 69, + 220, 73, 20, 103, 250, 112, 227, 69, 220, 73, 20, 160, 250, 112, 227, 69, + 220, 73, 20, 154, 250, 112, 227, 69, 220, 73, 20, 174, 250, 112, 227, 69, + 220, 73, 20, 182, 250, 112, 227, 69, 220, 73, 20, 191, 250, 112, 227, 69, + 220, 73, 20, 185, 250, 112, 227, 69, 220, 73, 20, 190, 250, 112, 227, 69, + 222, 63, 20, 107, 250, 112, 227, 69, 222, 63, 20, 103, 250, 112, 227, 69, + 222, 63, 20, 160, 250, 112, 227, 69, 222, 63, 20, 154, 250, 112, 227, 69, + 222, 63, 20, 174, 250, 112, 227, 69, 222, 63, 20, 182, 250, 112, 227, 69, + 222, 63, 20, 191, 250, 112, 227, 69, 222, 63, 20, 185, 250, 112, 227, 69, + 222, 63, 20, 190, 14, 21, 6, 60, 14, 21, 6, 253, 204, 14, 21, 6, 251, + 202, 14, 21, 6, 250, 46, 14, 21, 6, 73, 14, 21, 6, 246, 74, 14, 21, 6, + 245, 67, 14, 21, 6, 243, 225, 14, 21, 6, 72, 14, 21, 6, 237, 126, 14, 21, + 6, 237, 17, 14, 21, 6, 153, 14, 21, 6, 189, 14, 21, 6, 207, 14, 21, 6, + 74, 14, 21, 6, 230, 59, 14, 21, 6, 228, 163, 14, 21, 6, 152, 14, 21, 6, + 198, 14, 21, 6, 222, 201, 14, 21, 6, 68, 14, 21, 6, 216, 216, 14, 21, 6, + 219, 40, 14, 21, 6, 218, 151, 14, 21, 6, 218, 90, 14, 21, 6, 217, 157, + 14, 21, 3, 60, 14, 21, 3, 253, 204, 14, 21, 3, 251, 202, 14, 21, 3, 250, + 46, 14, 21, 3, 73, 14, 21, 3, 246, 74, 14, 21, 3, 245, 67, 14, 21, 3, + 243, 225, 14, 21, 3, 72, 14, 21, 3, 237, 126, 14, 21, 3, 237, 17, 14, 21, + 3, 153, 14, 21, 3, 189, 14, 21, 3, 207, 14, 21, 3, 74, 14, 21, 3, 230, + 59, 14, 21, 3, 228, 163, 14, 21, 3, 152, 14, 21, 3, 198, 14, 21, 3, 222, + 201, 14, 21, 3, 68, 14, 21, 3, 216, 216, 14, 21, 3, 219, 40, 14, 21, 3, + 218, 151, 14, 21, 3, 218, 90, 14, 21, 3, 217, 157, 14, 30, 6, 60, 14, 30, + 6, 253, 204, 14, 30, 6, 251, 202, 14, 30, 6, 250, 46, 14, 30, 6, 73, 14, + 30, 6, 246, 74, 14, 30, 6, 245, 67, 14, 30, 6, 243, 225, 14, 30, 6, 72, + 14, 30, 6, 237, 126, 14, 30, 6, 237, 17, 14, 30, 6, 153, 14, 30, 6, 189, + 14, 30, 6, 207, 14, 30, 6, 74, 14, 30, 6, 230, 59, 14, 30, 6, 228, 163, + 14, 30, 6, 152, 14, 30, 6, 198, 14, 30, 6, 222, 201, 14, 30, 6, 68, 14, + 30, 6, 216, 216, 14, 30, 6, 219, 40, 14, 30, 6, 218, 151, 14, 30, 6, 218, + 90, 14, 30, 6, 217, 157, 14, 30, 3, 60, 14, 30, 3, 253, 204, 14, 30, 3, + 251, 202, 14, 30, 3, 250, 46, 14, 30, 3, 73, 14, 30, 3, 246, 74, 14, 30, + 3, 245, 67, 14, 30, 3, 72, 14, 30, 3, 237, 126, 14, 30, 3, 237, 17, 14, + 30, 3, 153, 14, 30, 3, 189, 14, 30, 3, 207, 14, 30, 3, 74, 14, 30, 3, + 230, 59, 14, 30, 3, 228, 163, 14, 30, 3, 152, 14, 30, 3, 198, 14, 30, 3, + 222, 201, 14, 30, 3, 68, 14, 30, 3, 216, 216, 14, 30, 3, 219, 40, 14, 30, + 3, 218, 151, 14, 30, 3, 218, 90, 14, 30, 3, 217, 157, 14, 21, 30, 6, 60, + 14, 21, 30, 6, 253, 204, 14, 21, 30, 6, 251, 202, 14, 21, 30, 6, 250, 46, + 14, 21, 30, 6, 73, 14, 21, 30, 6, 246, 74, 14, 21, 30, 6, 245, 67, 14, + 21, 30, 6, 243, 225, 14, 21, 30, 6, 72, 14, 21, 30, 6, 237, 126, 14, 21, + 30, 6, 237, 17, 14, 21, 30, 6, 153, 14, 21, 30, 6, 189, 14, 21, 30, 6, + 207, 14, 21, 30, 6, 74, 14, 21, 30, 6, 230, 59, 14, 21, 30, 6, 228, 163, + 14, 21, 30, 6, 152, 14, 21, 30, 6, 198, 14, 21, 30, 6, 222, 201, 14, 21, + 30, 6, 68, 14, 21, 30, 6, 216, 216, 14, 21, 30, 6, 219, 40, 14, 21, 30, + 6, 218, 151, 14, 21, 30, 6, 218, 90, 14, 21, 30, 6, 217, 157, 14, 21, 30, + 3, 60, 14, 21, 30, 3, 253, 204, 14, 21, 30, 3, 251, 202, 14, 21, 30, 3, + 250, 46, 14, 21, 30, 3, 73, 14, 21, 30, 3, 246, 74, 14, 21, 30, 3, 245, + 67, 14, 21, 30, 3, 243, 225, 14, 21, 30, 3, 72, 14, 21, 30, 3, 237, 126, + 14, 21, 30, 3, 237, 17, 14, 21, 30, 3, 153, 14, 21, 30, 3, 189, 14, 21, + 30, 3, 207, 14, 21, 30, 3, 74, 14, 21, 30, 3, 230, 59, 14, 21, 30, 3, + 228, 163, 14, 21, 30, 3, 152, 14, 21, 30, 3, 198, 14, 21, 30, 3, 222, + 201, 14, 21, 30, 3, 68, 14, 21, 30, 3, 216, 216, 14, 21, 30, 3, 219, 40, + 14, 21, 30, 3, 218, 151, 14, 21, 30, 3, 218, 90, 14, 21, 30, 3, 217, 157, + 14, 102, 6, 60, 14, 102, 6, 251, 202, 14, 102, 6, 250, 46, 14, 102, 6, + 245, 67, 14, 102, 6, 237, 126, 14, 102, 6, 237, 17, 14, 102, 6, 207, 14, + 102, 6, 74, 14, 102, 6, 230, 59, 14, 102, 6, 228, 163, 14, 102, 6, 198, + 14, 102, 6, 222, 201, 14, 102, 6, 68, 14, 102, 6, 216, 216, 14, 102, 6, + 219, 40, 14, 102, 6, 218, 151, 14, 102, 6, 218, 90, 14, 102, 6, 217, 157, + 14, 102, 3, 60, 14, 102, 3, 253, 204, 14, 102, 3, 251, 202, 14, 102, 3, + 250, 46, 14, 102, 3, 246, 74, 14, 102, 3, 243, 225, 14, 102, 3, 72, 14, + 102, 3, 237, 126, 14, 102, 3, 237, 17, 14, 102, 3, 153, 14, 102, 3, 189, + 14, 102, 3, 207, 14, 102, 3, 230, 59, 14, 102, 3, 228, 163, 14, 102, 3, + 152, 14, 102, 3, 198, 14, 102, 3, 222, 201, 14, 102, 3, 68, 14, 102, 3, + 216, 216, 14, 102, 3, 219, 40, 14, 102, 3, 218, 151, 14, 102, 3, 218, 90, + 14, 102, 3, 217, 157, 14, 21, 102, 6, 60, 14, 21, 102, 6, 253, 204, 14, + 21, 102, 6, 251, 202, 14, 21, 102, 6, 250, 46, 14, 21, 102, 6, 73, 14, + 21, 102, 6, 246, 74, 14, 21, 102, 6, 245, 67, 14, 21, 102, 6, 243, 225, + 14, 21, 102, 6, 72, 14, 21, 102, 6, 237, 126, 14, 21, 102, 6, 237, 17, + 14, 21, 102, 6, 153, 14, 21, 102, 6, 189, 14, 21, 102, 6, 207, 14, 21, + 102, 6, 74, 14, 21, 102, 6, 230, 59, 14, 21, 102, 6, 228, 163, 14, 21, + 102, 6, 152, 14, 21, 102, 6, 198, 14, 21, 102, 6, 222, 201, 14, 21, 102, + 6, 68, 14, 21, 102, 6, 216, 216, 14, 21, 102, 6, 219, 40, 14, 21, 102, 6, + 218, 151, 14, 21, 102, 6, 218, 90, 14, 21, 102, 6, 217, 157, 14, 21, 102, + 3, 60, 14, 21, 102, 3, 253, 204, 14, 21, 102, 3, 251, 202, 14, 21, 102, + 3, 250, 46, 14, 21, 102, 3, 73, 14, 21, 102, 3, 246, 74, 14, 21, 102, 3, + 245, 67, 14, 21, 102, 3, 243, 225, 14, 21, 102, 3, 72, 14, 21, 102, 3, + 237, 126, 14, 21, 102, 3, 237, 17, 14, 21, 102, 3, 153, 14, 21, 102, 3, + 189, 14, 21, 102, 3, 207, 14, 21, 102, 3, 74, 14, 21, 102, 3, 230, 59, + 14, 21, 102, 3, 228, 163, 14, 21, 102, 3, 152, 14, 21, 102, 3, 198, 14, + 21, 102, 3, 222, 201, 14, 21, 102, 3, 68, 14, 21, 102, 3, 216, 216, 14, + 21, 102, 3, 219, 40, 14, 21, 102, 3, 218, 151, 14, 21, 102, 3, 218, 90, + 14, 21, 102, 3, 217, 157, 14, 121, 6, 60, 14, 121, 6, 253, 204, 14, 121, + 6, 250, 46, 14, 121, 6, 73, 14, 121, 6, 246, 74, 14, 121, 6, 245, 67, 14, + 121, 6, 237, 126, 14, 121, 6, 237, 17, 14, 121, 6, 153, 14, 121, 6, 189, + 14, 121, 6, 207, 14, 121, 6, 74, 14, 121, 6, 230, 59, 14, 121, 6, 228, + 163, 14, 121, 6, 198, 14, 121, 6, 222, 201, 14, 121, 6, 68, 14, 121, 6, + 216, 216, 14, 121, 6, 219, 40, 14, 121, 6, 218, 151, 14, 121, 6, 218, 90, + 14, 121, 3, 60, 14, 121, 3, 253, 204, 14, 121, 3, 251, 202, 14, 121, 3, + 250, 46, 14, 121, 3, 73, 14, 121, 3, 246, 74, 14, 121, 3, 245, 67, 14, + 121, 3, 243, 225, 14, 121, 3, 72, 14, 121, 3, 237, 126, 14, 121, 3, 237, + 17, 14, 121, 3, 153, 14, 121, 3, 189, 14, 121, 3, 207, 14, 121, 3, 74, + 14, 121, 3, 230, 59, 14, 121, 3, 228, 163, 14, 121, 3, 152, 14, 121, 3, + 198, 14, 121, 3, 222, 201, 14, 121, 3, 68, 14, 121, 3, 216, 216, 14, 121, + 3, 219, 40, 14, 121, 3, 218, 151, 14, 121, 3, 218, 90, 14, 121, 3, 217, + 157, 14, 173, 6, 60, 14, 173, 6, 253, 204, 14, 173, 6, 250, 46, 14, 173, + 6, 73, 14, 173, 6, 246, 74, 14, 173, 6, 245, 67, 14, 173, 6, 72, 14, 173, + 6, 237, 126, 14, 173, 6, 237, 17, 14, 173, 6, 153, 14, 173, 6, 189, 14, + 173, 6, 74, 14, 173, 6, 198, 14, 173, 6, 222, 201, 14, 173, 6, 68, 14, + 173, 6, 216, 216, 14, 173, 6, 219, 40, 14, 173, 6, 218, 151, 14, 173, 6, + 218, 90, 14, 173, 3, 60, 14, 173, 3, 253, 204, 14, 173, 3, 251, 202, 14, + 173, 3, 250, 46, 14, 173, 3, 73, 14, 173, 3, 246, 74, 14, 173, 3, 245, + 67, 14, 173, 3, 243, 225, 14, 173, 3, 72, 14, 173, 3, 237, 126, 14, 173, + 3, 237, 17, 14, 173, 3, 153, 14, 173, 3, 189, 14, 173, 3, 207, 14, 173, + 3, 74, 14, 173, 3, 230, 59, 14, 173, 3, 228, 163, 14, 173, 3, 152, 14, + 173, 3, 198, 14, 173, 3, 222, 201, 14, 173, 3, 68, 14, 173, 3, 216, 216, + 14, 173, 3, 219, 40, 14, 173, 3, 218, 151, 14, 173, 3, 218, 90, 14, 173, + 3, 217, 157, 14, 21, 121, 6, 60, 14, 21, 121, 6, 253, 204, 14, 21, 121, + 6, 251, 202, 14, 21, 121, 6, 250, 46, 14, 21, 121, 6, 73, 14, 21, 121, 6, + 246, 74, 14, 21, 121, 6, 245, 67, 14, 21, 121, 6, 243, 225, 14, 21, 121, + 6, 72, 14, 21, 121, 6, 237, 126, 14, 21, 121, 6, 237, 17, 14, 21, 121, 6, + 153, 14, 21, 121, 6, 189, 14, 21, 121, 6, 207, 14, 21, 121, 6, 74, 14, + 21, 121, 6, 230, 59, 14, 21, 121, 6, 228, 163, 14, 21, 121, 6, 152, 14, + 21, 121, 6, 198, 14, 21, 121, 6, 222, 201, 14, 21, 121, 6, 68, 14, 21, + 121, 6, 216, 216, 14, 21, 121, 6, 219, 40, 14, 21, 121, 6, 218, 151, 14, + 21, 121, 6, 218, 90, 14, 21, 121, 6, 217, 157, 14, 21, 121, 3, 60, 14, + 21, 121, 3, 253, 204, 14, 21, 121, 3, 251, 202, 14, 21, 121, 3, 250, 46, + 14, 21, 121, 3, 73, 14, 21, 121, 3, 246, 74, 14, 21, 121, 3, 245, 67, 14, + 21, 121, 3, 243, 225, 14, 21, 121, 3, 72, 14, 21, 121, 3, 237, 126, 14, + 21, 121, 3, 237, 17, 14, 21, 121, 3, 153, 14, 21, 121, 3, 189, 14, 21, + 121, 3, 207, 14, 21, 121, 3, 74, 14, 21, 121, 3, 230, 59, 14, 21, 121, 3, + 228, 163, 14, 21, 121, 3, 152, 14, 21, 121, 3, 198, 14, 21, 121, 3, 222, + 201, 14, 21, 121, 3, 68, 14, 21, 121, 3, 216, 216, 14, 21, 121, 3, 219, + 40, 14, 21, 121, 3, 218, 151, 14, 21, 121, 3, 218, 90, 14, 21, 121, 3, + 217, 157, 14, 33, 6, 60, 14, 33, 6, 253, 204, 14, 33, 6, 251, 202, 14, + 33, 6, 250, 46, 14, 33, 6, 73, 14, 33, 6, 246, 74, 14, 33, 6, 245, 67, + 14, 33, 6, 243, 225, 14, 33, 6, 72, 14, 33, 6, 237, 126, 14, 33, 6, 237, + 17, 14, 33, 6, 153, 14, 33, 6, 189, 14, 33, 6, 207, 14, 33, 6, 74, 14, + 33, 6, 230, 59, 14, 33, 6, 228, 163, 14, 33, 6, 152, 14, 33, 6, 198, 14, + 33, 6, 222, 201, 14, 33, 6, 68, 14, 33, 6, 216, 216, 14, 33, 6, 219, 40, + 14, 33, 6, 218, 151, 14, 33, 6, 218, 90, 14, 33, 6, 217, 157, 14, 33, 3, + 60, 14, 33, 3, 253, 204, 14, 33, 3, 251, 202, 14, 33, 3, 250, 46, 14, 33, + 3, 73, 14, 33, 3, 246, 74, 14, 33, 3, 245, 67, 14, 33, 3, 243, 225, 14, + 33, 3, 72, 14, 33, 3, 237, 126, 14, 33, 3, 237, 17, 14, 33, 3, 153, 14, + 33, 3, 189, 14, 33, 3, 207, 14, 33, 3, 74, 14, 33, 3, 230, 59, 14, 33, 3, + 228, 163, 14, 33, 3, 152, 14, 33, 3, 198, 14, 33, 3, 222, 201, 14, 33, 3, + 68, 14, 33, 3, 216, 216, 14, 33, 3, 219, 40, 14, 33, 3, 218, 151, 14, 33, + 3, 218, 90, 14, 33, 3, 217, 157, 14, 33, 21, 6, 60, 14, 33, 21, 6, 253, + 204, 14, 33, 21, 6, 251, 202, 14, 33, 21, 6, 250, 46, 14, 33, 21, 6, 73, + 14, 33, 21, 6, 246, 74, 14, 33, 21, 6, 245, 67, 14, 33, 21, 6, 243, 225, + 14, 33, 21, 6, 72, 14, 33, 21, 6, 237, 126, 14, 33, 21, 6, 237, 17, 14, + 33, 21, 6, 153, 14, 33, 21, 6, 189, 14, 33, 21, 6, 207, 14, 33, 21, 6, + 74, 14, 33, 21, 6, 230, 59, 14, 33, 21, 6, 228, 163, 14, 33, 21, 6, 152, + 14, 33, 21, 6, 198, 14, 33, 21, 6, 222, 201, 14, 33, 21, 6, 68, 14, 33, + 21, 6, 216, 216, 14, 33, 21, 6, 219, 40, 14, 33, 21, 6, 218, 151, 14, 33, + 21, 6, 218, 90, 14, 33, 21, 6, 217, 157, 14, 33, 21, 3, 60, 14, 33, 21, + 3, 253, 204, 14, 33, 21, 3, 251, 202, 14, 33, 21, 3, 250, 46, 14, 33, 21, + 3, 73, 14, 33, 21, 3, 246, 74, 14, 33, 21, 3, 245, 67, 14, 33, 21, 3, + 243, 225, 14, 33, 21, 3, 72, 14, 33, 21, 3, 237, 126, 14, 33, 21, 3, 237, + 17, 14, 33, 21, 3, 153, 14, 33, 21, 3, 189, 14, 33, 21, 3, 207, 14, 33, + 21, 3, 74, 14, 33, 21, 3, 230, 59, 14, 33, 21, 3, 228, 163, 14, 33, 21, + 3, 152, 14, 33, 21, 3, 198, 14, 33, 21, 3, 222, 201, 14, 33, 21, 3, 68, + 14, 33, 21, 3, 216, 216, 14, 33, 21, 3, 219, 40, 14, 33, 21, 3, 218, 151, + 14, 33, 21, 3, 218, 90, 14, 33, 21, 3, 217, 157, 14, 33, 30, 6, 60, 14, + 33, 30, 6, 253, 204, 14, 33, 30, 6, 251, 202, 14, 33, 30, 6, 250, 46, 14, + 33, 30, 6, 73, 14, 33, 30, 6, 246, 74, 14, 33, 30, 6, 245, 67, 14, 33, + 30, 6, 243, 225, 14, 33, 30, 6, 72, 14, 33, 30, 6, 237, 126, 14, 33, 30, + 6, 237, 17, 14, 33, 30, 6, 153, 14, 33, 30, 6, 189, 14, 33, 30, 6, 207, + 14, 33, 30, 6, 74, 14, 33, 30, 6, 230, 59, 14, 33, 30, 6, 228, 163, 14, + 33, 30, 6, 152, 14, 33, 30, 6, 198, 14, 33, 30, 6, 222, 201, 14, 33, 30, + 6, 68, 14, 33, 30, 6, 216, 216, 14, 33, 30, 6, 219, 40, 14, 33, 30, 6, + 218, 151, 14, 33, 30, 6, 218, 90, 14, 33, 30, 6, 217, 157, 14, 33, 30, 3, + 60, 14, 33, 30, 3, 253, 204, 14, 33, 30, 3, 251, 202, 14, 33, 30, 3, 250, + 46, 14, 33, 30, 3, 73, 14, 33, 30, 3, 246, 74, 14, 33, 30, 3, 245, 67, + 14, 33, 30, 3, 243, 225, 14, 33, 30, 3, 72, 14, 33, 30, 3, 237, 126, 14, + 33, 30, 3, 237, 17, 14, 33, 30, 3, 153, 14, 33, 30, 3, 189, 14, 33, 30, + 3, 207, 14, 33, 30, 3, 74, 14, 33, 30, 3, 230, 59, 14, 33, 30, 3, 228, + 163, 14, 33, 30, 3, 152, 14, 33, 30, 3, 198, 14, 33, 30, 3, 222, 201, 14, + 33, 30, 3, 68, 14, 33, 30, 3, 216, 216, 14, 33, 30, 3, 219, 40, 14, 33, + 30, 3, 218, 151, 14, 33, 30, 3, 218, 90, 14, 33, 30, 3, 217, 157, 14, 33, + 21, 30, 6, 60, 14, 33, 21, 30, 6, 253, 204, 14, 33, 21, 30, 6, 251, 202, + 14, 33, 21, 30, 6, 250, 46, 14, 33, 21, 30, 6, 73, 14, 33, 21, 30, 6, + 246, 74, 14, 33, 21, 30, 6, 245, 67, 14, 33, 21, 30, 6, 243, 225, 14, 33, + 21, 30, 6, 72, 14, 33, 21, 30, 6, 237, 126, 14, 33, 21, 30, 6, 237, 17, + 14, 33, 21, 30, 6, 153, 14, 33, 21, 30, 6, 189, 14, 33, 21, 30, 6, 207, + 14, 33, 21, 30, 6, 74, 14, 33, 21, 30, 6, 230, 59, 14, 33, 21, 30, 6, + 228, 163, 14, 33, 21, 30, 6, 152, 14, 33, 21, 30, 6, 198, 14, 33, 21, 30, + 6, 222, 201, 14, 33, 21, 30, 6, 68, 14, 33, 21, 30, 6, 216, 216, 14, 33, + 21, 30, 6, 219, 40, 14, 33, 21, 30, 6, 218, 151, 14, 33, 21, 30, 6, 218, + 90, 14, 33, 21, 30, 6, 217, 157, 14, 33, 21, 30, 3, 60, 14, 33, 21, 30, + 3, 253, 204, 14, 33, 21, 30, 3, 251, 202, 14, 33, 21, 30, 3, 250, 46, 14, + 33, 21, 30, 3, 73, 14, 33, 21, 30, 3, 246, 74, 14, 33, 21, 30, 3, 245, + 67, 14, 33, 21, 30, 3, 243, 225, 14, 33, 21, 30, 3, 72, 14, 33, 21, 30, + 3, 237, 126, 14, 33, 21, 30, 3, 237, 17, 14, 33, 21, 30, 3, 153, 14, 33, + 21, 30, 3, 189, 14, 33, 21, 30, 3, 207, 14, 33, 21, 30, 3, 74, 14, 33, + 21, 30, 3, 230, 59, 14, 33, 21, 30, 3, 228, 163, 14, 33, 21, 30, 3, 152, + 14, 33, 21, 30, 3, 198, 14, 33, 21, 30, 3, 222, 201, 14, 33, 21, 30, 3, + 68, 14, 33, 21, 30, 3, 216, 216, 14, 33, 21, 30, 3, 219, 40, 14, 33, 21, + 30, 3, 218, 151, 14, 33, 21, 30, 3, 218, 90, 14, 33, 21, 30, 3, 217, 157, + 14, 211, 6, 60, 14, 211, 6, 253, 204, 14, 211, 6, 251, 202, 14, 211, 6, + 250, 46, 14, 211, 6, 73, 14, 211, 6, 246, 74, 14, 211, 6, 245, 67, 14, + 211, 6, 243, 225, 14, 211, 6, 72, 14, 211, 6, 237, 126, 14, 211, 6, 237, + 17, 14, 211, 6, 153, 14, 211, 6, 189, 14, 211, 6, 207, 14, 211, 6, 74, + 14, 211, 6, 230, 59, 14, 211, 6, 228, 163, 14, 211, 6, 152, 14, 211, 6, + 198, 14, 211, 6, 222, 201, 14, 211, 6, 68, 14, 211, 6, 216, 216, 14, 211, + 6, 219, 40, 14, 211, 6, 218, 151, 14, 211, 6, 218, 90, 14, 211, 6, 217, + 157, 14, 211, 3, 60, 14, 211, 3, 253, 204, 14, 211, 3, 251, 202, 14, 211, + 3, 250, 46, 14, 211, 3, 73, 14, 211, 3, 246, 74, 14, 211, 3, 245, 67, 14, + 211, 3, 243, 225, 14, 211, 3, 72, 14, 211, 3, 237, 126, 14, 211, 3, 237, + 17, 14, 211, 3, 153, 14, 211, 3, 189, 14, 211, 3, 207, 14, 211, 3, 74, + 14, 211, 3, 230, 59, 14, 211, 3, 228, 163, 14, 211, 3, 152, 14, 211, 3, + 198, 14, 211, 3, 222, 201, 14, 211, 3, 68, 14, 211, 3, 216, 216, 14, 211, + 3, 219, 40, 14, 211, 3, 218, 151, 14, 211, 3, 218, 90, 14, 211, 3, 217, + 157, 14, 30, 3, 248, 144, 72, 14, 30, 3, 248, 144, 237, 126, 14, 21, 6, + 254, 146, 14, 21, 6, 252, 102, 14, 21, 6, 244, 231, 14, 21, 6, 249, 62, + 14, 21, 6, 246, 156, 14, 21, 6, 217, 83, 14, 21, 6, 246, 121, 14, 21, 6, + 222, 6, 14, 21, 6, 237, 162, 14, 21, 6, 236, 221, 14, 21, 6, 235, 156, + 14, 21, 6, 233, 99, 14, 21, 6, 231, 144, 14, 21, 6, 218, 130, 14, 21, 6, + 230, 141, 14, 21, 6, 229, 108, 14, 21, 6, 227, 149, 14, 21, 6, 222, 7, + 100, 14, 21, 6, 224, 127, 14, 21, 6, 222, 105, 14, 21, 6, 220, 57, 14, + 21, 6, 229, 129, 14, 21, 6, 251, 31, 14, 21, 6, 228, 212, 14, 21, 6, 230, + 143, 14, 21, 232, 231, 14, 21, 3, 254, 146, 14, 21, 3, 252, 102, 14, 21, + 3, 244, 231, 14, 21, 3, 249, 62, 14, 21, 3, 246, 156, 14, 21, 3, 217, 83, + 14, 21, 3, 246, 121, 14, 21, 3, 222, 6, 14, 21, 3, 237, 162, 14, 21, 3, + 236, 221, 14, 21, 3, 235, 156, 14, 21, 3, 233, 99, 14, 21, 3, 231, 144, + 14, 21, 3, 218, 130, 14, 21, 3, 230, 141, 14, 21, 3, 229, 108, 14, 21, 3, + 227, 149, 14, 21, 3, 39, 224, 127, 14, 21, 3, 224, 127, 14, 21, 3, 222, + 105, 14, 21, 3, 220, 57, 14, 21, 3, 229, 129, 14, 21, 3, 251, 31, 14, 21, + 3, 228, 212, 14, 21, 3, 230, 143, 14, 21, 229, 223, 248, 246, 14, 21, + 246, 157, 100, 14, 21, 222, 7, 100, 14, 21, 236, 222, 100, 14, 21, 229, + 130, 100, 14, 21, 227, 150, 100, 14, 21, 229, 109, 100, 14, 30, 6, 254, + 146, 14, 30, 6, 252, 102, 14, 30, 6, 244, 231, 14, 30, 6, 249, 62, 14, + 30, 6, 246, 156, 14, 30, 6, 217, 83, 14, 30, 6, 246, 121, 14, 30, 6, 222, + 6, 14, 30, 6, 237, 162, 14, 30, 6, 236, 221, 14, 30, 6, 235, 156, 14, 30, + 6, 233, 99, 14, 30, 6, 231, 144, 14, 30, 6, 218, 130, 14, 30, 6, 230, + 141, 14, 30, 6, 229, 108, 14, 30, 6, 227, 149, 14, 30, 6, 222, 7, 100, + 14, 30, 6, 224, 127, 14, 30, 6, 222, 105, 14, 30, 6, 220, 57, 14, 30, 6, + 229, 129, 14, 30, 6, 251, 31, 14, 30, 6, 228, 212, 14, 30, 6, 230, 143, + 14, 30, 232, 231, 14, 30, 3, 254, 146, 14, 30, 3, 252, 102, 14, 30, 3, + 244, 231, 14, 30, 3, 249, 62, 14, 30, 3, 246, 156, 14, 30, 3, 217, 83, + 14, 30, 3, 246, 121, 14, 30, 3, 222, 6, 14, 30, 3, 237, 162, 14, 30, 3, + 236, 221, 14, 30, 3, 235, 156, 14, 30, 3, 233, 99, 14, 30, 3, 231, 144, + 14, 30, 3, 218, 130, 14, 30, 3, 230, 141, 14, 30, 3, 229, 108, 14, 30, 3, + 227, 149, 14, 30, 3, 39, 224, 127, 14, 30, 3, 224, 127, 14, 30, 3, 222, + 105, 14, 30, 3, 220, 57, 14, 30, 3, 229, 129, 14, 30, 3, 251, 31, 14, 30, + 3, 228, 212, 14, 30, 3, 230, 143, 14, 30, 229, 223, 248, 246, 14, 30, + 246, 157, 100, 14, 30, 222, 7, 100, 14, 30, 236, 222, 100, 14, 30, 229, + 130, 100, 14, 30, 227, 150, 100, 14, 30, 229, 109, 100, 14, 21, 30, 6, + 254, 146, 14, 21, 30, 6, 252, 102, 14, 21, 30, 6, 244, 231, 14, 21, 30, + 6, 249, 62, 14, 21, 30, 6, 246, 156, 14, 21, 30, 6, 217, 83, 14, 21, 30, + 6, 246, 121, 14, 21, 30, 6, 222, 6, 14, 21, 30, 6, 237, 162, 14, 21, 30, + 6, 236, 221, 14, 21, 30, 6, 235, 156, 14, 21, 30, 6, 233, 99, 14, 21, 30, + 6, 231, 144, 14, 21, 30, 6, 218, 130, 14, 21, 30, 6, 230, 141, 14, 21, + 30, 6, 229, 108, 14, 21, 30, 6, 227, 149, 14, 21, 30, 6, 222, 7, 100, 14, + 21, 30, 6, 224, 127, 14, 21, 30, 6, 222, 105, 14, 21, 30, 6, 220, 57, 14, + 21, 30, 6, 229, 129, 14, 21, 30, 6, 251, 31, 14, 21, 30, 6, 228, 212, 14, + 21, 30, 6, 230, 143, 14, 21, 30, 232, 231, 14, 21, 30, 3, 254, 146, 14, + 21, 30, 3, 252, 102, 14, 21, 30, 3, 244, 231, 14, 21, 30, 3, 249, 62, 14, + 21, 30, 3, 246, 156, 14, 21, 30, 3, 217, 83, 14, 21, 30, 3, 246, 121, 14, + 21, 30, 3, 222, 6, 14, 21, 30, 3, 237, 162, 14, 21, 30, 3, 236, 221, 14, + 21, 30, 3, 235, 156, 14, 21, 30, 3, 233, 99, 14, 21, 30, 3, 231, 144, 14, + 21, 30, 3, 218, 130, 14, 21, 30, 3, 230, 141, 14, 21, 30, 3, 229, 108, + 14, 21, 30, 3, 227, 149, 14, 21, 30, 3, 39, 224, 127, 14, 21, 30, 3, 224, + 127, 14, 21, 30, 3, 222, 105, 14, 21, 30, 3, 220, 57, 14, 21, 30, 3, 229, + 129, 14, 21, 30, 3, 251, 31, 14, 21, 30, 3, 228, 212, 14, 21, 30, 3, 230, + 143, 14, 21, 30, 229, 223, 248, 246, 14, 21, 30, 246, 157, 100, 14, 21, + 30, 222, 7, 100, 14, 21, 30, 236, 222, 100, 14, 21, 30, 229, 130, 100, + 14, 21, 30, 227, 150, 100, 14, 21, 30, 229, 109, 100, 14, 33, 21, 6, 254, + 146, 14, 33, 21, 6, 252, 102, 14, 33, 21, 6, 244, 231, 14, 33, 21, 6, + 249, 62, 14, 33, 21, 6, 246, 156, 14, 33, 21, 6, 217, 83, 14, 33, 21, 6, + 246, 121, 14, 33, 21, 6, 222, 6, 14, 33, 21, 6, 237, 162, 14, 33, 21, 6, + 236, 221, 14, 33, 21, 6, 235, 156, 14, 33, 21, 6, 233, 99, 14, 33, 21, 6, + 231, 144, 14, 33, 21, 6, 218, 130, 14, 33, 21, 6, 230, 141, 14, 33, 21, + 6, 229, 108, 14, 33, 21, 6, 227, 149, 14, 33, 21, 6, 222, 7, 100, 14, 33, + 21, 6, 224, 127, 14, 33, 21, 6, 222, 105, 14, 33, 21, 6, 220, 57, 14, 33, + 21, 6, 229, 129, 14, 33, 21, 6, 251, 31, 14, 33, 21, 6, 228, 212, 14, 33, + 21, 6, 230, 143, 14, 33, 21, 232, 231, 14, 33, 21, 3, 254, 146, 14, 33, + 21, 3, 252, 102, 14, 33, 21, 3, 244, 231, 14, 33, 21, 3, 249, 62, 14, 33, + 21, 3, 246, 156, 14, 33, 21, 3, 217, 83, 14, 33, 21, 3, 246, 121, 14, 33, + 21, 3, 222, 6, 14, 33, 21, 3, 237, 162, 14, 33, 21, 3, 236, 221, 14, 33, + 21, 3, 235, 156, 14, 33, 21, 3, 233, 99, 14, 33, 21, 3, 231, 144, 14, 33, + 21, 3, 218, 130, 14, 33, 21, 3, 230, 141, 14, 33, 21, 3, 229, 108, 14, + 33, 21, 3, 227, 149, 14, 33, 21, 3, 39, 224, 127, 14, 33, 21, 3, 224, + 127, 14, 33, 21, 3, 222, 105, 14, 33, 21, 3, 220, 57, 14, 33, 21, 3, 229, + 129, 14, 33, 21, 3, 251, 31, 14, 33, 21, 3, 228, 212, 14, 33, 21, 3, 230, + 143, 14, 33, 21, 229, 223, 248, 246, 14, 33, 21, 246, 157, 100, 14, 33, + 21, 222, 7, 100, 14, 33, 21, 236, 222, 100, 14, 33, 21, 229, 130, 100, + 14, 33, 21, 227, 150, 100, 14, 33, 21, 229, 109, 100, 14, 33, 21, 30, 6, + 254, 146, 14, 33, 21, 30, 6, 252, 102, 14, 33, 21, 30, 6, 244, 231, 14, + 33, 21, 30, 6, 249, 62, 14, 33, 21, 30, 6, 246, 156, 14, 33, 21, 30, 6, + 217, 83, 14, 33, 21, 30, 6, 246, 121, 14, 33, 21, 30, 6, 222, 6, 14, 33, + 21, 30, 6, 237, 162, 14, 33, 21, 30, 6, 236, 221, 14, 33, 21, 30, 6, 235, + 156, 14, 33, 21, 30, 6, 233, 99, 14, 33, 21, 30, 6, 231, 144, 14, 33, 21, + 30, 6, 218, 130, 14, 33, 21, 30, 6, 230, 141, 14, 33, 21, 30, 6, 229, + 108, 14, 33, 21, 30, 6, 227, 149, 14, 33, 21, 30, 6, 222, 7, 100, 14, 33, + 21, 30, 6, 224, 127, 14, 33, 21, 30, 6, 222, 105, 14, 33, 21, 30, 6, 220, + 57, 14, 33, 21, 30, 6, 229, 129, 14, 33, 21, 30, 6, 251, 31, 14, 33, 21, + 30, 6, 228, 212, 14, 33, 21, 30, 6, 230, 143, 14, 33, 21, 30, 232, 231, + 14, 33, 21, 30, 3, 254, 146, 14, 33, 21, 30, 3, 252, 102, 14, 33, 21, 30, + 3, 244, 231, 14, 33, 21, 30, 3, 249, 62, 14, 33, 21, 30, 3, 246, 156, 14, + 33, 21, 30, 3, 217, 83, 14, 33, 21, 30, 3, 246, 121, 14, 33, 21, 30, 3, + 222, 6, 14, 33, 21, 30, 3, 237, 162, 14, 33, 21, 30, 3, 236, 221, 14, 33, + 21, 30, 3, 235, 156, 14, 33, 21, 30, 3, 233, 99, 14, 33, 21, 30, 3, 231, + 144, 14, 33, 21, 30, 3, 218, 130, 14, 33, 21, 30, 3, 230, 141, 14, 33, + 21, 30, 3, 229, 108, 14, 33, 21, 30, 3, 227, 149, 14, 33, 21, 30, 3, 39, + 224, 127, 14, 33, 21, 30, 3, 224, 127, 14, 33, 21, 30, 3, 222, 105, 14, + 33, 21, 30, 3, 220, 57, 14, 33, 21, 30, 3, 229, 129, 14, 33, 21, 30, 3, + 251, 31, 14, 33, 21, 30, 3, 228, 212, 14, 33, 21, 30, 3, 230, 143, 14, + 33, 21, 30, 229, 223, 248, 246, 14, 33, 21, 30, 246, 157, 100, 14, 33, + 21, 30, 222, 7, 100, 14, 33, 21, 30, 236, 222, 100, 14, 33, 21, 30, 229, + 130, 100, 14, 33, 21, 30, 227, 150, 100, 14, 33, 21, 30, 229, 109, 100, + 14, 21, 6, 248, 240, 14, 21, 3, 248, 240, 14, 21, 20, 217, 84, 14, 21, + 20, 107, 14, 21, 20, 103, 14, 21, 20, 160, 14, 21, 20, 154, 14, 21, 20, + 174, 14, 21, 20, 182, 14, 21, 20, 191, 14, 21, 20, 185, 14, 21, 20, 190, + 14, 173, 20, 217, 84, 14, 173, 20, 107, 14, 173, 20, 103, 14, 173, 20, + 160, 14, 173, 20, 154, 14, 173, 20, 174, 14, 173, 20, 182, 14, 173, 20, + 191, 14, 173, 20, 185, 14, 173, 20, 190, 14, 33, 20, 217, 84, 14, 33, 20, + 107, 14, 33, 20, 103, 14, 33, 20, 160, 14, 33, 20, 154, 14, 33, 20, 174, + 14, 33, 20, 182, 14, 33, 20, 191, 14, 33, 20, 185, 14, 33, 20, 190, 14, + 33, 21, 20, 217, 84, 14, 33, 21, 20, 107, 14, 33, 21, 20, 103, 14, 33, + 21, 20, 160, 14, 33, 21, 20, 154, 14, 33, 21, 20, 174, 14, 33, 21, 20, + 182, 14, 33, 21, 20, 191, 14, 33, 21, 20, 185, 14, 33, 21, 20, 190, 14, + 211, 20, 217, 84, 14, 211, 20, 107, 14, 211, 20, 103, 14, 211, 20, 160, + 14, 211, 20, 154, 14, 211, 20, 174, 14, 211, 20, 182, 14, 211, 20, 191, + 14, 211, 20, 185, 14, 211, 20, 190, 234, 101, 81, 247, 5, 218, 194, 234, + 101, 81, 224, 6, 218, 194, 234, 101, 81, 218, 217, 218, 194, 234, 101, + 81, 231, 187, 218, 194, 234, 101, 81, 227, 203, 247, 123, 234, 101, 81, + 244, 27, 247, 123, 234, 101, 81, 67, 247, 123, 234, 101, 81, 131, 117, + 251, 54, 234, 101, 81, 124, 117, 251, 54, 234, 101, 81, 148, 117, 251, + 54, 234, 101, 81, 245, 116, 117, 251, 54, 234, 101, 81, 245, 170, 117, + 251, 54, 234, 101, 81, 224, 82, 117, 251, 54, 234, 101, 81, 225, 43, 117, + 251, 54, 234, 101, 81, 246, 235, 117, 251, 54, 234, 101, 81, 232, 31, + 117, 251, 54, 234, 101, 81, 131, 117, 252, 210, 234, 101, 81, 124, 117, + 252, 210, 234, 101, 81, 148, 117, 252, 210, 234, 101, 81, 245, 116, 117, + 252, 210, 234, 101, 81, 245, 170, 117, 252, 210, 234, 101, 81, 224, 82, + 117, 252, 210, 234, 101, 81, 225, 43, 117, 252, 210, 234, 101, 81, 246, + 235, 117, 252, 210, 234, 101, 81, 232, 31, 117, 252, 210, 234, 101, 81, + 131, 117, 250, 220, 234, 101, 81, 124, 117, 250, 220, 234, 101, 81, 148, + 117, 250, 220, 234, 101, 81, 245, 116, 117, 250, 220, 234, 101, 81, 245, + 170, 117, 250, 220, 234, 101, 81, 224, 82, 117, 250, 220, 234, 101, 81, + 225, 43, 117, 250, 220, 234, 101, 81, 246, 235, 117, 250, 220, 234, 101, + 81, 232, 31, 117, 250, 220, 234, 101, 81, 229, 45, 234, 101, 81, 230, + 104, 234, 101, 81, 252, 211, 234, 101, 81, 250, 254, 234, 101, 81, 223, + 232, 234, 101, 81, 223, 70, 234, 101, 81, 253, 223, 234, 101, 81, 218, + 190, 234, 101, 81, 237, 53, 234, 101, 81, 252, 233, 119, 81, 186, 252, + 233, 119, 81, 242, 240, 119, 81, 242, 239, 119, 81, 242, 238, 119, 81, + 242, 237, 119, 81, 242, 236, 119, 81, 242, 235, 119, 81, 242, 234, 119, + 81, 242, 233, 119, 81, 242, 232, 119, 81, 242, 231, 119, 81, 242, 230, + 119, 81, 242, 229, 119, 81, 242, 228, 119, 81, 242, 227, 119, 81, 242, + 226, 119, 81, 242, 225, 119, 81, 242, 224, 119, 81, 242, 223, 119, 81, + 242, 222, 119, 81, 242, 221, 119, 81, 242, 220, 119, 81, 242, 219, 119, + 81, 242, 218, 119, 81, 242, 217, 119, 81, 242, 216, 119, 81, 242, 215, + 119, 81, 242, 214, 119, 81, 242, 213, 119, 81, 242, 212, 119, 81, 242, + 211, 119, 81, 242, 210, 119, 81, 242, 209, 119, 81, 242, 208, 119, 81, + 242, 207, 119, 81, 242, 206, 119, 81, 242, 205, 119, 81, 242, 204, 119, + 81, 242, 203, 119, 81, 242, 202, 119, 81, 242, 201, 119, 81, 242, 200, + 119, 81, 242, 199, 119, 81, 242, 198, 119, 81, 242, 197, 119, 81, 242, + 196, 119, 81, 242, 195, 119, 81, 242, 194, 119, 81, 242, 193, 119, 81, + 242, 192, 119, 81, 69, 252, 233, 119, 81, 219, 151, 119, 81, 219, 150, + 119, 81, 219, 149, 119, 81, 219, 148, 119, 81, 219, 147, 119, 81, 219, + 146, 119, 81, 219, 145, 119, 81, 219, 144, 119, 81, 219, 143, 119, 81, + 219, 142, 119, 81, 219, 141, 119, 81, 219, 140, 119, 81, 219, 139, 119, + 81, 219, 138, 119, 81, 219, 137, 119, 81, 219, 136, 119, 81, 219, 135, + 119, 81, 219, 134, 119, 81, 219, 133, 119, 81, 219, 132, 119, 81, 219, + 131, 119, 81, 219, 130, 119, 81, 219, 129, 119, 81, 219, 128, 119, 81, + 219, 127, 119, 81, 219, 126, 119, 81, 219, 125, 119, 81, 219, 124, 119, + 81, 219, 123, 119, 81, 219, 122, 119, 81, 219, 121, 119, 81, 219, 120, + 119, 81, 219, 119, 119, 81, 219, 118, 119, 81, 219, 117, 119, 81, 219, + 116, 119, 81, 219, 115, 119, 81, 219, 114, 119, 81, 219, 113, 119, 81, + 219, 112, 119, 81, 219, 111, 119, 81, 219, 110, 119, 81, 219, 109, 119, + 81, 219, 108, 119, 81, 219, 107, 119, 81, 219, 106, 119, 81, 219, 105, + 119, 81, 219, 104, 119, 81, 219, 103, 20, 217, 85, 245, 90, 223, 136, 20, + 217, 85, 250, 168, 20, 131, 250, 168, 20, 124, 250, 168, 20, 148, 250, + 168, 20, 245, 116, 250, 168, 20, 245, 170, 250, 168, 20, 224, 82, 250, + 168, 20, 225, 43, 250, 168, 20, 246, 235, 250, 168, 20, 232, 31, 250, + 168, 82, 7, 6, 1, 60, 82, 7, 6, 1, 253, 204, 82, 7, 6, 1, 251, 202, 82, + 7, 6, 1, 250, 46, 82, 7, 6, 1, 73, 82, 7, 6, 1, 246, 74, 82, 7, 6, 1, + 245, 67, 82, 7, 6, 1, 243, 225, 82, 7, 6, 1, 72, 82, 7, 6, 1, 237, 126, + 82, 7, 6, 1, 237, 17, 82, 7, 6, 1, 153, 82, 7, 6, 1, 189, 82, 7, 6, 1, + 207, 82, 7, 6, 1, 74, 82, 7, 6, 1, 230, 59, 82, 7, 6, 1, 228, 163, 82, 7, + 6, 1, 152, 82, 7, 6, 1, 198, 82, 7, 6, 1, 222, 201, 82, 7, 6, 1, 68, 82, + 7, 6, 1, 216, 216, 82, 7, 6, 1, 219, 40, 82, 7, 6, 1, 218, 151, 82, 7, 6, + 1, 218, 90, 82, 7, 6, 1, 217, 157, 221, 114, 224, 236, 252, 17, 7, 6, 1, + 198, 34, 30, 7, 6, 1, 251, 202, 34, 30, 7, 6, 1, 152, 34, 251, 100, 34, + 218, 153, 204, 7, 6, 1, 253, 204, 204, 7, 6, 1, 207, 204, 7, 6, 1, 230, + 59, 204, 7, 6, 1, 198, 204, 7, 6, 1, 219, 40, 204, 242, 154, 204, 233, + 52, 204, 226, 96, 204, 223, 219, 204, 229, 4, 232, 136, 34, 7, 6, 1, 243, + 225, 232, 136, 34, 7, 6, 1, 230, 59, 232, 136, 204, 7, 6, 1, 237, 126, + 232, 136, 204, 7, 6, 1, 153, 232, 136, 204, 7, 6, 1, 189, 232, 136, 204, + 7, 6, 1, 230, 59, 250, 98, 232, 136, 204, 7, 6, 1, 230, 59, 232, 136, + 204, 242, 67, 232, 136, 204, 187, 232, 136, 204, 226, 177, 40, 248, 184, + 40, 136, 243, 0, 204, 9, 220, 76, 240, 8, 204, 9, 220, 76, 240, 12, 204, + 9, 220, 76, 240, 18, 204, 52, 249, 92, 204, 9, 220, 76, 240, 24, 204, 9, + 220, 76, 240, 14, 204, 9, 220, 76, 239, 248, 204, 9, 220, 76, 240, 13, + 204, 9, 220, 76, 240, 23, 204, 9, 220, 76, 240, 0, 204, 9, 220, 76, 239, + 252, 204, 9, 220, 76, 240, 2, 204, 9, 220, 76, 240, 20, 204, 9, 220, 76, + 240, 9, 204, 9, 220, 76, 240, 22, 204, 9, 220, 76, 240, 1, 204, 9, 220, + 76, 240, 21, 204, 9, 220, 76, 239, 249, 204, 9, 220, 76, 239, 251, 204, + 9, 220, 76, 239, 247, 204, 9, 220, 76, 240, 15, 204, 9, 220, 76, 240, 16, + 204, 9, 220, 76, 239, 254, 204, 9, 220, 76, 240, 6, 204, 9, 220, 76, 240, + 4, 204, 9, 220, 76, 240, 27, 204, 9, 220, 76, 240, 26, 204, 9, 220, 76, + 239, 245, 204, 9, 220, 76, 240, 10, 204, 9, 220, 76, 240, 25, 204, 9, + 220, 76, 240, 17, 204, 9, 220, 76, 240, 5, 204, 9, 220, 76, 239, 246, + 204, 9, 220, 76, 240, 7, 221, 114, 224, 236, 252, 17, 9, 220, 76, 239, + 255, 221, 114, 224, 236, 252, 17, 9, 220, 76, 240, 26, 221, 114, 224, + 236, 252, 17, 9, 220, 76, 240, 24, 221, 114, 224, 236, 252, 17, 9, 220, + 76, 240, 11, 221, 114, 224, 236, 252, 17, 9, 220, 76, 239, 253, 221, 114, + 224, 236, 252, 17, 9, 220, 76, 240, 7, 221, 114, 224, 236, 252, 17, 9, + 220, 76, 239, 250, 221, 114, 224, 236, 252, 17, 9, 220, 76, 240, 19, 221, + 114, 224, 236, 252, 17, 9, 220, 76, 240, 3, 9, 13, 242, 57, 9, 13, 242, + 56, 9, 13, 242, 55, 9, 13, 242, 54, 9, 13, 242, 53, 9, 13, 242, 52, 9, + 13, 242, 51, 9, 13, 242, 50, 9, 13, 242, 49, 9, 13, 242, 48, 9, 13, 242, + 47, 9, 13, 242, 46, 9, 13, 242, 45, 9, 13, 242, 44, 9, 13, 242, 43, 9, + 13, 242, 42, 9, 13, 242, 41, 9, 13, 242, 40, 9, 13, 242, 39, 9, 13, 242, + 38, 9, 13, 242, 37, 9, 13, 242, 36, 9, 13, 242, 35, 9, 13, 242, 34, 9, + 13, 242, 33, 9, 13, 242, 32, 9, 13, 242, 31, 9, 13, 242, 30, 9, 13, 242, + 29, 9, 13, 242, 28, 9, 13, 242, 27, 9, 13, 242, 26, 9, 13, 242, 25, 9, + 13, 242, 24, 9, 13, 242, 23, 9, 13, 242, 22, 9, 13, 242, 21, 9, 13, 242, + 20, 9, 13, 242, 19, 9, 13, 242, 18, 9, 13, 242, 17, 9, 13, 242, 16, 9, + 13, 242, 15, 9, 13, 242, 14, 9, 13, 242, 13, 9, 13, 242, 12, 9, 13, 242, + 11, 9, 13, 242, 10, 9, 13, 242, 9, 9, 13, 242, 8, 9, 13, 242, 7, 9, 13, + 242, 6, 9, 13, 242, 5, 9, 13, 242, 4, 9, 13, 242, 3, 9, 13, 242, 2, 9, + 13, 242, 1, 9, 13, 242, 0, 9, 13, 241, 255, 9, 13, 241, 254, 9, 13, 241, + 253, 9, 13, 241, 252, 9, 13, 241, 251, 9, 13, 241, 250, 9, 13, 241, 249, + 9, 13, 241, 248, 9, 13, 241, 247, 9, 13, 241, 246, 9, 13, 241, 245, 9, + 13, 241, 244, 9, 13, 241, 243, 9, 13, 241, 242, 9, 13, 241, 241, 9, 13, + 241, 240, 9, 13, 241, 239, 9, 13, 241, 238, 9, 13, 241, 237, 9, 13, 241, + 236, 9, 13, 241, 235, 9, 13, 241, 234, 9, 13, 241, 233, 9, 13, 241, 232, + 9, 13, 241, 231, 9, 13, 241, 230, 9, 13, 241, 229, 9, 13, 241, 228, 9, + 13, 241, 227, 9, 13, 241, 226, 9, 13, 241, 225, 9, 13, 241, 224, 9, 13, + 241, 223, 9, 13, 241, 222, 9, 13, 241, 221, 9, 13, 241, 220, 9, 13, 241, + 219, 9, 13, 241, 218, 9, 13, 241, 217, 9, 13, 241, 216, 9, 13, 241, 215, + 9, 13, 241, 214, 9, 13, 241, 213, 9, 13, 241, 212, 9, 13, 241, 211, 9, + 13, 241, 210, 9, 13, 241, 209, 9, 13, 241, 208, 9, 13, 241, 207, 9, 13, + 241, 206, 9, 13, 241, 205, 9, 13, 241, 204, 9, 13, 241, 203, 9, 13, 241, + 202, 9, 13, 241, 201, 9, 13, 241, 200, 9, 13, 241, 199, 9, 13, 241, 198, + 9, 13, 241, 197, 9, 13, 241, 196, 9, 13, 241, 195, 9, 13, 241, 194, 9, + 13, 241, 193, 9, 13, 241, 192, 9, 13, 241, 191, 9, 13, 241, 190, 9, 13, + 241, 189, 9, 13, 241, 188, 9, 13, 241, 187, 9, 13, 241, 186, 9, 13, 241, + 185, 9, 13, 241, 184, 9, 13, 241, 183, 9, 13, 241, 182, 9, 13, 241, 181, + 9, 13, 241, 180, 9, 13, 241, 179, 9, 13, 241, 178, 9, 13, 241, 177, 9, + 13, 241, 176, 9, 13, 241, 175, 9, 13, 241, 174, 9, 13, 241, 173, 9, 13, + 241, 172, 9, 13, 241, 171, 9, 13, 241, 170, 9, 13, 241, 169, 9, 13, 241, + 168, 9, 13, 241, 167, 9, 13, 241, 166, 9, 13, 241, 165, 9, 13, 241, 164, + 9, 13, 241, 163, 9, 13, 241, 162, 9, 13, 241, 161, 9, 13, 241, 160, 9, + 13, 241, 159, 9, 13, 241, 158, 9, 13, 241, 157, 9, 13, 241, 156, 9, 13, + 241, 155, 9, 13, 241, 154, 9, 13, 241, 153, 9, 13, 241, 152, 9, 13, 241, + 151, 9, 13, 241, 150, 9, 13, 241, 149, 9, 13, 241, 148, 9, 13, 241, 147, + 9, 13, 241, 146, 9, 13, 241, 145, 9, 13, 241, 144, 9, 13, 241, 143, 9, + 13, 241, 142, 9, 13, 241, 141, 9, 13, 241, 140, 9, 13, 241, 139, 9, 13, + 241, 138, 9, 13, 241, 137, 9, 13, 241, 136, 9, 13, 241, 135, 9, 13, 241, + 134, 9, 13, 241, 133, 9, 13, 241, 132, 9, 13, 241, 131, 9, 13, 241, 130, + 9, 13, 241, 129, 9, 13, 241, 128, 9, 13, 241, 127, 9, 13, 241, 126, 9, + 13, 241, 125, 9, 13, 241, 124, 9, 13, 241, 123, 9, 13, 241, 122, 9, 13, + 241, 121, 9, 13, 241, 120, 9, 13, 241, 119, 9, 13, 241, 118, 9, 13, 241, + 117, 9, 13, 241, 116, 9, 13, 241, 115, 9, 13, 241, 114, 9, 13, 241, 113, + 9, 13, 241, 112, 9, 13, 241, 111, 9, 13, 241, 110, 9, 13, 241, 109, 9, + 13, 241, 108, 9, 13, 241, 107, 9, 13, 241, 106, 9, 13, 241, 105, 9, 13, + 241, 104, 9, 13, 241, 103, 9, 13, 241, 102, 9, 13, 241, 101, 9, 13, 241, + 100, 9, 13, 241, 99, 9, 13, 241, 98, 9, 13, 241, 97, 9, 13, 241, 96, 9, + 13, 241, 95, 9, 13, 241, 94, 9, 13, 241, 93, 9, 13, 241, 92, 9, 13, 241, + 91, 9, 13, 241, 90, 9, 13, 241, 89, 9, 13, 241, 88, 9, 13, 241, 87, 9, + 13, 241, 86, 9, 13, 241, 85, 9, 13, 241, 84, 9, 13, 241, 83, 9, 13, 241, + 82, 9, 13, 241, 81, 9, 13, 241, 80, 9, 13, 241, 79, 9, 13, 241, 78, 9, + 13, 241, 77, 9, 13, 241, 76, 9, 13, 241, 75, 9, 13, 241, 74, 9, 13, 241, + 73, 9, 13, 241, 72, 9, 13, 241, 71, 9, 13, 241, 70, 9, 13, 241, 69, 9, + 13, 241, 68, 9, 13, 241, 67, 9, 13, 241, 66, 9, 13, 241, 65, 9, 13, 241, + 64, 9, 13, 241, 63, 9, 13, 241, 62, 9, 13, 241, 61, 9, 13, 241, 60, 9, + 13, 241, 59, 9, 13, 241, 58, 9, 13, 241, 57, 9, 13, 241, 56, 9, 13, 241, + 55, 9, 13, 241, 54, 9, 13, 241, 53, 9, 13, 241, 52, 9, 13, 241, 51, 9, + 13, 241, 50, 9, 13, 241, 49, 9, 13, 241, 48, 9, 13, 241, 47, 9, 13, 241, + 46, 9, 13, 241, 45, 9, 13, 241, 44, 9, 13, 241, 43, 9, 13, 241, 42, 9, + 13, 241, 41, 9, 13, 241, 40, 9, 13, 241, 39, 9, 13, 241, 38, 9, 13, 241, + 37, 9, 13, 241, 36, 9, 13, 241, 35, 9, 13, 241, 34, 9, 13, 241, 33, 9, + 13, 241, 32, 9, 13, 241, 31, 9, 13, 241, 30, 9, 13, 241, 29, 9, 13, 241, + 28, 9, 13, 241, 27, 9, 13, 241, 26, 9, 13, 241, 25, 9, 13, 241, 24, 9, + 13, 241, 23, 9, 13, 241, 22, 9, 13, 241, 21, 9, 13, 241, 20, 9, 13, 241, + 19, 9, 13, 241, 18, 9, 13, 241, 17, 9, 13, 241, 16, 9, 13, 241, 15, 9, + 13, 241, 14, 9, 13, 241, 13, 9, 13, 241, 12, 9, 13, 241, 11, 9, 13, 241, + 10, 9, 13, 241, 9, 9, 13, 241, 8, 9, 13, 241, 7, 9, 13, 241, 6, 9, 13, + 241, 5, 9, 13, 241, 4, 9, 13, 241, 3, 9, 13, 241, 2, 9, 13, 241, 1, 9, + 13, 241, 0, 9, 13, 240, 255, 9, 13, 240, 254, 9, 13, 240, 253, 9, 13, + 240, 252, 9, 13, 240, 251, 9, 13, 240, 250, 9, 13, 240, 249, 9, 13, 240, + 248, 9, 13, 240, 247, 9, 13, 240, 246, 9, 13, 240, 245, 9, 13, 240, 244, + 9, 13, 240, 243, 9, 13, 240, 242, 9, 13, 240, 241, 9, 13, 240, 240, 9, + 13, 240, 239, 9, 13, 240, 238, 9, 13, 240, 237, 9, 13, 240, 236, 9, 13, + 240, 235, 9, 13, 240, 234, 9, 13, 240, 233, 9, 13, 240, 232, 9, 13, 240, + 231, 9, 13, 240, 230, 9, 13, 240, 229, 9, 13, 240, 228, 9, 13, 240, 227, + 9, 13, 240, 226, 9, 13, 240, 225, 9, 13, 240, 224, 9, 13, 240, 223, 9, + 13, 240, 222, 9, 13, 240, 221, 9, 13, 240, 220, 9, 13, 240, 219, 9, 13, + 240, 218, 9, 13, 240, 217, 9, 13, 240, 216, 9, 13, 240, 215, 9, 13, 240, + 214, 9, 13, 240, 213, 9, 13, 240, 212, 9, 13, 240, 211, 9, 13, 240, 210, + 9, 13, 240, 209, 9, 13, 240, 208, 9, 13, 240, 207, 9, 13, 240, 206, 9, + 13, 240, 205, 9, 13, 240, 204, 9, 13, 240, 203, 9, 13, 240, 202, 9, 13, + 240, 201, 9, 13, 240, 200, 9, 13, 240, 199, 9, 13, 240, 198, 9, 13, 240, + 197, 9, 13, 240, 196, 9, 13, 240, 195, 9, 13, 240, 194, 9, 13, 240, 193, + 9, 13, 240, 192, 9, 13, 240, 191, 9, 13, 240, 190, 9, 13, 240, 189, 9, + 13, 240, 188, 9, 13, 240, 187, 9, 13, 240, 186, 9, 13, 240, 185, 9, 13, + 240, 184, 9, 13, 240, 183, 9, 13, 240, 182, 9, 13, 240, 181, 9, 13, 240, + 180, 9, 13, 240, 179, 9, 13, 240, 178, 9, 13, 240, 177, 9, 13, 240, 176, + 9, 13, 240, 175, 9, 13, 240, 174, 9, 13, 240, 173, 9, 13, 240, 172, 9, + 13, 240, 171, 9, 13, 240, 170, 9, 13, 240, 169, 9, 13, 240, 168, 9, 13, + 240, 167, 9, 13, 240, 166, 9, 13, 240, 165, 9, 13, 240, 164, 9, 13, 240, + 163, 9, 13, 240, 162, 9, 13, 240, 161, 9, 13, 240, 160, 9, 13, 240, 159, + 9, 13, 240, 158, 9, 13, 240, 157, 9, 13, 240, 156, 9, 13, 240, 155, 9, + 13, 240, 154, 9, 13, 240, 153, 9, 13, 240, 152, 9, 13, 240, 151, 9, 13, + 240, 150, 9, 13, 240, 149, 9, 13, 240, 148, 9, 13, 240, 147, 9, 13, 240, + 146, 9, 13, 240, 145, 9, 13, 240, 144, 9, 13, 240, 143, 9, 13, 240, 142, + 9, 13, 240, 141, 9, 13, 240, 140, 9, 13, 240, 139, 9, 13, 240, 138, 9, + 13, 240, 137, 9, 13, 240, 136, 9, 13, 240, 135, 9, 13, 240, 134, 9, 13, + 240, 133, 9, 13, 240, 132, 9, 13, 240, 131, 9, 13, 240, 130, 9, 13, 240, + 129, 9, 13, 240, 128, 9, 13, 240, 127, 9, 13, 240, 126, 9, 13, 240, 125, + 9, 13, 240, 124, 9, 13, 240, 123, 9, 13, 240, 122, 9, 13, 240, 121, 9, + 13, 240, 120, 9, 13, 240, 119, 9, 13, 240, 118, 9, 13, 240, 117, 9, 13, + 240, 116, 9, 13, 240, 115, 9, 13, 240, 114, 9, 13, 240, 113, 9, 13, 240, + 112, 9, 13, 240, 111, 9, 13, 240, 110, 9, 13, 240, 109, 9, 13, 240, 108, + 9, 13, 240, 107, 9, 13, 240, 106, 9, 13, 240, 105, 9, 13, 240, 104, 9, + 13, 240, 103, 9, 13, 240, 102, 9, 13, 240, 101, 9, 13, 240, 100, 9, 13, + 240, 99, 9, 13, 240, 98, 9, 13, 240, 97, 9, 13, 240, 96, 9, 13, 240, 95, + 9, 13, 240, 94, 9, 13, 240, 93, 9, 13, 240, 92, 9, 13, 240, 91, 9, 13, + 240, 90, 9, 13, 240, 89, 9, 13, 240, 88, 9, 13, 240, 87, 9, 13, 240, 86, + 9, 13, 240, 85, 9, 13, 240, 84, 9, 13, 240, 83, 9, 13, 240, 82, 9, 13, + 240, 81, 9, 13, 240, 80, 9, 13, 240, 79, 9, 13, 240, 78, 9, 13, 240, 77, + 9, 13, 240, 76, 9, 13, 240, 75, 9, 13, 240, 74, 9, 13, 240, 73, 9, 13, + 240, 72, 9, 13, 240, 71, 9, 13, 240, 70, 9, 13, 240, 69, 9, 13, 240, 68, + 9, 13, 240, 67, 9, 13, 240, 66, 9, 13, 240, 65, 9, 13, 240, 64, 9, 13, + 240, 63, 9, 13, 240, 62, 9, 13, 240, 61, 9, 13, 240, 60, 9, 13, 240, 59, + 9, 13, 240, 58, 9, 13, 240, 57, 9, 13, 240, 56, 9, 13, 240, 55, 9, 13, + 240, 54, 9, 13, 240, 53, 9, 13, 240, 52, 9, 13, 240, 51, 9, 13, 240, 50, + 9, 13, 240, 49, 9, 13, 240, 48, 9, 13, 240, 47, 9, 13, 240, 46, 9, 13, + 240, 45, 9, 13, 240, 44, 9, 13, 240, 43, 9, 13, 240, 42, 9, 13, 240, 41, + 9, 13, 240, 40, 9, 13, 240, 39, 9, 13, 240, 38, 9, 13, 240, 37, 9, 13, + 240, 36, 9, 13, 240, 35, 9, 13, 240, 34, 9, 13, 240, 33, 9, 13, 240, 32, + 9, 13, 240, 31, 9, 13, 240, 30, 9, 13, 240, 29, 9, 13, 240, 28, 235, 148, + 222, 141, 118, 223, 254, 118, 246, 95, 78, 118, 228, 69, 78, 118, 54, 55, + 118, 248, 155, 55, 118, 229, 169, 55, 118, 254, 134, 118, 254, 79, 118, + 42, 229, 229, 118, 45, 229, 229, 118, 253, 251, 118, 88, 55, 118, 250, + 168, 118, 242, 120, 118, 245, 90, 223, 136, 118, 224, 17, 118, 20, 217, + 84, 118, 20, 107, 118, 20, 103, 118, 20, 160, 118, 20, 154, 118, 20, 174, + 118, 20, 182, 118, 20, 191, 118, 20, 185, 118, 20, 190, 118, 250, 175, + 118, 225, 67, 118, 235, 87, 55, 118, 246, 154, 55, 118, 244, 30, 55, 118, + 228, 82, 78, 118, 250, 167, 253, 244, 118, 7, 6, 1, 60, 118, 7, 6, 1, + 253, 204, 118, 7, 6, 1, 251, 202, 118, 7, 6, 1, 250, 46, 118, 7, 6, 1, + 73, 118, 7, 6, 1, 246, 74, 118, 7, 6, 1, 245, 67, 118, 7, 6, 1, 243, 225, + 118, 7, 6, 1, 72, 118, 7, 6, 1, 237, 126, 118, 7, 6, 1, 237, 17, 118, 7, + 6, 1, 153, 118, 7, 6, 1, 189, 118, 7, 6, 1, 207, 118, 7, 6, 1, 74, 118, + 7, 6, 1, 230, 59, 118, 7, 6, 1, 228, 163, 118, 7, 6, 1, 152, 118, 7, 6, + 1, 198, 118, 7, 6, 1, 222, 201, 118, 7, 6, 1, 68, 118, 7, 6, 1, 216, 216, + 118, 7, 6, 1, 219, 40, 118, 7, 6, 1, 218, 151, 118, 7, 6, 1, 218, 90, + 118, 7, 6, 1, 217, 157, 118, 42, 40, 115, 118, 227, 160, 224, 17, 118, + 45, 40, 115, 118, 250, 217, 255, 0, 118, 109, 235, 43, 118, 244, 37, 255, + 0, 118, 7, 3, 1, 60, 118, 7, 3, 1, 253, 204, 118, 7, 3, 1, 251, 202, 118, + 7, 3, 1, 250, 46, 118, 7, 3, 1, 73, 118, 7, 3, 1, 246, 74, 118, 7, 3, 1, + 245, 67, 118, 7, 3, 1, 243, 225, 118, 7, 3, 1, 72, 118, 7, 3, 1, 237, + 126, 118, 7, 3, 1, 237, 17, 118, 7, 3, 1, 153, 118, 7, 3, 1, 189, 118, 7, + 3, 1, 207, 118, 7, 3, 1, 74, 118, 7, 3, 1, 230, 59, 118, 7, 3, 1, 228, + 163, 118, 7, 3, 1, 152, 118, 7, 3, 1, 198, 118, 7, 3, 1, 222, 201, 118, + 7, 3, 1, 68, 118, 7, 3, 1, 216, 216, 118, 7, 3, 1, 219, 40, 118, 7, 3, 1, + 218, 151, 118, 7, 3, 1, 218, 90, 118, 7, 3, 1, 217, 157, 118, 42, 250, + 79, 115, 118, 69, 235, 43, 118, 45, 250, 79, 115, 118, 221, 179, 251, + 153, 222, 141, 41, 225, 251, 41, 225, 240, 41, 225, 229, 41, 225, 217, + 41, 225, 206, 41, 225, 195, 41, 225, 184, 41, 225, 173, 41, 225, 162, 41, + 225, 154, 41, 225, 153, 41, 225, 152, 41, 225, 151, 41, 225, 149, 41, + 225, 148, 41, 225, 147, 41, 225, 146, 41, 225, 145, 41, 225, 144, 41, + 225, 143, 41, 225, 142, 41, 225, 141, 41, 225, 140, 41, 225, 138, 41, + 225, 137, 41, 225, 136, 41, 225, 135, 41, 225, 134, 41, 225, 133, 41, + 225, 132, 41, 225, 131, 41, 225, 130, 41, 225, 129, 41, 225, 127, 41, + 225, 126, 41, 225, 125, 41, 225, 124, 41, 225, 123, 41, 225, 122, 41, + 225, 121, 41, 225, 120, 41, 225, 119, 41, 225, 118, 41, 225, 116, 41, + 225, 115, 41, 225, 114, 41, 225, 113, 41, 225, 112, 41, 225, 111, 41, + 225, 110, 41, 225, 109, 41, 225, 108, 41, 225, 107, 41, 225, 105, 41, + 225, 104, 41, 225, 103, 41, 225, 102, 41, 225, 101, 41, 225, 100, 41, + 225, 99, 41, 225, 98, 41, 225, 97, 41, 225, 96, 41, 225, 94, 41, 225, 93, + 41, 225, 92, 41, 225, 91, 41, 225, 90, 41, 225, 89, 41, 225, 88, 41, 225, + 87, 41, 225, 86, 41, 225, 85, 41, 225, 83, 41, 225, 82, 41, 225, 81, 41, + 225, 80, 41, 225, 79, 41, 225, 78, 41, 225, 77, 41, 225, 76, 41, 225, 75, + 41, 225, 74, 41, 226, 71, 41, 226, 70, 41, 226, 69, 41, 226, 68, 41, 226, + 67, 41, 226, 66, 41, 226, 65, 41, 226, 64, 41, 226, 63, 41, 226, 62, 41, + 226, 60, 41, 226, 59, 41, 226, 58, 41, 226, 57, 41, 226, 56, 41, 226, 55, + 41, 226, 54, 41, 226, 53, 41, 226, 52, 41, 226, 51, 41, 226, 49, 41, 226, + 48, 41, 226, 47, 41, 226, 46, 41, 226, 45, 41, 226, 44, 41, 226, 43, 41, + 226, 42, 41, 226, 41, 41, 226, 40, 41, 226, 38, 41, 226, 37, 41, 226, 36, + 41, 226, 35, 41, 226, 34, 41, 226, 33, 41, 226, 32, 41, 226, 31, 41, 226, + 30, 41, 226, 29, 41, 226, 27, 41, 226, 26, 41, 226, 25, 41, 226, 24, 41, + 226, 23, 41, 226, 22, 41, 226, 21, 41, 226, 20, 41, 226, 19, 41, 226, 18, + 41, 226, 16, 41, 226, 15, 41, 226, 14, 41, 226, 13, 41, 226, 12, 41, 226, + 11, 41, 226, 10, 41, 226, 9, 41, 226, 8, 41, 226, 7, 41, 226, 5, 41, 226, + 4, 41, 226, 3, 41, 226, 2, 41, 226, 1, 41, 226, 0, 41, 225, 255, 41, 225, + 254, 41, 225, 253, 41, 225, 252, 41, 225, 250, 41, 225, 249, 41, 225, + 248, 41, 225, 247, 41, 225, 246, 41, 225, 245, 41, 225, 244, 41, 225, + 243, 41, 225, 242, 41, 225, 241, 41, 225, 239, 41, 225, 238, 41, 225, + 237, 41, 225, 236, 41, 225, 235, 41, 225, 234, 41, 225, 233, 41, 225, + 232, 41, 225, 231, 41, 225, 230, 41, 225, 228, 41, 225, 227, 41, 225, + 226, 41, 225, 225, 41, 225, 224, 41, 225, 223, 41, 225, 222, 41, 225, + 221, 41, 225, 220, 41, 225, 219, 41, 225, 216, 41, 225, 215, 41, 225, + 214, 41, 225, 213, 41, 225, 212, 41, 225, 211, 41, 225, 210, 41, 225, + 209, 41, 225, 208, 41, 225, 207, 41, 225, 205, 41, 225, 204, 41, 225, + 203, 41, 225, 202, 41, 225, 201, 41, 225, 200, 41, 225, 199, 41, 225, + 198, 41, 225, 197, 41, 225, 196, 41, 225, 194, 41, 225, 193, 41, 225, + 192, 41, 225, 191, 41, 225, 190, 41, 225, 189, 41, 225, 188, 41, 225, + 187, 41, 225, 186, 41, 225, 185, 41, 225, 183, 41, 225, 182, 41, 225, + 181, 41, 225, 180, 41, 225, 179, 41, 225, 178, 41, 225, 177, 41, 225, + 176, 41, 225, 175, 41, 225, 174, 41, 225, 172, 41, 225, 171, 41, 225, + 170, 41, 225, 169, 41, 225, 168, 41, 225, 167, 41, 225, 166, 41, 225, + 165, 41, 225, 164, 41, 225, 163, 41, 225, 161, 41, 225, 160, 41, 225, + 159, 41, 225, 158, 41, 225, 157, 41, 225, 156, 41, 225, 155, }; static unsigned char phrasebook_offset1[] = { - 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 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, 16, 52, 53, 54, - 16, 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, 16, 84, 85, 86, 87, 88, - 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 100, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 101, 102, 103, 104, 105, 106, - 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 16, 120, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 121, 122, 123, 124, - 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 16, - 139, 140, 141, 142, 143, 16, 16, 16, 16, 16, 16, 144, 16, 145, 16, 146, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 147, 148, 149, 150, 151, 152, 153, 16, 154, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 155, 156, 157, 158, 159, 16, 160, 16, 161, 162, 163, 164, 165, 166, - 167, 168, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 169, 170, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 171, 172, 173, 174, 175, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 176, - 16, 177, 178, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, + 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, 17, 87, 88, 89, 90, 91, + 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 103, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 104, 105, 106, 107, 108, + 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, + 123, 124, 125, 17, 126, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 127, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 128, 129, + 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, + 144, 145, 17, 146, 147, 148, 149, 150, 17, 17, 17, 17, 17, 17, 151, 17, + 152, 17, 153, 17, 154, 17, 155, 17, 17, 17, 156, 17, 17, 17, 17, 157, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 158, 159, 160, 161, 162, 163, + 164, 17, 165, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 166, 167, 168, 169, 170, 171, 172, 173, + 174, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 175, 176, 177, 178, 179, 17, 180, 17, 181, 182, + 183, 184, 185, 186, 187, 188, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 189, 190, 191, 192, 193, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 194, 195, 196, 197, 198, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 199, 17, 200, 201, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, }; 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, 114, 118, 122, 127, 132, 136, 140, - 144, 148, 153, 158, 162, 166, 171, 175, 179, 184, 189, 194, 199, 202, - 206, 209, 213, 216, 220, 224, 229, 234, 239, 243, 248, 252, 256, 260, - 265, 270, 274, 278, 282, 286, 291, 296, 300, 304, 309, 313, 317, 322, - 327, 332, 337, 341, 344, 348, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 349, 353, 358, - 361, 364, 367, 370, 373, 376, 377, 380, 386, 394, 396, 400, 403, 405, - 408, 411, 414, 417, 421, 424, 427, 431, 433, 436, 442, 450, 457, 464, - 471, 476, 483, 489, 496, 502, 508, 516, 521, 529, 536, 542, 549, 555, - 563, 570, 578, 585, 590, 597, 604, 610, 617, 623, 629, 632, 638, 645, - 651, 658, 664, 671, 676, 682, 689, 695, 702, 708, 714, 722, 727, 735, - 742, 748, 755, 761, 769, 776, 784, 791, 796, 803, 810, 816, 823, 829, - 835, 838, 844, 851, 857, 864, 870, 877, 882, 889, 896, 903, 910, 917, - 924, 931, 938, 945, 953, 961, 969, 977, 985, 993, 1001, 1009, 1016, 1023, - 1030, 1037, 1044, 1051, 1058, 1065, 1072, 1079, 1086, 1093, 1101, 1109, - 1117, 1125, 1133, 1141, 1149, 1157, 1165, 1173, 1180, 1187, 1194, 1201, - 1209, 1217, 1225, 1233, 1241, 1249, 1257, 1263, 1268, 1273, 1281, 1289, - 1297, 1305, 1310, 1317, 1324, 1332, 1340, 1348, 1356, 1366, 1376, 1383, - 1390, 1397, 1404, 1412, 1420, 1428, 1436, 1447, 1452, 1457, 1464, 1471, - 1478, 1485, 1492, 1499, 1504, 1509, 1516, 1523, 1531, 1539, 1547, 1555, - 1562, 1569, 1577, 1585, 1593, 1601, 1609, 1617, 1625, 1633, 1641, 1649, - 1656, 1663, 1669, 1675, 1682, 1689, 1696, 1703, 1711, 1719, 1726, 1733, - 1740, 1747, 1755, 1763, 1771, 1779, 1786, 1793, 1800, 1808, 1816, 1824, - 1832, 1837, 1843, 1849, 1856, 1863, 1868, 1873, 1879, 1886, 1893, 1900, - 1907, 1915, 1923, 1929, 1934, 1939, 1945, 1952, 1959, 1966, 1971, 1976, - 1981, 1988, 1995, 2002, 2009, 2016, 2021, 2029, 2039, 2047, 2054, 2061, - 2066, 2071, 2078, 2085, 2089, 2094, 2099, 2104, 2111, 2120, 2127, 2134, - 2143, 2150, 2157, 2162, 2169, 2176, 2183, 2190, 2197, 2202, 2209, 2216, - 2224, 2229, 2234, 2239, 2249, 2253, 2259, 2265, 2271, 2277, 2285, 2298, - 2306, 2311, 2321, 2326, 2331, 2341, 2346, 2353, 2360, 2368, 2376, 2383, - 2390, 2397, 2404, 2414, 2424, 2433, 2442, 2452, 2462, 2472, 2482, 2487, - 2497, 2507, 2517, 2527, 2535, 2543, 2550, 2557, 2565, 2573, 2581, 2589, - 2596, 2603, 2613, 2623, 2631, 2639, 2647, 2652, 2662, 2667, 2674, 2681, - 2686, 2691, 2699, 2707, 2717, 2727, 2734, 2741, 2749, 2757, 2765, 2773, - 2782, 2791, 2799, 2807, 2816, 2825, 2834, 2843, 2853, 2863, 2871, 2879, - 2888, 2897, 2906, 2915, 2925, 2935, 2943, 2951, 2960, 2969, 2978, 2987, - 2996, 3005, 3010, 3015, 3023, 3031, 3041, 3049, 3054, 3059, 3066, 3073, - 3080, 3087, 3094, 3101, 3111, 3121, 3131, 3141, 3148, 3155, 3165, 3175, - 3183, 3191, 3199, 3207, 3215, 3222, 3229, 3236, 3242, 3249, 3256, 3263, - 3272, 3282, 3292, 3299, 3306, 3312, 3317, 3322, 3328, 3334, 3341, 3348, - 3359, 3369, 3376, 3383, 3390, 3397, 3402, 3407, 3413, 3419, 3425, 3433, - 3441, 3448, 3453, 3458, 3465, 3471, 3478, 3487, 3496, 3505, 3512, 3517, - 3522, 3527, 3534, 3539, 3546, 3553, 3560, 3565, 3570, 3579, 3587, 3596, - 3601, 3606, 3616, 3623, 3631, 3640, 3645, 3651, 3657, 3664, 3669, 3674, - 3684, 3692, 3701, 3709, 3717, 3726, 3731, 3738, 3745, 3750, 3761, 3769, - 3777, 3783, 3792, 3797, 3802, 3809, 3814, 3820, 3826, 3832, 3841, 3849, - 3854, 3862, 3868, 3876, 3884, 3890, 3896, 3902, 3910, 3918, 3923, 3931, - 3937, 3942, 3949, 3957, 3966, 3973, 3980, 3990, 3997, 4004, 4014, 4021, - 4028, 4035, 4041, 4047, 4056, 4068, 4072, 4079, 4084, 4088, 4093, 4101, - 4108, 4113, 4118, 4122, 4127, 4132, 4136, 4141, 4147, 4153, 4159, 4166, - 4171, 4176, 4181, 4186, 4192, 4194, 4199, 4203, 4209, 4215, 4221, 4226, - 4233, 4240, 4246, 4253, 4261, 4269, 4274, 4279, 4283, 4288, 4290, 4292, - 4295, 4297, 4299, 4304, 4309, 4315, 4320, 4324, 4328, 4333, 4341, 4347, - 4352, 4358, 4363, 4369, 4377, 4385, 4389, 4393, 4398, 4404, 4410, 4416, - 4422, 4427, 4435, 4444, 4453, 4457, 4463, 4470, 4477, 4484, 4491, 4495, - 4501, 4506, 4511, 4516, 4521, 4523, 4526, 4529, 4532, 4535, 4537, 4541, - 4545, 4551, 4554, 4559, 4565, 4571, 4574, 4579, 4584, 4588, 4593, 4599, - 4605, 4611, 4616, 4621, 4626, 4629, 4635, 4640, 4645, 4649, 4654, 4660, - 4666, 4669, 4673, 4677, 4681, 4684, 4687, 4692, 4696, 4703, 4707, 4713, - 4717, 4723, 4727, 4731, 4735, 4740, 4745, 4751, 4756, 4763, 4769, 4775, - 4781, 4784, 4788, 4792, 4795, 4799, 4804, 4809, 4813, 4817, 4823, 4827, - 4831, 4836, 4842, 4847, 4852, 4856, 4862, 4867, 4872, 4877, 4882, 4888, - 4891, 4895, 4900, 4905, 4914, 4920, 4925, 4929, 4934, 4938, 4943, 4947, - 4951, 4956, 4959, 4965, 4970, 4975, 4980, 4985, 4990, 4995, 5001, 5007, - 5012, 5017, 5022, 5028, 5033, 5039, 5044, 5049, 5056, 5063, 5066, 5070, - 5077, 0, 0, 5084, 5087, 5095, 5104, 5114, 0, 0, 0, 0, 0, 5118, 5121, - 5126, 5134, 5139, 5147, 5155, 0, 5163, 0, 5171, 5179, 5187, 5198, 5203, - 5208, 5213, 5218, 5223, 5228, 5233, 5238, 5243, 5248, 5253, 5258, 5263, - 5268, 5273, 5278, 0, 5283, 5288, 5293, 5298, 5303, 5308, 5313, 5318, - 5326, 5334, 5342, 5350, 5358, 5366, 5377, 5382, 5387, 5392, 5397, 5402, - 5407, 5412, 5417, 5422, 5427, 5432, 5437, 5442, 5447, 5452, 5457, 5462, - 5468, 5473, 5478, 5483, 5488, 5493, 5498, 5503, 5511, 5519, 5527, 5535, - 5543, 5548, 5552, 5556, 5563, 5573, 5583, 5587, 5591, 5595, 5601, 5608, - 5612, 5617, 5621, 5626, 5630, 5635, 5639, 5644, 5649, 5654, 5659, 5664, - 5669, 5674, 5679, 5684, 5689, 5694, 5699, 5704, 5709, 5714, 5718, 5722, - 5728, 5732, 5737, 5743, 5750, 5755, 5760, 5767, 5772, 5777, 5783, 5791, - 5800, 5810, 5818, 5823, 5828, 5833, 5840, 5845, 5851, 5856, 5861, 5866, - 5871, 5876, 5881, 5889, 5895, 5900, 5904, 5909, 5914, 5919, 5924, 5929, - 5934, 5939, 5943, 5949, 5953, 5958, 5963, 5968, 5972, 5977, 5982, 5987, - 5992, 5996, 6001, 6005, 6010, 6015, 6020, 6025, 6031, 6036, 6042, 6046, - 6051, 6055, 6059, 6064, 6069, 6074, 6079, 6084, 6089, 6094, 6098, 6104, - 6108, 6113, 6118, 6123, 6127, 6132, 6137, 6142, 6147, 6151, 6156, 6160, - 6165, 6170, 6175, 6180, 6186, 6191, 6197, 6201, 6206, 6210, 6218, 6223, - 6228, 6233, 6240, 6245, 6251, 6256, 6261, 6266, 6271, 6276, 6281, 6289, - 6295, 6300, 6305, 6310, 6315, 6320, 6326, 6332, 6339, 6346, 6355, 6364, - 6371, 6378, 6387, 6396, 6401, 6406, 6411, 6416, 6421, 6426, 6431, 6436, - 6447, 6458, 6463, 6468, 6475, 6482, 6490, 6498, 6503, 6508, 6513, 6518, - 6522, 6526, 6530, 6535, 6540, 6544, 6551, 6556, 6566, 6576, 6582, 6588, - 6596, 6604, 6612, 6620, 6627, 6634, 6643, 6652, 6660, 6668, 6676, 6684, - 6691, 6698, 6705, 6712, 6718, 6724, 6730, 6736, 6744, 6752, 6759, 6766, - 6775, 6784, 6790, 6796, 6804, 6812, 6820, 6828, 6834, 6840, 6848, 6856, - 6864, 6872, 6879, 6886, 6894, 6902, 6910, 6918, 6923, 6928, 6935, 6942, - 6952, 6962, 6966, 6974, 6982, 6988, 6994, 7002, 7010, 7017, 7024, 7032, - 7040, 7047, 7054, 7062, 7070, 7075, 7082, 7089, 7095, 7101, 7107, 7113, - 7121, 7129, 7134, 7139, 7146, 7153, 7160, 7167, 7174, 7181, 7188, 7195, - 7203, 7211, 7218, 7225, 7231, 7237, 7243, 7249, 7257, 7265, 7271, 7277, - 7284, 7291, 7297, 7303, 7310, 7317, 7324, 7331, 7339, 7347, 7354, 7361, - 7370, 7379, 7386, 7393, 7400, 7407, 7414, 7421, 7428, 7435, 7442, 7449, - 7456, 7463, 7470, 7477, 7484, 7491, 7498, 7505, 7512, 7519, 7525, 7531, - 7538, 7545, 7550, 7555, 7560, 7565, 7570, 7575, 7580, 7585, 7590, 7595, - 7601, 7607, 7616, 7625, 7634, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 7643, 7648, 7653, 7658, 7663, 7668, 7673, 7678, 7683, 7687, 7692, 7697, - 7702, 7707, 7712, 7717, 7722, 7727, 7732, 7737, 7742, 7747, 7752, 7757, - 7762, 7767, 7772, 7777, 7781, 7786, 7791, 7796, 7801, 7806, 7811, 7816, - 7821, 7826, 0, 0, 7831, 7838, 7841, 7845, 7849, 7852, 7856, 0, 7860, - 7865, 7870, 7875, 7880, 7885, 7890, 7895, 7900, 7904, 7909, 7914, 7919, - 7924, 7929, 7934, 7939, 7944, 7949, 7954, 7959, 7964, 7969, 7974, 7979, - 7984, 7989, 7994, 7998, 8003, 8008, 8013, 8018, 8023, 8028, 8033, 8038, - 8043, 8048, 0, 8055, 8060, 0, 0, 0, 0, 0, 0, 8063, 8068, 8073, 8078, - 8085, 8092, 8097, 8102, 8107, 8112, 8117, 8122, 8127, 8134, 8139, 8146, - 8153, 8158, 8165, 8170, 8175, 8180, 8187, 8192, 8197, 8204, 8213, 8218, - 8223, 8228, 8233, 8239, 8244, 8251, 8258, 8265, 8270, 8275, 8280, 8285, - 8290, 8295, 8305, 8310, 8318, 8323, 8328, 8333, 8338, 8345, 8352, 8359, - 8365, 8370, 8377, 0, 0, 0, 0, 0, 0, 0, 0, 8384, 8388, 8392, 8396, 8400, - 8404, 8408, 8412, 8416, 8420, 8424, 8429, 8433, 8437, 8442, 8446, 8451, - 8455, 8459, 8463, 8468, 8472, 8477, 8481, 8485, 8489, 8493, 0, 0, 0, 0, - 0, 8497, 8504, 8512, 8519, 8524, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8529, - 8532, 8536, 8541, 0, 0, 8545, 8551, 8557, 8560, 8567, 8576, 8579, 8582, - 8587, 8593, 8597, 8605, 8611, 8617, 8625, 8629, 8634, 8644, 8649, 8653, - 8657, 8661, 0, 0, 8664, 8671, 0, 8675, 8679, 8686, 8692, 8699, 8705, - 8711, 8715, 8719, 8725, 8729, 8733, 8737, 8741, 8745, 8749, 8753, 8757, - 8761, 8765, 8769, 8773, 8777, 8781, 8785, 8789, 8793, 8801, 8809, 8818, - 8827, 8836, 8839, 8843, 8847, 8851, 8855, 8859, 8863, 8867, 8871, 8876, - 8880, 8883, 8886, 8889, 8892, 8895, 8898, 8901, 8904, 8908, 8911, 8914, - 8919, 8924, 8930, 8933, 8940, 8949, 8954, 8958, 0, 8965, 8970, 8974, - 8978, 8982, 8986, 8990, 8994, 8998, 9002, 9006, 9010, 9015, 9020, 9027, - 9033, 9039, 9045, 9050, 9058, 9066, 9071, 9077, 9083, 9089, 9095, 9099, - 9103, 9107, 9114, 9124, 9128, 9132, 9136, 9142, 9150, 9154, 9158, 9165, - 9169, 9173, 9177, 9184, 9191, 9203, 9207, 9211, 9215, 9225, 9234, 9238, - 9245, 9252, 9259, 9268, 9279, 9287, 9291, 9300, 9311, 9319, 9332, 9340, - 9348, 9356, 9364, 9370, 9379, 9386, 9390, 9398, 9402, 9409, 9417, 9421, - 9427, 9434, 9441, 9445, 9453, 9457, 9464, 9468, 9476, 9480, 9488, 9494, - 9500, 9507, 9514, 9521, 9527, 9531, 9538, 9546, 9552, 9559, 9566, 9572, - 9581, 9589, 9596, 9602, 9606, 9609, 9613, 9619, 9627, 9631, 9637, 9643, - 9649, 9656, 9659, 9666, 9671, 9679, 9684, 9688, 9700, 9712, 9718, 9724, - 9729, 9735, 9740, 9746, 9756, 9763, 9772, 9782, 9788, 9793, 9798, 9802, - 9806, 9811, 9816, 9822, 9830, 9838, 9849, 9854, 9862, 9870, 9877, 9883, - 9889, 9895, 9901, 9907, 9913, 9919, 9925, 9931, 9938, 9945, 9952, 9958, - 9966, 9974, 9980, 9987, 9994, 9999, 10004, 10008, 10015, 10022, 10031, - 10040, 10043, 10048, 10053, 0, 10058, 10062, 10066, 10072, 10076, 10080, - 10086, 10090, 10098, 10102, 10106, 10110, 10114, 10118, 10124, 10128, - 10134, 10138, 10142, 10146, 10150, 10154, 10159, 10162, 10166, 10171, - 10175, 10179, 10183, 10187, 10191, 10197, 10203, 10209, 10213, 10217, - 10222, 10226, 10230, 10235, 10239, 10243, 10250, 10257, 10261, 10265, - 10270, 10274, 10278, 10281, 10286, 10289, 10292, 10297, 10302, 10306, - 10310, 10316, 10322, 10325, 0, 0, 10328, 10334, 10340, 10346, 10356, - 10368, 10380, 10397, 10409, 10420, 10427, 10434, 10445, 10460, 10471, - 10477, 10486, 10494, 10506, 10516, 10524, 10536, 10543, 10551, 10563, - 10569, 10575, 10583, 10591, 10598, 10603, 10613, 10620, 10630, 10640, - 10653, 10667, 10681, 10691, 10702, 10713, 10726, 10739, 10753, 10765, - 10777, 10790, 10803, 10815, 10828, 10836, 10844, 10849, 10854, 10859, - 10864, 10869, 10874, 10879, 10884, 10889, 10894, 10899, 10904, 10909, - 10914, 10919, 10924, 10929, 10934, 10939, 10944, 10949, 10954, 10959, - 10964, 10969, 10974, 10979, 10984, 10989, 10994, 10999, 11004, 11008, - 11013, 11018, 11023, 11028, 11033, 11037, 11041, 11045, 11049, 11053, - 11057, 11061, 11065, 11069, 11073, 11077, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 11082, 11086, 11089, 11092, 11095, 11098, 11101, 11104, - 11107, 11110, 11113, 11116, 11120, 11123, 11126, 11129, 11133, 11136, - 11140, 11143, 11147, 11150, 11154, 11158, 11162, 11166, 11169, 11173, - 11177, 11181, 11185, 11188, 11192, 11198, 11201, 11205, 11209, 11212, - 11216, 11219, 11225, 11231, 11237, 11242, 11249, 11256, 11264, 11271, - 11277, 11283, 11290, 11295, 11300, 11305, 11310, 11316, 11320, 11323, - 11327, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11330, 11334, 11338, - 11342, 11347, 11350, 11354, 11357, 11361, 11364, 11368, 11372, 11376, - 11381, 11386, 11389, 11393, 11398, 11403, 11406, 11410, 11413, 11417, - 11421, 11425, 11429, 11433, 11437, 11441, 11445, 11449, 11453, 11457, - 11461, 11465, 11469, 11473, 11477, 11481, 11485, 11489, 11493, 11496, - 11500, 11504, 11508, 11511, 11514, 11517, 11521, 11525, 11529, 11533, - 11537, 11541, 11545, 11549, 0, 0, 11552, 11556, 11560, 11565, 11569, - 11574, 11578, 11583, 11588, 11594, 11600, 11606, 11610, 11615, 11621, - 11627, 11631, 11636, 0, 0, 11640, 11643, 11649, 11655, 11660, 0, 0, 0, - 11665, 11669, 11673, 11677, 11681, 11685, 11689, 11693, 11697, 11702, - 11707, 11712, 11718, 11721, 11725, 11729, 11732, 11735, 11738, 11741, - 11744, 11747, 11750, 11753, 11756, 11760, 11767, 0, 0, 0, 0, 0, 0, 0, 0, - 11772, 11776, 11780, 11786, 11790, 0, 11794, 11798, 11802, 0, 11806, - 11809, 11813, 11816, 11820, 11823, 11827, 11831, 0, 0, 11835, 11838, 0, - 0, 11842, 11845, 11849, 11852, 11856, 11860, 11864, 11868, 11872, 11876, - 11880, 11884, 11888, 11892, 11896, 11900, 11904, 11908, 11912, 11916, - 11920, 11924, 0, 11928, 11931, 11935, 11939, 11943, 11946, 11949, 0, - 11952, 0, 0, 0, 11956, 11960, 11964, 11968, 0, 0, 11971, 11975, 11979, - 11984, 11988, 11993, 11997, 12002, 12007, 0, 0, 12013, 12017, 0, 0, - 12022, 12026, 12031, 12035, 0, 0, 0, 0, 0, 0, 0, 0, 12041, 0, 0, 0, 0, - 12047, 12051, 0, 12055, 12059, 12064, 12069, 12074, 0, 0, 12080, 12084, - 12087, 12090, 12093, 12096, 12099, 12102, 12105, 12108, 12111, 12120, - 12128, 12132, 12136, 12142, 12148, 12154, 12160, 12174, 12181, 0, 0, 0, - 0, 0, 0, 12184, 12190, 12194, 0, 12198, 12201, 12205, 12208, 12212, - 12215, 0, 0, 0, 0, 12219, 12223, 0, 0, 12227, 12231, 12235, 12238, 12242, - 12246, 12250, 12254, 12258, 12262, 12266, 12270, 12274, 12278, 12282, - 12286, 12290, 12294, 12298, 12302, 12306, 12310, 0, 12314, 12317, 12321, - 12325, 12329, 12332, 12335, 0, 12338, 12342, 0, 12346, 12350, 0, 12354, - 12358, 0, 0, 12361, 0, 12365, 12370, 12374, 12379, 12383, 0, 0, 0, 0, - 12388, 12393, 0, 0, 12398, 12403, 12408, 0, 0, 0, 12412, 0, 0, 0, 0, 0, - 0, 0, 12416, 12420, 12424, 12428, 0, 12432, 0, 0, 0, 0, 0, 0, 0, 12436, - 12440, 12443, 12446, 12449, 12452, 12455, 12458, 12461, 12464, 12467, - 12470, 12473, 12476, 12479, 12484, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 12488, 12492, 12496, 0, 12500, 12503, 12507, 12510, 12514, 12517, 12521, - 12525, 12529, 0, 12534, 12537, 12541, 0, 12546, 12549, 12553, 12556, - 12560, 12564, 12568, 12572, 12576, 12580, 12584, 12588, 12592, 12596, - 12600, 12604, 12608, 12612, 12616, 12620, 12624, 12628, 0, 12632, 12635, - 12639, 12643, 12647, 12650, 12653, 0, 12656, 12660, 0, 12664, 12668, - 12672, 12676, 12680, 0, 0, 12683, 12687, 12691, 12696, 12700, 12705, - 12709, 12714, 12719, 12725, 0, 12731, 12735, 12740, 0, 12746, 12750, - 12755, 0, 0, 12759, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12762, - 12767, 12772, 12777, 0, 0, 12783, 12787, 12790, 12793, 12796, 12799, - 12802, 12805, 12808, 12811, 0, 12814, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 12818, 12822, 12826, 0, 12830, 12833, 12837, 12840, 12844, - 12847, 12851, 12855, 0, 0, 12859, 12862, 0, 0, 12866, 12869, 12873, - 12876, 12880, 12884, 12888, 12892, 12896, 12900, 12904, 12908, 12912, - 12916, 12920, 12924, 12928, 12932, 12936, 12940, 12944, 12948, 0, 12952, - 12955, 12959, 12963, 12967, 12970, 12973, 0, 12976, 12980, 0, 12984, - 12988, 12992, 12996, 13000, 0, 0, 13003, 13007, 13011, 13016, 13020, - 13025, 13029, 13034, 13039, 0, 0, 13045, 13049, 0, 0, 13054, 13058, - 13063, 0, 0, 0, 0, 0, 0, 0, 0, 13067, 13073, 0, 0, 0, 0, 13079, 13083, 0, - 13087, 13091, 13096, 13101, 13106, 0, 0, 13112, 13116, 13119, 13122, - 13125, 13128, 13131, 13134, 13137, 13140, 13143, 13146, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13150, 13154, 0, 13158, 13161, 13165, - 13168, 13172, 13175, 0, 0, 0, 13179, 13182, 13186, 0, 13190, 13193, - 13197, 13201, 0, 0, 0, 13204, 13208, 0, 13212, 0, 13216, 13220, 0, 0, 0, - 13224, 13228, 0, 0, 0, 13232, 13236, 13240, 0, 0, 0, 13243, 13246, 13249, - 13252, 13256, 13260, 13264, 13268, 13272, 13276, 13280, 13284, 0, 0, 0, - 0, 13287, 13292, 13296, 13301, 13305, 0, 0, 0, 13310, 13314, 13319, 0, - 13324, 13328, 13333, 13338, 0, 0, 13342, 0, 0, 0, 0, 0, 0, 13345, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13351, 13355, 13358, 13361, 13364, - 13367, 13370, 13373, 13376, 13379, 13382, 13386, 13391, 13396, 13400, - 13404, 13408, 13412, 13416, 13421, 13425, 0, 0, 0, 0, 0, 0, 13428, 13432, - 13436, 0, 13440, 13443, 13447, 13450, 13454, 13457, 13461, 13465, 0, - 13469, 13472, 13476, 0, 13480, 13483, 13487, 13491, 13494, 13498, 13502, - 13506, 13510, 13514, 13518, 13522, 13526, 13530, 13534, 13538, 13542, - 13546, 13550, 13554, 13558, 13562, 13566, 0, 13570, 13573, 13577, 13581, - 13585, 13588, 13591, 13594, 13598, 13602, 0, 13606, 13610, 13614, 13618, - 13622, 0, 0, 0, 13625, 13629, 13634, 13638, 13643, 13647, 13652, 13657, - 0, 13663, 13667, 13672, 0, 13677, 13681, 13686, 13691, 0, 0, 0, 0, 0, 0, - 0, 13695, 13699, 0, 13705, 13709, 0, 0, 0, 0, 0, 0, 13713, 13718, 13723, - 13728, 0, 0, 13734, 13738, 13741, 13744, 13747, 13750, 13753, 13756, - 13759, 13762, 0, 0, 0, 0, 0, 0, 0, 0, 13765, 13778, 13790, 13802, 13814, - 13826, 13838, 13850, 0, 0, 13854, 13858, 0, 13862, 13865, 13869, 13872, - 13876, 13879, 13883, 13887, 0, 13891, 13894, 13898, 0, 13902, 13905, - 13909, 13913, 13916, 13920, 13924, 13928, 13932, 13936, 13940, 13944, - 13948, 13952, 13956, 13960, 13964, 13968, 13972, 13976, 13980, 13984, - 13988, 0, 13992, 13995, 13999, 14003, 14007, 14010, 14013, 14016, 14020, - 14024, 0, 14028, 14032, 14036, 14040, 14044, 0, 0, 14047, 14051, 14055, - 14060, 14064, 14069, 14073, 14078, 14083, 0, 14089, 14093, 14098, 0, - 14103, 14107, 14112, 14117, 0, 0, 0, 0, 0, 0, 0, 14121, 14125, 0, 0, 0, - 0, 0, 0, 0, 14131, 0, 14135, 14140, 14145, 14150, 0, 0, 14156, 14160, - 14163, 14166, 14169, 14172, 14175, 14178, 14181, 14184, 0, 14187, 14191, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 14195, 14199, 0, 14203, - 14206, 14210, 14213, 14217, 14220, 14224, 14228, 0, 14232, 14235, 14239, - 0, 14243, 14246, 14250, 14254, 14257, 14261, 14265, 14269, 14273, 14277, - 14281, 14285, 14289, 14293, 14297, 14301, 14305, 14309, 14313, 14317, - 14321, 14325, 14329, 0, 14333, 14336, 14340, 14344, 14348, 14351, 14354, - 14357, 14361, 14365, 14369, 14373, 14377, 14381, 14385, 14389, 0, 0, 0, - 14392, 14396, 14401, 14405, 14410, 14414, 14419, 14424, 0, 14430, 14434, - 14439, 0, 14444, 14448, 14453, 14458, 0, 0, 0, 0, 0, 0, 0, 0, 0, 14462, - 0, 0, 0, 0, 0, 0, 0, 0, 14468, 14473, 14478, 14483, 0, 0, 14489, 14493, - 14496, 14499, 14502, 14505, 14508, 14511, 14514, 14517, 14520, 14524, - 14529, 14534, 14540, 14546, 0, 0, 0, 14552, 14556, 14562, 14567, 14573, - 14578, 14584, 0, 0, 14590, 14594, 0, 14598, 14602, 14606, 14610, 14614, - 14618, 14622, 14626, 14630, 14634, 14638, 14642, 14646, 14650, 14654, - 14658, 14662, 14666, 0, 0, 0, 14670, 14676, 14682, 14688, 14694, 14700, - 14706, 14712, 14718, 14724, 14730, 14736, 14744, 14750, 14756, 14762, - 14768, 14774, 14780, 14786, 14792, 14798, 14804, 14810, 0, 14816, 14822, - 14828, 14834, 14840, 14846, 14850, 14856, 14860, 0, 14864, 0, 0, 14870, - 14874, 14880, 14886, 14892, 14896, 14902, 0, 0, 0, 14906, 0, 0, 0, 0, - 14910, 14915, 14922, 14929, 14936, 14943, 0, 14950, 0, 14957, 14962, - 14967, 14974, 14981, 14990, 15001, 15010, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 15015, 15022, 15029, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 15034, 15040, 15046, 15052, 15058, 15064, 15070, 15076, 15082, - 15088, 15094, 15100, 15106, 15112, 15118, 15123, 15129, 15135, 15141, - 15147, 15153, 15158, 15164, 15170, 15176, 15182, 15188, 15194, 15200, - 15206, 15212, 15218, 15224, 15229, 15235, 15241, 15245, 15251, 15255, - 15261, 15267, 15273, 15279, 15285, 15291, 15296, 15302, 15306, 15311, - 15317, 15323, 15329, 15334, 15340, 15346, 15352, 15357, 15363, 0, 0, 0, - 0, 15367, 15373, 15378, 15384, 15389, 15397, 15405, 15409, 15413, 15417, - 15423, 15429, 15435, 15441, 15445, 15449, 15453, 15457, 15461, 15464, - 15467, 15470, 15473, 15476, 15479, 15482, 15485, 15488, 15492, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15496, 15500, 0, 15506, 0, 0, 15512, 15516, - 0, 15520, 0, 0, 15526, 0, 0, 0, 0, 0, 0, 15530, 15534, 15537, 15543, 0, - 15549, 15553, 15557, 15561, 15567, 15573, 15579, 0, 15585, 15589, 15593, - 0, 15599, 0, 15605, 0, 0, 15609, 15615, 0, 15621, 15624, 15630, 15633, - 15637, 15644, 15649, 15654, 15658, 15663, 15668, 15673, 15677, 0, 15682, - 15689, 15695, 0, 0, 15701, 15705, 15710, 15714, 15719, 0, 15724, 0, - 15729, 15735, 15741, 15747, 15753, 15757, 0, 0, 15760, 15764, 15767, - 15770, 15773, 15776, 15779, 15782, 15785, 15788, 0, 0, 15791, 15796, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 15801, 15805, 15816, 15831, 15846, 15856, - 15867, 15880, 15891, 15897, 15905, 15915, 15921, 15929, 15933, 15939, - 15945, 15953, 15963, 15971, 15984, 15990, 15998, 16006, 16018, 16025, - 16033, 16041, 16049, 16057, 16065, 16073, 16083, 16087, 16090, 16093, - 16096, 16099, 16102, 16105, 16108, 16111, 16114, 16118, 16122, 16126, - 16130, 16134, 16138, 16142, 16146, 16150, 16155, 16161, 16171, 16185, - 16195, 16201, 16207, 16215, 16223, 16231, 16239, 16245, 16251, 16254, - 16258, 16262, 16266, 16270, 16274, 16278, 0, 16282, 16286, 16290, 16294, - 16298, 16302, 16306, 16310, 16314, 16318, 16322, 16326, 16329, 16333, - 16337, 16341, 16344, 16348, 16352, 16356, 16360, 16364, 16368, 16372, - 16376, 16379, 16382, 16386, 16390, 16394, 16398, 16401, 16404, 16408, - 16413, 16417, 0, 0, 0, 0, 16421, 16426, 16430, 16435, 16439, 16444, - 16449, 16455, 16460, 16466, 16470, 16475, 16479, 16484, 16494, 16500, - 16505, 16511, 16521, 16527, 16531, 16535, 16541, 16547, 16555, 16561, - 16569, 0, 0, 0, 0, 16577, 16582, 16588, 16594, 16600, 16606, 16612, - 16618, 0, 16624, 16630, 16636, 16642, 16648, 16654, 16660, 16666, 16672, - 16678, 16684, 16690, 16695, 16701, 16707, 16713, 16718, 16724, 16730, - 16736, 16742, 16748, 16754, 16760, 16766, 16771, 16776, 16782, 16788, - 16794, 16800, 16805, 16810, 16816, 16824, 16831, 0, 16838, 16845, 16858, - 16865, 16872, 16880, 16888, 16894, 16900, 16906, 16916, 16921, 16927, - 16937, 16947, 0, 16957, 16967, 16975, 16987, 16999, 17005, 17019, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17034, 17037, 17041, - 17045, 17049, 17053, 17057, 17061, 17065, 17069, 17073, 17077, 17081, - 17085, 17089, 17093, 17097, 17101, 17105, 17109, 17113, 17117, 17120, - 17124, 17128, 17132, 17135, 17138, 17141, 17145, 17149, 17153, 17156, - 17160, 17163, 17168, 17171, 17175, 17178, 17182, 17185, 17190, 17193, - 17197, 17204, 17209, 17213, 17218, 17222, 17227, 17231, 17236, 17243, - 17249, 17254, 17258, 17262, 17266, 17270, 17274, 17280, 17286, 17293, - 17299, 17305, 17309, 17312, 17315, 17318, 17321, 17324, 17327, 17330, - 17333, 17336, 17342, 17346, 17350, 17354, 17358, 17362, 17366, 17370, - 17374, 17379, 17383, 17388, 17393, 17399, 17404, 17410, 17416, 17422, - 17428, 17434, 17443, 17451, 17460, 17468, 17477, 17486, 17497, 17507, - 17517, 17528, 17539, 17549, 17559, 17569, 17579, 17589, 17599, 17609, - 17619, 17627, 17634, 17640, 17647, 17652, 17658, 17664, 17670, 17676, - 17682, 17688, 17694, 17700, 17706, 17712, 17718, 17723, 17732, 17739, - 17745, 17752, 17760, 17766, 17772, 17778, 17784, 17792, 17800, 17810, - 17818, 17826, 17832, 17837, 17842, 17847, 17852, 17857, 17862, 17867, - 17872, 0, 0, 0, 0, 17877, 17882, 17888, 17893, 17898, 17903, 17908, - 17913, 17918, 17923, 17928, 17933, 17938, 17943, 17948, 17953, 17958, - 17963, 17968, 17973, 17978, 17983, 17988, 17993, 17998, 18003, 18008, - 18013, 18018, 18023, 18028, 18033, 18038, 18043, 18048, 18053, 18058, - 18063, 18068, 18073, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 18078, 18082, 18086, - 18090, 18094, 18098, 18102, 18106, 18110, 18114, 18118, 18122, 18126, - 18130, 18134, 18138, 18142, 18146, 18150, 18154, 18158, 18162, 18166, - 18170, 18174, 18178, 18182, 18186, 18190, 18194, 18198, 18202, 18206, - 18210, 18214, 18218, 18222, 18226, 18230, 18234, 18238, 18242, 18247, - 18251, 18256, 0, 0, 0, 18261, 18265, 18269, 18273, 18277, 18281, 18285, - 18289, 18293, 18297, 18301, 18305, 18309, 18313, 18317, 18321, 18325, - 18329, 18333, 18337, 18341, 18345, 18349, 18353, 18357, 18361, 18365, - 18369, 18373, 18377, 18381, 18385, 18389, 18393, 18397, 18401, 18405, - 18409, 18413, 18417, 18421, 18425, 18429, 18433, 18437, 18441, 18445, - 18449, 18453, 18457, 18461, 18465, 18469, 18473, 18477, 18481, 18485, - 18489, 18493, 18497, 18501, 18505, 18509, 18513, 18517, 18521, 18525, - 18529, 18533, 18537, 18541, 18545, 18549, 18553, 18557, 18561, 18565, - 18569, 18573, 18577, 18581, 18585, 18589, 18593, 18597, 18601, 18605, - 18609, 18613, 18617, 0, 0, 0, 0, 0, 18621, 18625, 18629, 18632, 18636, - 18639, 18643, 18647, 18650, 18654, 18658, 18661, 18665, 18669, 18673, - 18677, 18680, 18684, 18688, 18692, 18696, 18700, 18704, 18707, 18711, - 18715, 18719, 18723, 18727, 18731, 18735, 18739, 18743, 18747, 18751, - 18755, 18759, 18763, 18767, 18771, 18775, 18779, 18783, 18787, 18791, - 18795, 18799, 18803, 18807, 18811, 18815, 18819, 18823, 18827, 18831, - 18835, 18839, 18843, 18847, 18851, 18855, 18859, 18863, 18867, 18871, - 18875, 18879, 18883, 0, 0, 0, 0, 0, 18887, 18891, 18895, 18899, 18903, - 18907, 18911, 18915, 18919, 18923, 18927, 18931, 18935, 18939, 18943, - 18947, 18951, 18955, 18959, 18963, 18967, 18971, 18975, 18979, 18983, - 18987, 18991, 18995, 18999, 19003, 19007, 19011, 19015, 19019, 19023, - 19027, 19031, 19035, 19039, 19043, 19047, 19051, 19055, 19059, 19063, - 19067, 19071, 19075, 19079, 19083, 19087, 19091, 19095, 19099, 19103, - 19107, 19111, 19115, 19119, 19123, 19127, 19131, 19135, 19139, 19143, - 19147, 19151, 19155, 19159, 19163, 19167, 19171, 19175, 19179, 19183, - 19187, 19191, 19195, 19199, 19203, 19207, 19211, 0, 0, 0, 0, 0, 0, 19215, - 19218, 19222, 19226, 19230, 19234, 19238, 19242, 19246, 19250, 19254, + 75, 78, 82, 86, 91, 96, 101, 105, 110, 115, 120, 124, 129, 134, 138, 142, + 146, 150, 155, 160, 164, 168, 173, 177, 182, 187, 192, 197, 202, 205, + 209, 212, 216, 219, 223, 227, 232, 237, 242, 246, 251, 256, 261, 265, + 270, 275, 279, 283, 287, 291, 296, 301, 305, 309, 314, 318, 323, 328, + 333, 338, 343, 347, 350, 354, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 356, 360, 365, + 368, 371, 374, 377, 380, 383, 385, 388, 394, 402, 404, 408, 411, 413, + 416, 419, 422, 425, 429, 432, 435, 439, 441, 444, 450, 458, 465, 472, + 479, 484, 491, 497, 504, 511, 518, 526, 531, 539, 546, 552, 559, 566, + 574, 581, 589, 597, 602, 610, 617, 623, 630, 637, 644, 647, 653, 660, + 666, 673, 680, 687, 692, 698, 705, 711, 718, 725, 732, 740, 745, 753, + 760, 766, 773, 780, 788, 795, 803, 811, 816, 824, 831, 837, 844, 851, + 858, 861, 867, 874, 880, 887, 894, 901, 906, 914, 921, 928, 935, 942, + 949, 956, 963, 970, 978, 986, 994, 1002, 1010, 1018, 1026, 1034, 1041, + 1048, 1055, 1062, 1069, 1076, 1083, 1090, 1097, 1104, 1111, 1118, 1126, + 1134, 1142, 1150, 1158, 1166, 1174, 1182, 1190, 1198, 1205, 1212, 1220, + 1228, 1236, 1244, 1252, 1260, 1268, 1276, 1284, 1290, 1295, 1300, 1308, + 1316, 1324, 1332, 1337, 1344, 1351, 1359, 1367, 1375, 1383, 1393, 1403, + 1410, 1417, 1424, 1431, 1439, 1447, 1455, 1463, 1474, 1479, 1484, 1491, + 1498, 1505, 1512, 1519, 1526, 1531, 1536, 1543, 1550, 1558, 1566, 1574, + 1582, 1589, 1596, 1604, 1612, 1620, 1628, 1636, 1644, 1652, 1660, 1668, + 1676, 1683, 1690, 1697, 1704, 1711, 1718, 1725, 1732, 1740, 1748, 1755, + 1762, 1769, 1776, 1784, 1792, 1800, 1808, 1816, 1823, 1830, 1838, 1846, + 1854, 1862, 1867, 1873, 1879, 1886, 1893, 1898, 1903, 1909, 1916, 1923, + 1930, 1937, 1945, 1953, 1959, 1964, 1969, 1975, 1982, 1989, 1996, 2001, + 2006, 2011, 2018, 2025, 2032, 2039, 2046, 2051, 2059, 2069, 2078, 2085, + 2092, 2097, 2102, 2109, 2116, 2120, 2125, 2130, 2135, 2142, 2151, 2158, + 2165, 2174, 2181, 2188, 2193, 2200, 2207, 2214, 2221, 2228, 2233, 2240, + 2247, 2255, 2260, 2265, 2270, 2280, 2284, 2290, 2296, 2302, 2308, 2316, + 2329, 2337, 2342, 2352, 2357, 2362, 2372, 2377, 2384, 2391, 2399, 2407, + 2414, 2421, 2428, 2435, 2445, 2455, 2464, 2473, 2483, 2493, 2503, 2513, + 2518, 2528, 2538, 2548, 2558, 2566, 2574, 2581, 2588, 2596, 2604, 2612, + 2620, 2627, 2634, 2644, 2654, 2662, 2670, 2678, 2683, 2693, 2698, 2705, + 2712, 2717, 2722, 2730, 2738, 2748, 2758, 2765, 2772, 2780, 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, 3354, 3360, 3366, 3373, + 3380, 3391, 3401, 3408, 3415, 3422, 3429, 3434, 3439, 3445, 3451, 3457, + 3465, 3473, 3480, 3485, 3490, 3497, 3503, 3510, 3519, 3528, 3537, 3544, + 3550, 3556, 3561, 3568, 3574, 3581, 3588, 3595, 3600, 3605, 3615, 3623, + 3632, 3637, 3642, 3652, 3659, 3667, 3676, 3681, 3687, 3693, 3700, 3705, + 3710, 3720, 3728, 3737, 3745, 3753, 3762, 3767, 3774, 3781, 3786, 3797, + 3805, 3813, 3819, 3828, 3833, 3838, 3845, 3851, 3857, 3863, 3869, 3878, + 3886, 3891, 3899, 3905, 3913, 3921, 3927, 3933, 3939, 3947, 3955, 3961, + 3969, 3975, 3980, 3987, 3995, 4004, 4011, 4018, 4028, 4035, 4042, 4052, + 4059, 4066, 4073, 4079, 4085, 4094, 4106, 4111, 4118, 4123, 4127, 4132, + 4140, 4147, 4152, 4157, 4161, 4166, 4171, 4175, 4180, 4186, 4192, 4198, + 4205, 4210, 4215, 4220, 4225, 4231, 4233, 4238, 4242, 4248, 4254, 4260, + 4265, 4272, 4279, 4285, 4292, 4300, 4308, 4313, 4318, 4322, 4327, 4329, + 4331, 4334, 4336, 4339, 4344, 4349, 4355, 4360, 4364, 4368, 4373, 4381, + 4387, 4392, 4398, 4403, 4409, 4417, 4425, 4429, 4433, 4438, 4444, 4450, + 4456, 4462, 4467, 4475, 4484, 4493, 4498, 4504, 4511, 4518, 4525, 4532, + 4536, 4542, 4547, 4552, 4557, 4562, 4565, 4568, 4571, 4574, 4577, 4580, + 4584, 4588, 4594, 4597, 4602, 4608, 4614, 4617, 4622, 4627, 4631, 4636, + 4642, 4648, 4654, 4659, 4664, 4669, 4672, 4678, 4683, 4688, 4692, 4697, + 4703, 4709, 4712, 4716, 4720, 4724, 4727, 4730, 4735, 4739, 4746, 4750, + 4756, 4760, 4766, 4770, 4774, 4778, 4783, 4788, 4794, 4799, 4806, 4812, + 4818, 4824, 4827, 4831, 4835, 4839, 4843, 4848, 4853, 4857, 4861, 4867, + 4871, 4875, 4880, 4886, 4891, 4896, 4900, 4906, 4911, 4916, 4921, 4926, + 4932, 4935, 4939, 4944, 4949, 4958, 4964, 4969, 4973, 4978, 4982, 4987, + 4991, 4995, 5000, 5004, 5010, 5015, 5020, 5025, 5030, 5035, 5040, 5046, + 5052, 5058, 5063, 5068, 5074, 5080, 5086, 5091, 5096, 5103, 5110, 5114, + 5120, 5127, 0, 0, 5134, 5137, 5145, 5154, 5164, 0, 0, 0, 0, 0, 5168, + 5171, 5176, 5184, 5189, 5197, 5205, 0, 5213, 0, 5221, 5229, 5237, 5248, + 5253, 5258, 5263, 5268, 5273, 5278, 5283, 5288, 5293, 5298, 5303, 5308, + 5313, 5318, 5323, 5328, 0, 5333, 5338, 5343, 5348, 5353, 5358, 5363, + 5368, 5376, 5384, 5392, 5400, 5408, 5416, 5427, 5432, 5437, 5442, 5447, + 5452, 5457, 5462, 5467, 5472, 5477, 5482, 5487, 5492, 5497, 5502, 5507, + 5512, 5518, 5523, 5528, 5533, 5538, 5543, 5548, 5553, 5561, 5569, 5577, + 5585, 5593, 5598, 5602, 5606, 5613, 5623, 5633, 5637, 5641, 5645, 5651, + 5658, 5662, 5667, 5671, 5676, 5680, 5685, 5689, 5694, 5699, 5704, 5709, + 5714, 5719, 5724, 5729, 5734, 5739, 5744, 5749, 5754, 5759, 5764, 5768, + 5772, 5778, 5782, 5787, 5793, 5800, 5805, 5810, 5817, 5822, 5827, 5833, + 5841, 5850, 5860, 5868, 5873, 5878, 5883, 5890, 5895, 5901, 5906, 5911, + 5916, 5921, 5926, 5931, 5939, 5945, 5950, 5954, 5959, 5964, 5969, 5974, + 5979, 5984, 5989, 5993, 5999, 6003, 6008, 6013, 6018, 6022, 6027, 6032, + 6037, 6042, 6046, 6051, 6055, 6060, 6065, 6070, 6075, 6081, 6086, 6092, + 6096, 6101, 6105, 6109, 6114, 6119, 6124, 6129, 6134, 6139, 6144, 6148, + 6154, 6158, 6163, 6168, 6173, 6177, 6182, 6187, 6192, 6197, 6201, 6206, + 6210, 6215, 6220, 6225, 6230, 6236, 6241, 6247, 6251, 6256, 6260, 6268, + 6273, 6278, 6283, 6290, 6295, 6301, 6306, 6311, 6316, 6321, 6326, 6331, + 6339, 6345, 6350, 6355, 6360, 6365, 6370, 6376, 6382, 6389, 6396, 6405, + 6414, 6421, 6428, 6437, 6446, 6451, 6456, 6461, 6466, 6471, 6476, 6481, + 6486, 6497, 6508, 6513, 6518, 6525, 6532, 6540, 6548, 6553, 6558, 6563, + 6568, 6572, 6576, 6580, 6585, 6590, 6594, 6601, 6606, 6616, 6626, 6632, + 6638, 6646, 6654, 6662, 6670, 6677, 6684, 6693, 6702, 6710, 6718, 6726, + 6734, 6741, 6748, 6755, 6762, 6768, 6774, 6780, 6786, 6794, 6802, 6809, + 6816, 6825, 6834, 6840, 6846, 6854, 6862, 6870, 6878, 6884, 6890, 6898, + 6906, 6914, 6922, 6929, 6936, 6944, 6952, 6960, 6968, 6973, 6978, 6985, + 6992, 7002, 7012, 7016, 7024, 7032, 7038, 7044, 7052, 7060, 7067, 7074, + 7082, 7090, 7097, 7104, 7112, 7120, 7125, 7132, 7139, 7146, 7153, 7159, + 7165, 7173, 7181, 7186, 7191, 7199, 7207, 7215, 7223, 7231, 7239, 7246, + 7253, 7261, 7269, 7277, 7285, 7292, 7299, 7305, 7311, 7320, 7329, 7336, + 7343, 7350, 7357, 7364, 7371, 7378, 7385, 7393, 7401, 7409, 7417, 7425, + 7433, 7442, 7451, 7458, 7465, 7472, 7479, 7486, 7493, 7500, 7507, 7514, + 7521, 7528, 7535, 7542, 7549, 7556, 7563, 7570, 7577, 7584, 7591, 7597, + 7603, 7610, 7617, 7622, 7627, 7632, 7637, 7642, 7647, 7652, 7657, 7662, + 7667, 7673, 7679, 7688, 7697, 7706, 7715, 7723, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 7731, 7736, 7741, 7746, 7751, 7756, 7761, 7766, 7771, 7775, + 7780, 7785, 7790, 7795, 7800, 7805, 7810, 7815, 7820, 7825, 7830, 7835, + 7840, 7845, 7850, 7855, 7860, 7865, 7869, 7874, 7879, 7884, 7889, 7894, + 7899, 7904, 7909, 7914, 0, 0, 7919, 7926, 7929, 7933, 7937, 7940, 7944, + 0, 7948, 7953, 7958, 7963, 7968, 7973, 7978, 7983, 7988, 7992, 7997, + 8002, 8007, 8012, 8017, 8022, 8027, 8032, 8037, 8042, 8047, 8052, 8057, + 8062, 8067, 8072, 8077, 8082, 8086, 8091, 8096, 8101, 8106, 8111, 8116, + 8121, 8126, 8131, 8136, 0, 8143, 8148, 0, 0, 0, 0, 0, 0, 8151, 8156, + 8161, 8166, 8173, 8180, 8185, 8190, 8195, 8200, 8205, 8210, 8215, 8222, + 8227, 8234, 8241, 8246, 8253, 8258, 8263, 8268, 8275, 8280, 8285, 8292, + 8301, 8306, 8311, 8316, 8321, 8327, 8332, 8339, 8346, 8353, 8358, 8363, + 8368, 8373, 8378, 8383, 8393, 8398, 8406, 8411, 8416, 8421, 8426, 8433, + 8440, 8447, 8453, 8459, 8466, 0, 0, 0, 0, 0, 0, 0, 0, 8473, 8477, 8481, + 8485, 8489, 8493, 8497, 8501, 8505, 8509, 8513, 8518, 8522, 8526, 8531, + 8535, 8540, 8544, 8548, 8552, 8557, 8561, 8566, 8570, 8574, 8578, 8582, + 0, 0, 0, 0, 0, 8586, 8593, 8601, 8608, 8613, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 8618, 8621, 8625, 8630, 0, 0, 8634, 8640, 8646, 8649, 8656, 8665, + 8668, 8671, 8676, 8682, 8686, 8694, 8700, 8706, 8714, 8718, 8723, 8734, + 8739, 8743, 8747, 8751, 0, 0, 8754, 8761, 0, 8765, 8769, 8776, 8782, + 8789, 8795, 8801, 8805, 8809, 8815, 8819, 8823, 8827, 8831, 8835, 8839, + 8843, 8847, 8851, 8855, 8859, 8863, 8867, 8871, 8875, 8879, 8883, 8891, + 8899, 8909, 8918, 8927, 8930, 8934, 8938, 8942, 8946, 8950, 8954, 8958, + 8962, 8967, 8971, 8974, 8977, 8980, 8983, 8986, 8989, 8992, 8995, 8999, + 9002, 9005, 9010, 9015, 9021, 9024, 9031, 9040, 9045, 9049, 0, 9056, + 9061, 9065, 9069, 9073, 9077, 9081, 9085, 9089, 9093, 9097, 9101, 9106, + 9111, 9118, 9124, 9130, 9136, 9141, 9149, 9157, 9162, 9168, 9174, 9180, + 9186, 9190, 9194, 9198, 9205, 9215, 9219, 9223, 9227, 9233, 9241, 9245, + 9249, 9256, 9260, 9264, 9268, 9275, 9282, 9294, 9298, 9302, 9306, 9316, + 9325, 9329, 9337, 9344, 9351, 9360, 9371, 9379, 9383, 9392, 9403, 9411, + 9424, 9432, 9440, 9448, 9456, 9462, 9471, 9478, 9482, 9490, 9494, 9501, + 9509, 9513, 9519, 9526, 9533, 9537, 9545, 9549, 9556, 9560, 9568, 9572, + 9580, 9588, 9595, 9603, 9611, 9618, 9624, 9628, 9635, 9643, 9649, 9656, + 9663, 9669, 9678, 9686, 9693, 9699, 9703, 9706, 9710, 9716, 9724, 9728, + 9734, 9740, 9747, 9754, 9757, 9764, 9769, 9777, 9782, 9786, 9799, 9812, + 9818, 9825, 9830, 9836, 9841, 9847, 9857, 9864, 9873, 9883, 9889, 9894, + 9899, 9903, 9907, 9912, 9917, 9923, 9931, 9939, 9950, 9955, 9964, 9973, + 9980, 9986, 9992, 9998, 10004, 10010, 10016, 10022, 10028, 10034, 10041, + 10048, 10055, 10061, 10069, 10078, 10084, 10091, 10098, 10103, 10108, + 10112, 10119, 10126, 10135, 10144, 10147, 10152, 10157, 0, 10162, 10166, + 10170, 10176, 10180, 10184, 10190, 10194, 10202, 10206, 10210, 10214, + 10218, 10222, 10228, 10232, 10238, 10242, 10246, 10250, 10254, 10258, + 10263, 10266, 10270, 10275, 10279, 10283, 10287, 10291, 10295, 10301, + 10307, 10313, 10317, 10321, 10326, 10330, 10334, 10339, 10343, 10347, + 10354, 10361, 10365, 10369, 10374, 10378, 10382, 10385, 10390, 10393, + 10396, 10401, 10406, 10410, 10414, 10420, 10426, 10429, 0, 0, 10432, + 10438, 10444, 10450, 10460, 10472, 10484, 10501, 10513, 10524, 10532, + 10539, 10550, 10565, 10576, 10582, 10591, 10599, 10611, 10621, 10629, + 10641, 10648, 10656, 10668, 10674, 10680, 10688, 10696, 10704, 10710, + 10720, 10727, 10737, 10747, 10760, 10774, 10788, 10798, 10809, 10820, + 10833, 10846, 10860, 10872, 10884, 10897, 10910, 10922, 10935, 10944, + 10952, 10957, 10962, 10967, 10972, 10977, 10982, 10987, 10992, 10997, + 11002, 11007, 11012, 11017, 11022, 11027, 11032, 11037, 11042, 11047, + 11052, 11057, 11062, 11067, 11072, 11077, 11082, 11087, 11092, 11097, + 11102, 11107, 11112, 11116, 11121, 11126, 11131, 11136, 11141, 11145, + 11149, 11153, 11157, 11161, 11165, 11169, 11173, 11177, 11181, 11185, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11190, 11195, 11199, 11203, 11207, + 11211, 11215, 11219, 11223, 11227, 11231, 11235, 11240, 11244, 11248, + 11252, 11257, 11261, 11266, 11270, 11275, 11279, 11284, 11289, 11294, + 11299, 11303, 11308, 11313, 11318, 11323, 11327, 11332, 11339, 11343, + 11348, 11352, 11356, 11361, 11365, 11372, 11379, 11386, 11392, 11400, + 11408, 11417, 11425, 11432, 11439, 11447, 11453, 11459, 11465, 11471, + 11478, 11483, 11487, 11492, 0, 0, 0, 0, 0, 11496, 11500, 11504, 11508, + 11512, 11516, 11520, 11524, 11528, 11532, 11536, 11540, 11544, 11548, + 11552, 11556, 11560, 11564, 11568, 11572, 11576, 11580, 11584, 11588, + 11592, 11596, 11600, 11607, 11613, 11618, 11622, 11629, 11635, 11640, + 11646, 11651, 11655, 11661, 11667, 11672, 11676, 11680, 11685, 11689, + 11693, 11698, 0, 0, 11702, 11707, 11712, 11717, 11722, 11727, 11732, + 11736, 11743, 11748, 11753, 11758, 11763, 11768, 11775, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11780, 11786, + 11790, 11794, 11798, 11803, 11806, 11810, 11813, 11817, 11820, 11824, + 11828, 11832, 11837, 11842, 11845, 11849, 11854, 11859, 11862, 11866, + 11869, 11873, 11877, 11881, 11885, 11889, 11893, 11897, 11901, 11905, + 11909, 11913, 11917, 11921, 11925, 11929, 11933, 11937, 11941, 11944, + 11948, 11951, 11955, 11959, 11963, 11966, 11969, 11972, 11976, 11980, + 11984, 11988, 11992, 11996, 12000, 12004, 0, 0, 12007, 12011, 12015, + 12020, 12024, 12029, 12033, 12038, 12043, 12049, 12055, 12061, 12065, + 12070, 12076, 12082, 12086, 12091, 12095, 0, 12101, 12104, 12110, 12116, + 12121, 12126, 0, 0, 12133, 12137, 12141, 12145, 12149, 12153, 12157, + 12161, 12165, 12170, 12175, 12180, 12186, 12189, 12193, 12197, 12200, + 12203, 12206, 12209, 12212, 12215, 12218, 12221, 12224, 12228, 12235, 0, + 0, 0, 0, 0, 0, 12240, 12244, 12248, 12252, 12256, 12262, 12266, 0, 12270, + 12274, 12278, 0, 12282, 12285, 12289, 12292, 12296, 12299, 12303, 12307, + 0, 0, 12311, 12314, 0, 0, 12318, 12321, 12325, 12328, 12332, 12336, + 12340, 12344, 12348, 12352, 12356, 12360, 12364, 12368, 12372, 12376, + 12380, 12384, 12388, 12392, 12396, 12400, 0, 12403, 12406, 12410, 12414, + 12418, 12421, 12424, 0, 12427, 0, 0, 0, 12431, 12435, 12439, 12443, 0, 0, + 12446, 12450, 12454, 12459, 12463, 12468, 12472, 12477, 12482, 0, 0, + 12488, 12492, 0, 0, 12497, 12501, 12506, 12510, 0, 0, 0, 0, 0, 0, 0, 0, + 12516, 0, 0, 0, 0, 12522, 12526, 0, 12530, 12534, 12539, 12544, 12549, 0, + 0, 12555, 12559, 12562, 12565, 12568, 12571, 12574, 12577, 12580, 12583, + 12586, 12595, 12604, 12608, 12612, 12618, 12624, 12630, 12636, 12650, + 12657, 12660, 0, 0, 0, 0, 0, 12664, 12670, 12674, 0, 12678, 12681, 12685, + 12688, 12692, 12695, 0, 0, 0, 0, 12699, 12703, 0, 0, 12707, 12711, 12715, + 12718, 12722, 12726, 12730, 12734, 12738, 12742, 12746, 12750, 12754, + 12758, 12762, 12766, 12770, 12774, 12778, 12782, 12786, 12790, 0, 12793, + 12796, 12800, 12804, 12808, 12811, 12814, 0, 12817, 12821, 0, 12825, + 12829, 0, 12833, 12837, 0, 0, 12840, 0, 12844, 12849, 12853, 12858, + 12862, 0, 0, 0, 0, 12867, 12872, 0, 0, 12877, 12882, 12887, 0, 0, 0, + 12891, 0, 0, 0, 0, 0, 0, 0, 12895, 12899, 12903, 12907, 0, 12911, 0, 0, + 0, 0, 0, 0, 0, 12915, 12919, 12922, 12925, 12928, 12931, 12934, 12937, + 12940, 12943, 12946, 12949, 12952, 12955, 12958, 12963, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 12967, 12971, 12975, 0, 12979, 12982, 12986, 12989, 12993, + 12996, 13000, 13004, 13008, 0, 13013, 13016, 13020, 0, 13025, 13028, + 13032, 13035, 13039, 13043, 13047, 13051, 13055, 13059, 13063, 13067, + 13071, 13075, 13079, 13083, 13087, 13091, 13095, 13099, 13103, 13107, 0, + 13110, 13113, 13117, 13121, 13125, 13128, 13131, 0, 13134, 13138, 0, + 13142, 13146, 13150, 13154, 13158, 0, 0, 13161, 13165, 13169, 13174, + 13178, 13183, 13187, 13192, 13197, 13203, 0, 13209, 13213, 13218, 0, + 13224, 13228, 13233, 0, 0, 13237, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 13240, 13245, 13250, 13255, 0, 0, 13261, 13265, 13268, 13271, + 13274, 13277, 13280, 13283, 13286, 13289, 0, 13292, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 13296, 13300, 13304, 0, 13308, 13311, 13315, + 13318, 13322, 13325, 13329, 13333, 0, 0, 13337, 13340, 0, 0, 13344, + 13347, 13351, 13354, 13358, 13362, 13366, 13370, 13374, 13378, 13382, + 13386, 13390, 13394, 13398, 13402, 13406, 13410, 13414, 13418, 13422, + 13426, 0, 13429, 13432, 13436, 13440, 13444, 13447, 13450, 0, 13453, + 13457, 0, 13461, 13465, 13469, 13473, 13477, 0, 0, 13480, 13484, 13488, + 13493, 13497, 13502, 13506, 13511, 13516, 0, 0, 13522, 13526, 0, 0, + 13531, 13535, 13540, 0, 0, 0, 0, 0, 0, 0, 0, 13544, 13550, 0, 0, 0, 0, + 13556, 13560, 0, 13564, 13568, 13573, 13578, 13583, 0, 0, 13589, 13593, + 13596, 13599, 13602, 13605, 13608, 13611, 13614, 13617, 13620, 13623, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13627, 13631, 0, 13635, + 13638, 13642, 13645, 13649, 13652, 0, 0, 0, 13656, 13659, 13663, 0, + 13667, 13670, 13674, 13678, 0, 0, 0, 13681, 13685, 0, 13689, 0, 13693, + 13697, 0, 0, 0, 13701, 13705, 0, 0, 0, 13709, 13712, 13716, 0, 0, 0, + 13719, 13722, 13725, 13728, 13732, 13736, 13740, 13744, 13748, 13752, + 13756, 13760, 0, 0, 0, 0, 13763, 13768, 13772, 13777, 13781, 0, 0, 0, + 13786, 13790, 13795, 0, 13800, 13804, 13809, 13814, 0, 0, 13818, 0, 0, 0, + 0, 0, 0, 13821, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13827, 13831, + 13834, 13837, 13840, 13843, 13846, 13849, 13852, 13855, 13858, 13862, + 13867, 13872, 13876, 13880, 13884, 13888, 13892, 13897, 13901, 0, 0, 0, + 0, 0, 0, 13904, 13908, 13912, 0, 13916, 13919, 13923, 13926, 13930, + 13933, 13937, 13941, 0, 13945, 13948, 13952, 0, 13956, 13959, 13963, + 13967, 13970, 13974, 13978, 13982, 13986, 13990, 13994, 13998, 14002, + 14006, 14010, 14014, 14018, 14022, 14026, 14030, 14034, 14038, 14042, 0, + 14045, 14048, 14052, 14056, 14060, 14063, 14066, 14069, 14073, 14077, 0, + 14081, 14085, 14089, 14093, 14097, 0, 0, 0, 14100, 14104, 14109, 14113, + 14118, 14122, 14127, 14132, 0, 14138, 14142, 14147, 0, 14152, 14156, + 14161, 14166, 0, 0, 0, 0, 0, 0, 0, 14170, 14174, 0, 14180, 14184, 0, 0, + 0, 0, 0, 0, 14188, 14193, 14198, 14203, 0, 0, 14209, 14213, 14216, 14219, + 14222, 14225, 14228, 14231, 14234, 14237, 0, 0, 0, 0, 0, 0, 0, 0, 14240, + 14253, 14265, 14277, 14289, 14301, 14313, 14325, 0, 0, 14329, 14333, 0, + 14337, 14340, 14344, 14347, 14351, 14354, 14358, 14362, 0, 14366, 14369, + 14373, 0, 14377, 14380, 14384, 14388, 14391, 14395, 14399, 14403, 14407, + 14411, 14415, 14419, 14423, 14427, 14431, 14435, 14439, 14443, 14447, + 14451, 14455, 14459, 14463, 0, 14466, 14469, 14473, 14477, 14481, 14484, + 14487, 14490, 14494, 14498, 0, 14502, 14506, 14510, 14514, 14518, 0, 0, + 14521, 14525, 14529, 14534, 14538, 14543, 14547, 14552, 14557, 0, 14563, + 14567, 14572, 0, 14577, 14581, 14586, 14591, 0, 0, 0, 0, 0, 0, 0, 14595, + 14599, 0, 0, 0, 0, 0, 0, 0, 14605, 0, 14609, 14614, 14619, 14624, 0, 0, + 14630, 14634, 14637, 14640, 14643, 14646, 14649, 14652, 14655, 14658, 0, + 14661, 14665, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 14669, 14673, + 0, 14677, 14680, 14684, 14687, 14691, 14694, 14698, 14702, 0, 14706, + 14709, 14713, 0, 14717, 14720, 14724, 14728, 14731, 14735, 14739, 14743, + 14747, 14751, 14755, 14759, 14763, 14767, 14771, 14775, 14779, 14783, + 14787, 14791, 14795, 14799, 14803, 0, 14806, 14809, 14813, 14817, 14821, + 14824, 14827, 14830, 14834, 14838, 14842, 14846, 14850, 14854, 14858, + 14862, 0, 0, 0, 14865, 14869, 14874, 14878, 14883, 14887, 14892, 14897, + 0, 14903, 14907, 14912, 0, 14917, 14921, 14926, 14931, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 14935, 0, 0, 0, 0, 0, 0, 0, 0, 14941, 14946, 14951, 14956, 0, 0, + 14962, 14966, 14969, 14972, 14975, 14978, 14981, 14984, 14987, 14990, + 14993, 14997, 15002, 15007, 15013, 15019, 0, 0, 0, 15025, 15029, 15035, + 15040, 15046, 15051, 15057, 0, 0, 15063, 15067, 0, 15071, 15075, 15079, + 15083, 15087, 15091, 15095, 15099, 15103, 15107, 15111, 15115, 15119, + 15123, 15127, 15131, 15135, 15139, 0, 0, 0, 15143, 15149, 15155, 15161, + 15167, 15173, 15179, 15185, 15191, 15197, 15203, 15209, 15217, 15223, + 15229, 15235, 15241, 15247, 15253, 15259, 15265, 15271, 15277, 15283, 0, + 15289, 15295, 15301, 15307, 15313, 15319, 15323, 15329, 15333, 0, 15337, + 0, 0, 15343, 15347, 15353, 15359, 15365, 15369, 15375, 0, 0, 0, 15379, 0, + 0, 0, 0, 15383, 15388, 15395, 15402, 15409, 15416, 0, 15423, 0, 15430, + 15435, 15440, 15447, 15454, 15463, 15474, 15483, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15488, 15495, 15502, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 15507, 15513, 15519, 15525, 15531, 15537, 15543, 15549, + 15555, 15561, 15567, 15573, 15579, 15585, 15591, 15596, 15602, 15608, + 15614, 15620, 15626, 15631, 15637, 15643, 15649, 15655, 15661, 15667, + 15673, 15679, 15685, 15691, 15697, 15702, 15708, 15714, 15718, 15724, + 15728, 15734, 15740, 15746, 15752, 15758, 15764, 15769, 15775, 15779, + 15784, 15790, 15796, 15802, 15807, 15813, 15819, 15825, 15830, 15836, 0, + 0, 0, 0, 15840, 15846, 15851, 15857, 15862, 15870, 15878, 15882, 15886, + 15890, 15896, 15902, 15908, 15914, 15918, 15922, 15926, 15930, 15934, + 15937, 15940, 15943, 15946, 15949, 15952, 15955, 15958, 15961, 15965, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15969, 15973, 0, 15979, 0, 0, 15985, + 15989, 0, 15993, 0, 0, 15999, 0, 0, 0, 0, 0, 0, 16003, 16007, 16010, + 16016, 0, 16022, 16026, 16030, 16034, 16040, 16046, 16052, 0, 16058, + 16062, 16066, 0, 16072, 0, 16078, 0, 0, 16082, 16088, 0, 16094, 16097, + 16103, 16106, 16110, 16117, 16122, 16127, 16131, 16136, 16141, 16146, + 16150, 0, 16155, 16162, 16168, 0, 0, 16174, 16178, 16183, 16187, 16192, + 0, 16197, 0, 16202, 16208, 16214, 16220, 16226, 16230, 0, 0, 16233, + 16237, 16240, 16243, 16246, 16249, 16252, 16255, 16258, 16261, 0, 0, + 16264, 16269, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16274, 16278, 16289, 16304, + 16319, 16329, 16340, 16353, 16364, 16370, 16378, 16388, 16394, 16402, + 16406, 16412, 16418, 16426, 16436, 16444, 16457, 16463, 16471, 16479, + 16491, 16498, 16506, 16514, 16522, 16530, 16538, 16546, 16556, 16560, + 16563, 16566, 16569, 16572, 16575, 16578, 16581, 16584, 16587, 16591, + 16595, 16599, 16603, 16607, 16611, 16615, 16619, 16623, 16628, 16634, + 16644, 16658, 16668, 16674, 16680, 16688, 16696, 16704, 16712, 16718, + 16724, 16727, 16731, 16735, 16739, 16743, 16747, 16751, 0, 16755, 16759, + 16763, 16767, 16771, 16775, 16779, 16783, 16787, 16791, 16795, 16798, + 16801, 16805, 16809, 16813, 16816, 16820, 16824, 16828, 16832, 16836, + 16840, 16844, 16848, 16851, 16854, 16858, 16862, 16866, 16870, 16873, + 16876, 16880, 16885, 16889, 0, 0, 0, 0, 16893, 16898, 16902, 16907, + 16911, 16916, 16921, 16927, 16932, 16938, 16942, 16947, 16951, 16956, + 16966, 16972, 16977, 16983, 16993, 16999, 17003, 17007, 17013, 17019, + 17027, 17033, 17041, 0, 0, 0, 0, 17049, 17054, 17060, 17066, 17072, + 17078, 17084, 17090, 0, 17096, 17102, 17108, 17114, 17120, 17126, 17132, + 17138, 17144, 17150, 17156, 17161, 17166, 17172, 17178, 17184, 17189, + 17195, 17201, 17207, 17213, 17219, 17225, 17231, 17237, 17242, 17247, + 17253, 17259, 17265, 17271, 17276, 17281, 17287, 17295, 17302, 0, 17309, + 17316, 17329, 17336, 17343, 17351, 17359, 17365, 17371, 17377, 17387, + 17392, 17398, 17408, 17418, 0, 17428, 17438, 17446, 17458, 17470, 17476, + 17490, 17505, 17510, 17515, 17523, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 17531, 17534, 17538, 17542, 17546, 17550, 17554, 17558, 17562, + 17566, 17570, 17574, 17578, 17582, 17586, 17590, 17594, 17598, 17602, + 17606, 17610, 17613, 17616, 17620, 17624, 17628, 17631, 17634, 17637, + 17641, 17645, 17649, 17652, 17656, 17659, 17664, 17667, 17671, 17674, + 17678, 17681, 17686, 17689, 17693, 17700, 17705, 17709, 17714, 17718, + 17723, 17727, 17732, 17739, 17745, 17750, 17754, 17758, 17762, 17766, + 17770, 17776, 17782, 17789, 17795, 17801, 17805, 17808, 17811, 17814, + 17817, 17820, 17823, 17826, 17829, 17832, 17838, 17842, 17846, 17850, + 17854, 17858, 17862, 17866, 17870, 17875, 17879, 17884, 17889, 17895, + 17900, 17906, 17912, 17918, 17924, 17930, 17938, 17946, 17955, 17963, + 17972, 17981, 17992, 18002, 18012, 18023, 18034, 18044, 18054, 18064, + 18074, 18084, 18094, 18104, 18114, 18122, 18129, 18135, 18142, 18147, + 18153, 18159, 18165, 18171, 18177, 18183, 18188, 18194, 18200, 18206, + 18212, 18217, 18226, 18233, 18239, 18246, 18254, 18260, 18266, 18272, + 18278, 18286, 18294, 18304, 18312, 18320, 18326, 18331, 18336, 18341, + 18346, 18351, 18356, 18361, 18366, 18371, 18377, 18383, 18389, 18396, + 18401, 18407, 18412, 18417, 18422, 18427, 18432, 18437, 18442, 18447, + 18452, 18457, 18462, 18467, 18472, 18477, 18482, 18487, 18492, 18497, + 18502, 18507, 18512, 18517, 18522, 18527, 18532, 18537, 18542, 18547, + 18552, 18557, 18562, 18567, 18572, 18577, 18582, 18587, 18592, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 18597, 18601, 18605, 18609, 18613, 18617, 18621, + 18625, 18629, 18633, 18637, 18641, 18645, 18649, 18653, 18657, 18661, + 18665, 18669, 18673, 18677, 18681, 18685, 18689, 18693, 18697, 18701, + 18705, 18709, 18713, 18717, 18721, 18725, 18729, 18733, 18737, 18741, + 18745, 18749, 18753, 18757, 18761, 18766, 18770, 18775, 0, 0, 0, 18780, + 18784, 18788, 18792, 18796, 18800, 18804, 18808, 18812, 18816, 18820, + 18824, 18828, 18832, 18836, 18840, 18844, 18848, 18852, 18856, 18860, + 18864, 18868, 18872, 18876, 18880, 18884, 18888, 18892, 18896, 18900, + 18904, 18908, 18912, 18916, 18920, 18924, 18928, 18932, 18936, 18940, + 18944, 18948, 18952, 18956, 18960, 18964, 18968, 18972, 18976, 18980, + 18984, 18988, 18992, 18996, 19000, 19004, 19008, 19012, 19016, 19020, + 19024, 19028, 19032, 19036, 19040, 19044, 19048, 19052, 19056, 19060, + 19064, 19068, 19072, 19076, 19080, 19084, 19088, 19092, 19096, 19100, + 19104, 19108, 19112, 19116, 19120, 19124, 19128, 19132, 19136, 19140, + 19144, 19148, 19152, 19156, 19160, 19164, 19168, 19171, 19175, 19178, + 19182, 19186, 19189, 19193, 19197, 19200, 19204, 19208, 19212, 19216, + 19219, 19223, 19227, 19231, 19235, 19239, 19243, 19246, 19250, 19254, 19258, 19262, 19266, 19270, 19274, 19278, 19282, 19286, 19290, 19294, - 19298, 19302, 19306, 19310, 19313, 19317, 19321, 19325, 19329, 19333, - 19337, 19341, 19345, 19349, 19353, 19357, 19361, 19365, 19369, 19373, - 19376, 19380, 19384, 19388, 19392, 19396, 19400, 19404, 19408, 19412, - 19416, 19420, 19424, 19428, 19432, 19436, 19440, 19444, 19448, 19452, - 19456, 19460, 19464, 19468, 19472, 19476, 19480, 19484, 19488, 19492, - 19496, 19500, 0, 19504, 19508, 19512, 19516, 0, 0, 19520, 19524, 19528, - 19532, 19536, 19540, 19544, 0, 19548, 0, 19552, 19556, 19560, 19564, 0, - 0, 19568, 19572, 19576, 19580, 19584, 19588, 19592, 19596, 19600, 19604, - 19608, 19612, 19616, 19620, 19624, 19628, 19632, 19636, 19640, 19644, - 19648, 19652, 19656, 19659, 19663, 19667, 19671, 19675, 19679, 19683, - 19687, 19691, 19695, 19699, 19703, 19707, 19711, 19715, 19719, 19723, - 19727, 0, 19731, 19735, 19739, 19743, 0, 0, 19747, 19751, 19755, 19759, - 19763, 19767, 19771, 19775, 19779, 19783, 19787, 19791, 19795, 19799, - 19803, 19807, 19811, 19816, 19821, 19826, 19832, 19838, 19843, 19848, - 19854, 19857, 19861, 19865, 19869, 19873, 19877, 19881, 19885, 0, 19889, - 19893, 19897, 19901, 0, 0, 19905, 19909, 19913, 19917, 19921, 19925, - 19929, 0, 19933, 0, 19937, 19941, 19945, 19949, 0, 0, 19953, 19957, - 19961, 19965, 19969, 19973, 19977, 19981, 19985, 19990, 19995, 20000, - 20006, 20012, 20017, 0, 20022, 20026, 20030, 20034, 20038, 20042, 20046, - 20050, 20054, 20058, 20062, 20066, 20070, 20074, 20078, 20082, 20086, - 20089, 20093, 20097, 20101, 20105, 20109, 20113, 20117, 20121, 20125, - 20129, 20133, 20137, 20141, 20145, 20149, 20153, 20157, 20161, 20165, - 20169, 20173, 20177, 20181, 20185, 20189, 20193, 20197, 20201, 20205, - 20209, 20213, 20217, 20221, 20225, 20229, 20233, 20237, 20241, 20245, 0, - 20249, 20253, 20257, 20261, 0, 0, 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, 20492, 20496, 20500, 20504, 20508, 20512, 20516, 20520, - 20524, 20528, 0, 0, 0, 0, 20532, 20537, 20541, 20544, 20549, 20552, - 20555, 20558, 20563, 20567, 20572, 20575, 20578, 20581, 20584, 20587, - 20590, 20593, 20596, 20599, 20603, 20607, 20611, 20615, 20619, 20623, - 20627, 20631, 20635, 20639, 0, 0, 0, 20645, 20651, 20655, 20659, 20663, - 20669, 20673, 20677, 20681, 20687, 20691, 20695, 20699, 20705, 20709, - 20713, 20717, 20723, 20729, 20735, 20743, 20749, 20755, 20761, 20767, - 20773, 0, 0, 0, 0, 0, 0, 20779, 20782, 20785, 20788, 20791, 20794, 20797, - 20801, 20804, 20808, 20812, 20816, 20820, 20824, 20827, 20831, 20835, - 20839, 20843, 20847, 20851, 20855, 20859, 20863, 20867, 20871, 20874, - 20878, 20882, 20886, 20890, 20894, 20898, 20902, 20906, 20910, 20914, - 20918, 20922, 20926, 20930, 20934, 20938, 20942, 20946, 20950, 20953, - 20957, 20961, 20965, 20969, 20973, 20977, 20981, 20985, 20989, 20993, - 20997, 21001, 21005, 21009, 21013, 21017, 21021, 21025, 21029, 21033, - 21037, 21041, 21045, 21049, 21053, 21057, 21061, 21065, 21069, 21073, - 21077, 21081, 21085, 21088, 21092, 21096, 21100, 21104, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 21108, 21111, 21115, 21118, 21122, 21125, 21129, 21135, - 21140, 21144, 21147, 21151, 21155, 21160, 21164, 21169, 21173, 21178, - 21182, 21187, 21191, 21196, 21202, 21206, 21211, 21215, 21220, 21226, - 21230, 21236, 21242, 21246, 21251, 21259, 21267, 21274, 21279, 21284, - 21293, 21300, 21307, 21312, 21318, 21322, 21326, 21330, 21334, 21338, - 21342, 21346, 21350, 21354, 21358, 21364, 21369, 21374, 21377, 21381, - 21385, 21390, 21394, 21399, 21403, 21408, 21412, 21417, 21421, 21426, - 21430, 21435, 21439, 21444, 21450, 21454, 21459, 21463, 21467, 21471, - 21475, 21479, 21482, 21486, 21492, 21497, 21502, 21506, 21510, 21514, - 21519, 21523, 21528, 21532, 21537, 21540, 21544, 21548, 21553, 21557, - 21562, 21566, 21571, 21577, 21581, 21585, 21589, 21593, 21597, 21601, - 21605, 21609, 21613, 21617, 21621, 21627, 21630, 21634, 21638, 21643, - 21647, 21652, 21656, 21661, 21665, 21670, 21674, 21679, 21683, 21688, - 21692, 21697, 21703, 21707, 21711, 21717, 21723, 21729, 21735, 21739, - 21743, 21747, 21751, 21755, 21759, 21765, 21769, 21773, 21777, 21782, - 21786, 21791, 21795, 21800, 21804, 21809, 21813, 21818, 21822, 21827, - 21831, 21836, 21842, 21846, 21852, 21856, 21860, 21864, 21868, 21872, - 21876, 21882, 21885, 21889, 21893, 21898, 21902, 21907, 21911, 21916, - 21920, 21925, 21929, 21934, 21938, 21943, 21947, 21952, 21958, 21961, - 21965, 21969, 21974, 21979, 21983, 21987, 21991, 21995, 21999, 22003, - 22009, 22013, 22017, 22021, 22026, 22030, 22035, 22039, 22044, 22050, - 22053, 22058, 22062, 22066, 22070, 22074, 22078, 22082, 22086, 22092, - 22096, 22100, 22104, 22109, 22113, 22118, 22122, 22127, 22131, 22136, - 22140, 22145, 22149, 22154, 22158, 22163, 22166, 22170, 22174, 22178, - 22182, 22186, 22190, 22194, 22198, 22204, 22208, 22212, 22216, 22221, - 22225, 22230, 22234, 22239, 22243, 22248, 22252, 22257, 22261, 22266, - 22270, 22275, 22281, 22284, 22289, 22293, 22298, 22304, 22310, 22316, - 22322, 22328, 22334, 22340, 22344, 22348, 22352, 22356, 22360, 22364, - 22368, 22372, 22377, 22381, 22386, 22390, 22395, 22399, 22404, 22408, - 22413, 22417, 22422, 22426, 22431, 22435, 22439, 22443, 22447, 22451, - 22455, 22459, 22465, 22468, 22472, 22476, 22481, 22485, 22490, 22494, - 22499, 22503, 22508, 22512, 22517, 22521, 22526, 22530, 22535, 22541, - 22545, 22551, 22556, 22562, 22566, 22572, 22577, 22581, 22585, 22589, - 22593, 22597, 22602, 22605, 22609, 22614, 22618, 22623, 22626, 22630, - 22634, 22638, 22642, 22646, 22650, 22654, 22658, 22662, 22666, 22670, - 22675, 22679, 22683, 22689, 22693, 22699, 22703, 22709, 22713, 22717, - 22721, 22725, 22729, 22734, 22738, 22742, 22746, 22750, 22754, 22758, - 22762, 22766, 22770, 22774, 22780, 22786, 22792, 22798, 22804, 22809, - 22815, 22820, 22825, 22829, 22833, 22837, 22841, 22845, 22849, 22853, - 22857, 22861, 22865, 22869, 22873, 22877, 22882, 22887, 22892, 22896, - 22900, 22904, 22908, 22912, 22916, 22920, 22924, 22928, 22932, 22938, - 22944, 22950, 22956, 22962, 22968, 22974, 22980, 22986, 22990, 22994, - 22998, 23002, 23006, 23010, 23014, 23020, 23026, 23032, 23038, 23044, - 23050, 23056, 23062, 23068, 23073, 23078, 23083, 23088, 23094, 23100, - 23106, 23112, 23118, 23124, 23130, 23136, 23142, 23148, 23154, 23159, - 23165, 23171, 23177, 23182, 23187, 23192, 23197, 23202, 23207, 23212, - 23217, 23222, 23227, 23232, 23237, 23241, 23246, 23251, 23256, 23261, - 23266, 23271, 23276, 23281, 23286, 23291, 23296, 23301, 23306, 23311, - 23316, 23321, 23326, 23331, 23336, 23341, 23346, 23351, 23356, 23361, - 23366, 23371, 23376, 23381, 23386, 23390, 23395, 23400, 23405, 23410, - 23415, 23420, 23425, 23430, 23435, 23440, 23445, 23450, 23455, 23460, - 23465, 23470, 23475, 23480, 23485, 23490, 23495, 23500, 23505, 23510, - 23515, 23520, 23525, 23530, 23535, 23540, 23545, 23549, 23554, 23559, - 23564, 23569, 23574, 23578, 23583, 23589, 23594, 23599, 23604, 23609, - 23615, 23620, 23625, 23630, 23635, 23640, 23645, 23650, 23655, 23660, - 23665, 23670, 23675, 23680, 23685, 23690, 23695, 23700, 23705, 23710, - 23715, 23720, 23725, 23730, 23735, 23740, 23745, 23750, 23755, 23760, - 23765, 23770, 23775, 23780, 23785, 23790, 23795, 23800, 23805, 23810, - 23815, 23820, 23825, 23830, 23835, 23841, 23846, 23851, 23856, 23861, - 23866, 23871, 23876, 23881, 23886, 23891, 23896, 23901, 23906, 23911, - 23916, 23921, 23926, 23931, 23936, 23941, 23946, 23951, 23956, 23961, - 23966, 23971, 23976, 23981, 23986, 23991, 23996, 24001, 24006, 24011, - 24016, 24021, 24026, 24031, 24037, 24041, 24045, 24049, 24053, 24057, - 24061, 24065, 0, 0, 0, 0, 0, 0, 0, 0, 0, 24069, 24074, 24079, 24084, - 24089, 24094, 24099, 24104, 24109, 24114, 24119, 24124, 24129, 24134, - 24139, 24144, 24149, 24154, 24159, 24164, 24169, 24174, 24179, 24184, - 24189, 24194, 24199, 24204, 24209, 0, 0, 0, 24215, 24225, 24228, 24235, - 24239, 24243, 24247, 24255, 24259, 24264, 24269, 24274, 24278, 24283, - 24288, 24291, 24295, 24299, 24308, 24312, 24316, 24322, 24325, 24329, - 24336, 24340, 24348, 24353, 24358, 24363, 24368, 24377, 24382, 24386, - 24395, 24398, 24404, 24408, 24414, 24419, 24425, 24433, 24439, 24444, - 24451, 24456, 24460, 24464, 24474, 24480, 24484, 24494, 24500, 24504, - 24508, 24515, 24522, 24527, 24532, 24541, 24545, 24549, 24553, 24561, - 24568, 24572, 24576, 24580, 24584, 24588, 24592, 24596, 24600, 24604, - 24608, 24612, 24617, 24622, 24627, 24631, 24635, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 24639, 24643, 24647, 24651, 24655, 24660, 24665, - 24670, 24675, 24680, 24684, 24689, 24693, 0, 24697, 24702, 24707, 24712, - 24716, 24721, 24726, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 24731, 24735, - 24739, 24743, 24747, 24752, 24757, 24762, 24767, 24772, 24776, 24781, - 24785, 24789, 24793, 24798, 24803, 24808, 24812, 24817, 24822, 24827, - 24833, 0, 0, 0, 0, 0, 0, 0, 0, 0, 24838, 24842, 24846, 24850, 24854, - 24859, 24864, 24869, 24874, 24879, 24883, 24888, 24892, 24896, 24900, - 24905, 24910, 24915, 24919, 24924, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 24929, 24933, 24937, 24941, 24945, 24950, 24955, 24960, 24965, 24970, - 24974, 24979, 24983, 0, 24987, 24992, 24997, 0, 25002, 25007, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 25012, 25015, 25019, 25023, 25027, 25031, 25035, - 25039, 25043, 25047, 25051, 25055, 25059, 25063, 25067, 25071, 25075, - 25079, 25082, 25086, 25090, 25094, 25098, 25102, 25106, 25110, 25114, - 25118, 25122, 25126, 25130, 25134, 25138, 25141, 25145, 25149, 25155, - 25161, 25167, 25173, 25179, 25185, 25191, 25197, 25203, 25209, 25215, - 25221, 25227, 25233, 25242, 25251, 25257, 25263, 25269, 25274, 25278, - 25283, 25288, 25293, 25297, 25302, 25307, 25312, 25316, 25321, 25325, - 25330, 25335, 25340, 25345, 25349, 25353, 25357, 25361, 25365, 25369, - 25373, 25377, 25381, 25385, 25391, 25395, 25399, 25403, 25407, 25411, - 25419, 25425, 25429, 25435, 25439, 25445, 25449, 0, 0, 25453, 25457, - 25460, 25463, 25466, 25469, 25472, 25475, 25478, 25481, 0, 0, 0, 0, 0, 0, - 25484, 25492, 25500, 25508, 25516, 25524, 25532, 25540, 25548, 25556, 0, - 0, 0, 0, 0, 0, 25564, 25567, 25570, 25573, 25578, 25581, 25586, 25593, - 25601, 25606, 25613, 25616, 25623, 25630, 25637, 0, 25641, 25645, 25648, - 25651, 25654, 25657, 25660, 25663, 25666, 25669, 0, 0, 0, 0, 0, 0, 25672, - 25675, 25678, 25681, 25684, 25687, 25691, 25695, 25699, 25703, 25707, - 25711, 25714, 25718, 25722, 25725, 25729, 25733, 25737, 25741, 25745, - 25749, 25753, 25756, 25759, 25763, 25767, 25770, 25774, 25778, 25782, - 25786, 25790, 25794, 25798, 25802, 25809, 25814, 25819, 25824, 25829, - 25835, 25841, 25847, 25853, 25858, 25864, 25870, 25875, 25881, 25887, - 25893, 25899, 25905, 25910, 25916, 25921, 25927, 25933, 25939, 25945, - 25951, 25956, 25961, 25967, 25973, 25978, 25984, 25989, 25995, 26000, - 26005, 26011, 26017, 26023, 26029, 26035, 26041, 26047, 26053, 26059, - 26065, 26071, 26077, 26082, 26087, 26092, 26098, 0, 0, 0, 0, 0, 0, 0, 0, - 26104, 26113, 26122, 26130, 26138, 26148, 26156, 26165, 26172, 26179, - 26186, 26194, 26202, 26210, 26218, 26226, 26234, 26242, 26250, 26257, - 26265, 26273, 26281, 26289, 26297, 26307, 26317, 26327, 26337, 26347, - 26357, 26367, 26377, 26387, 26397, 26407, 26417, 26427, 26437, 26445, - 26453, 26463, 26471, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 26481, 26486, - 26489, 26493, 26497, 26501, 26505, 26509, 26513, 26517, 26521, 26525, - 26529, 26533, 26537, 26541, 26545, 26548, 26552, 26556, 26560, 26563, - 26566, 26569, 26573, 26577, 26581, 26585, 26589, 0, 0, 0, 26592, 26596, - 26600, 26604, 26609, 26614, 26619, 26624, 26628, 26632, 26637, 26642, 0, - 0, 0, 0, 26648, 26652, 26657, 26662, 26667, 26672, 26676, 26680, 26684, - 26689, 26693, 26697, 0, 0, 0, 0, 26701, 0, 0, 0, 26705, 26709, 26713, - 26717, 26720, 26723, 26726, 26729, 26732, 26735, 26738, 26741, 26744, - 26749, 26755, 26761, 26767, 26773, 26778, 26784, 26790, 26796, 26801, - 26807, 26812, 26818, 26824, 26829, 26835, 26841, 26847, 26853, 26858, - 26863, 26869, 26875, 26880, 26886, 26891, 26897, 26902, 26908, 0, 0, - 26914, 26920, 26926, 26932, 26938, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 26944, 26951, 26958, 26964, 26971, 26978, 26984, 26991, 26998, 27005, - 27012, 27018, 27025, 27032, 27038, 27045, 27052, 27059, 27066, 27073, - 27080, 27086, 27093, 27099, 27105, 27112, 27118, 27125, 27132, 27139, - 27146, 27153, 27160, 27166, 27173, 27180, 27186, 27193, 27200, 27207, - 27214, 27221, 0, 0, 0, 0, 0, 0, 27228, 27236, 27243, 27250, 27256, 27263, - 27269, 27276, 27282, 27289, 27296, 27303, 27310, 27317, 27324, 27331, - 27338, 27345, 27351, 27358, 27364, 27370, 27377, 27384, 27391, 27397, 0, - 0, 0, 0, 0, 0, 27403, 27409, 27414, 27419, 27424, 27429, 27434, 27439, - 27444, 27449, 0, 0, 0, 0, 27454, 27460, 27466, 27470, 27476, 27482, - 27488, 27494, 27500, 27506, 27512, 27518, 27524, 27530, 27536, 27542, - 27548, 27554, 27560, 27564, 27570, 27576, 27582, 27588, 27594, 27600, - 27606, 27612, 27618, 27624, 27630, 27636, 27642, 27648, 27654, 27658, - 27663, 27668, 27673, 27677, 27682, 27686, 27691, 27696, 27701, 27706, - 27711, 27716, 27721, 27726, 27731, 27735, 27739, 27744, 27749, 27754, - 27758, 27762, 27767, 27772, 27777, 27782, 0, 0, 27788, 27792, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 27799, 27805, - 27811, 27815, 27819, 27823, 27827, 27833, 27837, 27843, 27847, 27853, - 27859, 27867, 27873, 27881, 27885, 27889, 27893, 27899, 27902, 27907, - 27911, 27917, 27921, 27925, 27931, 27935, 27941, 27945, 27951, 27959, - 27967, 27975, 27981, 27985, 27991, 27995, 28001, 28005, 28008, 28014, - 28018, 28024, 28027, 28030, 28033, 28037, 28041, 28047, 28053, 28057, - 28060, 28064, 28069, 28074, 28081, 28086, 28093, 28100, 28109, 28116, - 28125, 28130, 28137, 28144, 28153, 28158, 28165, 28170, 28176, 28182, - 28188, 28194, 28200, 28206, 0, 0, 0, 0, 28212, 28216, 28219, 28222, - 28225, 28228, 28231, 28234, 28237, 28240, 28243, 28246, 28249, 28252, - 28257, 28262, 28267, 28270, 28275, 28280, 28285, 28290, 28297, 28302, - 28307, 28312, 28317, 28324, 28330, 28336, 28342, 28348, 28354, 28363, - 28372, 28378, 28384, 28393, 28402, 28411, 28420, 28429, 28438, 28447, - 28456, 0, 0, 0, 28465, 28469, 28473, 28477, 28480, 28483, 28486, 28490, - 28493, 28496, 28500, 28503, 28507, 28511, 28515, 28519, 28523, 28527, - 28531, 28535, 28539, 28543, 28546, 28550, 28554, 28558, 28561, 28564, - 28567, 28571, 28575, 28579, 28583, 28586, 28592, 28598, 28604, 28609, - 28614, 28619, 28624, 28629, 28634, 0, 0, 0, 28638, 28642, 28646, 28650, - 28653, 28656, 28659, 28662, 28665, 28668, 28671, 28674, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 28677, 28680, 28684, - 28688, 28692, 28696, 28700, 28704, 28708, 28712, 28716, 28720, 28724, - 28728, 28732, 28735, 28739, 28743, 28747, 28751, 28755, 28759, 28762, - 28766, 28770, 28774, 28778, 28781, 28784, 28788, 28791, 28795, 28799, - 28803, 28807, 28811, 28814, 28819, 28824, 28829, 28833, 28837, 28842, - 28846, 28851, 28855, 28861, 28866, 28871, 28876, 28882, 28887, 28893, - 28899, 28905, 28909, 0, 0, 0, 28913, 28918, 28927, 28932, 28939, 28944, - 28948, 28951, 28954, 28957, 28960, 28963, 28966, 28969, 28972, 0, 0, 0, - 28975, 28979, 28983, 28987, 28994, 29000, 29006, 29012, 29018, 29024, - 29030, 29036, 29042, 29048, 29055, 29062, 29069, 29076, 29083, 29090, - 29097, 29104, 29111, 29118, 29125, 29132, 29139, 29146, 29153, 29160, - 29167, 29174, 29181, 29188, 29195, 29202, 29209, 29216, 29223, 29230, - 29237, 29244, 29251, 29258, 29266, 29274, 29282, 29288, 29294, 29300, - 29308, 29317, 29322, 29328, 29334, 29342, 29348, 29354, 29360, 29365, - 29372, 29377, 29383, 29389, 29397, 29402, 29408, 29413, 29420, 29426, - 29434, 29442, 29448, 29454, 29461, 29468, 29474, 29480, 29486, 29492, - 29497, 29503, 29511, 29518, 29523, 29529, 29535, 29541, 29549, 29553, - 29559, 29565, 29571, 29577, 29583, 29589, 29593, 29598, 29603, 29610, - 29615, 29619, 29624, 29628, 29632, 29636, 29641, 29646, 29650, 29654, - 29658, 29663, 29667, 29672, 29677, 29681, 29686, 29690, 29695, 29699, - 29704, 29709, 29715, 29720, 29725, 29729, 29734, 29740, 29747, 29751, - 29756, 29761, 29765, 29770, 29774, 29780, 29787, 29794, 29799, 29804, - 29808, 29814, 29819, 29823, 29828, 29833, 29839, 29844, 29850, 29855, - 29861, 29867, 29873, 29879, 29886, 29893, 29900, 29907, 29914, 29919, - 29927, 29936, 29945, 29954, 29963, 29972, 29981, 29993, 30002, 30011, - 30020, 30025, 30030, 30036, 30044, 30052, 30059, 30066, 30073, 30080, - 30088, 30097, 30106, 30115, 30124, 30133, 30142, 30151, 30160, 30169, - 30178, 30187, 30196, 30205, 30214, 30222, 30231, 30242, 30250, 30260, - 30271, 30280, 30289, 30299, 30308, 30316, 30325, 30331, 30336, 30344, - 30349, 30356, 30361, 30370, 30375, 30380, 30387, 30392, 30397, 30405, - 30413, 30422, 30431, 30436, 30443, 30453, 30461, 30470, 30475, 30481, - 30486, 30493, 30498, 30507, 30512, 30517, 30522, 30529, 30534, 30539, - 30548, 30556, 30561, 30566, 30573, 30580, 30584, 30588, 30591, 30594, - 30597, 30600, 30603, 30606, 30613, 30616, 30619, 30624, 30628, 30632, - 30636, 30640, 30644, 30654, 30660, 30666, 30672, 30680, 30688, 30694, - 30699, 30705, 30711, 30716, 30722, 30728, 30733, 30739, 30745, 30753, - 30758, 30764, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 30770, 30775, 30784, 30792, 30800, 30807, 30814, 30821, 30828, - 30836, 30844, 30854, 30864, 30872, 30880, 30888, 30896, 30905, 30914, - 30922, 30930, 30939, 30948, 30958, 30968, 30977, 30986, 30994, 31002, - 31010, 31018, 31028, 31038, 31046, 31054, 31062, 31070, 31078, 31086, - 31094, 31102, 31109, 31116, 31124, 31132, 31141, 31150, 31159, 31168, - 31178, 31188, 31195, 31202, 31210, 31218, 31227, 31236, 31244, 31252, - 31264, 31276, 31285, 31294, 31303, 31312, 31319, 31326, 31334, 31342, - 31350, 31358, 31366, 31374, 31382, 31390, 31399, 31408, 31417, 31426, - 31435, 31444, 31453, 31462, 31472, 31482, 31491, 31500, 31507, 31514, - 31522, 31530, 31538, 31546, 31554, 31562, 31574, 31586, 31595, 31604, - 31612, 31620, 31628, 31636, 31647, 31658, 31669, 31680, 31692, 31704, - 31712, 31720, 31728, 31736, 31745, 31754, 31763, 31772, 31780, 31788, - 31796, 31804, 31812, 31820, 31829, 31838, 31847, 31856, 31863, 31870, - 31878, 31886, 31894, 31902, 31909, 31916, 31923, 31930, 31938, 31946, - 31954, 31962, 31970, 31978, 31985, 31992, 32000, 32008, 32016, 32024, - 32032, 32040, 32049, 32058, 32067, 32074, 32083, 32092, 32101, 32110, - 32120, 32129, 32135, 32140, 32147, 32154, 32162, 32170, 32179, 32188, - 32198, 32208, 32219, 32230, 32239, 32248, 32258, 32268, 32277, 32286, - 32296, 32306, 32317, 32328, 32337, 32346, 32356, 32366, 32373, 32380, - 32388, 32396, 32402, 32408, 32417, 32426, 32436, 32446, 32457, 32468, - 32477, 32486, 32496, 32506, 32515, 32524, 32532, 32540, 32547, 32554, - 32562, 32570, 32579, 32588, 32598, 32608, 32619, 32630, 32639, 32648, - 32658, 32668, 32677, 32686, 32696, 32706, 32717, 32728, 32737, 32746, - 32756, 32766, 32773, 32780, 32788, 32796, 32805, 32814, 32824, 32834, - 32845, 32856, 32865, 32874, 32884, 32894, 32902, 32910, 32918, 32926, - 32935, 32944, 32951, 32958, 32965, 32972, 32978, 32984, 32992, 33000, - 33008, 33016, 33026, 33036, 33046, 33056, 33066, 33076, 33084, 33092, - 33102, 33112, 33122, 33132, 33142, 33152, 33160, 33168, 33178, 33188, - 33198, 0, 0, 33208, 33216, 33224, 33234, 33244, 33254, 0, 0, 33264, - 33272, 33280, 33290, 33300, 33310, 33320, 33330, 33340, 33348, 33356, - 33366, 33376, 33386, 33396, 33406, 33416, 33424, 33432, 33442, 33452, - 33462, 33472, 33482, 33492, 33500, 33508, 33518, 33528, 33538, 33548, - 33558, 33568, 33576, 33584, 33594, 33604, 33614, 0, 0, 33624, 33632, - 33640, 33650, 33660, 33670, 0, 0, 33680, 33688, 33696, 33706, 33716, - 33726, 33736, 33746, 0, 33756, 0, 33764, 0, 33774, 0, 33784, 33794, - 33802, 33810, 33820, 33830, 33840, 33850, 33860, 33870, 33878, 33886, - 33896, 33906, 33916, 33926, 33936, 33946, 33954, 33962, 33970, 33978, - 33986, 33994, 34002, 34010, 34018, 34026, 34034, 34042, 34050, 0, 0, - 34058, 34068, 34078, 34091, 34104, 34117, 34130, 34143, 34156, 34166, - 34176, 34189, 34202, 34215, 34228, 34241, 34254, 34264, 34274, 34287, - 34300, 34313, 34326, 34339, 34352, 34362, 34372, 34385, 34398, 34411, - 34424, 34437, 34450, 34460, 34470, 34483, 34496, 34509, 34522, 34535, - 34548, 34558, 34568, 34581, 34594, 34607, 34620, 34633, 34646, 34654, - 34662, 34673, 34681, 0, 34692, 34700, 34711, 34719, 34727, 34735, 34743, - 34751, 34754, 34757, 34760, 34763, 34769, 34780, 34788, 0, 34799, 34807, - 34818, 34826, 34834, 34842, 34850, 34858, 34863, 34868, 34873, 34881, - 34889, 34900, 0, 0, 34911, 34919, 34930, 34938, 34946, 34954, 0, 34962, - 34967, 34972, 34977, 34985, 34993, 35004, 35015, 35023, 35031, 35039, - 35050, 35058, 35066, 35074, 35082, 35090, 35096, 35102, 0, 0, 35105, - 35116, 35124, 0, 35135, 35143, 35154, 35162, 35170, 35178, 35186, 35194, - 35197, 0, 35200, 35204, 35208, 35212, 35216, 35220, 35224, 35228, 35232, - 35236, 35240, 35244, 35250, 35256, 35262, 35265, 35268, 35270, 35274, - 35278, 35282, 35286, 35288, 35292, 35296, 35302, 35308, 35315, 35322, - 35327, 35332, 35338, 35344, 35346, 35349, 35351, 35355, 35359, 35363, - 35366, 35370, 35374, 35378, 35382, 35386, 35392, 35396, 35400, 35406, - 35411, 35418, 35420, 35423, 35427, 35430, 35434, 35439, 35441, 35450, - 35459, 35462, 35466, 35468, 35470, 35472, 35475, 35481, 35483, 35487, - 35491, 35498, 35505, 35509, 35514, 35519, 35524, 35528, 35532, 35536, - 35539, 35542, 35546, 35553, 35558, 35562, 35566, 35571, 35575, 35579, - 35584, 35589, 35593, 35597, 35601, 35603, 35608, 35613, 35617, 35621, - 35625, 35629, 0, 0, 0, 0, 0, 35633, 35639, 35645, 35651, 35657, 35662, - 35667, 35671, 0, 0, 35677, 35680, 35683, 35686, 35689, 35692, 35695, - 35699, 35703, 35708, 35713, 35718, 35724, 35728, 35731, 35734, 35737, - 35740, 35743, 35746, 35749, 35752, 35755, 35759, 35763, 35768, 35773, 0, - 35778, 35784, 35790, 35796, 35803, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 35810, 35813, 35816, 35819, 35824, 35827, 35830, 35833, 35836, 35839, - 35842, 35846, 35849, 35852, 35855, 35858, 35861, 35866, 35869, 35872, - 35875, 35878, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 35881, 35886, 35891, 35898, 35906, 35911, 35916, 35920, - 35924, 35929, 35936, 35943, 35947, 35952, 35957, 35962, 35967, 35974, - 35979, 35984, 35989, 35998, 36005, 36011, 36015, 36020, 36026, 36031, - 36038, 36046, 36054, 36058, 36062, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 36066, 36070, 36077, 36081, 36085, 36090, 36094, 36098, 36102, - 36104, 36108, 36111, 36114, 36118, 36121, 36125, 36133, 36136, 36140, - 36143, 36146, 36152, 36155, 36158, 36164, 36168, 36172, 36176, 36179, - 36183, 36186, 36190, 36192, 36195, 36198, 36202, 36204, 36208, 36211, - 36214, 36219, 36224, 36230, 36233, 36236, 36240, 36245, 36248, 36251, - 36254, 36258, 36262, 36265, 36268, 36270, 36273, 36276, 36279, 36283, - 36288, 36291, 36295, 36299, 36303, 36307, 36312, 36316, 36320, 36324, - 36329, 36334, 36339, 36343, 36347, 36352, 36356, 36359, 36362, 36364, - 36368, 0, 0, 0, 36374, 36381, 36388, 36395, 36402, 36409, 36417, 36424, - 36432, 36439, 36446, 36454, 36462, 36467, 36471, 36475, 36479, 36483, - 36487, 36491, 36495, 36499, 36503, 36508, 36513, 36518, 36523, 36529, - 36536, 36542, 36547, 36552, 36557, 36562, 36567, 36572, 36577, 36582, - 36587, 36593, 36599, 36605, 36611, 36618, 36626, 36633, 36643, 36650, - 36657, 36664, 36670, 36678, 36686, 36693, 0, 0, 0, 0, 0, 0, 0, 36701, - 36703, 36706, 36708, 36711, 36714, 36717, 36722, 36727, 36732, 36737, - 36741, 36745, 36749, 36753, 36758, 36764, 36769, 36775, 36780, 36785, - 36790, 36796, 36801, 36807, 36813, 36817, 36821, 36826, 36831, 36836, - 36841, 36846, 36854, 36862, 36870, 36878, 36885, 36893, 36900, 36907, - 36915, 36925, 36932, 36939, 36946, 36953, 36961, 36969, 36976, 36983, - 36991, 36999, 37004, 37012, 37017, 37022, 37028, 37033, 37039, 37046, - 37053, 37058, 37064, 37069, 37072, 37076, 37079, 37083, 37087, 37091, - 37097, 37103, 37109, 37115, 37119, 37123, 37127, 37131, 37137, 37143, - 37147, 37152, 37156, 37161, 37165, 37169, 37172, 37176, 37179, 37183, - 37190, 37198, 37209, 37220, 37225, 37234, 37241, 37249, 37257, 37261, - 37267, 37275, 37279, 37284, 37289, 37295, 37301, 37307, 37314, 37318, - 37322, 37327, 37330, 37332, 37336, 37340, 37347, 37351, 37353, 37355, - 37359, 37366, 37371, 37377, 37386, 37393, 37398, 37402, 37406, 37410, - 37413, 37416, 37419, 37423, 37427, 37431, 37435, 37439, 37442, 37446, - 37450, 37453, 37455, 37458, 37460, 37464, 37468, 37470, 37475, 37478, - 37482, 37486, 37490, 37492, 37494, 37496, 37499, 37503, 37507, 37511, - 37515, 37519, 37525, 37531, 37533, 37535, 37537, 37539, 37542, 37544, - 37548, 37550, 37554, 37556, 37561, 37565, 37569, 37571, 37574, 37578, - 37583, 37587, 37596, 37606, 37610, 37615, 37621, 37624, 37628, 37631, - 37636, 37640, 37646, 37650, 37661, 37669, 37673, 37677, 37683, 37687, - 37690, 37692, 37695, 37699, 37703, 37709, 37713, 37717, 37720, 37723, - 37727, 37732, 37737, 37742, 37747, 37752, 37759, 37766, 37770, 37774, - 37776, 37780, 37783, 37786, 37794, 37802, 37808, 37814, 37823, 37832, - 37837, 37842, 37850, 37858, 37860, 37862, 37867, 37872, 37878, 37884, - 37889, 37894, 37898, 37902, 37908, 37914, 37920, 37926, 37936, 37946, - 37953, 37960, 37962, 37966, 37970, 37975, 37980, 37987, 37994, 37997, - 38000, 38003, 38006, 38009, 38014, 38018, 38023, 38028, 38031, 38034, - 38038, 38042, 38046, 38051, 38054, 38057, 38060, 38063, 38065, 38067, - 38069, 38071, 38079, 38087, 38092, 38095, 38100, 38110, 38116, 38122, - 38128, 38136, 38144, 38155, 38159, 38163, 38165, 38171, 38173, 38175, - 38177, 38179, 38185, 38188, 38194, 38200, 38204, 38208, 38212, 38215, - 38219, 38223, 38225, 38234, 38243, 38248, 38253, 38258, 38264, 38270, - 38273, 38276, 38279, 38282, 38284, 38289, 38294, 38299, 38305, 38311, - 38318, 38325, 38330, 38335, 38340, 38345, 38353, 38361, 38369, 38377, - 38385, 38393, 38401, 38409, 38417, 38425, 38432, 38443, 38452, 38466, - 38469, 38474, 38480, 38486, 38493, 38507, 38522, 38528, 38534, 38541, - 38547, 38555, 38561, 38574, 38588, 38593, 38599, 38606, 38609, 38612, - 38614, 38617, 38620, 38622, 38624, 38628, 38631, 38634, 38637, 38640, - 38645, 38650, 38655, 38660, 38663, 38666, 38668, 38670, 38672, 38676, - 38680, 38684, 38690, 38693, 38695, 38697, 38702, 38707, 38712, 38717, - 38722, 38727, 38729, 38731, 38740, 38744, 38751, 38760, 38762, 38767, - 38772, 38779, 38783, 38785, 38789, 38791, 38795, 38799, 38803, 38805, - 38807, 38809, 38814, 38821, 38828, 38835, 38842, 38849, 38856, 38863, - 38870, 38876, 38882, 38889, 38896, 38903, 38910, 38916, 38922, 38929, - 38936, 38943, 38951, 38958, 38966, 38973, 38981, 38988, 38996, 39004, - 39011, 39019, 39026, 39034, 39041, 39049, 39056, 39063, 39070, 39077, - 39084, 39092, 39099, 39106, 39113, 39120, 39126, 39132, 39138, 39144, - 39152, 39160, 39166, 39172, 39178, 39184, 39189, 39195, 39202, 39210, - 39217, 39224, 39231, 39236, 39241, 39246, 39253, 39260, 39267, 39274, - 39279, 39283, 39292, 39298, 39301, 39309, 39312, 39317, 39322, 39325, - 39328, 39336, 39339, 39344, 39347, 39354, 39359, 39367, 39370, 39373, - 39376, 39381, 39386, 39389, 39392, 39399, 39402, 39407, 39414, 39418, - 39422, 39427, 39432, 39438, 39443, 39448, 39454, 39459, 39464, 39472, - 39478, 39485, 39493, 39499, 39506, 39514, 39523, 39530, 39536, 39544, - 39553, 39560, 39564, 39569, 39581, 39593, 39597, 39601, 39605, 39609, - 39619, 39623, 39628, 39633, 39638, 39643, 39648, 39653, 39663, 39673, - 39681, 39691, 39701, 39709, 39719, 39729, 39737, 39747, 39757, 39765, - 39773, 39783, 39793, 39796, 39799, 39802, 39807, 39811, 39817, 39824, - 39831, 39839, 39846, 39850, 39854, 39858, 39862, 39864, 39868, 39872, - 39877, 39882, 39889, 39896, 39899, 39906, 39908, 39910, 39914, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 39918, - 39922, 39929, 39936, 39943, 39950, 39954, 39958, 39962, 39966, 39971, - 39977, 39982, 39987, 39993, 39999, 40005, 40013, 40020, 40027, 40034, - 40041, 40047, 40053, 40062, 40066, 40073, 40077, 40081, 40087, 40093, - 40099, 40105, 40109, 40113, 40116, 40120, 40124, 40130, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 40136, 40139, - 40143, 40147, 40153, 40159, 40165, 40173, 40180, 40184, 40192, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 40197, 40200, - 40203, 40206, 40209, 40212, 40215, 40218, 40221, 40224, 40228, 40232, - 40236, 40240, 40244, 40248, 40252, 40256, 40260, 40264, 40268, 40271, - 40274, 40277, 40280, 40283, 40286, 40289, 40292, 40295, 40299, 40303, - 40307, 40311, 40315, 40319, 40323, 40327, 40331, 40335, 40339, 40345, - 40351, 40357, 40364, 40371, 40378, 40385, 40392, 40399, 40406, 40413, - 40420, 40427, 40434, 40441, 40448, 40455, 40462, 40469, 40476, 40481, - 40487, 40493, 40499, 40504, 40510, 40515, 40520, 40525, 40531, 40537, - 40542, 40547, 40552, 40557, 40563, 40569, 40574, 40579, 40585, 40590, - 40595, 40601, 40607, 40613, 40619, 40624, 40630, 40636, 40642, 40647, - 40653, 40658, 40663, 40668, 40674, 40680, 40685, 40690, 40695, 40700, - 40706, 40712, 40717, 40722, 40728, 40733, 40738, 40744, 40750, 40756, - 40762, 40767, 40773, 40779, 40785, 40790, 40796, 40801, 40806, 40811, - 40817, 40823, 40828, 40833, 40838, 40843, 40849, 40855, 40860, 40865, - 40871, 40876, 40881, 40887, 40893, 40899, 40905, 40909, 40915, 40921, - 40927, 40933, 40939, 40945, 40951, 40957, 40963, 40969, 40973, 40977, - 40981, 40985, 40989, 40993, 40997, 41001, 41005, 41010, 41016, 41021, - 41026, 41031, 41036, 41045, 41054, 41063, 41072, 41081, 41090, 41099, - 41108, 41115, 41123, 41131, 41138, 41145, 41153, 41161, 41168, 41175, - 41183, 41191, 41198, 41205, 41213, 41221, 41228, 41235, 41243, 41252, - 41261, 41269, 41278, 41287, 41294, 41301, 41309, 41318, 41327, 41335, - 41344, 41353, 41360, 41367, 41376, 41385, 41393, 41401, 41410, 41419, - 41426, 41433, 41442, 41451, 41459, 41467, 41476, 41485, 41492, 41499, - 41508, 41517, 41525, 41534, 41543, 41551, 41561, 41571, 41581, 41591, - 41600, 41609, 41618, 41627, 41634, 41642, 41650, 41658, 41666, 41671, - 41676, 41685, 41693, 41700, 41709, 41717, 41724, 41733, 41741, 41748, - 41757, 41765, 41772, 41781, 41789, 41796, 41805, 41813, 41820, 41829, - 41837, 41844, 41853, 41861, 41868, 41877, 41885, 41892, 41901, 41910, - 41919, 41928, 41940, 41952, 41959, 41964, 41969, 41974, 41979, 41984, - 41989, 41994, 41999, 42007, 42015, 42023, 42031, 42036, 42042, 42048, - 42054, 42058, 42065, 42071, 42078, 42082, 42089, 42095, 42102, 42106, - 42112, 42118, 42124, 42128, 42131, 42135, 42139, 42146, 42152, 42157, - 42162, 42168, 42180, 42189, 42202, 42215, 42221, 42230, 42242, 42245, - 42248, 42255, 42263, 42268, 42273, 42281, 42291, 42301, 42309, 42313, - 42317, 42320, 42323, 42327, 42331, 42334, 42337, 42342, 42347, 42353, - 42359, 42364, 42369, 42375, 42381, 42386, 42391, 42396, 42401, 42407, - 42413, 42418, 42423, 42429, 42435, 42440, 42445, 42448, 42451, 42460, - 42462, 42464, 42467, 42471, 42477, 42479, 42482, 42489, 42496, 42503, - 42511, 42521, 42535, 42540, 42545, 42549, 42554, 42562, 42569, 42578, - 42587, 42595, 42603, 42608, 42612, 42617, 42622, 42628, 42634, 42637, - 42643, 42649, 42659, 42668, 42676, 42684, 42693, 42702, 42706, 42714, - 42721, 42728, 42736, 42745, 42753, 42761, 42770, 42775, 42780, 42784, - 42789, 42794, 42800, 42806, 42810, 42816, 42818, 42820, 42822, 42824, - 42827, 42830, 42832, 42834, 42836, 42840, 42844, 42846, 42848, 42851, - 42854, 42858, 42864, 42870, 42872, 42879, 42883, 42888, 42893, 42895, - 42904, 42910, 42916, 42922, 42928, 42934, 42940, 42945, 42948, 42951, - 42954, 42956, 42958, 42962, 42966, 42971, 42976, 42981, 42984, 42988, - 42993, 42996, 43000, 43005, 43010, 43015, 43020, 43025, 43030, 43035, - 43040, 43045, 43050, 43055, 43060, 43066, 43072, 43078, 43080, 43083, - 43085, 43088, 43090, 43092, 43094, 43096, 43098, 43100, 43102, 43104, - 43106, 43108, 43110, 43112, 43114, 43116, 43118, 43120, 43122, 43127, - 43132, 43137, 43142, 43147, 43152, 43157, 43162, 43167, 43172, 43177, - 43182, 43187, 43192, 43197, 43202, 43207, 43212, 43217, 43222, 43226, - 43230, 43234, 43240, 43246, 43251, 43256, 43261, 43266, 43271, 43276, - 43284, 43292, 43300, 43308, 43316, 43324, 43332, 43340, 43346, 43351, - 43356, 43361, 43364, 43368, 43372, 43376, 43380, 43384, 43388, 43395, - 43402, 43410, 43418, 43423, 43428, 43435, 43442, 43449, 43456, 43459, - 43462, 43467, 43469, 43473, 43478, 43480, 43482, 43484, 43486, 43491, - 43494, 43496, 0, 0, 43501, 43504, 43508, 43513, 43518, 43526, 43532, - 43537, 43548, 43554, 43560, 43565, 43570, 43576, 43579, 43582, 43587, - 43589, 43593, 43595, 43597, 43599, 43601, 43603, 43605, 43610, 43612, - 43614, 43616, 0, 0, 0, 43618, 43623, 43628, 43633, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 43638, 43644, 43647, 43652, 0, 43655, 43660, 43664, - 43666, 0, 0, 43668, 43672, 43676, 43680, 43682, 43687, 43690, 43693, - 43696, 43700, 43704, 43709, 43713, 43718, 43723, 43727, 43733, 43740, - 43743, 43749, 43754, 43758, 43763, 43769, 43775, 43782, 43788, 43795, 0, - 43802, 43809, 43813, 43820, 43826, 43831, 43837, 43841, 43846, 43849, - 43855, 43861, 43868, 43876, 43883, 43892, 43902, 43909, 43915, 43919, - 43927, 43932, 43941, 43944, 43947, 43956, 43967, 43974, 43976, 43982, - 43987, 43989, 43992, 43996, 44004, 0, 44013, 0, 44018, 44025, 44033, - 44040, 0, 0, 0, 44048, 0, 44056, 44059, 44063, 44066, 44077, 44087, - 44097, 0, 0, 44106, 44115, 44121, 44129, 44133, 44141, 44145, 44153, - 44160, 44167, 44176, 44185, 44195, 44205, 44215, 44225, 44234, 44243, - 44253, 44263, 44272, 44281, 44288, 44295, 44302, 44309, 44316, 44323, - 44330, 44337, 44344, 44352, 44358, 44364, 44370, 44376, 44382, 44388, - 44394, 44400, 44406, 44413, 44421, 44429, 44437, 44445, 44453, 44461, - 44469, 44477, 44485, 44494, 0, 0, 0, 44499, 44505, 44508, 44514, 44520, - 44525, 44529, 44534, 44540, 44547, 44550, 44557, 44564, 44568, 44577, - 44586, 44591, 44597, 44602, 44607, 44614, 44621, 44628, 44636, 0, 44644, - 44653, 44658, 44662, 44669, 44673, 44680, 44688, 44693, 44701, 44705, - 44710, 44714, 44719, 0, 44723, 44728, 44737, 44739, 44743, 44747, 44754, - 44761, 44766, 44774, 44780, 0, 44786, 0, 0, 0, 44789, 44797, 44801, - 44808, 44815, 44823, 44828, 44833, 44839, 44844, 44849, 44855, 44860, - 44863, 44867, 44871, 44878, 44887, 44892, 44901, 44910, 44916, 44922, - 44927, 44932, 44937, 44942, 44948, 44954, 44962, 44970, 44976, 44982, - 44987, 44992, 44999, 45006, 45012, 45015, 45018, 45022, 45026, 45030, - 45035, 45041, 45047, 45054, 45061, 45066, 45070, 45074, 45078, 45082, - 45086, 45090, 45094, 45098, 45102, 45106, 45110, 45114, 45118, 45122, - 45126, 45130, 45134, 45138, 45142, 45146, 45150, 45154, 45158, 45162, - 45166, 45170, 45174, 45178, 45182, 45186, 45190, 45194, 45198, 45202, - 45206, 45210, 45214, 45218, 45222, 45226, 45230, 45234, 45238, 45242, - 45246, 45250, 45254, 45258, 45262, 45266, 45270, 45274, 45278, 45282, - 45286, 45290, 45294, 45298, 45302, 45306, 45310, 45314, 45318, 45322, - 45326, 45330, 45334, 45338, 45342, 45346, 45350, 45354, 45358, 45362, - 45366, 45370, 45374, 45378, 45382, 45386, 45390, 45394, 45398, 45402, - 45406, 45410, 45414, 45418, 45422, 45426, 45430, 45434, 45438, 45442, - 45446, 45450, 45454, 45458, 45462, 45466, 45470, 45474, 45478, 45482, - 45486, 45490, 45494, 45498, 45502, 45506, 45510, 45514, 45518, 45522, - 45526, 45530, 45534, 45538, 45542, 45546, 45550, 45554, 45558, 45562, - 45566, 45570, 45574, 45578, 45582, 45586, 45590, 45594, 45598, 45602, - 45606, 45610, 45614, 45618, 45622, 45626, 45630, 45634, 45638, 45642, - 45646, 45650, 45654, 45658, 45662, 45666, 45670, 45674, 45678, 45682, - 45686, 45690, 45694, 45698, 45702, 45706, 45710, 45714, 45718, 45722, - 45726, 45730, 45734, 45738, 45742, 45746, 45750, 45754, 45758, 45762, - 45766, 45770, 45774, 45778, 45782, 45786, 45790, 45794, 45798, 45802, - 45806, 45810, 45814, 45818, 45822, 45826, 45830, 45834, 45838, 45842, - 45846, 45850, 45854, 45858, 45862, 45866, 45870, 45874, 45878, 45882, - 45886, 45890, 45894, 45898, 45902, 45906, 45910, 45914, 45918, 45922, - 45926, 45930, 45934, 45938, 45942, 45946, 45950, 45954, 45958, 45962, - 45966, 45970, 45974, 45978, 45982, 45986, 45990, 45994, 45998, 46002, - 46006, 46010, 46014, 46018, 46022, 46026, 46030, 46034, 46038, 46042, - 46046, 46050, 46054, 46058, 46062, 46066, 46070, 46074, 46078, 46082, - 46086, 46090, 46097, 46105, 46111, 46117, 46124, 46131, 46137, 46143, - 46149, 46155, 46160, 46165, 46170, 46175, 46181, 46187, 46195, 46202, - 46207, 46212, 46220, 46229, 46236, 46246, 46257, 46260, 46263, 46267, - 46271, 46277, 46283, 46293, 46303, 46313, 46323, 46330, 46337, 46344, - 46351, 46362, 46373, 46384, 46395, 46405, 46415, 46427, 46439, 46450, - 46461, 46473, 46485, 46494, 46504, 46514, 46525, 46536, 46543, 46550, - 46557, 46564, 46574, 46584, 46591, 46598, 46605, 46612, 46619, 46626, - 46633, 46638, 46643, 46649, 46657, 46667, 46675, 46683, 46691, 46699, - 46707, 46715, 46723, 46731, 46739, 46747, 46756, 46765, 46773, 46781, - 46790, 46799, 46808, 46817, 46827, 46837, 46846, 46855, 46865, 46875, - 46889, 46906, 46920, 46937, 46951, 46965, 46979, 46993, 47003, 47014, - 47024, 47035, 47052, 47069, 47077, 47083, 47090, 47097, 47104, 47111, - 47116, 47122, 47127, 47132, 47138, 47143, 47148, 47153, 47158, 47163, - 47170, 47175, 47182, 47187, 47192, 47196, 47200, 47207, 47214, 47221, - 47228, 47235, 47242, 47255, 47268, 47281, 47294, 47302, 47310, 47316, - 47322, 47329, 47336, 47343, 47350, 47354, 47359, 47367, 47375, 47383, - 47390, 47394, 47402, 47410, 47413, 47416, 47421, 47427, 47435, 47443, - 47463, 47483, 47503, 47523, 47543, 47563, 47583, 47603, 47608, 47615, - 47624, 47632, 47640, 47645, 47648, 47651, 47656, 47659, 47678, 47685, - 47691, 47697, 47701, 47704, 47707, 47710, 47721, 47733, 47741, 47749, - 47753, 47758, 47762, 47767, 47772, 47777, 47783, 47792, 47799, 47806, - 47814, 47821, 47828, 47831, 47837, 47843, 47846, 47849, 47854, 47859, - 47865, 47871, 47875, 47880, 47887, 47891, 47897, 47901, 47905, 47913, - 47925, 47933, 47937, 47939, 47948, 47957, 47963, 47966, 47972, 47978, - 47983, 47988, 47993, 47998, 48003, 48008, 48010, 48016, 48021, 48028, - 48032, 48038, 48041, 48045, 48052, 48059, 48061, 48063, 48069, 48075, - 48081, 48090, 48099, 48106, 48113, 48119, 48125, 48130, 48135, 48140, - 48146, 48152, 48157, 48164, 48168, 48172, 48185, 48198, 48209, 48218, - 48224, 48231, 48236, 48241, 48246, 48251, 48256, 48258, 48265, 48272, - 48279, 48286, 48293, 48301, 48307, 48312, 48318, 48324, 48330, 48337, - 48343, 48351, 48359, 48367, 48375, 48382, 48388, 48394, 48403, 48407, - 48416, 48425, 48434, 48442, 48446, 48452, 48459, 48466, 48470, 48476, - 48483, 48488, 48493, 48499, 48504, 48509, 48516, 48523, 48528, 48533, - 48541, 48549, 48559, 48569, 48576, 48583, 48587, 48591, 48603, 48609, - 48615, 48620, 48625, 48632, 48639, 48645, 48651, 48660, 48668, 48676, - 48683, 48690, 48697, 48703, 48710, 48716, 48723, 48730, 48737, 48744, - 48750, 48755, 48764, 48774, 48781, 48790, 48796, 48801, 48806, 48815, - 48821, 48827, 48833, 48841, 48846, 48853, 48860, 48871, 48878, 48885, - 48892, 48899, 48906, 48913, 48920, 48931, 48942, 48952, 48962, 48974, - 48986, 48991, 48996, 49004, 49012, 49018, 49024, 49033, 49042, 49050, - 49058, 49066, 49074, 49084, 49094, 49108, 49122, 49129, 49136, 49147, - 49158, 49165, 49172, 49181, 49190, 49195, 49200, 49209, 49218, 49223, - 49228, 49236, 49242, 49248, 49256, 49264, 49277, 49290, 49294, 49298, - 49305, 49312, 49319, 49327, 49335, 49343, 49351, 49357, 49363, 49369, - 49375, 49382, 49389, 49397, 49405, 49408, 49411, 49416, 49421, 49427, - 49433, 49440, 49447, 49456, 49465, 49472, 49479, 49487, 49495, 49503, - 49511, 49518, 49525, 49532, 49539, 49543, 49547, 49554, 49561, 49566, - 49571, 49576, 49581, 49587, 49601, 49608, 49615, 49619, 49621, 49623, - 49628, 49633, 49638, 49642, 49650, 49657, 49664, 49672, 49684, 49692, - 49700, 49711, 49715, 49719, 49723, 49728, 49739, 49746, 49753, 49760, - 49765, 49772, 49781, 49789, 49795, 49801, 49807, 49816, 49825, 49833, - 49842, 49847, 49850, 49855, 49861, 49867, 49873, 49879, 49883, 49886, - 49890, 49894, 49900, 49906, 49912, 49918, 49922, 49926, 49933, 49940, - 49947, 49954, 49961, 49968, 49978, 49987, 49994, 50001, 50009, 50017, - 50021, 50026, 50031, 50037, 50043, 50046, 50049, 50052, 50055, 50059, - 50064, 50069, 50074, 50079, 50084, 50088, 50092, 50096, 50100, 50104, - 50108, 50112, 50118, 50122, 50128, 50133, 50140, 50148, 50155, 50163, - 50170, 50178, 50187, 50194, 50204, 50215, 50221, 50230, 50236, 50245, - 50254, 50260, 50266, 50270, 50274, 50283, 50292, 50299, 50306, 50315, 0, - 0, 0, 50324, 50329, 50333, 50337, 50342, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 50347, 50352, 50357, 50362, 50367, 50372, 50377, - 50382, 50387, 50392, 50397, 50403, 50407, 50412, 50417, 50422, 50427, - 50432, 50437, 50442, 50447, 50452, 50457, 50462, 50467, 50472, 50477, - 50482, 50487, 50492, 50497, 50502, 50507, 50512, 50517, 50523, 50528, - 50534, 50543, 50548, 50556, 50563, 50572, 50577, 50582, 50587, 50593, 0, - 50600, 50605, 50610, 50615, 50620, 50625, 50630, 50635, 50640, 50645, - 50650, 50656, 50660, 50665, 50670, 50675, 50680, 50685, 50690, 50695, - 50700, 50705, 50710, 50715, 50720, 50725, 50730, 50735, 50740, 50745, - 50750, 50755, 50760, 50765, 50770, 50776, 50781, 50787, 50796, 50801, - 50809, 50816, 50825, 50830, 50835, 50840, 50846, 0, 50853, 50861, 50869, - 50878, 50885, 50893, 50899, 50908, 50916, 50924, 50932, 50940, 50948, - 50956, 50961, 50968, 0, 50973, 50981, 50988, 50995, 51003, 51008, 51013, - 51020, 51027, 51036, 51046, 51052, 51059, 0, 0, 51063, 51068, 51073, - 51078, 51083, 51088, 51093, 51098, 51103, 51108, 51113, 51118, 51123, - 51128, 51133, 51138, 51143, 51148, 51153, 51158, 51163, 51168, 51173, - 51178, 51183, 51188, 51193, 51198, 51203, 51208, 51213, 51217, 51221, - 51226, 51231, 51236, 51241, 51246, 51251, 51256, 51261, 51266, 51271, - 51276, 51281, 51286, 51291, 51296, 51301, 51306, 51311, 51318, 51325, - 51332, 51339, 51346, 51353, 51360, 51367, 51374, 51381, 51388, 51395, - 51402, 51409, 51414, 51419, 51426, 51433, 51440, 51447, 51454, 51461, - 51468, 51475, 51482, 51489, 51496, 51503, 51509, 51515, 51521, 51527, - 51534, 51541, 51548, 51555, 51562, 51569, 51576, 51583, 51590, 51597, - 51605, 51613, 51621, 51629, 51637, 51645, 51653, 51661, 51665, 51671, - 51677, 51681, 51687, 51693, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 51699, 51707, 51716, 51725, 51733, 51739, 51744, 51749, 51754, 51759, - 51764, 51769, 51774, 51779, 51784, 51789, 51794, 51799, 51804, 51809, - 51814, 51819, 51824, 51829, 51834, 51839, 51844, 51849, 51854, 51859, - 51864, 51869, 51874, 51879, 51884, 51889, 51894, 51899, 51904, 51909, - 51914, 51919, 51924, 51929, 51934, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 51939, - 51942, 51946, 51950, 51954, 51958, 51966, 51970, 51974, 51978, 51982, - 51986, 51990, 51994, 51998, 52004, 52008, 52012, 52020, 52026, 52030, - 52034, 52038, 52044, 52048, 52054, 52058, 52062, 52068, 52074, 52078, - 52082, 52086, 52092, 52098, 52102, 52106, 52110, 52114, 52118, 52124, - 52130, 52134, 52138, 52142, 52146, 52150, 52154, 52158, 52162, 52166, - 52170, 52174, 52180, 0, 0, 0, 0, 0, 0, 0, 0, 0, 52184, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 52190, 52194, 52198, 52202, 52206, 52210, - 52214, 52218, 52222, 52226, 52230, 52236, 52240, 52244, 52248, 52252, - 52256, 52260, 52264, 52268, 52272, 52276, 52280, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 52284, 52288, 52292, 52296, 52300, 52304, 52308, 0, 52312, 52316, - 52320, 52324, 52328, 52332, 52336, 0, 52340, 52344, 52348, 52352, 52356, - 52360, 52364, 0, 52368, 52372, 52376, 52380, 52384, 52388, 52392, 0, - 52396, 52400, 52404, 52408, 52412, 52416, 52420, 0, 52424, 52428, 52432, - 52436, 52440, 52444, 52448, 0, 52452, 52456, 52460, 52464, 52468, 52472, - 52476, 0, 52480, 52484, 52488, 52492, 52496, 52500, 52504, 0, 52508, - 52513, 52518, 52523, 52528, 52533, 52538, 52542, 52547, 52552, 52557, - 52561, 52566, 52571, 52576, 52581, 52585, 52590, 52595, 52600, 52605, - 52610, 52615, 52619, 52624, 52629, 52636, 52641, 52646, 52652, 52659, - 52666, 52675, 52682, 52691, 52695, 52699, 52705, 52711, 52717, 52725, - 52731, 52735, 52739, 52743, 52749, 52755, 52759, 52761, 52765, 52770, - 52772, 52776, 52780, 52784, 52790, 52795, 52799, 52803, 52807, 52813, - 52818, 52823, 52828, 52833, 52840, 52847, 52852, 52857, 52862, 52867, - 52872, 52877, 52881, 52885, 52892, 52899, 52906, 52910, 52914, 52916, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 52920, 52924, 52928, 52933, 52938, 52943, 52947, 52951, - 52955, 52960, 52965, 52969, 52973, 52977, 52981, 52986, 52991, 52996, - 53001, 53005, 53009, 53014, 53019, 53024, 53029, 53033, 0, 53037, 53041, - 53045, 53049, 53053, 53057, 53061, 53066, 53071, 53075, 53080, 53085, - 53094, 53098, 53102, 53106, 53113, 53117, 53122, 53127, 53131, 53135, - 53141, 53146, 53151, 53156, 53161, 53165, 53169, 53173, 53177, 53181, - 53186, 53191, 53195, 53199, 53204, 53209, 53214, 53218, 53222, 53227, - 53232, 53238, 53244, 53248, 53254, 53260, 53264, 53270, 53276, 53281, - 53286, 53290, 53296, 53300, 53304, 53310, 53316, 53321, 53326, 53330, - 53334, 53342, 53348, 53354, 53360, 53365, 53370, 53375, 53381, 53385, - 53391, 53395, 53399, 53405, 53411, 53417, 53423, 53429, 53435, 53441, - 53447, 53453, 53459, 53465, 53471, 53475, 53481, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 53487, 53490, 53494, 53498, 53502, 53506, 53509, 53512, - 53516, 53520, 53524, 53528, 53531, 53536, 53540, 53544, 53548, 53554, - 53558, 53562, 53566, 53570, 53577, 53583, 53587, 53591, 53595, 53599, - 53603, 53607, 53611, 53615, 53619, 53623, 53627, 53633, 53637, 53641, - 53645, 53649, 53653, 53657, 53661, 53665, 53669, 53673, 53677, 53681, - 53685, 53689, 53693, 53697, 53703, 53709, 53714, 53719, 53723, 53727, - 53731, 53735, 53739, 53743, 53747, 53751, 53755, 53759, 53763, 53767, - 53771, 53775, 53779, 53783, 53787, 53791, 53795, 53799, 53803, 53807, - 53811, 53815, 53821, 53825, 53829, 53833, 53837, 53841, 53845, 53849, - 53853, 53858, 53865, 53869, 53873, 53877, 53881, 53885, 53889, 53893, - 53897, 53901, 53905, 53909, 53913, 53920, 53924, 53930, 53934, 53938, - 53942, 53946, 53950, 53953, 53957, 53961, 53965, 53969, 53973, 53977, - 53981, 53985, 53989, 53993, 53997, 54001, 54005, 54009, 54013, 54017, - 54021, 54025, 54029, 54033, 54037, 54041, 54045, 54049, 54053, 54057, - 54061, 54065, 54069, 54073, 54077, 54081, 54087, 54091, 54095, 54099, - 54103, 54107, 54111, 54115, 54119, 54123, 54127, 54131, 54135, 54139, - 54143, 54147, 54151, 54155, 54159, 54163, 54167, 54171, 54175, 54179, - 54183, 54187, 54191, 54195, 54203, 54207, 54211, 54215, 54219, 54223, - 54229, 54233, 54237, 54241, 54245, 54249, 54253, 54257, 54261, 54265, - 54269, 54273, 54277, 54281, 54287, 54291, 54295, 54299, 54303, 54307, - 54311, 54315, 54319, 54323, 54327, 54331, 54335, 54339, 54343, 54347, - 54351, 54355, 54359, 54363, 54367, 54371, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 54375, 54383, 54390, - 54401, 54411, 54419, 54428, 54437, 54447, 54459, 54471, 54482, 0, 0, 0, - 0, 54488, 54491, 54494, 54499, 54502, 54509, 54513, 54517, 54521, 54525, - 54529, 54534, 54539, 54543, 54547, 54552, 54557, 54562, 54567, 54570, - 54573, 54579, 54585, 54590, 54595, 54602, 54609, 54613, 54617, 54621, - 54628, 54634, 54641, 54646, 54650, 54654, 54658, 54662, 54666, 54670, - 54674, 54678, 54682, 54687, 54692, 54697, 54702, 54708, 54713, 54717, - 54723, 54734, 54744, 54759, 54768, 54772, 54781, 54786, 54791, 54796, - 54801, 54804, 54809, 54813, 0, 54819, 54823, 54826, 54830, 54833, 54837, - 54840, 54844, 54847, 54851, 54854, 54857, 54861, 54865, 54869, 54873, - 54877, 54881, 54885, 54889, 54893, 54897, 54901, 54905, 54909, 54913, - 54917, 54921, 54925, 54929, 54933, 54937, 54941, 54945, 54949, 54954, - 54958, 54962, 54966, 54970, 54973, 54977, 54981, 54985, 54989, 54993, - 54997, 55000, 55004, 55007, 55011, 55015, 55019, 55023, 55027, 55031, - 55035, 55039, 55043, 55047, 55051, 55055, 55058, 55062, 55066, 55070, - 55074, 55078, 55081, 55086, 55090, 55095, 55099, 55102, 55106, 55110, - 55114, 55118, 55123, 55127, 55131, 55135, 55139, 55142, 55146, 55150, 0, - 0, 55155, 55163, 55171, 55178, 55185, 55189, 55195, 55200, 55205, 55209, - 55212, 55216, 55219, 55223, 55226, 55230, 55233, 55237, 55240, 55243, - 55247, 55251, 55255, 55259, 55263, 55267, 55271, 55275, 55279, 55283, - 55287, 55291, 55295, 55299, 55303, 55307, 55311, 55315, 55319, 55323, - 55327, 55331, 55335, 55340, 55344, 55348, 55352, 55356, 55359, 55363, - 55367, 55371, 55375, 55379, 55383, 55386, 55390, 55393, 55397, 55401, - 55405, 55409, 55413, 55417, 55421, 55425, 55429, 55433, 55437, 55441, - 55444, 55448, 55452, 55456, 55460, 55464, 55467, 55472, 55476, 55481, - 55485, 55488, 55492, 55496, 55500, 55504, 55509, 55513, 55517, 55521, - 55525, 55528, 55532, 55536, 55541, 55545, 55549, 55553, 55557, 55562, - 55569, 55573, 55579, 0, 0, 0, 0, 0, 55584, 55588, 55592, 55595, 55599, - 55603, 55607, 55610, 55613, 55616, 55620, 55623, 55627, 55631, 55635, - 55639, 55643, 55647, 55650, 55654, 55658, 55661, 55664, 55667, 55670, - 55674, 55678, 55682, 55686, 55690, 55694, 55698, 55702, 55706, 55710, - 55713, 55716, 55720, 55723, 55727, 55731, 0, 0, 0, 55735, 55739, 55743, - 55747, 55751, 55755, 55759, 55763, 55767, 55771, 55775, 55779, 55783, - 55787, 55791, 55795, 55799, 55803, 55807, 55811, 55815, 55819, 55823, - 55827, 55831, 55835, 55839, 55843, 55847, 55851, 55855, 55858, 55862, - 55865, 55869, 55873, 55876, 55880, 55884, 55887, 55891, 55895, 55899, - 55903, 55906, 55910, 55914, 55918, 55922, 55926, 55930, 55933, 55936, - 55940, 55944, 55948, 55952, 55956, 55960, 55964, 55968, 55972, 55976, - 55980, 55984, 55988, 55992, 55996, 56000, 56004, 56008, 56012, 56016, - 56020, 56024, 56028, 56032, 56036, 56040, 56044, 56048, 56052, 56056, - 56060, 56064, 56068, 56072, 56076, 56080, 56084, 56088, 56092, 56096, - 56100, 0, 56104, 56110, 56116, 56121, 56126, 56131, 56137, 56143, 56149, - 56155, 56161, 56167, 56173, 56179, 56185, 56191, 56197, 56201, 56205, - 56209, 56213, 56217, 56221, 56225, 56229, 56233, 56237, 56241, 56245, - 56249, 56253, 56257, 56261, 56265, 56269, 56273, 56277, 56282, 56287, - 56292, 0, 0, 0, 0, 0, 0, 0, 0, 56296, 56300, 56304, 56308, 56312, 56316, - 56320, 56324, 56328, 56332, 56336, 56340, 56344, 56348, 56352, 56356, - 56359, 56362, 56365, 56369, 56373, 56377, 56381, 56385, 56389, 56393, - 56397, 56401, 56405, 56409, 56413, 56417, 56421, 56425, 56429, 56433, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 56437, 56442, 56447, 56452, 56456, - 56461, 56465, 56470, 56475, 56480, 56485, 56490, 56494, 56499, 56504, - 56509, 56514, 56518, 56522, 56526, 56530, 56534, 56538, 56542, 56546, - 56550, 56554, 56558, 56562, 56566, 56570, 56575, 56580, 56585, 56590, - 56595, 56600, 56605, 56610, 56615, 56620, 56625, 56630, 56635, 56640, - 56645, 56651, 0, 56658, 56661, 56664, 56667, 56670, 56673, 56676, 56679, - 56682, 56685, 56689, 56693, 56697, 56701, 56705, 56709, 56713, 56717, - 56721, 56725, 56729, 56733, 56737, 56741, 56745, 56749, 56753, 56757, - 56761, 56765, 56769, 56773, 56777, 56781, 56785, 56789, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 56793, 56796, 56801, 56806, 56811, 56816, 56821, 56826, - 56831, 56836, 56841, 56845, 56850, 56855, 56860, 56865, 56870, 56874, - 56878, 56882, 56886, 56890, 56894, 56898, 56902, 56906, 56910, 56914, - 56918, 56922, 56926, 56931, 56936, 56941, 56946, 56951, 56956, 56961, - 56966, 56971, 56976, 56981, 56986, 56991, 56996, 57002, 57008, 57013, - 57018, 57021, 57024, 57027, 57030, 57033, 57036, 57039, 57042, 57045, - 57049, 57053, 57057, 57061, 57065, 57069, 57073, 57077, 57081, 57085, - 57089, 57093, 57097, 57101, 57105, 57109, 57113, 57117, 57121, 57125, - 57129, 57133, 57137, 57141, 57145, 57149, 57153, 57157, 57161, 57165, - 57169, 57173, 57177, 57181, 57185, 57189, 57193, 57197, 57201, 57205, - 57210, 57215, 57220, 57225, 57229, 57234, 57239, 57244, 57249, 57254, - 57259, 57264, 57269, 57274, 57278, 57284, 57290, 57296, 57302, 57308, - 57314, 57320, 57326, 57332, 57338, 57344, 57350, 57353, 57356, 57359, - 57364, 57367, 57370, 57373, 57376, 57379, 57382, 57386, 57390, 57394, - 57398, 57402, 57406, 57410, 57414, 57418, 57422, 57426, 57430, 57434, - 57437, 57441, 57445, 57449, 57453, 57457, 57460, 57464, 57468, 57472, - 57476, 57479, 57483, 57487, 57491, 57495, 57498, 57502, 57506, 57509, - 57513, 57517, 57521, 57525, 57529, 57533, 57537, 0, 57541, 57544, 57547, - 57550, 57553, 57556, 57559, 57562, 57565, 57568, 57571, 57574, 57577, - 57580, 57583, 57586, 57589, 57592, 57595, 57598, 57601, 57604, 57607, - 57610, 57613, 57616, 57619, 57622, 57625, 57628, 57631, 57634, 57637, - 57640, 57643, 57646, 57649, 57652, 57655, 57658, 57661, 57664, 57667, - 57670, 57673, 57676, 57679, 57682, 57685, 57688, 57691, 57694, 57697, - 57700, 57703, 57706, 57709, 57712, 57715, 57718, 57721, 57724, 57727, - 57730, 57733, 57736, 57739, 57742, 57745, 57748, 57751, 57754, 57757, - 57760, 57763, 57766, 57769, 57772, 57775, 57778, 57781, 57784, 57787, - 57790, 57793, 57796, 57799, 57802, 57805, 57813, 57820, 57827, 57834, - 57841, 57848, 57855, 57862, 57869, 57876, 57884, 57892, 57900, 57908, - 57916, 57924, 57932, 57940, 57948, 57956, 57964, 57972, 57980, 57988, - 57996, 57999, 58002, 58005, 58007, 58010, 58013, 58016, 58021, 58026, - 58029, 58036, 58043, 58050, 58057, 58060, 58065, 58068, 58072, 58074, - 58076, 58079, 58082, 58085, 58088, 58091, 58094, 58097, 58102, 58106, - 58109, 58112, 58115, 58118, 58121, 58124, 58127, 58131, 58134, 58137, - 58140, 58143, 58146, 58150, 58153, 58156, 58159, 58164, 58169, 58174, - 58179, 58184, 58189, 58194, 58199, 58204, 58212, 58214, 58217, 58220, - 58223, 58226, 58231, 58239, 58242, 58245, 58249, 58252, 58255, 58258, - 58262, 58265, 58268, 58273, 58276, 58279, 58284, 58287, 58290, 58295, - 58300, 58305, 58308, 58311, 58314, 58317, 58323, 58326, 58329, 58332, - 58334, 58337, 58340, 58343, 58348, 58351, 58354, 58357, 58360, 58363, - 58368, 58371, 58374, 58377, 58380, 58383, 58386, 58389, 58392, 58395, - 58400, 58404, 58411, 58418, 58425, 58432, 58439, 58446, 58453, 58460, - 58467, 58475, 58483, 58491, 58499, 58507, 58515, 58523, 58531, 58539, - 58547, 58555, 58563, 58571, 58579, 58587, 58595, 58603, 58611, 58619, - 58627, 58635, 58643, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 19298, 19302, 19306, 19310, 19314, 19318, 19322, 19326, 19330, 19334, + 19338, 19342, 19346, 19350, 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, 19522, 19526, 19530, 19534, + 19538, 19542, 19546, 19550, 19554, 19558, 19562, 19566, 19570, 19574, + 19578, 19582, 19586, 19590, 19594, 19598, 19602, 19606, 19610, 19614, + 19618, 19622, 19626, 19630, 19634, 19638, 19642, 19646, 19650, 19654, + 19658, 19662, 19666, 19670, 19674, 19678, 19682, 19686, 19690, 19694, + 19698, 19702, 19706, 19710, 19714, 19718, 19722, 19726, 19730, 19734, + 19738, 19742, 19746, 19750, 19754, 19758, 19762, 19766, 19770, 19774, + 19778, 19782, 19786, 19790, 19794, 19798, 19801, 19805, 19809, 19813, + 19817, 19821, 19825, 19829, 19833, 19837, 19841, 19845, 19849, 19853, + 19857, 19861, 19865, 19869, 19873, 19877, 19881, 19885, 19889, 19893, + 19896, 19900, 19904, 19908, 19912, 19916, 19920, 19924, 19928, 19932, + 19936, 19940, 19944, 19948, 19952, 19956, 19959, 19963, 19967, 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, 0, 20087, 20091, + 20095, 20099, 0, 0, 20103, 20107, 20111, 20115, 20119, 20123, 20127, 0, + 20131, 0, 20135, 20139, 20143, 20147, 0, 0, 20151, 20155, 20159, 20163, + 20167, 20171, 20175, 20179, 20183, 20187, 20191, 20195, 20199, 20203, + 20207, 20211, 20215, 20219, 20223, 20227, 20231, 20235, 20239, 20242, + 20246, 20250, 20254, 20258, 20262, 20266, 20270, 20274, 20278, 20282, + 20286, 20290, 20294, 20298, 20302, 20306, 20310, 0, 20314, 20318, 20322, + 20326, 0, 0, 20330, 20333, 20337, 20341, 20345, 20349, 20353, 20357, + 20361, 20365, 20369, 20373, 20377, 20381, 20385, 20389, 20393, 20398, + 20403, 20408, 20414, 20420, 20425, 20430, 20436, 20439, 20443, 20447, + 20451, 20455, 20459, 20463, 20467, 0, 20471, 20475, 20479, 20483, 0, 0, + 20487, 20491, 20495, 20499, 20503, 20507, 20511, 0, 20515, 0, 20519, + 20523, 20527, 20531, 0, 0, 20535, 20539, 20543, 20547, 20551, 20555, + 20559, 20563, 20567, 20572, 20577, 20582, 20588, 20594, 20599, 0, 20604, + 20608, 20612, 20616, 20620, 20624, 20628, 20632, 20636, 20640, 20644, + 20648, 20652, 20656, 20660, 20664, 20668, 20671, 20675, 20679, 20683, + 20687, 20691, 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, 0, 20831, 20835, 20839, 20843, + 0, 0, 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, 21074, 21078, + 21082, 21086, 21090, 21094, 21098, 21102, 21106, 21110, 0, 0, 0, 0, + 21114, 21119, 21123, 21126, 21131, 21134, 21137, 21140, 21145, 21149, + 21154, 21157, 21160, 21163, 21166, 21169, 21172, 21175, 21178, 21181, + 21185, 21189, 21193, 21197, 21201, 21205, 21209, 21213, 21217, 21221, 0, + 0, 0, 21227, 21233, 21237, 21241, 21245, 21251, 21255, 21259, 21263, + 21269, 21273, 21277, 21281, 21287, 21291, 21295, 21299, 21305, 21311, + 21317, 21325, 21331, 21337, 21343, 21349, 21355, 0, 0, 0, 0, 0, 0, 21361, + 21364, 21367, 21370, 21373, 21376, 21380, 21384, 21387, 21391, 21395, + 21399, 21403, 21407, 21410, 21414, 21418, 21422, 21426, 21430, 21434, + 21438, 21442, 21446, 21450, 21454, 21457, 21461, 21465, 21469, 21473, + 21476, 21480, 21484, 21488, 21492, 21496, 21500, 21504, 21508, 21512, + 21516, 21520, 21524, 21528, 21532, 21535, 21539, 21543, 21547, 21551, + 21555, 21559, 21563, 21567, 21571, 21575, 21579, 21583, 21587, 21591, + 21595, 21599, 21603, 21607, 21611, 21615, 21619, 21623, 21627, 21631, + 21635, 21639, 21643, 21647, 21651, 21655, 21659, 21663, 21667, 21670, + 21674, 21678, 21682, 21686, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 21690, + 21694, 21697, 21701, 21704, 21708, 21711, 21715, 21721, 21726, 21730, + 21733, 21737, 21741, 21746, 21750, 21755, 21759, 21764, 21768, 21773, + 21777, 21782, 21788, 21792, 21797, 21801, 21806, 21812, 21816, 21822, + 21828, 21832, 21837, 21845, 21853, 21860, 21865, 21870, 21879, 21886, + 21893, 21898, 21904, 21908, 21912, 21916, 21920, 21924, 21928, 21932, + 21936, 21940, 21944, 21950, 21955, 21960, 21963, 21967, 21971, 21976, + 21980, 21985, 21989, 21994, 21998, 22003, 22007, 22012, 22016, 22021, + 22025, 22030, 22036, 22040, 22045, 22050, 22054, 22058, 22062, 22066, + 22069, 22073, 22079, 22084, 22089, 22093, 22097, 22101, 22106, 22110, + 22115, 22119, 22124, 22127, 22131, 22135, 22140, 22144, 22149, 22153, + 22158, 22164, 22168, 22172, 22176, 22180, 22184, 22188, 22192, 22196, + 22200, 22204, 22208, 22214, 22217, 22221, 22225, 22230, 22234, 22239, + 22243, 22248, 22252, 22257, 22261, 22266, 22270, 22275, 22279, 22284, + 22290, 22294, 22298, 22304, 22310, 22316, 22322, 22326, 22330, 22334, + 22338, 22342, 22346, 22352, 22356, 22360, 22364, 22369, 22373, 22378, + 22382, 22387, 22391, 22396, 22400, 22405, 22409, 22414, 22418, 22423, + 22429, 22433, 22439, 22443, 22447, 22451, 22455, 22459, 22463, 22469, + 22472, 22476, 22480, 22485, 22489, 22494, 22498, 22503, 22507, 22512, + 22516, 22521, 22525, 22530, 22534, 22539, 22545, 22548, 22552, 22556, + 22561, 22566, 22570, 22574, 22578, 22582, 22586, 22590, 22596, 22599, + 22603, 22607, 22612, 22616, 22621, 22625, 22630, 22636, 22639, 22644, + 22648, 22652, 22656, 22660, 22664, 22668, 22672, 22678, 22682, 22686, + 22690, 22695, 22699, 22704, 22708, 22713, 22717, 22722, 22726, 22731, + 22735, 22740, 22744, 22749, 22752, 22756, 22760, 22764, 22768, 22772, + 22776, 22780, 22784, 22790, 22794, 22798, 22802, 22807, 22811, 22816, + 22820, 22825, 22829, 22834, 22838, 22843, 22847, 22852, 22856, 22861, + 22867, 22870, 22875, 22879, 22884, 22890, 22896, 22902, 22908, 22914, + 22920, 22926, 22930, 22934, 22938, 22942, 22946, 22950, 22954, 22958, + 22963, 22967, 22972, 22976, 22981, 22985, 22990, 22994, 22999, 23003, + 23008, 23012, 23017, 23021, 23025, 23029, 23033, 23037, 23041, 23045, + 23051, 23054, 23058, 23062, 23067, 23071, 23076, 23080, 23085, 23089, + 23094, 23098, 23103, 23107, 23112, 23116, 23121, 23127, 23131, 23137, + 23142, 23148, 23152, 23158, 23163, 23167, 23171, 23175, 23179, 23183, + 23188, 23191, 23195, 23200, 23204, 23209, 23212, 23216, 23220, 23224, + 23228, 23232, 23236, 23240, 23244, 23248, 23252, 23256, 23261, 23265, + 23269, 23275, 23279, 23285, 23289, 23295, 23299, 23303, 23307, 23311, + 23315, 23320, 23324, 23328, 23332, 23336, 23340, 23344, 23348, 23352, + 23356, 23360, 23366, 23372, 23378, 23384, 23390, 23395, 23401, 23407, + 23413, 23417, 23421, 23425, 23429, 23433, 23437, 23441, 23445, 23449, + 23453, 23457, 23461, 23465, 23470, 23475, 23480, 23484, 23488, 23492, + 23496, 23500, 23504, 23508, 23512, 23516, 23520, 23526, 23532, 23538, + 23544, 23550, 23556, 23562, 23568, 23574, 23578, 23582, 23586, 23590, + 23594, 23598, 23602, 23608, 23614, 23620, 23626, 23632, 23638, 23644, + 23650, 23656, 23661, 23666, 23671, 23676, 23682, 23688, 23694, 23700, + 23706, 23712, 23718, 23723, 23729, 23735, 23741, 23746, 23752, 23758, + 23764, 23769, 23774, 23779, 23784, 23789, 23794, 23799, 23804, 23809, + 23814, 23819, 23824, 23828, 23833, 23838, 23843, 23848, 23853, 23858, + 23863, 23868, 23873, 23878, 23883, 23888, 23893, 23898, 23903, 23908, + 23913, 23918, 23923, 23928, 23933, 23938, 23943, 23948, 23953, 23958, + 23963, 23968, 23973, 23977, 23982, 23987, 23992, 23997, 24002, 24007, + 24012, 24017, 24022, 24027, 24032, 24037, 24042, 24047, 24052, 24057, + 24062, 24067, 24072, 24077, 24082, 24087, 24092, 24097, 24102, 24106, + 24111, 24116, 24121, 24126, 24131, 24135, 24140, 24145, 24150, 24155, + 24160, 24164, 24169, 24175, 24180, 24185, 24190, 24195, 24201, 24206, + 24211, 24216, 24221, 24226, 24231, 24236, 24241, 24246, 24251, 24256, + 24261, 24266, 24271, 24276, 24281, 24286, 24291, 24296, 24301, 24306, + 24311, 24316, 24321, 24326, 24331, 24336, 24341, 24346, 24351, 24356, + 24361, 24366, 24371, 24376, 24381, 24386, 24391, 24396, 24401, 24406, + 24411, 24416, 24421, 24427, 24432, 24437, 24442, 24447, 24452, 24457, + 24462, 24467, 24472, 24477, 24482, 24487, 24492, 24497, 24502, 24507, + 24512, 24517, 24522, 24527, 24532, 24537, 24542, 24547, 24552, 24557, + 24562, 24567, 24572, 24577, 24582, 24587, 24592, 24597, 24602, 24607, + 24612, 24617, 24623, 24627, 24631, 24635, 24639, 24643, 24647, 24651, + 24655, 24661, 24667, 24673, 24679, 24685, 24691, 24697, 24704, 24710, + 24715, 24720, 24725, 24730, 24735, 24740, 24745, 24750, 24755, 24760, + 24765, 24770, 24775, 24780, 24785, 24790, 24795, 24800, 24805, 24810, + 24815, 24820, 24825, 24830, 24835, 24840, 24845, 24850, 0, 0, 0, 24856, + 24866, 24870, 24877, 24881, 24885, 24889, 24897, 24901, 24906, 24911, + 24916, 24920, 24925, 24930, 24933, 24937, 24941, 24950, 24954, 24958, + 24964, 24968, 24972, 24980, 24984, 24992, 24998, 25004, 25010, 25016, + 25025, 25030, 25034, 25043, 25046, 25052, 25056, 25062, 25067, 25073, + 25081, 25087, 25092, 25099, 25104, 25108, 25112, 25122, 25128, 25132, + 25142, 25148, 25152, 25156, 25163, 25170, 25175, 25180, 25189, 25193, + 25197, 25201, 25209, 25216, 25220, 25224, 25228, 25232, 25236, 25240, + 25244, 25248, 25252, 25256, 25260, 25265, 25270, 25275, 25279, 25283, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 25287, 25291, 25295, 25299, + 25303, 25308, 25313, 25318, 25323, 25327, 25331, 25336, 25340, 0, 25344, + 25349, 25354, 25359, 25363, 25368, 25373, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 25378, 25382, 25386, 25390, 25394, 25399, 25404, 25409, 25414, 25418, + 25422, 25427, 25431, 25435, 25439, 25444, 25449, 25454, 25458, 25463, + 25468, 25473, 25479, 0, 0, 0, 0, 0, 0, 0, 0, 0, 25484, 25488, 25492, + 25496, 25500, 25505, 25510, 25515, 25520, 25524, 25528, 25533, 25537, + 25541, 25545, 25550, 25555, 25560, 25564, 25569, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 25574, 25578, 25582, 25586, 25590, 25595, 25600, 25605, + 25610, 25614, 25618, 25623, 25627, 0, 25631, 25636, 25641, 0, 25646, + 25651, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 25656, 25659, 25663, 25667, + 25671, 25675, 25679, 25683, 25687, 25691, 25695, 25699, 25703, 25707, + 25711, 25715, 25719, 25723, 25726, 25730, 25734, 25738, 25742, 25746, + 25750, 25754, 25758, 25762, 25766, 25770, 25774, 25778, 25782, 25785, + 25789, 25793, 25799, 25805, 25811, 25817, 25823, 25829, 25835, 25841, + 25847, 25853, 25859, 25865, 25871, 25877, 25886, 25895, 25901, 25907, + 25913, 25918, 25922, 25927, 25932, 25937, 25941, 25946, 25951, 25956, + 25960, 25965, 25969, 25974, 25979, 25984, 25989, 25993, 25997, 26001, + 26005, 26009, 26013, 26017, 26021, 26025, 26029, 26035, 26039, 26043, + 26047, 26051, 26055, 26063, 26069, 26073, 26079, 26083, 26089, 26093, 0, + 0, 26097, 26101, 26104, 26107, 26110, 26113, 26116, 26119, 26122, 26125, + 0, 0, 0, 0, 0, 0, 26128, 26136, 26144, 26152, 26160, 26168, 26176, 26184, + 26192, 26200, 0, 0, 0, 0, 0, 0, 26208, 26211, 26214, 26217, 26222, 26225, + 26230, 26237, 26245, 26250, 26257, 26260, 26267, 26274, 26281, 0, 26285, + 26289, 26292, 26295, 26298, 26301, 26304, 26307, 26310, 26313, 0, 0, 0, + 0, 0, 0, 26316, 26319, 26322, 26325, 26328, 26331, 26335, 26339, 26343, + 26346, 26350, 26354, 26357, 26361, 26365, 26368, 26372, 26376, 26380, + 26384, 26388, 26392, 26396, 26399, 26402, 26406, 26410, 26413, 26417, + 26421, 26425, 26429, 26433, 26437, 26441, 26445, 26452, 26457, 26462, + 26467, 26472, 26478, 26484, 26490, 26496, 26501, 26507, 26513, 26518, + 26524, 26530, 26536, 26542, 26548, 26553, 26559, 26564, 26570, 26576, + 26582, 26588, 26594, 26599, 26604, 26610, 26616, 26621, 26627, 26632, + 26638, 26643, 26648, 26654, 26660, 26666, 26672, 26678, 26684, 26690, + 26696, 26702, 26708, 26714, 26720, 26725, 26730, 26735, 26741, 0, 0, 0, + 0, 0, 0, 0, 0, 26747, 26756, 26765, 26773, 26781, 26791, 26799, 26808, + 26815, 26822, 26829, 26837, 26845, 26853, 26861, 26869, 26877, 26885, + 26893, 26900, 26908, 26916, 26924, 26932, 26940, 26950, 26960, 26970, + 26980, 26990, 27000, 27010, 27020, 27030, 27040, 27050, 27060, 27070, + 27080, 27088, 27096, 27106, 27114, 0, 0, 0, 0, 0, 27124, 27128, 27132, + 27136, 27140, 27144, 27148, 27152, 27156, 27160, 27164, 27168, 27172, + 27176, 27180, 27184, 27188, 27192, 27196, 27200, 27204, 27208, 27212, + 27216, 27222, 27226, 27232, 27236, 27242, 27246, 27252, 27256, 27260, + 27264, 27268, 27272, 27276, 27282, 27288, 27294, 27300, 27305, 27310, + 27315, 27321, 27327, 27333, 27339, 27346, 27352, 27357, 27362, 27366, + 27370, 27374, 27378, 27382, 27386, 27390, 27396, 27402, 27408, 27413, + 27420, 27425, 27430, 27436, 27441, 27448, 27455, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 27461, 27466, 27469, 27473, 27477, 27481, 27485, 27489, 27493, + 27497, 27501, 27505, 27509, 27513, 27517, 27521, 27524, 27527, 27531, + 27535, 27539, 27542, 27545, 27548, 27552, 27556, 27560, 27564, 27568, 0, + 0, 0, 27571, 27575, 27579, 27583, 27588, 27593, 27598, 27603, 27607, + 27611, 27616, 27621, 0, 0, 0, 0, 27627, 27631, 27636, 27641, 27646, + 27650, 27654, 27658, 27662, 27667, 27671, 27675, 0, 0, 0, 0, 27679, 0, 0, + 0, 27683, 27687, 27691, 27695, 27698, 27701, 27704, 27707, 27710, 27713, + 27716, 27719, 27722, 27727, 27733, 27739, 27745, 27751, 27756, 27762, + 27768, 27774, 27779, 27785, 27790, 27796, 27802, 27807, 27813, 27819, + 27825, 27830, 27835, 27840, 27846, 27852, 27857, 27863, 27868, 27874, + 27879, 27885, 0, 0, 27891, 27897, 27903, 27909, 27915, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 27921, 27928, 27935, 27941, 27948, 27955, 27961, 27968, + 27975, 27982, 27989, 27995, 28002, 28009, 28015, 28022, 28029, 28035, + 28042, 28049, 28055, 28061, 28068, 28074, 28080, 28087, 28093, 28100, + 28107, 28114, 28121, 28128, 28135, 28141, 28148, 28155, 28161, 28168, + 28175, 28182, 28189, 28196, 28203, 28210, 0, 0, 0, 0, 28217, 28225, + 28232, 28239, 28245, 28252, 28258, 28265, 28271, 28278, 28285, 28292, + 28299, 28306, 28313, 28320, 28327, 28334, 28341, 28348, 28354, 28360, + 28367, 28374, 28381, 28387, 0, 0, 0, 0, 0, 0, 28393, 28399, 28404, 28409, + 28414, 28419, 28424, 28429, 28434, 28439, 28444, 0, 0, 0, 28450, 28456, + 28462, 28466, 28472, 28478, 28484, 28490, 28496, 28502, 28508, 28514, + 28520, 28526, 28532, 28538, 28544, 28550, 28556, 28560, 28566, 28572, + 28578, 28584, 28590, 28596, 28602, 28608, 28614, 28620, 28626, 28632, + 28638, 28644, 28650, 28654, 28659, 28664, 28669, 28673, 28678, 28682, + 28687, 28692, 28697, 28701, 28706, 28711, 28716, 28721, 28726, 28730, + 28734, 28739, 28744, 28749, 28753, 28757, 28762, 28767, 28772, 28777, 0, + 0, 28783, 28787, 28794, 28799, 28805, 28811, 28816, 28822, 28828, 28833, + 28839, 28845, 28851, 28857, 28863, 28868, 28873, 28879, 28884, 28890, + 28895, 28901, 28907, 28913, 28919, 28923, 28928, 28933, 28939, 28945, + 28950, 28956, 28962, 28966, 28971, 28976, 28980, 28985, 28990, 28995, + 29000, 29006, 29012, 29018, 29023, 29028, 29032, 29037, 29041, 29046, + 29050, 29055, 29060, 29065, 29070, 29077, 29084, 29092, 29103, 29112, + 29120, 29127, 29138, 29144, 29151, 0, 29158, 29163, 29168, 29176, 29182, + 29190, 29195, 29201, 29207, 29213, 29218, 29224, 29229, 29236, 29242, + 29247, 29253, 29259, 29265, 29272, 29279, 29286, 29291, 29296, 29303, + 29310, 29317, 29324, 29331, 0, 0, 29338, 29345, 29352, 29358, 29364, + 29370, 29376, 29382, 29388, 29394, 29400, 0, 0, 0, 0, 0, 0, 29406, 29412, + 29417, 29422, 29427, 29432, 29437, 29442, 29447, 29452, 0, 0, 0, 0, 0, 0, + 29457, 29462, 29467, 29472, 29477, 29482, 29487, 29495, 29502, 29507, + 29512, 29517, 29522, 29527, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 58646, 58654, 58662, 58672, 58678, 58682, 58686, 58692, 58698, 58703, - 58707, 58711, 58715, 58719, 58725, 58729, 58733, 58737, 58747, 58751, - 58755, 58761, 58765, 58771, 58775, 58779, 58785, 58791, 58797, 58805, - 58813, 58817, 58821, 58825, 58831, 58835, 58844, 58850, 58854, 58858, - 58862, 58866, 58870, 58874, 58881, 58887, 58893, 58897, 58903, 58907, - 58913, 58921, 58931, 58935, 58943, 58947, 58953, 58961, 58969, 58973, - 58977, 58983, 58988, 58994, 59000, 59004, 59008, 59011, 59015, 59019, - 59023, 59027, 59031, 59035, 59039, 59042, 59046, 59050, 59054, 59058, - 59062, 59066, 59069, 59073, 59077, 59080, 59084, 59088, 59092, 59096, - 59100, 59104, 59108, 59112, 59116, 59120, 59124, 59128, 59132, 59136, - 59140, 59144, 59148, 59152, 59156, 59160, 59164, 59168, 59172, 59176, - 59180, 59184, 59188, 59192, 59196, 59200, 59204, 59208, 59212, 59216, - 59220, 59224, 59228, 59232, 59236, 59240, 59244, 59248, 59252, 59256, - 59259, 59263, 59267, 59271, 59275, 59279, 59283, 59287, 59291, 59295, - 59299, 59303, 59307, 59311, 59315, 59319, 59323, 59327, 59331, 59335, - 59339, 59343, 59347, 59351, 59355, 59359, 59363, 59367, 59371, 59375, - 59379, 59383, 59387, 59391, 59395, 59399, 59403, 59407, 59411, 59415, - 59419, 59423, 59427, 59431, 59435, 59439, 59443, 59447, 59451, 59455, - 59459, 59463, 59467, 59471, 59475, 59479, 59483, 59487, 59491, 59495, - 59499, 59503, 59507, 59511, 59515, 59519, 59523, 59527, 59531, 59535, - 59539, 59543, 59547, 59551, 59555, 59559, 59563, 59567, 59571, 59575, - 59579, 59583, 59587, 59591, 59595, 59599, 59603, 59607, 59611, 59615, - 59619, 59623, 59627, 59631, 59635, 59639, 59643, 59647, 59651, 59655, - 59659, 59663, 59667, 59671, 59675, 59679, 59683, 59687, 59691, 59695, - 59699, 59703, 59707, 59711, 59715, 59719, 59723, 59727, 59730, 59734, - 59738, 59742, 59746, 59750, 59754, 59758, 59762, 59766, 59770, 59774, - 59778, 59782, 59786, 59790, 59794, 59798, 59802, 59806, 59810, 59814, - 59818, 59822, 59826, 59830, 59834, 59838, 59842, 59846, 59850, 59854, - 59858, 59862, 59866, 59870, 59874, 59878, 59882, 59886, 59890, 59894, - 59898, 59902, 59906, 59910, 59914, 59918, 59922, 59926, 59930, 59934, - 59938, 59942, 59946, 59950, 59954, 59958, 59962, 59966, 59970, 59974, - 59978, 59982, 59986, 59990, 59994, 59998, 60002, 60006, 60010, 60014, - 60018, 60022, 60026, 60030, 60034, 60038, 60042, 60046, 60050, 60054, - 60058, 60062, 60066, 60070, 60074, 60078, 60082, 60086, 60090, 60094, - 60098, 60102, 60106, 60110, 60114, 60118, 60122, 60126, 60130, 60134, - 60138, 60142, 60146, 60150, 60154, 60158, 60162, 60166, 60170, 60174, - 60178, 60182, 60186, 60190, 60193, 60197, 60201, 60205, 60209, 60213, - 60217, 60221, 60225, 60229, 60233, 60237, 60241, 60245, 60249, 60253, - 60257, 60261, 60265, 60269, 60273, 60277, 60281, 60285, 60289, 60293, - 60297, 60301, 60305, 60309, 60313, 60317, 60321, 60325, 60329, 60333, - 60337, 60341, 60345, 60349, 60353, 60357, 60361, 60365, 60369, 60373, - 60377, 60381, 60385, 60389, 60393, 60397, 60401, 60405, 60409, 60413, - 60417, 60421, 60425, 60429, 60433, 60437, 60441, 60445, 60449, 60453, - 60457, 60461, 60465, 60469, 60473, 60477, 60481, 60485, 60489, 60493, - 60497, 60501, 60505, 60509, 60513, 60517, 60521, 60525, 60529, 60533, - 60537, 60541, 60545, 60549, 60553, 60557, 60561, 60565, 60569, 60573, - 60577, 60581, 60585, 60589, 60593, 60597, 60601, 60605, 60609, 60613, - 60617, 60621, 60625, 60629, 60633, 60637, 60641, 60645, 60649, 60653, - 60657, 60661, 60665, 60669, 60673, 60677, 60681, 60685, 60689, 60693, - 60697, 60701, 60705, 60709, 60713, 60717, 60721, 60725, 60729, 60733, - 60737, 60741, 60745, 60749, 60753, 60757, 60761, 60765, 60769, 60773, - 60777, 60781, 60785, 60789, 60793, 60797, 60801, 60805, 60809, 60813, - 60817, 60821, 60825, 60829, 60833, 60837, 60841, 60845, 60849, 60853, - 60857, 60861, 60865, 60869, 60873, 60877, 60881, 60885, 60889, 60893, - 60897, 60901, 60905, 60909, 60913, 60917, 60921, 60925, 60929, 60933, - 60937, 60941, 60945, 60949, 60953, 60957, 60961, 60965, 60969, 60973, - 60977, 60981, 60985, 60989, 60993, 60997, 61001, 61005, 61009, 61013, - 61017, 61021, 61025, 61029, 61033, 61037, 61041, 61045, 61048, 61052, - 61056, 61060, 61064, 61068, 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, 61204, 61208, 61212, - 61216, 61220, 61224, 61228, 61232, 61236, 61240, 61244, 61248, 61252, - 61256, 61260, 61264, 61268, 61272, 61276, 61280, 61284, 61288, 61292, - 61296, 61300, 61304, 61308, 61312, 61316, 61320, 61324, 61328, 61332, - 61336, 61340, 61344, 61348, 61352, 61356, 61360, 61364, 61368, 61372, - 61376, 61380, 61384, 61388, 61392, 61396, 61400, 61404, 61408, 61412, - 61416, 61420, 61424, 61428, 61432, 61436, 61440, 61444, 61448, 61452, - 61456, 61460, 61464, 61468, 61472, 61476, 61480, 61484, 61488, 61492, - 61496, 61500, 61503, 61507, 61511, 61515, 61519, 61523, 61527, 61531, - 61535, 61539, 61543, 61547, 61551, 61555, 61559, 61563, 61567, 61571, - 61575, 61579, 61583, 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, 61715, 61719, 61723, 61727, 61731, - 61735, 61739, 61743, 61747, 61751, 61755, 61759, 61763, 61767, 61771, - 61775, 61779, 61783, 61787, 61791, 61795, 61799, 61803, 61807, 61811, - 61815, 61819, 61823, 61827, 61831, 61835, 61839, 61843, 61847, 61851, - 61855, 61859, 61863, 61867, 61871, 61875, 61879, 61883, 61887, 61891, - 61895, 61899, 61903, 61907, 61911, 61915, 61919, 61923, 61927, 61931, - 61935, 61939, 61943, 61947, 61951, 61955, 61959, 61963, 61967, 61971, - 61975, 61979, 61983, 61987, 61991, 61995, 61999, 62003, 62007, 62011, - 62015, 62019, 62023, 62027, 62031, 62035, 62039, 62043, 62047, 62051, - 62055, 62059, 62063, 62067, 62071, 62075, 62079, 62083, 62087, 62091, - 62095, 62099, 62103, 62106, 62110, 62114, 62118, 62122, 62126, 62130, - 62134, 62138, 62142, 62146, 62150, 62154, 62158, 62162, 62166, 62170, - 62174, 62178, 62182, 62186, 62190, 62194, 62198, 62202, 62206, 62210, - 62214, 62218, 62222, 62226, 62230, 62234, 62238, 62242, 62246, 62250, - 62254, 62258, 62262, 62266, 62270, 62274, 62278, 62282, 62286, 62290, - 62294, 62298, 62302, 62306, 62310, 62314, 62318, 62322, 62326, 62330, - 62334, 62338, 62342, 62346, 62350, 62354, 62358, 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, 62486, 62490, - 62494, 62498, 62502, 62506, 62510, 62514, 62518, 62522, 62526, 62530, - 62534, 62538, 62542, 62546, 62550, 62554, 62558, 62562, 62566, 62570, - 62574, 62578, 62582, 62586, 62590, 62594, 62598, 62602, 62606, 62610, - 62614, 62618, 62622, 62626, 62630, 62634, 62638, 62642, 62646, 62650, - 62654, 62658, 62662, 62666, 62670, 62674, 62678, 62682, 62686, 62690, - 62694, 62698, 62702, 62706, 62710, 62714, 62718, 62722, 62726, 62730, - 62734, 62738, 62742, 62746, 62750, 62754, 62758, 62762, 62766, 62770, - 62774, 62778, 62782, 62786, 62790, 62794, 62798, 62802, 62806, 62810, - 62814, 62818, 62822, 62826, 62830, 62834, 62838, 62842, 62846, 62850, - 62854, 62858, 62862, 62865, 62869, 62873, 62877, 62881, 62885, 62889, - 62893, 62897, 62901, 62905, 62909, 62913, 62917, 62921, 62925, 62929, - 62933, 62937, 62941, 62945, 62949, 62953, 62957, 62961, 62965, 62969, - 62973, 62977, 62981, 62985, 62989, 62993, 62997, 63001, 63005, 63009, - 63013, 63017, 63021, 63025, 63029, 63033, 63037, 63041, 63045, 63049, - 63053, 63057, 63061, 63065, 63069, 63073, 63077, 63081, 63085, 63089, - 63093, 63097, 63101, 63105, 63109, 63113, 63117, 63121, 63125, 63129, - 63133, 63137, 63141, 63145, 63149, 63153, 63157, 63161, 63165, 63169, - 63173, 63177, 63181, 63185, 63189, 63193, 63197, 63201, 63205, 63209, - 63213, 63217, 63221, 63225, 63229, 63233, 63237, 63241, 63245, 63249, - 63253, 63257, 63261, 63265, 63269, 63273, 63277, 63281, 63285, 63289, - 63293, 63297, 63301, 63305, 63309, 63313, 63317, 63321, 63325, 63329, - 63333, 63337, 63341, 63345, 63349, 63353, 63357, 63361, 63365, 63369, - 63373, 63377, 63381, 63385, 63389, 63393, 63397, 63401, 63405, 63409, - 63413, 63417, 63421, 63425, 63429, 63433, 63437, 63441, 63445, 63449, - 63453, 63457, 63461, 63465, 63469, 63473, 63477, 63481, 63485, 63489, - 63493, 63497, 63501, 63505, 63509, 63513, 63517, 63521, 63525, 63529, - 63533, 63537, 63541, 63545, 63549, 63553, 63557, 63561, 63565, 63569, - 63573, 63577, 63581, 63585, 63589, 63593, 63597, 63601, 63605, 63609, - 63613, 63617, 63621, 63625, 63629, 63633, 63637, 63641, 63645, 0, 0, 0, - 63649, 63653, 63657, 63661, 63665, 63669, 63673, 63677, 63681, 63685, - 63689, 63693, 63697, 63701, 63705, 63709, 63713, 63717, 63721, 63725, - 63729, 63733, 63737, 63741, 63745, 63749, 63753, 63757, 63761, 63765, - 63769, 63773, 63777, 63781, 63785, 63789, 63793, 63797, 63801, 63805, - 63809, 63813, 63817, 63821, 63825, 63829, 63833, 63837, 63841, 63845, - 63849, 63853, 63857, 63861, 63865, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63869, 63873, - 63877, 63881, 63885, 63889, 63893, 63897, 63901, 63905, 63909, 63913, - 63917, 63921, 63925, 63929, 63933, 63937, 63941, 63945, 63949, 63953, - 63957, 63961, 63965, 63969, 63973, 63977, 63981, 63985, 63989, 63993, - 63997, 64001, 64005, 64009, 64013, 64016, 64020, 64024, 64028, 64032, - 64036, 64040, 64044, 64048, 64052, 64056, 64060, 64064, 64068, 64072, - 64076, 64080, 64084, 64088, 64092, 64096, 64100, 64104, 64108, 64112, - 64116, 64120, 64124, 64128, 64132, 64136, 64140, 64144, 64148, 64152, - 64156, 64160, 64163, 64167, 64171, 64174, 64178, 64182, 64186, 64189, - 64193, 64197, 64201, 64205, 64209, 64213, 64217, 64221, 64225, 64229, - 64233, 64237, 64241, 64245, 64248, 64252, 64256, 64260, 64264, 64268, - 64272, 64276, 64280, 64284, 64287, 64290, 64294, 64298, 64302, 64305, - 64309, 64313, 64317, 64321, 64325, 64329, 64333, 64337, 64341, 64345, - 64349, 64353, 64357, 64361, 64365, 64369, 64373, 64377, 64381, 64385, - 64389, 64393, 64397, 64401, 64405, 64409, 64413, 64417, 64421, 64425, - 64429, 64433, 64437, 64441, 64445, 64449, 64453, 64457, 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, 64607, 64611, 64615, 64619, 64623, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 29532, 29538, + 29544, 29548, 29552, 29556, 29560, 29566, 29570, 29576, 29580, 29586, + 29592, 29600, 29606, 29614, 29618, 29622, 29626, 29632, 29635, 29640, + 29644, 29650, 29654, 29658, 29664, 29668, 29674, 29678, 29684, 29692, + 29700, 29708, 29714, 29718, 29724, 29728, 29734, 29737, 29740, 29746, + 29750, 29756, 29759, 29762, 29765, 29769, 29773, 29779, 29785, 29789, + 29792, 29796, 29801, 29806, 29813, 29818, 29825, 29832, 29841, 29848, + 29857, 29862, 29869, 29876, 29885, 29890, 29897, 29902, 29908, 29914, + 29920, 29926, 29932, 29938, 0, 0, 0, 0, 29944, 29948, 29951, 29954, + 29957, 29960, 29963, 29966, 29969, 29972, 29975, 29978, 29981, 29984, + 29989, 29994, 29999, 30002, 30007, 30012, 30017, 30022, 30029, 30034, + 30039, 30044, 30049, 30056, 30062, 30068, 30074, 30080, 30086, 30095, + 30104, 30110, 30116, 30125, 30134, 30143, 30152, 30161, 30170, 30179, + 30188, 0, 0, 0, 30197, 30202, 30207, 30212, 30216, 30220, 30224, 30229, + 30233, 30237, 30242, 30246, 30251, 30256, 30261, 30266, 30271, 30276, + 30281, 30286, 30291, 30295, 30299, 30304, 30309, 30314, 30318, 30322, + 30326, 30331, 30336, 30341, 30346, 30350, 30357, 30364, 30371, 30377, + 30383, 30389, 30395, 30401, 30407, 0, 0, 0, 30412, 30417, 30422, 30427, + 30431, 30435, 30439, 30443, 30447, 30451, 30455, 30459, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 30463, 30466, 30470, + 30474, 30478, 30482, 30486, 30490, 30494, 30498, 30502, 30506, 30510, + 30514, 30517, 30520, 30524, 30528, 30532, 30536, 30540, 30544, 30547, + 30551, 30555, 30559, 30563, 30566, 30569, 30573, 30576, 30580, 30584, + 30588, 30592, 30596, 30599, 30604, 30609, 30614, 30618, 30622, 30627, + 30631, 30636, 30640, 30646, 30651, 30656, 30661, 30667, 30672, 30678, + 30684, 30690, 30694, 0, 0, 0, 30698, 30703, 30712, 30717, 30724, 30729, + 30733, 30736, 30739, 30742, 30745, 30748, 30751, 30754, 30757, 0, 0, 0, + 30760, 30764, 30768, 30772, 30779, 30785, 30791, 30797, 30803, 30809, + 30815, 30821, 30827, 30833, 30840, 30847, 30854, 30861, 30868, 30875, + 30882, 30889, 30896, 30903, 30910, 30917, 30924, 30931, 30938, 30945, + 30952, 30959, 30966, 30973, 30980, 30987, 30994, 31001, 31008, 31015, + 31022, 31029, 31036, 31043, 31051, 31059, 31067, 31073, 31079, 31085, + 31093, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 31102, 31107, 31112, 31117, 31122, 31131, + 31142, 31151, 31162, 31168, 31181, 31187, 31194, 31201, 31206, 31212, + 31218, 31229, 31238, 31245, 31252, 31260, 31267, 31275, 31285, 31295, + 31302, 31309, 31316, 31326, 31331, 31339, 31345, 31353, 31362, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 31367, 31372, 31378, 31384, 31392, 31398, + 31404, 31410, 31415, 31422, 31427, 31433, 31439, 31447, 31452, 31458, + 31463, 31470, 31476, 31484, 31492, 31498, 31504, 31511, 31518, 31524, + 31530, 31536, 31542, 31547, 31553, 31561, 31568, 31574, 31580, 31586, + 31592, 31600, 31604, 31610, 31616, 31622, 31628, 31634, 31640, 31644, + 31649, 31654, 31661, 31666, 31670, 31675, 31680, 31685, 31689, 31694, + 31699, 31703, 31707, 31711, 31716, 31720, 31725, 31730, 31734, 31739, + 31743, 31748, 31752, 31757, 31762, 31768, 31773, 31778, 31782, 31787, + 31793, 31800, 31805, 31810, 31815, 31819, 31824, 31828, 31834, 31841, + 31848, 31853, 31858, 31862, 31868, 31873, 31878, 31883, 31888, 31894, + 31899, 31905, 31910, 31916, 31922, 31928, 31935, 31942, 31949, 31956, + 31963, 31970, 31975, 31984, 31994, 32004, 32014, 32024, 32034, 32044, + 32057, 32067, 32077, 32087, 32093, 32098, 32105, 32113, 32121, 32128, + 32135, 32142, 32149, 32157, 32166, 32175, 32184, 32193, 32202, 32211, + 32220, 32229, 32238, 32247, 32256, 32265, 32274, 32283, 32291, 32300, + 32311, 32319, 32329, 32340, 32349, 32358, 32368, 32377, 32385, 32394, + 32400, 32405, 32413, 32418, 32425, 32430, 32439, 32445, 32451, 32458, + 32463, 32468, 32476, 32484, 32493, 32502, 32507, 32514, 32524, 32532, + 32541, 32546, 32552, 32557, 32564, 32569, 32578, 32583, 32588, 32593, + 32600, 32606, 32611, 32620, 32628, 32633, 32638, 32645, 32652, 32656, + 32660, 32663, 32666, 32669, 32672, 32675, 32678, 32685, 32688, 32691, + 32696, 32700, 32704, 32708, 32712, 32716, 32726, 32732, 32738, 32744, + 32752, 32760, 32766, 32772, 32779, 32785, 32790, 32796, 32802, 32807, + 32813, 32819, 32827, 32832, 32838, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 32844, 32850, 32855, 32864, 32872, 32880, + 32887, 32894, 32901, 32908, 32916, 32924, 32934, 32944, 32952, 32960, + 32968, 32976, 32985, 32994, 33002, 33010, 33019, 33028, 33038, 33048, + 33057, 33066, 33074, 33082, 33090, 33098, 33108, 33118, 33126, 33134, + 33142, 33150, 33158, 33166, 33174, 33182, 33190, 33198, 33206, 33214, + 33223, 33232, 33241, 33250, 33260, 33270, 33277, 33284, 33292, 33300, + 33309, 33318, 33326, 33334, 33346, 33358, 33367, 33376, 33385, 33394, + 33401, 33408, 33416, 33424, 33432, 33440, 33448, 33456, 33464, 33472, + 33481, 33490, 33499, 33508, 33517, 33526, 33536, 33546, 33556, 33566, + 33575, 33584, 33591, 33598, 33606, 33614, 33622, 33630, 33638, 33646, + 33658, 33670, 33679, 33688, 33696, 33704, 33712, 33720, 33731, 33742, + 33753, 33764, 33776, 33788, 33796, 33804, 33812, 33820, 33829, 33838, + 33847, 33856, 33864, 33872, 33880, 33888, 33896, 33904, 33913, 33922, + 33932, 33942, 33950, 33958, 33966, 33974, 33982, 33990, 33997, 34004, + 34012, 34020, 34028, 34036, 34044, 34052, 34060, 34068, 34076, 34084, + 34092, 34100, 34108, 34116, 34124, 34132, 34141, 34150, 34159, 34167, + 34176, 34185, 34194, 34203, 34213, 34222, 34228, 34233, 34240, 34247, + 34255, 34263, 34272, 34281, 34291, 34301, 34312, 34323, 34333, 34343, + 34353, 34363, 34372, 34381, 34391, 34401, 34412, 34423, 34433, 34443, + 34453, 34463, 34470, 34477, 34485, 34493, 34500, 34507, 34516, 34525, + 34535, 34545, 34556, 34567, 34577, 34587, 34597, 34607, 34616, 34625, + 34633, 34641, 34648, 34655, 34663, 34671, 34680, 34689, 34699, 34709, + 34720, 34731, 34741, 34751, 34761, 34771, 34780, 34789, 34799, 34809, + 34820, 34831, 34841, 34851, 34861, 34871, 34878, 34885, 34893, 34901, + 34910, 34919, 34929, 34939, 34950, 34961, 34971, 34981, 34991, 35001, + 35009, 35017, 35025, 35033, 35042, 35051, 35059, 35067, 35074, 35081, + 35088, 35095, 35103, 35111, 35119, 35127, 35137, 35147, 35157, 35167, + 35177, 35187, 35195, 35203, 35213, 35223, 35233, 35243, 35253, 35263, + 35271, 35279, 35289, 35299, 35309, 0, 0, 35319, 35327, 35335, 35345, + 35355, 35365, 0, 0, 35375, 35383, 35391, 35401, 35411, 35421, 35431, + 35441, 35451, 35459, 35467, 35477, 35487, 35497, 35507, 35517, 35527, + 35535, 35543, 35553, 35563, 35573, 35583, 35593, 35603, 35611, 35619, + 35629, 35639, 35649, 35659, 35669, 35679, 35687, 35695, 35705, 35715, + 35725, 0, 0, 35735, 35743, 35751, 35761, 35771, 35781, 0, 0, 35791, + 35799, 35807, 35817, 35827, 35837, 35847, 35857, 0, 35867, 0, 35875, 0, + 35885, 0, 35895, 35905, 35913, 35921, 35931, 35941, 35951, 35961, 35971, + 35981, 35989, 35997, 36007, 36017, 36027, 36037, 36047, 36057, 36065, + 36073, 36081, 36089, 36097, 36105, 36113, 36121, 36129, 36137, 36145, + 36153, 36161, 0, 0, 36169, 36179, 36189, 36202, 36215, 36228, 36241, + 36254, 36267, 36277, 36287, 36300, 36313, 36326, 36339, 36352, 36365, + 36375, 36385, 36398, 36411, 36424, 36437, 36450, 36463, 36473, 36483, + 36496, 36509, 36522, 36535, 36548, 36561, 36571, 36581, 36594, 36607, + 36620, 36633, 36646, 36659, 36669, 36679, 36692, 36705, 36718, 36731, + 36744, 36757, 36765, 36773, 36784, 36792, 0, 36803, 36811, 36822, 36830, + 36838, 36846, 36854, 36862, 36865, 36868, 36871, 36874, 36880, 36891, + 36899, 0, 36910, 36918, 36929, 36937, 36945, 36953, 36961, 36969, 36974, + 36979, 36984, 36992, 37000, 37011, 0, 0, 37022, 37030, 37041, 37049, + 37057, 37065, 0, 37073, 37078, 37083, 37088, 37096, 37104, 37115, 37126, + 37134, 37142, 37150, 37161, 37169, 37177, 37185, 37193, 37201, 37207, + 37213, 0, 0, 37216, 37227, 37235, 0, 37246, 37254, 37265, 37273, 37281, + 37289, 37297, 37305, 37308, 0, 37311, 37315, 37319, 37323, 37327, 37331, + 37335, 37339, 37343, 37347, 37351, 37355, 37361, 37367, 37373, 37376, + 37379, 37381, 37385, 37389, 37393, 37397, 37399, 37403, 37407, 37413, + 37419, 37426, 37433, 37438, 37443, 37449, 37455, 37457, 37460, 37462, + 37466, 37470, 37474, 37477, 37481, 37485, 37489, 37493, 37497, 37503, + 37507, 37511, 37517, 37522, 37529, 37531, 37534, 37538, 37541, 37545, + 37550, 37552, 37561, 37570, 37573, 37577, 37579, 37581, 37583, 37586, + 37592, 37594, 37598, 37602, 37609, 37616, 37620, 37625, 37630, 37635, + 37639, 37643, 37647, 37650, 37653, 37657, 37664, 37669, 37673, 37677, + 37682, 37686, 37690, 37695, 37700, 37704, 37708, 37712, 37714, 37719, + 37724, 37728, 37732, 37736, 37740, 0, 0, 0, 0, 0, 37744, 37750, 37756, + 37763, 37770, 37775, 37780, 37784, 0, 0, 37790, 37793, 37796, 37799, + 37802, 37805, 37808, 37812, 37816, 37821, 37826, 37831, 37837, 37841, + 37844, 37847, 37850, 37853, 37856, 37859, 37862, 37865, 37868, 37872, + 37876, 37881, 37886, 0, 37891, 37897, 37903, 37909, 37916, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 37923, 37926, 37929, 37932, 37937, 37940, 37943, 37946, + 37949, 37952, 37955, 37959, 37962, 37965, 37968, 37971, 37974, 37979, + 37982, 37985, 37988, 37991, 37994, 37999, 38002, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 38005, 38010, 38015, 38022, + 38030, 38035, 38040, 38044, 38048, 38053, 38060, 38067, 38071, 38076, + 38081, 38086, 38091, 38098, 38103, 38108, 38113, 38122, 38129, 38135, + 38139, 38144, 38150, 38155, 38162, 38170, 38178, 38182, 38186, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 38190, 38194, 38201, 38205, 38209, + 38214, 38218, 38222, 38226, 38228, 38232, 38236, 38240, 38245, 38249, + 38253, 38261, 38264, 38268, 38271, 38274, 38280, 38283, 38286, 38292, + 38296, 38300, 38304, 38307, 38311, 38314, 38318, 38320, 38323, 38326, + 38330, 38332, 38336, 38339, 38342, 38347, 38352, 38358, 38361, 38364, + 38368, 38373, 38376, 38379, 38382, 38386, 38390, 38393, 38396, 38398, + 38401, 38404, 38407, 38411, 38416, 38419, 38423, 38427, 38431, 38435, + 38440, 38445, 38449, 38453, 38458, 38463, 38468, 38472, 38476, 38481, + 38485, 38488, 38491, 38493, 38497, 38502, 38509, 38516, 38523, 38530, + 38537, 38544, 38551, 38558, 38566, 38573, 38581, 38588, 38595, 38603, + 38611, 38616, 38621, 38626, 38631, 38636, 38641, 38646, 38651, 38656, + 38661, 38667, 38673, 38679, 38685, 38692, 38700, 38707, 38713, 38719, + 38725, 38731, 38737, 38743, 38749, 38755, 38761, 38768, 38775, 38782, + 38789, 38797, 38806, 38814, 38825, 38833, 38841, 38849, 38855, 38864, + 38873, 38881, 38890, 0, 0, 0, 0, 0, 0, 38898, 38900, 38903, 38905, 38908, + 38911, 38914, 38919, 38924, 38929, 38934, 38938, 38942, 38946, 38950, + 38955, 38961, 38966, 38972, 38977, 38982, 38987, 38993, 38998, 39004, + 39010, 39014, 39018, 39023, 39028, 39033, 39038, 39043, 39051, 39059, + 39067, 39075, 39082, 39090, 39097, 39104, 39112, 39122, 39129, 39136, + 39143, 39150, 39158, 39166, 39173, 39180, 39188, 39196, 39201, 39209, + 39214, 39219, 39225, 39230, 39236, 39243, 39250, 39255, 39261, 39266, + 39269, 39273, 39276, 39280, 39284, 39288, 39294, 39300, 39306, 39312, + 39316, 39320, 39324, 39328, 39334, 39340, 39344, 39349, 39353, 39358, + 39362, 39366, 39369, 39373, 39376, 39380, 39387, 39395, 39406, 39417, + 39422, 39431, 39438, 39446, 39454, 39458, 39464, 39472, 39476, 39481, + 39486, 39492, 39498, 39504, 39511, 39515, 39519, 39524, 39527, 39529, + 39533, 39537, 39544, 39548, 39550, 39552, 39556, 39563, 39568, 39574, + 39583, 39590, 39595, 39599, 39603, 39607, 39610, 39613, 39616, 39620, + 39624, 39628, 39632, 39636, 39639, 39643, 39647, 39650, 39652, 39655, + 39657, 39661, 39665, 39667, 39672, 39675, 39679, 39683, 39687, 39689, + 39691, 39693, 39696, 39700, 39704, 39708, 39712, 39716, 39722, 39728, + 39730, 39732, 39734, 39736, 39739, 39741, 39745, 39747, 39751, 39754, + 39759, 39763, 39767, 39770, 39774, 39778, 39783, 39787, 39796, 39806, + 39810, 39815, 39821, 39825, 39829, 39832, 39837, 39841, 39847, 39851, + 39862, 39870, 39874, 39878, 39884, 39888, 39891, 39893, 39896, 39900, + 39904, 39910, 39914, 39918, 39921, 39924, 39928, 39933, 39938, 39943, + 39948, 39953, 39960, 39967, 39971, 39975, 39977, 39981, 39984, 39987, + 39995, 40003, 40009, 40015, 40024, 40033, 40038, 40043, 40051, 40059, + 40061, 40063, 40068, 40073, 40079, 40085, 40090, 40095, 40099, 40103, + 40109, 40115, 40121, 40127, 40137, 40147, 40154, 40161, 40163, 40167, + 40171, 40176, 40181, 40188, 40195, 40198, 40201, 40204, 40207, 40210, + 40215, 40219, 40224, 40229, 40232, 40235, 40238, 40241, 40244, 40248, + 40251, 40254, 40257, 40260, 40262, 40264, 40266, 40268, 40276, 40284, + 40289, 40292, 40297, 40307, 40313, 40319, 40325, 40333, 40341, 40352, + 40356, 40360, 40362, 40368, 40370, 40372, 40374, 40376, 40382, 40385, + 40391, 40397, 40401, 40405, 40409, 40412, 40416, 40420, 40422, 40431, + 40440, 40445, 40450, 40455, 40461, 40467, 40470, 40473, 40476, 40479, + 40481, 40486, 40491, 40496, 40502, 40508, 40515, 40522, 40527, 40532, + 40537, 40542, 40550, 40558, 40566, 40574, 40582, 40590, 40598, 40606, + 40614, 40622, 40629, 40640, 40649, 40663, 40666, 40671, 40677, 40683, + 40690, 40704, 40719, 40725, 40731, 40738, 40744, 40752, 40758, 40771, + 40785, 40790, 40796, 40803, 40806, 40809, 40811, 40814, 40817, 40819, + 40821, 40825, 40828, 40831, 40834, 40837, 40842, 40847, 40852, 40857, + 40860, 40863, 40865, 40867, 40869, 40873, 40877, 40881, 40887, 40890, + 40892, 40894, 40899, 40904, 40909, 40914, 40919, 40924, 40926, 40928, + 40937, 40941, 40948, 40957, 40959, 40964, 40969, 40976, 40980, 40982, + 40986, 40988, 40992, 40996, 41000, 41002, 41004, 41006, 41011, 41018, + 41025, 41032, 41039, 41046, 41053, 41060, 41067, 41073, 41079, 41086, + 41093, 41100, 41107, 41113, 41119, 41126, 41133, 41140, 41148, 41155, + 41163, 41170, 41178, 41185, 41193, 41201, 41208, 41216, 41223, 41231, + 41238, 41246, 41253, 41260, 41267, 41274, 41281, 41289, 41296, 41303, + 41310, 41318, 41325, 41332, 41339, 41346, 41354, 41362, 41369, 41376, + 41382, 41389, 41394, 41401, 41408, 41416, 41423, 41431, 41439, 41444, + 41449, 41454, 41461, 41468, 41475, 41482, 41487, 41491, 41500, 41506, + 41509, 41517, 41520, 41525, 41530, 41533, 41536, 41544, 41547, 41552, + 41555, 41562, 41567, 41575, 41578, 41581, 41584, 41589, 41594, 41597, + 41600, 41608, 41611, 41616, 41623, 41627, 41631, 41636, 41641, 41647, + 41652, 41658, 41664, 41669, 41675, 41683, 41689, 41697, 41705, 41711, + 41719, 41727, 41736, 41744, 41750, 41758, 41767, 41775, 41779, 41784, + 41797, 41810, 41814, 41818, 41822, 41826, 41836, 41840, 41845, 41850, + 41855, 41860, 41865, 41870, 41880, 41890, 41898, 41908, 41918, 41926, + 41936, 41946, 41954, 41964, 41974, 41982, 41990, 42000, 42010, 42013, + 42016, 42019, 42024, 42028, 42034, 42041, 42048, 42056, 42063, 42067, + 42071, 42075, 42079, 42081, 42085, 42089, 42094, 42099, 42106, 42113, + 42116, 42123, 42125, 42127, 42131, 42135, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 42140, 42144, 42151, 42158, 42165, + 42172, 42176, 42180, 42184, 42188, 42193, 42199, 42204, 42210, 42216, + 42222, 42228, 42236, 42243, 42250, 42257, 42264, 42270, 42276, 42285, + 42289, 42296, 42300, 42304, 42310, 42316, 42322, 42328, 42332, 42336, + 42339, 42343, 42347, 42354, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 42361, 42364, 42368, 42372, 42378, 42384, + 42390, 42398, 42405, 42409, 42417, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 42422, 42425, 42428, 42431, 42434, 42437, 42440, + 42443, 42446, 42449, 42453, 42457, 42461, 42465, 42469, 42473, 42477, + 42481, 42485, 42489, 42493, 42496, 42499, 42502, 42505, 42508, 42511, + 42514, 42517, 42520, 42524, 42528, 42532, 42536, 42540, 42544, 42548, + 42552, 42556, 42560, 42564, 42570, 42576, 42582, 42589, 42596, 42603, + 42610, 42617, 42624, 42631, 42638, 42645, 42652, 42659, 42666, 42673, + 42680, 42687, 42694, 42701, 42706, 42712, 42718, 42724, 42729, 42735, + 42741, 42747, 42752, 42758, 42764, 42769, 42774, 42779, 42784, 42790, + 42796, 42801, 42806, 42812, 42817, 42823, 42829, 42835, 42841, 42847, + 42852, 42858, 42864, 42870, 42875, 42881, 42887, 42893, 42898, 42904, + 42910, 42915, 42920, 42925, 42930, 42936, 42942, 42947, 42952, 42958, + 42963, 42969, 42975, 42981, 42987, 42993, 42998, 43004, 43010, 43016, + 43021, 43027, 43033, 43039, 43044, 43050, 43056, 43061, 43066, 43071, + 43076, 43082, 43088, 43093, 43098, 43104, 43109, 43115, 43121, 43127, + 43133, 43139, 43143, 43149, 43155, 43161, 43167, 43173, 43179, 43185, + 43191, 43197, 43203, 43207, 43211, 43215, 43219, 43223, 43227, 43231, + 43235, 43239, 43244, 43250, 43255, 43260, 43265, 43270, 43279, 43288, + 43297, 43306, 43315, 43324, 43333, 43342, 43349, 43357, 43365, 43372, + 43379, 43387, 43395, 43402, 43409, 43417, 43425, 43432, 43439, 43447, + 43455, 43462, 43469, 43477, 43486, 43495, 43503, 43512, 43521, 43528, + 43535, 43543, 43552, 43561, 43569, 43578, 43587, 43594, 43601, 43610, + 43619, 43627, 43635, 43644, 43653, 43660, 43667, 43676, 43685, 43693, + 43701, 43710, 43719, 43726, 43733, 43742, 43751, 43759, 43768, 43777, + 43785, 43795, 43805, 43815, 43825, 43834, 43843, 43852, 43861, 43868, + 43876, 43884, 43892, 43900, 43905, 43910, 43919, 43927, 43934, 43943, + 43951, 43958, 43967, 43975, 43982, 43991, 43999, 44006, 44015, 44023, + 44030, 44039, 44047, 44054, 44063, 44071, 44078, 44087, 44095, 44102, + 44111, 44119, 44126, 44135, 44144, 44153, 44162, 44175, 44188, 44195, + 44200, 44205, 44210, 44215, 44220, 44225, 44230, 44235, 44243, 44251, + 44259, 44267, 44272, 44279, 44286, 44293, 44298, 44306, 44313, 44321, + 44325, 44332, 44338, 44345, 44349, 44355, 44361, 44367, 44371, 44374, + 44378, 44382, 44389, 44395, 44401, 44407, 44413, 44427, 44437, 44451, + 44465, 44471, 44481, 44495, 44498, 44501, 44508, 44516, 44521, 44526, + 44534, 44545, 44556, 44564, 44568, 44572, 44575, 44578, 44582, 44586, + 44589, 44592, 44597, 44602, 44608, 44614, 44619, 44624, 44630, 44636, + 44641, 44646, 44651, 44656, 44662, 44668, 44673, 44678, 44684, 44690, + 44695, 44700, 44703, 44706, 44715, 44717, 44719, 44722, 44726, 44732, + 44734, 44737, 44744, 44751, 44759, 44767, 44777, 44791, 44796, 44801, + 44805, 44810, 44818, 44826, 44835, 44844, 44853, 44862, 44867, 44872, + 44878, 44884, 44890, 44896, 44899, 44905, 44911, 44921, 44931, 44939, + 44947, 44956, 44965, 44969, 44977, 44985, 44993, 45001, 45010, 45019, + 45028, 45037, 45042, 45047, 45052, 45057, 45062, 45068, 45074, 45079, + 45085, 45087, 45089, 45091, 45093, 45096, 45099, 45101, 45103, 45105, + 45109, 45113, 45115, 45117, 45120, 45123, 45127, 45133, 45139, 45141, + 45148, 45152, 45157, 45162, 45164, 45173, 45179, 45185, 45191, 45197, + 45203, 45209, 45214, 45217, 45220, 45223, 45225, 45227, 45231, 45235, + 45240, 45245, 45250, 45253, 45257, 45262, 45265, 45269, 45274, 45279, + 45284, 45289, 45294, 45299, 45304, 45309, 45314, 45319, 45324, 45329, + 45335, 45341, 45347, 45349, 45352, 45354, 45357, 45359, 45361, 45363, + 45365, 45367, 45369, 45371, 45373, 45375, 45377, 45379, 45381, 45383, + 45385, 45387, 45389, 45391, 45396, 45401, 45406, 45411, 45416, 45421, + 45426, 45431, 45436, 45441, 45446, 45451, 45456, 45461, 45466, 45471, + 45476, 45481, 45486, 45491, 45495, 45499, 45503, 45509, 45515, 45520, + 45525, 45530, 45535, 45540, 45545, 45553, 45561, 45569, 45577, 45585, + 45593, 45601, 45609, 45615, 45620, 45625, 45630, 45633, 45637, 45641, + 45645, 45649, 45653, 45657, 45664, 45671, 45679, 45687, 45692, 45697, + 45704, 45711, 45718, 45725, 45728, 45731, 45736, 45738, 45742, 45747, + 45749, 45751, 45753, 45755, 45760, 45763, 45765, 45770, 45777, 45784, + 45787, 45791, 45796, 45801, 45809, 45815, 45820, 45831, 45837, 45843, + 45848, 45853, 45859, 45862, 45865, 45870, 45872, 45876, 45878, 45880, + 45882, 45884, 45886, 45888, 45893, 45895, 45897, 45899, 45901, 45905, + 45907, 45910, 45915, 45920, 45925, 45930, 45936, 45942, 45944, 45947, + 45954, 45960, 45966, 45973, 45977, 0, 45981, 45983, 45987, 45993, 45998, + 46000, 46004, 46013, 46021, 46029, 46035, 46041, 46046, 46052, 46057, + 46060, 46074, 46077, 46082, 0, 46087, 0, 0, 0, 0, 46096, 46103, 46107, + 46109, 46111, 46115, 46121, 46126, 46132, 46134, 46140, 46142, 46148, + 46150, 46152, 46157, 46159, 46163, 46168, 46170, 46175, 46180, 46184, + 46191, 0, 46201, 46207, 46210, 46216, 0, 46219, 46224, 46228, 46230, 0, + 0, 46232, 46236, 46240, 46245, 46247, 46252, 46255, 46258, 46261, 46265, + 46269, 46274, 46278, 46283, 46288, 46292, 46298, 46305, 46308, 46314, + 46319, 46323, 46328, 46334, 46340, 46347, 46353, 46360, 0, 46367, 46374, + 46378, 46385, 46391, 46396, 46402, 46406, 46411, 46414, 46420, 46426, + 46433, 46441, 46448, 46457, 46467, 46474, 46480, 46484, 46492, 46497, + 46506, 46509, 46512, 46521, 46532, 46539, 46541, 46547, 46552, 46554, + 46557, 46561, 46569, 0, 46578, 0, 46583, 46591, 46599, 46607, 0, 0, 0, + 46615, 46623, 46628, 46631, 46635, 46638, 46649, 46659, 46669, 0, 0, + 46678, 46687, 46693, 46701, 46705, 46713, 46717, 46725, 46732, 46739, + 46748, 46757, 46767, 46777, 46787, 46797, 46806, 46815, 46825, 46835, + 46844, 46853, 46860, 46867, 46874, 46881, 46888, 46895, 46902, 46909, + 46916, 46924, 46930, 46936, 46942, 46948, 46954, 46960, 46966, 46972, + 46978, 46985, 46993, 47001, 47009, 47017, 47025, 47033, 47041, 47049, + 47057, 47066, 0, 0, 0, 47071, 47077, 47080, 47086, 47092, 47097, 47101, + 47106, 47112, 47119, 47122, 47129, 47136, 47140, 47149, 47158, 47163, + 47169, 47174, 47179, 47186, 47193, 47201, 47209, 0, 47218, 47227, 47232, + 47236, 47243, 47247, 47254, 47262, 47267, 47275, 47279, 47284, 47288, + 47293, 0, 47297, 47302, 47311, 47313, 47317, 47321, 47328, 47335, 47340, + 47348, 47354, 0, 47360, 0, 0, 0, 47363, 47371, 47375, 47382, 47390, + 47398, 47403, 47408, 47414, 47419, 47424, 47430, 47435, 47438, 47442, + 47446, 47453, 47462, 47467, 47476, 47485, 47491, 47497, 47502, 47507, + 47512, 47517, 47523, 47529, 47537, 47545, 47551, 47557, 47562, 47567, + 47574, 47581, 47587, 47590, 47593, 47597, 47601, 47605, 47610, 47616, + 47622, 47629, 47636, 47641, 47645, 47649, 47653, 47657, 47661, 47665, + 47669, 47673, 47677, 47681, 47685, 47689, 47693, 47697, 47701, 47705, + 47709, 47713, 47717, 47721, 47725, 47729, 47733, 47737, 47741, 47745, + 47749, 47753, 47757, 47761, 47765, 47769, 47773, 47777, 47781, 47785, + 47789, 47793, 47797, 47801, 47805, 47809, 47813, 47817, 47821, 47825, + 47829, 47833, 47837, 47841, 47845, 47849, 47853, 47857, 47861, 47865, + 47869, 47873, 47877, 47881, 47885, 47889, 47893, 47897, 47901, 47905, + 47909, 47913, 47917, 47921, 47925, 47929, 47933, 47937, 47941, 47945, + 47949, 47953, 47957, 47961, 47965, 47969, 47973, 47977, 47981, 47985, + 47989, 47993, 47997, 48001, 48005, 48009, 48013, 48017, 48021, 48025, + 48029, 48033, 48037, 48041, 48045, 48049, 48053, 48057, 48061, 48065, + 48069, 48073, 48077, 48081, 48085, 48089, 48093, 48097, 48101, 48105, + 48109, 48113, 48117, 48121, 48125, 48129, 48133, 48137, 48141, 48145, + 48149, 48153, 48157, 48161, 48165, 48169, 48173, 48177, 48181, 48185, + 48189, 48193, 48197, 48201, 48205, 48209, 48213, 48217, 48221, 48225, + 48229, 48233, 48237, 48241, 48245, 48249, 48253, 48257, 48261, 48265, + 48269, 48273, 48277, 48281, 48285, 48289, 48293, 48297, 48301, 48305, + 48309, 48313, 48317, 48321, 48325, 48329, 48333, 48337, 48341, 48345, + 48349, 48353, 48357, 48361, 48365, 48369, 48373, 48377, 48381, 48385, + 48389, 48393, 48397, 48401, 48405, 48409, 48413, 48417, 48421, 48425, + 48429, 48433, 48437, 48441, 48445, 48449, 48453, 48457, 48461, 48465, + 48469, 48473, 48477, 48481, 48485, 48489, 48493, 48497, 48501, 48505, + 48509, 48513, 48517, 48521, 48525, 48529, 48533, 48537, 48541, 48545, + 48549, 48553, 48557, 48561, 48565, 48569, 48573, 48577, 48581, 48585, + 48589, 48593, 48597, 48601, 48605, 48609, 48613, 48617, 48621, 48625, + 48629, 48633, 48637, 48641, 48645, 48649, 48653, 48657, 48661, 48665, + 48672, 48680, 48686, 48692, 48699, 48706, 48712, 48718, 48724, 48730, + 48735, 48740, 48745, 48750, 48756, 48762, 48770, 48777, 48782, 48787, + 48795, 48804, 48811, 48821, 48832, 48835, 48838, 48842, 48846, 48852, + 48858, 48868, 48878, 48888, 48898, 48905, 48912, 48919, 48926, 48937, + 48948, 48959, 48970, 48980, 48990, 49002, 49014, 49025, 49036, 49048, + 49060, 49069, 49079, 49089, 49100, 49111, 49118, 49125, 49132, 49139, + 49149, 49159, 49167, 49175, 49182, 49189, 49196, 49203, 49210, 49215, + 49220, 49226, 49234, 49244, 49252, 49260, 49268, 49276, 49284, 49292, + 49300, 49308, 49316, 49324, 49333, 49342, 49350, 49358, 49367, 49376, + 49385, 49394, 49404, 49414, 49423, 49432, 49442, 49452, 49466, 49483, + 49497, 49514, 49528, 49542, 49556, 49570, 49580, 49591, 49601, 49612, + 49629, 49646, 49654, 49660, 49667, 49674, 49681, 49688, 49693, 49699, + 49704, 49709, 49715, 49720, 49725, 49730, 49735, 49740, 49747, 49752, + 49759, 49764, 49769, 49773, 49777, 49784, 49791, 49798, 49805, 49812, + 49819, 49832, 49845, 49858, 49871, 49879, 49887, 49893, 49899, 49906, + 49913, 49920, 49927, 49931, 49936, 49944, 49952, 49960, 49967, 49971, + 49979, 49987, 49990, 49993, 49998, 50004, 50012, 50020, 50040, 50060, + 50080, 50100, 50120, 50140, 50160, 50180, 50185, 50192, 50201, 50209, + 50217, 50222, 50225, 50228, 50233, 50236, 50255, 50262, 50268, 50274, + 50278, 50281, 50284, 50287, 50298, 50310, 50317, 50324, 50327, 50331, + 50334, 50339, 50344, 50349, 50355, 50364, 50371, 50378, 50386, 50393, + 50400, 50403, 50409, 50415, 50418, 50421, 50426, 50431, 50437, 50443, + 50447, 50452, 50459, 50463, 50469, 50473, 50477, 50485, 50497, 50505, + 50509, 50511, 50520, 50529, 50535, 50538, 50544, 50550, 50555, 50560, + 50565, 50570, 50575, 50580, 50582, 50588, 50593, 50600, 50604, 50610, + 50613, 50617, 50624, 50631, 50633, 50635, 50641, 50647, 50653, 50662, + 50671, 50678, 50685, 50691, 50697, 50702, 50707, 50712, 50718, 50724, + 50729, 50736, 50740, 50744, 50757, 50770, 50781, 50790, 50796, 50803, + 50808, 50813, 50818, 50823, 50828, 50830, 50837, 50844, 50851, 50858, + 50865, 50873, 50879, 50884, 50890, 50896, 50902, 50909, 50915, 50923, + 50931, 50939, 50947, 50954, 50960, 50966, 50975, 50979, 50988, 50997, + 51006, 51014, 51018, 51024, 51031, 51038, 51042, 51048, 51055, 51060, + 51065, 51071, 51076, 51081, 51088, 51095, 51100, 51105, 51113, 51121, + 51131, 51141, 51148, 51155, 51159, 51163, 51175, 51181, 51187, 51192, + 51197, 51204, 51211, 51217, 51223, 51232, 51240, 51248, 51255, 51262, + 51269, 51275, 51282, 51288, 51295, 51302, 51309, 51316, 51322, 51327, + 51336, 51346, 51353, 51362, 51368, 51373, 51378, 51387, 51393, 51399, + 51405, 51413, 51418, 51425, 51432, 51443, 51450, 51457, 51464, 51471, + 51478, 51485, 51492, 51503, 51514, 51524, 51534, 51546, 51558, 51563, + 51568, 51576, 51584, 51590, 51596, 51605, 51614, 51622, 51630, 51638, + 51646, 51656, 51666, 51680, 51694, 51701, 51708, 51719, 51730, 51737, + 51744, 51753, 51762, 51767, 51772, 51781, 51790, 51795, 51800, 51808, + 51814, 51820, 51828, 51836, 51849, 51862, 51866, 51870, 51877, 51884, + 51891, 51899, 51907, 51915, 51923, 51929, 51935, 51941, 51947, 51954, + 51961, 51969, 51977, 51980, 51983, 51988, 51993, 51999, 52005, 52012, + 52019, 52028, 52037, 52044, 52051, 52059, 52067, 52075, 52083, 52090, + 52097, 52104, 52111, 52115, 52119, 52126, 52133, 52138, 52143, 52148, + 52153, 52159, 52173, 52180, 52187, 52191, 52193, 52195, 52200, 52205, + 52210, 52214, 52222, 52229, 52236, 52244, 52256, 52264, 52272, 52283, + 52287, 52291, 52295, 52300, 52311, 52318, 52325, 52332, 52337, 52344, + 52353, 52361, 52367, 52373, 52379, 52388, 52397, 52405, 52414, 52419, + 52422, 52427, 52433, 52439, 52445, 52451, 52455, 52458, 52462, 52466, + 52472, 52478, 52484, 52490, 52494, 52498, 52505, 52512, 52519, 52526, + 52533, 52540, 52550, 52560, 52567, 52574, 52582, 52590, 52594, 52599, + 52604, 52610, 52616, 52619, 52622, 52625, 52628, 52632, 52637, 52642, + 52647, 52652, 52657, 52661, 52665, 52669, 52673, 52677, 52681, 52685, + 52691, 52695, 52701, 52706, 52713, 52721, 52728, 52736, 52743, 52751, + 52760, 52767, 52777, 52788, 52794, 52803, 52809, 52818, 52827, 52833, + 52839, 52843, 52847, 52856, 52865, 52872, 52879, 52888, 0, 0, 0, 52897, + 52902, 52906, 52910, 52915, 52920, 52925, 52933, 52941, 52944, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 52948, 52953, 52958, 52963, 52968, + 52973, 52978, 52983, 52988, 52993, 52998, 53004, 53008, 53013, 53018, + 53023, 53028, 53033, 53038, 53043, 53048, 53053, 53058, 53063, 53068, + 53073, 53078, 53083, 53088, 53093, 53098, 53103, 53108, 53113, 53118, + 53124, 53129, 53135, 53144, 53149, 53157, 53164, 53173, 53178, 53183, + 53188, 53194, 0, 53201, 53206, 53211, 53216, 53221, 53226, 53231, 53236, + 53241, 53246, 53251, 53257, 53261, 53266, 53271, 53276, 53281, 53286, + 53291, 53296, 53301, 53306, 53311, 53316, 53321, 53326, 53331, 53336, + 53341, 53346, 53351, 53356, 53361, 53366, 53371, 53377, 53382, 53388, + 53397, 53402, 53410, 53417, 53426, 53431, 53436, 53441, 53447, 0, 53454, + 53462, 53470, 53480, 53487, 53495, 53501, 53510, 53518, 53526, 53534, + 53542, 53550, 53558, 53563, 53570, 53575, 53581, 53589, 53596, 53603, + 53611, 53617, 53623, 53630, 53637, 53646, 53656, 53662, 53669, 53674, + 53684, 53694, 53699, 53704, 53709, 53714, 53719, 53724, 53729, 53734, + 53739, 53744, 53749, 53754, 53759, 53764, 53769, 53774, 53779, 53784, + 53789, 53794, 53799, 53804, 53809, 53814, 53819, 53824, 53829, 53834, + 53839, 53844, 53848, 53852, 53857, 53862, 53867, 53872, 53877, 53882, + 53887, 53892, 53897, 53902, 53907, 53912, 53917, 53922, 53927, 53932, + 53937, 53942, 53949, 53956, 53963, 53970, 53977, 53984, 53991, 53998, + 54005, 54012, 54019, 54026, 54033, 54040, 54045, 54050, 54057, 54064, + 54071, 54078, 54085, 54092, 54099, 54106, 54113, 54120, 54127, 54134, + 54140, 54146, 54152, 54158, 54165, 54172, 54179, 54186, 54193, 54200, + 54207, 54214, 54221, 54228, 54236, 54244, 54252, 54260, 54268, 54276, + 54284, 54292, 54296, 54302, 54308, 54312, 54318, 54324, 54330, 54337, + 54344, 54351, 54358, 54363, 54369, 0, 0, 0, 0, 0, 0, 0, 54375, 54383, + 54392, 54401, 54409, 54415, 54420, 54425, 54430, 54435, 54440, 54445, + 54450, 54455, 54460, 54465, 54470, 54475, 54480, 54485, 54490, 54495, + 54500, 54505, 54510, 54515, 54520, 54525, 54530, 54535, 54540, 54545, + 54550, 54555, 54560, 54565, 54570, 54575, 54580, 54585, 54590, 54595, + 54600, 54605, 54610, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 54615, 54619, 54624, + 54629, 54634, 54639, 54648, 54653, 54658, 54663, 54668, 54673, 54678, + 54683, 54688, 54695, 54700, 54705, 54714, 54721, 54726, 54731, 54736, + 54743, 54748, 54755, 54760, 54765, 54772, 54779, 54784, 54789, 54794, + 54801, 54808, 54813, 54818, 54823, 54828, 54833, 54840, 54847, 54852, + 54857, 54862, 54867, 54872, 54877, 54882, 54887, 54892, 54897, 54902, + 54909, 0, 0, 0, 0, 0, 0, 0, 0, 0, 54914, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 54921, 54925, 54929, 54933, 54937, 54941, 54945, 54949, + 54953, 54957, 54961, 54967, 54971, 54975, 54979, 54983, 54987, 54991, + 54995, 54999, 55003, 55007, 55011, 0, 0, 0, 0, 0, 0, 0, 0, 0, 55015, + 55019, 55023, 55027, 55031, 55035, 55039, 0, 55043, 55047, 55051, 55055, + 55059, 55063, 55067, 0, 55071, 55075, 55079, 55083, 55087, 55091, 55095, + 0, 55099, 55103, 55107, 55111, 55115, 55119, 55123, 0, 55127, 55131, + 55135, 55139, 55143, 55147, 55151, 0, 55155, 55159, 55163, 55167, 55171, + 55175, 55179, 0, 55183, 55187, 55191, 55195, 55199, 55203, 55207, 0, + 55211, 55215, 55219, 55223, 55227, 55231, 55235, 0, 55239, 55244, 55249, + 55254, 55259, 55264, 55269, 55273, 55278, 55283, 55288, 55292, 55297, + 55302, 55307, 55312, 55316, 55321, 55326, 55331, 55336, 55341, 55346, + 55350, 55355, 55360, 55367, 55372, 55377, 55383, 55390, 55397, 55406, + 55413, 55422, 55426, 55430, 55436, 55442, 55448, 55456, 55462, 55466, + 55470, 55474, 55480, 55486, 55490, 55492, 55496, 55501, 55503, 55507, + 55511, 55515, 55521, 55526, 55530, 55534, 55539, 55545, 55550, 55555, + 55560, 55565, 55572, 55579, 55584, 55589, 55594, 55599, 55604, 55609, + 55613, 55617, 55624, 55631, 55637, 55641, 55645, 55648, 55652, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 55660, 55664, 55668, 55673, 55678, 55683, 55687, 55691, 55695, + 55700, 55705, 55709, 55713, 55717, 55721, 55726, 55731, 55736, 55741, + 55745, 55749, 55754, 55759, 55764, 55769, 55773, 0, 55777, 55781, 55785, + 55789, 55793, 55797, 55801, 55806, 55811, 55815, 55820, 55825, 55834, + 55838, 55842, 55846, 55853, 55857, 55862, 55867, 55871, 55875, 55881, + 55886, 55891, 55896, 55901, 55905, 55909, 55913, 55917, 55921, 55926, + 55931, 55935, 55939, 55944, 55949, 55954, 55958, 55962, 55967, 55972, + 55978, 55984, 55988, 55994, 56000, 56004, 56010, 56016, 56021, 56026, + 56030, 56036, 56040, 56044, 56050, 56056, 56061, 56066, 56070, 56074, + 56082, 56088, 56094, 56100, 56105, 56110, 56115, 56121, 56125, 56131, + 56135, 56139, 56145, 56151, 56157, 56163, 56169, 56175, 56181, 56187, + 56193, 56199, 56205, 56211, 56215, 56221, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 56227, 56230, 56234, 56238, 56242, 56246, 56249, 56252, 56256, + 56260, 56264, 56268, 56271, 56276, 56280, 56284, 56288, 56294, 56298, + 56302, 56306, 56310, 56317, 56323, 56327, 56331, 56335, 56339, 56343, + 56347, 56351, 56355, 56359, 56363, 56367, 56373, 56377, 56381, 56385, + 56389, 56393, 56397, 56401, 56405, 56409, 56413, 56417, 56421, 56425, + 56429, 56433, 56437, 56443, 56449, 56454, 56459, 56463, 56467, 56471, + 56475, 56479, 56483, 56487, 56491, 56495, 56499, 56503, 56507, 56511, + 56515, 56519, 56523, 56527, 56531, 56535, 56539, 56543, 56547, 56551, + 56555, 56561, 56565, 56569, 56573, 56577, 56581, 56585, 56589, 56593, + 56598, 56605, 56609, 56613, 56617, 56621, 56625, 56629, 56633, 56637, + 56641, 56645, 56649, 56653, 56660, 56664, 56670, 56674, 56678, 56682, + 56686, 56690, 56693, 56697, 56701, 56705, 56709, 56713, 56717, 56721, + 56725, 56729, 56733, 56737, 56741, 56745, 56749, 56753, 56757, 56761, + 56765, 56769, 56773, 56777, 56781, 56785, 56789, 56793, 56797, 56801, + 56805, 56809, 56813, 56817, 56821, 56827, 56831, 56835, 56839, 56843, + 56847, 56851, 56855, 56859, 56863, 56867, 56871, 56875, 56879, 56883, + 56887, 56891, 56895, 56899, 56903, 56907, 56911, 56915, 56919, 56923, + 56927, 56931, 56935, 56943, 56947, 56951, 56955, 56959, 56963, 56969, + 56973, 56977, 56981, 56985, 56989, 56993, 56997, 57001, 57005, 57009, + 57013, 57017, 57021, 57027, 57031, 57035, 57039, 57043, 57047, 57051, + 57055, 57059, 57063, 57067, 57071, 57075, 57079, 57083, 57087, 57091, + 57095, 57099, 57103, 57107, 57111, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 57115, 57123, 57130, 57141, 57151, + 57159, 57168, 57177, 57187, 57199, 57211, 57223, 0, 0, 0, 0, 57229, + 57232, 57235, 57240, 57243, 57250, 57254, 57258, 57262, 57266, 57270, + 57275, 57280, 57284, 57288, 57293, 57298, 57303, 57308, 57311, 57314, + 57320, 57326, 57331, 57336, 57343, 57350, 57354, 57358, 57362, 57369, + 57375, 57382, 57387, 57392, 57397, 57402, 57407, 57412, 57417, 57422, + 57427, 57432, 57437, 57442, 57447, 57452, 57458, 57463, 57467, 57473, + 57484, 57494, 57509, 57519, 57523, 57532, 57538, 57544, 57550, 57555, + 57558, 57563, 57567, 0, 57573, 57577, 57580, 57584, 57587, 57591, 57594, + 57598, 57601, 57605, 57608, 57611, 57615, 57619, 57623, 57627, 57631, + 57635, 57639, 57643, 57647, 57651, 57655, 57659, 57663, 57667, 57671, + 57675, 57679, 57683, 57687, 57691, 57695, 57699, 57703, 57708, 57712, + 57716, 57720, 57724, 57727, 57731, 57734, 57738, 57742, 57746, 57750, + 57753, 57757, 57760, 57764, 57768, 57772, 57776, 57780, 57784, 57788, + 57792, 57796, 57800, 57804, 57808, 57811, 57815, 57819, 57823, 57827, + 57831, 57834, 57839, 57843, 57848, 57852, 57855, 57859, 57863, 57867, + 57871, 57876, 57880, 57884, 57888, 57892, 57895, 57899, 57903, 0, 0, + 57908, 57916, 57924, 57931, 57938, 57942, 57948, 57953, 57958, 57962, + 57965, 57969, 57972, 57976, 57979, 57983, 57986, 57990, 57993, 57996, + 58000, 58004, 58008, 58012, 58016, 58020, 58024, 58028, 58032, 58036, + 58040, 58044, 58048, 58052, 58056, 58060, 58064, 58068, 58072, 58076, + 58080, 58084, 58088, 58093, 58097, 58101, 58105, 58109, 58112, 58116, + 58119, 58123, 58127, 58131, 58135, 58138, 58142, 58145, 58149, 58153, + 58157, 58161, 58165, 58169, 58173, 58177, 58181, 58185, 58189, 58193, + 58196, 58200, 58204, 58208, 58212, 58216, 58219, 58224, 58228, 58233, + 58237, 58240, 58244, 58248, 58252, 58256, 58261, 58265, 58269, 58273, + 58277, 58280, 58284, 58288, 58293, 58297, 58301, 58305, 58309, 58314, + 58321, 58325, 58331, 0, 0, 0, 0, 0, 58336, 58340, 58344, 58347, 58351, + 58355, 58359, 58362, 58365, 58369, 58373, 58377, 58381, 58385, 58389, + 58393, 58397, 58401, 58404, 58408, 58412, 58415, 58418, 58421, 58424, + 58428, 58432, 58436, 58440, 58444, 58448, 58452, 58456, 58460, 58464, + 58467, 58470, 58474, 58478, 58482, 58486, 0, 0, 0, 58490, 58494, 58498, + 58502, 58506, 58510, 58514, 58518, 58522, 58526, 58530, 58534, 58538, + 58542, 58546, 58550, 58554, 58558, 58562, 58566, 58570, 58574, 58578, + 58582, 58586, 58590, 58594, 58598, 58602, 58606, 58610, 58613, 58617, + 58620, 58624, 58628, 58631, 58635, 58639, 58642, 58646, 58650, 58654, + 58658, 58661, 58665, 58669, 58673, 58677, 58681, 58685, 58688, 58691, + 58695, 58699, 58703, 58707, 58711, 58715, 58719, 58723, 58727, 58731, + 58735, 58739, 58743, 58747, 58751, 58755, 58759, 58763, 58767, 58771, + 58775, 58779, 58783, 58787, 58791, 58795, 58799, 58803, 58807, 58811, + 58815, 58819, 58823, 58827, 58831, 58835, 58839, 58843, 58847, 58851, + 58855, 0, 58859, 58865, 58871, 58876, 58881, 58886, 58892, 58898, 58904, + 58910, 58916, 58922, 58928, 58934, 58940, 58946, 58952, 58956, 58960, + 58964, 58968, 58972, 58976, 58980, 58984, 58988, 58992, 58996, 59000, + 59004, 59008, 59012, 59016, 59020, 59024, 59028, 59032, 59037, 59042, + 59047, 0, 0, 0, 0, 0, 0, 0, 0, 59052, 59056, 59060, 59064, 59068, 59072, + 59076, 59080, 59084, 59088, 59092, 59096, 59100, 59104, 59108, 59112, + 59115, 59119, 59122, 59126, 59130, 59134, 59138, 59142, 59146, 59150, + 59154, 59158, 59162, 59166, 59170, 59174, 59178, 59182, 59186, 59190, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 59194, 59199, 59204, 59209, 59213, + 59218, 59222, 59227, 59232, 59237, 59242, 59247, 59251, 59256, 59261, + 59266, 59271, 59275, 59279, 59283, 59287, 59291, 59295, 59299, 59303, + 59307, 59311, 59315, 59319, 59323, 59327, 59332, 59337, 59342, 59347, + 59352, 59357, 59362, 59367, 59372, 59377, 59382, 59387, 59392, 59397, + 59402, 59408, 0, 59415, 59418, 59421, 59424, 59427, 59430, 59433, 59436, + 59439, 59442, 59446, 59450, 59454, 59458, 59462, 59466, 59470, 59474, + 59478, 59482, 59486, 59490, 59494, 59498, 59502, 59506, 59510, 59514, + 59518, 59522, 59526, 59530, 59534, 59538, 59542, 59546, 59550, 59554, + 59558, 59562, 59566, 59575, 59584, 59593, 59602, 59611, 59620, 59629, + 59638, 59641, 59646, 59651, 59656, 59661, 59666, 59671, 59676, 59681, + 59686, 59690, 59695, 59700, 59705, 59710, 59715, 59719, 59723, 59727, + 59731, 59735, 59739, 59743, 59747, 59751, 59755, 59759, 59763, 59767, + 59771, 59776, 59781, 59786, 59791, 59796, 59801, 59806, 59811, 59816, + 59821, 59826, 59831, 59836, 59841, 59847, 59853, 59858, 59863, 59866, + 59869, 59872, 59875, 59878, 59881, 59884, 59887, 59890, 59894, 59898, + 59902, 59906, 59910, 59914, 59918, 59922, 59926, 59930, 59934, 59938, + 59942, 59946, 59950, 59954, 59958, 59962, 59966, 59970, 59974, 59978, + 59982, 59986, 59990, 59994, 59998, 60002, 60006, 60010, 60014, 60018, + 60022, 60026, 60030, 60034, 60038, 60042, 60046, 60050, 60055, 60060, + 60065, 60070, 60074, 60079, 60084, 60089, 60094, 60099, 60104, 60109, + 60114, 60119, 60123, 60129, 60135, 60141, 60147, 60153, 60159, 60165, + 60171, 60177, 60183, 60189, 60195, 60198, 60201, 60204, 60209, 60212, + 60215, 60218, 60221, 60224, 60227, 60231, 60235, 60239, 60243, 60247, + 60251, 60255, 60259, 60263, 60267, 60271, 60275, 60279, 60282, 60285, + 60289, 60293, 60297, 60301, 60304, 60308, 60312, 60316, 60320, 60323, + 60327, 60331, 60335, 60339, 60342, 60346, 60350, 60353, 60357, 60361, + 60365, 60369, 60373, 60377, 60381, 0, 60385, 60388, 60391, 60394, 60397, + 60400, 60403, 60406, 60409, 60412, 60415, 60418, 60421, 60424, 60427, + 60430, 60433, 60436, 60439, 60442, 60445, 60448, 60451, 60454, 60457, + 60460, 60463, 60466, 60469, 60472, 60475, 60478, 60481, 60484, 60487, + 60490, 60493, 60496, 60499, 60502, 60505, 60508, 60511, 60514, 60517, + 60520, 60523, 60526, 60529, 60532, 60535, 60538, 60541, 60544, 60547, + 60550, 60553, 60556, 60559, 60562, 60565, 60568, 60571, 60574, 60577, + 60580, 60583, 60586, 60589, 60592, 60595, 60598, 60601, 60604, 60607, + 60610, 60613, 60616, 60619, 60622, 60625, 60628, 60631, 60634, 60637, + 60640, 60643, 60646, 60649, 60657, 60664, 60671, 60678, 60685, 60692, + 60699, 60706, 60713, 60720, 60728, 60736, 60744, 60752, 60760, 60768, + 60776, 60784, 60792, 60800, 60808, 60816, 60824, 60832, 60840, 60843, + 60846, 60849, 60851, 60854, 60857, 60860, 60865, 60870, 60873, 60880, + 60887, 60894, 60901, 60904, 60909, 60911, 60915, 60917, 60919, 60922, + 60925, 60928, 60931, 60934, 60937, 60940, 60945, 60950, 60953, 60956, + 60959, 60962, 60965, 60968, 60971, 60975, 60978, 60981, 60984, 60987, + 60990, 60994, 60997, 61000, 61003, 61008, 61013, 61018, 61023, 61028, + 61033, 61038, 61043, 61048, 61056, 61058, 61061, 61064, 61067, 61070, + 61075, 61083, 61086, 61089, 61093, 61096, 61099, 61102, 61107, 61110, + 61113, 61118, 61121, 61124, 61129, 61132, 61135, 61140, 61145, 61150, + 61153, 61156, 61159, 61162, 61168, 61171, 61174, 61177, 61179, 61182, + 61185, 61188, 61193, 61196, 61199, 61202, 61205, 61208, 61213, 61216, + 61219, 61222, 61225, 61228, 61231, 61234, 61237, 61240, 61245, 61249, + 61256, 61263, 61270, 61277, 61284, 61291, 61298, 61305, 61312, 61320, + 61328, 61336, 61344, 61352, 61360, 61368, 61376, 61384, 61392, 61400, + 61408, 61416, 61424, 61432, 61440, 61448, 61456, 61464, 61472, 61480, + 61488, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 61491, 61499, + 61507, 61517, 61523, 61527, 61531, 61537, 61543, 61548, 61552, 61556, + 61560, 61564, 61570, 61574, 61578, 61582, 61592, 61596, 61600, 61606, + 61610, 61616, 61620, 61624, 61630, 61636, 61642, 61650, 61658, 61662, + 61666, 61670, 61676, 61680, 61689, 61695, 61699, 61703, 61707, 61711, + 61715, 61719, 61726, 61732, 61738, 61742, 61748, 61752, 61758, 61766, + 61776, 61780, 61788, 61792, 61798, 61806, 61814, 61818, 61822, 61828, + 61833, 61839, 61845, 61849, 61853, 61856, 61860, 61864, 61868, 61872, + 61876, 61880, 61884, 61887, 61891, 61895, 61899, 61903, 61907, 61911, + 61914, 61918, 61922, 61925, 61929, 61933, 61937, 61941, 61945, 61949, + 61953, 61957, 61961, 61965, 61969, 61973, 61977, 61981, 61985, 61989, + 61993, 61997, 62001, 62005, 62009, 62013, 62017, 62021, 62025, 62029, + 62033, 62037, 62041, 62045, 62049, 62053, 62057, 62061, 62065, 62069, + 62073, 62077, 62081, 62085, 62089, 62093, 62097, 62101, 62104, 62108, + 62112, 62116, 62120, 62124, 62128, 62132, 62136, 62140, 62144, 62148, + 62152, 62156, 62160, 62164, 62168, 62172, 62176, 62180, 62184, 62188, + 62192, 62196, 62200, 62204, 62208, 62212, 62216, 62220, 62224, 62228, + 62232, 62236, 62240, 62244, 62248, 62252, 62256, 62260, 62264, 62268, + 62272, 62276, 62280, 62284, 62288, 62292, 62296, 62300, 62304, 62308, + 62312, 62316, 62320, 62324, 62328, 62332, 62336, 62340, 62344, 62348, + 62352, 62356, 62360, 62364, 62368, 62372, 62376, 62380, 62384, 62388, + 62392, 62396, 62400, 62404, 62408, 62412, 62416, 62420, 62424, 62428, + 62432, 62436, 62440, 62444, 62448, 62452, 62456, 62460, 62464, 62468, + 62472, 62476, 62480, 62484, 62488, 62492, 62496, 62500, 62504, 62508, + 62512, 62516, 62520, 62524, 62528, 62532, 62536, 62540, 62544, 62548, + 62552, 62556, 62560, 62564, 62568, 62572, 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, 62731, 62735, 62739, 62743, 62747, + 62751, 62755, 62759, 62763, 62767, 62771, 62775, 62779, 62783, 62787, + 62791, 62795, 62799, 62803, 62807, 62811, 62815, 62819, 62823, 62827, + 62831, 62835, 62839, 62843, 62847, 62851, 62855, 62859, 62863, 62867, + 62871, 62875, 62879, 62883, 62887, 62891, 62895, 62899, 62903, 62907, + 62911, 62915, 62919, 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, 63038, 63042, 63046, 63050, 63054, 63058, 63062, 63066, + 63070, 63074, 63078, 63082, 63086, 63090, 63094, 63098, 63102, 63106, + 63110, 63114, 63118, 63122, 63126, 63130, 63134, 63138, 63142, 63146, + 63150, 63154, 63158, 63162, 63166, 63170, 63174, 63178, 63182, 63186, + 63190, 63194, 63198, 63202, 63206, 63210, 63214, 63218, 63222, 63226, + 63230, 63234, 63238, 63242, 63246, 63250, 63254, 63258, 63262, 63266, + 63270, 63274, 63278, 63282, 63286, 63290, 63294, 63298, 63302, 63306, + 63310, 63314, 63318, 63322, 63326, 63330, 63334, 63338, 63342, 63346, + 63350, 63354, 63358, 63362, 63366, 63370, 63374, 63378, 63382, 63386, + 63390, 63394, 63397, 63401, 63405, 63409, 63413, 63417, 63421, 63425, + 63429, 63433, 63437, 63441, 63445, 63449, 63453, 63457, 63461, 63465, + 63469, 63473, 63477, 63481, 63485, 63489, 63493, 63497, 63501, 63505, + 63509, 63513, 63517, 63521, 63525, 63529, 63533, 63537, 63541, 63545, + 63549, 63553, 63557, 63561, 63565, 63569, 63573, 63577, 63581, 63585, + 63589, 63593, 63597, 63601, 63605, 63609, 63613, 63617, 63621, 63625, + 63629, 63633, 63637, 63641, 63645, 63649, 63653, 63657, 63661, 63665, + 63669, 63673, 63677, 63681, 63685, 63689, 63693, 63697, 63701, 63705, + 63709, 63713, 63717, 63721, 63725, 63729, 63733, 63737, 63741, 63745, + 63749, 63753, 63757, 63761, 63765, 63769, 63773, 63777, 63781, 63785, + 63789, 63793, 63797, 63801, 63805, 63809, 63813, 63817, 63821, 63825, + 63829, 63833, 63837, 63841, 63845, 63849, 63853, 63857, 63861, 63865, + 63869, 63873, 63877, 63881, 63885, 63889, 63892, 63896, 63900, 63904, + 63908, 63912, 63916, 63920, 63924, 63928, 63932, 63936, 63940, 63944, + 63948, 63952, 63956, 63960, 63964, 63968, 63972, 63976, 63980, 63984, + 63988, 63992, 63996, 64000, 64004, 64008, 64012, 64016, 64020, 64024, + 64028, 64032, 64036, 64040, 64044, 64048, 64052, 64056, 64060, 64064, + 64068, 64072, 64076, 64080, 64084, 64088, 64092, 64096, 64100, 64104, + 64108, 64112, 64116, 64120, 64124, 64128, 64132, 64136, 64140, 64144, + 64148, 64152, 64156, 64160, 64164, 64168, 64172, 64176, 64180, 64184, + 64188, 64192, 64196, 64200, 64204, 64208, 64212, 64216, 64220, 64224, + 64228, 64232, 64236, 64240, 64244, 64248, 64252, 64256, 64260, 64264, + 64268, 64272, 64276, 64280, 64284, 64288, 64292, 64296, 64300, 64304, + 64308, 64312, 64316, 64320, 64324, 64328, 64332, 64336, 64340, 64344, + 64347, 64351, 64355, 64359, 64363, 64367, 64371, 64375, 64379, 64383, + 64387, 64391, 64395, 64399, 64403, 64407, 64411, 64415, 64419, 64423, + 64427, 64431, 64435, 64439, 64443, 64447, 64451, 64455, 64459, 64463, + 64467, 64471, 64475, 64479, 64483, 64487, 64491, 64495, 64499, 64503, + 64507, 64511, 64515, 64519, 64523, 64527, 64531, 64535, 64539, 64543, + 64547, 64551, 64555, 64559, 64563, 64567, 64571, 64575, 64579, 64583, + 64587, 64591, 64595, 64599, 64603, 64607, 64611, 64615, 64619, 64623, 64627, 64631, 64635, 64639, 64643, 64647, 64651, 64655, 64659, 64663, - 64667, 64671, 64674, 64678, 64682, 64686, 64690, 64694, 64698, 64702, - 64706, 64710, 64714, 64718, 64722, 64726, 64730, 64734, 64738, 64742, - 64746, 64750, 64754, 64758, 64761, 64765, 64769, 64773, 64777, 64781, - 64785, 64789, 64793, 64797, 64801, 64805, 64809, 64813, 64817, 64821, - 64825, 64829, 64833, 64837, 64841, 64845, 64849, 64853, 64857, 64861, - 64865, 64869, 64873, 64877, 64881, 64885, 64889, 64893, 64897, 64901, - 64905, 64909, 64913, 64917, 64921, 64925, 64929, 64933, 64936, 64941, - 64945, 64951, 64956, 64962, 64966, 64970, 64974, 64978, 64982, 64986, - 64990, 64994, 64998, 65002, 65006, 65010, 65014, 65018, 65021, 65024, - 65027, 65030, 65033, 65036, 65039, 65042, 65045, 65050, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 65056, 65061, 65066, 65071, - 65076, 65082, 65088, 65093, 65098, 65103, 65108, 65115, 65122, 65129, - 65136, 65143, 65150, 65160, 65170, 65177, 65184, 65190, 65196, 65202, - 65208, 65217, 65226, 65233, 65240, 65251, 65262, 65267, 0, 0, 65272, - 65279, 65286, 65293, 65300, 65307, 65314, 65320, 65326, 65332, 65338, - 65345, 65352, 65357, 65361, 65368, 65375, 65382, 0, 0, 0, 0, 0, 0, 0, 0, - 65386, 65390, 65394, 65397, 65400, 65405, 65410, 65415, 65420, 65425, - 65430, 65435, 65440, 65445, 65450, 65459, 65468, 65473, 65478, 65483, - 65488, 65493, 65498, 65503, 65508, 65513, 65518, 65523, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 65528, 65537, 65546, 65555, 65564, 65573, 65582, 65591, 65600, - 65608, 65615, 65623, 65630, 65638, 65648, 65657, 65667, 65676, 65686, - 65694, 65701, 65709, 65716, 65724, 65729, 65734, 65739, 65747, 65753, - 65759, 65766, 65775, 65783, 65791, 65799, 65806, 65813, 65820, 65827, - 65832, 65837, 65842, 65847, 65852, 65857, 65862, 65867, 65875, 65883, - 65889, 65894, 65899, 65904, 65909, 65914, 65919, 65924, 65929, 65934, - 65942, 65950, 65955, 65960, 65969, 65978, 65985, 65992, 66001, 66010, - 66021, 66032, 66038, 66044, 66052, 66060, 66069, 66078, 66085, 66092, - 66097, 66102, 66113, 66124, 66132, 66140, 66150, 66160, 66171, 66182, - 66191, 66200, 66207, 66214, 66221, 66228, 66237, 66246, 66251, 66256, - 66263, 66270, 66277, 66284, 66295, 66306, 66311, 66316, 66321, 66326, - 66331, 66336, 66341, 66346, 66350, 66355, 66360, 66365, 66370, 66375, - 66381, 66386, 66391, 66398, 66405, 66412, 66419, 66425, 66432, 66439, - 66444, 66449, 66455, 66461, 66467, 66473, 66480, 66487, 66494, 66498, - 66505, 66510, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66515, 66522, - 66529, 66536, 66544, 66551, 66557, 66563, 66570, 66576, 66582, 66588, - 66595, 66602, 66609, 66616, 66623, 66630, 66637, 66644, 66651, 66658, - 66665, 66672, 66679, 66686, 66692, 66699, 66706, 66713, 66720, 66727, - 66734, 66741, 66748, 66755, 66762, 66769, 66776, 66783, 66790, 66797, - 66804, 66811, 66818, 66826, 66834, 66842, 66850, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66858, 66861, 66865, 66869, 66873, - 66877, 66881, 66885, 66889, 66893, 66897, 66901, 66905, 66908, 66912, - 66916, 66919, 66923, 66927, 66931, 66935, 66939, 66943, 66947, 66950, - 66953, 66957, 66961, 66965, 66968, 66971, 66974, 66977, 66980, 66983, - 66987, 66991, 66995, 66999, 67003, 67009, 67014, 67018, 67022, 67026, - 67030, 67035, 67041, 67046, 67052, 67057, 67062, 67066, 67072, 67077, - 67081, 0, 0, 0, 0, 0, 0, 0, 0, 67086, 67090, 67094, 67097, 67101, 67104, - 67108, 67111, 67115, 67119, 67124, 67128, 67133, 67136, 67140, 67144, - 67147, 67151, 67155, 67158, 67162, 67166, 67170, 67174, 67178, 67182, - 67186, 67190, 67194, 67198, 67202, 67206, 67210, 67214, 67218, 67222, - 67226, 67230, 67234, 67237, 67241, 67245, 67249, 67252, 67255, 67258, - 67262, 67266, 67270, 67274, 67278, 67281, 67285, 67291, 67296, 67300, - 67305, 67309, 67314, 67319, 67325, 67330, 67336, 67340, 67345, 67350, - 67354, 67359, 67364, 0, 0, 0, 0, 0, 0, 0, 0, 0, 67368, 67371, 67375, - 67379, 67382, 67385, 67388, 67391, 67394, 67397, 67400, 67403, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 67406, 67413, 67419, 67425, 67431, - 67437, 67443, 67449, 67455, 67461, 67467, 67473, 67480, 67487, 67494, - 67501, 67508, 67515, 67522, 67529, 67536, 67543, 67549, 67556, 67562, - 67569, 67576, 67582, 67588, 67595, 67602, 67609, 67615, 67622, 67629, - 67635, 67642, 67648, 67655, 67662, 67668, 67674, 67681, 67687, 67694, - 67701, 67710, 67717, 67724, 67728, 67733, 67738, 67743, 67748, 67753, - 67757, 67762, 67766, 67771, 67776, 67781, 67786, 67790, 67795, 67799, - 67804, 67808, 67813, 67818, 67823, 67828, 67832, 67837, 67842, 67847, - 67853, 67858, 67864, 67870, 67876, 67883, 67889, 67895, 67901, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 67905, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 67910, 67913, - 67916, 67919, 67922, 67926, 67929, 67932, 67936, 67940, 67944, 67948, - 67952, 67956, 67960, 67964, 67968, 67972, 67976, 67980, 67984, 67988, - 67992, 67996, 68000, 68004, 68008, 68011, 68015, 68019, 68023, 68027, - 68031, 68034, 68038, 68041, 68044, 68048, 68052, 68056, 68060, 68063, - 68068, 68072, 68077, 68082, 68086, 68091, 68095, 68100, 68105, 68110, - 68115, 68120, 68126, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68132, 68137, 68141, - 68146, 68153, 68158, 68163, 68167, 68172, 68177, 68181, 68185, 68190, - 68196, 0, 0, 68202, 68206, 68209, 68212, 68215, 68218, 68221, 68224, - 68227, 68230, 0, 0, 68233, 68238, 68243, 68249, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 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, 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, 68992, 68996, 69000, 69004, 69008, 69012, - 69016, 69020, 69024, 69028, 69032, 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, 0, 0, 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, 0, 0, 0, 0, 0, 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, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 70124, 70129, 70134, 70139, 70144, - 70149, 70157, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 70162, 70169, 70176, - 70183, 70190, 0, 0, 0, 0, 0, 70197, 70204, 70211, 70221, 70227, 70233, - 70239, 70245, 70251, 70257, 70264, 70270, 70276, 70282, 70291, 70300, - 70312, 70324, 70330, 70336, 70342, 70349, 70356, 70363, 70370, 70377, 0, - 70384, 70391, 70398, 70406, 70413, 0, 70420, 0, 70427, 70434, 0, 70441, - 70449, 0, 70456, 70463, 70470, 70477, 70484, 70491, 70498, 70505, 70512, - 70519, 70524, 70531, 70538, 70544, 70550, 70556, 70562, 70568, 70574, - 70580, 70586, 70592, 70598, 70604, 70610, 70616, 70622, 70628, 70634, - 70640, 70646, 70652, 70658, 70664, 70670, 70676, 70682, 70688, 70694, - 70700, 70706, 70712, 70718, 70724, 70730, 70736, 70742, 70748, 70754, - 70760, 70766, 70772, 70778, 70784, 70790, 70796, 70802, 70808, 70814, - 70820, 70826, 70832, 70838, 70844, 70850, 70856, 70862, 70868, 70874, - 70880, 70886, 70892, 70898, 70904, 70910, 70916, 70922, 70928, 70934, - 70940, 70946, 70952, 70958, 70964, 70970, 70976, 70982, 70988, 70994, - 71002, 71010, 71016, 71022, 71028, 71034, 71043, 71052, 71060, 71068, - 71076, 71084, 71092, 71100, 71108, 71116, 71123, 71130, 71140, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 71150, 71156, 71162, 71168, 71174, 71179, 71184, 71190, - 71196, 71202, 71208, 71216, 71222, 71228, 71236, 71244, 71252, 71260, - 71265, 71270, 71275, 71280, 71292, 71304, 71314, 71324, 71335, 71346, - 71357, 71368, 71378, 71388, 71399, 71410, 71421, 71432, 71442, 71452, - 71462, 71477, 71492, 71507, 71514, 71521, 71528, 71535, 71545, 71555, - 71565, 71576, 71586, 71594, 71602, 71610, 71618, 71627, 71635, 71643, - 71651, 71659, 71667, 71676, 71684, 71692, 71700, 71709, 71717, 71724, - 71731, 71738, 71745, 71752, 71759, 71766, 71774, 71782, 71790, 71798, - 71806, 71814, 71822, 71830, 71838, 71846, 71854, 71862, 71870, 71878, - 71886, 71894, 71902, 71910, 71918, 71926, 71934, 71943, 71951, 71959, - 71967, 71976, 71984, 71992, 72000, 72008, 72016, 72024, 72032, 72041, - 72049, 72056, 72063, 72070, 72077, 72085, 72092, 72099, 72106, 72113, - 72120, 72128, 72135, 72143, 72151, 72159, 72167, 72176, 72184, 72192, - 72200, 72209, 72217, 72224, 72231, 72238, 72245, 72253, 72260, 72270, - 72280, 72290, 72299, 72308, 72317, 72326, 72335, 72345, 72356, 72367, - 72377, 72388, 72399, 72409, 72418, 72427, 72435, 72444, 72453, 72461, - 72470, 72479, 72487, 72496, 72505, 72513, 72522, 72531, 72539, 72548, - 72557, 72565, 72574, 72582, 72591, 72599, 72607, 72615, 72623, 72632, - 72640, 72647, 72655, 72662, 72669, 72676, 72685, 72694, 72702, 72711, - 72720, 72728, 72738, 72746, 72754, 72761, 72769, 72777, 72784, 72794, - 72804, 72814, 72824, 72835, 72843, 72851, 72859, 72867, 72876, 72884, - 72892, 72900, 72908, 72917, 72925, 72932, 72939, 72946, 72953, 72960, - 72967, 72975, 72983, 72991, 72999, 73007, 73015, 73023, 73031, 73039, - 73047, 73055, 73063, 73071, 73079, 73087, 73095, 73103, 73111, 73119, - 73127, 73135, 73143, 73151, 73159, 73167, 73175, 73183, 73191, 73198, - 73205, 73212, 73219, 73227, 73234, 73241, 73248, 73255, 73263, 73271, - 73279, 73287, 73296, 73304, 73312, 73322, 73329, 73336, 73343, 73350, - 73358, 73368, 73379, 73387, 73396, 73404, 73413, 73421, 73430, 73438, - 73447, 73455, 73464, 73472, 73480, 73487, 73495, 73504, 73511, 73519, - 73528, 73537, 73546, 73555, 73563, 73572, 73580, 73589, 73597, 73606, - 73614, 73623, 73631, 73639, 73646, 73654, 73661, 73669, 73676, 73685, - 73693, 73702, 73710, 73718, 73726, 73734, 73742, 73751, 73760, 73769, - 73778, 73787, 73795, 73804, 73812, 73821, 73829, 73838, 73846, 73855, - 73863, 73871, 73878, 73886, 73893, 73901, 73908, 73917, 73925, 73934, - 73942, 73950, 73958, 73966, 73974, 73983, 73992, 74001, 74010, 74018, - 74026, 74034, 74042, 74051, 74060, 74068, 74076, 74084, 74092, 74100, - 74108, 74116, 74124, 74132, 74140, 74148, 74153, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 74158, 74168, 74178, 74188, 74198, 74208, 74218, - 74228, 74238, 74247, 74256, 74265, 74275, 74285, 74295, 74306, 74316, - 74326, 74336, 74346, 74356, 74366, 74376, 74386, 74396, 74406, 74416, - 74426, 74436, 74446, 74456, 74467, 74477, 74487, 74497, 74507, 74517, - 74527, 74537, 74547, 74557, 74568, 74578, 74588, 74599, 74609, 74619, - 74629, 74639, 74648, 74657, 74667, 74676, 74685, 74694, 74703, 74712, - 74721, 74730, 74739, 74748, 74757, 74766, 74775, 0, 0, 74784, 74793, - 74803, 74813, 74823, 74834, 74844, 74854, 74865, 74875, 74886, 74895, - 74904, 74914, 74924, 74935, 74945, 74956, 74966, 74977, 74986, 74996, - 75006, 75017, 75027, 75037, 75047, 75056, 75065, 75074, 75083, 75092, - 75101, 75111, 75121, 75131, 75140, 75150, 75160, 75170, 75179, 75188, - 75198, 75207, 75217, 75226, 75235, 75244, 75254, 75264, 75274, 75284, - 75294, 75304, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 75314, 75329, - 75344, 75350, 75356, 75362, 75368, 75374, 75380, 75386, 75392, 75400, - 75404, 75407, 0, 0, 75415, 75418, 75421, 75424, 75427, 75430, 75433, - 75436, 75439, 75442, 75445, 75448, 75451, 75454, 75457, 75460, 75463, - 75470, 75478, 75488, 75495, 75502, 75510, 75518, 75528, 75539, 0, 0, 0, - 0, 0, 0, 75547, 75552, 75557, 75564, 75571, 75577, 75583, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 75588, 75597, 75606, 75615, 75623, 75633, 75641, 75649, - 75658, 75667, 75678, 75689, 75699, 75709, 75719, 75729, 75738, 75747, - 75756, 75765, 75775, 75785, 75789, 75794, 75802, 75810, 75814, 75818, - 75822, 75827, 75832, 75837, 75842, 75845, 75849, 0, 75854, 75857, 75860, - 75864, 75868, 75873, 75877, 75881, 75886, 75891, 75898, 75905, 75908, - 75911, 75914, 75917, 75920, 75924, 75928, 0, 75932, 75937, 75941, 75945, - 0, 0, 0, 0, 75950, 75955, 75962, 75967, 75972, 0, 75977, 75982, 75987, - 75992, 75997, 76002, 76007, 76012, 76017, 76022, 76027, 76032, 76041, - 76050, 76058, 76066, 76075, 76084, 76093, 76102, 76110, 76118, 76126, - 76134, 76139, 76144, 76150, 76156, 76162, 76168, 76176, 76184, 76190, - 76196, 76202, 76208, 76214, 76220, 76226, 76232, 76237, 76242, 76247, - 76252, 76257, 76262, 76267, 76272, 76277, 76282, 76287, 76292, 76298, - 76304, 76310, 76316, 76322, 76328, 76334, 76340, 76346, 76352, 76358, - 76364, 76370, 76376, 76382, 76388, 76394, 76400, 76406, 76412, 76418, - 76424, 76430, 76436, 76442, 76448, 76454, 76460, 76466, 76472, 76478, - 76484, 76490, 76496, 76502, 76508, 76514, 76520, 76526, 76532, 76538, - 76544, 76550, 76556, 76562, 76568, 76574, 76580, 76586, 76592, 76598, - 76604, 76609, 76614, 76619, 76624, 76629, 76634, 76639, 76644, 76650, - 76656, 76662, 76668, 76674, 76680, 76686, 76692, 76698, 76704, 76710, - 76716, 76721, 76726, 76731, 76736, 76747, 76758, 76768, 76778, 76789, - 76800, 76807, 0, 0, 76814, 0, 76822, 76826, 76830, 76833, 76837, 76841, - 76844, 76847, 76851, 76855, 76858, 76861, 76864, 76867, 76872, 76875, - 76879, 76882, 76885, 76888, 76891, 76894, 76897, 76900, 76903, 76906, - 76909, 76912, 76916, 76920, 76924, 76928, 76933, 76938, 76944, 76950, - 76956, 76961, 76967, 76972, 76977, 76982, 76988, 76994, 76999, 77004, - 77009, 77014, 77020, 77026, 77031, 77036, 77042, 77047, 77052, 77058, - 77064, 77070, 77076, 77080, 77085, 77089, 77094, 77098, 77103, 77108, - 77114, 77120, 77126, 77131, 77137, 77142, 77147, 77152, 77158, 77164, - 77169, 77174, 77179, 77184, 77190, 77196, 77201, 77206, 77212, 77217, - 77222, 77228, 77234, 77240, 77246, 77251, 77255, 77260, 77262, 77267, - 77272, 77278, 77283, 77288, 77292, 77298, 77303, 77308, 77313, 77318, - 77323, 77328, 77333, 77339, 77345, 77351, 77359, 77363, 77367, 77371, - 77375, 77379, 77383, 77388, 77393, 77398, 77403, 77408, 77413, 77418, - 77423, 77428, 77433, 77438, 77443, 77448, 77452, 77457, 77462, 77467, - 77472, 77477, 77481, 77486, 77491, 77496, 77501, 77505, 77510, 77515, - 77520, 77525, 77529, 77534, 77539, 77543, 77548, 77553, 77558, 77563, - 77568, 77572, 77579, 77586, 77590, 77595, 77600, 77605, 77610, 77615, - 77620, 77625, 77630, 77635, 77640, 77645, 77650, 77655, 77660, 77665, - 77670, 77675, 77680, 77685, 77690, 77695, 77700, 77705, 77710, 77715, - 77720, 77725, 77730, 77735, 0, 0, 0, 77740, 77744, 77749, 77753, 77758, - 77763, 0, 0, 77767, 77772, 77777, 77781, 77786, 77791, 0, 0, 77796, - 77801, 77805, 77810, 77815, 77820, 0, 0, 77825, 77830, 77835, 0, 0, 0, - 77839, 77843, 77847, 77850, 77853, 77857, 77861, 0, 77865, 77871, 77874, - 77878, 77881, 77885, 77889, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 77893, 77899, - 77905, 77911, 77917, 0, 0, 77921, 77927, 77933, 77939, 77945, 77951, - 77958, 77965, 77972, 77979, 77986, 77993, 0, 78000, 78007, 78014, 78020, - 78027, 78034, 78041, 78048, 78054, 78061, 78068, 78075, 78082, 78089, - 78096, 78103, 78110, 78117, 78123, 78130, 78137, 78144, 78151, 78158, - 78165, 78172, 0, 78179, 78185, 78192, 78199, 78206, 78213, 78220, 78227, - 78234, 78241, 78248, 78255, 78262, 78269, 78275, 78282, 78289, 78296, - 78303, 0, 78310, 78317, 0, 78324, 78331, 78338, 78345, 78352, 78359, - 78366, 78373, 78380, 78387, 78394, 78401, 78408, 78415, 78422, 0, 0, - 78428, 78433, 78438, 78443, 78448, 78453, 78458, 78463, 78468, 78473, - 78478, 78483, 78488, 78493, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 78498, 78505, - 78512, 78519, 78526, 78533, 78540, 78547, 78554, 78561, 78568, 78575, - 78582, 78589, 78596, 78603, 78610, 78617, 78624, 78631, 78639, 78647, - 78654, 78661, 78666, 78674, 78682, 78689, 78696, 78701, 78708, 78713, - 78718, 78725, 78730, 78735, 78740, 78748, 78753, 78758, 78765, 78770, - 78775, 78782, 78789, 78794, 78799, 78804, 78809, 78814, 78819, 78824, - 78829, 78834, 78841, 78846, 78853, 78858, 78863, 78868, 78873, 78878, - 78883, 78888, 78893, 78898, 78903, 78908, 78915, 78922, 78929, 78936, - 78942, 78947, 78954, 78959, 78964, 78973, 78980, 78989, 78996, 79001, - 79006, 79014, 79019, 79024, 79029, 79034, 79039, 79046, 79051, 79056, - 79061, 79066, 79071, 79078, 79085, 79092, 79099, 79106, 79113, 79120, - 79127, 79134, 79141, 79148, 79155, 79162, 79169, 79176, 79183, 79190, - 79197, 79204, 79211, 79218, 79225, 79232, 79239, 79246, 79253, 79260, - 79267, 0, 0, 0, 0, 0, 79274, 79281, 79288, 0, 0, 0, 0, 79292, 79295, - 79298, 79301, 79304, 79307, 79310, 79313, 79316, 79319, 79323, 79327, - 79331, 79335, 79339, 79343, 79347, 79351, 79355, 79360, 79365, 79370, - 79376, 79382, 79388, 79394, 79400, 79406, 79411, 79416, 79421, 79427, - 79433, 79439, 79445, 79451, 79457, 79463, 79469, 79475, 79481, 79487, - 79493, 79499, 79505, 0, 0, 0, 79511, 79518, 79525, 79532, 79539, 79546, - 79555, 79564, 79571, 79578, 79586, 79594, 79602, 79608, 79615, 79624, - 79633, 79642, 79651, 79660, 79669, 79679, 79690, 79700, 79711, 79720, - 79729, 79738, 79748, 79759, 79769, 79780, 79791, 79800, 79808, 79814, - 79820, 79826, 79832, 79840, 79848, 79854, 79861, 79871, 79878, 79885, - 79892, 79899, 79906, 79916, 79923, 79930, 79938, 79946, 79955, 79964, - 79973, 79982, 79991, 79999, 80008, 80017, 80026, 80030, 80037, 80042, - 80047, 80051, 80055, 80059, 80063, 80068, 80073, 80079, 80085, 80089, - 80095, 80099, 80103, 80107, 80111, 80115, 80119, 80125, 0, 0, 0, 0, 0, - 80129, 80134, 80139, 80144, 80149, 80156, 80161, 80166, 80171, 80176, - 80181, 80186, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 80191, 80198, 80207, 80216, 80223, 80230, 80237, - 80244, 80251, 80258, 80264, 80271, 80278, 80285, 80292, 80299, 80306, - 80313, 80320, 80329, 80336, 80343, 80350, 80357, 80364, 80371, 80378, - 80385, 80394, 80401, 80408, 80415, 80422, 80429, 80436, 80445, 80452, - 80459, 80466, 80473, 80482, 80489, 80496, 80503, 80511, 80520, 0, 0, - 80529, 80533, 80537, 80542, 80547, 80551, 80556, 80560, 80565, 80570, - 80575, 80580, 80585, 80590, 80594, 80598, 80602, 80607, 80612, 80616, - 80621, 80626, 80630, 80634, 80639, 80644, 80649, 80654, 80658, 0, 0, 0, - 80663, 80667, 80672, 80677, 80681, 80686, 80690, 80695, 80700, 80705, - 80710, 80714, 80718, 80723, 80728, 80733, 80738, 80742, 80747, 80751, - 80756, 80761, 80765, 80770, 80775, 80780, 80784, 80788, 80793, 80798, - 80803, 80808, 80813, 80817, 80822, 80827, 80832, 80837, 80842, 80847, - 80852, 80857, 80862, 80867, 80872, 80877, 80882, 80887, 80892, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 80897, 80901, - 80906, 80911, 80916, 80920, 80925, 80930, 80935, 80940, 80944, 80948, - 80953, 80958, 80963, 80968, 80972, 80977, 80982, 80987, 80992, 80997, - 81002, 81006, 81011, 81016, 81021, 81026, 81031, 81036, 81041, 0, 81046, - 81050, 81054, 81059, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 81064, 81069, - 81074, 81079, 81084, 81089, 81094, 81099, 81104, 81109, 81114, 81119, - 81124, 81129, 81134, 81139, 81144, 81149, 81154, 81159, 81164, 81169, - 81174, 81179, 81184, 81189, 81194, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 81201, 81206, 81211, - 81216, 81221, 81226, 81231, 81236, 81241, 81246, 81251, 81256, 81261, - 81266, 81271, 81276, 81281, 81286, 81291, 81296, 81301, 81306, 81311, - 81316, 81321, 81326, 81331, 81335, 81339, 81343, 0, 81348, 81354, 81359, - 81364, 81369, 81374, 81380, 81386, 81392, 81398, 81404, 81410, 81416, - 81422, 81428, 81434, 81440, 81446, 81452, 81457, 81463, 81469, 81475, - 81481, 81486, 81492, 81498, 81503, 81509, 81515, 81520, 81526, 81532, - 81538, 81544, 81550, 81556, 0, 0, 0, 0, 81561, 81567, 81573, 81579, - 81585, 81591, 81597, 81603, 81609, 81616, 81621, 81626, 81632, 81638, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 81644, 81649, 81654, - 81659, 81665, 81670, 81676, 81682, 81688, 81694, 81701, 81707, 81714, - 81719, 81724, 81729, 81734, 81738, 81743, 81748, 81753, 81758, 81763, - 81768, 81773, 81778, 81783, 81788, 81793, 81798, 81803, 81808, 81813, - 81818, 81823, 81828, 81833, 81838, 81843, 81848, 81853, 81858, 81863, - 81868, 81874, 81879, 81885, 81891, 81897, 81903, 81910, 81916, 81923, - 81928, 81933, 81938, 81943, 81947, 81952, 81957, 81962, 81967, 81972, - 81977, 81982, 81987, 81992, 81997, 82002, 82007, 82012, 82017, 82022, - 82027, 82032, 82037, 82042, 82047, 82052, 82057, 82062, 82067, 82072, - 82077, 82082, 82087, 82092, 82097, 82102, 82107, 82112, 82117, 82122, - 82127, 82132, 82137, 82142, 82147, 82152, 82157, 82162, 82167, 82172, - 82177, 82182, 82187, 82192, 82197, 82202, 82207, 82212, 82217, 82222, - 82227, 82232, 82237, 82242, 82247, 82252, 82257, 82262, 82267, 82272, - 82277, 82282, 82287, 82292, 82297, 82302, 82307, 82312, 82317, 82322, - 82327, 82332, 82337, 82341, 82346, 82351, 82356, 82361, 82366, 82371, - 82376, 82381, 82386, 82391, 82396, 82401, 82405, 82409, 82413, 82417, - 82421, 82425, 82429, 82434, 82439, 0, 0, 82444, 82449, 82453, 82457, - 82461, 82465, 82469, 82473, 82477, 82481, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 82485, 82488, 82491, 82494, 82497, 82500, 0, 0, 82504, 0, - 82508, 82511, 82515, 82519, 82523, 82527, 82531, 82535, 82539, 82543, - 82547, 82550, 82554, 82558, 82562, 82566, 82570, 82574, 82578, 82582, - 82586, 82589, 82593, 82597, 82601, 82605, 82608, 82612, 82616, 82620, - 82624, 82628, 82632, 82636, 82640, 82644, 82648, 82652, 82656, 82659, - 82663, 82667, 82671, 82675, 0, 82679, 82683, 0, 0, 0, 82687, 0, 0, 82691, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82695, 82700, 82705, - 82710, 82715, 82720, 82725, 82730, 82735, 82740, 82745, 82750, 82755, - 82760, 82765, 82770, 82775, 82780, 82785, 82790, 82795, 82800, 82805, - 82809, 82814, 82819, 0, 0, 0, 0, 0, 82825, 82831, 82835, 82840, 82844, - 82849, 82853, 82857, 82861, 82866, 82871, 82875, 82879, 82883, 82887, - 82891, 82896, 82901, 82905, 82910, 82915, 82919, 82924, 82929, 82934, - 82939, 82944, 0, 0, 0, 0, 0, 82949, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 82954, 82957, 82961, 82965, 0, 82970, 82974, 0, 0, 0, 0, 0, - 82978, 82983, 82989, 82993, 82997, 83000, 83004, 83008, 0, 83012, 83016, - 83020, 0, 83024, 83028, 83032, 83036, 83040, 83044, 83048, 83052, 83056, - 83060, 83064, 83068, 83071, 83075, 83079, 83083, 83086, 83089, 83092, - 83096, 83100, 83104, 83108, 83112, 83116, 83119, 83123, 0, 0, 0, 0, - 83127, 83132, 83136, 0, 0, 0, 0, 83140, 83143, 83146, 83149, 83152, - 83155, 83159, 83163, 83168, 0, 0, 0, 0, 0, 0, 0, 0, 83173, 83178, 83184, - 83189, 83195, 83200, 83205, 83210, 83216, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 83221, 83224, 83229, 83235, 83243, 83248, 83254, 83262, - 83268, 83274, 83278, 83282, 83289, 83298, 83305, 83314, 83320, 83329, - 83336, 83343, 83350, 83360, 83366, 83370, 83377, 83386, 83396, 83403, - 83410, 83414, 83418, 83425, 83435, 83439, 83446, 83453, 83460, 83466, - 83473, 83480, 83487, 83494, 83498, 83502, 83506, 83513, 83517, 83524, - 83531, 83545, 83554, 83558, 83562, 83566, 83573, 83577, 83581, 83585, - 83593, 83601, 83620, 83630, 83650, 83654, 83658, 83662, 83666, 83670, - 83674, 83678, 83685, 83689, 83692, 83696, 83700, 83706, 83713, 83722, - 83726, 83735, 83744, 83752, 83756, 83763, 83767, 83771, 83775, 83779, - 83790, 83799, 83808, 83817, 83826, 83838, 83847, 83856, 83865, 83873, - 83882, 83894, 83903, 83912, 83921, 83933, 83942, 83951, 83963, 83972, - 83981, 83993, 84002, 84006, 84010, 84014, 84018, 84022, 84026, 84030, - 84037, 84041, 84045, 84056, 84060, 84064, 84071, 84077, 84083, 84087, - 84094, 84098, 84102, 84106, 84110, 84114, 84118, 84124, 84132, 84136, - 84140, 84143, 84149, 84159, 84163, 84175, 84182, 84189, 84196, 84203, - 84209, 84213, 84217, 84221, 84225, 84232, 84241, 84248, 84256, 84264, - 84270, 84274, 84278, 84282, 84286, 84292, 84301, 84313, 84320, 84327, - 84336, 84347, 84353, 84362, 84371, 84378, 84387, 84394, 84401, 84411, - 84418, 84425, 84432, 84439, 84443, 84449, 84453, 84464, 84472, 84481, - 84493, 84500, 84507, 84517, 84524, 84533, 84540, 84549, 84556, 84563, - 84573, 84580, 84587, 84597, 84604, 84616, 84625, 84632, 84639, 84646, - 84655, 84665, 84678, 84685, 84695, 84705, 84712, 84721, 84734, 84741, - 84748, 84755, 84765, 84775, 84782, 84792, 84799, 84806, 84816, 84822, - 84829, 84836, 84843, 84853, 84860, 84867, 84874, 84880, 84887, 84897, - 84904, 84908, 84916, 84920, 84932, 84936, 84950, 84954, 84958, 84962, - 84966, 84972, 84979, 84987, 84991, 84995, 84999, 85003, 85010, 85014, - 85020, 85026, 85034, 85038, 85045, 85053, 85057, 85061, 85067, 85071, - 85080, 85089, 85096, 85106, 85112, 85116, 85120, 85128, 85135, 85142, - 85148, 85152, 85160, 85164, 85171, 85183, 85190, 85200, 85206, 85210, - 85219, 85226, 85235, 85239, 85243, 85250, 85254, 85258, 85262, 85266, - 85269, 85275, 85281, 85285, 85289, 85296, 85303, 85310, 85317, 85324, - 85331, 85338, 85345, 85351, 85355, 85359, 85366, 85373, 85380, 85387, - 85394, 85398, 85401, 85406, 85410, 85414, 85423, 85432, 85436, 85440, - 85446, 85452, 85469, 85475, 85479, 85488, 85492, 85496, 85503, 85511, - 85519, 85525, 85529, 85533, 85537, 85541, 85544, 85549, 85555, 85564, - 85570, 85576, 85582, 85587, 85593, 85599, 85605, 85611, 85617, 85625, - 85631, 85642, 85648, 85654, 85663, 85673, 85679, 85685, 85691, 85697, - 85703, 85709, 85715, 85721, 85727, 85733, 85742, 85751, 85760, 85766, - 85775, 85781, 85787, 85793, 85799, 85805, 85811, 85817, 85823, 85829, - 85835, 85841, 85847, 85853, 85858, 85864, 85870, 85878, 85884, 85890, - 85894, 85902, 85906, 85910, 85914, 85918, 85922, 85929, 85933, 85942, - 85946, 85953, 85961, 85965, 85969, 85973, 85984, 85998, 86002, 86006, - 86013, 86019, 86026, 86030, 86034, 86038, 86042, 86046, 86053, 86057, - 86075, 86079, 86083, 86090, 86094, 86098, 86104, 86108, 86112, 86120, - 86124, 86128, 86132, 86136, 86141, 86151, 86159, 86167, 86173, 86179, - 86189, 86195, 86201, 86207, 86213, 86219, 86225, 86231, 86240, 86245, - 86251, 86260, 86268, 86274, 86282, 86291, 86297, 86303, 86309, 86315, - 86326, 86332, 86338, 86344, 86350, 86356, 86365, 86371, 86377, 86386, - 86398, 86409, 86415, 86424, 86430, 86436, 86442, 86456, 86461, 86468, - 86477, 86486, 86492, 86498, 86503, 86507, 86514, 86524, 86530, 86543, - 86547, 86551, 86558, 86562, 86568, 86577, 86581, 86585, 86589, 86593, - 86597, 86604, 86608, 86615, 86622, 86629, 86638, 86647, 86657, 86664, - 86671, 86678, 86688, 86695, 86705, 86712, 86722, 86729, 86736, 86746, - 86756, 86763, 86769, 86777, 86785, 86791, 86797, 86801, 86805, 86812, - 86820, 86826, 86830, 86834, 86838, 86845, 86857, 86860, 86867, 86873, - 86877, 86881, 86885, 86889, 86893, 86897, 86901, 86905, 86909, 86913, - 86920, 86924, 86930, 86934, 86938, 86942, 86948, 86955, 86962, 86969, - 86981, 86989, 86993, 86999, 87008, 87015, 87021, 87025, 87029, 87033, - 87039, 87048, 87056, 87060, 87066, 87070, 87074, 87078, 87084, 87091, - 87097, 87101, 87107, 87111, 87115, 87124, 87136, 87140, 87147, 87154, - 87164, 87171, 87183, 87190, 87197, 87204, 87215, 87225, 87238, 87248, - 87255, 87259, 87263, 87267, 87271, 87280, 87289, 87298, 87315, 87324, - 87330, 87337, 87345, 87358, 87362, 87371, 87380, 87389, 87398, 87409, - 87418, 87427, 87436, 87445, 87454, 87463, 87473, 87476, 87480, 87484, - 87488, 87492, 87496, 87502, 87509, 87516, 87523, 87529, 87535, 87542, - 87548, 87555, 87563, 87567, 87574, 87581, 87588, 87596, 87599, 87603, - 87607, 87611, 87615, 87621, 87625, 87631, 87638, 87645, 87651, 87658, - 87665, 87672, 87679, 87686, 87693, 87700, 87707, 87714, 87721, 87728, - 87735, 87742, 87749, 87755, 87759, 87767, 87771, 87775, 87779, 87783, - 87789, 87796, 87803, 87810, 87817, 87824, 87830, 87838, 87842, 87846, - 87850, 87854, 87860, 87877, 87894, 87898, 87902, 87906, 87910, 87914, - 87918, 87924, 87931, 87935, 87941, 87948, 87955, 87962, 87969, 87976, - 87985, 87992, 87999, 88006, 88013, 88017, 88021, 88027, 88039, 88043, - 88047, 88056, 88060, 88064, 88068, 88074, 88078, 88082, 88091, 88095, - 88099, 88103, 88110, 88114, 88118, 88122, 88126, 88130, 88134, 88138, - 88142, 88148, 88155, 88162, 88168, 88172, 88189, 88195, 88199, 88205, - 88211, 88217, 88223, 88229, 88235, 88239, 88243, 88247, 88253, 88257, - 88263, 88267, 88271, 88278, 88285, 88302, 88306, 88310, 88314, 88318, - 88322, 88334, 88337, 88342, 88347, 88362, 88372, 88383, 88387, 88391, - 88395, 88401, 88408, 88415, 88425, 88437, 88443, 88449, 88458, 88462, - 88466, 88473, 88483, 88490, 88496, 88500, 88504, 88511, 88517, 88521, - 88527, 88531, 88539, 88545, 88549, 88557, 88566, 88573, 88579, 88586, - 88593, 88603, 88613, 88617, 88621, 88625, 88629, 88635, 88642, 88648, - 88655, 88662, 88669, 88678, 88685, 88692, 88698, 88705, 88712, 88719, - 88726, 88733, 88740, 88746, 88753, 88760, 88767, 88776, 88783, 88790, - 88794, 88800, 88804, 88810, 88817, 88824, 88831, 88835, 88839, 88843, - 88847, 88851, 88858, 88862, 88866, 88872, 88881, 88885, 88889, 88893, - 88897, 88904, 88908, 88912, 88920, 88924, 88928, 88932, 88936, 88942, - 88946, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 88950, 88956, - 88962, 88969, 88976, 88983, 88990, 88997, 89004, 89010, 89017, 89024, - 89031, 89038, 89045, 89052, 89058, 89064, 89070, 89076, 89082, 89088, - 89094, 89100, 89106, 89113, 89120, 89127, 89134, 89141, 89148, 89154, - 89160, 89166, 89173, 89180, 89186, 89192, 89201, 89208, 89215, 89222, - 89229, 89236, 89243, 89249, 89255, 89261, 89270, 89277, 89284, 89295, - 89306, 89312, 89318, 89324, 89333, 89340, 89347, 89356, 89365, 89375, - 89385, 89396, 89408, 89418, 89428, 89439, 89451, 89461, 89471, 89481, - 89491, 89501, 89512, 89520, 89528, 89537, 89546, 89555, 89561, 89567, - 89573, 89580, 89590, 89597, 89607, 89612, 89617, 89623, 89629, 89637, - 89645, 89654, 89664, 89674, 89682, 89690, 89699, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 89708, 89719, 89726, 89734, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 89742, 89747, 89752, 89757, 89764, 89771, 89778, 89785, 89790, - 89795, 89800, 89805, 89812, 89817, 89824, 89831, 89836, 89841, 89846, - 89853, 89858, 89863, 89870, 89877, 89882, 89887, 89892, 89899, 89906, - 89913, 89918, 89923, 89930, 89937, 89944, 89951, 89956, 89961, 89966, - 89973, 89978, 89983, 89988, 89995, 90004, 90011, 90016, 90021, 90026, - 90031, 90036, 90041, 90050, 90057, 90062, 90069, 90076, 90081, 90086, - 90091, 90098, 90103, 90110, 90117, 90122, 90127, 90132, 90139, 90146, - 90151, 90156, 90163, 90170, 90177, 90182, 90187, 90192, 90197, 90204, - 90213, 90222, 90227, 90234, 90243, 90248, 90253, 90258, 90263, 90270, - 90277, 90284, 90291, 90296, 90301, 90306, 90313, 90320, 90327, 90332, - 90337, 90344, 90349, 90356, 90361, 90368, 90373, 90380, 90387, 90392, - 90397, 90402, 90407, 90412, 90417, 90422, 90427, 90432, 90439, 90446, - 90453, 90460, 90467, 90476, 90481, 90486, 90493, 90500, 90505, 90512, - 90519, 90526, 90533, 90540, 90547, 90552, 90557, 90562, 90567, 90572, - 90581, 90590, 90599, 90608, 90617, 90626, 90635, 90644, 90649, 90660, - 90671, 90680, 90685, 90690, 90695, 90700, 90709, 90716, 90723, 90730, - 90737, 90744, 90751, 90760, 90769, 90780, 90789, 90800, 90809, 90816, - 90825, 90836, 90845, 90854, 90863, 90872, 90879, 90886, 90893, 90902, - 90911, 90922, 90931, 90940, 90951, 90956, 90961, 90972, 90980, 90989, - 90998, 91007, 91018, 91027, 91036, 91047, 91058, 91069, 91080, 91091, - 91102, 91109, 91116, 91123, 91130, 91141, 91150, 91157, 91164, 91171, - 91182, 91193, 91204, 91215, 91226, 91237, 91248, 91259, 91266, 91273, - 91282, 91291, 91298, 91305, 91312, 91321, 91330, 91339, 91346, 91355, - 91364, 91373, 91380, 91387, 91392, 91398, 91405, 91412, 91419, 91426, - 91433, 91440, 91449, 91458, 91467, 91476, 91483, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 91492, 91498, 91503, 91508, 91515, 91521, 91527, 91533, 91539, - 91545, 91551, 91557, 91561, 91565, 91571, 91577, 91583, 91587, 91592, - 91597, 91601, 91605, 91608, 91614, 91620, 91626, 91632, 91638, 91644, - 91650, 91656, 91662, 91672, 91682, 91688, 91694, 91704, 91714, 91720, 0, - 0, 91726, 91734, 91739, 91744, 91750, 91756, 91762, 91768, 91774, 91780, - 91787, 91794, 91800, 91806, 91812, 91818, 91824, 91830, 91836, 91842, - 91847, 91853, 91859, 91865, 91871, 91877, 91886, 91892, 91897, 91905, - 91912, 91919, 91928, 91937, 91946, 91955, 91964, 91973, 91982, 91991, - 92001, 92011, 92019, 92027, 92036, 92045, 92051, 92057, 92063, 92069, - 92077, 92085, 92089, 92095, 92100, 92106, 92112, 92118, 92124, 92130, - 92139, 92144, 92151, 92156, 92161, 92166, 92172, 92178, 92184, 92191, - 92196, 92201, 92206, 92211, 92216, 92222, 92228, 92234, 92240, 92246, - 92252, 92258, 92264, 92269, 92274, 92279, 92284, 92289, 92294, 92299, - 92304, 92310, 92316, 92321, 92326, 92331, 92336, 92341, 92347, 92354, - 92358, 92362, 92366, 92370, 92374, 92378, 92382, 92386, 92394, 92404, - 92408, 92412, 92418, 92424, 92430, 92436, 92442, 92448, 92454, 92460, - 92466, 92472, 92478, 92484, 92490, 92496, 92500, 92504, 92511, 92517, - 92523, 92529, 92534, 92541, 92546, 92552, 92558, 92564, 92570, 92575, - 92579, 92585, 92589, 92593, 92597, 92603, 92609, 92613, 92619, 92625, - 92631, 92637, 92643, 92651, 92659, 92665, 92671, 92677, 92683, 92695, - 92707, 92721, 92733, 92745, 92759, 92773, 92787, 92791, 92799, 92807, - 92812, 92816, 92820, 92824, 92828, 92832, 92836, 92840, 92846, 92852, - 92858, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 92864, 92870, 92876, 92882, 92888, - 92894, 92900, 92906, 92912, 92918, 92924, 92930, 92936, 92942, 92948, - 92954, 92960, 92966, 92972, 92978, 92984, 92990, 92996, 93002, 93008, - 93014, 93020, 93026, 93032, 93038, 93044, 93050, 93056, 93062, 93068, - 93074, 93080, 93086, 93092, 93098, 93104, 93110, 93116, 93122, 93128, - 93134, 93140, 93146, 93152, 93158, 93164, 93170, 93176, 93182, 93188, - 93194, 93200, 93206, 93212, 93218, 93224, 93230, 93236, 93242, 93248, - 93254, 93260, 93265, 93270, 93275, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 93279, - 93284, 93291, 93298, 93305, 93312, 93317, 93321, 93327, 93331, 93335, - 93341, 93345, 93349, 93353, 93359, 93366, 93370, 93374, 93378, 93382, - 93386, 93390, 93396, 93400, 93404, 93408, 93412, 93416, 93420, 93424, - 93428, 93432, 93436, 93440, 93444, 93449, 93453, 93457, 93461, 93465, - 93469, 93473, 93477, 93481, 93485, 93492, 93496, 93503, 93507, 93511, - 93515, 93519, 93523, 93527, 93531, 93538, 93542, 93546, 93550, 93554, - 93558, 93564, 93568, 93574, 93578, 93582, 93586, 93590, 93594, 93598, - 93602, 93606, 93610, 93614, 93618, 93622, 93626, 93630, 93634, 93638, - 93642, 93646, 93650, 93658, 93662, 93666, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 93670, 93678, 93686, 93694, 93702, 93710, 93718, 93726, 93734, 93742, - 93750, 93758, 93766, 93774, 93782, 93790, 93798, 93806, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 93814, 93818, 93823, 93828, 93833, 93837, 93842, - 93846, 93850, 93854, 93859, 93864, 93868, 93872, 93876, 93880, 93885, - 93890, 93894, 93898, 93903, 93907, 93911, 93916, 93921, 93926, 93931, - 93935, 93940, 93945, 93950, 93954, 93959, 93963, 93967, 93971, 93976, - 93981, 93985, 93989, 93993, 93997, 94002, 94007, 94011, 94015, 94020, - 94024, 94028, 94033, 94038, 94043, 94048, 94052, 94057, 94062, 94067, - 94071, 94076, 94080, 94084, 94088, 94093, 94098, 94102, 94106, 94110, - 94114, 94119, 94124, 94128, 94132, 94137, 94141, 94145, 94150, 94155, - 94160, 94165, 94169, 94174, 94179, 94184, 94188, 94193, 0, 94197, 94201, - 94206, 94211, 94215, 94219, 94223, 94227, 94232, 94237, 94241, 94245, - 94250, 94254, 94258, 94263, 94268, 94273, 94278, 94283, 94289, 94295, - 94301, 94306, 94312, 94317, 94322, 94327, 94333, 94339, 94344, 94349, - 94354, 94359, 94365, 94371, 94376, 94381, 94387, 94392, 94397, 94403, - 94409, 94415, 94421, 94426, 94432, 94438, 94444, 94449, 94455, 94460, - 94465, 94470, 94476, 94482, 94487, 94492, 94497, 94502, 94508, 94514, - 94519, 94524, 94530, 94535, 94540, 94546, 94552, 94558, 94564, 0, 94568, - 94573, 0, 0, 94578, 0, 0, 94582, 94587, 0, 0, 94592, 94596, 94600, 94605, - 0, 94610, 94614, 94619, 94623, 94627, 94632, 94637, 94642, 94647, 94651, - 94656, 94661, 0, 94666, 0, 94671, 94675, 94679, 94684, 94689, 94693, - 94697, 0, 94701, 94706, 94711, 94715, 94719, 94724, 94728, 94732, 94737, - 94742, 94747, 94752, 94757, 94763, 94769, 94775, 94780, 94786, 94791, - 94796, 94801, 94807, 94813, 94818, 94823, 94828, 94833, 94839, 94845, - 94850, 94855, 94861, 94866, 94871, 94877, 94883, 94889, 94895, 94900, - 94906, 94912, 94918, 94923, 94929, 94934, 94939, 94944, 94950, 94956, - 94961, 94966, 94971, 94976, 94982, 94988, 94993, 94998, 95004, 95009, - 95014, 95020, 95026, 95032, 95038, 95042, 0, 95047, 95052, 95056, 95061, - 0, 0, 95065, 95070, 95075, 95079, 95083, 95087, 95091, 95096, 0, 95101, - 95105, 95110, 95114, 95118, 95123, 95128, 0, 95133, 95137, 95142, 95147, - 95152, 95156, 95161, 95165, 95169, 95173, 95178, 95183, 95187, 95191, - 95195, 95199, 95204, 95209, 95213, 95217, 95222, 95226, 95230, 95235, - 95240, 95245, 95250, 95254, 0, 95259, 95264, 95268, 95273, 0, 95277, - 95281, 95286, 95291, 95295, 0, 95299, 0, 0, 0, 95303, 95307, 95312, - 95316, 95320, 95325, 95330, 0, 95335, 95339, 95344, 95349, 95354, 95358, - 95363, 95367, 95371, 95375, 95380, 95385, 95389, 95393, 95397, 95401, - 95406, 95411, 95415, 95419, 95424, 95428, 95432, 95437, 95442, 95447, - 95452, 95457, 95463, 95469, 95475, 95480, 95486, 95491, 95496, 95501, - 95507, 95513, 95518, 95523, 95528, 95533, 95539, 95545, 95550, 95555, - 95561, 95566, 95571, 95577, 95583, 95589, 95595, 95600, 95606, 95612, - 95618, 95623, 95629, 95634, 95639, 95644, 95650, 95656, 95661, 95666, - 95671, 95676, 95682, 95688, 95693, 95698, 95704, 95709, 95714, 95720, - 95726, 95732, 95738, 95742, 95747, 95752, 95757, 95761, 95766, 95770, - 95774, 95778, 95783, 95788, 95792, 95796, 95800, 95804, 95809, 95814, - 95818, 95822, 95827, 95831, 95835, 95840, 95845, 95850, 95855, 95859, - 95864, 95869, 95874, 95878, 95883, 95887, 95891, 95895, 95900, 95905, - 95909, 95913, 95917, 95921, 95926, 95931, 95935, 95939, 95944, 95948, - 95952, 95957, 95962, 95967, 95972, 95977, 95983, 95989, 95995, 96000, - 96006, 96011, 96016, 96021, 96027, 96033, 96038, 96043, 96048, 96053, - 96059, 96065, 96070, 96075, 96081, 96086, 96091, 96097, 96103, 96109, - 96115, 96120, 96126, 96132, 96138, 96143, 96149, 96154, 96159, 96164, - 96170, 96176, 96181, 96186, 96191, 96196, 96202, 96208, 96213, 96218, - 96224, 96229, 96234, 96240, 96246, 96252, 96258, 96263, 96269, 96275, - 96281, 96286, 96292, 96297, 96302, 96307, 96313, 96319, 96324, 96329, - 96334, 96339, 96345, 96351, 96356, 96361, 96367, 96372, 96377, 96383, - 96389, 96395, 96401, 96406, 96412, 96418, 96424, 96429, 96435, 96440, - 96445, 96450, 96456, 96462, 96467, 96472, 96477, 96482, 96488, 96494, - 96499, 96504, 96510, 96515, 96520, 96526, 96532, 96538, 96544, 96550, - 96557, 96564, 96571, 96577, 96584, 96590, 96596, 96602, 96609, 96616, - 96622, 96628, 96634, 96640, 96647, 96654, 96660, 96666, 96673, 96679, - 96685, 96692, 96699, 96706, 96713, 96719, 96726, 96733, 96740, 96746, - 96753, 96759, 96765, 96771, 96778, 96785, 96791, 96797, 96803, 96809, - 96816, 96823, 96829, 96835, 96842, 96848, 96854, 96861, 96868, 96875, - 96882, 96886, 96891, 96896, 96901, 96905, 96910, 96914, 96918, 96922, - 96927, 96932, 96936, 96940, 96944, 96948, 96953, 96958, 96962, 96966, - 96971, 96975, 96979, 96984, 96989, 96994, 96999, 97003, 97008, 97013, - 97018, 97022, 97027, 97031, 97035, 97039, 97044, 97049, 97053, 97057, - 97061, 97065, 97070, 97075, 97079, 97083, 97088, 97092, 97096, 97101, - 97106, 97111, 97116, 97122, 0, 0, 97129, 97134, 97139, 97144, 97149, - 97154, 97159, 97164, 97169, 97174, 97179, 97184, 97189, 97194, 97199, - 97204, 97209, 97214, 97220, 97225, 97230, 97235, 97240, 97245, 97250, - 97255, 97259, 97264, 97269, 97274, 97279, 97284, 97289, 97294, 97299, - 97304, 97309, 97314, 97319, 97324, 97329, 97334, 97339, 97344, 97350, - 97355, 97360, 97365, 97370, 97375, 97380, 97385, 97391, 97396, 97401, - 97406, 97411, 97416, 97421, 97426, 97431, 97436, 97441, 97446, 97451, - 97456, 97461, 97466, 97471, 97476, 97481, 97486, 97491, 97496, 97501, - 97506, 97512, 97517, 97522, 97527, 97532, 97537, 97542, 97547, 97551, - 97556, 97561, 97566, 97571, 97576, 97581, 97586, 97591, 97596, 97601, - 97606, 97611, 97616, 97621, 97626, 97631, 97636, 97642, 97647, 97652, - 97657, 97662, 97667, 97672, 97677, 97683, 97688, 97693, 97698, 97703, - 97708, 97713, 97719, 97725, 97731, 97737, 97743, 97749, 97755, 97761, - 97767, 97773, 97779, 97785, 97791, 97797, 97803, 97809, 97815, 97822, - 97828, 97834, 97840, 97846, 97852, 97858, 97864, 97869, 97875, 97881, - 97887, 97893, 97899, 97905, 97911, 97917, 97923, 97929, 97935, 97941, - 97947, 97953, 97959, 97965, 97971, 97978, 97984, 97990, 97996, 98002, - 98008, 98014, 98020, 98027, 98033, 98039, 98045, 98051, 98057, 98063, - 98069, 98075, 98081, 98087, 98093, 98099, 98105, 98111, 98117, 98123, - 98129, 98135, 98141, 98147, 98153, 98159, 98165, 98172, 98178, 98184, - 98190, 98196, 98202, 98208, 98214, 98219, 98225, 98231, 98237, 98243, - 98249, 98255, 98261, 98267, 98273, 98279, 98285, 98291, 98297, 98303, - 98309, 98315, 98321, 98328, 98334, 98340, 98346, 98352, 98358, 98364, - 98370, 98377, 98383, 98389, 98395, 98401, 98407, 98413, 98420, 98427, - 98434, 98441, 98448, 98455, 98462, 98469, 98476, 98483, 98490, 98497, - 98504, 98511, 98518, 98525, 98532, 98540, 98547, 98554, 98561, 98568, - 98575, 98582, 98589, 98595, 98602, 98609, 98616, 98623, 98630, 98637, - 98644, 98651, 98658, 98665, 98672, 98679, 98686, 98693, 98700, 98707, - 98714, 98722, 98729, 98736, 98743, 98750, 98757, 98764, 98771, 98779, - 98786, 98793, 98800, 98807, 98814, 98821, 98826, 0, 0, 98831, 98836, - 98840, 98844, 98848, 98852, 98856, 98860, 98864, 98868, 98872, 98877, - 98881, 98885, 98889, 98893, 98897, 98901, 98905, 98909, 98913, 98918, - 98922, 98926, 98930, 98934, 98938, 98942, 98946, 98950, 98954, 98960, - 98965, 98970, 98975, 98980, 98985, 98990, 98995, 99000, 99005, 99010, - 99014, 99018, 99022, 99026, 99030, 99034, 99038, 99042, 99046, 99053, - 99060, 99067, 99074, 99081, 99088, 99094, 99101, 99108, 99115, 99123, - 99131, 99139, 99147, 99155, 99163, 99170, 99177, 99184, 99192, 99200, - 99208, 99216, 99224, 99232, 99239, 99246, 99253, 99261, 99269, 99277, - 99285, 99293, 99301, 99306, 99311, 99316, 99321, 99326, 99331, 99336, - 99341, 99346, 0, 0, 0, 0, 99351, 99356, 99360, 99364, 99368, 99372, - 99376, 99380, 99384, 99388, 99392, 99396, 99400, 99404, 99408, 99412, - 99416, 99420, 99424, 99428, 99432, 99436, 99440, 99444, 99448, 99452, - 99456, 99460, 99464, 99468, 99472, 99476, 99480, 99484, 99488, 99492, - 99496, 99500, 99504, 99508, 99512, 99516, 99520, 99524, 99528, 99532, - 99536, 99540, 99544, 99548, 99552, 99557, 99561, 99565, 99569, 99573, - 99577, 99581, 99585, 99589, 99593, 99597, 99601, 99605, 99609, 99613, - 99617, 99621, 99625, 99629, 99633, 99637, 99641, 99645, 99649, 99653, - 99657, 99661, 99665, 99669, 99673, 99677, 99681, 99685, 99689, 99693, - 99697, 99701, 99705, 99709, 99713, 99717, 99721, 99725, 99729, 99733, - 99737, 99741, 99745, 99749, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 99753, - 99757, 99761, 99765, 99769, 99773, 99777, 99781, 99785, 99789, 99793, - 99797, 99801, 99805, 99809, 99813, 99817, 99821, 99825, 99829, 99833, - 99837, 99841, 99845, 99849, 99853, 99857, 99861, 99865, 99869, 99873, - 99877, 99881, 99885, 99889, 99893, 99897, 99901, 99905, 99909, 99913, - 99917, 99921, 99925, 99929, 99933, 99937, 99941, 99945, 99949, 99953, - 99957, 99961, 99965, 99969, 99973, 99977, 99981, 99985, 99989, 99993, - 99997, 100001, 100005, 100009, 100013, 100017, 100021, 100025, 100029, - 100033, 100037, 100041, 100045, 100049, 100053, 100057, 100061, 100065, - 100069, 100073, 100077, 100081, 100085, 100089, 100093, 100097, 100101, - 100105, 100109, 100113, 100117, 100121, 100125, 100129, 100133, 100137, - 100141, 100145, 100149, 100153, 100157, 100161, 100165, 100169, 100173, - 100177, 100181, 100185, 100189, 100193, 100197, 100201, 100205, 100209, - 100213, 100217, 100221, 100225, 100229, 100233, 100237, 100241, 100245, - 100249, 100253, 100257, 100261, 100265, 100269, 100273, 100277, 100281, - 100285, 100289, 100293, 100297, 100301, 100305, 100309, 100313, 100317, - 100321, 100325, 100329, 100333, 100337, 100341, 100345, 100349, 100353, - 100357, 100361, 100365, 100369, 100373, 100377, 100381, 100385, 100389, - 100393, 100397, 100401, 100405, 100409, 100413, 100417, 100421, 100425, - 100429, 100433, 100437, 100441, 100445, 100449, 100453, 100457, 100461, - 100465, 100469, 100473, 100477, 100481, 100485, 100489, 100493, 100497, - 100501, 100505, 100509, 100513, 100517, 100521, 100525, 100529, 100533, - 100537, 100541, 100545, 100549, 100553, 100557, 100561, 100565, 100569, - 100573, 100577, 100581, 100585, 100589, 100593, 100597, 100601, 100605, - 100609, 100613, 100617, 100621, 100625, 100629, 100633, 100637, 100641, - 100645, 100649, 100653, 100657, 100661, 100665, 100669, 100673, 100677, - 100681, 100685, 100689, 100693, 100697, 100701, 100705, 100709, 100713, - 100717, 100721, 100725, 100729, 100733, 100737, 100741, 100745, 100749, - 100753, 100757, 100761, 100765, 100769, 100773, 100777, 100781, 100785, - 100789, 100793, 100797, 100801, 100805, 100809, 100813, 100817, 100821, - 100825, 100829, 100833, 100837, 100841, 100845, 100849, 100853, 100857, - 100861, 100865, 100869, 100873, 100877, 100881, 100885, 100889, 100893, - 100897, 100901, 100905, 100909, 100913, 100917, 100921, 100925, 100929, - 100933, 100937, 100941, 100945, 100949, 100953, 100957, 100961, 100965, - 100969, 100973, 100977, 100981, 100985, 100989, 100993, 100997, 101001, - 101005, 101009, 101013, 101017, 101021, 101025, 101029, 101033, 101037, - 101041, 101045, 101049, 101053, 101057, 101061, 101065, 101069, 101073, - 101077, 101081, 101085, 101089, 101093, 101097, 101101, 101105, 101109, - 101113, 101117, 101121, 101125, 101129, 101133, 101137, 101141, 101145, - 101149, 101153, 101157, 101161, 101165, 101169, 101173, 101177, 101181, - 101185, 101189, 101193, 101197, 101201, 101205, 101209, 101213, 101217, - 101221, 101225, 101229, 101233, 101237, 101241, 101245, 101249, 101253, - 101257, 101261, 101265, 101269, 101273, 101277, 101281, 101285, 101289, - 101293, 101297, 101301, 101305, 101309, 101313, 101317, 101321, 101325, - 101329, 101333, 101337, 101341, 101345, 101349, 101353, 101357, 101361, - 101365, 101369, 101373, 101377, 101381, 101385, 101389, 101393, 101397, - 101401, 101405, 101409, 101413, 101417, 101421, 101425, 101429, 101433, - 101437, 101441, 101445, 101449, 101453, 101457, 101461, 101465, 101469, - 101473, 101477, 101481, 101485, 101489, 101493, 101497, 101501, 101505, - 101509, 101513, 101517, 101521, 101525, 101529, 101533, 101537, 101541, - 101545, 101549, 101553, 101557, 101561, 101565, 101569, 101573, 101577, - 101581, 101585, 101589, 101593, 101597, 101601, 101605, 101609, 101613, - 101617, 101621, 101625, 101629, 101633, 101637, 101641, 101645, 101649, - 101653, 101657, 101661, 101665, 101669, 101673, 101677, 101681, 101685, - 101689, 101693, 101697, 101701, 101705, 101709, 101713, 101717, 101721, - 101725, 101729, 101733, 101737, 101741, 101745, 101749, 101753, 101757, - 101761, 101765, 101769, 101773, 101777, 101781, 101785, 101789, 101793, - 101797, 101801, 101805, 101809, 101813, 101817, 101821, 101825, 101829, - 101833, 101837, 101841, 101845, 101849, 101853, 101857, 101861, 101865, - 101869, 101873, 101877, 101881, 101885, 101889, 101893, 101897, 101901, - 101905, 101909, 101913, 101917, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 101921, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 101925, - 101928, 101932, 101936, 101939, 101943, 101947, 101950, 101953, 101957, - 101961, 101964, 101967, 101970, 101973, 101978, 101981, 101985, 101988, - 101991, 101994, 101997, 102000, 102003, 102006, 102009, 102012, 102015, - 102018, 102022, 102026, 102030, 102034, 102039, 102044, 102050, 102056, - 102062, 102067, 102073, 102078, 102083, 102088, 102094, 102100, 102105, - 102110, 102115, 102120, 102126, 102132, 102137, 102142, 102148, 102153, - 102158, 102164, 102170, 102176, 102182, 102186, 102191, 102195, 102200, - 102204, 102209, 102214, 102220, 102226, 102232, 102237, 102243, 102248, - 102253, 102258, 102264, 102270, 102275, 102280, 102285, 102290, 102296, - 102302, 102307, 102312, 102318, 102323, 102328, 102334, 102340, 102346, - 102352, 102357, 102361, 102366, 102368, 102372, 102375, 102378, 102381, - 102384, 102387, 102390, 102393, 102396, 102399, 102402, 102405, 102408, - 102411, 102414, 102417, 102420, 102423, 102426, 102429, 102432, 102435, - 102438, 102441, 102444, 102447, 102450, 102453, 102456, 102459, 102462, - 102465, 102468, 102471, 102474, 102477, 102480, 102483, 102486, 102489, - 102492, 102495, 102498, 102501, 102504, 102507, 102510, 102513, 102516, - 102519, 102522, 102525, 102528, 102531, 102534, 102537, 102540, 102543, - 102546, 102549, 102552, 102555, 102558, 102561, 102564, 102567, 102570, - 102573, 102576, 102579, 102582, 102585, 102588, 102591, 102594, 102597, - 102600, 102603, 102606, 102609, 102612, 102615, 102618, 102621, 102624, - 102627, 102630, 102633, 102636, 102639, 102642, 102645, 102648, 102651, - 102654, 102657, 102660, 102663, 102666, 102669, 102672, 102675, 102678, - 102681, 102684, 102687, 102690, 102693, 102696, 102699, 102702, 102705, - 102708, 102711, 102714, 102717, 102720, 102723, 102726, 102729, 102732, - 102735, 102738, 102741, 102744, 102747, 102750, 102753, 102756, 102759, - 102762, 102765, 102768, 102771, 102774, 102777, 102780, 102783, 102786, - 102789, 102792, 102795, 102798, 102801, 102804, 102807, 102810, 102813, - 102816, 102819, 102822, 102825, 102828, 102831, 102834, 102837, 102840, - 102843, 102846, 102849, 102852, 102855, 102858, 102861, 102864, 102867, - 102870, 102873, 102876, 102879, 102882, 102885, 102888, 102891, 102894, - 102897, 102900, 102903, 102906, 102909, 102912, 102915, 102918, 102921, - 102924, 102927, 102930, 102933, 102936, 102939, 102942, 102945, 102948, - 102951, 102954, 102957, 102960, 102963, 102966, 102969, 102972, 102975, - 102978, 102981, 102984, 102987, 102990, 102993, 102996, 102999, 103002, - 103005, 103008, 103011, 103014, 103017, 103020, 103023, 103026, 103029, - 103032, 103035, 103038, 103041, 103044, 103047, 103050, 103053, 103056, - 103059, 103062, 103065, 103068, 103071, 103074, 103077, 103080, 103083, - 103086, 103089, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 64667, 64671, 64675, 64679, 64683, 64687, 64691, 64695, 64699, 64703, + 64707, 64711, 64715, 64719, 64723, 64727, 64731, 64735, 64739, 64743, + 64747, 64751, 64755, 64759, 64763, 64767, 64771, 64775, 64779, 64783, + 64787, 64791, 64795, 64799, 64803, 64807, 64811, 64815, 64819, 64823, + 64827, 64831, 64835, 64839, 64843, 64847, 64851, 64855, 64859, 64863, + 64867, 64871, 64875, 64879, 64883, 64887, 64891, 64895, 64899, 64903, + 64907, 64911, 64915, 64919, 64923, 64927, 64931, 64935, 64939, 64943, + 64947, 64950, 64954, 64958, 64962, 64966, 64970, 64974, 64978, 64982, + 64986, 64990, 64994, 64998, 65002, 65006, 65010, 65014, 65018, 65022, + 65026, 65030, 65034, 65038, 65042, 65046, 65050, 65054, 65058, 65062, + 65066, 65070, 65074, 65078, 65082, 65086, 65090, 65094, 65098, 65102, + 65106, 65110, 65114, 65118, 65122, 65126, 65130, 65134, 65138, 65142, + 65146, 65150, 65154, 65158, 65162, 65166, 65170, 65174, 65178, 65182, + 65186, 65190, 65194, 65198, 65202, 65206, 65210, 65214, 65218, 65222, + 65226, 65230, 65234, 65238, 65242, 65246, 65250, 65254, 65258, 65262, + 65266, 65270, 65274, 65278, 65282, 65286, 65290, 65294, 65298, 65302, + 65306, 65310, 65314, 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, 65678, 65682, 65686, 65690, 65694, 65698, 65702, + 65706, 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, 66173, 66177, 66181, + 66185, 66189, 66193, 66197, 66201, 66205, 66209, 66213, 66217, 66221, + 66225, 66229, 66233, 66237, 66241, 66245, 66249, 66253, 66257, 66261, + 66265, 66269, 66273, 66277, 66281, 66285, 66289, 66293, 66297, 66301, + 66305, 66309, 66313, 66317, 66321, 66325, 66329, 66333, 66337, 66341, + 66345, 66349, 66353, 66357, 66361, 66365, 66369, 66373, 66377, 66381, + 66385, 66389, 66393, 66397, 66401, 66405, 66409, 66413, 66417, 66421, + 66425, 66429, 66433, 66437, 66441, 66445, 66449, 66453, 66457, 66461, + 66465, 66469, 66473, 66477, 66481, 66485, 66489, 0, 0, 0, 66493, 66497, + 66501, 66505, 66509, 66513, 66517, 66521, 66525, 66529, 66533, 66537, + 66541, 66545, 66549, 66553, 66557, 66561, 66565, 66569, 66573, 66577, + 66581, 66585, 66589, 66593, 66597, 66601, 66605, 66609, 66613, 66617, + 66621, 66625, 66629, 66633, 66637, 66641, 66645, 66649, 66653, 66657, + 66661, 66665, 66669, 66673, 66677, 66681, 66685, 66689, 66693, 66697, + 66701, 66705, 66709, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66713, 66718, 66722, + 66727, 66732, 66737, 66742, 66747, 66751, 66756, 66761, 66766, 66771, + 66776, 66781, 66786, 66790, 66794, 66799, 66804, 66809, 66814, 66819, + 66823, 66828, 66833, 66838, 66843, 66848, 66852, 66857, 66861, 66866, + 66870, 66875, 66879, 66883, 66887, 66892, 66897, 66902, 66910, 66918, + 66926, 66934, 66941, 66949, 66955, 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, 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, 67238, 67242, 67246, 67250, 67254, 67257, + 67261, 67265, 67268, 67272, 67276, 67280, 67283, 67287, 67291, 67295, + 67299, 67303, 67307, 67311, 67315, 67319, 67323, 67327, 67331, 67335, + 67339, 67342, 67346, 67350, 67354, 67358, 67362, 67366, 67370, 67374, + 67378, 67381, 67384, 67388, 67392, 67396, 67399, 67402, 67406, 67410, + 67414, 67418, 67422, 67426, 67430, 67434, 67438, 67442, 67446, 67450, + 67454, 67458, 67462, 67466, 67470, 67474, 67478, 67482, 67486, 67490, + 67494, 67498, 67502, 67506, 67510, 67514, 67518, 67522, 67526, 67530, + 67534, 67538, 67542, 67546, 67550, 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, 67767, + 67771, 67775, 67779, 67783, 67787, 67791, 67795, 67799, 67803, 67807, + 67811, 67815, 67819, 67823, 67827, 67831, 67835, 67839, 67843, 67847, + 67851, 67854, 67858, 67862, 67866, 67870, 67874, 67878, 67882, 67886, + 67890, 67894, 67898, 67902, 67906, 67910, 67914, 67918, 67922, 67926, + 67930, 67934, 67938, 67942, 67946, 67950, 67954, 67958, 67962, 67966, + 67970, 67974, 67978, 67982, 67986, 67990, 67994, 67998, 68002, 68006, + 68010, 68014, 68018, 68022, 68026, 68029, 68034, 68038, 68044, 68049, + 68055, 68059, 68063, 68067, 68071, 68075, 68079, 68083, 68087, 68091, + 68095, 68099, 68103, 68107, 68111, 68114, 68117, 68120, 68123, 68126, + 68129, 68132, 68135, 68138, 68143, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 68149, 68154, 68159, 68164, 68169, 68175, 68181, + 68186, 68191, 68196, 68201, 68208, 68215, 68222, 68229, 68236, 68243, + 68253, 68263, 68270, 68277, 68283, 68289, 68295, 68301, 68310, 68319, + 68326, 68333, 68344, 68355, 68360, 0, 0, 68365, 68372, 68379, 68386, + 68393, 68400, 68407, 68413, 68419, 68425, 68431, 68438, 68445, 68450, + 68454, 68461, 68468, 68475, 0, 0, 0, 0, 0, 0, 0, 0, 68479, 68483, 68487, + 68490, 68493, 68498, 68503, 68508, 68513, 68518, 68523, 68528, 68533, + 68538, 68543, 68552, 68561, 68566, 68571, 68576, 68581, 68586, 68591, + 68596, 68601, 68606, 68611, 68616, 0, 0, 0, 0, 0, 0, 0, 0, 68621, 68624, + 68627, 68630, 68634, 68638, 68642, 68646, 68649, 68653, 68656, 68660, + 68663, 68667, 68671, 68675, 68679, 68683, 68687, 68691, 68694, 68698, + 68702, 68706, 68710, 68714, 68718, 68722, 68726, 68730, 68734, 68738, + 68742, 68746, 68750, 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, 68852, 68856, + 68860, 68864, 68868, 68872, 68876, 68880, 68883, 68887, 68891, 68895, + 68899, 68903, 68907, 68911, 68915, 68919, 68923, 68927, 68931, 68936, + 68941, 68944, 68949, 68952, 68955, 68958, 0, 0, 0, 0, 0, 0, 0, 0, 68962, + 68971, 68980, 68989, 68998, 69007, 69016, 69025, 69034, 69042, 69049, + 69057, 69064, 69072, 69082, 69091, 69101, 69110, 69120, 69128, 69135, + 69143, 69150, 69158, 69163, 69168, 69173, 69182, 69188, 69194, 69201, + 69210, 69218, 69226, 69234, 69241, 69248, 69255, 69262, 69267, 69272, + 69277, 69282, 69287, 69292, 69297, 69302, 69310, 69318, 69324, 69329, + 69334, 69339, 69344, 69349, 69354, 69359, 69364, 69369, 69377, 69385, + 69390, 69395, 69404, 69413, 69420, 69427, 69436, 69445, 69456, 69467, + 69473, 69479, 69487, 69495, 69504, 69513, 69520, 69527, 69532, 69537, + 69548, 69559, 69567, 69575, 69585, 69595, 69606, 69617, 69626, 69635, + 69642, 69649, 69656, 69663, 69672, 69681, 69686, 69691, 69698, 69705, + 69712, 69719, 69730, 69741, 69746, 69751, 69756, 69761, 69766, 69771, + 69776, 69781, 69785, 69790, 69795, 69800, 69805, 69810, 69816, 69821, + 69826, 69833, 69840, 69847, 69854, 69861, 69869, 69877, 69882, 69887, + 69893, 69899, 69905, 69911, 69918, 69925, 69932, 69936, 69943, 69948, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 69953, 69960, 69967, 69974, 69982, + 69989, 69995, 70001, 70008, 70014, 70020, 70026, 70033, 70040, 70047, + 70054, 70061, 70068, 70075, 70082, 70089, 70096, 70103, 70110, 70117, + 70124, 70130, 70137, 70144, 70151, 70158, 70165, 70172, 70179, 70186, + 70193, 70200, 70207, 70214, 70221, 70228, 70235, 70242, 70249, 70256, + 70264, 70272, 70280, 70288, 0, 0, 0, 0, 70296, 70305, 70314, 70323, + 70332, 70341, 70350, 70357, 70364, 70371, 0, 0, 0, 0, 0, 0, 70378, 70382, + 70387, 70392, 70397, 70402, 70407, 70412, 70417, 70422, 70427, 70432, + 70436, 70440, 70445, 70450, 70454, 70459, 70464, 70469, 70474, 70479, + 70484, 70489, 70493, 70497, 70502, 70507, 70512, 70516, 70520, 70524, + 70528, 70532, 70536, 70541, 70546, 70551, 70556, 70561, 70568, 70574, + 70579, 70584, 70589, 70594, 70600, 70607, 70613, 70620, 70626, 70632, + 70637, 70644, 70650, 70655, 0, 0, 0, 0, 0, 0, 0, 0, 70661, 70665, 70669, + 70672, 70676, 70679, 70683, 70686, 70690, 70694, 70699, 70703, 70708, + 70711, 70715, 70719, 70722, 70726, 70730, 70733, 70737, 70741, 70745, + 70749, 70753, 70757, 70761, 70765, 70769, 70773, 70777, 70781, 70785, + 70789, 70793, 70797, 70801, 70805, 70808, 70811, 70815, 70819, 70823, + 70826, 70829, 70832, 70836, 70840, 70844, 70848, 70852, 70855, 70859, + 70865, 70870, 70874, 70879, 70883, 70888, 70893, 70899, 70904, 70910, + 70914, 70919, 70924, 70928, 70933, 70938, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 70942, 70945, 70949, 70953, 70956, 70959, 70962, 70965, 70968, 70971, + 70974, 70977, 0, 0, 0, 0, 0, 0, 70980, 70985, 70989, 70993, 70997, 71001, + 71005, 71009, 71013, 71017, 71021, 71025, 71029, 71033, 71037, 71041, + 71045, 71050, 71055, 71061, 71067, 71074, 71079, 71084, 71090, 71094, + 71099, 71102, 0, 0, 0, 0, 71105, 71112, 71118, 71124, 71130, 71136, + 71142, 71148, 71154, 71160, 71166, 71172, 71179, 71186, 71193, 71200, + 71207, 71214, 71221, 71228, 71235, 71241, 71247, 71254, 71260, 71267, + 71274, 71280, 71286, 71293, 71300, 71307, 71313, 71320, 71327, 71333, + 71340, 71346, 71353, 71360, 71366, 71372, 71379, 71385, 71392, 71399, + 71408, 71415, 71422, 71426, 71431, 71436, 71441, 71446, 71450, 71454, + 71459, 71463, 71468, 71473, 71478, 71483, 71487, 71492, 71496, 71501, + 71505, 71510, 71515, 71520, 71525, 71529, 71534, 71539, 71544, 71550, + 71555, 71561, 71567, 71573, 71580, 71586, 71592, 71599, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 71603, 71608, 71612, 71616, 71620, 71624, 71628, 71632, + 71636, 71640, 71644, 71648, 71652, 71656, 71660, 71664, 71668, 71672, + 71676, 71680, 71684, 71688, 71692, 71696, 71700, 71704, 71708, 71712, + 71716, 71720, 0, 0, 0, 71724, 71728, 71732, 71736, 71740, 71743, 71749, + 71752, 71756, 71759, 71765, 71771, 71779, 71782, 71786, 71789, 71792, + 71797, 71802, 71806, 71812, 71816, 71820, 71826, 71830, 71836, 71842, + 71846, 71850, 71856, 71860, 71866, 71872, 71876, 71882, 71886, 71892, + 71895, 71898, 71904, 71908, 71914, 71917, 71920, 71923, 71929, 71933, + 71937, 71943, 71949, 71953, 71956, 71962, 71967, 71972, 71977, 71984, + 71989, 71996, 72001, 72008, 72013, 72019, 72025, 72031, 72034, 72038, + 72042, 72047, 72052, 72057, 72062, 72067, 72072, 72077, 72082, 72089, + 72094, 0, 72100, 72103, 72107, 72110, 72113, 72116, 72119, 72122, 72125, + 72128, 72131, 0, 0, 0, 0, 72134, 72141, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 72146, + 72149, 72152, 72155, 72158, 72162, 72165, 72168, 72172, 72176, 72180, + 72184, 72188, 72192, 72196, 72200, 72204, 72208, 72212, 72216, 72220, + 72224, 72228, 72232, 72236, 72239, 72243, 72246, 72250, 72254, 72258, + 72262, 72266, 72269, 72273, 72276, 72279, 72283, 72287, 72291, 72295, + 72298, 72303, 72307, 72312, 72317, 72321, 72326, 72330, 72335, 72340, + 72345, 72350, 72355, 72361, 0, 0, 0, 0, 0, 0, 0, 0, 0, 72367, 72372, + 72377, 72382, 72389, 72394, 72399, 72403, 72408, 72413, 72417, 72421, + 72426, 72432, 0, 0, 72439, 72443, 72446, 72449, 72452, 72455, 72458, + 72461, 72464, 72467, 0, 0, 72470, 72475, 72480, 72486, 72493, 72499, + 72505, 72511, 72517, 72523, 72529, 72535, 72541, 72547, 72553, 72559, + 72564, 72570, 72575, 72581, 72587, 72594, 72600, 72606, 72611, 72618, + 72625, 72632, 72638, 72643, 72648, 72653, 0, 0, 0, 0, 72661, 72667, + 72673, 72679, 72685, 72691, 72697, 72703, 72709, 72715, 72721, 72727, + 72733, 72739, 72745, 72751, 72757, 72763, 72769, 72775, 72781, 72786, + 72791, 72797, 72803, 72809, 72815, 72821, 72827, 72833, 72839, 72845, + 72851, 72857, 72863, 72869, 72875, 72881, 72887, 72893, 72899, 72905, + 72911, 72917, 72923, 72929, 72935, 72940, 72945, 72951, 72956, 72960, + 72965, 72969, 72973, 72977, 72983, 72988, 72993, 72998, 73003, 73008, + 73013, 73018, 73025, 73032, 73039, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 73046, 73051, 73056, 73061, 73068, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 73075, + 73082, 73089, 73096, 73103, 73109, 73115, 73122, 73129, 73136, 73143, + 73150, 73157, 73164, 73171, 73178, 73184, 73191, 73198, 73205, 73212, + 73219, 73226, 73233, 73240, 73247, 73254, 73261, 73270, 73279, 73288, + 73297, 73306, 73315, 73324, 73333, 73341, 73349, 73357, 73365, 73373, + 73381, 73389, 73397, 73403, 73411, 0, 0, 73419, 73426, 73432, 73438, + 73444, 73450, 73456, 73462, 73468, 73474, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 73480, 73484, + 73488, 73492, 73496, 73500, 73504, 73508, 73512, 73516, 73520, 73524, + 73528, 73532, 73536, 73540, 73544, 73548, 73552, 73556, 73560, 73564, + 73568, 0, 0, 0, 0, 73572, 73576, 73580, 73584, 73588, 73592, 73596, + 73600, 73604, 73608, 73612, 73616, 73620, 73624, 73628, 73632, 73636, + 73640, 73644, 73648, 73652, 73656, 73660, 73664, 73668, 73672, 73676, + 73680, 73684, 73688, 73692, 73696, 73700, 73704, 73708, 73712, 73716, + 73720, 73724, 73728, 73732, 73736, 73740, 73744, 73748, 73752, 73756, + 73760, 73764, 0, 0, 0, 0, 73768, 73772, 73776, 73780, 73784, 73788, + 73792, 73796, 73800, 73804, 73808, 73812, 73816, 73820, 73824, 73828, + 73832, 73836, 73840, 73844, 73848, 73852, 73856, 73860, 73864, 73868, + 73872, 73876, 73880, 73884, 73888, 73892, 73896, 73900, 73904, 73908, + 73912, 73916, 73920, 73924, 73928, 73932, 73936, 73940, 73944, 73948, + 73952, 73956, 73960, 73964, 73968, 73972, 73976, 73980, 73984, 73988, + 73992, 73996, 74000, 74004, 74008, 74012, 74016, 74020, 74024, 74028, + 74032, 74036, 74040, 74044, 74048, 74052, 74056, 74060, 74064, 74068, + 74072, 74076, 74080, 74084, 74088, 74092, 74096, 74100, 74104, 74108, + 74112, 74116, 74120, 74124, 74128, 74132, 74136, 74140, 74144, 74148, + 74152, 74156, 74160, 74164, 74168, 74172, 74176, 74180, 74184, 74188, + 74192, 74196, 74200, 74204, 74208, 74212, 74216, 74220, 74224, 74228, + 74232, 74236, 74240, 74244, 74248, 74252, 74256, 74260, 74264, 74268, + 74272, 74276, 74280, 74284, 74288, 74292, 74296, 74300, 74304, 74308, + 74312, 74316, 74320, 74324, 74328, 74332, 74336, 74340, 74344, 74348, + 74352, 74356, 74360, 74364, 74368, 74372, 74376, 74380, 74384, 74388, + 74392, 74396, 74400, 74404, 74408, 74412, 74416, 74420, 74424, 74428, + 74432, 74436, 74440, 74444, 74448, 74452, 74456, 74460, 74464, 74468, + 74472, 74476, 74480, 74484, 74488, 74492, 74496, 74500, 74504, 74508, + 74512, 74516, 74520, 74524, 74528, 74532, 74536, 74540, 74544, 74548, + 74552, 74556, 74560, 74564, 74568, 74572, 74576, 74580, 74584, 74588, + 74592, 74596, 74600, 74604, 74608, 74612, 74616, 74620, 74624, 74628, + 74632, 74636, 74640, 74644, 74648, 74652, 74656, 74660, 74664, 74668, + 74672, 74676, 74680, 74684, 74688, 74692, 74696, 74700, 74704, 74708, + 74712, 74716, 74720, 74724, 74728, 74732, 74736, 74740, 74744, 74748, + 74752, 74756, 74760, 74764, 74768, 74772, 74776, 74780, 74784, 74788, + 74792, 74796, 74800, 74804, 74808, 74812, 74816, 74820, 74824, 74828, + 74832, 74836, 74840, 74844, 74848, 74852, 74856, 74860, 74864, 74868, + 74872, 74876, 74880, 74884, 74888, 74892, 74896, 74900, 74904, 74908, + 74912, 74916, 74920, 74924, 74928, 74932, 74936, 74940, 74944, 74948, + 74952, 74956, 74960, 74964, 74968, 74972, 0, 0, 74976, 74980, 74984, + 74988, 74992, 74996, 75000, 75004, 75008, 75012, 75016, 75020, 75024, + 75028, 75032, 75036, 75040, 75044, 75048, 75052, 75056, 75060, 75064, + 75068, 75072, 75076, 75080, 75084, 75088, 75092, 75096, 75100, 75104, + 75108, 75112, 75116, 75120, 75124, 75128, 75132, 75136, 75140, 75144, + 75148, 75152, 75156, 75160, 75164, 75168, 75172, 75176, 75180, 75184, + 75188, 75192, 75196, 75200, 75204, 75208, 75212, 75216, 75220, 0, 0, + 75224, 75228, 75232, 75236, 75240, 75244, 75248, 75252, 75256, 75260, + 75264, 75268, 75272, 75276, 75280, 75284, 75288, 75292, 75296, 75300, + 75304, 75308, 75312, 75316, 75320, 75324, 75328, 75332, 75336, 75340, + 75344, 75348, 75352, 75356, 75360, 75364, 75368, 75372, 75376, 75380, + 75384, 75388, 75392, 75396, 75400, 75404, 75408, 75412, 75416, 75420, + 75424, 75428, 75432, 75436, 75440, 75444, 75448, 75452, 75456, 75460, + 75464, 75468, 75472, 75476, 75480, 75484, 75488, 75492, 75496, 75500, + 75504, 75508, 75512, 75516, 75520, 75524, 75528, 75532, 75536, 75540, + 75544, 75548, 75552, 75556, 75560, 75564, 75568, 75572, 75576, 75580, + 75584, 75588, 75592, 75596, 75600, 75604, 75608, 75612, 75616, 75620, + 75624, 75628, 75632, 75636, 75640, 75644, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 75648, 75653, 75658, 75663, 75668, 75673, 75681, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 75686, 75693, 75700, 75707, 75714, 0, 0, 0, 0, 0, + 75721, 75728, 75735, 75745, 75751, 75757, 75763, 75769, 75775, 75781, + 75788, 75794, 75800, 75806, 75815, 75824, 75836, 75848, 75854, 75860, + 75866, 75873, 75880, 75887, 75894, 75901, 0, 75908, 75915, 75922, 75930, + 75937, 0, 75944, 0, 75951, 75958, 0, 75965, 75973, 0, 75980, 75987, + 75994, 76001, 76008, 76015, 76022, 76029, 76036, 76043, 76048, 76055, + 76062, 76068, 76074, 76080, 76086, 76092, 76098, 76104, 76110, 76116, + 76122, 76128, 76134, 76140, 76146, 76152, 76158, 76164, 76170, 76176, + 76182, 76188, 76194, 76200, 76206, 76212, 76218, 76224, 76230, 76236, + 76242, 76248, 76254, 76260, 76266, 76272, 76278, 76284, 76290, 76296, + 76302, 76308, 76314, 76320, 76326, 76332, 76338, 76344, 76350, 76356, + 76362, 76368, 76374, 76380, 76386, 76392, 76398, 76404, 76410, 76416, + 76422, 76428, 76434, 76440, 76446, 76452, 76458, 76464, 76470, 76476, + 76482, 76488, 76494, 76500, 76506, 76512, 76518, 76526, 76534, 76540, + 76546, 76552, 76558, 76567, 76576, 76584, 76592, 76600, 76608, 76616, + 76624, 76632, 76640, 76647, 76654, 76664, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 76674, 76680, 76686, 76692, 76698, 76703, 76708, 76714, 76720, 76726, + 76732, 76740, 76746, 76752, 76760, 76768, 76776, 76784, 76789, 76794, + 76799, 76804, 76816, 76828, 76838, 76848, 76859, 76870, 76881, 76892, + 76902, 76912, 76923, 76934, 76945, 76956, 76966, 76976, 76986, 77001, + 77016, 77031, 77038, 77045, 77052, 77059, 77069, 77079, 77089, 77100, + 77110, 77118, 77126, 77135, 77143, 77152, 77160, 77168, 77176, 77185, + 77193, 77202, 77210, 77218, 77226, 77235, 77243, 77250, 77257, 77264, + 77271, 77279, 77287, 77295, 77303, 77311, 77320, 77328, 77336, 77344, + 77352, 77360, 77369, 77377, 77385, 77393, 77401, 77409, 77417, 77425, + 77433, 77441, 77449, 77458, 77466, 77475, 77483, 77491, 77499, 77508, + 77516, 77524, 77532, 77540, 77549, 77558, 77566, 77575, 77583, 77591, + 77599, 77608, 77616, 77625, 77633, 77640, 77647, 77655, 77662, 77670, + 77677, 77685, 77693, 77702, 77710, 77719, 77727, 77735, 77743, 77752, + 77760, 77767, 77774, 77782, 77789, 77797, 77804, 77814, 77824, 77834, + 77843, 77852, 77861, 77870, 77879, 77889, 77900, 77911, 77921, 77932, + 77943, 77953, 77962, 77971, 77979, 77988, 77997, 78005, 78014, 78023, + 78031, 78040, 78049, 78057, 78066, 78075, 78083, 78092, 78101, 78109, + 78118, 78126, 78135, 78143, 78151, 78160, 78168, 78177, 78185, 78193, + 78202, 78210, 78217, 78224, 78233, 78242, 78250, 78259, 78268, 78276, + 78286, 78294, 78302, 78309, 78317, 78325, 78332, 78342, 78352, 78363, + 78373, 78384, 78392, 78400, 78409, 78417, 78426, 78434, 78442, 78451, + 78459, 78468, 78476, 78483, 78490, 78497, 78504, 78512, 78520, 78528, + 78536, 78545, 78553, 78561, 78570, 78578, 78586, 78594, 78603, 78611, + 78619, 78627, 78635, 78643, 78651, 78659, 78667, 78675, 78684, 78692, + 78700, 78708, 78716, 78724, 78733, 78742, 78750, 78758, 78766, 78775, + 78783, 78792, 78799, 78806, 78814, 78821, 78829, 78837, 78846, 78854, + 78863, 78871, 78879, 78889, 78896, 78903, 78911, 78918, 78926, 78936, + 78947, 78955, 78964, 78972, 78981, 78989, 78998, 79006, 79015, 79023, + 79032, 79041, 79049, 79057, 79065, 79074, 79081, 79089, 79098, 79107, + 79116, 79125, 79133, 79142, 79150, 79159, 79167, 79176, 79184, 79193, + 79201, 79209, 79216, 79224, 79231, 79240, 79248, 79257, 79265, 79274, + 79282, 79290, 79298, 79307, 79315, 79324, 79333, 79342, 79351, 79360, + 79368, 79377, 79385, 79394, 79402, 79411, 79419, 79428, 79436, 79444, + 79451, 79459, 79466, 79475, 79483, 79492, 79500, 79509, 79517, 79525, + 79533, 79542, 79550, 79559, 79568, 79577, 79586, 79594, 79602, 79611, + 79619, 79628, 79637, 79645, 79653, 79661, 79670, 79678, 79686, 79695, + 79703, 79711, 79719, 79727, 79732, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 79737, 79747, 79757, 79767, 79777, 79788, 79798, 79808, 79819, + 79828, 79837, 79846, 79856, 79866, 79876, 79887, 79897, 79907, 79917, + 79927, 79937, 79947, 79957, 79967, 79977, 79987, 79997, 80008, 80019, + 80029, 80039, 80050, 80061, 80072, 80082, 80092, 80102, 80112, 80122, + 80132, 80142, 80153, 80163, 80173, 80184, 80195, 80206, 80216, 80226, + 80236, 80246, 80257, 80267, 80277, 80288, 80299, 80309, 80319, 80328, + 80337, 80346, 80355, 80364, 80374, 0, 0, 80384, 80394, 80404, 80414, + 80424, 80435, 80445, 80455, 80466, 80476, 80487, 80496, 80505, 80516, + 80526, 80537, 80548, 80560, 80570, 80581, 80590, 80600, 80610, 80622, + 80632, 80642, 80652, 80662, 80672, 80681, 80690, 80699, 80708, 80718, + 80728, 80738, 80748, 80758, 80768, 80778, 80788, 80798, 80808, 80818, + 80828, 80837, 80846, 80855, 80865, 80875, 80885, 80895, 80905, 80916, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 80926, 80941, 80956, 80962, + 80968, 80974, 80980, 80986, 80992, 80998, 81004, 81012, 81016, 81019, 0, + 0, 81027, 81030, 81033, 81036, 81039, 81042, 81045, 81048, 81051, 81054, + 81057, 81060, 81063, 81066, 81069, 81072, 81075, 81083, 81092, 81103, + 81111, 81119, 81128, 81137, 81148, 81160, 0, 0, 0, 0, 0, 0, 81169, 81174, + 81179, 81186, 81193, 81199, 81205, 0, 0, 0, 0, 0, 0, 0, 0, 0, 81210, + 81220, 81230, 81240, 81249, 81260, 81269, 81278, 81288, 81298, 81310, + 81322, 81333, 81344, 81355, 81366, 81376, 81386, 81396, 81406, 81417, + 81428, 81432, 81437, 81446, 81455, 81459, 81463, 81467, 81472, 81477, + 81482, 81487, 81490, 81494, 0, 81499, 81502, 81505, 81509, 81513, 81518, + 81522, 81526, 81531, 81536, 81543, 81550, 81553, 81556, 81559, 81562, + 81565, 81569, 81573, 0, 81577, 81582, 81586, 81590, 0, 0, 0, 0, 81595, + 81600, 81607, 81612, 81617, 0, 81622, 81627, 81632, 81637, 81642, 81647, + 81652, 81657, 81662, 81667, 81672, 81677, 81686, 81695, 81703, 81711, + 81720, 81729, 81738, 81747, 81755, 81763, 81771, 81779, 81784, 81789, + 81795, 81801, 81807, 81813, 81821, 81829, 81835, 81841, 81847, 81853, + 81859, 81865, 81871, 81877, 81882, 81887, 81892, 81897, 81902, 81907, + 81912, 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, 82115, 82121, 82127, 82133, 82139, 82145, + 82151, 82157, 82163, 82169, 82175, 82181, 82187, 82193, 82199, 82205, + 82211, 82217, 82223, 82229, 82235, 82241, 82247, 82253, 82259, 82265, + 82271, 82277, 82282, 82287, 82292, 82297, 82303, 82309, 82315, 82321, + 82327, 82333, 82339, 82345, 82351, 82357, 82363, 82369, 82374, 82379, + 82384, 82389, 82401, 82413, 82424, 82435, 82447, 82459, 82467, 0, 0, + 82475, 0, 82483, 82487, 82491, 82494, 82498, 82502, 82505, 82508, 82512, + 82516, 82519, 82522, 82525, 82528, 82533, 82536, 82540, 82543, 82546, + 82549, 82552, 82555, 82558, 82561, 82564, 82567, 82570, 82573, 82577, + 82581, 82585, 82589, 82594, 82599, 82605, 82611, 82617, 82622, 82628, + 82634, 82640, 82645, 82651, 82657, 82662, 82667, 82672, 82677, 82683, + 82689, 82694, 82699, 82705, 82710, 82716, 82722, 82728, 82734, 82740, + 82744, 82749, 82753, 82758, 82762, 82767, 82772, 82778, 82784, 82790, + 82795, 82801, 82807, 82813, 82818, 82824, 82830, 82835, 82840, 82845, + 82850, 82856, 82862, 82867, 82872, 82878, 82883, 82889, 82895, 82901, + 82907, 82913, 82918, 82922, 82927, 82930, 82935, 82940, 82946, 82951, + 82956, 82960, 82966, 82971, 82976, 82981, 82986, 82991, 82996, 83001, + 83007, 83013, 83019, 83027, 83031, 83035, 83039, 83043, 83047, 83051, + 83056, 83061, 83066, 83071, 83076, 83081, 83086, 83091, 83096, 83101, + 83106, 83111, 83116, 83120, 83124, 83129, 83134, 83139, 83144, 83148, + 83153, 83158, 83163, 83168, 83172, 83177, 83182, 83187, 83192, 83196, + 83201, 83206, 83210, 83215, 83220, 83225, 83230, 83235, 83239, 83246, + 83253, 83257, 83262, 83267, 83272, 83277, 83282, 83287, 83292, 83297, + 83302, 83307, 83312, 83317, 83322, 83327, 83332, 83337, 83342, 83347, + 83352, 83357, 83362, 83367, 83372, 83377, 83382, 83387, 83392, 83397, + 83402, 0, 0, 0, 83407, 83411, 83416, 83420, 83425, 83430, 0, 0, 83434, + 83439, 83444, 83448, 83453, 83458, 0, 0, 83463, 83468, 83472, 83477, + 83482, 83487, 0, 0, 83492, 83497, 83502, 0, 0, 0, 83506, 83510, 83514, + 83517, 83520, 83524, 83528, 0, 83532, 83538, 83541, 83545, 83548, 83552, + 83556, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 83560, 83566, 83572, 83578, 83584, + 0, 0, 83588, 83594, 83600, 83606, 83612, 83618, 83625, 83632, 83639, + 83646, 83653, 83660, 0, 83667, 83674, 83681, 83687, 83694, 83701, 83708, + 83715, 83721, 83728, 83735, 83742, 83749, 83755, 83762, 83769, 83776, + 83783, 83789, 83796, 83803, 83810, 83817, 83824, 83831, 83838, 0, 83845, + 83851, 83858, 83865, 83872, 83879, 83886, 83893, 83900, 83907, 83914, + 83921, 83928, 83935, 83941, 83948, 83955, 83962, 83969, 0, 83976, 83983, + 0, 83990, 83997, 84004, 84011, 84018, 84025, 84032, 84039, 84046, 84053, + 84060, 84067, 84074, 84081, 84088, 0, 0, 84094, 84099, 84104, 84109, + 84114, 84119, 84124, 84129, 84134, 84139, 84144, 84149, 84154, 84159, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 84164, 84171, 84178, 84185, 84192, 84199, + 84206, 84213, 84220, 84227, 84234, 84241, 84248, 84255, 84262, 84269, + 84276, 84283, 84290, 84297, 84305, 84313, 84320, 84327, 84332, 84340, + 84348, 84355, 84362, 84367, 84374, 84379, 84384, 84391, 84396, 84401, + 84406, 84414, 84419, 84424, 84431, 84436, 84441, 84448, 84455, 84460, + 84465, 84470, 84475, 84480, 84485, 84490, 84495, 84500, 84507, 84512, + 84519, 84524, 84529, 84534, 84539, 84544, 84549, 84554, 84559, 84564, + 84569, 84574, 84581, 84588, 84595, 84602, 84608, 84613, 84620, 84625, + 84630, 84639, 84646, 84655, 84662, 84667, 84672, 84680, 84685, 84690, + 84695, 84700, 84705, 84712, 84717, 84722, 84727, 84732, 84737, 84744, + 84751, 84758, 84765, 84772, 84779, 84786, 84793, 84800, 84807, 84814, + 84821, 84828, 84835, 84842, 84849, 84856, 84863, 84870, 84877, 84884, + 84891, 84898, 84905, 84912, 84919, 84926, 84933, 0, 0, 0, 0, 0, 84940, + 84948, 84956, 0, 0, 0, 0, 84961, 84965, 84969, 84973, 84977, 84981, + 84985, 84989, 84993, 84997, 85002, 85007, 85012, 85017, 85022, 85027, + 85032, 85037, 85042, 85048, 85054, 85060, 85067, 85074, 85081, 85088, + 85095, 85102, 85108, 85114, 85120, 85127, 85134, 85141, 85148, 85155, + 85162, 85169, 85176, 85183, 85190, 85197, 85204, 85211, 85218, 0, 0, 0, + 85225, 85233, 85241, 85249, 85257, 85265, 85275, 85285, 85293, 85301, + 85309, 85317, 85325, 85331, 85338, 85347, 85356, 85365, 85374, 85383, + 85392, 85402, 85413, 85423, 85434, 85443, 85452, 85461, 85471, 85482, + 85492, 85503, 85514, 85523, 85531, 85537, 85543, 85549, 85555, 85563, + 85571, 85577, 85584, 85594, 85601, 85608, 85615, 85622, 85629, 85639, + 85646, 85653, 85661, 85669, 85678, 85687, 85696, 85705, 85714, 85722, + 85731, 85740, 85749, 85753, 85760, 85765, 85770, 85774, 85778, 85782, + 85786, 85791, 85796, 85802, 85808, 85812, 85818, 85822, 85826, 85830, + 85834, 85838, 85842, 85848, 0, 0, 0, 0, 0, 85852, 85857, 85862, 85867, + 85872, 85879, 85884, 85889, 85894, 85899, 85904, 85909, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 85914, + 85921, 85930, 85939, 85946, 85953, 85960, 85967, 85974, 85981, 85987, + 85994, 86001, 86008, 86015, 86022, 86029, 86036, 86043, 86052, 86059, + 86066, 86073, 86080, 86087, 86094, 86101, 86108, 86117, 86124, 86131, + 86138, 86145, 86152, 86159, 86168, 86175, 86182, 86189, 86196, 86205, + 86212, 86219, 86226, 86234, 86243, 0, 0, 86252, 86256, 86260, 86265, + 86270, 86275, 86280, 86284, 86289, 86294, 86299, 86304, 86309, 86314, + 86318, 86322, 86326, 86331, 86336, 86340, 86345, 86350, 86354, 86358, + 86363, 86368, 86373, 86378, 86383, 0, 0, 0, 86388, 86392, 86397, 86402, + 86406, 86411, 86415, 86420, 86425, 86430, 86435, 86439, 86443, 86448, + 86453, 86458, 86463, 86467, 86472, 86476, 86481, 86486, 86490, 86495, + 86500, 86505, 86509, 86513, 86518, 86523, 86528, 86533, 86538, 86543, + 86548, 86553, 86558, 86563, 86568, 86573, 86578, 86583, 86588, 86593, + 86598, 86603, 86608, 86613, 86618, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 86623, 86627, 86632, 86637, 86642, 86646, + 86651, 86656, 86661, 86666, 86670, 86674, 86679, 86684, 86689, 86694, + 86698, 86703, 86708, 86713, 86718, 86723, 86728, 86732, 86737, 86742, + 86747, 86752, 86757, 86762, 86767, 0, 86772, 86777, 86782, 86788, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 86794, 86799, 86804, 86809, 86814, 86819, + 86824, 86829, 86834, 86839, 86844, 86849, 86854, 86859, 86864, 86869, + 86874, 86879, 86884, 86889, 86894, 86899, 86904, 86909, 86914, 86919, + 86924, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 86931, 86936, 86941, 86946, 86951, 86956, 86961, + 86966, 86971, 86976, 86981, 86986, 86991, 86996, 87001, 87006, 87011, + 87016, 87021, 87026, 87031, 87036, 87041, 87046, 87051, 87056, 87061, + 87065, 87069, 87073, 0, 87078, 87084, 87089, 87094, 87099, 87104, 87110, + 87116, 87122, 87128, 87134, 87140, 87146, 87152, 87158, 87164, 87170, + 87176, 87182, 87187, 87193, 87199, 87204, 87210, 87215, 87221, 87227, + 87232, 87238, 87244, 87249, 87255, 87261, 87267, 87273, 87279, 87285, 0, + 0, 0, 0, 87290, 87296, 87302, 87308, 87314, 87320, 87326, 87332, 87338, + 87345, 87350, 87355, 87361, 87367, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 87373, 87378, 87383, 87388, 87394, 87399, 87405, 87411, + 87417, 87423, 87430, 87436, 87443, 87448, 87453, 87458, 87463, 87468, + 87473, 87478, 87483, 87488, 87493, 87498, 87503, 87508, 87513, 87518, + 87523, 87528, 87533, 87538, 87543, 87548, 87553, 87558, 87563, 87568, + 87573, 87578, 87583, 87588, 87593, 87598, 87604, 87609, 87615, 87621, + 87627, 87633, 87640, 87646, 87653, 87658, 87663, 87668, 87673, 87678, + 87683, 87688, 87693, 87698, 87703, 87708, 87713, 87718, 87723, 87728, + 87733, 87738, 87743, 87748, 87753, 87758, 87763, 87768, 87773, 87778, + 87783, 87788, 87793, 87798, 87803, 87808, 87813, 87818, 87823, 87828, + 87833, 87838, 87843, 87848, 87853, 87858, 87863, 87868, 87873, 87878, + 87883, 87888, 87893, 87898, 87903, 87908, 87913, 87918, 87923, 87928, + 87933, 87938, 87943, 87948, 87953, 87958, 87963, 87968, 87973, 87978, + 87983, 87988, 87993, 87998, 88003, 88008, 88013, 88018, 88023, 88028, + 88033, 88038, 88043, 88048, 88053, 88058, 88063, 88068, 88072, 88077, + 88082, 88087, 88092, 88097, 88102, 88107, 88112, 88117, 88122, 88127, + 88132, 88136, 88140, 88144, 88148, 88152, 88156, 88160, 88165, 88170, 0, + 0, 88175, 88180, 88184, 88188, 88192, 88196, 88200, 88204, 88208, 88212, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 88216, 88220, 88224, 88228, + 88232, 88236, 0, 0, 88241, 0, 88246, 88250, 88255, 88260, 88265, 88270, + 88275, 88280, 88285, 88290, 88295, 88299, 88304, 88309, 88314, 88319, + 88323, 88328, 88333, 88338, 88343, 88347, 88352, 88357, 88362, 88367, + 88371, 88376, 88381, 88386, 88391, 88396, 88401, 88406, 88411, 88416, + 88421, 88426, 88431, 88435, 88440, 88445, 88450, 88455, 0, 88460, 88465, + 0, 0, 0, 88470, 0, 0, 88475, 88480, 88487, 88494, 88501, 88508, 88515, + 88522, 88529, 88536, 88543, 88550, 88557, 88564, 88571, 88578, 88585, + 88592, 88599, 88606, 88613, 88620, 88627, 0, 88634, 88641, 88647, 88653, + 88659, 88666, 88673, 88681, 88689, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 88698, 88703, + 88708, 88713, 88718, 88723, 88728, 88733, 88738, 88743, 88748, 88753, + 88758, 88763, 88768, 88773, 88778, 88783, 88788, 88793, 88798, 88803, + 88808, 88812, 88817, 88822, 88828, 88832, 0, 0, 0, 88836, 88842, 88846, + 88851, 88856, 88861, 88865, 88870, 88874, 88879, 88884, 88888, 88892, + 88896, 88900, 88904, 88909, 88914, 88918, 88923, 88928, 88932, 88937, + 88942, 88947, 88952, 88957, 0, 0, 0, 0, 0, 88962, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 88967, 88970, 88974, 88978, 0, 88983, 88987, 0, + 0, 0, 0, 0, 88991, 88996, 89002, 89006, 89010, 89013, 89017, 89021, 0, + 89025, 89029, 89033, 0, 89037, 89041, 89045, 89049, 89053, 89057, 89061, + 89065, 89069, 89073, 89077, 89080, 89083, 89087, 89091, 89095, 89098, + 89101, 89104, 89108, 89112, 89116, 89120, 89124, 89128, 89131, 89135, 0, + 0, 0, 0, 89139, 89144, 89148, 0, 0, 0, 0, 89152, 89155, 89158, 89161, + 89164, 89167, 89171, 89175, 89180, 0, 0, 0, 0, 0, 0, 0, 0, 89185, 89190, + 89196, 89201, 89207, 89212, 89217, 89222, 89228, 0, 0, 0, 0, 0, 0, 0, + 89233, 89241, 89249, 89257, 89265, 89273, 89281, 89289, 89297, 89305, + 89313, 89321, 89329, 89337, 89345, 89353, 89361, 89369, 89377, 89385, + 89393, 89401, 89409, 89417, 89425, 89433, 89441, 89449, 89457, 89465, + 89472, 89480, 89488, 89492, 89497, 89502, 89507, 89512, 89517, 89522, + 89527, 89531, 89536, 89540, 89545, 89549, 89554, 89558, 89563, 89568, + 89573, 89578, 89583, 89588, 89593, 89598, 89603, 89608, 89613, 89618, + 89623, 89628, 89633, 89638, 89643, 89648, 89653, 89658, 89663, 89668, + 89673, 89678, 89683, 89688, 89693, 89698, 89703, 89708, 89713, 89718, + 89723, 89728, 89733, 89738, 89743, 89748, 0, 0, 0, 89753, 89758, 89767, + 89775, 89784, 89793, 89804, 89815, 89822, 89829, 89836, 89843, 89850, + 89857, 89864, 89871, 89878, 89885, 89892, 89899, 89906, 89913, 89920, + 89927, 89934, 89941, 89948, 89955, 89962, 0, 0, 89969, 89975, 89981, + 89987, 89993, 90000, 90007, 90015, 90023, 90030, 90037, 90044, 90051, + 90058, 90065, 90072, 90079, 90086, 90093, 90100, 90107, 90114, 90121, + 90128, 90135, 90142, 90149, 0, 0, 0, 0, 0, 90156, 90162, 90168, 90174, + 90180, 90187, 90194, 90202, 90210, 90216, 90222, 90229, 90235, 90241, + 90247, 90253, 90260, 90267, 90274, 90281, 90288, 90295, 90302, 90309, + 90316, 90323, 90330, 90337, 90344, 90351, 90358, 90365, 90372, 90379, + 90386, 90393, 90400, 90407, 90414, 90421, 90428, 90435, 90442, 90449, + 90456, 90463, 90470, 90477, 90484, 90491, 90498, 90505, 90512, 90519, + 90526, 90533, 90540, 90547, 90554, 90561, 90568, 90575, 90582, 90589, + 90596, 90603, 90610, 90617, 90624, 90631, 90638, 90645, 90652, 90659, + 90666, 90673, 90680, 90687, 90694, 90701, 90708, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 90715, 90719, 90723, 90727, 90731, 90735, 90739, 90743, 90747, 90751, + 90756, 90761, 90766, 90771, 90776, 90781, 90786, 90791, 90796, 90802, + 90808, 90814, 90821, 90828, 90835, 90842, 90849, 90856, 90863, 90870, + 90877, 0, 90884, 90888, 90892, 90896, 90899, 90903, 90906, 90910, 90913, + 90917, 90920, 90924, 90927, 90931, 90934, 90938, 90942, 90946, 90950, + 90954, 90958, 90962, 90966, 90970, 90974, 90978, 90982, 90986, 90990, + 90994, 90998, 91002, 91006, 91010, 91014, 91017, 91020, 91024, 91028, + 91032, 91035, 91038, 91041, 91045, 91049, 91053, 91057, 91061, 91064, + 91069, 91073, 91078, 91082, 91087, 91091, 91096, 91100, 91105, 91109, + 91113, 91117, 91121, 91124, 91128, 91133, 91136, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 91140, 91143, 91148, 91154, 91162, 91167, 91173, 91181, + 91187, 91193, 91197, 91201, 91208, 91217, 91224, 91233, 91239, 91248, + 91255, 91262, 91269, 91279, 91285, 91289, 91296, 91305, 91315, 91322, + 91329, 91333, 91337, 91344, 91354, 91358, 91365, 91372, 91379, 91385, + 91392, 91399, 91406, 91413, 91417, 91421, 91425, 91432, 91436, 91443, + 91450, 91464, 91473, 91477, 91481, 91485, 91492, 91496, 91500, 91504, + 91512, 91520, 91539, 91549, 91569, 91573, 91577, 91581, 91585, 91589, + 91593, 91597, 91604, 91608, 91611, 91615, 91619, 91625, 91632, 91641, + 91645, 91654, 91663, 91671, 91675, 91682, 91686, 91690, 91694, 91698, + 91709, 91718, 91727, 91736, 91745, 91757, 91766, 91775, 91784, 91792, + 91801, 91813, 91822, 91831, 91840, 91852, 91861, 91870, 91882, 91891, + 91900, 91912, 91921, 91925, 91929, 91933, 91937, 91941, 91945, 91949, + 91956, 91960, 91964, 91975, 91979, 91983, 91990, 91996, 92002, 92006, + 92013, 92017, 92021, 92025, 92029, 92033, 92037, 92043, 92051, 92055, + 92059, 92062, 92068, 92078, 92082, 92094, 92101, 92108, 92115, 92122, + 92128, 92132, 92136, 92140, 92144, 92151, 92160, 92167, 92175, 92183, + 92189, 92193, 92197, 92201, 92205, 92211, 92220, 92232, 92239, 92246, + 92255, 92266, 92272, 92281, 92290, 92297, 92306, 92313, 92320, 92330, + 92337, 92344, 92351, 92358, 92362, 92368, 92372, 92383, 92391, 92400, + 92412, 92419, 92426, 92436, 92443, 92452, 92459, 92468, 92475, 92482, + 92492, 92499, 92506, 92516, 92523, 92535, 92544, 92551, 92558, 92565, + 92574, 92584, 92597, 92604, 92614, 92624, 92631, 92640, 92653, 92660, + 92667, 92674, 92684, 92694, 92701, 92711, 92718, 92725, 92735, 92741, + 92748, 92755, 92762, 92772, 92779, 92786, 92793, 92799, 92806, 92816, + 92823, 92827, 92835, 92839, 92851, 92855, 92869, 92873, 92877, 92881, + 92885, 92891, 92898, 92906, 92910, 92914, 92918, 92922, 92929, 92933, + 92939, 92945, 92953, 92957, 92964, 92972, 92976, 92980, 92986, 92990, + 92999, 93008, 93015, 93025, 93031, 93035, 93039, 93047, 93054, 93061, + 93067, 93071, 93079, 93083, 93090, 93102, 93109, 93119, 93125, 93129, + 93138, 93145, 93154, 93158, 93162, 93169, 93173, 93177, 93181, 93185, + 93188, 93194, 93200, 93204, 93208, 93215, 93222, 93229, 93236, 93243, + 93250, 93257, 93264, 93270, 93274, 93278, 93285, 93292, 93299, 93306, + 93313, 93317, 93320, 93325, 93329, 93333, 93342, 93351, 93355, 93359, + 93365, 93371, 93388, 93394, 93398, 93407, 93411, 93415, 93422, 93430, + 93438, 93444, 93448, 93452, 93456, 93460, 93463, 93468, 93474, 93483, + 93489, 93495, 93501, 93506, 93512, 93518, 93524, 93530, 93536, 93544, + 93550, 93561, 93567, 93573, 93582, 93592, 93598, 93604, 93610, 93616, + 93622, 93628, 93634, 93640, 93646, 93652, 93661, 93670, 93679, 93685, + 93694, 93700, 93706, 93712, 93718, 93724, 93730, 93736, 93742, 93748, + 93754, 93760, 93766, 93772, 93777, 93783, 93789, 93797, 93803, 93809, + 93813, 93821, 93825, 93829, 93833, 93837, 93841, 93848, 93852, 93861, + 93865, 93872, 93880, 93884, 93888, 93892, 93905, 93921, 93925, 93929, + 93936, 93942, 93949, 93953, 93957, 93961, 93965, 93969, 93976, 93980, + 93998, 94002, 94006, 94013, 94017, 94021, 94027, 94031, 94035, 94043, + 94047, 94051, 94055, 94059, 94065, 94076, 94085, 94094, 94101, 94108, + 94119, 94126, 94133, 94140, 94147, 94154, 94161, 94168, 94178, 94184, + 94191, 94201, 94210, 94217, 94226, 94236, 94243, 94250, 94257, 94264, + 94276, 94283, 94290, 94297, 94304, 94311, 94321, 94328, 94335, 94345, + 94358, 94370, 94377, 94387, 94394, 94401, 94408, 94422, 94428, 94436, + 94446, 94456, 94463, 94470, 94476, 94480, 94487, 94497, 94503, 94516, + 94520, 94524, 94531, 94535, 94542, 94552, 94556, 94560, 94564, 94568, + 94572, 94579, 94583, 94590, 94597, 94604, 94613, 94622, 94632, 94639, + 94646, 94653, 94663, 94670, 94680, 94687, 94697, 94704, 94711, 94721, + 94731, 94738, 94744, 94752, 94760, 94766, 94772, 94776, 94780, 94787, + 94795, 94801, 94805, 94809, 94813, 94820, 94832, 94835, 94842, 94848, + 94852, 94856, 94860, 94864, 94868, 94872, 94876, 94880, 94884, 94888, + 94895, 94899, 94905, 94909, 94913, 94917, 94923, 94930, 94937, 94944, + 94955, 94963, 94967, 94973, 94982, 94989, 94995, 94998, 95002, 95006, + 95012, 95021, 95029, 95033, 95039, 95043, 95047, 95051, 95057, 95064, + 95070, 95074, 95080, 95084, 95088, 95097, 95109, 95113, 95120, 95127, + 95137, 95144, 95156, 95163, 95170, 95177, 95188, 95198, 95211, 95221, + 95228, 95232, 95236, 95240, 95244, 95253, 95262, 95271, 95288, 95297, + 95303, 95310, 95318, 95331, 95335, 95344, 95353, 95362, 95371, 95382, + 95391, 95400, 95409, 95418, 95427, 95436, 95446, 95449, 95453, 95457, + 95461, 95465, 95469, 95475, 95482, 95489, 95496, 95502, 95508, 95515, + 95521, 95528, 95536, 95540, 95547, 95554, 95561, 95569, 95572, 95576, + 95580, 95584, 95588, 95594, 95598, 95604, 95611, 95618, 95624, 95631, + 95638, 95645, 95652, 95659, 95666, 95673, 95680, 95687, 95694, 95701, + 95708, 95715, 95722, 95728, 95732, 95741, 95745, 95749, 95753, 95757, + 95763, 95770, 95777, 95784, 95791, 95798, 95804, 95812, 95816, 95820, + 95824, 95828, 95834, 95851, 95868, 95872, 95876, 95880, 95884, 95888, + 95892, 95898, 95905, 95909, 95915, 95922, 95929, 95936, 95943, 95950, + 95959, 95966, 95973, 95980, 95987, 95991, 95995, 96001, 96013, 96017, + 96021, 96030, 96034, 96038, 96042, 96048, 96052, 96056, 96065, 96069, + 96073, 96077, 96084, 96088, 96092, 96096, 96100, 96104, 96108, 96112, + 96116, 96122, 96129, 96136, 96142, 96146, 96163, 96169, 96173, 96179, + 96185, 96191, 96197, 96203, 96209, 96213, 96217, 96221, 96227, 96231, + 96237, 96241, 96245, 96252, 96259, 96276, 96280, 96284, 96288, 96292, + 96296, 96308, 96311, 96316, 96321, 96336, 96346, 96357, 96361, 96365, + 96369, 96375, 96382, 96389, 96399, 96411, 96417, 96423, 96432, 96436, + 96440, 96447, 96457, 96464, 96470, 96474, 96478, 96485, 96491, 96495, + 96501, 96505, 96513, 96519, 96523, 96531, 96539, 96546, 96552, 96559, + 96566, 96576, 96586, 96590, 96594, 96598, 96602, 96608, 96615, 96621, + 96628, 96635, 96642, 96651, 96658, 96665, 96671, 96678, 96685, 96692, + 96699, 96706, 96713, 96719, 96726, 96733, 96740, 96749, 96756, 96763, + 96767, 96773, 96777, 96783, 96790, 96797, 96804, 96808, 96812, 96816, + 96820, 96824, 96831, 96835, 96839, 96845, 96853, 96857, 96861, 96865, + 96869, 96876, 96880, 96884, 96892, 96896, 96900, 96904, 96908, 96914, + 96918, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 96922, 96928, + 96934, 96941, 96948, 96955, 96962, 96969, 96976, 96982, 96989, 96996, + 97003, 97010, 97017, 97024, 97030, 97036, 97042, 97048, 97054, 97060, + 97066, 97072, 97078, 97085, 97092, 97099, 97106, 97113, 97120, 97126, + 97132, 97138, 97145, 97152, 97158, 97164, 97173, 97180, 97187, 97194, + 97201, 97208, 97215, 97221, 97227, 97233, 97242, 97249, 97256, 97267, + 97278, 97284, 97290, 97296, 97305, 97312, 97319, 97329, 97339, 97350, + 97361, 97373, 97386, 97397, 97408, 97420, 97433, 97444, 97455, 97466, + 97477, 97488, 97500, 97508, 97516, 97525, 97534, 97543, 97549, 97555, + 97561, 97568, 97578, 97585, 97595, 97600, 97605, 97611, 97617, 97625, + 97633, 97642, 97653, 97664, 97672, 97680, 97689, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 97698, 97709, 97716, 97724, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 97732, 97736, 97740, 97744, 97748, 97752, 97756, 97760, 97764, + 97768, 97772, 97776, 97780, 97784, 97788, 97792, 97796, 97800, 97804, + 97808, 97812, 97816, 97820, 97824, 97828, 97832, 97836, 97840, 97844, + 97848, 97852, 97856, 97860, 97864, 97868, 97872, 97876, 97880, 97884, + 97888, 97892, 97896, 97900, 97904, 97908, 97912, 97916, 97920, 97924, + 97928, 97932, 97936, 97940, 97944, 97948, 97952, 97956, 97960, 97964, + 97968, 97972, 97976, 97980, 97984, 97988, 97992, 97996, 98000, 98004, + 98008, 98012, 98016, 98020, 98024, 98028, 98032, 98036, 98040, 98044, + 98048, 98052, 98056, 98060, 98064, 98068, 98072, 98076, 98080, 98084, + 98088, 98092, 98096, 98100, 98104, 98108, 98112, 98116, 98120, 98124, + 98128, 98132, 98136, 98140, 98144, 98148, 98152, 98156, 98160, 98164, + 98168, 98172, 98176, 98180, 98184, 98188, 98192, 98196, 98200, 98204, + 98208, 98212, 98216, 98220, 98224, 98228, 98232, 98236, 98240, 98244, + 98248, 98252, 98256, 98260, 98264, 98268, 98272, 98276, 98280, 98284, + 98288, 98292, 98296, 98300, 98304, 98308, 98312, 98316, 98320, 98324, + 98328, 98332, 98336, 98340, 98344, 98348, 98352, 98356, 98360, 98364, + 98368, 98372, 98376, 98380, 98384, 98388, 98392, 98396, 98400, 98404, + 98408, 98412, 98416, 98420, 98424, 98428, 98432, 98436, 98440, 98444, + 98448, 98452, 98456, 98460, 98464, 98468, 98472, 98476, 98480, 98484, + 98488, 98492, 98496, 98500, 98504, 98508, 98512, 98516, 98520, 98524, + 98528, 98532, 98536, 98540, 98544, 98548, 98552, 98556, 98560, 98564, + 98568, 98572, 98576, 98580, 98584, 98588, 98592, 98596, 98600, 98604, + 98608, 98612, 98616, 98620, 98624, 98628, 98632, 98636, 98640, 98644, + 98648, 98652, 98656, 98660, 98664, 98668, 98672, 98676, 98680, 98684, + 98688, 98692, 98696, 98700, 98704, 98708, 98712, 98716, 98720, 98724, + 98728, 98732, 98736, 98740, 98744, 98748, 98752, 98756, 98760, 98764, + 98768, 98772, 98776, 98780, 98784, 98788, 98792, 98796, 98800, 98804, + 98808, 98812, 98816, 98820, 98824, 98828, 98832, 98836, 98840, 98844, + 98848, 98852, 98856, 98860, 98864, 98868, 98872, 98876, 98880, 98884, + 98888, 98892, 98896, 98900, 98904, 98908, 98912, 98916, 98920, 98924, + 98928, 98932, 98936, 98940, 98944, 98948, 98952, 98956, 98960, 98964, + 98968, 98972, 98976, 98980, 98984, 98988, 98992, 98996, 99000, 99004, + 99008, 99012, 99016, 99020, 99024, 99028, 99032, 99036, 99040, 99044, + 99048, 99052, 99056, 99060, 99064, 99068, 99072, 99076, 99080, 99084, + 99088, 99092, 99096, 99100, 99104, 99108, 99112, 99116, 99120, 99124, + 99128, 99132, 99136, 99140, 99144, 99148, 99152, 99156, 99160, 99164, + 99168, 99172, 99176, 99180, 99184, 99188, 99192, 99196, 99200, 99204, + 99208, 99212, 99216, 99220, 99224, 99228, 99232, 99236, 99240, 99244, + 99248, 99252, 99256, 99260, 99264, 99268, 99272, 99276, 99280, 99284, + 99288, 99292, 99296, 99300, 99304, 99308, 99312, 99316, 99320, 99324, + 99328, 99332, 99336, 99340, 99344, 99348, 99352, 99356, 99360, 99364, + 99368, 99372, 99376, 99380, 99384, 99388, 99392, 99396, 99400, 99404, + 99408, 99412, 99416, 99420, 99424, 99428, 99432, 99436, 99440, 99444, + 99448, 99452, 99456, 99460, 99464, 99468, 99472, 99476, 99480, 99484, + 99488, 99492, 99496, 99500, 99504, 99508, 99512, 99516, 99520, 99524, + 99528, 99532, 99536, 99540, 99544, 99548, 99552, 99556, 99560, 99564, + 99568, 99572, 99576, 99580, 99584, 99588, 99592, 99596, 99600, 99604, + 99608, 99612, 99616, 99620, 99624, 99628, 99632, 99636, 99640, 99644, + 99648, 99652, 99656, 99660, 99664, 99668, 99672, 99676, 99680, 99684, + 99688, 99692, 99696, 99700, 99704, 99708, 99712, 99716, 99720, 99724, + 99728, 99732, 99736, 99740, 99744, 99748, 99752, 99756, 99760, 99764, + 99768, 99772, 99776, 99780, 99784, 99788, 99792, 99796, 99800, 99804, + 99808, 99812, 99816, 99820, 99824, 99828, 99832, 99836, 99840, 99844, + 99848, 99852, 99856, 99860, 99864, 99868, 99872, 99876, 99880, 99884, + 99888, 99892, 99896, 99900, 99904, 99908, 99912, 99916, 99920, 99924, + 99928, 99932, 99936, 99940, 99944, 99948, 99952, 99956, 99960, 99964, + 99968, 99972, 99976, 99980, 99984, 99988, 99992, 99996, 100000, 100004, + 100008, 100012, 100016, 100020, 100024, 100028, 100032, 100036, 100040, + 100044, 100048, 100052, 100056, 100060, 100064, 100068, 100072, 100076, + 100080, 100084, 100088, 100092, 100096, 100100, 100104, 100108, 100112, + 100116, 100120, 100124, 100128, 100132, 100136, 100140, 100144, 100148, + 100152, 100156, 100160, 100164, 100168, 100172, 100176, 100180, 100184, + 100188, 100192, 100196, 100200, 100204, 100208, 100212, 100216, 100220, + 100224, 100228, 100232, 100236, 100240, 100244, 100248, 100252, 100256, + 100260, 100264, 100268, 100272, 100276, 100280, 100284, 100288, 100292, + 100296, 100300, 100304, 100308, 100312, 100316, 100320, 100324, 100328, + 100332, 100336, 100340, 100344, 100348, 100352, 100356, 100360, 100364, + 100368, 100372, 100376, 100380, 100384, 100388, 100392, 100396, 100400, + 100404, 100408, 100412, 100416, 100420, 100424, 100428, 100432, 100436, + 100440, 100444, 100448, 100452, 100456, 100460, 100464, 100468, 100472, + 100476, 100480, 100484, 100488, 100492, 100496, 100500, 100504, 100508, + 100512, 100516, 100520, 100524, 100528, 100532, 100536, 100540, 100544, + 100548, 100552, 100556, 100560, 100564, 100568, 100572, 100576, 100580, + 100584, 100588, 100592, 100596, 100600, 100604, 100608, 100612, 100616, + 100620, 100624, 100628, 100632, 100636, 100640, 100644, 100648, 100652, + 100656, 100660, 100664, 100668, 100672, 100676, 100680, 100684, 100688, + 100692, 100696, 100700, 100704, 100708, 100712, 100716, 100720, 100724, + 100728, 100732, 100736, 100740, 100744, 100748, 100752, 100756, 100760, + 100764, 100768, 100772, 100776, 100780, 100784, 100788, 100792, 100796, + 100800, 100804, 100808, 100812, 100816, 100820, 100824, 100828, 100832, + 100836, 100840, 100844, 100848, 100852, 100856, 100860, 100864, 100868, + 100872, 100876, 100880, 100884, 100888, 100892, 100896, 100900, 100904, + 100908, 100912, 100916, 100920, 100924, 100928, 100932, 100936, 100940, + 100944, 100948, 100952, 100956, 100960, 100964, 100968, 100972, 100976, + 100980, 100984, 100988, 100992, 100996, 101000, 101004, 101008, 101012, + 101016, 101020, 101024, 101028, 101032, 101036, 101040, 101044, 101048, + 101052, 101056, 101060, 101064, 101068, 101072, 101076, 101080, 101084, + 101088, 101092, 101096, 101100, 101104, 101108, 101112, 101116, 101120, + 101124, 101128, 101132, 101136, 101140, 101144, 101148, 101152, 101156, + 101160, 101164, 101168, 101172, 101176, 101180, 101184, 101188, 101192, + 101196, 101200, 101204, 101208, 101212, 101216, 101220, 101224, 101228, + 101232, 101236, 101240, 101244, 101248, 101252, 101256, 101260, 101264, + 101268, 101272, 101276, 101280, 101284, 101288, 101292, 101296, 101300, + 101304, 101308, 101312, 101316, 101320, 101324, 101328, 101332, 101336, + 101340, 101344, 101348, 101352, 101356, 101360, 101364, 101368, 101372, + 101376, 101380, 101384, 101388, 101392, 101396, 101400, 101404, 101408, + 101412, 101416, 101420, 101424, 101428, 101432, 101436, 101440, 101444, + 101448, 101452, 101456, 101460, 101464, 101468, 101472, 101476, 101480, + 101484, 101488, 101492, 101496, 101500, 101504, 101508, 101512, 101516, + 101520, 101524, 101528, 101532, 101536, 101540, 101544, 101548, 101552, + 101556, 101560, 101564, 101568, 101572, 101576, 101580, 101584, 101588, + 101592, 101596, 101600, 101604, 101608, 101612, 101616, 101620, 101624, + 101628, 101632, 101636, 101640, 101644, 101648, 101652, 101656, 101660, + 101664, 101668, 101672, 101676, 101680, 101684, 101688, 101692, 101696, + 101700, 101704, 101708, 101712, 101716, 101720, 101724, 101728, 101732, + 101736, 101740, 101744, 101748, 101752, 101756, 101760, 101764, 101768, + 101772, 101776, 101780, 101784, 101788, 101792, 101796, 101800, 101804, + 101808, 101812, 101816, 101820, 101824, 101828, 101832, 101836, 101840, + 101844, 101848, 101852, 101856, 101860, 101864, 101868, 101872, 101876, + 101880, 101884, 101888, 101892, 101896, 101900, 101904, 101908, 101912, + 101916, 101920, 101924, 101928, 101932, 101936, 101940, 101944, 101948, + 101952, 101956, 101960, 101964, 101968, 101972, 101976, 101980, 101984, + 101988, 101992, 101996, 102000, 102004, 102008, 102012, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 102016, 102021, 102026, 102031, 102038, 102045, 102052, 102059, + 102064, 102069, 102074, 102079, 102086, 102091, 102098, 102105, 102110, + 102115, 102120, 102127, 102132, 102137, 102144, 102151, 102156, 102161, + 102166, 102173, 102180, 102187, 102192, 102197, 102204, 102211, 102218, + 102225, 102230, 102235, 102240, 102247, 102252, 102257, 102262, 102269, + 102278, 102285, 102290, 102295, 102300, 102305, 102310, 102315, 102324, + 102331, 102336, 102343, 102350, 102355, 102360, 102365, 102372, 102377, + 102384, 102391, 102396, 102401, 102406, 102413, 102420, 102425, 102430, + 102437, 102444, 102451, 102456, 102461, 102466, 102471, 102478, 102487, + 102496, 102501, 102508, 102517, 102522, 102527, 102532, 102537, 102544, + 102551, 102558, 102565, 102570, 102575, 102580, 102587, 102594, 102601, + 102606, 102611, 102618, 102623, 102630, 102635, 102642, 102647, 102654, + 102661, 102666, 102671, 102676, 102681, 102686, 102691, 102696, 102701, + 102706, 102713, 102720, 102727, 102734, 102741, 102750, 102755, 102760, + 102767, 102774, 102779, 102786, 102793, 102800, 102807, 102814, 102821, + 102826, 102831, 102836, 102841, 102846, 102855, 102864, 102873, 102882, + 102891, 102900, 102909, 102918, 102923, 102934, 102945, 102954, 102959, + 102964, 102969, 102974, 102983, 102990, 102997, 103004, 103011, 103018, + 103025, 103034, 103043, 103054, 103063, 103074, 103083, 103090, 103099, + 103110, 103119, 103128, 103137, 103146, 103153, 103160, 103167, 103176, + 103185, 103196, 103205, 103214, 103225, 103230, 103235, 103246, 103254, + 103263, 103272, 103281, 103292, 103301, 103310, 103321, 103332, 103343, + 103354, 103365, 103376, 103383, 103390, 103397, 103404, 103415, 103424, + 103431, 103438, 103445, 103456, 103467, 103478, 103489, 103500, 103511, + 103522, 103533, 103540, 103547, 103556, 103565, 103572, 103579, 103586, + 103595, 103604, 103613, 103620, 103629, 103638, 103647, 103654, 103661, + 103666, 103672, 103679, 103686, 103693, 103700, 103707, 103714, 103723, + 103732, 103741, 103750, 103757, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 103766, + 103772, 103777, 103782, 103789, 103795, 103801, 103807, 103813, 103819, + 103825, 103831, 103835, 103839, 103845, 103851, 103857, 103861, 103866, + 103871, 103875, 103879, 103882, 103888, 103894, 103900, 103906, 103912, + 103918, 103924, 103930, 103936, 103946, 103956, 103962, 103968, 103978, + 103988, 103994, 0, 0, 104000, 104008, 104013, 104018, 104024, 104030, + 104036, 104042, 104048, 104054, 104061, 104068, 104074, 104080, 104086, + 104092, 104098, 104104, 104110, 104116, 104121, 104127, 104133, 104139, + 104145, 104151, 104160, 104166, 104171, 104179, 104186, 104193, 104202, + 104211, 104220, 104229, 104238, 104247, 104256, 104265, 104275, 104285, + 104293, 104301, 104310, 104319, 104325, 104331, 104337, 104343, 104351, + 104359, 104363, 104369, 104374, 104380, 104386, 104392, 104398, 104404, + 104413, 104418, 104425, 104430, 104435, 104440, 104446, 104452, 104458, + 104465, 104470, 104475, 104480, 104485, 104490, 104496, 104502, 104508, + 104514, 104520, 104526, 104532, 104538, 104543, 104548, 104553, 104558, + 104563, 104568, 104573, 104578, 104584, 104590, 104595, 104600, 104605, + 104610, 104615, 104621, 104628, 104632, 104636, 104640, 104644, 104648, + 104652, 104656, 104660, 104668, 104678, 104682, 104686, 104692, 104698, + 104704, 104710, 104716, 104722, 104728, 104734, 104740, 104746, 104752, + 104758, 104764, 104770, 104774, 104778, 104785, 104791, 104797, 104803, + 104808, 104815, 104820, 104826, 104832, 104838, 104844, 104849, 104853, + 104859, 104863, 104867, 104871, 104877, 104883, 104887, 104893, 104899, + 104905, 104911, 104917, 104925, 104933, 104939, 104945, 104951, 104957, + 104969, 104981, 104995, 105007, 105019, 105033, 105047, 105061, 105065, + 105073, 105081, 105086, 105090, 105094, 105098, 105102, 105106, 105110, + 105114, 105120, 105126, 105132, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 105138, + 105144, 105150, 105156, 105162, 105168, 105174, 105180, 105186, 105192, + 105198, 105204, 105210, 105216, 105222, 105228, 105234, 105240, 105246, + 105252, 105258, 105264, 105270, 105276, 105282, 105288, 105294, 105300, + 105306, 105312, 105318, 105324, 105330, 105336, 105342, 105348, 105354, + 105360, 105366, 105372, 105378, 105384, 105390, 105396, 105402, 105408, + 105414, 105420, 105426, 105432, 105438, 105444, 105450, 105456, 105462, + 105468, 105474, 105480, 105486, 105492, 105498, 105504, 105510, 105516, + 105522, 105528, 105534, 105539, 105544, 105549, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 105553, 105558, 105565, 105572, 105579, 105586, 105591, 105595, + 105601, 105605, 105609, 105615, 105619, 105623, 105627, 105633, 105640, + 105644, 105648, 105652, 105656, 105660, 105664, 105670, 105674, 105678, + 105682, 105686, 105690, 105694, 105698, 105702, 105706, 105710, 105714, + 105718, 105723, 105727, 105731, 105735, 105739, 105743, 105747, 105751, + 105755, 105759, 105766, 105770, 105777, 105781, 105785, 105789, 105793, + 105797, 105801, 105805, 105812, 105816, 105820, 105824, 105828, 105832, + 105838, 105842, 105848, 105852, 105856, 105860, 105864, 105868, 105872, + 105876, 105880, 105884, 105888, 105892, 105896, 105900, 105904, 105908, + 105912, 105916, 105920, 105924, 105932, 105936, 105940, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 105944, 105952, 105960, 105968, 105976, 105984, 105992, 106000, + 106008, 106016, 106024, 106032, 106040, 106048, 106056, 106064, 106072, + 106080, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 106088, 106092, 106097, + 106102, 106107, 106111, 106116, 106121, 106126, 106130, 106135, 106140, + 106144, 106148, 106152, 106156, 106161, 106166, 106170, 106174, 106179, + 106183, 106188, 106193, 106198, 106203, 106208, 106212, 106217, 106222, + 106227, 106231, 106236, 106241, 106246, 106250, 106255, 106260, 106264, + 106268, 106272, 106276, 106281, 106286, 106290, 106294, 106299, 106303, + 106308, 106313, 106318, 106323, 106328, 106332, 106337, 106342, 106347, + 106351, 106356, 106361, 106366, 106370, 106375, 106380, 106384, 106388, + 106392, 106396, 106401, 106406, 106410, 106414, 106419, 106423, 106428, + 106433, 106438, 106443, 106448, 106452, 106457, 106462, 106467, 106471, + 106476, 0, 106481, 106485, 106490, 106495, 106499, 106503, 106507, + 106511, 106516, 106521, 106525, 106529, 106534, 106538, 106543, 106548, + 106553, 106558, 106563, 106568, 106574, 106580, 106586, 106591, 106597, + 106603, 106609, 106614, 106620, 106626, 106631, 106636, 106641, 106646, + 106652, 106658, 106663, 106668, 106674, 106679, 106685, 106691, 106697, + 106703, 106709, 106714, 106720, 106726, 106732, 106737, 106743, 106749, + 106755, 106760, 106766, 106772, 106777, 106782, 106787, 106792, 106798, + 106804, 106809, 106814, 106820, 106825, 106831, 106837, 106843, 106849, + 106855, 0, 106859, 106864, 0, 0, 106869, 0, 0, 106874, 106879, 0, 0, + 106884, 106888, 106892, 106897, 0, 106902, 106906, 106911, 106915, + 106920, 106925, 106930, 106935, 106940, 106944, 106949, 106954, 0, + 106959, 0, 106964, 106969, 106973, 106978, 106983, 106987, 106991, 0, + 106995, 107000, 107005, 107009, 107013, 107018, 107022, 107027, 107032, + 107037, 107042, 107047, 107052, 107058, 107064, 107070, 107075, 107081, + 107087, 107093, 107098, 107104, 107110, 107115, 107120, 107125, 107130, + 107136, 107142, 107147, 107152, 107158, 107163, 107169, 107175, 107181, + 107187, 107193, 107198, 107204, 107210, 107216, 107221, 107227, 107233, + 107239, 107244, 107250, 107256, 107261, 107266, 107271, 107276, 107282, + 107288, 107293, 107298, 107304, 107309, 107315, 107321, 107327, 107333, + 107339, 107343, 0, 107348, 107353, 107357, 107362, 0, 0, 107367, 107372, + 107377, 107381, 107385, 107389, 107393, 107398, 0, 107403, 107407, + 107412, 107416, 107421, 107426, 107431, 0, 107436, 107440, 107445, + 107450, 107455, 107459, 107464, 107469, 107474, 107478, 107483, 107488, + 107492, 107496, 107500, 107504, 107509, 107514, 107518, 107522, 107527, + 107531, 107536, 107541, 107546, 107551, 107556, 107560, 0, 107565, + 107570, 107574, 107579, 0, 107584, 107588, 107593, 107598, 107602, 0, + 107606, 0, 0, 0, 107610, 107614, 107619, 107623, 107628, 107633, 107638, + 0, 107643, 107647, 107652, 107657, 107662, 107666, 107671, 107676, + 107681, 107685, 107690, 107695, 107699, 107703, 107707, 107711, 107716, + 107721, 107725, 107729, 107734, 107738, 107743, 107748, 107753, 107758, + 107763, 107768, 107774, 107780, 107786, 107791, 107797, 107803, 107809, + 107814, 107820, 107826, 107831, 107836, 107841, 107846, 107852, 107858, + 107863, 107868, 107874, 107879, 107885, 107891, 107897, 107903, 107909, + 107914, 107920, 107926, 107932, 107937, 107943, 107949, 107955, 107960, + 107966, 107972, 107977, 107982, 107987, 107992, 107998, 108004, 108009, + 108014, 108020, 108025, 108031, 108037, 108043, 108049, 108055, 108059, + 108064, 108069, 108074, 108078, 108083, 108088, 108093, 108097, 108102, + 108107, 108111, 108115, 108119, 108123, 108128, 108133, 108137, 108141, + 108146, 108150, 108155, 108160, 108165, 108170, 108175, 108179, 108184, + 108189, 108194, 108198, 108203, 108208, 108213, 108217, 108222, 108227, + 108231, 108235, 108239, 108243, 108248, 108253, 108257, 108261, 108266, + 108270, 108275, 108280, 108285, 108290, 108295, 108300, 108306, 108312, + 108318, 108323, 108329, 108335, 108341, 108346, 108352, 108358, 108363, + 108368, 108373, 108378, 108384, 108390, 108395, 108400, 108406, 108411, + 108417, 108423, 108429, 108435, 108441, 108446, 108452, 108458, 108464, + 108469, 108475, 108481, 108487, 108492, 108498, 108504, 108509, 108514, + 108519, 108524, 108530, 108536, 108541, 108546, 108552, 108557, 108563, + 108569, 108575, 108581, 108587, 108592, 108598, 108604, 108610, 108615, + 108621, 108627, 108633, 108638, 108644, 108650, 108655, 108660, 108665, + 108670, 108676, 108682, 108687, 108692, 108698, 108703, 108709, 108715, + 108721, 108727, 108733, 108738, 108744, 108750, 108756, 108761, 108767, + 108773, 108779, 108784, 108790, 108796, 108801, 108806, 108811, 108816, + 108822, 108828, 108833, 108838, 108844, 108849, 108855, 108861, 108867, + 108873, 108879, 108885, 108892, 108899, 108906, 108912, 108919, 108926, + 108933, 108939, 108946, 108953, 108959, 108965, 108971, 108977, 108984, + 108991, 108997, 109003, 109010, 109016, 109023, 109030, 109037, 109044, + 109051, 109057, 109064, 109071, 109078, 109084, 109091, 109098, 109105, + 109111, 109118, 109125, 109131, 109137, 109143, 109149, 109156, 109163, + 109169, 109175, 109182, 109188, 109195, 109202, 109209, 109216, 109223, + 109227, 109232, 109237, 109242, 109246, 109251, 109256, 109261, 109265, + 109270, 109275, 109279, 109283, 109287, 109291, 109296, 109301, 109305, + 109309, 109314, 109318, 109323, 109328, 109333, 109338, 109343, 109347, + 109352, 109357, 109362, 109366, 109371, 109376, 109381, 109385, 109390, + 109395, 109399, 109403, 109407, 109411, 109416, 109421, 109425, 109429, + 109434, 109438, 109443, 109448, 109453, 109458, 109463, 109469, 0, 0, + 109476, 109481, 109486, 109491, 109496, 109501, 109506, 109511, 109516, + 109521, 109526, 109531, 109536, 109541, 109546, 109551, 109556, 109561, + 109567, 109572, 109577, 109582, 109587, 109592, 109597, 109602, 109606, + 109611, 109616, 109621, 109626, 109631, 109636, 109641, 109646, 109651, + 109656, 109661, 109666, 109671, 109676, 109681, 109686, 109691, 109697, + 109702, 109707, 109712, 109717, 109722, 109727, 109732, 109738, 109743, + 109748, 109753, 109758, 109763, 109768, 109773, 109778, 109783, 109788, + 109793, 109798, 109803, 109808, 109813, 109818, 109823, 109828, 109833, + 109838, 109843, 109848, 109853, 109859, 109864, 109869, 109874, 109879, + 109884, 109889, 109894, 109898, 109903, 109908, 109913, 109918, 109923, + 109928, 109933, 109938, 109943, 109948, 109953, 109958, 109963, 109968, + 109973, 109978, 109983, 109989, 109994, 109999, 110004, 110009, 110014, + 110019, 110024, 110030, 110035, 110040, 110045, 110050, 110055, 110060, + 110066, 110072, 110078, 110084, 110090, 110096, 110102, 110108, 110114, + 110120, 110126, 110132, 110138, 110144, 110150, 110156, 110162, 110169, + 110175, 110181, 110187, 110193, 110199, 110205, 110211, 110216, 110222, + 110228, 110234, 110240, 110246, 110252, 110258, 110264, 110270, 110276, + 110282, 110288, 110294, 110300, 110306, 110312, 110318, 110325, 110331, + 110337, 110343, 110349, 110355, 110361, 110367, 110374, 110380, 110386, + 110392, 110398, 110404, 110410, 110416, 110422, 110428, 110434, 110440, + 110446, 110452, 110458, 110464, 110470, 110476, 110482, 110488, 110494, + 110500, 110506, 110512, 110519, 110525, 110531, 110537, 110543, 110549, + 110555, 110561, 110566, 110572, 110578, 110584, 110590, 110596, 110602, + 110608, 110614, 110620, 110626, 110632, 110638, 110644, 110650, 110656, + 110662, 110668, 110675, 110681, 110687, 110693, 110699, 110705, 110711, + 110717, 110724, 110730, 110736, 110742, 110748, 110754, 110760, 110767, + 110774, 110781, 110788, 110795, 110802, 110809, 110816, 110823, 110830, + 110837, 110844, 110851, 110858, 110865, 110872, 110879, 110887, 110894, + 110901, 110908, 110915, 110922, 110929, 110936, 110942, 110949, 110956, + 110963, 110970, 110977, 110984, 110991, 110998, 111005, 111012, 111019, + 111026, 111033, 111040, 111047, 111054, 111061, 111069, 111076, 111083, + 111090, 111097, 111104, 111111, 111118, 111126, 111133, 111140, 111147, + 111154, 111161, 111168, 111173, 0, 0, 111178, 111183, 111187, 111191, + 111195, 111199, 111203, 111207, 111211, 111215, 111219, 111224, 111228, + 111232, 111236, 111240, 111244, 111248, 111252, 111256, 111260, 111265, + 111269, 111273, 111277, 111281, 111285, 111289, 111293, 111297, 111301, + 111307, 111312, 111317, 111322, 111327, 111332, 111337, 111342, 111347, + 111352, 111357, 111361, 111365, 111369, 111373, 111377, 111381, 111385, + 111389, 111393, 111400, 111407, 111414, 111421, 111428, 111435, 111441, + 111448, 111455, 111462, 111470, 111478, 111486, 111494, 111502, 111510, + 111517, 111524, 111531, 111539, 111547, 111555, 111563, 111571, 111579, + 111586, 111593, 111600, 111608, 111616, 111624, 111632, 111640, 111648, + 111653, 111658, 111663, 111668, 111673, 111678, 111683, 111688, 111693, + 0, 0, 0, 0, 111698, 111703, 111707, 111711, 111715, 111719, 111723, + 111727, 111731, 111735, 111739, 111743, 111747, 111751, 111755, 111759, + 111763, 111767, 111771, 111775, 111779, 111783, 111787, 111791, 111795, + 111799, 111803, 111807, 111811, 111815, 111819, 111823, 111827, 111831, + 111835, 111839, 111843, 111847, 111851, 111855, 111859, 111863, 111867, + 111871, 111875, 111879, 111883, 111887, 111891, 111895, 111899, 111904, + 111908, 111912, 111916, 111920, 111924, 111928, 111932, 111936, 111940, + 111944, 111948, 111952, 111956, 111960, 111964, 111968, 111972, 111976, + 111980, 111984, 111988, 111992, 111996, 112000, 112004, 112008, 112012, + 112016, 112020, 112024, 112028, 112032, 112036, 112040, 112044, 112048, + 112052, 112056, 112060, 112064, 112068, 112072, 112076, 112080, 112084, + 112088, 112092, 112096, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 112100, + 112107, 112112, 112116, 112120, 112124, 112129, 112134, 112139, 112144, + 112149, 0, 0, 0, 0, 0, 112154, 112159, 112165, 112171, 112177, 112182, + 112188, 112194, 112200, 112205, 112211, 112217, 112222, 112227, 112232, + 112237, 112243, 112249, 112254, 112259, 112265, 112270, 112276, 112282, + 112288, 112294, 112300, 112310, 112317, 112323, 112326, 0, 0, 112329, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 112335, 0, 112340, 0, 0, 112346, 0, 0, 0, + 112351, 0, 0, 0, 112357, 112360, 112363, 112366, 112369, 0, 0, 0, 0, 0, + 0, 0, 0, 112372, 0, 0, 0, 0, 0, 0, 0, 112380, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 112388, 0, 112396, + 112403, 0, 0, 112410, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 112418, 112428, + 112433, 112437, 0, 0, 112442, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 112445, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 112449, 112455, + 112461, 112467, 112471, 112477, 112483, 112489, 112495, 112501, 112507, + 112513, 112519, 112525, 112531, 112537, 112543, 112549, 112555, 112561, + 112567, 112573, 112579, 112585, 112591, 112597, 112603, 112609, 112615, + 112621, 112627, 112633, 112639, 112645, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 112651, 112662, 112673, 112684, 112695, 112706, 112717, 112728, + 112739, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 112750, 112754, 112758, 112762, 112766, + 112770, 112774, 112778, 112782, 112786, 112790, 112794, 112798, 112802, + 112806, 112810, 112814, 112818, 112822, 112826, 112830, 112834, 112838, + 112842, 112846, 112850, 112854, 112858, 112862, 112866, 112870, 112874, + 112878, 112882, 112886, 112890, 112894, 112898, 112902, 112906, 112910, + 112914, 112918, 112922, 112926, 112930, 112934, 112938, 112942, 112946, + 112950, 112954, 112958, 112962, 112966, 112970, 112974, 112978, 112982, + 112986, 112990, 112994, 112998, 113002, 113006, 113010, 113014, 113018, + 113022, 113026, 113030, 113034, 113038, 113042, 113046, 113050, 113054, + 113058, 113062, 113066, 113070, 113074, 113078, 113082, 113086, 113090, + 113094, 113098, 113102, 113106, 113110, 113114, 113118, 113122, 113126, + 113130, 113134, 113138, 113142, 113146, 113150, 113154, 113158, 113162, + 113166, 113170, 113174, 113178, 113182, 113186, 113190, 113194, 113198, + 113202, 113206, 113210, 113214, 113218, 113222, 113226, 113230, 113234, + 113238, 113242, 113246, 113250, 113254, 113258, 113262, 113266, 113270, + 113274, 113278, 113282, 113286, 113290, 113294, 113298, 113302, 113306, + 113310, 113314, 113318, 113322, 113326, 113330, 113334, 113338, 113342, + 113346, 113350, 113354, 113358, 113362, 113366, 113370, 113374, 113378, + 113382, 113386, 113390, 113394, 113398, 113402, 113406, 113410, 113414, + 113418, 113422, 113426, 113430, 113434, 113438, 113442, 113446, 113450, + 113454, 113458, 113462, 113466, 113470, 113474, 113478, 113482, 113486, + 113490, 113494, 113498, 113502, 113506, 113510, 113514, 113518, 113522, + 113526, 113530, 113534, 113538, 113542, 113546, 113550, 113554, 113558, + 113562, 113566, 113570, 113574, 113578, 113582, 113586, 113590, 113594, + 113598, 113602, 113606, 113610, 113614, 113618, 113622, 113626, 113630, + 113634, 113638, 113642, 113646, 113650, 113654, 113658, 113662, 113666, + 113670, 113674, 113678, 113682, 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, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 114918, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 114922, 114925, 114929, 114933, 114936, 114940, 114944, 114947, + 114950, 114954, 114958, 114961, 114964, 114967, 114970, 114975, 114978, + 114982, 114985, 114988, 114991, 114994, 114997, 115000, 115003, 115006, + 115009, 115012, 115015, 115019, 115023, 115027, 115031, 115036, 115041, + 115047, 115053, 115059, 115064, 115070, 115076, 115082, 115087, 115093, + 115099, 115104, 115109, 115114, 115119, 115125, 115131, 115136, 115141, + 115147, 115152, 115158, 115164, 115170, 115176, 115182, 115186, 115191, + 115195, 115200, 115204, 115209, 115214, 115220, 115226, 115232, 115237, + 115243, 115249, 115255, 115260, 115266, 115272, 115277, 115282, 115287, + 115292, 115298, 115304, 115309, 115314, 115320, 115325, 115331, 115337, + 115343, 115349, 115355, 115360, 115364, 115369, 115372, 115376, 115379, + 115382, 115385, 115388, 115391, 115394, 115397, 115400, 115403, 115406, + 115409, 115412, 115415, 115418, 115421, 115424, 115427, 115430, 115433, + 115436, 115439, 115442, 115445, 115448, 115451, 115454, 115457, 115460, + 115463, 115466, 115469, 115472, 115475, 115478, 115481, 115484, 115487, + 115490, 115493, 115496, 115499, 115502, 115505, 115508, 115511, 115514, + 115517, 115520, 115523, 115526, 115529, 115532, 115535, 115538, 115541, + 115544, 115547, 115550, 115553, 115556, 115559, 115562, 115565, 115568, + 115571, 115574, 115577, 115580, 115583, 115586, 115589, 115592, 115595, + 115598, 115601, 115604, 115607, 115610, 115613, 115616, 115619, 115622, + 115625, 115628, 115631, 115634, 115637, 115640, 115643, 115646, 115649, + 115652, 115655, 115658, 115661, 115664, 115667, 115670, 115673, 115676, + 115679, 115682, 115685, 115688, 115691, 115694, 115697, 115700, 115703, + 115706, 115709, 115712, 115715, 115718, 115721, 115724, 115727, 115730, + 115733, 115736, 115739, 115742, 115745, 115748, 115751, 115754, 115757, + 115760, 115763, 115766, 115769, 115772, 115775, 115778, 115781, 115784, + 115787, 115790, 115793, 115796, 115799, 115802, 115805, 115808, 115811, + 115814, 115817, 115820, 115823, 115826, 115829, 115832, 115835, 115838, + 115841, 115844, 115847, 115850, 115853, 115856, 115859, 115862, 115865, + 115868, 115871, 115874, 115877, 115880, 115883, 115886, 115889, 115892, + 115895, 115898, 115901, 115904, 115907, 115910, 115913, 115916, 115919, + 115922, 115925, 115928, 115931, 115934, 115937, 115940, 115943, 115946, + 115949, 115952, 115955, 115958, 115961, 115964, 115967, 115970, 115973, + 115976, 115979, 115982, 115985, 115988, 115991, 115994, 115997, 116000, + 116003, 116006, 116009, 116012, 116015, 116018, 116021, 116024, 116027, + 116030, 116033, 116036, 116039, 116042, 116045, 116048, 116051, 116054, + 116057, 116060, 116063, 116066, 116069, 116072, 116075, 116078, 116081, + 116084, 116087, 116090, 116093, 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, 0, 0, 0, 7929, 0, 194682, 0, 0, 66480, 0, 42833, 74529, - 12064, 0, 596, 0, 0, 65842, 8651, 0, 0, 120218, 12995, 64865, 1373, 0, 0, - 5816, 119067, 64810, 4231, 917833, 0, 4233, 4234, 4232, 917836, 0, - 120210, 917841, 917840, 0, 8851, 0, 0, 0, 41601, 8874, 0, 7748, 0, 0, 0, - 0, 41603, 9784, 0, 9188, 41600, 0, 0, 0, 1457, 3535, 0, 0, 0, 0, 65240, - 11951, 0, 3404, 0, 0, 0, 1759, 0, 194964, 0, 0, 0, 66577, 0, 0, 65859, 0, - 0, 0, 0, 0, 0, 65930, 9834, 3055, 9852, 0, 65288, 0, 11398, 0, 0, 119255, - 0, 0, 603, 0, 43548, 0, 0, 917824, 3350, 120817, 64318, 917828, 127089, - 3390, 74483, 43265, 120599, 917830, 917829, 0, 1919, 3400, 0, 917813, 0, - 917540, 66446, 64141, 8562, 64139, 64138, 4043, 8712, 64134, 64133, - 11297, 0, 0, 11966, 64128, 0, 0, 0, 64132, 10867, 64130, 64129, 0, 0, - 9779, 2764, 66002, 0, 9471, 0, 66021, 0, 0, 5457, 5440, 8857, 0, 65282, - 2843, 5355, 0, 0, 0, 5194, 11657, 0, 0, 0, 0, 0, 0, 127027, 10717, 64570, - 5630, 74350, 64143, 10682, 0, 10602, 800, 42499, 66186, 0, 0, 64930, - 11631, 64146, 64145, 64144, 762, 13172, 118859, 0, 0, 10906, 1353, 6960, - 0, 0, 5828, 8724, 917806, 8933, 1601, 42244, 858, 7080, 917808, 917807, - 8090, 0, 74401, 917811, 587, 0, 0, 0, 0, 0, 0, 2750, 0, 556, 64158, - 64157, 0, 12213, 0, 2760, 0, 0, 0, 0, 64156, 64155, 42496, 0, 64151, - 64150, 12679, 10053, 10421, 11787, 64153, 64152, 0, 0, 4839, 0, 0, 1874, - 120352, 0, 6577, 64125, 64124, 64123, 0, 0, 0, 7007, 7590, 65443, 9036, - 0, 64122, 74422, 66609, 0, 64117, 64116, 6287, 64114, 2725, 64120, 64119, - 64118, 42128, 0, 1177, 65601, 12322, 64106, 0, 0, 64102, 7859, 1945, - 64099, 0, 10453, 64104, 7188, 7997, 0, 0, 0, 8705, 64097, 64096, 9571, - 528, 917989, 0, 11429, 0, 0, 0, 0, 73841, 0, 0, 9056, 0, 6188, 120019, - 6155, 64068, 1823, 64066, 64065, 64072, 64071, 63, 7233, 0, 0, 41904, - 6639, 64064, 0, 0, 0, 1176, 118959, 0, 8162, 0, 0, 0, 120519, 66376, - 66242, 11415, 4333, 9855, 64112, 64642, 0, 5388, 0, 0, 0, 7714, 66222, 0, - 7768, 0, 4199, 64708, 0, 0, 0, 8708, 9560, 64077, 64076, 8996, 4992, - 4471, 42622, 64079, 64078, 0, 0, 0, 0, 64615, 0, 0, 12075, 0, 0, 5174, 0, - 0, 0, 3123, 0, 12685, 0, 8408, 64704, 0, 0, 9223, 0, 41616, 0, 73797, 0, - 1116, 0, 43049, 0, 43050, 8548, 0, 0, 119061, 0, 0, 13115, 64092, 64091, - 9322, 0, 120595, 64095, 64094, 8111, 66247, 42332, 64089, 64088, 6199, 0, - 0, 11434, 64083, 64082, 11329, 7737, 64087, 64086, 64085, 64084, 0, 0, - 41335, 4118, 1797, 0, 41334, 0, 46, 0, 0, 298, 0, 0, 0, 42627, 0, 32, - 6187, 119052, 11495, 11459, 3665, 0, 42871, 0, 19923, 74335, 0, 0, 66239, - 0, 64403, 4412, 7240, 0, 0, 0, 65758, 12750, 4181, 8544, 0, 120199, 0, - 120198, 120203, 6181, 65014, 0, 0, 0, 3639, 119588, 0, 0, 0, 10073, - 120206, 0, 0, 0, 42844, 7498, 1098, 0, 0, 0, 0, 10207, 8789, 0, 0, 0, 0, - 9234, 0, 6182, 0, 65058, 0, 0, 0, 0, 5471, 9461, 5573, 118936, 5473, 44, - 0, 66244, 118907, 0, 66238, 12844, 0, 1622, 7767, 1900, 41339, 11458, 0, - 0, 6581, 5576, 0, 64405, 41337, 0, 0, 8947, 0, 0, 41694, 0, 0, 7908, 0, - 10408, 6579, 0, 194829, 0, 0, 0, 6583, 7761, 127010, 120504, 194828, 0, - 5058, 41010, 9992, 0, 5057, 0, 0, 74538, 5054, 118951, 194971, 0, 0, - 1437, 41617, 658, 3497, 0, 7486, 5061, 5060, 4235, 0, 0, 0, 12113, 4236, - 4727, 0, 0, 7693, 10749, 0, 7488, 5773, 978, 0, 0, 41619, 10239, 0, 0, - 66209, 0, 0, 9748, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9341, - 119596, 2379, 11325, 0, 64668, 67854, 8125, 120545, 0, 119175, 917940, - 2369, 0, 0, 0, 119235, 74092, 73936, 7008, 0, 0, 0, 0, 2367, 0, 0, 264, - 2375, 8060, 6194, 119858, 1844, 119084, 0, 12858, 0, 0, 6961, 0, 0, 0, - 8800, 0, 42862, 4463, 65581, 6192, 194676, 42771, 0, 0, 725, 65042, + 74224, 4851, 0, 78156, 78499, 0, 7929, 0, 194682, 0, 78500, 66480, 0, + 42833, 74529, 12064, 0, 596, 0, 0, 13192, 8651, 0, 0, 120218, 12995, + 64865, 1373, 0, 0, 5816, 119067, 64810, 4231, 6825, 0, 4233, 4234, 4232, + 917836, 74415, 120210, 6384, 917840, 78108, 8851, 0, 0, 0, 41601, 8874, + 0, 7748, 0, 0, 0, 0, 41603, 9784, 0, 9188, 41600, 0, 120618, 0, 1457, + 3535, 0, 0, 0, 0, 65240, 11951, 0, 3404, 0, 0, 0, 1759, 0, 41076, 68383, + 120572, 119205, 66577, 0, 0, 65859, 0, 7404, 0, 0, 0, 0, 65908, 9834, + 3055, 9852, 0, 65288, 0, 11398, 0, 0, 119255, 0, 0, 603, 74398, 43548, 0, + 0, 917824, 3350, 120817, 64318, 917828, 127089, 3390, 74483, 43265, + 120599, 917830, 78573, 0, 1919, 3400, 0, 917813, 0, 917540, 66446, 64141, + 8562, 64139, 64138, 4043, 8712, 64134, 64133, 11297, 0, 0, 11966, 64128, + 0, 0, 0, 64132, 10867, 64130, 64129, 0, 43374, 9779, 2764, 66002, 10167, + 9471, 0, 66021, 0, 0, 5457, 5440, 8857, 0, 65282, 2843, 5355, 0, 0, 0, + 5194, 11657, 43984, 0, 0, 0, 0, 0, 127027, 10717, 64570, 5630, 74350, + 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, 0, 0, 0, 0, 78214, 2750, 0, 556, 64158, 64157, 0, + 12213, 194678, 2760, 0, 0, 0, 0, 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, 0, 0, 7007, 7590, 65443, 9036, 0, 64122, + 74422, 66609, 0, 64117, 64116, 6287, 64114, 2725, 64120, 64119, 43981, + 42128, 0, 1177, 65601, 12322, 64106, 0, 127306, 64102, 7859, 1945, 64099, + 0, 10453, 64104, 7188, 7997, 0, 7389, 0, 8705, 64097, 64096, 9571, 528, + 917989, 44017, 11429, 0, 0, 0, 917990, 73841, 0, 0, 9056, 0, 6188, + 120019, 6155, 64068, 1823, 64066, 64065, 64072, 64071, 63, 7233, 120698, + 0, 41904, 6639, 64064, 0, 0, 0, 1176, 118959, 0, 8162, 0, 0, 0, 120519, + 66376, 66242, 11415, 4333, 9855, 64112, 64642, 0, 5388, 0, 0, 0, 7714, + 66222, 0, 7768, 0, 4199, 64708, 0, 0, 0, 8708, 9560, 64077, 64076, 8996, + 4992, 4471, 42622, 64079, 64078, 0, 0, 0, 0, 64615, 0, 0, 12075, 0, 0, + 5174, 0, 0, 127557, 3123, 0, 12685, 0, 8408, 64704, 0, 0, 9223, 0, 41616, + 0, 73797, 0, 1116, 0, 43049, 0, 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, 0, 9927, 41335, 4118, 1797, 0, 41334, 0, 46, 43448, + 0, 298, 0, 0, 0, 42627, 0, 32, 6187, 119052, 11495, 11459, 3665, 0, + 42871, 0, 19923, 74335, 0, 0, 66239, 0, 64403, 4412, 7240, 0, 0, 0, + 65758, 12750, 4181, 8544, 0, 120199, 917897, 120198, 120203, 6181, 65014, + 0, 0, 0, 3639, 119588, 0, 0, 0, 10073, 120206, 0, 0, 68409, 42844, 7498, + 1098, 0, 0, 0, 0, 10207, 8789, 0, 0, 0, 0, 9234, 0, 6182, 0, 65058, 0, 0, + 0, 0, 5471, 9461, 5573, 118936, 5473, 44, 0, 66244, 118907, 0, 66238, + 12844, 0, 1622, 7767, 1900, 41339, 11458, 0, 0, 6581, 5576, 0, 64405, + 41337, 0, 41631, 8947, 68390, 0, 41694, 0, 0, 7908, 0, 10408, 6579, 0, + 64618, 0, 120147, 0, 6583, 7761, 127010, 120504, 194828, 0, 5058, 41010, + 9992, 0, 5057, 0, 0, 74538, 5054, 118951, 194971, 78606, 0, 1437, 41617, + 658, 3497, 0, 7486, 5061, 5060, 4235, 0, 0, 0, 12113, 4236, 4727, 0, 0, + 7693, 10749, 0, 7488, 5773, 978, 0, 0, 41619, 10239, 68611, 0, 66209, 0, + 0, 9748, 0, 127524, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9341, 119596, + 2379, 11325, 0, 64668, 67854, 8125, 120545, 6743, 119175, 917940, 2369, + 0, 0, 0, 119235, 74092, 73936, 7008, 43660, 0, 0, 0, 2367, 0, 0, 264, + 2375, 8060, 6194, 119858, 1844, 119084, 0, 12858, 0, 0, 6961, 0, 118839, + 0, 8800, 0, 42862, 4463, 65581, 6192, 194676, 42771, 0, 0, 725, 65042, 118797, 120800, 0, 12892, 0, 0, 0, 0, 0, 0, 0, 120707, 0, 0, 5074, 5073, - 0, 8983, 0, 917939, 0, 5072, 0, 6198, 11614, 0, 196, 0, 0, 0, 4929, + 0, 8983, 0, 74493, 0, 5072, 0, 6198, 11614, 0, 196, 0, 0, 0, 4929, 120342, 0, 0, 0, 0, 42847, 0, 0, 0, 4934, 0, 41323, 9758, 0, 120341, 0, 42584, 0, 4329, 41321, 4979, 3048, 7752, 41320, 0, 74418, 12819, 0, 5071, - 0, 3642, 0, 5070, 10042, 0, 3987, 5068, 0, 0, 120216, 0, 0, 10636, 73981, - 11806, 43167, 4531, 1245, 9105, 66463, 4921, 120219, 4926, 65544, 73884, - 194619, 0, 0, 64709, 0, 194620, 120790, 4922, 325, 992, 119568, 4925, 0, - 0, 9526, 4920, 0, 948, 0, 120208, 4930, 0, 0, 120275, 4933, 0, 0, 0, - 4928, 0, 0, 74770, 0, 0, 722, 0, 19908, 12637, 0, 119855, 8753, 1509, 0, - 5468, 9511, 0, 0, 1672, 6205, 10864, 74586, 0, 0, 0, 0, 0, 73863, 0, 0, - 41607, 120115, 1679, 120116, 194932, 120113, 0, 7005, 41609, 9580, 0, - 401, 0, 120109, 6968, 5761, 342, 8553, 0, 8143, 127115, 11983, 127113, - 624, 74508, 0, 119630, 5078, 74258, 12478, 0, 5076, 0, 194609, 0, 120097, - 685, 9025, 1524, 12618, 0, 5539, 0, 120095, 120102, 120094, 120552, 0, - 194611, 0, 0, 12520, 8058, 9732, 0, 5080, 64775, 5036, 5035, 120590, - 42604, 0, 0, 8074, 275, 13291, 1907, 0, 4432, 0, 5033, 0, 0, 4836, 3888, - 73792, 10729, 64546, 194600, 120681, 194937, 0, 67588, 119000, 0, 0, - 8858, 6409, 0, 120252, 0, 0, 0, 66321, 0, 12814, 0, 3432, 10218, 0, 6094, + 0, 3642, 0, 5070, 10042, 118835, 3987, 5068, 0, 8909, 78650, 78649, 0, + 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, 0, 120275, + 4933, 0, 0, 118985, 4928, 0, 0, 74770, 120194, 0, 722, 0, 19908, 12637, + 0, 119855, 8753, 1509, 0, 5468, 9511, 0, 0, 1672, 6205, 10864, 74586, 0, + 0, 0, 0, 0, 73863, 0, 0, 41607, 120115, 1679, 120116, 120180, 120113, 0, + 7005, 41609, 9580, 0, 401, 0, 120109, 6968, 5761, 342, 8553, 0, 8143, + 127115, 11983, 127113, 624, 74508, 0, 119630, 5078, 74258, 12478, 0, + 5076, 0, 194609, 0, 120097, 685, 9025, 1524, 12618, 0, 5539, 0, 120095, + 120102, 120094, 120552, 0, 194611, 78752, 0, 12520, 8058, 9732, 0, 5080, + 64775, 5036, 5035, 120590, 42604, 0, 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, 0, 0, 0, 66321, 0, 12814, 127248, 3432, 10218, 0, 6094, 7641, 42445, 0, 0, 42406, 1676, 74320, 194607, 0, 5030, 0, 0, 0, 0, 9622, - 0, 0, 0, 0, 0, 0, 0, 10544, 12919, 0, 0, 0, 0, 0, 0, 0, 947, 119835, - 194586, 194585, 10969, 119935, 7613, 119937, 119936, 4795, 119930, 7018, - 64914, 0, 120192, 120268, 0, 43567, 74056, 917910, 0, 119919, 7216, - 65232, 7217, 251, 7218, 7895, 4395, 43538, 119926, 119929, 119928, 7213, - 119922, 7214, 7215, 0, 74141, 8880, 7685, 0, 120173, 65540, 119618, 625, - 8187, 42861, 1113, 7236, 7915, 3630, 120176, 8179, 74264, 67886, 9316, - 10980, 2489, 65624, 8150, 1359, 0, 0, 0, 73756, 5042, 5041, 42769, 12084, - 0, 0, 0, 0, 0, 0, 0, 0, 12283, 1616, 3795, 0, 8795, 66245, 0, 0, 0, 1138, - 73905, 12677, 0, 0, 3239, 0, 0, 0, 8431, 0, 42164, 0, 11778, 12620, 0, - 73773, 119073, 5040, 0, 0, 0, 0, 0, 5039, 0, 0, 0, 5038, 0, 0, 13184, - 74293, 0, 64648, 0, 9359, 0, 0, 0, 65157, 6662, 0, 0, 3863, 73909, 4835, - 0, 0, 0, 4309, 0, 194569, 0, 194568, 1301, 0, 119595, 569, 0, 0, 711, - 119085, 0, 0, 73880, 11610, 11368, 0, 194571, 41331, 1006, 74240, 0, - 1550, 8201, 73737, 7627, 5499, 5031, 0, 0, 65784, 0, 65267, 3758, 0, - 65781, 64734, 0, 2440, 65780, 0, 8449, 0, 5008, 0, 8822, 0, 12121, 8255, - 5512, 73875, 119560, 0, 64313, 2641, 5906, 1119, 127068, 13038, 0, 2455, - 0, 118809, 0, 0, 0, 0, 8714, 0, 4211, 0, 0, 0, 0, 0, 5052, 66220, 5821, - 6186, 65778, 65775, 5051, 65773, 1429, 42647, 5050, 302, 388, 41115, 735, - 6637, 5907, 120670, 0, 12726, 74594, 9117, 0, 0, 5513, 6666, 5053, 74230, - 5510, 0, 0, 0, 2470, 0, 0, 1925, 0, 0, 0, 0, 5048, 5047, 0, 0, 0, 194863, - 0, 74497, 0, 8089, 6929, 639, 0, 68179, 0, 0, 0, 4599, 41402, 6674, - 120631, 43294, 1476, 648, 0, 65819, 3233, 0, 0, 10164, 0, 0, 3530, 9750, - 0, 0, 6656, 194858, 0, 5046, 8512, 65856, 74261, 8967, 0, 5045, 0, 1916, - 7986, 5044, 120556, 9006, 13128, 5043, 0, 7853, 74068, 74004, 9669, - 12341, 12703, 8402, 0, 119070, 0, 41750, 3586, 64508, 43148, 0, 0, - 119606, 0, 13296, 517, 0, 0, 0, 41528, 123, 65454, 0, 0, 74478, 10531, - 7784, 41526, 10829, 73991, 8057, 1126, 73895, 0, 194591, 0, 3925, 0, - 8069, 43142, 120439, 489, 0, 0, 120441, 120452, 43151, 0, 0, 66200, 0, 0, - 0, 0, 0, 0, 8711, 6183, 0, 0, 0, 120448, 7623, 118925, 194853, 9235, - 12760, 74176, 0, 66445, 43540, 120437, 3743, 11514, 11078, 0, 12136, 0, - 0, 120435, 0, 7726, 0, 19922, 267, 3393, 0, 1371, 194849, 0, 2458, 0, - 6201, 0, 41074, 4266, 10652, 41612, 41077, 3402, 9050, 3398, 0, 0, 0, - 3391, 41075, 2476, 0, 917550, 0, 10625, 0, 12767, 13017, 0, 64261, 64934, - 0, 13014, 13013, 0, 6673, 0, 0, 0, 12438, 0, 0, 0, 0, 0, 9053, 13015, - 74523, 0, 704, 66215, 6195, 0, 6660, 194941, 917760, 917793, 0, 12629, - 11435, 0, 0, 65538, 0, 0, 0, 74547, 0, 65448, 0, 12948, 195003, 195002, - 119238, 195004, 195007, 195006, 0, 0, 4287, 8276, 4902, 1131, 0, 0, - 66728, 1816, 0, 42533, 168, 0, 4898, 64298, 0, 0, 4901, 1821, 0, 578, + 0, 0, 6787, 0, 0, 0, 0, 10544, 12919, 0, 0, 0, 0, 0, 120789, 0, 947, + 119835, 194586, 194585, 10969, 119935, 7613, 119937, 119936, 4795, + 119930, 7018, 7376, 120181, 120192, 120268, 0, 43567, 74056, 917910, + 118963, 119919, 7216, 65232, 7217, 251, 7218, 7895, 4395, 43538, 119926, + 119929, 119928, 7213, 119922, 7214, 7215, 0, 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, 0, 0, + 73756, 5042, 5041, 42769, 12084, 0, 0, 0, 127319, 0, 917906, 0, 0, 12283, + 1616, 3795, 0, 8795, 66245, 0, 0, 0, 1138, 73905, 12677, 0, 0, 3239, 0, + 0, 0, 8431, 0, 42164, 0, 11778, 12620, 6826, 73773, 119073, 5040, 0, 0, + 0, 78420, 0, 5039, 0, 78418, 0, 5038, 0, 0, 13184, 74293, 0, 64648, 0, + 9359, 78416, 0, 0, 65157, 6662, 0, 0, 3863, 73909, 4835, 55266, 43432, 0, + 4309, 0, 194569, 0, 194568, 1301, 0, 42589, 569, 0, 73813, 711, 119085, + 0, 0, 73880, 11610, 11368, 0, 194571, 41331, 1006, 74240, 0, 1550, 8201, + 73737, 7627, 5499, 5031, 77908, 42738, 65784, 77907, 65267, 3758, 0, + 65781, 64734, 0, 2440, 65780, 77913, 8449, 0, 5008, 0, 8822, 0, 12121, + 8255, 5512, 73875, 119560, 0, 64313, 2641, 5906, 1119, 127068, 13038, 0, + 2455, 0, 118809, 0, 0, 0, 0, 8714, 0, 4211, 0, 0, 0, 0, 43713, 5052, + 66220, 5821, 6186, 65778, 65775, 5051, 65773, 1429, 42647, 5050, 302, + 388, 41115, 735, 6637, 5907, 120670, 0, 12726, 74594, 9117, 0, 195010, + 5513, 6666, 5053, 74230, 5510, 78451, 0, 78447, 2470, 78437, 0, 1925, 0, + 0, 74807, 0, 5048, 5047, 0, 0, 0, 194863, 0, 74497, 0, 8089, 6929, 639, + 0, 68179, 0, 0, 0, 4599, 41402, 6674, 43397, 43294, 1476, 648, 0, 65819, + 3233, 0, 41782, 6951, 0, 0, 3530, 9750, 0, 0, 6656, 194858, 0, 5046, + 8512, 65856, 74261, 8967, 0, 5045, 0, 1916, 7986, 5044, 120556, 9006, + 13128, 5043, 0, 7853, 74068, 74004, 9669, 12341, 12703, 8402, 0, 119070, + 0, 41750, 3586, 64508, 43148, 0, 0, 119606, 0, 13296, 517, 0, 0, 0, + 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, 0, 0, 66200, 0, 0, 0, 78423, 0, 0, 8711, 6183, 0, + 0, 0, 120448, 7623, 118925, 194853, 9235, 12760, 74176, 0, 66445, 43540, + 120437, 3743, 11514, 11078, 0, 12136, 0, 0, 120435, 0, 7726, 0, 19922, + 267, 3393, 42198, 1371, 194849, 69233, 2458, 0, 6201, 0, 41074, 4266, + 10652, 41612, 41077, 3402, 9050, 3398, 0, 0, 0, 3391, 41075, 2476, 0, + 917550, 0, 10625, 0, 12767, 13017, 78743, 64261, 64934, 127537, 13014, + 13013, 0, 6673, 0, 0, 0, 12438, 0, 0, 0, 0, 0, 9053, 13015, 74523, 0, + 704, 66215, 6195, 0, 6660, 78758, 917760, 917793, 42212, 12629, 11435, 0, + 55256, 65538, 0, 0, 0, 74547, 0, 65448, 78100, 12948, 119001, 195002, + 119238, 195004, 78099, 127085, 0, 0, 4287, 8276, 4902, 1131, 0, 78458, + 66728, 1816, 0, 42533, 168, 42845, 4898, 64298, 0, 0, 4901, 1821, 0, 578, 3653, 0, 791, 9162, 6977, 0, 119298, 74561, 0, 73731, 8354, 43590, 0, 0, 7557, 0, 119301, 8234, 7241, 0, 194994, 119167, 194996, 12811, 65925, - 3946, 195000, 10998, 0, 673, 194867, 64397, 0, 74599, 0, 0, 194977, - 194976, 2448, 194978, 10267, 8424, 2452, 120760, 194864, 8729, 0, 0, - 7845, 0, 0, 4408, 4122, 0, 11039, 8723, 194990, 194989, 119302, 731, - 119304, 119303, 2438, 64855, 119300, 119299, 1175, 0, 42135, 373, 119172, - 5396, 11457, 11521, 7723, 0, 0, 0, 41952, 0, 5273, 8248, 5269, 0, 5202, - 2404, 5267, 42823, 11291, 19915, 5277, 12963, 0, 6189, 4125, 1314, 12133, - 0, 118873, 1271, 0, 0, 66024, 41482, 3864, 74539, 0, 3879, 0, 12978, - 4166, 4574, 0, 7567, 7459, 0, 41390, 5384, 41882, 67647, 0, 0, 0, 0, - 41388, 0, 41392, 64288, 41387, 0, 8706, 5552, 0, 700, 0, 5553, 0, 7088, - 5356, 7499, 0, 66596, 0, 0, 0, 5554, 0, 12344, 10311, 0, 6665, 0, 0, - 7618, 8517, 11455, 0, 64632, 66017, 5555, 0, 0, 0, 0, 119204, 65033, - 9143, 6668, 195067, 195066, 195069, 656, 195071, 65037, 4577, 64624, 0, - 0, 0, 0, 4269, 73885, 917775, 42846, 917774, 950, 0, 0, 66580, 118895, - 66683, 10554, 917778, 119121, 0, 5098, 917770, 0, 119099, 5097, 4935, - 9848, 10381, 0, 0, 0, 3651, 0, 0, 0, 5102, 5101, 10269, 12983, 8138, 0, - 1932, 5100, 1439, 12093, 1247, 10034, 195064, 5099, 0, 1441, 42087, 3063, - 650, 0, 7838, 0, 195041, 195040, 119142, 9031, 195045, 195044, 9078, - 8545, 66356, 195048, 0, 9154, 9118, 0, 0, 2676, 7750, 0, 73812, 6190, - 8599, 195053, 0, 10795, 9857, 7014, 9858, 195033, 0, 12129, 0, 8481, 0, - 6202, 195035, 10920, 195037, 5203, 195039, 195038, 5108, 5107, 65818, - 66019, 9762, 0, 5541, 74772, 0, 12613, 5284, 6657, 207, 0, 4275, 74819, - 854, 68147, 74381, 0, 0, 5103, 0, 64348, 41368, 0, 488, 0, 0, 0, 10157, - 0, 43034, 11438, 0, 0, 0, 118839, 41771, 5106, 6669, 8504, 65154, 195025, - 41367, 5105, 195030, 195029, 6476, 5104, 0, 304, 3176, 0, 0, 932, 0, - 6567, 238, 74522, 195011, 195010, 19905, 120577, 195015, 120187, 41044, - 67640, 0, 64814, 9912, 65939, 10670, 74093, 13273, 0, 12552, 195019, - 8803, 309, 6622, 8151, 10858, 194596, 67636, 0, 12568, 0, 12553, 0, - 43275, 6950, 9712, 0, 0, 0, 65165, 0, 0, 66466, 0, 0, 0, 66725, 6191, - 11351, 10437, 11316, 67634, 0, 0, 41754, 67635, 9370, 2720, 194975, 0, - 8232, 118817, 0, 3222, 0, 0, 0, 66663, 0, 0, 10834, 0, 0, 65732, 0, 0, - 119579, 0, 195020, 0, 7781, 41383, 64568, 0, 120738, 12077, 0, 0, 0, - 42396, 0, 3475, 0, 2479, 0, 3632, 0, 10698, 0, 3648, 194960, 74844, - 67639, 3636, 67894, 3650, 8837, 65229, 1843, 42283, 0, 41562, 0, 74548, - 0, 3640, 0, 42321, 7284, 194974, 194973, 194950, 194949, 194952, 194951, - 0, 194953, 42080, 2529, 0, 0, 0, 42083, 194955, 194606, 194957, 67619, - 66367, 194958, 9634, 0, 9988, 0, 41068, 0, 0, 65264, 0, 0, 917923, 0, - 785, 8236, 194942, 9027, 68160, 67623, 64383, 0, 925, 0, 0, 41985, 41071, - 9586, 0, 41984, 9217, 0, 0, 0, 9186, 64580, 4016, 0, 0, 381, 0, 0, 42077, - 0, 194946, 5184, 42078, 194947, 10810, 0, 4585, 19943, 5860, 67633, 0, 0, - 812, 3615, 0, 5178, 194929, 120548, 120506, 5188, 74287, 67629, 3605, - 10692, 1166, 64429, 42639, 924, 0, 67631, 0, 0, 2442, 10703, 194940, - 67632, 0, 12771, 12736, 12753, 0, 73933, 67626, 42401, 0, 0, 0, 42288, - 12751, 0, 8542, 13145, 0, 2468, 66706, 41294, 3626, 3883, 64388, 42479, - 0, 41117, 0, 0, 0, 0, 67624, 0, 1290, 0, 65585, 2715, 806, 0, 41884, 0, - 7027, 64731, 0, 0, 0, 66325, 3465, 2405, 9240, 0, 12756, 65259, 0, 0, - 12752, 5833, 1432, 0, 41883, 73912, 9799, 0, 41886, 2480, 0, 43219, 0, - 6494, 5537, 0, 0, 0, 0, 1211, 0, 0, 0, 118832, 12318, 0, 0, 0, 10622, 0, - 0, 0, 6566, 0, 0, 73780, 0, 64864, 0, 194588, 0, 8284, 0, 0, 3589, 0, - 4035, 6492, 0, 4265, 6642, 3977, 74186, 41778, 836, 119216, 2488, 0, + 3946, 78078, 10998, 78080, 673, 194867, 64397, 0, 74599, 78449, 8890, + 194977, 194976, 2448, 78085, 10267, 8424, 2452, 78083, 194864, 8729, + 78456, 0, 7845, 0, 78692, 4408, 4122, 6772, 11039, 8723, 194990, 194989, + 119302, 731, 119304, 119303, 2438, 64855, 119300, 119299, 1175, 0, 42135, + 373, 119172, 5396, 11457, 11521, 7723, 0, 0, 0, 41952, 0, 5273, 8248, + 5269, 6337, 5202, 2404, 5267, 42823, 11291, 19915, 5277, 12963, 0, 6189, + 4125, 1314, 12133, 0, 118873, 1271, 0, 0, 66024, 41482, 3864, 74539, 0, + 3879, 0, 12978, 4166, 4574, 0, 7567, 7459, 0, 41390, 5384, 41882, 67647, + 0, 5759, 0, 0, 41388, 0, 41392, 64288, 41387, 0, 8706, 5552, 0, 700, 0, + 5553, 0, 7088, 5356, 7499, 78110, 66596, 0, 0, 10263, 5554, 0, 12344, + 10311, 78113, 6665, 0, 0, 7618, 8517, 11455, 78440, 64632, 66017, 5555, + 78088, 78093, 78091, 0, 42803, 65033, 9143, 6668, 195067, 195066, 195069, + 656, 195071, 65037, 4577, 64624, 0, 0, 0, 0, 4269, 73885, 917775, 42846, + 917774, 950, 0, 0, 66580, 118895, 66683, 10554, 917778, 119121, 0, 5098, + 917770, 0, 119099, 5097, 4935, 9848, 10381, 0, 917560, 0, 3651, 0, 0, + 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, 195044, 9078, 8545, 66356, 195048, + 0, 9154, 9118, 0, 0, 2676, 7750, 0, 73812, 6190, 8599, 195053, 0, 10795, + 9857, 7014, 9856, 195033, 0, 12129, 0, 8481, 0, 6202, 195035, 10920, + 195037, 5203, 195039, 195038, 5108, 5107, 65818, 66019, 9762, 0, 5541, + 74772, 0, 12613, 5284, 6657, 207, 0, 4275, 74819, 854, 68147, 74381, 0, + 0, 5103, 0, 64348, 41368, 43974, 488, 69811, 0, 0, 10157, 0, 43034, + 11438, 0, 0, 0, 68431, 41771, 5106, 6669, 8504, 65154, 69813, 41367, + 5105, 195030, 69809, 6476, 5104, 0, 304, 3176, 0, 0, 932, 0, 6567, 238, + 74522, 195011, 194595, 19905, 120577, 195015, 120187, 41044, 67640, + 194902, 42055, 9912, 65939, 10670, 74093, 13273, 0, 12552, 195019, 8803, + 309, 6622, 8151, 10858, 194596, 67636, 0, 12568, 0, 12553, 0, 43275, + 6950, 9712, 68680, 43970, 0, 65165, 0, 0, 66466, 0, 0, 0, 66725, 6191, + 11351, 10437, 11316, 67634, 0, 0, 41754, 67635, 9370, 2720, 194975, + 68462, 8232, 118817, 0, 3222, 0, 0, 0, 66663, 0, 0, 10834, 0, 0, 65732, + 0, 917547, 119579, 67679, 195020, 0, 7781, 41383, 64568, 0, 120738, + 12077, 0, 64586, 917620, 42396, 55255, 3475, 0, 2479, 0, 3632, 120728, + 10698, 8376, 3648, 194960, 74844, 67639, 3636, 67894, 3650, 8837, 65229, + 1843, 42283, 43250, 41562, 9100, 74548, 0, 3640, 0, 42321, 7284, 194974, + 194973, 194950, 194949, 194952, 194951, 0, 194953, 42080, 2529, 0, 0, 0, + 42083, 120678, 68398, 194957, 67619, 66367, 194958, 9634, 0, 9988, 0, + 41068, 0, 0, 65264, 0, 0, 917923, 0, 785, 8236, 194942, 9027, 68160, + 67623, 64383, 0, 925, 0, 0, 41985, 41071, 9586, 0, 41984, 9217, 0, 0, 0, + 9186, 2067, 4016, 0, 0, 381, 0, 0, 42077, 0, 194946, 5184, 42078, 194947, + 10810, 0, 4585, 19943, 5860, 67633, 0, 0, 812, 3615, 0, 5178, 44000, + 120548, 78807, 5188, 74287, 67629, 3605, 10692, 1166, 64429, 42639, 924, + 0, 67631, 0, 0, 2442, 10703, 78789, 67632, 917924, 12771, 12736, 12753, + 0, 73933, 67626, 42401, 0, 0, 127373, 42288, 12751, 0, 8542, 13145, 0, + 2468, 66706, 41294, 3626, 3883, 64388, 42479, 0, 41117, 0, 0, 0, 0, + 67624, 0, 1290, 0, 65585, 2715, 806, 65208, 41884, 917883, 7027, 64731, + 0, 0, 0, 66325, 3465, 2405, 9240, 0, 12756, 65259, 0, 0, 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, 0, 10622, 0, 0, + 0, 6566, 78659, 0, 73780, 0, 64864, 0, 78660, 0, 8284, 0, 0, 3589, 0, + 4035, 6492, 118981, 4265, 6642, 3977, 74186, 41778, 836, 119216, 2488, 0, 4582, 0, 0, 41777, 12926, 0, 7528, 10550, 0, 0, 0, 0, 0, 1374, 64878, - 119014, 0, 42389, 41374, 0, 0, 0, 41377, 0, 0, 400, 12597, 0, 0, 0, 6661, - 0, 64827, 0, 73817, 390, 0, 74755, 0, 3473, 7718, 0, 0, 0, 0, 0, 0, 0, - 11969, 0, 0, 8004, 1887, 0, 0, 8080, 7006, 0, 0, 0, 0, 1544, 0, 0, 64677, - 120716, 0, 6146, 0, 771, 0, 0, 12812, 13168, 42272, 12200, 917927, 7904, - 0, 953, 12917, 0, 12300, 0, 11491, 9724, 10341, 0, 9524, 7490, 11389, - 7489, 3379, 0, 7487, 0, 471, 7484, 7482, 7481, 7480, 7479, 7478, 7477, - 6501, 7475, 6918, 7473, 7472, 2474, 7470, 7468, 10232, 10615, 10213, 0, - 120222, 10049, 0, 3544, 0, 6017, 65311, 0, 0, 13306, 10533, 7870, 73949, - 7625, 0, 120544, 0, 0, 0, 0, 0, 0, 19961, 2472, 0, 120699, 0, 6019, 4256, - 120776, 74380, 0, 73847, 73844, 12845, 0, 0, 65138, 119355, 67862, 0, 0, - 120000, 120008, 8066, 7678, 74865, 0, 0, 0, 0, 7186, 0, 120555, 0, 445, - 120566, 0, 0, 0, 8330, 0, 0, 42797, 0, 120215, 0, 3902, 0, 1770, 0, 0, - 1560, 120209, 0, 4584, 73843, 0, 11712, 10866, 0, 1118, 0, 0, 0, 1081, - 7436, 0, 7252, 0, 5996, 0, 4903, 0, 41386, 5162, 119189, 1330, 0, 64530, - 0, 12047, 41384, 0, 0, 1848, 4334, 0, 41975, 64777, 10674, 12308, 0, 0, - 0, 0, 12715, 0, 0, 0, 2018, 66672, 41979, 66685, 119157, 0, 0, 0, 126984, - 0, 9334, 0, 0, 0, 7975, 0, 0, 0, 66621, 4884, 66597, 0, 0, 0, 6313, - 65513, 0, 0, 0, 0, 2345, 0, 463, 0, 0, 119607, 3117, 5460, 0, 0, 0, 0, - 42279, 194577, 0, 0, 0, 0, 0, 13248, 0, 0, 0, 0, 0, 0, 5663, 0, 0, 0, 0, - 2482, 1471, 0, 0, 42247, 12378, 73925, 0, 0, 12374, 0, 0, 0, 0, 2460, 0, - 11944, 12376, 0, 64679, 0, 12380, 10557, 64473, 5870, 0, 2024, 0, 0, 0, - 539, 0, 0, 0, 3853, 65180, 0, 120796, 120245, 0, 0, 8659, 0, 12474, 0, - 9503, 194969, 2478, 0, 4162, 0, 4260, 12953, 0, 120089, 12470, 0, 74189, - 2742, 12476, 11798, 10946, 0, 5000, 0, 0, 0, 0, 8213, 74017, 7771, 6161, - 0, 0, 0, 0, 0, 0, 120582, 0, 0, 10301, 10333, 10397, 0, 0, 73791, 0, 0, - 0, 0, 0, 4014, 12842, 73952, 12015, 0, 8275, 3893, 0, 0, 0, 7221, 42147, - 0, 74550, 74465, 64747, 118841, 0, 12516, 0, 0, 119017, 74537, 10892, - 8231, 0, 6473, 41968, 0, 41973, 3591, 41969, 0, 2453, 0, 0, 0, 0, 0, - 10349, 10413, 43591, 41962, 3202, 74353, 0, 8316, 0, 0, 0, 687, 0, 0, 0, - 1840, 0, 0, 119809, 4883, 285, 4723, 0, 0, 4459, 74577, 0, 41720, 11089, - 240, 19906, 0, 119248, 0, 9743, 120232, 13134, 0, 0, 0, 0, 0, 42634, 0, - 0, 3081, 11463, 120230, 0, 0, 10445, 0, 0, 66717, 2614, 9125, 119023, - 1729, 0, 120236, 65221, 63883, 43334, 64852, 0, 120235, 66201, 0, 66578, - 5001, 41879, 0, 4121, 5003, 884, 66700, 63879, 4943, 5150, 73889, 74182, - 0, 643, 3086, 0, 42448, 42299, 58, 0, 0, 120083, 63873, 8491, 0, 0, 0, - 4530, 42409, 0, 0, 2721, 120074, 119096, 19929, 0, 194574, 0, 4242, 4264, - 0, 0, 66179, 42412, 65941, 13114, 64522, 10740, 3094, 0, 9754, 119102, - 4437, 73948, 0, 0, 65179, 42174, 194925, 42430, 0, 0, 42355, 66026, 4306, - 41380, 0, 0, 0, 66667, 0, 0, 0, 120578, 42566, 0, 0, 5088, 6948, 0, 8524, - 0, 0, 12385, 0, 0, 0, 1386, 65034, 11480, 6116, 65039, 65038, 12392, - 65036, 8064, 0, 12101, 5822, 119004, 0, 710, 0, 11663, 1666, 42091, - 119657, 12383, 0, 42092, 0, 4289, 0, 63896, 12061, 42096, 0, 3362, 12377, - 0, 0, 0, 7461, 73901, 1244, 331, 73786, 12683, 10662, 0, 8112, 0, 65852, - 0, 12379, 0, 120818, 41964, 0, 63843, 12381, 41965, 0, 65866, 4327, 0, - 63840, 0, 41220, 13032, 0, 584, 12933, 43177, 12373, 0, 13000, 1351, 0, - 8698, 12665, 0, 1930, 0, 0, 12427, 0, 0, 13031, 0, 0, 0, 3657, 0, 65202, - 6000, 0, 12426, 0, 0, 41740, 12428, 41283, 41916, 119210, 0, 0, 12429, - 9695, 0, 7562, 0, 5170, 0, 41755, 676, 0, 0, 66664, 74427, 0, 3536, 0, - 9752, 0, 6162, 0, 0, 10113, 41829, 65886, 5159, 12422, 41832, 439, 43077, - 0, 120532, 74549, 11796, 40970, 41830, 0, 917799, 8308, 917797, 917796, - 0, 67864, 917801, 917800, 12336, 4135, 0, 341, 2727, 4129, 3539, 0, - 63861, 0, 7913, 0, 63859, 4131, 63868, 0, 63867, 4133, 11371, 210, 4600, - 0, 74560, 4137, 8082, 0, 119062, 0, 0, 4591, 0, 0, 0, 9680, 0, 120623, - 561, 12159, 195, 0, 41501, 0, 42031, 5719, 7172, 0, 8368, 0, 41499, 0, 0, - 42242, 41498, 917794, 42025, 0, 65805, 42463, 0, 2924, 0, 120510, 0, 0, - 119213, 73941, 0, 42330, 917784, 3969, 0, 0, 7169, 1992, 9652, 73977, - 7246, 42086, 917790, 917789, 0, 0, 0, 0, 0, 327, 0, 9042, 917777, 917776, - 65148, 12433, 917781, 917780, 917779, 12431, 8668, 12434, 0, 917782, - 5999, 0, 7712, 12432, 0, 0, 1726, 1015, 0, 8212, 0, 0, 42423, 119066, 0, - 0, 66709, 0, 8811, 927, 0, 0, 12436, 0, 42021, 0, 0, 1299, 12240, 42350, - 65143, 0, 195016, 0, 0, 11348, 0, 0, 0, 0, 0, 19914, 12179, 0, 9648, 0, - 63836, 63832, 917773, 10967, 63816, 2594, 3444, 63817, 64651, 0, 41503, - 0, 11265, 0, 0, 0, 0, 5664, 3972, 0, 0, 0, 917766, 12416, 917764, 119608, - 10816, 917769, 917768, 12418, 74111, 3882, 8532, 917771, 1573, 0, 119847, - 4596, 66339, 12417, 66001, 65343, 194782, 12414, 8287, 0, 0, 68108, 1143, - 119169, 0, 12415, 6626, 42763, 0, 118884, 9021, 120783, 0, 11724, 0, 0, - 127104, 194794, 0, 0, 8027, 10997, 9171, 12741, 11400, 74197, 194799, 0, - 0, 0, 0, 0, 0, 120190, 194773, 0, 194772, 42368, 0, 7715, 3881, 41487, - 12118, 42514, 0, 0, 0, 3009, 41476, 41489, 0, 3007, 1448, 3018, 0, 3889, + 119014, 0, 42389, 41374, 0, 0, 78492, 41377, 0, 0, 400, 12597, 120586, 0, + 0, 6661, 0, 64827, 0, 73817, 390, 0, 74755, 0, 3473, 7718, 0, 0, 0, + 55285, 0, 0, 0, 11969, 0, 0, 6365, 1887, 6763, 0, 8080, 7006, 0, 0, 6757, + 0, 1544, 0, 6766, 64677, 120716, 0, 6146, 0, 771, 0, 0, 12812, 13168, + 42272, 12200, 917927, 7904, 0, 953, 12917, 0, 12300, 0, 11491, 9724, + 10341, 0, 9524, 7490, 11389, 7489, 3379, 0, 7487, 0, 471, 7484, 7482, + 6753, 7480, 7479, 7478, 7477, 6501, 7475, 6918, 7473, 7472, 2474, 7470, + 7468, 10232, 10615, 10213, 0, 120222, 10049, 78884, 3544, 0, 6017, 65311, + 0, 120216, 13306, 10533, 7870, 73949, 7625, 0, 120544, 0, 0, 0, 0, 0, 0, + 19961, 2472, 42665, 120699, 0, 6019, 4256, 120776, 74380, 0, 42675, + 42658, 12845, 0, 0, 65138, 119355, 67862, 0, 65671, 120000, 120008, 8066, + 7678, 74865, 0, 0, 0, 0, 7186, 0, 120555, 0, 445, 120566, 0, 0, 0, 8330, + 0, 0, 42797, 0, 120215, 0, 3902, 0, 1770, 0, 0, 1560, 120209, 194972, + 4584, 73843, 0, 11712, 10866, 118928, 1118, 0, 0, 0, 1081, 7436, 68420, + 7252, 0, 5996, 0, 4903, 0, 41386, 5162, 119189, 1330, 0, 42848, 0, 12047, + 41384, 0, 0, 1848, 4334, 6324, 41975, 64777, 10674, 12308, 12186, 0, 0, + 0, 12715, 0, 0, 0, 2018, 66672, 41979, 66685, 119157, 0, 0, 0, 126984, 0, + 9334, 0, 127310, 0, 7975, 0, 77957, 0, 66621, 4884, 66597, 0, 0, 0, 6313, + 65513, 0, 0, 0, 0, 2345, 43697, 463, 0, 0, 119607, 3117, 5460, 0, 0, 0, + 0, 42279, 194577, 0, 78415, 0, 0, 0, 13248, 0, 0, 0, 0, 0, 0, 5663, 0, 0, + 0, 0, 2482, 1471, 0, 0, 42247, 12378, 73925, 127233, 0, 12374, 0, 0, 0, + 0, 2460, 0, 11944, 12376, 0, 64679, 0, 12380, 10557, 64473, 5870, 0, + 2024, 0, 0, 0, 539, 0, 0, 0, 3853, 65180, 0, 120796, 120245, 0, 0, 8659, + 0, 12474, 0, 9503, 194969, 2478, 0, 4162, 0, 4260, 12953, 0, 120089, + 12470, 0, 74189, 2742, 12476, 11798, 10946, 0, 5000, 0, 0, 0, 0, 8213, + 74017, 7771, 6161, 0, 6709, 0, 78885, 0, 194892, 120582, 78547, 0, 10301, + 10333, 10397, 0, 0, 73791, 0, 0, 0, 0, 0, 4014, 12842, 73952, 12015, 0, + 8275, 3893, 0, 0, 127555, 7221, 42147, 0, 74550, 74465, 64747, 118841, 0, + 12516, 4444, 0, 119017, 74537, 10892, 8231, 0, 6473, 41968, 78388, 41973, + 3591, 41969, 0, 2453, 0, 0, 64705, 0, 0, 10349, 10413, 43591, 41962, + 3202, 74353, 0, 8316, 0, 0, 0, 687, 0, 0, 0, 1840, 0, 68671, 119809, + 4883, 285, 4723, 77927, 0, 4459, 74577, 0, 41720, 11089, 240, 19906, 0, + 42323, 0, 9743, 120232, 13134, 0, 0, 0, 0, 0, 42634, 0, 43437, 3081, + 11463, 120230, 0, 0, 10445, 0, 0, 66717, 2614, 9125, 119023, 1729, 0, + 120236, 65221, 63883, 43334, 64852, 0, 120235, 66201, 0, 66578, 5001, + 41879, 74427, 4121, 5003, 884, 66700, 63879, 4943, 5150, 73889, 74182, 0, + 643, 3086, 0, 42448, 42299, 58, 0, 0, 120083, 63873, 8491, 0, 0, 0, 4530, + 42409, 0, 194575, 2721, 120074, 119096, 19929, 0, 194574, 0, 4242, 4264, + 120077, 0, 66179, 42412, 65941, 13114, 64522, 10740, 3094, 0, 9754, + 119102, 4437, 73948, 0, 0, 55280, 42174, 194925, 42430, 0, 0, 42355, + 66026, 4306, 41380, 68432, 0, 0, 66667, 127309, 0, 0, 42200, 42566, 0, 0, + 5088, 6948, 0, 8524, 0, 0, 12385, 0, 0, 0, 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, 0, 0, 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, 0, 13000, 1351, 0, 8698, 12665, 0, + 1930, 0, 78229, 12427, 66514, 0, 13031, 0, 63901, 0, 3657, 0, 65202, + 6000, 119206, 12426, 0, 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, 0, 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, 0, 0, 0, 9680, 0, 120623, 561, 12159, 195, 78508, + 41501, 0, 42031, 5719, 7172, 42687, 8368, 0, 41499, 0, 0, 42242, 41498, + 917794, 42025, 78567, 65805, 42463, 0, 2924, 0, 120510, 0, 0, 119213, + 73941, 0, 42330, 917784, 3969, 0, 0, 7169, 1992, 9652, 73977, 7246, + 42086, 917790, 917789, 0, 0, 0, 0, 0, 327, 0, 9042, 917777, 917776, + 65148, 12433, 917781, 127276, 917779, 12431, 8668, 12434, 0, 917782, + 5999, 0, 7712, 12432, 0, 43653, 1726, 1015, 0, 8212, 0, 0, 42423, 119066, + 0, 0, 66709, 0, 8811, 927, 0, 0, 12436, 0, 42021, 0, 0, 1299, 12240, + 42350, 65143, 0, 195016, 0, 78197, 11348, 0, 78037, 0, 0, 0, 19914, + 12179, 0, 9648, 194923, 63836, 63832, 917773, 10967, 63816, 2594, 3444, + 63817, 64651, 0, 41503, 0, 11265, 0, 0, 194922, 0, 5664, 3972, 0, 0, 0, + 917766, 12416, 917764, 119608, 10816, 917769, 917768, 12418, 74111, 3882, + 8532, 917771, 1573, 0, 119847, 4596, 66339, 12417, 66001, 65343, 194782, + 12414, 8287, 68219, 195017, 68108, 1143, 119169, 0, 12415, 6626, 42763, + 0, 118884, 9021, 120783, 0, 11724, 0, 0, 127104, 194794, 0, 0, 8027, + 10997, 9171, 12741, 11400, 74197, 194799, 0, 194798, 0, 0, 0, 127523, + 120190, 194773, 67608, 194772, 42368, 0, 7715, 3881, 41487, 12118, 42514, + 68651, 0, 0, 3009, 41476, 41489, 69825, 3007, 1448, 3018, 194809, 3889, 8521, 5083, 5082, 119859, 120184, 8519, 0, 3014, 5081, 65853, 0, 0, - 120183, 0, 5079, 64802, 65095, 4597, 65532, 0, 0, 12371, 0, 8407, 0, - 10805, 8518, 10779, 120188, 0, 0, 12367, 42170, 0, 0, 629, 1924, 0, - 12037, 74366, 5987, 8462, 8005, 12365, 66689, 0, 120815, 12369, 10649, 0, - 5077, 127108, 10880, 63927, 5075, 0, 0, 65075, 0, 11007, 0, 66659, 0, 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, 0, - 5276, 43021, 0, 0, 0, 0, 66461, 5177, 41324, 12055, 8722, 0, 41327, 0, - 66695, 4114, 409, 4383, 8900, 8948, 41325, 0, 721, 10182, 9108, 0, 0, - 119185, 0, 0, 0, 5998, 0, 42353, 74825, 0, 12587, 0, 0, 0, 0, 0, 41576, - 74121, 0, 119207, 0, 8578, 5995, 7573, 41575, 74789, 74752, 63944, 63949, - 0, 2670, 4167, 0, 11723, 0, 74120, 0, 65076, 938, 73857, 73854, 11737, - 9721, 0, 0, 0, 11742, 0, 0, 11493, 12334, 0, 4153, 12302, 10793, 5250, - 12407, 11978, 4404, 9189, 12401, 42007, 5775, 42005, 65806, 0, 0, 42002, - 12404, 0, 0, 4940, 12410, 7683, 1167, 0, 4983, 0, 861, 0, 0, 0, 0, 65577, - 0, 0, 0, 11956, 0, 0, 0, 9616, 6631, 0, 12816, 74583, 0, 12710, 0, 12721, - 4101, 66185, 0, 5992, 7616, 0, 0, 12577, 0, 0, 853, 0, 0, 0, 0, 5016, - 43535, 0, 42835, 9491, 917913, 0, 917914, 0, 12712, 917919, 0, 65060, + 120183, 78219, 5079, 64802, 42210, 4597, 65532, 78444, 120185, 12371, 0, + 8407, 0, 10805, 8518, 10779, 120188, 0, 0, 12367, 42170, 0, 0, 629, 1924, + 0, 12037, 74366, 5987, 8462, 8005, 12365, 63933, 127370, 120815, 12369, + 10649, 0, 5077, 127108, 10880, 63927, 5075, 0, 0, 65075, 0, 11007, 0, + 66659, 0, 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, 0, 0, 55236, 0, 66461, 5177, 41324, 12055, + 8722, 0, 41327, 0, 66695, 4114, 409, 4383, 8900, 8948, 41325, 0, 721, + 10182, 9108, 0, 0, 119185, 42229, 194912, 0, 5998, 0, 42353, 74825, 0, + 12587, 0, 78571, 0, 0, 0, 41576, 42215, 78570, 119207, 0, 8578, 5995, + 7573, 41575, 74789, 74752, 63944, 63949, 64767, 2670, 4167, 0, 11723, 0, + 74120, 0, 65076, 938, 43414, 73854, 11737, 9721, 0, 0, 0, 11742, 0, 0, + 11493, 12334, 0, 4153, 12302, 10793, 5250, 12407, 11978, 4404, 9189, + 12401, 42007, 5775, 6759, 65806, 43997, 0, 42002, 12404, 0, 0, 4940, + 12410, 7683, 1167, 73729, 4983, 0, 861, 0, 0, 0, 0, 65577, 43370, 0, 0, + 11956, 0, 0, 0, 9616, 6631, 0, 12816, 74583, 42218, 12710, 68674, 12721, + 4101, 66185, 0, 5992, 7616, 0, 0, 12577, 0, 0, 853, 42693, 0, 0, 0, 5016, + 43535, 63893, 42835, 9491, 917913, 0, 917914, 0, 12712, 917919, 0, 65060, 120797, 9900, 0, 0, 194919, 0, 0, 0, 64778, 12585, 10565, 0, 12177, 0, 0, - 0, 0, 0, 4900, 0, 0, 0, 8984, 4119, 0, 8971, 0, 43113, 9702, 0, 11025, - 9245, 13048, 4927, 4138, 0, 194921, 0, 12397, 0, 0, 13054, 12394, 0, 0, - 0, 13053, 0, 3948, 10781, 1546, 0, 5010, 1680, 10507, 0, 0, 0, 0, 0, 0, - 7267, 0, 74833, 0, 5993, 2819, 0, 12706, 0, 1893, 7266, 63915, 7264, - 7265, 0, 1363, 0, 63997, 63910, 63996, 3077, 0, 0, 1512, 0, 12589, 41479, - 0, 0, 43339, 0, 9836, 120727, 0, 41481, 43335, 7832, 42343, 3090, 43337, - 817, 1664, 1850, 0, 3079, 11340, 42408, 42447, 0, 120020, 42307, 12386, - 42304, 0, 0, 12389, 0, 0, 41996, 11526, 63985, 5864, 1147, 66688, 42887, - 1987, 0, 5480, 7858, 11653, 4116, 12391, 66193, 0, 4939, 12384, 0, 0, - 41686, 63905, 119601, 0, 0, 0, 0, 0, 0, 8247, 507, 91, 2042, 120775, 0, - 0, 66028, 10036, 41844, 119830, 774, 119831, 0, 119815, 5994, 12539, 0, - 119817, 120597, 119833, 0, 0, 0, 0, 7719, 6026, 2486, 0, 0, 162, 0, - 65219, 41073, 9687, 41681, 6304, 119812, 66196, 0, 5262, 0, 66658, 12681, - 42379, 0, 7534, 12219, 0, 0, 42810, 10492, 0, 0, 0, 43119, 0, 120753, - 12403, 2500, 195013, 0, 4899, 0, 0, 0, 74113, 2343, 4103, 19946, 74112, - 0, 13112, 0, 0, 12859, 0, 0, 66369, 5861, 0, 11999, 12400, 0, 0, 12645, - 5146, 11320, 0, 67612, 65040, 0, 64184, 12974, 64183, 67613, 120645, - 5147, 0, 0, 74524, 0, 1928, 0, 0, 5991, 3445, 67609, 4976, 64176, 0, - 67610, 8241, 0, 0, 4206, 0, 0, 0, 0, 0, 10138, 0, 0, 8897, 0, 0, 8357, - 4124, 0, 65836, 120641, 0, 0, 0, 0, 1123, 963, 41553, 10120, 12405, 0, 0, - 398, 13278, 9723, 41551, 120311, 7945, 0, 4402, 10896, 12402, 0, 42392, - 1305, 12408, 0, 0, 0, 0, 41464, 12411, 12969, 120824, 41465, 0, 195017, - 1575, 0, 63955, 165, 3024, 41467, 119163, 0, 9093, 0, 9147, 0, 0, 0, - 9148, 9692, 4096, 53, 73776, 12368, 195018, 0, 9594, 0, 0, 43527, 0, 727, - 0, 0, 5805, 0, 0, 0, 42176, 12370, 11655, 119095, 10591, 12364, 0, 12372, - 120642, 0, 0, 0, 0, 12366, 10963, 6066, 1329, 0, 3052, 9220, 0, 64478, 0, - 10803, 4132, 0, 0, 0, 0, 0, 74837, 0, 1499, 0, 8055, 0, 63965, 0, 63962, - 74042, 8924, 43123, 5988, 3660, 63969, 11781, 63968, 8788, 1357, 64851, - 65743, 0, 8774, 0, 127086, 67618, 120172, 0, 1933, 0, 9564, 0, 0, 73866, - 0, 0, 2487, 67614, 3121, 1804, 3311, 67615, 0, 0, 12220, 67616, 120598, - 0, 0, 0, 6675, 0, 0, 67592, 120685, 0, 64771, 1198, 9132, 0, 64619, 510, - 64663, 0, 0, 4561, 7711, 1398, 0, 0, 74034, 41569, 0, 11406, 8167, 12127, - 0, 840, 0, 0, 0, 6967, 0, 0, 9796, 0, 333, 0, 0, 8144, 0, 0, 0, 12406, 0, - 0, 0, 6678, 7769, 0, 12621, 0, 0, 10227, 4764, 43101, 0, 0, 40986, 4127, - 66487, 0, 0, 12754, 195022, 0, 0, 0, 67594, 65609, 12944, 4050, 67595, 0, - 43102, 10581, 12985, 4533, 0, 0, 6490, 0, 12038, 0, 0, 120704, 65461, - 9798, 0, 0, 1948, 119007, 0, 952, 0, 0, 0, 120802, 6449, 9494, 0, 0, - 43098, 4843, 8142, 64160, 4098, 64170, 0, 0, 3436, 0, 0, 12817, 67597, - 6676, 3930, 66708, 0, 0, 67598, 0, 0, 0, 65591, 41581, 65916, 1453, 0, 0, - 0, 8500, 0, 120142, 73743, 120400, 4317, 120140, 0, 64676, 0, 0, 67606, - 119083, 0, 0, 13102, 0, 66003, 6672, 0, 0, 0, 0, 63841, 9613, 9001, 4526, - 11274, 67601, 64520, 64210, 6664, 0, 42056, 10228, 64957, 11281, 0, - 64213, 1469, 66640, 65381, 0, 4988, 42372, 0, 9598, 904, 352, 0, 1451, - 8061, 8453, 4134, 0, 74847, 67600, 0, 0, 10520, 8575, 0, 1201, 0, 12846, - 0, 0, 11919, 64962, 0, 74864, 0, 8511, 9460, 823, 11587, 12305, 0, 64695, - 0, 12387, 1253, 13183, 65766, 500, 42783, 65765, 64208, 64369, 65760, - 65761, 119585, 11606, 64784, 11702, 66498, 9821, 0, 0, 5152, 11048, 7533, - 120121, 64410, 0, 0, 4323, 120062, 0, 0, 0, 42587, 65339, 41394, 0, 4763, - 4112, 118935, 0, 5260, 43143, 0, 326, 120131, 0, 0, 10771, 2876, 194915, - 194835, 194924, 41398, 127079, 9802, 127077, 127076, 453, 41396, 120524, - 0, 12140, 9572, 0, 7003, 194883, 42334, 7704, 0, 0, 43144, 4123, 0, - 43146, 0, 0, 0, 65759, 10765, 64061, 4465, 9808, 64056, 65582, 4126, 0, - 9521, 9589, 64755, 0, 64020, 0, 10464, 0, 0, 194869, 64514, 11528, 64024, - 0, 679, 64013, 0, 5850, 758, 7536, 0, 0, 41441, 10693, 64006, 0, 64005, - 10541, 119019, 0, 64660, 0, 119050, 0, 0, 1139, 43298, 64027, 64029, - 8970, 0, 64000, 0, 10774, 0, 42522, 12421, 194876, 0, 1852, 3057, 0, - 73744, 64034, 64041, 0, 0, 0, 0, 0, 7645, 12854, 74338, 3496, 0, 0, 0, - 9102, 627, 0, 6158, 8327, 74553, 66632, 12419, 0, 11570, 0, 19960, 11696, - 0, 1018, 0, 194909, 0, 1682, 194896, 0, 42756, 12951, 194906, 0, 0, - 73814, 11412, 12563, 10728, 194830, 0, 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, 0, - 64483, 65693, 0, 0, 0, 0, 42240, 0, 0, 42864, 0, 64667, 41868, 1184, 0, - 815, 11484, 0, 67840, 0, 0, 0, 0, 0, 64683, 0, 0, 0, 0, 0, 9879, 0, 0, - 4158, 0, 68166, 0, 0, 0, 0, 0, 332, 118808, 0, 5142, 2407, 0, 0, 0, 0, - 74373, 0, 0, 0, 63870, 43163, 0, 0, 119081, 42867, 1834, 0, 0, 0, 10940, - 65249, 119040, 8662, 0, 0, 2652, 120527, 11539, 10784, 195093, 0, 0, 0, - 0, 0, 118858, 917505, 1828, 74474, 120327, 0, 8531, 12499, 6280, 12324, - 118854, 65238, 0, 4832, 65573, 0, 6279, 12508, 12904, 12502, 9161, 0, - 1620, 0, 3601, 0, 0, 0, 609, 11555, 0, 12496, 0, 74181, 4343, 12505, 0, - 0, 0, 11377, 239, 0, 637, 0, 0, 43029, 0, 0, 0, 43565, 127082, 0, 12696, - 0, 0, 0, 12929, 0, 712, 0, 4197, 0, 42818, 0, 0, 120490, 0, 0, 1506, - 43562, 0, 0, 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, 0, 42571, 0, 0, 0, 0, 0, 0, 0, 3178, 0, 0, 0, 0, 9080, - 127000, 0, 0, 0, 0, 11082, 0, 5699, 195100, 0, 9488, 65166, 119112, 0, 0, - 0, 0, 0, 0, 5265, 0, 0, 11487, 67858, 12464, 0, 43045, 0, 0, 43345, 0, - 10770, 118994, 43344, 465, 9829, 0, 74348, 0, 43346, 8116, 795, 0, 0, - 12462, 10930, 10831, 0, 118952, 64362, 0, 0, 120811, 0, 12468, 8607, - 1008, 0, 10092, 0, 917842, 67855, 0, 73771, 1766, 11282, 11996, 1820, - 4547, 0, 0, 0, 0, 13223, 0, 64595, 0, 0, 0, 4345, 12616, 0, 0, 0, 74467, - 0, 0, 0, 5382, 0, 0, 0, 119060, 64953, 5406, 19920, 0, 66510, 3590, 0, - 1130, 0, 0, 42016, 11823, 43023, 0, 118896, 7742, 0, 13280, 0, 9326, - 73826, 5310, 74812, 0, 119962, 8959, 43589, 74334, 66723, 0, 8568, 0, - 120496, 73816, 120803, 0, 0, 0, 11621, 12460, 0, 0, 0, 0, 74519, 0, 0, 0, + 0, 77824, 0, 4900, 0, 12878, 0, 8984, 4119, 74768, 8971, 78593, 43113, + 9702, 78594, 11025, 9245, 13048, 4927, 4138, 74185, 194921, 0, 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, 0, 5993, + 2819, 0, 12706, 77840, 1893, 7266, 63915, 7264, 7265, 0, 1363, 0, 63997, + 63910, 63996, 3077, 0, 0, 1512, 0, 12589, 41479, 0, 0, 43339, 0, 9836, + 120727, 0, 41481, 43335, 7832, 42343, 3090, 43337, 817, 1664, 1850, 0, + 3079, 11340, 42408, 42447, 194704, 120020, 42307, 12386, 42304, 0, 0, + 12389, 0, 194694, 41996, 11526, 63985, 5864, 1147, 63992, 42887, 1987, 0, + 5480, 7858, 11653, 4116, 12391, 66193, 0, 4939, 12384, 0, 0, 41686, + 63905, 119601, 194688, 0, 0, 12649, 0, 0, 8247, 507, 91, 2042, 120775, + 43643, 194689, 66028, 10036, 41844, 119813, 774, 119831, 0, 119815, 5994, + 12539, 0, 78375, 120597, 119833, 0, 119600, 0, 0, 7719, 6026, 2486, 0, + 119808, 162, 0, 65219, 41073, 9687, 41681, 6304, 119812, 66196, 0, 5262, + 0, 55233, 12681, 42379, 0, 7534, 12219, 0, 127528, 42810, 10492, 0, 0, 0, + 43119, 0, 120753, 12403, 2500, 195013, 0, 4899, 0, 0, 0, 74113, 2343, + 4103, 19946, 74112, 77851, 13112, 0, 0, 12859, 0, 120148, 66369, 5861, 0, + 11999, 12400, 0, 0, 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, 0, 0, + 10138, 0, 0, 8897, 0, 0, 8357, 4124, 77862, 65836, 120641, 0, 77859, 0, + 0, 1123, 963, 41553, 10120, 12405, 120150, 0, 398, 13278, 9723, 6366, + 120311, 7945, 0, 4402, 9970, 12402, 0, 42392, 1305, 12408, 0, 44007, 0, + 0, 41464, 12411, 12969, 120824, 41465, 0, 8528, 1575, 0, 63955, 165, + 3024, 41467, 119163, 0, 9093, 0, 9147, 0, 63958, 0, 9148, 9692, 4096, 53, + 73776, 6750, 195018, 0, 9594, 0, 0, 43527, 0, 727, 0, 0, 5805, 0, 6726, + 0, 42176, 12370, 11655, 119095, 10591, 12364, 0, 12372, 120642, 120307, + 0, 0, 0, 12366, 10963, 6066, 1329, 0, 3052, 9220, 0, 64478, 0, 10803, + 4132, 120306, 68474, 0, 0, 0, 74837, 0, 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, 120154, 9564, 0, + 0, 73866, 0, 0, 2487, 67614, 3121, 1804, 3311, 67615, 0, 78302, 12220, + 67616, 120598, 0, 0, 68200, 6675, 0, 0, 67592, 120685, 0, 64771, 1198, + 9132, 0, 64619, 510, 64663, 0, 0, 4561, 2101, 1398, 0, 0, 74034, 41569, + 0, 11406, 8167, 12127, 0, 840, 0, 0, 0, 6967, 0, 0, 9796, 0, 333, 0, 0, + 8144, 0, 0, 0, 12406, 0, 19931, 119089, 6678, 7769, 0, 12621, 0, 0, + 10227, 4764, 43101, 9981, 0, 40986, 4127, 66487, 0, 42202, 12754, 195022, + 0, 0, 0, 67594, 2048, 12944, 4050, 67595, 917967, 43102, 10581, 12985, + 4533, 195021, 74003, 6490, 0, 12038, 0, 0, 120704, 65461, 9798, 0, 0, + 1948, 119007, 0, 952, 0, 0, 0, 120802, 6449, 9494, 120313, 0, 43098, + 4843, 8142, 64160, 4098, 64170, 0, 0, 3436, 0, 0, 12817, 67597, 6676, + 3930, 66708, 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, 0, 63841, 9613, + 9001, 4526, 11274, 67601, 64520, 64210, 6664, 78704, 42056, 10228, 64957, + 11281, 0, 64213, 1469, 66640, 65381, 42197, 4988, 42372, 0, 9598, 904, + 352, 42225, 1451, 8061, 8453, 4134, 0, 74847, 66576, 0, 0, 10520, 8575, + 9960, 1201, 0, 12846, 0, 0, 11919, 64962, 0, 43739, 127281, 8511, 9460, + 823, 11587, 12305, 0, 64695, 0, 12387, 1253, 13183, 65766, 500, 42783, + 65765, 64208, 64369, 65760, 65761, 119585, 11606, 64784, 11702, 66498, + 9821, 0, 0, 5152, 11048, 7533, 68366, 64410, 0, 0, 4323, 120062, 0, 0, + 127052, 42587, 42214, 41394, 0, 4763, 4112, 118935, 0, 5260, 43143, 0, + 326, 120131, 68423, 0, 10771, 2876, 74074, 194835, 194924, 41398, 7382, + 9802, 127077, 127076, 453, 41396, 120524, 42720, 12140, 9572, 0, 7003, + 194883, 42334, 7704, 0, 0, 43144, 4123, 8494, 43146, 9977, 0, 0, 65759, + 10765, 64061, 4465, 9808, 64056, 65582, 4126, 0, 9521, 9589, 64755, 0, + 64020, 0, 10464, 0, 0, 194869, 64514, 11528, 64024, 0, 679, 64013, 0, + 5850, 758, 7536, 0, 0, 41441, 10693, 64006, 0, 64005, 10541, 119019, 0, + 64660, 0, 119050, 0, 0, 1139, 43298, 64027, 64029, 8970, 0, 64000, 0, + 10774, 0, 42201, 12421, 194876, 0, 1852, 3057, 0, 73744, 64034, 64039, 0, + 0, 0, 0, 0, 7645, 12854, 74338, 3496, 0, 0, 0, 9102, 627, 0, 6158, 8327, + 74553, 66632, 12419, 13309, 11570, 0, 19960, 11696, 0, 1018, 118970, + 194909, 0, 1682, 194896, 194911, 42756, 6765, 194906, 0, 0, 73814, 11412, + 6768, 10728, 194830, 119010, 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, 0, 42240, 0, 0, 42864, 0, 64667, 41868, 1184, 0, 815, + 11484, 127535, 67840, 0, 0, 0, 0, 10986, 64683, 0, 0, 0, 0, 0, 9879, 0, + 0, 4158, 0, 68166, 0, 0, 0, 0, 0, 332, 118808, 0, 5142, 2407, 0, 42199, + 0, 0, 74373, 0, 55217, 0, 63870, 43163, 0, 0, 119081, 42867, 1834, 0, 0, + 69817, 10940, 65249, 119040, 8662, 0, 0, 2652, 120527, 11539, 10784, + 195093, 67674, 0, 0, 0, 0, 74562, 917505, 1828, 74474, 120327, 78620, + 8531, 12499, 6280, 12324, 118854, 65238, 68374, 4832, 65573, 0, 6279, + 12508, 12904, 12502, 9161, 0, 1620, 0, 3601, 195094, 0, 0, 609, 11555, 0, + 12496, 0, 74181, 4343, 12505, 0, 0, 0, 11377, 239, 0, 637, 0, 0, 42671, + 0, 0, 0, 43565, 127082, 0, 12696, 0, 0, 0, 12929, 0, 712, 0, 4197, 0, + 42818, 0, 0, 120490, 0, 0, 1506, 43562, 0, 0, 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, 917837, 0, 0, + 0, 0, 0, 0, 3178, 0, 0, 0, 0, 9080, 127000, 120352, 0, 68209, 0, 11082, + 0, 5699, 195100, 66000, 9488, 65166, 119112, 0, 0, 0, 0, 0, 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, 0, 120811, 0, 12468, 8607, 1008, 0, + 10092, 0, 917842, 67855, 55257, 73771, 1766, 11282, 11996, 1820, 4547, 0, + 0, 0, 0, 13223, 0, 64595, 0, 0, 0, 4345, 12616, 0, 0, 0, 74467, 0, 0, 0, + 5382, 0, 0, 0, 119060, 64953, 5406, 19920, 0, 66510, 3590, 0, 1130, 0, 0, + 42016, 11823, 43023, 0, 118896, 7742, 0, 13280, 0, 9326, 73826, 5310, + 74812, 0, 119962, 8959, 43589, 6747, 66723, 0, 8568, 0, 120496, 73816, + 120803, 0, 42670, 0, 11621, 12460, 0, 120631, 0, 43063, 74519, 0, 0, 0, 0, 0, 11689, 5410, 5783, 10468, 8403, 5400, 11594, 0, 0, 118990, 10491, 0, 64412, 0, 0, 5587, 42865, 64404, 8268, 4923, 65086, 8981, 12382, - 42133, 120755, 9706, 0, 0, 66610, 10461, 12103, 0, 8642, 0, 42766, 0, 0, - 0, 0, 119105, 0, 0, 0, 8816, 41515, 0, 11802, 8041, 1461, 910, 119133, 0, - 0, 3658, 0, 120525, 0, 7617, 0, 12888, 0, 0, 13143, 0, 41514, 0, 5703, 0, - 41517, 41504, 41519, 10016, 64305, 0, 65864, 623, 781, 670, 10660, 5769, - 613, 7543, 120774, 477, 41083, 0, 0, 592, 1578, 12459, 0, 0, 0, 8225, 0, - 654, 11345, 653, 652, 0, 647, 0, 633, 120744, 0, 0, 12480, 74354, 0, 39, - 12487, 0, 120529, 74199, 12482, 0, 12489, 0, 3195, 5550, 0, 7897, 0, - 1203, 74396, 1813, 64544, 41311, 12090, 0, 2877, 0, 0, 1675, 0, 0, 0, 0, - 10070, 10595, 0, 119077, 0, 0, 0, 0, 0, 118827, 0, 0, 0, 119561, 0, 0, 0, - 0, 0, 0, 0, 120692, 0, 0, 270, 0, 10714, 0, 0, 0, 0, 0, 65372, 0, 74038, - 119558, 6273, 66679, 364, 9595, 0, 0, 0, 707, 0, 0, 9282, 66489, 224, 0, - 0, 9332, 4966, 0, 0, 0, 0, 3841, 0, 0, 10732, 0, 850, 4972, 0, 64699, - 2909, 0, 65309, 0, 0, 11544, 10203, 9608, 0, 0, 11962, 0, 12507, 1196, 0, - 0, 777, 0, 4375, 65271, 0, 0, 12198, 0, 64824, 0, 0, 9454, 63778, 8658, - 42528, 0, 2705, 917975, 41520, 0, 0, 11986, 7765, 42502, 8280, 0, 2701, - 0, 0, 5767, 0, 0, 9809, 8353, 63747, 66701, 63772, 0, 63745, 1748, 63770, - 0, 0, 0, 65542, 63766, 0, 3061, 0, 63764, 63789, 9067, 6096, 0, 7694, 0, - 7257, 63768, 3485, 12987, 0, 0, 0, 63807, 1591, 0, 0, 63783, 0, 0, 0, 0, - 0, 0, 74575, 0, 65719, 13083, 64574, 65012, 0, 1640, 12495, 66691, 7624, - 3138, 10996, 0, 1922, 0, 12498, 10987, 0, 0, 3894, 65543, 0, 194842, 0, - 493, 0, 43197, 1717, 4228, 479, 10303, 917934, 0, 917935, 10335, 3520, - 917932, 12490, 64315, 0, 127039, 12493, 6233, 64636, 1002, 12491, 0, - 64911, 127040, 0, 65120, 0, 0, 0, 11611, 66228, 127041, 66213, 63864, - 66221, 66226, 66229, 13218, 66231, 66216, 8507, 66236, 66211, 66218, 0, - 66240, 0, 66233, 8928, 0, 7909, 66234, 11605, 63759, 0, 66208, 73999, - 63799, 0, 244, 11542, 12898, 12494, 73761, 12492, 12669, 0, 0, 74153, 0, - 0, 120680, 4882, 13040, 0, 8612, 4885, 74053, 0, 13042, 4880, 64662, - 2429, 1360, 248, 0, 63797, 0, 63792, 0, 7292, 0, 63756, 42786, 66693, 0, - 1870, 917916, 470, 0, 0, 120306, 0, 0, 4579, 0, 0, 12511, 74453, 12514, - 0, 74579, 7239, 7001, 8623, 0, 0, 0, 0, 12512, 11615, 13041, 0, 0, 659, - 6098, 0, 12234, 0, 127067, 8311, 12510, 41803, 13039, 127072, 12513, - 10202, 12471, 0, 8747, 0, 0, 0, 2323, 0, 2319, 0, 12477, 0, 2311, 0, - 4415, 237, 6281, 0, 0, 0, 2309, 1312, 8173, 0, 12469, 0, 0, 64335, 10609, - 0, 0, 9397, 11524, 9395, 9396, 9393, 9394, 9391, 9392, 9389, 6209, 9387, - 9388, 4932, 9386, 9383, 9384, 0, 0, 65451, 8185, 0, 917832, 43024, 43336, - 74375, 2313, 0, 7948, 9236, 0, 0, 0, 10570, 0, 6289, 10484, 0, 0, 11998, - 12082, 10924, 3147, 0, 0, 12524, 0, 2310, 11818, 9381, 9382, 9379, 9380, + 42133, 120755, 9706, 0, 0, 66610, 10461, 12103, 0, 8642, 0, 42766, 0, + 66566, 9983, 0, 119105, 0, 0, 0, 7398, 41515, 0, 11802, 8041, 1461, 910, + 119133, 0, 6749, 3658, 0, 120525, 0, 7617, 0, 12888, 0, 67668, 13143, 0, + 41514, 11097, 5703, 0, 41517, 41504, 41519, 10016, 64305, 0, 65864, 623, + 781, 670, 10660, 5769, 613, 7543, 120279, 477, 41083, 0, 0, 592, 1578, + 12459, 43449, 0, 0, 8225, 0, 654, 11345, 653, 652, 0, 647, 0, 633, + 120744, 0, 0, 12480, 43243, 0, 39, 12487, 0, 120529, 74199, 12482, 0, + 12489, 0, 3195, 5550, 0, 7897, 0, 1203, 74396, 1813, 64544, 41311, 12090, + 0, 2877, 0, 0, 1675, 0, 0, 0, 0, 10070, 10595, 0, 119077, 0, 0, 0, 0, 0, + 43244, 0, 0, 0, 119561, 0, 0, 0, 0, 0, 0, 0, 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, 64699, 2909, 68619, 44008, + 68627, 0, 11544, 10203, 9608, 0, 0, 11962, 0, 12507, 1196, 0, 0, 777, 0, + 4375, 65271, 67678, 0, 12198, 0, 64824, 0, 0, 9454, 63778, 8658, 42528, + 0, 2705, 917975, 41520, 0, 0, 11986, 7765, 42502, 8280, 0, 2701, 0, 0, + 5767, 0, 0, 9809, 8353, 63747, 66701, 63772, 0, 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, 0, 0, 0, 0, 74575, 0, 65719, 13083, 64574, 65012, 0, 1640, 12495, + 66691, 7624, 3138, 10996, 0, 1922, 0, 12498, 10987, 0, 0, 3894, 65543, 0, + 194842, 0, 493, 0, 43197, 1717, 4228, 479, 10303, 74020, 0, 917935, + 10335, 3520, 917932, 12490, 64315, 0, 127039, 12493, 6233, 42681, 1002, + 12491, 0, 64911, 127040, 2096, 65120, 0, 0, 0, 11611, 66228, 127041, + 66213, 63864, 66221, 66226, 66229, 13218, 66231, 66216, 8507, 66236, + 66211, 66218, 0, 66240, 78041, 66233, 8928, 0, 7909, 66234, 11605, 63759, + 0, 66208, 73999, 63799, 63803, 244, 11542, 12898, 12494, 73761, 12492, + 12669, 0, 0, 74153, 0, 0, 120680, 4882, 13040, 0, 8612, 4885, 74053, 0, + 13042, 4880, 64662, 2429, 1360, 248, 0, 63797, 0, 42358, 0, 7292, 0, + 63756, 42786, 66693, 0, 1870, 78040, 470, 78038, 78035, 78036, 0, 78034, + 4579, 0, 0, 12511, 74453, 12514, 0, 74579, 7239, 7001, 8623, 0, 0, 0, + 7378, 12512, 11615, 6104, 0, 0, 659, 6098, 0, 12234, 127307, 127067, + 8311, 12510, 41803, 13039, 127072, 12513, 10202, 12471, 0, 8747, 0, 0, 0, + 2323, 0, 2319, 77917, 12477, 77916, 2311, 0, 4415, 237, 6281, 0, 0, 0, + 2309, 1312, 8173, 0, 12469, 0, 78505, 64335, 10609, 0, 0, 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, + 0, 7948, 9236, 0, 0, 0, 10570, 43473, 6289, 10484, 0, 0, 11998, 12082, + 10924, 3147, 0, 120684, 12524, 0, 2310, 11818, 9381, 9382, 9379, 9380, 9377, 9378, 9375, 9376, 1683, 9374, 0, 9372, 12444, 0, 0, 13016, 8210, 0, - 42029, 11079, 12331, 0, 42032, 8744, 726, 0, 0, 4155, 0, 0, 42030, 5007, - 12522, 43088, 0, 4951, 0, 0, 0, 9922, 43309, 0, 12525, 0, 12016, 65770, - 9548, 0, 403, 0, 12503, 0, 0, 11030, 0, 0, 65691, 63998, 1819, 10496, 0, - 0, 119920, 0, 0, 0, 12506, 0, 12231, 0, 12500, 67605, 12509, 64393, 0, - 3389, 10589, 6608, 41047, 120321, 0, 0, 74069, 0, 0, 3608, 8281, 917839, - 1107, 0, 9076, 8862, 0, 41052, 13084, 64766, 43217, 7803, 13222, 118963, - 74782, 0, 8546, 11553, 63995, 13177, 9043, 6303, 0, 498, 64471, 120324, - 0, 12529, 8042, 0, 2344, 12528, 8031, 2414, 0, 0, 3231, 0, 6422, 66512, - 0, 12530, 2537, 0, 41429, 12658, 13036, 65772, 0, 0, 41433, 4719, 469, 0, - 4363, 3313, 41428, 0, 2023, 1772, 0, 0, 65706, 10051, 64812, 0, 0, 9920, - 12215, 0, 4931, 1951, 12497, 119363, 9607, 0, 9663, 0, 119634, 6503, - 41110, 0, 1491, 0, 0, 0, 41061, 0, 0, 0, 65026, 41993, 41509, 11045, - 65028, 0, 66476, 41108, 9738, 41995, 1075, 1958, 12535, 41992, 41506, 0, - 41687, 0, 120717, 0, 917816, 0, 7692, 0, 8008, 0, 330, 8566, 65083, - 41133, 9816, 0, 12532, 127055, 127056, 3508, 127058, 127059, 0, 917542, - 917815, 0, 6411, 12910, 120505, 66644, 13028, 0, 12537, 0, 0, 64136, - 12536, 2350, 13029, 0, 0, 0, 13030, 0, 4527, 0, 12538, 0, 0, 65599, - 65717, 12607, 0, 4948, 12484, 4032, 0, 42803, 0, 6207, 0, 6117, 66000, - 8412, 0, 7438, 1296, 2325, 41511, 0, 10149, 74118, 0, 0, 12481, 0, 12488, - 0, 0, 41556, 64414, 118802, 2354, 0, 73766, 0, 6295, 901, 41510, 7953, 0, - 65032, 41513, 0, 11927, 66584, 0, 0, 119010, 0, 0, 0, 848, 9868, 0, 6424, - 0, 119338, 0, 74031, 0, 0, 2352, 0, 893, 64576, 11289, 1407, 0, 0, 13026, - 0, 0, 0, 13023, 8903, 9777, 66715, 1871, 8099, 0, 0, 1343, 0, 0, 9325, - 13025, 6283, 11738, 0, 0, 0, 11741, 0, 0, 9216, 8263, 11279, 194752, 0, - 194754, 13021, 64494, 3136, 194758, 194757, 194760, 13022, 0, 64588, 0, - 0, 74552, 10014, 0, 41260, 119340, 13020, 118993, 194764, 194767, 74340, - 0, 0, 64945, 8029, 0, 0, 0, 3335, 0, 0, 9776, 120526, 194748, 5215, - 42644, 3333, 1632, 194751, 64849, 3342, 0, 5363, 12957, 0, 4156, 0, 0, - 6421, 0, 1611, 0, 13018, 74257, 0, 0, 3337, 4537, 67895, 11736, 0, 0, - 6482, 4214, 73790, 11945, 0, 13046, 8838, 425, 4025, 10709, 0, 73927, - 2392, 13047, 0, 0, 10617, 13049, 6499, 194739, 12424, 194741, 73944, - 13050, 194742, 194745, 6507, 0, 0, 0, 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, 194734, - 41057, 0, 0, 0, 0, 0, 0, 0, 0, 41496, 0, 9165, 1572, 11911, 0, 118842, - 2346, 13270, 8958, 0, 9646, 3773, 43183, 6401, 42536, 0, 0, 13043, 8056, - 0, 65681, 208, 0, 0, 0, 0, 0, 10699, 6408, 0, 7825, 5661, 0, 120630, - 3603, 41109, 2398, 3548, 0, 0, 0, 0, 3115, 0, 0, 11321, 0, 0, 0, 194726, - 4876, 74286, 0, 0, 0, 0, 41558, 41471, 73950, 8158, 41561, 41472, 0, - 13051, 194672, 3143, 194674, 194673, 41559, 1896, 66256, 13052, 194680, - 5665, 0, 119071, 41986, 63974, 0, 74352, 74161, 4154, 9863, 43550, 12310, - 5662, 42382, 194686, 73924, 1121, 194665, 63959, 0, 74378, 13231, 0, - 64752, 4732, 194666, 11596, 194668, 65187, 1626, 63983, 10110, 194671, - 42024, 6420, 42028, 0, 10509, 2795, 4910, 194728, 0, 64753, 6275, 0, - 118830, 63978, 11044, 3229, 6423, 42774, 0, 0, 0, 12823, 2331, 917810, - 42026, 6137, 0, 7524, 0, 0, 119343, 0, 8338, 0, 65043, 0, 822, 0, 9903, - 64721, 194657, 194656, 194659, 194658, 194661, 194660, 0, 41265, 5311, - 1795, 965, 118791, 10587, 0, 11278, 0, 194640, 0, 12946, 194641, 120705, - 194643, 6294, 3144, 194648, 194647, 65019, 194649, 73990, 0, 0, 748, - 41067, 2330, 535, 3148, 12375, 194652, 194629, 10556, 2475, 12388, 4889, - 8968, 67863, 3593, 0, 0, 2342, 0, 194634, 65206, 4894, 194635, 4890, - 194637, 0, 581, 4893, 0, 0, 65545, 4888, 4157, 917805, 0, 0, 0, 0, 10119, - 6415, 0, 0, 0, 0, 0, 11375, 64746, 2332, 0, 412, 0, 64932, 42880, 43587, - 0, 0, 0, 0, 65197, 0, 12203, 0, 0, 8913, 65854, 4875, 65811, 120381, - 194624, 120397, 9344, 8826, 120386, 120395, 13104, 74781, 11997, 120393, - 0, 0, 3134, 0, 65696, 0, 0, 66217, 0, 8334, 119344, 0, 3449, 0, 0, 0, 0, - 118950, 74011, 0, 0, 0, 0, 1908, 0, 4328, 10734, 127014, 0, 0, 7804, 0, - 10811, 6250, 11339, 4914, 11367, 0, 118971, 4917, 74516, 0, 64285, 4912, - 5464, 0, 118893, 2361, 7971, 0, 0, 0, 118986, 0, 8086, 74317, 0, 8319, - 2312, 40977, 10960, 40962, 8305, 12573, 0, 40980, 0, 13202, 0, 12582, 0, - 0, 0, 42438, 0, 6288, 0, 0, 5653, 42400, 10891, 7698, 5658, 74045, 0, 0, - 0, 4913, 0, 0, 0, 42326, 0, 0, 0, 42478, 2327, 0, 12959, 42287, 12705, 0, - 0, 12588, 8821, 6153, 2867, 194708, 66312, 698, 194709, 194712, 10356, - 74075, 194713, 651, 12641, 0, 0, 0, 0, 41552, 65115, 194691, 194690, - 194693, 194692, 194695, 194694, 194697, 74356, 0, 4716, 43277, 0, 0, - 12340, 120568, 0, 194700, 194699, 194702, 120676, 8703, 5462, 917629, 0, + 42029, 11079, 12331, 43451, 42032, 8744, 726, 0, 0, 4155, 0, 0, 42030, + 5007, 12522, 43088, 0, 4951, 0, 127240, 0, 9922, 43309, 0, 12525, 0, + 12016, 65770, 9548, 67665, 403, 78230, 12503, 0, 0, 11030, 0, 0, 65691, + 63998, 1819, 10496, 0, 0, 119920, 0, 0, 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, 0, + 41052, 13084, 64766, 43217, 7803, 13222, 74165, 74782, 0, 8546, 11553, + 63995, 13177, 9043, 6303, 0, 498, 64471, 120324, 0, 12529, 8042, 0, 2344, + 12528, 8031, 2414, 0, 0, 3231, 0, 6422, 66512, 0, 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, 0, 119634, + 6503, 41110, 0, 1491, 0, 0, 0, 41061, 0, 0, 0, 65026, 41993, 41509, + 11045, 65028, 78602, 66476, 41108, 9738, 41995, 1075, 1958, 12535, 41992, + 41506, 0, 41687, 0, 120717, 0, 9940, 0, 7692, 0, 8008, 41131, 330, 8566, + 65083, 41133, 9816, 0, 12532, 78550, 78546, 3508, 127058, 43235, 0, + 127298, 69783, 78231, 6411, 12910, 78554, 66644, 13028, 6737, 12537, 0, + 0, 64136, 12536, 2350, 13029, 78233, 0, 0, 13030, 6702, 4527, 0, 12538, + 0, 0, 65599, 65717, 9966, 0, 4948, 12484, 4032, 0, 12623, 0, 6207, 0, + 6117, 65930, 8412, 0, 7438, 1296, 2325, 41511, 0, 10149, 74118, 0, 0, + 12481, 0, 12488, 0, 0, 41556, 64414, 118802, 2354, 0, 73766, 0, 6295, + 901, 41510, 7953, 0, 65032, 41513, 0, 11927, 66584, 78559, 78560, 78557, + 78558, 0, 78556, 848, 9868, 0, 6424, 78568, 119338, 78565, 74031, 78563, + 78564, 2352, 78572, 893, 64576, 11289, 1407, 0, 0, 13026, 6762, 78579, + 78580, 13023, 8903, 9777, 66715, 1871, 8099, 0, 0, 1343, 0, 0, 9325, + 6818, 6283, 11738, 0, 0, 0, 11741, 0, 0, 9216, 8263, 11279, 194752, 0, + 194754, 13021, 64494, 3136, 194758, 194757, 194760, 13022, 42737, 64588, + 0, 0, 74552, 10014, 0, 41260, 119340, 13020, 118993, 194764, 194767, + 74340, 0, 0, 64945, 8029, 0, 0, 0, 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, 78584, 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, + 194739, 12424, 68614, 73944, 13050, 9924, 194745, 6507, 0, 0, 0, 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, 194734, 41057, 0, 0, 0, 0, 0, 0, 127109, 0, 41496, 0, + 9165, 1572, 11911, 0, 118842, 2346, 13270, 8958, 0, 9646, 3773, 43183, + 6401, 5831, 0, 0, 13043, 8056, 0, 65681, 208, 0, 0, 0, 0, 0, 10699, 6408, + 0, 7825, 5661, 0, 120630, 3603, 41109, 2398, 3548, 0, 0, 119933, 0, 3115, + 9918, 0, 11321, 0, 0, 0, 194726, 4876, 74286, 0, 0, 43468, 0, 41558, + 41471, 73950, 8158, 9944, 41472, 0, 13051, 78689, 3143, 194674, 6701, + 41559, 1896, 66256, 13052, 194680, 5665, 0, 119071, 7025, 63974, 0, + 74352, 74161, 4154, 9863, 43550, 12310, 5662, 42382, 194686, 73924, 1121, + 194665, 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, 917808, 118830, 63978, 11044, 3229, + 6423, 42774, 0, 0, 0, 12823, 2331, 917810, 42026, 6137, 0, 7524, 0, + 917809, 119343, 0, 8338, 0, 65043, 0, 822, 0, 9903, 64721, 42722, 194656, + 194659, 78655, 78661, 194660, 78662, 41265, 5311, 1795, 965, 118791, + 10587, 78055, 11278, 78632, 194640, 0, 12946, 194641, 120705, 194643, + 6294, 3144, 194648, 194647, 65019, 194649, 73990, 0, 0, 748, 41067, 2330, + 535, 3148, 12375, 194652, 194629, 10556, 2475, 12388, 4889, 8968, 67863, + 3593, 0, 0, 2342, 0, 194634, 65206, 4894, 194635, 4890, 194637, 917804, + 581, 4893, 0, 6571, 65545, 4888, 4157, 78048, 78049, 78046, 78047, 0, + 10119, 6415, 0, 0, 0, 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, 0, 0, 66217, 0, 8334, + 119344, 0, 3449, 0, 0, 78414, 78413, 118950, 74011, 0, 0, 0, 0, 1908, + 120167, 4328, 10734, 127014, 0, 0, 7804, 78272, 10811, 6250, 11339, 4914, + 11367, 0, 78054, 4917, 74516, 74208, 64285, 4912, 5464, 0, 118893, 2361, + 7971, 78072, 78073, 55243, 78071, 0, 8086, 74317, 6707, 8319, 2312, + 40977, 10960, 40962, 8305, 12573, 0, 40980, 0, 13202, 0, 12582, 78282, 0, + 0, 42438, 55221, 6288, 78280, 0, 5653, 42400, 10891, 7698, 5658, 74045, + 0, 0, 0, 4913, 0, 0, 0, 42326, 0, 0, 0, 42478, 2327, 0, 12563, 42287, + 12705, 0, 0, 12588, 8821, 6153, 2867, 194708, 66312, 698, 194709, 194606, + 10356, 74075, 194713, 651, 12641, 0, 0, 0, 0, 41552, 65115, 78465, 78467, + 78463, 78464, 194695, 78461, 194697, 74356, 0, 4716, 43277, 0, 78474, + 12340, 120568, 0, 194700, 55264, 41211, 120676, 8703, 5462, 917629, 0, 10101, 0, 0, 8479, 4151, 41933, 0, 0, 66254, 120821, 0, 0, 0, 0, 119194, 74050, 0, 0, 0, 0, 0, 0, 12278, 0, 0, 0, 2700, 12576, 7842, 12899, 0, 0, - 2699, 0, 0, 2985, 119222, 0, 0, 12192, 119314, 0, 119312, 9827, 119310, - 119311, 119308, 119309, 119306, 11481, 41210, 119305, 0, 35, 0, 0, 66694, - 74357, 0, 0, 43596, 6090, 64257, 7812, 10534, 0, 0, 73848, 0, 4272, 0, - 40967, 40964, 917825, 12704, 0, 43306, 0, 64497, 12138, 7930, 0, 43303, - 0, 0, 917826, 5244, 4189, 127098, 67596, 0, 4188, 1879, 0, 968, 0, 0, 0, - 8873, 0, 0, 0, 65555, 12574, 0, 0, 0, 74490, 0, 0, 0, 0, 0, 0, 12578, - 12720, 0, 41227, 0, 12346, 0, 64848, 0, 0, 7251, 0, 0, 118850, 119141, 0, - 66015, 0, 959, 8885, 12564, 66457, 0, 9469, 9632, 0, 74761, 64323, 0, 0, - 0, 0, 310, 0, 41564, 10976, 0, 0, 0, 0, 10054, 6497, 8574, 0, 9012, - 19958, 74420, 65089, 13215, 65047, 65163, 74044, 374, 43195, 816, 0, 0, - 0, 41934, 7465, 0, 0, 0, 4715, 6101, 0, 41936, 0, 4879, 0, 65446, 0, 307, - 0, 9585, 5374, 0, 0, 0, 0, 0, 0, 0, 65567, 120614, 1929, 0, 12142, 0, - 12236, 41419, 194618, 194621, 12982, 194623, 5378, 0, 0, 41421, 0, 4462, - 0, 0, 0, 821, 0, 2498, 5800, 120157, 0, 1760, 0, 4469, 2324, 828, 3611, - 0, 757, 1185, 0, 0, 43597, 10628, 74808, 194572, 7999, 0, 0, 0, 10634, - 10942, 7713, 2348, 0, 64374, 4380, 194608, 119044, 194610, 64324, 41240, - 862, 65626, 194613, 1810, 3673, 5137, 194617, 0, 7277, 65622, 0, 7566, - 64688, 194593, 194592, 194595, 120812, 194597, 4748, 194599, 194598, - 194601, 42260, 5871, 119075, 0, 74576, 0, 0, 194602, 3967, 194604, 13137, - 8775, 194605, 0, 2963, 0, 8410, 4454, 723, 0, 966, 4449, 0, 127060, 0, - 7819, 2320, 194589, 339, 4968, 194590, 120399, 8075, 0, 0, 8047, 0, 0, - 12634, 41542, 0, 7466, 118822, 12174, 42610, 0, 74452, 0, 1584, 66645, - 6045, 0, 120640, 65218, 0, 0, 0, 7537, 0, 11370, 0, 10330, 0, 10394, 0, + 2699, 0, 73845, 2985, 119222, 0, 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, 78483, 4272, 0, 40967, 40964, 917825, 12704, + 78487, 43306, 0, 64497, 12138, 7930, 0, 43303, 68216, 0, 917826, 5244, + 4189, 127098, 67596, 0, 4188, 1879, 0, 968, 0, 43743, 0, 8873, 0, 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, 0, 66015, 0, 959, 8885, 12564, 66457, 78808, 9469, 9632, + 0, 74761, 64323, 0, 0, 0, 0, 310, 0, 41281, 10976, 0, 194768, 0, 74266, + 10054, 6497, 8574, 0, 9012, 19958, 74420, 65089, 13215, 65047, 65163, + 74044, 374, 43195, 816, 0, 0, 0, 41934, 7465, 0, 0, 0, 4715, 6101, 0, + 41936, 0, 4879, 0, 65446, 0, 307, 0, 9585, 5374, 0, 0, 0, 0, 0, 0, 0, + 65567, 120614, 1929, 0, 12142, 0, 12236, 41419, 194618, 194621, 12982, + 194623, 5378, 78791, 0, 41421, 0, 4462, 0, 0, 0, 821, 0, 2498, 5800, + 120157, 0, 1760, 0, 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, 194599, 194598, 194601, 42260, 5871, 119075, + 0, 74576, 44019, 0, 194602, 3967, 194604, 13137, 8775, 194605, 0, 2963, + 0, 8410, 4454, 723, 917600, 966, 4449, 0, 127060, 0, 7819, 2320, 194589, + 339, 4968, 194590, 120399, 8075, 55276, 0, 8047, 0, 78827, 12634, 41542, + 78780, 7466, 6705, 12174, 42610, 0, 74452, 0, 1584, 66645, 6045, 6729, + 120640, 65218, 78777, 0, 78062, 7537, 0, 11370, 0, 10330, 0, 10394, 0, 194783, 0, 0, 9780, 0, 13092, 194576, 119605, 194578, 7074, 120396, 194579, 194582, 11414, 194584, 2531, 13034, 0, 0, 0, 1259, 7517, 0, 0, 194561, 40996, 13037, 7092, 641, 5219, 194567, 194566, 11064, 41129, 0, 42850, 13035, 9075, 0, 5466, 194570, 0, 64098, 65793, 4535, 194573, 4271, - 194575, 0, 0, 41410, 0, 64262, 0, 41407, 0, 0, 41131, 118864, 9046, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 64338, 2563, 13033, 247, 917787, 0, 12338, 4651, - 0, 11270, 0, 0, 11933, 0, 0, 41903, 67892, 11001, 0, 42255, 0, 0, 0, - 41905, 0, 0, 10775, 9793, 5009, 0, 42269, 64587, 0, 42535, 0, 64529, - 41408, 42853, 3877, 0, 0, 8147, 43566, 119021, 0, 10236, 65918, 0, 0, 0, - 64506, 0, 118921, 4747, 0, 0, 43200, 5832, 0, 0, 5141, 42600, 0, 43203, - 0, 0, 43286, 0, 0, 0, 0, 0, 0, 74137, 11303, 65547, 0, 7031, 859, 0, 0, - 0, 6059, 126985, 0, 0, 8535, 0, 0, 194787, 66032, 11488, 0, 120786, 0, 0, - 10558, 63885, 0, 11822, 0, 43189, 0, 0, 1788, 1579, 120482, 917817, 0, 0, - 0, 9028, 119571, 0, 0, 0, 1285, 64882, 41242, 0, 0, 12640, 0, 66642, 0, - 12625, 0, 0, 0, 3940, 41597, 0, 3396, 12642, 8665, 0, 0, 12630, 1653, 0, + 78417, 0, 6769, 41410, 0, 64262, 6767, 41407, 0, 0, 6755, 118864, 9046, + 0, 0, 0, 0, 0, 0, 67675, 0, 0, 0, 64338, 2563, 13033, 247, 118915, 0, + 12338, 4651, 0, 11270, 0, 0, 11933, 0, 0, 41903, 43447, 11001, 0, 42255, + 0, 0, 0, 41905, 0, 0, 10775, 9793, 5009, 0, 42269, 64587, 0, 42535, + 69812, 64529, 41408, 42853, 3877, 120795, 42674, 8147, 43566, 119021, 0, + 10236, 65918, 0, 0, 0, 64506, 0, 118921, 4747, 0, 0, 43200, 5832, 0, 0, + 5141, 42600, 0, 43203, 0, 0, 43286, 0, 0, 0, 0, 41305, 78776, 74137, + 11303, 65547, 0, 7031, 859, 0, 0, 0, 6059, 126985, 55235, 0, 8535, 0, + 65196, 194787, 66032, 11488, 0, 120786, 42233, 127488, 9946, 63885, 0, + 11822, 0, 43189, 0, 0, 1788, 1579, 120482, 917817, 0, 0, 0, 9028, 119571, + 69234, 0, 0, 1285, 64882, 41242, 0, 0, 12640, 0, 7401, 0, 12625, 68198, + 0, 0, 3940, 41597, 55260, 3396, 12642, 8665, 0, 0, 12630, 1653, 917815, 10153, 0, 6166, 120516, 120523, 0, 8815, 66673, 65046, 9285, 913, 42259, - 119317, 119318, 119315, 119316, 42485, 118837, 7878, 8211, 42293, 64377, - 0, 0, 0, 0, 12032, 0, 9725, 0, 0, 5263, 12818, 0, 41939, 10022, 65387, - 118831, 42777, 10139, 980, 0, 65386, 0, 0, 0, 43198, 7184, 0, 194797, - 917819, 10085, 119992, 0, 119999, 6634, 0, 0, 119323, 8072, 119321, - 119322, 0, 8872, 7783, 917992, 12398, 8237, 0, 0, 12395, 0, 0, 120565, - 9914, 127011, 917854, 73975, 74281, 0, 0, 0, 917853, 0, 64735, 41243, 0, - 7808, 1829, 0, 41937, 4358, 43272, 0, 0, 0, 0, 0, 1710, 0, 0, 0, 0, 49, - 6627, 0, 6258, 10683, 0, 9741, 120423, 5649, 917986, 0, 64418, 1643, - 74104, 8405, 3470, 0, 13213, 42452, 917987, 0, 120009, 0, 1072, 0, - 917990, 0, 6576, 41988, 41132, 65675, 1080, 120002, 74100, 0, 1101, - 120001, 12309, 0, 0, 12632, 1086, 1869, 0, 7680, 0, 65458, 120714, 12639, - 3380, 8123, 1091, 12638, 7977, 4501, 0, 0, 66309, 0, 0, 1494, 0, 0, 0, - 11693, 0, 10494, 119230, 65872, 12363, 11386, 0, 0, 0, 0, 64582, 0, - 73794, 0, 8022, 0, 0, 74106, 12413, 0, 0, 0, 0, 5570, 1881, 7210, 0, - 1012, 66630, 0, 120709, 7208, 66442, 5569, 0, 42339, 0, 6063, 0, 0, 0, + 119317, 119318, 119315, 68454, 42485, 118837, 7878, 8211, 42293, 64377, + 0, 0, 0, 194673, 12032, 0, 9725, 0, 78431, 5263, 12818, 78430, 41939, + 10022, 65387, 78419, 42777, 10139, 980, 43698, 65386, 0, 0, 43701, 43198, + 7184, 120673, 194797, 917819, 10085, 119992, 0, 119993, 6634, 0, 0, + 119323, 8072, 119321, 43700, 0, 8872, 7783, 917992, 12398, 8237, 0, 0, + 12395, 0, 126977, 120565, 9914, 127011, 917854, 73975, 6367, 6351, 66688, + 0, 78107, 0, 64735, 41243, 0, 7808, 1829, 0, 41937, 4358, 43272, 6353, 0, + 0, 120422, 0, 1710, 0, 0, 65607, 0, 49, 6627, 0, 6258, 10683, 78672, + 9741, 78443, 5649, 78441, 43443, 64418, 1643, 65213, 8405, 3470, 0, + 13213, 42452, 78331, 0, 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, 0, 0, 66309, 0, 0, 1494, 0, 0, 0, 11693, 0, + 10494, 119230, 65872, 12363, 11386, 0, 0, 0, 0, 64582, 0, 73794, 0, 8022, + 0, 0, 74106, 12413, 194829, 917994, 0, 917995, 5570, 1881, 7210, 0, 1012, + 66630, 0, 120709, 7208, 66442, 5569, 0, 42339, 0, 6063, 0, 0, 119594, 6053, 65602, 0, 0, 64727, 9160, 194827, 0, 0, 0, 10503, 118810, 6055, 3870, 4279, 8490, 120114, 4319, 64786, 8602, 120110, 11326, 0, 0, 0, - 120119, 120413, 120117, 120118, 120099, 120100, 65087, 5571, 3674, 9740, - 9121, 5568, 120107, 120108, 42085, 10107, 64567, 42870, 120101, 589, + 120119, 78333, 120117, 120118, 120099, 120100, 65087, 5571, 3674, 9740, + 9121, 5568, 120107, 120108, 42085, 10107, 42159, 42870, 120101, 589, 7050, 0, 43281, 10233, 41263, 66251, 65729, 66253, 0, 74099, 42645, 0, - 194815, 8583, 0, 5847, 6928, 0, 0, 0, 0, 0, 66592, 12204, 0, 19966, 0, - 42561, 120626, 0, 0, 8120, 120701, 0, 0, 0, 41063, 0, 10664, 0, 8369, 0, - 4551, 0, 74759, 0, 0, 9673, 66334, 65580, 10478, 127002, 12517, 557, - 9457, 12034, 0, 41056, 12519, 41004, 0, 0, 74094, 0, 0, 119001, 0, 0, 0, - 12111, 3927, 0, 12515, 1474, 67893, 5492, 6923, 0, 10441, 73836, 0, 0, - 5493, 0, 74319, 0, 66635, 12019, 0, 1618, 0, 0, 9645, 10430, 0, 5853, - 13063, 10363, 0, 12956, 0, 0, 11314, 0, 12060, 0, 0, 12826, 0, 0, 10514, - 65517, 74395, 2707, 8309, 0, 127054, 0, 43570, 2697, 0, 0, 127057, 2695, - 42171, 0, 0, 0, 67617, 194814, 0, 2693, 12125, 12766, 0, 1164, 0, 0, - 41918, 0, 0, 8687, 66009, 12178, 7053, 0, 7469, 0, 5248, 12218, 120538, - 6427, 42884, 41123, 0, 0, 42873, 41126, 9991, 41128, 74371, 127031, 0, - 9873, 0, 42877, 7994, 64762, 6104, 42843, 6591, 9340, 0, 1589, 0, 296, - 74438, 0, 0, 67841, 74370, 0, 8922, 0, 74600, 74435, 74836, 0, 12579, 0, - 12575, 6416, 5656, 2891, 13262, 65590, 5299, 0, 11473, 5449, 1252, 0, 0, - 41431, 74369, 65373, 5295, 0, 74114, 1223, 1642, 174, 0, 883, 4161, - 12691, 42603, 41413, 3212, 127025, 3211, 74810, 41425, 127029, 0, 74450, - 9728, 3846, 8070, 6150, 6636, 4370, 0, 0, 74178, 74587, 74117, 0, 0, 0, - 4986, 12189, 0, 0, 120499, 917553, 4257, 12104, 119182, 6220, 9004, - 65561, 0, 0, 0, 68135, 917576, 0, 0, 0, 0, 9890, 0, 12971, 0, 0, 73898, - 11979, 0, 118900, 0, 0, 9635, 12600, 8871, 0, 0, 0, 6469, 74227, 0, + 194815, 8583, 0, 5847, 6928, 0, 0, 0, 0, 0, 66592, 12204, 0, 19966, + 77856, 42561, 120626, 0, 0, 8120, 120701, 0, 0, 0, 41063, 0, 10664, 0, + 8369, 0, 4551, 0, 74759, 0, 0, 9673, 66334, 65580, 10478, 118960, 12517, + 557, 9457, 12034, 0, 6355, 12519, 41004, 0, 0, 74094, 0, 0, 77970, 0, 0, + 0, 12111, 3927, 0, 12515, 1474, 67893, 5492, 6923, 0, 10441, 73836, 0, + 43990, 5493, 0, 74319, 0, 66635, 12019, 0, 1618, 0, 120474, 9645, 10430, + 917959, 5853, 13063, 10363, 0, 12956, 0, 120729, 11314, 0, 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, 0, 0, 41918, 0, 0, 8687, 66009, 12178, + 7053, 0, 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, 0, 74600, 12700, 74836, 0, 12579, 0, 12575, 6416, 5656, 2891, + 13262, 65590, 5299, 0, 11473, 5449, 1252, 0, 78404, 41431, 74369, 65373, + 5295, 0, 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, 917553, 4257, 12104, 77942, 6220, 9004, 65561, 0, 77949, + 0, 68135, 917576, 77946, 0, 0, 0, 9890, 78561, 12971, 78453, 0, 73898, + 11979, 0, 118900, 917894, 0, 9635, 12600, 8871, 0, 0, 0, 6469, 74227, 0, 65304, 4679, 10230, 64300, 64867, 3427, 4240, 0, 0, 0, 0, 917952, 0, 0, - 0, 7282, 0, 65733, 64618, 0, 0, 3494, 74606, 6555, 0, 0, 0, 0, 0, 0, 0, - 65898, 0, 65312, 5447, 0, 12895, 65593, 4010, 0, 41106, 0, 65804, 0, - 41105, 0, 65820, 6232, 0, 0, 0, 43608, 119091, 0, 6538, 4335, 0, 3941, - 41122, 11061, 0, 64892, 9113, 1954, 12155, 0, 42878, 0, 0, 0, 74578, 0, - 65832, 0, 0, 0, 0, 0, 4586, 0, 350, 10951, 0, 509, 0, 0, 0, 0, 0, 5133, - 0, 0, 9500, 0, 12162, 64741, 0, 9354, 0, 0, 0, 2496, 11516, 944, 118851, - 3890, 12168, 1438, 0, 0, 0, 41947, 1220, 120828, 0, 0, 0, 1571, 42630, - 41949, 42805, 8270, 943, 564, 0, 312, 41980, 0, 0, 0, 8877, 269, 4429, - 6272, 9617, 1460, 6954, 0, 41120, 65121, 10862, 6060, 41119, 41416, - 74355, 4173, 0, 0, 0, 1906, 0, 11532, 74073, 0, 0, 1985, 6296, 9582, - 917895, 64287, 0, 0, 11428, 1730, 2457, 0, 19918, 10469, 0, 0, 7703, - 8840, 8035, 0, 0, 0, 0, 6129, 0, 0, 0, 0, 7874, 8681, 0, 0, 13136, 0, 0, - 74278, 63886, 118881, 9605, 73892, 13220, 0, 0, 5514, 0, 9228, 0, 0, 0, - 5240, 9811, 10012, 3096, 0, 0, 0, 66676, 65873, 0, 0, 0, 9501, 0, 1272, - 64536, 65465, 64654, 7467, 0, 1467, 10158, 10040, 0, 9519, 0, 0, 0, - 118899, 12193, 0, 0, 0, 0, 0, 19935, 0, 0, 0, 0, 0, 0, 5275, 0, 0, 8637, - 0, 0, 3789, 63880, 11471, 43554, 65862, 11474, 66332, 66603, 0, 0, 12042, - 0, 0, 9537, 3961, 12115, 0, 2605, 4500, 64561, 0, 4981, 0, 0, 63876, - 11667, 0, 0, 42362, 64686, 4499, 41649, 7589, 0, 0, 3237, 0, 120194, 0, - 8541, 0, 0, 41866, 0, 0, 0, 0, 0, 43555, 2823, 9559, 0, 41940, 8299, + 0, 7282, 78728, 65733, 4445, 0, 0, 3494, 74606, 6555, 0, 77976, 0, 0, + 78566, 0, 0, 65898, 0, 65312, 5447, 0, 12895, 65593, 4010, 0, 41106, 0, + 65804, 0, 41105, 0, 65820, 6232, 0, 0, 0, 43608, 119091, 0, 6538, 4335, + 78364, 3941, 41122, 11061, 78363, 64892, 9113, 1954, 12155, 0, 42878, + 11500, 0, 0, 74578, 0, 65832, 0, 0, 0, 77975, 0, 4586, 0, 350, 10951, 0, + 509, 0, 0, 0, 0, 0, 5133, 0, 0, 9500, 0, 12162, 64741, 0, 9354, 0, 0, 0, + 2496, 11516, 944, 118851, 3890, 12168, 1438, 0, 0, 0, 41947, 1220, + 120828, 0, 0, 0, 1571, 42630, 41949, 42805, 8270, 943, 564, 0, 312, + 41980, 0, 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, 0, 0, 1985, 6296, 9582, 917895, 64287, 0, 78115, + 11428, 1730, 2457, 0, 19918, 10469, 0, 0, 7703, 8840, 8035, 0, 0, 0, 0, + 6129, 0, 0, 0, 0, 7874, 8681, 0, 0, 13136, 0, 0, 74278, 63886, 118881, + 9605, 73892, 13220, 0, 120274, 5514, 0, 9228, 0, 0, 0, 5240, 9811, 10012, + 3096, 0, 0, 0, 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, 0, 19935, 0, 0, 0, 0, 0, 0, 5275, 0, 0, 8637, 0, 0, 3789, 63880, + 11471, 43554, 65862, 11474, 66332, 66603, 0, 2426, 12042, 0, 0, 9537, + 3961, 12115, 0, 2605, 4500, 64561, 55224, 4981, 0, 0, 63876, 11667, + 42686, 77973, 42362, 64686, 4499, 41649, 7589, 0, 0, 3237, 0, 68215, 0, + 8541, 78298, 0, 41866, 0, 0, 0, 0, 0, 43555, 2823, 9559, 0, 41940, 8299, 41945, 0, 41941, 3308, 7190, 64880, 8614, 65220, 41493, 0, 41699, 10762, 0, 12999, 0, 0, 8106, 4128, 0, 0, 4494, 0, 4012, 10395, 0, 119567, 65447, 0, 0, 11004, 695, 739, 696, 7611, 0, 42755, 74802, 9227, 7506, 7510, 0, 691, 738, 7511, 7512, 7515, 3868, 688, 41847, 690, 2548, 737, 974, 8003, - 0, 0, 0, 0, 3985, 0, 65860, 63921, 7051, 74208, 4682, 0, 12809, 6406, - 4685, 0, 10879, 10347, 4680, 9055, 0, 3851, 8132, 74325, 0, 917907, 0, - 41958, 119176, 917908, 0, 0, 0, 0, 7643, 42373, 11714, 67587, 43568, 0, - 11717, 7650, 10594, 64951, 7647, 7649, 0, 7646, 0, 0, 9651, 0, 3891, 0, - 0, 2337, 1735, 74324, 67860, 5452, 0, 0, 43561, 0, 0, 74146, 1860, 7495, - 7580, 5812, 7497, 7584, 0, 0, 0, 0, 7727, 0, 8498, 0, 8949, 3065, 0, 0, - 1569, 0, 12534, 12124, 7690, 0, 12533, 0, 6418, 4543, 0, 6969, 0, 74800, - 0, 0, 11980, 0, 0, 63894, 0, 12282, 66192, 0, 0, 8850, 74275, 9238, 0, 0, - 0, 0, 0, 12791, 0, 0, 0, 0, 73732, 12793, 12900, 0, 10950, 0, 0, 12790, - 41400, 119128, 0, 12792, 0, 0, 1744, 12789, 10366, 12317, 41310, 0, - 41399, 0, 0, 0, 0, 12690, 0, 0, 0, 0, 41652, 2974, 0, 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, 0, 0, 0, 0, 6413, - 6550, 0, 1940, 0, 66223, 220, 65193, 43551, 10678, 10044, 0, 0, 0, 0, - 6403, 5707, 10393, 0, 0, 66614, 0, 0, 0, 10297, 0, 3742, 0, 3959, 0, 0, - 0, 2467, 0, 6003, 63844, 6663, 8040, 0, 63845, 4182, 0, 4676, 120501, 0, - 0, 2510, 0, 10208, 0, 0, 11540, 43546, 12186, 0, 41060, 0, 0, 9083, 0, 0, - 0, 1559, 63831, 9677, 120260, 0, 65256, 0, 74070, 0, 0, 365, 12056, - 43027, 0, 41716, 0, 0, 0, 5516, 2845, 7717, 8036, 41717, 73827, 544, - 12045, 6278, 0, 5515, 0, 0, 0, 0, 43221, 65194, 0, 5517, 0, 0, 0, 67884, - 0, 67890, 67885, 67880, 67881, 67882, 67883, 0, 0, 67879, 0, 1902, 67887, - 9638, 12976, 0, 12483, 67872, 41769, 0, 41765, 0, 6667, 67874, 7556, - 67878, 74351, 11264, 989, 67876, 67889, 0, 1311, 0, 4326, 11000, 63824, - 13068, 10932, 0, 6917, 0, 0, 949, 917595, 0, 6148, 8605, 42253, 917967, - 0, 0, 0, 0, 0, 0, 63871, 0, 41796, 1269, 6530, 0, 65057, 0, 5144, 12221, - 0, 0, 4431, 4331, 0, 0, 41834, 5279, 0, 10336, 8312, 0, 118861, 0, 0, - 119654, 66036, 0, 0, 6428, 42270, 0, 0, 118866, 0, 5256, 1067, 255, - 12131, 0, 9493, 0, 41014, 11793, 0, 0, 74394, 43594, 10653, 0, 0, 119632, - 0, 6560, 7016, 74274, 0, 43556, 3929, 0, 6614, 2768, 0, 9746, 5135, - 11811, 12796, 11953, 0, 0, 5139, 346, 74303, 6305, 12795, 4675, 5168, 0, - 0, 74315, 74361, 8253, 8817, 1136, 0, 43563, 0, 0, 0, 65285, 8230, 9365, - 0, 0, 0, 0, 0, 4041, 0, 2357, 0, 12786, 229, 119885, 119884, 0, 43552, + 7406, 0, 0, 0, 3985, 0, 65860, 63921, 7051, 69777, 4682, 917805, 12809, + 6406, 4685, 0, 10879, 10347, 4680, 6341, 0, 3851, 8132, 74325, 0, 917907, + 0, 41958, 119176, 917908, 0, 0, 42657, 0, 7643, 42373, 11714, 67587, + 43568, 0, 11717, 7650, 10594, 64951, 7647, 7649, 0, 7646, 0, 78082, 9651, + 0, 3891, 0, 0, 2337, 1735, 74324, 67860, 5452, 0, 0, 43561, 0, 0, 74146, + 1860, 7495, 7580, 5812, 7497, 7584, 0, 0, 0, 120347, 7727, 0, 8498, + 69818, 8949, 3065, 42719, 0, 1569, 0, 12534, 12124, 7690, 0, 12533, 0, + 6418, 4543, 78086, 6969, 0, 74800, 0, 0, 11980, 0, 0, 63894, 120760, + 12282, 66192, 0, 74592, 8850, 74275, 9238, 10617, 917545, 0, 0, 0, 12791, + 0, 0, 0, 4447, 73732, 12793, 12900, 0, 10950, 0, 78087, 12790, 41400, + 119128, 0, 12792, 42232, 0, 1744, 12789, 10366, 12317, 41310, 0, 41399, + 0, 0, 55258, 0, 12690, 0, 0, 43672, 0, 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, 0, 77829, 0, 0, 6413, + 6550, 0, 1940, 0, 43637, 220, 65193, 43551, 10678, 10044, 0, 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, 63845, 4182, 78171, 4676, + 120501, 0, 0, 2510, 0, 10208, 78168, 0, 11540, 43546, 6692, 0, 41060, 0, + 0, 9083, 0, 0, 78144, 1559, 63831, 9677, 120260, 0, 65256, 0, 74070, 0, + 0, 365, 12056, 43027, 120423, 41716, 0, 0, 120472, 5516, 2845, 7717, + 8036, 41717, 73827, 544, 12045, 6278, 0, 5515, 0, 0, 0, 65339, 43221, + 65194, 0, 5517, 0, 0, 74841, 67884, 0, 67890, 67885, 67880, 67881, 67882, + 67883, 0, 0, 67879, 0, 1902, 67887, 9638, 12976, 0, 12483, 12368, 41769, + 42726, 41765, 0, 6667, 67874, 7556, 67878, 74351, 11264, 989, 42677, + 67889, 0, 1311, 0, 4326, 11000, 63824, 13068, 10932, 0, 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, 0, 0, + 41834, 5279, 0, 10336, 8312, 0, 42701, 0, 0, 78165, 66036, 0, 0, 6428, + 42270, 0, 0, 43059, 42666, 5256, 1067, 255, 12131, 0, 9493, 0, 41014, + 11793, 0, 0, 74394, 43460, 10653, 42723, 0, 119632, 0, 6560, 7016, 74274, + 0, 43556, 3929, 0, 6614, 2768, 0, 9746, 5135, 11811, 12796, 11953, 0, + 69761, 5139, 346, 74303, 6305, 12795, 4675, 5168, 78552, 0, 74315, 74361, + 8253, 8817, 1136, 0, 43563, 0, 0, 194750, 7392, 8230, 9365, 0, 0, 0, 0, + 0, 4041, 0, 2357, 43240, 12786, 229, 119885, 119884, 44004, 43552, 119881, 12350, 65554, 119882, 119877, 119876, 12785, 63863, 119873, 7770, - 10712, 64853, 12686, 118916, 42375, 0, 0, 66352, 10470, 0, 11059, 10791, - 0, 450, 0, 0, 10432, 12097, 5450, 64691, 1233, 0, 63856, 0, 66338, 0, 0, - 1839, 118799, 0, 10927, 1701, 0, 2388, 41749, 41761, 5453, 8361, 119865, - 41758, 5444, 41763, 64889, 119860, 119863, 119862, 0, 0, 0, 66432, 8801, - 3053, 4340, 0, 0, 65812, 0, 0, 41824, 0, 194801, 194800, 194803, 118997, - 194805, 194804, 194807, 194806, 194809, 194808, 0, 0, 4493, 4336, 0, - 2314, 43602, 0, 119325, 194811, 42439, 64638, 42327, 43528, 4489, 194791, - 0, 194793, 1912, 42385, 10306, 10370, 0, 0, 8867, 10250, 10258, 2712, - 1635, 194798, 1410, 0, 0, 118878, 0, 0, 0, 0, 559, 0, 41825, 0, 0, 4892, - 74016, 194781, 6542, 41957, 0, 5777, 0, 759, 65749, 65750, 65248, 12788, - 64487, 64552, 0, 10223, 42062, 0, 0, 0, 3668, 65754, 43560, 12226, 0, - 65149, 2340, 41959, 194786, 194785, 194788, 120154, 65747, 10937, 2962, - 0, 2321, 3587, 65745, 0, 8921, 66013, 0, 0, 194769, 194768, 194771, - 194770, 2949, 66012, 194775, 194774, 2958, 194776, 41820, 43038, 2395, 0, - 0, 120043, 194778, 120058, 194780, 194779, 42809, 42807, 0, 120047, - 10198, 4150, 64371, 8318, 41790, 0, 41898, 2360, 41794, 917942, 0, 0, 0, - 0, 2418, 0, 2411, 11336, 799, 63823, 10276, 10308, 10372, 917541, 41772, - 42813, 2317, 10260, 118980, 119576, 0, 0, 10384, 0, 0, 0, 7753, 2351, - 6655, 64489, 0, 0, 0, 0, 42779, 230, 0, 0, 43549, 4855, 42150, 65739, - 5441, 41896, 10288, 10320, 0, 855, 7046, 6109, 65045, 63839, 119116, 0, - 10098, 0, 74145, 0, 10264, 10280, 9184, 10376, 7013, 4467, 0, 0, 0, - 41887, 0, 4862, 9735, 6537, 120591, 0, 3914, 119604, 0, 9065, 12961, 0, - 0, 0, 0, 289, 0, 4694, 11420, 4690, 0, 120514, 0, 4693, 0, 73919, 0, - 4688, 120454, 0, 0, 119629, 8238, 3110, 120162, 0, 120163, 6528, 0, - 43035, 120161, 218, 0, 1520, 0, 4786, 0, 43225, 0, 0, 120158, 10088, - 6548, 0, 120156, 0, 8988, 8888, 0, 0, 0, 0, 10666, 0, 73902, 0, 0, 0, 0, - 0, 0, 4689, 8932, 0, 65560, 119209, 74441, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 10065, 8207, 0, 0, 0, 0, 662, 0, 9244, 0, 0, 119261, 0, 0, 0, 0, 41929, - 0, 0, 0, 41926, 0, 120443, 10513, 64637, 0, 0, 52, 13118, 6475, 0, 0, - 12095, 10225, 4812, 0, 0, 0, 74085, 0, 3978, 0, 0, 0, 11582, 120761, - 12281, 0, 6544, 13241, 0, 0, 0, 194860, 11765, 65258, 10369, 0, 1585, + 10712, 64853, 12686, 118916, 42375, 0, 127238, 66352, 10470, 0, 11059, + 10791, 917944, 450, 0, 0, 10432, 12097, 5450, 64691, 1233, 0, 44009, + 78284, 66338, 0, 0, 1839, 118799, 0, 10927, 1701, 0, 2388, 41749, 41761, + 5453, 8361, 119865, 41758, 5444, 41763, 64889, 119860, 119863, 78677, 0, + 0, 78174, 66432, 8801, 3053, 4340, 0, 0, 65812, 917831, 0, 41824, 0, + 194801, 194800, 194803, 42700, 194805, 194804, 194807, 78676, 120413, + 194808, 0, 0, 4493, 4336, 0, 2314, 43602, 78826, 119325, 194811, 42439, + 64638, 42327, 43528, 4489, 194791, 0, 194793, 1912, 42385, 10306, 10370, + 0, 0, 8867, 10250, 10258, 2712, 1635, 78821, 1410, 0, 0, 118878, 0, 0, + 9919, 0, 559, 0, 41825, 0, 78188, 4892, 74016, 194781, 6542, 41957, 0, + 5777, 0, 759, 65749, 2079, 65248, 12788, 64487, 64552, 0, 10223, 42062, + 0, 0, 0, 3668, 65754, 43560, 12226, 0, 65149, 2340, 41959, 194786, + 194785, 194788, 43618, 65747, 10937, 2962, 0, 2321, 3587, 65745, 0, 8921, + 9952, 0, 0, 42714, 9951, 43409, 194770, 2949, 66012, 194775, 194774, + 2958, 68359, 41820, 43038, 2395, 0, 9976, 120043, 194778, 120058, 68220, + 194779, 42809, 42807, 0, 120046, 10198, 4150, 64371, 8318, 41790, 0, + 41898, 2360, 41794, 917942, 0, 0, 0, 0, 2418, 0, 2411, 11336, 799, 63823, + 10276, 10308, 10372, 917541, 41772, 42813, 2317, 10260, 118980, 55284, 0, + 0, 10384, 0, 0, 0, 7753, 2351, 6655, 64489, 0, 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, 0, 10264, 10280, + 9184, 10376, 7013, 4467, 0, 0, 0, 41887, 0, 4862, 9735, 6537, 120591, 0, + 3914, 119604, 0, 9065, 12961, 0, 0, 0, 0, 289, 0, 4694, 11420, 4690, 0, + 120514, 917978, 4693, 0, 42724, 0, 4688, 120454, 0, 0, 119629, 8238, + 3110, 120162, 0, 120163, 6528, 127553, 43035, 120161, 218, 0, 1520, 0, + 4786, 0, 43225, 4602, 0, 78167, 10088, 6548, 0, 120156, 43978, 8988, + 8888, 0, 0, 0, 0, 10666, 0, 73902, 0, 0, 0, 9975, 0, 119902, 4689, 8932, + 0, 65560, 119209, 74441, 78810, 0, 0, 0, 0, 0, 0, 0, 0, 10065, 8207, 0, + 120539, 0, 0, 662, 0, 9244, 0, 0, 119261, 0, 0, 0, 0, 41929, 0, 0, 66674, + 41926, 120408, 120443, 10513, 64637, 194862, 0, 52, 13118, 6475, 0, 0, + 12095, 10225, 4812, 0, 0, 0, 74085, 0, 3978, 0, 917945, 0, 11582, 120761, + 12281, 0, 6544, 13241, 0, 69782, 0, 194860, 11765, 65258, 10369, 0, 1585, 7192, 10249, 422, 1500, 2036, 986, 194859, 64394, 5781, 5599, 64294, - 2494, 120450, 4861, 74021, 64334, 0, 0, 0, 0, 65102, 8961, 0, 10243, - 10245, 0, 0, 0, 120453, 64821, 9478, 2508, 0, 0, 202, 0, 74131, 1242, 0, - 0, 63940, 0, 64533, 0, 0, 67842, 11990, 0, 63939, 0, 65440, 2504, 0, 0, - 64829, 0, 6943, 0, 5859, 0, 2858, 0, 74294, 0, 74305, 0, 119027, 12992, - 2753, 1936, 74491, 0, 2751, 12662, 2763, 8953, 64701, 10731, 12922, 0, 0, - 0, 0, 0, 0, 74128, 2856, 119910, 47, 119911, 126986, 65858, 0, 0, 0, - 7899, 0, 8417, 65903, 7072, 0, 0, 4033, 0, 66474, 0, 0, 212, 64600, 1903, - 12320, 0, 0, 0, 0, 8915, 2759, 945, 0, 0, 0, 0, 0, 1291, 74828, 0, 0, - 9531, 13155, 8505, 0, 12062, 0, 0, 65487, 0, 41837, 120611, 120432, 0, 0, - 0, 120433, 0, 63935, 73962, 0, 64787, 43524, 0, 64426, 0, 0, 0, 0, 65664, - 64785, 9843, 0, 8674, 0, 0, 0, 0, 12624, 0, 1673, 4811, 0, 5986, 9338, - 3046, 74480, 5985, 917928, 119598, 9820, 0, 12187, 0, 0, 5984, 0, 43308, - 4393, 0, 0, 0, 0, 0, 74826, 64733, 0, 0, 3491, 0, 0, 0, 3514, 65485, 0, - 7492, 0, 0, 0, 7514, 0, 0, 194731, 7502, 7587, 0, 0, 0, 63925, 0, 7610, - 219, 0, 0, 692, 43588, 74433, 41635, 0, 9688, 0, 9535, 0, 0, 0, 0, 0, - 64610, 11804, 0, 0, 7453, 0, 8013, 0, 0, 0, 8895, 5253, 0, 5458, 0, 2866, - 0, 0, 65111, 0, 12018, 120484, 0, 0, 0, 8962, 0, 9641, 66653, 7059, 0, 0, - 9604, 0, 7441, 63826, 0, 118941, 64392, 0, 0, 2844, 0, 41974, 0, 12139, - 0, 0, 0, 3358, 65295, 0, 3104, 0, 0, 0, 0, 5308, 0, 290, 0, 0, 2862, - 2792, 195088, 0, 0, 3268, 66591, 0, 6552, 42367, 7035, 120558, 0, 0, - 1814, 0, 10240, 0, 195092, 0, 119020, 0, 0, 42646, 7606, 2591, 2837, - 4341, 0, 64482, 0, 8163, 65270, 0, 0, 0, 9112, 74431, 863, 9490, 0, 0, - 43323, 120513, 0, 9071, 0, 0, 3654, 0, 9637, 0, 2535, 65504, 7653, 40993, - 0, 66587, 195098, 0, 0, 0, 11006, 12927, 7807, 8073, 0, 10629, 0, 74088, - 3056, 10823, 0, 0, 8762, 10508, 74506, 73770, 63994, 43193, 10737, 3463, - 0, 0, 66633, 8695, 4815, 11322, 5811, 12345, 7049, 0, 5195, 0, 0, 66639, - 0, 0, 0, 0, 0, 120561, 1262, 0, 6561, 19939, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 119907, 64612, 11991, 0, 0, 0, 1502, 0, 0, 9107, 0, 5702, 3655, 0, 8430, - 0, 74132, 0, 0, 74057, 9603, 0, 5254, 120742, 7724, 74388, 74838, 10796, - 5129, 0, 0, 590, 7579, 5614, 5893, 194744, 11720, 0, 11721, 0, 0, 0, - 120541, 66038, 4793, 67851, 11726, 0, 74204, 0, 0, 917600, 894, 300, 0, - 12306, 66235, 0, 0, 0, 2562, 0, 0, 42503, 0, 11652, 0, 0, 119241, 0, 0, - 5096, 5095, 2863, 3424, 0, 10454, 42530, 5094, 119638, 0, 13156, 0, - 10832, 5093, 0, 0, 0, 5092, 10708, 11327, 0, 5091, 176, 0, 9153, 4104, 0, - 0, 1215, 0, 5744, 12272, 9832, 11777, 0, 0, 42881, 0, 8980, 118988, - 67861, 8844, 7433, 0, 0, 4278, 0, 0, 0, 0, 9074, 4348, 0, 65558, 65946, - 8113, 7087, 5255, 1786, 661, 0, 0, 0, 74423, 0, 586, 74414, 64359, 1267, - 0, 0, 0, 65731, 0, 0, 3621, 0, 66666, 0, 0, 6562, 12928, 0, 1228, 65490, - 11383, 0, 0, 0, 1714, 74406, 0, 0, 0, 0, 66225, 0, 0, 0, 11436, 119615, - 64, 0, 0, 10291, 10323, 2826, 0, 0, 0, 42008, 9708, 0, 0, 42011, 41999, - 0, 12206, 5839, 1702, 1240, 74065, 6286, 0, 0, 65833, 0, 0, 1765, 0, 0, - 65588, 0, 0, 0, 8401, 0, 42014, 0, 7030, 0, 10479, 64959, 2852, 0, 0, 0, - 0, 0, 0, 6963, 0, 12667, 0, 74786, 10147, 12935, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 64947, 12467, 2864, 64719, 1148, 10435, 11462, 41675, 0, 2765, 0, - 0, 0, 0, 0, 0, 66662, 0, 0, 9364, 194685, 74416, 0, 0, 119244, 263, - 10449, 41288, 0, 41839, 0, 0, 0, 0, 6931, 0, 64355, 7177, 120530, 0, 0, - 0, 4262, 10285, 10722, 42020, 0, 0, 6992, 42019, 0, 41290, 0, 750, 0, 0, - 10163, 0, 74066, 7032, 5954, 64931, 4314, 0, 198, 0, 730, 0, 0, 0, 0, - 13165, 10814, 74171, 42804, 678, 8240, 118960, 0, 41378, 11008, 6938, 0, - 0, 42812, 66246, 120560, 0, 0, 0, 3892, 0, 0, 0, 66045, 41470, 64805, 0, - 0, 0, 118982, 0, 497, 12100, 5953, 0, 7796, 0, 0, 73831, 0, 10293, 5952, - 1281, 0, 0, 0, 10677, 604, 41097, 9182, 1859, 0, 0, 3425, 0, 0, 2836, 0, - 0, 9707, 0, 43202, 0, 0, 65199, 1738, 0, 0, 2832, 0, 9670, 12937, 0, 0, - 0, 0, 2822, 0, 4436, 0, 0, 73752, 0, 64872, 0, 1331, 0, 0, 0, 12708, 0, - 5090, 5089, 0, 0, 119109, 0, 0, 319, 118931, 0, 9477, 0, 0, 5087, 0, - 7640, 96, 5086, 0, 0, 0, 5085, 64286, 0, 0, 41422, 0, 119901, 42356, - 3772, 0, 0, 5011, 0, 0, 0, 0, 0, 0, 6677, 7601, 0, 591, 64419, 118953, 0, - 0, 118923, 0, 0, 10939, 6106, 6933, 41271, 0, 119903, 4534, 41270, 0, 0, - 65574, 0, 9224, 0, 3671, 8976, 0, 0, 41275, 0, 0, 0, 7963, 42013, 0, 568, - 0, 41273, 0, 0, 0, 0, 9715, 0, 8258, 11753, 74820, 0, 9602, 118919, 42, - 0, 0, 0, 0, 7458, 0, 0, 65385, 0, 0, 11958, 0, 0, 0, 6254, 0, 66336, + 2494, 120450, 4861, 74021, 64334, 78203, 0, 0, 0, 65102, 8961, 65842, + 10243, 10245, 0, 120410, 0, 120453, 64821, 9478, 2508, 0, 0, 202, 0, + 74131, 1242, 65514, 0, 63940, 0, 64533, 120129, 0, 67842, 11990, 0, + 63939, 43375, 65440, 2504, 0, 78671, 64829, 0, 6943, 917934, 5859, 0, + 2858, 0, 74294, 0, 69239, 0, 119027, 12992, 2753, 1936, 74491, 0, 2751, + 12662, 2763, 8953, 64701, 10731, 12922, 7052, 917839, 0, 0, 0, 63920, + 74128, 2856, 119910, 47, 119911, 126986, 65858, 0, 0, 0, 7899, 0, 8417, + 65903, 7072, 0, 0, 4033, 0, 43992, 0, 0, 212, 64600, 1903, 12320, 0, 0, + 0, 0, 8915, 2759, 945, 6689, 0, 0, 0, 0, 1291, 74828, 0, 0, 9531, 13155, + 8505, 68379, 12062, 0, 0, 65487, 0, 41837, 120611, 120432, 0, 0, 0, + 120433, 0, 63935, 73962, 120806, 64787, 43524, 0, 64426, 0, 0, 0, 0, + 65664, 6693, 9843, 0, 8674, 0, 0, 0, 0, 12624, 0, 1673, 4811, 0, 5986, + 9338, 3046, 74480, 5985, 917928, 119598, 9820, 0, 12187, 0, 0, 5984, 0, + 43308, 4393, 0, 0, 0, 0, 0, 74826, 64733, 0, 0, 3491, 0, 0, 0, 3514, + 65485, 0, 7492, 0, 74605, 119134, 7514, 0, 0, 194731, 7502, 7587, 68353, + 0, 0, 63925, 0, 7610, 219, 0, 0, 692, 43588, 74433, 41635, 43241, 9688, + 0, 9535, 0, 0, 0, 64530, 0, 64610, 11804, 0, 0, 7453, 0, 8013, 0, 0, 0, + 8895, 5253, 0, 5458, 0, 2866, 0, 0, 65111, 68433, 6700, 120484, 0, 0, 0, + 8962, 77960, 9641, 43694, 7059, 0, 0, 9604, 78700, 7441, 63826, 0, + 118941, 64392, 0, 0, 2844, 0, 41974, 0, 12139, 0, 0, 0, 3358, 65295, 0, + 3104, 0, 0, 194765, 0, 5308, 0, 290, 0, 0, 2862, 2792, 195088, 0, 0, + 3268, 66591, 0, 6552, 42367, 7035, 120558, 0, 0, 1814, 0, 10240, 0, + 74305, 0, 74528, 0, 0, 42646, 7606, 2591, 2837, 4341, 77956, 64482, 0, + 8163, 65270, 0, 0, 0, 9112, 74431, 863, 9490, 119898, 0, 43323, 120513, + 119897, 9071, 0, 0, 3654, 7789, 9637, 0, 2535, 65504, 7653, 40993, + 119899, 66587, 195098, 0, 0, 0, 11006, 12927, 7807, 8073, 0, 10629, 0, + 74088, 3056, 10823, 0, 127327, 8762, 10508, 74506, 73770, 43969, 43193, + 10737, 3463, 0, 0, 66633, 8695, 4815, 11322, 5811, 12345, 7049, 0, 5195, + 0, 0, 66639, 0, 0, 0, 0, 0, 120561, 1262, 0, 6561, 19939, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 119907, 64612, 11991, 0, 0, 0, 1502, 0, 0, 9107, 0, 5702, + 3655, 67661, 8430, 0, 74132, 120758, 0, 74057, 9603, 0, 5254, 120742, + 7724, 74388, 68375, 10796, 5129, 0, 0, 590, 7579, 5614, 5893, 194744, + 11720, 0, 11721, 0, 4798, 0, 119316, 66038, 4793, 67851, 11726, 0, 74204, + 68610, 0, 68626, 894, 300, 0, 12306, 66235, 8004, 0, 0, 2562, 0, 0, + 42503, 0, 11652, 0, 0, 119241, 0, 0, 5096, 5095, 2863, 3424, 0, 10454, + 42530, 5094, 119638, 0, 13156, 0, 10832, 5093, 0, 0, 0, 5092, 10708, + 11327, 0, 5091, 176, 0, 9153, 4104, 78599, 78601, 1215, 42712, 5744, + 12272, 9832, 11777, 0, 127371, 42881, 0, 8980, 118988, 67861, 8844, 7209, + 0, 0, 4278, 0, 0, 0, 0, 9074, 4348, 0, 65558, 65946, 8113, 7087, 5255, + 1786, 661, 0, 0, 0, 74423, 0, 586, 74414, 64359, 1267, 0, 65468, 0, + 65731, 0, 0, 3621, 120473, 66666, 64211, 0, 6562, 12928, 0, 1228, 65490, + 11383, 0, 0, 0, 1714, 74406, 0, 0, 0, 0, 66225, 0, 0, 42660, 11436, 2070, + 64, 120694, 0, 10291, 10323, 2826, 0, 0, 0, 42008, 9708, 42710, 0, 42011, + 41999, 0, 12206, 5839, 1702, 1240, 74065, 6286, 0, 0, 65833, 77848, 0, + 1765, 0, 0, 65588, 0, 0, 0, 8401, 0, 42014, 0, 7030, 0, 10479, 64959, + 2852, 0, 0, 0, 0, 195061, 917951, 6963, 0, 12667, 64540, 74786, 10147, + 12935, 0, 0, 0, 0, 0, 78757, 0, 0, 0, 0, 64947, 12467, 2864, 64719, 1148, + 10435, 11462, 41675, 0, 2765, 0, 0, 0, 120719, 0, 0, 66662, 0, 78133, + 9364, 194685, 74416, 0, 0, 77988, 263, 10449, 41288, 0, 41839, 78387, 0, + 77986, 0, 6931, 0, 64355, 7177, 120530, 0, 0, 0, 4262, 10285, 10722, + 42020, 0, 6806, 6992, 42019, 0, 41290, 0, 750, 0, 0, 10163, 63913, 74066, + 7032, 5954, 64931, 4314, 0, 198, 68453, 730, 0, 63907, 77993, 78891, + 13165, 10814, 74171, 42804, 678, 8240, 78015, 0, 41378, 11008, 6938, 0, + 0, 2097, 66246, 120560, 0, 0, 0, 3892, 68632, 0, 6712, 66045, 41470, + 64805, 0, 0, 0, 64801, 0, 497, 12100, 5953, 0, 7796, 0, 43254, 73831, 0, + 10293, 5952, 1281, 0, 0, 0, 10677, 604, 41097, 9182, 1859, 0, 0, 3425, 0, + 0, 2836, 0, 0, 9707, 0, 43202, 0, 0, 65199, 1738, 917818, 0, 2832, 0, + 9670, 12937, 0, 66374, 0, 0, 2822, 0, 4436, 0, 0, 73752, 0, 64872, 0, + 1331, 0, 0, 0, 12708, 0, 5090, 5089, 0, 0, 119109, 0, 0, 319, 118931, + 43479, 9477, 0, 0, 5087, 0, 7640, 96, 5086, 0, 0, 0, 5085, 64286, 0, 0, + 41422, 0, 119901, 42356, 3772, 0, 0, 5011, 0, 0, 0, 0, 0, 127241, 6677, + 7601, 0, 591, 64419, 118953, 0, 0, 118923, 73734, 0, 10939, 6106, 6933, + 41271, 6760, 119903, 4534, 41270, 917962, 0, 65574, 0, 9224, 0, 3671, + 8976, 0, 0, 41275, 6372, 0, 55261, 7963, 6371, 0, 568, 0, 41273, 0, 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, 0, 42858, 11789, 65868, 5557, 917946, 9737, 13109, 0, - 9467, 5558, 8878, 0, 195036, 7451, 7435, 10146, 0, 9086, 64566, 0, 64584, - 7437, 7454, 12594, 0, 0, 4546, 7731, 0, 917948, 74243, 0, 3805, 0, 0, 0, - 41008, 0, 6307, 19949, 0, 7544, 0, 43525, 0, 0, 10152, 64422, 65091, - 119113, 7602, 64729, 0, 43521, 0, 42302, 0, 43523, 41447, 5559, 0, 8704, - 2397, 5556, 0, 0, 0, 9011, 9630, 0, 0, 0, 5506, 0, 1911, 66652, 0, 12598, - 8845, 66698, 0, 10792, 8889, 0, 6951, 0, 64751, 0, 66622, 0, 0, 74364, 0, - 0, 0, 74365, 7552, 0, 0, 65384, 7223, 4559, 0, 1956, 43138, 7024, 65728, - 64501, 1210, 0, 65175, 10184, 43140, 65727, 0, 0, 0, 38, 8533, 66669, 0, - 0, 0, 0, 4357, 0, 0, 0, 74233, 119846, 119852, 42860, 119838, 10941, - 65721, 6962, 0, 0, 0, 0, 11014, 0, 8942, 12000, 0, 0, 0, 11974, 0, 42772, - 0, 11650, 5013, 0, 0, 66210, 118914, 6613, 0, 0, 0, 0, 0, 64714, 0, 0, 0, - 12120, 0, 0, 11024, 74811, 0, 10563, 0, 0, 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, 0, 0, 3483, 127122, 1989, 0, 0, 9104, 3503, 65375, 0, 0, 42633, 1864, - 0, 74306, 41446, 2540, 7736, 0, 74064, 0, 10521, 0, 42173, 9705, 74124, - 8604, 6955, 10916, 0, 6149, 3887, 19956, 1411, 2824, 0, 10106, 0, 1403, - 0, 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, 0, 0, 0, 0, - 74585, 41391, 0, 917903, 376, 6987, 9221, 0, 0, 8823, 0, 12943, 65185, - 41869, 12619, 0, 10154, 0, 74439, 2039, 0, 7446, 1684, 63979, 10974, 458, - 120620, 0, 0, 0, 11916, 65016, 0, 0, 42115, 0, 12288, 0, 0, 1493, 42111, - 7553, 4097, 0, 13080, 0, 65808, 6610, 6030, 8059, 7508, 41636, 0, 0, 0, - 8794, 41278, 41629, 12154, 0, 41277, 64658, 0, 64380, 6625, 0, 19904, 0, - 0, 0, 65371, 7078, 0, 833, 0, 74592, 0, 10979, 41953, 0, 41434, 6062, 0, - 0, 19916, 6913, 933, 1341, 9842, 0, 65744, 0, 0, 0, 0, 41615, 10105, - 65810, 0, 41632, 7493, 0, 0, 41622, 0, 0, 119556, 74584, 7632, 9716, - 19954, 9805, 5990, 900, 0, 63957, 0, 0, 3612, 0, 64376, 0, 5389, 0, 0, - 65938, 2839, 9621, 582, 0, 74368, 3749, 6949, 7569, 74061, 0, 0, 6956, - 4403, 19962, 65559, 3299, 0, 0, 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, 0, 41183, 12907, 10271, 10287, - 684, 74185, 0, 2854, 119586, 4592, 65755, 0, 0, 11963, 65753, 0, 0, 0, 0, - 0, 9881, 0, 65757, 3415, 0, 0, 8648, 0, 118886, 43047, 0, 13180, 0, 418, - 0, 0, 10295, 10327, 10391, 41752, 74339, 8641, 41449, 0, 0, 0, 10911, - 6942, 0, 1024, 42849, 41751, 0, 8941, 0, 4554, 0, 9023, 11685, 0, 0, 0, - 0, 11437, 0, 0, 120700, 63967, 0, 41206, 120724, 9049, 41185, 43166, 0, - 11680, 0, 11686, 0, 65224, 4565, 4655, 119553, 0, 0, 64523, 10343, 10407, - 0, 66671, 11466, 0, 0, 42890, 0, 12050, 194750, 2860, 0, 0, 0, 42792, - 5743, 10424, 12065, 42872, 0, 0, 0, 8875, 0, 0, 917991, 7531, 12847, - 2413, 0, 0, 962, 0, 12855, 41196, 42564, 0, 1582, 0, 5508, 0, 0, 0, - 10801, 0, 118798, 0, 7173, 496, 10439, 4313, 64607, 119557, 7860, 0, 906, - 42793, 2842, 6405, 64722, 13132, 798, 64694, 12801, 8406, 1153, 0, 64788, - 0, 8054, 9174, 194749, 917976, 0, 0, 41611, 4642, 66574, 11556, 0, 0, 0, - 42089, 0, 9008, 0, 0, 195096, 42079, 917981, 917996, 42513, 0, 42842, - 73985, 0, 118974, 127003, 0, 0, 0, 0, 11335, 64069, 42093, 3920, 0, 0, 0, - 0, 4580, 41967, 0, 64384, 0, 119158, 3021, 42004, 0, 0, 42317, 41998, 0, - 6946, 0, 0, 0, 0, 65204, 0, 68113, 65196, 9880, 42010, 0, 64589, 10111, - 64875, 0, 0, 0, 11360, 0, 0, 0, 0, 42149, 0, 0, 0, 64941, 0, 0, 0, 0, - 65671, 4110, 66005, 6959, 10929, 119110, 0, 66703, 0, 8617, 41982, 6025, - 0, 0, 0, 0, 0, 9597, 42099, 43172, 0, 10117, 0, 0, 41642, 0, 0, 0, 8301, - 0, 0, 187, 0, 65669, 0, 4963, 0, 0, 0, 8964, 65676, 65785, 0, 41948, 0, - 0, 0, 41942, 65449, 3160, 10081, 13226, 42121, 42475, 0, 0, 41766, 0, - 65882, 0, 41760, 1189, 905, 480, 10985, 41733, 67859, 9629, 42436, 1745, - 0, 73835, 7888, 0, 0, 0, 0, 41507, 8806, 7023, 0, 74279, 64540, 0, 7867, - 0, 6236, 0, 0, 10505, 0, 12851, 118948, 348, 5474, 0, 3103, 0, 41753, 0, - 0, 0, 0, 0, 41739, 0, 42515, 10931, 41756, 43347, 42560, 5391, 41746, - 119147, 0, 41259, 5561, 74360, 2691, 0, 65553, 7933, 5562, 0, 0, 41262, - 0, 64421, 74846, 41251, 0, 0, 3979, 0, 0, 74813, 0, 0, 0, 0, 118847, - 41266, 0, 0, 917630, 10585, 65741, 41737, 9574, 2666, 0, 41738, 831, 419, - 13126, 10716, 0, 42822, 0, 6434, 0, 6939, 7766, 6432, 0, 0, 916, 769, - 41742, 11968, 120557, 6433, 5563, 547, 1943, 6439, 5560, 4994, 487, 0, - 4497, 3754, 0, 120424, 9039, 0, 41776, 0, 8716, 1595, 119206, 0, 0, - 74260, 0, 43267, 0, 0, 0, 12185, 0, 0, 0, 0, 0, 42856, 8634, 0, 0, 4209, - 120702, 0, 65879, 41538, 65612, 0, 669, 5679, 0, 0, 118961, 0, 0, 5678, - 11821, 0, 0, 460, 0, 0, 0, 0, 120747, 0, 0, 0, 119022, 0, 0, 0, 7782, - 9044, 4974, 11760, 917547, 7577, 65711, 41912, 1216, 0, 0, 5792, 0, 0, 0, - 0, 42264, 12244, 0, 5683, 0, 0, 0, 1549, 0, 0, 120398, 5682, 6206, 8670, - 74520, 5680, 917568, 10001, 0, 0, 1449, 10241, 0, 0, 0, 10552, 64342, - 41922, 0, 8584, 0, 5567, 2717, 0, 0, 5564, 42886, 41908, 42882, 5565, 0, - 0, 0, 65708, 65709, 5566, 0, 65704, 65705, 11904, 42875, 0, 42539, 5942, - 8468, 0, 10361, 10425, 65697, 65698, 65699, 0, 66598, 0, 64664, 10647, 0, - 0, 0, 457, 0, 65701, 1934, 43006, 0, 8802, 0, 65130, 0, 0, 6087, 0, 0, - 41757, 0, 8043, 8950, 65694, 64485, 43534, 10457, 0, 11961, 119006, 0, 0, - 0, 0, 0, 65515, 9499, 10035, 13069, 0, 0, 9889, 68184, 42806, 0, 7256, 0, - 0, 1667, 42161, 0, 42428, 0, 6934, 0, 10802, 64861, 6556, 0, 0, 8101, - 3610, 0, 41748, 4995, 955, 65907, 119208, 5350, 64339, 0, 64549, 10875, - 917956, 5477, 65692, 0, 0, 0, 12896, 10456, 917954, 0, 3874, 0, 0, 0, 0, - 0, 0, 65603, 0, 65687, 0, 41038, 74009, 119570, 67857, 8536, 0, 0, 0, - 74432, 724, 0, 1455, 0, 7183, 64583, 119233, 0, 4175, 917962, 0, 0, 939, - 0, 43520, 0, 74569, 917958, 0, 917959, 917945, 194704, 10788, 6088, 0, 0, - 190, 0, 12593, 0, 8188, 64408, 0, 4417, 0, 0, 41744, 0, 7827, 0, 6965, 0, - 0, 13201, 0, 0, 0, 74382, 73781, 7918, 73988, 0, 0, 917884, 1728, 0, - 120710, 178, 12972, 0, 0, 0, 120671, 0, 0, 0, 120405, 65690, 0, 0, - 119054, 0, 9252, 917889, 4652, 74259, 0, 0, 0, 13065, 9923, 10806, 0, - 11763, 0, 120688, 0, 119098, 0, 6993, 0, 0, 8333, 0, 0, 0, 0, 74464, 0, - 0, 74080, 0, 0, 11910, 0, 8278, 8963, 4034, 0, 0, 65344, 120517, 41747, - 0, 0, 8677, 0, 12707, 9350, 66037, 0, 8836, 12315, 12747, 8300, 0, 0, - 7491, 8856, 0, 0, 43150, 0, 120404, 65389, 120402, 120403, 10813, 2592, - 12853, 43269, 7263, 120244, 6536, 120238, 120239, 65516, 12321, 120391, - 120388, 120389, 10007, 120246, 9588, 120248, 1596, 120383, 41994, 65801, - 0, 0, 66572, 0, 0, 10613, 8092, 12805, 41928, 40981, 0, 0, 5006, 64328, - 0, 65298, 0, 8825, 74555, 65940, 0, 0, 6107, 0, 119177, 0, 0, 0, 11783, - 335, 120227, 64689, 438, 4510, 5765, 8721, 120233, 119227, 6092, 12840, - 43112, 8876, 120231, 8096, 10284, 0, 0, 0, 10380, 8733, 0, 0, 41602, 0, - 0, 74831, 917901, 0, 73747, 65399, 0, 64591, 42405, 0, 917897, 843, - 11541, 0, 0, 0, 41935, 74496, 41902, 0, 0, 215, 41258, 0, 43159, 1953, - 9579, 41938, 1256, 3910, 9407, 6242, 0, 0, 41257, 41900, 8675, 10700, - 8805, 1742, 0, 9333, 8202, 0, 0, 0, 0, 0, 73882, 499, 0, 0, 0, 126983, 0, - 1712, 5932, 0, 41762, 0, 0, 11967, 1775, 0, 0, 0, 0, 0, 9458, 0, 6470, - 9180, 120380, 43176, 0, 0, 42782, 0, 0, 0, 917912, 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, 0, 917980, 7507, - 0, 43149, 0, 65031, 7961, 1636, 0, 65029, 65024, 0, 12473, 6534, 0, 99, - 98, 97, 120571, 67584, 4049, 0, 0, 7090, 0, 7892, 917969, 10777, 0, - 65310, 65562, 66599, 0, 0, 8039, 3363, 66594, 0, 0, 0, 12596, 66595, - 42258, 42570, 5593, 119148, 120711, 0, 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, 0, 1536, - 64093, 73970, 0, 0, 0, 6020, 12716, 127112, 12744, 475, 120394, 13266, 0, - 127111, 0, 73926, 0, 10645, 1212, 6543, 0, 8134, 0, 2913, 73870, 0, 1866, - 0, 195095, 0, 8923, 1645, 12059, 66585, 0, 3196, 0, 0, 5935, 1250, 0, - 8174, 9787, 9856, 9859, 7916, 9861, 9860, 5258, 1882, 1892, 0, 10882, - 405, 11454, 73911, 0, 0, 41169, 8939, 41245, 0, 41170, 1454, 11369, 6477, - 12157, 0, 0, 0, 41172, 7855, 0, 0, 10480, 0, 0, 0, 8264, 12610, 0, 645, - 0, 7609, 40973, 0, 0, 0, 5824, 984, 0, 10688, 5851, 0, 7729, 73982, - 120518, 0, 195086, 66722, 0, 0, 0, 0, 4538, 120406, 43141, 0, 0, 74214, - 0, 0, 0, 118902, 43005, 0, 9552, 0, 0, 0, 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, 0, 8455, 10082, 11575, - 0, 119566, 0, 12808, 12183, 6145, 0, 64929, 0, 0, 0, 43186, 42509, 0, - 3922, 9187, 0, 0, 0, 119057, 11752, 3353, 9358, 0, 0, 66680, 120090, - 11747, 7931, 8558, 9795, 0, 0, 0, 120082, 120081, 120084, 41027, 120086, - 0, 120088, 120087, 7019, 120073, 0, 11751, 120078, 120077, 64657, 8657, - 120048, 8594, 120068, 0, 0, 120069, 120072, 120071, 0, 0, 43154, 41029, - 0, 11332, 65380, 7728, 0, 11294, 0, 66665, 7851, 0, 0, 8699, 0, 42524, 0, - 9085, 0, 7504, 9327, 6160, 0, 0, 0, 8088, 0, 74012, 0, 0, 4439, 6926, 0, - 12924, 0, 42369, 0, 65491, 65145, 9041, 43559, 64577, 10826, 0, 11296, 0, - 0, 0, 65825, 9577, 120494, 0, 64670, 0, 0, 42159, 11295, 0, 0, 120779, 0, - 0, 10902, 0, 0, 0, 0, 10472, 2995, 0, 0, 0, 2371, 0, 120808, 259, 1009, - 0, 2402, 2333, 6440, 0, 0, 65125, 41244, 0, 13271, 9103, 41180, 0, 0, 0, - 0, 10219, 0, 0, 0, 0, 43178, 127070, 41261, 119362, 917974, 8613, 0, - 118989, 917978, 917979, 41492, 12005, 917982, 0, 1890, 120056, 0, 0, 0, - 7293, 7991, 0, 10578, 0, 118840, 0, 0, 0, 0, 0, 0, 120054, 118815, 6635, - 0, 6164, 65170, 0, 0, 0, 11664, 0, 0, 0, 0, 118812, 0, 0, 0, 9175, 11925, - 0, 9088, 0, 64545, 1396, 0, 7546, 3847, 0, 0, 4985, 13288, 672, 8098, - 43196, 194746, 0, 0, 0, 74043, 65072, 1577, 11772, 0, 5928, 4525, 10658, - 65911, 1266, 10180, 0, 0, 12622, 0, 0, 0, 194714, 0, 13310, 773, 19933, - 1539, 0, 0, 66374, 0, 0, 0, 0, 3051, 5862, 7823, 0, 0, 120411, 3250, - 74020, 0, 66649, 9510, 66237, 0, 0, 41066, 64673, 917963, 917964, 0, - 3505, 8707, 917968, 917965, 917966, 917971, 917972, 3471, 917970, 5479, - 882, 6686, 119584, 11613, 120772, 42754, 0, 0, 0, 0, 0, 0, 0, 3225, 0, - 4433, 41156, 73745, 43173, 1443, 4381, 0, 0, 10926, 11756, 11757, 64879, + 9467, 5558, 8878, 0, 195036, 7451, 6706, 10146, 0, 9086, 64566, 0, 64584, + 7437, 7454, 12594, 0, 68362, 4546, 7731, 0, 119909, 74243, 0, 3805, 0, + 194565, 44001, 41008, 0, 6307, 19949, 0, 7544, 0, 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, 0, 0, 0, 5506, 0, + 1911, 66652, 0, 9961, 8845, 66698, 0, 10792, 8889, 0, 2098, 0, 64751, 0, + 66622, 0, 0, 74364, 0, 0, 0, 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, 0, 0, 0, 4357, 0, 0, 0, 74233, + 9967, 119852, 42860, 119838, 10941, 65721, 6962, 0, 0, 119324, 0, 11014, + 0, 8942, 12000, 69224, 0, 0, 11974, 0, 42772, 127518, 11650, 5013, 0, 0, + 66210, 118914, 6613, 0, 0, 0, 0, 0, 64714, 0, 0, 0, 12120, 43476, 0, + 11024, 74811, 0, 10563, 0, 0, 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, 0, + 3483, 119593, 1989, 0, 0, 9104, 3503, 65375, 0, 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, 0, + 1403, 0, 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, + 0, 12943, 65185, 41869, 12619, 0, 10154, 0, 74439, 2039, 0, 7446, 1684, + 63979, 10974, 458, 120620, 0, 69791, 0, 11916, 65016, 0, 78067, 42115, 0, + 12288, 78057, 0, 1493, 42111, 7553, 4097, 0, 13080, 0, 65808, 6610, 6030, + 8059, 7508, 13131, 0, 0, 0, 8794, 41278, 41629, 12154, 0, 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, 0, 195076, 0, 7405, 10105, 65810, 0, 41632, 7493, 0, 0, 41622, + 0, 0, 119556, 74584, 7632, 9716, 19954, 9805, 5990, 900, 0, 63957, 0, 0, + 3612, 0, 64376, 0, 5389, 0, 0, 65938, 2839, 9621, 582, 0, 74368, 3749, + 6949, 7569, 74061, 0, 0, 6956, 4403, 19962, 65559, 3299, 0, 0, 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, 0, 11963, 43620, 0, 78889, 0, 0, 0, 9881, 43115, 65757, 3415, + 0, 0, 8648, 0, 6741, 43047, 0, 13180, 0, 418, 0, 0, 10295, 10327, 10391, + 41752, 74339, 8641, 41449, 0, 74100, 0, 10911, 6942, 0, 1024, 42849, + 41751, 69776, 8941, 0, 4554, 0, 9023, 11685, 0, 9928, 78617, 0, 11437, + 43741, 0, 120700, 63967, 0, 41206, 120724, 9049, 41185, 43166, 0, 11680, + 0, 11686, 0, 65224, 4565, 4655, 119553, 0, 0, 64523, 10343, 10407, 0, + 66671, 11466, 0, 0, 42890, 0, 12050, 68201, 2860, 0, 0, 0, 42792, 5743, + 10424, 12065, 42872, 0, 0, 0, 8875, 0, 0, 917991, 7531, 12847, 2413, 0, + 78635, 962, 0, 12855, 41196, 42564, 0, 1582, 0, 5508, 0, 0, 0, 10801, 0, + 118798, 0, 7173, 496, 10439, 4313, 64607, 119557, 7860, 0, 906, 42793, + 2842, 6405, 64722, 13132, 798, 64694, 12801, 8406, 1153, 0, 64788, 0, + 8054, 9174, 194749, 917976, 9964, 0, 41611, 4642, 66574, 11556, 0, 0, + 78857, 42089, 78855, 9008, 0, 0, 195096, 42079, 917981, 77924, 42513, 0, + 42842, 73985, 65285, 118974, 127003, 0, 0, 0, 0, 11335, 64069, 42093, + 3920, 0, 0, 0, 0, 4580, 41967, 0, 64384, 0, 119158, 3021, 42004, 0, 0, + 42317, 41998, 0, 6946, 0, 0, 0, 0, 65204, 0, 68113, 42690, 9880, 42010, + 74824, 64589, 10111, 64875, 0, 68399, 43998, 11360, 0, 0, 0, 0, 42149, 0, + 0, 0, 64941, 77919, 0, 0, 0, 55247, 4110, 66005, 6959, 10929, 119110, 0, + 66703, 77921, 8617, 41982, 6025, 69242, 0, 0, 0, 0, 9597, 42099, 43172, + 0, 10117, 0, 0, 41636, 0, 0, 120681, 8301, 0, 0, 187, 0, 65669, 0, 4963, + 0, 127517, 0, 8964, 65676, 65785, 0, 41948, 0, 0, 0, 41942, 65449, 3160, + 10081, 13226, 42121, 42475, 42663, 0, 41766, 0, 65882, 78849, 41760, + 1189, 905, 480, 10985, 41733, 67859, 9629, 6742, 1745, 43625, 73835, + 7888, 0, 0, 0, 42656, 41507, 8806, 7023, 0, 74279, 9447, 78651, 7867, + 69218, 6236, 0, 0, 10505, 0, 12851, 118948, 348, 5474, 0, 3103, 0, 41753, + 0, 0, 0, 78844, 78845, 41739, 78843, 42515, 10931, 41756, 43347, 42560, + 5391, 41746, 119147, 0, 41259, 5561, 74360, 2691, 0, 65553, 7933, 5562, + 69800, 917851, 41262, 0, 64421, 74846, 41251, 0, 0, 3979, 0, 0, 74813, 0, + 0, 0, 0, 118847, 41266, 0, 0, 917630, 10585, 65741, 41737, 9574, 2666, 0, + 41738, 831, 419, 13126, 10716, 0, 42822, 0, 6434, 0, 6939, 7766, 6432, 0, + 0, 916, 769, 41742, 11968, 74805, 6433, 5563, 547, 1943, 6439, 5560, + 4994, 487, 0, 4497, 3754, 127056, 120424, 9039, 0, 41776, 0, 8716, 1595, + 41615, 0, 0, 74260, 0, 43267, 43219, 0, 0, 12185, 0, 0, 68355, 68357, 0, + 42856, 8634, 0, 0, 4209, 120702, 0, 65879, 41538, 65612, 0, 669, 5679, 0, + 69786, 118961, 0, 0, 5678, 11821, 0, 6711, 460, 0, 0, 0, 0, 120747, 0, 0, + 78050, 119022, 0, 0, 0, 7782, 9044, 4974, 11760, 78494, 7577, 65711, + 41912, 1216, 0, 0, 5792, 0, 0, 78501, 0, 42264, 12244, 0, 5683, 0, 0, + 78119, 1549, 0, 0, 120398, 5682, 6206, 8670, 10256, 5680, 917568, 10001, + 0, 69768, 1449, 10241, 78290, 0, 0, 10552, 64342, 41922, 0, 8584, 0, + 5567, 2717, 0, 0, 5564, 42886, 41908, 42882, 5565, 0, 0, 0, 65708, 65709, + 5566, 69803, 65704, 65705, 11904, 42875, 43373, 42539, 5942, 8468, 0, + 10361, 10425, 65697, 65698, 65699, 0, 66598, 0, 64664, 10647, 78702, + 78703, 78690, 457, 78502, 65701, 1934, 43006, 0, 8802, 78710, 65130, + 78706, 78709, 6087, 78705, 78716, 41757, 78711, 8043, 8950, 65694, 64485, + 43534, 10457, 0, 11961, 78725, 78722, 78723, 78720, 78721, 0, 65515, + 9499, 10035, 13069, 0, 0, 9889, 68184, 42806, 0, 7256, 0, 0, 1667, 42161, + 0, 42428, 0, 6934, 0, 10802, 64861, 6556, 78390, 0, 8101, 3610, 0, 41748, + 4995, 955, 65907, 119208, 5350, 64339, 78306, 64549, 10875, 917956, 5477, + 65692, 0, 0, 120397, 12896, 10456, 917954, 0, 3874, 0, 0, 0, 0, 0, 0, + 65603, 0, 65687, 0, 41038, 74009, 119570, 42239, 8536, 78740, 0, 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, + 0, 0, 6370, 0, 7827, 68441, 6965, 0, 0, 13201, 0, 0, 0, 74382, 73781, + 7918, 73988, 0, 0, 917884, 1728, 0, 120710, 178, 12972, 0, 0, 0, 120671, + 0, 0, 78327, 120405, 65690, 0, 0, 119054, 0, 9252, 917889, 4652, 68371, + 0, 0, 0, 13065, 9923, 10806, 0, 11763, 0, 120688, 6723, 78187, 0, 6993, + 0, 0, 8333, 0, 0, 11390, 0, 74464, 0, 0, 74080, 0, 0, 11910, 0, 8278, + 8963, 4034, 0, 0, 65344, 120517, 41747, 0, 0, 8677, 0, 12707, 9350, + 66037, 0, 8836, 12315, 12747, 8300, 0, 0, 7491, 8856, 0, 0, 43150, 0, + 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, 0, 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, 0, 11783, 335, 120227, 64689, + 438, 4510, 5765, 8721, 120233, 119227, 6092, 12840, 43112, 8876, 120231, + 8096, 10284, 0, 0, 0, 10380, 8733, 0, 0, 41602, 0, 0, 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, 0, 41257, 41900, 8675, 10700, 8805, 1742, 0, + 9333, 8202, 0, 0, 0, 0, 0, 73882, 499, 0, 43467, 0, 55290, 0, 1712, 5932, + 77845, 41762, 0, 0, 11967, 1775, 0, 0, 0, 0, 0, 9458, 0, 6470, 9180, + 120380, 43176, 0, 0, 42782, 0, 0, 0, 917912, 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, 194964, 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, 0, + 65310, 65562, 66599, 66722, 0, 8039, 3363, 66594, 43434, 0, 0, 12596, + 66595, 42258, 42570, 5593, 119148, 120711, 0, 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, 64093, 73970, 77930, 0, 0, 6020, 12716, 127112, 12744, 475, + 120394, 13266, 0, 127111, 0, 73926, 0, 10645, 1212, 6543, 0, 8134, 0, + 2913, 73870, 0, 1866, 0, 195095, 0, 8923, 1645, 12059, 66585, 78786, + 3196, 0, 0, 5935, 1250, 127066, 8174, 9787, 6733, 9859, 7916, 9861, 9860, + 5258, 1882, 1892, 6731, 10882, 405, 11454, 73911, 0, 0, 41169, 8939, + 41245, 0, 41170, 1454, 11369, 6477, 12157, 0, 0, 0, 41172, 7855, 0, 0, + 10480, 0, 0, 77936, 8264, 12610, 0, 645, 0, 7609, 40973, 0, 73833, 78249, + 5824, 984, 77918, 10688, 5851, 0, 7729, 73982, 120518, 0, 195086, 43369, + 0, 0, 68415, 0, 4538, 120406, 43141, 0, 0, 74214, 73886, 0, 0, 118902, + 43005, 78448, 9552, 0, 0, 0, 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, 0, 8455, 10082, 11575, 0, + 119566, 0, 12808, 12183, 6145, 0, 64929, 0, 0, 0, 43186, 42509, 0, 3922, + 9187, 0, 0, 0, 119057, 11752, 3353, 9358, 0, 917957, 66680, 120090, + 11747, 7931, 8558, 9795, 68380, 0, 0, 120082, 120081, 120084, 41027, + 120086, 0, 120088, 120087, 7019, 120073, 0, 11751, 120078, 78294, 64657, + 8657, 120048, 8594, 120068, 0, 0, 120069, 120072, 120071, 0, 0, 43154, + 41029, 0, 11332, 65380, 7728, 0, 11294, 0, 66665, 7851, 0, 8375, 8699, 0, + 42524, 0, 9085, 0, 7504, 9327, 6160, 0, 0, 0, 8088, 0, 74012, 0, 0, 4439, + 6926, 0, 12924, 0, 42369, 0, 65491, 65145, 9041, 43559, 64577, 10826, 0, + 11296, 0, 0, 0, 65825, 9577, 68199, 0, 64670, 0, 78056, 6793, 11295, 0, + 78053, 73872, 0, 0, 10902, 0, 0, 78070, 78068, 10472, 2995, 0, 0, 64682, + 2371, 78069, 120808, 259, 1009, 0, 2402, 2333, 6440, 0, 0, 65125, 41244, + 0, 13271, 9103, 41180, 0, 0, 0, 0, 10219, 0, 0, 0, 0, 43178, 127070, + 41261, 119362, 43640, 8613, 0, 118989, 6736, 195092, 41492, 12005, + 917982, 0, 1890, 120056, 0, 0, 0, 7293, 7991, 0, 10578, 0, 78076, 0, + 78077, 0, 0, 78800, 0, 120054, 42668, 6635, 0, 6164, 65170, 0, 0, 0, + 11664, 0, 0, 0, 0, 118812, 0, 0, 0, 9175, 11925, 78045, 9088, 0, 64545, + 1396, 0, 7546, 3847, 0, 0, 4985, 13288, 672, 8098, 43196, 194746, 0, 0, + 0, 74043, 65072, 1577, 11772, 13041, 5928, 4525, 10658, 65911, 1266, + 10180, 0, 0, 12622, 0, 0, 0, 194714, 0, 13310, 773, 19933, 1539, 0, + 126983, 42731, 0, 0, 0, 0, 3051, 5862, 7823, 0, 0, 120411, 3250, 43991, + 0, 66649, 9510, 66237, 0, 0, 41066, 64673, 917963, 917964, 0, 3505, 8707, + 917968, 6725, 917966, 917971, 917972, 3471, 917970, 5479, 882, 6686, + 119584, 11613, 120772, 42754, 0, 0, 0, 0, 0, 0, 0, 3225, 917996, 4433, + 41156, 43973, 43173, 1443, 4381, 0, 0, 10926, 11756, 11757, 64879, 917949, 917950, 917947, 13227, 0, 10021, 5160, 1387, 0, 917953, 41418, 0, - 65914, 917957, 217, 917955, 917960, 917961, 10443, 10789, 41158, 119257, - 4274, 0, 41483, 0, 41250, 0, 42179, 0, 5931, 11744, 0, 0, 41252, 66682, - 0, 119637, 41249, 1366, 64635, 0, 12466, 0, 0, 4397, 0, 0, 41296, 9545, - 41291, 0, 0, 41485, 3511, 41282, 5923, 10400, 0, 0, 760, 0, 12088, 5786, - 0, 42256, 119869, 119861, 417, 41474, 119562, 41565, 0, 5934, 119867, - 66583, 119231, 64877, 0, 64481, 0, 0, 41956, 0, 126995, 0, 0, 0, 42273, - 5819, 0, 917556, 0, 0, 0, 65910, 0, 10246, 0, 0, 1237, 10274, 4552, 0, 0, - 0, 1375, 66705, 43573, 65260, 42063, 0, 42811, 10312, 74192, 120794, - 7840, 0, 64890, 10252, 0, 0, 43185, 0, 4396, 0, 119880, 10769, 10331, - 119041, 0, 9753, 0, 8944, 0, 0, 10473, 0, 0, 6072, 43025, 10299, 0, 0, - 120608, 119874, 0, 0, 0, 0, 9330, 0, 7222, 10283, 10315, 10379, 4996, 0, - 13281, 66517, 7865, 10087, 0, 0, 119092, 0, 0, 7565, 66363, 12952, 64806, - 43180, 0, 68096, 0, 0, 74288, 622, 74023, 885, 64772, 1602, 0, 0, 852, 0, - 12160, 0, 10212, 65435, 0, 12071, 9609, 12156, 917983, 917984, 43586, - 11035, 10411, 917988, 10255, 10263, 10279, 4194, 10375, 917993, 0, 4315, - 12644, 917997, 917994, 917995, 43343, 0, 917998, 917999, 41177, 0, 0, - 917792, 0, 0, 8715, 0, 41179, 0, 43313, 0, 41176, 0, 994, 0, 8452, - 127103, 73966, 0, 0, 5921, 0, 2597, 0, 5922, 118903, 127109, 4186, - 127107, 127106, 127105, 73973, 0, 4406, 74601, 8480, 0, 9747, 0, 4413, 0, - 42268, 3198, 5924, 5920, 0, 6921, 0, 74007, 42869, 8418, 11681, 43169, - 10176, 0, 742, 0, 2893, 10772, 65276, 5937, 1914, 2553, 11682, 0, 0, 0, - 8363, 0, 2993, 7772, 3916, 0, 0, 1141, 42407, 8159, 718, 7572, 973, 0, - 120718, 3235, 2415, 43164, 0, 8018, 42333, 74756, 10675, 6937, 42486, 0, - 65390, 0, 0, 1202, 0, 0, 127037, 0, 0, 0, 0, 64542, 3260, 73829, 65388, - 0, 8419, 0, 127036, 0, 0, 74193, 0, 0, 0, 0, 1431, 0, 66565, 10821, 0, - 12804, 0, 8229, 1235, 3307, 11472, 0, 0, 4544, 0, 0, 0, 1740, 0, 8758, - 985, 12882, 64511, 0, 12068, 0, 0, 10141, 0, 63761, 8785, 4476, 0, 63763, - 12655, 8907, 0, 0, 0, 0, 0, 119572, 10665, 64616, 41572, 0, 0, 0, 41573, - 0, 3931, 0, 74143, 0, 0, 0, 0, 11982, 0, 0, 0, 0, 64484, 0, 41167, 0, - 41735, 0, 717, 10754, 0, 0, 0, 0, 63767, 0, 1780, 6936, 0, 0, 819, 10611, - 9694, 126978, 0, 0, 0, 0, 0, 0, 12820, 0, 6578, 7009, 7523, 6922, 74218, - 67848, 7525, 3346, 8339, 0, 0, 575, 268, 0, 8563, 0, 120343, 41541, - 65565, 8336, 5936, 7290, 0, 8337, 13081, 308, 11388, 7522, 120721, 0, - 65466, 11090, 6953, 0, 120346, 0, 120345, 5926, 0, 0, 0, 0, 0, 0, 9038, - 7887, 0, 7830, 11651, 13093, 64002, 0, 65742, 0, 119597, 11590, 0, 74048, - 0, 8595, 0, 0, 0, 13097, 0, 64643, 13283, 12697, 0, 120621, 3488, 5933, - 10033, 73738, 66241, 65570, 0, 12297, 119153, 1955, 0, 5349, 42538, 0, 0, - 65308, 9462, 0, 0, 0, 0, 0, 0, 5831, 0, 7638, 0, 42764, 0, 43109, 7637, - 11957, 120600, 0, 0, 0, 0, 0, 0, 0, 7636, 65171, 9124, 0, 120331, 0, 291, - 0, 0, 2027, 66230, 0, 0, 10403, 0, 4640, 64713, 10224, 120429, 42512, - 120431, 120430, 0, 0, 0, 0, 0, 0, 0, 119094, 74213, 7824, 0, 0, 41274, - 5778, 6302, 0, 0, 12680, 119130, 1417, 0, 194914, 9452, 0, 0, 11552, 0, - 0, 0, 65391, 0, 10172, 65453, 120408, 41264, 120410, 6426, 4641, 9179, - 64819, 64906, 41255, 42036, 41469, 41269, 120412, 41267, 4646, 120425, - 865, 42034, 120426, 120421, 4645, 42033, 120422, 0, 0, 64728, 0, 0, 0, - 1659, 919, 42784, 1671, 195089, 6069, 9219, 195090, 1661, 13120, 63784, - 195094, 10140, 9713, 119143, 0, 0, 0, 2306, 10485, 118943, 6068, 10612, - 195099, 0, 195101, 195078, 41462, 195080, 195079, 5422, 195081, 0, 0, 0, - 10229, 10635, 826, 195083, 195082, 195085, 195084, 195087, 6483, 0, 1808, - 7848, 0, 8100, 0, 0, 0, 13301, 0, 9667, 0, 0, 0, 11003, 9904, 0, 0, - 120690, 9144, 10921, 0, 0, 9840, 65131, 917560, 0, 10313, 0, 0, 64320, - 10265, 0, 10962, 118970, 43008, 8945, 0, 0, 41, 195072, 1792, 120515, - 195073, 8655, 195075, 0, 0, 12066, 0, 385, 4152, 2585, 0, 0, 3126, 0, - 74136, 10957, 0, 0, 0, 0, 13157, 0, 0, 3570, 0, 7443, 0, 0, 6997, 0, 0, - 7879, 8739, 11075, 0, 65216, 0, 0, 2593, 8463, 7810, 917862, 7839, - 119913, 0, 917860, 9691, 4411, 917847, 0, 0, 0, 0, 65254, 10066, 0, 0, 0, - 0, 13061, 8016, 0, 19932, 64831, 0, 0, 12390, 119171, 1634, 68115, 0, + 65914, 6721, 217, 917955, 917960, 917961, 10443, 10789, 41158, 119257, + 4274, 0, 41483, 0, 41250, 0, 42179, 0, 5931, 11744, 69232, 0, 41252, + 66682, 0, 119637, 41249, 1366, 64635, 0, 12466, 0, 0, 4397, 0, 0, 41296, + 9545, 41291, 0, 0, 41485, 3511, 41282, 5923, 10400, 0, 0, 760, 0, 12088, + 5786, 0, 42256, 119869, 119861, 417, 41474, 119562, 41565, 0, 5934, + 119867, 66583, 119231, 64877, 0, 64481, 78614, 66013, 41956, 43455, + 126995, 0, 0, 0, 42273, 5819, 0, 917556, 0, 0, 0, 65910, 0, 10246, + 120816, 0, 1237, 10274, 4552, 0, 0, 0, 1375, 66705, 43573, 65260, 42063, + 0, 42811, 10312, 74192, 120794, 7840, 0, 43630, 10252, 0, 0, 43185, 0, + 4396, 0, 119880, 10769, 9676, 119041, 0, 9753, 0, 8944, 0, 0, 10473, 0, + 0, 6072, 43025, 10299, 0, 0, 120608, 66326, 0, 0, 0, 0, 9330, 0, 7222, + 10283, 10315, 10379, 4996, 0, 13281, 66517, 7865, 10087, 78343, 0, 78347, + 0, 0, 7565, 66363, 12952, 64806, 43180, 77928, 68096, 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, 917993, 0, 4315, 12644, 127516, + 77937, 43639, 43343, 0, 917998, 11501, 41177, 0, 0, 917792, 0, 0, 8715, + 0, 41179, 0, 43313, 0, 41176, 0, 994, 0, 8452, 127103, 73966, 0, 0, 5921, + 0, 2597, 0, 5922, 118903, 77943, 4186, 127107, 127106, 127105, 6718, 0, + 4406, 74601, 8480, 9192, 9747, 0, 4413, 0, 42268, 3198, 5924, 5920, 0, + 6921, 78081, 74007, 42869, 8418, 11681, 43169, 10176, 0, 742, 0, 2893, + 10772, 65276, 5937, 1914, 2553, 11682, 6756, 0, 0, 8363, 0, 2993, 7772, + 3916, 0, 120494, 1141, 42407, 8159, 718, 7572, 973, 0, 120718, 3235, + 2415, 43164, 0, 8018, 42333, 74756, 10675, 6937, 42486, 43381, 65390, 0, + 0, 1202, 0, 0, 127037, 0, 0, 0, 78182, 64542, 3260, 73829, 65388, 9945, + 8419, 78042, 6738, 0, 43681, 74193, 2059, 0, 0, 55237, 1431, 0, 66565, + 10821, 0, 12804, 0, 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, 0, 0, 41573, 0, 3931, 120295, 74143, + 0, 0, 0, 0, 11982, 0, 0, 0, 0, 64484, 0, 41167, 0, 41735, 0, 717, 10754, + 0, 0, 0, 0, 63767, 0, 1780, 6936, 0, 0, 819, 10611, 9694, 126978, 0, 0, + 0, 0, 0, 0, 12820, 0, 6578, 7009, 7523, 6922, 74218, 67848, 7525, 3346, + 8339, 0, 0, 575, 268, 78111, 8563, 5754, 120343, 41541, 65565, 8336, + 5936, 7290, 78117, 8337, 13081, 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, 0, 8595, 0, 0, 43703, 13097, 0, 64643, + 13283, 12697, 0, 12381, 3488, 5933, 10033, 73738, 66241, 65570, 0, 12297, + 119153, 1955, 0, 5349, 42538, 0, 0, 65308, 9462, 0, 0, 0, 0, 42736, 0, + 5756, 0, 7638, 41642, 42764, 0, 43109, 7637, 5752, 120600, 0, 73832, 0, + 120635, 0, 78334, 0, 7636, 65171, 9124, 0, 78892, 0, 291, 0, 0, 2027, + 66230, 78142, 78136, 10403, 0, 4640, 64713, 10224, 120429, 42512, 120431, + 120430, 0, 0, 0, 0, 0, 0, 0, 119094, 74213, 7824, 0, 0, 41274, 5778, + 6302, 0, 0, 12680, 119130, 1417, 77889, 194914, 9452, 0, 74393, 11552, 0, + 0, 0, 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, 0, 0, 64728, 0, 78673, + 78674, 1659, 919, 42784, 1671, 195089, 6069, 9219, 195090, 1661, 13120, + 63784, 69819, 10140, 9713, 119143, 0, 0, 0, 2306, 10485, 118943, 6068, + 10612, 195099, 0, 195101, 195078, 41462, 195080, 195079, 5422, 195081, 0, + 0, 0, 10229, 10635, 826, 195083, 195082, 195085, 195084, 195087, 6483, 0, + 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, 0, 77951, + 12066, 0, 385, 4152, 2585, 0, 119068, 3126, 0, 74136, 10957, 0, 43258, 0, + 0, 13157, 0, 0, 3570, 0, 7443, 0, 44006, 6997, 0, 0, 7879, 8739, 11075, + 0, 65216, 0, 69795, 2593, 8463, 7810, 917862, 7839, 119913, 78806, + 119912, 9691, 4411, 78802, 0, 0, 43442, 78799, 65254, 10066, 0, 0, 0, 0, + 13061, 8016, 78687, 19932, 64831, 0, 0, 12390, 119171, 1634, 68115, 0, 11056, 0, 119925, 0, 41165, 11328, 12450, 0, 41166, 0, 12456, 119914, - 171, 5941, 12452, 917544, 12458, 12531, 0, 43013, 63800, 74162, 0, - 120483, 194920, 0, 12454, 63806, 42132, 12063, 195077, 0, 3230, 0, 0, 0, - 5209, 297, 5810, 8522, 8415, 0, 0, 0, 7077, 2497, 0, 960, 74156, 6981, 0, - 12938, 4292, 0, 74815, 10512, 0, 74814, 0, 0, 0, 2503, 73778, 1762, - 73833, 2495, 0, 5844, 119124, 118838, 0, 12654, 4663, 1899, 0, 2507, 0, - 8726, 65594, 0, 0, 0, 8892, 0, 0, 0, 0, 5782, 420, 0, 0, 120462, 10797, - 63794, 0, 0, 0, 63796, 118965, 0, 66581, 119205, 41608, 0, 0, 0, 4659, - 120788, 0, 0, 0, 0, 0, 0, 0, 329, 120472, 0, 917548, 0, 0, 41188, 13244, - 120466, 42167, 0, 0, 5380, 0, 0, 1155, 11365, 43126, 0, 0, 65684, 0, - 5601, 65192, 42765, 63752, 0, 7987, 0, 1172, 0, 0, 43601, 120476, 74126, - 5603, 0, 4473, 0, 194823, 0, 65347, 65346, 65345, 0, 0, 5347, 0, 0, - 73868, 118944, 10588, 0, 0, 63755, 0, 5343, 120473, 0, 4555, 5341, 0, 0, - 0, 5351, 0, 43104, 65244, 917892, 64541, 42519, 74472, 0, 0, 74765, - 917888, 0, 6638, 0, 65113, 271, 74180, 65370, 8835, 65368, 12653, 65366, - 42172, 41086, 65363, 65362, 65361, 11912, 65359, 11323, 65357, 11800, - 65355, 5345, 65353, 65352, 65351, 761, 65349, 19959, 0, 0, 0, 0, 0, - 64647, 0, 0, 4699, 0, 0, 0, 0, 64605, 0, 0, 0, 4916, 0, 380, 10958, - 66563, 917906, 0, 9773, 13167, 12918, 41096, 73980, 0, 917898, 917893, - 10684, 0, 917896, 0, 7946, 12541, 8182, 0, 0, 0, 0, 0, 0, 9005, 1225, - 6630, 0, 0, 0, 0, 8847, 0, 65876, 5535, 8329, 74590, 0, 0, 0, 0, 3127, - 2595, 65713, 0, 0, 5607, 41089, 0, 0, 74256, 2665, 11304, 0, 74200, 4970, - 8764, 120459, 8934, 0, 41566, 4492, 0, 65011, 41090, 0, 0, 1188, 7254, - 1100, 0, 0, 41081, 2912, 11749, 0, 0, 0, 3572, 10023, 4959, 13079, 0, 0, - 9729, 0, 0, 0, 0, 0, 0, 11803, 7996, 9907, 41450, 13304, 0, 0, 41451, 0, - 0, 8273, 0, 3451, 0, 972, 41453, 0, 0, 73883, 0, 73945, 0, 3455, 19955, - 9538, 0, 0, 0, 0, 0, 0, 11396, 0, 11019, 0, 0, 0, 120507, 41078, 0, 261, - 5927, 7791, 0, 0, 0, 10696, 0, 6073, 9838, 118920, 0, 6075, 0, 282, 0, - 6437, 74078, 0, 65861, 0, 0, 0, 0, 3474, 118787, 0, 120655, 6081, 0, 0, - 74076, 0, 0, 0, 0, 0, 0, 8751, 12623, 120273, 7816, 12636, 4665, 12628, - 4670, 120271, 120272, 0, 9642, 10912, 958, 0, 11387, 0, 4666, 0, 4915, 0, - 4669, 0, 68099, 13287, 4664, 10836, 120550, 0, 0, 0, 43595, 7450, 0, - 917875, 8664, 9697, 3606, 917873, 0, 0, 64815, 1063, 120250, 120251, - 9772, 7255, 8886, 1389, 0, 120257, 120258, 120259, 12941, 120253, 120254, - 120255, 120256, 12301, 120266, 120267, 41102, 66604, 120262, 120263, - 120264, 1017, 66600, 523, 505, 1447, 74436, 0, 0, 0, 8608, 42789, 0, 0, - 0, 119196, 11307, 66707, 917871, 0, 11745, 7919, 0, 1641, 0, 0, 8966, 0, - 0, 5908, 0, 0, 74562, 0, 1699, 74191, 74843, 0, 0, 6306, 10169, 0, - 119251, 0, 3766, 120457, 120456, 120455, 6611, 257, 43170, 13153, 0, - 42386, 0, 9436, 2599, 0, 6496, 9449, 5930, 11476, 11033, 11447, 0, 5622, - 120436, 8477, 3760, 1718, 9442, 66433, 3776, 0, 41435, 4352, 0, 2435, - 120809, 5621, 0, 4201, 3778, 4203, 4202, 4205, 4204, 120447, 3768, 68142, - 765, 41440, 3764, 8473, 120440, 8469, 120438, 12947, 4564, 0, 0, 74271, - 73753, 0, 0, 0, 0, 5225, 0, 0, 0, 0, 0, 0, 74793, 5626, 73807, 11771, 0, - 0, 0, 0, 5353, 5625, 74179, 0, 0, 1010, 64572, 0, 42623, 64277, 0, 6952, - 0, 120752, 119003, 2590, 5629, 65552, 7551, 10325, 5632, 10471, 120038, + 171, 5941, 12452, 917544, 12458, 12531, 78779, 43013, 63800, 74162, 0, + 120483, 9969, 0, 12454, 63806, 42132, 12063, 78425, 78424, 3230, 0, 0, 0, + 5209, 297, 5810, 8522, 8415, 0, 78429, 78428, 7077, 2497, 0, 960, 74156, + 6981, 0, 12938, 4292, 0, 74815, 10512, 0, 74814, 78875, 127505, 78876, + 2503, 73778, 1762, 69794, 2495, 78873, 5844, 78874, 118838, 0, 12654, + 4663, 1899, 78877, 2507, 64121, 8726, 65594, 0, 0, 0, 8892, 0, 0, 0, 0, + 5782, 420, 0, 0, 120462, 10797, 63794, 0, 0, 64814, 63796, 77965, 0, + 66581, 119204, 41608, 0, 0, 63792, 4659, 120788, 0, 43676, 0, 0, 0, 0, 0, + 329, 77968, 0, 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, 0, 1172, 69799, 6786, 43601, 120476, 74126, 5603, + 0, 4473, 0, 194823, 0, 65347, 65346, 65345, 0, 0, 5347, 69802, 0, 73868, + 118944, 10588, 0, 0, 63755, 0, 5343, 78422, 0, 4555, 5341, 0, 0, 0, 5351, + 0, 43104, 65244, 917892, 64541, 42519, 74472, 0, 0, 74765, 917888, 0, + 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, 0, 63856, 0, 0, 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, 0, 69780, 0, 0, 0, + 0, 9005, 1225, 6630, 0, 0, 0, 0, 8847, 0, 65876, 5535, 8329, 74590, 0, 0, + 0, 0, 3127, 2595, 65713, 42013, 0, 5607, 41089, 0, 0, 74256, 2665, 11304, + 0, 74200, 4970, 8764, 120459, 8934, 0, 41566, 4492, 0, 65011, 41090, 0, + 0, 1188, 7254, 1100, 0, 0, 41081, 2912, 11749, 69792, 0, 0, 3572, 10023, + 4959, 13079, 0, 0, 9729, 0, 0, 0, 43361, 0, 0, 11803, 7996, 9907, 41450, + 13304, 0, 127260, 41451, 0, 11095, 8273, 127533, 3451, 0, 972, 41453, 0, + 0, 73883, 0, 73945, 0, 3455, 19955, 9538, 0, 69807, 0, 0, 0, 0, 11396, 0, + 11019, 0, 0, 0, 120507, 41078, 0, 261, 5927, 7791, 0, 0, 0, 10696, 0, + 6073, 9838, 118920, 0, 6075, 0, 282, 0, 6437, 74078, 0, 65861, 0, 0, 0, + 0, 3474, 118787, 0, 120655, 6081, 0, 0, 74076, 78879, 0, 0, 0, 0, 0, + 8751, 11499, 120273, 7816, 12636, 4665, 12628, 4670, 120271, 120272, 0, + 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, 0, 120257, 120258, 120259, 12941, 42661, 120254, 120255, 120256, + 12301, 120266, 69820, 41102, 66604, 120262, 120263, 120264, 1017, 66600, + 523, 505, 1447, 74436, 0, 0, 0, 8608, 42789, 0, 0, 0, 119196, 11307, + 66707, 917871, 0, 11745, 7919, 0, 1641, 0, 0, 8966, 0, 0, 5908, 0, 0, + 6744, 0, 1699, 74191, 74843, 0, 0, 6306, 10169, 0, 119251, 118939, 3766, + 2389, 120456, 120455, 6611, 257, 43170, 13153, 0, 42386, 0, 9436, 2599, + 0, 6496, 9449, 5930, 11476, 11033, 11447, 0, 5622, 120436, 8477, 3760, + 1718, 9442, 66433, 3776, 0, 41435, 4352, 0, 2435, 120809, 5621, 0, 4201, + 3778, 4203, 4202, 4205, 4204, 120447, 3768, 68142, 765, 41440, 3764, + 8473, 6373, 8469, 120438, 12947, 4564, 0, 0, 74271, 73753, 8374, 0, 0, + 6829, 5225, 0, 0, 0, 0, 119615, 0, 74793, 5626, 73807, 11771, 0, 0, 0, 0, + 5353, 5625, 74179, 0, 0, 1010, 64572, 41780, 42623, 64277, 0, 6952, 0, + 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, 10961, 0, 203, 0, 0, 0, 0, 0, 0, - 64378, 42054, 0, 0, 554, 119649, 11358, 0, 12182, 42048, 11065, 0, 73891, - 0, 0, 5694, 7689, 74528, 9323, 4325, 3047, 10317, 175, 0, 0, 74605, 0, 0, - 1243, 42154, 5431, 6652, 0, 0, 0, 0, 68118, 0, 1129, 0, 0, 65900, 1986, - 7846, 0, 8661, 0, 65255, 0, 3845, 4490, 0, 6649, 74400, 1456, 7530, - 11977, 7249, 8366, 0, 7756, 12342, 0, 51, 41516, 0, 8570, 9568, 0, 456, - 7026, 8145, 1168, 9251, 9082, 0, 64055, 42781, 3866, 12323, 41512, 73805, - 68121, 0, 41494, 0, 4660, 0, 10405, 0, 0, 0, 0, 42040, 73918, 119627, - 7944, 41454, 12605, 0, 0, 41455, 236, 0, 0, 8214, 0, 0, 0, 41457, 0, - 119589, 1969, 2384, 8097, 0, 0, 0, 0, 8766, 0, 917863, 5854, 0, 10583, 0, - 119989, 0, 10416, 917869, 3872, 0, 0, 8429, 0, 0, 2838, 917867, 0, 0, 0, - 0, 0, 0, 0, 917864, 120813, 10553, 1662, 8483, 0, 43605, 5892, 917868, 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, 0, 10357, 0, 8170, 1704, 8556, 0, - 9659, 0, 0, 0, 9556, 0, 4503, 11353, 9647, 0, 0, 0, 0, 0, 0, 0, 0, 74229, - 66593, 6438, 0, 9109, 119565, 1289, 64599, 0, 0, 0, 65507, 2447, 0, 0, 0, - 0, 0, 0, 73750, 0, 0, 19937, 0, 0, 0, 5675, 254, 0, 0, 0, 42425, 8918, - 64003, 5716, 42312, 0, 0, 6972, 42826, 0, 42464, 120567, 0, 0, 74796, - 64400, 64693, 0, 0, 65429, 9515, 4435, 0, 0, 0, 0, 11785, 0, 64671, - 41978, 1412, 4594, 1391, 10536, 8067, 9901, 7775, 0, 0, 74588, 120748, - 3140, 0, 7960, 43271, 0, 12518, 10909, 0, 1428, 12472, 0, 0, 7699, 12393, - 0, 0, 0, 74518, 9063, 0, 4261, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64554, - 10574, 3878, 0, 42352, 1752, 73785, 0, 42506, 0, 10199, 0, 0, 0, 65919, - 0, 0, 720, 324, 0, 0, 0, 0, 1464, 40985, 0, 7974, 0, 68123, 0, 64488, 0, - 0, 0, 74787, 0, 0, 0, 65597, 0, 0, 0, 1302, 0, 0, 0, 0, 0, 5204, 74774, - 0, 0, 0, 3995, 0, 65608, 3714, 0, 0, 0, 10999, 11750, 0, 127004, 0, 0, 0, - 0, 8130, 8672, 10845, 11964, 0, 0, 0, 0, 0, 42863, 73839, 0, 0, 0, 0, 0, - 0, 468, 612, 0, 64401, 66448, 0, 0, 1674, 0, 5823, 0, 12280, 0, 540, + 120017, 120018, 120023, 64275, 120021, 10961, 0, 203, 0, 0, 0, 0, 78350, + 0, 64378, 42054, 0, 0, 554, 119649, 11358, 0, 12182, 42048, 11065, 0, + 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, 0, 1129, + 0, 0, 65900, 1986, 7846, 78804, 8661, 0, 65255, 0, 3845, 4490, 118969, + 6649, 74400, 1456, 7530, 11977, 7249, 8366, 0, 7756, 12342, 0, 51, 41516, + 0, 8570, 9568, 917863, 456, 7026, 8145, 1168, 9251, 9082, 0, 64055, + 42781, 3866, 12323, 41512, 73805, 68121, 0, 41494, 0, 4660, 0, 10405, 0, + 78803, 0, 0, 42040, 73918, 119627, 7944, 41454, 12605, 0, 42205, 41455, + 236, 64051, 78867, 8214, 0, 0, 0, 41457, 0, 119589, 1969, 2384, 8097, + 917864, 0, 0, 78029, 8766, 0, 78079, 5854, 0, 10583, 0, 119989, 0, 10416, + 917869, 3872, 917868, 0, 8429, 0, 0, 2838, 917867, 0, 0, 0, 0, 0, 0, 0, + 11096, 120813, 10553, 1662, 8483, 0, 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, 0, 78886, 0, + 0, 74229, 66593, 6438, 0, 9109, 78882, 1289, 64599, 0, 0, 0, 65507, 2447, + 0, 0, 0, 0, 0, 0, 6334, 0, 0, 19937, 0, 0, 0, 5675, 254, 0, 0, 0, 42425, + 8918, 64003, 5716, 42312, 0, 0, 6972, 42826, 0, 42464, 120567, 0, 0, + 74796, 64400, 64693, 0, 77861, 65429, 9515, 4435, 0, 42522, 0, 0, 11785, + 0, 64671, 41978, 1412, 4594, 1391, 10536, 8067, 9901, 7775, 0, 0, 74588, + 120748, 3140, 0, 7960, 43271, 0, 12518, 10909, 127508, 1428, 12472, 0, 0, + 7699, 12393, 0, 0, 0, 74518, 8223, 0, 4261, 0, 0, 0, 0, 0, 0, 0, 0, + 43419, 0, 64554, 10574, 3878, 0, 42352, 1752, 73785, 0, 42506, 0, 10199, + 0, 0, 0, 65919, 0, 6695, 720, 324, 0, 0, 43406, 0, 1464, 40985, 0, 7974, + 0, 43474, 0, 64488, 0, 0, 64041, 74787, 0, 78865, 0, 65597, 0, 78863, 0, + 1302, 0, 78861, 0, 0, 0, 5204, 74774, 43404, 43396, 0, 3995, 68360, + 65608, 3714, 0, 0, 0, 10999, 11750, 0, 43251, 68660, 43301, 0, 120557, + 8130, 8672, 10845, 11964, 0, 0, 0, 0, 68455, 42863, 73839, 0, 0, 0, 0, 0, + 0, 468, 612, 0, 64401, 66448, 68376, 0, 1674, 0, 5823, 0, 12280, 0, 540, 74564, 0, 0, 8432, 0, 11073, 0, 64316, 0, 0, 820, 41741, 0, 120667, 0, 64684, 126992, 3359, 7800, 0, 65177, 6226, 353, 12396, 0, 119612, 64742, - 0, 0, 0, 0, 12412, 19941, 0, 120277, 0, 1884, 9481, 42418, 0, 41157, 0, - 1195, 64898, 7924, 0, 41151, 2010, 0, 41328, 42344, 0, 12409, 0, 4360, - 127009, 9739, 0, 74392, 73921, 0, 42521, 8539, 0, 0, 0, 0, 4788, 0, 0, - 65734, 0, 64353, 0, 13075, 74429, 0, 64569, 43532, 10837, 2492, 0, - 118901, 0, 41136, 64351, 11813, 9649, 41154, 119617, 5128, 4038, 41143, - 65604, 64859, 41592, 0, 1648, 5435, 0, 0, 41343, 119848, 65439, 12709, - 6986, 0, 0, 0, 41349, 0, 12581, 10374, 5175, 0, 73806, 10254, 0, 10278, - 10262, 120295, 41346, 0, 607, 0, 0, 0, 12923, 10314, 10282, 65477, 10378, - 120297, 40976, 8265, 0, 119834, 40975, 5840, 42838, 0, 40978, 0, 119840, - 0, 0, 0, 66444, 10538, 0, 2550, 119836, 0, 0, 0, 3525, 0, 0, 0, 0, 5619, - 65822, 0, 194882, 7455, 0, 5616, 11486, 9656, 0, 0, 10727, 5615, 0, - 120551, 42380, 64895, 0, 66451, 808, 5455, 11347, 0, 1026, 5620, 194887, - 0, 11350, 5617, 0, 9225, 64639, 127073, 9145, 0, 1338, 120581, 0, 12739, - 0, 3084, 0, 0, 41025, 6037, 0, 3974, 0, 10290, 0, 3083, 10322, 0, 0, 0, - 41036, 0, 0, 43321, 65606, 0, 41032, 42388, 0, 64700, 10011, 1445, 40961, - 0, 194893, 0, 40960, 0, 0, 0, 40963, 0, 10402, 0, 0, 0, 10603, 0, 0, 0, - 0, 194923, 10083, 127069, 0, 194922, 0, 0, 0, 9073, 42585, 64302, 10704, - 65030, 4787, 0, 74829, 0, 65423, 0, 0, 9570, 0, 9525, 2689, 917626, - 65426, 0, 917624, 0, 0, 40966, 917623, 13286, 3998, 42598, 42596, 503, 0, - 8735, 2690, 66488, 42836, 194913, 41954, 917617, 1652, 772, 194877, 8310, - 65428, 3487, 0, 3585, 10194, 43320, 119159, 0, 194874, 6468, 41976, 9720, - 917606, 11767, 41970, 0, 5836, 12358, 0, 4355, 9048, 12180, 65027, 64680, - 65025, 64757, 0, 41488, 0, 8527, 194917, 12362, 12435, 12360, 41053, - 3266, 0, 12356, 8616, 41466, 0, 0, 11450, 0, 3638, 12354, 0, 3216, 0, - 2358, 0, 8633, 0, 0, 0, 0, 0, 0, 11759, 0, 0, 74823, 0, 41423, 8078, - 10504, 0, 0, 0, 0, 7002, 0, 41430, 42267, 41051, 41484, 0, 0, 41050, - 41473, 10466, 13099, 0, 0, 0, 6435, 0, 11362, 0, 0, 65382, 0, 41420, 0, - 3625, 0, 41409, 0, 0, 2041, 9178, 9672, 41427, 43541, 43317, 0, 0, 0, - 41424, 917598, 120546, 0, 0, 0, 41417, 1261, 0, 0, 12102, 119662, 41401, - 0, 0, 0, 0, 0, 42290, 3275, 0, 42329, 0, 0, 0, 0, 0, 0, 10989, 74234, 0, - 10598, 0, 2669, 903, 0, 2920, 0, 0, 74603, 64504, 19928, 0, 0, 3917, 0, - 11732, 0, 0, 41448, 41461, 0, 0, 917558, 0, 8819, 12663, 0, 41184, 74014, - 232, 74835, 120646, 9168, 65786, 0, 0, 0, 9094, 0, 11758, 0, 0, 1064, - 42467, 0, 10115, 19924, 0, 0, 7862, 64551, 13224, 8516, 41862, 66650, - 7561, 0, 74018, 1878, 0, 0, 2911, 0, 41178, 5427, 64823, 0, 0, 12617, - 41174, 0, 41458, 0, 41463, 42413, 11292, 2406, 775, 0, 65584, 0, 6074, - 9618, 194903, 0, 0, 0, 194901, 41436, 3656, 0, 194899, 41456, 0, 1599, - 11333, 0, 8514, 8513, 0, 1613, 0, 0, 0, 0, 0, 0, 74500, 41460, 10145, - 10542, 0, 120379, 0, 9905, 0, 65730, 0, 120374, 8427, 120375, 0, 120376, - 0, 11497, 64687, 74008, 120371, 3871, 0, 0, 9111, 5741, 0, 194846, - 120366, 119111, 120745, 0, 120369, 0, 11648, 0, 0, 120364, 41587, 120365, - 0, 74322, 42113, 0, 0, 12172, 0, 74530, 0, 65723, 0, 73871, 65724, 7928, - 120354, 0, 41595, 73730, 0, 42118, 73830, 66042, 10355, 0, 7875, 0, - 41598, 3993, 0, 1545, 40971, 536, 0, 119959, 0, 0, 65173, 65286, 0, 0, 0, - 0, 0, 0, 41375, 5402, 0, 0, 1687, 120503, 0, 0, 0, 64326, 40969, 10526, - 0, 8323, 40968, 1339, 11731, 0, 0, 65460, 12242, 0, 8020, 10843, 11554, - 0, 0, 8266, 41006, 65722, 0, 10710, 0, 118942, 0, 0, 119155, 195091, 0, - 119636, 0, 120687, 0, 0, 11755, 66305, 0, 0, 10917, 120767, 0, 11272, - 2040, 41247, 41326, 0, 1741, 42370, 1227, 0, 0, 11413, 0, 0, 0, 1586, - 4978, 0, 1984, 0, 0, 120651, 40984, 0, 9373, 0, 12916, 6284, 0, 41663, 0, - 0, 0, 9237, 9385, 41648, 0, 0, 0, 41666, 1830, 73783, 41076, 41287, 0, 0, - 0, 0, 0, 0, 41987, 41676, 0, 120823, 0, 41670, 0, 0, 2796, 65167, 11683, - 9902, 74521, 0, 11451, 0, 0, 42631, 2359, 0, 67844, 74164, 41238, 548, - 11405, 13133, 64368, 0, 0, 0, 397, 64678, 42139, 9547, 9590, 0, 1614, 0, - 64356, 66307, 6651, 1358, 0, 428, 9620, 1466, 0, 10982, 0, 1333, 0, 407, - 6425, 0, 74253, 0, 0, 0, 5804, 11976, 8554, 0, 0, 0, 9057, 42294, 41218, - 0, 0, 0, 1883, 10952, 8048, 0, 41225, 0, 118955, 0, 0, 0, 4407, 0, 65809, - 119074, 194821, 8448, 68122, 74183, 0, 12675, 12659, 0, 42363, 120624, - 194824, 119058, 10766, 12012, 2386, 64732, 9170, 917821, 9123, 64585, - 120500, 0, 0, 42051, 0, 4164, 9081, 0, 120569, 42049, 42042, 8709, 0, 0, - 120637, 42419, 0, 42047, 0, 0, 8470, 11807, 65897, 577, 0, 0, 74300, 0, - 0, 74840, 0, 0, 0, 0, 8736, 1414, 42643, 9683, 0, 74344, 0, 2536, 0, - 66330, 0, 0, 0, 0, 0, 0, 0, 66317, 0, 66315, 66316, 0, 11273, 0, 43004, - 7541, 0, 0, 961, 64307, 66324, 0, 0, 3106, 65917, 41284, 1696, 0, 891, - 12105, 0, 42624, 12802, 3264, 8824, 13268, 43003, 10936, 0, 0, 0, 0, 0, - 0, 2322, 0, 0, 11449, 0, 42868, 41285, 3547, 0, 0, 0, 0, 43216, 6089, 0, - 0, 0, 4170, 1029, 0, 0, 119224, 42374, 0, 744, 0, 0, 0, 65823, 0, 0, - 3551, 0, 0, 4623, 0, 0, 4598, 0, 65136, 0, 0, 0, 10851, 0, 6179, 0, 6180, - 0, 11952, 120778, 0, 11972, 0, 0, 0, 0, 177, 0, 6176, 120580, 0, 0, 6177, - 9020, 0, 0, 6178, 120249, 120242, 0, 120243, 7518, 8754, 0, 120237, - 74551, 43081, 0, 0, 9136, 120240, 4401, 41280, 0, 8974, 2308, 0, 74149, - 0, 2318, 0, 66361, 8198, 0, 64360, 12601, 0, 65266, 120827, 74307, 0, - 6970, 5404, 43332, 3667, 7936, 12925, 126989, 42055, 0, 0, 118949, 10874, - 65505, 0, 0, 42053, 0, 42057, 11083, 42052, 0, 0, 73845, 0, 9665, 0, 0, - 13181, 0, 0, 0, 0, 74148, 0, 0, 120225, 120229, 120224, 74172, 41145, 0, - 0, 0, 41148, 8683, 7594, 0, 0, 119090, 10869, 0, 41146, 0, 11441, 0, - 3512, 917612, 0, 8103, 0, 0, 65184, 11780, 41563, 42796, 0, 119106, - 41544, 65146, 0, 0, 0, 0, 19942, 0, 118908, 7988, 10436, 74273, 3271, - 73804, 64711, 0, 0, 0, 0, 3804, 13070, 11557, 42044, 0, 1095, 0, 3599, 0, - 0, 0, 0, 0, 0, 0, 74346, 66697, 0, 11684, 0, 0, 0, 0, 42043, 0, 66677, 0, - 42046, 120751, 4036, 0, 0, 0, 194862, 0, 11954, 0, 1450, 12986, 1340, 0, - 65441, 0, 0, 0, 0, 0, 0, 0, 0, 6539, 0, 0, 0, 0, 0, 0, 41190, 3973, - 194852, 4575, 41193, 7982, 429, 0, 0, 0, 194854, 65792, 0, 118968, 6417, - 118918, 0, 0, 194850, 0, 0, 4919, 10590, 0, 7755, 0, 0, 64548, 0, 1621, - 10214, 65126, 0, 0, 0, 12188, 0, 1617, 8050, 0, 5015, 0, 119174, 42590, - 194871, 1756, 0, 0, 65768, 120694, 41892, 0, 7555, 13103, 5408, 2817, - 1214, 0, 0, 0, 0, 0, 0, 0, 7957, 8689, 64723, 1056, 0, 74147, 0, 0, 0, - 7073, 65850, 12327, 0, 119028, 0, 0, 0, 2341, 8450, 8484, 8474, 0, 0, 0, - 8461, 0, 12153, 12799, 0, 120654, 120684, 9451, 7571, 13073, 0, 0, 681, - 0, 703, 0, 3272, 8781, 12894, 0, 11709, 0, 74446, 0, 0, 0, 11338, 120768, - 3276, 0, 0, 65928, 0, 0, 65021, 64795, 74574, 0, 10047, 0, 3262, 0, 0, 0, - 0, 74329, 163, 576, 9895, 1655, 0, 74591, 0, 0, 0, 0, 0, 0, 10039, 0, 0, - 5623, 5717, 5776, 0, 0, 0, 41591, 120586, 65252, 120795, 0, 0, 0, 0, 0, - 0, 0, 8887, 0, 7295, 11031, 0, 43157, 0, 8946, 10348, 10412, 8755, 0, 0, - 5718, 13221, 0, 0, 0, 0, 0, 8810, 74499, 686, 0, 0, 4619, 118954, 6654, - 73769, 0, 0, 12040, 65689, 10128, 65118, 0, 119151, 118891, 0, 0, 2401, - 68144, 8792, 0, 0, 65455, 0, 0, 0, 119129, 0, 12886, 0, 66624, 0, 43557, - 10300, 10161, 10396, 74135, 0, 0, 0, 73851, 3010, 6441, 0, 1458, 41475, - 0, 0, 0, 11479, 0, 0, 9100, 12864, 0, 0, 1061, 64780, 2001, 43111, 0, 0, - 4052, 0, 7626, 0, 0, 1045, 0, 5631, 0, 0, 0, 0, 74127, 0, 0, 8486, 0, - 73758, 2335, 4362, 0, 0, 73867, 1025, 0, 42625, 0, 0, 41443, 0, 0, 0, - 1774, 1523, 0, 0, 41445, 0, 0, 8567, 41442, 3988, 0, 0, 118910, 0, 65274, - 8564, 0, 0, 0, 0, 0, 65908, 0, 66513, 6256, 0, 579, 0, 10206, 0, 0, 2673, - 0, 11814, 0, 4488, 0, 0, 0, 10444, 120820, 0, 11799, 74407, 0, 4487, 0, - 42832, 1032, 0, 120736, 0, 7203, 0, 614, 0, 0, 120615, 0, 0, 0, 0, 0, + 0, 120282, 0, 0, 12412, 19941, 0, 120277, 78847, 1884, 9481, 42418, 0, + 41157, 0, 1195, 64898, 7924, 0, 41151, 2010, 0, 41328, 42344, 0, 12409, + 0, 4360, 127009, 9739, 0, 74392, 73921, 0, 42521, 8539, 0, 0, 0, 0, 4788, + 0, 0, 65734, 0, 64353, 0, 13075, 74429, 0, 64569, 43532, 10837, 2492, 0, + 118901, 68637, 41136, 64351, 11813, 9649, 41154, 119617, 5128, 4038, + 41143, 65604, 64859, 41592, 6771, 1648, 5435, 0, 6734, 41343, 119848, + 65439, 12709, 6986, 119846, 0, 0, 41349, 0, 12581, 10374, 5175, 0, 73806, + 10254, 0, 10278, 10262, 77950, 41346, 0, 607, 0, 0, 0, 12923, 10314, + 10282, 65477, 10378, 120297, 40976, 8265, 0, 119834, 40975, 5840, 42838, + 0, 40978, 0, 119840, 0, 0, 0, 66444, 10538, 0, 2550, 119836, 6779, 0, 0, + 3525, 6824, 118886, 0, 0, 5619, 65822, 0, 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, 0, 1338, 120581, 0, 12739, 4603, 3084, 0, 0, 9858, 6037, 0, + 3974, 78213, 10290, 0, 3083, 10322, 0, 0, 0, 41036, 0, 0, 43321, 65606, + 0, 41032, 42388, 0, 64700, 10011, 1445, 40961, 0, 194893, 0, 40960, 0, + 194891, 0, 40963, 64952, 10402, 0, 0, 0, 10603, 0, 0, 0, 0, 6714, 10083, + 127069, 194895, 78367, 0, 0, 0, 9073, 42585, 64302, 10704, 65030, 4787, + 0, 74829, 0, 65423, 0, 0, 9570, 0, 9525, 2689, 917626, 65426, 0, 917624, + 43740, 0, 40966, 917623, 13286, 3998, 42598, 42596, 503, 0, 8735, 2690, + 66488, 42836, 194913, 41954, 917617, 1652, 772, 6688, 8310, 65428, 3487, + 43416, 3585, 10194, 43320, 119159, 0, 194874, 6468, 41976, 9720, 917606, + 11767, 41970, 0, 5836, 12358, 0, 4355, 9048, 12180, 65027, 64680, 65025, + 43699, 0, 41488, 0, 8527, 194917, 12362, 12435, 12360, 41053, 3266, 0, + 12356, 8616, 41466, 0, 0, 11450, 0, 3638, 12354, 0, 3216, 0, 2358, + 119069, 8633, 0, 0, 119182, 69244, 0, 0, 11759, 0, 6368, 74823, 0, 41423, + 8078, 10504, 0, 41698, 42237, 0, 7002, 0, 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, 0, 2041, 9178, 9672, 41427, 43541, + 43317, 0, 0, 0, 41424, 917598, 120546, 0, 0, 0, 41417, 1261, 0, 0, 12102, + 119662, 41401, 0, 0, 0, 0, 0, 42290, 3275, 0, 42329, 0, 0, 0, 0, 0, + 120725, 10989, 74234, 0, 10598, 7410, 2669, 903, 0, 2920, 0, 127232, + 74603, 64504, 19928, 0, 0, 3917, 0, 11732, 0, 0, 41448, 41461, 0, 0, + 917558, 0, 8819, 12663, 0, 41184, 74014, 232, 74835, 120646, 9168, 65786, + 0, 0, 0, 9094, 0, 11758, 68425, 0, 1064, 42467, 0, 10115, 19924, 0, 0, + 7862, 64551, 13224, 8516, 41862, 66650, 7561, 78618, 69793, 1878, 0, 0, + 2911, 0, 41178, 5427, 64823, 0, 0, 12617, 41174, 0, 41458, 0, 41463, + 42413, 11292, 2406, 775, 0, 65584, 0, 6074, 9618, 194903, 0, 43440, 0, + 194901, 41436, 3656, 0, 194899, 41456, 0, 1599, 11333, 0, 6703, 8513, 0, + 1613, 0, 68456, 12598, 0, 0, 78745, 74500, 41460, 10145, 10542, 9937, + 78746, 0, 9905, 0, 65730, 0, 120374, 8427, 120375, 55246, 120376, 0, + 11497, 64687, 74008, 120371, 3871, 0, 0, 9111, 5741, 0, 194846, 120366, + 119111, 120745, 0, 120368, 0, 11648, 0, 0, 120364, 41587, 120365, 0, + 74322, 42113, 0, 0, 12172, 0, 74530, 65298, 65723, 194840, 73871, 65724, + 7928, 120354, 0, 41595, 73730, 0, 42118, 73830, 66042, 10355, 0, 7875, 0, + 41598, 3993, 0, 1545, 40971, 536, 0, 43029, 0, 0, 65173, 65286, 0, 0, 0, + 0, 0, 0, 41375, 5402, 0, 0, 1687, 120503, 0, 0, 78194, 64326, 40969, + 10526, 78753, 8323, 40968, 1339, 11731, 78756, 0, 65460, 12242, 0, 8020, + 10843, 11554, 0, 0, 8266, 41006, 65722, 0, 10710, 0, 118942, 67667, + 64567, 119155, 195091, 0, 119636, 67857, 120687, 0, 0, 11755, 66305, 0, + 0, 10917, 120767, 0, 11272, 2040, 41247, 41326, 195060, 1741, 42370, + 1227, 0, 0, 11413, 0, 0, 5283, 1586, 4978, 0, 1984, 0, 0, 120651, 40984, + 0, 9373, 0, 12916, 6284, 0, 41663, 0, 0, 0, 9237, 9385, 41648, 0, 0, 0, + 41666, 1830, 73783, 2056, 41287, 0, 0, 0, 42219, 0, 0, 41987, 41676, 0, + 120823, 0, 41670, 0, 0, 2796, 55291, 11683, 9902, 74521, 0, 11451, 0, 0, + 42631, 2359, 0, 67844, 74164, 41238, 548, 11405, 13133, 64368, 0, 0, 0, + 397, 43622, 42139, 9547, 9590, 0, 1614, 43661, 64356, 66307, 6651, 1358, + 0, 428, 9620, 1466, 78112, 10982, 118831, 1333, 0, 407, 6425, 0, 74253, + 0, 0, 0, 5804, 11976, 8554, 0, 0, 0, 9057, 42294, 41218, 0, 0, 78137, + 1883, 10952, 8048, 0, 41225, 0, 118955, 0, 0, 0, 4407, 0, 65809, 119074, + 194821, 8448, 68122, 74183, 0, 12675, 12659, 0, 42363, 120624, 194824, + 55273, 10766, 12012, 2386, 64732, 9170, 917821, 9123, 64585, 120500, 0, + 43367, 42051, 0, 4164, 9081, 0, 120569, 42049, 42042, 8709, 0, 0, 120637, + 42419, 0, 42047, 0, 0, 8470, 11807, 65897, 577, 0, 0, 74300, 0, 127308, + 74840, 0, 0, 0, 0, 8736, 1414, 42643, 9683, 43486, 74344, 0, 2536, 0, + 66330, 0, 0, 0, 0, 0, 0, 0, 66317, 917612, 66315, 2106, 0, 11273, 0, + 43004, 7541, 0, 0, 961, 64307, 66324, 64906, 0, 3106, 65917, 41284, 1696, + 0, 891, 12105, 0, 42624, 12802, 3264, 8824, 13268, 43003, 10936, 0, 0, 0, + 0, 0, 0, 2322, 0, 0, 11449, 0, 42868, 41285, 3547, 0, 0, 0, 0, 43216, + 6089, 78682, 0, 120578, 4170, 1029, 0, 127036, 119224, 42374, 0, 744, 0, + 0, 0, 65823, 0, 0, 3551, 0, 0, 4623, 55268, 0, 4598, 0, 65136, 0, 0, 0, + 10851, 0, 6179, 0, 6180, 0, 11952, 120778, 78648, 11972, 78646, 78647, + 78644, 78645, 177, 78643, 6176, 120580, 0, 0, 6177, 9020, 78652, 78653, + 6178, 120249, 120242, 0, 67673, 7518, 8754, 0, 120237, 74551, 43081, 0, + 0, 9136, 120240, 4401, 41280, 0, 8974, 2308, 0, 74149, 0, 2318, 0, 66361, + 8198, 0, 64360, 12601, 42536, 65266, 120827, 74307, 0, 6970, 5404, 43332, + 3667, 7936, 12925, 126989, 6385, 0, 0, 118949, 10874, 65505, 0, 0, 42053, + 2075, 42057, 11083, 42052, 0, 0, 67651, 0, 9665, 0, 0, 13181, 0, 0, 0, 0, + 74148, 0, 0, 120225, 120229, 120224, 74172, 41145, 0, 0, 0, 41148, 8683, + 7594, 127519, 0, 119090, 10869, 43458, 41146, 0, 11441, 0, 3512, 119633, + 0, 8103, 0, 0, 65184, 11780, 41563, 42796, 0, 119106, 41544, 65146, 0, 0, + 0, 0, 19942, 0, 118908, 7988, 10436, 74273, 3271, 73804, 64711, 0, 0, 0, + 0, 3804, 13070, 11557, 42044, 0, 1095, 0, 3599, 0, 0, 0, 8514, 0, 0, 0, + 74346, 66697, 0, 11684, 0, 0, 0, 0, 42043, 43232, 66677, 0, 42046, 78241, + 4036, 0, 0, 0, 194861, 0, 11954, 0, 1450, 12986, 1340, 0, 65441, 0, 0, 0, + 0, 0, 917542, 0, 0, 6539, 0, 0, 0, 194856, 0, 120492, 41190, 3973, + 119365, 4575, 41193, 7982, 429, 0, 0, 0, 194854, 65792, 0, 118968, 6417, + 118918, 78178, 0, 194850, 0, 0, 4919, 10590, 0, 7755, 0, 0, 64548, + 120506, 1621, 10214, 65126, 0, 127004, 0, 12188, 0, 1617, 8050, 0, 5015, + 0, 119174, 42590, 194871, 1756, 78181, 0, 65768, 6352, 41892, 0, 7555, + 13103, 5408, 2817, 1214, 0, 0, 0, 0, 0, 0, 0, 7957, 8689, 64723, 1056, 0, + 74147, 0, 0, 55286, 7073, 65850, 12327, 0, 119028, 0, 0, 0, 2341, 8450, + 8484, 8474, 0, 0, 0, 8461, 0, 12153, 12799, 0, 43709, 43708, 9451, 7571, + 13073, 0, 0, 681, 0, 703, 0, 3272, 8781, 12894, 0, 11709, 0, 74446, 0, 0, + 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, 0, 0, 0, 0, 10039, 0, 0, 5623, 5717, 5776, 0, 0, 0, + 41591, 11036, 65252, 120488, 0, 0, 0, 0, 0, 0, 0, 8887, 0, 7295, 11031, + 0, 43157, 0, 8946, 10348, 10412, 8755, 0, 0, 5718, 13221, 0, 0, 78135, 0, + 0, 8810, 74499, 686, 0, 0, 4619, 118954, 6654, 73769, 74426, 0, 12040, + 65689, 10128, 65118, 0, 119151, 118891, 0, 0, 2401, 68144, 8792, 0, 0, + 65455, 0, 0, 0, 119129, 0, 12886, 0, 66624, 0, 43557, 10300, 10161, + 10396, 74135, 0, 118945, 78118, 73851, 3010, 6441, 78122, 1458, 41475, 0, + 0, 0, 11479, 0, 0, 6350, 12864, 0, 78114, 1061, 64780, 2001, 43111, + 55230, 0, 4052, 0, 7626, 0, 0, 1045, 0, 5631, 41113, 0, 0, 43707, 74127, + 0, 0, 8486, 0, 73758, 2335, 4362, 0, 0, 69221, 1025, 0, 42625, 0, 78084, + 41443, 0, 0, 0, 1774, 1523, 0, 0, 41445, 78236, 0, 8567, 41442, 3988, 0, + 78237, 118910, 0, 65274, 8564, 0, 78238, 127515, 0, 0, 43446, 0, 66513, + 6256, 0, 579, 55218, 10206, 0, 6375, 2673, 0, 11814, 0, 4488, 0, 0, + 68451, 10444, 118846, 0, 11799, 74407, 68466, 4487, 0, 42832, 1032, + 120267, 43450, 78257, 7203, 0, 614, 78191, 0, 120615, 0, 78262, 0, 0, 0, 43121, 0, 0, 0, 1050, 7549, 0, 0, 9314, 0, 0, 120616, 0, 10057, 0, 0, 0, - 66504, 0, 0, 2307, 0, 64333, 0, 0, 73873, 0, 0, 0, 0, 0, 0, 10360, 0, 0, - 0, 440, 0, 13085, 9233, 74216, 0, 0, 0, 0, 66447, 8046, 64963, 65777, - 10125, 74212, 42819, 10910, 0, 1521, 9896, 0, 10487, 0, 12527, 0, 7970, - 0, 0, 0, 65769, 5243, 9849, 5239, 65771, 0, 0, 5237, 0, 0, 10103, 5247, - 4769, 0, 118977, 0, 5764, 0, 0, 3008, 4896, 0, 12087, 0, 0, 41103, 0, - 64565, 4773, 0, 0, 0, 4770, 0, 917567, 8731, 65378, 0, 120619, 9122, 0, - 0, 4774, 3019, 9997, 12834, 0, 9456, 10215, 0, 0, 0, 0, 0, 74776, 4281, - 4768, 0, 41535, 4099, 9017, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 42814, 880, 0, - 0, 0, 0, 0, 10116, 9877, 0, 0, 0, 7095, 0, 0, 120632, 0, 0, 8243, 2427, - 0, 7093, 0, 11585, 0, 0, 0, 12223, 0, 0, 1434, 0, 5637, 11573, 0, 0, 0, - 19951, 0, 0, 0, 0, 64432, 0, 0, 118888, 1156, 8740, 0, 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, 0, 0, 42257, 5696, 120470, 120465, 3862, 9643, 0, 0, - 7634, 0, 9845, 0, 0, 5701, 9722, 41490, 0, 1426, 120474, 0, 0, 0, 74345, - 8571, 194991, 0, 0, 0, 0, 43182, 12184, 0, 42022, 0, 10281, 0, 5650, - 43194, 64712, 0, 0, 990, 5647, 0, 0, 0, 41114, 11477, 5646, 0, 11018, 0, - 3945, 0, 0, 0, 0, 0, 0, 0, 1020, 73763, 0, 0, 5648, 64748, 0, 0, 10205, - 3545, 0, 6984, 0, 74051, 0, 118868, 120458, 2667, 0, 0, 0, 9911, 0, - 65020, 10097, 119166, 0, 0, 118836, 0, 0, 1140, 0, 0, 10159, 0, 0, 8128, - 0, 0, 0, 1815, 19910, 890, 0, 3267, 0, 0, 10123, 0, 4410, 1041, 10576, - 8102, 0, 580, 74232, 0, 0, 0, 0, 0, 19938, 65906, 0, 0, 0, 3298, 5375, - 10142, 0, 8215, 0, 6134, 41246, 64402, 0, 0, 0, 0, 0, 41382, 0, 0, 5173, - 65348, 527, 0, 0, 0, 0, 0, 11915, 0, 0, 10072, 0, 66434, 2329, 42250, 0, - 0, 0, 12245, 119237, 0, 0, 0, 0, 0, 74328, 0, 74769, 0, 0, 9069, 6144, 0, - 0, 73822, 0, 0, 64917, 41521, 118934, 494, 13250, 0, 65098, 0, 956, 0, - 12830, 10462, 73740, 0, 0, 0, 0, 66449, 13263, 0, 0, 13171, 0, 0, 0, 0, - 0, 1044, 41276, 0, 0, 0, 42068, 11795, 0, 0, 0, 0, 42450, 3907, 0, 64526, - 0, 0, 12295, 0, 11475, 0, 3020, 11537, 0, 66441, 0, 0, 0, 0, 1057, 566, - 0, 0, 3016, 42274, 0, 66490, 12921, 66571, 0, 0, 3006, 4620, 0, 0, 0, 0, - 64659, 0, 0, 0, 43333, 68129, 8626, 0, 0, 9090, 65377, 41596, 0, 0, 1698, - 0, 64477, 0, 0, 1053, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 1926, 0, 0, 7898, 8110, 10935, 0, 0, 5830, 0, 64594, 0, 0, 0, 0, 8693, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 119187, 11439, 0, 0, 0, 0, 42313, - 5579, 0, 0, 0, 0, 0, 5578, 41774, 0, 42023, 6234, 5669, 0, 0, 0, 0, 0, 0, - 5583, 0, 0, 42426, 5580, 42276, 2923, 892, 5582, 42465, 41330, 0, 5795, - 65512, 0, 65702, 0, 120801, 65251, 0, 65710, 0, 0, 0, 0, 5370, 0, 0, - 1638, 10966, 10188, 65878, 118848, 0, 0, 0, 0, 8172, 42017, 0, 10844, 0, - 0, 0, 0, 0, 0, 286, 0, 1062, 0, 0, 0, 0, 0, 1070, 64900, 0, 6095, 41865, - 0, 3015, 0, 917763, 5211, 0, 6400, 0, 194983, 0, 8189, 11276, 0, 0, 372, - 0, 0, 118874, 42102, 41585, 0, 0, 42101, 276, 0, 0, 33, 74226, 0, 9007, - 118796, 41588, 66033, 427, 10763, 0, 0, 0, 0, 1031, 6257, 0, 42104, 0, 0, - 2328, 0, 1071, 0, 0, 74848, 0, 0, 0, 1047, 0, 0, 64790, 0, 0, 10651, 0, - 0, 0, 0, 0, 119181, 5711, 41633, 12098, 65571, 9166, 0, 5710, 0, 0, - 65213, 13216, 0, 0, 0, 0, 64611, 41623, 0, 5715, 0, 0, 0, 5712, 2761, - 41620, 68124, 3074, 5722, 0, 8643, 73768, 0, 118906, 2757, 11067, 9718, - 74498, 8910, 10689, 6479, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 118911, 0, 0, 0, - 0, 0, 120010, 0, 8701, 68130, 119616, 120522, 0, 42477, 0, 12123, 4495, - 43569, 0, 0, 0, 64946, 10992, 0, 0, 0, 0, 9318, 120661, 13249, 65679, - 73808, 0, 65457, 42249, 7639, 0, 67845, 42641, 5454, 0, 0, 194997, - 120005, 0, 0, 5084, 0, 0, 119173, 0, 733, 0, 0, 0, 0, 41677, 0, 9218, - 1731, 0, 0, 0, 0, 0, 0, 0, 0, 127018, 0, 5155, 0, 5358, 0, 0, 917767, - 64424, 0, 3840, 64314, 41432, 0, 0, 0, 0, 0, 65943, 0, 3371, 10988, 0, - 8771, 1479, 0, 0, 1109, 11580, 0, 64601, 12205, 0, 0, 64507, 8868, 399, - 0, 74842, 0, 0, 12149, 13088, 551, 0, 10156, 12119, 0, 0, 2544, 65074, 0, - 0, 0, 0, 351, 119149, 0, 0, 0, 0, 74268, 0, 0, 0, 42377, 0, 0, 0, 0, 0, - 9013, 5588, 0, 0, 0, 0, 73960, 5585, 65881, 2549, 74469, 0, 0, 5584, - 8358, 0, 74411, 0, 10919, 0, 7980, 0, 0, 0, 41800, 5589, 0, 2664, 41613, - 5586, 118890, 0, 11356, 0, 0, 0, 0, 0, 42573, 67856, 0, 0, 0, 0, 0, 8135, - 6450, 10055, 0, 0, 0, 0, 5657, 0, 9626, 0, 0, 10179, 5654, 12939, 0, - 120799, 0, 0, 5652, 10945, 0, 0, 0, 3661, 7863, 0, 0, 0, 0, 0, 5659, 0, - 0, 66729, 5655, 0, 42168, 0, 1055, 917628, 0, 66310, 74030, 0, 12146, - 73955, 73956, 11618, 0, 126990, 0, 10272, 10304, 10368, 42518, 594, - 10244, 10248, 10256, 0, 64870, 0, 3467, 0, 0, 3331, 946, 10231, 1495, - 8131, 74330, 0, 9562, 0, 65927, 0, 0, 120155, 0, 64656, 0, 0, 194837, 0, - 5666, 65227, 5318, 0, 0, 9091, 10798, 0, 0, 10186, 0, 7732, 0, 64556, 0, - 0, 5668, 74445, 0, 0, 5670, 0, 0, 11820, 2992, 7826, 5667, 19952, 120807, - 0, 12749, 0, 0, 0, 66496, 4361, 119260, 1306, 9286, 1497, 0, 0, 0, 0, - 3571, 13247, 0, 7973, 66353, 0, 0, 67896, 43192, 0, 0, 553, 120653, 0, 0, - 5829, 0, 4587, 0, 65912, 0, 12746, 0, 0, 119924, 5633, 119927, 0, 0, 0, - 64905, 0, 9512, 0, 12742, 6443, 0, 0, 9135, 0, 0, 0, 0, 0, 0, 0, 12148, - 0, 0, 0, 64256, 0, 11669, 0, 5634, 4524, 0, 0, 0, 118880, 74266, 65182, - 0, 0, 5221, 0, 328, 0, 0, 0, 5636, 0, 5329, 0, 5638, 119918, 7940, 64938, - 43223, 0, 5635, 3373, 2986, 0, 74223, 3437, 0, 6203, 4247, 0, 11920, - 8274, 0, 0, 1657, 119921, 0, 0, 5639, 2954, 5660, 5640, 0, 0, 0, 0, 0, 0, - 41637, 0, 0, 0, 41625, 0, 0, 120713, 11705, 5642, 0, 0, 0, 4356, 11710, - 0, 12051, 0, 0, 5641, 8259, 0, 1058, 0, 67630, 0, 0, 1144, 0, 0, 0, 0, - 73890, 118972, 0, 73734, 0, 5645, 64964, 8652, 2547, 66484, 0, 0, 5608, - 65890, 0, 0, 67621, 119934, 9000, 0, 0, 0, 1865, 0, 5613, 74267, 0, 0, - 5610, 0, 0, 65826, 5612, 0, 10787, 917551, 2997, 0, 5609, 0, 65319, - 119933, 12316, 65376, 2412, 0, 8186, 9807, 74269, 0, 13130, 65874, 0, - 5807, 0, 10030, 5306, 12936, 0, 0, 11704, 0, 0, 10211, 0, 0, 0, 0, 11706, - 9710, 0, 0, 0, 413, 65623, 74237, 0, 9133, 74262, 0, 1042, 0, 64779, - 12171, 119240, 6185, 64776, 4984, 0, 708, 0, 0, 12241, 0, 0, 1308, 0, - 2534, 810, 0, 0, 0, 0, 0, 1917, 3000, 0, 0, 120739, 2364, 0, 74470, - 66618, 65680, 0, 10027, 0, 0, 12337, 120722, 0, 0, 2980, 755, 0, 931, - 13124, 68182, 0, 2748, 0, 0, 65041, 0, 73998, 8730, 0, 0, 119009, 7274, - 119250, 0, 7275, 0, 935, 0, 65840, 377, 42325, 11649, 0, 65253, 64301, 0, - 0, 42341, 65284, 2417, 0, 12884, 19912, 7907, 10768, 0, 194998, 0, 10673, - 119217, 7248, 0, 0, 1781, 5496, 3627, 62, 1649, 0, 964, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 13142, 0, 42415, 66575, 4542, 74037, 43547, 0, 0, 0, 2991, - 4946, 42454, 0, 7949, 0, 0, 11341, 42494, 3073, 65625, 9714, 11692, 0, 0, - 0, 6478, 9898, 0, 65237, 6241, 0, 4877, 0, 6238, 0, 10548, 127049, 4409, - 0, 0, 64798, 0, 5346, 0, 120528, 6237, 5461, 0, 9176, 0, 0, 65231, 65884, - 12678, 0, 0, 11378, 0, 42785, 2408, 3251, 0, 0, 5685, 0, 2461, 11052, - 7091, 5342, 8317, 0, 68163, 5340, 0, 0, 0, 73928, 0, 0, 0, 0, 0, 65482, - 0, 9142, 0, 0, 0, 10938, 0, 118790, 1182, 2542, 4826, 0, 0, 0, 529, 8580, - 0, 0, 10586, 10790, 11987, 66023, 41593, 41207, 0, 0, 41594, 225, 42828, - 0, 0, 0, 64705, 74379, 10721, 0, 3438, 42097, 0, 11084, 3194, 41870, 266, - 0, 0, 41873, 120575, 11324, 0, 0, 8420, 64918, 0, 41871, 41338, 3734, - 7734, 0, 8750, 66605, 66011, 0, 40965, 0, 0, 5161, 10572, 0, 0, 0, 64349, - 7287, 42162, 0, 0, 0, 11948, 0, 12359, 66674, 41369, 1697, 12191, 0, 0, - 7286, 0, 0, 10031, 0, 9870, 0, 8620, 65824, 0, 11938, 0, 7285, 0, 119577, - 0, 0, 0, 41583, 0, 65799, 0, 0, 0, 0, 0, 66199, 0, 3609, 0, 0, 832, - 120693, 120770, 0, 66007, 0, 65703, 0, 0, 0, 5180, 0, 41395, 41530, - 11691, 64773, 0, 74002, 0, 0, 0, 11036, 243, 13200, 0, 6024, 0, 74398, - 10037, 41529, 10648, 8538, 0, 0, 0, 4285, 66195, 0, 4230, 0, 13307, 0, 0, - 7563, 42376, 0, 0, 120512, 0, 0, 214, 0, 0, 0, 65893, 12208, 120488, 0, - 66311, 65589, 0, 2603, 0, 0, 0, 0, 0, 6022, 0, 2884, 0, 11620, 0, 43, 0, - 66453, 1016, 41107, 0, 41121, 3885, 92, 65456, 64608, 0, 74801, 0, 12451, - 0, 0, 0, 12453, 0, 0, 74241, 0, 8890, 12457, 0, 0, 0, 0, 118819, 0, 0, 0, - 66637, 7995, 8759, 0, 0, 12449, 0, 0, 0, 8752, 3197, 4720, 10165, 0, - 119249, 0, 11595, 64893, 0, 120180, 0, 0, 4993, 0, 6168, 10934, 1946, - 741, 0, 5494, 4639, 0, 1990, 66589, 4498, 0, 0, 0, 0, 0, 2960, 73779, 0, - 8969, 0, 0, 0, 0, 2950, 0, 6210, 0, 370, 0, 0, 0, 4953, 0, 0, 0, 0, 0, 0, - 0, 65688, 0, 5063, 3517, 2964, 0, 0, 65094, 74791, 10566, 10144, 66333, - 8252, 729, 66016, 0, 0, 0, 64923, 0, 65208, 9032, 0, 0, 0, 41215, 0, - 65883, 0, 0, 120602, 3761, 0, 0, 0, 0, 12912, 119012, 3850, 0, 0, 0, 0, - 0, 908, 0, 8611, 0, 0, 0, 0, 0, 0, 8978, 120540, 119135, 41586, 10527, 0, - 917848, 3848, 0, 0, 0, 65241, 5336, 0, 0, 663, 0, 10780, 0, 0, 0, 0, 0, - 0, 347, 0, 0, 0, 64675, 41582, 119126, 0, 65579, 12980, 0, 12143, 73733, - 0, 0, 0, 41804, 0, 0, 0, 0, 0, 41584, 10681, 0, 0, 73938, 0, 0, 4800, - 66661, 0, 66306, 64715, 0, 9518, 6609, 10434, 0, 11319, 1097, 0, 917850, - 41730, 0, 0, 0, 0, 65172, 41728, 41721, 0, 0, 0, 41203, 0, 13110, 41726, - 0, 0, 1000, 0, 0, 41140, 1209, 0, 0, 0, 1073, 0, 0, 41138, 0, 0, 0, - 12167, 1115, 41605, 9794, 127062, 127063, 127064, 12237, 127066, 66314, - 6587, 9290, 0, 0, 9231, 0, 2959, 7926, 0, 0, 0, 64398, 0, 119970, 12311, - 0, 0, 118846, 0, 0, 0, 119973, 0, 0, 0, 12290, 0, 0, 0, 42142, 10151, - 8205, 0, 5131, 0, 9627, 0, 0, 0, 0, 1944, 1248, 10148, 0, 119990, 119991, - 12701, 119993, 11308, 119995, 0, 119997, 119998, 65305, 74263, 4031, - 42794, 120003, 7075, 8154, 120006, 120007, 41817, 73934, 42275, 120011, - 120012, 120013, 120014, 120015, 6041, 0, 41899, 0, 8002, 0, 4364, 0, 0, - 64332, 0, 7813, 9064, 119986, 10124, 7526, 8601, 7281, 0, 7279, 12041, - 1418, 10885, 12673, 0, 0, 9660, 0, 13012, 4571, 0, 0, 0, 12078, 2970, 0, - 10933, 0, 0, 0, 0, 0, 41599, 0, 0, 0, 12950, 0, 3486, 0, 0, 4239, 0, 0, - 66511, 0, 2637, 64629, 8460, 127053, 8476, 0, 0, 0, 0, 65673, 1019, 0, - 4148, 0, 12289, 0, 4316, 0, 13119, 0, 5412, 66243, 10744, 0, 73864, 0, - 41734, 8206, 74081, 9163, 3286, 9072, 5867, 13302, 7622, 0, 41736, 0, - 41731, 0, 9483, 5416, 0, 119593, 10817, 0, 41539, 0, 0, 73963, 41855, - 41867, 65564, 11277, 65892, 11536, 10620, 0, 12210, 0, 73932, 5498, - 73942, 41536, 0, 0, 0, 3459, 8997, 0, 0, 0, 0, 0, 0, 66377, 0, 0, 0, 0, - 3161, 295, 0, 0, 0, 0, 0, 9016, 0, 63903, 63902, 63901, 0, 3971, 0, - 73972, 2952, 0, 11038, 10901, 63900, 63899, 63898, 0, 667, 12332, 63887, - 6086, 41722, 0, 5172, 0, 0, 4159, 0, 0, 9815, 63884, 19934, 63882, 41198, - 8555, 63878, 63877, 42460, 6050, 0, 63881, 63872, 0, 42421, 0, 41723, - 63875, 63874, 11460, 7432, 1913, 41913, 63852, 0, 0, 42348, 0, 74841, - 446, 41911, 0, 63851, 63850, 41910, 0, 63846, 2972, 12932, 7262, 0, - 63849, 63848, 63847, 0, 0, 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, 0, 0, - 10785, 0, 119170, 4557, 0, 9159, 10171, 13125, 63860, 5540, 63858, 63865, - 281, 13242, 63862, 74154, 0, 5536, 65568, 63857, 1388, 74169, 0, 1077, 0, - 65099, 11531, 0, 0, 0, 0, 0, 42773, 0, 0, 0, 119220, 0, 3663, 0, 1112, - 119122, 8686, 0, 5334, 65081, 0, 74778, 0, 11077, 0, 6509, 0, 5327, 0, - 19907, 63869, 3478, 7583, 7679, 2903, 0, 3001, 1158, 8745, 0, 73748, - 63866, 0, 1915, 4846, 0, 66371, 118984, 42105, 2990, 120128, 805, 120130, - 120125, 12070, 8760, 1117, 118987, 12212, 120123, 65174, 42357, 63835, - 63834, 0, 0, 12225, 63838, 63837, 0, 0, 63833, 6042, 66360, 8083, 0, 0, - 63821, 63820, 63819, 63818, 0, 5227, 9047, 63822, 0, 6091, 0, 10691, 560, - 5643, 8226, 119578, 63812, 63811, 63810, 63809, 5542, 63815, 63814, - 63813, 6047, 1597, 120143, 780, 206, 0, 4936, 65147, 8168, 63930, 0, - 1093, 9882, 63934, 63933, 63932, 917554, 63929, 3546, 1605, 0, 9806, - 65566, 0, 8400, 11343, 63920, 0, 63926, 2984, 5968, 9287, 0, 4618, 0, 0, - 13169, 5290, 5283, 1695, 10743, 1088, 63825, 7268, 1084, 1085, 63829, - 1083, 10131, 7283, 0, 63970, 0, 1092, 4754, 7273, 5252, 0, 0, 0, 0, 0, - 11809, 0, 0, 0, 2965, 7258, 8808, 0, 1089, 4187, 63937, 42119, 42120, 0, - 940, 5787, 10099, 63938, 0, 74494, 12463, 2994, 0, 0, 0, 9664, 0, 0, 0, - 0, 74343, 0, 0, 660, 10127, 666, 9022, 5532, 0, 5533, 0, 0, 6118, 222, - 979, 3884, 0, 74151, 120445, 6502, 0, 127118, 0, 63951, 12465, 0, 0, 0, - 63946, 1707, 63924, 12461, 63950, 63897, 63948, 63947, 63945, 6038, - 63943, 63942, 64685, 63895, 65838, 0, 7776, 0, 0, 0, 120444, 0, 801, - 43165, 1690, 63919, 63918, 63917, 13277, 63893, 0, 120638, 9906, 5486, - 2334, 0, 63916, 5483, 63914, 120610, 63911, 5484, 63909, 63908, 2539, 0, - 63913, 5485, 0, 195060, 9061, 5534, 10672, 4502, 0, 253, 0, 0, 0, 42854, - 0, 0, 11530, 0, 0, 0, 0, 0, 10474, 0, 13257, 42354, 0, 0, 0, 195065, 0, - 8413, 0, 0, 5693, 7272, 0, 13209, 64470, 65831, 0, 195063, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 66608, 3111, 41863, 8804, 66607, 0, 7270, 0, 66606, 6628, - 1076, 41305, 1436, 0, 0, 0, 63982, 10221, 12807, 63907, 63906, 1598, - 63904, 0, 0, 41729, 4423, 1307, 0, 10515, 41589, 0, 0, 6218, 0, 1430, 0, - 0, 120606, 119365, 5413, 7619, 3255, 3493, 74032, 11549, 10735, 0, 73937, - 10517, 0, 0, 10990, 65073, 5167, 4481, 3771, 0, 2710, 0, 0, 41724, 0, - 43073, 41690, 12479, 0, 0, 0, 0, 119659, 1628, 0, 0, 0, 65262, 63854, - 10783, 42315, 0, 63855, 120683, 0, 0, 5339, 74323, 0, 13004, 0, 4457, 0, - 0, 0, 0, 5684, 8678, 10914, 0, 5689, 65807, 0, 120617, 12633, 0, 0, - 65183, 5688, 11926, 6033, 6310, 5686, 0, 0, 0, 120647, 0, 50, 0, 9871, 0, - 0, 0, 0, 0, 66468, 0, 13259, 4448, 0, 0, 0, 0, 67853, 0, 10640, 0, 1151, - 0, 0, 0, 0, 195050, 0, 0, 0, 0, 12501, 64604, 0, 11527, 118870, 8812, 0, - 11538, 8673, 12650, 11020, 0, 66467, 10839, 8087, 0, 0, 9894, 0, 0, 0, - 4636, 0, 118985, 8053, 0, 0, 0, 0, 120495, 0, 0, 12277, 194627, 11995, - 194626, 0, 12158, 0, 8741, 10197, 0, 0, 0, 6531, 0, 0, 473, 0, 0, 0, - 1873, 1087, 0, 0, 0, 0, 66439, 43218, 0, 194716, 7237, 12504, 74282, 0, - 0, 0, 9489, 0, 0, 4384, 74220, 195055, 0, 917561, 13295, 43191, 0, 0, - 1154, 3857, 1205, 0, 0, 13100, 12958, 120706, 74168, 0, 0, 4421, 10592, - 0, 495, 0, 41712, 7983, 0, 0, 0, 8494, 0, 7654, 41710, 4196, 0, 437, - 41709, 73772, 0, 0, 9465, 13290, 119180, 4997, 64306, 0, 0, 4999, 194642, - 0, 0, 4711, 120769, 0, 2739, 0, 8044, 74834, 0, 41789, 0, 10809, 0, 0, 0, - 1779, 6600, 6601, 41543, 5325, 642, 64187, 13058, 0, 0, 0, 0, 13229, 0, - 10575, 0, 0, 0, 41791, 1104, 0, 0, 10655, 0, 0, 0, 0, 1082, 195049, 8428, - 0, 0, 0, 0, 0, 10167, 0, 12993, 8049, 41548, 0, 6458, 0, 0, 4761, 63828, - 4766, 64623, 1273, 194653, 0, 118876, 0, 6912, 1313, 7033, 10483, 0, - 41545, 0, 0, 0, 0, 0, 0, 0, 3484, 74337, 0, 0, 8503, 5122, 41527, 0, - 66320, 0, 0, 0, 0, 41537, 0, 8303, 8282, 11817, 0, 10003, 73859, 65904, - 194663, 1686, 0, 0, 11467, 3664, 65921, 64299, 194664, 0, 0, 4324, 126, - 42246, 119152, 0, 0, 65926, 7744, 194636, 74277, 74302, 0, 0, 6966, 0, - 8136, 0, 65600, 1633, 0, 0, 4762, 1103, 0, 0, 4765, 0, 13078, 0, 4760, - 63827, 0, 10871, 43199, 1102, 0, 0, 0, 0, 11546, 74794, 337, 0, 42591, - 8627, 12279, 1111, 0, 0, 4707, 0, 10143, 7883, 127081, 7880, 4522, 8645, - 5704, 13010, 0, 8304, 0, 0, 119575, 0, 0, 66654, 0, 0, 0, 13008, 0, 4385, - 0, 13011, 0, 0, 119161, 13009, 160, 2677, 0, 0, 41793, 65763, 74221, - 120141, 41792, 42770, 0, 65762, 118829, 64573, 5709, 0, 194638, 0, 0, 0, - 1079, 3867, 5708, 0, 0, 0, 5706, 64768, 5705, 8791, 4005, 0, 10237, - 10991, 0, 917579, 9173, 917581, 917580, 13170, 65942, 917577, 42605, - 120765, 917570, 917573, 917572, 10058, 0, 74867, 194654, 127078, 3339, - 11448, 1106, 917591, 917590, 917593, 3340, 917587, 917586, 917589, - 917588, 917583, 10605, 1309, 63966, 120743, 1754, 127075, 13246, 864, 0, - 118926, 8972, 0, 7849, 120092, 0, 13240, 195068, 5192, 4338, 0, 10948, - 917601, 13199, 120169, 1236, 13208, 13261, 13189, 13188, 120164, 0, 7440, - 0, 120153, 9553, 1590, 63777, 63776, 13178, 63782, 63781, 63780, 63779, - 1583, 0, 13260, 4550, 0, 64205, 0, 0, 41522, 0, 0, 0, 0, 11354, 0, 0, - 42795, 0, 119195, 11394, 194646, 13236, 13272, 13194, 1334, 0, 4479, - 1178, 65586, 120663, 66681, 119193, 4601, 0, 0, 0, 0, 0, 0, 0, 63787, + 66504, 0, 0, 2307, 0, 64333, 0, 0, 73873, 0, 0, 0, 0, 0, 0, 10360, 6746, + 0, 0, 440, 0, 13085, 9233, 74216, 0, 0, 68612, 0, 66447, 8046, 64963, + 65777, 10125, 74212, 42819, 10910, 0, 1521, 9896, 0, 10487, 0, 12527, 0, + 7970, 0, 0, 0, 65769, 5243, 9849, 5239, 65771, 0, 0, 5237, 0, 0, 10103, + 5247, 4769, 0, 118977, 12873, 5764, 0, 0, 3008, 4896, 0, 12087, 0, 55231, + 41103, 0, 64565, 4773, 0, 0, 0, 4770, 0, 917567, 8731, 65378, 0, 120619, + 9122, 0, 0, 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, 0, 0, 0, 10116, 9877, 0, 0, 0, 7095, 0, 0, + 6778, 0, 78090, 8243, 2427, 0, 7093, 0, 11585, 195003, 9962, 0, 12223, 0, + 0, 1434, 0, 5637, 11573, 0, 0, 0, 19951, 0, 78121, 0, 0, 55283, 0, 0, + 74437, 1156, 8740, 0, 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, 0, 0, 42257, 5696, + 120470, 120465, 3862, 9643, 0, 0, 7634, 65167, 9845, 0, 0, 5701, 9722, + 41490, 0, 1426, 68217, 0, 68447, 42204, 55270, 8571, 194991, 0, 0, 78818, + 0, 43182, 12184, 0, 42022, 0, 10281, 0, 5650, 43194, 64712, 10744, 0, + 990, 5647, 0, 7387, 78734, 41114, 11477, 5646, 12879, 11018, 0, 3945, 0, + 0, 0, 0, 0, 78212, 0, 1020, 73763, 0, 78731, 5648, 64748, 194910, 0, + 10205, 3545, 0, 6984, 0, 74051, 0, 43242, 120458, 2667, 0, 0, 0, 9911, 0, + 65020, 10097, 119166, 0, 0, 118836, 0, 78427, 1140, 78426, 0, 10159, 0, + 0, 8128, 0, 0, 917965, 1815, 19910, 890, 0, 3267, 0, 0, 10123, 0, 4410, + 1041, 10576, 6354, 0, 580, 74232, 0, 0, 0, 0, 0, 19938, 65906, 0, 0, 0, + 3298, 5375, 10142, 0, 8215, 0, 6134, 41246, 64402, 0, 0, 0, 0, 0, 41382, + 0, 0, 5173, 65348, 527, 0, 0, 0, 0, 78797, 11915, 0, 0, 10072, 0, 42695, + 2329, 42250, 0, 0, 0, 12245, 9939, 0, 0, 0, 0, 0, 74328, 119576, 74769, + 0, 119087, 9069, 6144, 0, 0, 73822, 0, 0, 64917, 41521, 118934, 494, + 13250, 0, 65098, 6364, 956, 0, 12830, 10462, 73740, 0, 0, 0, 0, 66449, + 13263, 74281, 69217, 13171, 0, 0, 0, 0, 0, 1044, 41276, 0, 0, 0, 42068, + 11795, 0, 0, 0, 0, 42450, 3907, 0, 64526, 0, 68197, 12295, 0, 11475, 0, + 3020, 11537, 0, 66441, 0, 0, 0, 0, 1057, 566, 42696, 0, 3016, 42274, + 43464, 66490, 12921, 66571, 78472, 0, 3006, 4620, 127237, 0, 0, 0, 64659, + 0, 0, 55253, 6357, 6362, 8626, 0, 0, 9090, 65377, 41596, 0, 0, 1698, 0, + 64477, 0, 0, 1053, 0, 78269, 0, 0, 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, 0, 0, 0, 6359, 0, 43471, 0, 0, 0, + 127274, 0, 6358, 6361, 1926, 6356, 0, 7898, 8110, 10935, 0, 43633, 5830, + 0, 43685, 0, 0, 0, 0, 8693, 78611, 119565, 0, 0, 0, 127257, 0, 0, 0, 0, + 0, 0, 0, 119187, 11439, 78868, 0, 0, 78869, 42313, 5579, 0, 0, 0, 0, 0, + 5578, 41774, 0, 42023, 6234, 5669, 0, 0, 0, 0, 127506, 68202, 5583, 0, 0, + 42426, 5580, 42276, 2923, 892, 5582, 42465, 41330, 194987, 5795, 65512, + 119006, 65702, 0, 120801, 65251, 0, 65710, 0, 0, 67672, 0, 5370, 0, + 194986, 1638, 10966, 10188, 65878, 118848, 0, 0, 0, 0, 8172, 42017, 0, + 10844, 0, 0, 0, 6374, 0, 0, 286, 78023, 1062, 0, 119999, 0, 7395, 0, + 1070, 64900, 0, 6095, 41865, 0, 3015, 0, 917763, 5211, 0, 6400, 0, + 194983, 0, 8189, 11276, 0, 0, 372, 0, 0, 118874, 42102, 41585, 0, 0, + 42101, 276, 78402, 0, 33, 74226, 0, 9007, 118796, 41588, 66033, 427, + 10763, 118819, 0, 0, 0, 1031, 6257, 0, 42104, 0, 0, 2328, 0, 1071, 0, 0, + 74848, 0, 0, 0, 1047, 0, 0, 64790, 0, 0, 10651, 0, 0, 0, 0, 0, 119181, + 5711, 41633, 12098, 65571, 9166, 0, 5710, 0, 6790, 65168, 13216, 0, 0, 0, + 0, 64611, 41623, 195001, 5715, 0, 0, 0, 5712, 2761, 41620, 68124, 3074, + 5722, 0, 8643, 73768, 0, 118906, 2757, 11067, 9718, 74498, 8910, 10689, + 6479, 0, 0, 0, 78607, 0, 0, 0, 0, 0, 0, 118911, 0, 0, 0, 0, 0, 120010, 0, + 8701, 68130, 119616, 120522, 0, 42477, 0, 12123, 4495, 43569, 0, 0, 0, + 64946, 10992, 0, 120009, 0, 0, 9318, 120661, 13249, 65679, 73808, 0, + 65457, 42249, 7639, 43995, 67845, 42641, 5454, 0, 0, 194997, 120005, 0, + 0, 5084, 0, 0, 118861, 0, 733, 917876, 78014, 78436, 78435, 41677, 0, + 9218, 1731, 0, 0, 0, 0, 0, 0, 0, 120001, 127018, 0, 5155, 0, 5358, 0, 0, + 917767, 64424, 0, 3840, 64314, 41432, 0, 0, 68430, 119116, 43253, 65943, + 0, 3371, 10988, 0, 8771, 1479, 0, 0, 1109, 11580, 0, 64601, 12205, 0, 0, + 64507, 8868, 399, 0, 74842, 0, 0, 12149, 13088, 551, 0, 10156, 12119, 0, + 0, 2544, 65074, 0, 0, 0, 78011, 351, 119149, 0, 0, 55229, 0, 74268, 0, 0, + 0, 42377, 0, 0, 0, 0, 0, 9013, 4054, 0, 0, 0, 0, 73960, 5585, 65881, + 2549, 74469, 0, 0, 5584, 8358, 0, 74411, 0, 10919, 0, 7980, 0, 0, 0, + 41800, 5589, 0, 2664, 41613, 5586, 118890, 0, 11356, 0, 0, 43452, 78609, + 0, 42573, 67856, 0, 78129, 0, 0, 0, 8135, 6450, 10055, 77996, 0, 0, 0, + 5657, 0, 9626, 0, 77994, 10179, 5654, 12939, 0, 120799, 0, 0, 5652, + 10945, 0, 66486, 0, 3661, 7863, 0, 0, 0, 74509, 0, 5659, 0, 0, 66729, + 5655, 0, 42168, 0, 1055, 917628, 0, 66310, 74030, 0, 12146, 73955, 73956, + 11618, 0, 126990, 0, 10272, 10304, 10368, 42518, 594, 10244, 10248, 7407, + 0, 64870, 0, 3467, 0, 0, 3331, 946, 10231, 1495, 8131, 74330, 0, 9562, + 69222, 65927, 0, 0, 120155, 69769, 64656, 0, 0, 194837, 0, 5666, 65227, + 5318, 63994, 0, 9091, 10798, 0, 917979, 10186, 0, 7732, 0, 64556, 0, 0, + 5668, 74445, 0, 0, 5670, 0, 0, 11820, 2992, 7826, 5667, 19952, 120807, 0, + 12749, 0, 0, 0, 66496, 4361, 119260, 1306, 9286, 1497, 0, 0, 0, 0, 3571, + 13247, 0, 7973, 66353, 68435, 78278, 67896, 43192, 0, 78265, 553, 120653, + 0, 0, 5829, 0, 4587, 78285, 65912, 0, 12746, 0, 0, 119924, 5633, 119927, + 0, 0, 0, 64905, 0, 9512, 0, 12742, 6443, 0, 0, 9135, 0, 41564, 0, 55219, + 0, 0, 0, 12148, 0, 78297, 0, 64256, 0, 11669, 0, 5634, 4524, 0, 127270, + 0, 118880, 2425, 65182, 0, 43636, 5221, 78410, 328, 0, 0, 69815, 5636, 0, + 5329, 0, 5638, 119918, 7940, 64938, 43223, 0, 5635, 3373, 2986, 78292, + 74223, 3437, 78291, 6203, 4247, 0, 11920, 8274, 0, 0, 1657, 41561, 78299, + 78295, 5639, 2954, 5660, 5640, 78303, 0, 78300, 42227, 0, 0, 41637, + 67872, 0, 78310, 41625, 43362, 78309, 120713, 11705, 5642, 0, 5486, 0, + 4356, 11710, 0, 12051, 0, 0, 5641, 8259, 0, 1058, 0, 67630, 0, 0, 1144, + 78750, 0, 42228, 0, 73890, 118972, 0, 65322, 0, 5645, 64964, 8652, 2547, + 66484, 43634, 0, 5608, 65890, 0, 0, 67621, 119934, 9000, 0, 0, 0, 1865, + 0, 5613, 74267, 0, 0, 5610, 0, 0, 65826, 2069, 0, 10787, 43999, 2997, 0, + 5609, 78316, 65319, 78313, 12316, 65376, 2412, 0, 8186, 9807, 74269, 0, + 13130, 65874, 0, 5807, 0, 10030, 5306, 12936, 0, 0, 11704, 0, 0, 10211, + 0, 0, 0, 0, 11706, 9710, 0, 0, 0, 413, 65623, 74237, 0, 9133, 74262, 0, + 1042, 0, 64779, 12171, 119240, 6185, 64776, 4984, 0, 708, 11391, 0, + 12241, 0, 0, 1308, 0, 2534, 810, 0, 0, 0, 0, 0, 1917, 3000, 0, 0, 120739, + 2364, 0, 74470, 66618, 65680, 0, 10027, 0, 0, 12337, 120722, 0, 0, 2980, + 755, 69774, 931, 13124, 68182, 6363, 2748, 0, 0, 65041, 0, 44011, 8730, + 0, 0, 78312, 7274, 119250, 0, 7275, 78304, 935, 0, 65840, 377, 42325, + 11649, 0, 65253, 64301, 0, 78308, 42341, 65284, 2417, 0, 12884, 19912, + 7907, 10768, 0, 194998, 0, 10673, 119217, 7248, 0, 0, 1781, 5496, 3627, + 62, 1649, 0, 964, 0, 0, 78226, 0, 127512, 0, 0, 0, 0, 43689, 0, 13142, + 78812, 42415, 66575, 4542, 74037, 43547, 0, 0, 7677, 2991, 4946, 42454, + 0, 7949, 0, 0, 11341, 42494, 3073, 65625, 9714, 11692, 4657, 0, 0, 6478, + 9898, 43673, 65237, 6241, 0, 4877, 0, 6238, 0, 10548, 127049, 4409, 0, 0, + 64798, 0, 5346, 0, 120528, 6237, 4874, 0, 9176, 0, 0, 65231, 65884, + 12678, 78748, 118912, 11378, 44018, 42785, 2408, 3251, 0, 0, 5685, 0, + 2461, 11052, 7091, 5342, 8317, 0, 68163, 5340, 0, 0, 43635, 73928, + 127529, 0, 0, 0, 0, 65482, 0, 9142, 0, 0, 0, 10938, 0, 118790, 1182, + 2542, 4826, 0, 0, 0, 529, 8580, 0, 0, 10586, 10790, 10839, 66023, 41593, + 41207, 0, 0, 41594, 225, 42828, 0, 0, 0, 11376, 74379, 10721, 67664, + 3438, 42097, 127267, 11084, 3194, 41870, 266, 78305, 0, 41873, 120575, + 11324, 0, 0, 8420, 64918, 0, 41871, 41338, 3734, 7734, 43683, 8750, + 66605, 66011, 0, 40965, 0, 0, 5161, 10572, 0, 0, 0, 64349, 7287, 42162, + 127552, 0, 0, 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, 0, 0, 0, 0, 78169, 66199, 0, + 3609, 68624, 0, 832, 120693, 120770, 78473, 66007, 78471, 65703, 0, 0, + 42732, 5180, 0, 41395, 41530, 11691, 64773, 0, 74002, 0, 0, 0, 6348, 243, + 13200, 0, 6024, 0, 9979, 10037, 41529, 10648, 8538, 43687, 0, 0, 4285, + 66195, 0, 4230, 0, 13307, 43256, 0, 7563, 42376, 0, 68442, 120512, 0, 0, + 214, 0, 0, 78466, 65893, 12208, 9973, 0, 66311, 65589, 0, 2603, 0, 0, 0, + 0, 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, 0, 0, + 74241, 0, 6791, 12457, 78268, 0, 0, 0, 78279, 0, 0, 0, 66637, 7995, 8759, + 43421, 78277, 12449, 0, 0, 0, 8752, 3197, 4720, 10165, 0, 119249, 0, + 11595, 64893, 0, 43435, 0, 0, 4993, 0, 6168, 10934, 1946, 741, 0, 5494, + 4639, 0, 1990, 66589, 4498, 78664, 119183, 0, 0, 0, 2960, 73779, 0, 8969, + 0, 43424, 127059, 0, 2950, 0, 6210, 65753, 370, 0, 0, 0, 4953, 0, 0, 0, + 0, 69230, 0, 0, 65688, 0, 5063, 3517, 2964, 43663, 917762, 6344, 74791, + 10566, 10144, 66333, 8252, 729, 66016, 78253, 0, 0, 64923, 0, 43669, + 9032, 78263, 78264, 0, 41215, 0, 65883, 0, 0, 120602, 3761, 0, 0, 0, 0, + 12912, 119012, 3850, 0, 0, 0, 0, 0, 908, 0, 8611, 0, 0, 0, 43691, 41197, + 0, 8978, 120540, 119135, 41586, 10527, 0, 917848, 3848, 78739, 194937, + 127536, 65241, 5336, 0, 0, 663, 0, 10780, 0, 0, 78767, 0, 0, 68193, 347, + 0, 0, 78775, 64675, 41582, 78774, 78744, 65579, 12980, 78769, 12143, + 73733, 78512, 0, 43441, 41804, 78523, 0, 78525, 0, 0, 41584, 10681, 0, 0, + 73938, 0, 0, 4800, 66661, 0, 66306, 64715, 78534, 9518, 6609, 10434, 0, + 11319, 1097, 0, 917850, 41730, 0, 0, 73847, 78761, 65172, 41728, 41721, + 0, 0, 0, 41203, 0, 13110, 41726, 0, 0, 1000, 0, 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, 0, 78796, + 78798, 78794, 78795, 68434, 78793, 66670, 0, 0, 12290, 0, 0, 0, 42142, + 9968, 8205, 0, 5131, 0, 9627, 78536, 78542, 78535, 0, 1944, 1248, 10148, + 0, 119990, 119991, 12701, 78376, 11308, 119995, 0, 119997, 119998, 65305, + 74263, 4031, 42794, 120003, 7075, 8154, 120006, 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, 0, 13012, 4571, 0, 0, 0, + 12078, 2970, 0, 10933, 0, 77870, 0, 0, 0, 41599, 0, 0, 0, 12950, 0, 3486, + 0, 0, 4239, 0, 0, 66511, 0, 2637, 64629, 8460, 127053, 8476, 0, 0, 0, 0, + 65673, 1019, 78495, 4148, 0, 12289, 0, 4316, 0, 13119, 0, 5412, 66243, + 9935, 0, 73864, 0, 41734, 8206, 74081, 9163, 3286, 9072, 5867, 13302, + 7622, 0, 41736, 0, 41731, 0, 7400, 5416, 68663, 118924, 10817, 0, 41539, + 0, 0, 73963, 41855, 41867, 65564, 11277, 65892, 11536, 10620, 0, 12210, + 66030, 73932, 5498, 73942, 41536, 0, 68204, 0, 3459, 8997, 0, 0, 0, 0, 0, + 0, 66377, 69781, 0, 0, 78511, 3161, 295, 120207, 0, 0, 0, 78742, 9016, + 43454, 63903, 63902, 43641, 0, 3971, 0, 73972, 2952, 78765, 11038, 10901, + 63900, 63899, 63898, 0, 667, 12332, 63887, 6086, 41722, 0, 5172, 0, 0, + 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, 0, 0, 42348, 0, 6752, 446, 41911, 0, 63851, 63850, + 41910, 0, 63846, 2972, 12932, 7262, 0, 63849, 63848, 63847, 0, 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, 0, 65099, 11531, + 5834, 0, 0, 0, 0, 42773, 0, 0, 0, 119220, 0, 3663, 0, 1112, 119122, 8686, + 0, 5334, 65081, 43249, 74778, 0, 11077, 0, 6509, 0, 5327, 0, 19907, + 63869, 3478, 7583, 7679, 2903, 0, 3001, 1158, 8745, 0, 73748, 63866, 0, + 1915, 4846, 0, 66371, 118984, 42105, 2990, 120128, 805, 69238, 120125, + 12070, 8760, 1117, 118987, 12212, 120123, 65174, 42357, 63835, 63834, 0, + 78240, 12225, 63838, 63837, 0, 0, 63833, 6042, 66360, 8083, 0, 0, 63821, + 63820, 63819, 63818, 0, 5227, 9047, 63822, 0, 6091, 0, 10691, 560, 5643, + 8226, 119578, 63812, 63811, 63810, 63809, 5542, 63815, 63814, 63813, + 6047, 1597, 120143, 780, 206, 77925, 4936, 65147, 8168, 63930, 2076, + 1093, 9882, 63934, 2082, 63932, 917554, 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, 0, 1092, 4754, 7273, 5252, + 44016, 43627, 0, 0, 7408, 11809, 0, 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, 120445, 6502, 0, 127118, 0, 63951, 12465, 0, 0, 0, 63946, 1707, + 63924, 12461, 63950, 63897, 63948, 63947, 63945, 6038, 63943, 63942, + 64685, 63895, 65838, 0, 7776, 0, 0, 0, 120444, 78172, 801, 43165, 1690, + 63919, 63918, 63917, 13277, 43659, 12951, 120638, 9906, 2054, 2334, + 78515, 63916, 5483, 63914, 120610, 63911, 5484, 63909, 63908, 2539, 0, + 43980, 5485, 0, 42697, 9061, 5534, 10672, 4502, 0, 253, 0, 68208, 0, + 42854, 78393, 0, 11530, 0, 68668, 0, 0, 0, 10474, 43426, 13257, 42354, 0, + 0, 0, 195065, 0, 8413, 0, 0, 5693, 7272, 0, 13209, 64470, 65831, 78460, + 195063, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66608, 3111, 41863, 8804, 66607, 0, + 7270, 0, 66606, 6628, 1076, 7433, 1436, 73844, 55226, 0, 63982, 7393, + 12807, 43413, 63906, 1598, 63904, 0, 0, 41729, 4423, 1307, 0, 10515, + 41589, 0, 0, 6218, 0, 1430, 0, 0, 120606, 78754, 5413, 7619, 3255, 3493, + 74032, 11549, 10735, 41743, 73937, 6801, 0, 4518, 10990, 65073, 5167, + 4481, 3771, 0, 2710, 0, 69243, 41724, 0, 43073, 41690, 12479, 0, 0, 0, 0, + 119659, 1628, 0, 0, 0, 65262, 6333, 10783, 42315, 0, 63855, 120683, 0, 0, + 5339, 74323, 0, 13004, 0, 4457, 0, 0, 0, 0, 5684, 8678, 10914, 0, 5689, + 65807, 0, 68464, 12633, 12870, 78521, 65183, 5688, 11926, 6033, 6310, + 5686, 0, 74251, 0, 120647, 0, 50, 10558, 9871, 0, 43655, 0, 0, 0, 66468, + 0, 13259, 4448, 0, 0, 0, 0, 67853, 0, 10640, 0, 1151, 0, 917607, 0, + 127079, 195050, 0, 0, 0, 0, 12501, 64604, 0, 11527, 118870, 8812, 0, + 11538, 8673, 12650, 11020, 0, 66467, 2105, 8087, 78163, 0, 9894, 0, 0, 0, + 4636, 55262, 78513, 4515, 2382, 0, 127055, 0, 120495, 0, 0, 12277, + 194627, 11995, 194626, 0, 12158, 0, 8741, 10197, 0, 0, 0, 6531, 0, 0, + 473, 43415, 0, 0, 1873, 1087, 0, 0, 0, 78527, 66439, 43218, 0, 194716, + 7237, 12504, 74282, 0, 0, 0, 9489, 0, 0, 4384, 74220, 195055, 2058, + 917561, 13295, 43191, 0, 0, 1154, 3857, 1205, 0, 0, 13100, 12958, 120706, + 74168, 0, 0, 4421, 10592, 0, 495, 0, 41712, 7983, 0, 120779, 0, 6347, 0, + 7654, 41710, 4196, 0, 437, 41709, 73772, 0, 0, 9465, 13290, 119180, 4997, + 64306, 0, 0, 4999, 194642, 0, 0, 4711, 120769, 0, 2739, 0, 8044, 74834, + 0, 41789, 0, 10809, 0, 0, 0, 1779, 6600, 6601, 41543, 5325, 642, 64187, + 13058, 120449, 12875, 0, 0, 13229, 0, 10575, 43399, 0, 0, 41791, 1104, 0, + 0, 10655, 0, 0, 0, 0, 1082, 195049, 8428, 6569, 0, 0, 0, 0, 6783, 0, + 12993, 8049, 41548, 44021, 6458, 0, 0, 4761, 63828, 4766, 64623, 1273, + 43407, 0, 118876, 195045, 6912, 1313, 6322, 10483, 0, 41545, 0, 0, 0, 0, + 0, 0, 78624, 3484, 74337, 0, 0, 8503, 5122, 41527, 0, 66320, 0, 0, 0, 0, + 41537, 0, 8303, 8282, 11817, 73857, 10003, 73859, 65904, 194663, 1686, 0, + 78406, 11467, 3664, 65921, 64299, 194664, 0, 0, 4324, 126, 42246, 119152, + 0, 74378, 65926, 7744, 194636, 74277, 74302, 78052, 0, 6966, 0, 8136, 0, + 65600, 1633, 0, 0, 4762, 1103, 0, 0, 4765, 0, 13078, 0, 4760, 63827, + 2050, 10871, 43199, 1102, 0, 42236, 0, 194667, 11546, 74794, 337, 0, + 42591, 8627, 12279, 1111, 0, 0, 4707, 68206, 10143, 7883, 127081, 7880, + 4522, 8645, 5704, 13010, 0, 8304, 0, 0, 119575, 0, 0, 66654, 0, 0, 0, + 13008, 0, 4385, 0, 13011, 0, 0, 119161, 13009, 160, 2677, 0, 0, 41793, + 65763, 74221, 120141, 41792, 42770, 0, 65762, 118829, 64573, 5709, 0, + 194638, 0, 0, 0, 1079, 3867, 5708, 0, 0, 0, 5706, 64768, 5705, 8791, + 4005, 0, 10237, 10991, 0, 43459, 9173, 917581, 917580, 13170, 65942, + 917577, 42605, 120765, 917570, 68647, 917572, 10058, 0, 74867, 194654, + 127078, 3339, 11448, 1106, 917591, 917590, 917593, 3340, 917587, 917586, + 917589, 917588, 120541, 10605, 1309, 63966, 120743, 1754, 127075, 13246, + 864, 0, 118926, 8972, 0, 7849, 120092, 0, 13240, 195068, 5192, 4338, 0, + 10948, 917601, 13199, 120169, 1236, 13208, 13261, 13189, 13188, 120164, + 0, 7440, 0, 120153, 9553, 1590, 63777, 63776, 13178, 63782, 63781, 63780, + 63779, 1583, 0, 13260, 4550, 0, 64205, 0, 0, 41522, 0, 0, 0, 0, 11354, 0, + 0, 42795, 0, 119195, 11394, 194646, 13236, 13272, 13194, 1334, 0, 4479, + 1178, 65586, 120663, 66681, 119193, 4601, 0, 0, 0, 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, 0, 0, 0, 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, 0, 41930, 63805, 63804, 63803, 63801, 41082, 8140, 63798, 6260, - 0, 0, 119225, 63793, 11988, 3898, 0, 10201, 12238, 63795, 42358, 10367, - 12521, 10431, 42114, 41932, 1068, 0, 12523, 12945, 0, 0, 7950, 10804, - 63771, 42787, 4386, 12224, 6973, 2793, 12475, 0, 0, 63769, 9530, 0, - 12232, 13135, 8596, 5681, 63762, 4595, 63760, 792, 0, 64803, 0, 8742, 0, - 11053, 0, 63744, 0, 0, 7588, 63748, 1693, 63746, 43204, 5055, 0, 0, 1090, - 120679, 0, 11665, 74133, 4558, 65685, 9523, 0, 0, 0, 11513, 0, 6157, - 63775, 63774, 63773, 13191, 12170, 3500, 3139, 0, 3170, 12485, 0, 10872, - 0, 13006, 64433, 0, 0, 941, 0, 0, 0, 65541, 11063, 0, 8228, 0, 42065, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 43603, 0, 65397, 288, 0, 0, 0, 10025, 0, 2918, - 0, 65300, 119871, 9883, 64726, 2790, 65395, 3793, 0, 0, 65393, 0, 74138, - 0, 0, 0, 74139, 120613, 65394, 11548, 5270, 0, 65396, 0, 65813, 13256, - 1282, 120771, 0, 0, 10888, 0, 65242, 0, 3330, 0, 0, 0, 0, 0, 0, 3304, - 42753, 0, 0, 0, 1627, 0, 0, 0, 5371, 13116, 0, 1826, 0, 0, 43094, 0, 0, - 0, 0, 9035, 0, 0, 0, 0, 0, 68125, 0, 164, 0, 0, 0, 6958, 0, 43116, 0, 0, - 13245, 0, 0, 0, 0, 73893, 0, 12666, 13175, 13207, 120414, 66014, 120428, + 10192, 13105, 8183, 120741, 2037, 0, 0, 10747, 125, 0, 64890, 0, 0, 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, 119225, 63793, 11988, 3898, 0, 10201, 12238, 63795, + 42194, 10367, 12521, 10431, 42114, 41932, 1068, 0, 12523, 12945, 0, + 42203, 7950, 10804, 63771, 42787, 4386, 12224, 6973, 2793, 12475, 0, 0, + 63769, 9530, 0, 12232, 13135, 8596, 5681, 63762, 4595, 63760, 792, 0, + 64803, 0, 8742, 0, 11053, 0, 63744, 0, 0, 7588, 63748, 1693, 63746, + 43204, 5055, 68426, 917853, 1090, 120679, 0, 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, 0, 0, 0, 7386, 0, 68358, 0, + 0, 43603, 0, 65397, 288, 0, 0, 0, 10025, 917916, 2918, 0, 65300, 119871, + 9883, 64726, 2790, 65395, 3793, 0, 0, 65393, 0, 74138, 0, 0, 0, 74139, + 120613, 65394, 11548, 5270, 0, 65396, 0, 65813, 13256, 1282, 120771, 0, + 0, 10888, 0, 65242, 0, 3330, 0, 0, 0, 0, 0, 74259, 3304, 42753, 0, 0, 0, + 1627, 0, 0, 0, 5371, 13116, 0, 1826, 118794, 0, 43094, 0, 43650, 0, 0, + 9035, 0, 0, 0, 0, 0, 68125, 0, 164, 0, 0, 0, 6958, 0, 43116, 0, 0, 13245, + 0, 0, 127376, 0, 73893, 0, 12666, 13175, 13207, 120414, 66014, 120428, 7447, 5929, 0, 65509, 0, 7449, 11306, 0, 73920, 3180, 0, 63808, 9054, - 971, 13062, 0, 0, 65195, 64767, 0, 74428, 0, 0, 0, 0, 0, 0, 10045, 64303, - 13275, 0, 11057, 0, 13276, 0, 41525, 0, 7271, 11444, 0, 0, 0, 12229, - 41523, 0, 0, 73751, 0, 64813, 0, 0, 10476, 3858, 0, 3932, 64958, 0, 0, - 73989, 0, 0, 0, 369, 0, 41784, 0, 64163, 0, 0, 0, 65474, 4796, 41782, 0, - 65479, 0, 41781, 10486, 41480, 120511, 9899, 0, 0, 404, 12821, 3741, 0, - 5788, 0, 0, 41222, 1831, 66020, 0, 0, 4388, 0, 746, 120784, 0, 0, 13131, - 65294, 0, 0, 0, 0, 4422, 4708, 3799, 74292, 119357, 0, 74430, 0, 11700, - 4374, 0, 0, 1364, 0, 8038, 0, 917597, 0, 0, 0, 0, 73979, 13174, 73968, - 13225, 0, 0, 65835, 0, 2365, 7841, 0, 42855, 118856, 42866, 0, 0, 0, - 66438, 41785, 41171, 64172, 13173, 4372, 119354, 0, 0, 0, 0, 0, 0, 12965, - 384, 64512, 10404, 10340, 119352, 1556, 5274, 13210, 0, 10017, 9733, - 41787, 0, 0, 41373, 0, 12303, 0, 13232, 13233, 349, 4863, 41371, 11656, - 0, 120703, 119883, 12861, 4398, 8543, 65618, 0, 1096, 0, 0, 0, 12441, - 12355, 119348, 119347, 4318, 10452, 0, 8032, 13243, 13237, 12719, 0, - 119101, 0, 64884, 119872, 119345, 8597, 0, 0, 9864, 0, 120785, 0, 0, - 13195, 41452, 64961, 7722, 0, 10459, 119878, 0, 119879, 66590, 0, 41533, - 66337, 0, 0, 0, 4965, 0, 917536, 73849, 0, 0, 0, 0, 6261, 119342, 43147, - 66570, 1957, 10420, 982, 2756, 13292, 13206, 0, 0, 2925, 73809, 13056, 0, - 13212, 65110, 0, 13190, 13187, 0, 13198, 118793, 0, 5242, 119179, 64476, - 1694, 8216, 0, 0, 43331, 0, 65620, 0, 43544, 0, 0, 41444, 65621, 120325, - 64799, 5246, 120326, 13185, 9709, 120323, 120322, 12314, 65616, 5238, - 119333, 0, 119337, 5236, 40979, 0, 74201, 8286, 0, 3936, 119331, 11699, - 41347, 0, 13235, 8842, 41248, 0, 4379, 13239, 12692, 7969, 0, 7219, 0, 0, - 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, 0, 0, 42841, 13267, 0, 0, - 41775, 0, 0, 41773, 0, 10663, 0, 0, 0, 6151, 12110, 0, 65572, 119602, - 65250, 13265, 13264, 64518, 0, 6100, 0, 0, 5808, 65922, 0, 12967, 66041, - 9676, 4583, 0, 0, 68097, 64575, 0, 11965, 0, 119211, 0, 0, 0, 0, 68102, - 9698, 7814, 74476, 119651, 0, 0, 41921, 0, 9756, 6985, 119258, 0, 74219, - 0, 0, 0, 8012, 5674, 12353, 0, 12361, 5677, 42323, 0, 41925, 0, 41920, - 5673, 120534, 5676, 41923, 12694, 118978, 5672, 1294, 0, 0, 0, 42511, - 1727, 0, 0, 0, 0, 0, 74222, 8718, 3550, 736, 10268, 4505, 10316, 74090, - 5826, 74270, 5813, 0, 120712, 5841, 5837, 0, 0, 3105, 12829, 5838, 5796, - 0, 119592, 5793, 0, 5866, 5797, 41011, 5865, 120091, 7956, 598, 0, 64649, + 971, 13062, 0, 0, 65195, 10164, 0, 74428, 0, 78146, 0, 0, 0, 0, 10045, + 12882, 13275, 0, 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, 0, 369, 0, 41784, 0, 64163, 0, 0, 0, 65474, + 4796, 12292, 0, 65479, 0, 41781, 10486, 41480, 120511, 9899, 0, 0, 404, + 12821, 3741, 0, 5788, 8092, 68212, 41222, 1831, 66020, 0, 0, 4388, 0, + 746, 120784, 0, 0, 12018, 65294, 0, 0, 0, 0, 4422, 4708, 3799, 74292, + 119357, 0, 74430, 0, 11700, 4374, 0, 0, 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, 41171, 64172, + 13173, 4372, 119354, 0, 0, 0, 0, 0, 0, 12965, 384, 64512, 10404, 10340, + 119352, 1556, 5274, 13210, 0, 10017, 9733, 41787, 0, 126994, 41373, + 78039, 12303, 0, 13232, 13233, 349, 4863, 41371, 11656, 0, 120703, + 119883, 12861, 4398, 8543, 65618, 0, 1096, 0, 0, 42688, 12441, 12355, + 119348, 119347, 4318, 10452, 0, 8032, 13243, 13237, 12719, 0, 119101, 0, + 64884, 119872, 119345, 8597, 0, 0, 9864, 0, 120785, 119874, 0, 13195, + 41452, 64961, 7722, 0, 10459, 119878, 0, 119879, 66590, 0, 41533, 66337, + 0, 0, 0, 4965, 0, 917536, 73849, 0, 43638, 78537, 0, 6261, 119342, 43147, + 66570, 1957, 10420, 982, 2756, 13292, 13206, 0, 0, 2925, 73809, 13056, + 127559, 13212, 43238, 0, 13190, 13187, 0, 13198, 118793, 0, 5242, 119179, + 64476, 1694, 8216, 0, 6770, 43331, 0, 65620, 0, 43544, 0, 0, 41444, + 65621, 120325, 64799, 5246, 120326, 13185, 9709, 120323, 120322, 12314, + 65616, 5238, 119333, 0, 119337, 5236, 40979, 0, 74201, 8286, 0, 3936, + 119331, 11699, 41347, 127249, 13235, 8842, 41248, 0, 4379, 13239, 12692, + 7969, 127266, 7219, 127250, 0, 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, 0, 0, 42841, 13267, 0, 0, 41775, 0, 0, 41773, 0, 10663, 0, 0, 0, + 6151, 12110, 42673, 65572, 119602, 65250, 13265, 13264, 64518, 0, 6100, + 0, 0, 5808, 65922, 0, 12967, 66041, 5612, 4583, 0, 0, 68097, 64575, 0, + 11965, 0, 119211, 0, 69789, 0, 0, 68102, 9698, 7814, 74476, 119651, 0, 0, + 41921, 118858, 9756, 6985, 119258, 0, 74219, 0, 0, 118997, 8012, 5674, + 12353, 0, 12361, 5677, 5588, 0, 41925, 0, 41920, 5673, 120534, 5676, + 41923, 12694, 118978, 5672, 1294, 0, 78059, 0, 42511, 1727, 0, 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, 0, 0, 0, 0, 0, 847, 0, 9529, 0, - 66657, 6980, 0, 120035, 0, 0, 0, 120033, 0, 0, 0, 120039, 0, 0, 0, 9624, - 0, 0, 43190, 65463, 1554, 0, 42611, 42563, 0, 5651, 2929, 0, 43201, 0, - 19963, 5698, 0, 0, 0, 0, 5644, 10292, 65546, 120492, 68141, 8372, 0, - 65116, 0, 120022, 0, 10388, 42799, 0, 41013, 10568, 0, 0, 2869, 0, 41015, - 0, 2785, 4366, 0, 10954, 41802, 0, 42608, 194688, 9884, 4759, 0, 0, - 10266, 41359, 1170, 127017, 0, 73908, 1609, 902, 0, 63936, 0, 11661, - 8122, 5818, 0, 0, 3861, 9540, 11028, 2554, 5158, 5714, 127015, 0, 0, 807, - 43079, 0, 0, 976, 5511, 64553, 0, 42155, 0, 41356, 74110, 118801, 0, 0, - 8676, 0, 0, 11066, 451, 63941, 5798, 9349, 42018, 0, 0, 0, 43609, 194703, - 120553, 1440, 0, 0, 120016, 74283, 11005, 0, 66656, 66044, 0, 194698, 0, - 0, 0, 10094, 0, 11529, 10857, 120643, 66436, 6546, 93, 0, 0, 74440, 0, 0, - 8171, 0, 119097, 127065, 917543, 383, 10377, 41656, 0, 0, 0, 5187, 0, 0, - 11286, 0, 64217, 0, 5232, 0, 41009, 0, 41005, 0, 0, 0, 8292, 195074, - 4980, 8860, 73947, 10028, 66478, 7076, 13182, 194705, 0, 0, 10631, 66031, - 7972, 0, 0, 0, 7900, 0, 11309, 194711, 4198, 64211, 0, 0, 0, 0, 0, 0, - 12931, 0, 0, 74285, 10185, 0, 64366, 65156, 8814, 0, 74771, 0, 0, 12836, - 0, 0, 74342, 8593, 0, 0, 0, 13255, 0, 0, 7464, 0, 65865, 0, 194650, 0, 0, - 9342, 120464, 0, 64516, 0, 0, 10129, 41007, 0, 0, 40995, 12209, 41012, - 119136, 0, 0, 120633, 40992, 0, 0, 0, 43558, 5522, 0, 61, 0, 74105, 3633, - 0, 65162, 41234, 12089, 0, 9771, 0, 13251, 0, 0, 6262, 2784, 0, 0, 8126, - 66483, 0, 0, 441, 42621, 0, 0, 41002, 40999, 119623, 43266, 0, 0, 10890, - 74481, 65834, 8324, 119103, 64417, 74817, 0, 64737, 0, 0, 8930, 0, 74249, - 1193, 10056, 1800, 13253, 13252, 7829, 0, 0, 7743, 0, 0, 0, 0, 0, 9034, - 6039, 0, 10075, 0, 41018, 65683, 10338, 66469, 0, 0, 0, 42815, 0, 41966, - 0, 0, 0, 11792, 0, 0, 911, 7539, 0, 0, 120339, 65159, 64390, 0, 0, 5520, - 11662, 0, 65330, 73886, 0, 0, 12326, 0, 0, 42808, 0, 9348, 64901, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 5857, 65342, 0, 119120, 0, 8644, 0, 0, 0, 74296, - 41909, 0, 120332, 2791, 0, 1891, 0, 0, 41907, 66647, 0, 8761, 12942, - 5748, 0, 10773, 0, 0, 8796, 0, 6412, 120347, 8520, 13146, 0, 63931, 0, - 65902, 2882, 0, 0, 12843, 4520, 0, 0, 0, 0, 0, 73860, 0, 0, 64345, 0, 0, - 0, 0, 0, 0, 0, 917585, 65117, 0, 0, 10427, 0, 3844, 0, 9755, 1110, 6612, - 12222, 0, 0, 0, 0, 783, 194935, 0, 0, 0, 0, 65056, 3620, 0, 118945, 4556, - 0, 0, 194933, 74250, 0, 0, 10510, 4382, 66482, 0, 0, 0, 9177, 8902, 0, - 9839, 0, 12891, 0, 0, 63999, 2016, 41917, 9788, 63928, 0, 1862, 65800, - 9155, 66623, 9786, 65082, 41919, 8579, 41914, 7981, 0, 0, 4508, 64883, 0, - 0, 0, 0, 64592, 74276, 120080, 41780, 120079, 68181, 0, 0, 0, 0, 12147, - 9024, 66378, 66472, 0, 64289, 65289, 0, 0, 0, 64509, 0, 0, 0, 11051, 0, - 0, 11355, 65885, 0, 0, 41214, 0, 12299, 0, 7500, 4506, 7773, 0, 0, - 118912, 0, 0, 4040, 0, 6167, 0, 63922, 6594, 0, 0, 0, 3624, 43036, 0, - 64655, 63990, 19947, 63988, 41955, 0, 63993, 63992, 9611, 0, 0, 0, 7738, - 63986, 11446, 63984, 0, 3435, 119652, 0, 119108, 7029, 64258, 41292, - 118898, 12748, 43115, 9517, 11518, 0, 0, 0, 194777, 63956, 42458, 63954, - 63953, 63960, 9591, 63958, 10217, 118845, 11469, 0, 42306, 2723, 118947, - 0, 0, 0, 0, 0, 11397, 2880, 0, 0, 2872, 0, 0, 3498, 4378, 917539, 4270, - 0, 65551, 118928, 6633, 0, 0, 5230, 0, 0, 0, 0, 0, 8161, 393, 12013, 0, - 0, 0, 415, 63964, 63963, 42345, 0, 5183, 1877, 42498, 0, 2927, 0, 63961, - 4472, 0, 0, 0, 0, 917936, 42340, 4756, 0, 7081, 10730, 7691, 0, 63830, - 119625, 194945, 42103, 8628, 9813, 0, 42453, 1604, 9565, 10539, 0, 65764, - 41415, 65767, 0, 8457, 42301, 11372, 64873, 11992, 0, 0, 63980, 11801, - 3622, 0, 64336, 12017, 10463, 63981, 4967, 64189, 1966, 63976, 0, 0, 0, - 0, 63971, 4347, 4416, 42098, 11009, 10694, 63973, 402, 0, 13147, 0, - 42100, 64646, 13228, 0, 41875, 3515, 74252, 11805, 0, 11302, 6259, 0, 0, - 0, 0, 0, 0, 0, 74425, 11299, 1561, 0, 0, 64942, 0, 194733, 0, 194732, 0, - 74301, 0, 11280, 0, 0, 74060, 0, 0, 119664, 5145, 12486, 65018, 66516, - 5409, 0, 194669, 64347, 5399, 9685, 74089, 7952, 5401, 0, 66616, 0, 0, 0, - 5405, 917555, 64866, 0, 0, 0, 0, 74248, 11330, 194723, 64690, 3254, 0, 0, - 0, 42390, 0, 194725, 0, 65077, 0, 0, 3355, 9508, 9867, 5723, 11520, 5611, - 0, 3377, 0, 0, 0, 0, 0, 0, 0, 119119, 0, 0, 119068, 0, 0, 1379, 246, 0, - 0, 3788, 0, 11041, 0, 66304, 0, 0, 8917, 42403, 301, 0, 0, 0, 0, 0, 0, - 10656, 0, 65214, 119242, 42567, 0, 13163, 0, 120831, 74597, 3182, 0, 0, - 0, 0, 65889, 42169, 4755, 74244, 0, 11443, 0, 66326, 74598, 608, 600, 0, - 1219, 3934, 64206, 11483, 74510, 0, 74485, 42442, 65470, 0, 64202, 13160, - 7759, 42482, 485, 0, 0, 9828, 0, 0, 42280, 0, 9351, 7778, 64379, 7496, - 42431, 6916, 1208, 0, 119631, 11002, 42470, 0, 0, 0, 0, 74041, 0, 0, - 43539, 5411, 0, 0, 0, 0, 9150, 0, 42393, 13086, 1310, 194687, 9337, - 12052, 10643, 64586, 0, 194684, 2546, 194683, 213, 118852, 65611, 0, 0, - 194756, 74310, 6554, 0, 11914, 0, 0, 0, 0, 0, 0, 194681, 118826, 2713, 0, - 9650, 43330, 0, 194675, 1406, 0, 0, 0, 0, 194678, 4143, 194677, 0, 65748, - 4141, 9682, 65287, 1508, 0, 8779, 10569, 8725, 13299, 66638, 0, 42263, - 4145, 0, 65751, 66613, 0, 65738, 73729, 9185, 9550, 0, 0, 0, 0, 0, 65736, - 41951, 64816, 65756, 0, 12955, 10596, 2888, 0, 0, 0, 9657, 9019, 194766, - 0, 2878, 5390, 0, 194961, 0, 0, 0, 7501, 13203, 0, 10429, 10365, 0, 0, - 41946, 7503, 5235, 803, 0, 0, 0, 8986, 0, 10632, 11934, 11452, 1332, 0, - 0, 0, 0, 917545, 1791, 5191, 9288, 64822, 2892, 0, 67849, 555, 0, 0, - 66646, 0, 119002, 13151, 74512, 7289, 74055, 0, 0, 64162, 5858, 41927, - 10582, 0, 1784, 1361, 195047, 0, 7905, 0, 64868, 0, 13158, 0, 7211, 0, - 9371, 0, 0, 0, 1625, 0, 0, 1342, 0, 64171, 0, 10903, 0, 0, 0, 0, 0, 4482, - 41606, 0, 0, 0, 0, 64381, 0, 0, 0, 42245, 0, 41972, 0, 444, 0, 9127, - 66687, 66619, 0, 194972, 0, 11349, 40991, 0, 0, 119599, 120830, 0, 1197, - 0, 1149, 194970, 0, 0, 40990, 0, 0, 3492, 0, 0, 0, 0, 0, 12838, 0, 19948, - 0, 3099, 0, 0, 41087, 0, 0, 0, 119059, 12036, 0, 0, 0, 8152, 0, 64428, - 12227, 0, 0, 12828, 0, 0, 0, 0, 0, 0, 10386, 119574, 0, 0, 0, 0, 68154, - 0, 1743, 0, 0, 0, 65186, 0, 0, 9606, 0, 0, 0, 0, 0, 0, 0, 0, 194967, 0, - 0, 3395, 9362, 10878, 0, 0, 0, 64830, 0, 0, 41091, 3426, 1344, 8870, 0, - 0, 4735, 0, 6119, 12822, 0, 0, 0, 74818, 0, 0, 42637, 41080, 0, 12039, - 10559, 0, 118892, 0, 9472, 0, 11929, 0, 7170, 9596, 6130, 0, 0, 11579, 0, - 0, 194740, 0, 0, 66699, 0, 1004, 0, 194737, 0, 66008, 12627, 0, 0, 0, 0, - 0, 11300, 43304, 9686, 5890, 11776, 7558, 0, 65627, 0, 10718, 13154, - 3461, 9139, 0, 0, 0, 0, 0, 73877, 65628, 0, 0, 0, 41708, 12860, 41703, - 12069, 10838, 5403, 10352, 73917, 10061, 0, 0, 5140, 209, 0, 41704, 0, - 43078, 0, 0, 0, 10899, 65469, 0, 0, 0, 2410, 993, 0, 120589, 120689, 0, - 0, 0, 7232, 0, 119253, 0, 0, 74462, 0, 10489, 42166, 0, 10659, 3600, 0, - 4224, 1336, 41518, 0, 0, 0, 0, 41139, 64820, 0, 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, 0, 0, 0, 0, 7209, 8223, 2409, 7799, 0, 74424, - 0, 0, 4731, 0, 66629, 0, 0, 1255, 4149, 9247, 0, 9913, 0, 0, 0, 0, 65101, - 0, 11694, 0, 11690, 5835, 0, 66625, 10842, 41354, 42123, 43097, 11688, - 66634, 1094, 194, 64692, 0, 8180, 0, 0, 73872, 73865, 0, 6114, 10898, - 43072, 0, 0, 0, 0, 0, 10695, 0, 7540, 0, 881, 7857, 6067, 65164, 0, 0, 0, - 13311, 0, 41857, 64321, 8359, 0, 12689, 0, 194594, 0, 0, 0, 68183, 0, 0, - 1287, 5436, 0, 0, 74142, 127013, 74152, 119078, 6051, 10497, 0, 8985, - 12109, 0, 0, 0, 0, 0, 3652, 10537, 0, 1276, 0, 6549, 279, 0, 0, 0, 0, - 1489, 0, 0, 0, 3899, 1007, 42124, 0, 42122, 0, 0, 0, 11985, 1345, 127006, - 0, 0, 8956, 43083, 0, 42138, 0, 0, 12151, 0, 0, 0, 6285, 0, 0, 0, 74194, - 492, 8685, 0, 0, 0, 0, 0, 2582, 11470, 64538, 7444, 0, 0, 41550, 0, - 73837, 0, 2527, 119824, 197, 2799, 0, 0, 120276, 0, 0, 66515, 767, 5524, - 7028, 0, 0, 119827, 0, 0, 0, 0, 0, 1799, 120497, 6971, 74336, 0, 0, - 65340, 118979, 0, 2434, 0, 0, 120579, 0, 4631, 0, 0, 6407, 0, 19931, - 43214, 0, 7570, 0, 3192, 0, 8414, 0, 0, 0, 0, 0, 9164, 66612, 0, 3171, - 6623, 4961, 0, 886, 0, 8654, 0, 9993, 74390, 64603, 0, 0, 9599, 0, 43084, - 0, 0, 0, 2399, 0, 8994, 10944, 41208, 0, 41168, 8178, 0, 3367, 195008, - 42510, 0, 0, 7789, 0, 1947, 0, 0, 0, 42759, 11068, 1705, 9331, 0, 74798, - 9181, 0, 0, 8017, 0, 65096, 66720, 0, 0, 0, 4909, 12126, 0, 120696, 4904, - 0, 195012, 1365, 9253, 42757, 0, 7462, 0, 0, 0, 0, 119587, 64415, 0, 0, - 5398, 0, 195014, 0, 0, 0, 0, 0, 0, 9476, 0, 0, 12763, 0, 3629, 0, 13005, - 0, 3628, 0, 0, 0, 3469, 42107, 42116, 917578, 64809, 2928, 4905, 9853, - 851, 9040, 0, 64665, 43086, 9114, 0, 42583, 9315, 4822, 4906, 3852, 2847, - 0, 3236, 11317, 1251, 7777, 41852, 11410, 10964, 0, 43222, 12646, 120269, - 10259, 9865, 65821, 0, 6018, 0, 0, 12276, 0, 0, 0, 0, 119613, 0, 0, - 10467, 0, 2443, 10918, 0, 0, 1001, 9241, 1927, 0, 0, 73987, 0, 0, 0, - 118828, 0, 65678, 12867, 0, 8260, 0, 7519, 118794, 12274, 8904, 518, - 65857, 0, 0, 13204, 4387, 857, 0, 65369, 0, 119583, 43125, 120592, 0, 0, - 0, 0, 5136, 1968, 0, 195023, 1337, 64967, 1629, 0, 796, 66506, 0, 74123, - 0, 0, 42314, 195021, 0, 74403, 6120, 478, 65151, 68128, 0, 43082, 6016, - 0, 42284, 0, 4276, 1206, 3619, 41638, 0, 3843, 12011, 8853, 3361, 0, 490, - 10715, 7578, 0, 0, 65350, 10530, 12348, 8653, 74314, 42435, 6154, 9551, - 65354, 0, 784, 42397, 334, 0, 42416, 65356, 65273, 0, 0, 7025, 10364, 0, - 778, 41626, 42455, 7989, 74063, 3227, 0, 0, 73983, 2915, 41698, 41022, - 41702, 10309, 127035, 0, 0, 6975, 0, 5415, 12176, 0, 0, 3462, 65215, - 42629, 0, 73784, 0, 0, 9759, 0, 0, 0, 8114, 0, 0, 0, 0, 8710, 42495, - 118956, 0, 4051, 10460, 74097, 118917, 1356, 12161, 0, 0, 0, 1619, 9703, + 66657, 6980, 0, 120035, 78484, 0, 0, 120033, 78486, 0, 0, 120039, 42683, + 0, 0, 9624, 0, 0, 43190, 65463, 1554, 0, 42611, 42563, 0, 5651, 2929, + 6792, 43201, 0, 19963, 5698, 0, 0, 0, 0, 5644, 10292, 65546, 69821, + 68141, 8372, 0, 65116, 0, 120022, 0, 10388, 42799, 0, 41013, 10568, 0, 0, + 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, 0, 11661, 8122, 5818, 0, 0, 3861, 9540, 11028, 2554, 5158, 5714, + 127015, 0, 0, 807, 43079, 0, 78475, 976, 5511, 64553, 0, 42155, 0, 41356, + 74110, 118801, 0, 0, 8676, 0, 0, 11066, 451, 63941, 5798, 9349, 42018, 0, + 0, 0, 43609, 194703, 120553, 1440, 0, 194701, 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, 10377, 41656, 0, 0, 0, 5187, 0, 127277, 11286, 68620, 64217, 0, + 5232, 0, 41009, 0, 41005, 0, 0, 0, 8292, 195074, 4980, 8860, 73947, + 10028, 66478, 7076, 13182, 194705, 0, 0, 10631, 66031, 7972, 0, 78785, 0, + 7900, 0, 11309, 78319, 4198, 42725, 0, 67656, 78819, 0, 0, 0, 12931, 0, + 42684, 74285, 2088, 0, 64366, 65156, 8814, 42238, 74771, 0, 0, 12836, 0, + 0, 74342, 8593, 0, 0, 68445, 13255, 0, 0, 7464, 0, 65865, 0, 194650, 0, + 0, 9342, 120464, 0, 64516, 0, 78792, 10129, 41007, 74375, 0, 40995, + 12209, 41012, 119136, 0, 0, 120633, 40992, 0, 0, 68653, 43558, 5522, 0, + 61, 0, 74105, 3633, 0, 65162, 41234, 12089, 78281, 9771, 0, 13251, 0, 0, + 6262, 2784, 42743, 0, 8126, 66483, 0, 0, 441, 42621, 0, 0, 41002, 40999, + 119623, 43266, 0, 0, 10890, 74481, 65834, 8324, 119103, 64417, 74817, 0, + 64737, 0, 0, 8930, 66678, 74249, 1193, 10056, 1800, 13253, 13252, 7829, + 0, 0, 7743, 0, 0, 77904, 0, 77905, 9034, 6039, 0, 10075, 0, 41018, 65683, + 10338, 66469, 0, 0, 0, 42815, 0, 41966, 0, 0, 0, 11792, 43064, 41025, + 911, 7539, 0, 0, 120339, 65159, 64390, 0, 0, 5520, 11662, 0, 65330, + 42812, 0, 0, 12326, 0, 0, 42808, 0, 9348, 64901, 0, 0, 0, 0, 0, 0, + 917584, 43702, 0, 5857, 65342, 0, 119120, 120079, 8644, 0, 0, 0, 74296, + 41909, 0, 120332, 2791, 0, 1891, 69824, 0, 41907, 66647, 0, 8761, 12942, + 5748, 0, 10773, 0, 0, 8796, 78149, 6412, 2061, 8520, 13146, 0, 63931, 0, + 65902, 2882, 0, 0, 12843, 4520, 120345, 0, 0, 0, 0, 73860, 0, 0, 64345, + 0, 0, 0, 194940, 0, 0, 43679, 917585, 65117, 194939, 0, 10427, 0, 3844, + 0, 9755, 1110, 6612, 12222, 0, 194934, 0, 0, 783, 194935, 0, 0, 0, + 194720, 65056, 3620, 0, 68378, 4556, 0, 0, 194933, 74250, 0, 67657, + 10510, 4382, 66482, 0, 0, 0, 9177, 8902, 0, 9839, 0, 12891, 0, 0, 63999, + 2016, 41917, 9788, 63928, 0, 1862, 65800, 9155, 66623, 9786, 65082, + 41919, 8579, 41914, 7981, 0, 0, 4508, 64883, 0, 0, 0, 0, 64592, 74276, + 120080, 6784, 78788, 68181, 0, 0, 0, 127534, 12147, 9024, 66378, 66472, + 0, 64289, 65289, 78151, 66658, 194929, 64509, 78152, 0, 0, 11051, 0, 0, + 11355, 65885, 0, 0, 41214, 0, 12299, 0, 7500, 4506, 7773, 0, 0, 9963, + 68649, 0, 4040, 0, 6167, 0, 63922, 6594, 0, 0, 0, 3624, 43036, 0, 6387, + 63990, 19947, 63988, 41955, 0, 63993, 10440, 9611, 0, 6803, 0, 7738, + 63986, 11446, 63984, 120331, 3435, 78164, 0, 119108, 7029, 64258, 41292, + 118898, 12748, 42742, 9517, 11518, 0, 78790, 0, 194777, 63956, 42458, + 63954, 63953, 63960, 9591, 4516, 10217, 68370, 11469, 0, 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, 0, 415, 63964, 63963, 42345, 0, 5183, 1877, 42498, 0, 2927, + 0, 63961, 4472, 0, 0, 78159, 0, 917936, 42340, 4756, 0, 7081, 10730, + 7691, 10331, 63830, 119625, 194945, 42103, 8628, 9813, 0, 42453, 1604, + 9565, 10539, 0, 65764, 41415, 65767, 0, 8457, 42301, 11372, 64873, 11992, + 0, 0, 63980, 11801, 3622, 0, 64336, 12017, 10463, 63981, 4967, 64189, + 1966, 43628, 0, 0, 0, 0, 63971, 4347, 4416, 42098, 11009, 10694, 63973, + 402, 0, 13147, 0, 42100, 64646, 13228, 0, 41875, 3515, 74252, 11805, 0, + 11302, 6259, 43395, 0, 0, 194670, 0, 0, 0, 74425, 11299, 1561, 0, 0, + 64942, 0, 194733, 0, 194732, 0, 74301, 0, 11280, 0, 69784, 74060, 0, 0, + 119664, 5145, 12486, 65018, 66516, 5409, 0, 194669, 7402, 5399, 9685, + 74089, 7952, 5401, 0, 66616, 68421, 0, 0, 5405, 917555, 64866, 0, 0, 0, + 78784, 74248, 11330, 194723, 64690, 3254, 0, 0, 0, 42390, 43678, 194725, + 0, 65077, 0, 6388, 3355, 9508, 9867, 5723, 11520, 5611, 0, 3377, 0, 0, 0, + 0, 78228, 0, 0, 42691, 917886, 0, 74767, 0, 0, 1379, 246, 0, 0, 3788, 0, + 11041, 0, 66304, 0, 0, 8917, 42403, 301, 0, 0, 0, 0, 0, 0, 10656, 0, + 65214, 119242, 42567, 0, 13163, 0, 120831, 74597, 3182, 0, 0, 0, 65034, + 65889, 42169, 4755, 74244, 0, 11443, 0, 66319, 74598, 608, 600, 0, 1219, + 3934, 64206, 11483, 74510, 0, 74485, 42442, 65470, 0, 64202, 13160, 7759, + 42482, 485, 0, 0, 9828, 0, 0, 42280, 0, 9351, 7778, 64379, 7496, 42431, + 6916, 1208, 0, 119631, 11002, 42470, 0, 118946, 0, 0, 74041, 0, 0, 43539, + 5411, 42196, 0, 0, 0, 9150, 0, 42393, 13086, 1310, 194687, 9337, 12052, + 10643, 55271, 0, 194684, 2546, 194683, 213, 118852, 65611, 0, 0, 194756, + 74310, 6554, 0, 11914, 0, 0, 0, 0, 0, 0, 194681, 118826, 2713, 0, 9650, + 43330, 0, 194675, 1406, 0, 0, 0, 0, 68223, 4143, 194677, 0, 65748, 4141, + 9682, 65287, 1508, 194963, 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, 0, 12955, 10596, 2888, 0, 0, 0, 9657, + 9019, 194766, 0, 2878, 5390, 0, 194961, 0, 68679, 0, 7501, 6328, 0, + 10429, 10365, 0, 0, 41946, 7503, 5235, 803, 68381, 0, 0, 8986, 0, 10632, + 11934, 11452, 1332, 0, 0, 0, 0, 118887, 1791, 5191, 9288, 64822, 2892, 0, + 43394, 555, 0, 0, 66646, 0, 119002, 13151, 74512, 7289, 74055, 0, 8854, + 64162, 5858, 41927, 10582, 0, 1784, 1361, 195047, 0, 7905, 0, 64868, 0, + 13158, 0, 7211, 0, 9371, 73973, 0, 6828, 1625, 0, 0, 1342, 68440, 64171, + 0, 10903, 0, 0, 0, 0, 0, 4482, 41606, 0, 0, 0, 0, 64381, 0, 0, 0, 42245, + 0, 41972, 0, 444, 0, 9127, 66687, 66619, 0, 78025, 0, 11349, 40991, 0, 0, + 119599, 120830, 0, 1197, 0, 1149, 194970, 0, 0, 40990, 0, 0, 3492, 0, 0, + 0, 0, 0, 12838, 0, 19948, 0, 3099, 0, 0, 41087, 0, 0, 0, 119059, 12036, + 0, 0, 0, 8152, 0, 64428, 12227, 0, 0, 12828, 127511, 0, 0, 120708, 0, 0, + 10386, 119574, 0, 0, 0, 0, 68154, 0, 1743, 0, 0, 0, 65186, 0, 0, 9606, 0, + 0, 0, 0, 0, 0, 0, 0, 194967, 0, 0, 3395, 9362, 10878, 0, 0, 78362, 64830, + 0, 0, 41091, 3426, 1344, 8870, 0, 0, 4735, 0, 6119, 12822, 42699, 0, 0, + 74818, 0, 0, 42637, 41080, 0, 12039, 10559, 0, 118892, 0, 9472, 0, 11929, + 0, 7170, 9596, 6130, 0, 43629, 11579, 194741, 0, 194740, 0, 0, 66699, 0, + 1004, 0, 194737, 43234, 66008, 12627, 0, 68414, 0, 43619, 43382, 11300, + 43304, 9686, 5890, 11776, 7558, 0, 65627, 0, 10718, 13154, 3461, 9139, 0, + 0, 0, 0, 65365, 73877, 65628, 78019, 0, 0, 41708, 12860, 41703, 12069, + 10838, 5403, 10352, 73917, 10061, 43237, 0, 5140, 209, 0, 41704, 41056, + 43078, 0, 0, 0, 10899, 65469, 0, 0, 0, 2410, 993, 0, 120589, 120689, + 78693, 0, 0, 7232, 0, 119253, 0, 0, 74462, 2066, 10489, 42166, 43463, + 10659, 3600, 0, 4224, 1336, 41518, 0, 0, 0, 0, 41139, 64820, 0, 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, 0, 0, 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, 0, 11690, 5835, 0, 66625, + 10842, 41354, 42123, 43097, 11688, 66634, 1094, 194, 64692, 0, 8180, 0, + 0, 9972, 73865, 4519, 6114, 10898, 43072, 0, 0, 0, 0, 0, 10695, 0, 7540, + 0, 881, 7857, 6067, 65164, 0, 0, 0, 13311, 68403, 41857, 64321, 8359, 0, + 12689, 0, 194594, 0, 0, 0, 68183, 0, 0, 1287, 5436, 0, 0, 74142, 127013, + 74152, 119078, 6051, 10497, 0, 8985, 12109, 0, 0, 0, 0, 0, 3652, 10537, + 0, 1276, 120440, 6549, 279, 73745, 0, 0, 0, 1489, 0, 0, 0, 3899, 1007, + 42124, 0, 42122, 0, 0, 0, 11985, 1345, 78600, 0, 0, 8956, 43083, 119830, + 42138, 78610, 0, 12151, 78608, 78604, 78605, 6285, 78603, 78612, 78613, + 74194, 492, 8685, 0, 0, 0, 78622, 43712, 2582, 11470, 64538, 7444, 78615, + 78616, 41550, 0, 73837, 119823, 2527, 119824, 197, 2799, 0, 41944, + 120276, 9933, 0, 66515, 767, 5524, 7028, 0, 0, 119827, 119817, 119828, + 78633, 10896, 0, 1799, 120497, 6971, 74336, 0, 0, 65340, 118979, 41551, + 2434, 0, 0, 120579, 0, 4631, 0, 0, 6407, 0, 6338, 43214, 0, 7570, 0, + 3192, 0, 8414, 0, 0, 0, 0, 0, 9164, 66612, 0, 3171, 6623, 4961, 68396, + 886, 55216, 8654, 78832, 9993, 74390, 64603, 0, 69241, 9599, 78629, + 43084, 78627, 78628, 78625, 2399, 0, 8994, 10944, 41208, 0, 41168, 8178, + 0, 3367, 195008, 42510, 78641, 78636, 6804, 78634, 1947, 0, 0, 0, 42759, + 11068, 1705, 9331, 0, 74798, 9181, 65359, 0, 8017, 0, 65096, 66720, 0, + 43475, 0, 4909, 12126, 0, 120696, 4904, 0, 195012, 1365, 9253, 42757, + 43436, 7462, 0, 0, 0, 0, 119587, 64415, 0, 0, 5398, 0, 195014, 0, 0, 0, + 119015, 0, 0, 9476, 0, 0, 12763, 0, 3629, 0, 13005, 0, 3628, 0, 0, 0, + 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, 119814, 0, 12276, 0, 68372, 0, 0, 119244, 0, 0, 10467, 0, + 2443, 10918, 78217, 119825, 1001, 9241, 1927, 0, 0, 73987, 0, 0, 0, + 118828, 127504, 65678, 12867, 0, 8260, 77945, 7519, 11505, 12274, 8904, + 518, 65857, 0, 0, 13204, 4387, 857, 0, 65369, 0, 119583, 43125, 120592, + 0, 0, 0, 0, 5136, 1968, 0, 195023, 1337, 64967, 1629, 0, 796, 66506, 0, + 74123, 12877, 0, 42314, 43388, 0, 74403, 6120, 478, 65151, 68128, 0, + 43082, 6016, 0, 42284, 0, 4276, 1206, 3619, 41638, 0, 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, 127265, 4442, 10364, 0, 778, 41626, 42455, 7989, 74063, 3227, 0, + 127275, 73983, 2915, 11502, 41022, 41702, 10309, 127035, 78320, 0, 6975, + 0, 5415, 12176, 0, 0, 3462, 65215, 42629, 78691, 73784, 0, 0, 9759, 0, + 78324, 127254, 8114, 78698, 78697, 78696, 78695, 8710, 42495, 118956, 0, + 4051, 10460, 43364, 118917, 1356, 12161, 42713, 0, 127268, 1619, 9703, 43152, 42489, 42112, 0, 1875, 10808, 42109, 120284, 41860, 64862, 13305, - 64907, 5289, 13144, 0, 0, 5575, 9675, 0, 5940, 226, 2649, 74493, 0, 0, 0, - 3382, 42449, 6498, 1658, 11936, 0, 0, 11269, 0, 73759, 43100, 74449, - 65508, 0, 0, 0, 8935, 917985, 0, 0, 0, 616, 0, 65178, 4684, 0, 119653, 0, - 0, 0, 6048, 74460, 42110, 73965, 10870, 8557, 11054, 0, 0, 9681, 4475, 0, - 0, 0, 0, 120731, 6035, 0, 7651, 10296, 0, 0, 0, 0, 0, 118966, 74144, - 40997, 0, 10392, 10328, 40998, 0, 74488, 0, 9800, 8979, 0, 119131, 41000, - 0, 119239, 6487, 10977, 0, 10344, 0, 65299, 5394, 0, 0, 10220, 66505, - 41200, 0, 4425, 0, 0, 0, 43074, 73799, 0, 0, 0, 12173, 0, 0, 0, 65338, 0, - 0, 119582, 4474, 0, 43093, 0, 1587, 0, 0, 64475, 0, 1369, 0, 0, 0, 0, - 4560, 0, 0, 0, 0, 64948, 4430, 74347, 42601, 4514, 0, 0, 8194, 65462, - 10626, 10965, 0, 8893, 0, 12542, 0, 65341, 0, 65829, 7925, 0, 10475, 0, - 0, 1352, 11069, 7707, 0, 0, 65279, 127102, 127101, 127100, 65605, 6040, - 127097, 10440, 0, 9336, 0, 0, 8899, 7798, 64474, 64259, 0, 65188, 7820, - 43018, 0, 0, 7746, 1492, 0, 10884, 0, 0, 5127, 11285, 42501, 5495, 4273, - 43095, 41426, 10849, 5730, 2999, 0, 120720, 74304, 371, 64373, 6023, 169, - 5497, 11708, 0, 0, 0, 0, 8224, 0, 8938, 6043, 12738, 0, 0, 5321, 0, 0, 0, - 2589, 74332, 1689, 7802, 4683, 74318, 0, 120296, 66704, 0, 0, 0, 0, - 74513, 6049, 0, 4027, 834, 118962, 1803, 0, 1503, 0, 0, 0, 5731, 1381, - 2387, 0, 0, 8289, 64525, 65817, 2881, 65514, 0, 9601, 2879, 9668, 9766, - 0, 5729, 0, 74410, 6036, 64881, 4026, 9361, 127091, 2887, 0, 3526, 6298, - 0, 0, 0, 0, 0, 8572, 6021, 0, 0, 0, 43155, 0, 0, 3146, 10959, 0, 0, 0, - 10981, 166, 0, 8635, 0, 10623, 408, 0, 0, 13298, 0, 7426, 41641, 12717, - 0, 7607, 10639, 66713, 0, 0, 41643, 74134, 0, 8713, 41640, 0, 41645, - 66712, 6645, 646, 66726, 66711, 42129, 0, 0, 3472, 8697, 0, 0, 0, 0, 0, - 0, 5809, 1950, 119356, 0, 74572, 0, 42136, 0, 0, 0, 0, 3247, 119854, - 65017, 0, 0, 66668, 0, 0, 10983, 0, 0, 0, 41567, 0, 0, 0, 0, 0, 0, 0, - 8285, 0, 4509, 0, 66471, 12216, 0, 40988, 0, 0, 41727, 0, 0, 2396, 0, 0, - 0, 0, 64940, 0, 3886, 0, 42457, 0, 0, 996, 0, 917571, 4249, 0, 917594, - 11707, 8222, 0, 7939, 0, 917574, 917582, 917592, 917569, 8534, 0, 40983, - 0, 0, 0, 7201, 12561, 0, 42371, 12558, 0, 0, 10052, 40982, 0, 0, 1488, 0, - 0, 0, 917559, 0, 0, 1563, 0, 9619, 0, 0, 0, 0, 0, 5803, 7797, 6070, - 10006, 0, 2922, 6082, 0, 65009, 0, 12567, 0, 0, 0, 0, 0, 3607, 65863, - 10046, 9612, 42153, 8218, 9485, 0, 2032, 0, 0, 0, 0, 0, 0, 43085, 6057, - 508, 0, 0, 120265, 0, 0, 0, 0, 638, 6083, 119072, 0, 0, 2305, 0, 0, 0, - 6056, 6659, 0, 0, 6085, 0, 0, 3915, 41634, 0, 41639, 63912, 11941, 0, - 4028, 1787, 42180, 43096, 0, 3249, 1768, 0, 12328, 501, 127074, 10601, 0, - 583, 0, 41977, 0, 66004, 119350, 6505, 74010, 0, 13064, 0, 120810, 6500, - 5526, 65049, 0, 74531, 0, 0, 12745, 9678, 0, 120587, 9869, 0, 1771, 0, - 8936, 0, 0, 4208, 0, 119115, 0, 0, 0, 74101, 0, 11762, 0, 0, 0, 0, 66475, - 0, 5027, 0, 0, 0, 5069, 73862, 5028, 9897, 0, 73739, 5026, 0, 0, 0, 0, - 8931, 0, 1415, 8866, 41901, 74790, 0, 119361, 0, 43106, 5029, 119360, - 1580, 3598, 0, 41070, 0, 0, 3440, 119359, 1562, 0, 917827, 119358, 1716, - 0, 10600, 0, 620, 41001, 6028, 0, 42892, 0, 74822, 5024, 120829, 41003, - 0, 5025, 0, 0, 0, 119328, 0, 65557, 0, 0, 0, 11599, 0, 11602, 6243, - 11574, 11581, 11597, 11598, 6253, 6105, 11584, 74195, 11569, 65275, 8906, - 127096, 66491, 2636, 0, 10815, 11619, 0, 41540, 7815, 11616, 6979, 12080, - 7721, 11604, 7869, 1592, 0, 42152, 0, 41048, 0, 829, 0, 0, 19950, 0, 0, - 6616, 0, 118875, 10953, 391, 0, 0, 482, 42296, 11588, 0, 43606, 0, 0, - 66370, 0, 42335, 0, 0, 0, 7538, 5315, 0, 42491, 0, 42061, 0, 4576, 0, 0, - 120241, 4277, 0, 4039, 64472, 42338, 368, 42058, 3960, 11043, 11337, - 120247, 917820, 63989, 3958, 12132, 1849, 0, 9921, 42451, 917818, 41147, - 42064, 11959, 42404, 41160, 0, 3618, 0, 0, 43300, 5156, 0, 0, 929, 0, - 917822, 42437, 1555, 0, 8691, 66435, 0, 41662, 0, 0, 0, 0, 0, 4578, - 64513, 41664, 0, 42578, 0, 41661, 0, 43305, 9356, 0, 0, 0, 1286, 10166, - 0, 0, 64707, 0, 42476, 7730, 0, 0, 42483, 0, 0, 42324, 42291, 10020, - 43359, 0, 6641, 525, 41627, 0, 8763, 0, 41628, 533, 11931, 65225, 8321, - 42504, 42581, 0, 6915, 42310, 4377, 8559, 0, 120234, 0, 13193, 64350, - 11666, 8679, 41924, 1576, 7735, 0, 0, 73840, 0, 11374, 0, 10889, 917909, - 7757, 42462, 120226, 126994, 66493, 2718, 4168, 73842, 13308, 120112, 0, - 1179, 4440, 0, 0, 363, 11015, 0, 0, 64296, 127090, 66692, 120826, 0, - 66492, 6593, 64625, 41963, 0, 119329, 0, 10013, 0, 0, 127095, 9492, - 11782, 64382, 12833, 0, 0, 1297, 41630, 630, 127094, 0, 0, 0, 1043, 0, 0, - 10090, 0, 0, 313, 917563, 41881, 0, 42311, 7445, 0, 5750, 10759, 9419, 0, - 9405, 11268, 0, 9398, 8526, 9399, 9422, 0, 66495, 0, 0, 0, 41718, 10707, - 1603, 0, 0, 0, 631, 0, 0, 13161, 65272, 0, 10546, 74210, 0, 11600, 0, - 2797, 73821, 42427, 306, 714, 3058, 42381, 120036, 127080, 12351, 42395, - 0, 11607, 0, 42282, 0, 0, 9157, 73765, 66364, 42433, 0, 7603, 12803, 180, - 42141, 0, 120612, 66494, 12674, 8244, 362, 0, 0, 8037, 917804, 11535, 0, - 74845, 5185, 66696, 5521, 10334, 5519, 0, 10302, 0, 10104, 1027, 5181, 0, - 0, 10523, 1446, 42320, 41646, 991, 5189, 42472, 41647, 120105, 1722, - 5581, 0, 3405, 0, 194644, 5523, 0, 42620, 0, 0, 9549, 0, 10549, 0, 9661, - 66486, 0, 120537, 120026, 0, 0, 0, 0, 41991, 0, 0, 7630, 9846, 7684, - 10350, 0, 1174, 0, 0, 0, 0, 66485, 0, 42277, 0, 42456, 65667, 0, 12330, - 0, 0, 42417, 42383, 0, 41344, 6293, 0, 66252, 0, 74443, 0, 10209, 8313, - 4195, 0, 9010, 66690, 0, 0, 64894, 0, 65871, 0, 1736, 0, 3901, 12228, - 120151, 65200, 3383, 10446, 0, 693, 9130, 314, 64149, 42420, 11949, 0, 0, - 11026, 0, 5332, 6940, 64154, 12635, 127007, 120628, 1751, 273, 8165, - 13166, 120763, 0, 0, 12824, 0, 4528, 5320, 6301, 0, 6133, 9339, 9463, - 42346, 10922, 64560, 3757, 0, 0, 0, 65869, 73760, 2569, 0, 2326, 65740, - 2565, 42459, 7596, 7921, 0, 74095, 0, 41848, 2567, 66006, 0, 4044, 0, 0, - 12233, 0, 1023, 474, 0, 119818, 0, 0, 42487, 65556, 0, 0, 42295, 0, 0, 0, - 0, 9835, 66499, 0, 0, 12275, 10895, 0, 274, 0, 1858, 0, 0, 0, 10118, - 3133, 0, 73795, 0, 9610, 8068, 8197, 0, 699, 0, 41665, 5868, 0, 0, 42182, - 7581, 19940, 0, 41667, 0, 0, 1923, 65583, 65802, 0, 64597, 0, 119184, 0, - 0, 6464, 7036, 2996, 1937, 0, 0, 41835, 4047, 41842, 0, 65217, 0, 0, - 11017, 0, 0, 293, 0, 0, 64791, 41827, 42466, 65416, 10579, 8560, 0, - 65413, 118835, 4803, 12964, 1739, 1941, 3900, 0, 1713, 0, 0, 73957, + 64907, 5289, 13144, 0, 0, 5575, 9675, 0, 5940, 226, 2649, 6336, 0, 0, + 43236, 3382, 42449, 6498, 1658, 11936, 78232, 0, 11269, 10151, 73759, + 43100, 74449, 65508, 0, 0, 0, 8935, 917985, 0, 0, 0, 616, 74753, 65178, + 4684, 78701, 119653, 0, 0, 0, 6048, 74460, 42110, 73965, 10870, 8557, + 11054, 68664, 119049, 9681, 4475, 0, 41142, 2100, 0, 120731, 6035, 0, + 7651, 10296, 0, 0, 0, 917987, 0, 118966, 74144, 40997, 0, 10392, 10328, + 40998, 43462, 74488, 0, 9800, 8979, 0, 119131, 41000, 0, 119239, 6487, + 10977, 0, 10344, 0, 65299, 5394, 43246, 78243, 10220, 66505, 41200, 0, + 4425, 0, 0, 0, 43074, 73799, 0, 78147, 0, 12173, 78545, 0, 0, 65338, 0, + 0, 119582, 4474, 0, 43093, 0, 1587, 0, 127372, 64475, 0, 1369, 0, 78251, + 7927, 0, 4560, 0, 0, 0, 0, 64948, 4430, 74347, 42601, 4514, 66434, 0, + 8194, 65462, 10626, 10965, 0, 8893, 0, 12542, 0, 65341, 0, 65829, 7925, + 119822, 10475, 0, 0, 1352, 11069, 7707, 127560, 0, 65279, 127102, 68207, + 127100, 65605, 6040, 127097, 10071, 0, 9336, 0, 0, 8899, 7798, 64474, + 64259, 0, 65188, 7820, 43018, 0, 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, 0, 8224, 0, + 8938, 6043, 12738, 0, 0, 5321, 0, 0, 0, 2589, 74332, 1689, 7802, 4683, + 74318, 42704, 120296, 11905, 0, 0, 0, 0, 74513, 6049, 0, 4027, 834, + 118962, 1803, 0, 1503, 0, 0, 0, 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, 0, 78519, + 0, 8572, 6021, 77896, 0, 77895, 43155, 0, 0, 3146, 10959, 9483, 0, 77893, + 10981, 166, 917841, 8635, 0, 10623, 408, 119058, 127507, 13298, 0, 7426, + 41641, 12717, 0, 7607, 10639, 66713, 0, 0, 41643, 74134, 0, 8713, 41640, + 10221, 41645, 66712, 6645, 646, 66726, 66711, 42129, 0, 77901, 3472, + 8697, 0, 0, 0, 0, 0, 0, 5809, 1950, 119356, 0, 74572, 0, 42136, 0, 0, 0, + 0, 3247, 119854, 65017, 0, 68428, 66668, 0, 0, 10983, 0, 0, 0, 41567, 0, + 0, 0, 194624, 0, 0, 0, 8285, 0, 4509, 0, 66471, 12216, 0, 40988, 0, 0, + 41727, 0, 0, 2396, 0, 0, 74018, 917538, 64940, 0, 3886, 0, 42457, 119008, + 0, 996, 68123, 917571, 4249, 0, 917594, 11707, 8222, 0, 7939, 0, 917574, + 917582, 917592, 917569, 8534, 0, 40983, 0, 0, 0, 7201, 12561, 0, 42371, + 12558, 0, 0, 10052, 40982, 0, 0, 1488, 0, 0, 0, 917559, 0, 0, 1563, 0, + 9619, 0, 0, 0, 0, 0, 5803, 7797, 6070, 10006, 0, 2922, 6082, 0, 65009, 0, + 12567, 0, 0, 41412, 0, 0, 3607, 65863, 10046, 9612, 42153, 8218, 9485, 0, + 2032, 78354, 0, 0, 0, 0, 0, 43085, 6057, 508, 0, 0, 120265, 0, 0, 0, 0, + 638, 6083, 119072, 0, 0, 2305, 78348, 0, 0, 6056, 6659, 0, 0, 6085, 0, 0, + 3915, 41634, 0, 41639, 63912, 11941, 0, 4028, 1787, 42180, 43096, 0, + 3249, 1768, 0, 12328, 501, 127074, 10601, 0, 583, 0, 41977, 0, 66004, + 119350, 6505, 74010, 0, 13064, 55267, 120810, 6500, 5526, 65049, 0, + 73764, 0, 0, 12745, 9678, 0, 120587, 9869, 0, 1771, 0, 8936, 0, 0, 4208, + 78341, 119115, 78342, 0, 0, 74101, 0, 11762, 0, 0, 77997, 0, 66475, 0, + 5027, 0, 0, 0, 5069, 73862, 5028, 9897, 0, 73739, 5026, 0, 68639, 6331, + 0, 8931, 0, 1415, 8866, 41901, 74790, 78138, 119361, 0, 43106, 5029, + 65309, 1580, 3598, 68424, 41070, 77903, 0, 3440, 78215, 1562, 0, 127236, + 119358, 1716, 0, 10600, 0, 620, 41001, 6028, 0, 42892, 0, 74822, 5024, + 120829, 41003, 0, 5025, 0, 0, 0, 119328, 0, 65557, 0, 74541, 0, 11599, 0, + 11602, 6243, 11574, 11581, 11597, 11598, 6253, 6105, 11584, 74195, 11569, + 65275, 8906, 127096, 5755, 2636, 0, 10815, 11619, 78717, 41540, 7815, + 11616, 6979, 12080, 7721, 11604, 7869, 1592, 0, 42152, 78498, 41048, 0, + 829, 0, 0, 19950, 0, 0, 6616, 0, 118875, 10953, 391, 0, 69785, 482, + 42296, 11588, 0, 43606, 0, 68397, 66370, 0, 42335, 0, 0, 0, 7538, 5315, + 0, 42491, 0, 42061, 0, 4576, 0, 68417, 120241, 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, 0, 0, 929, 6827, 42035, 42437, 1555, 0, 8691, + 66435, 0, 41662, 0, 0, 0, 0, 0, 4578, 64513, 41664, 0, 42578, 0, 41661, + 78715, 43305, 9356, 0, 0, 0, 1286, 10166, 0, 0, 64707, 0, 42476, 7730, 0, + 0, 42483, 0, 0, 42324, 42291, 10020, 43359, 0, 6641, 525, 41627, 0, 8763, + 0, 41628, 533, 11931, 65225, 8321, 42504, 42581, 0, 6915, 42310, 4377, + 8559, 0, 120234, 0, 13193, 64350, 11666, 8679, 41924, 1576, 7735, 0, 0, + 73840, 0, 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, + 0, 119329, 0, 10013, 0, 0, 127095, 9492, 11782, 64382, 12833, 118986, 0, + 1297, 41630, 630, 127094, 0, 120774, 120570, 1043, 43652, 66223, 10090, + 0, 0, 313, 917563, 41881, 0, 42311, 7445, 0, 5750, 10759, 9419, 55222, + 9405, 11268, 0, 9398, 8526, 9399, 9422, 0, 66495, 0, 0, 127239, 41718, + 10707, 1603, 0, 119003, 0, 631, 77952, 77953, 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, 0, 0, 8037, 917803, 11535, 0, 74845, 5185, 66696, 5521, + 10334, 2093, 77983, 10302, 0, 10104, 1027, 5181, 0, 0, 10523, 1446, + 42320, 41646, 991, 5189, 42472, 41647, 120105, 1722, 5581, 77979, 3405, + 0, 194644, 5523, 0, 42620, 0, 0, 9549, 0, 10549, 55282, 9661, 43682, 0, + 77910, 120026, 78708, 0, 77911, 0, 41991, 0, 0, 7630, 9846, 7684, 10350, + 0, 1174, 77981, 42733, 77978, 77980, 66485, 77977, 42277, 77974, 42456, + 65667, 0, 12330, 0, 0, 42417, 42383, 0, 41344, 6293, 0, 66252, 77984, + 74443, 0, 10209, 8313, 4195, 74435, 1316, 66690, 120032, 6332, 64894, 0, + 65871, 78060, 1736, 0, 3901, 12228, 120151, 65200, 3383, 10446, 78841, + 693, 9130, 314, 64149, 42420, 11949, 0, 120152, 11026, 0, 5332, 6940, + 64154, 12635, 127007, 42706, 1751, 273, 8165, 13166, 120763, 78840, 0, + 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, 0, 74095, 0, 41848, 2567, 66006, 0, 4044, 0, 0, 12233, 0, 1023, + 474, 0, 119818, 0, 0, 42487, 65556, 0, 0, 42295, 0, 0, 0, 0, 9835, 66499, + 0, 5417, 12275, 10895, 0, 274, 0, 1858, 0, 0, 55251, 10118, 3133, 0, + 73795, 0, 9610, 8068, 8197, 0, 699, 0, 41665, 5868, 0, 0, 42182, 7581, + 19940, 43668, 41667, 0, 0, 1923, 65583, 65802, 0, 64597, 43444, 119184, + 0, 0, 6464, 7036, 2996, 1937, 0, 0, 41835, 4047, 41842, 0, 64107, 0, 0, + 11017, 0, 0, 293, 77966, 0, 64791, 41827, 42466, 43422, 10579, 8560, 0, + 65413, 77963, 4803, 12964, 1739, 1941, 3900, 0, 1713, 77969, 0, 73957, 11407, 42441, 41971, 6297, 120098, 64105, 0, 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, 0, 6208, 0, - 5746, 73749, 0, 64416, 42422, 0, 0, 7082, 73775, 338, 5059, 194719, 0, - 42328, 10767, 0, 8115, 0, 0, 0, 8227, 0, 1218, 0, 0, 65848, 0, 0, 0, 0, - 126987, 4486, 0, 0, 0, 10925, 0, 0, 0, 0, 42309, 10257, 0, 10273, 0, - 10305, 42461, 0, 42349, 8832, 0, 64127, 10644, 0, 0, 42278, 74451, - 126988, 917857, 7794, 0, 42429, 11081, 42316, 119026, 3669, 3968, 42468, - 0, 0, 0, 65402, 119581, 0, 0, 64933, 0, 41960, 0, 0, 0, 0, 66678, 42391, - 1588, 65400, 8409, 0, 19967, 65398, 787, 0, 0, 0, 6115, 118940, 41654, - 42480, 0, 0, 41655, 65401, 0, 0, 0, 0, 644, 65500, 41657, 10778, 3659, - 9533, 184, 1553, 13107, 65484, 0, 10502, 74457, 0, 0, 41554, 0, 8220, 0, - 41557, 0, 0, 11070, 0, 5157, 4020, 73858, 41555, 9514, 64818, 65103, - 64641, 0, 119633, 7520, 0, 74377, 11029, 66651, 0, 0, 118930, 64527, 0, - 7877, 73803, 0, 0, 120096, 74602, 0, 0, 0, 42817, 0, 65212, 11715, 12190, - 12319, 0, 0, 0, 9502, 65427, 0, 65424, 0, 0, 9734, 65425, 0, 0, 0, 0, 0, - 10112, 10827, 0, 9866, 74527, 66675, 0, 8625, 64346, 11290, 10477, 0, - 8636, 0, 8315, 65444, 0, 0, 74595, 6152, 0, 0, 6629, 0, 120171, 0, 74589, - 0, 0, 0, 0, 0, 0, 11046, 11490, 43127, 4485, 0, 0, 64926, 0, 0, 0, 5869, - 12437, 0, 0, 7040, 3588, 0, 12825, 0, 0, 12725, 0, 0, 120167, 223, 0, 0, - 120166, 42444, 0, 64499, 65245, 0, 1171, 0, 120165, 0, 1805, 8772, 0, 0, - 65078, 65247, 0, 120111, 2338, 0, 118853, 0, 0, 0, 64800, 65236, 67644, - 68126, 1213, 0, 64075, 797, 64074, 8734, 4212, 0, 64387, 4115, 0, 5005, - 64070, 64073, 10679, 0, 0, 0, 64276, 426, 0, 0, 8251, 10136, 65436, 0, - 65088, 43302, 1224, 0, 65576, 0, 10701, 1764, 3101, 0, 65291, 120159, 0, - 11373, 74566, 0, 120103, 8663, 9312, 41644, 4539, 3787, 0, 9222, 0, 0, - 4259, 9092, 74567, 41961, 0, 12724, 66357, 42331, 64935, 0, 0, 1293, - 7947, 12003, 0, 74593, 120308, 2454, 74807, 3613, 0, 0, 0, 65888, 120307, - 10978, 10840, 0, 10668, 0, 43087, 12595, 120304, 0, 118806, 0, 1157, - 64903, 8638, 0, 0, 0, 0, 120319, 8235, 0, 4405, 10086, 0, 0, 0, 0, 65430, - 74013, 6079, 0, 10764, 0, 64291, 0, 998, 120312, 11062, 120313, 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, 0, 66373, 0, 0, 64908, 0, 6311, 0, 12004, 119192, 12049, - 43108, 0, 0, 41705, 0, 6598, 0, 6599, 0, 0, 42148, 118825, 66027, 0, - 6597, 9412, 8340, 11824, 64745, 0, 0, 0, 1988, 5407, 67865, 2430, 41678, - 0, 0, 2336, 0, 0, 0, 120442, 0, 1921, 10947, 19927, 0, 65406, 0, 19913, - 4284, 13217, 0, 0, 12841, 9229, 10956, 42285, 41674, 19964, 41679, 65084, - 3521, 0, 5774, 8325, 0, 65403, 0, 1854, 10794, 0, 0, 0, 0, 0, 5280, 0, - 4344, 12905, 65433, 6076, 64793, 41610, 768, 12074, 442, 0, 68162, 64081, - 12934, 41682, 65432, 41693, 0, 6071, 65434, 0, 4804, 6994, 0, 0, 0, - 41696, 467, 0, 0, 0, 0, 0, 8421, 0, 0, 64801, 502, 0, 65431, 0, 0, 12043, - 1303, 316, 0, 2029, 65191, 119246, 11533, 64365, 0, 0, 4860, 194645, 0, - 42488, 0, 9583, 0, 5546, 8019, 73856, 0, 0, 0, 5544, 2355, 12150, 65725, - 5543, 119245, 63751, 12137, 5548, 0, 0, 0, 0, 65726, 6077, 0, 65452, 0, - 11301, 0, 0, 0, 9874, 0, 0, 0, 3050, 65410, 0, 0, 0, 0, 42830, 0, 66716, - 0, 4691, 0, 9345, 621, 0, 0, 0, 65411, 0, 41182, 73881, 65408, 73899, 0, - 9474, 10545, 119118, 10887, 3786, 65409, 8894, 43179, 119611, 7923, 3716, + 74327, 7806, 0, 8914, 0, 0, 3183, 1435, 64876, 2969, 6046, 0, 6208, + 67849, 5746, 73749, 0, 64416, 42422, 0, 0, 7082, 73775, 338, 5059, + 194719, 0, 42328, 10767, 0, 8115, 0, 0, 0, 8227, 2073, 1218, 0, 0, 65848, + 0, 0, 0, 0, 126987, 4486, 0, 0, 0, 10925, 0, 0, 0, 0, 42309, 10257, 0, + 10273, 0, 10305, 42461, 0, 42349, 8832, 78051, 64127, 10644, 42662, + 78828, 42278, 74451, 126988, 917857, 7794, 0, 42429, 6377, 42316, 119026, + 3669, 3968, 42468, 0, 78544, 0, 65402, 119581, 0, 0, 64933, 0, 41960, + 6699, 0, 0, 0, 6823, 42391, 1588, 65400, 8409, 78223, 19967, 65398, 787, + 0, 917939, 0, 6115, 2078, 41654, 42480, 0, 0, 41655, 65401, 43975, 0, 0, + 0, 644, 65500, 41657, 10778, 3659, 9533, 184, 1553, 13107, 65484, 0, + 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, 0, 0, 118930, 64527, 0, 7877, 73803, 0, 0, + 120096, 74602, 9955, 0, 4055, 42817, 0, 65212, 11715, 12190, 12319, + 78630, 0, 78631, 9502, 65427, 0, 65424, 12607, 0, 9734, 65425, 0, 0, 0, + 78835, 0, 10112, 10827, 0, 9866, 74527, 66675, 0, 8625, 64346, 11290, + 10477, 0, 8636, 0, 8315, 65444, 0, 0, 74595, 6152, 0, 0, 6629, 0, 120171, + 0, 74589, 43993, 0, 69790, 0, 0, 43690, 11046, 11490, 42730, 4485, 0, 0, + 64926, 0, 0, 0, 5869, 12437, 42728, 0, 7040, 3588, 0, 12825, 0, 0, 12725, + 0, 0, 78642, 223, 0, 69806, 120166, 42444, 0, 64499, 65245, 0, 1171, 0, + 120165, 0, 1805, 8772, 0, 0, 9930, 65247, 78619, 120111, 2338, 0, 118853, + 0, 42676, 0, 64800, 65236, 67644, 68126, 1213, 0, 64075, 797, 64074, + 8734, 4212, 0, 64387, 4115, 0, 5005, 64070, 64073, 10679, 0, 77954, 0, + 64276, 426, 0, 0, 8251, 10136, 65436, 0, 65088, 43302, 1224, 0, 65576, + 120158, 10701, 1764, 3101, 0, 65291, 120159, 0, 11373, 6378, 0, 120103, + 8663, 9312, 41644, 4539, 3787, 0, 9222, 0, 0, 4259, 9092, 74567, 41961, + 0, 12724, 66357, 42331, 64935, 0, 0, 1293, 7947, 12003, 0, 74593, 120308, + 2454, 42717, 3613, 0, 0, 0, 65888, 8816, 10978, 10840, 0, 10668, 0, + 43087, 12595, 120304, 0, 118806, 0, 1157, 64903, 8638, 0, 0, 0, 0, + 120319, 8235, 120316, 4405, 10086, 120247, 0, 69216, 0, 65430, 74013, + 6079, 6817, 10764, 0, 64291, 0, 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, 0, + 66373, 0, 0, 64908, 0, 6311, 0, 12004, 119192, 12049, 43108, 0, 0, 41705, + 0, 6598, 0, 6599, 0, 0, 42148, 118825, 66027, 0, 6597, 9412, 8340, 11824, + 64745, 0, 0, 0, 1988, 5407, 67865, 2430, 41678, 0, 120243, 2336, 0, 0, + 78871, 120442, 0, 1921, 10947, 19927, 0, 65406, 0, 19913, 4284, 13217, 0, + 0, 12841, 9229, 10956, 42285, 41674, 19964, 41679, 65084, 3521, 0, 5774, + 8325, 0, 65403, 0, 1854, 10794, 0, 67660, 0, 0, 78359, 5280, 0, 4344, + 12905, 65433, 6076, 64793, 41610, 768, 12074, 442, 0, 68162, 64081, + 12934, 41682, 65432, 41693, 0, 6071, 65434, 0, 4804, 4053, 0, 0, 194653, + 41696, 467, 69823, 0, 69797, 0, 0, 8421, 0, 0, 43705, 502, 0, 65431, + 119056, 0, 12043, 1303, 316, 0, 2029, 65191, 119246, 11533, 64365, 43480, + 0, 4860, 194645, 0, 42488, 0, 9583, 0, 5546, 8019, 73856, 0, 0, 0, 5544, + 2355, 12150, 65725, 5543, 77989, 63751, 12137, 5548, 77985, 0, 65727, + 68388, 65726, 6077, 0, 65452, 0, 11301, 78013, 78008, 78010, 9874, 78007, + 0, 0, 3050, 65410, 0, 0, 78016, 78017, 42830, 43996, 66716, 0, 4691, 0, + 9345, 621, 0, 0, 0, 65411, 0, 41182, 73881, 65408, 73899, 78024, 9474, + 10545, 119118, 10887, 3786, 65409, 8894, 43179, 119611, 7923, 3716, 119341, 9996, 8508, 0, 7012, 8195, 0, 9566, 0, 3722, 0, 41707, 8493, 545, - 9575, 41379, 10050, 12718, 0, 8859, 41459, 0, 0, 120740, 0, 0, 9119, - 2787, 7920, 118823, 4021, 2012, 7985, 0, 119663, 0, 0, 0, 0, 410, 120449, - 1802, 120789, 74107, 0, 41659, 41671, 1827, 0, 64396, 10126, 12116, - 41673, 120370, 11422, 120372, 120373, 3860, 120367, 120368, 41345, - 120362, 120363, 11748, 42158, 7941, 11076, 8749, 120361, 12698, 64858, - 361, 120357, 845, 0, 41560, 11970, 4562, 917920, 2926, 0, 4569, 74130, 0, - 119221, 194630, 611, 74129, 64871, 0, 65629, 0, 0, 0, 0, 0, 120543, 0, 0, - 6291, 0, 0, 41669, 7094, 917921, 0, 0, 74054, 0, 0, 0, 839, 0, 7695, - 8769, 65246, 4829, 0, 4859, 64467, 0, 0, 118998, 7206, 0, 6647, 0, 0, 0, - 0, 64764, 4210, 0, 0, 804, 0, 0, 12298, 0, 0, 0, 64924, 10091, 73931, - 9468, 74245, 0, 0, 74246, 0, 12839, 64669, 0, 0, 1279, 1425, 6224, - 119229, 11049, 0, 917549, 0, 8482, 0, 0, 5032, 0, 11940, 67888, 664, 0, - 5034, 0, 0, 0, 0, 73888, 0, 13294, 67873, 64869, 6032, 0, 9115, 7430, - 120377, 0, 120819, 0, 120168, 73913, 120170, 41161, 5518, 4174, 10993, - 41162, 120160, 64528, 1169, 434, 41437, 1905, 6034, 41164, 64744, 9528, - 118867, 0, 524, 0, 74029, 788, 74027, 0, 0, 0, 1663, 10419, 74025, 42636, - 0, 0, 0, 120656, 0, 0, 0, 0, 0, 67897, 74039, 0, 0, 11395, 0, 119107, - 43612, 64344, 0, 0, 10855, 5445, 9355, 0, 65198, 0, 8989, 221, 65686, 0, - 0, 8010, 7191, 4962, 0, 8855, 0, 0, 64469, 0, 10555, 0, 0, 0, 0, 120427, - 10451, 0, 120152, 7245, 12443, 74405, 120148, 120149, 120150, 3873, 8367, - 0, 120146, 120147, 0, 66507, 0, 0, 11010, 12723, 74059, 74062, 6217, + 9575, 41379, 10050, 12718, 0, 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, 0, 4569, + 74130, 0, 43487, 194630, 611, 74129, 64871, 120379, 65629, 0, 0, 0, 0, 0, + 120543, 0, 0, 6291, 0, 78639, 41669, 7094, 917921, 0, 0, 74054, 0, + 195029, 0, 839, 0, 7695, 8769, 65246, 4829, 0, 4859, 64467, 0, 0, 118998, + 7206, 0, 6647, 43986, 0, 69766, 0, 64764, 4210, 0, 0, 804, 0, 0, 12298, + 0, 66653, 0, 64924, 10091, 73931, 9468, 74245, 0, 0, 74246, 0, 12839, + 64669, 0, 0, 1279, 1425, 6224, 119229, 11049, 0, 917549, 43239, 8482, 0, + 0, 5032, 77830, 11940, 67888, 664, 0, 5034, 0, 0, 127525, 42702, 73888, + 0, 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, 194668, 524, 0, + 74029, 788, 74027, 0, 0, 0, 1663, 10419, 74025, 42636, 0, 0, 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, 0, 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, 0, 74052, 0, 0, 120549, 119082, 64295, 120418, 0, 64765, 73923, 120417, 120662, 120730, 0, 6216, 0, 10755, 9455, 0, 8124, - 0, 9470, 6944, 0, 0, 0, 2828, 0, 531, 42638, 0, 0, 0, 73764, 8204, 3614, - 2827, 9696, 0, 0, 8728, 4354, 10904, 120502, 19936, 7833, 120691, 0, - 42599, 42597, 0, 120409, 0, 0, 8537, 0, 0, 0, 0, 0, 41199, 10121, 2028, - 0, 0, 0, 0, 3062, 0, 74447, 12608, 0, 66440, 7545, 9700, 12580, 0, - 120777, 0, 41155, 0, 74071, 0, 0, 12713, 0, 0, 0, 0, 0, 1734, 0, 0, 0, 0, - 2456, 231, 0, 74167, 542, 0, 118786, 0, 0, 1230, 0, 0, 3597, 9761, 10584, - 74235, 0, 4037, 0, 8352, 0, 5687, 0, 64515, 0, 0, 0, 67846, 0, 9704, 0, - 0, 74284, 0, 0, 8660, 0, 0, 0, 0, 74482, 4483, 1709, 0, 9909, 6080, 0, 0, - 1746, 1315, 8667, 0, 0, 13140, 65899, 10604, 0, 4480, 11266, 0, 1226, - 6930, 0, 0, 0, 10897, 41230, 605, 0, 74785, 120356, 0, 0, 41500, 0, 311, - 11453, 6221, 10608, 64943, 74280, 10877, 0, 64885, 74272, 0, 0, 0, 0, - 74312, 345, 0, 74456, 64606, 42589, 0, 0, 5037, 0, 1776, 8422, 0, 118814, - 41508, 41201, 323, 43328, 0, 120698, 1295, 0, 4625, 0, 4630, 13117, 0, 0, - 65123, 11293, 2668, 11288, 0, 42640, 65666, 2519, 0, 65420, 0, 0, 917886, - 5049, 0, 119011, 706, 7754, 10854, 8738, 0, 65419, 0, 0, 649, 65421, 0, + 127042, 9470, 6944, 0, 0, 0, 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, 0, 0, 0, 41199, + 10121, 2028, 0, 0, 0, 0, 3062, 0, 74447, 12608, 0, 66440, 7545, 9700, + 12580, 0, 120777, 120502, 41155, 0, 74071, 0, 0, 12713, 0, 0, 0, 78772, + 0, 1734, 0, 0, 0, 64594, 2456, 231, 0, 74167, 542, 0, 118786, 0, 0, 1230, + 0, 0, 3597, 4446, 10584, 74235, 0, 4037, 0, 8352, 0, 5687, 0, 64515, 0, + 0, 55265, 67846, 78434, 9704, 0, 0, 74284, 0, 0, 8660, 0, 0, 0, 78773, + 74482, 4483, 1709, 120617, 9909, 6080, 0, 0, 1746, 1315, 8667, 0, 0, + 13140, 65899, 10604, 0, 4480, 11266, 0, 1226, 6930, 0, 0, 6360, 10897, + 41230, 605, 0, 74785, 120356, 0, 0, 41500, 0, 311, 11453, 6221, 10608, + 64943, 74280, 10877, 118868, 64885, 74272, 0, 0, 0, 120736, 74312, 345, + 0, 74456, 64606, 9917, 0, 0, 5037, 0, 1776, 8422, 0, 118814, 41508, + 41201, 323, 43328, 0, 42698, 1295, 0, 4625, 0, 4630, 13117, 0, 0, 65123, + 11293, 2668, 11288, 0, 42640, 65666, 2519, 0, 65420, 0, 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, 0, 1183, 0, 7017, 42852, - 0, 8157, 9736, 64503, 65418, 0, 0, 74035, 0, 11913, 73874, 42848, 0, - 8920, 0, 0, 7962, 12211, 9837, 0, 66227, 0, 4184, 0, 0, 10177, 73777, - 1857, 0, 4626, 8464, 8472, 0, 4629, 8499, 0, 0, 4624, 7818, 194622, 0, 0, - 7805, 0, 0, 6935, 0, 0, 0, 0, 43327, 0, 119046, 8492, 8250, 8459, 0, - 8497, 8496, 0, 0, 0, 0, 9543, 0, 0, 0, 65849, 0, 0, 0, 0, 0, 8684, 0, - 6102, 0, 5298, 0, 5294, 0, 0, 0, 0, 0, 119826, 0, 119215, 0, 12073, 0, 0, - 0, 13108, 0, 74397, 41468, 0, 0, 5292, 0, 0, 1939, 5302, 3970, 0, 12455, - 1793, 0, 0, 0, 6643, 0, 65263, 0, 0, 41293, 0, 119125, 0, 13219, 9569, 0, - 74383, 0, 0, 0, 5500, 8813, 0, 0, 0, 5322, 0, 0, 0, 5324, 66443, 3784, - 41614, 65269, 6230, 0, 0, 43324, 3360, 0, 11523, 0, 0, 41732, 7197, 0, 0, - 0, 41821, 1249, 0, 0, 0, 118992, 0, 64899, 64763, 41149, 41807, 43162, - 41815, 41150, 0, 10571, 10096, 0, 0, 0, 6947, 41152, 887, 9249, 6565, 0, - 41990, 0, 41811, 74466, 0, 6670, 0, 0, 0, 43092, 43325, 0, 10168, 0, - 9781, 0, 9190, 0, 9666, 8269, 65944, 74005, 13019, 11670, 0, 315, 12813, - 0, 119648, 0, 0, 0, 0, 0, 0, 0, 1378, 9509, 0, 0, 74475, 3066, 0, 67847, - 0, 0, 0, 0, 8787, 0, 194616, 41618, 194615, 0, 194614, 0, 64652, 0, - 194612, 0, 0, 42088, 0, 0, 7176, 0, 10137, 6121, 10995, 0, 74534, 8119, - 64874, 0, 0, 0, 0, 74525, 0, 0, 12930, 1394, 74514, 0, 74515, 0, 118804, - 2998, 9527, 120659, 65190, 12977, 42090, 119165, 0, 119100, 41236, 0, - 65168, 42003, 41237, 5848, 0, 0, 3670, 0, 0, 0, 0, 7890, 0, 11298, 43315, - 0, 6229, 1593, 0, 0, 619, 4635, 65080, 0, 0, 4120, 65337, 65336, 0, - 11808, 119214, 74115, 9366, 42790, 42006, 0, 65327, 65326, 65325, 10757, - 1507, 65322, 65321, 65320, 65335, 65334, 65333, 65332, 65331, 42059, - 65329, 65328, 0, 9128, 118885, 42073, 41631, 64590, 0, 4371, 7196, 65318, - 2035, 65316, 4106, 65314, 65313, 42074, 0, 41228, 0, 119117, 41241, 7903, - 41239, 43533, 127099, 7189, 0, 0, 0, 12357, 42802, 0, 8487, 9131, 0, - 4615, 12695, 0, 0, 12175, 0, 64535, 0, 7809, 0, 0, 562, 12169, 6590, 0, - 66455, 64738, 3219, 0, 0, 0, 1037, 0, 2025, 0, 13098, 0, 10637, 4568, - 549, 1570, 0, 2835, 0, 10624, 194587, 11072, 0, 0, 0, 12606, 0, 2825, 0, - 10825, 8079, 2821, 41046, 0, 0, 0, 120593, 13071, 0, 452, 41049, 42840, - 43614, 2831, 0, 74596, 11465, 5212, 0, 64703, 119191, 42308, 7181, 0, - 41332, 0, 12333, 0, 1668, 0, 0, 0, 1187, 0, 42628, 0, 0, 0, 0, 3240, 0, - 12194, 0, 11591, 41065, 5323, 8166, 0, 0, 0, 74535, 1623, 65297, 0, 571, - 0, 4918, 0, 5288, 0, 8916, 65048, 1909, 8864, 0, 0, 10736, 0, 11571, - 7615, 0, 0, 4237, 0, 1035, 65815, 0, 7881, 701, 65936, 3489, 0, 0, 0, - 11403, 0, 0, 0, 3796, 0, 0, 3994, 11421, 0, 0, 0, 0, 0, 0, 64857, 0, - 2855, 0, 66308, 41621, 0, 0, 0, 10654, 0, 119226, 12164, 3246, 7906, 0, - 65847, 7182, 0, 13024, 194822, 119931, 0, 0, 0, 0, 1496, 747, 0, 942, - 2378, 43136, 0, 8466, 0, 9320, 8001, 1232, 8139, 11617, 0, 0, 11409, 0, - 0, 0, 66319, 0, 0, 11612, 0, 0, 2374, 0, 8475, 11609, 66313, 0, 0, 5286, - 119297, 0, 0, 64925, 0, 0, 0, 194583, 7705, 11942, 11305, 194581, 3309, - 0, 0, 0, 0, 11975, 0, 41653, 1280, 1241, 7168, 12096, 0, 0, 42565, 41651, - 0, 0, 0, 41650, 0, 66470, 0, 12914, 41491, 66010, 119552, 6078, 65100, 0, - 1475, 0, 0, 6084, 917546, 41064, 41062, 0, 0, 3256, 0, 42076, 0, 0, 0, - 8727, 0, 65875, 0, 0, 0, 10562, 74215, 67608, 0, 0, 3248, 74297, 3261, - 9015, 0, 0, 3635, 64337, 0, 0, 0, 7195, 0, 2007, 64431, 0, 0, 0, 0, 635, - 0, 0, 65613, 0, 0, 73997, 0, 0, 119218, 7984, 8600, 74434, 0, 4176, 0, - 2034, 0, 120805, 65891, 127038, 0, 318, 2038, 0, 0, 0, 3649, 13149, - 42145, 42798, 3634, 120291, 118927, 0, 120124, 7866, 0, 11402, 42146, - 120134, 74238, 120129, 2849, 127034, 0, 7938, 12960, 1761, 11812, 65379, - 74509, 0, 1159, 0, 0, 0, 0, 7178, 194632, 0, 41680, 0, 0, 11534, 1514, - 11668, 67891, 9313, 7015, 0, 67877, 0, 12989, 194560, 9368, 12848, 1624, - 43270, 0, 194563, 10818, 194562, 12649, 0, 0, 1194, 3242, 0, 9555, 8598, - 120299, 6169, 0, 1551, 2798, 65176, 120298, 42752, 119025, 0, 67875, - 120301, 3495, 66648, 0, 0, 0, 0, 4891, 0, 10641, 0, 73746, 0, 0, 0, - 73787, 0, 0, 7199, 64955, 0, 0, 0, 0, 0, 64952, 0, 193, 0, 0, 0, 0, 0, + 0, 8157, 9736, 64503, 65418, 0, 0, 74035, 0, 11913, 73874, 6696, 0, 8920, + 0, 0, 7962, 12211, 9837, 2051, 66227, 0, 4184, 0, 0, 10177, 73777, 1857, + 0, 4626, 8464, 8472, 0, 4629, 8499, 78321, 78322, 4624, 7818, 119173, 0, + 0, 7805, 0, 0, 6935, 0, 78325, 78326, 78323, 43327, 43989, 119046, 8492, + 8250, 8459, 0, 8497, 8496, 0, 0, 78336, 78339, 9543, 78335, 78332, 77832, + 65849, 77831, 0, 0, 12451, 0, 8684, 0, 6102, 0, 5298, 0, 5294, 0, 0, 0, + 195062, 9949, 119826, 43617, 119215, 0, 12073, 0, 0, 77863, 13108, 0, + 74397, 41468, 0, 0, 5292, 55272, 0, 1939, 5302, 3970, 0, 12455, 1793, 0, + 0, 0, 6643, 0, 65263, 0, 78330, 41293, 78328, 78329, 0, 13219, 9569, 0, + 74383, 0, 0, 0, 5500, 8813, 0, 0, 74566, 5322, 0, 78340, 43631, 5324, + 66443, 3784, 41614, 65269, 6230, 78349, 78345, 43324, 3360, 78344, 11523, + 0, 0, 9926, 7197, 0, 68429, 0, 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, 0, 6670, 77882, 0, 0, 43092, 43325, 0, 10168, 0, 9781, 194610, + 9190, 0, 9666, 8269, 65944, 74005, 13019, 11670, 0, 315, 12813, 0, 78432, + 78256, 78351, 78352, 0, 0, 0, 0, 1378, 9509, 0, 0, 74475, 3066, 0, 67847, + 0, 0, 0, 78365, 8787, 0, 194616, 41618, 194615, 78261, 194614, 0, 64652, + 0, 194612, 0, 78366, 42088, 0, 0, 7176, 0, 10137, 6121, 10995, 78259, + 74534, 8119, 64874, 917816, 0, 0, 0, 74525, 0, 0, 12930, 1394, 74514, 0, + 74515, 0, 118804, 2998, 9527, 120659, 65190, 12977, 42090, 119165, 0, + 119100, 41236, 0, 42005, 42003, 41237, 5848, 0, 0, 3670, 0, 194600, 0, 0, + 7890, 0, 11298, 43315, 0, 6229, 1593, 0, 0, 619, 4635, 65080, 0, 0, 4120, + 65337, 65336, 0, 11808, 119214, 74115, 9366, 42790, 42006, 0, 65327, + 65326, 65325, 10757, 1507, 42216, 65321, 65320, 65335, 65334, 65333, + 65332, 65331, 42059, 65329, 42689, 0, 9128, 118885, 42073, 6785, 64590, + 0, 4371, 7196, 65318, 2035, 65316, 4106, 65314, 65313, 42074, 0, 41228, + 0, 65609, 41241, 7903, 41239, 43533, 78459, 7189, 0, 0, 0, 12357, 42802, + 78450, 8487, 9131, 0, 4615, 12695, 0, 0, 12175, 0, 64535, 0, 7809, 0, 0, + 562, 12169, 6590, 69762, 66455, 64738, 3219, 68654, 0, 0, 1037, 0, 2025, + 0, 13098, 78442, 10637, 4568, 549, 1570, 0, 2835, 0, 10624, 43623, 11072, + 0, 0, 0, 12606, 78433, 2825, 0, 10825, 8079, 2821, 41046, 0, 0, 0, + 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, 0, 42628, 78575, 0, 0, 0, 3240, 0, 12194, 0, 11591, 41065, 5323, + 8166, 0, 0, 0, 74535, 1623, 65297, 0, 571, 0, 4918, 0, 5288, 127295, + 8916, 65048, 1909, 8864, 0, 0, 10736, 0, 11571, 7615, 0, 0, 4237, 0, + 1035, 65815, 0, 7881, 701, 65936, 3489, 0, 0, 120751, 11403, 0, 0, 0, + 3796, 6800, 0, 3994, 11421, 0, 0, 0, 0, 0, 0, 64857, 0, 2855, 0, 66308, + 41621, 68214, 0, 0, 10654, 0, 119226, 12164, 3246, 7906, 43972, 65847, + 7182, 0, 13024, 194822, 74270, 0, 0, 0, 0, 1496, 747, 0, 942, 2378, + 43136, 0, 8466, 0, 9320, 8001, 1232, 8139, 11617, 0, 0, 11409, 68373, + 6382, 0, 64634, 0, 0, 11612, 0, 67600, 2374, 0, 8475, 11609, 66313, 0, 0, + 5286, 119297, 0, 0, 64925, 0, 0, 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, 65100, 0, 1475, 0, 9938, 6084, 917546, 41064, 41062, + 0, 0, 3256, 0, 42076, 43252, 78823, 0, 8727, 0, 65875, 0, 0, 0, 10562, + 74215, 43065, 0, 0, 3248, 74297, 3261, 9015, 0, 0, 3635, 64337, 0, 0, 0, + 7195, 0, 2007, 64431, 0, 0, 0, 0, 635, 0, 0, 65613, 77909, 0, 73997, 0, + 0, 119218, 7984, 8600, 74434, 0, 4176, 0, 2034, 0, 120805, 65891, 127038, + 0, 318, 2038, 0, 78596, 0, 3649, 13149, 42145, 42798, 3634, 120291, + 118927, 67677, 120124, 7866, 0, 11402, 42146, 120134, 74238, 42664, 2849, + 127034, 0, 7938, 12960, 1761, 11812, 65379, 68386, 0, 1159, 0, 0, 0, 0, + 7178, 194632, 0, 41680, 0, 0, 11534, 1514, 11668, 67891, 9313, 7015, 0, + 67877, 0, 12989, 66474, 9368, 12848, 1624, 43270, 0, 194563, 10818, + 194562, 9953, 0, 78421, 1194, 3242, 9761, 9555, 8598, 120299, 6169, + 12871, 1551, 2798, 65176, 120298, 42752, 119025, 0, 67875, 120301, 3495, + 66648, 0, 0, 68364, 0, 4891, 0, 10641, 0, 73746, 0, 68352, 0, 73787, 0, + 194633, 7199, 64955, 0, 0, 0, 0, 0, 42685, 42679, 193, 0, 0, 0, 42667, 0, 5271, 0, 119661, 118882, 1362, 13297, 0, 0, 0, 0, 73789, 0, 6658, 4426, - 0, 0, 0, 119123, 7276, 42163, 5220, 0, 0, 0, 2416, 3310, 66030, 0, 379, - 0, 0, 0, 0, 3223, 65492, 1284, 0, 4549, 0, 0, 0, 0, 10807, 9558, 0, 0, - 8515, 8688, 12866, 0, 3294, 0, 0, 0, 0, 7564, 0, 43329, 0, 0, 73757, - 66456, 42359, 0, 2031, 0, 7202, 0, 12676, 66615, 0, 3215, 0, 7710, 1610, - 73801, 0, 0, 65682, 0, 0, 65924, 0, 228, 0, 1501, 0, 64395, 5179, 7200, - 6225, 0, 65794, 1725, 65533, 8196, 7476, 74399, 0, 0, 0, 8502, 5762, - 1967, 7483, 0, 0, 8104, 0, 7474, 0, 0, 0, 10414, 13001, 8141, 0, 42537, - 1557, 0, 0, 0, 0, 8631, 2545, 120672, 0, 0, 74190, 0, 0, 0, 42762, 0, 0, - 1650, 262, 1637, 0, 7901, 3238, 0, 41861, 0, 0, 65158, 10860, 0, 119134, - 7527, 0, 43319, 6419, 0, 45, 0, 0, 0, 0, 119810, 7194, 5291, 0, 0, 13129, - 0, 9084, 0, 8737, 0, 12881, 0, 12906, 9639, 7912, 2620, 0, 0, 0, 0, 179, - 65896, 0, 64756, 2853, 0, 118813, 0, 118996, 0, 2850, 8084, 0, 73850, - 2801, 119837, 42069, 119839, 74754, 119841, 42072, 119843, 119842, 74767, - 0, 0, 0, 0, 8245, 119313, 3158, 119853, 4389, 73813, 923, 119857, 119856, - 292, 13002, 119845, 119844, 3221, 1763, 119849, 4612, 119851, 119850, - 7253, 127110, 120618, 0, 10782, 3637, 12996, 43542, 0, 64578, 0, 3228, - 73869, 8783, 0, 119614, 2731, 0, 0, 118939, 4102, 7696, 73878, 0, 0, 0, - 43316, 4177, 11283, 9089, 0, 73996, 0, 64500, 68133, 0, 0, 1856, 0, 0, 0, - 0, 0, 0, 3208, 12975, 0, 0, 0, 0, 74072, 0, 0, 0, 0, 2033, 119008, 0, - 195026, 0, 7740, 0, 0, 0, 73964, 0, 0, 0, 65674, 0, 0, 41689, 0, 74006, - 64909, 6646, 11790, 74019, 0, 0, 0, 8561, 4573, 0, 5326, 0, 120605, 7230, - 8257, 0, 8778, 41688, 0, 65776, 0, 8314, 6459, 0, 7628, 65092, 73903, - 66721, 11342, 0, 0, 0, 0, 127001, 0, 11810, 13164, 10723, 967, 0, 0, - 11946, 0, 3257, 0, 12307, 1845, 0, 43526, 0, 0, 1886, 42342, 10089, 870, - 7648, 3499, 8609, 7652, 876, 871, 877, 0, 878, 42015, 879, 0, 4563, 0, 0, - 7591, 65887, 867, 9520, 872, 0, 868, 873, 7642, 0, 869, 874, 7644, 0, - 875, 790, 0, 0, 0, 0, 66182, 0, 5429, 0, 66180, 0, 66181, 0, 0, 0, 42067, - 0, 5433, 10657, 7911, 0, 1547, 66176, 42012, 0, 5425, 4977, 9999, 5317, - 5423, 4611, 0, 67637, 0, 9679, 74122, 0, 0, 0, 0, 4418, 66184, 4628, - 4245, 0, 0, 0, 1851, 0, 0, 11908, 0, 9360, 118897, 0, 42776, 66187, - 12837, 8829, 0, 0, 0, 0, 43318, 0, 8809, 119974, 0, 0, 120604, 0, 0, 0, - 0, 0, 0, 7427, 0, 4588, 0, 0, 74484, 0, 2433, 0, 119622, 3352, 74363, 0, - 0, 793, 74404, 0, 305, 567, 0, 842, 0, 8208, 0, 41695, 1647, 118877, 0, - 7837, 917625, 818, 5337, 917622, 917621, 41376, 119978, 917618, 120594, - 74086, 917615, 917614, 917613, 10973, 66359, 1372, 917609, 917608, 4969, - 1254, 917605, 917604, 917603, 917602, 65228, 0, 0, 0, 2840, 0, 119982, 0, - 0, 3245, 9068, 119069, 64725, 0, 0, 12991, 0, 2651, 0, 0, 917611, 0, 0, - 0, 0, 0, 0, 0, 43322, 0, 0, 0, 64372, 0, 3226, 655, 752, 7457, 7456, + 0, 0, 0, 119123, 7276, 42163, 5220, 0, 0, 0, 2416, 3310, 42703, 0, 379, + 0, 0, 0, 0, 3223, 65492, 1284, 194771, 4549, 0, 0, 0, 0, 10807, 9558, + 194613, 0, 8515, 8688, 12866, 0, 3294, 0, 8529, 0, 43385, 7564, 0, 43329, + 0, 0, 73757, 66456, 42359, 0, 2031, 0, 7202, 0, 12676, 42729, 0, 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, 0, 8502, 5762, 1967, 7483, 0, 0, 8104, 0, 7474, 0, 0, 0, 10414, 13001, + 8141, 0, 42537, 1557, 43594, 0, 6330, 6805, 8631, 2545, 120672, 0, 0, + 74190, 0, 0, 0, 42762, 0, 127017, 1650, 262, 1637, 0, 7901, 3238, 0, + 41861, 0, 0, 65158, 10860, 0, 43658, 7527, 0, 43319, 6419, 0, 45, 0, 0, + 0, 0, 119810, 7194, 5291, 0, 43666, 13129, 0, 9084, 0, 8737, 0, 12881, 0, + 12906, 9639, 7912, 2620, 0, 0, 0, 0, 179, 65896, 0, 64756, 2853, 0, + 118813, 0, 118996, 119009, 2850, 8084, 0, 73850, 2801, 119837, 42069, + 119839, 74754, 119841, 42072, 119843, 119842, 10398, 0, 0, 0, 0, 8245, + 68401, 3158, 119853, 4389, 43656, 923, 119857, 119856, 292, 13002, + 119845, 119844, 3221, 1763, 119849, 4612, 119851, 119850, 7253, 127110, + 68391, 0, 10782, 3637, 12996, 43542, 0, 64578, 0, 3228, 73869, 8783, 0, + 119614, 2731, 0, 0, 78585, 4102, 7696, 73878, 0, 0, 78586, 43316, 4177, + 11283, 9089, 0, 73996, 0, 64500, 43674, 0, 0, 1856, 0, 0, 6379, 0, 0, 0, + 3208, 12975, 0, 0, 0, 0, 74072, 55269, 0, 0, 0, 2033, 78577, 78576, + 195026, 55254, 7740, 0, 0, 0, 73964, 0, 0, 67612, 65674, 0, 0, 41689, 0, + 74006, 64909, 6646, 11790, 74019, 0, 0, 0, 8561, 4573, 0, 5326, 0, + 120605, 7230, 8257, 0, 8778, 41688, 0, 65776, 2071, 8314, 6459, 0, 7628, + 65092, 73903, 66721, 11342, 0, 0, 0, 0, 127001, 0, 11810, 13164, 10723, + 967, 0, 0, 11946, 0, 3257, 0, 12307, 1845, 0, 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, 0, 868, 873, 7642, 0, + 869, 874, 7644, 0, 875, 790, 0, 0, 0, 0, 66182, 0, 5429, 0, 66180, 0, + 66181, 68452, 0, 0, 42067, 0, 5433, 10657, 7911, 194622, 1547, 66176, + 42012, 120576, 5425, 4977, 9999, 5317, 5423, 4611, 0, 67637, 0, 9679, + 74122, 0, 0, 0, 0, 4418, 66184, 4628, 4245, 119648, 0, 0, 1851, 0, 0, + 11908, 0, 9360, 118897, 0, 42776, 66187, 12837, 8829, 7711, 0, 0, 119973, + 43318, 0, 8809, 119974, 0, 0, 120604, 0, 0, 0, 0, 0, 0, 7427, 0, 4588, + 43680, 0, 74484, 0, 2433, 0, 119622, 3352, 74363, 0, 0, 793, 74404, 0, + 305, 567, 67662, 842, 0, 8208, 0, 41695, 1647, 118877, 0, 7837, 917625, + 818, 5337, 917622, 917621, 41376, 119978, 917618, 120594, 74086, 917615, + 917614, 917613, 10973, 66359, 1372, 917609, 917608, 4969, 1254, 917605, + 917604, 917603, 917602, 65228, 78221, 0, 0, 2840, 0, 119982, 0, 0, 3245, + 9068, 68194, 64725, 0, 0, 12991, 0, 2651, 0, 0, 917611, 127026, 0, 0, 0, + 43648, 120812, 0, 43322, 0, 0, 0, 64372, 0, 3226, 655, 752, 7457, 7456, 7452, 3285, 0, 0, 119988, 65610, 0, 0, 0, 671, 250, 7434, 618, 668, 610, 42800, 7431, 1152, 42801, 640, 120666, 7448, 7439, 628, 3905, 73810, 0, - 0, 64749, 67850, 0, 0, 0, 0, 194873, 0, 0, 65945, 0, 0, 119590, 0, 0, 0, - 987, 6927, 11572, 42261, 11464, 3365, 0, 0, 0, 0, 0, 0, 0, 0, 11334, - 43326, 12609, 11519, 0, 5530, 5210, 0, 4627, 0, 5208, 0, 0, 10332, 5218, - 7976, 9156, 0, 3244, 5529, 0, 73894, 0, 5432, 64965, 5527, 74033, 10516, - 7790, 5528, 0, 42140, 120281, 0, 0, 43545, 120282, 0, 4000, 7429, 7428, - 665, 7424, 3206, 120279, 7884, 0, 0, 0, 0, 211, 2509, 0, 120573, 0, 3220, - 0, 0, 10690, 8951, 5214, 42474, 8118, 0, 7048, 4590, 0, 5852, 0, 0, 0, - 1708, 0, 0, 2623, 0, 0, 0, 0, 4698, 66509, 1066, 0, 4701, 0, 120285, - 74225, 119114, 8267, 0, 0, 0, 7516, 0, 2625, 0, 8034, 74309, 0, 3631, - 10955, 7850, 120293, 8416, 0, 0, 0, 0, 12660, 0, 0, 0, 74850, 41069, 0, - 0, 12099, 4310, 10032, 6252, 713, 7990, 0, 3990, 0, 0, 66368, 5017, - 64956, 7071, 0, 0, 1030, 118800, 0, 9513, 41059, 9357, 0, 1773, 0, - 120350, 0, 0, 7745, 9844, 0, 64650, 94, 1880, 74766, 0, 8908, 0, 0, - 65913, 0, 10752, 13003, 0, 0, 41307, 8732, 120338, 0, 1757, 6964, 4696, - 0, 0, 120806, 10029, 3641, 5419, 0, 0, 0, 0, 120344, 0, 0, 8610, 65230, - 7592, 856, 74299, 936, 13289, 0, 43171, 1459, 0, 65243, 0, 19953, 0, - 1504, 0, 0, 0, 74206, 7529, 0, 0, 0, 120782, 4113, 0, 2372, 336, 0, 7509, - 12152, 0, 682, 66458, 41505, 0, 64743, 10593, 1703, 0, 0, 8033, 0, 0, - 9810, 0, 0, 12970, 0, 42351, 10109, 0, 0, 0, 0, 119247, 0, 0, 74291, - 1965, 7069, 43312, 0, 73887, 0, 0, 64370, 6314, 41714, 8501, 0, 0, 74239, - 41317, 0, 5417, 0, 0, 0, 9353, 0, 41315, 917616, 0, 0, 6569, 0, 0, 0, - 119236, 634, 0, 0, 0, 917610, 4165, 8746, 0, 9654, 12856, 6924, 0, 7066, - 0, 0, 0, 41037, 0, 7786, 917607, 41039, 0, 0, 680, 6274, 0, 1181, 7056, - 3174, 0, 0, 0, 65665, 0, 0, 6920, 0, 0, 0, 0, 0, 64644, 126981, 0, 0, - 41028, 0, 6231, 2613, 65302, 40989, 0, 0, 0, 42760, 0, 0, 0, 40987, 4667, - 0, 0, 8828, 0, 0, 1246, 4746, 0, 0, 11021, 4749, 0, 0, 921, 4744, 0, - 12702, 242, 0, 1566, 8217, 0, 64653, 0, 0, 74036, 74505, 43274, 5313, - 951, 0, 0, 0, 7604, 0, 4009, 0, 0, 120562, 0, 0, 64860, 119138, 119902, - 0, 0, 4048, 0, 0, 120596, 1646, 0, 64534, 73995, 0, 0, 119890, 2579, - 119905, 3177, 11357, 9099, 4107, 3441, 119894, 2975, 74442, 9822, 0, 0, - 10084, 73943, 0, 0, 917562, 0, 3399, 9851, 0, 11909, 9059, 0, 7687, 0, - 8854, 0, 0, 0, 0, 0, 0, 1777, 9151, 1137, 0, 749, 42366, 0, 5385, 0, 0, - 0, 0, 5989, 0, 0, 0, 0, 41685, 0, 0, 9769, 41684, 0, 519, 0, 11740, 5766, - 0, 0, 2600, 8848, 120138, 41297, 0, 3666, 74473, 41300, 74468, 65160, 0, - 74542, 0, 74479, 0, 6558, 0, 0, 0, 120750, 252, 0, 41302, 0, 0, 0, 0, 0, - 11729, 8719, 9060, 0, 120139, 10761, 0, 0, 0, 118792, 11734, 0, 11730, 0, - 9593, 119188, 2403, 64808, 0, 0, 11728, 65894, 0, 0, 7764, 0, 0, 120825, - 0, 0, 4282, 8298, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8456, 0, 74783, 65670, 0, 0, - 0, 7774, 10607, 9792, 0, 0, 0, 0, 120764, 0, 10019, 74762, 0, 3458, 4365, - 0, 0, 3647, 0, 2602, 0, 0, 194707, 41135, 0, 0, 0, 64631, 172, 4971, - 41219, 41137, 1889, 7238, 6545, 0, 0, 7597, 10528, 0, 0, 3732, 73910, 0, - 5344, 0, 0, 0, 9062, 119252, 0, 0, 0, 64479, 9232, 0, 0, 0, 0, 10900, - 41531, 1263, 3720, 12048, 0, 64292, 41524, 7227, 119635, 6099, 41534, 0, - 0, 0, 299, 0, 8525, 0, 3524, 0, 8831, 0, 0, 3075, 0, 0, 0, 66362, 0, - 74758, 0, 0, 5845, 0, 0, 0, 2581, 8200, 65114, 74393, 0, 43283, 5551, 0, - 127085, 0, 0, 118855, 0, 0, 8680, 7204, 0, 2588, 2914, 7011, 0, 0, 2471, - 0, 2883, 2749, 119563, 73774, 10913, 0, 0, 8666, 675, 42493, 0, 0, 0, - 6219, 0, 0, 41232, 10928, 0, 41153, 41229, 118967, 0, 3738, 0, 0, 12711, - 3181, 66212, 74289, 0, 42857, 8262, 0, 0, 0, 0, 42347, 12092, 9615, 7234, - 74047, 0, 0, 64674, 0, 0, 73846, 0, 12722, 0, 922, 74426, 74507, 0, 0, - 3218, 120471, 74290, 120469, 64562, 120475, 8569, 11404, 11932, 73728, - 3214, 120461, 120468, 12128, 3207, 65486, 0, 1901, 0, 0, 120460, 7425, - 3205, 0, 0, 0, 0, 0, 0, 65459, 2606, 0, 73897, 0, 11496, 1173, 0, 41272, - 0, 0, 0, 0, 120737, 0, 0, 0, 378, 2610, 0, 65079, 0, 65695, 0, 37, 7068, - 0, 120480, 120479, 3209, 120477, 0, 10638, 9768, 120481, 0, 0, 0, 0, 0, - 0, 65510, 0, 0, 5233, 0, 64792, 0, 0, 0, 0, 7060, 9847, 0, 1685, 595, 0, - 73971, 1292, 8940, 0, 11088, 0, 10004, 126997, 0, 6541, 0, 0, 0, 3243, - 9014, 5606, 0, 538, 64620, 5602, 8467, 74391, 6547, 0, 8203, 0, 0, 8458, - 65211, 8495, 0, 0, 917552, 779, 0, 64367, 2465, 0, 8193, 0, 9730, 9280, - 0, 7065, 74155, 4346, 0, 73798, 504, 0, 120715, 8982, 0, 0, 0, 782, 0, - 10883, 0, 917876, 732, 3737, 0, 1548, 0, 0, 1832, 5604, 5735, 41141, 0, - 4376, 0, 41142, 3745, 0, 0, 42888, 65712, 0, 3869, 11937, 5725, 0, 1783, - 0, 5728, 0, 0, 0, 11918, 66567, 5724, 0, 5727, 0, 0, 0, 764, 0, 0, 43531, - 0, 9033, 0, 42532, 6223, 11042, 0, 11423, 0, 0, 0, 0, 0, 0, 6559, 64557, - 0, 0, 120648, 43019, 0, 10238, 0, 0, 0, 120675, 0, 1478, 9783, 0, 2607, + 0, 64749, 67850, 2107, 0, 0, 4605, 194873, 0, 43372, 65945, 0, 0, 119590, + 0, 0, 0, 987, 6927, 11572, 42261, 11464, 3365, 9971, 0, 0, 0, 0, 0, 0, 0, + 11334, 43326, 12609, 11519, 11503, 5530, 5210, 0, 4627, 0, 5208, 0, 0, + 10332, 5218, 7976, 9156, 0, 3244, 5529, 0, 73894, 0, 5432, 64965, 5527, + 74033, 10516, 7790, 5528, 0, 42140, 120281, 0, 0, 43545, 9887, 0, 4000, + 7429, 7428, 665, 7424, 3206, 120278, 7884, 0, 0, 0, 0, 211, 2509, 0, + 120573, 68672, 3220, 42235, 0, 10690, 8951, 5214, 42474, 8118, 0, 7048, + 4590, 127258, 5852, 0, 0, 127259, 1708, 0, 0, 2623, 11943, 0, 69226, 0, + 4698, 66509, 1066, 119921, 4701, 0, 120285, 74225, 119114, 8267, 0, 0, 0, + 7516, 0, 2625, 0, 8034, 74309, 0, 3631, 10955, 7850, 120293, 8416, 0, 0, + 0, 43384, 12660, 0, 0, 0, 74850, 41069, 0, 0, 12099, 4310, 10032, 6252, + 713, 7990, 0, 3990, 0, 0, 66368, 5017, 64956, 7071, 0, 119144, 1030, + 118800, 0, 9513, 41059, 9357, 0, 1773, 0, 120350, 0, 6339, 7745, 9844, 0, + 64650, 94, 1880, 74766, 0, 8908, 0, 0, 65913, 78470, 10752, 13003, 0, 0, + 41307, 8732, 120338, 0, 1757, 6964, 4696, 0, 0, 64785, 7394, 3641, 5419, + 0, 0, 0, 0, 120344, 43988, 0, 8610, 43062, 7592, 856, 74299, 936, 13289, + 127521, 43171, 1459, 0, 65243, 78638, 19953, 0, 1504, 0, 0, 12913, 74206, + 7529, 0, 0, 0, 120782, 4113, 0, 2372, 336, 0, 7509, 12152, 0, 682, 66458, + 41505, 0, 64743, 10593, 1703, 0, 0, 8033, 0, 0, 9810, 127269, 0, 12970, + 0, 42351, 10109, 0, 0, 194693, 0, 119247, 0, 0, 74291, 1965, 7069, 43312, + 0, 73887, 0, 2087, 64370, 6314, 41714, 8501, 0, 0, 74239, 41317, 0, 2091, + 0, 2090, 0, 9353, 77887, 2077, 77886, 0, 10498, 2083, 77888, 0, 0, + 119236, 634, 0, 0, 0, 69779, 4165, 8746, 0, 9654, 12856, 6924, 0, 7066, + 0, 0, 0, 41037, 42692, 7786, 12959, 41039, 0, 0, 680, 6274, 0, 1181, + 7056, 3174, 0, 0, 0, 65665, 0, 0, 6920, 0, 0, 0, 118965, 0, 64644, + 126981, 0, 0, 41028, 0, 6231, 2613, 65302, 40989, 0, 194696, 0, 42760, 0, + 0, 0, 40987, 4667, 0, 0, 8828, 0, 0, 1246, 4746, 0, 0, 11021, 4749, 0, 0, + 921, 4744, 0, 12702, 242, 0, 1566, 8217, 0, 64653, 78386, 0, 74036, + 74505, 43274, 5313, 951, 0, 0, 0, 7604, 0, 4009, 0, 0, 120562, 0, 0, + 64860, 119138, 119887, 0, 194702, 4048, 0, 0, 120596, 1646, 77890, 64534, + 73995, 0, 0, 119890, 2579, 119905, 3177, 11357, 9099, 4107, 3441, 119894, + 2975, 74442, 9822, 0, 55220, 10084, 73943, 118840, 0, 917562, 0, 3399, + 9851, 0, 11909, 9059, 0, 7687, 0, 6789, 0, 0, 0, 0, 0, 0, 1777, 9151, + 1137, 69767, 749, 42366, 0, 5385, 0, 0, 0, 0, 5989, 0, 0, 0, 0, 41685, + 69223, 0, 9769, 41684, 0, 519, 0, 11740, 5766, 0, 0, 2600, 8848, 120138, + 41297, 0, 3666, 74473, 41300, 74468, 65160, 0, 74542, 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, 0, 11730, 0, 9593, 5757, + 2403, 64808, 55275, 0, 11728, 65894, 0, 0, 7764, 0, 11094, 120825, 0, 0, + 4282, 8298, 0, 0, 0, 0, 0, 0, 0, 127509, 63854, 8456, 0, 74783, 65670, 0, + 78250, 0, 7774, 10607, 9792, 0, 0, 0, 0, 120764, 0, 10019, 74762, 0, + 3458, 4365, 0, 0, 3647, 0, 2602, 0, 0, 194707, 41135, 0, 0, 0, 64631, + 172, 4971, 41219, 41137, 1889, 7238, 6545, 0, 0, 7597, 10528, 0, 0, 3732, + 73910, 194588, 5344, 0, 43366, 43363, 9062, 119252, 0, 0, 0, 64479, 9232, + 0, 0, 0, 194712, 10900, 41531, 1263, 3720, 12048, 0, 64292, 41524, 7227, + 119635, 6099, 41534, 0, 0, 0, 299, 0, 8525, 0, 3524, 917565, 8831, 0, 0, + 3075, 67867, 0, 0, 66362, 0, 74758, 0, 0, 5845, 0, 0, 0, 2581, 8200, + 65114, 68460, 0, 43283, 5551, 0, 120735, 0, 6340, 118855, 0, 78134, 8680, + 7204, 0, 2588, 2914, 7011, 55281, 0, 2471, 0, 2883, 2749, 119563, 73774, + 10913, 0, 0, 8666, 675, 42493, 0, 43571, 0, 6219, 0, 9980, 41232, 10928, + 0, 41153, 41229, 118967, 0, 3738, 0, 0, 12711, 3181, 66212, 74289, 68472, + 42857, 8262, 0, 0, 0, 0, 42347, 12092, 9615, 7234, 74047, 0, 0, 64674, 0, + 0, 73846, 0, 12722, 0, 922, 43983, 74507, 0, 74461, 3218, 120471, 74290, + 120469, 64562, 120475, 8569, 11404, 11932, 73728, 3214, 120461, 120468, + 12128, 3207, 65486, 78729, 1901, 78727, 0, 120460, 7425, 3205, 0, 78737, + 78736, 78735, 43383, 78733, 65459, 2606, 78730, 73897, 0, 11496, 1173, 0, + 41272, 0, 0, 0, 0, 120737, 0, 0, 0, 378, 2610, 0, 65079, 0, 65695, 0, 37, + 7068, 0, 120480, 120479, 3209, 120477, 0, 10638, 9768, 120481, 0, 0, 0, + 0, 0, 0, 65510, 0, 0, 5233, 0, 64792, 0, 0, 0, 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, 0, + 8203, 78488, 0, 8458, 65211, 8495, 119904, 0, 917552, 779, 78314, 64367, + 2465, 0, 8193, 55279, 9730, 9280, 0, 7065, 74155, 4346, 0, 73798, 504, 0, + 120715, 8982, 0, 0, 0, 782, 0, 10883, 0, 194852, 732, 3737, 127253, 1548, + 68650, 0, 1832, 5604, 5735, 41141, 119020, 4376, 0, 11787, 3745, 0, 0, + 42888, 65712, 0, 3869, 11937, 5725, 0, 1783, 68648, 5728, 0, 0, 0, 11918, + 66567, 5724, 0, 5727, 0, 0, 0, 764, 0, 0, 43531, 0, 9033, 0, 42532, 6223, + 11042, 120749, 11423, 0, 0, 0, 43465, 0, 0, 6559, 64557, 0, 0, 120648, + 43019, 43477, 10238, 0, 0, 43377, 120675, 0, 1478, 9783, 11825, 2607, 64740, 0, 7739, 74543, 0, 0, 0, 6132, 0, 63765, 0, 0, 41144, 0, 0, 43537, - 0, 10093, 4369, 917791, 0, 0, 8820, 3947, 0, 0, 11515, 526, 0, 41295, - 194603, 917785, 0, 0, 7688, 917786, 7686, 8288, 11815, 0, 0, 0, 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, 7052, 0, 0, 12990, 1160, 42084, 119650, 41217, - 119660, 10018, 360, 0, 0, 68176, 5863, 3137, 0, 4147, 0, 41216, 7844, - 2616, 119190, 0, 65234, 0, 13076, 3135, 0, 0, 119139, 3142, 194948, 0, - 10819, 119580, 10183, 0, 2608, 1470, 73967, 0, 6227, 0, 0, 74775, 0, - 6163, 0, 0, 0, 0, 0, 8603, 0, 119866, 3306, 10876, 0, 119573, 0, 5834, 0, - 6222, 0, 0, 12086, 0, 1600, 64309, 64939, 0, 64783, 0, 11310, 0, 8882, 0, - 0, 2570, 7021, 0, 0, 43110, 0, 1234, 6540, 6974, 0, 0, 0, 5002, 0, 41286, - 0, 127019, 0, 43585, 0, 6551, 0, 0, 0, 41289, 0, 0, 0, 8977, 602, 120814, - 0, 0, 0, 0, 0, 41279, 0, 0, 0, 0, 43615, 0, 0, 0, 0, 12727, 0, 0, 0, - 9475, 0, 65105, 0, 9633, 10886, 43592, 7831, 0, 0, 0, 73915, 8076, 43048, - 8290, 8291, 43051, 0, 0, 2596, 43584, 0, 13113, 0, 0, 2393, 7058, 9087, - 74067, 0, 41574, 0, 0, 74058, 42035, 0, 0, 0, 0, 9854, 0, 64696, 0, 0, 0, - 74165, 0, 1720, 0, 0, 0, 6529, 7063, 0, 3751, 9120, 0, 0, 1798, 709, 0, - 1354, 1876, 13152, 6557, 12430, 8137, 0, 0, 0, 0, 245, 0, 11456, 41233, - 7070, 0, 0, 6136, 0, 65677, 8682, 41235, 0, 42045, 9804, 0, 432, 3595, 0, - 65437, 0, 74455, 42399, 0, 0, 0, 0, 119658, 0, 0, 0, 0, 8797, 0, 9052, - 64888, 0, 2356, 95, 74784, 10580, 0, 42286, 0, 64640, 0, 119104, 0, 0, 0, - 10063, 12652, 12199, 127030, 0, 2566, 11971, 0, 0, 1065, 0, 0, 0, 2576, - 0, 0, 0, 43604, 0, 0, 74082, 514, 74502, 0, 2921, 43215, 64493, 5772, - 12968, 0, 0, 74580, 917565, 2580, 0, 41341, 41223, 6564, 1463, 41342, 0, - 5293, 0, 0, 3733, 11346, 0, 12054, 0, 74098, 42827, 0, 13091, 0, 0, 0, - 917915, 0, 127026, 0, 74821, 0, 0, 119042, 0, 0, 13090, 66643, 0, 1270, - 1132, 42360, 0, 74096, 66655, 42569, 0, 0, 64761, 0, 41021, 8510, 42432, - 0, 0, 0, 0, 64496, 74109, 0, 9915, 0, 0, 7061, 41336, 3854, 0, 13141, - 917564, 0, 42319, 13082, 0, 7067, 0, 0, 0, 0, 0, 0, 0, 9029, 43543, 0, - 2353, 6308, 0, 74792, 2611, 119186, 0, 0, 0, 0, 0, 66627, 0, 4484, 8509, - 118976, 0, 65233, 0, 41224, 41017, 0, 3747, 10522, 0, 0, 1691, 41226, 0, - 12107, 0, 10905, 65010, 0, 697, 66018, 9284, 4244, 0, 0, 0, 13121, 0, 0, - 12010, 0, 0, 0, 0, 0, 0, 65816, 68111, 0, 0, 65668, 0, 0, 118784, 66365, - 0, 0, 12648, 0, 0, 0, 5785, 41309, 9764, 41316, 65877, 0, 13230, 41299, - 0, 0, 0, 0, 0, 0, 0, 13122, 0, 191, 74119, 0, 8000, 64411, 120652, 42889, - 64850, 41072, 41578, 0, 41577, 0, 10002, 0, 6533, 73802, 41570, 0, 683, - 396, 41580, 68146, 0, 12901, 0, 0, 343, 0, 0, 41360, 0, 0, 4743, 0, 0, - 74040, 74108, 8743, 1724, 1433, 119324, 0, 3739, 6263, 0, 0, 3964, 6592, - 0, 0, 66040, 0, 42568, 0, 0, 1778, 3956, 0, 42070, 6563, 43075, 9018, 0, - 0, 12067, 41312, 0, 5547, 0, 0, 0, 8175, 0, 284, 8108, 934, 0, 74001, - 173, 66460, 7174, 0, 0, 1750, 0, 4394, 0, 1807, 0, 0, 0, 5889, 0, 7180, - 0, 119145, 0, 0, 42471, 6982, 1721, 119144, 7891, 42243, 42160, 2583, - 4512, 0, 0, 0, 0, 0, 3855, 0, 0, 0, 0, 74295, 0, 0, 119140, 3975, 0, - 74087, 0, 12672, 3798, 2703, 0, 0, 0, 9774, 1275, 0, 0, 41095, 3962, 0, - 7873, 41101, 3954, 6457, 4513, 0, 0, 73994, 73992, 1468, 0, 0, 41851, 0, - 41846, 0, 0, 7633, 41849, 0, 4320, 3224, 0, 0, 0, 42531, 0, 1510, 0, - 8256, 0, 11393, 0, 8879, 0, 0, 8770, 0, 0, 127120, 1910, 8671, 0, 4283, - 0, 127117, 0, 0, 2654, 7893, 0, 0, 0, 0, 65106, 42761, 12857, 4581, 8411, - 119029, 127121, 0, 0, 0, 0, 0, 0, 1733, 4392, 2568, 10786, 0, 0, 8184, - 41486, 0, 0, 0, 0, 0, 0, 7185, 7965, 0, 0, 0, 0, 41350, 9129, 0, 0, 0, 0, - 0, 0, 10481, 0, 0, 7171, 0, 340, 0, 0, 0, 0, 0, 0, 0, 917620, 0, 0, 0, 0, - 0, 65203, 11392, 0, 0, 0, 3210, 0, 0, 0, 0, 0, 0, 917619, 0, 0, 10043, 0, - 1186, 41571, 6999, 617, 9464, 0, 3675, 5207, 65062, 5213, 0, 2617, 41348, - 41568, 0, 3253, 120535, 0, 8630, 0, 0, 5596, 5545, 7288, 2586, 64887, 0, - 5217, 0, 0, 0, 0, 64293, 68098, 2635, 0, 0, 0, 0, 0, 7835, 0, 0, 194988, - 0, 64558, 0, 0, 0, 0, 0, 0, 5784, 0, 0, 0, 0, 4011, 0, 68101, 0, 7864, - 4254, 118975, 0, 5600, 3903, 127083, 10447, 5598, 1207, 120521, 0, 3501, - 42582, 43600, 0, 0, 1124, 5597, 0, 0, 9321, 0, 0, 0, 0, 1719, 120576, 0, - 9671, 1125, 4399, 0, 0, 0, 7631, 5488, 65223, 0, 0, 5491, 0, 8937, 43044, - 2604, 74187, 5490, 43046, 5489, 7212, 11768, 43043, 6300, 0, 194789, 0, - 4390, 454, 41397, 0, 9875, 7593, 194792, 0, 118913, 7207, 0, 65901, 2394, - 2575, 0, 3746, 11016, 65752, 0, 0, 917944, 0, 11989, 0, 0, 0, 0, 0, 8249, - 0, 0, 0, 6640, 74806, 2598, 513, 0, 6586, 8656, 0, 0, 65008, 0, 194784, - 0, 194795, 0, 0, 194987, 0, 0, 0, 194986, 12647, 0, 194796, 0, 1036, 0, - 0, 1723, 0, 0, 0, 41579, 2444, 0, 10705, 73876, 0, 74486, 0, 740, 194985, - 0, 194984, 0, 4238, 11071, 9459, 917943, 0, 0, 0, 8121, 10438, 74487, - 42574, 13285, 195001, 11907, 0, 5690, 194999, 0, 0, 43181, 13095, 0, 0, - 64498, 0, 9506, 6978, 194993, 0, 0, 0, 194992, 0, 0, 1122, 317, 0, 0, 0, - 0, 1920, 0, 10173, 827, 0, 0, 0, 120126, 5223, 1304, 0, 119564, 5226, - 12602, 0, 0, 9329, 7758, 9239, 41173, 5224, 5487, 1222, 5692, 41725, 0, - 9674, 5695, 41711, 64627, 19909, 0, 74604, 5691, 287, 866, 233, 0, 0, - 42816, 0, 65140, 74797, 0, 8830, 6568, 42300, 10524, 41175, 0, 0, 0, - 5296, 0, 42492, 0, 0, 3302, 0, 0, 6516, 6515, 6514, 6513, 6512, 0, 7856, - 8690, 0, 0, 12122, 119628, 194813, 0, 1785, 0, 120635, 65153, 194810, - 5138, 0, 0, 0, 0, 4540, 41181, 0, 6200, 0, 5134, 0, 322, 4643, 5132, 0, - 0, 0, 5143, 0, 8790, 0, 0, 194802, 0, 8869, 120601, 0, 42060, 0, 0, 0, 0, - 10270, 10286, 10318, 10382, 43529, 66477, 0, 0, 74170, 0, 3234, 0, 0, - 74376, 43139, 118924, 127084, 120627, 8767, 0, 74489, 41281, 120746, - 5201, 0, 6215, 12714, 6214, 13101, 0, 0, 65268, 0, 0, 0, 11027, 0, 10059, - 10511, 42075, 9767, 789, 1749, 0, 127071, 0, 320, 0, 8647, 0, 3049, 0, - 6471, 42071, 43156, 0, 0, 0, 0, 4960, 5549, 0, 0, 8485, 4671, 5418, 0, - 3351, 0, 0, 10610, 5414, 3064, 6212, 4286, 5421, 0, 9554, 0, 0, 0, 6653, - 0, 0, 64510, 6213, 12885, 0, 119045, 64720, 0, 120759, 73741, 12603, 0, - 11430, 4566, 7843, 9317, 3801, 10342, 10406, 0, 119259, 42576, 0, 5200, - 0, 0, 0, 9183, 0, 74458, 73825, 395, 5482, 5198, 8786, 10390, 74202, - 5196, 43224, 6113, 42009, 5205, 0, 43307, 0, 118973, 0, 12134, 0, 0, - 118843, 9126, 435, 0, 12014, 12893, 8093, 9079, 3203, 192, 65109, 3385, - 0, 64430, 5383, 10294, 10326, 0, 5738, 0, 3336, 0, 5361, 3623, 41159, 0, - 68112, 7872, 8581, 0, 1260, 3149, 5359, 0, 0, 7914, 5357, 0, 0, 2624, - 5364, 0, 11431, 0, 9101, 11058, 0, 0, 0, 42271, 0, 65737, 120793, 0, 0, - 0, 10619, 0, 0, 0, 0, 0, 0, 0, 0, 9319, 7097, 119055, 0, 3232, 73824, - 74581, 0, 0, 0, 41889, 0, 0, 1161, 41895, 74103, 9701, 8622, 0, 0, 73819, - 120588, 5012, 119049, 41362, 0, 917762, 11921, 0, 11769, 0, 0, 41364, 0, - 74228, 41352, 41361, 0, 41366, 0, 3356, 0, 917, 0, 119915, 119923, 8199, - 119912, 119917, 677, 119916, 0, 119932, 0, 0, 0, 0, 3349, 74125, 7022, - 8927, 4739, 0, 5802, 0, 8615, 0, 0, 491, 0, 0, 0, 65837, 0, 8426, 11092, - 9891, 0, 42497, 0, 7586, 42305, 10852, 0, 0, 0, 0, 9095, 7741, 12684, - 41885, 1046, 0, 0, 0, 5815, 5171, 65539, 0, 6932, 0, 42394, 41878, 74849, - 917951, 0, 5169, 11935, 0, 0, 3175, 120822, 1537, 120804, 5176, 8905, - 4136, 4871, 0, 0, 9833, 0, 0, 1128, 65920, 0, 9711, 7057, 9408, 9409, - 9410, 9411, 3662, 9413, 3378, 9415, 9416, 9417, 9418, 8909, 9420, 9421, - 5897, 9423, 5165, 5126, 41385, 0, 41389, 917938, 8955, 3374, 9400, 9401, - 9402, 9403, 9404, 3507, 9406, 7629, 0, 19925, 0, 73832, 183, 0, 2631, 0, - 10627, 41130, 0, 3996, 0, 0, 0, 0, 119307, 0, 6580, 4332, 64825, 66329, - 10726, 66686, 41125, 5899, 41365, 917918, 12085, 0, 574, 917922, 0, - 73828, 5448, 41058, 5446, 73900, 41322, 74768, 5442, 4190, 0, 0, 5451, 0, - 3616, 0, 0, 0, 7708, 0, 10859, 65867, 10345, 10409, 4191, 0, 120719, - 73800, 42181, 0, 0, 4447, 0, 120708, 11788, 65587, 0, 10415, 74102, 0, - 205, 0, 10351, 119076, 0, 9862, 6588, 0, 64697, 0, 41355, 5505, 119154, - 5503, 8021, 0, 119150, 9819, 41357, 8011, 42885, 5507, 12044, 0, 0, - 10026, 5472, 65108, 1191, 13106, 5470, 10329, 5476, 8991, 66322, 0, 0, - 42874, 8550, 42876, 5592, 2919, 0, 2675, 5595, 0, 0, 4367, 0, 0, 5478, - 5904, 5594, 0, 74150, 7291, 5590, 0, 13067, 118909, 0, 0, 9731, 0, 64633, - 194565, 0, 0, 0, 0, 0, 10750, 0, 0, 74545, 0, 0, 12887, 10551, 194564, 0, - 0, 0, 120570, 0, 5199, 0, 1120, 42387, 0, 1444, 9486, 7554, 65839, 0, 0, - 1442, 0, 5894, 0, 0, 0, 0, 74313, 0, 13162, 0, 3334, 0, 118803, 0, 66022, - 0, 0, 1651, 0, 8861, 0, 0, 1142, 0, 8271, 0, 0, 0, 12903, 0, 4002, 0, - 10442, 10676, 3344, 0, 0, 12920, 0, 0, 0, 0, 1277, 0, 7871, 0, 0, 0, 0, - 119015, 120360, 0, 11784, 0, 0, 4700, 66366, 0, 120359, 11012, 0, 0, - 120358, 0, 4973, 8784, 0, 74804, 0, 0, 118981, 42440, 0, 43118, 0, 42364, - 0, 11543, 0, 0, 10346, 10410, 0, 9243, 2464, 0, 6108, 3372, 0, 6247, - 43117, 74526, 0, 74166, 0, 120355, 0, 0, 0, 0, 0, 0, 0, 74217, 3354, 0, - 4192, 9289, 118999, 41191, 3876, 0, 0, 120660, 0, 0, 0, 0, 0, 0, 11603, - 0, 0, 6589, 0, 194679, 0, 0, 0, 0, 0, 42572, 0, 10630, 74827, 1963, - 118889, 0, 11654, 0, 7550, 10686, 5903, 0, 0, 41329, 9662, 917937, 64698, - 3366, 10399, 0, 0, 11013, 0, 917933, 0, 0, 0, 6925, 0, 0, 917929, 0, - 11568, 0, 917931, 64579, 917930, 7852, 0, 0, 12292, 6312, 0, 64672, - 65296, 0, 118957, 0, 416, 12296, 74753, 73834, 0, 11050, 10984, 0, 0, 0, - 0, 0, 0, 9532, 66355, 0, 0, 917925, 64343, 195032, 0, 195031, 0, 0, - 195057, 11445, 0, 195028, 0, 195027, 0, 1021, 0, 9507, 10210, 74544, - 8023, 1200, 12243, 195062, 5282, 195061, 12540, 11545, 0, 120493, 3343, - 4424, 11047, 1885, 43268, 3896, 0, 66497, 2947, 392, 7894, 4391, 68139, - 0, 13059, 74816, 0, 3381, 7942, 0, 0, 0, 0, 0, 3913, 0, 0, 0, 7044, 1265, - 0, 6309, 7045, 7175, 7047, 0, 11791, 0, 0, 8221, 0, 41864, 0, 0, 0, 0, - 167, 0, 917584, 0, 74211, 41897, 0, 0, 0, 0, 0, 2493, 0, 118811, 0, 0, - 64354, 0, 8777, 0, 406, 8884, 2385, 0, 0, 0, 0, 43030, 42027, 12114, 0, - 0, 64936, 0, 0, 120629, 10561, 0, 8365, 0, 0, 65841, 120787, 11601, 0, 0, - 0, 917575, 7834, 74159, 0, 0, 10298, 6624, 4908, 917596, 1639, 0, 0, - 74157, 0, 0, 0, 0, 0, 0, 4817, 0, 194759, 0, 7043, 9600, 11022, 0, 0, 0, - 0, 0, 0, 7548, 64794, 42050, 12291, 0, 194761, 12343, 657, 195054, 64682, - 4461, 1134, 1838, 0, 0, 0, 4468, 0, 0, 0, 4456, 5206, 10720, 0, 42523, 0, - 0, 0, 0, 65550, 260, 4816, 74163, 10687, 0, 4821, 4466, 0, 195043, 4818, + 6761, 10093, 4369, 917791, 0, 0, 8820, 3947, 0, 0, 11515, 526, 0, 41295, + 194603, 917785, 194932, 0, 7688, 917786, 7686, 8288, 11815, 0, 0, 0, + 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, 0, 41216, + 7844, 2616, 119190, 68461, 65234, 0, 13076, 3135, 0, 78143, 119139, 3142, + 194948, 0, 10819, 119580, 10183, 0, 2608, 1470, 73967, 0, 6227, 0, 0, + 74775, 0, 6163, 0, 0, 0, 0, 0, 8603, 0, 119866, 3306, 10876, 43392, + 119573, 0, 5751, 0, 6222, 0, 0, 12086, 7403, 1600, 64309, 64939, 0, + 64783, 0, 11310, 0, 8882, 0, 0, 2570, 7021, 0, 0, 43110, 0, 1234, 6540, + 6974, 0, 0, 0, 5002, 0, 41286, 0, 127019, 0, 43585, 0, 6551, 0, 0, 0, + 41289, 0, 0, 0, 8977, 602, 120814, 0, 0, 0, 0, 0, 41279, 0, 0, 0, 11081, + 43615, 0, 0, 0, 0, 12727, 0, 0, 78397, 9475, 0, 65105, 0, 9633, 10886, + 43592, 7831, 0, 0, 0, 73915, 8076, 43048, 8290, 8291, 43051, 0, 0, 2596, + 43584, 0, 13113, 0, 0, 2393, 7058, 9087, 74067, 68673, 41574, 78337, 0, + 74058, 6376, 0, 0, 0, 0, 9854, 0, 64696, 0, 0, 0, 6994, 0, 1720, 0, 0, 0, + 6529, 7063, 0, 3751, 9120, 0, 0, 1798, 709, 0, 1354, 1876, 13152, 6557, + 12430, 8137, 0, 0, 0, 0, 245, 0, 11456, 41233, 7070, 0, 0, 6136, 0, + 65677, 8682, 41235, 0, 42045, 9804, 0, 432, 3595, 0, 65437, 0, 74455, + 42399, 0, 0, 0, 0, 119658, 0, 0, 0, 77894, 8797, 0, 9052, 64888, 0, 2356, + 95, 74784, 10580, 0, 42286, 0, 64640, 0, 119104, 0, 0, 0, 10063, 12652, + 12199, 127030, 0, 2566, 11971, 0, 0, 1065, 0, 0, 43400, 2576, 0, 0, 0, + 43604, 0, 0, 74082, 514, 74502, 0, 2921, 43215, 64493, 5772, 12968, 0, + 194944, 74580, 43398, 2580, 0, 41341, 41223, 6564, 1463, 41342, 0, 5293, + 0, 0, 3733, 11346, 0, 12054, 0, 74098, 42827, 0, 13091, 0, 0, 0, 917915, + 0, 127025, 0, 74821, 0, 0, 119042, 0, 0, 13090, 66643, 0, 1270, 1132, + 42360, 0, 74096, 66655, 42569, 0, 0, 64761, 0, 41021, 8510, 42432, 0, 0, + 0, 0, 64496, 74109, 0, 9915, 0, 0, 7061, 41336, 3854, 0, 13141, 68413, + 43401, 42319, 13082, 0, 7067, 68221, 0, 0, 0, 0, 0, 0, 9029, 43543, 0, + 2353, 6308, 0, 74792, 2611, 119186, 0, 0, 0, 43664, 0, 66627, 0, 4484, + 8509, 118976, 78116, 65233, 0, 41224, 41017, 0, 3747, 10522, 0, 0, 1691, + 41226, 0, 12107, 44002, 10905, 65010, 0, 697, 66018, 9284, 4244, 0, 0, 0, + 13121, 120036, 0, 12010, 0, 0, 0, 0, 0, 0, 65816, 68111, 0, 0, 65668, 0, + 6618, 118784, 66365, 0, 42234, 12648, 0, 0, 0, 5785, 41309, 9764, 41316, + 65877, 7383, 13230, 41299, 0, 0, 68365, 0, 0, 0, 0, 13122, 0, 191, 74119, + 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, 0, 42680, 41360, 78154, 0, 4743, 0, 0, 74040, 74108, 8743, 1724, + 1433, 119322, 0, 3739, 6263, 0, 0, 3964, 6592, 0, 0, 66040, 0, 42568, 0, + 0, 1778, 3956, 0, 42070, 6563, 43075, 9018, 0, 0, 12067, 41312, 0, 5547, + 74531, 0, 0, 8175, 0, 284, 8108, 934, 0, 74001, 173, 66460, 7174, 917917, + 118822, 1750, 0, 4394, 68368, 1807, 0, 0, 0, 5889, 0, 7180, 0, 119145, 0, + 0, 42471, 6982, 1721, 44022, 7891, 42243, 42160, 2583, 4512, 119360, + 65230, 0, 0, 0, 3855, 0, 0, 0, 0, 74295, 0, 0, 119140, 3975, 0, 74087, 0, + 12672, 3798, 2703, 0, 0, 2109, 9774, 1275, 0, 0, 41095, 3962, 0, 7873, + 41101, 3954, 6457, 4513, 0, 0, 73994, 73992, 1468, 0, 0, 41851, 0, 41846, + 0, 55238, 7633, 41849, 68385, 4320, 3224, 0, 0, 0, 42531, 0, 1510, 0, + 8256, 0, 11393, 0, 8879, 0, 0, 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, 0, 0, 8184, 41486, 0, 7396, 0, 0, 69788, 0, 7185, + 7965, 0, 0, 0, 0, 41350, 9129, 0, 0, 0, 0, 0, 0, 10481, 0, 0, 7171, 0, + 340, 0, 0, 0, 0, 0, 0, 0, 6764, 0, 0, 0, 0, 0, 65203, 11392, 119098, + 119359, 0, 3210, 0, 0, 0, 0, 0, 0, 917619, 0, 0, 10043, 0, 1186, 41571, + 6999, 617, 9464, 0, 3675, 5207, 65062, 5213, 194769, 2617, 41348, 41568, + 0, 3253, 120535, 0, 8630, 0, 0, 5596, 5545, 7288, 2586, 64887, 0, 5217, + 0, 0, 0, 0, 64293, 68098, 2635, 0, 0, 0, 0, 0, 7835, 0, 0, 194988, 0, + 64558, 127122, 0, 127121, 0, 0, 0, 5784, 0, 0, 0, 0, 4011, 917616, 68101, + 0, 7864, 4254, 65095, 0, 5600, 3903, 127083, 10447, 5598, 1207, 120521, + 66689, 3501, 42582, 43600, 194780, 0, 1124, 5597, 0, 0, 9321, 0, 0, 0, 0, + 1719, 68356, 68354, 9671, 1125, 4399, 0, 917610, 0, 7631, 5488, 65223, + 120532, 0, 5491, 0, 8937, 43044, 2604, 74187, 5490, 43046, 5489, 7212, + 11768, 43043, 6300, 0, 194789, 0, 4390, 454, 41397, 0, 9875, 7593, + 194792, 0, 118913, 7207, 0, 65901, 2394, 2575, 0, 3746, 11016, 65752, + 120037, 0, 43423, 0, 11989, 0, 0, 0, 0, 0, 8249, 0, 0, 78531, 6640, + 74806, 2598, 513, 0, 6586, 8656, 0, 127002, 65008, 0, 194784, 0, 194795, + 0, 0, 68475, 0, 0, 0, 78637, 12647, 0, 194796, 0, 1036, 0, 0, 1723, 0, 0, + 0, 41579, 2444, 0, 10705, 73876, 0, 74486, 0, 740, 194985, 194978, + 194984, 0, 4238, 11071, 9459, 68437, 78140, 78139, 0, 8121, 10438, 74487, + 42574, 13285, 55263, 11907, 195000, 5690, 194999, 0, 0, 43181, 13095, 0, + 0, 64498, 0, 9506, 6978, 194993, 77992, 0, 0, 194992, 0, 0, 1122, 317, 0, + 0, 0, 0, 1920, 0, 10173, 827, 0, 0, 78378, 120126, 5223, 1304, 0, 119564, + 5226, 12602, 0, 0, 9329, 7758, 9239, 41173, 5224, 5487, 1222, 5692, + 41725, 69229, 9674, 5695, 41711, 64627, 19909, 0, 74604, 5691, 287, 866, + 233, 0, 0, 42816, 0, 65140, 74797, 0, 8830, 6568, 42300, 10524, 41175, 0, + 0, 0, 5296, 0, 42492, 43402, 0, 3302, 0, 0, 6516, 6515, 6514, 6513, 6512, + 0, 7856, 8690, 0, 0, 12122, 119628, 43976, 0, 1785, 0, 68622, 65153, + 194810, 5138, 0, 0, 0, 0, 4540, 41181, 0, 6200, 0, 5134, 0, 322, 4643, + 5132, 0, 6389, 0, 5143, 0, 8790, 0, 0, 194802, 0, 8869, 120601, 0, 42060, + 0, 0, 0, 0, 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, 0, 65268, 0, 0, 0, 11027, + 0, 10059, 10511, 42075, 9767, 789, 1749, 78890, 127071, 0, 320, 0, 8647, + 0, 3049, 0, 6471, 42071, 43156, 9925, 127356, 127355, 0, 4960, 5549, + 127359, 0, 8485, 4671, 5418, 0, 3351, 127006, 0, 10610, 5414, 3064, 6212, + 4286, 5421, 0, 9554, 0, 0, 0, 6653, 0, 0, 64510, 6213, 12885, 0, 119045, + 64720, 0, 120759, 73741, 12603, 78654, 11430, 4566, 7843, 9317, 3801, + 10342, 10406, 0, 119259, 42576, 0, 5200, 0, 917948, 0, 9183, 0, 74458, + 73825, 395, 5482, 5198, 8786, 10390, 74202, 5196, 43224, 6113, 42009, + 5205, 0, 43307, 0, 118973, 0, 12134, 0, 0, 118843, 9126, 435, 0, 12014, + 12893, 8093, 9079, 3203, 192, 65109, 3385, 0, 64430, 5383, 10294, 10326, + 0, 5738, 0, 3336, 78355, 5361, 3623, 41159, 0, 68112, 7872, 8581, 0, + 1260, 3149, 5359, 0, 0, 7914, 5357, 0, 0, 2624, 5364, 0, 11431, 120030, + 9101, 11058, 78288, 0, 78293, 42271, 78289, 65737, 120793, 0, 65566, + 6717, 10619, 43360, 78385, 78384, 78383, 78382, 78381, 78380, 78379, + 9319, 7097, 119055, 77906, 3232, 73824, 74581, 120632, 0, 0, 41889, 0, 0, + 1161, 41895, 74103, 9701, 8622, 0, 0, 73819, 120588, 5012, 77912, 41362, + 0, 78296, 11921, 0, 11769, 0, 68609, 41364, 0, 74228, 41352, 41361, 0, + 41366, 0, 3356, 0, 917, 68422, 119915, 119923, 8199, 78389, 119917, 677, + 119916, 0, 119932, 0, 0, 0, 0, 3349, 74125, 7022, 8927, 4739, 0, 5802, 0, + 8615, 0, 0, 491, 0, 0, 0, 65837, 0, 8426, 11092, 9891, 0, 42497, 0, 7586, + 42305, 10852, 0, 0, 4606, 68448, 9095, 7741, 12684, 41885, 1046, 0, 0, 0, + 5815, 5171, 65539, 0, 6932, 78315, 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, 9402, 9403, 9404, + 3507, 9406, 7629, 0, 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, 73900, 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, + 78311, 11788, 65587, 68129, 10415, 74102, 0, 205, 0, 10351, 119076, 0, + 9862, 6588, 43257, 64697, 73998, 41355, 5505, 119154, 5503, 8021, 0, + 119150, 9819, 41357, 8011, 42885, 5507, 12044, 0, 0, 10026, 5472, 65108, + 1191, 13106, 5470, 10329, 5476, 8991, 66322, 69778, 78267, 42874, 8550, + 42876, 5592, 2919, 0, 2675, 5595, 78411, 0, 4367, 0, 0, 5478, 5904, 5594, + 0, 74150, 7291, 5590, 77849, 13067, 118909, 120372, 0, 9731, 0, 64633, + 77857, 77854, 77855, 77852, 77853, 77850, 10750, 43714, 77858, 74545, 0, + 0, 12887, 10551, 194564, 77866, 77867, 77864, 77865, 9929, 5199, 9936, + 1120, 42387, 0, 1444, 9486, 7554, 65839, 55252, 0, 1442, 0, 5894, 0, 0, + 0, 0, 74313, 0, 13162, 0, 3334, 0, 118803, 77881, 66022, 0, 0, 1651, 0, + 8861, 0, 0, 1142, 0, 8271, 0, 0, 0, 12903, 0, 4002, 43626, 10442, 10676, + 3344, 0, 0, 12920, 194560, 0, 0, 66642, 1277, 0, 7871, 0, 0, 78853, 0, + 78854, 120360, 0, 11784, 0, 78012, 4700, 66366, 78858, 120359, 11012, 0, + 78856, 120358, 77879, 4973, 8784, 77877, 74804, 77874, 77869, 77871, + 42440, 0, 43118, 0, 42364, 6774, 6773, 0, 120369, 10346, 10410, 78859, + 9243, 2464, 0, 6108, 3372, 0, 6247, 43117, 74526, 0, 74166, 0, 120355, 0, + 0, 0, 0, 0, 0, 0, 74217, 3354, 0, 4192, 9289, 118999, 41191, 3876, 0, 0, + 120660, 43696, 43380, 0, 0, 0, 0, 11603, 0, 0, 6589, 0, 194679, 0, 0, 0, + 0, 0, 42572, 0, 10630, 74827, 1963, 118889, 0, 11654, 0, 7550, 10686, + 5903, 0, 78009, 41329, 9662, 917937, 64698, 3366, 10399, 0, 0, 11013, 0, + 917933, 0, 78621, 194672, 6925, 0, 0, 917929, 0, 11568, 0, 917931, 64579, + 917930, 7852, 0, 0, 6754, 6312, 0, 64672, 65296, 0, 118957, 0, 416, + 12296, 68457, 73834, 68177, 11050, 10984, 0, 0, 0, 0, 0, 0, 9532, 66355, + 0, 0, 917925, 64343, 195032, 0, 195031, 0, 0, 195057, 11445, 0, 195028, + 195056, 195027, 10185, 1021, 0, 9507, 10210, 74544, 8023, 1200, 12243, + 78001, 5282, 78003, 12540, 11545, 0, 120493, 3343, 4424, 11047, 1885, + 43268, 3896, 78626, 66497, 2947, 392, 7894, 4391, 68139, 0, 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, 0, 78301, 0, 74211, 41897, 68477, 0, 917583, 0, 0, 2493, 0, + 118811, 0, 0, 64354, 0, 8777, 0, 406, 8884, 2385, 0, 0, 0, 917573, 43030, + 42027, 12114, 0, 917579, 64936, 0, 0, 120629, 10561, 0, 8365, 0, 0, + 65841, 120787, 11601, 0, 74121, 0, 917575, 7834, 74159, 0, 0, 10298, + 6624, 4908, 917596, 1639, 0, 0, 74157, 6327, 6724, 0, 0, 0, 0, 4817, + 78446, 194759, 0, 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, 0, 41403, 119977, 0, 0, 41406, 43273, 74160, 119983, 73939, 119985, 119984, 119979, 41404, 1165, 119980, 4451, 13087, 0, 11284, 119987, - 73855, 65155, 43014, 5439, 9363, 0, 3375, 0, 5900, 0, 7889, 2722, 42262, - 0, 0, 0, 0, 0, 0, 0, 11401, 0, 0, 0, 0, 0, 0, 0, 65438, 0, 7280, 0, 0, 0, - 4868, 119967, 119966, 0, 0, 0, 43161, 0, 119964, 0, 5182, 0, 120542, 0, - 0, 4226, 120798, 12135, 5732, 4464, 0, 0, 977, 4458, 0, 0, 64770, 0, 0, - 344, 0, 194790, 1395, 64279, 0, 0, 0, 786, 0, 43174, 64340, 0, 0, 0, - 43026, 7612, 10132, 64413, 0, 0, 0, 0, 0, 0, 120498, 0, 120734, 0, - 119160, 10204, 0, 0, 0, 0, 1399, 0, 0, 0, 8852, 0, 241, 0, 4907, 0, 0, - 7932, 9727, 0, 74255, 8748, 0, 0, 0, 0, 42780, 0, 0, 0, 4217, 0, 8650, 0, - 0, 0, 0, 118872, 43099, 3965, 0, 0, 0, 13300, 0, 0, 0, 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, 0, 42825, 41854, 5304, 0, 0, 6919, - 8619, 119655, 10038, 66454, 9592, 42851, 126993, 1542, 0, 0, 0, 0, 0, - 74311, 0, 0, 10181, 0, 0, 0, 7779, 0, 10195, 9479, 6029, 0, 0, 9689, 0, - 0, 8993, 66358, 0, 42378, 3368, 606, 0, 7697, 0, 0, 2030, 0, 6027, 8370, - 4322, 0, 65207, 0, 0, 0, 0, 0, 2735, 42831, 0, 0, 74866, 8881, 119047, 0, - 0, 73946, 0, 0, 0, 68140, 0, 9576, 0, 3347, 4160, 5154, 0, 3794, 66564, - 66514, 0, 7709, 41112, 0, 66560, 42041, 4572, 0, 66561, 0, 41113, 0, - 1615, 5855, 809, 0, 0, 0, 0, 5799, 0, 0, 0, 7260, 0, 43031, 64425, 65128, - 127061, 64386, 65257, 0, 0, 120607, 9347, 0, 6532, 0, 0, 0, 0, 65828, 0, - 283, 917917, 0, 532, 0, 0, 0, 120609, 0, 3370, 0, 11361, 5443, 0, 8153, - 73767, 0, 10741, 0, 0, 0, 0, 65495, 64706, 0, 0, 0, 0, 9466, 119600, - 9824, 0, 0, 0, 0, 915, 0, 0, 0, 0, 0, 0, 43264, 0, 0, 0, 0, 0, 0, 0, - 68161, 64550, 5186, 12890, 0, 0, 12108, 0, 65124, 0, 66043, 0, 0, 43107, - 0, 0, 42562, 0, 0, 0, 0, 11485, 6103, 127123, 0, 11718, 0, 12889, 0, 0, - 0, 0, 0, 0, 0, 1630, 0, 65483, 0, 12565, 0, 65476, 0, 0, 119554, 9283, - 7700, 917537, 9690, 65499, 0, 64593, 512, 3376, 118862, 0, 0, 0, 632, - 12940, 0, 42529, 0, 0, 5957, 0, 8926, 0, 0, 0, 10745, 10174, 0, 64581, - 5386, 120686, 11713, 10633, 120531, 5056, 0, 0, 0, 120773, 0, 9812, 0, - 4460, 0, 0, 0, 0, 0, 0, 0, 64278, 0, 0, 0, 0, 64389, 2953, 73879, 1801, - 12835, 917627, 0, 73823, 0, 66375, 0, 702, 42579, 0, 0, 13074, 0, 0, 0, - 0, 12106, 0, 74207, 1755, 10482, 12863, 0, 1163, 2951, 9522, 74079, - 195076, 120674, 0, 3384, 120728, 10702, 830, 0, 0, 0, 8451, 0, 0, 0, - 120762, 0, 0, 0, 0, 2908, 0, 0, 64902, 4243, 0, 12239, 0, 0, 4441, 0, 0, - 73940, 64352, 0, 0, 411, 0, 0, 0, 0, 0, 41890, 0, 2730, 41604, 0, 5428, - 194743, 3364, 42265, 0, 0, 118816, 0, 9684, 216, 0, 1401, 0, 0, 0, 0, 0, - 9158, 0, 120664, 5768, 0, 0, 0, 484, 0, 0, 0, 65895, 0, 0, 3338, 73935, - 572, 7041, 2736, 0, 0, 0, 2794, 8807, 64491, 0, 5438, 5222, 5381, 43114, - 0, 5193, 5125, 5456, 5509, 0, 194747, 9534, 0, 0, 0, 3430, 0, 0, 0, 0, - 981, 0, 4330, 120673, 120536, 1824, 10908, 0, 7034, 41683, 64617, 0, - 73754, 3957, 0, 64547, 0, 674, 63991, 0, 2946, 5354, 5251, 5328, 5307, - 3759, 11411, 8364, 5123, 0, 5281, 5469, 5121, 0, 0, 0, 5130, 0, 0, 0, 0, - 120726, 1221, 2733, 11746, 0, 5216, 0, 0, 0, 0, 3468, 0, 9230, 5939, 0, - 0, 0, 120677, 120729, 7278, 10321, 10289, 64613, 10385, 41706, 0, 0, 0, - 0, 11739, 0, 41981, 0, 5938, 0, 0, 12448, 7576, 10401, 10337, 73852, 0, + 73855, 65155, 43014, 5439, 9363, 127558, 3375, 0, 5900, 0, 7889, 2722, + 42262, 0, 0, 0, 0, 0, 0, 0, 11401, 0, 0, 68459, 0, 0, 0, 0, 65438, 0, + 7280, 0, 0, 0, 4868, 119967, 119966, 0, 0, 0, 43161, 0, 119964, 0, 5182, + 0, 120542, 0, 0, 4226, 120798, 12135, 5732, 4464, 0, 0, 977, 4458, 0, 0, + 64770, 74838, 0, 344, 0, 194790, 1395, 64279, 0, 0, 0, 786, 0, 43174, + 64340, 0, 0, 0, 43026, 7612, 10132, 64413, 0, 0, 0, 0, 0, 0, 68444, 0, + 120734, 0, 119160, 10204, 0, 0, 0, 0, 1399, 0, 65217, 0, 8852, 0, 241, 0, + 4907, 0, 0, 7932, 9727, 0, 74255, 8748, 0, 0, 0, 0, 42780, 0, 0, 0, 4217, + 0, 8650, 0, 0, 0, 0, 118872, 43099, 3965, 119119, 6719, 0, 13300, 78439, + 0, 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, 0, 42825, + 41854, 5304, 0, 78516, 6919, 8619, 119655, 10038, 66454, 9592, 42851, + 126993, 1542, 0, 0, 0, 0, 0, 74311, 78497, 0, 10181, 0, 43624, 0, 7779, + 0, 10195, 9479, 6029, 0, 0, 9689, 0, 0, 8993, 66358, 0, 42378, 3368, 606, + 0, 7697, 69237, 69787, 2030, 0, 6027, 8370, 4322, 0, 65207, 0, 0, 0, 0, + 0, 2735, 42831, 77935, 127120, 74866, 8881, 119047, 0, 0, 73946, 0, 0, 0, + 68140, 0, 9576, 0, 3347, 4160, 5154, 55288, 3794, 66564, 8530, 127063, + 7709, 41112, 0, 66560, 42041, 4572, 12876, 66561, 0, 6758, 0, 1615, 5855, + 809, 0, 0, 0, 0, 5799, 0, 0, 0, 7260, 0, 43031, 64425, 65128, 127061, + 64386, 65257, 0, 68616, 120607, 9347, 0, 6532, 0, 0, 0, 0, 65828, 0, 283, + 68665, 78813, 532, 78663, 0, 0, 120609, 0, 3370, 0, 11361, 5443, 78778, + 8153, 73767, 0, 10741, 0, 0, 0, 0, 65495, 64706, 0, 43344, 0, 78870, + 9466, 78866, 9824, 0, 0, 0, 0, 915, 43425, 0, 0, 0, 0, 0, 43264, 0, 0, 0, + 0, 78864, 6730, 78862, 68161, 64550, 5186, 12890, 0, 0, 12108, 0, 65124, + 43127, 66043, 0, 6326, 43107, 77826, 0, 42562, 0, 0, 0, 0, 11485, 6103, + 127123, 0, 11718, 0, 12889, 0, 0, 0, 0, 0, 55245, 0, 1630, 0, 65483, 0, + 12565, 0, 65476, 120013, 0, 119554, 9283, 7700, 917537, 9690, 65499, 0, + 64593, 512, 3376, 68210, 0, 0, 77892, 632, 12940, 77891, 42529, 78587, 0, + 5957, 0, 8926, 0, 0, 0, 10745, 10174, 7379, 64581, 5386, 120686, 11713, + 10633, 120531, 5056, 0, 0, 0, 120773, 0, 9812, 0, 4460, 0, 0, 0, 0, 0, 0, + 0, 64278, 0, 43466, 0, 0, 64389, 2953, 73879, 1801, 12835, 119029, 0, + 73823, 0, 66375, 2085, 702, 42579, 77884, 77885, 13074, 77883, 0, 0, 0, + 12106, 0, 74207, 1755, 10482, 12863, 77898, 1163, 2951, 9522, 74079, + 78266, 120674, 0, 3384, 69227, 10702, 830, 77902, 77899, 77900, 8451, 0, + 0, 0, 120762, 0, 0, 0, 0, 2908, 0, 43386, 64902, 4243, 0, 12239, 0, 0, + 4441, 0, 0, 73940, 64352, 127513, 0, 411, 0, 0, 0, 4056, 118992, 41890, + 0, 2730, 41604, 0, 5428, 194743, 3364, 42265, 0, 0, 118816, 194742, 9684, + 216, 0, 1401, 0, 44012, 0, 0, 0, 9158, 77842, 120664, 5768, 0, 0, 0, 484, + 0, 0, 0, 65895, 0, 0, 3338, 73935, 572, 7041, 2736, 67605, 0, 0, 2794, + 8807, 64491, 77847, 5438, 5222, 5381, 43114, 0, 5193, 5125, 5456, 5509, + 77846, 194747, 9534, 0, 0, 0, 3430, 0, 0, 0, 0, 981, 0, 4330, 73929, + 120536, 1824, 10908, 0, 7034, 41683, 64617, 0, 73754, 3957, 64358, 64547, + 0, 674, 63991, 0, 2946, 5354, 5251, 5328, 5307, 3759, 11411, 8364, 5123, + 0, 5281, 5469, 5121, 119245, 0, 0, 5130, 0, 0, 77990, 0, 120726, 1221, + 2733, 11746, 77991, 5216, 0, 0, 0, 0, 3468, 7033, 9230, 5939, 0, 0, 0, + 120677, 68400, 7278, 10321, 10289, 64613, 10385, 41706, 0, 0, 0, 0, + 11739, 0, 41981, 0, 5938, 0, 0, 12448, 7576, 10401, 10337, 73852, 0, 13057, 0, 126976, 0, 10009, 0, 64304, 0, 12165, 0, 0, 9885, 0, 8077, 0, - 0, 0, 0, 0, 0, 0, 4220, 10725, 10433, 0, 0, 4987, 64519, 0, 0, 0, 0, 0, - 10970, 11733, 0, 120792, 0, 19944, 0, 9009, 8551, 0, 11468, 74003, 7575, - 0, 2724, 0, 0, 12313, 119949, 515, 119947, 42791, 63987, 119942, 119943, - 119940, 119941, 119938, 9775, 4046, 4589, 4521, 0, 9141, 0, 0, 2741, - 64399, 6197, 1370, 0, 0, 0, 0, 0, 0, 6184, 8606, 3303, 41372, 11786, - 9473, 66203, 66177, 0, 11593, 43007, 4478, 66178, 0, 0, 2744, 0, 4477, 0, - 814, 42066, 66183, 66204, 66194, 119961, 66198, 41880, 66188, 66197, - 119954, 11955, 66190, 66191, 41111, 66189, 73788, 7788, 4847, 0, 0, 0, 0, - 0, 1581, 6535, 0, 12954, 430, 194934, 194939, 0, 194938, 5278, 4945, - 42883, 4950, 0, 120547, 0, 7269, 0, 5964, 12908, 0, 0, 74764, 74477, - 119146, 194936, 4949, 0, 443, 0, 4944, 5467, 119603, 0, 65137, 6044, - 65392, 0, 4213, 0, 41303, 0, 194931, 0, 41306, 73984, 2698, 0, 0, 12072, - 3193, 0, 41304, 824, 0, 12091, 119814, 119813, 119816, 4673, 64804, 4678, - 119820, 119819, 65059, 0, 119808, 0, 5481, 3490, 1199, 119811, 8356, - 119829, 119832, 4677, 12688, 3102, 0, 4672, 119822, 119821, 5531, 119823, - 42575, 119825, 119828, 4674, 4548, 0, 0, 0, 119946, 8025, 0, 127024, - 1855, 0, 119945, 0, 120554, 0, 0, 0, 0, 2745, 11797, 0, 0, 119939, 4654, - 0, 0, 194959, 73993, 10525, 4649, 65209, 0, 0, 4648, 43080, 0, 0, 0, - 6246, 64950, 7828, 4650, 0, 0, 119086, 4653, 7822, 0, 0, 43187, 8669, 0, - 0, 65093, 0, 0, 2716, 0, 0, 0, 0, 0, 0, 11060, 8547, 2711, 42165, 0, - 119228, 7992, 0, 0, 4662, 0, 0, 9149, 9146, 599, 4657, 194963, 120754, - 194962, 4656, 10130, 0, 7811, 40994, 194965, 6414, 5967, 4658, 3725, - 5713, 5814, 4661, 42434, 0, 0, 0, 64904, 9026, 10833, 0, 7547, 4867, 0, - 10008, 10222, 3054, 194956, 9744, 0, 7605, 4622, 119656, 0, 0, 0, 0, 0, - 9045, 0, 4225, 19926, 0, 12880, 65307, 4617, 0, 0, 0, 4616, 10518, 10423, - 10359, 0, 5958, 0, 0, 4215, 9789, 917941, 4321, 4621, 0, 41313, 522, - 5368, 0, 65803, 0, 5366, 12201, 5372, 0, 0, 0, 7720, 0, 2696, 0, 0, 4638, - 0, 1790, 0, 5965, 64363, 66569, 0, 194968, 5376, 1835, 5335, 194966, 0, - 4633, 0, 68119, 1180, 4632, 0, 5387, 5333, 0, 0, 42094, 5331, 4634, - 11928, 0, 5338, 4637, 0, 5971, 42414, 0, 1268, 65097, 42361, 0, 0, 73853, - 1427, 0, 0, 5970, 3431, 0, 10358, 10422, 4758, 0, 1608, 2738, 0, 10455, - 4753, 74026, 11344, 4222, 6240, 5231, 74384, 0, 0, 6248, 0, 0, 0, 42318, - 0, 5229, 4757, 0, 0, 2728, 4752, 64563, 65235, 5234, 0, 0, 0, 10713, 0, - 0, 2622, 7460, 0, 0, 0, 8954, 74760, 65189, 2632, 0, 10108, 1011, 5574, - 1853, 2709, 65139, 5577, 0, 0, 118871, 0, 8965, 7635, 42177, 5316, 0, - 5314, 6451, 5572, 0, 5312, 0, 5525, 5330, 5319, 0, 0, 194907, 119016, 0, - 0, 0, 0, 0, 195009, 0, 74022, 0, 64609, 0, 0, 0, 5721, 0, 10398, 8632, - 66465, 11267, 73961, 0, 5720, 0, 1692, 4219, 4610, 8696, 4305, 0, 4609, - 0, 4614, 541, 0, 5287, 5309, 5285, 0, 5961, 4647, 56, 4216, 10577, 41381, - 601, 4613, 0, 0, 0, 4608, 64260, 41124, 5190, 67628, 0, 68145, 7086, 0, - 119243, 67620, 0, 2734, 11074, 0, 67627, 43593, 0, 67625, 5960, 0, 8992, - 65293, 0, 1782, 67622, 68114, 119950, 0, 68180, 5501, 119952, 42508, - 7442, 120749, 359, 41253, 119957, 6239, 119956, 41256, 0, 68134, 0, - 74209, 0, 9346, 118904, 41254, 0, 43291, 3767, 5737, 0, 4865, 0, 5740, 0, - 5736, 4368, 0, 7193, 68137, 0, 5739, 41024, 4866, 0, 73904, 0, 4869, - 120563, 0, 4223, 0, 6650, 0, 0, 0, 0, 4870, 0, 74805, 66566, 0, 120758, - 0, 0, 0, 10122, 4864, 66568, 4144, 7937, 0, 6245, 0, 2732, 66459, 745, 0, - 195097, 0, 4777, 7821, 0, 0, 42775, 0, 194954, 0, 3097, 0, 5966, 0, 4778, - 0, 10863, 0, 4781, 0, 64407, 0, 0, 8577, 0, 118964, 43285, 10216, 4782, - 0, 0, 120757, 917924, 12325, 0, 8717, 0, 0, 4776, 0, 11492, 8700, 0, - 13176, 0, 10426, 0, 917599, 10362, 0, 1715, 4849, 8242, 9561, 73922, - 43278, 42635, 0, 0, 5963, 917926, 0, 0, 4850, 0, 1607, 466, 4853, 118995, - 4854, 0, 5164, 0, 1350, 5124, 64420, 1993, 5362, 8471, 2708, 0, 12445, - 3785, 234, 3199, 0, 41268, 4848, 2530, 0, 4798, 1964, 0, 73762, 10458, 0, - 8576, 0, 0, 2704, 4794, 0, 0, 8322, 4797, 74074, 0, 2694, 4792, 0, 2439, - 65104, 0, 0, 303, 0, 0, 0, 2437, 0, 4221, 4844, 118869, 0, 0, 0, 0, 0, - 43292, 0, 2441, 10739, 65090, 0, 119327, 0, 2451, 2714, 119326, 0, 0, - 4937, 74541, 753, 5849, 10597, 43089, 11722, 9248, 0, 42879, 11725, 0, 0, - 2726, 3107, 73958, 4941, 64937, 917538, 9140, 1408, 5261, 41412, 0, 181, - 0, 4942, 9539, 4938, 0, 65201, 5259, 9369, 64185, 4142, 5257, 0, 0, 4964, - 5264, 64178, 64177, 12979, 0, 64182, 64181, 64180, 64179, 9482, 4873, - 41231, 1822, 42526, 0, 12758, 3865, 0, 0, 10500, 0, 0, 0, 0, 9830, 0, - 389, 10893, 7521, 0, 4872, 5463, 0, 3125, 9567, 0, 4878, 5459, 4874, 0, - 9557, 5465, 0, 0, 11494, 0, 9563, 10865, 74570, 43279, 64186, 0, 0, - 64191, 64190, 8898, 64188, 0, 41030, 0, 0, 917835, 0, 917834, 0, 917837, - 41031, 0, 11960, 0, 3082, 0, 0, 0, 10573, 0, 7079, 5856, 127043, 5163, - 127042, 0, 1817, 66724, 0, 0, 10564, 7763, 13077, 41813, 4400, 41745, - 64207, 10275, 8925, 10371, 10307, 41814, 4248, 0, 0, 4541, 6299, 64204, - 64203, 64201, 64200, 64199, 64198, 0, 42156, 0, 0, 64193, 64192, 0, 0, - 64197, 64196, 64195, 64194, 13282, 64175, 64174, 64173, 0, 846, 0, 0, 0, - 0, 0, 0, 2543, 12163, 3108, 9745, 64167, 64166, 64165, 64164, 41743, 0, - 64169, 64168, 64949, 10972, 10251, 10247, 42768, 715, 64161, 43299, 9453, - 5348, 10943, 120378, 0, 11352, 550, 9910, 0, 0, 66579, 11551, 0, 0, 9504, - 7187, 0, 10373, 0, 120791, 10261, 10253, 6404, 10277, 0, 11984, 1552, - 65222, 6998, 0, 0, 3128, 4789, 5067, 5066, 118849, 4784, 0, 8827, 1146, - 5065, 0, 0, 68136, 0, 0, 5064, 2431, 0, 9450, 1809, 0, 0, 0, 5062, 1264, - 64817, 13254, 11697, 0, 9785, 64716, 0, 3933, 74559, 4740, 7954, 0, 0, - 42609, 0, 74175, 0, 127016, 0, 0, 42130, 0, 5151, 917831, 917823, 0, 0, - 0, 7620, 3800, 65122, 0, 0, 8355, 7854, 0, 954, 64927, 4185, 41045, 0, - 41438, 41439, 73978, 10711, 4593, 0, 120584, 0, 64774, 13309, 10532, - 66727, 0, 0, 0, 64759, 0, 5166, 9888, 0, 5148, 42834, 0, 120634, 118946, - 64140, 0, 64131, 3119, 917814, 0, 3060, 64135, 9986, 0, 0, 636, 11698, 0, - 0, 9916, 11701, 7836, 0, 64137, 8320, 118969, 8863, 0, 119960, 1477, - 43289, 0, 74358, 8618, 0, 9908, 0, 0, 0, 3937, 12312, 0, 0, 0, 64781, - 912, 10498, 4536, 119963, 74532, 0, 6244, 0, 194580, 3935, 120665, 0, 0, - 11950, 5392, 42248, 65129, 0, 5397, 0, 12046, 12599, 0, 0, 5395, 0, 5393, - 354, 0, 119948, 0, 0, 0, 42039, 0, 0, 64142, 626, 0, 5895, 0, 0, 5780, 0, - 0, 0, 0, 0, 43297, 0, 4311, 4644, 8818, 0, 0, 0, 73818, 3918, 66452, - 3797, 1644, 119944, 9658, 4140, 11385, 65947, 6455, 9030, 813, 0, 68131, - 4146, 0, 5360, 2466, 0, 0, 0, 6249, 42117, 0, 0, 0, 0, 74046, 120583, - 4911, 988, 917809, 0, 0, 0, 7054, 64147, 0, 64920, 917812, 917803, - 118933, 120349, 0, 0, 11981, 12202, 0, 11032, 120725, 6093, 11608, 975, - 0, 65843, 170, 0, 0, 4169, 0, 41859, 6058, 120401, 0, 120657, 0, 0, 0, - 9818, 10178, 10324, 42106, 5898, 74540, 4738, 41856, 7062, 917865, 4737, - 11779, 4742, 120564, 917866, 73736, 0, 9825, 6448, 12700, 127008, 4831, - 0, 0, 0, 5300, 4741, 42108, 0, 64159, 4736, 64148, 0, 849, 0, 0, 43288, - 0, 66620, 0, 0, 65549, 9496, 64598, 0, 0, 7876, 68132, 917872, 3928, - 917870, 65283, 10706, 7198, 0, 4842, 12053, 0, 0, 4841, 0, 4171, 12008, - 6251, 3923, 1490, 0, 119591, 0, 40972, 5245, 0, 10114, 42001, 41888, - 4845, 8332, 40974, 0, 4840, 9077, 917851, 1747, 917849, 4825, 0, 917852, - 0, 0, 0, 0, 0, 0, 0, 9850, 118937, 367, 1472, 917859, 6687, 1274, 0, - 5905, 12339, 8919, 73953, 10907, 65261, 11023, 119559, 4830, 9134, 0, - 64126, 43011, 0, 0, 64101, 0, 0, 4824, 10614, 120390, 0, 1888, 1960, - 7861, 917856, 0, 41836, 43012, 6052, 6064, 54, 43009, 12214, 0, 6211, 0, - 358, 41997, 41833, 11442, 10758, 65774, 0, 120384, 64115, 120385, 0, 0, - 0, 119053, 0, 12765, 64121, 126998, 12962, 0, 0, 4017, 12827, 5241, - 120392, 0, 41118, 3924, 0, 11366, 917843, 0, 0, 917846, 41116, 917844, - 917845, 0, 11363, 12057, 11917, 1567, 74000, 4721, 0, 66202, 8957, 4139, - 0, 0, 0, 0, 0, 12740, 0, 4722, 12761, 0, 12759, 4725, 0, 4726, 0, 0, 0, - 917904, 917905, 0, 12755, 12762, 4015, 0, 8052, 476, 0, 0, 0, 64212, - 41020, 1382, 64209, 64216, 64215, 64214, 1656, 41831, 0, 0, 41843, 8720, - 3908, 1452, 13111, 0, 64067, 0, 8552, 64113, 41845, 3849, 0, 66232, 9778, - 120066, 5891, 7064, 55, 74437, 917911, 0, 0, 7935, 67586, 0, 1114, 0, - 67585, 120052, 120053, 120050, 120051, 3938, 120057, 65417, 64717, - 120060, 120061, 65415, 120059, 6292, 65303, 7955, 6452, 4713, 917887, - 66249, 917885, 917890, 917891, 65152, 719, 120044, 120045, 120042, 41944, - 4532, 65412, 120046, 10868, 4717, 2349, 5902, 66450, 4712, 917902, - 917899, 917900, 0, 8155, 4718, 3942, 4714, 9625, 0, 0, 0, 12006, 0, 0, 0, - 0, 0, 65414, 6454, 1229, 0, 66437, 66025, 917894, 0, 42500, 120508, 4809, - 9623, 917874, 917879, 917880, 917877, 917878, 65405, 68159, 917881, - 917882, 5365, 4545, 8901, 917566, 119555, 4813, 0, 0, 5925, 4808, 64330, - 0, 65475, 0, 0, 4814, 0, 4810, 0, 0, 64928, 10543, 0, 3522, 0, 414, - 65404, 0, 0, 6456, 73820, 0, 11905, 917883, 0, 0, 0, 74495, 0, 0, 0, - 118820, 9751, 65407, 0, 11770, 3919, 0, 0, 65061, 0, 0, 0, 12235, 0, 0, - 0, 66576, 0, 64080, 0, 64090, 0, 0, 10162, 10310, 0, 8454, 0, 42038, 387, - 41363, 12737, 0, 4780, 0, 0, 64310, 64621, 0, 0, 0, 0, 0, 0, 8896, 0, - 375, 6976, 0, 119005, 0, 0, 0, 119202, 119203, 12526, 43120, 2315, 0, - 1938, 119197, 0, 4529, 119200, 119201, 119198, 119199, 0, 0, 0, 13150, - 64492, 0, 0, 0, 12902, 0, 42891, 66327, 74298, 0, 10799, 0, 2587, 66372, - 0, 4193, 120334, 4241, 0, 7998, 0, 0, 0, 0, 2316, 118821, 0, 0, 0, 64297, - 74799, 0, 74140, 0, 5373, 0, 0, 3762, 10015, 0, 119232, 0, 41590, 0, 0, - 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, 0, 68138, - 13072, 1894, 0, 0, 65478, 43310, 7231, 0, 11773, 0, 0, 0, 0, 2551, 0, - 6453, 10200, 6235, 0, 0, 0, 0, 4470, 0, 0, 7780, 5369, 118958, 5249, 0, - 5367, 8756, 0, 0, 5377, 120585, 68143, 1688, 0, 0, 0, 0, 0, 0, 0, 41697, - 41319, 1300, 10650, 41692, 64505, 4668, 0, 119624, 1465, 10850, 3943, 0, - 41205, 0, 0, 0, 0, 5352, 0, 0, 8839, 41314, 0, 7785, 41204, 0, 41209, 0, - 0, 43607, 0, 0, 5420, 3897, 0, 0, 74417, 4018, 0, 68127, 0, 0, 0, 0, 0, - 2561, 0, 3542, 41915, 12076, 7951, 68152, 118857, 5303, 6276, 1706, 0, 0, - 74116, 0, 65150, 41819, 0, 73951, 10847, 41822, 9985, 860, 0, 10506, 0, - 0, 10753, 10830, 0, 615, 64490, 7574, 0, 0, 0, 12909, 43016, 64559, - 127028, 0, 0, 0, 2020, 0, 4022, 0, 0, 0, 0, 41691, 0, 0, 0, 0, 64622, - 9070, 0, 0, 3911, 42829, 43122, 1033, 0, 0, 7000, 3904, 0, 0, 0, 0, - 127012, 13123, 10846, 3450, 0, 0, 118807, 0, 42778, 10000, 41088, 449, 0, - 3777, 0, 0, 9636, 0, 10738, 0, 9367, 593, 41085, 3999, 65226, 41713, - 12764, 0, 64409, 3596, 0, 0, 9763, 120280, 120283, 12347, 124, 12981, - 41127, 120278, 0, 0, 0, 0, 10820, 0, 0, 0, 1769, 41715, 2463, 0, 0, - 12770, 0, 1538, 0, 43124, 0, 195058, 7795, 120300, 0, 4828, 1258, 0, - 2006, 0, 0, 9498, 127032, 127033, 120289, 120288, 3939, 120290, 8846, - 8943, 120287, 120286, 2650, 4491, 1961, 42602, 11525, 120292, 1959, - 120294, 0, 11774, 41016, 0, 0, 0, 1511, 9324, 0, 10519, 66331, 3454, - 19930, 0, 41019, 0, 0, 65292, 0, 12862, 0, 0, 42143, 41828, 0, 65531, 0, - 118879, 0, 0, 0, 41826, 8865, 6402, 0, 13279, 7917, 120340, 0, 7733, 0, - 4998, 0, 0, 41950, 0, 4268, 0, 0, 0, 4013, 0, 10881, 0, 0, 0, 74788, - 2014, 0, 0, 9765, 0, 0, 0, 195059, 0, 65281, 0, 10949, 0, 0, 0, 2015, 0, - 0, 0, 66318, 74824, 0, 42517, 0, 0, 0, 0, 8094, 64468, 65909, 6474, 794, - 0, 12656, 0, 119353, 0, 1665, 0, 4833, 0, 119351, 0, 0, 189, 12611, 0, 0, - 2859, 4838, 0, 4834, 0, 0, 0, 4837, 0, 770, 0, 811, 0, 41042, 0, 41318, - 64427, 0, 0, 0, 3895, 0, 74341, 3976, 0, 42859, 10193, 3116, 7747, 0, 0, - 0, 0, 0, 0, 0, 41877, 0, 2871, 64614, 0, 999, 0, 68177, 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, 0, 0, 0, 3078, 1402, 0, 0, 0, 0, 0, 394, 3088, 0, 0, 0, - 3991, 64391, 0, 0, 424, 66328, 1999, 0, 73914, 0, 0, 0, 0, 0, 8246, 0, 0, - 0, 41840, 0, 2377, 1298, 64011, 12572, 11318, 12557, 12559, 12570, 8488, - 1003, 2373, 9446, 9447, 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, 0, 9655, 0, 2004, - 9096, 9782, 0, 9172, 0, 19965, 0, 5955, 120485, 1108, 0, 74773, 0, 0, - 64782, 3926, 0, 65210, 8798, 0, 0, 1392, 0, 0, 917557, 10606, 8065, - 118805, 10353, 10417, 0, 0, 64524, 0, 4019, 0, 0, 43280, 8219, 0, 1812, - 0, 0, 0, 0, 42410, 74448, 119132, 6054, 10697, 3169, 42297, 42322, 10642, - 3909, 74461, 0, 0, 0, 0, 0, 0, 1049, 0, 65707, 11943, 41806, 0, 42336, - 3921, 0, 11775, 64760, 11766, 1038, 42303, 9823, 0, 0, 4008, 64004, 8773, - 10733, 36, 0, 5153, 41805, 0, 73735, 763, 41808, 64910, 0, 2009, 0, 0, 0, - 9640, 119951, 0, 120695, 8621, 0, 12852, 3031, 0, 64361, 0, 182, 194718, - 0, 0, 0, 0, 9058, 366, 0, 9892, 5969, 11754, 10848, 4570, 65301, 0, 4255, - 0, 10102, 41189, 4003, 41026, 68109, 13293, 41192, 0, 0, 42251, 0, 42534, - 0, 11287, 6128, 0, 11034, 10923, 64423, 0, 65506, 0, 0, 74083, 0, 66582, - 0, 0, 119955, 0, 9817, 0, 0, 0, 12117, 66586, 4183, 10540, 66250, 127044, - 127045, 0, 0, 0, 12897, 3792, 2011, 0, 6065, 43160, 0, 194715, 8692, - 41186, 41816, 41023, 41818, 41187, 11659, 7922, 12614, 2005, 8523, - 120144, 0, 7513, 1863, 4710, 0, 5956, 7621, 120274, 127116, 4705, 716, 0, - 0, 4704, 120040, 120270, 42241, 161, 0, 74546, 66214, 4706, 0, 0, 120037, - 4709, 10680, 0, 43293, 0, 0, 119164, 0, 0, 0, 1700, 119223, 0, 0, 0, - 4004, 0, 10968, 43296, 0, 8506, 0, 0, 126996, 1005, 937, 120030, 4734, - 2870, 0, 120032, 0, 7463, 4729, 0, 235, 1384, 4728, 0, 120420, 120644, 0, - 8109, 43105, 0, 4730, 447, 13186, 1513, 4733, 120415, 0, 0, 42527, 12911, - 0, 1383, 8565, 2469, 120024, 119089, 6156, 68117, 0, 7993, 4288, 120416, - 2674, 13238, 11922, 0, 120330, 3510, 13234, 0, 120407, 5605, 42095, - 11364, 0, 1380, 65617, 120320, 120261, 13196, 13197, 120309, 120682, - 9495, 119346, 0, 5959, 0, 73976, 120305, 0, 6941, 119349, 13205, 13211, - 5801, 12769, 65905, 120316, 1283, 120302, 4779, 0, 3719, 4006, 0, 19957, - 0, 2021, 119332, 0, 0, 43028, 65493, 41838, 3875, 5962, 64341, 119339, - 9814, 43571, 5827, 3314, 7787, 0, 65494, 68153, 0, 0, 120636, 64531, 0, - 0, 0, 0, 0, 65467, 5771, 41298, 0, 9742, 521, 0, 10800, 0, 8404, 194625, - 483, 7096, 7089, 66323, 928, 0, 0, 0, 10599, 11586, 3989, 10971, 0, - 65782, 9841, 8843, 12145, 0, 10074, 120816, 0, 3769, 0, 0, 0, 0, 9573, 0, - 65290, 8849, 0, 65855, 65112, 1796, 0, 0, 0, 8164, 41301, 3502, 0, 0, - 10621, 73838, 0, 5825, 13007, 68165, 0, 0, 12661, 7608, 10354, 10418, - 42411, 2022, 0, 1409, 12195, 4001, 3112, 10824, 120639, 1390, 0, 0, 421, - 43536, 5846, 120120, 4130, 0, 7595, 42588, 7600, 0, 66035, 0, 0, 65851, - 42607, 0, 0, 3168, 0, 42134, 0, 2370, 2846, 0, 0, 0, 120132, 0, 1836, 0, - 0, 119137, 3740, 0, 6290, 65374, 120451, 65923, 3944, 66628, 120434, 0, - 6135, 3118, 74265, 119093, 120446, 0, 0, 8127, 8975, 64739, 7943, 0, 0, - 10618, 2584, 0, 0, 0, 9998, 0, 0, 0, 0, 0, 6204, 0, 0, 8279, 8776, 64954, - 4975, 74809, 0, 4267, 0, 0, 0, 0, 195046, 65700, 66562, 0, 64645, 0, 0, - 0, 12586, 0, 9242, 0, 0, 4523, 5842, 10495, 3122, 0, 7793, 0, 9328, 0, 0, - 12604, 0, 6615, 0, 0, 3986, 0, 0, 8912, 64555, 0, 0, 0, 9541, 0, 0, - 11275, 8540, 11498, 0, 0, 41040, 2459, 0, 13060, 41041, 74413, 0, 0, 0, - 0, 10450, 12551, 41043, 7020, 120353, 3765, 0, 0, 1606, 120348, 120351, - 3093, 0, 0, 0, 120649, 0, 0, 4312, 74091, 120337, 120336, 11923, 4023, - 120333, 5763, 120335, 4827, 10894, 12810, 64406, 118785, 4455, 74321, - 433, 119620, 66660, 2499, 0, 0, 0, 11973, 13089, 4293, 120329, 120328, - 42758, 12196, 42837, 0, 119319, 0, 0, 5817, 0, 0, 3120, 9797, 0, 0, 0, - 10389, 0, 0, 4895, 65358, 0, 4359, 585, 0, 3509, 0, 486, 4290, 0, 0, 0, - 0, 7004, 0, 65880, 0, 119048, 2380, 11380, 0, 0, 2376, 0, 0, 0, 5197, - 127046, 127047, 127048, 2366, 127050, 127051, 127052, 0, 0, 0, 0, 0, 0, - 0, 0, 74188, 0, 0, 0, 0, 0, 0, 0, 120049, 0, 1847, 0, 10339, 0, 42384, 0, - 4227, 74158, 0, 0, 43032, 0, 42365, 0, 12671, 11384, 0, 0, 0, 64797, 0, - 5820, 0, 0, 120065, 0, 120064, 120650, 42137, 9893, 2754, 12664, 120063, - 0, 13192, 0, 41799, 65530, 1711, 12984, 43039, 3114, 6255, 0, 118938, 0, - 10853, 926, 0, 74184, 0, 120055, 0, 43175, 0, 43037, 41798, 41035, 11583, - 0, 41801, 119088, 0, 520, 4200, 12699, 8331, 0, 3091, 41034, 0, 0, 8360, - 0, 0, 321, 4229, 64543, 0, 65563, 0, 0, 2861, 0, 10095, 0, 0, 0, 1861, 0, - 0, 0, 0, 43041, 0, 0, 0, 3859, 12181, 41660, 8209, 0, 120678, 12973, 0, - 74757, 0, 41658, 0, 0, 5760, 0, 743, 4414, 120766, 0, 42632, 917973, - 65161, 73896, 0, 0, 1405, 119063, 43220, 43341, 0, 19919, 0, 64532, - 65367, 0, 0, 0, 3513, 0, 118883, 43342, 119064, 65529, 65364, 0, 0, 6485, - 1397, 0, 65365, 0, 0, 0, 0, 0, 7471, 12079, 0, 12682, 43287, 0, 0, 0, 0, - 0, 0, 1099, 10490, 0, 10501, 65181, 74463, 0, 464, 41624, 119594, 0, 0, - 1346, 0, 917631, 64724, 64897, 423, 1818, 65144, 0, 8272, 0, 0, 4218, - 3087, 64960, 0, 43564, 0, 0, 9584, 10465, 0, 74359, 12626, 9106, 0, - 42642, 0, 64750, 9390, 0, 41797, 0, 0, 265, 41795, 64666, 0, 43530, 2752, - 0, 0, 0, 59, 0, 0, 0, 0, 0, 41810, 0, 7010, 0, 41809, 41495, 119364, 0, - 42252, 0, 8009, 3305, 43033, 511, 119320, 66255, 13127, 120067, 0, 0, 0, - 917977, 65915, 1400, 41812, 10685, 194870, 41211, 10387, 4453, 43276, - 917783, 13159, 0, 6481, 41213, 0, 0, 0, 0, 41983, 74198, 6617, 9116, 0, - 0, 462, 68110, 10493, 0, 8129, 0, 0, 74471, 6644, 11658, 0, 0, 3452, - 11906, 9581, 1385, 3098, 0, 119013, 43340, 0, 41033, 6493, 42626, 0, 0, - 11426, 0, 1681, 118789, 1204, 3755, 64661, 7235, 10170, 3966, 8911, 0, - 41841, 43338, 0, 0, 5726, 64915, 42175, 0, 0, 41497, 65044, 0, 2851, - 43017, 0, 0, 4373, 0, 0, 9587, 1789, 6671, 0, 3100, 0, 65360, 0, 0, 0, - 64922, 0, 8190, 12083, 0, 0, 6506, 64312, 74374, 2368, 0, 4419, 0, 0, - 3439, 1825, 1192, 120106, 8891, 3080, 120228, 2347, 5430, 0, 8990, 2848, - 0, 0, 0, 249, 0, 0, 0, 120658, 0, 0, 8883, 917802, 728, 68178, 995, 0, 0, - 64826, 0, 917798, 0, 0, 19945, 8091, 558, 0, 12273, 0, 0, 12112, 0, 0, 0, - 74419, 12335, 120104, 917795, 3443, 3129, 0, 12913, 65445, 0, 64891, 0, - 7725, 0, 0, 0, 8624, 0, 12446, 43295, 0, 41894, 0, 6277, 41672, 41893, - 10010, 0, 3540, 0, 835, 0, 0, 119868, 74408, 0, 73959, 5426, 4258, 0, 0, - 5424, 0, 8283, 0, 5434, 0, 0, 19917, 11408, 0, 11947, 0, 1404, 3095, - 11432, 0, 3464, 6486, 4819, 0, 0, 570, 8095, 3672, 119864, 1498, 0, 0, 0, - 431, 0, 0, 0, 0, 68167, 0, 13096, 0, 0, 0, 9516, 0, 5268, 0, 0, 0, 4450, - 120723, 11547, 64358, 0, 356, 3477, 227, 10488, 0, 382, 11418, 0, 0, 0, - 0, 0, 0, 6484, 2541, 66039, 0, 0, 0, 3549, 0, 9110, 119665, 2743, 0, - 43290, 194812, 9097, 0, 43015, 8782, 0, 776, 2524, 0, 8573, 0, 0, 0, 0, - 120572, 64944, 8952, 3856, 118818, 0, 5872, 6495, 0, 0, 0, 0, 0, 120733, - 12849, 3953, 1897, 0, 0, 11994, 4339, 74556, 0, 67843, 0, 0, 0, 74251, 0, - 5228, 0, 7868, 43184, 0, 0, 73986, 0, 0, 43022, 0, 1162, 0, 2671, 0, 0, - 0, 0, 118865, 4553, 73811, 0, 195005, 0, 0, 19921, 74331, 11424, 0, 4567, - 41891, 0, 0, 119056, 4820, 65239, 194662, 0, 0, 43042, 119212, 1377, 0, - 4897, 42821, 9250, 0, 4438, 64385, 0, 1753, 11331, 6147, 0, 43282, 8833, - 0, 0, 6504, 194667, 126979, 10719, 0, 1898, 1413, 42443, 0, 802, 12141, - 0, 0, 6648, 10671, 2528, 0, 64789, 9169, 838, 127092, 120697, 844, 5014, - 0, 256, 0, 9990, 0, 43301, 0, 7542, 65464, 9726, 0, 6489, 10048, 74326, - 0, 66573, 0, 0, 0, 11761, 194655, 0, 41094, 0, 0, 0, 0, 0, 6196, 6945, - 194628, 194890, 194631, 120491, 11816, 194943, 5733, 0, 0, 0, 41098, 0, - 41093, 0, 66626, 588, 9760, 0, 194717, 1238, 200, 0, 1660, 73916, 0, - 118905, 74362, 0, 0, 194651, 0, 0, 3394, 0, 120668, 0, 0, 0, 66219, 0, - 43284, 0, 7817, 1841, 11055, 120533, 194979, 194982, 1669, 10776, 194981, - 7701, 194980, 0, 194995, 1732, 4030, 0, 3963, 66611, 0, 41768, 6491, 0, - 65324, 914, 65323, 8071, 3538, 0, 0, 0, 0, 74367, 7614, 0, 11819, 0, - 12009, 12399, 0, 67852, 65537, 0, 10841, 0, 5301, 0, 0, 5734, 8960, 0, 0, - 65317, 0, 0, 0, 0, 12304, 0, 0, 65315, 0, 0, 0, 0, 0, 119621, 0, 74536, - 12447, 64486, 0, 0, 0, 0, 0, 0, 42767, 10915, 0, 12007, 0, 120520, 0, - 194878, 0, 0, 0, 8629, 0, 43168, 41872, 0, 4496, 0, 0, 0, 0, 0, 0, 0, - 64730, 0, 66714, 0, 0, 0, 65596, 0, 11416, 4280, 119018, 8765, 12784, - 7792, 1393, 0, 67871, 74386, 0, 8233, 43572, 0, 6683, 0, 3442, 12144, - 2841, 12543, 0, 1473, 42820, 64329, 917772, 0, 0, 6488, 357, 1048, 41100, - 0, 41104, 0, 41099, 1054, 119065, 1040, 65450, 0, 4434, 1069, 0, 0, - 74231, 917765, 0, 0, 0, 9693, 41943, 0, 41931, 41759, 12757, 4353, 0, - 1059, 9790, 8995, 0, 0, 65937, 0, 41764, 10646, 0, 118833, 0, 0, 74830, - 0, 12743, 0, 6480, 917761, 41779, 42580, 66601, 12207, 119619, 10986, - 66602, 11312, 64807, 0, 0, 41767, 0, 0, 43020, 0, 3955, 74254, 0, 0, - 917861, 0, 120735, 9770, 9246, 12230, 0, 0, 0, 10448, 41783, 41786, - 127093, 12797, 2755, 64571, 194912, 194927, 4857, 0, 4428, 12794, 73755, - 0, 0, 0, 0, 0, 5747, 194720, 0, 7978, 41092, 74571, 0, 11924, 74205, - 42144, 65015, 0, 563, 0, 0, 12798, 11271, 57, 0, 0, 0, 119043, 0, 0, - 43137, 694, 0, 9876, 0, 119168, 0, 0, 64537, 0, 277, 74385, 7229, 74459, - 0, 0, 64634, 64811, 8757, 119087, 0, 1574, 194633, 0, 2525, 4852, 5749, - 0, 13027, 42824, 120574, 1039, 9801, 10155, 5745, 188, 41858, 11592, 0, - 74015, 0, 41853, 4858, 0, 0, 436, 4771, 0, 2786, 0, 4856, 8051, 0, - 119609, 0, 9644, 0, 0, 0, 194916, 120732, 66710, 118834, 0, 73906, 0, - 127114, 0, 10234, 5843, 11939, 0, 42157, 0, 3157, 194918, 0, 0, 3504, - 119178, 0, 10822, 5149, 66029, 10226, 65142, 0, 3594, 42424, 0, 40, + 0, 0, 0, 0, 0, 0, 4220, 10725, 10433, 0, 68395, 4987, 64519, 0, 0, 0, 0, + 0, 10970, 11733, 0, 120792, 0, 19944, 0, 9009, 8551, 0, 11468, 64636, + 7575, 0, 2724, 0, 0, 12313, 119949, 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, 0, 11593, 43007, 4478, 66178, 0, 0, + 2744, 0, 4477, 118964, 814, 42066, 66183, 66204, 66194, 119961, 66198, + 41880, 66188, 66197, 78148, 11955, 66190, 66191, 41111, 66189, 73788, + 7788, 4847, 0, 0, 0, 0, 0, 1581, 6535, 78161, 12954, 430, 78160, 55259, + 78158, 194938, 5278, 4945, 42883, 4950, 0, 68625, 0, 7269, 0, 5964, + 12908, 0, 0, 74764, 74477, 119146, 194936, 4949, 0, 443, 0, 4944, 5467, + 119603, 0, 65137, 6044, 65392, 0, 4213, 0, 41303, 0, 194931, 0, 41306, + 73984, 2698, 127531, 0, 12072, 3193, 0, 41304, 824, 0, 12091, 78893, + 78894, 119816, 4673, 64804, 4678, 119820, 119819, 65059, 0, 6739, 0, + 5481, 3490, 1199, 119811, 8356, 119829, 119832, 4677, 12688, 3102, 0, + 4672, 78173, 78175, 5531, 68367, 42575, 78170, 78166, 4674, 4548, 44005, + 0, 68658, 119946, 8025, 68630, 127024, 1855, 0, 68669, 0, 119942, 127554, + 0, 0, 119652, 2745, 11797, 0, 0, 68643, 4654, 0, 0, 68638, 73993, 10525, + 4649, 65209, 0, 0, 4648, 43080, 0, 0, 0, 6246, 64950, 7828, 4650, 6777, + 6776, 6775, 4653, 7822, 78005, 0, 43187, 8669, 0, 6821, 65093, 0, 78881, + 2716, 0, 0, 0, 0, 68369, 0, 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, 0, 0, 0, 64904, 9026, 10833, 74864, 7547, 4867, 0, + 10008, 10222, 3054, 194956, 9744, 78860, 7605, 4622, 119656, 0, 0, 0, 0, + 0, 9045, 78888, 4225, 19926, 78887, 12880, 65307, 4617, 78883, 0, 41732, + 4616, 10518, 10423, 10359, 0, 5958, 0, 0, 4215, 9789, 917941, 4321, 4621, + 0, 41313, 522, 5368, 0, 65803, 0, 5366, 12201, 5372, 0, 0, 0, 7720, 7390, + 2696, 0, 0, 4638, 0, 1790, 78242, 5965, 64363, 66569, 68646, 194968, + 5376, 1835, 5335, 194966, 0, 4633, 0, 68119, 1180, 4632, 0, 5387, 5333, + 0, 0, 42094, 5331, 4634, 11928, 0, 5338, 4637, 0, 5971, 42414, 0, 1268, + 65097, 42361, 0, 0, 73853, 1427, 0, 0, 5970, 3431, 0, 10358, 10422, 4758, + 0, 1608, 2738, 0, 10455, 4753, 74026, 11344, 4222, 6240, 5231, 74384, 0, + 68377, 6248, 0, 0, 0, 42318, 0, 5229, 4757, 0, 0, 2728, 4752, 64563, + 65235, 5234, 0, 0, 0, 10713, 0, 0, 2622, 7460, 0, 0, 0, 8954, 74760, + 65189, 2632, 0, 10108, 1011, 5574, 1853, 2709, 65139, 5577, 0, 0, 118871, + 68641, 8965, 7635, 42177, 5316, 0, 5314, 6451, 5572, 0, 5312, 0, 5525, + 5330, 5319, 0, 0, 194907, 44003, 0, 0, 0, 120498, 0, 195009, 0, 74022, 0, + 64609, 0, 120634, 0, 5721, 0, 5519, 8632, 66465, 11267, 73961, 0, 5720, + 0, 1692, 4219, 4610, 8696, 4305, 0, 4609, 43478, 4614, 541, 0, 5287, + 5309, 5285, 68389, 5961, 4647, 56, 4216, 10577, 41381, 601, 4613, 0, 0, + 0, 4608, 64260, 41124, 5190, 67628, 0, 68145, 7086, 0, 119243, 67620, 0, + 2734, 11074, 0, 67627, 43593, 0, 67625, 5960, 0, 8992, 65293, 0, 1782, + 67622, 68114, 119939, 0, 68180, 5501, 119952, 42508, 7442, 43665, 359, + 41253, 68392, 6239, 119956, 41256, 0, 68134, 0, 74209, 0, 9346, 118904, + 41254, 0, 43291, 3767, 5737, 0, 4865, 0, 5740, 917997, 5736, 4368, 0, + 7193, 68137, 0, 5739, 41024, 4866, 0, 73904, 0, 4869, 120563, 0, 4223, 0, + 6650, 0, 0, 0, 0, 4870, 0, 68661, 6716, 78176, 68667, 68382, 68676, 0, + 10122, 4864, 66568, 4144, 7937, 0, 6245, 68652, 2732, 42734, 745, 0, + 195097, 0, 4777, 7821, 0, 68631, 42775, 0, 194954, 0, 3097, 0, 5966, 0, + 4778, 0, 10863, 0, 4781, 0, 64407, 0, 0, 8577, 0, 68196, 43285, 10216, + 4782, 0, 0, 120757, 68618, 12325, 43056, 8717, 0, 0, 4776, 0, 11492, + 8700, 0, 13176, 68363, 10426, 0, 917599, 10362, 0, 1715, 4849, 8242, + 9561, 73922, 43278, 42635, 0, 0, 5963, 917926, 0, 0, 4850, 0, 1607, 466, + 4853, 118995, 4854, 0, 5164, 0, 1350, 5124, 64420, 1993, 5362, 8471, + 2708, 0, 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, 0, 303, 0, 0, 0, 2437, + 0, 4221, 4844, 118869, 0, 0, 0, 0, 0, 43292, 0, 2441, 10739, 65090, 0, + 119327, 0, 2451, 2714, 119326, 0, 43379, 4937, 43376, 753, 5849, 10597, + 43089, 11722, 9248, 0, 42879, 11725, 0, 0, 2726, 3107, 73958, 4941, + 64937, 119233, 9140, 1408, 5261, 4607, 0, 181, 0, 4942, 9539, 4938, 0, + 65201, 5259, 9369, 64185, 4142, 5257, 0, 0, 4964, 5264, 64178, 64177, + 12979, 41411, 64182, 64181, 64180, 64179, 9482, 4873, 41231, 1822, 42526, + 0, 12758, 3865, 0, 0, 10500, 0, 0, 78028, 0, 9830, 43642, 389, 10893, + 7521, 0, 4872, 5463, 0, 3125, 9567, 0, 4878, 5459, 4604, 0, 9557, 5465, + 68617, 0, 11494, 0, 9563, 10865, 74570, 43279, 64186, 0, 78714, 64191, + 64190, 8898, 64188, 0, 41030, 78836, 0, 917835, 78820, 917834, 0, 78805, + 41031, 78801, 11960, 6745, 3082, 0, 78539, 73919, 10573, 41744, 7079, + 5856, 127043, 5163, 78809, 0, 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, 0, 42156, 78688, 0, + 64193, 64192, 78000, 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, 0, 64169, 64168, 64949, 10972, + 10251, 10247, 42768, 715, 64161, 43299, 9453, 5348, 10943, 120378, 0, + 11352, 550, 9910, 0, 0, 66579, 11551, 0, 0, 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, + 78196, 78192, 68136, 78190, 43412, 5064, 2431, 0, 9450, 1809, 0, 78200, + 78201, 5062, 1264, 64817, 13254, 11697, 0, 9785, 64716, 0, 3933, 74559, + 4740, 7954, 0, 0, 42609, 0, 74175, 0, 127016, 0, 0, 42130, 0, 5151, + 917829, 917823, 0, 0, 0, 7620, 3800, 65122, 0, 0, 8355, 7854, 0, 954, + 64927, 4185, 41045, 0, 41438, 41439, 68666, 10711, 4593, 0, 120584, 0, + 64774, 8053, 10532, 66727, 0, 0, 0, 64759, 6381, 5166, 9888, 0, 5148, + 42834, 0, 78205, 78206, 64140, 78204, 64131, 3119, 917814, 0, 3060, + 64135, 9986, 0, 77876, 636, 11698, 0, 0, 9916, 11701, 7836, 42741, 64137, + 8320, 78640, 8863, 0, 119960, 1477, 43289, 0, 74358, 8618, 0, 9908, 0, 0, + 0, 3937, 12312, 0, 0, 0, 64781, 912, 6349, 4536, 119963, 74532, 0, 6244, + 0, 194580, 3935, 120665, 0, 0, 11950, 5392, 42248, 65129, 68656, 5397, 0, + 12046, 12599, 0, 0, 5395, 0, 5393, 354, 68615, 119948, 78503, 0, 0, + 42039, 0, 0, 64142, 626, 0, 5895, 0, 0, 5780, 0, 0, 0, 0, 0, 43297, 0, + 4311, 4644, 8818, 0, 0, 0, 73818, 3918, 66452, 3797, 1644, 119944, 9658, + 4140, 11385, 65947, 6455, 9030, 813, 119945, 68131, 4146, 119957, 5360, + 2466, 0, 67669, 0, 6249, 42117, 0, 0, 0, 0, 74046, 120583, 4911, 988, + 917807, 0, 0, 43061, 7054, 64147, 0, 64920, 68195, 6698, 118933, 120349, + 0, 0, 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, 917866, 73736, 0, 9825, 6448, 6715, 127008, 4831, 0, 0, 0, + 5300, 4741, 42108, 0, 64159, 4736, 64148, 0, 849, 0, 78491, 43288, 0, + 66620, 0, 194920, 65549, 9496, 64598, 118866, 0, 7876, 68132, 917872, + 3928, 917870, 43378, 10706, 7198, 0, 4842, 12053, 0, 0, 4841, 0, 4171, + 12008, 6251, 3923, 1490, 0, 119591, 0, 40972, 5245, 0, 10114, 42001, + 41888, 4845, 8332, 40974, 64347, 4840, 9077, 78346, 1747, 917849, 4825, + 69240, 917852, 68655, 0, 0, 0, 0, 68628, 0, 9850, 118937, 367, 1472, + 917859, 6687, 1274, 0, 5905, 12339, 8919, 73953, 10907, 65261, 11023, + 119559, 4830, 9134, 78666, 64126, 43011, 0, 0, 64101, 0, 0, 4824, 10614, + 120390, 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, 120385, 0, 0, 0, 119053, 0, 12765, 64118, 126998, 12962, + 0, 0, 4017, 12827, 5241, 120392, 0, 41118, 3924, 0, 11366, 917843, 0, 0, + 917846, 41116, 917844, 917564, 0, 11363, 12057, 11917, 1567, 74000, 4721, + 0, 66202, 8957, 4139, 0, 0, 0, 0, 0, 12740, 0, 4722, 6816, 0, 12759, + 4725, 0, 4726, 0, 0, 0, 917904, 917905, 0, 12755, 12762, 4015, 0, 8052, + 476, 0, 0, 0, 64212, 41020, 1382, 64209, 64216, 64215, 64214, 1656, + 41831, 0, 0, 41843, 8720, 3908, 1452, 13111, 0, 64067, 0, 8552, 64113, + 41845, 3849, 78732, 66232, 9778, 120066, 5891, 7064, 55, 9948, 917911, 0, + 0, 7935, 67586, 0, 1114, 0, 67585, 78675, 120053, 120050, 120051, 3938, + 120057, 65417, 64717, 120060, 120061, 65415, 120059, 6292, 65303, 7955, + 6452, 4713, 917887, 66249, 917885, 917890, 917891, 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, 0, 12006, 0, 0, 0, 0, 0, 65414, 6454, 1229, 0, 66437, 66025, 78699, + 0, 42500, 120508, 4809, 9623, 917874, 78694, 917880, 917877, 917878, + 65405, 68159, 917881, 917882, 5365, 4545, 8901, 917566, 119555, 4813, 0, + 0, 5925, 4808, 64330, 0, 65475, 118940, 0, 4814, 0, 4810, 0, 0, 64928, + 10543, 0, 3522, 0, 414, 65404, 0, 0, 6456, 73820, 0, 6691, 42193, 0, 0, + 0, 74495, 0, 0, 0, 118820, 9751, 65407, 0, 11770, 3919, 0, 0, 65061, 0, + 0, 0, 12235, 0, 0, 195025, 64092, 0, 64080, 0, 64090, 0, 0, 10162, 10310, + 0, 8454, 0, 42038, 387, 41363, 12737, 0, 4780, 43368, 0, 64310, 64621, + 6732, 0, 0, 0, 0, 0, 8896, 0, 375, 6976, 66582, 119005, 0, 0, 0, 119202, + 119203, 12526, 43120, 2315, 0, 1938, 119197, 0, 4529, 119200, 119201, + 119198, 119199, 0, 0, 0, 13150, 64492, 0, 0, 0, 12902, 0, 42891, 66327, + 74298, 0, 10799, 0, 2587, 66372, 0, 4193, 120334, 4241, 0, 7998, 0, 0, 0, + 0, 2316, 118821, 0, 0, 0, 64297, 74799, 0, 74140, 0, 5373, 0, 0, 3762, + 10015, 0, 119232, 0, 41590, 0, 0, 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, 0, 68138, 13072, 1894, 0, 0, 65478, 43310, 7231, 0, + 11773, 0, 0, 0, 0, 2551, 0, 6453, 10200, 6235, 0, 119237, 0, 0, 4470, + 119613, 0, 7780, 5369, 118958, 5249, 0, 5367, 8756, 0, 0, 5377, 120585, + 68143, 1688, 78245, 0, 0, 0, 0, 0, 44020, 6808, 41319, 1300, 10650, + 41692, 64505, 4668, 0, 119624, 1465, 10850, 3943, 0, 41205, 41315, 0, 0, + 0, 5352, 0, 0, 8839, 41314, 7384, 7785, 41204, 0, 41209, 0, 0, 43607, 0, + 0, 5420, 3897, 0, 0, 74417, 4018, 0, 68127, 0, 0, 0, 0, 127526, 2561, + 68621, 3542, 41915, 12076, 7951, 68152, 118857, 5303, 6276, 1706, 0, + 78751, 74116, 0, 65150, 41819, 0, 73951, 10847, 41822, 9985, 860, 0, + 10506, 0, 0, 10753, 10830, 0, 615, 64490, 7574, 0, 77922, 0, 12909, + 43016, 64559, 127028, 0, 0, 0, 2020, 0, 4022, 0, 0, 77923, 0, 41691, 0, + 0, 74329, 0, 64622, 9070, 0, 68411, 3911, 42829, 43122, 1033, 74440, 0, + 7000, 3904, 0, 0, 0, 0, 127012, 13123, 10846, 3450, 0, 7397, 118807, 0, + 42778, 10000, 41088, 449, 0, 3777, 68458, 0, 9636, 0, 10738, 0, 9367, + 593, 41085, 3999, 65226, 41713, 12764, 0, 64409, 3596, 0, 0, 9763, + 120280, 120283, 12347, 124, 12981, 41127, 2092, 0, 0, 0, 0, 10820, 43987, + 0, 0, 1769, 41715, 2463, 78489, 0, 12770, 0, 1538, 0, 43124, 0, 195058, + 7795, 120300, 0, 4828, 1258, 0, 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, 0, + 1511, 9324, 78211, 10519, 66331, 3454, 19930, 0, 41019, 0, 0, 65292, + 6822, 12862, 0, 0, 42143, 41828, 78207, 65531, 78208, 118879, 55223, 0, + 0, 41826, 8865, 6402, 0, 13279, 7917, 120340, 0, 7733, 0, 4998, 0, 0, + 41950, 0, 4268, 0, 0, 0, 4013, 0, 10881, 0, 0, 0, 74788, 2014, 0, 0, + 9765, 0, 0, 0, 195059, 78357, 65281, 0, 10949, 0, 0, 0, 2015, 0, 0, 0, + 66318, 43233, 0, 42517, 0, 0, 0, 12698, 8094, 43445, 65909, 6474, 794, 0, + 12656, 0, 119353, 0, 1665, 0, 4833, 0, 119351, 0, 0, 189, 12611, 0, 0, + 2859, 4838, 0, 4834, 65078, 0, 0, 4837, 0, 770, 0, 811, 0, 41042, 917551, + 41318, 64427, 0, 0, 78848, 3895, 0, 74341, 3976, 0, 42859, 10193, 3116, + 7747, 0, 0, 0, 0, 0, 43686, 78846, 41877, 0, 2871, 64614, 0, 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, 0, 0, 0, + 119248, 394, 3088, 0, 0, 0, 3991, 64391, 0, 0, 424, 66328, 1999, 0, + 73914, 0, 0, 0, 0, 42231, 8246, 0, 0, 0, 41840, 0, 2377, 1298, 64011, + 12572, 11318, 12557, 12559, 12570, 8488, 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, 0, 9655, 0, 2004, 9096, 9782, 0, 9172, 0, 19965, + 0, 5955, 67666, 1108, 0, 74773, 0, 0, 64782, 3926, 0, 65210, 8798, 0, 0, + 1392, 0, 0, 917557, 10606, 8065, 118805, 10353, 10417, 0, 0, 64524, 0, + 4019, 0, 0, 43280, 8219, 68402, 1812, 0, 0, 0, 0, 42410, 74448, 119132, + 6054, 10697, 3169, 42297, 42322, 10642, 3909, 9950, 0, 0, 0, 68678, 0, 0, + 1049, 0, 65707, 2304, 41806, 0, 42336, 3921, 0, 11775, 64760, 11766, + 1038, 42303, 9823, 127278, 69236, 4008, 64004, 8773, 10733, 36, 0, 5153, + 41805, 0, 73735, 763, 41808, 64910, 0, 2009, 0, 0, 0, 9640, 119951, 0, + 120695, 8621, 0, 12852, 3031, 0, 64361, 0, 182, 194718, 0, 0, 119950, 0, + 9058, 366, 0, 9892, 5969, 11754, 10848, 4570, 65301, 44013, 4255, 0, + 10102, 41189, 4003, 41026, 68109, 13293, 41192, 0, 0, 42251, 0, 42534, + 65179, 11287, 6128, 0, 11034, 10923, 64423, 0, 65506, 0, 0, 74083, 0, + 9932, 0, 0, 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, 127116, + 4705, 716, 78004, 0, 4704, 120040, 120270, 42241, 161, 43977, 74546, + 66214, 4706, 0, 0, 42672, 4709, 10680, 0, 43293, 0, 0, 119164, 120328, 0, + 0, 1700, 119223, 0, 0, 0, 4004, 0, 10968, 43296, 0, 8506, 0, 0, 126996, + 1005, 937, 78216, 4734, 2870, 0, 78218, 0, 7463, 4729, 0, 235, 1384, + 4728, 0, 120420, 120644, 120421, 8109, 43105, 0, 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, 0, 73976, + 120305, 43371, 6941, 119349, 13205, 13211, 5801, 12769, 65905, 41697, + 1283, 120302, 4779, 0, 3719, 4006, 0, 19957, 0, 2021, 119332, 0, 0, + 43028, 65493, 41838, 3875, 5962, 64341, 119339, 9814, 43457, 5827, 3314, + 7787, 78234, 65494, 68153, 0, 0, 120636, 64531, 120692, 0, 0, 0, 66316, + 65467, 5771, 41298, 0, 9742, 521, 0, 10800, 0, 8404, 194625, 483, 7096, + 7089, 66323, 928, 0, 0, 119018, 10599, 11586, 3989, 10971, 0, 65782, + 9841, 8843, 12145, 0, 10074, 78548, 0, 3769, 0, 0, 0, 0, 9573, 0, 65290, + 8849, 0, 65855, 65112, 1796, 120505, 0, 78555, 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, 0, 7595, 42588, 7600, 120121, + 66035, 0, 0, 65851, 42607, 0, 0, 3168, 0, 42134, 0, 2370, 2846, 0, 0, 0, + 120132, 0, 1836, 0, 0, 119137, 3740, 0, 6290, 65374, 120451, 65923, 3944, + 66628, 120434, 0, 6135, 3118, 74265, 119093, 120446, 0, 0, 8127, 8975, + 64739, 7943, 0, 0, 10618, 2584, 0, 0, 0, 9998, 0, 0, 0, 0, 0, 6204, 0, 0, + 8279, 8776, 64954, 4975, 74809, 120130, 4267, 0, 42206, 0, 0, 195046, + 65700, 66562, 0, 64645, 0, 0, 0, 12586, 0, 9242, 0, 0, 4523, 5842, 10495, + 3122, 0, 7793, 78275, 9328, 0, 0, 12604, 0, 6615, 67650, 0, 3986, 44025, + 0, 8912, 64555, 7409, 0, 0, 9541, 78276, 0, 11275, 8540, 11498, 0, 0, + 41040, 2459, 0, 13060, 41041, 74413, 0, 0, 0, 68427, 10450, 12551, 41043, + 7020, 120353, 3765, 0, 0, 1606, 120348, 120351, 3093, 68436, 0, 0, + 120649, 0, 0, 4312, 74091, 120337, 120336, 11923, 4023, 120333, 5763, + 120335, 4827, 10894, 12810, 64406, 118785, 4455, 74321, 433, 119620, + 66660, 2499, 0, 0, 0, 11973, 13089, 4293, 120329, 42224, 42758, 12196, + 42837, 42226, 119319, 0, 119126, 5817, 0, 55277, 3120, 9797, 0, 0, 0, + 10389, 0, 0, 4895, 65358, 0, 4359, 585, 0, 3509, 0, 486, 4290, 5758, 0, + 0, 0, 7004, 0, 65880, 0, 119048, 2380, 11380, 0, 0, 2376, 0, 917847, 0, + 5197, 127046, 127047, 127048, 2366, 127050, 127051, 120554, 120045, 0, 0, + 0, 0, 0, 0, 0, 74188, 0, 0, 0, 120047, 0, 0, 0, 120049, 0, 1847, 0, + 10339, 0, 42384, 0, 4227, 74158, 0, 0, 43032, 0, 42365, 0, 12671, 11384, + 0, 0, 0, 64797, 0, 5820, 0, 120052, 120065, 0, 120064, 120650, 42137, + 9893, 2754, 12664, 120063, 0, 7377, 0, 41799, 65530, 1711, 12984, 43039, + 3114, 6255, 0, 118938, 0, 10853, 926, 0, 74184, 0, 120055, 0, 43175, 0, + 43037, 41798, 41035, 11583, 0, 41801, 119088, 0, 520, 4200, 12699, 8331, + 0, 3091, 41034, 127353, 0, 8360, 0, 78044, 321, 4229, 64543, 0, 65563, 0, + 917974, 2861, 0, 10095, 0, 0, 0, 1861, 0, 0, 0, 0, 43041, 0, 0, 0, 3859, + 12181, 41660, 8209, 0, 73867, 12973, 0, 74757, 127514, 41658, 0, 0, 5760, + 0, 743, 4414, 120766, 0, 42632, 917973, 65161, 73896, 0, 0, 1405, 119063, + 43220, 43341, 0, 19919, 0, 64532, 65367, 43710, 0, 0, 3513, 0, 118883, + 43342, 119064, 65529, 65364, 0, 0, 6485, 1397, 0, 41986, 0, 0, 0, 74097, + 0, 7471, 12079, 0, 12682, 43287, 0, 0, 0, 0, 0, 0, 1099, 10490, 0, 10501, + 65181, 74463, 0, 464, 41624, 65283, 67663, 78222, 1346, 0, 917631, 64724, + 64897, 423, 1818, 65144, 0, 8272, 0, 19911, 4218, 3087, 64960, 127234, + 43564, 0, 0, 9584, 10465, 0, 74359, 12626, 9106, 0, 42642, 0, 64750, + 9390, 0, 41797, 0, 0, 265, 41795, 64666, 0, 43530, 2752, 0, 0, 0, 59, 0, + 0, 0, 0, 77873, 41810, 0, 7010, 0, 41809, 41495, 119364, 0, 42252, 42213, + 8009, 3305, 43033, 511, 119320, 66255, 13127, 120067, 0, 0, 0, 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, 0, 3452, 11906, + 9581, 1385, 3098, 0, 119013, 43340, 0, 41033, 6493, 42626, 0, 0, 11426, + 0, 1681, 118789, 1204, 3755, 64661, 7235, 10170, 3966, 8911, 0, 41841, + 43338, 0, 0, 5726, 64915, 42175, 0, 0, 41497, 65044, 0, 2851, 43017, 0, + 0, 4373, 78058, 0, 9587, 1789, 6671, 0, 3100, 0, 65360, 0, 127510, 0, + 64922, 0, 8190, 12083, 0, 0, 6506, 64312, 74374, 2368, 0, 4419, 0, + 119125, 3439, 1825, 1192, 120106, 8891, 3080, 120228, 2347, 5430, 0, + 8990, 2848, 0, 0, 0, 249, 0, 0, 0, 120658, 0, 0, 8883, 917802, 728, + 68178, 995, 0, 0, 64826, 0, 917798, 0, 0, 19945, 8091, 558, 0, 12273, + 194814, 0, 12112, 0, 0, 0, 74419, 12335, 120104, 917795, 3443, 3129, 0, + 2102, 65445, 78258, 64891, 0, 7725, 0, 78255, 0, 8624, 69246, 12446, + 43295, 0, 41894, 0, 6277, 41672, 41893, 10010, 0, 3540, 0, 835, 0, 69816, + 119868, 74408, 0, 73959, 5426, 4258, 0, 0, 5424, 0, 8283, 0, 5434, 0, 0, + 19917, 11408, 0, 11947, 0, 1404, 3095, 11432, 194813, 3464, 6486, 4819, + 0, 0, 570, 8095, 3672, 119864, 1498, 67866, 0, 0, 431, 0, 0, 0, 0, 68167, + 0, 13096, 0, 0, 43408, 9516, 0, 5268, 42230, 42220, 0, 4450, 120723, + 11547, 43417, 0, 356, 3477, 227, 10488, 68203, 382, 11418, 0, 0, 0, 0, 0, + 0, 6484, 2541, 66039, 0, 78718, 0, 3549, 0, 9110, 119665, 2743, 0, 43290, + 194812, 9097, 0, 43015, 8782, 0, 776, 2524, 42707, 8573, 0, 0, 0, 0, + 42694, 64944, 8952, 3856, 118818, 0, 5872, 6495, 0, 0, 0, 0, 0, 120733, + 12849, 3953, 1897, 0, 65094, 11994, 4339, 74556, 0, 67843, 0, 0, 0, + 68473, 74104, 5228, 0, 7868, 43184, 0, 0, 73986, 43438, 0, 43022, 0, + 1162, 0, 2671, 0, 0, 0, 0, 118865, 4553, 73811, 0, 195005, 0, 0, 19921, + 74331, 11424, 195006, 4567, 41891, 0, 0, 55249, 4820, 65239, 194662, 0, + 0, 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, 127092, 120697, 844, 5014, 0, 256, 0, 9990, 0, 42739, + 0, 7542, 65464, 9726, 0, 6489, 10048, 74326, 78719, 66573, 0, 78724, + 78712, 11761, 194655, 0, 41094, 0, 0, 0, 0, 0, 6196, 6945, 194628, + 194890, 194631, 120491, 11816, 194943, 5733, 0, 0, 0, 41098, 0, 41093, 0, + 66626, 588, 9760, 0, 194717, 1238, 200, 0, 1660, 73916, 0, 118905, 74362, + 0, 0, 194651, 0, 0, 3394, 194894, 120668, 0, 0, 0, 66219, 0, 43284, + 194657, 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, 78713, 65328, 0, 74367, 7614, 0, + 11819, 0, 12009, 12399, 0, 67852, 65537, 0, 10841, 43430, 5301, 0, 0, + 5734, 8960, 0, 127527, 65317, 77880, 0, 0, 0, 12304, 0, 0, 65315, 0, 0, + 0, 0, 0, 119621, 0, 74536, 12447, 64486, 0, 0, 0, 0, 0, 0, 42767, 10915, + 0, 12007, 43695, 120520, 11975, 194878, 0, 0, 2555, 8629, 0, 43168, + 41872, 43706, 4496, 194879, 0, 0, 0, 0, 0, 0, 64730, 0, 66714, 68222, 0, + 0, 65596, 0, 11416, 4280, 67655, 8765, 12784, 7792, 1393, 127242, 67871, + 74386, 0, 8233, 43572, 0, 6683, 0, 3442, 12144, 2841, 12543, 0, 1473, + 42820, 64329, 917772, 0, 68642, 6488, 357, 1048, 41100, 0, 41104, 0, + 41099, 1054, 119065, 1040, 65450, 0, 4434, 1069, 0, 118862, 74231, + 917765, 0, 0, 0, 9693, 41943, 0, 41931, 41759, 12757, 4353, 0, 1059, + 9790, 8995, 0, 0, 65937, 0, 41764, 10646, 0, 118833, 0, 0, 74830, 78569, + 12743, 0, 6480, 917761, 41779, 42580, 66601, 12207, 119619, 6335, 66602, + 11312, 64807, 0, 0, 41767, 0, 0, 43020, 0, 3955, 74254, 0, 0, 917861, 0, + 77926, 9770, 9246, 12230, 0, 0, 0, 10448, 41783, 41786, 127093, 12797, + 2755, 64571, 78578, 194927, 4857, 0, 4428, 12794, 73755, 0, 78574, 0, 0, + 0, 5747, 78825, 0, 7978, 41092, 74571, 0, 11924, 74205, 42144, 65015, 0, + 563, 0, 0, 12798, 11271, 57, 0, 0, 917860, 119043, 0, 0, 43137, 694, 0, + 9876, 0, 119168, 0, 78822, 64537, 0, 277, 74385, 7229, 12761, 0, 0, + 13025, 64811, 8757, 78824, 0, 1574, 7381, 0, 2525, 4852, 5749, 68465, + 13027, 42824, 120574, 1039, 9801, 10155, 5745, 188, 41858, 11592, 0, + 74015, 9055, 41853, 4858, 917780, 0, 436, 4771, 0, 2786, 0, 4856, 8051, + 0, 119609, 0, 9644, 0, 0, 0, 194916, 120732, 66710, 118834, 0, 73906, 0, + 127114, 0, 10234, 5843, 11939, 0, 42157, 0, 3157, 194918, 68393, 0, 3504, + 119178, 0, 10822, 5149, 66029, 10226, 65142, 0, 3594, 42424, 194959, 40, 12657, 0, 0, 386, 0, 8834, 0, 12815, 43574, 0, 73907, 0, 74196, 7220, - 74504, 0, 74316, 0, 0, 4304, 74503, 8160, 0, 194753, 0, 0, 0, 1348, 0, 0, - 0, 13303, 0, 0, 194755, 7599, 1278, 0, 13269, 0, 0, 74387, 0, 0, 74492, - 6097, 7568, 8780, 4982, 0, 74501, 194763, 0, 194762, 2672, 3735, 194735, - 13138, 42266, 9484, 10724, 41202, 119024, 0, 0, 0, 9487, 0, 194765, 3842, - 195034, 195056, 12442, 6193, 9791, 0, 0, 42516, 7228, 7559, 74803, - 194689, 194851, 11399, 119219, 194856, 194855, 0, 194857, 3604, 0, 0, 0, - 0, 0, 42507, 1962, 194861, 194696, 42505, 11660, 0, 0, 0, 6995, 74173, - 5437, 74174, 10669, 8702, 7964, 194706, 0, 199, 194843, 4105, 194845, - 194701, 194847, 194710, 119875, 13148, 7560, 0, 9226, 0, 195070, 6472, - 65814, 73954, 0, 4724, 0, 0, 9191, 0, 0, 0, 0, 195024, 10196, 7886, 0, - 6585, 0, 6680, 195042, 0, 195051, 6679, 74412, 0, 194866, 74421, 11382, - 0, 0, 0, 0, 194833, 194832, 6681, 194834, 12693, 194836, 194839, 194838, - 194841, 194840, 65442, 119610, 118887, 12166, 74415, 66248, 194816, 0, - 194818, 194817, 194820, 194819, 5297, 7042, 13284, 6112, 7968, 194825, - 73929, 194738, 194736, 65746, 0, 74409, 74389, 194826, 4342, 42839, - 194831, 1677, 0, 0, 0, 917855, 11091, 11011, 2719, 0, 0, 0, 64495, 0, 0, - 7585, 65169, 42845, 4308, 917858, 74177, 7505, 543, 64916, 64736, 0, 0, - 66670, 0, 118922, 19911, 0, 43158, 7902, 0, 65265, 194639, 0, 0, 0, 0, 0, + 74504, 0, 74316, 0, 77932, 4304, 74503, 8160, 78707, 194753, 0, 0, 0, + 1348, 0, 78597, 0, 13303, 0, 0, 194755, 7599, 1278, 43616, 13269, 0, 0, + 74387, 78179, 78598, 74492, 6097, 7568, 8780, 4982, 0, 74501, 194763, + 78592, 194762, 2672, 3735, 194735, 13138, 42266, 9484, 10724, 41202, + 119024, 0, 43742, 0, 9487, 119959, 119117, 3842, 195034, 78668, 12442, + 6193, 9791, 0, 0, 42516, 7228, 7559, 74803, 78468, 194851, 11399, 119219, + 194691, 194855, 194690, 194857, 3604, 0, 119188, 0, 78540, 78541, 42507, + 1962, 78490, 78476, 42505, 11660, 0, 2072, 0, 6995, 74173, 5437, 74174, + 10669, 8702, 7964, 194706, 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, 0, 0, 195024, 10196, 7886, 0, 6585, + 0, 6680, 195042, 0, 195051, 6679, 74412, 0, 194866, 74421, 11382, 0, 0, + 0, 0, 194833, 194832, 6681, 194834, 12693, 194836, 42727, 194838, 194841, + 78195, 65442, 119610, 78199, 12166, 43248, 66248, 194816, 0, 194818, + 194817, 194820, 194819, 5297, 7042, 13284, 6112, 7968, 194825, 73927, + 194738, 194736, 65746, 0, 74409, 74389, 194826, 4342, 42839, 194831, + 1677, 0, 0, 194806, 917855, 11091, 11011, 2719, 0, 0, 119595, 64495, 0, + 0, 7585, 65169, 2052, 4308, 917858, 74177, 7505, 543, 64916, 64736, 0, 0, + 64655, 0, 118922, 2064, 0, 43158, 7902, 0, 65265, 194639, 0, 0, 0, 0, 0, 0, 12994, 0, 10828, 0, 6228, 4307, 3482, 0, 0, 0, 0, 506, 74573, 41194, - 65735, 0, 0, 41195, 0, 8169, 0, 8841, 0, 516, 0, 41197, 119051, 34, 0, - 120186, 120185, 1612, 74333, 120182, 120181, 74308, 12001, 120178, 10242, - 64564, 120179, 120174, 6584, 7749, 11037, 0, 1758, 0, 10667, 10560, - 120197, 120756, 1935, 11517, 120193, 120196, 120195, 1931, 120189, 74839, - 120191, 1217, 64702, 12643, 825, 0, 194905, 12294, 0, 194908, 9138, - 194910, 194902, 12631, 194911, 11080, 74554, 0, 5591, 1239, 0, 11313, 0, - 3403, 0, 0, 64364, 0, 0, 74582, 8998, 12988, 0, 9152, 0, 0, 194898, - 67589, 41850, 64290, 3433, 0, 12615, 1594, 65607, 6914, 67603, 0, 119569, + 65735, 2055, 43255, 41195, 0, 8169, 0, 8841, 0, 516, 0, 2063, 119051, 34, + 0, 120186, 11504, 1612, 74333, 120182, 74520, 74308, 12001, 120178, + 10242, 64564, 120179, 120174, 6584, 7749, 11037, 0, 1758, 0, 10667, + 10560, 120197, 120756, 1935, 11517, 120193, 120196, 120195, 1931, 120189, + 74839, 120191, 1217, 64702, 12643, 825, 0, 194905, 12294, 127261, 78834, + 9138, 78831, 78833, 12631, 78829, 11080, 74554, 0, 5591, 1239, 0, 11313, + 0, 3403, 0, 0, 64364, 0, 0, 74582, 8998, 12988, 0, 9152, 0, 0, 194898, + 67589, 41850, 64290, 3433, 0, 12615, 1594, 42192, 6914, 67603, 0, 119569, 74565, 41353, 67602, 67611, 4337, 0, 194897, 918, 65035, 41351, 7681, - 194900, 42577, 41393, 12668, 194904, 2477, 0, 0, 0, 0, 67604, 194880, 0, - 573, 194881, 194884, 11417, 194886, 194885, 194888, 67599, 0, 194889, - 67607, 11482, 0, 0, 3357, 0, 194891, 4207, 1288, 194892, 194895, 194894, - 0, 11589, 66354, 194872, 0, 0, 64602, 194670, 0, 0, 42788, 0, 64480, - 194875, 8423, 3348, 448, 194879, 9717, 0, 0, 997, 0, 0, 0, 0, 11440, - 11379, 42000, 13139, 0, 65013, 126999, 0, 73796, 0, 0, 12035, 0, 2818, 0, - 0, 73793, 0, 4172, 0, 0, 8373, 10873, 12197, 0, 0, 0, 0, 0, 126977, 0, 0, - 194865, 126982, 74563, 64828, 11419, 194868, 766, 1257, 0, 0, 11381, - 3265, 66617, 3274, 0, 0, 0, 0, 0, 41989, 0, 0, 0, 3263, 0, 65672, 0, - 3270, 64539, 11489, 0, 0, 0, 0, 9505, 65518, 0, 756, 195052, 0, 0, 0, - 7261, 0, 186, 0, 119156, 5770, 13179, 65830, 12612, 12949, 64856, 12800, - 0, 74203, 64718, 0, 0, 0, 118929, 0, 11578, 0, 119296, 0, 0, 0, 0, 74568, - 9254, 0, 1794, 120217, 64521, 5624, 120220, 120221, 119958, 120223, 3617, - 66636, 64886, 120211, 120212, 120213, 120214, 1872, 66508, 120467, 41079, - 10748, 5502, 119330, 4452, 0, 0, 0, 4511, 0, 0, 0, 11425, 0, 0, 1231, 0, - 0, 0, 9003, 8192, 0, 5305, 9653, 10616, 8694, 9546, 0, 0, 120478, 120200, - 65205, 120202, 64063, 9878, 74780, 119626, 120207, 64058, 8799, 42131, 0, - 64062, 1028, 64060, 64059, 837, 10567, 0, 43103, 0, 0, 11427, 2902, - 64043, 64042, 66464, 10756, 0, 42606, 64045, 64044, 0, 10076, 64040, - 64039, 0, 1034, 3392, 0, 43091, 64033, 64032, 65468, 64038, 64037, 64036, - 64035, 4291, 194928, 64015, 64014, 64681, 194930, 0, 194944, 0, 43090, 0, - 3476, 8973, 64012, 42473, 64010, 64008, 64007, 2003, 7706, 64517, 119183, + 194900, 42577, 41393, 12668, 194904, 2477, 0, 0, 127302, 0, 67604, + 194880, 127235, 573, 194881, 194884, 11417, 194886, 194885, 194888, + 67599, 0, 194889, 67607, 11482, 0, 0, 3357, 0, 42223, 4207, 1288, 78842, + 78839, 68419, 78837, 11589, 42195, 194872, 917627, 127263, 64602, 67618, + 0, 0, 42788, 68416, 64480, 194875, 8423, 3348, 448, 68476, 9717, 0, 0, + 997, 0, 0, 0, 0, 11440, 11379, 42000, 13139, 42221, 65013, 126999, 0, + 73796, 0, 119228, 12035, 0, 2818, 0, 0, 73793, 0, 4172, 0, 0, 8373, + 10873, 12197, 0, 0, 0, 0, 0, 78210, 0, 0, 194865, 126982, 74563, 64828, + 11419, 194868, 766, 1257, 0, 118845, 11381, 3265, 66617, 3274, 0, 0, 0, + 0, 119092, 41989, 0, 0, 0, 3263, 0, 65672, 0, 3270, 64539, 11489, 0, 0, + 0, 0, 9505, 65518, 194776, 756, 195052, 0, 0, 0, 7261, 0, 186, 0, 119156, + 5770, 13179, 65830, 12612, 12949, 64856, 12800, 0, 74203, 64718, 0, 0, 0, + 118929, 0, 11578, 0, 119296, 0, 0, 0, 0, 74568, 9254, 0, 1794, 120217, + 64521, 5624, 120220, 120221, 119958, 120223, 3617, 66636, 64886, 120211, + 120212, 120213, 120214, 1872, 66508, 120467, 41079, 10748, 5502, 119330, + 4452, 0, 0, 917879, 4511, 0, 0, 64678, 11425, 0, 43245, 1231, 0, 0, 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, 66464, 10756, 0, 42606, 64045, 64044, 43979, 10076, 64040, + 43060, 0, 1034, 3392, 0, 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, 0, 0, 4767, 9343, 64049, 64048, 120034, 1133, 64053, 64052, - 64051, 64050, 41340, 0, 0, 10005, 12329, 41333, 0, 8489, 1942, 0, 0, - 42520, 0, 0, 0, 10760, 64023, 64022, 64021, 6582, 0, 0, 64025, 9167, - 42151, 0, 0, 2026, 64019, 64018, 64017, 64016, 12768, 0, 7582, 0, 118915, - 0, 0, 0, 0, 120539, 0, 41411, 13094, 0, 7532, 41414, 0, 3179, 0, 64769, - 0, 0, 11461, 74454, 10751, 9051, 0, 0, 10535, 0, 0, 0, 2008, 64031, - 64030, 294, 41874, 0, 126991, 65929, 0, 0, 0, 0, 64028, 8146, 64026, - 41788, 194844, 0, 118795, 0, 119887, 119888, 0, 119886, 119891, 119892, - 119889, 11433, 119895, 119896, 0, 7801, 65578, 0, 12915, 0, 3297, 9699, - 0, 1135, 0, 0, 0, 1995, 7927, 0, 0, 2552, 41546, 60, 0, 8649, 41549, 0, - 0, 0, 6682, 0, 0, 64710, 41547, 0, 2013, 0, 119899, 119900, 119897, - 119898, 12832, 119904, 8081, 8362, 3537, 119908, 9137, 119906, 8999, 0, - 119909, 3466, 0, 0, 1996, 0, 3453, 6282, 0, 2002, 2000, 120175, 537, 0, - 4179, 65119, 1998, 0, 1842, 0, 0, 9628, 0, 12081, 9826, 64502, 1767, 0, - 0, 0, 120201, 0, 0, 0, 3059, 0, 120204, 119953, 120205, 0, 0, 0, 4100, - 920, 1811, 1355, 0, 0, 3592, 10078, 0, 0, 0, 8592, 65870, 68164, 0, + 43453, 64050, 41340, 118975, 0, 10005, 12329, 41333, 0, 8489, 1942, 0, 0, + 42520, 0, 0, 0, 10760, 64023, 64022, 64021, 6582, 43670, 0, 64025, 9167, + 42151, 78244, 0, 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, 0, 68218, 55274, 2008, 64031, 64030, 294, + 41874, 0, 126991, 65929, 0, 0, 0, 0, 64028, 8146, 64026, 41788, 194844, + 0, 118795, 6343, 43247, 119888, 0, 119886, 119891, 119892, 119889, 11433, + 119895, 119896, 0, 7801, 65578, 194839, 12915, 43968, 3297, 9699, 194955, + 1135, 0, 0, 0, 1995, 6722, 0, 0, 2552, 41546, 60, 68394, 8649, 41549, + 78496, 0, 0, 6682, 0, 78679, 64710, 41547, 0, 2013, 0, 78530, 78532, + 78528, 78529, 12832, 78493, 8081, 8362, 3537, 119908, 9137, 119906, 8999, + 0, 78533, 3466, 0, 0, 1996, 0, 3453, 6282, 0, 2002, 2000, 120175, 537, 0, + 4179, 65119, 1998, 0, 1842, 0, 0, 9628, 68446, 12081, 9826, 64502, 1767, + 0, 0, 0, 120201, 0, 0, 0, 3059, 44024, 120204, 119953, 120205, 0, 0, 0, + 4100, 920, 1811, 1355, 0, 0, 3592, 10078, 0, 0, 0, 8592, 65870, 68164, 0, 10742, 0, 0, 1994, 9281, 3296, 12865, 1997, 1895, }; Modified: python/branches/py3k/Objects/unicodetype_db.h ============================================================================== --- python/branches/py3k/Objects/unicodetype_db.h (original) +++ python/branches/py3k/Objects/unicodetype_db.h Thu Mar 18 23:11:01 2010 @@ -64,11 +64,13 @@ {0, 10795, 0, 0, 0, 1921}, {0, 65373, 0, 0, 0, 1921}, {0, 10792, 0, 0, 0, 1921}, + {10815, 0, 10815, 0, 0, 1801}, {0, 65341, 0, 0, 0, 1921}, {0, 69, 0, 0, 0, 1921}, {0, 71, 0, 0, 0, 1921}, {10783, 0, 10783, 0, 0, 1801}, {10780, 0, 10780, 0, 0, 1801}, + {10782, 0, 10782, 0, 0, 1801}, {65326, 0, 65326, 0, 0, 1801}, {65330, 0, 65330, 0, 0, 1801}, {65331, 0, 65331, 0, 0, 1801}, @@ -175,6 +177,8 @@ {0, 54756, 0, 0, 0, 1921}, {0, 54787, 0, 0, 0, 1921}, {0, 54753, 0, 0, 0, 1921}, + {0, 54754, 0, 0, 0, 1921}, + {0, 54721, 0, 0, 0, 1921}, {58272, 0, 58272, 0, 0, 1801}, {0, 0, 0, 0, 0, 5889}, {42877, 7545, 42877, 0, 0, 3969}, @@ -185,508 +189,508 @@ /* type indexes */ #define SHIFT 7 static unsigned char index1[] = { - 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 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, 40, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 16, 50, 51, 52, - 16, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 63, 63, 64, 65, 66, 63, - 63, 63, 67, 68, 69, 63, 63, 63, 63, 63, 63, 70, 16, 71, 72, 73, 74, 75, - 76, 63, 77, 78, 79, 80, 81, 82, 83, 63, 63, 84, 85, 40, 40, 40, 40, 40, - 40, 86, 40, 40, 40, 40, 40, 87, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, - 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, - 40, 40, 40, 40, 40, 40, 40, 40, 88, 89, 90, 91, 40, 40, 40, 92, 40, 40, - 40, 93, 94, 40, 40, 40, 40, 40, 95, 40, 40, 40, 96, 40, 40, 40, 40, 40, - 40, 40, 40, 40, 40, 97, 98, 99, 40, 40, 40, 40, 40, 40, 100, 101, 40, 40, - 40, 40, 40, 40, 40, 40, 102, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, - 40, 40, 40, 103, 40, 40, 40, 40, 40, 40, 40, 40, 104, 40, 40, 40, 40, - 100, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, - 40, 40, 40, 103, 40, 40, 40, 40, 40, 40, 105, 40, 40, 40, 40, 40, 40, 40, - 40, 40, 40, 40, 40, 40, 40, 40, 40, 106, 107, 40, 40, 40, 40, 40, 40, 40, - 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 108, 109, 40, 40, 40, 40, 40, 40, - 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 110, 40, 40, 40, 40, 40, 40, - 40, 40, 40, 111, 40, 40, 112, 113, 114, 115, 116, 117, 118, 16, 119, 16, - 16, 16, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, - 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, - 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, - 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, - 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 120, - 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, - 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, - 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, - 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, 123, 124, 125, - 126, 127, 128, 40, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 16, - 139, 140, 141, 142, 143, 16, 16, 16, 16, 16, 16, 144, 16, 145, 16, 146, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 40, 40, 40, 40, 40, 40, 147, 16, 148, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 63, - 149, 150, 151, 152, 16, 153, 16, 154, 155, 156, 157, 158, 159, 160, 161, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 162, 163, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 164, 165, 166, 40, 40, 40, 40, 40, 40, - 40, 40, 40, 40, 40, 40, 40, 40, 40, 86, 167, 40, 168, 169, 40, 40, 40, - 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, - 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, - 40, 40, 40, 40, 40, 40, 40, 40, 40, 170, 40, 40, 40, 40, 40, 40, 40, 40, - 40, 40, 40, 171, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, - 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, - 40, 40, 172, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, - 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, - 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, - 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, - 40, 40, 40, 40, 40, 40, 40, 40, 173, 40, 40, 40, 40, 40, 40, 40, 40, 40, - 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, - 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, - 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, - 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, - 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, - 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, - 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, - 40, 174, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 40, 170, 40, 40, 175, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 176, 16, - 177, 178, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, - 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, - 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, - 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, - 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, - 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, - 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, - 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, - 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, - 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, - 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, - 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, - 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, - 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, - 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, - 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, - 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, - 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, - 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, - 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, - 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, - 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, - 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, - 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, - 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, - 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, - 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, - 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, - 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, - 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, - 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, - 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, - 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, - 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, - 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, - 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, - 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 179, 121, 121, - 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, - 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, - 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, - 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, - 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, - 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, - 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, - 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, - 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, - 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, - 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, - 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, - 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, - 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, - 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, - 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, - 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, - 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, - 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, - 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, - 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, - 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, - 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, - 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, - 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, - 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, - 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, - 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, - 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, - 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, - 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, - 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, - 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, - 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, - 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, - 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, - 121, 121, 121, 121, 121, 179, + 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, 34, 35, 36, 37, + 38, 39, 34, 34, 34, 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, 64, 64, 65, 66, 67, 64, + 64, 64, 68, 69, 70, 64, 64, 64, 64, 64, 64, 71, 17, 72, 73, 74, 75, 76, + 77, 64, 78, 79, 80, 81, 82, 83, 84, 64, 64, 85, 86, 34, 34, 34, 34, 34, + 34, 87, 34, 34, 34, 34, 34, 88, 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, 89, 90, 91, 92, 34, 34, 34, 93, 34, 34, + 34, 94, 95, 34, 34, 34, 34, 34, 96, 34, 34, 34, 97, 34, 34, 34, 34, 34, + 34, 34, 34, 34, 34, 98, 99, 100, 34, 34, 34, 34, 34, 34, 101, 102, 34, + 34, 34, 34, 34, 34, 34, 34, 103, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, + 34, 34, 34, 34, 104, 34, 34, 34, 34, 34, 34, 34, 34, 105, 34, 34, 34, 34, + 101, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, + 34, 34, 34, 104, 34, 34, 34, 34, 34, 34, 106, 34, 34, 34, 34, 34, 34, 34, + 34, 34, 34, 34, 34, 34, 34, 34, 34, 107, 108, 34, 34, 34, 34, 34, 34, 34, + 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 109, 110, 34, 34, 34, 34, 34, 34, + 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 111, 34, 34, 34, 34, 34, 34, + 34, 34, 34, 112, 34, 34, 113, 114, 115, 116, 117, 118, 119, 120, 121, + 122, 17, 123, 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, + 124, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, + 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, + 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, + 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, + 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 126, 127, 128, + 129, 130, 131, 132, 34, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, + 17, 143, 144, 145, 146, 147, 17, 17, 17, 17, 17, 17, 148, 17, 149, 17, + 150, 17, 151, 17, 152, 17, 17, 17, 153, 17, 17, 17, 17, 154, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 34, 34, 34, 34, 34, 34, 155, 17, 156, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 34, 34, 34, 34, 34, 34, 34, 34, 157, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 64, 158, 159, 160, 161, 17, 162, 17, 163, 164, 165, 166, 167, 168, + 169, 170, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 171, 172, 173, + 174, 175, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 176, 177, 178, 34, 34, 34, + 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 87, 179, 34, 180, 181, + 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, 182, 34, 34, 34, 34, 34, + 34, 34, 34, 34, 34, 34, 183, 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, 184, 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, 185, 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, 186, 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, 187, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 34, 182, 34, 34, 188, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 189, 17, 190, 191, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 125, 125, 125, 125, 125, 125, + 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, + 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, + 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, + 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, + 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, + 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, + 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, + 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, + 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, + 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, + 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, + 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, + 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, + 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, + 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, + 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, + 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, + 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, + 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, + 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, + 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, + 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, + 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, + 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, + 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, + 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, + 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, + 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, + 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, + 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, + 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, + 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, + 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, + 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, + 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, + 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, + 125, 192, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, + 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, + 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, + 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, + 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, + 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, + 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, + 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, + 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, + 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, + 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, + 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, + 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, + 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, + 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, + 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, + 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, + 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, + 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, + 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, + 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, + 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, + 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, + 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, + 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, + 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, + 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, + 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, + 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, + 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, + 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, + 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, + 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, + 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, + 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, + 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, + 125, 125, 125, 125, 125, 125, 125, 125, 125, 192, }; static unsigned char index2[] = { @@ -720,11 +724,11 @@ 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 58, 19, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 19, 19, 19, 19, 19, 19, 59, 26, - 27, 60, 61, 19, 19, 26, 27, 62, 63, 64, 26, 27, 26, 27, 26, 27, 26, 27, - 26, 27, 65, 66, 19, 67, 68, 19, 69, 69, 19, 70, 19, 71, 19, 19, 19, 19, - 69, 19, 19, 72, 19, 19, 19, 19, 73, 74, 19, 75, 19, 19, 19, 74, 19, 76, - 77, 19, 19, 78, 19, 19, 19, 19, 19, 19, 19, 79, 19, 19, 80, 19, 19, 80, - 19, 19, 19, 19, 80, 81, 82, 82, 83, 19, 19, 19, 19, 19, 84, 19, 50, 19, + 27, 60, 61, 62, 62, 26, 27, 63, 64, 65, 26, 27, 26, 27, 26, 27, 26, 27, + 26, 27, 66, 67, 68, 69, 70, 19, 71, 71, 19, 72, 19, 73, 19, 19, 19, 19, + 71, 19, 19, 74, 19, 19, 19, 19, 75, 76, 19, 77, 19, 19, 19, 76, 19, 78, + 79, 19, 19, 80, 19, 19, 19, 19, 19, 19, 19, 81, 19, 19, 82, 19, 19, 82, + 19, 19, 19, 19, 82, 83, 84, 84, 85, 19, 19, 19, 19, 19, 86, 19, 50, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 5, 5, 5, 5, 50, 50, 50, 50, 50, 50, 50, @@ -734,40 +738,40 @@ 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 85, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 87, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 26, 27, 26, 27, 50, 5, 26, 27, 0, 0, 86, - 45, 45, 45, 5, 0, 0, 0, 0, 0, 5, 5, 87, 17, 88, 88, 88, 0, 89, 0, 90, 90, + 17, 17, 17, 17, 17, 17, 17, 17, 26, 27, 26, 27, 50, 5, 26, 27, 0, 0, 88, + 45, 45, 45, 5, 0, 0, 0, 0, 0, 5, 5, 89, 17, 90, 90, 90, 0, 91, 0, 92, 92, 19, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 0, 16, 16, 16, 16, 16, 16, 16, 16, 16, 91, 92, 92, 92, 19, 18, 18, 18, - 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 93, 18, 18, 18, - 18, 18, 18, 18, 18, 18, 94, 95, 95, 96, 97, 98, 99, 99, 99, 100, 101, - 102, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, - 27, 26, 27, 26, 27, 26, 27, 103, 104, 105, 19, 106, 107, 5, 26, 27, 108, - 26, 27, 19, 58, 58, 58, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, - 109, 109, 109, 109, 109, 109, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 0, 16, 16, 16, 16, 16, 16, 16, 16, 16, 93, 94, 94, 94, 19, 18, 18, 18, + 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 95, 18, 18, 18, + 18, 18, 18, 18, 18, 18, 96, 97, 97, 98, 99, 100, 101, 101, 101, 102, 103, + 104, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, + 27, 26, 27, 26, 27, 26, 27, 105, 106, 107, 19, 108, 109, 5, 26, 27, 110, + 26, 27, 19, 58, 58, 58, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, + 111, 111, 111, 111, 111, 111, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, - 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 104, - 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, - 104, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, + 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 106, + 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, + 106, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 5, 17, 17, 17, 17, 17, 5, 5, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, - 26, 27, 26, 27, 26, 27, 110, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, - 27, 26, 27, 111, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, + 26, 27, 26, 27, 26, 27, 112, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, + 27, 26, 27, 113, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, - 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 112, 112, 112, 112, 112, 112, 112, 112, - 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, - 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, - 112, 112, 0, 0, 50, 5, 5, 5, 5, 5, 5, 0, 113, 113, 113, 113, 113, 113, - 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, - 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, - 113, 113, 113, 113, 19, 0, 5, 5, 0, 0, 0, 0, 0, 0, 17, 17, 17, 17, 17, + 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 114, 114, 114, 114, 114, 114, 114, 114, + 114, 114, 114, 114, 114, 114, 114, 114, 114, 114, 114, 114, 114, 114, + 114, 114, 114, 114, 114, 114, 114, 114, 114, 114, 114, 114, 114, 114, + 114, 114, 0, 0, 50, 5, 5, 5, 5, 5, 5, 0, 115, 115, 115, 115, 115, 115, + 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, + 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, + 115, 115, 115, 115, 19, 0, 5, 5, 0, 0, 0, 0, 0, 0, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 5, 17, 5, 17, 17, 5, 17, 17, 5, 17, 0, 0, 0, 0, 0, 0, 0, @@ -800,29 +804,35 @@ 0, 0, 0, 0, 0, 0, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 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, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 50, 50, 5, 5, 5, 5, 50, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 17, 50, 50, 5, 5, 5, 5, 50, 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, 17, 17, 17, + 17, 50, 17, 17, 17, 17, 17, 17, 17, 17, 17, 50, 17, 17, 17, 50, 17, 17, + 17, 17, 17, 0, 0, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 17, 17, 17, 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, 50, 50, 50, 50, 50, 50, 50, 0, 0, 17, 50, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 0, 0, 50, 17, 17, 17, 17, 0, 0, 0, 50, 50, 50, 50, 50, 50, + 17, 17, 17, 17, 0, 50, 17, 17, 17, 17, 17, 0, 0, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 17, 17, 5, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 5, 50, - 50, 0, 0, 0, 0, 0, 0, 0, 0, 50, 50, 50, 50, 50, 0, 17, 17, 17, 0, 50, 50, - 50, 50, 50, 50, 50, 50, 0, 0, 50, 50, 0, 0, 50, 50, 50, 50, 50, 50, 50, - 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 0, 50, 50, - 50, 50, 50, 50, 50, 0, 50, 0, 0, 0, 50, 50, 50, 50, 0, 0, 17, 50, 17, 17, - 17, 17, 17, 17, 17, 0, 0, 17, 17, 0, 0, 17, 17, 17, 50, 0, 0, 0, 0, 0, 0, - 0, 0, 17, 0, 0, 0, 0, 50, 50, 0, 50, 50, 50, 17, 17, 0, 0, 6, 7, 8, 9, - 10, 11, 12, 13, 14, 15, 50, 50, 5, 5, 24, 24, 24, 24, 5, 24, 5, 0, 0, 0, - 0, 0, 0, 17, 17, 17, 0, 50, 50, 50, 50, 50, 50, 0, 0, 0, 0, 50, 50, 0, 0, - 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, - 50, 50, 50, 50, 0, 50, 50, 50, 50, 50, 50, 50, 0, 50, 50, 0, 50, 50, 0, - 50, 50, 0, 0, 17, 0, 17, 17, 17, 17, 17, 0, 0, 0, 0, 17, 17, 0, 0, 17, + 50, 0, 0, 0, 0, 0, 0, 50, 50, 50, 50, 50, 50, 50, 0, 17, 17, 17, 0, 50, + 50, 50, 50, 50, 50, 50, 50, 0, 0, 50, 50, 0, 0, 50, 50, 50, 50, 50, 50, + 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 0, 50, + 50, 50, 50, 50, 50, 50, 0, 50, 0, 0, 0, 50, 50, 50, 50, 0, 0, 17, 50, 17, + 17, 17, 17, 17, 17, 17, 0, 0, 17, 17, 0, 0, 17, 17, 17, 50, 0, 0, 0, 0, + 0, 0, 0, 0, 17, 0, 0, 0, 0, 50, 50, 0, 50, 50, 50, 17, 17, 0, 0, 6, 7, 8, + 9, 10, 11, 12, 13, 14, 15, 50, 50, 5, 5, 24, 24, 24, 24, 24, 24, 5, 5, 0, + 0, 0, 0, 0, 17, 17, 17, 0, 50, 50, 50, 50, 50, 50, 0, 0, 0, 0, 50, 50, 0, + 0, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, + 50, 50, 50, 50, 50, 0, 50, 50, 50, 50, 50, 50, 50, 0, 50, 50, 0, 50, 50, + 0, 50, 50, 0, 0, 17, 0, 17, 17, 17, 17, 17, 0, 0, 0, 0, 17, 17, 0, 0, 17, 17, 17, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0, 50, 50, 50, 50, 0, 50, 0, 0, 0, 0, 0, 0, 0, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 17, 17, 50, 50, 50, 17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 17, 17, 0, 50, 50, 50, 50, 50, 50, @@ -872,14 +882,14 @@ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 17, 5, 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, 50, 50, 50, 50, 50, 50, 50, 50, 17, 50, 114, + 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 17, 50, 116, 17, 17, 17, 17, 17, 17, 17, 0, 0, 0, 0, 5, 50, 50, 50, 50, 50, 50, 50, 17, 17, 17, 17, 17, 17, 17, 17, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 5, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 50, 0, 50, 0, 0, 50, 50, 0, 50, 0, 0, 50, 0, 0, 0, 0, 0, 0, 50, 50, 50, 50, 0, 50, 50, 50, 50, 50, 50, 50, 0, 50, 50, 50, 0, 50, 0, 50, 0, 0, 50, 50, 0, 50, 50, 50, 50, 17, - 50, 114, 17, 17, 17, 17, 17, 17, 0, 17, 17, 50, 0, 0, 50, 50, 50, 50, 50, + 50, 116, 17, 17, 17, 17, 17, 17, 0, 17, 17, 50, 0, 0, 50, 50, 50, 50, 50, 0, 50, 0, 17, 17, 17, 17, 17, 17, 0, 0, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 0, 0, 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, 50, 5, 5, 5, 5, 5, 5, 5, @@ -893,7 +903,7 @@ 17, 17, 17, 17, 17, 17, 17, 0, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 0, 5, 5, 5, 5, 5, 5, 5, 5, 17, 5, 5, 5, - 5, 5, 5, 0, 5, 5, 5, 5, 5, 5, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 5, 5, 5, 0, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -903,55 +913,49 @@ 17, 50, 50, 50, 50, 17, 17, 17, 50, 17, 17, 17, 50, 50, 17, 17, 17, 17, 17, 17, 17, 50, 50, 50, 17, 17, 17, 17, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 50, - 17, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 0, 0, 0, 0, 5, 5, 115, 115, 115, - 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, - 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, - 115, 115, 115, 115, 115, 115, 115, 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, + 17, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 17, 17, 17, 17, 5, 5, 117, 117, + 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, + 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, + 117, 117, 117, 117, 117, 117, 117, 117, 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, 5, 50, 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, 5, 50, 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, 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, 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, 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, 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, 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, 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, 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, 50, 50, 50, 50, 0, 0, 50, 50, - 50, 50, 50, 50, 50, 0, 50, 0, 50, 50, 50, 50, 0, 0, 50, 50, 50, 50, 50, + 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 0, 50, 50, 50, 50, 0, + 0, 50, 50, 50, 50, 50, 50, 50, 0, 50, 0, 50, 50, 50, 50, 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, - 0, 50, 50, 50, 50, 0, 0, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, + 50, 50, 50, 0, 50, 50, 50, 50, 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, 0, 50, 50, 50, 50, 0, 0, 50, 50, 50, 50, 50, 50, 50, 0, 50, - 0, 50, 50, 50, 50, 0, 0, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, - 50, 50, 50, 0, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, + 50, 50, 50, 50, 50, 50, 0, 50, 50, 50, 50, 0, 0, 50, 50, 50, 50, 50, 50, + 50, 0, 50, 0, 50, 50, 50, 50, 0, 0, 50, 50, 50, 50, 50, 50, 50, 50, 50, + 50, 50, 50, 50, 50, 50, 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, 50, 50, 50, 50, 50, 50, 50, - 50, 50, 50, 50, 50, 50, 50, 0, 50, 50, 50, 50, 0, 0, 50, 50, 50, 50, 50, + 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 0, 50, 50, 50, 50, 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, 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, 17, 5, 5, 5, 5, 5, 5, 5, 5, - 5, 116, 117, 118, 119, 120, 121, 122, 123, 124, 24, 24, 24, 24, 24, 24, - 24, 24, 24, 24, 24, 0, 0, 0, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, - 50, 50, 50, 50, 50, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 0, 0, 0, 0, 0, 0, 50, + 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 0, 0, 0, 0, 17, 5, 5, 5, 5, + 5, 5, 5, 5, 5, 118, 119, 120, 121, 122, 123, 124, 125, 126, 24, 24, 24, + 24, 24, 24, 24, 24, 24, 24, 24, 0, 0, 0, 50, 50, 50, 50, 50, 50, 50, 50, + 50, 50, 50, 50, 50, 50, 50, 50, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 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, 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, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 5, 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, 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, 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, @@ -963,101 +967,106 @@ 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, 50, 50, 50, 50, 50, 50, 50, + 50, 50, 50, 50, 50, 50, 5, 5, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, + 50, 50, 50, 50, 50, 50, 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, 5, 5, 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, 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, 5, 5, 5, 127, 127, 127, 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, 0, 50, + 50, 50, 50, 17, 17, 17, 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, 17, 17, 17, 5, 5, + 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, 17, 17, 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, 0, 50, 50, 50, 0, 17, + 17, 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, 50, 50, 50, 50, + 50, 50, 50, 50, 50, 50, 50, 50, 1, 1, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 5, 5, 5, 50, 5, 5, 5, 5, 50, 17, 0, 0, 6, 7, 8, 9, 10, 11, + 12, 13, 14, 15, 0, 0, 0, 0, 0, 0, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, + 0, 0, 0, 0, 0, 0, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 17, 17, 17, 2, 0, 6, + 7, 8, 9, 10, 11, 12, 13, 14, 15, 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, 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, 5, 5, 50, 50, 50, 50, 50, 50, 50, 50, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 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, 5, 5, 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, 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, 50, 17, 50, 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, 5, 5, 5, 125, 125, 125, 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, 0, 50, 50, - 50, 50, 17, 17, 17, 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, 17, 17, 17, 5, 5, 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, 17, 17, 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, 0, 50, 50, 50, 0, 17, 17, - 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, 50, 50, 50, 50, 50, - 50, 50, 50, 50, 50, 50, 50, 1, 1, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 5, 5, 5, 50, 5, 5, 5, 5, 50, 17, 0, 0, 6, 7, 8, 9, 10, 11, 12, - 13, 14, 15, 0, 0, 0, 0, 0, 0, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 0, - 0, 0, 0, 0, 0, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 17, 17, 17, 2, 0, 6, 7, - 8, 9, 10, 11, 12, 13, 14, 15, 0, 0, 0, 0, 0, 0, 50, 50, 50, 50, 50, 50, + 50, 50, 50, 50, 50, 50, 50, 50, 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, 0, 0, 0, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 0, 0, 0, 0, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 0, 0, 0, 0, 5, 0, 0, 0, 5, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 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, 50, 50, 50, 50, 50, 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, 50, 50, 50, 50, 0, 0, 0, 0, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 50, + 50, 50, 50, 50, 50, 50, 17, 17, 0, 0, 0, 0, 0, 0, 6, 7, 8, 9, 10, 11, 12, + 13, 14, 15, 7, 0, 0, 0, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 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, 50, 50, + 17, 17, 17, 17, 17, 0, 0, 5, 5, 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, 50, 50, 17, 50, 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, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 0, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 0, 0, 17, 6, 7, 8, 9, 10, 11, + 12, 13, 14, 15, 0, 0, 0, 0, 0, 0, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 0, + 0, 0, 0, 0, 0, 5, 5, 5, 5, 5, 5, 5, 50, 5, 5, 5, 5, 5, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, 17, 17, 17, 17, 17, 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, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 0, 0, 0, 0, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 0, 0, 0, 0, 5, 0, 0, 0, 5, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 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, 50, 50, 50, 50, 50, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, + 50, 50, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 50, 50, 50, 50, 50, 50, 50, 0, 0, 0, 0, 6, 7, 8, 9, 10, 11, 12, 13, + 14, 15, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 5, 5, 5, 5, 5, 5, 5, 5, 5, 0, 0, 0, 17, 17, 17, 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, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 50, 50, - 50, 50, 50, 50, 50, 17, 17, 0, 0, 0, 0, 0, 0, 6, 7, 8, 9, 10, 11, 12, 13, - 14, 15, 0, 0, 0, 0, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, - 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 50, 50, 50, 50, 50, 50, - 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 17, - 17, 17, 17, 17, 0, 0, 5, 5, 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, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 0, 0, 0, 50, 50, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 17, 17, 17, 17, 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, 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, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 0, 0, 0, 5, 5, 5, 5, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 0, 0, 0, 50, + 50, 50, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 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, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 50, 50, 50, 50, 50, 50, 50, 0, 0, 0, 0, 6, 7, 8, 9, 10, - 11, 12, 13, 14, 15, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 5, 5, 5, 5, 5, 5, 5, 5, 5, 0, 0, 0, - 17, 17, 17, 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, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 0, 0, 0, 50, 50, 6, 7, 8, 9, 10, 11, 12, 13, - 14, 15, 0, 0, 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, 5, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 0, 0, 0, 5, 5, 5, 5, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 0, 0, - 0, 50, 50, 50, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 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, 5, 5, 19, 19, 19, 19, - 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 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, + 17, 17, 17, 5, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 50, 50, 50, 50, 17, 50, 50, 50, 50, 17, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, - 19, 19, 19, 19, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, + 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 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, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, - 19, 19, 19, 19, 19, 19, 19, 19, 50, 126, 19, 19, 19, 127, 19, 19, 19, 19, + 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, - 19, 19, 19, 19, 19, 19, 19, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, + 19, 19, 50, 128, 19, 19, 19, 129, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, + 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, + 19, 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, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 50, 50, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 17, 26, 27, 26, 27, 26, 27, - 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, + 17, 17, 17, 17, 17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 17, 17, 17, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, @@ -1065,50 +1074,50 @@ 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, - 19, 19, 19, 19, 19, 128, 19, 19, 129, 19, 26, 27, 26, 27, 26, 27, 26, 27, + 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 19, 19, 19, 19, 19, 130, + 19, 19, 131, 19, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, - 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 130, 130, - 130, 130, 130, 130, 130, 130, 131, 131, 131, 131, 131, 131, 131, 131, - 130, 130, 130, 130, 130, 130, 0, 0, 131, 131, 131, 131, 131, 131, 0, 0, - 130, 130, 130, 130, 130, 130, 130, 130, 131, 131, 131, 131, 131, 131, - 131, 131, 130, 130, 130, 130, 130, 130, 130, 130, 131, 131, 131, 131, - 131, 131, 131, 131, 130, 130, 130, 130, 130, 130, 0, 0, 131, 131, 131, - 131, 131, 131, 0, 0, 19, 130, 19, 130, 19, 130, 19, 130, 0, 131, 0, 131, - 0, 131, 0, 131, 130, 130, 130, 130, 130, 130, 130, 130, 131, 131, 131, - 131, 131, 131, 131, 131, 132, 132, 133, 133, 133, 133, 134, 134, 135, - 135, 136, 136, 137, 137, 0, 0, 130, 130, 130, 130, 130, 130, 130, 130, - 138, 138, 138, 138, 138, 138, 138, 138, 130, 130, 130, 130, 130, 130, - 130, 130, 138, 138, 138, 138, 138, 138, 138, 138, 130, 130, 130, 130, - 130, 130, 130, 130, 138, 138, 138, 138, 138, 138, 138, 138, 130, 130, 19, - 139, 19, 0, 19, 19, 131, 131, 140, 140, 141, 5, 142, 5, 5, 5, 19, 139, - 19, 0, 19, 19, 143, 143, 143, 143, 141, 5, 5, 5, 130, 130, 19, 19, 0, 0, - 19, 19, 131, 131, 144, 144, 0, 5, 5, 5, 130, 130, 19, 19, 19, 105, 19, - 19, 131, 131, 145, 145, 108, 5, 5, 5, 0, 0, 19, 139, 19, 0, 19, 19, 146, - 146, 147, 147, 141, 5, 5, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, - 1, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, - 5, 3, 3, 1, 1, 1, 1, 1, 2, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, - 17, 17, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 17, 5, - 5, 5, 5, 5, 5, 5, 5, 5, 5, 2, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 1, 1, 1, 1, - 1, 1, 148, 19, 0, 0, 149, 150, 151, 152, 153, 154, 5, 5, 5, 5, 5, 19, - 148, 23, 20, 21, 149, 150, 151, 152, 153, 154, 5, 5, 5, 5, 5, 0, 50, 50, - 50, 50, 50, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 5, 5, 5, 5, 5, 5, 5, 5, - 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 5, 5, 5, 5, 17, 5, 5, 5, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, - 5, 99, 5, 5, 5, 5, 99, 5, 5, 19, 99, 99, 99, 19, 19, 99, 99, 99, 19, 5, - 99, 5, 5, 155, 99, 99, 99, 99, 99, 5, 5, 5, 5, 5, 5, 99, 5, 156, 5, 99, - 5, 157, 158, 99, 99, 155, 19, 99, 99, 159, 99, 19, 50, 50, 50, 50, 19, 5, - 5, 19, 19, 99, 99, 5, 5, 5, 5, 5, 99, 19, 19, 19, 19, 5, 5, 5, 5, 160, 5, - 0, 0, 0, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 161, 161, - 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, - 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, - 162, 162, 125, 125, 125, 26, 27, 125, 125, 125, 125, 0, 0, 0, 0, 0, 0, 0, - 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, - 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, + 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 132, 132, 132, 132, 132, 132, + 132, 132, 133, 133, 133, 133, 133, 133, 133, 133, 132, 132, 132, 132, + 132, 132, 0, 0, 133, 133, 133, 133, 133, 133, 0, 0, 132, 132, 132, 132, + 132, 132, 132, 132, 133, 133, 133, 133, 133, 133, 133, 133, 132, 132, + 132, 132, 132, 132, 132, 132, 133, 133, 133, 133, 133, 133, 133, 133, + 132, 132, 132, 132, 132, 132, 0, 0, 133, 133, 133, 133, 133, 133, 0, 0, + 19, 132, 19, 132, 19, 132, 19, 132, 0, 133, 0, 133, 0, 133, 0, 133, 132, + 132, 132, 132, 132, 132, 132, 132, 133, 133, 133, 133, 133, 133, 133, + 133, 134, 134, 135, 135, 135, 135, 136, 136, 137, 137, 138, 138, 139, + 139, 0, 0, 132, 132, 132, 132, 132, 132, 132, 132, 140, 140, 140, 140, + 140, 140, 140, 140, 132, 132, 132, 132, 132, 132, 132, 132, 140, 140, + 140, 140, 140, 140, 140, 140, 132, 132, 132, 132, 132, 132, 132, 132, + 140, 140, 140, 140, 140, 140, 140, 140, 132, 132, 19, 141, 19, 0, 19, 19, + 133, 133, 142, 142, 143, 5, 144, 5, 5, 5, 19, 141, 19, 0, 19, 19, 145, + 145, 145, 145, 143, 5, 5, 5, 132, 132, 19, 19, 0, 0, 19, 19, 133, 133, + 146, 146, 0, 5, 5, 5, 132, 132, 19, 19, 19, 107, 19, 19, 133, 133, 147, + 147, 110, 5, 5, 5, 0, 0, 19, 141, 19, 0, 19, 19, 148, 148, 149, 149, 143, + 5, 5, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 5, 5, 5, 5, 5, + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 3, 3, 1, 1, 1, + 1, 1, 2, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 17, 17, 5, 5, 5, 5, + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 17, 5, 5, 5, 5, 5, 5, 5, 5, + 5, 5, 2, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 150, 50, 0, 0, + 151, 152, 153, 154, 155, 156, 5, 5, 5, 5, 5, 50, 150, 23, 20, 21, 151, + 152, 153, 154, 155, 156, 5, 5, 5, 5, 5, 0, 50, 50, 50, 50, 50, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, + 5, 5, 5, 5, 5, 5, 5, 5, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 5, 5, 5, 5, 17, 5, 5, 5, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 5, 101, 5, 5, 5, 5, + 101, 5, 5, 19, 101, 101, 101, 19, 19, 101, 101, 101, 19, 5, 101, 5, 5, + 157, 101, 101, 101, 101, 101, 5, 5, 5, 5, 5, 5, 101, 5, 158, 5, 101, 5, + 159, 160, 101, 101, 157, 19, 101, 101, 161, 101, 19, 50, 50, 50, 50, 19, + 5, 5, 19, 19, 101, 101, 5, 5, 5, 5, 5, 101, 19, 19, 19, 19, 5, 5, 5, 5, + 162, 5, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, + 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, + 163, 163, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, + 164, 164, 164, 164, 127, 127, 127, 26, 27, 127, 127, 127, 127, 24, 0, 0, + 0, 0, 0, 0, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, @@ -1121,134 +1130,136 @@ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, - 5, 5, 5, 5, 5, 5, 5, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, - 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 23, 20, 21, 149, 150, 151, 152, 153, 154, 24, 24, - 24, 24, 24, 24, 24, 24, 24, 24, 24, 23, 20, 21, 149, 150, 151, 152, 153, - 154, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 23, 20, 21, 149, 150, - 151, 152, 153, 154, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 5, 5, 5, - 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 163, - 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, - 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 164, 164, 164, - 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, - 164, 164, 164, 164, 164, 164, 164, 164, 164, 148, 24, 24, 24, 24, 24, 24, - 24, 24, 24, 24, 23, 20, 21, 149, 150, 151, 152, 153, 154, 24, 148, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, - 5, 5, 5, 5, 0, 0, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, - 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 0, 0, 0, 5, 5, 5, 5, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 5, 5, 5, 5, 0, 5, 5, 5, 5, 0, 0, 5, 5, 5, 5, 5, 5, - 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 0, 5, + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, - 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 0, 5, 0, 5, 5, 5, 5, 0, 0, 0, 5, 0, 5, 5, - 5, 5, 5, 5, 5, 0, 0, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, - 5, 5, 5, 5, 23, 20, 21, 149, 150, 151, 152, 153, 154, 24, 23, 20, 21, - 149, 150, 151, 152, 153, 154, 24, 23, 20, 21, 149, 150, 151, 152, 153, - 154, 24, 5, 0, 0, 0, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, - 5, 5, 5, 5, 5, 5, 5, 0, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 0, 5, - 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 0, 5, 0, 0, 0, 5, 5, 5, 5, 5, 5, 5, 5, 5, + 5, 5, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 23, 20, 21, 151, 152, 153, 154, 155, + 156, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 23, 20, 21, 151, 152, + 153, 154, 155, 156, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 23, 20, + 21, 151, 152, 153, 154, 155, 156, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, + 24, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, + 5, 5, 5, 165, 165, 165, 165, 165, 165, 165, 165, 165, 165, 165, 165, 165, + 165, 165, 165, 165, 165, 165, 165, 165, 165, 165, 165, 165, 165, 166, + 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, + 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 150, 24, 24, 24, + 24, 24, 24, 24, 24, 24, 24, 23, 20, 21, 151, 152, 153, 154, 155, 156, 24, + 150, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, + 5, 5, 5, 5, 5, 5, 5, 0, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, + 5, 5, 5, 0, 5, 0, 0, 0, 0, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, + 5, 5, 5, 5, 5, 5, 5, 5, 5, 0, 5, 5, 5, 5, 0, 5, 5, 5, 5, 0, 0, 5, 5, 5, + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, + 5, 0, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 0, 5, 0, 5, 5, 5, 5, 0, 0, 0, 5, + 5, 5, 5, 5, 5, 5, 5, 5, 0, 0, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, + 5, 5, 5, 5, 5, 5, 5, 23, 20, 21, 151, 152, 153, 154, 155, 156, 24, 23, + 20, 21, 151, 152, 153, 154, 155, 156, 24, 23, 20, 21, 151, 152, 153, 154, + 155, 156, 24, 5, 0, 0, 0, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, + 5, 5, 5, 5, 5, 5, 5, 5, 0, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 0, + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 0, 5, 0, 0, 0, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, - 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 0, 0, 0, 5, - 5, 5, 5, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 112, - 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, - 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, - 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, - 112, 112, 112, 112, 0, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, - 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, - 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, - 113, 113, 113, 113, 113, 113, 113, 113, 113, 0, 26, 27, 165, 166, 167, - 168, 169, 26, 27, 26, 27, 26, 27, 170, 171, 172, 0, 19, 26, 27, 19, 26, - 27, 19, 19, 19, 19, 19, 19, 50, 0, 0, 26, 27, 26, 27, 26, 27, 26, 27, 26, - 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, - 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, - 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, - 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, - 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, - 27, 19, 5, 5, 5, 5, 5, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 5, - 5, 5, 24, 5, 5, 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, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 0, 0, 0, + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 114, 114, 114, 114, 114, 114, 114, 114, 114, 114, 114, 114, 114, 114, + 114, 114, 114, 114, 114, 114, 114, 114, 114, 114, 114, 114, 114, 114, + 114, 114, 114, 114, 114, 114, 114, 114, 114, 114, 114, 114, 114, 114, + 114, 114, 114, 114, 114, 0, 115, 115, 115, 115, 115, 115, 115, 115, 115, + 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, + 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, + 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 0, 26, 27, 167, 168, + 169, 170, 171, 26, 27, 26, 27, 26, 27, 172, 173, 174, 175, 19, 26, 27, + 19, 26, 27, 19, 19, 19, 19, 19, 19, 50, 176, 176, 26, 27, 26, 27, 26, 27, + 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, + 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, + 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, + 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, + 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, + 26, 27, 26, 27, 19, 5, 5, 5, 5, 5, 5, 26, 27, 26, 27, 17, 17, 17, 0, 0, + 0, 0, 0, 0, 0, 5, 5, 5, 5, 24, 5, 5, 177, 177, 177, 177, 177, 177, 177, + 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, + 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, + 177, 177, 177, 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, 50, 50, 50, - 50, 50, 50, 50, 50, 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, 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, + 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 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, 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, 50, 50, 50, 50, 50, 50, 50, 0, 50, 50, 50, 50, + 50, 50, 50, 0, 50, 50, 50, 50, 50, 50, 50, 0, 50, 50, 50, 50, 50, 50, 50, 0, 50, 50, 50, 50, 50, 50, 50, 0, 50, 50, 50, 50, 50, 50, 50, 0, 50, 50, - 50, 50, 50, 50, 50, 0, 50, 50, 50, 50, 50, 50, 50, 0, 50, 50, 50, 50, 50, - 50, 50, 0, 50, 50, 50, 50, 50, 50, 50, 0, 50, 50, 50, 50, 50, 50, 50, 0, - 50, 50, 50, 50, 50, 50, 50, 0, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 50, 50, 50, 50, 50, 0, 50, 50, 50, 50, 50, 50, 50, 0, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, - 5, 5, 5, 5, 86, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 88, 5, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, - 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 0, 5, 5, 5, 5, 5, 5, 5, 5, - 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 5, 5, 5, + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 0, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, - 5, 5, 5, 5, 5, 5, 5, 5, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, - 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, - 5, 0, 0, 0, 0, 2, 5, 5, 5, 5, 50, 50, 125, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, - 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 17, 17, 17, 17, 17, 17, 5, 50, 50, 50, 50, 50, 5, 5, - 125, 125, 125, 50, 50, 5, 5, 5, 0, 50, 50, 50, 50, 50, 50, 50, 50, 50, + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 5, 5, 5, + 5, 5, 5, 5, 5, 5, 5, 5, 0, 0, 0, 0, 2, 5, 5, 5, 5, 50, 50, 127, 5, 5, 5, + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 127, + 127, 127, 127, 127, 127, 127, 127, 127, 17, 17, 17, 17, 17, 17, 5, 50, + 50, 50, 50, 50, 5, 5, 127, 127, 127, 50, 50, 5, 5, 5, 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, 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, 0, 0, 17, 17, 5, 5, 50, 50, 50, 5, 50, 50, 50, 50, + 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 0, 0, 17, 17, 5, 5, 50, 50, 50, + 5, 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, 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, 50, 50, 50, 50, 50, 50, 50, 50, 50, 5, 50, 50, 50, - 50, 0, 0, 0, 0, 0, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, + 50, 5, 50, 50, 50, 50, 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, 0, 0, 0, 50, 50, 50, 50, 50, 50, + 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 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, 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, 50, 50, 50, 0, 5, 5, - 24, 24, 24, 24, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 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, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, - 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 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, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, - 5, 5, 5, 5, 5, 5, 5, 5, 5, 0, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 5, + 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, + 50, 50, 0, 5, 5, 24, 24, 24, 24, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 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, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, - 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 24, 24, 24, 24, 24, 24, 24, 24, - 24, 24, 24, 24, 24, 24, 24, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, - 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 24, 24, 24, 24, 24, + 5, 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, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 0, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, + 5, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, - 5, 5, 5, 5, 5, 5, 5, 5, 0, 50, 50, 50, 50, 50, 174, 50, 50, 50, 50, 50, + 5, 5, 5, 5, 5, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, + 24, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 0, 50, 50, 50, 50, 50, + 178, 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, 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, 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, 174, 50, 50, 50, 50, 50, + 178, 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, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, @@ -1257,7 +1268,7 @@ 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, 50, 50, 50, 50, 50, 50, 50, - 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 174, + 50, 50, 50, 50, 50, 178, 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, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, @@ -1266,56 +1277,56 @@ 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, 50, 50, 50, 50, 50, 50, 50, + 50, 50, 50, 50, 50, 50, 178, 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, - 174, 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, 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, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, + 50, 50, 50, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, - 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 174, - 50, 50, 174, 50, 50, 50, 174, 50, 174, 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, + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, + 5, 5, 5, 5, 5, 5, 178, 50, 50, 178, 50, 50, 50, 178, 50, 178, 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, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, - 50, 50, 50, 174, 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, 174, 50, 50, 50, - 50, 50, 50, 50, 174, 50, 174, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, + 50, 50, 50, 50, 50, 50, 50, 50, 178, 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, 174, 174, 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, 174, 50, 50, 50, 50, 50, 50, 50, 50, 174, 50, + 50, 178, 50, 50, 50, 50, 50, 50, 50, 178, 50, 178, 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, 174, + 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 178, + 178, 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, 178, 50, 50, 50, 50, + 50, 50, 50, 50, 178, 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, 178, 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, 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, 174, 50, 50, 50, 50, 50, 50, 50, 50, 50, - 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 174, 50, 50, 50, 50, 50, 50, 50, + 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 178, 50, 50, 50, + 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 178, 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, 50, 50, 50, 50, 50, 50, 50, 50, - 50, 50, 50, 50, 174, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, + 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 178, 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, 174, 50, 174, 50, 174, 50, 50, 50, 50, 50, 50, 50, 50, 50, + 50, 50, 50, 50, 50, 50, 50, 50, 50, 178, 50, 178, 50, 178, 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, 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, 174, 50, 174, 174, 174, 50, 50, 50, 50, 50, 50, 174, 50, 50, 50, + 50, 50, 50, 50, 50, 50, 50, 50, 178, 50, 178, 178, 178, 50, 50, 50, 50, + 50, 50, 178, 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, 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, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, + 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 178, 178, 178, 178, 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, 174, 174, 174, 174, 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, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, @@ -1323,7 +1334,7 @@ 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, 50, 50, 50, 50, 50, 50, 50, - 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 174, 50, + 50, 50, 50, 50, 178, 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, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, @@ -1331,24 +1342,25 @@ 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, 50, 50, 50, 50, 50, 50, 50, + 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 178, 50, 50, 50, 50, 50, 50, 50, + 178, 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, 174, 50, 50, 50, 50, 50, 50, 50, 174, 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, 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, 50, + 50, 50, 50, 178, 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, 174, 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, 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, 50, 50, 50, 50, 50, 50, 50, 178, 178, 50, 50, 50, 50, 50, 50, 50, + 50, 50, 50, 50, 50, 178, 178, 178, 50, 178, 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, 174, 174, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, - 174, 174, 174, 50, 174, 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, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, @@ -1359,175 +1371,196 @@ 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, 50, 50, 50, 50, 50, 50, 50, + 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 178, 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, 50, 174, 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, 178, 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, 50, 174, 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, 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, 50, 50, 50, 50, 50, 50, 50, 50, 178, 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, 50, 174, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, + 50, 50, 50, 50, 50, 50, 50, 50, 178, 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, 50, 174, 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, 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, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, + 50, 50, 50, 50, 50, 50, 50, 50, 178, 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, 50, 174, 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, 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, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, + 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 178, 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, 50, 174, 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, 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, 50, 50, 50, 50, + 178, 50, 50, 50, 50, 178, 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, 174, 50, 50, 50, 50, - 174, 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, 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, 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, 174, + 50, 50, 50, 50, 178, 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, 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, 50, 50, 50, 50, 50, 50, 50, 50, 50, + 50, 50, 50, 50, 50, 50, 50, 50, 50, 178, 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, 174, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, + 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 178, 50, 50, 50, 50, 50, 178, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, - 50, 50, 50, 50, 50, 174, 50, 50, 50, 50, 50, 174, 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, 178, 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, 174, 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, 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, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, + 50, 50, 50, 50, 50, 50, 178, 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, 174, 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, 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, + 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, 50, 50, - 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 0, 0, 0, 5, 5, 5, 5, 5, 5, 5, + 0, 0, 0, 0, 0, 0, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 0, + 0, 0, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, - 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, - 50, 50, 5, 5, 5, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, - 50, 50, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 50, 50, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 26, 27, 26, 27, 26, 27, 26, 27, - 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, - 26, 27, 26, 27, 26, 27, 0, 0, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, - 27, 50, 17, 5, 5, 5, 5, 0, 0, 0, 0, 0, 0, 0, 0, 17, 17, 5, 50, 26, 27, - 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, - 26, 27, 26, 27, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, - 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 50, 50, 50, 50, 50, 50, 50, 50, 50, - 5, 5, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 19, 19, 26, + 5, 5, 5, 5, 5, 5, 5, 5, 5, 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, 50, + 50, 50, 50, 50, 50, 5, 5, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, + 50, 5, 5, 5, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, + 50, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 50, 50, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 26, 27, 26, 27, 26, 27, 26, 27, 26, + 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, + 27, 26, 27, 26, 27, 0, 0, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, + 50, 17, 5, 5, 5, 5, 0, 0, 0, 0, 0, 0, 0, 0, 17, 17, 5, 50, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, + 27, 26, 27, 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, 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, 127, 127, 127, 127, 127, 127, 127, 127, 127, + 127, 17, 17, 5, 5, 5, 5, 5, 5, 0, 0, 0, 0, 0, 0, 0, 0, 5, 5, 5, 5, 5, 5, + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 50, 50, 50, 50, 50, + 50, 50, 50, 50, 5, 5, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, + 27, 19, 19, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, - 27, 26, 27, 26, 27, 26, 27, 50, 19, 19, 19, 19, 19, 19, 19, 19, 26, 27, - 26, 27, 175, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 50, 5, 5, 26, 27, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 50, 19, 19, 19, 19, 19, 19, + 19, 19, 26, 27, 26, 27, 179, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 50, + 5, 5, 26, 27, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 50, 50, 50, 50, 50, 50, 17, - 50, 50, 50, 17, 50, 50, 50, 50, 17, 50, 50, 50, 50, 50, 50, 50, 50, 50, - 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 17, 17, 17, 17, - 17, 5, 5, 5, 5, 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, + 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, 17, 50, 50, 50, 17, 50, 50, 50, 50, 17, 50, 50, 50, 50, 50, 50, + 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 17, + 17, 17, 17, 17, 5, 5, 5, 5, 0, 0, 0, 0, 24, 24, 24, 24, 24, 24, 5, 5, 5, + 5, 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, 50, 50, 50, 50, 50, 50, 50, 50, 5, 5, - 5, 5, 0, 0, 0, 0, 0, 0, 0, 0, 17, 17, 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, 5, 5, 5, 5, 0, 0, 0, 0, 0, 0, 0, 0, 17, 17, 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, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 5, 6, 7, 8, 9, 10, 11, 12, - 13, 14, 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 7, 8, 9, 10, 11, - 12, 13, 14, 15, 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, 17, 17, 17, 17, - 17, 17, 17, 17, 5, 5, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, - 0, 0, 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, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 5, 6, + 7, 8, 9, 10, 11, 12, 13, 14, 15, 0, 0, 0, 0, 0, 0, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 50, 50, 50, 50, 50, + 50, 5, 5, 5, 50, 0, 0, 0, 0, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 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, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 50, 50, 50, 17, 50, 50, 50, 50, 50, - 50, 50, 50, 17, 17, 0, 0, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 0, 0, 5, 5, + 50, 50, 50, 50, 50, 50, 50, 50, 17, 17, 17, 17, 17, 17, 17, 17, 5, 5, 50, + 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, + 50, 50, 50, 50, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 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, 17, 17, 17, 17, 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, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 5, 5, 5, 5, 5, 5, 5, + 5, 5, 5, 5, 5, 5, 0, 50, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 0, 0, 0, 0, 5, 5, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, + 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 50, 50, 50, + 17, 50, 50, 50, 50, 50, 50, 50, 50, 17, 17, 0, 0, 6, 7, 8, 9, 10, 11, 12, + 13, 14, 15, 0, 0, 5, 5, 5, 5, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, + 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 5, 5, 5, 50, 17, 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, 50, 50, 50, 50, 50, 50, 50, 50, 17, 50, 17, 17, 17, + 50, 50, 17, 17, 50, 50, 50, 50, 50, 17, 17, 50, 17, 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, 50, 50, 50, 5, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 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, + 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, 17, + 17, 17, 17, 17, 17, 17, 17, 5, 17, 17, 0, 0, 6, 7, 8, 9, 10, 11, 12, 13, + 14, 15, 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, 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, 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, 50, 50, 50, 50, 50, 50, 50, 50, 50, + 0, 0, 0, 0, 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, 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, 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, 50, 50, 50, 50, 50, 50, 50, 50, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 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, 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, 50, 50, 50, 50, 50, - 50, 50, 50, 50, 50, 50, 50, 50, 50, 174, 50, 50, 50, 50, 50, 50, 50, 174, - 50, 50, 50, 50, 174, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, + 50, 50, 50, 50, 50, 50, 50, 50, 178, 50, 50, 50, 50, 50, 50, 50, 178, 50, + 50, 50, 50, 178, 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, 50, 50, 50, - 50, 50, 50, 50, 50, 50, 50, 50, 174, 50, 50, 50, 50, 50, 50, 50, 50, 50, + 50, 50, 50, 50, 50, 50, 50, 178, 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, 174, 50, 174, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, + 50, 50, 178, 50, 178, 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, 174, 50, 50, 50, 50, 50, 50, + 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 178, 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, 50, 50, 0, 0, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, + 50, 50, 50, 50, 50, 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, 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, 50, 50, + 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 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, 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, 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, + 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, 19, 19, 19, 19, 19, 19, 19, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 19, 19, 19, 19, 19, 0, 0, 0, 0, 0, 50, 17, 50, 50, 50, 50, + 0, 0, 0, 0, 0, 0, 0, 19, 19, 19, 19, 19, 19, 19, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 19, 19, 19, 19, 19, 0, 0, 0, 0, 0, 50, 17, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 5, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 0, 50, 50, 50, 50, 50, 0, 50, 0, 50, 50, 0, 50, 50, 0, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, @@ -1544,8 +1577,8 @@ 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, 50, 50, 50, 50, 50, 50, 50, - 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 86, - 86, 86, 86, 86, 86, 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, 88, + 88, 88, 88, 88, 88, 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, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, @@ -1559,13 +1592,13 @@ 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, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 86, 86, 5, 5, + 0, 0, 0, 0, 0, 0, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 88, 88, 5, 5, 0, 0, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 0, 0, 0, 0, 0, 0, 17, 17, 17, 17, 17, 17, 17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 5, 5, 17, 17, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 17, 17, 17, 5, 5, 5, 0, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 0, 5, 5, 5, 5, 0, 0, - 0, 0, 86, 50, 86, 50, 86, 0, 86, 50, 86, 50, 86, 50, 86, 50, 86, 50, 50, + 0, 0, 88, 50, 88, 50, 88, 0, 88, 50, 88, 50, 88, 50, 88, 50, 88, 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, 50, 50, 50, 50, 50, 50, 50, 50, 50, @@ -1581,7 +1614,7 @@ 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, 50, 50, 50, 50, 50, 50, 50, - 50, 50, 114, 114, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, + 50, 50, 116, 116, 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, 50, 50, 50, 50, 50, 50, 0, 0, 50, 50, 50, 50, 50, 50, 0, 0, 50, 50, 50, 50, 50, 50, 0, 0, 50, 50, 50, 0, 0, 0, 5, 5, 5, 5, 5, 5, 5, 0, 5, 5, @@ -1602,11 +1635,11 @@ 50, 50, 50, 50, 0, 0, 0, 0, 0, 5, 5, 5, 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, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, - 24, 24, 24, 24, 0, 0, 0, 5, 5, 5, 5, 5, 5, 5, 5, 5, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 24, 24, 24, 24, 5, 5, 5, 5, 5, 5, 5, + 24, 24, 24, 24, 0, 0, 0, 5, 5, 5, 5, 5, 5, 5, 5, 5, 127, 127, 127, 127, + 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, + 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, + 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, + 127, 127, 127, 127, 127, 127, 127, 24, 24, 24, 24, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 24, 0, 0, 0, 0, 0, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -1622,22 +1655,22 @@ 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, 24, 24, 24, 24, 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, 125, 50, 50, 50, 50, 50, 50, 50, 50, 125, 0, 0, 0, 0, 0, 0, + 50, 50, 50, 127, 50, 50, 50, 50, 50, 50, 50, 50, 127, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, 5, 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, 50, 50, 50, - 50, 50, 50, 50, 50, 5, 125, 125, 125, 125, 125, 0, 0, 0, 0, 0, 0, 0, 0, + 50, 50, 50, 50, 50, 5, 127, 127, 127, 127, 127, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 176, 176, 176, 176, 176, 176, 176, 176, - 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, - 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, - 176, 176, 176, 176, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, - 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, - 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, - 177, 177, 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, 180, 180, 180, 180, 180, 180, 180, 180, + 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, + 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, + 180, 180, 180, 180, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, + 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, + 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, + 181, 181, 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, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, @@ -1649,20 +1682,46 @@ 50, 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, 50, 50, 50, 50, 0, 50, 50, 0, 0, 0, 50, 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, 0, 5, 24, 24, 24, 24, 24, 24, 24, 24, 0, 0, 0, 0, 0, 0, + 0, 0, 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, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, + 50, 50, 50, 50, 50, 24, 24, 24, 24, 24, 24, 0, 0, 0, 5, 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, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 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, 17, 17, 17, 0, 17, 17, 0, 0, 0, 0, 0, 17, 17, 17, 17, 50, + 50, 50, 50, 0, 50, 50, 50, 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, 0, 0, 0, + 0, 17, 17, 17, 0, 0, 0, 0, 17, 23, 20, 21, 151, 24, 24, 24, 24, 0, 0, 0, + 0, 0, 0, 0, 0, 5, 5, 5, 5, 5, 5, 5, 5, 5, 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, 24, 24, 5, 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, 50, 50, 50, 50, 50, 50, 50, 0, 0, 0, 5, 5, 5, 5, 5, + 5, 5, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, + 50, 50, 50, 50, 50, 0, 0, 24, 24, 24, 24, 24, 24, 24, 24, 50, 50, 50, 50, + 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 0, 0, 0, 0, + 0, 24, 24, 24, 24, 24, 24, 24, 24, 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, 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, 50, 50, 50, 50, 50, 50, - 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 24, 24, - 24, 24, 0, 0, 0, 0, 0, 5, 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, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 17, 17, 17, 0, 17, - 17, 0, 0, 0, 0, 0, 17, 17, 17, 17, 50, 50, 50, 50, 0, 50, 50, 50, 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, 23, 20, 21, + 151, 152, 153, 154, 155, 156, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, + 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 0, 17, 17, 17, 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, 17, 17, 17, 0, 0, 0, 0, 17, - 23, 20, 21, 149, 24, 24, 24, 24, 0, 0, 0, 0, 0, 0, 0, 0, 5, 5, 5, 5, 5, - 5, 5, 5, 5, 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, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 5, 5, + 1, 5, 5, 5, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -1670,15 +1729,21 @@ 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, 50, 50, 50, 50, 50, 50, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 155, 155, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 155, 155, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 5, 5, 5, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 5, 5, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 127, 127, 127, 127, 127, + 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, + 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, + 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, + 127, 127, 127, 157, 157, 127, 127, 127, 127, 127, 127, 127, 127, 127, + 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, + 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 157, 157, 127, + 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 5, 5, 5, 5, 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, 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, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, @@ -1706,96 +1771,119 @@ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, - 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 19, 19, 19, 19, 19, 19, 19, + 0, 0, 0, 0, 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, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, - 19, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, - 99, 99, 99, 99, 99, 99, 99, 99, 99, 19, 19, 19, 19, 19, 19, 19, 0, 19, - 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 99, - 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, - 99, 99, 99, 99, 99, 99, 99, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, - 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 99, 0, 99, - 99, 0, 0, 99, 0, 0, 99, 99, 0, 0, 99, 99, 99, 99, 0, 99, 99, 99, 99, 99, - 99, 99, 99, 19, 19, 19, 19, 0, 19, 0, 19, 19, 19, 19, 19, 19, 19, 0, 19, - 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 99, 99, 99, 99, 99, 99, 99, 99, - 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, + 19, 19, 19, 19, 19, 19, 19, 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, 19, 19, 19, 19, 19, 19, 19, 0, 19, 19, 19, 19, 19, 19, 19, + 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 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, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, + 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 101, 0, 101, + 101, 0, 0, 101, 0, 0, 101, 101, 0, 0, 101, 101, 101, 101, 0, 101, 101, + 101, 101, 101, 101, 101, 101, 19, 19, 19, 19, 0, 19, 0, 19, 19, 19, 19, + 19, 19, 19, 0, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 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, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, - 19, 19, 19, 19, 19, 19, 19, 19, 99, 99, 0, 99, 99, 99, 99, 0, 0, 99, 99, - 99, 99, 99, 99, 99, 99, 0, 99, 99, 99, 99, 99, 99, 99, 0, 19, 19, 19, 19, + 19, 101, 101, 0, 101, 101, 101, 101, 0, 0, 101, 101, 101, 101, 101, 101, + 101, 101, 0, 101, 101, 101, 101, 101, 101, 101, 0, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, - 19, 19, 19, 19, 99, 99, 0, 99, 99, 99, 99, 0, 99, 99, 99, 99, 99, 0, 99, - 0, 0, 0, 99, 99, 99, 99, 99, 99, 99, 0, 19, 19, 19, 19, 19, 19, 19, 19, + 19, 19, 19, 101, 101, 0, 101, 101, 101, 101, 0, 101, 101, 101, 101, 101, + 0, 101, 0, 0, 0, 101, 101, 101, 101, 101, 101, 101, 0, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, - 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, - 99, 99, 99, 99, 99, 99, 99, 99, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, - 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 99, 99, - 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, - 99, 99, 99, 99, 99, 99, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, - 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 99, 99, 99, 99, - 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, - 99, 99, 99, 99, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, - 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 99, 99, 99, 99, 99, 99, - 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, - 99, 99, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, - 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 99, 99, 99, 99, 99, 99, 99, 99, - 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, + 19, 19, 19, 19, 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, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, + 19, 19, 19, 19, 19, 19, 19, 19, 19, 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, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, + 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 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, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, - 19, 19, 19, 19, 19, 19, 19, 19, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, - 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 19, 19, + 19, 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, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, - 19, 19, 19, 19, 19, 19, 19, 19, 0, 0, 99, 99, 99, 99, 99, 99, 99, 99, 99, - 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 5, 19, + 19, 19, 19, 19, 19, 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, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, + 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 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, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, + 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 0, 0, + 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, 5, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, - 19, 19, 19, 19, 19, 19, 5, 19, 19, 19, 19, 19, 19, 99, 99, 99, 99, 99, - 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, - 99, 99, 5, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, - 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 5, 19, 19, 19, 19, 19, 19, 99, - 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, - 99, 99, 99, 99, 99, 99, 5, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, - 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 5, 19, 19, 19, - 19, 19, 19, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, - 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 5, 19, 19, 19, 19, 19, 19, 19, + 19, 19, 19, 5, 19, 19, 19, 19, 19, 19, 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, 5, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, + 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 5, 19, 19, 19, 19, + 19, 19, 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, 5, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, - 5, 19, 19, 19, 19, 19, 19, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, - 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 5, 19, 19, 19, + 19, 19, 19, 19, 19, 5, 19, 19, 19, 19, 19, 19, 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, 5, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, + 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 5, 19, 19, + 19, 19, 19, 19, 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, 5, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, - 19, 19, 19, 19, 5, 19, 19, 19, 19, 19, 19, 99, 19, 0, 0, 6, 7, 8, 9, 10, - 11, 12, 13, 14, 15, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 6, 7, 8, 9, 10, - 11, 12, 13, 14, 15, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 6, 7, 8, 9, 10, - 11, 12, 13, 14, 15, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, + 19, 19, 19, 19, 19, 19, 19, 5, 19, 19, 19, 19, 19, 19, 101, 19, 0, 0, 6, + 7, 8, 9, 10, 11, 12, 13, 14, 15, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 6, + 7, 8, 9, 10, 11, 12, 13, 14, 15, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 6, + 7, 8, 9, 10, 11, 12, 13, 14, 15, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, - 5, 5, 0, 0, 0, 0, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, + 5, 5, 5, 5, 5, 5, 5, 0, 0, 0, 0, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, - 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, - 174, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, + 0, 0, 0, 150, 150, 23, 20, 21, 151, 152, 153, 154, 155, 156, 0, 0, 0, 0, + 0, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, + 5, 5, 5, 5, 5, 5, 5, 5, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 0, + 5, 0, 0, 5, 0, 0, 0, 5, 0, 0, 0, 5, 5, 5, 5, 5, 0, 0, 0, 0, 0, 0, 0, 0, + 5, 0, 0, 0, 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 0, 5, 5, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 5, 5, 5, 5, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 5, 5, 5, 5, 5, 5, + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, + 5, 5, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 5, 5, 5, 5, 5, 5, + 5, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 178, 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, 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, 174, 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, 178, 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, 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, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, - 50, 50, 50, 50, 50, 50, 50, 50, 50, 174, 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, 178, 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, 50, 50, 50, 50, 50, 50, 50, - 174, 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, 178, 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, 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, 174, 50, 50, 50, 50, 50, 50, 50, 50, 174, - 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 174, 50, 50, + 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 178, 50, + 50, 50, 50, 50, 50, 50, 50, 178, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, + 50, 50, 50, 50, 50, 178, 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, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, @@ -1806,32 +1894,32 @@ 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, 50, 50, 50, 50, 50, 50, 50, + 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 178, 50, 50, 50, 50, + 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 178, 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, 174, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, - 50, 50, 50, 50, 50, 50, 174, 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, 174, 50, + 50, 50, 50, 50, 50, 50, 178, 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, 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, 50, 50, 50, 50, 50, 50, 50, + 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 178, 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, 174, 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, 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, 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, 178, 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, 174, 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, 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, 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, 178, 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, 174, 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, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, @@ -1842,26 +1930,32 @@ 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, 50, 50, 50, 50, 50, 50, 50, + 50, 50, 50, 50, 50, 50, 50, 50, 178, 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, - 174, 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, 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, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 0, 0, 0, + 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, 50, 50, 50, 50, 50, 50, 50, 50, + 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, 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, 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, 1, 1, 1, 1, 1, 1, 1, 1, + 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, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, 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, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 17, 17, 17, 17, 17, 17, + 1, 1, 1, 1, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, @@ -1874,13 +1968,13 @@ 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 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, 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, 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, 0, 0, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, }; /* Returns the numeric value as double for Unicode characters @@ -1915,20 +2009,26 @@ case 0x1810: case 0x1946: case 0x19D0: + case 0x1A80: + case 0x1A90: case 0x1B50: case 0x1BB0: case 0x1C40: case 0x1C50: case 0x2070: case 0x2080: + case 0x2189: case 0x24EA: case 0x24FF: case 0x3007: case 0x96F6: case 0xA620: + case 0xA6EF: case 0xA8D0: case 0xA900: + case 0xA9D0: case 0xAA50: + case 0xABF0: case 0xF9B2: case 0xFF10: #ifdef Py_UNICODE_WIDE @@ -1939,6 +2039,8 @@ case 0x1D7E2: case 0x1D7EC: case 0x1D7F6: + case 0x1F100: + case 0x1F101: #endif return (double) 0.0; case 0x0031: @@ -1948,7 +2050,6 @@ case 0x07C1: case 0x0967: case 0x09E7: - case 0x09F4: case 0x0A67: case 0x0AE7: case 0x0B67: @@ -1969,6 +2070,9 @@ case 0x1811: case 0x1947: case 0x19D1: + case 0x19DA: + case 0x1A81: + case 0x1A91: case 0x1B51: case 0x1BB1: case 0x1C41: @@ -1994,9 +2098,12 @@ case 0x5E7A: case 0x5F0C: case 0xA621: + case 0xA6E6: case 0xA8D1: case 0xA901: + case 0xA9D1: case 0xAA51: + case 0xABF1: case 0xFF11: #ifdef Py_UNICODE_WIDE case 0x10107: @@ -2007,8 +2114,13 @@ case 0x10320: case 0x103D1: case 0x104A1: + case 0x10858: case 0x10916: case 0x10A40: + case 0x10A7D: + case 0x10B58: + case 0x10B78: + case 0x10E60: case 0x12415: case 0x1241E: case 0x1242C: @@ -2021,29 +2133,41 @@ case 0x1D7E3: case 0x1D7ED: case 0x1D7F7: + case 0x1F102: case 0x2092A: #endif return (double) 1.0; + case 0x2152: + return (double) 1.0/10.0; + case 0x09F4: + case 0xA833: + return (double) 1.0/16.0; case 0x00BD: case 0x0D74: case 0x0F2A: case 0x2CFD: + case 0xA831: #ifdef Py_UNICODE_WIDE case 0x10141: case 0x10175: case 0x10176: + case 0x10E7B: #endif return (double) 1.0/2.0; case 0x2153: #ifdef Py_UNICODE_WIDE + case 0x10E7D: case 0x1245A: case 0x1245D: #endif return (double) 1.0/3.0; case 0x00BC: + case 0x09F7: case 0x0D73: + case 0xA830: #ifdef Py_UNICODE_WIDE case 0x10140: + case 0x10E7C: case 0x12460: case 0x12462: #endif @@ -2055,11 +2179,17 @@ case 0x12461: #endif return (double) 1.0/6.0; + case 0x2150: + return (double) 1.0/7.0; + case 0x09F5: case 0x215B: + case 0xA834: #ifdef Py_UNICODE_WIDE case 0x1245F: #endif return (double) 1.0/8.0; + case 0x2151: + return (double) 1.0/9.0; case 0x0BF0: case 0x0D70: case 0x1372: @@ -2092,8 +2222,12 @@ case 0x10164: case 0x10322: case 0x103D3: + case 0x1085B: case 0x10917: case 0x10A44: + case 0x10B5C: + case 0x10B7C: + case 0x10E69: case 0x1D369: #endif return (double) 10.0; @@ -2111,8 +2245,12 @@ case 0x10152: case 0x1016A: case 0x103D5: + case 0x1085D: case 0x10919: case 0x10A46: + case 0x10B5E: + case 0x10B7E: + case 0x10E72: #endif return (double) 100.0; case 0x0BF2: @@ -2128,7 +2266,10 @@ case 0x1014D: case 0x10154: case 0x10171: + case 0x1085E: case 0x10A47: + case 0x10B5F: + case 0x10B7F: #endif return (double) 1000.0; case 0x137C: @@ -2138,6 +2279,7 @@ #ifdef Py_UNICODE_WIDE case 0x1012B: case 0x10155: + case 0x1085F: #endif return (double) 10000.0; case 0x2188: @@ -2215,7 +2357,6 @@ case 0x07C2: case 0x0968: case 0x09E8: - case 0x09F5: case 0x0A68: case 0x0AE8: case 0x0B68: @@ -2236,6 +2377,8 @@ case 0x1812: case 0x1948: case 0x19D2: + case 0x1A82: + case 0x1A92: case 0x1B52: case 0x1BB2: case 0x1C42: @@ -2263,9 +2406,12 @@ case 0x8CB3: case 0x8D30: case 0xA622: + case 0xA6E7: case 0xA8D2: case 0xA902: + case 0xA9D2: case 0xAA52: + case 0xABF2: case 0xF978: case 0xFF12: #ifdef Py_UNICODE_WIDE @@ -2276,7 +2422,12 @@ case 0x1015E: case 0x103D2: case 0x104A2: + case 0x10859: + case 0x1091A: case 0x10A41: + case 0x10B59: + case 0x10B79: + case 0x10E61: case 0x12400: case 0x12416: case 0x1241F: @@ -2292,12 +2443,14 @@ case 0x1D7E4: case 0x1D7EE: case 0x1D7F8: + case 0x1F103: case 0x22390: #endif return (double) 2.0; case 0x2154: #ifdef Py_UNICODE_WIDE case 0x10177: + case 0x10E7E: case 0x1245B: case 0x1245E: #endif @@ -2315,13 +2468,18 @@ #ifdef Py_UNICODE_WIDE case 0x10111: case 0x103D4: + case 0x1085C: case 0x10918: case 0x10A45: + case 0x10B5D: + case 0x10B7D: + case 0x10E6A: case 0x1D36A: #endif return (double) 20.0; #ifdef Py_UNICODE_WIDE case 0x1011A: + case 0x10E73: return (double) 200.0; #endif #ifdef Py_UNICODE_WIDE @@ -2357,7 +2515,6 @@ case 0x07C3: case 0x0969: case 0x09E9: - case 0x09F6: case 0x0A69: case 0x0AE9: case 0x0B69: @@ -2378,6 +2535,8 @@ case 0x1813: case 0x1949: case 0x19D3: + case 0x1A83: + case 0x1A93: case 0x1B53: case 0x1BB3: case 0x1C43: @@ -2404,15 +2563,23 @@ case 0x53C4: case 0x5F0E: case 0xA623: + case 0xA6E8: case 0xA8D3: case 0xA903: + case 0xA9D3: case 0xAA53: + case 0xABF3: case 0xF96B: case 0xFF13: #ifdef Py_UNICODE_WIDE case 0x10109: case 0x104A3: + case 0x1085A: + case 0x1091B: case 0x10A42: + case 0x10B5A: + case 0x10B7A: + case 0x10E62: case 0x12401: case 0x12408: case 0x12417: @@ -2433,16 +2600,22 @@ case 0x1D7E5: case 0x1D7EF: case 0x1D7F9: + case 0x1F104: case 0x20AFD: case 0x20B19: case 0x22998: case 0x23B1B: #endif return (double) 3.0; + case 0x09F6: + case 0xA835: + return (double) 3.0/16.0; case 0x0F2B: return (double) 3.0/2.0; case 0x00BE: + case 0x09F8: case 0x0D75: + case 0xA832: #ifdef Py_UNICODE_WIDE case 0x10178: #endif @@ -2458,6 +2631,7 @@ #ifdef Py_UNICODE_WIDE case 0x10112: case 0x10165: + case 0x10E6B: case 0x1D36B: case 0x20983: #endif @@ -2465,6 +2639,7 @@ #ifdef Py_UNICODE_WIDE case 0x1011B: case 0x1016B: + case 0x10E74: return (double) 300.0; #endif #ifdef Py_UNICODE_WIDE @@ -2499,7 +2674,6 @@ case 0x07C4: case 0x096A: case 0x09EA: - case 0x09F7: case 0x0A6A: case 0x0AEA: case 0x0B6A: @@ -2518,6 +2692,8 @@ case 0x1814: case 0x194A: case 0x19D4: + case 0x1A84: + case 0x1A94: case 0x1B54: case 0x1BB4: case 0x1C44: @@ -2541,14 +2717,20 @@ case 0x56DB: case 0x8086: case 0xA624: + case 0xA6E9: case 0xA8D4: case 0xA904: + case 0xA9D4: case 0xAA54: + case 0xABF4: case 0xFF14: #ifdef Py_UNICODE_WIDE case 0x1010A: case 0x104A4: case 0x10A43: + case 0x10B5B: + case 0x10B7B: + case 0x10E63: case 0x12402: case 0x12409: case 0x1240F: @@ -2570,6 +2752,7 @@ case 0x1D7E6: case 0x1D7F0: case 0x1D7FA: + case 0x1F105: case 0x20064: case 0x200E2: case 0x2626D: @@ -2582,6 +2765,7 @@ case 0x534C: #ifdef Py_UNICODE_WIDE case 0x10113: + case 0x10E6C: case 0x1D36C: case 0x2098C: case 0x2099C: @@ -2589,6 +2773,7 @@ return (double) 40.0; #ifdef Py_UNICODE_WIDE case 0x1011C: + case 0x10E75: return (double) 400.0; #endif #ifdef Py_UNICODE_WIDE @@ -2641,6 +2826,8 @@ case 0x1815: case 0x194B: case 0x19D5: + case 0x1A85: + case 0x1A95: case 0x1B55: case 0x1BB5: case 0x1C45: @@ -2664,9 +2851,12 @@ case 0x4E94: case 0x4F0D: case 0xA625: + case 0xA6EA: case 0xA8D5: case 0xA905: + case 0xA9D5: case 0xAA55: + case 0xABF5: case 0xFF15: #ifdef Py_UNICODE_WIDE case 0x1010B: @@ -2677,6 +2867,7 @@ case 0x10173: case 0x10321: case 0x104A5: + case 0x10E64: case 0x12403: case 0x1240A: case 0x12410: @@ -2694,6 +2885,7 @@ case 0x1D7E7: case 0x1D7F1: case 0x1D7FB: + case 0x1F106: case 0x20121: #endif return (double) 5.0; @@ -2722,6 +2914,8 @@ case 0x10169: case 0x10174: case 0x10323: + case 0x10A7E: + case 0x10E6D: case 0x1D36D: #endif return (double) 50.0; @@ -2737,6 +2931,7 @@ case 0x1016E: case 0x1016F: case 0x10170: + case 0x10E76: #endif return (double) 500.0; case 0x2181: @@ -2778,6 +2973,8 @@ case 0x1816: case 0x194C: case 0x19D6: + case 0x1A86: + case 0x1A96: case 0x1B56: case 0x1BB6: case 0x1C46: @@ -2801,15 +2998,19 @@ case 0x9646: case 0x9678: case 0xA626: + case 0xA6EB: case 0xA8D6: case 0xA906: + case 0xA9D6: case 0xAA56: + case 0xABF6: case 0xF9D1: case 0xF9D3: case 0xFF16: #ifdef Py_UNICODE_WIDE case 0x1010C: case 0x104A6: + case 0x10E65: case 0x12404: case 0x1240B: case 0x12411: @@ -2823,17 +3024,20 @@ case 0x1D7E8: case 0x1D7F2: case 0x1D7FC: + case 0x1F107: case 0x20AEA: #endif return (double) 6.0; case 0x1377: #ifdef Py_UNICODE_WIDE case 0x10115: + case 0x10E6E: case 0x1D36E: #endif return (double) 60.0; #ifdef Py_UNICODE_WIDE case 0x1011E: + case 0x10E77: return (double) 600.0; #endif #ifdef Py_UNICODE_WIDE @@ -2868,6 +3072,8 @@ case 0x1817: case 0x194D: case 0x19D7: + case 0x1A87: + case 0x1A97: case 0x1B57: case 0x1BB7: case 0x1C47: @@ -2891,13 +3097,17 @@ case 0x67D2: case 0x6F06: case 0xA627: + case 0xA6EC: case 0xA8D7: case 0xA907: + case 0xA9D7: case 0xAA57: + case 0xABF7: case 0xFF17: #ifdef Py_UNICODE_WIDE case 0x1010D: case 0x104A7: + case 0x10E66: case 0x12405: case 0x1240C: case 0x12412: @@ -2912,6 +3122,7 @@ case 0x1D7E9: case 0x1D7F3: case 0x1D7FD: + case 0x1F108: case 0x20001: #endif return (double) 7.0; @@ -2922,11 +3133,13 @@ case 0x1378: #ifdef Py_UNICODE_WIDE case 0x10116: + case 0x10E6F: case 0x1D36F: #endif return (double) 70.0; #ifdef Py_UNICODE_WIDE case 0x1011F: + case 0x10E78: return (double) 700.0; #endif #ifdef Py_UNICODE_WIDE @@ -2961,6 +3174,8 @@ case 0x1818: case 0x194E: case 0x19D8: + case 0x1A88: + case 0x1A98: case 0x1B58: case 0x1BB8: case 0x1C48: @@ -2982,13 +3197,17 @@ case 0x516B: case 0x634C: case 0xA628: + case 0xA6ED: case 0xA8D8: case 0xA908: + case 0xA9D8: case 0xAA58: + case 0xABF8: case 0xFF18: #ifdef Py_UNICODE_WIDE case 0x1010E: case 0x104A8: + case 0x10E67: case 0x12406: case 0x1240D: case 0x12413: @@ -3002,16 +3221,19 @@ case 0x1D7EA: case 0x1D7F4: case 0x1D7FE: + case 0x1F109: #endif return (double) 8.0; case 0x1379: #ifdef Py_UNICODE_WIDE case 0x10117: + case 0x10E70: case 0x1D370: #endif return (double) 80.0; #ifdef Py_UNICODE_WIDE case 0x10120: + case 0x10E79: return (double) 800.0; #endif #ifdef Py_UNICODE_WIDE @@ -3046,6 +3268,8 @@ case 0x1819: case 0x194F: case 0x19D9: + case 0x1A89: + case 0x1A99: case 0x1B59: case 0x1BB9: case 0x1C49: @@ -3068,13 +3292,17 @@ case 0x5EFE: case 0x7396: case 0xA629: + case 0xA6EE: case 0xA8D9: case 0xA909: + case 0xA9D9: case 0xAA59: + case 0xABF9: case 0xFF19: #ifdef Py_UNICODE_WIDE case 0x1010F: case 0x104A9: + case 0x10E68: case 0x12407: case 0x1240E: case 0x12414: @@ -3090,6 +3318,7 @@ case 0x1D7EB: case 0x1D7F5: case 0x1D7FF: + case 0x1F10A: case 0x2F890: #endif return (double) 9.0; @@ -3099,12 +3328,14 @@ #ifdef Py_UNICODE_WIDE case 0x10118: case 0x10341: + case 0x10E71: case 0x1D371: #endif return (double) 90.0; #ifdef Py_UNICODE_WIDE case 0x10121: case 0x1034A: + case 0x10E7A: return (double) 900.0; #endif #ifdef Py_UNICODE_WIDE From python-checkins at python.org Thu Mar 18 23:14:36 2010 From: python-checkins at python.org (barry.warsaw) Date: Thu, 18 Mar 2010 23:14:36 +0100 (CET) Subject: [Python-checkins] r79063 - in python/branches/release26-maint: Include/patchlevel.h Lib/distutils/__init__.py Lib/idlelib/idlever.py Lib/pydoc_topics.py Misc/NEWS Misc/RPM/python-2.6.spec README Message-ID: <20100318221436.92D24E0B8@mail.python.org> Author: barry.warsaw Date: Thu Mar 18 23:14:36 2010 New Revision: 79063 Log: Bumping to 2.6.5 final. Modified: python/branches/release26-maint/Include/patchlevel.h python/branches/release26-maint/Lib/distutils/__init__.py python/branches/release26-maint/Lib/idlelib/idlever.py python/branches/release26-maint/Lib/pydoc_topics.py python/branches/release26-maint/Misc/NEWS python/branches/release26-maint/Misc/RPM/python-2.6.spec python/branches/release26-maint/README Modified: python/branches/release26-maint/Include/patchlevel.h ============================================================================== --- python/branches/release26-maint/Include/patchlevel.h (original) +++ python/branches/release26-maint/Include/patchlevel.h Thu Mar 18 23:14:36 2010 @@ -23,11 +23,11 @@ #define PY_MAJOR_VERSION 2 #define PY_MINOR_VERSION 6 #define PY_MICRO_VERSION 5 -#define PY_RELEASE_LEVEL PY_RELEASE_LEVEL_GAMMA -#define PY_RELEASE_SERIAL 2 +#define PY_RELEASE_LEVEL PY_RELEASE_LEVEL_FINAL +#define PY_RELEASE_SERIAL 0 /* Version as a string */ -#define PY_VERSION "2.6.5rc2" +#define PY_VERSION "2.6.5" /*--end constants--*/ /* Subversion Revision number of this file (not of the repository) */ Modified: python/branches/release26-maint/Lib/distutils/__init__.py ============================================================================== --- python/branches/release26-maint/Lib/distutils/__init__.py (original) +++ python/branches/release26-maint/Lib/distutils/__init__.py Thu Mar 18 23:14:36 2010 @@ -22,5 +22,5 @@ # #--start constants-- -__version__ = "2.6.5rc2" +__version__ = "2.6.5" #--end constants-- Modified: python/branches/release26-maint/Lib/idlelib/idlever.py ============================================================================== --- python/branches/release26-maint/Lib/idlelib/idlever.py (original) +++ python/branches/release26-maint/Lib/idlelib/idlever.py Thu Mar 18 23:14:36 2010 @@ -1 +1 @@ -IDLE_VERSION = "2.6.5rc2" +IDLE_VERSION = "2.6.5" Modified: python/branches/release26-maint/Lib/pydoc_topics.py ============================================================================== --- python/branches/release26-maint/Lib/pydoc_topics.py (original) +++ python/branches/release26-maint/Lib/pydoc_topics.py Thu Mar 18 23:14:36 2010 @@ -1,4 +1,4 @@ -# Autogenerated by Sphinx on Tue Mar 9 17:06:31 2010 +# Autogenerated by Sphinx on Thu Mar 18 18:09:37 2010 topics = {'assert': u'\nThe ``assert`` statement\n************************\n\nAssert statements are a convenient way to insert debugging assertions\ninto a program:\n\n assert_stmt ::= "assert" expression ["," expression]\n\nThe simple form, ``assert expression``, is equivalent to\n\n if __debug__:\n if not expression: raise AssertionError\n\nThe extended form, ``assert expression1, expression2``, is equivalent\nto\n\n if __debug__:\n if not expression1: raise AssertionError(expression2)\n\nThese equivalences assume that ``__debug__`` and ``AssertionError``\nrefer to the built-in variables with those names. In the current\nimplementation, the built-in variable ``__debug__`` is ``True`` under\nnormal circumstances, ``False`` when optimization is requested\n(command line option -O). The current code generator emits no code\nfor an assert statement when optimization is requested at compile\ntime. Note that it is unnecessary to include the source code for the\nexpression that failed in the error message; it will be displayed as\npart of the stack trace.\n\nAssignments to ``__debug__`` are illegal. The value for the built-in\nvariable is determined when the interpreter starts.\n', 'assignment': u'\nAssignment statements\n*********************\n\nAssignment statements are used to (re)bind names to values and to\nmodify attributes or items of mutable objects:\n\n assignment_stmt ::= (target_list "=")+ (expression_list | yield_expression)\n target_list ::= target ("," target)* [","]\n target ::= identifier\n | "(" target_list ")"\n | "[" target_list "]"\n | attributeref\n | subscription\n | slicing\n\n(See section *Primaries* for the syntax definitions for the last three\nsymbols.)\n\nAn assignment statement evaluates the expression list (remember that\nthis can be a single expression or a comma-separated list, the latter\nyielding a tuple) and assigns the single resulting object to each of\nthe target lists, from left to right.\n\nAssignment is defined recursively depending on the form of the target\n(list). When a target is part of a mutable object (an attribute\nreference, subscription or slicing), the mutable object must\nultimately perform the assignment and decide about its validity, and\nmay raise an exception if the assignment is unacceptable. The rules\nobserved by various types and the exceptions raised are given with the\ndefinition of the object types (see section *The standard type\nhierarchy*).\n\nAssignment of an object to a target list is recursively defined as\nfollows.\n\n* If the target list is a single target: The object is assigned to\n that target.\n\n* If the target list is a comma-separated list of targets: The object\n must be an iterable with the same number of items as there are\n targets in the target list, and the items are assigned, from left to\n right, to the corresponding targets. (This rule is relaxed as of\n Python 1.5; in earlier versions, the object had to be a tuple.\n Since strings are sequences, an assignment like ``a, b = "xy"`` is\n now legal as long as the string has the right length.)\n\nAssignment of an object to a single target is recursively defined as\nfollows.\n\n* If the target is an identifier (name):\n\n * If the name does not occur in a ``global`` statement in the\n current code block: the name is bound to the object in the current\n local namespace.\n\n * Otherwise: the name is bound to the object in the current global\n namespace.\n\n The name is rebound if it was already bound. This may cause the\n reference count for the object previously bound to the name to reach\n zero, causing the object to be deallocated and its destructor (if it\n has one) to be called.\n\n* If the target is a target list enclosed in parentheses or in square\n brackets: The object must be an iterable with the same number of\n items as there are targets in the target list, and its items are\n assigned, from left to right, to the corresponding targets.\n\n* If the target is an attribute reference: The primary expression in\n the reference is evaluated. It should yield an object with\n assignable attributes; if this is not the case, ``TypeError`` is\n raised. That object is then asked to assign the assigned object to\n the given attribute; if it cannot perform the assignment, it raises\n an exception (usually but not necessarily ``AttributeError``).\n\n Note: If the object is a class instance and the attribute reference\n occurs on both sides of the assignment operator, the RHS expression,\n ``a.x`` can access either an instance attribute or (if no instance\n attribute exists) a class attribute. The LHS target ``a.x`` is\n always set as an instance attribute, creating it if necessary.\n Thus, the two occurrences of ``a.x`` do not necessarily refer to the\n same attribute: if the RHS expression refers to a class attribute,\n the LHS creates a new instance attribute as the target of the\n assignment:\n\n class Cls:\n x = 3 # class variable\n inst = Cls()\n inst.x = inst.x + 1 # writes inst.x as 4 leaving Cls.x as 3\n\n This description does not necessarily apply to descriptor\n attributes, such as properties created with ``property()``.\n\n* If the target is a subscription: The primary expression in the\n reference is evaluated. It should yield either a mutable sequence\n object (such as a list) or a mapping object (such as a dictionary).\n Next, the subscript expression is evaluated.\n\n If the primary is a mutable sequence object (such as a list), the\n subscript must yield a plain integer. If it is negative, the\n sequence\'s length is added to it. The resulting value must be a\n nonnegative integer less than the sequence\'s length, and the\n sequence is asked to assign the assigned object to its item with\n that index. If the index is out of range, ``IndexError`` is raised\n (assignment to a subscripted sequence cannot add new items to a\n list).\n\n If the primary is a mapping object (such as a dictionary), the\n subscript must have a type compatible with the mapping\'s key type,\n and the mapping is then asked to create a key/datum pair which maps\n the subscript to the assigned object. This can either replace an\n existing key/value pair with the same key value, or insert a new\n key/value pair (if no key with the same value existed).\n\n* If the target is a slicing: The primary expression in the reference\n is evaluated. It should yield a mutable sequence object (such as a\n list). The assigned object should be a sequence object of the same\n type. Next, the lower and upper bound expressions are evaluated,\n insofar they are present; defaults are zero and the sequence\'s\n length. The bounds should evaluate to (small) integers. If either\n bound is negative, the sequence\'s length is added to it. The\n resulting bounds are clipped to lie between zero and the sequence\'s\n length, inclusive. Finally, the sequence object is asked to replace\n the slice with the items of the assigned sequence. The length of\n the slice may be different from the length of the assigned sequence,\n thus changing the length of the target sequence, if the object\n allows it.\n\n**CPython implementation detail:** In the current implementation, the\nsyntax for targets is taken to be the same as for expressions, and\ninvalid syntax is rejected during the code generation phase, causing\nless detailed error messages.\n\nWARNING: Although the definition of assignment implies that overlaps\nbetween the left-hand side and the right-hand side are \'safe\' (for\nexample ``a, b = b, a`` swaps two variables), overlaps *within* the\ncollection of assigned-to variables are not safe! For instance, the\nfollowing program prints ``[0, 2]``:\n\n x = [0, 1]\n i = 0\n i, x[i] = 1, 2\n print x\n\n\nAugmented assignment statements\n===============================\n\nAugmented assignment is the combination, in a single statement, of a\nbinary operation and an assignment statement:\n\n augmented_assignment_stmt ::= augtarget augop (expression_list | yield_expression)\n augtarget ::= identifier | attributeref | subscription | slicing\n augop ::= "+=" | "-=" | "*=" | "/=" | "//=" | "%=" | "**="\n | ">>=" | "<<=" | "&=" | "^=" | "|="\n\n(See section *Primaries* for the syntax definitions for the last three\nsymbols.)\n\nAn augmented assignment evaluates the target (which, unlike normal\nassignment statements, cannot be an unpacking) and the expression\nlist, performs the binary operation specific to the type of assignment\non the two operands, and assigns the result to the original target.\nThe target is only evaluated once.\n\nAn augmented assignment expression like ``x += 1`` can be rewritten as\n``x = x + 1`` to achieve a similar, but not exactly equal effect. In\nthe augmented version, ``x`` is only evaluated once. Also, when\npossible, the actual operation is performed *in-place*, meaning that\nrather than creating a new object and assigning that to the target,\nthe old object is modified instead.\n\nWith the exception of assigning to tuples and multiple targets in a\nsingle statement, the assignment done by augmented assignment\nstatements is handled the same way as normal assignments. Similarly,\nwith the exception of the possible *in-place* behavior, the binary\noperation performed by augmented assignment is the same as the normal\nbinary operations.\n\nFor targets which are attribute references, the same *caveat about\nclass and instance attributes* applies as for regular assignments.\n', 'atom-identifiers': u'\nIdentifiers (Names)\n*******************\n\nAn identifier occurring as an atom is a name. See section\n*Identifiers and keywords* for lexical definition and section *Naming\nand binding* for documentation of naming and binding.\n\nWhen the name is bound to an object, evaluation of the atom yields\nthat object. When a name is not bound, an attempt to evaluate it\nraises a ``NameError`` exception.\n\n**Private name mangling:** When an identifier that textually occurs in\na class definition begins with two or more underscore characters and\ndoes not end in two or more underscores, it is considered a *private\nname* of that class. Private names are transformed to a longer form\nbefore code is generated for them. The transformation inserts the\nclass name in front of the name, with leading underscores removed, and\na single underscore inserted in front of the class name. For example,\nthe identifier ``__spam`` occurring in a class named ``Ham`` will be\ntransformed to ``_Ham__spam``. This transformation is independent of\nthe syntactical context in which the identifier is used. If the\ntransformed name is extremely long (longer than 255 characters),\nimplementation defined truncation may happen. If the class name\nconsists only of underscores, no transformation is done.\n', Modified: python/branches/release26-maint/Misc/NEWS ============================================================================== --- python/branches/release26-maint/Misc/NEWS (original) +++ python/branches/release26-maint/Misc/NEWS Thu Mar 18 23:14:36 2010 @@ -4,6 +4,12 @@ (editors: check NEWS.help for information about editing NEWS using ReST.) +What's New in Python 2.6.5? +=========================== + +*Release date: 2010-03-18* + + What's New in Python 2.6.5 rc 2? ================================ Modified: python/branches/release26-maint/Misc/RPM/python-2.6.spec ============================================================================== --- python/branches/release26-maint/Misc/RPM/python-2.6.spec (original) +++ python/branches/release26-maint/Misc/RPM/python-2.6.spec Thu Mar 18 23:14:36 2010 @@ -39,7 +39,7 @@ %define name python #--start constants-- -%define version 2.6.5rc2 +%define version 2.6.5 %define libver 2.6 #--end constants-- %define release 1pydotorg Modified: python/branches/release26-maint/README ============================================================================== --- python/branches/release26-maint/README (original) +++ python/branches/release26-maint/README Thu Mar 18 23:14:36 2010 @@ -1,5 +1,5 @@ -This is Python version 2.6.5 rc 2 -================================= +This is Python version 2.6.5 +============================ Copyright (c) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010 Python Software Foundation. From python-checkins at python.org Thu Mar 18 23:16:16 2010 From: python-checkins at python.org (barry.warsaw) Date: Thu, 18 Mar 2010 23:16:16 +0100 (CET) Subject: [Python-checkins] r79064 - python/tags/r265 Message-ID: <20100318221616.46C28E0B8@mail.python.org> Author: barry.warsaw Date: Thu Mar 18 23:16:16 2010 New Revision: 79064 Log: Tagging 2.6.5 final. Added: python/tags/r265/ - copied from r79063, /python/branches/release26-maint/ From python-checkins at python.org Thu Mar 18 23:19:01 2010 From: python-checkins at python.org (florent.xicluna) Date: Thu, 18 Mar 2010 23:19:01 +0100 (CET) Subject: [Python-checkins] r79065 - python/branches/py3k/Tools/unicode/makeunicodedata.py Message-ID: <20100318221901.47C82E0B8@mail.python.org> Author: florent.xicluna Date: Thu Mar 18 23:19:01 2010 New Revision: 79065 Log: Missing update from previous changeset r79062. Modified: python/branches/py3k/Tools/unicode/makeunicodedata.py Modified: python/branches/py3k/Tools/unicode/makeunicodedata.py ============================================================================== --- python/branches/py3k/Tools/unicode/makeunicodedata.py (original) +++ python/branches/py3k/Tools/unicode/makeunicodedata.py Thu Mar 18 23:19:01 2010 @@ -31,7 +31,7 @@ VERSION = "2.6" # The Unicode Database -UNIDATA_VERSION = "5.1.0" +UNIDATA_VERSION = "5.2.0" UNICODE_DATA = "UnicodeData%s.txt" COMPOSITION_EXCLUSIONS = "CompositionExclusions%s.txt" EASTASIAN_WIDTH = "EastAsianWidth%s.txt" From python-checkins at python.org Thu Mar 18 23:29:52 2010 From: python-checkins at python.org (benjamin.peterson) Date: Thu, 18 Mar 2010 23:29:52 +0100 (CET) Subject: [Python-checkins] r79066 - in python/branches/py3k: Doc/library/tokenize.rst Lib/test/test_tokenize.py Lib/tokenize.py Misc/NEWS Message-ID: <20100318222952.7C0FFDC4B@mail.python.org> Author: benjamin.peterson Date: Thu Mar 18 23:29:52 2010 New Revision: 79066 Log: in tokenize.detect_encoding(), return utf-8-sig when a BOM is found Modified: python/branches/py3k/Doc/library/tokenize.rst python/branches/py3k/Lib/test/test_tokenize.py python/branches/py3k/Lib/tokenize.py python/branches/py3k/Misc/NEWS Modified: python/branches/py3k/Doc/library/tokenize.rst ============================================================================== --- python/branches/py3k/Doc/library/tokenize.rst (original) +++ python/branches/py3k/Doc/library/tokenize.rst Thu Mar 18 23:29:52 2010 @@ -95,7 +95,8 @@ It detects the encoding from the presence of a UTF-8 BOM or an encoding cookie as specified in :pep:`263`. If both a BOM and a cookie are present, - but disagree, a SyntaxError will be raised. + but disagree, a SyntaxError will be raised. Note that if the BOM is found, + ``'utf-8-sig'`` will be returned as an encoding. If no encoding is specified, then the default of ``'utf-8'`` will be returned. Modified: python/branches/py3k/Lib/test/test_tokenize.py ============================================================================== --- python/branches/py3k/Lib/test/test_tokenize.py (original) +++ python/branches/py3k/Lib/test/test_tokenize.py Thu Mar 18 23:29:52 2010 @@ -726,7 +726,7 @@ b'do_something(else)\n' ) encoding, consumed_lines = detect_encoding(self.get_readline(lines)) - self.assertEquals(encoding, 'utf-8') + self.assertEquals(encoding, 'utf-8-sig') self.assertEquals(consumed_lines, [b'# something\n', b'print(something)\n']) @@ -747,7 +747,7 @@ b'do_something(else)\n' ) encoding, consumed_lines = detect_encoding(self.get_readline(lines)) - self.assertEquals(encoding, 'utf-8') + self.assertEquals(encoding, 'utf-8-sig') self.assertEquals(consumed_lines, [b'# coding=utf-8\n']) def test_mismatched_bom_and_cookie_first_line_raises_syntaxerror(self): @@ -779,7 +779,7 @@ b'do_something(else)\n' ) encoding, consumed_lines = detect_encoding(self.get_readline(lines)) - self.assertEquals(encoding, 'utf-8') + self.assertEquals(encoding, 'utf-8-sig') self.assertEquals(consumed_lines, [b'#! something\n', b'f# coding=utf-8\n']) @@ -833,12 +833,12 @@ readline = self.get_readline((b'\xef\xbb\xbfprint(something)\n',)) encoding, consumed_lines = detect_encoding(readline) - self.assertEquals(encoding, 'utf-8') + self.assertEquals(encoding, 'utf-8-sig') self.assertEquals(consumed_lines, [b'print(something)\n']) readline = self.get_readline((b'\xef\xbb\xbf',)) encoding, consumed_lines = detect_encoding(readline) - self.assertEquals(encoding, 'utf-8') + self.assertEquals(encoding, 'utf-8-sig') self.assertEquals(consumed_lines, []) readline = self.get_readline((b'# coding: bad\n',)) Modified: python/branches/py3k/Lib/tokenize.py ============================================================================== --- python/branches/py3k/Lib/tokenize.py (original) +++ python/branches/py3k/Lib/tokenize.py Thu Mar 18 23:29:52 2010 @@ -301,14 +301,16 @@ in. It detects the encoding from the presence of a utf-8 bom or an encoding - cookie as specified in pep-0263. If both a bom and a cookie are present, - but disagree, a SyntaxError will be raised. If the encoding cookie is an - invalid charset, raise a SyntaxError. + cookie as specified in pep-0263. If both a bom and a cookie are present, but + disagree, a SyntaxError will be raised. If the encoding cookie is an invalid + charset, raise a SyntaxError. Note that if a utf-8 bom is found, + 'utf-8-sig' is returned. If no encoding is specified, then the default of 'utf-8' will be returned. """ bom_found = False encoding = None + default = 'utf-8' def read_or_stop(): try: return readline() @@ -340,8 +342,9 @@ if first.startswith(BOM_UTF8): bom_found = True first = first[3:] + default = 'utf-8-sig' if not first: - return 'utf-8', [] + return default, [] encoding = find_cookie(first) if encoding: @@ -349,13 +352,13 @@ second = read_or_stop() if not second: - return 'utf-8', [first] + return default, [first] encoding = find_cookie(second) if encoding: return encoding, [first, second] - return 'utf-8', [first, second] + return default, [first, second] def tokenize(readline): @@ -394,6 +397,9 @@ indents = [0] if encoding is not None: + if encoding == "utf-8-sig": + # BOM will already have been stripped. + encoding = "utf-8" yield TokenInfo(ENCODING, encoding, (0, 0), (0, 0), '') while True: # loop over lines in stream try: Modified: python/branches/py3k/Misc/NEWS ============================================================================== --- python/branches/py3k/Misc/NEWS (original) +++ python/branches/py3k/Misc/NEWS Thu Mar 18 23:29:52 2010 @@ -283,6 +283,9 @@ Library ------- +- ``tokenize.detect_encoding`` now returns ``'utf-8-sig'`` when a UTF-8 BOM is + detected. + - Issue #8024: Update the Unicode database to 5.2. - Issue #6716/2: Backslash-replace error output in compilall. From python-checkins at python.org Thu Mar 18 23:34:15 2010 From: python-checkins at python.org (benjamin.peterson) Date: Thu, 18 Mar 2010 23:34:15 +0100 (CET) Subject: [Python-checkins] r79067 - python/branches/py3k/Lib/tokenize.py Message-ID: <20100318223415.8916CDC4B@mail.python.org> Author: benjamin.peterson Date: Thu Mar 18 23:34:15 2010 New Revision: 79067 Log: fix for files with coding cookies and BOMs Modified: python/branches/py3k/Lib/tokenize.py Modified: python/branches/py3k/Lib/tokenize.py ============================================================================== --- python/branches/py3k/Lib/tokenize.py (original) +++ python/branches/py3k/Lib/tokenize.py Thu Mar 18 23:34:15 2010 @@ -333,9 +333,11 @@ # This behaviour mimics the Python interpreter raise SyntaxError("unknown encoding: " + encoding) - if bom_found and codec.name != 'utf-8': - # This behaviour mimics the Python interpreter - raise SyntaxError('encoding problem: utf-8') + if bom_found: + if codec.name != 'utf-8': + # This behaviour mimics the Python interpreter + raise SyntaxError('encoding problem: utf-8') + encoding += '-sig' return encoding first = read_or_stop() From python-checkins at python.org Thu Mar 18 23:37:39 2010 From: python-checkins at python.org (benjamin.peterson) Date: Thu, 18 Mar 2010 23:37:39 +0100 (CET) Subject: [Python-checkins] r79068 - in python/branches/py3k: Lib/py_compile.py Misc/NEWS Message-ID: <20100318223739.254E0DC4B@mail.python.org> Author: benjamin.peterson Date: Thu Mar 18 23:37:38 2010 New Revision: 79068 Log: kill py_compile's homemade encoding detection in favor of tokenize.detect_encoding() (see #8168) Modified: python/branches/py3k/Lib/py_compile.py python/branches/py3k/Misc/NEWS Modified: python/branches/py3k/Lib/py_compile.py ============================================================================== --- python/branches/py3k/Lib/py_compile.py (original) +++ python/branches/py3k/Lib/py_compile.py Thu Mar 18 23:37:38 2010 @@ -7,8 +7,8 @@ import imp import marshal import os -import re import sys +import tokenize import traceback MAGIC = imp.get_magic() @@ -69,21 +69,6 @@ (x >> 16) & 0xff, (x >> 24) & 0xff])) -def read_encoding(file, default): - """Read the first two lines of the file looking for coding: xyzzy.""" - f = open(file, "rb") - try: - for i in range(2): - line = f.readline() - if not line: - break - m = re.match(br".*\bcoding:\s*(\S+)\b", line) - if m: - return m.group(1).decode("ascii") - return default - finally: - f.close() - def compile(file, cfile=None, dfile=None, doraise=False): """Byte-compile one Python source file to Python bytecode. @@ -119,7 +104,8 @@ directories). """ - encoding = read_encoding(file, "utf-8") + with open(file, "rb") as f: + encoding = tokenize.detect_encoding(f.readline)[0] with open(file, encoding=encoding) as f: try: timestamp = int(os.fstat(f.fileno()).st_mtime) Modified: python/branches/py3k/Misc/NEWS ============================================================================== --- python/branches/py3k/Misc/NEWS (original) +++ python/branches/py3k/Misc/NEWS Thu Mar 18 23:37:38 2010 @@ -283,6 +283,8 @@ Library ------- +- Issue #8168: py_compile now handles files with utf-8 BOMS. + - ``tokenize.detect_encoding`` now returns ``'utf-8-sig'`` when a UTF-8 BOM is detected. From python-checkins at python.org Thu Mar 18 23:43:41 2010 From: python-checkins at python.org (benjamin.peterson) Date: Thu, 18 Mar 2010 23:43:41 +0100 (CET) Subject: [Python-checkins] r79069 - python/branches/py3k/Doc/library/tokenize.rst Message-ID: <20100318224341.D9A98E178@mail.python.org> Author: benjamin.peterson Date: Thu Mar 18 23:43:41 2010 New Revision: 79069 Log: show a common usage of detect_encoding Modified: python/branches/py3k/Doc/library/tokenize.rst Modified: python/branches/py3k/Doc/library/tokenize.rst ============================================================================== --- python/branches/py3k/Doc/library/tokenize.rst (original) +++ python/branches/py3k/Doc/library/tokenize.rst Thu Mar 18 23:43:41 2010 @@ -98,7 +98,17 @@ but disagree, a SyntaxError will be raised. Note that if the BOM is found, ``'utf-8-sig'`` will be returned as an encoding. - If no encoding is specified, then the default of ``'utf-8'`` will be returned. + If no encoding is specified, then the default of ``'utf-8'`` will be + returned. + + :func:`detect_encoding` is useful for robustly reading Python source files. + A common pattern for this follows:: + + def read_python_source(file_name): + with open(file_name, "rb") as fp: + encoding = tokenize.detect_encoding(fp.readline)[0] + with open(file_name, "r", encoding=encoding) as fp: + return fp.read() Example of a script re-writer that transforms float literals into Decimal From python-checkins at python.org Thu Mar 18 23:44:54 2010 From: python-checkins at python.org (benjamin.peterson) Date: Thu, 18 Mar 2010 23:44:54 +0100 (CET) Subject: [Python-checkins] r79070 - python/trunk/Lib/py_compile.py Message-ID: <20100318224454.4C8B8DE4F@mail.python.org> Author: benjamin.peterson Date: Thu Mar 18 23:44:54 2010 New Revision: 79070 Log: these lines can now be dispensed with Modified: python/trunk/Lib/py_compile.py Modified: python/trunk/Lib/py_compile.py ============================================================================== --- python/trunk/Lib/py_compile.py (original) +++ python/trunk/Lib/py_compile.py Thu Mar 18 23:44:54 2010 @@ -109,8 +109,6 @@ except AttributeError: timestamp = long(os.stat(file).st_mtime) codestring = f.read() - if codestring and codestring[-1] != '\n': - codestring = codestring + '\n' try: codeobject = __builtin__.compile(codestring, dfile or file,'exec') except Exception,err: From python-checkins at python.org Thu Mar 18 23:46:40 2010 From: python-checkins at python.org (collin.winter) Date: Thu, 18 Mar 2010 23:46:40 +0100 (CET) Subject: [Python-checkins] r79071 - in python/branches/py3k: Doc/library/weakref.rst Include/code.h Lib/test/test_code.py Lib/test/test_sys.py Misc/NEWS Objects/codeobject.c Message-ID: <20100318224640.9A7B6DE4F@mail.python.org> Author: collin.winter Date: Thu Mar 18 23:46:40 2010 New Revision: 79071 Log: Merged revisions 79060 via svnmerge from svn+ssh://pythondev at svn.python.org/python/trunk ........ r79060 | collin.winter | 2010-03-18 14:54:01 -0700 (Thu, 18 Mar 2010) | 4 lines Add support for weak references to code objects. This will be used by an optimization in the incoming Python 3 JIT. Patch by Reid Kleckner! ........ Modified: python/branches/py3k/ (props changed) python/branches/py3k/Doc/library/weakref.rst python/branches/py3k/Include/code.h python/branches/py3k/Lib/test/test_code.py python/branches/py3k/Lib/test/test_sys.py python/branches/py3k/Misc/NEWS python/branches/py3k/Objects/codeobject.c Modified: python/branches/py3k/Doc/library/weakref.rst ============================================================================== --- python/branches/py3k/Doc/library/weakref.rst (original) +++ python/branches/py3k/Doc/library/weakref.rst Thu Mar 18 23:46:40 2010 @@ -59,10 +59,10 @@ Not all objects can be weakly referenced; those objects which can include class instances, functions written in Python (but not in C), instance methods, sets, frozensets, file objects, :term:`generator`\s, type objects, sockets, arrays, -deques, and regular expression pattern objects. +deques, regular expression pattern objects, and code objects. .. versionchanged:: 3.2 - Added support for thread.lock and threading.Lock. + Added support for thread.lock, threading.Lock, and code objects. Several built-in types such as :class:`list` and :class:`dict` do not directly support weak references but can add support through subclassing:: Modified: python/branches/py3k/Include/code.h ============================================================================== --- python/branches/py3k/Include/code.h (original) +++ python/branches/py3k/Include/code.h Thu Mar 18 23:46:40 2010 @@ -27,6 +27,7 @@ PyObject *co_lnotab; /* string (encoding addr<->lineno mapping) See Objects/lnotab_notes.txt for details. */ void *co_zombieframe; /* for optimization only (see frameobject.c) */ + PyObject *co_weakreflist; /* to support weakrefs to code objects */ } PyCodeObject; /* Masks for co_flags above */ Modified: python/branches/py3k/Lib/test/test_code.py ============================================================================== --- python/branches/py3k/Lib/test/test_code.py (original) +++ python/branches/py3k/Lib/test/test_code.py Thu Mar 18 23:46:40 2010 @@ -103,8 +103,10 @@ """ import unittest +import weakref import _testcapi + def consts(t): """Yield a doctest-safe sequence of object reprs.""" for elt in t: @@ -131,12 +133,37 @@ self.assertEquals(co.co_firstlineno, 15) +class CodeWeakRefTest(unittest.TestCase): + + def test_basic(self): + # Create a code object in a clean environment so that we know we have + # the only reference to it left. + namespace = {} + exec("def f(): pass", globals(), namespace) + f = namespace["f"] + del namespace + + self.called = False + def callback(code): + self.called = True + + # f is now the last reference to the function, and through it, the code + # object. While we hold it, check that we can create a weakref and + # deref it. Then delete it, and check that the callback gets called and + # the reference dies. + coderef = weakref.ref(f.__code__, callback) + self.assertTrue(bool(coderef())) + del f + self.assertFalse(bool(coderef())) + self.assertTrue(self.called) + + def test_main(verbose=None): from test.support import run_doctest, run_unittest from test import test_code run_doctest(test_code, verbose) - run_unittest(CodeTest) + run_unittest(CodeTest, CodeWeakRefTest) -if __name__ == '__main__': +if __name__ == "__main__": test_main() Modified: python/branches/py3k/Lib/test/test_sys.py ============================================================================== --- python/branches/py3k/Lib/test/test_sys.py (original) +++ python/branches/py3k/Lib/test/test_sys.py Thu Mar 18 23:46:40 2010 @@ -588,7 +588,7 @@ return inner check(get_cell().__closure__[0], size(h + 'P')) # code - check(get_cell().__code__, size(h + '5i8Pi2P')) + check(get_cell().__code__, size(h + '5i8Pi3P')) # complex check(complex(0,1), size(h + '2d')) # method_descriptor (descriptor object) Modified: python/branches/py3k/Misc/NEWS ============================================================================== --- python/branches/py3k/Misc/NEWS (original) +++ python/branches/py3k/Misc/NEWS Thu Mar 18 23:46:40 2010 @@ -233,6 +233,8 @@ instances from being copied with copy.copy(), and bytes subclasses from being pickled properly. +- Code objects now support weak references. + C-API ----- Modified: python/branches/py3k/Objects/codeobject.c ============================================================================== --- python/branches/py3k/Objects/codeobject.c (original) +++ python/branches/py3k/Objects/codeobject.c Thu Mar 18 23:46:40 2010 @@ -108,6 +108,7 @@ Py_INCREF(lnotab); co->co_lnotab = lnotab; co->co_zombieframe = NULL; + co->co_weakreflist = NULL; } return co; } @@ -331,6 +332,8 @@ Py_XDECREF(co->co_lnotab); if (co->co_zombieframe != NULL) PyObject_GC_Del(co->co_zombieframe); + if (co->co_weakreflist != NULL) + PyObject_ClearWeakRefs((PyObject*)co); PyObject_DEL(co); } @@ -462,7 +465,7 @@ 0, /* tp_traverse */ 0, /* tp_clear */ code_richcompare, /* tp_richcompare */ - 0, /* tp_weaklistoffset */ + offsetof(PyCodeObject, co_weakreflist), /* tp_weaklistoffset */ 0, /* tp_iter */ 0, /* tp_iternext */ 0, /* tp_methods */ From python-checkins at python.org Thu Mar 18 23:47:32 2010 From: python-checkins at python.org (collin.winter) Date: Thu, 18 Mar 2010 23:47:32 +0100 (CET) Subject: [Python-checkins] r79072 - python/branches/py3k-jit/JIT_TODO.txt Message-ID: <20100318224732.B5FC7DE4F@mail.python.org> Author: collin.winter Date: Thu Mar 18 23:47:32 2010 New Revision: 79072 Log: Mark 'import r900' as done. Modified: python/branches/py3k-jit/JIT_TODO.txt Modified: python/branches/py3k-jit/JIT_TODO.txt ============================================================================== --- python/branches/py3k-jit/JIT_TODO.txt (original) +++ python/branches/py3k-jit/JIT_TODO.txt Thu Mar 18 23:47:32 2010 @@ -9,7 +9,6 @@ TODO: - Import non-JIT related revisions into py3k, merge to py3k-jit: Relevant revisions: - - r900 - r834 - r823 - r799 @@ -41,6 +40,7 @@ Relevant revisions: - r1017 (r79038, r79041) - r953 (r79027) + - r900 (r79060, r79071) - r888 (r79016, r79019; r79020) - r835 (r79013, r79014) - r815 (Lib/test/test_dynamic.py, Lib/test/support.py; r79009) From python-checkins at python.org Thu Mar 18 23:55:46 2010 From: python-checkins at python.org (benjamin.peterson) Date: Thu, 18 Mar 2010 23:55:46 +0100 (CET) Subject: [Python-checkins] r79073 - python/trunk/Makefile.pre.in Message-ID: <20100318225546.6C021C501@mail.python.org> Author: benjamin.peterson Date: Thu Mar 18 23:55:46 2010 New Revision: 79073 Log: reignore bad_coding Modified: python/trunk/Makefile.pre.in Modified: python/trunk/Makefile.pre.in ============================================================================== --- python/trunk/Makefile.pre.in (original) +++ python/trunk/Makefile.pre.in Thu Mar 18 23:55:46 2010 @@ -907,12 +907,12 @@ PYTHONPATH=$(DESTDIR)$(LIBDEST) $(RUNSHARED) \ ./$(BUILDPYTHON) -Wi -tt $(DESTDIR)$(LIBDEST)/compileall.py \ -d $(LIBDEST) -f \ - -x 'badsyntax|site-packages|lib2to3/tests/data' \ + -x 'bad_coding|badsyntax|site-packages|lib2to3/tests/data' \ $(DESTDIR)$(LIBDEST) PYTHONPATH=$(DESTDIR)$(LIBDEST) $(RUNSHARED) \ ./$(BUILDPYTHON) -Wi -tt -O $(DESTDIR)$(LIBDEST)/compileall.py \ -d $(LIBDEST) -f \ - -x 'badsyntax|site-packages|lib2to3/tests/data' \ + -x 'bad_coding|badsyntax|site-packages|lib2to3/tests/data' \ $(DESTDIR)$(LIBDEST) -PYTHONPATH=$(DESTDIR)$(LIBDEST) $(RUNSHARED) \ ./$(BUILDPYTHON) -Wi -t $(DESTDIR)$(LIBDEST)/compileall.py \ From python-checkins at python.org Thu Mar 18 23:55:53 2010 From: python-checkins at python.org (benjamin.peterson) Date: Thu, 18 Mar 2010 23:55:53 +0100 (CET) Subject: [Python-checkins] r79074 - in python/branches/py3k: Lib/py_compile.py Message-ID: <20100318225553.CDD2CF91A@mail.python.org> Author: benjamin.peterson Date: Thu Mar 18 23:55:53 2010 New Revision: 79074 Log: Merged revisions 79070 via svnmerge from svn+ssh://pythondev at svn.python.org/python/trunk ........ r79070 | benjamin.peterson | 2010-03-18 17:44:54 -0500 (Thu, 18 Mar 2010) | 1 line these lines can now be dispensed with ........ Modified: python/branches/py3k/ (props changed) python/branches/py3k/Lib/py_compile.py Modified: python/branches/py3k/Lib/py_compile.py ============================================================================== --- python/branches/py3k/Lib/py_compile.py (original) +++ python/branches/py3k/Lib/py_compile.py Thu Mar 18 23:55:53 2010 @@ -112,8 +112,6 @@ except AttributeError: timestamp = int(os.stat(file).st_mtime) codestring = f.read() - if codestring and codestring[-1] != '\n': - codestring = codestring + '\n' try: codeobject = builtins.compile(codestring, dfile or file,'exec') except Exception as err: From python-checkins at python.org Thu Mar 18 23:58:19 2010 From: python-checkins at python.org (benjamin.peterson) Date: Thu, 18 Mar 2010 23:58:19 +0100 (CET) Subject: [Python-checkins] r79075 - in python/branches/py3k: Makefile.pre.in Message-ID: <20100318225819.93CB9C74D@mail.python.org> Author: benjamin.peterson Date: Thu Mar 18 23:58:19 2010 New Revision: 79075 Log: Merged revisions 79073 via svnmerge from svn+ssh://pythondev at svn.python.org/python/trunk ........ r79073 | benjamin.peterson | 2010-03-18 17:55:46 -0500 (Thu, 18 Mar 2010) | 1 line reignore bad_coding ........ Modified: python/branches/py3k/ (props changed) python/branches/py3k/Makefile.pre.in Modified: python/branches/py3k/Makefile.pre.in ============================================================================== --- python/branches/py3k/Makefile.pre.in (original) +++ python/branches/py3k/Makefile.pre.in Thu Mar 18 23:58:19 2010 @@ -913,12 +913,12 @@ -PYTHONPATH=$(DESTDIR)$(LIBDEST) $(RUNSHARED) \ ./$(BUILDPYTHON) -Wi $(DESTDIR)$(LIBDEST)/compileall.py \ -d $(LIBDEST) -f \ - -x 'badsyntax|site-packages|lib2to3/tests/data' \ + -x 'bad_coding|badsyntax|site-packages|lib2to3/tests/data' \ $(DESTDIR)$(LIBDEST) -PYTHONPATH=$(DESTDIR)$(LIBDEST) $(RUNSHARED) \ ./$(BUILDPYTHON) -Wi -O $(DESTDIR)$(LIBDEST)/compileall.py \ -d $(LIBDEST) -f \ - -x 'badsyntax|site-packages|lib2to3/tests/data' \ + -x 'bad_coding|badsyntax|site-packages|lib2to3/tests/data' \ $(DESTDIR)$(LIBDEST) -PYTHONPATH=$(DESTDIR)$(LIBDEST) $(RUNSHARED) \ ./$(BUILDPYTHON) -Wi $(DESTDIR)$(LIBDEST)/compileall.py \ From python-checkins at python.org Fri Mar 19 00:01:29 2010 From: python-checkins at python.org (benjamin.peterson) Date: Fri, 19 Mar 2010 00:01:29 +0100 (CET) Subject: [Python-checkins] r79076 - in python/branches/release31-maint: Makefile.pre.in Message-ID: <20100318230129.47CB0DEBA@mail.python.org> Author: benjamin.peterson Date: Fri Mar 19 00:01:29 2010 New Revision: 79076 Log: Merged revisions 79075 via svnmerge from svn+ssh://pythondev at svn.python.org/python/branches/py3k ................ r79075 | benjamin.peterson | 2010-03-18 17:58:19 -0500 (Thu, 18 Mar 2010) | 9 lines Merged revisions 79073 via svnmerge from svn+ssh://pythondev at svn.python.org/python/trunk ........ r79073 | benjamin.peterson | 2010-03-18 17:55:46 -0500 (Thu, 18 Mar 2010) | 1 line reignore bad_coding ........ ................ Modified: python/branches/release31-maint/ (props changed) python/branches/release31-maint/Makefile.pre.in Modified: python/branches/release31-maint/Makefile.pre.in ============================================================================== --- python/branches/release31-maint/Makefile.pre.in (original) +++ python/branches/release31-maint/Makefile.pre.in Fri Mar 19 00:01:29 2010 @@ -911,12 +911,12 @@ -PYTHONPATH=$(DESTDIR)$(LIBDEST) $(RUNSHARED) \ ./$(BUILDPYTHON) -Wi $(DESTDIR)$(LIBDEST)/compileall.py \ -d $(LIBDEST) -f \ - -x 'badsyntax|site-packages|lib2to3/tests/data' \ + -x 'bad_coding|badsyntax|site-packages|lib2to3/tests/data' \ $(DESTDIR)$(LIBDEST) -PYTHONPATH=$(DESTDIR)$(LIBDEST) $(RUNSHARED) \ ./$(BUILDPYTHON) -Wi -O $(DESTDIR)$(LIBDEST)/compileall.py \ -d $(LIBDEST) -f \ - -x 'badsyntax|site-packages|lib2to3/tests/data' \ + -x 'bad_coding|badsyntax|site-packages|lib2to3/tests/data' \ $(DESTDIR)$(LIBDEST) -PYTHONPATH=$(DESTDIR)$(LIBDEST) $(RUNSHARED) \ ./$(BUILDPYTHON) -Wi $(DESTDIR)$(LIBDEST)/compileall.py \ From python-checkins at python.org Fri Mar 19 00:05:29 2010 From: python-checkins at python.org (benjamin.peterson) Date: Fri, 19 Mar 2010 00:05:29 +0100 (CET) Subject: [Python-checkins] r79077 - sandbox/trunk/2to3/lib2to3/pgen2/tokenize.py Message-ID: <20100318230529.2ED0BE417@mail.python.org> Author: benjamin.peterson Date: Fri Mar 19 00:05:29 2010 New Revision: 79077 Log: port detect_encoding improvements from py3k Modified: sandbox/trunk/2to3/lib2to3/pgen2/tokenize.py Modified: sandbox/trunk/2to3/lib2to3/pgen2/tokenize.py ============================================================================== --- sandbox/trunk/2to3/lib2to3/pgen2/tokenize.py (original) +++ sandbox/trunk/2to3/lib2to3/pgen2/tokenize.py Fri Mar 19 00:05:29 2010 @@ -251,14 +251,16 @@ in. It detects the encoding from the presence of a utf-8 bom or an encoding - cookie as specified in pep-0263. If both a bom and a cookie are present, - but disagree, a SyntaxError will be raised. If the encoding cookie is an - invalid charset, raise a SyntaxError. + cookie as specified in pep-0263. If both a bom and a cookie are present, but + disagree, a SyntaxError will be raised. If the encoding cookie is an invalid + charset, raise a SyntaxError. Note that if a utf-8 bom is found, + 'utf-8-sig' is returned. If no encoding is specified, then the default of 'utf-8' will be returned. """ bom_found = False encoding = None + default = 'utf-8' def read_or_stop(): try: return readline() @@ -285,17 +287,16 @@ if codec.name != 'utf-8': # This behaviour mimics the Python interpreter raise SyntaxError('encoding problem: utf-8') - else: - # Allow it to be properly encoded and decoded. - encoding = 'utf-8-sig' + encoding += '-sig' return encoding first = read_or_stop() if first.startswith(BOM_UTF8): bom_found = True first = first[3:] + default = 'utf-8-sig' if not first: - return 'utf-8', [] + return default, [] encoding = find_cookie(first) if encoding: @@ -303,13 +304,13 @@ second = read_or_stop() if not second: - return 'utf-8', [first] + return default, [first] encoding = find_cookie(second) if encoding: return encoding, [first, second] - return 'utf-8', [first, second] + return default, [first, second] def untokenize(iterable): """Transform tokens back into Python source code. From python-checkins at python.org Fri Mar 19 00:12:43 2010 From: python-checkins at python.org (benjamin.peterson) Date: Fri, 19 Mar 2010 00:12:43 +0100 (CET) Subject: [Python-checkins] r79078 - python/trunk/Lib/compiler/__init__.py Message-ID: <20100318231243.9183DE417@mail.python.org> Author: benjamin.peterson Date: Fri Mar 19 00:12:43 2010 New Revision: 79078 Log: make compiler's py3k warning a full deprecation warning #6837 Modified: python/trunk/Lib/compiler/__init__.py Modified: python/trunk/Lib/compiler/__init__.py ============================================================================== --- python/trunk/Lib/compiler/__init__.py (original) +++ python/trunk/Lib/compiler/__init__.py Fri Mar 19 00:12:43 2010 @@ -20,9 +20,11 @@ compileFile(filename) Generates a .pyc file by compiling filename. """ -from warnings import warnpy3k -warnpy3k("the compiler package has been removed in Python 3.0", stacklevel=2) -del warnpy3k + +import warnings + +warnings.warn("The compiler package is deprecated and removed in Python 3.x.", + DeprecationWarning, stacklevel=2) from compiler.transformer import parse, parseFile from compiler.visitor import walk From python-checkins at python.org Fri Mar 19 00:14:15 2010 From: python-checkins at python.org (collin.winter) Date: Fri, 19 Mar 2010 00:14:15 +0100 (CET) Subject: [Python-checkins] r79079 - python/branches/py3k-jit/Misc/ACKS Message-ID: <20100318231415.CCD35E417@mail.python.org> Author: collin.winter Date: Fri Mar 19 00:14:15 2010 New Revision: 79079 Log: Add in the Unladen Swallow ACKS list. Modified: python/branches/py3k-jit/Misc/ACKS Modified: python/branches/py3k-jit/Misc/ACKS ============================================================================== --- python/branches/py3k-jit/Misc/ACKS (original) +++ python/branches/py3k-jit/Misc/ACKS Fri Mar 19 00:14:15 2010 @@ -9,6 +9,7 @@ PS: In the standard Python distribution, this file is encoded in UTF-8. +James Abbatiello Joaquin Cuenca Abela David Abrahams Jim Ahlstrom @@ -273,6 +274,7 @@ Dan Gass Andrew Gaul Stephen M. Gava +Alex Gaynor Harry Henry Gebel Marius Gedminas Thomas Gellekum @@ -375,6 +377,7 @@ Geert Jansen Jack Jansen Bill Janssen +Dmitry Jemerov Drew Jenkins Flemming Kj?r Jensen Jiba @@ -410,6 +413,7 @@ Steve Kirsch Sebastian Kirsche Ron Klatchko +Reid Kleckner Bastian Kleineidam Bob Kline Matthias Klose @@ -428,6 +432,7 @@ Ivan Krsti? Andrew Kuchling Vladimir Kushnir +David Laing Cameron Laird Tino Lange Andrew Langmead @@ -454,6 +459,7 @@ Christopher Tur Lesniewski-Laas Mark Levinson William Lewis +Nick Lewycky Robert van Liere Ross Light Shawn Ligocki @@ -845,6 +851,7 @@ Heiko Wundram Doug Wyatt Florent Xicluna +Jeffrey Yasskin Ka-Ping Yee Bob Yodlowski Danny Yoo From python-checkins at python.org Fri Mar 19 00:14:22 2010 From: python-checkins at python.org (benjamin.peterson) Date: Fri, 19 Mar 2010 00:14:22 +0100 (CET) Subject: [Python-checkins] r79080 - python/branches/py3k Message-ID: <20100318231422.1419AF78F@mail.python.org> Author: benjamin.peterson Date: Fri Mar 19 00:14:21 2010 New Revision: 79080 Log: Blocked revisions 79078 via svnmerge ........ r79078 | benjamin.peterson | 2010-03-18 18:12:43 -0500 (Thu, 18 Mar 2010) | 1 line make compiler's py3k warning a full deprecation warning #6837 ........ Modified: python/branches/py3k/ (props changed) From nnorwitz at gmail.com Fri Mar 19 00:17:29 2010 From: nnorwitz at gmail.com (Neal Norwitz) Date: Thu, 18 Mar 2010 18:17:29 -0500 Subject: [Python-checkins] Python Regression Test Failures doc (1) Message-ID: <20100318231729.GA29271@kbk-i386-bb.psfb.org> rm -rf build/* rm: cannot remove directory `build/doctrees/distutils': No such file or directrm: cannot lstat `build/doctrees/howto': No such file or directory make: [clean] Error 1 (ignored) rm -rf tools/sphinx rm -rf tools/pygments rm -rf tools/jinja2 rm -rf tools/docutils move directory `build/doctrees/faq': No such file or directory make: [clean] Error 1 (ignored) rm -rf tools/sphinx rm -rf tools/pygments rm -rf tools/jinja2 rm -rf tools/docutils Checking out Sphinx... svn: Working copy 'tools/sphinx' locked svn: run 'svn cleanup' to remove locks (type 'svn help cleanup' for details) make: *** [checkout] Error 1 From nnorwitz at gmail.com Fri Mar 19 00:17:20 2010 From: nnorwitz at gmail.com (Neal Norwitz) Date: Thu, 18 Mar 2010 18:17:20 -0500 Subject: [Python-checkins] Python Regression Test Failures all () Message-ID: <20100318231720.GA29224@kbk-i386-bb.psfb.org> From nnorwitz at gmail.com Fri Mar 19 00:17:20 2010 From: nnorwitz at gmail.com (Neal Norwitz) Date: Thu, 18 Mar 2010 18:17:20 -0500 Subject: [Python-checkins] Python Regression Test Failures all () Message-ID: <20100318231720.GA29221@kbk-i386-bb.psfb.org> From python-checkins at python.org Fri Mar 19 00:32:06 2010 From: python-checkins at python.org (collin.winter) Date: Fri, 19 Mar 2010 00:32:06 +0100 (CET) Subject: [Python-checkins] r79081 - in python/branches/py3k-jit: Doc/library/test.rst Doc/library/tokenize.rst Doc/library/weakref.rst Include/code.h Lib/py_compile.py Lib/test/support.py Lib/test/test_asynchat.py Lib/test/test_cgi.py Lib/test/test_code.py Lib/test/test_coding.py Lib/test/test_compile.py Lib/test/test_file.py Lib/test/test_fileio.py Lib/test/test_import.py Lib/test/test_io.py Lib/test/test_minidom.py Lib/test/test_pwd.py Lib/test/test_shutil.py Lib/test/test_socket.py Lib/test/test_structmembers.py Lib/test/test_sys.py Lib/test/test_tokenize.py Lib/test/test_unicodedata.py Lib/test/test_warnings.py Lib/tokenize.py Makefile.pre.in Misc/NEWS Modules/unicodedata_db.h Modules/unicodename_db.h Objects/codeobject.c Objects/unicodetype_db.h Python/compile.c Tools/unicode/makeunicodedata.py Message-ID: <20100318233206.19BD0E4F5@mail.python.org> Author: collin.winter Date: Fri Mar 19 00:32:03 2010 New Revision: 79081 Log: Merged revisions 79033,79035-79036,79040-79041,79045,79048,79050,79052,79057,79061-79062,79065-79069,79071,79074-79075 via svnmerge from svn+ssh://pythondev at svn.python.org/python/branches/py3k ................ r79033 | florent.xicluna | 2010-03-17 13:29:51 -0700 (Wed, 17 Mar 2010) | 17 lines Merged revisions 79030-79032 via svnmerge from svn+ssh://pythondev at svn.python.org/python/trunk ........ r79030 | florent.xicluna | 2010-03-17 20:05:04 +0100 (mer, 17 mar 2010) | 2 lines Cleanup in test_import and test_coding. ........ r79031 | florent.xicluna | 2010-03-17 20:15:56 +0100 (mer, 17 mar 2010) | 2 lines Cleanup some test cases using check_warnings and check_py3k_warnings. ........ r79032 | florent.xicluna | 2010-03-17 21:05:11 +0100 (mer, 17 mar 2010) | 2 lines Fix and check cgi module deprecation warnings. Revert an unwanted rename in test_import. ........ ................ r79035 | benjamin.peterson | 2010-03-17 13:56:58 -0700 (Wed, 17 Mar 2010) | 9 lines Merged revisions 79034 via svnmerge from svn+ssh://pythondev at svn.python.org/python/trunk ........ r79034 | benjamin.peterson | 2010-03-17 15:41:42 -0500 (Wed, 17 Mar 2010) | 1 line prevent lambda functions from having docstrings #8164 ........ ................ r79036 | benjamin.peterson | 2010-03-17 13:57:32 -0700 (Wed, 17 Mar 2010) | 1 line bring back commented out test ................ r79040 | antoine.pitrou | 2010-03-17 15:50:28 -0700 (Wed, 17 Mar 2010) | 14 lines NOTE: just porting tests here. Merged revisions 79039 via svnmerge from svn+ssh://pythondev at svn.python.org/python/trunk ........ r79039 | antoine.pitrou | 2010-03-17 23:45:39 +0100 (mer., 17 mars 2010) | 5 lines Issue #8104: socket.recv_into() and socket.recvfrom_into() now support writing into objects supporting the new buffer API, for example bytearrays or memoryviews. ........ ................ r79041 | collin.winter | 2010-03-17 16:49:15 -0700 (Wed, 17 Mar 2010) | 9 lines Merged revisions 79038 via svnmerge from svn+ssh://pythondev at svn.python.org/python/trunk ........ r79038 | collin.winter | 2010-03-17 15:36:26 -0700 (Wed, 17 Mar 2010) | 2 lines Fix a race condition in test_asynchat uncovered by the Unladen Swallow JIT. ........ ................ r79045 | collin.winter | 2010-03-17 17:23:44 -0700 (Wed, 17 Mar 2010) | 9 lines Merged revisions 79044 via svnmerge from svn+ssh://pythondev at svn.python.org/python/trunk ........ r79044 | collin.winter | 2010-03-17 17:10:34 -0700 (Wed, 17 Mar 2010) | 1 line Make test_pwd more stable in the face of unusual LDAP/NIS/Kerberos deployments (the old test was flaky on Google buildslaves). ........ ................ r79048 | ezio.melotti | 2010-03-18 05:29:13 -0700 (Thu, 18 Mar 2010) | 9 lines Merged revisions 79024 via svnmerge from svn+ssh://pythondev at svn.python.org/python/trunk ........ r79024 | ezio.melotti | 2010-03-17 16:22:34 +0200 (Wed, 17 Mar 2010) | 1 line Use "x in y" instead of y.find(x) != -1. ........ ................ r79050 | florent.xicluna | 2010-03-18 13:00:57 -0700 (Thu, 18 Mar 2010) | 9 lines Merged revisions 79049 via svnmerge from svn+ssh://pythondev at svn.python.org/python/trunk ........ r79049 | florent.xicluna | 2010-03-18 20:51:47 +0100 (jeu, 18 mar 2010) | 2 lines #8155: Preserve backward compatibility for test_support.check_warnings(). Add regression tests. ........ ................ r79052 | benjamin.peterson | 2010-03-18 14:23:05 -0700 (Thu, 18 Mar 2010) | 9 lines Merged revisions 79051 via svnmerge from svn+ssh://pythondev at svn.python.org/python/trunk ........ r79051 | benjamin.peterson | 2010-03-18 16:20:35 -0500 (Thu, 18 Mar 2010) | 1 line don't try to compile anything in lib2to3/tests/data #8169 ........ ................ r79057 | benjamin.peterson | 2010-03-18 14:36:06 -0700 (Thu, 18 Mar 2010) | 9 lines Merged revisions 79056 via svnmerge from svn+ssh://pythondev at svn.python.org/python/trunk ........ r79056 | benjamin.peterson | 2010-03-18 16:32:38 -0500 (Thu, 18 Mar 2010) | 1 line install tkinter and ttk tests ........ ................ r79061 | benjamin.peterson | 2010-03-18 14:58:43 -0700 (Thu, 18 Mar 2010) | 13 lines Merged revisions 78971-78972 via svnmerge from svn+ssh://pythondev at svn.python.org/python/trunk ........ r78971 | benjamin.peterson | 2010-03-14 22:00:35 -0500 (Sun, 14 Mar 2010) | 1 line remove mac 9 code ........ r78972 | benjamin.peterson | 2010-03-14 22:02:37 -0500 (Sun, 14 Mar 2010) | 1 line clean up files correctly ........ ................ r79062 | florent.xicluna | 2010-03-18 15:11:01 -0700 (Thu, 18 Mar 2010) | 9 lines Merged revisions 79059 via svnmerge from svn+ssh://pythondev at svn.python.org/python/trunk ........ r79059 | florent.xicluna | 2010-03-18 22:50:06 +0100 (jeu, 18 mar 2010) | 2 lines Issue #8024: Update the Unicode database to 5.2 ........ ................ r79065 | florent.xicluna | 2010-03-18 15:19:01 -0700 (Thu, 18 Mar 2010) | 2 lines Missing update from previous changeset r79062. ................ r79066 | benjamin.peterson | 2010-03-18 15:29:52 -0700 (Thu, 18 Mar 2010) | 1 line in tokenize.detect_encoding(), return utf-8-sig when a BOM is found ................ r79067 | benjamin.peterson | 2010-03-18 15:34:15 -0700 (Thu, 18 Mar 2010) | 1 line fix for files with coding cookies and BOMs ................ r79068 | benjamin.peterson | 2010-03-18 15:37:38 -0700 (Thu, 18 Mar 2010) | 1 line kill py_compile's homemade encoding detection in favor of tokenize.detect_encoding() (see #8168) ................ r79069 | benjamin.peterson | 2010-03-18 15:43:41 -0700 (Thu, 18 Mar 2010) | 1 line show a common usage of detect_encoding ................ r79071 | collin.winter | 2010-03-18 15:46:40 -0700 (Thu, 18 Mar 2010) | 11 lines Merged revisions 79060 via svnmerge from svn+ssh://pythondev at svn.python.org/python/trunk ........ r79060 | collin.winter | 2010-03-18 14:54:01 -0700 (Thu, 18 Mar 2010) | 4 lines Add support for weak references to code objects. This will be used by an optimization in the incoming Python 3 JIT. Patch by Reid Kleckner! ........ ................ r79074 | benjamin.peterson | 2010-03-18 15:55:53 -0700 (Thu, 18 Mar 2010) | 9 lines Merged revisions 79070 via svnmerge from svn+ssh://pythondev at svn.python.org/python/trunk ........ r79070 | benjamin.peterson | 2010-03-18 17:44:54 -0500 (Thu, 18 Mar 2010) | 1 line these lines can now be dispensed with ........ ................ r79075 | benjamin.peterson | 2010-03-18 15:58:19 -0700 (Thu, 18 Mar 2010) | 9 lines Merged revisions 79073 via svnmerge from svn+ssh://pythondev at svn.python.org/python/trunk ........ r79073 | benjamin.peterson | 2010-03-18 17:55:46 -0500 (Thu, 18 Mar 2010) | 1 line reignore bad_coding ........ ................ Modified: python/branches/py3k-jit/ (props changed) python/branches/py3k-jit/Doc/library/test.rst python/branches/py3k-jit/Doc/library/tokenize.rst python/branches/py3k-jit/Doc/library/weakref.rst python/branches/py3k-jit/Include/code.h python/branches/py3k-jit/Lib/py_compile.py python/branches/py3k-jit/Lib/test/support.py python/branches/py3k-jit/Lib/test/test_asynchat.py python/branches/py3k-jit/Lib/test/test_cgi.py python/branches/py3k-jit/Lib/test/test_code.py python/branches/py3k-jit/Lib/test/test_coding.py python/branches/py3k-jit/Lib/test/test_compile.py python/branches/py3k-jit/Lib/test/test_file.py python/branches/py3k-jit/Lib/test/test_fileio.py python/branches/py3k-jit/Lib/test/test_import.py python/branches/py3k-jit/Lib/test/test_io.py python/branches/py3k-jit/Lib/test/test_minidom.py python/branches/py3k-jit/Lib/test/test_pwd.py python/branches/py3k-jit/Lib/test/test_shutil.py python/branches/py3k-jit/Lib/test/test_socket.py python/branches/py3k-jit/Lib/test/test_structmembers.py python/branches/py3k-jit/Lib/test/test_sys.py python/branches/py3k-jit/Lib/test/test_tokenize.py python/branches/py3k-jit/Lib/test/test_unicodedata.py python/branches/py3k-jit/Lib/test/test_warnings.py python/branches/py3k-jit/Lib/tokenize.py python/branches/py3k-jit/Makefile.pre.in python/branches/py3k-jit/Misc/NEWS python/branches/py3k-jit/Modules/unicodedata_db.h python/branches/py3k-jit/Modules/unicodename_db.h python/branches/py3k-jit/Objects/codeobject.c python/branches/py3k-jit/Objects/unicodetype_db.h python/branches/py3k-jit/Python/compile.c python/branches/py3k-jit/Tools/unicode/makeunicodedata.py Modified: python/branches/py3k-jit/Doc/library/test.rst ============================================================================== --- python/branches/py3k-jit/Doc/library/test.rst (original) +++ python/branches/py3k-jit/Doc/library/test.rst Fri Mar 19 00:32:03 2010 @@ -89,17 +89,17 @@ guidelines to be followed: * The testing suite should exercise all classes, functions, and constants. This - includes not just the external API that is to be presented to the outside world - but also "private" code. + includes not just the external API that is to be presented to the outside + world but also "private" code. * Whitebox testing (examining the code being tested when the tests are being written) is preferred. Blackbox testing (testing only the published user - interface) is not complete enough to make sure all boundary and edge cases are - tested. + interface) is not complete enough to make sure all boundary and edge cases + are tested. * Make sure all possible values are tested including invalid ones. This makes - sure that not only all valid values are acceptable but also that improper values - are handled correctly. + sure that not only all valid values are acceptable but also that improper + values are handled correctly. * Exhaust as many code paths as possible. Test where branching occurs and thus tailor input to make sure as many different paths through the code are taken. @@ -119,8 +119,8 @@ behavior from side-effects of importing a module. * Try to maximize code reuse. On occasion, tests will vary by something as small - as what type of input is used. Minimize code duplication by subclassing a basic - test class with a class that specifies the input:: + as what type of input is used. Minimize code duplication by subclassing a + basic test class with a class that specifies the input:: class TestFuncAcceptsSequences(unittest.TestCase): @@ -154,10 +154,10 @@ suite. Running the script by itself automatically starts running all regression tests in the :mod:`test` package. It does this by finding all modules in the package whose name starts with ``test_``, importing them, and executing the -function :func:`test_main` if present. The names of tests to execute may also be -passed to the script. Specifying a single regression test (:program:`python -regrtest.py` :option:`test_spam.py`) will minimize output and only print whether -the test passed or failed and thus minimize output. +function :func:`test_main` if present. The names of tests to execute may also +be passed to the script. Specifying a single regression test (:program:`python +regrtest.py` :option:`test_spam.py`) will minimize output and only print +whether the test passed or failed and thus minimize output. Running :mod:`test.regrtest` directly allows what resources are available for tests to use to be set. You do this by using the :option:`-u` command-line @@ -172,10 +172,10 @@ regrtest.py` :option:`-h`. Some other ways to execute the regression tests depend on what platform the -tests are being executed on. On Unix, you can run :program:`make` :option:`test` -at the top-level directory where Python was built. On Windows, executing -:program:`rt.bat` from your :file:`PCBuild` directory will run all regression -tests. +tests are being executed on. On Unix, you can run :program:`make` +:option:`test` at the top-level directory where Python was built. On Windows, +executing :program:`rt.bat` from your :file:`PCBuild` directory will run all +regression tests. :mod:`test.support` --- Utility functions for tests @@ -200,8 +200,9 @@ .. exception:: ResourceDenied - Subclass of :exc:`unittest.SkipTest`. Raised when a resource (such as a network - connection) is not available. Raised by the :func:`requires` function. + Subclass of :exc:`unittest.SkipTest`. Raised when a resource (such as a + network connection) is not available. Raised by the :func:`requires` + function. The :mod:`test.support` module defines the following constants: @@ -242,22 +243,23 @@ .. function:: requires(resource, msg=None) Raise :exc:`ResourceDenied` if *resource* is not available. *msg* is the - argument to :exc:`ResourceDenied` if it is raised. Always returns True if called - by a function whose ``__name__`` is ``'__main__'``. Used when tests are executed - by :mod:`test.regrtest`. + argument to :exc:`ResourceDenied` if it is raised. Always returns + :const:`True` if called by a function whose ``__name__`` is ``'__main__'``. + Used when tests are executed by :mod:`test.regrtest`. .. function:: findfile(filename) - Return the path to the file named *filename*. If no match is found *filename* is - returned. This does not equal a failure since it could be the path to the file. + Return the path to the file named *filename*. If no match is found + *filename* is returned. This does not equal a failure since it could be the + path to the file. .. function:: run_unittest(*classes) Execute :class:`unittest.TestCase` subclasses passed to the function. The - function scans the classes for methods starting with the prefix ``test_`` and - executes the tests individually. + function scans the classes for methods starting with the prefix ``test_`` + and executes the tests individually. It is also legal to pass strings as parameters; these should be keys in ``sys.modules``. Each associated module will be scanned by @@ -270,7 +272,7 @@ This will run all tests defined in the named module. -.. function:: check_warnings(*filters, quiet=False) +.. function:: check_warnings(*filters, quiet=None) A convenience wrapper for ``warnings.catch_warnings()`` that makes it easier to test that a warning was correctly raised with a single @@ -278,30 +280,31 @@ ``warnings.catch_warnings(record=True)``. It accepts 2-tuples ``("message regexp", WarningCategory)`` as positional - arguments. When the optional keyword argument ``quiet`` is True, it does - not fail if a filter catches nothing. Without argument, it defaults to:: - - check_warnings(("", Warning), quiet=False) - - The main difference is that it verifies the warnings raised. If some filter - did not catch any warning, the test fails. If some warnings are not caught, - the test fails, too. To disable these checks, use argument ``quiet=True``. - - Another significant difference is that on entry to the context manager, a - :class:`WarningRecorder` instance is returned instead of a simple list. - The underlying warnings list is available via the recorder object's - :attr:`warnings` attribute, while the attributes of the last raised - warning are also accessible directly on the object. If no warning has - been raised, then the latter attributes will all be :const:`None`. + arguments. If there's some ``*filters`` defined, or if the optional keyword + argument ``quiet`` is :const:`False`, it checks if the warnings are + effective. If some filter did not catch any warning, the test fails. If some + warnings are not caught, the test fails, too. To disable these checks, set + argument ``quiet`` to :const:`True`. + + Without argument, it defaults to:: + + check_warnings(("", Warning), quiet=True) + + Additionally, on entry to the context manager, a :class:`WarningRecorder` + instance is returned. The underlying warnings list is available via the + recorder object's :attr:`warnings` attribute, while the attributes of the + last raised warning are also accessible directly on the object. If no + warning has been raised, then the latter attributes will all be + :const:`None`. A :meth:`reset` method is also provided on the recorder object. This - method simply clears the warning list. + method simply clears the warnings list. The context manager may be used like this:: import warnings - with check_warnings(): + with check_warnings(quiet=False): exec('assert(False, "Hey!")') warnings.warn(UserWarning("Hide me!")) @@ -322,7 +325,6 @@ assert len(w.warnings) == 0 .. versionchanged:: 2.7 - The test fails when the context manager do not catch any warning. New optional attributes ``*filters`` and ``quiet``. @@ -400,18 +402,19 @@ .. class:: EnvironmentVarGuard() - Class used to temporarily set or unset environment variables. Instances can be - used as a context manager and have a complete dictionary interface for - querying/modifying the underlying ``os.environ``. After exit from the context - manager all changes to environment variables done through this instance will - be rolled back. + Class used to temporarily set or unset environment variables. Instances can + be used as a context manager and have a complete dictionary interface for + querying/modifying the underlying ``os.environ``. After exit from the + context manager all changes to environment variables done through this + instance will be rolled back. .. versionchanged:: 3.1 Added dictionary interface. .. method:: EnvironmentVarGuard.set(envvar, value) - Temporarily set the environment variable ``envvar`` to the value of ``value``. + Temporarily set the environment variable ``envvar`` to the value of + ``value``. .. method:: EnvironmentVarGuard.unset(envvar) @@ -423,4 +426,3 @@ Class used to record warnings for unit tests. See documentation of :func:`check_warnings` above for more details. - Modified: python/branches/py3k-jit/Doc/library/tokenize.rst ============================================================================== --- python/branches/py3k-jit/Doc/library/tokenize.rst (original) +++ python/branches/py3k-jit/Doc/library/tokenize.rst Fri Mar 19 00:32:03 2010 @@ -95,9 +95,20 @@ It detects the encoding from the presence of a UTF-8 BOM or an encoding cookie as specified in :pep:`263`. If both a BOM and a cookie are present, - but disagree, a SyntaxError will be raised. + but disagree, a SyntaxError will be raised. Note that if the BOM is found, + ``'utf-8-sig'`` will be returned as an encoding. - If no encoding is specified, then the default of ``'utf-8'`` will be returned. + If no encoding is specified, then the default of ``'utf-8'`` will be + returned. + + :func:`detect_encoding` is useful for robustly reading Python source files. + A common pattern for this follows:: + + def read_python_source(file_name): + with open(file_name, "rb") as fp: + encoding = tokenize.detect_encoding(fp.readline)[0] + with open(file_name, "r", encoding=encoding) as fp: + return fp.read() Example of a script re-writer that transforms float literals into Decimal Modified: python/branches/py3k-jit/Doc/library/weakref.rst ============================================================================== --- python/branches/py3k-jit/Doc/library/weakref.rst (original) +++ python/branches/py3k-jit/Doc/library/weakref.rst Fri Mar 19 00:32:03 2010 @@ -59,10 +59,10 @@ Not all objects can be weakly referenced; those objects which can include class instances, functions written in Python (but not in C), instance methods, sets, frozensets, file objects, :term:`generator`\s, type objects, sockets, arrays, -deques, and regular expression pattern objects. +deques, regular expression pattern objects, and code objects. .. versionchanged:: 3.2 - Added support for thread.lock and threading.Lock. + Added support for thread.lock, threading.Lock, and code objects. Several built-in types such as :class:`list` and :class:`dict` do not directly support weak references but can add support through subclassing:: Modified: python/branches/py3k-jit/Include/code.h ============================================================================== --- python/branches/py3k-jit/Include/code.h (original) +++ python/branches/py3k-jit/Include/code.h Fri Mar 19 00:32:03 2010 @@ -27,6 +27,7 @@ PyObject *co_lnotab; /* string (encoding addr<->lineno mapping) See Objects/lnotab_notes.txt for details. */ void *co_zombieframe; /* for optimization only (see frameobject.c) */ + PyObject *co_weakreflist; /* to support weakrefs to code objects */ } PyCodeObject; /* Masks for co_flags above */ Modified: python/branches/py3k-jit/Lib/py_compile.py ============================================================================== --- python/branches/py3k-jit/Lib/py_compile.py (original) +++ python/branches/py3k-jit/Lib/py_compile.py Fri Mar 19 00:32:03 2010 @@ -7,8 +7,8 @@ import imp import marshal import os -import re import sys +import tokenize import traceback MAGIC = imp.get_magic() @@ -62,15 +62,6 @@ return self.msg -# Define an internal helper according to the platform -if os.name == "mac": - import MacOS - def set_creator_type(file): - MacOS.SetCreatorAndType(file, 'Pyth', 'PYC ') -else: - def set_creator_type(file): - pass - def wr_long(f, x): """Internal; write a 32-bit int to a file in little-endian order.""" f.write(bytes([x & 0xff, @@ -78,21 +69,6 @@ (x >> 16) & 0xff, (x >> 24) & 0xff])) -def read_encoding(file, default): - """Read the first two lines of the file looking for coding: xyzzy.""" - f = open(file, "rb") - try: - for i in range(2): - line = f.readline() - if not line: - break - m = re.match(br".*\bcoding:\s*(\S+)\b", line) - if m: - return m.group(1).decode("ascii") - return default - finally: - f.close() - def compile(file, cfile=None, dfile=None, doraise=False): """Byte-compile one Python source file to Python bytecode. @@ -128,16 +104,14 @@ directories). """ - encoding = read_encoding(file, "utf-8") - f = open(file, 'U', encoding=encoding) - try: - timestamp = int(os.fstat(f.fileno()).st_mtime) - except AttributeError: - timestamp = int(os.stat(file).st_mtime) - codestring = f.read() - f.close() - if codestring and codestring[-1] != '\n': - codestring = codestring + '\n' + with open(file, "rb") as f: + encoding = tokenize.detect_encoding(f.readline)[0] + with open(file, encoding=encoding) as f: + try: + timestamp = int(os.fstat(f.fileno()).st_mtime) + except AttributeError: + timestamp = int(os.stat(file).st_mtime) + codestring = f.read() try: codeobject = builtins.compile(codestring, dfile or file,'exec') except Exception as err: @@ -149,15 +123,13 @@ return if cfile is None: cfile = file + (__debug__ and 'c' or 'o') - fc = open(cfile, 'wb') - fc.write(b'\0\0\0\0') - wr_long(fc, timestamp) - marshal.dump(codeobject, fc) - fc.flush() - fc.seek(0, 0) - fc.write(MAGIC) - fc.close() - set_creator_type(cfile) + with open(cfile, 'wb') as fc: + fc.write(b'\0\0\0\0') + wr_long(fc, timestamp) + marshal.dump(codeobject, fc) + fc.flush() + fc.seek(0, 0) + fc.write(MAGIC) def main(args=None): """Compile several source files. Modified: python/branches/py3k-jit/Lib/test/support.py ============================================================================== --- python/branches/py3k-jit/Lib/test/support.py (original) +++ python/branches/py3k-jit/Lib/test/support.py Fri Mar 19 00:32:03 2010 @@ -534,14 +534,19 @@ Optional argument: - if 'quiet' is True, it does not fail if a filter catches nothing - (default False) + (default True without argument, + default False if some filters are defined) Without argument, it defaults to: - check_warnings(("", Warning), quiet=False) + check_warnings(("", Warning), quiet=True) """ + quiet = kwargs.get('quiet') if not filters: filters = (("", Warning),) - return _filterwarnings(filters, kwargs.get('quiet')) + # Preserve backward compatibility + if quiet is None: + quiet = True + return _filterwarnings(filters, quiet) class CleanImport(object): Modified: python/branches/py3k-jit/Lib/test/test_asynchat.py ============================================================================== --- python/branches/py3k-jit/Lib/test/test_asynchat.py (original) +++ python/branches/py3k-jit/Lib/test/test_asynchat.py Fri Mar 19 00:32:03 2010 @@ -22,6 +22,9 @@ self.event = event self.sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) self.port = support.bind_port(self.sock) + # This will be set if the client wants us to wait before echoing data + # back. + self.start_resend_event = None def run(self): self.sock.listen(1) @@ -38,6 +41,9 @@ # remove the SERVER_QUIT message self.buffer = self.buffer.replace(SERVER_QUIT, b'') + if self.start_resend_event: + self.start_resend_event.wait() + # re-send entire set of collected data try: # this may fail on some tests, such as test_close_when_done, since @@ -203,11 +209,18 @@ def test_close_when_done(self): s, event = start_echo_server() + s.start_resend_event = threading.Event() c = echo_client(b'\n', s.port) c.push(b"hello world\nI'm not dead yet!\n") c.push(SERVER_QUIT) c.close_when_done() asyncore.loop(use_poll=self.usepoll, count=300, timeout=.01) + + # Only allow the server to start echoing data back to the client after + # the client has closed its connection. This prevents a race condition + # where the server echoes all of its data before we can check that it + # got any down below. + s.start_resend_event.set() s.join() self.assertEqual(c.contents, []) Modified: python/branches/py3k-jit/Lib/test/test_cgi.py ============================================================================== --- python/branches/py3k-jit/Lib/test/test_cgi.py (original) +++ python/branches/py3k-jit/Lib/test/test_cgi.py Fri Mar 19 00:32:03 2010 @@ -1,11 +1,10 @@ -from test.support import run_unittest +from test.support import run_unittest, check_warnings import cgi import os import sys import tempfile import unittest from io import StringIO -from warnings import catch_warnings, filterwarnings class HackedSysModule: # The regression test will have real values in sys.argv, which @@ -15,10 +14,6 @@ cgi.sys = HackedSysModule() -try: - from io import StringIO -except ImportError: - from io import StringIO class ComparableException: def __init__(self, err): @@ -117,7 +112,7 @@ result = {} for k, v in dict(form).items(): - result[k] = type(v) is list and form.getlist(k) or v.value + result[k] = isinstance(v, list) and form.getlist(k) or v.value return result @@ -133,7 +128,7 @@ env = {'QUERY_STRING': orig} fs = cgi.FieldStorage(environ=env) - if type(expect) == type({}): + if isinstance(expect, dict): # test dict interface self.assertEqual(len(expect), len(fs)) self.assertEqual(norm(expect.keys()), norm(fs.keys())) @@ -308,20 +303,16 @@ self.assertEqual(result, v) def test_deprecated_parse_qs(self): - # this func is moved to urlparse, this is just a sanity check - with catch_warnings(): - filterwarnings('ignore', - 'cgi.parse_qs is deprecated, use urllib.parse.parse_qs instead', - DeprecationWarning) + # this func is moved to urllib.parse, this is just a sanity check + with check_warnings(('cgi.parse_qs is deprecated, use urllib.parse.' + 'parse_qs instead', DeprecationWarning)): self.assertEqual({'a': ['A1'], 'B': ['B3'], 'b': ['B2']}, cgi.parse_qs('a=A1&b=B2&B=B3')) def test_deprecated_parse_qsl(self): - # this func is moved to urlparse, this is just a sanity check - with catch_warnings(): - filterwarnings('ignore', - 'cgi.parse_qsl is deprecated, use urllib.parse.parse_qsl instead', - DeprecationWarning) + # this func is moved to urllib.parse, this is just a sanity check + with check_warnings(('cgi.parse_qsl is deprecated, use urllib.parse.' + 'parse_qsl instead', DeprecationWarning)): self.assertEqual([('a', 'A1'), ('b', 'B2'), ('B', 'B3')], cgi.parse_qsl('a=A1&b=B2&B=B3')) Modified: python/branches/py3k-jit/Lib/test/test_code.py ============================================================================== --- python/branches/py3k-jit/Lib/test/test_code.py (original) +++ python/branches/py3k-jit/Lib/test/test_code.py Fri Mar 19 00:32:03 2010 @@ -103,8 +103,10 @@ """ import unittest +import weakref import _testcapi + def consts(t): """Yield a doctest-safe sequence of object reprs.""" for elt in t: @@ -131,12 +133,37 @@ self.assertEquals(co.co_firstlineno, 15) +class CodeWeakRefTest(unittest.TestCase): + + def test_basic(self): + # Create a code object in a clean environment so that we know we have + # the only reference to it left. + namespace = {} + exec("def f(): pass", globals(), namespace) + f = namespace["f"] + del namespace + + self.called = False + def callback(code): + self.called = True + + # f is now the last reference to the function, and through it, the code + # object. While we hold it, check that we can create a weakref and + # deref it. Then delete it, and check that the callback gets called and + # the reference dies. + coderef = weakref.ref(f.__code__, callback) + self.assertTrue(bool(coderef())) + del f + self.assertFalse(bool(coderef())) + self.assertTrue(self.called) + + def test_main(verbose=None): from test.support import run_doctest, run_unittest from test import test_code run_doctest(test_code, verbose) - run_unittest(CodeTest) + run_unittest(CodeTest, CodeWeakRefTest) -if __name__ == '__main__': +if __name__ == "__main__": test_main() Modified: python/branches/py3k-jit/Lib/test/test_coding.py ============================================================================== --- python/branches/py3k-jit/Lib/test/test_coding.py (original) +++ python/branches/py3k-jit/Lib/test/test_coding.py Fri Mar 19 00:32:03 2010 @@ -1,6 +1,6 @@ import test.support, unittest -from test.support import TESTFN, unlink +from test.support import TESTFN, unlink, unload import os, sys class CodingTest(unittest.TestCase): @@ -17,9 +17,8 @@ path = os.path.dirname(__file__) filename = os.path.join(path, module_name + '.py') - fp = open(filename, "rb") - bytes = fp.read() - fp.close() + with open(filename, "rb") as fp: + bytes = fp.read() self.assertRaises(SyntaxError, compile, bytes, filename, 'exec') def test_exec_valid_coding(self): @@ -30,9 +29,8 @@ def test_file_parse(self): # issue1134: all encodings outside latin-1 and utf-8 fail on # multiline strings and long lines (>512 columns) - if TESTFN in sys.modules: - del sys.modules[TESTFN] - sys.path.insert(0, ".") + unload(TESTFN) + sys.path.insert(0, os.curdir) filename = TESTFN + ".py" f = open(filename, "w") try: @@ -45,21 +43,20 @@ __import__(TESTFN) finally: f.close() - unlink(TESTFN+".py") - unlink(TESTFN+".pyc") - sys.path.pop(0) + unlink(filename) + unlink(filename + "c") + unload(TESTFN) + del sys.path[0] def test_error_from_string(self): # See http://bugs.python.org/issue6289 input = "# coding: ascii\n\N{SNOWMAN}".encode('utf-8') - try: + with self.assertRaises(SyntaxError) as c: compile(input, "", "exec") - except SyntaxError as e: - expected = "'ascii' codec can't decode byte 0xe2 in position 16: " \ - "ordinal not in range(128)" - self.assertTrue(str(e).startswith(expected)) - else: - self.fail("didn't raise") + expected = "'ascii' codec can't decode byte 0xe2 in position 16: " \ + "ordinal not in range(128)" + self.assertTrue(c.exception.args[0].startswith(expected)) + def test_main(): test.support.run_unittest(CodingTest) Modified: python/branches/py3k-jit/Lib/test/test_compile.py ============================================================================== --- python/branches/py3k-jit/Lib/test/test_compile.py (original) +++ python/branches/py3k-jit/Lib/test/test_compile.py Fri Mar 19 00:32:03 2010 @@ -292,6 +292,10 @@ f1, f2 = f() self.assertNotEqual(id(f1.__code__), id(f2.__code__)) + def test_lambda_doc(self): + l = lambda: "foo" + self.assertIsNone(l.__doc__) + ## def test_unicode_encoding(self): ## code = "# -*- coding: utf-8 -*-\npass\n" ## self.assertRaises(SyntaxError, compile, code, "tmp", "exec") Modified: python/branches/py3k-jit/Lib/test/test_file.py ============================================================================== --- python/branches/py3k-jit/Lib/test/test_file.py (original) +++ python/branches/py3k-jit/Lib/test/test_file.py Fri Mar 19 00:32:03 2010 @@ -166,7 +166,7 @@ except ValueError as msg: if msg.args[0] != 0: s = str(msg) - if s.find(TESTFN) != -1 or s.find(bad_mode) == -1: + if TESTFN in s or bad_mode not in s: self.fail("bad error message for invalid mode: %s" % s) # if msg.args[0] == 0, we're probably on Windows where there may be # no obvious way to discover why open() failed. Modified: python/branches/py3k-jit/Lib/test/test_fileio.py ============================================================================== --- python/branches/py3k-jit/Lib/test/test_fileio.py (original) +++ python/branches/py3k-jit/Lib/test/test_fileio.py Fri Mar 19 00:32:03 2010 @@ -318,7 +318,7 @@ except ValueError as msg: if msg.args[0] != 0: s = str(msg) - if s.find(TESTFN) != -1 or s.find(bad_mode) == -1: + if TESTFN in s or bad_mode not in s: self.fail("bad error message for invalid mode: %s" % s) # if msg.args[0] == 0, we're probably on Windows where there may be # no obvious way to discover why open() failed. Modified: python/branches/py3k-jit/Lib/test/test_import.py ============================================================================== --- python/branches/py3k-jit/Lib/test/test_import.py (original) +++ python/branches/py3k-jit/Lib/test/test_import.py Fri Mar 19 00:32:03 2010 @@ -8,9 +8,8 @@ import stat import sys import unittest -import warnings -from test.support import (unlink, TESTFN, unload, run_unittest, - TestFailed, EnvironmentVarGuard, swap_attr, swap_item) +from test.support import (unlink, TESTFN, unload, run_unittest, is_jython, + check_warnings, EnvironmentVarGuard, swap_attr, swap_item) def remove_files(name): @@ -19,12 +18,15 @@ name + ".pyo", name + ".pyw", name + "$py.class"): - if os.path.exists(f): - os.remove(f) + unlink(f) class ImportTests(unittest.TestCase): + def tearDown(self): + unload(TESTFN) + setUp = tearDown + def test_case_sensitivity(self): # Brief digression to test that import is case-sensitive: if we got # this far, we know for sure that "random" exists. @@ -45,7 +47,7 @@ # The extension is normally ".py", perhaps ".pyw". source = TESTFN + ext pyo = TESTFN + ".pyo" - if sys.platform.startswith('java'): + if is_jython: pyc = TESTFN + "$py.class" else: pyc = TESTFN + ".pyc" @@ -66,15 +68,15 @@ except ImportError as err: self.fail("import from %s failed: %s" % (ext, err)) - self.assertEquals(mod.a, a, + self.assertEqual(mod.a, a, "module loaded (%s) but contents invalid" % mod) - self.assertEquals(mod.b, b, + self.assertEqual(mod.b, b, "module loaded (%s) but contents invalid" % mod) finally: unlink(source) unlink(pyc) unlink(pyo) - del sys.modules[TESTFN] + unload(TESTFN) sys.path.insert(0, os.curdir) try: @@ -100,21 +102,22 @@ fn = fname + 'c' if not os.path.exists(fn): fn = fname + 'o' - if not os.path.exists(fn): raise TestFailed("__import__ did " - "not result in creation of either a .pyc or .pyo file") + if not os.path.exists(fn): + self.fail("__import__ did not result in creation of " + "either a .pyc or .pyo file") s = os.stat(fn) - self.assertEquals(stat.S_IMODE(s.st_mode), - stat.S_IRUSR | stat.S_IRGRP | stat.S_IROTH) + self.assertEqual(stat.S_IMODE(s.st_mode), + stat.S_IRUSR | stat.S_IRGRP | stat.S_IROTH) finally: os.umask(oldmask) remove_files(TESTFN) - if TESTFN in sys.modules: del sys.modules[TESTFN] + unload(TESTFN) del sys.path[0] def test_imp_module(self): # Verify that the imp module can correctly load and find .py files import imp, os - # XXX (ncoghlan): It would be nice to use test_support.CleanImport + # XXX (ncoghlan): It would be nice to use support.CleanImport # here, but that breaks because the os module registers some # handlers in copy_reg on import. Since CleanImport doesn't # revert that registration, the module is left in a broken @@ -144,7 +147,7 @@ # Compile & remove .py file, we only need .pyc (or .pyo). with open(filename, 'r') as f: py_compile.compile(filename) - os.unlink(filename) + unlink(filename) # Need to be able to load from current dir. sys.path.append('') @@ -154,10 +157,8 @@ # Cleanup. del sys.path[-1] - for ext in '.pyc', '.pyo': - fname = module + ext - if os.path.exists(fname): - os.unlink(fname) + unlink(filename + 'c') + unlink(filename + 'o') def test_failing_import_sticks(self): source = TESTFN + ".py" @@ -171,15 +172,11 @@ del sys.modules[TESTFN] try: for i in [1, 2, 3]: - try: - mod = __import__(TESTFN) - except ZeroDivisionError: - if TESTFN in sys.modules: - self.fail("damaged module in sys.modules on %i. try" % i) - else: - self.fail("was able to import a damaged module on %i. try" % i) + self.assertRaises(ZeroDivisionError, __import__, TESTFN) + self.assertNotIn(TESTFN, sys.modules, + "damaged module in sys.modules on %i try" % i) finally: - sys.path.pop(0) + del sys.path[0] remove_files(TESTFN) def test_import_name_binding(self): @@ -210,8 +207,8 @@ try: mod = __import__(TESTFN) self.assertIn(TESTFN, sys.modules) - self.assertEquals(mod.a, 1, "module has wrong attribute values") - self.assertEquals(mod.b, 2, "module has wrong attribute values") + self.assertEqual(mod.a, 1, "module has wrong attribute values") + self.assertEqual(mod.b, 2, "module has wrong attribute values") # On WinXP, just replacing the .py file wasn't enough to # convince reload() to reparse it. Maybe the timestamp didn't @@ -226,18 +223,17 @@ self.assertRaises(ZeroDivisionError, imp.reload, mod) # But we still expect the module to be in sys.modules. mod = sys.modules.get(TESTFN) - self.assertFalse(mod is None, "expected module to be in sys.modules") + self.assertIsNot(mod, None, "expected module to be in sys.modules") # We should have replaced a w/ 10, but the old b value should # stick. - self.assertEquals(mod.a, 10, "module has wrong attribute values") - self.assertEquals(mod.b, 2, "module has wrong attribute values") + self.assertEqual(mod.a, 10, "module has wrong attribute values") + self.assertEqual(mod.b, 2, "module has wrong attribute values") finally: - sys.path.pop(0) + del sys.path[0] remove_files(TESTFN) - if TESTFN in sys.modules: - del sys.modules[TESTFN] + unload(TESTFN) def test_file_to_source(self): # check if __file__ points to the source file where available @@ -255,19 +251,34 @@ ext = mod.__file__[-4:] self.assertIn(ext, ('.pyc', '.pyo')) finally: - sys.path.pop(0) + del sys.path[0] remove_files(TESTFN) if TESTFN in sys.modules: del sys.modules[TESTFN] + def test_import_name_binding(self): + # import x.y.z binds x in the current namespace. + import test as x + import test.support + self.assertIs(x, test, x.__name__) + self.assertTrue(hasattr(test.support, "__file__")) + + # import x.y.z as w binds z as w. + import test.support as y + self.assertIs(y, test.support, y.__name__) + + def test_import_initless_directory_warning(self): + with check_warnings(('', ImportWarning)): + # Just a random non-package directory we always expect to be + # somewhere in sys.path... + self.assertRaises(ImportError, __import__, "site-packages") + def test_import_by_filename(self): path = os.path.abspath(TESTFN) - try: + with self.assertRaises(ImportError) as c: __import__(path) - except ImportError as err: - pass - else: - self.fail("import by path didn't raise an exception") + self.assertEqual("Import by filename is not supported.", + c.exception.args[0]) class PycRewritingTests(unittest.TestCase): @@ -302,10 +313,9 @@ if self.orig_module is not None: sys.modules[self.module_name] = self.orig_module else: - del sys.modules[self.module_name] - for file_name in self.file_name, self.compiled_name: - if os.path.exists(file_name): - os.remove(file_name) + unload(self.module_name) + unlink(self.file_name) + unlink(self.compiled_name) if os.path.exists(self.dir_name): shutil.rmtree(self.dir_name) @@ -406,11 +416,10 @@ class RelativeImportTests(unittest.TestCase): + def tearDown(self): - try: - del sys.modules["test.relimport"] - except: - pass + unload("test.relimport") + setUp = tearDown def test_relimport_star(self): # This will import * from .test_import. Modified: python/branches/py3k-jit/Lib/test/test_io.py ============================================================================== --- python/branches/py3k-jit/Lib/test/test_io.py (original) +++ python/branches/py3k-jit/Lib/test/test_io.py Fri Mar 19 00:32:03 2010 @@ -1046,14 +1046,9 @@ self.assertRaises(IOError, bufio.write, b"abcdef") def test_max_buffer_size_deprecation(self): - with support.check_warnings() as w: - warnings.simplefilter("always", DeprecationWarning) + with support.check_warnings(("max_buffer_size is deprecated", + DeprecationWarning)): self.tp(self.MockRawIO(), 8, 12) - self.assertEqual(len(w.warnings), 1) - warning = w.warnings[0] - self.assertTrue(warning.category is DeprecationWarning) - self.assertEqual(str(warning.message), - "max_buffer_size is deprecated") class CBufferedWriterTest(BufferedWriterTest): @@ -1109,14 +1104,9 @@ self.assertRaises(self.UnsupportedOperation, pair.detach) def test_constructor_max_buffer_size_deprecation(self): - with support.check_warnings() as w: - warnings.simplefilter("always", DeprecationWarning) + with support.check_warnings(("max_buffer_size is deprecated", + DeprecationWarning)): self.tp(self.MockRawIO(), self.MockRawIO(), 8, 12) - self.assertEqual(len(w.warnings), 1) - warning = w.warnings[0] - self.assertTrue(warning.category is DeprecationWarning) - self.assertEqual(str(warning.message), - "max_buffer_size is deprecated") def test_constructor_with_not_readable(self): class NotReadable(MockRawIO): Modified: python/branches/py3k-jit/Lib/test/test_minidom.py ============================================================================== --- python/branches/py3k-jit/Lib/test/test_minidom.py (original) +++ python/branches/py3k-jit/Lib/test/test_minidom.py Fri Mar 19 00:32:03 2010 @@ -432,7 +432,7 @@ string1 = repr(el) string2 = str(el) self.confirm(string1 == string2) - self.confirm(string1.find("slash:abc") != -1) + self.confirm("slash:abc" in string1) dom.unlink() def testAttributeRepr(self): Modified: python/branches/py3k-jit/Lib/test/test_pwd.py ============================================================================== --- python/branches/py3k-jit/Lib/test/test_pwd.py (original) +++ python/branches/py3k-jit/Lib/test/test_pwd.py Fri Mar 19 00:32:03 2010 @@ -1,3 +1,4 @@ +import sys import unittest from test import support @@ -83,11 +84,13 @@ self.assertRaises(KeyError, pwd.getpwnam, fakename) - # Choose a non-existent uid. - fakeuid = 4127 - while fakeuid in byuids: - fakeuid = (fakeuid * 3) % 0x10000 - + # In some cases, byuids isn't a complete list of all users in the + # system, so if we try to pick a value not in byuids (via a perturbing + # loop, say), pwd.getpwuid() might still be able to find data for that + # uid. Using sys.maxint may provoke the same problems, but hopefully + # it will be a more repeatable failure. + fakeuid = sys.maxsize + self.assertNotIn(fakeuid, byuids) self.assertRaises(KeyError, pwd.getpwuid, fakeuid) def test_main(): Modified: python/branches/py3k-jit/Lib/test/test_shutil.py ============================================================================== --- python/branches/py3k-jit/Lib/test/test_shutil.py (original) +++ python/branches/py3k-jit/Lib/test/test_shutil.py Fri Mar 19 00:32:03 2010 @@ -464,30 +464,26 @@ old_dir = os.getcwd() os.chdir(tmpdir) try: - with captured_stdout() as s: - with check_warnings() as w: - warnings.simplefilter("always") - _make_tarball(base_name, 'dist', compress='compress') + with captured_stdout() as s, check_warnings(quiet=False) as w: + _make_tarball(base_name, 'dist', compress='compress') finally: os.chdir(old_dir) tarball = base_name + '.tar.Z' self.assertTrue(os.path.exists(tarball)) - self.assertEquals(len(w.warnings), 1) + self.assertEqual(len(w.warnings), 1) # same test with dry_run os.remove(tarball) old_dir = os.getcwd() os.chdir(tmpdir) try: - with captured_stdout() as s: - with check_warnings() as w: - warnings.simplefilter("always") - _make_tarball(base_name, 'dist', compress='compress', - dry_run=True) + with captured_stdout() as s, check_warnings(quiet=False) as w: + _make_tarball(base_name, 'dist', compress='compress', + dry_run=True) finally: os.chdir(old_dir) - self.assertTrue(not os.path.exists(tarball)) - self.assertEquals(len(w.warnings), 1) + self.assertFalse(os.path.exists(tarball)) + self.assertEqual(len(w.warnings), 1) @unittest.skipUnless(zlib, "Requires zlib") @unittest.skipUnless(ZIP_SUPPORT, 'Need zip support to run') Modified: python/branches/py3k-jit/Lib/test/test_socket.py ============================================================================== --- python/branches/py3k-jit/Lib/test/test_socket.py (original) +++ python/branches/py3k-jit/Lib/test/test_socket.py Fri Mar 19 00:32:03 2010 @@ -1312,28 +1312,64 @@ def __init__(self, methodName='runTest'): SocketConnectedTest.__init__(self, methodName=methodName) - def testRecvInto(self): + def testRecvIntoArray(self): buf = bytearray(1024) nbytes = self.cli_conn.recv_into(buf) self.assertEqual(nbytes, len(MSG)) msg = buf[:len(MSG)] self.assertEqual(msg, MSG) - def _testRecvInto(self): + def _testRecvIntoArray(self): buf = bytes(MSG) self.serv_conn.send(buf) - def testRecvFromInto(self): + def testRecvIntoBytearray(self): + buf = bytearray(1024) + nbytes = self.cli_conn.recv_into(buf) + self.assertEqual(nbytes, len(MSG)) + msg = buf[:len(MSG)] + self.assertEqual(msg, MSG) + + _testRecvIntoBytearray = _testRecvIntoArray + + def testRecvIntoMemoryview(self): + buf = bytearray(1024) + nbytes = self.cli_conn.recv_into(memoryview(buf)) + self.assertEqual(nbytes, len(MSG)) + msg = buf[:len(MSG)] + self.assertEqual(msg, MSG) + + _testRecvIntoMemoryview = _testRecvIntoArray + + def testRecvFromIntoArray(self): buf = bytearray(1024) nbytes, addr = self.cli_conn.recvfrom_into(buf) self.assertEqual(nbytes, len(MSG)) msg = buf[:len(MSG)] self.assertEqual(msg, MSG) - def _testRecvFromInto(self): + def _testRecvFromIntoArray(self): buf = bytes(MSG) self.serv_conn.send(buf) + def testRecvFromIntoBytearray(self): + buf = bytearray(1024) + nbytes, addr = self.cli_conn.recvfrom_into(buf) + self.assertEqual(nbytes, len(MSG)) + msg = buf[:len(MSG)] + self.assertEqual(msg, MSG) + + _testRecvFromIntoBytearray = _testRecvFromIntoArray + + def testRecvFromIntoMemoryview(self): + buf = bytearray(1024) + nbytes, addr = self.cli_conn.recvfrom_into(memoryview(buf)) + self.assertEqual(nbytes, len(MSG)) + msg = buf[:len(MSG)] + self.assertEqual(msg, MSG) + + _testRecvFromIntoMemoryview = _testRecvFromIntoArray + TIPC_STYPE = 2000 TIPC_LOWER = 200 Modified: python/branches/py3k-jit/Lib/test/test_structmembers.py ============================================================================== --- python/branches/py3k-jit/Lib/test/test_structmembers.py (original) +++ python/branches/py3k-jit/Lib/test/test_structmembers.py Fri Mar 19 00:32:03 2010 @@ -103,39 +103,30 @@ class TestWarnings(unittest.TestCase): - def has_warned(self, w): - self.assertEqual(w.category, RuntimeWarning) def test_byte_max(self): - with support.check_warnings() as w: + with support.check_warnings(('', RuntimeWarning)): ts.T_BYTE = CHAR_MAX+1 - self.has_warned(w) def test_byte_min(self): - with support.check_warnings() as w: + with support.check_warnings(('', RuntimeWarning)): ts.T_BYTE = CHAR_MIN-1 - self.has_warned(w) def test_ubyte_max(self): - with support.check_warnings() as w: + with support.check_warnings(('', RuntimeWarning)): ts.T_UBYTE = UCHAR_MAX+1 - self.has_warned(w) def test_short_max(self): - with support.check_warnings() as w: + with support.check_warnings(('', RuntimeWarning)): ts.T_SHORT = SHRT_MAX+1 - self.has_warned(w) def test_short_min(self): - with support.check_warnings() as w: + with support.check_warnings(('', RuntimeWarning)): ts.T_SHORT = SHRT_MIN-1 - self.has_warned(w) def test_ushort_max(self): - with support.check_warnings() as w: + with support.check_warnings(('', RuntimeWarning)): ts.T_USHORT = USHRT_MAX+1 - self.has_warned(w) - def test_main(verbose=None): Modified: python/branches/py3k-jit/Lib/test/test_sys.py ============================================================================== --- python/branches/py3k-jit/Lib/test/test_sys.py (original) +++ python/branches/py3k-jit/Lib/test/test_sys.py Fri Mar 19 00:32:03 2010 @@ -588,7 +588,7 @@ return inner check(get_cell().__closure__[0], size(h + 'P')) # code - check(get_cell().__code__, size(h + '5i8Pi2P')) + check(get_cell().__code__, size(h + '5i8Pi3P')) # complex check(complex(0,1), size(h + '2d')) # method_descriptor (descriptor object) Modified: python/branches/py3k-jit/Lib/test/test_tokenize.py ============================================================================== --- python/branches/py3k-jit/Lib/test/test_tokenize.py (original) +++ python/branches/py3k-jit/Lib/test/test_tokenize.py Fri Mar 19 00:32:03 2010 @@ -726,7 +726,7 @@ b'do_something(else)\n' ) encoding, consumed_lines = detect_encoding(self.get_readline(lines)) - self.assertEquals(encoding, 'utf-8') + self.assertEquals(encoding, 'utf-8-sig') self.assertEquals(consumed_lines, [b'# something\n', b'print(something)\n']) @@ -747,7 +747,7 @@ b'do_something(else)\n' ) encoding, consumed_lines = detect_encoding(self.get_readline(lines)) - self.assertEquals(encoding, 'utf-8') + self.assertEquals(encoding, 'utf-8-sig') self.assertEquals(consumed_lines, [b'# coding=utf-8\n']) def test_mismatched_bom_and_cookie_first_line_raises_syntaxerror(self): @@ -779,7 +779,7 @@ b'do_something(else)\n' ) encoding, consumed_lines = detect_encoding(self.get_readline(lines)) - self.assertEquals(encoding, 'utf-8') + self.assertEquals(encoding, 'utf-8-sig') self.assertEquals(consumed_lines, [b'#! something\n', b'f# coding=utf-8\n']) @@ -833,12 +833,12 @@ readline = self.get_readline((b'\xef\xbb\xbfprint(something)\n',)) encoding, consumed_lines = detect_encoding(readline) - self.assertEquals(encoding, 'utf-8') + self.assertEquals(encoding, 'utf-8-sig') self.assertEquals(consumed_lines, [b'print(something)\n']) readline = self.get_readline((b'\xef\xbb\xbf',)) encoding, consumed_lines = detect_encoding(readline) - self.assertEquals(encoding, 'utf-8') + self.assertEquals(encoding, 'utf-8-sig') self.assertEquals(consumed_lines, []) readline = self.get_readline((b'# coding: bad\n',)) Modified: python/branches/py3k-jit/Lib/test/test_unicodedata.py ============================================================================== --- python/branches/py3k-jit/Lib/test/test_unicodedata.py (original) +++ python/branches/py3k-jit/Lib/test/test_unicodedata.py Fri Mar 19 00:32:03 2010 @@ -21,7 +21,7 @@ class UnicodeMethodsTest(unittest.TestCase): # update this, if the database changes - expectedchecksum = '0b915116051f3ed029a98542c2b7df63c9646272' + expectedchecksum = '4504dffd035baea02c5b9de82bebc3d65e0e0baf' def test_method_checksum(self): h = hashlib.sha1() @@ -80,7 +80,7 @@ class UnicodeFunctionsTest(UnicodeDatabaseTest): # update this, if the database changes - expectedchecksum = 'd4169ccff998ebbd1ec007a0b3fbd66e5ccf0229' + expectedchecksum = 'dd36312c31318f938b9d9ecff757393508c5bd48' def test_function_checksum(self): data = [] Modified: python/branches/py3k-jit/Lib/test/test_warnings.py ============================================================================== --- python/branches/py3k-jit/Lib/test/test_warnings.py (original) +++ python/branches/py3k-jit/Lib/test/test_warnings.py Fri Mar 19 00:32:03 2010 @@ -644,18 +644,33 @@ def test_check_warnings(self): # Explicit tests for the test.support convenience wrapper wmod = self.module - if wmod is sys.modules['warnings']: - with support.check_warnings() as w: - self.assertEqual(w.warnings, []) - wmod.simplefilter("always") + if wmod is not sys.modules['warnings']: + return + with support.check_warnings(quiet=False) as w: + self.assertEqual(w.warnings, []) + wmod.simplefilter("always") + wmod.warn("foo") + self.assertEqual(str(w.message), "foo") + wmod.warn("bar") + self.assertEqual(str(w.message), "bar") + self.assertEqual(str(w.warnings[0].message), "foo") + self.assertEqual(str(w.warnings[1].message), "bar") + w.reset() + self.assertEqual(w.warnings, []) + + with support.check_warnings(): + # defaults to quiet=True without argument + pass + with support.check_warnings(('foo', UserWarning)): + wmod.warn("foo") + + with self.assertRaises(AssertionError): + with support.check_warnings(('', RuntimeWarning)): + # defaults to quiet=False with argument + pass + with self.assertRaises(AssertionError): + with support.check_warnings(('foo', RuntimeWarning)): wmod.warn("foo") - self.assertEqual(str(w.message), "foo") - wmod.warn("bar") - self.assertEqual(str(w.message), "bar") - self.assertEqual(str(w.warnings[0].message), "foo") - self.assertEqual(str(w.warnings[1].message), "bar") - w.reset() - self.assertEqual(w.warnings, []) class CCatchWarningTests(CatchWarningTests): module = c_warnings Modified: python/branches/py3k-jit/Lib/tokenize.py ============================================================================== --- python/branches/py3k-jit/Lib/tokenize.py (original) +++ python/branches/py3k-jit/Lib/tokenize.py Fri Mar 19 00:32:03 2010 @@ -301,14 +301,16 @@ in. It detects the encoding from the presence of a utf-8 bom or an encoding - cookie as specified in pep-0263. If both a bom and a cookie are present, - but disagree, a SyntaxError will be raised. If the encoding cookie is an - invalid charset, raise a SyntaxError. + cookie as specified in pep-0263. If both a bom and a cookie are present, but + disagree, a SyntaxError will be raised. If the encoding cookie is an invalid + charset, raise a SyntaxError. Note that if a utf-8 bom is found, + 'utf-8-sig' is returned. If no encoding is specified, then the default of 'utf-8' will be returned. """ bom_found = False encoding = None + default = 'utf-8' def read_or_stop(): try: return readline() @@ -331,17 +333,20 @@ # This behaviour mimics the Python interpreter raise SyntaxError("unknown encoding: " + encoding) - if bom_found and codec.name != 'utf-8': - # This behaviour mimics the Python interpreter - raise SyntaxError('encoding problem: utf-8') + if bom_found: + if codec.name != 'utf-8': + # This behaviour mimics the Python interpreter + raise SyntaxError('encoding problem: utf-8') + encoding += '-sig' return encoding first = read_or_stop() if first.startswith(BOM_UTF8): bom_found = True first = first[3:] + default = 'utf-8-sig' if not first: - return 'utf-8', [] + return default, [] encoding = find_cookie(first) if encoding: @@ -349,13 +354,13 @@ second = read_or_stop() if not second: - return 'utf-8', [first] + return default, [first] encoding = find_cookie(second) if encoding: return encoding, [first, second] - return 'utf-8', [first, second] + return default, [first, second] def tokenize(readline): @@ -394,6 +399,9 @@ indents = [0] if encoding is not None: + if encoding == "utf-8-sig": + # BOM will already have been stripped. + encoding = "utf-8" yield TokenInfo(ENCODING, encoding, (0, 0), (0, 0), '') while True: # loop over lines in stream try: Modified: python/branches/py3k-jit/Makefile.pre.in ============================================================================== --- python/branches/py3k-jit/Makefile.pre.in (original) +++ python/branches/py3k-jit/Makefile.pre.in Fri Mar 19 00:32:03 2010 @@ -835,7 +835,8 @@ EXTRAPLATDIR= @EXTRAPLATDIR@ MACHDEPS= $(PLATDIR) $(EXTRAPLATDIR) XMLLIBSUBDIRS= xml xml/dom xml/etree xml/parsers xml/sax -LIBSUBDIRS= tkinter site-packages test test/output test/data \ +LIBSUBDIRS= tkinter tkinter/test tkinter/test/test_tkinter \ + tkinter/test/test_ttk site-packages test test/data \ test/decimaltestdata test/xmltestdata \ encodings \ email email/mime email/test email/test/data \ @@ -912,12 +913,12 @@ -PYTHONPATH=$(DESTDIR)$(LIBDEST) $(RUNSHARED) \ ./$(BUILDPYTHON) -Wi $(DESTDIR)$(LIBDEST)/compileall.py \ -d $(LIBDEST) -f \ - -x 'bad_coding|badsyntax|site-packages|py2_test_grammar|crlf|different_encoding' \ + -x 'bad_coding|badsyntax|site-packages|lib2to3/tests/data' \ $(DESTDIR)$(LIBDEST) -PYTHONPATH=$(DESTDIR)$(LIBDEST) $(RUNSHARED) \ ./$(BUILDPYTHON) -Wi -O $(DESTDIR)$(LIBDEST)/compileall.py \ -d $(LIBDEST) -f \ - -x 'bad_coding|badsyntax|site-packages|py2_test_grammar|crlf|different_encoding' \ + -x 'bad_coding|badsyntax|site-packages|lib2to3/tests/data' \ $(DESTDIR)$(LIBDEST) -PYTHONPATH=$(DESTDIR)$(LIBDEST) $(RUNSHARED) \ ./$(BUILDPYTHON) -Wi $(DESTDIR)$(LIBDEST)/compileall.py \ Modified: python/branches/py3k-jit/Misc/NEWS ============================================================================== --- python/branches/py3k-jit/Misc/NEWS (original) +++ python/branches/py3k-jit/Misc/NEWS Fri Mar 19 00:32:03 2010 @@ -233,6 +233,8 @@ instances from being copied with copy.copy(), and bytes subclasses from being pickled properly. +- Code objects now support weak references. + C-API ----- @@ -283,6 +285,13 @@ Library ------- +- Issue #8168: py_compile now handles files with utf-8 BOMS. + +- ``tokenize.detect_encoding`` now returns ``'utf-8-sig'`` when a UTF-8 BOM is + detected. + +- Issue #8024: Update the Unicode database to 5.2. + - Issue #6716/2: Backslash-replace error output in compilall. - Issue #4961: Inconsistent/wrong result of askyesno function in tkMessageBox Modified: python/branches/py3k-jit/Modules/unicodedata_db.h ============================================================================== --- python/branches/py3k-jit/Modules/unicodedata_db.h (original) +++ python/branches/py3k-jit/Modules/unicodedata_db.h Fri Mar 19 00:32:03 2010 @@ -1,6 +1,6 @@ /* this file was generated by Tools/unicode/makeunicodedata.py 2.6 */ -#define UNIDATA_VERSION "5.1.0" +#define UNIDATA_VERSION "5.2.0" /* a list of unique database records */ const _PyUnicode_DatabaseRecord _PyUnicode_Database_Records[] = { {0, 0, 0, 0, 0, 0}, @@ -178,6 +178,7 @@ {8, 0, 1, 0, 5, 0}, {14, 0, 1, 0, 5, 0}, {5, 9, 1, 0, 5, 0}, + {4, 1, 14, 0, 5, 0}, {4, 234, 14, 0, 5, 0}, {4, 214, 14, 0, 5, 0}, {4, 202, 14, 0, 5, 0}, @@ -214,9 +215,9 @@ {27, 0, 19, 0, 5, 136}, {22, 0, 19, 1, 5, 136}, {23, 0, 19, 1, 5, 136}, + {18, 0, 1, 0, 4, 136}, {28, 0, 11, 0, 5, 136}, {28, 0, 11, 0, 1, 0}, - {4, 1, 14, 0, 5, 0}, {30, 0, 19, 0, 5, 136}, {30, 0, 19, 0, 4, 136}, {1, 0, 1, 0, 4, 170}, @@ -264,6 +265,7 @@ {30, 0, 1, 0, 2, 0}, {9, 0, 1, 0, 2, 136}, {30, 0, 1, 0, 2, 136}, + {30, 0, 1, 0, 4, 0}, {9, 0, 19, 0, 2, 136}, {29, 0, 1, 0, 5, 0}, {15, 0, 1, 0, 5, 0}, @@ -314,17 +316,18 @@ {14, 0, 19, 0, 5, 0}, {8, 0, 19, 0, 5, 0}, {9, 0, 4, 0, 5, 0}, + {9, 0, 12, 0, 5, 0}, {30, 0, 1, 0, 5, 170}, {5, 216, 1, 0, 5, 0}, {5, 226, 1, 0, 5, 0}, {27, 0, 1, 0, 5, 136}, - {27, 0, 1, 1, 5, 136}, {7, 0, 9, 0, 5, 136}, + {30, 0, 1, 0, 5, 136}, }; /* Reindexing of NFC first characters. */ -#define TOTAL_FIRST 367 -#define TOTAL_LAST 54 +#define TOTAL_FIRST 370 +#define TOTAL_LAST 55 struct reindex{int start;short count,index;}; static struct reindex nfc_first[] = { { 60, 2, 0}, @@ -530,6 +533,9 @@ { 12507, 0, 361}, { 12527, 3, 362}, { 12541, 0, 366}, + { 69785, 0, 367}, + { 69787, 0, 368}, + { 69797, 0, 369}, {0,0,0} }; @@ -565,6 +571,7 @@ { 4142, 0, 50}, { 6965, 0, 51}, { 12441, 1, 52}, + { 69818, 0, 54}, {0,0,0} }; @@ -658,1229 +665,1262 @@ /* index tables for the database records */ #define SHIFT 7 static unsigned char index1[] = { - 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 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, 40, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 16, 50, 51, 52, - 16, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, - 70, 71, 72, 73, 74, 75, 75, 76, 77, 78, 79, 80, 16, 81, 82, 83, 84, 85, - 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 97, 97, 97, 97, 97, 97, - 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, - 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, - 97, 97, 97, 97, 97, 97, 97, 97, 98, 97, 97, 97, 97, 97, 97, 97, 97, 97, - 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, - 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, - 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, - 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, - 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, - 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, - 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, - 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, - 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 99, 100, 97, 97, 97, 97, 97, 97, - 97, 97, 101, 40, 40, 102, 103, 104, 105, 106, 107, 108, 16, 109, 16, 16, - 16, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, - 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, - 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, - 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, - 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, - 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, - 110, 110, 110, 111, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, - 112, 112, 112, 112, 112, 112, 113, 113, 113, 113, 113, 113, 113, 113, - 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, - 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, - 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, - 114, 114, 115, 116, 117, 118, 119, 119, 120, 121, 122, 123, 124, 125, - 126, 127, 128, 129, 16, 130, 131, 132, 133, 134, 16, 16, 16, 16, 16, 16, - 135, 16, 136, 16, 137, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 40, 40, 40, 40, 40, - 40, 138, 16, 139, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 75, 140, 141, 142, 143, 16, 144, 16, 145, 146, 147, - 148, 149, 150, 151, 152, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 153, 154, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 97, 97, 97, 97, - 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, - 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, - 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, - 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, - 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, - 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, - 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, - 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, - 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, - 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, - 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, - 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, - 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, - 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, - 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, - 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, - 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, - 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, - 97, 97, 97, 97, 97, 155, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 114, 114, 114, 114, 156, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 157, 16, 158, 159, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 113, 113, 113, 113, 113, - 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, - 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, - 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, - 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, - 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, - 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, - 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, - 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, - 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, - 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, - 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, - 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, - 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, - 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, - 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, - 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, - 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, - 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, - 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, - 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, - 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, - 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, - 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, - 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, - 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, - 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, - 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, - 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, - 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, - 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, - 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, - 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, - 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, - 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, - 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, - 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, - 113, 113, 160, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, - 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, - 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, - 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, - 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, - 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, - 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, - 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, - 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, - 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, - 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, - 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, - 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, - 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, - 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, - 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, - 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, - 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, - 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, - 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, - 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, - 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, - 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, - 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, - 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, - 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, - 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, - 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, - 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, - 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, - 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, - 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, - 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, - 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, - 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, - 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, - 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 160, -}; - -static unsigned short index2[] = { - 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 3, 2, 4, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 3, 3, 3, 2, 5, 6, 6, 7, 8, 7, 6, 6, 9, 10, 6, 11, 12, 13, 12, - 12, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 12, 6, 15, 16, 15, 6, 6, 17, + 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, 41, 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, 78, 79, 80, 81, 82, 83, 17, 84, 85, 86, 87, 88, + 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 100, 100, 100, 100, 100, + 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, + 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, + 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, + 100, 100, 100, 101, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, + 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, + 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, + 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, + 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, + 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, + 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, + 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, + 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, + 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, + 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, + 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 102, + 103, 100, 100, 100, 100, 100, 100, 100, 100, 104, 41, 41, 105, 106, 107, + 108, 109, 110, 111, 112, 113, 114, 17, 115, 116, 116, 116, 116, 116, 116, + 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, + 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, + 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, + 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, + 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, + 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 117, 118, 118, + 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, + 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, + 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, + 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, + 119, 119, 119, 119, 119, 119, 119, 119, 120, 120, 121, 122, 123, 124, + 125, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 17, 136, 137, + 138, 139, 140, 17, 17, 17, 17, 17, 17, 141, 17, 142, 17, 143, 17, 144, + 17, 145, 17, 17, 17, 146, 17, 17, 17, 17, 147, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 9, 6, 10, 18, 19, 18, 20, 20, 20, 20, 20, 20, - 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, - 20, 20, 9, 16, 10, 16, 1, 1, 1, 1, 1, 1, 3, 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, 21, 22, 8, 8, 23, 8, 24, - 25, 26, 27, 28, 29, 16, 30, 25, 31, 32, 33, 34, 34, 26, 35, 25, 22, 26, - 34, 28, 36, 37, 37, 37, 22, 38, 38, 38, 38, 38, 38, 39, 38, 38, 38, 38, - 38, 38, 38, 38, 38, 39, 38, 38, 38, 38, 38, 38, 40, 39, 38, 38, 38, 38, - 38, 39, 41, 42, 42, 43, 43, 43, 43, 41, 43, 42, 42, 42, 43, 42, 42, 43, - 43, 41, 43, 42, 42, 43, 43, 43, 40, 41, 42, 42, 43, 42, 43, 41, 43, 38, - 42, 38, 43, 38, 43, 38, 43, 38, 43, 38, 43, 38, 43, 38, 43, 44, 41, 38, - 42, 38, 43, 38, 43, 38, 43, 38, 42, 38, 43, 38, 43, 38, 43, 38, 43, 38, - 43, 39, 41, 38, 43, 38, 42, 38, 43, 38, 43, 38, 41, 45, 28, 38, 43, 38, - 43, 41, 38, 43, 38, 43, 38, 43, 45, 28, 39, 41, 38, 42, 38, 43, 38, 42, - 28, 39, 41, 38, 42, 38, 43, 38, 43, 39, 41, 38, 43, 38, 43, 38, 43, 38, - 43, 38, 43, 38, 43, 38, 43, 38, 43, 38, 43, 39, 41, 38, 43, 38, 42, 38, - 43, 38, 43, 38, 43, 38, 43, 38, 43, 38, 43, 38, 38, 43, 38, 43, 38, 43, - 35, 46, 44, 44, 46, 44, 46, 44, 44, 46, 44, 44, 44, 46, 46, 44, 44, 44, - 44, 46, 44, 44, 46, 44, 44, 44, 46, 46, 46, 44, 44, 46, 44, 38, 43, 44, - 46, 44, 46, 44, 44, 46, 44, 46, 46, 44, 46, 44, 38, 43, 44, 44, 44, 46, - 44, 46, 44, 44, 46, 46, 47, 44, 46, 46, 46, 47, 47, 47, 47, 48, 49, 35, - 48, 49, 35, 48, 49, 35, 38, 42, 38, 42, 38, 42, 38, 42, 38, 42, 38, 42, - 38, 42, 38, 42, 46, 38, 43, 38, 43, 38, 43, 44, 46, 38, 43, 38, 43, 38, - 43, 38, 43, 38, 43, 43, 48, 49, 35, 38, 43, 44, 44, 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, 46, 38, 43, 44, - 46, 44, 46, 44, 46, 38, 43, 38, 43, 38, 43, 38, 43, 38, 43, 38, 43, 38, - 43, 46, 46, 46, 46, 46, 46, 44, 44, 46, 44, 44, 46, 46, 44, 46, 44, 44, - 44, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 46, 41, 46, 46, 46, 46, 46, - 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 41, 46, 46, 46, 46, 46, 46, 46, - 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, - 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, - 46, 46, 46, 46, 46, 46, 46, 47, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, - 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 50, - 50, 50, 50, 50, 50, 50, 50, 50, 51, 51, 52, 52, 52, 52, 52, 52, 52, 53, - 53, 54, 53, 51, 55, 51, 55, 55, 55, 51, 55, 51, 51, 56, 52, 53, 53, 53, - 53, 53, 53, 26, 26, 26, 26, 57, 26, 53, 54, 50, 50, 50, 50, 50, 53, 53, - 53, 53, 53, 53, 53, 51, 53, 52, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, - 53, 53, 53, 53, 53, 53, 53, 58, 58, 58, 58, 58, 59, 58, 58, 58, 58, 58, - 58, 58, 59, 59, 58, 59, 58, 59, 58, 58, 60, 61, 61, 61, 61, 60, 62, 61, - 61, 61, 61, 61, 63, 63, 64, 64, 64, 64, 65, 65, 61, 61, 61, 61, 64, 64, - 61, 64, 64, 61, 61, 66, 66, 66, 66, 67, 61, 61, 61, 61, 59, 59, 59, 68, - 68, 58, 68, 68, 69, 59, 61, 61, 61, 59, 59, 59, 61, 61, 70, 59, 59, 59, - 61, 61, 61, 61, 59, 60, 61, 61, 59, 71, 72, 72, 71, 72, 72, 71, 59, 59, - 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 44, 46, 44, 46, 73, 53, 44, - 46, 0, 0, 50, 46, 46, 46, 74, 0, 0, 0, 0, 0, 57, 75, 38, 74, 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, - 46, 41, 41, 41, 41, 41, 41, 41, 43, 43, 43, 43, 43, 44, 35, 35, 48, 76, - 76, 35, 35, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, - 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 35, 35, 35, 46, 48, 35, 77, 44, - 46, 48, 44, 46, 46, 44, 44, 44, 38, 78, 44, 38, 44, 44, 44, 38, 44, 44, - 44, 44, 38, 38, 38, 44, 39, 39, 39, 39, 39, 39, 39, 39, 39, 78, 39, 39, - 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, - 39, 39, 41, 41, 41, 41, 41, 41, 41, 41, 41, 42, 41, 41, 41, 41, 41, 41, - 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 43, 42, - 46, 43, 46, 46, 46, 43, 46, 46, 46, 46, 43, 43, 43, 46, 44, 46, 44, 46, - 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, - 38, 43, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 79, 80, 80, 80, 80, 80, - 81, 81, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, - 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, - 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, - 44, 46, 44, 38, 43, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 46, - 38, 43, 38, 43, 44, 46, 38, 43, 44, 46, 38, 43, 38, 43, 38, 43, 44, 46, - 38, 43, 38, 43, 38, 43, 44, 46, 38, 43, 38, 43, 38, 43, 38, 43, 38, 43, - 38, 43, 44, 46, 38, 43, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, - 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, - 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 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, 0, 0, 52, 82, 82, 82, 82, 82, 82, 0, 46, 46, 46, - 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, - 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 35, - 0, 82, 83, 0, 0, 0, 0, 0, 0, 84, 80, 80, 80, 80, 84, 80, 80, 80, 85, 84, - 80, 80, 80, 80, 80, 80, 84, 84, 84, 84, 84, 84, 80, 80, 84, 80, 80, 85, - 86, 80, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 96, 97, 98, 99, 100, 101, - 102, 103, 104, 102, 80, 84, 102, 95, 0, 0, 0, 0, 0, 0, 0, 0, 105, 105, - 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, - 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 0, 0, 0, 0, 0, - 105, 105, 105, 102, 102, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 106, 106, 106, - 106, 0, 0, 77, 77, 107, 108, 108, 109, 110, 111, 27, 27, 80, 80, 80, 80, - 80, 80, 80, 80, 112, 113, 114, 111, 0, 0, 111, 111, 0, 115, 116, 116, - 116, 116, 116, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, - 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, - 117, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 118, 119, 120, - 112, 113, 114, 121, 122, 123, 123, 124, 84, 80, 80, 80, 80, 80, 84, 80, - 80, 0, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 108, 126, 126, - 111, 115, 115, 127, 115, 115, 115, 115, 128, 128, 128, 128, 115, 115, - 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, - 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, - 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, - 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, - 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 116, - 115, 116, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, - 115, 115, 115, 115, 116, 111, 115, 80, 80, 80, 80, 80, 80, 80, 106, 81, - 80, 80, 80, 80, 84, 80, 117, 117, 80, 80, 27, 84, 80, 80, 84, 115, 115, - 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 115, 115, 115, 130, - 130, 115, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, - 111, 111, 0, 131, 115, 132, 115, 115, 115, 115, 115, 115, 115, 115, 115, - 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, - 115, 115, 115, 115, 115, 115, 115, 80, 84, 80, 80, 84, 80, 80, 84, 84, - 84, 80, 84, 84, 80, 84, 80, 80, 80, 84, 80, 84, 80, 84, 80, 84, 80, 80, - 0, 0, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, - 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, - 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, - 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, - 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, - 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, - 115, 115, 115, 115, 115, 115, 133, 133, 133, 133, 133, 133, 133, 133, - 133, 133, 133, 115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 134, 134, - 134, 134, 134, 134, 134, 134, 134, 134, 105, 105, 105, 105, 105, 105, - 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, - 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 80, 80, - 80, 80, 80, 80, 80, 84, 80, 135, 135, 27, 136, 136, 136, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 133, 133, 137, 47, 47, 47, 47, 47, 47, 47, - 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, - 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 138, 47, 47, 47, 47, 47, - 47, 47, 138, 47, 47, 138, 47, 47, 47, 47, 47, 0, 0, 139, 47, 137, 137, - 137, 133, 133, 133, 133, 133, 133, 133, 133, 137, 137, 137, 137, 140, 0, - 0, 47, 80, 84, 80, 80, 0, 0, 0, 141, 141, 141, 141, 141, 141, 141, 141, - 47, 47, 133, 133, 82, 82, 142, 142, 142, 142, 142, 142, 142, 142, 142, - 142, 82, 52, 47, 0, 0, 0, 0, 0, 0, 0, 0, 47, 47, 47, 47, 47, 0, 133, 137, - 137, 0, 47, 47, 47, 47, 47, 47, 47, 47, 0, 0, 47, 47, 0, 0, 47, 47, 47, - 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, - 47, 0, 47, 47, 47, 47, 47, 47, 47, 0, 47, 0, 0, 0, 47, 47, 47, 47, 0, 0, - 143, 47, 144, 137, 137, 133, 133, 133, 133, 0, 0, 137, 137, 0, 0, 145, - 145, 140, 47, 0, 0, 0, 0, 0, 0, 0, 0, 144, 0, 0, 0, 0, 141, 141, 0, 141, - 47, 47, 133, 133, 0, 0, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, - 47, 47, 146, 146, 147, 147, 147, 147, 147, 147, 79, 0, 0, 0, 0, 0, 0, - 133, 133, 137, 0, 47, 47, 47, 47, 47, 47, 0, 0, 0, 0, 47, 47, 0, 0, 47, - 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, - 47, 47, 47, 0, 47, 47, 47, 47, 47, 47, 47, 0, 47, 141, 0, 47, 141, 0, 47, - 47, 0, 0, 143, 0, 137, 137, 137, 133, 133, 0, 0, 0, 0, 133, 133, 0, 0, - 133, 133, 140, 0, 0, 0, 133, 0, 0, 0, 0, 0, 0, 0, 141, 141, 141, 47, 0, - 141, 0, 0, 0, 0, 0, 0, 0, 142, 142, 142, 142, 142, 142, 142, 142, 142, - 142, 133, 133, 47, 47, 47, 133, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 133, - 133, 137, 0, 47, 47, 47, 47, 47, 47, 47, 47, 47, 0, 47, 47, 47, 0, 47, - 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, - 47, 47, 47, 0, 47, 47, 47, 47, 47, 47, 47, 0, 47, 47, 0, 47, 47, 47, 47, - 47, 0, 0, 143, 47, 137, 137, 137, 133, 133, 133, 133, 133, 0, 133, 133, - 137, 0, 137, 137, 140, 0, 0, 47, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 47, 47, 133, 133, 0, 0, 142, 142, 142, 142, 142, 142, 142, 142, - 142, 142, 0, 146, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 133, 137, - 137, 0, 47, 47, 47, 47, 47, 47, 47, 47, 0, 0, 47, 47, 0, 0, 47, 47, 47, - 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, - 47, 0, 47, 47, 47, 47, 47, 47, 47, 0, 47, 47, 0, 47, 47, 47, 47, 47, 0, - 0, 143, 47, 144, 133, 137, 133, 133, 133, 133, 0, 0, 137, 145, 0, 0, 145, - 145, 140, 0, 0, 0, 0, 0, 0, 0, 0, 148, 144, 0, 0, 0, 0, 141, 141, 0, 47, - 47, 47, 133, 133, 0, 0, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, - 79, 47, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 133, 47, 0, 47, - 47, 47, 47, 47, 47, 0, 0, 0, 47, 47, 47, 0, 47, 47, 138, 47, 0, 0, 0, 47, - 47, 0, 47, 0, 47, 47, 0, 0, 0, 47, 47, 0, 0, 0, 47, 47, 47, 0, 0, 0, 47, - 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 0, 0, 0, 0, 144, 137, 133, - 137, 137, 0, 0, 0, 137, 137, 137, 0, 145, 145, 145, 140, 0, 0, 47, 0, 0, - 0, 0, 0, 0, 144, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 142, 142, 142, - 142, 142, 142, 142, 142, 142, 142, 147, 147, 147, 27, 27, 27, 27, 27, 27, - 146, 27, 0, 0, 0, 0, 0, 0, 137, 137, 137, 0, 47, 47, 47, 47, 47, 47, 47, - 47, 0, 47, 47, 47, 0, 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, 47, 47, 47, 47, 47, 47, - 47, 47, 47, 0, 47, 47, 47, 47, 47, 0, 0, 0, 47, 133, 133, 133, 137, 137, - 137, 137, 0, 133, 133, 149, 0, 133, 133, 133, 140, 0, 0, 0, 0, 0, 0, 0, - 150, 151, 0, 47, 47, 0, 0, 0, 0, 0, 0, 47, 47, 133, 133, 0, 0, 142, 142, - 142, 142, 142, 142, 142, 142, 142, 142, 0, 0, 0, 0, 0, 0, 0, 0, 152, 152, - 152, 152, 152, 152, 152, 79, 0, 0, 137, 137, 0, 47, 47, 47, 47, 47, 47, - 47, 47, 0, 47, 47, 47, 0, 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, 47, 47, 47, 47, 47, - 47, 47, 47, 47, 0, 47, 47, 47, 47, 47, 0, 0, 143, 47, 137, 153, 145, 137, - 144, 137, 137, 0, 153, 145, 145, 0, 145, 145, 133, 140, 0, 0, 0, 0, 0, 0, - 0, 144, 144, 0, 0, 0, 0, 0, 0, 0, 47, 0, 47, 47, 133, 133, 0, 0, 142, - 142, 142, 142, 142, 142, 142, 142, 142, 142, 0, 27, 27, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 137, 137, 0, 47, 47, 47, 47, 47, 47, 47, 47, - 0, 47, 47, 47, 0, 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, 47, 47, 47, 47, 47, 47, 47, - 47, 47, 47, 47, 47, 47, 47, 47, 0, 0, 0, 47, 144, 137, 137, 133, 133, - 133, 133, 0, 137, 137, 137, 0, 145, 145, 145, 140, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 144, 0, 0, 0, 0, 0, 0, 0, 0, 47, 47, 133, 133, 0, 0, 142, 142, 142, - 142, 142, 142, 142, 142, 142, 142, 147, 147, 147, 147, 147, 147, 0, 0, 0, - 79, 47, 47, 47, 47, 47, 47, 0, 0, 137, 137, 0, 47, 47, 47, 47, 47, 47, - 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 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, 0, 47, 47, 47, 47, 47, 47, 47, 47, 47, 0, 47, 0, 0, 47, 47, 47, - 47, 47, 47, 47, 0, 0, 0, 154, 0, 0, 0, 0, 144, 137, 137, 133, 133, 133, - 0, 133, 0, 137, 137, 145, 137, 145, 145, 145, 144, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 137, 137, 82, 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, 47, 47, 47, 47, 47, 47, 47, 47, 133, 47, 155, - 133, 133, 133, 133, 156, 156, 140, 0, 0, 0, 0, 146, 47, 47, 47, 47, 47, - 47, 52, 133, 157, 157, 157, 157, 133, 133, 133, 82, 142, 142, 142, 142, - 142, 142, 142, 142, 142, 142, 82, 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, 47, 47, 0, 47, 0, 0, 47, 47, 0, 47, 0, 0, 47, 0, 0, 0, 0, 0, 0, 47, - 47, 47, 47, 0, 47, 47, 47, 47, 47, 47, 47, 0, 47, 47, 47, 0, 47, 0, 47, - 0, 0, 47, 47, 0, 47, 47, 47, 47, 133, 47, 155, 133, 133, 133, 133, 158, - 158, 0, 133, 133, 47, 0, 0, 47, 47, 47, 47, 47, 0, 52, 0, 159, 159, 159, - 159, 133, 133, 0, 0, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 0, - 0, 155, 155, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 79, 79, 79, 82, 82, 82, 82, - 82, 82, 82, 82, 160, 82, 82, 82, 82, 82, 82, 79, 79, 79, 79, 79, 84, 84, - 79, 79, 79, 79, 79, 79, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, - 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 79, 84, 79, 84, 79, - 161, 162, 163, 162, 163, 137, 137, 47, 47, 47, 141, 47, 47, 47, 47, 0, - 47, 47, 47, 47, 141, 47, 47, 47, 47, 141, 47, 47, 47, 47, 141, 47, 47, - 47, 47, 141, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 141, 47, 47, - 47, 0, 0, 0, 0, 164, 165, 166, 167, 166, 166, 168, 166, 168, 165, 165, - 165, 165, 133, 137, 165, 166, 80, 80, 140, 82, 80, 80, 47, 47, 47, 47, 0, - 0, 0, 0, 133, 133, 133, 166, 133, 133, 133, 133, 0, 133, 133, 133, 133, - 166, 133, 133, 133, 133, 166, 133, 133, 133, 133, 166, 133, 133, 133, - 133, 166, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, - 166, 133, 133, 133, 0, 79, 79, 79, 79, 79, 79, 79, 79, 84, 79, 79, 79, - 79, 79, 79, 0, 79, 79, 82, 82, 82, 82, 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, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, - 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, - 47, 47, 47, 47, 47, 47, 47, 47, 47, 138, 47, 47, 47, 47, 137, 137, 133, - 148, 133, 133, 137, 133, 133, 133, 133, 133, 143, 137, 140, 140, 137, - 137, 133, 133, 47, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 82, - 82, 82, 82, 82, 82, 47, 47, 47, 47, 47, 47, 137, 137, 133, 133, 47, 47, - 47, 47, 133, 133, 133, 47, 137, 137, 137, 47, 47, 137, 137, 137, 137, - 137, 137, 137, 47, 47, 47, 133, 133, 133, 133, 47, 47, 47, 47, 47, 47, - 47, 47, 47, 47, 47, 47, 47, 133, 137, 137, 133, 133, 137, 137, 137, 137, - 137, 137, 84, 47, 137, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, - 0, 0, 0, 0, 79, 79, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, - 44, 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, 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, 82, 50, 0, 0, 0, 169, 169, 169, 169, 169, 169, 169, 169, 169, - 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, - 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, - 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, - 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, - 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, - 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 0, 0, 0, 0, 0, - 169, 47, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, - 170, 170, 170, 170, 170, 170, 170, 170, 47, 47, 47, 47, 47, 47, 47, 47, - 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 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, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, - 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, - 170, 170, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, - 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 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, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, - 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, - 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, - 47, 47, 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, 47, 47, 47, 0, 0, 47, 47, 47, 47, - 47, 47, 47, 0, 47, 0, 47, 47, 47, 47, 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, 0, 47, - 47, 47, 47, 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, 0, 47, 47, 47, 47, 0, 0, 47, 47, 47, 47, 47, 47, 47, 0, 47, 0, 47, - 47, 47, 47, 0, 0, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, - 47, 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, 0, 47, 47, 47, 47, 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, 0, 0, 0, 0, 80, 79, 82, 82, 82, 82, 82, 82, 82, - 82, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, - 147, 147, 147, 147, 147, 147, 0, 0, 0, 47, 47, 47, 47, 47, 47, 47, 47, - 47, 47, 47, 47, 47, 47, 47, 47, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, - 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, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 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, 47, 47, 47, 47, 47, 47, 47, - 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, - 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, - 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, - 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, - 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, - 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, - 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, - 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, - 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, - 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, - 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, - 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, - 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, - 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, - 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, - 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, - 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, - 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 82, 82, 47, 47, 47, 47, 47, - 47, 47, 47, 0, 0, 0, 0, 0, 0, 0, 0, 0, 171, 47, 47, 47, 47, 47, 47, 47, - 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, - 47, 162, 163, 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, 47, 82, 82, 82, 172, 172, 172, 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, 0, 47, 47, 47, 47, 133, 133, 140, 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, 133, 133, 140, 82, 82, 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, 133, 133, 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, 0, 47, 47, 47, 0, 133, 133, 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, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 173, 173, - 137, 133, 133, 133, 133, 133, 133, 133, 137, 137, 137, 137, 137, 137, - 137, 137, 133, 137, 137, 133, 133, 133, 133, 133, 133, 133, 133, 133, - 140, 133, 82, 82, 82, 52, 82, 82, 82, 146, 47, 80, 0, 0, 142, 142, 142, - 142, 142, 142, 142, 142, 142, 142, 0, 0, 0, 0, 0, 0, 152, 152, 152, 152, - 152, 152, 152, 152, 152, 152, 0, 0, 0, 0, 0, 0, 136, 136, 136, 136, 136, - 136, 83, 136, 136, 136, 136, 133, 133, 133, 171, 0, 142, 142, 142, 142, - 142, 142, 142, 142, 142, 142, 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, 52, 47, 47, 47, 47, 47, 47, - 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, - 47, 47, 47, 47, 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, 47, 47, - 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, - 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, - 47, 47, 47, 86, 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, 47, 47, 47, 47, - 47, 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, 133, 133, 133, 137, 137, 137, 137, - 133, 133, 137, 137, 137, 0, 0, 0, 0, 137, 137, 133, 137, 137, 137, 137, - 137, 137, 85, 80, 84, 0, 0, 0, 0, 27, 0, 0, 0, 136, 136, 142, 142, 142, - 142, 142, 142, 142, 142, 142, 142, 47, 47, 47, 47, 47, 47, 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, 47, 47, 47, 47, 47, 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, 47, 47, 0, 0, 0, 0, 0, 0, 137, 137, 137, 137, 137, 137, - 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 47, 47, 47, 47, - 47, 47, 47, 137, 137, 0, 0, 0, 0, 0, 0, 142, 142, 142, 142, 142, 142, - 142, 142, 142, 142, 0, 0, 0, 0, 136, 136, 27, 27, 27, 27, 27, 27, 27, 27, - 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, - 27, 27, 27, 27, 27, 27, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, - 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 80, 84, 137, 137, 137, 0, 0, - 82, 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, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 133, 133, 133, 133, 137, 47, 138, 47, 138, 47, 138, 47, 138, 47, - 138, 47, 47, 47, 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, 143, 144, 133, 133, 133, 133, 133, 145, 133, 145, 137, 137, 145, - 145, 133, 145, 174, 47, 47, 47, 47, 47, 47, 47, 0, 0, 0, 0, 142, 142, - 142, 142, 142, 142, 142, 142, 142, 142, 82, 82, 82, 82, 82, 82, 82, 79, - 79, 79, 79, 79, 79, 79, 79, 79, 79, 80, 84, 80, 80, 80, 80, 80, 80, 80, - 79, 79, 79, 79, 79, 79, 79, 79, 79, 0, 0, 0, 133, 133, 137, 47, 47, 47, - 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, - 47, 47, 47, 47, 47, 47, 47, 47, 47, 137, 133, 133, 133, 133, 137, 137, - 133, 133, 174, 0, 0, 0, 47, 47, 142, 142, 142, 142, 142, 142, 142, 142, - 142, 142, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 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, 137, 137, 137, 137, 137, 137, 137, 137, 133, 133, 133, 133, 133, 133, - 133, 133, 137, 137, 133, 143, 0, 0, 0, 82, 82, 82, 82, 82, 142, 142, 142, - 142, 142, 142, 142, 142, 142, 142, 0, 0, 0, 47, 47, 47, 142, 142, 142, - 142, 142, 142, 142, 142, 142, 142, 47, 47, 47, 47, 47, 47, 47, 47, 47, - 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, - 47, 47, 47, 52, 52, 52, 52, 52, 52, 82, 82, 46, 46, 46, 46, 46, 46, 46, - 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, - 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, - 46, 50, 50, 50, 52, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 52, 50, - 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 52, - 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, - 50, 35, 35, 35, 35, 35, 35, 35, 35, 35, 46, 46, 46, 46, 46, 46, 46, 46, - 46, 46, 46, 46, 46, 50, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, - 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, - 46, 46, 46, 46, 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, 80, 80, 84, 80, 80, 80, 80, 80, 80, 80, 84, 80, 80, - 175, 176, 84, 177, 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, 80, 84, 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, 178, 46, 46, 44, 46, 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, 46, 44, 46, 44, 46, 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, 179, 43, 179, - 43, 179, 43, 179, 43, 179, 43, 179, 43, 179, 0, 0, 43, 43, 43, 43, 43, - 43, 43, 43, 180, 180, 180, 180, 180, 180, 180, 180, 43, 43, 43, 43, 43, - 43, 43, 43, 180, 180, 180, 180, 180, 180, 180, 180, 43, 43, 43, 43, 43, - 43, 43, 43, 180, 180, 180, 180, 180, 180, 180, 180, 43, 43, 43, 43, 43, - 0, 43, 43, 38, 38, 38, 181, 180, 57, 179, 57, 57, 75, 43, 43, 43, 0, 43, - 43, 38, 181, 38, 181, 180, 75, 75, 75, 43, 43, 43, 179, 0, 0, 43, 43, 38, - 38, 38, 181, 0, 75, 75, 75, 43, 43, 43, 179, 43, 43, 43, 43, 38, 38, 38, - 181, 38, 75, 182, 182, 0, 0, 43, 43, 43, 0, 43, 43, 38, 181, 38, 181, - 180, 182, 57, 0, 183, 183, 184, 184, 184, 184, 184, 184, 184, 184, 184, - 131, 131, 131, 173, 185, 186, 187, 83, 186, 186, 186, 22, 188, 189, 190, - 191, 192, 189, 190, 191, 192, 22, 22, 22, 136, 193, 193, 193, 22, 194, - 195, 196, 197, 198, 199, 200, 21, 201, 108, 201, 202, 203, 22, 188, 188, - 136, 29, 36, 22, 188, 136, 193, 204, 204, 136, 136, 136, 205, 162, 163, - 188, 188, 188, 136, 136, 136, 136, 136, 136, 136, 136, 77, 136, 204, 136, - 136, 188, 136, 136, 136, 136, 136, 136, 136, 184, 131, 131, 131, 131, - 131, 0, 0, 0, 0, 0, 131, 131, 131, 131, 131, 131, 206, 35, 0, 0, 34, 206, - 206, 206, 206, 206, 207, 207, 208, 209, 210, 28, 206, 34, 34, 34, 34, - 206, 206, 206, 206, 206, 207, 207, 208, 209, 210, 0, 50, 50, 50, 50, 50, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 146, 146, 146, 146, 146, 146, 146, 146, - 211, 212, 146, 146, 23, 146, 146, 146, 146, 146, 146, 146, 146, 146, 0, - 0, 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, 213, 213, 80, 80, 80, 80, 213, 213, 213, 80, 80, 81, 81, 81, - 81, 80, 81, 81, 81, 213, 213, 80, 84, 80, 213, 213, 84, 84, 84, 84, 80, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 214, 214, 48, 215, 27, 215, - 214, 48, 27, 215, 35, 48, 48, 48, 35, 35, 48, 48, 48, 28, 27, 48, 215, - 27, 27, 48, 48, 48, 48, 48, 27, 27, 214, 215, 215, 27, 48, 27, 216, 27, - 48, 27, 181, 216, 48, 48, 217, 35, 48, 48, 44, 48, 35, 155, 155, 155, - 155, 35, 27, 214, 35, 35, 48, 48, 218, 77, 77, 77, 77, 48, 35, 35, 35, - 35, 27, 77, 27, 27, 46, 79, 0, 0, 0, 37, 37, 219, 219, 219, 219, 219, - 219, 37, 37, 37, 37, 219, 220, 220, 220, 220, 220, 220, 220, 220, 220, - 220, 220, 220, 221, 221, 221, 221, 220, 220, 220, 220, 220, 220, 220, - 220, 220, 220, 221, 221, 221, 221, 221, 221, 172, 172, 172, 44, 46, 172, - 172, 172, 172, 0, 0, 0, 0, 0, 0, 0, 40, 40, 40, 40, 40, 25, 25, 25, 25, - 25, 222, 222, 27, 27, 27, 27, 77, 27, 27, 77, 27, 27, 77, 27, 27, 27, 27, - 27, 27, 27, 222, 27, 27, 27, 27, 27, 27, 27, 27, 27, 25, 25, 27, 27, 27, - 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 223, 222, - 222, 27, 27, 40, 27, 40, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, - 27, 27, 27, 27, 27, 27, 25, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, - 27, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 40, 224, 225, 225, - 226, 77, 77, 40, 225, 226, 224, 225, 226, 224, 77, 40, 77, 225, 227, 228, - 77, 225, 224, 77, 77, 77, 225, 224, 224, 225, 40, 225, 225, 224, 224, 40, - 226, 40, 226, 40, 40, 40, 40, 225, 229, 218, 225, 218, 218, 224, 224, - 224, 40, 40, 40, 40, 77, 224, 77, 224, 225, 225, 224, 224, 224, 226, 224, - 224, 226, 224, 224, 226, 225, 226, 224, 224, 225, 77, 77, 77, 77, 77, - 225, 224, 224, 224, 77, 77, 77, 77, 77, 77, 77, 77, 77, 224, 230, 40, - 226, 77, 225, 225, 225, 225, 224, 224, 225, 225, 77, 222, 230, 230, 226, - 226, 224, 224, 226, 226, 224, 224, 226, 226, 224, 224, 224, 224, 224, - 224, 226, 226, 225, 225, 226, 226, 225, 225, 226, 226, 224, 224, 224, 77, - 77, 224, 224, 224, 224, 77, 77, 40, 77, 77, 224, 40, 77, 77, 77, 77, 77, - 77, 77, 77, 224, 224, 77, 40, 224, 224, 224, 224, 224, 224, 226, 226, - 226, 226, 224, 224, 224, 224, 224, 224, 224, 224, 224, 77, 77, 77, 77, - 77, 224, 225, 77, 77, 77, 77, 77, 77, 77, 77, 77, 224, 224, 224, 224, - 224, 77, 77, 224, 224, 77, 77, 77, 77, 224, 224, 224, 224, 224, 224, 224, - 224, 224, 224, 226, 226, 226, 226, 224, 224, 224, 224, 224, 224, 226, - 226, 226, 226, 77, 77, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, - 224, 224, 224, 224, 224, 224, 27, 27, 27, 27, 27, 27, 27, 27, 224, 224, - 224, 224, 27, 27, 27, 27, 27, 27, 25, 27, 27, 27, 27, 27, 27, 27, 27, 27, - 27, 27, 27, 27, 224, 224, 27, 27, 27, 27, 27, 27, 27, 231, 232, 27, 27, - 27, 27, 27, 27, 27, 27, 27, 27, 27, 79, 79, 79, 79, 79, 79, 79, 79, 79, - 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, - 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, - 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, - 79, 79, 79, 79, 79, 79, 27, 77, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, - 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 79, 27, 27, 27, - 27, 27, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, - 77, 77, 77, 77, 77, 77, 77, 77, 77, 27, 27, 27, 27, 27, 27, 27, 27, 27, - 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, - 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 77, 77, 77, 77, 77, - 77, 27, 27, 27, 27, 27, 27, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, - 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, - 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 27, 27, 27, 27, 27, 27, 27, 27, - 27, 27, 27, 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, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, - 34, 34, 34, 34, 34, 34, 34, 233, 233, 233, 233, 233, 233, 233, 233, 233, - 233, 233, 233, 233, 233, 233, 233, 233, 233, 233, 233, 233, 233, 233, - 233, 233, 233, 233, 233, 233, 233, 233, 233, 233, 233, 233, 233, 233, - 233, 233, 233, 233, 233, 233, 233, 233, 233, 233, 233, 233, 233, 233, - 233, 233, 233, 233, 233, 233, 233, 233, 233, 233, 233, 233, 233, 233, - 233, 233, 233, 233, 233, 233, 233, 233, 233, 233, 233, 233, 233, 219, - 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, - 234, 234, 234, 234, 234, 234, 234, 25, 25, 25, 25, 25, 25, 25, 25, 25, - 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, - 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, - 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, - 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 27, 27, 27, 27, 25, - 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, - 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 27, - 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 25, 25, 25, 25, 25, 25, 25, - 25, 25, 25, 25, 25, 25, 25, 25, 25, 27, 27, 25, 25, 25, 25, 27, 27, 27, - 27, 27, 27, 27, 27, 27, 27, 25, 25, 27, 25, 25, 25, 25, 25, 25, 25, 27, - 27, 27, 27, 27, 27, 27, 27, 25, 25, 27, 27, 25, 40, 27, 27, 27, 27, 25, - 25, 27, 27, 25, 40, 27, 27, 27, 27, 25, 25, 25, 27, 27, 25, 27, 27, 25, - 25, 25, 25, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, - 27, 25, 25, 25, 25, 27, 27, 27, 27, 27, 27, 27, 27, 27, 25, 27, 27, 27, - 27, 27, 27, 27, 27, 77, 77, 77, 77, 77, 77, 77, 77, 27, 27, 27, 27, 27, - 25, 25, 27, 27, 25, 27, 27, 27, 27, 25, 25, 27, 27, 27, 27, 25, 25, 27, - 27, 27, 27, 27, 27, 25, 27, 25, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, - 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, - 27, 27, 27, 27, 27, 25, 27, 25, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, - 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, - 27, 25, 25, 27, 25, 25, 25, 27, 25, 25, 25, 25, 27, 25, 25, 27, 40, 27, - 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, - 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, - 27, 27, 27, 27, 27, 27, 27, 27, 27, 0, 0, 27, 27, 27, 27, 27, 27, 27, 27, - 27, 27, 27, 27, 79, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, - 27, 27, 27, 0, 0, 0, 27, 27, 27, 27, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 27, 27, 27, 27, 0, 27, 27, 27, 27, 0, 0, 27, 27, 27, 27, 27, 27, 27, - 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, - 27, 27, 27, 0, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, - 27, 27, 27, 27, 27, 27, 25, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, - 27, 27, 27, 0, 27, 0, 27, 27, 27, 27, 0, 0, 0, 27, 0, 27, 27, 27, 27, 27, - 27, 27, 0, 0, 27, 27, 27, 27, 27, 27, 27, 162, 163, 162, 163, 162, 163, - 162, 163, 162, 163, 162, 163, 162, 163, 234, 234, 234, 234, 234, 234, - 234, 234, 234, 234, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, - 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 27, 0, 0, 0, 27, 27, - 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, - 27, 27, 27, 27, 0, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, - 27, 0, 224, 77, 77, 224, 224, 162, 163, 77, 224, 224, 77, 0, 224, 0, 0, - 0, 77, 77, 77, 224, 224, 224, 224, 77, 77, 77, 77, 77, 224, 224, 224, 77, - 77, 77, 224, 224, 224, 224, 9, 10, 9, 10, 9, 10, 9, 10, 162, 163, 77, 77, - 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 79, 79, 79, 79, - 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, - 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, - 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, - 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, - 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, - 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, - 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 77, 77, - 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, - 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, - 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, - 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, - 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, - 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, - 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, - 77, 77, 77, 162, 163, 9, 10, 162, 163, 162, 163, 162, 163, 162, 163, 162, - 163, 162, 163, 162, 163, 162, 163, 162, 163, 77, 77, 224, 224, 224, 224, - 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, - 224, 224, 224, 77, 77, 77, 77, 77, 77, 77, 77, 224, 77, 77, 77, 77, 77, - 77, 77, 224, 224, 224, 224, 224, 224, 77, 77, 77, 224, 77, 77, 77, 77, - 224, 224, 224, 224, 224, 77, 224, 224, 77, 77, 162, 163, 162, 163, 224, - 77, 77, 77, 77, 224, 77, 224, 224, 224, 77, 77, 224, 224, 77, 77, 77, 77, - 77, 77, 77, 77, 77, 77, 224, 224, 224, 224, 224, 224, 77, 77, 162, 163, - 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 224, 224, 218, 224, 224, - 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 77, - 224, 224, 224, 224, 77, 77, 224, 77, 224, 77, 77, 224, 77, 224, 224, 224, - 224, 77, 77, 77, 77, 77, 224, 224, 77, 77, 77, 77, 77, 77, 224, 224, 224, - 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, - 77, 77, 77, 77, 77, 77, 224, 224, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, - 77, 224, 224, 77, 77, 77, 77, 224, 224, 224, 224, 77, 224, 224, 77, 77, - 224, 218, 208, 208, 77, 77, 224, 224, 224, 224, 224, 224, 224, 224, 224, - 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, - 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, - 224, 224, 224, 224, 224, 224, 77, 77, 224, 224, 224, 224, 224, 224, 224, - 224, 77, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, - 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, - 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 77, 77, - 77, 77, 77, 235, 77, 224, 77, 77, 77, 224, 224, 224, 224, 224, 77, 77, - 77, 77, 77, 224, 224, 224, 77, 77, 77, 77, 224, 77, 77, 77, 224, 224, - 224, 224, 224, 77, 224, 77, 77, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, - 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, - 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, - 27, 27, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, - 77, 77, 77, 77, 77, 27, 27, 77, 77, 77, 77, 77, 77, 0, 0, 0, 27, 27, 27, - 27, 27, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, + 17, 17, 17, 17, 17, 17, 41, 41, 41, 41, 41, 41, 148, 17, 149, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 41, 41, 41, 41, 41, 41, 41, 41, 150, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 78, 151, + 152, 153, 154, 17, 155, 17, 156, 157, 158, 159, 160, 161, 162, 163, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 164, 165, 166, 167, 168, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 100, 100, 100, 100, 100, 100, 100, 100, + 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, + 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, + 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, + 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, + 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, + 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, + 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, + 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, + 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, + 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, + 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, + 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, + 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, + 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, + 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, + 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, + 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, + 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, + 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, + 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, + 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, + 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, + 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, + 100, 100, 100, 169, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, + 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, + 100, 100, 100, 100, 100, 100, 100, 100, 170, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 120, 120, 120, + 120, 171, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 172, 17, 173, 174, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, + 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, + 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, + 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, + 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, + 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, + 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, + 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, + 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, + 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, + 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, + 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, + 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, + 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, + 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, + 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, + 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, + 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, + 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, + 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, + 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, + 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, + 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, + 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, + 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, + 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, + 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, + 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, + 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, + 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, + 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, + 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, + 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, + 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, + 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, + 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, + 119, 119, 119, 119, 119, 119, 119, 119, 175, 119, 119, 119, 119, 119, + 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, + 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, + 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, + 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, + 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, + 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, + 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, + 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, + 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, + 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, + 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, + 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, + 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, + 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, + 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, + 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, + 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, + 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, + 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, + 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, + 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, + 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, + 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, + 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, + 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, + 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, + 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, + 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, + 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, + 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, + 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, + 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, + 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, + 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, + 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, + 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, + 119, 119, 175, +}; + +static unsigned short index2[] = { + 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 3, 2, 4, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 3, 3, 3, 2, 5, 6, 6, 7, 8, 7, 6, 6, 9, 10, 6, 11, 12, 13, 12, + 12, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 12, 6, 15, 16, 15, 6, 6, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 9, 6, 10, 18, 19, 18, 20, 20, 20, 20, 20, 20, + 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, + 20, 20, 9, 16, 10, 16, 1, 1, 1, 1, 1, 1, 3, 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, 21, 22, 8, 8, 23, 8, 24, + 25, 26, 27, 28, 29, 16, 30, 25, 31, 32, 33, 34, 34, 26, 35, 25, 22, 26, + 34, 28, 36, 37, 37, 37, 22, 38, 38, 38, 38, 38, 38, 39, 38, 38, 38, 38, + 38, 38, 38, 38, 38, 39, 38, 38, 38, 38, 38, 38, 40, 39, 38, 38, 38, 38, + 38, 39, 41, 42, 42, 43, 43, 43, 43, 41, 43, 42, 42, 42, 43, 42, 42, 43, + 43, 41, 43, 42, 42, 43, 43, 43, 40, 41, 42, 42, 43, 42, 43, 41, 43, 38, + 42, 38, 43, 38, 43, 38, 43, 38, 43, 38, 43, 38, 43, 38, 43, 44, 41, 38, + 42, 38, 43, 38, 43, 38, 43, 38, 42, 38, 43, 38, 43, 38, 43, 38, 43, 38, + 43, 39, 41, 38, 43, 38, 42, 38, 43, 38, 43, 38, 41, 45, 28, 38, 43, 38, + 43, 41, 38, 43, 38, 43, 38, 43, 45, 28, 39, 41, 38, 42, 38, 43, 38, 42, + 28, 39, 41, 38, 42, 38, 43, 38, 43, 39, 41, 38, 43, 38, 43, 38, 43, 38, + 43, 38, 43, 38, 43, 38, 43, 38, 43, 38, 43, 39, 41, 38, 43, 38, 42, 38, + 43, 38, 43, 38, 43, 38, 43, 38, 43, 38, 43, 38, 38, 43, 38, 43, 38, 43, + 35, 46, 44, 44, 46, 44, 46, 44, 44, 46, 44, 44, 44, 46, 46, 44, 44, 44, + 44, 46, 44, 44, 46, 44, 44, 44, 46, 46, 46, 44, 44, 46, 44, 38, 43, 44, + 46, 44, 46, 44, 44, 46, 44, 46, 46, 44, 46, 44, 38, 43, 44, 44, 44, 46, + 44, 46, 44, 44, 46, 46, 47, 44, 46, 46, 46, 47, 47, 47, 47, 48, 49, 35, + 48, 49, 35, 48, 49, 35, 38, 42, 38, 42, 38, 42, 38, 42, 38, 42, 38, 42, + 38, 42, 38, 42, 46, 38, 43, 38, 43, 38, 43, 44, 46, 38, 43, 38, 43, 38, + 43, 38, 43, 38, 43, 43, 48, 49, 35, 38, 43, 44, 44, 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, 46, 38, 43, 44, + 46, 44, 46, 44, 46, 38, 43, 38, 43, 38, 43, 38, 43, 38, 43, 38, 43, 38, + 43, 46, 46, 46, 46, 46, 46, 44, 44, 46, 44, 44, 46, 46, 44, 46, 44, 44, + 44, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 46, 41, 46, 46, 46, 46, 46, + 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 41, 46, 46, 46, 46, 46, 46, 46, + 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, + 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, + 46, 46, 46, 46, 46, 46, 46, 47, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, + 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 50, + 50, 50, 50, 50, 50, 50, 50, 50, 51, 51, 52, 52, 52, 52, 52, 52, 52, 53, + 53, 54, 53, 51, 55, 51, 55, 55, 55, 51, 55, 51, 51, 56, 52, 53, 53, 53, + 53, 53, 53, 26, 26, 26, 26, 57, 26, 53, 54, 50, 50, 50, 50, 50, 53, 53, + 53, 53, 53, 53, 53, 51, 53, 52, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, + 53, 53, 53, 53, 53, 53, 53, 58, 58, 58, 58, 58, 59, 58, 58, 58, 58, 58, + 58, 58, 59, 59, 58, 59, 58, 59, 58, 58, 60, 61, 61, 61, 61, 60, 62, 61, + 61, 61, 61, 61, 63, 63, 64, 64, 64, 64, 65, 65, 61, 61, 61, 61, 64, 64, + 61, 64, 64, 61, 61, 66, 66, 66, 66, 67, 61, 61, 61, 61, 59, 59, 59, 68, + 68, 58, 68, 68, 69, 59, 61, 61, 61, 59, 59, 59, 61, 61, 70, 59, 59, 59, + 61, 61, 61, 61, 59, 60, 61, 61, 59, 71, 72, 72, 71, 72, 72, 71, 59, 59, + 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 44, 46, 44, 46, 73, 53, 44, + 46, 0, 0, 50, 46, 46, 46, 74, 0, 0, 0, 0, 0, 57, 75, 38, 74, 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, + 46, 41, 41, 41, 41, 41, 41, 41, 43, 43, 43, 43, 43, 44, 35, 35, 48, 76, + 76, 35, 35, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, + 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 35, 35, 35, 46, 48, 35, 77, 44, + 46, 48, 44, 46, 46, 44, 44, 44, 38, 78, 44, 38, 44, 44, 44, 38, 44, 44, + 44, 44, 38, 38, 38, 44, 39, 39, 39, 39, 39, 39, 39, 39, 39, 78, 39, 39, + 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, + 39, 39, 41, 41, 41, 41, 41, 41, 41, 41, 41, 42, 41, 41, 41, 41, 41, 41, + 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 43, 42, + 46, 43, 46, 46, 46, 43, 46, 46, 46, 46, 43, 43, 43, 46, 44, 46, 44, 46, + 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, + 38, 43, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 79, 80, 80, 80, 80, 80, + 81, 81, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, + 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, + 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, + 44, 46, 44, 38, 43, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 46, + 38, 43, 38, 43, 44, 46, 38, 43, 44, 46, 38, 43, 38, 43, 38, 43, 44, 46, + 38, 43, 38, 43, 38, 43, 44, 46, 38, 43, 38, 43, 38, 43, 38, 43, 38, 43, + 38, 43, 44, 46, 38, 43, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, + 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, + 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 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, 0, 0, 52, 82, 82, 82, 82, 82, 82, 0, 46, 46, 46, + 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, + 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 35, + 0, 82, 83, 0, 0, 0, 0, 0, 0, 84, 80, 80, 80, 80, 84, 80, 80, 80, 85, 84, + 80, 80, 80, 80, 80, 80, 84, 84, 84, 84, 84, 84, 80, 80, 84, 80, 80, 85, + 86, 80, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 96, 97, 98, 99, 100, 101, + 102, 103, 104, 102, 80, 84, 102, 95, 0, 0, 0, 0, 0, 0, 0, 0, 105, 105, + 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, + 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 0, 0, 0, 0, 0, + 105, 105, 105, 102, 102, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 106, 106, 106, + 106, 0, 0, 77, 77, 107, 108, 108, 109, 110, 111, 27, 27, 80, 80, 80, 80, + 80, 80, 80, 80, 112, 113, 114, 111, 0, 0, 111, 111, 0, 115, 116, 116, + 116, 116, 116, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, + 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, + 117, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 118, 119, 120, + 112, 113, 114, 121, 122, 123, 123, 124, 84, 80, 80, 80, 80, 80, 84, 80, + 80, 0, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 108, 126, 126, + 111, 115, 115, 127, 115, 115, 115, 115, 128, 128, 128, 128, 115, 115, + 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, + 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, + 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, + 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, + 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 116, + 115, 116, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, + 115, 115, 115, 115, 116, 111, 115, 80, 80, 80, 80, 80, 80, 80, 106, 81, + 80, 80, 80, 80, 84, 80, 117, 117, 80, 80, 27, 84, 80, 80, 84, 115, 115, + 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 115, 115, 115, 130, + 130, 115, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, + 111, 111, 0, 131, 115, 132, 115, 115, 115, 115, 115, 115, 115, 115, 115, + 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, + 115, 115, 115, 115, 115, 115, 115, 80, 84, 80, 80, 84, 80, 80, 84, 84, + 84, 80, 84, 84, 80, 84, 80, 80, 80, 84, 80, 84, 80, 84, 80, 84, 80, 80, + 0, 0, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, + 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, + 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, + 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, + 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, + 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, + 115, 115, 115, 115, 115, 115, 133, 133, 133, 133, 133, 133, 133, 133, + 133, 133, 133, 115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 134, 134, + 134, 134, 134, 134, 134, 134, 134, 134, 105, 105, 105, 105, 105, 105, + 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, + 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 80, 80, + 80, 80, 80, 80, 80, 84, 80, 135, 135, 27, 136, 136, 136, 135, 0, 0, 0, 0, + 0, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, + 105, 105, 105, 105, 105, 105, 105, 105, 80, 80, 80, 80, 135, 80, 80, 80, + 80, 80, 80, 80, 80, 80, 135, 80, 80, 80, 135, 80, 80, 80, 80, 80, 0, 0, + 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, + 102, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 133, 133, 133, 137, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, + 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, + 47, 47, 47, 47, 47, 47, 47, 138, 47, 47, 47, 47, 47, 47, 47, 138, 47, 47, + 138, 47, 47, 47, 47, 47, 0, 0, 139, 47, 137, 137, 137, 133, 133, 133, + 133, 133, 133, 133, 133, 137, 137, 137, 137, 140, 137, 0, 47, 80, 84, 80, + 80, 133, 0, 0, 141, 141, 141, 141, 141, 141, 141, 141, 47, 47, 133, 133, + 82, 82, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 82, 52, 47, 0, + 0, 0, 0, 0, 0, 47, 47, 47, 47, 47, 47, 47, 0, 133, 137, 137, 0, 47, 47, + 47, 47, 47, 47, 47, 47, 0, 0, 47, 47, 0, 0, 47, 47, 47, 47, 47, 47, 47, + 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 0, 47, 47, + 47, 47, 47, 47, 47, 0, 47, 0, 0, 0, 47, 47, 47, 47, 0, 0, 143, 47, 144, + 137, 137, 133, 133, 133, 133, 0, 0, 137, 137, 0, 0, 145, 145, 140, 47, 0, + 0, 0, 0, 0, 0, 0, 0, 144, 0, 0, 0, 0, 141, 141, 0, 141, 47, 47, 133, 133, + 0, 0, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 47, 47, 146, 146, + 147, 147, 147, 147, 147, 147, 79, 146, 0, 0, 0, 0, 0, 133, 133, 137, 0, + 47, 47, 47, 47, 47, 47, 0, 0, 0, 0, 47, 47, 0, 0, 47, 47, 47, 47, 47, 47, + 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 0, 47, + 47, 47, 47, 47, 47, 47, 0, 47, 141, 0, 47, 141, 0, 47, 47, 0, 0, 143, 0, + 137, 137, 137, 133, 133, 0, 0, 0, 0, 133, 133, 0, 0, 133, 133, 140, 0, 0, + 0, 133, 0, 0, 0, 0, 0, 0, 0, 141, 141, 141, 47, 0, 141, 0, 0, 0, 0, 0, 0, + 0, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 133, 133, 47, 47, + 47, 133, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 133, 133, 137, 0, 47, 47, 47, + 47, 47, 47, 47, 47, 47, 0, 47, 47, 47, 0, 47, 47, 47, 47, 47, 47, 47, 47, + 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 0, 47, 47, 47, + 47, 47, 47, 47, 0, 47, 47, 0, 47, 47, 47, 47, 47, 0, 0, 143, 47, 137, + 137, 137, 133, 133, 133, 133, 133, 0, 133, 133, 137, 0, 137, 137, 140, 0, + 0, 47, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 47, 47, 133, 133, 0, + 0, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 0, 146, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 133, 137, 137, 0, 47, 47, 47, 47, 47, + 47, 47, 47, 0, 0, 47, 47, 0, 0, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, + 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 0, 47, 47, 47, 47, 47, + 47, 47, 0, 47, 47, 0, 47, 47, 47, 47, 47, 0, 0, 143, 47, 144, 133, 137, + 133, 133, 133, 133, 0, 0, 137, 145, 0, 0, 145, 145, 140, 0, 0, 0, 0, 0, + 0, 0, 0, 148, 144, 0, 0, 0, 0, 141, 141, 0, 47, 47, 47, 133, 133, 0, 0, + 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 79, 47, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 133, 47, 0, 47, 47, 47, 47, 47, 47, 0, + 0, 0, 47, 47, 47, 0, 47, 47, 138, 47, 0, 0, 0, 47, 47, 0, 47, 0, 47, 47, + 0, 0, 0, 47, 47, 0, 0, 0, 47, 47, 47, 0, 0, 0, 47, 47, 47, 47, 47, 47, + 47, 47, 47, 47, 47, 47, 0, 0, 0, 0, 144, 137, 133, 137, 137, 0, 0, 0, + 137, 137, 137, 0, 145, 145, 145, 140, 0, 0, 47, 0, 0, 0, 0, 0, 0, 144, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 142, 142, 142, 142, 142, 142, 142, + 142, 142, 142, 147, 147, 147, 27, 27, 27, 27, 27, 27, 146, 27, 0, 0, 0, + 0, 0, 0, 137, 137, 137, 0, 47, 47, 47, 47, 47, 47, 47, 47, 0, 47, 47, 47, + 0, 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, 47, 47, 47, 47, 47, 47, 47, 47, 47, 0, 47, + 47, 47, 47, 47, 0, 0, 0, 47, 133, 133, 133, 137, 137, 137, 137, 0, 133, + 133, 149, 0, 133, 133, 133, 140, 0, 0, 0, 0, 0, 0, 0, 150, 151, 0, 47, + 47, 0, 0, 0, 0, 0, 0, 47, 47, 133, 133, 0, 0, 142, 142, 142, 142, 142, + 142, 142, 142, 142, 142, 0, 0, 0, 0, 0, 0, 0, 0, 152, 152, 152, 152, 152, + 152, 152, 79, 0, 0, 137, 137, 0, 47, 47, 47, 47, 47, 47, 47, 47, 0, 47, + 47, 47, 0, 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, 47, 47, 47, 47, 47, 47, 47, 47, + 47, 0, 47, 47, 47, 47, 47, 0, 0, 143, 47, 137, 153, 145, 137, 144, 137, + 137, 0, 153, 145, 145, 0, 145, 145, 133, 140, 0, 0, 0, 0, 0, 0, 0, 144, + 144, 0, 0, 0, 0, 0, 0, 0, 47, 0, 47, 47, 133, 133, 0, 0, 142, 142, 142, + 142, 142, 142, 142, 142, 142, 142, 0, 27, 27, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 137, 137, 0, 47, 47, 47, 47, 47, 47, 47, 47, 0, 47, 47, + 47, 0, 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, 47, 47, 47, 47, 47, 47, 47, 47, 47, + 47, 47, 47, 47, 47, 47, 0, 0, 0, 47, 144, 137, 137, 133, 133, 133, 133, + 0, 137, 137, 137, 0, 145, 145, 145, 140, 0, 0, 0, 0, 0, 0, 0, 0, 0, 144, + 0, 0, 0, 0, 0, 0, 0, 0, 47, 47, 133, 133, 0, 0, 142, 142, 142, 142, 142, + 142, 142, 142, 142, 142, 147, 147, 147, 147, 147, 147, 0, 0, 0, 79, 47, + 47, 47, 47, 47, 47, 0, 0, 137, 137, 0, 47, 47, 47, 47, 47, 47, 47, 47, + 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 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, + 0, 47, 47, 47, 47, 47, 47, 47, 47, 47, 0, 47, 0, 0, 47, 47, 47, 47, 47, + 47, 47, 0, 0, 0, 154, 0, 0, 0, 0, 144, 137, 137, 133, 133, 133, 0, 133, + 0, 137, 137, 145, 137, 145, 145, 145, 144, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 137, 137, 82, 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, 47, 47, 47, 47, 47, 47, 47, 47, 133, 47, 155, 133, 133, + 133, 133, 156, 156, 140, 0, 0, 0, 0, 146, 47, 47, 47, 47, 47, 47, 52, + 133, 157, 157, 157, 157, 133, 133, 133, 82, 142, 142, 142, 142, 142, 142, + 142, 142, 142, 142, 82, 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, 47, 47, + 0, 47, 0, 0, 47, 47, 0, 47, 0, 0, 47, 0, 0, 0, 0, 0, 0, 47, 47, 47, 47, + 0, 47, 47, 47, 47, 47, 47, 47, 0, 47, 47, 47, 0, 47, 0, 47, 0, 0, 47, 47, + 0, 47, 47, 47, 47, 133, 47, 155, 133, 133, 133, 133, 158, 158, 0, 133, + 133, 47, 0, 0, 47, 47, 47, 47, 47, 0, 52, 0, 159, 159, 159, 159, 133, + 133, 0, 0, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 0, 0, 155, + 155, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 79, 79, 79, 82, 82, 82, 82, 82, 82, + 82, 82, 160, 82, 82, 82, 82, 82, 82, 79, 79, 79, 79, 79, 84, 84, 79, 79, + 79, 79, 79, 79, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 147, + 147, 147, 147, 147, 147, 147, 147, 147, 147, 79, 84, 79, 84, 79, 161, + 162, 163, 162, 163, 137, 137, 47, 47, 47, 141, 47, 47, 47, 47, 0, 47, 47, + 47, 47, 141, 47, 47, 47, 47, 141, 47, 47, 47, 47, 141, 47, 47, 47, 47, + 141, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 141, 47, 47, 47, 0, + 0, 0, 0, 164, 165, 166, 167, 166, 166, 168, 166, 168, 165, 165, 165, 165, + 133, 137, 165, 166, 80, 80, 140, 82, 80, 80, 47, 47, 47, 47, 0, 0, 0, 0, + 133, 133, 133, 166, 133, 133, 133, 133, 0, 133, 133, 133, 133, 166, 133, + 133, 133, 133, 166, 133, 133, 133, 133, 166, 133, 133, 133, 133, 166, + 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 166, 133, + 133, 133, 0, 79, 79, 79, 79, 79, 79, 79, 79, 84, 79, 79, 79, 79, 79, 79, + 0, 79, 79, 82, 82, 82, 82, 82, 79, 79, 79, 79, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 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, 138, 47, 47, 47, 47, 137, 137, 133, 148, 133, + 133, 137, 133, 133, 133, 133, 133, 143, 137, 140, 140, 137, 137, 133, + 133, 47, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 82, 82, 82, + 82, 82, 82, 47, 47, 47, 47, 47, 47, 137, 137, 133, 133, 47, 47, 47, 47, + 133, 133, 133, 47, 137, 137, 137, 47, 47, 137, 137, 137, 137, 137, 137, + 137, 47, 47, 47, 133, 133, 133, 133, 47, 47, 47, 47, 47, 47, 47, 47, 47, + 47, 47, 47, 47, 133, 137, 137, 133, 133, 137, 137, 137, 137, 137, 137, + 84, 47, 137, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 137, 137, + 137, 133, 79, 79, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 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, 46, 46, 46, 46, 46, 46, 46, 46, + 44, 44, 44, 44, 44, 44, 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, 82, 50, 0, 0, 0, 169, 169, 169, 169, 169, 169, 169, 169, 169, + 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, + 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, + 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, + 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, + 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, + 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, + 169, 169, 169, 47, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, + 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 47, 47, 47, 47, 47, 47, + 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, + 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, + 47, 47, 47, 169, 169, 169, 169, 169, 170, 170, 170, 170, 170, 170, 170, + 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, + 170, 170, 170, 170, 170, 170, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, + 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, + 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, + 47, 47, 47, 47, 47, 47, 47, 47, 169, 169, 169, 169, 169, 169, 47, 47, 47, + 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, + 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, + 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 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, + 47, 47, 47, 0, 0, 47, 47, 47, 47, 47, 47, 47, 0, 47, 0, 47, 47, 47, 47, + 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, 0, 47, 47, 47, 47, 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, 0, 47, 47, 47, 47, 0, 0, 47, 47, 47, + 47, 47, 47, 47, 0, 47, 0, 47, 47, 47, 47, 0, 0, 47, 47, 47, 47, 47, 47, + 47, 47, 47, 47, 47, 47, 47, 47, 47, 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, 0, 47, 47, 47, 47, 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, 0, 0, 0, 0, 80, + 79, 82, 82, 82, 82, 82, 82, 82, 82, 147, 147, 147, 147, 147, 147, 147, + 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 0, 0, 0, + 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 27, 27, + 27, 27, 27, 27, 27, 27, 27, 27, 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, 47, 47, 47, 47, + 47, 47, 47, 47, 47, 47, 47, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 83, 47, 47, + 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, + 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, + 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, + 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, + 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, + 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, + 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, + 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, + 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, + 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, + 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, + 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, + 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, + 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, + 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, + 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, + 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, + 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, + 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, + 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, + 47, 47, 82, 82, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, + 47, 47, 47, 171, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, + 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 162, 163, 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, 47, 82, 82, 82, 172, 172, 172, 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, 0, 47, 47, 47, + 47, 133, 133, 140, 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, 133, 133, 140, 82, + 82, 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, 133, 133, 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, 0, 47, 47, 47, + 0, 133, 133, 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, 47, 47, + 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 173, 173, 137, 133, 133, 133, + 133, 133, 133, 133, 137, 137, 137, 137, 137, 137, 137, 137, 133, 137, + 137, 133, 133, 133, 133, 133, 133, 133, 133, 133, 140, 133, 82, 82, 82, + 52, 82, 82, 82, 146, 47, 80, 0, 0, 142, 142, 142, 142, 142, 142, 142, + 142, 142, 142, 0, 0, 0, 0, 0, 0, 152, 152, 152, 152, 152, 152, 152, 152, + 152, 152, 0, 0, 0, 0, 0, 0, 136, 136, 136, 136, 136, 136, 83, 136, 136, + 136, 136, 133, 133, 133, 171, 0, 142, 142, 142, 142, 142, 142, 142, 142, + 142, 142, 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, 52, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, + 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 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, 47, 47, 47, 47, 47, 47, 47, + 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, + 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 86, 47, + 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, 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, 0, 0, 0, 133, 133, 133, 137, 137, 137, 137, 133, 133, 137, 137, + 137, 0, 0, 0, 0, 137, 137, 133, 137, 137, 137, 137, 137, 137, 85, 80, 84, + 0, 0, 0, 0, 27, 0, 0, 0, 136, 136, 142, 142, 142, 142, 142, 142, 142, + 142, 142, 142, 47, 47, 47, 47, 47, 47, 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, 47, + 47, 47, 47, 47, 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, 47, 47, + 47, 47, 0, 0, 0, 0, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, + 137, 137, 137, 137, 137, 137, 137, 47, 47, 47, 47, 47, 47, 47, 137, 137, + 0, 0, 0, 0, 0, 0, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, + 0, 0, 0, 136, 136, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, + 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, + 27, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, + 47, 47, 47, 47, 47, 47, 80, 84, 137, 137, 137, 0, 0, 82, 82, 47, 47, 47, + 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, + 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, + 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 137, 133, 137, + 133, 133, 133, 133, 133, 133, 133, 0, 140, 137, 133, 137, 137, 133, 133, + 133, 133, 133, 133, 133, 133, 137, 137, 137, 137, 137, 137, 133, 133, 80, + 80, 80, 80, 80, 80, 80, 80, 0, 0, 84, 142, 142, 142, 142, 142, 142, 142, + 142, 142, 142, 0, 0, 0, 0, 0, 0, 142, 142, 142, 142, 142, 142, 142, 142, + 142, 142, 0, 0, 0, 0, 0, 0, 82, 82, 82, 82, 82, 82, 82, 52, 82, 82, 82, + 82, 82, 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, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 133, 133, 133, 133, 137, 47, + 138, 47, 138, 47, 138, 47, 138, 47, 138, 47, 47, 47, 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, 143, 144, 133, 133, 133, 133, + 133, 145, 133, 145, 137, 137, 145, 145, 133, 145, 174, 47, 47, 47, 47, + 47, 47, 47, 0, 0, 0, 0, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, + 82, 82, 82, 82, 82, 82, 82, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 80, + 84, 80, 80, 80, 80, 80, 80, 80, 79, 79, 79, 79, 79, 79, 79, 79, 79, 0, 0, + 0, 133, 133, 137, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, + 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 137, 133, + 133, 133, 133, 137, 137, 133, 133, 174, 0, 0, 0, 47, 47, 142, 142, 142, + 142, 142, 142, 142, 142, 142, 142, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 137, 137, 137, 137, 137, 137, 137, 137, 133, + 133, 133, 133, 133, 133, 133, 133, 137, 137, 133, 143, 0, 0, 0, 82, 82, + 82, 82, 82, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 0, 0, 0, + 47, 47, 47, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 47, 47, 47, + 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, + 47, 47, 47, 47, 47, 47, 47, 47, 47, 52, 52, 52, 52, 52, 52, 82, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 80, 80, 80, 82, 175, 84, 84, 84, 84, 84, 80, 80, 84, + 84, 84, 84, 80, 137, 175, 175, 175, 175, 175, 175, 175, 47, 47, 47, 47, + 84, 47, 47, 47, 47, 137, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, - 46, 46, 46, 0, 44, 46, 44, 44, 44, 46, 46, 44, 46, 44, 46, 44, 46, 44, - 44, 44, 0, 46, 44, 46, 46, 44, 46, 46, 46, 46, 46, 46, 35, 50, 0, 0, 44, - 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, - 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, - 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, - 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, - 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, - 46, 44, 46, 44, 46, 44, 46, 44, 46, 46, 27, 27, 27, 27, 27, 27, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 136, 136, 136, 136, 152, 136, 136, 46, + 46, 46, 46, 46, 46, 46, 50, 50, 50, 52, 50, 50, 50, 50, 50, 50, 50, 50, + 50, 50, 50, 52, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, + 50, 50, 50, 50, 52, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, + 50, 50, 50, 50, 50, 50, 35, 35, 35, 35, 35, 35, 35, 35, 35, 46, 46, 46, + 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 50, 46, 46, 46, 46, 46, 46, 46, + 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, + 46, 46, 46, 46, 46, 46, 46, 46, 46, 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, 80, 80, 84, 80, 80, 80, 80, 80, + 80, 80, 84, 80, 80, 176, 177, 84, 178, 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, 84, 80, 84, 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, 179, 46, 46, 44, 46, 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, 46, 44, 46, 44, + 46, 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, 180, 43, 180, 43, 180, 43, 180, 43, 180, 43, 180, 43, 180, 0, 0, + 43, 43, 43, 43, 43, 43, 43, 43, 181, 181, 181, 181, 181, 181, 181, 181, + 43, 43, 43, 43, 43, 43, 43, 43, 181, 181, 181, 181, 181, 181, 181, 181, + 43, 43, 43, 43, 43, 43, 43, 43, 181, 181, 181, 181, 181, 181, 181, 181, + 43, 43, 43, 43, 43, 0, 43, 43, 38, 38, 38, 182, 181, 57, 180, 57, 57, 75, + 43, 43, 43, 0, 43, 43, 38, 182, 38, 182, 181, 75, 75, 75, 43, 43, 43, + 180, 0, 0, 43, 43, 38, 38, 38, 182, 0, 75, 75, 75, 43, 43, 43, 180, 43, + 43, 43, 43, 38, 38, 38, 182, 38, 75, 183, 183, 0, 0, 43, 43, 43, 0, 43, + 43, 38, 182, 38, 182, 181, 183, 57, 0, 184, 184, 185, 185, 185, 185, 185, + 185, 185, 185, 185, 131, 131, 131, 173, 186, 187, 188, 83, 187, 187, 187, + 22, 189, 190, 191, 192, 193, 190, 191, 192, 193, 22, 22, 22, 136, 194, + 194, 194, 22, 195, 196, 197, 198, 199, 200, 201, 21, 202, 108, 202, 203, + 204, 22, 189, 189, 136, 29, 36, 22, 189, 136, 194, 205, 205, 136, 136, + 136, 206, 162, 163, 189, 189, 189, 136, 136, 136, 136, 136, 136, 136, + 136, 77, 136, 205, 136, 136, 189, 136, 136, 136, 136, 136, 136, 136, 185, + 131, 131, 131, 131, 131, 0, 0, 0, 0, 0, 131, 131, 131, 131, 131, 131, + 207, 50, 0, 0, 34, 207, 207, 207, 207, 207, 208, 208, 209, 210, 211, 212, + 207, 34, 34, 34, 34, 207, 207, 207, 207, 207, 208, 208, 209, 210, 211, 0, + 50, 50, 50, 50, 50, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 146, 146, 146, 146, + 146, 146, 146, 146, 213, 214, 146, 146, 23, 146, 146, 146, 146, 146, 146, + 146, 146, 146, 146, 146, 146, 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, 175, 175, 80, 80, 80, 80, 175, 175, + 175, 80, 80, 81, 81, 81, 81, 80, 81, 81, 81, 175, 175, 80, 84, 80, 175, + 175, 84, 84, 84, 84, 80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 215, 215, 48, 216, 27, 216, 215, 48, 27, 216, 35, 48, 48, 48, 35, 35, 48, + 48, 48, 28, 27, 48, 216, 27, 27, 48, 48, 48, 48, 48, 27, 27, 215, 216, + 216, 27, 48, 27, 217, 27, 48, 27, 182, 217, 48, 48, 218, 35, 48, 48, 44, + 48, 35, 155, 155, 155, 155, 35, 27, 215, 35, 35, 48, 48, 219, 77, 77, 77, + 77, 48, 35, 35, 35, 35, 27, 77, 27, 27, 46, 79, 220, 220, 220, 37, 37, + 220, 220, 220, 220, 220, 220, 37, 37, 37, 37, 220, 221, 221, 221, 221, + 221, 221, 221, 221, 221, 221, 221, 221, 222, 222, 222, 222, 221, 221, + 221, 221, 221, 221, 221, 221, 221, 221, 222, 222, 222, 222, 222, 222, + 172, 172, 172, 44, 46, 172, 172, 172, 172, 37, 0, 0, 0, 0, 0, 0, 40, 40, + 40, 40, 40, 25, 25, 25, 25, 25, 223, 223, 27, 27, 27, 27, 77, 27, 27, 77, + 27, 27, 77, 27, 27, 27, 27, 27, 27, 27, 223, 27, 27, 27, 27, 27, 27, 27, + 27, 27, 25, 25, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, + 27, 27, 27, 27, 27, 224, 223, 223, 27, 27, 40, 27, 40, 27, 27, 27, 27, + 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 25, 27, 27, 27, + 27, 27, 27, 27, 27, 27, 27, 27, 27, 77, 77, 77, 77, 77, 77, 77, 77, 77, + 77, 77, 77, 40, 225, 226, 226, 227, 77, 77, 40, 226, 227, 225, 226, 227, + 225, 77, 40, 77, 226, 228, 229, 77, 226, 225, 77, 77, 77, 226, 225, 225, + 226, 40, 226, 226, 225, 225, 40, 227, 40, 227, 40, 40, 40, 40, 226, 230, + 219, 226, 219, 219, 225, 225, 225, 40, 40, 40, 40, 77, 225, 77, 225, 226, + 226, 225, 225, 225, 227, 225, 225, 227, 225, 225, 227, 226, 227, 225, + 225, 226, 77, 77, 77, 77, 77, 226, 225, 225, 225, 77, 77, 77, 77, 77, 77, + 77, 77, 77, 225, 231, 40, 227, 77, 226, 226, 226, 226, 225, 225, 226, + 226, 77, 223, 231, 231, 227, 227, 225, 225, 227, 227, 225, 225, 227, 227, + 225, 225, 225, 225, 225, 225, 227, 227, 226, 226, 227, 227, 226, 226, + 227, 227, 225, 225, 225, 77, 77, 225, 225, 225, 225, 77, 77, 40, 77, 77, + 225, 40, 77, 77, 77, 77, 77, 77, 77, 77, 225, 225, 77, 40, 225, 225, 225, + 225, 225, 225, 227, 227, 227, 227, 225, 225, 225, 225, 225, 225, 225, + 225, 225, 77, 77, 77, 77, 77, 225, 226, 77, 77, 77, 77, 77, 77, 77, 77, + 77, 225, 225, 225, 225, 225, 77, 77, 225, 225, 77, 77, 77, 77, 225, 225, + 225, 225, 225, 225, 225, 225, 225, 225, 227, 227, 227, 227, 225, 225, + 225, 225, 225, 225, 227, 227, 227, 227, 77, 77, 225, 225, 225, 225, 225, + 225, 225, 225, 225, 225, 225, 225, 225, 225, 225, 225, 27, 27, 27, 27, + 27, 27, 27, 27, 225, 225, 225, 225, 27, 27, 27, 27, 27, 27, 25, 27, 27, + 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 225, 225, 27, 27, 27, 27, 27, + 27, 27, 232, 233, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 79, 79, 79, + 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, + 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, + 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, + 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 27, 77, 27, 27, 27, 27, + 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, + 27, 27, 79, 27, 27, 27, 27, 27, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, + 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 27, 27, 27, + 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, + 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, + 27, 77, 77, 77, 77, 77, 77, 27, 27, 27, 27, 27, 27, 27, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 27, 27, 27, 27, 27, + 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, + 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 27, 27, + 27, 27, 27, 27, 27, 27, 27, 27, 27, 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, 34, 34, 34, 34, 34, 34, 34, + 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 234, 234, 234, 234, + 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, + 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, + 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, + 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, + 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, + 234, 234, 234, 234, 220, 235, 235, 235, 235, 235, 235, 235, 235, 235, + 235, 235, 235, 235, 235, 235, 235, 235, 235, 235, 235, 235, 25, 25, 25, + 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, + 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, + 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, + 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, + 25, 27, 27, 27, 27, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, + 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, + 25, 25, 25, 25, 25, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 25, + 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 27, 27, 25, + 25, 25, 25, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 25, 25, 27, 25, 25, + 25, 25, 25, 25, 25, 27, 27, 27, 27, 27, 27, 27, 27, 25, 25, 27, 27, 25, + 40, 27, 27, 27, 27, 25, 25, 27, 27, 25, 40, 27, 27, 27, 27, 25, 25, 25, + 27, 27, 25, 27, 27, 25, 25, 25, 25, 27, 27, 27, 27, 27, 27, 27, 27, 27, + 27, 27, 27, 27, 27, 27, 27, 25, 25, 25, 25, 27, 27, 27, 27, 27, 27, 27, + 27, 27, 25, 27, 27, 27, 27, 27, 27, 27, 27, 77, 77, 77, 77, 77, 77, 77, + 77, 27, 27, 27, 27, 27, 25, 25, 27, 27, 25, 27, 27, 27, 27, 25, 25, 27, + 27, 27, 27, 25, 25, 27, 27, 27, 27, 27, 27, 25, 27, 25, 27, 27, 27, 27, + 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, + 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 25, 27, 25, 27, 27, 27, 27, + 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, + 27, 27, 27, 27, 27, 27, 27, 25, 25, 27, 25, 25, 25, 27, 25, 25, 25, 25, + 27, 25, 25, 27, 40, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, + 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, + 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 25, 25, 27, + 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 79, 27, 27, 27, 27, 27, 27, + 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 25, 25, 27, 27, 27, 27, 25, + 25, 25, 25, 25, 25, 25, 25, 25, 25, 0, 25, 25, 25, 25, 25, 25, 25, 25, + 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 0, 25, 0, 0, 0, 0, 25, 25, + 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, + 25, 25, 25, 25, 0, 27, 27, 27, 27, 0, 27, 27, 27, 27, 0, 0, 27, 27, 27, + 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, + 27, 27, 27, 27, 27, 27, 27, 0, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, + 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 25, 27, 27, 27, 27, 27, 27, 27, + 27, 27, 27, 27, 27, 27, 27, 0, 27, 0, 27, 27, 27, 27, 0, 0, 0, 27, 25, + 27, 27, 27, 27, 27, 27, 27, 0, 0, 27, 27, 27, 27, 27, 27, 27, 162, 163, + 162, 163, 162, 163, 162, 163, 162, 163, 162, 163, 162, 163, 235, 235, + 235, 235, 235, 235, 235, 235, 235, 235, 152, 152, 152, 152, 152, 152, + 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 27, + 0, 0, 0, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, + 27, 27, 27, 27, 27, 27, 27, 27, 0, 27, 27, 27, 27, 27, 27, 27, 27, 27, + 27, 27, 27, 27, 27, 0, 225, 77, 77, 225, 225, 162, 163, 77, 225, 225, 77, + 0, 225, 0, 0, 0, 77, 77, 77, 225, 225, 225, 225, 77, 77, 77, 77, 77, 225, + 225, 225, 77, 77, 77, 225, 225, 225, 225, 9, 10, 9, 10, 9, 10, 9, 10, + 162, 163, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, + 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, + 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, + 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, + 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, + 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, + 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, + 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, + 79, 79, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, + 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, + 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, + 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, + 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, + 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, + 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, + 77, 77, 77, 77, 77, 77, 77, 162, 163, 9, 10, 162, 163, 162, 163, 162, + 163, 162, 163, 162, 163, 162, 163, 162, 163, 162, 163, 162, 163, 77, 77, + 225, 225, 225, 225, 225, 225, 225, 225, 225, 225, 225, 225, 225, 225, + 225, 225, 225, 225, 225, 225, 225, 77, 77, 77, 77, 77, 77, 77, 77, 225, + 77, 77, 77, 77, 77, 77, 77, 225, 225, 225, 225, 225, 225, 77, 77, 77, + 225, 77, 77, 77, 77, 225, 225, 225, 225, 225, 77, 225, 225, 77, 77, 162, + 163, 162, 163, 225, 77, 77, 77, 77, 225, 77, 225, 225, 225, 77, 77, 225, + 225, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 225, 225, 225, 225, 225, + 225, 77, 77, 162, 163, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, + 225, 225, 219, 225, 225, 225, 225, 225, 225, 225, 225, 225, 225, 225, + 225, 225, 225, 225, 225, 77, 225, 225, 225, 225, 77, 77, 225, 77, 225, + 77, 77, 225, 77, 225, 225, 225, 225, 77, 77, 77, 77, 77, 225, 225, 77, + 77, 77, 77, 77, 77, 225, 225, 225, 77, 77, 77, 77, 77, 77, 77, 77, 77, + 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 225, 225, 77, + 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 225, 225, 77, 77, 77, 77, 225, + 225, 225, 225, 77, 225, 225, 77, 77, 225, 219, 209, 209, 77, 77, 225, + 225, 225, 225, 225, 225, 225, 225, 225, 225, 225, 225, 225, 225, 225, + 225, 225, 225, 225, 225, 225, 225, 225, 225, 225, 225, 225, 225, 225, + 225, 225, 225, 225, 225, 225, 225, 225, 225, 225, 225, 225, 225, 225, 77, + 77, 225, 225, 225, 225, 225, 225, 225, 225, 77, 225, 225, 225, 225, 225, + 225, 225, 225, 225, 225, 225, 225, 225, 225, 225, 225, 225, 225, 225, + 225, 225, 225, 225, 225, 225, 225, 225, 225, 225, 225, 225, 225, 225, + 225, 225, 225, 225, 225, 225, 225, 77, 77, 77, 77, 77, 236, 77, 225, 77, + 77, 77, 225, 225, 225, 225, 225, 77, 77, 77, 77, 77, 225, 225, 225, 77, + 77, 77, 77, 225, 77, 77, 77, 225, 225, 225, 225, 225, 77, 225, 77, 77, + 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, + 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, + 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 77, 77, 77, 77, 77, 77, + 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 27, 27, 77, + 77, 77, 77, 77, 77, 0, 0, 0, 27, 27, 27, 27, 27, 25, 25, 25, 25, 25, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, + 44, 44, 44, 0, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, + 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 0, 44, 46, + 44, 44, 44, 46, 46, 44, 46, 44, 46, 44, 46, 44, 44, 44, 44, 46, 44, 46, + 46, 44, 46, 46, 46, 46, 46, 46, 35, 50, 44, 44, 44, 46, 44, 46, 44, 46, + 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, + 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, + 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, + 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, + 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, + 44, 46, 44, 46, 46, 27, 27, 27, 27, 27, 27, 44, 46, 44, 46, 80, 80, 80, + 0, 0, 0, 0, 0, 0, 0, 136, 136, 136, 136, 152, 136, 136, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, - 46, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, + 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 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, 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, 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, 47, 47, 47, 47, 47, 47, 47, 0, 47, 47, 47, 47, 47, 47, 47, + 47, 47, 47, 47, 47, 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, 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, 47, 47, 47, 47, 47, 47, 47, 0, 47, 47, 47, 47, 47, 47, 47, 0, 47, 47, 47, 47, 47, 47, 47, 0, 47, 47, 47, 47, 47, 47, 47, 0, 47, 47, 47, 47, 47, - 47, 47, 0, 47, 47, 47, 47, 47, 47, 47, 0, 80, 80, 80, 80, 80, 80, 80, 80, + 47, 47, 0, 47, 47, 47, 47, 47, 47, 47, 0, 47, 47, 47, 47, 47, 47, 47, 0, + 47, 47, 47, 47, 47, 47, 47, 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, 136, 136, 29, 36, 29, 36, 136, 136, 136, 29, 36, - 136, 29, 36, 136, 136, 136, 136, 136, 136, 136, 136, 136, 83, 136, 136, - 83, 136, 29, 36, 136, 136, 29, 36, 162, 163, 162, 163, 162, 163, 162, - 163, 136, 136, 136, 136, 136, 51, 136, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 236, 236, - 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, - 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 0, 236, 236, 236, 236, - 237, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, - 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, - 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, - 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, - 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, - 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, - 237, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 237, 237, 237, 237, 237, 237, - 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, - 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, - 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, - 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, - 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, - 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, + 80, 80, 80, 80, 136, 136, 29, 36, 29, 36, 136, 136, 136, 29, 36, 136, 29, + 36, 136, 136, 136, 136, 136, 136, 136, 136, 136, 83, 136, 136, 83, 136, + 29, 36, 136, 136, 29, 36, 162, 163, 162, 163, 162, 163, 162, 163, 136, + 136, 136, 136, 136, 51, 136, 136, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, + 237, 237, 237, 237, 237, 237, 237, 237, 0, 237, 237, 237, 237, 238, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, + 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 238, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 238, 238, 238, 238, 238, 238, 238, 238, 238, + 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, + 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, + 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, + 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, + 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, + 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, + 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, + 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, + 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, + 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, + 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, + 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, + 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, + 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, + 238, 238, 238, 238, 238, 238, 238, 238, 238, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 237, 237, 237, 237, + 237, 237, 237, 237, 237, 237, 237, 237, 0, 0, 0, 0, 239, 240, 240, 240, + 237, 241, 169, 242, 243, 244, 243, 244, 243, 244, 243, 244, 243, 244, + 237, 237, 243, 244, 243, 244, 243, 244, 243, 244, 245, 246, 247, 247, + 237, 242, 242, 242, 242, 242, 242, 242, 242, 242, 248, 249, 250, 251, + 252, 252, 245, 241, 241, 241, 241, 241, 238, 237, 253, 253, 253, 241, + 169, 240, 237, 27, 0, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, + 169, 254, 169, 254, 169, 254, 169, 254, 169, 254, 169, 254, 169, 254, + 169, 254, 169, 254, 169, 254, 169, 254, 169, 254, 169, 169, 254, 169, + 254, 169, 254, 169, 169, 169, 169, 169, 169, 254, 254, 169, 254, 254, + 169, 254, 254, 169, 254, 254, 169, 254, 254, 169, 169, 169, 169, 169, + 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, + 169, 169, 169, 254, 169, 169, 0, 0, 255, 255, 256, 256, 241, 257, 258, + 245, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 254, 169, + 254, 169, 254, 169, 254, 169, 254, 169, 254, 169, 254, 169, 254, 169, + 254, 169, 254, 169, 254, 169, 254, 169, 169, 254, 169, 254, 169, 254, + 169, 169, 169, 169, 169, 169, 254, 254, 169, 254, 254, 169, 254, 254, + 169, 254, 254, 169, 254, 254, 169, 169, 169, 169, 169, 169, 169, 169, + 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, + 254, 169, 169, 254, 254, 254, 254, 240, 241, 241, 257, 258, 0, 0, 0, 0, + 0, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, + 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, + 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 0, 0, 0, + 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, + 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, + 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, + 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, + 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, + 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, + 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 0, 259, 259, 260, 260, + 260, 260, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 169, 169, + 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, + 169, 169, 169, 169, 169, 169, 169, 169, 0, 0, 0, 0, 0, 0, 0, 0, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, - 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 236, - 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 0, 0, 0, 0, 238, - 239, 239, 239, 236, 240, 169, 241, 242, 243, 242, 243, 242, 243, 242, - 243, 242, 243, 236, 236, 242, 243, 242, 243, 242, 243, 242, 243, 244, - 245, 246, 246, 236, 241, 241, 241, 241, 241, 241, 241, 241, 241, 247, - 248, 249, 250, 251, 251, 244, 240, 240, 240, 240, 240, 237, 236, 252, - 252, 252, 240, 169, 239, 236, 27, 0, 169, 169, 169, 169, 169, 169, 169, - 169, 169, 169, 169, 253, 169, 253, 169, 253, 169, 253, 169, 253, 169, - 253, 169, 253, 169, 253, 169, 253, 169, 253, 169, 253, 169, 253, 169, - 169, 253, 169, 253, 169, 253, 169, 169, 169, 169, 169, 169, 253, 253, - 169, 253, 253, 169, 253, 253, 169, 253, 253, 169, 253, 253, 169, 169, - 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, - 169, 169, 169, 169, 169, 169, 253, 169, 169, 0, 0, 254, 254, 255, 255, - 240, 256, 257, 244, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, - 169, 253, 169, 253, 169, 253, 169, 253, 169, 253, 169, 253, 169, 253, - 169, 253, 169, 253, 169, 253, 169, 253, 169, 253, 169, 169, 253, 169, - 253, 169, 253, 169, 169, 169, 169, 169, 169, 253, 253, 169, 253, 253, - 169, 253, 253, 169, 253, 253, 169, 253, 253, 169, 169, 169, 169, 169, - 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, - 169, 169, 169, 253, 169, 169, 253, 253, 253, 253, 239, 240, 240, 256, - 257, 0, 0, 0, 0, 0, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, - 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, - 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, - 169, 169, 169, 0, 0, 0, 257, 257, 257, 257, 257, 257, 257, 257, 257, 257, - 257, 257, 257, 257, 257, 257, 257, 257, 257, 257, 257, 257, 257, 257, - 257, 257, 257, 257, 257, 257, 257, 257, 257, 257, 257, 257, 257, 257, - 257, 257, 257, 257, 257, 257, 257, 257, 257, 257, 257, 257, 257, 257, - 257, 257, 257, 257, 257, 257, 257, 257, 257, 257, 257, 257, 257, 257, - 257, 257, 257, 257, 257, 257, 257, 257, 257, 257, 257, 257, 257, 257, - 257, 257, 257, 257, 257, 257, 257, 257, 257, 257, 257, 257, 257, 257, 0, - 258, 258, 259, 259, 259, 259, 260, 260, 260, 260, 260, 260, 260, 260, - 260, 260, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, - 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 0, 0, 0, 0, - 0, 0, 0, 0, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, - 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, - 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, - 169, 169, 169, 169, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, - 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, - 260, 260, 260, 260, 260, 237, 237, 0, 259, 259, 259, 259, 259, 259, 259, - 259, 259, 259, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, - 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, - 260, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 237, 261, 261, 261, 261, 261, - 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 260, 260, 260, 260, - 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, - 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 237, 237, 237, 258, - 259, 259, 259, 259, 259, 259, 259, 259, 259, 259, 260, 260, 260, 260, - 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, - 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, - 260, 260, 260, 260, 260, 260, 260, 261, 261, 261, 261, 261, 261, 261, - 261, 261, 261, 261, 261, 261, 261, 261, 260, 260, 260, 260, 260, 260, - 260, 260, 260, 260, 260, 260, 237, 237, 237, 237, 260, 260, 260, 260, - 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, - 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, - 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, - 260, 0, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, - 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, - 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, - 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, - 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, - 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, - 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, - 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, - 260, 260, 260, 260, 260, 260, 260, 260, 237, 237, 237, 237, 260, 260, - 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, - 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, - 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, - 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, - 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, - 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, - 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 237, - 237, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, - 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, - 260, 260, 260, 260, 237, 169, 169, 169, 169, 169, 169, 169, 169, 169, + 237, 237, 237, 237, 237, 237, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, + 169, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, + 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, + 261, 261, 238, 238, 0, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, + 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, + 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, + 261, 261, 262, 262, 262, 262, 262, 262, 262, 262, 238, 263, 263, 263, + 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, 261, 261, + 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, + 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 238, 238, + 238, 259, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 261, 261, + 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, + 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, + 261, 261, 261, 261, 261, 261, 261, 261, 261, 263, 263, 263, 263, 263, + 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, 261, 261, 261, 261, + 261, 261, 261, 261, 261, 261, 261, 261, 238, 238, 238, 238, 261, 261, + 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, + 261, 261, 261, 261, 261, 261, 261, 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, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, + 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, + 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, + 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, + 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, + 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, + 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, + 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, + 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 238, 238, 238, 238, + 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, + 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, + 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, + 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, + 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, + 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, + 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, + 261, 238, 238, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, + 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, + 261, 261, 261, 261, 261, 261, 238, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, @@ -1892,20 +1932,21 @@ 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, - 169, 169, 169, 169, 169, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 27, 27, 27, 27, + 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, + 169, 169, 169, 169, 169, 169, 169, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, - 27, 27, 27, 27, 27, 27, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, + 27, 27, 27, 27, 27, 27, 27, 27, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, - 169, 169, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, - 169, 169, 240, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, + 169, 169, 169, 169, 169, 169, 169, 241, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, @@ -1913,139 +1954,165 @@ 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, - 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 0, 0, 0, 236, 236, 236, - 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, - 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, - 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, - 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 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, 52, 136, 136, 136, 47, - 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 142, 142, - 142, 142, 142, 142, 142, 142, 142, 142, 47, 47, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 44, 46, 44, 46, 44, 46, 44, 46, 44, + 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, + 169, 0, 0, 0, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, + 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, + 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, + 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, + 237, 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, 52, 52, 52, 52, 52, 52, + 82, 82, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 52, 136, 136, + 136, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 142, + 142, 142, 142, 142, 142, 142, 142, 142, 142, 47, 47, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 44, 46, 44, 46, 44, 46, 44, 46, + 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, + 44, 46, 44, 46, 44, 46, 0, 0, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, + 46, 47, 80, 81, 81, 81, 136, 0, 0, 0, 0, 0, 0, 0, 0, 80, 80, 136, 51, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, - 46, 44, 46, 44, 46, 0, 0, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, - 47, 80, 81, 81, 81, 136, 0, 0, 0, 0, 0, 0, 0, 0, 80, 80, 136, 51, 44, 46, + 46, 44, 46, 44, 46, 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, 172, 172, 172, 172, 172, 172, 172, + 172, 172, 172, 80, 80, 82, 82, 82, 82, 82, 82, 0, 0, 0, 0, 0, 0, 0, 0, + 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, + 53, 53, 53, 53, 53, 51, 51, 51, 51, 51, 51, 51, 51, 51, 53, 53, 44, 46, + 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 46, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, - 44, 46, 44, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 53, 53, 53, 53, 53, 53, 53, 53, - 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 51, 51, 51, - 51, 51, 51, 51, 51, 51, 53, 53, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, - 44, 46, 44, 46, 46, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, - 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 50, 46, 46, 46, - 46, 46, 46, 46, 46, 44, 46, 44, 46, 44, 44, 46, 44, 46, 44, 46, 44, 46, - 44, 46, 51, 262, 262, 44, 46, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 44, 46, 44, 46, 50, 46, 46, 46, 46, 46, 46, 46, 46, 44, 46, 44, 46, 44, + 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 51, 264, 264, 44, 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, 0, 0, 0, 0, 0, 0, 0, 0, - 47, 47, 47, 47, 47, 47, 47, 133, 47, 47, 47, 140, 47, 47, 47, 47, 133, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 47, 47, 47, 47, 47, 47, 47, 133, 47, 47, + 47, 140, 47, 47, 47, 47, 133, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, + 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 137, 137, 133, 133, 137, + 27, 27, 27, 27, 0, 0, 0, 0, 147, 147, 147, 147, 147, 147, 79, 79, 146, + 218, 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, 137, 137, 133, 133, 137, 27, 27, 27, 27, 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, 136, 136, 136, 136, 0, 0, 0, 0, 0, 0, 0, 0, 137, 137, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, - 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 136, 136, 136, 136, 0, 0, 0, 0, - 0, 0, 0, 0, 137, 137, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, + 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 137, 137, 137, 137, + 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 140, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 82, 82, 142, 142, 142, 142, 142, 142, 142, 142, 142, + 142, 0, 0, 0, 0, 0, 0, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, + 80, 80, 80, 80, 80, 80, 47, 47, 47, 47, 47, 47, 82, 82, 82, 47, 0, 0, 0, + 0, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, - 47, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, - 137, 137, 140, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 82, 142, 142, 142, 142, - 142, 142, 142, 142, 142, 142, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 47, 47, 47, 47, 47, 47, + 47, 47, 47, 47, 47, 133, 133, 133, 133, 133, 84, 84, 84, 82, 82, 47, 47, + 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, + 47, 47, 47, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 137, + 174, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 169, 169, 169, 169, 169, 169, + 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, + 169, 169, 169, 169, 169, 169, 169, 169, 169, 0, 0, 0, 133, 133, 133, 137, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, - 47, 47, 47, 47, 133, 133, 133, 133, 133, 84, 84, 84, 82, 82, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, - 47, 47, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 137, 174, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 47, 47, 47, + 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 143, 137, 137, 133, 133, 133, + 133, 137, 137, 133, 137, 137, 137, 174, 82, 82, 82, 82, 82, 82, 82, 82, + 82, 82, 82, 82, 82, 0, 52, 142, 142, 142, 142, 142, 142, 142, 142, 142, + 142, 0, 0, 0, 0, 82, 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, 47, 47, 47, 47, 47, 47, + 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, + 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 133, + 133, 133, 133, 133, 133, 137, 137, 133, 133, 137, 137, 133, 133, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 47, 47, 47, 133, 47, 47, 47, 47, 47, 47, 47, 47, 133, + 137, 0, 0, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 0, 0, 82, + 82, 82, 82, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, + 47, 52, 47, 47, 47, 47, 47, 47, 79, 79, 79, 47, 137, 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, 133, 133, 133, 133, 133, 133, 137, 137, 133, 133, 137, 137, 133, - 133, 0, 0, 0, 0, 0, 0, 0, 0, 0, 47, 47, 47, 133, 47, 47, 47, 47, 47, 47, - 47, 47, 133, 137, 0, 0, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, - 0, 0, 82, 82, 82, 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, 253, 253, 253, 253, 253, - 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, - 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, - 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, - 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, - 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, - 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, - 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, - 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, - 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, - 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, - 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, - 253, 253, 253, 253, 253, 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, 80, 47, 80, 80, 84, 47, 47, 80, + 80, 47, 47, 47, 47, 47, 80, 80, 47, 80, 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, 47, 47, 52, 82, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, - 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, - 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, - 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, - 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, - 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, - 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, - 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, - 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, - 264, 264, 264, 264, 264, 264, 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, 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, 169, 169, 265, 169, 265, 169, - 169, 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, 169, 265, 169, - 265, 169, 169, 265, 265, 169, 169, 169, 265, 265, 265, 265, 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, + 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, 137, 137, 133, + 137, 137, 133, 137, 137, 82, 137, 140, 0, 0, 142, 142, 142, 142, 142, + 142, 142, 142, 142, 142, 0, 0, 0, 0, 0, 0, 254, 254, 254, 254, 254, 254, + 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, + 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, + 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, + 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, + 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, + 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, + 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, + 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, + 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, + 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, + 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, + 254, 254, 254, 254, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 169, 169, 169, + 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, + 169, 169, 169, 169, 169, 169, 0, 0, 0, 0, 169, 169, 169, 169, 169, 169, + 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, + 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, + 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, + 169, 0, 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, 0, 0, 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, 265, 265, 265, 265, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 266, 267, 266, - 268, 268, 268, 268, 268, 268, 268, 268, 268, 207, 266, 266, 266, 266, - 266, 266, 266, 266, 266, 266, 266, 266, 266, 0, 266, 266, 266, 266, 266, - 0, 266, 0, 266, 266, 0, 266, 266, 0, 266, 266, 266, 266, 266, 266, 266, - 266, 266, 268, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, + 265, 265, 265, 265, 265, 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, 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, 267, 267, 267, 267, 267, 267, 267, + 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, + 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, + 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, + 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, + 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, + 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, + 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, + 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, + 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, + 267, 267, 267, 267, 267, 267, 267, 267, 267, 169, 169, 267, 169, 267, + 169, 169, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 169, 267, + 169, 267, 169, 169, 267, 267, 169, 169, 169, 267, 267, 267, 267, 0, 0, + 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, + 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, + 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, + 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, + 267, 267, 267, 267, 267, 267, 0, 0, 267, 267, 267, 267, 267, 267, 267, + 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, + 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, + 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, + 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, + 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, + 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, + 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, + 267, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, + 268, 269, 268, 270, 270, 270, 270, 270, 270, 270, 270, 270, 208, 268, + 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 0, 268, 268, + 268, 268, 268, 0, 268, 0, 268, 268, 0, 268, 268, 0, 268, 268, 268, 268, + 268, 268, 268, 268, 268, 270, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, - 128, 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 128, 128, 128, + 128, 128, 128, 128, 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, @@ -2062,26 +2129,26 @@ 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, - 128, 128, 128, 128, 128, 191, 269, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 128, 128, 128, 128, 128, 128, 192, 271, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, - 128, 128, 128, 128, 128, 128, 128, 128, 128, 0, 0, 128, 128, 128, 128, + 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 0, 0, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, - 128, 128, 128, 128, 128, 128, 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, - 128, 270, 27, 0, 0, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, - 70, 70, 70, 271, 271, 271, 271, 271, 271, 271, 272, 273, 271, 0, 0, 0, 0, - 0, 0, 80, 80, 80, 80, 80, 80, 80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 271, 274, - 274, 275, 275, 272, 273, 272, 273, 272, 273, 272, 273, 272, 273, 272, - 273, 272, 273, 272, 273, 239, 239, 272, 273, 271, 271, 271, 271, 275, - 275, 275, 276, 271, 276, 0, 271, 276, 271, 271, 274, 277, 278, 277, 278, - 277, 278, 279, 271, 271, 280, 281, 282, 282, 283, 0, 271, 284, 279, 271, - 0, 0, 0, 0, 128, 128, 128, 115, 128, 0, 128, 128, 128, 128, 128, 128, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 128, 128, 272, 27, 0, 0, 70, 70, 70, 70, 70, 70, 70, 70, 70, + 70, 70, 70, 70, 70, 70, 70, 273, 273, 273, 273, 273, 273, 273, 274, 275, + 273, 0, 0, 0, 0, 0, 0, 80, 80, 80, 80, 80, 80, 80, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 273, 276, 276, 277, 277, 274, 275, 274, 275, 274, 275, 274, 275, + 274, 275, 274, 275, 274, 275, 274, 275, 240, 240, 274, 275, 273, 273, + 273, 273, 277, 277, 277, 278, 273, 278, 0, 273, 278, 273, 273, 276, 279, + 280, 279, 280, 279, 280, 281, 273, 273, 282, 283, 284, 284, 285, 0, 273, + 286, 281, 273, 0, 0, 0, 0, 128, 128, 128, 115, 128, 0, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, @@ -2091,173 +2158,210 @@ 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, - 128, 128, 128, 0, 0, 131, 0, 285, 285, 286, 287, 286, 285, 285, 288, 289, - 285, 290, 291, 292, 291, 291, 293, 293, 293, 293, 293, 293, 293, 293, - 293, 293, 291, 285, 294, 295, 294, 285, 285, 296, 296, 296, 296, 296, - 296, 296, 296, 296, 296, 296, 296, 296, 296, 296, 296, 296, 296, 296, - 296, 296, 296, 296, 296, 296, 296, 288, 285, 289, 297, 298, 297, 299, - 299, 299, 299, 299, 299, 299, 299, 299, 299, 299, 299, 299, 299, 299, - 299, 299, 299, 299, 299, 299, 299, 299, 299, 299, 299, 288, 295, 289, - 295, 288, 289, 300, 301, 302, 300, 300, 303, 303, 303, 303, 303, 303, - 303, 303, 303, 303, 304, 303, 303, 303, 303, 303, 303, 303, 303, 303, - 303, 303, 303, 303, 303, 303, 303, 303, 303, 303, 303, 303, 303, 303, - 303, 303, 303, 303, 303, 303, 303, 303, 303, 303, 303, 303, 303, 303, - 303, 303, 303, 303, 303, 303, 303, 303, 304, 304, 303, 303, 303, 303, - 303, 303, 303, 303, 303, 303, 303, 303, 303, 303, 303, 303, 303, 303, - 303, 303, 303, 303, 303, 303, 303, 303, 303, 303, 303, 303, 303, 0, 0, 0, - 303, 303, 303, 303, 303, 303, 0, 0, 303, 303, 303, 303, 303, 303, 0, 0, - 303, 303, 303, 303, 303, 303, 0, 0, 303, 303, 303, 0, 0, 0, 287, 287, - 295, 297, 305, 287, 287, 0, 306, 307, 307, 307, 307, 306, 306, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 308, 308, 308, 27, 25, 0, 0, 47, 47, 47, 47, 47, 47, - 47, 47, 47, 47, 47, 47, 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, 0, 47, 47, - 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 0, - 47, 47, 0, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 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, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, + 128, 128, 128, 128, 128, 128, 0, 0, 131, 0, 287, 287, 288, 289, 288, 287, + 287, 290, 291, 287, 292, 293, 294, 293, 293, 295, 295, 295, 295, 295, + 295, 295, 295, 295, 295, 293, 287, 296, 297, 296, 287, 287, 298, 298, + 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, + 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, 290, 287, 291, 299, + 300, 299, 301, 301, 301, 301, 301, 301, 301, 301, 301, 301, 301, 301, + 301, 301, 301, 301, 301, 301, 301, 301, 301, 301, 301, 301, 301, 301, + 290, 297, 291, 297, 290, 291, 302, 303, 304, 302, 302, 305, 305, 305, + 305, 305, 305, 305, 305, 305, 305, 306, 305, 305, 305, 305, 305, 305, + 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, + 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, + 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 306, 306, 305, + 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, + 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, + 305, 305, 0, 0, 0, 305, 305, 305, 305, 305, 305, 0, 0, 305, 305, 305, + 305, 305, 305, 0, 0, 305, 305, 305, 305, 305, 305, 0, 0, 305, 305, 305, + 0, 0, 0, 289, 289, 297, 299, 307, 289, 289, 0, 308, 309, 309, 309, 309, + 308, 308, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 310, 310, 310, 27, 25, 0, 0, 47, + 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 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, 0, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, + 47, 47, 47, 47, 0, 47, 47, 0, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, + 47, 47, 47, 47, 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, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 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, 82, 136, 79, 0, 0, 0, 0, 147, 147, 147, 147, 147, 147, + 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, 82, 136, 79, 0, 0, 0, 0, 147, 147, + 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, - 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 0, 0, 0, 79, 79, - 79, 79, 79, 79, 79, 79, 79, 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, 309, 309, 309, - 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, - 309, 309, 152, 152, 152, 152, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, - 27, 27, 27, 27, 27, 27, 152, 0, 0, 0, 0, 0, 27, 27, 27, 27, 27, 27, 27, - 27, 27, 27, 27, 27, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 147, 0, 0, 0, 79, 79, 79, 79, 79, 79, 79, 79, 79, 311, 311, 311, 311, + 311, 311, 311, 311, 311, 311, 311, 311, 311, 311, 311, 311, 311, 311, + 311, 311, 311, 311, 311, 311, 311, 311, 311, 311, 311, 311, 311, 311, + 311, 311, 311, 311, 311, 311, 311, 311, 311, 311, 311, 311, 311, 311, + 311, 311, 311, 311, 311, 311, 311, 152, 152, 152, 152, 27, 27, 27, 27, + 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 152, 0, 0, 0, 0, 0, + 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, - 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 84, 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, 0, 0, 0, 47, 47, 47, 47, 47, + 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, + 79, 79, 79, 79, 79, 79, 84, 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, 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, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, + 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, 0, 147, 147, 147, 147, 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, 172, 47, - 47, 47, 47, 47, 47, 47, 47, 172, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 0, 147, 147, 147, 147, 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, 172, 47, 47, 47, 47, 47, 47, 47, 47, 172, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 82, 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, 47, 47, 47, 47, 47, 47, 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, 82, 47, 47, 47, 47, 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, 47, 47, 47, 47, 47, 47, 47, - 47, 82, 172, 172, 172, 172, 172, 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, 0, 0, 0, + 0, 47, 47, 47, 47, 47, 47, 47, 47, 82, 172, 172, 172, 172, 172, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, + 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, - 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 47, 47, 47, 47, 47, 47, - 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, + 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, + 46, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 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, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 0, 0, 0, 0, 0, 0, - 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, 0, 0, 142, 142, 142, 142, 142, 142, 142, 142, + 142, 142, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 105, 105, 105, 105, 105, 105, 0, 0, 105, 0, 105, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 105, 105, 105, 105, + 105, 105, 0, 0, 105, 0, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, + 105, 105, 105, 105, 105, 105, 0, 105, 105, 0, 0, 0, 105, 0, 0, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, - 105, 0, 105, 105, 0, 0, 0, 105, 0, 0, 105, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 105, 105, 105, 105, 105, 105, 105, 0, 102, 312, 312, 312, 312, 312, 312, + 312, 312, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 105, 105, 105, 105, 105, 105, 105, 105, + 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, + 312, 312, 312, 312, 312, 312, 0, 0, 0, 136, 105, 105, 105, 105, 105, 105, + 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, + 105, 105, 105, 105, 105, 105, 0, 0, 0, 0, 0, 102, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, - 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 310, 310, 310, - 310, 0, 0, 0, 0, 0, 136, 105, 105, 105, 105, 105, 105, 105, 105, 105, + 0, 0, 0, 0, 0, 0, 0, 0, 105, 133, 133, 133, 0, 133, 133, 0, 0, 0, 0, 0, + 133, 84, 133, 80, 105, 105, 105, 105, 0, 105, 105, 105, 0, 105, 105, 105, + 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, + 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 0, 0, 0, 0, 80, 175, + 84, 0, 0, 0, 0, 140, 312, 312, 312, 312, 312, 312, 312, 312, 0, 0, 0, 0, + 0, 0, 0, 0, 102, 102, 102, 102, 102, 102, 102, 102, 102, 0, 0, 0, 0, 0, + 0, 0, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, + 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, + 105, 105, 312, 312, 102, 105, 105, 105, 105, 105, 105, 105, 105, 105, + 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, + 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, + 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, + 105, 105, 105, 0, 0, 0, 136, 136, 136, 136, 136, 136, 136, 105, 105, 105, + 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, + 105, 105, 105, 105, 105, 0, 0, 312, 312, 312, 312, 312, 312, 312, 312, + 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, + 105, 105, 105, 105, 105, 0, 0, 0, 0, 0, 312, 312, 312, 312, 312, 312, + 312, 312, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, + 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, + 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, + 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, - 105, 105, 105, 0, 0, 0, 0, 0, 102, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 105, 105, 105, 105, 105, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 105, 133, 133, 133, 0, 133, 133, 0, 0, 0, 0, 0, 133, 84, 133, - 80, 105, 105, 105, 105, 0, 105, 105, 105, 0, 105, 105, 105, 105, 105, - 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, - 105, 105, 105, 105, 105, 105, 105, 105, 0, 0, 0, 0, 80, 213, 84, 0, 0, 0, - 0, 140, 310, 310, 310, 310, 310, 310, 310, 310, 0, 0, 0, 0, 0, 0, 0, 0, - 102, 102, 102, 102, 102, 102, 102, 102, 102, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 133, 133, + 137, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, + 47, 47, 47, 47, 47, 47, 138, 47, 138, 47, 47, 47, 47, 47, 47, 47, 47, 47, + 47, 47, 47, 47, 47, 138, 47, 47, 47, 47, 137, 137, 137, 133, 133, 133, + 133, 137, 137, 140, 139, 82, 82, 173, 82, 82, 82, 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, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 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, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, + 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, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, - 172, 172, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 82, 82, 82, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, + 172, 172, 172, 172, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 82, 82, + 82, 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, 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, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, - 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, - 79, 79, 79, 79, 79, 79, 79, 79, 79, 0, 0, 79, 79, 79, 79, 79, 79, 79, 79, + 79, 79, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, + 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 0, 0, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, - 79, 79, 79, 79, 79, 79, 79, 79, 79, 311, 311, 311, 311, 311, 311, 311, - 312, 312, 213, 213, 213, 79, 79, 79, 313, 312, 312, 312, 312, 312, 131, - 131, 131, 131, 131, 131, 131, 131, 84, 84, 84, 84, 84, 84, 84, 84, 79, - 79, 80, 80, 80, 80, 80, 84, 84, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, - 79, 79, 80, 80, 80, 80, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, - 79, 311, 311, 311, 311, 311, 311, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, + 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 314, 314, 314, 314, 314, + 314, 314, 315, 315, 175, 175, 175, 79, 79, 79, 316, 315, 315, 315, 315, + 315, 131, 131, 131, 131, 131, 131, 131, 131, 84, 84, 84, 84, 84, 84, 84, + 84, 79, 79, 80, 80, 80, 80, 80, 84, 84, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, - 79, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, + 79, 79, 79, 79, 80, 80, 80, 80, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, + 79, 79, 79, 314, 314, 314, 314, 314, 314, 79, 79, 79, 79, 79, 79, 79, 79, + 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, + 79, 79, 79, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, - 27, 27, 80, 80, 80, 27, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 27, 27, 27, 27, 80, 80, 80, 27, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 27, 27, 27, 27, 27, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, - 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 0, 0, 0, 0, 0, 0, 0, 0, 0, 147, - 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, - 147, 147, 147, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, 48, 48, 48, + 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, + 147, 147, 147, 147, 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, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, - 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, + 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, - 48, 48, 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, 48, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 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, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, + 48, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, + 35, 35, 35, 35, 35, 35, 35, 35, 35, 48, 0, 48, 48, 0, 0, 48, 0, 0, 48, + 48, 0, 0, 48, 48, 48, 48, 0, 48, 48, 48, 48, 48, 48, 48, 48, 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, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, - 35, 35, 35, 35, 35, 35, 35, 35, 48, 0, 48, 48, 0, 0, 48, 0, 0, 48, 48, 0, - 0, 48, 48, 48, 48, 0, 48, 48, 48, 48, 48, 48, 48, 48, 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, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, - 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 35, 35, 35, 35, 35, 35, 35, 35, - 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, - 48, 48, 0, 48, 48, 48, 48, 0, 0, 48, 48, 48, 48, 48, 48, 48, 48, 0, 48, - 48, 48, 48, 48, 48, 48, 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, 48, 48, 0, - 48, 48, 48, 48, 0, 48, 48, 48, 48, 48, 0, 48, 0, 0, 0, 48, 48, 48, 48, + 35, 35, 48, 48, 0, 48, 48, 48, 48, 0, 0, 48, 48, 48, 48, 48, 48, 48, 48, + 0, 48, 48, 48, 48, 48, 48, 48, 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, 48, 48, + 0, 48, 48, 48, 48, 0, 48, 48, 48, 48, 48, 0, 48, 0, 0, 0, 48, 48, 48, 48, 48, 48, 48, 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, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, @@ -2278,25 +2382,25 @@ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 35, 35, 35, 35, 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, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, - 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 314, 35, 35, 35, 35, 35, 35, 35, + 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 317, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, - 315, 35, 35, 35, 35, 35, 35, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, - 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 314, 35, 35, 35, + 219, 35, 35, 35, 35, 35, 35, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 317, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, - 35, 35, 35, 35, 315, 35, 35, 35, 35, 35, 35, 48, 48, 48, 48, 48, 48, 48, + 35, 35, 35, 35, 219, 35, 35, 35, 35, 35, 35, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, - 314, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, - 35, 35, 35, 35, 35, 35, 35, 35, 315, 35, 35, 35, 35, 35, 35, 48, 48, 48, + 317, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, + 35, 35, 35, 35, 35, 35, 35, 35, 219, 35, 35, 35, 35, 35, 35, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, - 48, 48, 48, 48, 314, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, - 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 315, 35, 35, 35, 35, 35, + 48, 48, 48, 48, 317, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, + 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 219, 35, 35, 35, 35, 35, 35, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, - 48, 48, 48, 48, 48, 48, 48, 48, 314, 35, 35, 35, 35, 35, 35, 35, 35, 35, - 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 315, 35, - 35, 35, 35, 35, 35, 48, 35, 0, 0, 316, 316, 316, 316, 316, 316, 316, 316, - 316, 316, 316, 316, 316, 316, 316, 316, 316, 316, 316, 316, 316, 316, - 316, 316, 316, 316, 316, 316, 316, 316, 316, 316, 316, 316, 316, 316, - 316, 316, 316, 316, 316, 316, 316, 316, 316, 316, 316, 316, 316, 316, 27, + 48, 48, 48, 48, 48, 48, 48, 48, 317, 35, 35, 35, 35, 35, 35, 35, 35, 35, + 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 219, 35, + 35, 35, 35, 35, 35, 48, 35, 0, 0, 318, 318, 318, 318, 318, 318, 318, 318, + 318, 318, 318, 318, 318, 318, 318, 318, 318, 318, 318, 318, 318, 318, + 318, 318, 318, 318, 318, 318, 318, 318, 318, 318, 318, 318, 318, 318, + 318, 318, 318, 318, 318, 318, 318, 318, 318, 318, 318, 318, 318, 318, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 0, 0, 0, 0, 27, 27, 27, 27, 27, 27, 27, 27, @@ -2309,29 +2413,55 @@ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 169, 169, 169, 169, 169, 169, + 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, 234, 234, 234, 234, 234, 234, 234, 234, 234, + 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, + 234, 234, 234, 234, 234, 234, 234, 319, 0, 0, 234, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 234, 0, 234, 0, 0, 234, 0, 0, 0, 234, 0, 0, 0, 234, 234, 234, + 234, 234, 0, 0, 0, 0, 0, 0, 0, 0, 262, 0, 0, 0, 0, 0, 0, 0, 262, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 262, 0, + 262, 262, 0, 0, 262, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 262, 262, 262, 262, 0, + 0, 234, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 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, 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, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 261, 261, 261, 261, 261, 261, 261, 261, 261, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, - 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 0, 0, 0, 0, 0, 0, + 169, 169, 169, 169, 169, 169, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, + 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, + 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, + 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 267, + 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, + 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, + 267, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 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, + 0, 0, 0, 0, 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, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, - 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 70, 70, 70, 70, + 131, 131, 131, 131, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, @@ -2344,17 +2474,17 @@ 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, - 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, - 70, 70, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 264, 264, 264, - 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, - 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, - 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, - 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, - 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, - 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, - 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, - 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, - 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 0, 0, + 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 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, 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, 0, }; /* decomposition data */ @@ -2591,552 +2721,555 @@ 69, 262, 70, 262, 77, 262, 111, 258, 1488, 258, 1489, 258, 1490, 258, 1491, 262, 105, 770, 70, 65, 88, 262, 960, 262, 947, 262, 915, 262, 928, 262, 8721, 262, 68, 262, 100, 262, 101, 262, 105, 262, 106, 772, 49, - 8260, 51, 772, 50, 8260, 51, 772, 49, 8260, 53, 772, 50, 8260, 53, 772, - 51, 8260, 53, 772, 52, 8260, 53, 772, 49, 8260, 54, 772, 53, 8260, 54, - 772, 49, 8260, 56, 772, 51, 8260, 56, 772, 53, 8260, 56, 772, 55, 8260, - 56, 516, 49, 8260, 258, 73, 514, 73, 73, 770, 73, 73, 73, 514, 73, 86, - 258, 86, 514, 86, 73, 770, 86, 73, 73, 1026, 86, 73, 73, 73, 514, 73, 88, - 258, 88, 514, 88, 73, 770, 88, 73, 73, 258, 76, 258, 67, 258, 68, 258, - 77, 258, 105, 514, 105, 105, 770, 105, 105, 105, 514, 105, 118, 258, 118, - 514, 118, 105, 770, 118, 105, 105, 1026, 118, 105, 105, 105, 514, 105, - 120, 258, 120, 514, 120, 105, 770, 120, 105, 105, 258, 108, 258, 99, 258, - 100, 258, 109, 512, 8592, 824, 512, 8594, 824, 512, 8596, 824, 512, 8656, - 824, 512, 8660, 824, 512, 8658, 824, 512, 8707, 824, 512, 8712, 824, 512, - 8715, 824, 512, 8739, 824, 512, 8741, 824, 514, 8747, 8747, 770, 8747, - 8747, 8747, 514, 8750, 8750, 770, 8750, 8750, 8750, 512, 8764, 824, 512, - 8771, 824, 512, 8773, 824, 512, 8776, 824, 512, 61, 824, 512, 8801, 824, - 512, 8781, 824, 512, 60, 824, 512, 62, 824, 512, 8804, 824, 512, 8805, - 824, 512, 8818, 824, 512, 8819, 824, 512, 8822, 824, 512, 8823, 824, 512, - 8826, 824, 512, 8827, 824, 512, 8834, 824, 512, 8835, 824, 512, 8838, - 824, 512, 8839, 824, 512, 8866, 824, 512, 8872, 824, 512, 8873, 824, 512, - 8875, 824, 512, 8828, 824, 512, 8829, 824, 512, 8849, 824, 512, 8850, - 824, 512, 8882, 824, 512, 8883, 824, 512, 8884, 824, 512, 8885, 824, 256, - 12296, 256, 12297, 263, 49, 263, 50, 263, 51, 263, 52, 263, 53, 263, 54, - 263, 55, 263, 56, 263, 57, 519, 49, 48, 519, 49, 49, 519, 49, 50, 519, - 49, 51, 519, 49, 52, 519, 49, 53, 519, 49, 54, 519, 49, 55, 519, 49, 56, - 519, 49, 57, 519, 50, 48, 770, 40, 49, 41, 770, 40, 50, 41, 770, 40, 51, - 41, 770, 40, 52, 41, 770, 40, 53, 41, 770, 40, 54, 41, 770, 40, 55, 41, - 770, 40, 56, 41, 770, 40, 57, 41, 1026, 40, 49, 48, 41, 1026, 40, 49, 49, - 41, 1026, 40, 49, 50, 41, 1026, 40, 49, 51, 41, 1026, 40, 49, 52, 41, - 1026, 40, 49, 53, 41, 1026, 40, 49, 54, 41, 1026, 40, 49, 55, 41, 1026, - 40, 49, 56, 41, 1026, 40, 49, 57, 41, 1026, 40, 50, 48, 41, 514, 49, 46, - 514, 50, 46, 514, 51, 46, 514, 52, 46, 514, 53, 46, 514, 54, 46, 514, 55, - 46, 514, 56, 46, 514, 57, 46, 770, 49, 48, 46, 770, 49, 49, 46, 770, 49, - 50, 46, 770, 49, 51, 46, 770, 49, 52, 46, 770, 49, 53, 46, 770, 49, 54, - 46, 770, 49, 55, 46, 770, 49, 56, 46, 770, 49, 57, 46, 770, 50, 48, 46, - 770, 40, 97, 41, 770, 40, 98, 41, 770, 40, 99, 41, 770, 40, 100, 41, 770, - 40, 101, 41, 770, 40, 102, 41, 770, 40, 103, 41, 770, 40, 104, 41, 770, - 40, 105, 41, 770, 40, 106, 41, 770, 40, 107, 41, 770, 40, 108, 41, 770, - 40, 109, 41, 770, 40, 110, 41, 770, 40, 111, 41, 770, 40, 112, 41, 770, - 40, 113, 41, 770, 40, 114, 41, 770, 40, 115, 41, 770, 40, 116, 41, 770, - 40, 117, 41, 770, 40, 118, 41, 770, 40, 119, 41, 770, 40, 120, 41, 770, - 40, 121, 41, 770, 40, 122, 41, 263, 65, 263, 66, 263, 67, 263, 68, 263, - 69, 263, 70, 263, 71, 263, 72, 263, 73, 263, 74, 263, 75, 263, 76, 263, - 77, 263, 78, 263, 79, 263, 80, 263, 81, 263, 82, 263, 83, 263, 84, 263, - 85, 263, 86, 263, 87, 263, 88, 263, 89, 263, 90, 263, 97, 263, 98, 263, - 99, 263, 100, 263, 101, 263, 102, 263, 103, 263, 104, 263, 105, 263, 106, - 263, 107, 263, 108, 263, 109, 263, 110, 263, 111, 263, 112, 263, 113, - 263, 114, 263, 115, 263, 116, 263, 117, 263, 118, 263, 119, 263, 120, - 263, 121, 263, 122, 263, 48, 1026, 8747, 8747, 8747, 8747, 770, 58, 58, - 61, 514, 61, 61, 770, 61, 61, 61, 512, 10973, 824, 261, 106, 259, 86, - 259, 11617, 258, 27597, 258, 40863, 258, 19968, 258, 20008, 258, 20022, - 258, 20031, 258, 20057, 258, 20101, 258, 20108, 258, 20128, 258, 20154, - 258, 20799, 258, 20837, 258, 20843, 258, 20866, 258, 20886, 258, 20907, - 258, 20960, 258, 20981, 258, 20992, 258, 21147, 258, 21241, 258, 21269, - 258, 21274, 258, 21304, 258, 21313, 258, 21340, 258, 21353, 258, 21378, - 258, 21430, 258, 21448, 258, 21475, 258, 22231, 258, 22303, 258, 22763, - 258, 22786, 258, 22794, 258, 22805, 258, 22823, 258, 22899, 258, 23376, - 258, 23424, 258, 23544, 258, 23567, 258, 23586, 258, 23608, 258, 23662, - 258, 23665, 258, 24027, 258, 24037, 258, 24049, 258, 24062, 258, 24178, - 258, 24186, 258, 24191, 258, 24308, 258, 24318, 258, 24331, 258, 24339, - 258, 24400, 258, 24417, 258, 24435, 258, 24515, 258, 25096, 258, 25142, - 258, 25163, 258, 25903, 258, 25908, 258, 25991, 258, 26007, 258, 26020, - 258, 26041, 258, 26080, 258, 26085, 258, 26352, 258, 26376, 258, 26408, - 258, 27424, 258, 27490, 258, 27513, 258, 27571, 258, 27595, 258, 27604, - 258, 27611, 258, 27663, 258, 27668, 258, 27700, 258, 28779, 258, 29226, - 258, 29238, 258, 29243, 258, 29247, 258, 29255, 258, 29273, 258, 29275, - 258, 29356, 258, 29572, 258, 29577, 258, 29916, 258, 29926, 258, 29976, - 258, 29983, 258, 29992, 258, 30000, 258, 30091, 258, 30098, 258, 30326, - 258, 30333, 258, 30382, 258, 30399, 258, 30446, 258, 30683, 258, 30690, - 258, 30707, 258, 31034, 258, 31160, 258, 31166, 258, 31348, 258, 31435, - 258, 31481, 258, 31859, 258, 31992, 258, 32566, 258, 32593, 258, 32650, - 258, 32701, 258, 32769, 258, 32780, 258, 32786, 258, 32819, 258, 32895, - 258, 32905, 258, 33251, 258, 33258, 258, 33267, 258, 33276, 258, 33292, - 258, 33307, 258, 33311, 258, 33390, 258, 33394, 258, 33400, 258, 34381, - 258, 34411, 258, 34880, 258, 34892, 258, 34915, 258, 35198, 258, 35211, - 258, 35282, 258, 35328, 258, 35895, 258, 35910, 258, 35925, 258, 35960, - 258, 35997, 258, 36196, 258, 36208, 258, 36275, 258, 36523, 258, 36554, - 258, 36763, 258, 36784, 258, 36789, 258, 37009, 258, 37193, 258, 37318, - 258, 37324, 258, 37329, 258, 38263, 258, 38272, 258, 38428, 258, 38582, - 258, 38585, 258, 38632, 258, 38737, 258, 38750, 258, 38754, 258, 38761, - 258, 38859, 258, 38893, 258, 38899, 258, 38913, 258, 39080, 258, 39131, - 258, 39135, 258, 39318, 258, 39321, 258, 39340, 258, 39592, 258, 39640, - 258, 39647, 258, 39717, 258, 39727, 258, 39730, 258, 39740, 258, 39770, - 258, 40165, 258, 40565, 258, 40575, 258, 40613, 258, 40635, 258, 40643, - 258, 40653, 258, 40657, 258, 40697, 258, 40701, 258, 40718, 258, 40723, - 258, 40736, 258, 40763, 258, 40778, 258, 40786, 258, 40845, 258, 40860, - 258, 40864, 264, 32, 258, 12306, 258, 21313, 258, 21316, 258, 21317, 512, - 12363, 12441, 512, 12365, 12441, 512, 12367, 12441, 512, 12369, 12441, - 512, 12371, 12441, 512, 12373, 12441, 512, 12375, 12441, 512, 12377, - 12441, 512, 12379, 12441, 512, 12381, 12441, 512, 12383, 12441, 512, - 12385, 12441, 512, 12388, 12441, 512, 12390, 12441, 512, 12392, 12441, - 512, 12399, 12441, 512, 12399, 12442, 512, 12402, 12441, 512, 12402, - 12442, 512, 12405, 12441, 512, 12405, 12442, 512, 12408, 12441, 512, - 12408, 12442, 512, 12411, 12441, 512, 12411, 12442, 512, 12358, 12441, - 514, 32, 12441, 514, 32, 12442, 512, 12445, 12441, 521, 12424, 12426, - 512, 12459, 12441, 512, 12461, 12441, 512, 12463, 12441, 512, 12465, - 12441, 512, 12467, 12441, 512, 12469, 12441, 512, 12471, 12441, 512, - 12473, 12441, 512, 12475, 12441, 512, 12477, 12441, 512, 12479, 12441, - 512, 12481, 12441, 512, 12484, 12441, 512, 12486, 12441, 512, 12488, - 12441, 512, 12495, 12441, 512, 12495, 12442, 512, 12498, 12441, 512, - 12498, 12442, 512, 12501, 12441, 512, 12501, 12442, 512, 12504, 12441, - 512, 12504, 12442, 512, 12507, 12441, 512, 12507, 12442, 512, 12454, - 12441, 512, 12527, 12441, 512, 12528, 12441, 512, 12529, 12441, 512, - 12530, 12441, 512, 12541, 12441, 521, 12467, 12488, 258, 4352, 258, 4353, - 258, 4522, 258, 4354, 258, 4524, 258, 4525, 258, 4355, 258, 4356, 258, - 4357, 258, 4528, 258, 4529, 258, 4530, 258, 4531, 258, 4532, 258, 4533, - 258, 4378, 258, 4358, 258, 4359, 258, 4360, 258, 4385, 258, 4361, 258, - 4362, 258, 4363, 258, 4364, 258, 4365, 258, 4366, 258, 4367, 258, 4368, - 258, 4369, 258, 4370, 258, 4449, 258, 4450, 258, 4451, 258, 4452, 258, - 4453, 258, 4454, 258, 4455, 258, 4456, 258, 4457, 258, 4458, 258, 4459, - 258, 4460, 258, 4461, 258, 4462, 258, 4463, 258, 4464, 258, 4465, 258, - 4466, 258, 4467, 258, 4468, 258, 4469, 258, 4448, 258, 4372, 258, 4373, - 258, 4551, 258, 4552, 258, 4556, 258, 4558, 258, 4563, 258, 4567, 258, - 4569, 258, 4380, 258, 4573, 258, 4575, 258, 4381, 258, 4382, 258, 4384, - 258, 4386, 258, 4387, 258, 4391, 258, 4393, 258, 4395, 258, 4396, 258, - 4397, 258, 4398, 258, 4399, 258, 4402, 258, 4406, 258, 4416, 258, 4423, - 258, 4428, 258, 4593, 258, 4594, 258, 4439, 258, 4440, 258, 4441, 258, - 4484, 258, 4485, 258, 4488, 258, 4497, 258, 4498, 258, 4500, 258, 4510, - 258, 4513, 259, 19968, 259, 20108, 259, 19977, 259, 22235, 259, 19978, - 259, 20013, 259, 19979, 259, 30002, 259, 20057, 259, 19993, 259, 19969, - 259, 22825, 259, 22320, 259, 20154, 770, 40, 4352, 41, 770, 40, 4354, 41, - 770, 40, 4355, 41, 770, 40, 4357, 41, 770, 40, 4358, 41, 770, 40, 4359, - 41, 770, 40, 4361, 41, 770, 40, 4363, 41, 770, 40, 4364, 41, 770, 40, - 4366, 41, 770, 40, 4367, 41, 770, 40, 4368, 41, 770, 40, 4369, 41, 770, - 40, 4370, 41, 1026, 40, 4352, 4449, 41, 1026, 40, 4354, 4449, 41, 1026, - 40, 4355, 4449, 41, 1026, 40, 4357, 4449, 41, 1026, 40, 4358, 4449, 41, - 1026, 40, 4359, 4449, 41, 1026, 40, 4361, 4449, 41, 1026, 40, 4363, 4449, - 41, 1026, 40, 4364, 4449, 41, 1026, 40, 4366, 4449, 41, 1026, 40, 4367, - 4449, 41, 1026, 40, 4368, 4449, 41, 1026, 40, 4369, 4449, 41, 1026, 40, - 4370, 4449, 41, 1026, 40, 4364, 4462, 41, 1794, 40, 4363, 4457, 4364, - 4453, 4523, 41, 1538, 40, 4363, 4457, 4370, 4462, 41, 770, 40, 19968, 41, - 770, 40, 20108, 41, 770, 40, 19977, 41, 770, 40, 22235, 41, 770, 40, - 20116, 41, 770, 40, 20845, 41, 770, 40, 19971, 41, 770, 40, 20843, 41, - 770, 40, 20061, 41, 770, 40, 21313, 41, 770, 40, 26376, 41, 770, 40, - 28779, 41, 770, 40, 27700, 41, 770, 40, 26408, 41, 770, 40, 37329, 41, - 770, 40, 22303, 41, 770, 40, 26085, 41, 770, 40, 26666, 41, 770, 40, - 26377, 41, 770, 40, 31038, 41, 770, 40, 21517, 41, 770, 40, 29305, 41, - 770, 40, 36001, 41, 770, 40, 31069, 41, 770, 40, 21172, 41, 770, 40, - 20195, 41, 770, 40, 21628, 41, 770, 40, 23398, 41, 770, 40, 30435, 41, - 770, 40, 20225, 41, 770, 40, 36039, 41, 770, 40, 21332, 41, 770, 40, - 31085, 41, 770, 40, 20241, 41, 770, 40, 33258, 41, 770, 40, 33267, 41, - 778, 80, 84, 69, 519, 50, 49, 519, 50, 50, 519, 50, 51, 519, 50, 52, 519, - 50, 53, 519, 50, 54, 519, 50, 55, 519, 50, 56, 519, 50, 57, 519, 51, 48, - 519, 51, 49, 519, 51, 50, 519, 51, 51, 519, 51, 52, 519, 51, 53, 263, - 4352, 263, 4354, 263, 4355, 263, 4357, 263, 4358, 263, 4359, 263, 4361, - 263, 4363, 263, 4364, 263, 4366, 263, 4367, 263, 4368, 263, 4369, 263, - 4370, 519, 4352, 4449, 519, 4354, 4449, 519, 4355, 4449, 519, 4357, 4449, - 519, 4358, 4449, 519, 4359, 4449, 519, 4361, 4449, 519, 4363, 4449, 519, - 4364, 4449, 519, 4366, 4449, 519, 4367, 4449, 519, 4368, 4449, 519, 4369, - 4449, 519, 4370, 4449, 1287, 4366, 4449, 4535, 4352, 4457, 1031, 4364, - 4462, 4363, 4468, 519, 4363, 4462, 263, 19968, 263, 20108, 263, 19977, - 263, 22235, 263, 20116, 263, 20845, 263, 19971, 263, 20843, 263, 20061, - 263, 21313, 263, 26376, 263, 28779, 263, 27700, 263, 26408, 263, 37329, - 263, 22303, 263, 26085, 263, 26666, 263, 26377, 263, 31038, 263, 21517, - 263, 29305, 263, 36001, 263, 31069, 263, 21172, 263, 31192, 263, 30007, - 263, 22899, 263, 36969, 263, 20778, 263, 21360, 263, 27880, 263, 38917, - 263, 20241, 263, 20889, 263, 27491, 263, 19978, 263, 20013, 263, 19979, - 263, 24038, 263, 21491, 263, 21307, 263, 23447, 263, 23398, 263, 30435, - 263, 20225, 263, 36039, 263, 21332, 263, 22812, 519, 51, 54, 519, 51, 55, - 519, 51, 56, 519, 51, 57, 519, 52, 48, 519, 52, 49, 519, 52, 50, 519, 52, - 51, 519, 52, 52, 519, 52, 53, 519, 52, 54, 519, 52, 55, 519, 52, 56, 519, - 52, 57, 519, 53, 48, 514, 49, 26376, 514, 50, 26376, 514, 51, 26376, 514, - 52, 26376, 514, 53, 26376, 514, 54, 26376, 514, 55, 26376, 514, 56, - 26376, 514, 57, 26376, 770, 49, 48, 26376, 770, 49, 49, 26376, 770, 49, - 50, 26376, 522, 72, 103, 778, 101, 114, 103, 522, 101, 86, 778, 76, 84, - 68, 263, 12450, 263, 12452, 263, 12454, 263, 12456, 263, 12458, 263, - 12459, 263, 12461, 263, 12463, 263, 12465, 263, 12467, 263, 12469, 263, - 12471, 263, 12473, 263, 12475, 263, 12477, 263, 12479, 263, 12481, 263, - 12484, 263, 12486, 263, 12488, 263, 12490, 263, 12491, 263, 12492, 263, - 12493, 263, 12494, 263, 12495, 263, 12498, 263, 12501, 263, 12504, 263, - 12507, 263, 12510, 263, 12511, 263, 12512, 263, 12513, 263, 12514, 263, - 12516, 263, 12518, 263, 12520, 263, 12521, 263, 12522, 263, 12523, 263, - 12524, 263, 12525, 263, 12527, 263, 12528, 263, 12529, 263, 12530, 1034, - 12450, 12497, 12540, 12488, 1034, 12450, 12523, 12501, 12449, 1034, - 12450, 12531, 12506, 12450, 778, 12450, 12540, 12523, 1034, 12452, 12491, - 12531, 12464, 778, 12452, 12531, 12481, 778, 12454, 12457, 12531, 1290, - 12456, 12473, 12463, 12540, 12489, 1034, 12456, 12540, 12459, 12540, 778, - 12458, 12531, 12473, 778, 12458, 12540, 12512, 778, 12459, 12452, 12522, - 1034, 12459, 12521, 12483, 12488, 1034, 12459, 12525, 12522, 12540, 778, - 12460, 12525, 12531, 778, 12460, 12531, 12510, 522, 12462, 12460, 778, - 12462, 12491, 12540, 1034, 12461, 12517, 12522, 12540, 1034, 12462, - 12523, 12480, 12540, 522, 12461, 12525, 1290, 12461, 12525, 12464, 12521, - 12512, 1546, 12461, 12525, 12513, 12540, 12488, 12523, 1290, 12461, - 12525, 12527, 12483, 12488, 778, 12464, 12521, 12512, 1290, 12464, 12521, - 12512, 12488, 12531, 1290, 12463, 12523, 12476, 12452, 12525, 1034, - 12463, 12525, 12540, 12493, 778, 12465, 12540, 12473, 778, 12467, 12523, - 12490, 778, 12467, 12540, 12509, 1034, 12469, 12452, 12463, 12523, 1290, - 12469, 12531, 12481, 12540, 12512, 1034, 12471, 12522, 12531, 12464, 778, - 12475, 12531, 12481, 778, 12475, 12531, 12488, 778, 12480, 12540, 12473, - 522, 12487, 12471, 522, 12489, 12523, 522, 12488, 12531, 522, 12490, - 12494, 778, 12494, 12483, 12488, 778, 12495, 12452, 12484, 1290, 12497, - 12540, 12475, 12531, 12488, 778, 12497, 12540, 12484, 1034, 12496, 12540, - 12524, 12523, 1290, 12500, 12450, 12473, 12488, 12523, 778, 12500, 12463, - 12523, 522, 12500, 12467, 522, 12499, 12523, 1290, 12501, 12449, 12521, - 12483, 12489, 1034, 12501, 12451, 12540, 12488, 1290, 12502, 12483, - 12471, 12455, 12523, 778, 12501, 12521, 12531, 1290, 12504, 12463, 12479, - 12540, 12523, 522, 12506, 12477, 778, 12506, 12491, 12498, 778, 12504, - 12523, 12484, 778, 12506, 12531, 12473, 778, 12506, 12540, 12472, 778, - 12505, 12540, 12479, 1034, 12509, 12452, 12531, 12488, 778, 12508, 12523, - 12488, 522, 12507, 12531, 778, 12509, 12531, 12489, 778, 12507, 12540, - 12523, 778, 12507, 12540, 12531, 1034, 12510, 12452, 12463, 12525, 778, - 12510, 12452, 12523, 778, 12510, 12483, 12495, 778, 12510, 12523, 12463, - 1290, 12510, 12531, 12471, 12519, 12531, 1034, 12511, 12463, 12525, - 12531, 522, 12511, 12522, 1290, 12511, 12522, 12496, 12540, 12523, 522, - 12513, 12460, 1034, 12513, 12460, 12488, 12531, 1034, 12513, 12540, - 12488, 12523, 778, 12516, 12540, 12489, 778, 12516, 12540, 12523, 778, - 12518, 12450, 12531, 1034, 12522, 12483, 12488, 12523, 522, 12522, 12521, - 778, 12523, 12500, 12540, 1034, 12523, 12540, 12502, 12523, 522, 12524, - 12512, 1290, 12524, 12531, 12488, 12466, 12531, 778, 12527, 12483, 12488, - 514, 48, 28857, 514, 49, 28857, 514, 50, 28857, 514, 51, 28857, 514, 52, - 28857, 514, 53, 28857, 514, 54, 28857, 514, 55, 28857, 514, 56, 28857, - 514, 57, 28857, 770, 49, 48, 28857, 770, 49, 49, 28857, 770, 49, 50, - 28857, 770, 49, 51, 28857, 770, 49, 52, 28857, 770, 49, 53, 28857, 770, - 49, 54, 28857, 770, 49, 55, 28857, 770, 49, 56, 28857, 770, 49, 57, - 28857, 770, 50, 48, 28857, 770, 50, 49, 28857, 770, 50, 50, 28857, 770, - 50, 51, 28857, 770, 50, 52, 28857, 778, 104, 80, 97, 522, 100, 97, 522, - 65, 85, 778, 98, 97, 114, 522, 111, 86, 522, 112, 99, 522, 100, 109, 778, - 100, 109, 178, 778, 100, 109, 179, 522, 73, 85, 522, 24179, 25104, 522, - 26157, 21644, 522, 22823, 27491, 522, 26126, 27835, 1034, 26666, 24335, - 20250, 31038, 522, 112, 65, 522, 110, 65, 522, 956, 65, 522, 109, 65, - 522, 107, 65, 522, 75, 66, 522, 77, 66, 522, 71, 66, 778, 99, 97, 108, - 1034, 107, 99, 97, 108, 522, 112, 70, 522, 110, 70, 522, 956, 70, 522, - 956, 103, 522, 109, 103, 522, 107, 103, 522, 72, 122, 778, 107, 72, 122, - 778, 77, 72, 122, 778, 71, 72, 122, 778, 84, 72, 122, 522, 956, 8467, - 522, 109, 8467, 522, 100, 8467, 522, 107, 8467, 522, 102, 109, 522, 110, - 109, 522, 956, 109, 522, 109, 109, 522, 99, 109, 522, 107, 109, 778, 109, - 109, 178, 778, 99, 109, 178, 522, 109, 178, 778, 107, 109, 178, 778, 109, - 109, 179, 778, 99, 109, 179, 522, 109, 179, 778, 107, 109, 179, 778, 109, - 8725, 115, 1034, 109, 8725, 115, 178, 522, 80, 97, 778, 107, 80, 97, 778, - 77, 80, 97, 778, 71, 80, 97, 778, 114, 97, 100, 1290, 114, 97, 100, 8725, - 115, 1546, 114, 97, 100, 8725, 115, 178, 522, 112, 115, 522, 110, 115, - 522, 956, 115, 522, 109, 115, 522, 112, 86, 522, 110, 86, 522, 956, 86, - 522, 109, 86, 522, 107, 86, 522, 77, 86, 522, 112, 87, 522, 110, 87, 522, - 956, 87, 522, 109, 87, 522, 107, 87, 522, 77, 87, 522, 107, 937, 522, 77, - 937, 1034, 97, 46, 109, 46, 522, 66, 113, 522, 99, 99, 522, 99, 100, - 1034, 67, 8725, 107, 103, 778, 67, 111, 46, 522, 100, 66, 522, 71, 121, - 522, 104, 97, 522, 72, 80, 522, 105, 110, 522, 75, 75, 522, 75, 77, 522, - 107, 116, 522, 108, 109, 522, 108, 110, 778, 108, 111, 103, 522, 108, - 120, 522, 109, 98, 778, 109, 105, 108, 778, 109, 111, 108, 522, 80, 72, - 1034, 112, 46, 109, 46, 778, 80, 80, 77, 522, 80, 82, 522, 115, 114, 522, - 83, 118, 522, 87, 98, 778, 86, 8725, 109, 778, 65, 8725, 109, 514, 49, - 26085, 514, 50, 26085, 514, 51, 26085, 514, 52, 26085, 514, 53, 26085, - 514, 54, 26085, 514, 55, 26085, 514, 56, 26085, 514, 57, 26085, 770, 49, - 48, 26085, 770, 49, 49, 26085, 770, 49, 50, 26085, 770, 49, 51, 26085, - 770, 49, 52, 26085, 770, 49, 53, 26085, 770, 49, 54, 26085, 770, 49, 55, - 26085, 770, 49, 56, 26085, 770, 49, 57, 26085, 770, 50, 48, 26085, 770, - 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, 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, 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, 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, 119127, 119141, 512, 119128, 119141, 512, 119135, + 8260, 55, 772, 49, 8260, 57, 1028, 49, 8260, 49, 48, 772, 49, 8260, 51, + 772, 50, 8260, 51, 772, 49, 8260, 53, 772, 50, 8260, 53, 772, 51, 8260, + 53, 772, 52, 8260, 53, 772, 49, 8260, 54, 772, 53, 8260, 54, 772, 49, + 8260, 56, 772, 51, 8260, 56, 772, 53, 8260, 56, 772, 55, 8260, 56, 516, + 49, 8260, 258, 73, 514, 73, 73, 770, 73, 73, 73, 514, 73, 86, 258, 86, + 514, 86, 73, 770, 86, 73, 73, 1026, 86, 73, 73, 73, 514, 73, 88, 258, 88, + 514, 88, 73, 770, 88, 73, 73, 258, 76, 258, 67, 258, 68, 258, 77, 258, + 105, 514, 105, 105, 770, 105, 105, 105, 514, 105, 118, 258, 118, 514, + 118, 105, 770, 118, 105, 105, 1026, 118, 105, 105, 105, 514, 105, 120, + 258, 120, 514, 120, 105, 770, 120, 105, 105, 258, 108, 258, 99, 258, 100, + 258, 109, 772, 48, 8260, 51, 512, 8592, 824, 512, 8594, 824, 512, 8596, + 824, 512, 8656, 824, 512, 8660, 824, 512, 8658, 824, 512, 8707, 824, 512, + 8712, 824, 512, 8715, 824, 512, 8739, 824, 512, 8741, 824, 514, 8747, + 8747, 770, 8747, 8747, 8747, 514, 8750, 8750, 770, 8750, 8750, 8750, 512, + 8764, 824, 512, 8771, 824, 512, 8773, 824, 512, 8776, 824, 512, 61, 824, + 512, 8801, 824, 512, 8781, 824, 512, 60, 824, 512, 62, 824, 512, 8804, + 824, 512, 8805, 824, 512, 8818, 824, 512, 8819, 824, 512, 8822, 824, 512, + 8823, 824, 512, 8826, 824, 512, 8827, 824, 512, 8834, 824, 512, 8835, + 824, 512, 8838, 824, 512, 8839, 824, 512, 8866, 824, 512, 8872, 824, 512, + 8873, 824, 512, 8875, 824, 512, 8828, 824, 512, 8829, 824, 512, 8849, + 824, 512, 8850, 824, 512, 8882, 824, 512, 8883, 824, 512, 8884, 824, 512, + 8885, 824, 256, 12296, 256, 12297, 263, 49, 263, 50, 263, 51, 263, 52, + 263, 53, 263, 54, 263, 55, 263, 56, 263, 57, 519, 49, 48, 519, 49, 49, + 519, 49, 50, 519, 49, 51, 519, 49, 52, 519, 49, 53, 519, 49, 54, 519, 49, + 55, 519, 49, 56, 519, 49, 57, 519, 50, 48, 770, 40, 49, 41, 770, 40, 50, + 41, 770, 40, 51, 41, 770, 40, 52, 41, 770, 40, 53, 41, 770, 40, 54, 41, + 770, 40, 55, 41, 770, 40, 56, 41, 770, 40, 57, 41, 1026, 40, 49, 48, 41, + 1026, 40, 49, 49, 41, 1026, 40, 49, 50, 41, 1026, 40, 49, 51, 41, 1026, + 40, 49, 52, 41, 1026, 40, 49, 53, 41, 1026, 40, 49, 54, 41, 1026, 40, 49, + 55, 41, 1026, 40, 49, 56, 41, 1026, 40, 49, 57, 41, 1026, 40, 50, 48, 41, + 514, 49, 46, 514, 50, 46, 514, 51, 46, 514, 52, 46, 514, 53, 46, 514, 54, + 46, 514, 55, 46, 514, 56, 46, 514, 57, 46, 770, 49, 48, 46, 770, 49, 49, + 46, 770, 49, 50, 46, 770, 49, 51, 46, 770, 49, 52, 46, 770, 49, 53, 46, + 770, 49, 54, 46, 770, 49, 55, 46, 770, 49, 56, 46, 770, 49, 57, 46, 770, + 50, 48, 46, 770, 40, 97, 41, 770, 40, 98, 41, 770, 40, 99, 41, 770, 40, + 100, 41, 770, 40, 101, 41, 770, 40, 102, 41, 770, 40, 103, 41, 770, 40, + 104, 41, 770, 40, 105, 41, 770, 40, 106, 41, 770, 40, 107, 41, 770, 40, + 108, 41, 770, 40, 109, 41, 770, 40, 110, 41, 770, 40, 111, 41, 770, 40, + 112, 41, 770, 40, 113, 41, 770, 40, 114, 41, 770, 40, 115, 41, 770, 40, + 116, 41, 770, 40, 117, 41, 770, 40, 118, 41, 770, 40, 119, 41, 770, 40, + 120, 41, 770, 40, 121, 41, 770, 40, 122, 41, 263, 65, 263, 66, 263, 67, + 263, 68, 263, 69, 263, 70, 263, 71, 263, 72, 263, 73, 263, 74, 263, 75, + 263, 76, 263, 77, 263, 78, 263, 79, 263, 80, 263, 81, 263, 82, 263, 83, + 263, 84, 263, 85, 263, 86, 263, 87, 263, 88, 263, 89, 263, 90, 263, 97, + 263, 98, 263, 99, 263, 100, 263, 101, 263, 102, 263, 103, 263, 104, 263, + 105, 263, 106, 263, 107, 263, 108, 263, 109, 263, 110, 263, 111, 263, + 112, 263, 113, 263, 114, 263, 115, 263, 116, 263, 117, 263, 118, 263, + 119, 263, 120, 263, 121, 263, 122, 263, 48, 1026, 8747, 8747, 8747, 8747, + 770, 58, 58, 61, 514, 61, 61, 770, 61, 61, 61, 512, 10973, 824, 261, 106, + 259, 86, 259, 11617, 258, 27597, 258, 40863, 258, 19968, 258, 20008, 258, + 20022, 258, 20031, 258, 20057, 258, 20101, 258, 20108, 258, 20128, 258, + 20154, 258, 20799, 258, 20837, 258, 20843, 258, 20866, 258, 20886, 258, + 20907, 258, 20960, 258, 20981, 258, 20992, 258, 21147, 258, 21241, 258, + 21269, 258, 21274, 258, 21304, 258, 21313, 258, 21340, 258, 21353, 258, + 21378, 258, 21430, 258, 21448, 258, 21475, 258, 22231, 258, 22303, 258, + 22763, 258, 22786, 258, 22794, 258, 22805, 258, 22823, 258, 22899, 258, + 23376, 258, 23424, 258, 23544, 258, 23567, 258, 23586, 258, 23608, 258, + 23662, 258, 23665, 258, 24027, 258, 24037, 258, 24049, 258, 24062, 258, + 24178, 258, 24186, 258, 24191, 258, 24308, 258, 24318, 258, 24331, 258, + 24339, 258, 24400, 258, 24417, 258, 24435, 258, 24515, 258, 25096, 258, + 25142, 258, 25163, 258, 25903, 258, 25908, 258, 25991, 258, 26007, 258, + 26020, 258, 26041, 258, 26080, 258, 26085, 258, 26352, 258, 26376, 258, + 26408, 258, 27424, 258, 27490, 258, 27513, 258, 27571, 258, 27595, 258, + 27604, 258, 27611, 258, 27663, 258, 27668, 258, 27700, 258, 28779, 258, + 29226, 258, 29238, 258, 29243, 258, 29247, 258, 29255, 258, 29273, 258, + 29275, 258, 29356, 258, 29572, 258, 29577, 258, 29916, 258, 29926, 258, + 29976, 258, 29983, 258, 29992, 258, 30000, 258, 30091, 258, 30098, 258, + 30326, 258, 30333, 258, 30382, 258, 30399, 258, 30446, 258, 30683, 258, + 30690, 258, 30707, 258, 31034, 258, 31160, 258, 31166, 258, 31348, 258, + 31435, 258, 31481, 258, 31859, 258, 31992, 258, 32566, 258, 32593, 258, + 32650, 258, 32701, 258, 32769, 258, 32780, 258, 32786, 258, 32819, 258, + 32895, 258, 32905, 258, 33251, 258, 33258, 258, 33267, 258, 33276, 258, + 33292, 258, 33307, 258, 33311, 258, 33390, 258, 33394, 258, 33400, 258, + 34381, 258, 34411, 258, 34880, 258, 34892, 258, 34915, 258, 35198, 258, + 35211, 258, 35282, 258, 35328, 258, 35895, 258, 35910, 258, 35925, 258, + 35960, 258, 35997, 258, 36196, 258, 36208, 258, 36275, 258, 36523, 258, + 36554, 258, 36763, 258, 36784, 258, 36789, 258, 37009, 258, 37193, 258, + 37318, 258, 37324, 258, 37329, 258, 38263, 258, 38272, 258, 38428, 258, + 38582, 258, 38585, 258, 38632, 258, 38737, 258, 38750, 258, 38754, 258, + 38761, 258, 38859, 258, 38893, 258, 38899, 258, 38913, 258, 39080, 258, + 39131, 258, 39135, 258, 39318, 258, 39321, 258, 39340, 258, 39592, 258, + 39640, 258, 39647, 258, 39717, 258, 39727, 258, 39730, 258, 39740, 258, + 39770, 258, 40165, 258, 40565, 258, 40575, 258, 40613, 258, 40635, 258, + 40643, 258, 40653, 258, 40657, 258, 40697, 258, 40701, 258, 40718, 258, + 40723, 258, 40736, 258, 40763, 258, 40778, 258, 40786, 258, 40845, 258, + 40860, 258, 40864, 264, 32, 258, 12306, 258, 21313, 258, 21316, 258, + 21317, 512, 12363, 12441, 512, 12365, 12441, 512, 12367, 12441, 512, + 12369, 12441, 512, 12371, 12441, 512, 12373, 12441, 512, 12375, 12441, + 512, 12377, 12441, 512, 12379, 12441, 512, 12381, 12441, 512, 12383, + 12441, 512, 12385, 12441, 512, 12388, 12441, 512, 12390, 12441, 512, + 12392, 12441, 512, 12399, 12441, 512, 12399, 12442, 512, 12402, 12441, + 512, 12402, 12442, 512, 12405, 12441, 512, 12405, 12442, 512, 12408, + 12441, 512, 12408, 12442, 512, 12411, 12441, 512, 12411, 12442, 512, + 12358, 12441, 514, 32, 12441, 514, 32, 12442, 512, 12445, 12441, 521, + 12424, 12426, 512, 12459, 12441, 512, 12461, 12441, 512, 12463, 12441, + 512, 12465, 12441, 512, 12467, 12441, 512, 12469, 12441, 512, 12471, + 12441, 512, 12473, 12441, 512, 12475, 12441, 512, 12477, 12441, 512, + 12479, 12441, 512, 12481, 12441, 512, 12484, 12441, 512, 12486, 12441, + 512, 12488, 12441, 512, 12495, 12441, 512, 12495, 12442, 512, 12498, + 12441, 512, 12498, 12442, 512, 12501, 12441, 512, 12501, 12442, 512, + 12504, 12441, 512, 12504, 12442, 512, 12507, 12441, 512, 12507, 12442, + 512, 12454, 12441, 512, 12527, 12441, 512, 12528, 12441, 512, 12529, + 12441, 512, 12530, 12441, 512, 12541, 12441, 521, 12467, 12488, 258, + 4352, 258, 4353, 258, 4522, 258, 4354, 258, 4524, 258, 4525, 258, 4355, + 258, 4356, 258, 4357, 258, 4528, 258, 4529, 258, 4530, 258, 4531, 258, + 4532, 258, 4533, 258, 4378, 258, 4358, 258, 4359, 258, 4360, 258, 4385, + 258, 4361, 258, 4362, 258, 4363, 258, 4364, 258, 4365, 258, 4366, 258, + 4367, 258, 4368, 258, 4369, 258, 4370, 258, 4449, 258, 4450, 258, 4451, + 258, 4452, 258, 4453, 258, 4454, 258, 4455, 258, 4456, 258, 4457, 258, + 4458, 258, 4459, 258, 4460, 258, 4461, 258, 4462, 258, 4463, 258, 4464, + 258, 4465, 258, 4466, 258, 4467, 258, 4468, 258, 4469, 258, 4448, 258, + 4372, 258, 4373, 258, 4551, 258, 4552, 258, 4556, 258, 4558, 258, 4563, + 258, 4567, 258, 4569, 258, 4380, 258, 4573, 258, 4575, 258, 4381, 258, + 4382, 258, 4384, 258, 4386, 258, 4387, 258, 4391, 258, 4393, 258, 4395, + 258, 4396, 258, 4397, 258, 4398, 258, 4399, 258, 4402, 258, 4406, 258, + 4416, 258, 4423, 258, 4428, 258, 4593, 258, 4594, 258, 4439, 258, 4440, + 258, 4441, 258, 4484, 258, 4485, 258, 4488, 258, 4497, 258, 4498, 258, + 4500, 258, 4510, 258, 4513, 259, 19968, 259, 20108, 259, 19977, 259, + 22235, 259, 19978, 259, 20013, 259, 19979, 259, 30002, 259, 20057, 259, + 19993, 259, 19969, 259, 22825, 259, 22320, 259, 20154, 770, 40, 4352, 41, + 770, 40, 4354, 41, 770, 40, 4355, 41, 770, 40, 4357, 41, 770, 40, 4358, + 41, 770, 40, 4359, 41, 770, 40, 4361, 41, 770, 40, 4363, 41, 770, 40, + 4364, 41, 770, 40, 4366, 41, 770, 40, 4367, 41, 770, 40, 4368, 41, 770, + 40, 4369, 41, 770, 40, 4370, 41, 1026, 40, 4352, 4449, 41, 1026, 40, + 4354, 4449, 41, 1026, 40, 4355, 4449, 41, 1026, 40, 4357, 4449, 41, 1026, + 40, 4358, 4449, 41, 1026, 40, 4359, 4449, 41, 1026, 40, 4361, 4449, 41, + 1026, 40, 4363, 4449, 41, 1026, 40, 4364, 4449, 41, 1026, 40, 4366, 4449, + 41, 1026, 40, 4367, 4449, 41, 1026, 40, 4368, 4449, 41, 1026, 40, 4369, + 4449, 41, 1026, 40, 4370, 4449, 41, 1026, 40, 4364, 4462, 41, 1794, 40, + 4363, 4457, 4364, 4453, 4523, 41, 1538, 40, 4363, 4457, 4370, 4462, 41, + 770, 40, 19968, 41, 770, 40, 20108, 41, 770, 40, 19977, 41, 770, 40, + 22235, 41, 770, 40, 20116, 41, 770, 40, 20845, 41, 770, 40, 19971, 41, + 770, 40, 20843, 41, 770, 40, 20061, 41, 770, 40, 21313, 41, 770, 40, + 26376, 41, 770, 40, 28779, 41, 770, 40, 27700, 41, 770, 40, 26408, 41, + 770, 40, 37329, 41, 770, 40, 22303, 41, 770, 40, 26085, 41, 770, 40, + 26666, 41, 770, 40, 26377, 41, 770, 40, 31038, 41, 770, 40, 21517, 41, + 770, 40, 29305, 41, 770, 40, 36001, 41, 770, 40, 31069, 41, 770, 40, + 21172, 41, 770, 40, 20195, 41, 770, 40, 21628, 41, 770, 40, 23398, 41, + 770, 40, 30435, 41, 770, 40, 20225, 41, 770, 40, 36039, 41, 770, 40, + 21332, 41, 770, 40, 31085, 41, 770, 40, 20241, 41, 770, 40, 33258, 41, + 770, 40, 33267, 41, 263, 21839, 263, 24188, 263, 25991, 263, 31631, 778, + 80, 84, 69, 519, 50, 49, 519, 50, 50, 519, 50, 51, 519, 50, 52, 519, 50, + 53, 519, 50, 54, 519, 50, 55, 519, 50, 56, 519, 50, 57, 519, 51, 48, 519, + 51, 49, 519, 51, 50, 519, 51, 51, 519, 51, 52, 519, 51, 53, 263, 4352, + 263, 4354, 263, 4355, 263, 4357, 263, 4358, 263, 4359, 263, 4361, 263, + 4363, 263, 4364, 263, 4366, 263, 4367, 263, 4368, 263, 4369, 263, 4370, + 519, 4352, 4449, 519, 4354, 4449, 519, 4355, 4449, 519, 4357, 4449, 519, + 4358, 4449, 519, 4359, 4449, 519, 4361, 4449, 519, 4363, 4449, 519, 4364, + 4449, 519, 4366, 4449, 519, 4367, 4449, 519, 4368, 4449, 519, 4369, 4449, + 519, 4370, 4449, 1287, 4366, 4449, 4535, 4352, 4457, 1031, 4364, 4462, + 4363, 4468, 519, 4363, 4462, 263, 19968, 263, 20108, 263, 19977, 263, + 22235, 263, 20116, 263, 20845, 263, 19971, 263, 20843, 263, 20061, 263, + 21313, 263, 26376, 263, 28779, 263, 27700, 263, 26408, 263, 37329, 263, + 22303, 263, 26085, 263, 26666, 263, 26377, 263, 31038, 263, 21517, 263, + 29305, 263, 36001, 263, 31069, 263, 21172, 263, 31192, 263, 30007, 263, + 22899, 263, 36969, 263, 20778, 263, 21360, 263, 27880, 263, 38917, 263, + 20241, 263, 20889, 263, 27491, 263, 19978, 263, 20013, 263, 19979, 263, + 24038, 263, 21491, 263, 21307, 263, 23447, 263, 23398, 263, 30435, 263, + 20225, 263, 36039, 263, 21332, 263, 22812, 519, 51, 54, 519, 51, 55, 519, + 51, 56, 519, 51, 57, 519, 52, 48, 519, 52, 49, 519, 52, 50, 519, 52, 51, + 519, 52, 52, 519, 52, 53, 519, 52, 54, 519, 52, 55, 519, 52, 56, 519, 52, + 57, 519, 53, 48, 514, 49, 26376, 514, 50, 26376, 514, 51, 26376, 514, 52, + 26376, 514, 53, 26376, 514, 54, 26376, 514, 55, 26376, 514, 56, 26376, + 514, 57, 26376, 770, 49, 48, 26376, 770, 49, 49, 26376, 770, 49, 50, + 26376, 522, 72, 103, 778, 101, 114, 103, 522, 101, 86, 778, 76, 84, 68, + 263, 12450, 263, 12452, 263, 12454, 263, 12456, 263, 12458, 263, 12459, + 263, 12461, 263, 12463, 263, 12465, 263, 12467, 263, 12469, 263, 12471, + 263, 12473, 263, 12475, 263, 12477, 263, 12479, 263, 12481, 263, 12484, + 263, 12486, 263, 12488, 263, 12490, 263, 12491, 263, 12492, 263, 12493, + 263, 12494, 263, 12495, 263, 12498, 263, 12501, 263, 12504, 263, 12507, + 263, 12510, 263, 12511, 263, 12512, 263, 12513, 263, 12514, 263, 12516, + 263, 12518, 263, 12520, 263, 12521, 263, 12522, 263, 12523, 263, 12524, + 263, 12525, 263, 12527, 263, 12528, 263, 12529, 263, 12530, 1034, 12450, + 12497, 12540, 12488, 1034, 12450, 12523, 12501, 12449, 1034, 12450, + 12531, 12506, 12450, 778, 12450, 12540, 12523, 1034, 12452, 12491, 12531, + 12464, 778, 12452, 12531, 12481, 778, 12454, 12457, 12531, 1290, 12456, + 12473, 12463, 12540, 12489, 1034, 12456, 12540, 12459, 12540, 778, 12458, + 12531, 12473, 778, 12458, 12540, 12512, 778, 12459, 12452, 12522, 1034, + 12459, 12521, 12483, 12488, 1034, 12459, 12525, 12522, 12540, 778, 12460, + 12525, 12531, 778, 12460, 12531, 12510, 522, 12462, 12460, 778, 12462, + 12491, 12540, 1034, 12461, 12517, 12522, 12540, 1034, 12462, 12523, + 12480, 12540, 522, 12461, 12525, 1290, 12461, 12525, 12464, 12521, 12512, + 1546, 12461, 12525, 12513, 12540, 12488, 12523, 1290, 12461, 12525, + 12527, 12483, 12488, 778, 12464, 12521, 12512, 1290, 12464, 12521, 12512, + 12488, 12531, 1290, 12463, 12523, 12476, 12452, 12525, 1034, 12463, + 12525, 12540, 12493, 778, 12465, 12540, 12473, 778, 12467, 12523, 12490, + 778, 12467, 12540, 12509, 1034, 12469, 12452, 12463, 12523, 1290, 12469, + 12531, 12481, 12540, 12512, 1034, 12471, 12522, 12531, 12464, 778, 12475, + 12531, 12481, 778, 12475, 12531, 12488, 778, 12480, 12540, 12473, 522, + 12487, 12471, 522, 12489, 12523, 522, 12488, 12531, 522, 12490, 12494, + 778, 12494, 12483, 12488, 778, 12495, 12452, 12484, 1290, 12497, 12540, + 12475, 12531, 12488, 778, 12497, 12540, 12484, 1034, 12496, 12540, 12524, + 12523, 1290, 12500, 12450, 12473, 12488, 12523, 778, 12500, 12463, 12523, + 522, 12500, 12467, 522, 12499, 12523, 1290, 12501, 12449, 12521, 12483, + 12489, 1034, 12501, 12451, 12540, 12488, 1290, 12502, 12483, 12471, + 12455, 12523, 778, 12501, 12521, 12531, 1290, 12504, 12463, 12479, 12540, + 12523, 522, 12506, 12477, 778, 12506, 12491, 12498, 778, 12504, 12523, + 12484, 778, 12506, 12531, 12473, 778, 12506, 12540, 12472, 778, 12505, + 12540, 12479, 1034, 12509, 12452, 12531, 12488, 778, 12508, 12523, 12488, + 522, 12507, 12531, 778, 12509, 12531, 12489, 778, 12507, 12540, 12523, + 778, 12507, 12540, 12531, 1034, 12510, 12452, 12463, 12525, 778, 12510, + 12452, 12523, 778, 12510, 12483, 12495, 778, 12510, 12523, 12463, 1290, + 12510, 12531, 12471, 12519, 12531, 1034, 12511, 12463, 12525, 12531, 522, + 12511, 12522, 1290, 12511, 12522, 12496, 12540, 12523, 522, 12513, 12460, + 1034, 12513, 12460, 12488, 12531, 1034, 12513, 12540, 12488, 12523, 778, + 12516, 12540, 12489, 778, 12516, 12540, 12523, 778, 12518, 12450, 12531, + 1034, 12522, 12483, 12488, 12523, 522, 12522, 12521, 778, 12523, 12500, + 12540, 1034, 12523, 12540, 12502, 12523, 522, 12524, 12512, 1290, 12524, + 12531, 12488, 12466, 12531, 778, 12527, 12483, 12488, 514, 48, 28857, + 514, 49, 28857, 514, 50, 28857, 514, 51, 28857, 514, 52, 28857, 514, 53, + 28857, 514, 54, 28857, 514, 55, 28857, 514, 56, 28857, 514, 57, 28857, + 770, 49, 48, 28857, 770, 49, 49, 28857, 770, 49, 50, 28857, 770, 49, 51, + 28857, 770, 49, 52, 28857, 770, 49, 53, 28857, 770, 49, 54, 28857, 770, + 49, 55, 28857, 770, 49, 56, 28857, 770, 49, 57, 28857, 770, 50, 48, + 28857, 770, 50, 49, 28857, 770, 50, 50, 28857, 770, 50, 51, 28857, 770, + 50, 52, 28857, 778, 104, 80, 97, 522, 100, 97, 522, 65, 85, 778, 98, 97, + 114, 522, 111, 86, 522, 112, 99, 522, 100, 109, 778, 100, 109, 178, 778, + 100, 109, 179, 522, 73, 85, 522, 24179, 25104, 522, 26157, 21644, 522, + 22823, 27491, 522, 26126, 27835, 1034, 26666, 24335, 20250, 31038, 522, + 112, 65, 522, 110, 65, 522, 956, 65, 522, 109, 65, 522, 107, 65, 522, 75, + 66, 522, 77, 66, 522, 71, 66, 778, 99, 97, 108, 1034, 107, 99, 97, 108, + 522, 112, 70, 522, 110, 70, 522, 956, 70, 522, 956, 103, 522, 109, 103, + 522, 107, 103, 522, 72, 122, 778, 107, 72, 122, 778, 77, 72, 122, 778, + 71, 72, 122, 778, 84, 72, 122, 522, 956, 8467, 522, 109, 8467, 522, 100, + 8467, 522, 107, 8467, 522, 102, 109, 522, 110, 109, 522, 956, 109, 522, + 109, 109, 522, 99, 109, 522, 107, 109, 778, 109, 109, 178, 778, 99, 109, + 178, 522, 109, 178, 778, 107, 109, 178, 778, 109, 109, 179, 778, 99, 109, + 179, 522, 109, 179, 778, 107, 109, 179, 778, 109, 8725, 115, 1034, 109, + 8725, 115, 178, 522, 80, 97, 778, 107, 80, 97, 778, 77, 80, 97, 778, 71, + 80, 97, 778, 114, 97, 100, 1290, 114, 97, 100, 8725, 115, 1546, 114, 97, + 100, 8725, 115, 178, 522, 112, 115, 522, 110, 115, 522, 956, 115, 522, + 109, 115, 522, 112, 86, 522, 110, 86, 522, 956, 86, 522, 109, 86, 522, + 107, 86, 522, 77, 86, 522, 112, 87, 522, 110, 87, 522, 956, 87, 522, 109, + 87, 522, 107, 87, 522, 77, 87, 522, 107, 937, 522, 77, 937, 1034, 97, 46, + 109, 46, 522, 66, 113, 522, 99, 99, 522, 99, 100, 1034, 67, 8725, 107, + 103, 778, 67, 111, 46, 522, 100, 66, 522, 71, 121, 522, 104, 97, 522, 72, + 80, 522, 105, 110, 522, 75, 75, 522, 75, 77, 522, 107, 116, 522, 108, + 109, 522, 108, 110, 778, 108, 111, 103, 522, 108, 120, 522, 109, 98, 778, + 109, 105, 108, 778, 109, 111, 108, 522, 80, 72, 1034, 112, 46, 109, 46, + 778, 80, 80, 77, 522, 80, 82, 522, 115, 114, 522, 83, 118, 522, 87, 98, + 778, 86, 8725, 109, 778, 65, 8725, 109, 514, 49, 26085, 514, 50, 26085, + 514, 51, 26085, 514, 52, 26085, 514, 53, 26085, 514, 54, 26085, 514, 55, + 26085, 514, 56, 26085, 514, 57, 26085, 770, 49, 48, 26085, 770, 49, 49, + 26085, 770, 49, 50, 26085, 770, 49, 51, 26085, 770, 49, 52, 26085, 770, + 49, 53, 26085, 770, 49, 54, 26085, 770, 49, 55, 26085, 770, 49, 56, + 26085, 770, 49, 57, 26085, 770, 50, 48, 26085, 770, 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, 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, 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, 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, @@ -3274,71 +3407,91 @@ 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, 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, + 262, 53, 262, 54, 262, 55, 262, 56, 262, 57, 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, 66, 266, 78, 266, 80, + 266, 83, 266, 87, 522, 72, 86, 522, 77, 86, 522, 83, 68, 522, 83, 83, + 778, 80, 80, 86, 522, 68, 74, 522, 12411, 12363, 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, 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, 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, @@ -3382,17 +3535,17 @@ 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 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, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 41, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 42, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 42, 7, 7, 43, 44, - 45, 46, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 43, 7, 7, 44, 45, + 46, 47, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 48, 49, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, @@ -3403,7 +3556,7 @@ 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 47, 48, 49, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 50, 51, 52, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, @@ -3828,30 +3981,74 @@ 0, 3271, 0, 3273, 0, 3275, 0, 3277, 3279, 3281, 3283, 0, 3285, 3287, 3289, 0, 3291, 3293, 3295, 3297, 3299, 3301, 3303, 0, 3305, 3309, 3311, 3313, 3315, 3317, 0, 0, 0, 0, 3319, 3321, 3323, 3325, 3327, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 3329, 3333, 3337, 3341, 3345, 3349, 3353, 3357, 3361, - 3365, 3369, 3373, 3377, 3380, 3382, 3385, 3389, 3392, 3394, 3397, 3401, - 3406, 3409, 3411, 3414, 3418, 3420, 3422, 3424, 3426, 3428, 3431, 3435, - 3438, 3440, 3443, 3447, 3452, 3455, 3457, 3460, 3464, 3466, 3468, 3470, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 3472, 3475, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 3478, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 3481, 3484, 3487, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3490, 0, 0, 0, 0, - 3493, 0, 0, 3496, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 3499, 0, 3502, 0, 0, 0, 0, 0, 3505, 3508, 0, 3512, 3515, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3519, 0, 0, 3522, 0, 0, - 3525, 0, 3528, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 3531, 0, 3534, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3537, 3540, 3543, - 3546, 3549, 0, 0, 3552, 3555, 0, 0, 3558, 3561, 0, 0, 0, 0, 0, 0, 3564, - 3567, 0, 0, 3570, 3573, 0, 0, 3576, 3579, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 3582, 3585, 3588, 3591, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 3594, 3597, 3600, 3603, 0, 0, 0, 0, 0, 0, 3606, - 3609, 3612, 3615, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3618, 3620, 0, 0, 0, + 0, 0, 3329, 3333, 3337, 3342, 3346, 3350, 3354, 3358, 3362, 3366, 3370, + 3374, 3378, 3382, 3386, 3390, 3393, 3395, 3398, 3402, 3405, 3407, 3410, + 3414, 3419, 3422, 3424, 3427, 3431, 3433, 3435, 3437, 3439, 3441, 3444, + 3448, 3451, 3453, 3456, 3460, 3465, 3468, 3470, 3473, 3477, 3479, 3481, + 3483, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3485, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 3489, 3492, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 3495, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3498, 3501, 3504, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3507, 0, + 0, 0, 0, 3510, 0, 0, 3513, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 3516, 0, 3519, 0, 0, 0, 0, 0, 3522, 3525, 0, + 3529, 3532, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3536, 0, 0, + 3539, 0, 0, 3542, 0, 3545, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 3548, 0, 3551, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3554, + 3557, 3560, 3563, 3566, 0, 0, 3569, 3572, 0, 0, 3575, 3578, 0, 0, 0, 0, + 0, 0, 3581, 3584, 0, 0, 3587, 3590, 0, 0, 3593, 3596, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 3599, 3602, 3605, 3608, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3611, 3614, 3617, 3620, 0, 0, 0, 0, + 0, 0, 3623, 3626, 3629, 3632, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3635, + 3637, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 3639, 3641, 3643, 3645, 3647, 3649, 3651, 3653, 3655, 3657, 3660, 3663, + 3666, 3669, 3672, 3675, 3678, 3681, 3684, 3687, 3690, 3694, 3698, 3702, + 3706, 3710, 3714, 3718, 3722, 3726, 3731, 3736, 3741, 3746, 3751, 3756, + 3761, 3766, 3771, 3776, 3781, 3784, 3787, 3790, 3793, 3796, 3799, 3802, + 3805, 3808, 3812, 3816, 3820, 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, 3958, 3960, 3962, 3964, 3966, 3968, 3970, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 4062, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 4067, 4071, 4074, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4081, 4083, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -3859,41 +4056,12 @@ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4085, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3622, 3624, 3626, - 3628, 3630, 3632, 3634, 3636, 3638, 3640, 3643, 3646, 3649, 3652, 3655, - 3658, 3661, 3664, 3667, 3670, 3673, 3677, 3681, 3685, 3689, 3693, 3697, - 3701, 3705, 3709, 3714, 3719, 3724, 3729, 3734, 3739, 3744, 3749, 3754, - 3759, 3764, 3767, 3770, 3773, 3776, 3779, 3782, 3785, 3788, 3791, 3795, - 3799, 3803, 3807, 3811, 3815, 3819, 3823, 3827, 3831, 3835, 3839, 3843, - 3847, 3851, 3855, 3859, 3863, 3867, 3871, 3875, 3879, 3883, 3887, 3891, - 3895, 3899, 3903, 3907, 3911, 3915, 3919, 3923, 3927, 3931, 3935, 3939, - 3941, 3943, 3945, 3947, 3949, 3951, 3953, 3955, 3957, 3959, 3961, 3963, - 3965, 3967, 3969, 3971, 3973, 3975, 3977, 3979, 3981, 3983, 3985, 3987, - 3989, 3991, 3993, 3995, 3997, 3999, 4001, 4003, 4005, 4007, 4009, 4011, - 4013, 4015, 4017, 4019, 4021, 4023, 4025, 4027, 4029, 4031, 4033, 4035, - 4037, 4039, 4041, 4043, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4045, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 4050, 4054, 4057, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4061, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 4064, 4066, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -3901,435 +4069,458 @@ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4087, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4068, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 4089, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4091, 4093, 4095, 4097, 4099, + 4101, 4103, 4105, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 4519, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4521, 0, 4523, 4525, 4527, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4529, 0, 4532, 0, 4535, 0, 4538, + 0, 4541, 0, 4544, 0, 4547, 0, 4550, 0, 4553, 0, 4556, 0, 4559, 0, 4562, + 0, 0, 4565, 0, 4568, 0, 4571, 0, 0, 0, 0, 0, 0, 4574, 4577, 0, 4580, + 4583, 0, 4586, 4589, 0, 4592, 4595, 0, 4598, 4601, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4604, 0, 0, 0, 0, 0, 0, + 4607, 4610, 0, 4613, 4616, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4619, 0, + 4622, 0, 4625, 0, 4628, 0, 4631, 0, 4634, 0, 4637, 0, 4640, 0, 4643, 0, + 4646, 0, 4649, 0, 4652, 0, 0, 4655, 0, 4658, 0, 4661, 0, 0, 0, 0, 0, 0, + 4664, 4667, 0, 4670, 4673, 0, 4676, 4679, 0, 4682, 4685, 0, 4688, 4691, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4694, + 0, 0, 4697, 4700, 4703, 4706, 0, 0, 0, 4709, 4712, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4715, 4717, 4719, + 4721, 4723, 4725, 4727, 4729, 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, 0, 0, 0, 4903, 4905, 4907, + 4909, 4911, 4913, 4915, 4917, 4919, 4921, 4923, 4925, 4927, 4929, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4931, + 4935, 4939, 4943, 4947, 4951, 4955, 4959, 4963, 4967, 4971, 4975, 4979, + 4983, 4987, 4992, 4997, 5002, 5007, 5012, 5017, 5022, 5027, 5032, 5037, + 5042, 5047, 5052, 5057, 5062, 5070, 0, 5077, 5081, 5085, 5089, 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, 5223, 5225, 5227, 0, 0, + 0, 0, 0, 0, 0, 0, 5229, 5233, 5236, 5239, 5242, 5245, 5248, 5251, 5254, + 5257, 5260, 5263, 5266, 5269, 5272, 5275, 5278, 5280, 5282, 5284, 5286, + 5288, 5290, 5292, 5294, 5296, 5298, 5300, 5302, 5304, 5306, 5309, 5312, + 5315, 5318, 5321, 5324, 5327, 5330, 5333, 5336, 5339, 5342, 5345, 5348, + 5354, 5359, 0, 5362, 5364, 5366, 5368, 5370, 5372, 5374, 5376, 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, 5463, 5466, 5469, 5472, 5475, 5478, 5481, + 5484, 5487, 5490, 5493, 5496, 5499, 5502, 5505, 5508, 5511, 5514, 5517, + 5520, 5523, 5526, 5529, 5532, 5536, 5540, 5544, 5547, 5551, 5554, 5558, + 5560, 5562, 5564, 5566, 5568, 5570, 5572, 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, 0, 5652, + 5657, 5662, 5667, 5671, 5676, 5680, 5684, 5690, 5695, 5699, 5703, 5707, + 5712, 5717, 5721, 5725, 5728, 5732, 5737, 5742, 5745, 5751, 5758, 5764, + 5768, 5774, 5780, 5785, 5789, 5793, 5797, 5802, 5808, 5813, 5817, 5821, + 5825, 5828, 5831, 5834, 5837, 5841, 5845, 5851, 5855, 5860, 5866, 5870, + 5873, 5876, 5882, 5887, 5893, 5897, 5903, 5906, 5910, 5914, 5918, 5922, + 5926, 5931, 5935, 5938, 5942, 5946, 5950, 5955, 5959, 5963, 5967, 5973, + 5978, 5981, 5987, 5990, 5995, 6000, 6004, 6008, 6012, 6017, 6020, 6024, + 6029, 6032, 6038, 6042, 6045, 6048, 6051, 6054, 6057, 6060, 6063, 6066, + 6069, 6072, 6076, 6080, 6084, 6088, 6092, 6096, 6100, 6104, 6108, 6112, + 6116, 6120, 6124, 6128, 6132, 6136, 6139, 6142, 6146, 6149, 6152, 6155, + 6159, 6163, 6166, 6169, 6172, 6175, 6178, 6183, 6186, 6189, 6192, 6195, + 6198, 6201, 6204, 6207, 6211, 6216, 6219, 6222, 6225, 6228, 6231, 6234, + 6237, 6241, 6245, 6249, 6253, 6256, 6259, 6262, 6265, 6268, 6271, 6274, + 6277, 6280, 6283, 6287, 6291, 6294, 6298, 6302, 6306, 6309, 6313, 6317, + 6322, 6325, 6329, 6333, 6337, 6341, 6347, 6354, 6357, 6360, 6363, 6366, + 6369, 6372, 6375, 6378, 6381, 6384, 6387, 6390, 6393, 6396, 6399, 6402, + 6405, 6408, 6413, 6416, 6419, 6422, 6427, 6431, 6434, 6437, 6440, 6443, + 6446, 6449, 6452, 6455, 6458, 6461, 6465, 6468, 6471, 6475, 6479, 6482, + 6487, 6491, 6494, 6497, 6500, 6503, 6507, 6511, 6514, 6517, 6520, 6523, + 6526, 6529, 6532, 6535, 6538, 6542, 6546, 6550, 6554, 6558, 6562, 6566, + 6570, 6574, 6578, 6582, 6586, 6590, 6594, 6598, 6602, 6606, 6610, 6614, + 6618, 6622, 6626, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6630, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 4070, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4072, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 4074, 4076, 4078, 4080, 4082, 4084, 4086, 4088, - 4090, 4092, 4094, 4096, 4098, 4100, 4102, 4104, 4106, 4108, 4110, 4112, - 4114, 4116, 4118, 4120, 4122, 4124, 4126, 4128, 4130, 4132, 4134, 4136, - 4138, 4140, 4142, 4144, 4146, 4148, 4150, 4152, 4154, 4156, 4158, 4160, - 4162, 4164, 4166, 4168, 4170, 4172, 4174, 4176, 4178, 4180, 4182, 4184, - 4186, 4188, 4190, 4192, 4194, 4196, 4198, 4200, 4202, 4204, 4206, 4208, - 4210, 4212, 4214, 4216, 4218, 4220, 4222, 4224, 4226, 4228, 4230, 4232, - 4234, 4236, 4238, 4240, 4242, 4244, 4246, 4248, 4250, 4252, 4254, 4256, - 4258, 4260, 4262, 4264, 4266, 4268, 4270, 4272, 4274, 4276, 4278, 4280, - 4282, 4284, 4286, 4288, 4290, 4292, 4294, 4296, 4298, 4300, 4302, 4304, - 4306, 4308, 4310, 4312, 4314, 4316, 4318, 4320, 4322, 4324, 4326, 4328, - 4330, 4332, 4334, 4336, 4338, 4340, 4342, 4344, 4346, 4348, 4350, 4352, - 4354, 4356, 4358, 4360, 4362, 4364, 4366, 4368, 4370, 4372, 4374, 4376, - 4378, 4380, 4382, 4384, 4386, 4388, 4390, 4392, 4394, 4396, 4398, 4400, - 4402, 4404, 4406, 4408, 4410, 4412, 4414, 4416, 4418, 4420, 4422, 4424, - 4426, 4428, 4430, 4432, 4434, 4436, 4438, 4440, 4442, 4444, 4446, 4448, - 4450, 4452, 4454, 4456, 4458, 4460, 4462, 4464, 4466, 4468, 4470, 4472, - 4474, 4476, 4478, 4480, 4482, 4484, 4486, 4488, 4490, 4492, 4494, 4496, - 4498, 4500, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4502, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 4504, 0, 4506, 4508, 4510, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 4512, 0, 4515, 0, 4518, 0, 4521, 0, 4524, 0, 4527, - 0, 4530, 0, 4533, 0, 4536, 0, 4539, 0, 4542, 0, 4545, 0, 0, 4548, 0, - 4551, 0, 4554, 0, 0, 0, 0, 0, 0, 4557, 4560, 0, 4563, 4566, 0, 4569, - 4572, 0, 4575, 4578, 0, 4581, 4584, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4587, 0, 0, 0, 0, 0, 0, 4590, 4593, 0, - 4596, 4599, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4602, 0, 4605, 0, 4608, - 0, 4611, 0, 4614, 0, 4617, 0, 4620, 0, 4623, 0, 4626, 0, 4629, 0, 4632, - 0, 4635, 0, 0, 4638, 0, 4641, 0, 4644, 0, 0, 0, 0, 0, 0, 4647, 4650, 0, - 4653, 4656, 0, 4659, 4662, 0, 4665, 4668, 0, 4671, 4674, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4677, 0, 0, 4680, - 4683, 4686, 4689, 0, 0, 0, 4692, 4695, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4698, 4700, 4702, 4704, 4706, - 4708, 4710, 4712, 4714, 4716, 4718, 4720, 4722, 4724, 4726, 4728, 4730, - 4732, 4734, 4736, 4738, 4740, 4742, 4744, 4746, 4748, 4750, 4752, 4754, - 4756, 4758, 4760, 4762, 4764, 4766, 4768, 4770, 4772, 4774, 4776, 4778, - 4780, 4782, 4784, 4786, 4788, 4790, 4792, 4794, 4796, 4798, 4800, 4802, - 4804, 4806, 4808, 4810, 4812, 4814, 4816, 4818, 4820, 4822, 4824, 4826, - 4828, 4830, 4832, 4834, 4836, 4838, 4840, 4842, 4844, 4846, 4848, 4850, - 4852, 4854, 4856, 4858, 4860, 4862, 4864, 4866, 4868, 4870, 4872, 4874, - 4876, 4878, 4880, 4882, 4884, 0, 0, 0, 4886, 4888, 4890, 4892, 4894, - 4896, 4898, 4900, 4902, 4904, 4906, 4908, 4910, 4912, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4914, 4918, 4922, - 4926, 4930, 4934, 4938, 4942, 4946, 4950, 4954, 4958, 4962, 4966, 4970, - 4975, 4980, 4985, 4990, 4995, 5000, 5005, 5010, 5015, 5020, 5025, 5030, - 5035, 5040, 5045, 5053, 0, 5060, 5064, 5068, 5072, 5076, 5080, 5084, - 5088, 5092, 5096, 5100, 5104, 5108, 5112, 5116, 5120, 5124, 5128, 5132, - 5136, 5140, 5144, 5148, 5152, 5156, 5160, 5164, 5168, 5172, 5176, 5180, - 5184, 5188, 5192, 5196, 5200, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5204, - 5208, 5211, 5214, 5217, 5220, 5223, 5226, 5229, 5232, 5235, 5238, 5241, - 5244, 5247, 5250, 5253, 5255, 5257, 5259, 5261, 5263, 5265, 5267, 5269, - 5271, 5273, 5275, 5277, 5279, 5281, 5284, 5287, 5290, 5293, 5296, 5299, - 5302, 5305, 5308, 5311, 5314, 5317, 5320, 5323, 5329, 5334, 0, 5337, - 5339, 5341, 5343, 5345, 5347, 5349, 5351, 5353, 5355, 5357, 5359, 5361, - 5363, 5365, 5367, 5369, 5371, 5373, 5375, 5377, 5379, 5381, 5383, 5385, - 5387, 5389, 5391, 5393, 5395, 5397, 5399, 5401, 5403, 5405, 5407, 5409, - 5411, 5413, 5415, 5417, 5419, 5421, 5423, 5425, 5427, 5429, 5431, 5433, - 5435, 5438, 5441, 5444, 5447, 5450, 5453, 5456, 5459, 5462, 5465, 5468, - 5471, 5474, 5477, 5480, 5483, 5486, 5489, 5492, 5495, 5498, 5501, 5504, - 5507, 5511, 5515, 5519, 5522, 5526, 5529, 5533, 5535, 5537, 5539, 5541, - 5543, 5545, 5547, 5549, 5551, 5553, 5555, 5557, 5559, 5561, 5563, 5565, - 5567, 5569, 5571, 5573, 5575, 5577, 5579, 5581, 5583, 5585, 5587, 5589, - 5591, 5593, 5595, 5597, 5599, 5601, 5603, 5605, 5607, 5609, 5611, 5613, - 5615, 5617, 5619, 5621, 5623, 5625, 0, 5627, 5632, 5637, 5642, 5646, - 5651, 5655, 5659, 5665, 5670, 5674, 5678, 5682, 5687, 5692, 5696, 5700, - 5703, 5707, 5712, 5717, 5720, 5726, 5733, 5739, 5743, 5749, 5755, 5760, - 5764, 5768, 5772, 5777, 5783, 5788, 5792, 5796, 5800, 5803, 5806, 5809, - 5812, 5816, 5820, 5826, 5830, 5835, 5841, 5845, 5848, 5851, 5857, 5862, - 5868, 5872, 5878, 5881, 5885, 5889, 5893, 5897, 5901, 5906, 5910, 5913, - 5917, 5921, 5925, 5930, 5934, 5938, 5942, 5948, 5953, 5956, 5962, 5965, - 5970, 5975, 5979, 5983, 5987, 5992, 5995, 5999, 6004, 6007, 6013, 6017, - 6020, 6023, 6026, 6029, 6032, 6035, 6038, 6041, 6044, 6047, 6051, 6055, - 6059, 6063, 6067, 6071, 6075, 6079, 6083, 6087, 6091, 6095, 6099, 6103, - 6107, 6111, 6114, 6117, 6121, 6124, 6127, 6130, 6134, 6138, 6141, 6144, - 6147, 6150, 6153, 6158, 6161, 6164, 6167, 6170, 6173, 6176, 6179, 6182, - 6186, 6191, 6194, 6197, 6200, 6203, 6206, 6209, 6212, 6216, 6220, 6224, - 6228, 6231, 6234, 6237, 6240, 6243, 6246, 6249, 6252, 6255, 6258, 6262, - 6266, 6269, 6273, 6277, 6281, 6284, 6288, 6292, 6297, 6300, 6304, 6308, - 6312, 6316, 6322, 6329, 6332, 6335, 6338, 6341, 6344, 6347, 6350, 6353, - 6356, 6359, 6362, 6365, 6368, 6371, 6374, 6377, 6380, 6383, 6388, 6391, - 6394, 6397, 6402, 6406, 6409, 6412, 6415, 6418, 6421, 6424, 6427, 6430, - 6433, 6436, 6440, 6443, 6446, 6450, 6454, 6457, 6462, 6466, 6469, 6472, - 6475, 6478, 6482, 6486, 6489, 6492, 6495, 6498, 6501, 6504, 6507, 6510, - 6513, 6517, 6521, 6525, 6529, 6533, 6537, 6541, 6545, 6549, 6553, 6557, - 6561, 6565, 6569, 6573, 6577, 6581, 6585, 6589, 6593, 6597, 6601, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6605, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6607, 6609, 6611, 6613, - 6615, 6617, 6619, 6621, 6623, 6625, 6627, 6629, 6631, 6633, 6635, 6637, - 6639, 6641, 6643, 6645, 6647, 6649, 6651, 6653, 6655, 6657, 6659, 6661, - 6663, 6665, 6667, 6669, 6671, 6673, 6675, 6677, 6679, 6681, 6683, 6685, - 6687, 6689, 6691, 6693, 6695, 6697, 6699, 6701, 6703, 6705, 6707, 6709, - 6711, 6713, 6715, 6717, 6719, 6721, 6723, 6725, 6727, 6729, 6731, 6733, - 6735, 6737, 6739, 6741, 6743, 6745, 6747, 6749, 6751, 6753, 6755, 6757, - 6759, 6761, 6763, 6765, 6767, 6769, 6771, 6773, 6775, 6777, 6779, 6781, - 6783, 6785, 6787, 6789, 6791, 6793, 6795, 6797, 6799, 6801, 6803, 6805, - 6807, 6809, 6811, 6813, 6815, 6817, 6819, 6821, 6823, 6825, 6827, 6829, - 6831, 6833, 6835, 6837, 6839, 6841, 6843, 6845, 6847, 6849, 6851, 6853, - 6855, 6857, 6859, 6861, 6863, 6865, 6867, 6869, 6871, 6873, 6875, 6877, - 6879, 6881, 6883, 6885, 6887, 6889, 6891, 6893, 6895, 6897, 6899, 6901, - 6903, 6905, 6907, 6909, 6911, 6913, 6915, 6917, 6919, 6921, 6923, 6925, - 6927, 6929, 6931, 6933, 6935, 6937, 6939, 6941, 6943, 6945, 6947, 6949, - 6951, 6953, 6955, 6957, 6959, 6961, 6963, 6965, 6967, 6969, 6971, 6973, - 6975, 6977, 6979, 6981, 6983, 6985, 6987, 6989, 6991, 6993, 6995, 6997, - 6999, 7001, 7003, 7005, 7007, 7009, 7011, 7013, 7015, 7017, 7019, 7021, - 7023, 7025, 7027, 7029, 7031, 7033, 7035, 7037, 7039, 7041, 7043, 7045, - 7047, 7049, 7051, 7053, 7055, 7057, 7059, 7061, 7063, 7065, 7067, 7069, - 7071, 7073, 7075, 7077, 7079, 7081, 7083, 7085, 7087, 7089, 7091, 7093, - 7095, 7097, 7099, 7101, 7103, 7105, 7107, 7109, 7111, 7113, 7115, 7117, - 7119, 7121, 7123, 7125, 7127, 7129, 7131, 7133, 7135, 7137, 7139, 7141, - 7143, 7145, 0, 0, 7147, 0, 7149, 0, 0, 7151, 7153, 7155, 7157, 7159, - 7161, 7163, 7165, 7167, 7169, 0, 7171, 0, 7173, 0, 0, 7175, 7177, 0, 0, - 0, 7179, 7181, 7183, 7185, 0, 0, 7187, 7189, 7191, 7193, 7195, 7197, - 7199, 7201, 7203, 7205, 7207, 7209, 7211, 7213, 7215, 7217, 7219, 7221, - 7223, 7225, 7227, 7229, 7231, 7233, 7235, 7237, 7239, 7241, 7243, 7245, - 7247, 7249, 7251, 7253, 7255, 7257, 7259, 7261, 7263, 7265, 7267, 7269, - 7271, 7273, 7275, 7277, 7279, 7281, 7283, 7285, 7287, 7289, 7291, 7293, - 7295, 7297, 7299, 7301, 7303, 0, 0, 0, 0, 0, 7305, 7307, 7309, 7311, - 7313, 7315, 7317, 7319, 7321, 7323, 7325, 7327, 7329, 7331, 7333, 7335, - 7337, 7339, 7341, 7343, 7345, 7347, 7349, 7351, 7353, 7355, 7357, 7359, - 7361, 7363, 7365, 7367, 7369, 7371, 7373, 7375, 7377, 7379, 7381, 7383, - 7385, 7387, 7389, 7391, 7393, 7395, 7397, 7399, 7401, 7403, 7405, 7407, - 7409, 7411, 7413, 7415, 7417, 7419, 7421, 7423, 7425, 7427, 7429, 7431, - 7433, 7435, 7437, 7439, 7441, 7443, 7445, 7447, 7449, 7451, 7453, 7455, - 7457, 7459, 7461, 7463, 7465, 7467, 7469, 7471, 7473, 7475, 7477, 7479, - 7481, 7483, 7485, 7487, 7489, 7491, 7493, 7495, 7497, 7499, 7501, 7503, - 7505, 7507, 7509, 7511, 7513, 7515, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 7517, 7520, 7523, 7526, 7530, 7534, 7537, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 7540, 7543, 7546, 7549, 7552, 0, 0, 0, 0, 0, 7555, 0, 7558, - 7561, 7563, 7565, 7567, 7569, 7571, 7573, 7575, 7577, 7579, 7581, 7584, - 7587, 7590, 7593, 7596, 7599, 7602, 7605, 7608, 7611, 7614, 7617, 0, - 7620, 7623, 7626, 7629, 7632, 0, 7635, 0, 7638, 7641, 0, 7644, 7647, 0, - 7650, 7653, 7656, 7659, 7662, 7665, 7668, 7671, 7674, 7677, 7680, 7682, - 7684, 7686, 7688, 7690, 7692, 7694, 7696, 7698, 7700, 7702, 7704, 7706, - 7708, 7710, 7712, 7714, 7716, 7718, 7720, 7722, 7724, 7726, 7728, 7730, - 7732, 7734, 7736, 7738, 7740, 7742, 7744, 7746, 7748, 7750, 7752, 7754, - 7756, 7758, 7760, 7762, 7764, 7766, 7768, 7770, 7772, 7774, 7776, 7778, - 7780, 7782, 7784, 7786, 7788, 7790, 7792, 7794, 7796, 7798, 7800, 7802, - 7804, 7806, 7808, 7810, 7812, 7814, 7816, 7818, 7820, 7822, 7824, 7826, - 7828, 7830, 7832, 7834, 7836, 7838, 7840, 7842, 7844, 7846, 7848, 7850, - 7852, 7854, 7856, 7858, 7860, 7862, 7864, 7866, 7868, 7870, 7872, 7874, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 7876, 7878, 7880, 7882, 7884, 7886, 7888, - 7890, 7892, 7894, 7896, 7898, 7900, 7902, 7904, 7906, 7908, 7910, 7912, - 7914, 7916, 7918, 7920, 7922, 7925, 7928, 7931, 7934, 7937, 7940, 7943, - 7946, 7949, 7952, 7955, 7958, 7961, 7964, 7967, 7970, 7973, 7976, 7978, - 7980, 7982, 7984, 7987, 7990, 7993, 7996, 7999, 8002, 8005, 8008, 8011, - 8014, 8017, 8020, 8023, 8026, 8029, 8032, 8035, 8038, 8041, 8044, 8047, - 8050, 8053, 8056, 8059, 8062, 8065, 8068, 8071, 8074, 8077, 8080, 8083, - 8086, 8089, 8092, 8095, 8098, 8101, 8104, 8107, 8110, 8113, 8116, 8119, - 8122, 8125, 8128, 8131, 8134, 8137, 8140, 8143, 8146, 8149, 8152, 8155, - 8158, 8161, 8164, 8167, 8170, 8173, 8176, 8179, 8182, 8185, 8188, 8191, - 8194, 8197, 8200, 8203, 8206, 8209, 8212, 8215, 8218, 8221, 8224, 8227, - 8230, 8233, 8236, 8239, 8242, 8245, 8248, 8251, 8254, 8257, 8260, 8263, - 8266, 8270, 8274, 8278, 8282, 8286, 8290, 8293, 8296, 8299, 8302, 8305, - 8308, 8311, 8314, 8317, 8320, 8323, 8326, 8329, 8332, 8335, 8338, 8341, - 8344, 8347, 8350, 8353, 8356, 8359, 8362, 8365, 8368, 8371, 8374, 8377, - 8380, 8383, 8386, 8389, 8392, 8395, 8398, 8401, 8404, 8407, 8410, 8413, - 8416, 8419, 8422, 8425, 8428, 8431, 8434, 8437, 8440, 8443, 8446, 8449, - 8452, 8455, 8458, 8461, 8464, 8467, 8470, 8473, 8476, 8479, 8482, 8485, - 8488, 8491, 8494, 8497, 8500, 8503, 8506, 8509, 8512, 8515, 8518, 8521, - 8524, 8527, 8530, 8533, 8536, 8539, 8542, 8545, 8548, 8551, 8554, 8557, - 8560, 8563, 8566, 8569, 8572, 8575, 8578, 8581, 8584, 8587, 8590, 8593, - 8596, 8599, 8602, 8605, 8608, 8611, 8614, 8617, 8620, 8623, 8626, 8629, - 8632, 8635, 8638, 8641, 8644, 8647, 8650, 8653, 8656, 8659, 8662, 8665, - 8668, 8671, 8674, 8677, 8680, 8683, 8686, 8689, 8692, 8695, 8698, 8701, - 8704, 8707, 8710, 8713, 8716, 8720, 8724, 8728, 8731, 8734, 8737, 8740, - 8743, 8746, 8749, 8752, 8755, 8758, 8761, 8764, 8767, 8770, 8773, 8776, - 8779, 8782, 8785, 8788, 8791, 8794, 8797, 8800, 8803, 8806, 8809, 8812, - 8815, 8818, 8821, 8824, 8827, 8830, 8833, 8836, 8839, 8842, 8845, 8848, - 8851, 8854, 8857, 8860, 8863, 8866, 8869, 8872, 8875, 8878, 8881, 8884, - 8887, 8890, 8893, 8896, 8899, 8902, 8905, 8908, 8911, 8914, 8917, 8920, - 8923, 8926, 8929, 8932, 8935, 8938, 8941, 8944, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8947, 8951, 8955, 8959, 8963, 8967, 8971, - 8975, 8979, 8983, 8987, 8991, 8995, 8999, 9003, 9007, 9011, 9015, 9019, - 9023, 9027, 9031, 9035, 9039, 9043, 9047, 9051, 9055, 9059, 9063, 9067, - 9071, 9075, 9079, 9083, 9087, 9091, 9095, 9099, 9103, 9107, 9111, 9115, - 9119, 9123, 9127, 9131, 9135, 9139, 9143, 9147, 9151, 9155, 9159, 9163, - 9167, 9171, 9175, 9179, 9183, 9187, 9191, 9195, 9199, 0, 0, 9203, 9207, - 9211, 9215, 9219, 9223, 9227, 9231, 9235, 9239, 9243, 9247, 9251, 9255, - 9259, 9263, 9267, 9271, 9275, 9279, 9283, 9287, 9291, 9295, 9299, 9303, - 9307, 9311, 9315, 9319, 9323, 9327, 9331, 9335, 9339, 9343, 9347, 9351, - 9355, 9359, 9363, 9367, 9371, 9375, 9379, 9383, 9387, 9391, 9395, 9399, - 9403, 9407, 9411, 9415, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 9419, 9423, 9427, 9432, 9437, 9442, 9447, 9452, 9457, 9462, 9466, 9485, - 9494, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9499, - 9501, 9503, 9505, 9507, 9509, 9511, 9513, 9515, 9517, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9519, 9521, 9523, 9525, - 9527, 9529, 9531, 9533, 9535, 9537, 9539, 9541, 9543, 9545, 9547, 9549, - 9551, 9553, 9555, 9557, 9559, 0, 0, 9561, 9563, 9565, 9567, 9569, 9571, - 9573, 9575, 9577, 9579, 9581, 9583, 0, 9585, 9587, 9589, 9591, 9593, - 9595, 9597, 9599, 9601, 9603, 9605, 9607, 9609, 9611, 9613, 9615, 9617, - 9619, 9621, 0, 9623, 9625, 9627, 9629, 0, 0, 0, 0, 9631, 9634, 9637, 0, - 9640, 0, 9643, 9646, 9649, 9652, 9655, 9658, 9661, 9664, 9667, 9670, - 9673, 9675, 9677, 9679, 9681, 9683, 9685, 9687, 9689, 9691, 9693, 9695, - 9697, 9699, 9701, 9703, 9705, 9707, 9709, 9711, 9713, 9715, 9717, 9719, - 9721, 9723, 9725, 9727, 9729, 9731, 9733, 9735, 9737, 9739, 9741, 9743, - 9745, 9747, 9749, 9751, 9753, 9755, 9757, 9759, 9761, 9763, 9765, 9767, - 9769, 9771, 9773, 9775, 9777, 9779, 9781, 9783, 9785, 9787, 9789, 9791, - 9793, 9795, 9797, 9799, 9801, 9803, 9805, 9807, 9809, 9811, 9813, 9815, - 9817, 9819, 9821, 9823, 9825, 9827, 9829, 9831, 9833, 9835, 9837, 9839, - 9841, 9843, 9845, 9847, 9849, 9851, 9853, 9855, 9857, 9859, 9861, 9863, - 9865, 9867, 9869, 9871, 9873, 9875, 9877, 9879, 9881, 9883, 9885, 9887, - 9889, 9891, 9893, 9895, 9897, 9899, 9901, 9903, 9905, 9907, 9910, 9913, - 9916, 9919, 9922, 9925, 9928, 0, 0, 0, 0, 9931, 9933, 9935, 9937, 9939, - 9941, 9943, 9945, 9947, 9949, 9951, 9953, 9955, 9957, 9959, 9961, 9963, - 9965, 9967, 9969, 9971, 9973, 9975, 9977, 9979, 9981, 9983, 9985, 9987, - 9989, 9991, 9993, 9995, 9997, 9999, 10001, 10003, 10005, 10007, 10009, - 10011, 10013, 10015, 10017, 10019, 10021, 10023, 10025, 10027, 10029, - 10031, 10033, 10035, 10037, 10039, 10041, 10043, 10045, 10047, 10049, - 10051, 10053, 10055, 10057, 10059, 10061, 10063, 10065, 10067, 10069, - 10071, 10073, 10075, 10077, 10079, 10081, 10083, 10085, 10087, 10089, - 10091, 10093, 10095, 10097, 10099, 10101, 10103, 10105, 10107, 10109, - 10111, 10113, 10115, 10117, 10119, 10121, 10123, 10125, 10127, 10129, - 10131, 10133, 10135, 10137, 10139, 10141, 10143, 10145, 10147, 10149, - 10151, 10153, 10155, 10157, 10159, 10161, 10163, 10165, 10167, 10169, - 10171, 10173, 10175, 10177, 10179, 10181, 10183, 10185, 10187, 10189, - 10191, 10193, 10195, 10197, 10199, 10201, 10203, 10205, 10207, 10209, - 10211, 10213, 10215, 10217, 10219, 10221, 10223, 10225, 10227, 10229, - 10231, 10233, 10235, 10237, 10239, 10241, 10243, 10245, 10247, 10249, - 10251, 10253, 10255, 10257, 10259, 10261, 10263, 10265, 10267, 10269, - 10271, 10273, 10275, 10277, 10279, 10281, 10283, 10285, 10287, 10289, - 10291, 10293, 10295, 10297, 10299, 10301, 10303, 10305, 10307, 10309, 0, - 0, 0, 10311, 10313, 10315, 10317, 10319, 10321, 0, 0, 10323, 10325, - 10327, 10329, 10331, 10333, 0, 0, 10335, 10337, 10339, 10341, 10343, - 10345, 0, 0, 10347, 10349, 10351, 0, 0, 0, 10353, 10355, 10357, 10359, - 10361, 10363, 10365, 0, 10367, 10369, 10371, 10373, 10375, 10377, 10379, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10381, 10384, 10387, 10390, - 10393, 10396, 10399, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10402, - 10405, 10408, 10411, 10414, 10417, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 10420, 10422, 10424, 10426, 10428, 10430, 10432, 10434, 10436, - 10438, 10440, 10442, 10444, 10446, 10448, 10450, 10452, 10454, 10456, - 10458, 10460, 10462, 10464, 10466, 10468, 10470, 10472, 10474, 10476, - 10478, 10480, 10482, 10484, 10486, 10488, 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, 0, 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, 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, 0, 10732, 10734, 0, 0, - 10736, 0, 0, 10738, 10740, 0, 0, 10742, 10744, 10746, 10748, 0, 10750, - 10752, 10754, 10756, 10758, 10760, 10762, 10764, 10766, 10768, 10770, - 10772, 0, 10774, 0, 10776, 10778, 10780, 10782, 10784, 10786, 10788, 0, - 10790, 10792, 10794, 10796, 10798, 10800, 10802, 10804, 10806, 10808, - 10810, 10812, 10814, 10816, 10818, 10820, 10822, 10824, 10826, 10828, - 10830, 10832, 10834, 10836, 10838, 10840, 10842, 10844, 10846, 10848, - 10850, 10852, 10854, 10856, 10858, 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, 0, 10920, 10922, 10924, 10926, 0, 0, - 10928, 10930, 10932, 10934, 10936, 10938, 10940, 10942, 0, 10944, 10946, - 10948, 10950, 10952, 10954, 10956, 0, 10958, 10960, 10962, 10964, 10966, - 10968, 10970, 10972, 10974, 10976, 10978, 10980, 10982, 10984, 10986, - 10988, 10990, 10992, 10994, 10996, 10998, 11000, 11002, 11004, 11006, - 11008, 11010, 11012, 0, 11014, 11016, 11018, 11020, 0, 11022, 11024, - 11026, 11028, 11030, 0, 11032, 0, 0, 0, 11034, 11036, 11038, 11040, - 11042, 11044, 11046, 0, 11048, 11050, 11052, 11054, 11056, 11058, 11060, - 11062, 11064, 11066, 11068, 11070, 11072, 11074, 11076, 11078, 11080, - 11082, 11084, 11086, 11088, 11090, 11092, 11094, 11096, 11098, 11100, - 11102, 11104, 11106, 11108, 11110, 11112, 11114, 11116, 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, 0, 0, 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, 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, 0, 0, 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, 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, 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, 12544, 12546, 12548, 12550, 12552, 12554, 12556, - 12558, 12560, 12562, 12564, 12566, 12568, 12570, 12572, 12574, 12576, - 12578, 12580, 12582, 12584, 12586, 12588, 12590, 12592, 12594, 12596, - 12598, 12600, 12602, 12604, 12606, 12608, 12610, 12612, 12614, 12616, - 12618, 12620, 12622, 12624, 12626, 12628, 12630, 12632, 12634, 12636, - 12638, 12640, 12642, 12644, 12646, 12648, 12650, 12652, 12654, 12656, - 12658, 12660, 12662, 12664, 12666, 12668, 12670, 12672, 12674, 12676, - 12678, 12680, 12682, 12684, 12686, 12688, 12690, 12692, 12694, 12696, - 12698, 12700, 12702, 12704, 12706, 12708, 12710, 12712, 12714, 12716, - 12718, 12720, 12722, 12724, 12726, 12728, 12730, 12732, 12734, 12736, - 12738, 12740, 12742, 12744, 12746, 12748, 12750, 12752, 12754, 12756, - 12758, 12760, 12762, 12764, 12766, 12768, 12770, 12772, 12774, 12776, - 12778, 12780, 12782, 12784, 12786, 12788, 12790, 12792, 12794, 12796, - 12798, 12800, 12802, 12804, 12806, 12808, 12810, 12812, 12814, 12816, - 12818, 12820, 12822, 12824, 12826, 12828, 12830, 12832, 12834, 12836, - 12838, 12840, 12842, 12844, 12846, 12848, 12850, 12852, 12854, 12856, - 12858, 12860, 12862, 12864, 12866, 12868, 12870, 12872, 12874, 12876, - 12878, 12880, 12882, 12884, 12886, 12888, 12890, 12892, 12894, 12896, - 12898, 12900, 12902, 12904, 12906, 12908, 12910, 12912, 12914, 12916, - 12918, 12920, 12922, 12924, 12926, 12928, 12930, 12932, 12934, 12936, - 12938, 12940, 12942, 12944, 12946, 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, 13002, 13004, 13006, 13008, 13010, 13012, 13014, 13016, - 13018, 13020, 13022, 13024, 13026, 13028, 13030, 13032, 13034, 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, 13122, 13124, 13126, 13128, 13130, 13132, 13134, 13136, - 13138, 13140, 13142, 13144, 13146, 13148, 13150, 13152, 13154, 13156, - 13158, 13160, 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, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 6632, 6634, 6636, 6638, 6640, 6642, 6644, 6646, 6648, 6650, 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, 0, 0, 7172, 0, 7174, 0, 0, 7176, + 7178, 7180, 7182, 7184, 7186, 7188, 7190, 7192, 7194, 0, 7196, 0, 7198, + 0, 0, 7200, 7202, 0, 0, 0, 7204, 7206, 7208, 7210, 0, 0, 7212, 7214, + 7216, 7218, 7220, 7222, 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, + 0, 0, 7336, 7338, 7340, 7342, 7344, 7346, 7348, 7350, 7352, 7354, 7356, + 7358, 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, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7548, 7551, 7554, 7557, 7561, 7565, + 7568, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7571, 7574, 7577, 7580, 7583, + 0, 0, 0, 0, 0, 7586, 0, 7589, 7592, 7594, 7596, 7598, 7600, 7602, 7604, + 7606, 7608, 7610, 7612, 7615, 7618, 7621, 7624, 7627, 7630, 7633, 7636, + 7639, 7642, 7645, 7648, 0, 7651, 7654, 7657, 7660, 7663, 0, 7666, 0, + 7669, 7672, 0, 7675, 7678, 0, 7681, 7684, 7687, 7690, 7693, 7696, 7699, + 7702, 7705, 7708, 7711, 7713, 7715, 7717, 7719, 7721, 7723, 7725, 7727, + 7729, 7731, 7733, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7907, 7909, + 7911, 7913, 7915, 7917, 7919, 7921, 7923, 7925, 7927, 7929, 7931, 7933, + 7935, 7937, 7939, 7941, 7943, 7945, 7947, 7949, 7951, 7953, 7956, 7959, + 7962, 7965, 7968, 7971, 7974, 7977, 7980, 7983, 7986, 7989, 7992, 7995, + 7998, 8001, 8004, 8007, 8009, 8011, 8013, 8015, 8018, 8021, 8024, 8027, + 8030, 8033, 8036, 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, 8301, 8305, 8309, 8313, 8317, 8321, + 8324, 8327, 8330, 8333, 8336, 8339, 8342, 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, 8751, 8755, + 8759, 8762, 8765, 8768, 8771, 8774, 8777, 8780, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8978, 8982, + 8986, 8990, 8994, 8998, 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, 0, 0, 9234, 9238, 9242, 9246, 9250, 9254, 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, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9450, 9454, 9458, 9463, 9468, 9473, 9478, + 9483, 9488, 9493, 9497, 9516, 9525, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 9530, 9532, 9534, 9536, 9538, 9540, 9542, 9544, + 9546, 9548, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 9550, 9552, 9554, 9556, 9558, 9560, 9562, 9564, 9566, 9568, 9570, + 9572, 9574, 9576, 9578, 9580, 9582, 9584, 9586, 9588, 9590, 0, 0, 9592, + 9594, 9596, 9598, 9600, 9602, 9604, 9606, 9608, 9610, 9612, 9614, 0, + 9616, 9618, 9620, 9622, 9624, 9626, 9628, 9630, 9632, 9634, 9636, 9638, + 9640, 9642, 9644, 9646, 9648, 9650, 9652, 0, 9654, 9656, 9658, 9660, 0, + 0, 0, 0, 9662, 9665, 9668, 0, 9671, 0, 9674, 9677, 9680, 9683, 9686, + 9689, 9692, 9695, 9698, 9701, 9704, 9706, 9708, 9710, 9712, 9714, 9716, + 9718, 9720, 9722, 9724, 9726, 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, 9941, 9944, 9947, 9950, 9953, 9956, 9959, 0, 0, 0, 0, + 9962, 9964, 9966, 9968, 9970, 9972, 9974, 9976, 9978, 9980, 9982, 9984, + 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, 0, 0, 0, 10342, 10344, + 10346, 10348, 10350, 10352, 0, 0, 10354, 10356, 10358, 10360, 10362, + 10364, 0, 0, 10366, 10368, 10370, 10372, 10374, 10376, 0, 0, 10378, + 10380, 10382, 0, 0, 0, 10384, 10386, 10388, 10390, 10392, 10394, 10396, + 0, 10398, 10400, 10402, 10404, 10406, 10408, 10410, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10412, 0, + 10415, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10418, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 10421, 10424, 10427, 10430, 10433, 10436, 10439, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10442, 10445, 10448, 10451, 10454, 10457, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10460, 10462, 10464, 10466, + 10468, 10470, 10472, 10474, 10476, 10478, 10480, 10482, 10484, 10486, + 10488, 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, 0, 10630, 10632, 10634, 10636, 10638, 10640, 10642, 10644, 10646, + 10648, 10650, 10652, 10654, 10656, 10658, 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, 0, 10772, 10774, 0, 0, 10776, 0, 0, 10778, 10780, 0, 0, + 10782, 10784, 10786, 10788, 0, 10790, 10792, 10794, 10796, 10798, 10800, + 10802, 10804, 10806, 10808, 10810, 10812, 0, 10814, 0, 10816, 10818, + 10820, 10822, 10824, 10826, 10828, 0, 10830, 10832, 10834, 10836, 10838, + 10840, 10842, 10844, 10846, 10848, 10850, 10852, 10854, 10856, 10858, + 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, 0, + 10960, 10962, 10964, 10966, 0, 0, 10968, 10970, 10972, 10974, 10976, + 10978, 10980, 10982, 0, 10984, 10986, 10988, 10990, 10992, 10994, 10996, + 0, 10998, 11000, 11002, 11004, 11006, 11008, 11010, 11012, 11014, 11016, + 11018, 11020, 11022, 11024, 11026, 11028, 11030, 11032, 11034, 11036, + 11038, 11040, 11042, 11044, 11046, 11048, 11050, 11052, 0, 11054, 11056, + 11058, 11060, 0, 11062, 11064, 11066, 11068, 11070, 0, 11072, 0, 0, 0, + 11074, 11076, 11078, 11080, 11082, 11084, 11086, 0, 11088, 11090, 11092, + 11094, 11096, 11098, 11100, 11102, 11104, 11106, 11108, 11110, 11112, + 11114, 11116, 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, 0, 0, 11768, 11770, + 11772, 11774, 11776, 11778, 11780, 11782, 11784, 11786, 11788, 11790, + 11792, 11794, 11796, 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, 0, + 0, 12352, 12354, 12356, 12358, 12360, 12362, 12364, 12366, 12368, 12370, + 12372, 12374, 12376, 12378, 12380, 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, 12455, 12458, 12461, 12464, 12467, 12470, 12473, 12476, 12479, + 12482, 0, 0, 0, 0, 0, 12485, 12489, 12493, 12497, 12501, 12505, 12509, + 12513, 12517, 12521, 12525, 12529, 12533, 12537, 12541, 12545, 12549, + 12553, 12557, 12561, 12565, 12569, 12573, 12577, 12581, 12585, 12589, + 12593, 12595, 12597, 12600, 0, 0, 12603, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 12605, 0, 12607, 0, 0, 12609, 0, 0, 0, 12611, 0, 0, 0, 12613, 12616, + 12619, 12622, 12625, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 12629, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12632, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12635, 12637, 12639, 12641, 12643, 12645, + 12647, 12649, 12651, 12653, 12655, 12657, 12659, 12661, 12663, 12665, + 12667, 12669, 12671, 12673, 12675, 12677, 12679, 12681, 12683, 12685, + 12687, 12689, 12691, 12693, 12695, 12697, 12699, 12701, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 12703, 12707, 12711, 12715, 12719, 12723, 12727, + 12731, 12735, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12739, 12741, + 12743, 12745, 12747, 12749, 12751, 12753, 12755, 12757, 12759, 12761, + 12763, 12765, 12767, 12769, 12771, 12773, 12775, 12777, 12779, 12781, + 12783, 12785, 12787, 12789, 12791, 12793, 12795, 12797, 12799, 12801, + 12803, 12805, 12807, 12809, 12811, 12813, 12815, 12817, 12819, 12821, + 12823, 12825, 12827, 12829, 12831, 12833, 12835, 12837, 12839, 12841, + 12843, 12845, 12847, 12849, 12851, 12853, 12855, 12857, 12859, 12861, + 12863, 12865, 12867, 12869, 12871, 12873, 12875, 12877, 12879, 12881, + 12883, 12885, 12887, 12889, 12891, 12893, 12895, 12897, 12899, 12901, + 12903, 12905, 12907, 12909, 12911, 12913, 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, 12969, 12971, 12973, 12975, 12977, 12979, 12981, + 12983, 12985, 12987, 12989, 12991, 12993, 12995, 12997, 12999, 13001, + 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, 13089, 13091, 13093, 13095, 13097, 13099, 13101, + 13103, 13105, 13107, 13109, 13111, 13113, 13115, 13117, 13119, 13121, + 13123, 13125, 13127, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -4339,352 +4530,390 @@ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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 3 +#define COMP_SHIFT 2 static unsigned short comp_index[] = { - 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 3, 0, 0, 0, 4, 5, 6, 7, - 0, 0, 0, 8, 0, 9, 10, 0, 0, 11, 12, 13, 14, 0, 0, 0, 0, 15, 16, 17, 0, 0, - 0, 18, 19, 20, 21, 0, 0, 0, 22, 0, 0, 0, 0, 0, 23, 24, 25, 26, 0, 0, 0, - 27, 28, 29, 30, 0, 0, 0, 31, 32, 33, 34, 0, 0, 0, 35, 0, 0, 0, 0, 0, 36, - 0, 37, 38, 39, 0, 0, 40, 41, 42, 43, 0, 0, 0, 44, 45, 46, 0, 0, 0, 0, 47, - 48, 49, 50, 0, 0, 51, 52, 53, 54, 0, 0, 0, 55, 56, 0, 0, 0, 0, 0, 57, 58, - 59, 60, 0, 0, 0, 61, 62, 63, 0, 0, 0, 0, 64, 65, 66, 67, 0, 0, 68, 69, - 70, 71, 0, 0, 0, 72, 0, 73, 0, 0, 0, 0, 74, 0, 75, 0, 0, 0, 0, 76, 0, 0, - 0, 0, 0, 77, 78, 79, 0, 0, 0, 0, 80, 81, 82, 83, 0, 0, 0, 84, 85, 86, 0, - 0, 0, 0, 87, 88, 0, 89, 0, 0, 90, 91, 0, 92, 0, 0, 0, 0, 93, 94, 95, 0, - 0, 0, 96, 97, 98, 99, 0, 0, 0, 100, 0, 0, 0, 0, 0, 101, 102, 0, 103, 0, - 0, 0, 104, 105, 106, 107, 0, 0, 0, 108, 109, 110, 111, 0, 0, 0, 112, 113, - 0, 0, 0, 0, 114, 115, 116, 117, 0, 0, 0, 118, 119, 120, 121, 0, 0, 0, - 122, 0, 123, 0, 0, 0, 124, 125, 126, 127, 128, 0, 0, 129, 130, 131, 132, - 0, 0, 0, 133, 134, 0, 0, 0, 0, 0, 135, 136, 137, 138, 0, 0, 139, 140, - 141, 142, 0, 0, 0, 0, 143, 144, 145, 0, 0, 0, 146, 147, 148, 149, 0, 0, - 0, 150, 0, 151, 0, 0, 0, 152, 153, 154, 0, 0, 0, 0, 0, 155, 0, 0, 0, 0, - 0, 156, 157, 158, 0, 0, 0, 0, 159, 160, 161, 162, 0, 0, 163, 0, 0, 0, - 164, 0, 0, 165, 166, 0, 0, 0, 0, 0, 167, 0, 0, 0, 0, 0, 0, 168, 0, 0, 0, - 0, 0, 169, 170, 0, 0, 0, 0, 0, 171, 0, 0, 0, 0, 0, 0, 172, 173, 0, 0, 0, - 0, 0, 174, 0, 0, 0, 0, 0, 175, 176, 0, 0, 0, 0, 0, 177, 178, 0, 0, 0, 0, - 0, 179, 0, 0, 0, 0, 0, 0, 180, 0, 0, 0, 0, 0, 181, 182, 183, 0, 0, 0, 0, - 184, 185, 0, 0, 0, 0, 0, 186, 0, 0, 0, 0, 0, 0, 187, 0, 0, 0, 0, 0, 188, - 189, 0, 0, 0, 0, 0, 190, 0, 0, 0, 0, 0, 0, 191, 192, 0, 0, 0, 0, 0, 193, - 0, 0, 0, 0, 0, 194, 195, 0, 0, 0, 0, 0, 196, 197, 0, 0, 0, 0, 0, 198, 0, - 0, 0, 0, 0, 0, 199, 0, 0, 0, 0, 0, 200, 201, 202, 0, 0, 0, 0, 203, 204, - 0, 0, 0, 0, 0, 205, 206, 0, 0, 0, 0, 0, 207, 0, 0, 0, 0, 0, 208, 0, 0, 0, - 0, 0, 0, 209, 0, 0, 0, 0, 0, 0, 210, 0, 0, 0, 0, 0, 0, 211, 0, 0, 0, 0, - 0, 0, 212, 0, 0, 0, 0, 0, 0, 213, 0, 0, 0, 0, 0, 0, 214, 0, 0, 0, 0, 0, - 215, 0, 0, 0, 0, 0, 216, 0, 0, 0, 0, 0, 0, 0, 217, 0, 0, 0, 0, 0, 0, 218, - 0, 0, 0, 0, 0, 219, 0, 0, 0, 0, 0, 220, 221, 222, 0, 0, 0, 0, 223, 224, - 225, 0, 0, 0, 0, 226, 227, 228, 0, 0, 0, 0, 229, 230, 231, 0, 0, 0, 0, 0, - 232, 0, 0, 0, 0, 0, 233, 0, 0, 0, 0, 0, 234, 0, 0, 0, 0, 0, 0, 235, 0, 0, - 0, 0, 0, 0, 236, 0, 0, 0, 0, 0, 0, 237, 0, 0, 0, 0, 0, 238, 0, 0, 0, 0, - 0, 0, 239, 0, 0, 0, 0, 0, 0, 240, 0, 0, 0, 0, 0, 0, 241, 0, 0, 0, 0, 0, - 242, 0, 243, 244, 0, 0, 0, 245, 246, 0, 0, 0, 0, 247, 0, 248, 0, 249, 0, - 0, 250, 251, 252, 0, 0, 0, 0, 253, 0, 254, 0, 0, 0, 0, 0, 255, 0, 0, 0, - 0, 256, 257, 258, 0, 0, 0, 0, 259, 0, 260, 0, 261, 0, 0, 0, 0, 0, 262, 0, - 0, 0, 0, 0, 0, 263, 0, 0, 264, 265, 266, 0, 267, 0, 0, 268, 0, 269, 0, 0, - 0, 0, 270, 0, 271, 272, 0, 0, 0, 273, 274, 0, 275, 0, 0, 276, 0, 277, 0, - 0, 0, 0, 0, 0, 278, 0, 0, 0, 0, 279, 280, 281, 282, 0, 0, 0, 283, 284, 0, - 285, 0, 0, 286, 0, 0, 0, 287, 0, 0, 288, 0, 0, 0, 289, 0, 0, 0, 0, 0, - 290, 0, 0, 0, 291, 0, 0, 0, 0, 0, 0, 292, 0, 0, 0, 0, 0, 0, 293, 0, 0, 0, - 0, 0, 294, 0, 0, 0, 0, 0, 0, 295, 0, 0, 0, 0, 0, 0, 296, 0, 0, 0, 0, 0, - 0, 297, 0, 0, 0, 0, 0, 298, 299, 0, 0, 0, 0, 0, 300, 0, 0, 0, 0, 0, 0, - 301, 0, 0, 0, 0, 0, 0, 302, 0, 0, 0, 0, 0, 0, 303, 0, 0, 0, 0, 0, 304, 0, - 0, 0, 0, 0, 0, 305, 0, 0, 0, 0, 0, 0, 306, 0, 0, 0, 0, 0, 307, 0, 0, 0, - 0, 0, 0, 308, 0, 0, 0, 0, 0, 0, 309, 0, 0, 0, 0, 0, 0, 310, 0, 0, 0, 0, - 0, 311, 312, 0, 0, 0, 0, 0, 313, 0, 0, 0, 0, 0, 0, 314, 0, 0, 0, 0, 0, 0, - 315, 0, 0, 0, 0, 0, 0, 316, 0, 0, 0, 0, 0, 317, 0, 0, 0, 0, 0, 0, 318, 0, - 0, 0, 0, 0, 0, 319, 0, 0, 0, 0, 0, 0, 320, 0, 0, 0, 0, 0, 0, 321, 0, 0, - 0, 0, 0, 322, 0, 0, 0, 0, 0, 0, 323, 0, 0, 0, 0, 0, 0, 324, 0, 0, 0, 0, - 0, 325, 0, 0, 0, 0, 0, 0, 0, 0, 0, 326, 0, 0, 0, 0, 0, 0, 327, 0, 0, 0, - 0, 0, 0, 328, 0, 0, 0, 0, 0, 329, 0, 0, 0, 0, 0, 0, 330, 0, 0, 0, 0, 0, - 0, 331, 0, 0, 0, 0, 0, 0, 332, 0, 0, 0, 0, 0, 0, 333, 0, 0, 0, 0, 0, 334, - 0, 0, 0, 0, 0, 0, 335, 0, 0, 0, 0, 0, 0, 336, 337, 0, 0, 0, 0, 0, 0, 338, - 0, 0, 0, 0, 0, 339, 0, 0, 0, 0, 0, 0, 340, 0, 0, 0, 0, 0, 0, 341, 0, 0, - 0, 0, 0, 0, 342, 0, 0, 0, 0, 0, 0, 343, 0, 0, 0, 0, 0, 344, 0, 0, 0, 0, - 0, 0, 345, 346, 0, 0, 0, 0, 0, 347, 0, 0, 0, 0, 0, 0, 348, 0, 0, 0, 0, 0, - 0, 349, 0, 0, 0, 0, 0, 0, 350, 0, 0, 0, 0, 0, 0, 351, 0, 0, 0, 0, 0, 0, - 352, 0, 0, 0, 0, 0, 353, 0, 0, 0, 0, 0, 0, 354, 0, 0, 0, 0, 0, 0, 355, 0, - 0, 0, 0, 0, 0, 356, 0, 0, 0, 0, 0, 357, 0, 0, 0, 0, 0, 0, 358, 0, 0, 0, - 0, 0, 0, 359, 0, 0, 0, 0, 0, 0, 360, 0, 0, 0, 0, 0, 361, 362, 0, 0, 0, 0, - 0, 0, 363, 0, 0, 0, 0, 0, 0, 364, 0, 0, 0, 0, 0, 0, 365, 0, 0, 0, 0, 0, - 0, 366, 0, 0, 0, 0, 0, 367, 0, 0, 0, 0, 0, 0, 368, 0, 0, 0, 0, 0, 369, - 370, 0, 0, 0, 0, 0, 371, 0, 0, 0, 0, 0, 0, 372, 0, 0, 0, 0, 0, 0, 373, 0, - 0, 0, 0, 0, 374, 0, 0, 0, 0, 0, 0, 375, 0, 0, 376, 0, 0, 0, 377, 0, 0, - 378, 0, 0, 0, 0, 0, 0, 379, 0, 0, 0, 0, 0, 0, 380, 0, 0, 0, 0, 0, 381, 0, - 0, 0, 0, 0, 0, 382, 0, 0, 0, 0, 0, 0, 383, 0, 0, 0, 0, 0, 0, 384, 0, 0, - 385, 0, 0, 386, 0, 0, 0, 387, 0, 0, 388, 0, 0, 0, 0, 0, 0, 389, 0, 0, 0, - 0, 0, 0, 390, 0, 0, 0, 0, 0, 391, 0, 0, 0, 0, 0, 0, 392, 0, 0, 0, 0, 0, - 0, 393, 0, 0, 0, 0, 0, 0, 394, 0, 0, 395, 0, 0, 0, 0, 0, 0, 396, 0, 0, 0, - 0, 0, 397, 0, 0, 0, 0, 0, 0, 398, 0, 0, 0, 0, 0, 0, 399, 0, 0, 400, 0, 0, - 0, 401, 0, 0, 402, 0, 0, 0, 0, 0, 0, 403, 0, 0, 0, 0, 0, 0, 404, 0, 0, 0, - 0, 0, 405, 0, 0, 0, 0, 0, 0, 406, 0, 0, 0, 0, 0, 0, 407, 0, 0, 0, 0, 0, - 0, 408, 0, 0, 409, 0, 0, 410, 0, 0, 0, 411, 0, 0, 412, 0, 0, 0, 0, 0, 0, - 413, 0, 0, 0, 0, 0, 0, 414, 0, 0, 0, 0, 0, 415, 0, 0, 0, 0, 0, 0, 416, 0, - 0, 0, 0, 0, 0, 417, 0, 0, 0, 0, 0, 0, 418, 0, 0, 419, 0, 0, 420, 0, 0, 0, - 421, 0, 0, 422, 0, 0, 423, 0, 0, 0, 424, 0, 0, 425, 0, 0, 0, 426, 0, 0, - 427, 0, 0, 0, 0, 0, 0, 428, 0, 0, 0, 0, 0, 429, 0, 0, 0, 0, 0, 0, 430, 0, - 0, 0, 0, 0, 0, 431, 0, 0, 432, 0, 0, 0, 433, 0, 0, 434, 0, 0, 435, 0, 0, - 0, 436, 0, 0, 437, 0, 0, 0, 438, 0, 0, 439, 0, 0, 440, 0, 0, 0, 0, 0, 0, - 441, 0, 0, 0, 0, 0, 0, 442, 0, 0, 0, 0, 0, 0, 443, 0, 0, 0, 0, 0, 444, 0, - 0, 0, 0, 0, 0, 445, 0, 0, 0, 0, 0, 0, 446, 0, 0, 447, 0, 0, 0, 448, 0, 0, - 449, 0, 0, 450, 0, 0, 0, 0, 0, 0, 451, 0, 0, 0, 0, 0, 0, 452, 0, 0, 0, 0, - 0, 0, 453, 0, 0, 0, 0, 0, 454, 0, 0, 0, 0, 0, 0, 455, 0, 0, 0, 0, 0, 0, - 456, 0, 0, 0, 0, 0, 0, 457, 0, 0, 0, 0, 0, 458, 0, 0, 0, 0, 0, 0, 459, 0, - 0, 0, 0, 0, 0, 460, 0, 0, 461, 0, 0, 0, 462, 0, 0, 0, 0, 0, 463, 0, 0, 0, - 0, 0, 0, 464, 0, 0, 465, 0, 0, 0, 466, 0, 0, 0, 0, 0, 467, 0, 0, 0, 0, 0, - 0, 468, 0, 0, 0, 0, 0, 0, 469, 0, 0, 0, 0, 0, 0, 470, 0, 0, 0, 0, 0, 471, - 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, 475, 0, 0, 0, 0, 0, 0, 476, 0, 0, 0, 0, 0, 0, 477, 0, 0, 0, - 0, 0, 0, 478, 0, 0, 0, 0, 0, 479, 0, 0, 0, 0, 0, 0, 480, 0, 0, 0, 0, 0, - 0, 481, 0, 0, 0, 0, 0, 0, 482, 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, 486, 0, 0, 0, 0, 0, 487, 0, 0, - 0, 0, 0, 0, 488, 0, 0, 0, 0, 0, 0, 489, 0, 0, 0, 0, 0, 0, 490, 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, 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, 499, 0, 0, 0, 0, 0, 0, 500, 0, 0, - 0, 0, 0, 0, 501, 0, 0, 0, 0, 0, 0, 502, 0, 0, 0, 0, 0, 503, 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, - 507, 0, 0, 0, 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, 512, 0, 0, 0, 0, 0, 0, - 513, 0, 0, 0, 0, 0, 0, 514, 0, 0, 0, 0, 0, 0, 515, 0, 0, 0, 0, 0, 516, 0, - 0, 0, 0, 0, 0, 517, 0, 0, 0, 0, 0, 0, 518, 0, 0, 0, 0, 0, 0, 519, 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, 524, 0, 0, 0, 0, 0, 0, 525, 0, 0, 0, 0, 0, 0, - 526, 0, 0, 0, 0, 0, 0, 527, 0, 0, 0, 0, 0, 528, 0, 0, 0, 0, 0, 0, 529, 0, - 0, 0, 0, 0, 0, 530, 0, 0, 0, 0, 0, 0, 531, 0, 0, 0, 0, 0, 532, 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, 536, 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, 540, 0, 0, 0, 0, 0, 0, 541, 0, 0, 0, 0, 0, 0, 542, 0, - 0, 0, 0, 0, 0, 543, 0, 0, 0, 0, 0, 544, 0, 0, 0, 0, 0, 0, 545, 0, 0, 0, - 0, 0, 0, 546, 0, 0, 0, 0, 0, 0, 547, 0, 0, 0, 0, 0, 548, 0, 0, 0, 0, 0, - 0, 549, 0, 0, 0, 0, 0, 0, 550, 0, 0, 0, 0, 0, 0, 551, 0, 0, 0, 0, 0, 552, - 0, 0, 0, 0, 0, 0, 553, 0, 0, 0, 0, 0, 0, 554, 0, 0, 0, 0, 0, 0, 555, + 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, 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, 19, 20, 21, 22, 0, 0, 0, + 0, 0, 0, 23, 24, 25, 26, 27, 28, 29, 0, 0, 0, 0, 0, 0, 0, 0, 30, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 31, 32, 33, 0, 0, 34, 0, 0, 0, 0, 0, 0, 0, 0, + 35, 36, 37, 38, 39, 40, 0, 0, 0, 0, 0, 0, 0, 41, 42, 43, 44, 45, 46, 47, + 0, 0, 0, 0, 0, 0, 0, 48, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 49, 0, + 50, 0, 51, 52, 53, 0, 0, 0, 0, 0, 0, 54, 0, 0, 55, 56, 57, 58, 59, 0, 0, + 0, 0, 0, 0, 60, 61, 0, 0, 62, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 64, 65, 0, + 66, 67, 68, 0, 0, 0, 0, 0, 0, 69, 70, 71, 72, 73, 74, 75, 0, 0, 0, 0, 0, + 0, 0, 76, 0, 77, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 78, 79, 0, 80, 81, 82, + 83, 0, 0, 0, 0, 0, 0, 0, 84, 85, 86, 0, 87, 88, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 89, 90, 0, 91, 92, 93, 0, 0, 0, 0, 0, 0, 94, 95, 96, 97, 98, 99, 100, + 0, 0, 0, 0, 0, 0, 0, 0, 101, 0, 0, 102, 0, 0, 0, 0, 0, 0, 0, 0, 0, 103, + 104, 0, 0, 105, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 106, 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, 111, 112, + 0, 113, 114, 0, 115, 0, 0, 0, 0, 0, 0, 0, 116, 117, 118, 119, 120, 121, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 122, 0, 0, 123, 0, 124, 0, 0, 0, 0, 0, 0, 125, + 126, 127, 128, 0, 129, 0, 0, 0, 0, 0, 0, 0, 0, 0, 130, 0, 131, 132, 133, + 134, 0, 0, 0, 0, 0, 0, 0, 135, 136, 137, 138, 139, 140, 141, 0, 0, 0, 0, + 0, 0, 0, 0, 142, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 143, 144, 145, 146, 0, + 147, 0, 0, 0, 0, 0, 0, 0, 0, 148, 149, 150, 151, 152, 153, 154, 0, 0, 0, + 0, 0, 0, 0, 155, 156, 157, 158, 159, 160, 161, 0, 0, 0, 0, 0, 0, 0, 162, + 0, 163, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 164, 0, 0, 165, 166, 167, 0, 168, + 0, 0, 0, 0, 0, 0, 169, 0, 0, 170, 171, 172, 173, 0, 0, 0, 0, 0, 0, 0, + 174, 175, 0, 0, 176, 0, 0, 0, 0, 0, 0, 0, 0, 177, 178, 179, 180, 0, 181, + 182, 183, 0, 0, 0, 0, 0, 0, 184, 185, 186, 187, 188, 0, 189, 0, 0, 0, 0, + 0, 0, 0, 190, 191, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 192, 193, 194, + 195, 196, 197, 198, 0, 0, 0, 0, 0, 0, 0, 199, 200, 201, 0, 202, 203, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 204, 205, 206, 207, 208, 209, 0, 0, 0, 0, 0, 0, + 210, 211, 212, 213, 214, 215, 216, 0, 0, 0, 0, 0, 0, 0, 217, 0, 0, 0, + 218, 0, 0, 0, 0, 0, 0, 0, 0, 219, 220, 221, 222, 0, 223, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 224, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 225, 226, 227, 0, + 228, 0, 0, 0, 0, 0, 0, 0, 0, 0, 229, 230, 231, 0, 232, 0, 233, 0, 0, 0, + 0, 0, 0, 234, 235, 0, 0, 0, 0, 0, 236, 0, 0, 0, 0, 0, 0, 237, 238, 239, + 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, 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, 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, 251, 252, 253, 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, 255, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 256, 257, 0, 258, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 259, 260, 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, 263, 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, 265, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 266, 267, 268, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 269, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 270, 271, 272, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 273, 274, 275, 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, 277, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 278, 279, + 0, 280, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 281, 282, 283, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 284, 285, 286, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 287, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 288, 289, 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, 291, 0, 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, 293, 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, + 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, 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, + 300, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 301, 302, 303, 0, 0, 304, 0, 0, 0, + 0, 0, 0, 0, 0, 305, 306, 307, 0, 308, 0, 0, 0, 0, 0, 0, 0, 0, 0, 309, + 310, 311, 0, 312, 0, 0, 0, 0, 0, 0, 0, 0, 0, 313, 0, 314, 0, 315, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 316, 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, 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, 0, 0, 320, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 321, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 322, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 323, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 324, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 325, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 326, 327, 0, 328, 329, 0, 0, 330, 0, 0, 0, 0, 0, 0, 331, 0, + 0, 332, 0, 0, 0, 0, 0, 0, 0, 0, 0, 333, 334, 0, 0, 335, 0, 0, 0, 336, 0, + 0, 0, 0, 0, 337, 338, 339, 0, 340, 0, 0, 0, 0, 0, 0, 0, 0, 0, 341, 0, 0, + 342, 343, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 344, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 345, 346, 347, 0, 348, 0, 0, 0, 0, 0, 0, 0, 0, 0, 349, 0, 0, 0, + 350, 0, 0, 351, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 352, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 353, 0, 0, 0, 0, 0, 354, 355, 356, 0, 357, 0, + 0, 358, 359, 0, 0, 0, 0, 0, 360, 0, 0, 0, 361, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 362, 0, 0, 363, 364, 0, 0, 365, 0, 0, 0, 0, 0, 0, 366, 367, 0, 368, 0, 0, + 0, 369, 0, 0, 0, 0, 0, 370, 371, 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, 374, 375, 376, 377, 378, 0, 0, + 379, 0, 0, 0, 0, 0, 0, 380, 0, 0, 381, 0, 0, 0, 382, 0, 0, 0, 0, 0, 383, + 384, 0, 0, 0, 0, 0, 385, 0, 0, 0, 0, 0, 0, 386, 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, 389, 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, + 0, 392, 393, 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, 396, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 397, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 398, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 399, 400, 401, 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, 404, + 405, 406, 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, 408, 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, 410, 411, 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, 414, 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, 416, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 417, 418, 419, 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, 422, 423, 424, 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, 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, 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, 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, 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, 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, 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, 0, 440, 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, 442, 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, 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, 0, 446, 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, 0, 0, 0, 0, 0, 0, 0, 449, 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, 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, 456, 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, 458, 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, 460, 0, 0, 0, 0, 0, 0, 0, 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, 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, 467, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 468, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 469, 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, 472, 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, 474, 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, 476, 477, 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, 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, 0, 0, 0, 0, 0, 0, 0, 482, 0, 0, 0, 0, 0, 0, 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, 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, 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, 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, 0, 0, 0, 0, 0, 0, 0, 497, 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, 499, 0, 0, 0, 0, 0, 0, + 0, 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, 502, 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, 0, 0, 0, 0, 0, 0, 505, + 506, 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, 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, 0, 0, 0, 0, 0, 0, 0, 512, 0, 0, 0, 0, 0, + 0, 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, 517, 0, 0, 0, 0, 0, 0, + 518, 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, 0, 0, 0, 0, 0, 0, 0, 522, 0, 0, 0, 0, 0, 0, 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, 527, 0, 0, 0, 0, 0, 0, 528, 0, 0, 0, 0, + 0, 0, 529, 0, 0, 0, 0, 0, 0, 530, 0, 0, 0, 0, 0, 0, 531, 0, 0, 0, 0, 0, + 532, 533, 0, 0, 0, 0, 0, 534, 0, 0, 0, 0, 0, 0, 535, 0, 0, 0, 0, 0, 0, + 536, 0, 0, 0, 0, 0, 0, 537, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 538, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 539, 540, 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, 543, 0, 0, 0, 0, 0, 0, 544, 0, 0, 0, 0, 0, 0, 545, 0, 0, 0, 0, 0, 546, + 547, 0, 0, 0, 0, 0, 548, 0, 0, 0, 0, 0, 0, 549, 0, 0, 0, 0, 0, 0, 550, 0, + 0, 0, 0, 0, 0, 551, 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, 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, 559, 0, 0, 0, 0, 0, 0, 560, 0, 0, 0, 0, 0, 0, + 561, 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, 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, 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, 573, 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, 577, 578, 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, 581, 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, 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, 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, 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, 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, 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, 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, + 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, 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, 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, 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, + 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, 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, 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, 0, 0, 0, 0, 0, 0, 0, 634, 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, 636, 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, + 638, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 639, 640, 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, 642, 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, + 644, 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, 646, 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, 648, 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, 650, 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, 652, 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, + 654, 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, 656, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 657, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 658, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 659, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 660, 661, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 662, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 663, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 664, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 665, 666, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 667, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 668, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 669, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 670, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 671, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 672, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 673, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 674, }; -static unsigned short comp_data[] = { - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8814, 0, 0, 0, 0, 0, 8800, 0, 0, 0, 0, - 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 7682, 0, 0, 7684, 0, 0, 0, 0, 0, 0, - 0, 0, 7686, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 262, 264, 0, 0, 0, 266, - 0, 0, 0, 0, 268, 0, 0, 0, 0, 0, 0, 0, 0, 0, 199, 0, 0, 0, 0, 0, 0, 7690, - 0, 0, 0, 0, 270, 0, 0, 0, 0, 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, 0, 0, 0, 0, - 0, 0, 0, 0, 7710, 0, 0, 0, 0, 0, 0, 0, 0, 500, 284, 0, 7712, 286, 288, 0, - 0, 0, 0, 486, 0, 0, 0, 0, 0, 0, 0, 0, 0, 290, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 292, 0, 0, 0, 7714, 7718, 0, 0, 0, 542, 0, 0, 0, 0, 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, 0, 0, 0, 0, 302, 0, 0, 7724, 0, - 0, 0, 0, 0, 0, 308, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7728, 0, 488, 0, - 0, 0, 0, 0, 7730, 0, 0, 0, 310, 0, 0, 0, 0, 7732, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 313, 0, 0, 0, 0, 0, 0, 0, 0, 0, 317, 0, 0, 0, 0, 0, 7734, 0, - 0, 0, 315, 0, 7740, 0, 0, 7738, 0, 0, 0, 0, 7742, 0, 0, 0, 0, 7744, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 7746, 0, 0, 0, 0, 504, 323, 0, 209, 0, 0, 7748, - 0, 0, 0, 0, 327, 0, 0, 0, 0, 0, 7750, 0, 0, 0, 325, 0, 7754, 0, 0, 7752, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, - 0, 0, 0, 0, 0, 7764, 0, 0, 0, 0, 7766, 0, 0, 0, 0, 0, 0, 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, 0, 0, 346, 348, 0, 0, 0, 7776, 0, 0, 0, 0, 352, 0, 0, - 0, 0, 0, 7778, 0, 0, 536, 350, 0, 0, 0, 0, 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, 0, 0, - 0, 0, 0, 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, 0, 0, 0, 0, 7804, 0, 0, 0, 0, 0, 7806, 0, 0, 0, 0, 7808, 7810, 372, 0, - 0, 0, 7814, 7812, 0, 7816, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7818, 7820, 0, - 0, 0, 0, 0, 0, 7922, 221, 374, 7928, 562, 0, 7822, 376, 7926, 0, 0, 0, 0, - 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, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 7683, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 7685, 7687, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 263, 265, 0, 0, 0, - 267, 0, 0, 0, 0, 269, 0, 231, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 7711, 0, - 0, 0, 0, 0, 0, 0, 0, 501, 285, 0, 7713, 287, 289, 0, 0, 0, 0, 487, 0, - 291, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 309, 0, 0, 0, 0, 0, - 0, 0, 0, 496, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7729, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 489, 0, 0, 0, 0, 0, 7731, 0, 0, 0, 311, 0, 0, 0, 0, 7733, 0, 0, 0, - 0, 314, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 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, 0, - 0, 0, 0, 7765, 0, 0, 0, 0, 7767, 0, 0, 0, 0, 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, 0, 0, 0, 0, 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, 0, 0, 0, 0, 7787, - 7831, 0, 0, 0, 357, 0, 0, 0, 0, 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, 0, - 0, 0, 0, 7805, 0, 0, 0, 0, 0, 7807, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 7809, 7811, 373, 0, 0, 0, 7815, 7813, 0, 7832, 0, 0, 0, 0, 0, 0, 0, 7817, - 0, 0, 7819, 7821, 0, 0, 0, 0, 0, 0, 7923, 253, 375, 7929, 563, 0, 7823, - 255, 7927, 7833, 0, 0, 0, 0, 0, 0, 0, 7925, 0, 0, 0, 0, 0, 378, 7825, 0, - 0, 0, 380, 0, 0, 0, 0, 382, 0, 0, 0, 0, 0, 7827, 0, 0, 0, 0, 0, 0, 0, 0, - 7829, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8173, 901, 0, 0, 8129, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 7846, 7844, 0, 7850, 0, 0, 0, 0, 7848, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 478, 0, 0, 506, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 508, 0, - 0, 482, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7688, 0, 0, 0, 0, 7872, 7870, 0, - 7876, 0, 0, 0, 0, 7874, 0, 0, 0, 0, 0, 0, 7726, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 7890, 7888, 0, 7894, 0, 0, 0, 0, 7892, 0, 0, 0, 0, 0, 0, - 7756, 0, 0, 556, 0, 0, 7758, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 554, 0, 0, - 510, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 475, 471, 0, 0, 469, 0, 0, 0, 0, - 0, 0, 473, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7847, 7845, 0, 7851, 0, 0, 0, 0, - 7849, 0, 0, 0, 0, 0, 0, 0, 0, 0, 479, 0, 0, 507, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 509, 0, 0, 483, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7689, 0, 0, - 0, 0, 7873, 7871, 0, 7877, 0, 0, 0, 0, 7875, 0, 0, 0, 0, 0, 0, 7727, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7891, 7889, 0, 7895, 0, 0, 0, 0, 7893, - 0, 0, 0, 0, 0, 0, 7757, 0, 0, 557, 0, 0, 7759, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 555, 0, 0, 511, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 476, 472, 0, 0, - 470, 0, 0, 0, 0, 0, 0, 474, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7856, 7854, 0, - 7860, 0, 0, 0, 0, 7858, 0, 0, 0, 0, 0, 7857, 7855, 0, 7861, 0, 0, 0, 0, - 7859, 0, 0, 0, 0, 0, 7700, 7702, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 7701, 7703, 0, 0, 0, 0, 7760, 7762, 0, 0, 0, 0, 7761, 7763, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 7780, 0, 0, 0, 0, 0, 7781, 0, 0, 0, 0, 0, 7782, 0, 0, - 0, 0, 0, 7783, 0, 0, 0, 0, 0, 0, 0, 0, 7800, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 7801, 0, 0, 0, 7802, 0, 0, 0, 0, 0, 7803, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 7835, 0, 0, 0, 0, 0, 0, 0, 7900, 7898, 0, 7904, 0, 0, - 0, 0, 7902, 0, 0, 0, 0, 0, 0, 0, 0, 7906, 0, 0, 0, 0, 7901, 7899, 0, - 7905, 0, 0, 0, 0, 7903, 0, 0, 0, 0, 0, 0, 0, 0, 7907, 0, 0, 0, 0, 7914, - 7912, 0, 7918, 0, 0, 0, 0, 7916, 0, 0, 0, 0, 0, 0, 0, 0, 7920, 0, 0, 0, - 0, 7915, 7913, 0, 7919, 0, 0, 0, 0, 7917, 0, 0, 0, 0, 0, 0, 0, 0, 7921, - 0, 0, 0, 0, 0, 0, 0, 494, 0, 0, 0, 0, 0, 0, 492, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 493, 0, 0, 0, 0, 0, 480, 0, 0, 0, 0, 0, 481, 0, 0, 0, 0, - 0, 0, 7708, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7709, 0, 0, 0, 0, 560, - 0, 0, 0, 0, 0, 561, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 495, 0, 0, 8122, - 902, 0, 0, 8121, 8120, 7944, 7945, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 8124, 8136, 904, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7960, 7961, 0, 0, 0, - 0, 0, 0, 8138, 905, 0, 0, 0, 0, 7976, 7977, 0, 0, 0, 0, 0, 8140, 0, 0, 0, - 0, 0, 0, 0, 0, 8154, 906, 0, 0, 8153, 8152, 0, 938, 0, 0, 0, 0, 0, 0, - 7992, 7993, 0, 0, 0, 0, 0, 0, 8184, 908, 0, 0, 0, 0, 8008, 8009, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8172, 0, 0, 0, 0, 0, 0, 8170, 910, 0, 0, - 8169, 8168, 0, 939, 0, 0, 0, 0, 0, 0, 0, 8025, 0, 0, 0, 0, 0, 0, 8186, - 911, 0, 0, 0, 0, 8040, 8041, 0, 0, 0, 0, 0, 8188, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 8116, 0, 0, 0, 0, 0, 8132, 0, 0, 0, 0, 0, 0, 0, 0, 8048, - 940, 0, 0, 8113, 8112, 0, 0, 0, 0, 0, 0, 0, 0, 7936, 7937, 0, 0, 0, 0, - 8118, 8115, 0, 0, 0, 0, 0, 0, 0, 0, 8050, 941, 0, 0, 0, 0, 7952, 7953, 0, - 0, 0, 0, 0, 0, 8052, 942, 0, 0, 0, 0, 7968, 7969, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 8134, 8131, 8054, 943, 0, 0, 8145, 8144, 0, 970, 0, 0, 0, 0, - 0, 0, 7984, 7985, 0, 0, 0, 0, 8150, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8056, 972, - 0, 0, 0, 0, 8000, 8001, 0, 0, 0, 0, 8164, 8165, 0, 0, 0, 0, 0, 0, 8058, - 973, 0, 0, 8161, 8160, 0, 971, 0, 0, 0, 0, 0, 0, 8016, 8017, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 8166, 0, 8060, 974, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 8032, 8033, 0, 0, 0, 0, 8182, 8179, 0, 0, 0, 0, 0, 0, 0, 0, 8146, - 912, 0, 0, 8151, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8162, 944, 0, 0, 8167, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8180, 0, 979, 0, 0, 0, 0, 0, 980, 0, - 0, 0, 0, 0, 1031, 0, 0, 0, 1232, 0, 1234, 0, 0, 0, 0, 0, 0, 0, 1027, 0, - 0, 0, 0, 1024, 0, 0, 0, 0, 1238, 0, 1025, 0, 0, 0, 1217, 0, 1244, 0, 0, - 0, 0, 0, 1246, 0, 0, 0, 0, 0, 0, 1037, 0, 0, 0, 1250, 1049, 0, 1252, 0, - 0, 0, 0, 0, 0, 0, 1036, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1254, 0, 0, - 1262, 1038, 0, 1264, 0, 0, 1266, 0, 0, 1268, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 1272, 0, 0, 0, 0, 0, 1260, 0, 0, 0, 1233, 0, 1235, 0, 0, 0, - 0, 0, 0, 0, 1107, 0, 0, 0, 0, 1104, 0, 0, 0, 0, 1239, 0, 1105, 0, 0, 0, - 1218, 0, 1245, 0, 0, 0, 0, 0, 1247, 0, 0, 0, 0, 0, 0, 1117, 0, 0, 0, - 1251, 1081, 0, 1253, 0, 0, 0, 0, 0, 0, 0, 1116, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 1255, 0, 0, 1263, 1118, 0, 1265, 0, 0, 1267, 0, 0, 1269, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1273, 0, 0, 0, 0, 0, 1261, 0, 0, 0, 0, - 0, 1111, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1142, 0, 0, 0, 0, 0, 1143, 0, 0, - 0, 0, 0, 0, 0, 0, 1242, 0, 0, 0, 0, 0, 1243, 0, 0, 0, 0, 0, 1258, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1259, 0, 0, 0, 0, 1570, 1571, 1573, 0, - 0, 0, 0, 1572, 0, 0, 0, 0, 0, 1574, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1730, 0, 0, 0, 0, 0, 1747, 0, 0, 0, 0, 0, 1728, 0, 0, 0, 0, 0, 0, 0, - 2345, 0, 0, 0, 0, 0, 2353, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2356, - 0, 0, 0, 0, 0, 0, 2507, 2508, 0, 0, 0, 0, 0, 0, 2891, 2888, 2892, 0, 0, - 0, 0, 0, 0, 0, 2964, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3018, 3020, 0, - 0, 0, 0, 3019, 0, 0, 0, 0, 0, 0, 0, 3144, 0, 0, 0, 0, 0, 0, 0, 3264, 0, - 0, 0, 0, 3274, 3271, 3272, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3275, 0, - 0, 0, 0, 0, 0, 0, 3402, 3404, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3403, - 0, 0, 0, 0, 0, 0, 0, 3546, 3548, 3550, 0, 0, 0, 3549, 0, 0, 0, 0, 0, 0, - 0, 0, 4134, 0, 0, 0, 0, 0, 0, 6918, 0, 0, 0, 0, 0, 6920, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 6922, 0, 0, 0, 0, 0, 6924, 0, 0, 0, 0, 0, 6926, - 0, 0, 0, 0, 0, 6930, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6971, 0, 0, - 0, 0, 0, 6973, 0, 0, 0, 0, 0, 6976, 0, 0, 0, 0, 0, 6977, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 6979, 0, 0, 0, 0, 0, 0, 7736, 0, 0, 0, 0, 0, - 7737, 0, 0, 0, 0, 0, 7772, 0, 0, 0, 0, 0, 7773, 0, 0, 0, 0, 0, 0, 0, - 7784, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7785, 0, 7852, 0, 0, 7862, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7853, 0, 0, 7863, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 7878, 0, 0, 0, 0, 0, 7879, 0, 0, 0, 0, 0, 7896, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 7897, 0, 0, 0, 7938, 7940, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 7942, 8064, 7939, 7941, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7943, 8065, - 0, 0, 0, 0, 0, 8066, 0, 0, 0, 0, 0, 8067, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 8068, 0, 0, 0, 0, 0, 8069, 0, 0, 0, 0, 0, 8070, 0, 0, 0, 0, 0, - 8071, 0, 0, 0, 0, 0, 0, 0, 0, 7946, 7948, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 7950, 8072, 7947, 7949, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7951, 8073, 0, 0, - 0, 0, 0, 8074, 0, 0, 0, 0, 0, 8075, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 8076, 0, 0, 0, 0, 0, 8077, 0, 0, 0, 0, 0, 8078, 0, 0, 0, 0, 0, 8079, - 0, 0, 0, 0, 0, 0, 0, 0, 7954, 7956, 0, 0, 0, 0, 7955, 7957, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 7962, 7964, 0, 0, 0, 0, 7963, 7965, 0, 0, 0, 0, - 7970, 7972, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7974, 8080, 7971, 7973, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 7975, 8081, 0, 0, 0, 0, 0, 8082, 0, 0, 0, 0, 0, - 8083, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8084, 0, 0, 0, 0, 0, 8085, - 0, 0, 0, 0, 0, 8086, 0, 0, 0, 0, 0, 8087, 0, 0, 0, 0, 0, 0, 0, 0, 7978, - 7980, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7982, 8088, 7979, 7981, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 7983, 8089, 0, 0, 0, 0, 0, 8090, 0, 0, 0, 0, 0, 8091, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8092, 0, 0, 0, 0, 0, 8093, 0, 0, - 0, 0, 0, 8094, 0, 0, 0, 0, 0, 8095, 0, 0, 0, 0, 0, 0, 0, 0, 7986, 7988, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7990, 0, 7987, 7989, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 7991, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7994, 7996, 0, 0, 7998, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 7995, 7997, 0, 0, 7999, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 8002, 8004, 0, 0, 0, 0, 8003, 8005, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 8010, 8012, 0, 0, 0, 0, 8011, 8013, 0, 0, 0, 0, 8018, 8020, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 8022, 0, 8019, 8021, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 8023, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8027, 8029, 0, 0, 8031, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 8034, 8036, 0, 0, 8038, 8096, 0, 0, 0, 0, 0, 0, 0, 0, 8035, - 8037, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8039, 8097, 0, 0, 0, 0, 0, 8098, 0, - 0, 0, 0, 0, 8099, 0, 0, 0, 0, 0, 8100, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 8101, 0, 0, 0, 0, 0, 8102, 0, 0, 0, 0, 0, 8103, 0, 0, 0, 0, 0, 0, - 0, 0, 8042, 8044, 0, 0, 8046, 8104, 0, 0, 0, 0, 0, 0, 0, 0, 8043, 8045, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8047, 8105, 0, 0, 0, 0, 0, 8106, 0, 0, 0, - 0, 0, 8107, 0, 0, 0, 0, 0, 8108, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 8109, 0, 0, 0, 0, 0, 8110, 0, 0, 0, 0, 0, 8111, 0, 0, 0, 0, 0, 8114, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8130, 0, 0, 0, 0, 0, 8178, 0, 0, 0, - 0, 0, 8119, 0, 0, 0, 0, 0, 0, 0, 0, 8141, 8142, 0, 0, 8143, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8135, 0, 0, 0, 0, 0, 8183, 0, 0, 0, 0, 0, - 0, 0, 0, 8157, 8158, 0, 0, 8159, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 8602, 0, 0, 0, 0, 0, 8603, 0, 0, 0, 0, 0, 8622, 0, 0, 0, 0, 0, 8653, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8655, 0, 0, 0, 0, 0, 8654, 0, 0, 0, - 0, 0, 8708, 0, 0, 0, 0, 0, 8713, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 8716, 0, 0, 0, 0, 0, 8740, 0, 0, 0, 0, 0, 8742, 0, 0, 0, 0, 0, 8769, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8772, 0, 0, 0, 0, 0, 8775, 0, 0, 0, - 0, 0, 8777, 0, 0, 0, 0, 0, 8813, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 8802, 0, 0, 0, 0, 0, 8816, 0, 0, 0, 0, 0, 8817, 0, 0, 0, 0, 0, 8820, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8821, 0, 0, 0, 0, 0, 8824, 0, 0, 0, - 0, 0, 8825, 0, 0, 0, 0, 0, 8832, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 8833, 0, 0, 0, 0, 0, 8928, 0, 0, 0, 0, 0, 8929, 0, 0, 0, 0, 0, 8836, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8837, 0, 0, 0, 0, 0, 8840, 0, 0, 0, - 0, 0, 8841, 0, 0, 0, 0, 0, 8930, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 8931, 0, 0, 0, 0, 0, 8876, 0, 0, 0, 0, 0, 8877, 0, 0, 0, 0, 0, 8878, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8879, 0, 0, 0, 0, 0, 8938, 0, 0, 0, - 0, 0, 8939, 0, 0, 0, 0, 0, 8940, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 8941, 0, 0, 0, 0, 0, 0, 12436, 0, 0, 0, 0, 0, 12364, 0, 0, 0, 0, 0, - 12366, 0, 0, 0, 0, 0, 12368, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 12370, 0, 0, 0, 0, 0, 12372, 0, 0, 0, 0, 0, 12374, 0, 0, 0, 0, 0, 12376, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12378, 0, 0, 0, 0, 0, 12380, 0, 0, - 0, 0, 0, 12382, 0, 0, 0, 0, 0, 12384, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 12386, 0, 0, 0, 0, 0, 12389, 0, 0, 0, 0, 0, 12391, 0, 0, 0, 0, 0, - 12393, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12400, 12401, 0, 0, 0, 0, - 12403, 12404, 0, 0, 0, 0, 12406, 12407, 0, 0, 0, 0, 12409, 12410, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12412, 12413, 0, 0, 0, 0, 12446, 0, 0, 0, - 0, 0, 12532, 0, 0, 0, 0, 0, 12460, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 12462, 0, 0, 0, 0, 0, 12464, 0, 0, 0, 0, 0, 12466, 0, 0, 0, 0, 0, 12468, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12470, 0, 0, 0, 0, 0, 12472, 0, 0, - 0, 0, 0, 12474, 0, 0, 0, 0, 0, 12476, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 12478, 0, 0, 0, 0, 0, 12480, 0, 0, 0, 0, 0, 12482, 0, 0, 0, 0, 0, - 12485, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12487, 0, 0, 0, 0, 0, - 12489, 0, 0, 0, 0, 0, 12496, 12497, 0, 0, 0, 0, 12499, 12500, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 12502, 12503, 0, 0, 0, 0, 12505, 12506, 0, 0, 0, - 0, 12508, 12509, 0, 0, 0, 0, 12535, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 12536, 0, 0, 0, 0, 0, 12537, 0, 0, 0, 0, 0, 12538, 0, 0, 0, 0, 0, - 12542, 0, +static unsigned int comp_data[] = { + 0, 0, 0, 0, 0, 0, 0, 8814, 0, 0, 8800, 0, 0, 8815, 0, 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, 7682, 0, 0, 7684, 0, 0, 0, 0, 7686, 0, 262, + 264, 0, 0, 0, 266, 0, 0, 0, 0, 268, 0, 199, 0, 0, 0, 7690, 0, 0, 0, 0, + 270, 0, 0, 0, 0, 0, 7692, 0, 0, 0, 7696, 0, 7698, 0, 0, 7694, 0, 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, 0, 7710, 0, 500, 284, 0, + 7712, 286, 288, 0, 0, 0, 0, 486, 0, 290, 0, 0, 0, 292, 0, 0, 0, 7714, + 7718, 0, 0, 0, 542, 0, 0, 0, 0, 0, 7716, 0, 0, 0, 7720, 0, 0, 7722, 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, 308, 0, 7728, 0, 0, 0, 0, + 0, 488, 0, 7730, 0, 0, 0, 310, 0, 0, 0, 0, 7732, 0, 0, 0, 0, 0, 313, 0, + 317, 0, 0, 0, 0, 0, 7734, 0, 0, 0, 315, 0, 7740, 0, 0, 7738, 0, 0, 0, 0, + 0, 7742, 0, 0, 0, 0, 7744, 0, 0, 7746, 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, 0, 0, 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, 0, 0, 0, 7764, 7766, 0, 0, 0, 0, 0, + 340, 0, 0, 0, 0, 7768, 344, 528, 530, 0, 0, 0, 7770, 0, 0, 0, 342, 0, 0, + 0, 0, 7774, 0, 346, 348, 0, 0, 0, 7776, 0, 0, 0, 0, 352, 0, 7778, 0, 0, + 536, 350, 0, 0, 0, 7786, 0, 0, 0, 0, 356, 0, 7788, 0, 0, 538, 354, 0, + 7792, 0, 0, 7790, 0, 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, 7804, 0, 0, 0, 0, 0, 7806, 0, 7808, 7810, 372, 0, 0, 0, 7814, 7812, + 0, 7816, 0, 0, 0, 7818, 7820, 0, 0, 0, 7922, 221, 374, 7928, 562, 0, + 7822, 376, 7926, 0, 0, 0, 0, 7924, 0, 0, 377, 7824, 0, 0, 0, 379, 381, 0, + 0, 0, 0, 0, 7826, 0, 0, 0, 0, 7828, 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, 7683, 0, 0, 7685, 0, 0, 0, 0, 7687, 0, 0, 0, 0, 0, 263, 265, 0, 0, 0, + 267, 0, 0, 0, 0, 269, 0, 0, 0, 0, 0, 231, 0, 0, 0, 7691, 271, 0, 0, 0, 0, + 0, 7693, 0, 0, 0, 7697, 0, 7699, 0, 0, 7695, 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, 7711, 0, 0, 0, 0, 0, 501, 285, 0, 7713, 287, + 289, 0, 0, 0, 0, 487, 0, 0, 0, 0, 0, 291, 0, 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, 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, 309, 0, 0, 0, 0, 496, + 0, 0, 0, 0, 7729, 0, 489, 0, 0, 0, 0, 0, 7731, 0, 0, 0, 311, 7733, 0, 0, + 0, 0, 0, 314, 0, 318, 0, 0, 0, 0, 0, 7735, 0, 0, 0, 316, 0, 7741, 0, 0, + 7739, 0, 7743, 0, 0, 0, 0, 7745, 0, 0, 7747, 0, 0, 0, 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, 0, 0, 0, 242, 243, 244, 245, 333, 335, 559, 246, 7887, 0, 337, + 466, 525, 527, 0, 0, 417, 7885, 491, 0, 0, 0, 0, 0, 7765, 0, 0, 0, 0, + 7767, 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, 347, 349, 0, 0, 0, 7777, 0, 0, 0, 0, + 353, 0, 7779, 0, 0, 537, 351, 0, 0, 0, 7787, 7831, 0, 0, 0, 357, 0, 0, 0, + 0, 0, 7789, 0, 0, 539, 355, 0, 7793, 0, 0, 7791, 0, 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, 0, 7805, 0, 7807, 0, 0, + 0, 0, 0, 7809, 7811, 373, 0, 0, 0, 7815, 7813, 0, 7832, 0, 0, 0, 7817, 0, + 0, 0, 7819, 7821, 0, 0, 0, 7923, 253, 375, 7929, 563, 0, 7823, 255, 7927, + 7833, 0, 0, 0, 7925, 0, 0, 378, 7825, 0, 0, 0, 380, 0, 0, 0, 0, 382, 0, + 7827, 0, 0, 0, 0, 7829, 0, 0, 0, 0, 8173, 901, 0, 0, 0, 0, 0, 0, 8129, 0, + 0, 7846, 7844, 0, 7850, 0, 0, 0, 0, 7848, 0, 0, 478, 0, 0, 0, 506, 0, 0, + 508, 0, 0, 482, 0, 0, 0, 7688, 0, 7872, 7870, 0, 7876, 0, 0, 0, 0, 7874, + 0, 0, 0, 7726, 0, 0, 0, 0, 0, 7890, 7888, 0, 7894, 0, 0, 0, 0, 7892, 0, + 0, 0, 7756, 0, 0, 556, 0, 0, 7758, 0, 0, 0, 554, 0, 0, 0, 510, 0, 0, 0, + 0, 0, 475, 471, 0, 0, 469, 0, 0, 473, 0, 0, 0, 7847, 7845, 0, 7851, 0, 0, + 0, 0, 7849, 0, 0, 479, 0, 0, 0, 507, 0, 0, 509, 0, 0, 483, 0, 0, 0, 7689, + 0, 7873, 7871, 0, 7877, 0, 0, 0, 0, 7875, 0, 0, 0, 7727, 0, 0, 0, 0, 0, + 7891, 7889, 0, 7895, 0, 0, 0, 0, 7893, 0, 0, 0, 7757, 0, 0, 557, 0, 0, + 7759, 0, 0, 0, 555, 0, 0, 0, 511, 0, 0, 0, 0, 0, 476, 472, 0, 0, 470, 0, + 0, 474, 0, 0, 0, 7856, 7854, 0, 7860, 0, 0, 0, 0, 7858, 0, 0, 7857, 7855, + 0, 7861, 0, 0, 0, 0, 7859, 0, 0, 7700, 7702, 0, 0, 0, 0, 0, 7701, 7703, + 0, 0, 0, 0, 0, 7760, 7762, 0, 7761, 7763, 0, 0, 0, 7780, 0, 0, 7781, 0, + 0, 7782, 0, 0, 0, 0, 0, 0, 7783, 0, 7800, 0, 0, 7801, 0, 0, 0, 0, 7802, + 0, 0, 7803, 0, 0, 0, 0, 0, 7835, 0, 0, 0, 0, 7900, 7898, 0, 7904, 0, 0, + 0, 0, 7902, 7906, 0, 0, 0, 0, 0, 7901, 7899, 0, 7905, 0, 0, 0, 0, 7903, + 0, 0, 0, 0, 7907, 0, 7914, 7912, 0, 7918, 0, 0, 0, 0, 7916, 0, 0, 0, 0, + 7920, 0, 7915, 7913, 0, 7919, 7917, 0, 0, 0, 0, 7921, 0, 0, 0, 0, 494, 0, + 0, 0, 492, 0, 0, 493, 0, 0, 480, 0, 0, 0, 0, 0, 0, 481, 0, 0, 0, 7708, 0, + 0, 7709, 0, 560, 0, 0, 0, 0, 0, 0, 561, 0, 495, 0, 0, 0, 8122, 902, 0, 0, + 8121, 8120, 0, 0, 0, 0, 7944, 7945, 0, 0, 0, 0, 0, 8124, 0, 8136, 904, 0, + 0, 0, 0, 7960, 7961, 0, 0, 0, 8138, 905, 0, 0, 0, 0, 7976, 7977, 0, 8140, + 0, 0, 0, 0, 0, 8154, 906, 0, 0, 8153, 8152, 0, 938, 0, 0, 7992, 7993, 0, + 0, 0, 8184, 908, 0, 0, 0, 0, 8008, 8009, 0, 0, 0, 0, 0, 0, 8172, 0, 0, 0, + 8170, 910, 0, 0, 8169, 8168, 0, 939, 0, 0, 0, 8025, 0, 0, 0, 8186, 911, + 8040, 8041, 0, 0, 0, 0, 0, 8188, 0, 0, 8116, 0, 0, 8132, 0, 0, 0, 0, 0, + 8048, 940, 0, 0, 8113, 8112, 0, 0, 0, 0, 7936, 7937, 0, 0, 0, 0, 8118, + 8115, 0, 0, 0, 0, 0, 8050, 941, 7952, 7953, 0, 0, 0, 8052, 942, 0, 0, 0, + 0, 7968, 7969, 0, 0, 0, 0, 8134, 8131, 0, 8054, 943, 0, 0, 8145, 8144, 0, + 970, 0, 0, 7984, 7985, 8150, 0, 0, 0, 0, 0, 0, 8056, 972, 0, 0, 0, 0, + 8000, 8001, 0, 8164, 8165, 0, 0, 0, 8058, 973, 0, 0, 8161, 8160, 0, 971, + 0, 0, 0, 0, 0, 0, 8016, 8017, 0, 0, 0, 0, 8166, 0, 0, 8060, 974, 0, 0, 0, + 0, 8032, 8033, 8182, 8179, 0, 0, 0, 0, 0, 8146, 912, 0, 0, 0, 0, 0, 0, + 8151, 0, 0, 8162, 944, 0, 0, 8167, 0, 0, 0, 8180, 0, 0, 979, 0, 0, 0, 0, + 0, 980, 0, 0, 1031, 0, 0, 0, 0, 1232, 0, 1234, 0, 0, 0, 0, 1027, 0, 1024, + 0, 0, 0, 0, 1238, 0, 1025, 1217, 0, 1244, 0, 0, 1246, 0, 0, 0, 1037, 0, + 0, 0, 1250, 1049, 0, 1252, 0, 0, 0, 0, 1036, 0, 0, 0, 0, 1254, 0, 0, 0, + 1262, 1038, 0, 1264, 0, 0, 1266, 0, 0, 0, 1268, 0, 0, 0, 0, 0, 0, 1272, + 0, 0, 1260, 0, 0, 0, 0, 1233, 0, 1235, 0, 0, 0, 0, 1107, 0, 1104, 0, 0, + 0, 0, 1239, 0, 1105, 1218, 0, 1245, 0, 0, 1247, 0, 0, 0, 1117, 0, 0, 0, + 1251, 1081, 0, 1253, 0, 0, 0, 0, 1116, 0, 0, 0, 0, 1255, 0, 0, 0, 1263, + 1118, 0, 1265, 0, 0, 1267, 0, 0, 0, 1269, 0, 0, 0, 0, 0, 0, 1273, 0, 0, + 1261, 0, 0, 1111, 0, 0, 0, 1142, 0, 0, 1143, 0, 0, 0, 0, 0, 1242, 0, 0, + 1243, 0, 0, 1258, 0, 0, 0, 0, 0, 0, 1259, 0, 1570, 1571, 1573, 0, 1572, + 0, 0, 1574, 0, 0, 0, 0, 0, 0, 1730, 0, 0, 1747, 0, 0, 1728, 0, 0, 0, 0, + 2345, 0, 0, 2353, 0, 0, 2356, 0, 0, 0, 2507, 2508, 0, 0, 0, 2891, 2888, + 2892, 2964, 0, 0, 0, 0, 0, 3018, 3020, 0, 3019, 0, 0, 0, 0, 3144, 0, 0, + 0, 0, 3264, 0, 3274, 3271, 3272, 0, 3275, 0, 0, 0, 0, 3402, 3404, 0, + 3403, 0, 0, 0, 0, 3546, 3548, 3550, 0, 0, 0, 0, 3549, 0, 0, 0, 0, 0, + 4134, 0, 0, 0, 6918, 0, 0, 6920, 0, 0, 6922, 0, 0, 6924, 0, 0, 0, 0, 0, + 0, 6926, 0, 0, 6930, 0, 0, 6971, 0, 0, 6973, 0, 0, 0, 0, 0, 0, 6976, 0, + 0, 6977, 0, 0, 6979, 0, 0, 0, 7736, 0, 0, 7737, 0, 0, 0, 0, 0, 0, 7772, + 0, 0, 7773, 0, 0, 0, 0, 7784, 0, 0, 7785, 0, 0, 7852, 0, 0, 7862, 0, 0, + 0, 7853, 0, 0, 7863, 0, 0, 0, 7878, 0, 0, 7879, 0, 0, 7896, 0, 0, 7897, + 0, 0, 0, 0, 7938, 7940, 0, 0, 7942, 8064, 0, 7939, 7941, 0, 0, 7943, + 8065, 0, 0, 8066, 0, 0, 0, 0, 0, 0, 8067, 0, 0, 8068, 0, 0, 8069, 0, 0, + 8070, 0, 0, 0, 0, 0, 0, 8071, 0, 7946, 7948, 0, 0, 7950, 8072, 0, 7947, + 7949, 0, 0, 7951, 8073, 0, 0, 8074, 0, 0, 0, 0, 0, 0, 8075, 0, 0, 8076, + 0, 0, 8077, 0, 0, 8078, 0, 0, 0, 0, 0, 0, 8079, 0, 7954, 7956, 0, 7955, + 7957, 0, 0, 0, 0, 0, 7962, 7964, 0, 0, 0, 0, 0, 7963, 7965, 0, 7970, + 7972, 0, 0, 7974, 8080, 0, 7971, 7973, 0, 0, 7975, 8081, 0, 0, 8082, 0, + 0, 0, 0, 0, 0, 8083, 0, 0, 8084, 0, 0, 8085, 0, 0, 8086, 0, 0, 0, 0, 0, + 0, 8087, 0, 7978, 7980, 0, 0, 7982, 8088, 0, 7979, 7981, 0, 0, 7983, + 8089, 0, 0, 8090, 0, 0, 0, 0, 0, 0, 8091, 0, 0, 8092, 0, 0, 8093, 0, 0, + 8094, 0, 0, 0, 0, 0, 0, 8095, 0, 7986, 7988, 0, 0, 7990, 0, 0, 7987, + 7989, 0, 0, 7991, 0, 0, 0, 0, 0, 0, 7994, 7996, 0, 0, 0, 0, 0, 0, 7998, + 0, 0, 7995, 7997, 0, 0, 7999, 0, 0, 8002, 8004, 0, 8003, 8005, 0, 0, 0, + 0, 0, 8010, 8012, 0, 0, 0, 0, 0, 8011, 8013, 0, 8018, 8020, 0, 0, 8022, + 0, 0, 8019, 8021, 0, 0, 8023, 0, 0, 0, 0, 0, 0, 8027, 8029, 0, 0, 0, 0, + 0, 0, 8031, 0, 0, 8034, 8036, 0, 0, 8038, 8096, 0, 8035, 8037, 0, 0, + 8039, 8097, 0, 0, 8098, 0, 0, 8099, 0, 0, 0, 0, 0, 0, 8100, 0, 0, 8101, + 0, 0, 8102, 0, 0, 8103, 0, 0, 0, 0, 0, 8042, 8044, 0, 0, 8046, 8104, 0, + 8043, 8045, 0, 0, 8047, 8105, 0, 0, 8106, 0, 0, 8107, 0, 0, 0, 0, 0, 0, + 8108, 0, 0, 8109, 0, 0, 8110, 0, 0, 8111, 0, 0, 0, 0, 0, 0, 8114, 0, 0, + 8130, 0, 0, 8178, 0, 0, 8119, 0, 0, 0, 0, 0, 8141, 8142, 0, 0, 8143, 0, + 0, 0, 8135, 0, 0, 8183, 0, 0, 0, 0, 0, 8157, 8158, 0, 0, 0, 0, 0, 0, + 8159, 0, 8602, 0, 0, 8603, 0, 0, 0, 0, 0, 0, 8622, 0, 0, 8653, 0, 0, + 8655, 0, 0, 8654, 0, 0, 0, 0, 0, 0, 8708, 0, 0, 8713, 0, 0, 8716, 0, 0, + 8740, 0, 0, 0, 0, 0, 0, 8742, 0, 0, 8769, 0, 0, 8772, 0, 0, 8775, 0, 0, + 0, 0, 0, 0, 8777, 0, 0, 8813, 0, 0, 8802, 0, 0, 8816, 0, 0, 0, 0, 0, 0, + 8817, 0, 0, 8820, 0, 0, 8821, 0, 0, 8824, 0, 0, 0, 0, 0, 0, 8825, 0, 0, + 8832, 0, 0, 8833, 0, 0, 8928, 0, 0, 0, 0, 0, 0, 8929, 0, 0, 8836, 0, 0, + 8837, 0, 0, 8840, 0, 0, 0, 0, 0, 0, 8841, 0, 0, 8930, 0, 0, 8931, 0, 0, + 8876, 0, 0, 0, 0, 0, 0, 8877, 0, 0, 8878, 0, 0, 8879, 0, 0, 8938, 0, 0, + 0, 0, 0, 0, 8939, 0, 0, 8940, 0, 0, 8941, 0, 0, 0, 12436, 0, 0, 12364, 0, + 0, 0, 0, 0, 0, 12366, 0, 0, 12368, 0, 0, 12370, 0, 0, 12372, 0, 0, 0, 0, + 0, 0, 12374, 0, 0, 12376, 0, 0, 12378, 0, 0, 12380, 0, 0, 0, 0, 0, 0, + 12382, 0, 0, 12384, 0, 0, 12386, 0, 0, 12389, 0, 0, 0, 0, 0, 0, 12391, 0, + 0, 12393, 0, 0, 12400, 12401, 0, 12403, 12404, 0, 0, 0, 0, 0, 12406, + 12407, 0, 0, 0, 0, 0, 12409, 12410, 0, 12412, 12413, 0, 12446, 0, 0, 0, + 0, 0, 0, 12532, 0, 0, 12460, 0, 0, 12462, 0, 0, 12464, 0, 0, 0, 0, 0, 0, + 12466, 0, 0, 12468, 0, 0, 12470, 0, 0, 12472, 0, 0, 0, 0, 0, 0, 12474, 0, + 0, 12476, 0, 0, 12478, 0, 0, 12480, 0, 0, 0, 0, 0, 0, 12482, 0, 0, 12485, + 0, 0, 12487, 0, 0, 12489, 0, 0, 0, 0, 0, 0, 12496, 12497, 0, 0, 0, 0, 0, + 12499, 12500, 0, 12502, 12503, 0, 12505, 12506, 0, 0, 0, 0, 0, 12508, + 12509, 0, 0, 0, 0, 0, 12535, 0, 0, 12536, 0, 0, 12537, 0, 0, 0, 0, 0, 0, + 12538, 0, 0, 12542, 0, 0, 0, 0, 69786, 0, 0, 69788, 0, 0, 69803, }; static const change_record change_records_3_2_0[] = { @@ -4700,6 +4929,11 @@ { 255, 29, 255, 255, 0 }, { 255, 26, 255, 255, 0 }, { 5, 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 }, @@ -4729,42 +4963,42 @@ { 255, 23, 255, 255, 0 }, { 9, 255, 255, 255, 0 }, { 255, 20, 255, 255, 0 }, - { 255, 255, 255, 255, -1 }, { 255, 255, 255, 255, 1e+16 }, { 255, 255, 255, 255, 1e+20 }, { 255, 19, 255, 255, 0 }, { 15, 255, 255, 255, 0 }, { 255, 19, 255, 255, -1 }, + { 1, 255, 255, 0, 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, 2, 2, 14, 15, 16, 17, - 18, 19, 20, 21, 22, 2, 2, 2, 23, 24, 25, 26, 2, 2, 27, 28, 29, 30, 2, 2, - 2, 2, 2, 31, 2, 32, 33, 34, 35, 36, 37, 2, 38, 39, 40, 2, 41, 42, 2, 43, - 2, 2, 44, 45, 46, 47, 48, 2, 2, 49, 50, 51, 2, 2, 52, 53, 2, 54, 55, 55, - 2, 2, 2, 2, 56, 2, 57, 58, 59, 60, 61, 2, 2, 2, 2, 62, 63, 64, 65, 66, - 67, 68, 69, 70, 2, 2, 2, 2, 2, 2, 71, 2, 2, 2, 2, 2, 72, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 73, 2, 74, 2, 2, 2, 2, 2, 2, 2, 2, 75, 76, 2, 2, 2, - 2, 2, 2, 2, 77, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 78, 79, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 80, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 0, 1, 2, 2, 3, 4, 5, 6, 2, 7, 8, 9, 10, 11, 12, 13, 14, 2, 15, 16, 17, + 18, 19, 20, 21, 22, 23, 2, 2, 2, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, + 34, 2, 2, 2, 35, 36, 2, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, + 49, 2, 50, 2, 2, 51, 52, 53, 54, 55, 2, 2, 56, 57, 58, 2, 2, 59, 60, 61, + 62, 63, 63, 2, 2, 2, 2, 64, 2, 65, 66, 67, 68, 69, 2, 2, 2, 2, 70, 71, + 72, 73, 74, 75, 76, 77, 78, 2, 2, 2, 2, 2, 2, 79, 2, 2, 2, 2, 2, 80, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 81, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 82, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 83, 84, 2, 2, 2, 2, 2, 2, 2, 2, 2, 41, 41, 85, 86, 41, 87, - 88, 89, 90, 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, 2, 2, 81, 2, 82, 2, 2, 2, 2, 2, 2, 2, 2, 83, + 84, 2, 2, 2, 2, 2, 2, 2, 85, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 86, 87, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 88, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 89, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 90, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 91, 92, 2, 2, 2, 2, 2, 2, 2, 2, 93, 48, 48, + 94, 95, 48, 96, 97, 98, 99, 100, 101, 102, 2, 103, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 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, 93, 94, 95, - 96, 2, 2, 2, 2, 97, 98, 2, 99, 100, 101, 102, 103, 104, 2, 105, 106, 107, - 108, 109, 2, 2, 2, 2, 2, 2, 110, 2, 111, 2, 112, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 104, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 41, 41, 41, 41, 41, 41, 113, 2, 114, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 105, 106, 107, 108, 109, 2, 2, 2, 2, 110, 111, 2, 112, 113, 114, + 115, 116, 117, 2, 118, 119, 120, 121, 122, 2, 2, 2, 2, 2, 2, 123, 2, 124, + 2, 125, 2, 126, 2, 127, 2, 2, 2, 128, 2, 2, 2, 2, 129, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 48, 48, 48, 48, 48, 48, 130, 2, 131, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 48, 48, 48, 48, 48, 48, 48, 48, 132, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, @@ -4777,33 +5011,33 @@ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 115, 2, 116, 2, 117, 2, 2, 118, 2, 2, 2, 119, - 120, 121, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 122, 123, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 124, 125, 82, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 71, 126, 2, 127, 128, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 133, 2, 134, 2, 135, 2, 2, 136, 2, 2, 2, 137, 138, 139, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 129, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 130, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 131, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 132, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 140, 141, 142, 143, + 144, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 145, 146, 90, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 79, 147, 2, 148, 149, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 150, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 151, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 152, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 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, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, + 48, 154, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 129, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 150, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, @@ -5037,8 +5271,9 @@ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 41, 133, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 48, + 155, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, @@ -5101,7 +5336,7 @@ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 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[] = { @@ -5149,7 +5384,7 @@ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 0, 0, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -5179,263 +5414,305 @@ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 7, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 0, 0, 0, 0, 0, + 0, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 12, 13, 14, 15, 16, 0, 0, 7, 0, 0, 0, 0, 0, 7, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, + 0, 0, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 0, 0, 0, 0, 0, + 0, 0, 0, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 0, + 17, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 0, 0, 0, 7, 7, 7, 7, 7, 7, + 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 18, 18, 18, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, + 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 7, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, + 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 0, 12, 0, 0, 0, 0, 0, 0, 12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 0, 0, 0, 0, 0, + 0, 0, 0, 7, 7, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, - 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 7, 7, 7, 7, 7, 7, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 13, 13, 13, 13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, + 7, 7, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 7, 0, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, - 0, 7, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 0, 0, 0, 0, 7, 7, 7, 7, 7, - 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 7, - 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 0, 7, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 0, 0, 0, 0, 0, + 0, 0, 0, 19, 20, 21, 22, 23, 24, 25, 26, 27, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 0, 0, 0, 0, 0, 0, - 0, 0, 14, 15, 16, 17, 18, 19, 20, 21, 22, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 18, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 23, 23, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 24, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 28, 28, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 29, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, + 0, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 7, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, - 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, - 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 0, 0, 0, 0, 7, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 7, 7, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, + 7, 7, 7, 0, 0, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, + 0, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, - 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, + 0, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 7, - 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, 0, 0, 0, 0, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 27, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, 0, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, - 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 28, 0, 0, 0, 29, 30, 31, 32, 33, 34, - 1, 1, 0, 0, 0, 0, 28, 6, 4, 5, 29, 30, 31, 32, 33, 34, 1, 1, 0, 0, 0, 0, - 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, + 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 7, 7, 7, 7, 7, + 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, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, 0, 7, 7, 7, + 7, 7, 7, 7, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 33, 8, 0, + 0, 34, 35, 36, 37, 38, 39, 1, 1, 0, 0, 0, 8, 33, 6, 4, 5, 34, 35, 36, 37, + 38, 39, 1, 1, 0, 0, 0, 0, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, - 0, 0, 0, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, + 0, 0, 0, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 36, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 40, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 41, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, 37, 38, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 43, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, - 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, - 39, 39, 39, 39, 39, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 44, 44, 44, 44, 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, 39, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 7, 7, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 7, 7, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 0, 0, 0, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 7, 7, 7, 7, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 0, 7, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, - 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, - 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, - 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, - 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, - 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, - 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, - 27, 27, 27, 27, 27, 27, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 7, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 32, + 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, + 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, + 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, + 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, + 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, + 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, + 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 7, 7, 7, 7, 7, 0, 0, 0, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, + 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, + 7, 7, 7, 7, 7, 7, 7, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 0, 7, 7, 7, 7, 7, 7, 7, 0, 7, 7, 7, 7, 7, 7, 7, 0, 7, 7, 7, 7, 7, 7, 7, 0, 7, 7, 7, 7, 7, 7, 7, 0, 7, 7, 7, 7, 7, 7, 7, 0, 7, 7, 7, 7, 7, 7, 7, 0, - 7, 7, 7, 7, 7, 7, 7, 0, 7, 7, 7, 7, 7, 7, 7, 0, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -5443,83 +5720,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, 40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 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, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, - 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 41, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 41, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 41, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 41, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 41, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 41, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 41, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 46, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 41, 0, 0, 0, 0, 0, 0, 0, 41, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 41, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -5528,50 +5805,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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 41, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 41, 0, 0, 0, 0, 0, 0, 0, 41, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, + 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 41, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 41, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -5579,50 +5862,70 @@ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 41, 0, 0, 0, 0, - 0, 0, 0, 41, 0, 0, 0, 0, 41, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 41, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 41, 0, 41, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 41, 0, 0, + 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 0, + 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, @@ -5630,158 +5933,202 @@ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 13, 13, 13, 13, 13, 13, 0, 0, 0, 1, 1, 13, 13, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 18, 18, 18, 18, 18, 18, 0, 0, 0, 1, 1, 18, + 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, 40, + 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 49, 49, 49, 0, 0, 0, 0, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 0, 7, 7, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, + 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 7, - 7, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 7, 7, 7, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, - 0, 0, 0, 7, 7, 7, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, - 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 7, 7, 7, 7, 7, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, - 0, 0, 0, 0, 0, 41, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 7, 7, 7, 7, 7, 7, + 0, 0, 0, 0, 0, 50, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 7, 7, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, + 7, 7, 0, 0, 7, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, + 7, 7, 0, 7, 7, 0, 0, 0, 7, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 0, 0, 7, 0, 7, 7, 7, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, 0, 7, 7, 0, 0, 0, 0, 0, + 7, 7, 7, 7, 7, 7, 7, 7, 0, 7, 7, 7, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 7, 7, 7, 0, + 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 7, 7, 0, 0, 0, 7, - 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, - 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 7, 7, 7, 7, 0, 7, 7, 0, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 0, - 7, 7, 7, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 7, 7, 7, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, 7, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, - 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 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, 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, 13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 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, 13, 0, - 0, 0, 0, 0, 0, 7, 7, 0, 0, 0, 0, 0, 0, 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, 51, + 0, 0, 0, 0, 0, 0, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 41, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 7, 0, 0, 7, 0, + 0, 0, 7, 0, 0, 0, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, + 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 7, 0, 7, 7, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, + 7, 7, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 41, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 41, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 41, 0, - 0, 0, 0, 0, 0, 0, 0, 41, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 41, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, + 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -5789,25 +6136,25 @@ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 41, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 41, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 41, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 41, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 41, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 41, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -5816,13 +6163,18 @@ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 41, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 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) Modified: python/branches/py3k-jit/Modules/unicodename_db.h ============================================================================== --- python/branches/py3k-jit/Modules/unicodename_db.h (original) +++ python/branches/py3k-jit/Modules/unicodename_db.h Fri Mar 19 00:32:03 2010 @@ -6,498 +6,614 @@ static unsigned char lexicon[] = { 76, 69, 84, 84, 69, 210, 87, 73, 84, 200, 83, 77, 65, 76, 204, 83, 89, 76, 76, 65, 66, 76, 197, 83, 73, 71, 206, 67, 65, 80, 73, 84, 65, 204, - 76, 65, 84, 73, 206, 89, 201, 67, 74, 203, 65, 82, 65, 66, 73, 195, 67, - 79, 77, 80, 65, 84, 73, 66, 73, 76, 73, 84, 217, 77, 65, 84, 72, 69, 77, - 65, 84, 73, 67, 65, 204, 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, 79, 76, 196, 71, 82, 69, 69, 203, - 76, 73, 71, 65, 84, 85, 82, 197, 68, 73, 71, 73, 212, 65, 78, 196, 77, - 85, 83, 73, 67, 65, 204, 84, 73, 77, 69, 211, 69, 84, 72, 73, 79, 80, 73, - 195, 72, 65, 78, 71, 85, 204, 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, 86, 79, 87, 69, 204, 70, 79, 210, 67, 73, 82, 67, 76, 69, - 196, 86, 65, 201, 70, 73, 78, 65, 204, 67, 79, 77, 66, 73, 78, 73, 78, - 199, 83, 81, 85, 65, 82, 197, 86, 65, 82, 73, 65, 84, 73, 79, 206, 66, - 82, 65, 73, 76, 76, 197, 80, 65, 84, 84, 69, 82, 206, 82, 73, 71, 72, - 212, 76, 69, 70, 212, 66, 89, 90, 65, 78, 84, 73, 78, 197, 73, 83, 79, - 76, 65, 84, 69, 196, 194, 65, 66, 79, 86, 69, 128, 68, 79, 85, 66, 76, - 197, 75, 65, 84, 65, 75, 65, 78, 193, 75, 65, 78, 71, 88, 201, 76, 73, - 78, 69, 65, 210, 66, 69, 76, 79, 87, 128, 77, 79, 68, 73, 70, 73, 69, - 210, 83, 73, 71, 78, 128, 84, 73, 66, 69, 84, 65, 206, 77, 69, 69, 205, - 68, 79, 212, 65, 128, 65, 82, 82, 79, 87, 128, 73, 78, 73, 84, 73, 65, - 204, 67, 65, 82, 82, 73, 69, 210, 86, 69, 82, 84, 73, 67, 65, 204, 89, - 69, 200, 87, 72, 73, 84, 197, 65, 66, 79, 86, 197, 78, 85, 77, 66, 69, - 210, 85, 128, 65, 82, 82, 79, 215, 77, 79, 78, 71, 79, 76, 73, 65, 206, - 77, 89, 65, 78, 77, 65, 210, 67, 79, 80, 84, 73, 195, 75, 72, 77, 69, - 210, 79, 128, 73, 128, 84, 73, 76, 197, 77, 65, 82, 75, 128, 66, 79, 216, - 72, 69, 66, 82, 69, 215, 80, 76, 85, 211, 68, 82, 65, 87, 73, 78, 71, - 211, 82, 73, 71, 72, 84, 87, 65, 82, 68, 211, 83, 84, 82, 79, 75, 69, + 76, 65, 84, 73, 206, 89, 201, 67, 74, 203, 69, 71, 89, 80, 84, 73, 65, + 206, 72, 73, 69, 82, 79, 71, 76, 89, 80, 200, 65, 82, 65, 66, 73, 195, + 67, 79, 77, 80, 65, 84, 73, 66, 73, 76, 73, 84, 217, 77, 65, 84, 72, 69, + 77, 65, 84, 73, 67, 65, 204, 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, 68, 73, 71, 73, 212, 66, 79, 76, + 196, 72, 65, 78, 71, 85, 204, 71, 82, 69, 69, 203, 76, 73, 71, 65, 84, + 85, 82, 197, 65, 78, 196, 77, 85, 83, 73, 67, 65, 204, 84, 73, 77, 69, + 211, 69, 84, 72, 73, 79, 80, 73, 195, 86, 79, 87, 69, 204, 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, 67, 73, 82, 67, 76, 69, + 196, 70, 79, 210, 67, 79, 77, 66, 73, 78, 73, 78, 199, 84, 65, 201, 86, + 65, 201, 70, 73, 78, 65, 204, 83, 81, 85, 65, 82, 197, 86, 65, 82, 73, + 65, 84, 73, 79, 206, 76, 69, 70, 212, 66, 82, 65, 73, 76, 76, 197, 80, + 65, 84, 84, 69, 82, 206, 82, 73, 71, 72, 212, 66, 89, 90, 65, 78, 84, 73, + 78, 197, 73, 83, 79, 76, 65, 84, 69, 196, 194, 65, 66, 79, 86, 69, 128, + 68, 79, 85, 66, 76, 197, 75, 65, 84, 65, 75, 65, 78, 193, 75, 65, 78, 71, + 88, 201, 78, 85, 77, 66, 69, 210, 83, 73, 71, 78, 128, 66, 69, 76, 79, + 87, 128, 76, 73, 78, 69, 65, 210, 77, 79, 68, 73, 70, 73, 69, 210, 84, + 73, 66, 69, 84, 65, 206, 65, 128, 68, 79, 212, 77, 69, 69, 205, 77, 89, + 65, 78, 77, 65, 210, 67, 65, 82, 82, 73, 69, 210, 65, 82, 82, 79, 87, + 128, 73, 78, 73, 84, 73, 65, 204, 87, 72, 73, 84, 197, 85, 128, 86, 69, + 82, 84, 73, 67, 65, 204, 89, 69, 200, 65, 66, 79, 86, 197, 73, 128, 79, + 128, 67, 79, 80, 84, 73, 195, 65, 82, 82, 79, 215, 77, 79, 78, 71, 79, + 76, 73, 65, 206, 77, 65, 82, 75, 128, 75, 72, 77, 69, 210, 68, 69, 86, + 65, 78, 65, 71, 65, 82, 201, 84, 73, 76, 197, 80, 65, 82, 69, 78, 84, 72, + 69, 83, 73, 90, 69, 196, 84, 72, 65, 205, 66, 76, 65, 67, 203, 74, 79, + 78, 71, 83, 69, 79, 78, 199, 66, 79, 216, 72, 69, 66, 82, 69, 215, 80, + 76, 85, 211, 68, 82, 65, 87, 73, 78, 71, 211, 82, 73, 71, 72, 84, 87, 65, + 82, 68, 211, 67, 72, 79, 83, 69, 79, 78, 199, 83, 84, 82, 79, 75, 69, 128, 72, 65, 76, 70, 87, 73, 68, 84, 200, 66, 65, 76, 73, 78, 69, 83, - 197, 66, 76, 65, 67, 203, 71, 69, 79, 82, 71, 73, 65, 206, 72, 79, 79, - 75, 128, 73, 68, 69, 79, 71, 82, 65, 205, 73, 68, 69, 79, 71, 82, 65, 80, - 72, 73, 195, 84, 65, 201, 65, 76, 69, 198, 80, 65, 82, 69, 78, 84, 72, - 69, 83, 73, 90, 69, 196, 68, 69, 86, 65, 78, 65, 71, 65, 82, 201, 83, 67, - 82, 73, 80, 212, 84, 79, 128, 213, 83, 89, 77, 66, 79, 76, 128, 85, 208, - 70, 85, 76, 76, 87, 73, 68, 84, 200, 72, 65, 200, 68, 79, 87, 206, 66, - 82, 65, 67, 75, 69, 84, 128, 69, 81, 85, 65, 204, 79, 198, 79, 86, 69, - 210, 84, 65, 199, 68, 79, 77, 73, 78, 207, 70, 82, 65, 75, 84, 85, 210, - 78, 85, 77, 69, 82, 73, 195, 72, 69, 65, 86, 217, 84, 87, 79, 128, 77, - 65, 76, 65, 89, 65, 76, 65, 205, 71, 76, 65, 71, 79, 76, 73, 84, 73, 195, - 67, 72, 65, 82, 65, 67, 84, 69, 210, 76, 69, 70, 84, 87, 65, 82, 68, 211, - 79, 78, 69, 128, 84, 69, 76, 85, 71, 213, 65, 82, 77, 69, 78, 73, 65, - 206, 66, 69, 78, 71, 65, 76, 201, 67, 72, 79, 83, 69, 79, 78, 199, 74, - 69, 69, 205, 77, 69, 68, 73, 65, 204, 66, 65, 82, 128, 72, 73, 82, 65, - 71, 65, 78, 193, 87, 69, 83, 84, 45, 67, 82, 69, 197, 84, 72, 65, 201, - 75, 65, 78, 78, 65, 68, 193, 67, 72, 69, 82, 79, 75, 69, 197, 72, 65, 76, - 198, 73, 68, 69, 79, 71, 82, 65, 80, 200, 79, 82, 73, 89, 193, 84, 87, - 207, 67, 72, 65, 205, 71, 85, 74, 65, 82, 65, 84, 201, 74, 79, 78, 71, - 83, 69, 79, 78, 199, 78, 69, 215, 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, 76, 85, 197, 83, 73, 78, 72, 65, 76, 193, 71, 85, 82, - 77, 85, 75, 72, 201, 78, 79, 84, 65, 84, 73, 79, 206, 83, 89, 82, 73, 65, - 195, 84, 72, 82, 69, 197, 86, 79, 67, 65, 76, 73, 195, 72, 65, 128, 65, - 67, 85, 84, 69, 128, 76, 69, 80, 67, 72, 193, 76, 73, 71, 72, 212, 70, - 79, 85, 82, 128, 68, 79, 85, 66, 76, 69, 45, 83, 84, 82, 85, 67, 203, 84, - 65, 77, 73, 204, 65, 80, 204, 70, 85, 78, 67, 84, 73, 79, 78, 65, 204, - 72, 65, 77, 90, 193, 77, 65, 82, 203, 84, 72, 82, 69, 69, 128, 84, 69, - 76, 69, 71, 82, 65, 80, 200, 79, 78, 197, 72, 79, 82, 73, 90, 79, 78, 84, - 65, 204, 74, 85, 78, 71, 83, 69, 79, 78, 199, 66, 65, 82, 194, 68, 65, - 83, 73, 193, 70, 73, 86, 69, 128, 76, 73, 77, 66, 213, 77, 65, 75, 83, - 85, 82, 193, 66, 79, 80, 79, 77, 79, 70, 207, 75, 65, 128, 75, 72, 65, - 82, 79, 83, 72, 84, 72, 201, 76, 65, 207, 84, 207, 72, 69, 88, 65, 71, - 82, 65, 205, 76, 79, 78, 199, 83, 73, 88, 128, 76, 79, 215, 80, 83, 73, - 76, 201, 69, 73, 71, 72, 84, 128, 75, 193, 77, 79, 78, 79, 83, 80, 65, - 67, 197, 78, 79, 212, 89, 65, 128, 78, 73, 78, 69, 128, 83, 128, 83, 69, - 86, 69, 78, 128, 83, 84, 82, 79, 75, 197, 86, 128, 68, 79, 84, 211, 77, - 65, 128, 82, 69, 86, 69, 82, 83, 69, 196, 72, 73, 71, 200, 75, 72, 65, - 200, 76, 79, 87, 69, 210, 78, 75, 207, 84, 73, 76, 68, 69, 128, 84, 79, - 78, 197, 78, 85, 77, 69, 82, 65, 204, 82, 65, 128, 84, 85, 82, 78, 69, - 196, 65, 69, 71, 69, 65, 206, 72, 128, 80, 65, 128, 71, 128, 76, 65, 71, - 65, 194, 80, 72, 65, 71, 83, 45, 80, 193, 67, 89, 80, 82, 73, 79, 212, - 68, 73, 65, 69, 82, 69, 83, 73, 83, 128, 83, 85, 78, 68, 65, 78, 69, 83, - 197, 84, 73, 70, 73, 78, 65, 71, 200, 68, 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, 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, - 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, 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, 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, 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, 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, - 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, 65, 128, 89, 89, 128, 89, 87, 79, 79, + 197, 71, 69, 79, 82, 71, 73, 65, 206, 72, 79, 79, 75, 128, 73, 68, 69, + 79, 71, 82, 65, 205, 73, 68, 69, 79, 71, 82, 65, 80, 72, 73, 195, 65, 76, + 69, 198, 83, 89, 77, 66, 79, 76, 128, 84, 79, 128, 83, 67, 82, 73, 80, + 212, 84, 87, 79, 128, 79, 86, 69, 210, 213, 72, 69, 65, 86, 217, 79, 78, + 69, 128, 85, 208, 76, 79, 215, 70, 85, 76, 76, 87, 73, 68, 84, 200, 72, + 65, 200, 68, 79, 87, 206, 69, 81, 85, 65, 204, 66, 82, 65, 67, 75, 69, + 84, 128, 72, 73, 71, 200, 79, 198, 84, 65, 199, 68, 79, 77, 73, 78, 207, + 78, 85, 77, 69, 82, 73, 195, 70, 82, 65, 75, 84, 85, 210, 74, 85, 78, 71, + 83, 69, 79, 78, 199, 77, 65, 76, 65, 89, 65, 76, 65, 205, 84, 87, 207, + 71, 76, 65, 71, 79, 76, 73, 84, 73, 195, 67, 72, 65, 82, 65, 67, 84, 69, + 210, 76, 69, 70, 84, 87, 65, 82, 68, 211, 77, 69, 68, 73, 65, 204, 84, + 69, 76, 85, 71, 213, 66, 69, 78, 71, 65, 76, 201, 79, 78, 197, 65, 82, + 77, 69, 78, 73, 65, 206, 74, 65, 86, 65, 78, 69, 83, 197, 74, 69, 69, + 205, 66, 65, 82, 128, 72, 73, 82, 65, 71, 65, 78, 193, 87, 69, 83, 84, + 45, 67, 82, 69, 197, 73, 68, 69, 79, 71, 82, 65, 80, 200, 66, 65, 77, 85, + 205, 84, 72, 65, 201, 75, 65, 78, 78, 65, 68, 193, 67, 72, 69, 82, 79, + 75, 69, 197, 72, 65, 76, 198, 84, 79, 78, 197, 78, 69, 215, 79, 82, 73, + 89, 193, 84, 72, 82, 69, 197, 67, 72, 65, 205, 71, 85, 74, 65, 82, 65, + 84, 201, 76, 85, 197, 70, 79, 85, 82, 128, 72, 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, 84, 72, 82, 69, 69, 128, 68, 69, 83, 69, 82, 69, 212, 83, 73, + 78, 72, 65, 76, 193, 71, 85, 82, 77, 85, 75, 72, 201, 77, 65, 82, 203, + 78, 79, 84, 65, 84, 73, 79, 206, 83, 89, 82, 73, 65, 195, 86, 79, 67, 65, + 76, 73, 195, 65, 67, 85, 84, 69, 128, 76, 69, 80, 67, 72, 193, 76, 73, + 71, 72, 212, 76, 79, 78, 199, 84, 85, 82, 75, 73, 195, 68, 79, 85, 66, + 76, 69, 45, 83, 84, 82, 85, 67, 203, 70, 73, 86, 69, 128, 75, 65, 128, + 84, 65, 77, 73, 204, 86, 73, 69, 212, 65, 80, 204, 70, 85, 78, 67, 84, + 73, 79, 78, 65, 204, 72, 65, 77, 90, 193, 83, 73, 88, 128, 84, 69, 76, + 69, 71, 82, 65, 80, 200, 89, 65, 128, 69, 73, 71, 72, 84, 128, 72, 79, + 82, 73, 90, 79, 78, 84, 65, 204, 80, 65, 128, 68, 79, 84, 211, 78, 73, + 78, 69, 128, 83, 69, 86, 69, 78, 128, 66, 65, 82, 194, 68, 65, 83, 73, + 193, 75, 65, 73, 84, 72, 201, 76, 73, 77, 66, 213, 77, 65, 128, 77, 65, + 75, 83, 85, 82, 193, 83, 128, 84, 207, 66, 79, 80, 79, 77, 79, 70, 207, + 75, 72, 65, 82, 79, 83, 72, 84, 72, 201, 76, 65, 207, 82, 65, 128, 83, + 81, 85, 65, 82, 69, 196, 72, 69, 88, 65, 71, 82, 65, 205, 75, 193, 78, + 65, 128, 80, 83, 73, 76, 201, 82, 69, 86, 69, 82, 83, 69, 196, 77, 79, + 78, 79, 83, 80, 65, 67, 197, 78, 79, 212, 83, 65, 77, 65, 82, 73, 84, 65, + 206, 83, 84, 82, 79, 75, 197, 84, 85, 82, 78, 69, 196, 86, 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, 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, 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, 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, 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, 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, 85, 75, 65, 76, 69, 65, 80, 73, 78, 84, 85, 128, 89, 85, 84, 128, 89, 85, 83, 128, 89, 85, 211, 89, 85, 82, 88, 128, 89, 85, 82, 128, 89, - 85, 80, 128, 89, 85, 79, 88, 128, 89, 85, 79, 84, 128, 89, 85, 79, 80, - 128, 89, 85, 79, 128, 89, 85, 68, 72, 128, 89, 85, 68, 200, 89, 85, 65, - 78, 128, 89, 85, 45, 89, 69, 79, 128, 89, 85, 45, 89, 69, 128, 89, 85, - 45, 85, 128, 89, 85, 45, 73, 128, 89, 85, 45, 69, 79, 128, 89, 85, 45, - 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, 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, 80, 128, 89, 79, 79, 128, 89, 79, 77, - 79, 128, 89, 79, 71, 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, 128, - 89, 207, 89, 78, 128, 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, 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, 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, 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, - 85, 128, 89, 69, 79, 45, 79, 128, 89, 69, 206, 89, 69, 76, 76, 79, 87, - 128, 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, 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, 71, 128, 89, 65, 78, 199, 89, 65, 78, 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, 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, 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, 65, 128, 89, 65, 45, 89, 79, 128, 89, - 65, 45, 79, 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, 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, 87, 89, 78, 78, 128, 87, 89, 78, 206, 87, 86, 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, 128, 87, 82, 79, 78, 71, 128, 87, 82, 73, 84, - 73, 78, 199, 87, 82, 69, 65, 84, 200, 87, 82, 65, 80, 128, 87, 79, 88, - 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, 65, 78, 128, 87, 79, 76, - 79, 83, 79, 128, 87, 79, 69, 128, 87, 79, 65, 128, 87, 73, 78, 84, 69, - 82, 128, 87, 73, 78, 74, 65, 128, 87, 73, 78, 69, 128, 87, 73, 78, 68, - 85, 128, 87, 73, 78, 68, 128, 87, 73, 78, 128, 87, 73, 71, 71, 76, 217, - 87, 73, 68, 69, 45, 72, 69, 65, 68, 69, 196, 87, 73, 68, 197, 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, 71, 128, 87, 69, 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, 69, 78, 128, 87, 69, 68, 71, 69, 45, 84, 65, 73, 76, 69, 196, 87, 69, - 65, 80, 79, 78, 128, 87, 66, 128, 87, 65, 88, 128, 87, 65, 87, 128, 87, - 65, 215, 87, 65, 86, 217, 87, 65, 86, 69, 128, 87, 65, 86, 197, 87, 65, - 85, 128, 87, 65, 84, 84, 79, 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, 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, 69, 78, 128, 87, 65, 69, 128, 87, 65, 65, 86, 85, 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, 84, 128, 86, 85, 82, 88, 128, 86, 85, 82, 128, 86, - 85, 80, 128, 86, 85, 76, 71, 65, 210, 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, 76, 85, 77, 197, 86, 79, 76, 84, 65, 71, 197, 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, 204, 86, 79, 128, 86, 73, - 88, 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, 78, 69, 128, 86, 73, 78, 128, 86, 73, 76, 76, 65, 71, 69, - 128, 86, 73, 69, 88, 128, 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, 65, 128, 86, - 73, 67, 84, 79, 82, 217, 86, 73, 128, 86, 69, 88, 128, 86, 69, 87, 128, - 86, 69, 215, 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, 80, 128, - 86, 69, 78, 68, 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, - 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, - 128, 86, 65, 78, 69, 128, 86, 65, 76, 76, 69, 89, 128, 86, 65, 65, 86, - 85, 128, 86, 65, 65, 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, - 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, 50, 128, 85, - 83, 72, 128, 85, 83, 200, 85, 83, 69, 196, 85, 83, 69, 128, 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, 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, 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, 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, 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, 76, 85, 128, 85, 76, 213, 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, 69, 128, 85, 69, - 128, 85, 68, 85, 71, 128, 85, 68, 65, 84, 84, 65, 128, 85, 68, 65, 65, - 84, 128, 85, 68, 128, 85, 196, 85, 67, 128, 85, 66, 85, 70, 73, 76, 73, - 128, 85, 66, 65, 68, 65, 77, 65, 128, 85, 66, 128, 85, 65, 84, 72, 128, - 85, 65, 128, 85, 178, 85, 45, 69, 79, 45, 69, 85, 128, 85, 45, 65, 69, - 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, 76, 73, - 78, 197, 84, 87, 79, 45, 72, 69, 65, 68, 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, - 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, 84, 69, 89, 65, - 83, 65, 84, 128, 84, 85, 84, 128, 84, 85, 82, 88, 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, 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, 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, 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, - 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, 73, 128, 84, - 84, 72, 79, 128, 84, 84, 72, 73, 128, 84, 84, 72, 69, 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, 69, 128, 84, 84, - 65, 89, 65, 78, 78, 65, 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, 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, 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, 69, 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, 75, 85, 84, 65, 83, 84, 201, 84, 82, 79, 69, 90, 69, 78, 73, 65, 206, - 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, 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, 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, - 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, 83, 83, 73, 79, 78, 128, 84, 82, 65, 78, 83, 77, 73, 83, 83, 73, - 79, 206, 84, 82, 65, 68, 197, 84, 82, 65, 67, 75, 128, 84, 82, 128, 84, - 79, 88, 128, 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, 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, 128, 84, 79, 78, 79, 83, 128, 84, 79, 78, 71, 85, 69, 128, 84, 79, - 78, 71, 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, 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, 85, 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, 76, 79, 128, 84, 73, 84, 128, - 84, 73, 82, 79, 78, 73, 65, 206, 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, 78, 69, 128, 84, 73, 78, 65, 71, - 77, 65, 128, 84, 73, 77, 69, 83, 128, 84, 73, 77, 69, 128, 84, 73, 76, - 68, 197, 84, 73, 76, 128, 84, 73, 75, 69, 85, 84, 45, 82, 73, 69, 85, 76, - 128, 84, 73, 75, 69, 85, 84, 45, 75, 73, 89, 69, 79, 75, 128, 84, 73, 75, - 69, 85, 84, 128, 84, 73, 75, 69, 85, 212, 84, 73, 73, 128, 84, 73, 71, - 72, 212, 84, 73, 71, 69, 82, 128, 84, 73, 69, 88, 128, 84, 73, 69, 80, - 128, 84, 73, 197, 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, 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, 128, 84, 72, - 82, 79, 85, 71, 72, 128, 84, 72, 82, 79, 85, 71, 200, 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, 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, 82, 78, 128, 84, 72, 79, 82, 206, 84, 72, 79, - 79, 128, 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, 89, 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, 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, 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, 69, 69, 128, 84, 72, 197, 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, 65, 65, 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, 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, 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, 128, 84, 69, - 78, 211, 84, 69, 78, 128, 84, 69, 206, 84, 69, 77, 80, 85, 211, 84, 69, - 76, 79, 85, 211, 84, 69, 76, 73, 83, 72, 193, 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, 73, 87, 83, 128, 84, 69, 71, 69, 72, 128, 84, 69, 197, 84, - 69, 68, 85, 78, 71, 128, 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, - 45, 85, 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, 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, - 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, - 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, 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, 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, 67, - 75, 128, 84, 65, 67, 203, 84, 65, 66, 85, 76, 65, 84, 73, 79, 78, 128, - 84, 65, 66, 76, 69, 128, 84, 65, 66, 128, 84, 65, 194, 84, 65, 65, 76, - 85, 74, 193, 84, 65, 65, 73, 128, 84, 65, 50, 128, 84, 65, 45, 82, 79, - 76, 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, 82, 88, 128, 83, 89, 82, 77, 65, 84, - 73, 75, 73, 128, 83, 89, 82, 77, 65, 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, - 77, 77, 69, 84, 82, 89, 128, 83, 89, 77, 77, 69, 84, 82, 73, 195, 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, 65, 128, 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, 73, 128, 83, 87, 73, - 128, 83, 87, 71, 128, 83, 87, 69, 69, 84, 128, 83, 87, 65, 83, 200, 83, - 87, 65, 80, 80, 73, 78, 71, 128, 83, 87, 65, 65, 128, 83, 87, 128, 83, - 85, 88, 128, 83, 85, 84, 128, 83, 85, 83, 80, 69, 78, 83, 73, 79, 206, - 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, 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, 128, 83, 85, 79, 88, 128, 83, 85, 79, 80, 128, 83, 85, 79, - 128, 83, 85, 78, 71, 128, 83, 85, 78, 128, 83, 85, 206, 83, 85, 77, 77, + 85, 81, 128, 89, 85, 80, 128, 89, 85, 79, 88, 128, 89, 85, 79, 84, 128, + 89, 85, 79, 80, 128, 89, 85, 79, 128, 89, 85, 68, 72, 128, 89, 85, 68, + 200, 89, 85, 65, 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, 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, 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, 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, 206, 89, + 69, 76, 76, 79, 87, 128, 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, 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, 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, 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, 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, 65, 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, 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, 128, 87, 82, 79, 78, 71, 128, + 87, 82, 73, 84, 73, 78, 199, 87, 82, 69, 65, 84, 200, 87, 82, 65, 80, + 128, 87, 79, 88, 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, 65, + 78, 128, 87, 79, 76, 79, 83, 79, 128, 87, 79, 69, 128, 87, 79, 65, 128, + 87, 73, 84, 72, 79, 85, 212, 87, 73, 78, 84, 69, 82, 128, 87, 73, 78, 74, + 65, 128, 87, 73, 78, 69, 128, 87, 73, 78, 68, 85, 128, 87, 73, 78, 68, + 128, 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, 71, 128, 87, 69, 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, 69, 78, 128, 87, 69, 68, 71, 69, 45, 84, 65, 73, 76, 69, 196, 87, + 69, 65, 80, 79, 78, 128, 87, 66, 128, 87, 65, 89, 128, 87, 65, 217, 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, 69, 128, 87, 65, + 86, 197, 87, 65, 85, 128, 87, 65, 84, 84, 79, 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, 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, 84, 128, 86, 85, 82, 88, 128, 86, + 85, 82, 128, 86, 85, 80, 128, 86, 85, 76, 71, 65, 210, 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, 76, 85, 77, 197, 86, 79, 76, 84, 65, 71, + 197, 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, 204, 86, + 79, 128, 86, 73, 88, 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, 78, 69, 128, 86, 73, 78, 128, 86, 73, 76, + 76, 65, 71, 69, 128, 86, 73, 69, 88, 128, 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, 65, 128, 86, 73, 67, 84, 79, 82, 217, 86, 73, 128, 86, 69, 88, 128, + 86, 69, 87, 128, 86, 69, 215, 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, 80, 128, 86, 69, 78, 68, 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, 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, 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, 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, 50, 128, 85, 83, 72, 128, 85, 83, 200, + 85, 83, 69, 196, 85, 83, 69, 128, 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, 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, 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, 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, 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, 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, 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, 76, 73, 78, 197, 84, 87, 79, 45, 72, 69, 65, 68, 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, 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, + 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, 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, 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, + 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, 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, 73, 128, 84, 84, 72, 87, 69, 128, 84, 84, + 72, 79, 79, 128, 84, 84, 72, 79, 128, 84, 84, 72, 73, 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, 69, 128, 84, 84, 65, 89, 65, 78, 78, 65, + 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, 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, 69, 128, 84, 82, 85, 67, 75, 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, 75, 85, 84, 65, 83, 84, 201, 84, 82, + 79, 69, 90, 69, 78, 73, 65, 206, 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, 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, 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, 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, 83, 83, 73, 79, 78, 128, 84, 82, + 65, 78, 83, 77, 73, 83, 83, 73, 79, 206, 84, 82, 65, 70, 70, 73, 67, 128, + 84, 82, 65, 68, 197, 84, 82, 65, 67, 75, 128, 84, 82, 128, 84, 79, 88, + 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, 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, 128, 84, 79, 78, 79, 83, 128, 84, + 79, 78, 71, 85, 69, 128, 84, 79, 78, 71, 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, 76, 79, 78, 71, + 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, 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, 76, 79, 128, 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, 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, 65, 71, 77, 65, 128, 84, 73, 77, 69, 83, + 128, 84, 73, 77, 69, 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, 73, 128, 84, 73, 71, 72, 212, 84, 73, 71, 69, 82, + 128, 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, 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, 128, + 84, 72, 82, 79, 85, 71, 72, 128, 84, 72, 82, 79, 85, 71, 200, 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, 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, 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, 89, 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, 69, 69, 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, 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, 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, + 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, 71, + 197, 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, 73, 83, 72, 193, 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, 73, 87, 83, 128, 84, 69, 71, 69, 72, + 128, 84, 69, 197, 84, 69, 68, 85, 78, 71, 128, 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, 45, 85, 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, 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, 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, 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, 199, 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, 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, 128, 84, 65, 67, 75, 128, 84, 65, 67, 203, 84, 65, 66, 85, 76, + 65, 84, 73, 79, 78, 128, 84, 65, 66, 76, 69, 128, 84, 65, 66, 128, 84, + 65, 194, 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, 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, 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, 82, 88, 128, 83, 89, 82, 77, 65, + 84, 73, 75, 73, 128, 83, 89, 82, 77, 65, 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, 77, 77, 69, 84, 82, 89, 128, 83, 89, 77, 77, 69, 84, 82, 73, 195, 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, 65, 128, 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, 73, 128, 83, 87, + 73, 128, 83, 87, 71, 128, 83, 87, 69, 69, 84, 128, 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, 82, 88, 128, 83, 85, 82, 82, 79, + 85, 78, 68, 128, 83, 85, 82, 82, 79, 85, 78, 196, 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, 128, 83, 85, 79, 88, 128, + 83, 85, 79, 80, 128, 83, 85, 79, 128, 83, 85, 78, 71, 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, 75, 85, 78, 128, 83, 85, 75, 85, 206, 83, 85, 75, 85, 128, 83, 85, 75, @@ -519,463 +635,529 @@ 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, 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, 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, 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, - 205, 83, 84, 69, 65, 77, 128, 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, 69, 82, 83, 128, 83, 84, 65, 82, 212, 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, 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, 128, - 83, 83, 73, 88, 128, 83, 83, 73, 84, 128, 83, 83, 73, 80, 128, 83, 83, - 73, 69, 88, 128, 83, 83, 73, 69, 80, 128, 83, 83, 73, 69, 128, 83, 83, - 73, 128, 83, 83, 69, 88, 128, 83, 83, 69, 80, 128, 83, 83, 69, 69, 128, - 83, 83, 65, 88, 128, 83, 83, 65, 84, 128, 83, 83, 65, 80, 128, 83, 83, - 65, 78, 71, 84, 73, 75, 69, 85, 84, 128, 83, 83, 65, 78, 71, 83, 73, 79, - 83, 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, 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, 128, 83, 83, 65, 78, 71, 65, 82, 65, 69, 65, - 128, 83, 83, 65, 65, 128, 83, 83, 65, 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, 196, 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, 84, 128, 83, - 80, 79, 79, 78, 128, 83, 80, 76, 73, 84, 84, 73, 78, 199, 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, 68, 69, 82, 217, 83, 80, 73, 67, - 69, 128, 83, 80, 72, 69, 82, 73, 67, 65, 204, 83, 80, 69, 69, 67, 72, - 128, 83, 80, 69, 67, 73, 65, 76, 128, 83, 80, 69, 65, 82, 128, 83, 80, - 65, 84, 72, 73, 128, 83, 80, 65, 82, 75, 76, 69, 128, 83, 80, 65, 68, - 197, 83, 80, 65, 67, 73, 78, 199, 83, 80, 128, 83, 79, 87, 73, 76, 207, - 83, 79, 87, 128, 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, 128, 83, 79, 79, 128, 83, 79, 78, 128, 83, - 79, 76, 73, 68, 85, 83, 128, 83, 79, 76, 73, 68, 85, 211, 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, 212, 83, 79, 198, 83, 79, 67, 73, 69, 84, 89, 128, - 83, 79, 65, 128, 83, 207, 83, 78, 79, 87, 77, 65, 78, 128, 83, 78, 79, - 87, 70, 76, 65, 75, 69, 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, 193, 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, 86, 79, 128, 83, 76, 79, 80, 73, 78, 199, 83, 76, 79, 80, 69, - 128, 83, 76, 73, 78, 71, 128, 83, 76, 73, 67, 69, 128, 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, 204, 83, 75, 76, 73, 82, 79, 206, 83, 75, - 73, 78, 128, 83, 75, 69, 87, 69, 196, 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, 200, 83, 73, 88, - 84, 69, 69, 78, 128, 83, 73, 88, 84, 69, 69, 206, 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, 82, 73, 78, 71, 85, 128, 83, 73, - 79, 83, 45, 84, 73, 75, 69, 85, 84, 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, 73, 69, 85, 80, 128, 83, 73, 79, 83, 45, 80, 72, 73, 69, 85, 80, 72, - 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, 73, 89, 69, 79, 75, 128, 83, - 73, 79, 83, 45, 75, 72, 73, 69, 85, 75, 72, 128, 83, 73, 79, 83, 45, 73, + 83, 84, 82, 73, 80, 69, 128, 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, 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, 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, 205, 83, 84, 69, 65, 77, 128, 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, 69, 82, 83, + 128, 83, 84, 65, 82, 212, 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, 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, 128, 83, 83, 73, 88, 128, 83, 83, 73, 84, 128, 83, + 83, 73, 80, 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, 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, 65, + 128, 83, 83, 65, 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, 84, 128, 83, 80, 79, 79, 78, 128, 83, 80, 76, 73, 84, 84, 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, 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, 67, 72, 128, 83, 80, 69, 67, 73, 65, 76, 128, 83, 80, 69, 65, 82, + 128, 83, 80, 65, 84, 72, 73, 128, 83, 80, 65, 82, 75, 76, 69, 128, 83, + 80, 65, 68, 197, 83, 80, 65, 67, 73, 78, 199, 83, 80, 128, 83, 79, 89, + 128, 83, 79, 87, 73, 76, 207, 83, 79, 87, 128, 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, 79, 128, 83, 79, 78, 71, 128, 83, 79, + 78, 128, 83, 79, 76, 73, 68, 85, 83, 128, 83, 79, 76, 73, 68, 85, 211, + 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, 212, 83, 79, 198, 83, 79, 67, 73, + 69, 84, 89, 128, 83, 79, 67, 67, 69, 210, 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, 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, 193, 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, + 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, 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, 204, 83, 75, 76, 73, 82, 79, 206, 83, 75, 73, + 78, 128, 83, 75, 73, 69, 82, 128, 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, 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, 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, 76, 73, 78, 197, 83, 73, 78, 71, 76, 69, 128, 83, - 73, 78, 71, 76, 197, 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, 128, 83, 73, 76, 75, 128, 83, 73, 76, 73, 81, 85, 193, 83, - 73, 76, 65, 51, 128, 83, 73, 75, 73, 128, 83, 73, 75, 50, 128, 83, 73, - 75, 178, 83, 73, 73, 128, 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, 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, 65, 128, - 83, 72, 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, 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, 70, 70, 76, 197, 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, 79, 88, 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, 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, 80, 128, 83, 72, 79, 79, 84, 128, 83, 72, 79, 79, 128, - 83, 72, 79, 71, 201, 83, 72, 79, 199, 83, 72, 79, 197, 83, 72, 79, 65, - 128, 83, 72, 79, 128, 83, 72, 73, 84, 65, 128, 83, 72, 73, 84, 193, 83, - 72, 73, 82, 128, 83, 72, 73, 210, 83, 72, 73, 80, 128, 83, 72, 73, 78, - 73, 71, 128, 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, 73, 128, - 83, 72, 72, 65, 128, 83, 72, 69, 88, 128, 83, 72, 69, 86, 65, 128, 83, - 72, 69, 84, 128, 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, 88, 128, - 83, 72, 65, 86, 73, 89, 65, 78, 73, 128, 83, 72, 65, 86, 73, 65, 206, 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, 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, 128, 83, 72, 65, 78, 71, 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, 68, 79, 87, 69, 196, 83, - 72, 65, 68, 69, 128, 83, 72, 65, 68, 68, 65, 128, 83, 72, 65, 68, 68, + 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, 128, 83, 73, 76, 75, 128, + 83, 73, 76, 73, 81, 85, 193, 83, 73, 76, 65, 51, 128, 83, 73, 75, 73, + 128, 83, 73, 75, 50, 128, 83, 73, 75, 178, 83, 73, 73, 128, 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, + 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, + 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, 70, 70, 76, 197, 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, 79, 89, 128, 83, 72, 79, 88, 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, + 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, + 80, 128, 83, 72, 79, 79, 84, 128, 83, 72, 79, 79, 128, 83, 72, 79, 71, + 201, 83, 72, 79, 199, 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, 128, 83, 72, 73, 210, 83, 72, + 73, 80, 128, 83, 72, 73, 78, 84, 207, 83, 72, 73, 78, 73, 71, 128, 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, 73, 128, 83, 72, 72, 65, + 128, 83, 72, 69, 88, 128, 83, 72, 69, 86, 65, 128, 83, 72, 69, 85, 88, + 128, 83, 72, 69, 84, 128, 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, 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, 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, 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, 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, 69, 69, 78, 128, 83, 69, 86, 69, 78, 84, 69, 69, 206, - 83, 69, 86, 69, 206, 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, 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, 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, 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, 76, 128, 83, 69, 65, 71, 85, 76, 204, 83, 68, 79, 78, 199, - 83, 67, 87, 65, 128, 83, 67, 82, 85, 80, 76, 69, 128, 83, 67, 82, 73, 80, - 84, 128, 83, 67, 82, 69, 69, 78, 128, 83, 67, 82, 69, 69, 206, 83, 67, - 79, 82, 80, 73, 85, 83, 128, 83, 67, 73, 83, 83, 79, 82, 83, 128, 83, 67, - 72, 87, 65, 128, 83, 67, 72, 87, 193, 83, 67, 72, 79, 76, 65, 82, 128, - 83, 67, 72, 69, 77, 193, 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, 73, 77, 65, 84, - 65, 128, 83, 65, 87, 128, 83, 65, 85, 73, 76, 128, 83, 65, 84, 85, 82, - 78, 128, 83, 65, 83, 65, 75, 128, 83, 65, 82, 73, 128, 83, 65, 82, 193, - 83, 65, 82, 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, 65, 72, - 128, 83, 65, 78, 128, 83, 65, 77, 89, 79, 203, 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, 65, 82, 73, 84, 65, - 206, 83, 65, 76, 84, 73, 82, 69, 128, 83, 65, 76, 84, 73, 76, 76, 79, - 128, 83, 65, 76, 84, 128, 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, 128, 83, 65, 74, 68, 65, 72, 128, 83, 65, 73, 76, 128, 83, 65, 73, - 75, 85, 82, 85, 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, 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, 89, - 65, 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, 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, 128, 82, 85, 77, 65, 201, 82, 85, 77, 128, 82, 85, 205, 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, 194, 82, 85, 65, - 128, 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, 89, 128, 82, 82, 85, 88, 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, 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, 128, 82, 82, 65, 88, 128, 82, - 82, 65, 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, 79, - 84, 128, 82, 79, 79, 75, 128, 82, 79, 79, 70, 128, 82, 79, 79, 128, 82, - 79, 77, 65, 206, 82, 79, 196, 82, 79, 67, 128, 82, 79, 66, 65, 84, 128, - 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, 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, 70, 79, 82, 90, 65, 78, 68, 79, 128, 82, 73, - 206, 82, 73, 75, 82, 73, 75, 128, 82, 73, 73, 128, 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, 196, 82, 73, - 71, 72, 84, 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, 83, 73, 79, 83, 128, 82, 73, 69, 85, 76, 45, - 83, 73, 79, 83, 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, 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, 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, 128, 82, 73, 69, 85, 76, 45, 75, 72, 73, - 69, 85, 75, 72, 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, 204, 82, 73, 69, 76, 128, 82, 73, 67, 69, 77, 128, - 82, 73, 67, 69, 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, 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, 197, 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, 83, 85, 80, 73, 78, 85, 83, - 128, 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, 72, 128, 82, 69, 83, 200, 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, 69, 65, 84, 69, 196, 82, 69, 80, 69, - 65, 84, 128, 82, 69, 80, 69, 65, 212, 82, 69, 80, 65, 128, 82, 69, 80, - 193, 82, 69, 78, 84, 79, 71, 69, 78, 128, 82, 69, 77, 85, 128, 82, 69, - 76, 73, 71, 73, 79, 78, 128, 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, - 73, 83, 84, 69, 82, 69, 196, 82, 69, 70, 69, 82, 69, 78, 67, 197, 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, 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, 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, 89, 128, 82, 65, 84, 73, 79, 128, 82, 65, - 84, 128, 82, 65, 83, 79, 85, 204, 82, 65, 83, 72, 65, 128, 82, 65, 80, - 73, 83, 77, 65, 128, 82, 65, 78, 71, 197, 82, 65, 78, 128, 82, 65, 77, - 211, 82, 65, 77, 66, 65, 84, 128, 82, 65, 77, 128, 82, 65, 75, 72, 65, - 78, 71, 128, 82, 65, 73, 83, 69, 196, 82, 65, 73, 78, 128, 82, 65, 73, - 206, 82, 65, 73, 68, 207, 82, 65, 73, 68, 65, 128, 82, 65, 72, 77, 65, - 84, 85, 76, 76, 65, 200, 82, 65, 70, 69, 128, 82, 65, 69, 128, 82, 65, - 68, 73, 79, 65, 67, 84, 73, 86, 197, 82, 65, 68, 201, 82, 65, 68, 128, - 82, 65, 196, 82, 65, 66, 128, 82, 65, 65, 73, 128, 82, 65, 65, 128, 82, - 65, 51, 128, 82, 65, 50, 128, 82, 45, 67, 82, 69, 197, 81, 89, 88, 128, + 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, 206, 83, 69, 85, 88, + 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, 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, 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, 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, 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, + 73, 80, 84, 128, 83, 67, 82, 69, 69, 78, 128, 83, 67, 82, 69, 69, 206, + 83, 67, 79, 82, 80, 73, 85, 83, 128, 83, 67, 73, 83, 83, 79, 82, 83, 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, 76, 65, 82, + 128, 83, 67, 72, 69, 77, 193, 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, 73, 77, 65, + 84, 65, 128, 83, 65, 87, 65, 78, 128, 83, 65, 87, 128, 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, 83, 65, 75, 128, 83, + 65, 82, 73, 128, 83, 65, 82, 193, 83, 65, 82, 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, 65, 72, 128, 83, 65, 78, 128, 83, 65, 77, 89, 79, + 203, 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, 128, 83, 65, 76, 84, 73, 82, 69, + 128, 83, 65, 76, 84, 73, 76, 76, 79, 128, 83, 65, 76, 84, 128, 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, 128, 83, 65, 75, 79, 84, 128, 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, 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, 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, 89, 65, 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, 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, 128, 82, 85, 77, 201, 82, 85, 77, 65, 201, 82, 85, + 77, 128, 82, 85, 205, 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, 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, 89, 128, 82, 82, 85, 88, 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, 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, 128, 82, 82, 65, 88, 128, 82, 82, 65, + 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, 79, 84, + 128, 82, 79, 79, 75, 128, 82, 79, 79, 70, 128, 82, 79, 79, 128, 82, 79, + 77, 65, 206, 82, 79, 196, 82, 79, 67, 128, 82, 79, 66, 65, 84, 128, 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, 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, 75, 82, 73, 75, 128, 82, 73, 73, 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, 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, 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, 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, 197, 82, 69, 85, 88, 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, 83, 85, 80, 73, 78, 85, + 83, 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, 69, 65, 84, 69, 196, 82, 69, 80, 69, 65, 84, + 128, 82, 69, 80, 69, 65, 212, 82, 69, 80, 65, 128, 82, 69, 80, 193, 82, + 69, 78, 84, 79, 71, 69, 78, 128, 82, 69, 78, 128, 82, 69, 77, 85, 128, + 82, 69, 76, 73, 71, 73, 79, 78, 128, 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, 73, 83, 84, 69, 82, 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, 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, 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, 89, 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, 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, 77, 128, 82, 65, 75, 72, 65, 78, 71, 128, 82, 65, 73, 83, 69, + 196, 82, 65, 73, 78, 128, 82, 65, 73, 206, 82, 65, 73, 68, 207, 82, 65, + 73, 68, 65, 128, 82, 65, 73, 128, 82, 65, 72, 77, 65, 84, 85, 76, 76, 65, + 200, 82, 65, 70, 69, 128, 82, 65, 69, 128, 82, 65, 68, 73, 79, 65, 67, + 84, 73, 86, 197, 82, 65, 68, 201, 82, 65, 68, 128, 82, 65, 196, 82, 65, + 66, 128, 82, 65, 65, 73, 128, 82, 65, 65, 128, 82, 65, 51, 128, 82, 65, + 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, @@ -987,37 +1169,42 @@ 85, 79, 84, 128, 81, 85, 79, 80, 128, 81, 85, 79, 128, 81, 85, 75, 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, 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, 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, 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, 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, - 73, 88, 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, 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, 65, 65, 128, 209, 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, 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, 84, 128, 80, 85, 83, 72, 73, 78, 199, 80, 85, 82, 88, 128, - 80, 85, 82, 73, 84, 89, 128, 80, 85, 82, 128, 80, 85, 80, 128, 80, 85, - 79, 88, 128, 80, 85, 79, 80, 128, 80, 85, 79, 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, 50, 128, 80, 85, 128, 80, 84, 72, 65, 72, + 128, 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, 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, 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, 209, 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, 84, 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, 73, 84, 89, 128, 80, 85, 82, 128, 80, 85, 80, + 128, 80, 85, 79, 88, 128, 80, 85, 79, 80, 128, 80, 85, 79, 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, 69, 128, + 80, 85, 65, 69, 128, 80, 85, 50, 128, 80, 85, 128, 80, 84, 72, 65, 72, 193, 80, 84, 69, 128, 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, @@ -1031,247 +1218,318 @@ 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, 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, 78, 84, 128, 80, 82, 73, 78, 212, 80, - 82, 73, 77, 69, 128, 80, 82, 73, 77, 197, 80, 82, 69, 86, 73, 79, 85, - 211, 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, 70, 65, 67, 197, 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, 77, 128, 80, 80, 65, 128, 80, 79, 88, 128, 80, 79, 87, - 69, 82, 211, 80, 79, 87, 69, 82, 128, 80, 79, 85, 78, 196, 80, 79, 83, - 84, 80, 79, 83, 73, 84, 73, 79, 206, 80, 79, 83, 84, 65, 204, 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, 128, 80, 79, 208, 80, - 79, 79, 128, 80, 79, 78, 68, 79, 128, 80, 79, 76, 201, 80, 79, 76, 69, - 128, 80, 79, 75, 82, 89, 84, 73, 69, 128, 80, 79, 75, 79, 74, 73, 128, - 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, 77, 69, 196, 80, 76, 85, 77, 128, - 80, 76, 85, 75, 128, 80, 76, 79, 87, 128, 80, 76, 79, 80, 72, 85, 128, - 80, 76, 69, 84, 72, 82, 79, 78, 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, 197, - 80, 76, 65, 128, 80, 73, 90, 90, 73, 67, 65, 84, 79, 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, 67, 69, 83, - 128, 80, 73, 82, 73, 71, 128, 80, 73, 82, 73, 199, 80, 73, 80, 73, 78, - 71, 128, 80, 73, 80, 128, 80, 73, 78, 87, 72, 69, 69, 204, 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, 69, 88, 128, 80, 73, 69, 85, 80, 45, 84, 73, 75, 69, - 85, 84, 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, 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, 128, 80, 73, 69, 85, 80, 45, 80, 72, 73, 69, 85, - 80, 72, 128, 80, 73, 69, 85, 80, 45, 78, 73, 69, 85, 78, 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, 80, 128, 80, 73, - 69, 67, 69, 128, 80, 73, 69, 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, 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, 73, 80, 80, 73, 78, 197, 80, 72, 73, 69, 85, 80, 72, - 45, 80, 73, 69, 85, 80, 128, 80, 72, 73, 69, 85, 80, 200, 80, 72, 73, + 86, 65, 84, 69, 128, 80, 82, 73, 83, 72, 84, 72, 65, 77, 65, 84, 82, 193, + 80, 82, 73, 78, 84, 128, 80, 82, 73, 78, 212, 80, 82, 73, 77, 69, 128, + 80, 82, 73, 77, 197, 80, 82, 69, 86, 73, 79, 85, 211, 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, 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, 85, 78, 196, 80, 79, 83, 84, 80, 79, 83, 73, 84, 73, 79, + 206, 80, 79, 83, 84, 65, 204, 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, 128, 80, 79, 208, 80, 79, 79, 128, 80, 79, 78, 68, + 79, 128, 80, 79, 76, 201, 80, 79, 76, 69, 128, 80, 79, 75, 82, 89, 84, + 73, 69, 128, 80, 79, 75, 79, 74, 73, 128, 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, 77, 69, 196, 80, 76, 85, 77, 128, 80, 76, 85, 75, 128, 80, 76, + 79, 87, 128, 80, 76, 79, 80, 72, 85, 128, 80, 76, 69, 84, 72, 82, 79, 78, + 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, 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, + 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, 80, 73, 78, 71, 128, 80, 73, 80, 128, + 80, 73, 78, 87, 72, 69, 69, 204, 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, 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, 80, 128, 80, 73, 69, 67, 69, 128, 80, + 73, 69, 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, 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, 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, 82, 89, 78, 71, 69, 65, 204, 80, 72, 65, 82, 128, 80, 72, 65, 78, 128, 80, - 72, 65, 73, 83, 84, 79, 211, 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, 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, + 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, 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, 128, 80, 69, - 82, 83, 73, 65, 206, 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, - 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, 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, 78, 84, 65, 83, 69, 77, 69, 128, 80, 69, 78, 84, 65, 71, 79, - 78, 128, 80, 69, 78, 83, 85, 128, 80, 69, 78, 78, 217, 80, 69, 78, 73, - 72, 73, 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, 80, 128, 80, 69, 69, 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, 69, 128, 80, 69, 65, 67, 197, - 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, 88, 128, 80, 65, - 87, 78, 128, 80, 65, 215, 80, 65, 86, 73, 89, 65, 78, 73, 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, 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, 69, 81, 128, 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, 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, 210, 80, 65, 80, 128, 80, 65, 208, 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, 75, 82, 65, 128, 80, 65, 78, 84, 73, 128, 80, 65, 78, 79, - 76, 79, 78, 71, 128, 80, 65, 78, 71, 87, 73, 83, 65, 68, 128, 80, 65, 78, - 71, 76, 65, 89, 65, 82, 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, 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, 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, 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, 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, 68, 77, 193, 80, 65, 68, 128, 80, 65, 67, 75, - 73, 78, 71, 128, 80, 65, 65, 84, 85, 128, 80, 65, 65, 83, 69, 78, 84, 79, - 128, 80, 65, 65, 73, 128, 80, 65, 65, 45, 80, 73, 76, 76, 65, 128, 80, - 65, 65, 128, 80, 50, 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, 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, 128, 79, 85, 84, 76, 73, - 78, 69, 196, 79, 85, 84, 76, 73, 78, 69, 128, 79, 85, 84, 69, 210, 79, - 85, 78, 75, 73, 193, 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, 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, - 73, 71, 73, 78, 65, 204, 79, 82, 73, 71, 73, 78, 128, 79, 82, 68, 73, 78, - 65, 204, 79, 82, 67, 72, 73, 68, 128, 79, 80, 84, 73, 79, 206, 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, 69, 82, 65, 84, 79, 82, 128, 79, 80, 69, 82, 65, 84, 79, 210, 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, 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, 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, - 76, 73, 78, 197, 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, 77, 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, 69, 79, 78, 128, 79, - 73, 76, 128, 79, 72, 77, 128, 79, 72, 205, 79, 72, 128, 79, 71, 79, 78, - 69, 75, 128, 79, 71, 79, 78, 69, 203, 79, 71, 72, 65, 205, 79, 68, 196, - 79, 67, 84, 79, 66, 69, 82, 128, 79, 67, 210, 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, 45, 89, 69, 128, 79, 45, 69, 79, 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, 80, 128, 78, - 90, 85, 79, 88, 128, 78, 90, 85, 79, 128, 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, - 128, 78, 90, 65, 88, 128, 78, 90, 65, 84, 128, 78, 90, 65, 80, 128, 78, - 90, 65, 128, 78, 89, 87, 65, 128, 78, 89, 85, 88, 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, 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, 211, 78, 89, 73, 80, 128, 78, 89, 73, 78, 45, - 68, 79, 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, 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, 65, 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, 84, 73, 76, 76, - 85, 128, 78, 85, 84, 128, 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, 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, 66, 69, 82, - 128, 78, 85, 77, 128, 78, 85, 76, 76, 128, 78, 85, 76, 204, 78, 85, 75, - 84, 65, 128, 78, 85, 69, 128, 78, 85, 66, 73, 65, 206, 78, 85, 49, 49, - 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, 88, 128, 78, 79, - 87, 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, 128, 78, 79, 84, 197, 78, 79, 84, - 67, 72, 69, 196, 78, 79, 84, 67, 72, 128, 78, 79, 84, 128, 78, 79, 83, - 69, 128, 78, 79, 82, 84, 72, 87, 69, 83, 212, 78, 79, 82, 84, 200, 78, - 79, 82, 77, 65, 204, 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, 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, 79, 128, 78, 78, 78, 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, 77, 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, 80, 128, 78, - 74, 85, 79, 88, 128, 78, 74, 85, 79, 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, 128, 78, 74, 73, 128, 78, 74, 69, 69, 128, - 78, 74, 69, 128, 78, 74, 128, 78, 73, 88, 128, 78, 73, 83, 65, 71, 128, - 78, 73, 82, 85, 71, 85, 128, 78, 73, 80, 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, 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, 73, - 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, 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, 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, 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, 65, 128, 78, 72, 128, 78, 71, 85, 79, 88, 128, 78, 71, 85, - 79, 84, 128, 78, 71, 85, 79, 128, 78, 71, 79, 88, 128, 78, 71, 79, 84, - 128, 78, 71, 79, 80, 128, 78, 71, 79, 78, 128, 78, 71, 79, 69, 72, 128, - 78, 71, 79, 69, 200, 78, 71, 207, 78, 71, 75, 65, 128, 78, 71, 73, 69, - 88, 128, 78, 71, 73, 69, 80, 128, 78, 71, 73, 69, 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, 78, 128, 78, 71, 71, 69, 69, 128, 78, 71, 71, 69, 128, - 78, 71, 71, 65, 128, 78, 71, 71, 128, 78, 71, 69, 88, 128, 78, 71, 69, - 80, 128, 78, 71, 69, 78, 128, 78, 71, 69, 65, 68, 65, 76, 128, 78, 71, - 69, 128, 78, 71, 65, 88, 128, 78, 71, 65, 84, 128, 78, 71, 65, 211, 78, - 71, 65, 80, 128, 78, 71, 65, 78, 128, 78, 71, 65, 73, 128, 78, 71, 65, - 65, 73, 128, 78, 71, 193, 78, 70, 128, 78, 69, 88, 212, 78, 69, 88, 128, - 78, 69, 87, 76, 73, 78, 69, 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, + 82, 83, 79, 206, 80, 69, 82, 83, 73, 65, 206, 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, 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, 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, 78, 84, 65, 83, 69, 77, 69, 128, 80, 69, + 78, 84, 65, 71, 79, 78, 128, 80, 69, 78, 83, 85, 128, 80, 69, 78, 78, + 217, 80, 69, 78, 73, 72, 73, 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, 80, 128, + 80, 69, 69, 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, 69, 128, 80, 69, 65, 67, 197, 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, 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, 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, 69, 81, 128, 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, 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, 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, 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, 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, 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, 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, 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, 72, 76, 65, 86, 201, 80, 65, 68, 77, 193, 80, 65, + 68, 193, 80, 65, 68, 128, 80, 65, 67, 75, 73, 78, 71, 128, 80, 65, 65, + 84, 85, 128, 80, 65, 65, 83, 69, 78, 84, 79, 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, 78, 75, 73, 193, 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, 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, 68, 73, 78, 65, 204, 79, 82, 67, 72, 73, 68, + 128, 79, 80, 84, 73, 79, 206, 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, 69, 82, 65, 84, 79, 82, + 128, 79, 80, 69, 82, 65, 84, 79, 210, 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, 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, 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, + 76, 73, 78, 197, 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, 77, + 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, 72, 128, 79, 71, 79, 78, 69, 75, 128, 79, 71, + 79, 78, 69, 203, 79, 71, 72, 65, 205, 79, 69, 75, 128, 79, 68, 196, 79, + 67, 84, 79, 66, 69, 82, 128, 79, 67, 210, 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, 80, + 128, 78, 90, 85, 79, 88, 128, 78, 90, 85, 79, 128, 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, 128, 78, 90, 65, 88, 128, 78, 90, 65, 84, 128, 78, 90, 65, 80, + 128, 78, 90, 65, 128, 78, 89, 87, 65, 128, 78, 89, 85, 88, 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, 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, 211, 78, 89, 73, 80, 128, 78, 89, 73, + 78, 45, 68, 79, 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, 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, + 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, 84, + 73, 76, 76, 85, 128, 78, 85, 84, 128, 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, 128, + 78, 85, 77, 128, 78, 85, 76, 76, 128, 78, 85, 76, 204, 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, 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, 69, 69, 128, 78, 83, 72, 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, 128, 78, 79, 84, 197, 78, 79, 84, 67, 72, 69, 196, + 78, 79, 84, 67, 72, 128, 78, 79, 84, 128, 78, 79, 83, 69, 128, 78, 79, + 82, 84, 72, 87, 69, 83, 212, 78, 79, 82, 84, 200, 78, 79, 82, 77, 65, + 204, 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, 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, 79, 128, + 78, 78, 78, 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, 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, 75, 207, 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, 80, 128, 78, 74, 85, 79, 88, 128, + 78, 74, 85, 79, 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, 128, 78, 74, 73, 128, 78, 74, 69, 69, + 128, 78, 74, 69, 128, 78, 74, 65, 69, 77, 76, 73, 128, 78, 74, 65, 69, + 77, 128, 78, 74, 128, 78, 73, 88, 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, 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, 73, 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, 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, 65, 128, 78, 72, 128, 78, 71, 89, 69, 128, 78, + 71, 86, 69, 128, 78, 71, 85, 79, 88, 128, 78, 71, 85, 79, 84, 128, 78, + 71, 85, 79, 128, 78, 71, 79, 88, 128, 78, 71, 79, 85, 128, 78, 71, 79, + 213, 78, 71, 79, 84, 128, 78, 71, 79, 80, 128, 78, 71, 79, 78, 128, 78, + 71, 79, 69, 72, 128, 78, 71, 79, 69, 200, 78, 71, 207, 78, 71, 75, 87, + 65, 69, 78, 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, 71, 85, 128, 78, 71, 71, + 79, 79, 128, 78, 71, 71, 79, 128, 78, 71, 71, 73, 128, 78, 71, 71, 69, + 78, 128, 78, 71, 71, 69, 69, 128, 78, 71, 71, 69, 128, 78, 71, 71, 128, + 78, 71, 69, 88, 128, 78, 71, 69, 80, 128, 78, 71, 69, 78, 128, 78, 71, + 69, 65, 68, 65, 76, 128, 78, 71, 69, 128, 78, 71, 65, 88, 128, 78, 71, + 65, 84, 128, 78, 71, 65, 211, 78, 71, 65, 80, 128, 78, 71, 65, 78, 128, + 78, 71, 65, 73, 128, 78, 71, 65, 65, 73, 128, 78, 71, 193, 78, 70, 128, + 78, 69, 88, 212, 78, 69, 88, 128, 78, 69, 87, 76, 73, 78, 69, 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, 73, 84, 72, 69, 210, 78, 69, 71, 65, 84, 73, 86, 197, 78, 69, 71, 65, 84, 73, 79, @@ -1283,1367 +1541,1488 @@ 78, 68, 73, 80, 128, 78, 68, 73, 69, 88, 128, 78, 68, 73, 69, 128, 78, 68, 73, 128, 78, 68, 69, 88, 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, 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, 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, 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, 206, 78, 65, 82, 82, 79, 215, 78, 65, 82, 128, 78, 65, 80, 128, 78, - 65, 79, 211, 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, 73, 82, 193, 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, 66, 76, 65, 128, 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, 65, 128, 78, 65, 193, 78, 65, 50, 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, 128, 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, 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, 84, 128, 77, 85, 83, 73, 67, 128, 77, 85, 83, - 73, 195, 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, 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, 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, 128, 77, 85, 199, 77, 85, 69, 128, - 77, 85, 67, 200, 77, 85, 67, 65, 65, 68, 128, 77, 85, 65, 78, 128, 77, - 85, 45, 71, 65, 65, 72, 76, 65, 193, 77, 213, 77, 83, 128, 77, 80, 65, - 128, 77, 79, 88, 128, 77, 79, 86, 69, 196, 77, 79, 85, 84, 72, 128, 77, - 79, 85, 84, 200, 77, 79, 85, 78, 84, 65, 73, 78, 128, 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, 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, 128, 77, 79, 78, 84, 72, 128, 77, 79, 78, 84, 200, 77, 79, 78, - 79, 83, 84, 65, 66, 76, 197, 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, 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, 65, 128, 77, 207, 77, 78, 89, - 65, 205, 77, 78, 65, 83, 128, 77, 77, 128, 77, 205, 77, 76, 65, 128, 77, - 76, 128, 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, 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, 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, 83, 83, 65, 78, 71, 83, 73, 79, 83, 128, 77, 73, - 69, 85, 77, 45, 82, 73, 69, 85, 76, 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, 72, 73, 69, 85, 72, 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, 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, 196, 77, - 73, 67, 82, 207, 77, 73, 128, 77, 201, 77, 72, 90, 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, 128, 77, 71, 66, 73, 128, 77, 71, 66, 69, 69, - 128, 77, 71, 66, 69, 128, 77, 71, 66, 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, - 69, 90, 90, 79, 128, 77, 69, 88, 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, 71, 128, 77, 69, 84, 65, 76, - 128, 77, 69, 84, 193, 77, 69, 83, 83, 69, 78, 73, 65, 206, 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, 128, 77, 69, 82, 67, - 85, 82, 89, 128, 77, 69, 78, 128, 77, 69, 206, 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, 128, 77, 69, 205, 77, 69, 76, 79, 78, 128, 77, 69, 73, - 90, 73, 128, 77, 69, 71, 65, 84, 79, 78, 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, 128, 77, 69, 68, 73, 85, + 65, 80, 128, 78, 68, 65, 65, 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, 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, 206, 78, 65, 82, 82, 79, + 215, 78, 65, 82, 128, 78, 65, 79, 211, 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, 73, + 82, 193, 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, 66, 76, 65, + 128, 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, 65, 128, 78, 65, + 193, 78, 65, 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, 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, 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, 84, 128, 77, + 85, 83, 73, 67, 128, 77, 85, 83, 73, 195, 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, 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, 128, 77, 85, 199, 77, 85, 69, + 128, 77, 85, 67, 200, 77, 85, 67, 65, 65, 68, 128, 77, 85, 65, 78, 128, + 77, 85, 45, 71, 65, 65, 72, 76, 65, 193, 77, 213, 77, 83, 128, 77, 80, + 65, 128, 77, 79, 88, 128, 77, 79, 86, 69, 196, 77, 79, 85, 84, 72, 128, + 77, 79, 85, 84, 200, 77, 79, 85, 78, 84, 65, 73, 78, 128, 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, 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, 128, 77, 79, 78, 84, 72, 128, 77, 79, 78, 84, 200, 77, 79, + 78, 79, 83, 84, 65, 66, 76, 197, 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, 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, 65, 128, 77, 207, 77, 78, + 89, 65, 205, 77, 78, 65, 83, 128, 77, 77, 128, 77, 205, 77, 76, 65, 128, + 77, 76, 128, 77, 73, 88, 128, 77, 73, 84, 128, 77, 73, 212, 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, + 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, + 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, 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, 196, 77, 73, 67, 82, 207, 77, 73, 128, 77, 72, 90, + 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, 128, 77, 71, 66, 73, 128, + 77, 71, 66, 69, 69, 128, 77, 71, 66, 69, 128, 77, 71, 66, 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, 69, 90, 90, 79, 128, 77, 69, 88, 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, 71, + 128, 77, 69, 84, 65, 76, 128, 77, 69, 84, 193, 77, 69, 83, 83, 69, 78, + 73, 65, 206, 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, 128, 77, 69, 82, 71, 69, 128, 77, 69, 82, 67, 85, 82, 89, 128, 77, + 69, 78, 68, 85, 84, 128, 77, 69, 78, 128, 77, 69, 206, 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, 78, 128, 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, 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, 69, 69, 128, 77, 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, 65, 84, 128, 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, 67, 72, 213, 77, 66, 85, 128, 77, 66, 79, 79, 128, 77, 66, 79, 128, 77, 66, 73, - 128, 77, 66, 69, 69, 128, 77, 66, 69, 128, 77, 66, 65, 128, 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, 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, 79, 82, 193, 77, - 65, 83, 72, 50, 128, 77, 65, 83, 67, 85, 76, 73, 78, 197, 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, 66, 85, 84, 65, - 128, 77, 65, 82, 66, 85, 84, 193, 77, 65, 82, 128, 77, 65, 81, 65, 70, - 128, 77, 65, 80, 73, 81, 128, 77, 65, 78, 83, 89, 79, 78, 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, 67, 72, 213, 77, 65, 78, 65, 67, 76, 69, 83, 128, 77, - 65, 76, 84, 69, 83, 197, 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, 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, 75, 85, 82, 79, 128, 77, 65, 73, 68, 69, 78, 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, 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, 65, - 73, 128, 77, 65, 65, 128, 77, 65, 50, 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, 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, 65, 84, 197, 76, 85, 205, 76, 85, 76, 128, 76, 85, 73, 83, - 128, 76, 85, 72, 128, 76, 85, 71, 65, 76, 128, 76, 85, 71, 65, 204, 76, - 85, 51, 128, 76, 85, 50, 128, 76, 85, 178, 76, 79, 90, 69, 78, 71, 69, - 128, 76, 79, 90, 69, 78, 71, 197, 76, 79, 88, 128, 76, 79, 87, 45, 185, - 76, 79, 85, 82, 69, 128, 76, 79, 84, 85, 83, 128, 76, 79, 84, 128, 76, - 79, 82, 82, 65, 73, 78, 69, 128, 76, 79, 80, 128, 76, 79, 79, 84, 128, - 76, 79, 79, 80, 128, 76, 79, 79, 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, 76, 76, 128, 76, 79, 71, 210, 76, 79, - 71, 79, 84, 89, 80, 197, 76, 79, 71, 128, 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, - 77, 128, 76, 76, 76, 65, 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, 84, - 84, 76, 197, 76, 73, 84, 82, 193, 76, 73, 84, 128, 76, 73, 83, 72, 128, - 76, 73, 82, 193, 76, 73, 81, 85, 73, 196, 76, 73, 80, 128, 76, 73, 78, - 75, 73, 78, 199, 76, 73, 78, 203, 76, 73, 78, 69, 83, 128, 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, 76, 89, 128, 76, 73, 76, 73, 84, 72, 128, - 76, 73, 76, 128, 76, 73, 73, 128, 76, 73, 71, 72, 84, 78, 73, 78, 71, - 128, 76, 73, 71, 72, 84, 128, 76, 73, 70, 69, 128, 76, 73, 69, 88, 128, - 76, 73, 69, 84, 128, 76, 73, 69, 80, 128, 76, 73, 69, 128, 76, 73, 68, - 128, 76, 73, 66, 82, 65, 128, 76, 73, 65, 66, 73, 76, 73, 84, 217, 76, - 72, 79, 79, 128, 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, 84, 84, 69, 82, 128, - 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, 128, 76, 69, - 78, 84, 73, 67, 85, 76, 65, 210, 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, 73, 128, 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, 69, 70, 84, 45, 72, 65, 78, 196, 76, 69, 70, - 84, 128, 76, 69, 69, 75, 128, 76, 69, 65, 84, 72, 69, 82, 128, 76, 69, - 65, 70, 128, 76, 69, 65, 68, 69, 82, 128, 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, 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, 84, 128, 76, - 65, 83, 212, 76, 65, 82, 89, 78, 71, 69, 65, 204, 76, 65, 82, 71, 69, - 210, 76, 65, 82, 71, 197, 76, 65, 80, 128, 76, 65, 78, 71, 85, 65, 71, - 197, 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, 72, 83, 72, 85, 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, 69, 86, 128, 76, 65, 69, 128, 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, 65, 78, 128, 76, 65, 65, 77, 85, 128, 76, 65, 65, 73, 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, 69, 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, 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, 80, 128, 75, 85, 79, 88, 128, 75, - 85, 79, 80, 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, 55, - 128, 75, 85, 52, 128, 75, 85, 180, 75, 85, 51, 128, 75, 85, 179, 75, 84, - 128, 75, 83, 83, 65, 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, 79, 128, 75, 80, 79, 128, 75, 80, 73, 128, 75, 80, 69, - 78, 128, 75, 80, 69, 69, 128, 75, 80, 69, 128, 75, 80, 65, 78, 128, 75, - 80, 65, 128, 75, 79, 88, 128, 75, 79, 84, 79, 128, 75, 79, 84, 128, 75, + 128, 77, 66, 69, 78, 128, 77, 66, 69, 69, 128, 77, 66, 69, 128, 77, 66, + 65, 65, 128, 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, 65, 128, 77, 65, 88, 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, 79, 82, 193, 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, 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, 66, 85, + 84, 65, 128, 77, 65, 82, 66, 85, 84, 193, 77, 65, 82, 128, 77, 65, 81, + 65, 70, 128, 77, 65, 80, 73, 81, 128, 77, 65, 208, 77, 65, 78, 83, 89, + 79, 78, 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, 67, 72, 213, 77, 65, 78, 65, 67, + 76, 69, 83, 128, 77, 65, 76, 84, 69, 83, 197, 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, 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, 75, 85, 82, 79, 128, 77, 65, + 73, 68, 69, 78, 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, 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, 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, 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, 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, 65, 76, 128, 76, 85, 71, + 65, 204, 76, 85, 69, 128, 76, 85, 51, 128, 76, 85, 50, 128, 76, 85, 178, + 76, 79, 90, 69, 78, 71, 69, 128, 76, 79, 90, 69, 78, 71, 197, 76, 79, 88, + 128, 76, 79, 87, 69, 210, 76, 79, 87, 45, 185, 76, 79, 85, 82, 69, 128, + 76, 79, 84, 85, 83, 128, 76, 79, 84, 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, 128, 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, 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, 67, 65, 84, 73, 86, 69, 128, 76, 79, 67, 65, 84, + 73, 79, 206, 76, 79, 65, 128, 76, 78, 128, 76, 77, 128, 76, 76, 76, 65, + 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, 82, 193, 76, 73, 84, 128, 76, 73, 83, 213, 76, 73, + 83, 72, 128, 76, 73, 82, 193, 76, 73, 81, 85, 73, 196, 76, 73, 80, 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, 76, 89, 128, 76, 73, 76, 73, 84, 72, 128, 76, 73, 76, + 128, 76, 73, 73, 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, 128, 76, 73, 69, 84, 128, 76, 73, 69, 80, 128, + 76, 73, 69, 128, 76, 73, 68, 128, 76, 73, 66, 82, 65, 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, 84, 84, 69, + 82, 128, 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, + 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, 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, 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, 75, 128, 76, 69, 69, 69, 69, 128, 76, 69, 65, 84, 72, 69, 82, 128, + 76, 69, 65, 70, 128, 76, 69, 65, 68, 69, 82, 128, 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, 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, + 84, 128, 76, 65, 83, 212, 76, 65, 82, 89, 78, 71, 69, 65, 204, 76, 65, + 82, 71, 69, 210, 76, 65, 82, 71, 197, 76, 65, 80, 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, + 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, 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, 65, 84, 128, 76, 65, 65, + 78, 128, 76, 65, 65, 77, 85, 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, 69, 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, 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, 80, 128, 75, 85, 79, 88, 128, 75, 85, 79, 80, + 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, 55, 128, 75, 85, + 52, 128, 75, 85, 180, 75, 85, 51, 128, 75, 85, 179, 75, 84, 128, 75, 83, + 83, 65, 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, 79, 128, 75, 80, 79, 128, 75, 80, 73, 128, 75, 80, 69, 78, 128, + 75, 80, 69, 69, 128, 75, 80, 69, 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, 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, 72, 128, 75, 79, 69, 84, - 128, 75, 79, 65, 128, 75, 78, 73, 71, 72, 84, 128, 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, 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, 203, 75, 73, 88, 128, 75, 73, 84, 128, 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, 80, 128, 75, 73, - 208, 75, 73, 78, 83, 72, 73, 80, 128, 75, 73, 73, 128, 75, 73, 72, 128, - 75, 73, 69, 88, 128, 75, 73, 69, 80, 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, 65, 84, 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, 73, - 69, 85, 75, 200, 75, 72, 73, 128, 75, 72, 72, 65, 128, 75, 72, 69, 73, - 128, 75, 72, 69, 69, 128, 75, 72, 69, 128, 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, 75, 65, 83, 83, 73, 65, 206, 75, 72, 65, 73, - 128, 75, 72, 65, 72, 128, 75, 72, 65, 65, 128, 75, 71, 128, 75, 69, 89, - 67, 65, 80, 128, 75, 69, 89, 66, 79, 65, 82, 68, 128, 75, 69, 89, 128, - 75, 69, 217, 75, 69, 88, 128, 75, 69, 84, 84, 201, 75, 69, 83, 72, 50, - 128, 75, 69, 80, 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, 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, 86, 89, 75, 65, 128, 75, 65, - 85, 78, 65, 128, 75, 65, 85, 206, 75, 65, 84, 79, 128, 75, 65, 84, 72, - 73, 83, 84, 73, 128, 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, 84, 128, 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, 82, 79, 82, - 73, 73, 128, 75, 65, 82, 69, 206, 75, 65, 82, 65, 84, 84, 79, 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, 80, 128, 75, 65, 78, 84, 65, 74, 193, 75, - 65, 78, 71, 128, 75, 65, 78, 65, 75, 79, 128, 75, 65, 77, 52, 128, 75, - 65, 77, 50, 128, 75, 65, 75, 79, 128, 75, 65, 75, 65, 66, 65, 84, 128, - 75, 65, 75, 128, 75, 65, 203, 75, 65, 73, 82, 73, 128, 75, 65, 73, 128, - 75, 65, 201, 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, 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, 65, - 178, 74, 87, 65, 128, 74, 85, 84, 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, - 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, 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, 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, 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, 65, 89, 65, 78, 78, 65, 128, 74, - 65, 86, 73, 89, 65, 78, 73, 128, 74, 65, 82, 128, 74, 65, 80, 65, 78, 69, - 83, 197, 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, 68, 69, 128, 74, 65, 65, 128, - 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, 89, - 65, 78, 78, 65, 128, 73, 89, 128, 73, 85, 74, 65, 128, 73, 85, 128, 73, - 84, 69, 82, 65, 84, 73, 79, 206, 73, 84, 69, 77, 128, 73, 83, 83, 72, 65, - 82, 128, 73, 83, 211, 73, 83, 79, 78, 128, 73, 83, 79, 206, 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, 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, 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, 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, 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, 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, - 76, 85, 68, 73, 78, 199, 73, 78, 67, 72, 128, 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, 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, - 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, 77, 73, 69, 85, 77, 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, 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, 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, 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, 45, 89, 65, 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, 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, 65, 82, 65, 68, 68, 79, 128, - 72, 82, 89, 86, 78, 73, 193, 72, 80, 87, 71, 128, 72, 80, 65, 128, 72, - 80, 128, 72, 79, 85, 83, 69, 128, 72, 79, 85, 82, 71, 76, 65, 83, 83, - 128, 72, 79, 85, 210, 72, 79, 84, 65, 128, 72, 79, 82, 83, 69, 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, 79, 82, - 85, 128, 72, 79, 79, 78, 128, 72, 79, 77, 79, 84, 72, 69, 84, 73, 67, - 128, 72, 79, 77, 79, 84, 72, 69, 84, 73, 195, 72, 79, 76, 68, 73, 78, - 199, 72, 79, 76, 65, 77, 128, 72, 79, 76, 65, 205, 72, 79, 69, 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, 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, 82, 73, 81, 128, - 72, 73, 71, 72, 45, 82, 69, 86, 69, 82, 83, 69, 68, 45, 185, 72, 73, 69, - 88, 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, 128, 72, 73, 68, 73, 78, 199, 72, 73, 68, 69, 84, 128, - 72, 73, 68, 69, 128, 72, 72, 87, 65, 128, 72, 72, 85, 128, 72, 72, 79, - 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, 65, 71, 79, 78, 128, 72, 69, 84, 72, - 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, 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, 205, 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, 128, - 72, 69, 65, 82, 212, 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, 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, 78, 85, 78, 79, 207, 72, 65, 78, 71, 90, - 72, 79, 213, 72, 65, 78, 68, 83, 128, 72, 65, 78, 68, 128, 72, 65, 78, + 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, 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, 128, + 75, 78, 73, 71, 72, 84, 128, 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, 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, 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, 73, + 128, 75, 73, 72, 128, 75, 73, 69, 88, 128, 75, 73, 69, 80, 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, 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, 73, 84, 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, 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, 66, 79, 65, 82, 68, 128, 75, 69, 89, 128, 75, + 69, 217, 75, 69, 88, 128, 75, 69, 85, 88, 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, 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, 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, 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, 80, 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, + 75, 79, 128, 75, 65, 75, 65, 66, 65, 84, 128, 75, 65, 75, 128, 75, 65, + 203, 75, 65, 73, 82, 73, 128, 75, 65, 73, 128, 75, 65, 201, 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, + 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, 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, 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, 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, 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, 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, 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, 65, 89, 65, 78, 78, 65, 128, 74, 65, 86, 73, 89, 65, + 78, 73, 128, 74, 65, 82, 128, 74, 65, 80, 65, 78, 69, 83, 197, 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, 68, 69, 128, 74, 65, 65, 128, 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, 89, 69, 75, 128, + 73, 89, 65, 78, 78, 65, 128, 73, 85, 74, 65, 128, 73, 85, 128, 73, 84, + 69, 82, 65, 84, 73, 79, 206, 73, 84, 69, 77, 128, 73, 83, 83, 72, 65, 82, + 128, 73, 83, 211, 73, 83, 79, 78, 128, 73, 83, 79, 206, 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, 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, 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, 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, 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, 195, 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, 76, 85, 68, 73, 78, 199, 73, + 78, 67, 72, 128, 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, 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, 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, 54, 68, 55, 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, 55, 50, 67, 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, 52, 51, 57, 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, 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, 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, 82, 89, 86, 78, 73, 193, 72, 80, 87, 71, 128, 72, 80, + 65, 128, 72, 80, 128, 72, 79, 85, 82, 71, 76, 65, 83, 83, 128, 72, 79, + 85, 210, 72, 79, 84, 65, 128, 72, 79, 82, 83, 69, 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, 78, 128, 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, 72, 79, 76, 65, 77, 128, 72, 79, 76, 65, + 205, 72, 79, 75, 65, 128, 72, 79, 73, 128, 72, 79, 69, 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, 82, 69, 86, + 69, 82, 83, 69, 68, 45, 185, 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, 128, 72, 73, 68, 73, 78, 199, 72, 73, 68, + 69, 84, 128, 72, 73, 68, 69, 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, + 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, 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, 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, 128, 72, 69, 65, 82, 212, 72, 69, 65, 68, 83, + 84, 82, 79, 75, 69, 128, 72, 69, 65, 68, 83, 84, 79, 78, 197, 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, 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, 78, + 85, 78, 79, 207, 72, 65, 78, 71, 90, 72, 79, 213, 72, 65, 78, 68, 83, + 128, 72, 65, 78, 68, 76, 69, 83, 128, 72, 65, 78, 68, 128, 72, 65, 78, 45, 65, 75, 65, 84, 128, 72, 65, 77, 90, 65, 128, 72, 65, 77, 77, 69, 210, 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, 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, 69, 128, - 72, 65, 65, 82, 85, 128, 72, 65, 193, 72, 65, 45, 72, 65, 128, 72, 45, + 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, 69, 128, - 71, 89, 65, 83, 128, 71, 89, 65, 65, 128, 71, 89, 65, 128, 71, 89, 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, @@ -2656,462 +3035,558 @@ 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, 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, 77, 77, 193, - 71, 82, 65, 73, 78, 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, 78, 71, 128, 71, 79, 76, 68, 128, - 71, 79, 73, 78, 199, 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, 84, 84, 65, 204, 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, 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, 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, 83, 84, - 128, 71, 72, 79, 128, 71, 72, 73, 128, 71, 72, 72, 65, 128, 71, 72, 69, - 69, 128, 71, 72, 69, 128, 71, 72, 197, 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, 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, 80, 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, 80, 128, 71, 71, 65, 65, 128, 71, 69, 84, - 193, 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, 68, 79, 76, 65, 128, 71, 69, 68, 69, 128, 71, 69, 66, 207, - 71, 69, 66, 193, 71, 69, 65, 82, 128, 71, 68, 65, 78, 128, 71, 67, 73, - 71, 128, 71, 67, 65, 206, 71, 66, 79, 78, 128, 71, 66, 69, 78, 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, 51, 128, 71, - 65, 80, 80, 69, 196, 71, 65, 78, 77, 65, 128, 71, 65, 78, 71, 73, 65, - 128, 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, 65, 76, 128, 71, - 65, 77, 65, 204, 71, 65, 77, 128, 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, 70, 89, 88, 128, 70, 89, - 84, 128, 70, 89, 80, 128, 70, 89, 65, 128, 70, 89, 128, 70, 87, 73, 128, - 70, 87, 69, 69, 128, 70, 87, 69, 128, 70, 87, 65, 65, 128, 70, 87, 65, - 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, 82, 128, 70, 85, 80, 128, 70, 85, 78, - 69, 82, 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, 84, 72, 79, 82, 193, 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, 205, 70, 82, 79, 71, 128, 70, 82, 73, - 84, 85, 128, 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, 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, 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, 83, 84, 69, 82, 73, 78, 71, 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, 78, 79, 84, - 197, 70, 79, 79, 84, 128, 70, 79, 79, 128, 70, 79, 78, 71, 77, 65, 78, - 128, 70, 79, 76, 76, 89, 128, 70, 79, 76, 76, 79, 87, 73, 78, 71, 128, - 70, 79, 128, 70, 77, 128, 70, 76, 89, 128, 70, 76, 85, 84, 69, 128, 70, - 76, 79, 87, 69, 82, 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, 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, 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, - 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, 128, 70, 76, 128, 70, 73, 88, 69, 68, 45, 70, 79, 82, - 205, 70, 73, 88, 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, 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, 69, 128, 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, - 83, 84, 73, 86, 65, 76, 128, 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, 65, 89, 65, 78, 78, 65, - 128, 70, 65, 88, 128, 70, 65, 84, 72, 69, 82, 128, 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, - 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, 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, 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, 73, 128, - 70, 65, 65, 70, 85, 128, 70, 65, 65, 128, 69, 90, 200, 69, 90, 69, 78, - 128, 69, 90, 69, 206, 69, 89, 66, 69, 89, 70, 73, 76, 73, 128, 69, 89, - 65, 78, 78, 65, 128, 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, 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, 69, 83, 83, 128, 69, 88, 67, 69, - 76, 76, 69, 78, 84, 128, 69, 87, 69, 128, 69, 86, 69, 78, 73, 78, 71, - 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, 69, 85, 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, 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, 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, 206, 69, 80, 73, 71, 82, 65, 80, 72, 73, 195, 69, - 80, 73, 68, 65, 85, 82, 69, 65, 206, 69, 80, 69, 71, 69, 82, 77, 65, 128, - 69, 79, 76, 72, 88, 128, 69, 79, 72, 128, 69, 78, 86, 69, 76, 79, 80, 69, - 128, 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, 79, - 211, 69, 78, 78, 128, 69, 78, 76, 65, 82, 71, 69, 77, 69, 78, 84, 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, 196, - 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, 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, 69, 76, 76, 73, 83, 72, 77, - 69, 78, 84, 128, 69, 77, 66, 69, 68, 68, 73, 78, 71, 128, 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, 128, 69, 76, 69, 86, 69, 206, 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, 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, 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, 200, 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, 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, - 68, 90, 90, 69, 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, 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, 128, 68, - 85, 84, 73, 69, 83, 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, 78, 128, 68, 85, 77, 128, 68, 85, 76, 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, 213, 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, 45, 83, 72, 65, - 68, 79, 87, 69, 196, 68, 82, 73, 86, 69, 128, 68, 82, 73, 204, 68, 82, - 65, 85, 71, 72, 84, 211, 68, 82, 65, 71, 79, 78, 128, 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, 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, 55, 128, 68, 79, 84, 83, 45, 50, 53, 54, 56, 128, - 68, 79, 84, 83, 45, 50, 53, 54, 55, 56, 128, 68, 79, 84, 83, 45, 50, 53, - 54, 55, 128, 68, 79, 84, 83, 45, 50, 53, 54, 128, 68, 79, 84, 83, 45, 50, - 53, 128, 68, 79, 84, 83, 45, 50, 52, 56, 128, 68, 79, 84, 83, 45, 50, 52, - 55, 56, 128, 68, 79, 84, 83, 45, 50, 52, 55, 128, 68, 79, 84, 83, 45, 50, - 52, 54, 56, 128, 68, 79, 84, 83, 45, 50, 52, 54, 55, 56, 128, 68, 79, 84, - 83, 45, 50, 52, 54, 55, 128, 68, 79, 84, 83, 45, 50, 52, 54, 128, 68, 79, - 84, 83, 45, 50, 52, 53, 56, 128, 68, 79, 84, 83, 45, 50, 52, 53, 55, 56, - 128, 68, 79, 84, 83, 45, 50, 52, 53, 55, 128, 68, 79, 84, 83, 45, 50, 52, - 53, 54, 56, 128, 68, 79, 84, 83, 45, 50, 52, 53, 54, 55, 56, 128, 68, 79, - 84, 83, 45, 50, 52, 53, 54, 55, 128, 68, 79, 84, 83, 45, 50, 52, 53, 54, - 128, 68, 79, 84, 83, 45, 50, 52, 53, 128, 68, 79, 84, 83, 45, 50, 52, - 128, 68, 79, 84, 83, 45, 50, 51, 56, 128, 68, 79, 84, 83, 45, 50, 51, 55, - 56, 128, 68, 79, 84, 83, 45, 50, 51, 55, 128, 68, 79, 84, 83, 45, 50, 51, - 54, 56, 128, 68, 79, 84, 83, 45, 50, 51, 54, 55, 56, 128, 68, 79, 84, 83, - 45, 50, 51, 54, 55, 128, 68, 79, 84, 83, 45, 50, 51, 54, 128, 68, 79, 84, - 83, 45, 50, 51, 53, 56, 128, 68, 79, 84, 83, 45, 50, 51, 53, 55, 56, 128, - 68, 79, 84, 83, 45, 50, 51, 53, 55, 128, 68, 79, 84, 83, 45, 50, 51, 53, - 54, 56, 128, 68, 79, 84, 83, 45, 50, 51, 53, 54, 55, 56, 128, 68, 79, 84, - 83, 45, 50, 51, 53, 54, 55, 128, 68, 79, 84, 83, 45, 50, 51, 53, 54, 128, - 68, 79, 84, 83, 45, 50, 51, 53, 128, 68, 79, 84, 83, 45, 50, 51, 52, 56, - 128, 68, 79, 84, 83, 45, 50, 51, 52, 55, 56, 128, 68, 79, 84, 83, 45, 50, - 51, 52, 55, 128, 68, 79, 84, 83, 45, 50, 51, 52, 54, 56, 128, 68, 79, 84, - 83, 45, 50, 51, 52, 54, 55, 56, 128, 68, 79, 84, 83, 45, 50, 51, 52, 54, - 55, 128, 68, 79, 84, 83, 45, 50, 51, 52, 54, 128, 68, 79, 84, 83, 45, 50, - 51, 52, 53, 56, 128, 68, 79, 84, 83, 45, 50, 51, 52, 53, 55, 56, 128, 68, - 79, 84, 83, 45, 50, 51, 52, 53, 55, 128, 68, 79, 84, 83, 45, 50, 51, 52, - 53, 54, 56, 128, 68, 79, 84, 83, 45, 50, 51, 52, 53, 54, 55, 56, 128, 68, - 79, 84, 83, 45, 50, 51, 52, 53, 54, 55, 128, 68, 79, 84, 83, 45, 50, 51, - 52, 53, 54, 128, 68, 79, 84, 83, 45, 50, 51, 52, 53, 128, 68, 79, 84, 83, - 45, 50, 51, 52, 128, 68, 79, 84, 83, 45, 50, 51, 128, 68, 79, 84, 83, 45, - 50, 128, 68, 79, 84, 83, 45, 49, 56, 128, 68, 79, 84, 83, 45, 49, 55, 56, - 128, 68, 79, 84, 83, 45, 49, 55, 128, 68, 79, 84, 83, 45, 49, 54, 56, - 128, 68, 79, 84, 83, 45, 49, 54, 55, 56, 128, 68, 79, 84, 83, 45, 49, 54, - 55, 128, 68, 79, 84, 83, 45, 49, 54, 128, 68, 79, 84, 83, 45, 49, 53, 56, - 128, 68, 79, 84, 83, 45, 49, 53, 55, 56, 128, 68, 79, 84, 83, 45, 49, 53, - 55, 128, 68, 79, 84, 83, 45, 49, 53, 54, 56, 128, 68, 79, 84, 83, 45, 49, - 53, 54, 55, 56, 128, 68, 79, 84, 83, 45, 49, 53, 54, 55, 128, 68, 79, 84, - 83, 45, 49, 53, 54, 128, 68, 79, 84, 83, 45, 49, 53, 128, 68, 79, 84, 83, - 45, 49, 52, 56, 128, 68, 79, 84, 83, 45, 49, 52, 55, 56, 128, 68, 79, 84, - 83, 45, 49, 52, 55, 128, 68, 79, 84, 83, 45, 49, 52, 54, 56, 128, 68, 79, - 84, 83, 45, 49, 52, 54, 55, 56, 128, 68, 79, 84, 83, 45, 49, 52, 54, 55, - 128, 68, 79, 84, 83, 45, 49, 52, 54, 128, 68, 79, 84, 83, 45, 49, 52, 53, - 56, 128, 68, 79, 84, 83, 45, 49, 52, 53, 55, 56, 128, 68, 79, 84, 83, 45, - 49, 52, 53, 55, 128, 68, 79, 84, 83, 45, 49, 52, 53, 54, 56, 128, 68, 79, - 84, 83, 45, 49, 52, 53, 54, 55, 56, 128, 68, 79, 84, 83, 45, 49, 52, 53, - 54, 55, 128, 68, 79, 84, 83, 45, 49, 52, 53, 54, 128, 68, 79, 84, 83, 45, - 49, 52, 53, 128, 68, 79, 84, 83, 45, 49, 52, 128, 68, 79, 84, 83, 45, 49, - 51, 56, 128, 68, 79, 84, 83, 45, 49, 51, 55, 56, 128, 68, 79, 84, 83, 45, - 49, 51, 55, 128, 68, 79, 84, 83, 45, 49, 51, 54, 56, 128, 68, 79, 84, 83, - 45, 49, 51, 54, 55, 56, 128, 68, 79, 84, 83, 45, 49, 51, 54, 55, 128, 68, - 79, 84, 83, 45, 49, 51, 54, 128, 68, 79, 84, 83, 45, 49, 51, 53, 56, 128, - 68, 79, 84, 83, 45, 49, 51, 53, 55, 56, 128, 68, 79, 84, 83, 45, 49, 51, - 53, 55, 128, 68, 79, 84, 83, 45, 49, 51, 53, 54, 56, 128, 68, 79, 84, 83, - 45, 49, 51, 53, 54, 55, 56, 128, 68, 79, 84, 83, 45, 49, 51, 53, 54, 55, - 128, 68, 79, 84, 83, 45, 49, 51, 53, 54, 128, 68, 79, 84, 83, 45, 49, 51, - 53, 128, 68, 79, 84, 83, 45, 49, 51, 52, 56, 128, 68, 79, 84, 83, 45, 49, - 51, 52, 55, 56, 128, 68, 79, 84, 83, 45, 49, 51, 52, 55, 128, 68, 79, 84, - 83, 45, 49, 51, 52, 54, 56, 128, 68, 79, 84, 83, 45, 49, 51, 52, 54, 55, - 56, 128, 68, 79, 84, 83, 45, 49, 51, 52, 54, 55, 128, 68, 79, 84, 83, 45, - 49, 51, 52, 54, 128, 68, 79, 84, 83, 45, 49, 51, 52, 53, 56, 128, 68, 79, - 84, 83, 45, 49, 51, 52, 53, 55, 56, 128, 68, 79, 84, 83, 45, 49, 51, 52, - 53, 55, 128, 68, 79, 84, 83, 45, 49, 51, 52, 53, 54, 56, 128, 68, 79, 84, - 83, 45, 49, 51, 52, 53, 54, 55, 56, 128, 68, 79, 84, 83, 45, 49, 51, 52, - 53, 54, 55, 128, 68, 79, 84, 83, 45, 49, 51, 52, 53, 54, 128, 68, 79, 84, - 83, 45, 49, 51, 52, 53, 128, 68, 79, 84, 83, 45, 49, 51, 52, 128, 68, 79, - 84, 83, 45, 49, 51, 128, 68, 79, 84, 83, 45, 49, 50, 56, 128, 68, 79, 84, - 83, 45, 49, 50, 55, 56, 128, 68, 79, 84, 83, 45, 49, 50, 55, 128, 68, 79, - 84, 83, 45, 49, 50, 54, 56, 128, 68, 79, 84, 83, 45, 49, 50, 54, 55, 56, - 128, 68, 79, 84, 83, 45, 49, 50, 54, 55, 128, 68, 79, 84, 83, 45, 49, 50, - 54, 128, 68, 79, 84, 83, 45, 49, 50, 53, 56, 128, 68, 79, 84, 83, 45, 49, - 50, 53, 55, 56, 128, 68, 79, 84, 83, 45, 49, 50, 53, 55, 128, 68, 79, 84, - 83, 45, 49, 50, 53, 54, 56, 128, 68, 79, 84, 83, 45, 49, 50, 53, 54, 55, - 56, 128, 68, 79, 84, 83, 45, 49, 50, 53, 54, 55, 128, 68, 79, 84, 83, 45, - 49, 50, 53, 54, 128, 68, 79, 84, 83, 45, 49, 50, 53, 128, 68, 79, 84, 83, - 45, 49, 50, 52, 56, 128, 68, 79, 84, 83, 45, 49, 50, 52, 55, 56, 128, 68, - 79, 84, 83, 45, 49, 50, 52, 55, 128, 68, 79, 84, 83, 45, 49, 50, 52, 54, - 56, 128, 68, 79, 84, 83, 45, 49, 50, 52, 54, 55, 56, 128, 68, 79, 84, 83, - 45, 49, 50, 52, 54, 55, 128, 68, 79, 84, 83, 45, 49, 50, 52, 54, 128, 68, - 79, 84, 83, 45, 49, 50, 52, 53, 56, 128, 68, 79, 84, 83, 45, 49, 50, 52, - 53, 55, 56, 128, 68, 79, 84, 83, 45, 49, 50, 52, 53, 55, 128, 68, 79, 84, - 83, 45, 49, 50, 52, 53, 54, 56, 128, 68, 79, 84, 83, 45, 49, 50, 52, 53, - 54, 55, 56, 128, 68, 79, 84, 83, 45, 49, 50, 52, 53, 54, 55, 128, 68, 79, - 84, 83, 45, 49, 50, 52, 53, 54, 128, 68, 79, 84, 83, 45, 49, 50, 52, 53, - 128, 68, 79, 84, 83, 45, 49, 50, 52, 128, 68, 79, 84, 83, 45, 49, 50, 51, - 56, 128, 68, 79, 84, 83, 45, 49, 50, 51, 55, 56, 128, 68, 79, 84, 83, 45, - 49, 50, 51, 55, 128, 68, 79, 84, 83, 45, 49, 50, 51, 54, 56, 128, 68, 79, - 84, 83, 45, 49, 50, 51, 54, 55, 56, 128, 68, 79, 84, 83, 45, 49, 50, 51, - 54, 55, 128, 68, 79, 84, 83, 45, 49, 50, 51, 54, 128, 68, 79, 84, 83, 45, - 49, 50, 51, 53, 56, 128, 68, 79, 84, 83, 45, 49, 50, 51, 53, 55, 56, 128, - 68, 79, 84, 83, 45, 49, 50, 51, 53, 55, 128, 68, 79, 84, 83, 45, 49, 50, - 51, 53, 54, 56, 128, 68, 79, 84, 83, 45, 49, 50, 51, 53, 54, 55, 56, 128, - 68, 79, 84, 83, 45, 49, 50, 51, 53, 54, 55, 128, 68, 79, 84, 83, 45, 49, - 50, 51, 53, 54, 128, 68, 79, 84, 83, 45, 49, 50, 51, 53, 128, 68, 79, 84, - 83, 45, 49, 50, 51, 52, 56, 128, 68, 79, 84, 83, 45, 49, 50, 51, 52, 55, - 56, 128, 68, 79, 84, 83, 45, 49, 50, 51, 52, 55, 128, 68, 79, 84, 83, 45, - 49, 50, 51, 52, 54, 56, 128, 68, 79, 84, 83, 45, 49, 50, 51, 52, 54, 55, - 56, 128, 68, 79, 84, 83, 45, 49, 50, 51, 52, 54, 55, 128, 68, 79, 84, 83, - 45, 49, 50, 51, 52, 54, 128, 68, 79, 84, 83, 45, 49, 50, 51, 52, 53, 56, - 128, 68, 79, 84, 83, 45, 49, 50, 51, 52, 53, 55, 56, 128, 68, 79, 84, 83, - 45, 49, 50, 51, 52, 53, 55, 128, 68, 79, 84, 83, 45, 49, 50, 51, 52, 53, - 54, 56, 128, 68, 79, 84, 83, 45, 49, 50, 51, 52, 53, 54, 55, 56, 128, 68, - 79, 84, 83, 45, 49, 50, 51, 52, 53, 54, 55, 128, 68, 79, 84, 83, 45, 49, - 50, 51, 52, 53, 54, 128, 68, 79, 84, 83, 45, 49, 50, 51, 52, 53, 128, 68, - 79, 84, 83, 45, 49, 50, 51, 52, 128, 68, 79, 84, 83, 45, 49, 50, 51, 128, - 68, 79, 84, 83, 45, 49, 50, 128, 68, 79, 84, 83, 45, 49, 128, 68, 79, 84, - 83, 128, 68, 79, 84, 76, 69, 83, 211, 68, 79, 82, 85, 128, 68, 79, 79, - 82, 128, 68, 79, 79, 78, 71, 128, 68, 79, 78, 71, 128, 68, 79, 78, 128, - 68, 79, 77, 65, 73, 206, 68, 79, 76, 76, 65, 210, 68, 79, 76, 73, 85, 77, - 128, 68, 79, 73, 84, 128, 68, 79, 71, 128, 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, 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, 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, 80, 69, 82, 83, 73, 79, 78, 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, 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, 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, - 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, 211, 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, 65, 84, 72, 128, 68, 72, 65, 76, 128, - 68, 72, 65, 65, 76, 85, 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, 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, + 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, 77, 77, 193, 71, 82, 65, 73, 78, 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, 78, 71, 128, 71, 79, 76, 68, 128, 71, 79, 75, 128, 71, 79, 73, + 78, 199, 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, 84, + 84, 65, 204, 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, 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, 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, 69, 128, 71, 72, 69, 128, 71, 72, 197, 71, 72, 65, 89, 78, 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, 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, 80, 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, 80, 128, 71, + 71, 65, 65, 128, 71, 69, 84, 193, 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, 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, 69, 78, 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, 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, + 65, 78, 128, 71, 65, 77, 65, 76, 128, 71, 65, 77, 65, 204, 71, 65, 77, + 128, 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, 89, 128, 70, 87, 73, + 128, 70, 87, 69, 69, 128, 70, 87, 69, 128, 70, 87, 65, 65, 128, 70, 87, + 65, 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, 82, 128, 70, 85, 80, 128, 70, 85, + 78, 69, 82, 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, 69, 204, 70, 84, 72, 79, + 82, 193, 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, 205, 70, 82, 79, + 71, 128, 70, 82, 73, 84, 85, 128, 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, 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, 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, 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, 78, 79, 84, 197, 70, 79, 79, 84, + 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, + 128, 70, 77, 128, 70, 76, 89, 128, 70, 76, 85, 84, 69, 128, 70, 76, 79, + 87, 69, 82, 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, 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, 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, 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, 76, 73, 78, 197, + 70, 73, 86, 197, 70, 73, 84, 65, 128, 70, 73, 84, 128, 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, 69, 128, 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, 83, 84, 73, 86, 65, 76, 128, 70, 69, 82, 82, 89, 128, 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, 65, 89, 65, 78, 78, 65, 128, 70, 65, 88, 128, 70, 65, 84, 72, + 69, 82, 128, 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, 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, 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, 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, 65, 65, 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, 66, 69, 89, 70, 73, 76, 73, 128, 69, 89, 65, 78, 78, 65, + 128, 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, 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, 69, 83, 83, 128, + 69, 88, 67, 69, 76, 76, 69, 78, 84, 128, 69, 87, 69, 128, 69, 86, 69, 78, + 73, 78, 71, 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, 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, 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, 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, 206, 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, 76, 72, 88, 128, 69, 79, 72, 128, 69, 78, 89, 128, 69, + 78, 86, 69, 76, 79, 80, 69, 128, 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, 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, 79, 211, 69, 78, 78, 128, 69, 78, 76, 65, 82, 71, 69, 77, + 69, 78, 84, 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, 196, 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, 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, 83, 73, 83, + 128, 69, 76, 76, 73, 80, 83, 69, 128, 69, 76, 73, 70, 73, 128, 69, 76, + 69, 86, 69, 78, 128, 69, 76, 69, 86, 69, 206, 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, + 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, 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, 200, 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, 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, 68, 90, 90, 69, 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, 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, 128, 68, 85, 84, 73, 69, 83, 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, 78, 128, 68, 85, 77, 128, 68, 85, 76, 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, 213, 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, 45, 83, 72, 65, 68, 79, 87, 69, 196, 68, 82, 73, 86, 69, 128, 68, 82, + 73, 86, 197, 68, 82, 73, 204, 68, 82, 65, 85, 71, 72, 84, 211, 68, 82, + 65, 71, 79, 78, 128, 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, 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, + 55, 128, 68, 79, 84, 83, 45, 50, 53, 54, 56, 128, 68, 79, 84, 83, 45, 50, + 53, 54, 55, 56, 128, 68, 79, 84, 83, 45, 50, 53, 54, 55, 128, 68, 79, 84, + 83, 45, 50, 53, 54, 128, 68, 79, 84, 83, 45, 50, 53, 128, 68, 79, 84, 83, + 45, 50, 52, 56, 128, 68, 79, 84, 83, 45, 50, 52, 55, 56, 128, 68, 79, 84, + 83, 45, 50, 52, 55, 128, 68, 79, 84, 83, 45, 50, 52, 54, 56, 128, 68, 79, + 84, 83, 45, 50, 52, 54, 55, 56, 128, 68, 79, 84, 83, 45, 50, 52, 54, 55, + 128, 68, 79, 84, 83, 45, 50, 52, 54, 128, 68, 79, 84, 83, 45, 50, 52, 53, + 56, 128, 68, 79, 84, 83, 45, 50, 52, 53, 55, 56, 128, 68, 79, 84, 83, 45, + 50, 52, 53, 55, 128, 68, 79, 84, 83, 45, 50, 52, 53, 54, 56, 128, 68, 79, + 84, 83, 45, 50, 52, 53, 54, 55, 56, 128, 68, 79, 84, 83, 45, 50, 52, 53, + 54, 55, 128, 68, 79, 84, 83, 45, 50, 52, 53, 54, 128, 68, 79, 84, 83, 45, + 50, 52, 53, 128, 68, 79, 84, 83, 45, 50, 52, 128, 68, 79, 84, 83, 45, 50, + 51, 56, 128, 68, 79, 84, 83, 45, 50, 51, 55, 56, 128, 68, 79, 84, 83, 45, + 50, 51, 55, 128, 68, 79, 84, 83, 45, 50, 51, 54, 56, 128, 68, 79, 84, 83, + 45, 50, 51, 54, 55, 56, 128, 68, 79, 84, 83, 45, 50, 51, 54, 55, 128, 68, + 79, 84, 83, 45, 50, 51, 54, 128, 68, 79, 84, 83, 45, 50, 51, 53, 56, 128, + 68, 79, 84, 83, 45, 50, 51, 53, 55, 56, 128, 68, 79, 84, 83, 45, 50, 51, + 53, 55, 128, 68, 79, 84, 83, 45, 50, 51, 53, 54, 56, 128, 68, 79, 84, 83, + 45, 50, 51, 53, 54, 55, 56, 128, 68, 79, 84, 83, 45, 50, 51, 53, 54, 55, + 128, 68, 79, 84, 83, 45, 50, 51, 53, 54, 128, 68, 79, 84, 83, 45, 50, 51, + 53, 128, 68, 79, 84, 83, 45, 50, 51, 52, 56, 128, 68, 79, 84, 83, 45, 50, + 51, 52, 55, 56, 128, 68, 79, 84, 83, 45, 50, 51, 52, 55, 128, 68, 79, 84, + 83, 45, 50, 51, 52, 54, 56, 128, 68, 79, 84, 83, 45, 50, 51, 52, 54, 55, + 56, 128, 68, 79, 84, 83, 45, 50, 51, 52, 54, 55, 128, 68, 79, 84, 83, 45, + 50, 51, 52, 54, 128, 68, 79, 84, 83, 45, 50, 51, 52, 53, 56, 128, 68, 79, + 84, 83, 45, 50, 51, 52, 53, 55, 56, 128, 68, 79, 84, 83, 45, 50, 51, 52, + 53, 55, 128, 68, 79, 84, 83, 45, 50, 51, 52, 53, 54, 56, 128, 68, 79, 84, + 83, 45, 50, 51, 52, 53, 54, 55, 56, 128, 68, 79, 84, 83, 45, 50, 51, 52, + 53, 54, 55, 128, 68, 79, 84, 83, 45, 50, 51, 52, 53, 54, 128, 68, 79, 84, + 83, 45, 50, 51, 52, 53, 128, 68, 79, 84, 83, 45, 50, 51, 52, 128, 68, 79, + 84, 83, 45, 50, 51, 128, 68, 79, 84, 83, 45, 50, 128, 68, 79, 84, 83, 45, + 49, 56, 128, 68, 79, 84, 83, 45, 49, 55, 56, 128, 68, 79, 84, 83, 45, 49, + 55, 128, 68, 79, 84, 83, 45, 49, 54, 56, 128, 68, 79, 84, 83, 45, 49, 54, + 55, 56, 128, 68, 79, 84, 83, 45, 49, 54, 55, 128, 68, 79, 84, 83, 45, 49, + 54, 128, 68, 79, 84, 83, 45, 49, 53, 56, 128, 68, 79, 84, 83, 45, 49, 53, + 55, 56, 128, 68, 79, 84, 83, 45, 49, 53, 55, 128, 68, 79, 84, 83, 45, 49, + 53, 54, 56, 128, 68, 79, 84, 83, 45, 49, 53, 54, 55, 56, 128, 68, 79, 84, + 83, 45, 49, 53, 54, 55, 128, 68, 79, 84, 83, 45, 49, 53, 54, 128, 68, 79, + 84, 83, 45, 49, 53, 128, 68, 79, 84, 83, 45, 49, 52, 56, 128, 68, 79, 84, + 83, 45, 49, 52, 55, 56, 128, 68, 79, 84, 83, 45, 49, 52, 55, 128, 68, 79, + 84, 83, 45, 49, 52, 54, 56, 128, 68, 79, 84, 83, 45, 49, 52, 54, 55, 56, + 128, 68, 79, 84, 83, 45, 49, 52, 54, 55, 128, 68, 79, 84, 83, 45, 49, 52, + 54, 128, 68, 79, 84, 83, 45, 49, 52, 53, 56, 128, 68, 79, 84, 83, 45, 49, + 52, 53, 55, 56, 128, 68, 79, 84, 83, 45, 49, 52, 53, 55, 128, 68, 79, 84, + 83, 45, 49, 52, 53, 54, 56, 128, 68, 79, 84, 83, 45, 49, 52, 53, 54, 55, + 56, 128, 68, 79, 84, 83, 45, 49, 52, 53, 54, 55, 128, 68, 79, 84, 83, 45, + 49, 52, 53, 54, 128, 68, 79, 84, 83, 45, 49, 52, 53, 128, 68, 79, 84, 83, + 45, 49, 52, 128, 68, 79, 84, 83, 45, 49, 51, 56, 128, 68, 79, 84, 83, 45, + 49, 51, 55, 56, 128, 68, 79, 84, 83, 45, 49, 51, 55, 128, 68, 79, 84, 83, + 45, 49, 51, 54, 56, 128, 68, 79, 84, 83, 45, 49, 51, 54, 55, 56, 128, 68, + 79, 84, 83, 45, 49, 51, 54, 55, 128, 68, 79, 84, 83, 45, 49, 51, 54, 128, + 68, 79, 84, 83, 45, 49, 51, 53, 56, 128, 68, 79, 84, 83, 45, 49, 51, 53, + 55, 56, 128, 68, 79, 84, 83, 45, 49, 51, 53, 55, 128, 68, 79, 84, 83, 45, + 49, 51, 53, 54, 56, 128, 68, 79, 84, 83, 45, 49, 51, 53, 54, 55, 56, 128, + 68, 79, 84, 83, 45, 49, 51, 53, 54, 55, 128, 68, 79, 84, 83, 45, 49, 51, + 53, 54, 128, 68, 79, 84, 83, 45, 49, 51, 53, 128, 68, 79, 84, 83, 45, 49, + 51, 52, 56, 128, 68, 79, 84, 83, 45, 49, 51, 52, 55, 56, 128, 68, 79, 84, + 83, 45, 49, 51, 52, 55, 128, 68, 79, 84, 83, 45, 49, 51, 52, 54, 56, 128, + 68, 79, 84, 83, 45, 49, 51, 52, 54, 55, 56, 128, 68, 79, 84, 83, 45, 49, + 51, 52, 54, 55, 128, 68, 79, 84, 83, 45, 49, 51, 52, 54, 128, 68, 79, 84, + 83, 45, 49, 51, 52, 53, 56, 128, 68, 79, 84, 83, 45, 49, 51, 52, 53, 55, + 56, 128, 68, 79, 84, 83, 45, 49, 51, 52, 53, 55, 128, 68, 79, 84, 83, 45, + 49, 51, 52, 53, 54, 56, 128, 68, 79, 84, 83, 45, 49, 51, 52, 53, 54, 55, + 56, 128, 68, 79, 84, 83, 45, 49, 51, 52, 53, 54, 55, 128, 68, 79, 84, 83, + 45, 49, 51, 52, 53, 54, 128, 68, 79, 84, 83, 45, 49, 51, 52, 53, 128, 68, + 79, 84, 83, 45, 49, 51, 52, 128, 68, 79, 84, 83, 45, 49, 51, 128, 68, 79, + 84, 83, 45, 49, 50, 56, 128, 68, 79, 84, 83, 45, 49, 50, 55, 56, 128, 68, + 79, 84, 83, 45, 49, 50, 55, 128, 68, 79, 84, 83, 45, 49, 50, 54, 56, 128, + 68, 79, 84, 83, 45, 49, 50, 54, 55, 56, 128, 68, 79, 84, 83, 45, 49, 50, + 54, 55, 128, 68, 79, 84, 83, 45, 49, 50, 54, 128, 68, 79, 84, 83, 45, 49, + 50, 53, 56, 128, 68, 79, 84, 83, 45, 49, 50, 53, 55, 56, 128, 68, 79, 84, + 83, 45, 49, 50, 53, 55, 128, 68, 79, 84, 83, 45, 49, 50, 53, 54, 56, 128, + 68, 79, 84, 83, 45, 49, 50, 53, 54, 55, 56, 128, 68, 79, 84, 83, 45, 49, + 50, 53, 54, 55, 128, 68, 79, 84, 83, 45, 49, 50, 53, 54, 128, 68, 79, 84, + 83, 45, 49, 50, 53, 128, 68, 79, 84, 83, 45, 49, 50, 52, 56, 128, 68, 79, + 84, 83, 45, 49, 50, 52, 55, 56, 128, 68, 79, 84, 83, 45, 49, 50, 52, 55, + 128, 68, 79, 84, 83, 45, 49, 50, 52, 54, 56, 128, 68, 79, 84, 83, 45, 49, + 50, 52, 54, 55, 56, 128, 68, 79, 84, 83, 45, 49, 50, 52, 54, 55, 128, 68, + 79, 84, 83, 45, 49, 50, 52, 54, 128, 68, 79, 84, 83, 45, 49, 50, 52, 53, + 56, 128, 68, 79, 84, 83, 45, 49, 50, 52, 53, 55, 56, 128, 68, 79, 84, 83, + 45, 49, 50, 52, 53, 55, 128, 68, 79, 84, 83, 45, 49, 50, 52, 53, 54, 56, + 128, 68, 79, 84, 83, 45, 49, 50, 52, 53, 54, 55, 56, 128, 68, 79, 84, 83, + 45, 49, 50, 52, 53, 54, 55, 128, 68, 79, 84, 83, 45, 49, 50, 52, 53, 54, + 128, 68, 79, 84, 83, 45, 49, 50, 52, 53, 128, 68, 79, 84, 83, 45, 49, 50, + 52, 128, 68, 79, 84, 83, 45, 49, 50, 51, 56, 128, 68, 79, 84, 83, 45, 49, + 50, 51, 55, 56, 128, 68, 79, 84, 83, 45, 49, 50, 51, 55, 128, 68, 79, 84, + 83, 45, 49, 50, 51, 54, 56, 128, 68, 79, 84, 83, 45, 49, 50, 51, 54, 55, + 56, 128, 68, 79, 84, 83, 45, 49, 50, 51, 54, 55, 128, 68, 79, 84, 83, 45, + 49, 50, 51, 54, 128, 68, 79, 84, 83, 45, 49, 50, 51, 53, 56, 128, 68, 79, + 84, 83, 45, 49, 50, 51, 53, 55, 56, 128, 68, 79, 84, 83, 45, 49, 50, 51, + 53, 55, 128, 68, 79, 84, 83, 45, 49, 50, 51, 53, 54, 56, 128, 68, 79, 84, + 83, 45, 49, 50, 51, 53, 54, 55, 56, 128, 68, 79, 84, 83, 45, 49, 50, 51, + 53, 54, 55, 128, 68, 79, 84, 83, 45, 49, 50, 51, 53, 54, 128, 68, 79, 84, + 83, 45, 49, 50, 51, 53, 128, 68, 79, 84, 83, 45, 49, 50, 51, 52, 56, 128, + 68, 79, 84, 83, 45, 49, 50, 51, 52, 55, 56, 128, 68, 79, 84, 83, 45, 49, + 50, 51, 52, 55, 128, 68, 79, 84, 83, 45, 49, 50, 51, 52, 54, 56, 128, 68, + 79, 84, 83, 45, 49, 50, 51, 52, 54, 55, 56, 128, 68, 79, 84, 83, 45, 49, + 50, 51, 52, 54, 55, 128, 68, 79, 84, 83, 45, 49, 50, 51, 52, 54, 128, 68, + 79, 84, 83, 45, 49, 50, 51, 52, 53, 56, 128, 68, 79, 84, 83, 45, 49, 50, + 51, 52, 53, 55, 56, 128, 68, 79, 84, 83, 45, 49, 50, 51, 52, 53, 55, 128, + 68, 79, 84, 83, 45, 49, 50, 51, 52, 53, 54, 56, 128, 68, 79, 84, 83, 45, + 49, 50, 51, 52, 53, 54, 55, 56, 128, 68, 79, 84, 83, 45, 49, 50, 51, 52, + 53, 54, 55, 128, 68, 79, 84, 83, 45, 49, 50, 51, 52, 53, 54, 128, 68, 79, + 84, 83, 45, 49, 50, 51, 52, 53, 128, 68, 79, 84, 83, 45, 49, 50, 51, 52, + 128, 68, 79, 84, 83, 45, 49, 50, 51, 128, 68, 79, 84, 83, 45, 49, 50, + 128, 68, 79, 84, 83, 45, 49, 128, 68, 79, 84, 83, 128, 68, 79, 84, 76, + 69, 83, 211, 68, 79, 82, 85, 128, 68, 79, 79, 82, 128, 68, 79, 79, 78, + 71, 128, 68, 79, 78, 71, 128, 68, 79, 77, 65, 73, 206, 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, 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, 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, 74, 128, + 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, 80, 69, 82, 83, 73, 79, 78, 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, 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, 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, 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, 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, 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, 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, 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, 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, 69, 70, 69, 67, 84, - 73, 86, 69, 78, 69, 83, 211, 68, 69, 69, 82, 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, 73, 83, 73, 86, 69, 78, 69, 83, 83, 128, 68, 69, - 67, 73, 77, 65, 204, 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, 79, 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, 194, - 68, 65, 217, 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, 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, 128, 68, 65, - 78, 199, 68, 65, 78, 68, 65, 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, 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, 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, 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, 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, 69, 82, 85, 83, 128, 67, 89, 80, 128, 67, 89, 76, 73, 78, 68, 82, 73, - 67, 73, 84, 89, 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, 84, 128, 67, 85, 212, 67, 85, 83, 84, 79, 77, 69, 210, 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, 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, 82, 89, 80, 84, 79, 71, 82, 65, 77, 77, 73, + 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, 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, 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, 69, + 70, 69, 67, 84, 73, 86, 69, 78, 69, 83, 211, 68, 69, 69, 82, 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, 73, 83, 73, 86, 69, 78, 69, 83, 83, + 128, 68, 69, 67, 73, 77, 65, 204, 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, 79, 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, 194, 68, 65, 217, 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, + 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, 128, + 68, 65, 78, 199, 68, 65, 78, 68, 65, 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, 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, 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, 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, 84, 128, + 67, 85, 212, 67, 85, 83, 84, 79, 77, 69, 210, 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, 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, 208, 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, 82, 89, 80, 84, 79, 71, 82, 65, 77, 77, 73, 195, 67, 82, 85, 90, 69, 73, 82, 207, 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, @@ -3128,32 +3603,33 @@ 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, 128, 67, 79, 79, 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, 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, 79, 78, 65, 78, 212, 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, 76, - 73, 67, 84, 128, 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, 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, 128, 67, 79, 77, 77, 193, 67, 79, 77, 73, 78, - 199, 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, 128, 67, 79, 70, 70, - 73, 78, 128, 67, 79, 69, 78, 71, 128, 67, 79, 68, 65, 128, 67, 79, 65, - 128, 67, 79, 128, 67, 77, 128, 67, 205, 67, 76, 85, 83, 84, 69, 210, 67, - 76, 85, 66, 45, 83, 80, 79, 75, 69, 196, 67, 76, 85, 66, 128, 67, 76, 85, - 194, 67, 76, 79, 85, 68, 128, 67, 76, 79, 84, 72, 69, 83, 128, 67, 76, + 86, 69, 82, 71, 73, 78, 199, 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, 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, + 79, 78, 65, 78, 212, 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, 76, 73, 67, 84, 128, 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, 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, + 128, 67, 79, 77, 77, 193, 67, 79, 77, 73, 78, 199, 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, 128, 67, 79, 70, 70, 73, 78, 128, 67, 79, 69, + 78, 71, 128, 67, 79, 68, 65, 128, 67, 79, 65, 128, 67, 79, 128, 67, 77, + 128, 67, 205, 67, 76, 85, 83, 84, 69, 210, 67, 76, 85, 66, 45, 83, 80, + 79, 75, 69, 196, 67, 76, 85, 66, 128, 67, 76, 85, 194, 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, 78, 69, 83, 83, 128, 67, 76, 79, 83, 69, 68, 128, 67, 76, 79, 83, 69, 196, 67, 76, 79, 83, 197, 67, 76, 79, 67, 75, 87, 73, 83, 197, 67, 76, 73, 86, 73, 83, 128, 67, 76, 73, 78, 71, @@ -3165,31 +3641,34 @@ 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, 73, 128, 67, 73, 69, 88, 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, 73, 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, 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, 65, - 128, 67, 72, 79, 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, 76, - 76, 213, 67, 72, 73, 76, 68, 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, 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, 73, 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, 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, 65, 128, 67, 72, 79, 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, 76, 76, 213, 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, 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, 211, 67, 72, 69, - 80, 128, 67, 72, 69, 206, 67, 72, 69, 69, 128, 67, 72, 69, 67, 75, 128, + 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, 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, 73, 79, 84, 128, 67, 72, 65, 82, 73, 79, 212, @@ -3197,41 +3676,53 @@ 69, 82, 128, 67, 72, 65, 82, 128, 67, 72, 65, 80, 128, 67, 72, 65, 78, 71, 69, 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, 73, 82, 128, 67, 72, 65, 68, 65, 128, 67, 72, - 65, 196, 67, 72, 65, 65, 128, 67, 69, 88, 128, 67, 69, 82, 69, 83, 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, 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, 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, 69, 69, 128, 67, 67, 72, 69, 128, 67, 67, - 72, 65, 65, 128, 67, 67, 72, 65, 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, 84, 65, 87, 65, 128, 67, 65, 84, 128, 67, 65, 82, 89, - 83, 84, 73, 65, 206, 67, 65, 82, 84, 128, 67, 65, 82, 82, 73, 65, 71, - 197, 67, 65, 82, 80, 69, 78, 84, 82, 217, 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, 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, 82, 65, 66, 73, 78, 68, 85, - 128, 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, 76, 89, 65, 128, 67, 65, 76, 89, 193, 67, 65, - 76, 76, 128, 67, 65, 76, 67, 128, 67, 65, 69, 83, 85, 82, 65, 128, 67, - 65, 68, 85, 67, 69, 85, 83, 128, 67, 65, 68, 193, 67, 65, 65, 73, 128, - 67, 193, 67, 45, 83, 73, 77, 80, 76, 73, 70, 73, 69, 196, 67, 45, 51, 57, + 76, 73, 128, 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, 69, 88, + 128, 67, 69, 82, 69, 83, 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, 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, 69, 69, 128, + 67, 67, 72, 69, 128, 67, 67, 72, 65, 65, 128, 67, 67, 72, 65, 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, 84, 65, 87, 65, 128, 67, + 65, 84, 128, 67, 65, 83, 84, 76, 69, 128, 67, 65, 82, 89, 83, 84, 73, 65, + 206, 67, 65, 82, 84, 128, 67, 65, 82, 82, 73, 65, 71, 197, 67, 65, 82, + 80, 69, 78, 84, 82, 217, 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, 128, 67, 65, 210, 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, 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, 76, 89, 65, 128, 67, 65, 76, 89, 193, 67, 65, 76, 76, 128, 67, + 65, 76, 67, 128, 67, 65, 75, 82, 65, 128, 67, 65, 69, 83, 85, 82, 65, + 128, 67, 65, 68, 85, 67, 69, 85, 83, 128, 67, 65, 68, 193, 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, 69, 76, 79, 82, 85, 83, 83, 73, 65, 78, 45, 85, 75, 82, 65, 73, 78, 73, 65, 206, 66, 217, 66, 88, 71, 128, 66, 87, 73, 128, 66, 87, 69, 69, 128, @@ -3250,167 +3741,178 @@ 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, 128, 66, 82, 65, - 78, 67, 200, 66, 82, 65, 75, 67, 69, 84, 128, 66, 82, 65, 67, 75, 69, - 212, 66, 82, 65, 67, 69, 128, 66, 81, 128, 66, 79, 87, 84, 73, 69, 128, - 66, 79, 87, 84, 73, 197, 66, 79, 87, 128, 66, 79, 215, 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, 82, 85, 84, - 79, 128, 66, 79, 79, 77, 69, 82, 65, 78, 71, 128, 66, 79, 78, 69, 128, - 66, 79, 76, 212, 66, 79, 68, 89, 128, 66, 79, 65, 84, 128, 66, 79, 65, - 82, 128, 66, 79, 65, 128, 66, 76, 85, 69, 128, 66, 76, 79, 79, 68, 128, - 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, 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, 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, - 65, 66, 73, 65, 204, 66, 73, 71, 128, 66, 73, 199, 66, 73, 69, 84, 128, - 66, 73, 68, 69, 78, 84, 65, 204, 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, 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, 84, 128, 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, - 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, 73, 84, 72, 128, 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, 206, 66, 69, 70, 79, 82, - 197, 66, 69, 69, 84, 65, 128, 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, 84, 128, 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, 84, 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, 128, 66, 66, 65, 88, 128, 66, - 66, 65, 84, 128, 66, 66, 65, 80, 128, 66, 66, 65, 128, 66, 65, 89, 65, - 78, 78, 65, 128, 66, 65, 84, 72, 84, 85, 66, 128, 66, 65, 84, 72, 65, 77, - 65, 83, 65, 84, 128, 66, 65, 83, 83, 65, 128, 66, 65, 83, 72, 75, 73, - 210, 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, 65, 50, 128, 66, 65, 210, 66, 65, 78, 84, 79, 67, 128, 66, - 65, 78, 203, 66, 65, 78, 68, 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, 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, 65, 82, 50, 128, 66, 65, 71, 65, 128, - 66, 65, 71, 51, 128, 66, 65, 199, 66, 65, 68, 71, 69, 82, 128, 66, 65, - 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, 45, - 84, 73, 76, 84, 69, 196, 66, 65, 67, 75, 128, 66, 65, 67, 203, 66, 65, - 65, 82, 69, 82, 85, 128, 66, 65, 65, 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, 185, 66, 48, 48, 184, 66, 48, 48, 183, 66, 48, 48, 182, 66, - 48, 48, 181, 66, 48, 48, 180, 66, 48, 48, 179, 66, 48, 48, 178, 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, 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, 83, 84, 82, 65, 204, 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, 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, 72, 65, 80, 65, 83, 67, 65, 206, 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, 76, 79, 71, 73, 67, 65, 204, 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, 69, 196, 65, 83, 72, 71, - 65, 66, 128, 65, 83, 72, 57, 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, 65, 66, 197, 65, 82, 83, 69, 79, - 83, 128, 65, 82, 83, 69, 79, 211, 65, 82, 82, 79, 87, 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, 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, + 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, 79, 87, 84, 73, 69, 128, 66, 79, 87, 84, 73, 197, 66, 79, 87, + 128, 66, 79, 215, 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, 82, 85, 84, 79, 128, 66, 79, 79, 77, 69, 82, 65, + 78, 71, 128, 66, 79, 78, 69, 128, 66, 79, 76, 212, 66, 79, 68, 89, 128, + 66, 79, 65, 82, 128, 66, 79, 65, 128, 66, 76, 85, 69, 128, 66, 76, 79, + 79, 68, 128, 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, 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, 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, 65, 66, 73, 65, 204, 66, 73, 71, 128, 66, 73, 199, 66, + 73, 69, 84, 128, 66, 73, 68, 69, 78, 84, 65, 204, 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, 77, 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, 84, + 128, 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, 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, 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, 206, 66, 69, 70, 79, 82, 197, + 66, 69, 69, 84, 65, 128, 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, 128, 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, 84, 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, 128, 66, 66, + 65, 88, 128, 66, 66, 65, 84, 128, 66, 66, 65, 80, 128, 66, 66, 65, 128, + 66, 65, 89, 65, 78, 78, 65, 128, 66, 65, 85, 128, 66, 65, 84, 72, 84, 85, + 66, 128, 66, 65, 84, 72, 65, 77, 65, 83, 65, 84, 128, 66, 65, 83, 83, 65, + 128, 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, 65, 50, 128, 66, 65, 210, 66, 65, 78, + 84, 79, 67, 128, 66, 65, 78, 203, 66, 65, 78, 68, 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, 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, 71, 65, + 128, 66, 65, 71, 51, 128, 66, 65, 199, 66, 65, 68, 71, 69, 82, 128, 66, + 65, 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, + 45, 84, 73, 76, 84, 69, 196, 66, 65, 67, 75, 128, 66, 65, 67, 203, 66, + 65, 65, 82, 69, 82, 85, 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, 83, 84, 82, 65, 204, 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, 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, 65, 82, 86, 65, 86, 69, 68, 73, 195, + 65, 84, 72, 65, 80, 65, 83, 67, 65, 206, 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, 76, + 79, 71, 73, 67, 65, 204, 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, 69, 196, 65, 83, 80, 69, 82, 128, 65, 83, 72, 71, 65, + 66, 128, 65, 83, 72, 57, 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, 65, 66, 197, 65, 82, 83, 69, 79, 83, + 128, 65, 82, 83, 69, 79, 211, 65, 82, 82, 79, 87, 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, 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, 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, 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, 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, 68, - 128, 65, 82, 65, 196, 65, 82, 65, 66, 73, 67, 45, 73, 78, 68, 73, 195, - 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, 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, 79, 84, 72, 69, 83, 128, 65, 80, 79, 84, 72, 69, 77, 65, + 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, 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, 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, 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, @@ -3418,45 +3920,52 @@ 65, 80, 73, 78, 128, 65, 80, 69, 83, 207, 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, 84, 73, 82, 69, 83, 84, 82, 73, 67, - 84, 73, 79, 78, 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, 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, 75, 72, 128, 65, 78, 72, 85, 128, - 65, 78, 71, 85, 76, 65, 82, 128, 65, 78, 71, 83, 84, 82, 79, 205, 65, 78, - 71, 75, 72, 65, 78, 75, 72, 85, 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, 77, 80, 83, 128, 65, 77, 80, 69, 82, 83, 65, 78, 68, 128, 65, 77, 79, - 85, 78, 212, 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, 76, 86, 69, 79, 76, 65, - 210, 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, 76, 79, 128, 65, 76, 76, 73, - 65, 78, 67, 69, 128, 65, 76, 76, 201, 65, 76, 76, 65, 200, 65, 76, 73, - 71, 78, 69, 196, 65, 76, 73, 70, 85, 128, 65, 76, 71, 73, 218, 65, 76, - 70, 65, 128, 65, 76, 69, 85, 212, 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, 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, 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, 82, 80, 76, 65, 78, 69, 128, 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, - 71, 71, 65, 210, 65, 72, 65, 68, 128, 65, 71, 79, 71, 201, 65, 71, 71, - 82, 65, 86, 65, 84, 73, 79, 78, 128, 65, 71, 65, 73, 78, 128, 65, 70, 84, - 69, 210, 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, 69, 89, 65, 78, - 78, 65, 128, 65, 69, 83, 67, 85, 76, 65, 80, 73, 85, 83, 128, 65, 69, 83, - 67, 128, 65, 69, 76, 65, 45, 80, 73, 76, 76, 65, 128, 65, 69, 69, 89, 65, - 78, 78, 65, 128, 65, 69, 68, 65, 45, 80, 73, 76, 76, 65, 128, 65, 197, - 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, 65, 75, 128, 65, 68, 65, + 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, 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, 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, 72, 85, 128, 65, 78, 71, 85, 76, 65, 82, 128, + 65, 78, 71, 83, 84, 82, 79, 205, 65, 78, 71, 75, 72, 65, 78, 75, 72, 85, + 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, 66, + 193, 65, 77, 65, 82, 128, 65, 77, 65, 210, 65, 77, 65, 76, 71, 65, 77, + 65, 84, 73, 79, 206, 65, 76, 86, 69, 79, 76, 65, 210, 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, 76, 79, 128, 65, 76, 76, 73, 65, 78, 67, 69, 128, 65, + 76, 76, 201, 65, 76, 76, 65, 200, 65, 76, 73, 71, 78, 69, 196, 65, 76, + 73, 70, 85, 128, 65, 76, 71, 73, 218, 65, 76, 70, 65, 128, 65, 76, 69, + 85, 212, 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, 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, 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, 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, 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, + 69, 89, 65, 78, 78, 65, 128, 65, 69, 89, 128, 65, 69, 84, 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, 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, 197, 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, 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, @@ -3468,11856 +3977,13280 @@ 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, 77, 128, 65, 65, 75, 128, 65, 65, 74, 128, 65, 65, 66, 65, - 65, 70, 73, 76, 73, 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, 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, }; -static unsigned short lexicon_offset[] = { - 0, 0, 6, 10, 15, 23, 27, 34, 39, 41, 44, 50, 63, 75, 84, 90, 95, 103, - 112, 116, 121, 129, 134, 137, 144, 149, 157, 163, 169, 177, 184, 194, - 199, 202, 209, 212, 217, 226, 232, 241, 248, 255, 260, 264, 273, 281, - 282, 288, 294, 302, 308, 314, 320, 328, 333, 340, 344, 347, 349, 355, - 362, 369, 377, 380, 385, 390, 396, 398, 403, 412, 419, 425, 286, 430, - 432, 434, 438, 443, 446, 452, 456, 464, 474, 481, 113, 490, 498, 503, - 511, 516, 524, 535, 538, 542, 555, 565, 571, 574, 575, 582, 584, 593, - 301, 596, 600, 608, 613, 615, 619, 622, 628, 635, 642, 647, 651, 660, - 670, 679, 688, 692, 698, 706, 713, 721, 725, 731, 735, 743, 752, 756, - 627, 763, 771, 775, 784, 789, 792, 796, 804, 813, 816, 821, 831, 840, - 847, 200, 733, 850, 857, 580, 865, 873, 879, 884, 891, 894, 900, 906, - 911, 916, 929, 22, 934, 937, 947, 952, 956, 962, 971, 974, 984, 993, 997, - 1002, 1007, 1012, 1019, 1027, 1030, 1040, 1043, 1045, 1053, 1057, 1061, - 93, 1064, 1069, 1075, 1077, 1086, 1089, 1092, 1097, 1099, 1105, 1111, - 1113, 1117, 331, 1120, 1128, 1132, 1136, 1141, 1144, 1150, 1154, 1161, - 1164, 1170, 80, 1176, 1178, 1181, 1183, 657, 1188, 1196, 1203, 1213, - 1222, 1230, 1232, 1237, 1242, 1248, 1253, 1258, 1262, 1267, 1273, 1278, - 1283, 1287, 1292, 1297, 1301, 1306, 1311, 1316, 1322, 1328, 1334, 1339, - 1343, 1348, 1353, 1358, 1362, 1367, 1372, 1377, 1382, 1233, 1238, 1243, - 1249, 1254, 1386, 1259, 1392, 1401, 1263, 1405, 1268, 1274, 1279, 1409, - 1414, 1419, 1423, 1427, 1433, 1437, 1284, 1440, 1444, 1288, 1450, 1293, - 1454, 1458, 1298, 1462, 1467, 1471, 1474, 1478, 1302, 1307, 1312, 1483, - 1489, 1495, 1501, 1317, 1329, 1335, 1505, 1509, 1513, 1516, 1340, 1520, - 1522, 1527, 1532, 1538, 1543, 1548, 1552, 1557, 1562, 1567, 1572, 1578, - 1583, 1588, 1594, 1600, 1605, 1609, 1614, 1619, 1624, 1629, 1633, 1641, - 1645, 1650, 1655, 1660, 1665, 1669, 1672, 1677, 1682, 1687, 1692, 1698, - 1703, 1707, 1344, 1710, 1715, 1720, 1349, 1724, 1728, 1735, 1354, 1742, - 1359, 1746, 1748, 1754, 1363, 1759, 1768, 1368, 1773, 1779, 1373, 1784, - 1789, 1792, 1797, 1801, 1805, 1809, 1812, 1378, 1383, 950, 1816, 1818, - 1819, 1823, 1827, 1832, 1836, 1840, 1844, 1847, 1852, 1856, 1861, 1865, - 1869, 1874, 1878, 1881, 1885, 1899, 1903, 1907, 1910, 1915, 1919, 1923, - 1928, 1933, 1938, 1942, 1947, 1951, 1956, 1963, 1969, 1974, 1979, 1985, - 1990, 1995, 1998, 1250, 2000, 2007, 2015, 2025, 2034, 2048, 2052, 2065, - 2073, 2077, 2082, 2086, 2090, 2095, 2100, 2104, 2107, 2111, 2118, 2125, - 2131, 2136, 2141, 2144, 2146, 2149, 2155, 2159, 2164, 2168, 2172, 1750, - 1756, 2177, 2181, 2184, 2189, 2194, 2199, 2203, 2210, 2215, 2218, 2225, - 2231, 2235, 2239, 2243, 2249, 2255, 2269, 2286, 2295, 2300, 2304, 2309, - 2314, 2318, 2330, 2336, 1959, 2342, 2345, 2352, 2356, 2360, 2364, 1966, - 2368, 2373, 2378, 2382, 2390, 2394, 2398, 2402, 2407, 2412, 2417, 2421, - 2426, 2431, 2435, 2440, 2444, 2447, 2451, 2455, 2460, 2464, 2468, 2477, - 2481, 2485, 2491, 2496, 2503, 2507, 2511, 2516, 2520, 2525, 2531, 2536, - 2540, 2121, 2544, 2549, 2555, 2560, 2564, 2569, 2574, 2578, 2584, 2589, - 2595, 2599, 2605, 2610, 1260, 62, 2616, 2620, 2624, 2628, 2633, 2637, - 2641, 2645, 2649, 2654, 2658, 2663, 2667, 2670, 2674, 2679, 2683, 2688, - 2692, 2696, 2701, 2705, 2708, 2721, 2725, 2729, 2733, 2737, 2741, 2744, - 2748, 2752, 2757, 2761, 2766, 2771, 2776, 2780, 2783, 2786, 2792, 2796, - 2800, 2803, 2807, 2811, 1059, 445, 2814, 2819, 2823, 2826, 2831, 2836, - 2840, 2845, 2849, 2852, 2858, 2865, 2871, 2876, 2880, 2885, 2889, 2899, - 2903, 2907, 2912, 2917, 2927, 1848, 2932, 2936, 2939, 2945, 2952, 2956, - 648, 790, 2960, 2967, 2973, 2978, 2984, 2989, 1857, 2993, 485, 2999, - 3010, 1862, 3014, 3019, 3034, 3040, 3047, 3057, 3063, 3068, 3074, 3077, - 3081, 3088, 3093, 3097, 3101, 3105, 3109, 3114, 3120, 2675, 3125, 3137, - 1554, 3144, 3147, 3151, 3155, 3158, 3162, 3167, 3171, 3175, 3181, 3187, - 3192, 3198, 3202, 3210, 3220, 3226, 3231, 3240, 3248, 3255, 3259, 3268, - 3272, 3277, 3282, 3286, 3294, 3299, 3303, 1870, 1402, 318, 402, 3309, - 3315, 3319, 3323, 3328, 3332, 3336, 3339, 3343, 3347, 3351, 3356, 3360, - 3364, 3306, 3370, 3377, 3381, 3394, 3398, 3402, 3406, 3410, 3414, 3420, - 3427, 3431, 3439, 3448, 3454, 3459, 3462, 3466, 3470, 3480, 3490, 3498, - 3505, 3512, 3518, 3524, 3531, 3535, 3540, 3544, 3552, 3557, 3565, 3570, - 3575, 3579, 3584, 3591, 3594, 3598, 3602, 3605, 3611, 3617, 3621, 3632, - 3642, 3657, 3672, 3687, 3702, 3717, 3732, 3747, 3762, 3777, 3792, 3807, - 3822, 3837, 3852, 3867, 3882, 3897, 3912, 3927, 3942, 3957, 3972, 3987, - 4002, 4017, 4032, 4047, 4062, 4077, 4092, 4107, 4122, 4137, 4152, 4167, - 4182, 4197, 4212, 4227, 4242, 4257, 4272, 4287, 4302, 4317, 4332, 4347, - 4362, 4377, 4386, 4395, 4400, 4406, 4410, 4415, 4419, 4422, 4426, 4429, - 4434, 285, 388, 4440, 4448, 4452, 4456, 4459, 4465, 4469, 4477, 4483, - 4488, 4495, 4502, 4508, 4513, 4520, 4526, 4530, 4535, 4542, 4548, 2693, - 4458, 4552, 4556, 4560, 4563, 4570, 4573, 4581, 4586, 4591, 4582, 4583, - 4596, 4602, 4608, 4613, 4618, 4625, 4630, 4634, 4637, 4641, 1904, 454, - 4645, 4649, 4654, 4660, 4665, 4669, 4672, 4676, 4681, 4685, 4692, 4696, - 4700, 4704, 913, 633, 4707, 4715, 4722, 4729, 4735, 4742, 4750, 4757, - 4764, 4769, 4781, 1280, 1410, 1415, 4792, 1420, 4796, 4800, 4809, 4818, - 4824, 4829, 4833, 4839, 4844, 4848, 4857, 4866, 4875, 4884, 4889, 4894, - 4906, 2846, 4910, 4912, 4917, 4921, 4930, 4938, 1424, 4919, 4944, 4948, - 4951, 4955, 4964, 4970, 4975, 4978, 4987, 4993, 5001, 5005, 5009, 5012, - 5017, 5024, 5030, 5033, 5035, 5038, 5046, 5054, 5057, 5062, 4593, 5065, - 1964, 1970, 5067, 5075, 1991, 5080, 5084, 5089, 5093, 5097, 5101, 5106, - 5110, 5115, 5119, 5122, 5125, 5131, 5137, 5143, 5149, 5155, 5161, 5167, - 5171, 5175, 5179, 5183, 5187, 5192, 5200, 5210, 5215, 5219, 5230, 5243, - 5254, 5267, 5278, 5290, 5302, 5314, 5327, 5340, 5347, 5353, 5360, 5366, - 5370, 5375, 5379, 5386, 5394, 5398, 5404, 5414, 5418, 5423, 5430, 5436, - 4737, 5446, 5450, 5457, 632, 5461, 5465, 5470, 5475, 5480, 5484, 5490, - 5494, 5498, 5504, 5509, 5513, 1896, 5519, 5527, 5536, 5540, 5546, 5551, - 5556, 5561, 5567, 5572, 3177, 5577, 5581, 5586, 5591, 5541, 5596, 5600, - 5607, 5613, 5618, 5622, 5627, 5631, 5640, 5020, 5645, 2404, 5649, 5654, - 5659, 5547, 5663, 5552, 5557, 5668, 5675, 5682, 5688, 5694, 5700, 5705, - 5710, 5715, 5562, 5568, 5721, 5727, 5732, 5573, 5737, 1115, 5740, 5748, - 5754, 5760, 5769, 5774, 5789, 5806, 5825, 5834, 5842, 5857, 5867, 5877, - 5883, 5895, 5904, 5912, 5919, 5926, 5932, 5937, 5945, 5955, 5962, 5972, - 5982, 5992, 6001, 6011, 6025, 6040, 6049, 6057, 6062, 6066, 6075, 6085, - 6095, 6105, 6110, 6114, 6123, 6133, 6144, 6157, 6170, 6182, 6187, 6193, - 6196, 6200, 6205, 6209, 6217, 6226, 6234, 6241, 6252, 6256, 6259, 6265, - 6269, 6275, 6282, 6287, 6294, 6301, 6308, 6315, 6322, 6329, 6334, 5802, - 6339, 6348, 6352, 6364, 6368, 6371, 6375, 6379, 6383, 6387, 6392, 6397, - 6402, 6408, 6413, 6418, 5426, 6423, 6427, 6431, 6435, 6440, 6445, 6451, - 6455, 6463, 6467, 6470, 6476, 6483, 6487, 6490, 6495, 3205, 6501, 6509, - 6515, 5441, 6520, 6525, 6529, 6542, 6556, 6563, 6569, 6573, 6578, 6584, - 6589, 4853, 6594, 6597, 6602, 6606, 2409, 802, 6612, 6616, 6622, 6628, - 6633, 6638, 6646, 6652, 6665, 6673, 6677, 6685, 6692, 6704, 6714, 6721, - 6728, 6737, 6746, 6754, 6760, 6765, 6770, 6776, 5582, 6781, 6784, 6791, - 6797, 6810, 6821, 6828, 6834, 6843, 6851, 6858, 6864, 6870, 6875, 6879, - 6884, 6890, 6898, 5587, 6905, 6910, 6917, 6923, 6928, 6936, 6944, 6951, - 6955, 6969, 6979, 6984, 6988, 6999, 7005, 7010, 7015, 7019, 5592, 7024, - 7027, 7039, 7046, 7051, 7055, 7060, 7064, 7071, 7077, 7084, 5542, 7089, - 2414, 8, 7096, 7101, 7105, 7111, 7122, 7132, 7141, 7153, 7158, 7162, - 7170, 7184, 7188, 7191, 7199, 7206, 7214, 7218, 7229, 7233, 7240, 7245, - 7249, 7254, 7258, 7262, 7265, 7271, 7277, 7284, 7294, 7303, 7310, 5601, - 5608, 5614, 5619, 7316, 5623, 7322, 7325, 7332, 7347, 7363, 7378, 897, - 383, 7383, 7391, 7398, 7404, 7409, 7414, 5632, 7416, 7420, 7430, 7435, - 7439, 7448, 7452, 7455, 7462, 7466, 7469, 7477, 7484, 7492, 7496, 7500, - 7506, 7510, 7514, 7518, 7524, 7528, 7535, 7539, 7544, 7548, 7555, 7561, - 7569, 7575, 7585, 7590, 7595, 7599, 7607, 3131, 7615, 7620, 7624, 7628, - 7631, 7639, 7646, 7650, 7655, 7659, 7670, 7676, 7680, 7683, 7690, 5641, - 7695, 7699, 1712, 3563, 606, 133, 7706, 7710, 7715, 7720, 7724, 7728, - 7732, 7737, 7741, 7746, 7750, 7753, 7757, 7761, 7766, 7776, 7782, 7786, - 7790, 7797, 7805, 7814, 7825, 7832, 7839, 7848, 7857, 7866, 7875, 7884, - 7893, 7903, 7913, 7923, 7933, 7943, 7952, 7962, 7972, 7982, 7992, 8002, - 8012, 8022, 8031, 8041, 8051, 8061, 8071, 8081, 8091, 8100, 8110, 8120, - 8130, 8140, 8150, 8160, 8170, 8180, 8190, 8199, 8209, 8219, 8229, 8239, - 8249, 8259, 8269, 8279, 8289, 8299, 8308, 8314, 8318, 8321, 8325, 8330, - 8337, 8343, 8348, 8352, 8357, 8361, 8365, 5650, 8371, 8376, 8385, 5655, - 8390, 5660, 8393, 8397, 8401, 8411, 8416, 8425, 8433, 8440, 8445, 8452, - 8457, 8461, 8464, 8475, 8485, 8494, 8502, 8513, 8525, 8535, 8539, 8544, - 8549, 8553, 8558, 8562, 8565, 8572, 8582, 8591, 8598, 8602, 8608, 8613, - 8618, 8622, 8631, 8636, 8642, 8647, 8651, 8660, 8668, 8676, 8683, 8691, - 8703, 8714, 8724, 8731, 8737, 8746, 8757, 8766, 8775, 8783, 8790, 8799, - 8807, 4610, 8811, 8813, 8818, 8824, 8832, 8839, 8848, 8857, 8866, 8875, - 8884, 8893, 8902, 8911, 8921, 8931, 8940, 8954, 8961, 8969, 8978, 8984, - 8993, 9001, 9010, 9023, 9031, 9038, 9051, 9057, 9066, 9075, 9080, 9084, - 9090, 9096, 9103, 5440, 9108, 9113, 9120, 9125, 9130, 9134, 9140, 9148, - 9156, 9163, 9171, 9179, 9184, 9190, 9195, 9199, 9210, 9218, 9224, 9229, - 9238, 9244, 9249, 9258, 9272, 3090, 9276, 9281, 9286, 9292, 9297, 9302, - 9306, 9311, 9316, 4609, 9321, 9326, 9331, 9336, 9340, 9345, 9350, 9355, - 9361, 9367, 9372, 9376, 9381, 9386, 5664, 9391, 9396, 9401, 9406, 9418, - 9428, 9439, 9450, 9461, 9473, 9484, 9495, 9506, 9517, 9522, 2062, 9526, - 9529, 9535, 9543, 9551, 9556, 9564, 9572, 9579, 9586, 9591, 9597, 9604, - 9612, 9619, 9631, 9636, 7341, 9642, 9651, 9658, 9664, 9672, 9679, 9686, - 9692, 9701, 9708, 9716, 9722, 9729, 9737, 9742, 2893, 1081, 9749, 9322, - 9752, 9758, 9762, 9774, 9779, 9786, 9792, 9797, 9327, 9332, 9801, 9805, - 9809, 9817, 9824, 9831, 9848, 9852, 9855, 9863, 2949, 9867, 9869, 9877, - 9887, 9893, 9898, 9902, 9908, 9913, 9916, 9923, 9929, 9935, 9940, 9947, - 9953, 9958, 9965, 9971, 9978, 9984, 9990, 9996, 10004, 10010, 10016, - 10021, 10028, 10033, 10037, 10042, 10049, 10054, 10060, 10063, 10067, - 10079, 10085, 10090, 10097, 10103, 10109, 10118, 10126, 10133, 10143, - 10153, 10161, 9346, 10164, 9351, 10172, 10184, 10197, 10212, 10223, - 10241, 10252, 10265, 10276, 10287, 10299, 10312, 10323, 10334, 10345, - 2264, 10358, 10362, 10370, 10381, 10388, 10394, 10398, 10404, 10407, - 10417, 10425, 10432, 10440, 10445, 10450, 10457, 10463, 10468, 10473, - 10477, 10481, 10487, 10493, 10498, 10503, 10508, 10512, 9356, 9362, 9368, - 10516, 10524, 10533, 10540, 5558, 10544, 10546, 10551, 10556, 10562, - 10567, 10572, 10577, 10581, 10587, 10592, 10598, 10603, 10608, 10614, - 10619, 10624, 10629, 10635, 10640, 10645, 10651, 10657, 10662, 10669, - 10676, 10681, 10685, 10689, 10692, 10700, 10705, 10710, 10720, 10725, - 10732, 10738, 10748, 10762, 10776, 10790, 10804, 10819, 10834, 10851, - 10869, 10882, 10888, 10893, 10898, 10904, 10909, 10914, 10918, 10922, - 10927, 10931, 10937, 10942, 10947, 10951, 10956, 10963, 10968, 10972, - 10978, 10983, 10988, 10992, 10998, 11003, 11008, 11015, 11020, 11024, - 11028, 11033, 11038, 11044, 11049, 11058, 11066, 11073, 11080, 11086, - 11092, 11097, 11102, 11108, 11113, 11119, 11124, 11130, 11136, 11143, - 11149, 11154, 11159, 5706, 11168, 11171, 11177, 11182, 11192, 11199, - 11204, 11210, 11215, 11221, 11226, 11232, 11237, 11245, 11252, 11257, - 11263, 11267, 11276, 11287, 11294, 11302, 11308, 11315, 11321, 11326, - 11330, 11336, 11341, 11346, 11351, 5711, 4626, 2428, 11355, 11359, 11363, - 11367, 11371, 11374, 11381, 11389, 9377, 11396, 11406, 11414, 11421, - 11431, 11440, 8490, 8499, 11445, 11455, 11470, 11476, 11483, 11490, - 11496, 11506, 11516, 9382, 11525, 11531, 11537, 11545, 11553, 11558, - 11567, 11575, 11587, 11597, 11607, 11617, 11626, 11638, 11648, 11658, - 11669, 11674, 11686, 11698, 11710, 11722, 11734, 11746, 11758, 11770, - 11782, 11794, 11805, 11817, 11829, 11841, 11853, 11865, 11877, 11889, - 11901, 11913, 11925, 11936, 11948, 11960, 11972, 11984, 11996, 12008, - 12020, 12032, 12044, 12056, 12067, 12079, 12091, 12103, 12115, 12127, - 12139, 12151, 12163, 12175, 12187, 12198, 12210, 12222, 12234, 12246, - 12258, 12270, 12282, 12294, 12306, 12318, 12329, 12341, 12353, 12365, - 12377, 12389, 12401, 12413, 12425, 12437, 12449, 12460, 12472, 12484, - 12496, 12508, 12520, 12532, 12544, 12556, 12568, 12580, 12591, 12603, - 12615, 12627, 12639, 12652, 12665, 12678, 12691, 12704, 12717, 12730, - 12742, 12755, 12768, 12781, 12794, 12807, 12820, 12833, 12846, 12859, - 12872, 12884, 12897, 12910, 12923, 12936, 12949, 12962, 12975, 12988, - 13001, 13014, 13026, 13039, 13052, 13065, 13078, 13091, 13104, 13117, - 13130, 13143, 13156, 13168, 13181, 13194, 13207, 13220, 13233, 13246, - 13259, 13272, 13285, 13298, 13310, 13323, 13336, 13349, 13362, 13375, - 13388, 13401, 13414, 13427, 13440, 13452, 13463, 13476, 13489, 13502, - 13515, 13528, 13541, 13554, 13567, 13580, 13593, 13605, 13618, 13631, - 13644, 13657, 13670, 13683, 13696, 13709, 13722, 13735, 13747, 13760, - 13773, 13786, 13799, 13812, 13825, 13838, 13851, 13864, 13877, 13889, - 13902, 13915, 13928, 13941, 13954, 13967, 13980, 13993, 14006, 14019, - 14031, 14044, 14057, 14070, 14083, 14096, 14109, 14122, 14135, 14148, - 14161, 14173, 14186, 14199, 14212, 14225, 14238, 14251, 14264, 14277, - 14290, 14303, 14315, 14328, 14341, 14354, 14367, 14380, 14393, 14406, - 14419, 14432, 14445, 14457, 14470, 14483, 14496, 14509, 14522, 14535, - 14548, 14561, 14574, 14587, 14599, 14612, 14625, 14638, 14651, 14664, - 14677, 14690, 14703, 14716, 14729, 14741, 14754, 14767, 14780, 14793, - 14806, 14819, 14832, 14845, 14858, 14871, 14883, 14894, 14902, 14909, - 14915, 14919, 14925, 14931, 14939, 14945, 14950, 5563, 14954, 14961, - 14969, 14976, 14983, 6804, 14990, 14999, 15004, 4642, 15011, 15016, - 15021, 15029, 15036, 15043, 15049, 15058, 15067, 15073, 15078, 15086, - 15092, 15102, 15111, 15115, 15122, 15126, 15131, 15137, 15145, 15149, - 9392, 15158, 15162, 15168, 5410, 15175, 15181, 15186, 15190, 15194, 5941, - 15199, 15207, 15214, 15223, 15230, 15237, 15243, 15247, 15253, 15259, - 15267, 15273, 15280, 15286, 15295, 15303, 15312, 15317, 15328, 15333, - 15338, 15343, 4815, 15347, 15354, 15359, 15367, 15379, 15384, 15388, - 15391, 15397, 15403, 15408, 15412, 15415, 15426, 15431, 5733, 15438, - 5574, 5738, 15443, 15447, 111, 15455, 15459, 15463, 15467, 15472, 15476, - 15480, 7845, 15484, 15490, 15495, 15499, 15503, 15511, 15515, 15520, - 15525, 15529, 15535, 15540, 15544, 15549, 15554, 15558, 15565, 15569, - 15574, 15578, 15581, 15594, 15599, 15608, 15613, 15616, 2297, 2302, - 15620, 15626, 15631, 15636, 15641, 15647, 15652, 15657, 15661, 15666, - 15671, 15677, 15682, 15687, 15693, 15698, 15702, 15707, 15712, 15717, - 15721, 15726, 15731, 15736, 15741, 15745, 15749, 15754, 2437, 15703, - 15758, 15765, 6020, 15777, 15785, 15708, 15792, 15797, 15713, 15805, - 15810, 15815, 15820, 15824, 15829, 15832, 15836, 15842, 15847, 5432, - 1717, 1722, 15851, 15857, 15863, 15868, 15872, 15876, 15880, 15883, - 15889, 15896, 15904, 15910, 15916, 15921, 15926, 9614, 10139, 15930, - 15942, 15945, 15952, 15956, 15967, 15976, 15989, 15999, 16013, 16025, - 16039, 16049, 16055, 16073, 16092, 16105, 16119, 16135, 16146, 16163, - 16181, 16193, 16207, 16221, 16233, 16250, 16269, 16281, 16299, 16312, - 16326, 16346, 6536, 16358, 16363, 16368, 16374, 16379, 2079, 16383, - 16389, 16393, 16396, 16400, 16408, 16414, 15722, 16418, 16429, 16435, - 16441, 16450, 16457, 16464, 16470, 16479, 16487, 16497, 16502, 16511, - 16520, 16531, 16542, 16552, 16557, 16561, 16569, 16579, 16590, 16598, - 16605, 16611, 16616, 15732, 16620, 16629, 16634, 16643, 16651, 16661, - 16670, 16676, 16682, 15737, 15742, 16686, 16696, 958, 9568, 3031, 16705, - 16714, 16722, 16733, 16744, 16754, 16763, 16772, 16781, 16787, 16796, - 16804, 5718, 16810, 16813, 16817, 16822, 16827, 16835, 15750, 16839, - 16845, 16849, 16855, 16861, 2872, 16869, 16874, 16878, 16882, 16889, - 16893, 16901, 16907, 16912, 16916, 16921, 16927, 16938, 16943, 16947, - 16958, 16962, 16966, 16969, 16973, 16978, 16982, 16986, 829, 16990, 5, - 16996, 17000, 17004, 17008, 17013, 17017, 17021, 17025, 17029, 17034, - 17038, 17043, 17047, 17050, 17054, 17059, 17063, 17068, 17072, 17076, - 17080, 17085, 17089, 17093, 17103, 17108, 17112, 17116, 17121, 17126, - 17135, 17140, 17145, 17149, 17153, 17165, 17174, 17183, 17189, 17193, - 17203, 17212, 17220, 17226, 17230, 17237, 17247, 17256, 17264, 17272, - 17279, 17288, 17297, 17305, 17310, 17314, 17318, 17321, 17323, 17327, - 17331, 17336, 17340, 17344, 17347, 17351, 17354, 17358, 17361, 17365, - 17369, 17373, 17377, 17382, 17387, 17392, 17396, 17399, 17404, 17410, - 17415, 17421, 17426, 17430, 17434, 17438, 17443, 17447, 17452, 17456, - 17463, 17467, 17470, 17474, 17480, 17486, 17490, 17494, 17499, 17506, - 17512, 17516, 17525, 17529, 17533, 17536, 17542, 17547, 17553, 17558, - 1776, 2449, 17562, 17563, 17566, 17570, 17574, 17579, 17583, 17587, - 17590, 17595, 17599, 17602, 17607, 17611, 17616, 17620, 9587, 17625, - 17628, 17631, 17635, 17639, 17646, 17651, 17658, 17662, 17666, 17671, - 17676, 17680, 17685, 17697, 17708, 17712, 17715, 17721, 4743, 2001, - 17725, 17741, 5796, 17761, 17770, 17786, 17790, 17793, 17799, 17809, - 17815, 17830, 17842, 17853, 17861, 17870, 17876, 17885, 17895, 17906, - 17917, 17926, 17935, 17943, 17950, 17958, 17964, 17969, 17975, 17980, - 17988, 18000, 18012, 18026, 18033, 18042, 18051, 18059, 18067, 18075, - 18082, 18091, 18099, 18109, 18118, 18128, 18137, 18146, 18154, 18159, - 18163, 18166, 18170, 18174, 18178, 18184, 18190, 9632, 18195, 18207, - 18213, 6149, 18224, 18234, 18243, 18247, 18250, 18254, 18260, 18264, - 18269, 18278, 18285, 4784, 18292, 18300, 18307, 18313, 18318, 18324, - 18330, 18338, 18342, 18345, 18347, 18167, 18356, 18362, 18372, 18377, - 18383, 18388, 18393, 18398, 18405, 18414, 18423, 18429, 18434, 18440, - 18445, 18452, 18457, 18461, 18471, 18475, 18480, 18490, 18499, 18503, - 18510, 18516, 18521, 18528, 18532, 8380, 18540, 18547, 18554, 15531, - 18096, 18559, 18563, 18568, 18581, 18595, 18611, 18629, 18646, 18664, - 16152, 18681, 18693, 18707, 10228, 16169, 18719, 18731, 9444, 18745, - 18750, 18755, 18761, 18765, 18770, 18780, 18786, 6473, 18792, 18794, - 18799, 18807, 18811, 18401, 18817, 18824, 18834, 18839, 18843, 18846, - 18852, 18860, 18870, 10257, 18884, 18891, 18895, 18898, 18903, 18907, - 18917, 18922, 18927, 18935, 18944, 18949, 10262, 18953, 18956, 18959, - 18975, 18983, 18991, 18999, 19004, 19008, 19014, 19020, 19023, 19029, - 19041, 19048, 19055, 19069, 19082, 19091, 19103, 19114, 19123, 19132, - 19140, 19151, 4766, 19158, 19164, 19169, 19175, 19185, 19194, 19200, - 19205, 19212, 19224, 19231, 19240, 19248, 19254, 19260, 19265, 19269, - 19272, 19278, 19283, 19287, 19298, 19307, 19315, 19320, 19326, 9981, - 5169, 19331, 19334, 19337, 19343, 19351, 19359, 19363, 19368, 19371, - 19380, 19388, 19399, 19403, 19409, 19415, 19419, 19425, 19447, 19471, - 19478, 19484, 19495, 19513, 19520, 19524, 19533, 19546, 19554, 19566, - 19577, 19587, 19601, 19610, 19618, 19630, 5813, 19641, 19652, 19664, - 19674, 19683, 19688, 19692, 19700, 19705, 19709, 19712, 19720, 19728, - 19737, 19746, 2278, 19752, 19761, 19771, 19781, 19790, 19795, 19806, - 19817, 19821, 19831, 19840, 19850, 19860, 19868, 19877, 19884, 19892, - 19899, 19908, 19912, 19920, 19927, 19934, 19945, 19960, 19967, 19977, - 19986, 9070, 19992, 19997, 20001, 20009, 20015, 20024, 20029, 20039, - 1194, 20043, 1256, 583, 20046, 20055, 18106, 20062, 20067, 20071, 20077, - 1289, 444, 317, 20082, 20091, 20100, 20108, 20119, 20128, 20136, 20139, - 20147, 20155, 9600, 20160, 20166, 3399, 20171, 20175, 20181, 20185, - 20192, 1451, 20198, 5881, 20205, 20215, 20223, 20229, 20238, 20246, - 20254, 20261, 20268, 1486, 20275, 20281, 20292, 20303, 20311, 20318, - 20327, 20335, 20342, 20349, 20362, 20373, 20392, 1294, 20396, 20401, - 20409, 2908, 20413, 20418, 1455, 17345, 20428, 20432, 20437, 20441, 2854, - 20447, 20455, 2909, 239, 20463, 20471, 20479, 20486, 20492, 20497, 20504, - 20507, 20513, 18265, 20519, 88, 20523, 20527, 20533, 20538, 20544, 2012, - 20548, 20552, 20555, 20558, 20565, 20571, 15817, 2953, 10920, 20576, - 20579, 20587, 20590, 20602, 20607, 20611, 20619, 20626, 20632, 20639, - 20646, 20649, 20653, 20657, 1459, 20667, 2332, 2132, 20672, 20677, 20681, - 20686, 20691, 20697, 20702, 20707, 20711, 20716, 20722, 20727, 20732, - 20738, 20743, 20747, 20752, 20757, 20762, 20767, 20772, 20778, 20784, - 20789, 20793, 20798, 20802, 20807, 20812, 20817, 20821, 20826, 20831, - 20836, 20841, 20847, 20853, 20858, 20862, 20867, 20872, 20877, 20882, - 20887, 20891, 20896, 20901, 20906, 20910, 20915, 20923, 20929, 20935, - 20941, 20946, 20950, 20953, 20957, 20962, 20966, 20971, 20975, 20978, - 20983, 15226, 20202, 20988, 20992, 20997, 21001, 21004, 21007, 21011, - 21016, 21024, 21028, 21033, 21037, 21041, 21046, 21051, 21055, 21061, - 21066, 21073, 21080, 21084, 21087, 21093, 21102, 21109, 21113, 21118, - 21122, 21128, 21132, 21138, 7242, 10484, 21143, 21148, 21153, 21159, - 21164, 21169, 21173, 21178, 21183, 21189, 21194, 21199, 21203, 21208, - 21213, 21217, 21222, 21227, 21232, 21236, 21241, 21246, 21251, 21255, - 21259, 21263, 21272, 21278, 21284, 21293, 21301, 21306, 21310, 21317, - 21323, 21327, 21332, 21341, 21346, 1485, 21352, 21355, 21359, 15858, - 15864, 21365, 21369, 21380, 21391, 21403, 21410, 21417, 21422, 21426, - 14928, 626, 15225, 21434, 21438, 21443, 21449, 21454, 21460, 21465, - 21471, 21476, 2386, 2816, 21480, 21483, 21488, 21493, 21499, 21504, - 21509, 21513, 21518, 21524, 21529, 21534, 21540, 21545, 21549, 21554, - 21559, 21564, 21569, 21573, 21578, 21583, 21588, 21594, 21600, 21606, - 21611, 21615, 21620, 2969, 21624, 21627, 4825, 21631, 21637, 21644, 4834, - 21648, 21655, 21661, 21670, 21678, 21682, 21689, 21695, 21699, 21702, - 21711, 21719, 21723, 21733, 21743, 21749, 21759, 21764, 21777, 21791, - 21802, 21814, 21828, 21841, 21853, 9455, 21865, 21870, 21875, 21879, - 21883, 21887, 1765, 19112, 21891, 21896, 21901, 21905, 21908, 21914, - 21920, 6277, 10168, 21925, 21930, 21935, 21444, 21940, 21945, 21951, - 21450, 21956, 21959, 21455, 21964, 21970, 21976, 21461, 21981, 21986, - 21992, 21997, 22002, 22008, 22014, 22019, 22024, 22028, 22033, 22038, - 22043, 22051, 22055, 22060, 22065, 22069, 22074, 22079, 22084, 21466, - 21472, 22090, 2174, 224, 22093, 22096, 22100, 22104, 22112, 22119, 22126, - 22130, 22133, 22139, 22147, 22151, 22155, 22158, 22165, 22169, 22176, - 22184, 22192, 22199, 22203, 689, 271, 22215, 22220, 22225, 22231, 22236, - 2980, 22241, 22246, 22251, 22256, 22261, 15938, 22266, 22271, 22276, - 22281, 22287, 22292, 22296, 22301, 22306, 22311, 22315, 22320, 22325, - 15781, 2986, 22330, 22335, 22340, 22346, 22351, 22356, 22360, 22365, - 22370, 22376, 22381, 22386, 22390, 22395, 22400, 22405, 22409, 22414, - 22419, 22424, 22430, 22436, 22441, 22445, 22450, 22455, 22460, 22464, - 22472, 22478, 22482, 22489, 10815, 22495, 22502, 22510, 22517, 22523, - 22535, 22541, 22545, 22549, 22160, 22553, 22564, 22569, 22574, 22579, - 22583, 22588, 15869, 22592, 15239, 22597, 22602, 22608, 22613, 22617, - 22621, 22624, 22630, 22641, 22653, 22658, 22662, 22665, 2387, 300, 22669, - 22675, 26, 22680, 22684, 22688, 22696, 22700, 22704, 22707, 22712, 22716, - 22721, 22725, 22730, 22734, 22739, 22743, 22746, 22748, 22751, 22753, - 22757, 22769, 22778, 22782, 22788, 22793, 22799, 22804, 22809, 22813, - 22818, 22825, 22830, 22834, 22841, 18104, 18114, 22845, 22850, 22855, - 22860, 22864, 22871, 4913, 22877, 22886, 22894, 22909, 22923, 22931, - 22942, 22951, 22956, 22966, 22971, 22975, 22978, 22982, 22986, 22993, - 22998, 5401, 23008, 23010, 23013, 23017, 23021, 23026, 23032, 23037, - 23046, 23052, 23057, 23064, 23068, 23075, 23088, 23096, 23100, 23110, - 23115, 23119, 23123, 23129, 23134, 23144, 23153, 23164, 23172, 23183, - 23192, 23195, 23199, 23207, 23213, 23221, 23228, 23234, 2092, 23238, - 23240, 23245, 23250, 23253, 23255, 23259, 23262, 23266, 23270, 23276, - 23286, 23291, 23297, 23301, 23306, 23319, 18367, 23325, 23334, 11591, - 21729, 23341, 23346, 23350, 23358, 23365, 23370, 23374, 23378, 23386, - 23392, 23398, 23403, 23407, 23410, 23415, 16239, 23431, 23443, 23455, - 16256, 23469, 23481, 10281, 23495, 23500, 23505, 23509, 23516, 23528, - 23534, 23537, 23542, 23545, 23547, 23551, 23554, 23559, 23564, 23570, - 23575, 23580, 23586, 23592, 23597, 23601, 23606, 23611, 23616, 23620, - 23623, 23629, 23634, 23639, 23644, 23648, 23653, 23659, 23664, 23669, - 23675, 23680, 23685, 23690, 23695, 23700, 23704, 23707, 23713, 23717, - 23725, 23732, 23740, 23750, 23756, 23762, 23766, 23775, 23780, 23785, - 6511, 23790, 23797, 23803, 23808, 23816, 23820, 23823, 23834, 23841, - 23847, 23851, 23854, 23860, 23866, 23874, 20487, 23881, 23889, 23894, - 23900, 23905, 23909, 23916, 23922, 18380, 23931, 23936, 23944, 23952, - 5909, 3418, 23959, 23963, 23967, 23971, 23976, 23980, 23984, 23989, - 23993, 23997, 24001, 24005, 24009, 24012, 24014, 24022, 24026, 24033, - 24037, 24045, 24052, 24062, 24066, 24070, 24078, 24084, 8593, 24090, - 24099, 24106, 24114, 24122, 24130, 24137, 24144, 24151, 24158, 24165, - 24170, 24176, 24193, 24201, 24209, 24216, 416, 24220, 24226, 22947, - 24232, 24240, 24246, 24252, 24261, 24267, 2941, 15826, 24276, 24283, - 24288, 24292, 24299, 24307, 24316, 24326, 24332, 24340, 24349, 24357, - 15571, 24364, 24371, 24377, 24387, 24396, 24407, 24411, 24416, 24422, - 24428, 24433, 24446, 24459, 24472, 24479, 24485, 24490, 24494, 1465, 83, - 24498, 24500, 24504, 24508, 24512, 24517, 24521, 5849, 24525, 24531, - 3629, 24537, 24540, 24545, 24549, 24554, 24558, 24562, 24567, 6372, - 24571, 24575, 24579, 9954, 24584, 24588, 24593, 24598, 24603, 24607, - 18384, 24613, 24616, 24620, 24625, 24629, 24635, 24640, 24644, 24648, - 4945, 4949, 20605, 24651, 24659, 24666, 24670, 316, 24675, 24681, 24687, - 24691, 24700, 24704, 24709, 24714, 24718, 24724, 24729, 24744, 24759, - 24774, 24790, 24808, 19756, 24822, 24827, 24831, 23081, 24839, 24843, - 24852, 24860, 6072, 9756, 24864, 24867, 24870, 4926, 3111, 24875, 24883, - 24887, 24890, 24894, 24899, 24905, 24910, 24914, 24919, 24923, 24929, - 24933, 24940, 7550, 24944, 24950, 24957, 24964, 24971, 20095, 4862, - 24978, 24985, 24992, 24998, 25003, 25010, 25021, 25027, 25032, 25039, - 25043, 25047, 25057, 25063, 25068, 25073, 25078, 25083, 25087, 25091, - 25097, 2004, 711, 6388, 25106, 6393, 25111, 6398, 6403, 6409, 25116, - 25126, 25130, 6414, 25135, 25138, 25143, 25147, 25152, 25159, 25165, - 25175, 3444, 25184, 25188, 25192, 25202, 25213, 25219, 25225, 25230, - 25236, 25239, 25246, 25252, 25257, 25264, 25271, 25275, 25285, 25298, - 25307, 25316, 25327, 25340, 25349, 25354, 6419, 25359, 25367, 25372, - 4392, 21, 25379, 25384, 11012, 25388, 25391, 25394, 25398, 25406, 25410, - 25413, 25419, 25425, 25433, 25439, 25446, 25450, 25454, 19923, 25458, - 25467, 25473, 25478, 25482, 25490, 25496, 25501, 25506, 25510, 25516, - 25521, 25527, 3216, 25534, 25538, 25541, 9882, 25553, 25564, 25571, - 25577, 25581, 25587, 25592, 25598, 25603, 25607, 25612, 25617, 25627, - 25633, 25646, 25651, 25657, 16672, 1468, 855, 25662, 25668, 14, 25676, - 25683, 25687, 25691, 25699, 25703, 25708, 25712, 25719, 25724, 25728, - 25733, 25739, 25744, 25750, 25755, 25759, 25763, 25767, 25772, 25776, - 25781, 25785, 25792, 25797, 25801, 25806, 25810, 25815, 25819, 10029, - 10034, 25824, 25828, 25831, 25835, 25840, 25844, 25850, 25857, 25862, - 25872, 25877, 25885, 25889, 25892, 25896, 25901, 25906, 25910, 25915, - 8604, 25926, 25930, 25933, 25937, 25941, 25944, 25948, 4952, 8620, 25951, - 25954, 25959, 25963, 25972, 25988, 26004, 26014, 19742, 26021, 26025, - 26030, 26034, 26038, 26043, 26048, 26052, 26057, 26061, 18966, 26065, - 26070, 26074, 26081, 26089, 26095, 26102, 26108, 26112, 26118, 26126, - 26130, 26139, 5830, 26147, 26151, 26159, 26166, 26171, 26175, 26180, - 18556, 1142, 26184, 26191, 26197, 26202, 26205, 26207, 26214, 26221, - 26227, 26231, 26234, 26238, 26242, 26246, 26251, 26255, 26259, 26262, - 26266, 16287, 26285, 6549, 26298, 26304, 26308, 26312, 26319, 26325, - 26330, 26336, 26346, 26358, 26369, 26374, 26381, 26385, 26388, 10365, - 10050, 26396, 26400, 26404, 26409, 26414, 26418, 26422, 26425, 4599, - 19639, 26430, 26434, 26440, 24322, 26446, 26450, 26455, 26462, 26466, - 10304, 26469, 26476, 862, 26480, 26485, 26490, 26495, 26499, 26504, - 26510, 26515, 26521, 26526, 26536, 26541, 26546, 15604, 23800, 26551, - 26554, 26561, 26570, 26574, 26577, 26581, 604, 26586, 26592, 26596, - 26606, 26615, 26622, 26628, 26632, 26639, 26645, 26652, 26658, 26668, - 26676, 26682, 26688, 26693, 26697, 26704, 26710, 26717, 26247, 478, 1109, - 26723, 26728, 26731, 26737, 26745, 1397, 26750, 26754, 26761, 26767, - 26771, 26776, 26785, 26795, 26801, 26818, 26822, 26831, 26839, 26845, - 26850, 26857, 26863, 26871, 26876, 26884, 26903, 16332, 26917, 26933, - 26947, 26953, 26958, 26963, 26968, 26974, 26979, 26983, 26990, 26995, - 298, 2473, 27002, 27007, 19856, 26860, 27012, 27017, 27025, 27029, 27032, - 27038, 27042, 19827, 27045, 27049, 27052, 27057, 27061, 27066, 27071, - 27075, 27080, 27084, 27088, 27093, 27099, 18940, 27104, 27108, 10470, - 441, 43, 21484, 21489, 21494, 21500, 21505, 21510, 27111, 21514, 27115, - 21519, 21525, 27119, 21530, 21535, 27127, 27132, 21541, 27137, 27142, - 27147, 27152, 27158, 27164, 21546, 27177, 27183, 21550, 21555, 27187, - 21560, 21565, 27190, 27195, 27199, 21384, 27205, 8769, 27212, 27217, - 21570, 27221, 27226, 27231, 27236, 27240, 27245, 27250, 27256, 27261, - 27266, 27272, 27278, 27283, 27287, 27292, 27297, 27302, 27306, 27311, - 27316, 27321, 27327, 27333, 27339, 27344, 27348, 27353, 27357, 21574, - 21579, 21584, 27361, 27365, 21589, 21595, 21601, 21607, 27377, 18282, - 27381, 27385, 27390, 27395, 27399, 27409, 27414, 27419, 27423, 27427, - 27430, 27438, 21616, 1475, 27443, 27451, 27460, 27464, 27472, 27480, - 27496, 27501, 1739, 7688, 27505, 2509, 27517, 27518, 27526, 27533, 27538, - 27545, 1058, 6441, 27548, 27553, 27556, 27565, 1308, 27570, 27577, 27580, - 27585, 15917, 2207, 6642, 27589, 27595, 1210, 2032, 27604, 27613, 23287, - 6464, 3055, 1313, 27623, 27631, 27638, 27643, 27647, 27651, 16842, 6491, - 27659, 27668, 27677, 27685, 27692, 27697, 27710, 27723, 27735, 27747, - 27759, 27772, 27783, 27794, 27802, 27810, 27822, 27834, 27845, 27854, - 27862, 27869, 27881, 27888, 27897, 27904, 27914, 27919, 27925, 27930, - 27934, 27941, 27945, 27952, 27960, 2173, 27967, 27978, 27988, 27997, - 28005, 28015, 28023, 28033, 28039, 28050, 28060, 28069, 28078, 28088, - 28097, 1695, 37, 28102, 28113, 28124, 28134, 28141, 28147, 28152, 28156, - 28167, 28177, 28186, 28197, 10985, 10990, 28202, 28211, 28216, 28226, - 28231, 28239, 28247, 28254, 28260, 6526, 932, 28264, 28270, 28275, 28278, - 1858, 26401, 28286, 28290, 28293, 1502, 28299, 9035, 1318, 28304, 28317, - 28331, 2258, 28349, 28361, 2272, 28375, 28387, 28400, 28414, 28426, 2289, - 28440, 1324, 1330, 1336, 6595, 28445, 28450, 28455, 28459, 28474, 28489, - 28504, 28519, 28534, 28549, 28564, 28579, 28594, 28609, 28624, 28639, - 28654, 28669, 28684, 28699, 28714, 28729, 28744, 28759, 28774, 28789, - 28804, 28819, 28834, 28849, 28864, 28879, 28894, 28909, 28924, 28939, - 28954, 28969, 28984, 28999, 29014, 29029, 29044, 29059, 29074, 29089, - 29104, 29119, 29134, 29149, 29164, 29179, 29194, 29209, 29224, 29239, - 29254, 29269, 29284, 29299, 29314, 29329, 29344, 29359, 29374, 29389, - 29404, 29419, 29434, 29449, 29464, 29479, 29494, 29509, 29524, 29539, - 29554, 29569, 29584, 29599, 29614, 29629, 29644, 29659, 29674, 29689, - 29704, 29719, 29734, 29749, 29764, 29779, 29794, 29809, 29824, 29839, - 29854, 29869, 29884, 29899, 29914, 29929, 29944, 29959, 29974, 29989, - 30004, 30019, 30034, 30049, 30064, 30079, 30094, 30109, 30124, 30139, - 30154, 30169, 30184, 30199, 30214, 30229, 30244, 30259, 30274, 30289, - 30304, 30319, 30334, 30349, 30364, 30379, 30394, 30409, 30424, 30439, - 30454, 30469, 30484, 30499, 30514, 30529, 30544, 30559, 30574, 30589, - 30604, 30619, 30634, 30649, 30664, 30679, 30694, 30709, 30724, 30739, - 30754, 30769, 30784, 30799, 30814, 30829, 30844, 30859, 30874, 30889, - 30904, 30919, 30934, 30949, 30964, 30979, 30994, 31009, 31024, 31039, - 31054, 31069, 31084, 31099, 31114, 31129, 31144, 31159, 31174, 31189, - 31204, 31219, 31234, 31249, 31264, 31279, 31294, 31309, 31324, 31339, - 31354, 31369, 31384, 31399, 31414, 31429, 31444, 31459, 31474, 31489, - 31504, 31519, 31534, 31549, 31564, 31579, 31594, 31609, 31624, 31639, - 31654, 31669, 31684, 31699, 31714, 31729, 31744, 31759, 31774, 31789, - 31804, 31819, 31834, 31849, 31864, 31879, 31894, 31909, 31924, 31939, - 31954, 31969, 31984, 31999, 32014, 32029, 32044, 32059, 32074, 32089, - 32104, 32119, 32134, 32149, 32164, 32179, 32194, 32209, 32224, 32239, - 32254, 32269, 32284, 32299, 32314, 32329, 32344, 32359, 32374, 32389, - 32404, 32419, 32434, 32449, 32464, 32479, 32494, 32509, 32524, 32539, - 32554, 32569, 32584, 32599, 32614, 32629, 32644, 32659, 32674, 32689, - 32704, 32719, 32734, 32749, 32764, 32779, 32794, 32809, 32824, 32839, - 32854, 32869, 32884, 32899, 32914, 32929, 32944, 32959, 32974, 32989, - 33004, 33019, 33034, 33049, 33064, 33079, 33094, 33109, 33124, 33139, - 33154, 33169, 33184, 33199, 33214, 33229, 33244, 33259, 33274, 33289, - 33304, 33319, 33334, 33349, 33364, 33379, 33394, 33409, 33424, 33439, - 33454, 33469, 33484, 33499, 33514, 33529, 33544, 33559, 33574, 33589, - 33604, 33619, 33634, 33649, 33664, 33679, 33694, 33709, 33724, 33739, - 33754, 33769, 33784, 33799, 33814, 33829, 33844, 33859, 33874, 33889, - 33904, 33919, 33934, 33949, 33964, 33979, 33994, 34009, 34024, 34039, - 34054, 34069, 34084, 34099, 34114, 34129, 34144, 34159, 34174, 34189, - 34204, 34219, 34234, 34249, 34264, 34279, 34294, 34309, 34324, 34339, - 34354, 34369, 34384, 34399, 34414, 34429, 34444, 34459, 34474, 34489, - 34504, 34519, 34534, 34549, 34564, 34579, 34594, 34609, 34624, 34639, - 34654, 34669, 34684, 34699, 34714, 34729, 34744, 34759, 34774, 34789, - 34804, 34819, 34834, 34849, 34864, 34879, 34894, 34909, 34924, 34939, - 34954, 34969, 34984, 34999, 35014, 35029, 35044, 35059, 35074, 35089, - 35104, 35119, 35134, 35149, 35164, 35179, 35194, 35209, 35224, 35239, - 35254, 35269, 35284, 35299, 35314, 35329, 35344, 35359, 35374, 35389, - 35404, 35419, 35434, 35449, 35464, 35480, 35496, 35512, 35528, 35544, - 35560, 35576, 35592, 35608, 35624, 35640, 35656, 35672, 35688, 35704, - 35720, 35736, 35752, 35768, 35784, 35800, 35816, 35832, 35848, 35864, - 35880, 35896, 35912, 35928, 35944, 35960, 35976, 35992, 36008, 36024, - 36040, 36056, 36072, 36088, 36104, 36120, 36136, 36152, 36168, 36184, - 36200, 36216, 36232, 36248, 36264, 36280, 36296, 36312, 36328, 36344, - 36360, 36376, 36392, 36408, 36424, 36440, 36456, 36472, 36488, 36504, - 36520, 36536, 36552, 36568, 36584, 36600, 36616, 36632, 36648, 36664, - 36680, 36696, 36712, 36728, 36744, 36760, 36776, 36792, 36808, 36824, - 36840, 36856, 36872, 36888, 36904, 36920, 36936, 36952, 36968, 36984, - 37000, 37016, 37032, 37048, 37064, 37080, 37096, 37112, 37128, 37144, - 37160, 37176, 37192, 37208, 37224, 37240, 37256, 37272, 37288, 37304, - 37320, 37336, 37352, 37368, 37384, 37400, 37416, 37432, 37448, 37464, - 37480, 37496, 37512, 37528, 37544, 37560, 37576, 37592, 37608, 37624, - 37640, 37656, 37672, 37688, 37704, 37720, 37736, 37752, 37768, 37784, - 37800, 37816, 37832, 37848, 37864, 37880, 37896, 37912, 37928, 37944, - 37960, 37976, 37992, 38008, 38024, 38040, 38056, 38072, 38088, 38104, - 38120, 38136, 38152, 38168, 38184, 38200, 38216, 38232, 38248, 38264, - 38280, 38296, 38312, 38328, 38344, 38360, 38376, 38392, 38408, 38424, - 38440, 38456, 38472, 38488, 38504, 38520, 38536, 38552, 38568, 38584, - 38600, 38616, 38632, 38648, 38664, 38680, 38696, 38712, 38728, 38744, - 38760, 38776, 38792, 38808, 38824, 38840, 38856, 38872, 38888, 38904, - 38920, 38936, 38952, 38968, 38984, 39000, 39016, 39032, 39048, 39064, - 39080, 39096, 39112, 39128, 39144, 39160, 39176, 39192, 39208, 39224, - 39240, 39256, 39272, 39288, 39304, 39320, 39336, 39352, 39368, 39384, - 39400, 39416, 39432, 39448, 39464, 39480, 39496, 39512, 39528, 39544, - 39560, 39576, 39592, 39608, 39624, 39640, 39656, 39672, 39688, 39704, - 39720, 39736, 39752, 39768, 39784, 39800, 39816, 39832, 39848, 39864, - 39880, 39896, 39912, 39928, 39944, 39960, 39976, 39992, 40008, 40024, - 40040, 40056, 40072, 40088, 40104, 40120, 40136, 40152, 40168, 40184, - 40200, 40216, 40232, 40248, 40264, 40280, 40296, 40312, 40328, 40344, - 40360, 40376, 40392, 40408, 40424, 40440, 40456, 40472, 40488, 40504, - 40520, 40536, 40552, 40568, 40584, 40600, 40616, 40632, 40648, 40664, - 40680, 40696, 40712, 40728, 40744, 40760, 40776, 40792, 40808, 40824, - 40840, 40856, 40872, 40888, 40904, 40920, 40936, 40952, 40968, 40984, - 41000, 41016, 41032, 41048, 41064, 41080, 41096, 41112, 41128, 41144, - 41160, 41176, 41192, 41208, 41224, 41240, 41256, 41272, 41288, 41304, - 41320, 41336, 41352, 41368, 41384, 41400, 41416, 41432, 41448, 41464, - 41480, 41496, 41512, 41528, 41544, 41560, 41576, 41592, 41608, 41624, - 41640, 41656, 41672, 41688, 41704, 41720, 41736, 41752, 41768, 41784, - 41800, 41816, 41832, 41848, 41864, 41880, 41896, 41912, 41928, 41944, - 41960, 41976, 41992, 42008, 42024, 42040, 42056, 42072, 42088, 42104, - 42120, 42136, 42152, 42168, 42184, 42200, 42216, 42232, 42248, 42264, - 42280, 42296, 42312, 42328, 42344, 42360, 42376, 42392, 42408, 42424, - 42440, 42456, 42472, 42488, 42504, 42520, 42536, 42552, 42568, 42584, - 42600, 42616, 42632, 42648, 42664, 42680, 42696, 42712, 42728, 42744, - 42760, 42776, 42792, 42808, 42824, 42840, 42856, 42872, 42888, 42904, - 42920, 42936, 42952, 42968, 42984, 43000, 43016, 43032, 43048, 43064, - 43080, 43096, 43112, 43128, 43144, 43160, 43176, 43192, 43208, 43224, - 43240, 43256, 43272, 43288, 43304, 43320, 43336, 43352, 43368, 43384, - 43400, 43416, 43432, 43448, 43464, 43480, 43496, 43512, 43528, 43544, - 43560, 43576, 43592, 43608, 43624, 43640, 43656, 43672, 43688, 43704, - 43720, 43736, 43752, 43768, 43784, 43800, 43816, 43832, 43848, 43864, - 43880, 43896, 43912, 43928, 43944, 43960, 43976, 43992, 44008, 44024, - 44040, 44056, 44072, 44088, 44104, 44120, 44136, 44151, 44160, 44166, - 44172, 44182, 44190, 9688, 44203, 1510, 44211, 19294, 44217, 2211, 44222, - 44226, 44231, 44238, 44246, 40, 44250, 44256, 44261, 44266, 44270, 44275, - 44279, 44283, 6613, 44287, 44297, 44310, 44321, 44334, 44341, 44347, - 44352, 44358, 44364, 44370, 44375, 44380, 44385, 44390, 44394, 44399, - 44404, 44409, 44415, 44421, 44427, 44432, 44436, 44441, 44446, 44450, - 44455, 44460, 44465, 44469, 10588, 10599, 17405, 1553, 44473, 1558, - 44479, 44482, 1589, 44488, 1595, 1601, 6647, 44493, 44501, 44508, 44512, - 44518, 44523, 44528, 44535, 44540, 44544, 1606, 10690, 10701, 44553, - 44560, 44565, 44569, 1610, 44572, 44578, 44588, 44592, 1615, 26447, - 44597, 6755, 6761, 44603, 44615, 44632, 44649, 44666, 44683, 44700, - 44717, 44734, 44751, 44768, 44785, 44802, 44819, 44836, 44853, 44870, - 44887, 44904, 44921, 44938, 44955, 44972, 44989, 45006, 45023, 45040, - 45057, 45074, 45091, 45108, 45125, 45142, 45159, 45176, 45193, 45210, - 45227, 45244, 45261, 45278, 45295, 45312, 45329, 45346, 45363, 45380, - 45397, 45414, 45431, 45448, 45459, 1620, 45464, 45470, 5684, 1625, 19529, - 45475, 45486, 45496, 45503, 45509, 45514, 6777, 1630, 6782, 45518, 45523, - 45529, 45534, 45539, 45544, 45549, 45554, 45559, 45564, 45570, 45576, - 45582, 45587, 45591, 45596, 45601, 45605, 45610, 45615, 45620, 45624, - 45629, 45635, 45640, 45645, 45649, 45654, 45659, 45665, 45670, 45675, - 45681, 45687, 45692, 45696, 45701, 45706, 45711, 45715, 45720, 45725, - 45730, 45736, 45742, 45747, 45751, 45756, 45761, 45766, 45770, 45775, - 45780, 45786, 45791, 45796, 45800, 45805, 45810, 45816, 45821, 45826, - 45832, 45838, 45843, 45847, 45852, 45857, 45861, 45866, 45871, 45876, - 45882, 45888, 45893, 45897, 45902, 45907, 45911, 45916, 45921, 45926, - 45930, 45933, 21707, 45938, 10952, 10964, 6880, 45944, 6885, 45959, - 45964, 45976, 45988, 46000, 2324, 46012, 46017, 46021, 46027, 46033, - 1642, 863, 46038, 46043, 46047, 46051, 46055, 46060, 46064, 11029, 46069, - 46072, 1646, 46080, 6918, 1651, 46085, 46092, 46097, 46106, 46116, 46123, - 1656, 46130, 46135, 11098, 46139, 46144, 46151, 46155, 46165, 11120, - 5603, 5610, 1661, 46172, 46178, 46186, 46193, 46199, 46205, 46210, 3004, - 21288, 21297, 11160, 1666, 1670, 46218, 46229, 46234, 1673, 46242, 46247, - 46259, 46265, 46270, 1678, 46275, 46280, 46288, 46296, 46303, 46312, - 46320, 46329, 1683, 1688, 46333, 46340, 46348, 46354, 46359, 7047, 46368, - 46374, 46380, 46385, 46393, 7056, 7061, 46401, 46407, 3053, 26542, 46412, - 46418, 46423, 46431, 46438, 46443, 46447, 1699, 46453, 46456, 904, 46462, - 9, 46468, 46472, 46477, 46481, 46485, 46489, 46494, 46498, 46503, 46508, - 46512, 46515, 46519, 46524, 46528, 46533, 46537, 23555, 23560, 23565, - 46540, 46547, 46553, 26362, 46563, 23571, 23576, 21909, 21915, 23587, - 21921, 46568, 46573, 46577, 46581, 46584, 46588, 46591, 46596, 46600, - 46604, 46607, 46619, 22821, 46626, 10169, 696, 46629, 46633, 46638, - 46642, 8802, 46645, 46652, 46665, 46674, 46679, 46689, 46702, 46714, - 46721, 46726, 46739, 24440, 46757, 46762, 46769, 46775, 46780, 46788, - 19596, 520, 46794, 46800, 46806, 46811, 21926, 3474, 21931, 46815, 46825, - 46830, 46840, 46855, 46861, 46867, 21936, 21445, 46872, 46877, 46882, - 46887, 46892, 46896, 3515, 21957, 46900, 46906, 330, 46916, 46923, 46932, - 46938, 46946, 46950, 46954, 46958, 46962, 46967, 46971, 46977, 46985, - 46990, 46994, 46999, 47003, 47007, 47013, 47019, 47024, 47028, 21965, - 47033, 21971, 21977, 47038, 47044, 47049, 47053, 21462, 10912, 47056, - 47060, 47065, 47072, 47078, 47082, 47088, 47092, 47096, 47101, 47106, - 47110, 47113, 47118, 47125, 47132, 47138, 47143, 47148, 47152, 47157, - 47163, 47168, 47174, 47179, 47184, 47189, 47195, 47200, 47205, 47211, - 47217, 47223, 21982, 47228, 47233, 47238, 21993, 47243, 47248, 47253, - 47259, 47265, 21998, 47270, 47275, 47280, 22009, 22015, 47285, 47290, - 47295, 47300, 22020, 22025, 22029, 47305, 47276, 47309, 47315, 47323, - 47330, 47336, 47346, 47352, 47359, 6580, 22034, 47365, 47378, 47387, - 47393, 47402, 47408, 16625, 47415, 47422, 22010, 47432, 47439, 47444, - 47448, 47452, 3549, 47457, 47462, 47467, 23649, 23654, 47471, 23660, - 23665, 47476, 23670, 23676, 47481, 23681, 47492, 47495, 47507, 47515, - 22056, 47519, 47528, 47538, 47547, 22061, 47552, 47559, 47568, 47574, - 47582, 22604, 3367, 47587, 22070, 47593, 47599, 47606, 47611, 22075, - 47615, 47621, 47627, 47632, 47638, 47643, 709, 24255, 24631, 24637, - 47647, 47651, 47655, 47658, 47671, 47677, 47681, 47684, 47689, 23001, - 47693, 21467, 15233, 47699, 3495, 3503, 5506, 225, 47702, 47706, 47710, - 47714, 47718, 47721, 47725, 47730, 47734, 47739, 47743, 47747, 47751, - 47756, 47760, 47765, 47769, 47773, 47780, 9840, 47789, 47798, 17550, - 47802, 47808, 47816, 47822, 47834, 47838, 47843, 47849, 47859, 47869, - 47875, 47879, 47884, 47890, 47899, 47908, 47916, 10073, 47920, 47929, - 47937, 47948, 47959, 47968, 47972, 47982, 47988, 47993, 47999, 48004, - 21372, 48015, 18485, 48021, 48028, 48034, 48038, 48048, 48056, 48061, - 48065, 48073, 48079, 48089, 1025, 48092, 48095, 48099, 48105, 48112, - 48118, 48127, 48136, 48142, 48148, 48153, 48160, 48167, 48180, 48189, - 48198, 48203, 48207, 48214, 48221, 48228, 48235, 48242, 48247, 48251, - 48254, 48264, 48268, 48277, 48281, 48286, 48290, 48299, 48307, 48315, - 48320, 48324, 48329, 48334, 48338, 48344, 48356, 48364, 48374, 48381, - 48387, 48392, 48396, 48400, 48404, 48413, 48422, 48431, 48437, 48443, - 48449, 48454, 48461, 48467, 48475, 48482, 7836, 48488, 48494, 48498, - 9241, 48502, 48511, 48519, 48526, 48530, 48534, 48540, 48548, 48555, - 48561, 48572, 48576, 48580, 48584, 48587, 48593, 48598, 48602, 48606, - 48615, 48623, 48630, 16940, 26200, 48636, 48644, 48648, 48655, 48664, - 48672, 48678, 48683, 48687, 48692, 48696, 48701, 48710, 48714, 48721, - 48728, 48736, 48742, 48753, 48759, 48768, 48775, 48782, 48789, 48796, - 48803, 28634, 48810, 48815, 48821, 31711, 2542, 193, 25139, 48825, 48828, - 48833, 48311, 48837, 48847, 48854, 48863, 48873, 48883, 48891, 48895, - 48898, 48905, 48911, 48922, 48934, 48945, 48952, 1319, 16477, 48962, - 2240, 48966, 1100, 11441, 25600, 48974, 48987, 48991, 48996, 49001, 5072, - 49007, 49015, 7154, 49020, 49026, 1711, 6925, 605, 49035, 49044, 49054, - 19000, 49063, 49069, 11075, 49075, 49079, 11082, 7215, 49085, 46224, - 49092, 5691, 147, 9175, 49098, 49110, 49114, 49120, 19549, 49124, 7203, - 2315, 4, 49129, 49139, 49145, 49156, 49163, 49169, 49175, 49183, 49190, - 49200, 49210, 1331, 49219, 49225, 2331, 2337, 5069, 1960, 49229, 49238, - 49249, 49260, 49268, 49274, 49279, 49287, 49291, 49295, 19813, 49307, - 49317, 49323, 49329, 49339, 49342, 49353, 49363, 49372, 49379, 1102, - 2233, 49389, 49394, 49402, 49410, 49421, 49435, 9127, 342, 49445, 49454, - 49462, 49468, 49475, 49481, 49488, 49498, 49506, 3060, 197, 49514, 49525, - 49529, 49541, 19734, 119, 49547, 49552, 49556, 49563, 49569, 49577, - 49584, 5321, 49591, 49600, 3115, 49608, 11121, 49612, 2353, 378, 49617, - 49630, 49635, 31876, 540, 49639, 3121, 49647, 49653, 959, 49663, 49672, - 49677, 9704, 49681, 49684, 3070, 16608, 49692, 49699, 16646, 49703, - 49710, 49716, 49721, 9718, 49726, 49738, 49744, 49752, 2365, 1743, 49760, - 49762, 49767, 49772, 49776, 49780, 49785, 49789, 49794, 49799, 49805, - 49810, 49814, 49818, 49821, 49823, 49827, 49830, 49835, 49839, 49843, - 49847, 49851, 49860, 22216, 49863, 22221, 22226, 49870, 49879, 22232, - 49884, 22237, 49893, 49898, 7327, 49902, 49907, 49912, 49916, 49920, - 49924, 49928, 49931, 49935, 5013, 49941, 49946, 49950, 2981, 49953, - 49955, 49959, 49962, 49967, 49971, 49977, 49990, 49996, 50000, 50008, - 50015, 50023, 50032, 50040, 22242, 50047, 50057, 50066, 50079, 50084, - 50089, 50095, 50102, 50113, 50125, 50132, 50141, 50150, 50159, 50166, - 50172, 50179, 50187, 50194, 50202, 50211, 50219, 50226, 50234, 50243, - 50251, 50260, 50270, 50279, 50287, 50294, 50302, 50311, 50319, 50328, - 50338, 50347, 50355, 50364, 50374, 50383, 50393, 50404, 50414, 50423, - 50431, 50438, 50446, 50455, 50463, 50472, 50482, 50491, 50499, 50508, - 50518, 50527, 50537, 50548, 50558, 50567, 50575, 50584, 50594, 50603, - 50613, 50624, 50634, 50643, 50653, 50664, 50674, 50685, 50697, 50708, - 50718, 50727, 50735, 50742, 50750, 50759, 50767, 50776, 50786, 50795, - 50803, 50812, 50822, 50831, 50841, 50852, 50862, 50871, 50879, 50888, - 50898, 50907, 50917, 50928, 50938, 50947, 50957, 50968, 50978, 50989, - 51001, 51012, 51022, 51031, 51039, 51048, 51058, 51067, 51077, 51088, - 51098, 51107, 51117, 51128, 51138, 51149, 51161, 51172, 51182, 51191, - 51201, 51212, 51222, 51233, 51245, 51256, 51266, 51277, 51289, 51300, - 51312, 51325, 51337, 51348, 51358, 51367, 51375, 51382, 51390, 51399, - 51407, 51416, 51426, 51435, 51443, 51452, 51462, 51471, 51481, 51492, - 51502, 51511, 51519, 51528, 51538, 51547, 51557, 51568, 51578, 51587, - 51597, 51608, 51618, 51629, 51641, 51652, 51662, 51671, 51679, 51688, - 51698, 51707, 51717, 51728, 51738, 51747, 51757, 51768, 51778, 51789, - 51801, 51812, 51822, 51831, 51841, 51852, 51862, 51873, 51885, 51896, - 51906, 51917, 51929, 51940, 51952, 51965, 51977, 51988, 51998, 52007, - 52015, 52024, 52034, 52043, 52053, 52064, 52074, 52083, 52093, 52104, - 52114, 52125, 52137, 52148, 52158, 52167, 52177, 52188, 52198, 52209, - 52221, 52232, 52242, 52253, 52265, 52276, 52288, 52301, 52313, 52324, - 52334, 52343, 52353, 52364, 52374, 52385, 52397, 52408, 52418, 52429, - 52441, 52452, 52464, 52477, 52489, 52500, 52510, 52521, 52533, 52544, - 52556, 52569, 52581, 52592, 52604, 52617, 52629, 52642, 52656, 52669, - 52681, 52692, 52702, 52711, 52719, 52726, 52731, 4871, 52738, 22252, - 52743, 52748, 22257, 52754, 15012, 52759, 52763, 52769, 52775, 52782, - 52787, 52791, 52795, 52804, 52810, 52822, 52833, 52837, 2592, 4846, - 52842, 52845, 52847, 52851, 52855, 52859, 28446, 52864, 52868, 52871, - 52876, 52880, 52887, 52893, 52897, 22267, 52901, 52908, 52917, 52925, - 52936, 52944, 52952, 52959, 52966, 52972, 52983, 22272, 52988, 52999, - 53011, 53022, 53030, 2206, 53035, 53048, 53052, 53060, 11601, 53071, - 53077, 53084, 53092, 53098, 22277, 53103, 6118, 44186, 53110, 53113, - 53121, 53134, 53147, 53160, 53173, 53180, 53191, 53200, 28451, 28456, - 53205, 53213, 53220, 53229, 53237, 53243, 53252, 53260, 53268, 53272, - 53281, 53290, 53300, 53313, 53326, 53336, 22282, 53342, 53349, 53355, - 22288, 53360, 53363, 53367, 53375, 53384, 28189, 53392, 53400, 53407, - 53415, 53425, 53434, 53443, 53452, 53460, 53471, 5724, 15434, 53480, - 53485, 53489, 53493, 53498, 53504, 53509, 53514, 53520, 53525, 53530, - 15399, 53535, 53542, 53550, 53555, 53562, 53566, 53570, 53578, 53586, - 22297, 53592, 53598, 53610, 53616, 53621, 53632, 53642, 53652, 53664, - 53670, 53680, 22302, 53689, 53698, 53704, 53716, 53727, 53734, 53739, - 53747, 53753, 53758, 53763, 53770, 53782, 53792, 53801, 53808, 23230, - 16814, 53814, 53819, 53823, 53827, 53832, 53838, 53849, 53862, 53867, - 22307, 53872, 53884, 53893, 53906, 53913, 53922, 53930, 53935, 53941, - 1147, 53946, 53951, 53956, 53961, 53967, 53972, 53977, 53983, 53989, - 53994, 53998, 54003, 54008, 54013, 44549, 54018, 54023, 54028, 54033, - 54039, 54045, 54050, 54054, 54059, 54064, 54069, 54074, 54079, 54083, - 54089, 54094, 54103, 54108, 54113, 54118, 54123, 54127, 54134, 54140, - 11311, 32176, 54145, 54095, 54147, 22316, 54150, 54159, 54165, 3561, - 22321, 54169, 54175, 54181, 54186, 54190, 54197, 54202, 54212, 54221, - 54225, 54231, 54237, 54243, 54247, 54255, 54262, 54270, 54278, 22326, - 54285, 54288, 54295, 54300, 54304, 54310, 54315, 54319, 54328, 54336, - 54342, 54347, 22837, 54354, 54360, 54365, 54371, 54378, 22047, 19317, - 54384, 54389, 54395, 54407, 54128, 54135, 54417, 54422, 54429, 54436, - 54442, 54453, 54458, 5523, 54466, 54469, 54475, 54479, 54483, 54486, - 54492, 46981, 3581, 761, 8644, 115, 54499, 54503, 54507, 54512, 54520, - 54524, 54532, 54536, 54549, 54553, 54556, 54561, 54565, 54570, 54574, - 54582, 54586, 15017, 54591, 54595, 54599, 54602, 54610, 54615, 54622, - 54628, 54634, 54639, 54647, 48979, 54654, 54659, 54664, 54668, 54672, - 54677, 54682, 54686, 54689, 54695, 54699, 54709, 54718, 54721, 54734, - 54742, 54750, 54760, 54773, 54780, 54791, 54797, 54802, 54807, 54813, - 54822, 53874, 54830, 54836, 54844, 54848, 54852, 54858, 54866, 54878, - 54890, 54897, 54901, 54912, 54920, 54927, 54939, 54947, 54955, 54962, - 54968, 54978, 54987, 54992, 55002, 55006, 55010, 55017, 55029, 55041, - 55050, 53038, 55057, 55068, 55082, 55090, 55100, 55107, 55115, 55124, - 55132, 55142, 55151, 55162, 55174, 55183, 55193, 55200, 55209, 55224, - 55233, 55246, 55261, 55265, 55277, 55288, 55299, 55310, 55320, 55331, - 55339, 55345, 55355, 55361, 55366, 55372, 55378, 55383, 55390, 5995, - 11621, 55396, 55401, 55408, 55414, 55419, 55423, 55426, 55429, 55431, - 55438, 55449, 55454, 55458, 55464, 55472, 49355, 49365, 55478, 55488, - 55495, 55501, 55506, 55515, 55522, 55530, 55539, 55545, 55551, 55558, - 55565, 55570, 55574, 55579, 55584, 55589, 55593, 54544, 55602, 55606, - 55617, 55627, 11630, 55638, 55646, 11642, 55653, 19227, 55657, 55661, - 55666, 9500, 55678, 55683, 55688, 55693, 55697, 55700, 55705, 55710, - 55716, 55721, 3373, 15068, 55726, 55731, 55737, 55744, 55749, 55754, - 55760, 55766, 55772, 55777, 55783, 55787, 55801, 55809, 55817, 55823, - 55828, 55835, 55840, 55845, 55853, 55858, 55864, 55869, 55874, 55878, - 55881, 55899, 55918, 55931, 55945, 55961, 55968, 55975, 55981, 55988, - 55993, 55999, 56005, 56010, 56026, 10350, 56040, 56047, 56051, 56054, - 56059, 56064, 56071, 56076, 56081, 56086, 7399, 56090, 56095, 56101, - 7410, 56106, 56109, 56114, 56124, 56133, 56138, 56146, 56153, 56164, - 56174, 56179, 56184, 56191, 56197, 56202, 56209, 56218, 56226, 56232, - 56238, 56242, 11173, 2566, 56247, 56251, 56257, 56264, 56268, 56289, - 56311, 56327, 56344, 56363, 56372, 56382, 56389, 56396, 19154, 56402, - 56406, 56414, 56420, 56428, 56432, 56440, 56447, 56451, 56457, 2896, - 28651, 56463, 56467, 56471, 56475, 56480, 56485, 56490, 56496, 56501, - 56507, 56512, 56517, 56521, 56526, 28666, 56530, 56535, 56543, 56547, - 56552, 56559, 56568, 56574, 56581, 56585, 56594, 56599, 56607, 56616, - 56622, 56627, 56632, 56638, 56644, 56649, 56653, 56661, 56671, 56676, - 26557, 56684, 56696, 56700, 56712, 56719, 56725, 56732, 56744, 56751, - 56757, 15112, 56761, 56767, 56773, 56778, 56783, 4382, 56788, 56796, - 56805, 56809, 56522, 20980, 56814, 56816, 56828, 56833, 5036, 49, 56838, - 56843, 22331, 22336, 22341, 22347, 22352, 56847, 22357, 56869, 56871, - 56875, 56879, 56884, 56888, 22361, 56892, 22366, 56900, 56903, 22371, - 15506, 56912, 56916, 1429, 56921, 22382, 56924, 56929, 18123, 18133, - 56934, 56938, 56943, 56949, 56954, 56963, 56968, 56975, 56981, 56986, - 56991, 56996, 57004, 22387, 1010, 57011, 57017, 57022, 57027, 57032, - 57038, 57043, 57050, 57056, 57061, 57069, 57075, 11652, 57082, 24453, - 57095, 57100, 57106, 57119, 57123, 57132, 57139, 57145, 57153, 57160, - 57166, 22391, 57169, 57176, 57182, 57186, 57189, 57197, 57211, 57218, - 22396, 57224, 22401, 57231, 23655, 57241, 57246, 57250, 57255, 57260, - 57265, 22406, 47446, 57269, 57274, 57280, 57286, 57293, 57299, 57304, - 57309, 57318, 57330, 57345, 22626, 57351, 10862, 22410, 57355, 57362, - 22415, 57368, 57377, 57384, 57393, 57399, 57404, 57410, 22420, 57415, - 57424, 57433, 57440, 57446, 57452, 57460, 57464, 22425, 57467, 22431, - 22437, 57472, 57480, 57490, 22442, 57494, 57496, 57500, 57505, 57509, - 57513, 57519, 57524, 57528, 2571, 57532, 57539, 57543, 57552, 57560, - 57567, 57572, 57577, 57581, 57585, 57588, 57594, 57602, 57608, 57612, - 57617, 57624, 57630, 47477, 57635, 57638, 57643, 57647, 57652, 57657, - 57661, 57669, 18142, 18151, 57675, 57681, 57686, 57690, 57693, 57703, - 57708, 57714, 57720, 57728, 57733, 23671, 57737, 57745, 57750, 57755, - 44233, 23677, 57761, 57766, 57770, 57775, 57780, 57785, 57789, 57794, - 57799, 57805, 57810, 57815, 57821, 57827, 57832, 57836, 57841, 57846, - 57851, 57855, 57860, 57865, 57870, 57876, 57882, 57888, 57893, 57897, - 57902, 57907, 57911, 57916, 57921, 57926, 57930, 22446, 57938, 57946, - 15838, 57957, 57963, 57970, 57975, 57979, 57984, 57992, 58000, 58007, - 49104, 58013, 58021, 58028, 58039, 58045, 22456, 58048, 58055, 26671, - 58059, 58064, 58069, 5453, 58073, 58081, 58088, 58095, 58101, 58115, - 58121, 58125, 58128, 58136, 58143, 58148, 58155, 58160, 58165, 58168, - 58175, 58179, 58189, 58199, 58208, 58219, 58224, 58228, 58236, 22461, - 27082, 58240, 58245, 58250, 58255, 58260, 58265, 58270, 58274, 58279, - 58284, 58289, 58294, 58299, 58304, 58308, 58313, 58318, 58322, 58326, - 58330, 58334, 58339, 58344, 58348, 58353, 58357, 58361, 58366, 58371, - 58376, 58381, 58385, 58390, 58395, 58399, 58404, 58409, 58414, 58419, - 58424, 58429, 58434, 58439, 58444, 58449, 58454, 58459, 58464, 58469, - 58474, 58479, 58484, 58489, 58494, 58499, 58503, 58508, 58513, 58518, - 58523, 58528, 58533, 58538, 58543, 58548, 58553, 58558, 58562, 58567, - 58571, 58576, 58581, 58586, 58591, 58596, 58601, 58606, 58611, 58616, - 58620, 58624, 58629, 58634, 58638, 58643, 58648, 58652, 58657, 58662, - 58667, 58672, 58676, 58681, 58686, 58690, 58695, 58699, 58703, 58707, - 58711, 58716, 58720, 58724, 58728, 58732, 58736, 58740, 58744, 58748, - 58752, 58757, 58762, 58767, 58772, 58777, 58782, 58787, 58792, 58797, - 58802, 58806, 58810, 58814, 58818, 58822, 58826, 58831, 58835, 58840, - 58844, 58849, 58854, 58858, 58862, 58867, 58871, 58875, 58879, 58883, - 58887, 58891, 58895, 58899, 58903, 58907, 58911, 58915, 58919, 58923, - 58928, 58933, 58937, 58941, 58945, 58949, 58953, 58957, 58962, 58966, - 58970, 58974, 58978, 58982, 58986, 58991, 58995, 59000, 59004, 59008, - 59012, 59016, 59020, 59024, 59028, 59032, 59036, 59040, 59044, 59049, - 59053, 59057, 59061, 59065, 59069, 59073, 59077, 59081, 59085, 59089, - 59093, 59098, 59102, 59106, 59111, 59116, 59120, 59124, 59128, 59132, - 59136, 59140, 59144, 59148, 59152, 59156, 59160, 59164, 59168, 59172, - 59176, 59180, 1511, 59184, 1749, 59188, 59192, 2383, 59196, 1398, 59201, - 1364, 59205, 59209, 59216, 59230, 2399, 4457, 59239, 59247, 59254, 59261, - 59274, 59287, 59298, 59303, 59310, 59322, 3172, 7467, 59326, 59331, - 59340, 59350, 59355, 59359, 59364, 1369, 9554, 59374, 59380, 59394, - 59406, 59415, 59424, 59433, 59441, 59452, 59460, 3211, 59470, 59479, - 59486, 24085, 59491, 2427, 8373, 59495, 59502, 5409, 59511, 2432, 22067, - 59517, 59524, 59530, 59537, 59543, 59550, 59560, 59569, 59580, 59587, - 59593, 59603, 59611, 59617, 59632, 59638, 59643, 59650, 59653, 59659, - 59666, 59672, 59681, 59689, 59695, 59704, 28191, 59718, 59723, 9582, - 59729, 59738, 59746, 59753, 59757, 59761, 59764, 59771, 59779, 59787, - 9511, 59796, 59801, 59805, 59817, 59826, 59836, 2448, 59845, 59851, - 59864, 59876, 59886, 59895, 59907, 59915, 59924, 59935, 59946, 59956, - 59966, 59975, 59983, 7136, 59990, 59994, 59999, 60004, 60010, 1374, 7515, - 60017, 60028, 60037, 60045, 60054, 60070, 60081, 60097, 60107, 60128, - 60141, 60146, 60152, 18788, 60158, 60161, 60168, 4983, 60178, 60183, - 60188, 60196, 6043, 6052, 60204, 2456, 2461, 6742, 60215, 60222, 60229, - 1953, 101, 60242, 60247, 60257, 60263, 60267, 60272, 60276, 2478, 60288, - 60296, 60307, 60318, 60327, 60332, 60338, 60343, 60353, 60363, 60368, - 60374, 60379, 60388, 15321, 60392, 3273, 12, 60397, 60404, 710, 60410, - 60415, 46381, 60420, 60425, 60431, 60439, 60444, 60451, 60457, 25559, - 60463, 2482, 32, 60473, 60486, 60494, 60499, 60505, 2504, 21432, 60510, - 60518, 60525, 44475, 47127, 60534, 1694, 1798, 60539, 60544, 60551, 1802, - 210, 60558, 60564, 60569, 60576, 1806, 60581, 60586, 3548, 60598, 1813, - 60604, 60609, 60616, 60631, 60638, 60646, 60658, 60663, 60674, 60683, - 2122, 60694, 60696, 2591, 5729, 60704, 60709, 60713, 60722, 60728, 2561, - 11328, 60732, 60745, 60763, 60768, 60776, 60784, 60794, 60806, 60819, - 60826, 60842, 60849, 60855, 877, 60862, 60869, 60879, 60888, 60900, - 29055, 60908, 2575, 1186, 60911, 60919, 60923, 2579, 60927, 60931, 60935, - 2585, 60939, 1379, 10460, 7696, 59775, 2606, 60949, 60952, 60958, 60964, - 60971, 60976, 60981, 1992, +static unsigned int lexicon_offset[] = { + 0, 0, 6, 10, 15, 23, 27, 34, 39, 41, 44, 52, 62, 68, 81, 93, 102, 108, + 113, 121, 130, 135, 139, 145, 150, 158, 161, 168, 173, 181, 186, 192, + 200, 207, 217, 224, 227, 236, 239, 242, 247, 253, 262, 266, 273, 280, + 285, 294, 136, 302, 303, 309, 315, 323, 329, 335, 340, 346, 352, 360, + 367, 369, 372, 376, 383, 390, 396, 403, 408, 410, 418, 421, 426, 307, + 428, 430, 436, 441, 450, 455, 460, 470, 474, 487, 491, 496, 505, 508, + 514, 518, 526, 536, 544, 551, 560, 568, 576, 581, 589, 600, 604, 611, + 614, 620, 624, 628, 629, 634, 638, 640, 643, 652, 322, 655, 659, 664, + 672, 676, 678, 681, 687, 694, 701, 710, 719, 722, 732, 741, 750, 756, + 762, 769, 772, 780, 788, 792, 796, 804, 813, 822, 827, 831, 686, 838, + 846, 850, 854, 857, 862, 867, 871, 879, 794, 609, 882, 887, 225, 890, + 895, 905, 914, 920, 927, 934, 942, 946, 954, 960, 967, 973, 979, 984, + 988, 994, 1007, 1012, 1015, 1020, 22, 1024, 1027, 1037, 1042, 1046, 1055, + 1058, 1064, 1074, 1077, 111, 1081, 1086, 1092, 1096, 1101, 1107, 1112, + 1115, 1122, 1124, 1126, 1134, 1144, 1147, 1150, 1157, 1165, 338, 1167, + 1170, 1175, 1183, 1192, 1195, 1204, 1210, 1216, 1218, 1223, 1228, 1234, + 1239, 1244, 1248, 1253, 1259, 1264, 1269, 1273, 1278, 1283, 1287, 1292, + 1297, 1302, 1308, 1314, 1320, 1325, 1329, 1334, 1339, 1344, 1348, 1353, + 1358, 1363, 1368, 1219, 1224, 1229, 1235, 1240, 1372, 1245, 1378, 1387, + 1249, 1391, 1254, 1260, 1265, 1395, 1400, 1405, 1409, 1413, 1419, 1423, + 1270, 1426, 1430, 1274, 1436, 1279, 1440, 1444, 1284, 1448, 1453, 1457, + 1460, 1464, 1288, 1293, 1469, 1298, 1475, 1481, 1487, 1493, 1303, 1315, + 1321, 1497, 1501, 1505, 1508, 1326, 1512, 1514, 1519, 1524, 1530, 1535, + 1540, 1544, 1549, 1554, 1559, 1564, 1570, 1575, 1580, 1586, 1592, 1597, + 1601, 1606, 1611, 1616, 1621, 1625, 1633, 1637, 1642, 1647, 1652, 1657, + 1661, 1664, 1669, 1674, 1679, 1684, 1690, 1695, 1699, 1330, 1702, 1707, + 1712, 1335, 1716, 1720, 1727, 1340, 1734, 1345, 1738, 1740, 1745, 1751, + 1349, 1756, 1765, 1354, 1770, 1776, 1359, 1781, 1786, 1789, 1794, 1798, + 1802, 1806, 1809, 1813, 1364, 1369, 1040, 1818, 1824, 1830, 1836, 1842, + 1848, 1854, 1860, 1866, 1871, 1877, 1883, 1889, 1895, 1901, 1907, 1913, + 1919, 1925, 1930, 1935, 1940, 1945, 1950, 1955, 1960, 1965, 1970, 1975, + 1981, 1986, 1992, 1997, 2003, 2009, 2014, 2020, 2026, 2032, 2038, 2043, + 2048, 2050, 2051, 2055, 2059, 2064, 2068, 2072, 2076, 2080, 2083, 2088, + 2092, 2097, 2101, 2105, 2110, 2114, 2117, 2121, 2135, 2139, 2143, 2146, + 2151, 2155, 2159, 2163, 2168, 2173, 2178, 2182, 2187, 2191, 2196, 2203, + 2209, 2214, 2219, 2224, 2230, 2235, 2241, 2246, 2249, 1236, 2251, 2258, + 2266, 2276, 2285, 2299, 2303, 2307, 2320, 2328, 2332, 2337, 2341, 2345, + 2349, 2354, 2359, 2364, 2368, 2371, 2375, 2382, 2389, 2395, 2400, 2405, + 2411, 2417, 2422, 2425, 1742, 2427, 2433, 2437, 2442, 2446, 2450, 1747, + 1753, 2455, 2459, 2462, 2467, 2472, 2477, 2481, 2488, 2493, 2496, 2503, + 2509, 2513, 2517, 2521, 2527, 2533, 2547, 2564, 2579, 2594, 2603, 2608, + 2612, 2617, 2622, 2626, 2638, 2645, 2651, 2199, 2657, 2664, 2670, 2673, + 2680, 2684, 2688, 2692, 2073, 2696, 2701, 2706, 2710, 2718, 2722, 2726, + 2730, 2735, 2740, 2745, 2749, 2754, 2759, 2763, 2768, 2772, 2775, 2779, + 2783, 2788, 2792, 2796, 2802, 2811, 2815, 2819, 2825, 2830, 2837, 2841, + 2851, 2855, 2860, 2864, 2869, 2875, 2880, 2884, 2385, 2888, 2893, 2899, + 2904, 2908, 2913, 2918, 2922, 2928, 2933, 2939, 2943, 2949, 2954, 2959, + 2964, 2969, 2974, 2979, 2984, 2989, 2994, 3000, 3005, 1246, 80, 3011, + 3015, 3019, 3023, 3028, 3032, 3036, 3040, 3044, 3049, 3053, 3058, 3062, + 3065, 3069, 3074, 3078, 3083, 3087, 3091, 3095, 3100, 3104, 3107, 3120, + 3124, 3128, 3132, 3136, 3140, 3143, 3147, 3151, 3156, 3160, 3165, 3170, + 3175, 3179, 3182, 3185, 3191, 3195, 3199, 3202, 3206, 3210, 3213, 3219, + 3224, 3229, 3235, 3240, 3245, 3251, 3257, 3262, 3267, 3272, 1044, 507, + 3277, 3280, 3285, 3289, 3292, 3297, 3302, 3306, 3311, 3315, 3320, 3324, + 3328, 3331, 3337, 3344, 3350, 3355, 3359, 3364, 3368, 3378, 3382, 3386, + 3391, 3396, 3406, 2084, 3411, 3415, 3418, 3424, 3431, 3435, 621, 720, + 3439, 3446, 3453, 3459, 3464, 3470, 3475, 2093, 3479, 3487, 555, 3493, + 3504, 3508, 3518, 2098, 3524, 3529, 3544, 3550, 3557, 3567, 3573, 3578, + 3584, 3587, 3591, 3598, 3603, 3607, 3611, 3615, 3619, 3624, 3630, 3070, + 3635, 3647, 1546, 3654, 3657, 3661, 3664, 3668, 3682, 3686, 3689, 3693, + 3698, 3702, 3706, 3712, 3718, 3723, 3729, 3733, 3741, 3751, 3757, 3762, + 3771, 3779, 3786, 3790, 3799, 3803, 3808, 3813, 3817, 3825, 3829, 3834, + 3838, 2106, 1388, 3844, 3849, 3855, 3860, 3865, 3870, 3875, 3880, 3885, + 3891, 3896, 3902, 3907, 3912, 3917, 3923, 3928, 3933, 3938, 3943, 3949, + 3954, 3960, 3965, 3970, 3975, 3980, 3985, 3990, 3996, 4001, 4006, 344, + 440, 4011, 4017, 4021, 4025, 4030, 4034, 4038, 4041, 4045, 4049, 4053, + 4058, 4062, 4066, 3841, 4072, 4079, 4083, 4096, 4100, 4104, 4108, 4112, + 4116, 4122, 4129, 4133, 4141, 4150, 4156, 4161, 4164, 4168, 4172, 4182, + 4192, 4200, 4207, 4214, 4220, 4226, 4233, 4237, 4242, 4246, 4254, 4259, + 4267, 4272, 4277, 4281, 4286, 4293, 4296, 4300, 4304, 4307, 4313, 4319, + 4323, 4334, 4344, 4359, 4374, 4389, 4404, 4419, 4434, 4449, 4464, 4479, + 4494, 4509, 4524, 4539, 4554, 4569, 4584, 4599, 4614, 4629, 4644, 4659, + 4674, 4689, 4704, 4719, 4734, 4749, 4764, 4779, 4794, 4809, 4824, 4839, + 4854, 4869, 4884, 4899, 4914, 4929, 4944, 4959, 4974, 4989, 5004, 5019, + 5034, 5049, 5064, 5079, 5088, 5097, 5102, 5108, 5112, 5117, 5121, 5124, + 5128, 2846, 5131, 5136, 306, 424, 5142, 5150, 5154, 5158, 5161, 5167, + 5171, 5179, 5185, 5190, 5197, 5204, 5210, 5215, 5222, 5228, 5232, 5237, + 5249, 5260, 5267, 5273, 3092, 5277, 5283, 5288, 5293, 5298, 5304, 5309, + 5314, 5319, 5324, 5330, 5335, 5340, 5346, 5351, 5357, 5362, 5368, 5373, + 5379, 5384, 5389, 5394, 5399, 5404, 5410, 5415, 5420, 5425, 5431, 5437, + 5443, 5449, 5455, 5461, 5467, 5473, 5479, 5485, 5491, 5497, 5502, 5507, + 5512, 5517, 5522, 5527, 5532, 5537, 5543, 5549, 5554, 5560, 5566, 5572, + 5577, 5582, 5587, 5592, 5598, 5604, 5609, 5614, 5619, 5624, 5629, 5635, + 5640, 5646, 5652, 5658, 5664, 5670, 5676, 5682, 5688, 5694, 5160, 5699, + 5703, 5707, 5710, 5717, 5720, 5728, 5733, 5738, 5729, 5743, 5730, 5747, + 5753, 5759, 5764, 5769, 5776, 5781, 5785, 5788, 5792, 2140, 516, 5796, + 5800, 5805, 5811, 5816, 5820, 5823, 5827, 5832, 5836, 5843, 5847, 5851, + 5855, 884, 699, 5858, 5866, 5873, 5880, 5886, 5893, 5901, 5908, 5915, + 5920, 5932, 1266, 1396, 1401, 5943, 1406, 5947, 5951, 5960, 5969, 5975, + 5980, 5984, 5990, 5995, 6002, 6006, 6015, 6024, 6033, 6042, 6047, 6052, + 6064, 6069, 3312, 6073, 6075, 6080, 6084, 6093, 6101, 1410, 825, 3316, + 3321, 6107, 6111, 6120, 6126, 6131, 6134, 6143, 2591, 6149, 6157, 6161, + 6165, 3325, 6169, 6174, 6181, 6187, 6193, 6196, 6198, 6201, 6209, 6217, + 6225, 6228, 6233, 5740, 6236, 6238, 6243, 6248, 6253, 6258, 6263, 6268, + 6273, 6278, 6283, 6288, 6294, 6299, 6304, 6309, 6315, 6320, 6325, 6330, + 6335, 6340, 6345, 6351, 6356, 6361, 6366, 6371, 6376, 6381, 6386, 6391, + 6396, 6401, 6406, 6411, 6416, 6421, 6426, 6431, 6436, 6442, 6448, 6453, + 6458, 6463, 6468, 6473, 2197, 2204, 2210, 6478, 6484, 2236, 2242, 6492, + 6496, 6501, 6505, 6509, 6513, 6518, 6522, 6527, 6531, 6534, 6537, 6543, + 6549, 6555, 6561, 6567, 6573, 6579, 6583, 6587, 6591, 6595, 6599, 6604, + 6611, 6619, 6629, 6634, 6638, 6649, 6662, 6673, 6686, 6697, 6709, 6721, + 6733, 6746, 6759, 6766, 6772, 6779, 6785, 6789, 6794, 6798, 6805, 6813, + 6817, 6823, 6833, 6837, 6842, 6847, 6854, 6860, 5888, 6870, 6874, 6881, + 698, 6885, 6889, 6894, 6899, 6904, 6908, 6914, 6922, 6926, 6936, 6940, + 6946, 6951, 6955, 2132, 6961, 6969, 6978, 6982, 6988, 6993, 6998, 7003, + 7009, 7014, 3708, 7019, 7023, 7029, 7035, 7040, 7045, 7050, 6983, 7056, + 7060, 7067, 7073, 7078, 7082, 7087, 7091, 7100, 6177, 6184, 7105, 2732, + 7109, 7114, 7119, 6989, 7123, 6994, 6999, 7128, 7135, 7142, 7148, 7154, + 7160, 7165, 7170, 7175, 7004, 7010, 7181, 7187, 7192, 7200, 7015, 7205, + 1079, 7208, 7216, 7222, 7228, 7237, 7242, 7248, 7263, 7280, 7299, 7308, + 7316, 7331, 7341, 7351, 7357, 7369, 7378, 7386, 7393, 7400, 7406, 7411, + 7419, 7429, 7436, 7446, 7456, 7466, 7475, 7485, 7499, 7514, 7523, 7531, + 7536, 7540, 7549, 7559, 7569, 7579, 7584, 7588, 7597, 7607, 7618, 7631, + 7644, 7656, 7664, 7669, 7675, 7678, 7682, 7690, 7695, 7699, 7707, 7716, + 7724, 7731, 7742, 7746, 7749, 7755, 7759, 7765, 7772, 7777, 7784, 7791, + 7798, 7805, 7812, 7819, 7824, 7276, 7829, 7836, 7845, 7849, 7861, 7865, + 7868, 7872, 7876, 7880, 7884, 7890, 7895, 7901, 7906, 7911, 7917, 7922, + 7927, 6850, 7932, 7936, 7940, 7944, 7949, 7954, 7960, 7964, 7971, 7976, + 7984, 7988, 7991, 7997, 8004, 8008, 8011, 8016, 8020, 3736, 8026, 8034, + 8040, 6865, 8045, 8051, 8056, 8060, 8063, 8078, 8097, 8109, 8122, 8135, + 8148, 8162, 8175, 8190, 8197, 8203, 8207, 8212, 8218, 8226, 8231, 6011, + 8236, 8239, 8244, 8248, 2737, 877, 8254, 8258, 8264, 8270, 8275, 8281, + 8286, 7024, 8292, 8298, 8303, 8308, 8316, 8322, 8335, 8343, 8350, 8354, + 8362, 8369, 8381, 8391, 8398, 8405, 8414, 8423, 8431, 8436, 8442, 7030, + 8447, 8453, 7036, 8458, 8461, 8468, 8474, 8487, 8498, 8505, 8511, 8520, + 8528, 8535, 8541, 8547, 8552, 8556, 8561, 8070, 8567, 7041, 8574, 8579, + 8586, 8592, 8598, 8603, 8611, 8619, 8626, 8630, 8644, 8654, 8659, 8663, + 8674, 8680, 8685, 8690, 8694, 7046, 8699, 8702, 8707, 8719, 8726, 8731, + 8735, 8740, 8744, 8751, 8757, 7051, 6984, 8764, 2742, 8, 8771, 8776, + 8780, 8786, 8797, 8807, 8816, 8828, 8833, 8837, 8845, 8859, 8863, 8866, + 8874, 8881, 8889, 8893, 8904, 8908, 8915, 8920, 8924, 8930, 8935, 8939, + 8944, 8948, 8951, 8957, 8962, 8968, 8975, 8985, 8994, 9001, 7061, 7068, + 7074, 7079, 9007, 7083, 9013, 9016, 9023, 9038, 9054, 9069, 970, 406, + 9074, 9082, 9089, 9095, 9100, 9105, 7092, 9107, 9111, 9115, 9125, 9130, + 9134, 9143, 9147, 9150, 9157, 9161, 9164, 9172, 9179, 9187, 9191, 9198, + 9202, 9208, 9212, 9216, 9220, 9226, 9230, 9234, 9241, 9245, 9250, 9254, + 9261, 9267, 9275, 9281, 9291, 9296, 9301, 9305, 9313, 3641, 9321, 9326, + 9330, 9334, 9337, 9345, 9352, 9356, 9360, 9365, 9369, 9380, 9386, 9390, + 9393, 9400, 9405, 7101, 9410, 9414, 1704, 4265, 9421, 9426, 9431, 9436, + 9442, 9447, 9453, 9458, 9463, 9468, 9473, 9478, 9483, 9488, 9493, 9498, + 9503, 9508, 9513, 9518, 9523, 9528, 9533, 9539, 9544, 9549, 9554, 9559, + 9564, 9570, 9575, 9580, 9586, 9591, 9597, 9602, 9608, 9613, 9618, 9623, + 9628, 9634, 9639, 9644, 670, 134, 9649, 9653, 9658, 9663, 9667, 9671, + 9675, 9680, 9684, 9689, 9693, 9696, 9700, 9704, 9709, 9719, 9725, 9729, + 9733, 9740, 9748, 9757, 9768, 9775, 9782, 9791, 9800, 9809, 9818, 9827, + 9836, 9846, 9856, 9866, 9876, 9886, 9895, 9905, 9915, 9925, 9935, 9945, + 9955, 9965, 9974, 9984, 9994, 10004, 10014, 10024, 10034, 10043, 10053, + 10063, 10073, 10083, 10093, 10103, 10113, 10123, 10133, 10142, 10152, + 10162, 10172, 10182, 10192, 10202, 10212, 10222, 10232, 10242, 10251, + 10257, 10261, 10264, 10268, 10273, 10280, 10286, 10291, 10295, 10300, + 10304, 10308, 7110, 10314, 10319, 10328, 7115, 10333, 10336, 10342, + 10350, 7120, 10357, 10361, 10365, 10369, 10379, 10384, 10393, 10401, + 10408, 10413, 10420, 10425, 10429, 10432, 10443, 10453, 10462, 10470, + 10481, 10493, 10503, 10507, 10512, 10517, 10521, 10526, 10535, 10539, + 10542, 10549, 10559, 10568, 10575, 10579, 10585, 10590, 10595, 10599, + 10608, 10613, 10619, 10624, 10628, 10637, 10645, 10653, 10660, 10668, + 10680, 10691, 10701, 10708, 10714, 10723, 10734, 10743, 10752, 10760, + 10767, 10776, 10784, 5761, 10788, 10790, 10795, 10801, 10809, 10816, + 10825, 10834, 10843, 10852, 10861, 10870, 10879, 10888, 10898, 10908, + 10917, 10924, 10938, 10945, 10953, 10962, 10968, 10977, 10985, 10994, + 11007, 11015, 11022, 11035, 11041, 11050, 11059, 11064, 11068, 11074, + 11080, 11087, 6864, 11092, 11097, 11104, 11109, 11114, 11118, 11124, + 11132, 11140, 11147, 11155, 11163, 11168, 11174, 11179, 11183, 11194, + 11202, 11208, 11213, 11222, 11228, 11233, 11242, 11256, 3600, 11260, + 11265, 11270, 11276, 11281, 11286, 11290, 11295, 11300, 5760, 11305, + 11310, 11315, 11320, 11324, 11329, 11334, 11339, 11345, 11351, 11356, + 11360, 11365, 11370, 11375, 7124, 11380, 11385, 11390, 11395, 11412, + 11430, 11442, 11455, 11472, 11488, 11505, 11515, 11534, 11545, 11556, + 11567, 11578, 11590, 11601, 11612, 11629, 11640, 11651, 11656, 2317, + 11660, 11663, 11669, 11677, 11685, 11690, 11698, 11706, 11713, 11718, + 11724, 11731, 11739, 11746, 11758, 11763, 9032, 11769, 11778, 11786, + 11793, 11799, 11807, 11814, 11821, 11827, 11836, 11844, 11851, 11859, + 11865, 11872, 11880, 11885, 3372, 1187, 11892, 11895, 11306, 11899, + 11905, 11909, 11921, 11926, 11933, 11939, 11944, 11951, 11311, 11316, + 11955, 11959, 11964, 11968, 11976, 11983, 11990, 12007, 12011, 12014, + 12022, 12028, 3428, 12032, 12034, 12042, 12049, 12059, 12064, 12070, + 12075, 12079, 12085, 12090, 12093, 12100, 12106, 12112, 12117, 12124, + 12130, 12135, 12142, 12146, 12152, 12159, 12165, 12171, 12179, 12185, + 12193, 12199, 12205, 12210, 12217, 12222, 12226, 12231, 12238, 12243, + 12249, 12255, 12261, 12264, 12268, 12280, 12286, 12291, 12298, 12304, + 12310, 12321, 12331, 12340, 12348, 12355, 12365, 12375, 12383, 12386, + 11330, 12391, 11335, 11460, 12399, 12412, 12427, 12438, 11477, 12456, + 12469, 12482, 12493, 8085, 12504, 12517, 12536, 12547, 12558, 12569, + 2542, 12582, 12586, 12594, 12605, 12612, 12618, 12626, 12630, 12636, + 12639, 12649, 12657, 12664, 12672, 12677, 12682, 12689, 12695, 12700, + 12705, 12709, 12713, 12719, 12725, 12730, 12735, 12740, 12744, 11340, + 11346, 11352, 12748, 12756, 12765, 12772, 7000, 12776, 12778, 12783, + 12788, 12794, 12799, 12804, 12809, 12814, 12818, 12824, 12830, 12835, + 12841, 12846, 12851, 12857, 12862, 12867, 12872, 12878, 12883, 12888, + 12894, 12900, 12905, 12912, 12919, 12924, 12928, 12932, 12935, 12943, + 12948, 12955, 12960, 12965, 12975, 12980, 12987, 12993, 13003, 13017, + 13031, 13045, 13059, 13074, 13089, 13106, 13124, 13137, 13143, 13148, + 13153, 13159, 13164, 13169, 13173, 13177, 13182, 13186, 13197, 13203, + 13208, 13213, 13217, 13222, 13228, 13235, 13240, 13244, 13250, 13255, + 13260, 13264, 13270, 13275, 13280, 13287, 13292, 13296, 13300, 13305, + 13310, 13316, 13322, 13327, 13336, 13344, 13351, 13358, 13364, 13370, + 13375, 13380, 13386, 13391, 13397, 13402, 13408, 13414, 13421, 13427, + 13432, 13437, 7166, 13446, 13449, 13455, 13460, 13465, 13475, 13482, + 13487, 13493, 13498, 13504, 13509, 13515, 13521, 13526, 13534, 13541, + 13546, 13552, 13557, 13561, 13570, 13581, 13588, 13596, 13602, 13609, + 13615, 13620, 13624, 13630, 13635, 13640, 13645, 7171, 5777, 2756, 13649, + 13653, 13657, 13661, 13665, 13668, 13675, 13683, 11366, 13690, 13700, + 13708, 13715, 13723, 13733, 13742, 13747, 10458, 10467, 13752, 13762, + 13777, 13783, 13790, 13797, 13803, 13813, 13823, 11371, 13832, 13838, + 13844, 13852, 13860, 13865, 13874, 13882, 13894, 13904, 13914, 13924, + 13933, 13945, 13955, 13965, 13976, 13981, 13993, 14005, 14017, 14029, + 14041, 14053, 14065, 14077, 14089, 14101, 14112, 14124, 14136, 14148, + 14160, 14172, 14184, 14196, 14208, 14220, 14232, 14243, 14255, 14267, + 14279, 14291, 14303, 14315, 14327, 14339, 14351, 14363, 14374, 14386, + 14398, 14410, 14422, 14434, 14446, 14458, 14470, 14482, 14494, 14505, + 14517, 14529, 14541, 14553, 14565, 14577, 14589, 14601, 14613, 14625, + 14636, 14648, 14660, 14672, 14684, 14696, 14708, 14720, 14732, 14744, + 14756, 14767, 14779, 14791, 14803, 14815, 14827, 14839, 14851, 14863, + 14875, 14887, 14898, 14910, 14922, 14934, 14946, 14959, 14972, 14985, + 14998, 15011, 15024, 15037, 15049, 15062, 15075, 15088, 15101, 15114, + 15127, 15140, 15153, 15166, 15179, 15191, 15204, 15217, 15230, 15243, + 15256, 15269, 15282, 15295, 15308, 15321, 15333, 15346, 15359, 15372, + 15385, 15398, 15411, 15424, 15437, 15450, 15463, 15475, 15488, 15501, + 15514, 15527, 15540, 15553, 15566, 15579, 15592, 15605, 15617, 15630, + 15643, 15656, 15669, 15682, 15695, 15708, 15721, 15734, 15747, 15759, + 15770, 15783, 15796, 15809, 15822, 15835, 15848, 15861, 15874, 15887, + 15900, 15912, 15925, 15938, 15951, 15964, 15977, 15990, 16003, 16016, + 16029, 16042, 16054, 16067, 16080, 16093, 16106, 16119, 16132, 16145, + 16158, 16171, 16184, 16196, 16209, 16222, 16235, 16248, 16261, 16274, + 16287, 16300, 16313, 16326, 16338, 16351, 16364, 16377, 16390, 16403, + 16416, 16429, 16442, 16455, 16468, 16480, 16493, 16506, 16519, 16532, + 16545, 16558, 16571, 16584, 16597, 16610, 16622, 16635, 16648, 16661, + 16674, 16687, 16700, 16713, 16726, 16739, 16752, 16764, 16777, 16790, + 16803, 16816, 16829, 16842, 16855, 16868, 16881, 16894, 16906, 16919, + 16932, 16945, 16958, 16971, 16984, 16997, 17010, 17023, 17036, 17048, + 17061, 17074, 17087, 17100, 17113, 17126, 17139, 17152, 17165, 17178, + 17190, 17201, 17209, 17216, 17222, 17226, 17232, 17238, 17246, 17252, + 17257, 7005, 17261, 17268, 17276, 17283, 17290, 8481, 17297, 17306, + 17311, 5793, 17318, 17323, 17326, 17331, 17339, 17346, 17353, 17359, + 17368, 17377, 17383, 17388, 17398, 17405, 17413, 17419, 17429, 17438, + 17442, 17449, 17453, 17458, 17464, 17472, 17476, 11381, 17485, 17491, + 17495, 17501, 17508, 17519, 6829, 17527, 17533, 17538, 17542, 17546, + 7415, 17551, 17559, 17566, 17575, 17582, 17589, 17595, 17599, 17605, + 17611, 17619, 17625, 17632, 17638, 17644, 17648, 17656, 17665, 17670, + 17681, 17686, 17691, 17696, 5966, 17700, 17706, 17713, 17722, 17727, + 17735, 17747, 17752, 17756, 17759, 17765, 17771, 17776, 17780, 17783, + 17794, 17799, 7201, 17806, 7016, 7206, 17811, 17816, 17821, 17826, 17831, + 17836, 17841, 17846, 17851, 17856, 17861, 17866, 17872, 17877, 17882, + 17887, 17892, 17897, 17902, 17907, 17912, 17917, 17923, 17929, 17934, + 17939, 17944, 17949, 17954, 17959, 17964, 17969, 17974, 17980, 17985, + 17990, 17995, 18001, 18007, 18012, 18017, 18022, 18027, 18032, 18037, + 18042, 18047, 18053, 18058, 18063, 18068, 18073, 18079, 18084, 18089, + 18093, 129, 18101, 18105, 18109, 18113, 18118, 18122, 18126, 9788, 18130, + 18135, 18139, 18144, 18148, 18153, 18157, 18163, 18168, 18172, 18176, + 18184, 18188, 18193, 18198, 18202, 18208, 18213, 18217, 18222, 18227, + 18231, 18238, 18242, 18246, 18251, 18255, 18258, 18271, 18276, 18285, + 7238, 18290, 18293, 2605, 2610, 18297, 18303, 18309, 18314, 18319, 18324, + 18330, 18335, 18340, 18344, 18349, 18354, 18360, 18365, 18370, 18376, + 18381, 18385, 18390, 18395, 18400, 18404, 18409, 18414, 18419, 18424, + 18428, 18432, 18437, 2765, 18386, 18441, 18448, 7494, 18460, 18468, + 18391, 18475, 18480, 18396, 18488, 18493, 18498, 18503, 18507, 18512, + 18515, 18519, 18525, 18530, 6856, 1709, 1714, 18534, 18540, 18546, 18551, + 18555, 18559, 18563, 18566, 18572, 18579, 18587, 18593, 18599, 18604, + 18609, 18613, 11741, 12361, 18618, 18630, 18633, 18640, 18644, 18652, + 18663, 18672, 18685, 18695, 18709, 18721, 18735, 18745, 18757, 18763, + 18778, 18802, 18820, 18839, 18852, 18866, 18884, 18900, 18917, 18935, + 18946, 18965, 18982, 19002, 19020, 19032, 19046, 19060, 19072, 19089, + 19108, 19126, 19138, 19156, 19175, 11520, 19188, 19208, 19220, 8116, + 19232, 19237, 19242, 19247, 19253, 19258, 2334, 19262, 19268, 19272, + 19275, 19279, 19287, 19293, 18405, 19297, 19308, 19314, 19320, 19329, + 19336, 19341, 19348, 19354, 19363, 19371, 19381, 19391, 19396, 19405, + 19414, 19425, 19436, 3677, 19446, 19450, 19460, 19468, 19478, 19489, + 19497, 19504, 19510, 19515, 18415, 19519, 19528, 19532, 19537, 19546, + 19554, 19564, 19573, 19579, 19585, 18420, 18425, 19589, 19599, 916, + 19608, 11702, 1154, 19622, 19631, 19639, 19650, 19661, 19671, 19680, + 19689, 19698, 19704, 19713, 19721, 7178, 19727, 19730, 19734, 19739, + 19744, 19752, 18433, 19756, 19762, 19768, 19773, 19778, 19782, 19790, + 19796, 19802, 3351, 19810, 19815, 19820, 19824, 19828, 19835, 19839, + 19847, 19853, 19858, 19862, 19867, 19873, 19877, 19888, 19893, 19897, + 19908, 19912, 19916, 19919, 19923, 19928, 19932, 19936, 903, 19940, + 19945, 19950, 19955, 19960, 19965, 19970, 19975, 19980, 19985, 19990, + 19995, 20000, 20005, 20011, 20016, 20021, 20026, 20031, 20036, 20041, + 20047, 20052, 20057, 20062, 20067, 20072, 20077, 20082, 20088, 20094, + 20099, 20105, 20110, 20115, 5, 20121, 20125, 20129, 20133, 20138, 20142, + 20146, 20150, 20154, 20159, 20163, 20168, 20172, 20175, 20179, 20184, + 20188, 20193, 20197, 20201, 20205, 20210, 20214, 20218, 20228, 20233, + 20237, 20241, 20246, 20251, 20260, 20265, 20270, 20274, 20278, 20290, + 20299, 20308, 20314, 20318, 20322, 20332, 20341, 20349, 20355, 20359, + 20366, 20376, 20385, 20393, 20401, 20408, 20416, 20425, 20434, 20442, + 20447, 20451, 20455, 20458, 20460, 20464, 20468, 20473, 20478, 20482, + 20486, 20489, 20493, 20496, 20500, 20503, 20506, 20510, 20516, 20520, + 20524, 20528, 20533, 20538, 20543, 20547, 20550, 20555, 20561, 20566, + 20572, 20577, 20581, 20585, 20589, 20594, 20598, 20603, 20607, 20614, + 20618, 20621, 20625, 20631, 20637, 20641, 20645, 20650, 20657, 20663, + 20667, 20676, 20680, 20684, 20687, 20693, 20698, 20704, 1471, 1773, + 20709, 20714, 20719, 20724, 20729, 20734, 20739, 2157, 20744, 20745, + 20748, 20752, 20756, 20761, 20765, 20769, 20772, 20777, 20782, 20786, + 20789, 20794, 20798, 20803, 20807, 11714, 20812, 20815, 20818, 20822, + 20826, 20835, 20842, 20847, 20854, 20858, 20862, 20867, 20872, 20876, + 20881, 20893, 20904, 20909, 20913, 20918, 20922, 20925, 20931, 5894, + 2252, 20935, 20951, 7270, 20971, 20980, 20996, 21000, 21003, 21009, + 21019, 21025, 21040, 21052, 21063, 21071, 21080, 21086, 21095, 21105, + 21116, 21127, 21136, 21145, 21153, 21160, 21168, 21181, 21187, 21192, + 21198, 21203, 21211, 21223, 21235, 21249, 21257, 21264, 21273, 21282, + 21290, 21298, 21306, 21313, 21322, 21330, 21340, 21349, 21359, 21368, + 21377, 21385, 21390, 21394, 21397, 21401, 21405, 21409, 21413, 21417, + 21423, 21429, 11759, 21434, 21446, 21452, 7623, 21463, 21473, 21482, + 21486, 21489, 21493, 21499, 21503, 21508, 21517, 21524, 5935, 21531, + 21539, 21546, 21552, 21557, 21563, 21569, 21577, 21581, 21584, 21586, + 21402, 21595, 21601, 21611, 21616, 21622, 21627, 21632, 21637, 21644, + 21653, 21662, 21668, 21673, 21679, 21684, 21691, 21702, 21707, 21711, + 21721, 21725, 21730, 21740, 21749, 21753, 21761, 21768, 21774, 21779, + 21786, 21790, 10323, 21798, 21805, 21812, 18204, 21327, 21817, 21821, + 18952, 21826, 21840, 21856, 21874, 21893, 21910, 21928, 18971, 21945, + 21965, 18988, 21977, 21989, 12443, 22001, 19008, 22015, 22027, 8129, + 22041, 22046, 22051, 22057, 22061, 22066, 22076, 22082, 7994, 22088, + 22090, 22095, 22103, 22107, 21640, 22113, 22120, 22130, 22135, 22139, + 22142, 22148, 22156, 22166, 22182, 22195, 22209, 12461, 22223, 22230, + 22234, 22237, 22242, 22246, 22256, 22261, 22266, 22271, 22279, 22287, + 22296, 22301, 12466, 22305, 22308, 22311, 22316, 22332, 22340, 22348, + 22356, 22361, 22365, 22371, 22377, 22380, 22386, 22398, 22405, 22411, + 22418, 22432, 22445, 22454, 22466, 22477, 22486, 22495, 22503, 22514, + 5917, 22521, 22527, 22532, 22538, 22548, 22557, 22563, 22568, 22575, + 22583, 22595, 22602, 22611, 22619, 22625, 22631, 22636, 22640, 22643, + 22649, 22654, 22658, 22669, 22678, 22686, 22691, 22697, 10921, 6581, + 22702, 22705, 22708, 22714, 22722, 22730, 22734, 22738, 22743, 22746, + 22755, 22763, 22774, 22778, 22784, 22790, 22794, 22800, 22822, 22846, + 22853, 22859, 22870, 22888, 22895, 22903, 22907, 22916, 22929, 22937, + 22949, 22960, 22970, 22984, 22993, 23001, 23013, 7287, 23024, 23035, + 23047, 23057, 23066, 23071, 23075, 23083, 23088, 23092, 23095, 23098, + 23106, 23114, 23123, 23133, 23142, 23148, 23162, 2556, 23184, 23193, + 23203, 23215, 23225, 23233, 23241, 23250, 23255, 23266, 23277, 23281, + 23291, 23300, 23310, 23320, 23328, 23337, 23344, 23352, 23359, 23368, + 23372, 23380, 23387, 23394, 23405, 23420, 23427, 23437, 23446, 23452, + 11054, 23459, 23464, 23468, 23472, 23480, 23486, 23495, 23500, 23510, + 19517, 23514, 23517, 23522, 23527, 23532, 23537, 23542, 23547, 23552, + 23557, 23563, 23568, 23573, 23579, 1242, 639, 23584, 23593, 2300, 23600, + 23605, 23609, 23615, 1275, 506, 343, 23620, 23629, 23637, 23646, 23654, + 23665, 23674, 23682, 23686, 23689, 23697, 23705, 11727, 23710, 23716, + 4101, 23721, 23725, 23731, 23735, 23742, 1437, 23748, 7355, 23755, 23765, + 23773, 23779, 23788, 23796, 23802, 23810, 23817, 23824, 1478, 2338, + 23831, 23837, 23848, 23859, 23867, 23874, 23883, 23891, 23898, 23905, + 23918, 23929, 23948, 1280, 23952, 23957, 23965, 3387, 23969, 23974, 1441, + 20487, 23984, 23988, 23993, 23997, 3333, 24003, 24011, 24018, 24026, + 3388, 260, 24031, 24039, 24047, 24054, 24060, 24065, 24072, 24075, 24081, + 21504, 24087, 106, 24091, 24095, 24101, 24106, 24113, 24119, 2263, 24123, + 24127, 24130, 24133, 24140, 24146, 18500, 24151, 3432, 13175, 24155, + 24158, 24166, 24169, 24179, 24191, 24196, 24200, 24208, 24215, 24221, + 24228, 24235, 24238, 24242, 24246, 1445, 24256, 24258, 24263, 24269, + 24275, 24280, 24285, 24290, 24295, 24300, 24305, 24310, 24315, 24320, + 24325, 24330, 24335, 24340, 24345, 24351, 24357, 24363, 24369, 24374, + 24379, 24384, 24390, 24395, 24400, 24405, 24411, 24416, 24422, 24427, + 24432, 24437, 24442, 24448, 24453, 24459, 24464, 24469, 24474, 24479, + 24485, 24490, 24496, 24501, 24506, 24511, 24516, 24521, 24526, 24531, + 24536, 24541, 24547, 24553, 24559, 24564, 24569, 24574, 24579, 24585, + 24591, 24597, 24603, 24609, 24615, 24620, 24626, 24631, 24636, 24641, + 24646, 24652, 2376, 24657, 2383, 2390, 2647, 24662, 2396, 2406, 24668, + 24672, 24677, 24682, 24688, 24693, 24698, 24702, 24707, 24713, 24718, + 24723, 24729, 24734, 24738, 24743, 24748, 24753, 24758, 24763, 24769, + 24775, 24780, 24784, 24789, 24793, 24798, 24803, 24808, 24812, 24817, + 24822, 24827, 24832, 24838, 24844, 24849, 24853, 24858, 24863, 24868, + 24873, 24878, 24882, 24887, 24892, 24897, 24901, 24906, 24914, 24920, + 24926, 24932, 24937, 24941, 24944, 24948, 24953, 24957, 24962, 24966, + 24969, 24974, 17578, 23752, 24979, 24984, 24988, 24993, 24997, 25001, + 25006, 25010, 25013, 25016, 25020, 25025, 25033, 25037, 25042, 25046, + 25050, 25055, 25060, 25064, 25070, 25075, 25080, 25087, 25094, 25098, + 25101, 25107, 25116, 25123, 25130, 25134, 25139, 25143, 25149, 25155, + 25159, 25165, 25170, 25175, 25182, 25188, 25194, 25200, 25206, 25213, + 25219, 25225, 25231, 25237, 25243, 25249, 25255, 25262, 25268, 25275, + 25281, 25287, 25293, 25299, 25305, 25311, 25317, 25323, 25329, 8917, + 25335, 25340, 25345, 12716, 25350, 25355, 25360, 25366, 25371, 25376, + 25380, 25385, 25390, 25396, 25401, 25406, 25410, 25415, 25420, 25424, + 25429, 25434, 25439, 25443, 25448, 25453, 25458, 25462, 25466, 12060, + 25470, 25479, 25485, 25491, 25500, 25508, 25513, 25517, 25524, 25530, + 25534, 25539, 25548, 25553, 1477, 25559, 25562, 25566, 18541, 18547, + 25572, 25576, 25587, 25598, 25610, 25617, 25624, 25629, 25633, 17235, + 685, 17577, 25641, 25645, 25650, 25656, 25661, 25667, 25672, 25678, + 25683, 8022, 2714, 3282, 25687, 25690, 25696, 25702, 25708, 25715, 25721, + 25727, 25733, 25739, 25745, 25751, 25757, 25763, 25769, 25775, 25781, + 25787, 25794, 25800, 25806, 25812, 25818, 25824, 25827, 25832, 25837, + 25843, 25848, 25853, 25857, 25862, 25868, 25873, 25878, 25884, 25889, + 25895, 25899, 25904, 25909, 25914, 25919, 25923, 25928, 25933, 25938, + 25944, 25950, 25956, 25961, 25965, 25970, 25974, 25982, 3455, 25988, + 25991, 5976, 25995, 26001, 26008, 5985, 26012, 26018, 26025, 26031, + 26040, 26048, 26052, 26059, 26065, 26069, 26072, 26081, 26089, 26093, + 26103, 26113, 26123, 26129, 26139, 26144, 26157, 26171, 26182, 26194, + 26206, 26220, 26233, 26245, 26257, 11561, 26271, 26276, 26281, 26285, + 26289, 26293, 1762, 22475, 26297, 26302, 26307, 26311, 26314, 26319, + 26324, 26330, 26336, 7767, 12395, 26341, 26346, 26351, 26355, 26360, + 25651, 26365, 26370, 26376, 25657, 26381, 26384, 26392, 25662, 26397, + 26403, 26409, 25668, 26414, 26419, 26425, 26430, 26435, 26441, 26447, + 23128, 26452, 26456, 26461, 26466, 26471, 26479, 26483, 26488, 26493, + 26497, 26502, 26507, 26512, 25673, 25679, 26518, 2452, 234, 26521, 26524, + 26528, 26532, 26540, 26547, 26554, 26558, 26561, 26567, 26575, 26583, + 26587, 26591, 26594, 26601, 26605, 26612, 26620, 26628, 26635, 26639, + 635, 292, 26651, 26656, 26661, 26667, 26672, 3466, 26677, 26682, 26687, + 26692, 26697, 18626, 26702, 26707, 26712, 26717, 26723, 26728, 26732, + 26737, 26742, 26747, 26751, 26756, 26761, 26766, 18464, 3472, 26771, + 26776, 26781, 26787, 26792, 26797, 26801, 26806, 26811, 26817, 26822, + 26827, 26831, 26836, 26841, 26846, 26850, 26855, 26860, 26865, 26871, + 26877, 26882, 26886, 26891, 26896, 26901, 26905, 26913, 26917, 26923, + 26927, 26934, 13070, 26940, 26947, 26955, 26962, 26968, 26980, 26986, + 2666, 26990, 26596, 26994, 27005, 27010, 27015, 27020, 27024, 27029, + 18552, 27033, 17591, 27038, 27043, 27049, 27054, 27058, 27062, 27065, + 27071, 27082, 27094, 27099, 27103, 27106, 321, 27110, 27115, 27120, + 27125, 27130, 27135, 27141, 27146, 27151, 27157, 27162, 27168, 27173, + 27179, 27184, 27189, 27194, 27199, 27204, 27209, 27214, 27219, 27225, + 27230, 27235, 27240, 27245, 27250, 27255, 27260, 27266, 27272, 27277, + 27282, 27287, 27292, 27297, 27302, 27307, 27312, 27317, 27322, 27327, + 27332, 27337, 27342, 27347, 27352, 27357, 27362, 27368, 26, 27373, 27377, + 27381, 27389, 27393, 27397, 27400, 27403, 27408, 27412, 27417, 27421, + 27426, 27430, 27435, 27439, 27442, 27444, 27447, 27449, 27453, 27465, + 27474, 27478, 27484, 27489, 27495, 27500, 27505, 27509, 27514, 27521, + 27526, 27532, 27537, 27541, 27548, 21335, 21345, 27552, 27557, 27562, + 27567, 27571, 27578, 6076, 27584, 27593, 27601, 27616, 27630, 27638, + 27649, 27658, 27663, 5243, 27673, 27678, 27682, 27685, 27689, 27693, + 27700, 27705, 6820, 27715, 27717, 27720, 27724, 27728, 27733, 27739, + 27744, 27753, 27759, 27764, 27771, 27775, 27782, 27795, 27803, 27807, + 27817, 27822, 27826, 27830, 27836, 27841, 27851, 27860, 27871, 27879, + 27890, 27899, 27902, 27906, 27914, 27920, 27928, 27935, 27941, 2351, + 27945, 27947, 27952, 27957, 27960, 27962, 27966, 27969, 27973, 27977, + 27980, 27986, 27996, 28001, 28007, 28011, 28016, 28029, 21606, 28035, + 28044, 13898, 26109, 28051, 28056, 28060, 28068, 28075, 28080, 28084, + 28088, 28096, 28102, 28108, 28113, 28117, 28120, 28125, 28138, 28154, + 19078, 28171, 28183, 28200, 28212, 28226, 19095, 19114, 28238, 28250, + 2573, 28264, 28269, 28274, 28278, 28285, 28297, 28303, 28306, 28311, + 18244, 28314, 28318, 28321, 28326, 28331, 28337, 28342, 28347, 28353, + 28359, 28364, 28368, 28373, 28378, 28383, 28387, 28390, 28396, 28401, + 28406, 28411, 28415, 28420, 28426, 28431, 28436, 28442, 28447, 28452, + 28457, 28462, 28467, 28471, 28474, 28480, 28484, 28492, 28499, 28507, + 28517, 28523, 28529, 28533, 28542, 28547, 28552, 8036, 28557, 28564, + 28570, 28575, 28581, 28589, 28596, 28600, 28603, 28614, 28621, 28627, + 28636, 28640, 28643, 28649, 28656, 28662, 28668, 28676, 24055, 28683, + 28691, 28697, 28702, 28708, 28713, 28719, 28723, 28730, 28736, 21619, + 28745, 28750, 28758, 28766, 7383, 4120, 28773, 28777, 28781, 28785, + 28790, 28794, 28798, 28803, 28808, 28812, 17640, 28817, 28821, 28825, + 28829, 28832, 28834, 28839, 28847, 28851, 28858, 28862, 28870, 28877, + 28887, 28891, 28895, 28903, 28909, 28918, 10570, 28924, 28933, 28940, + 28948, 28956, 28964, 28971, 28978, 28985, 28992, 28999, 29004, 29010, + 29027, 29035, 29043, 29050, 380, 29054, 29060, 27654, 29066, 29069, + 29077, 29083, 29089, 29098, 29104, 3420, 12046, 29113, 29120, 29125, + 29129, 29136, 29144, 29153, 29163, 29169, 29177, 29186, 29194, 18248, + 29201, 29208, 29214, 29224, 29233, 29244, 29248, 29254, 29259, 29265, + 29271, 29276, 29289, 29302, 29315, 29322, 29328, 29333, 29337, 1451, + 29341, 29346, 29351, 29356, 29361, 29367, 29372, 29377, 29382, 29387, + 29392, 29397, 29402, 29408, 29414, 29419, 29424, 29430, 29435, 29440, + 29445, 29451, 29456, 29461, 29466, 29471, 29477, 29482, 29487, 29493, + 29498, 29503, 29508, 29513, 29518, 29524, 29529, 29535, 29540, 29546, + 29551, 29556, 29561, 29567, 29573, 29579, 29585, 29591, 29597, 29603, + 29609, 29614, 29619, 29625, 29630, 29635, 29640, 29645, 29650, 29655, + 29660, 29666, 29671, 29676, 29682, 29688, 101, 29693, 29695, 29699, + 29703, 29707, 29712, 29716, 7323, 29720, 29726, 4331, 29732, 29735, + 29740, 29744, 29749, 29753, 29757, 29762, 7869, 29766, 29770, 29774, + 12131, 29779, 29783, 29788, 29793, 29798, 29802, 29809, 21623, 29815, + 29818, 29822, 29827, 29833, 29837, 29843, 29848, 29852, 29856, 29860, + 3317, 3322, 24194, 29863, 29871, 29878, 29882, 29887, 342, 29892, 29898, + 29904, 29908, 29917, 29921, 29925, 29930, 29935, 29939, 29946, 29952, + 29957, 29972, 29987, 30002, 30018, 30036, 7831, 30050, 30055, 30059, + 30067, 27788, 30075, 30079, 30088, 30096, 7546, 11842, 30100, 30103, + 30106, 6089, 3621, 30111, 30119, 30123, 30126, 30130, 30135, 30140, + 30146, 30151, 30155, 30159, 30164, 30168, 30174, 30178, 30185, 30189, + 9256, 30196, 30202, 30207, 30214, 30221, 30228, 23641, 6020, 30235, + 30242, 30249, 30255, 30260, 30267, 30278, 30284, 30289, 30296, 30300, + 30304, 30314, 30325, 30331, 30336, 30341, 30346, 30351, 30355, 30359, + 30365, 2255, 767, 7891, 7896, 7902, 30374, 7907, 7912, 7918, 30379, + 30389, 30393, 7923, 30398, 30401, 30406, 30410, 30415, 30422, 30428, + 30438, 4146, 30447, 30451, 30455, 30465, 30471, 30482, 30488, 30494, + 30499, 30505, 30511, 30516, 30519, 30526, 30532, 30537, 30544, 30551, + 30555, 30565, 30578, 30587, 30596, 30607, 30620, 30629, 30640, 30645, + 30650, 7928, 30656, 30664, 30669, 5094, 21, 30676, 30681, 13284, 30685, + 30688, 30691, 23219, 30695, 23650, 30703, 30707, 30710, 30716, 30722, + 30730, 30736, 30743, 30747, 30751, 23383, 30755, 30764, 30770, 30775, + 30779, 30787, 21669, 30793, 30800, 30806, 30811, 30816, 30820, 30826, + 30831, 30837, 3747, 716, 30844, 30848, 30851, 12054, 30863, 29182, 30874, + 30877, 30884, 30890, 30894, 30900, 30905, 30911, 30916, 30921, 30925, + 30930, 30935, 30945, 30951, 30964, 30970, 30975, 30981, 13193, 1454, 932, + 25770, 25776, 30986, 25782, 25795, 25801, 25807, 30992, 25813, 25819, + 30998, 31004, 14, 31012, 31019, 31023, 31027, 31035, 31039, 31044, 31048, + 31055, 31060, 31064, 31069, 31075, 31080, 31086, 31091, 31095, 31099, + 31103, 31108, 31112, 31117, 31121, 31128, 31133, 31137, 31142, 31146, + 31151, 31155, 31160, 12218, 12223, 31165, 31169, 31172, 31176, 31181, + 31185, 31191, 31198, 31203, 31213, 31218, 31226, 31230, 31233, 31237, + 31242, 31247, 31251, 31256, 10581, 31267, 31271, 31274, 31278, 31282, + 31285, 31289, 6108, 10597, 31292, 31295, 31300, 31304, 31313, 31329, + 31345, 31355, 23138, 31362, 31366, 31371, 31375, 31379, 31384, 31389, + 31393, 31398, 31402, 31406, 22323, 31412, 17702, 31417, 31424, 31432, + 31438, 31445, 31453, 31459, 31463, 31469, 31477, 31481, 31490, 7304, + 31498, 31502, 31510, 31517, 31522, 31526, 31529, 31533, 31536, 31540, + 31547, 31552, 21814, 25825, 31556, 31563, 31569, 31574, 31577, 31579, + 31586, 31593, 31599, 31603, 31606, 31610, 31614, 31618, 31623, 31627, + 31631, 31634, 31638, 31652, 19144, 31671, 31684, 31697, 31710, 19162, + 31725, 8090, 31740, 31746, 31750, 31754, 31761, 31767, 31772, 31778, + 31788, 31800, 31811, 31816, 31823, 31827, 31830, 12589, 31838, 12239, + 31851, 31855, 31859, 31864, 31869, 31873, 31877, 31880, 5750, 23022, + 31885, 31889, 31895, 31904, 31909, 29159, 31915, 31920, 31924, 31929, + 31936, 31940, 31943, 11526, 31948, 31955, 939, 31959, 31964, 31969, + 31975, 31980, 31985, 31989, 31994, 32000, 32005, 32011, 32016, 32022, + 32032, 32037, 32042, 32046, 5245, 5257, 32051, 32054, 32061, 32070, + 32074, 32077, 32081, 32086, 668, 32091, 32097, 23211, 32103, 32108, + 32118, 32127, 32134, 32140, 32144, 32151, 32157, 32164, 32170, 32180, + 32188, 32194, 32200, 32205, 32209, 32216, 32222, 32229, 31619, 548, 1208, + 32235, 32240, 32243, 32249, 32257, 1383, 32262, 32266, 32271, 32278, + 32284, 32288, 32293, 32302, 32309, 32319, 32325, 23237, 32342, 32351, + 32359, 32365, 32370, 32377, 32383, 32391, 32400, 32408, 32413, 32421, + 32427, 32446, 12522, 32460, 32476, 32490, 32496, 32501, 32506, 32511, + 32517, 32522, 32526, 32533, 32538, 32542, 319, 2807, 32549, 32554, 22579, + 32380, 32559, 32564, 32572, 32576, 32579, 32585, 32589, 23287, 32592, + 32596, 32599, 32604, 32608, 32613, 32618, 32622, 32627, 32631, 17511, + 17522, 32635, 32640, 32646, 22292, 32651, 32655, 12702, 32658, 32663, + 32668, 32673, 32678, 32683, 32688, 32693, 453, 43, 25828, 25833, 25838, + 25844, 25849, 25854, 32698, 25858, 32702, 32706, 25863, 25869, 32710, + 25874, 25879, 32718, 32723, 25885, 32728, 32733, 32738, 32743, 32749, + 32755, 25896, 32768, 32774, 25900, 25905, 32778, 25910, 25915, 32781, + 32786, 32790, 25591, 32796, 10746, 32803, 32808, 25920, 32812, 32817, + 32822, 32827, 32831, 32836, 32841, 32847, 32852, 32857, 32863, 32869, + 32874, 32878, 32883, 32888, 32893, 32897, 32902, 32907, 32912, 32918, + 32924, 32930, 32935, 32939, 32944, 32948, 25924, 25929, 25934, 32952, + 32956, 25939, 25945, 25951, 25957, 32968, 21521, 32972, 32976, 32981, + 32986, 32991, 32995, 32999, 33009, 33014, 33019, 33023, 33027, 33030, + 33038, 25966, 1461, 33043, 33051, 33060, 33064, 33072, 33080, 33096, + 33101, 1731, 9398, 33105, 2853, 33117, 33118, 33126, 33133, 33138, 33143, + 7197, 1043, 7950, 33150, 33155, 33158, 33167, 1294, 33172, 33179, 33182, + 33187, 18600, 2485, 33191, 8312, 33201, 33207, 2273, 2283, 33216, 33225, + 27997, 7985, 3565, 29063, 1299, 33235, 33243, 33250, 33255, 33259, 33263, + 19759, 8012, 33271, 33280, 33289, 33297, 33304, 33309, 33322, 33335, + 33347, 33359, 33371, 33384, 33395, 33406, 33414, 33422, 33434, 33446, + 33457, 33466, 33474, 33481, 33493, 33500, 33509, 33516, 33529, 33539, + 33544, 33550, 33555, 33559, 33566, 33570, 33577, 33585, 2451, 33592, + 33603, 33613, 33622, 33630, 33640, 33648, 33658, 33663, 33669, 33680, + 33690, 33699, 33708, 33718, 33727, 33732, 33737, 1687, 37, 33745, 33753, + 33764, 33775, 33785, 33792, 33798, 33803, 33807, 33818, 33828, 33837, + 33848, 13257, 13262, 33853, 33862, 33867, 33877, 33882, 33890, 33898, + 33905, 33911, 8057, 1018, 33915, 33921, 33926, 33929, 2094, 31856, 33937, + 33941, 33944, 1494, 33950, 11019, 1304, 33955, 33968, 33982, 2536, 34000, + 34012, 34024, 2550, 2567, 34038, 34051, 2582, 34065, 34077, 2597, 34091, + 1310, 1316, 1322, 8237, 34096, 34101, 34106, 34110, 34125, 34140, 34155, + 34170, 34185, 34200, 34215, 34230, 34245, 34260, 34275, 34290, 34305, + 34320, 34335, 34350, 34365, 34380, 34395, 34410, 34425, 34440, 34455, + 34470, 34485, 34500, 34515, 34530, 34545, 34560, 34575, 34590, 34605, + 34620, 34635, 34650, 34665, 34680, 34695, 34710, 34725, 34740, 34755, + 34770, 34785, 34800, 34815, 34830, 34845, 34860, 34875, 34890, 34905, + 34920, 34935, 34950, 34965, 34980, 34995, 35010, 35025, 35040, 35055, + 35070, 35085, 35100, 35115, 35130, 35145, 35160, 35175, 35190, 35205, + 35220, 35235, 35250, 35265, 35280, 35295, 35310, 35325, 35340, 35355, + 35370, 35385, 35400, 35415, 35430, 35445, 35460, 35475, 35490, 35505, + 35520, 35535, 35550, 35565, 35580, 35595, 35610, 35625, 35640, 35655, + 35670, 35685, 35700, 35715, 35730, 35745, 35760, 35775, 35790, 35805, + 35820, 35835, 35850, 35865, 35880, 35895, 35910, 35925, 35940, 35955, + 35970, 35985, 36000, 36015, 36030, 36045, 36060, 36075, 36090, 36105, + 36120, 36135, 36150, 36165, 36180, 36195, 36210, 36225, 36240, 36255, + 36270, 36285, 36300, 36315, 36330, 36345, 36360, 36375, 36390, 36405, + 36420, 36435, 36450, 36465, 36480, 36495, 36510, 36525, 36540, 36555, + 36570, 36585, 36600, 36615, 36630, 36645, 36660, 36675, 36690, 36705, + 36720, 36735, 36750, 36765, 36780, 36795, 36810, 36825, 36840, 36855, + 36870, 36885, 36900, 36915, 36930, 36945, 36960, 36975, 36990, 37005, + 37020, 37035, 37050, 37065, 37080, 37095, 37110, 37125, 37140, 37155, + 37170, 37185, 37200, 37215, 37230, 37245, 37260, 37275, 37290, 37305, + 37320, 37335, 37350, 37365, 37380, 37395, 37410, 37425, 37440, 37455, + 37470, 37485, 37500, 37515, 37530, 37545, 37560, 37575, 37590, 37605, + 37620, 37635, 37650, 37665, 37680, 37695, 37710, 37725, 37740, 37755, + 37770, 37785, 37800, 37815, 37830, 37845, 37860, 37875, 37890, 37905, + 37920, 37935, 37950, 37965, 37980, 37995, 38010, 38025, 38040, 38055, + 38070, 38085, 38100, 38115, 38130, 38145, 38160, 38175, 38190, 38205, + 38220, 38235, 38250, 38265, 38280, 38295, 38310, 38325, 38340, 38355, + 38370, 38385, 38400, 38415, 38430, 38445, 38460, 38475, 38490, 38505, + 38520, 38535, 38550, 38565, 38580, 38595, 38610, 38625, 38640, 38655, + 38670, 38685, 38700, 38715, 38730, 38745, 38760, 38775, 38790, 38805, + 38820, 38835, 38850, 38865, 38880, 38895, 38910, 38925, 38940, 38955, + 38970, 38985, 39000, 39015, 39030, 39045, 39060, 39075, 39090, 39105, + 39120, 39135, 39150, 39165, 39180, 39195, 39210, 39225, 39240, 39255, + 39270, 39285, 39300, 39315, 39330, 39345, 39360, 39375, 39390, 39405, + 39420, 39435, 39450, 39465, 39480, 39495, 39510, 39525, 39540, 39555, + 39570, 39585, 39600, 39615, 39630, 39645, 39660, 39675, 39690, 39705, + 39720, 39735, 39750, 39765, 39780, 39795, 39810, 39825, 39840, 39855, + 39870, 39885, 39900, 39915, 39930, 39945, 39960, 39975, 39990, 40005, + 40020, 40035, 40050, 40065, 40080, 40095, 40110, 40125, 40140, 40155, + 40170, 40185, 40200, 40215, 40230, 40245, 40260, 40275, 40290, 40305, + 40320, 40335, 40350, 40365, 40380, 40395, 40410, 40425, 40440, 40455, + 40470, 40485, 40500, 40515, 40530, 40545, 40560, 40575, 40590, 40605, + 40620, 40635, 40650, 40665, 40680, 40695, 40710, 40725, 40740, 40755, + 40770, 40785, 40800, 40815, 40830, 40845, 40860, 40875, 40890, 40905, + 40920, 40935, 40950, 40965, 40980, 40995, 41010, 41025, 41040, 41055, + 41070, 41085, 41100, 41115, 41130, 41145, 41160, 41175, 41190, 41205, + 41220, 41235, 41250, 41265, 41280, 41295, 41310, 41325, 41340, 41355, + 41370, 41385, 41400, 41415, 41430, 41445, 41460, 41475, 41490, 41505, + 41520, 41535, 41550, 41565, 41580, 41595, 41610, 41625, 41640, 41655, + 41670, 41685, 41700, 41715, 41730, 41745, 41761, 41777, 41793, 41809, + 41825, 41841, 41857, 41873, 41889, 41905, 41921, 41937, 41953, 41969, + 41985, 42001, 42017, 42033, 42049, 42065, 42081, 42097, 42113, 42129, + 42145, 42161, 42177, 42193, 42209, 42225, 42241, 42257, 42273, 42289, + 42305, 42321, 42337, 42353, 42369, 42385, 42401, 42417, 42433, 42449, + 42465, 42481, 42497, 42513, 42529, 42545, 42561, 42577, 42593, 42609, + 42625, 42641, 42657, 42673, 42689, 42705, 42721, 42737, 42753, 42769, + 42785, 42801, 42817, 42833, 42849, 42865, 42881, 42897, 42913, 42929, + 42945, 42961, 42977, 42993, 43009, 43025, 43041, 43057, 43073, 43089, + 43105, 43121, 43137, 43153, 43169, 43185, 43201, 43217, 43233, 43249, + 43265, 43281, 43297, 43313, 43329, 43345, 43361, 43377, 43393, 43409, + 43425, 43441, 43457, 43473, 43489, 43505, 43521, 43537, 43553, 43569, + 43585, 43601, 43617, 43633, 43649, 43665, 43681, 43697, 43713, 43729, + 43745, 43761, 43777, 43793, 43809, 43825, 43841, 43857, 43873, 43889, + 43905, 43921, 43937, 43953, 43969, 43985, 44001, 44017, 44033, 44049, + 44065, 44081, 44097, 44113, 44129, 44145, 44161, 44177, 44193, 44209, + 44225, 44241, 44257, 44273, 44289, 44305, 44321, 44337, 44353, 44369, + 44385, 44401, 44417, 44433, 44449, 44465, 44481, 44497, 44513, 44529, + 44545, 44561, 44577, 44593, 44609, 44625, 44641, 44657, 44673, 44689, + 44705, 44721, 44737, 44753, 44769, 44785, 44801, 44817, 44833, 44849, + 44865, 44881, 44897, 44913, 44929, 44945, 44961, 44977, 44993, 45009, + 45025, 45041, 45057, 45073, 45089, 45105, 45121, 45137, 45153, 45169, + 45185, 45201, 45217, 45233, 45249, 45265, 45281, 45297, 45313, 45329, + 45345, 45361, 45377, 45393, 45409, 45425, 45441, 45457, 45473, 45489, + 45505, 45521, 45537, 45553, 45569, 45585, 45601, 45617, 45633, 45649, + 45665, 45681, 45697, 45713, 45729, 45745, 45761, 45777, 45793, 45809, + 45825, 45841, 45857, 45873, 45889, 45905, 45921, 45937, 45953, 45969, + 45985, 46001, 46017, 46033, 46049, 46065, 46081, 46097, 46113, 46129, + 46145, 46161, 46177, 46193, 46209, 46225, 46241, 46257, 46273, 46289, + 46305, 46321, 46337, 46353, 46369, 46385, 46401, 46417, 46433, 46449, + 46465, 46481, 46497, 46513, 46529, 46545, 46561, 46577, 46593, 46609, + 46625, 46641, 46657, 46673, 46689, 46705, 46721, 46737, 46753, 46769, + 46785, 46801, 46817, 46833, 46849, 46865, 46881, 46897, 46913, 46929, + 46945, 46961, 46977, 46993, 47009, 47025, 47041, 47057, 47073, 47089, + 47105, 47121, 47137, 47153, 47169, 47185, 47201, 47217, 47233, 47249, + 47265, 47281, 47297, 47313, 47329, 47345, 47361, 47377, 47393, 47409, + 47425, 47441, 47457, 47473, 47489, 47505, 47521, 47537, 47553, 47569, + 47585, 47601, 47617, 47633, 47649, 47665, 47681, 47697, 47713, 47729, + 47745, 47761, 47777, 47793, 47809, 47825, 47841, 47857, 47873, 47889, + 47905, 47921, 47937, 47953, 47969, 47985, 48001, 48017, 48033, 48049, + 48065, 48081, 48097, 48113, 48129, 48145, 48161, 48177, 48193, 48209, + 48225, 48241, 48257, 48273, 48289, 48305, 48321, 48337, 48353, 48369, + 48385, 48401, 48417, 48433, 48449, 48465, 48481, 48497, 48513, 48529, + 48545, 48561, 48577, 48593, 48609, 48625, 48641, 48657, 48673, 48689, + 48705, 48721, 48737, 48753, 48769, 48785, 48801, 48817, 48833, 48849, + 48865, 48881, 48897, 48913, 48929, 48945, 48961, 48977, 48993, 49009, + 49025, 49041, 49057, 49073, 49089, 49105, 49121, 49137, 49153, 49169, + 49185, 49201, 49217, 49233, 49249, 49265, 49281, 49297, 49313, 49329, + 49345, 49361, 49377, 49393, 49409, 49425, 49441, 49457, 49473, 49489, + 49505, 49521, 49537, 49553, 49569, 49585, 49601, 49617, 49633, 49649, + 49665, 49681, 49697, 49713, 49729, 49745, 49761, 49777, 49793, 49809, + 49825, 49841, 49857, 49873, 49889, 49905, 49921, 49937, 49953, 49969, + 49985, 50001, 50017, 50033, 50049, 50065, 50081, 50097, 50113, 50129, + 50145, 50161, 50177, 50193, 50209, 50225, 50241, 50257, 50273, 50289, + 50305, 50321, 50337, 50353, 50369, 50385, 50401, 50417, 50432, 50441, + 50447, 50453, 50463, 50471, 11823, 13787, 7661, 50484, 1502, 50492, + 22665, 5207, 50498, 50503, 50508, 50513, 50518, 50524, 50529, 50535, + 50540, 50546, 50551, 50556, 50561, 50566, 50572, 50577, 50582, 50587, + 50592, 50597, 50602, 50607, 50613, 50618, 50624, 50631, 2489, 50636, + 50642, 6480, 50646, 50651, 50658, 50666, 40, 50670, 50676, 50681, 50686, + 50690, 50695, 50699, 50703, 8255, 50707, 50717, 50730, 50741, 50754, + 50761, 50767, 50772, 50778, 50784, 50790, 50795, 50800, 50805, 50810, + 50814, 50819, 50824, 50829, 50835, 50841, 50847, 50852, 50856, 50861, + 50866, 50870, 50875, 50880, 50885, 50889, 8271, 8282, 8287, 1545, 50893, + 1550, 50899, 50902, 1581, 50908, 1587, 1593, 8317, 50913, 50921, 50928, + 50932, 50938, 50943, 25620, 50948, 50955, 50960, 50964, 50968, 1598, + 12933, 12944, 50977, 50984, 50989, 50993, 12956, 1602, 30319, 50996, + 51006, 51010, 1607, 31921, 51015, 8437, 8443, 51021, 51033, 51050, 51067, + 51084, 51101, 51118, 51135, 51152, 51169, 51186, 51203, 51220, 51237, + 51254, 51271, 51288, 51305, 51322, 51339, 51356, 51373, 51390, 51407, + 51424, 51441, 51458, 51475, 51492, 51509, 51526, 51543, 51560, 51577, + 51594, 51611, 51628, 51645, 51662, 51679, 51696, 51713, 51730, 51747, + 51764, 51781, 51798, 51815, 51832, 51849, 51866, 51877, 51882, 1612, + 51886, 51892, 7144, 1617, 22912, 51897, 51908, 51918, 51923, 51930, + 51936, 51941, 51946, 51950, 8454, 1622, 8459, 51954, 51959, 51965, 51970, + 51975, 51980, 51985, 51990, 51995, 52000, 52006, 52012, 52018, 52023, + 52027, 52032, 52037, 52041, 52046, 52051, 52056, 52060, 52065, 52071, + 52076, 52081, 52085, 52090, 52095, 52101, 52106, 52111, 52117, 52123, + 52128, 52132, 52137, 52142, 52147, 52151, 52156, 52161, 52166, 52172, + 52178, 52183, 52187, 52191, 52196, 52201, 52206, 24124, 52210, 52215, + 52220, 52226, 52231, 52236, 52240, 52245, 52250, 52256, 52261, 52266, + 52272, 52278, 52283, 52287, 52292, 52297, 52301, 52306, 52311, 52316, + 52322, 52328, 52333, 52337, 52342, 52347, 52351, 52356, 52361, 52366, + 52370, 52373, 26077, 52378, 52386, 13218, 13236, 8557, 52392, 8562, + 52407, 52412, 52423, 52435, 52447, 52459, 2588, 52471, 52476, 52480, + 52486, 52492, 1634, 940, 52497, 52502, 31960, 52506, 52510, 52515, 52519, + 13301, 52524, 52527, 52535, 1638, 8587, 8593, 1643, 52543, 52550, 52555, + 52564, 52574, 52581, 1648, 52588, 52593, 13376, 52597, 52602, 52609, + 52615, 52619, 52629, 13398, 7063, 7070, 1653, 52636, 52642, 52650, 52657, + 52663, 52669, 52674, 52685, 52694, 3498, 25495, 25504, 13438, 1658, 1662, + 52702, 52713, 52718, 1665, 52726, 52731, 52743, 52749, 52754, 1670, + 52759, 52764, 52772, 52780, 52787, 52796, 52804, 52813, 1675, 1680, + 52817, 52824, 13547, 52832, 52838, 52846, 52851, 8727, 52860, 52866, + 52872, 52877, 52885, 8736, 8741, 52893, 52899, 3563, 32038, 52904, 52910, + 52915, 52923, 52930, 52935, 52939, 52945, 1691, 52950, 52953, 977, 52959, + 52964, 52969, 52975, 52980, 52985, 52990, 52995, 53000, 53005, 1700, 9, + 53011, 53015, 53020, 53024, 53028, 53032, 26315, 53037, 53042, 53047, + 53051, 53054, 53058, 53062, 53067, 53071, 53076, 53080, 28322, 28327, + 28332, 53083, 53090, 53096, 31804, 53106, 28338, 28343, 26325, 26331, + 28354, 26337, 53111, 53116, 53120, 53124, 53127, 53131, 53134, 53139, + 53143, 53147, 53150, 53162, 27517, 53169, 12396, 760, 53172, 53176, + 53181, 53185, 10779, 53188, 53195, 53208, 53217, 53222, 53232, 53245, + 53257, 53264, 53269, 53278, 53291, 29283, 53309, 53314, 53321, 53327, + 53332, 53340, 22979, 585, 53346, 53352, 53358, 53363, 26342, 4176, 26356, + 53367, 53377, 53382, 53392, 53407, 53413, 53419, 26361, 25652, 53424, + 53429, 53434, 53438, 53443, 53448, 53452, 4217, 26382, 53456, 53462, 337, + 53472, 53479, 53488, 53494, 53502, 53506, 53510, 53514, 53518, 53523, + 53527, 53533, 53541, 53546, 53550, 53555, 53559, 53563, 53569, 53575, + 53580, 53584, 26398, 53589, 26404, 26410, 53594, 53600, 53605, 53609, + 25669, 13167, 53612, 53616, 53621, 53628, 53634, 53638, 53643, 53649, + 53653, 53657, 53662, 53667, 53671, 53674, 53680, 53685, 53692, 53699, + 53705, 53710, 53715, 53719, 53724, 53730, 53735, 53741, 53746, 53751, + 53756, 53762, 53767, 53772, 53778, 53784, 53790, 26415, 53795, 53800, + 53805, 26426, 53810, 53815, 53820, 53826, 53832, 26431, 53837, 53842, + 53847, 26442, 26448, 53852, 53857, 53862, 53867, 23129, 26453, 26457, + 53872, 53843, 53876, 53882, 53890, 53897, 53903, 53913, 53919, 53926, + 8214, 26462, 53932, 53945, 53954, 53960, 53969, 53975, 19524, 53982, + 53989, 26443, 53999, 54006, 54011, 54015, 54019, 54024, 4251, 54028, + 54033, 54038, 28416, 28421, 54042, 28427, 28432, 54047, 28437, 28443, + 54052, 28448, 54063, 54066, 54078, 54086, 26484, 54090, 54099, 54109, + 54118, 26489, 54123, 54130, 54139, 54145, 54153, 27045, 4069, 54158, + 26498, 54164, 54167, 54173, 54180, 54185, 54190, 19456, 54194, 54200, + 54206, 54211, 54217, 54223, 54228, 765, 29092, 29839, 29845, 54232, + 54236, 54240, 54243, 54256, 54262, 54266, 54269, 54274, 27708, 54278, + 25674, 17585, 54284, 4197, 4205, 6948, 54287, 54292, 54297, 54302, 54307, + 54312, 54317, 54322, 54327, 54332, 54338, 54343, 54348, 54354, 54359, + 54364, 54369, 54374, 54379, 54384, 54390, 54395, 54401, 54406, 54411, + 54416, 54421, 54426, 54431, 54436, 54441, 54446, 54451, 54457, 54462, + 54467, 54472, 54477, 54482, 54487, 54493, 54498, 54503, 54508, 54513, + 54518, 54523, 54528, 54533, 54538, 54544, 54549, 54554, 54559, 54564, + 54570, 54576, 54581, 54587, 54592, 54597, 54602, 54607, 54612, 1495, 235, + 54617, 54621, 54625, 54629, 54633, 54636, 54640, 54645, 54649, 54654, + 54658, 54662, 54666, 54671, 54675, 54680, 54684, 54688, 54695, 11999, + 54704, 54713, 54717, 20701, 54721, 54727, 54735, 54741, 54753, 54757, + 54762, 54768, 54778, 54788, 54794, 54798, 54803, 54809, 54818, 54827, + 54835, 12274, 54839, 54848, 54856, 54867, 54878, 54887, 54891, 54900, + 54910, 54916, 54921, 54927, 54932, 98, 25579, 54943, 21735, 54949, 54956, + 54962, 54966, 54976, 54984, 54989, 54993, 55001, 55005, 55011, 55021, + 1132, 55024, 55027, 55031, 55037, 55044, 55050, 55059, 55068, 55074, + 55080, 55085, 55092, 55099, 55112, 55121, 55130, 55135, 55139, 55146, + 55153, 55160, 55167, 55174, 55179, 55183, 55187, 55190, 55200, 55204, + 55213, 55217, 55222, 55226, 55235, 55243, 55251, 55256, 55260, 55265, + 55270, 55274, 55280, 55292, 55300, 55310, 55317, 55323, 55328, 55332, + 55336, 55340, 55349, 55358, 55367, 55373, 55379, 55385, 55390, 55397, + 55403, 55411, 55418, 9779, 55424, 55430, 55434, 11225, 55438, 55447, + 55453, 55461, 55468, 55472, 55476, 55482, 55490, 55497, 55503, 55514, + 55518, 55522, 55526, 55529, 55535, 55540, 55544, 55548, 55557, 55565, + 55572, 19890, 31572, 55578, 55586, 55590, 55597, 55606, 55614, 55620, + 55625, 55629, 55634, 55638, 55643, 55652, 55656, 55663, 55670, 55678, + 55684, 55695, 55701, 55710, 55717, 55724, 55731, 55738, 55745, 34285, + 55752, 55759, 55764, 55770, 37407, 55774, 55779, 55784, 55790, 55796, + 55802, 55807, 55812, 55817, 55822, 55828, 55833, 55839, 55844, 55850, + 55855, 55860, 55865, 55870, 55875, 55880, 55885, 55891, 55896, 55902, + 55907, 55912, 55917, 55922, 55927, 55932, 55938, 55943, 55948, 55953, + 55958, 55963, 55968, 55973, 55978, 55983, 55988, 55994, 55999, 56004, + 56009, 56014, 56019, 56024, 56029, 56034, 56040, 56045, 56050, 56055, + 56060, 56065, 56070, 56075, 56080, 56085, 56090, 56095, 56100, 56106, + 1816, 216, 30402, 56111, 56114, 56119, 56123, 55247, 56126, 56136, 56143, + 56152, 56162, 56172, 56180, 56188, 56192, 56195, 56202, 56208, 56219, + 56231, 56242, 56249, 1305, 19361, 56259, 2518, 56263, 1087, 13743, 30918, + 56271, 56284, 56288, 56293, 56298, 56303, 56309, 56315, 56320, 6489, + 56325, 56333, 8588, 56338, 56344, 1703, 8600, 669, 56353, 56362, 56372, + 22357, 56381, 56387, 13353, 56393, 56397, 3678, 8890, 56403, 52708, + 56410, 6919, 171, 11159, 56416, 56428, 56432, 56438, 22932, 56442, 8878, + 2623, 4, 56447, 56457, 56463, 56474, 56481, 56487, 56493, 56501, 56508, + 56518, 56528, 56538, 1317, 56547, 56553, 2646, 2652, 6486, 2200, 56557, + 56561, 56570, 56581, 56589, 56597, 56603, 56614, 56625, 56633, 56639, + 8931, 56644, 56652, 56656, 56660, 23273, 56672, 56682, 56688, 56694, + 56704, 56707, 56718, 56728, 56737, 56741, 56748, 1089, 2511, 56758, + 56763, 56771, 56779, 56790, 56804, 11111, 374, 56814, 56818, 56827, + 56835, 56841, 56848, 56854, 56861, 56871, 56879, 3570, 184, 56887, 56898, + 56902, 56914, 23120, 148, 56920, 56925, 56929, 56936, 56942, 56950, + 56957, 6740, 56964, 56973, 3625, 56981, 13399, 56985, 2681, 419, 56990, + 57003, 57008, 1815, 602, 57012, 3631, 57020, 57026, 917, 57036, 57045, + 57050, 11847, 57054, 37617, 57057, 3580, 19507, 57065, 57072, 19549, + 57076, 57083, 57089, 57094, 11861, 57099, 57111, 57117, 57125, 2693, + 1735, 57133, 57135, 57140, 57145, 57150, 57156, 57161, 57166, 57171, + 57176, 57181, 57186, 57192, 57197, 57202, 57207, 57212, 57217, 57222, + 57227, 57232, 57238, 57243, 57248, 57253, 57259, 57264, 57270, 57275, + 57280, 57285, 57290, 57295, 57300, 57305, 57311, 57316, 57322, 57327, + 57332, 57337, 57342, 57347, 57352, 57357, 57362, 57367, 57372, 57376, + 57380, 57385, 57389, 57394, 57399, 57405, 57410, 57414, 57418, 57421, + 57423, 57427, 57430, 57435, 57439, 57443, 57447, 57451, 57460, 26652, + 57463, 26657, 26662, 57470, 57479, 26668, 57484, 26673, 57493, 57498, + 9018, 57502, 57507, 57512, 57516, 57520, 57524, 57528, 57531, 57535, + 6170, 57541, 57546, 57550, 3467, 57553, 57555, 57559, 57562, 57567, + 57571, 57577, 57590, 57596, 57601, 57605, 57613, 57620, 57628, 57637, + 57645, 26678, 57652, 57662, 57671, 57684, 57689, 57694, 57700, 57707, + 57718, 57730, 57737, 57746, 57755, 57764, 57771, 57777, 57784, 57792, + 57799, 57807, 57816, 57824, 57831, 57839, 57848, 57856, 57865, 57875, + 57884, 57892, 57899, 57907, 57916, 57924, 57933, 57943, 57952, 57960, + 57969, 57979, 57988, 57998, 58009, 58019, 58028, 58036, 58043, 58051, + 58060, 58068, 58077, 58087, 58096, 58104, 58113, 58123, 58132, 58142, + 58153, 58163, 58172, 58180, 58189, 58199, 58208, 58218, 58229, 58239, + 58248, 58258, 58269, 58279, 58290, 58302, 58313, 58323, 58332, 58340, + 58347, 58355, 58364, 58372, 58381, 58391, 58400, 58408, 58417, 58427, + 58436, 58446, 58457, 58467, 58476, 58484, 58493, 58503, 58512, 58522, + 58533, 58543, 58552, 58562, 58573, 58583, 58594, 58606, 58617, 58627, + 58636, 58644, 58653, 58663, 58672, 58682, 58693, 58703, 58712, 58722, + 58733, 58743, 58754, 58766, 58777, 58787, 58796, 58806, 58817, 58827, + 58838, 58850, 58861, 58871, 58882, 58894, 58905, 58917, 58930, 58942, + 58953, 58963, 58972, 58980, 58987, 58995, 59004, 59012, 59021, 59031, + 59040, 59048, 59057, 59067, 59076, 59086, 59097, 59107, 59116, 59124, + 59133, 59143, 59152, 59162, 59173, 59183, 59192, 59202, 59213, 59223, + 59234, 59246, 59257, 59267, 59276, 59284, 59293, 59303, 59312, 59322, + 59333, 59343, 59352, 59362, 59373, 59383, 59394, 59406, 59417, 59427, + 59436, 59446, 59457, 59467, 59478, 59490, 59501, 59511, 59522, 59534, + 59545, 59557, 59570, 59582, 59593, 59603, 59612, 59620, 59629, 59639, + 59648, 59658, 59669, 59679, 59688, 59698, 59709, 59719, 59730, 59742, + 59753, 59763, 59772, 59782, 59793, 59803, 59814, 59826, 59837, 59847, + 59858, 59870, 59881, 59893, 59906, 59918, 59929, 59939, 59948, 59958, + 59969, 59979, 59990, 60002, 60013, 60023, 60034, 60046, 60057, 60069, + 60082, 60094, 60105, 60115, 60126, 60138, 60149, 60161, 60174, 60186, + 60197, 60209, 60222, 60234, 60247, 60261, 60274, 60286, 60297, 60307, + 60316, 60324, 60331, 60336, 6029, 60343, 26688, 60348, 60353, 26693, + 60359, 17319, 31449, 60364, 60370, 60376, 60383, 60390, 60395, 60399, + 60403, 60412, 60418, 60430, 60441, 60445, 2936, 6004, 60450, 60453, + 60455, 60459, 60463, 60467, 34097, 60472, 60476, 60479, 60484, 60488, + 60495, 60501, 60505, 60509, 26703, 60512, 60519, 60528, 60536, 60547, + 60555, 60563, 60570, 60577, 60583, 60594, 26708, 60599, 60610, 60622, + 60633, 60641, 2484, 60646, 60659, 60663, 60671, 60676, 60684, 13908, + 60695, 60701, 60708, 60716, 60722, 26713, 60727, 7592, 50467, 60734, + 60737, 60745, 60758, 60771, 60784, 60797, 60804, 60815, 60824, 34102, + 34107, 60829, 60833, 60841, 60848, 60857, 60865, 60871, 60880, 60888, + 60896, 60900, 60909, 60918, 60928, 60941, 60954, 60964, 26718, 60970, + 60977, 60983, 26724, 60988, 60991, 60995, 61003, 61012, 33840, 61020, + 61028, 61035, 61043, 61053, 61062, 61071, 61080, 61088, 61099, 61109, + 7184, 17802, 61118, 61123, 61128, 61132, 61136, 61141, 61147, 61152, + 61157, 61163, 61168, 61173, 17767, 61178, 61185, 61193, 61201, 61206, + 61213, 61220, 61224, 61228, 61236, 61244, 26733, 61250, 61256, 61268, + 61274, 61279, 61290, 61300, 61310, 61322, 61328, 61338, 26738, 61347, + 61356, 61362, 61374, 61385, 61392, 61397, 61401, 61409, 61415, 61420, + 61425, 61432, 61444, 61454, 61463, 61470, 27937, 19731, 61476, 61481, + 61485, 61489, 61494, 61500, 61511, 61524, 61529, 26743, 61534, 61546, + 61555, 61568, 61575, 61584, 61592, 61597, 61603, 1484, 61608, 61613, + 61618, 61623, 61629, 61634, 61639, 61645, 61651, 61656, 61660, 61665, + 61670, 61675, 50973, 61680, 61685, 61690, 61695, 61701, 61707, 61712, + 61716, 61721, 61726, 61731, 61736, 61741, 61745, 61751, 61756, 61765, + 61770, 61775, 61780, 61785, 61789, 61796, 61802, 13605, 13612, 37872, + 61807, 61757, 61809, 26752, 61812, 61821, 61827, 4263, 26757, 61831, + 61837, 61843, 61848, 61852, 61859, 61864, 61874, 61883, 61887, 61893, + 61899, 61905, 61909, 61917, 61924, 61932, 61940, 26762, 61947, 61950, + 61957, 61962, 61966, 61972, 61977, 61981, 61990, 61998, 62004, 62009, + 27544, 62016, 62023, 62029, 62034, 62040, 62047, 62053, 26475, 22688, + 62059, 62064, 62070, 62082, 61790, 61797, 62092, 62097, 62104, 62111, + 62117, 62128, 62133, 6965, 62141, 62144, 62150, 62154, 62158, 62161, + 62167, 26571, 4283, 836, 10621, 62174, 62180, 62186, 62192, 62198, 62204, + 62210, 62216, 62222, 62227, 62232, 62237, 62242, 62247, 62252, 62257, + 62262, 62267, 62272, 62277, 62282, 62287, 62293, 62298, 62303, 62309, + 62314, 62319, 62325, 62331, 62337, 62343, 62349, 62355, 62361, 62367, + 62373, 62378, 62383, 62389, 62394, 62399, 62405, 62410, 62415, 62420, + 62425, 62430, 62435, 62440, 62445, 62450, 62455, 62460, 62465, 62471, + 62476, 62481, 62486, 62492, 62497, 62502, 62507, 62512, 62518, 62523, + 62528, 62533, 62538, 62543, 62548, 62553, 62558, 62563, 62568, 62573, + 62578, 62583, 62588, 62593, 62598, 62603, 62608, 62613, 62619, 62624, + 62629, 62634, 62639, 62644, 62649, 62654, 1846, 138, 62659, 62663, 62667, + 62672, 62680, 62684, 62691, 62699, 62703, 62716, 62720, 62723, 62728, + 62732, 62737, 62741, 62749, 62753, 17327, 62758, 62762, 62766, 62769, + 62777, 62782, 62789, 62795, 62801, 62806, 62814, 56276, 62821, 62826, + 62831, 62835, 62839, 62842, 62847, 62852, 62856, 62859, 62865, 62869, + 62879, 62888, 62891, 62904, 62912, 62920, 62930, 62943, 62950, 62961, + 62967, 62972, 62977, 62983, 62992, 61536, 63000, 63006, 63014, 63018, + 63022, 63028, 63036, 63048, 63060, 63067, 63071, 63082, 63090, 63097, + 63109, 63117, 63125, 63132, 63138, 63148, 63157, 63162, 63172, 63176, + 63180, 63190, 63197, 63209, 63221, 63230, 60649, 63237, 63248, 63262, + 63270, 63280, 63287, 63295, 63304, 63312, 63322, 63331, 63342, 63354, + 63363, 63373, 63380, 63389, 63404, 63413, 63426, 63441, 63445, 63457, + 63468, 63479, 63490, 63500, 63511, 63519, 63525, 63535, 63541, 63546, + 63552, 63558, 63563, 63570, 7469, 13928, 63576, 63581, 63588, 63594, + 63599, 63603, 63606, 63609, 63611, 63618, 63629, 63634, 63638, 63644, + 63649, 63657, 56720, 56730, 63663, 63673, 63680, 63686, 63691, 63700, + 63707, 63715, 63724, 63730, 63736, 63743, 63750, 63755, 63759, 63764, + 63769, 63774, 63778, 62711, 63787, 63791, 63802, 63812, 13937, 63823, + 63831, 13949, 63838, 22598, 63842, 63846, 63851, 63868, 63880, 8169, + 63892, 63897, 63902, 63907, 63911, 63914, 63919, 63924, 63930, 63935, + 4075, 17378, 63940, 63945, 63951, 63958, 63963, 63968, 63974, 63980, + 63986, 63991, 63997, 64001, 64015, 64023, 64031, 64037, 64042, 64049, + 64054, 64059, 64067, 64072, 64078, 64083, 64088, 64092, 64095, 64113, + 64132, 64145, 64159, 64175, 64182, 64189, 64195, 64202, 64207, 64213, + 64219, 64224, 64229, 64245, 8182, 64259, 64266, 64270, 64273, 64278, + 64283, 64290, 64295, 64300, 64305, 64309, 64317, 9090, 64326, 64331, + 64337, 9101, 64342, 64345, 64350, 64360, 64369, 64374, 64382, 64389, + 64400, 64410, 64415, 64420, 64427, 64433, 64438, 64445, 64454, 64462, + 64468, 64475, 64481, 64485, 13451, 2910, 64490, 64494, 64500, 64506, + 64513, 64517, 64538, 64560, 64576, 64593, 64612, 64621, 64631, 64638, + 64645, 22517, 64651, 64655, 64663, 64669, 64677, 64681, 64689, 64696, + 64700, 64706, 64712, 64717, 3375, 34302, 64723, 64727, 64731, 64735, + 64740, 64745, 64750, 64756, 64761, 64767, 64772, 64777, 64781, 64786, + 34317, 64790, 64795, 64803, 64807, 64812, 64819, 64828, 64834, 64841, + 64845, 64852, 64861, 64866, 64874, 64883, 64889, 64894, 64899, 64905, + 64911, 64916, 64920, 64924, 64927, 64935, 64945, 64950, 32057, 64958, + 64970, 64974, 64986, 64997, 65004, 65010, 65017, 65029, 65036, 65042, + 17439, 65046, 65052, 65058, 65063, 65068, 5084, 65073, 65079, 65087, + 65096, 65100, 65106, 64782, 24971, 65111, 65113, 65118, 65123, 65128, + 65133, 65138, 65143, 65148, 65153, 65158, 65163, 65168, 65173, 65178, + 65183, 65189, 65194, 65199, 65204, 65209, 65214, 65219, 65224, 65229, + 65235, 65241, 65247, 65252, 65257, 65269, 65274, 1852, 67, 65279, 65284, + 26772, 26777, 26782, 26788, 26793, 65288, 26798, 65310, 65312, 65316, + 65320, 65325, 65329, 26802, 65333, 26807, 65341, 65344, 26812, 18179, + 65353, 65357, 1415, 65362, 26823, 65365, 65370, 21354, 21364, 65375, + 65379, 65384, 65390, 65395, 65404, 65409, 65416, 65422, 65427, 65432, + 65437, 65445, 26828, 1110, 65452, 65458, 65463, 65468, 65473, 65479, + 65484, 65491, 65497, 65502, 65510, 65516, 13959, 65523, 29296, 65536, + 65541, 65547, 65560, 65564, 65573, 65580, 65586, 65594, 65603, 65610, + 65616, 26832, 65619, 65626, 65632, 65636, 65639, 65647, 65661, 65668, + 26837, 65674, 26842, 65681, 28422, 65691, 65696, 65700, 17717, 65705, + 65710, 26847, 54013, 65714, 65719, 65725, 65731, 65738, 65744, 65749, + 65754, 65763, 65775, 65790, 27067, 65796, 13117, 26851, 65800, 65807, + 26856, 65813, 65822, 65829, 65838, 65844, 65849, 65855, 26861, 65860, + 65869, 65878, 65885, 65891, 65897, 65905, 65909, 26866, 65912, 26872, + 26878, 65917, 65925, 65935, 26883, 65939, 65941, 65945, 65950, 65954, + 65958, 65964, 65969, 65973, 65978, 2915, 65982, 65989, 65993, 66002, + 66010, 66017, 66022, 66027, 66031, 66035, 66038, 66044, 66052, 66058, + 66062, 66067, 66074, 66080, 28799, 66085, 66088, 66093, 66097, 66102, + 66107, 66111, 66119, 21373, 21382, 66125, 66131, 66137, 66142, 66146, + 66149, 66159, 66164, 66170, 66176, 66184, 66189, 28438, 66193, 66201, + 66207, 66212, 66217, 50653, 28444, 66223, 66228, 66232, 66237, 66242, + 66247, 66251, 66256, 66261, 66267, 66272, 66277, 66283, 66289, 66294, + 66298, 66303, 66308, 66313, 66317, 66322, 66327, 66332, 66338, 66344, + 66350, 66355, 66359, 66364, 66369, 66373, 66378, 66383, 66388, 66392, + 26887, 66400, 66404, 66412, 18521, 66423, 66429, 66436, 66441, 66450, + 66455, 66459, 66464, 66472, 66480, 66487, 56422, 66493, 66501, 66508, + 66519, 66525, 26897, 66528, 66535, 32183, 66539, 66544, 66549, 6877, + 66553, 66561, 66568, 66575, 66581, 66445, 66595, 66601, 66605, 66608, + 66616, 66623, 66628, 66641, 66648, 66653, 66658, 66661, 66668, 66672, + 66682, 66692, 66701, 66712, 66717, 66721, 28813, 17641, 32629, 66729, + 66734, 66739, 66744, 66749, 66754, 66759, 66763, 66768, 66773, 66778, + 66783, 66788, 66793, 66797, 66802, 66807, 66811, 66815, 66819, 66823, + 66828, 66833, 66837, 66842, 66846, 66850, 66855, 66860, 66865, 66870, + 66874, 66879, 66884, 66888, 66893, 66898, 66903, 66908, 66913, 66918, + 66923, 66928, 66933, 66938, 66943, 66948, 66953, 66958, 66963, 66968, + 66973, 66978, 66983, 66988, 66992, 66997, 67002, 67007, 67012, 67017, + 67022, 67027, 67032, 67037, 67042, 67047, 67051, 67056, 67060, 67065, + 67070, 67075, 67080, 67085, 67090, 67095, 67100, 67105, 67109, 67113, + 67118, 67123, 67127, 67132, 67137, 67141, 67146, 67151, 67156, 67161, + 67165, 67170, 67175, 67179, 67184, 67188, 67192, 67196, 67200, 67205, + 67209, 67213, 67217, 67221, 67225, 67229, 67233, 67237, 67241, 67246, + 67251, 67256, 67261, 67266, 67271, 67276, 67281, 67286, 67291, 67295, + 67299, 67303, 67307, 67311, 67315, 67320, 67324, 67329, 67333, 67338, + 67343, 67347, 67351, 67356, 67360, 67364, 67368, 67372, 67376, 67380, + 67384, 67388, 67392, 67396, 67400, 67404, 67408, 67412, 67417, 67422, + 67426, 67430, 67434, 67438, 67442, 67446, 67451, 67455, 67459, 67463, + 67467, 67471, 67475, 67480, 67484, 67489, 67493, 67497, 67501, 67505, + 67509, 67513, 67517, 67521, 67525, 67529, 67533, 67538, 67542, 67546, + 67550, 67554, 67558, 67562, 67566, 67570, 67574, 67578, 67582, 67587, + 67591, 67595, 67600, 67605, 67609, 67613, 67617, 67621, 67625, 67629, + 67633, 67637, 67642, 67646, 67651, 67655, 67660, 67664, 67669, 67673, + 67679, 67684, 67688, 67693, 67697, 67702, 67706, 67711, 67715, 67720, + 1503, 67724, 1741, 1746, 67728, 67732, 2711, 67736, 1384, 67741, 1350, + 67745, 67749, 67756, 67763, 67777, 2727, 5159, 67786, 67794, 67801, + 67808, 67821, 67834, 67845, 67850, 67857, 67869, 3703, 9162, 67873, + 67878, 67887, 67897, 67902, 67906, 67911, 67918, 67924, 67936, 1355, + 11688, 67946, 67952, 67966, 67978, 67987, 67996, 68005, 68013, 68024, + 68032, 3742, 68042, 68051, 68057, 68064, 28919, 68069, 2755, 10316, + 68073, 68080, 6828, 68089, 2760, 26495, 68095, 68102, 68108, 68115, + 68121, 68128, 68138, 68147, 68158, 68165, 68171, 68181, 68189, 68195, + 68210, 68216, 68221, 68228, 68231, 68237, 68244, 68250, 68258, 68267, + 68275, 68281, 68290, 33842, 68304, 68309, 11709, 68315, 68328, 68337, + 68345, 68352, 68356, 68360, 68363, 68370, 68377, 68385, 68393, 68402, + 68410, 11645, 68418, 68423, 68427, 68439, 68446, 68455, 793, 68465, 2776, + 68474, 68478, 68484, 68497, 68509, 68519, 68528, 68540, 68548, 68557, + 68568, 68579, 68589, 68599, 68608, 68616, 8811, 68623, 68627, 68632, + 68637, 68643, 1360, 9217, 68650, 68661, 68670, 68678, 68687, 68695, + 68711, 68722, 68738, 68748, 68769, 68782, 68795, 68800, 68806, 22084, + 68812, 68815, 68822, 68832, 6139, 68839, 68844, 68849, 68857, 7517, 7526, + 68865, 68876, 2784, 2789, 68882, 8419, 68888, 68895, 68902, 68915, 2193, + 50, 68920, 68925, 68935, 68941, 68945, 68950, 68954, 2812, 68966, 68974, + 68985, 68996, 69005, 69010, 69016, 69021, 69031, 69041, 69046, 69052, + 69057, 69066, 17674, 69070, 3804, 12, 69075, 69082, 766, 69088, 69093, + 52873, 69098, 69103, 69109, 69117, 69122, 69129, 69135, 30869, 33740, + 69141, 2816, 32, 69151, 69164, 69172, 69177, 69183, 2838, 25639, 69188, + 69196, 69203, 69208, 50895, 53694, 69217, 1686, 1795, 69222, 69227, + 69234, 1799, 237, 69241, 69247, 69252, 69259, 1803, 69264, 69270, 69275, + 69287, 4250, 69297, 1810, 69303, 69308, 69315, 69322, 69337, 69344, + 69352, 69356, 69360, 69372, 69377, 69381, 23272, 3830, 69385, 69396, + 69400, 69404, 69410, 69414, 69423, 69427, 69438, 69442, 2238, 69446, + 69448, 2935, 7189, 69456, 69461, 69465, 69474, 69480, 2905, 13622, 69484, + 69497, 69515, 69520, 69528, 69536, 69546, 69558, 69571, 69578, 69594, + 69601, 69607, 958, 69614, 69621, 69631, 69640, 69652, 34706, 69660, 2919, + 9391, 69663, 69671, 69675, 2923, 69679, 17523, 52946, 3514, 69683, 2929, + 69687, 69697, 69703, 69709, 69715, 69721, 69727, 69733, 69739, 69745, + 69751, 69757, 69763, 69769, 69775, 69781, 69787, 69793, 69799, 69805, + 69811, 69817, 69823, 69829, 69835, 69841, 69847, 69854, 69861, 69867, + 69873, 69879, 69885, 69891, 69897, 1365, 12692, 9411, 69903, 69908, + 69913, 69918, 69923, 69928, 69933, 69938, 69943, 69948, 69953, 69958, + 69963, 69968, 69973, 69978, 69983, 69988, 69993, 69998, 70003, 70008, + 70013, 70018, 70023, 70028, 70034, 70039, 70044, 70050, 70055, 70061, + 70066, 70071, 70077, 70082, 70087, 70092, 70097, 70102, 70107, 70112, + 70117, 69698, 69704, 69710, 69716, 69722, 69728, 69734, 69740, 69746, + 69752, 69758, 69764, 69770, 69776, 69782, 70123, 69788, 69794, 69800, + 70129, 69806, 69812, 69818, 69824, 69830, 69836, 69842, 69862, 70135, + 70141, 69868, 70147, 69874, 69880, 69886, 69892, 69898, 2950, 2955, + 70153, 70158, 70161, 70167, 70173, 70180, 70185, 70190, 2243, }; /* code->name phrasebook */ #define phrasebook_shift 7 -#define phrasebook_short 222 +#define phrasebook_short 216 static unsigned char phrasebook[] = { - 0, 228, 145, 247, 149, 76, 232, 57, 76, 65, 53, 249, 150, 53, 233, 123, - 53, 254, 193, 254, 144, 42, 233, 180, 41, 233, 180, 254, 69, 79, 53, 251, - 54, 244, 94, 246, 218, 228, 38, 228, 161, 21, 223, 89, 21, 118, 21, 113, - 21, 166, 21, 158, 21, 173, 21, 183, 21, 194, 21, 187, 21, 192, 251, 61, - 229, 186, 237, 213, 53, 247, 204, 53, 245, 231, 53, 232, 69, 76, 251, 53, - 254, 62, 7, 6, 1, 57, 7, 6, 1, 254, 27, 7, 6, 1, 252, 44, 7, 6, 1, 222, - 222, 7, 6, 1, 72, 7, 6, 1, 247, 130, 7, 6, 1, 214, 7, 6, 1, 212, 7, 6, 1, - 74, 7, 6, 1, 239, 182, 7, 6, 1, 239, 76, 7, 6, 1, 149, 7, 6, 1, 185, 7, - 6, 1, 199, 7, 6, 1, 73, 7, 6, 1, 233, 244, 7, 6, 1, 232, 139, 7, 6, 1, - 146, 7, 6, 1, 193, 7, 6, 1, 227, 109, 7, 6, 1, 66, 7, 6, 1, 196, 7, 6, 1, - 224, 174, 7, 6, 1, 224, 73, 7, 6, 1, 224, 25, 7, 6, 1, 223, 119, 42, 37, - 104, 231, 193, 228, 161, 41, 37, 104, 251, 102, 255, 41, 184, 237, 170, - 245, 237, 255, 41, 7, 3, 1, 57, 7, 3, 1, 254, 27, 7, 3, 1, 252, 44, 7, 3, - 1, 222, 222, 7, 3, 1, 72, 7, 3, 1, 247, 130, 7, 3, 1, 214, 7, 3, 1, 212, - 7, 3, 1, 74, 7, 3, 1, 239, 182, 7, 3, 1, 239, 76, 7, 3, 1, 149, 7, 3, 1, - 185, 7, 3, 1, 199, 7, 3, 1, 73, 7, 3, 1, 233, 244, 7, 3, 1, 232, 139, 7, - 3, 1, 146, 7, 3, 1, 193, 7, 3, 1, 227, 109, 7, 3, 1, 66, 7, 3, 1, 196, 7, - 3, 1, 224, 174, 7, 3, 1, 224, 73, 7, 3, 1, 224, 25, 7, 3, 1, 223, 119, - 42, 250, 223, 104, 61, 237, 170, 41, 250, 223, 104, 205, 235, 5, 228, - 145, 239, 223, 247, 149, 76, 251, 220, 53, 232, 234, 53, 250, 222, 53, - 223, 222, 53, 252, 99, 125, 230, 206, 53, 219, 251, 13, 53, 247, 81, 234, - 29, 240, 7, 237, 235, 47, 254, 182, 232, 57, 76, 190, 53, 228, 165, 244, - 95, 231, 227, 53, 237, 63, 250, 62, 53, 233, 9, 53, 227, 219, 113, 227, - 219, 166, 255, 33, 255, 41, 236, 156, 53, 233, 38, 53, 236, 154, 249, - 140, 251, 226, 227, 219, 118, 237, 8, 234, 29, 240, 7, 231, 151, 47, 254, - 182, 232, 57, 76, 224, 189, 246, 235, 168, 232, 76, 224, 189, 246, 235, - 168, 245, 151, 224, 189, 246, 235, 152, 232, 74, 239, 223, 232, 69, 76, - 7, 6, 1, 102, 2, 245, 236, 7, 6, 1, 102, 2, 155, 7, 6, 1, 102, 2, 251, - 101, 7, 6, 1, 102, 2, 205, 7, 6, 1, 102, 2, 219, 7, 6, 1, 102, 2, 231, - 140, 46, 7, 6, 1, 255, 19, 7, 6, 1, 252, 45, 2, 251, 226, 7, 6, 1, 161, - 2, 245, 236, 7, 6, 1, 161, 2, 155, 7, 6, 1, 161, 2, 251, 101, 7, 6, 1, - 161, 2, 219, 7, 6, 1, 244, 81, 2, 245, 236, 7, 6, 1, 244, 81, 2, 155, 7, - 6, 1, 244, 81, 2, 251, 101, 7, 6, 1, 244, 81, 2, 219, 7, 6, 1, 247, 168, - 7, 6, 1, 236, 5, 2, 205, 7, 6, 1, 130, 2, 245, 236, 7, 6, 1, 130, 2, 155, - 7, 6, 1, 130, 2, 251, 101, 7, 6, 1, 130, 2, 205, 7, 6, 1, 130, 2, 219, - 236, 52, 53, 7, 6, 1, 130, 2, 82, 7, 6, 1, 97, 2, 245, 236, 7, 6, 1, 97, - 2, 155, 7, 6, 1, 97, 2, 251, 101, 7, 6, 1, 97, 2, 219, 7, 6, 1, 224, 26, - 2, 155, 7, 6, 1, 226, 196, 7, 3, 1, 229, 124, 193, 7, 3, 1, 102, 2, 245, - 236, 7, 3, 1, 102, 2, 155, 7, 3, 1, 102, 2, 251, 101, 7, 3, 1, 102, 2, - 205, 7, 3, 1, 102, 2, 219, 7, 3, 1, 102, 2, 231, 140, 46, 7, 3, 1, 255, - 19, 7, 3, 1, 252, 45, 2, 251, 226, 7, 3, 1, 161, 2, 245, 236, 7, 3, 1, - 161, 2, 155, 7, 3, 1, 161, 2, 251, 101, 7, 3, 1, 161, 2, 219, 7, 3, 1, - 244, 81, 2, 245, 236, 7, 3, 1, 244, 81, 2, 155, 7, 3, 1, 244, 81, 2, 251, - 101, 7, 3, 1, 244, 81, 2, 219, 7, 3, 1, 247, 168, 7, 3, 1, 236, 5, 2, - 205, 7, 3, 1, 130, 2, 245, 236, 7, 3, 1, 130, 2, 155, 7, 3, 1, 130, 2, - 251, 101, 7, 3, 1, 130, 2, 205, 7, 3, 1, 130, 2, 219, 249, 181, 53, 7, 3, - 1, 130, 2, 82, 7, 3, 1, 97, 2, 245, 236, 7, 3, 1, 97, 2, 155, 7, 3, 1, - 97, 2, 251, 101, 7, 3, 1, 97, 2, 219, 7, 3, 1, 224, 26, 2, 155, 7, 3, 1, - 226, 196, 7, 3, 1, 224, 26, 2, 219, 7, 6, 1, 102, 2, 237, 63, 7, 3, 1, - 102, 2, 237, 63, 7, 6, 1, 102, 2, 252, 106, 7, 3, 1, 102, 2, 252, 106, 7, - 6, 1, 102, 2, 234, 84, 7, 3, 1, 102, 2, 234, 84, 7, 6, 1, 252, 45, 2, - 155, 7, 3, 1, 252, 45, 2, 155, 7, 6, 1, 252, 45, 2, 251, 101, 7, 3, 1, - 252, 45, 2, 251, 101, 7, 6, 1, 252, 45, 2, 56, 46, 7, 3, 1, 252, 45, 2, - 56, 46, 7, 6, 1, 252, 45, 2, 252, 5, 7, 3, 1, 252, 45, 2, 252, 5, 7, 6, - 1, 250, 192, 2, 252, 5, 7, 3, 1, 250, 192, 2, 252, 5, 7, 6, 1, 250, 192, - 2, 82, 7, 3, 1, 250, 192, 2, 82, 7, 6, 1, 161, 2, 237, 63, 7, 3, 1, 161, - 2, 237, 63, 7, 6, 1, 161, 2, 252, 106, 7, 3, 1, 161, 2, 252, 106, 7, 6, - 1, 161, 2, 56, 46, 7, 3, 1, 161, 2, 56, 46, 7, 6, 1, 161, 2, 234, 84, 7, - 3, 1, 161, 2, 234, 84, 7, 6, 1, 161, 2, 252, 5, 7, 3, 1, 161, 2, 252, 5, - 7, 6, 1, 246, 196, 2, 251, 101, 7, 3, 1, 246, 196, 2, 251, 101, 7, 6, 1, - 246, 196, 2, 252, 106, 7, 3, 1, 246, 196, 2, 252, 106, 7, 6, 1, 246, 196, - 2, 56, 46, 7, 3, 1, 246, 196, 2, 56, 46, 7, 6, 1, 246, 196, 2, 251, 226, - 7, 3, 1, 246, 196, 2, 251, 226, 7, 6, 1, 245, 172, 2, 251, 101, 7, 3, 1, - 245, 172, 2, 251, 101, 7, 6, 1, 245, 172, 2, 82, 7, 3, 1, 245, 172, 2, - 82, 7, 6, 1, 244, 81, 2, 205, 7, 3, 1, 244, 81, 2, 205, 7, 6, 1, 244, 81, - 2, 237, 63, 7, 3, 1, 244, 81, 2, 237, 63, 7, 6, 1, 244, 81, 2, 252, 106, - 7, 3, 1, 244, 81, 2, 252, 106, 7, 6, 1, 244, 81, 2, 234, 84, 7, 3, 1, - 244, 81, 2, 234, 84, 7, 6, 1, 244, 81, 2, 56, 46, 7, 3, 1, 249, 139, 74, - 7, 6, 20, 240, 45, 7, 3, 20, 240, 45, 7, 6, 1, 239, 183, 2, 251, 101, 7, - 3, 1, 239, 183, 2, 251, 101, 7, 6, 1, 239, 77, 2, 251, 226, 7, 3, 1, 239, - 77, 2, 251, 226, 7, 3, 1, 238, 117, 7, 6, 1, 238, 47, 2, 155, 7, 3, 1, - 238, 47, 2, 155, 7, 6, 1, 238, 47, 2, 251, 226, 7, 3, 1, 238, 47, 2, 251, - 226, 7, 6, 1, 238, 47, 2, 252, 5, 7, 3, 1, 238, 47, 2, 252, 5, 7, 6, 1, - 238, 47, 2, 236, 154, 249, 140, 7, 3, 1, 238, 47, 2, 236, 154, 249, 140, - 7, 6, 1, 238, 47, 2, 82, 7, 3, 1, 238, 47, 2, 82, 7, 6, 1, 236, 5, 2, - 155, 7, 3, 1, 236, 5, 2, 155, 7, 6, 1, 236, 5, 2, 251, 226, 7, 3, 1, 236, - 5, 2, 251, 226, 7, 6, 1, 236, 5, 2, 252, 5, 7, 3, 1, 236, 5, 2, 252, 5, - 7, 3, 1, 236, 5, 232, 215, 252, 55, 254, 144, 7, 6, 1, 247, 228, 7, 3, 1, - 247, 228, 7, 6, 1, 130, 2, 237, 63, 7, 3, 1, 130, 2, 237, 63, 7, 6, 1, - 130, 2, 252, 106, 7, 3, 1, 130, 2, 252, 106, 7, 6, 1, 130, 2, 47, 155, 7, - 3, 1, 130, 2, 47, 155, 7, 6, 20, 234, 88, 7, 3, 20, 234, 88, 7, 6, 1, - 232, 27, 2, 155, 7, 3, 1, 232, 27, 2, 155, 7, 6, 1, 232, 27, 2, 251, 226, - 7, 3, 1, 232, 27, 2, 251, 226, 7, 6, 1, 232, 27, 2, 252, 5, 7, 3, 1, 232, - 27, 2, 252, 5, 7, 6, 1, 231, 35, 2, 155, 7, 3, 1, 231, 35, 2, 155, 7, 6, - 1, 231, 35, 2, 251, 101, 7, 3, 1, 231, 35, 2, 251, 101, 7, 6, 1, 231, 35, - 2, 251, 226, 7, 3, 1, 231, 35, 2, 251, 226, 7, 6, 1, 231, 35, 2, 252, 5, - 7, 3, 1, 231, 35, 2, 252, 5, 7, 6, 1, 227, 110, 2, 251, 226, 7, 3, 1, - 227, 110, 2, 251, 226, 7, 6, 1, 227, 110, 2, 252, 5, 7, 3, 1, 227, 110, - 2, 252, 5, 7, 6, 1, 227, 110, 2, 82, 7, 3, 1, 227, 110, 2, 82, 7, 6, 1, - 97, 2, 205, 7, 3, 1, 97, 2, 205, 7, 6, 1, 97, 2, 237, 63, 7, 3, 1, 97, 2, - 237, 63, 7, 6, 1, 97, 2, 252, 106, 7, 3, 1, 97, 2, 252, 106, 7, 6, 1, 97, - 2, 231, 140, 46, 7, 3, 1, 97, 2, 231, 140, 46, 7, 6, 1, 97, 2, 47, 155, - 7, 3, 1, 97, 2, 47, 155, 7, 6, 1, 97, 2, 234, 84, 7, 3, 1, 97, 2, 234, - 84, 7, 6, 1, 224, 175, 2, 251, 101, 7, 3, 1, 224, 175, 2, 251, 101, 7, 6, - 1, 224, 26, 2, 251, 101, 7, 3, 1, 224, 26, 2, 251, 101, 7, 6, 1, 224, 26, - 2, 219, 7, 6, 1, 223, 120, 2, 155, 7, 3, 1, 223, 120, 2, 155, 7, 6, 1, - 223, 120, 2, 56, 46, 7, 3, 1, 223, 120, 2, 56, 46, 7, 6, 1, 223, 120, 2, - 252, 5, 7, 3, 1, 223, 120, 2, 252, 5, 7, 3, 1, 182, 193, 7, 3, 1, 45, 2, - 82, 7, 6, 1, 45, 2, 88, 7, 6, 1, 45, 2, 226, 103, 7, 3, 1, 45, 2, 226, - 103, 7, 6, 1, 206, 183, 7, 3, 1, 206, 183, 7, 6, 1, 234, 44, 73, 7, 6, 1, - 252, 45, 2, 88, 7, 3, 1, 252, 45, 2, 88, 7, 6, 1, 255, 10, 222, 222, 7, - 6, 1, 250, 192, 2, 88, 7, 6, 1, 250, 192, 2, 226, 103, 7, 3, 1, 250, 192, - 2, 226, 103, 7, 3, 1, 209, 250, 47, 7, 6, 1, 200, 72, 7, 6, 1, 230, 222, - 7, 6, 1, 234, 44, 72, 7, 6, 1, 247, 131, 2, 88, 7, 3, 1, 247, 131, 2, 88, - 7, 6, 1, 246, 196, 2, 88, 7, 6, 1, 246, 169, 7, 3, 1, 244, 128, 7, 6, 1, - 239, 215, 7, 6, 1, 244, 81, 2, 82, 7, 6, 1, 239, 77, 2, 88, 7, 3, 1, 239, - 77, 2, 88, 7, 3, 1, 238, 47, 2, 125, 7, 3, 1, 238, 18, 2, 82, 7, 6, 1, - 209, 185, 7, 6, 1, 236, 5, 2, 42, 88, 7, 3, 1, 236, 5, 2, 182, 41, 237, - 229, 7, 6, 1, 130, 2, 236, 154, 205, 7, 6, 1, 130, 2, 244, 160, 7, 3, 1, - 130, 2, 244, 160, 7, 6, 1, 234, 80, 7, 3, 1, 234, 80, 7, 6, 1, 233, 245, - 2, 88, 7, 3, 1, 233, 245, 2, 88, 7, 1, 223, 160, 7, 6, 1, 206, 113, 7, 3, - 1, 206, 113, 7, 6, 1, 247, 183, 7, 1, 200, 247, 184, 237, 124, 7, 3, 1, - 227, 110, 2, 233, 229, 88, 7, 6, 1, 227, 110, 2, 88, 7, 3, 1, 227, 110, - 2, 88, 7, 6, 1, 227, 110, 2, 231, 196, 88, 7, 6, 1, 97, 2, 244, 160, 7, - 3, 1, 97, 2, 244, 160, 7, 6, 1, 225, 110, 7, 6, 1, 225, 65, 2, 88, 7, 6, - 1, 224, 26, 2, 88, 7, 3, 1, 224, 26, 2, 88, 7, 6, 1, 223, 120, 2, 82, 7, - 3, 1, 223, 120, 2, 82, 7, 6, 1, 247, 132, 7, 6, 1, 247, 133, 231, 192, 7, - 3, 1, 247, 133, 231, 192, 7, 3, 1, 247, 133, 2, 227, 89, 7, 1, 135, 2, - 82, 7, 6, 1, 206, 173, 7, 3, 1, 206, 173, 7, 1, 239, 223, 246, 16, 228, - 39, 2, 82, 7, 1, 224, 75, 7, 1, 250, 41, 251, 89, 7, 1, 238, 2, 251, 89, - 7, 1, 254, 200, 251, 89, 7, 1, 231, 196, 251, 89, 7, 6, 1, 248, 72, 2, - 252, 5, 7, 6, 1, 250, 192, 2, 3, 1, 223, 120, 2, 252, 5, 7, 3, 1, 248, - 72, 2, 252, 5, 7, 6, 1, 237, 152, 7, 6, 1, 238, 47, 2, 3, 1, 239, 182, 7, - 3, 1, 237, 152, 7, 6, 1, 235, 50, 7, 6, 1, 236, 5, 2, 3, 1, 239, 182, 7, - 3, 1, 235, 50, 7, 6, 1, 102, 2, 252, 5, 7, 3, 1, 102, 2, 252, 5, 7, 6, 1, - 244, 81, 2, 252, 5, 7, 3, 1, 244, 81, 2, 252, 5, 7, 6, 1, 130, 2, 252, 5, - 7, 3, 1, 130, 2, 252, 5, 7, 6, 1, 97, 2, 252, 5, 7, 3, 1, 97, 2, 252, 5, - 7, 6, 1, 97, 2, 250, 3, 22, 237, 63, 7, 3, 1, 97, 2, 250, 3, 22, 237, 63, - 7, 6, 1, 97, 2, 250, 3, 22, 155, 7, 3, 1, 97, 2, 250, 3, 22, 155, 7, 6, - 1, 97, 2, 250, 3, 22, 252, 5, 7, 3, 1, 97, 2, 250, 3, 22, 252, 5, 7, 6, - 1, 97, 2, 250, 3, 22, 245, 236, 7, 3, 1, 97, 2, 250, 3, 22, 245, 236, 7, - 3, 1, 209, 72, 7, 6, 1, 102, 2, 250, 3, 22, 237, 63, 7, 3, 1, 102, 2, - 250, 3, 22, 237, 63, 7, 6, 1, 102, 2, 56, 64, 22, 237, 63, 7, 3, 1, 102, - 2, 56, 64, 22, 237, 63, 7, 6, 1, 255, 20, 2, 237, 63, 7, 3, 1, 255, 20, - 2, 237, 63, 7, 6, 1, 246, 196, 2, 82, 7, 3, 1, 246, 196, 2, 82, 7, 6, 1, - 246, 196, 2, 252, 5, 7, 3, 1, 246, 196, 2, 252, 5, 7, 6, 1, 239, 77, 2, - 252, 5, 7, 3, 1, 239, 77, 2, 252, 5, 7, 6, 1, 130, 2, 234, 84, 7, 3, 1, - 130, 2, 234, 84, 7, 6, 1, 130, 2, 234, 85, 22, 237, 63, 7, 3, 1, 130, 2, - 234, 85, 22, 237, 63, 7, 6, 1, 247, 133, 2, 252, 5, 7, 3, 1, 247, 133, 2, - 252, 5, 7, 3, 1, 239, 183, 2, 252, 5, 7, 6, 1, 248, 71, 7, 6, 1, 250, - 192, 2, 3, 1, 223, 119, 7, 3, 1, 248, 71, 7, 6, 1, 246, 196, 2, 155, 7, - 3, 1, 246, 196, 2, 155, 7, 6, 1, 244, 126, 7, 6, 1, 224, 75, 7, 6, 1, - 236, 5, 2, 245, 236, 7, 3, 1, 236, 5, 2, 245, 236, 7, 6, 1, 102, 2, 231, - 140, 64, 22, 155, 7, 3, 1, 102, 2, 231, 140, 64, 22, 155, 7, 6, 1, 255, - 20, 2, 155, 7, 3, 1, 255, 20, 2, 155, 7, 6, 1, 130, 2, 195, 22, 155, 7, - 3, 1, 130, 2, 195, 22, 155, 7, 6, 1, 102, 2, 47, 245, 236, 7, 3, 1, 102, - 2, 47, 245, 236, 7, 6, 1, 102, 2, 239, 223, 252, 106, 7, 3, 1, 102, 2, - 239, 223, 252, 106, 7, 6, 1, 161, 2, 47, 245, 236, 7, 3, 1, 161, 2, 47, - 245, 236, 7, 6, 1, 161, 2, 239, 223, 252, 106, 7, 3, 1, 161, 2, 239, 223, - 252, 106, 7, 6, 1, 244, 81, 2, 47, 245, 236, 7, 3, 1, 244, 81, 2, 47, - 245, 236, 7, 6, 1, 244, 81, 2, 239, 223, 252, 106, 7, 3, 1, 244, 81, 2, - 239, 223, 252, 106, 7, 6, 1, 130, 2, 47, 245, 236, 7, 3, 1, 130, 2, 47, - 245, 236, 7, 6, 1, 130, 2, 239, 223, 252, 106, 7, 3, 1, 130, 2, 239, 223, - 252, 106, 7, 6, 1, 232, 27, 2, 47, 245, 236, 7, 3, 1, 232, 27, 2, 47, - 245, 236, 7, 6, 1, 232, 27, 2, 239, 223, 252, 106, 7, 3, 1, 232, 27, 2, - 239, 223, 252, 106, 7, 6, 1, 97, 2, 47, 245, 236, 7, 3, 1, 97, 2, 47, - 245, 236, 7, 6, 1, 97, 2, 239, 223, 252, 106, 7, 3, 1, 97, 2, 239, 223, - 252, 106, 7, 6, 1, 231, 35, 2, 251, 55, 51, 7, 3, 1, 231, 35, 2, 251, 55, - 51, 7, 6, 1, 227, 110, 2, 251, 55, 51, 7, 3, 1, 227, 110, 2, 251, 55, 51, - 7, 6, 1, 223, 174, 7, 3, 1, 223, 174, 7, 6, 1, 245, 172, 2, 252, 5, 7, 3, - 1, 245, 172, 2, 252, 5, 7, 6, 1, 236, 5, 2, 182, 41, 237, 229, 7, 3, 1, - 250, 192, 2, 250, 224, 7, 6, 1, 234, 13, 7, 3, 1, 234, 13, 7, 6, 1, 223, - 120, 2, 88, 7, 3, 1, 223, 120, 2, 88, 7, 6, 1, 102, 2, 56, 46, 7, 3, 1, - 102, 2, 56, 46, 7, 6, 1, 161, 2, 251, 226, 7, 3, 1, 161, 2, 251, 226, 7, - 6, 1, 130, 2, 250, 3, 22, 237, 63, 7, 3, 1, 130, 2, 250, 3, 22, 237, 63, - 7, 6, 1, 130, 2, 226, 159, 22, 237, 63, 7, 3, 1, 130, 2, 226, 159, 22, - 237, 63, 7, 6, 1, 130, 2, 56, 46, 7, 3, 1, 130, 2, 56, 46, 7, 6, 1, 130, - 2, 56, 64, 22, 237, 63, 7, 3, 1, 130, 2, 56, 64, 22, 237, 63, 7, 6, 1, - 224, 26, 2, 237, 63, 7, 3, 1, 224, 26, 2, 237, 63, 7, 3, 1, 238, 47, 2, - 250, 224, 7, 3, 1, 236, 5, 2, 250, 224, 7, 3, 1, 227, 110, 2, 250, 224, - 7, 3, 1, 249, 139, 239, 182, 7, 3, 1, 250, 119, 249, 223, 7, 3, 1, 232, - 85, 249, 223, 7, 6, 1, 102, 2, 82, 7, 6, 1, 252, 45, 2, 82, 7, 3, 1, 252, - 45, 2, 82, 7, 6, 1, 238, 47, 2, 125, 7, 6, 1, 227, 110, 2, 250, 1, 82, 7, - 3, 1, 231, 35, 2, 227, 197, 227, 89, 7, 3, 1, 223, 120, 2, 227, 197, 227, - 89, 7, 6, 1, 246, 16, 228, 38, 7, 3, 1, 246, 16, 228, 38, 7, 6, 1, 45, 2, - 82, 7, 6, 1, 97, 125, 7, 6, 1, 209, 196, 7, 6, 1, 161, 2, 82, 7, 3, 1, - 161, 2, 82, 7, 6, 1, 239, 183, 2, 82, 7, 3, 1, 239, 183, 2, 82, 7, 6, 1, - 3, 232, 140, 2, 244, 217, 227, 89, 7, 3, 1, 232, 140, 2, 244, 217, 227, - 89, 7, 6, 1, 232, 27, 2, 82, 7, 3, 1, 232, 27, 2, 82, 7, 6, 1, 224, 26, - 2, 82, 7, 3, 1, 224, 26, 2, 82, 7, 3, 1, 209, 57, 7, 3, 1, 254, 205, 7, - 3, 1, 209, 254, 205, 7, 3, 1, 45, 2, 88, 7, 3, 1, 234, 44, 73, 7, 3, 1, - 252, 45, 2, 250, 224, 7, 3, 1, 250, 192, 2, 227, 89, 7, 3, 1, 250, 192, - 2, 88, 7, 3, 1, 200, 72, 7, 3, 1, 230, 222, 7, 3, 1, 230, 223, 2, 88, 7, - 3, 1, 234, 44, 72, 7, 3, 1, 200, 234, 44, 72, 7, 3, 1, 200, 234, 44, 161, - 2, 88, 7, 3, 1, 251, 82, 200, 234, 44, 72, 7, 3, 1, 249, 139, 239, 183, - 2, 82, 7, 3, 1, 246, 196, 2, 88, 7, 3, 1, 95, 214, 7, 1, 3, 6, 214, 7, 3, - 1, 246, 169, 7, 3, 1, 232, 4, 244, 160, 7, 3, 1, 209, 212, 7, 3, 1, 245, - 172, 2, 88, 7, 3, 1, 245, 99, 2, 88, 7, 3, 1, 244, 81, 2, 82, 7, 3, 1, - 239, 215, 7, 1, 3, 6, 74, 7, 3, 1, 238, 47, 2, 236, 154, 205, 7, 3, 1, - 238, 47, 2, 252, 212, 7, 3, 1, 238, 47, 2, 231, 196, 88, 7, 3, 1, 237, - 207, 7, 3, 1, 209, 185, 7, 3, 1, 209, 237, 69, 2, 182, 237, 229, 7, 3, 1, - 237, 69, 2, 88, 7, 3, 1, 236, 5, 2, 42, 88, 7, 3, 1, 236, 5, 2, 231, 196, - 88, 7, 1, 3, 6, 199, 7, 3, 1, 253, 31, 73, 7, 1, 3, 6, 234, 88, 7, 3, 1, - 251, 82, 234, 66, 7, 3, 1, 233, 87, 7, 3, 1, 209, 146, 7, 3, 1, 209, 232, - 27, 2, 182, 237, 229, 7, 3, 1, 209, 232, 27, 2, 88, 7, 3, 1, 232, 27, 2, - 182, 237, 229, 7, 3, 1, 232, 27, 2, 227, 89, 7, 3, 1, 232, 27, 2, 247, - 40, 7, 3, 1, 200, 232, 27, 2, 247, 40, 7, 1, 3, 6, 146, 7, 1, 3, 6, 239, - 223, 146, 7, 3, 1, 231, 35, 2, 88, 7, 3, 1, 247, 183, 7, 3, 1, 249, 139, - 239, 183, 2, 195, 22, 88, 7, 3, 1, 228, 116, 200, 247, 183, 7, 3, 1, 247, - 184, 2, 250, 224, 7, 3, 1, 209, 227, 109, 7, 3, 1, 227, 110, 2, 231, 196, - 88, 7, 3, 1, 97, 125, 7, 3, 1, 225, 110, 7, 3, 1, 225, 65, 2, 88, 7, 3, - 1, 209, 196, 7, 3, 1, 209, 224, 174, 7, 3, 1, 209, 224, 25, 7, 1, 3, 6, - 224, 25, 7, 3, 1, 223, 120, 2, 231, 196, 88, 7, 3, 1, 223, 120, 2, 250, - 224, 7, 3, 1, 247, 132, 7, 3, 1, 247, 133, 2, 250, 224, 7, 1, 246, 16, - 228, 38, 7, 1, 233, 91, 224, 204, 246, 227, 7, 1, 239, 223, 246, 16, 228, - 38, 7, 1, 228, 26, 252, 44, 7, 1, 252, 171, 251, 89, 7, 1, 3, 6, 254, 27, - 7, 3, 1, 251, 82, 234, 44, 72, 7, 1, 3, 6, 246, 196, 2, 88, 7, 1, 3, 6, - 212, 7, 3, 1, 239, 183, 2, 250, 240, 7, 3, 1, 209, 239, 76, 7, 1, 3, 6, - 149, 7, 3, 1, 232, 140, 2, 88, 7, 1, 246, 16, 228, 39, 2, 82, 7, 1, 200, - 246, 16, 228, 39, 2, 82, 7, 3, 1, 248, 72, 249, 223, 7, 3, 1, 250, 23, - 249, 223, 7, 3, 1, 248, 72, 249, 224, 2, 250, 224, 7, 3, 1, 226, 46, 249, - 223, 7, 3, 1, 227, 15, 249, 223, 7, 3, 1, 227, 51, 249, 224, 2, 250, 224, - 7, 3, 1, 247, 79, 249, 223, 7, 3, 1, 237, 112, 249, 223, 7, 3, 1, 237, - 70, 249, 223, 7, 1, 252, 171, 233, 122, 7, 1, 252, 178, 233, 122, 7, 3, - 1, 209, 245, 172, 2, 247, 40, 7, 3, 1, 209, 245, 172, 2, 247, 41, 22, - 227, 89, 52, 1, 3, 212, 52, 1, 3, 245, 172, 2, 88, 52, 1, 3, 239, 182, - 52, 1, 3, 146, 52, 1, 3, 209, 146, 52, 1, 3, 209, 232, 27, 2, 88, 52, 1, - 3, 6, 239, 223, 146, 52, 1, 3, 224, 174, 52, 1, 3, 224, 25, 52, 1, 232, - 205, 52, 1, 47, 232, 205, 52, 1, 209, 251, 54, 52, 1, 254, 144, 52, 1, - 200, 251, 54, 52, 1, 41, 132, 231, 139, 52, 1, 42, 132, 231, 139, 52, 1, - 246, 16, 228, 38, 52, 1, 200, 246, 16, 228, 38, 52, 1, 42, 254, 93, 52, - 1, 41, 254, 93, 52, 1, 99, 254, 93, 52, 1, 103, 254, 93, 52, 1, 251, 102, - 255, 41, 252, 5, 52, 1, 61, 237, 170, 52, 1, 237, 63, 52, 1, 255, 33, - 255, 41, 52, 1, 245, 237, 255, 41, 52, 1, 184, 61, 237, 170, 52, 1, 184, - 237, 63, 52, 1, 184, 245, 237, 255, 41, 52, 1, 184, 255, 33, 255, 41, 52, - 1, 226, 75, 251, 61, 52, 1, 132, 226, 75, 251, 61, 52, 1, 251, 217, 41, - 132, 231, 139, 52, 1, 251, 217, 42, 132, 231, 139, 52, 1, 99, 227, 96, - 52, 1, 103, 227, 96, 52, 1, 79, 53, 52, 1, 236, 121, 53, 252, 106, 56, - 46, 231, 140, 46, 234, 84, 3, 205, 47, 255, 33, 255, 41, 52, 1, 231, 181, - 88, 52, 1, 250, 244, 255, 41, 52, 1, 3, 246, 169, 52, 1, 3, 149, 52, 1, - 3, 193, 52, 1, 3, 224, 73, 52, 1, 3, 200, 246, 16, 228, 38, 52, 1, 247, - 140, 206, 125, 52, 1, 201, 206, 125, 52, 1, 236, 155, 206, 125, 52, 1, - 184, 206, 125, 52, 1, 247, 139, 206, 125, 52, 1, 223, 193, 250, 38, 206, - 76, 52, 1, 223, 249, 250, 38, 206, 76, 52, 1, 224, 202, 52, 1, 225, 136, - 52, 1, 47, 254, 144, 52, 1, 184, 103, 254, 93, 52, 1, 184, 99, 254, 93, - 52, 1, 184, 42, 254, 93, 52, 1, 184, 41, 254, 93, 52, 1, 184, 231, 139, - 52, 1, 236, 154, 245, 237, 255, 41, 52, 1, 236, 154, 47, 245, 237, 255, - 41, 52, 1, 236, 154, 47, 255, 33, 255, 41, 52, 1, 184, 205, 52, 1, 232, - 8, 251, 61, 52, 1, 252, 226, 201, 226, 118, 52, 1, 247, 233, 201, 226, - 118, 52, 1, 252, 226, 184, 226, 118, 52, 1, 247, 233, 184, 226, 118, 52, - 1, 229, 105, 52, 1, 234, 44, 229, 105, 52, 1, 184, 42, 58, 36, 245, 237, - 255, 41, 36, 255, 33, 255, 41, 36, 251, 102, 255, 41, 36, 205, 36, 237, - 63, 36, 234, 1, 36, 252, 106, 36, 56, 46, 36, 219, 36, 244, 217, 46, 36, - 231, 140, 46, 36, 47, 255, 33, 255, 41, 36, 252, 5, 36, 61, 237, 171, 46, - 36, 47, 61, 237, 171, 46, 36, 47, 245, 237, 255, 41, 36, 252, 19, 36, - 239, 223, 252, 106, 36, 209, 251, 55, 46, 36, 251, 55, 46, 36, 200, 251, - 55, 46, 36, 251, 55, 64, 231, 153, 36, 245, 237, 255, 42, 51, 36, 255, - 33, 255, 42, 51, 36, 42, 227, 97, 51, 36, 41, 227, 97, 51, 36, 42, 254, - 182, 46, 36, 244, 160, 36, 42, 132, 231, 140, 51, 36, 99, 227, 97, 51, - 36, 103, 227, 97, 51, 36, 79, 5, 51, 36, 236, 121, 5, 51, 36, 233, 227, - 244, 217, 51, 36, 231, 196, 244, 217, 51, 36, 56, 51, 36, 250, 3, 51, 36, - 231, 140, 51, 36, 251, 55, 51, 36, 251, 226, 36, 234, 84, 36, 61, 237, - 171, 51, 36, 252, 102, 51, 36, 239, 223, 47, 254, 121, 51, 36, 252, 6, - 51, 36, 251, 102, 255, 42, 51, 36, 252, 107, 51, 36, 239, 223, 252, 107, - 51, 36, 226, 159, 51, 36, 237, 64, 51, 36, 184, 237, 170, 36, 47, 184, - 237, 170, 36, 226, 159, 234, 2, 36, 229, 63, 195, 234, 2, 36, 182, 195, - 234, 2, 36, 229, 63, 228, 162, 234, 2, 36, 182, 228, 162, 234, 2, 36, 41, - 132, 231, 140, 51, 36, 239, 223, 252, 102, 51, 36, 37, 51, 36, 230, 212, - 51, 36, 224, 74, 46, 36, 61, 205, 36, 47, 234, 1, 36, 245, 237, 206, 76, - 36, 255, 33, 206, 76, 36, 19, 233, 117, 36, 19, 238, 132, 36, 19, 249, - 254, 226, 109, 36, 19, 223, 165, 36, 252, 102, 46, 36, 247, 204, 5, 51, - 36, 47, 61, 237, 171, 51, 36, 42, 254, 182, 51, 36, 190, 226, 159, 46, - 36, 244, 221, 46, 36, 254, 210, 105, 180, 46, 36, 42, 41, 67, 51, 36, - 225, 106, 67, 51, 36, 245, 241, 239, 112, 36, 41, 254, 94, 46, 36, 42, - 132, 231, 140, 46, 36, 247, 76, 36, 224, 74, 51, 36, 42, 254, 94, 51, 36, - 41, 254, 94, 51, 36, 41, 254, 94, 22, 99, 254, 94, 51, 36, 41, 132, 231, - 140, 46, 36, 56, 64, 231, 153, 36, 254, 70, 51, 36, 47, 231, 140, 51, 36, - 223, 38, 46, 36, 47, 252, 107, 51, 36, 47, 252, 106, 36, 47, 237, 63, 36, - 47, 237, 64, 51, 36, 47, 205, 36, 47, 239, 223, 252, 106, 36, 47, 81, 67, - 51, 36, 7, 3, 1, 57, 36, 7, 3, 1, 72, 36, 7, 3, 1, 74, 36, 7, 3, 1, 73, - 36, 7, 3, 1, 66, 36, 7, 3, 1, 252, 44, 36, 7, 3, 1, 222, 222, 36, 7, 3, - 1, 212, 36, 7, 3, 1, 185, 36, 7, 3, 1, 146, 36, 7, 3, 1, 227, 109, 36, 7, - 3, 1, 196, 36, 7, 3, 1, 224, 73, 19, 6, 1, 245, 89, 19, 3, 1, 245, 89, - 19, 6, 1, 254, 120, 230, 255, 19, 3, 1, 254, 120, 230, 255, 19, 207, 53, - 19, 203, 207, 53, 19, 6, 1, 233, 215, 249, 230, 19, 3, 1, 233, 215, 249, - 230, 19, 223, 165, 19, 3, 200, 237, 99, 229, 3, 98, 19, 3, 248, 138, 237, - 99, 229, 3, 98, 19, 3, 200, 248, 138, 237, 99, 229, 3, 98, 19, 232, 69, - 76, 19, 226, 109, 19, 249, 254, 226, 109, 19, 6, 1, 254, 206, 2, 226, - 109, 19, 254, 173, 227, 30, 19, 6, 1, 247, 207, 2, 226, 109, 19, 6, 1, - 247, 172, 2, 226, 109, 19, 6, 1, 239, 216, 2, 226, 109, 19, 6, 1, 234, - 65, 2, 226, 109, 19, 6, 1, 225, 111, 2, 226, 109, 19, 6, 1, 234, 67, 2, - 226, 109, 19, 3, 1, 239, 216, 2, 249, 254, 22, 226, 109, 19, 6, 1, 254, - 205, 19, 6, 1, 252, 198, 19, 6, 1, 246, 169, 19, 6, 1, 250, 47, 19, 6, 1, - 247, 206, 19, 6, 1, 223, 88, 19, 6, 1, 247, 171, 19, 6, 1, 226, 223, 19, - 6, 1, 239, 215, 19, 6, 1, 239, 35, 19, 6, 1, 238, 16, 19, 6, 1, 236, 66, - 19, 6, 1, 234, 206, 19, 6, 1, 224, 64, 19, 6, 1, 234, 64, 19, 6, 1, 233, - 69, 19, 6, 1, 231, 182, 19, 6, 1, 229, 2, 19, 6, 1, 227, 61, 19, 6, 1, - 225, 110, 19, 6, 1, 233, 87, 19, 6, 1, 251, 169, 19, 6, 1, 232, 183, 19, - 6, 1, 234, 66, 19, 6, 1, 239, 216, 2, 249, 253, 19, 6, 1, 225, 111, 2, - 249, 253, 19, 3, 1, 254, 206, 2, 226, 109, 19, 3, 1, 247, 207, 2, 226, - 109, 19, 3, 1, 247, 172, 2, 226, 109, 19, 3, 1, 239, 216, 2, 226, 109, - 19, 3, 1, 225, 111, 2, 249, 254, 22, 226, 109, 19, 3, 1, 254, 205, 19, 3, - 1, 252, 198, 19, 3, 1, 246, 169, 19, 3, 1, 250, 47, 19, 3, 1, 247, 206, - 19, 3, 1, 223, 88, 19, 3, 1, 247, 171, 19, 3, 1, 226, 223, 19, 3, 1, 239, - 215, 19, 3, 1, 239, 35, 19, 3, 1, 238, 16, 19, 3, 1, 236, 66, 19, 3, 1, - 234, 206, 19, 3, 1, 224, 64, 19, 3, 1, 234, 64, 19, 3, 1, 233, 69, 19, 3, - 1, 231, 182, 19, 3, 1, 35, 229, 2, 19, 3, 1, 229, 2, 19, 3, 1, 227, 61, - 19, 3, 1, 225, 110, 19, 3, 1, 233, 87, 19, 3, 1, 251, 169, 19, 3, 1, 232, - 183, 19, 3, 1, 234, 66, 19, 3, 1, 239, 216, 2, 249, 253, 19, 3, 1, 225, - 111, 2, 249, 253, 19, 3, 1, 234, 65, 2, 226, 109, 19, 3, 1, 225, 111, 2, - 226, 109, 19, 3, 1, 234, 67, 2, 226, 109, 19, 6, 239, 57, 98, 19, 252, - 199, 98, 19, 226, 224, 98, 19, 225, 111, 2, 244, 217, 98, 19, 225, 111, - 2, 255, 33, 22, 244, 217, 98, 19, 225, 111, 2, 250, 3, 22, 244, 217, 98, - 19, 233, 88, 98, 19, 233, 70, 98, 19, 239, 57, 98, 19, 1, 254, 120, 238, - 135, 19, 3, 1, 254, 120, 238, 135, 19, 1, 228, 46, 19, 3, 1, 228, 46, 19, - 1, 249, 230, 19, 3, 1, 249, 230, 19, 1, 238, 135, 19, 3, 1, 238, 135, 19, - 1, 230, 255, 19, 3, 1, 230, 255, 70, 6, 1, 229, 106, 70, 3, 1, 229, 106, - 70, 6, 1, 247, 85, 70, 3, 1, 247, 85, 70, 6, 1, 238, 215, 70, 3, 1, 238, - 215, 70, 6, 1, 244, 213, 70, 3, 1, 244, 213, 70, 6, 1, 246, 165, 70, 3, - 1, 246, 165, 70, 6, 1, 229, 80, 70, 3, 1, 229, 80, 70, 6, 1, 250, 60, 70, - 3, 1, 250, 60, 19, 239, 36, 98, 19, 231, 183, 98, 19, 237, 99, 229, 3, - 98, 19, 1, 223, 169, 19, 6, 226, 224, 98, 19, 237, 99, 247, 207, 98, 19, - 200, 237, 99, 247, 207, 98, 19, 6, 1, 229, 71, 19, 3, 1, 229, 71, 19, 6, - 237, 99, 229, 3, 98, 19, 6, 1, 230, 253, 19, 3, 1, 230, 253, 19, 231, - 183, 2, 195, 98, 19, 6, 200, 237, 99, 229, 3, 98, 19, 6, 248, 138, 237, - 99, 229, 3, 98, 19, 6, 200, 248, 138, 237, 99, 229, 3, 98, 28, 6, 1, 240, - 73, 2, 245, 236, 28, 6, 1, 239, 219, 28, 6, 1, 249, 176, 28, 6, 1, 246, - 21, 28, 6, 1, 225, 150, 240, 72, 28, 6, 1, 248, 69, 28, 6, 1, 252, 53, - 74, 28, 6, 1, 223, 202, 28, 6, 1, 239, 170, 28, 6, 1, 237, 151, 28, 6, 1, - 235, 48, 28, 6, 1, 226, 36, 28, 6, 1, 238, 169, 28, 6, 1, 244, 81, 2, - 245, 236, 28, 6, 1, 229, 63, 66, 28, 6, 1, 248, 65, 28, 6, 1, 57, 28, 6, - 1, 252, 238, 28, 6, 1, 225, 42, 28, 6, 1, 246, 58, 28, 6, 1, 250, 77, 28, - 6, 1, 240, 72, 28, 6, 1, 223, 77, 28, 6, 1, 223, 97, 28, 6, 1, 74, 28, 6, - 1, 229, 63, 74, 28, 6, 1, 177, 28, 6, 1, 248, 2, 28, 6, 1, 247, 247, 28, - 6, 1, 247, 239, 28, 6, 1, 73, 28, 6, 1, 233, 151, 28, 6, 1, 247, 198, 28, - 6, 1, 247, 188, 28, 6, 1, 227, 44, 28, 6, 1, 66, 28, 6, 1, 248, 29, 28, - 6, 1, 154, 28, 6, 1, 226, 40, 28, 6, 1, 251, 182, 28, 6, 1, 229, 146, 28, - 6, 1, 229, 116, 28, 6, 1, 245, 140, 53, 28, 6, 1, 223, 213, 28, 6, 1, - 228, 165, 53, 28, 6, 1, 72, 28, 6, 1, 223, 158, 28, 6, 1, 191, 28, 3, 1, - 57, 28, 3, 1, 252, 238, 28, 3, 1, 225, 42, 28, 3, 1, 246, 58, 28, 3, 1, - 250, 77, 28, 3, 1, 240, 72, 28, 3, 1, 223, 77, 28, 3, 1, 223, 97, 28, 3, - 1, 74, 28, 3, 1, 229, 63, 74, 28, 3, 1, 177, 28, 3, 1, 248, 2, 28, 3, 1, - 247, 247, 28, 3, 1, 247, 239, 28, 3, 1, 73, 28, 3, 1, 233, 151, 28, 3, 1, - 247, 198, 28, 3, 1, 247, 188, 28, 3, 1, 227, 44, 28, 3, 1, 66, 28, 3, 1, - 248, 29, 28, 3, 1, 154, 28, 3, 1, 226, 40, 28, 3, 1, 251, 182, 28, 3, 1, - 229, 146, 28, 3, 1, 229, 116, 28, 3, 1, 245, 140, 53, 28, 3, 1, 223, 213, - 28, 3, 1, 228, 165, 53, 28, 3, 1, 72, 28, 3, 1, 223, 158, 28, 3, 1, 191, - 28, 3, 1, 240, 73, 2, 245, 236, 28, 3, 1, 239, 219, 28, 3, 1, 249, 176, - 28, 3, 1, 246, 21, 28, 3, 1, 225, 150, 240, 72, 28, 3, 1, 248, 69, 28, 3, - 1, 252, 53, 74, 28, 3, 1, 223, 202, 28, 3, 1, 239, 170, 28, 3, 1, 237, - 151, 28, 3, 1, 235, 48, 28, 3, 1, 226, 36, 28, 3, 1, 238, 169, 28, 3, 1, - 244, 81, 2, 245, 236, 28, 3, 1, 229, 63, 66, 28, 3, 1, 248, 65, 28, 6, 1, - 234, 66, 28, 3, 1, 234, 66, 28, 6, 1, 223, 239, 28, 3, 1, 223, 239, 28, - 6, 1, 239, 213, 72, 28, 3, 1, 239, 213, 72, 28, 6, 1, 237, 155, 223, 139, - 28, 3, 1, 237, 155, 223, 139, 28, 6, 1, 239, 213, 237, 155, 223, 139, 28, - 3, 1, 239, 213, 237, 155, 223, 139, 28, 6, 1, 252, 173, 223, 139, 28, 3, - 1, 252, 173, 223, 139, 28, 6, 1, 239, 213, 252, 173, 223, 139, 28, 3, 1, - 239, 213, 252, 173, 223, 139, 28, 6, 1, 238, 111, 28, 3, 1, 238, 111, 28, - 6, 1, 232, 183, 28, 3, 1, 232, 183, 28, 6, 1, 247, 38, 28, 3, 1, 247, 38, - 28, 6, 1, 239, 184, 28, 3, 1, 239, 184, 28, 6, 1, 239, 185, 2, 47, 245, - 237, 255, 41, 28, 3, 1, 239, 185, 2, 47, 245, 237, 255, 41, 28, 6, 1, - 225, 153, 28, 3, 1, 225, 153, 28, 6, 1, 231, 104, 234, 66, 28, 3, 1, 231, - 104, 234, 66, 28, 6, 1, 234, 67, 2, 226, 143, 28, 3, 1, 234, 67, 2, 226, - 143, 28, 6, 1, 234, 19, 28, 3, 1, 234, 19, 28, 6, 1, 238, 135, 28, 3, 1, - 238, 135, 28, 226, 193, 53, 36, 28, 226, 143, 36, 28, 233, 228, 36, 28, - 172, 233, 6, 36, 28, 186, 233, 6, 36, 28, 232, 248, 36, 28, 244, 136, - 226, 193, 53, 36, 28, 236, 128, 53, 28, 6, 1, 229, 63, 244, 81, 2, 227, - 89, 28, 3, 1, 229, 63, 244, 81, 2, 227, 89, 28, 6, 1, 229, 182, 53, 28, - 3, 1, 229, 182, 53, 28, 6, 1, 247, 199, 2, 226, 172, 28, 3, 1, 247, 199, - 2, 226, 172, 28, 6, 1, 246, 59, 2, 225, 109, 28, 3, 1, 246, 59, 2, 225, - 109, 28, 6, 1, 246, 59, 2, 82, 28, 3, 1, 246, 59, 2, 82, 28, 6, 1, 246, - 59, 2, 236, 154, 88, 28, 3, 1, 246, 59, 2, 236, 154, 88, 28, 6, 1, 223, - 78, 2, 250, 34, 28, 3, 1, 223, 78, 2, 250, 34, 28, 6, 1, 223, 98, 2, 250, - 34, 28, 3, 1, 223, 98, 2, 250, 34, 28, 6, 1, 188, 2, 250, 34, 28, 3, 1, - 188, 2, 250, 34, 28, 6, 1, 188, 2, 61, 82, 28, 3, 1, 188, 2, 61, 82, 28, - 6, 1, 188, 2, 82, 28, 3, 1, 188, 2, 82, 28, 6, 1, 253, 23, 177, 28, 3, 1, - 253, 23, 177, 28, 6, 1, 247, 240, 2, 250, 34, 28, 3, 1, 247, 240, 2, 250, - 34, 28, 6, 20, 247, 240, 246, 58, 28, 3, 20, 247, 240, 246, 58, 28, 6, 1, - 233, 152, 2, 236, 154, 88, 28, 3, 1, 233, 152, 2, 236, 154, 88, 28, 6, 1, - 255, 47, 154, 28, 3, 1, 255, 47, 154, 28, 6, 1, 247, 189, 2, 250, 34, 28, - 3, 1, 247, 189, 2, 250, 34, 28, 6, 1, 227, 45, 2, 250, 34, 28, 3, 1, 227, - 45, 2, 250, 34, 28, 6, 1, 228, 32, 66, 28, 3, 1, 228, 32, 66, 28, 6, 1, - 228, 32, 97, 2, 82, 28, 3, 1, 228, 32, 97, 2, 82, 28, 6, 1, 245, 170, 2, - 250, 34, 28, 3, 1, 245, 170, 2, 250, 34, 28, 6, 20, 227, 45, 226, 40, 28, - 3, 20, 227, 45, 226, 40, 28, 6, 1, 251, 183, 2, 250, 34, 28, 3, 1, 251, - 183, 2, 250, 34, 28, 6, 1, 251, 183, 2, 61, 82, 28, 3, 1, 251, 183, 2, - 61, 82, 28, 6, 1, 229, 91, 28, 3, 1, 229, 91, 28, 6, 1, 255, 47, 251, - 182, 28, 3, 1, 255, 47, 251, 182, 28, 6, 1, 255, 47, 251, 183, 2, 250, - 34, 28, 3, 1, 255, 47, 251, 183, 2, 250, 34, 28, 1, 233, 222, 28, 6, 1, - 223, 78, 2, 252, 106, 28, 3, 1, 223, 78, 2, 252, 106, 28, 6, 1, 188, 2, - 88, 28, 3, 1, 188, 2, 88, 28, 6, 1, 248, 3, 2, 227, 89, 28, 3, 1, 248, 3, - 2, 227, 89, 28, 6, 1, 247, 240, 2, 88, 28, 3, 1, 247, 240, 2, 88, 28, 6, - 1, 247, 240, 2, 227, 89, 28, 3, 1, 247, 240, 2, 227, 89, 28, 6, 1, 238, - 223, 251, 182, 28, 3, 1, 238, 223, 251, 182, 28, 6, 1, 247, 248, 2, 227, - 89, 28, 3, 1, 247, 248, 2, 227, 89, 28, 3, 1, 233, 222, 28, 6, 1, 102, 2, - 252, 106, 28, 3, 1, 102, 2, 252, 106, 28, 6, 1, 102, 2, 219, 28, 3, 1, - 102, 2, 219, 28, 6, 20, 102, 240, 72, 28, 3, 20, 102, 240, 72, 28, 6, 1, - 240, 73, 2, 252, 106, 28, 3, 1, 240, 73, 2, 252, 106, 28, 6, 1, 230, 222, - 28, 3, 1, 230, 222, 28, 6, 1, 230, 223, 2, 219, 28, 3, 1, 230, 223, 2, - 219, 28, 6, 1, 223, 78, 2, 219, 28, 3, 1, 223, 78, 2, 219, 28, 6, 1, 223, - 98, 2, 219, 28, 3, 1, 223, 98, 2, 219, 28, 6, 1, 255, 47, 248, 69, 28, 3, - 1, 255, 47, 248, 69, 28, 6, 1, 244, 81, 2, 237, 63, 28, 3, 1, 244, 81, 2, - 237, 63, 28, 6, 1, 244, 81, 2, 219, 28, 3, 1, 244, 81, 2, 219, 28, 6, 1, - 130, 2, 219, 28, 3, 1, 130, 2, 219, 28, 6, 1, 253, 31, 73, 28, 3, 1, 253, - 31, 73, 28, 6, 1, 253, 31, 130, 2, 219, 28, 3, 1, 253, 31, 130, 2, 219, - 28, 6, 1, 161, 2, 219, 28, 3, 1, 161, 2, 219, 28, 6, 1, 97, 2, 237, 63, - 28, 3, 1, 97, 2, 237, 63, 28, 6, 1, 97, 2, 219, 28, 3, 1, 97, 2, 219, 28, - 6, 1, 97, 2, 47, 155, 28, 3, 1, 97, 2, 47, 155, 28, 6, 1, 251, 183, 2, - 219, 28, 3, 1, 251, 183, 2, 219, 28, 6, 1, 246, 59, 2, 250, 34, 28, 3, 1, - 246, 59, 2, 250, 34, 28, 6, 1, 223, 214, 2, 219, 28, 3, 1, 223, 214, 2, - 219, 28, 6, 1, 246, 59, 2, 195, 22, 88, 28, 3, 1, 246, 59, 2, 195, 22, - 88, 28, 6, 1, 245, 170, 2, 88, 28, 3, 1, 245, 170, 2, 88, 28, 6, 1, 245, - 170, 2, 82, 28, 3, 1, 245, 170, 2, 82, 28, 6, 1, 238, 143, 250, 77, 28, - 3, 1, 238, 143, 250, 77, 28, 6, 1, 238, 143, 249, 176, 28, 3, 1, 238, - 143, 249, 176, 28, 6, 1, 238, 143, 223, 31, 28, 3, 1, 238, 143, 223, 31, - 28, 6, 1, 238, 143, 248, 63, 28, 3, 1, 238, 143, 248, 63, 28, 6, 1, 238, - 143, 237, 151, 28, 3, 1, 238, 143, 237, 151, 28, 6, 1, 238, 143, 235, 48, - 28, 3, 1, 238, 143, 235, 48, 28, 6, 1, 238, 143, 228, 204, 28, 3, 1, 238, - 143, 228, 204, 28, 6, 1, 238, 143, 226, 139, 28, 3, 1, 238, 143, 226, - 139, 28, 6, 1, 200, 223, 97, 28, 3, 1, 200, 223, 97, 28, 6, 1, 248, 3, 2, - 88, 28, 3, 1, 248, 3, 2, 88, 28, 6, 1, 237, 205, 28, 3, 1, 237, 205, 28, - 6, 1, 231, 184, 28, 3, 1, 231, 184, 28, 6, 1, 224, 10, 28, 3, 1, 224, 10, - 28, 6, 1, 232, 138, 28, 3, 1, 232, 138, 28, 6, 1, 224, 141, 28, 3, 1, - 224, 141, 28, 6, 1, 254, 224, 177, 28, 3, 1, 254, 224, 177, 28, 6, 1, - 248, 3, 2, 236, 154, 88, 28, 3, 1, 248, 3, 2, 236, 154, 88, 28, 6, 1, - 247, 240, 2, 236, 154, 88, 28, 3, 1, 247, 240, 2, 236, 154, 88, 120, 6, - 1, 254, 31, 120, 6, 1, 252, 210, 120, 6, 1, 246, 36, 120, 6, 1, 250, 189, - 120, 6, 1, 248, 39, 120, 6, 1, 223, 117, 120, 6, 1, 248, 24, 120, 6, 1, - 247, 173, 120, 6, 1, 96, 120, 6, 1, 223, 77, 120, 6, 1, 239, 252, 120, 6, - 1, 237, 154, 120, 6, 1, 224, 67, 120, 6, 1, 252, 39, 120, 6, 1, 238, 243, - 120, 6, 1, 244, 227, 120, 6, 1, 239, 179, 120, 6, 1, 246, 65, 120, 6, 1, - 251, 178, 120, 6, 1, 236, 210, 120, 6, 1, 223, 202, 120, 6, 1, 234, 232, - 120, 6, 1, 229, 146, 120, 6, 1, 224, 206, 120, 6, 1, 251, 204, 120, 6, 1, - 233, 140, 120, 6, 1, 239, 158, 120, 6, 1, 208, 120, 6, 1, 230, 196, 120, - 6, 1, 224, 230, 120, 6, 1, 226, 141, 120, 6, 1, 231, 225, 120, 6, 1, 251, - 68, 120, 6, 1, 223, 188, 120, 6, 1, 233, 27, 120, 6, 1, 238, 253, 120, 6, - 1, 234, 83, 120, 6, 1, 247, 87, 120, 52, 1, 42, 132, 231, 139, 120, 254, - 144, 120, 247, 243, 76, 120, 247, 149, 76, 120, 251, 54, 120, 232, 69, - 76, 120, 255, 48, 76, 120, 3, 1, 254, 31, 120, 3, 1, 252, 210, 120, 3, 1, - 246, 36, 120, 3, 1, 250, 189, 120, 3, 1, 248, 39, 120, 3, 1, 223, 117, - 120, 3, 1, 248, 24, 120, 3, 1, 247, 173, 120, 3, 1, 96, 120, 3, 1, 223, - 77, 120, 3, 1, 239, 252, 120, 3, 1, 237, 154, 120, 3, 1, 224, 67, 120, 3, - 1, 252, 39, 120, 3, 1, 238, 243, 120, 3, 1, 244, 227, 120, 3, 1, 239, - 179, 120, 3, 1, 246, 65, 120, 3, 1, 251, 178, 120, 3, 1, 236, 210, 120, - 3, 1, 223, 202, 120, 3, 1, 234, 232, 120, 3, 1, 229, 146, 120, 3, 1, 224, - 206, 120, 3, 1, 251, 204, 120, 3, 1, 233, 140, 120, 3, 1, 239, 158, 120, - 3, 1, 208, 120, 3, 1, 230, 196, 120, 3, 1, 224, 230, 120, 3, 1, 226, 141, - 120, 3, 1, 231, 225, 120, 3, 1, 251, 68, 120, 3, 1, 223, 188, 120, 3, 1, - 233, 27, 120, 3, 1, 238, 253, 120, 3, 1, 234, 83, 120, 3, 1, 247, 87, - 120, 3, 20, 248, 40, 223, 188, 120, 246, 218, 228, 38, 120, 244, 95, 78, - 255, 42, 247, 166, 78, 255, 42, 230, 197, 78, 255, 42, 229, 133, 78, 255, - 42, 223, 106, 232, 121, 78, 255, 42, 223, 106, 246, 183, 78, 255, 42, - 226, 149, 78, 255, 42, 231, 191, 78, 255, 42, 223, 105, 78, 255, 42, 233, - 171, 78, 255, 42, 223, 208, 78, 255, 42, 227, 1, 78, 255, 42, 246, 112, - 78, 255, 42, 246, 113, 236, 38, 78, 255, 42, 246, 110, 78, 255, 42, 232, - 122, 233, 193, 78, 255, 42, 227, 27, 246, 126, 78, 255, 42, 233, 155, 78, - 255, 42, 254, 60, 245, 163, 78, 255, 42, 236, 47, 78, 255, 42, 237, 53, - 78, 255, 42, 236, 206, 78, 255, 42, 236, 207, 238, 254, 78, 255, 42, 250, - 137, 78, 255, 42, 232, 133, 78, 255, 42, 227, 27, 232, 117, 78, 255, 42, - 223, 216, 252, 211, 223, 173, 78, 255, 42, 234, 72, 78, 255, 42, 240, 33, - 78, 255, 42, 250, 61, 78, 255, 42, 223, 36, 78, 165, 237, 5, 251, 106, - 78, 232, 255, 229, 93, 78, 232, 255, 245, 131, 230, 197, 78, 232, 255, - 245, 131, 233, 166, 78, 232, 255, 245, 131, 232, 126, 78, 232, 255, 245, - 58, 78, 232, 255, 226, 38, 78, 232, 255, 230, 197, 78, 232, 255, 233, - 166, 78, 232, 255, 232, 126, 78, 232, 255, 244, 223, 78, 232, 255, 244, - 224, 245, 133, 32, 225, 46, 78, 232, 255, 232, 72, 78, 232, 255, 250, - 176, 145, 237, 27, 78, 232, 255, 236, 198, 78, 232, 171, 237, 26, 78, - 232, 255, 232, 14, 78, 232, 171, 233, 172, 78, 232, 255, 229, 79, 249, - 140, 78, 232, 255, 228, 244, 249, 140, 78, 232, 171, 228, 166, 233, 168, - 78, 165, 225, 113, 249, 140, 78, 165, 203, 249, 140, 78, 232, 171, 234, - 195, 245, 162, 78, 232, 255, 232, 127, 232, 121, 78, 1, 254, 227, 78, 1, - 252, 200, 78, 1, 246, 34, 78, 1, 250, 160, 78, 1, 245, 121, 78, 1, 225, - 46, 78, 1, 223, 99, 78, 1, 245, 90, 78, 1, 227, 10, 78, 1, 223, 175, 78, - 1, 35, 239, 59, 78, 1, 239, 59, 78, 1, 238, 12, 78, 1, 35, 236, 215, 78, - 1, 236, 215, 78, 1, 35, 234, 194, 78, 1, 234, 194, 78, 1, 231, 2, 78, 1, - 254, 29, 78, 1, 35, 233, 151, 78, 1, 233, 151, 78, 1, 35, 226, 41, 78, 1, - 226, 41, 78, 1, 232, 92, 78, 1, 231, 205, 78, 1, 229, 78, 78, 1, 227, 58, - 78, 20, 223, 200, 47, 225, 46, 78, 20, 223, 200, 225, 47, 223, 175, 78, - 20, 223, 200, 47, 223, 175, 78, 232, 171, 246, 112, 78, 232, 171, 246, - 110, 10, 65, 53, 10, 5, 230, 252, 10, 247, 1, 237, 13, 10, 5, 231, 21, - 254, 131, 250, 232, 231, 111, 254, 131, 246, 237, 231, 111, 10, 231, 250, - 254, 131, 233, 124, 236, 130, 53, 254, 131, 233, 124, 227, 24, 226, 195, - 53, 255, 12, 53, 10, 251, 54, 10, 250, 125, 229, 173, 10, 233, 1, 225, - 32, 53, 10, 5, 236, 113, 10, 5, 231, 8, 254, 229, 224, 156, 10, 5, 254, - 229, 254, 74, 10, 5, 232, 13, 254, 228, 10, 5, 232, 17, 254, 214, 254, - 178, 10, 5, 227, 82, 10, 3, 201, 227, 91, 10, 3, 201, 20, 92, 2, 216, 2, - 223, 224, 10, 3, 201, 223, 110, 10, 3, 247, 104, 10, 3, 250, 156, 10, 3, - 239, 23, 10, 229, 186, 10, 226, 66, 56, 232, 171, 76, 10, 232, 69, 76, - 10, 1, 245, 149, 10, 1, 92, 2, 237, 59, 46, 10, 1, 92, 2, 164, 46, 10, 1, - 224, 145, 2, 164, 46, 10, 1, 92, 2, 164, 51, 10, 1, 62, 2, 164, 46, 10, - 1, 254, 227, 10, 1, 252, 223, 10, 1, 227, 35, 237, 22, 10, 1, 227, 34, - 10, 1, 226, 236, 10, 1, 239, 168, 10, 1, 245, 159, 10, 1, 238, 225, 10, - 1, 250, 165, 10, 1, 226, 245, 10, 1, 231, 225, 10, 1, 223, 110, 10, 1, - 230, 201, 10, 1, 229, 110, 10, 1, 231, 24, 10, 1, 250, 184, 10, 1, 227, - 91, 10, 1, 223, 113, 10, 1, 254, 248, 10, 1, 246, 63, 10, 1, 238, 252, 2, - 135, 197, 46, 10, 1, 238, 252, 2, 152, 197, 51, 10, 1, 247, 107, 62, 2, - 239, 223, 196, 10, 1, 247, 107, 62, 2, 135, 197, 46, 10, 1, 247, 107, 62, - 2, 152, 197, 46, 10, 227, 63, 10, 1, 247, 87, 10, 1, 232, 131, 10, 1, - 239, 59, 10, 1, 238, 20, 10, 1, 236, 225, 10, 1, 234, 251, 10, 1, 245, - 107, 10, 1, 224, 144, 10, 1, 92, 237, 41, 10, 1, 223, 224, 10, 247, 102, - 10, 250, 154, 10, 239, 21, 10, 247, 104, 10, 250, 156, 10, 239, 23, 10, - 229, 137, 10, 227, 234, 10, 237, 57, 46, 10, 164, 46, 10, 164, 51, 10, - 227, 253, 254, 227, 10, 239, 223, 250, 156, 10, 165, 234, 252, 246, 50, - 10, 223, 5, 10, 31, 5, 3, 225, 65, 46, 10, 31, 5, 239, 223, 3, 225, 65, - 46, 10, 31, 5, 56, 51, 10, 200, 250, 156, 10, 247, 105, 2, 135, 249, 138, - 254, 131, 21, 223, 89, 254, 131, 21, 118, 254, 131, 21, 113, 254, 131, - 21, 166, 254, 131, 21, 158, 254, 131, 21, 173, 254, 131, 21, 183, 254, - 131, 21, 194, 254, 131, 21, 187, 254, 131, 21, 192, 10, 233, 123, 53, 10, - 250, 71, 229, 173, 10, 226, 193, 229, 173, 10, 247, 37, 232, 253, 228, - 58, 10, 1, 249, 139, 252, 223, 10, 1, 249, 139, 232, 131, 10, 1, 227, - 219, 254, 227, 10, 1, 92, 224, 157, 10, 1, 92, 2, 224, 146, 164, 46, 10, - 1, 92, 2, 224, 146, 164, 51, 10, 1, 201, 245, 149, 10, 1, 201, 164, 254, - 227, 10, 1, 201, 164, 224, 144, 10, 1, 97, 2, 164, 46, 10, 1, 201, 164, - 223, 224, 10, 1, 226, 14, 10, 1, 226, 12, 10, 1, 252, 230, 10, 1, 227, - 35, 2, 231, 139, 10, 1, 227, 35, 2, 152, 197, 64, 248, 124, 10, 1, 233, - 140, 10, 1, 227, 32, 10, 1, 252, 221, 10, 1, 101, 2, 164, 46, 10, 1, 101, - 2, 135, 197, 61, 46, 10, 1, 234, 166, 10, 1, 248, 75, 10, 1, 101, 2, 152, - 197, 46, 10, 1, 227, 48, 10, 1, 227, 46, 10, 1, 250, 112, 10, 1, 250, - 166, 2, 231, 139, 10, 1, 250, 166, 2, 56, 51, 10, 1, 250, 166, 2, 56, - 252, 214, 22, 3, 227, 91, 10, 1, 250, 171, 10, 1, 250, 114, 10, 1, 248, - 99, 10, 1, 250, 166, 2, 152, 197, 64, 248, 124, 10, 1, 250, 166, 2, 246, - 243, 197, 46, 10, 1, 231, 95, 10, 1, 231, 226, 2, 3, 196, 10, 1, 231, - 226, 2, 231, 139, 10, 1, 231, 226, 2, 56, 51, 10, 1, 231, 226, 2, 3, 225, - 65, 51, 10, 1, 231, 226, 2, 56, 252, 214, 22, 56, 46, 10, 1, 231, 226, 2, - 135, 197, 46, 10, 1, 239, 165, 10, 1, 231, 226, 2, 246, 243, 197, 46, 10, - 1, 230, 202, 2, 56, 252, 214, 22, 56, 46, 10, 1, 230, 202, 2, 152, 197, - 51, 10, 1, 230, 202, 2, 152, 197, 252, 214, 22, 152, 197, 46, 10, 1, 231, - 25, 2, 135, 197, 51, 10, 1, 231, 25, 2, 152, 197, 46, 10, 1, 227, 92, 2, - 152, 197, 46, 10, 1, 254, 249, 2, 152, 197, 46, 10, 1, 249, 139, 247, 87, - 10, 1, 247, 88, 2, 56, 236, 71, 51, 10, 1, 247, 88, 2, 56, 51, 10, 1, - 225, 36, 10, 1, 247, 88, 2, 152, 197, 51, 10, 1, 233, 138, 10, 1, 232, - 132, 2, 56, 46, 10, 1, 232, 132, 2, 152, 197, 46, 10, 1, 238, 251, 10, 1, - 227, 197, 239, 59, 10, 1, 239, 60, 2, 231, 139, 10, 1, 239, 60, 2, 56, - 46, 10, 1, 235, 139, 10, 1, 239, 60, 2, 152, 197, 51, 10, 1, 246, 180, - 10, 1, 246, 181, 2, 231, 139, 10, 1, 235, 105, 10, 1, 246, 181, 2, 135, - 197, 51, 10, 1, 245, 210, 10, 1, 246, 181, 2, 152, 197, 46, 10, 1, 216, - 2, 3, 196, 10, 1, 216, 2, 56, 46, 10, 1, 216, 2, 152, 197, 46, 10, 1, - 216, 2, 152, 197, 51, 10, 1, 234, 252, 2, 56, 51, 10, 1, 234, 252, 246, - 50, 10, 1, 231, 125, 10, 1, 234, 252, 2, 231, 139, 10, 1, 234, 252, 2, - 152, 197, 46, 10, 1, 245, 108, 249, 157, 10, 1, 227, 49, 2, 56, 46, 10, - 1, 245, 108, 2, 62, 46, 10, 1, 245, 108, 246, 8, 10, 1, 245, 108, 246, 9, - 2, 164, 46, 10, 1, 227, 35, 237, 23, 246, 8, 10, 1, 224, 145, 2, 231, - 139, 10, 1, 238, 185, 234, 88, 10, 1, 234, 88, 10, 1, 66, 10, 1, 223, - 158, 10, 1, 238, 185, 223, 158, 10, 1, 224, 145, 2, 135, 197, 46, 10, 1, - 225, 42, 10, 1, 247, 107, 223, 224, 10, 1, 62, 2, 227, 89, 10, 1, 62, 2, - 3, 196, 10, 1, 224, 145, 2, 56, 46, 10, 1, 72, 10, 1, 62, 2, 152, 197, - 51, 10, 1, 62, 253, 29, 10, 1, 62, 253, 30, 2, 164, 46, 10, 246, 218, - 228, 38, 10, 1, 255, 19, 10, 3, 201, 20, 231, 25, 2, 216, 2, 92, 237, 41, - 10, 3, 201, 20, 232, 132, 2, 216, 2, 92, 237, 41, 10, 3, 201, 55, 59, 15, - 10, 3, 201, 216, 254, 227, 10, 3, 201, 239, 168, 10, 3, 201, 152, 249, - 138, 10, 3, 201, 230, 201, 10, 247, 233, 106, 254, 33, 10, 228, 56, 106, - 231, 68, 248, 3, 245, 56, 10, 3, 201, 231, 102, 223, 89, 10, 3, 201, 225, - 112, 231, 235, 223, 89, 10, 3, 201, 249, 139, 245, 119, 106, 238, 225, - 10, 3, 201, 55, 44, 15, 10, 3, 184, 230, 201, 10, 3, 201, 237, 58, 10, 3, - 224, 144, 10, 3, 223, 224, 10, 3, 201, 223, 224, 10, 3, 201, 234, 251, - 10, 233, 23, 106, 231, 14, 10, 247, 241, 251, 219, 184, 228, 38, 10, 247, - 241, 251, 219, 201, 228, 38, 10, 231, 102, 201, 228, 39, 2, 247, 53, 251, - 218, 10, 3, 184, 236, 225, 10, 1, 250, 166, 2, 239, 223, 196, 10, 1, 231, - 226, 2, 239, 223, 196, 247, 142, 254, 131, 21, 223, 89, 247, 142, 254, - 131, 21, 118, 247, 142, 254, 131, 21, 113, 247, 142, 254, 131, 21, 166, - 247, 142, 254, 131, 21, 158, 247, 142, 254, 131, 21, 173, 247, 142, 254, - 131, 21, 183, 247, 142, 254, 131, 21, 194, 247, 142, 254, 131, 21, 187, - 247, 142, 254, 131, 21, 192, 10, 1, 229, 111, 2, 56, 51, 10, 1, 250, 185, - 2, 56, 51, 10, 1, 246, 64, 2, 56, 51, 10, 5, 228, 243, 254, 193, 10, 5, - 228, 243, 232, 236, 236, 210, 10, 1, 245, 108, 2, 239, 223, 196, 151, - 247, 233, 106, 233, 191, 151, 227, 215, 246, 218, 228, 38, 151, 227, 255, - 246, 218, 228, 38, 151, 227, 215, 251, 61, 151, 227, 255, 251, 61, 151, - 169, 251, 61, 151, 251, 62, 228, 202, 237, 237, 151, 251, 62, 228, 202, - 231, 153, 151, 227, 215, 251, 62, 228, 202, 237, 237, 151, 227, 255, 251, - 62, 228, 202, 231, 153, 151, 251, 20, 151, 245, 138, 234, 99, 151, 245, - 138, 236, 197, 151, 245, 138, 254, 71, 151, 255, 48, 76, 151, 1, 254, - 230, 151, 1, 227, 219, 254, 230, 151, 1, 252, 197, 151, 1, 246, 172, 151, - 1, 246, 173, 246, 156, 151, 1, 250, 163, 151, 1, 249, 139, 250, 164, 231, - 136, 151, 1, 245, 121, 151, 1, 224, 144, 151, 1, 223, 110, 151, 1, 245, - 88, 151, 1, 227, 6, 151, 1, 227, 7, 246, 156, 151, 1, 223, 148, 151, 1, - 223, 149, 245, 121, 151, 1, 239, 38, 151, 1, 238, 19, 151, 1, 236, 127, - 151, 1, 234, 194, 151, 1, 229, 179, 151, 1, 35, 229, 179, 151, 1, 72, - 151, 1, 233, 151, 151, 1, 200, 233, 151, 151, 1, 231, 22, 151, 1, 232, - 125, 151, 1, 231, 136, 151, 1, 229, 78, 151, 1, 227, 56, 151, 1, 233, - 113, 252, 187, 151, 1, 233, 113, 246, 61, 151, 1, 233, 113, 250, 19, 151, - 232, 174, 46, 151, 232, 174, 51, 151, 232, 174, 248, 137, 151, 223, 21, - 46, 151, 223, 21, 51, 151, 223, 21, 248, 137, 151, 231, 247, 46, 151, - 231, 247, 51, 151, 248, 138, 223, 28, 244, 212, 151, 248, 138, 223, 28, - 254, 179, 151, 245, 124, 46, 151, 245, 124, 51, 151, 245, 123, 248, 137, - 151, 247, 186, 46, 151, 247, 186, 51, 151, 231, 44, 151, 247, 81, 249, - 140, 151, 232, 51, 151, 231, 66, 151, 135, 61, 197, 46, 151, 135, 61, - 197, 51, 151, 152, 197, 46, 151, 152, 197, 51, 151, 234, 97, 237, 171, - 46, 151, 234, 97, 237, 171, 51, 151, 236, 28, 151, 253, 28, 151, 1, 228, - 163, 223, 83, 151, 1, 228, 163, 238, 219, 151, 1, 228, 163, 247, 97, 10, - 1, 252, 224, 2, 152, 197, 244, 162, 51, 10, 1, 252, 224, 2, 56, 252, 214, - 22, 152, 197, 46, 10, 1, 252, 224, 2, 152, 197, 232, 251, 225, 106, 51, - 10, 1, 252, 224, 2, 152, 197, 232, 251, 225, 106, 252, 214, 22, 135, 197, - 46, 10, 1, 252, 224, 2, 135, 197, 252, 214, 22, 56, 46, 10, 1, 252, 224, - 2, 239, 223, 3, 225, 65, 51, 10, 1, 252, 224, 2, 3, 196, 10, 1, 101, 2, - 135, 197, 46, 10, 1, 101, 2, 152, 197, 232, 251, 225, 106, 51, 10, 1, - 250, 166, 2, 135, 197, 224, 236, 252, 214, 22, 3, 227, 91, 10, 1, 250, - 166, 2, 239, 223, 3, 225, 65, 51, 10, 1, 231, 226, 2, 82, 10, 1, 230, - 202, 2, 246, 243, 197, 46, 10, 1, 254, 249, 2, 135, 197, 46, 10, 1, 254, - 249, 2, 152, 197, 232, 251, 248, 125, 46, 10, 1, 254, 249, 2, 135, 197, - 224, 236, 46, 10, 1, 247, 88, 2, 135, 197, 51, 10, 1, 247, 88, 2, 152, - 197, 232, 251, 225, 106, 51, 10, 1, 238, 252, 2, 56, 46, 10, 1, 238, 252, - 2, 152, 197, 46, 10, 1, 238, 252, 2, 152, 197, 232, 251, 225, 106, 51, - 10, 1, 55, 2, 56, 46, 10, 1, 55, 2, 56, 51, 10, 1, 234, 252, 2, 135, 197, - 51, 10, 1, 234, 252, 2, 3, 227, 91, 10, 1, 234, 252, 2, 3, 196, 10, 1, - 216, 2, 125, 10, 1, 231, 226, 2, 135, 197, 224, 236, 46, 10, 1, 231, 226, - 2, 164, 46, 10, 1, 230, 202, 2, 135, 197, 224, 236, 46, 10, 1, 101, 2, 3, - 10, 1, 227, 92, 51, 10, 1, 101, 2, 3, 10, 1, 227, 92, 22, 135, 249, 138, - 10, 1, 230, 202, 2, 3, 10, 1, 227, 92, 22, 135, 249, 138, 10, 1, 231, - 226, 2, 3, 10, 1, 227, 92, 22, 135, 249, 138, 10, 1, 101, 2, 3, 10, 1, - 227, 92, 46, 10, 1, 92, 2, 247, 142, 254, 131, 21, 135, 46, 10, 1, 92, 2, - 247, 142, 254, 131, 21, 152, 46, 10, 1, 247, 107, 62, 2, 247, 142, 254, - 131, 21, 135, 46, 10, 1, 247, 107, 62, 2, 247, 142, 254, 131, 21, 152, - 46, 10, 1, 247, 107, 62, 2, 247, 142, 254, 131, 21, 246, 243, 51, 10, 1, - 224, 145, 2, 247, 142, 254, 131, 21, 135, 46, 10, 1, 224, 145, 2, 247, - 142, 254, 131, 21, 152, 46, 10, 1, 62, 253, 30, 2, 247, 142, 254, 131, - 21, 135, 46, 10, 1, 62, 253, 30, 2, 247, 142, 254, 131, 21, 152, 46, 10, - 1, 101, 2, 247, 142, 254, 131, 21, 246, 243, 51, 10, 1, 230, 202, 2, 247, - 142, 254, 131, 21, 246, 243, 46, 10, 1, 230, 202, 2, 239, 223, 196, 10, - 1, 239, 60, 2, 135, 197, 46, 226, 248, 1, 245, 167, 226, 248, 1, 229, - 118, 226, 248, 1, 234, 250, 226, 248, 1, 232, 22, 226, 248, 1, 253, 69, - 226, 248, 1, 237, 202, 226, 248, 1, 239, 70, 226, 248, 1, 254, 219, 226, - 248, 1, 225, 62, 226, 248, 1, 236, 224, 226, 248, 1, 247, 127, 226, 248, - 1, 250, 21, 226, 248, 1, 226, 250, 226, 248, 1, 238, 40, 226, 248, 1, - 246, 189, 226, 248, 1, 246, 14, 226, 248, 1, 230, 200, 226, 248, 1, 250, - 123, 226, 248, 1, 223, 102, 226, 248, 1, 227, 57, 226, 248, 1, 224, 21, - 226, 248, 1, 233, 161, 226, 248, 1, 239, 172, 226, 248, 1, 251, 185, 226, - 248, 1, 226, 19, 226, 248, 1, 245, 83, 226, 248, 1, 238, 226, 226, 248, - 1, 226, 249, 226, 248, 1, 223, 116, 226, 248, 1, 229, 109, 226, 248, 1, - 231, 28, 226, 248, 1, 250, 187, 226, 248, 1, 96, 226, 248, 1, 223, 27, - 226, 248, 1, 254, 246, 226, 248, 1, 246, 62, 226, 248, 1, 232, 135, 226, - 248, 1, 224, 171, 226, 248, 255, 49, 226, 248, 255, 62, 226, 248, 244, - 70, 226, 248, 248, 34, 226, 248, 225, 166, 226, 248, 234, 51, 226, 248, - 248, 41, 226, 248, 247, 137, 226, 248, 234, 96, 226, 248, 234, 104, 226, - 248, 227, 234, 226, 248, 1, 235, 254, 204, 21, 223, 89, 204, 21, 118, - 204, 21, 113, 204, 21, 166, 204, 21, 158, 204, 21, 173, 204, 21, 183, - 204, 21, 194, 204, 21, 187, 204, 21, 192, 204, 1, 57, 204, 1, 248, 35, - 204, 1, 74, 204, 1, 72, 204, 1, 66, 204, 1, 234, 52, 204, 1, 73, 204, 1, - 250, 177, 204, 1, 199, 204, 1, 253, 70, 204, 1, 213, 204, 1, 227, 107, - 204, 1, 239, 179, 204, 1, 251, 204, 204, 1, 250, 189, 204, 1, 208, 204, - 1, 231, 99, 204, 1, 231, 31, 204, 1, 246, 144, 204, 1, 247, 129, 204, 1, - 177, 204, 1, 238, 43, 204, 1, 236, 2, 224, 102, 204, 1, 198, 204, 1, 234, - 173, 204, 1, 236, 1, 204, 1, 154, 204, 1, 224, 173, 204, 1, 191, 204, 1, - 234, 174, 224, 102, 204, 1, 239, 110, 239, 179, 204, 1, 239, 110, 251, - 204, 204, 1, 239, 110, 208, 204, 36, 229, 63, 201, 226, 118, 204, 36, - 229, 63, 184, 226, 118, 204, 36, 229, 63, 231, 135, 226, 118, 204, 36, - 182, 250, 33, 226, 118, 204, 36, 182, 201, 226, 118, 204, 36, 182, 184, - 226, 118, 204, 36, 182, 231, 135, 226, 118, 204, 36, 235, 228, 76, 204, - 36, 47, 56, 46, 204, 201, 206, 254, 144, 204, 184, 206, 254, 144, 204, - 14, 234, 53, 250, 44, 204, 14, 246, 143, 204, 251, 54, 204, 247, 149, 76, - 204, 238, 25, 94, 5, 252, 19, 94, 5, 254, 160, 94, 5, 224, 211, 94, 1, - 229, 63, 57, 94, 1, 57, 94, 1, 255, 63, 94, 1, 74, 94, 1, 240, 47, 94, 1, - 66, 94, 1, 225, 76, 94, 1, 153, 146, 94, 1, 153, 149, 94, 1, 252, 21, 72, - 94, 1, 229, 63, 72, 94, 1, 72, 94, 1, 254, 253, 94, 1, 252, 21, 73, 94, - 1, 229, 63, 73, 94, 1, 73, 94, 1, 254, 53, 94, 1, 177, 94, 1, 238, 227, - 94, 1, 246, 193, 94, 1, 246, 66, 94, 1, 235, 137, 94, 1, 252, 39, 94, 1, - 251, 204, 94, 1, 239, 179, 94, 1, 239, 160, 94, 1, 234, 173, 94, 1, 226, - 20, 94, 1, 226, 10, 94, 1, 250, 117, 94, 1, 250, 101, 94, 1, 235, 18, 94, - 1, 227, 107, 94, 1, 226, 251, 94, 1, 250, 189, 94, 1, 250, 22, 94, 1, - 236, 1, 94, 1, 235, 10, 94, 1, 213, 94, 1, 233, 97, 94, 1, 253, 70, 94, - 1, 252, 190, 94, 1, 198, 94, 1, 191, 94, 1, 208, 94, 1, 231, 99, 94, 1, - 238, 43, 94, 1, 237, 148, 94, 1, 237, 147, 94, 1, 225, 64, 94, 1, 229, - 146, 94, 1, 228, 110, 94, 1, 231, 31, 94, 1, 154, 94, 5, 234, 202, 94, 5, - 254, 40, 94, 31, 5, 255, 63, 94, 31, 5, 74, 94, 31, 5, 240, 47, 94, 31, - 5, 66, 94, 31, 5, 225, 76, 94, 31, 5, 153, 146, 94, 31, 5, 153, 231, 100, - 94, 31, 5, 252, 21, 72, 94, 31, 5, 229, 63, 72, 94, 31, 5, 72, 94, 31, 5, - 254, 253, 94, 31, 5, 252, 21, 73, 94, 31, 5, 229, 63, 73, 94, 31, 5, 73, - 94, 31, 5, 254, 53, 94, 5, 224, 216, 94, 234, 69, 94, 228, 27, 5, 225, - 161, 94, 228, 27, 5, 254, 162, 94, 245, 237, 255, 41, 94, 255, 33, 255, - 41, 94, 1, 232, 138, 94, 1, 238, 214, 94, 1, 246, 56, 94, 1, 223, 117, - 94, 1, 250, 106, 94, 1, 231, 184, 94, 1, 247, 129, 94, 1, 223, 126, 94, - 1, 153, 231, 100, 94, 1, 153, 237, 149, 94, 31, 5, 153, 149, 94, 31, 5, - 153, 237, 149, 94, 250, 151, 94, 47, 250, 151, 94, 21, 223, 89, 94, 21, - 118, 94, 21, 113, 94, 21, 166, 94, 21, 158, 94, 21, 173, 94, 21, 183, 94, - 21, 194, 94, 21, 187, 94, 21, 192, 94, 255, 48, 53, 94, 5, 201, 228, 144, - 249, 140, 94, 1, 252, 21, 57, 94, 1, 246, 101, 94, 1, 239, 145, 94, 1, - 246, 16, 228, 38, 94, 1, 250, 107, 94, 1, 253, 16, 121, 5, 252, 19, 121, - 5, 254, 160, 121, 5, 224, 211, 121, 1, 57, 121, 1, 255, 63, 121, 1, 74, - 121, 1, 240, 47, 121, 1, 66, 121, 1, 225, 76, 121, 1, 153, 146, 121, 1, - 153, 149, 121, 1, 72, 121, 1, 254, 253, 121, 1, 73, 121, 1, 254, 53, 121, - 1, 177, 121, 1, 238, 227, 121, 1, 246, 193, 121, 1, 246, 66, 121, 1, 235, - 137, 121, 1, 252, 39, 121, 1, 251, 204, 121, 1, 239, 179, 121, 1, 239, - 160, 121, 1, 234, 173, 121, 1, 226, 20, 121, 1, 226, 10, 121, 1, 250, - 117, 121, 1, 250, 101, 121, 1, 235, 18, 121, 1, 227, 107, 121, 1, 226, - 251, 121, 1, 250, 189, 121, 1, 250, 22, 121, 1, 236, 1, 121, 1, 213, 121, - 1, 233, 97, 121, 1, 253, 70, 121, 1, 252, 190, 121, 1, 198, 121, 1, 191, - 121, 1, 208, 121, 1, 238, 43, 121, 1, 229, 146, 121, 1, 228, 110, 121, 1, - 231, 31, 121, 1, 154, 121, 5, 234, 202, 121, 5, 254, 40, 121, 31, 5, 255, - 63, 121, 31, 5, 74, 121, 31, 5, 240, 47, 121, 31, 5, 66, 121, 31, 5, 225, - 76, 121, 31, 5, 153, 146, 121, 31, 5, 153, 231, 100, 121, 31, 5, 72, 121, - 31, 5, 254, 253, 121, 31, 5, 73, 121, 31, 5, 254, 53, 121, 5, 224, 216, - 121, 1, 238, 221, 227, 107, 121, 254, 54, 237, 219, 76, 121, 1, 231, 99, - 121, 1, 231, 184, 121, 1, 223, 126, 121, 1, 153, 231, 100, 121, 1, 153, - 237, 149, 121, 31, 5, 153, 149, 121, 31, 5, 153, 237, 149, 121, 21, 223, - 89, 121, 21, 118, 121, 21, 113, 121, 21, 166, 121, 21, 158, 121, 21, 173, - 121, 21, 183, 121, 21, 194, 121, 21, 187, 121, 21, 192, 121, 1, 232, 25, - 2, 236, 154, 250, 0, 121, 1, 232, 25, 2, 203, 250, 0, 121, 231, 54, 76, - 121, 231, 54, 53, 121, 250, 222, 234, 197, 118, 121, 250, 222, 234, 197, - 113, 121, 250, 222, 234, 197, 166, 121, 250, 222, 234, 197, 158, 121, - 250, 222, 234, 197, 168, 237, 214, 226, 244, 226, 240, 250, 42, 121, 250, - 222, 250, 43, 228, 212, 121, 239, 196, 148, 5, 255, 28, 252, 169, 148, 5, - 252, 169, 148, 5, 224, 211, 148, 1, 57, 148, 1, 255, 63, 148, 1, 74, 148, - 1, 240, 47, 148, 1, 66, 148, 1, 225, 76, 148, 1, 248, 35, 148, 1, 254, - 253, 148, 1, 234, 52, 148, 1, 254, 53, 148, 1, 177, 148, 1, 238, 227, - 148, 1, 246, 193, 148, 1, 246, 66, 148, 1, 235, 137, 148, 1, 252, 39, - 148, 1, 251, 204, 148, 1, 239, 179, 148, 1, 239, 160, 148, 1, 234, 173, - 148, 1, 226, 20, 148, 1, 226, 10, 148, 1, 250, 117, 148, 1, 250, 101, - 148, 1, 235, 18, 148, 1, 227, 107, 148, 1, 226, 251, 148, 1, 250, 189, - 148, 1, 250, 22, 148, 1, 236, 1, 148, 1, 213, 148, 1, 233, 97, 148, 1, - 253, 70, 148, 1, 252, 190, 148, 1, 198, 148, 1, 191, 148, 1, 208, 148, 1, - 238, 43, 148, 1, 237, 148, 148, 1, 225, 64, 148, 1, 229, 146, 148, 1, - 231, 31, 148, 1, 154, 148, 5, 234, 202, 148, 31, 5, 255, 63, 148, 31, 5, - 74, 148, 31, 5, 240, 47, 148, 31, 5, 66, 148, 31, 5, 225, 76, 148, 31, 5, - 248, 35, 148, 31, 5, 254, 253, 148, 31, 5, 234, 52, 148, 31, 5, 254, 53, - 148, 5, 224, 216, 148, 5, 225, 162, 148, 1, 238, 214, 148, 1, 246, 56, - 148, 1, 223, 117, 148, 1, 231, 99, 148, 1, 247, 129, 148, 21, 223, 89, - 148, 21, 118, 148, 21, 113, 148, 21, 166, 148, 21, 158, 148, 21, 173, - 148, 21, 183, 148, 21, 194, 148, 21, 187, 148, 21, 192, 148, 226, 148, - 148, 255, 27, 148, 239, 209, 148, 225, 99, 148, 248, 9, 234, 57, 148, 5, - 224, 0, 137, 5, 252, 19, 137, 5, 254, 160, 137, 5, 224, 211, 137, 1, 57, - 137, 1, 255, 63, 137, 1, 74, 137, 1, 240, 47, 137, 1, 66, 137, 1, 225, - 76, 137, 1, 153, 146, 137, 1, 153, 149, 137, 31, 252, 21, 72, 137, 1, 72, - 137, 1, 254, 253, 137, 31, 252, 21, 73, 137, 1, 73, 137, 1, 254, 53, 137, - 1, 177, 137, 1, 238, 227, 137, 1, 246, 193, 137, 1, 246, 66, 137, 1, 235, - 137, 137, 1, 252, 39, 137, 1, 251, 204, 137, 1, 239, 179, 137, 1, 239, - 160, 137, 1, 234, 173, 137, 1, 226, 20, 137, 1, 226, 10, 137, 1, 250, - 117, 137, 1, 250, 101, 137, 1, 235, 18, 137, 1, 227, 107, 137, 1, 226, - 251, 137, 1, 250, 189, 137, 1, 250, 22, 137, 1, 236, 1, 137, 1, 213, 137, - 1, 233, 97, 137, 1, 253, 70, 137, 1, 252, 190, 137, 1, 198, 137, 1, 191, - 137, 1, 208, 137, 1, 238, 43, 137, 1, 237, 148, 137, 1, 225, 64, 137, 1, - 229, 146, 137, 1, 228, 110, 137, 1, 231, 31, 137, 1, 154, 137, 5, 234, - 202, 137, 5, 254, 40, 137, 31, 5, 255, 63, 137, 31, 5, 74, 137, 31, 5, - 240, 47, 137, 31, 5, 66, 137, 31, 5, 225, 76, 137, 31, 5, 153, 146, 137, - 31, 5, 153, 231, 100, 137, 31, 5, 252, 21, 72, 137, 31, 5, 72, 137, 31, - 5, 254, 253, 137, 31, 5, 252, 21, 73, 137, 31, 5, 73, 137, 31, 5, 254, - 53, 137, 5, 224, 216, 137, 234, 69, 137, 1, 153, 231, 100, 137, 1, 153, - 237, 149, 137, 31, 5, 153, 149, 137, 31, 5, 153, 237, 149, 137, 21, 223, - 89, 137, 21, 118, 137, 21, 113, 137, 21, 166, 137, 21, 158, 137, 21, 173, - 137, 21, 183, 137, 21, 194, 137, 21, 187, 137, 21, 192, 137, 231, 54, 53, - 134, 5, 252, 19, 134, 5, 254, 160, 134, 5, 224, 211, 134, 1, 57, 134, 1, - 255, 63, 134, 1, 74, 134, 1, 240, 47, 134, 1, 66, 134, 1, 225, 76, 134, - 1, 153, 146, 134, 1, 153, 149, 134, 1, 72, 134, 1, 254, 253, 134, 1, 73, - 134, 1, 254, 53, 134, 1, 177, 134, 1, 238, 227, 134, 1, 246, 193, 134, 1, - 246, 66, 134, 1, 235, 137, 134, 1, 252, 39, 134, 1, 251, 204, 134, 1, - 239, 179, 134, 1, 239, 160, 134, 1, 234, 173, 134, 1, 226, 20, 134, 1, - 226, 10, 134, 1, 250, 117, 134, 1, 250, 101, 134, 1, 235, 18, 134, 1, - 227, 107, 134, 1, 226, 251, 134, 1, 250, 189, 134, 1, 250, 22, 134, 1, - 236, 1, 134, 1, 213, 134, 1, 233, 97, 134, 1, 253, 70, 134, 1, 252, 190, - 134, 1, 198, 134, 1, 191, 134, 1, 208, 134, 1, 238, 43, 134, 1, 237, 148, - 134, 1, 225, 64, 134, 1, 229, 146, 134, 1, 228, 110, 134, 1, 231, 31, - 134, 1, 154, 134, 5, 234, 202, 134, 5, 254, 40, 134, 31, 5, 255, 63, 134, - 31, 5, 74, 134, 31, 5, 240, 47, 134, 31, 5, 66, 134, 31, 5, 225, 76, 134, - 31, 5, 153, 146, 134, 31, 5, 153, 231, 100, 134, 31, 5, 72, 134, 31, 5, - 254, 253, 134, 31, 5, 73, 134, 31, 5, 254, 53, 134, 5, 224, 216, 134, - 254, 254, 237, 219, 76, 134, 254, 54, 237, 219, 76, 134, 1, 231, 99, 134, - 1, 231, 184, 134, 1, 223, 126, 134, 1, 153, 231, 100, 134, 1, 153, 237, - 149, 134, 31, 5, 153, 149, 134, 31, 5, 153, 237, 149, 134, 21, 223, 89, - 134, 21, 118, 134, 21, 113, 134, 21, 166, 134, 21, 158, 134, 21, 173, - 134, 21, 183, 134, 21, 194, 134, 21, 187, 134, 21, 192, 134, 239, 196, - 134, 1, 224, 173, 160, 5, 254, 160, 160, 5, 224, 211, 160, 1, 57, 160, 1, - 255, 63, 160, 1, 74, 160, 1, 240, 47, 160, 1, 66, 160, 1, 225, 76, 160, - 1, 72, 160, 1, 248, 35, 160, 1, 254, 253, 160, 1, 73, 160, 1, 234, 52, - 160, 1, 254, 53, 160, 1, 177, 160, 1, 235, 137, 160, 1, 252, 39, 160, 1, - 239, 179, 160, 1, 234, 173, 160, 1, 226, 20, 160, 1, 235, 18, 160, 1, - 227, 107, 160, 1, 236, 1, 160, 1, 235, 10, 160, 1, 213, 160, 1, 198, 160, - 1, 191, 160, 1, 208, 160, 1, 231, 99, 160, 1, 238, 43, 160, 1, 237, 148, - 160, 1, 237, 147, 160, 1, 225, 64, 160, 1, 229, 146, 160, 1, 228, 110, - 160, 1, 231, 31, 160, 1, 154, 160, 31, 5, 255, 63, 160, 31, 5, 74, 160, - 31, 5, 240, 47, 160, 31, 5, 66, 160, 31, 5, 225, 76, 160, 31, 5, 72, 160, - 31, 5, 248, 35, 160, 31, 5, 254, 253, 160, 31, 5, 73, 160, 31, 5, 234, - 52, 160, 31, 5, 254, 53, 160, 5, 224, 216, 160, 234, 69, 160, 254, 54, - 237, 219, 76, 160, 21, 223, 89, 160, 21, 118, 160, 21, 113, 160, 21, 166, - 160, 21, 158, 160, 21, 173, 160, 21, 183, 160, 21, 194, 160, 21, 187, - 160, 21, 192, 160, 65, 227, 23, 160, 65, 168, 244, 135, 160, 65, 168, - 226, 194, 160, 250, 121, 53, 160, 236, 88, 53, 160, 223, 226, 53, 160, - 250, 74, 53, 160, 250, 250, 53, 160, 254, 87, 64, 53, 160, 231, 54, 53, - 160, 65, 53, 119, 5, 252, 19, 119, 5, 254, 160, 119, 5, 224, 211, 119, 1, - 57, 119, 1, 255, 63, 119, 1, 74, 119, 1, 240, 47, 119, 1, 66, 119, 1, - 225, 76, 119, 1, 153, 146, 119, 1, 153, 149, 119, 1, 72, 119, 1, 248, 35, - 119, 1, 254, 253, 119, 1, 73, 119, 1, 234, 52, 119, 1, 254, 53, 119, 1, - 177, 119, 1, 238, 227, 119, 1, 246, 193, 119, 1, 246, 66, 119, 1, 235, - 137, 119, 1, 252, 39, 119, 1, 251, 204, 119, 1, 239, 179, 119, 1, 239, - 160, 119, 1, 234, 173, 119, 1, 226, 20, 119, 1, 226, 10, 119, 1, 250, - 117, 119, 1, 250, 101, 119, 1, 235, 18, 119, 1, 227, 107, 119, 1, 226, - 251, 119, 1, 250, 189, 119, 1, 250, 22, 119, 1, 236, 1, 119, 1, 213, 119, - 1, 233, 97, 119, 1, 253, 70, 119, 1, 252, 190, 119, 1, 198, 119, 1, 191, - 119, 1, 208, 119, 1, 231, 99, 119, 1, 238, 43, 119, 1, 237, 148, 119, 1, - 225, 64, 119, 1, 229, 146, 119, 1, 228, 110, 119, 1, 231, 31, 119, 1, - 154, 119, 5, 254, 40, 119, 31, 5, 255, 63, 119, 31, 5, 74, 119, 31, 5, - 240, 47, 119, 31, 5, 66, 119, 31, 5, 225, 76, 119, 31, 5, 153, 146, 119, - 31, 5, 153, 231, 100, 119, 31, 5, 72, 119, 31, 5, 248, 35, 119, 31, 5, - 254, 253, 119, 31, 5, 73, 119, 31, 5, 234, 52, 119, 31, 5, 254, 53, 119, - 5, 224, 216, 119, 237, 219, 76, 119, 254, 254, 237, 219, 76, 119, 1, 226, - 44, 119, 1, 248, 70, 119, 1, 153, 231, 100, 119, 1, 153, 237, 149, 119, - 31, 5, 153, 149, 119, 31, 5, 153, 237, 149, 119, 21, 223, 89, 119, 21, - 118, 119, 21, 113, 119, 21, 166, 119, 21, 158, 119, 21, 173, 119, 21, - 183, 119, 21, 194, 119, 21, 187, 119, 21, 192, 119, 246, 235, 21, 223, - 90, 32, 234, 90, 232, 232, 106, 158, 119, 246, 235, 21, 168, 32, 234, 90, - 232, 232, 106, 158, 119, 246, 235, 21, 135, 32, 234, 90, 232, 232, 106, - 158, 119, 246, 235, 21, 152, 32, 234, 90, 232, 232, 106, 158, 119, 246, - 235, 21, 168, 32, 247, 158, 232, 232, 106, 158, 119, 246, 235, 21, 135, - 32, 247, 158, 232, 232, 106, 158, 119, 246, 235, 21, 152, 32, 247, 158, - 232, 232, 106, 158, 119, 5, 225, 226, 129, 5, 254, 160, 129, 5, 224, 211, - 129, 1, 57, 129, 1, 255, 63, 129, 1, 74, 129, 1, 240, 47, 129, 1, 66, - 129, 1, 225, 76, 129, 1, 153, 146, 129, 1, 153, 149, 129, 1, 72, 129, 1, - 248, 35, 129, 1, 254, 253, 129, 1, 73, 129, 1, 234, 52, 129, 1, 254, 53, - 129, 1, 177, 129, 1, 238, 227, 129, 1, 246, 193, 129, 1, 246, 66, 129, 1, - 235, 137, 129, 1, 252, 39, 129, 1, 251, 204, 129, 1, 239, 179, 129, 1, - 239, 160, 129, 1, 234, 173, 129, 1, 226, 20, 129, 1, 226, 10, 129, 1, - 250, 117, 129, 1, 250, 101, 129, 1, 235, 18, 129, 1, 227, 107, 129, 1, - 226, 251, 129, 1, 250, 189, 129, 1, 250, 22, 129, 1, 236, 1, 129, 1, 213, - 129, 1, 233, 97, 129, 1, 253, 70, 129, 1, 252, 190, 129, 1, 198, 129, 1, - 191, 129, 1, 208, 129, 1, 231, 99, 129, 1, 238, 43, 129, 1, 237, 148, - 129, 1, 225, 64, 129, 1, 229, 146, 129, 1, 228, 110, 129, 1, 231, 31, - 129, 1, 154, 129, 5, 234, 202, 129, 5, 254, 40, 129, 31, 5, 255, 63, 129, - 31, 5, 74, 129, 31, 5, 240, 47, 129, 31, 5, 66, 129, 31, 5, 225, 76, 129, - 31, 5, 153, 146, 129, 31, 5, 153, 231, 100, 129, 31, 5, 72, 129, 31, 5, - 248, 35, 129, 31, 5, 254, 253, 129, 31, 5, 73, 129, 31, 5, 234, 52, 129, - 31, 5, 254, 53, 129, 5, 224, 216, 129, 237, 219, 76, 129, 254, 254, 237, - 219, 76, 129, 1, 247, 129, 129, 1, 153, 231, 100, 129, 1, 153, 237, 149, - 129, 31, 5, 153, 149, 129, 31, 5, 153, 237, 149, 129, 21, 223, 89, 129, - 21, 118, 129, 21, 113, 129, 21, 166, 129, 21, 158, 129, 21, 173, 129, 21, - 183, 129, 21, 194, 129, 21, 187, 129, 21, 192, 129, 5, 239, 150, 129, 5, - 225, 114, 114, 5, 254, 160, 114, 5, 224, 211, 114, 1, 57, 114, 1, 255, - 63, 114, 1, 74, 114, 1, 240, 47, 114, 1, 66, 114, 1, 225, 76, 114, 1, - 153, 146, 114, 1, 153, 149, 114, 1, 72, 114, 1, 248, 35, 114, 1, 254, - 253, 114, 1, 73, 114, 1, 234, 52, 114, 1, 254, 53, 114, 1, 177, 114, 1, - 238, 227, 114, 1, 246, 193, 114, 1, 246, 66, 114, 1, 235, 137, 114, 1, - 252, 39, 114, 1, 251, 204, 114, 1, 239, 179, 114, 1, 239, 160, 114, 1, - 234, 173, 114, 1, 226, 20, 114, 1, 226, 10, 114, 1, 250, 117, 114, 1, - 250, 101, 114, 1, 235, 18, 114, 1, 227, 107, 114, 1, 226, 251, 114, 1, - 250, 189, 114, 1, 250, 22, 114, 1, 236, 1, 114, 1, 213, 114, 1, 233, 97, - 114, 1, 253, 70, 114, 1, 252, 190, 114, 1, 198, 114, 1, 191, 114, 1, 208, - 114, 1, 231, 99, 114, 1, 238, 43, 114, 1, 237, 148, 114, 1, 237, 147, - 114, 1, 225, 64, 114, 1, 229, 146, 114, 1, 228, 110, 114, 1, 231, 31, - 114, 1, 154, 114, 5, 254, 40, 114, 31, 5, 255, 63, 114, 31, 5, 74, 114, - 31, 5, 240, 47, 114, 31, 5, 66, 114, 31, 5, 225, 76, 114, 31, 5, 153, - 146, 114, 31, 5, 153, 231, 100, 114, 31, 5, 72, 114, 31, 5, 248, 35, 114, - 31, 5, 254, 253, 114, 31, 5, 73, 114, 31, 5, 234, 52, 114, 31, 5, 254, - 53, 114, 5, 224, 216, 114, 254, 54, 237, 219, 76, 114, 1, 153, 231, 100, - 114, 1, 153, 237, 149, 114, 31, 5, 153, 149, 114, 31, 5, 153, 237, 149, - 114, 21, 223, 89, 114, 21, 118, 114, 21, 113, 114, 21, 166, 114, 21, 158, - 114, 21, 173, 114, 21, 183, 114, 21, 194, 114, 21, 187, 114, 21, 192, - 114, 65, 227, 23, 114, 65, 168, 244, 135, 114, 65, 168, 226, 194, 114, - 246, 235, 168, 232, 76, 114, 246, 235, 168, 245, 151, 114, 246, 235, 152, - 232, 74, 114, 250, 125, 76, 114, 1, 251, 162, 235, 19, 114, 1, 251, 162, - 199, 114, 1, 251, 162, 231, 100, 114, 1, 251, 162, 149, 114, 1, 251, 162, - 237, 149, 114, 1, 251, 162, 239, 76, 147, 5, 254, 159, 147, 5, 224, 210, - 147, 1, 254, 32, 147, 1, 255, 54, 147, 1, 255, 13, 147, 1, 255, 17, 147, - 1, 239, 187, 147, 1, 240, 46, 147, 1, 225, 69, 147, 1, 225, 71, 147, 1, - 239, 207, 147, 1, 239, 208, 147, 1, 240, 32, 147, 1, 240, 34, 147, 1, - 247, 138, 147, 1, 248, 31, 147, 1, 254, 242, 147, 1, 233, 247, 147, 1, - 234, 47, 147, 1, 254, 43, 147, 1, 254, 208, 239, 8, 147, 1, 237, 54, 239, - 8, 147, 1, 254, 208, 246, 147, 147, 1, 237, 54, 246, 147, 147, 1, 239, - 42, 235, 251, 147, 1, 230, 248, 246, 147, 147, 1, 254, 208, 251, 249, - 147, 1, 237, 54, 251, 249, 147, 1, 254, 208, 239, 171, 147, 1, 237, 54, - 239, 171, 147, 1, 227, 102, 235, 251, 147, 1, 227, 102, 230, 247, 235, - 252, 147, 1, 230, 248, 239, 171, 147, 1, 254, 208, 226, 18, 147, 1, 237, - 54, 226, 18, 147, 1, 254, 208, 250, 108, 147, 1, 237, 54, 250, 108, 147, - 1, 236, 26, 235, 218, 147, 1, 230, 248, 250, 108, 147, 1, 254, 208, 227, - 52, 147, 1, 237, 54, 227, 52, 147, 1, 254, 208, 250, 120, 147, 1, 237, - 54, 250, 120, 147, 1, 250, 148, 235, 218, 147, 1, 230, 248, 250, 120, - 147, 1, 254, 208, 233, 157, 147, 1, 237, 54, 233, 157, 147, 1, 254, 208, - 253, 17, 147, 1, 237, 54, 253, 17, 147, 1, 236, 251, 147, 1, 254, 195, - 253, 17, 147, 1, 223, 232, 147, 1, 231, 249, 147, 1, 250, 148, 237, 251, - 147, 1, 225, 44, 147, 1, 227, 102, 230, 233, 147, 1, 236, 26, 230, 233, - 147, 1, 250, 148, 230, 233, 147, 1, 245, 125, 147, 1, 236, 26, 237, 251, - 147, 1, 247, 99, 147, 5, 254, 232, 147, 31, 5, 255, 16, 147, 31, 5, 238, - 235, 255, 18, 147, 31, 5, 249, 231, 255, 18, 147, 31, 5, 238, 235, 239, - 204, 147, 31, 5, 249, 231, 239, 204, 147, 31, 5, 238, 235, 233, 240, 147, - 31, 5, 249, 231, 233, 240, 147, 31, 5, 246, 182, 147, 31, 5, 238, 144, - 147, 31, 5, 249, 231, 238, 144, 147, 31, 5, 238, 146, 250, 58, 147, 31, - 5, 238, 145, 245, 168, 255, 16, 147, 31, 5, 238, 145, 245, 168, 249, 231, - 255, 16, 147, 31, 5, 238, 145, 245, 168, 246, 146, 147, 31, 5, 246, 146, - 147, 31, 5, 249, 231, 246, 182, 147, 31, 5, 249, 231, 246, 146, 147, 232, - 171, 238, 98, 128, 116, 238, 151, 239, 56, 128, 116, 238, 209, 238, 224, - 128, 116, 238, 209, 238, 203, 128, 116, 238, 209, 238, 202, 128, 116, - 238, 209, 238, 206, 128, 116, 238, 209, 232, 7, 128, 116, 235, 108, 235, - 99, 128, 116, 251, 151, 251, 196, 128, 116, 251, 151, 251, 159, 128, 116, - 251, 151, 251, 195, 128, 116, 228, 170, 228, 169, 128, 116, 251, 151, - 251, 148, 128, 116, 223, 184, 223, 191, 128, 116, 249, 162, 251, 201, - 128, 116, 180, 233, 165, 128, 116, 226, 202, 226, 243, 128, 116, 226, - 202, 235, 234, 128, 116, 226, 202, 233, 72, 128, 116, 235, 7, 235, 155, - 128, 116, 249, 162, 250, 59, 128, 116, 180, 227, 71, 128, 116, 226, 202, - 226, 183, 128, 116, 226, 202, 226, 247, 128, 116, 226, 202, 226, 199, - 128, 116, 235, 7, 234, 206, 128, 116, 252, 139, 253, 54, 128, 116, 233, - 5, 233, 24, 128, 116, 233, 80, 233, 74, 128, 116, 247, 8, 247, 129, 128, - 116, 233, 80, 233, 93, 128, 116, 247, 8, 247, 111, 128, 116, 233, 80, - 231, 0, 128, 116, 236, 104, 198, 128, 116, 223, 184, 224, 1, 128, 116, - 231, 123, 231, 69, 128, 116, 231, 70, 128, 116, 237, 144, 237, 164, 128, - 116, 237, 110, 128, 116, 224, 106, 224, 169, 128, 116, 228, 170, 231, 11, - 128, 116, 228, 170, 231, 50, 128, 116, 228, 170, 228, 5, 128, 116, 244, - 228, 245, 59, 128, 116, 237, 144, 251, 135, 128, 116, 130, 254, 184, 128, - 116, 244, 228, 235, 2, 128, 116, 233, 230, 128, 116, 230, 243, 57, 128, - 116, 237, 49, 245, 147, 128, 116, 230, 243, 255, 63, 128, 116, 230, 243, - 254, 199, 128, 116, 230, 243, 74, 128, 116, 230, 243, 240, 47, 128, 116, - 230, 243, 225, 159, 128, 116, 230, 243, 225, 158, 128, 116, 230, 243, 66, - 128, 116, 230, 243, 225, 76, 128, 116, 233, 82, 128, 250, 222, 14, 253, - 55, 128, 116, 230, 243, 72, 128, 116, 230, 243, 255, 19, 128, 116, 230, - 243, 73, 128, 116, 230, 243, 254, 254, 237, 45, 128, 116, 230, 243, 254, - 254, 237, 46, 128, 116, 238, 23, 128, 116, 237, 42, 128, 116, 237, 43, - 128, 116, 237, 49, 248, 8, 128, 116, 237, 49, 226, 201, 128, 116, 237, - 49, 226, 81, 128, 116, 237, 49, 251, 186, 128, 116, 226, 241, 128, 116, - 235, 66, 128, 116, 223, 251, 128, 116, 247, 4, 128, 21, 223, 89, 128, 21, - 118, 128, 21, 113, 128, 21, 166, 128, 21, 158, 128, 21, 173, 128, 21, - 183, 128, 21, 194, 128, 21, 187, 128, 21, 192, 128, 116, 254, 183, 128, - 116, 238, 207, 179, 1, 238, 150, 179, 1, 238, 209, 227, 226, 179, 1, 238, - 209, 227, 75, 179, 1, 235, 107, 179, 1, 251, 68, 179, 1, 228, 170, 227, - 75, 179, 1, 234, 152, 179, 1, 249, 161, 179, 1, 96, 179, 1, 226, 202, - 227, 226, 179, 1, 226, 202, 227, 75, 179, 1, 235, 6, 179, 1, 252, 138, - 179, 1, 233, 4, 179, 1, 233, 80, 227, 226, 179, 1, 247, 8, 227, 75, 179, - 1, 233, 80, 227, 75, 179, 1, 247, 8, 227, 226, 179, 1, 236, 103, 179, 1, - 223, 183, 179, 1, 237, 144, 237, 164, 179, 1, 237, 144, 237, 123, 179, 1, - 224, 105, 179, 1, 228, 170, 227, 226, 179, 1, 244, 228, 227, 226, 179, 1, - 73, 179, 1, 244, 228, 227, 75, 179, 247, 249, 179, 31, 5, 57, 179, 31, 5, - 237, 49, 239, 46, 179, 31, 5, 255, 63, 179, 31, 5, 254, 199, 179, 31, 5, - 74, 179, 31, 5, 240, 47, 179, 31, 5, 224, 25, 179, 31, 5, 223, 127, 179, - 31, 5, 66, 179, 31, 5, 225, 76, 179, 31, 5, 237, 49, 238, 142, 179, 229, - 181, 5, 237, 143, 179, 229, 181, 5, 234, 152, 179, 31, 5, 72, 179, 31, 5, - 248, 22, 179, 31, 5, 73, 179, 31, 5, 254, 34, 179, 31, 5, 254, 253, 179, - 238, 151, 238, 43, 179, 206, 237, 49, 248, 8, 179, 206, 237, 49, 226, - 201, 179, 206, 237, 49, 226, 175, 179, 206, 237, 49, 251, 255, 179, 252, - 23, 76, 179, 235, 72, 179, 21, 223, 89, 179, 21, 118, 179, 21, 113, 179, - 21, 166, 179, 21, 158, 179, 21, 173, 179, 21, 183, 179, 21, 194, 179, 21, - 187, 179, 21, 192, 179, 244, 228, 235, 6, 179, 244, 228, 236, 103, 54, 4, - 234, 69, 54, 165, 245, 220, 223, 195, 236, 174, 226, 50, 57, 54, 165, - 245, 220, 223, 195, 236, 174, 255, 68, 231, 127, 252, 240, 198, 54, 165, - 245, 220, 223, 195, 236, 174, 255, 68, 245, 220, 226, 35, 198, 54, 165, - 59, 223, 195, 236, 174, 236, 237, 198, 54, 165, 251, 79, 223, 195, 236, - 174, 229, 152, 198, 54, 165, 252, 10, 223, 195, 236, 174, 233, 73, 229, - 140, 198, 54, 165, 223, 195, 236, 174, 226, 35, 229, 140, 198, 54, 165, - 230, 231, 229, 139, 54, 165, 252, 93, 223, 195, 236, 173, 54, 165, 252, - 152, 229, 68, 223, 195, 236, 173, 54, 165, 239, 226, 226, 34, 54, 165, - 250, 53, 226, 35, 252, 92, 54, 165, 229, 139, 54, 165, 234, 156, 229, - 139, 54, 165, 226, 35, 229, 139, 54, 165, 234, 156, 226, 35, 229, 139, - 54, 165, 231, 142, 251, 177, 228, 122, 229, 139, 54, 165, 231, 187, 245, - 244, 229, 139, 54, 165, 252, 10, 255, 72, 231, 73, 236, 236, 182, 252, - 26, 54, 165, 245, 220, 226, 34, 54, 237, 137, 5, 251, 202, 231, 72, 54, - 237, 137, 5, 237, 203, 231, 72, 54, 254, 66, 5, 229, 149, 246, 134, 255, - 73, 231, 72, 54, 254, 66, 5, 255, 70, 213, 54, 254, 66, 5, 230, 214, 226, - 30, 54, 5, 231, 246, 249, 173, 246, 133, 54, 5, 231, 246, 249, 173, 246, - 13, 54, 5, 231, 246, 249, 173, 245, 221, 54, 5, 231, 246, 235, 249, 246, - 133, 54, 5, 231, 246, 235, 249, 246, 13, 54, 5, 231, 246, 249, 173, 231, - 246, 235, 248, 54, 21, 223, 89, 54, 21, 118, 54, 21, 113, 54, 21, 166, - 54, 21, 158, 54, 21, 173, 54, 21, 183, 54, 21, 194, 54, 21, 187, 54, 21, - 192, 54, 21, 132, 118, 54, 21, 132, 113, 54, 21, 132, 166, 54, 21, 132, - 158, 54, 21, 132, 173, 54, 21, 132, 183, 54, 21, 132, 194, 54, 21, 132, - 187, 54, 21, 132, 192, 54, 21, 132, 223, 89, 54, 165, 252, 95, 231, 72, - 54, 165, 235, 131, 252, 46, 234, 164, 223, 29, 54, 165, 252, 10, 255, 72, - 231, 73, 252, 47, 236, 138, 252, 26, 54, 165, 235, 131, 252, 46, 229, - 150, 231, 72, 54, 165, 251, 183, 236, 173, 54, 165, 226, 45, 255, 69, 54, - 165, 245, 209, 231, 73, 245, 174, 54, 165, 245, 209, 231, 73, 245, 180, - 54, 165, 254, 185, 238, 220, 245, 174, 54, 165, 254, 185, 238, 220, 245, - 180, 54, 5, 223, 245, 226, 33, 54, 5, 237, 25, 226, 33, 54, 1, 177, 54, - 1, 238, 227, 54, 1, 246, 193, 54, 1, 246, 66, 54, 1, 235, 137, 54, 1, - 252, 39, 54, 1, 251, 204, 54, 1, 239, 179, 54, 1, 234, 173, 54, 1, 226, - 20, 54, 1, 226, 10, 54, 1, 250, 117, 54, 1, 250, 101, 54, 1, 235, 18, 54, - 1, 227, 107, 54, 1, 226, 251, 54, 1, 250, 189, 54, 1, 250, 22, 54, 1, - 236, 1, 54, 1, 213, 54, 1, 233, 97, 54, 1, 253, 70, 54, 1, 252, 190, 54, - 1, 198, 54, 1, 226, 44, 54, 1, 226, 37, 54, 1, 248, 70, 54, 1, 248, 66, - 54, 1, 224, 173, 54, 1, 223, 85, 54, 1, 223, 117, 54, 1, 255, 75, 54, 1, - 191, 54, 1, 208, 54, 1, 238, 43, 54, 1, 229, 146, 54, 1, 228, 110, 54, 1, - 231, 31, 54, 1, 154, 54, 1, 57, 54, 1, 238, 110, 54, 1, 247, 34, 208, 54, - 1, 238, 167, 54, 1, 231, 99, 54, 31, 5, 255, 63, 54, 31, 5, 74, 54, 31, - 5, 240, 47, 54, 31, 5, 66, 54, 31, 5, 225, 76, 54, 31, 5, 153, 146, 54, - 31, 5, 153, 231, 100, 54, 31, 5, 153, 149, 54, 31, 5, 153, 237, 149, 54, - 31, 5, 72, 54, 31, 5, 248, 35, 54, 31, 5, 73, 54, 31, 5, 234, 52, 54, 5, - 231, 128, 228, 7, 235, 138, 231, 122, 54, 5, 231, 127, 252, 239, 54, 31, - 5, 200, 74, 54, 31, 5, 200, 240, 47, 54, 5, 234, 164, 223, 30, 235, 255, - 250, 189, 54, 5, 228, 178, 237, 245, 54, 165, 245, 153, 54, 165, 233, - 221, 54, 5, 237, 248, 231, 72, 54, 5, 223, 249, 231, 72, 54, 5, 237, 249, - 226, 45, 252, 26, 54, 5, 236, 238, 252, 26, 54, 5, 245, 223, 252, 27, - 231, 185, 54, 5, 245, 223, 236, 230, 231, 185, 54, 228, 0, 1, 177, 54, - 228, 0, 1, 238, 227, 54, 228, 0, 1, 246, 193, 54, 228, 0, 1, 246, 66, 54, - 228, 0, 1, 235, 137, 54, 228, 0, 1, 252, 39, 54, 228, 0, 1, 251, 204, 54, - 228, 0, 1, 239, 179, 54, 228, 0, 1, 234, 173, 54, 228, 0, 1, 226, 20, 54, - 228, 0, 1, 226, 10, 54, 228, 0, 1, 250, 117, 54, 228, 0, 1, 250, 101, 54, - 228, 0, 1, 235, 18, 54, 228, 0, 1, 227, 107, 54, 228, 0, 1, 226, 251, 54, - 228, 0, 1, 250, 189, 54, 228, 0, 1, 250, 22, 54, 228, 0, 1, 236, 1, 54, - 228, 0, 1, 213, 54, 228, 0, 1, 233, 97, 54, 228, 0, 1, 253, 70, 54, 228, - 0, 1, 252, 190, 54, 228, 0, 1, 198, 54, 228, 0, 1, 226, 44, 54, 228, 0, - 1, 226, 37, 54, 228, 0, 1, 248, 70, 54, 228, 0, 1, 248, 66, 54, 228, 0, - 1, 224, 173, 54, 228, 0, 1, 223, 85, 54, 228, 0, 1, 223, 117, 54, 228, 0, - 1, 255, 75, 54, 228, 0, 1, 191, 54, 228, 0, 1, 208, 54, 228, 0, 1, 238, - 43, 54, 228, 0, 1, 229, 146, 54, 228, 0, 1, 228, 110, 54, 228, 0, 1, 231, - 31, 54, 228, 0, 1, 154, 54, 228, 0, 1, 57, 54, 228, 0, 1, 238, 110, 54, - 228, 0, 1, 247, 34, 224, 173, 54, 228, 0, 1, 247, 34, 191, 54, 228, 0, 1, - 247, 34, 208, 54, 238, 108, 231, 71, 238, 227, 54, 238, 108, 231, 71, - 238, 228, 252, 47, 236, 138, 252, 26, 54, 252, 17, 5, 112, 252, 234, 54, - 252, 17, 5, 157, 252, 234, 54, 252, 17, 5, 252, 18, 227, 43, 54, 252, 17, - 5, 230, 230, 255, 74, 54, 14, 248, 116, 252, 90, 54, 14, 231, 245, 231, - 129, 54, 14, 233, 234, 246, 132, 54, 14, 231, 245, 231, 130, 231, 187, - 245, 243, 54, 14, 233, 73, 213, 54, 14, 234, 248, 252, 90, 54, 14, 234, - 248, 252, 91, 234, 156, 255, 71, 54, 14, 234, 248, 252, 91, 245, 222, - 255, 71, 54, 14, 234, 248, 252, 91, 252, 47, 255, 71, 54, 5, 231, 246, - 235, 249, 231, 246, 249, 172, 54, 5, 231, 246, 235, 249, 245, 221, 54, - 165, 252, 94, 229, 68, 246, 47, 236, 174, 231, 186, 54, 165, 236, 105, - 223, 195, 246, 47, 236, 174, 231, 186, 54, 165, 234, 156, 226, 34, 54, - 165, 59, 252, 110, 231, 124, 223, 195, 236, 174, 236, 237, 198, 54, 165, - 251, 79, 252, 110, 231, 124, 223, 195, 236, 174, 229, 152, 198, 69, 1, - 177, 69, 1, 238, 227, 69, 1, 246, 193, 69, 1, 246, 66, 69, 1, 235, 137, - 69, 1, 252, 39, 69, 1, 251, 204, 69, 1, 239, 179, 69, 1, 239, 160, 69, 1, - 234, 173, 69, 1, 235, 8, 69, 1, 226, 20, 69, 1, 226, 10, 69, 1, 250, 117, - 69, 1, 250, 101, 69, 1, 235, 18, 69, 1, 227, 107, 69, 1, 226, 251, 69, 1, - 250, 189, 69, 1, 250, 22, 69, 1, 236, 1, 69, 1, 213, 69, 1, 233, 97, 69, - 1, 253, 70, 69, 1, 252, 190, 69, 1, 198, 69, 1, 191, 69, 1, 208, 69, 1, - 238, 43, 69, 1, 224, 173, 69, 1, 231, 31, 69, 1, 154, 69, 1, 237, 148, - 69, 1, 57, 69, 1, 229, 131, 57, 69, 1, 74, 69, 1, 240, 47, 69, 1, 66, 69, - 1, 225, 76, 69, 1, 72, 69, 1, 236, 95, 72, 69, 1, 73, 69, 1, 254, 53, 69, - 31, 5, 227, 77, 255, 63, 69, 31, 5, 255, 63, 69, 31, 5, 74, 69, 31, 5, - 240, 47, 69, 31, 5, 66, 69, 31, 5, 225, 76, 69, 31, 5, 72, 69, 31, 5, - 254, 253, 69, 31, 5, 236, 95, 240, 47, 69, 31, 5, 236, 95, 73, 69, 31, 5, - 161, 46, 69, 5, 254, 160, 69, 5, 56, 51, 69, 5, 224, 211, 69, 5, 224, - 216, 69, 5, 254, 84, 69, 251, 33, 5, 124, 191, 69, 251, 33, 5, 124, 208, - 69, 251, 33, 5, 124, 224, 173, 69, 251, 33, 5, 124, 154, 69, 1, 245, 233, - 231, 31, 69, 21, 223, 89, 69, 21, 118, 69, 21, 113, 69, 21, 166, 69, 21, - 158, 69, 21, 173, 69, 21, 183, 69, 21, 194, 69, 21, 187, 69, 21, 192, 69, - 5, 237, 155, 230, 205, 69, 5, 230, 205, 69, 14, 237, 140, 69, 14, 251, - 49, 69, 14, 255, 11, 69, 14, 246, 119, 69, 1, 229, 146, 69, 1, 228, 110, - 69, 1, 153, 146, 69, 1, 153, 231, 100, 69, 1, 153, 149, 69, 1, 153, 237, - 149, 69, 31, 5, 153, 146, 69, 31, 5, 153, 231, 100, 69, 31, 5, 153, 149, - 69, 31, 5, 153, 237, 149, 69, 1, 236, 95, 235, 137, 69, 1, 236, 95, 239, - 160, 69, 1, 236, 95, 253, 16, 69, 1, 236, 95, 253, 12, 69, 251, 33, 5, - 236, 95, 124, 236, 1, 69, 251, 33, 5, 236, 95, 124, 198, 69, 251, 33, 5, - 236, 95, 124, 238, 43, 69, 1, 229, 151, 239, 28, 229, 146, 69, 31, 5, - 229, 151, 239, 28, 247, 165, 69, 206, 165, 229, 151, 239, 28, 245, 129, - 69, 206, 165, 229, 151, 239, 28, 239, 4, 233, 79, 69, 1, 224, 129, 232, - 150, 239, 28, 226, 251, 69, 1, 224, 129, 232, 150, 239, 28, 232, 156, 69, - 31, 5, 224, 129, 232, 150, 239, 28, 247, 165, 69, 31, 5, 224, 129, 232, - 150, 239, 28, 225, 159, 69, 5, 224, 129, 232, 150, 239, 28, 226, 117, 69, - 5, 224, 129, 232, 150, 239, 28, 226, 116, 69, 5, 224, 129, 232, 150, 239, - 28, 226, 115, 69, 5, 224, 129, 232, 150, 239, 28, 226, 114, 69, 5, 224, - 129, 232, 150, 239, 28, 226, 113, 69, 1, 248, 44, 232, 150, 239, 28, 235, - 18, 69, 1, 248, 44, 232, 150, 239, 28, 223, 134, 69, 1, 248, 44, 232, - 150, 239, 28, 246, 49, 69, 31, 5, 246, 129, 239, 28, 74, 69, 31, 5, 239, - 9, 234, 88, 69, 31, 5, 239, 9, 66, 69, 31, 5, 239, 9, 248, 35, 69, 1, - 229, 131, 177, 69, 1, 229, 131, 238, 227, 69, 1, 229, 131, 246, 193, 69, - 1, 229, 131, 252, 39, 69, 1, 229, 131, 223, 117, 69, 1, 229, 131, 234, - 173, 69, 1, 229, 131, 250, 189, 69, 1, 229, 131, 236, 1, 69, 1, 229, 131, - 233, 97, 69, 1, 229, 131, 247, 129, 69, 1, 229, 131, 253, 70, 69, 1, 229, - 131, 226, 251, 69, 1, 229, 131, 154, 69, 251, 33, 5, 229, 131, 124, 224, - 173, 69, 31, 5, 229, 131, 255, 63, 69, 31, 5, 229, 131, 72, 69, 31, 5, - 229, 131, 161, 46, 69, 31, 5, 229, 131, 35, 224, 25, 69, 5, 229, 131, - 226, 116, 69, 5, 229, 131, 226, 115, 69, 5, 229, 131, 226, 113, 69, 5, - 229, 131, 226, 112, 69, 5, 229, 131, 251, 2, 226, 116, 69, 5, 229, 131, - 251, 2, 226, 115, 69, 5, 229, 131, 251, 2, 247, 242, 226, 118, 69, 1, - 231, 61, 233, 226, 247, 129, 69, 5, 231, 61, 233, 226, 226, 113, 69, 229, - 131, 21, 223, 89, 69, 229, 131, 21, 118, 69, 229, 131, 21, 113, 69, 229, - 131, 21, 166, 69, 229, 131, 21, 158, 69, 229, 131, 21, 173, 69, 229, 131, - 21, 183, 69, 229, 131, 21, 194, 69, 229, 131, 21, 187, 69, 229, 131, 21, - 192, 69, 14, 229, 131, 118, 69, 14, 229, 131, 247, 148, 87, 6, 1, 254, - 190, 87, 6, 1, 253, 44, 87, 6, 1, 246, 168, 87, 6, 1, 249, 148, 87, 6, 1, - 247, 239, 87, 6, 1, 224, 219, 87, 6, 1, 223, 92, 87, 6, 1, 227, 73, 87, - 6, 1, 240, 16, 87, 6, 1, 239, 46, 87, 6, 1, 238, 6, 87, 6, 1, 237, 35, - 87, 6, 1, 235, 230, 87, 6, 1, 234, 61, 87, 6, 1, 233, 194, 87, 6, 1, 223, - 81, 87, 6, 1, 232, 15, 87, 6, 1, 230, 253, 87, 6, 1, 227, 67, 87, 6, 1, - 225, 138, 87, 6, 1, 233, 92, 87, 6, 1, 238, 218, 87, 6, 1, 246, 60, 87, - 6, 1, 232, 123, 87, 6, 1, 229, 78, 87, 6, 1, 251, 161, 87, 6, 1, 252, 26, - 87, 6, 1, 239, 149, 87, 6, 1, 251, 109, 87, 6, 1, 251, 192, 87, 6, 1, - 224, 70, 87, 6, 1, 239, 159, 87, 6, 1, 245, 165, 87, 6, 1, 245, 121, 87, - 6, 1, 245, 71, 87, 6, 1, 224, 141, 87, 6, 1, 245, 141, 87, 6, 1, 244, - 225, 87, 1, 254, 190, 87, 1, 253, 44, 87, 1, 246, 168, 87, 1, 249, 148, - 87, 1, 247, 239, 87, 1, 224, 219, 87, 1, 223, 92, 87, 1, 227, 73, 87, 1, - 240, 16, 87, 1, 239, 46, 87, 1, 238, 6, 87, 1, 237, 35, 87, 1, 235, 230, - 87, 1, 234, 61, 87, 1, 233, 194, 87, 1, 223, 81, 87, 1, 232, 15, 87, 1, - 230, 253, 87, 1, 227, 67, 87, 1, 225, 138, 87, 1, 233, 92, 87, 1, 238, - 218, 87, 1, 246, 60, 87, 1, 232, 123, 87, 1, 229, 78, 87, 1, 251, 161, - 87, 1, 252, 26, 87, 1, 239, 149, 87, 1, 251, 109, 87, 1, 251, 192, 87, 1, - 224, 70, 87, 1, 239, 159, 87, 1, 245, 165, 87, 1, 245, 121, 87, 1, 245, - 71, 87, 1, 224, 141, 87, 1, 245, 141, 87, 1, 244, 225, 87, 1, 247, 70, - 87, 1, 223, 185, 87, 1, 247, 251, 87, 1, 209, 246, 168, 87, 1, 254, 248, - 87, 233, 192, 229, 173, 52, 1, 87, 235, 230, 26, 122, 238, 173, 26, 122, - 228, 104, 26, 122, 235, 82, 26, 122, 226, 163, 26, 122, 228, 99, 26, 122, - 231, 174, 26, 122, 236, 148, 26, 122, 233, 60, 26, 122, 228, 102, 26, - 122, 228, 236, 26, 122, 228, 100, 26, 122, 240, 68, 26, 122, 251, 113, - 26, 122, 228, 107, 26, 122, 251, 167, 26, 122, 238, 210, 26, 122, 226, - 218, 26, 122, 233, 85, 26, 122, 245, 69, 26, 122, 235, 79, 26, 122, 228, - 103, 26, 122, 235, 74, 26, 122, 235, 77, 26, 122, 226, 162, 26, 122, 231, - 165, 26, 122, 228, 101, 26, 122, 231, 173, 26, 122, 239, 31, 26, 122, - 236, 143, 26, 122, 239, 34, 26, 122, 233, 56, 26, 122, 233, 55, 26, 122, - 233, 45, 26, 122, 233, 52, 26, 122, 233, 50, 26, 122, 233, 48, 26, 122, - 233, 49, 26, 122, 233, 47, 26, 122, 233, 51, 26, 122, 233, 58, 26, 122, - 233, 59, 26, 122, 233, 46, 26, 122, 233, 54, 26, 122, 239, 32, 26, 122, - 239, 30, 26, 122, 228, 230, 26, 122, 228, 228, 26, 122, 228, 221, 26, - 122, 228, 224, 26, 122, 228, 229, 26, 122, 228, 226, 26, 122, 228, 225, - 26, 122, 228, 223, 26, 122, 228, 232, 26, 122, 228, 234, 26, 122, 228, - 235, 26, 122, 228, 231, 26, 122, 228, 222, 26, 122, 228, 227, 26, 122, - 228, 233, 26, 122, 251, 154, 26, 122, 251, 152, 26, 122, 251, 212, 26, - 122, 251, 210, 26, 122, 233, 204, 26, 122, 240, 64, 26, 122, 240, 56, 26, - 122, 240, 63, 26, 122, 240, 60, 26, 122, 240, 59, 26, 122, 240, 62, 26, - 122, 228, 105, 26, 122, 240, 66, 26, 122, 240, 67, 26, 122, 240, 57, 26, - 122, 240, 61, 26, 122, 223, 212, 26, 122, 251, 112, 26, 122, 251, 155, - 26, 122, 251, 153, 26, 122, 251, 213, 26, 122, 251, 211, 26, 122, 251, - 165, 26, 122, 251, 166, 26, 122, 251, 156, 26, 122, 251, 214, 26, 122, - 233, 84, 26, 122, 239, 33, 26, 122, 228, 106, 26, 122, 223, 218, 26, 122, - 247, 52, 26, 170, 247, 52, 26, 170, 57, 26, 170, 255, 19, 26, 170, 191, - 26, 170, 224, 10, 26, 170, 247, 217, 26, 170, 72, 26, 170, 223, 221, 26, - 170, 223, 228, 26, 170, 73, 26, 170, 224, 173, 26, 170, 224, 170, 26, - 170, 234, 88, 26, 170, 223, 183, 26, 170, 66, 26, 170, 224, 133, 26, 170, - 224, 141, 26, 170, 224, 118, 26, 170, 223, 158, 26, 170, 247, 165, 26, - 170, 223, 202, 26, 170, 74, 26, 170, 255, 67, 26, 170, 255, 66, 26, 170, - 224, 23, 26, 170, 224, 22, 26, 170, 247, 215, 26, 170, 247, 214, 26, 170, - 247, 216, 26, 170, 223, 220, 26, 170, 223, 219, 26, 170, 234, 109, 26, - 170, 234, 110, 26, 170, 234, 106, 26, 170, 234, 108, 26, 170, 234, 107, - 26, 170, 223, 180, 26, 170, 223, 179, 26, 170, 223, 178, 26, 170, 223, - 181, 26, 170, 223, 182, 26, 170, 225, 177, 26, 170, 225, 176, 26, 170, - 225, 175, 26, 170, 225, 173, 26, 170, 225, 174, 26, 170, 223, 157, 26, - 170, 223, 155, 26, 170, 223, 156, 26, 170, 223, 151, 26, 170, 223, 152, - 26, 170, 223, 153, 26, 170, 223, 154, 26, 170, 247, 163, 26, 170, 247, - 164, 26, 170, 223, 201, 26, 170, 244, 80, 26, 170, 244, 74, 26, 170, 244, - 76, 26, 170, 244, 75, 26, 170, 244, 77, 26, 170, 244, 79, 26, 170, 254, - 128, 26, 170, 254, 127, 26, 170, 254, 125, 26, 170, 254, 126, 26, 170, - 228, 108, 26, 138, 238, 173, 26, 138, 228, 104, 26, 138, 238, 171, 26, - 138, 235, 82, 26, 138, 235, 81, 26, 138, 235, 80, 26, 138, 226, 163, 26, - 138, 231, 174, 26, 138, 231, 170, 26, 138, 231, 168, 26, 138, 231, 162, - 26, 138, 231, 159, 26, 138, 231, 157, 26, 138, 231, 163, 26, 138, 231, - 173, 26, 138, 236, 148, 26, 138, 233, 60, 26, 138, 233, 52, 26, 138, 228, - 236, 26, 138, 228, 100, 26, 138, 240, 68, 26, 138, 251, 113, 26, 138, - 251, 167, 26, 138, 238, 210, 26, 138, 226, 218, 26, 138, 233, 85, 26, - 138, 245, 69, 26, 138, 238, 172, 26, 138, 238, 170, 26, 138, 235, 79, 26, - 138, 235, 74, 26, 138, 235, 76, 26, 138, 235, 78, 26, 138, 235, 75, 26, - 138, 226, 162, 26, 138, 226, 161, 26, 138, 231, 169, 26, 138, 231, 165, - 26, 138, 231, 156, 26, 138, 231, 155, 26, 138, 228, 101, 26, 138, 231, - 167, 26, 138, 231, 166, 26, 138, 231, 160, 26, 138, 231, 161, 26, 138, - 231, 172, 26, 138, 231, 158, 26, 138, 231, 164, 26, 138, 231, 171, 26, - 138, 231, 154, 26, 138, 236, 145, 26, 138, 236, 142, 26, 138, 236, 143, - 26, 138, 236, 141, 26, 138, 236, 140, 26, 138, 236, 144, 26, 138, 236, - 147, 26, 138, 236, 146, 26, 138, 239, 34, 26, 138, 233, 53, 26, 138, 233, - 54, 26, 138, 233, 57, 26, 138, 239, 32, 26, 138, 228, 230, 26, 138, 228, - 221, 26, 138, 228, 224, 26, 138, 228, 226, 26, 138, 233, 204, 26, 138, - 240, 64, 26, 138, 240, 58, 26, 138, 228, 105, 26, 138, 240, 65, 26, 138, - 223, 212, 26, 138, 223, 210, 26, 138, 223, 211, 26, 138, 233, 84, 26, - 138, 239, 33, 26, 138, 245, 67, 26, 138, 245, 65, 26, 138, 245, 68, 26, - 138, 245, 66, 26, 138, 223, 218, 25, 4, 154, 25, 4, 244, 145, 25, 4, 245, - 75, 25, 4, 245, 167, 25, 4, 245, 109, 25, 4, 245, 121, 25, 4, 244, 227, - 25, 4, 244, 226, 25, 4, 238, 43, 25, 4, 237, 110, 25, 4, 237, 193, 25, 4, - 238, 42, 25, 4, 237, 239, 25, 4, 237, 243, 25, 4, 237, 143, 25, 4, 237, - 88, 25, 4, 245, 84, 25, 4, 245, 78, 25, 4, 245, 80, 25, 4, 245, 83, 25, - 4, 245, 81, 25, 4, 245, 82, 25, 4, 245, 79, 25, 4, 245, 77, 25, 4, 198, - 25, 4, 236, 66, 25, 4, 236, 157, 25, 4, 237, 66, 25, 4, 236, 226, 25, 4, - 236, 235, 25, 4, 236, 103, 25, 4, 236, 19, 25, 4, 227, 120, 25, 4, 227, - 114, 25, 4, 227, 116, 25, 4, 227, 119, 25, 4, 227, 117, 25, 4, 227, 118, - 25, 4, 227, 115, 25, 4, 227, 113, 25, 4, 208, 25, 4, 231, 70, 25, 4, 231, - 180, 25, 4, 232, 22, 25, 4, 231, 229, 25, 4, 231, 244, 25, 4, 231, 122, - 25, 4, 231, 46, 25, 4, 231, 31, 25, 4, 228, 6, 25, 4, 229, 15, 25, 4, - 231, 29, 25, 4, 230, 203, 25, 4, 230, 213, 25, 4, 228, 169, 25, 4, 227, - 200, 25, 4, 229, 146, 25, 4, 229, 43, 25, 4, 229, 90, 25, 4, 229, 142, - 25, 4, 229, 112, 25, 4, 229, 114, 25, 4, 229, 71, 25, 4, 229, 30, 25, 4, - 232, 138, 25, 4, 232, 84, 25, 4, 232, 104, 25, 4, 232, 137, 25, 4, 232, - 118, 25, 4, 232, 119, 25, 4, 232, 95, 25, 4, 232, 94, 25, 4, 232, 45, 25, - 4, 232, 41, 25, 4, 232, 44, 25, 4, 232, 42, 25, 4, 232, 43, 25, 4, 232, - 116, 25, 4, 232, 110, 25, 4, 232, 112, 25, 4, 232, 115, 25, 4, 232, 113, - 25, 4, 232, 114, 25, 4, 232, 111, 25, 4, 232, 109, 25, 4, 232, 105, 25, - 4, 232, 108, 25, 4, 232, 106, 25, 4, 232, 107, 25, 4, 253, 70, 25, 4, - 252, 90, 25, 4, 252, 181, 25, 4, 253, 69, 25, 4, 252, 232, 25, 4, 252, - 238, 25, 4, 252, 138, 25, 4, 252, 60, 25, 4, 225, 64, 25, 4, 224, 190, - 25, 4, 224, 228, 25, 4, 225, 63, 25, 4, 225, 38, 25, 4, 225, 42, 25, 4, - 224, 206, 25, 4, 224, 183, 25, 4, 227, 107, 25, 4, 225, 250, 25, 4, 226, - 175, 25, 4, 227, 104, 25, 4, 227, 37, 25, 4, 227, 44, 25, 4, 96, 25, 4, - 225, 222, 25, 4, 252, 39, 25, 4, 250, 235, 25, 4, 251, 118, 25, 4, 252, - 38, 25, 4, 251, 225, 25, 4, 251, 231, 25, 4, 251, 68, 25, 4, 250, 210, - 25, 4, 224, 72, 25, 4, 224, 48, 25, 4, 224, 64, 25, 4, 224, 71, 25, 4, - 224, 68, 25, 4, 224, 69, 25, 4, 224, 55, 25, 4, 224, 54, 25, 4, 224, 44, - 25, 4, 224, 40, 25, 4, 224, 43, 25, 4, 224, 41, 25, 4, 224, 42, 25, 4, - 236, 1, 25, 4, 234, 206, 25, 4, 235, 89, 25, 4, 235, 254, 25, 4, 235, - 160, 25, 4, 235, 162, 25, 4, 235, 6, 25, 4, 234, 177, 25, 4, 234, 173, - 25, 4, 234, 146, 25, 4, 234, 163, 25, 4, 234, 172, 25, 4, 234, 168, 25, - 4, 234, 169, 25, 4, 234, 152, 25, 4, 234, 139, 25, 4, 246, 16, 57, 25, 4, - 246, 16, 66, 25, 4, 246, 16, 74, 25, 4, 246, 16, 255, 63, 25, 4, 246, 16, - 248, 35, 25, 4, 246, 16, 72, 25, 4, 246, 16, 73, 25, 4, 246, 16, 224, - 173, 25, 4, 177, 25, 4, 238, 107, 25, 4, 238, 199, 25, 4, 239, 72, 25, 4, - 239, 2, 25, 4, 239, 3, 25, 4, 238, 150, 25, 4, 238, 149, 25, 4, 238, 78, - 25, 4, 238, 74, 25, 4, 238, 77, 25, 4, 238, 75, 25, 4, 238, 76, 25, 4, - 238, 69, 25, 4, 238, 63, 25, 4, 238, 65, 25, 4, 238, 68, 25, 4, 238, 66, - 25, 4, 238, 67, 25, 4, 238, 64, 25, 4, 238, 62, 25, 4, 238, 58, 25, 4, - 238, 61, 25, 4, 238, 59, 25, 4, 238, 60, 25, 4, 224, 173, 25, 4, 224, 83, - 25, 4, 224, 118, 25, 4, 224, 172, 25, 4, 224, 138, 25, 4, 224, 141, 25, - 4, 224, 105, 25, 4, 224, 104, 25, 4, 233, 91, 57, 25, 4, 233, 91, 66, 25, - 4, 233, 91, 74, 25, 4, 233, 91, 255, 63, 25, 4, 233, 91, 248, 35, 25, 4, - 233, 91, 72, 25, 4, 233, 91, 73, 25, 4, 223, 117, 25, 4, 223, 19, 25, 4, - 223, 47, 25, 4, 223, 116, 25, 4, 223, 95, 25, 4, 223, 97, 25, 4, 223, 27, - 25, 4, 223, 6, 25, 4, 223, 85, 25, 4, 223, 65, 25, 4, 223, 72, 25, 4, - 223, 84, 25, 4, 223, 76, 25, 4, 223, 77, 25, 4, 223, 70, 25, 4, 223, 56, - 25, 4, 191, 25, 4, 223, 158, 25, 4, 223, 202, 25, 4, 224, 21, 25, 4, 223, - 225, 25, 4, 223, 228, 25, 4, 223, 183, 25, 4, 223, 177, 25, 4, 250, 189, - 25, 4, 248, 107, 25, 4, 250, 4, 25, 4, 250, 188, 25, 4, 250, 67, 25, 4, - 250, 77, 25, 4, 249, 161, 25, 4, 248, 79, 25, 4, 250, 117, 25, 4, 250, - 87, 25, 4, 250, 99, 25, 4, 250, 116, 25, 4, 250, 104, 25, 4, 250, 105, - 25, 4, 250, 92, 25, 4, 250, 78, 25, 4, 239, 179, 25, 4, 239, 101, 25, 4, - 239, 156, 25, 4, 239, 178, 25, 4, 239, 169, 25, 4, 239, 170, 25, 4, 239, - 117, 25, 4, 239, 84, 25, 4, 246, 193, 25, 4, 245, 218, 25, 4, 246, 46, - 25, 4, 246, 190, 25, 4, 246, 125, 25, 4, 246, 131, 25, 4, 246, 11, 25, 4, - 246, 10, 25, 4, 245, 188, 25, 4, 245, 184, 25, 4, 245, 187, 25, 4, 245, - 185, 25, 4, 245, 186, 25, 4, 246, 101, 25, 4, 246, 81, 25, 4, 246, 91, - 25, 4, 246, 100, 25, 4, 246, 95, 25, 4, 246, 96, 25, 4, 246, 85, 25, 4, - 246, 70, 25, 4, 226, 251, 25, 4, 226, 186, 25, 4, 226, 220, 25, 4, 226, - 250, 25, 4, 226, 238, 25, 4, 226, 239, 25, 4, 226, 201, 25, 4, 226, 180, - 25, 4, 251, 204, 25, 4, 251, 136, 25, 4, 251, 169, 25, 4, 251, 203, 25, - 4, 251, 179, 25, 4, 251, 182, 25, 4, 251, 150, 25, 4, 251, 125, 25, 4, - 233, 97, 25, 4, 233, 75, 25, 4, 233, 87, 25, 4, 233, 96, 25, 4, 233, 89, - 25, 4, 233, 90, 25, 4, 233, 79, 25, 4, 233, 71, 25, 4, 226, 44, 25, 4, - 226, 26, 25, 4, 226, 29, 25, 4, 226, 43, 25, 4, 226, 39, 25, 4, 226, 40, - 25, 4, 226, 28, 25, 4, 226, 24, 25, 4, 225, 186, 25, 4, 225, 178, 25, 4, - 225, 182, 25, 4, 225, 185, 25, 4, 225, 183, 25, 4, 225, 184, 25, 4, 225, - 180, 25, 4, 225, 179, 25, 4, 247, 129, 25, 4, 246, 219, 25, 4, 247, 70, - 25, 4, 247, 128, 25, 4, 247, 92, 25, 4, 247, 97, 25, 4, 247, 7, 25, 4, - 246, 206, 25, 4, 213, 25, 4, 232, 173, 25, 4, 233, 69, 25, 4, 233, 241, - 25, 4, 233, 144, 25, 4, 233, 151, 25, 4, 233, 4, 25, 4, 232, 156, 25, 4, - 231, 42, 25, 4, 236, 10, 25, 4, 246, 200, 25, 36, 246, 124, 76, 25, 230, - 206, 76, 25, 224, 91, 25, 246, 218, 228, 38, 25, 251, 54, 25, 229, 186, - 25, 251, 61, 25, 232, 211, 251, 61, 25, 232, 69, 76, 25, 233, 192, 229, - 173, 25, 21, 118, 25, 21, 113, 25, 21, 166, 25, 21, 158, 25, 21, 173, 25, - 21, 183, 25, 21, 194, 25, 21, 187, 25, 21, 192, 25, 65, 227, 23, 25, 65, - 225, 216, 25, 65, 226, 207, 25, 65, 246, 245, 25, 65, 247, 63, 25, 65, - 228, 206, 25, 65, 229, 159, 25, 65, 248, 12, 25, 65, 235, 57, 25, 65, - 244, 135, 25, 65, 227, 24, 226, 194, 25, 4, 230, 210, 236, 19, 25, 4, - 236, 15, 25, 4, 236, 16, 25, 4, 236, 17, 25, 4, 230, 210, 252, 60, 25, 4, - 252, 57, 25, 4, 252, 58, 25, 4, 252, 59, 25, 4, 230, 210, 246, 206, 25, - 4, 246, 202, 25, 4, 246, 203, 25, 4, 246, 204, 25, 4, 230, 210, 232, 156, - 25, 4, 232, 152, 25, 4, 232, 153, 25, 4, 232, 154, 25, 226, 119, 165, - 223, 186, 25, 226, 119, 165, 250, 36, 25, 226, 119, 165, 231, 143, 25, - 226, 119, 165, 229, 63, 231, 143, 25, 226, 119, 165, 249, 238, 25, 226, - 119, 165, 238, 242, 25, 226, 119, 165, 251, 158, 25, 226, 119, 165, 245, - 73, 25, 226, 119, 165, 250, 35, 25, 226, 119, 165, 238, 89, 131, 1, 57, - 131, 1, 72, 131, 1, 74, 131, 1, 73, 131, 1, 66, 131, 1, 196, 131, 1, 246, - 193, 131, 1, 177, 131, 1, 246, 131, 131, 1, 246, 46, 131, 1, 246, 11, - 131, 1, 245, 218, 131, 1, 245, 189, 131, 1, 154, 131, 1, 245, 121, 131, - 1, 245, 75, 131, 1, 244, 227, 131, 1, 244, 145, 131, 1, 244, 128, 131, 1, - 238, 43, 131, 1, 237, 243, 131, 1, 237, 193, 131, 1, 237, 143, 131, 1, - 237, 110, 131, 1, 237, 89, 131, 1, 198, 131, 1, 236, 235, 131, 1, 236, - 157, 131, 1, 236, 103, 131, 1, 236, 66, 131, 1, 236, 1, 131, 1, 244, 249, - 131, 1, 235, 243, 131, 1, 235, 162, 131, 1, 235, 89, 131, 1, 235, 6, 131, - 1, 234, 206, 131, 1, 234, 179, 131, 1, 232, 83, 131, 1, 232, 71, 131, 1, - 232, 66, 131, 1, 232, 60, 131, 1, 232, 49, 131, 1, 232, 47, 131, 1, 231, - 31, 131, 1, 193, 131, 1, 230, 213, 131, 1, 229, 15, 131, 1, 228, 169, - 131, 1, 228, 6, 131, 1, 227, 202, 131, 1, 250, 189, 131, 1, 227, 107, - 131, 1, 250, 77, 131, 1, 227, 44, 131, 1, 250, 4, 131, 1, 226, 175, 131, - 1, 249, 161, 131, 1, 248, 107, 131, 1, 248, 81, 131, 1, 249, 170, 131, 1, - 226, 138, 131, 1, 226, 137, 131, 1, 226, 129, 131, 1, 226, 128, 131, 1, - 226, 127, 131, 1, 226, 126, 131, 1, 226, 44, 131, 1, 226, 40, 131, 1, - 226, 29, 131, 1, 226, 28, 131, 1, 226, 26, 131, 1, 226, 25, 131, 1, 224, - 173, 131, 1, 224, 141, 131, 1, 224, 118, 131, 1, 224, 105, 131, 1, 224, - 83, 131, 1, 224, 77, 131, 1, 191, 131, 1, 223, 228, 131, 1, 223, 202, - 131, 1, 223, 183, 131, 1, 223, 158, 131, 1, 223, 135, 16, 17, 72, 16, 17, - 255, 61, 16, 17, 74, 16, 17, 240, 47, 16, 17, 73, 16, 17, 234, 52, 16, - 17, 224, 24, 234, 52, 16, 17, 60, 248, 35, 16, 17, 60, 74, 16, 17, 57, - 16, 17, 255, 63, 16, 17, 224, 141, 16, 17, 127, 224, 141, 16, 17, 224, - 118, 16, 17, 127, 224, 118, 16, 17, 224, 113, 16, 17, 127, 224, 113, 16, - 17, 224, 105, 16, 17, 127, 224, 105, 16, 17, 224, 98, 16, 17, 127, 224, - 98, 16, 17, 235, 226, 224, 98, 16, 17, 224, 173, 16, 17, 127, 224, 173, - 16, 17, 224, 172, 16, 17, 127, 224, 172, 16, 17, 235, 226, 224, 172, 16, - 17, 254, 253, 16, 17, 224, 24, 224, 174, 16, 17, 246, 16, 228, 38, 16, - 17, 35, 155, 16, 17, 35, 245, 236, 16, 17, 35, 252, 126, 132, 231, 139, - 16, 17, 35, 226, 106, 132, 231, 139, 16, 17, 35, 41, 132, 231, 139, 16, - 17, 35, 231, 139, 16, 17, 35, 47, 155, 16, 17, 35, 47, 229, 63, 61, 228, - 10, 16, 17, 35, 236, 154, 249, 140, 16, 17, 35, 229, 63, 169, 82, 16, 17, - 35, 233, 10, 16, 17, 35, 103, 227, 96, 16, 17, 247, 239, 16, 17, 240, 16, - 16, 17, 234, 61, 16, 17, 254, 190, 16, 17, 233, 151, 16, 17, 233, 239, - 16, 17, 233, 69, 16, 17, 233, 41, 16, 17, 233, 4, 16, 17, 232, 244, 16, - 17, 224, 24, 232, 244, 16, 17, 60, 245, 109, 16, 17, 60, 245, 75, 16, 17, - 213, 16, 17, 233, 241, 16, 17, 232, 154, 16, 17, 127, 232, 154, 16, 17, - 232, 152, 16, 17, 127, 232, 152, 16, 17, 232, 151, 16, 17, 127, 232, 151, - 16, 17, 232, 149, 16, 17, 127, 232, 149, 16, 17, 232, 148, 16, 17, 127, - 232, 148, 16, 17, 232, 156, 16, 17, 127, 232, 156, 16, 17, 232, 155, 16, - 17, 127, 232, 155, 16, 17, 224, 24, 232, 155, 16, 17, 233, 244, 16, 17, - 127, 233, 244, 16, 17, 60, 212, 16, 17, 227, 44, 16, 17, 227, 103, 16, - 17, 226, 175, 16, 17, 226, 165, 16, 17, 96, 16, 17, 226, 108, 16, 17, - 224, 24, 226, 108, 16, 17, 60, 250, 67, 16, 17, 60, 250, 4, 16, 17, 227, - 107, 16, 17, 227, 104, 16, 17, 225, 220, 16, 17, 127, 225, 220, 16, 17, - 225, 205, 16, 17, 127, 225, 205, 16, 17, 225, 204, 16, 17, 127, 225, 204, - 16, 17, 113, 16, 17, 127, 113, 16, 17, 225, 201, 16, 17, 127, 225, 201, - 16, 17, 225, 222, 16, 17, 127, 225, 222, 16, 17, 225, 221, 16, 17, 127, - 225, 221, 16, 17, 235, 226, 225, 221, 16, 17, 227, 109, 16, 17, 226, 17, - 16, 17, 226, 6, 16, 17, 226, 5, 16, 17, 226, 20, 16, 17, 239, 3, 16, 17, - 239, 69, 16, 17, 238, 199, 16, 17, 238, 191, 16, 17, 238, 150, 16, 17, - 238, 139, 16, 17, 224, 24, 238, 139, 16, 17, 177, 16, 17, 239, 72, 16, - 17, 238, 76, 16, 17, 127, 238, 76, 16, 17, 238, 74, 16, 17, 127, 238, 74, - 16, 17, 238, 73, 16, 17, 127, 238, 73, 16, 17, 238, 72, 16, 17, 127, 238, - 72, 16, 17, 238, 71, 16, 17, 127, 238, 71, 16, 17, 238, 78, 16, 17, 127, - 238, 78, 16, 17, 238, 77, 16, 17, 127, 238, 77, 16, 17, 235, 226, 238, - 77, 16, 17, 239, 76, 16, 17, 238, 79, 16, 17, 228, 151, 238, 253, 16, 17, - 228, 151, 238, 192, 16, 17, 228, 151, 238, 147, 16, 17, 228, 151, 239, - 58, 16, 17, 251, 231, 16, 17, 252, 37, 16, 17, 251, 118, 16, 17, 251, - 110, 16, 17, 251, 68, 16, 17, 251, 17, 16, 17, 224, 24, 251, 17, 16, 17, - 252, 39, 16, 17, 252, 38, 16, 17, 250, 208, 16, 17, 127, 250, 208, 16, - 17, 250, 206, 16, 17, 127, 250, 206, 16, 17, 250, 205, 16, 17, 127, 250, - 205, 16, 17, 250, 204, 16, 17, 127, 250, 204, 16, 17, 250, 203, 16, 17, - 127, 250, 203, 16, 17, 250, 210, 16, 17, 127, 250, 210, 16, 17, 250, 209, - 16, 17, 127, 250, 209, 16, 17, 235, 226, 250, 209, 16, 17, 252, 44, 16, - 17, 230, 232, 226, 253, 16, 17, 236, 235, 16, 17, 237, 65, 16, 17, 236, - 157, 16, 17, 236, 137, 16, 17, 236, 103, 16, 17, 236, 86, 16, 17, 224, - 24, 236, 86, 16, 17, 198, 16, 17, 237, 66, 16, 17, 236, 17, 16, 17, 127, - 236, 17, 16, 17, 236, 15, 16, 17, 127, 236, 15, 16, 17, 236, 14, 16, 17, - 127, 236, 14, 16, 17, 236, 13, 16, 17, 127, 236, 13, 16, 17, 236, 12, 16, - 17, 127, 236, 12, 16, 17, 236, 19, 16, 17, 127, 236, 19, 16, 17, 236, 18, - 16, 17, 127, 236, 18, 16, 17, 235, 226, 236, 18, 16, 17, 185, 16, 17, - 127, 185, 16, 17, 236, 160, 16, 17, 254, 61, 185, 16, 17, 230, 232, 185, - 16, 17, 235, 162, 16, 17, 235, 253, 16, 17, 235, 89, 16, 17, 235, 68, 16, - 17, 235, 6, 16, 17, 234, 253, 16, 17, 224, 24, 234, 253, 16, 17, 236, 1, - 16, 17, 235, 254, 16, 17, 234, 175, 16, 17, 127, 234, 175, 16, 17, 234, - 177, 16, 17, 127, 234, 177, 16, 17, 234, 176, 16, 17, 127, 234, 176, 16, - 17, 235, 226, 234, 176, 16, 17, 199, 16, 17, 60, 235, 139, 16, 17, 235, - 94, 16, 17, 237, 243, 16, 17, 238, 41, 16, 17, 237, 193, 16, 17, 237, - 182, 16, 17, 237, 143, 16, 17, 237, 125, 16, 17, 224, 24, 237, 125, 16, - 17, 238, 43, 16, 17, 238, 42, 16, 17, 237, 86, 16, 17, 127, 237, 86, 16, - 17, 237, 85, 16, 17, 127, 237, 85, 16, 17, 237, 84, 16, 17, 127, 237, 84, - 16, 17, 237, 83, 16, 17, 127, 237, 83, 16, 17, 237, 82, 16, 17, 127, 237, - 82, 16, 17, 237, 88, 16, 17, 127, 237, 88, 16, 17, 237, 87, 16, 17, 127, - 237, 87, 16, 17, 149, 16, 17, 127, 149, 16, 17, 124, 149, 16, 17, 230, - 213, 16, 17, 231, 27, 16, 17, 229, 15, 16, 17, 229, 0, 16, 17, 228, 169, - 16, 17, 228, 159, 16, 17, 224, 24, 228, 159, 16, 17, 231, 31, 16, 17, - 231, 29, 16, 17, 227, 196, 16, 17, 127, 227, 196, 16, 17, 227, 193, 16, - 17, 127, 227, 193, 16, 17, 227, 192, 16, 17, 127, 227, 192, 16, 17, 227, - 191, 16, 17, 127, 227, 191, 16, 17, 227, 190, 16, 17, 127, 227, 190, 16, - 17, 227, 200, 16, 17, 127, 227, 200, 16, 17, 227, 199, 16, 17, 127, 227, - 199, 16, 17, 235, 226, 227, 199, 16, 17, 193, 16, 17, 254, 61, 193, 16, - 17, 227, 201, 16, 17, 252, 147, 193, 16, 17, 236, 83, 228, 203, 16, 17, - 235, 226, 228, 198, 16, 17, 235, 226, 231, 33, 16, 17, 235, 226, 228, - 121, 16, 17, 235, 226, 228, 8, 16, 17, 235, 226, 228, 197, 16, 17, 235, - 226, 230, 215, 16, 17, 229, 114, 16, 17, 229, 90, 16, 17, 229, 85, 16, - 17, 229, 71, 16, 17, 229, 66, 16, 17, 229, 146, 16, 17, 229, 142, 16, 17, - 229, 28, 16, 17, 127, 229, 28, 16, 17, 229, 27, 16, 17, 127, 229, 27, 16, - 17, 229, 26, 16, 17, 127, 229, 26, 16, 17, 229, 25, 16, 17, 127, 229, 25, - 16, 17, 229, 24, 16, 17, 127, 229, 24, 16, 17, 229, 30, 16, 17, 127, 229, - 30, 16, 17, 229, 29, 16, 17, 127, 229, 29, 16, 17, 229, 148, 16, 17, 223, - 228, 16, 17, 224, 19, 16, 17, 223, 202, 16, 17, 223, 194, 16, 17, 223, - 183, 16, 17, 223, 172, 16, 17, 224, 24, 223, 172, 16, 17, 191, 16, 17, - 224, 21, 16, 17, 223, 132, 16, 17, 127, 223, 132, 16, 17, 223, 131, 16, - 17, 127, 223, 131, 16, 17, 223, 130, 16, 17, 127, 223, 130, 16, 17, 223, - 129, 16, 17, 127, 223, 129, 16, 17, 223, 128, 16, 17, 127, 223, 128, 16, - 17, 223, 134, 16, 17, 127, 223, 134, 16, 17, 223, 133, 16, 17, 127, 223, - 133, 16, 17, 235, 226, 223, 133, 16, 17, 224, 25, 16, 17, 252, 179, 224, - 25, 16, 17, 127, 224, 25, 16, 17, 230, 232, 223, 202, 16, 17, 231, 244, - 16, 17, 232, 26, 231, 244, 16, 17, 127, 237, 243, 16, 17, 232, 21, 16, - 17, 231, 180, 16, 17, 231, 144, 16, 17, 231, 122, 16, 17, 231, 114, 16, - 17, 127, 237, 143, 16, 17, 208, 16, 17, 232, 22, 16, 17, 127, 238, 43, - 16, 17, 231, 45, 16, 17, 127, 231, 45, 16, 17, 146, 16, 17, 127, 146, 16, - 17, 124, 146, 16, 17, 247, 97, 16, 17, 247, 126, 16, 17, 247, 70, 16, 17, - 247, 57, 16, 17, 247, 7, 16, 17, 247, 3, 16, 17, 247, 129, 16, 17, 247, - 128, 16, 17, 246, 205, 16, 17, 127, 246, 205, 16, 17, 247, 130, 16, 17, - 226, 239, 16, 17, 236, 3, 226, 239, 16, 17, 226, 220, 16, 17, 236, 3, - 226, 220, 16, 17, 226, 216, 16, 17, 236, 3, 226, 216, 16, 17, 226, 201, - 16, 17, 226, 198, 16, 17, 226, 251, 16, 17, 226, 250, 16, 17, 226, 179, - 16, 17, 127, 226, 179, 16, 17, 226, 253, 16, 17, 226, 9, 16, 17, 226, 8, - 16, 17, 226, 7, 16, 17, 226, 10, 16, 17, 226, 11, 16, 17, 225, 199, 16, - 17, 225, 198, 16, 17, 225, 197, 16, 17, 225, 200, 16, 17, 234, 193, 245, - 121, 16, 17, 234, 193, 245, 75, 16, 17, 234, 193, 245, 61, 16, 17, 234, - 193, 244, 227, 16, 17, 234, 193, 244, 218, 16, 17, 234, 193, 154, 16, 17, - 234, 193, 245, 167, 16, 17, 234, 193, 212, 16, 17, 234, 192, 212, 16, 17, - 245, 55, 16, 17, 232, 134, 16, 17, 232, 104, 16, 17, 232, 99, 16, 17, - 232, 95, 16, 17, 232, 90, 16, 17, 232, 138, 16, 17, 232, 137, 16, 17, - 232, 139, 16, 17, 226, 134, 16, 17, 226, 132, 16, 17, 226, 131, 16, 17, - 226, 135, 16, 17, 127, 231, 244, 16, 17, 127, 231, 180, 16, 17, 127, 231, - 122, 16, 17, 127, 208, 16, 17, 235, 135, 16, 17, 235, 114, 16, 17, 235, - 110, 16, 17, 235, 107, 16, 17, 235, 103, 16, 17, 235, 137, 16, 17, 235, - 136, 16, 17, 235, 139, 16, 17, 235, 17, 16, 17, 230, 232, 229, 114, 16, - 17, 230, 232, 229, 90, 16, 17, 230, 232, 229, 71, 16, 17, 230, 232, 229, - 146, 16, 17, 224, 96, 226, 239, 16, 17, 224, 96, 226, 220, 16, 17, 224, - 96, 226, 201, 16, 17, 224, 96, 226, 251, 16, 17, 224, 96, 226, 253, 16, - 17, 237, 199, 16, 17, 237, 198, 16, 17, 237, 197, 16, 17, 237, 196, 16, - 17, 237, 205, 16, 17, 237, 204, 16, 17, 237, 206, 16, 17, 226, 252, 226, - 239, 16, 17, 226, 252, 226, 220, 16, 17, 226, 252, 226, 216, 16, 17, 226, - 252, 226, 201, 16, 17, 226, 252, 226, 198, 16, 17, 226, 252, 226, 251, - 16, 17, 226, 252, 226, 250, 16, 17, 226, 252, 226, 253, 16, 17, 254, 243, - 254, 27, 16, 17, 252, 147, 72, 16, 17, 252, 147, 74, 16, 17, 252, 147, - 73, 16, 17, 252, 147, 57, 16, 17, 252, 147, 224, 141, 16, 17, 252, 147, - 224, 118, 16, 17, 252, 147, 224, 105, 16, 17, 252, 147, 224, 173, 16, 17, - 252, 147, 235, 162, 16, 17, 252, 147, 235, 89, 16, 17, 252, 147, 235, 6, - 16, 17, 252, 147, 236, 1, 16, 17, 252, 147, 239, 3, 16, 17, 252, 147, - 238, 199, 16, 17, 252, 147, 238, 150, 16, 17, 252, 147, 177, 16, 17, 230, - 232, 245, 121, 16, 17, 230, 232, 245, 75, 16, 17, 230, 232, 244, 227, 16, - 17, 230, 232, 154, 16, 17, 60, 246, 52, 16, 17, 60, 246, 54, 16, 17, 60, - 246, 58, 16, 17, 60, 246, 57, 16, 17, 60, 246, 55, 16, 17, 60, 246, 66, - 16, 17, 60, 231, 70, 16, 17, 60, 231, 122, 16, 17, 60, 231, 244, 16, 17, - 60, 231, 229, 16, 17, 60, 231, 180, 16, 17, 60, 208, 16, 17, 60, 224, 83, - 16, 17, 60, 224, 105, 16, 17, 60, 224, 141, 16, 17, 60, 224, 138, 16, 17, - 60, 224, 118, 16, 17, 60, 224, 173, 16, 17, 60, 244, 121, 16, 17, 60, - 244, 122, 16, 17, 60, 244, 125, 16, 17, 60, 244, 124, 16, 17, 60, 244, - 123, 16, 17, 60, 244, 127, 16, 17, 60, 226, 186, 16, 17, 60, 226, 201, - 16, 17, 60, 226, 239, 16, 17, 60, 226, 238, 16, 17, 60, 226, 220, 16, 17, - 60, 226, 251, 16, 17, 60, 225, 253, 16, 17, 60, 226, 5, 16, 17, 60, 226, - 17, 16, 17, 60, 226, 16, 16, 17, 60, 226, 6, 16, 17, 60, 226, 20, 16, 17, - 60, 232, 173, 16, 17, 60, 233, 4, 16, 17, 60, 233, 151, 16, 17, 60, 233, - 144, 16, 17, 60, 233, 69, 16, 17, 60, 213, 16, 17, 60, 233, 244, 16, 17, - 60, 245, 218, 16, 17, 60, 246, 11, 16, 17, 60, 246, 131, 16, 17, 60, 246, - 125, 16, 17, 60, 246, 46, 16, 17, 60, 246, 193, 16, 17, 60, 238, 204, 16, - 17, 60, 238, 208, 16, 17, 60, 238, 217, 16, 17, 60, 238, 216, 16, 17, 60, - 238, 212, 16, 17, 60, 238, 227, 16, 17, 60, 238, 162, 16, 17, 60, 238, - 163, 16, 17, 60, 238, 166, 16, 17, 60, 238, 165, 16, 17, 60, 238, 164, - 16, 17, 60, 238, 167, 16, 17, 60, 238, 168, 16, 17, 60, 234, 206, 16, 17, - 60, 235, 6, 16, 17, 60, 235, 162, 16, 17, 60, 235, 160, 16, 17, 60, 235, - 89, 16, 17, 60, 236, 1, 16, 17, 60, 236, 66, 16, 17, 60, 236, 103, 16, - 17, 60, 236, 235, 16, 17, 60, 236, 226, 16, 17, 60, 236, 157, 16, 17, 60, - 198, 16, 17, 60, 223, 158, 16, 17, 60, 223, 183, 16, 17, 60, 223, 228, - 16, 17, 60, 223, 225, 16, 17, 60, 223, 202, 16, 17, 60, 191, 16, 17, 60, - 239, 101, 16, 17, 230, 232, 239, 101, 16, 17, 60, 239, 117, 16, 17, 60, - 239, 170, 16, 17, 60, 239, 169, 16, 17, 60, 239, 156, 16, 17, 230, 232, - 239, 156, 16, 17, 60, 239, 179, 16, 17, 60, 239, 130, 16, 17, 60, 239, - 134, 16, 17, 60, 239, 144, 16, 17, 60, 239, 143, 16, 17, 60, 239, 142, - 16, 17, 60, 239, 145, 16, 17, 60, 237, 110, 16, 17, 60, 237, 143, 16, 17, - 60, 237, 243, 16, 17, 60, 237, 239, 16, 17, 60, 237, 193, 16, 17, 60, - 238, 43, 16, 17, 60, 249, 165, 16, 17, 60, 249, 166, 16, 17, 60, 249, - 169, 16, 17, 60, 249, 168, 16, 17, 60, 249, 167, 16, 17, 60, 249, 170, - 16, 17, 60, 237, 195, 16, 17, 60, 237, 197, 16, 17, 60, 237, 201, 16, 17, - 60, 237, 200, 16, 17, 60, 237, 199, 16, 17, 60, 237, 205, 16, 17, 60, - 226, 130, 16, 17, 60, 226, 131, 16, 17, 60, 226, 134, 16, 17, 60, 226, - 133, 16, 17, 60, 226, 132, 16, 17, 60, 226, 135, 16, 17, 60, 226, 127, - 16, 17, 60, 226, 128, 16, 17, 60, 226, 137, 16, 17, 60, 226, 136, 16, 17, - 60, 226, 129, 16, 17, 60, 226, 138, 16, 17, 60, 223, 19, 16, 17, 60, 223, - 27, 16, 17, 60, 223, 97, 16, 17, 60, 223, 95, 16, 17, 60, 223, 47, 16, - 17, 60, 223, 117, 16, 17, 60, 223, 119, 16, 17, 60, 59, 223, 119, 16, 17, - 60, 248, 61, 16, 17, 60, 248, 62, 16, 17, 60, 248, 69, 16, 17, 60, 248, - 68, 16, 17, 60, 248, 64, 16, 17, 60, 248, 70, 16, 17, 60, 228, 6, 16, 17, - 60, 228, 169, 16, 17, 60, 230, 213, 16, 17, 60, 230, 203, 16, 17, 60, - 229, 15, 16, 17, 60, 231, 31, 16, 17, 60, 229, 43, 16, 17, 60, 229, 71, - 16, 17, 60, 229, 114, 16, 17, 60, 229, 112, 16, 17, 60, 229, 90, 16, 17, - 60, 229, 146, 16, 17, 60, 229, 148, 16, 17, 60, 226, 26, 16, 17, 60, 226, - 28, 16, 17, 60, 226, 40, 16, 17, 60, 226, 39, 16, 17, 60, 226, 29, 16, - 17, 60, 226, 44, 16, 17, 60, 251, 136, 16, 17, 60, 251, 150, 16, 17, 60, - 251, 182, 16, 17, 60, 251, 179, 16, 17, 60, 251, 169, 16, 17, 60, 251, - 204, 16, 17, 60, 225, 255, 16, 17, 60, 226, 0, 16, 17, 60, 226, 3, 16, - 17, 60, 226, 2, 16, 17, 60, 226, 1, 16, 17, 60, 226, 4, 16, 17, 251, 170, - 53, 16, 17, 246, 218, 228, 38, 16, 17, 232, 130, 16, 17, 235, 134, 16, - 17, 235, 14, 16, 17, 235, 13, 16, 17, 235, 12, 16, 17, 235, 11, 16, 17, - 235, 16, 16, 17, 235, 15, 234, 86, 228, 146, 76, 234, 86, 1, 252, 218, - 234, 86, 1, 237, 103, 234, 86, 1, 247, 96, 234, 86, 1, 231, 15, 234, 86, - 1, 235, 56, 234, 86, 1, 225, 169, 234, 86, 1, 250, 167, 234, 86, 1, 226, - 153, 234, 86, 1, 251, 63, 234, 86, 1, 251, 223, 234, 86, 1, 236, 58, 234, - 86, 1, 245, 253, 234, 86, 1, 235, 127, 234, 86, 1, 228, 33, 234, 86, 1, - 231, 67, 234, 86, 1, 254, 250, 234, 86, 1, 234, 56, 234, 86, 1, 225, 103, - 234, 86, 1, 248, 54, 234, 86, 1, 239, 218, 234, 86, 1, 248, 55, 234, 86, - 1, 234, 31, 234, 86, 1, 225, 154, 234, 86, 1, 240, 53, 234, 86, 1, 248, - 52, 234, 86, 1, 233, 137, 234, 86, 247, 95, 76, 234, 86, 200, 247, 95, - 76, 140, 1, 247, 86, 247, 78, 247, 98, 247, 130, 140, 1, 196, 140, 1, - 225, 89, 225, 104, 66, 140, 1, 223, 160, 140, 1, 224, 25, 140, 1, 224, - 174, 140, 1, 226, 182, 226, 181, 226, 196, 140, 1, 247, 168, 140, 1, 254, - 169, 57, 140, 1, 234, 21, 73, 140, 1, 255, 44, 57, 140, 1, 255, 15, 140, - 1, 237, 130, 73, 140, 1, 229, 56, 73, 140, 1, 73, 140, 1, 234, 88, 140, - 1, 234, 61, 140, 1, 232, 11, 232, 19, 231, 224, 146, 140, 1, 239, 13, - 140, 1, 251, 221, 140, 1, 239, 14, 239, 76, 140, 1, 214, 140, 1, 247, - 228, 140, 1, 246, 128, 245, 177, 214, 140, 1, 246, 160, 140, 1, 224, 81, - 224, 76, 224, 174, 140, 1, 245, 160, 212, 140, 1, 245, 164, 212, 140, 1, - 237, 132, 212, 140, 1, 229, 59, 212, 140, 1, 235, 222, 234, 170, 235, - 223, 199, 140, 1, 229, 57, 199, 140, 1, 248, 135, 140, 1, 239, 202, 239, - 206, 239, 197, 74, 140, 1, 72, 140, 1, 239, 162, 239, 182, 140, 1, 246, - 114, 140, 1, 237, 133, 255, 19, 140, 1, 229, 61, 57, 140, 1, 239, 190, - 247, 213, 140, 1, 233, 110, 233, 127, 233, 244, 140, 1, 254, 221, 247, - 212, 140, 1, 228, 149, 193, 140, 1, 229, 4, 237, 129, 193, 140, 1, 229, - 55, 193, 140, 1, 252, 44, 140, 1, 223, 119, 140, 1, 226, 142, 226, 147, - 225, 188, 227, 109, 140, 1, 229, 54, 227, 109, 140, 1, 222, 222, 140, 1, - 252, 203, 252, 206, 252, 153, 254, 27, 140, 1, 229, 60, 254, 27, 140, 1, - 248, 134, 140, 1, 234, 40, 140, 1, 248, 23, 248, 25, 72, 140, 1, 237, 30, - 237, 36, 185, 140, 1, 237, 131, 185, 140, 1, 229, 58, 185, 140, 1, 237, - 255, 238, 28, 237, 136, 149, 140, 1, 248, 136, 140, 1, 239, 255, 140, 1, - 240, 0, 140, 1, 250, 178, 250, 183, 222, 222, 140, 1, 234, 17, 247, 167, - 73, 140, 1, 248, 51, 140, 1, 239, 217, 140, 1, 250, 207, 140, 1, 252, 32, - 140, 1, 251, 230, 140, 1, 228, 63, 140, 1, 237, 128, 140, 1, 229, 53, - 140, 1, 244, 68, 140, 1, 232, 139, 140, 1, 224, 73, 140, 228, 241, 232, - 170, 140, 236, 53, 232, 170, 140, 250, 244, 232, 170, 140, 254, 106, 98, - 140, 225, 224, 98, 140, 252, 217, 98, 227, 94, 1, 57, 227, 94, 1, 74, - 227, 94, 1, 66, 227, 94, 1, 177, 227, 94, 1, 246, 193, 227, 94, 1, 235, - 137, 227, 94, 1, 227, 107, 227, 94, 1, 250, 189, 227, 94, 1, 236, 1, 227, - 94, 1, 213, 227, 94, 1, 253, 70, 227, 94, 1, 198, 227, 94, 1, 191, 227, - 94, 1, 238, 43, 227, 94, 1, 224, 173, 227, 94, 1, 231, 31, 227, 94, 1, - 154, 227, 94, 31, 5, 74, 227, 94, 31, 5, 66, 227, 94, 5, 224, 216, 245, - 143, 1, 57, 245, 143, 1, 74, 245, 143, 1, 66, 245, 143, 1, 177, 245, 143, - 1, 246, 193, 245, 143, 1, 235, 137, 245, 143, 1, 227, 107, 245, 143, 1, - 250, 189, 245, 143, 1, 236, 1, 245, 143, 1, 213, 245, 143, 1, 253, 70, - 245, 143, 1, 198, 245, 143, 1, 191, 245, 143, 1, 208, 245, 143, 1, 238, - 43, 245, 143, 1, 224, 173, 245, 143, 1, 231, 31, 245, 143, 1, 154, 245, - 143, 31, 5, 74, 245, 143, 31, 5, 66, 245, 143, 5, 233, 214, 233, 83, 228, - 241, 232, 170, 233, 83, 47, 232, 170, 252, 87, 1, 57, 252, 87, 1, 74, - 252, 87, 1, 66, 252, 87, 1, 177, 252, 87, 1, 246, 193, 252, 87, 1, 235, - 137, 252, 87, 1, 227, 107, 252, 87, 1, 250, 189, 252, 87, 1, 236, 1, 252, - 87, 1, 213, 252, 87, 1, 253, 70, 252, 87, 1, 198, 252, 87, 1, 191, 252, - 87, 1, 208, 252, 87, 1, 238, 43, 252, 87, 1, 224, 173, 252, 87, 1, 231, - 31, 252, 87, 1, 154, 252, 87, 31, 5, 74, 252, 87, 31, 5, 66, 227, 93, 1, - 57, 227, 93, 1, 74, 227, 93, 1, 66, 227, 93, 1, 177, 227, 93, 1, 246, - 193, 227, 93, 1, 235, 137, 227, 93, 1, 227, 107, 227, 93, 1, 250, 189, - 227, 93, 1, 236, 1, 227, 93, 1, 213, 227, 93, 1, 253, 70, 227, 93, 1, - 198, 227, 93, 1, 191, 227, 93, 1, 238, 43, 227, 93, 1, 224, 173, 227, 93, - 1, 231, 31, 227, 93, 31, 5, 74, 227, 93, 31, 5, 66, 71, 1, 177, 71, 1, - 238, 227, 71, 1, 238, 150, 71, 1, 238, 208, 71, 1, 235, 107, 71, 1, 252, - 39, 71, 1, 251, 204, 71, 1, 251, 68, 71, 1, 251, 150, 71, 1, 234, 152, - 71, 1, 250, 189, 71, 1, 226, 10, 71, 1, 249, 161, 71, 1, 226, 7, 71, 1, - 235, 9, 71, 1, 227, 107, 71, 1, 226, 251, 71, 1, 96, 71, 1, 226, 201, 71, - 1, 235, 6, 71, 1, 253, 70, 71, 1, 233, 97, 71, 1, 233, 4, 71, 1, 233, 79, - 71, 1, 236, 103, 71, 1, 223, 183, 71, 1, 231, 122, 71, 1, 237, 143, 71, - 1, 224, 206, 71, 1, 229, 146, 71, 1, 228, 84, 71, 1, 231, 31, 71, 1, 154, - 71, 1, 238, 43, 71, 1, 232, 138, 71, 240, 9, 31, 232, 124, 71, 240, 9, - 31, 232, 137, 71, 240, 9, 31, 232, 104, 71, 240, 9, 31, 232, 99, 71, 240, - 9, 31, 232, 84, 71, 240, 9, 31, 232, 61, 71, 240, 9, 31, 232, 49, 71, - 240, 9, 31, 232, 48, 71, 240, 9, 31, 231, 43, 71, 240, 9, 31, 231, 36, - 71, 240, 9, 31, 237, 80, 71, 240, 9, 31, 237, 71, 71, 240, 9, 31, 232, - 119, 71, 240, 9, 31, 232, 130, 71, 240, 9, 31, 232, 91, 225, 196, 118, - 71, 240, 9, 31, 232, 91, 225, 196, 113, 71, 240, 9, 31, 232, 120, 71, 31, - 239, 254, 254, 135, 71, 31, 239, 254, 255, 63, 71, 31, 5, 255, 63, 71, - 31, 5, 74, 71, 31, 5, 240, 47, 71, 31, 5, 224, 25, 71, 31, 5, 223, 127, - 71, 31, 5, 66, 71, 31, 5, 225, 76, 71, 31, 5, 225, 170, 71, 31, 5, 234, - 88, 71, 31, 5, 191, 71, 31, 5, 240, 72, 71, 31, 5, 72, 71, 31, 5, 255, - 19, 71, 31, 5, 254, 253, 71, 31, 5, 234, 52, 71, 31, 5, 254, 53, 71, 5, - 235, 67, 71, 5, 231, 242, 71, 5, 223, 137, 71, 5, 236, 25, 71, 5, 226, - 68, 71, 5, 253, 38, 71, 5, 231, 118, 71, 5, 226, 123, 71, 5, 239, 52, 71, - 5, 254, 255, 71, 5, 230, 254, 230, 250, 71, 5, 224, 213, 71, 5, 251, 65, - 71, 5, 253, 20, 71, 5, 238, 222, 71, 5, 253, 34, 71, 5, 252, 28, 233, 42, - 238, 83, 71, 5, 237, 223, 226, 108, 71, 5, 252, 192, 71, 5, 233, 81, 236, - 64, 71, 5, 238, 138, 71, 250, 222, 14, 231, 176, 71, 5, 254, 39, 71, 5, - 254, 56, 71, 21, 223, 89, 71, 21, 118, 71, 21, 113, 71, 21, 166, 71, 21, - 158, 71, 21, 173, 71, 21, 183, 71, 21, 194, 71, 21, 187, 71, 21, 192, 71, - 14, 237, 223, 254, 58, 228, 160, 71, 14, 237, 223, 254, 58, 236, 40, 71, - 14, 237, 223, 254, 58, 233, 41, 71, 14, 237, 223, 254, 58, 252, 219, 71, - 14, 237, 223, 254, 58, 252, 75, 71, 14, 237, 223, 254, 58, 232, 226, 71, - 14, 237, 223, 254, 58, 232, 220, 71, 14, 237, 223, 254, 58, 232, 218, 71, - 14, 237, 223, 254, 58, 232, 224, 71, 14, 237, 223, 254, 58, 232, 222, 68, - 252, 163, 68, 247, 249, 68, 251, 54, 68, 246, 218, 228, 38, 68, 251, 61, - 68, 246, 243, 249, 138, 68, 226, 122, 228, 165, 244, 95, 68, 229, 14, 4, - 252, 123, 237, 13, 68, 237, 33, 251, 54, 68, 237, 33, 246, 218, 228, 38, - 68, 235, 54, 68, 246, 230, 38, 230, 193, 118, 68, 246, 230, 38, 230, 193, - 113, 68, 246, 230, 38, 230, 193, 166, 68, 31, 229, 173, 68, 21, 223, 89, - 68, 21, 118, 68, 21, 113, 68, 21, 166, 68, 21, 158, 68, 21, 173, 68, 21, - 183, 68, 21, 194, 68, 21, 187, 68, 21, 192, 68, 1, 57, 68, 1, 72, 68, 1, - 74, 68, 1, 73, 68, 1, 66, 68, 1, 234, 88, 68, 1, 225, 159, 68, 1, 248, - 35, 68, 1, 236, 1, 68, 1, 254, 184, 68, 1, 253, 70, 68, 1, 213, 68, 1, - 232, 138, 68, 1, 246, 193, 68, 1, 198, 68, 1, 238, 43, 68, 1, 231, 31, - 68, 1, 229, 146, 68, 1, 227, 107, 68, 1, 250, 189, 68, 1, 251, 204, 68, - 1, 239, 179, 68, 1, 191, 68, 1, 208, 68, 1, 224, 173, 68, 1, 247, 129, - 68, 1, 177, 68, 1, 238, 227, 68, 1, 226, 44, 68, 1, 223, 117, 68, 1, 245, - 167, 68, 1, 223, 20, 68, 1, 237, 205, 68, 1, 223, 72, 68, 1, 251, 169, - 68, 1, 226, 122, 182, 31, 53, 68, 1, 226, 122, 72, 68, 1, 226, 122, 74, - 68, 1, 226, 122, 73, 68, 1, 226, 122, 66, 68, 1, 226, 122, 234, 88, 68, - 1, 226, 122, 225, 159, 68, 1, 226, 122, 254, 184, 68, 1, 226, 122, 253, - 70, 68, 1, 226, 122, 213, 68, 1, 226, 122, 232, 138, 68, 1, 226, 122, - 246, 193, 68, 1, 226, 122, 198, 68, 1, 226, 122, 227, 107, 68, 1, 226, - 122, 250, 189, 68, 1, 226, 122, 251, 204, 68, 1, 226, 122, 239, 179, 68, - 1, 226, 122, 226, 44, 68, 1, 226, 122, 191, 68, 1, 226, 122, 224, 173, - 68, 1, 226, 122, 177, 68, 1, 226, 122, 246, 190, 68, 1, 226, 122, 245, - 167, 68, 1, 226, 122, 239, 155, 68, 1, 226, 122, 235, 87, 68, 1, 226, - 122, 248, 70, 68, 1, 229, 14, 72, 68, 1, 229, 14, 74, 68, 1, 229, 14, - 239, 188, 68, 1, 229, 14, 225, 159, 68, 1, 229, 14, 66, 68, 1, 229, 14, - 254, 184, 68, 1, 229, 14, 177, 68, 1, 229, 14, 246, 193, 68, 1, 229, 14, - 154, 68, 1, 229, 14, 213, 68, 1, 229, 14, 229, 146, 68, 1, 229, 14, 227, - 107, 68, 1, 229, 14, 250, 189, 68, 1, 229, 14, 239, 179, 68, 1, 229, 14, - 247, 129, 68, 1, 229, 14, 246, 190, 68, 1, 229, 14, 245, 167, 68, 1, 229, - 14, 226, 44, 68, 1, 229, 14, 223, 117, 68, 1, 229, 14, 232, 22, 68, 1, - 229, 14, 251, 204, 68, 1, 229, 14, 223, 85, 68, 1, 237, 33, 74, 68, 1, - 237, 33, 177, 68, 1, 237, 33, 208, 68, 1, 237, 33, 247, 129, 68, 1, 237, - 33, 223, 85, 68, 1, 254, 220, 246, 175, 254, 161, 118, 68, 1, 254, 220, - 246, 175, 224, 212, 118, 68, 1, 254, 220, 246, 175, 250, 158, 68, 1, 254, - 220, 246, 175, 225, 167, 68, 1, 254, 220, 246, 175, 239, 223, 225, 167, - 68, 1, 254, 220, 246, 175, 253, 47, 68, 1, 254, 220, 246, 175, 152, 253, - 47, 68, 1, 254, 220, 246, 175, 57, 68, 1, 254, 220, 246, 175, 74, 68, 1, - 254, 220, 246, 175, 177, 68, 1, 254, 220, 246, 175, 235, 137, 68, 1, 254, - 220, 246, 175, 252, 39, 68, 1, 254, 220, 246, 175, 226, 20, 68, 1, 254, - 220, 246, 175, 226, 10, 68, 1, 254, 220, 246, 175, 250, 117, 68, 1, 254, - 220, 246, 175, 235, 18, 68, 1, 254, 220, 246, 175, 227, 107, 68, 1, 254, - 220, 246, 175, 250, 189, 68, 1, 254, 220, 246, 175, 213, 68, 1, 254, 220, - 246, 175, 233, 97, 68, 1, 254, 220, 246, 175, 228, 110, 68, 1, 254, 220, - 246, 175, 223, 85, 68, 1, 254, 220, 246, 175, 223, 117, 68, 1, 254, 220, - 246, 175, 255, 3, 68, 1, 226, 122, 254, 220, 246, 175, 227, 107, 68, 1, - 226, 122, 254, 220, 246, 175, 223, 85, 68, 1, 237, 33, 254, 220, 246, - 175, 246, 66, 68, 1, 237, 33, 254, 220, 246, 175, 235, 137, 68, 1, 237, - 33, 254, 220, 246, 175, 252, 39, 68, 1, 237, 33, 254, 220, 246, 175, 239, - 160, 68, 1, 237, 33, 254, 220, 246, 175, 226, 20, 68, 1, 237, 33, 254, - 220, 246, 175, 250, 101, 68, 1, 237, 33, 254, 220, 246, 175, 227, 107, - 68, 1, 237, 33, 254, 220, 246, 175, 250, 22, 68, 1, 237, 33, 254, 220, - 246, 175, 228, 110, 68, 1, 237, 33, 254, 220, 246, 175, 250, 201, 68, 1, - 237, 33, 254, 220, 246, 175, 223, 85, 68, 1, 237, 33, 254, 220, 246, 175, - 223, 117, 68, 1, 254, 220, 246, 175, 132, 66, 68, 1, 254, 220, 246, 175, - 132, 191, 68, 1, 237, 33, 254, 220, 246, 175, 252, 190, 68, 1, 254, 220, - 246, 175, 250, 179, 68, 1, 237, 33, 254, 220, 246, 175, 237, 205, 174, - 224, 193, 237, 210, 174, 1, 177, 174, 1, 238, 227, 174, 1, 246, 193, 174, - 1, 246, 66, 174, 1, 235, 137, 174, 1, 252, 39, 174, 1, 251, 204, 174, 1, - 239, 179, 174, 1, 239, 160, 174, 1, 223, 250, 174, 1, 227, 107, 174, 1, - 226, 251, 174, 1, 250, 189, 174, 1, 250, 22, 174, 1, 236, 1, 174, 1, 213, - 174, 1, 233, 97, 174, 1, 253, 70, 174, 1, 252, 190, 174, 1, 198, 174, 1, - 191, 174, 1, 208, 174, 1, 238, 43, 174, 1, 224, 173, 174, 1, 229, 146, - 174, 1, 228, 110, 174, 1, 231, 31, 174, 1, 154, 174, 31, 5, 57, 174, 31, - 5, 74, 174, 31, 5, 66, 174, 31, 5, 248, 35, 174, 31, 5, 254, 253, 174, - 31, 5, 234, 52, 174, 31, 5, 254, 53, 174, 31, 5, 72, 174, 31, 5, 73, 174, - 228, 0, 1, 191, 174, 228, 0, 1, 208, 174, 228, 0, 1, 224, 173, 174, 3, 1, - 177, 174, 3, 1, 235, 137, 174, 3, 1, 254, 160, 174, 3, 1, 227, 107, 174, - 3, 1, 236, 1, 174, 3, 1, 213, 174, 3, 1, 198, 174, 3, 1, 208, 174, 3, 1, - 238, 43, 174, 5, 236, 57, 174, 5, 238, 248, 174, 5, 231, 30, 174, 5, 237, - 125, 174, 247, 149, 76, 174, 232, 69, 76, 174, 21, 223, 89, 174, 21, 118, - 174, 21, 113, 174, 21, 166, 174, 21, 158, 174, 21, 173, 174, 21, 183, - 174, 21, 194, 174, 21, 187, 174, 21, 192, 91, 237, 244, 1, 177, 91, 237, - 244, 1, 224, 72, 91, 237, 244, 1, 235, 137, 91, 237, 244, 1, 226, 44, 91, - 237, 244, 1, 231, 31, 91, 237, 244, 1, 191, 91, 237, 244, 1, 227, 107, - 91, 237, 244, 1, 226, 251, 91, 237, 244, 1, 238, 43, 91, 237, 244, 1, - 213, 91, 237, 244, 1, 233, 97, 91, 237, 244, 1, 198, 91, 237, 244, 1, - 247, 129, 91, 237, 244, 1, 225, 64, 91, 237, 244, 1, 154, 91, 237, 244, - 1, 232, 138, 91, 237, 244, 1, 238, 227, 91, 237, 244, 1, 226, 37, 91, - 237, 244, 1, 236, 1, 91, 237, 244, 1, 57, 91, 237, 244, 1, 74, 91, 237, - 244, 1, 248, 35, 91, 237, 244, 1, 248, 24, 91, 237, 244, 1, 66, 91, 237, - 244, 1, 234, 52, 91, 237, 244, 1, 73, 91, 237, 244, 1, 225, 159, 91, 237, - 244, 1, 72, 91, 237, 244, 1, 254, 52, 91, 237, 244, 1, 254, 253, 91, 237, - 244, 1, 226, 116, 91, 237, 244, 1, 226, 115, 91, 237, 244, 1, 226, 114, - 91, 237, 244, 1, 226, 113, 91, 237, 244, 1, 226, 112, 139, 91, 144, 1, - 201, 232, 138, 139, 91, 144, 1, 184, 232, 138, 139, 91, 144, 1, 201, 177, - 139, 91, 144, 1, 201, 224, 72, 139, 91, 144, 1, 201, 235, 137, 139, 91, - 144, 1, 184, 177, 139, 91, 144, 1, 184, 224, 72, 139, 91, 144, 1, 184, - 235, 137, 139, 91, 144, 1, 201, 226, 44, 139, 91, 144, 1, 201, 231, 31, - 139, 91, 144, 1, 201, 191, 139, 91, 144, 1, 184, 226, 44, 139, 91, 144, - 1, 184, 231, 31, 139, 91, 144, 1, 184, 191, 139, 91, 144, 1, 201, 227, - 107, 139, 91, 144, 1, 201, 226, 251, 139, 91, 144, 1, 201, 236, 1, 139, - 91, 144, 1, 184, 227, 107, 139, 91, 144, 1, 184, 226, 251, 139, 91, 144, - 1, 184, 236, 1, 139, 91, 144, 1, 201, 213, 139, 91, 144, 1, 201, 233, 97, - 139, 91, 144, 1, 201, 198, 139, 91, 144, 1, 184, 213, 139, 91, 144, 1, - 184, 233, 97, 139, 91, 144, 1, 184, 198, 139, 91, 144, 1, 201, 247, 129, - 139, 91, 144, 1, 201, 225, 64, 139, 91, 144, 1, 201, 238, 43, 139, 91, - 144, 1, 184, 247, 129, 139, 91, 144, 1, 184, 225, 64, 139, 91, 144, 1, - 184, 238, 43, 139, 91, 144, 1, 201, 154, 139, 91, 144, 1, 201, 250, 189, - 139, 91, 144, 1, 201, 253, 70, 139, 91, 144, 1, 184, 154, 139, 91, 144, - 1, 184, 250, 189, 139, 91, 144, 1, 184, 253, 70, 139, 91, 144, 1, 201, - 238, 80, 139, 91, 144, 1, 201, 224, 45, 139, 91, 144, 1, 184, 238, 80, - 139, 91, 144, 1, 184, 224, 45, 139, 91, 144, 31, 5, 31, 229, 52, 139, 91, - 144, 31, 5, 255, 63, 139, 91, 144, 31, 5, 240, 47, 139, 91, 144, 31, 5, - 66, 139, 91, 144, 31, 5, 225, 76, 139, 91, 144, 31, 5, 72, 139, 91, 144, - 31, 5, 255, 19, 139, 91, 144, 31, 5, 73, 139, 91, 144, 31, 5, 234, 105, - 139, 91, 144, 31, 5, 225, 159, 139, 91, 144, 31, 5, 254, 34, 139, 91, - 144, 31, 5, 255, 55, 139, 91, 144, 31, 5, 225, 70, 139, 91, 144, 31, 5, - 233, 248, 139, 91, 144, 31, 5, 234, 102, 139, 91, 144, 31, 5, 225, 157, - 139, 91, 144, 31, 5, 239, 188, 139, 91, 144, 1, 35, 196, 139, 91, 144, 1, - 35, 235, 139, 139, 91, 144, 1, 35, 199, 139, 91, 144, 1, 35, 185, 139, - 91, 144, 1, 35, 239, 76, 139, 91, 144, 1, 35, 222, 222, 139, 91, 144, 1, - 35, 254, 27, 139, 91, 144, 206, 237, 17, 139, 91, 144, 206, 237, 16, 139, - 91, 144, 21, 223, 89, 139, 91, 144, 21, 118, 139, 91, 144, 21, 113, 139, - 91, 144, 21, 166, 139, 91, 144, 21, 158, 139, 91, 144, 21, 173, 139, 91, - 144, 21, 183, 139, 91, 144, 21, 194, 139, 91, 144, 21, 187, 139, 91, 144, - 21, 192, 139, 91, 144, 5, 238, 33, 139, 91, 144, 5, 238, 32, 71, 14, 233, - 163, 71, 14, 236, 41, 238, 148, 71, 14, 233, 42, 238, 148, 71, 14, 252, - 220, 238, 148, 71, 14, 252, 76, 238, 148, 71, 14, 232, 227, 238, 148, 71, - 14, 232, 221, 238, 148, 71, 14, 232, 219, 238, 148, 71, 14, 232, 225, - 238, 148, 71, 14, 232, 223, 238, 148, 71, 14, 250, 147, 238, 148, 71, 14, - 250, 143, 238, 148, 71, 14, 250, 142, 238, 148, 71, 14, 250, 145, 238, - 148, 71, 14, 250, 144, 238, 148, 71, 14, 250, 141, 238, 148, 71, 14, 225, - 227, 71, 14, 236, 41, 231, 117, 71, 14, 233, 42, 231, 117, 71, 14, 252, - 220, 231, 117, 71, 14, 252, 76, 231, 117, 71, 14, 232, 227, 231, 117, 71, - 14, 232, 221, 231, 117, 71, 14, 232, 219, 231, 117, 71, 14, 232, 225, - 231, 117, 71, 14, 232, 223, 231, 117, 71, 14, 250, 147, 231, 117, 71, 14, - 250, 143, 231, 117, 71, 14, 250, 142, 231, 117, 71, 14, 250, 145, 231, - 117, 71, 14, 250, 144, 231, 117, 71, 14, 250, 141, 231, 117, 252, 88, 1, - 177, 252, 88, 1, 246, 193, 252, 88, 1, 235, 137, 252, 88, 1, 235, 109, - 252, 88, 1, 213, 252, 88, 1, 253, 70, 252, 88, 1, 198, 252, 88, 1, 236, - 69, 252, 88, 1, 227, 107, 252, 88, 1, 250, 189, 252, 88, 1, 236, 1, 252, - 88, 1, 234, 230, 252, 88, 1, 252, 39, 252, 88, 1, 239, 179, 252, 88, 1, - 234, 173, 252, 88, 1, 234, 171, 252, 88, 1, 191, 252, 88, 1, 208, 252, - 88, 1, 238, 43, 252, 88, 1, 225, 64, 252, 88, 1, 231, 31, 252, 88, 1, 57, - 252, 88, 1, 154, 252, 88, 31, 5, 74, 252, 88, 31, 5, 66, 252, 88, 31, 5, - 72, 252, 88, 31, 5, 73, 252, 88, 31, 5, 255, 19, 252, 88, 233, 224, 252, - 88, 247, 233, 106, 230, 205, 85, 5, 225, 148, 231, 177, 85, 5, 225, 148, - 252, 20, 85, 5, 251, 229, 85, 5, 227, 211, 85, 5, 252, 161, 85, 1, 254, - 238, 85, 1, 254, 239, 227, 39, 85, 1, 240, 43, 85, 1, 240, 44, 227, 39, - 85, 1, 225, 151, 85, 1, 225, 152, 227, 39, 85, 1, 232, 25, 231, 213, 85, - 1, 232, 25, 231, 214, 227, 39, 85, 1, 238, 44, 237, 220, 85, 1, 238, 44, - 237, 221, 227, 39, 85, 1, 248, 7, 85, 1, 254, 251, 85, 1, 234, 76, 85, 1, - 234, 77, 227, 39, 85, 1, 177, 85, 1, 188, 237, 52, 85, 1, 246, 193, 85, - 1, 246, 194, 246, 2, 85, 1, 235, 137, 85, 1, 252, 39, 85, 1, 252, 40, - 238, 35, 85, 1, 239, 179, 85, 1, 239, 180, 239, 163, 85, 1, 234, 173, 85, - 1, 227, 108, 238, 1, 85, 1, 227, 108, 236, 36, 237, 52, 85, 1, 250, 190, - 236, 36, 254, 207, 85, 1, 250, 190, 236, 36, 237, 52, 85, 1, 236, 2, 232, - 5, 85, 1, 227, 107, 85, 1, 227, 108, 227, 55, 85, 1, 250, 189, 85, 1, - 250, 190, 237, 56, 85, 1, 236, 1, 85, 1, 213, 85, 1, 233, 242, 239, 39, - 85, 1, 253, 70, 85, 1, 253, 71, 238, 249, 85, 1, 198, 85, 1, 191, 85, 1, - 208, 85, 1, 238, 43, 85, 1, 224, 173, 85, 1, 231, 32, 231, 18, 85, 1, - 231, 32, 230, 245, 85, 1, 231, 31, 85, 1, 154, 85, 5, 231, 207, 85, 31, - 5, 227, 39, 85, 31, 5, 225, 147, 85, 31, 5, 225, 148, 230, 242, 85, 31, - 5, 227, 236, 85, 31, 5, 227, 237, 240, 35, 85, 31, 5, 232, 25, 231, 213, - 85, 31, 5, 232, 25, 231, 214, 227, 39, 85, 31, 5, 238, 44, 237, 220, 85, - 31, 5, 238, 44, 237, 221, 227, 39, 85, 31, 5, 227, 78, 85, 31, 5, 227, - 79, 231, 213, 85, 31, 5, 227, 79, 227, 39, 85, 31, 5, 227, 79, 231, 214, - 227, 39, 85, 31, 5, 233, 125, 85, 31, 5, 233, 126, 227, 39, 85, 255, 25, - 255, 24, 85, 1, 239, 60, 230, 241, 85, 1, 238, 205, 230, 241, 85, 1, 225, - 181, 230, 241, 85, 1, 248, 30, 230, 241, 85, 1, 225, 43, 230, 241, 85, 1, - 223, 109, 230, 241, 85, 1, 254, 64, 230, 241, 85, 21, 223, 89, 85, 21, - 118, 85, 21, 113, 85, 21, 166, 85, 21, 158, 85, 21, 173, 85, 21, 183, 85, - 21, 194, 85, 21, 187, 85, 21, 192, 85, 233, 203, 85, 233, 219, 85, 224, - 110, 85, 252, 7, 233, 213, 85, 252, 7, 228, 253, 85, 252, 7, 233, 179, - 85, 233, 218, 85, 23, 14, 249, 146, 85, 23, 14, 250, 45, 85, 23, 14, 248, - 93, 85, 23, 14, 250, 149, 85, 23, 14, 250, 150, 227, 211, 85, 23, 14, - 249, 209, 85, 23, 14, 250, 182, 85, 23, 14, 250, 30, 85, 23, 14, 250, - 168, 85, 23, 14, 250, 150, 246, 127, 85, 23, 14, 36, 227, 36, 85, 23, 14, - 36, 247, 231, 85, 23, 14, 36, 238, 244, 85, 23, 14, 36, 238, 246, 85, 23, - 14, 36, 239, 167, 85, 23, 14, 36, 238, 245, 2, 239, 167, 85, 23, 14, 36, - 238, 247, 2, 239, 167, 85, 23, 14, 36, 252, 208, 85, 23, 14, 36, 246, 5, - 85, 23, 14, 231, 152, 234, 44, 248, 103, 85, 23, 14, 231, 152, 234, 44, - 250, 180, 85, 23, 14, 231, 152, 251, 82, 225, 245, 85, 23, 14, 231, 152, - 251, 82, 227, 85, 85, 23, 14, 237, 236, 234, 44, 233, 209, 85, 23, 14, - 237, 236, 234, 44, 232, 169, 85, 23, 14, 237, 236, 251, 82, 233, 21, 85, - 23, 14, 237, 236, 251, 82, 233, 13, 85, 23, 14, 237, 236, 234, 44, 233, - 37, 220, 5, 233, 201, 220, 5, 233, 207, 220, 5, 233, 206, 220, 1, 57, - 220, 1, 74, 220, 1, 66, 220, 1, 255, 19, 220, 1, 73, 220, 1, 72, 220, 1, - 247, 165, 220, 1, 177, 220, 1, 232, 138, 220, 1, 246, 193, 220, 1, 235, - 137, 220, 1, 252, 39, 220, 1, 239, 179, 220, 1, 223, 117, 220, 1, 234, - 173, 220, 1, 227, 107, 220, 1, 250, 189, 220, 1, 236, 1, 220, 1, 213, - 220, 1, 247, 129, 220, 1, 225, 64, 220, 1, 253, 70, 220, 1, 198, 220, 1, - 191, 220, 1, 208, 220, 1, 238, 43, 220, 1, 224, 173, 220, 1, 231, 31, - 220, 1, 224, 72, 220, 1, 154, 220, 251, 33, 5, 233, 216, 220, 251, 33, 5, - 233, 202, 220, 251, 33, 5, 233, 200, 220, 31, 5, 233, 208, 220, 31, 5, - 233, 199, 220, 31, 5, 233, 211, 220, 31, 5, 233, 205, 220, 31, 5, 233, - 217, 220, 31, 5, 233, 210, 220, 5, 233, 220, 220, 1, 238, 227, 220, 1, - 227, 184, 220, 21, 223, 89, 220, 21, 118, 220, 21, 113, 220, 21, 166, - 220, 21, 158, 220, 21, 173, 220, 21, 183, 220, 21, 194, 220, 21, 187, - 220, 21, 192, 156, 1, 177, 156, 1, 238, 160, 156, 1, 238, 227, 156, 1, - 246, 193, 156, 1, 246, 20, 156, 1, 235, 137, 156, 1, 252, 39, 156, 1, - 251, 204, 156, 1, 239, 179, 156, 1, 234, 173, 156, 1, 227, 107, 156, 1, - 226, 251, 156, 1, 250, 189, 156, 1, 236, 1, 156, 1, 213, 156, 1, 233, 24, - 156, 1, 233, 97, 156, 1, 247, 129, 156, 1, 247, 32, 156, 1, 253, 70, 156, - 1, 252, 151, 156, 1, 198, 156, 1, 236, 109, 156, 1, 226, 44, 156, 1, 226, - 37, 156, 1, 248, 70, 156, 1, 191, 156, 1, 208, 156, 1, 238, 43, 156, 1, - 154, 156, 1, 245, 54, 156, 1, 225, 64, 156, 1, 231, 31, 156, 1, 229, 146, - 156, 1, 224, 173, 156, 1, 57, 156, 228, 0, 1, 191, 156, 228, 0, 1, 208, - 156, 31, 5, 255, 63, 156, 31, 5, 74, 156, 31, 5, 73, 156, 31, 5, 234, 52, - 156, 31, 5, 66, 156, 31, 5, 225, 76, 156, 31, 5, 72, 156, 251, 33, 5, - 239, 76, 156, 251, 33, 5, 185, 156, 251, 33, 5, 149, 156, 251, 33, 5, - 199, 156, 251, 33, 5, 233, 244, 156, 251, 33, 5, 146, 156, 251, 33, 5, - 227, 109, 156, 251, 33, 5, 234, 158, 156, 251, 33, 5, 239, 43, 156, 5, - 232, 3, 156, 5, 234, 202, 156, 232, 171, 227, 106, 156, 232, 171, 234, - 165, 226, 178, 227, 106, 156, 232, 171, 251, 208, 156, 232, 171, 226, 32, - 251, 208, 156, 232, 171, 226, 31, 156, 21, 223, 89, 156, 21, 118, 156, - 21, 113, 156, 21, 166, 156, 21, 158, 156, 21, 173, 156, 21, 183, 156, 21, - 194, 156, 21, 187, 156, 21, 192, 156, 1, 226, 20, 156, 1, 226, 10, 156, - 1, 250, 117, 234, 74, 251, 164, 21, 223, 89, 234, 74, 251, 164, 21, 118, - 234, 74, 251, 164, 21, 113, 234, 74, 251, 164, 21, 166, 234, 74, 251, - 164, 21, 158, 234, 74, 251, 164, 21, 173, 234, 74, 251, 164, 21, 183, - 234, 74, 251, 164, 21, 194, 234, 74, 251, 164, 21, 187, 234, 74, 251, - 164, 21, 192, 234, 74, 251, 164, 1, 238, 43, 234, 74, 251, 164, 1, 254, - 62, 234, 74, 251, 164, 1, 255, 8, 234, 74, 251, 164, 1, 254, 184, 234, - 74, 251, 164, 1, 254, 233, 234, 74, 251, 164, 1, 238, 42, 234, 74, 251, - 164, 1, 255, 59, 234, 74, 251, 164, 1, 255, 60, 234, 74, 251, 164, 1, - 255, 58, 234, 74, 251, 164, 1, 255, 56, 234, 74, 251, 164, 1, 237, 193, - 234, 74, 251, 164, 1, 239, 205, 234, 74, 251, 164, 1, 240, 48, 234, 74, - 251, 164, 1, 239, 220, 234, 74, 251, 164, 1, 239, 210, 234, 74, 251, 164, - 1, 237, 110, 234, 74, 251, 164, 1, 225, 165, 234, 74, 251, 164, 1, 225, - 163, 234, 74, 251, 164, 1, 225, 121, 234, 74, 251, 164, 1, 225, 70, 234, - 74, 251, 164, 1, 237, 243, 234, 74, 251, 164, 1, 247, 211, 234, 74, 251, - 164, 1, 248, 38, 234, 74, 251, 164, 1, 247, 239, 234, 74, 251, 164, 1, - 247, 192, 234, 74, 251, 164, 1, 237, 143, 234, 74, 251, 164, 1, 234, 16, - 234, 74, 251, 164, 1, 234, 101, 234, 74, 251, 164, 1, 234, 6, 234, 74, - 251, 164, 1, 234, 83, 234, 74, 251, 164, 236, 67, 225, 251, 234, 74, 251, - 164, 246, 188, 225, 252, 234, 74, 251, 164, 236, 65, 225, 252, 234, 74, - 251, 164, 231, 222, 234, 74, 251, 164, 233, 95, 234, 74, 251, 164, 255, - 2, 234, 74, 251, 164, 232, 171, 236, 63, 234, 74, 251, 164, 232, 171, 47, - 236, 63, 7, 1, 3, 6, 57, 7, 1, 3, 6, 255, 19, 7, 3, 1, 209, 255, 19, 7, - 1, 3, 6, 253, 31, 254, 27, 7, 1, 3, 6, 252, 44, 7, 1, 3, 6, 222, 222, 7, - 1, 3, 6, 247, 168, 7, 1, 3, 6, 72, 7, 3, 1, 209, 234, 44, 72, 7, 3, 1, - 209, 74, 7, 1, 3, 6, 239, 182, 7, 1, 3, 6, 239, 76, 7, 1, 3, 6, 238, 47, - 2, 82, 7, 1, 3, 6, 185, 7, 1, 3, 6, 200, 199, 7, 1, 3, 6, 73, 7, 1, 3, 6, - 234, 44, 73, 7, 3, 1, 229, 11, 73, 7, 3, 1, 229, 11, 234, 44, 73, 7, 3, - 1, 229, 11, 130, 2, 82, 7, 3, 1, 209, 234, 88, 7, 1, 3, 6, 234, 13, 7, 3, - 1, 226, 106, 132, 73, 7, 3, 1, 252, 126, 132, 73, 7, 1, 3, 6, 233, 244, - 7, 1, 3, 6, 200, 146, 7, 1, 3, 6, 209, 146, 7, 1, 3, 6, 227, 109, 7, 1, - 3, 6, 66, 7, 3, 1, 229, 11, 66, 7, 3, 1, 229, 11, 250, 2, 66, 7, 3, 1, - 229, 11, 209, 185, 7, 1, 3, 6, 196, 7, 1, 3, 6, 224, 174, 7, 1, 3, 6, - 223, 119, 7, 1, 3, 6, 247, 132, 7, 1, 224, 204, 238, 7, 228, 133, 7, 1, - 254, 248, 19, 1, 3, 6, 246, 169, 19, 1, 3, 6, 238, 16, 19, 1, 3, 6, 233, - 69, 19, 1, 3, 6, 231, 182, 19, 1, 3, 6, 232, 183, 28, 1, 3, 6, 248, 2, - 52, 1, 6, 57, 52, 1, 6, 255, 19, 52, 1, 6, 254, 27, 52, 1, 6, 253, 31, - 254, 27, 52, 1, 6, 222, 222, 52, 1, 6, 72, 52, 1, 6, 200, 72, 52, 1, 6, - 214, 52, 1, 6, 212, 52, 1, 6, 74, 52, 1, 6, 239, 182, 52, 1, 6, 239, 76, - 52, 1, 6, 149, 52, 1, 6, 185, 52, 1, 6, 199, 52, 1, 6, 200, 199, 52, 1, - 6, 73, 52, 1, 6, 234, 13, 52, 1, 6, 233, 244, 52, 1, 6, 146, 52, 1, 6, - 227, 109, 52, 1, 6, 66, 52, 1, 6, 224, 174, 52, 1, 3, 57, 52, 1, 3, 209, - 57, 52, 1, 3, 254, 205, 52, 1, 3, 209, 255, 19, 52, 1, 3, 254, 27, 52, 1, - 3, 222, 222, 52, 1, 3, 72, 52, 1, 3, 230, 222, 52, 1, 3, 234, 44, 72, 52, - 1, 3, 209, 234, 44, 72, 52, 1, 3, 214, 52, 1, 3, 209, 74, 52, 1, 3, 239, - 76, 52, 1, 3, 185, 52, 1, 3, 247, 228, 52, 1, 3, 73, 52, 1, 3, 234, 44, - 73, 52, 1, 3, 226, 106, 132, 73, 52, 1, 3, 252, 126, 132, 73, 52, 1, 3, - 233, 244, 52, 1, 3, 227, 109, 52, 1, 3, 66, 52, 1, 3, 229, 11, 66, 52, 1, - 3, 209, 185, 52, 1, 3, 196, 52, 1, 3, 254, 248, 52, 1, 3, 252, 198, 52, - 1, 3, 19, 246, 169, 52, 1, 3, 250, 47, 52, 1, 3, 19, 233, 87, 52, 1, 3, - 251, 169, 7, 227, 253, 3, 1, 74, 7, 227, 253, 3, 1, 146, 7, 227, 253, 3, - 1, 66, 7, 227, 253, 3, 1, 196, 19, 227, 253, 3, 1, 252, 198, 19, 227, - 253, 3, 1, 246, 169, 19, 227, 253, 3, 1, 231, 182, 19, 227, 253, 3, 1, - 233, 87, 19, 227, 253, 3, 1, 251, 169, 7, 3, 1, 225, 159, 7, 3, 1, 45, 2, - 236, 154, 205, 7, 3, 1, 250, 192, 2, 236, 154, 205, 7, 3, 1, 247, 131, 2, - 236, 154, 205, 7, 3, 1, 237, 69, 2, 236, 154, 205, 7, 3, 1, 236, 5, 2, - 236, 154, 205, 7, 3, 1, 233, 245, 2, 236, 154, 205, 7, 3, 1, 232, 27, 2, - 236, 154, 205, 7, 3, 1, 232, 27, 2, 247, 41, 22, 236, 154, 205, 7, 3, 1, - 231, 35, 2, 236, 154, 205, 7, 3, 1, 227, 110, 2, 236, 154, 205, 7, 3, 1, - 223, 120, 2, 236, 154, 205, 7, 3, 1, 209, 214, 52, 1, 28, 247, 239, 7, 3, - 1, 239, 241, 214, 7, 3, 1, 226, 254, 2, 228, 23, 7, 3, 6, 1, 244, 81, 2, - 82, 7, 3, 1, 239, 216, 2, 82, 7, 3, 1, 233, 245, 2, 82, 7, 3, 6, 1, 97, - 2, 82, 7, 3, 1, 225, 111, 2, 82, 7, 3, 1, 45, 2, 233, 229, 88, 7, 3, 1, - 250, 192, 2, 233, 229, 88, 7, 3, 1, 247, 131, 2, 233, 229, 88, 7, 3, 1, - 246, 196, 2, 233, 229, 88, 7, 3, 1, 239, 77, 2, 233, 229, 88, 7, 3, 1, - 238, 47, 2, 233, 229, 88, 7, 3, 1, 237, 69, 2, 233, 229, 88, 7, 3, 1, - 236, 5, 2, 233, 229, 88, 7, 3, 1, 233, 245, 2, 233, 229, 88, 7, 3, 1, - 232, 27, 2, 233, 229, 88, 7, 3, 1, 231, 35, 2, 233, 229, 88, 7, 3, 1, - 247, 184, 2, 233, 229, 88, 7, 3, 1, 225, 65, 2, 233, 229, 88, 7, 3, 1, - 224, 74, 2, 233, 229, 88, 7, 3, 1, 223, 120, 2, 233, 229, 88, 7, 3, 1, - 102, 2, 231, 196, 88, 7, 3, 1, 254, 206, 2, 231, 196, 88, 7, 3, 1, 250, - 192, 2, 244, 217, 22, 227, 89, 7, 3, 1, 161, 2, 231, 196, 88, 7, 3, 1, - 234, 44, 161, 2, 231, 196, 88, 7, 3, 1, 200, 234, 44, 161, 2, 231, 196, - 88, 7, 3, 1, 230, 223, 2, 231, 196, 88, 7, 3, 1, 244, 81, 2, 231, 196, - 88, 7, 3, 1, 234, 44, 130, 2, 231, 196, 88, 7, 3, 1, 247, 184, 2, 231, - 196, 88, 7, 3, 1, 97, 2, 231, 196, 88, 7, 3, 1, 247, 133, 2, 231, 196, - 88, 52, 1, 3, 209, 254, 205, 52, 1, 3, 252, 44, 52, 1, 3, 252, 45, 2, - 250, 224, 52, 1, 3, 247, 168, 52, 1, 3, 200, 234, 44, 72, 52, 1, 3, 247, - 130, 52, 1, 3, 249, 139, 239, 183, 2, 82, 52, 1, 3, 95, 214, 52, 1, 3, - 209, 212, 52, 1, 3, 244, 81, 2, 82, 52, 1, 3, 239, 215, 52, 1, 3, 6, 74, - 52, 1, 3, 6, 244, 81, 2, 82, 52, 1, 3, 239, 183, 2, 250, 240, 52, 1, 3, - 238, 47, 2, 231, 196, 88, 52, 1, 3, 238, 47, 2, 233, 229, 88, 52, 1, 3, - 6, 149, 52, 1, 3, 237, 69, 2, 88, 52, 1, 3, 209, 237, 69, 2, 182, 237, - 229, 52, 1, 3, 236, 5, 2, 42, 88, 52, 1, 3, 236, 5, 2, 231, 196, 88, 52, - 1, 3, 6, 199, 52, 1, 3, 253, 31, 73, 52, 1, 3, 233, 87, 52, 1, 3, 231, - 35, 2, 88, 52, 1, 3, 247, 183, 52, 1, 3, 227, 110, 2, 233, 229, 88, 52, - 1, 3, 97, 125, 52, 1, 3, 225, 110, 52, 1, 3, 6, 66, 52, 1, 3, 225, 65, 2, - 88, 52, 1, 3, 209, 196, 52, 1, 3, 223, 119, 52, 1, 3, 223, 120, 2, 231, - 196, 88, 52, 1, 3, 223, 120, 2, 250, 224, 52, 1, 3, 247, 132, 52, 1, 3, - 226, 223, 36, 248, 138, 245, 237, 255, 41, 36, 248, 138, 255, 33, 255, - 41, 36, 228, 177, 51, 36, 227, 205, 76, 36, 237, 62, 36, 245, 234, 36, - 237, 60, 36, 255, 31, 36, 245, 235, 36, 255, 32, 36, 7, 3, 1, 232, 27, - 51, 36, 252, 105, 36, 237, 61, 36, 47, 251, 102, 46, 36, 234, 85, 46, 36, - 223, 38, 51, 36, 239, 206, 51, 36, 225, 104, 46, 36, 225, 88, 46, 36, 7, - 3, 1, 247, 22, 234, 44, 102, 46, 36, 7, 3, 1, 255, 19, 36, 7, 3, 1, 254, - 158, 36, 7, 3, 1, 254, 41, 36, 7, 3, 1, 252, 45, 251, 226, 36, 7, 3, 1, - 239, 241, 222, 222, 36, 7, 3, 1, 247, 168, 36, 7, 3, 1, 214, 36, 7, 1, 3, - 6, 214, 36, 7, 3, 1, 239, 76, 36, 7, 3, 1, 149, 36, 7, 1, 3, 6, 149, 36, - 7, 1, 3, 6, 185, 36, 7, 3, 1, 199, 36, 7, 1, 3, 6, 199, 36, 7, 1, 3, 6, - 146, 36, 7, 3, 1, 232, 27, 231, 105, 36, 7, 3, 1, 193, 36, 7, 3, 1, 182, - 193, 36, 7, 3, 1, 223, 119, 36, 42, 254, 94, 46, 36, 41, 254, 94, 22, - 103, 254, 94, 51, 7, 6, 1, 102, 2, 231, 140, 51, 7, 3, 1, 102, 2, 231, - 140, 51, 7, 6, 1, 45, 2, 56, 46, 7, 3, 1, 45, 2, 56, 46, 7, 6, 1, 45, 2, - 56, 51, 7, 3, 1, 45, 2, 56, 51, 7, 6, 1, 45, 2, 237, 171, 51, 7, 3, 1, - 45, 2, 237, 171, 51, 7, 6, 1, 252, 45, 2, 251, 227, 22, 155, 7, 3, 1, - 252, 45, 2, 251, 227, 22, 155, 7, 6, 1, 250, 192, 2, 56, 46, 7, 3, 1, - 250, 192, 2, 56, 46, 7, 6, 1, 250, 192, 2, 56, 51, 7, 3, 1, 250, 192, 2, - 56, 51, 7, 6, 1, 250, 192, 2, 237, 171, 51, 7, 3, 1, 250, 192, 2, 237, - 171, 51, 7, 6, 1, 250, 192, 2, 251, 226, 7, 3, 1, 250, 192, 2, 251, 226, - 7, 6, 1, 250, 192, 2, 251, 102, 51, 7, 3, 1, 250, 192, 2, 251, 102, 51, - 7, 6, 1, 161, 2, 237, 64, 22, 245, 236, 7, 3, 1, 161, 2, 237, 64, 22, - 245, 236, 7, 6, 1, 161, 2, 237, 64, 22, 155, 7, 3, 1, 161, 2, 237, 64, - 22, 155, 7, 6, 1, 161, 2, 251, 102, 51, 7, 3, 1, 161, 2, 251, 102, 51, 7, - 6, 1, 161, 2, 226, 159, 51, 7, 3, 1, 161, 2, 226, 159, 51, 7, 6, 1, 161, - 2, 251, 227, 22, 252, 106, 7, 3, 1, 161, 2, 251, 227, 22, 252, 106, 7, 6, - 1, 247, 131, 2, 56, 46, 7, 3, 1, 247, 131, 2, 56, 46, 7, 6, 1, 246, 196, - 2, 237, 63, 7, 3, 1, 246, 196, 2, 237, 63, 7, 6, 1, 245, 172, 2, 56, 46, - 7, 3, 1, 245, 172, 2, 56, 46, 7, 6, 1, 245, 172, 2, 56, 51, 7, 3, 1, 245, - 172, 2, 56, 51, 7, 6, 1, 245, 172, 2, 219, 7, 3, 1, 245, 172, 2, 219, 7, - 6, 1, 245, 172, 2, 251, 226, 7, 3, 1, 245, 172, 2, 251, 226, 7, 6, 1, - 245, 172, 2, 252, 107, 51, 7, 3, 1, 245, 172, 2, 252, 107, 51, 7, 6, 1, - 244, 81, 2, 226, 159, 51, 7, 3, 1, 244, 81, 2, 226, 159, 51, 7, 6, 1, - 244, 81, 2, 250, 3, 22, 155, 7, 3, 1, 244, 81, 2, 250, 3, 22, 155, 7, 6, - 1, 239, 77, 2, 155, 7, 3, 1, 239, 77, 2, 155, 7, 6, 1, 239, 77, 2, 56, - 51, 7, 3, 1, 239, 77, 2, 56, 51, 7, 6, 1, 239, 77, 2, 237, 171, 51, 7, 3, - 1, 239, 77, 2, 237, 171, 51, 7, 6, 1, 238, 47, 2, 56, 51, 7, 3, 1, 238, - 47, 2, 56, 51, 7, 6, 1, 238, 47, 2, 56, 252, 214, 22, 237, 63, 7, 3, 1, - 238, 47, 2, 56, 252, 214, 22, 237, 63, 7, 6, 1, 238, 47, 2, 237, 171, 51, - 7, 3, 1, 238, 47, 2, 237, 171, 51, 7, 6, 1, 238, 47, 2, 251, 102, 51, 7, - 3, 1, 238, 47, 2, 251, 102, 51, 7, 6, 1, 237, 69, 2, 155, 7, 3, 1, 237, - 69, 2, 155, 7, 6, 1, 237, 69, 2, 56, 46, 7, 3, 1, 237, 69, 2, 56, 46, 7, - 6, 1, 237, 69, 2, 56, 51, 7, 3, 1, 237, 69, 2, 56, 51, 7, 6, 1, 236, 5, - 2, 56, 46, 7, 3, 1, 236, 5, 2, 56, 46, 7, 6, 1, 236, 5, 2, 56, 51, 7, 3, - 1, 236, 5, 2, 56, 51, 7, 6, 1, 236, 5, 2, 237, 171, 51, 7, 3, 1, 236, 5, - 2, 237, 171, 51, 7, 6, 1, 236, 5, 2, 251, 102, 51, 7, 3, 1, 236, 5, 2, - 251, 102, 51, 7, 6, 1, 130, 2, 226, 159, 22, 155, 7, 3, 1, 130, 2, 226, - 159, 22, 155, 7, 6, 1, 130, 2, 226, 159, 22, 219, 7, 3, 1, 130, 2, 226, - 159, 22, 219, 7, 6, 1, 130, 2, 237, 64, 22, 245, 236, 7, 3, 1, 130, 2, - 237, 64, 22, 245, 236, 7, 6, 1, 130, 2, 237, 64, 22, 155, 7, 3, 1, 130, - 2, 237, 64, 22, 155, 7, 6, 1, 233, 245, 2, 155, 7, 3, 1, 233, 245, 2, - 155, 7, 6, 1, 233, 245, 2, 56, 46, 7, 3, 1, 233, 245, 2, 56, 46, 7, 6, 1, - 232, 27, 2, 56, 46, 7, 3, 1, 232, 27, 2, 56, 46, 7, 6, 1, 232, 27, 2, 56, - 51, 7, 3, 1, 232, 27, 2, 56, 51, 7, 6, 1, 232, 27, 2, 56, 252, 214, 22, - 237, 63, 7, 3, 1, 232, 27, 2, 56, 252, 214, 22, 237, 63, 7, 6, 1, 232, - 27, 2, 237, 171, 51, 7, 3, 1, 232, 27, 2, 237, 171, 51, 7, 6, 1, 231, 35, - 2, 56, 46, 7, 3, 1, 231, 35, 2, 56, 46, 7, 6, 1, 231, 35, 2, 56, 51, 7, - 3, 1, 231, 35, 2, 56, 51, 7, 6, 1, 231, 35, 2, 255, 33, 22, 56, 46, 7, 3, - 1, 231, 35, 2, 255, 33, 22, 56, 46, 7, 6, 1, 231, 35, 2, 252, 6, 22, 56, - 46, 7, 3, 1, 231, 35, 2, 252, 6, 22, 56, 46, 7, 6, 1, 231, 35, 2, 56, - 252, 214, 22, 56, 46, 7, 3, 1, 231, 35, 2, 56, 252, 214, 22, 56, 46, 7, - 6, 1, 227, 110, 2, 56, 46, 7, 3, 1, 227, 110, 2, 56, 46, 7, 6, 1, 227, - 110, 2, 56, 51, 7, 3, 1, 227, 110, 2, 56, 51, 7, 6, 1, 227, 110, 2, 237, - 171, 51, 7, 3, 1, 227, 110, 2, 237, 171, 51, 7, 6, 1, 227, 110, 2, 251, - 102, 51, 7, 3, 1, 227, 110, 2, 251, 102, 51, 7, 6, 1, 97, 2, 250, 3, 51, - 7, 3, 1, 97, 2, 250, 3, 51, 7, 6, 1, 97, 2, 226, 159, 51, 7, 3, 1, 97, 2, - 226, 159, 51, 7, 6, 1, 97, 2, 251, 102, 51, 7, 3, 1, 97, 2, 251, 102, 51, - 7, 6, 1, 97, 2, 226, 159, 22, 155, 7, 3, 1, 97, 2, 226, 159, 22, 155, 7, - 6, 1, 97, 2, 237, 64, 22, 219, 7, 3, 1, 97, 2, 237, 64, 22, 219, 7, 6, 1, - 225, 65, 2, 205, 7, 3, 1, 225, 65, 2, 205, 7, 6, 1, 225, 65, 2, 56, 51, - 7, 3, 1, 225, 65, 2, 56, 51, 7, 6, 1, 224, 175, 2, 245, 236, 7, 3, 1, - 224, 175, 2, 245, 236, 7, 6, 1, 224, 175, 2, 155, 7, 3, 1, 224, 175, 2, - 155, 7, 6, 1, 224, 175, 2, 219, 7, 3, 1, 224, 175, 2, 219, 7, 6, 1, 224, - 175, 2, 56, 46, 7, 3, 1, 224, 175, 2, 56, 46, 7, 6, 1, 224, 175, 2, 56, - 51, 7, 3, 1, 224, 175, 2, 56, 51, 7, 6, 1, 224, 74, 2, 56, 46, 7, 3, 1, - 224, 74, 2, 56, 46, 7, 6, 1, 224, 74, 2, 219, 7, 3, 1, 224, 74, 2, 219, - 7, 6, 1, 224, 26, 2, 56, 46, 7, 3, 1, 224, 26, 2, 56, 46, 7, 6, 1, 223, - 120, 2, 251, 101, 7, 3, 1, 223, 120, 2, 251, 101, 7, 6, 1, 223, 120, 2, - 56, 51, 7, 3, 1, 223, 120, 2, 56, 51, 7, 6, 1, 223, 120, 2, 237, 171, 51, - 7, 3, 1, 223, 120, 2, 237, 171, 51, 7, 3, 1, 245, 172, 2, 237, 171, 51, - 7, 3, 1, 227, 110, 2, 219, 7, 3, 1, 224, 175, 2, 231, 140, 46, 7, 3, 1, - 224, 26, 2, 231, 140, 46, 7, 3, 1, 102, 2, 41, 132, 231, 139, 7, 3, 1, - 182, 231, 35, 2, 56, 46, 7, 3, 1, 182, 231, 35, 2, 250, 1, 82, 7, 3, 1, - 182, 231, 35, 2, 201, 82, 7, 6, 1, 229, 124, 193, 7, 3, 1, 250, 47, 7, 6, - 1, 102, 2, 56, 51, 7, 3, 1, 102, 2, 56, 51, 7, 6, 1, 102, 2, 244, 217, - 46, 7, 3, 1, 102, 2, 244, 217, 46, 7, 6, 1, 102, 2, 251, 102, 22, 155, 7, - 3, 1, 102, 2, 251, 102, 22, 155, 7, 6, 1, 102, 2, 251, 102, 22, 245, 236, - 7, 3, 1, 102, 2, 251, 102, 22, 245, 236, 7, 6, 1, 102, 2, 251, 102, 22, - 244, 217, 46, 7, 3, 1, 102, 2, 251, 102, 22, 244, 217, 46, 7, 6, 1, 102, - 2, 251, 102, 22, 205, 7, 3, 1, 102, 2, 251, 102, 22, 205, 7, 6, 1, 102, - 2, 251, 102, 22, 56, 51, 7, 3, 1, 102, 2, 251, 102, 22, 56, 51, 7, 6, 1, - 102, 2, 252, 107, 22, 155, 7, 3, 1, 102, 2, 252, 107, 22, 155, 7, 6, 1, - 102, 2, 252, 107, 22, 245, 236, 7, 3, 1, 102, 2, 252, 107, 22, 245, 236, - 7, 6, 1, 102, 2, 252, 107, 22, 244, 217, 46, 7, 3, 1, 102, 2, 252, 107, - 22, 244, 217, 46, 7, 6, 1, 102, 2, 252, 107, 22, 205, 7, 3, 1, 102, 2, - 252, 107, 22, 205, 7, 6, 1, 102, 2, 252, 107, 22, 56, 51, 7, 3, 1, 102, - 2, 252, 107, 22, 56, 51, 7, 6, 1, 161, 2, 56, 51, 7, 3, 1, 161, 2, 56, - 51, 7, 6, 1, 161, 2, 244, 217, 46, 7, 3, 1, 161, 2, 244, 217, 46, 7, 6, - 1, 161, 2, 205, 7, 3, 1, 161, 2, 205, 7, 6, 1, 161, 2, 251, 102, 22, 155, - 7, 3, 1, 161, 2, 251, 102, 22, 155, 7, 6, 1, 161, 2, 251, 102, 22, 245, - 236, 7, 3, 1, 161, 2, 251, 102, 22, 245, 236, 7, 6, 1, 161, 2, 251, 102, - 22, 244, 217, 46, 7, 3, 1, 161, 2, 251, 102, 22, 244, 217, 46, 7, 6, 1, - 161, 2, 251, 102, 22, 205, 7, 3, 1, 161, 2, 251, 102, 22, 205, 7, 6, 1, - 161, 2, 251, 102, 22, 56, 51, 7, 3, 1, 161, 2, 251, 102, 22, 56, 51, 7, - 6, 1, 244, 81, 2, 244, 217, 46, 7, 3, 1, 244, 81, 2, 244, 217, 46, 7, 6, - 1, 244, 81, 2, 56, 51, 7, 3, 1, 244, 81, 2, 56, 51, 7, 6, 1, 130, 2, 56, - 51, 7, 3, 1, 130, 2, 56, 51, 7, 6, 1, 130, 2, 244, 217, 46, 7, 3, 1, 130, - 2, 244, 217, 46, 7, 6, 1, 130, 2, 251, 102, 22, 155, 7, 3, 1, 130, 2, - 251, 102, 22, 155, 7, 6, 1, 130, 2, 251, 102, 22, 245, 236, 7, 3, 1, 130, - 2, 251, 102, 22, 245, 236, 7, 6, 1, 130, 2, 251, 102, 22, 244, 217, 46, - 7, 3, 1, 130, 2, 251, 102, 22, 244, 217, 46, 7, 6, 1, 130, 2, 251, 102, - 22, 205, 7, 3, 1, 130, 2, 251, 102, 22, 205, 7, 6, 1, 130, 2, 251, 102, - 22, 56, 51, 7, 3, 1, 130, 2, 251, 102, 22, 56, 51, 7, 6, 1, 130, 2, 244, - 161, 22, 155, 7, 3, 1, 130, 2, 244, 161, 22, 155, 7, 6, 1, 130, 2, 244, - 161, 22, 245, 236, 7, 3, 1, 130, 2, 244, 161, 22, 245, 236, 7, 6, 1, 130, - 2, 244, 161, 22, 244, 217, 46, 7, 3, 1, 130, 2, 244, 161, 22, 244, 217, - 46, 7, 6, 1, 130, 2, 244, 161, 22, 205, 7, 3, 1, 130, 2, 244, 161, 22, - 205, 7, 6, 1, 130, 2, 244, 161, 22, 56, 51, 7, 3, 1, 130, 2, 244, 161, - 22, 56, 51, 7, 6, 1, 97, 2, 56, 51, 7, 3, 1, 97, 2, 56, 51, 7, 6, 1, 97, - 2, 244, 217, 46, 7, 3, 1, 97, 2, 244, 217, 46, 7, 6, 1, 97, 2, 244, 161, - 22, 155, 7, 3, 1, 97, 2, 244, 161, 22, 155, 7, 6, 1, 97, 2, 244, 161, 22, - 245, 236, 7, 3, 1, 97, 2, 244, 161, 22, 245, 236, 7, 6, 1, 97, 2, 244, - 161, 22, 244, 217, 46, 7, 3, 1, 97, 2, 244, 161, 22, 244, 217, 46, 7, 6, - 1, 97, 2, 244, 161, 22, 205, 7, 3, 1, 97, 2, 244, 161, 22, 205, 7, 6, 1, - 97, 2, 244, 161, 22, 56, 51, 7, 3, 1, 97, 2, 244, 161, 22, 56, 51, 7, 6, - 1, 224, 26, 2, 245, 236, 7, 3, 1, 224, 26, 2, 245, 236, 7, 6, 1, 224, 26, - 2, 56, 51, 7, 3, 1, 224, 26, 2, 56, 51, 7, 6, 1, 224, 26, 2, 244, 217, - 46, 7, 3, 1, 224, 26, 2, 244, 217, 46, 7, 6, 1, 224, 26, 2, 205, 7, 3, 1, - 224, 26, 2, 205, 7, 6, 1, 236, 153, 237, 149, 7, 3, 1, 236, 153, 237, - 149, 7, 6, 1, 236, 153, 196, 7, 3, 1, 236, 153, 196, 7, 6, 1, 224, 26, 2, - 237, 124, 7, 3, 1, 224, 26, 2, 237, 124, 19, 3, 1, 254, 206, 2, 232, 177, - 19, 3, 1, 254, 206, 2, 250, 128, 19, 3, 1, 254, 206, 2, 186, 22, 225, 55, - 19, 3, 1, 254, 206, 2, 172, 22, 225, 55, 19, 3, 1, 254, 206, 2, 186, 22, - 233, 249, 19, 3, 1, 254, 206, 2, 172, 22, 233, 249, 19, 3, 1, 254, 206, - 2, 186, 22, 233, 117, 19, 3, 1, 254, 206, 2, 172, 22, 233, 117, 19, 6, 1, - 254, 206, 2, 232, 177, 19, 6, 1, 254, 206, 2, 250, 128, 19, 6, 1, 254, - 206, 2, 186, 22, 225, 55, 19, 6, 1, 254, 206, 2, 172, 22, 225, 55, 19, 6, - 1, 254, 206, 2, 186, 22, 233, 249, 19, 6, 1, 254, 206, 2, 172, 22, 233, - 249, 19, 6, 1, 254, 206, 2, 186, 22, 233, 117, 19, 6, 1, 254, 206, 2, - 172, 22, 233, 117, 19, 3, 1, 247, 207, 2, 232, 177, 19, 3, 1, 247, 207, - 2, 250, 128, 19, 3, 1, 247, 207, 2, 186, 22, 225, 55, 19, 3, 1, 247, 207, - 2, 172, 22, 225, 55, 19, 3, 1, 247, 207, 2, 186, 22, 233, 249, 19, 3, 1, - 247, 207, 2, 172, 22, 233, 249, 19, 6, 1, 247, 207, 2, 232, 177, 19, 6, - 1, 247, 207, 2, 250, 128, 19, 6, 1, 247, 207, 2, 186, 22, 225, 55, 19, 6, - 1, 247, 207, 2, 172, 22, 225, 55, 19, 6, 1, 247, 207, 2, 186, 22, 233, - 249, 19, 6, 1, 247, 207, 2, 172, 22, 233, 249, 19, 3, 1, 247, 172, 2, - 232, 177, 19, 3, 1, 247, 172, 2, 250, 128, 19, 3, 1, 247, 172, 2, 186, - 22, 225, 55, 19, 3, 1, 247, 172, 2, 172, 22, 225, 55, 19, 3, 1, 247, 172, - 2, 186, 22, 233, 249, 19, 3, 1, 247, 172, 2, 172, 22, 233, 249, 19, 3, 1, - 247, 172, 2, 186, 22, 233, 117, 19, 3, 1, 247, 172, 2, 172, 22, 233, 117, - 19, 6, 1, 247, 172, 2, 232, 177, 19, 6, 1, 247, 172, 2, 250, 128, 19, 6, - 1, 247, 172, 2, 186, 22, 225, 55, 19, 6, 1, 247, 172, 2, 172, 22, 225, - 55, 19, 6, 1, 247, 172, 2, 186, 22, 233, 249, 19, 6, 1, 247, 172, 2, 172, - 22, 233, 249, 19, 6, 1, 247, 172, 2, 186, 22, 233, 117, 19, 6, 1, 247, - 172, 2, 172, 22, 233, 117, 19, 3, 1, 239, 216, 2, 232, 177, 19, 3, 1, - 239, 216, 2, 250, 128, 19, 3, 1, 239, 216, 2, 186, 22, 225, 55, 19, 3, 1, - 239, 216, 2, 172, 22, 225, 55, 19, 3, 1, 239, 216, 2, 186, 22, 233, 249, - 19, 3, 1, 239, 216, 2, 172, 22, 233, 249, 19, 3, 1, 239, 216, 2, 186, 22, - 233, 117, 19, 3, 1, 239, 216, 2, 172, 22, 233, 117, 19, 6, 1, 239, 216, - 2, 232, 177, 19, 6, 1, 239, 216, 2, 250, 128, 19, 6, 1, 239, 216, 2, 186, - 22, 225, 55, 19, 6, 1, 239, 216, 2, 172, 22, 225, 55, 19, 6, 1, 239, 216, - 2, 186, 22, 233, 249, 19, 6, 1, 239, 216, 2, 172, 22, 233, 249, 19, 6, 1, - 239, 216, 2, 186, 22, 233, 117, 19, 6, 1, 239, 216, 2, 172, 22, 233, 117, - 19, 3, 1, 234, 65, 2, 232, 177, 19, 3, 1, 234, 65, 2, 250, 128, 19, 3, 1, - 234, 65, 2, 186, 22, 225, 55, 19, 3, 1, 234, 65, 2, 172, 22, 225, 55, 19, - 3, 1, 234, 65, 2, 186, 22, 233, 249, 19, 3, 1, 234, 65, 2, 172, 22, 233, - 249, 19, 6, 1, 234, 65, 2, 232, 177, 19, 6, 1, 234, 65, 2, 250, 128, 19, - 6, 1, 234, 65, 2, 186, 22, 225, 55, 19, 6, 1, 234, 65, 2, 172, 22, 225, - 55, 19, 6, 1, 234, 65, 2, 186, 22, 233, 249, 19, 6, 1, 234, 65, 2, 172, - 22, 233, 249, 19, 3, 1, 225, 111, 2, 232, 177, 19, 3, 1, 225, 111, 2, - 250, 128, 19, 3, 1, 225, 111, 2, 186, 22, 225, 55, 19, 3, 1, 225, 111, 2, - 172, 22, 225, 55, 19, 3, 1, 225, 111, 2, 186, 22, 233, 249, 19, 3, 1, - 225, 111, 2, 172, 22, 233, 249, 19, 3, 1, 225, 111, 2, 186, 22, 233, 117, - 19, 3, 1, 225, 111, 2, 172, 22, 233, 117, 19, 6, 1, 225, 111, 2, 250, - 128, 19, 6, 1, 225, 111, 2, 172, 22, 225, 55, 19, 6, 1, 225, 111, 2, 172, - 22, 233, 249, 19, 6, 1, 225, 111, 2, 172, 22, 233, 117, 19, 3, 1, 234, - 67, 2, 232, 177, 19, 3, 1, 234, 67, 2, 250, 128, 19, 3, 1, 234, 67, 2, - 186, 22, 225, 55, 19, 3, 1, 234, 67, 2, 172, 22, 225, 55, 19, 3, 1, 234, - 67, 2, 186, 22, 233, 249, 19, 3, 1, 234, 67, 2, 172, 22, 233, 249, 19, 3, - 1, 234, 67, 2, 186, 22, 233, 117, 19, 3, 1, 234, 67, 2, 172, 22, 233, - 117, 19, 6, 1, 234, 67, 2, 232, 177, 19, 6, 1, 234, 67, 2, 250, 128, 19, - 6, 1, 234, 67, 2, 186, 22, 225, 55, 19, 6, 1, 234, 67, 2, 172, 22, 225, - 55, 19, 6, 1, 234, 67, 2, 186, 22, 233, 249, 19, 6, 1, 234, 67, 2, 172, - 22, 233, 249, 19, 6, 1, 234, 67, 2, 186, 22, 233, 117, 19, 6, 1, 234, 67, - 2, 172, 22, 233, 117, 19, 3, 1, 254, 206, 2, 225, 55, 19, 3, 1, 254, 206, - 2, 233, 249, 19, 3, 1, 247, 207, 2, 225, 55, 19, 3, 1, 247, 207, 2, 233, - 249, 19, 3, 1, 247, 172, 2, 225, 55, 19, 3, 1, 247, 172, 2, 233, 249, 19, - 3, 1, 239, 216, 2, 225, 55, 19, 3, 1, 239, 216, 2, 233, 249, 19, 3, 1, - 234, 65, 2, 225, 55, 19, 3, 1, 234, 65, 2, 233, 249, 19, 3, 1, 225, 111, - 2, 225, 55, 19, 3, 1, 225, 111, 2, 233, 249, 19, 3, 1, 234, 67, 2, 225, - 55, 19, 3, 1, 234, 67, 2, 233, 249, 19, 3, 1, 254, 206, 2, 186, 22, 223, - 165, 19, 3, 1, 254, 206, 2, 172, 22, 223, 165, 19, 3, 1, 254, 206, 2, - 186, 22, 225, 56, 22, 223, 165, 19, 3, 1, 254, 206, 2, 172, 22, 225, 56, - 22, 223, 165, 19, 3, 1, 254, 206, 2, 186, 22, 233, 250, 22, 223, 165, 19, - 3, 1, 254, 206, 2, 172, 22, 233, 250, 22, 223, 165, 19, 3, 1, 254, 206, - 2, 186, 22, 233, 118, 22, 223, 165, 19, 3, 1, 254, 206, 2, 172, 22, 233, - 118, 22, 223, 165, 19, 6, 1, 254, 206, 2, 186, 22, 232, 188, 19, 6, 1, - 254, 206, 2, 172, 22, 232, 188, 19, 6, 1, 254, 206, 2, 186, 22, 225, 56, - 22, 232, 188, 19, 6, 1, 254, 206, 2, 172, 22, 225, 56, 22, 232, 188, 19, - 6, 1, 254, 206, 2, 186, 22, 233, 250, 22, 232, 188, 19, 6, 1, 254, 206, - 2, 172, 22, 233, 250, 22, 232, 188, 19, 6, 1, 254, 206, 2, 186, 22, 233, - 118, 22, 232, 188, 19, 6, 1, 254, 206, 2, 172, 22, 233, 118, 22, 232, - 188, 19, 3, 1, 247, 172, 2, 186, 22, 223, 165, 19, 3, 1, 247, 172, 2, - 172, 22, 223, 165, 19, 3, 1, 247, 172, 2, 186, 22, 225, 56, 22, 223, 165, - 19, 3, 1, 247, 172, 2, 172, 22, 225, 56, 22, 223, 165, 19, 3, 1, 247, - 172, 2, 186, 22, 233, 250, 22, 223, 165, 19, 3, 1, 247, 172, 2, 172, 22, - 233, 250, 22, 223, 165, 19, 3, 1, 247, 172, 2, 186, 22, 233, 118, 22, - 223, 165, 19, 3, 1, 247, 172, 2, 172, 22, 233, 118, 22, 223, 165, 19, 6, - 1, 247, 172, 2, 186, 22, 232, 188, 19, 6, 1, 247, 172, 2, 172, 22, 232, - 188, 19, 6, 1, 247, 172, 2, 186, 22, 225, 56, 22, 232, 188, 19, 6, 1, - 247, 172, 2, 172, 22, 225, 56, 22, 232, 188, 19, 6, 1, 247, 172, 2, 186, - 22, 233, 250, 22, 232, 188, 19, 6, 1, 247, 172, 2, 172, 22, 233, 250, 22, - 232, 188, 19, 6, 1, 247, 172, 2, 186, 22, 233, 118, 22, 232, 188, 19, 6, - 1, 247, 172, 2, 172, 22, 233, 118, 22, 232, 188, 19, 3, 1, 234, 67, 2, - 186, 22, 223, 165, 19, 3, 1, 234, 67, 2, 172, 22, 223, 165, 19, 3, 1, - 234, 67, 2, 186, 22, 225, 56, 22, 223, 165, 19, 3, 1, 234, 67, 2, 172, - 22, 225, 56, 22, 223, 165, 19, 3, 1, 234, 67, 2, 186, 22, 233, 250, 22, - 223, 165, 19, 3, 1, 234, 67, 2, 172, 22, 233, 250, 22, 223, 165, 19, 3, - 1, 234, 67, 2, 186, 22, 233, 118, 22, 223, 165, 19, 3, 1, 234, 67, 2, - 172, 22, 233, 118, 22, 223, 165, 19, 6, 1, 234, 67, 2, 186, 22, 232, 188, - 19, 6, 1, 234, 67, 2, 172, 22, 232, 188, 19, 6, 1, 234, 67, 2, 186, 22, - 225, 56, 22, 232, 188, 19, 6, 1, 234, 67, 2, 172, 22, 225, 56, 22, 232, - 188, 19, 6, 1, 234, 67, 2, 186, 22, 233, 250, 22, 232, 188, 19, 6, 1, - 234, 67, 2, 172, 22, 233, 250, 22, 232, 188, 19, 6, 1, 234, 67, 2, 186, - 22, 233, 118, 22, 232, 188, 19, 6, 1, 234, 67, 2, 172, 22, 233, 118, 22, - 232, 188, 19, 3, 1, 254, 206, 2, 224, 191, 19, 3, 1, 254, 206, 2, 237, - 63, 19, 3, 1, 254, 206, 2, 225, 56, 22, 223, 165, 19, 3, 1, 254, 206, 2, - 223, 165, 19, 3, 1, 254, 206, 2, 233, 250, 22, 223, 165, 19, 3, 1, 254, - 206, 2, 233, 117, 19, 3, 1, 254, 206, 2, 233, 118, 22, 223, 165, 19, 6, - 1, 254, 206, 2, 224, 191, 19, 6, 1, 254, 206, 2, 237, 63, 19, 6, 1, 254, - 206, 2, 225, 55, 19, 6, 1, 254, 206, 2, 233, 249, 19, 6, 1, 254, 206, 2, - 232, 188, 19, 238, 132, 19, 232, 188, 19, 232, 177, 19, 233, 117, 19, - 249, 254, 22, 233, 117, 19, 3, 1, 247, 172, 2, 225, 56, 22, 223, 165, 19, - 3, 1, 247, 172, 2, 223, 165, 19, 3, 1, 247, 172, 2, 233, 250, 22, 223, - 165, 19, 3, 1, 247, 172, 2, 233, 117, 19, 3, 1, 247, 172, 2, 233, 118, - 22, 223, 165, 19, 6, 1, 247, 207, 2, 225, 55, 19, 6, 1, 247, 207, 2, 233, - 249, 19, 6, 1, 247, 172, 2, 225, 55, 19, 6, 1, 247, 172, 2, 233, 249, 19, - 6, 1, 247, 172, 2, 232, 188, 19, 186, 22, 225, 55, 19, 186, 22, 233, 249, - 19, 186, 22, 233, 117, 19, 3, 1, 239, 216, 2, 224, 191, 19, 3, 1, 239, - 216, 2, 237, 63, 19, 3, 1, 239, 216, 2, 249, 254, 22, 225, 55, 19, 3, 1, - 239, 216, 2, 249, 254, 22, 233, 249, 19, 3, 1, 239, 216, 2, 233, 117, 19, - 3, 1, 239, 216, 2, 249, 254, 22, 233, 117, 19, 6, 1, 239, 216, 2, 224, - 191, 19, 6, 1, 239, 216, 2, 237, 63, 19, 6, 1, 239, 216, 2, 225, 55, 19, - 6, 1, 239, 216, 2, 233, 249, 19, 172, 22, 225, 55, 19, 172, 22, 233, 249, - 19, 172, 22, 233, 117, 19, 3, 1, 225, 111, 2, 224, 191, 19, 3, 1, 225, - 111, 2, 237, 63, 19, 3, 1, 225, 111, 2, 249, 254, 22, 225, 55, 19, 3, 1, - 225, 111, 2, 249, 254, 22, 233, 249, 19, 3, 1, 231, 183, 2, 232, 177, 19, - 3, 1, 231, 183, 2, 250, 128, 19, 3, 1, 225, 111, 2, 233, 117, 19, 3, 1, - 225, 111, 2, 249, 254, 22, 233, 117, 19, 6, 1, 225, 111, 2, 224, 191, 19, - 6, 1, 225, 111, 2, 237, 63, 19, 6, 1, 225, 111, 2, 225, 55, 19, 6, 1, - 225, 111, 2, 233, 249, 19, 6, 1, 231, 183, 2, 250, 128, 19, 249, 254, 22, - 225, 55, 19, 249, 254, 22, 233, 249, 19, 225, 55, 19, 3, 1, 234, 67, 2, - 225, 56, 22, 223, 165, 19, 3, 1, 234, 67, 2, 223, 165, 19, 3, 1, 234, 67, - 2, 233, 250, 22, 223, 165, 19, 3, 1, 234, 67, 2, 233, 117, 19, 3, 1, 234, - 67, 2, 233, 118, 22, 223, 165, 19, 6, 1, 234, 65, 2, 225, 55, 19, 6, 1, - 234, 65, 2, 233, 249, 19, 6, 1, 234, 67, 2, 225, 55, 19, 6, 1, 234, 67, - 2, 233, 249, 19, 6, 1, 234, 67, 2, 232, 188, 19, 233, 249, 19, 250, 128, - 247, 240, 232, 81, 247, 248, 232, 81, 247, 240, 228, 145, 247, 248, 228, - 145, 226, 189, 228, 145, 246, 241, 228, 145, 228, 215, 228, 145, 247, 61, - 228, 145, 232, 171, 228, 145, 226, 215, 228, 145, 245, 158, 228, 145, - 223, 90, 224, 115, 228, 145, 223, 90, 224, 115, 234, 255, 223, 90, 224, - 115, 239, 112, 237, 231, 76, 231, 147, 76, 244, 95, 235, 0, 244, 95, 247, - 61, 250, 130, 247, 240, 250, 130, 247, 248, 250, 130, 169, 125, 47, 61, - 237, 170, 47, 184, 237, 170, 42, 228, 241, 232, 57, 76, 41, 228, 241, - 232, 57, 76, 228, 241, 237, 116, 232, 57, 76, 228, 241, 245, 62, 232, 57, - 76, 42, 47, 232, 57, 76, 41, 47, 232, 57, 76, 47, 237, 116, 232, 57, 76, - 47, 245, 62, 232, 57, 76, 250, 174, 47, 250, 174, 252, 83, 226, 75, 252, - 83, 168, 56, 237, 242, 135, 56, 237, 242, 169, 247, 249, 244, 93, 232, - 254, 237, 171, 229, 173, 233, 192, 229, 173, 237, 231, 247, 246, 231, - 147, 247, 246, 232, 243, 249, 200, 246, 249, 237, 231, 234, 0, 231, 147, - 234, 0, 235, 229, 235, 5, 228, 145, 233, 124, 236, 130, 53, 233, 124, - 227, 24, 226, 195, 53, 232, 205, 47, 232, 205, 226, 66, 232, 205, 200, - 232, 205, 200, 47, 232, 205, 200, 226, 66, 232, 205, 252, 9, 228, 241, - 237, 235, 254, 182, 232, 57, 76, 228, 241, 231, 151, 254, 182, 232, 57, - 76, 231, 228, 76, 47, 247, 149, 76, 239, 230, 234, 1, 225, 130, 116, 226, - 170, 252, 10, 239, 244, 232, 254, 254, 67, 244, 96, 252, 83, 246, 235, - 228, 194, 42, 37, 252, 115, 2, 232, 65, 41, 37, 252, 115, 2, 232, 65, 47, - 232, 69, 76, 232, 69, 247, 149, 76, 247, 149, 232, 69, 76, 226, 145, 5, - 247, 173, 200, 233, 38, 53, 86, 117, 252, 83, 86, 81, 252, 83, 184, 254, - 69, 200, 229, 186, 251, 83, 225, 116, 135, 254, 68, 254, 218, 224, 235, - 251, 53, 236, 121, 53, 227, 187, 250, 130, 239, 223, 225, 130, 247, 13, - 232, 171, 76, 152, 56, 232, 170, 232, 78, 232, 205, 246, 243, 56, 232, - 170, 247, 37, 56, 232, 170, 135, 56, 232, 170, 246, 243, 56, 76, 248, - 138, 250, 243, 226, 74, 61, 246, 243, 249, 138, 236, 228, 12, 228, 145, - 224, 92, 239, 112, 246, 216, 254, 141, 239, 221, 226, 156, 239, 221, 229, - 173, 239, 221, 233, 10, 239, 253, 227, 136, 227, 198, 255, 35, 227, 136, - 227, 198, 239, 253, 10, 211, 229, 127, 255, 35, 10, 211, 229, 127, 235, - 225, 21, 229, 128, 235, 1, 21, 229, 128, 227, 219, 223, 89, 227, 219, 7, - 3, 1, 74, 227, 219, 158, 227, 219, 173, 227, 219, 183, 227, 219, 194, - 227, 219, 187, 227, 219, 192, 227, 219, 79, 53, 227, 219, 236, 120, 227, - 219, 247, 204, 53, 227, 219, 42, 233, 180, 227, 219, 41, 233, 180, 227, - 219, 7, 3, 1, 199, 227, 253, 223, 89, 227, 253, 118, 227, 253, 113, 227, - 253, 166, 227, 253, 158, 227, 253, 173, 227, 253, 183, 227, 253, 194, - 227, 253, 187, 227, 253, 192, 227, 253, 79, 53, 227, 253, 236, 120, 227, - 253, 247, 204, 53, 227, 253, 42, 233, 180, 227, 253, 41, 233, 180, 7, - 227, 253, 3, 1, 57, 7, 227, 253, 3, 1, 72, 7, 227, 253, 3, 1, 73, 7, 227, - 253, 3, 1, 224, 73, 7, 227, 253, 3, 1, 230, 222, 247, 160, 53, 251, 62, - 53, 250, 237, 53, 246, 229, 246, 231, 53, 237, 159, 53, 236, 131, 53, - 235, 242, 53, 233, 108, 53, 231, 54, 53, 224, 100, 53, 139, 229, 100, 53, - 249, 147, 53, 247, 161, 53, 238, 187, 53, 225, 246, 53, 248, 122, 53, - 246, 111, 233, 131, 53, 233, 106, 53, 245, 215, 53, 254, 45, 53, 244, - 148, 53, 251, 228, 53, 36, 42, 245, 136, 46, 36, 41, 245, 136, 46, 36, - 182, 61, 237, 171, 234, 2, 36, 229, 63, 61, 237, 171, 234, 2, 36, 254, - 168, 67, 46, 36, 251, 84, 67, 46, 36, 42, 67, 46, 36, 41, 67, 46, 36, - 231, 140, 234, 2, 36, 251, 84, 231, 140, 234, 2, 36, 254, 168, 231, 140, - 234, 2, 36, 152, 197, 46, 36, 246, 243, 197, 46, 36, 247, 236, 251, 106, - 36, 247, 236, 228, 120, 36, 247, 236, 249, 250, 36, 247, 236, 251, 107, - 253, 63, 36, 42, 41, 67, 46, 36, 247, 236, 230, 218, 36, 247, 236, 238, - 230, 36, 247, 236, 225, 108, 232, 251, 226, 78, 36, 231, 193, 228, 162, - 234, 2, 36, 47, 61, 195, 234, 2, 36, 254, 174, 98, 36, 226, 66, 225, 132, - 36, 224, 117, 252, 102, 46, 36, 117, 67, 234, 2, 36, 182, 47, 228, 162, - 234, 2, 36, 81, 245, 136, 2, 171, 248, 124, 36, 117, 245, 136, 2, 171, - 248, 124, 36, 42, 67, 51, 36, 41, 67, 51, 36, 254, 70, 46, 255, 39, 234, - 87, 255, 26, 180, 226, 240, 228, 1, 159, 6, 252, 44, 250, 62, 251, 222, - 251, 219, 237, 171, 98, 252, 11, 234, 87, 252, 36, 225, 137, 247, 162, - 251, 30, 230, 216, 250, 62, 247, 116, 95, 3, 214, 95, 6, 212, 252, 148, - 6, 212, 159, 6, 212, 233, 20, 251, 30, 233, 20, 251, 31, 107, 135, 233, - 69, 95, 6, 74, 252, 148, 6, 74, 95, 6, 149, 95, 3, 149, 238, 47, 45, 253, - 36, 98, 159, 6, 199, 234, 196, 53, 228, 155, 231, 238, 251, 12, 95, 6, - 233, 244, 159, 6, 233, 244, 159, 6, 232, 139, 95, 6, 146, 252, 148, 6, - 146, 159, 6, 146, 232, 209, 227, 83, 231, 200, 229, 169, 76, 227, 29, 53, - 226, 94, 165, 53, 225, 31, 159, 6, 223, 119, 234, 12, 53, 234, 82, 53, - 239, 223, 234, 82, 53, 252, 148, 6, 223, 119, 209, 19, 3, 1, 239, 215, - 238, 250, 53, 254, 180, 53, 95, 6, 254, 27, 252, 148, 6, 252, 44, 247, - 176, 98, 95, 3, 72, 95, 6, 72, 95, 6, 247, 130, 209, 6, 247, 130, 95, 6, - 185, 95, 3, 73, 92, 98, 252, 201, 98, 246, 35, 98, 250, 161, 98, 240, 1, - 228, 153, 231, 106, 6, 232, 139, 247, 118, 53, 159, 3, 233, 69, 159, 3, - 246, 169, 159, 6, 246, 169, 159, 6, 233, 69, 159, 236, 4, 227, 230, 209, - 30, 6, 214, 209, 30, 6, 149, 200, 30, 6, 149, 209, 30, 6, 224, 25, 159, - 27, 6, 222, 222, 159, 27, 3, 222, 222, 159, 27, 3, 72, 159, 27, 3, 74, - 159, 27, 3, 239, 182, 232, 191, 237, 170, 209, 254, 193, 233, 124, 53, - 254, 235, 209, 3, 247, 130, 14, 32, 231, 4, 228, 153, 224, 189, 246, 235, - 168, 226, 213, 224, 189, 246, 235, 135, 226, 211, 224, 189, 246, 235, - 168, 247, 66, 224, 189, 246, 235, 135, 247, 65, 224, 189, 246, 235, 152, - 247, 65, 224, 189, 246, 235, 246, 243, 247, 65, 224, 189, 246, 235, 168, - 228, 210, 224, 189, 246, 235, 247, 37, 228, 208, 224, 189, 246, 235, 168, - 248, 16, 224, 189, 246, 235, 152, 248, 14, 224, 189, 246, 235, 247, 37, - 248, 14, 224, 189, 246, 235, 229, 163, 248, 14, 246, 235, 234, 197, 118, - 231, 115, 207, 118, 231, 115, 207, 113, 231, 115, 207, 166, 231, 115, - 207, 158, 231, 115, 207, 173, 231, 115, 207, 183, 231, 115, 207, 194, - 231, 115, 207, 187, 231, 115, 207, 192, 231, 115, 207, 227, 23, 231, 115, - 207, 247, 252, 231, 115, 207, 225, 218, 231, 115, 207, 247, 63, 231, 115, - 207, 168, 244, 135, 231, 115, 207, 247, 37, 244, 135, 231, 115, 207, 168, - 226, 194, 3, 231, 115, 207, 118, 3, 231, 115, 207, 113, 3, 231, 115, 207, - 166, 3, 231, 115, 207, 158, 3, 231, 115, 207, 173, 3, 231, 115, 207, 183, - 3, 231, 115, 207, 194, 3, 231, 115, 207, 187, 3, 231, 115, 207, 192, 3, - 231, 115, 207, 227, 23, 3, 231, 115, 207, 247, 252, 3, 231, 115, 207, - 225, 218, 3, 231, 115, 207, 247, 63, 3, 231, 115, 207, 168, 244, 135, 3, - 231, 115, 207, 247, 37, 244, 135, 3, 231, 115, 207, 168, 226, 194, 231, - 115, 207, 168, 226, 195, 252, 45, 222, 222, 231, 115, 207, 247, 37, 226, - 194, 231, 115, 207, 227, 24, 226, 194, 231, 115, 207, 200, 168, 244, 135, - 7, 3, 1, 200, 252, 44, 231, 115, 207, 228, 217, 238, 3, 15, 231, 115, - 207, 247, 64, 248, 50, 15, 231, 115, 207, 247, 64, 226, 194, 231, 115, - 207, 168, 244, 136, 226, 194, 117, 58, 225, 106, 58, 81, 58, 248, 125, - 58, 42, 41, 58, 99, 103, 58, 234, 245, 224, 131, 58, 234, 245, 248, 45, - 58, 228, 152, 248, 45, 58, 228, 152, 224, 131, 58, 117, 67, 2, 82, 81, - 67, 2, 82, 117, 224, 148, 58, 81, 224, 148, 58, 117, 135, 245, 117, 58, - 225, 106, 135, 245, 117, 58, 81, 135, 245, 117, 58, 248, 125, 135, 245, - 117, 58, 117, 67, 2, 227, 89, 81, 67, 2, 227, 89, 117, 67, 246, 224, 125, - 225, 106, 67, 246, 224, 125, 81, 67, 246, 224, 125, 248, 125, 67, 246, - 224, 125, 99, 103, 67, 2, 253, 24, 117, 67, 2, 88, 81, 67, 2, 88, 117, - 67, 2, 237, 124, 81, 67, 2, 237, 124, 42, 41, 224, 148, 58, 42, 41, 67, - 2, 82, 248, 125, 223, 38, 58, 225, 106, 67, 2, 226, 151, 237, 230, 225, - 106, 67, 2, 226, 151, 231, 145, 248, 125, 67, 2, 226, 151, 237, 230, 248, - 125, 67, 2, 226, 151, 231, 145, 81, 67, 2, 251, 11, 248, 124, 248, 125, - 67, 2, 251, 11, 237, 230, 254, 168, 226, 106, 229, 189, 58, 251, 84, 226, - 106, 229, 189, 58, 234, 245, 224, 131, 67, 180, 182, 125, 117, 67, 180, - 253, 36, 107, 81, 67, 180, 125, 254, 168, 234, 44, 251, 107, 58, 251, 84, - 234, 44, 251, 107, 58, 117, 245, 136, 2, 171, 225, 105, 117, 245, 136, 2, - 171, 248, 124, 225, 106, 245, 136, 2, 171, 231, 145, 225, 106, 245, 136, - 2, 171, 237, 230, 81, 245, 136, 2, 171, 225, 105, 81, 245, 136, 2, 171, - 248, 124, 248, 125, 245, 136, 2, 171, 231, 145, 248, 125, 245, 136, 2, - 171, 237, 230, 81, 67, 107, 117, 58, 225, 106, 67, 117, 106, 248, 125, - 58, 117, 67, 107, 81, 58, 117, 233, 232, 254, 92, 225, 106, 233, 232, - 254, 92, 81, 233, 232, 254, 92, 248, 125, 233, 232, 254, 92, 117, 245, - 136, 107, 81, 245, 135, 81, 245, 136, 107, 117, 245, 135, 117, 47, 67, 2, - 82, 42, 41, 47, 67, 2, 82, 81, 47, 67, 2, 82, 117, 47, 58, 225, 106, 47, - 58, 81, 47, 58, 248, 125, 47, 58, 42, 41, 47, 58, 99, 103, 47, 58, 234, - 245, 224, 131, 47, 58, 234, 245, 248, 45, 47, 58, 228, 152, 248, 45, 47, - 58, 228, 152, 224, 131, 47, 58, 117, 226, 66, 58, 81, 226, 66, 58, 117, - 228, 115, 58, 81, 228, 115, 58, 225, 106, 67, 2, 47, 82, 248, 125, 67, 2, - 47, 82, 117, 250, 129, 58, 225, 106, 250, 129, 58, 81, 250, 129, 58, 248, - 125, 250, 129, 58, 117, 67, 180, 125, 81, 67, 180, 125, 117, 63, 58, 225, - 106, 63, 58, 81, 63, 58, 248, 125, 63, 58, 225, 106, 63, 67, 246, 224, - 125, 225, 106, 63, 67, 234, 62, 233, 146, 225, 106, 63, 67, 234, 62, 233, - 147, 2, 169, 125, 225, 106, 63, 67, 234, 62, 233, 147, 2, 61, 125, 225, - 106, 63, 47, 58, 225, 106, 63, 47, 67, 234, 62, 233, 146, 81, 63, 67, - 246, 224, 224, 165, 234, 245, 224, 131, 67, 180, 251, 10, 228, 152, 248, - 45, 67, 180, 251, 10, 99, 103, 63, 58, 41, 67, 2, 3, 251, 106, 248, 125, - 67, 117, 106, 225, 106, 58, 152, 81, 254, 92, 117, 67, 2, 61, 82, 81, 67, - 2, 61, 82, 42, 41, 67, 2, 61, 82, 117, 67, 2, 47, 61, 82, 81, 67, 2, 47, - 61, 82, 42, 41, 67, 2, 47, 61, 82, 117, 234, 42, 58, 81, 234, 42, 58, 42, - 41, 234, 42, 58, 32, 254, 216, 251, 50, 233, 175, 249, 236, 226, 231, - 247, 145, 226, 231, 249, 154, 190, 247, 146, 247, 241, 229, 164, 240, 10, - 235, 250, 247, 254, 234, 87, 190, 254, 191, 247, 254, 234, 87, 3, 247, - 254, 234, 87, 251, 26, 254, 87, 236, 213, 249, 154, 190, 251, 28, 254, - 87, 236, 213, 3, 251, 26, 254, 87, 236, 213, 247, 233, 106, 232, 193, - 236, 4, 232, 200, 236, 4, 251, 15, 236, 4, 227, 230, 236, 121, 53, 236, - 119, 53, 56, 233, 10, 249, 181, 228, 194, 229, 165, 236, 120, 254, 70, - 234, 37, 231, 140, 234, 37, 252, 84, 234, 37, 37, 231, 111, 250, 232, - 231, 111, 246, 237, 231, 111, 232, 189, 96, 240, 3, 41, 254, 181, 254, - 181, 236, 232, 254, 181, 228, 137, 254, 181, 249, 183, 249, 154, 190, - 249, 186, 233, 185, 96, 190, 233, 185, 96, 237, 138, 254, 186, 237, 138, - 234, 31, 239, 227, 225, 127, 239, 239, 47, 239, 239, 226, 66, 239, 239, - 251, 22, 239, 239, 227, 209, 239, 239, 224, 199, 239, 239, 251, 84, 239, - 239, 251, 84, 251, 22, 239, 239, 254, 168, 251, 22, 239, 239, 226, 230, - 252, 233, 231, 252, 232, 190, 56, 236, 120, 247, 150, 246, 117, 232, 190, - 244, 220, 226, 159, 234, 37, 200, 205, 239, 223, 237, 250, 193, 228, 242, - 224, 147, 224, 86, 232, 200, 190, 205, 236, 121, 205, 254, 65, 105, 96, - 190, 254, 65, 105, 96, 254, 137, 105, 96, 254, 137, 252, 64, 190, 255, - 34, 105, 96, 235, 156, 254, 137, 234, 248, 255, 34, 105, 96, 254, 210, - 105, 96, 190, 254, 210, 105, 96, 254, 210, 105, 145, 105, 96, 226, 66, - 205, 254, 217, 105, 96, 247, 200, 96, 246, 116, 247, 200, 96, 249, 237, - 252, 195, 254, 139, 226, 240, 237, 178, 246, 116, 105, 96, 254, 137, 105, - 180, 145, 226, 240, 240, 29, 234, 87, 240, 29, 106, 145, 254, 137, 105, - 96, 251, 62, 247, 203, 247, 204, 251, 61, 231, 140, 240, 17, 105, 96, - 231, 140, 105, 96, 251, 4, 96, 247, 175, 247, 202, 96, 228, 59, 247, 203, - 250, 48, 105, 96, 105, 180, 252, 55, 250, 63, 236, 232, 252, 54, 232, 67, - 105, 96, 190, 105, 96, 244, 63, 96, 190, 244, 63, 96, 228, 25, 247, 200, - 96, 237, 213, 145, 105, 96, 245, 231, 145, 105, 96, 237, 213, 107, 105, - 96, 245, 231, 107, 105, 96, 237, 213, 252, 64, 190, 105, 96, 245, 231, - 252, 64, 190, 105, 96, 236, 62, 237, 212, 236, 62, 245, 230, 252, 195, - 190, 247, 200, 96, 190, 237, 212, 190, 245, 230, 235, 156, 237, 213, 234, - 248, 105, 96, 235, 156, 245, 231, 234, 248, 105, 96, 237, 213, 145, 247, - 200, 96, 245, 231, 145, 247, 200, 96, 235, 156, 237, 213, 234, 248, 247, - 200, 96, 235, 156, 245, 231, 234, 248, 247, 200, 96, 237, 213, 145, 245, - 230, 245, 231, 145, 237, 212, 235, 156, 237, 213, 234, 248, 245, 230, - 235, 156, 245, 231, 234, 248, 237, 212, 232, 213, 227, 243, 232, 214, - 145, 105, 96, 227, 244, 145, 105, 96, 232, 214, 145, 247, 200, 96, 227, - 244, 145, 247, 200, 96, 249, 154, 190, 232, 216, 249, 154, 190, 227, 245, - 227, 252, 234, 87, 227, 218, 234, 87, 190, 102, 227, 252, 234, 87, 190, - 102, 227, 218, 234, 87, 227, 252, 106, 145, 105, 96, 227, 218, 106, 145, - 105, 96, 235, 156, 102, 227, 252, 106, 234, 248, 105, 96, 235, 156, 102, - 227, 218, 106, 234, 248, 105, 96, 227, 252, 106, 2, 190, 105, 96, 227, - 218, 106, 2, 190, 105, 96, 236, 49, 236, 50, 236, 51, 236, 50, 225, 127, - 37, 240, 29, 234, 87, 37, 234, 27, 234, 87, 37, 240, 29, 106, 145, 105, - 96, 37, 234, 27, 106, 145, 105, 96, 37, 252, 16, 37, 250, 226, 33, 233, - 10, 33, 236, 120, 33, 226, 156, 33, 249, 181, 228, 194, 33, 56, 234, 37, - 33, 231, 140, 234, 37, 33, 254, 70, 234, 37, 33, 247, 203, 33, 250, 130, - 228, 119, 233, 10, 228, 119, 236, 120, 228, 119, 226, 156, 228, 119, 56, - 234, 37, 41, 227, 96, 42, 227, 96, 103, 227, 96, 99, 227, 96, 254, 73, - 236, 100, 226, 51, 246, 253, 226, 66, 61, 253, 36, 41, 225, 232, 47, 61, - 253, 36, 47, 41, 225, 232, 249, 154, 190, 232, 185, 190, 226, 51, 249, - 154, 190, 246, 254, 235, 159, 47, 61, 253, 36, 47, 41, 225, 232, 232, - 214, 225, 134, 231, 221, 227, 244, 225, 134, 231, 221, 234, 246, 228, 4, - 234, 87, 251, 26, 254, 87, 234, 246, 228, 3, 234, 246, 228, 4, 106, 145, - 105, 96, 251, 26, 254, 87, 234, 246, 228, 4, 145, 105, 96, 234, 27, 234, - 87, 240, 29, 234, 87, 236, 55, 245, 93, 251, 36, 237, 0, 239, 236, 224, - 52, 235, 235, 234, 247, 41, 254, 182, 2, 254, 122, 41, 226, 78, 236, 4, - 237, 138, 254, 186, 236, 4, 237, 138, 234, 31, 236, 4, 239, 227, 236, 4, - 225, 127, 249, 251, 234, 37, 56, 234, 37, 228, 59, 234, 37, 249, 181, - 226, 156, 252, 119, 42, 234, 246, 247, 117, 229, 185, 232, 200, 41, 234, - 246, 247, 117, 229, 185, 232, 200, 42, 229, 185, 232, 200, 41, 229, 185, - 232, 200, 200, 226, 159, 247, 203, 250, 223, 237, 138, 234, 31, 250, 223, - 237, 138, 254, 186, 47, 227, 251, 47, 227, 217, 47, 239, 227, 47, 225, - 127, 233, 28, 105, 22, 233, 185, 96, 237, 213, 2, 249, 140, 245, 231, 2, - 249, 140, 224, 234, 236, 62, 237, 212, 224, 234, 236, 62, 245, 230, 237, - 213, 105, 180, 145, 245, 230, 245, 231, 105, 180, 145, 237, 212, 105, - 180, 145, 237, 212, 105, 180, 145, 245, 230, 105, 180, 145, 232, 213, - 105, 180, 145, 227, 243, 249, 154, 190, 232, 217, 145, 247, 205, 249, - 154, 190, 227, 246, 145, 247, 205, 190, 37, 240, 29, 106, 145, 105, 96, - 190, 37, 234, 27, 106, 145, 105, 96, 37, 240, 29, 106, 145, 190, 105, 96, - 37, 234, 27, 106, 145, 190, 105, 96, 237, 213, 252, 64, 190, 247, 200, - 96, 245, 231, 252, 64, 190, 247, 200, 96, 232, 214, 252, 64, 190, 247, - 200, 96, 227, 244, 252, 64, 190, 247, 200, 96, 190, 234, 246, 228, 4, - 234, 87, 249, 154, 190, 251, 28, 254, 87, 234, 246, 228, 3, 190, 234, - 246, 228, 4, 106, 145, 105, 96, 249, 154, 190, 251, 28, 254, 87, 234, - 246, 228, 4, 145, 247, 205, 61, 247, 249, 236, 152, 169, 247, 249, 99, - 41, 250, 1, 247, 249, 103, 41, 250, 1, 247, 249, 247, 254, 106, 2, 182, - 169, 82, 247, 254, 106, 2, 61, 253, 36, 254, 63, 247, 233, 106, 169, 82, - 3, 247, 254, 106, 2, 61, 253, 36, 254, 63, 247, 233, 106, 169, 82, 247, - 254, 106, 2, 56, 46, 247, 254, 106, 2, 234, 5, 3, 247, 254, 106, 2, 234, - 5, 247, 254, 106, 2, 225, 133, 247, 254, 106, 2, 135, 169, 228, 10, 251, - 26, 2, 182, 169, 82, 251, 26, 2, 61, 253, 36, 254, 63, 247, 233, 106, - 169, 82, 3, 251, 26, 2, 61, 253, 36, 254, 63, 247, 233, 106, 169, 82, - 251, 26, 2, 234, 5, 3, 251, 26, 2, 234, 5, 223, 120, 150, 253, 59, 236, - 212, 249, 252, 53, 248, 0, 58, 244, 153, 99, 254, 93, 103, 254, 93, 232, - 196, 233, 111, 224, 146, 237, 170, 42, 251, 224, 41, 251, 224, 42, 247, - 17, 41, 247, 17, 252, 126, 41, 250, 245, 252, 126, 42, 250, 245, 226, - 106, 41, 250, 245, 226, 106, 42, 250, 245, 200, 190, 53, 37, 237, 113, - 254, 122, 230, 199, 230, 204, 227, 29, 231, 239, 232, 239, 240, 7, 224, - 222, 228, 120, 233, 23, 106, 239, 235, 53, 209, 190, 53, 224, 153, 244, - 154, 226, 106, 42, 251, 10, 226, 106, 41, 251, 10, 252, 126, 42, 251, 10, - 252, 126, 41, 251, 10, 226, 106, 132, 239, 239, 252, 126, 132, 239, 239, - 246, 222, 228, 180, 99, 254, 94, 252, 196, 135, 169, 253, 26, 234, 32, - 238, 232, 247, 196, 180, 226, 240, 231, 153, 224, 74, 240, 17, 102, 231, - 237, 252, 118, 238, 231, 237, 235, 254, 182, 104, 231, 151, 254, 182, - 104, 247, 196, 180, 226, 240, 237, 237, 252, 207, 231, 139, 250, 200, - 254, 217, 254, 101, 227, 135, 226, 98, 231, 59, 249, 219, 234, 28, 251, - 38, 227, 68, 228, 189, 251, 1, 251, 0, 162, 163, 14, 244, 78, 162, 163, - 14, 228, 113, 232, 81, 162, 163, 14, 232, 82, 247, 205, 162, 163, 14, - 232, 82, 249, 186, 162, 163, 14, 232, 82, 249, 250, 162, 163, 14, 232, - 82, 239, 105, 162, 163, 14, 232, 82, 251, 106, 162, 163, 14, 251, 107, - 228, 44, 162, 163, 14, 251, 107, 239, 105, 162, 163, 14, 228, 195, 125, - 162, 163, 14, 253, 64, 125, 162, 163, 14, 232, 82, 228, 194, 162, 163, - 14, 232, 82, 253, 63, 162, 163, 14, 232, 82, 237, 212, 162, 163, 14, 232, - 82, 245, 230, 162, 163, 14, 117, 225, 60, 162, 163, 14, 81, 225, 60, 162, - 163, 14, 232, 82, 117, 58, 162, 163, 14, 232, 82, 81, 58, 162, 163, 14, - 251, 107, 253, 63, 162, 163, 14, 103, 227, 97, 225, 133, 162, 163, 14, - 250, 48, 228, 44, 162, 163, 14, 232, 82, 103, 252, 9, 162, 163, 14, 232, - 82, 250, 47, 162, 163, 14, 103, 227, 97, 239, 105, 162, 163, 14, 225, - 106, 225, 60, 162, 163, 14, 232, 82, 225, 106, 58, 162, 163, 14, 99, 227, - 97, 234, 5, 162, 163, 14, 250, 57, 228, 44, 162, 163, 14, 232, 82, 99, - 252, 9, 162, 163, 14, 232, 82, 250, 56, 162, 163, 14, 99, 227, 97, 239, - 105, 162, 163, 14, 248, 125, 225, 60, 162, 163, 14, 232, 82, 248, 125, - 58, 162, 163, 14, 232, 56, 225, 133, 162, 163, 14, 250, 48, 225, 133, - 162, 163, 14, 249, 251, 225, 133, 162, 163, 14, 239, 106, 225, 133, 162, - 163, 14, 251, 107, 225, 133, 162, 163, 14, 99, 229, 69, 239, 105, 162, - 163, 14, 232, 56, 232, 81, 162, 163, 14, 251, 107, 228, 58, 162, 163, 14, - 232, 82, 251, 61, 162, 163, 14, 99, 227, 97, 219, 162, 163, 14, 250, 57, - 219, 162, 163, 14, 228, 59, 219, 162, 163, 14, 239, 106, 219, 162, 163, - 14, 251, 107, 219, 162, 163, 14, 103, 229, 69, 228, 44, 162, 163, 14, 42, - 229, 69, 228, 44, 162, 163, 14, 226, 159, 219, 162, 163, 14, 245, 231, - 219, 162, 163, 14, 251, 55, 125, 162, 163, 14, 250, 57, 205, 162, 163, - 14, 223, 37, 162, 163, 14, 228, 45, 205, 162, 163, 14, 229, 187, 225, - 133, 162, 163, 14, 232, 82, 190, 247, 205, 162, 163, 14, 232, 82, 232, - 68, 162, 163, 14, 103, 252, 10, 205, 162, 163, 14, 99, 252, 10, 205, 162, - 163, 14, 239, 215, 162, 163, 14, 231, 182, 162, 163, 14, 234, 66, 162, - 163, 14, 254, 206, 225, 133, 162, 163, 14, 247, 207, 225, 133, 162, 163, - 14, 239, 216, 225, 133, 162, 163, 14, 234, 67, 225, 133, 162, 163, 14, - 254, 205, 190, 251, 181, 76, 41, 254, 182, 2, 248, 125, 223, 38, 58, 229, - 48, 234, 44, 252, 118, 252, 216, 98, 61, 237, 171, 2, 236, 154, 249, 140, - 239, 244, 98, 251, 23, 225, 131, 98, 249, 197, 225, 131, 98, 247, 243, - 98, 251, 46, 98, 63, 37, 2, 251, 219, 61, 237, 170, 247, 223, 98, 254, - 201, 238, 233, 98, 245, 103, 98, 33, 169, 253, 36, 2, 234, 241, 33, 226, - 79, 248, 127, 252, 99, 251, 107, 2, 234, 244, 58, 225, 129, 98, 236, 89, - 98, 244, 91, 98, 234, 43, 245, 171, 98, 234, 43, 238, 45, 98, 233, 170, - 98, 233, 169, 98, 249, 201, 250, 221, 14, 211, 113, 228, 164, 98, 162, - 163, 14, 232, 81, 250, 71, 229, 174, 238, 233, 98, 232, 207, 233, 233, - 235, 142, 233, 233, 232, 204, 230, 219, 98, 251, 94, 230, 219, 98, 42, - 233, 181, 225, 113, 88, 42, 233, 181, 247, 141, 42, 233, 181, 203, 88, - 41, 233, 181, 225, 113, 88, 41, 233, 181, 247, 141, 41, 233, 181, 203, - 88, 42, 37, 252, 115, 225, 113, 251, 10, 42, 37, 252, 115, 247, 141, 42, - 37, 252, 115, 203, 251, 10, 41, 37, 252, 115, 225, 113, 251, 10, 41, 37, - 252, 115, 247, 141, 41, 37, 252, 115, 203, 251, 10, 42, 250, 223, 252, - 115, 225, 113, 88, 42, 250, 223, 252, 115, 236, 154, 233, 63, 42, 250, - 223, 252, 115, 203, 88, 250, 223, 252, 115, 247, 141, 41, 250, 223, 252, - 115, 225, 113, 88, 41, 250, 223, 252, 115, 236, 154, 233, 63, 41, 250, - 223, 252, 115, 203, 88, 239, 240, 247, 141, 169, 237, 171, 247, 141, 225, - 113, 42, 145, 203, 41, 250, 223, 252, 115, 230, 205, 225, 113, 41, 145, - 203, 42, 250, 223, 252, 115, 230, 205, 227, 231, 226, 105, 227, 231, 252, - 125, 226, 106, 37, 104, 252, 126, 37, 104, 252, 126, 37, 252, 115, 107, - 226, 106, 37, 104, 29, 14, 252, 125, 42, 61, 77, 237, 170, 41, 61, 77, - 237, 170, 169, 230, 228, 237, 169, 169, 230, 228, 237, 168, 169, 230, - 228, 237, 167, 169, 230, 228, 237, 166, 250, 40, 14, 157, 61, 22, 226, - 106, 231, 153, 250, 40, 14, 157, 61, 22, 252, 126, 231, 153, 250, 40, 14, - 157, 61, 2, 251, 106, 250, 40, 14, 157, 103, 22, 169, 2, 251, 106, 250, - 40, 14, 157, 99, 22, 169, 2, 251, 106, 250, 40, 14, 157, 61, 2, 226, 78, - 250, 40, 14, 157, 103, 22, 169, 2, 226, 78, 250, 40, 14, 157, 99, 22, - 169, 2, 226, 78, 250, 40, 14, 157, 61, 22, 224, 147, 250, 40, 14, 157, - 103, 22, 169, 2, 224, 147, 250, 40, 14, 157, 99, 22, 169, 2, 224, 147, - 250, 40, 14, 157, 103, 22, 244, 212, 250, 40, 14, 157, 99, 22, 244, 212, - 250, 40, 14, 157, 61, 22, 226, 106, 237, 237, 250, 40, 14, 157, 61, 22, - 252, 126, 237, 237, 37, 247, 2, 231, 195, 98, 248, 10, 98, 61, 237, 171, - 247, 141, 236, 194, 252, 106, 236, 194, 182, 107, 229, 62, 236, 194, 229, - 63, 107, 237, 134, 236, 194, 182, 107, 135, 229, 50, 236, 194, 135, 229, - 51, 107, 237, 134, 236, 194, 135, 229, 51, 239, 113, 236, 194, 226, 63, - 236, 194, 227, 3, 236, 194, 233, 128, 248, 49, 245, 225, 246, 209, 226, - 106, 233, 180, 252, 126, 233, 180, 226, 106, 250, 223, 104, 252, 126, - 250, 223, 104, 226, 106, 226, 100, 229, 104, 104, 252, 126, 226, 100, - 229, 104, 104, 63, 226, 89, 252, 207, 231, 140, 2, 251, 106, 228, 31, - 247, 23, 255, 44, 250, 220, 247, 255, 239, 227, 14, 32, 234, 200, 14, 32, - 228, 56, 106, 245, 116, 14, 32, 228, 56, 106, 226, 255, 14, 32, 247, 233, - 106, 226, 255, 14, 32, 247, 233, 106, 226, 92, 14, 32, 247, 224, 14, 32, - 255, 37, 14, 32, 252, 215, 14, 32, 253, 62, 14, 32, 169, 227, 98, 14, 32, - 237, 171, 247, 90, 14, 32, 61, 227, 98, 14, 32, 211, 247, 90, 14, 32, - 252, 3, 231, 194, 14, 32, 229, 86, 234, 10, 14, 32, 229, 86, 240, 16, 14, - 32, 250, 126, 237, 163, 247, 185, 14, 32, 250, 28, 251, 18, 118, 14, 32, - 250, 28, 251, 18, 113, 14, 32, 250, 28, 251, 18, 166, 14, 32, 250, 28, - 251, 18, 158, 14, 32, 235, 157, 255, 37, 14, 32, 227, 132, 240, 74, 14, - 32, 247, 233, 106, 226, 93, 252, 142, 14, 32, 252, 24, 14, 32, 247, 233, - 106, 236, 227, 14, 32, 227, 249, 14, 32, 247, 185, 14, 32, 247, 56, 229, - 173, 14, 32, 245, 224, 229, 173, 14, 32, 231, 240, 229, 173, 14, 32, 225, - 126, 229, 173, 14, 32, 228, 145, 14, 32, 250, 54, 252, 145, 98, 234, 44, - 252, 118, 14, 32, 235, 144, 14, 32, 250, 55, 211, 113, 14, 32, 227, 250, - 211, 113, 234, 92, 88, 234, 92, 251, 200, 234, 92, 246, 252, 234, 92, - 239, 223, 246, 252, 234, 92, 252, 213, 252, 89, 234, 92, 252, 122, 226, - 170, 234, 92, 252, 113, 253, 39, 244, 62, 234, 92, 254, 194, 106, 251, - 180, 234, 92, 250, 130, 234, 92, 250, 214, 255, 39, 234, 198, 234, 92, - 47, 253, 63, 33, 21, 118, 33, 21, 113, 33, 21, 166, 33, 21, 158, 33, 21, - 173, 33, 21, 183, 33, 21, 194, 33, 21, 187, 33, 21, 192, 33, 65, 227, 23, - 33, 65, 247, 252, 33, 65, 225, 218, 33, 65, 226, 209, 33, 65, 246, 238, - 33, 65, 247, 67, 33, 65, 228, 212, 33, 65, 229, 161, 33, 65, 248, 18, 33, - 65, 235, 59, 33, 65, 225, 216, 93, 21, 118, 93, 21, 113, 93, 21, 166, 93, - 21, 158, 93, 21, 173, 93, 21, 183, 93, 21, 194, 93, 21, 187, 93, 21, 192, - 93, 65, 227, 23, 93, 65, 247, 252, 93, 65, 225, 218, 93, 65, 226, 209, - 93, 65, 246, 238, 93, 65, 247, 67, 93, 65, 228, 212, 93, 65, 229, 161, - 93, 65, 248, 18, 93, 65, 235, 59, 93, 65, 225, 216, 21, 168, 246, 218, - 228, 38, 21, 135, 246, 218, 228, 38, 21, 152, 246, 218, 228, 38, 21, 246, - 243, 246, 218, 228, 38, 21, 247, 37, 246, 218, 228, 38, 21, 228, 217, - 246, 218, 228, 38, 21, 229, 163, 246, 218, 228, 38, 21, 248, 20, 246, - 218, 228, 38, 21, 235, 61, 246, 218, 228, 38, 65, 227, 24, 246, 218, 228, - 38, 65, 247, 253, 246, 218, 228, 38, 65, 225, 219, 246, 218, 228, 38, 65, - 226, 210, 246, 218, 228, 38, 65, 246, 239, 246, 218, 228, 38, 65, 247, - 68, 246, 218, 228, 38, 65, 228, 213, 246, 218, 228, 38, 65, 229, 162, - 246, 218, 228, 38, 65, 248, 19, 246, 218, 228, 38, 65, 235, 60, 246, 218, - 228, 38, 65, 225, 217, 246, 218, 228, 38, 93, 7, 3, 1, 57, 93, 7, 3, 1, - 254, 27, 93, 7, 3, 1, 252, 44, 93, 7, 3, 1, 222, 222, 93, 7, 3, 1, 72, - 93, 7, 3, 1, 247, 130, 93, 7, 3, 1, 214, 93, 7, 3, 1, 212, 93, 7, 3, 1, - 74, 93, 7, 3, 1, 239, 182, 93, 7, 3, 1, 239, 76, 93, 7, 3, 1, 149, 93, 7, - 3, 1, 185, 93, 7, 3, 1, 199, 93, 7, 3, 1, 73, 93, 7, 3, 1, 233, 244, 93, - 7, 3, 1, 232, 139, 93, 7, 3, 1, 146, 93, 7, 3, 1, 193, 93, 7, 3, 1, 227, - 109, 93, 7, 3, 1, 66, 93, 7, 3, 1, 196, 93, 7, 3, 1, 224, 174, 93, 7, 3, - 1, 224, 73, 93, 7, 3, 1, 224, 25, 93, 7, 3, 1, 223, 119, 33, 7, 6, 1, 57, - 33, 7, 6, 1, 254, 27, 33, 7, 6, 1, 252, 44, 33, 7, 6, 1, 222, 222, 33, 7, - 6, 1, 72, 33, 7, 6, 1, 247, 130, 33, 7, 6, 1, 214, 33, 7, 6, 1, 212, 33, - 7, 6, 1, 74, 33, 7, 6, 1, 239, 182, 33, 7, 6, 1, 239, 76, 33, 7, 6, 1, - 149, 33, 7, 6, 1, 185, 33, 7, 6, 1, 199, 33, 7, 6, 1, 73, 33, 7, 6, 1, - 233, 244, 33, 7, 6, 1, 232, 139, 33, 7, 6, 1, 146, 33, 7, 6, 1, 193, 33, - 7, 6, 1, 227, 109, 33, 7, 6, 1, 66, 33, 7, 6, 1, 196, 33, 7, 6, 1, 224, - 174, 33, 7, 6, 1, 224, 73, 33, 7, 6, 1, 224, 25, 33, 7, 6, 1, 223, 119, - 33, 7, 3, 1, 57, 33, 7, 3, 1, 254, 27, 33, 7, 3, 1, 252, 44, 33, 7, 3, 1, - 222, 222, 33, 7, 3, 1, 72, 33, 7, 3, 1, 247, 130, 33, 7, 3, 1, 214, 33, - 7, 3, 1, 212, 33, 7, 3, 1, 74, 33, 7, 3, 1, 239, 182, 33, 7, 3, 1, 239, - 76, 33, 7, 3, 1, 149, 33, 7, 3, 1, 185, 33, 7, 3, 1, 199, 33, 7, 3, 1, - 73, 33, 7, 3, 1, 233, 244, 33, 7, 3, 1, 232, 139, 33, 7, 3, 1, 146, 33, - 7, 3, 1, 193, 33, 7, 3, 1, 227, 109, 33, 7, 3, 1, 66, 33, 7, 3, 1, 196, - 33, 7, 3, 1, 224, 174, 33, 7, 3, 1, 224, 73, 33, 7, 3, 1, 224, 25, 33, 7, - 3, 1, 223, 119, 33, 21, 223, 89, 235, 157, 33, 65, 247, 252, 235, 157, - 33, 65, 225, 218, 235, 157, 33, 65, 226, 209, 235, 157, 33, 65, 246, 238, - 235, 157, 33, 65, 247, 67, 235, 157, 33, 65, 228, 212, 235, 157, 33, 65, - 229, 161, 235, 157, 33, 65, 248, 18, 235, 157, 33, 65, 235, 59, 235, 157, - 33, 65, 225, 216, 47, 33, 21, 118, 47, 33, 21, 113, 47, 33, 21, 166, 47, - 33, 21, 158, 47, 33, 21, 173, 47, 33, 21, 183, 47, 33, 21, 194, 47, 33, - 21, 187, 47, 33, 21, 192, 47, 33, 65, 227, 23, 235, 157, 33, 21, 223, 89, - 77, 80, 157, 244, 212, 77, 80, 112, 244, 212, 77, 80, 157, 225, 30, 77, - 80, 112, 225, 30, 77, 80, 157, 226, 66, 250, 131, 244, 212, 77, 80, 112, - 226, 66, 250, 131, 244, 212, 77, 80, 157, 226, 66, 250, 131, 225, 30, 77, - 80, 112, 226, 66, 250, 131, 225, 30, 77, 80, 157, 232, 78, 250, 131, 244, - 212, 77, 80, 112, 232, 78, 250, 131, 244, 212, 77, 80, 157, 232, 78, 250, - 131, 225, 30, 77, 80, 112, 232, 78, 250, 131, 225, 30, 77, 80, 157, 103, - 22, 231, 153, 77, 80, 103, 157, 22, 41, 245, 110, 77, 80, 103, 112, 22, - 41, 237, 184, 77, 80, 112, 103, 22, 231, 153, 77, 80, 157, 103, 22, 237, - 237, 77, 80, 103, 157, 22, 42, 245, 110, 77, 80, 103, 112, 22, 42, 237, - 184, 77, 80, 112, 103, 22, 237, 237, 77, 80, 157, 99, 22, 231, 153, 77, - 80, 99, 157, 22, 41, 245, 110, 77, 80, 99, 112, 22, 41, 237, 184, 77, 80, - 112, 99, 22, 231, 153, 77, 80, 157, 99, 22, 237, 237, 77, 80, 99, 157, - 22, 42, 245, 110, 77, 80, 99, 112, 22, 42, 237, 184, 77, 80, 112, 99, 22, - 237, 237, 77, 80, 157, 61, 22, 231, 153, 77, 80, 61, 157, 22, 41, 245, - 110, 77, 80, 99, 112, 22, 41, 103, 237, 184, 77, 80, 103, 112, 22, 41, - 99, 237, 184, 77, 80, 61, 112, 22, 41, 237, 184, 77, 80, 103, 157, 22, - 41, 99, 245, 110, 77, 80, 99, 157, 22, 41, 103, 245, 110, 77, 80, 112, - 61, 22, 231, 153, 77, 80, 157, 61, 22, 237, 237, 77, 80, 61, 157, 22, 42, - 245, 110, 77, 80, 99, 112, 22, 42, 103, 237, 184, 77, 80, 103, 112, 22, - 42, 99, 237, 184, 77, 80, 61, 112, 22, 42, 237, 184, 77, 80, 103, 157, - 22, 42, 99, 245, 110, 77, 80, 99, 157, 22, 42, 103, 245, 110, 77, 80, - 112, 61, 22, 237, 237, 77, 80, 157, 103, 22, 244, 212, 77, 80, 42, 112, - 22, 41, 103, 237, 184, 77, 80, 41, 112, 22, 42, 103, 237, 184, 77, 80, - 103, 157, 22, 169, 245, 110, 77, 80, 103, 112, 22, 169, 237, 184, 77, 80, - 41, 157, 22, 42, 103, 245, 110, 77, 80, 42, 157, 22, 41, 103, 245, 110, - 77, 80, 112, 103, 22, 244, 212, 77, 80, 157, 99, 22, 244, 212, 77, 80, - 42, 112, 22, 41, 99, 237, 184, 77, 80, 41, 112, 22, 42, 99, 237, 184, 77, - 80, 99, 157, 22, 169, 245, 110, 77, 80, 99, 112, 22, 169, 237, 184, 77, - 80, 41, 157, 22, 42, 99, 245, 110, 77, 80, 42, 157, 22, 41, 99, 245, 110, - 77, 80, 112, 99, 22, 244, 212, 77, 80, 157, 61, 22, 244, 212, 77, 80, 42, - 112, 22, 41, 61, 237, 184, 77, 80, 41, 112, 22, 42, 61, 237, 184, 77, 80, - 61, 157, 22, 169, 245, 110, 77, 80, 99, 112, 22, 103, 169, 237, 184, 77, - 80, 103, 112, 22, 99, 169, 237, 184, 77, 80, 61, 112, 22, 169, 237, 184, - 77, 80, 42, 99, 112, 22, 41, 103, 237, 184, 77, 80, 41, 99, 112, 22, 42, - 103, 237, 184, 77, 80, 42, 103, 112, 22, 41, 99, 237, 184, 77, 80, 41, - 103, 112, 22, 42, 99, 237, 184, 77, 80, 103, 157, 22, 99, 169, 245, 110, - 77, 80, 99, 157, 22, 103, 169, 245, 110, 77, 80, 41, 157, 22, 42, 61, - 245, 110, 77, 80, 42, 157, 22, 41, 61, 245, 110, 77, 80, 112, 61, 22, - 244, 212, 77, 80, 157, 47, 250, 131, 244, 212, 77, 80, 112, 47, 250, 131, - 244, 212, 77, 80, 157, 47, 250, 131, 225, 30, 77, 80, 112, 47, 250, 131, - 225, 30, 77, 80, 47, 244, 212, 77, 80, 47, 225, 30, 77, 80, 103, 228, - 241, 22, 41, 248, 133, 77, 80, 103, 47, 22, 41, 228, 240, 77, 80, 47, - 103, 22, 231, 153, 77, 80, 103, 228, 241, 22, 42, 248, 133, 77, 80, 103, - 47, 22, 42, 228, 240, 77, 80, 47, 103, 22, 237, 237, 77, 80, 99, 228, - 241, 22, 41, 248, 133, 77, 80, 99, 47, 22, 41, 228, 240, 77, 80, 47, 99, - 22, 231, 153, 77, 80, 99, 228, 241, 22, 42, 248, 133, 77, 80, 99, 47, 22, - 42, 228, 240, 77, 80, 47, 99, 22, 237, 237, 77, 80, 61, 228, 241, 22, 41, - 248, 133, 77, 80, 61, 47, 22, 41, 228, 240, 77, 80, 47, 61, 22, 231, 153, - 77, 80, 61, 228, 241, 22, 42, 248, 133, 77, 80, 61, 47, 22, 42, 228, 240, - 77, 80, 47, 61, 22, 237, 237, 77, 80, 103, 228, 241, 22, 169, 248, 133, - 77, 80, 103, 47, 22, 169, 228, 240, 77, 80, 47, 103, 22, 244, 212, 77, - 80, 99, 228, 241, 22, 169, 248, 133, 77, 80, 99, 47, 22, 169, 228, 240, - 77, 80, 47, 99, 22, 244, 212, 77, 80, 61, 228, 241, 22, 169, 248, 133, - 77, 80, 61, 47, 22, 169, 228, 240, 77, 80, 47, 61, 22, 244, 212, 77, 80, - 157, 254, 123, 103, 22, 231, 153, 77, 80, 157, 254, 123, 103, 22, 237, - 237, 77, 80, 157, 254, 123, 99, 22, 237, 237, 77, 80, 157, 254, 123, 99, - 22, 231, 153, 77, 80, 157, 250, 1, 225, 113, 41, 180, 203, 237, 237, 77, - 80, 157, 250, 1, 225, 113, 42, 180, 203, 231, 153, 77, 80, 157, 250, 1, - 250, 243, 77, 80, 157, 237, 237, 77, 80, 157, 225, 116, 77, 80, 157, 231, - 153, 77, 80, 157, 248, 127, 77, 80, 112, 237, 237, 77, 80, 112, 225, 116, - 77, 80, 112, 231, 153, 77, 80, 112, 248, 127, 77, 80, 157, 42, 22, 112, - 231, 153, 77, 80, 157, 99, 22, 112, 248, 127, 77, 80, 112, 42, 22, 157, - 231, 153, 77, 80, 112, 99, 22, 157, 248, 127, 225, 113, 132, 252, 142, - 203, 168, 248, 17, 252, 142, 203, 168, 232, 77, 252, 142, 203, 152, 248, - 15, 252, 142, 203, 132, 252, 142, 203, 247, 37, 248, 15, 252, 142, 203, - 152, 232, 75, 252, 142, 203, 229, 163, 248, 15, 252, 142, 246, 218, 252, - 142, 42, 229, 163, 248, 15, 252, 142, 42, 152, 232, 75, 252, 142, 42, - 247, 37, 248, 15, 252, 142, 42, 132, 252, 142, 42, 152, 248, 15, 252, - 142, 42, 168, 232, 77, 252, 142, 42, 168, 248, 17, 252, 142, 41, 132, - 252, 142, 157, 229, 136, 236, 228, 229, 136, 250, 136, 229, 136, 225, - 113, 168, 248, 17, 252, 142, 41, 168, 248, 17, 252, 142, 232, 80, 203, - 237, 237, 232, 80, 203, 231, 153, 232, 80, 225, 113, 237, 237, 232, 80, - 225, 113, 42, 22, 203, 42, 22, 203, 231, 153, 232, 80, 225, 113, 42, 22, - 203, 231, 153, 232, 80, 225, 113, 42, 22, 225, 113, 41, 22, 203, 237, - 237, 232, 80, 225, 113, 42, 22, 225, 113, 41, 22, 203, 231, 153, 232, 80, - 225, 113, 231, 153, 232, 80, 225, 113, 41, 22, 203, 237, 237, 232, 80, - 225, 113, 41, 22, 203, 42, 22, 203, 231, 153, 86, 228, 120, 63, 228, 120, - 63, 37, 2, 231, 102, 251, 9, 63, 37, 251, 27, 86, 3, 228, 120, 37, 2, - 169, 247, 54, 37, 2, 61, 247, 54, 37, 2, 234, 22, 250, 239, 247, 54, 37, - 2, 225, 113, 42, 180, 203, 41, 247, 54, 37, 2, 225, 113, 41, 180, 203, - 42, 247, 54, 37, 2, 250, 1, 250, 239, 247, 54, 86, 3, 228, 120, 63, 3, - 228, 120, 86, 231, 236, 63, 231, 236, 86, 61, 231, 236, 63, 61, 231, 236, - 86, 233, 183, 63, 233, 183, 86, 225, 115, 226, 78, 63, 225, 115, 226, 78, - 86, 225, 115, 3, 226, 78, 63, 225, 115, 3, 226, 78, 86, 231, 151, 226, - 78, 63, 231, 151, 226, 78, 86, 231, 151, 3, 226, 78, 63, 231, 151, 3, - 226, 78, 86, 231, 151, 232, 252, 63, 231, 151, 232, 252, 86, 248, 126, - 226, 78, 63, 248, 126, 226, 78, 86, 248, 126, 3, 226, 78, 63, 248, 126, - 3, 226, 78, 86, 237, 235, 226, 78, 63, 237, 235, 226, 78, 86, 237, 235, - 3, 226, 78, 63, 237, 235, 3, 226, 78, 86, 237, 235, 232, 252, 63, 237, - 235, 232, 252, 86, 249, 250, 63, 249, 250, 63, 249, 251, 251, 27, 86, 3, - 249, 250, 247, 42, 237, 113, 63, 251, 106, 248, 138, 251, 106, 251, 107, - 2, 61, 247, 54, 252, 81, 86, 251, 106, 251, 107, 2, 42, 132, 252, 150, - 251, 107, 2, 41, 132, 252, 150, 251, 107, 2, 203, 132, 252, 150, 251, - 107, 2, 225, 113, 132, 252, 150, 251, 107, 2, 225, 113, 41, 232, 80, 252, - 150, 251, 107, 2, 254, 217, 252, 64, 225, 113, 42, 232, 80, 252, 150, 42, - 132, 86, 251, 106, 41, 132, 86, 251, 106, 239, 224, 252, 83, 239, 224, - 63, 251, 106, 225, 113, 132, 239, 224, 63, 251, 106, 203, 132, 239, 224, - 63, 251, 106, 225, 113, 42, 232, 80, 251, 104, 254, 122, 225, 113, 41, - 232, 80, 251, 104, 254, 122, 203, 41, 232, 80, 251, 104, 254, 122, 203, - 42, 232, 80, 251, 104, 254, 122, 225, 113, 132, 251, 106, 203, 132, 251, - 106, 86, 203, 41, 226, 78, 86, 203, 42, 226, 78, 86, 225, 113, 42, 226, - 78, 86, 225, 113, 41, 226, 78, 63, 252, 83, 37, 2, 42, 132, 252, 150, 37, - 2, 41, 132, 252, 150, 37, 2, 225, 113, 42, 250, 1, 132, 252, 150, 37, 2, - 203, 41, 250, 1, 132, 252, 150, 63, 37, 2, 61, 252, 160, 237, 170, 63, - 225, 115, 226, 79, 2, 249, 140, 225, 115, 226, 79, 2, 42, 132, 252, 150, - 225, 115, 226, 79, 2, 41, 132, 252, 150, 238, 9, 251, 106, 63, 37, 2, - 225, 113, 42, 232, 79, 63, 37, 2, 203, 42, 232, 79, 63, 37, 2, 203, 41, - 232, 79, 63, 37, 2, 225, 113, 41, 232, 79, 63, 251, 107, 2, 225, 113, 42, - 232, 79, 63, 251, 107, 2, 203, 42, 232, 79, 63, 251, 107, 2, 203, 41, - 232, 79, 63, 251, 107, 2, 225, 113, 41, 232, 79, 225, 113, 42, 226, 78, - 225, 113, 41, 226, 78, 203, 42, 226, 78, 63, 236, 228, 228, 120, 86, 236, - 228, 228, 120, 63, 236, 228, 3, 228, 120, 86, 236, 228, 3, 228, 120, 203, - 41, 226, 78, 86, 227, 228, 2, 231, 248, 251, 75, 225, 142, 228, 171, 251, - 57, 86, 228, 58, 63, 228, 58, 237, 183, 226, 184, 227, 227, 254, 83, 235, - 3, 250, 33, 235, 3, 251, 35, 234, 34, 86, 227, 28, 63, 227, 28, 253, 48, - 252, 118, 253, 48, 77, 2, 251, 180, 253, 48, 77, 2, 224, 73, 231, 5, 225, - 143, 2, 232, 10, 248, 113, 244, 158, 252, 194, 63, 229, 67, 233, 63, 86, - 229, 67, 233, 63, 229, 132, 200, 231, 106, 247, 16, 245, 115, 252, 83, - 86, 42, 232, 251, 240, 8, 86, 41, 232, 251, 240, 8, 63, 42, 232, 251, - 240, 8, 63, 99, 232, 251, 240, 8, 63, 41, 232, 251, 240, 8, 63, 103, 232, - 251, 240, 8, 228, 199, 22, 250, 242, 251, 252, 53, 232, 16, 53, 252, 166, - 53, 252, 35, 254, 177, 234, 23, 250, 243, 251, 170, 231, 182, 250, 244, - 106, 237, 121, 250, 244, 106, 239, 161, 228, 59, 22, 250, 247, 247, 107, - 98, 255, 23, 229, 134, 245, 150, 22, 229, 13, 233, 150, 98, 223, 193, - 223, 248, 226, 70, 32, 245, 112, 226, 70, 32, 238, 24, 226, 70, 32, 247, - 46, 226, 70, 32, 226, 185, 226, 70, 32, 224, 111, 226, 70, 32, 224, 151, - 226, 70, 32, 236, 74, 226, 70, 32, 248, 48, 224, 125, 106, 250, 18, 63, - 246, 221, 247, 125, 63, 228, 179, 247, 125, 86, 228, 179, 247, 125, 63, - 227, 228, 2, 231, 248, 247, 45, 232, 77, 236, 84, 238, 5, 232, 77, 236, - 84, 236, 209, 247, 83, 53, 248, 48, 237, 39, 53, 239, 89, 230, 239, 225, - 98, 235, 150, 233, 8, 254, 111, 227, 60, 246, 123, 252, 22, 237, 216, - 224, 214, 237, 191, 230, 220, 231, 17, 252, 13, 254, 134, 233, 31, 63, - 251, 175, 238, 189, 63, 251, 175, 232, 70, 63, 251, 175, 231, 112, 63, - 251, 175, 252, 159, 63, 251, 175, 238, 152, 63, 251, 175, 233, 159, 86, - 251, 175, 238, 189, 86, 251, 175, 232, 70, 86, 251, 175, 231, 112, 86, - 251, 175, 252, 159, 86, 251, 175, 238, 152, 86, 251, 175, 233, 159, 86, - 228, 143, 227, 239, 63, 245, 115, 227, 239, 63, 249, 251, 227, 239, 86, - 251, 74, 227, 239, 63, 228, 143, 227, 239, 86, 245, 115, 227, 239, 86, - 249, 251, 227, 239, 63, 251, 74, 227, 239, 244, 158, 228, 124, 232, 77, - 234, 238, 248, 17, 234, 238, 252, 236, 248, 17, 234, 235, 252, 236, 228, - 211, 234, 235, 236, 29, 247, 25, 53, 236, 29, 235, 224, 53, 236, 29, 229, - 124, 53, 224, 131, 151, 250, 243, 248, 45, 151, 250, 243, 225, 123, 231, - 232, 98, 231, 232, 14, 32, 225, 195, 233, 17, 231, 232, 14, 32, 225, 194, - 233, 17, 231, 232, 14, 32, 225, 193, 233, 17, 231, 232, 14, 32, 225, 192, - 233, 17, 231, 232, 14, 32, 225, 191, 233, 17, 231, 232, 14, 32, 225, 190, - 233, 17, 231, 232, 14, 32, 225, 189, 233, 17, 231, 232, 14, 32, 246, 121, - 237, 1, 86, 225, 123, 231, 232, 98, 231, 233, 233, 196, 98, 233, 174, - 233, 196, 98, 233, 116, 233, 196, 53, 224, 123, 98, 249, 244, 247, 124, - 249, 244, 247, 123, 249, 244, 247, 122, 249, 244, 247, 121, 249, 244, - 247, 120, 249, 244, 247, 119, 63, 251, 107, 2, 56, 231, 153, 63, 251, - 107, 2, 135, 249, 138, 86, 251, 107, 2, 63, 56, 231, 153, 86, 251, 107, - 2, 135, 63, 249, 138, 236, 92, 32, 223, 248, 236, 92, 32, 223, 192, 249, - 227, 32, 245, 232, 223, 248, 249, 227, 32, 237, 211, 223, 192, 249, 227, - 32, 237, 211, 223, 248, 249, 227, 32, 245, 232, 223, 192, 63, 247, 31, - 86, 247, 31, 245, 150, 22, 233, 65, 254, 188, 250, 241, 227, 188, 228, - 66, 106, 255, 14, 230, 229, 254, 226, 247, 12, 246, 130, 228, 66, 106, - 245, 95, 254, 59, 98, 247, 21, 234, 7, 63, 228, 58, 224, 161, 53, 201, - 224, 200, 53, 248, 130, 247, 83, 53, 248, 130, 237, 39, 53, 239, 232, - 247, 83, 22, 237, 39, 53, 237, 39, 22, 247, 83, 53, 237, 39, 2, 195, 53, - 237, 39, 2, 195, 22, 237, 39, 22, 247, 83, 53, 61, 237, 39, 2, 195, 53, - 169, 237, 39, 2, 195, 53, 236, 228, 63, 251, 106, 236, 228, 86, 251, 106, - 236, 228, 3, 63, 251, 106, 237, 12, 98, 249, 179, 98, 225, 122, 233, 173, - 98, 251, 64, 246, 214, 225, 95, 235, 146, 251, 207, 233, 225, 239, 95, - 224, 232, 251, 157, 86, 236, 85, 237, 180, 229, 155, 229, 183, 232, 63, - 229, 167, 63, 248, 117, 237, 35, 63, 248, 117, 238, 189, 86, 248, 117, - 237, 35, 86, 248, 117, 238, 189, 225, 113, 252, 146, 230, 221, 86, 230, - 221, 203, 252, 146, 230, 221, 63, 230, 221, 227, 29, 237, 141, 53, 227, - 69, 248, 115, 254, 244, 247, 218, 224, 227, 245, 146, 224, 85, 245, 146, - 203, 41, 233, 134, 233, 134, 225, 113, 41, 233, 134, 63, 235, 86, 86, - 235, 86, 251, 181, 76, 112, 251, 181, 76, 236, 52, 224, 73, 112, 236, 52, - 224, 73, 253, 48, 224, 73, 112, 253, 48, 224, 73, 234, 7, 19, 250, 243, - 112, 19, 250, 243, 234, 44, 251, 219, 250, 243, 112, 234, 44, 251, 219, - 250, 243, 7, 250, 243, 229, 135, 63, 7, 250, 243, 234, 7, 7, 250, 243, - 237, 37, 250, 243, 228, 59, 106, 250, 124, 246, 243, 227, 40, 254, 69, - 246, 243, 253, 49, 254, 69, 112, 246, 243, 253, 49, 254, 69, 246, 243, - 251, 72, 254, 69, 86, 246, 243, 232, 253, 228, 58, 63, 246, 243, 232, - 253, 228, 58, 228, 27, 234, 7, 63, 228, 58, 33, 63, 228, 58, 234, 44, - 251, 219, 86, 228, 58, 86, 251, 219, 63, 228, 58, 234, 7, 86, 228, 58, - 112, 234, 7, 86, 228, 58, 233, 36, 228, 58, 229, 135, 63, 228, 58, 112, - 254, 69, 234, 44, 251, 219, 254, 69, 248, 20, 228, 129, 254, 69, 248, 20, - 232, 253, 86, 228, 58, 248, 20, 232, 253, 233, 36, 228, 58, 228, 217, - 232, 253, 86, 228, 58, 248, 20, 232, 253, 231, 234, 86, 228, 58, 112, - 248, 20, 232, 253, 231, 234, 86, 228, 58, 225, 219, 232, 253, 86, 228, - 58, 228, 213, 232, 253, 254, 69, 227, 40, 254, 69, 234, 44, 251, 219, - 227, 40, 254, 69, 112, 227, 40, 254, 69, 228, 217, 233, 104, 86, 22, 63, - 247, 15, 86, 247, 15, 63, 247, 15, 248, 20, 233, 104, 234, 7, 86, 247, - 15, 33, 234, 44, 251, 219, 248, 20, 232, 253, 228, 58, 112, 227, 40, 233, - 36, 254, 69, 228, 172, 226, 166, 226, 73, 228, 172, 112, 251, 173, 228, - 172, 228, 142, 112, 228, 142, 253, 49, 254, 69, 248, 20, 227, 40, 232, - 192, 254, 69, 112, 248, 20, 227, 40, 232, 192, 254, 69, 229, 135, 63, - 251, 106, 203, 41, 248, 114, 63, 228, 120, 225, 113, 41, 248, 114, 63, - 228, 120, 203, 41, 229, 135, 63, 228, 120, 225, 113, 41, 229, 135, 63, - 228, 120, 86, 249, 251, 236, 121, 63, 224, 73, 157, 61, 125, 236, 228, - 61, 125, 112, 61, 125, 112, 228, 241, 209, 251, 55, 232, 57, 165, 234, - 25, 112, 228, 241, 251, 55, 232, 57, 165, 234, 25, 112, 47, 209, 251, 55, - 232, 57, 165, 234, 25, 112, 47, 251, 55, 232, 57, 165, 234, 25, 250, 217, - 228, 49, 233, 192, 5, 234, 25, 112, 247, 149, 165, 234, 25, 112, 245, - 115, 247, 149, 165, 234, 25, 112, 86, 245, 114, 231, 106, 112, 86, 245, - 115, 252, 83, 247, 16, 245, 114, 231, 106, 247, 16, 245, 115, 252, 83, - 236, 228, 42, 233, 181, 234, 25, 236, 228, 41, 233, 181, 234, 25, 236, - 228, 247, 22, 42, 233, 181, 234, 25, 236, 228, 247, 22, 41, 233, 181, - 234, 25, 236, 228, 237, 235, 254, 182, 252, 115, 234, 25, 236, 228, 231, - 151, 254, 182, 252, 115, 234, 25, 112, 237, 235, 254, 182, 232, 57, 165, - 234, 25, 112, 231, 151, 254, 182, 232, 57, 165, 234, 25, 112, 237, 235, - 254, 182, 252, 115, 234, 25, 112, 231, 151, 254, 182, 252, 115, 234, 25, - 157, 42, 226, 100, 229, 104, 252, 115, 234, 25, 157, 41, 226, 100, 229, - 104, 252, 115, 234, 25, 236, 228, 42, 250, 223, 252, 115, 234, 25, 236, - 228, 41, 250, 223, 252, 115, 234, 25, 249, 208, 235, 157, 33, 21, 118, - 249, 208, 235, 157, 33, 21, 113, 249, 208, 235, 157, 33, 21, 166, 249, - 208, 235, 157, 33, 21, 158, 249, 208, 235, 157, 33, 21, 173, 249, 208, - 235, 157, 33, 21, 183, 249, 208, 235, 157, 33, 21, 194, 249, 208, 235, - 157, 33, 21, 187, 249, 208, 235, 157, 33, 21, 192, 249, 208, 235, 157, - 33, 65, 227, 23, 249, 208, 33, 30, 21, 118, 249, 208, 33, 30, 21, 113, - 249, 208, 33, 30, 21, 166, 249, 208, 33, 30, 21, 158, 249, 208, 33, 30, - 21, 173, 249, 208, 33, 30, 21, 183, 249, 208, 33, 30, 21, 194, 249, 208, - 33, 30, 21, 187, 249, 208, 33, 30, 21, 192, 249, 208, 33, 30, 65, 227, - 23, 249, 208, 235, 157, 33, 30, 21, 118, 249, 208, 235, 157, 33, 30, 21, - 113, 249, 208, 235, 157, 33, 30, 21, 166, 249, 208, 235, 157, 33, 30, 21, - 158, 249, 208, 235, 157, 33, 30, 21, 173, 249, 208, 235, 157, 33, 30, 21, - 183, 249, 208, 235, 157, 33, 30, 21, 194, 249, 208, 235, 157, 33, 30, 21, - 187, 249, 208, 235, 157, 33, 30, 21, 192, 249, 208, 235, 157, 33, 30, 65, - 227, 23, 112, 224, 116, 81, 58, 112, 228, 152, 248, 45, 58, 112, 81, 58, - 112, 234, 245, 248, 45, 58, 248, 119, 232, 255, 81, 58, 112, 231, 103, - 81, 58, 226, 77, 81, 58, 112, 226, 77, 81, 58, 250, 129, 226, 77, 81, 58, - 112, 250, 129, 226, 77, 81, 58, 86, 81, 58, 226, 191, 226, 104, 81, 254, - 93, 226, 191, 252, 124, 81, 254, 93, 86, 81, 254, 93, 112, 86, 250, 217, - 248, 125, 22, 81, 58, 112, 86, 250, 217, 225, 106, 22, 81, 58, 228, 116, - 86, 81, 58, 112, 251, 43, 86, 81, 58, 231, 150, 63, 81, 58, 237, 234, 63, - 81, 58, 253, 65, 229, 135, 63, 81, 58, 246, 223, 229, 135, 63, 81, 58, - 112, 203, 231, 149, 63, 81, 58, 112, 225, 113, 231, 149, 63, 81, 58, 234, - 240, 203, 231, 149, 63, 81, 58, 234, 240, 225, 113, 231, 149, 63, 81, 58, - 33, 112, 63, 81, 58, 224, 120, 81, 58, 252, 149, 228, 152, 248, 45, 58, - 252, 149, 81, 58, 252, 149, 234, 245, 248, 45, 58, 112, 252, 149, 228, - 152, 248, 45, 58, 112, 252, 149, 81, 58, 112, 252, 149, 234, 245, 248, - 45, 58, 227, 42, 81, 58, 112, 227, 41, 81, 58, 224, 139, 81, 58, 112, - 224, 139, 81, 58, 234, 41, 81, 58, 152, 249, 218, 254, 181, 63, 226, 79, - 251, 27, 3, 63, 226, 78, 233, 114, 234, 44, 227, 251, 234, 44, 227, 217, - 42, 231, 34, 253, 59, 250, 52, 41, 231, 34, 253, 59, 250, 52, 145, 2, 56, - 239, 243, 231, 193, 228, 162, 232, 212, 227, 251, 227, 218, 232, 212, - 228, 161, 61, 253, 36, 2, 169, 82, 182, 249, 180, 63, 249, 251, 2, 251, - 217, 249, 140, 22, 2, 249, 140, 247, 254, 106, 234, 39, 225, 105, 203, - 41, 251, 11, 2, 249, 140, 225, 113, 42, 251, 11, 2, 249, 140, 42, 234, 9, - 239, 115, 41, 234, 9, 239, 115, 246, 218, 234, 9, 239, 115, 238, 9, 99, - 227, 96, 238, 9, 103, 227, 96, 42, 22, 41, 47, 225, 232, 42, 22, 41, 227, - 96, 42, 236, 55, 182, 41, 227, 96, 182, 42, 227, 96, 99, 227, 97, 2, 251, - 107, 46, 237, 114, 249, 185, 252, 55, 169, 231, 65, 63, 251, 42, 249, - 250, 63, 251, 42, 249, 251, 2, 117, 226, 172, 63, 251, 42, 249, 251, 2, - 81, 226, 172, 63, 37, 2, 117, 226, 172, 63, 37, 2, 81, 226, 172, 12, 42, - 63, 37, 104, 12, 41, 63, 37, 104, 12, 42, 254, 182, 104, 12, 41, 254, - 182, 104, 12, 42, 47, 254, 182, 104, 12, 41, 47, 254, 182, 104, 12, 42, - 63, 226, 100, 229, 104, 104, 12, 41, 63, 226, 100, 229, 104, 104, 12, 42, - 247, 22, 233, 180, 12, 41, 247, 22, 233, 180, 225, 106, 232, 78, 58, 248, - 125, 232, 78, 58, 254, 168, 246, 162, 251, 107, 58, 251, 84, 246, 162, - 251, 107, 58, 41, 67, 2, 33, 233, 10, 182, 117, 58, 182, 81, 58, 182, 42, - 41, 58, 182, 117, 47, 58, 182, 81, 47, 58, 182, 42, 41, 47, 58, 182, 117, - 67, 246, 224, 125, 182, 81, 67, 246, 224, 125, 182, 117, 47, 67, 246, - 224, 125, 182, 81, 47, 67, 246, 224, 125, 182, 81, 228, 115, 58, 39, 40, - 252, 144, 39, 40, 249, 137, 39, 40, 249, 9, 39, 40, 249, 136, 39, 40, - 248, 201, 39, 40, 249, 72, 39, 40, 249, 8, 39, 40, 249, 135, 39, 40, 248, - 169, 39, 40, 249, 40, 39, 40, 248, 232, 39, 40, 249, 103, 39, 40, 248, - 200, 39, 40, 249, 71, 39, 40, 249, 7, 39, 40, 249, 134, 39, 40, 248, 153, - 39, 40, 249, 24, 39, 40, 248, 216, 39, 40, 249, 87, 39, 40, 248, 184, 39, - 40, 249, 55, 39, 40, 248, 247, 39, 40, 249, 118, 39, 40, 248, 168, 39, - 40, 249, 39, 39, 40, 248, 231, 39, 40, 249, 102, 39, 40, 248, 199, 39, - 40, 249, 70, 39, 40, 249, 6, 39, 40, 249, 133, 39, 40, 248, 145, 39, 40, - 249, 16, 39, 40, 248, 208, 39, 40, 249, 79, 39, 40, 248, 176, 39, 40, - 249, 47, 39, 40, 248, 239, 39, 40, 249, 110, 39, 40, 248, 160, 39, 40, - 249, 31, 39, 40, 248, 223, 39, 40, 249, 94, 39, 40, 248, 191, 39, 40, - 249, 62, 39, 40, 248, 254, 39, 40, 249, 125, 39, 40, 248, 152, 39, 40, - 249, 23, 39, 40, 248, 215, 39, 40, 249, 86, 39, 40, 248, 183, 39, 40, - 249, 54, 39, 40, 248, 246, 39, 40, 249, 117, 39, 40, 248, 167, 39, 40, - 249, 38, 39, 40, 248, 230, 39, 40, 249, 101, 39, 40, 248, 198, 39, 40, - 249, 69, 39, 40, 249, 5, 39, 40, 249, 132, 39, 40, 248, 141, 39, 40, 249, - 12, 39, 40, 248, 204, 39, 40, 249, 75, 39, 40, 248, 172, 39, 40, 249, 43, - 39, 40, 248, 235, 39, 40, 249, 106, 39, 40, 248, 156, 39, 40, 249, 27, - 39, 40, 248, 219, 39, 40, 249, 90, 39, 40, 248, 187, 39, 40, 249, 58, 39, - 40, 248, 250, 39, 40, 249, 121, 39, 40, 248, 148, 39, 40, 249, 19, 39, - 40, 248, 211, 39, 40, 249, 82, 39, 40, 248, 179, 39, 40, 249, 50, 39, 40, - 248, 242, 39, 40, 249, 113, 39, 40, 248, 163, 39, 40, 249, 34, 39, 40, - 248, 226, 39, 40, 249, 97, 39, 40, 248, 194, 39, 40, 249, 65, 39, 40, - 249, 1, 39, 40, 249, 128, 39, 40, 248, 144, 39, 40, 249, 15, 39, 40, 248, - 207, 39, 40, 249, 78, 39, 40, 248, 175, 39, 40, 249, 46, 39, 40, 248, - 238, 39, 40, 249, 109, 39, 40, 248, 159, 39, 40, 249, 30, 39, 40, 248, - 222, 39, 40, 249, 93, 39, 40, 248, 190, 39, 40, 249, 61, 39, 40, 248, - 253, 39, 40, 249, 124, 39, 40, 248, 151, 39, 40, 249, 22, 39, 40, 248, - 214, 39, 40, 249, 85, 39, 40, 248, 182, 39, 40, 249, 53, 39, 40, 248, - 245, 39, 40, 249, 116, 39, 40, 248, 166, 39, 40, 249, 37, 39, 40, 248, - 229, 39, 40, 249, 100, 39, 40, 248, 197, 39, 40, 249, 68, 39, 40, 249, 4, - 39, 40, 249, 131, 39, 40, 248, 139, 39, 40, 249, 10, 39, 40, 248, 202, - 39, 40, 249, 73, 39, 40, 248, 170, 39, 40, 249, 41, 39, 40, 248, 233, 39, - 40, 249, 104, 39, 40, 248, 154, 39, 40, 249, 25, 39, 40, 248, 217, 39, - 40, 249, 88, 39, 40, 248, 185, 39, 40, 249, 56, 39, 40, 248, 248, 39, 40, - 249, 119, 39, 40, 248, 146, 39, 40, 249, 17, 39, 40, 248, 209, 39, 40, - 249, 80, 39, 40, 248, 177, 39, 40, 249, 48, 39, 40, 248, 240, 39, 40, - 249, 111, 39, 40, 248, 161, 39, 40, 249, 32, 39, 40, 248, 224, 39, 40, - 249, 95, 39, 40, 248, 192, 39, 40, 249, 63, 39, 40, 248, 255, 39, 40, - 249, 126, 39, 40, 248, 142, 39, 40, 249, 13, 39, 40, 248, 205, 39, 40, - 249, 76, 39, 40, 248, 173, 39, 40, 249, 44, 39, 40, 248, 236, 39, 40, - 249, 107, 39, 40, 248, 157, 39, 40, 249, 28, 39, 40, 248, 220, 39, 40, - 249, 91, 39, 40, 248, 188, 39, 40, 249, 59, 39, 40, 248, 251, 39, 40, - 249, 122, 39, 40, 248, 149, 39, 40, 249, 20, 39, 40, 248, 212, 39, 40, - 249, 83, 39, 40, 248, 180, 39, 40, 249, 51, 39, 40, 248, 243, 39, 40, - 249, 114, 39, 40, 248, 164, 39, 40, 249, 35, 39, 40, 248, 227, 39, 40, - 249, 98, 39, 40, 248, 195, 39, 40, 249, 66, 39, 40, 249, 2, 39, 40, 249, - 129, 39, 40, 248, 140, 39, 40, 249, 11, 39, 40, 248, 203, 39, 40, 249, - 74, 39, 40, 248, 171, 39, 40, 249, 42, 39, 40, 248, 234, 39, 40, 249, - 105, 39, 40, 248, 155, 39, 40, 249, 26, 39, 40, 248, 218, 39, 40, 249, - 89, 39, 40, 248, 186, 39, 40, 249, 57, 39, 40, 248, 249, 39, 40, 249, - 120, 39, 40, 248, 147, 39, 40, 249, 18, 39, 40, 248, 210, 39, 40, 249, - 81, 39, 40, 248, 178, 39, 40, 249, 49, 39, 40, 248, 241, 39, 40, 249, - 112, 39, 40, 248, 162, 39, 40, 249, 33, 39, 40, 248, 225, 39, 40, 249, - 96, 39, 40, 248, 193, 39, 40, 249, 64, 39, 40, 249, 0, 39, 40, 249, 127, - 39, 40, 248, 143, 39, 40, 249, 14, 39, 40, 248, 206, 39, 40, 249, 77, 39, - 40, 248, 174, 39, 40, 249, 45, 39, 40, 248, 237, 39, 40, 249, 108, 39, - 40, 248, 158, 39, 40, 249, 29, 39, 40, 248, 221, 39, 40, 249, 92, 39, 40, - 248, 189, 39, 40, 249, 60, 39, 40, 248, 252, 39, 40, 249, 123, 39, 40, - 248, 150, 39, 40, 249, 21, 39, 40, 248, 213, 39, 40, 249, 84, 39, 40, - 248, 181, 39, 40, 249, 52, 39, 40, 248, 244, 39, 40, 249, 115, 39, 40, - 248, 165, 39, 40, 249, 36, 39, 40, 248, 228, 39, 40, 249, 99, 39, 40, - 248, 196, 39, 40, 249, 67, 39, 40, 249, 3, 39, 40, 249, 130, 81, 225, - 203, 67, 2, 61, 82, 81, 225, 203, 67, 2, 47, 61, 82, 117, 47, 67, 2, 61, - 82, 81, 47, 67, 2, 61, 82, 42, 41, 47, 67, 2, 61, 82, 81, 225, 203, 67, - 246, 224, 125, 117, 47, 67, 246, 224, 125, 81, 47, 67, 246, 224, 125, - 248, 125, 67, 2, 169, 82, 225, 106, 67, 2, 169, 82, 225, 106, 226, 66, - 58, 248, 125, 226, 66, 58, 117, 47, 250, 131, 58, 81, 47, 250, 131, 58, - 117, 226, 66, 250, 131, 58, 81, 226, 66, 250, 131, 58, 81, 225, 203, 226, - 66, 250, 131, 58, 81, 67, 2, 248, 138, 228, 48, 225, 106, 67, 180, 125, - 248, 125, 67, 180, 125, 81, 67, 2, 227, 90, 2, 61, 82, 81, 67, 2, 227, - 90, 2, 47, 61, 82, 81, 225, 203, 67, 2, 227, 89, 81, 225, 203, 67, 2, - 227, 90, 2, 61, 82, 81, 225, 203, 67, 2, 227, 90, 2, 47, 61, 82, 117, - 254, 95, 81, 254, 95, 117, 47, 254, 95, 81, 47, 254, 95, 117, 67, 180, - 86, 249, 250, 81, 67, 180, 86, 249, 250, 117, 67, 246, 224, 253, 36, 180, - 86, 249, 250, 81, 67, 246, 224, 253, 36, 180, 86, 249, 250, 234, 245, - 224, 131, 22, 228, 152, 248, 45, 58, 234, 245, 248, 45, 22, 228, 152, - 224, 131, 58, 234, 245, 224, 131, 67, 2, 88, 234, 245, 248, 45, 67, 2, - 88, 228, 152, 248, 45, 67, 2, 88, 228, 152, 224, 131, 67, 2, 88, 234, - 245, 224, 131, 67, 22, 234, 245, 248, 45, 58, 234, 245, 248, 45, 67, 22, - 228, 152, 248, 45, 58, 228, 152, 248, 45, 67, 22, 228, 152, 224, 131, 58, - 228, 152, 224, 131, 67, 22, 234, 245, 224, 131, 58, 231, 135, 250, 1, - 250, 238, 247, 113, 250, 0, 247, 113, 250, 1, 250, 238, 231, 135, 250, 0, - 228, 152, 248, 45, 67, 250, 238, 234, 245, 248, 45, 58, 234, 245, 248, - 45, 67, 250, 238, 228, 152, 248, 45, 58, 247, 113, 250, 1, 250, 238, 234, - 245, 248, 45, 58, 231, 135, 250, 1, 250, 238, 228, 152, 248, 45, 58, 234, - 245, 248, 45, 67, 250, 238, 234, 245, 224, 131, 58, 234, 245, 224, 131, - 67, 250, 238, 234, 245, 248, 45, 58, 224, 148, 67, 232, 251, 249, 199, - 231, 153, 67, 232, 251, 81, 226, 232, 250, 216, 225, 105, 67, 232, 251, - 81, 226, 232, 250, 216, 248, 124, 67, 232, 251, 248, 125, 226, 232, 250, - 216, 237, 230, 67, 232, 251, 248, 125, 226, 232, 250, 216, 231, 145, 231, - 148, 254, 123, 251, 84, 58, 237, 233, 254, 123, 254, 168, 58, 226, 106, - 254, 123, 254, 168, 58, 252, 126, 254, 123, 254, 168, 58, 226, 106, 254, - 123, 251, 84, 67, 2, 236, 120, 226, 106, 254, 123, 254, 168, 67, 2, 233, - 10, 203, 41, 229, 188, 251, 84, 58, 203, 42, 229, 188, 254, 168, 58, 254, - 168, 251, 82, 251, 107, 58, 251, 84, 251, 82, 251, 107, 58, 81, 67, 64, - 229, 63, 117, 58, 117, 67, 64, 229, 63, 81, 58, 229, 63, 81, 67, 64, 117, - 58, 81, 67, 2, 79, 51, 117, 67, 2, 79, 51, 81, 67, 226, 188, 224, 73, 42, - 41, 67, 226, 188, 3, 251, 106, 225, 106, 225, 203, 67, 246, 224, 3, 251, - 106, 42, 171, 99, 41, 171, 103, 245, 135, 42, 171, 103, 41, 171, 99, 245, - 135, 99, 171, 41, 103, 171, 42, 245, 135, 99, 171, 42, 103, 171, 41, 245, - 135, 42, 171, 99, 41, 171, 99, 245, 135, 99, 171, 41, 103, 171, 41, 245, - 135, 42, 171, 103, 41, 171, 103, 245, 135, 99, 171, 42, 103, 171, 42, - 245, 135, 117, 245, 136, 2, 171, 99, 180, 125, 81, 245, 136, 2, 171, 99, - 180, 125, 225, 106, 245, 136, 2, 171, 41, 180, 125, 248, 125, 245, 136, - 2, 171, 41, 180, 125, 117, 245, 136, 2, 171, 103, 180, 125, 81, 245, 136, - 2, 171, 103, 180, 125, 225, 106, 245, 136, 2, 171, 42, 180, 125, 248, - 125, 245, 136, 2, 171, 42, 180, 125, 117, 245, 136, 2, 171, 99, 246, 224, - 125, 81, 245, 136, 2, 171, 99, 246, 224, 125, 225, 106, 245, 136, 2, 171, - 41, 246, 224, 125, 248, 125, 245, 136, 2, 171, 41, 246, 224, 125, 117, - 245, 136, 2, 171, 103, 246, 224, 125, 81, 245, 136, 2, 171, 103, 246, - 224, 125, 225, 106, 245, 136, 2, 171, 42, 246, 224, 125, 248, 125, 245, - 136, 2, 171, 42, 246, 224, 125, 117, 245, 136, 2, 171, 99, 64, 117, 245, - 136, 2, 171, 248, 127, 225, 106, 245, 136, 2, 171, 42, 252, 202, 225, - 106, 245, 136, 2, 171, 231, 153, 81, 245, 136, 2, 171, 99, 64, 81, 245, - 136, 2, 171, 248, 127, 248, 125, 245, 136, 2, 171, 42, 252, 202, 248, - 125, 245, 136, 2, 171, 231, 153, 117, 245, 136, 2, 171, 99, 64, 81, 245, - 136, 2, 171, 225, 116, 117, 245, 136, 2, 171, 103, 64, 81, 245, 136, 2, - 171, 248, 127, 81, 245, 136, 2, 171, 99, 64, 117, 245, 136, 2, 171, 225, - 116, 81, 245, 136, 2, 171, 103, 64, 117, 245, 136, 2, 171, 248, 127, 117, - 245, 136, 2, 171, 99, 64, 182, 250, 130, 117, 245, 136, 2, 171, 103, 252, - 214, 182, 250, 130, 81, 245, 136, 2, 171, 99, 64, 182, 250, 130, 81, 245, - 136, 2, 171, 103, 252, 214, 182, 250, 130, 225, 106, 245, 136, 2, 171, - 42, 252, 202, 248, 125, 245, 136, 2, 171, 231, 153, 248, 125, 245, 136, - 2, 171, 42, 252, 202, 225, 106, 245, 136, 2, 171, 231, 153, 41, 47, 67, - 2, 231, 102, 245, 118, 247, 204, 5, 64, 81, 58, 226, 159, 234, 38, 64, - 81, 58, 117, 67, 64, 226, 159, 234, 37, 81, 67, 64, 226, 159, 234, 37, - 81, 67, 64, 254, 210, 105, 96, 237, 213, 64, 117, 58, 117, 67, 226, 188, - 237, 212, 245, 231, 64, 81, 58, 227, 252, 64, 81, 58, 117, 67, 226, 188, - 227, 251, 227, 218, 64, 117, 58, 42, 247, 44, 227, 89, 41, 247, 44, 227, - 89, 99, 247, 44, 227, 89, 103, 247, 44, 227, 89, 226, 66, 61, 253, 36, - 250, 52, 223, 120, 150, 228, 127, 223, 120, 150, 225, 196, 251, 61, 42, - 63, 250, 223, 104, 41, 63, 250, 223, 104, 42, 63, 233, 180, 41, 63, 233, - 180, 223, 120, 150, 42, 240, 29, 104, 223, 120, 150, 41, 240, 29, 104, - 223, 120, 150, 42, 252, 168, 104, 223, 120, 150, 41, 252, 168, 104, 42, - 37, 252, 115, 2, 225, 133, 41, 37, 252, 115, 2, 225, 133, 42, 37, 252, - 115, 2, 226, 173, 240, 17, 226, 106, 251, 10, 41, 37, 252, 115, 2, 226, - 173, 240, 17, 252, 126, 251, 10, 42, 37, 252, 115, 2, 226, 173, 240, 17, - 252, 126, 251, 10, 41, 37, 252, 115, 2, 226, 173, 240, 17, 226, 106, 251, - 10, 42, 254, 182, 252, 115, 2, 249, 140, 41, 254, 182, 252, 115, 2, 249, - 140, 42, 254, 123, 237, 213, 104, 41, 254, 123, 245, 231, 104, 47, 42, - 254, 123, 245, 231, 104, 47, 41, 254, 123, 237, 213, 104, 42, 86, 226, - 100, 229, 104, 104, 41, 86, 226, 100, 229, 104, 104, 248, 138, 247, 80, - 61, 223, 38, 237, 170, 236, 232, 254, 182, 234, 39, 237, 237, 41, 254, - 182, 225, 54, 2, 228, 120, 236, 232, 41, 254, 182, 2, 249, 140, 254, 182, - 2, 231, 35, 239, 243, 255, 33, 254, 181, 228, 137, 254, 182, 234, 39, - 237, 237, 228, 137, 254, 182, 234, 39, 225, 116, 209, 254, 181, 200, 254, - 181, 254, 182, 2, 225, 133, 200, 254, 182, 2, 225, 133, 234, 97, 254, - 182, 234, 39, 225, 116, 234, 97, 254, 182, 234, 39, 248, 127, 236, 232, - 254, 182, 2, 234, 44, 254, 105, 247, 230, 240, 17, 67, 232, 251, 99, 22, - 231, 153, 236, 232, 254, 182, 2, 234, 44, 254, 105, 247, 230, 240, 17, - 67, 232, 251, 99, 22, 237, 237, 236, 232, 254, 182, 2, 234, 44, 254, 105, - 247, 230, 240, 17, 67, 232, 251, 103, 22, 231, 153, 236, 232, 254, 182, - 2, 234, 44, 254, 105, 247, 230, 240, 17, 67, 232, 251, 103, 22, 237, 237, - 236, 232, 254, 182, 2, 234, 44, 254, 105, 247, 230, 240, 17, 67, 232, - 251, 41, 22, 225, 116, 236, 232, 254, 182, 2, 234, 44, 254, 105, 247, - 230, 240, 17, 67, 232, 251, 42, 22, 225, 116, 236, 232, 254, 182, 2, 234, - 44, 254, 105, 247, 230, 240, 17, 67, 232, 251, 41, 22, 248, 127, 236, - 232, 254, 182, 2, 234, 44, 254, 105, 247, 230, 240, 17, 67, 232, 251, 42, - 22, 248, 127, 200, 247, 241, 229, 164, 247, 241, 229, 165, 2, 234, 5, - 247, 241, 229, 165, 2, 3, 251, 107, 46, 247, 241, 229, 165, 2, 41, 67, - 46, 247, 241, 229, 165, 2, 42, 67, 46, 251, 107, 2, 169, 125, 33, 61, - 125, 33, 233, 184, 33, 231, 193, 228, 161, 33, 233, 114, 251, 107, 249, - 185, 252, 55, 169, 253, 36, 22, 226, 106, 132, 249, 185, 252, 55, 61, - 125, 251, 107, 2, 227, 220, 224, 73, 33, 254, 167, 249, 181, 53, 99, 67, - 226, 188, 251, 106, 33, 63, 252, 83, 33, 252, 83, 33, 237, 212, 33, 245, - 230, 251, 107, 2, 3, 251, 107, 180, 226, 240, 231, 153, 251, 107, 2, 135, - 169, 228, 11, 180, 226, 240, 231, 153, 228, 119, 231, 135, 250, 1, 228, - 194, 228, 119, 247, 113, 250, 1, 228, 194, 228, 119, 254, 69, 228, 119, - 3, 251, 106, 228, 119, 228, 120, 135, 239, 114, 228, 117, 226, 79, 2, 56, - 46, 226, 79, 2, 225, 133, 231, 35, 240, 17, 226, 78, 226, 79, 2, 229, - 171, 254, 63, 252, 125, 41, 226, 79, 64, 42, 226, 78, 42, 226, 79, 252, - 202, 61, 125, 61, 253, 36, 252, 202, 41, 226, 78, 252, 120, 2, 42, 132, - 252, 150, 252, 120, 2, 41, 132, 252, 150, 86, 252, 119, 24, 2, 42, 132, - 252, 150, 24, 2, 41, 132, 252, 150, 63, 244, 154, 86, 244, 154, 42, 224, - 114, 247, 80, 41, 224, 114, 247, 80, 42, 47, 224, 114, 247, 80, 41, 47, - 224, 114, 247, 80, 240, 13, 240, 3, 226, 171, 107, 240, 3, 240, 4, 235, - 159, 2, 61, 125, 248, 132, 236, 55, 37, 2, 251, 21, 234, 8, 240, 11, 254, - 86, 229, 39, 232, 200, 247, 204, 5, 22, 228, 196, 233, 184, 247, 204, 5, - 22, 228, 196, 233, 185, 2, 226, 159, 46, 244, 63, 180, 22, 228, 196, 233, - 184, 246, 18, 228, 57, 226, 229, 248, 126, 226, 79, 2, 42, 132, 252, 150, - 248, 126, 226, 79, 2, 41, 132, 252, 150, 86, 249, 251, 2, 103, 58, 86, - 237, 113, 63, 251, 107, 2, 103, 58, 86, 251, 107, 2, 103, 58, 247, 191, - 63, 228, 120, 247, 191, 86, 228, 120, 247, 191, 63, 249, 250, 247, 191, - 86, 249, 250, 247, 191, 63, 251, 106, 247, 191, 86, 251, 106, 231, 64, - 231, 193, 228, 162, 234, 37, 228, 162, 2, 234, 5, 231, 193, 228, 162, 2, - 169, 82, 252, 173, 228, 161, 252, 173, 231, 193, 228, 161, 47, 233, 10, - 226, 66, 233, 10, 237, 235, 250, 217, 254, 182, 104, 231, 151, 250, 217, - 254, 182, 104, 226, 152, 236, 118, 236, 4, 33, 56, 234, 37, 236, 4, 33, - 79, 234, 37, 236, 4, 33, 24, 234, 37, 236, 4, 225, 128, 234, 38, 2, 249, - 140, 236, 4, 225, 128, 234, 38, 2, 233, 10, 236, 4, 37, 239, 228, 234, - 37, 236, 4, 37, 225, 128, 234, 37, 135, 237, 138, 22, 234, 37, 135, 237, - 138, 145, 234, 37, 236, 4, 24, 234, 37, 236, 98, 135, 227, 233, 227, 231, - 2, 239, 239, 232, 78, 239, 240, 234, 37, 247, 48, 233, 176, 239, 239, - 239, 240, 2, 47, 82, 239, 240, 254, 38, 2, 228, 194, 251, 103, 246, 215, - 254, 168, 239, 237, 237, 171, 239, 238, 2, 231, 235, 233, 164, 254, 102, - 232, 247, 237, 171, 239, 238, 2, 229, 188, 233, 164, 254, 102, 232, 247, - 237, 171, 239, 238, 190, 240, 14, 226, 240, 232, 247, 239, 240, 254, 102, - 102, 232, 255, 234, 37, 232, 73, 239, 240, 234, 37, 239, 240, 2, 117, 67, - 2, 88, 239, 240, 2, 24, 53, 239, 240, 2, 239, 227, 239, 240, 2, 225, 127, - 239, 240, 2, 234, 5, 239, 240, 2, 225, 133, 239, 115, 238, 9, 42, 226, - 79, 234, 37, 223, 120, 150, 230, 225, 251, 45, 223, 120, 150, 230, 225, - 233, 34, 223, 120, 150, 230, 225, 232, 197, 79, 5, 2, 3, 251, 107, 46, - 79, 5, 2, 251, 102, 255, 42, 46, 79, 5, 2, 226, 159, 46, 79, 5, 2, 56, - 51, 79, 5, 2, 226, 159, 51, 79, 5, 2, 227, 253, 113, 79, 5, 2, 86, 226, - 78, 236, 121, 5, 2, 251, 55, 46, 236, 121, 5, 2, 56, 51, 236, 121, 5, 2, - 247, 113, 249, 138, 236, 121, 5, 2, 231, 135, 249, 138, 79, 5, 240, 17, - 42, 132, 251, 106, 79, 5, 240, 17, 41, 132, 251, 106, 225, 41, 145, 250, - 244, 232, 200, 236, 52, 5, 2, 56, 46, 236, 52, 5, 2, 225, 133, 229, 185, - 232, 201, 2, 252, 126, 251, 81, 228, 182, 232, 200, 236, 52, 5, 240, 17, - 42, 132, 251, 106, 236, 52, 5, 240, 17, 41, 132, 251, 106, 33, 236, 52, - 5, 2, 251, 102, 255, 41, 236, 52, 5, 240, 17, 47, 251, 106, 33, 249, 181, - 53, 79, 5, 240, 17, 226, 78, 236, 121, 5, 240, 17, 226, 78, 236, 52, 5, - 240, 17, 226, 78, 239, 234, 232, 200, 231, 146, 239, 234, 232, 200, 223, - 120, 150, 231, 220, 251, 45, 254, 198, 145, 251, 15, 239, 228, 2, 249, - 140, 225, 128, 2, 236, 121, 53, 225, 128, 2, 234, 5, 239, 228, 2, 234, 5, - 239, 228, 2, 237, 138, 254, 186, 225, 128, 2, 237, 138, 234, 31, 225, - 128, 64, 239, 227, 239, 228, 64, 225, 127, 225, 128, 64, 253, 36, 64, - 239, 227, 239, 228, 64, 253, 36, 64, 225, 127, 225, 128, 252, 202, 22, - 239, 114, 2, 225, 127, 239, 228, 252, 202, 22, 239, 114, 2, 239, 227, - 251, 82, 225, 128, 2, 229, 170, 251, 82, 239, 228, 2, 229, 170, 47, 37, - 239, 227, 47, 37, 225, 127, 251, 82, 225, 128, 2, 229, 171, 22, 228, 182, - 232, 200, 237, 138, 22, 2, 56, 46, 237, 138, 145, 2, 56, 46, 47, 237, - 138, 254, 186, 47, 237, 138, 234, 31, 135, 239, 229, 237, 138, 254, 186, - 135, 239, 229, 237, 138, 234, 31, 228, 188, 238, 9, 234, 31, 228, 188, - 238, 9, 254, 186, 237, 138, 145, 234, 3, 237, 138, 254, 186, 237, 138, - 22, 2, 236, 154, 228, 48, 237, 138, 145, 2, 236, 154, 228, 48, 237, 138, - 22, 2, 169, 250, 130, 237, 138, 145, 2, 169, 250, 130, 237, 138, 22, 2, - 47, 234, 5, 237, 138, 22, 2, 225, 133, 237, 138, 22, 2, 47, 225, 133, 3, - 225, 39, 2, 225, 133, 237, 138, 145, 2, 47, 234, 5, 237, 138, 145, 2, 47, - 225, 133, 223, 120, 150, 249, 149, 254, 163, 223, 120, 150, 232, 2, 254, - 163, 247, 204, 5, 2, 56, 51, 244, 63, 2, 56, 46, 226, 66, 169, 253, 36, - 2, 47, 61, 82, 226, 66, 169, 253, 36, 2, 226, 66, 61, 82, 226, 159, 234, - 38, 2, 56, 46, 226, 159, 234, 38, 2, 231, 135, 249, 138, 228, 247, 236, - 121, 228, 246, 251, 39, 2, 56, 46, 247, 204, 2, 254, 69, 254, 210, 105, - 180, 2, 251, 102, 255, 41, 254, 137, 105, 145, 105, 96, 247, 204, 5, 64, - 79, 53, 79, 5, 64, 247, 204, 53, 247, 204, 5, 64, 226, 159, 234, 37, 47, - 251, 62, 247, 205, 135, 251, 34, 247, 204, 229, 1, 152, 251, 34, 247, - 204, 229, 1, 247, 204, 5, 2, 135, 197, 64, 22, 135, 197, 51, 247, 200, 2, - 246, 243, 197, 46, 237, 213, 2, 251, 107, 239, 243, 245, 231, 2, 251, - 107, 239, 243, 237, 213, 2, 232, 69, 165, 46, 245, 231, 2, 232, 69, 165, - 46, 237, 213, 145, 228, 196, 105, 96, 245, 231, 145, 228, 196, 105, 96, - 237, 213, 145, 228, 196, 105, 180, 2, 56, 239, 243, 245, 231, 145, 228, - 196, 105, 180, 2, 56, 239, 243, 237, 213, 145, 228, 196, 105, 180, 2, 56, - 46, 245, 231, 145, 228, 196, 105, 180, 2, 56, 46, 237, 213, 145, 228, - 196, 105, 180, 2, 56, 64, 231, 153, 245, 231, 145, 228, 196, 105, 180, 2, - 56, 64, 237, 237, 237, 213, 145, 254, 138, 245, 231, 145, 254, 138, 237, - 213, 22, 228, 239, 190, 105, 96, 245, 231, 22, 228, 239, 190, 105, 96, - 237, 213, 22, 190, 254, 138, 245, 231, 22, 190, 254, 138, 237, 213, 64, - 248, 131, 105, 64, 245, 230, 245, 231, 64, 248, 131, 105, 64, 237, 212, - 237, 213, 64, 228, 247, 145, 247, 205, 245, 231, 64, 228, 247, 145, 247, - 205, 237, 213, 64, 228, 247, 64, 245, 230, 245, 231, 64, 228, 247, 64, - 237, 212, 237, 213, 64, 245, 231, 64, 248, 131, 247, 205, 245, 231, 64, - 237, 213, 64, 248, 131, 247, 205, 237, 213, 64, 228, 196, 105, 64, 245, - 231, 64, 228, 196, 247, 205, 245, 231, 64, 228, 196, 105, 64, 237, 213, - 64, 228, 196, 247, 205, 228, 196, 105, 180, 145, 237, 212, 228, 196, 105, - 180, 145, 245, 230, 228, 196, 105, 180, 145, 237, 213, 2, 56, 239, 243, - 228, 196, 105, 180, 145, 245, 231, 2, 56, 239, 243, 248, 131, 105, 180, - 145, 237, 212, 248, 131, 105, 180, 145, 245, 230, 248, 131, 228, 196, - 105, 180, 145, 237, 212, 248, 131, 228, 196, 105, 180, 145, 245, 230, - 228, 247, 145, 237, 212, 228, 247, 145, 245, 230, 228, 247, 64, 237, 213, - 64, 247, 204, 53, 228, 247, 64, 245, 231, 64, 247, 204, 53, 47, 235, 149, - 237, 212, 47, 235, 149, 245, 230, 47, 235, 149, 237, 213, 2, 225, 133, - 245, 231, 234, 3, 237, 212, 245, 231, 252, 202, 237, 212, 237, 213, 251, - 82, 252, 55, 250, 218, 245, 231, 251, 82, 252, 55, 250, 218, 237, 213, - 251, 82, 252, 55, 250, 219, 64, 228, 196, 247, 205, 245, 231, 251, 82, - 252, 55, 250, 219, 64, 228, 196, 247, 205, 228, 183, 226, 243, 238, 8, - 226, 243, 228, 183, 226, 244, 145, 105, 96, 238, 8, 226, 244, 145, 105, - 96, 247, 204, 5, 2, 252, 78, 46, 232, 214, 64, 228, 239, 247, 204, 53, - 227, 244, 64, 228, 239, 247, 204, 53, 232, 214, 64, 228, 239, 190, 105, - 96, 227, 244, 64, 228, 239, 190, 105, 96, 232, 214, 64, 247, 204, 53, - 227, 244, 64, 247, 204, 53, 232, 214, 64, 190, 105, 96, 227, 244, 64, - 190, 105, 96, 232, 214, 64, 254, 210, 105, 96, 227, 244, 64, 254, 210, - 105, 96, 232, 214, 64, 190, 254, 210, 105, 96, 227, 244, 64, 190, 254, - 210, 105, 96, 47, 232, 213, 47, 227, 243, 227, 252, 2, 249, 140, 227, - 218, 2, 249, 140, 227, 252, 2, 79, 5, 51, 227, 218, 2, 79, 5, 51, 227, - 252, 2, 236, 52, 5, 51, 227, 218, 2, 236, 52, 5, 51, 227, 252, 106, 145, - 105, 180, 2, 56, 46, 227, 218, 106, 145, 105, 180, 2, 56, 46, 227, 252, - 106, 64, 247, 204, 53, 227, 218, 106, 64, 247, 204, 53, 227, 252, 106, - 64, 226, 159, 234, 37, 227, 218, 106, 64, 226, 159, 234, 37, 227, 252, - 106, 64, 254, 210, 105, 96, 227, 218, 106, 64, 254, 210, 105, 96, 227, - 252, 106, 64, 190, 105, 96, 227, 218, 106, 64, 190, 105, 96, 37, 42, 234, - 44, 77, 234, 37, 37, 41, 234, 44, 77, 234, 37, 251, 82, 227, 251, 251, - 82, 227, 217, 251, 82, 227, 252, 145, 105, 96, 251, 82, 227, 218, 145, - 105, 96, 227, 252, 64, 227, 217, 227, 218, 64, 227, 251, 227, 252, 64, - 227, 251, 227, 218, 64, 227, 217, 227, 218, 252, 202, 227, 251, 227, 218, - 252, 202, 22, 239, 114, 252, 55, 250, 131, 2, 227, 251, 247, 254, 106, - 234, 39, 248, 124, 233, 29, 2, 227, 38, 226, 105, 226, 90, 239, 227, 246, - 250, 234, 254, 229, 63, 42, 227, 96, 229, 63, 103, 227, 96, 229, 63, 99, - 227, 96, 233, 115, 2, 193, 61, 253, 36, 226, 66, 41, 225, 232, 47, 61, - 253, 36, 42, 225, 232, 61, 253, 36, 47, 42, 225, 232, 47, 61, 253, 36, - 47, 42, 225, 232, 182, 250, 131, 246, 224, 42, 236, 214, 106, 47, 225, - 30, 229, 63, 103, 227, 97, 2, 234, 5, 229, 63, 99, 227, 97, 2, 225, 133, - 229, 63, 99, 227, 97, 64, 229, 63, 103, 227, 96, 47, 103, 227, 96, 47, - 99, 227, 96, 47, 195, 190, 53, 200, 47, 195, 190, 53, 249, 154, 190, 249, - 187, 2, 200, 235, 158, 228, 194, 61, 237, 171, 2, 251, 107, 46, 61, 237, - 171, 2, 251, 107, 51, 103, 227, 97, 2, 251, 107, 51, 233, 185, 2, 169, - 82, 233, 185, 2, 226, 159, 234, 37, 226, 66, 61, 253, 36, 252, 170, 231, - 221, 226, 66, 61, 253, 36, 2, 169, 82, 226, 66, 251, 62, 234, 37, 226, - 66, 235, 149, 237, 212, 226, 66, 235, 149, 245, 230, 248, 131, 228, 196, - 237, 213, 145, 105, 96, 248, 131, 228, 196, 245, 231, 145, 105, 96, 226, - 66, 228, 162, 252, 170, 231, 221, 238, 9, 226, 66, 61, 253, 36, 234, 37, - 47, 228, 162, 234, 37, 63, 61, 125, 236, 4, 63, 61, 125, 234, 245, 248, - 45, 63, 58, 234, 245, 224, 131, 63, 58, 228, 152, 248, 45, 63, 58, 228, - 152, 224, 131, 63, 58, 42, 41, 63, 58, 117, 86, 58, 225, 106, 86, 58, - 248, 125, 86, 58, 234, 245, 248, 45, 86, 58, 234, 245, 224, 131, 86, 58, - 228, 152, 248, 45, 86, 58, 228, 152, 224, 131, 86, 58, 42, 41, 86, 58, - 99, 103, 86, 58, 81, 67, 2, 226, 151, 248, 124, 81, 67, 2, 226, 151, 225, - 105, 117, 67, 2, 226, 151, 248, 124, 117, 67, 2, 226, 151, 225, 105, 37, - 2, 226, 106, 132, 252, 150, 37, 2, 252, 126, 132, 252, 150, 37, 2, 225, - 113, 41, 250, 1, 132, 252, 150, 37, 2, 203, 42, 250, 1, 132, 252, 150, - 249, 251, 2, 42, 132, 252, 150, 249, 251, 2, 41, 132, 252, 150, 249, 251, - 2, 226, 106, 132, 252, 150, 249, 251, 2, 252, 126, 132, 252, 150, 248, - 138, 228, 120, 86, 238, 9, 228, 120, 63, 238, 9, 228, 120, 86, 224, 234, - 3, 228, 120, 63, 224, 234, 3, 228, 120, 86, 233, 129, 63, 233, 129, 63, - 245, 86, 86, 245, 86, 169, 86, 245, 86, 86, 238, 9, 251, 106, 86, 236, - 228, 249, 250, 63, 236, 228, 249, 250, 86, 236, 228, 237, 113, 63, 236, - 228, 237, 113, 86, 3, 249, 250, 86, 3, 237, 113, 63, 3, 237, 113, 86, - 169, 247, 250, 63, 169, 247, 250, 86, 61, 247, 250, 63, 61, 247, 250, 42, - 67, 2, 3, 251, 106, 152, 117, 254, 92, 42, 67, 2, 33, 233, 10, 182, 117, - 228, 115, 58, 117, 225, 203, 67, 2, 61, 82, 117, 225, 203, 67, 2, 47, 61, - 82, 117, 225, 203, 67, 246, 224, 125, 117, 225, 203, 226, 66, 250, 131, - 58, 117, 67, 2, 248, 138, 228, 48, 117, 67, 2, 227, 90, 2, 61, 82, 117, - 67, 2, 227, 90, 2, 47, 61, 82, 117, 225, 203, 67, 2, 227, 89, 117, 225, - 203, 67, 2, 227, 90, 2, 61, 82, 117, 225, 203, 67, 2, 227, 90, 2, 47, 61, - 82, 117, 67, 226, 188, 224, 73, 224, 148, 67, 232, 251, 249, 199, 237, - 237, 247, 204, 5, 64, 117, 58, 231, 193, 226, 159, 234, 38, 64, 117, 58, - 117, 67, 64, 231, 193, 254, 210, 105, 96, 81, 67, 226, 188, 245, 230, 81, - 67, 226, 188, 227, 217, 117, 232, 78, 58, 81, 232, 78, 58, 231, 193, 226, - 159, 234, 38, 64, 81, 58, 81, 67, 64, 231, 193, 254, 210, 105, 96, 226, - 159, 234, 38, 64, 117, 58, 117, 67, 64, 254, 210, 105, 96, 117, 67, 64, - 231, 193, 226, 159, 234, 37, 81, 67, 64, 231, 193, 226, 159, 234, 37, 63, - 236, 228, 228, 58, 86, 3, 228, 58, 63, 3, 228, 58, 86, 231, 151, 233, - 129, 63, 231, 151, 233, 129, 115, 6, 1, 254, 28, 115, 6, 1, 252, 86, 115, - 6, 1, 225, 40, 115, 6, 1, 246, 19, 115, 6, 1, 249, 156, 115, 6, 1, 223, - 209, 115, 6, 1, 223, 71, 115, 6, 1, 248, 67, 115, 6, 1, 223, 94, 115, 6, - 1, 239, 186, 115, 6, 1, 59, 239, 186, 115, 6, 1, 74, 115, 6, 1, 249, 174, - 115, 6, 1, 239, 51, 115, 6, 1, 237, 150, 115, 6, 1, 236, 8, 115, 6, 1, - 235, 227, 115, 6, 1, 234, 54, 115, 6, 1, 232, 249, 115, 6, 1, 231, 134, - 115, 6, 1, 228, 187, 115, 6, 1, 225, 223, 115, 6, 1, 225, 149, 115, 6, 1, - 246, 226, 115, 6, 1, 245, 92, 115, 6, 1, 234, 14, 115, 6, 1, 233, 151, - 115, 6, 1, 229, 46, 115, 6, 1, 226, 29, 115, 6, 1, 251, 142, 115, 6, 1, - 229, 146, 115, 6, 1, 223, 213, 115, 6, 1, 223, 215, 115, 6, 1, 223, 237, - 115, 6, 1, 228, 135, 154, 115, 6, 1, 223, 158, 115, 6, 1, 3, 223, 139, - 115, 6, 1, 3, 223, 140, 2, 227, 89, 115, 6, 1, 223, 183, 115, 6, 1, 239, - 214, 3, 223, 139, 115, 6, 1, 252, 173, 223, 139, 115, 6, 1, 239, 214, - 252, 173, 223, 139, 115, 6, 1, 247, 38, 115, 6, 1, 239, 184, 115, 6, 1, - 229, 45, 115, 6, 1, 226, 58, 57, 115, 6, 1, 238, 0, 236, 8, 115, 3, 1, - 254, 28, 115, 3, 1, 252, 86, 115, 3, 1, 225, 40, 115, 3, 1, 246, 19, 115, - 3, 1, 249, 156, 115, 3, 1, 223, 209, 115, 3, 1, 223, 71, 115, 3, 1, 248, - 67, 115, 3, 1, 223, 94, 115, 3, 1, 239, 186, 115, 3, 1, 59, 239, 186, - 115, 3, 1, 74, 115, 3, 1, 249, 174, 115, 3, 1, 239, 51, 115, 3, 1, 237, - 150, 115, 3, 1, 236, 8, 115, 3, 1, 235, 227, 115, 3, 1, 234, 54, 115, 3, - 1, 232, 249, 115, 3, 1, 231, 134, 115, 3, 1, 228, 187, 115, 3, 1, 225, - 223, 115, 3, 1, 225, 149, 115, 3, 1, 246, 226, 115, 3, 1, 245, 92, 115, - 3, 1, 234, 14, 115, 3, 1, 233, 151, 115, 3, 1, 229, 46, 115, 3, 1, 226, - 29, 115, 3, 1, 251, 142, 115, 3, 1, 229, 146, 115, 3, 1, 223, 213, 115, - 3, 1, 223, 215, 115, 3, 1, 223, 237, 115, 3, 1, 228, 135, 154, 115, 3, 1, - 223, 158, 115, 3, 1, 3, 223, 139, 115, 3, 1, 3, 223, 140, 2, 227, 89, - 115, 3, 1, 223, 183, 115, 3, 1, 239, 214, 3, 223, 139, 115, 3, 1, 252, - 173, 223, 139, 115, 3, 1, 239, 214, 252, 173, 223, 139, 115, 3, 1, 247, - 38, 115, 3, 1, 239, 184, 115, 3, 1, 229, 45, 115, 3, 1, 226, 58, 57, 115, - 3, 1, 238, 0, 236, 8, 7, 6, 1, 238, 47, 2, 47, 125, 7, 3, 1, 238, 47, 2, - 47, 125, 7, 6, 1, 238, 47, 2, 236, 154, 205, 7, 6, 1, 233, 245, 2, 82, 7, - 6, 1, 232, 27, 2, 227, 89, 7, 3, 1, 102, 2, 82, 7, 3, 1, 227, 110, 2, - 250, 1, 82, 7, 6, 1, 245, 172, 2, 250, 34, 7, 3, 1, 245, 172, 2, 250, 34, - 7, 6, 1, 239, 77, 2, 250, 34, 7, 3, 1, 239, 77, 2, 250, 34, 7, 6, 1, 223, - 120, 2, 250, 34, 7, 3, 1, 223, 120, 2, 250, 34, 7, 6, 1, 254, 205, 7, 6, - 1, 237, 69, 2, 88, 7, 6, 1, 209, 57, 7, 3, 1, 225, 65, 2, 41, 88, 7, 6, - 1, 224, 175, 2, 88, 7, 3, 1, 224, 175, 2, 88, 7, 3, 1, 225, 65, 2, 250, - 224, 7, 6, 1, 132, 212, 7, 3, 1, 132, 212, 7, 3, 1, 227, 87, 233, 87, 7, - 3, 1, 161, 2, 234, 241, 7, 3, 1, 209, 232, 27, 2, 227, 89, 7, 3, 1, 130, - 2, 184, 231, 140, 239, 243, 7, 1, 3, 6, 209, 72, 7, 227, 253, 3, 1, 239, - 182, 52, 1, 6, 196, 70, 6, 1, 254, 222, 70, 3, 1, 254, 222, 70, 6, 1, - 224, 226, 70, 3, 1, 224, 226, 70, 6, 1, 246, 169, 70, 3, 1, 246, 169, 70, - 6, 1, 250, 162, 70, 3, 1, 250, 162, 70, 6, 1, 248, 21, 70, 3, 1, 248, 21, - 70, 6, 1, 228, 156, 70, 3, 1, 228, 156, 70, 6, 1, 223, 103, 70, 3, 1, - 223, 103, 70, 6, 1, 245, 130, 70, 3, 1, 245, 130, 70, 6, 1, 226, 222, 70, - 3, 1, 226, 222, 70, 6, 1, 244, 72, 70, 3, 1, 244, 72, 70, 6, 1, 239, 40, - 70, 3, 1, 239, 40, 70, 6, 1, 237, 254, 70, 3, 1, 237, 254, 70, 6, 1, 236, - 157, 70, 3, 1, 236, 157, 70, 6, 1, 235, 89, 70, 3, 1, 235, 89, 70, 6, 1, - 238, 111, 70, 3, 1, 238, 111, 70, 6, 1, 73, 70, 3, 1, 73, 70, 6, 1, 233, - 69, 70, 3, 1, 233, 69, 70, 6, 1, 231, 122, 70, 3, 1, 231, 122, 70, 6, 1, - 228, 249, 70, 3, 1, 228, 249, 70, 6, 1, 227, 61, 70, 3, 1, 227, 61, 70, - 6, 1, 225, 170, 70, 3, 1, 225, 170, 70, 6, 1, 247, 70, 70, 3, 1, 247, 70, - 70, 6, 1, 238, 212, 70, 3, 1, 238, 212, 70, 6, 1, 232, 183, 70, 3, 1, - 232, 183, 70, 6, 1, 234, 48, 70, 3, 1, 234, 48, 70, 6, 1, 249, 255, 254, - 227, 70, 3, 1, 249, 255, 254, 227, 70, 6, 1, 84, 70, 254, 248, 70, 3, 1, - 84, 70, 254, 248, 70, 6, 1, 250, 236, 248, 21, 70, 3, 1, 250, 236, 248, - 21, 70, 6, 1, 249, 255, 239, 40, 70, 3, 1, 249, 255, 239, 40, 70, 6, 1, - 249, 255, 235, 89, 70, 3, 1, 249, 255, 235, 89, 70, 6, 1, 250, 236, 235, - 89, 70, 3, 1, 250, 236, 235, 89, 70, 6, 1, 84, 70, 234, 48, 70, 3, 1, 84, - 70, 234, 48, 70, 6, 1, 230, 255, 70, 3, 1, 230, 255, 70, 6, 1, 250, 241, - 229, 106, 70, 3, 1, 250, 241, 229, 106, 70, 6, 1, 84, 70, 229, 106, 70, - 3, 1, 84, 70, 229, 106, 70, 6, 1, 84, 70, 247, 183, 70, 3, 1, 84, 70, - 247, 183, 70, 6, 1, 254, 236, 238, 215, 70, 3, 1, 254, 236, 238, 215, 70, - 6, 1, 249, 255, 244, 213, 70, 3, 1, 249, 255, 244, 213, 70, 6, 1, 84, 70, - 244, 213, 70, 3, 1, 84, 70, 244, 213, 70, 6, 1, 84, 70, 154, 70, 3, 1, - 84, 70, 154, 70, 6, 1, 238, 46, 154, 70, 3, 1, 238, 46, 154, 70, 6, 1, - 84, 70, 245, 106, 70, 3, 1, 84, 70, 245, 106, 70, 6, 1, 84, 70, 245, 132, - 70, 3, 1, 84, 70, 245, 132, 70, 6, 1, 84, 70, 246, 165, 70, 3, 1, 84, 70, - 246, 165, 70, 6, 1, 84, 70, 249, 177, 70, 3, 1, 84, 70, 249, 177, 70, 6, - 1, 84, 70, 229, 80, 70, 3, 1, 84, 70, 229, 80, 70, 6, 1, 84, 234, 204, - 229, 80, 70, 3, 1, 84, 234, 204, 229, 80, 70, 6, 1, 84, 234, 204, 235, - 114, 70, 3, 1, 84, 234, 204, 235, 114, 70, 6, 1, 84, 234, 204, 234, 163, - 70, 3, 1, 84, 234, 204, 234, 163, 70, 6, 1, 84, 234, 204, 224, 149, 70, - 3, 1, 84, 234, 204, 224, 149, 70, 14, 239, 56, 70, 14, 236, 158, 231, - 122, 70, 14, 233, 70, 231, 122, 70, 14, 228, 54, 70, 14, 227, 62, 231, - 122, 70, 14, 238, 213, 231, 122, 70, 14, 229, 81, 228, 249, 70, 84, 234, - 204, 246, 218, 228, 38, 70, 84, 234, 204, 249, 201, 232, 69, 76, 70, 84, - 234, 204, 240, 6, 232, 69, 76, 70, 84, 234, 204, 225, 32, 249, 184, 70, - 246, 235, 168, 245, 151, 70, 246, 218, 228, 38, 70, 236, 80, 249, 184, - 87, 3, 1, 254, 190, 87, 3, 1, 253, 44, 87, 3, 1, 246, 168, 87, 3, 1, 249, - 148, 87, 3, 1, 247, 239, 87, 3, 1, 224, 219, 87, 3, 1, 223, 92, 87, 3, 1, - 227, 73, 87, 3, 1, 240, 16, 87, 3, 1, 239, 46, 87, 3, 1, 238, 6, 87, 3, - 1, 237, 35, 87, 3, 1, 235, 230, 87, 3, 1, 234, 61, 87, 3, 1, 233, 194, - 87, 3, 1, 223, 81, 87, 3, 1, 232, 15, 87, 3, 1, 230, 253, 87, 3, 1, 227, - 67, 87, 3, 1, 225, 138, 87, 3, 1, 233, 92, 87, 3, 1, 238, 218, 87, 3, 1, - 246, 60, 87, 3, 1, 232, 123, 87, 3, 1, 229, 78, 87, 3, 1, 251, 161, 87, - 3, 1, 252, 26, 87, 3, 1, 239, 149, 87, 3, 1, 251, 109, 87, 3, 1, 251, - 192, 87, 3, 1, 224, 70, 87, 3, 1, 239, 159, 87, 3, 1, 245, 165, 87, 3, 1, - 245, 121, 87, 3, 1, 245, 71, 87, 3, 1, 224, 141, 87, 3, 1, 245, 141, 87, - 3, 1, 244, 225, 221, 1, 191, 221, 1, 224, 17, 221, 1, 224, 16, 221, 1, - 224, 8, 221, 1, 224, 6, 221, 1, 252, 204, 255, 43, 224, 2, 221, 1, 224, - 2, 221, 1, 224, 14, 221, 1, 224, 11, 221, 1, 224, 13, 221, 1, 224, 12, - 221, 1, 223, 206, 221, 1, 224, 9, 221, 1, 224, 1, 221, 1, 225, 249, 224, - 1, 221, 1, 223, 254, 221, 1, 224, 4, 221, 1, 252, 204, 255, 43, 224, 4, - 221, 1, 225, 249, 224, 4, 221, 1, 224, 3, 221, 1, 224, 21, 221, 1, 223, - 255, 221, 1, 225, 249, 223, 255, 221, 1, 223, 246, 221, 1, 225, 249, 223, - 246, 221, 1, 223, 202, 221, 1, 223, 230, 221, 1, 255, 1, 223, 230, 221, - 1, 225, 249, 223, 230, 221, 1, 223, 253, 221, 1, 223, 252, 221, 1, 223, - 250, 221, 1, 225, 249, 224, 5, 221, 1, 225, 249, 223, 248, 221, 1, 223, - 247, 221, 1, 223, 158, 221, 1, 223, 244, 221, 1, 223, 243, 221, 1, 224, - 7, 221, 1, 225, 249, 224, 7, 221, 1, 254, 30, 224, 7, 221, 1, 223, 242, - 221, 1, 223, 240, 221, 1, 223, 241, 221, 1, 223, 239, 221, 1, 223, 238, - 221, 1, 224, 15, 221, 1, 223, 236, 221, 1, 223, 235, 221, 1, 223, 234, - 221, 1, 223, 233, 221, 1, 223, 231, 221, 1, 227, 54, 223, 231, 221, 1, - 223, 229, 221, 52, 1, 238, 38, 76, 25, 4, 237, 142, 25, 4, 236, 102, 25, - 4, 231, 120, 25, 4, 228, 168, 25, 4, 229, 70, 25, 4, 252, 137, 25, 4, - 226, 124, 25, 4, 251, 67, 25, 4, 235, 4, 25, 4, 234, 151, 25, 4, 246, 16, - 234, 105, 25, 4, 223, 26, 25, 4, 249, 159, 25, 4, 250, 91, 25, 4, 239, - 116, 25, 4, 226, 200, 25, 4, 251, 149, 25, 4, 233, 78, 25, 4, 233, 3, 25, - 4, 246, 71, 25, 4, 246, 67, 25, 4, 246, 68, 25, 4, 246, 69, 25, 4, 228, - 110, 25, 4, 228, 80, 25, 4, 228, 91, 25, 4, 228, 109, 25, 4, 228, 94, 25, - 4, 228, 95, 25, 4, 228, 84, 25, 4, 251, 246, 25, 4, 251, 233, 25, 4, 251, - 235, 25, 4, 251, 245, 25, 4, 251, 243, 25, 4, 251, 244, 25, 4, 251, 234, - 25, 4, 222, 253, 25, 4, 222, 233, 25, 4, 222, 244, 25, 4, 222, 252, 25, - 4, 222, 247, 25, 4, 222, 248, 25, 4, 222, 236, 25, 4, 251, 242, 25, 4, - 251, 236, 25, 4, 251, 238, 25, 4, 251, 241, 25, 4, 251, 239, 25, 4, 251, - 240, 25, 4, 251, 237, 25, 4, 232, 39, 25, 4, 232, 29, 25, 4, 232, 35, 25, - 4, 232, 38, 25, 4, 232, 36, 25, 4, 232, 37, 25, 4, 232, 34, 25, 4, 238, - 57, 25, 4, 238, 49, 25, 4, 238, 52, 25, 4, 238, 56, 25, 4, 238, 53, 25, - 4, 238, 54, 25, 4, 238, 50, 25, 4, 224, 38, 25, 4, 224, 28, 25, 4, 224, - 34, 25, 4, 224, 37, 25, 4, 224, 35, 25, 4, 224, 36, 25, 4, 224, 33, 25, - 4, 245, 182, 25, 4, 245, 173, 25, 4, 245, 176, 25, 4, 245, 181, 25, 4, - 245, 178, 25, 4, 245, 179, 25, 4, 245, 175, 36, 28, 1, 252, 238, 36, 28, - 1, 225, 42, 36, 28, 1, 246, 58, 36, 28, 1, 250, 77, 36, 28, 1, 223, 77, - 36, 28, 1, 223, 97, 36, 28, 1, 177, 36, 28, 1, 248, 2, 36, 28, 1, 247, - 247, 36, 28, 1, 247, 239, 36, 28, 1, 73, 36, 28, 1, 233, 151, 36, 28, 1, - 247, 198, 36, 28, 1, 247, 188, 36, 28, 1, 227, 44, 36, 28, 1, 154, 36, - 28, 1, 226, 40, 36, 28, 1, 251, 182, 36, 28, 1, 229, 146, 36, 28, 1, 229, - 116, 36, 28, 1, 247, 38, 36, 28, 1, 247, 187, 36, 28, 1, 57, 36, 28, 1, - 240, 72, 36, 28, 1, 249, 175, 36, 28, 1, 236, 90, 225, 153, 36, 28, 1, - 223, 239, 36, 28, 1, 223, 158, 36, 28, 1, 239, 213, 57, 36, 28, 1, 237, - 155, 223, 139, 36, 28, 1, 252, 173, 223, 139, 36, 28, 1, 239, 213, 252, - 173, 223, 139, 41, 254, 182, 227, 248, 237, 13, 41, 254, 182, 248, 138, - 227, 248, 237, 13, 42, 227, 248, 104, 41, 227, 248, 104, 42, 248, 138, - 227, 248, 104, 41, 248, 138, 227, 248, 104, 232, 8, 239, 231, 237, 13, - 232, 8, 248, 138, 239, 231, 237, 13, 248, 138, 226, 91, 237, 13, 42, 226, - 91, 104, 41, 226, 91, 104, 232, 8, 228, 120, 42, 232, 8, 234, 63, 104, - 41, 232, 8, 234, 63, 104, 248, 36, 251, 8, 233, 190, 246, 251, 233, 190, - 200, 246, 251, 233, 190, 244, 92, 248, 138, 234, 100, 248, 125, 254, 187, - 225, 106, 254, 187, 248, 138, 231, 151, 254, 181, 47, 234, 97, 244, 95, - 239, 223, 239, 230, 233, 223, 252, 112, 244, 96, 2, 219, 226, 159, 2, - 231, 140, 46, 42, 184, 233, 182, 104, 41, 184, 233, 182, 104, 226, 159, - 2, 56, 46, 226, 159, 2, 56, 51, 42, 61, 253, 36, 2, 232, 65, 41, 61, 253, - 36, 2, 232, 65, 226, 106, 42, 132, 104, 226, 106, 41, 132, 104, 252, 126, - 42, 132, 104, 252, 126, 41, 132, 104, 42, 229, 11, 97, 104, 41, 229, 11, - 97, 104, 42, 47, 233, 180, 41, 47, 233, 180, 135, 197, 107, 168, 56, 232, - 170, 168, 56, 107, 135, 197, 232, 170, 228, 119, 246, 243, 56, 232, 170, - 247, 37, 56, 76, 200, 232, 69, 76, 61, 205, 231, 140, 232, 254, 9, 29, - 231, 211, 9, 29, 251, 88, 9, 29, 230, 209, 118, 9, 29, 230, 209, 113, 9, - 29, 230, 209, 166, 9, 29, 233, 112, 9, 29, 252, 118, 9, 29, 227, 99, 9, - 29, 238, 154, 118, 9, 29, 238, 154, 113, 9, 29, 249, 182, 9, 29, 230, - 211, 9, 29, 3, 118, 9, 29, 3, 113, 9, 29, 238, 15, 118, 9, 29, 238, 15, - 113, 9, 29, 238, 15, 166, 9, 29, 238, 15, 158, 9, 29, 228, 176, 9, 29, - 226, 192, 9, 29, 228, 174, 118, 9, 29, 228, 174, 113, 9, 29, 245, 115, - 118, 9, 29, 245, 115, 113, 9, 29, 245, 146, 9, 29, 232, 1, 9, 29, 251, - 147, 9, 29, 227, 227, 9, 29, 236, 84, 9, 29, 250, 75, 9, 29, 236, 77, 9, - 29, 251, 98, 9, 29, 224, 152, 118, 9, 29, 224, 152, 113, 9, 29, 247, 46, - 9, 29, 233, 160, 118, 9, 29, 233, 160, 113, 9, 29, 228, 245, 132, 226, - 87, 226, 49, 9, 29, 250, 253, 9, 29, 249, 153, 9, 29, 239, 177, 9, 29, - 252, 133, 106, 251, 77, 9, 29, 247, 136, 9, 29, 228, 132, 118, 9, 29, - 228, 132, 113, 9, 29, 253, 46, 9, 29, 228, 250, 9, 29, 252, 41, 228, 250, - 9, 29, 235, 148, 118, 9, 29, 235, 148, 113, 9, 29, 235, 148, 166, 9, 29, - 235, 148, 158, 9, 29, 236, 204, 9, 29, 229, 108, 9, 29, 232, 6, 9, 29, - 247, 154, 9, 29, 234, 73, 9, 29, 252, 97, 118, 9, 29, 252, 97, 113, 9, - 29, 236, 231, 9, 29, 236, 79, 9, 29, 245, 240, 118, 9, 29, 245, 240, 113, - 9, 29, 245, 240, 166, 9, 29, 226, 167, 9, 29, 251, 76, 9, 29, 224, 131, - 118, 9, 29, 224, 131, 113, 9, 29, 252, 41, 230, 203, 9, 29, 228, 245, - 244, 160, 9, 29, 244, 160, 9, 29, 252, 41, 228, 138, 9, 29, 252, 41, 229, - 103, 9, 29, 247, 2, 9, 29, 252, 41, 252, 2, 9, 29, 228, 245, 224, 166, 9, - 29, 224, 167, 118, 9, 29, 224, 167, 113, 9, 29, 251, 99, 9, 29, 252, 41, - 246, 6, 9, 29, 182, 118, 9, 29, 182, 113, 9, 29, 252, 41, 237, 134, 9, - 29, 252, 41, 246, 153, 9, 29, 236, 76, 118, 9, 29, 236, 76, 113, 9, 29, - 232, 9, 9, 29, 252, 140, 9, 29, 252, 41, 227, 72, 237, 240, 9, 29, 252, - 41, 237, 241, 9, 29, 252, 41, 224, 111, 9, 29, 252, 41, 247, 10, 9, 29, - 248, 43, 118, 9, 29, 248, 43, 113, 9, 29, 248, 43, 166, 9, 29, 252, 41, - 248, 42, 9, 29, 245, 118, 9, 29, 252, 41, 244, 159, 9, 29, 252, 132, 9, - 29, 246, 53, 9, 29, 252, 41, 247, 43, 9, 29, 252, 41, 252, 164, 9, 29, - 252, 41, 231, 7, 9, 29, 228, 245, 224, 126, 9, 29, 228, 245, 223, 223, 9, - 29, 252, 41, 246, 225, 9, 29, 239, 181, 247, 157, 9, 29, 252, 41, 247, - 157, 9, 29, 239, 181, 226, 107, 9, 29, 252, 41, 226, 107, 9, 29, 239, - 181, 248, 118, 9, 29, 252, 41, 248, 118, 9, 29, 225, 230, 9, 29, 239, - 181, 225, 230, 9, 29, 252, 41, 225, 230, 49, 29, 118, 49, 29, 237, 170, - 49, 29, 249, 140, 49, 29, 228, 194, 49, 29, 230, 208, 49, 29, 88, 49, 29, - 113, 49, 29, 237, 190, 49, 29, 237, 35, 49, 29, 237, 226, 49, 29, 247, - 222, 49, 29, 187, 49, 29, 103, 252, 118, 49, 29, 250, 254, 49, 29, 244, - 69, 49, 29, 227, 99, 49, 29, 234, 44, 252, 118, 49, 29, 238, 153, 49, 29, - 232, 233, 49, 29, 224, 87, 49, 29, 228, 128, 49, 29, 41, 234, 44, 252, - 118, 49, 29, 245, 72, 247, 235, 49, 29, 227, 23, 49, 29, 249, 182, 49, - 29, 230, 211, 49, 29, 251, 88, 49, 29, 232, 202, 49, 29, 255, 7, 49, 29, - 236, 72, 49, 29, 247, 235, 49, 29, 248, 48, 49, 29, 230, 224, 49, 29, - 246, 11, 49, 29, 246, 12, 228, 186, 49, 29, 247, 156, 49, 29, 252, 172, - 49, 29, 224, 101, 49, 29, 251, 163, 49, 29, 231, 113, 49, 29, 240, 15, - 49, 29, 228, 184, 49, 29, 238, 14, 49, 29, 251, 6, 49, 29, 228, 123, 49, - 29, 236, 74, 49, 29, 231, 131, 49, 29, 224, 89, 49, 29, 234, 59, 49, 29, - 225, 235, 49, 29, 248, 109, 49, 29, 229, 63, 226, 192, 49, 29, 248, 138, - 251, 88, 49, 29, 182, 228, 24, 49, 29, 135, 245, 145, 49, 29, 229, 65, - 49, 29, 252, 121, 49, 29, 228, 173, 49, 29, 252, 101, 49, 29, 228, 47, - 49, 29, 245, 114, 49, 29, 245, 152, 49, 29, 249, 143, 49, 29, 245, 146, - 49, 29, 252, 112, 49, 29, 232, 1, 49, 29, 230, 217, 49, 29, 249, 203, 49, - 29, 254, 35, 49, 29, 228, 120, 49, 29, 234, 242, 49, 29, 227, 227, 49, - 29, 230, 234, 49, 29, 236, 84, 49, 29, 226, 86, 49, 29, 238, 34, 49, 29, - 228, 38, 49, 29, 250, 75, 49, 29, 224, 140, 49, 29, 249, 162, 234, 242, - 49, 29, 251, 51, 49, 29, 246, 212, 49, 29, 251, 96, 49, 29, 228, 50, 49, - 29, 224, 151, 49, 29, 247, 46, 49, 29, 251, 95, 49, 29, 247, 101, 49, 29, - 47, 224, 73, 49, 29, 132, 226, 87, 226, 49, 49, 29, 228, 191, 49, 29, - 247, 109, 49, 29, 250, 253, 49, 29, 249, 153, 49, 29, 232, 199, 49, 29, - 239, 177, 49, 29, 236, 217, 49, 29, 226, 158, 49, 29, 227, 195, 49, 29, - 237, 185, 49, 29, 225, 86, 49, 29, 247, 69, 49, 29, 252, 133, 106, 251, - 77, 49, 29, 229, 12, 49, 29, 248, 138, 227, 21, 49, 29, 224, 121, 49, 29, - 228, 201, 49, 29, 249, 195, 49, 29, 247, 136, 49, 29, 228, 140, 49, 29, - 58, 49, 29, 228, 40, 49, 29, 228, 131, 49, 29, 226, 95, 49, 29, 245, 245, - 49, 29, 251, 251, 49, 29, 228, 62, 49, 29, 253, 46, 49, 29, 231, 178, 49, - 29, 228, 250, 49, 29, 239, 173, 49, 29, 235, 147, 49, 29, 229, 108, 49, - 29, 247, 94, 49, 29, 234, 73, 49, 29, 254, 186, 49, 29, 233, 14, 49, 29, - 248, 51, 49, 29, 252, 96, 49, 29, 236, 231, 49, 29, 236, 122, 49, 29, - 229, 192, 49, 29, 254, 96, 49, 29, 236, 79, 49, 29, 226, 110, 49, 29, - 234, 36, 49, 29, 252, 135, 49, 29, 228, 36, 49, 29, 251, 60, 49, 29, 245, - 239, 49, 29, 226, 167, 49, 29, 239, 245, 49, 29, 252, 141, 49, 29, 224, - 167, 247, 235, 49, 29, 251, 76, 49, 29, 224, 130, 49, 29, 230, 203, 49, - 29, 244, 160, 49, 29, 228, 138, 49, 29, 225, 61, 49, 29, 252, 235, 49, - 29, 233, 43, 49, 29, 253, 60, 49, 29, 229, 103, 49, 29, 231, 230, 49, 29, - 231, 60, 49, 29, 247, 2, 49, 29, 252, 134, 49, 29, 252, 2, 49, 29, 252, - 155, 49, 29, 236, 81, 49, 29, 224, 166, 49, 29, 251, 99, 49, 29, 224, - 109, 49, 29, 249, 192, 49, 29, 224, 220, 49, 29, 246, 6, 49, 29, 237, - 134, 49, 29, 246, 153, 49, 29, 236, 75, 49, 29, 228, 193, 49, 29, 229, - 63, 227, 88, 252, 164, 49, 29, 232, 9, 49, 29, 252, 140, 49, 29, 224, 84, - 49, 29, 247, 125, 49, 29, 237, 240, 49, 29, 227, 72, 237, 240, 49, 29, - 237, 238, 49, 29, 228, 154, 49, 29, 237, 241, 49, 29, 224, 111, 49, 29, - 247, 10, 49, 29, 248, 42, 49, 29, 245, 118, 49, 29, 246, 233, 49, 29, - 244, 159, 49, 29, 252, 132, 49, 29, 227, 76, 49, 29, 245, 157, 49, 29, - 247, 62, 49, 29, 231, 26, 224, 109, 49, 29, 251, 253, 49, 29, 246, 53, - 49, 29, 247, 43, 49, 29, 252, 164, 49, 29, 231, 7, 49, 29, 250, 65, 49, - 29, 224, 126, 49, 29, 245, 101, 49, 29, 223, 223, 49, 29, 236, 129, 49, - 29, 252, 150, 49, 29, 247, 244, 49, 29, 246, 225, 49, 29, 226, 64, 49, - 29, 248, 111, 49, 29, 231, 253, 49, 29, 234, 243, 49, 29, 247, 157, 49, - 29, 226, 107, 49, 29, 248, 118, 49, 29, 225, 230, 49, 29, 247, 11, 90, - 250, 32, 116, 42, 180, 231, 153, 90, 250, 32, 116, 64, 180, 51, 90, 250, - 32, 116, 42, 180, 236, 154, 22, 231, 153, 90, 250, 32, 116, 64, 180, 236, - 154, 22, 51, 90, 250, 32, 116, 246, 218, 227, 207, 90, 250, 32, 116, 227, - 208, 246, 224, 46, 90, 250, 32, 116, 227, 208, 246, 224, 51, 90, 250, 32, - 116, 227, 208, 246, 224, 237, 237, 90, 250, 32, 116, 227, 208, 246, 224, - 225, 113, 237, 237, 90, 250, 32, 116, 227, 208, 246, 224, 225, 113, 231, - 153, 90, 250, 32, 116, 227, 208, 246, 224, 203, 237, 237, 90, 250, 32, - 116, 234, 4, 90, 228, 145, 90, 251, 54, 90, 246, 218, 228, 38, 249, 189, - 76, 239, 174, 240, 5, 228, 61, 98, 90, 239, 193, 76, 90, 251, 79, 76, 90, - 65, 223, 89, 42, 254, 182, 104, 41, 254, 182, 104, 42, 47, 254, 182, 104, - 41, 47, 254, 182, 104, 42, 251, 11, 104, 41, 251, 11, 104, 42, 63, 251, - 11, 104, 41, 63, 251, 11, 104, 42, 86, 237, 217, 104, 41, 86, 237, 217, - 104, 232, 237, 76, 246, 104, 76, 42, 226, 100, 229, 104, 104, 41, 226, - 100, 229, 104, 104, 42, 63, 237, 217, 104, 41, 63, 237, 217, 104, 42, 63, - 226, 100, 229, 104, 104, 41, 63, 226, 100, 229, 104, 104, 42, 63, 37, - 104, 41, 63, 37, 104, 224, 148, 250, 130, 200, 47, 232, 206, 232, 57, 76, - 47, 232, 206, 232, 57, 76, 184, 47, 232, 206, 232, 57, 76, 232, 237, 165, - 247, 125, 245, 144, 207, 118, 245, 144, 207, 113, 245, 144, 207, 166, - 245, 144, 207, 158, 245, 144, 207, 173, 245, 144, 207, 183, 245, 144, - 207, 194, 245, 144, 207, 187, 245, 144, 207, 192, 90, 237, 209, 206, 76, - 90, 231, 135, 206, 76, 90, 250, 38, 206, 76, 90, 247, 221, 206, 76, 26, - 228, 241, 56, 206, 76, 26, 47, 56, 206, 76, 224, 146, 250, 130, 61, 239, - 45, 231, 212, 76, 61, 239, 45, 231, 212, 2, 224, 204, 228, 155, 76, 61, - 239, 45, 231, 212, 165, 225, 113, 245, 151, 61, 239, 45, 231, 212, 2, - 224, 204, 228, 155, 165, 225, 113, 245, 151, 61, 239, 45, 231, 212, 165, - 203, 245, 151, 33, 232, 237, 76, 90, 167, 237, 171, 247, 91, 229, 174, - 98, 245, 144, 207, 227, 23, 245, 144, 207, 225, 216, 245, 144, 207, 226, - 207, 61, 90, 239, 193, 76, 237, 3, 76, 233, 176, 254, 202, 76, 90, 38, - 240, 7, 90, 132, 247, 55, 228, 145, 126, 1, 3, 57, 126, 1, 57, 126, 1, 3, - 74, 126, 1, 74, 126, 1, 3, 66, 126, 1, 66, 126, 1, 3, 72, 126, 1, 72, - 126, 1, 3, 73, 126, 1, 73, 126, 1, 177, 126, 1, 246, 193, 126, 1, 238, - 199, 126, 1, 246, 46, 126, 1, 238, 107, 126, 1, 245, 218, 126, 1, 239, 3, - 126, 1, 246, 131, 126, 1, 238, 150, 126, 1, 246, 11, 126, 1, 231, 31, - 126, 1, 223, 117, 126, 1, 229, 15, 126, 1, 223, 47, 126, 1, 228, 6, 126, - 1, 223, 19, 126, 1, 230, 213, 126, 1, 223, 97, 126, 1, 228, 169, 126, 1, - 223, 27, 126, 1, 227, 107, 126, 1, 250, 189, 126, 1, 226, 175, 126, 1, - 250, 4, 126, 1, 3, 225, 250, 126, 1, 225, 250, 126, 1, 248, 107, 126, 1, - 227, 44, 126, 1, 250, 77, 126, 1, 96, 126, 1, 249, 161, 126, 1, 236, 1, - 126, 1, 235, 89, 126, 1, 234, 206, 126, 1, 235, 162, 126, 1, 235, 6, 126, - 1, 154, 126, 1, 253, 70, 126, 1, 213, 126, 1, 245, 75, 126, 1, 252, 181, - 126, 1, 233, 69, 126, 1, 244, 145, 126, 1, 252, 90, 126, 1, 232, 173, - 126, 1, 245, 121, 126, 1, 252, 238, 126, 1, 233, 151, 126, 1, 244, 227, - 126, 1, 252, 138, 126, 1, 233, 4, 126, 1, 198, 126, 1, 236, 157, 126, 1, - 236, 66, 126, 1, 236, 235, 126, 1, 236, 103, 126, 1, 3, 191, 126, 1, 191, - 126, 1, 3, 223, 158, 126, 1, 223, 158, 126, 1, 3, 223, 183, 126, 1, 223, - 183, 126, 1, 208, 126, 1, 231, 180, 126, 1, 231, 70, 126, 1, 231, 244, - 126, 1, 231, 122, 126, 1, 3, 224, 173, 126, 1, 224, 173, 126, 1, 224, - 118, 126, 1, 224, 141, 126, 1, 224, 105, 126, 1, 199, 126, 1, 224, 190, - 126, 1, 3, 177, 126, 1, 3, 239, 3, 36, 239, 19, 224, 204, 228, 155, 76, - 36, 239, 19, 229, 191, 228, 155, 76, 239, 19, 224, 204, 228, 155, 76, - 239, 19, 229, 191, 228, 155, 76, 126, 239, 193, 76, 126, 224, 204, 239, - 193, 76, 126, 249, 224, 223, 170, 239, 19, 47, 244, 95, 48, 1, 3, 57, 48, - 1, 57, 48, 1, 3, 74, 48, 1, 74, 48, 1, 3, 66, 48, 1, 66, 48, 1, 3, 72, - 48, 1, 72, 48, 1, 3, 73, 48, 1, 73, 48, 1, 177, 48, 1, 246, 193, 48, 1, - 238, 199, 48, 1, 246, 46, 48, 1, 238, 107, 48, 1, 245, 218, 48, 1, 239, - 3, 48, 1, 246, 131, 48, 1, 238, 150, 48, 1, 246, 11, 48, 1, 231, 31, 48, - 1, 223, 117, 48, 1, 229, 15, 48, 1, 223, 47, 48, 1, 228, 6, 48, 1, 223, - 19, 48, 1, 230, 213, 48, 1, 223, 97, 48, 1, 228, 169, 48, 1, 223, 27, 48, - 1, 227, 107, 48, 1, 250, 189, 48, 1, 226, 175, 48, 1, 250, 4, 48, 1, 3, - 225, 250, 48, 1, 225, 250, 48, 1, 248, 107, 48, 1, 227, 44, 48, 1, 250, - 77, 48, 1, 96, 48, 1, 249, 161, 48, 1, 236, 1, 48, 1, 235, 89, 48, 1, - 234, 206, 48, 1, 235, 162, 48, 1, 235, 6, 48, 1, 154, 48, 1, 253, 70, 48, - 1, 213, 48, 1, 245, 75, 48, 1, 252, 181, 48, 1, 233, 69, 48, 1, 244, 145, - 48, 1, 252, 90, 48, 1, 232, 173, 48, 1, 245, 121, 48, 1, 252, 238, 48, 1, - 233, 151, 48, 1, 244, 227, 48, 1, 252, 138, 48, 1, 233, 4, 48, 1, 198, - 48, 1, 236, 157, 48, 1, 236, 66, 48, 1, 236, 235, 48, 1, 236, 103, 48, 1, - 3, 191, 48, 1, 191, 48, 1, 3, 223, 158, 48, 1, 223, 158, 48, 1, 3, 223, - 183, 48, 1, 223, 183, 48, 1, 208, 48, 1, 231, 180, 48, 1, 231, 70, 48, 1, - 231, 244, 48, 1, 231, 122, 48, 1, 3, 224, 173, 48, 1, 224, 173, 48, 1, - 224, 118, 48, 1, 224, 141, 48, 1, 224, 105, 48, 1, 199, 48, 1, 224, 190, - 48, 1, 3, 177, 48, 1, 3, 239, 3, 48, 1, 225, 64, 48, 1, 224, 228, 48, 1, - 225, 42, 48, 1, 224, 206, 48, 236, 154, 249, 140, 239, 19, 232, 194, 228, - 155, 76, 48, 239, 193, 76, 48, 224, 204, 239, 193, 76, 48, 249, 224, 238, - 129, 176, 1, 254, 27, 176, 1, 233, 244, 176, 1, 185, 176, 1, 247, 130, - 176, 1, 222, 222, 176, 1, 227, 109, 176, 1, 199, 176, 1, 149, 176, 1, - 214, 176, 1, 239, 76, 176, 1, 212, 176, 1, 239, 182, 176, 1, 232, 139, - 176, 1, 224, 73, 176, 1, 223, 86, 176, 1, 251, 205, 176, 1, 229, 148, - 176, 1, 146, 176, 1, 223, 119, 176, 1, 252, 44, 176, 1, 193, 176, 1, 57, - 176, 1, 73, 176, 1, 72, 176, 1, 248, 24, 176, 1, 254, 253, 176, 1, 248, - 22, 176, 1, 254, 53, 176, 1, 234, 13, 176, 1, 254, 190, 176, 1, 247, 239, - 176, 1, 254, 184, 176, 1, 247, 228, 176, 1, 247, 198, 176, 1, 74, 176, 1, - 66, 176, 1, 239, 192, 176, 1, 196, 176, 1, 235, 139, 176, 1, 246, 15, - 176, 1, 240, 48, 26, 1, 238, 173, 26, 1, 228, 104, 26, 1, 238, 171, 26, - 1, 235, 82, 26, 1, 235, 81, 26, 1, 235, 80, 26, 1, 226, 163, 26, 1, 228, - 99, 26, 1, 231, 174, 26, 1, 231, 170, 26, 1, 231, 168, 26, 1, 231, 162, - 26, 1, 231, 159, 26, 1, 231, 157, 26, 1, 231, 163, 26, 1, 231, 173, 26, - 1, 236, 148, 26, 1, 233, 60, 26, 1, 228, 102, 26, 1, 233, 52, 26, 1, 228, - 236, 26, 1, 228, 100, 26, 1, 240, 68, 26, 1, 251, 113, 26, 1, 228, 107, - 26, 1, 251, 167, 26, 1, 238, 210, 26, 1, 226, 218, 26, 1, 233, 85, 26, 1, - 245, 69, 26, 1, 57, 26, 1, 255, 19, 26, 1, 191, 26, 1, 224, 10, 26, 1, - 247, 217, 26, 1, 72, 26, 1, 223, 221, 26, 1, 223, 228, 26, 1, 73, 26, 1, - 224, 173, 26, 1, 224, 170, 26, 1, 234, 88, 26, 1, 223, 183, 26, 1, 66, - 26, 1, 224, 133, 26, 1, 224, 141, 26, 1, 224, 118, 26, 1, 223, 158, 26, - 1, 247, 165, 26, 1, 223, 202, 26, 1, 74, 26, 247, 52, 26, 1, 228, 103, - 26, 1, 235, 74, 26, 1, 235, 76, 26, 1, 235, 78, 26, 1, 231, 169, 26, 1, - 231, 156, 26, 1, 231, 160, 26, 1, 231, 164, 26, 1, 231, 154, 26, 1, 236, - 143, 26, 1, 236, 141, 26, 1, 236, 144, 26, 1, 239, 34, 26, 1, 233, 56, - 26, 1, 233, 45, 26, 1, 233, 50, 26, 1, 233, 48, 26, 1, 233, 58, 26, 1, - 233, 46, 26, 1, 239, 32, 26, 1, 239, 30, 26, 1, 228, 230, 26, 1, 228, - 228, 26, 1, 228, 221, 26, 1, 228, 226, 26, 1, 228, 234, 26, 1, 233, 204, - 26, 1, 228, 105, 26, 1, 223, 212, 26, 1, 223, 210, 26, 1, 223, 211, 26, - 1, 239, 33, 26, 1, 228, 106, 26, 1, 223, 218, 26, 1, 223, 180, 26, 1, - 223, 179, 26, 1, 223, 182, 26, 1, 223, 151, 26, 1, 223, 152, 26, 1, 223, - 154, 26, 1, 254, 128, 26, 1, 254, 124, 90, 254, 175, 237, 162, 76, 90, - 254, 175, 231, 193, 76, 90, 254, 175, 168, 76, 90, 254, 175, 135, 76, 90, - 254, 175, 152, 76, 90, 254, 175, 246, 243, 76, 90, 254, 175, 226, 106, - 76, 90, 254, 175, 236, 154, 76, 90, 254, 175, 252, 126, 76, 90, 254, 175, - 247, 45, 76, 90, 254, 175, 230, 209, 76, 90, 254, 175, 226, 214, 76, 90, - 254, 175, 246, 237, 76, 90, 254, 175, 245, 113, 76, 90, 254, 175, 248, - 49, 76, 90, 254, 175, 237, 36, 76, 176, 1, 252, 90, 176, 1, 223, 47, 176, - 1, 239, 156, 176, 1, 245, 218, 176, 1, 248, 35, 176, 1, 247, 226, 176, 1, - 234, 52, 176, 1, 234, 56, 176, 1, 239, 210, 176, 1, 254, 176, 176, 1, - 239, 250, 176, 1, 225, 121, 176, 1, 240, 30, 176, 1, 235, 123, 176, 1, - 254, 247, 176, 1, 254, 49, 176, 1, 254, 199, 176, 1, 234, 69, 176, 1, - 234, 58, 176, 1, 239, 247, 176, 35, 1, 233, 244, 176, 35, 1, 227, 109, - 176, 35, 1, 239, 76, 176, 35, 1, 212, 9, 195, 227, 109, 9, 195, 224, 127, - 9, 195, 224, 65, 9, 195, 252, 56, 9, 195, 227, 201, 9, 195, 244, 85, 9, - 195, 244, 89, 9, 195, 244, 151, 9, 195, 244, 86, 9, 195, 227, 112, 9, - 195, 244, 88, 9, 195, 244, 84, 9, 195, 244, 149, 9, 195, 244, 87, 9, 195, - 244, 83, 9, 195, 199, 9, 195, 212, 9, 195, 193, 9, 195, 233, 244, 9, 195, - 228, 147, 9, 195, 222, 222, 9, 195, 244, 90, 9, 195, 245, 85, 9, 195, - 227, 121, 9, 195, 227, 186, 9, 195, 228, 70, 9, 195, 229, 153, 9, 195, - 233, 153, 9, 195, 232, 141, 9, 195, 226, 125, 9, 195, 227, 111, 9, 195, - 227, 194, 9, 195, 244, 97, 9, 195, 244, 82, 9, 195, 233, 99, 9, 195, 232, - 139, 48, 1, 3, 238, 107, 48, 1, 3, 229, 15, 48, 1, 3, 228, 6, 48, 1, 3, - 96, 48, 1, 3, 234, 206, 48, 1, 3, 154, 48, 1, 3, 245, 75, 48, 1, 3, 244, - 145, 48, 1, 3, 245, 121, 48, 1, 3, 244, 227, 48, 1, 3, 236, 66, 48, 1, 3, - 208, 48, 1, 3, 231, 180, 48, 1, 3, 231, 70, 48, 1, 3, 231, 244, 48, 1, 3, - 231, 122, 93, 26, 238, 173, 93, 26, 235, 82, 93, 26, 226, 163, 93, 26, - 231, 174, 93, 26, 236, 148, 93, 26, 233, 60, 93, 26, 228, 236, 93, 26, - 240, 68, 93, 26, 251, 113, 93, 26, 251, 167, 93, 26, 238, 210, 93, 26, - 226, 218, 93, 26, 233, 85, 93, 26, 245, 69, 93, 26, 238, 174, 57, 93, 26, - 235, 83, 57, 93, 26, 226, 164, 57, 93, 26, 231, 175, 57, 93, 26, 236, - 149, 57, 93, 26, 233, 61, 57, 93, 26, 228, 237, 57, 93, 26, 240, 69, 57, - 93, 26, 251, 114, 57, 93, 26, 251, 168, 57, 93, 26, 238, 211, 57, 93, 26, - 226, 219, 57, 93, 26, 233, 86, 57, 93, 26, 245, 70, 57, 93, 26, 251, 114, - 66, 93, 238, 133, 116, 234, 78, 93, 238, 133, 116, 130, 244, 145, 93, - 133, 118, 93, 133, 113, 93, 133, 166, 93, 133, 158, 93, 133, 173, 93, - 133, 183, 93, 133, 194, 93, 133, 187, 93, 133, 192, 93, 133, 227, 23, 93, - 133, 236, 84, 93, 133, 247, 46, 93, 133, 224, 151, 93, 133, 224, 97, 93, - 133, 236, 199, 93, 133, 248, 48, 93, 133, 227, 227, 93, 133, 228, 41, 93, - 133, 245, 127, 93, 133, 228, 167, 93, 133, 235, 237, 93, 133, 228, 139, - 93, 133, 247, 51, 93, 133, 251, 40, 93, 133, 238, 37, 93, 133, 231, 208, - 93, 133, 252, 31, 93, 133, 228, 9, 93, 133, 227, 216, 93, 133, 247, 220, - 93, 133, 231, 201, 93, 133, 254, 212, 93, 133, 247, 75, 93, 133, 231, - 199, 93, 133, 229, 192, 93, 133, 231, 243, 233, 173, 53, 33, 65, 225, - 217, 118, 33, 65, 225, 217, 113, 33, 65, 225, 217, 166, 33, 65, 225, 217, - 158, 33, 65, 225, 217, 173, 33, 65, 225, 217, 183, 33, 65, 225, 217, 194, - 33, 65, 225, 217, 187, 33, 65, 225, 217, 192, 33, 65, 226, 207, 33, 65, - 226, 208, 118, 33, 65, 226, 208, 113, 33, 65, 226, 208, 166, 33, 65, 226, - 208, 158, 33, 65, 226, 208, 173, 33, 26, 238, 173, 33, 26, 235, 82, 33, - 26, 226, 163, 33, 26, 231, 174, 33, 26, 236, 148, 33, 26, 233, 60, 33, - 26, 228, 236, 33, 26, 240, 68, 33, 26, 251, 113, 33, 26, 251, 167, 33, - 26, 238, 210, 33, 26, 226, 218, 33, 26, 233, 85, 33, 26, 245, 69, 33, 26, - 238, 174, 57, 33, 26, 235, 83, 57, 33, 26, 226, 164, 57, 33, 26, 231, - 175, 57, 33, 26, 236, 149, 57, 33, 26, 233, 61, 57, 33, 26, 228, 237, 57, - 33, 26, 240, 69, 57, 33, 26, 251, 114, 57, 33, 26, 251, 168, 57, 33, 26, - 238, 211, 57, 33, 26, 226, 219, 57, 33, 26, 233, 86, 57, 33, 26, 245, 70, - 57, 33, 238, 133, 116, 251, 197, 33, 238, 133, 116, 239, 98, 33, 26, 240, - 69, 66, 238, 133, 228, 61, 98, 33, 133, 118, 33, 133, 113, 33, 133, 166, - 33, 133, 158, 33, 133, 173, 33, 133, 183, 33, 133, 194, 33, 133, 187, 33, - 133, 192, 33, 133, 227, 23, 33, 133, 236, 84, 33, 133, 247, 46, 33, 133, - 224, 151, 33, 133, 224, 97, 33, 133, 236, 199, 33, 133, 248, 48, 33, 133, - 227, 227, 33, 133, 228, 41, 33, 133, 245, 127, 33, 133, 228, 167, 33, - 133, 235, 237, 33, 133, 228, 139, 33, 133, 247, 51, 33, 133, 251, 40, 33, - 133, 238, 37, 33, 133, 230, 207, 33, 133, 237, 38, 33, 133, 247, 82, 33, - 133, 227, 238, 33, 133, 247, 151, 33, 133, 232, 203, 33, 133, 254, 57, - 33, 133, 239, 194, 33, 133, 231, 199, 33, 133, 251, 14, 33, 133, 251, 5, - 33, 133, 245, 63, 33, 133, 251, 218, 33, 133, 237, 117, 33, 133, 237, - 237, 33, 133, 231, 153, 33, 133, 236, 229, 33, 133, 231, 218, 33, 133, - 228, 9, 33, 133, 227, 216, 33, 133, 247, 220, 33, 133, 231, 201, 33, 133, - 254, 212, 33, 133, 235, 71, 33, 65, 226, 208, 183, 33, 65, 226, 208, 194, - 33, 65, 226, 208, 187, 33, 65, 226, 208, 192, 33, 65, 246, 245, 33, 65, - 246, 246, 118, 33, 65, 246, 246, 113, 33, 65, 246, 246, 166, 33, 65, 246, - 246, 158, 33, 65, 246, 246, 173, 33, 65, 246, 246, 183, 33, 65, 246, 246, - 194, 33, 65, 246, 246, 187, 33, 65, 246, 246, 192, 33, 65, 247, 63, 90, - 167, 14, 32, 239, 175, 90, 167, 14, 32, 247, 93, 90, 167, 14, 32, 237, - 19, 90, 167, 14, 32, 254, 136, 90, 167, 14, 32, 236, 252, 90, 167, 14, - 32, 239, 96, 90, 167, 14, 32, 239, 97, 90, 167, 14, 32, 254, 50, 90, 167, - 14, 32, 229, 172, 90, 167, 14, 32, 234, 91, 90, 167, 14, 32, 234, 233, - 90, 167, 14, 32, 250, 72, 37, 245, 85, 37, 247, 194, 37, 247, 159, 237, - 176, 237, 192, 53, 33, 48, 57, 33, 48, 74, 33, 48, 66, 33, 48, 72, 33, - 48, 73, 33, 48, 177, 33, 48, 238, 199, 33, 48, 238, 107, 33, 48, 239, 3, - 33, 48, 238, 150, 33, 48, 231, 31, 33, 48, 229, 15, 33, 48, 228, 6, 33, - 48, 230, 213, 33, 48, 228, 169, 33, 48, 227, 107, 33, 48, 226, 175, 33, - 48, 225, 250, 33, 48, 227, 44, 33, 48, 96, 33, 48, 236, 1, 33, 48, 235, - 89, 33, 48, 234, 206, 33, 48, 235, 162, 33, 48, 235, 6, 33, 48, 154, 33, - 48, 245, 75, 33, 48, 244, 145, 33, 48, 245, 121, 33, 48, 244, 227, 33, - 48, 198, 33, 48, 236, 157, 33, 48, 236, 66, 33, 48, 236, 235, 33, 48, - 236, 103, 33, 48, 191, 33, 48, 223, 158, 33, 48, 223, 183, 33, 48, 208, - 33, 48, 231, 180, 33, 48, 231, 70, 33, 48, 231, 244, 33, 48, 231, 122, - 33, 48, 224, 173, 33, 48, 224, 118, 33, 48, 224, 141, 33, 48, 224, 105, - 37, 254, 156, 37, 254, 88, 37, 254, 171, 37, 255, 57, 37, 239, 251, 37, - 239, 225, 37, 225, 119, 37, 247, 174, 37, 248, 33, 37, 234, 55, 37, 234, - 50, 37, 239, 55, 37, 239, 29, 37, 239, 27, 37, 246, 157, 37, 246, 164, - 37, 246, 37, 37, 246, 33, 37, 238, 48, 37, 246, 27, 37, 238, 184, 37, - 238, 183, 37, 238, 182, 37, 238, 181, 37, 245, 196, 37, 245, 195, 37, - 238, 88, 37, 238, 90, 37, 238, 255, 37, 238, 131, 37, 238, 137, 37, 231, - 16, 37, 230, 249, 37, 228, 219, 37, 229, 177, 37, 229, 176, 37, 250, 186, - 37, 250, 31, 37, 249, 141, 37, 226, 120, 37, 235, 233, 37, 234, 234, 37, - 245, 156, 37, 233, 238, 37, 233, 237, 37, 253, 68, 37, 233, 66, 37, 233, - 39, 37, 233, 40, 37, 252, 162, 37, 244, 144, 37, 244, 141, 37, 252, 65, - 37, 244, 129, 37, 245, 104, 37, 233, 105, 37, 233, 132, 37, 245, 91, 37, - 233, 130, 37, 233, 142, 37, 252, 228, 37, 232, 250, 37, 252, 128, 37, - 244, 219, 37, 232, 245, 37, 244, 215, 37, 244, 216, 37, 237, 47, 37, 237, - 44, 37, 237, 51, 37, 237, 9, 37, 237, 29, 37, 236, 133, 37, 236, 115, 37, - 236, 114, 37, 236, 221, 37, 236, 219, 37, 236, 222, 37, 224, 20, 37, 224, - 18, 37, 223, 150, 37, 231, 133, 37, 231, 137, 37, 231, 53, 37, 231, 48, - 37, 231, 217, 37, 231, 216, 37, 224, 150, 90, 167, 14, 32, 244, 155, 223, - 89, 90, 167, 14, 32, 244, 155, 118, 90, 167, 14, 32, 244, 155, 113, 90, - 167, 14, 32, 244, 155, 166, 90, 167, 14, 32, 244, 155, 158, 90, 167, 14, - 32, 244, 155, 173, 90, 167, 14, 32, 244, 155, 183, 90, 167, 14, 32, 244, - 155, 194, 90, 167, 14, 32, 244, 155, 187, 90, 167, 14, 32, 244, 155, 192, - 90, 167, 14, 32, 244, 155, 227, 23, 90, 167, 14, 32, 244, 155, 247, 252, - 90, 167, 14, 32, 244, 155, 225, 218, 90, 167, 14, 32, 244, 155, 226, 209, - 90, 167, 14, 32, 244, 155, 246, 238, 90, 167, 14, 32, 244, 155, 247, 67, - 90, 167, 14, 32, 244, 155, 228, 212, 90, 167, 14, 32, 244, 155, 229, 161, - 90, 167, 14, 32, 244, 155, 248, 18, 90, 167, 14, 32, 244, 155, 235, 59, - 90, 167, 14, 32, 244, 155, 225, 216, 90, 167, 14, 32, 244, 155, 225, 210, - 90, 167, 14, 32, 244, 155, 225, 206, 90, 167, 14, 32, 244, 155, 225, 207, - 90, 167, 14, 32, 244, 155, 225, 212, 37, 244, 150, 37, 250, 189, 37, 254, - 53, 37, 125, 37, 234, 6, 37, 233, 154, 37, 249, 163, 37, 249, 164, 228, - 118, 37, 249, 164, 250, 231, 37, 239, 192, 37, 247, 197, 235, 238, 245, - 105, 37, 247, 197, 235, 238, 227, 129, 37, 247, 197, 235, 238, 227, 86, - 37, 247, 197, 235, 238, 236, 218, 37, 251, 7, 37, 233, 242, 254, 192, 37, - 236, 1, 37, 236, 67, 57, 37, 198, 37, 177, 37, 239, 6, 37, 236, 249, 37, - 246, 145, 37, 252, 33, 37, 239, 5, 37, 233, 100, 37, 235, 141, 37, 236, - 67, 247, 130, 37, 236, 67, 214, 37, 236, 191, 37, 238, 229, 37, 244, 90, - 37, 238, 201, 37, 236, 159, 37, 246, 48, 37, 226, 177, 37, 236, 67, 149, - 37, 236, 110, 37, 249, 171, 37, 238, 161, 37, 247, 9, 37, 235, 20, 37, - 236, 67, 185, 37, 236, 107, 37, 251, 69, 37, 238, 155, 37, 236, 108, 228, - 118, 37, 251, 70, 228, 118, 37, 237, 69, 228, 118, 37, 238, 156, 228, - 118, 37, 236, 108, 250, 231, 37, 251, 70, 250, 231, 37, 237, 69, 250, - 231, 37, 238, 156, 250, 231, 37, 237, 69, 107, 193, 37, 237, 69, 107, - 231, 35, 228, 118, 37, 213, 37, 238, 126, 37, 236, 69, 37, 245, 248, 37, - 232, 18, 37, 232, 19, 107, 193, 37, 232, 19, 107, 231, 35, 228, 118, 37, - 232, 184, 37, 234, 207, 37, 236, 67, 193, 37, 236, 68, 37, 232, 158, 37, - 234, 179, 37, 236, 67, 196, 37, 236, 22, 37, 238, 81, 37, 236, 23, 236, - 221, 37, 232, 157, 37, 234, 178, 37, 236, 67, 224, 174, 37, 236, 20, 37, - 238, 79, 37, 236, 21, 236, 221, 37, 239, 77, 234, 81, 37, 237, 69, 234, - 81, 37, 254, 199, 37, 252, 117, 37, 251, 247, 37, 251, 232, 37, 252, 45, - 107, 238, 229, 37, 251, 68, 37, 250, 118, 37, 245, 183, 37, 154, 37, 244, - 151, 37, 240, 16, 37, 238, 168, 37, 238, 156, 252, 15, 37, 238, 109, 37, - 237, 146, 37, 237, 145, 37, 237, 139, 37, 237, 81, 37, 236, 250, 228, - 184, 37, 236, 132, 37, 236, 96, 37, 233, 98, 37, 233, 7, 37, 232, 229, - 37, 232, 228, 37, 228, 112, 37, 227, 202, 37, 224, 142, 37, 225, 65, 107, - 185, 37, 102, 107, 185, 90, 167, 14, 32, 250, 121, 118, 90, 167, 14, 32, - 250, 121, 113, 90, 167, 14, 32, 250, 121, 166, 90, 167, 14, 32, 250, 121, - 158, 90, 167, 14, 32, 250, 121, 173, 90, 167, 14, 32, 250, 121, 183, 90, - 167, 14, 32, 250, 121, 194, 90, 167, 14, 32, 250, 121, 187, 90, 167, 14, - 32, 250, 121, 192, 90, 167, 14, 32, 250, 121, 227, 23, 90, 167, 14, 32, - 250, 121, 247, 252, 90, 167, 14, 32, 250, 121, 225, 218, 90, 167, 14, 32, - 250, 121, 226, 209, 90, 167, 14, 32, 250, 121, 246, 238, 90, 167, 14, 32, - 250, 121, 247, 67, 90, 167, 14, 32, 250, 121, 228, 212, 90, 167, 14, 32, - 250, 121, 229, 161, 90, 167, 14, 32, 250, 121, 248, 18, 90, 167, 14, 32, - 250, 121, 235, 59, 90, 167, 14, 32, 250, 121, 225, 216, 90, 167, 14, 32, - 250, 121, 225, 210, 90, 167, 14, 32, 250, 121, 225, 206, 90, 167, 14, 32, - 250, 121, 225, 207, 90, 167, 14, 32, 250, 121, 225, 212, 90, 167, 14, 32, - 250, 121, 225, 213, 90, 167, 14, 32, 250, 121, 225, 208, 90, 167, 14, 32, - 250, 121, 225, 209, 90, 167, 14, 32, 250, 121, 225, 215, 90, 167, 14, 32, - 250, 121, 225, 211, 90, 167, 14, 32, 250, 121, 226, 207, 90, 167, 14, 32, - 250, 121, 226, 206, 37, 246, 177, 181, 32, 226, 240, 250, 251, 245, 112, - 181, 32, 226, 240, 231, 241, 248, 48, 181, 32, 249, 234, 254, 63, 226, - 240, 252, 225, 181, 32, 223, 168, 247, 5, 181, 32, 224, 168, 181, 32, - 251, 41, 181, 32, 226, 240, 254, 103, 181, 32, 244, 222, 226, 121, 181, - 32, 3, 227, 74, 181, 32, 226, 88, 181, 32, 233, 149, 181, 32, 228, 60, - 181, 32, 247, 84, 181, 32, 245, 233, 232, 238, 181, 32, 236, 99, 181, 32, - 247, 219, 181, 32, 247, 6, 181, 32, 224, 90, 234, 62, 226, 240, 250, 73, - 181, 32, 254, 140, 181, 32, 251, 25, 181, 32, 252, 156, 226, 187, 181, - 32, 245, 246, 181, 32, 228, 130, 254, 155, 181, 32, 231, 194, 181, 32, - 239, 246, 181, 32, 245, 233, 227, 74, 181, 32, 236, 73, 251, 9, 181, 32, - 245, 233, 232, 210, 181, 32, 226, 240, 255, 45, 224, 151, 181, 32, 226, - 240, 251, 86, 247, 46, 181, 32, 240, 2, 181, 32, 248, 86, 181, 32, 231, - 197, 181, 32, 245, 233, 232, 233, 181, 32, 232, 198, 181, 32, 250, 135, - 106, 226, 240, 237, 184, 181, 32, 226, 240, 247, 112, 181, 32, 234, 34, - 181, 32, 234, 93, 181, 32, 250, 51, 181, 32, 250, 69, 181, 32, 240, 12, - 181, 32, 252, 109, 181, 32, 251, 56, 180, 236, 223, 181, 32, 246, 152, - 226, 121, 181, 32, 232, 161, 225, 107, 181, 32, 234, 33, 181, 32, 226, - 240, 224, 135, 181, 32, 231, 189, 181, 32, 226, 240, 251, 253, 181, 32, - 226, 240, 254, 99, 226, 185, 181, 32, 226, 240, 239, 0, 228, 43, 236, 74, - 181, 32, 250, 29, 181, 32, 226, 240, 237, 11, 237, 48, 181, 32, 255, 46, - 181, 32, 226, 240, 224, 163, 181, 32, 226, 240, 246, 118, 224, 111, 181, - 32, 226, 240, 239, 102, 238, 24, 181, 32, 249, 193, 181, 32, 237, 177, - 181, 32, 239, 249, 226, 48, 181, 32, 3, 232, 210, 181, 32, 255, 9, 251, - 48, 181, 32, 252, 227, 251, 48, 8, 4, 239, 195, 8, 4, 239, 189, 8, 4, 74, - 8, 4, 239, 212, 8, 4, 240, 70, 8, 4, 240, 55, 8, 4, 240, 72, 8, 4, 240, - 71, 8, 4, 254, 62, 8, 4, 254, 36, 8, 4, 57, 8, 4, 254, 157, 8, 4, 225, - 117, 8, 4, 225, 120, 8, 4, 225, 118, 8, 4, 234, 19, 8, 4, 233, 253, 8, 4, - 73, 8, 4, 234, 45, 8, 4, 247, 152, 8, 4, 72, 8, 4, 224, 83, 8, 4, 252, - 157, 8, 4, 252, 154, 8, 4, 252, 181, 8, 4, 252, 165, 8, 4, 252, 175, 8, - 4, 252, 174, 8, 4, 252, 177, 8, 4, 252, 176, 8, 4, 253, 21, 8, 4, 253, - 18, 8, 4, 253, 70, 8, 4, 253, 37, 8, 4, 252, 73, 8, 4, 252, 77, 8, 4, - 252, 74, 8, 4, 252, 127, 8, 4, 252, 118, 8, 4, 252, 138, 8, 4, 252, 129, - 8, 4, 252, 193, 8, 4, 252, 238, 8, 4, 252, 205, 8, 4, 252, 63, 8, 4, 252, - 61, 8, 4, 252, 90, 8, 4, 252, 72, 8, 4, 252, 66, 8, 4, 252, 70, 8, 4, - 252, 49, 8, 4, 252, 48, 8, 4, 252, 54, 8, 4, 252, 52, 8, 4, 252, 50, 8, - 4, 252, 51, 8, 4, 233, 30, 8, 4, 233, 26, 8, 4, 233, 69, 8, 4, 233, 35, - 8, 4, 233, 44, 8, 4, 233, 64, 8, 4, 233, 62, 8, 4, 233, 167, 8, 4, 233, - 158, 8, 4, 213, 8, 4, 233, 197, 8, 4, 232, 166, 8, 4, 232, 168, 8, 4, - 232, 167, 8, 4, 232, 235, 8, 4, 232, 231, 8, 4, 233, 4, 8, 4, 232, 242, - 8, 4, 232, 160, 8, 4, 232, 159, 8, 4, 232, 173, 8, 4, 232, 165, 8, 4, - 232, 162, 8, 4, 232, 164, 8, 4, 232, 143, 8, 4, 232, 142, 8, 4, 232, 147, - 8, 4, 232, 146, 8, 4, 232, 144, 8, 4, 232, 145, 8, 4, 253, 3, 8, 4, 253, - 2, 8, 4, 253, 9, 8, 4, 253, 4, 8, 4, 253, 6, 8, 4, 253, 5, 8, 4, 253, 8, - 8, 4, 253, 7, 8, 4, 253, 14, 8, 4, 253, 13, 8, 4, 253, 16, 8, 4, 253, 15, - 8, 4, 252, 250, 8, 4, 252, 252, 8, 4, 252, 251, 8, 4, 252, 255, 8, 4, - 252, 254, 8, 4, 253, 1, 8, 4, 253, 0, 8, 4, 253, 10, 8, 4, 253, 12, 8, 4, - 253, 11, 8, 4, 252, 246, 8, 4, 252, 245, 8, 4, 252, 253, 8, 4, 252, 249, - 8, 4, 252, 247, 8, 4, 252, 248, 8, 4, 252, 242, 8, 4, 252, 241, 8, 4, - 252, 244, 8, 4, 252, 243, 8, 4, 235, 208, 8, 4, 235, 207, 8, 4, 235, 213, - 8, 4, 235, 209, 8, 4, 235, 210, 8, 4, 235, 212, 8, 4, 235, 211, 8, 4, - 235, 215, 8, 4, 235, 214, 8, 4, 235, 217, 8, 4, 235, 216, 8, 4, 235, 204, - 8, 4, 235, 203, 8, 4, 235, 206, 8, 4, 235, 205, 8, 4, 235, 198, 8, 4, - 235, 197, 8, 4, 235, 202, 8, 4, 235, 201, 8, 4, 235, 199, 8, 4, 235, 200, - 8, 4, 235, 192, 8, 4, 235, 191, 8, 4, 235, 196, 8, 4, 235, 195, 8, 4, - 235, 193, 8, 4, 235, 194, 8, 4, 245, 13, 8, 4, 245, 12, 8, 4, 245, 18, 8, - 4, 245, 14, 8, 4, 245, 15, 8, 4, 245, 17, 8, 4, 245, 16, 8, 4, 245, 20, - 8, 4, 245, 19, 8, 4, 245, 22, 8, 4, 245, 21, 8, 4, 245, 4, 8, 4, 245, 6, - 8, 4, 245, 5, 8, 4, 245, 9, 8, 4, 245, 8, 8, 4, 245, 11, 8, 4, 245, 10, - 8, 4, 245, 0, 8, 4, 244, 255, 8, 4, 245, 7, 8, 4, 245, 3, 8, 4, 245, 1, - 8, 4, 245, 2, 8, 4, 244, 250, 8, 4, 244, 254, 8, 4, 244, 253, 8, 4, 244, - 251, 8, 4, 244, 252, 8, 4, 236, 112, 8, 4, 236, 111, 8, 4, 236, 157, 8, - 4, 236, 117, 8, 4, 236, 139, 8, 4, 236, 151, 8, 4, 236, 150, 8, 4, 237, - 2, 8, 4, 236, 254, 8, 4, 198, 8, 4, 237, 28, 8, 4, 236, 43, 8, 4, 236, - 42, 8, 4, 236, 45, 8, 4, 236, 44, 8, 4, 236, 78, 8, 4, 236, 70, 8, 4, - 236, 103, 8, 4, 236, 82, 8, 4, 236, 193, 8, 4, 236, 235, 8, 4, 236, 27, - 8, 4, 236, 24, 8, 4, 236, 66, 8, 4, 236, 39, 8, 4, 236, 34, 8, 4, 236, - 37, 8, 4, 236, 7, 8, 4, 236, 6, 8, 4, 236, 11, 8, 4, 236, 9, 8, 4, 247, - 39, 8, 4, 247, 35, 8, 4, 247, 70, 8, 4, 247, 47, 8, 4, 247, 106, 8, 4, - 247, 100, 8, 4, 247, 129, 8, 4, 247, 108, 8, 4, 246, 236, 8, 4, 247, 7, - 8, 4, 246, 255, 8, 4, 246, 208, 8, 4, 246, 207, 8, 4, 246, 219, 8, 4, - 246, 213, 8, 4, 246, 211, 8, 4, 246, 212, 8, 4, 246, 198, 8, 4, 246, 197, - 8, 4, 246, 201, 8, 4, 246, 199, 8, 4, 224, 208, 8, 4, 224, 207, 8, 4, - 224, 228, 8, 4, 224, 217, 8, 4, 224, 223, 8, 4, 224, 221, 8, 4, 224, 225, - 8, 4, 224, 224, 8, 4, 225, 49, 8, 4, 225, 45, 8, 4, 225, 64, 8, 4, 225, - 59, 8, 4, 224, 196, 8, 4, 224, 192, 8, 4, 224, 206, 8, 4, 224, 197, 8, 4, - 224, 229, 8, 4, 225, 34, 8, 4, 224, 185, 8, 4, 224, 184, 8, 4, 224, 190, - 8, 4, 224, 188, 8, 4, 224, 186, 8, 4, 224, 187, 8, 4, 224, 178, 8, 4, - 224, 177, 8, 4, 224, 182, 8, 4, 224, 181, 8, 4, 224, 179, 8, 4, 224, 180, - 8, 4, 249, 190, 8, 4, 249, 178, 8, 4, 250, 4, 8, 4, 249, 207, 8, 4, 249, - 239, 8, 4, 249, 243, 8, 4, 249, 242, 8, 4, 250, 127, 8, 4, 250, 122, 8, - 4, 250, 189, 8, 4, 250, 146, 8, 4, 248, 91, 8, 4, 248, 92, 8, 4, 249, - 140, 8, 4, 248, 123, 8, 4, 249, 161, 8, 4, 249, 142, 8, 4, 250, 27, 8, 4, - 250, 77, 8, 4, 250, 39, 8, 4, 248, 84, 8, 4, 248, 82, 8, 4, 248, 107, 8, - 4, 248, 90, 8, 4, 248, 85, 8, 4, 248, 88, 8, 4, 226, 144, 8, 4, 226, 140, - 8, 4, 226, 175, 8, 4, 226, 150, 8, 4, 226, 168, 8, 4, 226, 170, 8, 4, - 226, 169, 8, 4, 227, 66, 8, 4, 227, 53, 8, 4, 227, 107, 8, 4, 227, 70, 8, - 4, 225, 240, 8, 4, 225, 239, 8, 4, 225, 242, 8, 4, 225, 241, 8, 4, 226, - 99, 8, 4, 226, 97, 8, 4, 96, 8, 4, 226, 105, 8, 4, 227, 0, 8, 4, 227, 44, - 8, 4, 227, 17, 8, 4, 225, 228, 8, 4, 225, 225, 8, 4, 225, 250, 8, 4, 225, - 238, 8, 4, 225, 229, 8, 4, 225, 236, 8, 4, 250, 94, 8, 4, 250, 93, 8, 4, - 250, 99, 8, 4, 250, 95, 8, 4, 250, 96, 8, 4, 250, 98, 8, 4, 250, 97, 8, - 4, 250, 110, 8, 4, 250, 109, 8, 4, 250, 117, 8, 4, 250, 111, 8, 4, 250, - 84, 8, 4, 250, 86, 8, 4, 250, 85, 8, 4, 250, 89, 8, 4, 250, 88, 8, 4, - 250, 92, 8, 4, 250, 90, 8, 4, 250, 102, 8, 4, 250, 105, 8, 4, 250, 103, - 8, 4, 250, 80, 8, 4, 250, 79, 8, 4, 250, 87, 8, 4, 250, 83, 8, 4, 250, - 81, 8, 4, 250, 82, 8, 4, 235, 177, 8, 4, 235, 176, 8, 4, 235, 181, 8, 4, - 235, 178, 8, 4, 235, 179, 8, 4, 235, 180, 8, 4, 235, 187, 8, 4, 235, 186, - 8, 4, 235, 189, 8, 4, 235, 188, 8, 4, 235, 171, 8, 4, 235, 170, 8, 4, - 235, 175, 8, 4, 235, 172, 8, 4, 235, 182, 8, 4, 235, 185, 8, 4, 235, 183, - 8, 4, 235, 165, 8, 4, 235, 164, 8, 4, 235, 169, 8, 4, 235, 168, 8, 4, - 235, 166, 8, 4, 235, 167, 8, 4, 244, 236, 8, 4, 244, 235, 8, 4, 244, 242, - 8, 4, 244, 237, 8, 4, 244, 239, 8, 4, 244, 238, 8, 4, 244, 241, 8, 4, - 244, 240, 8, 4, 244, 247, 8, 4, 244, 246, 8, 4, 244, 249, 8, 4, 244, 248, - 8, 4, 244, 230, 8, 4, 244, 231, 8, 4, 244, 233, 8, 4, 244, 232, 8, 4, - 244, 234, 8, 4, 244, 243, 8, 4, 244, 245, 8, 4, 244, 244, 8, 4, 244, 229, - 8, 4, 235, 52, 8, 4, 235, 51, 8, 4, 235, 89, 8, 4, 235, 55, 8, 4, 235, - 73, 8, 4, 235, 85, 8, 4, 235, 84, 8, 4, 235, 220, 8, 4, 236, 1, 8, 4, - 235, 231, 8, 4, 234, 187, 8, 4, 234, 189, 8, 4, 234, 188, 8, 4, 234, 242, - 8, 4, 234, 231, 8, 4, 235, 6, 8, 4, 234, 249, 8, 4, 235, 143, 8, 4, 235, - 162, 8, 4, 235, 151, 8, 4, 234, 183, 8, 4, 234, 180, 8, 4, 234, 206, 8, - 4, 234, 186, 8, 4, 234, 184, 8, 4, 234, 185, 8, 4, 245, 42, 8, 4, 245, - 41, 8, 4, 245, 47, 8, 4, 245, 43, 8, 4, 245, 44, 8, 4, 245, 46, 8, 4, - 245, 45, 8, 4, 245, 52, 8, 4, 245, 51, 8, 4, 245, 54, 8, 4, 245, 53, 8, - 4, 245, 34, 8, 4, 245, 36, 8, 4, 245, 35, 8, 4, 245, 38, 8, 4, 245, 40, - 8, 4, 245, 39, 8, 4, 245, 48, 8, 4, 245, 50, 8, 4, 245, 49, 8, 4, 245, - 30, 8, 4, 245, 29, 8, 4, 245, 37, 8, 4, 245, 33, 8, 4, 245, 31, 8, 4, - 245, 32, 8, 4, 245, 24, 8, 4, 245, 23, 8, 4, 245, 28, 8, 4, 245, 27, 8, - 4, 245, 25, 8, 4, 245, 26, 8, 4, 237, 157, 8, 4, 237, 153, 8, 4, 237, - 193, 8, 4, 237, 161, 8, 4, 237, 187, 8, 4, 237, 186, 8, 4, 237, 189, 8, - 4, 237, 188, 8, 4, 238, 4, 8, 4, 237, 252, 8, 4, 238, 43, 8, 4, 238, 10, - 8, 4, 237, 96, 8, 4, 237, 95, 8, 4, 237, 98, 8, 4, 237, 97, 8, 4, 237, - 120, 8, 4, 237, 115, 8, 4, 237, 143, 8, 4, 237, 122, 8, 4, 237, 208, 8, - 4, 237, 243, 8, 4, 237, 215, 8, 4, 237, 91, 8, 4, 237, 90, 8, 4, 237, - 110, 8, 4, 237, 94, 8, 4, 237, 92, 8, 4, 237, 93, 8, 4, 237, 73, 8, 4, - 237, 72, 8, 4, 237, 80, 8, 4, 237, 76, 8, 4, 237, 74, 8, 4, 237, 75, 8, - 4, 246, 23, 8, 4, 246, 22, 8, 4, 246, 46, 8, 4, 246, 32, 8, 4, 246, 39, - 8, 4, 246, 38, 8, 4, 246, 41, 8, 4, 246, 40, 8, 4, 246, 154, 8, 4, 246, - 149, 8, 4, 246, 193, 8, 4, 246, 163, 8, 4, 245, 201, 8, 4, 245, 200, 8, - 4, 245, 203, 8, 4, 245, 202, 8, 4, 245, 251, 8, 4, 245, 249, 8, 4, 246, - 11, 8, 4, 246, 3, 8, 4, 246, 105, 8, 4, 246, 103, 8, 4, 246, 131, 8, 4, - 246, 115, 8, 4, 245, 191, 8, 4, 245, 190, 8, 4, 245, 218, 8, 4, 245, 199, - 8, 4, 245, 192, 8, 4, 245, 198, 8, 4, 238, 176, 8, 4, 238, 175, 8, 4, - 238, 199, 8, 4, 238, 186, 8, 4, 238, 193, 8, 4, 238, 195, 8, 4, 238, 194, - 8, 4, 239, 20, 8, 4, 239, 11, 8, 4, 177, 8, 4, 239, 41, 8, 4, 238, 94, 8, - 4, 238, 96, 8, 4, 238, 95, 8, 4, 238, 130, 8, 4, 238, 127, 8, 4, 238, - 150, 8, 4, 238, 136, 8, 4, 238, 236, 8, 4, 238, 234, 8, 4, 239, 3, 8, 4, - 238, 238, 8, 4, 238, 84, 8, 4, 238, 82, 8, 4, 238, 107, 8, 4, 238, 93, 8, - 4, 238, 87, 8, 4, 238, 91, 8, 4, 246, 87, 8, 4, 246, 86, 8, 4, 246, 91, - 8, 4, 246, 88, 8, 4, 246, 90, 8, 4, 246, 89, 8, 4, 246, 98, 8, 4, 246, - 97, 8, 4, 246, 101, 8, 4, 246, 99, 8, 4, 246, 78, 8, 4, 246, 77, 8, 4, - 246, 80, 8, 4, 246, 79, 8, 4, 246, 83, 8, 4, 246, 82, 8, 4, 246, 85, 8, - 4, 246, 84, 8, 4, 246, 93, 8, 4, 246, 92, 8, 4, 246, 96, 8, 4, 246, 94, - 8, 4, 246, 73, 8, 4, 246, 72, 8, 4, 246, 81, 8, 4, 246, 76, 8, 4, 246, - 74, 8, 4, 246, 75, 8, 4, 236, 175, 8, 4, 236, 176, 8, 4, 236, 188, 8, 4, - 236, 187, 8, 4, 236, 190, 8, 4, 236, 189, 8, 4, 236, 166, 8, 4, 236, 168, - 8, 4, 236, 167, 8, 4, 236, 171, 8, 4, 236, 170, 8, 4, 236, 173, 8, 4, - 236, 172, 8, 4, 236, 177, 8, 4, 236, 179, 8, 4, 236, 178, 8, 4, 236, 162, - 8, 4, 236, 161, 8, 4, 236, 169, 8, 4, 236, 165, 8, 4, 236, 163, 8, 4, - 236, 164, 8, 4, 244, 107, 8, 4, 244, 106, 8, 4, 244, 113, 8, 4, 244, 108, - 8, 4, 244, 110, 8, 4, 244, 109, 8, 4, 244, 112, 8, 4, 244, 111, 8, 4, - 244, 118, 8, 4, 244, 117, 8, 4, 244, 120, 8, 4, 244, 119, 8, 4, 244, 99, - 8, 4, 244, 98, 8, 4, 244, 101, 8, 4, 244, 100, 8, 4, 244, 103, 8, 4, 244, - 102, 8, 4, 244, 105, 8, 4, 244, 104, 8, 4, 244, 114, 8, 4, 244, 116, 8, - 4, 244, 115, 8, 4, 235, 111, 8, 4, 235, 113, 8, 4, 235, 112, 8, 4, 235, - 130, 8, 4, 235, 129, 8, 4, 235, 137, 8, 4, 235, 132, 8, 4, 235, 96, 8, 4, - 235, 95, 8, 4, 235, 97, 8, 4, 235, 101, 8, 4, 235, 100, 8, 4, 235, 107, - 8, 4, 235, 102, 8, 4, 235, 124, 8, 4, 235, 128, 8, 4, 235, 125, 8, 4, - 245, 57, 8, 4, 245, 64, 8, 4, 245, 71, 8, 4, 245, 132, 8, 4, 245, 126, 8, - 4, 154, 8, 4, 245, 142, 8, 4, 244, 131, 8, 4, 244, 130, 8, 4, 244, 133, - 8, 4, 244, 132, 8, 4, 244, 157, 8, 4, 244, 152, 8, 4, 244, 227, 8, 4, - 244, 214, 8, 4, 245, 87, 8, 4, 245, 121, 8, 4, 245, 97, 8, 4, 224, 154, - 8, 4, 224, 143, 8, 4, 224, 173, 8, 4, 224, 162, 8, 4, 224, 78, 8, 4, 224, - 80, 8, 4, 224, 79, 8, 4, 224, 88, 8, 4, 224, 105, 8, 4, 224, 93, 8, 4, - 224, 128, 8, 4, 224, 141, 8, 4, 224, 132, 8, 4, 223, 34, 8, 4, 223, 33, - 8, 4, 223, 47, 8, 4, 223, 35, 8, 4, 223, 40, 8, 4, 223, 42, 8, 4, 223, - 41, 8, 4, 223, 104, 8, 4, 223, 101, 8, 4, 223, 117, 8, 4, 223, 107, 8, 4, - 223, 12, 8, 4, 223, 14, 8, 4, 223, 13, 8, 4, 223, 23, 8, 4, 223, 22, 8, - 4, 223, 27, 8, 4, 223, 24, 8, 4, 223, 87, 8, 4, 223, 97, 8, 4, 223, 91, - 8, 4, 223, 8, 8, 4, 223, 7, 8, 4, 223, 19, 8, 4, 223, 11, 8, 4, 223, 9, - 8, 4, 223, 10, 8, 4, 222, 255, 8, 4, 222, 254, 8, 4, 223, 4, 8, 4, 223, - 2, 8, 4, 223, 0, 8, 4, 223, 1, 8, 4, 251, 100, 8, 4, 251, 97, 8, 4, 251, - 118, 8, 4, 251, 108, 8, 4, 251, 115, 8, 4, 251, 111, 8, 4, 251, 117, 8, - 4, 251, 116, 8, 4, 252, 0, 8, 4, 251, 250, 8, 4, 252, 39, 8, 4, 252, 16, - 8, 4, 250, 227, 8, 4, 250, 229, 8, 4, 250, 228, 8, 4, 251, 3, 8, 4, 250, - 252, 8, 4, 251, 68, 8, 4, 251, 16, 8, 4, 251, 206, 8, 4, 251, 231, 8, 4, - 251, 209, 8, 4, 250, 212, 8, 4, 250, 211, 8, 4, 250, 235, 8, 4, 250, 226, - 8, 4, 250, 215, 8, 4, 250, 225, 8, 4, 250, 194, 8, 4, 250, 193, 8, 4, - 250, 202, 8, 4, 250, 199, 8, 4, 250, 195, 8, 4, 250, 197, 8, 4, 222, 238, - 8, 4, 222, 237, 8, 4, 222, 244, 8, 4, 222, 239, 8, 4, 222, 241, 8, 4, - 222, 240, 8, 4, 222, 243, 8, 4, 222, 242, 8, 4, 222, 250, 8, 4, 222, 249, - 8, 4, 222, 253, 8, 4, 222, 251, 8, 4, 222, 234, 8, 4, 222, 236, 8, 4, - 222, 235, 8, 4, 222, 245, 8, 4, 222, 248, 8, 4, 222, 246, 8, 4, 222, 229, - 8, 4, 222, 233, 8, 4, 222, 232, 8, 4, 222, 230, 8, 4, 222, 231, 8, 4, - 222, 224, 8, 4, 222, 223, 8, 4, 222, 228, 8, 4, 222, 227, 8, 4, 222, 225, - 8, 4, 222, 226, 8, 4, 234, 127, 8, 4, 234, 126, 8, 4, 234, 132, 8, 4, - 234, 128, 8, 4, 234, 129, 8, 4, 234, 131, 8, 4, 234, 130, 8, 4, 234, 136, - 8, 4, 234, 135, 8, 4, 234, 138, 8, 4, 234, 137, 8, 4, 234, 121, 8, 4, - 234, 122, 8, 4, 234, 124, 8, 4, 234, 125, 8, 4, 234, 133, 8, 4, 234, 134, - 8, 4, 234, 117, 8, 4, 234, 123, 8, 4, 234, 120, 8, 4, 234, 118, 8, 4, - 234, 119, 8, 4, 234, 112, 8, 4, 234, 111, 8, 4, 234, 116, 8, 4, 234, 115, - 8, 4, 234, 113, 8, 4, 234, 114, 8, 4, 228, 218, 8, 4, 183, 8, 4, 229, 15, - 8, 4, 228, 220, 8, 4, 229, 8, 8, 4, 229, 10, 8, 4, 229, 9, 8, 4, 230, - 240, 8, 4, 230, 236, 8, 4, 231, 31, 8, 4, 230, 246, 8, 4, 227, 223, 8, 4, - 227, 225, 8, 4, 227, 224, 8, 4, 228, 157, 8, 4, 228, 148, 8, 4, 228, 169, - 8, 4, 228, 158, 8, 4, 229, 157, 8, 4, 230, 213, 8, 4, 229, 175, 8, 4, - 227, 204, 8, 4, 227, 203, 8, 4, 228, 6, 8, 4, 227, 222, 8, 4, 227, 206, - 8, 4, 227, 213, 8, 4, 227, 123, 8, 4, 227, 122, 8, 4, 227, 185, 8, 4, - 227, 128, 8, 4, 227, 124, 8, 4, 227, 127, 8, 4, 228, 86, 8, 4, 228, 85, - 8, 4, 228, 91, 8, 4, 228, 87, 8, 4, 228, 88, 8, 4, 228, 90, 8, 4, 228, - 89, 8, 4, 228, 97, 8, 4, 228, 96, 8, 4, 228, 110, 8, 4, 228, 98, 8, 4, - 228, 82, 8, 4, 228, 81, 8, 4, 228, 84, 8, 4, 228, 83, 8, 4, 228, 92, 8, - 4, 228, 95, 8, 4, 228, 93, 8, 4, 228, 78, 8, 4, 228, 77, 8, 4, 228, 80, - 8, 4, 228, 79, 8, 4, 228, 72, 8, 4, 228, 71, 8, 4, 228, 76, 8, 4, 228, - 75, 8, 4, 228, 73, 8, 4, 228, 74, 8, 4, 223, 80, 8, 4, 223, 79, 8, 4, - 223, 85, 8, 4, 223, 82, 8, 4, 223, 62, 8, 4, 223, 64, 8, 4, 223, 63, 8, - 4, 223, 67, 8, 4, 223, 66, 8, 4, 223, 70, 8, 4, 223, 68, 8, 4, 223, 74, - 8, 4, 223, 73, 8, 4, 223, 77, 8, 4, 223, 75, 8, 4, 223, 58, 8, 4, 223, - 57, 8, 4, 223, 65, 8, 4, 223, 61, 8, 4, 223, 59, 8, 4, 223, 60, 8, 4, - 223, 50, 8, 4, 223, 49, 8, 4, 223, 54, 8, 4, 223, 53, 8, 4, 223, 51, 8, - 4, 223, 52, 8, 4, 251, 187, 8, 4, 251, 184, 8, 4, 251, 204, 8, 4, 251, - 193, 8, 4, 251, 132, 8, 4, 251, 131, 8, 4, 251, 134, 8, 4, 251, 133, 8, - 4, 251, 144, 8, 4, 251, 143, 8, 4, 251, 150, 8, 4, 251, 146, 8, 4, 251, - 174, 8, 4, 251, 172, 8, 4, 251, 182, 8, 4, 251, 176, 8, 4, 251, 126, 8, - 4, 251, 136, 8, 4, 251, 130, 8, 4, 251, 127, 8, 4, 251, 129, 8, 4, 251, - 120, 8, 4, 251, 119, 8, 4, 251, 124, 8, 4, 251, 123, 8, 4, 251, 121, 8, - 4, 251, 122, 8, 4, 231, 98, 8, 4, 231, 99, 8, 4, 231, 85, 8, 4, 231, 86, - 8, 4, 231, 89, 8, 4, 231, 88, 8, 4, 231, 91, 8, 4, 231, 90, 8, 4, 231, - 93, 8, 4, 231, 92, 8, 4, 231, 97, 8, 4, 231, 94, 8, 4, 231, 81, 8, 4, - 231, 80, 8, 4, 231, 87, 8, 4, 231, 84, 8, 4, 231, 82, 8, 4, 231, 83, 8, - 4, 231, 75, 8, 4, 231, 74, 8, 4, 231, 79, 8, 4, 231, 78, 8, 4, 231, 76, - 8, 4, 231, 77, 8, 4, 234, 228, 8, 4, 234, 227, 8, 4, 234, 230, 8, 4, 234, - 229, 8, 4, 234, 220, 8, 4, 234, 222, 8, 4, 234, 221, 8, 4, 234, 224, 8, - 4, 234, 223, 8, 4, 234, 226, 8, 4, 234, 225, 8, 4, 234, 215, 8, 4, 234, - 214, 8, 4, 234, 219, 8, 4, 234, 218, 8, 4, 234, 216, 8, 4, 234, 217, 8, - 4, 234, 209, 8, 4, 234, 208, 8, 4, 234, 213, 8, 4, 234, 212, 8, 4, 234, - 210, 8, 4, 234, 211, 8, 4, 229, 120, 8, 4, 229, 117, 8, 4, 229, 146, 8, - 4, 229, 129, 8, 4, 229, 36, 8, 4, 229, 38, 8, 4, 229, 37, 8, 4, 229, 49, - 8, 4, 229, 47, 8, 4, 229, 71, 8, 4, 229, 64, 8, 4, 229, 94, 8, 4, 229, - 92, 8, 4, 229, 114, 8, 4, 229, 101, 8, 4, 229, 32, 8, 4, 229, 31, 8, 4, - 229, 43, 8, 4, 229, 35, 8, 4, 229, 33, 8, 4, 229, 34, 8, 4, 229, 18, 8, - 4, 229, 17, 8, 4, 229, 23, 8, 4, 229, 21, 8, 4, 229, 19, 8, 4, 229, 20, - 8, 4, 231, 253, 8, 4, 231, 251, 8, 4, 208, 8, 4, 232, 1, 8, 4, 231, 56, - 8, 4, 231, 58, 8, 4, 231, 57, 8, 4, 231, 107, 8, 4, 231, 101, 8, 4, 231, - 122, 8, 4, 231, 110, 8, 4, 231, 188, 8, 4, 231, 244, 8, 4, 231, 215, 8, - 4, 231, 49, 8, 4, 231, 47, 8, 4, 231, 70, 8, 4, 231, 55, 8, 4, 231, 51, - 8, 4, 231, 52, 8, 4, 231, 38, 8, 4, 231, 37, 8, 4, 231, 43, 8, 4, 231, - 41, 8, 4, 231, 39, 8, 4, 231, 40, 8, 4, 239, 147, 8, 4, 239, 146, 8, 4, - 239, 156, 8, 4, 239, 148, 8, 4, 239, 152, 8, 4, 239, 151, 8, 4, 239, 154, - 8, 4, 239, 153, 8, 4, 239, 92, 8, 4, 239, 91, 8, 4, 239, 94, 8, 4, 239, - 93, 8, 4, 239, 105, 8, 4, 239, 104, 8, 4, 239, 117, 8, 4, 239, 107, 8, 4, - 239, 86, 8, 4, 239, 85, 8, 4, 239, 101, 8, 4, 239, 90, 8, 4, 239, 87, 8, - 4, 239, 88, 8, 4, 239, 79, 8, 4, 239, 78, 8, 4, 239, 83, 8, 4, 239, 82, - 8, 4, 239, 80, 8, 4, 239, 81, 8, 4, 232, 97, 8, 4, 232, 96, 8, 4, 232, - 104, 8, 4, 232, 98, 8, 4, 232, 101, 8, 4, 232, 100, 8, 4, 232, 103, 8, 4, - 232, 102, 8, 4, 232, 58, 8, 4, 232, 55, 8, 4, 232, 60, 8, 4, 232, 59, 8, - 4, 232, 87, 8, 4, 232, 86, 8, 4, 232, 95, 8, 4, 232, 89, 8, 4, 232, 50, - 8, 4, 232, 46, 8, 4, 232, 84, 8, 4, 232, 54, 8, 4, 232, 52, 8, 4, 232, - 53, 8, 4, 232, 30, 8, 4, 232, 28, 8, 4, 232, 40, 8, 4, 232, 33, 8, 4, - 232, 31, 8, 4, 232, 32, 8, 4, 239, 136, 8, 4, 239, 135, 8, 4, 239, 142, - 8, 4, 239, 137, 8, 4, 239, 139, 8, 4, 239, 138, 8, 4, 239, 141, 8, 4, - 239, 140, 8, 4, 239, 127, 8, 4, 239, 129, 8, 4, 239, 128, 8, 4, 239, 132, - 8, 4, 239, 131, 8, 4, 239, 134, 8, 4, 239, 133, 8, 4, 239, 123, 8, 4, - 239, 122, 8, 4, 239, 130, 8, 4, 239, 126, 8, 4, 239, 124, 8, 4, 239, 125, - 8, 4, 239, 119, 8, 4, 239, 118, 8, 4, 239, 121, 8, 4, 239, 120, 8, 4, - 235, 40, 8, 4, 235, 39, 8, 4, 235, 46, 8, 4, 235, 41, 8, 4, 235, 43, 8, - 4, 235, 42, 8, 4, 235, 45, 8, 4, 235, 44, 8, 4, 235, 31, 8, 4, 235, 32, - 8, 4, 235, 35, 8, 4, 235, 34, 8, 4, 235, 38, 8, 4, 235, 36, 8, 4, 235, - 27, 8, 4, 235, 33, 8, 4, 235, 30, 8, 4, 235, 28, 8, 4, 235, 29, 8, 4, - 235, 22, 8, 4, 235, 21, 8, 4, 235, 26, 8, 4, 235, 25, 8, 4, 235, 23, 8, - 4, 235, 24, 8, 4, 234, 155, 8, 4, 234, 154, 8, 4, 234, 163, 8, 4, 234, - 157, 8, 4, 234, 160, 8, 4, 234, 159, 8, 4, 234, 162, 8, 4, 234, 161, 8, - 4, 234, 143, 8, 4, 234, 145, 8, 4, 234, 144, 8, 4, 234, 148, 8, 4, 234, - 147, 8, 4, 234, 152, 8, 4, 234, 149, 8, 4, 234, 141, 8, 4, 234, 140, 8, - 4, 234, 146, 8, 4, 234, 142, 8, 4, 224, 57, 8, 4, 224, 56, 8, 4, 224, 64, - 8, 4, 224, 59, 8, 4, 224, 61, 8, 4, 224, 60, 8, 4, 224, 63, 8, 4, 224, - 62, 8, 4, 224, 46, 8, 4, 224, 47, 8, 4, 224, 51, 8, 4, 224, 50, 8, 4, - 224, 55, 8, 4, 224, 53, 8, 4, 224, 29, 8, 4, 224, 27, 8, 4, 224, 39, 8, - 4, 224, 32, 8, 4, 224, 30, 8, 4, 224, 31, 8, 4, 223, 189, 8, 4, 223, 187, - 8, 4, 223, 202, 8, 4, 223, 190, 8, 4, 223, 197, 8, 4, 223, 196, 8, 4, - 223, 199, 8, 4, 223, 198, 8, 4, 223, 145, 8, 4, 223, 144, 8, 4, 223, 147, - 8, 4, 223, 146, 8, 4, 223, 169, 8, 4, 223, 166, 8, 4, 223, 183, 8, 4, - 223, 171, 8, 4, 223, 138, 8, 4, 223, 136, 8, 4, 223, 158, 8, 4, 223, 143, - 8, 4, 223, 141, 8, 4, 223, 142, 8, 4, 223, 122, 8, 4, 223, 121, 8, 4, - 223, 127, 8, 4, 223, 125, 8, 4, 223, 123, 8, 4, 223, 124, 8, 29, 232, 87, - 8, 29, 237, 193, 8, 29, 238, 176, 8, 29, 234, 157, 8, 29, 250, 199, 8, - 29, 228, 91, 8, 29, 246, 84, 8, 29, 246, 115, 8, 29, 236, 157, 8, 29, - 244, 107, 8, 29, 237, 75, 8, 29, 252, 246, 8, 29, 236, 82, 8, 29, 223, - 183, 8, 29, 232, 160, 8, 29, 244, 101, 8, 29, 227, 66, 8, 29, 246, 193, - 8, 29, 223, 11, 8, 29, 250, 194, 8, 29, 250, 82, 8, 29, 252, 70, 8, 29, - 246, 80, 8, 29, 234, 149, 8, 29, 225, 250, 8, 29, 234, 45, 8, 29, 239, - 123, 8, 29, 223, 23, 8, 29, 232, 143, 8, 29, 245, 11, 8, 29, 223, 189, 8, - 29, 224, 187, 8, 29, 229, 23, 8, 29, 225, 34, 8, 29, 223, 117, 8, 29, - 239, 117, 8, 29, 234, 120, 8, 29, 239, 121, 8, 29, 245, 251, 8, 29, 239, - 141, 8, 29, 224, 105, 8, 29, 248, 107, 8, 29, 229, 34, 8, 29, 237, 189, - 8, 29, 250, 202, 8, 29, 250, 228, 8, 29, 251, 108, 8, 29, 244, 104, 8, - 29, 229, 120, 8, 29, 223, 10, 8, 29, 229, 64, 8, 29, 251, 182, 8, 29, - 222, 241, 8, 29, 235, 212, 8, 29, 239, 3, 34, 4, 248, 35, 34, 4, 248, 32, - 34, 4, 245, 109, 34, 4, 224, 138, 34, 4, 224, 137, 34, 4, 233, 144, 34, - 4, 252, 188, 34, 4, 252, 232, 34, 4, 236, 243, 34, 4, 238, 123, 34, 4, - 236, 184, 34, 4, 246, 141, 34, 4, 247, 92, 34, 4, 225, 38, 34, 4, 227, - 37, 34, 4, 226, 238, 34, 4, 250, 16, 34, 4, 250, 13, 34, 4, 237, 239, 34, - 4, 231, 229, 34, 4, 250, 67, 34, 4, 235, 184, 34, 4, 230, 203, 34, 4, - 229, 112, 34, 4, 223, 95, 34, 4, 223, 76, 34, 4, 251, 225, 34, 4, 239, - 169, 34, 4, 235, 47, 34, 4, 223, 225, 34, 4, 239, 2, 34, 4, 235, 120, 34, - 4, 246, 125, 34, 4, 236, 226, 34, 4, 235, 160, 34, 4, 234, 168, 34, 4, - 74, 34, 4, 240, 16, 34, 4, 245, 75, 34, 4, 245, 60, 34, 4, 224, 118, 34, - 4, 224, 112, 34, 4, 233, 69, 34, 4, 252, 186, 34, 4, 252, 181, 34, 4, - 236, 242, 34, 4, 238, 121, 34, 4, 236, 183, 34, 4, 246, 139, 34, 4, 247, - 70, 34, 4, 224, 228, 34, 4, 226, 175, 34, 4, 226, 220, 34, 4, 250, 8, 34, - 4, 250, 12, 34, 4, 237, 193, 34, 4, 231, 180, 34, 4, 250, 4, 34, 4, 235, - 181, 34, 4, 229, 15, 34, 4, 229, 90, 34, 4, 223, 47, 34, 4, 223, 72, 34, - 4, 251, 118, 34, 4, 239, 156, 34, 4, 235, 46, 34, 4, 223, 202, 34, 4, - 238, 199, 34, 4, 235, 118, 34, 4, 246, 46, 34, 4, 236, 157, 34, 4, 235, - 89, 34, 4, 234, 163, 34, 4, 57, 34, 4, 254, 190, 34, 4, 235, 133, 34, 4, - 154, 34, 4, 245, 148, 34, 4, 224, 173, 34, 4, 224, 164, 34, 4, 213, 34, - 4, 252, 190, 34, 4, 253, 70, 34, 4, 236, 245, 34, 4, 238, 126, 34, 4, - 238, 125, 34, 4, 236, 186, 34, 4, 246, 144, 34, 4, 247, 129, 34, 4, 225, - 64, 34, 4, 227, 107, 34, 4, 226, 251, 34, 4, 250, 22, 34, 4, 250, 15, 34, - 4, 238, 43, 34, 4, 208, 34, 4, 250, 189, 34, 4, 235, 189, 34, 4, 231, 31, - 34, 4, 229, 146, 34, 4, 223, 117, 34, 4, 223, 85, 34, 4, 252, 39, 34, 4, - 239, 179, 34, 4, 235, 49, 34, 4, 191, 34, 4, 177, 34, 4, 239, 46, 34, 4, - 235, 122, 34, 4, 246, 193, 34, 4, 198, 34, 4, 236, 1, 34, 4, 234, 173, - 34, 4, 234, 52, 34, 4, 234, 49, 34, 4, 244, 218, 34, 4, 224, 98, 34, 4, - 224, 94, 34, 4, 232, 244, 34, 4, 252, 184, 34, 4, 252, 131, 34, 4, 236, - 240, 34, 4, 238, 119, 34, 4, 236, 181, 34, 4, 246, 136, 34, 4, 247, 3, - 34, 4, 224, 198, 34, 4, 226, 108, 34, 4, 226, 198, 34, 4, 250, 6, 34, 4, - 250, 10, 34, 4, 237, 125, 34, 4, 231, 114, 34, 4, 249, 145, 34, 4, 235, - 173, 34, 4, 228, 159, 34, 4, 229, 66, 34, 4, 223, 25, 34, 4, 223, 69, 34, - 4, 251, 17, 34, 4, 239, 108, 34, 4, 235, 37, 34, 4, 223, 172, 34, 4, 238, - 139, 34, 4, 235, 116, 34, 4, 246, 4, 34, 4, 236, 86, 34, 4, 234, 253, 34, - 4, 234, 150, 34, 4, 66, 34, 4, 225, 138, 34, 4, 244, 145, 34, 4, 244, - 137, 34, 4, 224, 83, 34, 4, 224, 82, 34, 4, 232, 173, 34, 4, 252, 183, - 34, 4, 252, 90, 34, 4, 236, 239, 34, 4, 238, 118, 34, 4, 236, 180, 34, 4, - 246, 135, 34, 4, 246, 219, 34, 4, 224, 190, 34, 4, 225, 250, 34, 4, 226, - 186, 34, 4, 250, 5, 34, 4, 250, 9, 34, 4, 237, 110, 34, 4, 231, 70, 34, - 4, 248, 107, 34, 4, 235, 169, 34, 4, 228, 6, 34, 4, 229, 43, 34, 4, 223, - 19, 34, 4, 223, 65, 34, 4, 250, 235, 34, 4, 239, 101, 34, 4, 235, 33, 34, - 4, 223, 158, 34, 4, 238, 107, 34, 4, 235, 115, 34, 4, 245, 218, 34, 4, - 236, 66, 34, 4, 234, 206, 34, 4, 234, 146, 34, 4, 73, 34, 4, 234, 61, 34, - 4, 235, 104, 34, 4, 244, 227, 34, 4, 244, 219, 34, 4, 224, 105, 34, 4, - 224, 99, 34, 4, 233, 4, 34, 4, 252, 185, 34, 4, 252, 138, 34, 4, 236, - 241, 34, 4, 238, 120, 34, 4, 236, 182, 34, 4, 246, 138, 34, 4, 246, 137, - 34, 4, 247, 7, 34, 4, 224, 206, 34, 4, 96, 34, 4, 226, 201, 34, 4, 250, - 7, 34, 4, 250, 11, 34, 4, 237, 143, 34, 4, 231, 122, 34, 4, 249, 161, 34, - 4, 235, 175, 34, 4, 228, 169, 34, 4, 229, 71, 34, 4, 223, 27, 34, 4, 223, - 70, 34, 4, 251, 68, 34, 4, 239, 117, 34, 4, 235, 38, 34, 4, 223, 183, 34, - 4, 238, 150, 34, 4, 235, 117, 34, 4, 246, 11, 34, 4, 236, 103, 34, 4, - 235, 6, 34, 4, 234, 152, 34, 4, 72, 34, 4, 247, 239, 34, 4, 235, 126, 34, - 4, 245, 121, 34, 4, 245, 100, 34, 4, 224, 141, 34, 4, 224, 134, 34, 4, - 233, 151, 34, 4, 252, 189, 34, 4, 252, 238, 34, 4, 236, 244, 34, 4, 238, - 124, 34, 4, 238, 122, 34, 4, 236, 185, 34, 4, 246, 142, 34, 4, 246, 140, - 34, 4, 247, 97, 34, 4, 225, 42, 34, 4, 227, 44, 34, 4, 226, 239, 34, 4, - 250, 17, 34, 4, 250, 14, 34, 4, 237, 243, 34, 4, 231, 244, 34, 4, 250, - 77, 34, 4, 235, 185, 34, 4, 230, 213, 34, 4, 229, 114, 34, 4, 223, 97, - 34, 4, 223, 77, 34, 4, 251, 231, 34, 4, 239, 170, 34, 4, 235, 48, 34, 4, - 223, 228, 34, 4, 239, 3, 34, 4, 235, 121, 34, 4, 235, 119, 34, 4, 246, - 131, 34, 4, 246, 122, 34, 4, 236, 235, 34, 4, 235, 162, 34, 4, 234, 169, - 34, 4, 235, 139, 34, 4, 237, 218, 34, 251, 54, 34, 246, 218, 228, 38, 34, - 232, 69, 76, 34, 4, 235, 174, 247, 129, 34, 4, 235, 174, 177, 34, 4, 235, - 174, 228, 159, 34, 14, 247, 89, 34, 14, 239, 1, 34, 14, 226, 154, 34, 14, - 235, 68, 34, 14, 253, 40, 34, 14, 247, 128, 34, 14, 227, 104, 34, 14, - 250, 149, 34, 14, 249, 144, 34, 14, 238, 97, 34, 14, 226, 111, 34, 14, - 249, 160, 34, 14, 239, 109, 34, 21, 223, 89, 34, 21, 118, 34, 21, 113, - 34, 21, 166, 34, 21, 158, 34, 21, 173, 34, 21, 183, 34, 21, 194, 34, 21, - 187, 34, 21, 192, 34, 4, 235, 174, 198, 34, 4, 235, 174, 249, 161, 28, 6, - 1, 223, 93, 28, 3, 1, 223, 93, 28, 6, 1, 248, 67, 28, 3, 1, 248, 67, 28, - 6, 1, 200, 248, 69, 28, 3, 1, 200, 248, 69, 28, 6, 1, 239, 215, 28, 3, 1, - 239, 215, 28, 6, 1, 249, 175, 28, 3, 1, 249, 175, 28, 6, 1, 236, 90, 225, - 153, 28, 3, 1, 236, 90, 225, 153, 28, 6, 1, 252, 100, 234, 66, 28, 3, 1, - 252, 100, 234, 66, 28, 6, 1, 235, 145, 223, 217, 28, 3, 1, 235, 145, 223, - 217, 28, 6, 1, 223, 214, 2, 253, 67, 223, 217, 28, 3, 1, 223, 214, 2, - 253, 67, 223, 217, 28, 6, 1, 239, 213, 223, 239, 28, 3, 1, 239, 213, 223, - 239, 28, 6, 1, 200, 223, 158, 28, 3, 1, 200, 223, 158, 28, 6, 1, 239, - 213, 57, 28, 3, 1, 239, 213, 57, 28, 6, 1, 251, 82, 237, 155, 223, 139, - 28, 3, 1, 251, 82, 237, 155, 223, 139, 28, 6, 1, 252, 143, 223, 139, 28, - 3, 1, 252, 143, 223, 139, 28, 6, 1, 239, 213, 251, 82, 237, 155, 223, - 139, 28, 3, 1, 239, 213, 251, 82, 237, 155, 223, 139, 28, 6, 1, 223, 185, - 28, 3, 1, 223, 185, 28, 6, 1, 228, 165, 250, 77, 28, 3, 1, 228, 165, 250, - 77, 28, 6, 1, 228, 165, 248, 2, 28, 3, 1, 228, 165, 248, 2, 28, 6, 1, - 228, 165, 247, 247, 28, 3, 1, 228, 165, 247, 247, 28, 6, 1, 236, 94, 73, - 28, 3, 1, 236, 94, 73, 28, 6, 1, 252, 167, 73, 28, 3, 1, 252, 167, 73, - 28, 6, 1, 47, 236, 94, 73, 28, 3, 1, 47, 236, 94, 73, 28, 1, 236, 54, 73, - 36, 28, 224, 176, 36, 28, 227, 24, 236, 128, 53, 36, 28, 244, 136, 236, - 128, 53, 36, 28, 226, 195, 236, 128, 53, 228, 192, 254, 69, 36, 28, 239, - 12, 36, 28, 233, 156, 28, 239, 12, 28, 233, 156, 28, 6, 1, 248, 78, 28, - 3, 1, 248, 78, 28, 6, 1, 248, 60, 28, 3, 1, 248, 60, 28, 6, 1, 223, 55, - 28, 3, 1, 223, 55, 28, 6, 1, 251, 240, 28, 3, 1, 251, 240, 28, 6, 1, 248, - 59, 28, 3, 1, 248, 59, 28, 6, 1, 227, 45, 2, 236, 154, 88, 28, 3, 1, 227, - 45, 2, 236, 154, 88, 28, 6, 1, 225, 220, 28, 3, 1, 225, 220, 28, 6, 1, - 226, 23, 28, 3, 1, 226, 23, 28, 6, 1, 226, 27, 28, 3, 1, 226, 27, 28, 6, - 1, 227, 50, 28, 3, 1, 227, 50, 28, 6, 1, 244, 125, 28, 3, 1, 244, 125, - 28, 6, 1, 229, 28, 28, 3, 1, 229, 28, 52, 1, 251, 160, 206, 223, 193, - 233, 37, 52, 1, 251, 160, 206, 223, 249, 233, 37, 52, 1, 251, 160, 206, - 223, 193, 229, 130, 52, 1, 251, 160, 206, 223, 249, 229, 130, 52, 1, 251, - 160, 206, 223, 193, 232, 84, 52, 1, 251, 160, 206, 223, 249, 232, 84, 52, - 1, 251, 160, 206, 223, 193, 231, 70, 52, 1, 251, 160, 206, 223, 249, 231, - 70, 52, 1, 247, 140, 248, 138, 206, 125, 52, 1, 201, 248, 138, 206, 125, - 52, 1, 236, 155, 248, 138, 206, 125, 52, 1, 184, 248, 138, 206, 125, 52, - 1, 247, 139, 248, 138, 206, 125, 52, 1, 247, 140, 248, 138, 237, 232, - 206, 125, 52, 1, 201, 248, 138, 237, 232, 206, 125, 52, 1, 236, 155, 248, - 138, 237, 232, 206, 125, 52, 1, 184, 248, 138, 237, 232, 206, 125, 52, 1, - 247, 139, 248, 138, 237, 232, 206, 125, 52, 1, 247, 140, 237, 232, 206, - 125, 52, 1, 201, 237, 232, 206, 125, 52, 1, 236, 155, 237, 232, 206, 125, - 52, 1, 184, 237, 232, 206, 125, 52, 1, 247, 139, 237, 232, 206, 125, 52, - 1, 56, 61, 125, 52, 1, 56, 228, 194, 52, 1, 56, 169, 125, 52, 1, 203, 41, - 251, 11, 254, 181, 52, 1, 232, 8, 99, 58, 52, 1, 232, 8, 103, 58, 52, 1, - 232, 8, 247, 149, 76, 52, 1, 232, 8, 239, 223, 247, 149, 76, 52, 1, 184, - 239, 223, 247, 149, 76, 52, 1, 228, 27, 22, 201, 226, 118, 52, 1, 228, - 27, 22, 184, 226, 118, 7, 6, 1, 248, 26, 254, 227, 7, 3, 1, 248, 26, 254, - 227, 7, 6, 1, 248, 26, 254, 248, 7, 3, 1, 248, 26, 254, 248, 7, 6, 1, - 245, 98, 7, 3, 1, 245, 98, 7, 6, 1, 225, 187, 7, 3, 1, 225, 187, 7, 6, 1, - 226, 82, 7, 3, 1, 226, 82, 7, 6, 1, 250, 233, 7, 3, 1, 250, 233, 7, 6, 1, - 250, 234, 2, 251, 54, 7, 3, 1, 250, 234, 2, 251, 54, 7, 1, 3, 6, 247, - 130, 7, 1, 3, 6, 193, 7, 6, 1, 255, 63, 7, 3, 1, 255, 63, 7, 6, 1, 254, - 158, 7, 3, 1, 254, 158, 7, 6, 1, 254, 53, 7, 3, 1, 254, 53, 7, 6, 1, 254, - 41, 7, 3, 1, 254, 41, 7, 6, 1, 254, 42, 2, 169, 125, 7, 3, 1, 254, 42, 2, - 169, 125, 7, 6, 1, 254, 34, 7, 3, 1, 254, 34, 7, 6, 1, 200, 252, 45, 2, - 249, 140, 7, 3, 1, 200, 252, 45, 2, 249, 140, 7, 6, 1, 239, 77, 2, 82, 7, - 3, 1, 239, 77, 2, 82, 7, 6, 1, 239, 77, 2, 250, 1, 82, 7, 3, 1, 239, 77, - 2, 250, 1, 82, 7, 6, 1, 239, 77, 2, 195, 22, 250, 1, 82, 7, 3, 1, 239, - 77, 2, 195, 22, 250, 1, 82, 7, 6, 1, 252, 99, 149, 7, 3, 1, 252, 99, 149, - 7, 6, 1, 238, 47, 2, 201, 82, 7, 3, 1, 238, 47, 2, 201, 82, 7, 6, 1, 130, - 2, 182, 195, 234, 2, 7, 3, 1, 130, 2, 182, 195, 234, 2, 7, 6, 1, 130, 2, - 237, 124, 7, 3, 1, 130, 2, 237, 124, 7, 6, 1, 234, 52, 7, 3, 1, 234, 52, - 7, 6, 1, 233, 245, 2, 195, 226, 188, 250, 34, 7, 3, 1, 233, 245, 2, 195, - 226, 188, 250, 34, 7, 6, 1, 233, 245, 2, 247, 14, 7, 3, 1, 233, 245, 2, - 247, 14, 7, 6, 1, 233, 245, 2, 228, 114, 227, 89, 7, 3, 1, 233, 245, 2, - 228, 114, 227, 89, 7, 6, 1, 232, 140, 2, 195, 226, 188, 250, 34, 7, 3, 1, - 232, 140, 2, 195, 226, 188, 250, 34, 7, 6, 1, 232, 140, 2, 250, 1, 82, 7, - 3, 1, 232, 140, 2, 250, 1, 82, 7, 6, 1, 232, 27, 231, 105, 7, 3, 1, 232, - 27, 231, 105, 7, 6, 1, 231, 63, 231, 105, 7, 3, 1, 231, 63, 231, 105, 7, - 6, 1, 225, 65, 2, 250, 1, 82, 7, 3, 1, 225, 65, 2, 250, 1, 82, 7, 6, 1, - 224, 182, 7, 3, 1, 224, 182, 7, 6, 1, 224, 209, 223, 119, 7, 3, 1, 224, - 209, 223, 119, 7, 6, 1, 226, 197, 2, 82, 7, 3, 1, 226, 197, 2, 82, 7, 6, - 1, 226, 197, 2, 195, 226, 188, 250, 34, 7, 3, 1, 226, 197, 2, 195, 226, - 188, 250, 34, 7, 6, 1, 225, 35, 7, 3, 1, 225, 35, 7, 6, 1, 247, 173, 7, - 3, 1, 247, 173, 7, 6, 1, 239, 205, 7, 3, 1, 239, 205, 7, 6, 1, 251, 44, - 7, 3, 1, 251, 44, 52, 1, 225, 87, 7, 3, 1, 248, 98, 7, 3, 1, 237, 100, 7, - 3, 1, 236, 48, 7, 3, 1, 234, 199, 7, 3, 1, 231, 62, 7, 1, 3, 6, 231, 62, - 7, 3, 1, 225, 244, 7, 3, 1, 225, 145, 7, 6, 1, 239, 241, 222, 222, 7, 3, - 1, 239, 241, 222, 222, 7, 6, 1, 239, 241, 247, 130, 7, 3, 1, 239, 241, - 247, 130, 7, 6, 1, 239, 241, 214, 7, 6, 1, 209, 239, 241, 214, 7, 3, 1, - 209, 239, 241, 214, 7, 6, 1, 209, 149, 7, 3, 1, 209, 149, 7, 6, 1, 239, - 241, 146, 7, 3, 1, 239, 241, 146, 7, 6, 1, 239, 241, 193, 7, 3, 1, 239, - 241, 193, 7, 6, 1, 239, 241, 227, 109, 7, 3, 1, 239, 241, 227, 109, 52, - 1, 184, 251, 102, 255, 41, 52, 1, 251, 61, 52, 1, 229, 63, 247, 204, 53, - 7, 6, 1, 231, 6, 7, 3, 1, 231, 6, 7, 247, 208, 1, 200, 247, 130, 7, 247, - 208, 1, 200, 233, 244, 7, 247, 208, 1, 239, 223, 185, 7, 247, 208, 1, - 244, 81, 237, 126, 7, 247, 208, 1, 254, 120, 185, 227, 183, 235, 244, 1, - 57, 227, 183, 235, 244, 1, 74, 227, 183, 235, 244, 5, 248, 80, 227, 183, - 235, 244, 1, 66, 227, 183, 235, 244, 1, 72, 227, 183, 235, 244, 1, 73, - 227, 183, 235, 244, 5, 245, 134, 227, 183, 235, 244, 1, 238, 150, 227, - 183, 235, 244, 1, 238, 208, 227, 183, 235, 244, 1, 246, 11, 227, 183, - 235, 244, 1, 246, 54, 227, 183, 235, 244, 5, 254, 160, 227, 183, 235, - 244, 1, 251, 68, 227, 183, 235, 244, 1, 251, 150, 227, 183, 235, 244, 1, - 239, 117, 227, 183, 235, 244, 1, 239, 157, 227, 183, 235, 244, 1, 226, 5, - 227, 183, 235, 244, 1, 226, 7, 227, 183, 235, 244, 1, 250, 92, 227, 183, - 235, 244, 1, 250, 100, 227, 183, 235, 244, 1, 96, 227, 183, 235, 244, 1, - 226, 201, 227, 183, 235, 244, 1, 249, 161, 227, 183, 235, 244, 1, 250, 7, - 227, 183, 235, 244, 1, 235, 6, 227, 183, 235, 244, 1, 233, 4, 227, 183, - 235, 244, 1, 233, 79, 227, 183, 235, 244, 1, 252, 138, 227, 183, 235, - 244, 1, 252, 185, 227, 183, 235, 244, 1, 236, 103, 227, 183, 235, 244, 1, - 231, 122, 227, 183, 235, 244, 1, 237, 143, 227, 183, 235, 244, 1, 231, - 91, 227, 183, 235, 244, 1, 228, 169, 227, 183, 235, 244, 1, 244, 227, - 227, 183, 235, 244, 31, 5, 57, 227, 183, 235, 244, 31, 5, 74, 227, 183, - 235, 244, 31, 5, 66, 227, 183, 235, 244, 31, 5, 72, 227, 183, 235, 244, - 31, 5, 234, 52, 227, 183, 235, 244, 233, 0, 237, 17, 227, 183, 235, 244, - 233, 0, 237, 16, 227, 183, 235, 244, 233, 0, 237, 15, 227, 183, 235, 244, - 233, 0, 237, 14, 217, 1, 177, 217, 1, 238, 227, 217, 1, 246, 193, 217, 1, - 235, 137, 217, 1, 252, 39, 217, 1, 251, 204, 217, 1, 239, 179, 217, 1, - 234, 173, 217, 1, 227, 107, 217, 1, 226, 251, 217, 1, 250, 189, 217, 1, - 236, 1, 217, 1, 213, 217, 1, 233, 97, 217, 1, 253, 70, 217, 1, 198, 217, - 1, 226, 44, 217, 1, 226, 37, 217, 1, 248, 70, 217, 1, 224, 173, 217, 1, - 223, 85, 217, 1, 223, 117, 217, 1, 3, 57, 217, 1, 191, 217, 1, 208, 217, - 1, 238, 43, 217, 1, 229, 146, 217, 1, 231, 31, 217, 1, 154, 217, 1, 57, - 217, 1, 74, 217, 1, 66, 217, 1, 72, 217, 1, 73, 217, 1, 232, 138, 217, 1, - 224, 72, 217, 1, 247, 129, 217, 1, 246, 101, 217, 1, 248, 35, 217, 228, - 0, 1, 224, 173, 217, 228, 0, 1, 191, 217, 1, 226, 20, 217, 1, 226, 10, - 217, 1, 250, 117, 217, 1, 235, 18, 217, 1, 254, 203, 191, 217, 1, 224, - 203, 229, 146, 217, 1, 224, 204, 154, 217, 1, 254, 75, 247, 129, 217, - 228, 0, 1, 208, 217, 227, 221, 1, 208, 217, 1, 252, 19, 217, 228, 241, - 245, 119, 76, 217, 47, 245, 119, 76, 217, 165, 229, 139, 217, 165, 47, - 229, 139, 141, 5, 254, 160, 141, 5, 224, 211, 141, 1, 57, 141, 1, 255, - 63, 141, 1, 74, 141, 1, 240, 47, 141, 1, 66, 141, 1, 225, 76, 141, 1, - 153, 146, 141, 1, 153, 231, 100, 141, 1, 153, 149, 141, 1, 153, 237, 149, - 141, 1, 72, 141, 1, 248, 35, 141, 1, 254, 253, 141, 1, 73, 141, 1, 234, - 52, 141, 1, 254, 53, 141, 1, 177, 141, 1, 238, 227, 141, 1, 246, 193, - 141, 1, 246, 66, 141, 1, 235, 137, 141, 1, 252, 39, 141, 1, 251, 204, - 141, 1, 239, 179, 141, 1, 239, 160, 141, 1, 234, 173, 141, 1, 226, 20, - 141, 1, 226, 10, 141, 1, 250, 117, 141, 1, 250, 101, 141, 1, 235, 18, - 141, 1, 227, 107, 141, 1, 226, 251, 141, 1, 250, 189, 141, 1, 250, 22, - 141, 1, 236, 1, 141, 1, 213, 141, 1, 233, 97, 141, 1, 253, 70, 141, 1, - 252, 190, 141, 1, 198, 141, 1, 191, 141, 1, 208, 141, 1, 238, 43, 141, 1, - 225, 64, 141, 1, 229, 146, 141, 1, 228, 110, 141, 1, 231, 31, 141, 1, - 154, 141, 1, 237, 148, 141, 251, 33, 5, 245, 166, 141, 31, 5, 255, 63, - 141, 31, 5, 74, 141, 31, 5, 240, 47, 141, 31, 5, 66, 141, 31, 5, 225, 76, - 141, 31, 5, 153, 146, 141, 31, 5, 153, 231, 100, 141, 31, 5, 153, 149, - 141, 31, 5, 153, 237, 149, 141, 31, 5, 72, 141, 31, 5, 248, 35, 141, 31, - 5, 254, 253, 141, 31, 5, 73, 141, 31, 5, 234, 52, 141, 31, 5, 254, 53, - 141, 5, 224, 216, 141, 250, 151, 141, 47, 250, 151, 141, 21, 223, 89, - 141, 21, 118, 141, 21, 113, 141, 21, 166, 141, 21, 158, 141, 21, 173, - 141, 21, 183, 141, 21, 194, 141, 21, 187, 141, 21, 192, 239, 9, 237, 194, - 21, 223, 89, 239, 9, 237, 194, 21, 118, 239, 9, 237, 194, 21, 113, 239, - 9, 237, 194, 21, 166, 239, 9, 237, 194, 21, 158, 239, 9, 237, 194, 21, - 173, 239, 9, 237, 194, 21, 183, 239, 9, 237, 194, 21, 194, 239, 9, 237, - 194, 21, 187, 239, 9, 237, 194, 21, 192, 239, 9, 237, 194, 1, 177, 239, - 9, 237, 194, 1, 238, 227, 239, 9, 237, 194, 1, 246, 193, 239, 9, 237, - 194, 1, 235, 137, 239, 9, 237, 194, 1, 231, 31, 239, 9, 237, 194, 1, 229, - 146, 239, 9, 237, 194, 1, 223, 117, 239, 9, 237, 194, 1, 234, 173, 239, - 9, 237, 194, 1, 227, 107, 239, 9, 237, 194, 1, 244, 147, 239, 9, 237, - 194, 1, 236, 1, 239, 9, 237, 194, 1, 213, 239, 9, 237, 194, 1, 233, 97, - 239, 9, 237, 194, 1, 198, 239, 9, 237, 194, 1, 250, 189, 239, 9, 237, - 194, 1, 253, 70, 239, 9, 237, 194, 1, 208, 239, 9, 237, 194, 1, 191, 239, - 9, 237, 194, 1, 238, 43, 239, 9, 237, 194, 1, 224, 173, 239, 9, 237, 194, - 1, 226, 251, 239, 9, 237, 194, 1, 154, 239, 9, 237, 194, 1, 225, 64, 239, - 9, 237, 194, 1, 252, 39, 239, 9, 237, 194, 1, 57, 239, 9, 237, 194, 1, - 234, 88, 239, 9, 237, 194, 1, 74, 239, 9, 237, 194, 1, 234, 52, 239, 9, - 237, 194, 31, 225, 159, 239, 9, 237, 194, 31, 72, 239, 9, 237, 194, 31, - 66, 239, 9, 237, 194, 31, 248, 35, 239, 9, 237, 194, 31, 73, 239, 9, 237, - 194, 206, 233, 15, 239, 9, 237, 194, 206, 252, 29, 239, 9, 237, 194, 206, - 252, 30, 233, 15, 239, 9, 237, 194, 5, 250, 206, 239, 9, 237, 194, 5, - 229, 22, 231, 223, 1, 177, 231, 223, 1, 246, 193, 231, 223, 1, 235, 137, - 231, 223, 1, 227, 107, 231, 223, 1, 250, 189, 231, 223, 1, 236, 1, 231, - 223, 1, 213, 231, 223, 1, 253, 70, 231, 223, 1, 198, 231, 223, 1, 252, - 39, 231, 223, 1, 239, 179, 231, 223, 1, 234, 173, 231, 223, 1, 231, 31, - 231, 223, 1, 208, 231, 223, 1, 238, 43, 231, 223, 1, 191, 231, 223, 1, - 224, 173, 231, 223, 1, 154, 231, 223, 1, 236, 245, 231, 223, 1, 235, 122, - 231, 223, 1, 235, 189, 231, 223, 1, 234, 153, 231, 223, 1, 57, 231, 223, - 31, 5, 74, 231, 223, 31, 5, 66, 231, 223, 31, 5, 72, 231, 223, 31, 5, - 254, 253, 231, 223, 31, 5, 73, 231, 223, 31, 5, 254, 53, 231, 223, 31, 5, - 247, 165, 231, 223, 31, 5, 248, 56, 231, 223, 251, 33, 5, 235, 139, 231, - 223, 251, 33, 5, 199, 231, 223, 251, 33, 5, 146, 231, 223, 251, 33, 5, - 212, 231, 223, 224, 216, 231, 223, 230, 206, 76, 136, 1, 57, 136, 1, 74, - 136, 1, 66, 136, 1, 72, 136, 1, 254, 253, 136, 1, 73, 136, 1, 177, 136, - 1, 238, 227, 136, 1, 246, 193, 136, 1, 246, 66, 136, 1, 235, 98, 136, 1, - 235, 137, 136, 1, 251, 204, 136, 1, 251, 171, 136, 1, 239, 179, 136, 1, - 239, 160, 136, 1, 235, 91, 136, 1, 235, 93, 136, 1, 235, 92, 136, 1, 227, - 107, 136, 1, 226, 251, 136, 1, 250, 189, 136, 1, 250, 22, 136, 1, 234, - 203, 136, 1, 236, 1, 136, 1, 250, 117, 136, 1, 213, 136, 1, 232, 230, - 136, 1, 233, 97, 136, 1, 253, 70, 136, 1, 252, 190, 136, 1, 236, 61, 136, - 1, 198, 136, 1, 253, 16, 136, 1, 191, 136, 1, 208, 136, 1, 238, 43, 136, - 1, 225, 64, 136, 1, 228, 110, 136, 1, 231, 31, 136, 1, 154, 136, 31, 5, - 255, 63, 136, 31, 5, 74, 136, 31, 5, 240, 47, 136, 31, 5, 248, 22, 136, - 31, 5, 66, 136, 31, 5, 234, 88, 136, 31, 5, 73, 136, 31, 5, 254, 253, - 136, 31, 5, 254, 53, 136, 31, 5, 225, 159, 136, 251, 33, 5, 191, 136, - 251, 33, 5, 208, 136, 251, 33, 5, 238, 43, 136, 251, 33, 5, 224, 173, - 136, 1, 35, 239, 76, 136, 1, 35, 214, 136, 1, 35, 235, 139, 136, 251, 33, - 5, 35, 235, 139, 136, 1, 35, 251, 205, 136, 1, 35, 227, 109, 136, 1, 35, - 199, 136, 1, 35, 233, 244, 136, 1, 35, 224, 25, 136, 1, 35, 146, 136, 1, - 35, 149, 136, 1, 35, 228, 111, 136, 251, 33, 5, 35, 185, 136, 251, 33, 5, - 35, 212, 136, 21, 223, 89, 136, 21, 118, 136, 21, 113, 136, 21, 166, 136, - 21, 158, 136, 21, 173, 136, 21, 183, 136, 21, 194, 136, 21, 187, 136, 21, - 192, 136, 232, 171, 228, 134, 136, 232, 171, 250, 151, 136, 232, 171, 47, - 250, 151, 136, 232, 171, 226, 66, 250, 151, 9, 11, 242, 31, 9, 11, 242, - 30, 9, 11, 242, 29, 9, 11, 242, 28, 9, 11, 242, 27, 9, 11, 242, 26, 9, - 11, 242, 25, 9, 11, 242, 24, 9, 11, 242, 23, 9, 11, 242, 22, 9, 11, 242, - 21, 9, 11, 242, 20, 9, 11, 242, 19, 9, 11, 242, 18, 9, 11, 242, 17, 9, - 11, 242, 16, 9, 11, 242, 15, 9, 11, 242, 14, 9, 11, 242, 13, 9, 11, 242, - 12, 9, 11, 242, 11, 9, 11, 242, 10, 9, 11, 242, 9, 9, 11, 242, 8, 9, 11, - 242, 7, 9, 11, 242, 6, 9, 11, 242, 5, 9, 11, 242, 4, 9, 11, 242, 3, 9, - 11, 242, 2, 9, 11, 242, 1, 9, 11, 242, 0, 9, 11, 241, 255, 9, 11, 241, - 254, 9, 11, 241, 253, 9, 11, 241, 252, 9, 11, 241, 251, 9, 11, 241, 250, - 9, 11, 241, 249, 9, 11, 241, 248, 9, 11, 241, 247, 9, 11, 241, 246, 9, - 11, 241, 245, 9, 11, 241, 244, 9, 11, 241, 243, 9, 11, 241, 242, 9, 11, - 241, 241, 9, 11, 241, 240, 9, 11, 241, 239, 9, 11, 241, 238, 9, 11, 241, - 237, 9, 11, 241, 236, 9, 11, 241, 235, 9, 11, 241, 234, 9, 11, 241, 233, - 9, 11, 241, 232, 9, 11, 241, 231, 9, 11, 241, 230, 9, 11, 241, 229, 9, - 11, 241, 228, 9, 11, 241, 227, 9, 11, 241, 226, 9, 11, 241, 225, 9, 11, - 241, 224, 9, 11, 241, 223, 9, 11, 241, 222, 9, 11, 241, 221, 9, 11, 241, - 220, 9, 11, 241, 219, 9, 11, 241, 218, 9, 11, 241, 217, 9, 11, 241, 216, - 9, 11, 241, 215, 9, 11, 241, 214, 9, 11, 241, 213, 9, 11, 241, 212, 9, - 11, 241, 211, 9, 11, 241, 210, 9, 11, 241, 209, 9, 11, 241, 208, 9, 11, - 241, 207, 9, 11, 241, 206, 9, 11, 241, 205, 9, 11, 241, 204, 9, 11, 241, - 203, 9, 11, 241, 202, 9, 11, 241, 201, 9, 11, 241, 200, 9, 11, 241, 199, - 9, 11, 241, 198, 9, 11, 241, 197, 9, 11, 241, 196, 9, 11, 241, 195, 9, - 11, 241, 194, 9, 11, 241, 193, 9, 11, 241, 192, 9, 11, 241, 191, 9, 11, - 241, 190, 9, 11, 241, 189, 9, 11, 241, 188, 9, 11, 241, 187, 9, 11, 241, - 186, 9, 11, 241, 185, 9, 11, 241, 184, 9, 11, 241, 183, 9, 11, 241, 182, - 9, 11, 241, 181, 9, 11, 241, 180, 9, 11, 241, 179, 9, 11, 241, 178, 9, - 11, 241, 177, 9, 11, 241, 176, 9, 11, 241, 175, 9, 11, 241, 174, 9, 11, - 241, 173, 9, 11, 241, 172, 9, 11, 241, 171, 9, 11, 241, 170, 9, 11, 241, - 169, 9, 11, 241, 168, 9, 11, 241, 167, 9, 11, 241, 166, 9, 11, 241, 165, - 9, 11, 241, 164, 9, 11, 241, 163, 9, 11, 241, 162, 9, 11, 241, 161, 9, - 11, 241, 160, 9, 11, 241, 159, 9, 11, 241, 158, 9, 11, 241, 157, 9, 11, - 241, 156, 9, 11, 241, 155, 9, 11, 241, 154, 9, 11, 241, 153, 9, 11, 241, - 152, 9, 11, 241, 151, 9, 11, 241, 150, 9, 11, 241, 149, 9, 11, 241, 148, - 9, 11, 241, 147, 9, 11, 241, 146, 9, 11, 241, 145, 9, 11, 241, 144, 9, - 11, 241, 143, 9, 11, 241, 142, 9, 11, 241, 141, 9, 11, 241, 140, 9, 11, - 241, 139, 9, 11, 241, 138, 9, 11, 241, 137, 9, 11, 241, 136, 9, 11, 241, - 135, 9, 11, 241, 134, 9, 11, 241, 133, 9, 11, 241, 132, 9, 11, 241, 131, - 9, 11, 241, 130, 9, 11, 241, 129, 9, 11, 241, 128, 9, 11, 241, 127, 9, - 11, 241, 126, 9, 11, 241, 125, 9, 11, 241, 124, 9, 11, 241, 123, 9, 11, - 241, 122, 9, 11, 241, 121, 9, 11, 241, 120, 9, 11, 241, 119, 9, 11, 241, - 118, 9, 11, 241, 117, 9, 11, 241, 116, 9, 11, 241, 115, 9, 11, 241, 114, - 9, 11, 241, 113, 9, 11, 241, 112, 9, 11, 241, 111, 9, 11, 241, 110, 9, - 11, 241, 109, 9, 11, 241, 108, 9, 11, 241, 107, 9, 11, 241, 106, 9, 11, - 241, 105, 9, 11, 241, 104, 9, 11, 241, 103, 9, 11, 241, 102, 9, 11, 241, - 101, 9, 11, 241, 100, 9, 11, 241, 99, 9, 11, 241, 98, 9, 11, 241, 97, 9, - 11, 241, 96, 9, 11, 241, 95, 9, 11, 241, 94, 9, 11, 241, 93, 9, 11, 241, - 92, 9, 11, 241, 91, 9, 11, 241, 90, 9, 11, 241, 89, 9, 11, 241, 88, 9, - 11, 241, 87, 9, 11, 241, 86, 9, 11, 241, 85, 9, 11, 241, 84, 9, 11, 241, - 83, 9, 11, 241, 82, 9, 11, 241, 81, 9, 11, 241, 80, 9, 11, 241, 79, 9, - 11, 241, 78, 9, 11, 241, 77, 9, 11, 241, 76, 9, 11, 241, 75, 9, 11, 241, - 74, 9, 11, 241, 73, 9, 11, 241, 72, 9, 11, 241, 71, 9, 11, 241, 70, 9, - 11, 241, 69, 9, 11, 241, 68, 9, 11, 241, 67, 9, 11, 241, 66, 9, 11, 241, - 65, 9, 11, 241, 64, 9, 11, 241, 63, 9, 11, 241, 62, 9, 11, 241, 61, 9, - 11, 241, 60, 9, 11, 241, 59, 9, 11, 241, 58, 9, 11, 241, 57, 9, 11, 241, - 56, 9, 11, 241, 55, 9, 11, 241, 54, 9, 11, 241, 53, 9, 11, 241, 52, 9, - 11, 241, 51, 9, 11, 241, 50, 9, 11, 241, 49, 9, 11, 241, 48, 9, 11, 241, - 47, 9, 11, 241, 46, 9, 11, 241, 45, 9, 11, 241, 44, 9, 11, 241, 43, 9, - 11, 241, 42, 9, 11, 241, 41, 9, 11, 241, 40, 9, 11, 241, 39, 9, 11, 241, - 38, 9, 11, 241, 37, 9, 11, 241, 36, 9, 11, 241, 35, 9, 11, 241, 34, 9, - 11, 241, 33, 9, 11, 241, 32, 9, 11, 241, 31, 9, 11, 241, 30, 9, 11, 241, - 29, 9, 11, 241, 28, 9, 11, 241, 27, 9, 11, 241, 26, 9, 11, 241, 25, 9, - 11, 241, 24, 9, 11, 241, 23, 9, 11, 241, 22, 9, 11, 241, 21, 9, 11, 241, - 20, 9, 11, 241, 19, 9, 11, 241, 18, 9, 11, 241, 17, 9, 11, 241, 16, 9, - 11, 241, 15, 9, 11, 241, 14, 9, 11, 241, 13, 9, 11, 241, 12, 9, 11, 241, - 11, 9, 11, 241, 10, 9, 11, 241, 9, 9, 11, 241, 8, 9, 11, 241, 7, 9, 11, - 241, 6, 9, 11, 241, 5, 9, 11, 241, 4, 9, 11, 241, 3, 9, 11, 241, 2, 9, - 11, 241, 1, 9, 11, 241, 0, 9, 11, 240, 255, 9, 11, 240, 254, 9, 11, 240, - 253, 9, 11, 240, 252, 9, 11, 240, 251, 9, 11, 240, 250, 9, 11, 240, 249, - 9, 11, 240, 248, 9, 11, 240, 247, 9, 11, 240, 246, 9, 11, 240, 245, 9, - 11, 240, 244, 9, 11, 240, 243, 9, 11, 240, 242, 9, 11, 240, 241, 9, 11, - 240, 240, 9, 11, 240, 239, 9, 11, 240, 238, 9, 11, 240, 237, 9, 11, 240, - 236, 9, 11, 240, 235, 9, 11, 240, 234, 9, 11, 240, 233, 9, 11, 240, 232, - 9, 11, 240, 231, 9, 11, 240, 230, 9, 11, 240, 229, 9, 11, 240, 228, 9, - 11, 240, 227, 9, 11, 240, 226, 9, 11, 240, 225, 9, 11, 240, 224, 9, 11, - 240, 223, 9, 11, 240, 222, 9, 11, 240, 221, 9, 11, 240, 220, 9, 11, 240, - 219, 9, 11, 240, 218, 9, 11, 240, 217, 9, 11, 240, 216, 9, 11, 240, 215, - 9, 11, 240, 214, 9, 11, 240, 213, 9, 11, 240, 212, 9, 11, 240, 211, 9, - 11, 240, 210, 9, 11, 240, 209, 9, 11, 240, 208, 9, 11, 240, 207, 9, 11, - 240, 206, 9, 11, 240, 205, 9, 11, 240, 204, 9, 11, 240, 203, 9, 11, 240, - 202, 9, 11, 240, 201, 9, 11, 240, 200, 9, 11, 240, 199, 9, 11, 240, 198, - 9, 11, 240, 197, 9, 11, 240, 196, 9, 11, 240, 195, 9, 11, 240, 194, 9, - 11, 240, 193, 9, 11, 240, 192, 9, 11, 240, 191, 9, 11, 240, 190, 9, 11, - 240, 189, 9, 11, 240, 188, 9, 11, 240, 187, 9, 11, 240, 186, 9, 11, 240, - 185, 9, 11, 240, 184, 9, 11, 240, 183, 9, 11, 240, 182, 9, 11, 240, 181, - 9, 11, 240, 180, 9, 11, 240, 179, 9, 11, 240, 178, 9, 11, 240, 177, 9, - 11, 240, 176, 9, 11, 240, 175, 9, 11, 240, 174, 9, 11, 240, 173, 9, 11, - 240, 172, 9, 11, 240, 171, 9, 11, 240, 170, 9, 11, 240, 169, 9, 11, 240, - 168, 9, 11, 240, 167, 9, 11, 240, 166, 9, 11, 240, 165, 9, 11, 240, 164, - 9, 11, 240, 163, 9, 11, 240, 162, 9, 11, 240, 161, 9, 11, 240, 160, 9, - 11, 240, 159, 9, 11, 240, 158, 9, 11, 240, 157, 9, 11, 240, 156, 9, 11, - 240, 155, 9, 11, 240, 154, 9, 11, 240, 153, 9, 11, 240, 152, 9, 11, 240, - 151, 9, 11, 240, 150, 9, 11, 240, 149, 9, 11, 240, 148, 9, 11, 240, 147, - 9, 11, 240, 146, 9, 11, 240, 145, 9, 11, 240, 144, 9, 11, 240, 143, 9, - 11, 240, 142, 9, 11, 240, 141, 9, 11, 240, 140, 9, 11, 240, 139, 9, 11, - 240, 138, 9, 11, 240, 137, 9, 11, 240, 136, 9, 11, 240, 135, 9, 11, 240, - 134, 9, 11, 240, 133, 9, 11, 240, 132, 9, 11, 240, 131, 9, 11, 240, 130, - 9, 11, 240, 129, 9, 11, 240, 128, 9, 11, 240, 127, 9, 11, 240, 126, 9, - 11, 240, 125, 9, 11, 240, 124, 9, 11, 240, 123, 9, 11, 240, 122, 9, 11, - 240, 121, 9, 11, 240, 120, 9, 11, 240, 119, 9, 11, 240, 118, 9, 11, 240, - 117, 9, 11, 240, 116, 9, 11, 240, 115, 9, 11, 240, 114, 9, 11, 240, 113, - 9, 11, 240, 112, 9, 11, 240, 111, 9, 11, 240, 110, 9, 11, 240, 109, 9, - 11, 240, 108, 9, 11, 240, 107, 9, 11, 240, 106, 9, 11, 240, 105, 9, 11, - 240, 104, 9, 11, 240, 103, 9, 11, 240, 102, 9, 11, 240, 101, 9, 11, 240, - 100, 9, 11, 240, 99, 9, 11, 240, 98, 9, 11, 240, 97, 9, 11, 240, 96, 9, - 11, 240, 95, 9, 11, 240, 94, 9, 11, 240, 93, 9, 11, 240, 92, 9, 11, 240, - 91, 9, 11, 240, 90, 9, 11, 240, 89, 9, 11, 240, 88, 9, 11, 240, 87, 9, - 11, 240, 86, 9, 11, 240, 85, 9, 11, 240, 84, 9, 11, 240, 83, 9, 11, 240, - 82, 9, 11, 240, 81, 9, 11, 240, 80, 9, 11, 240, 79, 9, 11, 240, 78, 9, - 11, 240, 77, 7, 3, 20, 247, 74, 7, 3, 20, 247, 70, 7, 3, 20, 247, 33, 7, - 3, 20, 247, 73, 7, 3, 20, 247, 72, 7, 3, 20, 182, 231, 35, 227, 109, 7, - 3, 20, 228, 70, 120, 3, 20, 236, 211, 234, 232, 120, 3, 20, 236, 211, - 248, 39, 120, 3, 20, 236, 211, 239, 252, 120, 3, 20, 224, 231, 234, 232, - 120, 3, 20, 236, 211, 224, 67, 78, 1, 223, 176, 2, 245, 58, 78, 232, 255, - 239, 100, 225, 53, 78, 20, 223, 200, 223, 176, 223, 176, 233, 166, 78, 1, - 254, 201, 254, 29, 78, 1, 224, 117, 254, 227, 78, 1, 224, 117, 250, 160, - 78, 1, 224, 117, 245, 121, 78, 1, 224, 117, 239, 59, 78, 1, 224, 117, - 238, 12, 78, 1, 224, 117, 35, 236, 215, 78, 1, 224, 117, 231, 205, 78, 1, - 224, 117, 227, 58, 78, 1, 254, 201, 79, 53, 78, 1, 229, 79, 2, 229, 79, - 249, 140, 78, 1, 229, 79, 2, 228, 244, 249, 140, 78, 1, 229, 79, 2, 250, - 176, 22, 229, 79, 249, 140, 78, 1, 229, 79, 2, 250, 176, 22, 228, 244, - 249, 140, 78, 1, 92, 2, 233, 166, 78, 1, 92, 2, 232, 126, 78, 1, 92, 2, - 237, 27, 78, 1, 252, 201, 2, 250, 175, 78, 1, 246, 35, 2, 250, 175, 78, - 1, 250, 161, 2, 250, 175, 78, 1, 245, 122, 2, 237, 27, 78, 1, 225, 47, 2, - 250, 175, 78, 1, 223, 100, 2, 250, 175, 78, 1, 227, 11, 2, 250, 175, 78, - 1, 223, 176, 2, 250, 175, 78, 1, 35, 239, 60, 2, 250, 175, 78, 1, 239, - 60, 2, 250, 175, 78, 1, 238, 13, 2, 250, 175, 78, 1, 236, 216, 2, 250, - 175, 78, 1, 234, 195, 2, 250, 175, 78, 1, 231, 3, 2, 250, 175, 78, 1, 35, - 233, 152, 2, 250, 175, 78, 1, 233, 152, 2, 250, 175, 78, 1, 226, 42, 2, - 250, 175, 78, 1, 232, 93, 2, 250, 175, 78, 1, 231, 206, 2, 250, 175, 78, - 1, 229, 79, 2, 250, 175, 78, 1, 227, 59, 2, 250, 175, 78, 1, 225, 47, 2, - 244, 223, 78, 1, 252, 201, 2, 232, 14, 78, 1, 239, 60, 2, 232, 14, 78, 1, - 233, 152, 2, 232, 14, 78, 20, 92, 238, 12, 10, 1, 92, 224, 158, 44, 15, - 10, 1, 92, 224, 158, 35, 15, 10, 1, 252, 231, 44, 15, 10, 1, 252, 231, - 35, 15, 10, 1, 252, 231, 59, 15, 10, 1, 252, 231, 124, 15, 10, 1, 233, - 141, 44, 15, 10, 1, 233, 141, 35, 15, 10, 1, 233, 141, 59, 15, 10, 1, - 233, 141, 124, 15, 10, 1, 252, 222, 44, 15, 10, 1, 252, 222, 35, 15, 10, - 1, 252, 222, 59, 15, 10, 1, 252, 222, 124, 15, 10, 1, 226, 13, 44, 15, - 10, 1, 226, 13, 35, 15, 10, 1, 226, 13, 59, 15, 10, 1, 226, 13, 124, 15, - 10, 1, 227, 33, 44, 15, 10, 1, 227, 33, 35, 15, 10, 1, 227, 33, 59, 15, - 10, 1, 227, 33, 124, 15, 10, 1, 226, 15, 44, 15, 10, 1, 226, 15, 35, 15, - 10, 1, 226, 15, 59, 15, 10, 1, 226, 15, 124, 15, 10, 1, 225, 37, 44, 15, - 10, 1, 225, 37, 35, 15, 10, 1, 225, 37, 59, 15, 10, 1, 225, 37, 124, 15, - 10, 1, 233, 139, 44, 15, 10, 1, 233, 139, 35, 15, 10, 1, 233, 139, 59, - 15, 10, 1, 233, 139, 124, 15, 10, 1, 248, 76, 44, 15, 10, 1, 248, 76, 35, - 15, 10, 1, 248, 76, 59, 15, 10, 1, 248, 76, 124, 15, 10, 1, 234, 167, 44, - 15, 10, 1, 234, 167, 35, 15, 10, 1, 234, 167, 59, 15, 10, 1, 234, 167, - 124, 15, 10, 1, 227, 49, 44, 15, 10, 1, 227, 49, 35, 15, 10, 1, 227, 49, - 59, 15, 10, 1, 227, 49, 124, 15, 10, 1, 227, 47, 44, 15, 10, 1, 227, 47, - 35, 15, 10, 1, 227, 47, 59, 15, 10, 1, 227, 47, 124, 15, 10, 1, 250, 115, - 44, 15, 10, 1, 250, 115, 35, 15, 10, 1, 250, 172, 44, 15, 10, 1, 250, - 172, 35, 15, 10, 1, 248, 100, 44, 15, 10, 1, 248, 100, 35, 15, 10, 1, - 250, 113, 44, 15, 10, 1, 250, 113, 35, 15, 10, 1, 239, 166, 44, 15, 10, - 1, 239, 166, 35, 15, 10, 1, 231, 96, 44, 15, 10, 1, 231, 96, 35, 15, 10, - 1, 238, 252, 44, 15, 10, 1, 238, 252, 35, 15, 10, 1, 238, 252, 59, 15, - 10, 1, 238, 252, 124, 15, 10, 1, 246, 181, 44, 15, 10, 1, 246, 181, 35, - 15, 10, 1, 246, 181, 59, 15, 10, 1, 246, 181, 124, 15, 10, 1, 245, 211, - 44, 15, 10, 1, 245, 211, 35, 15, 10, 1, 245, 211, 59, 15, 10, 1, 245, - 211, 124, 15, 10, 1, 235, 106, 44, 15, 10, 1, 235, 106, 35, 15, 10, 1, - 235, 106, 59, 15, 10, 1, 235, 106, 124, 15, 10, 1, 234, 252, 246, 51, 44, - 15, 10, 1, 234, 252, 246, 51, 35, 15, 10, 1, 231, 126, 44, 15, 10, 1, - 231, 126, 35, 15, 10, 1, 231, 126, 59, 15, 10, 1, 231, 126, 124, 15, 10, - 1, 245, 108, 2, 62, 64, 44, 15, 10, 1, 245, 108, 2, 62, 64, 35, 15, 10, - 1, 245, 108, 246, 9, 44, 15, 10, 1, 245, 108, 246, 9, 35, 15, 10, 1, 245, - 108, 246, 9, 59, 15, 10, 1, 245, 108, 246, 9, 124, 15, 10, 1, 245, 108, - 249, 158, 44, 15, 10, 1, 245, 108, 249, 158, 35, 15, 10, 1, 245, 108, - 249, 158, 59, 15, 10, 1, 245, 108, 249, 158, 124, 15, 10, 1, 62, 253, 30, - 44, 15, 10, 1, 62, 253, 30, 35, 15, 10, 1, 62, 253, 30, 2, 164, 64, 44, - 15, 10, 1, 62, 253, 30, 2, 164, 64, 35, 15, 10, 1, 235, 140, 44, 15, 10, - 1, 235, 140, 35, 15, 10, 1, 235, 140, 59, 15, 10, 1, 235, 140, 124, 15, - 10, 1, 97, 44, 15, 10, 1, 97, 35, 15, 10, 1, 234, 89, 44, 15, 10, 1, 234, - 89, 35, 15, 10, 1, 223, 159, 44, 15, 10, 1, 223, 159, 35, 15, 10, 1, 97, - 2, 164, 64, 44, 15, 10, 1, 225, 43, 44, 15, 10, 1, 225, 43, 35, 15, 10, - 1, 238, 185, 234, 89, 44, 15, 10, 1, 238, 185, 234, 89, 35, 15, 10, 1, - 238, 185, 223, 159, 44, 15, 10, 1, 238, 185, 223, 159, 35, 15, 10, 1, - 161, 44, 15, 10, 1, 161, 35, 15, 10, 1, 161, 59, 15, 10, 1, 161, 124, 15, - 10, 1, 225, 155, 239, 7, 238, 185, 92, 175, 59, 15, 10, 1, 225, 155, 239, - 7, 238, 185, 92, 175, 124, 15, 10, 20, 62, 2, 164, 64, 2, 92, 44, 15, 10, - 20, 62, 2, 164, 64, 2, 92, 35, 15, 10, 20, 62, 2, 164, 64, 2, 255, 20, - 44, 15, 10, 20, 62, 2, 164, 64, 2, 255, 20, 35, 15, 10, 20, 62, 2, 164, - 64, 2, 224, 145, 44, 15, 10, 20, 62, 2, 164, 64, 2, 224, 145, 35, 15, 10, - 20, 62, 2, 164, 64, 2, 97, 44, 15, 10, 20, 62, 2, 164, 64, 2, 97, 35, 15, - 10, 20, 62, 2, 164, 64, 2, 234, 89, 44, 15, 10, 20, 62, 2, 164, 64, 2, - 234, 89, 35, 15, 10, 20, 62, 2, 164, 64, 2, 223, 159, 44, 15, 10, 20, 62, - 2, 164, 64, 2, 223, 159, 35, 15, 10, 20, 62, 2, 164, 64, 2, 161, 44, 15, - 10, 20, 62, 2, 164, 64, 2, 161, 35, 15, 10, 20, 62, 2, 164, 64, 2, 161, - 59, 15, 10, 20, 225, 155, 238, 185, 62, 2, 164, 64, 2, 92, 175, 44, 15, - 10, 20, 225, 155, 238, 185, 62, 2, 164, 64, 2, 92, 175, 35, 15, 10, 20, - 225, 155, 238, 185, 62, 2, 164, 64, 2, 92, 175, 59, 15, 10, 1, 247, 107, - 62, 44, 15, 10, 1, 247, 107, 62, 35, 15, 10, 1, 247, 107, 62, 59, 15, 10, - 1, 247, 107, 62, 124, 15, 10, 20, 62, 2, 164, 64, 2, 123, 44, 15, 10, 20, - 62, 2, 164, 64, 2, 101, 44, 15, 10, 20, 62, 2, 164, 64, 2, 55, 44, 15, - 10, 20, 62, 2, 164, 64, 2, 92, 175, 44, 15, 10, 20, 62, 2, 164, 64, 2, - 62, 44, 15, 10, 20, 252, 224, 2, 123, 44, 15, 10, 20, 252, 224, 2, 101, - 44, 15, 10, 20, 252, 224, 2, 202, 44, 15, 10, 20, 252, 224, 2, 55, 44, - 15, 10, 20, 252, 224, 2, 92, 175, 44, 15, 10, 20, 252, 224, 2, 62, 44, - 15, 10, 20, 227, 35, 2, 123, 44, 15, 10, 20, 227, 35, 2, 101, 44, 15, 10, - 20, 227, 35, 2, 202, 44, 15, 10, 20, 227, 35, 2, 55, 44, 15, 10, 20, 227, - 35, 2, 92, 175, 44, 15, 10, 20, 227, 35, 2, 62, 44, 15, 10, 20, 226, 237, - 2, 123, 44, 15, 10, 20, 226, 237, 2, 55, 44, 15, 10, 20, 226, 237, 2, 92, - 175, 44, 15, 10, 20, 226, 237, 2, 62, 44, 15, 10, 20, 123, 2, 101, 44, - 15, 10, 20, 123, 2, 55, 44, 15, 10, 20, 101, 2, 123, 44, 15, 10, 20, 101, - 2, 55, 44, 15, 10, 20, 202, 2, 123, 44, 15, 10, 20, 202, 2, 101, 44, 15, - 10, 20, 202, 2, 55, 44, 15, 10, 20, 230, 202, 2, 123, 44, 15, 10, 20, - 230, 202, 2, 101, 44, 15, 10, 20, 230, 202, 2, 202, 44, 15, 10, 20, 230, - 202, 2, 55, 44, 15, 10, 20, 231, 25, 2, 101, 44, 15, 10, 20, 231, 25, 2, - 55, 44, 15, 10, 20, 250, 185, 2, 123, 44, 15, 10, 20, 250, 185, 2, 101, - 44, 15, 10, 20, 250, 185, 2, 202, 44, 15, 10, 20, 250, 185, 2, 55, 44, - 15, 10, 20, 227, 92, 2, 101, 44, 15, 10, 20, 227, 92, 2, 55, 44, 15, 10, - 20, 223, 114, 2, 55, 44, 15, 10, 20, 254, 249, 2, 123, 44, 15, 10, 20, - 254, 249, 2, 55, 44, 15, 10, 20, 246, 64, 2, 123, 44, 15, 10, 20, 246, - 64, 2, 55, 44, 15, 10, 20, 247, 88, 2, 123, 44, 15, 10, 20, 247, 88, 2, - 101, 44, 15, 10, 20, 247, 88, 2, 202, 44, 15, 10, 20, 247, 88, 2, 55, 44, - 15, 10, 20, 247, 88, 2, 92, 175, 44, 15, 10, 20, 247, 88, 2, 62, 44, 15, - 10, 20, 232, 132, 2, 101, 44, 15, 10, 20, 232, 132, 2, 55, 44, 15, 10, - 20, 232, 132, 2, 92, 175, 44, 15, 10, 20, 232, 132, 2, 62, 44, 15, 10, - 20, 239, 60, 2, 92, 44, 15, 10, 20, 239, 60, 2, 123, 44, 15, 10, 20, 239, - 60, 2, 101, 44, 15, 10, 20, 239, 60, 2, 202, 44, 15, 10, 20, 239, 60, 2, - 216, 44, 15, 10, 20, 239, 60, 2, 55, 44, 15, 10, 20, 239, 60, 2, 92, 175, - 44, 15, 10, 20, 239, 60, 2, 62, 44, 15, 10, 20, 216, 2, 123, 44, 15, 10, - 20, 216, 2, 101, 44, 15, 10, 20, 216, 2, 202, 44, 15, 10, 20, 216, 2, 55, - 44, 15, 10, 20, 216, 2, 92, 175, 44, 15, 10, 20, 216, 2, 62, 44, 15, 10, - 20, 55, 2, 123, 44, 15, 10, 20, 55, 2, 101, 44, 15, 10, 20, 55, 2, 202, - 44, 15, 10, 20, 55, 2, 55, 44, 15, 10, 20, 55, 2, 92, 175, 44, 15, 10, - 20, 55, 2, 62, 44, 15, 10, 20, 234, 252, 2, 123, 44, 15, 10, 20, 234, - 252, 2, 101, 44, 15, 10, 20, 234, 252, 2, 202, 44, 15, 10, 20, 234, 252, - 2, 55, 44, 15, 10, 20, 234, 252, 2, 92, 175, 44, 15, 10, 20, 234, 252, 2, - 62, 44, 15, 10, 20, 245, 108, 2, 123, 44, 15, 10, 20, 245, 108, 2, 55, - 44, 15, 10, 20, 245, 108, 2, 92, 175, 44, 15, 10, 20, 245, 108, 2, 62, - 44, 15, 10, 20, 62, 2, 123, 44, 15, 10, 20, 62, 2, 101, 44, 15, 10, 20, - 62, 2, 202, 44, 15, 10, 20, 62, 2, 55, 44, 15, 10, 20, 62, 2, 92, 175, - 44, 15, 10, 20, 62, 2, 62, 44, 15, 10, 20, 226, 246, 2, 227, 219, 92, 44, - 15, 10, 20, 231, 226, 2, 227, 219, 92, 44, 15, 10, 20, 92, 175, 2, 227, - 219, 92, 44, 15, 10, 20, 229, 138, 2, 250, 155, 44, 15, 10, 20, 229, 138, - 2, 239, 22, 44, 15, 10, 20, 229, 138, 2, 247, 105, 44, 15, 10, 20, 229, - 138, 2, 250, 157, 44, 15, 10, 20, 229, 138, 2, 239, 24, 44, 15, 10, 20, - 229, 138, 2, 227, 219, 92, 44, 15, 10, 20, 62, 2, 164, 64, 2, 231, 226, - 35, 15, 10, 20, 62, 2, 164, 64, 2, 223, 111, 35, 15, 10, 20, 62, 2, 164, - 64, 2, 55, 35, 15, 10, 20, 62, 2, 164, 64, 2, 234, 252, 35, 15, 10, 20, - 62, 2, 164, 64, 2, 92, 175, 35, 15, 10, 20, 62, 2, 164, 64, 2, 62, 35, - 15, 10, 20, 252, 224, 2, 231, 226, 35, 15, 10, 20, 252, 224, 2, 223, 111, - 35, 15, 10, 20, 252, 224, 2, 55, 35, 15, 10, 20, 252, 224, 2, 234, 252, - 35, 15, 10, 20, 252, 224, 2, 92, 175, 35, 15, 10, 20, 252, 224, 2, 62, - 35, 15, 10, 20, 227, 35, 2, 231, 226, 35, 15, 10, 20, 227, 35, 2, 223, - 111, 35, 15, 10, 20, 227, 35, 2, 55, 35, 15, 10, 20, 227, 35, 2, 234, - 252, 35, 15, 10, 20, 227, 35, 2, 92, 175, 35, 15, 10, 20, 227, 35, 2, 62, - 35, 15, 10, 20, 226, 237, 2, 231, 226, 35, 15, 10, 20, 226, 237, 2, 223, - 111, 35, 15, 10, 20, 226, 237, 2, 55, 35, 15, 10, 20, 226, 237, 2, 234, - 252, 35, 15, 10, 20, 226, 237, 2, 92, 175, 35, 15, 10, 20, 226, 237, 2, - 62, 35, 15, 10, 20, 247, 88, 2, 92, 175, 35, 15, 10, 20, 247, 88, 2, 62, - 35, 15, 10, 20, 232, 132, 2, 92, 175, 35, 15, 10, 20, 232, 132, 2, 62, - 35, 15, 10, 20, 239, 60, 2, 92, 35, 15, 10, 20, 239, 60, 2, 216, 35, 15, - 10, 20, 239, 60, 2, 55, 35, 15, 10, 20, 239, 60, 2, 92, 175, 35, 15, 10, - 20, 239, 60, 2, 62, 35, 15, 10, 20, 216, 2, 55, 35, 15, 10, 20, 216, 2, - 92, 175, 35, 15, 10, 20, 216, 2, 62, 35, 15, 10, 20, 55, 2, 92, 35, 15, - 10, 20, 55, 2, 55, 35, 15, 10, 20, 234, 252, 2, 231, 226, 35, 15, 10, 20, - 234, 252, 2, 223, 111, 35, 15, 10, 20, 234, 252, 2, 55, 35, 15, 10, 20, - 234, 252, 2, 234, 252, 35, 15, 10, 20, 234, 252, 2, 92, 175, 35, 15, 10, - 20, 234, 252, 2, 62, 35, 15, 10, 20, 92, 175, 2, 227, 219, 92, 35, 15, - 10, 20, 62, 2, 231, 226, 35, 15, 10, 20, 62, 2, 223, 111, 35, 15, 10, 20, - 62, 2, 55, 35, 15, 10, 20, 62, 2, 234, 252, 35, 15, 10, 20, 62, 2, 92, - 175, 35, 15, 10, 20, 62, 2, 62, 35, 15, 10, 20, 62, 2, 164, 64, 2, 123, - 59, 15, 10, 20, 62, 2, 164, 64, 2, 101, 59, 15, 10, 20, 62, 2, 164, 64, - 2, 202, 59, 15, 10, 20, 62, 2, 164, 64, 2, 55, 59, 15, 10, 20, 62, 2, - 164, 64, 2, 245, 108, 59, 15, 10, 20, 252, 224, 2, 123, 59, 15, 10, 20, - 252, 224, 2, 101, 59, 15, 10, 20, 252, 224, 2, 202, 59, 15, 10, 20, 252, - 224, 2, 55, 59, 15, 10, 20, 252, 224, 2, 245, 108, 59, 15, 10, 20, 227, - 35, 2, 123, 59, 15, 10, 20, 227, 35, 2, 101, 59, 15, 10, 20, 227, 35, 2, - 202, 59, 15, 10, 20, 227, 35, 2, 55, 59, 15, 10, 20, 227, 35, 2, 245, - 108, 59, 15, 10, 20, 226, 237, 2, 55, 59, 15, 10, 20, 123, 2, 101, 59, - 15, 10, 20, 123, 2, 55, 59, 15, 10, 20, 101, 2, 123, 59, 15, 10, 20, 101, - 2, 55, 59, 15, 10, 20, 202, 2, 123, 59, 15, 10, 20, 202, 2, 55, 59, 15, - 10, 20, 230, 202, 2, 123, 59, 15, 10, 20, 230, 202, 2, 101, 59, 15, 10, - 20, 230, 202, 2, 202, 59, 15, 10, 20, 230, 202, 2, 55, 59, 15, 10, 20, - 231, 25, 2, 101, 59, 15, 10, 20, 231, 25, 2, 202, 59, 15, 10, 20, 231, - 25, 2, 55, 59, 15, 10, 20, 250, 185, 2, 123, 59, 15, 10, 20, 250, 185, 2, - 101, 59, 15, 10, 20, 250, 185, 2, 202, 59, 15, 10, 20, 250, 185, 2, 55, - 59, 15, 10, 20, 227, 92, 2, 101, 59, 15, 10, 20, 223, 114, 2, 55, 59, 15, - 10, 20, 254, 249, 2, 123, 59, 15, 10, 20, 254, 249, 2, 55, 59, 15, 10, - 20, 246, 64, 2, 123, 59, 15, 10, 20, 246, 64, 2, 55, 59, 15, 10, 20, 247, - 88, 2, 123, 59, 15, 10, 20, 247, 88, 2, 101, 59, 15, 10, 20, 247, 88, 2, - 202, 59, 15, 10, 20, 247, 88, 2, 55, 59, 15, 10, 20, 232, 132, 2, 101, - 59, 15, 10, 20, 232, 132, 2, 55, 59, 15, 10, 20, 239, 60, 2, 123, 59, 15, - 10, 20, 239, 60, 2, 101, 59, 15, 10, 20, 239, 60, 2, 202, 59, 15, 10, 20, - 239, 60, 2, 216, 59, 15, 10, 20, 239, 60, 2, 55, 59, 15, 10, 20, 216, 2, - 123, 59, 15, 10, 20, 216, 2, 101, 59, 15, 10, 20, 216, 2, 202, 59, 15, - 10, 20, 216, 2, 55, 59, 15, 10, 20, 216, 2, 245, 108, 59, 15, 10, 20, 55, - 2, 123, 59, 15, 10, 20, 55, 2, 101, 59, 15, 10, 20, 55, 2, 202, 59, 15, - 10, 20, 55, 2, 55, 59, 15, 10, 20, 234, 252, 2, 123, 59, 15, 10, 20, 234, - 252, 2, 101, 59, 15, 10, 20, 234, 252, 2, 202, 59, 15, 10, 20, 234, 252, - 2, 55, 59, 15, 10, 20, 234, 252, 2, 245, 108, 59, 15, 10, 20, 245, 108, - 2, 123, 59, 15, 10, 20, 245, 108, 2, 55, 59, 15, 10, 20, 245, 108, 2, - 227, 219, 92, 59, 15, 10, 20, 62, 2, 123, 59, 15, 10, 20, 62, 2, 101, 59, - 15, 10, 20, 62, 2, 202, 59, 15, 10, 20, 62, 2, 55, 59, 15, 10, 20, 62, 2, - 245, 108, 59, 15, 10, 20, 62, 2, 164, 64, 2, 55, 124, 15, 10, 20, 62, 2, - 164, 64, 2, 245, 108, 124, 15, 10, 20, 252, 224, 2, 55, 124, 15, 10, 20, - 252, 224, 2, 245, 108, 124, 15, 10, 20, 227, 35, 2, 55, 124, 15, 10, 20, - 227, 35, 2, 245, 108, 124, 15, 10, 20, 226, 237, 2, 55, 124, 15, 10, 20, - 226, 237, 2, 245, 108, 124, 15, 10, 20, 230, 202, 2, 55, 124, 15, 10, 20, - 230, 202, 2, 245, 108, 124, 15, 10, 20, 229, 111, 2, 55, 124, 15, 10, 20, - 229, 111, 2, 245, 108, 124, 15, 10, 20, 239, 60, 2, 216, 124, 15, 10, 20, - 239, 60, 2, 55, 124, 15, 10, 20, 216, 2, 55, 124, 15, 10, 20, 234, 252, - 2, 55, 124, 15, 10, 20, 234, 252, 2, 245, 108, 124, 15, 10, 20, 62, 2, - 55, 124, 15, 10, 20, 62, 2, 245, 108, 124, 15, 10, 20, 229, 138, 2, 247, - 105, 124, 15, 10, 20, 229, 138, 2, 250, 157, 124, 15, 10, 20, 229, 138, - 2, 239, 24, 124, 15, 10, 20, 227, 92, 2, 92, 175, 44, 15, 10, 20, 227, - 92, 2, 62, 44, 15, 10, 20, 254, 249, 2, 92, 175, 44, 15, 10, 20, 254, - 249, 2, 62, 44, 15, 10, 20, 246, 64, 2, 92, 175, 44, 15, 10, 20, 246, 64, - 2, 62, 44, 15, 10, 20, 230, 202, 2, 92, 175, 44, 15, 10, 20, 230, 202, 2, - 62, 44, 15, 10, 20, 229, 111, 2, 92, 175, 44, 15, 10, 20, 229, 111, 2, - 62, 44, 15, 10, 20, 101, 2, 92, 175, 44, 15, 10, 20, 101, 2, 62, 44, 15, - 10, 20, 123, 2, 92, 175, 44, 15, 10, 20, 123, 2, 62, 44, 15, 10, 20, 202, - 2, 92, 175, 44, 15, 10, 20, 202, 2, 62, 44, 15, 10, 20, 231, 25, 2, 92, - 175, 44, 15, 10, 20, 231, 25, 2, 62, 44, 15, 10, 20, 250, 185, 2, 92, - 175, 44, 15, 10, 20, 250, 185, 2, 62, 44, 15, 10, 20, 229, 111, 2, 123, - 44, 15, 10, 20, 229, 111, 2, 101, 44, 15, 10, 20, 229, 111, 2, 202, 44, - 15, 10, 20, 229, 111, 2, 55, 44, 15, 10, 20, 229, 111, 2, 231, 226, 44, - 15, 10, 20, 230, 202, 2, 231, 226, 44, 15, 10, 20, 231, 25, 2, 231, 226, - 44, 15, 10, 20, 250, 185, 2, 231, 226, 44, 15, 10, 20, 227, 92, 2, 92, - 175, 35, 15, 10, 20, 227, 92, 2, 62, 35, 15, 10, 20, 254, 249, 2, 92, - 175, 35, 15, 10, 20, 254, 249, 2, 62, 35, 15, 10, 20, 246, 64, 2, 92, - 175, 35, 15, 10, 20, 246, 64, 2, 62, 35, 15, 10, 20, 230, 202, 2, 92, - 175, 35, 15, 10, 20, 230, 202, 2, 62, 35, 15, 10, 20, 229, 111, 2, 92, - 175, 35, 15, 10, 20, 229, 111, 2, 62, 35, 15, 10, 20, 101, 2, 92, 175, - 35, 15, 10, 20, 101, 2, 62, 35, 15, 10, 20, 123, 2, 92, 175, 35, 15, 10, - 20, 123, 2, 62, 35, 15, 10, 20, 202, 2, 92, 175, 35, 15, 10, 20, 202, 2, - 62, 35, 15, 10, 20, 231, 25, 2, 92, 175, 35, 15, 10, 20, 231, 25, 2, 62, - 35, 15, 10, 20, 250, 185, 2, 92, 175, 35, 15, 10, 20, 250, 185, 2, 62, - 35, 15, 10, 20, 229, 111, 2, 123, 35, 15, 10, 20, 229, 111, 2, 101, 35, - 15, 10, 20, 229, 111, 2, 202, 35, 15, 10, 20, 229, 111, 2, 55, 35, 15, - 10, 20, 229, 111, 2, 231, 226, 35, 15, 10, 20, 230, 202, 2, 231, 226, 35, - 15, 10, 20, 231, 25, 2, 231, 226, 35, 15, 10, 20, 250, 185, 2, 231, 226, - 35, 15, 10, 20, 229, 111, 2, 123, 59, 15, 10, 20, 229, 111, 2, 101, 59, - 15, 10, 20, 229, 111, 2, 202, 59, 15, 10, 20, 229, 111, 2, 55, 59, 15, - 10, 20, 230, 202, 2, 245, 108, 59, 15, 10, 20, 229, 111, 2, 245, 108, 59, - 15, 10, 20, 227, 92, 2, 55, 59, 15, 10, 20, 230, 202, 2, 123, 124, 15, - 10, 20, 230, 202, 2, 101, 124, 15, 10, 20, 230, 202, 2, 202, 124, 15, 10, - 20, 229, 111, 2, 123, 124, 15, 10, 20, 229, 111, 2, 101, 124, 15, 10, 20, - 229, 111, 2, 202, 124, 15, 10, 20, 227, 92, 2, 55, 124, 15, 10, 20, 223, - 114, 2, 55, 124, 15, 10, 20, 92, 2, 247, 103, 35, 15, 10, 20, 92, 2, 247, - 103, 44, 15, 234, 24, 42, 233, 180, 234, 24, 41, 233, 180, 10, 20, 227, - 35, 2, 123, 2, 55, 59, 15, 10, 20, 227, 35, 2, 101, 2, 123, 35, 15, 10, - 20, 227, 35, 2, 101, 2, 123, 59, 15, 10, 20, 227, 35, 2, 101, 2, 55, 59, - 15, 10, 20, 227, 35, 2, 202, 2, 55, 59, 15, 10, 20, 227, 35, 2, 55, 2, - 123, 59, 15, 10, 20, 227, 35, 2, 55, 2, 101, 59, 15, 10, 20, 227, 35, 2, - 55, 2, 202, 59, 15, 10, 20, 123, 2, 55, 2, 101, 35, 15, 10, 20, 123, 2, - 55, 2, 101, 59, 15, 10, 20, 101, 2, 55, 2, 62, 35, 15, 10, 20, 101, 2, - 55, 2, 92, 175, 35, 15, 10, 20, 230, 202, 2, 101, 2, 123, 59, 15, 10, 20, - 230, 202, 2, 123, 2, 101, 59, 15, 10, 20, 230, 202, 2, 123, 2, 92, 175, - 35, 15, 10, 20, 230, 202, 2, 55, 2, 101, 35, 15, 10, 20, 230, 202, 2, 55, - 2, 101, 59, 15, 10, 20, 230, 202, 2, 55, 2, 123, 59, 15, 10, 20, 230, - 202, 2, 55, 2, 55, 35, 15, 10, 20, 230, 202, 2, 55, 2, 55, 59, 15, 10, - 20, 231, 25, 2, 101, 2, 101, 35, 15, 10, 20, 231, 25, 2, 101, 2, 101, 59, - 15, 10, 20, 231, 25, 2, 55, 2, 55, 35, 15, 10, 20, 229, 111, 2, 101, 2, - 55, 35, 15, 10, 20, 229, 111, 2, 101, 2, 55, 59, 15, 10, 20, 229, 111, 2, - 123, 2, 62, 35, 15, 10, 20, 229, 111, 2, 55, 2, 202, 35, 15, 10, 20, 229, - 111, 2, 55, 2, 202, 59, 15, 10, 20, 229, 111, 2, 55, 2, 55, 35, 15, 10, - 20, 229, 111, 2, 55, 2, 55, 59, 15, 10, 20, 250, 185, 2, 101, 2, 92, 175, - 35, 15, 10, 20, 250, 185, 2, 202, 2, 55, 35, 15, 10, 20, 250, 185, 2, - 202, 2, 55, 59, 15, 10, 20, 227, 92, 2, 55, 2, 101, 35, 15, 10, 20, 227, - 92, 2, 55, 2, 101, 59, 15, 10, 20, 227, 92, 2, 55, 2, 55, 59, 15, 10, 20, - 227, 92, 2, 55, 2, 62, 35, 15, 10, 20, 254, 249, 2, 123, 2, 55, 35, 15, - 10, 20, 254, 249, 2, 55, 2, 55, 35, 15, 10, 20, 254, 249, 2, 55, 2, 55, - 59, 15, 10, 20, 254, 249, 2, 55, 2, 92, 175, 35, 15, 10, 20, 246, 64, 2, - 55, 2, 55, 35, 15, 10, 20, 246, 64, 2, 55, 2, 62, 35, 15, 10, 20, 246, - 64, 2, 55, 2, 92, 175, 35, 15, 10, 20, 247, 88, 2, 202, 2, 55, 35, 15, - 10, 20, 247, 88, 2, 202, 2, 55, 59, 15, 10, 20, 232, 132, 2, 55, 2, 101, - 35, 15, 10, 20, 232, 132, 2, 55, 2, 55, 35, 15, 10, 20, 216, 2, 101, 2, - 55, 35, 15, 10, 20, 216, 2, 101, 2, 62, 35, 15, 10, 20, 216, 2, 101, 2, - 92, 175, 35, 15, 10, 20, 216, 2, 123, 2, 123, 59, 15, 10, 20, 216, 2, - 123, 2, 123, 35, 15, 10, 20, 216, 2, 202, 2, 55, 35, 15, 10, 20, 216, 2, - 202, 2, 55, 59, 15, 10, 20, 216, 2, 55, 2, 101, 35, 15, 10, 20, 216, 2, - 55, 2, 101, 59, 15, 10, 20, 55, 2, 101, 2, 123, 59, 15, 10, 20, 55, 2, - 101, 2, 55, 59, 15, 10, 20, 55, 2, 101, 2, 62, 35, 15, 10, 20, 55, 2, - 123, 2, 101, 59, 15, 10, 20, 55, 2, 123, 2, 55, 59, 15, 10, 20, 55, 2, - 202, 2, 123, 59, 15, 10, 20, 55, 2, 202, 2, 55, 59, 15, 10, 20, 55, 2, - 123, 2, 202, 59, 15, 10, 20, 245, 108, 2, 55, 2, 123, 59, 15, 10, 20, - 245, 108, 2, 55, 2, 55, 59, 15, 10, 20, 234, 252, 2, 101, 2, 55, 59, 15, - 10, 20, 234, 252, 2, 101, 2, 92, 175, 35, 15, 10, 20, 234, 252, 2, 123, - 2, 55, 35, 15, 10, 20, 234, 252, 2, 123, 2, 55, 59, 15, 10, 20, 234, 252, - 2, 123, 2, 92, 175, 35, 15, 10, 20, 234, 252, 2, 55, 2, 62, 35, 15, 10, - 20, 234, 252, 2, 55, 2, 92, 175, 35, 15, 10, 20, 62, 2, 55, 2, 55, 35, - 15, 10, 20, 62, 2, 55, 2, 55, 59, 15, 10, 20, 252, 224, 2, 202, 2, 62, - 35, 15, 10, 20, 227, 35, 2, 123, 2, 62, 35, 15, 10, 20, 227, 35, 2, 123, - 2, 92, 175, 35, 15, 10, 20, 227, 35, 2, 202, 2, 62, 35, 15, 10, 20, 227, - 35, 2, 202, 2, 92, 175, 35, 15, 10, 20, 227, 35, 2, 55, 2, 62, 35, 15, - 10, 20, 227, 35, 2, 55, 2, 92, 175, 35, 15, 10, 20, 123, 2, 55, 2, 62, - 35, 15, 10, 20, 123, 2, 101, 2, 92, 175, 35, 15, 10, 20, 123, 2, 55, 2, - 92, 175, 35, 15, 10, 20, 230, 202, 2, 202, 2, 92, 175, 35, 15, 10, 20, - 231, 25, 2, 101, 2, 62, 35, 15, 10, 20, 229, 111, 2, 101, 2, 62, 35, 15, - 10, 20, 250, 185, 2, 101, 2, 62, 35, 15, 10, 20, 216, 2, 123, 2, 62, 35, - 15, 10, 20, 216, 2, 55, 2, 62, 35, 15, 10, 20, 62, 2, 101, 2, 62, 35, 15, - 10, 20, 62, 2, 123, 2, 62, 35, 15, 10, 20, 62, 2, 55, 2, 62, 35, 15, 10, - 20, 55, 2, 55, 2, 62, 35, 15, 10, 20, 232, 132, 2, 55, 2, 62, 35, 15, 10, - 20, 234, 252, 2, 101, 2, 62, 35, 15, 10, 20, 232, 132, 2, 55, 2, 101, 59, - 15, 10, 20, 216, 2, 101, 2, 55, 59, 15, 10, 20, 254, 249, 2, 55, 2, 62, - 35, 15, 10, 20, 239, 60, 2, 55, 2, 62, 35, 15, 10, 20, 234, 252, 2, 123, - 2, 101, 59, 15, 10, 20, 55, 2, 202, 2, 62, 35, 15, 10, 20, 216, 2, 123, - 2, 55, 59, 15, 10, 20, 239, 60, 2, 55, 2, 55, 35, 15, 10, 20, 216, 2, - 123, 2, 55, 35, 15, 10, 20, 234, 252, 2, 123, 2, 101, 35, 15, 10, 20, - 123, 2, 101, 2, 62, 35, 15, 10, 20, 101, 2, 123, 2, 62, 35, 15, 10, 20, - 55, 2, 123, 2, 62, 35, 15, 10, 20, 247, 88, 2, 55, 2, 62, 35, 15, 10, 20, - 252, 224, 2, 101, 2, 62, 35, 15, 10, 20, 239, 60, 2, 55, 2, 55, 59, 15, - 10, 20, 254, 249, 2, 123, 2, 55, 59, 15, 10, 20, 231, 25, 2, 55, 2, 55, - 59, 15, 10, 20, 230, 202, 2, 202, 2, 62, 35, 15, 10, 20, 234, 252, 2, - 123, 2, 62, 35, 15, 10, 20, 231, 9, 225, 85, 254, 87, 238, 134, 228, 39, - 5, 44, 15, 10, 20, 232, 128, 225, 85, 254, 87, 238, 134, 228, 39, 5, 44, - 15, 10, 20, 254, 215, 44, 15, 10, 20, 254, 237, 44, 15, 10, 20, 236, 97, - 44, 15, 10, 20, 231, 10, 44, 15, 10, 20, 231, 254, 44, 15, 10, 20, 254, - 229, 44, 15, 10, 20, 224, 160, 44, 15, 10, 20, 231, 9, 44, 15, 10, 20, - 231, 8, 254, 229, 224, 159, 10, 20, 239, 176, 231, 179, 53, 10, 20, 252, - 158, 254, 132, 254, 133, 38, 230, 192, 38, 230, 81, 38, 230, 13, 38, 230, - 2, 38, 229, 247, 38, 229, 236, 38, 229, 225, 38, 229, 214, 38, 229, 203, - 38, 230, 191, 38, 230, 180, 38, 230, 169, 38, 230, 158, 38, 230, 147, 38, - 230, 136, 38, 230, 125, 232, 208, 211, 32, 61, 251, 54, 232, 208, 211, - 32, 61, 90, 251, 54, 232, 208, 211, 32, 61, 90, 246, 218, 228, 38, 232, - 208, 211, 32, 61, 251, 61, 232, 208, 211, 32, 61, 229, 186, 232, 208, - 211, 32, 61, 247, 149, 76, 232, 208, 211, 32, 61, 232, 69, 76, 232, 208, - 211, 32, 61, 42, 63, 237, 217, 104, 232, 208, 211, 32, 61, 41, 63, 237, - 217, 252, 114, 232, 208, 211, 32, 61, 169, 247, 249, 36, 20, 42, 245, - 151, 36, 20, 41, 245, 151, 36, 47, 226, 159, 42, 245, 151, 36, 47, 226, - 159, 41, 245, 151, 36, 237, 64, 42, 245, 151, 36, 237, 64, 41, 245, 151, - 36, 251, 37, 237, 63, 232, 208, 211, 32, 61, 135, 56, 237, 242, 232, 208, - 211, 32, 61, 247, 248, 250, 130, 232, 208, 211, 32, 61, 247, 240, 250, - 130, 232, 208, 211, 32, 61, 184, 237, 170, 232, 208, 211, 32, 61, 224, - 146, 184, 237, 170, 232, 208, 211, 32, 61, 42, 233, 180, 232, 208, 211, - 32, 61, 41, 233, 180, 232, 208, 211, 32, 61, 42, 250, 223, 104, 232, 208, - 211, 32, 61, 41, 250, 223, 104, 232, 208, 211, 32, 61, 42, 226, 100, 229, - 104, 104, 232, 208, 211, 32, 61, 41, 226, 100, 229, 104, 104, 232, 208, - 211, 32, 61, 42, 86, 237, 217, 104, 232, 208, 211, 32, 61, 41, 86, 237, - 217, 104, 232, 208, 211, 32, 61, 42, 47, 254, 182, 104, 232, 208, 211, - 32, 61, 41, 47, 254, 182, 104, 232, 208, 211, 32, 61, 42, 254, 182, 104, - 232, 208, 211, 32, 61, 41, 254, 182, 104, 232, 208, 211, 32, 61, 42, 251, - 11, 104, 232, 208, 211, 32, 61, 41, 251, 11, 104, 232, 208, 211, 32, 61, - 42, 63, 251, 11, 104, 232, 208, 211, 32, 61, 41, 63, 251, 11, 104, 229, - 168, 249, 140, 63, 229, 168, 249, 140, 232, 208, 211, 32, 61, 42, 37, - 104, 232, 208, 211, 32, 61, 41, 37, 104, 250, 129, 234, 1, 251, 216, 234, - 1, 224, 146, 234, 1, 47, 224, 146, 234, 1, 250, 129, 184, 237, 170, 251, - 216, 184, 237, 170, 224, 146, 184, 237, 170, 3, 251, 54, 3, 90, 251, 54, - 3, 246, 218, 228, 38, 3, 229, 186, 3, 251, 61, 3, 232, 69, 76, 3, 247, - 149, 76, 3, 247, 248, 250, 130, 3, 42, 233, 180, 3, 41, 233, 180, 3, 42, - 250, 223, 104, 3, 41, 250, 223, 104, 3, 42, 226, 100, 229, 104, 104, 3, - 41, 226, 100, 229, 104, 104, 3, 65, 53, 3, 254, 193, 3, 254, 69, 3, 79, - 53, 3, 244, 94, 3, 237, 213, 53, 3, 245, 231, 53, 3, 247, 204, 53, 3, - 231, 193, 228, 161, 3, 249, 150, 53, 3, 233, 123, 53, 3, 251, 53, 254, - 62, 10, 247, 103, 44, 15, 10, 227, 64, 2, 247, 103, 46, 10, 250, 155, 44, - 15, 10, 227, 90, 246, 234, 10, 239, 22, 44, 15, 10, 247, 105, 44, 15, 10, - 247, 105, 124, 15, 10, 250, 157, 44, 15, 10, 250, 157, 124, 15, 10, 239, - 24, 44, 15, 10, 239, 24, 124, 15, 10, 229, 138, 44, 15, 10, 229, 138, - 124, 15, 10, 227, 235, 44, 15, 10, 227, 235, 124, 15, 10, 1, 164, 44, 15, - 10, 1, 92, 2, 237, 59, 64, 44, 15, 10, 1, 92, 2, 237, 59, 64, 35, 15, 10, - 1, 92, 2, 164, 64, 44, 15, 10, 1, 92, 2, 164, 64, 35, 15, 10, 1, 224, - 145, 2, 164, 64, 44, 15, 10, 1, 224, 145, 2, 164, 64, 35, 15, 10, 1, 92, - 2, 164, 252, 214, 44, 15, 10, 1, 92, 2, 164, 252, 214, 35, 15, 10, 1, 62, - 2, 164, 64, 44, 15, 10, 1, 62, 2, 164, 64, 35, 15, 10, 1, 62, 2, 164, 64, - 59, 15, 10, 1, 62, 2, 164, 64, 124, 15, 10, 1, 92, 44, 15, 10, 1, 92, 35, - 15, 10, 1, 252, 224, 44, 15, 10, 1, 252, 224, 35, 15, 10, 1, 252, 224, - 59, 15, 10, 1, 252, 224, 124, 15, 10, 1, 227, 35, 237, 23, 44, 15, 10, 1, - 227, 35, 237, 23, 35, 15, 10, 1, 227, 35, 44, 15, 10, 1, 227, 35, 35, 15, - 10, 1, 227, 35, 59, 15, 10, 1, 227, 35, 124, 15, 10, 1, 226, 237, 44, 15, - 10, 1, 226, 237, 35, 15, 10, 1, 226, 237, 59, 15, 10, 1, 226, 237, 124, - 15, 10, 1, 123, 44, 15, 10, 1, 123, 35, 15, 10, 1, 123, 59, 15, 10, 1, - 123, 124, 15, 10, 1, 101, 44, 15, 10, 1, 101, 35, 15, 10, 1, 101, 59, 15, - 10, 1, 101, 124, 15, 10, 1, 202, 44, 15, 10, 1, 202, 35, 15, 10, 1, 202, - 59, 15, 10, 1, 202, 124, 15, 10, 1, 250, 166, 44, 15, 10, 1, 250, 166, - 35, 15, 10, 1, 226, 246, 44, 15, 10, 1, 226, 246, 35, 15, 10, 1, 231, - 226, 44, 15, 10, 1, 231, 226, 35, 15, 10, 1, 223, 111, 44, 15, 10, 1, - 223, 111, 35, 15, 10, 1, 230, 202, 44, 15, 10, 1, 230, 202, 35, 15, 10, - 1, 230, 202, 59, 15, 10, 1, 230, 202, 124, 15, 10, 1, 229, 111, 44, 15, - 10, 1, 229, 111, 35, 15, 10, 1, 229, 111, 59, 15, 10, 1, 229, 111, 124, - 15, 10, 1, 231, 25, 44, 15, 10, 1, 231, 25, 35, 15, 10, 1, 231, 25, 59, - 15, 10, 1, 231, 25, 124, 15, 10, 1, 250, 185, 44, 15, 10, 1, 250, 185, - 35, 15, 10, 1, 250, 185, 59, 15, 10, 1, 250, 185, 124, 15, 10, 1, 227, - 92, 44, 15, 10, 1, 227, 92, 35, 15, 10, 1, 227, 92, 59, 15, 10, 1, 227, - 92, 124, 15, 10, 1, 223, 114, 44, 15, 10, 1, 223, 114, 35, 15, 10, 1, - 223, 114, 59, 15, 10, 1, 223, 114, 124, 15, 10, 1, 254, 249, 44, 15, 10, - 1, 254, 249, 35, 15, 10, 1, 254, 249, 59, 15, 10, 1, 254, 249, 124, 15, - 10, 1, 246, 64, 44, 15, 10, 1, 246, 64, 35, 15, 10, 1, 246, 64, 59, 15, - 10, 1, 246, 64, 124, 15, 10, 1, 247, 88, 44, 15, 10, 1, 247, 88, 35, 15, - 10, 1, 247, 88, 59, 15, 10, 1, 247, 88, 124, 15, 10, 1, 232, 132, 44, 15, - 10, 1, 232, 132, 35, 15, 10, 1, 232, 132, 59, 15, 10, 1, 232, 132, 124, - 15, 10, 1, 239, 60, 44, 15, 10, 1, 239, 60, 35, 15, 10, 1, 239, 60, 59, - 15, 10, 1, 239, 60, 124, 15, 10, 1, 216, 44, 15, 10, 1, 216, 35, 15, 10, - 1, 216, 59, 15, 10, 1, 216, 124, 15, 10, 1, 55, 44, 15, 10, 1, 55, 35, - 15, 10, 1, 55, 59, 15, 10, 1, 55, 124, 15, 10, 1, 234, 252, 44, 15, 10, - 1, 234, 252, 35, 15, 10, 1, 234, 252, 59, 15, 10, 1, 234, 252, 124, 15, - 10, 1, 245, 108, 44, 15, 10, 1, 245, 108, 35, 15, 10, 1, 245, 108, 59, - 15, 10, 1, 245, 108, 124, 15, 10, 1, 224, 145, 44, 15, 10, 1, 224, 145, - 35, 15, 10, 1, 92, 175, 44, 15, 10, 1, 92, 175, 35, 15, 10, 1, 62, 44, - 15, 10, 1, 62, 35, 15, 10, 1, 62, 59, 15, 10, 1, 62, 124, 15, 10, 20, - 216, 2, 92, 2, 237, 59, 64, 44, 15, 10, 20, 216, 2, 92, 2, 237, 59, 64, - 35, 15, 10, 20, 216, 2, 92, 2, 164, 64, 44, 15, 10, 20, 216, 2, 92, 2, - 164, 64, 35, 15, 10, 20, 216, 2, 92, 2, 164, 252, 214, 44, 15, 10, 20, - 216, 2, 92, 2, 164, 252, 214, 35, 15, 10, 20, 216, 2, 92, 44, 15, 10, 20, - 216, 2, 92, 35, 15, 223, 90, 224, 115, 235, 5, 228, 145, 100, 247, 149, - 76, 100, 232, 57, 76, 100, 65, 53, 100, 249, 150, 53, 100, 233, 123, 53, - 100, 254, 193, 100, 254, 144, 100, 42, 233, 180, 100, 41, 233, 180, 100, - 254, 69, 100, 79, 53, 100, 251, 54, 100, 244, 94, 100, 246, 218, 228, 38, - 100, 228, 161, 100, 21, 223, 89, 100, 21, 118, 100, 21, 113, 100, 21, - 166, 100, 21, 158, 100, 21, 173, 100, 21, 183, 100, 21, 194, 100, 21, - 187, 100, 21, 192, 100, 251, 61, 100, 229, 186, 100, 237, 213, 53, 100, - 247, 204, 53, 100, 245, 231, 53, 100, 232, 69, 76, 100, 251, 53, 254, 62, - 100, 7, 6, 1, 57, 100, 7, 6, 1, 254, 27, 100, 7, 6, 1, 252, 44, 100, 7, - 6, 1, 222, 222, 100, 7, 6, 1, 72, 100, 7, 6, 1, 247, 130, 100, 7, 6, 1, - 214, 100, 7, 6, 1, 212, 100, 7, 6, 1, 74, 100, 7, 6, 1, 239, 182, 100, 7, - 6, 1, 239, 76, 100, 7, 6, 1, 149, 100, 7, 6, 1, 185, 100, 7, 6, 1, 199, - 100, 7, 6, 1, 73, 100, 7, 6, 1, 233, 244, 100, 7, 6, 1, 232, 139, 100, 7, - 6, 1, 146, 100, 7, 6, 1, 193, 100, 7, 6, 1, 227, 109, 100, 7, 6, 1, 66, - 100, 7, 6, 1, 196, 100, 7, 6, 1, 224, 174, 100, 7, 6, 1, 224, 73, 100, 7, - 6, 1, 224, 25, 100, 7, 6, 1, 223, 119, 100, 42, 37, 104, 100, 231, 193, - 228, 161, 100, 41, 37, 104, 100, 251, 102, 255, 41, 100, 184, 237, 170, - 100, 245, 237, 255, 41, 100, 7, 3, 1, 57, 100, 7, 3, 1, 254, 27, 100, 7, - 3, 1, 252, 44, 100, 7, 3, 1, 222, 222, 100, 7, 3, 1, 72, 100, 7, 3, 1, - 247, 130, 100, 7, 3, 1, 214, 100, 7, 3, 1, 212, 100, 7, 3, 1, 74, 100, 7, - 3, 1, 239, 182, 100, 7, 3, 1, 239, 76, 100, 7, 3, 1, 149, 100, 7, 3, 1, - 185, 100, 7, 3, 1, 199, 100, 7, 3, 1, 73, 100, 7, 3, 1, 233, 244, 100, 7, - 3, 1, 232, 139, 100, 7, 3, 1, 146, 100, 7, 3, 1, 193, 100, 7, 3, 1, 227, - 109, 100, 7, 3, 1, 66, 100, 7, 3, 1, 196, 100, 7, 3, 1, 224, 174, 100, 7, - 3, 1, 224, 73, 100, 7, 3, 1, 224, 25, 100, 7, 3, 1, 223, 119, 100, 42, - 250, 223, 104, 100, 61, 237, 170, 100, 41, 250, 223, 104, 100, 205, 100, - 42, 63, 233, 180, 100, 41, 63, 233, 180, 83, 90, 246, 218, 228, 38, 83, - 42, 251, 11, 104, 83, 41, 251, 11, 104, 83, 90, 251, 54, 83, 48, 236, - 154, 249, 140, 83, 48, 1, 224, 105, 83, 48, 1, 3, 57, 83, 48, 1, 3, 74, - 83, 48, 1, 3, 66, 83, 48, 1, 3, 72, 83, 48, 1, 3, 73, 83, 48, 1, 3, 191, - 83, 48, 1, 3, 223, 158, 83, 48, 1, 3, 223, 183, 83, 48, 1, 3, 225, 250, - 83, 239, 19, 232, 194, 228, 155, 76, 83, 48, 1, 57, 83, 48, 1, 74, 83, - 48, 1, 66, 83, 48, 1, 72, 83, 48, 1, 73, 83, 48, 1, 177, 83, 48, 1, 238, - 199, 83, 48, 1, 238, 107, 83, 48, 1, 239, 3, 83, 48, 1, 238, 150, 83, 48, - 1, 231, 31, 83, 48, 1, 229, 15, 83, 48, 1, 228, 6, 83, 48, 1, 230, 213, - 83, 48, 1, 228, 169, 83, 48, 1, 227, 107, 83, 48, 1, 226, 175, 83, 48, 1, - 225, 250, 83, 48, 1, 227, 44, 83, 48, 1, 96, 83, 48, 1, 236, 1, 83, 48, - 1, 235, 89, 83, 48, 1, 234, 206, 83, 48, 1, 235, 162, 83, 48, 1, 235, 6, - 83, 48, 1, 154, 83, 48, 1, 245, 75, 83, 48, 1, 244, 145, 83, 48, 1, 245, - 121, 83, 48, 1, 244, 227, 83, 48, 1, 198, 83, 48, 1, 236, 157, 83, 48, 1, - 236, 66, 83, 48, 1, 236, 235, 83, 48, 1, 236, 103, 83, 48, 1, 191, 83, - 48, 1, 223, 158, 83, 48, 1, 223, 183, 83, 48, 1, 208, 83, 48, 1, 231, - 180, 83, 48, 1, 231, 70, 83, 48, 1, 231, 244, 83, 48, 1, 231, 122, 83, - 48, 1, 224, 173, 83, 48, 1, 199, 83, 48, 224, 204, 228, 155, 76, 83, 48, - 229, 191, 228, 155, 76, 83, 26, 247, 52, 83, 26, 1, 238, 173, 83, 26, 1, - 228, 104, 83, 26, 1, 238, 171, 83, 26, 1, 235, 82, 83, 26, 1, 235, 81, - 83, 26, 1, 235, 80, 83, 26, 1, 226, 163, 83, 26, 1, 228, 99, 83, 26, 1, - 231, 174, 83, 26, 1, 231, 170, 83, 26, 1, 231, 168, 83, 26, 1, 231, 162, - 83, 26, 1, 231, 159, 83, 26, 1, 231, 157, 83, 26, 1, 231, 163, 83, 26, 1, - 231, 173, 83, 26, 1, 236, 148, 83, 26, 1, 233, 60, 83, 26, 1, 228, 102, - 83, 26, 1, 233, 52, 83, 26, 1, 228, 236, 83, 26, 1, 228, 100, 83, 26, 1, - 240, 68, 83, 26, 1, 251, 113, 83, 26, 1, 228, 107, 83, 26, 1, 251, 167, - 83, 26, 1, 238, 210, 83, 26, 1, 226, 218, 83, 26, 1, 233, 85, 83, 26, 1, - 245, 69, 83, 26, 1, 57, 83, 26, 1, 255, 19, 83, 26, 1, 191, 83, 26, 1, - 224, 10, 83, 26, 1, 247, 217, 83, 26, 1, 72, 83, 26, 1, 223, 221, 83, 26, - 1, 223, 228, 83, 26, 1, 73, 83, 26, 1, 224, 173, 83, 26, 1, 224, 170, 83, - 26, 1, 234, 88, 83, 26, 1, 223, 183, 83, 26, 1, 66, 83, 26, 1, 224, 133, - 83, 26, 1, 224, 141, 83, 26, 1, 224, 118, 83, 26, 1, 223, 158, 83, 26, 1, - 247, 165, 83, 26, 1, 223, 202, 83, 26, 1, 74, 100, 251, 220, 53, 100, - 232, 234, 53, 100, 190, 53, 100, 237, 63, 100, 252, 99, 125, 100, 223, - 222, 53, 100, 224, 100, 53, 83, 246, 248, 157, 225, 30, 83, 117, 58, 83, - 225, 106, 58, 83, 81, 58, 83, 248, 125, 58, 83, 86, 228, 120, 83, 63, - 251, 106, 239, 233, 254, 175, 254, 188, 239, 233, 254, 175, 229, 173, - 239, 233, 254, 175, 227, 16, 234, 98, 231, 209, 251, 191, 231, 209, 251, - 191, 50, 45, 4, 254, 19, 57, 50, 45, 4, 253, 246, 72, 50, 45, 4, 253, - 255, 74, 50, 45, 4, 253, 223, 73, 50, 45, 4, 254, 17, 66, 50, 45, 4, 254, - 26, 250, 189, 50, 45, 4, 253, 239, 250, 77, 50, 45, 4, 254, 20, 250, 4, - 50, 45, 4, 254, 13, 249, 161, 50, 45, 4, 253, 233, 248, 107, 50, 45, 4, - 253, 227, 239, 179, 50, 45, 4, 253, 238, 239, 170, 50, 45, 4, 253, 248, - 239, 117, 50, 45, 4, 253, 219, 239, 101, 50, 45, 4, 253, 207, 177, 50, - 45, 4, 253, 240, 239, 3, 50, 45, 4, 253, 217, 238, 199, 50, 45, 4, 253, - 214, 238, 150, 50, 45, 4, 253, 203, 238, 107, 50, 45, 4, 253, 204, 198, - 50, 45, 4, 254, 14, 236, 235, 50, 45, 4, 253, 211, 236, 157, 50, 45, 4, - 254, 12, 236, 103, 50, 45, 4, 254, 4, 236, 66, 50, 45, 4, 254, 21, 236, - 1, 50, 45, 4, 254, 3, 235, 162, 50, 45, 4, 253, 253, 235, 89, 50, 45, 4, - 253, 232, 235, 6, 50, 45, 4, 253, 229, 234, 206, 50, 45, 4, 254, 24, 213, - 50, 45, 4, 253, 212, 233, 151, 50, 45, 4, 253, 245, 233, 69, 50, 45, 4, - 254, 16, 233, 4, 50, 45, 4, 253, 234, 232, 173, 50, 45, 4, 254, 11, 232, - 138, 50, 45, 4, 253, 206, 232, 119, 50, 45, 4, 254, 6, 232, 104, 50, 45, - 4, 253, 251, 232, 95, 50, 45, 4, 253, 224, 208, 50, 45, 4, 254, 0, 231, - 244, 50, 45, 4, 253, 231, 231, 180, 50, 45, 4, 254, 25, 231, 122, 50, 45, - 4, 254, 1, 231, 70, 50, 45, 4, 253, 252, 231, 31, 50, 45, 4, 254, 18, - 230, 213, 50, 45, 4, 253, 243, 229, 15, 50, 45, 4, 254, 15, 228, 169, 50, - 45, 4, 253, 226, 228, 6, 50, 45, 4, 253, 225, 227, 107, 50, 45, 4, 254, - 23, 227, 44, 50, 45, 4, 253, 247, 226, 175, 50, 45, 4, 254, 22, 96, 50, - 45, 4, 253, 215, 225, 250, 50, 45, 4, 253, 230, 224, 173, 50, 45, 4, 253, - 209, 224, 141, 50, 45, 4, 253, 244, 224, 118, 50, 45, 4, 253, 242, 224, - 105, 50, 45, 4, 254, 10, 223, 117, 50, 45, 4, 253, 210, 223, 97, 50, 45, - 4, 254, 7, 223, 27, 50, 45, 4, 254, 2, 255, 65, 50, 45, 4, 253, 241, 255, - 64, 50, 45, 4, 253, 200, 254, 53, 50, 45, 4, 253, 213, 248, 78, 50, 45, - 4, 253, 196, 248, 77, 50, 45, 4, 253, 236, 234, 177, 50, 45, 4, 253, 254, - 232, 172, 50, 45, 4, 253, 222, 232, 175, 50, 45, 4, 253, 208, 232, 24, - 50, 45, 4, 253, 250, 232, 23, 50, 45, 4, 253, 216, 231, 121, 50, 45, 4, - 253, 218, 227, 105, 50, 45, 4, 253, 198, 225, 220, 50, 45, 4, 253, 195, - 113, 50, 45, 14, 254, 9, 50, 45, 14, 254, 8, 50, 45, 14, 254, 5, 50, 45, - 14, 253, 249, 50, 45, 14, 253, 237, 50, 45, 14, 253, 235, 50, 45, 14, - 253, 228, 50, 45, 14, 253, 221, 50, 45, 14, 253, 220, 50, 45, 14, 253, - 205, 50, 45, 14, 253, 202, 50, 45, 14, 253, 201, 50, 45, 14, 253, 199, - 50, 45, 14, 253, 197, 50, 45, 89, 253, 194, 237, 35, 50, 45, 89, 253, - 193, 224, 101, 50, 45, 89, 253, 192, 250, 65, 50, 45, 89, 253, 191, 247, - 201, 50, 45, 89, 253, 190, 237, 18, 50, 45, 89, 253, 189, 228, 64, 50, - 45, 89, 253, 188, 247, 154, 50, 45, 89, 253, 187, 232, 6, 50, 45, 89, - 253, 186, 229, 113, 50, 45, 89, 253, 185, 245, 120, 50, 45, 89, 253, 184, - 228, 150, 50, 45, 89, 253, 183, 252, 136, 50, 45, 89, 253, 182, 250, 253, - 50, 45, 89, 253, 181, 252, 85, 50, 45, 89, 253, 180, 224, 126, 50, 45, - 89, 253, 179, 253, 33, 50, 45, 89, 253, 178, 234, 70, 50, 45, 89, 253, - 177, 228, 136, 50, 45, 89, 253, 176, 250, 198, 50, 45, 236, 92, 253, 175, - 239, 37, 50, 45, 236, 92, 253, 174, 239, 44, 50, 45, 89, 253, 173, 234, - 79, 50, 45, 89, 253, 172, 224, 109, 50, 45, 89, 253, 171, 50, 45, 236, - 92, 253, 170, 254, 116, 50, 45, 236, 92, 253, 169, 236, 208, 50, 45, 89, - 253, 168, 252, 98, 50, 45, 89, 253, 167, 246, 6, 50, 45, 89, 253, 166, - 50, 45, 89, 253, 165, 224, 95, 50, 45, 89, 253, 164, 50, 45, 89, 253, - 163, 50, 45, 89, 253, 162, 244, 160, 50, 45, 89, 253, 161, 50, 45, 89, - 253, 160, 50, 45, 89, 253, 159, 50, 45, 236, 92, 253, 157, 225, 231, 50, - 45, 89, 253, 156, 50, 45, 89, 253, 155, 50, 45, 89, 253, 154, 251, 77, - 50, 45, 89, 253, 153, 50, 45, 89, 253, 152, 50, 45, 89, 253, 151, 246, - 158, 50, 45, 89, 253, 150, 254, 104, 50, 45, 89, 253, 149, 50, 45, 89, - 253, 148, 50, 45, 89, 253, 147, 50, 45, 89, 253, 146, 50, 45, 89, 253, - 145, 50, 45, 89, 253, 144, 50, 45, 89, 253, 143, 50, 45, 89, 253, 142, - 50, 45, 89, 253, 141, 50, 45, 89, 253, 140, 236, 87, 50, 45, 89, 253, - 139, 50, 45, 89, 253, 138, 226, 86, 50, 45, 89, 253, 137, 50, 45, 89, - 253, 136, 50, 45, 89, 253, 135, 50, 45, 89, 253, 134, 50, 45, 89, 253, - 133, 50, 45, 89, 253, 132, 50, 45, 89, 253, 131, 50, 45, 89, 253, 130, - 50, 45, 89, 253, 129, 50, 45, 89, 253, 128, 50, 45, 89, 253, 127, 50, 45, - 89, 253, 126, 245, 102, 50, 45, 89, 253, 105, 247, 0, 50, 45, 89, 253, - 102, 253, 19, 50, 45, 89, 253, 97, 228, 140, 50, 45, 89, 253, 96, 58, 50, - 45, 89, 253, 95, 50, 45, 89, 253, 94, 227, 189, 50, 45, 89, 253, 93, 50, - 45, 89, 253, 92, 50, 45, 89, 253, 91, 224, 122, 251, 188, 50, 45, 89, - 253, 90, 251, 188, 50, 45, 89, 253, 89, 251, 189, 246, 232, 50, 45, 89, - 253, 88, 224, 124, 50, 45, 89, 253, 87, 50, 45, 89, 253, 86, 50, 45, 236, - 92, 253, 85, 249, 202, 50, 45, 89, 253, 84, 50, 45, 89, 253, 83, 50, 45, - 89, 253, 81, 50, 45, 89, 253, 80, 50, 45, 89, 253, 79, 50, 45, 89, 253, - 78, 250, 133, 50, 45, 89, 253, 77, 50, 45, 89, 253, 76, 50, 45, 89, 253, - 75, 50, 45, 89, 253, 74, 50, 45, 89, 253, 73, 50, 45, 89, 224, 233, 253, - 158, 50, 45, 89, 224, 233, 253, 125, 50, 45, 89, 224, 233, 253, 124, 50, - 45, 89, 224, 233, 253, 123, 50, 45, 89, 224, 233, 253, 122, 50, 45, 89, - 224, 233, 253, 121, 50, 45, 89, 224, 233, 253, 120, 50, 45, 89, 224, 233, - 253, 119, 50, 45, 89, 224, 233, 253, 118, 50, 45, 89, 224, 233, 253, 117, - 50, 45, 89, 224, 233, 253, 116, 50, 45, 89, 224, 233, 253, 115, 50, 45, - 89, 224, 233, 253, 114, 50, 45, 89, 224, 233, 253, 113, 50, 45, 89, 224, - 233, 253, 112, 50, 45, 89, 224, 233, 253, 111, 50, 45, 89, 224, 233, 253, - 110, 50, 45, 89, 224, 233, 253, 109, 50, 45, 89, 224, 233, 253, 108, 50, - 45, 89, 224, 233, 253, 107, 50, 45, 89, 224, 233, 253, 106, 50, 45, 89, - 224, 233, 253, 104, 50, 45, 89, 224, 233, 253, 103, 50, 45, 89, 224, 233, - 253, 101, 50, 45, 89, 224, 233, 253, 100, 50, 45, 89, 224, 233, 253, 99, - 50, 45, 89, 224, 233, 253, 98, 50, 45, 89, 224, 233, 253, 82, 50, 45, 89, - 224, 233, 253, 72, 210, 224, 92, 229, 174, 237, 170, 210, 224, 92, 229, - 174, 249, 140, 210, 251, 181, 76, 210, 65, 118, 210, 65, 113, 210, 65, - 166, 210, 65, 158, 210, 65, 173, 210, 65, 183, 210, 65, 194, 210, 65, - 187, 210, 65, 192, 210, 65, 227, 23, 210, 65, 225, 216, 210, 65, 226, - 207, 210, 65, 246, 245, 210, 65, 247, 63, 210, 65, 228, 206, 210, 65, - 229, 159, 210, 65, 248, 12, 210, 65, 235, 57, 210, 65, 168, 244, 135, - 210, 65, 135, 244, 135, 210, 65, 152, 244, 135, 210, 65, 246, 243, 244, - 135, 210, 65, 247, 37, 244, 135, 210, 65, 228, 217, 244, 135, 210, 65, - 229, 163, 244, 135, 210, 65, 248, 20, 244, 135, 210, 65, 235, 61, 244, - 135, 210, 65, 168, 226, 194, 210, 65, 135, 226, 194, 210, 65, 152, 226, - 194, 210, 65, 246, 243, 226, 194, 210, 65, 247, 37, 226, 194, 210, 65, - 228, 217, 226, 194, 210, 65, 229, 163, 226, 194, 210, 65, 248, 20, 226, - 194, 210, 65, 235, 61, 226, 194, 210, 65, 227, 24, 226, 194, 210, 65, - 225, 217, 226, 194, 210, 65, 226, 208, 226, 194, 210, 65, 246, 246, 226, - 194, 210, 65, 247, 64, 226, 194, 210, 65, 228, 207, 226, 194, 210, 65, - 229, 160, 226, 194, 210, 65, 248, 13, 226, 194, 210, 65, 235, 58, 226, - 194, 210, 224, 136, 253, 25, 225, 125, 210, 224, 136, 247, 45, 227, 247, - 210, 224, 136, 230, 209, 227, 247, 210, 224, 136, 226, 214, 227, 247, - 210, 224, 136, 246, 237, 227, 247, 210, 248, 110, 236, 234, 247, 45, 227, - 247, 210, 237, 160, 236, 234, 247, 45, 227, 247, 210, 236, 234, 230, 209, - 227, 247, 210, 236, 234, 226, 214, 227, 247, 19, 255, 36, 254, 55, 168, - 232, 76, 19, 255, 36, 254, 55, 168, 245, 151, 19, 255, 36, 254, 55, 168, - 248, 121, 19, 255, 36, 254, 55, 173, 19, 255, 36, 254, 55, 247, 63, 19, - 255, 36, 254, 55, 247, 37, 244, 135, 19, 255, 36, 254, 55, 247, 37, 226, - 194, 19, 255, 36, 254, 55, 247, 64, 226, 194, 19, 255, 36, 254, 55, 247, - 37, 227, 80, 19, 255, 36, 254, 55, 227, 24, 227, 80, 19, 255, 36, 254, - 55, 247, 64, 227, 80, 19, 255, 36, 254, 55, 168, 244, 136, 227, 80, 19, - 255, 36, 254, 55, 247, 37, 244, 136, 227, 80, 19, 255, 36, 254, 55, 168, - 226, 195, 227, 80, 19, 255, 36, 254, 55, 247, 37, 226, 195, 227, 80, 19, - 255, 36, 254, 55, 247, 37, 228, 55, 19, 255, 36, 254, 55, 227, 24, 228, - 55, 19, 255, 36, 254, 55, 247, 64, 228, 55, 19, 255, 36, 254, 55, 168, - 244, 136, 228, 55, 19, 255, 36, 254, 55, 247, 37, 244, 136, 228, 55, 19, - 255, 36, 254, 55, 168, 226, 195, 228, 55, 19, 255, 36, 254, 55, 227, 24, - 226, 195, 228, 55, 19, 255, 36, 254, 55, 247, 64, 226, 195, 228, 55, 19, - 255, 36, 254, 55, 227, 24, 236, 106, 19, 255, 36, 245, 96, 168, 233, 16, - 19, 255, 36, 226, 225, 118, 19, 255, 36, 245, 94, 118, 19, 255, 36, 247, - 209, 113, 19, 255, 36, 226, 225, 113, 19, 255, 36, 250, 196, 135, 248, - 120, 19, 255, 36, 247, 209, 135, 248, 120, 19, 255, 36, 226, 59, 173, 19, - 255, 36, 226, 59, 227, 23, 19, 255, 36, 226, 59, 227, 24, 254, 203, 15, - 19, 255, 36, 245, 94, 227, 23, 19, 255, 36, 236, 201, 227, 23, 19, 255, - 36, 226, 225, 227, 23, 19, 255, 36, 226, 225, 226, 207, 19, 255, 36, 226, - 59, 247, 63, 19, 255, 36, 226, 59, 247, 64, 254, 203, 15, 19, 255, 36, - 245, 94, 247, 63, 19, 255, 36, 226, 225, 247, 63, 19, 255, 36, 226, 225, - 168, 244, 135, 19, 255, 36, 226, 225, 152, 244, 135, 19, 255, 36, 247, - 209, 247, 37, 244, 135, 19, 255, 36, 226, 59, 247, 37, 244, 135, 19, 255, - 36, 226, 225, 247, 37, 244, 135, 19, 255, 36, 252, 1, 247, 37, 244, 135, - 19, 255, 36, 235, 219, 247, 37, 244, 135, 19, 255, 36, 226, 225, 168, - 226, 194, 19, 255, 36, 226, 225, 247, 37, 226, 194, 19, 255, 36, 250, 50, - 247, 37, 236, 106, 19, 255, 36, 228, 29, 247, 64, 236, 106, 19, 168, 132, - 53, 19, 168, 132, 5, 254, 203, 15, 19, 135, 226, 212, 53, 19, 152, 232, - 75, 53, 19, 223, 226, 53, 19, 227, 81, 53, 19, 248, 122, 53, 19, 234, 95, - 53, 19, 135, 234, 94, 53, 19, 152, 234, 94, 53, 19, 246, 243, 234, 94, - 53, 19, 247, 37, 234, 94, 53, 19, 236, 196, 53, 19, 238, 55, 253, 25, 53, - 19, 237, 156, 53, 19, 234, 11, 53, 19, 224, 66, 53, 19, 254, 89, 53, 19, - 254, 100, 53, 19, 245, 242, 53, 19, 226, 47, 253, 25, 53, 19, 223, 90, - 53, 231, 115, 229, 156, 53, 231, 115, 225, 135, 53, 231, 115, 229, 178, - 53, 231, 115, 229, 154, 53, 231, 115, 249, 217, 229, 154, 53, 231, 115, - 228, 251, 53, 231, 115, 250, 46, 53, 231, 115, 232, 64, 53, 231, 115, - 229, 166, 53, 231, 115, 248, 89, 53, 231, 115, 254, 87, 53, 231, 115, - 251, 215, 53, 233, 94, 249, 198, 5, 233, 145, 233, 94, 249, 198, 5, 233, - 11, 245, 118, 233, 94, 249, 198, 5, 227, 65, 245, 118, 233, 94, 249, 198, - 5, 252, 12, 233, 94, 249, 198, 5, 251, 163, 233, 94, 249, 198, 5, 224, - 101, 233, 94, 249, 198, 5, 245, 102, 233, 94, 249, 198, 5, 246, 150, 233, - 94, 249, 198, 5, 226, 174, 233, 94, 249, 198, 5, 58, 233, 94, 249, 198, - 5, 252, 121, 233, 94, 249, 198, 5, 229, 87, 233, 94, 249, 198, 5, 251, - 73, 233, 94, 249, 198, 5, 237, 34, 233, 94, 249, 198, 5, 236, 255, 233, - 94, 249, 198, 5, 230, 237, 233, 94, 249, 198, 5, 237, 190, 233, 94, 249, - 198, 5, 252, 130, 233, 94, 249, 198, 5, 252, 4, 233, 18, 233, 94, 249, - 198, 5, 249, 151, 233, 94, 249, 198, 5, 251, 58, 233, 94, 249, 198, 5, - 228, 190, 233, 94, 249, 198, 5, 251, 59, 233, 94, 249, 198, 5, 252, 229, - 233, 94, 249, 198, 5, 229, 76, 233, 94, 249, 198, 5, 244, 160, 233, 94, - 249, 198, 5, 245, 74, 233, 94, 249, 198, 5, 252, 82, 237, 229, 233, 94, - 249, 198, 5, 252, 0, 233, 94, 249, 198, 5, 232, 6, 233, 94, 249, 198, 5, - 248, 53, 233, 94, 249, 198, 5, 248, 128, 233, 94, 249, 198, 5, 225, 243, - 233, 94, 249, 198, 5, 252, 232, 233, 94, 249, 198, 5, 233, 19, 226, 86, - 233, 94, 249, 198, 5, 224, 218, 233, 94, 249, 198, 5, 233, 195, 233, 94, - 249, 198, 5, 231, 109, 233, 94, 249, 198, 5, 237, 179, 233, 94, 249, 198, - 5, 233, 254, 253, 66, 233, 94, 249, 198, 5, 247, 11, 233, 94, 249, 198, - 5, 245, 238, 233, 94, 249, 198, 5, 228, 30, 233, 94, 249, 198, 5, 3, 254, - 35, 233, 94, 249, 198, 5, 224, 146, 253, 41, 233, 94, 249, 198, 5, 36, - 234, 97, 82, 237, 79, 1, 57, 237, 79, 1, 72, 237, 79, 1, 254, 27, 237, - 79, 1, 252, 191, 237, 79, 1, 214, 237, 79, 1, 222, 222, 237, 79, 1, 74, - 237, 79, 1, 224, 174, 237, 79, 1, 223, 119, 237, 79, 1, 226, 253, 237, - 79, 1, 239, 182, 237, 79, 1, 239, 76, 237, 79, 1, 232, 139, 237, 79, 1, - 149, 237, 79, 1, 185, 237, 79, 1, 199, 237, 79, 1, 236, 107, 237, 79, 1, - 235, 19, 237, 79, 1, 66, 237, 79, 1, 233, 244, 237, 79, 1, 238, 168, 237, - 79, 1, 146, 237, 79, 1, 193, 237, 79, 1, 227, 109, 237, 79, 1, 226, 22, - 237, 79, 1, 254, 190, 237, 79, 1, 247, 239, 237, 79, 1, 212, 237, 79, 1, - 224, 73, 252, 8, 1, 57, 252, 8, 1, 233, 243, 252, 8, 1, 222, 222, 252, 8, - 1, 149, 252, 8, 1, 225, 75, 252, 8, 1, 146, 252, 8, 1, 237, 247, 252, 8, - 1, 255, 65, 252, 8, 1, 232, 139, 252, 8, 1, 254, 27, 252, 8, 1, 185, 252, - 8, 1, 73, 252, 8, 1, 250, 191, 252, 8, 1, 227, 109, 252, 8, 1, 229, 148, - 252, 8, 1, 229, 147, 252, 8, 1, 193, 252, 8, 1, 252, 43, 252, 8, 1, 66, - 252, 8, 1, 235, 19, 252, 8, 1, 224, 73, 252, 8, 1, 199, 252, 8, 1, 226, - 21, 252, 8, 1, 233, 244, 252, 8, 1, 228, 111, 252, 8, 1, 74, 252, 8, 1, - 72, 252, 8, 1, 225, 72, 252, 8, 1, 239, 76, 252, 8, 1, 239, 75, 252, 8, - 1, 235, 190, 252, 8, 1, 225, 76, 252, 8, 1, 214, 252, 8, 1, 246, 195, - 252, 8, 1, 228, 70, 252, 8, 1, 228, 69, 252, 8, 1, 235, 139, 252, 8, 1, - 240, 47, 252, 8, 1, 252, 42, 252, 8, 1, 226, 22, 252, 8, 1, 225, 74, 252, - 8, 1, 231, 100, 252, 8, 1, 236, 249, 252, 8, 1, 236, 248, 252, 8, 1, 236, - 247, 252, 8, 1, 236, 246, 252, 8, 1, 237, 246, 252, 8, 1, 248, 57, 252, - 8, 1, 225, 73, 84, 27, 1, 57, 84, 27, 1, 252, 238, 84, 27, 1, 239, 3, 84, - 27, 1, 250, 77, 84, 27, 1, 72, 84, 27, 1, 225, 42, 84, 27, 1, 223, 97, - 84, 27, 1, 245, 121, 84, 27, 1, 226, 239, 84, 27, 1, 74, 84, 27, 1, 177, - 84, 27, 1, 248, 2, 84, 27, 1, 247, 247, 84, 27, 1, 247, 239, 84, 27, 1, - 247, 183, 84, 27, 1, 73, 84, 27, 1, 233, 151, 84, 27, 1, 229, 114, 84, - 27, 1, 238, 107, 84, 27, 1, 247, 198, 84, 27, 1, 247, 188, 84, 27, 1, - 227, 44, 84, 27, 1, 66, 84, 27, 1, 248, 5, 84, 27, 1, 233, 90, 84, 27, 1, - 238, 217, 84, 27, 1, 248, 29, 84, 27, 1, 247, 190, 84, 27, 1, 251, 182, - 84, 27, 1, 240, 47, 84, 27, 1, 225, 76, 84, 27, 207, 118, 84, 27, 207, - 173, 84, 27, 207, 227, 23, 84, 27, 207, 247, 63, 245, 250, 1, 255, 0, - 245, 250, 1, 253, 53, 245, 250, 1, 246, 43, 245, 250, 1, 250, 173, 245, - 250, 1, 254, 252, 245, 250, 1, 232, 129, 245, 250, 1, 239, 191, 245, 250, - 1, 245, 161, 245, 250, 1, 226, 203, 245, 250, 1, 248, 11, 245, 250, 1, - 238, 85, 245, 250, 1, 238, 27, 245, 250, 1, 237, 31, 245, 250, 1, 235, - 221, 245, 250, 1, 239, 164, 245, 250, 1, 225, 90, 245, 250, 1, 233, 231, - 245, 250, 1, 235, 57, 245, 250, 1, 232, 12, 245, 250, 1, 230, 238, 245, - 250, 1, 227, 31, 245, 250, 1, 224, 108, 245, 250, 1, 247, 115, 245, 250, - 1, 240, 51, 245, 250, 1, 244, 126, 245, 250, 1, 234, 18, 245, 250, 1, - 235, 61, 244, 135, 225, 156, 1, 254, 209, 225, 156, 1, 252, 198, 225, - 156, 1, 246, 170, 225, 156, 1, 238, 227, 225, 156, 1, 250, 47, 225, 156, - 1, 244, 227, 225, 156, 1, 224, 105, 225, 156, 1, 223, 88, 225, 156, 1, - 244, 156, 225, 156, 1, 227, 10, 225, 156, 1, 223, 175, 225, 156, 1, 239, - 59, 225, 156, 1, 229, 78, 225, 156, 1, 238, 16, 225, 156, 1, 236, 215, - 225, 156, 1, 250, 20, 225, 156, 1, 234, 194, 225, 156, 1, 223, 19, 225, - 156, 1, 231, 1, 225, 156, 1, 254, 248, 225, 156, 1, 232, 173, 225, 156, - 1, 231, 23, 225, 156, 1, 232, 88, 225, 156, 1, 231, 255, 225, 156, 1, - 226, 242, 225, 156, 1, 246, 63, 225, 156, 1, 96, 225, 156, 1, 74, 225, - 156, 1, 66, 225, 156, 1, 228, 80, 225, 156, 224, 92, 249, 184, 84, 233, - 113, 5, 57, 84, 233, 113, 5, 74, 84, 233, 113, 5, 66, 84, 233, 113, 5, - 177, 84, 233, 113, 5, 238, 107, 84, 233, 113, 5, 246, 193, 84, 233, 113, - 5, 245, 218, 84, 233, 113, 5, 224, 72, 84, 233, 113, 5, 252, 39, 84, 233, - 113, 5, 239, 179, 84, 233, 113, 5, 239, 156, 84, 233, 113, 5, 227, 107, - 84, 233, 113, 5, 225, 250, 84, 233, 113, 5, 250, 189, 84, 233, 113, 5, - 250, 4, 84, 233, 113, 5, 248, 107, 84, 233, 113, 5, 226, 251, 84, 233, - 113, 5, 213, 84, 233, 113, 5, 253, 70, 84, 233, 113, 5, 247, 129, 84, - 233, 113, 5, 236, 1, 84, 233, 113, 5, 234, 206, 84, 233, 113, 5, 198, 84, - 233, 113, 5, 236, 157, 84, 233, 113, 5, 236, 66, 84, 233, 113, 5, 191, - 84, 233, 113, 5, 225, 64, 84, 233, 113, 5, 224, 228, 84, 233, 113, 5, - 208, 84, 233, 113, 5, 231, 70, 84, 233, 113, 5, 238, 43, 84, 233, 113, 5, - 231, 31, 84, 233, 113, 5, 223, 117, 84, 233, 113, 5, 229, 146, 84, 233, - 113, 5, 228, 110, 84, 233, 113, 5, 154, 84, 233, 113, 5, 254, 48, 84, - 233, 113, 5, 254, 47, 84, 233, 113, 5, 254, 46, 84, 233, 113, 5, 224, 49, - 84, 233, 113, 5, 250, 170, 84, 233, 113, 5, 250, 169, 84, 233, 113, 5, - 253, 57, 84, 233, 113, 5, 252, 62, 84, 233, 113, 224, 92, 249, 184, 84, - 233, 113, 65, 118, 84, 233, 113, 65, 113, 84, 233, 113, 65, 227, 23, 84, - 233, 113, 65, 225, 216, 84, 233, 113, 65, 244, 135, 143, 6, 1, 182, 74, - 143, 6, 1, 182, 72, 143, 6, 1, 182, 57, 143, 6, 1, 182, 255, 3, 143, 6, - 1, 182, 73, 143, 6, 1, 182, 234, 52, 143, 6, 1, 229, 63, 74, 143, 6, 1, - 229, 63, 72, 143, 6, 1, 229, 63, 57, 143, 6, 1, 229, 63, 255, 3, 143, 6, - 1, 229, 63, 73, 143, 6, 1, 229, 63, 234, 52, 143, 6, 1, 254, 34, 143, 6, - 1, 233, 255, 143, 6, 1, 224, 83, 143, 6, 1, 223, 225, 143, 6, 1, 212, - 143, 6, 1, 233, 144, 143, 6, 1, 252, 232, 143, 6, 1, 227, 37, 143, 6, 1, - 250, 67, 143, 6, 1, 251, 179, 143, 6, 1, 239, 169, 143, 6, 1, 239, 10, - 143, 6, 1, 246, 148, 143, 6, 1, 248, 29, 143, 6, 1, 225, 38, 143, 6, 1, - 247, 168, 143, 6, 1, 226, 238, 143, 6, 1, 247, 188, 143, 6, 1, 223, 95, - 143, 6, 1, 247, 183, 143, 6, 1, 223, 76, 143, 6, 1, 247, 198, 143, 6, 1, - 248, 2, 143, 6, 1, 247, 247, 143, 6, 1, 247, 239, 143, 6, 1, 247, 228, - 143, 6, 1, 234, 80, 143, 6, 1, 247, 155, 143, 3, 1, 182, 74, 143, 3, 1, - 182, 72, 143, 3, 1, 182, 57, 143, 3, 1, 182, 255, 3, 143, 3, 1, 182, 73, - 143, 3, 1, 182, 234, 52, 143, 3, 1, 229, 63, 74, 143, 3, 1, 229, 63, 72, - 143, 3, 1, 229, 63, 57, 143, 3, 1, 229, 63, 255, 3, 143, 3, 1, 229, 63, - 73, 143, 3, 1, 229, 63, 234, 52, 143, 3, 1, 254, 34, 143, 3, 1, 233, 255, - 143, 3, 1, 224, 83, 143, 3, 1, 223, 225, 143, 3, 1, 212, 143, 3, 1, 233, - 144, 143, 3, 1, 252, 232, 143, 3, 1, 227, 37, 143, 3, 1, 250, 67, 143, 3, - 1, 251, 179, 143, 3, 1, 239, 169, 143, 3, 1, 239, 10, 143, 3, 1, 246, - 148, 143, 3, 1, 248, 29, 143, 3, 1, 225, 38, 143, 3, 1, 247, 168, 143, 3, - 1, 226, 238, 143, 3, 1, 247, 188, 143, 3, 1, 223, 95, 143, 3, 1, 247, - 183, 143, 3, 1, 223, 76, 143, 3, 1, 247, 198, 143, 3, 1, 248, 2, 143, 3, - 1, 247, 247, 143, 3, 1, 247, 239, 143, 3, 1, 247, 228, 143, 3, 1, 234, - 80, 143, 3, 1, 247, 155, 229, 119, 1, 233, 143, 229, 119, 1, 226, 99, - 229, 119, 1, 238, 198, 229, 119, 1, 247, 92, 229, 119, 1, 226, 217, 229, - 119, 1, 228, 169, 229, 119, 1, 227, 210, 229, 119, 1, 251, 128, 229, 119, - 1, 223, 227, 229, 119, 1, 244, 134, 229, 119, 1, 252, 180, 229, 119, 1, - 250, 76, 229, 119, 1, 246, 179, 229, 119, 1, 224, 194, 229, 119, 1, 226, - 221, 229, 119, 1, 223, 25, 229, 119, 1, 236, 233, 229, 119, 1, 239, 99, - 229, 119, 1, 224, 103, 229, 119, 1, 245, 169, 229, 119, 1, 237, 135, 229, - 119, 1, 236, 126, 229, 119, 1, 240, 54, 229, 119, 1, 248, 28, 229, 119, - 1, 254, 80, 229, 119, 1, 255, 22, 229, 119, 1, 234, 61, 229, 119, 1, 224, - 95, 229, 119, 1, 234, 10, 229, 119, 1, 255, 3, 229, 119, 1, 231, 119, - 229, 119, 1, 234, 194, 229, 119, 1, 248, 42, 229, 119, 1, 255, 6, 229, - 119, 1, 244, 69, 229, 119, 1, 225, 116, 229, 119, 1, 234, 103, 229, 119, - 1, 234, 46, 229, 119, 1, 234, 79, 229, 119, 1, 254, 37, 229, 119, 1, 254, - 117, 229, 119, 1, 234, 31, 229, 119, 1, 254, 245, 229, 119, 1, 247, 192, - 229, 119, 1, 254, 97, 229, 119, 1, 248, 51, 229, 119, 1, 244, 73, 229, - 119, 1, 223, 207, 234, 20, 1, 254, 227, 234, 20, 1, 253, 70, 234, 20, 1, - 227, 107, 234, 20, 1, 239, 179, 234, 20, 1, 224, 72, 234, 20, 1, 238, - 227, 234, 20, 1, 250, 66, 234, 20, 1, 208, 234, 20, 1, 231, 31, 234, 20, - 1, 229, 84, 234, 20, 1, 250, 22, 234, 20, 1, 251, 248, 234, 20, 1, 246, - 193, 234, 20, 1, 247, 129, 234, 20, 1, 232, 136, 234, 20, 1, 239, 71, - 234, 20, 1, 238, 39, 234, 20, 1, 236, 136, 234, 20, 1, 234, 181, 234, 20, - 1, 224, 144, 234, 20, 1, 154, 234, 20, 1, 191, 234, 20, 1, 57, 234, 20, - 1, 72, 234, 20, 1, 74, 234, 20, 1, 73, 234, 20, 1, 66, 234, 20, 1, 255, - 63, 234, 20, 1, 248, 35, 234, 20, 1, 234, 52, 234, 20, 21, 223, 89, 234, - 20, 21, 118, 234, 20, 21, 113, 234, 20, 21, 166, 234, 20, 21, 158, 234, - 20, 21, 173, 234, 20, 21, 183, 234, 20, 21, 194, 234, 20, 21, 187, 234, - 20, 21, 192, 218, 4, 57, 218, 4, 72, 218, 4, 74, 218, 4, 73, 218, 4, 66, - 218, 4, 239, 179, 218, 4, 239, 117, 218, 4, 177, 218, 4, 239, 3, 218, 4, - 238, 199, 218, 4, 238, 150, 218, 4, 238, 107, 218, 4, 238, 43, 218, 4, - 237, 243, 218, 4, 237, 193, 218, 4, 237, 143, 218, 4, 237, 110, 218, 4, - 198, 218, 4, 236, 235, 218, 4, 236, 157, 218, 4, 236, 103, 218, 4, 236, - 66, 218, 4, 236, 1, 218, 4, 235, 162, 218, 4, 235, 89, 218, 4, 235, 6, - 218, 4, 234, 206, 218, 4, 213, 218, 4, 233, 151, 218, 4, 233, 69, 218, 4, - 233, 4, 218, 4, 232, 173, 218, 4, 208, 218, 4, 231, 244, 218, 4, 231, - 180, 218, 4, 231, 122, 218, 4, 231, 70, 218, 4, 231, 31, 218, 4, 230, - 213, 218, 4, 229, 15, 218, 4, 228, 169, 218, 4, 228, 6, 218, 4, 227, 107, - 218, 4, 227, 44, 218, 4, 226, 175, 218, 4, 96, 218, 4, 225, 250, 218, 4, - 224, 173, 218, 4, 224, 141, 218, 4, 224, 118, 218, 4, 224, 105, 218, 4, - 224, 72, 218, 4, 224, 69, 218, 4, 223, 117, 218, 4, 223, 27, 233, 77, 1, - 254, 223, 233, 77, 1, 252, 200, 233, 77, 1, 246, 171, 233, 77, 1, 250, - 49, 233, 77, 1, 245, 121, 233, 77, 1, 224, 149, 233, 77, 1, 223, 112, - 233, 77, 1, 245, 90, 233, 77, 1, 227, 10, 233, 77, 1, 223, 175, 233, 77, - 1, 239, 59, 233, 77, 1, 238, 17, 233, 77, 1, 236, 215, 233, 77, 1, 234, - 194, 233, 77, 1, 229, 180, 233, 77, 1, 254, 248, 233, 77, 1, 233, 151, - 233, 77, 1, 231, 23, 233, 77, 1, 232, 92, 233, 77, 1, 231, 108, 233, 77, - 1, 229, 78, 233, 77, 1, 227, 61, 233, 77, 65, 118, 233, 77, 65, 227, 23, - 233, 77, 65, 225, 216, 233, 77, 65, 168, 244, 135, 233, 77, 224, 92, 229, - 173, 237, 78, 1, 57, 237, 78, 1, 254, 27, 237, 78, 1, 214, 237, 78, 1, - 222, 222, 237, 78, 1, 72, 237, 78, 1, 196, 237, 78, 1, 74, 237, 78, 1, - 224, 25, 237, 78, 1, 239, 76, 237, 78, 1, 149, 237, 78, 1, 185, 237, 78, - 1, 199, 237, 78, 1, 73, 237, 78, 1, 146, 237, 78, 1, 228, 111, 237, 78, - 1, 227, 109, 237, 78, 1, 66, 237, 78, 1, 247, 130, 237, 78, 1, 232, 139, - 237, 78, 1, 193, 237, 78, 1, 226, 22, 237, 78, 1, 254, 190, 237, 78, 1, - 247, 239, 237, 78, 1, 237, 80, 237, 78, 1, 235, 19, 237, 78, 1, 252, 44, - 237, 78, 226, 75, 76, 178, 1, 57, 178, 31, 5, 74, 178, 31, 5, 66, 178, - 31, 5, 153, 146, 178, 31, 5, 72, 178, 31, 5, 73, 178, 31, 237, 219, 76, - 178, 5, 47, 231, 140, 51, 178, 5, 254, 160, 178, 5, 224, 211, 178, 1, - 177, 178, 1, 238, 227, 178, 1, 246, 193, 178, 1, 246, 66, 178, 1, 252, - 39, 178, 1, 251, 204, 178, 1, 239, 179, 178, 1, 234, 173, 178, 1, 226, - 20, 178, 1, 226, 10, 178, 1, 250, 117, 178, 1, 250, 101, 178, 1, 235, 18, - 178, 1, 227, 107, 178, 1, 226, 251, 178, 1, 250, 189, 178, 1, 250, 22, - 178, 1, 236, 1, 178, 1, 213, 178, 1, 233, 97, 178, 1, 253, 70, 178, 1, - 252, 190, 178, 1, 198, 178, 1, 191, 178, 1, 208, 178, 1, 238, 43, 178, 1, - 225, 64, 178, 1, 229, 146, 178, 1, 228, 110, 178, 1, 231, 31, 178, 1, - 223, 117, 178, 1, 154, 178, 1, 238, 167, 178, 1, 225, 254, 178, 5, 253, - 36, 46, 178, 5, 251, 254, 178, 5, 56, 51, 178, 224, 216, 178, 21, 118, - 178, 21, 113, 178, 21, 166, 178, 21, 158, 178, 65, 227, 23, 178, 65, 225, - 216, 178, 65, 168, 244, 135, 178, 65, 168, 226, 194, 178, 232, 171, 249, - 140, 178, 232, 171, 3, 251, 106, 178, 232, 171, 251, 106, 178, 232, 171, - 250, 248, 125, 178, 232, 171, 237, 32, 178, 232, 171, 237, 119, 178, 232, - 171, 250, 151, 178, 232, 171, 47, 250, 151, 178, 232, 171, 237, 165, 13, - 5, 57, 13, 5, 102, 24, 57, 13, 5, 102, 24, 253, 61, 13, 5, 102, 24, 246, - 167, 227, 19, 13, 5, 102, 24, 154, 13, 5, 102, 24, 240, 49, 13, 5, 102, - 24, 238, 30, 245, 204, 13, 5, 102, 24, 236, 32, 13, 5, 102, 24, 231, 19, - 13, 5, 255, 65, 13, 5, 255, 52, 13, 5, 255, 53, 24, 254, 78, 13, 5, 255, - 53, 24, 248, 96, 245, 204, 13, 5, 255, 53, 24, 246, 177, 13, 5, 255, 53, - 24, 246, 167, 227, 19, 13, 5, 255, 53, 24, 154, 13, 5, 255, 53, 24, 240, - 50, 245, 204, 13, 5, 255, 53, 24, 240, 23, 13, 5, 255, 53, 24, 238, 31, - 13, 5, 255, 53, 24, 229, 99, 13, 5, 255, 53, 24, 97, 79, 97, 79, 66, 13, - 5, 255, 53, 245, 204, 13, 5, 255, 50, 13, 5, 255, 51, 24, 253, 50, 13, 5, - 255, 51, 24, 246, 167, 227, 19, 13, 5, 255, 51, 24, 236, 236, 79, 247, - 239, 13, 5, 255, 51, 24, 229, 144, 13, 5, 255, 51, 24, 227, 84, 13, 5, - 255, 29, 13, 5, 254, 240, 13, 5, 254, 241, 24, 247, 193, 13, 5, 254, 241, - 24, 229, 73, 79, 246, 24, 13, 5, 254, 233, 13, 5, 254, 234, 24, 254, 233, - 13, 5, 254, 234, 24, 249, 220, 13, 5, 254, 234, 24, 246, 24, 13, 5, 254, - 234, 24, 154, 13, 5, 254, 234, 24, 239, 64, 13, 5, 254, 234, 24, 238, - 199, 13, 5, 254, 234, 24, 229, 114, 13, 5, 254, 234, 24, 225, 83, 13, 5, - 254, 231, 13, 5, 254, 225, 13, 5, 254, 196, 13, 5, 254, 197, 24, 229, - 114, 13, 5, 254, 190, 13, 5, 254, 191, 107, 254, 190, 13, 5, 254, 191, - 152, 226, 156, 13, 5, 254, 191, 79, 235, 247, 234, 35, 254, 191, 79, 235, - 246, 13, 5, 254, 191, 79, 235, 247, 228, 118, 13, 5, 254, 170, 13, 5, - 254, 153, 13, 5, 254, 129, 13, 5, 254, 130, 24, 238, 91, 13, 5, 254, 108, - 13, 5, 254, 85, 13, 5, 254, 80, 13, 5, 254, 81, 223, 43, 227, 19, 13, 5, - 254, 81, 239, 67, 227, 19, 13, 5, 254, 81, 107, 254, 81, 225, 248, 107, - 225, 248, 225, 248, 107, 225, 248, 233, 197, 13, 5, 254, 81, 107, 254, - 81, 107, 254, 80, 13, 5, 254, 81, 107, 254, 81, 107, 254, 81, 250, 238, - 254, 81, 107, 254, 81, 107, 254, 80, 13, 5, 254, 78, 13, 5, 254, 76, 13, - 5, 253, 70, 13, 5, 253, 61, 13, 5, 253, 58, 13, 5, 253, 56, 13, 5, 253, - 51, 13, 5, 253, 52, 107, 253, 51, 13, 5, 253, 50, 13, 5, 125, 13, 5, 253, - 35, 13, 5, 252, 181, 13, 5, 252, 182, 24, 57, 13, 5, 252, 182, 24, 246, - 160, 13, 5, 252, 182, 24, 240, 50, 245, 204, 13, 5, 252, 90, 13, 5, 252, - 91, 107, 252, 91, 255, 52, 13, 5, 252, 91, 107, 252, 91, 225, 138, 13, 5, - 252, 91, 250, 238, 252, 90, 13, 5, 252, 79, 13, 5, 252, 80, 107, 252, 79, - 13, 5, 252, 70, 13, 5, 252, 69, 13, 5, 250, 189, 13, 5, 250, 180, 13, 5, - 250, 181, 238, 178, 24, 102, 79, 237, 7, 13, 5, 250, 181, 238, 178, 24, - 254, 196, 13, 5, 250, 181, 238, 178, 24, 253, 50, 13, 5, 250, 181, 238, - 178, 24, 252, 181, 13, 5, 250, 181, 238, 178, 24, 246, 193, 13, 5, 250, - 181, 238, 178, 24, 246, 194, 79, 237, 7, 13, 5, 250, 181, 238, 178, 24, - 246, 46, 13, 5, 250, 181, 238, 178, 24, 246, 30, 13, 5, 250, 181, 238, - 178, 24, 245, 212, 13, 5, 250, 181, 238, 178, 24, 154, 13, 5, 250, 181, - 238, 178, 24, 239, 210, 13, 5, 250, 181, 238, 178, 24, 239, 211, 79, 237, - 110, 13, 5, 250, 181, 238, 178, 24, 239, 53, 13, 5, 250, 181, 238, 178, - 24, 238, 43, 13, 5, 250, 181, 238, 178, 24, 237, 110, 13, 5, 250, 181, - 238, 178, 24, 237, 111, 79, 237, 6, 13, 5, 250, 181, 238, 178, 24, 237, - 100, 13, 5, 250, 181, 238, 178, 24, 235, 162, 13, 5, 250, 181, 238, 178, - 24, 233, 198, 79, 233, 197, 13, 5, 250, 181, 238, 178, 24, 229, 15, 13, - 5, 250, 181, 238, 178, 24, 227, 84, 13, 5, 250, 181, 238, 178, 24, 225, - 172, 79, 246, 30, 13, 5, 250, 181, 238, 178, 24, 225, 83, 13, 5, 250, - 159, 13, 5, 250, 140, 13, 5, 250, 139, 13, 5, 250, 138, 13, 5, 250, 4, - 13, 5, 249, 245, 13, 5, 249, 221, 13, 5, 249, 222, 24, 229, 114, 13, 5, - 249, 220, 13, 5, 249, 210, 13, 5, 249, 211, 239, 26, 97, 245, 205, 249, - 195, 13, 5, 249, 195, 13, 5, 248, 107, 13, 5, 248, 108, 107, 248, 107, - 13, 5, 248, 108, 245, 204, 13, 5, 248, 108, 229, 96, 13, 5, 248, 105, 13, - 5, 248, 106, 24, 247, 180, 13, 5, 248, 104, 13, 5, 248, 103, 13, 5, 248, - 102, 13, 5, 248, 101, 13, 5, 248, 97, 13, 5, 248, 95, 13, 5, 248, 96, - 245, 204, 13, 5, 248, 96, 245, 205, 245, 204, 13, 5, 248, 94, 13, 5, 248, - 87, 13, 5, 72, 13, 5, 161, 24, 233, 197, 13, 5, 161, 107, 161, 234, 195, - 107, 234, 194, 13, 5, 248, 57, 13, 5, 248, 58, 24, 102, 79, 245, 170, 79, - 250, 189, 13, 5, 248, 58, 24, 246, 160, 13, 5, 248, 58, 24, 236, 157, 13, - 5, 248, 58, 24, 231, 12, 13, 5, 248, 58, 24, 229, 114, 13, 5, 248, 58, - 24, 66, 13, 5, 248, 37, 13, 5, 248, 27, 13, 5, 248, 2, 13, 5, 247, 239, - 13, 5, 247, 240, 24, 246, 166, 13, 5, 247, 240, 24, 246, 167, 227, 19, - 13, 5, 247, 240, 24, 236, 235, 13, 5, 247, 240, 250, 238, 247, 239, 13, - 5, 247, 240, 234, 35, 247, 239, 13, 5, 247, 240, 228, 118, 13, 5, 247, - 195, 13, 5, 247, 193, 13, 5, 247, 180, 13, 5, 247, 134, 13, 5, 247, 135, - 24, 57, 13, 5, 247, 135, 24, 102, 79, 238, 21, 13, 5, 247, 135, 24, 102, - 79, 238, 22, 24, 238, 21, 13, 5, 247, 135, 24, 254, 190, 13, 5, 247, 135, - 24, 253, 61, 13, 5, 247, 135, 24, 248, 96, 245, 204, 13, 5, 247, 135, 24, - 248, 96, 245, 205, 245, 204, 13, 5, 247, 135, 24, 154, 13, 5, 247, 135, - 24, 245, 170, 245, 204, 13, 5, 247, 135, 24, 240, 50, 245, 204, 13, 5, - 247, 135, 24, 239, 25, 13, 5, 247, 135, 24, 239, 26, 228, 118, 13, 5, - 247, 135, 24, 238, 105, 13, 5, 247, 135, 24, 238, 43, 13, 5, 247, 135, - 24, 238, 22, 24, 238, 21, 13, 5, 247, 135, 24, 237, 193, 13, 5, 247, 135, - 24, 237, 110, 13, 5, 247, 135, 24, 225, 171, 13, 5, 247, 135, 24, 225, - 163, 13, 5, 246, 193, 13, 5, 246, 194, 245, 204, 13, 5, 246, 191, 13, 5, - 246, 192, 24, 102, 79, 250, 190, 79, 154, 13, 5, 246, 192, 24, 102, 79, - 154, 13, 5, 246, 192, 24, 102, 79, 240, 49, 13, 5, 246, 192, 24, 255, 51, - 227, 20, 79, 227, 100, 13, 5, 246, 192, 24, 254, 190, 13, 5, 246, 192, - 24, 254, 80, 13, 5, 246, 192, 24, 254, 79, 79, 246, 177, 13, 5, 246, 192, - 24, 253, 61, 13, 5, 246, 192, 24, 253, 36, 79, 208, 13, 5, 246, 192, 24, - 252, 70, 13, 5, 246, 192, 24, 252, 71, 79, 208, 13, 5, 246, 192, 24, 250, - 189, 13, 5, 246, 192, 24, 250, 4, 13, 5, 246, 192, 24, 249, 222, 24, 229, - 114, 13, 5, 246, 192, 24, 248, 105, 13, 5, 246, 192, 24, 248, 2, 13, 5, - 246, 192, 24, 248, 3, 79, 238, 43, 13, 5, 246, 192, 24, 247, 239, 13, 5, - 246, 192, 24, 247, 240, 24, 246, 167, 227, 19, 13, 5, 246, 192, 24, 246, - 167, 227, 19, 13, 5, 246, 192, 24, 246, 160, 13, 5, 246, 192, 24, 246, - 46, 13, 5, 246, 192, 24, 246, 44, 13, 5, 246, 192, 24, 246, 45, 79, 57, - 13, 5, 246, 192, 24, 246, 31, 79, 228, 6, 13, 5, 246, 192, 24, 245, 170, - 79, 237, 111, 79, 247, 180, 13, 5, 246, 192, 24, 245, 154, 13, 5, 246, - 192, 24, 245, 155, 79, 238, 43, 13, 5, 246, 192, 24, 245, 76, 79, 237, - 193, 13, 5, 246, 192, 24, 244, 142, 13, 5, 246, 192, 24, 240, 50, 245, - 204, 13, 5, 246, 192, 24, 239, 201, 79, 244, 146, 79, 254, 80, 13, 5, - 246, 192, 24, 239, 53, 13, 5, 246, 192, 24, 239, 25, 13, 5, 246, 192, 24, - 238, 196, 13, 5, 246, 192, 24, 238, 197, 79, 238, 21, 13, 5, 246, 192, - 24, 238, 106, 79, 254, 190, 13, 5, 246, 192, 24, 238, 43, 13, 5, 246, - 192, 24, 236, 236, 79, 247, 239, 13, 5, 246, 192, 24, 236, 157, 13, 5, - 246, 192, 24, 234, 194, 13, 5, 246, 192, 24, 234, 195, 107, 234, 194, 13, - 5, 246, 192, 24, 213, 13, 5, 246, 192, 24, 231, 12, 13, 5, 246, 192, 24, - 230, 244, 13, 5, 246, 192, 24, 229, 114, 13, 5, 246, 192, 24, 229, 115, - 79, 225, 236, 13, 5, 246, 192, 24, 229, 88, 13, 5, 246, 192, 24, 227, - 233, 13, 5, 246, 192, 24, 227, 84, 13, 5, 246, 192, 24, 66, 13, 5, 246, - 192, 24, 225, 163, 13, 5, 246, 192, 24, 225, 164, 79, 248, 107, 13, 5, - 246, 192, 107, 246, 191, 13, 5, 246, 186, 13, 5, 246, 187, 250, 238, 246, - 186, 13, 5, 246, 184, 13, 5, 246, 185, 107, 246, 185, 246, 161, 107, 246, - 160, 13, 5, 246, 177, 13, 5, 246, 178, 246, 185, 107, 246, 185, 246, 161, - 107, 246, 160, 13, 5, 246, 176, 13, 5, 246, 174, 13, 5, 246, 168, 13, 5, - 246, 166, 13, 5, 246, 167, 227, 19, 13, 5, 246, 167, 107, 246, 166, 13, - 5, 246, 167, 250, 238, 246, 166, 13, 5, 246, 160, 13, 5, 246, 159, 13, 5, - 246, 155, 13, 5, 246, 107, 13, 5, 246, 108, 24, 238, 91, 13, 5, 246, 46, - 13, 5, 246, 47, 24, 72, 13, 5, 246, 47, 24, 66, 13, 5, 246, 47, 250, 238, - 246, 46, 13, 5, 246, 44, 13, 5, 246, 45, 107, 246, 44, 13, 5, 246, 45, - 250, 238, 246, 44, 13, 5, 246, 42, 13, 5, 246, 30, 13, 5, 246, 31, 245, - 204, 13, 5, 246, 28, 13, 5, 246, 29, 24, 102, 79, 240, 49, 13, 5, 246, - 29, 24, 246, 167, 227, 19, 13, 5, 246, 29, 24, 240, 49, 13, 5, 246, 29, - 24, 237, 111, 79, 240, 49, 13, 5, 246, 29, 24, 213, 13, 5, 246, 26, 13, - 5, 246, 24, 13, 5, 246, 25, 250, 238, 246, 24, 13, 5, 246, 25, 24, 253, - 61, 13, 5, 246, 25, 24, 227, 84, 13, 5, 246, 25, 227, 19, 13, 5, 245, - 218, 13, 5, 245, 219, 250, 238, 245, 218, 13, 5, 245, 216, 13, 5, 245, - 217, 24, 239, 53, 13, 5, 245, 217, 24, 239, 54, 24, 240, 50, 245, 204, - 13, 5, 245, 217, 24, 234, 194, 13, 5, 245, 217, 24, 231, 13, 79, 225, - 247, 13, 5, 245, 217, 245, 204, 13, 5, 245, 212, 13, 5, 245, 213, 24, - 102, 79, 238, 91, 13, 5, 245, 213, 24, 238, 91, 13, 5, 245, 213, 107, - 245, 213, 237, 105, 13, 5, 245, 208, 13, 5, 245, 206, 13, 5, 245, 207, - 24, 229, 114, 13, 5, 245, 198, 13, 5, 245, 197, 13, 5, 245, 194, 13, 5, - 245, 193, 13, 5, 154, 13, 5, 245, 170, 227, 19, 13, 5, 245, 170, 245, - 204, 13, 5, 245, 154, 13, 5, 245, 75, 13, 5, 245, 76, 24, 254, 80, 13, 5, - 245, 76, 24, 254, 78, 13, 5, 245, 76, 24, 253, 61, 13, 5, 245, 76, 24, - 249, 195, 13, 5, 245, 76, 24, 246, 184, 13, 5, 245, 76, 24, 238, 190, 13, - 5, 245, 76, 24, 234, 194, 13, 5, 245, 76, 24, 229, 114, 13, 5, 245, 76, - 24, 66, 13, 5, 244, 145, 13, 5, 244, 142, 13, 5, 244, 143, 24, 254, 190, - 13, 5, 244, 143, 24, 245, 154, 13, 5, 244, 143, 24, 239, 25, 13, 5, 244, - 143, 24, 237, 158, 13, 5, 244, 143, 24, 225, 163, 13, 5, 244, 140, 13, 5, - 74, 13, 5, 244, 81, 57, 13, 5, 244, 71, 13, 5, 240, 75, 13, 5, 240, 76, - 107, 240, 76, 252, 70, 13, 5, 240, 76, 107, 240, 76, 228, 118, 13, 5, - 240, 52, 13, 5, 240, 49, 13, 5, 240, 50, 249, 245, 13, 5, 240, 50, 231, - 180, 13, 5, 240, 50, 107, 240, 50, 229, 75, 107, 229, 75, 225, 164, 107, - 225, 163, 13, 5, 240, 50, 245, 204, 13, 5, 240, 41, 13, 5, 240, 42, 24, - 246, 167, 227, 19, 13, 5, 240, 40, 13, 5, 240, 30, 13, 5, 240, 31, 24, - 227, 84, 13, 5, 240, 31, 250, 238, 240, 30, 13, 5, 240, 31, 234, 35, 240, - 30, 13, 5, 240, 31, 228, 118, 13, 5, 240, 23, 13, 5, 240, 16, 13, 5, 239, - 210, 13, 5, 239, 200, 13, 5, 177, 13, 5, 188, 24, 57, 13, 5, 188, 24, - 255, 29, 13, 5, 188, 24, 255, 30, 79, 238, 105, 13, 5, 188, 24, 254, 78, - 13, 5, 188, 24, 253, 61, 13, 5, 188, 24, 253, 50, 13, 5, 188, 24, 125, - 13, 5, 188, 24, 252, 181, 13, 5, 188, 24, 247, 193, 13, 5, 188, 24, 247, - 180, 13, 5, 188, 24, 246, 193, 13, 5, 188, 24, 246, 177, 13, 5, 188, 24, - 246, 167, 227, 19, 13, 5, 188, 24, 246, 160, 13, 5, 188, 24, 246, 161, - 79, 229, 145, 79, 57, 13, 5, 188, 24, 246, 46, 13, 5, 188, 24, 246, 30, - 13, 5, 188, 24, 246, 25, 79, 230, 244, 13, 5, 188, 24, 246, 25, 250, 238, - 246, 24, 13, 5, 188, 24, 245, 218, 13, 5, 188, 24, 245, 197, 13, 5, 188, - 24, 240, 49, 13, 5, 188, 24, 240, 30, 13, 5, 188, 24, 239, 53, 13, 5, - 188, 24, 238, 199, 13, 5, 188, 24, 238, 196, 13, 5, 188, 24, 237, 193, - 13, 5, 188, 24, 237, 110, 13, 5, 188, 24, 236, 235, 13, 5, 188, 24, 236, - 236, 79, 248, 107, 13, 5, 188, 24, 236, 236, 79, 246, 46, 13, 5, 188, 24, - 236, 236, 79, 227, 44, 13, 5, 188, 24, 236, 157, 13, 5, 188, 24, 236, - 158, 79, 234, 190, 13, 5, 188, 24, 235, 162, 13, 5, 188, 24, 234, 194, - 13, 5, 188, 24, 233, 69, 13, 5, 188, 24, 231, 70, 13, 5, 188, 24, 231, - 31, 13, 5, 188, 24, 230, 244, 13, 5, 188, 24, 229, 146, 13, 5, 188, 24, - 229, 114, 13, 5, 188, 24, 229, 88, 13, 5, 188, 24, 229, 43, 13, 5, 188, - 24, 229, 7, 13, 5, 188, 24, 227, 240, 13, 5, 188, 24, 227, 67, 13, 5, - 188, 24, 66, 13, 5, 188, 24, 225, 171, 13, 5, 188, 24, 225, 163, 13, 5, - 188, 24, 225, 141, 24, 213, 13, 5, 188, 24, 225, 83, 13, 5, 188, 24, 223, - 47, 13, 5, 239, 73, 13, 5, 239, 74, 250, 238, 239, 73, 13, 5, 239, 68, - 13, 5, 239, 66, 13, 5, 239, 64, 13, 5, 239, 63, 13, 5, 239, 61, 13, 5, - 239, 62, 107, 239, 61, 13, 5, 239, 53, 13, 5, 239, 54, 24, 240, 50, 245, - 204, 13, 5, 239, 49, 13, 5, 239, 50, 24, 253, 61, 13, 5, 239, 50, 250, - 238, 239, 49, 13, 5, 239, 48, 13, 5, 239, 47, 13, 5, 239, 25, 13, 5, 239, - 26, 215, 24, 97, 107, 215, 24, 66, 13, 5, 239, 26, 107, 239, 26, 215, 24, - 97, 107, 215, 24, 66, 13, 5, 238, 237, 13, 5, 238, 199, 13, 5, 238, 200, - 24, 253, 61, 13, 5, 238, 200, 24, 66, 13, 5, 238, 200, 24, 225, 163, 13, - 5, 238, 196, 13, 5, 238, 190, 13, 5, 238, 180, 13, 5, 238, 179, 13, 5, - 238, 177, 13, 5, 238, 178, 107, 238, 177, 13, 5, 238, 107, 13, 5, 238, - 108, 107, 245, 76, 24, 254, 79, 238, 108, 107, 245, 76, 24, 254, 78, 13, - 5, 238, 105, 13, 5, 238, 103, 13, 5, 238, 104, 225, 54, 15, 13, 5, 238, - 102, 13, 5, 238, 100, 13, 5, 238, 101, 245, 204, 13, 5, 238, 99, 13, 5, - 238, 91, 13, 5, 238, 92, 234, 35, 238, 91, 13, 5, 238, 86, 13, 5, 238, - 70, 13, 5, 238, 43, 13, 5, 238, 31, 13, 5, 215, 24, 57, 13, 5, 215, 24, - 102, 79, 250, 190, 79, 154, 13, 5, 215, 24, 102, 79, 246, 160, 13, 5, - 215, 24, 102, 79, 238, 21, 13, 5, 215, 24, 254, 233, 13, 5, 215, 24, 254, - 190, 13, 5, 215, 24, 254, 81, 223, 43, 227, 19, 13, 5, 215, 24, 253, 61, - 13, 5, 215, 24, 252, 181, 13, 5, 215, 24, 250, 140, 13, 5, 215, 24, 247, - 239, 13, 5, 215, 24, 246, 193, 13, 5, 215, 24, 246, 160, 13, 5, 215, 24, - 245, 212, 13, 5, 215, 24, 245, 213, 79, 245, 212, 13, 5, 215, 24, 154, - 13, 5, 215, 24, 245, 154, 13, 5, 215, 24, 245, 76, 24, 234, 194, 13, 5, - 215, 24, 240, 50, 245, 204, 13, 5, 215, 24, 240, 30, 13, 5, 215, 24, 240, - 31, 79, 154, 13, 5, 215, 24, 240, 31, 79, 237, 110, 13, 5, 215, 24, 238, - 199, 13, 5, 215, 24, 238, 190, 13, 5, 215, 24, 238, 105, 13, 5, 215, 24, - 238, 100, 13, 5, 215, 24, 238, 101, 79, 245, 76, 79, 57, 13, 5, 215, 24, - 238, 31, 13, 5, 215, 24, 237, 158, 13, 5, 215, 24, 237, 110, 13, 5, 215, - 24, 237, 102, 13, 5, 215, 24, 236, 235, 13, 5, 215, 24, 236, 236, 79, - 247, 239, 13, 5, 215, 24, 236, 32, 13, 5, 215, 24, 235, 162, 13, 5, 215, - 24, 229, 115, 79, 227, 233, 13, 5, 215, 24, 229, 73, 79, 246, 25, 79, - 247, 193, 13, 5, 215, 24, 229, 73, 79, 246, 25, 227, 19, 13, 5, 215, 24, - 229, 41, 13, 5, 215, 24, 229, 42, 79, 229, 41, 13, 5, 215, 24, 227, 233, - 13, 5, 215, 24, 227, 95, 13, 5, 215, 24, 227, 84, 13, 5, 215, 24, 227, - 45, 79, 102, 79, 228, 7, 79, 236, 1, 13, 5, 215, 24, 66, 13, 5, 215, 24, - 97, 79, 57, 13, 5, 215, 24, 97, 79, 97, 79, 66, 13, 5, 215, 24, 225, 172, - 79, 254, 80, 13, 5, 215, 24, 225, 163, 13, 5, 215, 24, 225, 83, 13, 5, - 215, 228, 118, 13, 5, 238, 29, 13, 5, 238, 30, 24, 229, 114, 13, 5, 238, - 30, 24, 229, 115, 79, 227, 233, 13, 5, 238, 30, 245, 204, 13, 5, 238, 30, - 245, 205, 107, 238, 30, 245, 205, 229, 114, 13, 5, 238, 26, 13, 5, 238, - 21, 13, 5, 238, 22, 24, 238, 21, 13, 5, 238, 20, 13, 5, 216, 24, 238, 91, - 13, 5, 216, 24, 238, 92, 79, 231, 70, 13, 5, 237, 193, 13, 5, 237, 181, - 13, 5, 237, 173, 13, 5, 237, 158, 13, 5, 237, 110, 13, 5, 237, 111, 24, - 253, 61, 13, 5, 237, 108, 13, 5, 237, 109, 24, 254, 233, 13, 5, 237, 109, - 24, 253, 61, 13, 5, 237, 109, 24, 247, 180, 13, 5, 237, 109, 24, 247, - 181, 227, 19, 13, 5, 237, 109, 24, 246, 167, 227, 19, 13, 5, 237, 109, - 24, 245, 76, 24, 253, 61, 13, 5, 237, 109, 24, 240, 30, 13, 5, 237, 109, - 24, 239, 66, 13, 5, 237, 109, 24, 239, 64, 13, 5, 237, 109, 24, 239, 65, - 79, 254, 80, 13, 5, 237, 109, 24, 238, 199, 13, 5, 237, 109, 24, 238, 44, - 79, 254, 80, 13, 5, 237, 109, 24, 238, 31, 13, 5, 237, 109, 24, 236, 236, - 79, 247, 239, 13, 5, 237, 109, 24, 235, 162, 13, 5, 237, 109, 24, 234, - 206, 13, 5, 237, 109, 24, 229, 16, 79, 254, 80, 13, 5, 237, 109, 24, 228, - 255, 79, 252, 90, 13, 5, 237, 109, 24, 225, 247, 13, 5, 237, 109, 227, - 19, 13, 5, 237, 109, 250, 238, 237, 108, 13, 5, 237, 109, 234, 35, 237, - 108, 13, 5, 237, 109, 228, 118, 13, 5, 237, 109, 229, 96, 13, 5, 237, - 107, 13, 5, 237, 105, 13, 5, 237, 106, 107, 237, 105, 13, 5, 237, 106, - 234, 35, 237, 105, 13, 5, 237, 106, 229, 96, 13, 5, 237, 104, 13, 5, 237, - 102, 13, 5, 237, 100, 13, 5, 237, 101, 107, 237, 100, 13, 5, 237, 101, - 107, 237, 101, 246, 161, 107, 246, 160, 13, 5, 198, 13, 5, 237, 68, 24, - 227, 84, 13, 5, 237, 68, 245, 204, 13, 5, 237, 67, 13, 5, 237, 55, 13, 5, - 237, 24, 13, 5, 237, 7, 13, 5, 237, 6, 13, 5, 236, 235, 13, 5, 236, 205, - 13, 5, 236, 157, 13, 5, 236, 125, 13, 5, 236, 66, 13, 5, 236, 67, 107, - 236, 66, 13, 5, 236, 59, 13, 5, 236, 60, 245, 204, 13, 5, 236, 46, 13, 5, - 236, 35, 13, 5, 236, 32, 13, 5, 236, 33, 24, 57, 13, 5, 236, 33, 24, 238, - 91, 13, 5, 236, 33, 24, 223, 117, 13, 5, 236, 33, 107, 236, 32, 13, 5, - 236, 33, 107, 236, 33, 24, 102, 79, 236, 1, 13, 5, 236, 33, 250, 238, - 236, 32, 13, 5, 236, 30, 13, 5, 236, 31, 24, 57, 13, 5, 236, 31, 24, 102, - 79, 250, 4, 13, 5, 236, 31, 24, 250, 4, 13, 5, 236, 31, 245, 204, 13, 5, - 236, 1, 13, 5, 236, 0, 13, 5, 235, 246, 13, 5, 235, 247, 239, 222, 13, 5, - 235, 247, 24, 229, 44, 227, 19, 13, 5, 235, 247, 234, 35, 235, 246, 13, - 5, 235, 245, 13, 5, 235, 241, 234, 182, 13, 5, 235, 240, 13, 5, 235, 239, - 13, 5, 235, 162, 13, 5, 235, 163, 24, 57, 13, 5, 235, 163, 24, 225, 163, - 13, 5, 235, 163, 229, 96, 13, 5, 235, 89, 13, 5, 235, 90, 24, 72, 13, 5, - 235, 88, 13, 5, 235, 64, 13, 5, 235, 65, 24, 246, 167, 227, 19, 13, 5, - 235, 65, 24, 246, 161, 79, 246, 167, 227, 19, 13, 5, 235, 62, 13, 5, 235, - 63, 24, 254, 190, 13, 5, 235, 63, 24, 254, 80, 13, 5, 235, 63, 24, 254, - 81, 79, 254, 80, 13, 5, 235, 63, 24, 245, 212, 13, 5, 235, 63, 24, 236, - 236, 79, 246, 167, 227, 19, 13, 5, 235, 63, 24, 235, 162, 13, 5, 235, 63, - 24, 234, 194, 13, 5, 235, 63, 24, 229, 114, 13, 5, 235, 63, 24, 229, 115, - 79, 102, 254, 190, 13, 5, 235, 63, 24, 229, 115, 79, 254, 80, 13, 5, 235, - 63, 24, 229, 115, 79, 254, 81, 79, 254, 80, 13, 5, 235, 63, 24, 225, 172, - 79, 254, 80, 13, 5, 235, 63, 24, 225, 83, 13, 5, 235, 53, 13, 5, 234, - 206, 13, 5, 234, 205, 13, 5, 234, 194, 13, 5, 234, 195, 238, 30, 24, 246, - 160, 13, 5, 234, 195, 238, 30, 24, 237, 7, 13, 5, 234, 195, 238, 30, 24, - 231, 12, 13, 5, 234, 195, 238, 30, 24, 231, 13, 107, 234, 195, 238, 30, - 24, 231, 12, 13, 5, 234, 195, 238, 30, 24, 225, 83, 13, 5, 234, 195, 227, - 19, 13, 5, 234, 195, 107, 234, 194, 13, 5, 234, 195, 250, 238, 234, 194, - 13, 5, 234, 195, 250, 238, 234, 195, 238, 30, 107, 238, 29, 13, 5, 234, - 190, 13, 5, 234, 191, 255, 51, 24, 254, 76, 13, 5, 234, 191, 255, 51, 24, - 252, 181, 13, 5, 234, 191, 255, 51, 24, 248, 103, 13, 5, 234, 191, 255, - 51, 24, 245, 212, 13, 5, 234, 191, 255, 51, 24, 240, 50, 245, 204, 13, 5, - 234, 191, 255, 51, 24, 239, 64, 13, 5, 234, 191, 255, 51, 24, 238, 43, - 13, 5, 234, 191, 255, 51, 24, 235, 162, 13, 5, 234, 191, 255, 51, 24, - 228, 252, 13, 5, 234, 191, 255, 51, 24, 225, 171, 13, 5, 234, 191, 238, - 178, 24, 252, 181, 13, 5, 234, 191, 238, 178, 24, 252, 182, 66, 13, 5, - 213, 13, 5, 233, 235, 13, 5, 233, 212, 13, 5, 233, 197, 13, 5, 233, 107, - 13, 5, 233, 69, 13, 5, 233, 70, 24, 57, 13, 5, 233, 70, 24, 255, 52, 13, - 5, 233, 70, 24, 252, 181, 13, 5, 233, 70, 24, 252, 90, 13, 5, 233, 70, - 24, 72, 13, 5, 233, 70, 24, 74, 13, 5, 233, 70, 24, 244, 71, 13, 5, 233, - 70, 24, 66, 13, 5, 233, 70, 24, 225, 171, 13, 5, 233, 70, 250, 238, 233, - 69, 13, 5, 233, 32, 13, 5, 233, 33, 24, 239, 49, 13, 5, 233, 33, 24, 225, - 163, 13, 5, 233, 33, 24, 223, 117, 13, 5, 233, 33, 234, 35, 233, 32, 13, - 5, 208, 13, 5, 232, 20, 13, 5, 231, 180, 13, 5, 231, 70, 13, 5, 231, 31, - 13, 5, 231, 20, 234, 182, 13, 5, 231, 19, 13, 5, 231, 20, 24, 57, 13, 5, - 231, 20, 24, 248, 107, 13, 5, 231, 20, 24, 248, 105, 13, 5, 231, 20, 24, - 154, 13, 5, 231, 20, 24, 239, 53, 13, 5, 231, 20, 24, 238, 91, 13, 5, - 231, 20, 24, 237, 100, 13, 5, 231, 20, 24, 236, 157, 13, 5, 231, 20, 24, - 234, 194, 13, 5, 231, 20, 24, 231, 12, 13, 5, 231, 20, 24, 229, 88, 13, - 5, 231, 20, 24, 227, 100, 13, 5, 231, 20, 24, 225, 171, 13, 5, 231, 20, - 24, 225, 168, 13, 5, 231, 20, 24, 225, 145, 13, 5, 231, 20, 24, 225, 103, - 13, 5, 231, 20, 24, 225, 83, 13, 5, 231, 20, 107, 231, 19, 13, 5, 231, - 20, 245, 204, 13, 5, 231, 12, 13, 5, 231, 13, 215, 24, 254, 78, 13, 5, - 230, 251, 13, 5, 230, 244, 13, 5, 229, 146, 13, 5, 229, 144, 13, 5, 229, - 145, 24, 57, 13, 5, 229, 145, 24, 253, 61, 13, 5, 229, 145, 24, 246, 24, - 13, 5, 229, 145, 24, 235, 162, 13, 5, 229, 145, 24, 229, 41, 13, 5, 229, - 145, 24, 225, 236, 13, 5, 229, 145, 24, 66, 13, 5, 229, 145, 24, 97, 79, - 57, 13, 5, 229, 143, 13, 5, 229, 141, 13, 5, 229, 125, 13, 5, 229, 114, - 13, 5, 229, 115, 244, 145, 13, 5, 229, 115, 107, 229, 115, 246, 185, 107, - 246, 185, 246, 161, 107, 246, 160, 13, 5, 229, 115, 107, 229, 115, 227, - 101, 107, 227, 101, 246, 161, 107, 246, 160, 13, 5, 229, 107, 13, 5, 229, - 102, 13, 5, 229, 99, 13, 5, 229, 98, 13, 5, 229, 95, 13, 5, 229, 88, 13, - 5, 229, 89, 24, 57, 13, 5, 229, 89, 24, 240, 30, 13, 5, 229, 82, 13, 5, - 229, 83, 24, 57, 13, 5, 229, 83, 24, 253, 51, 13, 5, 229, 83, 24, 252, - 79, 13, 5, 229, 83, 24, 249, 210, 13, 5, 229, 83, 24, 246, 160, 13, 5, - 229, 83, 24, 240, 49, 13, 5, 229, 83, 24, 240, 50, 245, 204, 13, 5, 229, - 83, 24, 238, 86, 13, 5, 229, 83, 24, 237, 102, 13, 5, 229, 83, 24, 236, - 59, 13, 5, 229, 83, 24, 231, 12, 13, 5, 229, 77, 13, 5, 229, 74, 13, 5, - 229, 75, 227, 19, 13, 5, 229, 75, 107, 229, 75, 252, 71, 107, 252, 70, - 13, 5, 229, 72, 13, 5, 229, 43, 13, 5, 229, 44, 107, 239, 223, 229, 43, - 13, 5, 229, 41, 13, 5, 229, 40, 13, 5, 229, 15, 13, 5, 229, 16, 245, 204, - 13, 5, 229, 7, 13, 5, 229, 5, 13, 5, 229, 6, 107, 229, 6, 229, 41, 13, 5, - 228, 254, 13, 5, 228, 252, 13, 5, 228, 6, 13, 5, 228, 7, 107, 228, 6, 13, - 5, 227, 242, 13, 5, 227, 241, 13, 5, 227, 240, 13, 5, 227, 233, 13, 5, - 227, 232, 13, 5, 227, 213, 13, 5, 227, 212, 13, 5, 227, 107, 13, 5, 227, - 108, 254, 69, 13, 5, 227, 108, 24, 245, 75, 13, 5, 227, 108, 24, 236, - 157, 13, 5, 227, 108, 245, 204, 13, 5, 227, 100, 13, 5, 227, 101, 107, - 227, 101, 235, 90, 107, 235, 90, 249, 196, 107, 249, 195, 13, 5, 227, - 101, 228, 118, 13, 5, 227, 95, 13, 5, 108, 24, 252, 181, 13, 5, 108, 24, - 245, 212, 13, 5, 108, 24, 229, 114, 13, 5, 108, 24, 229, 43, 13, 5, 108, - 24, 225, 247, 13, 5, 108, 24, 225, 163, 13, 5, 227, 84, 13, 5, 227, 67, - 13, 5, 227, 44, 13, 5, 227, 45, 245, 204, 13, 5, 226, 175, 13, 5, 226, - 176, 227, 19, 13, 5, 226, 160, 13, 5, 226, 146, 13, 5, 226, 147, 24, 227, - 84, 13, 5, 226, 147, 107, 226, 146, 13, 5, 226, 147, 107, 226, 147, 246, - 185, 107, 246, 185, 246, 161, 107, 246, 160, 13, 5, 225, 250, 13, 5, 225, - 247, 13, 5, 225, 245, 13, 5, 225, 244, 13, 5, 225, 236, 13, 5, 225, 237, - 107, 225, 237, 223, 118, 107, 223, 117, 13, 5, 66, 13, 5, 97, 245, 212, - 13, 5, 97, 97, 66, 13, 5, 97, 107, 97, 233, 242, 107, 233, 242, 246, 161, - 107, 246, 160, 13, 5, 97, 107, 97, 227, 214, 107, 227, 213, 13, 5, 97, - 107, 97, 97, 200, 107, 97, 231, 192, 13, 5, 225, 171, 13, 5, 225, 168, - 13, 5, 225, 163, 13, 5, 225, 164, 238, 86, 13, 5, 225, 164, 24, 253, 61, - 13, 5, 225, 164, 24, 236, 157, 13, 5, 225, 164, 24, 97, 79, 97, 79, 66, - 13, 5, 225, 164, 24, 97, 79, 97, 79, 97, 245, 204, 13, 5, 225, 164, 245, - 204, 13, 5, 225, 164, 229, 96, 13, 5, 225, 164, 229, 97, 24, 253, 61, 13, - 5, 225, 160, 13, 5, 225, 145, 13, 5, 225, 146, 24, 238, 31, 13, 5, 225, - 146, 24, 236, 236, 79, 250, 189, 13, 5, 225, 146, 24, 229, 144, 13, 5, - 225, 146, 24, 66, 13, 5, 225, 144, 13, 5, 225, 140, 13, 5, 225, 141, 24, - 239, 25, 13, 5, 225, 141, 24, 213, 13, 5, 225, 138, 13, 5, 225, 139, 245, - 204, 13, 5, 225, 103, 13, 5, 225, 104, 250, 238, 225, 103, 13, 5, 225, - 104, 229, 96, 13, 5, 225, 101, 13, 5, 225, 102, 24, 102, 79, 154, 13, 5, - 225, 102, 24, 102, 79, 236, 1, 13, 5, 225, 102, 24, 254, 233, 13, 5, 225, - 102, 24, 154, 13, 5, 225, 102, 24, 234, 194, 13, 5, 225, 102, 24, 225, - 171, 13, 5, 225, 102, 24, 225, 172, 79, 254, 80, 13, 5, 225, 102, 24, - 225, 172, 79, 252, 181, 13, 5, 225, 100, 13, 5, 225, 97, 13, 5, 225, 96, - 13, 5, 225, 93, 13, 5, 225, 94, 24, 57, 13, 5, 225, 94, 24, 254, 76, 13, - 5, 225, 94, 24, 125, 13, 5, 225, 94, 24, 248, 97, 13, 5, 225, 94, 24, - 246, 193, 13, 5, 225, 94, 24, 246, 177, 13, 5, 225, 94, 24, 246, 167, - 227, 19, 13, 5, 225, 94, 24, 246, 160, 13, 5, 225, 94, 24, 245, 218, 13, - 5, 225, 94, 24, 154, 13, 5, 225, 94, 24, 240, 49, 13, 5, 225, 94, 24, - 240, 30, 13, 5, 225, 94, 24, 239, 200, 13, 5, 225, 94, 24, 238, 199, 13, - 5, 225, 94, 24, 237, 100, 13, 5, 225, 94, 24, 236, 125, 13, 5, 225, 94, - 24, 213, 13, 5, 225, 94, 24, 229, 114, 13, 5, 225, 94, 24, 229, 5, 13, 5, - 225, 94, 24, 225, 250, 13, 5, 225, 94, 24, 97, 79, 245, 212, 13, 5, 225, - 94, 24, 225, 163, 13, 5, 225, 94, 24, 225, 91, 13, 5, 225, 91, 13, 5, - 225, 92, 24, 66, 13, 5, 225, 83, 13, 5, 225, 84, 24, 57, 13, 5, 225, 84, - 24, 238, 107, 13, 5, 225, 84, 24, 238, 91, 13, 5, 225, 84, 24, 227, 84, - 13, 5, 225, 80, 13, 5, 225, 82, 13, 5, 225, 81, 13, 5, 225, 77, 13, 5, - 225, 67, 13, 5, 225, 68, 24, 239, 25, 13, 5, 225, 66, 13, 5, 223, 117, - 13, 5, 223, 118, 227, 19, 13, 5, 223, 118, 228, 119, 24, 238, 91, 13, 5, - 223, 115, 13, 5, 223, 108, 13, 5, 223, 96, 13, 5, 223, 47, 13, 5, 223, - 48, 107, 223, 47, 13, 5, 223, 46, 13, 5, 223, 44, 13, 5, 223, 45, 239, - 67, 227, 19, 13, 5, 223, 39, 13, 5, 223, 32, 13, 5, 223, 19, 13, 5, 223, - 17, 13, 5, 223, 18, 24, 57, 13, 5, 223, 16, 13, 5, 223, 15, 13, 111, 5, - 135, 254, 80, 13, 111, 5, 152, 254, 80, 13, 111, 5, 246, 243, 254, 80, - 13, 111, 5, 247, 37, 254, 80, 13, 111, 5, 228, 217, 254, 80, 13, 111, 5, - 229, 163, 254, 80, 13, 111, 5, 248, 20, 254, 80, 13, 111, 5, 235, 61, - 254, 80, 13, 111, 5, 152, 249, 195, 13, 111, 5, 246, 243, 249, 195, 13, - 111, 5, 247, 37, 249, 195, 13, 111, 5, 228, 217, 249, 195, 13, 111, 5, - 229, 163, 249, 195, 13, 111, 5, 248, 20, 249, 195, 13, 111, 5, 235, 61, - 249, 195, 13, 111, 5, 246, 243, 66, 13, 111, 5, 247, 37, 66, 13, 111, 5, - 228, 217, 66, 13, 111, 5, 229, 163, 66, 13, 111, 5, 248, 20, 66, 13, 111, - 5, 235, 61, 66, 13, 111, 5, 168, 246, 109, 13, 111, 5, 135, 246, 109, 13, - 111, 5, 152, 246, 109, 13, 111, 5, 246, 243, 246, 109, 13, 111, 5, 247, - 37, 246, 109, 13, 111, 5, 228, 217, 246, 109, 13, 111, 5, 229, 163, 246, - 109, 13, 111, 5, 248, 20, 246, 109, 13, 111, 5, 235, 61, 246, 109, 13, - 111, 5, 168, 246, 106, 13, 111, 5, 135, 246, 106, 13, 111, 5, 152, 246, - 106, 13, 111, 5, 246, 243, 246, 106, 13, 111, 5, 247, 37, 246, 106, 13, - 111, 5, 135, 229, 125, 13, 111, 5, 152, 229, 125, 13, 111, 5, 152, 229, - 126, 225, 54, 15, 13, 111, 5, 246, 243, 229, 125, 13, 111, 5, 247, 37, - 229, 125, 13, 111, 5, 228, 217, 229, 125, 13, 111, 5, 229, 163, 229, 125, - 13, 111, 5, 248, 20, 229, 125, 13, 111, 5, 235, 61, 229, 125, 13, 111, 5, - 168, 229, 121, 13, 111, 5, 135, 229, 121, 13, 111, 5, 152, 229, 121, 13, - 111, 5, 152, 229, 122, 225, 54, 15, 13, 111, 5, 246, 243, 229, 121, 13, - 111, 5, 247, 37, 229, 121, 13, 111, 5, 229, 126, 24, 246, 178, 79, 249, - 195, 13, 111, 5, 229, 126, 24, 246, 178, 79, 236, 125, 13, 111, 5, 168, - 252, 67, 13, 111, 5, 135, 252, 67, 13, 111, 5, 152, 252, 67, 13, 111, 5, - 152, 252, 68, 225, 54, 15, 13, 111, 5, 246, 243, 252, 67, 13, 111, 5, - 247, 37, 252, 67, 13, 111, 5, 152, 225, 54, 211, 247, 182, 13, 111, 5, - 152, 225, 54, 211, 247, 179, 13, 111, 5, 246, 243, 225, 54, 211, 237, - 174, 13, 111, 5, 246, 243, 225, 54, 211, 237, 172, 13, 111, 5, 246, 243, - 225, 54, 211, 237, 175, 57, 13, 111, 5, 246, 243, 225, 54, 211, 237, 175, - 254, 27, 13, 111, 5, 228, 217, 225, 54, 211, 254, 77, 13, 111, 5, 229, - 163, 225, 54, 211, 240, 22, 13, 111, 5, 229, 163, 225, 54, 211, 240, 24, - 57, 13, 111, 5, 229, 163, 225, 54, 211, 240, 24, 254, 27, 13, 111, 5, - 248, 20, 225, 54, 211, 225, 79, 13, 111, 5, 248, 20, 225, 54, 211, 225, - 78, 13, 111, 5, 235, 61, 225, 54, 211, 240, 38, 13, 111, 5, 235, 61, 225, - 54, 211, 240, 37, 13, 111, 5, 235, 61, 225, 54, 211, 240, 36, 13, 111, 5, - 235, 61, 225, 54, 211, 240, 39, 57, 13, 111, 5, 135, 254, 81, 227, 19, - 13, 111, 5, 152, 254, 81, 227, 19, 13, 111, 5, 246, 243, 254, 81, 227, - 19, 13, 111, 5, 247, 37, 254, 81, 227, 19, 13, 111, 5, 228, 217, 254, 81, - 227, 19, 13, 111, 5, 168, 253, 42, 13, 111, 5, 135, 253, 42, 13, 111, 5, - 152, 253, 42, 13, 111, 5, 246, 243, 253, 42, 13, 111, 5, 246, 243, 253, - 43, 225, 54, 15, 13, 111, 5, 247, 37, 253, 42, 13, 111, 5, 247, 37, 253, - 43, 225, 54, 15, 13, 111, 5, 235, 69, 13, 111, 5, 235, 70, 13, 111, 5, - 168, 247, 178, 13, 111, 5, 135, 247, 178, 13, 111, 5, 168, 226, 214, 249, - 195, 13, 111, 5, 135, 226, 212, 249, 195, 13, 111, 5, 247, 37, 228, 209, - 249, 195, 13, 111, 5, 168, 226, 214, 225, 54, 211, 57, 13, 111, 5, 135, - 226, 212, 225, 54, 211, 57, 13, 111, 5, 168, 248, 17, 254, 80, 13, 111, - 5, 168, 232, 77, 254, 80, 13, 111, 5, 84, 254, 72, 168, 228, 210, 13, - 111, 5, 84, 254, 72, 168, 232, 76, 13, 232, 171, 5, 84, 254, 72, 224, 92, - 249, 184, 13, 232, 171, 5, 61, 251, 61, 13, 232, 171, 5, 250, 1, 251, 61, - 13, 232, 171, 5, 250, 1, 226, 74, 43, 23, 14, 232, 177, 43, 23, 14, 250, - 132, 43, 23, 14, 233, 117, 43, 23, 14, 233, 252, 248, 6, 43, 23, 14, 233, - 252, 249, 205, 43, 23, 14, 225, 58, 248, 6, 43, 23, 14, 225, 58, 249, - 205, 43, 23, 14, 239, 16, 43, 23, 14, 227, 125, 43, 23, 14, 233, 186, 43, - 23, 14, 223, 163, 43, 23, 14, 223, 164, 249, 205, 43, 23, 14, 238, 112, - 43, 23, 14, 254, 154, 248, 6, 43, 23, 14, 247, 144, 248, 6, 43, 23, 14, - 227, 30, 43, 23, 14, 238, 239, 43, 23, 14, 254, 145, 43, 23, 14, 254, - 146, 249, 205, 43, 23, 14, 227, 130, 43, 23, 14, 226, 204, 43, 23, 14, - 234, 71, 254, 118, 43, 23, 14, 246, 0, 254, 118, 43, 23, 14, 232, 176, - 43, 23, 14, 251, 198, 43, 23, 14, 225, 48, 43, 23, 14, 239, 199, 254, - 118, 43, 23, 14, 238, 241, 254, 118, 43, 23, 14, 238, 240, 254, 118, 43, - 23, 14, 230, 235, 43, 23, 14, 233, 177, 43, 23, 14, 228, 53, 254, 148, - 43, 23, 14, 233, 251, 254, 118, 43, 23, 14, 225, 57, 254, 118, 43, 23, - 14, 254, 149, 254, 118, 43, 23, 14, 254, 143, 43, 23, 14, 238, 158, 43, - 23, 14, 231, 190, 43, 23, 14, 233, 67, 254, 118, 43, 23, 14, 226, 155, - 43, 23, 14, 254, 189, 43, 23, 14, 230, 194, 43, 23, 14, 227, 133, 254, - 118, 43, 23, 14, 227, 133, 236, 200, 228, 51, 43, 23, 14, 233, 246, 254, - 118, 43, 23, 14, 226, 234, 43, 23, 14, 237, 222, 43, 23, 14, 248, 73, 43, - 23, 14, 226, 80, 43, 23, 14, 227, 12, 43, 23, 14, 238, 115, 43, 23, 14, - 254, 154, 247, 144, 235, 152, 43, 23, 14, 246, 220, 254, 118, 43, 23, 14, - 240, 26, 43, 23, 14, 226, 56, 254, 118, 43, 23, 14, 239, 18, 226, 55, 43, - 23, 14, 233, 135, 43, 23, 14, 232, 180, 43, 23, 14, 238, 140, 43, 23, 14, - 251, 145, 254, 118, 43, 23, 14, 232, 0, 43, 23, 14, 233, 189, 254, 118, - 43, 23, 14, 233, 187, 254, 118, 43, 23, 14, 244, 67, 43, 23, 14, 235, - 236, 43, 23, 14, 233, 103, 43, 23, 14, 238, 141, 254, 211, 43, 23, 14, - 226, 56, 254, 211, 43, 23, 14, 228, 34, 43, 23, 14, 245, 226, 43, 23, 14, - 239, 199, 235, 152, 43, 23, 14, 234, 71, 235, 152, 43, 23, 14, 233, 252, - 235, 152, 43, 23, 14, 233, 102, 43, 23, 14, 238, 128, 43, 23, 14, 233, - 101, 43, 23, 14, 238, 114, 43, 23, 14, 233, 136, 235, 152, 43, 23, 14, - 238, 240, 235, 153, 254, 172, 43, 23, 14, 238, 241, 235, 153, 254, 172, - 43, 23, 14, 223, 161, 43, 23, 14, 254, 146, 235, 152, 43, 23, 14, 254, - 147, 227, 131, 235, 152, 43, 23, 14, 223, 162, 43, 23, 14, 238, 113, 43, - 23, 14, 248, 1, 43, 23, 14, 251, 199, 43, 23, 14, 236, 134, 239, 198, 43, - 23, 14, 225, 58, 235, 152, 43, 23, 14, 233, 67, 235, 152, 43, 23, 14, - 232, 181, 235, 152, 43, 23, 14, 234, 68, 43, 23, 14, 254, 164, 43, 23, - 14, 237, 77, 43, 23, 14, 233, 187, 235, 152, 43, 23, 14, 233, 189, 235, - 152, 43, 23, 14, 247, 169, 233, 188, 43, 23, 14, 238, 51, 43, 23, 14, - 254, 165, 43, 23, 14, 226, 56, 235, 152, 43, 23, 14, 248, 4, 43, 23, 14, - 227, 133, 235, 152, 43, 23, 14, 227, 126, 43, 23, 14, 251, 145, 235, 152, - 43, 23, 14, 247, 210, 43, 23, 14, 230, 195, 235, 152, 43, 23, 14, 224, - 58, 238, 158, 43, 23, 14, 226, 53, 43, 23, 14, 232, 182, 43, 23, 14, 226, - 57, 43, 23, 14, 226, 54, 43, 23, 14, 232, 179, 43, 23, 14, 226, 52, 43, - 23, 14, 232, 178, 43, 23, 14, 245, 255, 43, 23, 14, 254, 113, 43, 23, 14, - 247, 169, 254, 113, 43, 23, 14, 233, 246, 235, 152, 43, 23, 14, 226, 233, - 247, 177, 43, 23, 14, 226, 233, 247, 143, 43, 23, 14, 226, 235, 254, 150, - 43, 23, 14, 226, 228, 239, 57, 254, 142, 43, 23, 14, 239, 17, 43, 23, 14, - 247, 229, 43, 23, 14, 223, 205, 239, 15, 43, 23, 14, 223, 205, 254, 172, - 43, 23, 14, 228, 52, 43, 23, 14, 238, 159, 254, 172, 43, 23, 14, 249, - 206, 254, 118, 43, 23, 14, 238, 116, 254, 118, 43, 23, 14, 238, 116, 254, - 211, 43, 23, 14, 238, 116, 235, 152, 43, 23, 14, 254, 149, 235, 152, 43, - 23, 14, 254, 151, 43, 23, 14, 249, 205, 43, 23, 14, 226, 65, 43, 23, 14, - 227, 4, 43, 23, 14, 238, 132, 43, 23, 14, 237, 225, 247, 225, 251, 138, - 43, 23, 14, 237, 225, 248, 74, 251, 139, 43, 23, 14, 237, 225, 226, 67, - 251, 139, 43, 23, 14, 237, 225, 227, 14, 251, 139, 43, 23, 14, 237, 225, - 240, 21, 251, 138, 43, 23, 14, 246, 0, 235, 153, 254, 172, 43, 23, 14, - 246, 0, 233, 178, 254, 109, 43, 23, 14, 246, 0, 233, 178, 250, 26, 43, - 23, 14, 249, 228, 43, 23, 14, 249, 229, 233, 178, 254, 110, 239, 15, 43, - 23, 14, 249, 229, 233, 178, 254, 110, 254, 172, 43, 23, 14, 249, 229, - 233, 178, 250, 26, 43, 23, 14, 226, 71, 43, 23, 14, 254, 114, 43, 23, 14, - 240, 28, 43, 23, 14, 249, 249, 43, 23, 14, 255, 4, 232, 246, 254, 115, - 43, 23, 14, 255, 4, 254, 112, 43, 23, 14, 255, 4, 254, 115, 43, 23, 14, - 255, 4, 236, 195, 43, 23, 14, 255, 4, 236, 203, 43, 23, 14, 255, 4, 246, - 1, 43, 23, 14, 255, 4, 245, 254, 43, 23, 14, 255, 4, 232, 246, 246, 1, - 43, 23, 14, 237, 10, 232, 187, 244, 65, 43, 23, 14, 237, 10, 254, 213, - 232, 187, 244, 65, 43, 23, 14, 237, 10, 250, 25, 244, 65, 43, 23, 14, - 237, 10, 254, 213, 250, 25, 244, 65, 43, 23, 14, 237, 10, 226, 60, 244, - 65, 43, 23, 14, 237, 10, 226, 72, 43, 23, 14, 237, 10, 227, 8, 244, 65, - 43, 23, 14, 237, 10, 227, 8, 237, 228, 244, 65, 43, 23, 14, 237, 10, 237, - 228, 244, 65, 43, 23, 14, 237, 10, 233, 22, 244, 65, 43, 23, 14, 239, - 203, 227, 26, 244, 66, 43, 23, 14, 254, 147, 227, 26, 244, 66, 43, 23, - 14, 247, 110, 227, 5, 43, 23, 14, 247, 110, 236, 93, 43, 23, 14, 247, - 110, 249, 233, 43, 23, 14, 237, 10, 225, 52, 244, 65, 43, 23, 14, 237, - 10, 232, 186, 244, 65, 43, 23, 14, 237, 10, 233, 22, 227, 8, 244, 65, 43, - 23, 14, 245, 252, 236, 5, 254, 150, 43, 23, 14, 245, 252, 236, 5, 249, - 204, 43, 23, 14, 247, 237, 239, 57, 246, 220, 224, 195, 43, 23, 14, 240, - 27, 43, 23, 14, 240, 25, 43, 23, 14, 246, 220, 254, 119, 250, 24, 244, - 64, 43, 23, 14, 246, 220, 249, 247, 213, 43, 23, 14, 246, 220, 249, 247, - 235, 236, 43, 23, 14, 246, 220, 235, 232, 244, 65, 43, 23, 14, 246, 220, - 249, 247, 250, 4, 43, 23, 14, 246, 220, 228, 200, 249, 246, 250, 4, 43, - 23, 14, 246, 220, 249, 247, 239, 3, 43, 23, 14, 246, 220, 249, 247, 223, - 27, 43, 23, 14, 246, 220, 249, 247, 235, 90, 239, 15, 43, 23, 14, 246, - 220, 249, 247, 235, 90, 254, 172, 43, 23, 14, 246, 220, 237, 40, 251, - 140, 249, 233, 43, 23, 14, 246, 220, 237, 40, 251, 140, 236, 93, 43, 23, - 14, 247, 71, 228, 200, 251, 140, 225, 51, 43, 23, 14, 246, 220, 228, 200, - 251, 140, 227, 134, 43, 23, 14, 246, 220, 235, 154, 43, 23, 14, 251, 141, - 223, 3, 43, 23, 14, 251, 141, 238, 157, 43, 23, 14, 251, 141, 228, 141, - 43, 23, 14, 246, 220, 244, 81, 223, 204, 227, 9, 43, 23, 14, 246, 220, - 247, 238, 254, 166, 43, 23, 14, 223, 204, 226, 61, 43, 23, 14, 249, 241, - 226, 61, 43, 23, 14, 249, 241, 227, 9, 43, 23, 14, 249, 241, 254, 152, - 248, 74, 249, 155, 43, 23, 14, 249, 241, 236, 91, 227, 13, 249, 155, 43, - 23, 14, 249, 241, 249, 225, 247, 153, 249, 155, 43, 23, 14, 249, 241, - 226, 69, 234, 75, 249, 155, 43, 23, 14, 223, 204, 254, 152, 248, 74, 249, - 155, 43, 23, 14, 223, 204, 236, 91, 227, 13, 249, 155, 43, 23, 14, 223, - 204, 249, 225, 247, 153, 249, 155, 43, 23, 14, 223, 204, 226, 69, 234, - 75, 249, 155, 43, 23, 14, 246, 120, 249, 240, 43, 23, 14, 246, 120, 223, - 203, 43, 23, 14, 249, 248, 254, 152, 236, 135, 43, 23, 14, 249, 248, 254, - 152, 236, 220, 43, 23, 14, 249, 248, 249, 205, 43, 23, 14, 249, 248, 226, - 226, 43, 23, 14, 228, 248, 226, 226, 43, 23, 14, 228, 248, 226, 227, 249, - 194, 43, 23, 14, 228, 248, 226, 227, 226, 62, 43, 23, 14, 228, 248, 226, - 227, 227, 2, 43, 23, 14, 228, 248, 254, 90, 43, 23, 14, 228, 248, 254, - 91, 249, 194, 43, 23, 14, 228, 248, 254, 91, 226, 62, 43, 23, 14, 228, - 248, 254, 91, 227, 2, 43, 23, 14, 249, 226, 246, 102, 43, 23, 14, 249, - 232, 234, 13, 43, 23, 14, 228, 46, 43, 23, 14, 254, 107, 213, 43, 23, 14, - 254, 107, 224, 195, 43, 23, 14, 254, 107, 246, 193, 43, 23, 14, 254, 107, - 250, 4, 43, 23, 14, 254, 107, 239, 3, 43, 23, 14, 254, 107, 223, 27, 43, - 23, 14, 254, 107, 235, 89, 43, 23, 14, 238, 240, 235, 153, 236, 202, 43, - 23, 14, 238, 241, 235, 153, 236, 202, 43, 23, 14, 238, 240, 235, 153, - 239, 15, 43, 23, 14, 238, 241, 235, 153, 239, 15, 43, 23, 14, 238, 159, - 239, 15, 43, 23, 14, 246, 0, 235, 153, 239, 15, 23, 14, 228, 241, 253, - 32, 23, 14, 47, 253, 32, 23, 14, 35, 253, 32, 23, 14, 231, 193, 35, 253, - 32, 23, 14, 250, 129, 253, 32, 23, 14, 229, 63, 253, 32, 23, 14, 42, 231, - 212, 53, 23, 14, 41, 231, 212, 53, 23, 14, 231, 212, 249, 138, 23, 14, - 250, 166, 230, 198, 23, 14, 250, 190, 252, 14, 23, 14, 230, 198, 23, 14, - 251, 66, 23, 14, 231, 210, 247, 60, 23, 14, 231, 210, 247, 59, 23, 14, - 231, 210, 247, 58, 23, 14, 247, 76, 23, 14, 247, 77, 51, 23, 14, 252, - 108, 76, 23, 14, 252, 34, 23, 14, 252, 116, 23, 14, 104, 23, 14, 234, 60, - 228, 65, 23, 14, 225, 202, 228, 65, 23, 14, 226, 190, 228, 65, 23, 14, - 246, 242, 228, 65, 23, 14, 247, 36, 228, 65, 23, 14, 228, 216, 228, 65, - 23, 14, 228, 214, 246, 228, 23, 14, 246, 240, 246, 228, 23, 14, 246, 196, - 251, 92, 23, 14, 246, 196, 251, 93, 234, 15, 254, 204, 23, 14, 246, 196, - 251, 93, 234, 15, 253, 22, 23, 14, 252, 45, 251, 92, 23, 14, 247, 131, - 251, 92, 23, 14, 247, 131, 251, 93, 234, 15, 254, 204, 23, 14, 247, 131, - 251, 93, 234, 15, 253, 22, 23, 14, 248, 112, 251, 91, 23, 14, 248, 112, - 251, 90, 23, 14, 236, 53, 236, 234, 231, 199, 23, 14, 47, 229, 123, 23, - 14, 47, 247, 24, 23, 14, 247, 25, 225, 116, 23, 14, 247, 25, 248, 127, - 23, 14, 235, 224, 225, 116, 23, 14, 235, 224, 248, 127, 23, 14, 229, 124, - 225, 116, 23, 14, 229, 124, 248, 127, 23, 14, 232, 77, 206, 229, 123, 23, - 14, 232, 77, 206, 247, 24, 23, 14, 251, 52, 226, 157, 23, 14, 250, 213, - 226, 157, 23, 14, 234, 15, 254, 204, 23, 14, 234, 15, 253, 22, 23, 14, - 232, 62, 254, 204, 23, 14, 232, 62, 253, 22, 23, 14, 236, 56, 231, 199, - 23, 14, 224, 119, 231, 199, 23, 14, 132, 231, 199, 23, 14, 232, 77, 231, - 199, 23, 14, 248, 17, 231, 199, 23, 14, 228, 211, 231, 199, 23, 14, 226, - 205, 231, 199, 23, 14, 228, 205, 231, 199, 23, 14, 168, 244, 136, 225, - 214, 231, 199, 23, 14, 224, 74, 234, 236, 23, 14, 79, 234, 236, 23, 14, - 251, 107, 224, 74, 234, 236, 23, 14, 37, 234, 237, 224, 121, 23, 14, 37, - 234, 237, 252, 150, 23, 14, 226, 79, 234, 237, 99, 224, 121, 23, 14, 226, - 79, 234, 237, 99, 252, 150, 23, 14, 226, 79, 234, 237, 42, 224, 121, 23, - 14, 226, 79, 234, 237, 42, 252, 150, 23, 14, 226, 79, 234, 237, 41, 224, - 121, 23, 14, 226, 79, 234, 237, 41, 252, 150, 23, 14, 226, 79, 234, 237, - 103, 224, 121, 23, 14, 226, 79, 234, 237, 103, 252, 150, 23, 14, 226, 79, - 234, 237, 99, 41, 224, 121, 23, 14, 226, 79, 234, 237, 99, 41, 252, 150, - 23, 14, 236, 85, 234, 237, 224, 121, 23, 14, 236, 85, 234, 237, 252, 150, - 23, 14, 226, 76, 234, 237, 103, 224, 121, 23, 14, 226, 76, 234, 237, 103, - 252, 150, 23, 14, 233, 181, 234, 236, 23, 14, 224, 201, 234, 236, 23, 14, - 234, 237, 252, 150, 23, 14, 234, 201, 234, 236, 23, 14, 251, 71, 234, - 237, 224, 121, 23, 14, 251, 71, 234, 237, 252, 150, 23, 14, 252, 106, 23, - 14, 224, 119, 234, 238, 23, 14, 132, 234, 238, 23, 14, 232, 77, 234, 238, - 23, 14, 248, 17, 234, 238, 23, 14, 228, 211, 234, 238, 23, 14, 226, 205, - 234, 238, 23, 14, 228, 205, 234, 238, 23, 14, 168, 244, 136, 225, 214, - 234, 238, 23, 14, 36, 228, 48, 23, 14, 36, 228, 126, 228, 48, 23, 14, 36, - 226, 85, 23, 14, 36, 226, 84, 23, 14, 36, 226, 83, 23, 14, 247, 50, 226, - 85, 23, 14, 247, 50, 226, 84, 23, 14, 247, 50, 226, 83, 23, 14, 36, 254, - 51, 249, 140, 23, 14, 36, 247, 30, 23, 14, 36, 247, 29, 23, 14, 36, 247, - 28, 23, 14, 36, 247, 27, 23, 14, 36, 247, 26, 23, 14, 252, 226, 252, 237, - 23, 14, 247, 233, 252, 237, 23, 14, 252, 226, 226, 170, 23, 14, 247, 233, - 226, 170, 23, 14, 252, 226, 228, 185, 23, 14, 247, 233, 228, 185, 23, 14, - 252, 226, 233, 76, 23, 14, 247, 233, 233, 76, 23, 14, 36, 255, 41, 23, - 14, 36, 228, 67, 23, 14, 36, 227, 18, 23, 14, 36, 228, 68, 23, 14, 36, - 237, 21, 23, 14, 36, 237, 20, 23, 14, 36, 255, 40, 23, 14, 36, 237, 118, - 23, 14, 254, 98, 225, 116, 23, 14, 254, 98, 248, 127, 23, 14, 36, 249, - 152, 23, 14, 36, 231, 138, 23, 14, 36, 247, 18, 23, 14, 36, 228, 181, 23, - 14, 36, 252, 209, 23, 14, 36, 47, 226, 110, 23, 14, 36, 226, 66, 226, - 110, 23, 14, 231, 141, 23, 14, 228, 2, 23, 14, 223, 119, 23, 14, 233, 68, - 23, 14, 236, 192, 23, 14, 246, 247, 23, 14, 250, 249, 23, 14, 250, 68, - 23, 14, 245, 247, 234, 239, 228, 194, 23, 14, 245, 247, 234, 239, 235, 7, - 228, 194, 23, 14, 226, 96, 23, 14, 225, 233, 23, 14, 239, 223, 225, 233, - 23, 14, 225, 234, 228, 194, 23, 14, 225, 234, 225, 116, 23, 14, 234, 26, - 228, 22, 23, 14, 234, 26, 228, 19, 23, 14, 234, 26, 228, 18, 23, 14, 234, - 26, 228, 17, 23, 14, 234, 26, 228, 16, 23, 14, 234, 26, 228, 15, 23, 14, - 234, 26, 228, 14, 23, 14, 234, 26, 228, 13, 23, 14, 234, 26, 228, 12, 23, - 14, 234, 26, 228, 21, 23, 14, 234, 26, 228, 20, 23, 14, 245, 128, 23, 14, - 235, 161, 23, 14, 247, 233, 106, 228, 42, 23, 14, 250, 62, 228, 194, 23, - 14, 36, 103, 252, 121, 23, 14, 36, 99, 252, 121, 23, 14, 36, 245, 137, - 23, 14, 36, 228, 175, 233, 25, 23, 14, 233, 148, 76, 23, 14, 233, 148, - 99, 76, 23, 14, 132, 233, 148, 76, 23, 14, 246, 17, 225, 116, 23, 14, - 246, 17, 248, 127, 23, 14, 2, 247, 49, 23, 14, 250, 152, 23, 14, 250, - 153, 254, 216, 23, 14, 236, 253, 23, 14, 237, 126, 23, 14, 252, 103, 23, - 14, 229, 190, 224, 121, 23, 14, 229, 190, 252, 150, 23, 14, 236, 123, 23, - 14, 236, 124, 252, 150, 23, 14, 229, 184, 224, 121, 23, 14, 229, 184, - 252, 150, 23, 14, 246, 210, 224, 121, 23, 14, 246, 210, 252, 150, 23, 14, - 237, 127, 233, 121, 231, 199, 23, 14, 237, 127, 240, 20, 231, 199, 23, - 14, 252, 104, 231, 199, 23, 14, 229, 190, 231, 199, 23, 14, 236, 124, - 231, 199, 23, 14, 229, 184, 231, 199, 23, 14, 227, 25, 233, 119, 250, - 230, 232, 195, 233, 120, 23, 14, 227, 25, 233, 119, 250, 230, 232, 195, - 240, 19, 23, 14, 227, 25, 233, 119, 250, 230, 232, 195, 233, 121, 249, - 215, 23, 14, 227, 25, 240, 18, 250, 230, 232, 195, 233, 120, 23, 14, 227, - 25, 240, 18, 250, 230, 232, 195, 240, 19, 23, 14, 227, 25, 240, 18, 250, - 230, 232, 195, 240, 20, 249, 215, 23, 14, 227, 25, 240, 18, 250, 230, - 232, 195, 240, 20, 249, 214, 23, 14, 227, 25, 240, 18, 250, 230, 232, - 195, 240, 20, 249, 213, 23, 14, 250, 246, 23, 14, 245, 227, 252, 45, 251, - 92, 23, 14, 245, 227, 247, 131, 251, 92, 23, 14, 37, 254, 27, 23, 14, - 224, 215, 23, 14, 233, 2, 23, 14, 251, 85, 23, 14, 230, 226, 23, 14, 251, - 87, 23, 14, 226, 101, 23, 14, 232, 240, 23, 14, 232, 241, 247, 20, 23, - 14, 230, 227, 247, 20, 23, 14, 226, 102, 231, 198, 23, 14, 233, 109, 227, - 254, 19, 224, 205, 150, 227, 182, 19, 224, 205, 150, 227, 171, 19, 224, - 205, 150, 227, 161, 19, 224, 205, 150, 227, 154, 19, 224, 205, 150, 227, - 146, 19, 224, 205, 150, 227, 140, 19, 224, 205, 150, 227, 139, 19, 224, - 205, 150, 227, 138, 19, 224, 205, 150, 227, 137, 19, 224, 205, 150, 227, - 181, 19, 224, 205, 150, 227, 180, 19, 224, 205, 150, 227, 179, 19, 224, - 205, 150, 227, 178, 19, 224, 205, 150, 227, 177, 19, 224, 205, 150, 227, - 176, 19, 224, 205, 150, 227, 175, 19, 224, 205, 150, 227, 174, 19, 224, - 205, 150, 227, 173, 19, 224, 205, 150, 227, 172, 19, 224, 205, 150, 227, - 170, 19, 224, 205, 150, 227, 169, 19, 224, 205, 150, 227, 168, 19, 224, - 205, 150, 227, 167, 19, 224, 205, 150, 227, 166, 19, 224, 205, 150, 227, - 145, 19, 224, 205, 150, 227, 144, 19, 224, 205, 150, 227, 143, 19, 224, - 205, 150, 227, 142, 19, 224, 205, 150, 227, 141, 19, 239, 242, 150, 227, - 182, 19, 239, 242, 150, 227, 171, 19, 239, 242, 150, 227, 154, 19, 239, - 242, 150, 227, 146, 19, 239, 242, 150, 227, 139, 19, 239, 242, 150, 227, - 138, 19, 239, 242, 150, 227, 180, 19, 239, 242, 150, 227, 179, 19, 239, - 242, 150, 227, 178, 19, 239, 242, 150, 227, 177, 19, 239, 242, 150, 227, - 174, 19, 239, 242, 150, 227, 173, 19, 239, 242, 150, 227, 172, 19, 239, - 242, 150, 227, 167, 19, 239, 242, 150, 227, 166, 19, 239, 242, 150, 227, - 165, 19, 239, 242, 150, 227, 164, 19, 239, 242, 150, 227, 163, 19, 239, - 242, 150, 227, 162, 19, 239, 242, 150, 227, 160, 19, 239, 242, 150, 227, - 159, 19, 239, 242, 150, 227, 158, 19, 239, 242, 150, 227, 157, 19, 239, - 242, 150, 227, 156, 19, 239, 242, 150, 227, 155, 19, 239, 242, 150, 227, - 153, 19, 239, 242, 150, 227, 152, 19, 239, 242, 150, 227, 151, 19, 239, - 242, 150, 227, 150, 19, 239, 242, 150, 227, 149, 19, 239, 242, 150, 227, - 148, 19, 239, 242, 150, 227, 147, 19, 239, 242, 150, 227, 145, 19, 239, - 242, 150, 227, 144, 19, 239, 242, 150, 227, 143, 19, 239, 242, 150, 227, - 142, 19, 239, 242, 150, 227, 141, 36, 19, 23, 226, 63, 36, 19, 23, 227, - 3, 36, 19, 23, 233, 128, 19, 23, 237, 224, 236, 92, 32, 248, 48, 249, - 227, 32, 245, 111, 248, 48, 249, 227, 32, 244, 139, 248, 48, 249, 227, - 32, 248, 47, 245, 112, 249, 227, 32, 248, 47, 244, 138, 249, 227, 32, - 248, 48, 142, 32, 251, 218, 142, 32, 246, 218, 251, 106, 142, 32, 236, - 116, 142, 32, 253, 27, 142, 32, 239, 0, 228, 184, 142, 32, 251, 19, 142, - 32, 254, 82, 142, 32, 234, 34, 142, 32, 252, 111, 234, 10, 142, 32, 250, - 64, 145, 249, 191, 142, 32, 249, 188, 142, 32, 223, 167, 142, 32, 240, - 12, 142, 32, 233, 133, 142, 32, 231, 243, 142, 32, 251, 29, 142, 32, 244, - 222, 253, 66, 142, 32, 224, 168, 142, 32, 247, 6, 142, 32, 255, 21, 142, - 32, 231, 219, 142, 32, 231, 203, 142, 32, 248, 46, 142, 32, 239, 103, - 142, 32, 251, 24, 142, 32, 247, 232, 142, 32, 248, 83, 142, 32, 251, 194, - 142, 32, 250, 70, 142, 32, 18, 231, 202, 142, 32, 233, 236, 142, 32, 237, - 227, 142, 32, 251, 80, 142, 32, 238, 188, 142, 32, 246, 151, 142, 32, - 228, 28, 142, 32, 232, 163, 142, 32, 246, 217, 142, 32, 231, 204, 142, - 32, 237, 253, 145, 236, 101, 142, 32, 231, 200, 142, 32, 246, 7, 180, - 236, 223, 142, 32, 247, 234, 142, 32, 228, 35, 142, 32, 245, 229, 142, - 32, 247, 227, 142, 32, 233, 162, 142, 32, 231, 132, 142, 32, 247, 19, - 142, 32, 225, 50, 145, 224, 155, 142, 32, 251, 32, 142, 32, 236, 233, - 142, 32, 247, 170, 142, 32, 225, 124, 142, 32, 249, 216, 142, 32, 251, - 82, 236, 72, 142, 32, 245, 214, 142, 32, 246, 152, 240, 16, 142, 32, 237, - 4, 142, 32, 255, 38, 142, 32, 247, 245, 142, 32, 248, 129, 142, 32, 224, - 153, 142, 32, 228, 238, 142, 32, 239, 248, 142, 32, 250, 37, 142, 32, - 250, 134, 142, 32, 249, 212, 142, 32, 247, 147, 142, 32, 229, 158, 142, - 32, 228, 37, 142, 32, 245, 139, 142, 32, 251, 48, 142, 32, 251, 78, 142, - 32, 247, 114, 142, 32, 255, 5, 142, 32, 251, 47, 142, 32, 234, 62, 226, - 240, 225, 33, 142, 32, 249, 235, 142, 32, 238, 36, 142, 32, 246, 244, - 250, 255, 231, 116, 225, 126, 21, 118, 250, 255, 231, 116, 225, 126, 21, - 113, 250, 255, 231, 116, 225, 126, 21, 166, 250, 255, 231, 116, 225, 126, - 21, 158, 250, 255, 231, 116, 225, 126, 21, 173, 250, 255, 231, 116, 225, - 126, 21, 183, 250, 255, 231, 116, 225, 126, 21, 194, 250, 255, 231, 116, - 225, 126, 21, 187, 250, 255, 231, 116, 225, 126, 21, 192, 250, 255, 231, - 116, 227, 22, 21, 118, 250, 255, 231, 116, 227, 22, 21, 113, 250, 255, - 231, 116, 227, 22, 21, 166, 250, 255, 231, 116, 227, 22, 21, 158, 250, - 255, 231, 116, 227, 22, 21, 173, 250, 255, 231, 116, 227, 22, 21, 183, - 250, 255, 231, 116, 227, 22, 21, 194, 250, 255, 231, 116, 227, 22, 21, - 187, 250, 255, 231, 116, 227, 22, 21, 192, 12, 18, 6, 57, 12, 18, 6, 254, - 27, 12, 18, 6, 252, 44, 12, 18, 6, 222, 222, 12, 18, 6, 72, 12, 18, 6, - 247, 130, 12, 18, 6, 214, 12, 18, 6, 212, 12, 18, 6, 74, 12, 18, 6, 239, - 182, 12, 18, 6, 239, 76, 12, 18, 6, 149, 12, 18, 6, 185, 12, 18, 6, 199, - 12, 18, 6, 73, 12, 18, 6, 233, 244, 12, 18, 6, 232, 139, 12, 18, 6, 146, - 12, 18, 6, 193, 12, 18, 6, 227, 109, 12, 18, 6, 66, 12, 18, 6, 196, 12, - 18, 6, 224, 174, 12, 18, 6, 224, 73, 12, 18, 6, 224, 25, 12, 18, 6, 223, - 119, 12, 18, 3, 57, 12, 18, 3, 254, 27, 12, 18, 3, 252, 44, 12, 18, 3, - 222, 222, 12, 18, 3, 72, 12, 18, 3, 247, 130, 12, 18, 3, 214, 12, 18, 3, - 212, 12, 18, 3, 74, 12, 18, 3, 239, 182, 12, 18, 3, 239, 76, 12, 18, 3, - 149, 12, 18, 3, 185, 12, 18, 3, 199, 12, 18, 3, 73, 12, 18, 3, 233, 244, - 12, 18, 3, 232, 139, 12, 18, 3, 146, 12, 18, 3, 193, 12, 18, 3, 227, 109, - 12, 18, 3, 66, 12, 18, 3, 196, 12, 18, 3, 224, 174, 12, 18, 3, 224, 73, - 12, 18, 3, 224, 25, 12, 18, 3, 223, 119, 12, 27, 6, 57, 12, 27, 6, 254, - 27, 12, 27, 6, 252, 44, 12, 27, 6, 222, 222, 12, 27, 6, 72, 12, 27, 6, - 247, 130, 12, 27, 6, 214, 12, 27, 6, 212, 12, 27, 6, 74, 12, 27, 6, 239, - 182, 12, 27, 6, 239, 76, 12, 27, 6, 149, 12, 27, 6, 185, 12, 27, 6, 199, - 12, 27, 6, 73, 12, 27, 6, 233, 244, 12, 27, 6, 232, 139, 12, 27, 6, 146, - 12, 27, 6, 193, 12, 27, 6, 227, 109, 12, 27, 6, 66, 12, 27, 6, 196, 12, - 27, 6, 224, 174, 12, 27, 6, 224, 73, 12, 27, 6, 224, 25, 12, 27, 6, 223, - 119, 12, 27, 3, 57, 12, 27, 3, 254, 27, 12, 27, 3, 252, 44, 12, 27, 3, - 222, 222, 12, 27, 3, 72, 12, 27, 3, 247, 130, 12, 27, 3, 214, 12, 27, 3, - 74, 12, 27, 3, 239, 182, 12, 27, 3, 239, 76, 12, 27, 3, 149, 12, 27, 3, - 185, 12, 27, 3, 199, 12, 27, 3, 73, 12, 27, 3, 233, 244, 12, 27, 3, 232, - 139, 12, 27, 3, 146, 12, 27, 3, 193, 12, 27, 3, 227, 109, 12, 27, 3, 66, - 12, 27, 3, 196, 12, 27, 3, 224, 174, 12, 27, 3, 224, 73, 12, 27, 3, 224, - 25, 12, 27, 3, 223, 119, 12, 18, 27, 6, 57, 12, 18, 27, 6, 254, 27, 12, - 18, 27, 6, 252, 44, 12, 18, 27, 6, 222, 222, 12, 18, 27, 6, 72, 12, 18, - 27, 6, 247, 130, 12, 18, 27, 6, 214, 12, 18, 27, 6, 212, 12, 18, 27, 6, - 74, 12, 18, 27, 6, 239, 182, 12, 18, 27, 6, 239, 76, 12, 18, 27, 6, 149, - 12, 18, 27, 6, 185, 12, 18, 27, 6, 199, 12, 18, 27, 6, 73, 12, 18, 27, 6, - 233, 244, 12, 18, 27, 6, 232, 139, 12, 18, 27, 6, 146, 12, 18, 27, 6, - 193, 12, 18, 27, 6, 227, 109, 12, 18, 27, 6, 66, 12, 18, 27, 6, 196, 12, - 18, 27, 6, 224, 174, 12, 18, 27, 6, 224, 73, 12, 18, 27, 6, 224, 25, 12, - 18, 27, 6, 223, 119, 12, 18, 27, 3, 57, 12, 18, 27, 3, 254, 27, 12, 18, - 27, 3, 252, 44, 12, 18, 27, 3, 222, 222, 12, 18, 27, 3, 72, 12, 18, 27, - 3, 247, 130, 12, 18, 27, 3, 214, 12, 18, 27, 3, 212, 12, 18, 27, 3, 74, - 12, 18, 27, 3, 239, 182, 12, 18, 27, 3, 239, 76, 12, 18, 27, 3, 149, 12, - 18, 27, 3, 185, 12, 18, 27, 3, 199, 12, 18, 27, 3, 73, 12, 18, 27, 3, - 233, 244, 12, 18, 27, 3, 232, 139, 12, 18, 27, 3, 146, 12, 18, 27, 3, - 193, 12, 18, 27, 3, 227, 109, 12, 18, 27, 3, 66, 12, 18, 27, 3, 196, 12, - 18, 27, 3, 224, 174, 12, 18, 27, 3, 224, 73, 12, 18, 27, 3, 224, 25, 12, - 18, 27, 3, 223, 119, 12, 95, 6, 57, 12, 95, 6, 252, 44, 12, 95, 6, 222, - 222, 12, 95, 6, 214, 12, 95, 6, 239, 182, 12, 95, 6, 239, 76, 12, 95, 6, - 199, 12, 95, 6, 73, 12, 95, 6, 233, 244, 12, 95, 6, 232, 139, 12, 95, 6, - 193, 12, 95, 6, 227, 109, 12, 95, 6, 66, 12, 95, 6, 196, 12, 95, 6, 224, - 174, 12, 95, 6, 224, 73, 12, 95, 6, 224, 25, 12, 95, 6, 223, 119, 12, 95, - 3, 57, 12, 95, 3, 254, 27, 12, 95, 3, 252, 44, 12, 95, 3, 222, 222, 12, - 95, 3, 247, 130, 12, 95, 3, 212, 12, 95, 3, 74, 12, 95, 3, 239, 182, 12, - 95, 3, 239, 76, 12, 95, 3, 149, 12, 95, 3, 185, 12, 95, 3, 199, 12, 95, - 3, 233, 244, 12, 95, 3, 232, 139, 12, 95, 3, 146, 12, 95, 3, 193, 12, 95, - 3, 227, 109, 12, 95, 3, 66, 12, 95, 3, 196, 12, 95, 3, 224, 174, 12, 95, - 3, 224, 73, 12, 95, 3, 224, 25, 12, 95, 3, 223, 119, 12, 18, 95, 6, 57, - 12, 18, 95, 6, 254, 27, 12, 18, 95, 6, 252, 44, 12, 18, 95, 6, 222, 222, - 12, 18, 95, 6, 72, 12, 18, 95, 6, 247, 130, 12, 18, 95, 6, 214, 12, 18, - 95, 6, 212, 12, 18, 95, 6, 74, 12, 18, 95, 6, 239, 182, 12, 18, 95, 6, - 239, 76, 12, 18, 95, 6, 149, 12, 18, 95, 6, 185, 12, 18, 95, 6, 199, 12, - 18, 95, 6, 73, 12, 18, 95, 6, 233, 244, 12, 18, 95, 6, 232, 139, 12, 18, - 95, 6, 146, 12, 18, 95, 6, 193, 12, 18, 95, 6, 227, 109, 12, 18, 95, 6, - 66, 12, 18, 95, 6, 196, 12, 18, 95, 6, 224, 174, 12, 18, 95, 6, 224, 73, - 12, 18, 95, 6, 224, 25, 12, 18, 95, 6, 223, 119, 12, 18, 95, 3, 57, 12, - 18, 95, 3, 254, 27, 12, 18, 95, 3, 252, 44, 12, 18, 95, 3, 222, 222, 12, - 18, 95, 3, 72, 12, 18, 95, 3, 247, 130, 12, 18, 95, 3, 214, 12, 18, 95, - 3, 212, 12, 18, 95, 3, 74, 12, 18, 95, 3, 239, 182, 12, 18, 95, 3, 239, - 76, 12, 18, 95, 3, 149, 12, 18, 95, 3, 185, 12, 18, 95, 3, 199, 12, 18, - 95, 3, 73, 12, 18, 95, 3, 233, 244, 12, 18, 95, 3, 232, 139, 12, 18, 95, - 3, 146, 12, 18, 95, 3, 193, 12, 18, 95, 3, 227, 109, 12, 18, 95, 3, 66, - 12, 18, 95, 3, 196, 12, 18, 95, 3, 224, 174, 12, 18, 95, 3, 224, 73, 12, - 18, 95, 3, 224, 25, 12, 18, 95, 3, 223, 119, 12, 110, 6, 57, 12, 110, 6, - 254, 27, 12, 110, 6, 222, 222, 12, 110, 6, 72, 12, 110, 6, 247, 130, 12, - 110, 6, 214, 12, 110, 6, 239, 182, 12, 110, 6, 239, 76, 12, 110, 6, 149, - 12, 110, 6, 185, 12, 110, 6, 199, 12, 110, 6, 73, 12, 110, 6, 233, 244, - 12, 110, 6, 232, 139, 12, 110, 6, 193, 12, 110, 6, 227, 109, 12, 110, 6, - 66, 12, 110, 6, 196, 12, 110, 6, 224, 174, 12, 110, 6, 224, 73, 12, 110, - 6, 224, 25, 12, 110, 3, 57, 12, 110, 3, 254, 27, 12, 110, 3, 252, 44, 12, - 110, 3, 222, 222, 12, 110, 3, 72, 12, 110, 3, 247, 130, 12, 110, 3, 214, - 12, 110, 3, 212, 12, 110, 3, 74, 12, 110, 3, 239, 182, 12, 110, 3, 239, - 76, 12, 110, 3, 149, 12, 110, 3, 185, 12, 110, 3, 199, 12, 110, 3, 73, - 12, 110, 3, 233, 244, 12, 110, 3, 232, 139, 12, 110, 3, 146, 12, 110, 3, - 193, 12, 110, 3, 227, 109, 12, 110, 3, 66, 12, 110, 3, 196, 12, 110, 3, - 224, 174, 12, 110, 3, 224, 73, 12, 110, 3, 224, 25, 12, 110, 3, 223, 119, - 12, 159, 6, 57, 12, 159, 6, 254, 27, 12, 159, 6, 222, 222, 12, 159, 6, - 72, 12, 159, 6, 247, 130, 12, 159, 6, 214, 12, 159, 6, 74, 12, 159, 6, - 239, 182, 12, 159, 6, 239, 76, 12, 159, 6, 149, 12, 159, 6, 185, 12, 159, - 6, 73, 12, 159, 6, 193, 12, 159, 6, 227, 109, 12, 159, 6, 66, 12, 159, 6, - 196, 12, 159, 6, 224, 174, 12, 159, 6, 224, 73, 12, 159, 6, 224, 25, 12, - 159, 3, 57, 12, 159, 3, 254, 27, 12, 159, 3, 252, 44, 12, 159, 3, 222, - 222, 12, 159, 3, 72, 12, 159, 3, 247, 130, 12, 159, 3, 214, 12, 159, 3, - 212, 12, 159, 3, 74, 12, 159, 3, 239, 182, 12, 159, 3, 239, 76, 12, 159, - 3, 149, 12, 159, 3, 185, 12, 159, 3, 199, 12, 159, 3, 73, 12, 159, 3, - 233, 244, 12, 159, 3, 232, 139, 12, 159, 3, 146, 12, 159, 3, 193, 12, - 159, 3, 227, 109, 12, 159, 3, 66, 12, 159, 3, 196, 12, 159, 3, 224, 174, - 12, 159, 3, 224, 73, 12, 159, 3, 224, 25, 12, 159, 3, 223, 119, 12, 18, - 110, 6, 57, 12, 18, 110, 6, 254, 27, 12, 18, 110, 6, 252, 44, 12, 18, - 110, 6, 222, 222, 12, 18, 110, 6, 72, 12, 18, 110, 6, 247, 130, 12, 18, - 110, 6, 214, 12, 18, 110, 6, 212, 12, 18, 110, 6, 74, 12, 18, 110, 6, - 239, 182, 12, 18, 110, 6, 239, 76, 12, 18, 110, 6, 149, 12, 18, 110, 6, - 185, 12, 18, 110, 6, 199, 12, 18, 110, 6, 73, 12, 18, 110, 6, 233, 244, - 12, 18, 110, 6, 232, 139, 12, 18, 110, 6, 146, 12, 18, 110, 6, 193, 12, - 18, 110, 6, 227, 109, 12, 18, 110, 6, 66, 12, 18, 110, 6, 196, 12, 18, - 110, 6, 224, 174, 12, 18, 110, 6, 224, 73, 12, 18, 110, 6, 224, 25, 12, - 18, 110, 6, 223, 119, 12, 18, 110, 3, 57, 12, 18, 110, 3, 254, 27, 12, - 18, 110, 3, 252, 44, 12, 18, 110, 3, 222, 222, 12, 18, 110, 3, 72, 12, - 18, 110, 3, 247, 130, 12, 18, 110, 3, 214, 12, 18, 110, 3, 212, 12, 18, - 110, 3, 74, 12, 18, 110, 3, 239, 182, 12, 18, 110, 3, 239, 76, 12, 18, - 110, 3, 149, 12, 18, 110, 3, 185, 12, 18, 110, 3, 199, 12, 18, 110, 3, - 73, 12, 18, 110, 3, 233, 244, 12, 18, 110, 3, 232, 139, 12, 18, 110, 3, - 146, 12, 18, 110, 3, 193, 12, 18, 110, 3, 227, 109, 12, 18, 110, 3, 66, - 12, 18, 110, 3, 196, 12, 18, 110, 3, 224, 174, 12, 18, 110, 3, 224, 73, - 12, 18, 110, 3, 224, 25, 12, 18, 110, 3, 223, 119, 12, 30, 6, 57, 12, 30, - 6, 254, 27, 12, 30, 6, 252, 44, 12, 30, 6, 222, 222, 12, 30, 6, 72, 12, - 30, 6, 247, 130, 12, 30, 6, 214, 12, 30, 6, 212, 12, 30, 6, 74, 12, 30, - 6, 239, 182, 12, 30, 6, 239, 76, 12, 30, 6, 149, 12, 30, 6, 185, 12, 30, - 6, 199, 12, 30, 6, 73, 12, 30, 6, 233, 244, 12, 30, 6, 232, 139, 12, 30, - 6, 146, 12, 30, 6, 193, 12, 30, 6, 227, 109, 12, 30, 6, 66, 12, 30, 6, - 196, 12, 30, 6, 224, 174, 12, 30, 6, 224, 73, 12, 30, 6, 224, 25, 12, 30, - 6, 223, 119, 12, 30, 3, 57, 12, 30, 3, 254, 27, 12, 30, 3, 252, 44, 12, - 30, 3, 222, 222, 12, 30, 3, 72, 12, 30, 3, 247, 130, 12, 30, 3, 214, 12, - 30, 3, 212, 12, 30, 3, 74, 12, 30, 3, 239, 182, 12, 30, 3, 239, 76, 12, - 30, 3, 149, 12, 30, 3, 185, 12, 30, 3, 199, 12, 30, 3, 73, 12, 30, 3, - 233, 244, 12, 30, 3, 232, 139, 12, 30, 3, 146, 12, 30, 3, 193, 12, 30, 3, - 227, 109, 12, 30, 3, 66, 12, 30, 3, 196, 12, 30, 3, 224, 174, 12, 30, 3, - 224, 73, 12, 30, 3, 224, 25, 12, 30, 3, 223, 119, 12, 30, 18, 6, 57, 12, - 30, 18, 6, 254, 27, 12, 30, 18, 6, 252, 44, 12, 30, 18, 6, 222, 222, 12, - 30, 18, 6, 72, 12, 30, 18, 6, 247, 130, 12, 30, 18, 6, 214, 12, 30, 18, - 6, 212, 12, 30, 18, 6, 74, 12, 30, 18, 6, 239, 182, 12, 30, 18, 6, 239, - 76, 12, 30, 18, 6, 149, 12, 30, 18, 6, 185, 12, 30, 18, 6, 199, 12, 30, - 18, 6, 73, 12, 30, 18, 6, 233, 244, 12, 30, 18, 6, 232, 139, 12, 30, 18, - 6, 146, 12, 30, 18, 6, 193, 12, 30, 18, 6, 227, 109, 12, 30, 18, 6, 66, - 12, 30, 18, 6, 196, 12, 30, 18, 6, 224, 174, 12, 30, 18, 6, 224, 73, 12, - 30, 18, 6, 224, 25, 12, 30, 18, 6, 223, 119, 12, 30, 18, 3, 57, 12, 30, - 18, 3, 254, 27, 12, 30, 18, 3, 252, 44, 12, 30, 18, 3, 222, 222, 12, 30, - 18, 3, 72, 12, 30, 18, 3, 247, 130, 12, 30, 18, 3, 214, 12, 30, 18, 3, - 212, 12, 30, 18, 3, 74, 12, 30, 18, 3, 239, 182, 12, 30, 18, 3, 239, 76, - 12, 30, 18, 3, 149, 12, 30, 18, 3, 185, 12, 30, 18, 3, 199, 12, 30, 18, - 3, 73, 12, 30, 18, 3, 233, 244, 12, 30, 18, 3, 232, 139, 12, 30, 18, 3, - 146, 12, 30, 18, 3, 193, 12, 30, 18, 3, 227, 109, 12, 30, 18, 3, 66, 12, - 30, 18, 3, 196, 12, 30, 18, 3, 224, 174, 12, 30, 18, 3, 224, 73, 12, 30, - 18, 3, 224, 25, 12, 30, 18, 3, 223, 119, 12, 30, 27, 6, 57, 12, 30, 27, - 6, 254, 27, 12, 30, 27, 6, 252, 44, 12, 30, 27, 6, 222, 222, 12, 30, 27, - 6, 72, 12, 30, 27, 6, 247, 130, 12, 30, 27, 6, 214, 12, 30, 27, 6, 212, - 12, 30, 27, 6, 74, 12, 30, 27, 6, 239, 182, 12, 30, 27, 6, 239, 76, 12, - 30, 27, 6, 149, 12, 30, 27, 6, 185, 12, 30, 27, 6, 199, 12, 30, 27, 6, - 73, 12, 30, 27, 6, 233, 244, 12, 30, 27, 6, 232, 139, 12, 30, 27, 6, 146, - 12, 30, 27, 6, 193, 12, 30, 27, 6, 227, 109, 12, 30, 27, 6, 66, 12, 30, - 27, 6, 196, 12, 30, 27, 6, 224, 174, 12, 30, 27, 6, 224, 73, 12, 30, 27, - 6, 224, 25, 12, 30, 27, 6, 223, 119, 12, 30, 27, 3, 57, 12, 30, 27, 3, - 254, 27, 12, 30, 27, 3, 252, 44, 12, 30, 27, 3, 222, 222, 12, 30, 27, 3, - 72, 12, 30, 27, 3, 247, 130, 12, 30, 27, 3, 214, 12, 30, 27, 3, 212, 12, - 30, 27, 3, 74, 12, 30, 27, 3, 239, 182, 12, 30, 27, 3, 239, 76, 12, 30, - 27, 3, 149, 12, 30, 27, 3, 185, 12, 30, 27, 3, 199, 12, 30, 27, 3, 73, - 12, 30, 27, 3, 233, 244, 12, 30, 27, 3, 232, 139, 12, 30, 27, 3, 146, 12, - 30, 27, 3, 193, 12, 30, 27, 3, 227, 109, 12, 30, 27, 3, 66, 12, 30, 27, - 3, 196, 12, 30, 27, 3, 224, 174, 12, 30, 27, 3, 224, 73, 12, 30, 27, 3, - 224, 25, 12, 30, 27, 3, 223, 119, 12, 30, 18, 27, 6, 57, 12, 30, 18, 27, - 6, 254, 27, 12, 30, 18, 27, 6, 252, 44, 12, 30, 18, 27, 6, 222, 222, 12, - 30, 18, 27, 6, 72, 12, 30, 18, 27, 6, 247, 130, 12, 30, 18, 27, 6, 214, - 12, 30, 18, 27, 6, 212, 12, 30, 18, 27, 6, 74, 12, 30, 18, 27, 6, 239, - 182, 12, 30, 18, 27, 6, 239, 76, 12, 30, 18, 27, 6, 149, 12, 30, 18, 27, - 6, 185, 12, 30, 18, 27, 6, 199, 12, 30, 18, 27, 6, 73, 12, 30, 18, 27, 6, - 233, 244, 12, 30, 18, 27, 6, 232, 139, 12, 30, 18, 27, 6, 146, 12, 30, - 18, 27, 6, 193, 12, 30, 18, 27, 6, 227, 109, 12, 30, 18, 27, 6, 66, 12, - 30, 18, 27, 6, 196, 12, 30, 18, 27, 6, 224, 174, 12, 30, 18, 27, 6, 224, - 73, 12, 30, 18, 27, 6, 224, 25, 12, 30, 18, 27, 6, 223, 119, 12, 30, 18, - 27, 3, 57, 12, 30, 18, 27, 3, 254, 27, 12, 30, 18, 27, 3, 252, 44, 12, - 30, 18, 27, 3, 222, 222, 12, 30, 18, 27, 3, 72, 12, 30, 18, 27, 3, 247, - 130, 12, 30, 18, 27, 3, 214, 12, 30, 18, 27, 3, 212, 12, 30, 18, 27, 3, - 74, 12, 30, 18, 27, 3, 239, 182, 12, 30, 18, 27, 3, 239, 76, 12, 30, 18, - 27, 3, 149, 12, 30, 18, 27, 3, 185, 12, 30, 18, 27, 3, 199, 12, 30, 18, - 27, 3, 73, 12, 30, 18, 27, 3, 233, 244, 12, 30, 18, 27, 3, 232, 139, 12, - 30, 18, 27, 3, 146, 12, 30, 18, 27, 3, 193, 12, 30, 18, 27, 3, 227, 109, - 12, 30, 18, 27, 3, 66, 12, 30, 18, 27, 3, 196, 12, 30, 18, 27, 3, 224, - 174, 12, 30, 18, 27, 3, 224, 73, 12, 30, 18, 27, 3, 224, 25, 12, 30, 18, - 27, 3, 223, 119, 12, 189, 6, 57, 12, 189, 6, 254, 27, 12, 189, 6, 252, - 44, 12, 189, 6, 222, 222, 12, 189, 6, 72, 12, 189, 6, 247, 130, 12, 189, - 6, 214, 12, 189, 6, 212, 12, 189, 6, 74, 12, 189, 6, 239, 182, 12, 189, - 6, 239, 76, 12, 189, 6, 149, 12, 189, 6, 185, 12, 189, 6, 199, 12, 189, - 6, 73, 12, 189, 6, 233, 244, 12, 189, 6, 232, 139, 12, 189, 6, 146, 12, - 189, 6, 193, 12, 189, 6, 227, 109, 12, 189, 6, 66, 12, 189, 6, 196, 12, - 189, 6, 224, 174, 12, 189, 6, 224, 73, 12, 189, 6, 224, 25, 12, 189, 6, - 223, 119, 12, 189, 3, 57, 12, 189, 3, 254, 27, 12, 189, 3, 252, 44, 12, - 189, 3, 222, 222, 12, 189, 3, 72, 12, 189, 3, 247, 130, 12, 189, 3, 214, - 12, 189, 3, 212, 12, 189, 3, 74, 12, 189, 3, 239, 182, 12, 189, 3, 239, - 76, 12, 189, 3, 149, 12, 189, 3, 185, 12, 189, 3, 199, 12, 189, 3, 73, - 12, 189, 3, 233, 244, 12, 189, 3, 232, 139, 12, 189, 3, 146, 12, 189, 3, - 193, 12, 189, 3, 227, 109, 12, 189, 3, 66, 12, 189, 3, 196, 12, 189, 3, - 224, 174, 12, 189, 3, 224, 73, 12, 189, 3, 224, 25, 12, 189, 3, 223, 119, - 12, 27, 3, 249, 139, 74, 12, 27, 3, 249, 139, 239, 182, 12, 18, 6, 254, - 205, 12, 18, 6, 252, 198, 12, 18, 6, 246, 169, 12, 18, 6, 250, 47, 12, - 18, 6, 247, 206, 12, 18, 6, 223, 88, 12, 18, 6, 247, 171, 12, 18, 6, 226, - 223, 12, 18, 6, 239, 215, 12, 18, 6, 239, 35, 12, 18, 6, 238, 16, 12, 18, - 6, 236, 66, 12, 18, 6, 234, 206, 12, 18, 6, 224, 64, 12, 18, 6, 234, 64, - 12, 18, 6, 233, 69, 12, 18, 6, 231, 182, 12, 18, 6, 226, 224, 98, 12, 18, - 6, 229, 2, 12, 18, 6, 227, 61, 12, 18, 6, 225, 110, 12, 18, 6, 233, 87, - 12, 18, 6, 251, 169, 12, 18, 6, 232, 183, 12, 18, 6, 234, 66, 12, 18, - 235, 250, 12, 18, 3, 254, 205, 12, 18, 3, 252, 198, 12, 18, 3, 246, 169, - 12, 18, 3, 250, 47, 12, 18, 3, 247, 206, 12, 18, 3, 223, 88, 12, 18, 3, - 247, 171, 12, 18, 3, 226, 223, 12, 18, 3, 239, 215, 12, 18, 3, 239, 35, - 12, 18, 3, 238, 16, 12, 18, 3, 236, 66, 12, 18, 3, 234, 206, 12, 18, 3, - 224, 64, 12, 18, 3, 234, 64, 12, 18, 3, 233, 69, 12, 18, 3, 231, 182, 12, - 18, 3, 35, 229, 2, 12, 18, 3, 229, 2, 12, 18, 3, 227, 61, 12, 18, 3, 225, - 110, 12, 18, 3, 233, 87, 12, 18, 3, 251, 169, 12, 18, 3, 232, 183, 12, - 18, 3, 234, 66, 12, 18, 233, 175, 249, 236, 12, 18, 247, 207, 98, 12, 18, - 226, 224, 98, 12, 18, 239, 36, 98, 12, 18, 233, 88, 98, 12, 18, 231, 183, - 98, 12, 18, 233, 70, 98, 12, 27, 6, 254, 205, 12, 27, 6, 252, 198, 12, - 27, 6, 246, 169, 12, 27, 6, 250, 47, 12, 27, 6, 247, 206, 12, 27, 6, 223, - 88, 12, 27, 6, 247, 171, 12, 27, 6, 226, 223, 12, 27, 6, 239, 215, 12, - 27, 6, 239, 35, 12, 27, 6, 238, 16, 12, 27, 6, 236, 66, 12, 27, 6, 234, - 206, 12, 27, 6, 224, 64, 12, 27, 6, 234, 64, 12, 27, 6, 233, 69, 12, 27, - 6, 231, 182, 12, 27, 6, 226, 224, 98, 12, 27, 6, 229, 2, 12, 27, 6, 227, - 61, 12, 27, 6, 225, 110, 12, 27, 6, 233, 87, 12, 27, 6, 251, 169, 12, 27, - 6, 232, 183, 12, 27, 6, 234, 66, 12, 27, 235, 250, 12, 27, 3, 254, 205, - 12, 27, 3, 252, 198, 12, 27, 3, 246, 169, 12, 27, 3, 250, 47, 12, 27, 3, - 247, 206, 12, 27, 3, 223, 88, 12, 27, 3, 247, 171, 12, 27, 3, 226, 223, - 12, 27, 3, 239, 215, 12, 27, 3, 239, 35, 12, 27, 3, 238, 16, 12, 27, 3, - 236, 66, 12, 27, 3, 234, 206, 12, 27, 3, 224, 64, 12, 27, 3, 234, 64, 12, - 27, 3, 233, 69, 12, 27, 3, 231, 182, 12, 27, 3, 35, 229, 2, 12, 27, 3, - 229, 2, 12, 27, 3, 227, 61, 12, 27, 3, 225, 110, 12, 27, 3, 233, 87, 12, - 27, 3, 251, 169, 12, 27, 3, 232, 183, 12, 27, 3, 234, 66, 12, 27, 233, - 175, 249, 236, 12, 27, 247, 207, 98, 12, 27, 226, 224, 98, 12, 27, 239, - 36, 98, 12, 27, 233, 88, 98, 12, 27, 231, 183, 98, 12, 27, 233, 70, 98, - 12, 18, 27, 6, 254, 205, 12, 18, 27, 6, 252, 198, 12, 18, 27, 6, 246, - 169, 12, 18, 27, 6, 250, 47, 12, 18, 27, 6, 247, 206, 12, 18, 27, 6, 223, - 88, 12, 18, 27, 6, 247, 171, 12, 18, 27, 6, 226, 223, 12, 18, 27, 6, 239, - 215, 12, 18, 27, 6, 239, 35, 12, 18, 27, 6, 238, 16, 12, 18, 27, 6, 236, - 66, 12, 18, 27, 6, 234, 206, 12, 18, 27, 6, 224, 64, 12, 18, 27, 6, 234, - 64, 12, 18, 27, 6, 233, 69, 12, 18, 27, 6, 231, 182, 12, 18, 27, 6, 226, - 224, 98, 12, 18, 27, 6, 229, 2, 12, 18, 27, 6, 227, 61, 12, 18, 27, 6, - 225, 110, 12, 18, 27, 6, 233, 87, 12, 18, 27, 6, 251, 169, 12, 18, 27, 6, - 232, 183, 12, 18, 27, 6, 234, 66, 12, 18, 27, 235, 250, 12, 18, 27, 3, - 254, 205, 12, 18, 27, 3, 252, 198, 12, 18, 27, 3, 246, 169, 12, 18, 27, - 3, 250, 47, 12, 18, 27, 3, 247, 206, 12, 18, 27, 3, 223, 88, 12, 18, 27, - 3, 247, 171, 12, 18, 27, 3, 226, 223, 12, 18, 27, 3, 239, 215, 12, 18, - 27, 3, 239, 35, 12, 18, 27, 3, 238, 16, 12, 18, 27, 3, 236, 66, 12, 18, - 27, 3, 234, 206, 12, 18, 27, 3, 224, 64, 12, 18, 27, 3, 234, 64, 12, 18, - 27, 3, 233, 69, 12, 18, 27, 3, 231, 182, 12, 18, 27, 3, 35, 229, 2, 12, - 18, 27, 3, 229, 2, 12, 18, 27, 3, 227, 61, 12, 18, 27, 3, 225, 110, 12, - 18, 27, 3, 233, 87, 12, 18, 27, 3, 251, 169, 12, 18, 27, 3, 232, 183, 12, - 18, 27, 3, 234, 66, 12, 18, 27, 233, 175, 249, 236, 12, 18, 27, 247, 207, - 98, 12, 18, 27, 226, 224, 98, 12, 18, 27, 239, 36, 98, 12, 18, 27, 233, - 88, 98, 12, 18, 27, 231, 183, 98, 12, 18, 27, 233, 70, 98, 12, 30, 18, 6, - 254, 205, 12, 30, 18, 6, 252, 198, 12, 30, 18, 6, 246, 169, 12, 30, 18, - 6, 250, 47, 12, 30, 18, 6, 247, 206, 12, 30, 18, 6, 223, 88, 12, 30, 18, - 6, 247, 171, 12, 30, 18, 6, 226, 223, 12, 30, 18, 6, 239, 215, 12, 30, - 18, 6, 239, 35, 12, 30, 18, 6, 238, 16, 12, 30, 18, 6, 236, 66, 12, 30, - 18, 6, 234, 206, 12, 30, 18, 6, 224, 64, 12, 30, 18, 6, 234, 64, 12, 30, - 18, 6, 233, 69, 12, 30, 18, 6, 231, 182, 12, 30, 18, 6, 226, 224, 98, 12, - 30, 18, 6, 229, 2, 12, 30, 18, 6, 227, 61, 12, 30, 18, 6, 225, 110, 12, - 30, 18, 6, 233, 87, 12, 30, 18, 6, 251, 169, 12, 30, 18, 6, 232, 183, 12, - 30, 18, 6, 234, 66, 12, 30, 18, 235, 250, 12, 30, 18, 3, 254, 205, 12, - 30, 18, 3, 252, 198, 12, 30, 18, 3, 246, 169, 12, 30, 18, 3, 250, 47, 12, - 30, 18, 3, 247, 206, 12, 30, 18, 3, 223, 88, 12, 30, 18, 3, 247, 171, 12, - 30, 18, 3, 226, 223, 12, 30, 18, 3, 239, 215, 12, 30, 18, 3, 239, 35, 12, - 30, 18, 3, 238, 16, 12, 30, 18, 3, 236, 66, 12, 30, 18, 3, 234, 206, 12, - 30, 18, 3, 224, 64, 12, 30, 18, 3, 234, 64, 12, 30, 18, 3, 233, 69, 12, - 30, 18, 3, 231, 182, 12, 30, 18, 3, 35, 229, 2, 12, 30, 18, 3, 229, 2, - 12, 30, 18, 3, 227, 61, 12, 30, 18, 3, 225, 110, 12, 30, 18, 3, 233, 87, - 12, 30, 18, 3, 251, 169, 12, 30, 18, 3, 232, 183, 12, 30, 18, 3, 234, 66, - 12, 30, 18, 233, 175, 249, 236, 12, 30, 18, 247, 207, 98, 12, 30, 18, - 226, 224, 98, 12, 30, 18, 239, 36, 98, 12, 30, 18, 233, 88, 98, 12, 30, - 18, 231, 183, 98, 12, 30, 18, 233, 70, 98, 12, 30, 18, 27, 6, 254, 205, - 12, 30, 18, 27, 6, 252, 198, 12, 30, 18, 27, 6, 246, 169, 12, 30, 18, 27, - 6, 250, 47, 12, 30, 18, 27, 6, 247, 206, 12, 30, 18, 27, 6, 223, 88, 12, - 30, 18, 27, 6, 247, 171, 12, 30, 18, 27, 6, 226, 223, 12, 30, 18, 27, 6, - 239, 215, 12, 30, 18, 27, 6, 239, 35, 12, 30, 18, 27, 6, 238, 16, 12, 30, - 18, 27, 6, 236, 66, 12, 30, 18, 27, 6, 234, 206, 12, 30, 18, 27, 6, 224, - 64, 12, 30, 18, 27, 6, 234, 64, 12, 30, 18, 27, 6, 233, 69, 12, 30, 18, - 27, 6, 231, 182, 12, 30, 18, 27, 6, 226, 224, 98, 12, 30, 18, 27, 6, 229, - 2, 12, 30, 18, 27, 6, 227, 61, 12, 30, 18, 27, 6, 225, 110, 12, 30, 18, - 27, 6, 233, 87, 12, 30, 18, 27, 6, 251, 169, 12, 30, 18, 27, 6, 232, 183, - 12, 30, 18, 27, 6, 234, 66, 12, 30, 18, 27, 235, 250, 12, 30, 18, 27, 3, - 254, 205, 12, 30, 18, 27, 3, 252, 198, 12, 30, 18, 27, 3, 246, 169, 12, - 30, 18, 27, 3, 250, 47, 12, 30, 18, 27, 3, 247, 206, 12, 30, 18, 27, 3, - 223, 88, 12, 30, 18, 27, 3, 247, 171, 12, 30, 18, 27, 3, 226, 223, 12, - 30, 18, 27, 3, 239, 215, 12, 30, 18, 27, 3, 239, 35, 12, 30, 18, 27, 3, - 238, 16, 12, 30, 18, 27, 3, 236, 66, 12, 30, 18, 27, 3, 234, 206, 12, 30, - 18, 27, 3, 224, 64, 12, 30, 18, 27, 3, 234, 64, 12, 30, 18, 27, 3, 233, - 69, 12, 30, 18, 27, 3, 231, 182, 12, 30, 18, 27, 3, 35, 229, 2, 12, 30, - 18, 27, 3, 229, 2, 12, 30, 18, 27, 3, 227, 61, 12, 30, 18, 27, 3, 225, - 110, 12, 30, 18, 27, 3, 233, 87, 12, 30, 18, 27, 3, 251, 169, 12, 30, 18, - 27, 3, 232, 183, 12, 30, 18, 27, 3, 234, 66, 12, 30, 18, 27, 233, 175, - 249, 236, 12, 30, 18, 27, 247, 207, 98, 12, 30, 18, 27, 226, 224, 98, 12, - 30, 18, 27, 239, 36, 98, 12, 30, 18, 27, 233, 88, 98, 12, 30, 18, 27, - 231, 183, 98, 12, 30, 18, 27, 233, 70, 98, 12, 18, 6, 249, 230, 12, 18, - 3, 249, 230, 12, 18, 21, 223, 89, 12, 18, 21, 118, 12, 18, 21, 113, 12, - 18, 21, 166, 12, 18, 21, 158, 12, 18, 21, 173, 12, 18, 21, 183, 12, 18, - 21, 194, 12, 18, 21, 187, 12, 18, 21, 192, 12, 159, 21, 223, 89, 12, 159, - 21, 118, 12, 159, 21, 113, 12, 159, 21, 166, 12, 159, 21, 158, 12, 159, - 21, 173, 12, 159, 21, 183, 12, 159, 21, 194, 12, 159, 21, 187, 12, 159, - 21, 192, 12, 30, 21, 223, 89, 12, 30, 21, 118, 12, 30, 21, 113, 12, 30, - 21, 166, 12, 30, 21, 158, 12, 30, 21, 173, 12, 30, 21, 183, 12, 30, 21, - 194, 12, 30, 21, 187, 12, 30, 21, 192, 12, 30, 18, 21, 223, 89, 12, 30, - 18, 21, 118, 12, 30, 18, 21, 113, 12, 30, 18, 21, 166, 12, 30, 18, 21, - 158, 12, 30, 18, 21, 173, 12, 30, 18, 21, 183, 12, 30, 18, 21, 194, 12, - 30, 18, 21, 187, 12, 30, 18, 21, 192, 12, 189, 21, 223, 89, 12, 189, 21, - 118, 12, 189, 21, 113, 12, 189, 21, 166, 12, 189, 21, 158, 12, 189, 21, - 173, 12, 189, 21, 183, 12, 189, 21, 194, 12, 189, 21, 187, 12, 189, 21, - 192, 237, 50, 75, 248, 45, 224, 111, 237, 50, 75, 228, 152, 224, 111, - 237, 50, 75, 224, 131, 224, 111, 237, 50, 75, 234, 245, 224, 111, 237, - 50, 75, 231, 231, 248, 118, 237, 50, 75, 245, 228, 248, 118, 237, 50, 75, - 63, 248, 118, 237, 50, 75, 168, 106, 251, 190, 237, 50, 75, 135, 106, - 251, 190, 237, 50, 75, 152, 106, 251, 190, 237, 50, 75, 246, 243, 106, - 251, 190, 237, 50, 75, 247, 37, 106, 251, 190, 237, 50, 75, 228, 217, - 106, 251, 190, 237, 50, 75, 229, 163, 106, 251, 190, 237, 50, 75, 248, - 20, 106, 251, 190, 237, 50, 75, 235, 61, 106, 251, 190, 237, 50, 75, 168, - 106, 253, 45, 237, 50, 75, 135, 106, 253, 45, 237, 50, 75, 152, 106, 253, - 45, 237, 50, 75, 246, 243, 106, 253, 45, 237, 50, 75, 247, 37, 106, 253, - 45, 237, 50, 75, 228, 217, 106, 253, 45, 237, 50, 75, 229, 163, 106, 253, - 45, 237, 50, 75, 248, 20, 106, 253, 45, 237, 50, 75, 235, 61, 106, 253, - 45, 237, 50, 75, 168, 106, 251, 105, 237, 50, 75, 135, 106, 251, 105, - 237, 50, 75, 152, 106, 251, 105, 237, 50, 75, 246, 243, 106, 251, 105, - 237, 50, 75, 247, 37, 106, 251, 105, 237, 50, 75, 228, 217, 106, 251, - 105, 237, 50, 75, 229, 163, 106, 251, 105, 237, 50, 75, 248, 20, 106, - 251, 105, 237, 50, 75, 235, 61, 106, 251, 105, 237, 50, 75, 233, 12, 237, - 50, 75, 234, 30, 237, 50, 75, 253, 46, 237, 50, 75, 251, 137, 237, 50, - 75, 228, 125, 237, 50, 75, 227, 229, 237, 50, 75, 254, 44, 237, 50, 75, - 224, 107, 237, 50, 75, 239, 111, 237, 50, 75, 253, 66, 109, 75, 169, 253, - 66, 109, 75, 244, 211, 109, 75, 244, 210, 109, 75, 244, 209, 109, 75, - 244, 208, 109, 75, 244, 207, 109, 75, 244, 206, 109, 75, 244, 205, 109, - 75, 244, 204, 109, 75, 244, 203, 109, 75, 244, 202, 109, 75, 244, 201, - 109, 75, 244, 200, 109, 75, 244, 199, 109, 75, 244, 198, 109, 75, 244, - 197, 109, 75, 244, 196, 109, 75, 244, 195, 109, 75, 244, 194, 109, 75, - 244, 193, 109, 75, 244, 192, 109, 75, 244, 191, 109, 75, 244, 190, 109, - 75, 244, 189, 109, 75, 244, 188, 109, 75, 244, 187, 109, 75, 244, 186, - 109, 75, 244, 185, 109, 75, 244, 184, 109, 75, 244, 183, 109, 75, 244, - 182, 109, 75, 244, 181, 109, 75, 244, 180, 109, 75, 244, 179, 109, 75, - 244, 178, 109, 75, 244, 177, 109, 75, 244, 176, 109, 75, 244, 175, 109, - 75, 244, 174, 109, 75, 244, 173, 109, 75, 244, 172, 109, 75, 244, 171, - 109, 75, 244, 170, 109, 75, 244, 169, 109, 75, 244, 168, 109, 75, 244, - 167, 109, 75, 244, 166, 109, 75, 244, 165, 109, 75, 244, 164, 109, 75, - 244, 163, 109, 75, 61, 253, 66, 109, 75, 225, 29, 109, 75, 225, 28, 109, - 75, 225, 27, 109, 75, 225, 26, 109, 75, 225, 25, 109, 75, 225, 24, 109, - 75, 225, 23, 109, 75, 225, 22, 109, 75, 225, 21, 109, 75, 225, 20, 109, - 75, 225, 19, 109, 75, 225, 18, 109, 75, 225, 17, 109, 75, 225, 16, 109, - 75, 225, 15, 109, 75, 225, 14, 109, 75, 225, 13, 109, 75, 225, 12, 109, - 75, 225, 11, 109, 75, 225, 10, 109, 75, 225, 9, 109, 75, 225, 8, 109, 75, - 225, 7, 109, 75, 225, 6, 109, 75, 225, 5, 109, 75, 225, 4, 109, 75, 225, - 3, 109, 75, 225, 2, 109, 75, 225, 1, 109, 75, 225, 0, 109, 75, 224, 255, - 109, 75, 224, 254, 109, 75, 224, 253, 109, 75, 224, 252, 109, 75, 224, - 251, 109, 75, 224, 250, 109, 75, 224, 249, 109, 75, 224, 248, 109, 75, - 224, 247, 109, 75, 224, 246, 109, 75, 224, 245, 109, 75, 224, 244, 109, - 75, 224, 243, 109, 75, 224, 242, 109, 75, 224, 241, 109, 75, 224, 240, - 109, 75, 224, 239, 109, 75, 224, 238, 109, 75, 224, 237, 9, 11, 244, 61, - 9, 11, 244, 60, 9, 11, 244, 59, 9, 11, 244, 58, 9, 11, 244, 57, 9, 11, - 244, 56, 9, 11, 244, 55, 9, 11, 244, 54, 9, 11, 244, 53, 9, 11, 244, 52, - 9, 11, 244, 51, 9, 11, 244, 50, 9, 11, 244, 49, 9, 11, 244, 48, 9, 11, - 244, 47, 9, 11, 244, 46, 9, 11, 244, 45, 9, 11, 244, 44, 9, 11, 244, 43, - 9, 11, 244, 42, 9, 11, 244, 41, 9, 11, 244, 40, 9, 11, 244, 39, 9, 11, - 244, 38, 9, 11, 244, 37, 9, 11, 244, 36, 9, 11, 244, 35, 9, 11, 244, 34, - 9, 11, 244, 33, 9, 11, 244, 32, 9, 11, 244, 31, 9, 11, 244, 30, 9, 11, - 244, 29, 9, 11, 244, 28, 9, 11, 244, 27, 9, 11, 244, 26, 9, 11, 244, 25, - 9, 11, 244, 24, 9, 11, 244, 23, 9, 11, 244, 22, 9, 11, 244, 21, 9, 11, - 244, 20, 9, 11, 244, 19, 9, 11, 244, 18, 9, 11, 244, 17, 9, 11, 244, 16, - 9, 11, 244, 15, 9, 11, 244, 14, 9, 11, 244, 13, 9, 11, 244, 12, 9, 11, - 244, 11, 9, 11, 244, 10, 9, 11, 244, 9, 9, 11, 244, 8, 9, 11, 244, 7, 9, - 11, 244, 6, 9, 11, 244, 5, 9, 11, 244, 4, 9, 11, 244, 3, 9, 11, 244, 2, - 9, 11, 244, 1, 9, 11, 244, 0, 9, 11, 243, 255, 9, 11, 243, 254, 9, 11, - 243, 253, 9, 11, 243, 252, 9, 11, 243, 251, 9, 11, 243, 250, 9, 11, 243, - 249, 9, 11, 243, 248, 9, 11, 243, 247, 9, 11, 243, 246, 9, 11, 243, 245, - 9, 11, 243, 244, 9, 11, 243, 243, 9, 11, 243, 242, 9, 11, 243, 241, 9, - 11, 243, 240, 9, 11, 243, 239, 9, 11, 243, 238, 9, 11, 243, 237, 9, 11, - 243, 236, 9, 11, 243, 235, 9, 11, 243, 234, 9, 11, 243, 233, 9, 11, 243, - 232, 9, 11, 243, 231, 9, 11, 243, 230, 9, 11, 243, 229, 9, 11, 243, 228, - 9, 11, 243, 227, 9, 11, 243, 226, 9, 11, 243, 225, 9, 11, 243, 224, 9, - 11, 243, 223, 9, 11, 243, 222, 9, 11, 243, 221, 9, 11, 243, 220, 9, 11, - 243, 219, 9, 11, 243, 218, 9, 11, 243, 217, 9, 11, 243, 216, 9, 11, 243, - 215, 9, 11, 243, 214, 9, 11, 243, 213, 9, 11, 243, 212, 9, 11, 243, 211, - 9, 11, 243, 210, 9, 11, 243, 209, 9, 11, 243, 208, 9, 11, 243, 207, 9, - 11, 243, 206, 9, 11, 243, 205, 9, 11, 243, 204, 9, 11, 243, 203, 9, 11, - 243, 202, 9, 11, 243, 201, 9, 11, 243, 200, 9, 11, 243, 199, 9, 11, 243, - 198, 9, 11, 243, 197, 9, 11, 243, 196, 9, 11, 243, 195, 9, 11, 243, 194, - 9, 11, 243, 193, 9, 11, 243, 192, 9, 11, 243, 191, 9, 11, 243, 190, 9, - 11, 243, 189, 9, 11, 243, 188, 9, 11, 243, 187, 9, 11, 243, 186, 9, 11, - 243, 185, 9, 11, 243, 184, 9, 11, 243, 183, 9, 11, 243, 182, 9, 11, 243, - 181, 9, 11, 243, 180, 9, 11, 243, 179, 9, 11, 243, 178, 9, 11, 243, 177, - 9, 11, 243, 176, 9, 11, 243, 175, 9, 11, 243, 174, 9, 11, 243, 173, 9, - 11, 243, 172, 9, 11, 243, 171, 9, 11, 243, 170, 9, 11, 243, 169, 9, 11, - 243, 168, 9, 11, 243, 167, 9, 11, 243, 166, 9, 11, 243, 165, 9, 11, 243, - 164, 9, 11, 243, 163, 9, 11, 243, 162, 9, 11, 243, 161, 9, 11, 243, 160, - 9, 11, 243, 159, 9, 11, 243, 158, 9, 11, 243, 157, 9, 11, 243, 156, 9, - 11, 243, 155, 9, 11, 243, 154, 9, 11, 243, 153, 9, 11, 243, 152, 9, 11, - 243, 151, 9, 11, 243, 150, 9, 11, 243, 149, 9, 11, 243, 148, 9, 11, 243, - 147, 9, 11, 243, 146, 9, 11, 243, 145, 9, 11, 243, 144, 9, 11, 243, 143, - 9, 11, 243, 142, 9, 11, 243, 141, 9, 11, 243, 140, 9, 11, 243, 139, 9, - 11, 243, 138, 9, 11, 243, 137, 9, 11, 243, 136, 9, 11, 243, 135, 9, 11, - 243, 134, 9, 11, 243, 133, 9, 11, 243, 132, 9, 11, 243, 131, 9, 11, 243, - 130, 9, 11, 243, 129, 9, 11, 243, 128, 9, 11, 243, 127, 9, 11, 243, 126, - 9, 11, 243, 125, 9, 11, 243, 124, 9, 11, 243, 123, 9, 11, 243, 122, 9, - 11, 243, 121, 9, 11, 243, 120, 9, 11, 243, 119, 9, 11, 243, 118, 9, 11, - 243, 117, 9, 11, 243, 116, 9, 11, 243, 115, 9, 11, 243, 114, 9, 11, 243, - 113, 9, 11, 243, 112, 9, 11, 243, 111, 9, 11, 243, 110, 9, 11, 243, 109, - 9, 11, 243, 108, 9, 11, 243, 107, 9, 11, 243, 106, 9, 11, 243, 105, 9, - 11, 243, 104, 9, 11, 243, 103, 9, 11, 243, 102, 9, 11, 243, 101, 9, 11, - 243, 100, 9, 11, 243, 99, 9, 11, 243, 98, 9, 11, 243, 97, 9, 11, 243, 96, - 9, 11, 243, 95, 9, 11, 243, 94, 9, 11, 243, 93, 9, 11, 243, 92, 9, 11, - 243, 91, 9, 11, 243, 90, 9, 11, 243, 89, 9, 11, 243, 88, 9, 11, 243, 87, - 9, 11, 243, 86, 9, 11, 243, 85, 9, 11, 243, 84, 9, 11, 243, 83, 9, 11, - 243, 82, 9, 11, 243, 81, 9, 11, 243, 80, 9, 11, 243, 79, 9, 11, 243, 78, - 9, 11, 243, 77, 9, 11, 243, 76, 9, 11, 243, 75, 9, 11, 243, 74, 9, 11, - 243, 73, 9, 11, 243, 72, 9, 11, 243, 71, 9, 11, 243, 70, 9, 11, 243, 69, - 9, 11, 243, 68, 9, 11, 243, 67, 9, 11, 243, 66, 9, 11, 243, 65, 9, 11, - 243, 64, 9, 11, 243, 63, 9, 11, 243, 62, 9, 11, 243, 61, 9, 11, 243, 60, - 9, 11, 243, 59, 9, 11, 243, 58, 9, 11, 243, 57, 9, 11, 243, 56, 9, 11, - 243, 55, 9, 11, 243, 54, 9, 11, 243, 53, 9, 11, 243, 52, 9, 11, 243, 51, - 9, 11, 243, 50, 9, 11, 243, 49, 9, 11, 243, 48, 9, 11, 243, 47, 9, 11, - 243, 46, 9, 11, 243, 45, 9, 11, 243, 44, 9, 11, 243, 43, 9, 11, 243, 42, - 9, 11, 243, 41, 9, 11, 243, 40, 9, 11, 243, 39, 9, 11, 243, 38, 9, 11, - 243, 37, 9, 11, 243, 36, 9, 11, 243, 35, 9, 11, 243, 34, 9, 11, 243, 33, - 9, 11, 243, 32, 9, 11, 243, 31, 9, 11, 243, 30, 9, 11, 243, 29, 9, 11, - 243, 28, 9, 11, 243, 27, 9, 11, 243, 26, 9, 11, 243, 25, 9, 11, 243, 24, - 9, 11, 243, 23, 9, 11, 243, 22, 9, 11, 243, 21, 9, 11, 243, 20, 9, 11, - 243, 19, 9, 11, 243, 18, 9, 11, 243, 17, 9, 11, 243, 16, 9, 11, 243, 15, - 9, 11, 243, 14, 9, 11, 243, 13, 9, 11, 243, 12, 9, 11, 243, 11, 9, 11, - 243, 10, 9, 11, 243, 9, 9, 11, 243, 8, 9, 11, 243, 7, 9, 11, 243, 6, 9, - 11, 243, 5, 9, 11, 243, 4, 9, 11, 243, 3, 9, 11, 243, 2, 9, 11, 243, 1, - 9, 11, 243, 0, 9, 11, 242, 255, 9, 11, 242, 254, 9, 11, 242, 253, 9, 11, - 242, 252, 9, 11, 242, 251, 9, 11, 242, 250, 9, 11, 242, 249, 9, 11, 242, - 248, 9, 11, 242, 247, 9, 11, 242, 246, 9, 11, 242, 245, 9, 11, 242, 244, - 9, 11, 242, 243, 9, 11, 242, 242, 9, 11, 242, 241, 9, 11, 242, 240, 9, - 11, 242, 239, 9, 11, 242, 238, 9, 11, 242, 237, 9, 11, 242, 236, 9, 11, - 242, 235, 9, 11, 242, 234, 9, 11, 242, 233, 9, 11, 242, 232, 9, 11, 242, - 231, 9, 11, 242, 230, 9, 11, 242, 229, 9, 11, 242, 228, 9, 11, 242, 227, - 9, 11, 242, 226, 9, 11, 242, 225, 9, 11, 242, 224, 9, 11, 242, 223, 9, - 11, 242, 222, 9, 11, 242, 221, 9, 11, 242, 220, 9, 11, 242, 219, 9, 11, - 242, 218, 9, 11, 242, 217, 9, 11, 242, 216, 9, 11, 242, 215, 9, 11, 242, - 214, 9, 11, 242, 213, 9, 11, 242, 212, 9, 11, 242, 211, 9, 11, 242, 210, - 9, 11, 242, 209, 9, 11, 242, 208, 9, 11, 242, 207, 9, 11, 242, 206, 9, - 11, 242, 205, 9, 11, 242, 204, 9, 11, 242, 203, 9, 11, 242, 202, 9, 11, - 242, 201, 9, 11, 242, 200, 9, 11, 242, 199, 9, 11, 242, 198, 9, 11, 242, - 197, 9, 11, 242, 196, 9, 11, 242, 195, 9, 11, 242, 194, 9, 11, 242, 193, - 9, 11, 242, 192, 9, 11, 242, 191, 9, 11, 242, 190, 9, 11, 242, 189, 9, - 11, 242, 188, 9, 11, 242, 187, 9, 11, 242, 186, 9, 11, 242, 185, 9, 11, - 242, 184, 9, 11, 242, 183, 9, 11, 242, 182, 9, 11, 242, 181, 9, 11, 242, - 180, 9, 11, 242, 179, 9, 11, 242, 178, 9, 11, 242, 177, 9, 11, 242, 176, - 9, 11, 242, 175, 9, 11, 242, 174, 9, 11, 242, 173, 9, 11, 242, 172, 9, - 11, 242, 171, 9, 11, 242, 170, 9, 11, 242, 169, 9, 11, 242, 168, 9, 11, - 242, 167, 9, 11, 242, 166, 9, 11, 242, 165, 9, 11, 242, 164, 9, 11, 242, - 163, 9, 11, 242, 162, 9, 11, 242, 161, 9, 11, 242, 160, 9, 11, 242, 159, - 9, 11, 242, 158, 9, 11, 242, 157, 9, 11, 242, 156, 9, 11, 242, 155, 9, - 11, 242, 154, 9, 11, 242, 153, 9, 11, 242, 152, 9, 11, 242, 151, 9, 11, - 242, 150, 9, 11, 242, 149, 9, 11, 242, 148, 9, 11, 242, 147, 9, 11, 242, - 146, 9, 11, 242, 145, 9, 11, 242, 144, 9, 11, 242, 143, 9, 11, 242, 142, - 9, 11, 242, 141, 9, 11, 242, 140, 9, 11, 242, 139, 9, 11, 242, 138, 9, - 11, 242, 137, 9, 11, 242, 136, 9, 11, 242, 135, 9, 11, 242, 134, 9, 11, - 242, 133, 9, 11, 242, 132, 9, 11, 242, 131, 9, 11, 242, 130, 9, 11, 242, - 129, 9, 11, 242, 128, 9, 11, 242, 127, 9, 11, 242, 126, 9, 11, 242, 125, - 9, 11, 242, 124, 9, 11, 242, 123, 9, 11, 242, 122, 9, 11, 242, 121, 9, - 11, 242, 120, 9, 11, 242, 119, 9, 11, 242, 118, 9, 11, 242, 117, 9, 11, - 242, 116, 9, 11, 242, 115, 9, 11, 242, 114, 9, 11, 242, 113, 9, 11, 242, - 112, 9, 11, 242, 111, 9, 11, 242, 110, 9, 11, 242, 109, 9, 11, 242, 108, - 9, 11, 242, 107, 9, 11, 242, 106, 9, 11, 242, 105, 9, 11, 242, 104, 9, - 11, 242, 103, 9, 11, 242, 102, 9, 11, 242, 101, 9, 11, 242, 100, 9, 11, - 242, 99, 9, 11, 242, 98, 9, 11, 242, 97, 9, 11, 242, 96, 9, 11, 242, 95, - 9, 11, 242, 94, 9, 11, 242, 93, 9, 11, 242, 92, 9, 11, 242, 91, 9, 11, - 242, 90, 9, 11, 242, 89, 9, 11, 242, 88, 9, 11, 242, 87, 9, 11, 242, 86, - 9, 11, 242, 85, 9, 11, 242, 84, 9, 11, 242, 83, 9, 11, 242, 82, 9, 11, - 242, 81, 9, 11, 242, 80, 9, 11, 242, 79, 9, 11, 242, 78, 9, 11, 242, 77, - 9, 11, 242, 76, 9, 11, 242, 75, 9, 11, 242, 74, 9, 11, 242, 73, 9, 11, - 242, 72, 9, 11, 242, 71, 9, 11, 242, 70, 9, 11, 242, 69, 9, 11, 242, 68, - 9, 11, 242, 67, 9, 11, 242, 66, 9, 11, 242, 65, 9, 11, 242, 64, 9, 11, - 242, 63, 9, 11, 242, 62, 9, 11, 242, 61, 9, 11, 242, 60, 9, 11, 242, 59, - 9, 11, 242, 58, 9, 11, 242, 57, 9, 11, 242, 56, 9, 11, 242, 55, 9, 11, - 242, 54, 9, 11, 242, 53, 9, 11, 242, 52, 9, 11, 242, 51, 9, 11, 242, 50, - 9, 11, 242, 49, 9, 11, 242, 48, 9, 11, 242, 47, 9, 11, 242, 46, 9, 11, - 242, 45, 9, 11, 242, 44, 9, 11, 242, 43, 9, 11, 242, 42, 9, 11, 242, 41, - 9, 11, 242, 40, 9, 11, 242, 39, 9, 11, 242, 38, 9, 11, 242, 37, 9, 11, - 242, 36, 9, 11, 242, 35, 9, 11, 242, 34, 9, 11, 242, 33, 9, 11, 242, 32, - 238, 11, 227, 95, 108, 228, 145, 108, 247, 149, 76, 108, 232, 57, 76, - 108, 65, 53, 108, 249, 150, 53, 108, 233, 123, 53, 108, 254, 193, 108, - 254, 144, 108, 42, 233, 180, 108, 41, 233, 180, 108, 254, 69, 108, 79, - 53, 108, 251, 54, 108, 244, 94, 108, 246, 218, 228, 38, 108, 228, 161, - 108, 21, 223, 89, 108, 21, 118, 108, 21, 113, 108, 21, 166, 108, 21, 158, - 108, 21, 173, 108, 21, 183, 108, 21, 194, 108, 21, 187, 108, 21, 192, - 108, 251, 61, 108, 229, 186, 108, 237, 213, 53, 108, 247, 204, 53, 108, - 245, 231, 53, 108, 232, 69, 76, 108, 251, 53, 254, 62, 108, 7, 6, 1, 57, - 108, 7, 6, 1, 254, 27, 108, 7, 6, 1, 252, 44, 108, 7, 6, 1, 222, 222, - 108, 7, 6, 1, 72, 108, 7, 6, 1, 247, 130, 108, 7, 6, 1, 214, 108, 7, 6, - 1, 212, 108, 7, 6, 1, 74, 108, 7, 6, 1, 239, 182, 108, 7, 6, 1, 239, 76, - 108, 7, 6, 1, 149, 108, 7, 6, 1, 185, 108, 7, 6, 1, 199, 108, 7, 6, 1, - 73, 108, 7, 6, 1, 233, 244, 108, 7, 6, 1, 232, 139, 108, 7, 6, 1, 146, - 108, 7, 6, 1, 193, 108, 7, 6, 1, 227, 109, 108, 7, 6, 1, 66, 108, 7, 6, - 1, 196, 108, 7, 6, 1, 224, 174, 108, 7, 6, 1, 224, 73, 108, 7, 6, 1, 224, - 25, 108, 7, 6, 1, 223, 119, 108, 42, 37, 104, 108, 231, 193, 228, 161, - 108, 41, 37, 104, 108, 251, 102, 255, 41, 108, 184, 237, 170, 108, 245, - 237, 255, 41, 108, 7, 3, 1, 57, 108, 7, 3, 1, 254, 27, 108, 7, 3, 1, 252, - 44, 108, 7, 3, 1, 222, 222, 108, 7, 3, 1, 72, 108, 7, 3, 1, 247, 130, - 108, 7, 3, 1, 214, 108, 7, 3, 1, 212, 108, 7, 3, 1, 74, 108, 7, 3, 1, - 239, 182, 108, 7, 3, 1, 239, 76, 108, 7, 3, 1, 149, 108, 7, 3, 1, 185, - 108, 7, 3, 1, 199, 108, 7, 3, 1, 73, 108, 7, 3, 1, 233, 244, 108, 7, 3, - 1, 232, 139, 108, 7, 3, 1, 146, 108, 7, 3, 1, 193, 108, 7, 3, 1, 227, - 109, 108, 7, 3, 1, 66, 108, 7, 3, 1, 196, 108, 7, 3, 1, 224, 174, 108, 7, - 3, 1, 224, 73, 108, 7, 3, 1, 224, 25, 108, 7, 3, 1, 223, 119, 108, 42, - 250, 223, 104, 108, 61, 237, 170, 108, 41, 250, 223, 104, 108, 205, 252, - 25, 227, 95, 38, 230, 114, 38, 230, 103, 38, 230, 92, 38, 230, 80, 38, - 230, 69, 38, 230, 58, 38, 230, 47, 38, 230, 36, 38, 230, 25, 38, 230, 17, - 38, 230, 16, 38, 230, 15, 38, 230, 14, 38, 230, 12, 38, 230, 11, 38, 230, - 10, 38, 230, 9, 38, 230, 8, 38, 230, 7, 38, 230, 6, 38, 230, 5, 38, 230, - 4, 38, 230, 3, 38, 230, 1, 38, 230, 0, 38, 229, 255, 38, 229, 254, 38, - 229, 253, 38, 229, 252, 38, 229, 251, 38, 229, 250, 38, 229, 249, 38, - 229, 248, 38, 229, 246, 38, 229, 245, 38, 229, 244, 38, 229, 243, 38, - 229, 242, 38, 229, 241, 38, 229, 240, 38, 229, 239, 38, 229, 238, 38, - 229, 237, 38, 229, 235, 38, 229, 234, 38, 229, 233, 38, 229, 232, 38, - 229, 231, 38, 229, 230, 38, 229, 229, 38, 229, 228, 38, 229, 227, 38, - 229, 226, 38, 229, 224, 38, 229, 223, 38, 229, 222, 38, 229, 221, 38, - 229, 220, 38, 229, 219, 38, 229, 218, 38, 229, 217, 38, 229, 216, 38, - 229, 215, 38, 229, 213, 38, 229, 212, 38, 229, 211, 38, 229, 210, 38, - 229, 209, 38, 229, 208, 38, 229, 207, 38, 229, 206, 38, 229, 205, 38, - 229, 204, 38, 229, 202, 38, 229, 201, 38, 229, 200, 38, 229, 199, 38, - 229, 198, 38, 229, 197, 38, 229, 196, 38, 229, 195, 38, 229, 194, 38, - 229, 193, 38, 230, 190, 38, 230, 189, 38, 230, 188, 38, 230, 187, 38, - 230, 186, 38, 230, 185, 38, 230, 184, 38, 230, 183, 38, 230, 182, 38, - 230, 181, 38, 230, 179, 38, 230, 178, 38, 230, 177, 38, 230, 176, 38, - 230, 175, 38, 230, 174, 38, 230, 173, 38, 230, 172, 38, 230, 171, 38, - 230, 170, 38, 230, 168, 38, 230, 167, 38, 230, 166, 38, 230, 165, 38, - 230, 164, 38, 230, 163, 38, 230, 162, 38, 230, 161, 38, 230, 160, 38, - 230, 159, 38, 230, 157, 38, 230, 156, 38, 230, 155, 38, 230, 154, 38, - 230, 153, 38, 230, 152, 38, 230, 151, 38, 230, 150, 38, 230, 149, 38, - 230, 148, 38, 230, 146, 38, 230, 145, 38, 230, 144, 38, 230, 143, 38, - 230, 142, 38, 230, 141, 38, 230, 140, 38, 230, 139, 38, 230, 138, 38, - 230, 137, 38, 230, 135, 38, 230, 134, 38, 230, 133, 38, 230, 132, 38, - 230, 131, 38, 230, 130, 38, 230, 129, 38, 230, 128, 38, 230, 127, 38, - 230, 126, 38, 230, 124, 38, 230, 123, 38, 230, 122, 38, 230, 121, 38, - 230, 120, 38, 230, 119, 38, 230, 118, 38, 230, 117, 38, 230, 116, 38, - 230, 115, 38, 230, 113, 38, 230, 112, 38, 230, 111, 38, 230, 110, 38, - 230, 109, 38, 230, 108, 38, 230, 107, 38, 230, 106, 38, 230, 105, 38, - 230, 104, 38, 230, 102, 38, 230, 101, 38, 230, 100, 38, 230, 99, 38, 230, - 98, 38, 230, 97, 38, 230, 96, 38, 230, 95, 38, 230, 94, 38, 230, 93, 38, - 230, 91, 38, 230, 90, 38, 230, 89, 38, 230, 88, 38, 230, 87, 38, 230, 86, - 38, 230, 85, 38, 230, 84, 38, 230, 83, 38, 230, 82, 38, 230, 79, 38, 230, - 78, 38, 230, 77, 38, 230, 76, 38, 230, 75, 38, 230, 74, 38, 230, 73, 38, - 230, 72, 38, 230, 71, 38, 230, 70, 38, 230, 68, 38, 230, 67, 38, 230, 66, - 38, 230, 65, 38, 230, 64, 38, 230, 63, 38, 230, 62, 38, 230, 61, 38, 230, - 60, 38, 230, 59, 38, 230, 57, 38, 230, 56, 38, 230, 55, 38, 230, 54, 38, - 230, 53, 38, 230, 52, 38, 230, 51, 38, 230, 50, 38, 230, 49, 38, 230, 48, - 38, 230, 46, 38, 230, 45, 38, 230, 44, 38, 230, 43, 38, 230, 42, 38, 230, - 41, 38, 230, 40, 38, 230, 39, 38, 230, 38, 38, 230, 37, 38, 230, 35, 38, - 230, 34, 38, 230, 33, 38, 230, 32, 38, 230, 31, 38, 230, 30, 38, 230, 29, - 38, 230, 28, 38, 230, 27, 38, 230, 26, 38, 230, 24, 38, 230, 23, 38, 230, - 22, 38, 230, 21, 38, 230, 20, 38, 230, 19, 38, 230, 18, + 0, 223, 254, 246, 95, 78, 228, 69, 78, 54, 55, 248, 155, 55, 229, 169, + 55, 254, 134, 254, 79, 42, 229, 229, 45, 229, 229, 253, 251, 88, 55, 250, + 168, 242, 120, 245, 90, 223, 136, 224, 17, 20, 217, 84, 20, 107, 20, 103, + 20, 160, 20, 154, 20, 174, 20, 182, 20, 191, 20, 185, 20, 190, 250, 175, + 225, 67, 235, 87, 55, 246, 154, 55, 244, 30, 55, 228, 82, 78, 250, 167, + 253, 244, 7, 6, 1, 60, 7, 6, 1, 253, 204, 7, 6, 1, 251, 202, 7, 6, 1, + 250, 46, 7, 6, 1, 73, 7, 6, 1, 246, 74, 7, 6, 1, 245, 67, 7, 6, 1, 243, + 225, 7, 6, 1, 72, 7, 6, 1, 237, 126, 7, 6, 1, 237, 17, 7, 6, 1, 153, 7, + 6, 1, 189, 7, 6, 1, 207, 7, 6, 1, 74, 7, 6, 1, 230, 59, 7, 6, 1, 228, + 163, 7, 6, 1, 152, 7, 6, 1, 198, 7, 6, 1, 222, 201, 7, 6, 1, 68, 7, 6, 1, + 216, 216, 7, 6, 1, 219, 40, 7, 6, 1, 218, 151, 7, 6, 1, 218, 90, 7, 6, 1, + 217, 157, 42, 40, 115, 227, 160, 224, 17, 45, 40, 115, 250, 217, 255, 0, + 109, 235, 43, 244, 37, 255, 0, 7, 3, 1, 60, 7, 3, 1, 253, 204, 7, 3, 1, + 251, 202, 7, 3, 1, 250, 46, 7, 3, 1, 73, 7, 3, 1, 246, 74, 7, 3, 1, 245, + 67, 7, 3, 1, 243, 225, 7, 3, 1, 72, 7, 3, 1, 237, 126, 7, 3, 1, 237, 17, + 7, 3, 1, 153, 7, 3, 1, 189, 7, 3, 1, 207, 7, 3, 1, 74, 7, 3, 1, 230, 59, + 7, 3, 1, 228, 163, 7, 3, 1, 152, 7, 3, 1, 198, 7, 3, 1, 222, 201, 7, 3, + 1, 68, 7, 3, 1, 216, 216, 7, 3, 1, 219, 40, 7, 3, 1, 218, 151, 7, 3, 1, + 218, 90, 7, 3, 1, 217, 157, 42, 250, 79, 115, 69, 235, 43, 45, 250, 79, + 115, 221, 179, 231, 203, 223, 254, 237, 170, 246, 95, 78, 251, 86, 55, + 229, 11, 55, 250, 78, 55, 218, 19, 55, 252, 1, 135, 226, 87, 55, 249, 13, + 250, 126, 55, 245, 215, 230, 103, 237, 211, 235, 112, 51, 254, 120, 228, + 69, 78, 212, 55, 224, 21, 242, 121, 227, 198, 55, 234, 115, 249, 77, 55, + 229, 42, 55, 223, 59, 103, 223, 59, 160, 254, 248, 255, 0, 233, 195, 55, + 229, 73, 55, 233, 193, 248, 145, 251, 92, 223, 59, 107, 234, 58, 230, + 103, 237, 211, 227, 106, 51, 254, 120, 228, 69, 78, 219, 55, 245, 108, + 131, 228, 89, 219, 55, 245, 108, 131, 243, 194, 219, 55, 245, 108, 148, + 228, 87, 237, 170, 228, 82, 78, 7, 6, 1, 112, 2, 244, 36, 7, 6, 1, 112, + 2, 168, 7, 6, 1, 112, 2, 250, 216, 7, 6, 1, 112, 2, 221, 179, 7, 6, 1, + 112, 2, 249, 13, 7, 6, 1, 112, 2, 227, 94, 50, 7, 6, 1, 254, 234, 7, 6, + 1, 251, 203, 2, 251, 92, 7, 6, 1, 178, 2, 244, 36, 7, 6, 1, 178, 2, 168, + 7, 6, 1, 178, 2, 250, 216, 7, 6, 1, 178, 2, 249, 13, 7, 6, 1, 242, 107, + 2, 244, 36, 7, 6, 1, 242, 107, 2, 168, 7, 6, 1, 242, 107, 2, 250, 216, 7, + 6, 1, 242, 107, 2, 249, 13, 7, 6, 1, 246, 118, 7, 6, 1, 233, 34, 2, 221, + 179, 7, 6, 1, 142, 2, 244, 36, 7, 6, 1, 142, 2, 168, 7, 6, 1, 142, 2, + 250, 216, 7, 6, 1, 142, 2, 221, 179, 7, 6, 1, 142, 2, 249, 13, 233, 84, + 55, 7, 6, 1, 142, 2, 92, 7, 6, 1, 105, 2, 244, 36, 7, 6, 1, 105, 2, 168, + 7, 6, 1, 105, 2, 250, 216, 7, 6, 1, 105, 2, 249, 13, 7, 6, 1, 218, 91, 2, + 168, 7, 6, 1, 221, 234, 7, 3, 1, 225, 1, 198, 7, 3, 1, 112, 2, 244, 36, + 7, 3, 1, 112, 2, 168, 7, 3, 1, 112, 2, 250, 216, 7, 3, 1, 112, 2, 221, + 179, 7, 3, 1, 112, 2, 249, 13, 7, 3, 1, 112, 2, 227, 94, 50, 7, 3, 1, + 254, 234, 7, 3, 1, 251, 203, 2, 251, 92, 7, 3, 1, 178, 2, 244, 36, 7, 3, + 1, 178, 2, 168, 7, 3, 1, 178, 2, 250, 216, 7, 3, 1, 178, 2, 249, 13, 7, + 3, 1, 242, 107, 2, 244, 36, 7, 3, 1, 242, 107, 2, 168, 7, 3, 1, 242, 107, + 2, 250, 216, 7, 3, 1, 242, 107, 2, 249, 13, 7, 3, 1, 246, 118, 7, 3, 1, + 233, 34, 2, 221, 179, 7, 3, 1, 142, 2, 244, 36, 7, 3, 1, 142, 2, 168, 7, + 3, 1, 142, 2, 250, 216, 7, 3, 1, 142, 2, 221, 179, 7, 3, 1, 142, 2, 249, + 13, 248, 188, 55, 7, 3, 1, 142, 2, 92, 7, 3, 1, 105, 2, 244, 36, 7, 3, 1, + 105, 2, 168, 7, 3, 1, 105, 2, 250, 216, 7, 3, 1, 105, 2, 249, 13, 7, 3, + 1, 218, 91, 2, 168, 7, 3, 1, 221, 234, 7, 3, 1, 218, 91, 2, 249, 13, 7, + 6, 1, 112, 2, 234, 115, 7, 3, 1, 112, 2, 234, 115, 7, 6, 1, 112, 2, 252, + 8, 7, 3, 1, 112, 2, 252, 8, 7, 6, 1, 112, 2, 230, 162, 7, 3, 1, 112, 2, + 230, 162, 7, 6, 1, 251, 203, 2, 168, 7, 3, 1, 251, 203, 2, 168, 7, 6, 1, + 251, 203, 2, 250, 216, 7, 3, 1, 251, 203, 2, 250, 216, 7, 6, 1, 251, 203, + 2, 61, 50, 7, 3, 1, 251, 203, 2, 61, 50, 7, 6, 1, 251, 203, 2, 251, 130, + 7, 3, 1, 251, 203, 2, 251, 130, 7, 6, 1, 250, 47, 2, 251, 130, 7, 3, 1, + 250, 47, 2, 251, 130, 7, 6, 1, 250, 47, 2, 92, 7, 3, 1, 250, 47, 2, 92, + 7, 6, 1, 178, 2, 234, 115, 7, 3, 1, 178, 2, 234, 115, 7, 6, 1, 178, 2, + 252, 8, 7, 3, 1, 178, 2, 252, 8, 7, 6, 1, 178, 2, 61, 50, 7, 3, 1, 178, + 2, 61, 50, 7, 6, 1, 178, 2, 230, 162, 7, 3, 1, 178, 2, 230, 162, 7, 6, 1, + 178, 2, 251, 130, 7, 3, 1, 178, 2, 251, 130, 7, 6, 1, 245, 68, 2, 250, + 216, 7, 3, 1, 245, 68, 2, 250, 216, 7, 6, 1, 245, 68, 2, 252, 8, 7, 3, 1, + 245, 68, 2, 252, 8, 7, 6, 1, 245, 68, 2, 61, 50, 7, 3, 1, 245, 68, 2, 61, + 50, 7, 6, 1, 245, 68, 2, 251, 92, 7, 3, 1, 245, 68, 2, 251, 92, 7, 6, 1, + 243, 226, 2, 250, 216, 7, 3, 1, 243, 226, 2, 250, 216, 7, 6, 1, 243, 226, + 2, 92, 7, 3, 1, 243, 226, 2, 92, 7, 6, 1, 242, 107, 2, 221, 179, 7, 3, 1, + 242, 107, 2, 221, 179, 7, 6, 1, 242, 107, 2, 234, 115, 7, 3, 1, 242, 107, + 2, 234, 115, 7, 6, 1, 242, 107, 2, 252, 8, 7, 3, 1, 242, 107, 2, 252, 8, + 7, 6, 1, 242, 107, 2, 230, 162, 7, 3, 1, 242, 107, 2, 230, 162, 7, 6, 1, + 242, 107, 2, 61, 50, 7, 3, 1, 248, 144, 72, 7, 6, 24, 237, 253, 7, 3, 24, + 237, 253, 7, 6, 1, 237, 127, 2, 250, 216, 7, 3, 1, 237, 127, 2, 250, 216, + 7, 6, 1, 237, 18, 2, 251, 92, 7, 3, 1, 237, 18, 2, 251, 92, 7, 3, 1, 236, + 17, 7, 6, 1, 235, 202, 2, 168, 7, 3, 1, 235, 202, 2, 168, 7, 6, 1, 235, + 202, 2, 251, 92, 7, 3, 1, 235, 202, 2, 251, 92, 7, 6, 1, 235, 202, 2, + 251, 130, 7, 3, 1, 235, 202, 2, 251, 130, 7, 6, 1, 235, 202, 2, 233, 193, + 248, 145, 7, 3, 1, 235, 202, 2, 233, 193, 248, 145, 7, 6, 1, 235, 202, 2, + 92, 7, 3, 1, 235, 202, 2, 92, 7, 6, 1, 233, 34, 2, 168, 7, 3, 1, 233, 34, + 2, 168, 7, 6, 1, 233, 34, 2, 251, 92, 7, 3, 1, 233, 34, 2, 251, 92, 7, 6, + 1, 233, 34, 2, 251, 130, 7, 3, 1, 233, 34, 2, 251, 130, 7, 3, 1, 233, 34, + 228, 246, 251, 213, 254, 79, 7, 6, 1, 246, 185, 7, 3, 1, 246, 185, 7, 6, + 1, 142, 2, 234, 115, 7, 3, 1, 142, 2, 234, 115, 7, 6, 1, 142, 2, 252, 8, + 7, 3, 1, 142, 2, 252, 8, 7, 6, 1, 142, 2, 51, 168, 7, 3, 1, 142, 2, 51, + 168, 7, 6, 24, 230, 167, 7, 3, 24, 230, 167, 7, 6, 1, 228, 39, 2, 168, 7, + 3, 1, 228, 39, 2, 168, 7, 6, 1, 228, 39, 2, 251, 92, 7, 3, 1, 228, 39, 2, + 251, 92, 7, 6, 1, 228, 39, 2, 251, 130, 7, 3, 1, 228, 39, 2, 251, 130, 7, + 6, 1, 226, 235, 2, 168, 7, 3, 1, 226, 235, 2, 168, 7, 6, 1, 226, 235, 2, + 250, 216, 7, 3, 1, 226, 235, 2, 250, 216, 7, 6, 1, 226, 235, 2, 251, 92, + 7, 3, 1, 226, 235, 2, 251, 92, 7, 6, 1, 226, 235, 2, 251, 130, 7, 3, 1, + 226, 235, 2, 251, 130, 7, 6, 1, 222, 202, 2, 251, 92, 7, 3, 1, 222, 202, + 2, 251, 92, 7, 6, 1, 222, 202, 2, 251, 130, 7, 3, 1, 222, 202, 2, 251, + 130, 7, 6, 1, 222, 202, 2, 92, 7, 3, 1, 222, 202, 2, 92, 7, 6, 1, 105, 2, + 221, 179, 7, 3, 1, 105, 2, 221, 179, 7, 6, 1, 105, 2, 234, 115, 7, 3, 1, + 105, 2, 234, 115, 7, 6, 1, 105, 2, 252, 8, 7, 3, 1, 105, 2, 252, 8, 7, 6, + 1, 105, 2, 227, 94, 50, 7, 3, 1, 105, 2, 227, 94, 50, 7, 6, 1, 105, 2, + 51, 168, 7, 3, 1, 105, 2, 51, 168, 7, 6, 1, 105, 2, 230, 162, 7, 3, 1, + 105, 2, 230, 162, 7, 6, 1, 219, 41, 2, 250, 216, 7, 3, 1, 219, 41, 2, + 250, 216, 7, 6, 1, 218, 91, 2, 250, 216, 7, 3, 1, 218, 91, 2, 250, 216, + 7, 6, 1, 218, 91, 2, 249, 13, 7, 6, 1, 217, 158, 2, 168, 7, 3, 1, 217, + 158, 2, 168, 7, 6, 1, 217, 158, 2, 61, 50, 7, 3, 1, 217, 158, 2, 61, 50, + 7, 6, 1, 217, 158, 2, 251, 130, 7, 3, 1, 217, 158, 2, 251, 130, 7, 3, 1, + 171, 198, 7, 3, 1, 49, 2, 92, 7, 6, 1, 49, 2, 96, 7, 6, 1, 49, 2, 221, + 117, 7, 3, 1, 49, 2, 221, 117, 7, 6, 1, 145, 182, 7, 3, 1, 145, 182, 7, + 6, 1, 230, 119, 74, 7, 6, 1, 251, 203, 2, 96, 7, 3, 1, 251, 203, 2, 96, + 7, 6, 1, 254, 212, 250, 46, 7, 6, 1, 250, 47, 2, 96, 7, 6, 1, 250, 47, 2, + 221, 117, 7, 3, 1, 250, 47, 2, 221, 117, 7, 3, 1, 215, 249, 62, 7, 6, 1, + 210, 73, 7, 6, 1, 226, 104, 7, 6, 1, 230, 119, 73, 7, 6, 1, 246, 75, 2, + 96, 7, 3, 1, 246, 75, 2, 96, 7, 6, 1, 245, 68, 2, 96, 7, 6, 1, 244, 231, + 7, 3, 1, 242, 154, 7, 6, 1, 237, 162, 7, 6, 1, 242, 107, 2, 92, 7, 6, 1, + 237, 18, 2, 96, 7, 3, 1, 237, 18, 2, 96, 7, 3, 1, 235, 202, 2, 135, 7, 3, + 1, 235, 158, 2, 92, 7, 6, 1, 215, 189, 7, 6, 1, 233, 34, 2, 42, 96, 7, 3, + 1, 233, 34, 2, 171, 45, 235, 106, 7, 6, 1, 142, 2, 233, 193, 221, 179, 7, + 6, 1, 142, 2, 242, 189, 7, 3, 1, 142, 2, 242, 189, 7, 6, 1, 230, 158, 7, + 3, 1, 230, 158, 7, 6, 1, 230, 60, 2, 96, 7, 3, 1, 230, 60, 2, 96, 7, 1, + 217, 202, 7, 6, 1, 145, 103, 7, 3, 1, 145, 103, 7, 6, 1, 246, 133, 7, 1, + 210, 246, 134, 234, 247, 7, 3, 1, 222, 202, 2, 230, 29, 96, 7, 6, 1, 222, + 202, 2, 96, 7, 3, 1, 222, 202, 2, 96, 7, 6, 1, 222, 202, 2, 227, 164, 96, + 7, 6, 1, 105, 2, 242, 189, 7, 3, 1, 105, 2, 242, 189, 7, 6, 1, 220, 57, + 7, 6, 1, 220, 11, 2, 96, 7, 6, 1, 218, 91, 2, 96, 7, 3, 1, 218, 91, 2, + 96, 7, 6, 1, 217, 158, 2, 92, 7, 3, 1, 217, 158, 2, 92, 7, 6, 1, 246, 76, + 7, 6, 1, 246, 77, 227, 159, 7, 3, 1, 246, 77, 227, 159, 7, 3, 1, 246, 77, + 2, 222, 135, 7, 1, 124, 2, 92, 7, 6, 1, 145, 174, 7, 3, 1, 145, 174, 7, + 1, 237, 170, 244, 73, 223, 137, 2, 92, 7, 1, 218, 154, 7, 1, 249, 55, + 250, 204, 7, 1, 235, 139, 250, 204, 7, 1, 254, 141, 250, 204, 7, 1, 227, + 164, 250, 204, 7, 6, 1, 247, 76, 2, 251, 130, 7, 6, 1, 250, 47, 2, 3, 1, + 217, 158, 2, 251, 130, 7, 3, 1, 247, 76, 2, 251, 130, 7, 6, 1, 235, 21, + 7, 6, 1, 235, 202, 2, 3, 1, 237, 126, 7, 3, 1, 235, 21, 7, 6, 1, 232, 19, + 7, 6, 1, 233, 34, 2, 3, 1, 237, 126, 7, 3, 1, 232, 19, 7, 6, 1, 112, 2, + 251, 130, 7, 3, 1, 112, 2, 251, 130, 7, 6, 1, 242, 107, 2, 251, 130, 7, + 3, 1, 242, 107, 2, 251, 130, 7, 6, 1, 142, 2, 251, 130, 7, 3, 1, 142, 2, + 251, 130, 7, 6, 1, 105, 2, 251, 130, 7, 3, 1, 105, 2, 251, 130, 7, 6, 1, + 105, 2, 249, 14, 25, 234, 115, 7, 3, 1, 105, 2, 249, 14, 25, 234, 115, 7, + 6, 1, 105, 2, 249, 14, 25, 168, 7, 3, 1, 105, 2, 249, 14, 25, 168, 7, 6, + 1, 105, 2, 249, 14, 25, 251, 130, 7, 3, 1, 105, 2, 249, 14, 25, 251, 130, + 7, 6, 1, 105, 2, 249, 14, 25, 244, 36, 7, 3, 1, 105, 2, 249, 14, 25, 244, + 36, 7, 3, 1, 215, 73, 7, 6, 1, 112, 2, 249, 14, 25, 234, 115, 7, 3, 1, + 112, 2, 249, 14, 25, 234, 115, 7, 6, 1, 112, 2, 61, 71, 25, 234, 115, 7, + 3, 1, 112, 2, 61, 71, 25, 234, 115, 7, 6, 1, 254, 235, 2, 234, 115, 7, 3, + 1, 254, 235, 2, 234, 115, 7, 6, 1, 245, 68, 2, 92, 7, 3, 1, 245, 68, 2, + 92, 7, 6, 1, 245, 68, 2, 251, 130, 7, 3, 1, 245, 68, 2, 251, 130, 7, 6, + 1, 237, 18, 2, 251, 130, 7, 3, 1, 237, 18, 2, 251, 130, 7, 6, 1, 142, 2, + 230, 162, 7, 3, 1, 142, 2, 230, 162, 7, 6, 1, 142, 2, 230, 163, 25, 234, + 115, 7, 3, 1, 142, 2, 230, 163, 25, 234, 115, 7, 6, 1, 246, 77, 2, 251, + 130, 7, 3, 1, 246, 77, 2, 251, 130, 7, 3, 1, 237, 127, 2, 251, 130, 7, 6, + 1, 247, 75, 7, 6, 1, 250, 47, 2, 3, 1, 217, 157, 7, 3, 1, 247, 75, 7, 6, + 1, 245, 68, 2, 168, 7, 3, 1, 245, 68, 2, 168, 7, 6, 1, 242, 152, 7, 6, 1, + 218, 154, 7, 6, 1, 233, 34, 2, 244, 36, 7, 3, 1, 233, 34, 2, 244, 36, 7, + 6, 1, 112, 2, 227, 94, 71, 25, 168, 7, 3, 1, 112, 2, 227, 94, 71, 25, + 168, 7, 6, 1, 254, 235, 2, 168, 7, 3, 1, 254, 235, 2, 168, 7, 6, 1, 142, + 2, 214, 25, 168, 7, 3, 1, 142, 2, 214, 25, 168, 7, 6, 1, 112, 2, 51, 244, + 36, 7, 3, 1, 112, 2, 51, 244, 36, 7, 6, 1, 112, 2, 237, 170, 252, 8, 7, + 3, 1, 112, 2, 237, 170, 252, 8, 7, 6, 1, 178, 2, 51, 244, 36, 7, 3, 1, + 178, 2, 51, 244, 36, 7, 6, 1, 178, 2, 237, 170, 252, 8, 7, 3, 1, 178, 2, + 237, 170, 252, 8, 7, 6, 1, 242, 107, 2, 51, 244, 36, 7, 3, 1, 242, 107, + 2, 51, 244, 36, 7, 6, 1, 242, 107, 2, 237, 170, 252, 8, 7, 3, 1, 242, + 107, 2, 237, 170, 252, 8, 7, 6, 1, 142, 2, 51, 244, 36, 7, 3, 1, 142, 2, + 51, 244, 36, 7, 6, 1, 142, 2, 237, 170, 252, 8, 7, 3, 1, 142, 2, 237, + 170, 252, 8, 7, 6, 1, 228, 39, 2, 51, 244, 36, 7, 3, 1, 228, 39, 2, 51, + 244, 36, 7, 6, 1, 228, 39, 2, 237, 170, 252, 8, 7, 3, 1, 228, 39, 2, 237, + 170, 252, 8, 7, 6, 1, 105, 2, 51, 244, 36, 7, 3, 1, 105, 2, 51, 244, 36, + 7, 6, 1, 105, 2, 237, 170, 252, 8, 7, 3, 1, 105, 2, 237, 170, 252, 8, 7, + 6, 1, 226, 235, 2, 250, 169, 56, 7, 3, 1, 226, 235, 2, 250, 169, 56, 7, + 6, 1, 222, 202, 2, 250, 169, 56, 7, 3, 1, 222, 202, 2, 250, 169, 56, 7, + 6, 1, 217, 218, 7, 3, 1, 217, 218, 7, 6, 1, 243, 226, 2, 251, 130, 7, 3, + 1, 243, 226, 2, 251, 130, 7, 6, 1, 233, 34, 2, 171, 45, 235, 106, 7, 3, + 1, 250, 47, 2, 250, 80, 7, 6, 1, 230, 86, 7, 3, 1, 230, 86, 7, 6, 1, 217, + 158, 2, 96, 7, 3, 1, 217, 158, 2, 96, 7, 6, 1, 112, 2, 61, 50, 7, 3, 1, + 112, 2, 61, 50, 7, 6, 1, 178, 2, 251, 92, 7, 3, 1, 178, 2, 251, 92, 7, 6, + 1, 142, 2, 249, 14, 25, 234, 115, 7, 3, 1, 142, 2, 249, 14, 25, 234, 115, + 7, 6, 1, 142, 2, 221, 180, 25, 234, 115, 7, 3, 1, 142, 2, 221, 180, 25, + 234, 115, 7, 6, 1, 142, 2, 61, 50, 7, 3, 1, 142, 2, 61, 50, 7, 6, 1, 142, + 2, 61, 71, 25, 234, 115, 7, 3, 1, 142, 2, 61, 71, 25, 234, 115, 7, 6, 1, + 218, 91, 2, 234, 115, 7, 3, 1, 218, 91, 2, 234, 115, 7, 3, 1, 235, 202, + 2, 250, 80, 7, 3, 1, 233, 34, 2, 250, 80, 7, 3, 1, 222, 202, 2, 250, 80, + 7, 3, 1, 248, 144, 237, 126, 7, 3, 1, 249, 135, 248, 233, 7, 3, 1, 228, + 99, 248, 233, 7, 6, 1, 112, 2, 92, 7, 6, 1, 251, 203, 2, 92, 7, 3, 1, + 251, 203, 2, 92, 7, 6, 1, 235, 202, 2, 135, 7, 6, 1, 222, 202, 2, 249, + 11, 92, 7, 3, 1, 226, 235, 2, 223, 33, 222, 135, 7, 3, 1, 217, 158, 2, + 223, 33, 222, 135, 7, 6, 1, 244, 73, 223, 136, 7, 3, 1, 244, 73, 223, + 136, 7, 6, 1, 49, 2, 92, 7, 6, 1, 105, 135, 7, 6, 1, 215, 216, 216, 7, 6, + 1, 178, 2, 92, 7, 3, 1, 178, 2, 92, 7, 6, 1, 237, 127, 2, 92, 7, 3, 1, + 237, 127, 2, 92, 7, 6, 1, 3, 228, 164, 2, 242, 247, 222, 135, 7, 3, 1, + 228, 164, 2, 242, 247, 222, 135, 7, 6, 1, 228, 39, 2, 92, 7, 3, 1, 228, + 39, 2, 92, 7, 6, 1, 218, 91, 2, 92, 7, 3, 1, 218, 91, 2, 92, 7, 3, 1, + 215, 60, 7, 3, 1, 254, 146, 7, 3, 1, 215, 254, 146, 7, 3, 1, 49, 2, 96, + 7, 3, 1, 230, 119, 74, 7, 3, 1, 251, 203, 2, 250, 80, 7, 3, 1, 250, 47, + 2, 222, 135, 7, 3, 1, 250, 47, 2, 96, 7, 3, 1, 210, 73, 7, 3, 1, 226, + 104, 7, 3, 1, 226, 105, 2, 96, 7, 3, 1, 230, 119, 73, 7, 3, 1, 210, 230, + 119, 73, 7, 3, 1, 210, 230, 119, 178, 2, 96, 7, 3, 1, 250, 197, 210, 230, + 119, 73, 7, 3, 1, 248, 144, 237, 127, 2, 92, 7, 3, 1, 245, 68, 2, 96, 7, + 3, 1, 102, 245, 67, 7, 1, 3, 6, 245, 67, 7, 3, 1, 244, 231, 7, 3, 1, 227, + 237, 242, 189, 7, 3, 1, 215, 243, 225, 7, 3, 1, 243, 226, 2, 96, 7, 3, 1, + 243, 137, 2, 96, 7, 3, 1, 242, 107, 2, 92, 7, 3, 1, 237, 162, 7, 1, 3, 6, + 72, 7, 3, 1, 235, 202, 2, 233, 193, 221, 179, 7, 3, 1, 235, 202, 2, 252, + 116, 7, 3, 1, 235, 202, 2, 227, 164, 96, 7, 3, 1, 235, 81, 7, 3, 1, 215, + 189, 7, 3, 1, 215, 234, 187, 2, 171, 235, 106, 7, 3, 1, 234, 187, 2, 96, + 7, 3, 1, 233, 34, 2, 42, 96, 7, 3, 1, 233, 34, 2, 227, 164, 96, 7, 1, 3, + 6, 207, 7, 3, 1, 252, 196, 74, 7, 1, 3, 6, 230, 167, 7, 3, 1, 250, 197, + 230, 143, 7, 3, 1, 229, 129, 7, 3, 1, 215, 152, 7, 3, 1, 215, 228, 39, 2, + 171, 235, 106, 7, 3, 1, 215, 228, 39, 2, 96, 7, 3, 1, 228, 39, 2, 171, + 235, 106, 7, 3, 1, 228, 39, 2, 222, 135, 7, 3, 1, 228, 39, 2, 245, 173, + 7, 3, 1, 210, 228, 39, 2, 245, 173, 7, 1, 3, 6, 152, 7, 1, 3, 6, 237, + 170, 152, 7, 3, 1, 226, 235, 2, 96, 7, 3, 1, 246, 133, 7, 3, 1, 248, 144, + 237, 127, 2, 214, 25, 96, 7, 3, 1, 223, 224, 210, 246, 133, 7, 3, 1, 246, + 134, 2, 250, 80, 7, 3, 1, 215, 222, 201, 7, 3, 1, 222, 202, 2, 227, 164, + 96, 7, 3, 1, 105, 135, 7, 3, 1, 220, 57, 7, 3, 1, 220, 11, 2, 96, 7, 3, + 1, 215, 216, 216, 7, 3, 1, 215, 219, 40, 7, 3, 1, 215, 218, 90, 7, 1, 3, + 6, 218, 90, 7, 3, 1, 217, 158, 2, 227, 164, 96, 7, 3, 1, 217, 158, 2, + 250, 80, 7, 3, 1, 246, 76, 7, 3, 1, 246, 77, 2, 250, 80, 7, 1, 244, 73, + 223, 136, 7, 1, 229, 133, 219, 70, 245, 100, 7, 1, 237, 170, 244, 73, + 223, 136, 7, 1, 223, 124, 251, 202, 7, 1, 252, 74, 250, 204, 7, 1, 3, 6, + 253, 204, 7, 3, 1, 250, 197, 230, 119, 73, 7, 1, 3, 6, 245, 68, 2, 96, 7, + 1, 3, 6, 243, 225, 7, 3, 1, 237, 127, 2, 250, 97, 7, 3, 1, 215, 237, 17, + 7, 1, 3, 6, 153, 7, 3, 1, 228, 164, 2, 96, 7, 1, 244, 73, 223, 137, 2, + 92, 7, 1, 210, 244, 73, 223, 137, 2, 92, 7, 3, 1, 247, 76, 248, 233, 7, + 3, 1, 249, 37, 248, 233, 7, 3, 1, 247, 76, 248, 234, 2, 250, 80, 7, 3, 1, + 221, 57, 248, 233, 7, 3, 1, 222, 55, 248, 233, 7, 3, 1, 222, 94, 248, + 234, 2, 250, 80, 7, 3, 1, 245, 213, 248, 233, 7, 3, 1, 234, 233, 248, + 233, 7, 3, 1, 234, 188, 248, 233, 7, 1, 252, 74, 229, 168, 7, 1, 252, 81, + 229, 168, 7, 3, 1, 215, 243, 226, 2, 245, 173, 7, 3, 1, 215, 243, 226, 2, + 245, 174, 25, 222, 135, 58, 1, 3, 243, 225, 58, 1, 3, 243, 226, 2, 96, + 58, 1, 3, 237, 126, 58, 1, 3, 152, 58, 1, 3, 215, 152, 58, 1, 3, 215, + 228, 39, 2, 96, 58, 1, 3, 6, 237, 170, 152, 58, 1, 3, 219, 40, 58, 1, 3, + 218, 90, 58, 1, 228, 235, 58, 1, 51, 228, 235, 58, 1, 215, 250, 168, 58, + 1, 254, 79, 58, 1, 210, 250, 168, 58, 1, 45, 144, 227, 93, 58, 1, 42, + 144, 227, 93, 58, 1, 244, 73, 223, 136, 58, 1, 210, 244, 73, 223, 136, + 58, 1, 42, 254, 20, 58, 1, 45, 254, 20, 58, 1, 108, 254, 20, 58, 1, 113, + 254, 20, 58, 1, 250, 217, 255, 0, 251, 130, 58, 1, 69, 235, 43, 58, 1, + 234, 115, 58, 1, 254, 248, 255, 0, 58, 1, 244, 37, 255, 0, 58, 1, 109, + 69, 235, 43, 58, 1, 109, 234, 115, 58, 1, 109, 244, 37, 255, 0, 58, 1, + 109, 254, 248, 255, 0, 58, 1, 221, 87, 250, 175, 58, 1, 144, 221, 87, + 250, 175, 58, 1, 251, 83, 45, 144, 227, 93, 58, 1, 251, 83, 42, 144, 227, + 93, 58, 1, 108, 222, 143, 58, 1, 113, 222, 143, 58, 1, 88, 55, 58, 1, + 233, 155, 55, 252, 8, 61, 50, 227, 94, 50, 230, 162, 3, 221, 179, 51, + 254, 248, 255, 0, 58, 1, 227, 148, 96, 58, 1, 250, 101, 255, 0, 58, 1, 3, + 244, 231, 58, 1, 3, 153, 58, 1, 3, 198, 58, 1, 3, 218, 151, 58, 1, 3, + 210, 244, 73, 223, 136, 58, 1, 246, 85, 145, 135, 58, 1, 116, 145, 135, + 58, 1, 233, 194, 145, 135, 58, 1, 109, 145, 135, 58, 1, 246, 84, 145, + 135, 58, 1, 217, 241, 249, 52, 145, 78, 58, 1, 218, 46, 249, 52, 145, 78, + 58, 1, 219, 68, 58, 1, 220, 84, 58, 1, 51, 254, 79, 58, 1, 109, 113, 254, + 20, 58, 1, 109, 108, 254, 20, 58, 1, 109, 42, 254, 20, 58, 1, 109, 45, + 254, 20, 58, 1, 109, 227, 93, 58, 1, 233, 193, 244, 37, 255, 0, 58, 1, + 233, 193, 51, 244, 37, 255, 0, 58, 1, 233, 193, 51, 254, 248, 255, 0, 58, + 1, 109, 221, 179, 58, 1, 227, 241, 250, 175, 58, 1, 252, 131, 116, 221, + 132, 58, 1, 246, 190, 116, 221, 132, 58, 1, 252, 131, 109, 221, 132, 58, + 1, 246, 190, 109, 221, 132, 58, 1, 224, 237, 58, 1, 230, 119, 224, 237, + 58, 1, 109, 42, 65, 36, 244, 37, 255, 0, 36, 254, 248, 255, 0, 36, 250, + 217, 255, 0, 36, 221, 179, 36, 234, 115, 36, 230, 73, 36, 252, 8, 36, 61, + 50, 36, 249, 13, 36, 242, 247, 50, 36, 227, 94, 50, 36, 51, 254, 248, + 255, 0, 36, 251, 130, 36, 69, 235, 44, 50, 36, 51, 69, 235, 44, 50, 36, + 51, 244, 37, 255, 0, 36, 251, 146, 36, 237, 170, 252, 8, 36, 215, 250, + 169, 50, 36, 250, 169, 50, 36, 210, 250, 169, 50, 36, 250, 169, 71, 227, + 109, 36, 244, 37, 255, 1, 56, 36, 254, 248, 255, 1, 56, 36, 42, 222, 144, + 56, 36, 45, 222, 144, 56, 36, 42, 254, 120, 50, 36, 242, 189, 36, 42, + 144, 227, 94, 56, 36, 108, 222, 144, 56, 36, 113, 222, 144, 56, 36, 88, + 5, 56, 36, 233, 155, 5, 56, 36, 230, 27, 242, 247, 56, 36, 227, 164, 242, + 247, 56, 36, 61, 56, 36, 249, 14, 56, 36, 227, 94, 56, 36, 250, 169, 56, + 36, 251, 92, 36, 230, 162, 36, 69, 235, 44, 56, 36, 252, 4, 56, 36, 237, + 170, 51, 254, 50, 56, 36, 251, 131, 56, 36, 250, 217, 255, 1, 56, 36, + 252, 9, 56, 36, 237, 170, 252, 9, 56, 36, 221, 180, 56, 36, 234, 116, 56, + 36, 109, 235, 43, 36, 51, 109, 235, 43, 36, 221, 180, 230, 74, 36, 224, + 192, 214, 230, 74, 36, 171, 214, 230, 74, 36, 224, 192, 224, 18, 230, 74, + 36, 171, 224, 18, 230, 74, 36, 45, 144, 227, 94, 56, 36, 237, 170, 252, + 4, 56, 36, 40, 56, 36, 226, 93, 56, 36, 218, 152, 50, 36, 69, 221, 179, + 36, 51, 230, 73, 36, 244, 37, 145, 78, 36, 254, 248, 145, 78, 36, 23, + 229, 163, 36, 23, 236, 33, 36, 23, 249, 8, 221, 123, 36, 23, 217, 207, + 36, 252, 4, 50, 36, 246, 154, 5, 56, 36, 51, 69, 235, 44, 56, 36, 42, + 254, 120, 56, 36, 212, 221, 180, 50, 36, 242, 251, 50, 36, 254, 151, 114, + 199, 50, 36, 42, 45, 76, 56, 36, 220, 53, 76, 56, 36, 244, 41, 237, 54, + 36, 45, 254, 21, 50, 36, 42, 144, 227, 94, 50, 36, 245, 210, 36, 218, + 152, 56, 36, 42, 254, 21, 56, 36, 45, 254, 21, 56, 36, 45, 254, 21, 25, + 108, 254, 21, 56, 36, 45, 144, 227, 94, 50, 36, 61, 71, 227, 109, 36, + 253, 252, 56, 36, 51, 227, 94, 56, 36, 217, 33, 50, 36, 51, 252, 9, 56, + 36, 51, 252, 8, 36, 51, 234, 115, 36, 51, 234, 116, 56, 36, 51, 221, 179, + 36, 51, 237, 170, 252, 8, 36, 51, 90, 76, 56, 36, 7, 3, 1, 60, 36, 7, 3, + 1, 73, 36, 7, 3, 1, 72, 36, 7, 3, 1, 74, 36, 7, 3, 1, 68, 36, 7, 3, 1, + 251, 202, 36, 7, 3, 1, 250, 46, 36, 7, 3, 1, 243, 225, 36, 7, 3, 1, 189, + 36, 7, 3, 1, 152, 36, 7, 3, 1, 222, 201, 36, 7, 3, 1, 216, 216, 36, 7, 3, + 1, 218, 151, 23, 6, 1, 243, 127, 23, 3, 1, 243, 127, 23, 6, 1, 254, 49, + 226, 142, 23, 3, 1, 254, 49, 226, 142, 23, 231, 107, 55, 23, 234, 237, + 231, 107, 55, 23, 6, 1, 230, 15, 248, 240, 23, 3, 1, 230, 15, 248, 240, + 23, 217, 207, 23, 3, 210, 234, 218, 224, 128, 100, 23, 3, 247, 143, 234, + 218, 224, 128, 100, 23, 3, 210, 247, 143, 234, 218, 224, 128, 100, 23, + 228, 82, 78, 23, 221, 123, 23, 249, 8, 221, 123, 23, 6, 1, 254, 147, 2, + 221, 123, 23, 254, 110, 222, 73, 23, 6, 1, 246, 157, 2, 221, 123, 23, 6, + 1, 246, 122, 2, 221, 123, 23, 6, 1, 237, 163, 2, 221, 123, 23, 6, 1, 230, + 142, 2, 221, 123, 23, 6, 1, 220, 58, 2, 221, 123, 23, 6, 1, 230, 144, 2, + 221, 123, 23, 3, 1, 237, 163, 2, 249, 8, 25, 221, 123, 23, 6, 1, 254, + 146, 23, 6, 1, 252, 102, 23, 6, 1, 244, 231, 23, 6, 1, 249, 62, 23, 6, 1, + 246, 156, 23, 6, 1, 217, 83, 23, 6, 1, 246, 121, 23, 6, 1, 222, 6, 23, 6, + 1, 237, 162, 23, 6, 1, 236, 221, 23, 6, 1, 235, 156, 23, 6, 1, 233, 99, + 23, 6, 1, 231, 144, 23, 6, 1, 218, 130, 23, 6, 1, 230, 141, 23, 6, 1, + 229, 108, 23, 6, 1, 227, 149, 23, 6, 1, 224, 127, 23, 6, 1, 222, 105, 23, + 6, 1, 220, 57, 23, 6, 1, 229, 129, 23, 6, 1, 251, 31, 23, 6, 1, 228, 212, + 23, 6, 1, 230, 143, 23, 6, 1, 237, 163, 2, 249, 7, 23, 6, 1, 220, 58, 2, + 249, 7, 23, 3, 1, 254, 147, 2, 221, 123, 23, 3, 1, 246, 157, 2, 221, 123, + 23, 3, 1, 246, 122, 2, 221, 123, 23, 3, 1, 237, 163, 2, 221, 123, 23, 3, + 1, 220, 58, 2, 249, 8, 25, 221, 123, 23, 3, 1, 254, 146, 23, 3, 1, 252, + 102, 23, 3, 1, 244, 231, 23, 3, 1, 249, 62, 23, 3, 1, 246, 156, 23, 3, 1, + 217, 83, 23, 3, 1, 246, 121, 23, 3, 1, 222, 6, 23, 3, 1, 237, 162, 23, 3, + 1, 236, 221, 23, 3, 1, 235, 156, 23, 3, 1, 233, 99, 23, 3, 1, 231, 144, + 23, 3, 1, 218, 130, 23, 3, 1, 230, 141, 23, 3, 1, 229, 108, 23, 3, 1, + 227, 149, 23, 3, 1, 39, 224, 127, 23, 3, 1, 224, 127, 23, 3, 1, 222, 105, + 23, 3, 1, 220, 57, 23, 3, 1, 229, 129, 23, 3, 1, 251, 31, 23, 3, 1, 228, + 212, 23, 3, 1, 230, 143, 23, 3, 1, 237, 163, 2, 249, 7, 23, 3, 1, 220, + 58, 2, 249, 7, 23, 3, 1, 230, 142, 2, 221, 123, 23, 3, 1, 220, 58, 2, + 221, 123, 23, 3, 1, 230, 144, 2, 221, 123, 23, 6, 236, 244, 100, 23, 252, + 103, 100, 23, 222, 7, 100, 23, 220, 58, 2, 242, 247, 100, 23, 220, 58, 2, + 254, 248, 25, 242, 247, 100, 23, 220, 58, 2, 249, 14, 25, 242, 247, 100, + 23, 229, 130, 100, 23, 229, 109, 100, 23, 236, 244, 100, 23, 1, 254, 49, + 236, 37, 23, 3, 1, 254, 49, 236, 37, 23, 1, 223, 144, 23, 3, 1, 223, 144, + 23, 1, 248, 240, 23, 3, 1, 248, 240, 23, 1, 236, 37, 23, 3, 1, 236, 37, + 23, 1, 226, 142, 23, 3, 1, 226, 142, 75, 6, 1, 224, 238, 75, 3, 1, 224, + 238, 75, 6, 1, 245, 219, 75, 3, 1, 245, 219, 75, 6, 1, 236, 135, 75, 3, + 1, 236, 135, 75, 6, 1, 242, 242, 75, 3, 1, 242, 242, 75, 6, 1, 244, 226, + 75, 3, 1, 244, 226, 75, 6, 1, 224, 211, 75, 3, 1, 224, 211, 75, 6, 1, + 249, 75, 75, 3, 1, 249, 75, 23, 236, 222, 100, 23, 227, 150, 100, 23, + 234, 218, 224, 128, 100, 23, 1, 217, 212, 23, 6, 222, 7, 100, 23, 234, + 218, 246, 157, 100, 23, 210, 234, 218, 246, 157, 100, 23, 6, 1, 224, 200, + 23, 3, 1, 224, 200, 23, 6, 234, 218, 224, 128, 100, 23, 6, 1, 226, 140, + 23, 3, 1, 226, 140, 23, 227, 150, 2, 214, 100, 23, 6, 210, 234, 218, 224, + 128, 100, 23, 6, 247, 143, 234, 218, 224, 128, 100, 23, 6, 210, 247, 143, + 234, 218, 224, 128, 100, 31, 6, 1, 238, 27, 2, 244, 36, 31, 6, 1, 237, + 166, 31, 6, 1, 248, 182, 31, 6, 1, 244, 78, 31, 6, 1, 220, 99, 238, 26, + 31, 6, 1, 247, 73, 31, 6, 1, 251, 211, 72, 31, 6, 1, 217, 250, 31, 6, 1, + 237, 114, 31, 6, 1, 235, 20, 31, 6, 1, 232, 15, 31, 6, 1, 221, 46, 31, 6, + 1, 236, 76, 31, 6, 1, 242, 107, 2, 244, 36, 31, 6, 1, 224, 192, 68, 31, + 6, 1, 247, 69, 31, 6, 1, 60, 31, 6, 1, 252, 144, 31, 6, 1, 219, 165, 31, + 6, 1, 244, 116, 31, 6, 1, 249, 92, 31, 6, 1, 238, 26, 31, 6, 1, 217, 72, + 31, 6, 1, 217, 92, 31, 6, 1, 72, 31, 6, 1, 224, 192, 72, 31, 6, 1, 175, + 31, 6, 1, 246, 217, 31, 6, 1, 246, 205, 31, 6, 1, 246, 197, 31, 6, 1, 74, + 31, 6, 1, 229, 198, 31, 6, 1, 246, 148, 31, 6, 1, 246, 138, 31, 6, 1, + 222, 87, 31, 6, 1, 68, 31, 6, 1, 246, 244, 31, 6, 1, 155, 31, 6, 1, 221, + 50, 31, 6, 1, 251, 46, 31, 6, 1, 225, 25, 31, 6, 1, 224, 248, 31, 6, 1, + 243, 181, 55, 31, 6, 1, 218, 7, 31, 6, 1, 224, 21, 55, 31, 6, 1, 73, 31, + 6, 1, 217, 200, 31, 6, 1, 184, 31, 3, 1, 60, 31, 3, 1, 252, 144, 31, 3, + 1, 219, 165, 31, 3, 1, 244, 116, 31, 3, 1, 249, 92, 31, 3, 1, 238, 26, + 31, 3, 1, 217, 72, 31, 3, 1, 217, 92, 31, 3, 1, 72, 31, 3, 1, 224, 192, + 72, 31, 3, 1, 175, 31, 3, 1, 246, 217, 31, 3, 1, 246, 205, 31, 3, 1, 246, + 197, 31, 3, 1, 74, 31, 3, 1, 229, 198, 31, 3, 1, 246, 148, 31, 3, 1, 246, + 138, 31, 3, 1, 222, 87, 31, 3, 1, 68, 31, 3, 1, 246, 244, 31, 3, 1, 155, + 31, 3, 1, 221, 50, 31, 3, 1, 251, 46, 31, 3, 1, 225, 25, 31, 3, 1, 224, + 248, 31, 3, 1, 243, 181, 55, 31, 3, 1, 218, 7, 31, 3, 1, 224, 21, 55, 31, + 3, 1, 73, 31, 3, 1, 217, 200, 31, 3, 1, 184, 31, 3, 1, 238, 27, 2, 244, + 36, 31, 3, 1, 237, 166, 31, 3, 1, 248, 182, 31, 3, 1, 244, 78, 31, 3, 1, + 220, 99, 238, 26, 31, 3, 1, 247, 73, 31, 3, 1, 251, 211, 72, 31, 3, 1, + 217, 250, 31, 3, 1, 237, 114, 31, 3, 1, 235, 20, 31, 3, 1, 232, 15, 31, + 3, 1, 221, 46, 31, 3, 1, 236, 76, 31, 3, 1, 242, 107, 2, 244, 36, 31, 3, + 1, 224, 192, 68, 31, 3, 1, 247, 69, 31, 6, 1, 230, 143, 31, 3, 1, 230, + 143, 31, 6, 1, 218, 36, 31, 3, 1, 218, 36, 31, 6, 1, 237, 160, 73, 31, 3, + 1, 237, 160, 73, 31, 6, 1, 235, 25, 217, 178, 31, 3, 1, 235, 25, 217, + 178, 31, 6, 1, 237, 160, 235, 25, 217, 178, 31, 3, 1, 237, 160, 235, 25, + 217, 178, 31, 6, 1, 252, 76, 217, 178, 31, 3, 1, 252, 76, 217, 178, 31, + 6, 1, 237, 160, 252, 76, 217, 178, 31, 3, 1, 237, 160, 252, 76, 217, 178, + 31, 6, 1, 236, 11, 31, 3, 1, 236, 11, 31, 6, 1, 228, 212, 31, 3, 1, 228, + 212, 31, 6, 1, 245, 171, 31, 3, 1, 245, 171, 31, 6, 1, 237, 128, 31, 3, + 1, 237, 128, 31, 6, 1, 237, 129, 2, 51, 244, 37, 255, 0, 31, 3, 1, 237, + 129, 2, 51, 244, 37, 255, 0, 31, 6, 1, 220, 102, 31, 3, 1, 220, 102, 31, + 6, 1, 227, 57, 230, 143, 31, 3, 1, 227, 57, 230, 143, 31, 6, 1, 230, 144, + 2, 221, 160, 31, 3, 1, 230, 144, 2, 221, 160, 31, 6, 1, 230, 92, 31, 3, + 1, 230, 92, 31, 6, 1, 236, 37, 31, 3, 1, 236, 37, 31, 221, 230, 55, 36, + 31, 221, 160, 36, 31, 230, 28, 36, 31, 193, 229, 39, 36, 31, 209, 229, + 39, 36, 31, 229, 25, 36, 31, 242, 162, 221, 230, 55, 36, 31, 233, 162, + 55, 31, 6, 1, 224, 192, 242, 107, 2, 222, 135, 31, 3, 1, 224, 192, 242, + 107, 2, 222, 135, 31, 6, 1, 225, 63, 55, 31, 3, 1, 225, 63, 55, 31, 6, 1, + 246, 149, 2, 221, 202, 31, 3, 1, 246, 149, 2, 221, 202, 31, 6, 1, 244, + 117, 2, 220, 56, 31, 3, 1, 244, 117, 2, 220, 56, 31, 6, 1, 244, 117, 2, + 92, 31, 3, 1, 244, 117, 2, 92, 31, 6, 1, 244, 117, 2, 233, 193, 96, 31, + 3, 1, 244, 117, 2, 233, 193, 96, 31, 6, 1, 217, 73, 2, 249, 48, 31, 3, 1, + 217, 73, 2, 249, 48, 31, 6, 1, 217, 93, 2, 249, 48, 31, 3, 1, 217, 93, 2, + 249, 48, 31, 6, 1, 206, 2, 249, 48, 31, 3, 1, 206, 2, 249, 48, 31, 6, 1, + 206, 2, 69, 92, 31, 3, 1, 206, 2, 69, 92, 31, 6, 1, 206, 2, 92, 31, 3, 1, + 206, 2, 92, 31, 6, 1, 252, 186, 175, 31, 3, 1, 252, 186, 175, 31, 6, 1, + 246, 198, 2, 249, 48, 31, 3, 1, 246, 198, 2, 249, 48, 31, 6, 24, 246, + 198, 244, 116, 31, 3, 24, 246, 198, 244, 116, 31, 6, 1, 229, 199, 2, 233, + 193, 96, 31, 3, 1, 229, 199, 2, 233, 193, 96, 31, 6, 1, 255, 6, 155, 31, + 3, 1, 255, 6, 155, 31, 6, 1, 246, 139, 2, 249, 48, 31, 3, 1, 246, 139, 2, + 249, 48, 31, 6, 1, 222, 88, 2, 249, 48, 31, 3, 1, 222, 88, 2, 249, 48, + 31, 6, 1, 223, 130, 68, 31, 3, 1, 223, 130, 68, 31, 6, 1, 223, 130, 105, + 2, 92, 31, 3, 1, 223, 130, 105, 2, 92, 31, 6, 1, 243, 214, 2, 249, 48, + 31, 3, 1, 243, 214, 2, 249, 48, 31, 6, 24, 222, 88, 221, 50, 31, 3, 24, + 222, 88, 221, 50, 31, 6, 1, 251, 47, 2, 249, 48, 31, 3, 1, 251, 47, 2, + 249, 48, 31, 6, 1, 251, 47, 2, 69, 92, 31, 3, 1, 251, 47, 2, 69, 92, 31, + 6, 1, 224, 222, 31, 3, 1, 224, 222, 31, 6, 1, 255, 6, 251, 46, 31, 3, 1, + 255, 6, 251, 46, 31, 6, 1, 255, 6, 251, 47, 2, 249, 48, 31, 3, 1, 255, 6, + 251, 47, 2, 249, 48, 31, 1, 230, 22, 31, 6, 1, 217, 73, 2, 252, 8, 31, 3, + 1, 217, 73, 2, 252, 8, 31, 6, 1, 206, 2, 96, 31, 3, 1, 206, 2, 96, 31, 6, + 1, 246, 218, 2, 222, 135, 31, 3, 1, 246, 218, 2, 222, 135, 31, 6, 1, 246, + 198, 2, 96, 31, 3, 1, 246, 198, 2, 96, 31, 6, 1, 246, 198, 2, 222, 135, + 31, 3, 1, 246, 198, 2, 222, 135, 31, 6, 1, 236, 144, 251, 46, 31, 3, 1, + 236, 144, 251, 46, 31, 6, 1, 246, 206, 2, 222, 135, 31, 3, 1, 246, 206, + 2, 222, 135, 31, 3, 1, 230, 22, 31, 6, 1, 112, 2, 252, 8, 31, 3, 1, 112, + 2, 252, 8, 31, 6, 1, 112, 2, 249, 13, 31, 3, 1, 112, 2, 249, 13, 31, 6, + 24, 112, 238, 26, 31, 3, 24, 112, 238, 26, 31, 6, 1, 238, 27, 2, 252, 8, + 31, 3, 1, 238, 27, 2, 252, 8, 31, 6, 1, 226, 104, 31, 3, 1, 226, 104, 31, + 6, 1, 226, 105, 2, 249, 13, 31, 3, 1, 226, 105, 2, 249, 13, 31, 6, 1, + 217, 73, 2, 249, 13, 31, 3, 1, 217, 73, 2, 249, 13, 31, 6, 1, 217, 93, 2, + 249, 13, 31, 3, 1, 217, 93, 2, 249, 13, 31, 6, 1, 255, 6, 247, 73, 31, 3, + 1, 255, 6, 247, 73, 31, 6, 1, 242, 107, 2, 234, 115, 31, 3, 1, 242, 107, + 2, 234, 115, 31, 6, 1, 242, 107, 2, 249, 13, 31, 3, 1, 242, 107, 2, 249, + 13, 31, 6, 1, 142, 2, 249, 13, 31, 3, 1, 142, 2, 249, 13, 31, 6, 1, 252, + 196, 74, 31, 3, 1, 252, 196, 74, 31, 6, 1, 252, 196, 142, 2, 249, 13, 31, + 3, 1, 252, 196, 142, 2, 249, 13, 31, 6, 1, 178, 2, 249, 13, 31, 3, 1, + 178, 2, 249, 13, 31, 6, 1, 105, 2, 234, 115, 31, 3, 1, 105, 2, 234, 115, + 31, 6, 1, 105, 2, 249, 13, 31, 3, 1, 105, 2, 249, 13, 31, 6, 1, 105, 2, + 51, 168, 31, 3, 1, 105, 2, 51, 168, 31, 6, 1, 251, 47, 2, 249, 13, 31, 3, + 1, 251, 47, 2, 249, 13, 31, 6, 1, 244, 117, 2, 249, 48, 31, 3, 1, 244, + 117, 2, 249, 48, 31, 6, 1, 218, 8, 2, 249, 13, 31, 3, 1, 218, 8, 2, 249, + 13, 31, 6, 1, 244, 117, 2, 214, 25, 96, 31, 3, 1, 244, 117, 2, 214, 25, + 96, 31, 6, 1, 243, 214, 2, 96, 31, 3, 1, 243, 214, 2, 96, 31, 6, 1, 243, + 214, 2, 92, 31, 3, 1, 243, 214, 2, 92, 31, 6, 1, 236, 45, 249, 92, 31, 3, + 1, 236, 45, 249, 92, 31, 6, 1, 236, 45, 248, 182, 31, 3, 1, 236, 45, 248, + 182, 31, 6, 1, 236, 45, 217, 25, 31, 3, 1, 236, 45, 217, 25, 31, 6, 1, + 236, 45, 247, 67, 31, 3, 1, 236, 45, 247, 67, 31, 6, 1, 236, 45, 235, 20, + 31, 3, 1, 236, 45, 235, 20, 31, 6, 1, 236, 45, 232, 15, 31, 3, 1, 236, + 45, 232, 15, 31, 6, 1, 236, 45, 224, 67, 31, 3, 1, 236, 45, 224, 67, 31, + 6, 1, 236, 45, 221, 156, 31, 3, 1, 236, 45, 221, 156, 31, 6, 1, 210, 217, + 92, 31, 3, 1, 210, 217, 92, 31, 6, 1, 246, 218, 2, 96, 31, 3, 1, 246, + 218, 2, 96, 31, 6, 1, 235, 79, 31, 3, 1, 235, 79, 31, 6, 1, 227, 151, 31, + 3, 1, 227, 151, 31, 6, 1, 218, 65, 31, 3, 1, 218, 65, 31, 6, 1, 228, 155, + 31, 3, 1, 228, 155, 31, 6, 1, 218, 227, 31, 3, 1, 218, 227, 31, 6, 1, + 254, 165, 175, 31, 3, 1, 254, 165, 175, 31, 6, 1, 246, 218, 2, 233, 193, + 96, 31, 3, 1, 246, 218, 2, 233, 193, 96, 31, 6, 1, 246, 198, 2, 233, 193, + 96, 31, 3, 1, 246, 198, 2, 233, 193, 96, 31, 6, 1, 229, 199, 2, 249, 48, + 31, 3, 1, 229, 199, 2, 249, 48, 132, 6, 1, 253, 209, 132, 6, 1, 252, 114, + 132, 6, 1, 244, 93, 132, 6, 1, 249, 207, 132, 6, 1, 246, 254, 132, 6, 1, + 217, 114, 132, 6, 1, 246, 239, 132, 6, 1, 246, 123, 132, 6, 1, 101, 132, + 6, 1, 217, 72, 132, 6, 1, 237, 200, 132, 6, 1, 235, 23, 132, 6, 1, 218, + 133, 132, 6, 1, 251, 169, 132, 6, 1, 236, 168, 132, 6, 1, 243, 4, 132, 6, + 1, 237, 123, 132, 6, 1, 244, 124, 132, 6, 1, 251, 42, 132, 6, 1, 233, + 251, 132, 6, 1, 217, 250, 132, 6, 1, 231, 174, 132, 6, 1, 225, 25, 132, + 6, 1, 219, 72, 132, 6, 1, 251, 69, 132, 6, 1, 229, 187, 132, 6, 1, 237, + 100, 132, 6, 1, 203, 132, 6, 1, 226, 77, 132, 6, 1, 219, 96, 132, 6, 1, + 221, 158, 132, 6, 1, 227, 196, 132, 6, 1, 250, 182, 132, 6, 1, 217, 236, + 132, 6, 1, 229, 61, 132, 6, 1, 236, 178, 132, 6, 1, 230, 161, 132, 6, 1, + 245, 221, 132, 58, 1, 42, 144, 227, 93, 132, 254, 79, 132, 246, 201, 78, + 132, 246, 95, 78, 132, 250, 168, 132, 228, 82, 78, 132, 255, 7, 78, 132, + 3, 1, 253, 209, 132, 3, 1, 252, 114, 132, 3, 1, 244, 93, 132, 3, 1, 249, + 207, 132, 3, 1, 246, 254, 132, 3, 1, 217, 114, 132, 3, 1, 246, 239, 132, + 3, 1, 246, 123, 132, 3, 1, 101, 132, 3, 1, 217, 72, 132, 3, 1, 237, 200, + 132, 3, 1, 235, 23, 132, 3, 1, 218, 133, 132, 3, 1, 251, 169, 132, 3, 1, + 236, 168, 132, 3, 1, 243, 4, 132, 3, 1, 237, 123, 132, 3, 1, 244, 124, + 132, 3, 1, 251, 42, 132, 3, 1, 233, 251, 132, 3, 1, 217, 250, 132, 3, 1, + 231, 174, 132, 3, 1, 225, 25, 132, 3, 1, 219, 72, 132, 3, 1, 251, 69, + 132, 3, 1, 229, 187, 132, 3, 1, 237, 100, 132, 3, 1, 203, 132, 3, 1, 226, + 77, 132, 3, 1, 219, 96, 132, 3, 1, 221, 158, 132, 3, 1, 227, 196, 132, 3, + 1, 250, 182, 132, 3, 1, 217, 236, 132, 3, 1, 229, 61, 132, 3, 1, 236, + 178, 132, 3, 1, 230, 161, 132, 3, 1, 245, 221, 132, 3, 24, 246, 255, 217, + 236, 132, 245, 90, 223, 136, 132, 242, 121, 87, 255, 1, 246, 116, 87, + 255, 1, 226, 78, 87, 255, 1, 225, 12, 87, 255, 1, 217, 102, 228, 138, 87, + 255, 1, 217, 102, 244, 246, 87, 255, 1, 221, 168, 87, 255, 1, 227, 158, + 87, 255, 1, 217, 101, 87, 255, 1, 229, 219, 87, 255, 1, 218, 0, 87, 255, + 1, 222, 41, 87, 255, 1, 244, 171, 87, 255, 1, 244, 172, 233, 70, 87, 255, + 1, 244, 169, 87, 255, 1, 228, 139, 229, 242, 87, 255, 1, 222, 70, 244, + 185, 87, 255, 1, 229, 202, 87, 255, 1, 253, 239, 243, 206, 87, 255, 1, + 233, 79, 87, 255, 1, 234, 104, 87, 255, 1, 233, 245, 87, 255, 1, 233, + 246, 236, 179, 87, 255, 1, 249, 153, 87, 255, 1, 228, 150, 87, 255, 1, + 222, 70, 228, 134, 87, 255, 1, 218, 10, 252, 115, 217, 217, 87, 255, 1, + 230, 149, 87, 255, 1, 237, 241, 87, 255, 1, 249, 76, 87, 255, 1, 217, 31, + 87, 164, 234, 54, 250, 221, 87, 229, 32, 224, 224, 87, 229, 32, 243, 172, + 226, 78, 87, 229, 32, 243, 172, 229, 214, 87, 229, 32, 243, 172, 228, + 143, 87, 229, 32, 243, 94, 87, 229, 32, 221, 48, 87, 229, 32, 226, 78, + 87, 229, 32, 229, 214, 87, 229, 32, 228, 143, 87, 229, 32, 242, 254, 87, + 229, 32, 242, 255, 243, 174, 35, 219, 169, 87, 229, 32, 228, 85, 87, 229, + 32, 249, 194, 156, 234, 77, 87, 229, 32, 233, 237, 87, 228, 197, 234, 76, + 87, 229, 32, 227, 248, 87, 228, 197, 229, 220, 87, 229, 32, 224, 210, + 248, 145, 87, 229, 32, 224, 113, 248, 145, 87, 228, 197, 224, 22, 229, + 216, 87, 164, 220, 60, 248, 145, 87, 164, 234, 237, 248, 145, 87, 228, + 197, 231, 104, 243, 205, 87, 229, 32, 228, 144, 228, 138, 87, 1, 254, + 168, 87, 1, 252, 104, 87, 1, 244, 91, 87, 1, 249, 177, 87, 1, 243, 162, + 87, 1, 219, 169, 87, 1, 217, 95, 87, 1, 243, 128, 87, 1, 222, 50, 87, 1, + 217, 220, 87, 1, 39, 236, 246, 87, 1, 236, 246, 87, 1, 235, 152, 87, 1, + 39, 234, 1, 87, 1, 234, 1, 87, 1, 39, 231, 103, 87, 1, 231, 103, 87, 1, + 226, 145, 87, 1, 253, 207, 87, 1, 39, 229, 198, 87, 1, 229, 198, 87, 1, + 39, 221, 51, 87, 1, 221, 51, 87, 1, 228, 107, 87, 1, 227, 174, 87, 1, + 224, 209, 87, 1, 222, 102, 87, 24, 217, 248, 51, 219, 169, 87, 24, 217, + 248, 219, 170, 217, 220, 87, 24, 217, 248, 51, 217, 220, 87, 228, 197, + 244, 171, 87, 228, 197, 244, 169, 12, 54, 55, 12, 5, 226, 139, 12, 245, + 132, 234, 63, 12, 5, 226, 167, 254, 63, 250, 89, 227, 64, 254, 63, 245, + 110, 227, 64, 12, 227, 222, 254, 63, 229, 170, 233, 164, 55, 254, 63, + 229, 170, 222, 66, 221, 232, 55, 254, 214, 55, 12, 250, 168, 12, 249, + 141, 225, 54, 12, 229, 34, 219, 154, 55, 12, 5, 233, 147, 12, 5, 226, + 152, 254, 170, 218, 245, 12, 5, 254, 170, 254, 0, 12, 5, 227, 247, 254, + 169, 12, 5, 227, 251, 254, 155, 254, 116, 12, 5, 222, 128, 12, 3, 116, + 222, 137, 12, 3, 116, 24, 99, 2, 235, 161, 2, 218, 21, 12, 3, 116, 217, + 106, 12, 3, 245, 238, 12, 3, 249, 172, 12, 3, 236, 206, 12, 225, 67, 12, + 221, 78, 61, 228, 197, 78, 12, 228, 82, 78, 12, 1, 243, 192, 12, 1, 99, + 2, 234, 111, 50, 12, 1, 99, 2, 181, 50, 12, 1, 218, 234, 2, 181, 50, 12, + 1, 99, 2, 181, 56, 12, 1, 70, 2, 181, 50, 12, 1, 254, 168, 12, 1, 252, + 128, 12, 1, 222, 78, 234, 72, 12, 1, 222, 77, 12, 1, 222, 19, 12, 1, 237, + 112, 12, 1, 243, 202, 12, 1, 236, 146, 12, 1, 249, 183, 12, 1, 222, 29, + 12, 1, 227, 196, 12, 1, 217, 106, 12, 1, 226, 82, 12, 1, 224, 242, 12, 1, + 226, 170, 12, 1, 249, 202, 12, 1, 222, 137, 12, 1, 217, 109, 12, 1, 254, + 191, 12, 1, 244, 122, 12, 1, 236, 177, 2, 124, 188, 50, 12, 1, 236, 177, + 2, 148, 188, 56, 12, 1, 245, 241, 70, 2, 237, 170, 216, 216, 12, 1, 245, + 241, 70, 2, 124, 188, 50, 12, 1, 245, 241, 70, 2, 148, 188, 50, 12, 222, + 107, 12, 1, 245, 221, 12, 1, 228, 148, 12, 1, 236, 246, 12, 1, 235, 160, + 12, 1, 234, 14, 12, 1, 231, 193, 12, 1, 243, 146, 12, 1, 218, 233, 12, 1, + 99, 234, 92, 12, 1, 218, 21, 12, 245, 236, 12, 249, 170, 12, 236, 204, + 12, 245, 238, 12, 249, 172, 12, 236, 206, 12, 225, 16, 12, 223, 75, 12, + 234, 109, 50, 12, 181, 50, 12, 181, 56, 12, 223, 94, 254, 168, 12, 237, + 170, 249, 172, 12, 164, 231, 194, 244, 107, 12, 216, 255, 12, 29, 5, 3, + 220, 11, 50, 12, 29, 5, 237, 170, 3, 220, 11, 50, 12, 29, 5, 61, 56, 12, + 210, 249, 172, 12, 245, 239, 2, 124, 248, 143, 254, 63, 20, 217, 84, 254, + 63, 20, 107, 254, 63, 20, 103, 254, 63, 20, 160, 254, 63, 20, 154, 254, + 63, 20, 174, 254, 63, 20, 182, 254, 63, 20, 191, 254, 63, 20, 185, 254, + 63, 20, 190, 12, 229, 169, 55, 12, 249, 86, 225, 54, 12, 221, 230, 225, + 54, 12, 245, 170, 229, 30, 223, 156, 12, 1, 248, 144, 252, 128, 12, 1, + 248, 144, 228, 148, 12, 1, 223, 59, 254, 168, 12, 1, 99, 218, 246, 12, 1, + 99, 2, 218, 235, 181, 50, 12, 1, 99, 2, 218, 235, 181, 56, 12, 1, 116, + 243, 192, 12, 1, 116, 181, 254, 168, 12, 1, 116, 181, 218, 233, 12, 1, + 105, 2, 181, 50, 12, 1, 116, 181, 218, 21, 12, 1, 221, 23, 12, 1, 221, + 21, 12, 1, 252, 135, 12, 1, 222, 78, 2, 227, 93, 12, 1, 222, 78, 2, 148, + 188, 71, 247, 129, 12, 1, 229, 187, 12, 1, 222, 75, 12, 1, 252, 126, 12, + 1, 111, 2, 181, 50, 12, 1, 111, 2, 124, 188, 69, 50, 12, 1, 231, 70, 12, + 1, 247, 79, 12, 1, 111, 2, 148, 188, 50, 12, 1, 222, 91, 12, 1, 222, 89, + 12, 1, 249, 127, 12, 1, 249, 184, 2, 227, 93, 12, 1, 249, 184, 2, 61, 56, + 12, 1, 249, 184, 2, 61, 252, 118, 25, 3, 222, 137, 12, 1, 249, 189, 12, + 1, 249, 129, 12, 1, 247, 103, 12, 1, 249, 184, 2, 148, 188, 71, 247, 129, + 12, 1, 249, 184, 2, 245, 116, 188, 50, 12, 1, 227, 48, 12, 1, 227, 197, + 2, 3, 216, 216, 12, 1, 227, 197, 2, 227, 93, 12, 1, 227, 197, 2, 61, 56, + 12, 1, 227, 197, 2, 3, 220, 11, 56, 12, 1, 227, 197, 2, 61, 252, 118, 25, + 61, 50, 12, 1, 227, 197, 2, 124, 188, 50, 12, 1, 237, 109, 12, 1, 227, + 197, 2, 245, 116, 188, 50, 12, 1, 226, 83, 2, 61, 252, 118, 25, 61, 50, + 12, 1, 226, 83, 2, 148, 188, 56, 12, 1, 226, 83, 2, 148, 188, 252, 118, + 25, 148, 188, 50, 12, 1, 226, 171, 2, 124, 188, 56, 12, 1, 226, 171, 2, + 148, 188, 50, 12, 1, 222, 138, 2, 148, 188, 50, 12, 1, 254, 192, 2, 148, + 188, 50, 12, 1, 248, 144, 245, 221, 12, 1, 245, 222, 2, 61, 233, 104, 56, + 12, 1, 245, 222, 2, 61, 56, 12, 1, 219, 158, 12, 1, 245, 222, 2, 148, + 188, 56, 12, 1, 229, 185, 12, 1, 228, 149, 2, 61, 50, 12, 1, 228, 149, 2, + 148, 188, 50, 12, 1, 236, 176, 12, 1, 223, 33, 236, 246, 12, 1, 236, 247, + 2, 227, 93, 12, 1, 236, 247, 2, 61, 50, 12, 1, 232, 117, 12, 1, 236, 247, + 2, 148, 188, 56, 12, 1, 244, 243, 12, 1, 244, 244, 2, 227, 93, 12, 1, + 232, 82, 12, 1, 244, 244, 2, 124, 188, 56, 12, 1, 244, 9, 12, 1, 244, + 244, 2, 148, 188, 50, 12, 1, 235, 161, 2, 3, 216, 216, 12, 1, 235, 161, + 2, 61, 50, 12, 1, 235, 161, 2, 148, 188, 50, 12, 1, 235, 161, 2, 148, + 188, 56, 12, 1, 231, 194, 2, 61, 56, 12, 1, 231, 194, 244, 107, 12, 1, + 227, 78, 12, 1, 231, 194, 2, 227, 93, 12, 1, 231, 194, 2, 148, 188, 50, + 12, 1, 243, 147, 248, 163, 12, 1, 222, 92, 2, 61, 50, 12, 1, 243, 147, 2, + 70, 50, 12, 1, 243, 147, 244, 65, 12, 1, 243, 147, 244, 66, 2, 181, 50, + 12, 1, 222, 78, 234, 73, 244, 65, 12, 1, 218, 234, 2, 227, 93, 12, 1, + 236, 98, 230, 167, 12, 1, 230, 167, 12, 1, 68, 12, 1, 217, 200, 12, 1, + 236, 98, 217, 200, 12, 1, 218, 234, 2, 124, 188, 50, 12, 1, 219, 165, 12, + 1, 245, 241, 218, 21, 12, 1, 70, 2, 222, 135, 12, 1, 70, 2, 3, 216, 216, + 12, 1, 218, 234, 2, 61, 50, 12, 1, 73, 12, 1, 70, 2, 148, 188, 56, 12, 1, + 70, 252, 194, 12, 1, 70, 252, 195, 2, 181, 50, 12, 245, 90, 223, 136, 12, + 1, 254, 234, 12, 3, 116, 24, 226, 171, 2, 235, 161, 2, 99, 234, 92, 12, + 3, 116, 24, 228, 149, 2, 235, 161, 2, 99, 234, 92, 12, 3, 116, 62, 66, + 17, 12, 3, 116, 235, 161, 254, 168, 12, 3, 116, 237, 112, 12, 3, 116, + 148, 248, 143, 12, 3, 116, 226, 82, 12, 246, 190, 117, 253, 211, 12, 223, + 154, 117, 227, 20, 246, 218, 243, 91, 12, 3, 116, 227, 55, 217, 84, 12, + 3, 116, 220, 59, 227, 207, 217, 84, 12, 3, 116, 248, 144, 243, 160, 117, + 236, 146, 12, 3, 116, 62, 47, 17, 12, 3, 109, 226, 82, 12, 3, 116, 234, + 110, 12, 3, 218, 233, 12, 3, 218, 21, 12, 3, 116, 218, 21, 12, 3, 116, + 231, 193, 12, 229, 57, 117, 226, 159, 12, 246, 199, 251, 85, 109, 223, + 136, 12, 246, 199, 251, 85, 116, 223, 136, 12, 227, 55, 116, 223, 137, 2, + 245, 186, 251, 84, 12, 3, 109, 234, 14, 12, 1, 249, 184, 2, 237, 170, + 216, 216, 12, 1, 227, 197, 2, 237, 170, 216, 216, 246, 87, 254, 63, 20, + 217, 84, 246, 87, 254, 63, 20, 107, 246, 87, 254, 63, 20, 103, 246, 87, + 254, 63, 20, 160, 246, 87, 254, 63, 20, 154, 246, 87, 254, 63, 20, 174, + 246, 87, 254, 63, 20, 182, 246, 87, 254, 63, 20, 191, 246, 87, 254, 63, + 20, 185, 246, 87, 254, 63, 20, 190, 12, 1, 224, 243, 2, 61, 56, 12, 1, + 249, 203, 2, 61, 56, 12, 1, 244, 123, 2, 61, 56, 12, 5, 224, 112, 254, + 134, 12, 5, 224, 112, 229, 13, 233, 251, 12, 1, 243, 147, 2, 237, 170, + 216, 216, 166, 246, 190, 117, 229, 240, 166, 223, 55, 245, 90, 223, 136, + 166, 223, 96, 245, 90, 223, 136, 166, 223, 55, 250, 175, 166, 223, 96, + 250, 175, 166, 186, 250, 175, 166, 250, 176, 224, 64, 235, 115, 166, 250, + 176, 224, 64, 227, 109, 166, 223, 55, 250, 176, 224, 64, 235, 115, 166, + 223, 96, 250, 176, 224, 64, 227, 109, 166, 250, 134, 166, 243, 179, 230, + 179, 166, 243, 179, 233, 236, 166, 243, 179, 253, 253, 166, 255, 7, 78, + 166, 1, 254, 171, 166, 1, 223, 59, 254, 171, 166, 1, 252, 101, 166, 1, + 244, 235, 166, 1, 244, 236, 244, 216, 166, 1, 249, 180, 166, 1, 248, 144, + 249, 181, 227, 89, 166, 1, 243, 162, 166, 1, 218, 233, 166, 1, 217, 106, + 166, 1, 243, 126, 166, 1, 222, 46, 166, 1, 222, 47, 244, 216, 166, 1, + 217, 188, 166, 1, 217, 189, 243, 162, 166, 1, 236, 224, 166, 1, 235, 159, + 166, 1, 233, 161, 166, 1, 231, 103, 166, 1, 225, 60, 166, 1, 39, 225, 60, + 166, 1, 73, 166, 1, 229, 198, 166, 1, 210, 229, 198, 166, 1, 226, 168, + 166, 1, 228, 142, 166, 1, 227, 89, 166, 1, 224, 209, 166, 1, 222, 100, + 166, 1, 229, 159, 252, 90, 166, 1, 229, 159, 244, 120, 166, 1, 229, 159, + 249, 32, 166, 228, 203, 50, 166, 228, 203, 56, 166, 228, 203, 247, 142, + 166, 217, 15, 50, 166, 217, 15, 56, 166, 217, 15, 247, 142, 166, 227, + 219, 50, 166, 227, 219, 56, 166, 247, 143, 217, 22, 242, 241, 166, 247, + 143, 217, 22, 254, 117, 166, 243, 165, 50, 166, 243, 165, 56, 166, 243, + 164, 247, 142, 166, 246, 136, 50, 166, 246, 136, 56, 166, 226, 250, 166, + 245, 215, 248, 145, 166, 228, 63, 166, 227, 17, 166, 124, 69, 188, 50, + 166, 124, 69, 188, 56, 166, 148, 188, 50, 166, 148, 188, 56, 166, 230, + 177, 235, 44, 50, 166, 230, 177, 235, 44, 56, 166, 233, 58, 166, 252, + 193, 166, 1, 224, 19, 217, 78, 166, 1, 224, 19, 236, 139, 166, 1, 224, + 19, 245, 231, 12, 1, 252, 129, 2, 148, 188, 242, 191, 56, 12, 1, 252, + 129, 2, 61, 252, 118, 25, 148, 188, 50, 12, 1, 252, 129, 2, 148, 188, + 229, 28, 220, 53, 56, 12, 1, 252, 129, 2, 148, 188, 229, 28, 220, 53, + 252, 118, 25, 124, 188, 50, 12, 1, 252, 129, 2, 124, 188, 252, 118, 25, + 61, 50, 12, 1, 252, 129, 2, 237, 170, 3, 220, 11, 56, 12, 1, 252, 129, 2, + 3, 216, 216, 12, 1, 111, 2, 124, 188, 50, 12, 1, 111, 2, 148, 188, 229, + 28, 220, 53, 56, 12, 1, 249, 184, 2, 124, 188, 219, 102, 252, 118, 25, 3, + 222, 137, 12, 1, 249, 184, 2, 237, 170, 3, 220, 11, 56, 12, 1, 227, 197, + 2, 92, 12, 1, 226, 83, 2, 245, 116, 188, 50, 12, 1, 254, 192, 2, 124, + 188, 50, 12, 1, 254, 192, 2, 148, 188, 229, 28, 247, 130, 50, 12, 1, 254, + 192, 2, 124, 188, 219, 102, 50, 12, 1, 245, 222, 2, 124, 188, 56, 12, 1, + 245, 222, 2, 148, 188, 229, 28, 220, 53, 56, 12, 1, 236, 177, 2, 61, 50, + 12, 1, 236, 177, 2, 148, 188, 50, 12, 1, 236, 177, 2, 148, 188, 229, 28, + 220, 53, 56, 12, 1, 62, 2, 61, 50, 12, 1, 62, 2, 61, 56, 12, 1, 231, 194, + 2, 124, 188, 56, 12, 1, 231, 194, 2, 3, 222, 137, 12, 1, 231, 194, 2, 3, + 216, 216, 12, 1, 235, 161, 2, 135, 12, 1, 227, 197, 2, 124, 188, 219, + 102, 50, 12, 1, 227, 197, 2, 181, 50, 12, 1, 226, 83, 2, 124, 188, 219, + 102, 50, 12, 1, 111, 2, 3, 12, 1, 222, 138, 56, 12, 1, 111, 2, 3, 12, 1, + 222, 138, 25, 124, 248, 143, 12, 1, 226, 83, 2, 3, 12, 1, 222, 138, 25, + 124, 248, 143, 12, 1, 227, 197, 2, 3, 12, 1, 222, 138, 25, 124, 248, 143, + 12, 1, 111, 2, 3, 12, 1, 222, 138, 50, 12, 1, 99, 2, 246, 87, 254, 63, + 20, 124, 50, 12, 1, 99, 2, 246, 87, 254, 63, 20, 148, 50, 12, 1, 245, + 241, 70, 2, 246, 87, 254, 63, 20, 124, 50, 12, 1, 245, 241, 70, 2, 246, + 87, 254, 63, 20, 148, 50, 12, 1, 245, 241, 70, 2, 246, 87, 254, 63, 20, + 245, 116, 56, 12, 1, 218, 234, 2, 246, 87, 254, 63, 20, 124, 50, 12, 1, + 218, 234, 2, 246, 87, 254, 63, 20, 148, 50, 12, 1, 70, 252, 195, 2, 246, + 87, 254, 63, 20, 124, 50, 12, 1, 70, 252, 195, 2, 246, 87, 254, 63, 20, + 148, 50, 12, 1, 111, 2, 246, 87, 254, 63, 20, 245, 116, 56, 12, 1, 226, + 83, 2, 246, 87, 254, 63, 20, 245, 116, 50, 12, 1, 226, 83, 2, 237, 170, + 216, 216, 12, 1, 236, 247, 2, 124, 188, 50, 222, 32, 1, 243, 211, 222, + 32, 1, 224, 251, 222, 32, 1, 231, 192, 222, 32, 1, 228, 0, 222, 32, 1, + 252, 236, 222, 32, 1, 235, 76, 222, 32, 1, 237, 3, 222, 32, 1, 254, 160, + 222, 32, 1, 219, 187, 222, 32, 1, 234, 13, 222, 32, 1, 246, 6, 222, 32, + 1, 249, 35, 222, 32, 1, 222, 34, 222, 32, 1, 235, 185, 222, 32, 1, 244, + 252, 222, 32, 1, 244, 71, 222, 32, 1, 226, 81, 222, 32, 1, 249, 139, 222, + 32, 1, 217, 98, 222, 32, 1, 222, 101, 222, 32, 1, 218, 76, 222, 32, 1, + 229, 209, 222, 32, 1, 237, 116, 222, 32, 1, 251, 49, 222, 32, 1, 221, 28, + 222, 32, 1, 243, 120, 222, 32, 1, 236, 148, 222, 32, 1, 222, 33, 222, 32, + 1, 217, 113, 222, 32, 1, 224, 241, 222, 32, 1, 226, 174, 222, 32, 1, 249, + 205, 222, 32, 1, 101, 222, 32, 1, 217, 21, 222, 32, 1, 254, 189, 222, 32, + 1, 244, 121, 222, 32, 1, 228, 152, 222, 32, 1, 219, 5, 222, 32, 255, 8, + 222, 32, 255, 23, 222, 32, 242, 68, 222, 32, 246, 249, 222, 32, 220, 118, + 222, 32, 230, 126, 222, 32, 247, 1, 222, 32, 246, 82, 222, 32, 230, 176, + 222, 32, 230, 184, 222, 32, 223, 75, 222, 32, 1, 232, 235, 231, 242, 20, + 217, 84, 231, 242, 20, 107, 231, 242, 20, 103, 231, 242, 20, 160, 231, + 242, 20, 154, 231, 242, 20, 174, 231, 242, 20, 182, 231, 242, 20, 191, + 231, 242, 20, 185, 231, 242, 20, 190, 231, 242, 1, 60, 231, 242, 1, 246, + 250, 231, 242, 1, 72, 231, 242, 1, 73, 231, 242, 1, 68, 231, 242, 1, 230, + 127, 231, 242, 1, 74, 231, 242, 1, 249, 195, 231, 242, 1, 207, 231, 242, + 1, 252, 237, 231, 242, 1, 187, 231, 242, 1, 222, 155, 231, 242, 1, 237, + 123, 231, 242, 1, 251, 69, 231, 242, 1, 249, 207, 231, 242, 1, 203, 231, + 242, 1, 227, 52, 231, 242, 1, 226, 177, 231, 242, 1, 244, 204, 231, 242, + 1, 246, 8, 231, 242, 1, 175, 231, 242, 1, 235, 188, 231, 242, 1, 232, + 238, 218, 184, 231, 242, 1, 196, 231, 242, 1, 231, 77, 231, 242, 1, 208, + 231, 242, 1, 155, 231, 242, 1, 219, 7, 231, 242, 1, 184, 231, 242, 1, + 231, 78, 218, 184, 231, 242, 1, 237, 52, 237, 123, 231, 242, 1, 237, 52, + 251, 69, 231, 242, 1, 237, 52, 203, 231, 242, 36, 224, 192, 116, 221, + 132, 231, 242, 36, 224, 192, 109, 221, 132, 231, 242, 36, 224, 192, 227, + 88, 221, 132, 231, 242, 36, 171, 249, 47, 221, 132, 231, 242, 36, 171, + 116, 221, 132, 231, 242, 36, 171, 109, 221, 132, 231, 242, 36, 171, 227, + 88, 221, 132, 231, 242, 36, 232, 209, 78, 231, 242, 36, 51, 61, 50, 231, + 242, 116, 145, 254, 79, 231, 242, 109, 145, 254, 79, 231, 242, 16, 230, + 128, 249, 58, 231, 242, 16, 244, 203, 231, 242, 250, 168, 231, 242, 246, + 95, 78, 231, 242, 235, 166, 213, 1, 254, 173, 213, 1, 252, 60, 213, 1, + 244, 234, 213, 1, 249, 182, 213, 1, 237, 133, 213, 1, 252, 236, 213, 1, + 217, 87, 213, 1, 237, 140, 213, 1, 221, 161, 213, 1, 217, 177, 213, 1, + 237, 4, 213, 1, 235, 183, 213, 1, 233, 161, 213, 1, 231, 103, 213, 1, + 224, 110, 213, 1, 237, 223, 213, 1, 245, 203, 213, 1, 221, 53, 213, 1, + 228, 79, 213, 1, 227, 89, 213, 1, 225, 9, 213, 1, 222, 151, 213, 164, + 237, 223, 213, 164, 237, 222, 213, 164, 230, 172, 213, 164, 249, 193, + 213, 58, 1, 246, 160, 217, 177, 213, 164, 246, 160, 217, 177, 213, 29, 5, + 171, 73, 213, 29, 5, 73, 213, 29, 5, 230, 72, 255, 58, 213, 29, 5, 171, + 255, 58, 213, 29, 5, 255, 58, 213, 29, 5, 230, 72, 60, 213, 29, 5, 171, + 60, 213, 29, 5, 60, 213, 58, 1, 224, 192, 60, 213, 29, 5, 224, 192, 60, + 213, 29, 5, 171, 68, 213, 29, 5, 68, 213, 58, 1, 72, 213, 29, 5, 171, 72, + 213, 29, 5, 72, 213, 29, 5, 74, 213, 29, 5, 223, 75, 213, 164, 232, 128, + 213, 228, 197, 232, 128, 213, 228, 197, 254, 211, 213, 228, 197, 254, + 122, 213, 228, 197, 252, 181, 213, 228, 197, 253, 240, 213, 228, 197, + 224, 201, 213, 255, 7, 78, 213, 228, 197, 234, 4, 228, 113, 213, 228, + 197, 217, 29, 213, 228, 197, 228, 113, 213, 228, 197, 217, 112, 213, 228, + 197, 220, 233, 213, 228, 197, 254, 36, 213, 228, 197, 224, 22, 234, 55, + 213, 228, 197, 254, 113, 80, 5, 237, 170, 251, 146, 80, 5, 251, 146, 80, + 5, 254, 95, 80, 5, 219, 77, 80, 1, 224, 192, 60, 80, 1, 60, 80, 1, 255, + 58, 80, 1, 72, 80, 1, 237, 255, 80, 1, 68, 80, 1, 220, 23, 80, 1, 167, + 152, 80, 1, 167, 153, 80, 1, 251, 149, 73, 80, 1, 224, 192, 73, 80, 1, + 73, 80, 1, 254, 196, 80, 1, 251, 149, 74, 80, 1, 224, 192, 74, 80, 1, 74, + 80, 1, 253, 232, 80, 1, 175, 80, 1, 236, 149, 80, 1, 245, 0, 80, 1, 244, + 125, 80, 1, 232, 115, 80, 1, 251, 169, 80, 1, 251, 69, 80, 1, 237, 123, + 80, 1, 237, 103, 80, 1, 231, 77, 80, 1, 221, 29, 80, 1, 221, 19, 80, 1, + 249, 132, 80, 1, 249, 116, 80, 1, 231, 217, 80, 1, 222, 155, 80, 1, 222, + 35, 80, 1, 249, 207, 80, 1, 249, 36, 80, 1, 208, 80, 1, 231, 208, 80, 1, + 187, 80, 1, 229, 141, 80, 1, 252, 237, 80, 1, 252, 94, 80, 1, 196, 80, 1, + 184, 80, 1, 203, 80, 1, 227, 52, 80, 1, 235, 188, 80, 1, 235, 17, 80, 1, + 235, 16, 80, 1, 219, 189, 80, 1, 225, 25, 80, 1, 223, 218, 80, 1, 226, + 177, 80, 1, 155, 80, 5, 231, 112, 80, 5, 253, 219, 80, 29, 5, 255, 58, + 80, 29, 5, 72, 80, 29, 5, 237, 255, 80, 29, 5, 68, 80, 29, 5, 220, 23, + 80, 29, 5, 167, 152, 80, 29, 5, 167, 227, 53, 80, 29, 5, 251, 149, 73, + 80, 29, 5, 224, 192, 73, 80, 29, 5, 73, 80, 29, 5, 254, 196, 80, 29, 5, + 251, 149, 74, 80, 29, 5, 224, 192, 74, 80, 29, 5, 74, 80, 29, 5, 253, + 232, 80, 5, 219, 82, 80, 29, 5, 228, 232, 73, 80, 230, 146, 80, 223, 125, + 5, 220, 112, 80, 223, 125, 5, 254, 97, 80, 244, 37, 255, 0, 80, 254, 248, + 255, 0, 80, 29, 5, 251, 149, 171, 73, 80, 1, 228, 155, 80, 1, 236, 133, + 80, 1, 244, 114, 80, 1, 217, 114, 80, 1, 249, 121, 80, 1, 227, 151, 80, + 1, 246, 8, 80, 1, 217, 165, 80, 1, 167, 227, 53, 80, 1, 167, 235, 18, 80, + 29, 5, 167, 153, 80, 29, 5, 167, 235, 18, 80, 249, 167, 80, 51, 249, 167, + 80, 20, 217, 84, 80, 20, 107, 80, 20, 103, 80, 20, 160, 80, 20, 154, 80, + 20, 174, 80, 20, 182, 80, 20, 191, 80, 20, 185, 80, 20, 190, 80, 255, 7, + 55, 80, 5, 116, 223, 253, 248, 145, 80, 1, 251, 149, 60, 80, 1, 217, 80, + 80, 1, 106, 184, 80, 1, 244, 160, 80, 1, 237, 87, 80, 1, 244, 73, 223, + 136, 80, 1, 249, 122, 80, 1, 252, 178, 130, 5, 251, 146, 130, 5, 254, 95, + 130, 5, 219, 77, 130, 1, 60, 130, 1, 255, 58, 130, 1, 72, 130, 1, 237, + 255, 130, 1, 68, 130, 1, 220, 23, 130, 1, 167, 152, 130, 1, 167, 153, + 130, 1, 73, 130, 1, 254, 196, 130, 1, 74, 130, 1, 253, 232, 130, 1, 175, + 130, 1, 236, 149, 130, 1, 245, 0, 130, 1, 244, 125, 130, 1, 232, 115, + 130, 1, 251, 169, 130, 1, 251, 69, 130, 1, 237, 123, 130, 1, 237, 103, + 130, 1, 231, 77, 130, 1, 221, 29, 130, 1, 221, 19, 130, 1, 249, 132, 130, + 1, 249, 116, 130, 1, 231, 217, 130, 1, 222, 155, 130, 1, 222, 35, 130, 1, + 249, 207, 130, 1, 249, 36, 130, 1, 208, 130, 1, 187, 130, 1, 229, 141, + 130, 1, 252, 237, 130, 1, 252, 94, 130, 1, 196, 130, 1, 184, 130, 1, 203, + 130, 1, 235, 188, 130, 1, 225, 25, 130, 1, 223, 218, 130, 1, 226, 177, + 130, 1, 155, 130, 5, 231, 112, 130, 5, 253, 219, 130, 29, 5, 255, 58, + 130, 29, 5, 72, 130, 29, 5, 237, 255, 130, 29, 5, 68, 130, 29, 5, 220, + 23, 130, 29, 5, 167, 152, 130, 29, 5, 167, 227, 53, 130, 29, 5, 73, 130, + 29, 5, 254, 196, 130, 29, 5, 74, 130, 29, 5, 253, 232, 130, 5, 219, 82, + 130, 1, 236, 141, 222, 155, 130, 253, 233, 235, 94, 78, 130, 1, 227, 52, + 130, 1, 227, 151, 130, 1, 217, 165, 130, 1, 167, 227, 53, 130, 1, 167, + 235, 18, 130, 29, 5, 167, 153, 130, 29, 5, 167, 235, 18, 130, 20, 217, + 84, 130, 20, 107, 130, 20, 103, 130, 20, 160, 130, 20, 154, 130, 20, 174, + 130, 20, 182, 130, 20, 191, 130, 20, 185, 130, 20, 190, 130, 1, 228, 3, + 2, 233, 193, 249, 10, 130, 1, 228, 3, 2, 234, 237, 249, 10, 130, 227, 4, + 78, 130, 227, 4, 55, 130, 250, 78, 231, 106, 107, 130, 250, 78, 231, 106, + 103, 130, 250, 78, 231, 106, 160, 130, 250, 78, 231, 106, 154, 130, 250, + 78, 231, 106, 131, 235, 88, 222, 28, 222, 23, 249, 56, 130, 250, 78, 249, + 57, 224, 77, 130, 237, 141, 130, 244, 227, 78, 163, 5, 254, 243, 252, 72, + 163, 5, 252, 72, 163, 5, 219, 77, 163, 1, 60, 163, 1, 255, 58, 163, 1, + 72, 163, 1, 237, 255, 163, 1, 68, 163, 1, 220, 23, 163, 1, 246, 250, 163, + 1, 254, 196, 163, 1, 230, 127, 163, 1, 253, 232, 163, 1, 175, 163, 1, + 236, 149, 163, 1, 245, 0, 163, 1, 244, 125, 163, 1, 232, 115, 163, 1, + 251, 169, 163, 1, 251, 69, 163, 1, 237, 123, 163, 1, 237, 103, 163, 1, + 231, 77, 163, 1, 221, 29, 163, 1, 221, 19, 163, 1, 249, 132, 163, 1, 249, + 116, 163, 1, 231, 217, 163, 1, 222, 155, 163, 1, 222, 35, 163, 1, 249, + 207, 163, 1, 249, 36, 163, 1, 208, 163, 1, 187, 163, 1, 229, 141, 163, 1, + 252, 237, 163, 1, 252, 94, 163, 1, 196, 163, 1, 184, 163, 1, 203, 163, 1, + 235, 188, 163, 1, 235, 17, 163, 1, 219, 189, 163, 1, 225, 25, 163, 1, + 226, 177, 163, 1, 155, 163, 5, 231, 112, 163, 29, 5, 255, 58, 163, 29, 5, + 72, 163, 29, 5, 237, 255, 163, 29, 5, 68, 163, 29, 5, 220, 23, 163, 29, + 5, 246, 250, 163, 29, 5, 254, 196, 163, 29, 5, 230, 127, 163, 29, 5, 253, + 232, 163, 5, 219, 82, 163, 5, 220, 114, 163, 1, 236, 133, 163, 1, 244, + 114, 163, 1, 217, 114, 163, 1, 227, 52, 163, 1, 246, 8, 163, 20, 217, 84, + 163, 20, 107, 163, 20, 103, 163, 20, 160, 163, 20, 154, 163, 20, 174, + 163, 20, 182, 163, 20, 191, 163, 20, 185, 163, 20, 190, 163, 221, 167, + 163, 254, 242, 163, 237, 155, 163, 220, 46, 163, 246, 224, 230, 132, 163, + 5, 218, 54, 150, 5, 251, 146, 150, 5, 254, 95, 150, 5, 219, 77, 150, 1, + 60, 150, 1, 255, 58, 150, 1, 72, 150, 1, 237, 255, 150, 1, 68, 150, 1, + 220, 23, 150, 1, 167, 152, 150, 1, 167, 153, 150, 29, 251, 149, 73, 150, + 1, 73, 150, 1, 254, 196, 150, 29, 251, 149, 74, 150, 1, 74, 150, 1, 253, + 232, 150, 1, 175, 150, 1, 236, 149, 150, 1, 245, 0, 150, 1, 244, 125, + 150, 1, 232, 115, 150, 1, 251, 169, 150, 1, 251, 69, 150, 1, 237, 123, + 150, 1, 237, 103, 150, 1, 231, 77, 150, 1, 221, 29, 150, 1, 221, 19, 150, + 1, 249, 132, 150, 1, 249, 116, 150, 1, 231, 217, 150, 1, 222, 155, 150, + 1, 222, 35, 150, 1, 249, 207, 150, 1, 249, 36, 150, 1, 208, 150, 1, 187, + 150, 1, 229, 141, 150, 1, 252, 237, 150, 1, 252, 94, 150, 1, 196, 150, 1, + 184, 150, 1, 203, 150, 1, 235, 188, 150, 1, 235, 17, 150, 1, 219, 189, + 150, 1, 225, 25, 150, 1, 223, 218, 150, 1, 226, 177, 150, 1, 155, 150, 5, + 231, 112, 150, 5, 253, 219, 150, 29, 5, 255, 58, 150, 29, 5, 72, 150, 29, + 5, 237, 255, 150, 29, 5, 68, 150, 29, 5, 220, 23, 150, 29, 5, 167, 152, + 150, 29, 5, 167, 227, 53, 150, 29, 5, 251, 149, 73, 150, 29, 5, 73, 150, + 29, 5, 254, 196, 150, 29, 5, 251, 149, 74, 150, 29, 5, 74, 150, 29, 5, + 253, 232, 150, 5, 219, 82, 150, 230, 146, 150, 1, 167, 227, 53, 150, 1, + 167, 235, 18, 150, 29, 5, 167, 153, 150, 29, 5, 167, 235, 18, 150, 20, + 217, 84, 150, 20, 107, 150, 20, 103, 150, 20, 160, 150, 20, 154, 150, 20, + 174, 150, 20, 182, 150, 20, 191, 150, 20, 185, 150, 20, 190, 150, 227, 4, + 55, 147, 5, 251, 146, 147, 5, 254, 95, 147, 5, 219, 77, 147, 1, 60, 147, + 1, 255, 58, 147, 1, 72, 147, 1, 237, 255, 147, 1, 68, 147, 1, 220, 23, + 147, 1, 167, 152, 147, 1, 167, 153, 147, 1, 73, 147, 1, 254, 196, 147, 1, + 74, 147, 1, 253, 232, 147, 1, 175, 147, 1, 236, 149, 147, 1, 245, 0, 147, + 1, 244, 125, 147, 1, 232, 115, 147, 1, 251, 169, 147, 1, 251, 69, 147, 1, + 237, 123, 147, 1, 237, 103, 147, 1, 231, 77, 147, 1, 221, 29, 147, 1, + 221, 19, 147, 1, 249, 132, 147, 1, 249, 116, 147, 1, 231, 217, 147, 1, + 222, 155, 147, 1, 222, 35, 147, 1, 249, 207, 147, 1, 249, 36, 147, 1, + 208, 147, 1, 187, 147, 1, 229, 141, 147, 1, 252, 237, 147, 1, 252, 94, + 147, 1, 196, 147, 1, 184, 147, 1, 203, 147, 1, 235, 188, 147, 1, 235, 17, + 147, 1, 219, 189, 147, 1, 225, 25, 147, 1, 223, 218, 147, 1, 226, 177, + 147, 1, 155, 147, 5, 231, 112, 147, 5, 253, 219, 147, 29, 5, 255, 58, + 147, 29, 5, 72, 147, 29, 5, 237, 255, 147, 29, 5, 68, 147, 29, 5, 220, + 23, 147, 29, 5, 167, 152, 147, 29, 5, 167, 227, 53, 147, 29, 5, 73, 147, + 29, 5, 254, 196, 147, 29, 5, 74, 147, 29, 5, 253, 232, 147, 5, 219, 82, + 147, 254, 197, 235, 94, 78, 147, 253, 233, 235, 94, 78, 147, 1, 227, 52, + 147, 1, 227, 151, 147, 1, 217, 165, 147, 1, 167, 227, 53, 147, 1, 167, + 235, 18, 147, 29, 5, 167, 153, 147, 29, 5, 167, 235, 18, 147, 20, 217, + 84, 147, 20, 107, 147, 20, 103, 147, 20, 160, 147, 20, 154, 147, 20, 174, + 147, 20, 182, 147, 20, 191, 147, 20, 185, 147, 20, 190, 147, 237, 141, + 147, 1, 219, 7, 176, 5, 254, 95, 176, 5, 219, 77, 176, 1, 60, 176, 1, + 255, 58, 176, 1, 72, 176, 1, 237, 255, 176, 1, 68, 176, 1, 220, 23, 176, + 1, 73, 176, 1, 246, 250, 176, 1, 254, 196, 176, 1, 74, 176, 1, 230, 127, + 176, 1, 253, 232, 176, 1, 175, 176, 1, 232, 115, 176, 1, 251, 169, 176, + 1, 237, 123, 176, 1, 231, 77, 176, 1, 221, 29, 176, 1, 231, 217, 176, 1, + 222, 155, 176, 1, 208, 176, 1, 231, 208, 176, 1, 187, 176, 1, 196, 176, + 1, 184, 176, 1, 203, 176, 1, 227, 52, 176, 1, 235, 188, 176, 1, 235, 17, + 176, 1, 235, 16, 176, 1, 219, 189, 176, 1, 225, 25, 176, 1, 223, 218, + 176, 1, 226, 177, 176, 1, 155, 176, 29, 5, 255, 58, 176, 29, 5, 72, 176, + 29, 5, 237, 255, 176, 29, 5, 68, 176, 29, 5, 220, 23, 176, 29, 5, 73, + 176, 29, 5, 246, 250, 176, 29, 5, 254, 196, 176, 29, 5, 74, 176, 29, 5, + 230, 127, 176, 29, 5, 253, 232, 176, 5, 219, 82, 176, 230, 146, 176, 253, + 233, 235, 94, 78, 176, 20, 217, 84, 176, 20, 107, 176, 20, 103, 176, 20, + 160, 176, 20, 154, 176, 20, 174, 176, 20, 182, 176, 20, 191, 176, 20, + 185, 176, 20, 190, 176, 54, 222, 65, 176, 54, 131, 242, 161, 176, 54, + 131, 221, 231, 176, 249, 137, 55, 176, 233, 121, 55, 176, 218, 23, 55, + 176, 249, 89, 55, 176, 250, 107, 55, 176, 254, 14, 71, 55, 176, 227, 4, + 55, 176, 54, 55, 129, 5, 251, 146, 129, 5, 254, 95, 129, 5, 219, 77, 129, + 1, 60, 129, 1, 255, 58, 129, 1, 72, 129, 1, 237, 255, 129, 1, 68, 129, 1, + 220, 23, 129, 1, 167, 152, 129, 1, 167, 153, 129, 1, 73, 129, 1, 246, + 250, 129, 1, 254, 196, 129, 1, 74, 129, 1, 230, 127, 129, 1, 253, 232, + 129, 1, 175, 129, 1, 236, 149, 129, 1, 245, 0, 129, 1, 244, 125, 129, 1, + 232, 115, 129, 1, 251, 169, 129, 1, 251, 69, 129, 1, 237, 123, 129, 1, + 237, 103, 129, 1, 231, 77, 129, 1, 221, 29, 129, 1, 221, 19, 129, 1, 249, + 132, 129, 1, 249, 116, 129, 1, 231, 217, 129, 1, 222, 155, 129, 1, 222, + 35, 129, 1, 249, 207, 129, 1, 249, 36, 129, 1, 208, 129, 1, 187, 129, 1, + 229, 141, 129, 1, 252, 237, 129, 1, 252, 94, 129, 1, 196, 129, 1, 184, + 129, 1, 203, 129, 1, 227, 52, 129, 1, 235, 188, 129, 1, 235, 17, 129, 1, + 219, 189, 129, 1, 225, 25, 129, 1, 223, 218, 129, 1, 226, 177, 129, 1, + 155, 129, 5, 253, 219, 129, 29, 5, 255, 58, 129, 29, 5, 72, 129, 29, 5, + 237, 255, 129, 29, 5, 68, 129, 29, 5, 220, 23, 129, 29, 5, 167, 152, 129, + 29, 5, 167, 227, 53, 129, 29, 5, 73, 129, 29, 5, 246, 250, 129, 29, 5, + 254, 196, 129, 29, 5, 74, 129, 29, 5, 230, 127, 129, 29, 5, 253, 232, + 129, 5, 219, 82, 129, 235, 94, 78, 129, 254, 197, 235, 94, 78, 129, 1, + 221, 55, 129, 1, 247, 74, 129, 1, 167, 227, 53, 129, 1, 167, 235, 18, + 129, 29, 5, 167, 153, 129, 29, 5, 167, 235, 18, 129, 20, 217, 84, 129, + 20, 107, 129, 20, 103, 129, 20, 160, 129, 20, 154, 129, 20, 174, 129, 20, + 182, 129, 20, 191, 129, 20, 185, 129, 20, 190, 129, 245, 108, 20, 217, + 85, 35, 230, 169, 229, 9, 117, 154, 129, 245, 108, 20, 131, 35, 230, 169, + 229, 9, 117, 154, 129, 245, 108, 20, 124, 35, 230, 169, 229, 9, 117, 154, + 129, 245, 108, 20, 148, 35, 230, 169, 229, 9, 117, 154, 129, 245, 108, + 20, 131, 35, 246, 104, 229, 9, 117, 154, 129, 245, 108, 20, 124, 35, 246, + 104, 229, 9, 117, 154, 129, 245, 108, 20, 148, 35, 246, 104, 229, 9, 117, + 154, 129, 5, 220, 229, 141, 5, 254, 95, 141, 5, 219, 77, 141, 1, 60, 141, + 1, 255, 58, 141, 1, 72, 141, 1, 237, 255, 141, 1, 68, 141, 1, 220, 23, + 141, 1, 167, 152, 141, 1, 167, 153, 141, 1, 73, 141, 1, 246, 250, 141, 1, + 254, 196, 141, 1, 74, 141, 1, 230, 127, 141, 1, 253, 232, 141, 1, 175, + 141, 1, 236, 149, 141, 1, 245, 0, 141, 1, 244, 125, 141, 1, 232, 115, + 141, 1, 251, 169, 141, 1, 251, 69, 141, 1, 237, 123, 141, 1, 237, 103, + 141, 1, 231, 77, 141, 1, 221, 29, 141, 1, 221, 19, 141, 1, 249, 132, 141, + 1, 249, 116, 141, 1, 231, 217, 141, 1, 222, 155, 141, 1, 222, 35, 141, 1, + 249, 207, 141, 1, 249, 36, 141, 1, 208, 141, 1, 187, 141, 1, 229, 141, + 141, 1, 252, 237, 141, 1, 252, 94, 141, 1, 196, 141, 1, 184, 141, 1, 203, + 141, 1, 227, 52, 141, 1, 235, 188, 141, 1, 235, 17, 141, 1, 219, 189, + 141, 1, 225, 25, 141, 1, 223, 218, 141, 1, 226, 177, 141, 1, 155, 141, 5, + 231, 112, 141, 5, 253, 219, 141, 29, 5, 255, 58, 141, 29, 5, 72, 141, 29, + 5, 237, 255, 141, 29, 5, 68, 141, 29, 5, 220, 23, 141, 29, 5, 167, 152, + 141, 29, 5, 167, 227, 53, 141, 29, 5, 73, 141, 29, 5, 246, 250, 141, 29, + 5, 254, 196, 141, 29, 5, 74, 141, 29, 5, 230, 127, 141, 29, 5, 253, 232, + 141, 5, 219, 82, 141, 235, 94, 78, 141, 254, 197, 235, 94, 78, 141, 1, + 246, 8, 141, 1, 167, 227, 53, 141, 1, 167, 235, 18, 141, 29, 5, 167, 153, + 141, 29, 5, 167, 235, 18, 141, 20, 217, 84, 141, 20, 107, 141, 20, 103, + 141, 20, 160, 141, 20, 154, 141, 20, 174, 141, 20, 182, 141, 20, 191, + 141, 20, 185, 141, 20, 190, 141, 5, 237, 92, 141, 5, 220, 61, 123, 5, + 254, 95, 123, 5, 219, 77, 123, 1, 60, 123, 1, 255, 58, 123, 1, 72, 123, + 1, 237, 255, 123, 1, 68, 123, 1, 220, 23, 123, 1, 167, 152, 123, 1, 167, + 153, 123, 1, 73, 123, 1, 246, 250, 123, 1, 254, 196, 123, 1, 74, 123, 1, + 230, 127, 123, 1, 253, 232, 123, 1, 175, 123, 1, 236, 149, 123, 1, 245, + 0, 123, 1, 244, 125, 123, 1, 232, 115, 123, 1, 251, 169, 123, 1, 251, 69, + 123, 1, 237, 123, 123, 1, 237, 103, 123, 1, 231, 77, 123, 1, 221, 29, + 123, 1, 221, 19, 123, 1, 249, 132, 123, 1, 249, 116, 123, 1, 231, 217, + 123, 1, 222, 155, 123, 1, 222, 35, 123, 1, 249, 207, 123, 1, 249, 36, + 123, 1, 208, 123, 1, 187, 123, 1, 229, 141, 123, 1, 252, 237, 123, 1, + 252, 94, 123, 1, 196, 123, 1, 184, 123, 1, 203, 123, 1, 227, 52, 123, 1, + 235, 188, 123, 1, 235, 17, 123, 1, 235, 16, 123, 1, 219, 189, 123, 1, + 225, 25, 123, 1, 223, 218, 123, 1, 226, 177, 123, 1, 155, 123, 5, 253, + 219, 123, 29, 5, 255, 58, 123, 29, 5, 72, 123, 29, 5, 237, 255, 123, 29, + 5, 68, 123, 29, 5, 220, 23, 123, 29, 5, 167, 152, 123, 29, 5, 167, 227, + 53, 123, 29, 5, 73, 123, 29, 5, 246, 250, 123, 29, 5, 254, 196, 123, 29, + 5, 74, 123, 29, 5, 230, 127, 123, 29, 5, 253, 232, 123, 5, 219, 82, 123, + 253, 233, 235, 94, 78, 123, 1, 167, 227, 53, 123, 1, 167, 235, 18, 123, + 29, 5, 167, 153, 123, 29, 5, 167, 235, 18, 123, 20, 217, 84, 123, 20, + 107, 123, 20, 103, 123, 20, 160, 123, 20, 154, 123, 20, 174, 123, 20, + 182, 123, 20, 191, 123, 20, 185, 123, 20, 190, 123, 54, 222, 65, 123, 54, + 131, 242, 161, 123, 54, 131, 221, 231, 123, 245, 108, 131, 228, 89, 123, + 245, 108, 131, 243, 194, 123, 245, 108, 148, 228, 87, 123, 249, 141, 78, + 123, 1, 251, 23, 231, 218, 123, 1, 251, 23, 207, 123, 1, 251, 23, 227, + 53, 123, 1, 251, 23, 153, 123, 1, 251, 23, 235, 18, 123, 1, 251, 23, 237, + 17, 162, 5, 254, 94, 162, 5, 219, 76, 162, 1, 253, 210, 162, 1, 255, 13, + 162, 1, 254, 215, 162, 1, 254, 229, 162, 1, 237, 132, 162, 1, 237, 254, + 162, 1, 220, 15, 162, 1, 220, 17, 162, 1, 237, 153, 162, 1, 237, 154, + 162, 1, 237, 240, 162, 1, 237, 242, 162, 1, 246, 83, 162, 1, 246, 246, + 162, 1, 254, 184, 162, 1, 230, 62, 162, 1, 230, 122, 162, 1, 253, 222, + 162, 1, 254, 149, 236, 189, 162, 1, 234, 105, 236, 189, 162, 1, 254, 149, + 244, 207, 162, 1, 234, 105, 244, 207, 162, 1, 236, 228, 232, 232, 162, 1, + 226, 135, 244, 207, 162, 1, 254, 149, 251, 117, 162, 1, 234, 105, 251, + 117, 162, 1, 254, 149, 237, 115, 162, 1, 234, 105, 237, 115, 162, 1, 222, + 149, 232, 232, 162, 1, 222, 149, 226, 134, 232, 233, 162, 1, 226, 135, + 237, 115, 162, 1, 254, 149, 221, 27, 162, 1, 234, 105, 221, 27, 162, 1, + 254, 149, 249, 123, 162, 1, 234, 105, 249, 123, 162, 1, 233, 56, 232, + 198, 162, 1, 226, 135, 249, 123, 162, 1, 254, 149, 222, 95, 162, 1, 234, + 105, 222, 95, 162, 1, 254, 149, 249, 136, 162, 1, 234, 105, 249, 136, + 162, 1, 249, 164, 232, 198, 162, 1, 226, 135, 249, 136, 162, 1, 254, 149, + 229, 204, 162, 1, 234, 105, 229, 204, 162, 1, 254, 149, 252, 179, 162, 1, + 234, 105, 252, 179, 162, 1, 234, 44, 162, 1, 254, 136, 252, 179, 162, 1, + 218, 29, 162, 1, 227, 221, 162, 1, 249, 164, 235, 131, 162, 1, 219, 167, + 162, 1, 222, 149, 226, 117, 162, 1, 233, 56, 226, 117, 162, 1, 249, 164, + 226, 117, 162, 1, 243, 166, 162, 1, 233, 56, 235, 131, 162, 1, 245, 233, + 162, 5, 254, 174, 162, 29, 5, 254, 224, 162, 29, 5, 236, 158, 254, 231, + 162, 29, 5, 248, 241, 254, 231, 162, 29, 5, 236, 158, 237, 150, 162, 29, + 5, 248, 241, 237, 150, 162, 29, 5, 236, 158, 230, 42, 162, 29, 5, 248, + 241, 230, 42, 162, 29, 5, 244, 245, 162, 29, 5, 236, 46, 162, 29, 5, 248, + 241, 236, 46, 162, 29, 5, 236, 48, 249, 73, 162, 29, 5, 236, 47, 243, + 212, 254, 224, 162, 29, 5, 236, 47, 243, 212, 248, 241, 254, 224, 162, + 29, 5, 236, 47, 243, 212, 244, 206, 162, 29, 5, 244, 206, 162, 29, 5, + 248, 241, 244, 245, 162, 29, 5, 248, 241, 244, 206, 162, 228, 197, 235, + 254, 140, 126, 236, 58, 236, 243, 140, 126, 236, 126, 236, 145, 140, 126, + 236, 126, 236, 119, 140, 126, 236, 126, 236, 116, 140, 126, 236, 126, + 236, 123, 140, 126, 236, 126, 227, 240, 140, 126, 232, 85, 232, 74, 140, + 126, 251, 12, 251, 60, 140, 126, 251, 12, 251, 20, 140, 126, 251, 12, + 251, 59, 140, 126, 224, 27, 224, 26, 140, 126, 251, 12, 251, 9, 140, 126, + 217, 232, 217, 239, 140, 126, 248, 168, 251, 66, 140, 126, 199, 229, 213, + 140, 126, 221, 240, 222, 27, 140, 126, 221, 240, 232, 215, 140, 126, 221, + 240, 229, 111, 140, 126, 231, 205, 232, 134, 140, 126, 248, 168, 249, 74, + 140, 126, 199, 222, 116, 140, 126, 221, 240, 221, 219, 140, 126, 221, + 240, 222, 31, 140, 126, 221, 240, 221, 237, 140, 126, 231, 205, 231, 144, + 140, 126, 252, 42, 252, 220, 140, 126, 229, 38, 229, 58, 140, 126, 229, + 119, 229, 113, 140, 126, 245, 140, 246, 8, 140, 126, 229, 119, 229, 135, + 140, 126, 245, 140, 245, 245, 140, 126, 229, 119, 226, 143, 140, 126, + 233, 137, 196, 140, 126, 217, 232, 218, 55, 140, 126, 227, 76, 227, 21, + 140, 126, 227, 22, 140, 126, 235, 13, 235, 36, 140, 126, 234, 231, 140, + 126, 218, 188, 219, 3, 140, 126, 224, 27, 226, 155, 140, 126, 224, 27, + 227, 0, 140, 126, 224, 27, 223, 102, 140, 126, 243, 5, 243, 95, 140, 126, + 235, 13, 250, 252, 140, 126, 142, 254, 123, 140, 126, 243, 5, 231, 200, + 140, 126, 230, 30, 140, 126, 226, 130, 60, 140, 126, 234, 100, 243, 190, + 140, 126, 226, 130, 255, 58, 140, 126, 226, 130, 254, 140, 140, 126, 226, + 130, 72, 140, 126, 226, 130, 237, 255, 140, 126, 226, 130, 220, 110, 140, + 126, 226, 130, 220, 108, 140, 126, 226, 130, 68, 140, 126, 226, 130, 220, + 23, 140, 126, 229, 121, 140, 250, 78, 16, 252, 221, 140, 126, 226, 130, + 73, 140, 126, 226, 130, 254, 234, 140, 126, 226, 130, 74, 140, 126, 226, + 130, 254, 197, 234, 96, 140, 126, 226, 130, 254, 197, 234, 97, 140, 126, + 235, 164, 140, 126, 234, 93, 140, 126, 234, 94, 140, 126, 234, 100, 246, + 223, 140, 126, 234, 100, 221, 239, 140, 126, 234, 100, 221, 93, 140, 126, + 234, 100, 251, 50, 140, 126, 222, 25, 140, 126, 232, 36, 140, 126, 218, + 49, 140, 126, 245, 135, 140, 20, 217, 84, 140, 20, 107, 140, 20, 103, + 140, 20, 160, 140, 20, 154, 140, 20, 174, 140, 20, 182, 140, 20, 191, + 140, 20, 185, 140, 20, 190, 140, 126, 254, 121, 140, 126, 236, 124, 202, + 1, 236, 57, 202, 1, 236, 126, 223, 66, 202, 1, 236, 126, 222, 121, 202, + 1, 232, 84, 202, 1, 250, 182, 202, 1, 224, 27, 222, 121, 202, 1, 231, 56, + 202, 1, 248, 167, 202, 1, 101, 202, 1, 221, 240, 223, 66, 202, 1, 221, + 240, 222, 121, 202, 1, 231, 204, 202, 1, 252, 41, 202, 1, 229, 37, 202, + 1, 229, 119, 223, 66, 202, 1, 245, 140, 222, 121, 202, 1, 229, 119, 222, + 121, 202, 1, 245, 140, 223, 66, 202, 1, 233, 136, 202, 1, 217, 231, 202, + 1, 235, 13, 235, 36, 202, 1, 235, 13, 234, 246, 202, 1, 218, 187, 202, 1, + 224, 27, 223, 66, 202, 1, 243, 5, 223, 66, 202, 1, 74, 202, 1, 243, 5, + 222, 121, 202, 246, 208, 202, 29, 5, 60, 202, 29, 5, 234, 100, 236, 233, + 202, 29, 5, 255, 58, 202, 29, 5, 254, 140, 202, 29, 5, 72, 202, 29, 5, + 237, 255, 202, 29, 5, 218, 90, 202, 29, 5, 217, 166, 202, 29, 5, 68, 202, + 29, 5, 220, 23, 202, 29, 5, 234, 100, 236, 44, 202, 225, 62, 5, 235, 12, + 202, 225, 62, 5, 231, 56, 202, 29, 5, 73, 202, 29, 5, 246, 237, 202, 29, + 5, 74, 202, 29, 5, 253, 212, 202, 29, 5, 254, 196, 202, 236, 58, 235, + 188, 202, 145, 234, 100, 246, 223, 202, 145, 234, 100, 221, 239, 202, + 145, 234, 100, 221, 205, 202, 145, 234, 100, 251, 123, 202, 251, 151, 78, + 202, 232, 43, 202, 20, 217, 84, 202, 20, 107, 202, 20, 103, 202, 20, 160, + 202, 20, 154, 202, 20, 174, 202, 20, 182, 202, 20, 191, 202, 20, 185, + 202, 20, 190, 202, 243, 5, 231, 204, 202, 243, 5, 233, 136, 59, 4, 230, + 146, 59, 164, 244, 19, 217, 243, 233, 213, 221, 61, 60, 59, 164, 244, 19, + 217, 243, 233, 213, 255, 144, 227, 80, 252, 146, 196, 59, 164, 244, 19, + 217, 243, 233, 213, 255, 144, 244, 19, 221, 45, 196, 59, 164, 66, 217, + 243, 233, 213, 234, 27, 196, 59, 164, 250, 194, 217, 243, 233, 213, 225, + 31, 196, 59, 164, 251, 135, 217, 243, 233, 213, 229, 112, 225, 19, 196, + 59, 164, 217, 243, 233, 213, 221, 45, 225, 19, 196, 59, 164, 226, 115, + 225, 18, 59, 164, 251, 251, 217, 243, 233, 212, 59, 164, 252, 55, 224, + 197, 217, 243, 233, 212, 59, 164, 237, 173, 221, 44, 59, 164, 249, 68, + 221, 45, 251, 250, 59, 164, 225, 18, 59, 164, 231, 60, 225, 18, 59, 164, + 221, 45, 225, 18, 59, 164, 231, 60, 221, 45, 225, 18, 59, 164, 227, 96, + 251, 39, 223, 229, 225, 18, 59, 164, 227, 154, 244, 44, 225, 18, 59, 164, + 251, 135, 255, 148, 227, 26, 234, 26, 171, 251, 154, 59, 164, 244, 19, + 221, 44, 59, 235, 5, 5, 251, 67, 227, 25, 59, 235, 5, 5, 235, 77, 227, + 25, 59, 253, 248, 5, 225, 28, 244, 194, 255, 149, 227, 25, 59, 253, 248, + 5, 255, 146, 187, 59, 253, 248, 5, 226, 95, 221, 40, 59, 5, 227, 218, + 248, 179, 244, 193, 59, 5, 227, 218, 248, 179, 244, 70, 59, 5, 227, 218, + 248, 179, 244, 20, 59, 5, 227, 218, 232, 230, 244, 193, 59, 5, 227, 218, + 232, 230, 244, 70, 59, 5, 227, 218, 248, 179, 227, 218, 232, 229, 59, 20, + 217, 84, 59, 20, 107, 59, 20, 103, 59, 20, 160, 59, 20, 154, 59, 20, 174, + 59, 20, 182, 59, 20, 191, 59, 20, 185, 59, 20, 190, 59, 20, 144, 107, 59, + 20, 144, 103, 59, 20, 144, 160, 59, 20, 144, 154, 59, 20, 144, 174, 59, + 20, 144, 182, 59, 20, 144, 191, 59, 20, 144, 185, 59, 20, 144, 190, 59, + 20, 144, 217, 84, 59, 164, 251, 253, 227, 25, 59, 164, 232, 109, 251, + 204, 231, 68, 217, 23, 59, 164, 251, 135, 255, 148, 227, 26, 251, 205, + 233, 172, 251, 154, 59, 164, 232, 109, 251, 204, 225, 29, 227, 25, 59, + 164, 251, 47, 233, 212, 59, 164, 221, 56, 255, 145, 59, 164, 244, 8, 227, + 26, 243, 228, 59, 164, 244, 8, 227, 26, 243, 234, 59, 164, 254, 124, 236, + 140, 243, 228, 59, 164, 254, 124, 236, 140, 243, 234, 59, 5, 218, 42, + 221, 43, 59, 5, 234, 75, 221, 43, 59, 1, 175, 59, 1, 236, 149, 59, 1, + 245, 0, 59, 1, 244, 125, 59, 1, 232, 115, 59, 1, 251, 169, 59, 1, 251, + 69, 59, 1, 237, 123, 59, 1, 231, 77, 59, 1, 221, 29, 59, 1, 221, 19, 59, + 1, 249, 132, 59, 1, 249, 116, 59, 1, 231, 217, 59, 1, 222, 155, 59, 1, + 222, 35, 59, 1, 249, 207, 59, 1, 249, 36, 59, 1, 208, 59, 1, 187, 59, 1, + 229, 141, 59, 1, 252, 237, 59, 1, 252, 94, 59, 1, 196, 59, 1, 221, 55, + 59, 1, 221, 47, 59, 1, 247, 74, 59, 1, 247, 70, 59, 1, 219, 7, 59, 1, + 217, 80, 59, 1, 217, 114, 59, 1, 255, 151, 59, 1, 184, 59, 1, 203, 59, 1, + 235, 188, 59, 1, 225, 25, 59, 1, 223, 218, 59, 1, 226, 177, 59, 1, 155, + 59, 1, 60, 59, 1, 236, 10, 59, 1, 245, 167, 203, 59, 1, 236, 74, 59, 1, + 227, 52, 59, 29, 5, 255, 58, 59, 29, 5, 72, 59, 29, 5, 237, 255, 59, 29, + 5, 68, 59, 29, 5, 220, 23, 59, 29, 5, 167, 152, 59, 29, 5, 167, 227, 53, + 59, 29, 5, 167, 153, 59, 29, 5, 167, 235, 18, 59, 29, 5, 73, 59, 29, 5, + 246, 250, 59, 29, 5, 74, 59, 29, 5, 230, 127, 59, 5, 227, 81, 223, 104, + 232, 116, 227, 75, 59, 5, 227, 80, 252, 145, 59, 29, 5, 210, 72, 59, 29, + 5, 210, 237, 255, 59, 5, 231, 68, 217, 24, 232, 236, 249, 207, 59, 5, + 224, 37, 235, 124, 59, 164, 243, 196, 59, 164, 230, 21, 59, 5, 235, 127, + 227, 25, 59, 5, 218, 46, 227, 25, 59, 5, 235, 128, 221, 56, 251, 154, 59, + 5, 234, 28, 251, 154, 59, 5, 244, 22, 251, 155, 227, 152, 59, 5, 244, 22, + 234, 20, 227, 152, 59, 223, 97, 1, 175, 59, 223, 97, 1, 236, 149, 59, + 223, 97, 1, 245, 0, 59, 223, 97, 1, 244, 125, 59, 223, 97, 1, 232, 115, + 59, 223, 97, 1, 251, 169, 59, 223, 97, 1, 251, 69, 59, 223, 97, 1, 237, + 123, 59, 223, 97, 1, 231, 77, 59, 223, 97, 1, 221, 29, 59, 223, 97, 1, + 221, 19, 59, 223, 97, 1, 249, 132, 59, 223, 97, 1, 249, 116, 59, 223, 97, + 1, 231, 217, 59, 223, 97, 1, 222, 155, 59, 223, 97, 1, 222, 35, 59, 223, + 97, 1, 249, 207, 59, 223, 97, 1, 249, 36, 59, 223, 97, 1, 208, 59, 223, + 97, 1, 187, 59, 223, 97, 1, 229, 141, 59, 223, 97, 1, 252, 237, 59, 223, + 97, 1, 252, 94, 59, 223, 97, 1, 196, 59, 223, 97, 1, 221, 55, 59, 223, + 97, 1, 221, 47, 59, 223, 97, 1, 247, 74, 59, 223, 97, 1, 247, 70, 59, + 223, 97, 1, 219, 7, 59, 223, 97, 1, 217, 80, 59, 223, 97, 1, 217, 114, + 59, 223, 97, 1, 255, 151, 59, 223, 97, 1, 184, 59, 223, 97, 1, 203, 59, + 223, 97, 1, 235, 188, 59, 223, 97, 1, 225, 25, 59, 223, 97, 1, 223, 218, + 59, 223, 97, 1, 226, 177, 59, 223, 97, 1, 155, 59, 223, 97, 1, 60, 59, + 223, 97, 1, 236, 10, 59, 223, 97, 1, 245, 167, 219, 7, 59, 223, 97, 1, + 245, 167, 184, 59, 223, 97, 1, 245, 167, 203, 59, 236, 8, 227, 23, 236, + 149, 59, 236, 8, 227, 23, 236, 150, 251, 205, 233, 172, 251, 154, 59, + 251, 144, 5, 106, 252, 140, 59, 251, 144, 5, 170, 252, 140, 59, 251, 144, + 5, 251, 145, 222, 86, 59, 251, 144, 5, 226, 114, 255, 150, 59, 16, 247, + 121, 251, 248, 59, 16, 227, 217, 227, 82, 59, 16, 230, 35, 244, 192, 59, + 16, 227, 217, 227, 83, 227, 154, 244, 43, 59, 16, 229, 112, 187, 59, 16, + 231, 190, 251, 248, 59, 16, 231, 190, 251, 249, 231, 60, 255, 147, 59, + 16, 231, 190, 251, 249, 244, 21, 255, 147, 59, 16, 231, 190, 251, 249, + 251, 205, 255, 147, 59, 5, 227, 218, 232, 230, 227, 218, 248, 178, 59, 5, + 227, 218, 232, 230, 244, 20, 59, 164, 251, 252, 224, 197, 244, 104, 233, + 213, 227, 153, 59, 164, 233, 138, 217, 243, 244, 104, 233, 213, 227, 153, + 59, 164, 231, 60, 221, 44, 59, 164, 66, 252, 12, 227, 77, 217, 243, 233, + 213, 234, 27, 196, 59, 164, 250, 194, 252, 12, 227, 77, 217, 243, 233, + 213, 225, 31, 196, 227, 108, 223, 38, 55, 235, 114, 223, 38, 55, 227, + 108, 223, 38, 5, 2, 248, 143, 235, 114, 223, 38, 5, 2, 248, 143, 63, 1, + 175, 63, 1, 236, 149, 63, 1, 245, 0, 63, 1, 244, 125, 63, 1, 232, 115, + 63, 1, 251, 169, 63, 1, 251, 69, 63, 1, 237, 123, 63, 1, 237, 103, 63, 1, + 231, 77, 63, 1, 231, 206, 63, 1, 221, 29, 63, 1, 221, 19, 63, 1, 249, + 132, 63, 1, 249, 116, 63, 1, 231, 217, 63, 1, 222, 155, 63, 1, 222, 35, + 63, 1, 249, 207, 63, 1, 249, 36, 63, 1, 208, 63, 1, 187, 63, 1, 229, 141, + 63, 1, 252, 237, 63, 1, 252, 94, 63, 1, 196, 63, 1, 184, 63, 1, 203, 63, + 1, 235, 188, 63, 1, 219, 7, 63, 1, 226, 177, 63, 1, 155, 63, 1, 235, 17, + 63, 1, 60, 63, 1, 225, 10, 60, 63, 1, 72, 63, 1, 237, 255, 63, 1, 68, 63, + 1, 220, 23, 63, 1, 73, 63, 1, 233, 128, 73, 63, 1, 74, 63, 1, 253, 232, + 63, 29, 5, 222, 123, 255, 58, 63, 29, 5, 255, 58, 63, 29, 5, 72, 63, 29, + 5, 237, 255, 63, 29, 5, 68, 63, 29, 5, 220, 23, 63, 29, 5, 73, 63, 29, 5, + 254, 196, 63, 29, 5, 233, 128, 237, 255, 63, 29, 5, 233, 128, 74, 63, 29, + 5, 178, 50, 63, 5, 254, 95, 63, 5, 61, 56, 63, 5, 219, 77, 63, 5, 219, + 82, 63, 5, 254, 11, 63, 250, 147, 5, 128, 184, 63, 250, 147, 5, 128, 203, + 63, 250, 147, 5, 128, 219, 7, 63, 250, 147, 5, 128, 155, 63, 1, 244, 32, + 226, 177, 63, 20, 217, 84, 63, 20, 107, 63, 20, 103, 63, 20, 160, 63, 20, + 154, 63, 20, 174, 63, 20, 182, 63, 20, 191, 63, 20, 185, 63, 20, 190, 63, + 5, 235, 25, 226, 86, 63, 5, 226, 86, 63, 16, 235, 9, 63, 16, 250, 163, + 63, 16, 254, 213, 63, 16, 244, 178, 63, 1, 225, 25, 63, 1, 223, 218, 63, + 1, 167, 152, 63, 1, 167, 227, 53, 63, 1, 167, 153, 63, 1, 167, 235, 18, + 63, 29, 5, 167, 152, 63, 29, 5, 167, 227, 53, 63, 29, 5, 167, 153, 63, + 29, 5, 167, 235, 18, 63, 1, 233, 128, 232, 115, 63, 1, 233, 128, 237, + 103, 63, 1, 233, 128, 252, 178, 63, 1, 233, 128, 252, 174, 63, 250, 147, + 5, 233, 128, 128, 208, 63, 250, 147, 5, 233, 128, 128, 196, 63, 250, 147, + 5, 233, 128, 128, 235, 188, 63, 1, 225, 30, 236, 213, 225, 25, 63, 29, 5, + 225, 30, 236, 213, 246, 115, 63, 145, 164, 225, 30, 236, 213, 243, 170, + 63, 145, 164, 225, 30, 236, 213, 236, 185, 229, 118, 63, 1, 218, 215, + 228, 175, 236, 213, 222, 35, 63, 1, 218, 215, 228, 175, 236, 213, 228, + 181, 63, 29, 5, 218, 215, 228, 175, 236, 213, 246, 115, 63, 29, 5, 218, + 215, 228, 175, 236, 213, 220, 110, 63, 5, 218, 215, 228, 175, 236, 213, + 221, 131, 63, 5, 218, 215, 228, 175, 236, 213, 221, 130, 63, 5, 218, 215, + 228, 175, 236, 213, 221, 129, 63, 5, 218, 215, 228, 175, 236, 213, 221, + 128, 63, 5, 218, 215, 228, 175, 236, 213, 221, 127, 63, 1, 247, 4, 228, + 175, 236, 213, 231, 217, 63, 1, 247, 4, 228, 175, 236, 213, 217, 173, 63, + 1, 247, 4, 228, 175, 236, 213, 244, 106, 63, 29, 5, 244, 188, 236, 213, + 72, 63, 29, 5, 236, 190, 230, 167, 63, 29, 5, 236, 190, 68, 63, 29, 5, + 236, 190, 246, 250, 63, 1, 225, 10, 175, 63, 1, 225, 10, 236, 149, 63, 1, + 225, 10, 245, 0, 63, 1, 225, 10, 251, 169, 63, 1, 225, 10, 217, 114, 63, + 1, 225, 10, 231, 77, 63, 1, 225, 10, 249, 207, 63, 1, 225, 10, 208, 63, + 1, 225, 10, 229, 141, 63, 1, 225, 10, 246, 8, 63, 1, 225, 10, 252, 237, + 63, 1, 225, 10, 222, 35, 63, 1, 225, 10, 155, 63, 250, 147, 5, 225, 10, + 128, 219, 7, 63, 29, 5, 225, 10, 255, 58, 63, 29, 5, 225, 10, 73, 63, 29, + 5, 225, 10, 178, 50, 63, 29, 5, 225, 10, 39, 218, 90, 63, 5, 225, 10, + 221, 130, 63, 5, 225, 10, 221, 129, 63, 5, 225, 10, 221, 127, 63, 5, 225, + 10, 221, 126, 63, 5, 225, 10, 250, 115, 221, 130, 63, 5, 225, 10, 250, + 115, 221, 129, 63, 5, 225, 10, 250, 115, 246, 200, 221, 132, 63, 1, 227, + 12, 230, 26, 246, 8, 63, 5, 227, 12, 230, 26, 221, 127, 63, 225, 10, 20, + 217, 84, 63, 225, 10, 20, 107, 63, 225, 10, 20, 103, 63, 225, 10, 20, + 160, 63, 225, 10, 20, 154, 63, 225, 10, 20, 174, 63, 225, 10, 20, 182, + 63, 225, 10, 20, 191, 63, 225, 10, 20, 185, 63, 225, 10, 20, 190, 63, 5, + 236, 143, 221, 131, 63, 5, 236, 143, 221, 129, 63, 29, 5, 254, 186, 60, + 63, 29, 5, 254, 186, 254, 196, 63, 16, 225, 10, 107, 63, 16, 225, 10, + 246, 94, 95, 6, 1, 254, 131, 95, 6, 1, 252, 209, 95, 6, 1, 244, 230, 95, + 6, 1, 248, 153, 95, 6, 1, 246, 197, 95, 6, 1, 219, 85, 95, 6, 1, 217, 87, + 95, 6, 1, 222, 119, 95, 6, 1, 237, 223, 95, 6, 1, 236, 233, 95, 6, 1, + 235, 143, 95, 6, 1, 234, 86, 95, 6, 1, 232, 211, 95, 6, 1, 230, 138, 95, + 6, 1, 229, 243, 95, 6, 1, 217, 76, 95, 6, 1, 227, 249, 95, 6, 1, 226, + 140, 95, 6, 1, 222, 112, 95, 6, 1, 220, 87, 95, 6, 1, 229, 134, 95, 6, 1, + 236, 138, 95, 6, 1, 244, 119, 95, 6, 1, 228, 140, 95, 6, 1, 224, 209, 95, + 6, 1, 251, 22, 95, 6, 1, 251, 154, 95, 6, 1, 237, 91, 95, 6, 1, 250, 224, + 95, 6, 1, 251, 56, 95, 6, 1, 218, 136, 95, 6, 1, 237, 101, 95, 6, 1, 243, + 208, 95, 6, 1, 243, 162, 95, 6, 1, 243, 108, 95, 6, 1, 218, 227, 95, 6, + 1, 243, 182, 95, 6, 1, 243, 2, 95, 1, 254, 131, 95, 1, 252, 209, 95, 1, + 244, 230, 95, 1, 248, 153, 95, 1, 246, 197, 95, 1, 219, 85, 95, 1, 217, + 87, 95, 1, 222, 119, 95, 1, 237, 223, 95, 1, 236, 233, 95, 1, 235, 143, + 95, 1, 234, 86, 95, 1, 232, 211, 95, 1, 230, 138, 95, 1, 229, 243, 95, 1, + 217, 76, 95, 1, 227, 249, 95, 1, 226, 140, 95, 1, 222, 112, 95, 1, 220, + 87, 95, 1, 229, 134, 95, 1, 236, 138, 95, 1, 244, 119, 95, 1, 228, 140, + 95, 1, 224, 209, 95, 1, 251, 22, 95, 1, 251, 154, 95, 1, 237, 91, 95, 1, + 250, 224, 95, 1, 251, 56, 95, 1, 218, 136, 95, 1, 237, 101, 95, 1, 243, + 208, 95, 1, 243, 162, 95, 1, 243, 108, 95, 1, 218, 227, 95, 1, 243, 182, + 95, 1, 243, 2, 95, 1, 245, 203, 95, 1, 217, 233, 95, 1, 246, 210, 95, 1, + 215, 244, 230, 95, 1, 254, 191, 95, 229, 241, 225, 54, 58, 1, 95, 232, + 211, 22, 91, 236, 86, 22, 91, 223, 211, 22, 91, 232, 55, 22, 91, 221, + 192, 22, 91, 223, 200, 22, 91, 227, 140, 22, 91, 233, 187, 22, 91, 229, + 99, 22, 91, 223, 208, 22, 91, 224, 104, 22, 91, 223, 205, 22, 91, 238, + 22, 22, 91, 250, 230, 22, 91, 223, 215, 22, 91, 251, 29, 22, 91, 236, + 128, 22, 91, 222, 0, 22, 91, 229, 127, 22, 91, 243, 106, 22, 91, 232, 51, + 22, 91, 223, 209, 22, 91, 232, 45, 22, 91, 232, 49, 22, 91, 221, 189, 22, + 91, 227, 128, 22, 91, 223, 207, 22, 91, 227, 138, 22, 91, 236, 217, 22, + 91, 233, 180, 22, 91, 236, 220, 22, 91, 229, 94, 22, 91, 229, 92, 22, 91, + 229, 80, 22, 91, 229, 88, 22, 91, 229, 86, 22, 91, 229, 83, 22, 91, 229, + 85, 22, 91, 229, 82, 22, 91, 229, 87, 22, 91, 229, 97, 22, 91, 229, 98, + 22, 91, 229, 81, 22, 91, 229, 91, 22, 91, 236, 218, 22, 91, 236, 216, 22, + 91, 224, 97, 22, 91, 224, 95, 22, 91, 224, 87, 22, 91, 224, 90, 22, 91, + 224, 96, 22, 91, 224, 92, 22, 91, 224, 91, 22, 91, 224, 89, 22, 91, 224, + 100, 22, 91, 224, 102, 22, 91, 224, 103, 22, 91, 224, 98, 22, 91, 224, + 88, 22, 91, 224, 93, 22, 91, 224, 101, 22, 91, 251, 15, 22, 91, 251, 13, + 22, 91, 251, 78, 22, 91, 251, 76, 22, 91, 230, 1, 22, 91, 238, 17, 22, + 91, 238, 8, 22, 91, 238, 16, 22, 91, 238, 13, 22, 91, 238, 11, 22, 91, + 238, 15, 22, 91, 223, 212, 22, 91, 238, 20, 22, 91, 238, 21, 22, 91, 238, + 9, 22, 91, 238, 14, 22, 91, 218, 6, 22, 91, 250, 229, 22, 91, 251, 16, + 22, 91, 251, 14, 22, 91, 251, 79, 22, 91, 251, 77, 22, 91, 251, 27, 22, + 91, 251, 28, 22, 91, 251, 17, 22, 91, 251, 80, 22, 91, 229, 125, 22, 91, + 236, 219, 22, 91, 223, 213, 22, 91, 218, 12, 22, 91, 236, 77, 22, 91, + 232, 47, 22, 91, 232, 53, 22, 91, 232, 52, 22, 91, 221, 186, 22, 91, 245, + 185, 22, 122, 245, 185, 22, 122, 60, 22, 122, 254, 234, 22, 122, 184, 22, + 122, 218, 65, 22, 122, 246, 168, 22, 122, 73, 22, 122, 218, 16, 22, 122, + 218, 25, 22, 122, 74, 22, 122, 219, 7, 22, 122, 219, 4, 22, 122, 230, + 167, 22, 122, 217, 231, 22, 122, 68, 22, 122, 218, 219, 22, 122, 218, + 227, 22, 122, 218, 204, 22, 122, 217, 200, 22, 122, 246, 115, 22, 122, + 217, 250, 22, 122, 72, 22, 122, 255, 142, 22, 122, 255, 141, 22, 122, + 218, 79, 22, 122, 218, 77, 22, 122, 246, 166, 22, 122, 246, 165, 22, 122, + 246, 167, 22, 122, 218, 15, 22, 122, 218, 14, 22, 122, 231, 13, 22, 122, + 231, 14, 22, 122, 231, 7, 22, 122, 231, 12, 22, 122, 231, 10, 22, 122, + 217, 225, 22, 122, 217, 224, 22, 122, 217, 223, 22, 122, 217, 226, 22, + 122, 217, 227, 22, 122, 220, 179, 22, 122, 220, 178, 22, 122, 220, 177, + 22, 122, 220, 174, 22, 122, 220, 175, 22, 122, 217, 199, 22, 122, 217, + 196, 22, 122, 217, 197, 22, 122, 217, 191, 22, 122, 217, 192, 22, 122, + 217, 193, 22, 122, 217, 195, 22, 122, 246, 109, 22, 122, 246, 111, 22, + 122, 217, 249, 22, 122, 242, 106, 22, 122, 242, 98, 22, 122, 242, 101, + 22, 122, 242, 99, 22, 122, 242, 103, 22, 122, 242, 105, 22, 122, 254, 60, + 22, 122, 254, 57, 22, 122, 254, 55, 22, 122, 254, 56, 22, 122, 223, 216, + 22, 122, 255, 143, 22, 122, 218, 78, 22, 122, 218, 13, 22, 122, 231, 9, + 22, 122, 231, 8, 22, 85, 236, 86, 22, 85, 223, 211, 22, 85, 236, 79, 22, + 85, 232, 55, 22, 85, 232, 53, 22, 85, 232, 52, 22, 85, 221, 192, 22, 85, + 227, 140, 22, 85, 227, 135, 22, 85, 227, 132, 22, 85, 227, 125, 22, 85, + 227, 120, 22, 85, 227, 115, 22, 85, 227, 126, 22, 85, 227, 138, 22, 85, + 233, 187, 22, 85, 229, 99, 22, 85, 229, 88, 22, 85, 224, 104, 22, 85, + 223, 205, 22, 85, 238, 22, 22, 85, 250, 230, 22, 85, 251, 29, 22, 85, + 236, 128, 22, 85, 222, 0, 22, 85, 229, 127, 22, 85, 243, 106, 22, 85, + 236, 80, 22, 85, 236, 78, 22, 85, 232, 51, 22, 85, 232, 45, 22, 85, 232, + 47, 22, 85, 232, 50, 22, 85, 232, 46, 22, 85, 221, 189, 22, 85, 221, 186, + 22, 85, 227, 133, 22, 85, 227, 128, 22, 85, 227, 114, 22, 85, 227, 113, + 22, 85, 223, 207, 22, 85, 227, 130, 22, 85, 227, 129, 22, 85, 227, 122, + 22, 85, 227, 124, 22, 85, 227, 137, 22, 85, 227, 117, 22, 85, 227, 127, + 22, 85, 227, 136, 22, 85, 227, 112, 22, 85, 233, 183, 22, 85, 233, 178, + 22, 85, 233, 180, 22, 85, 233, 177, 22, 85, 233, 175, 22, 85, 233, 181, + 22, 85, 233, 186, 22, 85, 233, 184, 22, 85, 236, 220, 22, 85, 229, 90, + 22, 85, 229, 91, 22, 85, 229, 96, 22, 85, 236, 218, 22, 85, 224, 97, 22, + 85, 224, 87, 22, 85, 224, 90, 22, 85, 224, 92, 22, 85, 230, 1, 22, 85, + 238, 17, 22, 85, 238, 10, 22, 85, 223, 212, 22, 85, 238, 18, 22, 85, 218, + 6, 22, 85, 218, 2, 22, 85, 218, 3, 22, 85, 229, 125, 22, 85, 236, 219, + 22, 85, 243, 104, 22, 85, 243, 102, 22, 85, 243, 105, 22, 85, 243, 103, + 22, 85, 218, 12, 22, 85, 236, 82, 22, 85, 236, 81, 22, 85, 236, 85, 22, + 85, 236, 83, 22, 85, 236, 84, 22, 85, 223, 209, 28, 4, 155, 28, 4, 242, + 173, 28, 4, 243, 112, 28, 4, 243, 211, 28, 4, 243, 148, 28, 4, 243, 162, + 28, 4, 243, 4, 28, 4, 243, 3, 28, 4, 235, 188, 28, 4, 234, 231, 28, 4, + 235, 67, 28, 4, 235, 187, 28, 4, 235, 118, 28, 4, 235, 122, 28, 4, 235, + 12, 28, 4, 234, 206, 28, 4, 243, 121, 28, 4, 243, 115, 28, 4, 243, 117, + 28, 4, 243, 120, 28, 4, 243, 118, 28, 4, 243, 119, 28, 4, 243, 116, 28, + 4, 243, 114, 28, 4, 196, 28, 4, 233, 99, 28, 4, 233, 196, 28, 4, 234, + 118, 28, 4, 234, 16, 28, 4, 234, 25, 28, 4, 233, 136, 28, 4, 233, 49, 28, + 4, 222, 212, 28, 4, 222, 206, 28, 4, 222, 208, 28, 4, 222, 211, 28, 4, + 222, 209, 28, 4, 222, 210, 28, 4, 222, 207, 28, 4, 222, 205, 28, 4, 203, + 28, 4, 227, 22, 28, 4, 227, 147, 28, 4, 228, 0, 28, 4, 227, 200, 28, 4, + 227, 216, 28, 4, 227, 75, 28, 4, 226, 252, 28, 4, 226, 177, 28, 4, 223, + 103, 28, 4, 224, 140, 28, 4, 226, 175, 28, 4, 226, 84, 28, 4, 226, 94, + 28, 4, 224, 26, 28, 4, 223, 36, 28, 4, 225, 25, 28, 4, 224, 170, 28, 4, + 224, 221, 28, 4, 225, 21, 28, 4, 224, 244, 28, 4, 224, 246, 28, 4, 224, + 200, 28, 4, 224, 157, 28, 4, 228, 155, 28, 4, 228, 98, 28, 4, 228, 121, + 28, 4, 228, 154, 28, 4, 228, 135, 28, 4, 228, 136, 28, 4, 228, 110, 28, + 4, 228, 109, 28, 4, 228, 57, 28, 4, 228, 53, 28, 4, 228, 56, 28, 4, 228, + 54, 28, 4, 228, 55, 28, 4, 228, 133, 28, 4, 228, 127, 28, 4, 228, 129, + 28, 4, 228, 132, 28, 4, 228, 130, 28, 4, 228, 131, 28, 4, 228, 128, 28, + 4, 228, 126, 28, 4, 228, 122, 28, 4, 228, 125, 28, 4, 228, 123, 28, 4, + 228, 124, 28, 4, 252, 237, 28, 4, 251, 248, 28, 4, 252, 84, 28, 4, 252, + 236, 28, 4, 252, 137, 28, 4, 252, 144, 28, 4, 252, 41, 28, 4, 251, 218, + 28, 4, 219, 189, 28, 4, 219, 56, 28, 4, 219, 94, 28, 4, 219, 188, 28, 4, + 219, 160, 28, 4, 219, 165, 28, 4, 219, 72, 28, 4, 219, 49, 28, 4, 222, + 155, 28, 4, 221, 0, 28, 4, 221, 205, 28, 4, 222, 152, 28, 4, 222, 80, 28, + 4, 222, 87, 28, 4, 101, 28, 4, 220, 225, 28, 4, 251, 169, 28, 4, 250, 92, + 28, 4, 250, 235, 28, 4, 251, 168, 28, 4, 251, 91, 28, 4, 251, 99, 28, 4, + 250, 182, 28, 4, 250, 66, 28, 4, 218, 138, 28, 4, 218, 114, 28, 4, 218, + 130, 28, 4, 218, 137, 28, 4, 218, 134, 28, 4, 218, 135, 28, 4, 218, 121, + 28, 4, 218, 120, 28, 4, 218, 109, 28, 4, 218, 105, 28, 4, 218, 108, 28, + 4, 218, 106, 28, 4, 218, 107, 28, 4, 208, 28, 4, 231, 144, 28, 4, 232, + 62, 28, 4, 232, 235, 28, 4, 232, 139, 28, 4, 232, 141, 28, 4, 231, 204, + 28, 4, 231, 85, 28, 4, 231, 77, 28, 4, 231, 50, 28, 4, 231, 67, 28, 4, + 231, 76, 28, 4, 231, 72, 28, 4, 231, 73, 28, 4, 231, 56, 28, 4, 231, 43, + 28, 4, 244, 73, 60, 28, 4, 244, 73, 68, 28, 4, 244, 73, 72, 28, 4, 244, + 73, 255, 58, 28, 4, 244, 73, 246, 250, 28, 4, 244, 73, 73, 28, 4, 244, + 73, 74, 28, 4, 244, 73, 219, 7, 28, 4, 175, 28, 4, 236, 7, 28, 4, 236, + 113, 28, 4, 237, 5, 28, 4, 236, 183, 28, 4, 236, 184, 28, 4, 236, 57, 28, + 4, 236, 56, 28, 4, 235, 234, 28, 4, 235, 229, 28, 4, 235, 233, 28, 4, + 235, 230, 28, 4, 235, 231, 28, 4, 235, 224, 28, 4, 235, 218, 28, 4, 235, + 220, 28, 4, 235, 223, 28, 4, 235, 221, 28, 4, 235, 222, 28, 4, 235, 219, + 28, 4, 235, 217, 28, 4, 235, 213, 28, 4, 235, 216, 28, 4, 235, 214, 28, + 4, 235, 215, 28, 4, 219, 7, 28, 4, 218, 165, 28, 4, 218, 204, 28, 4, 219, + 6, 28, 4, 218, 224, 28, 4, 218, 227, 28, 4, 218, 187, 28, 4, 218, 186, + 28, 4, 229, 133, 60, 28, 4, 229, 133, 68, 28, 4, 229, 133, 72, 28, 4, + 229, 133, 255, 58, 28, 4, 229, 133, 246, 250, 28, 4, 229, 133, 73, 28, 4, + 229, 133, 74, 28, 4, 217, 114, 28, 4, 217, 13, 28, 4, 217, 42, 28, 4, + 217, 113, 28, 4, 217, 90, 28, 4, 217, 92, 28, 4, 217, 21, 28, 4, 217, 0, + 28, 4, 217, 80, 28, 4, 217, 60, 28, 4, 217, 67, 28, 4, 217, 79, 28, 4, + 217, 71, 28, 4, 217, 72, 28, 4, 217, 65, 28, 4, 217, 51, 28, 4, 184, 28, + 4, 217, 200, 28, 4, 217, 250, 28, 4, 218, 76, 28, 4, 218, 22, 28, 4, 218, + 25, 28, 4, 217, 231, 28, 4, 217, 222, 28, 4, 249, 207, 28, 4, 247, 111, + 28, 4, 249, 15, 28, 4, 249, 206, 28, 4, 249, 82, 28, 4, 249, 92, 28, 4, + 248, 167, 28, 4, 247, 83, 28, 4, 249, 132, 28, 4, 249, 102, 28, 4, 249, + 114, 28, 4, 249, 131, 28, 4, 249, 119, 28, 4, 249, 120, 28, 4, 249, 107, + 28, 4, 249, 93, 28, 4, 237, 123, 28, 4, 237, 43, 28, 4, 237, 98, 28, 4, + 237, 122, 28, 4, 237, 113, 28, 4, 237, 114, 28, 4, 237, 59, 28, 4, 237, + 25, 28, 4, 245, 0, 28, 4, 244, 17, 28, 4, 244, 103, 28, 4, 244, 253, 28, + 4, 244, 184, 28, 4, 244, 191, 28, 4, 244, 68, 28, 4, 244, 67, 28, 4, 243, + 243, 28, 4, 243, 239, 28, 4, 243, 242, 28, 4, 243, 240, 28, 4, 243, 241, + 28, 4, 244, 160, 28, 4, 244, 140, 28, 4, 244, 150, 28, 4, 244, 159, 28, + 4, 244, 154, 28, 4, 244, 155, 28, 4, 244, 144, 28, 4, 244, 129, 28, 4, + 222, 35, 28, 4, 221, 223, 28, 4, 222, 2, 28, 4, 222, 34, 28, 4, 222, 21, + 28, 4, 222, 22, 28, 4, 221, 239, 28, 4, 221, 216, 28, 4, 251, 69, 28, 4, + 250, 253, 28, 4, 251, 31, 28, 4, 251, 68, 28, 4, 251, 43, 28, 4, 251, 46, + 28, 4, 251, 11, 28, 4, 250, 242, 28, 4, 229, 141, 28, 4, 229, 114, 28, 4, + 229, 129, 28, 4, 229, 140, 28, 4, 229, 131, 28, 4, 229, 132, 28, 4, 229, + 118, 28, 4, 229, 110, 28, 4, 221, 55, 28, 4, 221, 36, 28, 4, 221, 39, 28, + 4, 221, 54, 28, 4, 221, 49, 28, 4, 221, 50, 28, 4, 221, 38, 28, 4, 221, + 34, 28, 4, 220, 188, 28, 4, 220, 180, 28, 4, 220, 184, 28, 4, 220, 187, + 28, 4, 220, 185, 28, 4, 220, 186, 28, 4, 220, 182, 28, 4, 220, 181, 28, + 4, 246, 8, 28, 4, 245, 92, 28, 4, 245, 203, 28, 4, 246, 7, 28, 4, 245, + 226, 28, 4, 245, 231, 28, 4, 245, 139, 28, 4, 245, 78, 28, 4, 187, 28, 4, + 228, 202, 28, 4, 229, 108, 28, 4, 230, 43, 28, 4, 229, 191, 28, 4, 229, + 198, 28, 4, 229, 37, 28, 4, 228, 181, 28, 4, 226, 242, 28, 4, 233, 39, + 28, 4, 245, 72, 28, 36, 244, 183, 78, 28, 226, 87, 78, 28, 218, 173, 28, + 245, 90, 223, 136, 28, 250, 168, 28, 225, 67, 28, 250, 175, 28, 228, 242, + 250, 175, 28, 228, 82, 78, 28, 229, 241, 225, 54, 28, 20, 107, 28, 20, + 103, 28, 20, 160, 28, 20, 154, 28, 20, 174, 28, 20, 182, 28, 20, 191, 28, + 20, 185, 28, 20, 190, 28, 54, 222, 65, 28, 54, 220, 219, 28, 54, 221, + 245, 28, 54, 245, 119, 28, 54, 245, 196, 28, 54, 224, 69, 28, 54, 225, + 38, 28, 54, 246, 227, 28, 54, 232, 27, 28, 54, 242, 161, 28, 54, 222, 66, + 221, 231, 28, 4, 226, 91, 233, 49, 28, 4, 233, 45, 28, 4, 233, 46, 28, 4, + 233, 47, 28, 4, 226, 91, 251, 218, 28, 4, 251, 215, 28, 4, 251, 216, 28, + 4, 251, 217, 28, 4, 226, 91, 245, 78, 28, 4, 245, 74, 28, 4, 245, 75, 28, + 4, 245, 76, 28, 4, 226, 91, 228, 181, 28, 4, 228, 177, 28, 4, 228, 178, + 28, 4, 228, 179, 28, 221, 133, 164, 217, 234, 28, 221, 133, 164, 249, 50, + 28, 221, 133, 164, 227, 97, 28, 221, 133, 164, 224, 192, 227, 97, 28, + 221, 133, 164, 248, 248, 28, 221, 133, 164, 236, 167, 28, 221, 133, 164, + 251, 19, 28, 221, 133, 164, 243, 110, 28, 221, 133, 164, 249, 49, 28, + 221, 133, 164, 235, 245, 143, 1, 60, 143, 1, 73, 143, 1, 72, 143, 1, 74, + 143, 1, 68, 143, 1, 216, 216, 143, 1, 245, 0, 143, 1, 175, 143, 1, 244, + 191, 143, 1, 244, 103, 143, 1, 244, 68, 143, 1, 244, 17, 143, 1, 243, + 244, 143, 1, 155, 143, 1, 243, 162, 143, 1, 243, 112, 143, 1, 243, 4, + 143, 1, 242, 173, 143, 1, 242, 154, 143, 1, 235, 188, 143, 1, 235, 122, + 143, 1, 235, 67, 143, 1, 235, 12, 143, 1, 234, 231, 143, 1, 234, 207, + 143, 1, 196, 143, 1, 234, 25, 143, 1, 233, 196, 143, 1, 233, 136, 143, 1, + 233, 99, 143, 1, 208, 143, 1, 243, 26, 143, 1, 232, 224, 143, 1, 232, + 141, 143, 1, 232, 62, 143, 1, 231, 204, 143, 1, 231, 144, 143, 1, 231, + 87, 143, 1, 228, 97, 143, 1, 228, 84, 143, 1, 228, 78, 143, 1, 228, 72, + 143, 1, 228, 61, 143, 1, 228, 59, 143, 1, 226, 177, 143, 1, 198, 143, 1, + 226, 94, 143, 1, 224, 140, 143, 1, 224, 26, 143, 1, 223, 103, 143, 1, + 223, 41, 143, 1, 249, 207, 143, 1, 222, 155, 143, 1, 249, 92, 143, 1, + 222, 87, 143, 1, 249, 15, 143, 1, 221, 205, 143, 1, 248, 167, 143, 1, + 247, 111, 143, 1, 247, 85, 143, 1, 248, 176, 143, 1, 221, 155, 143, 1, + 221, 154, 143, 1, 221, 144, 143, 1, 221, 143, 143, 1, 221, 142, 143, 1, + 221, 141, 143, 1, 221, 55, 143, 1, 221, 50, 143, 1, 221, 39, 143, 1, 221, + 38, 143, 1, 221, 36, 143, 1, 221, 35, 143, 1, 219, 7, 143, 1, 218, 227, + 143, 1, 218, 204, 143, 1, 218, 187, 143, 1, 218, 165, 143, 1, 218, 156, + 143, 1, 184, 143, 1, 218, 25, 143, 1, 217, 250, 143, 1, 217, 231, 143, 1, + 217, 200, 143, 1, 217, 174, 18, 19, 242, 121, 18, 19, 73, 18, 19, 255, + 22, 18, 19, 72, 18, 19, 237, 255, 18, 19, 74, 18, 19, 230, 127, 18, 19, + 218, 89, 230, 127, 18, 19, 64, 246, 250, 18, 19, 64, 72, 18, 19, 60, 18, + 19, 255, 58, 18, 19, 218, 227, 18, 19, 137, 218, 227, 18, 19, 218, 204, + 18, 19, 137, 218, 204, 18, 19, 218, 196, 18, 19, 137, 218, 196, 18, 19, + 218, 187, 18, 19, 137, 218, 187, 18, 19, 218, 180, 18, 19, 137, 218, 180, + 18, 19, 232, 207, 218, 180, 18, 19, 219, 7, 18, 19, 137, 219, 7, 18, 19, + 219, 6, 18, 19, 137, 219, 6, 18, 19, 232, 207, 219, 6, 18, 19, 254, 196, + 18, 19, 218, 89, 219, 40, 18, 19, 244, 73, 223, 136, 18, 19, 39, 168, 18, + 19, 39, 244, 36, 18, 19, 39, 252, 29, 144, 227, 93, 18, 19, 39, 221, 120, + 144, 227, 93, 18, 19, 39, 45, 144, 227, 93, 18, 19, 39, 227, 93, 18, 19, + 39, 51, 168, 18, 19, 39, 51, 224, 192, 69, 223, 107, 18, 19, 39, 233, + 193, 248, 145, 18, 19, 39, 224, 192, 186, 92, 18, 19, 39, 229, 43, 18, + 19, 39, 113, 222, 143, 18, 19, 246, 197, 18, 19, 237, 223, 18, 19, 230, + 138, 18, 19, 254, 131, 18, 19, 229, 198, 18, 19, 230, 41, 18, 19, 229, + 108, 18, 19, 229, 76, 18, 19, 229, 37, 18, 19, 229, 21, 18, 19, 218, 89, + 229, 21, 18, 19, 64, 243, 148, 18, 19, 64, 243, 112, 18, 19, 187, 18, 19, + 230, 43, 18, 19, 228, 179, 18, 19, 137, 228, 179, 18, 19, 228, 177, 18, + 19, 137, 228, 177, 18, 19, 228, 176, 18, 19, 137, 228, 176, 18, 19, 228, + 174, 18, 19, 137, 228, 174, 18, 19, 228, 173, 18, 19, 137, 228, 173, 18, + 19, 228, 181, 18, 19, 137, 228, 181, 18, 19, 228, 180, 18, 19, 137, 228, + 180, 18, 19, 218, 89, 228, 180, 18, 19, 230, 59, 18, 19, 137, 230, 59, + 18, 19, 64, 243, 225, 18, 19, 222, 87, 18, 19, 222, 150, 18, 19, 221, + 205, 18, 19, 221, 194, 18, 19, 101, 18, 19, 221, 122, 18, 19, 218, 89, + 221, 122, 18, 19, 64, 249, 82, 18, 19, 64, 249, 15, 18, 19, 222, 155, 18, + 19, 222, 152, 18, 19, 220, 223, 18, 19, 137, 220, 223, 18, 19, 220, 208, + 18, 19, 137, 220, 208, 18, 19, 220, 207, 18, 19, 137, 220, 207, 18, 19, + 103, 18, 19, 137, 103, 18, 19, 220, 203, 18, 19, 137, 220, 203, 18, 19, + 220, 225, 18, 19, 137, 220, 225, 18, 19, 220, 224, 18, 19, 137, 220, 224, + 18, 19, 232, 207, 220, 224, 18, 19, 222, 201, 18, 19, 221, 26, 18, 19, + 221, 12, 18, 19, 221, 11, 18, 19, 221, 29, 18, 19, 236, 184, 18, 19, 237, + 2, 18, 19, 236, 113, 18, 19, 236, 105, 18, 19, 236, 57, 18, 19, 236, 41, + 18, 19, 218, 89, 236, 41, 18, 19, 175, 18, 19, 237, 5, 18, 19, 235, 231, + 18, 19, 137, 235, 231, 18, 19, 235, 229, 18, 19, 137, 235, 229, 18, 19, + 235, 228, 18, 19, 137, 235, 228, 18, 19, 235, 227, 18, 19, 137, 235, 227, + 18, 19, 235, 226, 18, 19, 137, 235, 226, 18, 19, 235, 234, 18, 19, 137, + 235, 234, 18, 19, 235, 233, 18, 19, 137, 235, 233, 18, 19, 232, 207, 235, + 233, 18, 19, 237, 17, 18, 19, 235, 235, 18, 19, 224, 5, 236, 178, 18, 19, + 224, 5, 236, 106, 18, 19, 224, 5, 236, 53, 18, 19, 224, 5, 236, 245, 18, + 19, 251, 99, 18, 19, 251, 167, 18, 19, 250, 235, 18, 19, 250, 225, 18, + 19, 250, 182, 18, 19, 250, 130, 18, 19, 218, 89, 250, 130, 18, 19, 251, + 169, 18, 19, 251, 168, 18, 19, 250, 64, 18, 19, 137, 250, 64, 18, 19, + 250, 62, 18, 19, 137, 250, 62, 18, 19, 250, 61, 18, 19, 137, 250, 61, 18, + 19, 250, 60, 18, 19, 137, 250, 60, 18, 19, 250, 59, 18, 19, 137, 250, 59, + 18, 19, 250, 66, 18, 19, 137, 250, 66, 18, 19, 250, 65, 18, 19, 137, 250, + 65, 18, 19, 232, 207, 250, 65, 18, 19, 251, 202, 18, 19, 226, 116, 222, + 37, 18, 19, 234, 25, 18, 19, 234, 117, 18, 19, 233, 196, 18, 19, 233, + 171, 18, 19, 233, 136, 18, 19, 233, 119, 18, 19, 218, 89, 233, 119, 18, + 19, 196, 18, 19, 234, 118, 18, 19, 233, 47, 18, 19, 137, 233, 47, 18, 19, + 233, 45, 18, 19, 137, 233, 45, 18, 19, 233, 44, 18, 19, 137, 233, 44, 18, + 19, 233, 43, 18, 19, 137, 233, 43, 18, 19, 233, 42, 18, 19, 137, 233, 42, + 18, 19, 233, 49, 18, 19, 137, 233, 49, 18, 19, 233, 48, 18, 19, 137, 233, + 48, 18, 19, 232, 207, 233, 48, 18, 19, 189, 18, 19, 137, 189, 18, 19, + 233, 199, 18, 19, 253, 243, 189, 18, 19, 226, 116, 189, 18, 19, 232, 141, + 18, 19, 232, 234, 18, 19, 232, 62, 18, 19, 232, 38, 18, 19, 231, 204, 18, + 19, 231, 195, 18, 19, 218, 89, 231, 195, 18, 19, 208, 18, 19, 232, 235, + 18, 19, 231, 83, 18, 19, 137, 231, 83, 18, 19, 231, 85, 18, 19, 137, 231, + 85, 18, 19, 231, 84, 18, 19, 137, 231, 84, 18, 19, 232, 207, 231, 84, 18, + 19, 207, 18, 19, 64, 232, 117, 18, 19, 232, 67, 18, 19, 235, 122, 18, 19, + 235, 186, 18, 19, 235, 67, 18, 19, 235, 55, 18, 19, 235, 12, 18, 19, 234, + 248, 18, 19, 218, 89, 234, 248, 18, 19, 235, 188, 18, 19, 235, 187, 18, + 19, 234, 204, 18, 19, 137, 234, 204, 18, 19, 234, 203, 18, 19, 137, 234, + 203, 18, 19, 234, 202, 18, 19, 137, 234, 202, 18, 19, 234, 201, 18, 19, + 137, 234, 201, 18, 19, 234, 200, 18, 19, 137, 234, 200, 18, 19, 234, 206, + 18, 19, 137, 234, 206, 18, 19, 234, 205, 18, 19, 137, 234, 205, 18, 19, + 153, 18, 19, 137, 153, 18, 19, 128, 153, 18, 19, 226, 94, 18, 19, 226, + 173, 18, 19, 224, 140, 18, 19, 224, 125, 18, 19, 224, 26, 18, 19, 224, + 14, 18, 19, 218, 89, 224, 14, 18, 19, 226, 177, 18, 19, 226, 175, 18, 19, + 223, 32, 18, 19, 137, 223, 32, 18, 19, 223, 29, 18, 19, 137, 223, 29, 18, + 19, 223, 28, 18, 19, 137, 223, 28, 18, 19, 223, 27, 18, 19, 137, 223, 27, + 18, 19, 223, 26, 18, 19, 137, 223, 26, 18, 19, 223, 36, 18, 19, 137, 223, + 36, 18, 19, 223, 35, 18, 19, 137, 223, 35, 18, 19, 232, 207, 223, 35, 18, + 19, 198, 18, 19, 253, 243, 198, 18, 19, 223, 37, 18, 19, 252, 50, 198, + 18, 19, 233, 116, 224, 66, 18, 19, 232, 207, 224, 59, 18, 19, 232, 207, + 226, 233, 18, 19, 232, 207, 223, 228, 18, 19, 232, 207, 223, 105, 18, 19, + 232, 207, 224, 58, 18, 19, 232, 207, 226, 97, 18, 19, 224, 246, 18, 19, + 224, 221, 18, 19, 224, 216, 18, 19, 224, 200, 18, 19, 224, 195, 18, 19, + 225, 25, 18, 19, 225, 21, 18, 19, 224, 155, 18, 19, 137, 224, 155, 18, + 19, 224, 154, 18, 19, 137, 224, 154, 18, 19, 224, 153, 18, 19, 137, 224, + 153, 18, 19, 224, 152, 18, 19, 137, 224, 152, 18, 19, 224, 151, 18, 19, + 137, 224, 151, 18, 19, 224, 157, 18, 19, 137, 224, 157, 18, 19, 224, 156, + 18, 19, 137, 224, 156, 18, 19, 225, 27, 18, 19, 218, 25, 18, 19, 218, 74, + 18, 19, 217, 250, 18, 19, 217, 242, 18, 19, 217, 231, 18, 19, 217, 216, + 18, 19, 218, 89, 217, 216, 18, 19, 184, 18, 19, 218, 76, 18, 19, 217, + 171, 18, 19, 137, 217, 171, 18, 19, 217, 170, 18, 19, 137, 217, 170, 18, + 19, 217, 169, 18, 19, 137, 217, 169, 18, 19, 217, 168, 18, 19, 137, 217, + 168, 18, 19, 217, 167, 18, 19, 137, 217, 167, 18, 19, 217, 173, 18, 19, + 137, 217, 173, 18, 19, 217, 172, 18, 19, 137, 217, 172, 18, 19, 232, 207, + 217, 172, 18, 19, 218, 90, 18, 19, 252, 82, 218, 90, 18, 19, 137, 218, + 90, 18, 19, 226, 116, 217, 250, 18, 19, 227, 216, 18, 19, 228, 38, 227, + 216, 18, 19, 137, 235, 122, 18, 19, 227, 255, 18, 19, 227, 147, 18, 19, + 227, 98, 18, 19, 227, 75, 18, 19, 227, 67, 18, 19, 137, 235, 12, 18, 19, + 203, 18, 19, 228, 0, 18, 19, 137, 235, 188, 18, 19, 226, 251, 18, 19, + 137, 226, 251, 18, 19, 152, 18, 19, 137, 152, 18, 19, 128, 152, 18, 19, + 245, 231, 18, 19, 246, 5, 18, 19, 245, 203, 18, 19, 245, 190, 18, 19, + 245, 139, 18, 19, 245, 134, 18, 19, 246, 8, 18, 19, 246, 7, 18, 19, 245, + 77, 18, 19, 137, 245, 77, 18, 19, 246, 74, 18, 19, 222, 22, 18, 19, 233, + 32, 222, 22, 18, 19, 222, 2, 18, 19, 233, 32, 222, 2, 18, 19, 221, 254, + 18, 19, 233, 32, 221, 254, 18, 19, 221, 239, 18, 19, 221, 236, 18, 19, + 222, 35, 18, 19, 222, 34, 18, 19, 221, 215, 18, 19, 137, 221, 215, 18, + 19, 222, 37, 18, 19, 221, 17, 18, 19, 221, 16, 18, 19, 221, 15, 18, 19, + 221, 19, 18, 19, 221, 20, 18, 19, 220, 201, 18, 19, 220, 200, 18, 19, + 220, 199, 18, 19, 220, 202, 18, 19, 231, 102, 243, 162, 18, 19, 231, 102, + 243, 112, 18, 19, 231, 102, 243, 97, 18, 19, 231, 102, 243, 4, 18, 19, + 231, 102, 242, 248, 18, 19, 231, 102, 155, 18, 19, 231, 102, 243, 211, + 18, 19, 231, 102, 243, 225, 18, 19, 231, 101, 243, 225, 18, 19, 243, 90, + 18, 19, 228, 151, 18, 19, 228, 121, 18, 19, 228, 116, 18, 19, 228, 110, + 18, 19, 228, 105, 18, 19, 228, 155, 18, 19, 228, 154, 18, 19, 228, 163, + 18, 19, 221, 151, 18, 19, 221, 149, 18, 19, 221, 148, 18, 19, 221, 152, + 18, 19, 137, 227, 216, 18, 19, 137, 227, 147, 18, 19, 137, 227, 75, 18, + 19, 137, 203, 18, 19, 232, 113, 18, 19, 232, 92, 18, 19, 232, 88, 18, 19, + 232, 84, 18, 19, 232, 80, 18, 19, 232, 115, 18, 19, 232, 114, 18, 19, + 232, 117, 18, 19, 231, 215, 18, 19, 226, 116, 224, 246, 18, 19, 226, 116, + 224, 221, 18, 19, 226, 116, 224, 200, 18, 19, 226, 116, 225, 25, 18, 19, + 218, 178, 222, 22, 18, 19, 218, 178, 222, 2, 18, 19, 218, 178, 221, 239, + 18, 19, 218, 178, 222, 35, 18, 19, 218, 178, 222, 37, 18, 19, 235, 73, + 18, 19, 235, 72, 18, 19, 235, 71, 18, 19, 235, 70, 18, 19, 235, 79, 18, + 19, 235, 78, 18, 19, 235, 80, 18, 19, 222, 36, 222, 22, 18, 19, 222, 36, + 222, 2, 18, 19, 222, 36, 221, 254, 18, 19, 222, 36, 221, 239, 18, 19, + 222, 36, 221, 236, 18, 19, 222, 36, 222, 35, 18, 19, 222, 36, 222, 34, + 18, 19, 222, 36, 222, 37, 18, 19, 254, 185, 253, 204, 18, 19, 252, 50, + 73, 18, 19, 252, 50, 72, 18, 19, 252, 50, 74, 18, 19, 252, 50, 60, 18, + 19, 252, 50, 218, 227, 18, 19, 252, 50, 218, 204, 18, 19, 252, 50, 218, + 187, 18, 19, 252, 50, 219, 7, 18, 19, 252, 50, 232, 141, 18, 19, 252, 50, + 232, 62, 18, 19, 252, 50, 231, 204, 18, 19, 252, 50, 208, 18, 19, 252, + 50, 236, 184, 18, 19, 252, 50, 236, 113, 18, 19, 252, 50, 236, 57, 18, + 19, 252, 50, 175, 18, 19, 226, 116, 243, 162, 18, 19, 226, 116, 243, 112, + 18, 19, 226, 116, 243, 4, 18, 19, 226, 116, 155, 18, 19, 64, 244, 109, + 18, 19, 64, 244, 112, 18, 19, 64, 244, 116, 18, 19, 64, 244, 115, 18, 19, + 64, 244, 113, 18, 19, 64, 244, 125, 18, 19, 64, 227, 22, 18, 19, 64, 227, + 75, 18, 19, 64, 227, 216, 18, 19, 64, 227, 200, 18, 19, 64, 227, 147, 18, + 19, 64, 203, 18, 19, 64, 218, 165, 18, 19, 64, 218, 187, 18, 19, 64, 218, + 227, 18, 19, 64, 218, 224, 18, 19, 64, 218, 204, 18, 19, 64, 219, 7, 18, + 19, 64, 242, 147, 18, 19, 64, 242, 148, 18, 19, 64, 242, 151, 18, 19, 64, + 242, 150, 18, 19, 64, 242, 149, 18, 19, 64, 242, 153, 18, 19, 64, 221, + 223, 18, 19, 64, 221, 239, 18, 19, 64, 222, 22, 18, 19, 64, 222, 21, 18, + 19, 64, 222, 2, 18, 19, 64, 222, 35, 18, 19, 64, 221, 3, 18, 19, 64, 221, + 11, 18, 19, 64, 221, 26, 18, 19, 64, 221, 25, 18, 19, 64, 221, 12, 18, + 19, 64, 221, 29, 18, 19, 64, 228, 202, 18, 19, 64, 229, 37, 18, 19, 64, + 229, 198, 18, 19, 64, 229, 191, 18, 19, 64, 229, 108, 18, 19, 64, 187, + 18, 19, 64, 230, 59, 18, 19, 64, 244, 17, 18, 19, 64, 244, 68, 18, 19, + 64, 244, 191, 18, 19, 64, 244, 184, 18, 19, 64, 244, 103, 18, 19, 64, + 245, 0, 18, 19, 64, 236, 120, 18, 19, 64, 236, 125, 18, 19, 64, 236, 137, + 18, 19, 64, 236, 136, 18, 19, 64, 236, 130, 18, 19, 64, 236, 149, 18, 19, + 64, 236, 69, 18, 19, 64, 236, 70, 18, 19, 64, 236, 73, 18, 19, 64, 236, + 72, 18, 19, 64, 236, 71, 18, 19, 64, 236, 74, 18, 19, 64, 236, 75, 18, + 19, 64, 231, 144, 18, 19, 64, 231, 204, 18, 19, 64, 232, 141, 18, 19, 64, + 232, 139, 18, 19, 64, 232, 62, 18, 19, 64, 208, 18, 19, 64, 233, 99, 18, + 19, 64, 233, 136, 18, 19, 64, 234, 25, 18, 19, 64, 234, 16, 18, 19, 64, + 233, 196, 18, 19, 64, 196, 18, 19, 64, 217, 200, 18, 19, 64, 217, 231, + 18, 19, 64, 218, 25, 18, 19, 64, 218, 22, 18, 19, 64, 217, 250, 18, 19, + 64, 184, 18, 19, 64, 237, 43, 18, 19, 226, 116, 237, 43, 18, 19, 64, 237, + 59, 18, 19, 64, 237, 114, 18, 19, 64, 237, 113, 18, 19, 64, 237, 98, 18, + 19, 226, 116, 237, 98, 18, 19, 64, 237, 123, 18, 19, 64, 237, 72, 18, 19, + 64, 237, 76, 18, 19, 64, 237, 86, 18, 19, 64, 237, 85, 18, 19, 64, 237, + 84, 18, 19, 64, 237, 87, 18, 19, 64, 234, 231, 18, 19, 64, 235, 12, 18, + 19, 64, 235, 122, 18, 19, 64, 235, 118, 18, 19, 64, 235, 67, 18, 19, 64, + 235, 188, 18, 19, 64, 248, 171, 18, 19, 64, 248, 172, 18, 19, 64, 248, + 175, 18, 19, 64, 248, 174, 18, 19, 64, 248, 173, 18, 19, 64, 248, 176, + 18, 19, 64, 235, 69, 18, 19, 64, 235, 71, 18, 19, 64, 235, 75, 18, 19, + 64, 235, 74, 18, 19, 64, 235, 73, 18, 19, 64, 235, 79, 18, 19, 64, 221, + 146, 18, 19, 64, 221, 148, 18, 19, 64, 221, 151, 18, 19, 64, 221, 150, + 18, 19, 64, 221, 149, 18, 19, 64, 221, 152, 18, 19, 64, 221, 142, 18, 19, + 64, 221, 143, 18, 19, 64, 221, 154, 18, 19, 64, 221, 153, 18, 19, 64, + 221, 144, 18, 19, 64, 221, 155, 18, 19, 64, 217, 13, 18, 19, 64, 217, 21, + 18, 19, 64, 217, 92, 18, 19, 64, 217, 90, 18, 19, 64, 217, 42, 18, 19, + 64, 217, 114, 18, 19, 64, 217, 157, 18, 19, 64, 66, 217, 157, 18, 19, 64, + 247, 65, 18, 19, 64, 247, 66, 18, 19, 64, 247, 73, 18, 19, 64, 247, 72, + 18, 19, 64, 247, 68, 18, 19, 64, 247, 74, 18, 19, 64, 223, 103, 18, 19, + 64, 224, 26, 18, 19, 64, 226, 94, 18, 19, 64, 226, 84, 18, 19, 64, 224, + 140, 18, 19, 64, 226, 177, 18, 19, 64, 224, 170, 18, 19, 64, 224, 200, + 18, 19, 64, 224, 246, 18, 19, 64, 224, 244, 18, 19, 64, 224, 221, 18, 19, + 64, 225, 25, 18, 19, 64, 225, 27, 18, 19, 64, 221, 36, 18, 19, 64, 221, + 38, 18, 19, 64, 221, 50, 18, 19, 64, 221, 49, 18, 19, 64, 221, 39, 18, + 19, 64, 221, 55, 18, 19, 64, 250, 253, 18, 19, 64, 251, 11, 18, 19, 64, + 251, 46, 18, 19, 64, 251, 43, 18, 19, 64, 251, 31, 18, 19, 64, 251, 69, + 18, 19, 64, 221, 5, 18, 19, 64, 221, 6, 18, 19, 64, 221, 9, 18, 19, 64, + 221, 8, 18, 19, 64, 221, 7, 18, 19, 64, 221, 10, 18, 19, 251, 32, 55, 18, + 19, 245, 90, 223, 136, 18, 19, 228, 147, 18, 19, 232, 112, 18, 19, 231, + 212, 18, 19, 231, 211, 18, 19, 231, 210, 18, 19, 231, 209, 18, 19, 231, + 214, 18, 19, 231, 213, 18, 19, 218, 178, 221, 213, 18, 19, 218, 178, 221, + 212, 18, 19, 218, 178, 221, 211, 18, 19, 218, 178, 221, 210, 18, 19, 218, + 178, 221, 209, 18, 19, 218, 178, 221, 216, 18, 19, 218, 178, 221, 215, + 18, 19, 218, 178, 39, 222, 37, 18, 19, 252, 50, 219, 40, 230, 164, 223, + 255, 78, 230, 164, 1, 252, 122, 230, 164, 1, 234, 222, 230, 164, 1, 245, + 230, 230, 164, 1, 226, 161, 230, 164, 1, 232, 25, 230, 164, 1, 220, 122, + 230, 164, 1, 249, 185, 230, 164, 1, 221, 173, 230, 164, 1, 250, 177, 230, + 164, 1, 251, 89, 230, 164, 1, 233, 91, 230, 164, 1, 244, 53, 230, 164, 1, + 232, 105, 230, 164, 1, 223, 131, 230, 164, 1, 227, 18, 230, 164, 1, 254, + 193, 230, 164, 1, 230, 131, 230, 164, 1, 220, 50, 230, 164, 1, 247, 14, + 230, 164, 1, 237, 165, 230, 164, 1, 247, 15, 230, 164, 1, 230, 105, 230, + 164, 1, 220, 103, 230, 164, 1, 238, 5, 230, 164, 1, 247, 12, 230, 164, 1, + 229, 184, 230, 164, 245, 229, 78, 230, 164, 210, 245, 229, 78, 157, 1, + 245, 220, 245, 212, 245, 232, 246, 74, 157, 1, 216, 216, 157, 1, 220, 36, + 220, 51, 68, 157, 1, 217, 202, 157, 1, 218, 90, 157, 1, 219, 40, 157, 1, + 221, 218, 221, 217, 221, 234, 157, 1, 246, 118, 157, 1, 254, 106, 60, + 157, 1, 230, 94, 74, 157, 1, 255, 3, 60, 157, 1, 254, 219, 157, 1, 234, + 254, 74, 157, 1, 224, 185, 74, 157, 1, 74, 157, 1, 230, 167, 157, 1, 230, + 138, 157, 1, 227, 244, 227, 253, 227, 195, 152, 157, 1, 236, 195, 157, 1, + 251, 87, 157, 1, 236, 196, 237, 17, 157, 1, 245, 67, 157, 1, 246, 185, + 157, 1, 244, 187, 243, 231, 245, 67, 157, 1, 244, 220, 157, 1, 218, 160, + 218, 155, 219, 40, 157, 1, 243, 203, 243, 225, 157, 1, 243, 207, 243, + 225, 157, 1, 235, 0, 243, 225, 157, 1, 224, 188, 243, 225, 157, 1, 232, + 203, 231, 74, 232, 204, 207, 157, 1, 224, 186, 207, 157, 1, 247, 140, + 157, 1, 237, 148, 237, 152, 237, 142, 72, 157, 1, 73, 157, 1, 237, 106, + 237, 126, 157, 1, 244, 173, 157, 1, 235, 1, 254, 234, 157, 1, 224, 190, + 60, 157, 1, 237, 135, 246, 164, 157, 1, 229, 155, 229, 173, 230, 59, 157, + 1, 254, 162, 246, 163, 157, 1, 224, 3, 198, 157, 1, 224, 129, 234, 253, + 198, 157, 1, 224, 184, 198, 157, 1, 251, 202, 157, 1, 217, 157, 157, 1, + 221, 159, 221, 166, 220, 190, 222, 201, 157, 1, 224, 183, 222, 201, 157, + 1, 250, 46, 157, 1, 252, 107, 252, 110, 252, 56, 253, 204, 157, 1, 224, + 189, 253, 204, 157, 1, 247, 139, 157, 1, 230, 115, 157, 1, 246, 238, 246, + 240, 73, 157, 1, 234, 81, 234, 87, 189, 157, 1, 234, 255, 189, 157, 1, + 224, 187, 189, 157, 1, 235, 136, 235, 171, 235, 4, 153, 157, 1, 247, 141, + 157, 1, 237, 203, 157, 1, 237, 204, 157, 1, 249, 196, 249, 201, 250, 46, + 157, 1, 230, 90, 246, 117, 74, 157, 1, 247, 11, 157, 1, 237, 164, 157, 1, + 250, 63, 157, 1, 251, 160, 157, 1, 251, 98, 157, 1, 223, 161, 157, 1, + 234, 252, 157, 1, 224, 182, 157, 1, 242, 64, 157, 1, 228, 163, 157, 1, + 218, 151, 157, 224, 109, 228, 196, 157, 233, 85, 228, 196, 157, 250, 101, + 228, 196, 157, 254, 33, 100, 157, 220, 227, 100, 157, 252, 121, 100, 222, + 140, 1, 60, 222, 140, 1, 72, 222, 140, 1, 68, 222, 140, 1, 175, 222, 140, + 1, 245, 0, 222, 140, 1, 232, 115, 222, 140, 1, 222, 155, 222, 140, 1, + 249, 207, 222, 140, 1, 208, 222, 140, 1, 187, 222, 140, 1, 252, 237, 222, + 140, 1, 196, 222, 140, 1, 184, 222, 140, 1, 235, 188, 222, 140, 1, 219, + 7, 222, 140, 1, 226, 177, 222, 140, 1, 155, 222, 140, 29, 5, 72, 222, + 140, 29, 5, 68, 222, 140, 5, 219, 82, 243, 184, 1, 60, 243, 184, 1, 72, + 243, 184, 1, 68, 243, 184, 1, 175, 243, 184, 1, 245, 0, 243, 184, 1, 232, + 115, 243, 184, 1, 222, 155, 243, 184, 1, 249, 207, 243, 184, 1, 208, 243, + 184, 1, 187, 243, 184, 1, 252, 237, 243, 184, 1, 196, 243, 184, 1, 184, + 243, 184, 1, 203, 243, 184, 1, 235, 188, 243, 184, 1, 219, 7, 243, 184, + 1, 226, 177, 243, 184, 1, 155, 243, 184, 29, 5, 72, 243, 184, 29, 5, 68, + 243, 184, 5, 230, 14, 229, 122, 224, 109, 228, 196, 229, 122, 51, 228, + 196, 251, 245, 1, 60, 251, 245, 1, 72, 251, 245, 1, 68, 251, 245, 1, 175, + 251, 245, 1, 245, 0, 251, 245, 1, 232, 115, 251, 245, 1, 222, 155, 251, + 245, 1, 249, 207, 251, 245, 1, 208, 251, 245, 1, 187, 251, 245, 1, 252, + 237, 251, 245, 1, 196, 251, 245, 1, 184, 251, 245, 1, 203, 251, 245, 1, + 235, 188, 251, 245, 1, 219, 7, 251, 245, 1, 226, 177, 251, 245, 1, 155, + 251, 245, 29, 5, 72, 251, 245, 29, 5, 68, 222, 139, 1, 60, 222, 139, 1, + 72, 222, 139, 1, 68, 222, 139, 1, 175, 222, 139, 1, 245, 0, 222, 139, 1, + 232, 115, 222, 139, 1, 222, 155, 222, 139, 1, 249, 207, 222, 139, 1, 208, + 222, 139, 1, 187, 222, 139, 1, 252, 237, 222, 139, 1, 196, 222, 139, 1, + 184, 222, 139, 1, 235, 188, 222, 139, 1, 219, 7, 222, 139, 1, 226, 177, + 222, 139, 29, 5, 72, 222, 139, 29, 5, 68, 79, 1, 175, 79, 1, 236, 149, + 79, 1, 236, 57, 79, 1, 236, 125, 79, 1, 232, 84, 79, 1, 251, 169, 79, 1, + 251, 69, 79, 1, 250, 182, 79, 1, 251, 11, 79, 1, 231, 56, 79, 1, 249, + 207, 79, 1, 221, 19, 79, 1, 248, 167, 79, 1, 221, 15, 79, 1, 231, 207, + 79, 1, 222, 155, 79, 1, 222, 35, 79, 1, 101, 79, 1, 221, 239, 79, 1, 231, + 204, 79, 1, 252, 237, 79, 1, 229, 141, 79, 1, 229, 37, 79, 1, 229, 118, + 79, 1, 233, 136, 79, 1, 217, 231, 79, 1, 227, 75, 79, 1, 235, 12, 79, 1, + 219, 72, 79, 1, 225, 25, 79, 1, 223, 182, 79, 1, 226, 177, 79, 1, 155, + 79, 1, 235, 188, 79, 1, 228, 155, 79, 237, 214, 29, 228, 141, 79, 237, + 214, 29, 228, 154, 79, 237, 214, 29, 228, 121, 79, 237, 214, 29, 228, + 116, 79, 237, 214, 29, 228, 98, 79, 237, 214, 29, 228, 73, 79, 237, 214, + 29, 228, 61, 79, 237, 214, 29, 228, 60, 79, 237, 214, 29, 226, 243, 79, + 237, 214, 29, 226, 236, 79, 237, 214, 29, 234, 198, 79, 237, 214, 29, + 234, 189, 79, 237, 214, 29, 228, 136, 79, 237, 214, 29, 228, 147, 79, + 237, 214, 29, 228, 106, 220, 198, 107, 79, 237, 214, 29, 228, 106, 220, + 198, 103, 79, 237, 214, 29, 228, 137, 79, 29, 237, 202, 254, 69, 79, 29, + 237, 202, 255, 58, 79, 29, 5, 255, 58, 79, 29, 5, 72, 79, 29, 5, 237, + 255, 79, 29, 5, 218, 90, 79, 29, 5, 217, 166, 79, 29, 5, 68, 79, 29, 5, + 220, 23, 79, 29, 5, 220, 123, 79, 29, 5, 230, 167, 79, 29, 5, 184, 79, + 29, 5, 238, 26, 79, 29, 5, 73, 79, 29, 5, 254, 234, 79, 29, 5, 254, 196, + 79, 29, 5, 230, 127, 79, 29, 5, 253, 232, 79, 5, 232, 37, 79, 5, 227, + 214, 79, 5, 217, 176, 79, 5, 233, 55, 79, 5, 221, 80, 79, 5, 252, 203, + 79, 5, 227, 71, 79, 5, 221, 138, 79, 5, 236, 239, 79, 5, 254, 198, 79, 5, + 226, 141, 226, 137, 79, 5, 219, 79, 79, 5, 250, 179, 79, 5, 252, 183, 79, + 5, 236, 142, 79, 5, 252, 199, 79, 5, 251, 156, 229, 77, 235, 239, 79, 5, + 235, 100, 221, 122, 79, 5, 252, 96, 79, 5, 229, 120, 233, 97, 79, 5, 236, + 40, 79, 250, 78, 16, 227, 142, 79, 5, 253, 218, 79, 5, 253, 235, 79, 20, + 217, 84, 79, 20, 107, 79, 20, 103, 79, 20, 160, 79, 20, 154, 79, 20, 174, + 79, 20, 182, 79, 20, 191, 79, 20, 185, 79, 20, 190, 79, 16, 235, 100, + 253, 237, 224, 16, 79, 16, 235, 100, 253, 237, 233, 72, 79, 16, 235, 100, + 253, 237, 229, 76, 79, 16, 235, 100, 253, 237, 252, 123, 79, 16, 235, + 100, 253, 237, 251, 233, 79, 16, 235, 100, 253, 237, 229, 1, 79, 16, 235, + 100, 253, 237, 228, 251, 79, 16, 235, 100, 253, 237, 228, 249, 79, 16, + 235, 100, 253, 237, 228, 255, 79, 16, 235, 100, 253, 237, 228, 253, 77, + 252, 66, 77, 246, 208, 77, 250, 168, 77, 245, 90, 223, 136, 77, 250, 175, + 77, 245, 116, 248, 143, 77, 221, 137, 224, 21, 242, 121, 77, 224, 139, 4, + 252, 26, 234, 63, 77, 234, 84, 250, 168, 77, 234, 84, 245, 90, 223, 136, + 77, 232, 23, 77, 245, 103, 41, 226, 74, 107, 77, 245, 103, 41, 226, 74, + 103, 77, 245, 103, 41, 226, 74, 160, 77, 29, 225, 54, 77, 20, 217, 84, + 77, 20, 107, 77, 20, 103, 77, 20, 160, 77, 20, 154, 77, 20, 174, 77, 20, + 182, 77, 20, 191, 77, 20, 185, 77, 20, 190, 77, 1, 60, 77, 1, 73, 77, 1, + 72, 77, 1, 74, 77, 1, 68, 77, 1, 230, 167, 77, 1, 220, 110, 77, 1, 246, + 250, 77, 1, 208, 77, 1, 254, 123, 77, 1, 252, 237, 77, 1, 187, 77, 1, + 228, 155, 77, 1, 245, 0, 77, 1, 196, 77, 1, 235, 188, 77, 1, 226, 177, + 77, 1, 225, 25, 77, 1, 222, 155, 77, 1, 249, 207, 77, 1, 251, 69, 77, 1, + 237, 123, 77, 1, 184, 77, 1, 203, 77, 1, 219, 7, 77, 1, 246, 8, 77, 1, + 175, 77, 1, 236, 149, 77, 1, 221, 55, 77, 1, 217, 114, 77, 1, 243, 211, + 77, 1, 217, 14, 77, 1, 235, 79, 77, 1, 217, 67, 77, 1, 251, 31, 77, 1, + 221, 137, 171, 29, 55, 77, 1, 221, 137, 73, 77, 1, 221, 137, 72, 77, 1, + 221, 137, 74, 77, 1, 221, 137, 68, 77, 1, 221, 137, 230, 167, 77, 1, 221, + 137, 220, 110, 77, 1, 221, 137, 254, 123, 77, 1, 221, 137, 252, 237, 77, + 1, 221, 137, 187, 77, 1, 221, 137, 228, 155, 77, 1, 221, 137, 245, 0, 77, + 1, 221, 137, 196, 77, 1, 221, 137, 222, 155, 77, 1, 221, 137, 249, 207, + 77, 1, 221, 137, 251, 69, 77, 1, 221, 137, 237, 123, 77, 1, 221, 137, + 221, 55, 77, 1, 221, 137, 184, 77, 1, 221, 137, 219, 7, 77, 1, 221, 137, + 175, 77, 1, 221, 137, 244, 253, 77, 1, 221, 137, 243, 211, 77, 1, 221, + 137, 237, 97, 77, 1, 221, 137, 232, 60, 77, 1, 221, 137, 247, 74, 77, 1, + 224, 139, 73, 77, 1, 224, 139, 72, 77, 1, 224, 139, 237, 133, 77, 1, 224, + 139, 220, 110, 77, 1, 224, 139, 68, 77, 1, 224, 139, 254, 123, 77, 1, + 224, 139, 175, 77, 1, 224, 139, 245, 0, 77, 1, 224, 139, 155, 77, 1, 224, + 139, 187, 77, 1, 224, 139, 225, 25, 77, 1, 224, 139, 222, 155, 77, 1, + 224, 139, 249, 207, 77, 1, 224, 139, 237, 123, 77, 1, 224, 139, 246, 8, + 77, 1, 224, 139, 244, 253, 77, 1, 224, 139, 243, 211, 77, 1, 224, 139, + 221, 55, 77, 1, 224, 139, 217, 114, 77, 1, 224, 139, 228, 0, 77, 1, 224, + 139, 251, 69, 77, 1, 224, 139, 217, 80, 77, 1, 234, 84, 72, 77, 1, 234, + 84, 175, 77, 1, 234, 84, 203, 77, 1, 234, 84, 246, 8, 77, 1, 234, 84, + 217, 80, 77, 1, 254, 161, 244, 238, 254, 96, 107, 77, 1, 254, 161, 244, + 238, 219, 78, 107, 77, 1, 254, 161, 244, 238, 249, 174, 77, 1, 254, 161, + 244, 238, 220, 120, 77, 1, 254, 161, 244, 238, 237, 170, 220, 120, 77, 1, + 254, 161, 244, 238, 252, 212, 77, 1, 254, 161, 244, 238, 148, 252, 212, + 77, 1, 254, 161, 244, 238, 60, 77, 1, 254, 161, 244, 238, 72, 77, 1, 254, + 161, 244, 238, 175, 77, 1, 254, 161, 244, 238, 232, 115, 77, 1, 254, 161, + 244, 238, 251, 169, 77, 1, 254, 161, 244, 238, 221, 29, 77, 1, 254, 161, + 244, 238, 221, 19, 77, 1, 254, 161, 244, 238, 249, 132, 77, 1, 254, 161, + 244, 238, 231, 217, 77, 1, 254, 161, 244, 238, 222, 155, 77, 1, 254, 161, + 244, 238, 249, 207, 77, 1, 254, 161, 244, 238, 187, 77, 1, 254, 161, 244, + 238, 229, 141, 77, 1, 254, 161, 244, 238, 223, 218, 77, 1, 254, 161, 244, + 238, 217, 80, 77, 1, 254, 161, 244, 238, 217, 114, 77, 1, 254, 161, 244, + 238, 254, 202, 77, 1, 221, 137, 254, 161, 244, 238, 222, 155, 77, 1, 221, + 137, 254, 161, 244, 238, 217, 80, 77, 1, 234, 84, 254, 161, 244, 238, + 244, 125, 77, 1, 234, 84, 254, 161, 244, 238, 232, 115, 77, 1, 234, 84, + 254, 161, 244, 238, 251, 169, 77, 1, 234, 84, 254, 161, 244, 238, 237, + 103, 77, 1, 234, 84, 254, 161, 244, 238, 221, 29, 77, 1, 234, 84, 254, + 161, 244, 238, 249, 116, 77, 1, 234, 84, 254, 161, 244, 238, 222, 155, + 77, 1, 234, 84, 254, 161, 244, 238, 249, 36, 77, 1, 234, 84, 254, 161, + 244, 238, 223, 218, 77, 1, 234, 84, 254, 161, 244, 238, 250, 57, 77, 1, + 234, 84, 254, 161, 244, 238, 217, 80, 77, 1, 234, 84, 254, 161, 244, 238, + 217, 114, 77, 1, 254, 161, 244, 238, 144, 68, 77, 1, 254, 161, 244, 238, + 144, 184, 77, 1, 234, 84, 254, 161, 244, 238, 252, 94, 77, 1, 254, 161, + 244, 238, 249, 197, 77, 1, 234, 84, 254, 161, 244, 238, 235, 79, 18, 19, + 230, 63, 18, 19, 253, 212, 18, 19, 255, 14, 18, 19, 218, 229, 18, 19, + 229, 7, 18, 19, 229, 205, 18, 19, 228, 172, 18, 19, 222, 96, 18, 19, 236, + 191, 18, 19, 235, 232, 18, 19, 234, 45, 18, 19, 231, 172, 18, 19, 232, + 199, 18, 19, 235, 132, 18, 19, 224, 1, 18, 19, 226, 118, 18, 19, 224, + 175, 18, 19, 224, 249, 18, 19, 224, 150, 18, 19, 217, 208, 18, 19, 218, + 30, 18, 19, 227, 222, 18, 19, 231, 82, 18, 19, 230, 155, 231, 82, 18, 19, + 231, 81, 18, 19, 230, 155, 231, 81, 18, 19, 231, 80, 18, 19, 230, 155, + 231, 80, 18, 19, 231, 79, 18, 19, 230, 155, 231, 79, 18, 19, 226, 248, + 18, 19, 226, 247, 18, 19, 226, 246, 18, 19, 226, 245, 18, 19, 226, 244, + 18, 19, 226, 252, 18, 19, 230, 155, 230, 59, 18, 19, 230, 155, 222, 201, + 18, 19, 230, 155, 237, 17, 18, 19, 230, 155, 251, 202, 18, 19, 230, 155, + 189, 18, 19, 230, 155, 207, 18, 19, 230, 155, 198, 18, 19, 230, 155, 225, + 27, 18, 19, 247, 4, 219, 40, 18, 19, 218, 215, 219, 40, 18, 19, 39, 3, + 227, 93, 18, 19, 39, 227, 241, 248, 145, 18, 19, 228, 38, 226, 249, 18, + 19, 137, 234, 248, 18, 19, 137, 235, 187, 18, 19, 221, 214, 18, 19, 221, + 216, 18, 19, 221, 13, 18, 19, 221, 14, 18, 19, 221, 18, 18, 19, 221, 145, + 18, 19, 221, 147, 18, 19, 226, 116, 224, 155, 18, 19, 226, 116, 224, 195, + 18, 19, 226, 116, 242, 248, 18, 19, 64, 243, 238, 18, 19, 64, 249, 60, + 244, 184, 18, 19, 64, 244, 253, 18, 19, 64, 243, 243, 18, 19, 226, 116, + 237, 27, 18, 19, 64, 237, 25, 18, 19, 252, 139, 249, 60, 153, 18, 19, + 252, 139, 249, 60, 152, 18, 19, 64, 249, 55, 198, 195, 219, 59, 235, 84, + 195, 1, 175, 195, 1, 236, 149, 195, 1, 245, 0, 195, 1, 244, 125, 195, 1, + 232, 115, 195, 1, 251, 169, 195, 1, 251, 69, 195, 1, 237, 123, 195, 1, + 237, 103, 195, 1, 218, 47, 195, 1, 222, 155, 195, 1, 222, 35, 195, 1, + 249, 207, 195, 1, 249, 36, 195, 1, 208, 195, 1, 187, 195, 1, 229, 141, + 195, 1, 252, 237, 195, 1, 252, 94, 195, 1, 196, 195, 1, 184, 195, 1, 203, + 195, 1, 235, 188, 195, 1, 219, 7, 195, 1, 225, 25, 195, 1, 223, 218, 195, + 1, 226, 177, 195, 1, 155, 195, 29, 5, 60, 195, 29, 5, 72, 195, 29, 5, 68, + 195, 29, 5, 246, 250, 195, 29, 5, 254, 196, 195, 29, 5, 230, 127, 195, + 29, 5, 253, 232, 195, 29, 5, 73, 195, 29, 5, 74, 195, 223, 97, 1, 184, + 195, 223, 97, 1, 203, 195, 223, 97, 1, 219, 7, 195, 3, 1, 175, 195, 3, 1, + 232, 115, 195, 3, 1, 254, 95, 195, 3, 1, 222, 155, 195, 3, 1, 208, 195, + 3, 1, 187, 195, 3, 1, 196, 195, 3, 1, 203, 195, 3, 1, 235, 188, 195, 5, + 233, 89, 195, 5, 236, 173, 195, 5, 226, 176, 195, 5, 234, 248, 195, 246, + 95, 78, 195, 228, 82, 78, 195, 20, 217, 84, 195, 20, 107, 195, 20, 103, + 195, 20, 160, 195, 20, 154, 195, 20, 174, 195, 20, 182, 195, 20, 191, + 195, 20, 185, 195, 20, 190, 37, 235, 123, 1, 175, 37, 235, 123, 1, 218, + 138, 37, 235, 123, 1, 232, 115, 37, 235, 123, 1, 221, 55, 37, 235, 123, + 1, 226, 177, 37, 235, 123, 1, 184, 37, 235, 123, 1, 222, 155, 37, 235, + 123, 1, 222, 35, 37, 235, 123, 1, 235, 188, 37, 235, 123, 1, 187, 37, + 235, 123, 1, 229, 141, 37, 235, 123, 1, 196, 37, 235, 123, 1, 246, 8, 37, + 235, 123, 1, 219, 189, 37, 235, 123, 1, 155, 37, 235, 123, 1, 228, 155, + 37, 235, 123, 1, 236, 149, 37, 235, 123, 1, 221, 47, 37, 235, 123, 1, + 208, 37, 235, 123, 1, 60, 37, 235, 123, 1, 72, 37, 235, 123, 1, 246, 250, + 37, 235, 123, 1, 246, 239, 37, 235, 123, 1, 68, 37, 235, 123, 1, 230, + 127, 37, 235, 123, 1, 74, 37, 235, 123, 1, 220, 110, 37, 235, 123, 1, 73, + 37, 235, 123, 1, 253, 231, 37, 235, 123, 1, 254, 196, 37, 235, 123, 1, + 221, 130, 37, 235, 123, 1, 221, 129, 37, 235, 123, 1, 221, 128, 37, 235, + 123, 1, 221, 127, 37, 235, 123, 1, 221, 126, 146, 37, 151, 1, 116, 228, + 155, 146, 37, 151, 1, 109, 228, 155, 146, 37, 151, 1, 116, 175, 146, 37, + 151, 1, 116, 218, 138, 146, 37, 151, 1, 116, 232, 115, 146, 37, 151, 1, + 109, 175, 146, 37, 151, 1, 109, 218, 138, 146, 37, 151, 1, 109, 232, 115, + 146, 37, 151, 1, 116, 221, 55, 146, 37, 151, 1, 116, 226, 177, 146, 37, + 151, 1, 116, 184, 146, 37, 151, 1, 109, 221, 55, 146, 37, 151, 1, 109, + 226, 177, 146, 37, 151, 1, 109, 184, 146, 37, 151, 1, 116, 222, 155, 146, + 37, 151, 1, 116, 222, 35, 146, 37, 151, 1, 116, 208, 146, 37, 151, 1, + 109, 222, 155, 146, 37, 151, 1, 109, 222, 35, 146, 37, 151, 1, 109, 208, + 146, 37, 151, 1, 116, 187, 146, 37, 151, 1, 116, 229, 141, 146, 37, 151, + 1, 116, 196, 146, 37, 151, 1, 109, 187, 146, 37, 151, 1, 109, 229, 141, + 146, 37, 151, 1, 109, 196, 146, 37, 151, 1, 116, 246, 8, 146, 37, 151, 1, + 116, 219, 189, 146, 37, 151, 1, 116, 235, 188, 146, 37, 151, 1, 109, 246, + 8, 146, 37, 151, 1, 109, 219, 189, 146, 37, 151, 1, 109, 235, 188, 146, + 37, 151, 1, 116, 155, 146, 37, 151, 1, 116, 249, 207, 146, 37, 151, 1, + 116, 252, 237, 146, 37, 151, 1, 109, 155, 146, 37, 151, 1, 109, 249, 207, + 146, 37, 151, 1, 109, 252, 237, 146, 37, 151, 1, 116, 235, 236, 146, 37, + 151, 1, 116, 218, 111, 146, 37, 151, 1, 109, 235, 236, 146, 37, 151, 1, + 109, 218, 111, 146, 37, 151, 1, 116, 223, 102, 146, 37, 151, 1, 109, 223, + 102, 146, 37, 151, 29, 5, 29, 224, 181, 146, 37, 151, 29, 5, 255, 58, + 146, 37, 151, 29, 5, 237, 255, 146, 37, 151, 29, 5, 68, 146, 37, 151, 29, + 5, 220, 23, 146, 37, 151, 29, 5, 73, 146, 37, 151, 29, 5, 254, 234, 146, + 37, 151, 29, 5, 74, 146, 37, 151, 29, 5, 230, 185, 146, 37, 151, 29, 5, + 220, 110, 146, 37, 151, 29, 5, 253, 212, 146, 37, 151, 29, 5, 255, 14, + 146, 37, 151, 29, 5, 220, 16, 146, 37, 151, 29, 5, 230, 63, 146, 37, 151, + 29, 5, 230, 182, 146, 37, 151, 29, 5, 220, 107, 146, 37, 151, 29, 5, 237, + 133, 146, 37, 151, 1, 39, 216, 216, 146, 37, 151, 1, 39, 232, 117, 146, + 37, 151, 1, 39, 207, 146, 37, 151, 1, 39, 189, 146, 37, 151, 1, 39, 237, + 17, 146, 37, 151, 1, 39, 250, 46, 146, 37, 151, 1, 39, 253, 204, 146, 37, + 151, 145, 234, 67, 146, 37, 151, 145, 234, 66, 146, 37, 151, 20, 217, 84, + 146, 37, 151, 20, 107, 146, 37, 151, 20, 103, 146, 37, 151, 20, 160, 146, + 37, 151, 20, 154, 146, 37, 151, 20, 174, 146, 37, 151, 20, 182, 146, 37, + 151, 20, 191, 146, 37, 151, 20, 185, 146, 37, 151, 20, 190, 146, 37, 151, + 83, 20, 107, 146, 37, 151, 5, 235, 177, 146, 37, 151, 5, 235, 176, 79, + 16, 229, 211, 79, 16, 233, 73, 236, 55, 79, 16, 229, 77, 236, 55, 79, 16, + 252, 124, 236, 55, 79, 16, 251, 234, 236, 55, 79, 16, 229, 2, 236, 55, + 79, 16, 228, 252, 236, 55, 79, 16, 228, 250, 236, 55, 79, 16, 229, 0, + 236, 55, 79, 16, 228, 254, 236, 55, 79, 16, 249, 163, 236, 55, 79, 16, + 249, 159, 236, 55, 79, 16, 249, 158, 236, 55, 79, 16, 249, 161, 236, 55, + 79, 16, 249, 160, 236, 55, 79, 16, 249, 157, 236, 55, 79, 16, 220, 230, + 79, 16, 233, 73, 227, 70, 79, 16, 229, 77, 227, 70, 79, 16, 252, 124, + 227, 70, 79, 16, 251, 234, 227, 70, 79, 16, 229, 2, 227, 70, 79, 16, 228, + 252, 227, 70, 79, 16, 228, 250, 227, 70, 79, 16, 229, 0, 227, 70, 79, 16, + 228, 254, 227, 70, 79, 16, 249, 163, 227, 70, 79, 16, 249, 159, 227, 70, + 79, 16, 249, 158, 227, 70, 79, 16, 249, 161, 227, 70, 79, 16, 249, 160, + 227, 70, 79, 16, 249, 157, 227, 70, 251, 246, 1, 175, 251, 246, 1, 245, + 0, 251, 246, 1, 232, 115, 251, 246, 1, 232, 87, 251, 246, 1, 187, 251, + 246, 1, 252, 237, 251, 246, 1, 196, 251, 246, 1, 233, 102, 251, 246, 1, + 222, 155, 251, 246, 1, 249, 207, 251, 246, 1, 208, 251, 246, 1, 231, 171, + 251, 246, 1, 251, 169, 251, 246, 1, 237, 123, 251, 246, 1, 231, 77, 251, + 246, 1, 231, 75, 251, 246, 1, 184, 251, 246, 1, 203, 251, 246, 1, 235, + 188, 251, 246, 1, 219, 189, 251, 246, 1, 226, 177, 251, 246, 1, 60, 251, + 246, 1, 155, 251, 246, 29, 5, 72, 251, 246, 29, 5, 68, 251, 246, 29, 5, + 73, 251, 246, 29, 5, 74, 251, 246, 29, 5, 254, 234, 251, 246, 230, 24, + 251, 246, 246, 190, 117, 226, 86, 37, 83, 1, 116, 175, 37, 83, 1, 116, + 236, 149, 37, 83, 1, 116, 235, 224, 37, 83, 1, 109, 175, 37, 83, 1, 109, + 235, 224, 37, 83, 1, 109, 236, 149, 37, 83, 1, 232, 115, 37, 83, 1, 116, + 251, 169, 37, 83, 1, 116, 251, 69, 37, 83, 1, 109, 251, 169, 37, 83, 1, + 109, 226, 177, 37, 83, 1, 109, 251, 69, 37, 83, 1, 231, 77, 37, 83, 1, + 227, 227, 37, 83, 1, 116, 227, 225, 37, 83, 1, 249, 207, 37, 83, 1, 109, + 227, 225, 37, 83, 1, 227, 235, 37, 83, 1, 116, 222, 155, 37, 83, 1, 116, + 222, 35, 37, 83, 1, 109, 222, 155, 37, 83, 1, 109, 222, 35, 37, 83, 1, + 208, 37, 83, 1, 252, 237, 37, 83, 1, 116, 187, 37, 83, 1, 116, 229, 141, + 37, 83, 1, 116, 246, 8, 37, 83, 1, 109, 187, 37, 83, 1, 109, 246, 8, 37, + 83, 1, 109, 229, 141, 37, 83, 1, 196, 37, 83, 1, 109, 184, 37, 83, 1, + 116, 184, 37, 83, 1, 203, 37, 83, 1, 227, 19, 37, 83, 1, 235, 188, 37, + 83, 1, 234, 227, 37, 83, 1, 219, 7, 37, 83, 1, 116, 225, 25, 37, 83, 1, + 116, 223, 218, 37, 83, 1, 116, 226, 177, 37, 83, 1, 116, 155, 37, 83, 1, + 235, 17, 37, 83, 1, 60, 37, 83, 1, 109, 155, 37, 83, 1, 72, 37, 83, 1, + 237, 255, 37, 83, 1, 68, 37, 83, 1, 220, 23, 37, 83, 1, 246, 250, 37, 83, + 1, 230, 127, 37, 83, 1, 235, 177, 37, 83, 1, 244, 32, 226, 177, 37, 83, + 250, 147, 5, 128, 203, 37, 83, 250, 147, 5, 128, 235, 188, 37, 83, 250, + 147, 5, 235, 189, 222, 118, 235, 167, 37, 83, 5, 234, 100, 236, 230, 235, + 167, 37, 83, 250, 147, 5, 39, 232, 115, 37, 83, 250, 147, 5, 109, 187, + 37, 83, 250, 147, 5, 116, 227, 226, 156, 109, 187, 37, 83, 250, 147, 5, + 196, 37, 83, 250, 147, 5, 252, 237, 37, 83, 250, 147, 5, 226, 177, 37, + 83, 5, 226, 158, 37, 83, 29, 5, 60, 37, 83, 29, 5, 234, 100, 226, 127, + 37, 83, 29, 5, 255, 58, 37, 83, 29, 5, 222, 123, 255, 58, 37, 83, 29, 5, + 72, 37, 83, 29, 5, 237, 255, 37, 83, 29, 5, 220, 110, 37, 83, 29, 5, 220, + 22, 37, 83, 29, 5, 68, 37, 83, 29, 5, 220, 23, 37, 83, 29, 5, 74, 37, 83, + 29, 5, 230, 186, 56, 37, 83, 29, 5, 230, 63, 37, 83, 29, 5, 73, 37, 83, + 29, 5, 254, 234, 37, 83, 29, 5, 230, 127, 37, 83, 29, 5, 254, 196, 37, + 83, 29, 5, 83, 254, 196, 37, 83, 29, 5, 230, 186, 50, 37, 83, 5, 234, + 100, 236, 229, 37, 83, 5, 221, 131, 37, 83, 5, 221, 130, 37, 83, 5, 236, + 118, 221, 129, 37, 83, 5, 236, 118, 221, 128, 37, 83, 5, 236, 118, 221, + 127, 37, 83, 5, 228, 3, 243, 210, 37, 83, 5, 234, 100, 226, 148, 37, 83, + 5, 236, 117, 236, 215, 37, 83, 36, 250, 93, 248, 145, 37, 83, 242, 243, + 20, 217, 84, 37, 83, 242, 243, 20, 107, 37, 83, 242, 243, 20, 103, 37, + 83, 242, 243, 20, 160, 37, 83, 242, 243, 20, 154, 37, 83, 242, 243, 20, + 174, 37, 83, 242, 243, 20, 182, 37, 83, 242, 243, 20, 191, 37, 83, 242, + 243, 20, 185, 37, 83, 242, 243, 20, 190, 37, 83, 83, 20, 217, 84, 37, 83, + 83, 20, 107, 37, 83, 83, 20, 103, 37, 83, 83, 20, 160, 37, 83, 83, 20, + 154, 37, 83, 83, 20, 174, 37, 83, 83, 20, 182, 37, 83, 83, 20, 191, 37, + 83, 83, 20, 185, 37, 83, 83, 20, 190, 37, 83, 5, 218, 203, 37, 83, 5, + 218, 202, 37, 83, 5, 226, 121, 37, 83, 5, 236, 163, 37, 83, 5, 242, 180, + 37, 83, 5, 248, 157, 37, 83, 5, 210, 227, 59, 227, 235, 37, 83, 5, 234, + 100, 218, 48, 37, 83, 5, 237, 1, 37, 83, 5, 237, 0, 37, 83, 5, 226, 126, + 37, 83, 5, 226, 125, 37, 83, 5, 243, 186, 37, 83, 5, 251, 166, 94, 5, + 220, 97, 227, 144, 94, 5, 220, 97, 251, 148, 94, 5, 251, 95, 94, 5, 223, + 51, 94, 5, 252, 64, 94, 1, 254, 180, 94, 1, 254, 181, 222, 82, 94, 1, + 237, 251, 94, 1, 237, 252, 222, 82, 94, 1, 220, 100, 94, 1, 220, 101, + 222, 82, 94, 1, 228, 3, 227, 183, 94, 1, 228, 3, 227, 184, 222, 82, 94, + 1, 235, 189, 235, 95, 94, 1, 235, 189, 235, 96, 222, 82, 94, 1, 246, 222, + 94, 1, 254, 194, 94, 1, 230, 153, 94, 1, 230, 154, 222, 82, 94, 1, 175, + 94, 1, 206, 234, 103, 94, 1, 245, 0, 94, 1, 245, 1, 244, 58, 94, 1, 232, + 115, 94, 1, 251, 169, 94, 1, 251, 170, 235, 179, 94, 1, 237, 123, 94, 1, + 237, 124, 237, 107, 94, 1, 231, 77, 94, 1, 222, 156, 235, 138, 94, 1, + 222, 156, 233, 68, 234, 103, 94, 1, 249, 208, 233, 68, 254, 148, 94, 1, + 249, 208, 233, 68, 234, 103, 94, 1, 232, 238, 227, 238, 94, 1, 222, 155, + 94, 1, 222, 156, 222, 99, 94, 1, 249, 207, 94, 1, 249, 208, 234, 108, 94, + 1, 208, 94, 1, 187, 94, 1, 230, 44, 236, 225, 94, 1, 252, 237, 94, 1, + 252, 238, 236, 174, 94, 1, 196, 94, 1, 184, 94, 1, 203, 94, 1, 235, 188, + 94, 1, 219, 7, 94, 1, 226, 178, 226, 164, 94, 1, 226, 178, 226, 132, 94, + 1, 226, 177, 94, 1, 155, 94, 5, 227, 177, 94, 29, 5, 222, 82, 94, 29, 5, + 220, 96, 94, 29, 5, 220, 97, 226, 129, 94, 29, 5, 223, 77, 94, 29, 5, + 223, 78, 237, 243, 94, 29, 5, 228, 3, 227, 183, 94, 29, 5, 228, 3, 227, + 184, 222, 82, 94, 29, 5, 235, 189, 235, 95, 94, 29, 5, 235, 189, 235, 96, + 222, 82, 94, 29, 5, 222, 124, 94, 29, 5, 222, 125, 227, 183, 94, 29, 5, + 222, 125, 222, 82, 94, 29, 5, 222, 125, 227, 184, 222, 82, 94, 29, 5, + 229, 171, 94, 29, 5, 229, 172, 222, 82, 94, 254, 240, 254, 239, 94, 1, + 236, 247, 226, 128, 94, 1, 236, 122, 226, 128, 94, 1, 220, 183, 226, 128, + 94, 1, 246, 245, 226, 128, 94, 1, 219, 166, 226, 128, 94, 1, 217, 105, + 226, 128, 94, 1, 253, 246, 226, 128, 94, 20, 217, 84, 94, 20, 107, 94, + 20, 103, 94, 20, 160, 94, 20, 154, 94, 20, 174, 94, 20, 182, 94, 20, 191, + 94, 20, 185, 94, 20, 190, 94, 229, 254, 94, 230, 19, 94, 218, 193, 94, + 251, 132, 230, 13, 94, 251, 132, 224, 122, 94, 251, 132, 229, 228, 94, + 230, 18, 94, 26, 16, 248, 151, 94, 26, 16, 249, 59, 94, 26, 16, 247, 97, + 94, 26, 16, 249, 165, 94, 26, 16, 249, 166, 223, 51, 94, 26, 16, 248, + 218, 94, 26, 16, 249, 200, 94, 26, 16, 249, 44, 94, 26, 16, 249, 186, 94, + 26, 16, 249, 166, 244, 186, 94, 26, 16, 36, 222, 79, 94, 26, 16, 36, 246, + 188, 94, 26, 16, 36, 236, 169, 94, 26, 16, 36, 236, 171, 94, 26, 16, 36, + 237, 111, 94, 26, 16, 36, 236, 170, 2, 237, 111, 94, 26, 16, 36, 236, + 172, 2, 237, 111, 94, 26, 16, 36, 252, 112, 94, 26, 16, 36, 244, 61, 94, + 26, 16, 227, 107, 230, 119, 247, 107, 94, 26, 16, 227, 107, 230, 119, + 249, 198, 94, 26, 16, 227, 107, 250, 197, 220, 251, 94, 26, 16, 227, 107, + 250, 197, 222, 131, 94, 26, 16, 235, 113, 230, 119, 230, 9, 94, 26, 16, + 235, 113, 230, 119, 228, 195, 94, 26, 16, 235, 113, 250, 197, 229, 54, + 94, 26, 16, 235, 113, 250, 197, 229, 46, 94, 26, 16, 235, 113, 230, 119, + 229, 72, 223, 67, 5, 229, 251, 223, 67, 5, 230, 5, 223, 67, 5, 230, 3, + 223, 67, 1, 60, 223, 67, 1, 72, 223, 67, 1, 68, 223, 67, 1, 254, 234, + 223, 67, 1, 74, 223, 67, 1, 73, 223, 67, 1, 246, 115, 223, 67, 1, 175, + 223, 67, 1, 228, 155, 223, 67, 1, 245, 0, 223, 67, 1, 232, 115, 223, 67, + 1, 251, 169, 223, 67, 1, 237, 123, 223, 67, 1, 217, 114, 223, 67, 1, 231, + 77, 223, 67, 1, 222, 155, 223, 67, 1, 249, 207, 223, 67, 1, 208, 223, 67, + 1, 187, 223, 67, 1, 246, 8, 223, 67, 1, 219, 189, 223, 67, 1, 252, 237, + 223, 67, 1, 196, 223, 67, 1, 184, 223, 67, 1, 203, 223, 67, 1, 235, 188, + 223, 67, 1, 219, 7, 223, 67, 1, 226, 177, 223, 67, 1, 218, 138, 223, 67, + 1, 155, 223, 67, 250, 147, 5, 230, 16, 223, 67, 250, 147, 5, 229, 253, + 223, 67, 250, 147, 5, 229, 250, 223, 67, 29, 5, 230, 8, 223, 67, 29, 5, + 229, 249, 223, 67, 29, 5, 230, 11, 223, 67, 29, 5, 230, 2, 223, 67, 29, + 5, 230, 17, 223, 67, 29, 5, 230, 10, 223, 67, 5, 230, 20, 223, 67, 1, + 236, 149, 223, 67, 1, 223, 20, 223, 67, 20, 217, 84, 223, 67, 20, 107, + 223, 67, 20, 103, 223, 67, 20, 160, 223, 67, 20, 154, 223, 67, 20, 174, + 223, 67, 20, 182, 223, 67, 20, 191, 223, 67, 20, 185, 223, 67, 20, 190, + 169, 1, 175, 169, 1, 236, 67, 169, 1, 236, 149, 169, 1, 245, 0, 169, 1, + 244, 77, 169, 1, 232, 115, 169, 1, 251, 169, 169, 1, 251, 69, 169, 1, + 237, 123, 169, 1, 231, 77, 169, 1, 222, 155, 169, 1, 222, 35, 169, 1, + 249, 207, 169, 1, 208, 169, 1, 187, 169, 1, 229, 58, 169, 1, 229, 141, + 169, 1, 246, 8, 169, 1, 245, 165, 169, 1, 252, 237, 169, 1, 252, 54, 169, + 1, 196, 169, 1, 233, 142, 169, 1, 221, 55, 169, 1, 221, 47, 169, 1, 247, + 74, 169, 1, 184, 169, 1, 203, 169, 1, 235, 188, 169, 1, 155, 169, 1, 243, + 89, 169, 1, 219, 189, 169, 1, 226, 177, 169, 1, 225, 25, 169, 1, 219, 7, + 169, 1, 60, 169, 223, 97, 1, 184, 169, 223, 97, 1, 203, 169, 29, 5, 255, + 58, 169, 29, 5, 72, 169, 29, 5, 74, 169, 29, 5, 230, 127, 169, 29, 5, 68, + 169, 29, 5, 220, 23, 169, 29, 5, 73, 169, 250, 147, 5, 237, 17, 169, 250, + 147, 5, 189, 169, 250, 147, 5, 153, 169, 250, 147, 5, 207, 169, 250, 147, + 5, 230, 59, 169, 250, 147, 5, 152, 169, 250, 147, 5, 222, 201, 169, 250, + 147, 5, 231, 62, 169, 250, 147, 5, 236, 229, 169, 5, 227, 236, 169, 5, + 231, 112, 169, 228, 197, 222, 154, 169, 228, 197, 231, 69, 221, 208, 222, + 154, 169, 228, 197, 251, 74, 169, 228, 197, 221, 42, 251, 74, 169, 228, + 197, 221, 41, 169, 20, 217, 84, 169, 20, 107, 169, 20, 103, 169, 20, 160, + 169, 20, 154, 169, 20, 174, 169, 20, 182, 169, 20, 191, 169, 20, 185, + 169, 20, 190, 169, 1, 221, 29, 169, 1, 221, 19, 169, 1, 249, 132, 230, + 151, 251, 26, 20, 217, 84, 230, 151, 251, 26, 20, 107, 230, 151, 251, 26, + 20, 103, 230, 151, 251, 26, 20, 160, 230, 151, 251, 26, 20, 154, 230, + 151, 251, 26, 20, 174, 230, 151, 251, 26, 20, 182, 230, 151, 251, 26, 20, + 191, 230, 151, 251, 26, 20, 185, 230, 151, 251, 26, 20, 190, 230, 151, + 251, 26, 1, 235, 188, 230, 151, 251, 26, 1, 253, 244, 230, 151, 251, 26, + 1, 254, 209, 230, 151, 251, 26, 1, 254, 123, 230, 151, 251, 26, 1, 254, + 175, 230, 151, 251, 26, 1, 235, 187, 230, 151, 251, 26, 1, 255, 20, 230, + 151, 251, 26, 1, 255, 21, 230, 151, 251, 26, 1, 255, 19, 230, 151, 251, + 26, 1, 255, 15, 230, 151, 251, 26, 1, 235, 67, 230, 151, 251, 26, 1, 237, + 151, 230, 151, 251, 26, 1, 238, 0, 230, 151, 251, 26, 1, 237, 167, 230, + 151, 251, 26, 1, 237, 156, 230, 151, 251, 26, 1, 234, 231, 230, 151, 251, + 26, 1, 220, 117, 230, 151, 251, 26, 1, 220, 115, 230, 151, 251, 26, 1, + 220, 68, 230, 151, 251, 26, 1, 220, 16, 230, 151, 251, 26, 1, 235, 122, + 230, 151, 251, 26, 1, 246, 162, 230, 151, 251, 26, 1, 246, 253, 230, 151, + 251, 26, 1, 246, 197, 230, 151, 251, 26, 1, 246, 142, 230, 151, 251, 26, + 1, 235, 12, 230, 151, 251, 26, 1, 230, 89, 230, 151, 251, 26, 1, 230, + 181, 230, 151, 251, 26, 1, 230, 79, 230, 151, 251, 26, 1, 230, 161, 230, + 151, 251, 26, 233, 100, 221, 1, 230, 151, 251, 26, 244, 251, 221, 2, 230, + 151, 251, 26, 233, 98, 221, 2, 230, 151, 251, 26, 227, 193, 230, 151, + 251, 26, 229, 139, 230, 151, 251, 26, 254, 201, 230, 151, 251, 26, 228, + 197, 233, 96, 230, 151, 251, 26, 228, 197, 51, 233, 96, 219, 162, 145, + 236, 211, 219, 162, 145, 225, 2, 219, 162, 145, 228, 241, 219, 162, 5, + 232, 39, 219, 162, 5, 218, 56, 233, 191, 223, 39, 219, 162, 145, 218, 56, + 254, 206, 237, 214, 223, 39, 219, 162, 145, 218, 56, 237, 214, 223, 39, + 219, 162, 145, 218, 56, 236, 199, 237, 214, 223, 39, 219, 162, 145, 251, + 149, 56, 219, 162, 145, 218, 56, 236, 199, 237, 214, 223, 40, 226, 106, + 219, 162, 145, 51, 223, 39, 219, 162, 145, 221, 78, 223, 39, 219, 162, + 145, 236, 199, 254, 97, 219, 162, 145, 61, 56, 219, 162, 145, 124, 188, + 56, 219, 162, 145, 148, 188, 56, 219, 162, 145, 227, 99, 236, 210, 237, + 214, 223, 39, 219, 162, 145, 253, 242, 237, 214, 223, 39, 219, 162, 5, + 219, 78, 223, 39, 219, 162, 5, 219, 78, 220, 112, 219, 162, 5, 210, 219, + 78, 220, 112, 219, 162, 5, 219, 78, 254, 97, 219, 162, 5, 210, 219, 78, + 254, 97, 219, 162, 5, 219, 78, 220, 113, 2, 222, 135, 219, 162, 5, 219, + 78, 254, 98, 2, 222, 135, 219, 162, 5, 254, 96, 254, 105, 219, 162, 5, + 254, 96, 252, 222, 219, 162, 5, 254, 96, 219, 184, 219, 162, 5, 254, 96, + 219, 185, 2, 222, 135, 219, 162, 5, 221, 162, 219, 162, 5, 243, 123, 171, + 254, 95, 219, 162, 5, 171, 254, 95, 219, 162, 5, 227, 24, 171, 254, 95, + 219, 162, 5, 254, 96, 220, 119, 233, 90, 219, 162, 5, 254, 46, 7, 1, 3, + 6, 60, 7, 1, 3, 6, 254, 234, 7, 3, 1, 215, 254, 234, 7, 1, 3, 6, 252, + 196, 253, 204, 7, 1, 3, 6, 251, 202, 7, 1, 3, 6, 250, 46, 7, 1, 3, 6, + 246, 118, 7, 1, 3, 6, 73, 7, 3, 1, 215, 230, 119, 73, 7, 3, 1, 215, 72, + 7, 1, 3, 6, 237, 126, 7, 1, 3, 6, 237, 17, 7, 1, 3, 6, 235, 202, 2, 92, + 7, 1, 3, 6, 189, 7, 1, 3, 6, 210, 207, 7, 1, 3, 6, 74, 7, 1, 3, 6, 230, + 119, 74, 7, 3, 1, 224, 136, 74, 7, 3, 1, 224, 136, 230, 119, 74, 7, 3, 1, + 224, 136, 142, 2, 92, 7, 3, 1, 215, 230, 167, 7, 1, 3, 6, 230, 86, 7, 3, + 1, 221, 120, 144, 74, 7, 3, 1, 252, 29, 144, 74, 7, 1, 3, 6, 230, 59, 7, + 1, 3, 6, 210, 152, 7, 1, 3, 6, 215, 152, 7, 1, 3, 6, 222, 201, 7, 1, 3, + 6, 68, 7, 3, 1, 224, 136, 68, 7, 3, 1, 224, 136, 249, 12, 68, 7, 3, 1, + 224, 136, 215, 189, 7, 1, 3, 6, 216, 216, 7, 1, 3, 6, 219, 40, 7, 1, 3, + 6, 217, 157, 7, 1, 3, 6, 246, 76, 7, 1, 219, 70, 235, 144, 223, 241, 7, + 1, 254, 191, 23, 1, 3, 6, 244, 231, 23, 1, 3, 6, 235, 156, 23, 1, 3, 6, + 229, 108, 23, 1, 3, 6, 227, 149, 23, 1, 3, 6, 228, 212, 31, 1, 3, 6, 246, + 217, 58, 1, 6, 60, 58, 1, 6, 254, 234, 58, 1, 6, 253, 204, 58, 1, 6, 252, + 196, 253, 204, 58, 1, 6, 250, 46, 58, 1, 6, 73, 58, 1, 6, 210, 73, 58, 1, + 6, 245, 67, 58, 1, 6, 243, 225, 58, 1, 6, 72, 58, 1, 6, 237, 126, 58, 1, + 6, 237, 17, 58, 1, 6, 153, 58, 1, 6, 189, 58, 1, 6, 207, 58, 1, 6, 210, + 207, 58, 1, 6, 74, 58, 1, 6, 230, 86, 58, 1, 6, 230, 59, 58, 1, 6, 152, + 58, 1, 6, 222, 201, 58, 1, 6, 68, 58, 1, 6, 219, 40, 58, 1, 3, 60, 58, 1, + 3, 215, 60, 58, 1, 3, 254, 146, 58, 1, 3, 215, 254, 234, 58, 1, 3, 253, + 204, 58, 1, 3, 250, 46, 58, 1, 3, 73, 58, 1, 3, 226, 104, 58, 1, 3, 230, + 119, 73, 58, 1, 3, 215, 230, 119, 73, 58, 1, 3, 245, 67, 58, 1, 3, 215, + 72, 58, 1, 3, 237, 17, 58, 1, 3, 189, 58, 1, 3, 246, 185, 58, 1, 3, 74, + 58, 1, 3, 230, 119, 74, 58, 1, 3, 221, 120, 144, 74, 58, 1, 3, 252, 29, + 144, 74, 58, 1, 3, 230, 59, 58, 1, 3, 222, 201, 58, 1, 3, 68, 58, 1, 3, + 224, 136, 68, 58, 1, 3, 215, 189, 58, 1, 3, 216, 216, 58, 1, 3, 254, 191, + 58, 1, 3, 252, 102, 58, 1, 3, 23, 244, 231, 58, 1, 3, 249, 62, 58, 1, 3, + 23, 229, 129, 58, 1, 3, 251, 31, 7, 223, 94, 3, 1, 72, 7, 223, 94, 3, 1, + 152, 7, 223, 94, 3, 1, 68, 7, 223, 94, 3, 1, 216, 216, 23, 223, 94, 3, 1, + 252, 102, 23, 223, 94, 3, 1, 244, 231, 23, 223, 94, 3, 1, 227, 149, 23, + 223, 94, 3, 1, 229, 129, 23, 223, 94, 3, 1, 251, 31, 7, 3, 1, 220, 110, + 7, 3, 1, 49, 2, 233, 193, 221, 179, 7, 3, 1, 250, 47, 2, 233, 193, 221, + 179, 7, 3, 1, 246, 75, 2, 233, 193, 221, 179, 7, 3, 1, 234, 187, 2, 233, + 193, 221, 179, 7, 3, 1, 233, 34, 2, 233, 193, 221, 179, 7, 3, 1, 230, 60, + 2, 233, 193, 221, 179, 7, 3, 1, 228, 39, 2, 233, 193, 221, 179, 7, 3, 1, + 228, 39, 2, 245, 174, 25, 233, 193, 221, 179, 7, 3, 1, 226, 235, 2, 233, + 193, 221, 179, 7, 3, 1, 222, 202, 2, 233, 193, 221, 179, 7, 3, 1, 217, + 158, 2, 233, 193, 221, 179, 7, 3, 1, 215, 245, 67, 58, 1, 31, 246, 197, + 7, 3, 1, 237, 188, 245, 67, 7, 3, 1, 222, 38, 2, 223, 121, 7, 3, 6, 1, + 242, 107, 2, 92, 7, 3, 1, 237, 163, 2, 92, 7, 3, 1, 230, 60, 2, 92, 7, 3, + 6, 1, 105, 2, 92, 7, 3, 1, 220, 58, 2, 92, 7, 3, 1, 49, 2, 230, 29, 96, + 7, 3, 1, 250, 47, 2, 230, 29, 96, 7, 3, 1, 246, 75, 2, 230, 29, 96, 7, 3, + 1, 245, 68, 2, 230, 29, 96, 7, 3, 1, 237, 18, 2, 230, 29, 96, 7, 3, 1, + 235, 202, 2, 230, 29, 96, 7, 3, 1, 234, 187, 2, 230, 29, 96, 7, 3, 1, + 233, 34, 2, 230, 29, 96, 7, 3, 1, 230, 60, 2, 230, 29, 96, 7, 3, 1, 228, + 39, 2, 230, 29, 96, 7, 3, 1, 226, 235, 2, 230, 29, 96, 7, 3, 1, 246, 134, + 2, 230, 29, 96, 7, 3, 1, 220, 11, 2, 230, 29, 96, 7, 3, 1, 218, 152, 2, + 230, 29, 96, 7, 3, 1, 217, 158, 2, 230, 29, 96, 7, 3, 1, 112, 2, 227, + 164, 96, 7, 3, 1, 254, 147, 2, 227, 164, 96, 7, 3, 1, 250, 47, 2, 242, + 247, 25, 222, 135, 7, 3, 1, 178, 2, 227, 164, 96, 7, 3, 1, 230, 119, 178, + 2, 227, 164, 96, 7, 3, 1, 210, 230, 119, 178, 2, 227, 164, 96, 7, 3, 1, + 226, 105, 2, 227, 164, 96, 7, 3, 1, 242, 107, 2, 227, 164, 96, 7, 3, 1, + 230, 119, 142, 2, 227, 164, 96, 7, 3, 1, 246, 134, 2, 227, 164, 96, 7, 3, + 1, 105, 2, 227, 164, 96, 7, 3, 1, 246, 77, 2, 227, 164, 96, 58, 1, 3, + 215, 254, 146, 58, 1, 3, 251, 202, 58, 1, 3, 251, 203, 2, 250, 80, 58, 1, + 3, 246, 118, 58, 1, 3, 210, 230, 119, 73, 58, 1, 3, 246, 74, 58, 1, 3, + 248, 144, 237, 127, 2, 92, 58, 1, 3, 102, 245, 67, 58, 1, 3, 215, 243, + 225, 58, 1, 3, 242, 107, 2, 92, 58, 1, 3, 237, 162, 58, 1, 3, 6, 72, 58, + 1, 3, 6, 242, 107, 2, 92, 58, 1, 3, 237, 127, 2, 250, 97, 58, 1, 3, 235, + 202, 2, 227, 164, 96, 58, 1, 3, 235, 202, 2, 230, 29, 96, 58, 1, 3, 6, + 153, 58, 1, 3, 234, 187, 2, 96, 58, 1, 3, 215, 234, 187, 2, 171, 235, + 106, 58, 1, 3, 233, 34, 2, 42, 96, 58, 1, 3, 233, 34, 2, 227, 164, 96, + 58, 1, 3, 6, 207, 58, 1, 3, 252, 196, 74, 58, 1, 3, 229, 129, 58, 1, 3, + 226, 235, 2, 96, 58, 1, 3, 246, 133, 58, 1, 3, 222, 202, 2, 230, 29, 96, + 58, 1, 3, 105, 135, 58, 1, 3, 220, 57, 58, 1, 3, 6, 68, 58, 1, 3, 220, + 11, 2, 96, 58, 1, 3, 215, 216, 216, 58, 1, 3, 217, 157, 58, 1, 3, 217, + 158, 2, 227, 164, 96, 58, 1, 3, 217, 158, 2, 250, 80, 58, 1, 3, 246, 76, + 58, 1, 3, 222, 6, 36, 247, 143, 244, 37, 255, 0, 36, 247, 143, 254, 248, + 255, 0, 36, 224, 36, 56, 36, 223, 45, 78, 36, 234, 114, 36, 244, 34, 36, + 234, 112, 36, 254, 246, 36, 244, 35, 36, 254, 247, 36, 7, 3, 1, 228, 39, + 56, 36, 252, 7, 36, 234, 113, 36, 51, 250, 217, 50, 36, 230, 163, 50, 36, + 217, 33, 56, 36, 237, 152, 56, 36, 220, 51, 50, 36, 220, 35, 50, 36, 7, + 3, 1, 245, 154, 230, 119, 112, 50, 36, 7, 3, 1, 254, 234, 36, 7, 3, 1, + 254, 93, 36, 7, 3, 1, 253, 220, 36, 7, 3, 1, 251, 203, 251, 92, 36, 7, 3, + 1, 237, 188, 250, 46, 36, 7, 3, 1, 246, 118, 36, 7, 3, 1, 245, 67, 36, 7, + 1, 3, 6, 245, 67, 36, 7, 3, 1, 237, 17, 36, 7, 3, 1, 153, 36, 7, 1, 3, 6, + 153, 36, 7, 1, 3, 6, 189, 36, 7, 3, 1, 207, 36, 7, 1, 3, 6, 207, 36, 7, + 1, 3, 6, 152, 36, 7, 3, 1, 228, 39, 227, 58, 36, 7, 3, 1, 198, 36, 7, 3, + 1, 171, 198, 36, 7, 3, 1, 217, 157, 36, 254, 151, 114, 199, 56, 36, 42, + 254, 21, 50, 36, 45, 254, 21, 25, 113, 254, 21, 56, 7, 6, 1, 112, 2, 227, + 94, 56, 7, 3, 1, 112, 2, 227, 94, 56, 7, 6, 1, 49, 2, 61, 50, 7, 3, 1, + 49, 2, 61, 50, 7, 6, 1, 49, 2, 61, 56, 7, 3, 1, 49, 2, 61, 56, 7, 6, 1, + 49, 2, 235, 44, 56, 7, 3, 1, 49, 2, 235, 44, 56, 7, 6, 1, 251, 203, 2, + 251, 93, 25, 168, 7, 3, 1, 251, 203, 2, 251, 93, 25, 168, 7, 6, 1, 250, + 47, 2, 61, 50, 7, 3, 1, 250, 47, 2, 61, 50, 7, 6, 1, 250, 47, 2, 61, 56, + 7, 3, 1, 250, 47, 2, 61, 56, 7, 6, 1, 250, 47, 2, 235, 44, 56, 7, 3, 1, + 250, 47, 2, 235, 44, 56, 7, 6, 1, 250, 47, 2, 251, 92, 7, 3, 1, 250, 47, + 2, 251, 92, 7, 6, 1, 250, 47, 2, 250, 217, 56, 7, 3, 1, 250, 47, 2, 250, + 217, 56, 7, 6, 1, 178, 2, 234, 116, 25, 244, 36, 7, 3, 1, 178, 2, 234, + 116, 25, 244, 36, 7, 6, 1, 178, 2, 234, 116, 25, 168, 7, 3, 1, 178, 2, + 234, 116, 25, 168, 7, 6, 1, 178, 2, 250, 217, 56, 7, 3, 1, 178, 2, 250, + 217, 56, 7, 6, 1, 178, 2, 221, 180, 56, 7, 3, 1, 178, 2, 221, 180, 56, 7, + 6, 1, 178, 2, 251, 93, 25, 252, 8, 7, 3, 1, 178, 2, 251, 93, 25, 252, 8, + 7, 6, 1, 246, 75, 2, 61, 50, 7, 3, 1, 246, 75, 2, 61, 50, 7, 6, 1, 245, + 68, 2, 234, 115, 7, 3, 1, 245, 68, 2, 234, 115, 7, 6, 1, 243, 226, 2, 61, + 50, 7, 3, 1, 243, 226, 2, 61, 50, 7, 6, 1, 243, 226, 2, 61, 56, 7, 3, 1, + 243, 226, 2, 61, 56, 7, 6, 1, 243, 226, 2, 249, 13, 7, 3, 1, 243, 226, 2, + 249, 13, 7, 6, 1, 243, 226, 2, 251, 92, 7, 3, 1, 243, 226, 2, 251, 92, 7, + 6, 1, 243, 226, 2, 252, 9, 56, 7, 3, 1, 243, 226, 2, 252, 9, 56, 7, 6, 1, + 242, 107, 2, 221, 180, 56, 7, 3, 1, 242, 107, 2, 221, 180, 56, 7, 6, 1, + 242, 107, 2, 249, 14, 25, 168, 7, 3, 1, 242, 107, 2, 249, 14, 25, 168, 7, + 6, 1, 237, 18, 2, 168, 7, 3, 1, 237, 18, 2, 168, 7, 6, 1, 237, 18, 2, 61, + 56, 7, 3, 1, 237, 18, 2, 61, 56, 7, 6, 1, 237, 18, 2, 235, 44, 56, 7, 3, + 1, 237, 18, 2, 235, 44, 56, 7, 6, 1, 235, 202, 2, 61, 56, 7, 3, 1, 235, + 202, 2, 61, 56, 7, 6, 1, 235, 202, 2, 61, 252, 118, 25, 234, 115, 7, 3, + 1, 235, 202, 2, 61, 252, 118, 25, 234, 115, 7, 6, 1, 235, 202, 2, 235, + 44, 56, 7, 3, 1, 235, 202, 2, 235, 44, 56, 7, 6, 1, 235, 202, 2, 250, + 217, 56, 7, 3, 1, 235, 202, 2, 250, 217, 56, 7, 6, 1, 234, 187, 2, 168, + 7, 3, 1, 234, 187, 2, 168, 7, 6, 1, 234, 187, 2, 61, 50, 7, 3, 1, 234, + 187, 2, 61, 50, 7, 6, 1, 234, 187, 2, 61, 56, 7, 3, 1, 234, 187, 2, 61, + 56, 7, 6, 1, 233, 34, 2, 61, 50, 7, 3, 1, 233, 34, 2, 61, 50, 7, 6, 1, + 233, 34, 2, 61, 56, 7, 3, 1, 233, 34, 2, 61, 56, 7, 6, 1, 233, 34, 2, + 235, 44, 56, 7, 3, 1, 233, 34, 2, 235, 44, 56, 7, 6, 1, 233, 34, 2, 250, + 217, 56, 7, 3, 1, 233, 34, 2, 250, 217, 56, 7, 6, 1, 142, 2, 221, 180, + 25, 168, 7, 3, 1, 142, 2, 221, 180, 25, 168, 7, 6, 1, 142, 2, 221, 180, + 25, 249, 13, 7, 3, 1, 142, 2, 221, 180, 25, 249, 13, 7, 6, 1, 142, 2, + 234, 116, 25, 244, 36, 7, 3, 1, 142, 2, 234, 116, 25, 244, 36, 7, 6, 1, + 142, 2, 234, 116, 25, 168, 7, 3, 1, 142, 2, 234, 116, 25, 168, 7, 6, 1, + 230, 60, 2, 168, 7, 3, 1, 230, 60, 2, 168, 7, 6, 1, 230, 60, 2, 61, 50, + 7, 3, 1, 230, 60, 2, 61, 50, 7, 6, 1, 228, 39, 2, 61, 50, 7, 3, 1, 228, + 39, 2, 61, 50, 7, 6, 1, 228, 39, 2, 61, 56, 7, 3, 1, 228, 39, 2, 61, 56, + 7, 6, 1, 228, 39, 2, 61, 252, 118, 25, 234, 115, 7, 3, 1, 228, 39, 2, 61, + 252, 118, 25, 234, 115, 7, 6, 1, 228, 39, 2, 235, 44, 56, 7, 3, 1, 228, + 39, 2, 235, 44, 56, 7, 6, 1, 226, 235, 2, 61, 50, 7, 3, 1, 226, 235, 2, + 61, 50, 7, 6, 1, 226, 235, 2, 61, 56, 7, 3, 1, 226, 235, 2, 61, 56, 7, 6, + 1, 226, 235, 2, 254, 248, 25, 61, 50, 7, 3, 1, 226, 235, 2, 254, 248, 25, + 61, 50, 7, 6, 1, 226, 235, 2, 251, 131, 25, 61, 50, 7, 3, 1, 226, 235, 2, + 251, 131, 25, 61, 50, 7, 6, 1, 226, 235, 2, 61, 252, 118, 25, 61, 50, 7, + 3, 1, 226, 235, 2, 61, 252, 118, 25, 61, 50, 7, 6, 1, 222, 202, 2, 61, + 50, 7, 3, 1, 222, 202, 2, 61, 50, 7, 6, 1, 222, 202, 2, 61, 56, 7, 3, 1, + 222, 202, 2, 61, 56, 7, 6, 1, 222, 202, 2, 235, 44, 56, 7, 3, 1, 222, + 202, 2, 235, 44, 56, 7, 6, 1, 222, 202, 2, 250, 217, 56, 7, 3, 1, 222, + 202, 2, 250, 217, 56, 7, 6, 1, 105, 2, 249, 14, 56, 7, 3, 1, 105, 2, 249, + 14, 56, 7, 6, 1, 105, 2, 221, 180, 56, 7, 3, 1, 105, 2, 221, 180, 56, 7, + 6, 1, 105, 2, 250, 217, 56, 7, 3, 1, 105, 2, 250, 217, 56, 7, 6, 1, 105, + 2, 221, 180, 25, 168, 7, 3, 1, 105, 2, 221, 180, 25, 168, 7, 6, 1, 105, + 2, 234, 116, 25, 249, 13, 7, 3, 1, 105, 2, 234, 116, 25, 249, 13, 7, 6, + 1, 220, 11, 2, 221, 179, 7, 3, 1, 220, 11, 2, 221, 179, 7, 6, 1, 220, 11, + 2, 61, 56, 7, 3, 1, 220, 11, 2, 61, 56, 7, 6, 1, 219, 41, 2, 244, 36, 7, + 3, 1, 219, 41, 2, 244, 36, 7, 6, 1, 219, 41, 2, 168, 7, 3, 1, 219, 41, 2, + 168, 7, 6, 1, 219, 41, 2, 249, 13, 7, 3, 1, 219, 41, 2, 249, 13, 7, 6, 1, + 219, 41, 2, 61, 50, 7, 3, 1, 219, 41, 2, 61, 50, 7, 6, 1, 219, 41, 2, 61, + 56, 7, 3, 1, 219, 41, 2, 61, 56, 7, 6, 1, 218, 152, 2, 61, 50, 7, 3, 1, + 218, 152, 2, 61, 50, 7, 6, 1, 218, 152, 2, 249, 13, 7, 3, 1, 218, 152, 2, + 249, 13, 7, 6, 1, 218, 91, 2, 61, 50, 7, 3, 1, 218, 91, 2, 61, 50, 7, 6, + 1, 217, 158, 2, 250, 216, 7, 3, 1, 217, 158, 2, 250, 216, 7, 6, 1, 217, + 158, 2, 61, 56, 7, 3, 1, 217, 158, 2, 61, 56, 7, 6, 1, 217, 158, 2, 235, + 44, 56, 7, 3, 1, 217, 158, 2, 235, 44, 56, 7, 3, 1, 243, 226, 2, 235, 44, + 56, 7, 3, 1, 222, 202, 2, 249, 13, 7, 3, 1, 219, 41, 2, 227, 94, 50, 7, + 3, 1, 218, 91, 2, 227, 94, 50, 7, 3, 1, 112, 2, 45, 144, 227, 93, 7, 3, + 1, 171, 226, 235, 2, 61, 50, 7, 3, 1, 171, 226, 235, 2, 249, 11, 92, 7, + 3, 1, 171, 226, 235, 2, 116, 92, 7, 6, 1, 225, 1, 198, 7, 3, 1, 249, 62, + 7, 6, 1, 112, 2, 61, 56, 7, 3, 1, 112, 2, 61, 56, 7, 6, 1, 112, 2, 242, + 247, 50, 7, 3, 1, 112, 2, 242, 247, 50, 7, 6, 1, 112, 2, 250, 217, 25, + 168, 7, 3, 1, 112, 2, 250, 217, 25, 168, 7, 6, 1, 112, 2, 250, 217, 25, + 244, 36, 7, 3, 1, 112, 2, 250, 217, 25, 244, 36, 7, 6, 1, 112, 2, 250, + 217, 25, 242, 247, 50, 7, 3, 1, 112, 2, 250, 217, 25, 242, 247, 50, 7, 6, + 1, 112, 2, 250, 217, 25, 221, 179, 7, 3, 1, 112, 2, 250, 217, 25, 221, + 179, 7, 6, 1, 112, 2, 250, 217, 25, 61, 56, 7, 3, 1, 112, 2, 250, 217, + 25, 61, 56, 7, 6, 1, 112, 2, 252, 9, 25, 168, 7, 3, 1, 112, 2, 252, 9, + 25, 168, 7, 6, 1, 112, 2, 252, 9, 25, 244, 36, 7, 3, 1, 112, 2, 252, 9, + 25, 244, 36, 7, 6, 1, 112, 2, 252, 9, 25, 242, 247, 50, 7, 3, 1, 112, 2, + 252, 9, 25, 242, 247, 50, 7, 6, 1, 112, 2, 252, 9, 25, 221, 179, 7, 3, 1, + 112, 2, 252, 9, 25, 221, 179, 7, 6, 1, 112, 2, 252, 9, 25, 61, 56, 7, 3, + 1, 112, 2, 252, 9, 25, 61, 56, 7, 6, 1, 178, 2, 61, 56, 7, 3, 1, 178, 2, + 61, 56, 7, 6, 1, 178, 2, 242, 247, 50, 7, 3, 1, 178, 2, 242, 247, 50, 7, + 6, 1, 178, 2, 221, 179, 7, 3, 1, 178, 2, 221, 179, 7, 6, 1, 178, 2, 250, + 217, 25, 168, 7, 3, 1, 178, 2, 250, 217, 25, 168, 7, 6, 1, 178, 2, 250, + 217, 25, 244, 36, 7, 3, 1, 178, 2, 250, 217, 25, 244, 36, 7, 6, 1, 178, + 2, 250, 217, 25, 242, 247, 50, 7, 3, 1, 178, 2, 250, 217, 25, 242, 247, + 50, 7, 6, 1, 178, 2, 250, 217, 25, 221, 179, 7, 3, 1, 178, 2, 250, 217, + 25, 221, 179, 7, 6, 1, 178, 2, 250, 217, 25, 61, 56, 7, 3, 1, 178, 2, + 250, 217, 25, 61, 56, 7, 6, 1, 242, 107, 2, 242, 247, 50, 7, 3, 1, 242, + 107, 2, 242, 247, 50, 7, 6, 1, 242, 107, 2, 61, 56, 7, 3, 1, 242, 107, 2, + 61, 56, 7, 6, 1, 142, 2, 61, 56, 7, 3, 1, 142, 2, 61, 56, 7, 6, 1, 142, + 2, 242, 247, 50, 7, 3, 1, 142, 2, 242, 247, 50, 7, 6, 1, 142, 2, 250, + 217, 25, 168, 7, 3, 1, 142, 2, 250, 217, 25, 168, 7, 6, 1, 142, 2, 250, + 217, 25, 244, 36, 7, 3, 1, 142, 2, 250, 217, 25, 244, 36, 7, 6, 1, 142, + 2, 250, 217, 25, 242, 247, 50, 7, 3, 1, 142, 2, 250, 217, 25, 242, 247, + 50, 7, 6, 1, 142, 2, 250, 217, 25, 221, 179, 7, 3, 1, 142, 2, 250, 217, + 25, 221, 179, 7, 6, 1, 142, 2, 250, 217, 25, 61, 56, 7, 3, 1, 142, 2, + 250, 217, 25, 61, 56, 7, 6, 1, 142, 2, 242, 190, 25, 168, 7, 3, 1, 142, + 2, 242, 190, 25, 168, 7, 6, 1, 142, 2, 242, 190, 25, 244, 36, 7, 3, 1, + 142, 2, 242, 190, 25, 244, 36, 7, 6, 1, 142, 2, 242, 190, 25, 242, 247, + 50, 7, 3, 1, 142, 2, 242, 190, 25, 242, 247, 50, 7, 6, 1, 142, 2, 242, + 190, 25, 221, 179, 7, 3, 1, 142, 2, 242, 190, 25, 221, 179, 7, 6, 1, 142, + 2, 242, 190, 25, 61, 56, 7, 3, 1, 142, 2, 242, 190, 25, 61, 56, 7, 6, 1, + 105, 2, 61, 56, 7, 3, 1, 105, 2, 61, 56, 7, 6, 1, 105, 2, 242, 247, 50, + 7, 3, 1, 105, 2, 242, 247, 50, 7, 6, 1, 105, 2, 242, 190, 25, 168, 7, 3, + 1, 105, 2, 242, 190, 25, 168, 7, 6, 1, 105, 2, 242, 190, 25, 244, 36, 7, + 3, 1, 105, 2, 242, 190, 25, 244, 36, 7, 6, 1, 105, 2, 242, 190, 25, 242, + 247, 50, 7, 3, 1, 105, 2, 242, 190, 25, 242, 247, 50, 7, 6, 1, 105, 2, + 242, 190, 25, 221, 179, 7, 3, 1, 105, 2, 242, 190, 25, 221, 179, 7, 6, 1, + 105, 2, 242, 190, 25, 61, 56, 7, 3, 1, 105, 2, 242, 190, 25, 61, 56, 7, + 6, 1, 218, 91, 2, 244, 36, 7, 3, 1, 218, 91, 2, 244, 36, 7, 6, 1, 218, + 91, 2, 61, 56, 7, 3, 1, 218, 91, 2, 61, 56, 7, 6, 1, 218, 91, 2, 242, + 247, 50, 7, 3, 1, 218, 91, 2, 242, 247, 50, 7, 6, 1, 218, 91, 2, 221, + 179, 7, 3, 1, 218, 91, 2, 221, 179, 7, 6, 1, 233, 192, 235, 18, 7, 3, 1, + 233, 192, 235, 18, 7, 6, 1, 233, 192, 216, 216, 7, 3, 1, 233, 192, 216, + 216, 7, 6, 1, 218, 91, 2, 234, 247, 7, 3, 1, 218, 91, 2, 234, 247, 23, 3, + 1, 254, 147, 2, 228, 206, 23, 3, 1, 254, 147, 2, 249, 144, 23, 3, 1, 254, + 147, 2, 209, 25, 219, 178, 23, 3, 1, 254, 147, 2, 193, 25, 219, 178, 23, + 3, 1, 254, 147, 2, 209, 25, 230, 64, 23, 3, 1, 254, 147, 2, 193, 25, 230, + 64, 23, 3, 1, 254, 147, 2, 209, 25, 229, 163, 23, 3, 1, 254, 147, 2, 193, + 25, 229, 163, 23, 6, 1, 254, 147, 2, 228, 206, 23, 6, 1, 254, 147, 2, + 249, 144, 23, 6, 1, 254, 147, 2, 209, 25, 219, 178, 23, 6, 1, 254, 147, + 2, 193, 25, 219, 178, 23, 6, 1, 254, 147, 2, 209, 25, 230, 64, 23, 6, 1, + 254, 147, 2, 193, 25, 230, 64, 23, 6, 1, 254, 147, 2, 209, 25, 229, 163, + 23, 6, 1, 254, 147, 2, 193, 25, 229, 163, 23, 3, 1, 246, 157, 2, 228, + 206, 23, 3, 1, 246, 157, 2, 249, 144, 23, 3, 1, 246, 157, 2, 209, 25, + 219, 178, 23, 3, 1, 246, 157, 2, 193, 25, 219, 178, 23, 3, 1, 246, 157, + 2, 209, 25, 230, 64, 23, 3, 1, 246, 157, 2, 193, 25, 230, 64, 23, 6, 1, + 246, 157, 2, 228, 206, 23, 6, 1, 246, 157, 2, 249, 144, 23, 6, 1, 246, + 157, 2, 209, 25, 219, 178, 23, 6, 1, 246, 157, 2, 193, 25, 219, 178, 23, + 6, 1, 246, 157, 2, 209, 25, 230, 64, 23, 6, 1, 246, 157, 2, 193, 25, 230, + 64, 23, 3, 1, 246, 122, 2, 228, 206, 23, 3, 1, 246, 122, 2, 249, 144, 23, + 3, 1, 246, 122, 2, 209, 25, 219, 178, 23, 3, 1, 246, 122, 2, 193, 25, + 219, 178, 23, 3, 1, 246, 122, 2, 209, 25, 230, 64, 23, 3, 1, 246, 122, 2, + 193, 25, 230, 64, 23, 3, 1, 246, 122, 2, 209, 25, 229, 163, 23, 3, 1, + 246, 122, 2, 193, 25, 229, 163, 23, 6, 1, 246, 122, 2, 228, 206, 23, 6, + 1, 246, 122, 2, 249, 144, 23, 6, 1, 246, 122, 2, 209, 25, 219, 178, 23, + 6, 1, 246, 122, 2, 193, 25, 219, 178, 23, 6, 1, 246, 122, 2, 209, 25, + 230, 64, 23, 6, 1, 246, 122, 2, 193, 25, 230, 64, 23, 6, 1, 246, 122, 2, + 209, 25, 229, 163, 23, 6, 1, 246, 122, 2, 193, 25, 229, 163, 23, 3, 1, + 237, 163, 2, 228, 206, 23, 3, 1, 237, 163, 2, 249, 144, 23, 3, 1, 237, + 163, 2, 209, 25, 219, 178, 23, 3, 1, 237, 163, 2, 193, 25, 219, 178, 23, + 3, 1, 237, 163, 2, 209, 25, 230, 64, 23, 3, 1, 237, 163, 2, 193, 25, 230, + 64, 23, 3, 1, 237, 163, 2, 209, 25, 229, 163, 23, 3, 1, 237, 163, 2, 193, + 25, 229, 163, 23, 6, 1, 237, 163, 2, 228, 206, 23, 6, 1, 237, 163, 2, + 249, 144, 23, 6, 1, 237, 163, 2, 209, 25, 219, 178, 23, 6, 1, 237, 163, + 2, 193, 25, 219, 178, 23, 6, 1, 237, 163, 2, 209, 25, 230, 64, 23, 6, 1, + 237, 163, 2, 193, 25, 230, 64, 23, 6, 1, 237, 163, 2, 209, 25, 229, 163, + 23, 6, 1, 237, 163, 2, 193, 25, 229, 163, 23, 3, 1, 230, 142, 2, 228, + 206, 23, 3, 1, 230, 142, 2, 249, 144, 23, 3, 1, 230, 142, 2, 209, 25, + 219, 178, 23, 3, 1, 230, 142, 2, 193, 25, 219, 178, 23, 3, 1, 230, 142, + 2, 209, 25, 230, 64, 23, 3, 1, 230, 142, 2, 193, 25, 230, 64, 23, 6, 1, + 230, 142, 2, 228, 206, 23, 6, 1, 230, 142, 2, 249, 144, 23, 6, 1, 230, + 142, 2, 209, 25, 219, 178, 23, 6, 1, 230, 142, 2, 193, 25, 219, 178, 23, + 6, 1, 230, 142, 2, 209, 25, 230, 64, 23, 6, 1, 230, 142, 2, 193, 25, 230, + 64, 23, 3, 1, 220, 58, 2, 228, 206, 23, 3, 1, 220, 58, 2, 249, 144, 23, + 3, 1, 220, 58, 2, 209, 25, 219, 178, 23, 3, 1, 220, 58, 2, 193, 25, 219, + 178, 23, 3, 1, 220, 58, 2, 209, 25, 230, 64, 23, 3, 1, 220, 58, 2, 193, + 25, 230, 64, 23, 3, 1, 220, 58, 2, 209, 25, 229, 163, 23, 3, 1, 220, 58, + 2, 193, 25, 229, 163, 23, 6, 1, 220, 58, 2, 249, 144, 23, 6, 1, 220, 58, + 2, 193, 25, 219, 178, 23, 6, 1, 220, 58, 2, 193, 25, 230, 64, 23, 6, 1, + 220, 58, 2, 193, 25, 229, 163, 23, 3, 1, 230, 144, 2, 228, 206, 23, 3, 1, + 230, 144, 2, 249, 144, 23, 3, 1, 230, 144, 2, 209, 25, 219, 178, 23, 3, + 1, 230, 144, 2, 193, 25, 219, 178, 23, 3, 1, 230, 144, 2, 209, 25, 230, + 64, 23, 3, 1, 230, 144, 2, 193, 25, 230, 64, 23, 3, 1, 230, 144, 2, 209, + 25, 229, 163, 23, 3, 1, 230, 144, 2, 193, 25, 229, 163, 23, 6, 1, 230, + 144, 2, 228, 206, 23, 6, 1, 230, 144, 2, 249, 144, 23, 6, 1, 230, 144, 2, + 209, 25, 219, 178, 23, 6, 1, 230, 144, 2, 193, 25, 219, 178, 23, 6, 1, + 230, 144, 2, 209, 25, 230, 64, 23, 6, 1, 230, 144, 2, 193, 25, 230, 64, + 23, 6, 1, 230, 144, 2, 209, 25, 229, 163, 23, 6, 1, 230, 144, 2, 193, 25, + 229, 163, 23, 3, 1, 254, 147, 2, 219, 178, 23, 3, 1, 254, 147, 2, 230, + 64, 23, 3, 1, 246, 157, 2, 219, 178, 23, 3, 1, 246, 157, 2, 230, 64, 23, + 3, 1, 246, 122, 2, 219, 178, 23, 3, 1, 246, 122, 2, 230, 64, 23, 3, 1, + 237, 163, 2, 219, 178, 23, 3, 1, 237, 163, 2, 230, 64, 23, 3, 1, 230, + 142, 2, 219, 178, 23, 3, 1, 230, 142, 2, 230, 64, 23, 3, 1, 220, 58, 2, + 219, 178, 23, 3, 1, 220, 58, 2, 230, 64, 23, 3, 1, 230, 144, 2, 219, 178, + 23, 3, 1, 230, 144, 2, 230, 64, 23, 3, 1, 254, 147, 2, 209, 25, 217, 207, + 23, 3, 1, 254, 147, 2, 193, 25, 217, 207, 23, 3, 1, 254, 147, 2, 209, 25, + 219, 179, 25, 217, 207, 23, 3, 1, 254, 147, 2, 193, 25, 219, 179, 25, + 217, 207, 23, 3, 1, 254, 147, 2, 209, 25, 230, 65, 25, 217, 207, 23, 3, + 1, 254, 147, 2, 193, 25, 230, 65, 25, 217, 207, 23, 3, 1, 254, 147, 2, + 209, 25, 229, 164, 25, 217, 207, 23, 3, 1, 254, 147, 2, 193, 25, 229, + 164, 25, 217, 207, 23, 6, 1, 254, 147, 2, 209, 25, 228, 217, 23, 6, 1, + 254, 147, 2, 193, 25, 228, 217, 23, 6, 1, 254, 147, 2, 209, 25, 219, 179, + 25, 228, 217, 23, 6, 1, 254, 147, 2, 193, 25, 219, 179, 25, 228, 217, 23, + 6, 1, 254, 147, 2, 209, 25, 230, 65, 25, 228, 217, 23, 6, 1, 254, 147, 2, + 193, 25, 230, 65, 25, 228, 217, 23, 6, 1, 254, 147, 2, 209, 25, 229, 164, + 25, 228, 217, 23, 6, 1, 254, 147, 2, 193, 25, 229, 164, 25, 228, 217, 23, + 3, 1, 246, 122, 2, 209, 25, 217, 207, 23, 3, 1, 246, 122, 2, 193, 25, + 217, 207, 23, 3, 1, 246, 122, 2, 209, 25, 219, 179, 25, 217, 207, 23, 3, + 1, 246, 122, 2, 193, 25, 219, 179, 25, 217, 207, 23, 3, 1, 246, 122, 2, + 209, 25, 230, 65, 25, 217, 207, 23, 3, 1, 246, 122, 2, 193, 25, 230, 65, + 25, 217, 207, 23, 3, 1, 246, 122, 2, 209, 25, 229, 164, 25, 217, 207, 23, + 3, 1, 246, 122, 2, 193, 25, 229, 164, 25, 217, 207, 23, 6, 1, 246, 122, + 2, 209, 25, 228, 217, 23, 6, 1, 246, 122, 2, 193, 25, 228, 217, 23, 6, 1, + 246, 122, 2, 209, 25, 219, 179, 25, 228, 217, 23, 6, 1, 246, 122, 2, 193, + 25, 219, 179, 25, 228, 217, 23, 6, 1, 246, 122, 2, 209, 25, 230, 65, 25, + 228, 217, 23, 6, 1, 246, 122, 2, 193, 25, 230, 65, 25, 228, 217, 23, 6, + 1, 246, 122, 2, 209, 25, 229, 164, 25, 228, 217, 23, 6, 1, 246, 122, 2, + 193, 25, 229, 164, 25, 228, 217, 23, 3, 1, 230, 144, 2, 209, 25, 217, + 207, 23, 3, 1, 230, 144, 2, 193, 25, 217, 207, 23, 3, 1, 230, 144, 2, + 209, 25, 219, 179, 25, 217, 207, 23, 3, 1, 230, 144, 2, 193, 25, 219, + 179, 25, 217, 207, 23, 3, 1, 230, 144, 2, 209, 25, 230, 65, 25, 217, 207, + 23, 3, 1, 230, 144, 2, 193, 25, 230, 65, 25, 217, 207, 23, 3, 1, 230, + 144, 2, 209, 25, 229, 164, 25, 217, 207, 23, 3, 1, 230, 144, 2, 193, 25, + 229, 164, 25, 217, 207, 23, 6, 1, 230, 144, 2, 209, 25, 228, 217, 23, 6, + 1, 230, 144, 2, 193, 25, 228, 217, 23, 6, 1, 230, 144, 2, 209, 25, 219, + 179, 25, 228, 217, 23, 6, 1, 230, 144, 2, 193, 25, 219, 179, 25, 228, + 217, 23, 6, 1, 230, 144, 2, 209, 25, 230, 65, 25, 228, 217, 23, 6, 1, + 230, 144, 2, 193, 25, 230, 65, 25, 228, 217, 23, 6, 1, 230, 144, 2, 209, + 25, 229, 164, 25, 228, 217, 23, 6, 1, 230, 144, 2, 193, 25, 229, 164, 25, + 228, 217, 23, 3, 1, 254, 147, 2, 219, 57, 23, 3, 1, 254, 147, 2, 234, + 115, 23, 3, 1, 254, 147, 2, 219, 179, 25, 217, 207, 23, 3, 1, 254, 147, + 2, 217, 207, 23, 3, 1, 254, 147, 2, 230, 65, 25, 217, 207, 23, 3, 1, 254, + 147, 2, 229, 163, 23, 3, 1, 254, 147, 2, 229, 164, 25, 217, 207, 23, 6, + 1, 254, 147, 2, 219, 57, 23, 6, 1, 254, 147, 2, 234, 115, 23, 6, 1, 254, + 147, 2, 219, 178, 23, 6, 1, 254, 147, 2, 230, 64, 23, 6, 1, 254, 147, 2, + 228, 217, 23, 236, 33, 23, 228, 217, 23, 228, 206, 23, 229, 163, 23, 249, + 8, 25, 229, 163, 23, 3, 1, 246, 122, 2, 219, 179, 25, 217, 207, 23, 3, 1, + 246, 122, 2, 217, 207, 23, 3, 1, 246, 122, 2, 230, 65, 25, 217, 207, 23, + 3, 1, 246, 122, 2, 229, 163, 23, 3, 1, 246, 122, 2, 229, 164, 25, 217, + 207, 23, 6, 1, 246, 157, 2, 219, 178, 23, 6, 1, 246, 157, 2, 230, 64, 23, + 6, 1, 246, 122, 2, 219, 178, 23, 6, 1, 246, 122, 2, 230, 64, 23, 6, 1, + 246, 122, 2, 228, 217, 23, 209, 25, 219, 178, 23, 209, 25, 230, 64, 23, + 209, 25, 229, 163, 23, 3, 1, 237, 163, 2, 219, 57, 23, 3, 1, 237, 163, 2, + 234, 115, 23, 3, 1, 237, 163, 2, 249, 8, 25, 219, 178, 23, 3, 1, 237, + 163, 2, 249, 8, 25, 230, 64, 23, 3, 1, 237, 163, 2, 229, 163, 23, 3, 1, + 237, 163, 2, 249, 8, 25, 229, 163, 23, 6, 1, 237, 163, 2, 219, 57, 23, 6, + 1, 237, 163, 2, 234, 115, 23, 6, 1, 237, 163, 2, 219, 178, 23, 6, 1, 237, + 163, 2, 230, 64, 23, 193, 25, 219, 178, 23, 193, 25, 230, 64, 23, 193, + 25, 229, 163, 23, 3, 1, 220, 58, 2, 219, 57, 23, 3, 1, 220, 58, 2, 234, + 115, 23, 3, 1, 220, 58, 2, 249, 8, 25, 219, 178, 23, 3, 1, 220, 58, 2, + 249, 8, 25, 230, 64, 23, 3, 1, 227, 150, 2, 228, 206, 23, 3, 1, 227, 150, + 2, 249, 144, 23, 3, 1, 220, 58, 2, 229, 163, 23, 3, 1, 220, 58, 2, 249, + 8, 25, 229, 163, 23, 6, 1, 220, 58, 2, 219, 57, 23, 6, 1, 220, 58, 2, + 234, 115, 23, 6, 1, 220, 58, 2, 219, 178, 23, 6, 1, 220, 58, 2, 230, 64, + 23, 6, 1, 227, 150, 2, 249, 144, 23, 249, 8, 25, 219, 178, 23, 249, 8, + 25, 230, 64, 23, 219, 178, 23, 3, 1, 230, 144, 2, 219, 179, 25, 217, 207, + 23, 3, 1, 230, 144, 2, 217, 207, 23, 3, 1, 230, 144, 2, 230, 65, 25, 217, + 207, 23, 3, 1, 230, 144, 2, 229, 163, 23, 3, 1, 230, 144, 2, 229, 164, + 25, 217, 207, 23, 6, 1, 230, 142, 2, 219, 178, 23, 6, 1, 230, 142, 2, + 230, 64, 23, 6, 1, 230, 144, 2, 219, 178, 23, 6, 1, 230, 144, 2, 230, 64, + 23, 6, 1, 230, 144, 2, 228, 217, 23, 230, 64, 23, 249, 144, 246, 198, + 228, 95, 246, 206, 228, 95, 246, 198, 223, 254, 246, 206, 223, 254, 221, + 226, 223, 254, 245, 114, 223, 254, 224, 80, 223, 254, 245, 194, 223, 254, + 228, 197, 223, 254, 221, 253, 223, 254, 243, 201, 223, 254, 217, 85, 218, + 199, 223, 254, 217, 85, 218, 199, 231, 197, 217, 85, 218, 199, 237, 54, + 235, 108, 78, 227, 102, 78, 242, 121, 231, 198, 242, 121, 245, 194, 249, + 146, 246, 198, 249, 146, 246, 206, 249, 146, 186, 135, 51, 69, 235, 43, + 51, 109, 235, 43, 42, 224, 109, 228, 69, 78, 45, 224, 109, 228, 69, 78, + 224, 109, 234, 238, 228, 69, 78, 224, 109, 243, 98, 228, 69, 78, 42, 51, + 228, 69, 78, 45, 51, 228, 69, 78, 51, 234, 238, 228, 69, 78, 51, 243, 98, + 228, 69, 78, 249, 192, 51, 249, 192, 251, 241, 221, 87, 251, 241, 131, + 61, 235, 121, 124, 61, 235, 121, 186, 246, 208, 242, 119, 229, 31, 235, + 44, 225, 54, 229, 241, 225, 54, 235, 108, 246, 204, 227, 102, 246, 204, + 229, 20, 248, 209, 245, 123, 235, 108, 230, 71, 227, 102, 230, 71, 232, + 210, 231, 203, 223, 254, 229, 170, 233, 164, 55, 229, 170, 222, 66, 221, + 232, 55, 228, 235, 51, 228, 235, 221, 78, 228, 235, 210, 228, 235, 210, + 51, 228, 235, 210, 221, 78, 228, 235, 251, 134, 224, 109, 235, 112, 254, + 120, 228, 69, 78, 224, 109, 227, 106, 254, 120, 228, 69, 78, 227, 199, + 78, 51, 246, 95, 78, 237, 177, 230, 73, 220, 78, 126, 221, 200, 251, 135, + 237, 191, 229, 31, 253, 249, 242, 122, 251, 241, 245, 108, 224, 55, 42, + 40, 252, 18, 2, 228, 77, 45, 40, 252, 18, 2, 228, 77, 51, 228, 82, 78, + 228, 82, 246, 95, 78, 246, 95, 228, 82, 78, 221, 164, 5, 246, 123, 210, + 229, 73, 55, 84, 127, 251, 241, 84, 90, 251, 241, 109, 253, 251, 210, + 225, 67, 250, 198, 220, 63, 124, 253, 250, 254, 159, 219, 101, 250, 167, + 233, 155, 55, 223, 23, 249, 146, 237, 170, 220, 78, 245, 145, 228, 197, + 78, 148, 61, 228, 196, 228, 92, 228, 235, 245, 116, 61, 228, 196, 245, + 170, 61, 228, 196, 124, 61, 228, 196, 245, 116, 61, 78, 247, 143, 250, + 100, 221, 86, 69, 245, 116, 248, 143, 234, 18, 14, 223, 254, 218, 174, + 237, 54, 245, 88, 254, 76, 237, 168, 221, 176, 237, 168, 225, 54, 237, + 168, 229, 43, 237, 201, 222, 228, 223, 34, 254, 250, 222, 228, 223, 34, + 237, 201, 12, 245, 124, 225, 5, 254, 250, 12, 245, 124, 225, 5, 232, 206, + 20, 225, 6, 231, 199, 20, 225, 6, 223, 59, 217, 84, 223, 59, 7, 3, 1, 72, + 223, 59, 154, 223, 59, 174, 223, 59, 182, 223, 59, 191, 223, 59, 185, + 223, 59, 190, 223, 59, 88, 55, 223, 59, 233, 154, 223, 59, 246, 154, 55, + 223, 59, 42, 229, 229, 223, 59, 45, 229, 229, 223, 59, 7, 3, 1, 207, 223, + 94, 217, 84, 223, 94, 107, 223, 94, 103, 223, 94, 160, 223, 94, 154, 223, + 94, 174, 223, 94, 182, 223, 94, 191, 223, 94, 185, 223, 94, 190, 223, 94, + 88, 55, 223, 94, 233, 154, 223, 94, 246, 154, 55, 223, 94, 42, 229, 229, + 223, 94, 45, 229, 229, 7, 223, 94, 3, 1, 60, 7, 223, 94, 3, 1, 73, 7, + 223, 94, 3, 1, 74, 7, 223, 94, 3, 1, 218, 151, 7, 223, 94, 3, 1, 226, + 104, 246, 106, 55, 250, 176, 55, 250, 94, 55, 245, 102, 245, 104, 55, + 235, 30, 55, 233, 165, 55, 232, 223, 55, 229, 153, 55, 227, 4, 55, 218, + 182, 55, 146, 224, 232, 55, 248, 152, 55, 246, 107, 55, 236, 100, 55, + 220, 252, 55, 247, 127, 55, 244, 170, 229, 177, 55, 229, 151, 55, 244, + 14, 55, 253, 224, 55, 242, 176, 55, 251, 94, 55, 235, 24, 221, 111, 55, + 223, 246, 55, 222, 64, 55, 36, 42, 243, 177, 50, 36, 45, 243, 177, 50, + 36, 171, 69, 235, 44, 230, 74, 36, 224, 192, 69, 235, 44, 230, 74, 36, + 254, 104, 76, 50, 36, 250, 199, 76, 50, 36, 42, 76, 50, 36, 45, 76, 50, + 36, 227, 94, 230, 74, 36, 250, 199, 227, 94, 230, 74, 36, 254, 104, 227, + 94, 230, 74, 36, 148, 188, 50, 36, 245, 116, 188, 50, 36, 246, 193, 250, + 221, 36, 246, 193, 223, 227, 36, 246, 193, 249, 4, 36, 246, 193, 250, + 222, 252, 230, 36, 42, 45, 76, 50, 36, 246, 193, 226, 100, 36, 246, 193, + 236, 152, 36, 246, 193, 220, 55, 229, 28, 221, 90, 36, 227, 160, 224, 18, + 230, 74, 36, 51, 69, 214, 230, 74, 36, 254, 111, 100, 36, 221, 78, 220, + 80, 36, 218, 201, 252, 4, 50, 36, 127, 76, 230, 74, 36, 171, 51, 224, 18, + 230, 74, 36, 90, 243, 177, 2, 192, 247, 129, 36, 127, 243, 177, 2, 192, + 247, 129, 36, 42, 76, 56, 36, 45, 76, 56, 36, 253, 252, 50, 254, 254, + 230, 165, 254, 241, 199, 222, 23, 223, 98, 173, 6, 251, 202, 249, 77, + 251, 88, 251, 85, 235, 44, 100, 251, 136, 230, 165, 251, 165, 220, 86, + 246, 108, 250, 144, 226, 98, 249, 77, 245, 250, 102, 3, 245, 67, 102, 6, + 243, 225, 252, 51, 6, 243, 225, 173, 6, 243, 225, 229, 53, 250, 144, 229, + 53, 250, 145, 104, 124, 229, 108, 102, 6, 72, 252, 51, 6, 72, 102, 6, + 153, 102, 3, 153, 235, 202, 49, 252, 201, 100, 173, 6, 207, 231, 105, 55, + 224, 9, 227, 210, 250, 125, 102, 6, 230, 59, 173, 6, 230, 59, 173, 6, + 228, 163, 102, 6, 152, 252, 51, 6, 152, 173, 6, 152, 228, 239, 222, 129, + 227, 169, 225, 50, 78, 222, 72, 55, 221, 107, 164, 55, 219, 153, 173, 6, + 217, 157, 230, 85, 55, 230, 160, 55, 237, 170, 230, 160, 55, 252, 51, 6, + 217, 157, 215, 23, 3, 1, 237, 162, 236, 175, 55, 254, 118, 55, 102, 6, + 253, 204, 252, 51, 6, 251, 202, 246, 126, 100, 102, 3, 73, 102, 6, 73, + 102, 6, 246, 74, 215, 6, 246, 74, 102, 6, 189, 102, 3, 74, 99, 100, 252, + 105, 100, 244, 92, 100, 249, 178, 100, 237, 205, 224, 7, 227, 59, 6, 228, + 163, 245, 252, 55, 173, 3, 229, 108, 173, 3, 244, 231, 173, 6, 244, 231, + 173, 6, 229, 108, 173, 233, 33, 223, 71, 215, 33, 6, 245, 67, 215, 33, 6, + 153, 210, 33, 6, 153, 215, 33, 6, 218, 90, 173, 30, 6, 250, 46, 173, 30, + 3, 250, 46, 173, 30, 3, 73, 173, 30, 3, 72, 173, 30, 3, 237, 126, 228, + 220, 235, 43, 215, 254, 134, 229, 170, 55, 254, 177, 215, 3, 246, 74, 16, + 35, 213, 224, 7, 219, 55, 245, 108, 131, 225, 40, 219, 55, 245, 108, 131, + 232, 26, 219, 55, 245, 108, 131, 222, 61, 219, 55, 245, 108, 131, 221, + 251, 219, 55, 245, 108, 124, 221, 249, 219, 55, 245, 108, 131, 245, 199, + 219, 55, 245, 108, 124, 245, 198, 219, 55, 245, 108, 148, 245, 198, 219, + 55, 245, 108, 245, 116, 245, 198, 219, 55, 245, 108, 131, 224, 73, 219, + 55, 245, 108, 245, 170, 224, 71, 219, 55, 245, 108, 131, 246, 231, 219, + 55, 245, 108, 148, 246, 229, 219, 55, 245, 108, 245, 170, 246, 229, 219, + 55, 245, 108, 225, 43, 246, 229, 245, 108, 231, 106, 107, 227, 68, 231, + 107, 107, 227, 68, 231, 107, 103, 227, 68, 231, 107, 160, 227, 68, 231, + 107, 154, 227, 68, 231, 107, 174, 227, 68, 231, 107, 182, 227, 68, 231, + 107, 191, 227, 68, 231, 107, 185, 227, 68, 231, 107, 190, 227, 68, 231, + 107, 222, 65, 227, 68, 231, 107, 246, 211, 227, 68, 231, 107, 220, 221, + 227, 68, 231, 107, 245, 196, 227, 68, 231, 107, 131, 242, 161, 227, 68, + 231, 107, 245, 170, 242, 161, 227, 68, 231, 107, 131, 221, 231, 3, 227, + 68, 231, 107, 107, 3, 227, 68, 231, 107, 103, 3, 227, 68, 231, 107, 160, + 3, 227, 68, 231, 107, 154, 3, 227, 68, 231, 107, 174, 3, 227, 68, 231, + 107, 182, 3, 227, 68, 231, 107, 191, 3, 227, 68, 231, 107, 185, 3, 227, + 68, 231, 107, 190, 3, 227, 68, 231, 107, 222, 65, 3, 227, 68, 231, 107, + 246, 211, 3, 227, 68, 231, 107, 220, 221, 3, 227, 68, 231, 107, 245, 196, + 3, 227, 68, 231, 107, 131, 242, 161, 3, 227, 68, 231, 107, 245, 170, 242, + 161, 3, 227, 68, 231, 107, 131, 221, 231, 227, 68, 231, 107, 131, 221, + 232, 251, 203, 250, 46, 227, 68, 231, 107, 245, 170, 221, 231, 227, 68, + 231, 107, 222, 66, 221, 231, 227, 68, 231, 107, 210, 131, 242, 161, 7, 3, + 1, 210, 251, 202, 227, 68, 231, 107, 224, 82, 235, 140, 17, 227, 68, 231, + 107, 245, 197, 247, 10, 17, 227, 68, 231, 107, 245, 197, 221, 231, 227, + 68, 231, 107, 131, 242, 162, 221, 231, 219, 55, 245, 108, 217, 85, 221, + 249, 127, 65, 220, 53, 65, 90, 65, 247, 130, 65, 42, 45, 65, 108, 113, + 65, 231, 187, 218, 217, 65, 231, 187, 247, 5, 65, 224, 6, 247, 5, 65, + 224, 6, 218, 217, 65, 127, 76, 2, 92, 90, 76, 2, 92, 127, 218, 237, 65, + 90, 218, 237, 65, 127, 124, 243, 158, 65, 220, 53, 124, 243, 158, 65, 90, + 124, 243, 158, 65, 247, 130, 124, 243, 158, 65, 127, 76, 2, 222, 135, 90, + 76, 2, 222, 135, 127, 76, 245, 97, 135, 220, 53, 76, 245, 97, 135, 90, + 76, 245, 97, 135, 247, 130, 76, 245, 97, 135, 108, 113, 76, 2, 252, 189, + 127, 76, 2, 96, 90, 76, 2, 96, 127, 76, 2, 234, 247, 90, 76, 2, 234, 247, + 42, 45, 218, 237, 65, 42, 45, 76, 2, 92, 247, 130, 217, 33, 65, 220, 53, + 76, 2, 221, 170, 235, 107, 220, 53, 76, 2, 221, 170, 227, 100, 247, 130, + 76, 2, 221, 170, 235, 107, 247, 130, 76, 2, 221, 170, 227, 100, 90, 76, + 2, 250, 124, 247, 129, 247, 130, 76, 2, 250, 124, 235, 107, 254, 104, + 221, 120, 225, 70, 65, 250, 199, 221, 120, 225, 70, 65, 231, 187, 218, + 217, 76, 199, 171, 135, 127, 76, 199, 252, 201, 104, 90, 76, 199, 135, + 254, 104, 230, 119, 250, 222, 65, 250, 199, 230, 119, 250, 222, 65, 127, + 243, 177, 2, 192, 220, 52, 127, 243, 177, 2, 192, 247, 129, 220, 53, 243, + 177, 2, 192, 227, 100, 220, 53, 243, 177, 2, 192, 235, 107, 90, 243, 177, + 2, 192, 220, 52, 90, 243, 177, 2, 192, 247, 129, 247, 130, 243, 177, 2, + 192, 227, 100, 247, 130, 243, 177, 2, 192, 235, 107, 90, 76, 104, 127, + 65, 220, 53, 76, 127, 117, 247, 130, 65, 127, 76, 104, 90, 65, 127, 230, + 32, 254, 19, 220, 53, 230, 32, 254, 19, 90, 230, 32, 254, 19, 247, 130, + 230, 32, 254, 19, 127, 243, 177, 104, 90, 243, 176, 90, 243, 177, 104, + 127, 243, 176, 127, 51, 76, 2, 92, 42, 45, 51, 76, 2, 92, 90, 51, 76, 2, + 92, 127, 51, 65, 220, 53, 51, 65, 90, 51, 65, 247, 130, 51, 65, 42, 45, + 51, 65, 108, 113, 51, 65, 231, 187, 218, 217, 51, 65, 231, 187, 247, 5, + 51, 65, 224, 6, 247, 5, 51, 65, 224, 6, 218, 217, 51, 65, 127, 221, 78, + 65, 90, 221, 78, 65, 127, 223, 223, 65, 90, 223, 223, 65, 220, 53, 76, 2, + 51, 92, 247, 130, 76, 2, 51, 92, 127, 249, 145, 65, 220, 53, 249, 145, + 65, 90, 249, 145, 65, 247, 130, 249, 145, 65, 127, 76, 199, 135, 90, 76, + 199, 135, 127, 67, 65, 220, 53, 67, 65, 90, 67, 65, 247, 130, 67, 65, + 220, 53, 67, 76, 245, 97, 135, 220, 53, 67, 76, 230, 139, 229, 193, 220, + 53, 67, 76, 230, 139, 229, 194, 2, 186, 135, 220, 53, 67, 76, 230, 139, + 229, 194, 2, 69, 135, 220, 53, 67, 51, 65, 220, 53, 67, 51, 76, 230, 139, + 229, 193, 90, 67, 76, 245, 97, 218, 254, 231, 187, 218, 217, 76, 199, + 250, 123, 224, 6, 247, 5, 76, 199, 250, 123, 108, 113, 67, 65, 45, 76, 2, + 3, 250, 221, 247, 130, 76, 127, 117, 220, 53, 65, 148, 90, 254, 19, 127, + 76, 2, 69, 92, 90, 76, 2, 69, 92, 42, 45, 76, 2, 69, 92, 127, 76, 2, 51, + 69, 92, 90, 76, 2, 51, 69, 92, 42, 45, 76, 2, 51, 69, 92, 127, 230, 117, + 65, 90, 230, 117, 65, 42, 45, 230, 117, 65, 35, 254, 157, 250, 164, 229, + 223, 248, 246, 222, 14, 246, 91, 222, 14, 248, 160, 212, 246, 92, 246, + 199, 225, 45, 237, 215, 232, 231, 246, 213, 230, 165, 212, 254, 132, 246, + 213, 230, 165, 3, 246, 213, 230, 165, 250, 140, 254, 14, 233, 254, 248, + 160, 212, 250, 142, 254, 14, 233, 254, 3, 250, 140, 254, 14, 233, 254, + 246, 190, 117, 228, 222, 233, 33, 228, 229, 233, 33, 250, 128, 233, 33, + 223, 71, 233, 155, 55, 233, 153, 55, 61, 229, 43, 248, 188, 224, 55, 225, + 46, 233, 154, 253, 252, 230, 112, 227, 94, 230, 112, 251, 242, 230, 112, + 40, 227, 64, 250, 89, 227, 64, 245, 110, 227, 64, 228, 218, 101, 237, + 207, 45, 254, 119, 254, 119, 234, 22, 254, 119, 223, 245, 254, 119, 248, + 190, 248, 160, 212, 248, 193, 229, 234, 101, 212, 229, 234, 101, 235, 7, + 254, 126, 235, 7, 230, 105, 237, 174, 220, 74, 237, 186, 51, 237, 186, + 221, 78, 237, 186, 250, 136, 237, 186, 223, 49, 237, 186, 219, 65, 237, + 186, 250, 199, 237, 186, 250, 199, 250, 136, 237, 186, 254, 104, 250, + 136, 237, 186, 222, 13, 252, 138, 227, 224, 228, 219, 61, 233, 154, 246, + 96, 244, 176, 228, 219, 242, 250, 221, 180, 230, 112, 210, 221, 179, 237, + 170, 235, 129, 198, 224, 111, 218, 236, 218, 168, 228, 229, 212, 221, + 179, 233, 155, 221, 179, 253, 247, 114, 101, 212, 253, 247, 114, 101, + 254, 72, 114, 101, 254, 72, 251, 222, 212, 254, 249, 114, 101, 232, 135, + 254, 72, 231, 190, 254, 249, 114, 101, 254, 151, 114, 101, 212, 254, 151, + 114, 101, 254, 151, 114, 156, 114, 101, 221, 78, 221, 179, 254, 158, 114, + 101, 246, 150, 101, 244, 175, 246, 150, 101, 248, 247, 252, 99, 254, 74, + 222, 23, 235, 51, 244, 175, 114, 101, 254, 72, 114, 199, 156, 222, 23, + 237, 237, 230, 165, 237, 237, 117, 156, 254, 72, 114, 101, 250, 176, 246, + 153, 246, 154, 250, 175, 227, 94, 237, 224, 114, 101, 227, 94, 114, 101, + 250, 117, 101, 246, 125, 246, 152, 101, 223, 157, 246, 153, 249, 63, 114, + 101, 114, 199, 251, 213, 249, 78, 234, 22, 251, 212, 228, 80, 114, 101, + 212, 114, 101, 242, 59, 101, 212, 242, 59, 101, 223, 123, 246, 150, 101, + 235, 87, 156, 114, 101, 244, 30, 156, 114, 101, 235, 87, 104, 114, 101, + 244, 30, 104, 114, 101, 235, 87, 251, 222, 212, 114, 101, 244, 30, 251, + 222, 212, 114, 101, 233, 95, 235, 86, 233, 95, 244, 29, 252, 99, 212, + 246, 150, 101, 212, 235, 86, 212, 244, 29, 232, 135, 235, 87, 231, 190, + 114, 101, 232, 135, 244, 30, 231, 190, 114, 101, 235, 87, 156, 246, 150, + 101, 244, 30, 156, 246, 150, 101, 232, 135, 235, 87, 231, 190, 246, 150, + 101, 232, 135, 244, 30, 231, 190, 246, 150, 101, 235, 87, 156, 244, 29, + 244, 30, 156, 235, 86, 232, 135, 235, 87, 231, 190, 244, 29, 232, 135, + 244, 30, 231, 190, 235, 86, 228, 244, 223, 84, 228, 245, 156, 114, 101, + 223, 85, 156, 114, 101, 228, 245, 156, 246, 150, 101, 223, 85, 156, 246, + 150, 101, 248, 160, 212, 228, 247, 248, 160, 212, 223, 86, 223, 93, 230, + 165, 223, 58, 230, 165, 212, 112, 223, 93, 230, 165, 212, 112, 223, 58, + 230, 165, 223, 93, 117, 156, 114, 101, 223, 58, 117, 156, 114, 101, 232, + 135, 112, 223, 93, 117, 231, 190, 114, 101, 232, 135, 112, 223, 58, 117, + 231, 190, 114, 101, 223, 93, 117, 2, 212, 114, 101, 223, 58, 117, 2, 212, + 114, 101, 233, 81, 233, 82, 233, 83, 233, 82, 220, 74, 40, 237, 237, 230, + 165, 40, 230, 101, 230, 165, 40, 237, 237, 117, 156, 114, 101, 40, 230, + 101, 117, 156, 114, 101, 40, 251, 143, 40, 250, 82, 34, 229, 43, 34, 233, + 154, 34, 221, 176, 34, 248, 188, 224, 55, 34, 61, 230, 112, 34, 227, 94, + 230, 112, 34, 253, 252, 230, 112, 34, 246, 153, 34, 249, 146, 204, 229, + 43, 204, 233, 154, 204, 221, 176, 204, 61, 230, 112, 45, 222, 143, 42, + 222, 143, 113, 222, 143, 108, 222, 143, 253, 255, 233, 133, 221, 62, 245, + 128, 221, 78, 69, 252, 201, 45, 220, 236, 51, 69, 252, 201, 51, 45, 220, + 236, 248, 160, 212, 228, 214, 212, 221, 62, 248, 160, 212, 245, 129, 232, + 138, 51, 69, 252, 201, 51, 45, 220, 236, 228, 245, 220, 82, 227, 192, + 223, 85, 220, 82, 227, 192, 231, 188, 223, 101, 230, 165, 250, 140, 254, + 14, 231, 188, 223, 100, 231, 188, 223, 101, 117, 156, 114, 101, 250, 140, + 254, 14, 231, 188, 223, 101, 156, 114, 101, 230, 101, 230, 165, 237, 237, + 230, 165, 233, 87, 243, 131, 250, 150, 234, 49, 237, 183, 218, 118, 232, + 216, 231, 189, 45, 254, 120, 2, 254, 51, 45, 221, 90, 233, 33, 235, 7, + 254, 126, 233, 33, 235, 7, 230, 105, 233, 33, 237, 174, 233, 33, 220, 74, + 249, 5, 230, 112, 61, 230, 112, 223, 157, 230, 112, 248, 188, 221, 176, + 252, 22, 42, 231, 188, 245, 251, 225, 66, 228, 229, 45, 231, 188, 245, + 251, 225, 66, 228, 229, 42, 225, 66, 228, 229, 45, 225, 66, 228, 229, + 210, 221, 180, 246, 153, 250, 79, 235, 7, 230, 105, 250, 79, 235, 7, 254, + 126, 51, 223, 92, 51, 223, 57, 51, 237, 174, 51, 220, 74, 229, 62, 114, + 25, 229, 234, 101, 235, 87, 2, 248, 145, 244, 30, 2, 248, 145, 219, 100, + 233, 95, 235, 86, 219, 100, 233, 95, 244, 29, 235, 87, 114, 199, 156, + 244, 29, 244, 30, 114, 199, 156, 235, 86, 114, 199, 156, 235, 86, 114, + 199, 156, 244, 29, 114, 199, 156, 228, 244, 114, 199, 156, 223, 84, 248, + 160, 212, 228, 248, 156, 246, 155, 248, 160, 212, 223, 87, 156, 246, 155, + 212, 40, 237, 237, 117, 156, 114, 101, 212, 40, 230, 101, 117, 156, 114, + 101, 40, 237, 237, 117, 156, 212, 114, 101, 40, 230, 101, 117, 156, 212, + 114, 101, 235, 87, 251, 222, 212, 246, 150, 101, 244, 30, 251, 222, 212, + 246, 150, 101, 228, 245, 251, 222, 212, 246, 150, 101, 223, 85, 251, 222, + 212, 246, 150, 101, 212, 231, 188, 223, 101, 230, 165, 248, 160, 212, + 250, 142, 254, 14, 231, 188, 223, 100, 212, 231, 188, 223, 101, 117, 156, + 114, 101, 248, 160, 212, 250, 142, 254, 14, 231, 188, 223, 101, 156, 246, + 155, 69, 246, 208, 233, 191, 186, 246, 208, 108, 45, 249, 11, 246, 208, + 113, 45, 249, 11, 246, 208, 246, 213, 117, 2, 171, 186, 92, 246, 213, + 117, 2, 69, 252, 201, 253, 245, 246, 190, 117, 186, 92, 3, 246, 213, 117, + 2, 69, 252, 201, 253, 245, 246, 190, 117, 186, 92, 246, 213, 117, 2, 61, + 50, 246, 213, 117, 2, 230, 77, 3, 246, 213, 117, 2, 230, 77, 246, 213, + 117, 2, 220, 81, 246, 213, 117, 2, 124, 186, 223, 107, 250, 140, 2, 171, + 186, 92, 250, 140, 2, 69, 252, 201, 253, 245, 246, 190, 117, 186, 92, 3, + 250, 140, 2, 69, 252, 201, 253, 245, 246, 190, 117, 186, 92, 250, 140, 2, + 230, 77, 3, 250, 140, 2, 230, 77, 217, 158, 165, 252, 226, 233, 253, 249, + 6, 55, 246, 215, 65, 242, 182, 108, 254, 20, 113, 254, 20, 228, 225, 229, + 156, 218, 235, 235, 43, 42, 251, 90, 45, 251, 90, 42, 245, 149, 45, 245, + 149, 252, 29, 45, 250, 102, 252, 29, 42, 250, 102, 221, 120, 45, 250, + 102, 221, 120, 42, 250, 102, 210, 212, 55, 40, 234, 234, 254, 51, 226, + 80, 226, 85, 222, 72, 227, 211, 229, 16, 237, 211, 219, 88, 223, 227, + 229, 57, 117, 237, 182, 55, 215, 212, 55, 218, 242, 242, 183, 221, 120, + 42, 250, 123, 221, 120, 45, 250, 123, 252, 29, 42, 250, 123, 252, 29, 45, + 250, 123, 221, 120, 144, 237, 186, 252, 29, 144, 237, 186, 245, 95, 224, + 39, 108, 254, 21, 252, 100, 124, 186, 252, 191, 230, 107, 236, 154, 246, + 146, 199, 222, 23, 227, 109, 218, 152, 237, 224, 112, 227, 209, 252, 21, + 236, 153, 235, 112, 254, 120, 115, 227, 106, 254, 120, 115, 246, 146, + 199, 222, 23, 235, 115, 252, 111, 227, 93, 250, 56, 254, 158, 254, 28, + 222, 227, 221, 112, 227, 9, 248, 228, 230, 102, 250, 152, 222, 113, 224, + 49, 250, 114, 250, 113, 179, 180, 16, 242, 104, 179, 180, 16, 223, 221, + 228, 95, 179, 180, 16, 228, 96, 246, 155, 179, 180, 16, 228, 96, 248, + 193, 179, 180, 16, 228, 96, 249, 4, 179, 180, 16, 228, 96, 237, 47, 179, + 180, 16, 228, 96, 250, 221, 179, 180, 16, 250, 222, 223, 142, 179, 180, + 16, 250, 222, 237, 47, 179, 180, 16, 224, 56, 135, 179, 180, 16, 252, + 231, 135, 179, 180, 16, 228, 96, 224, 55, 179, 180, 16, 228, 96, 252, + 230, 179, 180, 16, 228, 96, 235, 86, 179, 180, 16, 228, 96, 244, 29, 179, + 180, 16, 127, 219, 183, 179, 180, 16, 90, 219, 183, 179, 180, 16, 228, + 96, 127, 65, 179, 180, 16, 228, 96, 90, 65, 179, 180, 16, 250, 222, 252, + 230, 179, 180, 16, 113, 222, 144, 220, 81, 179, 180, 16, 249, 63, 223, + 142, 179, 180, 16, 228, 96, 113, 251, 134, 179, 180, 16, 228, 96, 249, + 62, 179, 180, 16, 113, 222, 144, 237, 47, 179, 180, 16, 220, 53, 219, + 183, 179, 180, 16, 228, 96, 220, 53, 65, 179, 180, 16, 108, 222, 144, + 230, 77, 179, 180, 16, 249, 72, 223, 142, 179, 180, 16, 228, 96, 108, + 251, 134, 179, 180, 16, 228, 96, 249, 71, 179, 180, 16, 108, 222, 144, + 237, 47, 179, 180, 16, 247, 130, 219, 183, 179, 180, 16, 228, 96, 247, + 130, 65, 179, 180, 16, 228, 68, 220, 81, 179, 180, 16, 249, 63, 220, 81, + 179, 180, 16, 249, 5, 220, 81, 179, 180, 16, 237, 48, 220, 81, 179, 180, + 16, 250, 222, 220, 81, 179, 180, 16, 108, 224, 198, 237, 47, 179, 180, + 16, 228, 68, 228, 95, 179, 180, 16, 250, 222, 223, 156, 179, 180, 16, + 228, 96, 250, 175, 179, 180, 16, 108, 222, 144, 249, 13, 179, 180, 16, + 249, 72, 249, 13, 179, 180, 16, 223, 157, 249, 13, 179, 180, 16, 237, 48, + 249, 13, 179, 180, 16, 250, 222, 249, 13, 179, 180, 16, 113, 224, 198, + 223, 142, 179, 180, 16, 42, 224, 198, 223, 142, 179, 180, 16, 221, 180, + 249, 13, 179, 180, 16, 244, 30, 249, 13, 179, 180, 16, 250, 169, 135, + 179, 180, 16, 249, 72, 221, 179, 179, 180, 16, 217, 32, 179, 180, 16, + 223, 143, 221, 179, 179, 180, 16, 225, 68, 220, 81, 179, 180, 16, 228, + 96, 212, 246, 155, 179, 180, 16, 228, 96, 228, 81, 179, 180, 16, 113, + 251, 135, 221, 179, 179, 180, 16, 108, 251, 135, 221, 179, 179, 180, 16, + 237, 162, 179, 180, 16, 227, 149, 179, 180, 16, 230, 143, 179, 180, 16, + 254, 147, 220, 81, 179, 180, 16, 246, 157, 220, 81, 179, 180, 16, 237, + 163, 220, 81, 179, 180, 16, 230, 144, 220, 81, 179, 180, 16, 254, 146, + 212, 251, 45, 78, 45, 254, 120, 2, 247, 130, 217, 33, 65, 224, 177, 230, + 119, 252, 21, 252, 120, 100, 69, 235, 44, 2, 233, 193, 248, 145, 237, + 191, 100, 250, 137, 220, 79, 100, 248, 204, 220, 79, 100, 246, 201, 100, + 250, 160, 100, 67, 40, 2, 251, 85, 69, 235, 43, 246, 179, 100, 254, 142, + 236, 155, 100, 243, 142, 100, 34, 186, 252, 201, 2, 231, 183, 34, 221, + 91, 247, 132, 252, 1, 250, 222, 2, 231, 186, 65, 220, 77, 100, 233, 122, + 100, 242, 117, 100, 230, 118, 243, 224, 100, 230, 118, 235, 200, 100, + 229, 218, 100, 229, 217, 100, 248, 210, 250, 77, 16, 245, 124, 103, 224, + 20, 100, 179, 180, 16, 228, 95, 249, 86, 225, 55, 236, 155, 100, 228, + 237, 230, 34, 232, 120, 230, 34, 228, 234, 226, 101, 100, 250, 209, 226, + 101, 100, 42, 229, 230, 220, 60, 96, 42, 229, 230, 246, 86, 42, 229, 230, + 234, 237, 96, 45, 229, 230, 220, 60, 96, 45, 229, 230, 246, 86, 45, 229, + 230, 234, 237, 96, 42, 40, 252, 18, 220, 60, 250, 123, 42, 40, 252, 18, + 246, 86, 42, 40, 252, 18, 234, 237, 250, 123, 45, 40, 252, 18, 220, 60, + 250, 123, 45, 40, 252, 18, 246, 86, 45, 40, 252, 18, 234, 237, 250, 123, + 42, 250, 79, 252, 18, 220, 60, 96, 42, 250, 79, 252, 18, 233, 193, 229, + 102, 42, 250, 79, 252, 18, 234, 237, 96, 250, 79, 252, 18, 246, 86, 45, + 250, 79, 252, 18, 220, 60, 96, 45, 250, 79, 252, 18, 233, 193, 229, 102, + 45, 250, 79, 252, 18, 234, 237, 96, 237, 187, 246, 86, 186, 235, 44, 246, + 86, 220, 60, 42, 156, 234, 237, 45, 250, 79, 252, 18, 226, 86, 220, 60, + 45, 156, 234, 237, 42, 250, 79, 252, 18, 226, 86, 223, 72, 221, 119, 223, + 72, 252, 28, 221, 120, 40, 115, 252, 29, 40, 115, 252, 29, 40, 252, 18, + 104, 221, 120, 40, 115, 32, 16, 252, 28, 42, 69, 86, 235, 43, 45, 69, 86, + 235, 43, 186, 226, 112, 235, 42, 186, 226, 112, 235, 41, 186, 226, 112, + 235, 40, 186, 226, 112, 235, 39, 249, 54, 16, 170, 69, 25, 221, 120, 227, + 109, 249, 54, 16, 170, 69, 25, 252, 29, 227, 109, 249, 54, 16, 170, 69, + 2, 250, 221, 249, 54, 16, 170, 113, 25, 186, 2, 250, 221, 249, 54, 16, + 170, 108, 25, 186, 2, 250, 221, 249, 54, 16, 170, 69, 2, 221, 90, 249, + 54, 16, 170, 113, 25, 186, 2, 221, 90, 249, 54, 16, 170, 108, 25, 186, 2, + 221, 90, 249, 54, 16, 170, 69, 25, 218, 236, 249, 54, 16, 170, 113, 25, + 186, 2, 218, 236, 249, 54, 16, 170, 108, 25, 186, 2, 218, 236, 249, 54, + 16, 170, 113, 25, 242, 241, 249, 54, 16, 170, 108, 25, 242, 241, 249, 54, + 16, 170, 69, 25, 221, 120, 235, 115, 249, 54, 16, 170, 69, 25, 252, 29, + 235, 115, 40, 245, 133, 227, 163, 100, 246, 225, 100, 69, 235, 44, 246, + 86, 233, 233, 252, 8, 233, 233, 171, 104, 224, 191, 233, 233, 224, 192, + 104, 235, 2, 233, 233, 171, 104, 124, 224, 179, 233, 233, 124, 224, 180, + 104, 235, 2, 233, 233, 124, 224, 180, 237, 55, 233, 233, 221, 75, 233, + 233, 222, 43, 233, 233, 229, 174, 247, 9, 244, 24, 245, 81, 221, 120, + 229, 229, 252, 29, 229, 229, 221, 120, 250, 79, 115, 252, 29, 250, 79, + 115, 221, 120, 221, 114, 224, 236, 115, 252, 29, 221, 114, 224, 236, 115, + 67, 221, 101, 252, 111, 227, 94, 2, 250, 221, 223, 129, 245, 155, 255, 3, + 250, 76, 246, 214, 237, 174, 249, 86, 246, 88, 100, 16, 35, 231, 110, 16, + 35, 223, 154, 117, 243, 157, 16, 35, 223, 154, 117, 222, 39, 16, 35, 246, + 190, 117, 222, 39, 16, 35, 246, 190, 117, 221, 104, 16, 35, 246, 181, 16, + 35, 254, 252, 16, 35, 252, 119, 16, 35, 252, 229, 16, 35, 186, 222, 145, + 16, 35, 235, 44, 245, 224, 16, 35, 69, 222, 145, 16, 35, 245, 124, 245, + 224, 16, 35, 251, 128, 227, 162, 16, 35, 224, 217, 230, 83, 16, 35, 224, + 217, 237, 223, 16, 35, 249, 142, 235, 34, 246, 135, 16, 35, 249, 42, 250, + 132, 107, 16, 35, 249, 42, 250, 132, 103, 16, 35, 249, 42, 250, 132, 160, + 16, 35, 249, 42, 250, 132, 154, 16, 35, 232, 136, 254, 252, 16, 35, 222, + 224, 238, 28, 16, 35, 246, 190, 117, 221, 105, 252, 45, 16, 35, 251, 152, + 16, 35, 246, 190, 117, 234, 17, 16, 35, 223, 90, 16, 35, 246, 135, 16, + 35, 245, 189, 225, 54, 16, 35, 244, 23, 225, 54, 16, 35, 227, 212, 225, + 54, 16, 35, 220, 73, 225, 54, 16, 35, 223, 254, 16, 35, 249, 69, 252, 48, + 100, 230, 119, 252, 21, 16, 35, 232, 122, 16, 35, 249, 70, 245, 124, 103, + 16, 35, 223, 91, 245, 124, 103, 230, 171, 96, 230, 171, 251, 64, 230, + 171, 245, 127, 230, 171, 237, 170, 245, 127, 230, 171, 252, 117, 251, + 247, 230, 171, 252, 25, 221, 200, 230, 171, 252, 15, 252, 204, 242, 58, + 230, 171, 254, 135, 117, 251, 44, 230, 171, 249, 146, 230, 171, 250, 70, + 254, 254, 231, 108, 230, 171, 51, 252, 230, 34, 20, 107, 34, 20, 103, 34, + 20, 160, 34, 20, 154, 34, 20, 174, 34, 20, 182, 34, 20, 191, 34, 20, 185, + 34, 20, 190, 34, 54, 222, 65, 34, 54, 246, 211, 34, 54, 220, 221, 34, 54, + 221, 247, 34, 54, 245, 111, 34, 54, 245, 200, 34, 54, 224, 77, 34, 54, + 225, 41, 34, 54, 246, 233, 34, 54, 232, 29, 34, 54, 220, 219, 82, 20, + 107, 82, 20, 103, 82, 20, 160, 82, 20, 154, 82, 20, 174, 82, 20, 182, 82, + 20, 191, 82, 20, 185, 82, 20, 190, 82, 54, 222, 65, 82, 54, 246, 211, 82, + 54, 220, 221, 82, 54, 221, 247, 82, 54, 245, 111, 82, 54, 245, 200, 82, + 54, 224, 77, 82, 54, 225, 41, 82, 54, 246, 233, 82, 54, 232, 29, 82, 54, + 220, 219, 20, 131, 245, 90, 223, 136, 20, 124, 245, 90, 223, 136, 20, + 148, 245, 90, 223, 136, 20, 245, 116, 245, 90, 223, 136, 20, 245, 170, + 245, 90, 223, 136, 20, 224, 82, 245, 90, 223, 136, 20, 225, 43, 245, 90, + 223, 136, 20, 246, 235, 245, 90, 223, 136, 20, 232, 31, 245, 90, 223, + 136, 54, 222, 66, 245, 90, 223, 136, 54, 246, 212, 245, 90, 223, 136, 54, + 220, 222, 245, 90, 223, 136, 54, 221, 248, 245, 90, 223, 136, 54, 245, + 112, 245, 90, 223, 136, 54, 245, 201, 245, 90, 223, 136, 54, 224, 78, + 245, 90, 223, 136, 54, 225, 42, 245, 90, 223, 136, 54, 246, 234, 245, 90, + 223, 136, 54, 232, 30, 245, 90, 223, 136, 54, 220, 220, 245, 90, 223, + 136, 82, 7, 3, 1, 60, 82, 7, 3, 1, 253, 204, 82, 7, 3, 1, 251, 202, 82, + 7, 3, 1, 250, 46, 82, 7, 3, 1, 73, 82, 7, 3, 1, 246, 74, 82, 7, 3, 1, + 245, 67, 82, 7, 3, 1, 243, 225, 82, 7, 3, 1, 72, 82, 7, 3, 1, 237, 126, + 82, 7, 3, 1, 237, 17, 82, 7, 3, 1, 153, 82, 7, 3, 1, 189, 82, 7, 3, 1, + 207, 82, 7, 3, 1, 74, 82, 7, 3, 1, 230, 59, 82, 7, 3, 1, 228, 163, 82, 7, + 3, 1, 152, 82, 7, 3, 1, 198, 82, 7, 3, 1, 222, 201, 82, 7, 3, 1, 68, 82, + 7, 3, 1, 216, 216, 82, 7, 3, 1, 219, 40, 82, 7, 3, 1, 218, 151, 82, 7, 3, + 1, 218, 90, 82, 7, 3, 1, 217, 157, 34, 7, 6, 1, 60, 34, 7, 6, 1, 253, + 204, 34, 7, 6, 1, 251, 202, 34, 7, 6, 1, 250, 46, 34, 7, 6, 1, 73, 34, 7, + 6, 1, 246, 74, 34, 7, 6, 1, 245, 67, 34, 7, 6, 1, 243, 225, 34, 7, 6, 1, + 72, 34, 7, 6, 1, 237, 126, 34, 7, 6, 1, 237, 17, 34, 7, 6, 1, 153, 34, 7, + 6, 1, 189, 34, 7, 6, 1, 207, 34, 7, 6, 1, 74, 34, 7, 6, 1, 230, 59, 34, + 7, 6, 1, 228, 163, 34, 7, 6, 1, 152, 34, 7, 6, 1, 198, 34, 7, 6, 1, 222, + 201, 34, 7, 6, 1, 68, 34, 7, 6, 1, 216, 216, 34, 7, 6, 1, 219, 40, 34, 7, + 6, 1, 218, 151, 34, 7, 6, 1, 218, 90, 34, 7, 6, 1, 217, 157, 34, 7, 3, 1, + 60, 34, 7, 3, 1, 253, 204, 34, 7, 3, 1, 251, 202, 34, 7, 3, 1, 250, 46, + 34, 7, 3, 1, 73, 34, 7, 3, 1, 246, 74, 34, 7, 3, 1, 245, 67, 34, 7, 3, 1, + 243, 225, 34, 7, 3, 1, 72, 34, 7, 3, 1, 237, 126, 34, 7, 3, 1, 237, 17, + 34, 7, 3, 1, 153, 34, 7, 3, 1, 189, 34, 7, 3, 1, 207, 34, 7, 3, 1, 74, + 34, 7, 3, 1, 230, 59, 34, 7, 3, 1, 228, 163, 34, 7, 3, 1, 152, 34, 7, 3, + 1, 198, 34, 7, 3, 1, 222, 201, 34, 7, 3, 1, 68, 34, 7, 3, 1, 216, 216, + 34, 7, 3, 1, 219, 40, 34, 7, 3, 1, 218, 151, 34, 7, 3, 1, 218, 90, 34, 7, + 3, 1, 217, 157, 34, 20, 217, 84, 232, 136, 34, 54, 246, 211, 232, 136, + 34, 54, 220, 221, 232, 136, 34, 54, 221, 247, 232, 136, 34, 54, 245, 111, + 232, 136, 34, 54, 245, 200, 232, 136, 34, 54, 224, 77, 232, 136, 34, 54, + 225, 41, 232, 136, 34, 54, 246, 233, 232, 136, 34, 54, 232, 29, 232, 136, + 34, 54, 220, 219, 51, 34, 20, 107, 51, 34, 20, 103, 51, 34, 20, 160, 51, + 34, 20, 154, 51, 34, 20, 174, 51, 34, 20, 182, 51, 34, 20, 191, 51, 34, + 20, 185, 51, 34, 20, 190, 51, 34, 54, 222, 65, 232, 136, 34, 20, 217, 84, + 86, 89, 170, 242, 241, 86, 89, 106, 242, 241, 86, 89, 170, 219, 152, 86, + 89, 106, 219, 152, 86, 89, 170, 221, 78, 249, 147, 242, 241, 86, 89, 106, + 221, 78, 249, 147, 242, 241, 86, 89, 170, 221, 78, 249, 147, 219, 152, + 86, 89, 106, 221, 78, 249, 147, 219, 152, 86, 89, 170, 228, 92, 249, 147, + 242, 241, 86, 89, 106, 228, 92, 249, 147, 242, 241, 86, 89, 170, 228, 92, + 249, 147, 219, 152, 86, 89, 106, 228, 92, 249, 147, 219, 152, 86, 89, + 170, 113, 25, 227, 109, 86, 89, 113, 170, 25, 45, 243, 149, 86, 89, 113, + 106, 25, 45, 235, 58, 86, 89, 106, 113, 25, 227, 109, 86, 89, 170, 113, + 25, 235, 115, 86, 89, 113, 170, 25, 42, 243, 149, 86, 89, 113, 106, 25, + 42, 235, 58, 86, 89, 106, 113, 25, 235, 115, 86, 89, 170, 108, 25, 227, + 109, 86, 89, 108, 170, 25, 45, 243, 149, 86, 89, 108, 106, 25, 45, 235, + 58, 86, 89, 106, 108, 25, 227, 109, 86, 89, 170, 108, 25, 235, 115, 86, + 89, 108, 170, 25, 42, 243, 149, 86, 89, 108, 106, 25, 42, 235, 58, 86, + 89, 106, 108, 25, 235, 115, 86, 89, 170, 69, 25, 227, 109, 86, 89, 69, + 170, 25, 45, 243, 149, 86, 89, 108, 106, 25, 45, 113, 235, 58, 86, 89, + 113, 106, 25, 45, 108, 235, 58, 86, 89, 69, 106, 25, 45, 235, 58, 86, 89, + 113, 170, 25, 45, 108, 243, 149, 86, 89, 108, 170, 25, 45, 113, 243, 149, + 86, 89, 106, 69, 25, 227, 109, 86, 89, 170, 69, 25, 235, 115, 86, 89, 69, + 170, 25, 42, 243, 149, 86, 89, 108, 106, 25, 42, 113, 235, 58, 86, 89, + 113, 106, 25, 42, 108, 235, 58, 86, 89, 69, 106, 25, 42, 235, 58, 86, 89, + 113, 170, 25, 42, 108, 243, 149, 86, 89, 108, 170, 25, 42, 113, 243, 149, + 86, 89, 106, 69, 25, 235, 115, 86, 89, 170, 113, 25, 242, 241, 86, 89, + 42, 106, 25, 45, 113, 235, 58, 86, 89, 45, 106, 25, 42, 113, 235, 58, 86, + 89, 113, 170, 25, 186, 243, 149, 86, 89, 113, 106, 25, 186, 235, 58, 86, + 89, 45, 170, 25, 42, 113, 243, 149, 86, 89, 42, 170, 25, 45, 113, 243, + 149, 86, 89, 106, 113, 25, 242, 241, 86, 89, 170, 108, 25, 242, 241, 86, + 89, 42, 106, 25, 45, 108, 235, 58, 86, 89, 45, 106, 25, 42, 108, 235, 58, + 86, 89, 108, 170, 25, 186, 243, 149, 86, 89, 108, 106, 25, 186, 235, 58, + 86, 89, 45, 170, 25, 42, 108, 243, 149, 86, 89, 42, 170, 25, 45, 108, + 243, 149, 86, 89, 106, 108, 25, 242, 241, 86, 89, 170, 69, 25, 242, 241, + 86, 89, 42, 106, 25, 45, 69, 235, 58, 86, 89, 45, 106, 25, 42, 69, 235, + 58, 86, 89, 69, 170, 25, 186, 243, 149, 86, 89, 108, 106, 25, 113, 186, + 235, 58, 86, 89, 113, 106, 25, 108, 186, 235, 58, 86, 89, 69, 106, 25, + 186, 235, 58, 86, 89, 42, 108, 106, 25, 45, 113, 235, 58, 86, 89, 45, + 108, 106, 25, 42, 113, 235, 58, 86, 89, 42, 113, 106, 25, 45, 108, 235, + 58, 86, 89, 45, 113, 106, 25, 42, 108, 235, 58, 86, 89, 113, 170, 25, + 108, 186, 243, 149, 86, 89, 108, 170, 25, 113, 186, 243, 149, 86, 89, 45, + 170, 25, 42, 69, 243, 149, 86, 89, 42, 170, 25, 45, 69, 243, 149, 86, 89, + 106, 69, 25, 242, 241, 86, 89, 170, 51, 249, 147, 242, 241, 86, 89, 106, + 51, 249, 147, 242, 241, 86, 89, 170, 51, 249, 147, 219, 152, 86, 89, 106, + 51, 249, 147, 219, 152, 86, 89, 51, 242, 241, 86, 89, 51, 219, 152, 86, + 89, 113, 224, 109, 25, 45, 247, 138, 86, 89, 113, 51, 25, 45, 224, 108, + 86, 89, 51, 113, 25, 227, 109, 86, 89, 113, 224, 109, 25, 42, 247, 138, + 86, 89, 113, 51, 25, 42, 224, 108, 86, 89, 51, 113, 25, 235, 115, 86, 89, + 108, 224, 109, 25, 45, 247, 138, 86, 89, 108, 51, 25, 45, 224, 108, 86, + 89, 51, 108, 25, 227, 109, 86, 89, 108, 224, 109, 25, 42, 247, 138, 86, + 89, 108, 51, 25, 42, 224, 108, 86, 89, 51, 108, 25, 235, 115, 86, 89, 69, + 224, 109, 25, 45, 247, 138, 86, 89, 69, 51, 25, 45, 224, 108, 86, 89, 51, + 69, 25, 227, 109, 86, 89, 69, 224, 109, 25, 42, 247, 138, 86, 89, 69, 51, + 25, 42, 224, 108, 86, 89, 51, 69, 25, 235, 115, 86, 89, 113, 224, 109, + 25, 186, 247, 138, 86, 89, 113, 51, 25, 186, 224, 108, 86, 89, 51, 113, + 25, 242, 241, 86, 89, 108, 224, 109, 25, 186, 247, 138, 86, 89, 108, 51, + 25, 186, 224, 108, 86, 89, 51, 108, 25, 242, 241, 86, 89, 69, 224, 109, + 25, 186, 247, 138, 86, 89, 69, 51, 25, 186, 224, 108, 86, 89, 51, 69, 25, + 242, 241, 86, 89, 170, 254, 52, 113, 25, 227, 109, 86, 89, 170, 254, 52, + 113, 25, 235, 115, 86, 89, 170, 254, 52, 108, 25, 235, 115, 86, 89, 170, + 254, 52, 108, 25, 227, 109, 86, 89, 170, 249, 11, 220, 60, 45, 199, 234, + 237, 235, 115, 86, 89, 170, 249, 11, 220, 60, 42, 199, 234, 237, 227, + 109, 86, 89, 170, 249, 11, 250, 100, 86, 89, 170, 235, 115, 86, 89, 170, + 220, 63, 86, 89, 170, 227, 109, 86, 89, 170, 247, 132, 86, 89, 106, 235, + 115, 86, 89, 106, 220, 63, 86, 89, 106, 227, 109, 86, 89, 106, 247, 132, + 86, 89, 170, 42, 25, 106, 227, 109, 86, 89, 170, 108, 25, 106, 247, 132, + 86, 89, 106, 42, 25, 170, 227, 109, 86, 89, 106, 108, 25, 170, 247, 132, + 220, 60, 144, 252, 45, 234, 237, 131, 246, 232, 252, 45, 234, 237, 131, + 228, 90, 252, 45, 234, 237, 148, 246, 230, 252, 45, 234, 237, 144, 252, + 45, 234, 237, 245, 170, 246, 230, 252, 45, 234, 237, 148, 228, 88, 252, + 45, 234, 237, 225, 43, 246, 230, 252, 45, 245, 90, 252, 45, 42, 225, 43, + 246, 230, 252, 45, 42, 148, 228, 88, 252, 45, 42, 245, 170, 246, 230, + 252, 45, 42, 144, 252, 45, 42, 148, 246, 230, 252, 45, 42, 131, 228, 90, + 252, 45, 42, 131, 246, 232, 252, 45, 45, 144, 252, 45, 170, 225, 15, 234, + 18, 225, 15, 249, 152, 225, 15, 220, 60, 131, 246, 232, 252, 45, 45, 131, + 246, 232, 252, 45, 228, 94, 234, 237, 235, 115, 228, 94, 234, 237, 227, + 109, 228, 94, 220, 60, 235, 115, 228, 94, 220, 60, 42, 25, 234, 237, 42, + 25, 234, 237, 227, 109, 228, 94, 220, 60, 42, 25, 234, 237, 227, 109, + 228, 94, 220, 60, 42, 25, 220, 60, 45, 25, 234, 237, 235, 115, 228, 94, + 220, 60, 42, 25, 220, 60, 45, 25, 234, 237, 227, 109, 228, 94, 220, 60, + 227, 109, 228, 94, 220, 60, 45, 25, 234, 237, 235, 115, 228, 94, 220, 60, + 45, 25, 234, 237, 42, 25, 234, 237, 227, 109, 84, 223, 227, 67, 223, 227, + 67, 40, 2, 227, 55, 250, 122, 67, 40, 250, 141, 84, 3, 223, 227, 40, 2, + 186, 245, 187, 40, 2, 69, 245, 187, 40, 2, 230, 95, 250, 96, 245, 187, + 40, 2, 220, 60, 42, 199, 234, 237, 45, 245, 187, 40, 2, 220, 60, 45, 199, + 234, 237, 42, 245, 187, 40, 2, 249, 11, 250, 96, 245, 187, 84, 3, 223, + 227, 67, 3, 223, 227, 84, 227, 208, 67, 227, 208, 84, 69, 227, 208, 67, + 69, 227, 208, 84, 229, 232, 67, 229, 232, 84, 220, 62, 221, 90, 67, 220, + 62, 221, 90, 84, 220, 62, 3, 221, 90, 67, 220, 62, 3, 221, 90, 84, 227, + 106, 221, 90, 67, 227, 106, 221, 90, 84, 227, 106, 3, 221, 90, 67, 227, + 106, 3, 221, 90, 84, 227, 106, 229, 29, 67, 227, 106, 229, 29, 84, 247, + 131, 221, 90, 67, 247, 131, 221, 90, 84, 247, 131, 3, 221, 90, 67, 247, + 131, 3, 221, 90, 84, 235, 112, 221, 90, 67, 235, 112, 221, 90, 84, 235, + 112, 3, 221, 90, 67, 235, 112, 3, 221, 90, 84, 235, 112, 229, 29, 67, + 235, 112, 229, 29, 84, 249, 4, 67, 249, 4, 67, 249, 5, 250, 141, 84, 3, + 249, 4, 245, 175, 234, 234, 67, 250, 221, 247, 143, 250, 221, 250, 222, + 2, 69, 245, 187, 251, 239, 84, 250, 221, 250, 222, 2, 42, 144, 252, 53, + 250, 222, 2, 45, 144, 252, 53, 250, 222, 2, 234, 237, 144, 252, 53, 250, + 222, 2, 220, 60, 144, 252, 53, 250, 222, 2, 220, 60, 45, 228, 94, 252, + 53, 250, 222, 2, 254, 158, 251, 222, 220, 60, 42, 228, 94, 252, 53, 42, + 144, 84, 250, 221, 45, 144, 84, 250, 221, 237, 171, 251, 241, 237, 171, + 67, 250, 221, 220, 60, 144, 237, 171, 67, 250, 221, 234, 237, 144, 237, + 171, 67, 250, 221, 220, 60, 42, 228, 94, 250, 219, 254, 51, 220, 60, 45, + 228, 94, 250, 219, 254, 51, 234, 237, 45, 228, 94, 250, 219, 254, 51, + 234, 237, 42, 228, 94, 250, 219, 254, 51, 220, 60, 144, 250, 221, 234, + 237, 144, 250, 221, 84, 234, 237, 45, 221, 90, 84, 234, 237, 42, 221, 90, + 84, 220, 60, 42, 221, 90, 84, 220, 60, 45, 221, 90, 67, 251, 241, 40, 2, + 42, 144, 252, 53, 40, 2, 45, 144, 252, 53, 40, 2, 220, 60, 42, 249, 11, + 144, 252, 53, 40, 2, 234, 237, 45, 249, 11, 144, 252, 53, 67, 40, 2, 69, + 252, 63, 235, 43, 67, 220, 62, 221, 91, 2, 248, 145, 220, 62, 221, 91, 2, + 42, 144, 252, 53, 220, 62, 221, 91, 2, 45, 144, 252, 53, 235, 146, 250, + 221, 67, 40, 2, 220, 60, 42, 228, 93, 67, 40, 2, 234, 237, 42, 228, 93, + 67, 40, 2, 234, 237, 45, 228, 93, 67, 40, 2, 220, 60, 45, 228, 93, 67, + 250, 222, 2, 220, 60, 42, 228, 93, 67, 250, 222, 2, 234, 237, 42, 228, + 93, 67, 250, 222, 2, 234, 237, 45, 228, 93, 67, 250, 222, 2, 220, 60, 45, + 228, 93, 220, 60, 42, 221, 90, 220, 60, 45, 221, 90, 234, 237, 42, 221, + 90, 67, 234, 18, 223, 227, 84, 234, 18, 223, 227, 67, 234, 18, 3, 223, + 227, 84, 234, 18, 3, 223, 227, 234, 237, 45, 221, 90, 84, 223, 69, 2, + 227, 220, 250, 189, 220, 91, 224, 28, 250, 171, 84, 223, 156, 67, 223, + 156, 235, 56, 221, 220, 223, 68, 254, 10, 231, 201, 249, 47, 231, 201, + 250, 149, 230, 109, 84, 222, 71, 67, 222, 71, 252, 213, 252, 21, 252, + 213, 86, 2, 251, 44, 252, 213, 86, 2, 218, 151, 226, 149, 220, 92, 2, + 227, 243, 247, 117, 242, 187, 252, 98, 67, 224, 196, 229, 102, 84, 224, + 196, 229, 102, 225, 11, 210, 227, 59, 245, 148, 243, 154, 251, 241, 84, + 42, 229, 28, 237, 213, 84, 45, 229, 28, 237, 213, 67, 42, 229, 28, 237, + 213, 67, 108, 229, 28, 237, 213, 67, 45, 229, 28, 237, 213, 67, 113, 229, + 28, 237, 213, 224, 60, 25, 250, 99, 251, 120, 55, 227, 250, 55, 252, 69, + 55, 251, 164, 254, 115, 230, 96, 250, 100, 251, 32, 227, 149, 250, 101, + 117, 234, 243, 250, 101, 117, 237, 105, 223, 157, 25, 250, 104, 245, 241, + 100, 254, 238, 225, 13, 243, 193, 25, 224, 138, 229, 197, 100, 217, 241, + 218, 45, 221, 82, 35, 243, 151, 221, 82, 35, 235, 165, 221, 82, 35, 245, + 179, 221, 82, 35, 221, 221, 221, 82, 35, 218, 194, 221, 82, 35, 218, 240, + 221, 82, 35, 233, 107, 221, 82, 35, 247, 8, 218, 211, 117, 249, 30, 67, + 245, 94, 246, 3, 67, 224, 38, 246, 3, 84, 224, 38, 246, 3, 67, 223, 69, + 2, 227, 220, 245, 178, 228, 90, 233, 117, 235, 142, 228, 90, 233, 117, + 233, 249, 245, 217, 55, 247, 8, 234, 90, 55, 237, 31, 226, 124, 220, 45, + 232, 129, 229, 41, 254, 39, 222, 104, 244, 182, 251, 150, 235, 90, 219, + 80, 235, 65, 226, 102, 226, 163, 251, 140, 254, 68, 229, 66, 67, 251, 37, + 236, 102, 67, 251, 37, 228, 83, 67, 251, 37, 227, 65, 67, 251, 37, 252, + 62, 67, 251, 37, 236, 59, 67, 251, 37, 229, 207, 84, 251, 37, 236, 102, + 84, 251, 37, 228, 83, 84, 251, 37, 227, 65, 84, 251, 37, 252, 62, 84, + 251, 37, 236, 59, 84, 251, 37, 229, 207, 84, 223, 252, 223, 80, 67, 243, + 154, 223, 80, 67, 249, 5, 223, 80, 84, 250, 188, 223, 80, 67, 223, 252, + 223, 80, 84, 243, 154, 223, 80, 84, 249, 5, 223, 80, 67, 250, 188, 223, + 80, 242, 187, 223, 231, 228, 90, 231, 180, 246, 232, 231, 180, 252, 142, + 246, 232, 231, 177, 252, 142, 224, 76, 231, 177, 233, 59, 245, 157, 55, + 233, 59, 232, 205, 55, 233, 59, 225, 1, 55, 218, 217, 166, 250, 100, 247, + 5, 166, 250, 100, 220, 70, 227, 204, 100, 227, 204, 16, 35, 220, 197, + 229, 50, 227, 204, 16, 35, 220, 196, 229, 50, 227, 204, 16, 35, 220, 195, + 229, 50, 227, 204, 16, 35, 220, 194, 229, 50, 227, 204, 16, 35, 220, 193, + 229, 50, 227, 204, 16, 35, 220, 192, 229, 50, 227, 204, 16, 35, 220, 191, + 229, 50, 227, 204, 16, 35, 244, 180, 234, 50, 84, 220, 70, 227, 204, 100, + 227, 205, 229, 245, 100, 229, 222, 229, 245, 100, 229, 162, 229, 245, 55, + 218, 209, 100, 248, 254, 246, 2, 248, 254, 246, 1, 248, 254, 246, 0, 248, + 254, 245, 255, 248, 254, 245, 254, 248, 254, 245, 253, 67, 250, 222, 2, + 61, 227, 109, 67, 250, 222, 2, 124, 248, 143, 84, 250, 222, 2, 67, 61, + 227, 109, 84, 250, 222, 2, 124, 67, 248, 143, 233, 125, 35, 218, 45, 233, + 125, 35, 217, 240, 248, 237, 35, 244, 31, 218, 45, 248, 237, 35, 235, 85, + 217, 240, 248, 237, 35, 235, 85, 218, 45, 248, 237, 35, 244, 31, 217, + 240, 67, 245, 163, 84, 245, 163, 243, 193, 25, 229, 104, 254, 128, 250, + 98, 223, 24, 223, 164, 117, 254, 218, 226, 113, 254, 167, 245, 144, 244, + 189, 223, 164, 117, 243, 133, 253, 238, 100, 245, 153, 230, 80, 67, 223, + 156, 148, 235, 38, 250, 131, 227, 109, 148, 235, 38, 250, 131, 235, 115, + 218, 250, 55, 116, 219, 66, 55, 247, 135, 245, 217, 55, 247, 135, 234, + 90, 55, 237, 179, 245, 217, 25, 234, 90, 55, 234, 90, 25, 245, 217, 55, + 234, 90, 2, 214, 55, 234, 90, 2, 214, 25, 234, 90, 25, 245, 217, 55, 69, + 234, 90, 2, 214, 55, 186, 234, 90, 2, 214, 55, 234, 18, 67, 250, 221, + 234, 18, 84, 250, 221, 234, 18, 3, 67, 250, 221, 234, 62, 100, 248, 186, + 100, 220, 69, 229, 221, 100, 250, 178, 245, 86, 220, 42, 232, 124, 251, + 72, 230, 25, 237, 37, 219, 98, 251, 18, 84, 233, 118, 235, 53, 225, 34, + 225, 64, 228, 75, 225, 48, 224, 24, 252, 215, 252, 188, 204, 236, 154, + 67, 247, 122, 234, 86, 67, 247, 122, 236, 102, 84, 247, 122, 234, 86, 84, + 247, 122, 236, 102, 224, 29, 218, 189, 224, 31, 223, 69, 252, 125, 250, + 189, 227, 242, 84, 224, 28, 221, 222, 250, 190, 25, 227, 242, 215, 67, + 224, 196, 229, 102, 215, 84, 224, 196, 229, 102, 67, 249, 5, 237, 224, + 223, 227, 250, 95, 235, 149, 248, 206, 251, 137, 229, 104, 251, 138, 224, + 51, 243, 141, 2, 67, 250, 100, 34, 250, 95, 235, 149, 251, 65, 231, 205, + 246, 174, 254, 144, 230, 135, 42, 218, 230, 221, 106, 84, 220, 204, 42, + 218, 230, 221, 106, 67, 220, 204, 42, 218, 230, 221, 106, 84, 42, 235, + 150, 233, 248, 67, 42, 235, 150, 233, 248, 247, 120, 224, 46, 55, 106, + 67, 247, 131, 221, 90, 42, 250, 197, 246, 174, 204, 226, 149, 245, 247, + 249, 11, 237, 224, 67, 250, 222, 237, 224, 84, 223, 227, 84, 221, 63, + 227, 167, 42, 246, 173, 227, 167, 42, 246, 172, 106, 250, 222, 2, 214, + 25, 124, 188, 50, 84, 250, 101, 230, 139, 224, 218, 224, 207, 224, 174, + 250, 245, 251, 125, 243, 93, 224, 83, 244, 190, 218, 189, 242, 171, 244, + 190, 2, 243, 188, 234, 79, 16, 35, 235, 57, 233, 107, 220, 92, 230, 139, + 244, 24, 245, 117, 245, 164, 237, 224, 242, 252, 245, 209, 226, 160, 40, + 245, 116, 250, 122, 224, 63, 242, 66, 224, 65, 229, 158, 2, 252, 215, + 222, 62, 237, 118, 252, 204, 100, 243, 156, 244, 33, 100, 245, 91, 228, + 198, 250, 83, 230, 139, 84, 223, 227, 67, 245, 164, 2, 186, 233, 193, 84, + 223, 120, 220, 60, 252, 49, 226, 103, 84, 226, 103, 234, 237, 252, 49, + 226, 103, 67, 226, 103, 222, 72, 235, 10, 55, 222, 114, 247, 119, 254, + 187, 246, 170, 219, 93, 243, 189, 218, 167, 243, 189, 234, 237, 45, 229, + 181, 229, 181, 220, 60, 45, 229, 181, 67, 232, 59, 84, 232, 59, 251, 45, + 78, 106, 251, 45, 78, 233, 84, 218, 151, 106, 233, 84, 218, 151, 252, + 213, 218, 151, 106, 252, 213, 218, 151, 230, 80, 23, 250, 100, 106, 23, + 250, 100, 230, 119, 251, 85, 250, 100, 106, 230, 119, 251, 85, 250, 100, + 7, 250, 100, 225, 14, 67, 7, 250, 100, 230, 80, 7, 250, 100, 234, 88, + 250, 100, 223, 157, 117, 249, 140, 245, 116, 222, 83, 253, 251, 245, 116, + 252, 214, 253, 251, 106, 245, 116, 252, 214, 253, 251, 245, 116, 250, + 186, 253, 251, 84, 245, 116, 229, 30, 223, 156, 67, 245, 116, 229, 30, + 223, 156, 223, 125, 230, 80, 67, 223, 156, 34, 67, 223, 156, 230, 119, + 251, 85, 84, 223, 156, 84, 251, 85, 67, 223, 156, 230, 80, 84, 223, 156, + 106, 230, 80, 84, 223, 156, 229, 71, 223, 156, 225, 14, 67, 223, 156, + 106, 253, 251, 230, 119, 251, 85, 253, 251, 246, 235, 223, 236, 253, 251, + 246, 235, 229, 30, 84, 223, 156, 246, 235, 229, 30, 229, 71, 223, 156, + 224, 82, 229, 30, 84, 223, 156, 246, 235, 229, 30, 227, 206, 84, 223, + 156, 106, 246, 235, 229, 30, 227, 206, 84, 223, 156, 220, 222, 229, 30, + 84, 223, 156, 224, 78, 229, 30, 253, 251, 222, 83, 253, 251, 230, 119, + 251, 85, 222, 83, 253, 251, 106, 222, 83, 253, 251, 224, 82, 229, 149, + 84, 25, 67, 245, 147, 84, 245, 147, 67, 245, 147, 246, 235, 229, 149, + 230, 80, 84, 245, 147, 34, 230, 119, 251, 85, 246, 235, 229, 30, 223, + 156, 106, 222, 83, 229, 71, 253, 251, 224, 30, 221, 195, 221, 85, 224, + 30, 106, 251, 35, 224, 30, 223, 251, 106, 223, 251, 252, 214, 253, 251, + 246, 235, 222, 83, 228, 221, 253, 251, 106, 246, 235, 222, 83, 228, 221, + 253, 251, 225, 14, 67, 250, 221, 234, 237, 45, 247, 118, 67, 223, 227, + 220, 60, 45, 247, 118, 67, 223, 227, 234, 237, 45, 225, 14, 67, 223, 227, + 220, 60, 45, 225, 14, 67, 223, 227, 84, 249, 5, 233, 155, 67, 218, 151, + 106, 246, 95, 164, 100, 170, 69, 135, 234, 18, 69, 135, 106, 69, 135, + 106, 224, 109, 215, 250, 169, 228, 69, 164, 230, 98, 106, 224, 109, 250, + 169, 228, 69, 164, 230, 98, 106, 51, 215, 250, 169, 228, 69, 164, 230, + 98, 106, 51, 250, 169, 228, 69, 164, 230, 98, 250, 73, 223, 147, 229, + 241, 5, 230, 98, 106, 246, 95, 164, 230, 98, 106, 243, 154, 246, 95, 164, + 230, 98, 106, 84, 243, 153, 227, 59, 106, 84, 243, 154, 251, 241, 245, + 148, 243, 153, 227, 59, 245, 148, 243, 154, 251, 241, 234, 18, 42, 229, + 230, 230, 98, 234, 18, 45, 229, 230, 230, 98, 234, 18, 245, 154, 42, 229, + 230, 230, 98, 234, 18, 245, 154, 45, 229, 230, 230, 98, 234, 18, 235, + 112, 254, 120, 252, 18, 230, 98, 234, 18, 227, 106, 254, 120, 252, 18, + 230, 98, 106, 235, 112, 254, 120, 228, 69, 164, 230, 98, 106, 227, 106, + 254, 120, 228, 69, 164, 230, 98, 106, 235, 112, 254, 120, 252, 18, 230, + 98, 106, 227, 106, 254, 120, 252, 18, 230, 98, 170, 42, 221, 114, 224, + 236, 252, 18, 230, 98, 170, 45, 221, 114, 224, 236, 252, 18, 230, 98, + 234, 18, 42, 250, 79, 252, 18, 230, 98, 234, 18, 45, 250, 79, 252, 18, + 230, 98, 248, 217, 232, 136, 34, 20, 107, 248, 217, 232, 136, 34, 20, + 103, 248, 217, 232, 136, 34, 20, 160, 248, 217, 232, 136, 34, 20, 154, + 248, 217, 232, 136, 34, 20, 174, 248, 217, 232, 136, 34, 20, 182, 248, + 217, 232, 136, 34, 20, 191, 248, 217, 232, 136, 34, 20, 185, 248, 217, + 232, 136, 34, 20, 190, 248, 217, 232, 136, 34, 54, 222, 65, 248, 217, 34, + 33, 20, 107, 248, 217, 34, 33, 20, 103, 248, 217, 34, 33, 20, 160, 248, + 217, 34, 33, 20, 154, 248, 217, 34, 33, 20, 174, 248, 217, 34, 33, 20, + 182, 248, 217, 34, 33, 20, 191, 248, 217, 34, 33, 20, 185, 248, 217, 34, + 33, 20, 190, 248, 217, 34, 33, 54, 222, 65, 248, 217, 232, 136, 34, 33, + 20, 107, 248, 217, 232, 136, 34, 33, 20, 103, 248, 217, 232, 136, 34, 33, + 20, 160, 248, 217, 232, 136, 34, 33, 20, 154, 248, 217, 232, 136, 34, 33, + 20, 174, 248, 217, 232, 136, 34, 33, 20, 182, 248, 217, 232, 136, 34, 33, + 20, 191, 248, 217, 232, 136, 34, 33, 20, 185, 248, 217, 232, 136, 34, 33, + 20, 190, 248, 217, 232, 136, 34, 33, 54, 222, 65, 106, 218, 200, 90, 65, + 106, 224, 6, 247, 5, 65, 106, 90, 65, 106, 231, 187, 247, 5, 65, 247, + 124, 229, 32, 90, 65, 106, 227, 56, 90, 65, 221, 89, 90, 65, 106, 221, + 89, 90, 65, 249, 145, 221, 89, 90, 65, 106, 249, 145, 221, 89, 90, 65, + 84, 90, 65, 221, 228, 221, 118, 90, 254, 20, 221, 228, 252, 27, 90, 254, + 20, 84, 90, 254, 20, 106, 84, 250, 73, 247, 130, 25, 90, 65, 106, 84, + 250, 73, 220, 53, 25, 90, 65, 223, 224, 84, 90, 65, 106, 250, 157, 84, + 90, 65, 227, 105, 67, 90, 65, 235, 111, 67, 90, 65, 252, 232, 225, 14, + 67, 90, 65, 245, 96, 225, 14, 67, 90, 65, 106, 234, 237, 227, 104, 67, + 90, 65, 106, 220, 60, 227, 104, 67, 90, 65, 231, 182, 234, 237, 227, 104, + 67, 90, 65, 231, 182, 220, 60, 227, 104, 67, 90, 65, 34, 106, 67, 90, 65, + 218, 206, 90, 65, 252, 52, 224, 6, 247, 5, 65, 252, 52, 90, 65, 252, 52, + 231, 187, 247, 5, 65, 106, 252, 52, 224, 6, 247, 5, 65, 106, 252, 52, 90, + 65, 106, 252, 52, 231, 187, 247, 5, 65, 222, 85, 90, 65, 106, 222, 84, + 90, 65, 218, 225, 90, 65, 106, 218, 225, 90, 65, 230, 116, 90, 65, 148, + 248, 227, 254, 119, 67, 221, 91, 250, 141, 3, 67, 221, 90, 229, 160, 230, + 119, 223, 92, 230, 119, 223, 57, 42, 226, 234, 252, 226, 249, 67, 45, + 226, 234, 252, 226, 249, 67, 156, 2, 61, 237, 190, 227, 160, 224, 18, + 228, 243, 223, 92, 223, 58, 228, 243, 224, 17, 69, 252, 201, 2, 186, 92, + 171, 248, 187, 67, 249, 5, 2, 251, 83, 248, 145, 25, 2, 248, 145, 246, + 213, 117, 230, 114, 220, 52, 234, 237, 45, 250, 124, 2, 248, 145, 220, + 60, 42, 250, 124, 2, 248, 145, 42, 230, 82, 237, 57, 45, 230, 82, 237, + 57, 245, 90, 230, 82, 237, 57, 235, 146, 108, 222, 143, 235, 146, 113, + 222, 143, 42, 25, 45, 51, 220, 236, 42, 25, 45, 222, 143, 42, 233, 87, + 171, 45, 222, 143, 171, 42, 222, 143, 108, 222, 144, 2, 250, 222, 50, + 234, 235, 248, 192, 251, 213, 186, 227, 16, 67, 250, 156, 249, 4, 67, + 250, 156, 249, 5, 2, 127, 221, 202, 67, 250, 156, 249, 5, 2, 90, 221, + 202, 67, 40, 2, 127, 221, 202, 67, 40, 2, 90, 221, 202, 14, 42, 67, 40, + 115, 14, 45, 67, 40, 115, 14, 42, 254, 120, 115, 14, 45, 254, 120, 115, + 14, 42, 51, 254, 120, 115, 14, 45, 51, 254, 120, 115, 14, 42, 67, 221, + 114, 224, 236, 115, 14, 45, 67, 221, 114, 224, 236, 115, 14, 42, 245, + 154, 229, 229, 14, 45, 245, 154, 229, 229, 220, 53, 228, 92, 65, 247, + 130, 228, 92, 65, 254, 104, 244, 222, 250, 222, 65, 250, 199, 244, 222, + 250, 222, 65, 45, 76, 2, 34, 229, 43, 171, 127, 65, 171, 90, 65, 171, 42, + 45, 65, 171, 127, 51, 65, 171, 90, 51, 65, 171, 42, 45, 51, 65, 171, 127, + 76, 245, 97, 135, 171, 90, 76, 245, 97, 135, 171, 127, 51, 76, 245, 97, + 135, 171, 90, 51, 76, 245, 97, 135, 171, 90, 223, 223, 65, 43, 44, 252, + 47, 43, 44, 248, 142, 43, 44, 248, 14, 43, 44, 248, 141, 43, 44, 247, + 206, 43, 44, 248, 77, 43, 44, 248, 13, 43, 44, 248, 140, 43, 44, 247, + 174, 43, 44, 248, 45, 43, 44, 247, 237, 43, 44, 248, 108, 43, 44, 247, + 205, 43, 44, 248, 76, 43, 44, 248, 12, 43, 44, 248, 139, 43, 44, 247, + 158, 43, 44, 248, 29, 43, 44, 247, 221, 43, 44, 248, 92, 43, 44, 247, + 189, 43, 44, 248, 60, 43, 44, 247, 252, 43, 44, 248, 123, 43, 44, 247, + 173, 43, 44, 248, 44, 43, 44, 247, 236, 43, 44, 248, 107, 43, 44, 247, + 204, 43, 44, 248, 75, 43, 44, 248, 11, 43, 44, 248, 138, 43, 44, 247, + 150, 43, 44, 248, 21, 43, 44, 247, 213, 43, 44, 248, 84, 43, 44, 247, + 181, 43, 44, 248, 52, 43, 44, 247, 244, 43, 44, 248, 115, 43, 44, 247, + 165, 43, 44, 248, 36, 43, 44, 247, 228, 43, 44, 248, 99, 43, 44, 247, + 196, 43, 44, 248, 67, 43, 44, 248, 3, 43, 44, 248, 130, 43, 44, 247, 157, + 43, 44, 248, 28, 43, 44, 247, 220, 43, 44, 248, 91, 43, 44, 247, 188, 43, + 44, 248, 59, 43, 44, 247, 251, 43, 44, 248, 122, 43, 44, 247, 172, 43, + 44, 248, 43, 43, 44, 247, 235, 43, 44, 248, 106, 43, 44, 247, 203, 43, + 44, 248, 74, 43, 44, 248, 10, 43, 44, 248, 137, 43, 44, 247, 146, 43, 44, + 248, 17, 43, 44, 247, 209, 43, 44, 248, 80, 43, 44, 247, 177, 43, 44, + 248, 48, 43, 44, 247, 240, 43, 44, 248, 111, 43, 44, 247, 161, 43, 44, + 248, 32, 43, 44, 247, 224, 43, 44, 248, 95, 43, 44, 247, 192, 43, 44, + 248, 63, 43, 44, 247, 255, 43, 44, 248, 126, 43, 44, 247, 153, 43, 44, + 248, 24, 43, 44, 247, 216, 43, 44, 248, 87, 43, 44, 247, 184, 43, 44, + 248, 55, 43, 44, 247, 247, 43, 44, 248, 118, 43, 44, 247, 168, 43, 44, + 248, 39, 43, 44, 247, 231, 43, 44, 248, 102, 43, 44, 247, 199, 43, 44, + 248, 70, 43, 44, 248, 6, 43, 44, 248, 133, 43, 44, 247, 149, 43, 44, 248, + 20, 43, 44, 247, 212, 43, 44, 248, 83, 43, 44, 247, 180, 43, 44, 248, 51, + 43, 44, 247, 243, 43, 44, 248, 114, 43, 44, 247, 164, 43, 44, 248, 35, + 43, 44, 247, 227, 43, 44, 248, 98, 43, 44, 247, 195, 43, 44, 248, 66, 43, + 44, 248, 2, 43, 44, 248, 129, 43, 44, 247, 156, 43, 44, 248, 27, 43, 44, + 247, 219, 43, 44, 248, 90, 43, 44, 247, 187, 43, 44, 248, 58, 43, 44, + 247, 250, 43, 44, 248, 121, 43, 44, 247, 171, 43, 44, 248, 42, 43, 44, + 247, 234, 43, 44, 248, 105, 43, 44, 247, 202, 43, 44, 248, 73, 43, 44, + 248, 9, 43, 44, 248, 136, 43, 44, 247, 144, 43, 44, 248, 15, 43, 44, 247, + 207, 43, 44, 248, 78, 43, 44, 247, 175, 43, 44, 248, 46, 43, 44, 247, + 238, 43, 44, 248, 109, 43, 44, 247, 159, 43, 44, 248, 30, 43, 44, 247, + 222, 43, 44, 248, 93, 43, 44, 247, 190, 43, 44, 248, 61, 43, 44, 247, + 253, 43, 44, 248, 124, 43, 44, 247, 151, 43, 44, 248, 22, 43, 44, 247, + 214, 43, 44, 248, 85, 43, 44, 247, 182, 43, 44, 248, 53, 43, 44, 247, + 245, 43, 44, 248, 116, 43, 44, 247, 166, 43, 44, 248, 37, 43, 44, 247, + 229, 43, 44, 248, 100, 43, 44, 247, 197, 43, 44, 248, 68, 43, 44, 248, 4, + 43, 44, 248, 131, 43, 44, 247, 147, 43, 44, 248, 18, 43, 44, 247, 210, + 43, 44, 248, 81, 43, 44, 247, 178, 43, 44, 248, 49, 43, 44, 247, 241, 43, + 44, 248, 112, 43, 44, 247, 162, 43, 44, 248, 33, 43, 44, 247, 225, 43, + 44, 248, 96, 43, 44, 247, 193, 43, 44, 248, 64, 43, 44, 248, 0, 43, 44, + 248, 127, 43, 44, 247, 154, 43, 44, 248, 25, 43, 44, 247, 217, 43, 44, + 248, 88, 43, 44, 247, 185, 43, 44, 248, 56, 43, 44, 247, 248, 43, 44, + 248, 119, 43, 44, 247, 169, 43, 44, 248, 40, 43, 44, 247, 232, 43, 44, + 248, 103, 43, 44, 247, 200, 43, 44, 248, 71, 43, 44, 248, 7, 43, 44, 248, + 134, 43, 44, 247, 145, 43, 44, 248, 16, 43, 44, 247, 208, 43, 44, 248, + 79, 43, 44, 247, 176, 43, 44, 248, 47, 43, 44, 247, 239, 43, 44, 248, + 110, 43, 44, 247, 160, 43, 44, 248, 31, 43, 44, 247, 223, 43, 44, 248, + 94, 43, 44, 247, 191, 43, 44, 248, 62, 43, 44, 247, 254, 43, 44, 248, + 125, 43, 44, 247, 152, 43, 44, 248, 23, 43, 44, 247, 215, 43, 44, 248, + 86, 43, 44, 247, 183, 43, 44, 248, 54, 43, 44, 247, 246, 43, 44, 248, + 117, 43, 44, 247, 167, 43, 44, 248, 38, 43, 44, 247, 230, 43, 44, 248, + 101, 43, 44, 247, 198, 43, 44, 248, 69, 43, 44, 248, 5, 43, 44, 248, 132, + 43, 44, 247, 148, 43, 44, 248, 19, 43, 44, 247, 211, 43, 44, 248, 82, 43, + 44, 247, 179, 43, 44, 248, 50, 43, 44, 247, 242, 43, 44, 248, 113, 43, + 44, 247, 163, 43, 44, 248, 34, 43, 44, 247, 226, 43, 44, 248, 97, 43, 44, + 247, 194, 43, 44, 248, 65, 43, 44, 248, 1, 43, 44, 248, 128, 43, 44, 247, + 155, 43, 44, 248, 26, 43, 44, 247, 218, 43, 44, 248, 89, 43, 44, 247, + 186, 43, 44, 248, 57, 43, 44, 247, 249, 43, 44, 248, 120, 43, 44, 247, + 170, 43, 44, 248, 41, 43, 44, 247, 233, 43, 44, 248, 104, 43, 44, 247, + 201, 43, 44, 248, 72, 43, 44, 248, 8, 43, 44, 248, 135, 90, 220, 206, 76, + 2, 69, 92, 90, 220, 206, 76, 2, 51, 69, 92, 127, 51, 76, 2, 69, 92, 90, + 51, 76, 2, 69, 92, 42, 45, 51, 76, 2, 69, 92, 90, 220, 206, 76, 245, 97, + 135, 127, 51, 76, 245, 97, 135, 90, 51, 76, 245, 97, 135, 247, 130, 76, + 2, 186, 92, 220, 53, 76, 2, 186, 92, 220, 53, 221, 78, 65, 247, 130, 221, + 78, 65, 127, 51, 249, 147, 65, 90, 51, 249, 147, 65, 127, 221, 78, 249, + 147, 65, 90, 221, 78, 249, 147, 65, 90, 220, 206, 221, 78, 249, 147, 65, + 90, 76, 2, 247, 143, 223, 146, 220, 53, 76, 199, 135, 247, 130, 76, 199, + 135, 90, 76, 2, 222, 136, 2, 69, 92, 90, 76, 2, 222, 136, 2, 51, 69, 92, + 90, 220, 206, 76, 2, 222, 135, 90, 220, 206, 76, 2, 222, 136, 2, 69, 92, + 90, 220, 206, 76, 2, 222, 136, 2, 51, 69, 92, 127, 254, 22, 90, 254, 22, + 127, 51, 254, 22, 90, 51, 254, 22, 127, 76, 199, 84, 249, 4, 90, 76, 199, + 84, 249, 4, 127, 76, 245, 97, 252, 201, 199, 84, 249, 4, 90, 76, 245, 97, + 252, 201, 199, 84, 249, 4, 231, 187, 218, 217, 25, 224, 6, 247, 5, 65, + 231, 187, 247, 5, 25, 224, 6, 218, 217, 65, 231, 187, 218, 217, 76, 2, + 96, 231, 187, 247, 5, 76, 2, 96, 224, 6, 247, 5, 76, 2, 96, 224, 6, 218, + 217, 76, 2, 96, 231, 187, 218, 217, 76, 25, 231, 187, 247, 5, 65, 231, + 187, 247, 5, 76, 25, 224, 6, 247, 5, 65, 224, 6, 247, 5, 76, 25, 224, 6, + 218, 217, 65, 224, 6, 218, 217, 76, 25, 231, 187, 218, 217, 65, 227, 88, + 249, 11, 250, 95, 245, 247, 249, 10, 245, 247, 249, 11, 250, 95, 227, 88, + 249, 10, 224, 6, 247, 5, 76, 250, 95, 231, 187, 247, 5, 65, 231, 187, + 247, 5, 76, 250, 95, 224, 6, 247, 5, 65, 245, 247, 249, 11, 250, 95, 231, + 187, 247, 5, 65, 227, 88, 249, 11, 250, 95, 224, 6, 247, 5, 65, 231, 187, + 247, 5, 76, 250, 95, 231, 187, 218, 217, 65, 231, 187, 218, 217, 76, 250, + 95, 231, 187, 247, 5, 65, 218, 237, 76, 229, 28, 248, 208, 227, 109, 76, + 229, 28, 90, 222, 15, 250, 72, 220, 52, 76, 229, 28, 90, 222, 15, 250, + 72, 247, 129, 76, 229, 28, 247, 130, 222, 15, 250, 72, 235, 107, 76, 229, + 28, 247, 130, 222, 15, 250, 72, 227, 100, 227, 103, 254, 52, 250, 199, + 65, 235, 110, 254, 52, 254, 104, 65, 221, 120, 254, 52, 254, 104, 65, + 252, 29, 254, 52, 254, 104, 65, 221, 120, 254, 52, 250, 199, 76, 2, 233, + 154, 221, 120, 254, 52, 254, 104, 76, 2, 229, 43, 234, 237, 45, 225, 69, + 250, 199, 65, 234, 237, 42, 225, 69, 254, 104, 65, 254, 104, 250, 197, + 250, 222, 65, 250, 199, 250, 197, 250, 222, 65, 90, 76, 71, 224, 192, + 127, 65, 127, 76, 71, 224, 192, 90, 65, 224, 192, 90, 76, 71, 127, 65, + 90, 76, 2, 88, 56, 127, 76, 2, 88, 56, 90, 76, 221, 225, 218, 151, 42, + 45, 76, 221, 225, 3, 250, 221, 220, 53, 220, 206, 76, 245, 97, 3, 250, + 221, 42, 192, 108, 45, 192, 113, 243, 176, 42, 192, 113, 45, 192, 108, + 243, 176, 108, 192, 45, 113, 192, 42, 243, 176, 108, 192, 42, 113, 192, + 45, 243, 176, 42, 192, 108, 45, 192, 108, 243, 176, 108, 192, 45, 113, + 192, 45, 243, 176, 42, 192, 113, 45, 192, 113, 243, 176, 108, 192, 42, + 113, 192, 42, 243, 176, 127, 243, 177, 2, 192, 108, 199, 135, 90, 243, + 177, 2, 192, 108, 199, 135, 220, 53, 243, 177, 2, 192, 45, 199, 135, 247, + 130, 243, 177, 2, 192, 45, 199, 135, 127, 243, 177, 2, 192, 113, 199, + 135, 90, 243, 177, 2, 192, 113, 199, 135, 220, 53, 243, 177, 2, 192, 42, + 199, 135, 247, 130, 243, 177, 2, 192, 42, 199, 135, 127, 243, 177, 2, + 192, 108, 245, 97, 135, 90, 243, 177, 2, 192, 108, 245, 97, 135, 220, 53, + 243, 177, 2, 192, 45, 245, 97, 135, 247, 130, 243, 177, 2, 192, 45, 245, + 97, 135, 127, 243, 177, 2, 192, 113, 245, 97, 135, 90, 243, 177, 2, 192, + 113, 245, 97, 135, 220, 53, 243, 177, 2, 192, 42, 245, 97, 135, 247, 130, + 243, 177, 2, 192, 42, 245, 97, 135, 127, 243, 177, 2, 192, 108, 71, 127, + 243, 177, 2, 192, 247, 132, 220, 53, 243, 177, 2, 192, 42, 252, 106, 220, + 53, 243, 177, 2, 192, 227, 109, 90, 243, 177, 2, 192, 108, 71, 90, 243, + 177, 2, 192, 247, 132, 247, 130, 243, 177, 2, 192, 42, 252, 106, 247, + 130, 243, 177, 2, 192, 227, 109, 127, 243, 177, 2, 192, 108, 71, 90, 243, + 177, 2, 192, 220, 63, 127, 243, 177, 2, 192, 113, 71, 90, 243, 177, 2, + 192, 247, 132, 90, 243, 177, 2, 192, 108, 71, 127, 243, 177, 2, 192, 220, + 63, 90, 243, 177, 2, 192, 113, 71, 127, 243, 177, 2, 192, 247, 132, 127, + 243, 177, 2, 192, 108, 71, 171, 249, 146, 127, 243, 177, 2, 192, 113, + 252, 118, 171, 249, 146, 90, 243, 177, 2, 192, 108, 71, 171, 249, 146, + 90, 243, 177, 2, 192, 113, 252, 118, 171, 249, 146, 220, 53, 243, 177, 2, + 192, 42, 252, 106, 247, 130, 243, 177, 2, 192, 227, 109, 247, 130, 243, + 177, 2, 192, 42, 252, 106, 220, 53, 243, 177, 2, 192, 227, 109, 45, 51, + 76, 2, 227, 55, 243, 159, 246, 154, 5, 71, 90, 65, 221, 180, 230, 113, + 71, 90, 65, 127, 76, 71, 221, 180, 230, 112, 90, 76, 71, 221, 180, 230, + 112, 90, 76, 71, 254, 151, 114, 101, 235, 87, 71, 127, 65, 127, 76, 221, + 225, 235, 86, 244, 30, 71, 90, 65, 223, 93, 71, 90, 65, 127, 76, 221, + 225, 223, 92, 223, 58, 71, 127, 65, 42, 245, 177, 222, 135, 45, 245, 177, + 222, 135, 108, 245, 177, 222, 135, 113, 245, 177, 222, 135, 221, 78, 69, + 252, 201, 249, 67, 217, 158, 165, 223, 234, 217, 158, 165, 220, 198, 250, + 175, 42, 67, 250, 79, 115, 45, 67, 250, 79, 115, 42, 67, 229, 229, 45, + 67, 229, 229, 217, 158, 165, 42, 237, 237, 115, 217, 158, 165, 45, 237, + 237, 115, 217, 158, 165, 42, 252, 71, 115, 217, 158, 165, 45, 252, 71, + 115, 42, 40, 252, 18, 2, 220, 81, 45, 40, 252, 18, 2, 220, 81, 42, 40, + 252, 18, 2, 221, 203, 237, 224, 221, 120, 250, 123, 45, 40, 252, 18, 2, + 221, 203, 237, 224, 252, 29, 250, 123, 42, 40, 252, 18, 2, 221, 203, 237, + 224, 252, 29, 250, 123, 45, 40, 252, 18, 2, 221, 203, 237, 224, 221, 120, + 250, 123, 42, 254, 120, 252, 18, 2, 248, 145, 45, 254, 120, 252, 18, 2, + 248, 145, 42, 254, 52, 235, 87, 115, 45, 254, 52, 244, 30, 115, 51, 42, + 254, 52, 244, 30, 115, 51, 45, 254, 52, 235, 87, 115, 42, 84, 221, 114, + 224, 236, 115, 45, 84, 221, 114, 224, 236, 115, 247, 143, 245, 214, 69, + 217, 33, 235, 43, 234, 22, 254, 120, 230, 114, 235, 115, 45, 254, 120, + 219, 177, 2, 223, 227, 234, 22, 45, 254, 120, 2, 248, 145, 254, 120, 2, + 226, 235, 237, 190, 254, 248, 254, 119, 223, 245, 254, 120, 230, 114, + 235, 115, 223, 245, 254, 120, 230, 114, 220, 63, 215, 254, 119, 210, 254, + 119, 254, 120, 2, 220, 81, 210, 254, 120, 2, 220, 81, 230, 177, 254, 120, + 230, 114, 220, 63, 230, 177, 254, 120, 230, 114, 247, 132, 234, 22, 254, + 120, 2, 230, 119, 254, 32, 246, 187, 237, 224, 76, 229, 28, 108, 25, 227, + 109, 234, 22, 254, 120, 2, 230, 119, 254, 32, 246, 187, 237, 224, 76, + 229, 28, 108, 25, 235, 115, 234, 22, 254, 120, 2, 230, 119, 254, 32, 246, + 187, 237, 224, 76, 229, 28, 113, 25, 227, 109, 234, 22, 254, 120, 2, 230, + 119, 254, 32, 246, 187, 237, 224, 76, 229, 28, 113, 25, 235, 115, 234, + 22, 254, 120, 2, 230, 119, 254, 32, 246, 187, 237, 224, 76, 229, 28, 45, + 25, 220, 63, 234, 22, 254, 120, 2, 230, 119, 254, 32, 246, 187, 237, 224, + 76, 229, 28, 42, 25, 220, 63, 234, 22, 254, 120, 2, 230, 119, 254, 32, + 246, 187, 237, 224, 76, 229, 28, 45, 25, 247, 132, 234, 22, 254, 120, 2, + 230, 119, 254, 32, 246, 187, 237, 224, 76, 229, 28, 42, 25, 247, 132, + 210, 246, 199, 225, 45, 246, 199, 225, 46, 2, 230, 77, 246, 199, 225, 46, + 2, 3, 250, 222, 50, 246, 199, 225, 46, 2, 45, 76, 50, 246, 199, 225, 46, + 2, 42, 76, 50, 250, 222, 2, 186, 135, 34, 69, 135, 34, 229, 233, 34, 227, + 160, 224, 17, 34, 229, 160, 250, 222, 248, 192, 251, 213, 186, 252, 201, + 25, 221, 120, 144, 248, 192, 251, 213, 69, 135, 250, 222, 2, 223, 60, + 218, 151, 34, 254, 103, 248, 188, 55, 108, 76, 221, 225, 250, 221, 34, + 67, 251, 241, 34, 251, 241, 34, 235, 86, 34, 244, 29, 250, 222, 2, 3, + 250, 222, 199, 222, 23, 227, 109, 250, 222, 2, 124, 186, 223, 108, 199, + 222, 23, 227, 109, 204, 227, 88, 249, 11, 224, 55, 204, 245, 247, 249, + 11, 224, 55, 204, 253, 251, 204, 3, 250, 221, 204, 223, 227, 124, 237, + 56, 223, 225, 221, 91, 2, 61, 50, 221, 91, 2, 220, 81, 226, 235, 237, + 224, 221, 90, 221, 91, 2, 225, 52, 253, 245, 252, 28, 45, 221, 91, 71, + 42, 221, 90, 42, 221, 91, 252, 106, 69, 135, 69, 252, 201, 252, 106, 45, + 221, 90, 252, 23, 2, 42, 144, 252, 53, 252, 23, 2, 45, 144, 252, 53, 84, + 252, 22, 27, 2, 42, 144, 252, 53, 27, 2, 45, 144, 252, 53, 67, 242, 183, + 84, 242, 183, 42, 218, 198, 245, 214, 45, 218, 198, 245, 214, 42, 51, + 218, 198, 245, 214, 45, 51, 218, 198, 245, 214, 237, 218, 237, 207, 221, + 201, 104, 237, 207, 237, 208, 232, 138, 2, 69, 135, 247, 137, 233, 87, + 40, 2, 250, 135, 230, 81, 237, 216, 254, 13, 224, 166, 228, 229, 246, + 154, 5, 25, 224, 57, 229, 233, 246, 154, 5, 25, 224, 57, 229, 234, 2, + 221, 180, 50, 242, 59, 199, 25, 224, 57, 229, 233, 244, 75, 223, 155, + 222, 12, 247, 131, 221, 91, 2, 42, 144, 252, 53, 247, 131, 221, 91, 2, + 45, 144, 252, 53, 84, 249, 5, 2, 113, 65, 84, 234, 234, 67, 250, 222, 2, + 113, 65, 84, 250, 222, 2, 113, 65, 246, 141, 67, 223, 227, 246, 141, 84, + 223, 227, 246, 141, 67, 249, 4, 246, 141, 84, 249, 4, 246, 141, 67, 250, + 221, 246, 141, 84, 250, 221, 227, 15, 227, 160, 224, 18, 230, 112, 224, + 18, 2, 230, 77, 227, 160, 224, 18, 2, 186, 92, 252, 76, 224, 17, 252, 76, + 227, 160, 224, 17, 51, 229, 43, 221, 78, 229, 43, 235, 112, 250, 73, 254, + 120, 115, 227, 106, 250, 73, 254, 120, 115, 221, 171, 233, 152, 233, 33, + 34, 61, 230, 112, 233, 33, 34, 88, 230, 112, 233, 33, 34, 27, 230, 112, + 233, 33, 220, 75, 230, 113, 2, 248, 145, 233, 33, 220, 75, 230, 113, 2, + 229, 43, 233, 33, 40, 237, 175, 230, 112, 233, 33, 40, 220, 75, 230, 112, + 124, 235, 7, 25, 230, 112, 124, 235, 7, 156, 230, 112, 233, 33, 27, 230, + 112, 233, 131, 124, 223, 74, 223, 72, 2, 237, 186, 228, 92, 237, 187, + 230, 112, 245, 181, 229, 225, 237, 186, 237, 187, 2, 51, 92, 237, 187, + 253, 217, 2, 224, 55, 250, 218, 245, 87, 254, 104, 237, 184, 235, 44, + 237, 185, 2, 227, 207, 229, 212, 254, 29, 229, 24, 235, 44, 237, 185, 2, + 225, 69, 229, 212, 254, 29, 229, 24, 235, 44, 237, 185, 212, 237, 219, + 222, 23, 229, 24, 237, 187, 254, 29, 112, 229, 32, 230, 112, 228, 86, + 237, 187, 230, 112, 237, 187, 2, 127, 76, 2, 96, 237, 187, 2, 27, 55, + 237, 187, 2, 237, 174, 237, 187, 2, 220, 74, 237, 187, 2, 230, 77, 237, + 187, 2, 220, 81, 237, 57, 235, 146, 42, 221, 91, 230, 112, 217, 158, 165, + 226, 109, 250, 159, 217, 158, 165, 226, 109, 229, 69, 217, 158, 165, 226, + 109, 228, 226, 88, 5, 2, 3, 250, 222, 50, 88, 5, 2, 250, 217, 255, 1, 50, + 88, 5, 2, 221, 180, 50, 88, 5, 2, 61, 56, 88, 5, 2, 221, 180, 56, 88, 5, + 2, 223, 94, 103, 88, 5, 2, 84, 221, 90, 233, 155, 5, 2, 250, 169, 50, + 233, 155, 5, 2, 61, 56, 233, 155, 5, 2, 245, 247, 248, 143, 233, 155, 5, + 2, 227, 88, 248, 143, 88, 5, 237, 224, 42, 144, 250, 221, 88, 5, 237, + 224, 45, 144, 250, 221, 219, 164, 156, 250, 101, 228, 229, 233, 84, 5, 2, + 61, 50, 233, 84, 5, 2, 220, 81, 225, 66, 228, 230, 2, 252, 29, 250, 196, + 224, 41, 228, 229, 233, 84, 5, 237, 224, 42, 144, 250, 221, 233, 84, 5, + 237, 224, 45, 144, 250, 221, 34, 233, 84, 5, 2, 250, 217, 255, 0, 233, + 84, 5, 237, 224, 51, 250, 221, 34, 248, 188, 55, 88, 5, 237, 224, 221, + 90, 233, 155, 5, 237, 224, 221, 90, 233, 84, 5, 237, 224, 221, 90, 237, + 181, 228, 229, 227, 101, 237, 181, 228, 229, 217, 158, 165, 227, 191, + 250, 159, 254, 139, 156, 250, 128, 237, 175, 2, 248, 145, 220, 75, 2, + 233, 155, 55, 220, 75, 2, 230, 77, 237, 175, 2, 230, 77, 237, 175, 2, + 235, 7, 254, 126, 220, 75, 2, 235, 7, 230, 105, 220, 75, 71, 237, 174, + 237, 175, 71, 220, 74, 220, 75, 71, 252, 201, 71, 237, 174, 237, 175, 71, + 252, 201, 71, 220, 74, 220, 75, 252, 106, 25, 237, 56, 2, 220, 74, 237, + 175, 252, 106, 25, 237, 56, 2, 237, 174, 250, 197, 220, 75, 2, 225, 51, + 250, 197, 237, 175, 2, 225, 51, 51, 40, 237, 174, 51, 40, 220, 74, 250, + 197, 220, 75, 2, 225, 52, 25, 224, 41, 228, 229, 235, 7, 25, 2, 61, 50, + 235, 7, 156, 2, 61, 50, 51, 235, 7, 254, 126, 51, 235, 7, 230, 105, 124, + 237, 176, 235, 7, 254, 126, 124, 237, 176, 235, 7, 230, 105, 224, 48, + 235, 146, 230, 105, 224, 48, 235, 146, 254, 126, 235, 7, 156, 230, 75, + 235, 7, 254, 126, 235, 7, 25, 2, 233, 193, 223, 146, 235, 7, 156, 2, 233, + 193, 223, 146, 235, 7, 25, 2, 186, 249, 146, 235, 7, 156, 2, 186, 249, + 146, 235, 7, 25, 2, 51, 230, 77, 235, 7, 25, 2, 220, 81, 235, 7, 25, 2, + 51, 220, 81, 3, 219, 161, 2, 220, 81, 235, 7, 156, 2, 51, 230, 77, 235, + 7, 156, 2, 51, 220, 81, 217, 158, 165, 248, 154, 254, 99, 217, 158, 165, + 227, 234, 254, 99, 246, 154, 5, 2, 61, 56, 242, 59, 2, 61, 50, 221, 78, + 186, 252, 201, 2, 51, 69, 92, 221, 78, 186, 252, 201, 2, 221, 78, 69, 92, + 221, 180, 230, 113, 2, 61, 50, 221, 180, 230, 113, 2, 227, 88, 248, 143, + 224, 116, 233, 155, 224, 115, 250, 153, 2, 61, 50, 246, 154, 2, 253, 251, + 254, 151, 114, 199, 2, 250, 217, 255, 0, 254, 72, 114, 156, 114, 101, + 246, 154, 5, 71, 88, 55, 88, 5, 71, 246, 154, 55, 246, 154, 5, 71, 221, + 180, 230, 112, 51, 250, 176, 246, 155, 124, 250, 148, 246, 154, 224, 126, + 148, 250, 148, 246, 154, 224, 126, 246, 154, 5, 2, 124, 188, 71, 25, 124, + 188, 56, 246, 150, 2, 245, 116, 188, 50, 235, 87, 2, 250, 222, 237, 190, + 244, 30, 2, 250, 222, 237, 190, 235, 87, 2, 228, 82, 164, 50, 244, 30, 2, + 228, 82, 164, 50, 235, 87, 156, 224, 57, 114, 101, 244, 30, 156, 224, 57, + 114, 101, 235, 87, 156, 224, 57, 114, 199, 2, 61, 237, 190, 244, 30, 156, + 224, 57, 114, 199, 2, 61, 237, 190, 235, 87, 156, 224, 57, 114, 199, 2, + 61, 50, 244, 30, 156, 224, 57, 114, 199, 2, 61, 50, 235, 87, 156, 224, + 57, 114, 199, 2, 61, 71, 227, 109, 244, 30, 156, 224, 57, 114, 199, 2, + 61, 71, 235, 115, 235, 87, 156, 254, 73, 244, 30, 156, 254, 73, 235, 87, + 25, 224, 107, 212, 114, 101, 244, 30, 25, 224, 107, 212, 114, 101, 235, + 87, 25, 212, 254, 73, 244, 30, 25, 212, 254, 73, 235, 87, 71, 247, 136, + 114, 71, 244, 29, 244, 30, 71, 247, 136, 114, 71, 235, 86, 235, 87, 71, + 224, 116, 156, 246, 155, 244, 30, 71, 224, 116, 156, 246, 155, 235, 87, + 71, 224, 116, 71, 244, 29, 244, 30, 71, 224, 116, 71, 235, 86, 235, 87, + 71, 244, 30, 71, 247, 136, 246, 155, 244, 30, 71, 235, 87, 71, 247, 136, + 246, 155, 235, 87, 71, 224, 57, 114, 71, 244, 30, 71, 224, 57, 246, 155, + 244, 30, 71, 224, 57, 114, 71, 235, 87, 71, 224, 57, 246, 155, 224, 57, + 114, 199, 156, 235, 86, 224, 57, 114, 199, 156, 244, 29, 224, 57, 114, + 199, 156, 235, 87, 2, 61, 237, 190, 224, 57, 114, 199, 156, 244, 30, 2, + 61, 237, 190, 247, 136, 114, 199, 156, 235, 86, 247, 136, 114, 199, 156, + 244, 29, 247, 136, 224, 57, 114, 199, 156, 235, 86, 247, 136, 224, 57, + 114, 199, 156, 244, 29, 224, 116, 156, 235, 86, 224, 116, 156, 244, 29, + 224, 116, 71, 235, 87, 71, 246, 154, 55, 224, 116, 71, 244, 30, 71, 246, + 154, 55, 51, 232, 127, 235, 86, 51, 232, 127, 244, 29, 51, 232, 127, 235, + 87, 2, 220, 81, 244, 30, 230, 75, 235, 86, 244, 30, 252, 106, 235, 86, + 235, 87, 250, 197, 251, 213, 250, 74, 244, 30, 250, 197, 251, 213, 250, + 74, 235, 87, 250, 197, 251, 213, 250, 75, 71, 224, 57, 246, 155, 244, 30, + 250, 197, 251, 213, 250, 75, 71, 224, 57, 246, 155, 224, 42, 222, 27, + 235, 145, 222, 27, 224, 42, 222, 28, 156, 114, 101, 235, 145, 222, 28, + 156, 114, 101, 246, 154, 5, 2, 251, 236, 50, 228, 245, 71, 224, 107, 246, + 154, 55, 223, 85, 71, 224, 107, 246, 154, 55, 228, 245, 71, 224, 107, + 212, 114, 101, 223, 85, 71, 224, 107, 212, 114, 101, 228, 245, 71, 246, + 154, 55, 223, 85, 71, 246, 154, 55, 228, 245, 71, 212, 114, 101, 223, 85, + 71, 212, 114, 101, 228, 245, 71, 254, 151, 114, 101, 223, 85, 71, 254, + 151, 114, 101, 228, 245, 71, 212, 254, 151, 114, 101, 223, 85, 71, 212, + 254, 151, 114, 101, 51, 228, 244, 51, 223, 84, 223, 93, 2, 248, 145, 223, + 58, 2, 248, 145, 223, 93, 2, 88, 5, 56, 223, 58, 2, 88, 5, 56, 223, 93, + 2, 233, 84, 5, 56, 223, 58, 2, 233, 84, 5, 56, 223, 93, 117, 156, 114, + 199, 2, 61, 50, 223, 58, 117, 156, 114, 199, 2, 61, 50, 223, 93, 117, 71, + 246, 154, 55, 223, 58, 117, 71, 246, 154, 55, 223, 93, 117, 71, 221, 180, + 230, 112, 223, 58, 117, 71, 221, 180, 230, 112, 223, 93, 117, 71, 254, + 151, 114, 101, 223, 58, 117, 71, 254, 151, 114, 101, 223, 93, 117, 71, + 212, 114, 101, 223, 58, 117, 71, 212, 114, 101, 40, 42, 230, 119, 86, + 230, 112, 40, 45, 230, 119, 86, 230, 112, 250, 197, 223, 92, 250, 197, + 223, 57, 250, 197, 223, 93, 156, 114, 101, 250, 197, 223, 58, 156, 114, + 101, 223, 93, 71, 223, 57, 223, 58, 71, 223, 92, 223, 93, 71, 223, 92, + 223, 58, 71, 223, 57, 223, 58, 252, 106, 223, 92, 223, 58, 252, 106, 25, + 237, 56, 251, 213, 249, 147, 2, 223, 92, 246, 213, 117, 230, 114, 247, + 129, 229, 63, 2, 222, 81, 221, 119, 221, 102, 237, 174, 245, 125, 231, + 196, 224, 192, 42, 222, 143, 224, 192, 113, 222, 143, 224, 192, 108, 222, + 143, 229, 161, 2, 198, 69, 252, 201, 221, 78, 45, 220, 236, 51, 69, 252, + 201, 42, 220, 236, 69, 252, 201, 51, 42, 220, 236, 51, 69, 252, 201, 51, + 42, 220, 236, 171, 249, 147, 245, 97, 42, 233, 255, 117, 51, 219, 152, + 224, 192, 113, 222, 144, 2, 230, 77, 224, 192, 108, 222, 144, 2, 220, 81, + 224, 192, 108, 222, 144, 71, 224, 192, 113, 222, 143, 51, 113, 222, 143, + 51, 108, 222, 143, 51, 214, 212, 55, 210, 51, 214, 212, 55, 248, 160, + 212, 248, 194, 2, 210, 232, 137, 224, 55, 69, 235, 44, 2, 250, 222, 50, + 69, 235, 44, 2, 250, 222, 56, 113, 222, 144, 2, 250, 222, 56, 229, 234, + 2, 186, 92, 229, 234, 2, 221, 180, 230, 112, 221, 78, 69, 252, 201, 252, + 73, 227, 192, 221, 78, 69, 252, 201, 2, 186, 92, 221, 78, 250, 176, 230, + 112, 221, 78, 232, 127, 235, 86, 221, 78, 232, 127, 244, 29, 247, 136, + 224, 57, 235, 87, 156, 114, 101, 247, 136, 224, 57, 244, 30, 156, 114, + 101, 221, 78, 224, 18, 252, 73, 227, 192, 235, 146, 221, 78, 69, 252, + 201, 230, 112, 51, 224, 18, 230, 112, 67, 69, 135, 233, 33, 67, 69, 135, + 231, 187, 247, 5, 67, 65, 231, 187, 218, 217, 67, 65, 224, 6, 247, 5, 67, + 65, 224, 6, 218, 217, 67, 65, 42, 45, 67, 65, 127, 84, 65, 220, 53, 84, + 65, 247, 130, 84, 65, 231, 187, 247, 5, 84, 65, 231, 187, 218, 217, 84, + 65, 224, 6, 247, 5, 84, 65, 224, 6, 218, 217, 84, 65, 42, 45, 84, 65, + 108, 113, 84, 65, 90, 76, 2, 221, 170, 247, 129, 90, 76, 2, 221, 170, + 220, 52, 127, 76, 2, 221, 170, 247, 129, 127, 76, 2, 221, 170, 220, 52, + 40, 2, 221, 120, 144, 252, 53, 40, 2, 252, 29, 144, 252, 53, 40, 2, 220, + 60, 45, 249, 11, 144, 252, 53, 40, 2, 234, 237, 42, 249, 11, 144, 252, + 53, 249, 5, 2, 42, 144, 252, 53, 249, 5, 2, 45, 144, 252, 53, 249, 5, 2, + 221, 120, 144, 252, 53, 249, 5, 2, 252, 29, 144, 252, 53, 247, 143, 223, + 227, 84, 235, 146, 223, 227, 67, 235, 146, 223, 227, 84, 219, 100, 3, + 223, 227, 67, 219, 100, 3, 223, 227, 84, 229, 175, 67, 229, 175, 67, 243, + 124, 84, 243, 124, 186, 84, 243, 124, 84, 235, 146, 250, 221, 84, 234, + 18, 249, 4, 67, 234, 18, 249, 4, 84, 234, 18, 234, 234, 67, 234, 18, 234, + 234, 84, 3, 249, 4, 84, 3, 234, 234, 67, 3, 234, 234, 84, 186, 246, 209, + 67, 186, 246, 209, 84, 69, 246, 209, 67, 69, 246, 209, 42, 76, 2, 3, 250, + 221, 148, 127, 254, 19, 42, 76, 2, 34, 229, 43, 171, 127, 223, 223, 65, + 127, 220, 206, 76, 2, 69, 92, 127, 220, 206, 76, 2, 51, 69, 92, 127, 220, + 206, 76, 245, 97, 135, 127, 220, 206, 221, 78, 249, 147, 65, 127, 76, 2, + 247, 143, 223, 146, 127, 76, 2, 222, 136, 2, 69, 92, 127, 76, 2, 222, + 136, 2, 51, 69, 92, 127, 220, 206, 76, 2, 222, 135, 127, 220, 206, 76, 2, + 222, 136, 2, 69, 92, 127, 220, 206, 76, 2, 222, 136, 2, 51, 69, 92, 127, + 76, 221, 225, 218, 151, 218, 237, 76, 229, 28, 248, 208, 235, 115, 246, + 154, 5, 71, 127, 65, 227, 160, 221, 180, 230, 113, 71, 127, 65, 127, 76, + 71, 227, 160, 254, 151, 114, 101, 90, 76, 221, 225, 244, 29, 90, 76, 221, + 225, 223, 57, 127, 228, 92, 65, 90, 228, 92, 65, 227, 160, 221, 180, 230, + 113, 71, 90, 65, 90, 76, 71, 227, 160, 254, 151, 114, 101, 221, 180, 230, + 113, 71, 127, 65, 127, 76, 71, 254, 151, 114, 101, 127, 76, 71, 227, 160, + 221, 180, 230, 112, 90, 76, 71, 227, 160, 221, 180, 230, 112, 67, 234, + 18, 223, 156, 84, 3, 223, 156, 67, 3, 223, 156, 84, 227, 106, 229, 175, + 67, 227, 106, 229, 175, 106, 235, 146, 250, 221, 106, 230, 78, 2, 230, + 78, 237, 190, 106, 250, 222, 2, 250, 222, 237, 190, 106, 250, 221, 106, + 34, 226, 149, 125, 6, 1, 253, 205, 125, 6, 1, 251, 244, 125, 6, 1, 219, + 163, 125, 6, 1, 244, 76, 125, 6, 1, 248, 162, 125, 6, 1, 218, 1, 125, 6, + 1, 217, 66, 125, 6, 1, 247, 71, 125, 6, 1, 217, 89, 125, 6, 1, 237, 130, + 125, 6, 1, 66, 237, 130, 125, 6, 1, 72, 125, 6, 1, 248, 180, 125, 6, 1, + 236, 238, 125, 6, 1, 235, 19, 125, 6, 1, 233, 37, 125, 6, 1, 232, 208, + 125, 6, 1, 230, 129, 125, 6, 1, 229, 26, 125, 6, 1, 227, 87, 125, 6, 1, + 224, 47, 125, 6, 1, 220, 226, 125, 6, 1, 220, 98, 125, 6, 1, 245, 99, + 125, 6, 1, 243, 130, 125, 6, 1, 230, 87, 125, 6, 1, 229, 198, 125, 6, 1, + 224, 173, 125, 6, 1, 221, 39, 125, 6, 1, 251, 3, 125, 6, 1, 225, 25, 125, + 6, 1, 218, 7, 125, 6, 1, 218, 9, 125, 6, 1, 218, 34, 125, 6, 1, 223, 243, + 155, 125, 6, 1, 217, 200, 125, 6, 1, 3, 217, 178, 125, 6, 1, 3, 217, 179, + 2, 222, 135, 125, 6, 1, 217, 231, 125, 6, 1, 237, 161, 3, 217, 178, 125, + 6, 1, 252, 76, 217, 178, 125, 6, 1, 237, 161, 252, 76, 217, 178, 125, 6, + 1, 245, 171, 125, 6, 1, 237, 128, 125, 6, 1, 224, 172, 125, 6, 1, 221, + 70, 60, 125, 6, 1, 235, 137, 233, 37, 125, 3, 1, 253, 205, 125, 3, 1, + 251, 244, 125, 3, 1, 219, 163, 125, 3, 1, 244, 76, 125, 3, 1, 248, 162, + 125, 3, 1, 218, 1, 125, 3, 1, 217, 66, 125, 3, 1, 247, 71, 125, 3, 1, + 217, 89, 125, 3, 1, 237, 130, 125, 3, 1, 66, 237, 130, 125, 3, 1, 72, + 125, 3, 1, 248, 180, 125, 3, 1, 236, 238, 125, 3, 1, 235, 19, 125, 3, 1, + 233, 37, 125, 3, 1, 232, 208, 125, 3, 1, 230, 129, 125, 3, 1, 229, 26, + 125, 3, 1, 227, 87, 125, 3, 1, 224, 47, 125, 3, 1, 220, 226, 125, 3, 1, + 220, 98, 125, 3, 1, 245, 99, 125, 3, 1, 243, 130, 125, 3, 1, 230, 87, + 125, 3, 1, 229, 198, 125, 3, 1, 224, 173, 125, 3, 1, 221, 39, 125, 3, 1, + 251, 3, 125, 3, 1, 225, 25, 125, 3, 1, 218, 7, 125, 3, 1, 218, 9, 125, 3, + 1, 218, 34, 125, 3, 1, 223, 243, 155, 125, 3, 1, 217, 200, 125, 3, 1, 3, + 217, 178, 125, 3, 1, 3, 217, 179, 2, 222, 135, 125, 3, 1, 217, 231, 125, + 3, 1, 237, 161, 3, 217, 178, 125, 3, 1, 252, 76, 217, 178, 125, 3, 1, + 237, 161, 252, 76, 217, 178, 125, 3, 1, 245, 171, 125, 3, 1, 237, 128, + 125, 3, 1, 224, 172, 125, 3, 1, 221, 70, 60, 125, 3, 1, 235, 137, 233, + 37, 7, 6, 1, 235, 202, 2, 51, 135, 7, 3, 1, 235, 202, 2, 51, 135, 7, 6, + 1, 235, 202, 2, 233, 193, 221, 179, 7, 6, 1, 230, 60, 2, 92, 7, 6, 1, + 228, 39, 2, 222, 135, 7, 3, 1, 112, 2, 92, 7, 3, 1, 222, 202, 2, 249, 11, + 92, 7, 6, 1, 243, 226, 2, 249, 48, 7, 3, 1, 243, 226, 2, 249, 48, 7, 6, + 1, 237, 18, 2, 249, 48, 7, 3, 1, 237, 18, 2, 249, 48, 7, 6, 1, 217, 158, + 2, 249, 48, 7, 3, 1, 217, 158, 2, 249, 48, 7, 6, 1, 254, 146, 7, 6, 1, + 234, 187, 2, 96, 7, 6, 1, 215, 60, 7, 6, 1, 215, 254, 146, 7, 3, 1, 220, + 11, 2, 45, 96, 7, 6, 1, 219, 41, 2, 96, 7, 3, 1, 219, 41, 2, 96, 7, 3, 1, + 220, 11, 2, 250, 80, 7, 6, 1, 144, 243, 225, 7, 3, 1, 144, 243, 225, 7, + 3, 1, 222, 133, 229, 129, 7, 3, 1, 178, 2, 231, 183, 7, 3, 1, 215, 228, + 39, 2, 222, 135, 7, 3, 1, 142, 2, 109, 227, 94, 237, 190, 7, 1, 3, 6, + 215, 73, 7, 223, 94, 3, 1, 237, 126, 58, 1, 6, 216, 216, 7, 6, 1, 226, + 235, 2, 223, 33, 222, 135, 7, 6, 1, 217, 158, 2, 223, 33, 222, 135, 75, + 6, 1, 254, 163, 75, 3, 1, 254, 163, 75, 6, 1, 219, 92, 75, 3, 1, 219, 92, + 75, 6, 1, 244, 231, 75, 3, 1, 244, 231, 75, 6, 1, 249, 179, 75, 3, 1, + 249, 179, 75, 6, 1, 246, 236, 75, 3, 1, 246, 236, 75, 6, 1, 224, 11, 75, + 3, 1, 224, 11, 75, 6, 1, 217, 99, 75, 3, 1, 217, 99, 75, 6, 1, 243, 171, + 75, 3, 1, 243, 171, 75, 6, 1, 222, 4, 75, 3, 1, 222, 4, 75, 6, 1, 242, + 70, 75, 3, 1, 242, 70, 75, 6, 1, 236, 226, 75, 3, 1, 236, 226, 75, 6, 1, + 235, 135, 75, 3, 1, 235, 135, 75, 6, 1, 233, 196, 75, 3, 1, 233, 196, 75, + 6, 1, 232, 62, 75, 3, 1, 232, 62, 75, 6, 1, 236, 11, 75, 3, 1, 236, 11, + 75, 6, 1, 74, 75, 3, 1, 74, 75, 6, 1, 229, 108, 75, 3, 1, 229, 108, 75, + 6, 1, 227, 75, 75, 3, 1, 227, 75, 75, 6, 1, 224, 118, 75, 3, 1, 224, 118, + 75, 6, 1, 222, 105, 75, 3, 1, 222, 105, 75, 6, 1, 220, 123, 75, 3, 1, + 220, 123, 75, 6, 1, 245, 203, 75, 3, 1, 245, 203, 75, 6, 1, 236, 130, 75, + 3, 1, 236, 130, 75, 6, 1, 228, 212, 75, 3, 1, 228, 212, 75, 6, 1, 230, + 123, 75, 3, 1, 230, 123, 75, 6, 1, 249, 9, 254, 168, 75, 3, 1, 249, 9, + 254, 168, 75, 6, 1, 48, 75, 254, 191, 75, 3, 1, 48, 75, 254, 191, 75, 6, + 1, 250, 93, 246, 236, 75, 3, 1, 250, 93, 246, 236, 75, 6, 1, 249, 9, 236, + 226, 75, 3, 1, 249, 9, 236, 226, 75, 6, 1, 249, 9, 232, 62, 75, 3, 1, + 249, 9, 232, 62, 75, 6, 1, 250, 93, 232, 62, 75, 3, 1, 250, 93, 232, 62, + 75, 6, 1, 48, 75, 230, 123, 75, 3, 1, 48, 75, 230, 123, 75, 6, 1, 226, + 142, 75, 3, 1, 226, 142, 75, 6, 1, 250, 98, 224, 238, 75, 3, 1, 250, 98, + 224, 238, 75, 6, 1, 48, 75, 224, 238, 75, 3, 1, 48, 75, 224, 238, 75, 6, + 1, 48, 75, 246, 133, 75, 3, 1, 48, 75, 246, 133, 75, 6, 1, 254, 178, 236, + 135, 75, 3, 1, 254, 178, 236, 135, 75, 6, 1, 249, 9, 242, 242, 75, 3, 1, + 249, 9, 242, 242, 75, 6, 1, 48, 75, 242, 242, 75, 3, 1, 48, 75, 242, 242, + 75, 6, 1, 48, 75, 155, 75, 3, 1, 48, 75, 155, 75, 6, 1, 235, 201, 155, + 75, 3, 1, 235, 201, 155, 75, 6, 1, 48, 75, 243, 145, 75, 3, 1, 48, 75, + 243, 145, 75, 6, 1, 48, 75, 243, 173, 75, 3, 1, 48, 75, 243, 173, 75, 6, + 1, 48, 75, 244, 226, 75, 3, 1, 48, 75, 244, 226, 75, 6, 1, 48, 75, 248, + 183, 75, 3, 1, 48, 75, 248, 183, 75, 6, 1, 48, 75, 224, 211, 75, 3, 1, + 48, 75, 224, 211, 75, 6, 1, 48, 231, 115, 224, 211, 75, 3, 1, 48, 231, + 115, 224, 211, 75, 6, 1, 48, 231, 115, 232, 92, 75, 3, 1, 48, 231, 115, + 232, 92, 75, 6, 1, 48, 231, 115, 231, 67, 75, 3, 1, 48, 231, 115, 231, + 67, 75, 6, 1, 48, 231, 115, 218, 238, 75, 3, 1, 48, 231, 115, 218, 238, + 75, 16, 236, 243, 75, 16, 233, 197, 227, 75, 75, 16, 229, 109, 227, 75, + 75, 16, 223, 152, 75, 16, 222, 106, 227, 75, 75, 16, 236, 131, 227, 75, + 75, 16, 224, 212, 224, 118, 75, 6, 1, 250, 93, 224, 238, 75, 3, 1, 250, + 93, 224, 238, 75, 6, 1, 250, 93, 244, 226, 75, 3, 1, 250, 93, 244, 226, + 75, 36, 232, 63, 50, 75, 36, 223, 238, 254, 2, 75, 36, 223, 238, 235, 92, + 75, 48, 231, 115, 245, 90, 223, 136, 75, 48, 231, 115, 248, 210, 228, 82, + 78, 75, 48, 231, 115, 237, 210, 228, 82, 78, 75, 48, 231, 115, 219, 154, + 248, 191, 75, 245, 108, 131, 243, 194, 75, 245, 90, 223, 136, 75, 233, + 113, 248, 191, 95, 3, 1, 254, 131, 95, 3, 1, 252, 209, 95, 3, 1, 244, + 230, 95, 3, 1, 248, 153, 95, 3, 1, 246, 197, 95, 3, 1, 219, 85, 95, 3, 1, + 217, 87, 95, 3, 1, 222, 119, 95, 3, 1, 237, 223, 95, 3, 1, 236, 233, 95, + 3, 1, 235, 143, 95, 3, 1, 234, 86, 95, 3, 1, 232, 211, 95, 3, 1, 230, + 138, 95, 3, 1, 229, 243, 95, 3, 1, 217, 76, 95, 3, 1, 227, 249, 95, 3, 1, + 226, 140, 95, 3, 1, 222, 112, 95, 3, 1, 220, 87, 95, 3, 1, 229, 134, 95, + 3, 1, 236, 138, 95, 3, 1, 244, 119, 95, 3, 1, 228, 140, 95, 3, 1, 224, + 209, 95, 3, 1, 251, 22, 95, 3, 1, 251, 154, 95, 3, 1, 237, 91, 95, 3, 1, + 250, 224, 95, 3, 1, 251, 56, 95, 3, 1, 218, 136, 95, 3, 1, 237, 101, 95, + 3, 1, 243, 208, 95, 3, 1, 243, 162, 95, 3, 1, 243, 108, 95, 3, 1, 218, + 227, 95, 3, 1, 243, 182, 95, 3, 1, 243, 2, 221, 197, 1, 184, 221, 197, 1, + 218, 72, 221, 197, 1, 218, 71, 221, 197, 1, 218, 63, 221, 197, 1, 218, + 61, 221, 197, 1, 252, 108, 255, 2, 218, 57, 221, 197, 1, 218, 57, 221, + 197, 1, 218, 69, 221, 197, 1, 218, 66, 221, 197, 1, 218, 68, 221, 197, 1, + 218, 67, 221, 197, 1, 217, 254, 221, 197, 1, 218, 64, 221, 197, 1, 218, + 55, 221, 197, 1, 220, 255, 218, 55, 221, 197, 1, 218, 52, 221, 197, 1, + 218, 59, 221, 197, 1, 252, 108, 255, 2, 218, 59, 221, 197, 1, 220, 255, + 218, 59, 221, 197, 1, 218, 58, 221, 197, 1, 218, 76, 221, 197, 1, 218, + 53, 221, 197, 1, 220, 255, 218, 53, 221, 197, 1, 218, 43, 221, 197, 1, + 220, 255, 218, 43, 221, 197, 1, 217, 250, 221, 197, 1, 218, 27, 221, 197, + 1, 254, 200, 218, 27, 221, 197, 1, 220, 255, 218, 27, 221, 197, 1, 218, + 51, 221, 197, 1, 218, 50, 221, 197, 1, 218, 47, 221, 197, 1, 220, 255, + 218, 60, 221, 197, 1, 220, 255, 218, 45, 221, 197, 1, 218, 44, 221, 197, + 1, 217, 200, 221, 197, 1, 218, 41, 221, 197, 1, 218, 40, 221, 197, 1, + 218, 62, 221, 197, 1, 220, 255, 218, 62, 221, 197, 1, 253, 208, 218, 62, + 221, 197, 1, 218, 39, 221, 197, 1, 218, 37, 221, 197, 1, 218, 38, 221, + 197, 1, 218, 36, 221, 197, 1, 218, 35, 221, 197, 1, 218, 70, 221, 197, 1, + 218, 33, 221, 197, 1, 218, 32, 221, 197, 1, 218, 31, 221, 197, 1, 218, + 30, 221, 197, 1, 218, 28, 221, 197, 1, 222, 98, 218, 28, 221, 197, 1, + 218, 26, 221, 197, 58, 1, 235, 182, 78, 28, 4, 235, 11, 28, 4, 233, 135, + 28, 4, 227, 73, 28, 4, 224, 25, 28, 4, 224, 199, 28, 4, 252, 40, 28, 4, + 221, 139, 28, 4, 250, 181, 28, 4, 231, 202, 28, 4, 231, 55, 28, 4, 244, + 73, 230, 185, 28, 4, 217, 20, 28, 4, 248, 165, 28, 4, 249, 106, 28, 4, + 237, 58, 28, 4, 221, 238, 28, 4, 251, 10, 28, 4, 229, 117, 28, 4, 229, + 36, 28, 4, 244, 130, 28, 4, 244, 126, 28, 4, 244, 127, 28, 4, 244, 128, + 28, 4, 223, 218, 28, 4, 223, 178, 28, 4, 223, 189, 28, 4, 223, 217, 28, + 4, 223, 193, 28, 4, 223, 194, 28, 4, 223, 182, 28, 4, 251, 114, 28, 4, + 251, 101, 28, 4, 251, 103, 28, 4, 251, 113, 28, 4, 251, 111, 28, 4, 251, + 112, 28, 4, 251, 102, 28, 4, 216, 247, 28, 4, 216, 227, 28, 4, 216, 238, + 28, 4, 216, 246, 28, 4, 216, 241, 28, 4, 216, 242, 28, 4, 216, 230, 28, + 4, 251, 110, 28, 4, 251, 104, 28, 4, 251, 106, 28, 4, 251, 109, 28, 4, + 251, 107, 28, 4, 251, 108, 28, 4, 251, 105, 28, 4, 228, 51, 28, 4, 228, + 41, 28, 4, 228, 47, 28, 4, 228, 50, 28, 4, 228, 48, 28, 4, 228, 49, 28, + 4, 228, 46, 28, 4, 235, 212, 28, 4, 235, 204, 28, 4, 235, 207, 28, 4, + 235, 211, 28, 4, 235, 208, 28, 4, 235, 209, 28, 4, 235, 205, 28, 4, 218, + 103, 28, 4, 218, 93, 28, 4, 218, 99, 28, 4, 218, 102, 28, 4, 218, 100, + 28, 4, 218, 101, 28, 4, 218, 98, 28, 4, 243, 236, 28, 4, 243, 227, 28, 4, + 243, 230, 28, 4, 243, 235, 28, 4, 243, 232, 28, 4, 243, 233, 28, 4, 243, + 229, 36, 31, 1, 252, 144, 36, 31, 1, 219, 165, 36, 31, 1, 244, 116, 36, + 31, 1, 249, 92, 36, 31, 1, 217, 72, 36, 31, 1, 217, 92, 36, 31, 1, 175, + 36, 31, 1, 246, 217, 36, 31, 1, 246, 205, 36, 31, 1, 246, 197, 36, 31, 1, + 74, 36, 31, 1, 229, 198, 36, 31, 1, 246, 148, 36, 31, 1, 246, 138, 36, + 31, 1, 222, 87, 36, 31, 1, 155, 36, 31, 1, 221, 50, 36, 31, 1, 251, 46, + 36, 31, 1, 225, 25, 36, 31, 1, 224, 248, 36, 31, 1, 245, 171, 36, 31, 1, + 246, 137, 36, 31, 1, 60, 36, 31, 1, 238, 26, 36, 31, 1, 248, 181, 36, 31, + 1, 233, 123, 220, 102, 36, 31, 1, 218, 36, 36, 31, 1, 217, 200, 36, 31, + 1, 237, 160, 60, 36, 31, 1, 235, 25, 217, 178, 36, 31, 1, 252, 76, 217, + 178, 36, 31, 1, 237, 160, 252, 76, 217, 178, 45, 254, 120, 223, 89, 234, + 63, 45, 254, 120, 247, 143, 223, 89, 234, 63, 42, 223, 89, 115, 45, 223, + 89, 115, 42, 247, 143, 223, 89, 115, 45, 247, 143, 223, 89, 115, 227, + 241, 237, 178, 234, 63, 227, 241, 247, 143, 237, 178, 234, 63, 247, 143, + 221, 103, 234, 63, 42, 221, 103, 115, 45, 221, 103, 115, 227, 241, 223, + 227, 42, 227, 241, 230, 140, 115, 45, 227, 241, 230, 140, 115, 246, 251, + 250, 121, 229, 239, 245, 126, 229, 239, 210, 245, 126, 229, 239, 242, + 118, 247, 143, 230, 180, 247, 130, 254, 127, 220, 53, 254, 127, 247, 143, + 227, 106, 254, 119, 51, 230, 177, 242, 121, 237, 170, 237, 177, 230, 23, + 252, 14, 242, 122, 2, 249, 13, 221, 180, 2, 227, 94, 50, 42, 109, 229, + 231, 115, 45, 109, 229, 231, 115, 221, 180, 2, 61, 50, 221, 180, 2, 61, + 56, 42, 69, 252, 201, 2, 228, 77, 45, 69, 252, 201, 2, 228, 77, 221, 120, + 42, 144, 115, 221, 120, 45, 144, 115, 252, 29, 42, 144, 115, 252, 29, 45, + 144, 115, 42, 224, 136, 105, 115, 45, 224, 136, 105, 115, 42, 51, 229, + 229, 45, 51, 229, 229, 124, 188, 104, 131, 61, 228, 196, 131, 61, 104, + 124, 188, 228, 196, 204, 245, 116, 61, 228, 196, 245, 170, 61, 78, 210, + 228, 82, 78, 69, 221, 179, 227, 94, 229, 31, 218, 174, 225, 55, 233, 193, + 248, 145, 9, 32, 227, 181, 9, 32, 250, 203, 9, 32, 226, 90, 107, 9, 32, + 226, 90, 103, 9, 32, 226, 90, 160, 9, 32, 229, 157, 9, 32, 252, 21, 9, + 32, 222, 146, 9, 32, 236, 61, 107, 9, 32, 236, 61, 103, 9, 32, 248, 189, + 9, 32, 226, 92, 9, 32, 3, 107, 9, 32, 3, 103, 9, 32, 235, 155, 107, 9, + 32, 235, 155, 103, 9, 32, 235, 155, 160, 9, 32, 235, 155, 154, 9, 32, + 224, 35, 9, 32, 221, 229, 9, 32, 224, 33, 107, 9, 32, 224, 33, 103, 9, + 32, 243, 154, 107, 9, 32, 243, 154, 103, 9, 32, 243, 189, 9, 32, 227, + 233, 9, 32, 251, 8, 9, 32, 223, 68, 9, 32, 233, 117, 9, 32, 249, 90, 9, + 32, 233, 110, 9, 32, 250, 213, 9, 32, 218, 241, 107, 9, 32, 218, 241, + 103, 9, 32, 245, 179, 9, 32, 229, 208, 107, 9, 32, 229, 208, 103, 9, 32, + 224, 114, 144, 221, 99, 221, 60, 9, 32, 250, 110, 9, 32, 248, 159, 9, 32, + 237, 121, 9, 32, 252, 36, 117, 250, 192, 9, 32, 246, 81, 9, 32, 223, 240, + 107, 9, 32, 223, 240, 103, 9, 32, 252, 211, 9, 32, 224, 119, 9, 32, 251, + 199, 224, 119, 9, 32, 232, 126, 107, 9, 32, 232, 126, 103, 9, 32, 232, + 126, 160, 9, 32, 232, 126, 154, 9, 32, 233, 243, 9, 32, 224, 240, 9, 32, + 227, 239, 9, 32, 246, 100, 9, 32, 230, 150, 9, 32, 251, 255, 107, 9, 32, + 251, 255, 103, 9, 32, 234, 21, 9, 32, 233, 112, 9, 32, 244, 40, 107, 9, + 32, 244, 40, 103, 9, 32, 244, 40, 160, 9, 32, 221, 196, 9, 32, 250, 191, + 9, 32, 218, 217, 107, 9, 32, 218, 217, 103, 9, 32, 251, 199, 226, 84, 9, + 32, 224, 114, 242, 189, 9, 32, 242, 189, 9, 32, 251, 199, 223, 247, 9, + 32, 251, 199, 224, 235, 9, 32, 245, 133, 9, 32, 251, 199, 251, 127, 9, + 32, 224, 114, 218, 255, 9, 32, 219, 0, 107, 9, 32, 219, 0, 103, 9, 32, + 250, 214, 9, 32, 251, 199, 244, 62, 9, 32, 171, 107, 9, 32, 171, 103, 9, + 32, 251, 199, 235, 2, 9, 32, 251, 199, 244, 213, 9, 32, 233, 109, 107, 9, + 32, 233, 109, 103, 9, 32, 227, 242, 9, 32, 252, 43, 9, 32, 251, 199, 222, + 117, 235, 119, 9, 32, 251, 199, 235, 120, 9, 32, 251, 199, 218, 194, 9, + 32, 251, 199, 245, 142, 9, 32, 247, 3, 107, 9, 32, 247, 3, 103, 9, 32, + 247, 3, 160, 9, 32, 251, 199, 247, 2, 9, 32, 243, 159, 9, 32, 251, 199, + 242, 188, 9, 32, 252, 35, 9, 32, 244, 111, 9, 32, 251, 199, 245, 176, 9, + 32, 251, 199, 252, 67, 9, 32, 251, 199, 226, 151, 9, 32, 224, 114, 218, + 212, 9, 32, 224, 114, 218, 20, 9, 32, 251, 199, 245, 98, 9, 32, 237, 125, + 246, 103, 9, 32, 251, 199, 246, 103, 9, 32, 237, 125, 221, 121, 9, 32, + 251, 199, 221, 121, 9, 32, 237, 125, 247, 123, 9, 32, 251, 199, 247, 123, + 9, 32, 220, 234, 9, 32, 237, 125, 220, 234, 9, 32, 251, 199, 220, 234, + 53, 32, 107, 53, 32, 235, 43, 53, 32, 248, 145, 53, 32, 224, 55, 53, 32, + 226, 89, 53, 32, 96, 53, 32, 103, 53, 32, 235, 64, 53, 32, 234, 86, 53, + 32, 235, 103, 53, 32, 246, 178, 53, 32, 185, 53, 32, 113, 252, 21, 53, + 32, 250, 111, 53, 32, 242, 65, 53, 32, 222, 146, 53, 32, 230, 119, 252, + 21, 53, 32, 236, 60, 53, 32, 229, 10, 53, 32, 218, 169, 53, 32, 223, 235, + 53, 32, 45, 230, 119, 252, 21, 53, 32, 243, 109, 246, 192, 53, 32, 222, + 65, 53, 32, 248, 189, 53, 32, 226, 92, 53, 32, 250, 203, 53, 32, 228, + 231, 53, 32, 254, 208, 53, 32, 233, 105, 53, 32, 246, 192, 53, 32, 247, + 8, 53, 32, 226, 108, 53, 32, 244, 68, 53, 32, 244, 69, 224, 45, 53, 32, + 246, 102, 53, 32, 252, 75, 53, 32, 218, 183, 53, 32, 251, 24, 53, 32, + 227, 66, 53, 32, 237, 220, 53, 32, 224, 43, 53, 32, 235, 154, 53, 32, + 250, 119, 53, 32, 223, 230, 53, 32, 233, 107, 53, 32, 227, 84, 53, 32, + 218, 171, 53, 32, 230, 134, 53, 32, 220, 239, 53, 32, 247, 113, 53, 32, + 224, 192, 221, 229, 53, 32, 247, 143, 250, 203, 53, 32, 171, 223, 122, + 53, 32, 124, 243, 187, 53, 32, 224, 194, 53, 32, 252, 24, 53, 32, 224, + 32, 53, 32, 252, 3, 53, 32, 223, 145, 53, 32, 243, 153, 53, 32, 243, 195, + 53, 32, 248, 148, 53, 32, 243, 189, 53, 32, 252, 14, 53, 32, 227, 233, + 53, 32, 226, 99, 53, 32, 248, 212, 53, 32, 253, 213, 53, 32, 223, 227, + 53, 32, 231, 184, 53, 32, 223, 68, 53, 32, 226, 118, 53, 32, 233, 117, + 53, 32, 221, 98, 53, 32, 235, 178, 53, 32, 223, 136, 53, 32, 249, 90, 53, + 32, 218, 226, 53, 32, 248, 168, 231, 184, 53, 32, 250, 165, 53, 32, 245, + 84, 53, 32, 250, 211, 53, 32, 223, 148, 53, 32, 218, 240, 53, 32, 245, + 179, 53, 32, 250, 210, 53, 32, 245, 235, 53, 32, 51, 218, 151, 53, 32, + 144, 221, 99, 221, 60, 53, 32, 224, 52, 53, 32, 245, 243, 53, 32, 250, + 110, 53, 32, 248, 159, 53, 32, 228, 228, 53, 32, 237, 121, 53, 32, 234, + 3, 53, 32, 221, 178, 53, 32, 223, 31, 53, 32, 235, 59, 53, 32, 220, 33, + 53, 32, 245, 202, 53, 32, 252, 36, 117, 250, 192, 53, 32, 224, 137, 53, + 32, 247, 143, 222, 62, 53, 32, 218, 207, 53, 32, 224, 62, 53, 32, 248, + 202, 53, 32, 246, 81, 53, 32, 223, 249, 53, 32, 65, 53, 32, 223, 138, 53, + 32, 223, 239, 53, 32, 221, 108, 53, 32, 244, 45, 53, 32, 251, 119, 53, + 32, 223, 160, 53, 32, 252, 211, 53, 32, 227, 145, 53, 32, 224, 119, 53, + 32, 237, 117, 53, 32, 232, 125, 53, 32, 224, 240, 53, 32, 245, 228, 53, + 32, 230, 150, 53, 32, 254, 126, 53, 32, 229, 47, 53, 32, 247, 11, 53, 32, + 251, 254, 53, 32, 234, 21, 53, 32, 233, 156, 53, 32, 225, 73, 53, 32, + 254, 23, 53, 32, 233, 112, 53, 32, 221, 124, 53, 32, 230, 111, 53, 32, + 252, 38, 53, 32, 223, 134, 53, 32, 250, 174, 53, 32, 244, 39, 53, 32, + 221, 196, 53, 32, 237, 192, 53, 32, 252, 44, 53, 32, 219, 0, 246, 192, + 53, 32, 250, 191, 53, 32, 218, 216, 53, 32, 226, 84, 53, 32, 242, 189, + 53, 32, 223, 247, 53, 32, 219, 186, 53, 32, 252, 141, 53, 32, 229, 78, + 53, 32, 252, 227, 53, 32, 224, 235, 53, 32, 227, 202, 53, 32, 227, 10, + 53, 32, 245, 133, 53, 32, 252, 37, 53, 32, 251, 127, 53, 32, 252, 58, 53, + 32, 233, 114, 53, 32, 218, 255, 53, 32, 250, 214, 53, 32, 218, 192, 53, + 32, 248, 199, 53, 32, 219, 86, 53, 32, 244, 62, 53, 32, 235, 2, 53, 32, + 244, 213, 53, 32, 233, 108, 53, 32, 224, 54, 53, 32, 224, 192, 222, 134, + 252, 67, 53, 32, 227, 242, 53, 32, 252, 43, 53, 32, 218, 166, 53, 32, + 246, 3, 53, 32, 235, 119, 53, 32, 222, 117, 235, 119, 53, 32, 235, 116, + 53, 32, 224, 8, 53, 32, 235, 120, 53, 32, 218, 194, 53, 32, 245, 142, 53, + 32, 247, 2, 53, 32, 243, 159, 53, 32, 245, 106, 53, 32, 242, 188, 53, 32, + 252, 35, 53, 32, 222, 122, 53, 32, 243, 200, 53, 32, 245, 195, 53, 32, + 226, 172, 218, 192, 53, 32, 251, 121, 53, 32, 244, 111, 53, 32, 245, 176, + 53, 32, 252, 67, 53, 32, 226, 151, 53, 32, 249, 80, 53, 32, 218, 212, 53, + 32, 243, 139, 53, 32, 218, 20, 53, 32, 233, 163, 53, 32, 252, 53, 53, 32, + 246, 202, 53, 32, 245, 98, 53, 32, 221, 76, 53, 32, 247, 115, 53, 32, + 227, 228, 53, 32, 231, 185, 53, 32, 246, 103, 53, 32, 221, 121, 53, 32, + 247, 123, 53, 32, 220, 234, 53, 32, 245, 143, 98, 249, 46, 126, 42, 199, + 227, 109, 98, 249, 46, 126, 71, 199, 56, 98, 249, 46, 126, 42, 199, 233, + 193, 25, 227, 109, 98, 249, 46, 126, 71, 199, 233, 193, 25, 56, 98, 249, + 46, 126, 245, 90, 223, 47, 98, 249, 46, 126, 223, 48, 245, 97, 50, 98, + 249, 46, 126, 223, 48, 245, 97, 56, 98, 249, 46, 126, 223, 48, 245, 97, + 235, 115, 98, 249, 46, 126, 223, 48, 245, 97, 220, 60, 235, 115, 98, 249, + 46, 126, 223, 48, 245, 97, 220, 60, 227, 109, 98, 249, 46, 126, 223, 48, + 245, 97, 234, 237, 235, 115, 98, 249, 46, 126, 230, 76, 98, 223, 254, 98, + 250, 168, 98, 245, 90, 223, 136, 248, 196, 78, 237, 118, 237, 209, 223, + 159, 100, 98, 237, 138, 78, 98, 250, 194, 78, 98, 54, 217, 84, 42, 254, + 120, 115, 45, 254, 120, 115, 42, 51, 254, 120, 115, 45, 51, 254, 120, + 115, 42, 250, 124, 115, 45, 250, 124, 115, 42, 67, 250, 124, 115, 45, 67, + 250, 124, 115, 42, 84, 235, 91, 115, 45, 84, 235, 91, 115, 229, 14, 78, + 244, 163, 78, 42, 221, 114, 224, 236, 115, 45, 221, 114, 224, 236, 115, + 42, 67, 235, 91, 115, 45, 67, 235, 91, 115, 42, 67, 221, 114, 224, 236, + 115, 45, 67, 221, 114, 224, 236, 115, 42, 67, 40, 115, 45, 67, 40, 115, + 218, 237, 249, 146, 210, 51, 228, 236, 228, 69, 78, 51, 228, 236, 228, + 69, 78, 109, 51, 228, 236, 228, 69, 78, 229, 14, 164, 246, 3, 243, 185, + 231, 107, 107, 243, 185, 231, 107, 103, 243, 185, 231, 107, 160, 243, + 185, 231, 107, 154, 243, 185, 231, 107, 174, 243, 185, 231, 107, 182, + 243, 185, 231, 107, 191, 243, 185, 231, 107, 185, 243, 185, 231, 107, + 190, 98, 235, 83, 145, 78, 98, 227, 88, 145, 78, 98, 249, 52, 145, 78, + 98, 246, 177, 145, 78, 22, 224, 109, 61, 145, 78, 22, 51, 61, 145, 78, + 218, 235, 249, 146, 69, 236, 232, 227, 182, 78, 69, 236, 232, 227, 182, + 2, 219, 70, 224, 9, 78, 69, 236, 232, 227, 182, 164, 220, 60, 243, 194, + 69, 236, 232, 227, 182, 2, 219, 70, 224, 9, 164, 220, 60, 243, 194, 69, + 236, 232, 227, 182, 164, 234, 237, 243, 194, 34, 229, 14, 78, 98, 183, + 235, 44, 245, 225, 225, 55, 100, 243, 185, 231, 107, 222, 65, 243, 185, + 231, 107, 220, 219, 243, 185, 231, 107, 221, 245, 69, 98, 237, 138, 78, + 234, 52, 78, 229, 225, 254, 143, 78, 98, 41, 237, 211, 98, 144, 245, 188, + 223, 254, 136, 1, 3, 60, 136, 1, 60, 136, 1, 3, 72, 136, 1, 72, 136, 1, + 3, 68, 136, 1, 68, 136, 1, 3, 73, 136, 1, 73, 136, 1, 3, 74, 136, 1, 74, + 136, 1, 175, 136, 1, 245, 0, 136, 1, 236, 113, 136, 1, 244, 103, 136, 1, + 236, 7, 136, 1, 244, 17, 136, 1, 236, 184, 136, 1, 244, 191, 136, 1, 236, + 57, 136, 1, 244, 68, 136, 1, 226, 177, 136, 1, 217, 114, 136, 1, 224, + 140, 136, 1, 217, 42, 136, 1, 223, 103, 136, 1, 217, 13, 136, 1, 226, 94, + 136, 1, 217, 92, 136, 1, 224, 26, 136, 1, 217, 21, 136, 1, 222, 155, 136, + 1, 249, 207, 136, 1, 221, 205, 136, 1, 249, 15, 136, 1, 3, 221, 0, 136, + 1, 221, 0, 136, 1, 247, 111, 136, 1, 222, 87, 136, 1, 249, 92, 136, 1, + 101, 136, 1, 248, 167, 136, 1, 208, 136, 1, 232, 62, 136, 1, 231, 144, + 136, 1, 232, 141, 136, 1, 231, 204, 136, 1, 155, 136, 1, 252, 237, 136, + 1, 187, 136, 1, 243, 112, 136, 1, 252, 84, 136, 1, 229, 108, 136, 1, 242, + 173, 136, 1, 251, 248, 136, 1, 228, 202, 136, 1, 243, 162, 136, 1, 252, + 144, 136, 1, 229, 198, 136, 1, 243, 4, 136, 1, 252, 41, 136, 1, 229, 37, + 136, 1, 196, 136, 1, 233, 196, 136, 1, 233, 99, 136, 1, 234, 25, 136, 1, + 233, 136, 136, 1, 3, 184, 136, 1, 184, 136, 1, 3, 217, 200, 136, 1, 217, + 200, 136, 1, 3, 217, 231, 136, 1, 217, 231, 136, 1, 203, 136, 1, 227, + 147, 136, 1, 227, 22, 136, 1, 227, 216, 136, 1, 227, 75, 136, 1, 3, 219, + 7, 136, 1, 219, 7, 136, 1, 218, 204, 136, 1, 218, 227, 136, 1, 218, 187, + 136, 1, 207, 136, 1, 219, 56, 136, 1, 3, 175, 136, 1, 3, 236, 184, 36, + 236, 202, 219, 70, 224, 9, 78, 36, 236, 202, 225, 72, 224, 9, 78, 236, + 202, 219, 70, 224, 9, 78, 236, 202, 225, 72, 224, 9, 78, 136, 237, 138, + 78, 136, 219, 70, 237, 138, 78, 136, 248, 234, 217, 213, 236, 202, 51, + 242, 121, 52, 1, 3, 60, 52, 1, 60, 52, 1, 3, 72, 52, 1, 72, 52, 1, 3, 68, + 52, 1, 68, 52, 1, 3, 73, 52, 1, 73, 52, 1, 3, 74, 52, 1, 74, 52, 1, 175, + 52, 1, 245, 0, 52, 1, 236, 113, 52, 1, 244, 103, 52, 1, 236, 7, 52, 1, + 244, 17, 52, 1, 236, 184, 52, 1, 244, 191, 52, 1, 236, 57, 52, 1, 244, + 68, 52, 1, 226, 177, 52, 1, 217, 114, 52, 1, 224, 140, 52, 1, 217, 42, + 52, 1, 223, 103, 52, 1, 217, 13, 52, 1, 226, 94, 52, 1, 217, 92, 52, 1, + 224, 26, 52, 1, 217, 21, 52, 1, 222, 155, 52, 1, 249, 207, 52, 1, 221, + 205, 52, 1, 249, 15, 52, 1, 3, 221, 0, 52, 1, 221, 0, 52, 1, 247, 111, + 52, 1, 222, 87, 52, 1, 249, 92, 52, 1, 101, 52, 1, 248, 167, 52, 1, 208, + 52, 1, 232, 62, 52, 1, 231, 144, 52, 1, 232, 141, 52, 1, 231, 204, 52, 1, + 155, 52, 1, 252, 237, 52, 1, 187, 52, 1, 243, 112, 52, 1, 252, 84, 52, 1, + 229, 108, 52, 1, 242, 173, 52, 1, 251, 248, 52, 1, 228, 202, 52, 1, 243, + 162, 52, 1, 252, 144, 52, 1, 229, 198, 52, 1, 243, 4, 52, 1, 252, 41, 52, + 1, 229, 37, 52, 1, 196, 52, 1, 233, 196, 52, 1, 233, 99, 52, 1, 234, 25, + 52, 1, 233, 136, 52, 1, 3, 184, 52, 1, 184, 52, 1, 3, 217, 200, 52, 1, + 217, 200, 52, 1, 3, 217, 231, 52, 1, 217, 231, 52, 1, 203, 52, 1, 227, + 147, 52, 1, 227, 22, 52, 1, 227, 216, 52, 1, 227, 75, 52, 1, 3, 219, 7, + 52, 1, 219, 7, 52, 1, 218, 204, 52, 1, 218, 227, 52, 1, 218, 187, 52, 1, + 207, 52, 1, 219, 56, 52, 1, 3, 175, 52, 1, 3, 236, 184, 52, 1, 219, 189, + 52, 1, 219, 94, 52, 1, 219, 165, 52, 1, 219, 72, 52, 233, 193, 248, 145, + 236, 202, 228, 223, 224, 9, 78, 52, 237, 138, 78, 52, 219, 70, 237, 138, + 78, 52, 248, 234, 236, 30, 200, 1, 253, 204, 200, 1, 230, 59, 200, 1, + 189, 200, 1, 246, 74, 200, 1, 250, 46, 200, 1, 222, 201, 200, 1, 207, + 200, 1, 153, 200, 1, 245, 67, 200, 1, 237, 17, 200, 1, 243, 225, 200, 1, + 237, 126, 200, 1, 228, 163, 200, 1, 218, 151, 200, 1, 217, 81, 200, 1, + 251, 70, 200, 1, 225, 27, 200, 1, 152, 200, 1, 217, 157, 200, 1, 251, + 202, 200, 1, 198, 200, 1, 60, 200, 1, 74, 200, 1, 73, 200, 1, 246, 239, + 200, 1, 254, 196, 200, 1, 246, 237, 200, 1, 253, 232, 200, 1, 230, 86, + 200, 1, 254, 131, 200, 1, 246, 197, 200, 1, 254, 123, 200, 1, 246, 185, + 200, 1, 246, 148, 200, 1, 72, 200, 1, 68, 200, 1, 237, 137, 200, 1, 216, + 216, 200, 1, 232, 117, 200, 1, 244, 72, 200, 1, 238, 0, 22, 1, 236, 86, + 22, 1, 223, 211, 22, 1, 236, 79, 22, 1, 232, 55, 22, 1, 232, 53, 22, 1, + 232, 52, 22, 1, 221, 192, 22, 1, 223, 200, 22, 1, 227, 140, 22, 1, 227, + 135, 22, 1, 227, 132, 22, 1, 227, 125, 22, 1, 227, 120, 22, 1, 227, 115, + 22, 1, 227, 126, 22, 1, 227, 138, 22, 1, 233, 187, 22, 1, 229, 99, 22, 1, + 223, 208, 22, 1, 229, 88, 22, 1, 224, 104, 22, 1, 223, 205, 22, 1, 238, + 22, 22, 1, 250, 230, 22, 1, 223, 215, 22, 1, 251, 29, 22, 1, 236, 128, + 22, 1, 222, 0, 22, 1, 229, 127, 22, 1, 243, 106, 22, 1, 60, 22, 1, 254, + 234, 22, 1, 184, 22, 1, 218, 65, 22, 1, 246, 168, 22, 1, 73, 22, 1, 218, + 16, 22, 1, 218, 25, 22, 1, 74, 22, 1, 219, 7, 22, 1, 219, 4, 22, 1, 230, + 167, 22, 1, 217, 231, 22, 1, 68, 22, 1, 218, 219, 22, 1, 218, 227, 22, 1, + 218, 204, 22, 1, 217, 200, 22, 1, 246, 115, 22, 1, 217, 250, 22, 1, 72, + 22, 245, 185, 22, 1, 223, 209, 22, 1, 232, 45, 22, 1, 232, 47, 22, 1, + 232, 50, 22, 1, 227, 133, 22, 1, 227, 114, 22, 1, 227, 122, 22, 1, 227, + 127, 22, 1, 227, 112, 22, 1, 233, 180, 22, 1, 233, 177, 22, 1, 233, 181, + 22, 1, 236, 220, 22, 1, 229, 94, 22, 1, 229, 80, 22, 1, 229, 86, 22, 1, + 229, 83, 22, 1, 229, 97, 22, 1, 229, 81, 22, 1, 236, 218, 22, 1, 236, + 216, 22, 1, 224, 97, 22, 1, 224, 95, 22, 1, 224, 87, 22, 1, 224, 92, 22, + 1, 224, 102, 22, 1, 230, 1, 22, 1, 223, 212, 22, 1, 218, 6, 22, 1, 218, + 2, 22, 1, 218, 3, 22, 1, 236, 219, 22, 1, 223, 213, 22, 1, 218, 12, 22, + 1, 217, 225, 22, 1, 217, 224, 22, 1, 217, 227, 22, 1, 217, 191, 22, 1, + 217, 192, 22, 1, 217, 195, 22, 1, 254, 60, 22, 1, 254, 54, 98, 254, 112, + 235, 33, 78, 98, 254, 112, 227, 160, 78, 98, 254, 112, 131, 78, 98, 254, + 112, 124, 78, 98, 254, 112, 148, 78, 98, 254, 112, 245, 116, 78, 98, 254, + 112, 221, 120, 78, 98, 254, 112, 233, 193, 78, 98, 254, 112, 252, 29, 78, + 98, 254, 112, 245, 178, 78, 98, 254, 112, 226, 90, 78, 98, 254, 112, 221, + 252, 78, 98, 254, 112, 245, 110, 78, 98, 254, 112, 243, 152, 78, 98, 254, + 112, 247, 9, 78, 98, 254, 112, 234, 87, 78, 200, 1, 251, 248, 200, 1, + 217, 42, 200, 1, 237, 98, 200, 1, 244, 17, 200, 1, 246, 250, 200, 1, 246, + 183, 200, 1, 230, 127, 200, 1, 230, 131, 200, 1, 237, 156, 200, 1, 254, + 114, 200, 1, 237, 198, 200, 1, 220, 68, 200, 1, 237, 238, 200, 1, 232, + 101, 200, 1, 254, 190, 200, 1, 253, 228, 200, 1, 254, 140, 200, 1, 230, + 146, 200, 1, 230, 133, 200, 1, 237, 195, 200, 39, 1, 230, 59, 200, 39, 1, + 222, 201, 200, 39, 1, 237, 17, 200, 39, 1, 243, 225, 9, 214, 222, 201, 9, + 214, 218, 213, 9, 214, 218, 131, 9, 214, 251, 214, 9, 214, 223, 37, 9, + 214, 242, 111, 9, 214, 242, 115, 9, 214, 242, 179, 9, 214, 242, 112, 9, + 214, 222, 204, 9, 214, 242, 114, 9, 214, 242, 110, 9, 214, 242, 177, 9, + 214, 242, 113, 9, 214, 242, 109, 9, 214, 207, 9, 214, 243, 225, 9, 214, + 198, 9, 214, 230, 59, 9, 214, 224, 0, 9, 214, 250, 46, 9, 214, 242, 116, + 9, 214, 243, 122, 9, 214, 222, 213, 9, 214, 223, 22, 9, 214, 223, 168, 9, + 214, 225, 32, 9, 214, 229, 200, 9, 214, 228, 165, 9, 214, 221, 140, 9, + 214, 222, 203, 9, 214, 223, 30, 9, 214, 242, 123, 9, 214, 242, 108, 9, + 214, 229, 143, 9, 214, 228, 163, 52, 1, 3, 236, 7, 52, 1, 3, 224, 140, + 52, 1, 3, 223, 103, 52, 1, 3, 101, 52, 1, 3, 231, 144, 52, 1, 3, 155, 52, + 1, 3, 243, 112, 52, 1, 3, 242, 173, 52, 1, 3, 243, 162, 52, 1, 3, 243, 4, + 52, 1, 3, 233, 99, 52, 1, 3, 203, 52, 1, 3, 227, 147, 52, 1, 3, 227, 22, + 52, 1, 3, 227, 216, 52, 1, 3, 227, 75, 82, 22, 236, 86, 82, 22, 232, 55, + 82, 22, 221, 192, 82, 22, 227, 140, 82, 22, 233, 187, 82, 22, 229, 99, + 82, 22, 224, 104, 82, 22, 238, 22, 82, 22, 250, 230, 82, 22, 251, 29, 82, + 22, 236, 128, 82, 22, 222, 0, 82, 22, 229, 127, 82, 22, 243, 106, 82, 22, + 236, 87, 60, 82, 22, 232, 56, 60, 82, 22, 221, 193, 60, 82, 22, 227, 141, + 60, 82, 22, 233, 188, 60, 82, 22, 229, 100, 60, 82, 22, 224, 105, 60, 82, + 22, 238, 23, 60, 82, 22, 250, 231, 60, 82, 22, 251, 30, 60, 82, 22, 236, + 129, 60, 82, 22, 222, 1, 60, 82, 22, 229, 128, 60, 82, 22, 243, 107, 60, + 82, 22, 250, 231, 68, 82, 236, 34, 126, 230, 156, 82, 236, 34, 126, 142, + 242, 173, 82, 138, 107, 82, 138, 103, 82, 138, 160, 82, 138, 154, 82, + 138, 174, 82, 138, 182, 82, 138, 191, 82, 138, 185, 82, 138, 190, 82, + 138, 222, 65, 82, 138, 233, 117, 82, 138, 245, 179, 82, 138, 218, 240, + 82, 138, 218, 179, 82, 138, 233, 238, 82, 138, 247, 8, 82, 138, 223, 68, + 82, 138, 223, 139, 82, 138, 243, 168, 82, 138, 224, 23, 82, 138, 232, + 218, 82, 138, 223, 248, 82, 138, 245, 184, 82, 138, 250, 154, 82, 138, + 235, 181, 82, 138, 227, 178, 82, 138, 251, 159, 82, 138, 223, 106, 82, + 138, 223, 56, 82, 138, 246, 176, 82, 138, 227, 170, 82, 138, 254, 153, + 82, 138, 245, 208, 82, 138, 227, 168, 82, 138, 225, 73, 82, 138, 227, + 215, 34, 138, 228, 81, 34, 138, 236, 103, 34, 138, 226, 107, 34, 138, + 236, 30, 34, 54, 222, 66, 230, 139, 84, 223, 227, 34, 54, 220, 220, 230, + 139, 84, 223, 227, 34, 54, 221, 246, 230, 139, 84, 223, 227, 34, 54, 245, + 120, 230, 139, 84, 223, 227, 34, 54, 245, 197, 230, 139, 84, 223, 227, + 34, 54, 224, 70, 230, 139, 84, 223, 227, 34, 54, 225, 39, 230, 139, 84, + 223, 227, 34, 54, 246, 228, 230, 139, 84, 223, 227, 229, 221, 55, 34, 54, + 220, 220, 107, 34, 54, 220, 220, 103, 34, 54, 220, 220, 160, 34, 54, 220, + 220, 154, 34, 54, 220, 220, 174, 34, 54, 220, 220, 182, 34, 54, 220, 220, + 191, 34, 54, 220, 220, 185, 34, 54, 220, 220, 190, 34, 54, 221, 245, 34, + 54, 221, 246, 107, 34, 54, 221, 246, 103, 34, 54, 221, 246, 160, 34, 54, + 221, 246, 154, 34, 54, 221, 246, 174, 34, 22, 236, 86, 34, 22, 232, 55, + 34, 22, 221, 192, 34, 22, 227, 140, 34, 22, 233, 187, 34, 22, 229, 99, + 34, 22, 224, 104, 34, 22, 238, 22, 34, 22, 250, 230, 34, 22, 251, 29, 34, + 22, 236, 128, 34, 22, 222, 0, 34, 22, 229, 127, 34, 22, 243, 106, 34, 22, + 236, 87, 60, 34, 22, 232, 56, 60, 34, 22, 221, 193, 60, 34, 22, 227, 141, + 60, 34, 22, 233, 188, 60, 34, 22, 229, 100, 60, 34, 22, 224, 105, 60, 34, + 22, 238, 23, 60, 34, 22, 250, 231, 60, 34, 22, 251, 30, 60, 34, 22, 236, + 129, 60, 34, 22, 222, 1, 60, 34, 22, 229, 128, 60, 34, 22, 243, 107, 60, + 34, 236, 34, 126, 251, 61, 34, 236, 34, 126, 237, 40, 34, 22, 238, 23, + 68, 236, 34, 223, 159, 100, 34, 138, 107, 34, 138, 103, 34, 138, 160, 34, + 138, 154, 34, 138, 174, 34, 138, 182, 34, 138, 191, 34, 138, 185, 34, + 138, 190, 34, 138, 222, 65, 34, 138, 233, 117, 34, 138, 245, 179, 34, + 138, 218, 240, 34, 138, 218, 179, 34, 138, 233, 238, 34, 138, 247, 8, 34, + 138, 223, 68, 34, 138, 223, 139, 34, 138, 243, 168, 34, 138, 224, 23, 34, + 138, 232, 218, 34, 138, 223, 248, 34, 138, 245, 184, 34, 138, 250, 154, + 34, 138, 235, 181, 34, 138, 226, 88, 34, 138, 234, 89, 34, 138, 245, 216, + 34, 138, 223, 79, 34, 138, 246, 97, 34, 138, 228, 233, 34, 138, 253, 236, + 34, 138, 237, 139, 34, 138, 227, 168, 34, 138, 250, 127, 34, 138, 250, + 118, 34, 138, 243, 99, 34, 138, 251, 84, 34, 138, 234, 239, 34, 138, 235, + 115, 34, 138, 227, 109, 34, 138, 234, 19, 34, 138, 227, 189, 34, 138, + 223, 106, 34, 138, 223, 56, 34, 138, 246, 176, 34, 138, 227, 170, 34, + 138, 254, 153, 34, 138, 232, 42, 34, 54, 221, 246, 182, 34, 54, 221, 246, + 191, 34, 54, 221, 246, 185, 34, 54, 221, 246, 190, 34, 54, 245, 119, 34, + 54, 245, 120, 107, 34, 54, 245, 120, 103, 34, 54, 245, 120, 160, 34, 54, + 245, 120, 154, 34, 54, 245, 120, 174, 34, 54, 245, 120, 182, 34, 54, 245, + 120, 191, 34, 54, 245, 120, 185, 34, 54, 245, 120, 190, 34, 54, 245, 196, + 98, 183, 16, 35, 237, 119, 98, 183, 16, 35, 245, 227, 98, 183, 16, 35, + 234, 69, 98, 183, 16, 35, 254, 71, 98, 183, 16, 35, 234, 45, 98, 183, 16, + 35, 237, 38, 98, 183, 16, 35, 237, 39, 98, 183, 16, 35, 253, 229, 98, + 183, 16, 35, 225, 53, 98, 183, 16, 35, 230, 170, 98, 183, 16, 35, 231, + 175, 98, 183, 16, 35, 249, 87, 40, 243, 122, 40, 246, 144, 40, 246, 105, + 235, 49, 235, 66, 55, 34, 52, 60, 34, 52, 72, 34, 52, 68, 34, 52, 73, 34, + 52, 74, 34, 52, 175, 34, 52, 236, 113, 34, 52, 236, 7, 34, 52, 236, 184, + 34, 52, 236, 57, 34, 52, 226, 177, 34, 52, 224, 140, 34, 52, 223, 103, + 34, 52, 226, 94, 34, 52, 224, 26, 34, 52, 222, 155, 34, 52, 221, 205, 34, + 52, 221, 0, 34, 52, 222, 87, 34, 52, 101, 34, 52, 208, 34, 52, 232, 62, + 34, 52, 231, 144, 34, 52, 232, 141, 34, 52, 231, 204, 34, 52, 155, 34, + 52, 243, 112, 34, 52, 242, 173, 34, 52, 243, 162, 34, 52, 243, 4, 34, 52, + 196, 34, 52, 233, 196, 34, 52, 233, 99, 34, 52, 234, 25, 34, 52, 233, + 136, 34, 52, 184, 34, 52, 217, 200, 34, 52, 217, 231, 34, 52, 203, 34, + 52, 227, 147, 34, 52, 227, 22, 34, 52, 227, 216, 34, 52, 227, 75, 34, 52, + 219, 7, 34, 52, 218, 204, 34, 52, 218, 227, 34, 52, 218, 187, 40, 254, + 91, 40, 254, 15, 40, 254, 108, 40, 255, 16, 40, 237, 199, 40, 237, 172, + 40, 220, 66, 40, 246, 124, 40, 246, 248, 40, 230, 130, 40, 230, 125, 40, + 236, 242, 40, 236, 214, 40, 236, 212, 40, 244, 217, 40, 244, 225, 40, + 244, 94, 40, 244, 90, 40, 235, 203, 40, 244, 84, 40, 236, 97, 40, 236, + 96, 40, 236, 95, 40, 236, 94, 40, 243, 251, 40, 243, 250, 40, 235, 244, + 40, 235, 246, 40, 236, 180, 40, 236, 32, 40, 236, 39, 40, 226, 162, 40, + 226, 136, 40, 224, 85, 40, 225, 58, 40, 225, 57, 40, 249, 204, 40, 249, + 45, 40, 248, 146, 40, 221, 134, 40, 232, 214, 40, 231, 176, 40, 243, 199, + 40, 230, 40, 40, 230, 39, 40, 252, 235, 40, 229, 105, 40, 229, 74, 40, + 229, 75, 40, 252, 65, 40, 242, 172, 40, 242, 168, 40, 251, 223, 40, 242, + 155, 40, 243, 143, 40, 229, 150, 40, 229, 178, 40, 243, 129, 40, 229, + 176, 40, 229, 189, 40, 252, 133, 40, 229, 27, 40, 252, 31, 40, 242, 249, + 40, 229, 22, 40, 242, 245, 40, 242, 246, 40, 234, 98, 40, 234, 95, 40, + 234, 102, 40, 234, 59, 40, 234, 80, 40, 233, 167, 40, 233, 149, 40, 233, + 148, 40, 234, 9, 40, 234, 7, 40, 234, 10, 40, 218, 75, 40, 218, 73, 40, + 217, 190, 40, 227, 86, 40, 227, 90, 40, 227, 3, 40, 226, 254, 40, 227, + 188, 40, 227, 186, 40, 218, 239, 98, 183, 16, 35, 242, 184, 217, 84, 98, + 183, 16, 35, 242, 184, 107, 98, 183, 16, 35, 242, 184, 103, 98, 183, 16, + 35, 242, 184, 160, 98, 183, 16, 35, 242, 184, 154, 98, 183, 16, 35, 242, + 184, 174, 98, 183, 16, 35, 242, 184, 182, 98, 183, 16, 35, 242, 184, 191, + 98, 183, 16, 35, 242, 184, 185, 98, 183, 16, 35, 242, 184, 190, 98, 183, + 16, 35, 242, 184, 222, 65, 98, 183, 16, 35, 242, 184, 246, 211, 98, 183, + 16, 35, 242, 184, 220, 221, 98, 183, 16, 35, 242, 184, 221, 247, 98, 183, + 16, 35, 242, 184, 245, 111, 98, 183, 16, 35, 242, 184, 245, 200, 98, 183, + 16, 35, 242, 184, 224, 77, 98, 183, 16, 35, 242, 184, 225, 41, 98, 183, + 16, 35, 242, 184, 246, 233, 98, 183, 16, 35, 242, 184, 232, 29, 98, 183, + 16, 35, 242, 184, 220, 219, 98, 183, 16, 35, 242, 184, 220, 213, 98, 183, + 16, 35, 242, 184, 220, 209, 98, 183, 16, 35, 242, 184, 220, 210, 98, 183, + 16, 35, 242, 184, 220, 215, 40, 242, 178, 40, 249, 207, 40, 253, 232, 40, + 135, 40, 230, 79, 40, 229, 201, 40, 248, 169, 40, 248, 170, 223, 226, 40, + 248, 170, 250, 88, 40, 237, 137, 40, 246, 147, 232, 219, 243, 144, 40, + 246, 147, 232, 219, 222, 221, 40, 246, 147, 232, 219, 222, 132, 40, 246, + 147, 232, 219, 234, 6, 40, 250, 120, 40, 230, 44, 254, 133, 40, 208, 40, + 233, 100, 60, 40, 196, 40, 175, 40, 236, 187, 40, 234, 41, 40, 244, 205, + 40, 251, 161, 40, 236, 186, 40, 229, 144, 40, 232, 119, 40, 233, 100, + 246, 74, 40, 233, 100, 245, 67, 40, 233, 230, 40, 236, 151, 40, 242, 116, + 40, 236, 115, 40, 233, 198, 40, 244, 105, 40, 221, 207, 40, 233, 100, + 153, 40, 233, 143, 40, 248, 177, 40, 236, 68, 40, 245, 141, 40, 231, 219, + 40, 233, 100, 189, 40, 233, 140, 40, 250, 183, 40, 236, 62, 40, 233, 141, + 223, 226, 40, 250, 184, 223, 226, 40, 234, 187, 223, 226, 40, 236, 63, + 223, 226, 40, 233, 141, 250, 88, 40, 250, 184, 250, 88, 40, 234, 187, + 250, 88, 40, 236, 63, 250, 88, 40, 234, 187, 104, 198, 40, 234, 187, 104, + 226, 235, 223, 226, 40, 187, 40, 236, 26, 40, 233, 102, 40, 244, 48, 40, + 227, 252, 40, 227, 253, 104, 198, 40, 227, 253, 104, 226, 235, 223, 226, + 40, 228, 213, 40, 231, 148, 40, 233, 100, 198, 40, 233, 101, 40, 228, + 183, 40, 231, 87, 40, 233, 100, 216, 216, 40, 233, 52, 40, 235, 237, 40, + 233, 53, 234, 9, 40, 228, 182, 40, 231, 86, 40, 233, 100, 219, 40, 40, + 233, 50, 40, 235, 235, 40, 233, 51, 234, 9, 40, 237, 18, 230, 159, 40, + 234, 187, 230, 159, 40, 254, 140, 40, 252, 20, 40, 251, 115, 40, 251, + 100, 40, 251, 203, 104, 236, 151, 40, 250, 182, 40, 249, 134, 40, 243, + 237, 40, 155, 40, 242, 179, 40, 237, 223, 40, 236, 75, 40, 236, 63, 251, + 142, 40, 236, 9, 40, 235, 15, 40, 235, 14, 40, 235, 8, 40, 234, 199, 40, + 234, 42, 224, 43, 40, 233, 166, 40, 233, 129, 40, 229, 142, 40, 229, 40, + 40, 229, 5, 40, 229, 3, 40, 223, 220, 40, 223, 41, 40, 218, 228, 40, 220, + 11, 104, 189, 40, 112, 104, 189, 98, 183, 16, 35, 249, 137, 107, 98, 183, + 16, 35, 249, 137, 103, 98, 183, 16, 35, 249, 137, 160, 98, 183, 16, 35, + 249, 137, 154, 98, 183, 16, 35, 249, 137, 174, 98, 183, 16, 35, 249, 137, + 182, 98, 183, 16, 35, 249, 137, 191, 98, 183, 16, 35, 249, 137, 185, 98, + 183, 16, 35, 249, 137, 190, 98, 183, 16, 35, 249, 137, 222, 65, 98, 183, + 16, 35, 249, 137, 246, 211, 98, 183, 16, 35, 249, 137, 220, 221, 98, 183, + 16, 35, 249, 137, 221, 247, 98, 183, 16, 35, 249, 137, 245, 111, 98, 183, + 16, 35, 249, 137, 245, 200, 98, 183, 16, 35, 249, 137, 224, 77, 98, 183, + 16, 35, 249, 137, 225, 41, 98, 183, 16, 35, 249, 137, 246, 233, 98, 183, + 16, 35, 249, 137, 232, 29, 98, 183, 16, 35, 249, 137, 220, 219, 98, 183, + 16, 35, 249, 137, 220, 213, 98, 183, 16, 35, 249, 137, 220, 209, 98, 183, + 16, 35, 249, 137, 220, 210, 98, 183, 16, 35, 249, 137, 220, 215, 98, 183, + 16, 35, 249, 137, 220, 216, 98, 183, 16, 35, 249, 137, 220, 211, 98, 183, + 16, 35, 249, 137, 220, 212, 98, 183, 16, 35, 249, 137, 220, 218, 98, 183, + 16, 35, 249, 137, 220, 214, 98, 183, 16, 35, 249, 137, 221, 245, 98, 183, + 16, 35, 249, 137, 221, 244, 40, 244, 240, 205, 35, 222, 23, 250, 108, + 243, 151, 205, 35, 222, 23, 227, 213, 247, 8, 205, 35, 248, 244, 253, + 245, 222, 23, 252, 130, 205, 35, 217, 211, 245, 137, 205, 35, 219, 1, + 205, 35, 250, 155, 205, 35, 222, 23, 254, 30, 205, 35, 242, 253, 221, + 136, 205, 35, 3, 222, 120, 205, 35, 221, 100, 205, 35, 229, 196, 205, 35, + 223, 158, 205, 35, 245, 218, 205, 35, 244, 32, 229, 15, 205, 35, 233, + 132, 205, 35, 246, 175, 205, 35, 245, 138, 205, 35, 218, 172, 230, 139, + 222, 23, 249, 88, 205, 35, 254, 75, 205, 35, 250, 139, 205, 35, 252, 59, + 221, 224, 205, 35, 244, 46, 205, 35, 223, 237, 254, 90, 205, 35, 227, + 162, 205, 35, 237, 194, 205, 35, 244, 32, 222, 120, 205, 35, 233, 106, + 250, 122, 205, 35, 244, 32, 228, 240, 205, 35, 222, 23, 255, 4, 218, 240, + 205, 35, 222, 23, 250, 201, 245, 179, 205, 35, 237, 206, 205, 35, 247, + 90, 205, 35, 227, 165, 205, 35, 244, 32, 229, 10, 205, 35, 228, 227, 205, + 35, 249, 151, 117, 222, 23, 235, 58, 205, 35, 222, 23, 245, 246, 205, 35, + 230, 109, 205, 35, 230, 173, 205, 35, 249, 66, 205, 35, 249, 84, 205, 35, + 237, 217, 205, 35, 252, 11, 205, 35, 250, 170, 199, 234, 12, 205, 35, + 244, 212, 221, 136, 205, 35, 228, 187, 220, 54, 205, 35, 230, 108, 205, + 35, 222, 23, 218, 221, 205, 35, 227, 156, 205, 35, 222, 23, 251, 121, + 205, 35, 222, 23, 254, 26, 221, 221, 205, 35, 222, 23, 236, 181, 223, + 141, 233, 107, 205, 35, 249, 43, 205, 35, 222, 23, 234, 61, 234, 99, 205, + 35, 255, 5, 205, 35, 222, 23, 218, 252, 205, 35, 222, 23, 244, 177, 218, + 194, 205, 35, 222, 23, 237, 44, 235, 165, 205, 35, 248, 200, 205, 35, + 235, 50, 205, 35, 237, 197, 221, 59, 205, 35, 3, 228, 240, 205, 35, 254, + 210, 250, 162, 205, 35, 252, 132, 250, 162, 8, 4, 237, 140, 8, 4, 237, + 134, 8, 4, 72, 8, 4, 237, 159, 8, 4, 238, 24, 8, 4, 238, 7, 8, 4, 238, + 26, 8, 4, 238, 25, 8, 4, 253, 244, 8, 4, 253, 214, 8, 4, 60, 8, 4, 254, + 92, 8, 4, 220, 64, 8, 4, 220, 67, 8, 4, 220, 65, 8, 4, 230, 92, 8, 4, + 230, 68, 8, 4, 74, 8, 4, 230, 120, 8, 4, 246, 98, 8, 4, 73, 8, 4, 218, + 165, 8, 4, 252, 60, 8, 4, 252, 57, 8, 4, 252, 84, 8, 4, 252, 68, 8, 4, + 252, 78, 8, 4, 252, 77, 8, 4, 252, 80, 8, 4, 252, 79, 8, 4, 252, 184, 8, + 4, 252, 180, 8, 4, 252, 237, 8, 4, 252, 202, 8, 4, 251, 231, 8, 4, 251, + 235, 8, 4, 251, 232, 8, 4, 252, 30, 8, 4, 252, 21, 8, 4, 252, 41, 8, 4, + 252, 32, 8, 4, 252, 97, 8, 4, 252, 144, 8, 4, 252, 109, 8, 4, 251, 221, + 8, 4, 251, 219, 8, 4, 251, 248, 8, 4, 251, 230, 8, 4, 251, 224, 8, 4, + 251, 228, 8, 4, 251, 207, 8, 4, 251, 206, 8, 4, 251, 212, 8, 4, 251, 210, + 8, 4, 251, 208, 8, 4, 251, 209, 8, 4, 229, 64, 8, 4, 229, 60, 8, 4, 229, + 108, 8, 4, 229, 70, 8, 4, 229, 79, 8, 4, 229, 103, 8, 4, 229, 101, 8, 4, + 229, 215, 8, 4, 229, 206, 8, 4, 187, 8, 4, 229, 246, 8, 4, 228, 192, 8, + 4, 228, 194, 8, 4, 228, 193, 8, 4, 229, 12, 8, 4, 229, 8, 8, 4, 229, 37, + 8, 4, 229, 19, 8, 4, 228, 185, 8, 4, 228, 184, 8, 4, 228, 202, 8, 4, 228, + 191, 8, 4, 228, 188, 8, 4, 228, 190, 8, 4, 228, 167, 8, 4, 228, 166, 8, + 4, 228, 171, 8, 4, 228, 170, 8, 4, 228, 168, 8, 4, 228, 169, 8, 4, 252, + 165, 8, 4, 252, 164, 8, 4, 252, 171, 8, 4, 252, 166, 8, 4, 252, 168, 8, + 4, 252, 167, 8, 4, 252, 170, 8, 4, 252, 169, 8, 4, 252, 176, 8, 4, 252, + 175, 8, 4, 252, 178, 8, 4, 252, 177, 8, 4, 252, 156, 8, 4, 252, 158, 8, + 4, 252, 157, 8, 4, 252, 161, 8, 4, 252, 160, 8, 4, 252, 163, 8, 4, 252, + 162, 8, 4, 252, 172, 8, 4, 252, 174, 8, 4, 252, 173, 8, 4, 252, 152, 8, + 4, 252, 151, 8, 4, 252, 159, 8, 4, 252, 155, 8, 4, 252, 153, 8, 4, 252, + 154, 8, 4, 252, 148, 8, 4, 252, 147, 8, 4, 252, 150, 8, 4, 252, 149, 8, + 4, 232, 188, 8, 4, 232, 187, 8, 4, 232, 193, 8, 4, 232, 189, 8, 4, 232, + 190, 8, 4, 232, 192, 8, 4, 232, 191, 8, 4, 232, 195, 8, 4, 232, 194, 8, + 4, 232, 197, 8, 4, 232, 196, 8, 4, 232, 184, 8, 4, 232, 183, 8, 4, 232, + 186, 8, 4, 232, 185, 8, 4, 232, 178, 8, 4, 232, 177, 8, 4, 232, 182, 8, + 4, 232, 181, 8, 4, 232, 179, 8, 4, 232, 180, 8, 4, 232, 172, 8, 4, 232, + 171, 8, 4, 232, 176, 8, 4, 232, 175, 8, 4, 232, 173, 8, 4, 232, 174, 8, + 4, 243, 46, 8, 4, 243, 45, 8, 4, 243, 51, 8, 4, 243, 47, 8, 4, 243, 48, + 8, 4, 243, 50, 8, 4, 243, 49, 8, 4, 243, 54, 8, 4, 243, 53, 8, 4, 243, + 56, 8, 4, 243, 55, 8, 4, 243, 37, 8, 4, 243, 39, 8, 4, 243, 38, 8, 4, + 243, 42, 8, 4, 243, 41, 8, 4, 243, 44, 8, 4, 243, 43, 8, 4, 243, 33, 8, + 4, 243, 32, 8, 4, 243, 40, 8, 4, 243, 36, 8, 4, 243, 34, 8, 4, 243, 35, + 8, 4, 243, 27, 8, 4, 243, 31, 8, 4, 243, 30, 8, 4, 243, 28, 8, 4, 243, + 29, 8, 4, 233, 145, 8, 4, 233, 144, 8, 4, 233, 196, 8, 4, 233, 151, 8, 4, + 233, 173, 8, 4, 233, 190, 8, 4, 233, 189, 8, 4, 234, 51, 8, 4, 234, 47, + 8, 4, 196, 8, 4, 234, 78, 8, 4, 233, 75, 8, 4, 233, 74, 8, 4, 233, 77, 8, + 4, 233, 76, 8, 4, 233, 111, 8, 4, 233, 103, 8, 4, 233, 136, 8, 4, 233, + 115, 8, 4, 233, 232, 8, 4, 234, 25, 8, 4, 233, 57, 8, 4, 233, 54, 8, 4, + 233, 99, 8, 4, 233, 71, 8, 4, 233, 64, 8, 4, 233, 69, 8, 4, 233, 36, 8, + 4, 233, 35, 8, 4, 233, 41, 8, 4, 233, 38, 8, 4, 245, 172, 8, 4, 245, 168, + 8, 4, 245, 203, 8, 4, 245, 180, 8, 4, 245, 240, 8, 4, 245, 234, 8, 4, + 246, 8, 8, 4, 245, 242, 8, 4, 245, 109, 8, 4, 245, 139, 8, 4, 245, 130, + 8, 4, 245, 80, 8, 4, 245, 79, 8, 4, 245, 92, 8, 4, 245, 85, 8, 4, 245, + 83, 8, 4, 245, 84, 8, 4, 245, 70, 8, 4, 245, 69, 8, 4, 245, 73, 8, 4, + 245, 71, 8, 4, 219, 74, 8, 4, 219, 73, 8, 4, 219, 94, 8, 4, 219, 83, 8, + 4, 219, 89, 8, 4, 219, 87, 8, 4, 219, 91, 8, 4, 219, 90, 8, 4, 219, 172, + 8, 4, 219, 168, 8, 4, 219, 189, 8, 4, 219, 182, 8, 4, 219, 62, 8, 4, 219, + 58, 8, 4, 219, 72, 8, 4, 219, 63, 8, 4, 219, 95, 8, 4, 219, 156, 8, 4, + 219, 51, 8, 4, 219, 50, 8, 4, 219, 56, 8, 4, 219, 54, 8, 4, 219, 52, 8, + 4, 219, 53, 8, 4, 219, 44, 8, 4, 219, 43, 8, 4, 219, 48, 8, 4, 219, 47, + 8, 4, 219, 45, 8, 4, 219, 46, 8, 4, 248, 197, 8, 4, 248, 185, 8, 4, 249, + 15, 8, 4, 248, 216, 8, 4, 248, 249, 8, 4, 248, 253, 8, 4, 248, 252, 8, 4, + 249, 143, 8, 4, 249, 138, 8, 4, 249, 207, 8, 4, 249, 162, 8, 4, 247, 95, + 8, 4, 247, 96, 8, 4, 248, 145, 8, 4, 247, 128, 8, 4, 248, 167, 8, 4, 248, + 147, 8, 4, 249, 41, 8, 4, 249, 92, 8, 4, 249, 53, 8, 4, 247, 88, 8, 4, + 247, 86, 8, 4, 247, 111, 8, 4, 247, 94, 8, 4, 247, 89, 8, 4, 247, 92, 8, + 4, 221, 161, 8, 4, 221, 157, 8, 4, 221, 205, 8, 4, 221, 169, 8, 4, 221, + 198, 8, 4, 221, 200, 8, 4, 221, 199, 8, 4, 222, 110, 8, 4, 222, 97, 8, 4, + 222, 155, 8, 4, 222, 115, 8, 4, 220, 244, 8, 4, 220, 243, 8, 4, 220, 246, + 8, 4, 220, 245, 8, 4, 221, 113, 8, 4, 221, 110, 8, 4, 101, 8, 4, 221, + 119, 8, 4, 222, 40, 8, 4, 222, 87, 8, 4, 222, 57, 8, 4, 220, 231, 8, 4, + 220, 228, 8, 4, 221, 0, 8, 4, 220, 242, 8, 4, 220, 232, 8, 4, 220, 240, + 8, 4, 249, 109, 8, 4, 249, 108, 8, 4, 249, 114, 8, 4, 249, 110, 8, 4, + 249, 111, 8, 4, 249, 113, 8, 4, 249, 112, 8, 4, 249, 125, 8, 4, 249, 124, + 8, 4, 249, 132, 8, 4, 249, 126, 8, 4, 249, 99, 8, 4, 249, 101, 8, 4, 249, + 100, 8, 4, 249, 104, 8, 4, 249, 103, 8, 4, 249, 107, 8, 4, 249, 105, 8, + 4, 249, 117, 8, 4, 249, 120, 8, 4, 249, 118, 8, 4, 249, 95, 8, 4, 249, + 94, 8, 4, 249, 102, 8, 4, 249, 98, 8, 4, 249, 96, 8, 4, 249, 97, 8, 4, + 232, 156, 8, 4, 232, 155, 8, 4, 232, 160, 8, 4, 232, 157, 8, 4, 232, 158, + 8, 4, 232, 159, 8, 4, 232, 166, 8, 4, 232, 165, 8, 4, 232, 169, 8, 4, + 232, 167, 8, 4, 232, 150, 8, 4, 232, 149, 8, 4, 232, 154, 8, 4, 232, 151, + 8, 4, 232, 161, 8, 4, 232, 164, 8, 4, 232, 162, 8, 4, 232, 144, 8, 4, + 232, 143, 8, 4, 232, 148, 8, 4, 232, 147, 8, 4, 232, 145, 8, 4, 232, 146, + 8, 4, 243, 13, 8, 4, 243, 12, 8, 4, 243, 19, 8, 4, 243, 14, 8, 4, 243, + 16, 8, 4, 243, 15, 8, 4, 243, 18, 8, 4, 243, 17, 8, 4, 243, 24, 8, 4, + 243, 23, 8, 4, 243, 26, 8, 4, 243, 25, 8, 4, 243, 7, 8, 4, 243, 8, 8, 4, + 243, 10, 8, 4, 243, 9, 8, 4, 243, 11, 8, 4, 243, 20, 8, 4, 243, 22, 8, 4, + 243, 21, 8, 4, 243, 6, 8, 4, 232, 21, 8, 4, 232, 20, 8, 4, 232, 62, 8, 4, + 232, 24, 8, 4, 232, 44, 8, 4, 232, 58, 8, 4, 232, 57, 8, 4, 232, 201, 8, + 4, 208, 8, 4, 232, 212, 8, 4, 231, 95, 8, 4, 231, 97, 8, 4, 231, 96, 8, + 4, 231, 184, 8, 4, 231, 173, 8, 4, 231, 204, 8, 4, 231, 191, 8, 4, 232, + 121, 8, 4, 232, 141, 8, 4, 232, 130, 8, 4, 231, 91, 8, 4, 231, 88, 8, 4, + 231, 144, 8, 4, 231, 94, 8, 4, 231, 92, 8, 4, 231, 93, 8, 4, 243, 77, 8, + 4, 243, 76, 8, 4, 243, 82, 8, 4, 243, 78, 8, 4, 243, 79, 8, 4, 243, 81, + 8, 4, 243, 80, 8, 4, 243, 87, 8, 4, 243, 86, 8, 4, 243, 89, 8, 4, 243, + 88, 8, 4, 243, 69, 8, 4, 243, 71, 8, 4, 243, 70, 8, 4, 243, 73, 8, 4, + 243, 75, 8, 4, 243, 74, 8, 4, 243, 83, 8, 4, 243, 85, 8, 4, 243, 84, 8, + 4, 243, 65, 8, 4, 243, 64, 8, 4, 243, 72, 8, 4, 243, 68, 8, 4, 243, 66, + 8, 4, 243, 67, 8, 4, 243, 59, 8, 4, 243, 58, 8, 4, 243, 63, 8, 4, 243, + 62, 8, 4, 243, 60, 8, 4, 243, 61, 8, 4, 235, 27, 8, 4, 235, 22, 8, 4, + 235, 67, 8, 4, 235, 32, 8, 4, 235, 61, 8, 4, 235, 60, 8, 4, 235, 63, 8, + 4, 235, 62, 8, 4, 235, 141, 8, 4, 235, 133, 8, 4, 235, 188, 8, 4, 235, + 147, 8, 4, 234, 214, 8, 4, 234, 213, 8, 4, 234, 216, 8, 4, 234, 215, 8, + 4, 234, 242, 8, 4, 234, 236, 8, 4, 235, 12, 8, 4, 234, 245, 8, 4, 235, + 82, 8, 4, 235, 122, 8, 4, 235, 89, 8, 4, 234, 209, 8, 4, 234, 208, 8, 4, + 234, 231, 8, 4, 234, 212, 8, 4, 234, 210, 8, 4, 234, 211, 8, 4, 234, 191, + 8, 4, 234, 190, 8, 4, 234, 198, 8, 4, 234, 194, 8, 4, 234, 192, 8, 4, + 234, 193, 8, 4, 244, 80, 8, 4, 244, 79, 8, 4, 244, 103, 8, 4, 244, 89, 8, + 4, 244, 96, 8, 4, 244, 95, 8, 4, 244, 98, 8, 4, 244, 97, 8, 4, 244, 214, + 8, 4, 244, 209, 8, 4, 245, 0, 8, 4, 244, 223, 8, 4, 244, 0, 8, 4, 243, + 255, 8, 4, 244, 2, 8, 4, 244, 1, 8, 4, 244, 51, 8, 4, 244, 49, 8, 4, 244, + 68, 8, 4, 244, 59, 8, 4, 244, 164, 8, 4, 244, 162, 8, 4, 244, 191, 8, 4, + 244, 174, 8, 4, 243, 246, 8, 4, 243, 245, 8, 4, 244, 17, 8, 4, 243, 254, + 8, 4, 243, 247, 8, 4, 243, 253, 8, 4, 236, 89, 8, 4, 236, 88, 8, 4, 236, + 113, 8, 4, 236, 99, 8, 4, 236, 107, 8, 4, 236, 109, 8, 4, 236, 108, 8, 4, + 236, 203, 8, 4, 236, 192, 8, 4, 175, 8, 4, 236, 227, 8, 4, 235, 250, 8, + 4, 235, 252, 8, 4, 235, 251, 8, 4, 236, 31, 8, 4, 236, 27, 8, 4, 236, 57, + 8, 4, 236, 38, 8, 4, 236, 159, 8, 4, 236, 156, 8, 4, 236, 184, 8, 4, 236, + 162, 8, 4, 235, 240, 8, 4, 235, 238, 8, 4, 236, 7, 8, 4, 235, 249, 8, 4, + 235, 243, 8, 4, 235, 247, 8, 4, 244, 146, 8, 4, 244, 145, 8, 4, 244, 150, + 8, 4, 244, 147, 8, 4, 244, 149, 8, 4, 244, 148, 8, 4, 244, 157, 8, 4, + 244, 156, 8, 4, 244, 160, 8, 4, 244, 158, 8, 4, 244, 137, 8, 4, 244, 136, + 8, 4, 244, 139, 8, 4, 244, 138, 8, 4, 244, 142, 8, 4, 244, 141, 8, 4, + 244, 144, 8, 4, 244, 143, 8, 4, 244, 152, 8, 4, 244, 151, 8, 4, 244, 155, + 8, 4, 244, 153, 8, 4, 244, 132, 8, 4, 244, 131, 8, 4, 244, 140, 8, 4, + 244, 135, 8, 4, 244, 133, 8, 4, 244, 134, 8, 4, 233, 214, 8, 4, 233, 215, + 8, 4, 233, 227, 8, 4, 233, 226, 8, 4, 233, 229, 8, 4, 233, 228, 8, 4, + 233, 205, 8, 4, 233, 207, 8, 4, 233, 206, 8, 4, 233, 210, 8, 4, 233, 209, + 8, 4, 233, 212, 8, 4, 233, 211, 8, 4, 233, 216, 8, 4, 233, 218, 8, 4, + 233, 217, 8, 4, 233, 201, 8, 4, 233, 200, 8, 4, 233, 208, 8, 4, 233, 204, + 8, 4, 233, 202, 8, 4, 233, 203, 8, 4, 242, 133, 8, 4, 242, 132, 8, 4, + 242, 139, 8, 4, 242, 134, 8, 4, 242, 136, 8, 4, 242, 135, 8, 4, 242, 138, + 8, 4, 242, 137, 8, 4, 242, 144, 8, 4, 242, 143, 8, 4, 242, 146, 8, 4, + 242, 145, 8, 4, 242, 125, 8, 4, 242, 124, 8, 4, 242, 127, 8, 4, 242, 126, + 8, 4, 242, 129, 8, 4, 242, 128, 8, 4, 242, 131, 8, 4, 242, 130, 8, 4, + 242, 140, 8, 4, 242, 142, 8, 4, 242, 141, 8, 4, 232, 89, 8, 4, 232, 91, + 8, 4, 232, 90, 8, 4, 232, 108, 8, 4, 232, 107, 8, 4, 232, 115, 8, 4, 232, + 110, 8, 4, 232, 71, 8, 4, 232, 70, 8, 4, 232, 72, 8, 4, 232, 78, 8, 4, + 232, 75, 8, 4, 232, 84, 8, 4, 232, 79, 8, 4, 232, 102, 8, 4, 232, 106, 8, + 4, 232, 103, 8, 4, 243, 92, 8, 4, 243, 100, 8, 4, 243, 108, 8, 4, 243, + 173, 8, 4, 243, 167, 8, 4, 155, 8, 4, 243, 183, 8, 4, 242, 157, 8, 4, + 242, 156, 8, 4, 242, 159, 8, 4, 242, 158, 8, 4, 242, 186, 8, 4, 242, 181, + 8, 4, 243, 4, 8, 4, 242, 244, 8, 4, 243, 125, 8, 4, 243, 162, 8, 4, 243, + 135, 8, 4, 218, 243, 8, 4, 218, 231, 8, 4, 219, 7, 8, 4, 218, 251, 8, 4, + 218, 157, 8, 4, 218, 159, 8, 4, 218, 158, 8, 4, 218, 170, 8, 4, 218, 187, + 8, 4, 218, 175, 8, 4, 218, 214, 8, 4, 218, 227, 8, 4, 218, 218, 8, 4, + 217, 28, 8, 4, 217, 27, 8, 4, 217, 42, 8, 4, 217, 30, 8, 4, 217, 35, 8, + 4, 217, 37, 8, 4, 217, 36, 8, 4, 217, 100, 8, 4, 217, 97, 8, 4, 217, 114, + 8, 4, 217, 103, 8, 4, 217, 6, 8, 4, 217, 8, 8, 4, 217, 7, 8, 4, 217, 17, + 8, 4, 217, 16, 8, 4, 217, 21, 8, 4, 217, 18, 8, 4, 217, 82, 8, 4, 217, + 92, 8, 4, 217, 86, 8, 4, 217, 2, 8, 4, 217, 1, 8, 4, 217, 13, 8, 4, 217, + 5, 8, 4, 217, 3, 8, 4, 217, 4, 8, 4, 216, 249, 8, 4, 216, 248, 8, 4, 216, + 254, 8, 4, 216, 252, 8, 4, 216, 250, 8, 4, 216, 251, 8, 4, 250, 215, 8, + 4, 250, 212, 8, 4, 250, 235, 8, 4, 250, 223, 8, 4, 250, 232, 8, 4, 250, + 226, 8, 4, 250, 234, 8, 4, 250, 233, 8, 4, 251, 124, 8, 4, 251, 118, 8, + 4, 251, 169, 8, 4, 251, 143, 8, 4, 250, 84, 8, 4, 250, 86, 8, 4, 250, 85, + 8, 4, 250, 116, 8, 4, 250, 109, 8, 4, 250, 182, 8, 4, 250, 129, 8, 4, + 251, 71, 8, 4, 251, 99, 8, 4, 251, 75, 8, 4, 250, 68, 8, 4, 250, 67, 8, + 4, 250, 92, 8, 4, 250, 82, 8, 4, 250, 71, 8, 4, 250, 81, 8, 4, 250, 49, + 8, 4, 250, 48, 8, 4, 250, 58, 8, 4, 250, 55, 8, 4, 250, 50, 8, 4, 250, + 52, 8, 4, 216, 232, 8, 4, 216, 231, 8, 4, 216, 238, 8, 4, 216, 233, 8, 4, + 216, 235, 8, 4, 216, 234, 8, 4, 216, 237, 8, 4, 216, 236, 8, 4, 216, 244, + 8, 4, 216, 243, 8, 4, 216, 247, 8, 4, 216, 245, 8, 4, 216, 228, 8, 4, + 216, 230, 8, 4, 216, 229, 8, 4, 216, 239, 8, 4, 216, 242, 8, 4, 216, 240, + 8, 4, 216, 223, 8, 4, 216, 227, 8, 4, 216, 226, 8, 4, 216, 224, 8, 4, + 216, 225, 8, 4, 216, 218, 8, 4, 216, 217, 8, 4, 216, 222, 8, 4, 216, 221, + 8, 4, 216, 219, 8, 4, 216, 220, 8, 4, 231, 31, 8, 4, 231, 30, 8, 4, 231, + 36, 8, 4, 231, 32, 8, 4, 231, 33, 8, 4, 231, 35, 8, 4, 231, 34, 8, 4, + 231, 40, 8, 4, 231, 39, 8, 4, 231, 42, 8, 4, 231, 41, 8, 4, 231, 25, 8, + 4, 231, 26, 8, 4, 231, 28, 8, 4, 231, 29, 8, 4, 231, 37, 8, 4, 231, 38, + 8, 4, 231, 21, 8, 4, 231, 27, 8, 4, 231, 24, 8, 4, 231, 22, 8, 4, 231, + 23, 8, 4, 231, 16, 8, 4, 231, 15, 8, 4, 231, 20, 8, 4, 231, 19, 8, 4, + 231, 17, 8, 4, 231, 18, 8, 4, 224, 84, 8, 4, 182, 8, 4, 224, 140, 8, 4, + 224, 86, 8, 4, 224, 133, 8, 4, 224, 135, 8, 4, 224, 134, 8, 4, 226, 127, + 8, 4, 226, 120, 8, 4, 226, 177, 8, 4, 226, 133, 8, 4, 223, 63, 8, 4, 223, + 65, 8, 4, 223, 64, 8, 4, 224, 12, 8, 4, 224, 2, 8, 4, 224, 26, 8, 4, 224, + 13, 8, 4, 225, 36, 8, 4, 226, 94, 8, 4, 225, 56, 8, 4, 223, 44, 8, 4, + 223, 42, 8, 4, 223, 103, 8, 4, 223, 62, 8, 4, 223, 46, 8, 4, 223, 53, 8, + 4, 222, 215, 8, 4, 222, 214, 8, 4, 223, 21, 8, 4, 222, 220, 8, 4, 222, + 216, 8, 4, 222, 219, 8, 4, 223, 184, 8, 4, 223, 183, 8, 4, 223, 189, 8, + 4, 223, 185, 8, 4, 223, 186, 8, 4, 223, 188, 8, 4, 223, 187, 8, 4, 223, + 196, 8, 4, 223, 195, 8, 4, 223, 218, 8, 4, 223, 197, 8, 4, 223, 180, 8, + 4, 223, 179, 8, 4, 223, 182, 8, 4, 223, 181, 8, 4, 223, 191, 8, 4, 223, + 194, 8, 4, 223, 192, 8, 4, 223, 176, 8, 4, 223, 175, 8, 4, 223, 178, 8, + 4, 223, 177, 8, 4, 223, 170, 8, 4, 223, 169, 8, 4, 223, 174, 8, 4, 223, + 173, 8, 4, 223, 171, 8, 4, 223, 172, 8, 4, 217, 75, 8, 4, 217, 74, 8, 4, + 217, 80, 8, 4, 217, 77, 8, 4, 217, 57, 8, 4, 217, 59, 8, 4, 217, 58, 8, + 4, 217, 62, 8, 4, 217, 61, 8, 4, 217, 65, 8, 4, 217, 63, 8, 4, 217, 69, + 8, 4, 217, 68, 8, 4, 217, 72, 8, 4, 217, 70, 8, 4, 217, 53, 8, 4, 217, + 52, 8, 4, 217, 60, 8, 4, 217, 56, 8, 4, 217, 54, 8, 4, 217, 55, 8, 4, + 217, 45, 8, 4, 217, 44, 8, 4, 217, 49, 8, 4, 217, 48, 8, 4, 217, 46, 8, + 4, 217, 47, 8, 4, 251, 51, 8, 4, 251, 48, 8, 4, 251, 69, 8, 4, 251, 57, + 8, 4, 250, 249, 8, 4, 250, 248, 8, 4, 250, 251, 8, 4, 250, 250, 8, 4, + 251, 5, 8, 4, 251, 4, 8, 4, 251, 11, 8, 4, 251, 7, 8, 4, 251, 36, 8, 4, + 251, 34, 8, 4, 251, 46, 8, 4, 251, 38, 8, 4, 250, 243, 8, 4, 250, 253, 8, + 4, 250, 247, 8, 4, 250, 244, 8, 4, 250, 246, 8, 4, 250, 237, 8, 4, 250, + 236, 8, 4, 250, 241, 8, 4, 250, 240, 8, 4, 250, 238, 8, 4, 250, 239, 8, + 4, 227, 51, 8, 4, 227, 52, 8, 4, 227, 38, 8, 4, 227, 39, 8, 4, 227, 42, + 8, 4, 227, 41, 8, 4, 227, 44, 8, 4, 227, 43, 8, 4, 227, 46, 8, 4, 227, + 45, 8, 4, 227, 50, 8, 4, 227, 47, 8, 4, 227, 34, 8, 4, 227, 33, 8, 4, + 227, 40, 8, 4, 227, 37, 8, 4, 227, 35, 8, 4, 227, 36, 8, 4, 227, 28, 8, + 4, 227, 27, 8, 4, 227, 32, 8, 4, 227, 31, 8, 4, 227, 29, 8, 4, 227, 30, + 8, 4, 231, 169, 8, 4, 231, 168, 8, 4, 231, 171, 8, 4, 231, 170, 8, 4, + 231, 161, 8, 4, 231, 163, 8, 4, 231, 162, 8, 4, 231, 165, 8, 4, 231, 164, + 8, 4, 231, 167, 8, 4, 231, 166, 8, 4, 231, 156, 8, 4, 231, 155, 8, 4, + 231, 160, 8, 4, 231, 159, 8, 4, 231, 157, 8, 4, 231, 158, 8, 4, 231, 150, + 8, 4, 231, 149, 8, 4, 231, 154, 8, 4, 231, 153, 8, 4, 231, 151, 8, 4, + 231, 152, 8, 4, 224, 253, 8, 4, 224, 250, 8, 4, 225, 25, 8, 4, 225, 7, 8, + 4, 224, 163, 8, 4, 224, 165, 8, 4, 224, 164, 8, 4, 224, 178, 8, 4, 224, + 176, 8, 4, 224, 200, 8, 4, 224, 193, 8, 4, 224, 226, 8, 4, 224, 223, 8, + 4, 224, 246, 8, 4, 224, 233, 8, 4, 224, 159, 8, 4, 224, 158, 8, 4, 224, + 170, 8, 4, 224, 162, 8, 4, 224, 160, 8, 4, 224, 161, 8, 4, 224, 143, 8, + 4, 224, 142, 8, 4, 224, 149, 8, 4, 224, 146, 8, 4, 224, 144, 8, 4, 224, + 145, 8, 4, 227, 228, 8, 4, 227, 223, 8, 4, 203, 8, 4, 227, 233, 8, 4, + 227, 6, 8, 4, 227, 8, 8, 4, 227, 7, 8, 4, 227, 60, 8, 4, 227, 54, 8, 4, + 227, 75, 8, 4, 227, 63, 8, 4, 227, 155, 8, 4, 227, 216, 8, 4, 227, 185, + 8, 4, 226, 255, 8, 4, 226, 253, 8, 4, 227, 22, 8, 4, 227, 5, 8, 4, 227, + 1, 8, 4, 227, 2, 8, 4, 226, 238, 8, 4, 226, 237, 8, 4, 226, 243, 8, 4, + 226, 241, 8, 4, 226, 239, 8, 4, 226, 240, 8, 4, 237, 89, 8, 4, 237, 88, + 8, 4, 237, 98, 8, 4, 237, 90, 8, 4, 237, 94, 8, 4, 237, 93, 8, 4, 237, + 96, 8, 4, 237, 95, 8, 4, 237, 34, 8, 4, 237, 33, 8, 4, 237, 36, 8, 4, + 237, 35, 8, 4, 237, 47, 8, 4, 237, 46, 8, 4, 237, 59, 8, 4, 237, 49, 8, + 4, 237, 28, 8, 4, 237, 26, 8, 4, 237, 43, 8, 4, 237, 32, 8, 4, 237, 29, + 8, 4, 237, 30, 8, 4, 237, 20, 8, 4, 237, 19, 8, 4, 237, 24, 8, 4, 237, + 23, 8, 4, 237, 21, 8, 4, 237, 22, 8, 4, 228, 114, 8, 4, 228, 112, 8, 4, + 228, 121, 8, 4, 228, 115, 8, 4, 228, 118, 8, 4, 228, 117, 8, 4, 228, 120, + 8, 4, 228, 119, 8, 4, 228, 70, 8, 4, 228, 67, 8, 4, 228, 72, 8, 4, 228, + 71, 8, 4, 228, 101, 8, 4, 228, 100, 8, 4, 228, 110, 8, 4, 228, 104, 8, 4, + 228, 62, 8, 4, 228, 58, 8, 4, 228, 98, 8, 4, 228, 66, 8, 4, 228, 64, 8, + 4, 228, 65, 8, 4, 228, 42, 8, 4, 228, 40, 8, 4, 228, 52, 8, 4, 228, 45, + 8, 4, 228, 43, 8, 4, 228, 44, 8, 4, 237, 78, 8, 4, 237, 77, 8, 4, 237, + 84, 8, 4, 237, 79, 8, 4, 237, 81, 8, 4, 237, 80, 8, 4, 237, 83, 8, 4, + 237, 82, 8, 4, 237, 69, 8, 4, 237, 71, 8, 4, 237, 70, 8, 4, 237, 74, 8, + 4, 237, 73, 8, 4, 237, 76, 8, 4, 237, 75, 8, 4, 237, 65, 8, 4, 237, 64, + 8, 4, 237, 72, 8, 4, 237, 68, 8, 4, 237, 66, 8, 4, 237, 67, 8, 4, 237, + 61, 8, 4, 237, 60, 8, 4, 237, 63, 8, 4, 237, 62, 8, 4, 232, 7, 8, 4, 232, + 6, 8, 4, 232, 13, 8, 4, 232, 8, 8, 4, 232, 10, 8, 4, 232, 9, 8, 4, 232, + 12, 8, 4, 232, 11, 8, 4, 231, 253, 8, 4, 231, 254, 8, 4, 232, 2, 8, 4, + 232, 1, 8, 4, 232, 5, 8, 4, 232, 3, 8, 4, 231, 249, 8, 4, 232, 0, 8, 4, + 231, 252, 8, 4, 231, 250, 8, 4, 231, 251, 8, 4, 231, 244, 8, 4, 231, 243, + 8, 4, 231, 248, 8, 4, 231, 247, 8, 4, 231, 245, 8, 4, 231, 246, 8, 4, + 231, 59, 8, 4, 231, 58, 8, 4, 231, 67, 8, 4, 231, 61, 8, 4, 231, 64, 8, + 4, 231, 63, 8, 4, 231, 66, 8, 4, 231, 65, 8, 4, 231, 47, 8, 4, 231, 49, + 8, 4, 231, 48, 8, 4, 231, 52, 8, 4, 231, 51, 8, 4, 231, 56, 8, 4, 231, + 53, 8, 4, 231, 45, 8, 4, 231, 44, 8, 4, 231, 50, 8, 4, 231, 46, 8, 4, + 218, 123, 8, 4, 218, 122, 8, 4, 218, 130, 8, 4, 218, 125, 8, 4, 218, 127, + 8, 4, 218, 126, 8, 4, 218, 129, 8, 4, 218, 128, 8, 4, 218, 112, 8, 4, + 218, 113, 8, 4, 218, 117, 8, 4, 218, 116, 8, 4, 218, 121, 8, 4, 218, 119, + 8, 4, 218, 94, 8, 4, 218, 92, 8, 4, 218, 104, 8, 4, 218, 97, 8, 4, 218, + 95, 8, 4, 218, 96, 8, 4, 217, 237, 8, 4, 217, 235, 8, 4, 217, 250, 8, 4, + 217, 238, 8, 4, 217, 245, 8, 4, 217, 244, 8, 4, 217, 247, 8, 4, 217, 246, + 8, 4, 217, 185, 8, 4, 217, 184, 8, 4, 217, 187, 8, 4, 217, 186, 8, 4, + 217, 212, 8, 4, 217, 209, 8, 4, 217, 231, 8, 4, 217, 215, 8, 4, 217, 177, + 8, 4, 217, 175, 8, 4, 217, 200, 8, 4, 217, 183, 8, 4, 217, 180, 8, 4, + 217, 181, 8, 4, 217, 160, 8, 4, 217, 159, 8, 4, 217, 166, 8, 4, 217, 163, + 8, 4, 217, 161, 8, 4, 217, 162, 8, 32, 228, 101, 8, 32, 235, 67, 8, 32, + 236, 89, 8, 32, 231, 61, 8, 32, 250, 55, 8, 32, 223, 189, 8, 32, 244, + 143, 8, 32, 244, 174, 8, 32, 233, 196, 8, 32, 242, 133, 8, 32, 234, 193, + 8, 32, 252, 152, 8, 32, 233, 115, 8, 32, 217, 231, 8, 32, 228, 185, 8, + 32, 242, 127, 8, 32, 222, 110, 8, 32, 245, 0, 8, 32, 217, 5, 8, 32, 250, + 49, 8, 32, 249, 97, 8, 32, 251, 228, 8, 32, 244, 139, 8, 32, 231, 53, 8, + 32, 221, 0, 8, 32, 230, 120, 8, 32, 237, 65, 8, 32, 217, 17, 8, 32, 228, + 167, 8, 32, 243, 44, 8, 32, 217, 237, 8, 32, 219, 53, 8, 32, 224, 149, 8, + 32, 219, 156, 8, 32, 217, 114, 8, 32, 237, 59, 8, 32, 231, 24, 8, 32, + 237, 63, 8, 32, 244, 51, 8, 32, 237, 83, 8, 32, 218, 187, 8, 32, 247, + 111, 8, 32, 224, 161, 8, 32, 235, 63, 8, 32, 250, 58, 8, 32, 250, 85, 8, + 32, 250, 223, 8, 32, 242, 130, 8, 32, 224, 253, 8, 32, 217, 4, 8, 32, + 224, 193, 8, 32, 251, 46, 8, 32, 216, 235, 8, 32, 232, 192, 8, 32, 236, + 184, 235, 28, 1, 252, 237, 235, 28, 1, 187, 235, 28, 1, 229, 141, 235, + 28, 1, 249, 207, 235, 28, 1, 222, 155, 235, 28, 1, 222, 35, 235, 28, 1, + 245, 0, 235, 28, 1, 175, 235, 28, 1, 236, 149, 235, 28, 1, 237, 123, 235, + 28, 1, 251, 169, 235, 28, 1, 251, 69, 235, 28, 1, 247, 74, 235, 28, 1, + 221, 55, 235, 28, 1, 221, 47, 235, 28, 1, 196, 235, 28, 1, 208, 235, 28, + 1, 235, 188, 235, 28, 1, 226, 177, 235, 28, 1, 217, 80, 235, 28, 1, 217, + 114, 235, 28, 1, 232, 115, 235, 28, 1, 155, 235, 28, 1, 218, 138, 235, + 28, 1, 243, 121, 235, 28, 1, 246, 8, 235, 28, 1, 219, 7, 235, 28, 1, 225, + 25, 235, 28, 1, 184, 235, 28, 1, 244, 125, 235, 28, 1, 60, 235, 28, 1, + 254, 234, 235, 28, 1, 73, 235, 28, 1, 246, 115, 235, 28, 1, 72, 235, 28, + 1, 74, 235, 28, 1, 68, 235, 28, 1, 220, 110, 235, 28, 1, 220, 105, 235, + 28, 1, 230, 167, 235, 28, 1, 145, 233, 40, 221, 205, 235, 28, 1, 145, + 232, 238, 229, 37, 235, 28, 1, 145, 233, 40, 250, 57, 235, 28, 1, 145, + 233, 40, 252, 41, 235, 28, 1, 145, 233, 40, 208, 235, 28, 1, 145, 233, + 40, 237, 104, 235, 28, 228, 197, 250, 168, 235, 28, 228, 197, 245, 90, + 223, 136, 38, 4, 246, 250, 38, 4, 246, 247, 38, 4, 243, 148, 38, 4, 218, + 224, 38, 4, 218, 223, 38, 4, 229, 191, 38, 4, 252, 91, 38, 4, 252, 137, + 38, 4, 234, 34, 38, 4, 236, 23, 38, 4, 233, 223, 38, 4, 244, 201, 38, 4, + 245, 226, 38, 4, 219, 160, 38, 4, 222, 80, 38, 4, 222, 21, 38, 4, 249, + 28, 38, 4, 249, 25, 38, 4, 235, 118, 38, 4, 227, 200, 38, 4, 249, 82, 38, + 4, 232, 163, 38, 4, 226, 84, 38, 4, 224, 244, 38, 4, 217, 90, 38, 4, 217, + 71, 38, 4, 251, 91, 38, 4, 237, 113, 38, 4, 232, 14, 38, 4, 218, 22, 38, + 4, 236, 183, 38, 4, 232, 98, 38, 4, 244, 184, 38, 4, 234, 16, 38, 4, 232, + 139, 38, 4, 231, 72, 38, 4, 72, 38, 4, 237, 223, 38, 4, 243, 112, 38, 4, + 243, 96, 38, 4, 218, 204, 38, 4, 218, 195, 38, 4, 229, 108, 38, 4, 252, + 89, 38, 4, 252, 84, 38, 4, 234, 32, 38, 4, 236, 21, 38, 4, 233, 222, 38, + 4, 244, 199, 38, 4, 245, 203, 38, 4, 219, 94, 38, 4, 221, 205, 38, 4, + 222, 2, 38, 4, 249, 20, 38, 4, 249, 24, 38, 4, 235, 67, 38, 4, 227, 147, + 38, 4, 249, 15, 38, 4, 232, 160, 38, 4, 224, 140, 38, 4, 224, 221, 38, 4, + 217, 42, 38, 4, 217, 67, 38, 4, 250, 235, 38, 4, 237, 98, 38, 4, 232, 13, + 38, 4, 217, 250, 38, 4, 236, 113, 38, 4, 232, 96, 38, 4, 244, 103, 38, 4, + 233, 196, 38, 4, 232, 62, 38, 4, 231, 67, 38, 4, 60, 38, 4, 254, 131, 38, + 4, 232, 111, 38, 4, 155, 38, 4, 243, 191, 38, 4, 219, 7, 38, 4, 218, 253, + 38, 4, 187, 38, 4, 252, 94, 38, 4, 252, 237, 38, 4, 234, 37, 38, 4, 236, + 26, 38, 4, 236, 25, 38, 4, 233, 225, 38, 4, 244, 204, 38, 4, 246, 8, 38, + 4, 219, 189, 38, 4, 222, 155, 38, 4, 222, 35, 38, 4, 249, 36, 38, 4, 249, + 27, 38, 4, 235, 188, 38, 4, 203, 38, 4, 249, 207, 38, 4, 232, 169, 38, 4, + 226, 177, 38, 4, 225, 25, 38, 4, 217, 114, 38, 4, 217, 80, 38, 4, 251, + 169, 38, 4, 237, 123, 38, 4, 232, 18, 38, 4, 184, 38, 4, 175, 38, 4, 236, + 233, 38, 4, 232, 100, 38, 4, 245, 0, 38, 4, 196, 38, 4, 208, 38, 4, 231, + 77, 38, 4, 230, 127, 38, 4, 230, 124, 38, 4, 242, 248, 38, 4, 218, 180, + 38, 4, 218, 176, 38, 4, 229, 21, 38, 4, 252, 87, 38, 4, 252, 34, 38, 4, + 234, 30, 38, 4, 236, 19, 38, 4, 233, 220, 38, 4, 244, 196, 38, 4, 245, + 134, 38, 4, 219, 64, 38, 4, 221, 122, 38, 4, 221, 236, 38, 4, 249, 18, + 38, 4, 249, 22, 38, 4, 234, 248, 38, 4, 227, 67, 38, 4, 248, 150, 38, 4, + 232, 152, 38, 4, 224, 14, 38, 4, 224, 195, 38, 4, 217, 19, 38, 4, 217, + 64, 38, 4, 250, 130, 38, 4, 237, 50, 38, 4, 232, 4, 38, 4, 217, 216, 38, + 4, 236, 41, 38, 4, 232, 94, 38, 4, 244, 60, 38, 4, 233, 119, 38, 4, 231, + 195, 38, 4, 231, 54, 38, 4, 68, 38, 4, 220, 87, 38, 4, 242, 173, 38, 4, + 242, 163, 38, 4, 218, 165, 38, 4, 218, 161, 38, 4, 228, 202, 38, 4, 252, + 86, 38, 4, 251, 248, 38, 4, 234, 29, 38, 4, 236, 18, 38, 4, 233, 219, 38, + 4, 244, 195, 38, 4, 245, 92, 38, 4, 219, 56, 38, 4, 221, 0, 38, 4, 221, + 223, 38, 4, 249, 16, 38, 4, 249, 21, 38, 4, 234, 231, 38, 4, 227, 22, 38, + 4, 247, 111, 38, 4, 232, 148, 38, 4, 223, 103, 38, 4, 224, 170, 38, 4, + 217, 13, 38, 4, 217, 60, 38, 4, 250, 92, 38, 4, 237, 43, 38, 4, 232, 0, + 38, 4, 217, 200, 38, 4, 236, 7, 38, 4, 232, 93, 38, 4, 244, 17, 38, 4, + 233, 99, 38, 4, 231, 144, 38, 4, 231, 50, 38, 4, 74, 38, 4, 230, 138, 38, + 4, 232, 81, 38, 4, 243, 4, 38, 4, 242, 249, 38, 4, 218, 187, 38, 4, 218, + 181, 38, 4, 229, 37, 38, 4, 252, 88, 38, 4, 252, 41, 38, 4, 234, 31, 38, + 4, 236, 20, 38, 4, 233, 221, 38, 4, 244, 198, 38, 4, 244, 197, 38, 4, + 245, 139, 38, 4, 219, 72, 38, 4, 101, 38, 4, 221, 239, 38, 4, 249, 19, + 38, 4, 249, 23, 38, 4, 235, 12, 38, 4, 227, 75, 38, 4, 248, 167, 38, 4, + 232, 154, 38, 4, 224, 26, 38, 4, 224, 200, 38, 4, 217, 21, 38, 4, 217, + 65, 38, 4, 250, 182, 38, 4, 237, 59, 38, 4, 232, 5, 38, 4, 217, 231, 38, + 4, 236, 57, 38, 4, 232, 95, 38, 4, 244, 68, 38, 4, 233, 136, 38, 4, 231, + 204, 38, 4, 231, 56, 38, 4, 73, 38, 4, 246, 197, 38, 4, 232, 104, 38, 4, + 243, 162, 38, 4, 243, 138, 38, 4, 218, 227, 38, 4, 218, 220, 38, 4, 229, + 198, 38, 4, 252, 92, 38, 4, 252, 144, 38, 4, 234, 35, 38, 4, 236, 24, 38, + 4, 236, 22, 38, 4, 233, 224, 38, 4, 244, 202, 38, 4, 244, 200, 38, 4, + 245, 231, 38, 4, 219, 165, 38, 4, 222, 87, 38, 4, 222, 22, 38, 4, 249, + 29, 38, 4, 249, 26, 38, 4, 235, 122, 38, 4, 227, 216, 38, 4, 249, 92, 38, + 4, 232, 164, 38, 4, 226, 94, 38, 4, 224, 246, 38, 4, 217, 92, 38, 4, 217, + 72, 38, 4, 251, 99, 38, 4, 237, 114, 38, 4, 232, 15, 38, 4, 218, 25, 38, + 4, 236, 184, 38, 4, 232, 99, 38, 4, 232, 97, 38, 4, 244, 191, 38, 4, 244, + 181, 38, 4, 234, 25, 38, 4, 232, 141, 38, 4, 231, 73, 38, 4, 232, 117, + 38, 4, 235, 93, 38, 250, 168, 38, 245, 90, 223, 136, 38, 228, 82, 78, 38, + 4, 232, 153, 246, 8, 38, 4, 232, 153, 175, 38, 4, 232, 153, 224, 14, 38, + 16, 245, 223, 38, 16, 236, 182, 38, 16, 221, 174, 38, 16, 232, 38, 38, + 16, 252, 205, 38, 16, 246, 7, 38, 16, 222, 152, 38, 16, 249, 165, 38, 16, + 248, 149, 38, 16, 235, 253, 38, 16, 221, 125, 38, 16, 248, 166, 38, 16, + 237, 51, 38, 20, 217, 84, 38, 20, 107, 38, 20, 103, 38, 20, 160, 38, 20, + 154, 38, 20, 174, 38, 20, 182, 38, 20, 191, 38, 20, 185, 38, 20, 190, 38, + 4, 232, 153, 196, 38, 4, 232, 153, 248, 167, 31, 6, 1, 217, 88, 31, 3, 1, + 217, 88, 31, 6, 1, 247, 71, 31, 3, 1, 247, 71, 31, 6, 1, 210, 247, 73, + 31, 3, 1, 210, 247, 73, 31, 6, 1, 237, 162, 31, 3, 1, 237, 162, 31, 6, 1, + 248, 181, 31, 3, 1, 248, 181, 31, 6, 1, 233, 123, 220, 102, 31, 3, 1, + 233, 123, 220, 102, 31, 6, 1, 252, 2, 230, 143, 31, 3, 1, 252, 2, 230, + 143, 31, 6, 1, 232, 123, 218, 11, 31, 3, 1, 232, 123, 218, 11, 31, 6, 1, + 218, 8, 2, 252, 234, 218, 11, 31, 3, 1, 218, 8, 2, 252, 234, 218, 11, 31, + 6, 1, 237, 160, 218, 36, 31, 3, 1, 237, 160, 218, 36, 31, 6, 1, 210, 217, + 200, 31, 3, 1, 210, 217, 200, 31, 6, 1, 237, 160, 60, 31, 3, 1, 237, 160, + 60, 31, 6, 1, 250, 197, 235, 25, 217, 178, 31, 3, 1, 250, 197, 235, 25, + 217, 178, 31, 6, 1, 252, 46, 217, 178, 31, 3, 1, 252, 46, 217, 178, 31, + 6, 1, 237, 160, 250, 197, 235, 25, 217, 178, 31, 3, 1, 237, 160, 250, + 197, 235, 25, 217, 178, 31, 6, 1, 217, 233, 31, 3, 1, 217, 233, 31, 6, 1, + 224, 21, 249, 92, 31, 3, 1, 224, 21, 249, 92, 31, 6, 1, 224, 21, 246, + 217, 31, 3, 1, 224, 21, 246, 217, 31, 6, 1, 224, 21, 246, 205, 31, 3, 1, + 224, 21, 246, 205, 31, 6, 1, 233, 127, 74, 31, 3, 1, 233, 127, 74, 31, 6, + 1, 252, 70, 74, 31, 3, 1, 252, 70, 74, 31, 6, 1, 51, 233, 127, 74, 31, 3, + 1, 51, 233, 127, 74, 31, 1, 233, 86, 74, 36, 31, 219, 42, 36, 31, 222, + 66, 233, 162, 55, 36, 31, 242, 162, 233, 162, 55, 36, 31, 221, 232, 233, + 162, 55, 224, 53, 253, 251, 36, 31, 236, 194, 36, 31, 229, 203, 31, 236, + 194, 31, 229, 203, 31, 6, 1, 247, 82, 31, 3, 1, 247, 82, 31, 6, 1, 247, + 64, 31, 3, 1, 247, 64, 31, 6, 1, 217, 50, 31, 3, 1, 217, 50, 31, 6, 1, + 251, 108, 31, 3, 1, 251, 108, 31, 6, 1, 247, 63, 31, 3, 1, 247, 63, 31, + 6, 1, 222, 88, 2, 233, 193, 96, 31, 3, 1, 222, 88, 2, 233, 193, 96, 31, + 6, 1, 220, 223, 31, 3, 1, 220, 223, 31, 6, 1, 221, 33, 31, 3, 1, 221, 33, + 31, 6, 1, 221, 37, 31, 3, 1, 221, 37, 31, 6, 1, 222, 93, 31, 3, 1, 222, + 93, 31, 6, 1, 242, 151, 31, 3, 1, 242, 151, 31, 6, 1, 224, 155, 31, 3, 1, + 224, 155, 139, 1, 60, 139, 1, 175, 139, 1, 68, 139, 1, 236, 7, 139, 1, + 246, 250, 139, 1, 227, 200, 139, 1, 222, 142, 139, 1, 74, 139, 1, 231, + 67, 139, 1, 72, 139, 1, 235, 188, 139, 1, 187, 139, 1, 227, 98, 139, 1, + 227, 143, 139, 1, 235, 117, 139, 1, 234, 15, 139, 1, 222, 152, 139, 1, + 232, 168, 139, 1, 232, 17, 139, 1, 189, 139, 1, 223, 43, 139, 1, 233, 99, + 139, 1, 224, 216, 139, 1, 224, 140, 139, 1, 224, 225, 139, 1, 225, 44, + 139, 1, 235, 208, 139, 1, 236, 159, 139, 1, 231, 116, 139, 1, 231, 144, + 139, 1, 231, 255, 139, 1, 217, 214, 139, 1, 224, 170, 139, 1, 217, 182, + 139, 1, 184, 139, 1, 231, 147, 139, 1, 236, 157, 139, 1, 229, 145, 139, + 1, 232, 14, 139, 1, 231, 146, 139, 1, 228, 199, 139, 1, 218, 164, 139, 1, + 229, 191, 139, 1, 245, 226, 139, 1, 227, 22, 139, 1, 234, 231, 139, 1, + 233, 196, 139, 1, 232, 62, 139, 1, 227, 161, 139, 1, 227, 249, 139, 1, + 236, 168, 139, 1, 232, 86, 139, 1, 232, 100, 139, 1, 232, 115, 139, 1, + 224, 200, 139, 1, 228, 200, 139, 1, 245, 92, 139, 1, 245, 136, 139, 1, + 219, 7, 139, 1, 208, 139, 1, 235, 67, 139, 1, 229, 108, 139, 1, 234, 244, + 139, 1, 236, 57, 139, 1, 234, 33, 139, 1, 227, 187, 139, 1, 233, 251, + 139, 1, 196, 139, 1, 221, 205, 139, 1, 236, 113, 139, 1, 233, 136, 139, + 1, 234, 36, 139, 1, 222, 50, 139, 1, 236, 26, 139, 1, 222, 65, 139, 1, + 231, 145, 139, 1, 226, 147, 139, 1, 246, 4, 139, 1, 236, 28, 139, 1, 236, + 54, 139, 36, 164, 236, 36, 139, 36, 164, 220, 250, 139, 232, 16, 139, + 245, 90, 223, 136, 139, 250, 175, 139, 250, 168, 139, 225, 67, 139, 228, + 82, 78, 58, 1, 251, 21, 145, 217, 241, 229, 72, 58, 1, 251, 21, 145, 218, + 46, 229, 72, 58, 1, 251, 21, 145, 217, 241, 225, 8, 58, 1, 251, 21, 145, + 218, 46, 225, 8, 58, 1, 251, 21, 145, 217, 241, 228, 98, 58, 1, 251, 21, + 145, 218, 46, 228, 98, 58, 1, 251, 21, 145, 217, 241, 227, 22, 58, 1, + 251, 21, 145, 218, 46, 227, 22, 58, 1, 246, 85, 247, 143, 145, 135, 58, + 1, 116, 247, 143, 145, 135, 58, 1, 233, 194, 247, 143, 145, 135, 58, 1, + 109, 247, 143, 145, 135, 58, 1, 246, 84, 247, 143, 145, 135, 58, 1, 246, + 85, 247, 143, 235, 109, 145, 135, 58, 1, 116, 247, 143, 235, 109, 145, + 135, 58, 1, 233, 194, 247, 143, 235, 109, 145, 135, 58, 1, 109, 247, 143, + 235, 109, 145, 135, 58, 1, 246, 84, 247, 143, 235, 109, 145, 135, 58, 1, + 246, 85, 235, 109, 145, 135, 58, 1, 116, 235, 109, 145, 135, 58, 1, 233, + 194, 235, 109, 145, 135, 58, 1, 109, 235, 109, 145, 135, 58, 1, 246, 84, + 235, 109, 145, 135, 58, 1, 61, 69, 135, 58, 1, 61, 224, 55, 58, 1, 61, + 186, 135, 58, 1, 234, 237, 45, 250, 124, 254, 119, 58, 1, 227, 241, 108, + 65, 58, 1, 227, 241, 113, 65, 58, 1, 227, 241, 246, 95, 78, 58, 1, 227, + 241, 237, 170, 246, 95, 78, 58, 1, 109, 237, 170, 246, 95, 78, 58, 1, + 223, 125, 25, 116, 221, 132, 58, 1, 223, 125, 25, 109, 221, 132, 7, 6, 1, + 246, 241, 254, 168, 7, 3, 1, 246, 241, 254, 168, 7, 6, 1, 246, 241, 254, + 191, 7, 3, 1, 246, 241, 254, 191, 7, 6, 1, 243, 136, 7, 3, 1, 243, 136, + 7, 6, 1, 220, 189, 7, 3, 1, 220, 189, 7, 6, 1, 221, 94, 7, 3, 1, 221, 94, + 7, 6, 1, 250, 90, 7, 3, 1, 250, 90, 7, 6, 1, 250, 91, 2, 250, 168, 7, 3, + 1, 250, 91, 2, 250, 168, 7, 1, 3, 6, 246, 74, 7, 1, 3, 6, 198, 7, 6, 1, + 255, 58, 7, 3, 1, 255, 58, 7, 6, 1, 254, 93, 7, 3, 1, 254, 93, 7, 6, 1, + 253, 232, 7, 3, 1, 253, 232, 7, 6, 1, 253, 220, 7, 3, 1, 253, 220, 7, 6, + 1, 253, 221, 2, 186, 135, 7, 3, 1, 253, 221, 2, 186, 135, 7, 6, 1, 253, + 212, 7, 3, 1, 253, 212, 7, 6, 1, 210, 251, 203, 2, 248, 145, 7, 3, 1, + 210, 251, 203, 2, 248, 145, 7, 6, 1, 237, 18, 2, 92, 7, 3, 1, 237, 18, 2, + 92, 7, 6, 1, 237, 18, 2, 249, 11, 92, 7, 3, 1, 237, 18, 2, 249, 11, 92, + 7, 6, 1, 237, 18, 2, 214, 25, 249, 11, 92, 7, 3, 1, 237, 18, 2, 214, 25, + 249, 11, 92, 7, 6, 1, 252, 1, 153, 7, 3, 1, 252, 1, 153, 7, 6, 1, 235, + 202, 2, 116, 92, 7, 3, 1, 235, 202, 2, 116, 92, 7, 6, 1, 142, 2, 171, + 214, 230, 74, 7, 3, 1, 142, 2, 171, 214, 230, 74, 7, 6, 1, 142, 2, 234, + 247, 7, 3, 1, 142, 2, 234, 247, 7, 6, 1, 230, 127, 7, 3, 1, 230, 127, 7, + 6, 1, 230, 60, 2, 214, 221, 225, 249, 48, 7, 3, 1, 230, 60, 2, 214, 221, + 225, 249, 48, 7, 6, 1, 230, 60, 2, 245, 146, 7, 3, 1, 230, 60, 2, 245, + 146, 7, 6, 1, 230, 60, 2, 223, 222, 222, 135, 7, 3, 1, 230, 60, 2, 223, + 222, 222, 135, 7, 6, 1, 228, 164, 2, 214, 221, 225, 249, 48, 7, 3, 1, + 228, 164, 2, 214, 221, 225, 249, 48, 7, 6, 1, 228, 164, 2, 249, 11, 92, + 7, 3, 1, 228, 164, 2, 249, 11, 92, 7, 6, 1, 228, 39, 227, 58, 7, 3, 1, + 228, 39, 227, 58, 7, 6, 1, 227, 14, 227, 58, 7, 3, 1, 227, 14, 227, 58, + 7, 6, 1, 220, 11, 2, 249, 11, 92, 7, 3, 1, 220, 11, 2, 249, 11, 92, 7, 6, + 1, 219, 48, 7, 3, 1, 219, 48, 7, 6, 1, 219, 75, 217, 157, 7, 3, 1, 219, + 75, 217, 157, 7, 6, 1, 221, 235, 2, 92, 7, 3, 1, 221, 235, 2, 92, 7, 6, + 1, 221, 235, 2, 214, 221, 225, 249, 48, 7, 3, 1, 221, 235, 2, 214, 221, + 225, 249, 48, 7, 6, 1, 219, 157, 7, 3, 1, 219, 157, 7, 6, 1, 246, 123, 7, + 3, 1, 246, 123, 7, 6, 1, 237, 151, 7, 3, 1, 237, 151, 7, 6, 1, 250, 158, + 7, 3, 1, 250, 158, 58, 1, 220, 34, 7, 3, 1, 247, 102, 7, 3, 1, 234, 219, + 7, 3, 1, 233, 80, 7, 3, 1, 231, 109, 7, 3, 1, 227, 13, 7, 1, 3, 6, 227, + 13, 7, 3, 1, 220, 249, 7, 3, 1, 220, 94, 7, 6, 1, 237, 188, 250, 46, 7, + 3, 1, 237, 188, 250, 46, 7, 6, 1, 237, 188, 246, 74, 7, 3, 1, 237, 188, + 246, 74, 7, 6, 1, 237, 188, 245, 67, 7, 6, 1, 215, 237, 188, 245, 67, 7, + 3, 1, 215, 237, 188, 245, 67, 7, 6, 1, 215, 153, 7, 3, 1, 215, 153, 7, 6, + 1, 237, 188, 152, 7, 3, 1, 237, 188, 152, 7, 6, 1, 237, 188, 198, 7, 3, + 1, 237, 188, 198, 7, 6, 1, 237, 188, 222, 201, 7, 3, 1, 237, 188, 222, + 201, 58, 1, 109, 250, 217, 255, 0, 58, 1, 250, 175, 58, 1, 224, 192, 246, + 154, 55, 7, 6, 1, 226, 150, 7, 3, 1, 226, 150, 7, 246, 158, 1, 210, 246, + 74, 7, 246, 158, 1, 210, 230, 59, 7, 246, 158, 1, 237, 170, 189, 7, 246, + 158, 1, 242, 107, 234, 250, 7, 246, 158, 1, 254, 49, 189, 223, 19, 232, + 225, 1, 60, 223, 19, 232, 225, 1, 72, 223, 19, 232, 225, 5, 247, 84, 223, + 19, 232, 225, 1, 68, 223, 19, 232, 225, 1, 73, 223, 19, 232, 225, 1, 74, + 223, 19, 232, 225, 5, 243, 175, 223, 19, 232, 225, 1, 236, 57, 223, 19, + 232, 225, 1, 236, 125, 223, 19, 232, 225, 1, 244, 68, 223, 19, 232, 225, + 1, 244, 112, 223, 19, 232, 225, 5, 254, 95, 223, 19, 232, 225, 1, 250, + 182, 223, 19, 232, 225, 1, 251, 11, 223, 19, 232, 225, 1, 237, 59, 223, + 19, 232, 225, 1, 237, 99, 223, 19, 232, 225, 1, 221, 11, 223, 19, 232, + 225, 1, 221, 15, 223, 19, 232, 225, 1, 249, 107, 223, 19, 232, 225, 1, + 249, 115, 223, 19, 232, 225, 1, 101, 223, 19, 232, 225, 1, 221, 239, 223, + 19, 232, 225, 1, 248, 167, 223, 19, 232, 225, 1, 249, 19, 223, 19, 232, + 225, 1, 231, 204, 223, 19, 232, 225, 1, 229, 37, 223, 19, 232, 225, 1, + 229, 118, 223, 19, 232, 225, 1, 252, 41, 223, 19, 232, 225, 1, 252, 88, + 223, 19, 232, 225, 1, 233, 136, 223, 19, 232, 225, 1, 227, 75, 223, 19, + 232, 225, 1, 235, 12, 223, 19, 232, 225, 1, 227, 44, 223, 19, 232, 225, + 1, 224, 26, 223, 19, 232, 225, 1, 243, 4, 223, 19, 232, 225, 29, 5, 60, + 223, 19, 232, 225, 29, 5, 72, 223, 19, 232, 225, 29, 5, 68, 223, 19, 232, + 225, 29, 5, 73, 223, 19, 232, 225, 29, 5, 230, 127, 223, 19, 232, 225, + 229, 33, 234, 67, 223, 19, 232, 225, 229, 33, 234, 66, 223, 19, 232, 225, + 229, 33, 234, 65, 223, 19, 232, 225, 229, 33, 234, 64, 231, 187, 237, + 212, 245, 108, 131, 228, 89, 231, 187, 237, 212, 245, 108, 131, 243, 194, + 231, 187, 237, 212, 245, 108, 148, 228, 87, 231, 187, 237, 212, 245, 108, + 131, 224, 75, 231, 187, 237, 212, 245, 108, 131, 246, 231, 231, 187, 237, + 212, 245, 108, 148, 224, 74, 231, 187, 237, 212, 228, 90, 78, 231, 187, + 237, 212, 229, 56, 78, 231, 187, 237, 212, 227, 4, 78, 231, 187, 237, + 212, 228, 91, 78, 229, 138, 1, 175, 229, 138, 1, 236, 149, 229, 138, 1, + 245, 0, 229, 138, 1, 232, 115, 229, 138, 1, 251, 169, 229, 138, 1, 251, + 69, 229, 138, 1, 237, 123, 229, 138, 1, 231, 77, 229, 138, 1, 222, 155, + 229, 138, 1, 222, 35, 229, 138, 1, 249, 207, 229, 138, 1, 208, 229, 138, + 1, 187, 229, 138, 1, 229, 141, 229, 138, 1, 252, 237, 229, 138, 1, 196, + 229, 138, 1, 221, 55, 229, 138, 1, 221, 47, 229, 138, 1, 247, 74, 229, + 138, 1, 219, 7, 229, 138, 1, 217, 80, 229, 138, 1, 217, 114, 229, 138, 1, + 3, 60, 229, 138, 1, 184, 229, 138, 1, 203, 229, 138, 1, 235, 188, 229, + 138, 1, 225, 25, 229, 138, 1, 226, 177, 229, 138, 1, 155, 229, 138, 1, + 60, 229, 138, 1, 72, 229, 138, 1, 68, 229, 138, 1, 73, 229, 138, 1, 74, + 229, 138, 1, 228, 155, 229, 138, 1, 218, 138, 229, 138, 1, 246, 8, 229, + 138, 1, 244, 160, 229, 138, 1, 246, 250, 229, 138, 223, 97, 1, 219, 7, + 229, 138, 223, 97, 1, 184, 229, 138, 1, 221, 29, 229, 138, 1, 221, 19, + 229, 138, 1, 249, 132, 229, 138, 1, 231, 217, 229, 138, 1, 254, 144, 184, + 229, 138, 1, 219, 69, 225, 25, 229, 138, 1, 219, 70, 155, 229, 138, 1, + 254, 1, 246, 8, 229, 138, 223, 97, 1, 203, 229, 138, 223, 61, 1, 203, + 229, 138, 1, 251, 146, 229, 138, 224, 109, 243, 160, 78, 229, 138, 51, + 243, 160, 78, 229, 138, 164, 225, 18, 229, 138, 164, 51, 225, 18, 158, 5, + 254, 95, 158, 5, 219, 77, 158, 1, 60, 158, 1, 255, 58, 158, 1, 72, 158, + 1, 237, 255, 158, 1, 68, 158, 1, 220, 23, 158, 1, 167, 152, 158, 1, 167, + 227, 53, 158, 1, 167, 153, 158, 1, 167, 235, 18, 158, 1, 73, 158, 1, 246, + 250, 158, 1, 254, 196, 158, 1, 74, 158, 1, 230, 127, 158, 1, 253, 232, + 158, 1, 175, 158, 1, 236, 149, 158, 1, 245, 0, 158, 1, 244, 125, 158, 1, + 232, 115, 158, 1, 251, 169, 158, 1, 251, 69, 158, 1, 237, 123, 158, 1, + 237, 103, 158, 1, 231, 77, 158, 1, 221, 29, 158, 1, 221, 19, 158, 1, 249, + 132, 158, 1, 249, 116, 158, 1, 231, 217, 158, 1, 222, 155, 158, 1, 222, + 35, 158, 1, 249, 207, 158, 1, 249, 36, 158, 1, 208, 158, 1, 187, 158, 1, + 229, 141, 158, 1, 252, 237, 158, 1, 252, 94, 158, 1, 196, 158, 1, 184, + 158, 1, 203, 158, 1, 235, 188, 158, 1, 219, 189, 158, 1, 225, 25, 158, 1, + 223, 218, 158, 1, 226, 177, 158, 1, 155, 158, 1, 235, 17, 158, 250, 147, + 5, 243, 209, 158, 29, 5, 255, 58, 158, 29, 5, 72, 158, 29, 5, 237, 255, + 158, 29, 5, 68, 158, 29, 5, 220, 23, 158, 29, 5, 167, 152, 158, 29, 5, + 167, 227, 53, 158, 29, 5, 167, 153, 158, 29, 5, 167, 235, 18, 158, 29, 5, + 73, 158, 29, 5, 246, 250, 158, 29, 5, 254, 196, 158, 29, 5, 74, 158, 29, + 5, 230, 127, 158, 29, 5, 253, 232, 158, 5, 219, 82, 158, 249, 167, 158, + 51, 249, 167, 158, 20, 217, 84, 158, 20, 107, 158, 20, 103, 158, 20, 160, + 158, 20, 154, 158, 20, 174, 158, 20, 182, 158, 20, 191, 158, 20, 185, + 158, 20, 190, 36, 80, 20, 217, 84, 36, 80, 20, 107, 36, 80, 20, 103, 36, + 80, 20, 160, 36, 80, 20, 154, 36, 80, 20, 174, 36, 80, 20, 182, 36, 80, + 20, 191, 36, 80, 20, 185, 36, 80, 20, 190, 36, 80, 1, 60, 36, 80, 1, 68, + 36, 80, 1, 175, 36, 80, 1, 208, 36, 80, 1, 187, 36, 80, 1, 203, 36, 80, + 1, 219, 94, 36, 80, 5, 253, 219, 80, 5, 223, 253, 251, 146, 80, 5, 251, + 147, 219, 82, 80, 5, 51, 251, 147, 219, 82, 80, 5, 251, 147, 103, 80, 5, + 251, 147, 160, 80, 5, 251, 147, 253, 219, 80, 5, 228, 186, 80, 244, 224, + 245, 185, 80, 251, 134, 80, 243, 155, 236, 190, 235, 68, 20, 217, 84, + 236, 190, 235, 68, 20, 107, 236, 190, 235, 68, 20, 103, 236, 190, 235, + 68, 20, 160, 236, 190, 235, 68, 20, 154, 236, 190, 235, 68, 20, 174, 236, + 190, 235, 68, 20, 182, 236, 190, 235, 68, 20, 191, 236, 190, 235, 68, 20, + 185, 236, 190, 235, 68, 20, 190, 236, 190, 235, 68, 1, 175, 236, 190, + 235, 68, 1, 236, 149, 236, 190, 235, 68, 1, 245, 0, 236, 190, 235, 68, 1, + 232, 115, 236, 190, 235, 68, 1, 226, 177, 236, 190, 235, 68, 1, 225, 25, + 236, 190, 235, 68, 1, 217, 114, 236, 190, 235, 68, 1, 231, 77, 236, 190, + 235, 68, 1, 222, 155, 236, 190, 235, 68, 1, 242, 175, 236, 190, 235, 68, + 1, 208, 236, 190, 235, 68, 1, 187, 236, 190, 235, 68, 1, 229, 141, 236, + 190, 235, 68, 1, 196, 236, 190, 235, 68, 1, 249, 207, 236, 190, 235, 68, + 1, 252, 237, 236, 190, 235, 68, 1, 203, 236, 190, 235, 68, 1, 184, 236, + 190, 235, 68, 1, 235, 188, 236, 190, 235, 68, 1, 219, 7, 236, 190, 235, + 68, 1, 222, 35, 236, 190, 235, 68, 1, 155, 236, 190, 235, 68, 1, 219, + 189, 236, 190, 235, 68, 1, 251, 169, 236, 190, 235, 68, 1, 60, 236, 190, + 235, 68, 1, 230, 167, 236, 190, 235, 68, 1, 72, 236, 190, 235, 68, 1, + 230, 127, 236, 190, 235, 68, 29, 220, 110, 236, 190, 235, 68, 29, 73, + 236, 190, 235, 68, 29, 68, 236, 190, 235, 68, 29, 246, 250, 236, 190, + 235, 68, 29, 74, 236, 190, 235, 68, 145, 229, 48, 236, 190, 235, 68, 145, + 251, 157, 236, 190, 235, 68, 145, 251, 158, 229, 48, 236, 190, 235, 68, + 5, 250, 62, 236, 190, 235, 68, 5, 224, 148, 227, 194, 1, 175, 227, 194, + 1, 245, 0, 227, 194, 1, 232, 115, 227, 194, 1, 222, 155, 227, 194, 1, + 249, 207, 227, 194, 1, 208, 227, 194, 1, 187, 227, 194, 1, 252, 237, 227, + 194, 1, 196, 227, 194, 1, 251, 169, 227, 194, 1, 237, 123, 227, 194, 1, + 231, 77, 227, 194, 1, 226, 177, 227, 194, 1, 203, 227, 194, 1, 235, 188, + 227, 194, 1, 184, 227, 194, 1, 219, 7, 227, 194, 1, 155, 227, 194, 1, + 234, 37, 227, 194, 1, 232, 100, 227, 194, 1, 232, 169, 227, 194, 1, 231, + 57, 227, 194, 1, 60, 227, 194, 29, 5, 72, 227, 194, 29, 5, 68, 227, 194, + 29, 5, 73, 227, 194, 29, 5, 254, 196, 227, 194, 29, 5, 74, 227, 194, 29, + 5, 253, 232, 227, 194, 29, 5, 246, 115, 227, 194, 29, 5, 247, 16, 227, + 194, 250, 147, 5, 232, 117, 227, 194, 250, 147, 5, 207, 227, 194, 250, + 147, 5, 152, 227, 194, 250, 147, 5, 243, 225, 227, 194, 219, 82, 227, + 194, 226, 87, 78, 22, 91, 221, 188, 22, 91, 221, 187, 22, 91, 221, 185, + 22, 91, 221, 190, 22, 91, 227, 135, 22, 91, 227, 119, 22, 91, 227, 114, + 22, 91, 227, 116, 22, 91, 227, 132, 22, 91, 227, 125, 22, 91, 227, 118, + 22, 91, 227, 137, 22, 91, 227, 120, 22, 91, 227, 139, 22, 91, 227, 136, + 22, 91, 233, 183, 22, 91, 233, 174, 22, 91, 233, 177, 22, 91, 229, 84, + 22, 91, 229, 95, 22, 91, 229, 96, 22, 91, 223, 203, 22, 91, 238, 12, 22, + 91, 238, 19, 22, 91, 223, 214, 22, 91, 223, 201, 22, 91, 229, 126, 22, + 91, 243, 101, 22, 91, 223, 198, 133, 5, 229, 252, 133, 5, 251, 96, 133, + 5, 235, 130, 133, 5, 218, 197, 133, 1, 60, 133, 1, 242, 107, 236, 193, + 133, 1, 72, 133, 1, 237, 255, 133, 1, 68, 133, 1, 230, 44, 251, 73, 133, + 1, 232, 116, 235, 98, 133, 1, 232, 116, 235, 99, 227, 229, 133, 1, 73, + 133, 1, 254, 196, 133, 1, 74, 133, 1, 175, 133, 1, 206, 226, 128, 133, 1, + 206, 233, 67, 133, 1, 245, 0, 133, 1, 245, 1, 233, 67, 133, 1, 232, 115, + 133, 1, 251, 169, 133, 1, 251, 170, 233, 67, 133, 1, 237, 123, 133, 1, + 231, 78, 233, 67, 133, 1, 237, 124, 234, 103, 133, 1, 231, 77, 133, 1, + 221, 29, 133, 1, 221, 30, 234, 103, 133, 1, 249, 132, 133, 1, 249, 133, + 234, 103, 133, 1, 232, 238, 233, 67, 133, 1, 222, 155, 133, 1, 222, 156, + 233, 67, 133, 1, 249, 207, 133, 1, 249, 208, 234, 103, 133, 1, 208, 133, + 1, 187, 133, 1, 230, 44, 233, 67, 133, 1, 252, 237, 133, 1, 252, 238, + 233, 67, 133, 1, 196, 133, 1, 184, 133, 1, 203, 133, 1, 228, 3, 254, 203, + 133, 1, 235, 188, 133, 1, 219, 7, 133, 1, 226, 178, 233, 67, 133, 1, 226, + 178, 234, 103, 133, 1, 226, 177, 133, 1, 155, 133, 5, 251, 97, 222, 68, + 133, 29, 5, 222, 111, 133, 29, 5, 221, 135, 133, 29, 5, 218, 162, 133, + 29, 5, 218, 163, 234, 5, 133, 29, 5, 223, 77, 133, 29, 5, 223, 78, 233, + 250, 133, 29, 5, 222, 124, 133, 29, 5, 248, 207, 233, 66, 133, 29, 5, + 229, 171, 133, 250, 147, 5, 236, 161, 133, 250, 147, 5, 229, 179, 133, + 250, 147, 5, 251, 162, 133, 230, 6, 133, 42, 227, 176, 133, 45, 227, 176, + 133, 230, 36, 254, 125, 133, 230, 36, 234, 107, 133, 230, 36, 234, 223, + 133, 230, 36, 218, 193, 133, 230, 36, 230, 7, 133, 230, 36, 235, 35, 133, + 230, 36, 234, 217, 133, 230, 36, 254, 239, 133, 230, 36, 254, 240, 254, + 239, 133, 230, 36, 229, 65, 133, 215, 230, 36, 229, 65, 133, 230, 4, 133, + 20, 217, 84, 133, 20, 107, 133, 20, 103, 133, 20, 160, 133, 20, 154, 133, + 20, 174, 133, 20, 182, 133, 20, 191, 133, 20, 185, 133, 20, 190, 133, + 230, 36, 221, 163, 220, 248, 133, 230, 36, 237, 147, 149, 1, 60, 149, 1, + 72, 149, 1, 68, 149, 1, 73, 149, 1, 254, 196, 149, 1, 74, 149, 1, 175, + 149, 1, 236, 149, 149, 1, 245, 0, 149, 1, 244, 125, 149, 1, 232, 73, 149, + 1, 232, 115, 149, 1, 251, 69, 149, 1, 251, 33, 149, 1, 237, 123, 149, 1, + 237, 103, 149, 1, 232, 64, 149, 1, 232, 66, 149, 1, 232, 65, 149, 1, 222, + 155, 149, 1, 222, 35, 149, 1, 249, 207, 149, 1, 249, 36, 149, 1, 231, + 114, 149, 1, 208, 149, 1, 249, 132, 149, 1, 187, 149, 1, 229, 6, 149, 1, + 229, 141, 149, 1, 252, 237, 149, 1, 252, 94, 149, 1, 233, 94, 149, 1, + 196, 149, 1, 252, 178, 149, 1, 184, 149, 1, 203, 149, 1, 235, 188, 149, + 1, 219, 189, 149, 1, 223, 218, 149, 1, 226, 177, 149, 1, 155, 149, 29, 5, + 255, 58, 149, 29, 5, 72, 149, 29, 5, 237, 255, 149, 29, 5, 246, 237, 149, + 29, 5, 68, 149, 29, 5, 230, 167, 149, 29, 5, 74, 149, 29, 5, 254, 196, + 149, 29, 5, 253, 232, 149, 29, 5, 220, 110, 149, 250, 147, 5, 184, 149, + 250, 147, 5, 203, 149, 250, 147, 5, 235, 188, 149, 250, 147, 5, 219, 7, + 149, 1, 39, 237, 17, 149, 1, 39, 245, 67, 149, 1, 39, 232, 117, 149, 250, + 147, 5, 39, 232, 117, 149, 1, 39, 251, 70, 149, 1, 39, 222, 201, 149, 1, + 39, 207, 149, 1, 39, 230, 59, 149, 1, 39, 218, 90, 149, 1, 39, 152, 149, + 1, 39, 153, 149, 1, 39, 223, 219, 149, 250, 147, 5, 39, 189, 149, 250, + 147, 5, 39, 243, 225, 149, 20, 217, 84, 149, 20, 107, 149, 20, 103, 149, + 20, 160, 149, 20, 154, 149, 20, 174, 149, 20, 182, 149, 20, 191, 149, 20, + 185, 149, 20, 190, 149, 228, 197, 223, 242, 149, 228, 197, 249, 167, 149, + 228, 197, 51, 249, 167, 149, 228, 197, 221, 78, 249, 167, 63, 1, 236, + 143, 245, 0, 63, 1, 236, 143, 251, 169, 63, 1, 236, 143, 251, 69, 63, 1, + 236, 143, 237, 123, 63, 1, 236, 143, 237, 103, 63, 1, 236, 143, 231, 77, + 63, 1, 236, 143, 221, 29, 63, 1, 236, 143, 221, 19, 63, 1, 236, 143, 249, + 132, 63, 1, 236, 143, 249, 116, 63, 1, 236, 143, 249, 36, 63, 1, 236, + 143, 208, 63, 1, 236, 143, 226, 177, 63, 1, 236, 143, 155, 63, 1, 236, + 143, 243, 121, 63, 1, 236, 143, 246, 8, 63, 58, 1, 236, 143, 227, 201, + 63, 1, 236, 143, 218, 138, 63, 1, 236, 143, 217, 114, 63, 1, 236, 143, + 203, 63, 235, 6, 236, 143, 230, 182, 63, 235, 6, 236, 143, 228, 111, 63, + 235, 6, 236, 143, 243, 57, 63, 16, 254, 186, 246, 94, 63, 16, 254, 186, + 107, 63, 16, 254, 186, 103, 63, 1, 254, 186, 203, 63, 5, 229, 248, 236, + 213, 221, 132, 37, 177, 1, 109, 236, 57, 37, 177, 1, 116, 236, 57, 37, + 177, 1, 109, 236, 125, 37, 177, 1, 116, 236, 125, 37, 177, 1, 109, 236, + 132, 37, 177, 1, 116, 236, 132, 37, 177, 1, 109, 244, 68, 37, 177, 1, + 116, 244, 68, 37, 177, 1, 109, 232, 84, 37, 177, 1, 116, 232, 84, 37, + 177, 1, 109, 250, 182, 37, 177, 1, 116, 250, 182, 37, 177, 1, 109, 251, + 11, 37, 177, 1, 116, 251, 11, 37, 177, 1, 109, 224, 26, 37, 177, 1, 116, + 224, 26, 37, 177, 1, 109, 231, 56, 37, 177, 1, 116, 231, 56, 37, 177, 1, + 109, 248, 167, 37, 177, 1, 116, 248, 167, 37, 177, 1, 109, 101, 37, 177, + 1, 116, 101, 37, 177, 1, 109, 221, 239, 37, 177, 1, 116, 221, 239, 37, + 177, 1, 109, 231, 204, 37, 177, 1, 116, 231, 204, 37, 177, 1, 109, 252, + 41, 37, 177, 1, 116, 252, 41, 37, 177, 1, 109, 229, 37, 37, 177, 1, 116, + 229, 37, 37, 177, 1, 109, 229, 118, 37, 177, 1, 116, 229, 118, 37, 177, + 1, 109, 245, 139, 37, 177, 1, 116, 245, 139, 37, 177, 1, 109, 233, 136, + 37, 177, 1, 116, 233, 136, 37, 177, 1, 109, 217, 231, 37, 177, 1, 116, + 217, 231, 37, 177, 1, 109, 227, 75, 37, 177, 1, 116, 227, 75, 37, 177, 1, + 109, 235, 12, 37, 177, 1, 116, 235, 12, 37, 177, 1, 109, 219, 72, 37, + 177, 1, 116, 219, 72, 37, 177, 1, 109, 243, 4, 37, 177, 1, 116, 243, 4, + 37, 177, 1, 109, 74, 37, 177, 1, 116, 74, 37, 177, 234, 100, 236, 229, + 37, 177, 29, 255, 58, 37, 177, 29, 72, 37, 177, 29, 220, 110, 37, 177, + 29, 68, 37, 177, 29, 73, 37, 177, 29, 74, 37, 177, 234, 100, 236, 127, + 37, 177, 29, 242, 72, 37, 177, 29, 220, 109, 37, 177, 29, 220, 123, 37, + 177, 29, 253, 231, 37, 177, 29, 253, 212, 37, 177, 29, 254, 131, 37, 177, + 29, 254, 140, 37, 177, 145, 234, 100, 246, 223, 37, 177, 145, 234, 100, + 231, 113, 37, 177, 145, 234, 100, 221, 239, 37, 177, 145, 234, 100, 224, + 15, 37, 177, 16, 236, 44, 37, 177, 16, 231, 113, 37, 177, 16, 226, 148, + 37, 177, 16, 243, 5, 243, 1, 37, 177, 16, 236, 52, 236, 51, 234, 11, 234, + 43, 1, 236, 49, 234, 11, 234, 43, 1, 226, 148, 234, 11, 234, 43, 1, 235, + 167, 234, 11, 234, 43, 1, 233, 145, 234, 11, 234, 43, 1, 187, 234, 11, + 234, 43, 1, 208, 234, 11, 234, 43, 1, 251, 25, 234, 11, 234, 43, 1, 221, + 181, 234, 11, 234, 43, 1, 236, 121, 234, 11, 234, 43, 1, 232, 76, 234, + 11, 234, 43, 1, 221, 233, 234, 11, 234, 43, 1, 219, 2, 234, 11, 234, 43, + 1, 218, 45, 234, 11, 234, 43, 1, 242, 167, 234, 11, 234, 43, 1, 220, 87, + 234, 11, 234, 43, 1, 72, 234, 11, 234, 43, 1, 229, 136, 234, 11, 234, 43, + 1, 253, 241, 234, 11, 234, 43, 1, 244, 63, 234, 11, 234, 43, 1, 237, 102, + 234, 11, 234, 43, 1, 227, 246, 234, 11, 234, 43, 1, 252, 237, 234, 11, + 234, 43, 1, 237, 91, 234, 11, 234, 43, 1, 248, 232, 234, 11, 234, 43, 1, + 244, 110, 234, 11, 234, 43, 1, 249, 17, 234, 11, 234, 43, 1, 252, 93, + 234, 11, 234, 43, 1, 236, 50, 234, 249, 234, 11, 234, 43, 1, 235, 168, + 234, 249, 234, 11, 234, 43, 1, 233, 146, 234, 249, 234, 11, 234, 43, 1, + 230, 44, 234, 249, 234, 11, 234, 43, 1, 232, 238, 234, 249, 234, 11, 234, + 43, 1, 221, 182, 234, 249, 234, 11, 234, 43, 1, 232, 77, 234, 249, 234, + 11, 234, 43, 1, 242, 107, 234, 249, 234, 11, 234, 43, 29, 5, 230, 137, + 234, 11, 234, 43, 29, 5, 237, 221, 234, 11, 234, 43, 29, 5, 254, 130, + 234, 11, 234, 43, 29, 5, 218, 18, 234, 11, 234, 43, 29, 5, 224, 10, 234, + 11, 234, 43, 29, 5, 220, 85, 234, 11, 234, 43, 29, 5, 251, 40, 234, 11, + 234, 43, 29, 5, 231, 100, 234, 11, 234, 43, 251, 41, 234, 11, 234, 43, + 234, 220, 237, 131, 234, 11, 234, 43, 254, 70, 237, 131, 234, 11, 234, + 43, 20, 217, 84, 234, 11, 234, 43, 20, 107, 234, 11, 234, 43, 20, 103, + 234, 11, 234, 43, 20, 160, 234, 11, 234, 43, 20, 154, 234, 11, 234, 43, + 20, 174, 234, 11, 234, 43, 20, 182, 234, 11, 234, 43, 20, 191, 234, 11, + 234, 43, 20, 185, 234, 11, 234, 43, 20, 190, 22, 122, 231, 6, 22, 122, + 231, 11, 22, 122, 217, 230, 22, 122, 217, 229, 22, 122, 217, 228, 22, + 122, 220, 173, 22, 122, 220, 176, 22, 122, 217, 198, 22, 122, 217, 194, + 22, 122, 246, 114, 22, 122, 246, 112, 22, 122, 246, 113, 22, 122, 246, + 110, 22, 122, 242, 97, 22, 122, 242, 96, 22, 122, 242, 94, 22, 122, 242, + 95, 22, 122, 242, 100, 22, 122, 242, 93, 22, 122, 242, 92, 22, 122, 242, + 102, 22, 122, 254, 59, 22, 122, 254, 58, 22, 85, 232, 48, 22, 85, 232, + 54, 22, 85, 223, 200, 22, 85, 223, 199, 22, 85, 221, 187, 22, 85, 221, + 185, 22, 85, 221, 184, 22, 85, 221, 190, 22, 85, 221, 191, 22, 85, 221, + 183, 22, 85, 227, 119, 22, 85, 227, 134, 22, 85, 223, 206, 22, 85, 227, + 131, 22, 85, 227, 121, 22, 85, 227, 123, 22, 85, 227, 110, 22, 85, 227, + 111, 22, 85, 236, 217, 22, 85, 233, 182, 22, 85, 233, 176, 22, 85, 223, + 210, 22, 85, 233, 179, 22, 85, 233, 185, 22, 85, 229, 80, 22, 85, 229, + 89, 22, 85, 229, 93, 22, 85, 223, 208, 22, 85, 229, 83, 22, 85, 229, 97, + 22, 85, 229, 98, 22, 85, 224, 96, 22, 85, 224, 99, 22, 85, 223, 204, 22, + 85, 223, 202, 22, 85, 224, 94, 22, 85, 224, 102, 22, 85, 224, 103, 22, + 85, 224, 88, 22, 85, 224, 101, 22, 85, 229, 255, 22, 85, 230, 0, 22, 85, + 218, 4, 22, 85, 218, 5, 22, 85, 250, 228, 22, 85, 250, 227, 22, 85, 223, + 215, 22, 85, 229, 124, 22, 85, 229, 123, 9, 13, 239, 244, 9, 13, 239, + 243, 9, 13, 239, 242, 9, 13, 239, 241, 9, 13, 239, 240, 9, 13, 239, 239, + 9, 13, 239, 238, 9, 13, 239, 237, 9, 13, 239, 236, 9, 13, 239, 235, 9, + 13, 239, 234, 9, 13, 239, 233, 9, 13, 239, 232, 9, 13, 239, 231, 9, 13, + 239, 230, 9, 13, 239, 229, 9, 13, 239, 228, 9, 13, 239, 227, 9, 13, 239, + 226, 9, 13, 239, 225, 9, 13, 239, 224, 9, 13, 239, 223, 9, 13, 239, 222, + 9, 13, 239, 221, 9, 13, 239, 220, 9, 13, 239, 219, 9, 13, 239, 218, 9, + 13, 239, 217, 9, 13, 239, 216, 9, 13, 239, 215, 9, 13, 239, 214, 9, 13, + 239, 213, 9, 13, 239, 212, 9, 13, 239, 211, 9, 13, 239, 210, 9, 13, 239, + 209, 9, 13, 239, 208, 9, 13, 239, 207, 9, 13, 239, 206, 9, 13, 239, 205, + 9, 13, 239, 204, 9, 13, 239, 203, 9, 13, 239, 202, 9, 13, 239, 201, 9, + 13, 239, 200, 9, 13, 239, 199, 9, 13, 239, 198, 9, 13, 239, 197, 9, 13, + 239, 196, 9, 13, 239, 195, 9, 13, 239, 194, 9, 13, 239, 193, 9, 13, 239, + 192, 9, 13, 239, 191, 9, 13, 239, 190, 9, 13, 239, 189, 9, 13, 239, 188, + 9, 13, 239, 187, 9, 13, 239, 186, 9, 13, 239, 185, 9, 13, 239, 184, 9, + 13, 239, 183, 9, 13, 239, 182, 9, 13, 239, 181, 9, 13, 239, 180, 9, 13, + 239, 179, 9, 13, 239, 178, 9, 13, 239, 177, 9, 13, 239, 176, 9, 13, 239, + 175, 9, 13, 239, 174, 9, 13, 239, 173, 9, 13, 239, 172, 9, 13, 239, 171, + 9, 13, 239, 170, 9, 13, 239, 169, 9, 13, 239, 168, 9, 13, 239, 167, 9, + 13, 239, 166, 9, 13, 239, 165, 9, 13, 239, 164, 9, 13, 239, 163, 9, 13, + 239, 162, 9, 13, 239, 161, 9, 13, 239, 160, 9, 13, 239, 159, 9, 13, 239, + 158, 9, 13, 239, 157, 9, 13, 239, 156, 9, 13, 239, 155, 9, 13, 239, 154, + 9, 13, 239, 153, 9, 13, 239, 152, 9, 13, 239, 151, 9, 13, 239, 150, 9, + 13, 239, 149, 9, 13, 239, 148, 9, 13, 239, 147, 9, 13, 239, 146, 9, 13, + 239, 145, 9, 13, 239, 144, 9, 13, 239, 143, 9, 13, 239, 142, 9, 13, 239, + 141, 9, 13, 239, 140, 9, 13, 239, 139, 9, 13, 239, 138, 9, 13, 239, 137, + 9, 13, 239, 136, 9, 13, 239, 135, 9, 13, 239, 134, 9, 13, 239, 133, 9, + 13, 239, 132, 9, 13, 239, 131, 9, 13, 239, 130, 9, 13, 239, 129, 9, 13, + 239, 128, 9, 13, 239, 127, 9, 13, 239, 126, 9, 13, 239, 125, 9, 13, 239, + 124, 9, 13, 239, 123, 9, 13, 239, 122, 9, 13, 239, 121, 9, 13, 239, 120, + 9, 13, 239, 119, 9, 13, 239, 118, 9, 13, 239, 117, 9, 13, 239, 116, 9, + 13, 239, 115, 9, 13, 239, 114, 9, 13, 239, 113, 9, 13, 239, 112, 9, 13, + 239, 111, 9, 13, 239, 110, 9, 13, 239, 109, 9, 13, 239, 108, 9, 13, 239, + 107, 9, 13, 239, 106, 9, 13, 239, 105, 9, 13, 239, 104, 9, 13, 239, 103, + 9, 13, 239, 102, 9, 13, 239, 101, 9, 13, 239, 100, 9, 13, 239, 99, 9, 13, + 239, 98, 9, 13, 239, 97, 9, 13, 239, 96, 9, 13, 239, 95, 9, 13, 239, 94, + 9, 13, 239, 93, 9, 13, 239, 92, 9, 13, 239, 91, 9, 13, 239, 90, 9, 13, + 239, 89, 9, 13, 239, 88, 9, 13, 239, 87, 9, 13, 239, 86, 9, 13, 239, 85, + 9, 13, 239, 84, 9, 13, 239, 83, 9, 13, 239, 82, 9, 13, 239, 81, 9, 13, + 239, 80, 9, 13, 239, 79, 9, 13, 239, 78, 9, 13, 239, 77, 9, 13, 239, 76, + 9, 13, 239, 75, 9, 13, 239, 74, 9, 13, 239, 73, 9, 13, 239, 72, 9, 13, + 239, 71, 9, 13, 239, 70, 9, 13, 239, 69, 9, 13, 239, 68, 9, 13, 239, 67, + 9, 13, 239, 66, 9, 13, 239, 65, 9, 13, 239, 64, 9, 13, 239, 63, 9, 13, + 239, 62, 9, 13, 239, 61, 9, 13, 239, 60, 9, 13, 239, 59, 9, 13, 239, 58, + 9, 13, 239, 57, 9, 13, 239, 56, 9, 13, 239, 55, 9, 13, 239, 54, 9, 13, + 239, 53, 9, 13, 239, 52, 9, 13, 239, 51, 9, 13, 239, 50, 9, 13, 239, 49, + 9, 13, 239, 48, 9, 13, 239, 47, 9, 13, 239, 46, 9, 13, 239, 45, 9, 13, + 239, 44, 9, 13, 239, 43, 9, 13, 239, 42, 9, 13, 239, 41, 9, 13, 239, 40, + 9, 13, 239, 39, 9, 13, 239, 38, 9, 13, 239, 37, 9, 13, 239, 36, 9, 13, + 239, 35, 9, 13, 239, 34, 9, 13, 239, 33, 9, 13, 239, 32, 9, 13, 239, 31, + 9, 13, 239, 30, 9, 13, 239, 29, 9, 13, 239, 28, 9, 13, 239, 27, 9, 13, + 239, 26, 9, 13, 239, 25, 9, 13, 239, 24, 9, 13, 239, 23, 9, 13, 239, 22, + 9, 13, 239, 21, 9, 13, 239, 20, 9, 13, 239, 19, 9, 13, 239, 18, 9, 13, + 239, 17, 9, 13, 239, 16, 9, 13, 239, 15, 9, 13, 239, 14, 9, 13, 239, 13, + 9, 13, 239, 12, 9, 13, 239, 11, 9, 13, 239, 10, 9, 13, 239, 9, 9, 13, + 239, 8, 9, 13, 239, 7, 9, 13, 239, 6, 9, 13, 239, 5, 9, 13, 239, 4, 9, + 13, 239, 3, 9, 13, 239, 2, 9, 13, 239, 1, 9, 13, 239, 0, 9, 13, 238, 255, + 9, 13, 238, 254, 9, 13, 238, 253, 9, 13, 238, 252, 9, 13, 238, 251, 9, + 13, 238, 250, 9, 13, 238, 249, 9, 13, 238, 248, 9, 13, 238, 247, 9, 13, + 238, 246, 9, 13, 238, 245, 9, 13, 238, 244, 9, 13, 238, 243, 9, 13, 238, + 242, 9, 13, 238, 241, 9, 13, 238, 240, 9, 13, 238, 239, 9, 13, 238, 238, + 9, 13, 238, 237, 9, 13, 238, 236, 9, 13, 238, 235, 9, 13, 238, 234, 9, + 13, 238, 233, 9, 13, 238, 232, 9, 13, 238, 231, 9, 13, 238, 230, 9, 13, + 238, 229, 9, 13, 238, 228, 9, 13, 238, 227, 9, 13, 238, 226, 9, 13, 238, + 225, 9, 13, 238, 224, 9, 13, 238, 223, 9, 13, 238, 222, 9, 13, 238, 221, + 9, 13, 238, 220, 9, 13, 238, 219, 9, 13, 238, 218, 9, 13, 238, 217, 9, + 13, 238, 216, 9, 13, 238, 215, 9, 13, 238, 214, 9, 13, 238, 213, 9, 13, + 238, 212, 9, 13, 238, 211, 9, 13, 238, 210, 9, 13, 238, 209, 9, 13, 238, + 208, 9, 13, 238, 207, 9, 13, 238, 206, 9, 13, 238, 205, 9, 13, 238, 204, + 9, 13, 238, 203, 9, 13, 238, 202, 9, 13, 238, 201, 9, 13, 238, 200, 9, + 13, 238, 199, 9, 13, 238, 198, 9, 13, 238, 197, 9, 13, 238, 196, 9, 13, + 238, 195, 9, 13, 238, 194, 9, 13, 238, 193, 9, 13, 238, 192, 9, 13, 238, + 191, 9, 13, 238, 190, 9, 13, 238, 189, 9, 13, 238, 188, 9, 13, 238, 187, + 9, 13, 238, 186, 9, 13, 238, 185, 9, 13, 238, 184, 9, 13, 238, 183, 9, + 13, 238, 182, 9, 13, 238, 181, 9, 13, 238, 180, 9, 13, 238, 179, 9, 13, + 238, 178, 9, 13, 238, 177, 9, 13, 238, 176, 9, 13, 238, 175, 9, 13, 238, + 174, 9, 13, 238, 173, 9, 13, 238, 172, 9, 13, 238, 171, 9, 13, 238, 170, + 9, 13, 238, 169, 9, 13, 238, 168, 9, 13, 238, 167, 9, 13, 238, 166, 9, + 13, 238, 165, 9, 13, 238, 164, 9, 13, 238, 163, 9, 13, 238, 162, 9, 13, + 238, 161, 9, 13, 238, 160, 9, 13, 238, 159, 9, 13, 238, 158, 9, 13, 238, + 157, 9, 13, 238, 156, 9, 13, 238, 155, 9, 13, 238, 154, 9, 13, 238, 153, + 9, 13, 238, 152, 9, 13, 238, 151, 9, 13, 238, 150, 9, 13, 238, 149, 9, + 13, 238, 148, 9, 13, 238, 147, 9, 13, 238, 146, 9, 13, 238, 145, 9, 13, + 238, 144, 9, 13, 238, 143, 9, 13, 238, 142, 9, 13, 238, 141, 9, 13, 238, + 140, 9, 13, 238, 139, 9, 13, 238, 138, 9, 13, 238, 137, 9, 13, 238, 136, + 9, 13, 238, 135, 9, 13, 238, 134, 9, 13, 238, 133, 9, 13, 238, 132, 9, + 13, 238, 131, 9, 13, 238, 130, 9, 13, 238, 129, 9, 13, 238, 128, 9, 13, + 238, 127, 9, 13, 238, 126, 9, 13, 238, 125, 9, 13, 238, 124, 9, 13, 238, + 123, 9, 13, 238, 122, 9, 13, 238, 121, 9, 13, 238, 120, 9, 13, 238, 119, + 9, 13, 238, 118, 9, 13, 238, 117, 9, 13, 238, 116, 9, 13, 238, 115, 9, + 13, 238, 114, 9, 13, 238, 113, 9, 13, 238, 112, 9, 13, 238, 111, 9, 13, + 238, 110, 9, 13, 238, 109, 9, 13, 238, 108, 9, 13, 238, 107, 9, 13, 238, + 106, 9, 13, 238, 105, 9, 13, 238, 104, 9, 13, 238, 103, 9, 13, 238, 102, + 9, 13, 238, 101, 9, 13, 238, 100, 9, 13, 238, 99, 9, 13, 238, 98, 9, 13, + 238, 97, 9, 13, 238, 96, 9, 13, 238, 95, 9, 13, 238, 94, 9, 13, 238, 93, + 9, 13, 238, 92, 9, 13, 238, 91, 9, 13, 238, 90, 9, 13, 238, 89, 9, 13, + 238, 88, 9, 13, 238, 87, 9, 13, 238, 86, 9, 13, 238, 85, 9, 13, 238, 84, + 9, 13, 238, 83, 9, 13, 238, 82, 9, 13, 238, 81, 9, 13, 238, 80, 9, 13, + 238, 79, 9, 13, 238, 78, 9, 13, 238, 77, 9, 13, 238, 76, 9, 13, 238, 75, + 9, 13, 238, 74, 9, 13, 238, 73, 9, 13, 238, 72, 9, 13, 238, 71, 9, 13, + 238, 70, 9, 13, 238, 69, 9, 13, 238, 68, 9, 13, 238, 67, 9, 13, 238, 66, + 9, 13, 238, 65, 9, 13, 238, 64, 9, 13, 238, 63, 9, 13, 238, 62, 9, 13, + 238, 61, 9, 13, 238, 60, 9, 13, 238, 59, 9, 13, 238, 58, 9, 13, 238, 57, + 9, 13, 238, 56, 9, 13, 238, 55, 9, 13, 238, 54, 9, 13, 238, 53, 9, 13, + 238, 52, 9, 13, 238, 51, 9, 13, 238, 50, 9, 13, 238, 49, 9, 13, 238, 48, + 9, 13, 238, 47, 9, 13, 238, 46, 9, 13, 238, 45, 9, 13, 238, 44, 9, 13, + 238, 43, 9, 13, 238, 42, 9, 13, 238, 41, 9, 13, 238, 40, 9, 13, 238, 39, + 9, 13, 238, 38, 9, 13, 238, 37, 9, 13, 238, 36, 9, 13, 238, 35, 9, 13, + 238, 34, 9, 13, 238, 33, 9, 13, 238, 32, 9, 13, 238, 31, 7, 3, 24, 245, + 207, 7, 3, 24, 245, 203, 7, 3, 24, 245, 166, 7, 3, 24, 245, 206, 7, 3, + 24, 245, 205, 7, 3, 24, 171, 226, 235, 222, 201, 7, 3, 24, 223, 168, 132, + 3, 24, 233, 252, 231, 174, 132, 3, 24, 233, 252, 246, 254, 132, 3, 24, + 233, 252, 237, 200, 132, 3, 24, 219, 97, 231, 174, 132, 3, 24, 233, 252, + 218, 133, 87, 1, 217, 221, 2, 243, 94, 87, 229, 32, 237, 42, 219, 176, + 87, 24, 217, 248, 217, 221, 217, 221, 229, 214, 87, 1, 254, 142, 253, + 207, 87, 1, 218, 201, 254, 168, 87, 1, 218, 201, 249, 177, 87, 1, 218, + 201, 243, 162, 87, 1, 218, 201, 236, 246, 87, 1, 218, 201, 235, 152, 87, + 1, 218, 201, 39, 234, 1, 87, 1, 218, 201, 227, 174, 87, 1, 218, 201, 222, + 102, 87, 1, 254, 142, 88, 55, 87, 1, 224, 210, 2, 224, 210, 248, 145, 87, + 1, 224, 210, 2, 224, 113, 248, 145, 87, 1, 224, 210, 2, 249, 194, 25, + 224, 210, 248, 145, 87, 1, 224, 210, 2, 249, 194, 25, 224, 113, 248, 145, + 87, 1, 99, 2, 229, 214, 87, 1, 99, 2, 228, 143, 87, 1, 99, 2, 234, 77, + 87, 1, 252, 105, 2, 249, 193, 87, 1, 244, 92, 2, 249, 193, 87, 1, 249, + 178, 2, 249, 193, 87, 1, 243, 163, 2, 234, 77, 87, 1, 219, 170, 2, 249, + 193, 87, 1, 217, 96, 2, 249, 193, 87, 1, 222, 51, 2, 249, 193, 87, 1, + 217, 221, 2, 249, 193, 87, 1, 39, 236, 247, 2, 249, 193, 87, 1, 236, 247, + 2, 249, 193, 87, 1, 235, 153, 2, 249, 193, 87, 1, 234, 2, 2, 249, 193, + 87, 1, 231, 104, 2, 249, 193, 87, 1, 226, 146, 2, 249, 193, 87, 1, 39, + 229, 199, 2, 249, 193, 87, 1, 229, 199, 2, 249, 193, 87, 1, 221, 52, 2, + 249, 193, 87, 1, 228, 108, 2, 249, 193, 87, 1, 227, 175, 2, 249, 193, 87, + 1, 224, 210, 2, 249, 193, 87, 1, 222, 103, 2, 249, 193, 87, 1, 219, 170, + 2, 242, 254, 87, 1, 252, 105, 2, 227, 248, 87, 1, 236, 247, 2, 227, 248, + 87, 1, 229, 199, 2, 227, 248, 87, 24, 99, 235, 152, 12, 1, 99, 218, 247, + 47, 17, 12, 1, 99, 218, 247, 39, 17, 12, 1, 252, 136, 47, 17, 12, 1, 252, + 136, 39, 17, 12, 1, 252, 136, 66, 17, 12, 1, 252, 136, 128, 17, 12, 1, + 229, 188, 47, 17, 12, 1, 229, 188, 39, 17, 12, 1, 229, 188, 66, 17, 12, + 1, 229, 188, 128, 17, 12, 1, 252, 127, 47, 17, 12, 1, 252, 127, 39, 17, + 12, 1, 252, 127, 66, 17, 12, 1, 252, 127, 128, 17, 12, 1, 221, 22, 47, + 17, 12, 1, 221, 22, 39, 17, 12, 1, 221, 22, 66, 17, 12, 1, 221, 22, 128, + 17, 12, 1, 222, 76, 47, 17, 12, 1, 222, 76, 39, 17, 12, 1, 222, 76, 66, + 17, 12, 1, 222, 76, 128, 17, 12, 1, 221, 24, 47, 17, 12, 1, 221, 24, 39, + 17, 12, 1, 221, 24, 66, 17, 12, 1, 221, 24, 128, 17, 12, 1, 219, 159, 47, + 17, 12, 1, 219, 159, 39, 17, 12, 1, 219, 159, 66, 17, 12, 1, 219, 159, + 128, 17, 12, 1, 229, 186, 47, 17, 12, 1, 229, 186, 39, 17, 12, 1, 229, + 186, 66, 17, 12, 1, 229, 186, 128, 17, 12, 1, 247, 80, 47, 17, 12, 1, + 247, 80, 39, 17, 12, 1, 247, 80, 66, 17, 12, 1, 247, 80, 128, 17, 12, 1, + 231, 71, 47, 17, 12, 1, 231, 71, 39, 17, 12, 1, 231, 71, 66, 17, 12, 1, + 231, 71, 128, 17, 12, 1, 222, 92, 47, 17, 12, 1, 222, 92, 39, 17, 12, 1, + 222, 92, 66, 17, 12, 1, 222, 92, 128, 17, 12, 1, 222, 90, 47, 17, 12, 1, + 222, 90, 39, 17, 12, 1, 222, 90, 66, 17, 12, 1, 222, 90, 128, 17, 12, 1, + 249, 130, 47, 17, 12, 1, 249, 130, 39, 17, 12, 1, 249, 190, 47, 17, 12, + 1, 249, 190, 39, 17, 12, 1, 247, 104, 47, 17, 12, 1, 247, 104, 39, 17, + 12, 1, 249, 128, 47, 17, 12, 1, 249, 128, 39, 17, 12, 1, 237, 110, 47, + 17, 12, 1, 237, 110, 39, 17, 12, 1, 227, 49, 47, 17, 12, 1, 227, 49, 39, + 17, 12, 1, 236, 177, 47, 17, 12, 1, 236, 177, 39, 17, 12, 1, 236, 177, + 66, 17, 12, 1, 236, 177, 128, 17, 12, 1, 244, 244, 47, 17, 12, 1, 244, + 244, 39, 17, 12, 1, 244, 244, 66, 17, 12, 1, 244, 244, 128, 17, 12, 1, + 244, 10, 47, 17, 12, 1, 244, 10, 39, 17, 12, 1, 244, 10, 66, 17, 12, 1, + 244, 10, 128, 17, 12, 1, 232, 83, 47, 17, 12, 1, 232, 83, 39, 17, 12, 1, + 232, 83, 66, 17, 12, 1, 232, 83, 128, 17, 12, 1, 231, 194, 244, 108, 47, + 17, 12, 1, 231, 194, 244, 108, 39, 17, 12, 1, 227, 79, 47, 17, 12, 1, + 227, 79, 39, 17, 12, 1, 227, 79, 66, 17, 12, 1, 227, 79, 128, 17, 12, 1, + 243, 147, 2, 70, 71, 47, 17, 12, 1, 243, 147, 2, 70, 71, 39, 17, 12, 1, + 243, 147, 244, 66, 47, 17, 12, 1, 243, 147, 244, 66, 39, 17, 12, 1, 243, + 147, 244, 66, 66, 17, 12, 1, 243, 147, 244, 66, 128, 17, 12, 1, 243, 147, + 248, 164, 47, 17, 12, 1, 243, 147, 248, 164, 39, 17, 12, 1, 243, 147, + 248, 164, 66, 17, 12, 1, 243, 147, 248, 164, 128, 17, 12, 1, 70, 252, + 195, 47, 17, 12, 1, 70, 252, 195, 39, 17, 12, 1, 70, 252, 195, 2, 181, + 71, 47, 17, 12, 1, 70, 252, 195, 2, 181, 71, 39, 17, 12, 1, 232, 118, 47, + 17, 12, 1, 232, 118, 39, 17, 12, 1, 232, 118, 66, 17, 12, 1, 232, 118, + 128, 17, 12, 1, 105, 47, 17, 12, 1, 105, 39, 17, 12, 1, 230, 168, 47, 17, + 12, 1, 230, 168, 39, 17, 12, 1, 217, 201, 47, 17, 12, 1, 217, 201, 39, + 17, 12, 1, 105, 2, 181, 71, 47, 17, 12, 1, 219, 166, 47, 17, 12, 1, 219, + 166, 39, 17, 12, 1, 236, 98, 230, 168, 47, 17, 12, 1, 236, 98, 230, 168, + 39, 17, 12, 1, 236, 98, 217, 201, 47, 17, 12, 1, 236, 98, 217, 201, 39, + 17, 12, 1, 178, 47, 17, 12, 1, 178, 39, 17, 12, 1, 178, 66, 17, 12, 1, + 178, 128, 17, 12, 1, 220, 104, 236, 188, 236, 98, 99, 197, 66, 17, 12, 1, + 220, 104, 236, 188, 236, 98, 99, 197, 128, 17, 12, 24, 70, 2, 181, 71, 2, + 99, 47, 17, 12, 24, 70, 2, 181, 71, 2, 99, 39, 17, 12, 24, 70, 2, 181, + 71, 2, 254, 235, 47, 17, 12, 24, 70, 2, 181, 71, 2, 254, 235, 39, 17, 12, + 24, 70, 2, 181, 71, 2, 218, 234, 47, 17, 12, 24, 70, 2, 181, 71, 2, 218, + 234, 39, 17, 12, 24, 70, 2, 181, 71, 2, 105, 47, 17, 12, 24, 70, 2, 181, + 71, 2, 105, 39, 17, 12, 24, 70, 2, 181, 71, 2, 230, 168, 47, 17, 12, 24, + 70, 2, 181, 71, 2, 230, 168, 39, 17, 12, 24, 70, 2, 181, 71, 2, 217, 201, + 47, 17, 12, 24, 70, 2, 181, 71, 2, 217, 201, 39, 17, 12, 24, 70, 2, 181, + 71, 2, 178, 47, 17, 12, 24, 70, 2, 181, 71, 2, 178, 39, 17, 12, 24, 70, + 2, 181, 71, 2, 178, 66, 17, 12, 24, 220, 104, 236, 98, 70, 2, 181, 71, 2, + 99, 197, 47, 17, 12, 24, 220, 104, 236, 98, 70, 2, 181, 71, 2, 99, 197, + 39, 17, 12, 24, 220, 104, 236, 98, 70, 2, 181, 71, 2, 99, 197, 66, 17, + 12, 1, 245, 241, 70, 47, 17, 12, 1, 245, 241, 70, 39, 17, 12, 1, 245, + 241, 70, 66, 17, 12, 1, 245, 241, 70, 128, 17, 12, 24, 70, 2, 181, 71, 2, + 134, 47, 17, 12, 24, 70, 2, 181, 71, 2, 111, 47, 17, 12, 24, 70, 2, 181, + 71, 2, 62, 47, 17, 12, 24, 70, 2, 181, 71, 2, 99, 197, 47, 17, 12, 24, + 70, 2, 181, 71, 2, 70, 47, 17, 12, 24, 252, 129, 2, 134, 47, 17, 12, 24, + 252, 129, 2, 111, 47, 17, 12, 24, 252, 129, 2, 236, 147, 47, 17, 12, 24, + 252, 129, 2, 62, 47, 17, 12, 24, 252, 129, 2, 99, 197, 47, 17, 12, 24, + 252, 129, 2, 70, 47, 17, 12, 24, 222, 78, 2, 134, 47, 17, 12, 24, 222, + 78, 2, 111, 47, 17, 12, 24, 222, 78, 2, 236, 147, 47, 17, 12, 24, 222, + 78, 2, 62, 47, 17, 12, 24, 222, 78, 2, 99, 197, 47, 17, 12, 24, 222, 78, + 2, 70, 47, 17, 12, 24, 222, 20, 2, 134, 47, 17, 12, 24, 222, 20, 2, 62, + 47, 17, 12, 24, 222, 20, 2, 99, 197, 47, 17, 12, 24, 222, 20, 2, 70, 47, + 17, 12, 24, 134, 2, 111, 47, 17, 12, 24, 134, 2, 62, 47, 17, 12, 24, 111, + 2, 134, 47, 17, 12, 24, 111, 2, 62, 47, 17, 12, 24, 236, 147, 2, 134, 47, + 17, 12, 24, 236, 147, 2, 111, 47, 17, 12, 24, 236, 147, 2, 62, 47, 17, + 12, 24, 226, 83, 2, 134, 47, 17, 12, 24, 226, 83, 2, 111, 47, 17, 12, 24, + 226, 83, 2, 236, 147, 47, 17, 12, 24, 226, 83, 2, 62, 47, 17, 12, 24, + 226, 171, 2, 111, 47, 17, 12, 24, 226, 171, 2, 62, 47, 17, 12, 24, 249, + 203, 2, 134, 47, 17, 12, 24, 249, 203, 2, 111, 47, 17, 12, 24, 249, 203, + 2, 236, 147, 47, 17, 12, 24, 249, 203, 2, 62, 47, 17, 12, 24, 222, 138, + 2, 111, 47, 17, 12, 24, 222, 138, 2, 62, 47, 17, 12, 24, 217, 110, 2, 62, + 47, 17, 12, 24, 254, 192, 2, 134, 47, 17, 12, 24, 254, 192, 2, 62, 47, + 17, 12, 24, 244, 123, 2, 134, 47, 17, 12, 24, 244, 123, 2, 62, 47, 17, + 12, 24, 245, 222, 2, 134, 47, 17, 12, 24, 245, 222, 2, 111, 47, 17, 12, + 24, 245, 222, 2, 236, 147, 47, 17, 12, 24, 245, 222, 2, 62, 47, 17, 12, + 24, 245, 222, 2, 99, 197, 47, 17, 12, 24, 245, 222, 2, 70, 47, 17, 12, + 24, 228, 149, 2, 111, 47, 17, 12, 24, 228, 149, 2, 62, 47, 17, 12, 24, + 228, 149, 2, 99, 197, 47, 17, 12, 24, 228, 149, 2, 70, 47, 17, 12, 24, + 236, 247, 2, 99, 47, 17, 12, 24, 236, 247, 2, 134, 47, 17, 12, 24, 236, + 247, 2, 111, 47, 17, 12, 24, 236, 247, 2, 236, 147, 47, 17, 12, 24, 236, + 247, 2, 235, 161, 47, 17, 12, 24, 236, 247, 2, 62, 47, 17, 12, 24, 236, + 247, 2, 99, 197, 47, 17, 12, 24, 236, 247, 2, 70, 47, 17, 12, 24, 235, + 161, 2, 134, 47, 17, 12, 24, 235, 161, 2, 111, 47, 17, 12, 24, 235, 161, + 2, 236, 147, 47, 17, 12, 24, 235, 161, 2, 62, 47, 17, 12, 24, 235, 161, + 2, 99, 197, 47, 17, 12, 24, 235, 161, 2, 70, 47, 17, 12, 24, 62, 2, 134, + 47, 17, 12, 24, 62, 2, 111, 47, 17, 12, 24, 62, 2, 236, 147, 47, 17, 12, + 24, 62, 2, 62, 47, 17, 12, 24, 62, 2, 99, 197, 47, 17, 12, 24, 62, 2, 70, + 47, 17, 12, 24, 231, 194, 2, 134, 47, 17, 12, 24, 231, 194, 2, 111, 47, + 17, 12, 24, 231, 194, 2, 236, 147, 47, 17, 12, 24, 231, 194, 2, 62, 47, + 17, 12, 24, 231, 194, 2, 99, 197, 47, 17, 12, 24, 231, 194, 2, 70, 47, + 17, 12, 24, 243, 147, 2, 134, 47, 17, 12, 24, 243, 147, 2, 62, 47, 17, + 12, 24, 243, 147, 2, 99, 197, 47, 17, 12, 24, 243, 147, 2, 70, 47, 17, + 12, 24, 70, 2, 134, 47, 17, 12, 24, 70, 2, 111, 47, 17, 12, 24, 70, 2, + 236, 147, 47, 17, 12, 24, 70, 2, 62, 47, 17, 12, 24, 70, 2, 99, 197, 47, + 17, 12, 24, 70, 2, 70, 47, 17, 12, 24, 222, 30, 2, 223, 59, 99, 47, 17, + 12, 24, 227, 197, 2, 223, 59, 99, 47, 17, 12, 24, 99, 197, 2, 223, 59, + 99, 47, 17, 12, 24, 225, 17, 2, 249, 171, 47, 17, 12, 24, 225, 17, 2, + 236, 205, 47, 17, 12, 24, 225, 17, 2, 245, 239, 47, 17, 12, 24, 225, 17, + 2, 249, 173, 47, 17, 12, 24, 225, 17, 2, 236, 207, 47, 17, 12, 24, 225, + 17, 2, 223, 59, 99, 47, 17, 12, 24, 70, 2, 181, 71, 2, 227, 197, 39, 17, + 12, 24, 70, 2, 181, 71, 2, 217, 107, 39, 17, 12, 24, 70, 2, 181, 71, 2, + 62, 39, 17, 12, 24, 70, 2, 181, 71, 2, 231, 194, 39, 17, 12, 24, 70, 2, + 181, 71, 2, 99, 197, 39, 17, 12, 24, 70, 2, 181, 71, 2, 70, 39, 17, 12, + 24, 252, 129, 2, 227, 197, 39, 17, 12, 24, 252, 129, 2, 217, 107, 39, 17, + 12, 24, 252, 129, 2, 62, 39, 17, 12, 24, 252, 129, 2, 231, 194, 39, 17, + 12, 24, 252, 129, 2, 99, 197, 39, 17, 12, 24, 252, 129, 2, 70, 39, 17, + 12, 24, 222, 78, 2, 227, 197, 39, 17, 12, 24, 222, 78, 2, 217, 107, 39, + 17, 12, 24, 222, 78, 2, 62, 39, 17, 12, 24, 222, 78, 2, 231, 194, 39, 17, + 12, 24, 222, 78, 2, 99, 197, 39, 17, 12, 24, 222, 78, 2, 70, 39, 17, 12, + 24, 222, 20, 2, 227, 197, 39, 17, 12, 24, 222, 20, 2, 217, 107, 39, 17, + 12, 24, 222, 20, 2, 62, 39, 17, 12, 24, 222, 20, 2, 231, 194, 39, 17, 12, + 24, 222, 20, 2, 99, 197, 39, 17, 12, 24, 222, 20, 2, 70, 39, 17, 12, 24, + 245, 222, 2, 99, 197, 39, 17, 12, 24, 245, 222, 2, 70, 39, 17, 12, 24, + 228, 149, 2, 99, 197, 39, 17, 12, 24, 228, 149, 2, 70, 39, 17, 12, 24, + 236, 247, 2, 99, 39, 17, 12, 24, 236, 247, 2, 235, 161, 39, 17, 12, 24, + 236, 247, 2, 62, 39, 17, 12, 24, 236, 247, 2, 99, 197, 39, 17, 12, 24, + 236, 247, 2, 70, 39, 17, 12, 24, 235, 161, 2, 62, 39, 17, 12, 24, 235, + 161, 2, 99, 197, 39, 17, 12, 24, 235, 161, 2, 70, 39, 17, 12, 24, 62, 2, + 99, 39, 17, 12, 24, 62, 2, 62, 39, 17, 12, 24, 231, 194, 2, 227, 197, 39, + 17, 12, 24, 231, 194, 2, 217, 107, 39, 17, 12, 24, 231, 194, 2, 62, 39, + 17, 12, 24, 231, 194, 2, 231, 194, 39, 17, 12, 24, 231, 194, 2, 99, 197, + 39, 17, 12, 24, 231, 194, 2, 70, 39, 17, 12, 24, 99, 197, 2, 223, 59, 99, + 39, 17, 12, 24, 70, 2, 227, 197, 39, 17, 12, 24, 70, 2, 217, 107, 39, 17, + 12, 24, 70, 2, 62, 39, 17, 12, 24, 70, 2, 231, 194, 39, 17, 12, 24, 70, + 2, 99, 197, 39, 17, 12, 24, 70, 2, 70, 39, 17, 12, 24, 70, 2, 181, 71, 2, + 134, 66, 17, 12, 24, 70, 2, 181, 71, 2, 111, 66, 17, 12, 24, 70, 2, 181, + 71, 2, 236, 147, 66, 17, 12, 24, 70, 2, 181, 71, 2, 62, 66, 17, 12, 24, + 70, 2, 181, 71, 2, 243, 147, 66, 17, 12, 24, 252, 129, 2, 134, 66, 17, + 12, 24, 252, 129, 2, 111, 66, 17, 12, 24, 252, 129, 2, 236, 147, 66, 17, + 12, 24, 252, 129, 2, 62, 66, 17, 12, 24, 252, 129, 2, 243, 147, 66, 17, + 12, 24, 222, 78, 2, 134, 66, 17, 12, 24, 222, 78, 2, 111, 66, 17, 12, 24, + 222, 78, 2, 236, 147, 66, 17, 12, 24, 222, 78, 2, 62, 66, 17, 12, 24, + 222, 78, 2, 243, 147, 66, 17, 12, 24, 222, 20, 2, 62, 66, 17, 12, 24, + 134, 2, 111, 66, 17, 12, 24, 134, 2, 62, 66, 17, 12, 24, 111, 2, 134, 66, + 17, 12, 24, 111, 2, 62, 66, 17, 12, 24, 236, 147, 2, 134, 66, 17, 12, 24, + 236, 147, 2, 62, 66, 17, 12, 24, 226, 83, 2, 134, 66, 17, 12, 24, 226, + 83, 2, 111, 66, 17, 12, 24, 226, 83, 2, 236, 147, 66, 17, 12, 24, 226, + 83, 2, 62, 66, 17, 12, 24, 226, 171, 2, 111, 66, 17, 12, 24, 226, 171, 2, + 236, 147, 66, 17, 12, 24, 226, 171, 2, 62, 66, 17, 12, 24, 249, 203, 2, + 134, 66, 17, 12, 24, 249, 203, 2, 111, 66, 17, 12, 24, 249, 203, 2, 236, + 147, 66, 17, 12, 24, 249, 203, 2, 62, 66, 17, 12, 24, 222, 138, 2, 111, + 66, 17, 12, 24, 217, 110, 2, 62, 66, 17, 12, 24, 254, 192, 2, 134, 66, + 17, 12, 24, 254, 192, 2, 62, 66, 17, 12, 24, 244, 123, 2, 134, 66, 17, + 12, 24, 244, 123, 2, 62, 66, 17, 12, 24, 245, 222, 2, 134, 66, 17, 12, + 24, 245, 222, 2, 111, 66, 17, 12, 24, 245, 222, 2, 236, 147, 66, 17, 12, + 24, 245, 222, 2, 62, 66, 17, 12, 24, 228, 149, 2, 111, 66, 17, 12, 24, + 228, 149, 2, 62, 66, 17, 12, 24, 236, 247, 2, 134, 66, 17, 12, 24, 236, + 247, 2, 111, 66, 17, 12, 24, 236, 247, 2, 236, 147, 66, 17, 12, 24, 236, + 247, 2, 235, 161, 66, 17, 12, 24, 236, 247, 2, 62, 66, 17, 12, 24, 235, + 161, 2, 134, 66, 17, 12, 24, 235, 161, 2, 111, 66, 17, 12, 24, 235, 161, + 2, 236, 147, 66, 17, 12, 24, 235, 161, 2, 62, 66, 17, 12, 24, 235, 161, + 2, 243, 147, 66, 17, 12, 24, 62, 2, 134, 66, 17, 12, 24, 62, 2, 111, 66, + 17, 12, 24, 62, 2, 236, 147, 66, 17, 12, 24, 62, 2, 62, 66, 17, 12, 24, + 231, 194, 2, 134, 66, 17, 12, 24, 231, 194, 2, 111, 66, 17, 12, 24, 231, + 194, 2, 236, 147, 66, 17, 12, 24, 231, 194, 2, 62, 66, 17, 12, 24, 231, + 194, 2, 243, 147, 66, 17, 12, 24, 243, 147, 2, 134, 66, 17, 12, 24, 243, + 147, 2, 62, 66, 17, 12, 24, 243, 147, 2, 223, 59, 99, 66, 17, 12, 24, 70, + 2, 134, 66, 17, 12, 24, 70, 2, 111, 66, 17, 12, 24, 70, 2, 236, 147, 66, + 17, 12, 24, 70, 2, 62, 66, 17, 12, 24, 70, 2, 243, 147, 66, 17, 12, 24, + 70, 2, 181, 71, 2, 62, 128, 17, 12, 24, 70, 2, 181, 71, 2, 243, 147, 128, + 17, 12, 24, 252, 129, 2, 62, 128, 17, 12, 24, 252, 129, 2, 243, 147, 128, + 17, 12, 24, 222, 78, 2, 62, 128, 17, 12, 24, 222, 78, 2, 243, 147, 128, + 17, 12, 24, 222, 20, 2, 62, 128, 17, 12, 24, 222, 20, 2, 243, 147, 128, + 17, 12, 24, 226, 83, 2, 62, 128, 17, 12, 24, 226, 83, 2, 243, 147, 128, + 17, 12, 24, 224, 243, 2, 62, 128, 17, 12, 24, 224, 243, 2, 243, 147, 128, + 17, 12, 24, 236, 247, 2, 235, 161, 128, 17, 12, 24, 236, 247, 2, 62, 128, + 17, 12, 24, 235, 161, 2, 62, 128, 17, 12, 24, 231, 194, 2, 62, 128, 17, + 12, 24, 231, 194, 2, 243, 147, 128, 17, 12, 24, 70, 2, 62, 128, 17, 12, + 24, 70, 2, 243, 147, 128, 17, 12, 24, 225, 17, 2, 245, 239, 128, 17, 12, + 24, 225, 17, 2, 249, 173, 128, 17, 12, 24, 225, 17, 2, 236, 207, 128, 17, + 12, 24, 222, 138, 2, 99, 197, 47, 17, 12, 24, 222, 138, 2, 70, 47, 17, + 12, 24, 254, 192, 2, 99, 197, 47, 17, 12, 24, 254, 192, 2, 70, 47, 17, + 12, 24, 244, 123, 2, 99, 197, 47, 17, 12, 24, 244, 123, 2, 70, 47, 17, + 12, 24, 226, 83, 2, 99, 197, 47, 17, 12, 24, 226, 83, 2, 70, 47, 17, 12, + 24, 224, 243, 2, 99, 197, 47, 17, 12, 24, 224, 243, 2, 70, 47, 17, 12, + 24, 111, 2, 99, 197, 47, 17, 12, 24, 111, 2, 70, 47, 17, 12, 24, 134, 2, + 99, 197, 47, 17, 12, 24, 134, 2, 70, 47, 17, 12, 24, 236, 147, 2, 99, + 197, 47, 17, 12, 24, 236, 147, 2, 70, 47, 17, 12, 24, 226, 171, 2, 99, + 197, 47, 17, 12, 24, 226, 171, 2, 70, 47, 17, 12, 24, 249, 203, 2, 99, + 197, 47, 17, 12, 24, 249, 203, 2, 70, 47, 17, 12, 24, 224, 243, 2, 134, + 47, 17, 12, 24, 224, 243, 2, 111, 47, 17, 12, 24, 224, 243, 2, 236, 147, + 47, 17, 12, 24, 224, 243, 2, 62, 47, 17, 12, 24, 224, 243, 2, 227, 197, + 47, 17, 12, 24, 226, 83, 2, 227, 197, 47, 17, 12, 24, 226, 171, 2, 227, + 197, 47, 17, 12, 24, 249, 203, 2, 227, 197, 47, 17, 12, 24, 222, 138, 2, + 99, 197, 39, 17, 12, 24, 222, 138, 2, 70, 39, 17, 12, 24, 254, 192, 2, + 99, 197, 39, 17, 12, 24, 254, 192, 2, 70, 39, 17, 12, 24, 244, 123, 2, + 99, 197, 39, 17, 12, 24, 244, 123, 2, 70, 39, 17, 12, 24, 226, 83, 2, 99, + 197, 39, 17, 12, 24, 226, 83, 2, 70, 39, 17, 12, 24, 224, 243, 2, 99, + 197, 39, 17, 12, 24, 224, 243, 2, 70, 39, 17, 12, 24, 111, 2, 99, 197, + 39, 17, 12, 24, 111, 2, 70, 39, 17, 12, 24, 134, 2, 99, 197, 39, 17, 12, + 24, 134, 2, 70, 39, 17, 12, 24, 236, 147, 2, 99, 197, 39, 17, 12, 24, + 236, 147, 2, 70, 39, 17, 12, 24, 226, 171, 2, 99, 197, 39, 17, 12, 24, + 226, 171, 2, 70, 39, 17, 12, 24, 249, 203, 2, 99, 197, 39, 17, 12, 24, + 249, 203, 2, 70, 39, 17, 12, 24, 224, 243, 2, 134, 39, 17, 12, 24, 224, + 243, 2, 111, 39, 17, 12, 24, 224, 243, 2, 236, 147, 39, 17, 12, 24, 224, + 243, 2, 62, 39, 17, 12, 24, 224, 243, 2, 227, 197, 39, 17, 12, 24, 226, + 83, 2, 227, 197, 39, 17, 12, 24, 226, 171, 2, 227, 197, 39, 17, 12, 24, + 249, 203, 2, 227, 197, 39, 17, 12, 24, 224, 243, 2, 134, 66, 17, 12, 24, + 224, 243, 2, 111, 66, 17, 12, 24, 224, 243, 2, 236, 147, 66, 17, 12, 24, + 224, 243, 2, 62, 66, 17, 12, 24, 226, 83, 2, 243, 147, 66, 17, 12, 24, + 224, 243, 2, 243, 147, 66, 17, 12, 24, 222, 138, 2, 62, 66, 17, 12, 24, + 226, 83, 2, 134, 128, 17, 12, 24, 226, 83, 2, 111, 128, 17, 12, 24, 226, + 83, 2, 236, 147, 128, 17, 12, 24, 224, 243, 2, 134, 128, 17, 12, 24, 224, + 243, 2, 111, 128, 17, 12, 24, 224, 243, 2, 236, 147, 128, 17, 12, 24, + 222, 138, 2, 62, 128, 17, 12, 24, 217, 110, 2, 62, 128, 17, 12, 24, 99, + 2, 245, 237, 39, 17, 12, 24, 99, 2, 245, 237, 47, 17, 230, 97, 42, 229, + 229, 230, 97, 45, 229, 229, 12, 24, 222, 78, 2, 134, 2, 62, 66, 17, 12, + 24, 222, 78, 2, 111, 2, 134, 39, 17, 12, 24, 222, 78, 2, 111, 2, 134, 66, + 17, 12, 24, 222, 78, 2, 111, 2, 62, 66, 17, 12, 24, 222, 78, 2, 236, 147, + 2, 62, 66, 17, 12, 24, 222, 78, 2, 62, 2, 134, 66, 17, 12, 24, 222, 78, + 2, 62, 2, 111, 66, 17, 12, 24, 222, 78, 2, 62, 2, 236, 147, 66, 17, 12, + 24, 134, 2, 62, 2, 111, 39, 17, 12, 24, 134, 2, 62, 2, 111, 66, 17, 12, + 24, 111, 2, 62, 2, 70, 39, 17, 12, 24, 111, 2, 62, 2, 99, 197, 39, 17, + 12, 24, 226, 83, 2, 111, 2, 134, 66, 17, 12, 24, 226, 83, 2, 134, 2, 111, + 66, 17, 12, 24, 226, 83, 2, 134, 2, 99, 197, 39, 17, 12, 24, 226, 83, 2, + 62, 2, 111, 39, 17, 12, 24, 226, 83, 2, 62, 2, 111, 66, 17, 12, 24, 226, + 83, 2, 62, 2, 134, 66, 17, 12, 24, 226, 83, 2, 62, 2, 62, 39, 17, 12, 24, + 226, 83, 2, 62, 2, 62, 66, 17, 12, 24, 226, 171, 2, 111, 2, 111, 39, 17, + 12, 24, 226, 171, 2, 111, 2, 111, 66, 17, 12, 24, 226, 171, 2, 62, 2, 62, + 39, 17, 12, 24, 224, 243, 2, 111, 2, 62, 39, 17, 12, 24, 224, 243, 2, + 111, 2, 62, 66, 17, 12, 24, 224, 243, 2, 134, 2, 70, 39, 17, 12, 24, 224, + 243, 2, 62, 2, 236, 147, 39, 17, 12, 24, 224, 243, 2, 62, 2, 236, 147, + 66, 17, 12, 24, 224, 243, 2, 62, 2, 62, 39, 17, 12, 24, 224, 243, 2, 62, + 2, 62, 66, 17, 12, 24, 249, 203, 2, 111, 2, 99, 197, 39, 17, 12, 24, 249, + 203, 2, 236, 147, 2, 62, 39, 17, 12, 24, 249, 203, 2, 236, 147, 2, 62, + 66, 17, 12, 24, 222, 138, 2, 62, 2, 111, 39, 17, 12, 24, 222, 138, 2, 62, + 2, 111, 66, 17, 12, 24, 222, 138, 2, 62, 2, 62, 66, 17, 12, 24, 222, 138, + 2, 62, 2, 70, 39, 17, 12, 24, 254, 192, 2, 134, 2, 62, 39, 17, 12, 24, + 254, 192, 2, 62, 2, 62, 39, 17, 12, 24, 254, 192, 2, 62, 2, 62, 66, 17, + 12, 24, 254, 192, 2, 62, 2, 99, 197, 39, 17, 12, 24, 244, 123, 2, 62, 2, + 62, 39, 17, 12, 24, 244, 123, 2, 62, 2, 70, 39, 17, 12, 24, 244, 123, 2, + 62, 2, 99, 197, 39, 17, 12, 24, 245, 222, 2, 236, 147, 2, 62, 39, 17, 12, + 24, 245, 222, 2, 236, 147, 2, 62, 66, 17, 12, 24, 228, 149, 2, 62, 2, + 111, 39, 17, 12, 24, 228, 149, 2, 62, 2, 62, 39, 17, 12, 24, 235, 161, 2, + 111, 2, 62, 39, 17, 12, 24, 235, 161, 2, 111, 2, 70, 39, 17, 12, 24, 235, + 161, 2, 111, 2, 99, 197, 39, 17, 12, 24, 235, 161, 2, 134, 2, 134, 66, + 17, 12, 24, 235, 161, 2, 134, 2, 134, 39, 17, 12, 24, 235, 161, 2, 236, + 147, 2, 62, 39, 17, 12, 24, 235, 161, 2, 236, 147, 2, 62, 66, 17, 12, 24, + 235, 161, 2, 62, 2, 111, 39, 17, 12, 24, 235, 161, 2, 62, 2, 111, 66, 17, + 12, 24, 62, 2, 111, 2, 134, 66, 17, 12, 24, 62, 2, 111, 2, 62, 66, 17, + 12, 24, 62, 2, 111, 2, 70, 39, 17, 12, 24, 62, 2, 134, 2, 111, 66, 17, + 12, 24, 62, 2, 134, 2, 62, 66, 17, 12, 24, 62, 2, 236, 147, 2, 134, 66, + 17, 12, 24, 62, 2, 236, 147, 2, 62, 66, 17, 12, 24, 62, 2, 134, 2, 236, + 147, 66, 17, 12, 24, 243, 147, 2, 62, 2, 134, 66, 17, 12, 24, 243, 147, + 2, 62, 2, 62, 66, 17, 12, 24, 231, 194, 2, 111, 2, 62, 66, 17, 12, 24, + 231, 194, 2, 111, 2, 99, 197, 39, 17, 12, 24, 231, 194, 2, 134, 2, 62, + 39, 17, 12, 24, 231, 194, 2, 134, 2, 62, 66, 17, 12, 24, 231, 194, 2, + 134, 2, 99, 197, 39, 17, 12, 24, 231, 194, 2, 62, 2, 70, 39, 17, 12, 24, + 231, 194, 2, 62, 2, 99, 197, 39, 17, 12, 24, 70, 2, 62, 2, 62, 39, 17, + 12, 24, 70, 2, 62, 2, 62, 66, 17, 12, 24, 252, 129, 2, 236, 147, 2, 70, + 39, 17, 12, 24, 222, 78, 2, 134, 2, 70, 39, 17, 12, 24, 222, 78, 2, 134, + 2, 99, 197, 39, 17, 12, 24, 222, 78, 2, 236, 147, 2, 70, 39, 17, 12, 24, + 222, 78, 2, 236, 147, 2, 99, 197, 39, 17, 12, 24, 222, 78, 2, 62, 2, 70, + 39, 17, 12, 24, 222, 78, 2, 62, 2, 99, 197, 39, 17, 12, 24, 134, 2, 62, + 2, 70, 39, 17, 12, 24, 134, 2, 111, 2, 99, 197, 39, 17, 12, 24, 134, 2, + 62, 2, 99, 197, 39, 17, 12, 24, 226, 83, 2, 236, 147, 2, 99, 197, 39, 17, + 12, 24, 226, 171, 2, 111, 2, 70, 39, 17, 12, 24, 224, 243, 2, 111, 2, 70, + 39, 17, 12, 24, 249, 203, 2, 111, 2, 70, 39, 17, 12, 24, 235, 161, 2, + 134, 2, 70, 39, 17, 12, 24, 235, 161, 2, 62, 2, 70, 39, 17, 12, 24, 70, + 2, 111, 2, 70, 39, 17, 12, 24, 70, 2, 134, 2, 70, 39, 17, 12, 24, 70, 2, + 62, 2, 70, 39, 17, 12, 24, 62, 2, 62, 2, 70, 39, 17, 12, 24, 228, 149, 2, + 62, 2, 70, 39, 17, 12, 24, 231, 194, 2, 111, 2, 70, 39, 17, 12, 24, 228, + 149, 2, 62, 2, 111, 66, 17, 12, 24, 235, 161, 2, 111, 2, 62, 66, 17, 12, + 24, 254, 192, 2, 62, 2, 70, 39, 17, 12, 24, 236, 247, 2, 62, 2, 70, 39, + 17, 12, 24, 231, 194, 2, 134, 2, 111, 66, 17, 12, 24, 62, 2, 236, 147, 2, + 70, 39, 17, 12, 24, 235, 161, 2, 134, 2, 62, 66, 17, 12, 24, 236, 247, 2, + 62, 2, 62, 39, 17, 12, 24, 235, 161, 2, 134, 2, 62, 39, 17, 12, 24, 231, + 194, 2, 134, 2, 111, 39, 17, 12, 24, 134, 2, 111, 2, 70, 39, 17, 12, 24, + 111, 2, 134, 2, 70, 39, 17, 12, 24, 62, 2, 134, 2, 70, 39, 17, 12, 24, + 245, 222, 2, 62, 2, 70, 39, 17, 12, 24, 252, 129, 2, 111, 2, 70, 39, 17, + 12, 24, 236, 247, 2, 62, 2, 62, 66, 17, 12, 24, 254, 192, 2, 134, 2, 62, + 66, 17, 12, 24, 226, 171, 2, 62, 2, 62, 66, 17, 12, 24, 226, 83, 2, 236, + 147, 2, 70, 39, 17, 12, 24, 231, 194, 2, 134, 2, 70, 39, 17, 12, 24, 226, + 153, 220, 32, 254, 14, 236, 35, 223, 137, 5, 47, 17, 12, 24, 228, 145, + 220, 32, 254, 14, 236, 35, 223, 137, 5, 47, 17, 12, 24, 254, 156, 47, 17, + 12, 24, 254, 179, 47, 17, 12, 24, 233, 130, 47, 17, 12, 24, 226, 154, 47, + 17, 12, 24, 227, 230, 47, 17, 12, 24, 254, 170, 47, 17, 12, 24, 218, 249, + 47, 17, 12, 24, 226, 153, 47, 17, 12, 24, 226, 152, 254, 170, 218, 248, + 12, 24, 237, 120, 227, 146, 55, 12, 24, 252, 61, 254, 65, 254, 66, 41, + 226, 73, 41, 225, 218, 41, 225, 150, 41, 225, 139, 41, 225, 128, 41, 225, + 117, 41, 225, 106, 41, 225, 95, 41, 225, 84, 41, 226, 72, 41, 226, 61, + 41, 226, 50, 41, 226, 39, 41, 226, 28, 41, 226, 17, 41, 226, 6, 228, 238, + 245, 124, 35, 69, 250, 168, 228, 238, 245, 124, 35, 69, 98, 250, 168, + 228, 238, 245, 124, 35, 69, 98, 245, 90, 223, 136, 228, 238, 245, 124, + 35, 69, 250, 175, 228, 238, 245, 124, 35, 69, 225, 67, 228, 238, 245, + 124, 35, 69, 246, 95, 78, 228, 238, 245, 124, 35, 69, 228, 82, 78, 228, + 238, 245, 124, 35, 69, 42, 67, 235, 91, 115, 228, 238, 245, 124, 35, 69, + 45, 67, 235, 91, 252, 16, 228, 238, 245, 124, 35, 69, 186, 246, 208, 36, + 24, 42, 243, 194, 36, 24, 45, 243, 194, 36, 51, 221, 180, 42, 243, 194, + 36, 51, 221, 180, 45, 243, 194, 36, 234, 116, 42, 243, 194, 36, 234, 116, + 45, 243, 194, 36, 250, 151, 234, 115, 228, 238, 245, 124, 35, 69, 124, + 61, 235, 121, 228, 238, 245, 124, 35, 69, 246, 206, 249, 146, 228, 238, + 245, 124, 35, 69, 246, 198, 249, 146, 228, 238, 245, 124, 35, 69, 109, + 235, 43, 228, 238, 245, 124, 35, 69, 218, 235, 109, 235, 43, 228, 238, + 245, 124, 35, 69, 42, 229, 229, 228, 238, 245, 124, 35, 69, 45, 229, 229, + 228, 238, 245, 124, 35, 69, 42, 250, 79, 115, 228, 238, 245, 124, 35, 69, + 45, 250, 79, 115, 228, 238, 245, 124, 35, 69, 42, 221, 114, 224, 236, + 115, 228, 238, 245, 124, 35, 69, 45, 221, 114, 224, 236, 115, 228, 238, + 245, 124, 35, 69, 42, 84, 235, 91, 115, 228, 238, 245, 124, 35, 69, 45, + 84, 235, 91, 115, 228, 238, 245, 124, 35, 69, 42, 51, 254, 120, 115, 228, + 238, 245, 124, 35, 69, 45, 51, 254, 120, 115, 228, 238, 245, 124, 35, 69, + 42, 254, 120, 115, 228, 238, 245, 124, 35, 69, 45, 254, 120, 115, 228, + 238, 245, 124, 35, 69, 42, 250, 124, 115, 228, 238, 245, 124, 35, 69, 45, + 250, 124, 115, 228, 238, 245, 124, 35, 69, 42, 67, 250, 124, 115, 228, + 238, 245, 124, 35, 69, 45, 67, 250, 124, 115, 225, 49, 248, 145, 67, 225, + 49, 248, 145, 228, 238, 245, 124, 35, 69, 42, 40, 115, 228, 238, 245, + 124, 35, 69, 45, 40, 115, 249, 145, 230, 73, 251, 82, 230, 73, 218, 235, + 230, 73, 51, 218, 235, 230, 73, 249, 145, 109, 235, 43, 251, 82, 109, + 235, 43, 218, 235, 109, 235, 43, 3, 250, 168, 3, 98, 250, 168, 3, 245, + 90, 223, 136, 3, 225, 67, 3, 250, 175, 3, 228, 82, 78, 3, 246, 95, 78, 3, + 246, 206, 249, 146, 3, 42, 229, 229, 3, 45, 229, 229, 3, 42, 250, 79, + 115, 3, 45, 250, 79, 115, 3, 42, 221, 114, 224, 236, 115, 3, 45, 221, + 114, 224, 236, 115, 3, 54, 55, 3, 254, 134, 3, 253, 251, 3, 88, 55, 3, + 242, 120, 3, 235, 87, 55, 3, 244, 30, 55, 3, 246, 154, 55, 3, 227, 160, + 224, 17, 3, 248, 155, 55, 3, 229, 169, 55, 3, 250, 167, 253, 244, 12, + 245, 237, 47, 17, 12, 222, 108, 2, 245, 237, 50, 12, 249, 171, 47, 17, + 12, 222, 136, 245, 107, 12, 236, 205, 47, 17, 12, 245, 239, 47, 17, 12, + 245, 239, 128, 17, 12, 249, 173, 47, 17, 12, 249, 173, 128, 17, 12, 236, + 207, 47, 17, 12, 236, 207, 128, 17, 12, 225, 17, 47, 17, 12, 225, 17, + 128, 17, 12, 223, 76, 47, 17, 12, 223, 76, 128, 17, 12, 1, 181, 47, 17, + 12, 1, 99, 2, 234, 111, 71, 47, 17, 12, 1, 99, 2, 234, 111, 71, 39, 17, + 12, 1, 99, 2, 181, 71, 47, 17, 12, 1, 99, 2, 181, 71, 39, 17, 12, 1, 218, + 234, 2, 181, 71, 47, 17, 12, 1, 218, 234, 2, 181, 71, 39, 17, 12, 1, 99, + 2, 181, 252, 118, 47, 17, 12, 1, 99, 2, 181, 252, 118, 39, 17, 12, 1, 70, + 2, 181, 71, 47, 17, 12, 1, 70, 2, 181, 71, 39, 17, 12, 1, 70, 2, 181, 71, + 66, 17, 12, 1, 70, 2, 181, 71, 128, 17, 12, 1, 99, 47, 17, 12, 1, 99, 39, + 17, 12, 1, 252, 129, 47, 17, 12, 1, 252, 129, 39, 17, 12, 1, 252, 129, + 66, 17, 12, 1, 252, 129, 128, 17, 12, 1, 222, 78, 234, 73, 47, 17, 12, 1, + 222, 78, 234, 73, 39, 17, 12, 1, 222, 78, 47, 17, 12, 1, 222, 78, 39, 17, + 12, 1, 222, 78, 66, 17, 12, 1, 222, 78, 128, 17, 12, 1, 222, 20, 47, 17, + 12, 1, 222, 20, 39, 17, 12, 1, 222, 20, 66, 17, 12, 1, 222, 20, 128, 17, + 12, 1, 134, 47, 17, 12, 1, 134, 39, 17, 12, 1, 134, 66, 17, 12, 1, 134, + 128, 17, 12, 1, 111, 47, 17, 12, 1, 111, 39, 17, 12, 1, 111, 66, 17, 12, + 1, 111, 128, 17, 12, 1, 236, 147, 47, 17, 12, 1, 236, 147, 39, 17, 12, 1, + 236, 147, 66, 17, 12, 1, 236, 147, 128, 17, 12, 1, 249, 184, 47, 17, 12, + 1, 249, 184, 39, 17, 12, 1, 222, 30, 47, 17, 12, 1, 222, 30, 39, 17, 12, + 1, 227, 197, 47, 17, 12, 1, 227, 197, 39, 17, 12, 1, 217, 107, 47, 17, + 12, 1, 217, 107, 39, 17, 12, 1, 226, 83, 47, 17, 12, 1, 226, 83, 39, 17, + 12, 1, 226, 83, 66, 17, 12, 1, 226, 83, 128, 17, 12, 1, 224, 243, 47, 17, + 12, 1, 224, 243, 39, 17, 12, 1, 224, 243, 66, 17, 12, 1, 224, 243, 128, + 17, 12, 1, 226, 171, 47, 17, 12, 1, 226, 171, 39, 17, 12, 1, 226, 171, + 66, 17, 12, 1, 226, 171, 128, 17, 12, 1, 249, 203, 47, 17, 12, 1, 249, + 203, 39, 17, 12, 1, 249, 203, 66, 17, 12, 1, 249, 203, 128, 17, 12, 1, + 222, 138, 47, 17, 12, 1, 222, 138, 39, 17, 12, 1, 222, 138, 66, 17, 12, + 1, 222, 138, 128, 17, 12, 1, 217, 110, 47, 17, 12, 1, 217, 110, 39, 17, + 12, 1, 217, 110, 66, 17, 12, 1, 217, 110, 128, 17, 12, 1, 254, 192, 47, + 17, 12, 1, 254, 192, 39, 17, 12, 1, 254, 192, 66, 17, 12, 1, 254, 192, + 128, 17, 12, 1, 244, 123, 47, 17, 12, 1, 244, 123, 39, 17, 12, 1, 244, + 123, 66, 17, 12, 1, 244, 123, 128, 17, 12, 1, 245, 222, 47, 17, 12, 1, + 245, 222, 39, 17, 12, 1, 245, 222, 66, 17, 12, 1, 245, 222, 128, 17, 12, + 1, 228, 149, 47, 17, 12, 1, 228, 149, 39, 17, 12, 1, 228, 149, 66, 17, + 12, 1, 228, 149, 128, 17, 12, 1, 236, 247, 47, 17, 12, 1, 236, 247, 39, + 17, 12, 1, 236, 247, 66, 17, 12, 1, 236, 247, 128, 17, 12, 1, 235, 161, + 47, 17, 12, 1, 235, 161, 39, 17, 12, 1, 235, 161, 66, 17, 12, 1, 235, + 161, 128, 17, 12, 1, 62, 47, 17, 12, 1, 62, 39, 17, 12, 1, 62, 66, 17, + 12, 1, 62, 128, 17, 12, 1, 231, 194, 47, 17, 12, 1, 231, 194, 39, 17, 12, + 1, 231, 194, 66, 17, 12, 1, 231, 194, 128, 17, 12, 1, 243, 147, 47, 17, + 12, 1, 243, 147, 39, 17, 12, 1, 243, 147, 66, 17, 12, 1, 243, 147, 128, + 17, 12, 1, 218, 234, 47, 17, 12, 1, 218, 234, 39, 17, 12, 1, 99, 197, 47, + 17, 12, 1, 99, 197, 39, 17, 12, 1, 70, 47, 17, 12, 1, 70, 39, 17, 12, 1, + 70, 66, 17, 12, 1, 70, 128, 17, 12, 24, 235, 161, 2, 99, 2, 234, 111, 71, + 47, 17, 12, 24, 235, 161, 2, 99, 2, 234, 111, 71, 39, 17, 12, 24, 235, + 161, 2, 99, 2, 181, 71, 47, 17, 12, 24, 235, 161, 2, 99, 2, 181, 71, 39, + 17, 12, 24, 235, 161, 2, 99, 2, 181, 252, 118, 47, 17, 12, 24, 235, 161, + 2, 99, 2, 181, 252, 118, 39, 17, 12, 24, 235, 161, 2, 99, 47, 17, 12, 24, + 235, 161, 2, 99, 39, 17, 217, 85, 218, 199, 231, 203, 223, 254, 110, 246, + 95, 78, 110, 228, 69, 78, 110, 54, 55, 110, 248, 155, 55, 110, 229, 169, + 55, 110, 254, 134, 110, 254, 79, 110, 42, 229, 229, 110, 45, 229, 229, + 110, 253, 251, 110, 88, 55, 110, 250, 168, 110, 242, 120, 110, 245, 90, + 223, 136, 110, 224, 17, 110, 20, 217, 84, 110, 20, 107, 110, 20, 103, + 110, 20, 160, 110, 20, 154, 110, 20, 174, 110, 20, 182, 110, 20, 191, + 110, 20, 185, 110, 20, 190, 110, 250, 175, 110, 225, 67, 110, 235, 87, + 55, 110, 246, 154, 55, 110, 244, 30, 55, 110, 228, 82, 78, 110, 250, 167, + 253, 244, 110, 7, 6, 1, 60, 110, 7, 6, 1, 253, 204, 110, 7, 6, 1, 251, + 202, 110, 7, 6, 1, 250, 46, 110, 7, 6, 1, 73, 110, 7, 6, 1, 246, 74, 110, + 7, 6, 1, 245, 67, 110, 7, 6, 1, 243, 225, 110, 7, 6, 1, 72, 110, 7, 6, 1, + 237, 126, 110, 7, 6, 1, 237, 17, 110, 7, 6, 1, 153, 110, 7, 6, 1, 189, + 110, 7, 6, 1, 207, 110, 7, 6, 1, 74, 110, 7, 6, 1, 230, 59, 110, 7, 6, 1, + 228, 163, 110, 7, 6, 1, 152, 110, 7, 6, 1, 198, 110, 7, 6, 1, 222, 201, + 110, 7, 6, 1, 68, 110, 7, 6, 1, 216, 216, 110, 7, 6, 1, 219, 40, 110, 7, + 6, 1, 218, 151, 110, 7, 6, 1, 218, 90, 110, 7, 6, 1, 217, 157, 110, 42, + 40, 115, 110, 227, 160, 224, 17, 110, 45, 40, 115, 110, 250, 217, 255, 0, + 110, 109, 235, 43, 110, 244, 37, 255, 0, 110, 7, 3, 1, 60, 110, 7, 3, 1, + 253, 204, 110, 7, 3, 1, 251, 202, 110, 7, 3, 1, 250, 46, 110, 7, 3, 1, + 73, 110, 7, 3, 1, 246, 74, 110, 7, 3, 1, 245, 67, 110, 7, 3, 1, 243, 225, + 110, 7, 3, 1, 72, 110, 7, 3, 1, 237, 126, 110, 7, 3, 1, 237, 17, 110, 7, + 3, 1, 153, 110, 7, 3, 1, 189, 110, 7, 3, 1, 207, 110, 7, 3, 1, 74, 110, + 7, 3, 1, 230, 59, 110, 7, 3, 1, 228, 163, 110, 7, 3, 1, 152, 110, 7, 3, + 1, 198, 110, 7, 3, 1, 222, 201, 110, 7, 3, 1, 68, 110, 7, 3, 1, 216, 216, + 110, 7, 3, 1, 219, 40, 110, 7, 3, 1, 218, 151, 110, 7, 3, 1, 218, 90, + 110, 7, 3, 1, 217, 157, 110, 42, 250, 79, 115, 110, 69, 235, 43, 110, 45, + 250, 79, 115, 110, 221, 179, 110, 42, 67, 229, 229, 110, 45, 67, 229, + 229, 93, 98, 245, 90, 223, 136, 93, 42, 250, 124, 115, 93, 45, 250, 124, + 115, 93, 98, 250, 168, 93, 52, 233, 193, 248, 145, 93, 52, 1, 218, 187, + 93, 52, 1, 3, 60, 93, 52, 1, 3, 72, 93, 52, 1, 3, 68, 93, 52, 1, 3, 73, + 93, 52, 1, 3, 74, 93, 52, 1, 3, 184, 93, 52, 1, 3, 217, 200, 93, 52, 1, + 3, 217, 231, 93, 52, 1, 3, 221, 0, 93, 236, 202, 228, 223, 224, 9, 78, + 93, 52, 1, 60, 93, 52, 1, 72, 93, 52, 1, 68, 93, 52, 1, 73, 93, 52, 1, + 74, 93, 52, 1, 175, 93, 52, 1, 236, 113, 93, 52, 1, 236, 7, 93, 52, 1, + 236, 184, 93, 52, 1, 236, 57, 93, 52, 1, 226, 177, 93, 52, 1, 224, 140, + 93, 52, 1, 223, 103, 93, 52, 1, 226, 94, 93, 52, 1, 224, 26, 93, 52, 1, + 222, 155, 93, 52, 1, 221, 205, 93, 52, 1, 221, 0, 93, 52, 1, 222, 87, 93, + 52, 1, 101, 93, 52, 1, 208, 93, 52, 1, 232, 62, 93, 52, 1, 231, 144, 93, + 52, 1, 232, 141, 93, 52, 1, 231, 204, 93, 52, 1, 155, 93, 52, 1, 243, + 112, 93, 52, 1, 242, 173, 93, 52, 1, 243, 162, 93, 52, 1, 243, 4, 93, 52, + 1, 196, 93, 52, 1, 233, 196, 93, 52, 1, 233, 99, 93, 52, 1, 234, 25, 93, + 52, 1, 233, 136, 93, 52, 1, 184, 93, 52, 1, 217, 200, 93, 52, 1, 217, + 231, 93, 52, 1, 203, 93, 52, 1, 227, 147, 93, 52, 1, 227, 22, 93, 52, 1, + 227, 216, 93, 52, 1, 227, 75, 93, 52, 1, 219, 7, 93, 52, 1, 207, 93, 52, + 219, 70, 224, 9, 78, 93, 52, 225, 72, 224, 9, 78, 93, 22, 245, 185, 93, + 22, 1, 236, 86, 93, 22, 1, 223, 211, 93, 22, 1, 236, 79, 93, 22, 1, 232, + 55, 93, 22, 1, 232, 53, 93, 22, 1, 232, 52, 93, 22, 1, 221, 192, 93, 22, + 1, 223, 200, 93, 22, 1, 227, 140, 93, 22, 1, 227, 135, 93, 22, 1, 227, + 132, 93, 22, 1, 227, 125, 93, 22, 1, 227, 120, 93, 22, 1, 227, 115, 93, + 22, 1, 227, 126, 93, 22, 1, 227, 138, 93, 22, 1, 233, 187, 93, 22, 1, + 229, 99, 93, 22, 1, 223, 208, 93, 22, 1, 229, 88, 93, 22, 1, 224, 104, + 93, 22, 1, 223, 205, 93, 22, 1, 238, 22, 93, 22, 1, 250, 230, 93, 22, 1, + 223, 215, 93, 22, 1, 251, 29, 93, 22, 1, 236, 128, 93, 22, 1, 222, 0, 93, + 22, 1, 229, 127, 93, 22, 1, 243, 106, 93, 22, 1, 60, 93, 22, 1, 254, 234, + 93, 22, 1, 184, 93, 22, 1, 218, 65, 93, 22, 1, 246, 168, 93, 22, 1, 73, + 93, 22, 1, 218, 16, 93, 22, 1, 218, 25, 93, 22, 1, 74, 93, 22, 1, 219, 7, + 93, 22, 1, 219, 4, 93, 22, 1, 230, 167, 93, 22, 1, 217, 231, 93, 22, 1, + 68, 93, 22, 1, 218, 219, 93, 22, 1, 218, 227, 93, 22, 1, 218, 204, 93, + 22, 1, 217, 200, 93, 22, 1, 246, 115, 93, 22, 1, 217, 250, 93, 22, 1, 72, + 110, 251, 86, 55, 110, 229, 11, 55, 110, 212, 55, 110, 234, 115, 110, + 252, 1, 135, 110, 218, 19, 55, 110, 218, 182, 55, 93, 245, 122, 170, 219, + 152, 93, 127, 65, 93, 220, 53, 65, 93, 90, 65, 93, 247, 130, 65, 93, 84, + 223, 227, 93, 67, 250, 221, 237, 180, 254, 112, 254, 128, 237, 180, 254, + 112, 225, 54, 237, 180, 254, 112, 222, 56, 230, 178, 227, 179, 251, 55, + 227, 179, 251, 55, 57, 49, 4, 253, 188, 60, 57, 49, 4, 253, 157, 73, 57, + 49, 4, 253, 166, 72, 57, 49, 4, 253, 134, 74, 57, 49, 4, 253, 184, 68, + 57, 49, 4, 253, 203, 249, 207, 57, 49, 4, 253, 150, 249, 92, 57, 49, 4, + 253, 190, 249, 15, 57, 49, 4, 253, 180, 248, 167, 57, 49, 4, 253, 144, + 247, 111, 57, 49, 4, 253, 138, 237, 123, 57, 49, 4, 253, 149, 237, 114, + 57, 49, 4, 253, 159, 237, 59, 57, 49, 4, 253, 130, 237, 43, 57, 49, 4, + 253, 118, 175, 57, 49, 4, 253, 151, 236, 184, 57, 49, 4, 253, 128, 236, + 113, 57, 49, 4, 253, 125, 236, 57, 57, 49, 4, 253, 114, 236, 7, 57, 49, + 4, 253, 115, 196, 57, 49, 4, 253, 181, 234, 25, 57, 49, 4, 253, 122, 233, + 196, 57, 49, 4, 253, 179, 233, 136, 57, 49, 4, 253, 171, 233, 99, 57, 49, + 4, 253, 192, 208, 57, 49, 4, 253, 170, 232, 141, 57, 49, 4, 253, 164, + 232, 62, 57, 49, 4, 253, 143, 231, 204, 57, 49, 4, 253, 140, 231, 144, + 57, 49, 4, 253, 199, 187, 57, 49, 4, 253, 123, 229, 198, 57, 49, 4, 253, + 156, 229, 108, 57, 49, 4, 253, 183, 229, 37, 57, 49, 4, 253, 145, 228, + 202, 57, 49, 4, 253, 178, 228, 155, 57, 49, 4, 253, 117, 228, 136, 57, + 49, 4, 253, 173, 228, 121, 57, 49, 4, 253, 162, 228, 110, 57, 49, 4, 253, + 135, 203, 57, 49, 4, 253, 167, 227, 216, 57, 49, 4, 253, 142, 227, 147, + 57, 49, 4, 253, 201, 227, 75, 57, 49, 4, 253, 168, 227, 22, 57, 49, 4, + 253, 163, 226, 177, 57, 49, 4, 253, 186, 226, 94, 57, 49, 4, 253, 154, + 224, 140, 57, 49, 4, 253, 182, 224, 26, 57, 49, 4, 253, 137, 223, 103, + 57, 49, 4, 253, 136, 222, 155, 57, 49, 4, 253, 197, 222, 87, 57, 49, 4, + 253, 158, 221, 205, 57, 49, 4, 253, 195, 101, 57, 49, 4, 253, 126, 221, + 0, 57, 49, 4, 253, 141, 219, 7, 57, 49, 4, 253, 120, 218, 227, 57, 49, 4, + 253, 155, 218, 204, 57, 49, 4, 253, 153, 218, 187, 57, 49, 4, 253, 177, + 217, 114, 57, 49, 4, 253, 121, 217, 92, 57, 49, 4, 253, 174, 217, 21, 57, + 49, 4, 253, 169, 255, 60, 57, 49, 4, 253, 152, 255, 59, 57, 49, 4, 253, + 111, 253, 232, 57, 49, 4, 253, 124, 247, 82, 57, 49, 4, 253, 107, 247, + 81, 57, 49, 4, 253, 147, 231, 85, 57, 49, 4, 253, 165, 228, 201, 57, 49, + 4, 253, 133, 228, 204, 57, 49, 4, 253, 119, 228, 2, 57, 49, 4, 253, 161, + 228, 1, 57, 49, 4, 253, 127, 227, 74, 57, 49, 4, 253, 129, 222, 153, 57, + 49, 4, 253, 109, 220, 223, 57, 49, 4, 253, 106, 103, 57, 49, 16, 253, + 176, 57, 49, 16, 253, 175, 57, 49, 16, 253, 172, 57, 49, 16, 253, 160, + 57, 49, 16, 253, 148, 57, 49, 16, 253, 146, 57, 49, 16, 253, 139, 57, 49, + 16, 253, 132, 57, 49, 16, 253, 131, 57, 49, 16, 253, 116, 57, 49, 16, + 253, 113, 57, 49, 16, 253, 112, 57, 49, 16, 253, 110, 57, 49, 16, 253, + 108, 57, 49, 97, 253, 105, 234, 86, 57, 49, 97, 253, 104, 218, 183, 57, + 49, 97, 253, 103, 249, 80, 57, 49, 97, 253, 102, 246, 151, 57, 49, 97, + 253, 101, 234, 68, 57, 49, 97, 253, 100, 223, 162, 57, 49, 97, 253, 99, + 246, 100, 57, 49, 97, 253, 98, 227, 239, 57, 49, 97, 253, 97, 224, 245, + 57, 49, 97, 253, 96, 243, 161, 57, 49, 97, 253, 95, 224, 4, 57, 49, 97, + 253, 94, 252, 39, 57, 49, 97, 253, 93, 250, 110, 57, 49, 97, 253, 92, + 251, 243, 57, 49, 97, 253, 91, 218, 212, 57, 49, 97, 253, 90, 252, 198, + 57, 49, 97, 253, 89, 230, 147, 57, 49, 97, 253, 88, 223, 244, 57, 49, 97, + 253, 87, 250, 54, 57, 49, 233, 125, 253, 86, 236, 223, 57, 49, 233, 125, + 253, 85, 236, 231, 57, 49, 97, 253, 84, 230, 157, 57, 49, 97, 253, 83, + 218, 192, 57, 49, 97, 253, 82, 57, 49, 233, 125, 253, 81, 254, 44, 57, + 49, 233, 125, 253, 80, 233, 247, 57, 49, 97, 253, 79, 252, 0, 57, 49, 97, + 253, 78, 244, 62, 57, 49, 97, 253, 77, 57, 49, 97, 253, 76, 218, 177, 57, + 49, 97, 253, 75, 57, 49, 97, 253, 74, 57, 49, 97, 253, 73, 242, 189, 57, + 49, 97, 253, 72, 57, 49, 97, 253, 71, 57, 49, 97, 253, 70, 57, 49, 233, + 125, 253, 68, 220, 235, 57, 49, 97, 253, 67, 57, 49, 97, 253, 66, 57, 49, + 97, 253, 65, 250, 192, 57, 49, 97, 253, 64, 57, 49, 97, 253, 63, 57, 49, + 97, 253, 62, 244, 218, 57, 49, 97, 253, 61, 254, 31, 57, 49, 97, 253, 60, + 57, 49, 97, 253, 59, 57, 49, 97, 253, 58, 57, 49, 97, 253, 57, 57, 49, + 97, 253, 56, 57, 49, 97, 253, 55, 57, 49, 97, 253, 54, 57, 49, 97, 253, + 53, 57, 49, 97, 253, 52, 57, 49, 97, 253, 51, 233, 120, 57, 49, 97, 253, + 50, 57, 49, 97, 253, 49, 221, 98, 57, 49, 97, 253, 48, 57, 49, 97, 253, + 47, 57, 49, 97, 253, 46, 57, 49, 97, 253, 45, 57, 49, 97, 253, 44, 57, + 49, 97, 253, 43, 57, 49, 97, 253, 42, 57, 49, 97, 253, 41, 57, 49, 97, + 253, 40, 57, 49, 97, 253, 39, 57, 49, 97, 253, 38, 57, 49, 97, 253, 37, + 243, 140, 57, 49, 97, 253, 16, 245, 131, 57, 49, 97, 253, 13, 252, 182, + 57, 49, 97, 253, 8, 223, 249, 57, 49, 97, 253, 7, 65, 57, 49, 97, 253, 6, + 57, 49, 97, 253, 5, 223, 25, 57, 49, 97, 253, 4, 57, 49, 97, 253, 3, 57, + 49, 97, 253, 2, 218, 208, 251, 52, 57, 49, 97, 253, 1, 251, 52, 57, 49, + 97, 253, 0, 251, 53, 245, 105, 57, 49, 97, 252, 255, 218, 210, 57, 49, + 97, 252, 254, 57, 49, 97, 252, 253, 57, 49, 233, 125, 252, 252, 248, 211, + 57, 49, 97, 252, 251, 57, 49, 97, 252, 250, 57, 49, 97, 252, 248, 57, 49, + 97, 252, 247, 57, 49, 97, 252, 246, 57, 49, 97, 252, 245, 249, 149, 57, + 49, 97, 252, 244, 57, 49, 97, 252, 243, 57, 49, 97, 252, 242, 57, 49, 97, + 252, 241, 57, 49, 97, 252, 240, 57, 49, 97, 219, 99, 253, 69, 57, 49, 97, + 219, 99, 253, 36, 57, 49, 97, 219, 99, 253, 35, 57, 49, 97, 219, 99, 253, + 34, 57, 49, 97, 219, 99, 253, 33, 57, 49, 97, 219, 99, 253, 32, 57, 49, + 97, 219, 99, 253, 31, 57, 49, 97, 219, 99, 253, 30, 57, 49, 97, 219, 99, + 253, 29, 57, 49, 97, 219, 99, 253, 28, 57, 49, 97, 219, 99, 253, 27, 57, + 49, 97, 219, 99, 253, 26, 57, 49, 97, 219, 99, 253, 25, 57, 49, 97, 219, + 99, 253, 24, 57, 49, 97, 219, 99, 253, 23, 57, 49, 97, 219, 99, 253, 22, + 57, 49, 97, 219, 99, 253, 21, 57, 49, 97, 219, 99, 253, 20, 57, 49, 97, + 219, 99, 253, 19, 57, 49, 97, 219, 99, 253, 18, 57, 49, 97, 219, 99, 253, + 17, 57, 49, 97, 219, 99, 253, 15, 57, 49, 97, 219, 99, 253, 14, 57, 49, + 97, 219, 99, 253, 12, 57, 49, 97, 219, 99, 253, 11, 57, 49, 97, 219, 99, + 253, 10, 57, 49, 97, 219, 99, 253, 9, 57, 49, 97, 219, 99, 252, 249, 57, + 49, 97, 219, 99, 252, 239, 254, 227, 218, 174, 225, 55, 235, 43, 254, + 227, 218, 174, 225, 55, 248, 145, 254, 227, 251, 45, 78, 254, 227, 54, + 107, 254, 227, 54, 103, 254, 227, 54, 160, 254, 227, 54, 154, 254, 227, + 54, 174, 254, 227, 54, 182, 254, 227, 54, 191, 254, 227, 54, 185, 254, + 227, 54, 190, 254, 227, 54, 222, 65, 254, 227, 54, 220, 219, 254, 227, + 54, 221, 245, 254, 227, 54, 245, 119, 254, 227, 54, 245, 196, 254, 227, + 54, 224, 69, 254, 227, 54, 225, 38, 254, 227, 54, 246, 227, 254, 227, 54, + 232, 27, 254, 227, 54, 131, 242, 161, 254, 227, 54, 124, 242, 161, 254, + 227, 54, 148, 242, 161, 254, 227, 54, 245, 116, 242, 161, 254, 227, 54, + 245, 170, 242, 161, 254, 227, 54, 224, 82, 242, 161, 254, 227, 54, 225, + 43, 242, 161, 254, 227, 54, 246, 235, 242, 161, 254, 227, 54, 232, 31, + 242, 161, 254, 227, 54, 131, 221, 231, 254, 227, 54, 124, 221, 231, 254, + 227, 54, 148, 221, 231, 254, 227, 54, 245, 116, 221, 231, 254, 227, 54, + 245, 170, 221, 231, 254, 227, 54, 224, 82, 221, 231, 254, 227, 54, 225, + 43, 221, 231, 254, 227, 54, 246, 235, 221, 231, 254, 227, 54, 232, 31, + 221, 231, 254, 227, 54, 222, 66, 221, 231, 254, 227, 54, 220, 220, 221, + 231, 254, 227, 54, 221, 246, 221, 231, 254, 227, 54, 245, 120, 221, 231, + 254, 227, 54, 245, 197, 221, 231, 254, 227, 54, 224, 70, 221, 231, 254, + 227, 54, 225, 39, 221, 231, 254, 227, 54, 246, 228, 221, 231, 254, 227, + 54, 232, 28, 221, 231, 254, 227, 218, 222, 252, 190, 220, 72, 254, 227, + 218, 222, 245, 178, 223, 88, 254, 227, 218, 222, 226, 90, 223, 88, 254, + 227, 218, 222, 221, 252, 223, 88, 254, 227, 218, 222, 245, 110, 223, 88, + 254, 227, 247, 114, 234, 24, 245, 178, 223, 88, 254, 227, 235, 31, 234, + 24, 245, 178, 223, 88, 254, 227, 234, 24, 226, 90, 223, 88, 254, 227, + 234, 24, 221, 252, 223, 88, 23, 254, 251, 253, 234, 131, 228, 89, 23, + 254, 251, 253, 234, 131, 243, 194, 23, 254, 251, 253, 234, 131, 247, 126, + 23, 254, 251, 253, 234, 174, 23, 254, 251, 253, 234, 245, 196, 23, 254, + 251, 253, 234, 245, 170, 242, 161, 23, 254, 251, 253, 234, 245, 170, 221, + 231, 23, 254, 251, 253, 234, 245, 197, 221, 231, 23, 254, 251, 253, 234, + 245, 170, 222, 126, 23, 254, 251, 253, 234, 222, 66, 222, 126, 23, 254, + 251, 253, 234, 245, 197, 222, 126, 23, 254, 251, 253, 234, 131, 242, 162, + 222, 126, 23, 254, 251, 253, 234, 245, 170, 242, 162, 222, 126, 23, 254, + 251, 253, 234, 131, 221, 232, 222, 126, 23, 254, 251, 253, 234, 245, 170, + 221, 232, 222, 126, 23, 254, 251, 253, 234, 245, 170, 223, 153, 23, 254, + 251, 253, 234, 222, 66, 223, 153, 23, 254, 251, 253, 234, 245, 197, 223, + 153, 23, 254, 251, 253, 234, 131, 242, 162, 223, 153, 23, 254, 251, 253, + 234, 245, 170, 242, 162, 223, 153, 23, 254, 251, 253, 234, 131, 221, 232, + 223, 153, 23, 254, 251, 253, 234, 222, 66, 221, 232, 223, 153, 23, 254, + 251, 253, 234, 245, 197, 221, 232, 223, 153, 23, 254, 251, 253, 234, 222, + 66, 233, 139, 23, 254, 251, 243, 134, 131, 229, 49, 23, 254, 251, 222, 8, + 107, 23, 254, 251, 243, 132, 107, 23, 254, 251, 246, 159, 103, 23, 254, + 251, 222, 8, 103, 23, 254, 251, 250, 51, 124, 247, 125, 23, 254, 251, + 246, 159, 124, 247, 125, 23, 254, 251, 221, 71, 174, 23, 254, 251, 221, + 71, 222, 65, 23, 254, 251, 221, 71, 222, 66, 254, 144, 17, 23, 254, 251, + 243, 132, 222, 65, 23, 254, 251, 233, 240, 222, 65, 23, 254, 251, 222, 8, + 222, 65, 23, 254, 251, 222, 8, 221, 245, 23, 254, 251, 221, 71, 245, 196, + 23, 254, 251, 221, 71, 245, 197, 254, 144, 17, 23, 254, 251, 243, 132, + 245, 196, 23, 254, 251, 222, 8, 245, 196, 23, 254, 251, 222, 8, 131, 242, + 161, 23, 254, 251, 222, 8, 148, 242, 161, 23, 254, 251, 246, 159, 245, + 170, 242, 161, 23, 254, 251, 221, 71, 245, 170, 242, 161, 23, 254, 251, + 222, 8, 245, 170, 242, 161, 23, 254, 251, 251, 126, 245, 170, 242, 161, + 23, 254, 251, 232, 200, 245, 170, 242, 161, 23, 254, 251, 222, 8, 131, + 221, 231, 23, 254, 251, 222, 8, 245, 170, 221, 231, 23, 254, 251, 249, + 65, 245, 170, 233, 139, 23, 254, 251, 223, 127, 245, 197, 233, 139, 23, + 131, 144, 55, 23, 131, 144, 5, 254, 144, 17, 23, 124, 221, 250, 55, 23, + 148, 228, 88, 55, 23, 218, 23, 55, 23, 222, 127, 55, 23, 247, 127, 55, + 23, 230, 175, 55, 23, 124, 230, 174, 55, 23, 148, 230, 174, 55, 23, 245, + 116, 230, 174, 55, 23, 245, 170, 230, 174, 55, 23, 233, 235, 55, 23, 235, + 210, 252, 190, 55, 23, 235, 26, 55, 23, 230, 84, 55, 23, 218, 132, 55, + 23, 254, 16, 55, 23, 254, 27, 55, 23, 244, 42, 55, 23, 221, 58, 252, 190, + 55, 23, 217, 85, 55, 227, 68, 225, 35, 55, 227, 68, 220, 83, 55, 227, 68, + 225, 59, 55, 227, 68, 225, 33, 55, 227, 68, 248, 226, 225, 33, 55, 227, + 68, 224, 120, 55, 227, 68, 249, 61, 55, 227, 68, 228, 76, 55, 227, 68, + 225, 47, 55, 227, 68, 247, 93, 55, 227, 68, 254, 14, 55, 227, 68, 251, + 81, 55, 229, 137, 248, 205, 5, 229, 192, 229, 137, 248, 205, 5, 229, 44, + 243, 159, 229, 137, 248, 205, 5, 222, 109, 243, 159, 229, 137, 248, 205, + 5, 251, 139, 229, 137, 248, 205, 5, 251, 24, 229, 137, 248, 205, 5, 218, + 183, 229, 137, 248, 205, 5, 243, 140, 229, 137, 248, 205, 5, 244, 210, + 229, 137, 248, 205, 5, 221, 204, 229, 137, 248, 205, 5, 65, 229, 137, + 248, 205, 5, 252, 24, 229, 137, 248, 205, 5, 224, 218, 229, 137, 248, + 205, 5, 250, 187, 229, 137, 248, 205, 5, 234, 85, 229, 137, 248, 205, 5, + 234, 48, 229, 137, 248, 205, 5, 226, 122, 229, 137, 248, 205, 5, 235, 64, + 229, 137, 248, 205, 5, 252, 33, 229, 137, 248, 205, 5, 251, 129, 229, 51, + 229, 137, 248, 205, 5, 248, 156, 229, 137, 248, 205, 5, 250, 172, 229, + 137, 248, 205, 5, 224, 50, 229, 137, 248, 205, 5, 250, 173, 229, 137, + 248, 205, 5, 252, 134, 229, 137, 248, 205, 5, 224, 206, 229, 137, 248, + 205, 5, 242, 189, 229, 137, 248, 205, 5, 243, 111, 229, 137, 248, 205, 5, + 251, 240, 235, 106, 229, 137, 248, 205, 5, 251, 124, 229, 137, 248, 205, + 5, 227, 239, 229, 137, 248, 205, 5, 247, 13, 229, 137, 248, 205, 5, 247, + 133, 229, 137, 248, 205, 5, 220, 247, 229, 137, 248, 205, 5, 252, 137, + 229, 137, 248, 205, 5, 229, 52, 221, 98, 229, 137, 248, 205, 5, 219, 84, + 229, 137, 248, 205, 5, 229, 244, 229, 137, 248, 205, 5, 227, 62, 229, + 137, 248, 205, 5, 235, 52, 229, 137, 248, 205, 5, 230, 69, 252, 233, 229, + 137, 248, 205, 5, 245, 143, 229, 137, 248, 205, 5, 244, 38, 229, 137, + 248, 205, 5, 223, 128, 229, 137, 248, 205, 5, 3, 253, 213, 229, 137, 248, + 205, 5, 218, 235, 252, 206, 229, 137, 248, 205, 5, 36, 230, 177, 92, 234, + 197, 1, 60, 234, 197, 1, 73, 234, 197, 1, 253, 204, 234, 197, 1, 252, 95, + 234, 197, 1, 245, 67, 234, 197, 1, 250, 46, 234, 197, 1, 72, 234, 197, 1, + 219, 40, 234, 197, 1, 217, 157, 234, 197, 1, 222, 37, 234, 197, 1, 237, + 126, 234, 197, 1, 237, 17, 234, 197, 1, 228, 163, 234, 197, 1, 153, 234, + 197, 1, 189, 234, 197, 1, 207, 234, 197, 1, 233, 140, 234, 197, 1, 231, + 218, 234, 197, 1, 68, 234, 197, 1, 230, 59, 234, 197, 1, 236, 75, 234, + 197, 1, 152, 234, 197, 1, 198, 234, 197, 1, 222, 201, 234, 197, 1, 221, + 32, 234, 197, 1, 254, 131, 234, 197, 1, 246, 197, 234, 197, 1, 243, 225, + 234, 197, 1, 218, 151, 251, 133, 1, 60, 251, 133, 1, 230, 45, 251, 133, + 1, 250, 46, 251, 133, 1, 153, 251, 133, 1, 220, 21, 251, 133, 1, 152, + 251, 133, 1, 235, 126, 251, 133, 1, 255, 60, 251, 133, 1, 228, 163, 251, + 133, 1, 253, 204, 251, 133, 1, 189, 251, 133, 1, 74, 251, 133, 1, 249, + 209, 251, 133, 1, 222, 201, 251, 133, 1, 225, 27, 251, 133, 1, 225, 26, + 251, 133, 1, 198, 251, 133, 1, 251, 201, 251, 133, 1, 68, 251, 133, 1, + 231, 218, 251, 133, 1, 218, 151, 251, 133, 1, 207, 251, 133, 1, 221, 31, + 251, 133, 1, 230, 59, 251, 133, 1, 223, 219, 251, 133, 1, 72, 251, 133, + 1, 73, 251, 133, 1, 220, 18, 251, 133, 1, 237, 17, 251, 133, 1, 237, 8, + 251, 133, 1, 232, 170, 251, 133, 1, 220, 23, 251, 133, 1, 245, 67, 251, + 133, 1, 245, 2, 251, 133, 1, 223, 168, 251, 133, 1, 223, 167, 251, 133, + 1, 232, 117, 251, 133, 1, 237, 255, 251, 133, 1, 251, 200, 251, 133, 1, + 221, 32, 251, 133, 1, 220, 20, 251, 133, 1, 227, 53, 251, 133, 1, 234, + 41, 251, 133, 1, 234, 40, 251, 133, 1, 234, 39, 251, 133, 1, 234, 38, + 251, 133, 1, 235, 125, 251, 133, 1, 247, 17, 251, 133, 1, 220, 19, 48, + 30, 1, 60, 48, 30, 1, 252, 144, 48, 30, 1, 236, 184, 48, 30, 1, 249, 92, + 48, 30, 1, 73, 48, 30, 1, 219, 165, 48, 30, 1, 217, 92, 48, 30, 1, 243, + 162, 48, 30, 1, 222, 22, 48, 30, 1, 72, 48, 30, 1, 175, 48, 30, 1, 246, + 217, 48, 30, 1, 246, 205, 48, 30, 1, 246, 197, 48, 30, 1, 246, 133, 48, + 30, 1, 74, 48, 30, 1, 229, 198, 48, 30, 1, 224, 246, 48, 30, 1, 236, 7, + 48, 30, 1, 246, 148, 48, 30, 1, 246, 138, 48, 30, 1, 222, 87, 48, 30, 1, + 68, 48, 30, 1, 246, 220, 48, 30, 1, 229, 132, 48, 30, 1, 236, 137, 48, + 30, 1, 246, 244, 48, 30, 1, 246, 140, 48, 30, 1, 251, 46, 48, 30, 1, 237, + 255, 48, 30, 1, 220, 23, 48, 30, 231, 107, 107, 48, 30, 231, 107, 174, + 48, 30, 231, 107, 222, 65, 48, 30, 231, 107, 245, 196, 244, 50, 1, 254, + 199, 244, 50, 1, 252, 219, 244, 50, 1, 244, 100, 244, 50, 1, 249, 191, + 244, 50, 1, 254, 195, 244, 50, 1, 228, 146, 244, 50, 1, 237, 136, 244, + 50, 1, 243, 204, 244, 50, 1, 221, 241, 244, 50, 1, 246, 226, 244, 50, 1, + 235, 241, 244, 50, 1, 235, 170, 244, 50, 1, 234, 82, 244, 50, 1, 232, + 202, 244, 50, 1, 237, 108, 244, 50, 1, 220, 37, 244, 50, 1, 230, 31, 244, + 50, 1, 232, 27, 244, 50, 1, 227, 245, 244, 50, 1, 226, 123, 244, 50, 1, + 222, 74, 244, 50, 1, 218, 191, 244, 50, 1, 245, 249, 244, 50, 1, 238, 3, + 244, 50, 1, 242, 152, 244, 50, 1, 230, 91, 244, 50, 1, 232, 31, 242, 161, + 220, 106, 1, 254, 150, 220, 106, 1, 252, 102, 220, 106, 1, 244, 232, 220, + 106, 1, 236, 149, 220, 106, 1, 249, 62, 220, 106, 1, 243, 4, 220, 106, 1, + 218, 187, 220, 106, 1, 217, 83, 220, 106, 1, 242, 185, 220, 106, 1, 222, + 50, 220, 106, 1, 217, 220, 220, 106, 1, 236, 246, 220, 106, 1, 224, 209, + 220, 106, 1, 235, 156, 220, 106, 1, 234, 1, 220, 106, 1, 249, 33, 220, + 106, 1, 231, 103, 220, 106, 1, 217, 13, 220, 106, 1, 226, 144, 220, 106, + 1, 254, 191, 220, 106, 1, 228, 202, 220, 106, 1, 226, 169, 220, 106, 1, + 228, 103, 220, 106, 1, 227, 231, 220, 106, 1, 222, 26, 220, 106, 1, 244, + 122, 220, 106, 1, 101, 220, 106, 1, 72, 220, 106, 1, 68, 220, 106, 1, + 223, 178, 220, 106, 218, 174, 248, 191, 48, 229, 159, 5, 60, 48, 229, + 159, 5, 72, 48, 229, 159, 5, 68, 48, 229, 159, 5, 175, 48, 229, 159, 5, + 236, 7, 48, 229, 159, 5, 245, 0, 48, 229, 159, 5, 244, 17, 48, 229, 159, + 5, 218, 138, 48, 229, 159, 5, 251, 169, 48, 229, 159, 5, 237, 123, 48, + 229, 159, 5, 237, 98, 48, 229, 159, 5, 222, 155, 48, 229, 159, 5, 221, 0, + 48, 229, 159, 5, 249, 207, 48, 229, 159, 5, 249, 15, 48, 229, 159, 5, + 247, 111, 48, 229, 159, 5, 222, 35, 48, 229, 159, 5, 187, 48, 229, 159, + 5, 252, 237, 48, 229, 159, 5, 246, 8, 48, 229, 159, 5, 208, 48, 229, 159, + 5, 231, 144, 48, 229, 159, 5, 196, 48, 229, 159, 5, 233, 196, 48, 229, + 159, 5, 233, 99, 48, 229, 159, 5, 184, 48, 229, 159, 5, 219, 189, 48, + 229, 159, 5, 219, 94, 48, 229, 159, 5, 203, 48, 229, 159, 5, 227, 22, 48, + 229, 159, 5, 235, 188, 48, 229, 159, 5, 226, 177, 48, 229, 159, 5, 217, + 114, 48, 229, 159, 5, 225, 25, 48, 229, 159, 5, 223, 218, 48, 229, 159, + 5, 155, 48, 229, 159, 5, 253, 227, 48, 229, 159, 5, 253, 226, 48, 229, + 159, 5, 253, 225, 48, 229, 159, 5, 218, 115, 48, 229, 159, 5, 249, 188, + 48, 229, 159, 5, 249, 187, 48, 229, 159, 5, 252, 224, 48, 229, 159, 5, + 251, 220, 48, 229, 159, 218, 174, 248, 191, 48, 229, 159, 54, 107, 48, + 229, 159, 54, 103, 48, 229, 159, 54, 222, 65, 48, 229, 159, 54, 220, 219, + 48, 229, 159, 54, 242, 161, 161, 6, 1, 171, 72, 161, 6, 1, 171, 73, 161, + 6, 1, 171, 60, 161, 6, 1, 171, 254, 202, 161, 6, 1, 171, 74, 161, 6, 1, + 171, 230, 127, 161, 6, 1, 224, 192, 72, 161, 6, 1, 224, 192, 73, 161, 6, + 1, 224, 192, 60, 161, 6, 1, 224, 192, 254, 202, 161, 6, 1, 224, 192, 74, + 161, 6, 1, 224, 192, 230, 127, 161, 6, 1, 253, 212, 161, 6, 1, 230, 70, + 161, 6, 1, 218, 165, 161, 6, 1, 218, 22, 161, 6, 1, 243, 225, 161, 6, 1, + 229, 191, 161, 6, 1, 252, 137, 161, 6, 1, 222, 80, 161, 6, 1, 249, 82, + 161, 6, 1, 251, 43, 161, 6, 1, 237, 113, 161, 6, 1, 236, 191, 161, 6, 1, + 244, 208, 161, 6, 1, 246, 244, 161, 6, 1, 219, 160, 161, 6, 1, 246, 118, + 161, 6, 1, 222, 21, 161, 6, 1, 246, 138, 161, 6, 1, 217, 90, 161, 6, 1, + 246, 133, 161, 6, 1, 217, 71, 161, 6, 1, 246, 148, 161, 6, 1, 246, 217, + 161, 6, 1, 246, 205, 161, 6, 1, 246, 197, 161, 6, 1, 246, 185, 161, 6, 1, + 230, 158, 161, 6, 1, 246, 101, 161, 3, 1, 171, 72, 161, 3, 1, 171, 73, + 161, 3, 1, 171, 60, 161, 3, 1, 171, 254, 202, 161, 3, 1, 171, 74, 161, 3, + 1, 171, 230, 127, 161, 3, 1, 224, 192, 72, 161, 3, 1, 224, 192, 73, 161, + 3, 1, 224, 192, 60, 161, 3, 1, 224, 192, 254, 202, 161, 3, 1, 224, 192, + 74, 161, 3, 1, 224, 192, 230, 127, 161, 3, 1, 253, 212, 161, 3, 1, 230, + 70, 161, 3, 1, 218, 165, 161, 3, 1, 218, 22, 161, 3, 1, 243, 225, 161, 3, + 1, 229, 191, 161, 3, 1, 252, 137, 161, 3, 1, 222, 80, 161, 3, 1, 249, 82, + 161, 3, 1, 251, 43, 161, 3, 1, 237, 113, 161, 3, 1, 236, 191, 161, 3, 1, + 244, 208, 161, 3, 1, 246, 244, 161, 3, 1, 219, 160, 161, 3, 1, 246, 118, + 161, 3, 1, 222, 21, 161, 3, 1, 246, 138, 161, 3, 1, 217, 90, 161, 3, 1, + 246, 133, 161, 3, 1, 217, 71, 161, 3, 1, 246, 148, 161, 3, 1, 246, 217, + 161, 3, 1, 246, 205, 161, 3, 1, 246, 197, 161, 3, 1, 246, 185, 161, 3, 1, + 230, 158, 161, 3, 1, 246, 101, 224, 252, 1, 229, 190, 224, 252, 1, 221, + 113, 224, 252, 1, 236, 112, 224, 252, 1, 245, 226, 224, 252, 1, 221, 255, + 224, 252, 1, 224, 26, 224, 252, 1, 223, 50, 224, 252, 1, 250, 245, 224, + 252, 1, 218, 24, 224, 252, 1, 242, 160, 224, 252, 1, 252, 83, 224, 252, + 1, 249, 91, 224, 252, 1, 244, 242, 224, 252, 1, 219, 60, 224, 252, 1, + 222, 3, 224, 252, 1, 217, 19, 224, 252, 1, 234, 23, 224, 252, 1, 237, 41, + 224, 252, 1, 218, 185, 224, 252, 1, 243, 213, 224, 252, 1, 235, 3, 224, + 252, 1, 233, 160, 224, 252, 1, 238, 6, 224, 252, 1, 246, 243, 224, 252, + 1, 254, 7, 224, 252, 1, 254, 237, 224, 252, 1, 230, 138, 224, 252, 1, + 218, 177, 224, 252, 1, 230, 83, 224, 252, 1, 254, 202, 224, 252, 1, 227, + 72, 224, 252, 1, 231, 103, 224, 252, 1, 247, 2, 224, 252, 1, 254, 207, + 224, 252, 1, 242, 65, 224, 252, 1, 220, 63, 224, 252, 1, 230, 183, 224, + 252, 1, 230, 121, 224, 252, 1, 230, 157, 224, 252, 1, 253, 215, 224, 252, + 1, 254, 45, 224, 252, 1, 230, 105, 224, 252, 1, 254, 188, 224, 252, 1, + 246, 142, 224, 252, 1, 254, 24, 224, 252, 1, 247, 11, 224, 252, 1, 242, + 71, 224, 252, 1, 217, 255, 230, 93, 1, 254, 168, 230, 93, 1, 252, 237, + 230, 93, 1, 222, 155, 230, 93, 1, 237, 123, 230, 93, 1, 218, 138, 230, + 93, 1, 236, 149, 230, 93, 1, 249, 81, 230, 93, 1, 203, 230, 93, 1, 226, + 177, 230, 93, 1, 224, 215, 230, 93, 1, 249, 36, 230, 93, 1, 251, 116, + 230, 93, 1, 245, 0, 230, 93, 1, 246, 8, 230, 93, 1, 228, 153, 230, 93, 1, + 237, 4, 230, 93, 1, 235, 184, 230, 93, 1, 233, 170, 230, 93, 1, 231, 89, + 230, 93, 1, 218, 233, 230, 93, 1, 155, 230, 93, 1, 184, 230, 93, 1, 60, + 230, 93, 1, 73, 230, 93, 1, 72, 230, 93, 1, 74, 230, 93, 1, 68, 230, 93, + 1, 255, 58, 230, 93, 1, 246, 250, 230, 93, 1, 230, 127, 230, 93, 20, 217, + 84, 230, 93, 20, 107, 230, 93, 20, 103, 230, 93, 20, 160, 230, 93, 20, + 154, 230, 93, 20, 174, 230, 93, 20, 182, 230, 93, 20, 191, 230, 93, 20, + 185, 230, 93, 20, 190, 250, 53, 4, 60, 250, 53, 4, 73, 250, 53, 4, 72, + 250, 53, 4, 74, 250, 53, 4, 68, 250, 53, 4, 237, 123, 250, 53, 4, 237, + 59, 250, 53, 4, 175, 250, 53, 4, 236, 184, 250, 53, 4, 236, 113, 250, 53, + 4, 236, 57, 250, 53, 4, 236, 7, 250, 53, 4, 235, 188, 250, 53, 4, 235, + 122, 250, 53, 4, 235, 67, 250, 53, 4, 235, 12, 250, 53, 4, 234, 231, 250, + 53, 4, 196, 250, 53, 4, 234, 25, 250, 53, 4, 233, 196, 250, 53, 4, 233, + 136, 250, 53, 4, 233, 99, 250, 53, 4, 208, 250, 53, 4, 232, 141, 250, 53, + 4, 232, 62, 250, 53, 4, 231, 204, 250, 53, 4, 231, 144, 250, 53, 4, 187, + 250, 53, 4, 229, 198, 250, 53, 4, 229, 108, 250, 53, 4, 229, 37, 250, 53, + 4, 228, 202, 250, 53, 4, 203, 250, 53, 4, 227, 216, 250, 53, 4, 227, 147, + 250, 53, 4, 227, 75, 250, 53, 4, 227, 22, 250, 53, 4, 226, 177, 250, 53, + 4, 226, 94, 250, 53, 4, 224, 140, 250, 53, 4, 224, 26, 250, 53, 4, 223, + 103, 250, 53, 4, 222, 155, 250, 53, 4, 222, 87, 250, 53, 4, 221, 205, + 250, 53, 4, 101, 250, 53, 4, 221, 0, 250, 53, 4, 219, 7, 250, 53, 4, 218, + 227, 250, 53, 4, 218, 204, 250, 53, 4, 218, 187, 250, 53, 4, 218, 138, + 250, 53, 4, 218, 135, 250, 53, 4, 217, 114, 250, 53, 4, 217, 21, 237, + 225, 254, 53, 1, 254, 166, 237, 225, 254, 53, 1, 252, 101, 237, 225, 254, + 53, 1, 244, 91, 237, 225, 254, 53, 1, 249, 176, 237, 225, 254, 53, 1, + 243, 162, 237, 225, 254, 53, 1, 218, 233, 237, 225, 254, 53, 1, 217, 95, + 237, 225, 254, 53, 1, 243, 126, 237, 225, 254, 53, 1, 222, 46, 237, 225, + 254, 53, 1, 217, 219, 237, 225, 254, 53, 1, 236, 224, 237, 225, 254, 53, + 1, 235, 151, 237, 225, 254, 53, 1, 234, 1, 237, 225, 254, 53, 1, 231, + 103, 237, 225, 254, 53, 1, 226, 145, 237, 225, 254, 53, 1, 253, 207, 237, + 225, 254, 53, 1, 229, 198, 237, 225, 254, 53, 1, 226, 168, 237, 225, 254, + 53, 1, 228, 102, 237, 225, 254, 53, 1, 227, 174, 237, 225, 254, 53, 1, + 224, 209, 237, 225, 254, 53, 1, 222, 100, 237, 225, 254, 53, 226, 87, 55, + 237, 225, 254, 53, 54, 107, 237, 225, 254, 53, 54, 103, 237, 225, 254, + 53, 54, 160, 237, 225, 254, 53, 54, 222, 65, 237, 225, 254, 53, 54, 220, + 219, 237, 225, 254, 53, 54, 131, 242, 161, 237, 225, 254, 53, 54, 131, + 221, 231, 237, 225, 254, 53, 54, 222, 66, 221, 231, 229, 116, 1, 254, + 164, 229, 116, 1, 252, 104, 229, 116, 1, 244, 233, 229, 116, 1, 249, 64, + 229, 116, 1, 243, 162, 229, 116, 1, 218, 238, 229, 116, 1, 217, 108, 229, + 116, 1, 243, 128, 229, 116, 1, 222, 50, 229, 116, 1, 217, 220, 229, 116, + 1, 236, 246, 229, 116, 1, 235, 157, 229, 116, 1, 234, 1, 229, 116, 1, + 231, 103, 229, 116, 1, 225, 61, 229, 116, 1, 254, 191, 229, 116, 1, 229, + 198, 229, 116, 1, 226, 169, 229, 116, 1, 228, 107, 229, 116, 1, 227, 61, + 229, 116, 1, 224, 209, 229, 116, 1, 222, 105, 229, 116, 54, 107, 229, + 116, 54, 222, 65, 229, 116, 54, 220, 219, 229, 116, 54, 131, 242, 161, + 229, 116, 54, 103, 229, 116, 54, 160, 229, 116, 218, 174, 225, 54, 234, + 196, 1, 60, 234, 196, 1, 253, 204, 234, 196, 1, 245, 67, 234, 196, 1, + 250, 46, 234, 196, 1, 73, 234, 196, 1, 216, 216, 234, 196, 1, 72, 234, + 196, 1, 218, 90, 234, 196, 1, 237, 17, 234, 196, 1, 153, 234, 196, 1, + 189, 234, 196, 1, 207, 234, 196, 1, 74, 234, 196, 1, 152, 234, 196, 1, + 223, 219, 234, 196, 1, 222, 201, 234, 196, 1, 68, 234, 196, 1, 246, 74, + 234, 196, 1, 228, 163, 234, 196, 1, 198, 234, 196, 1, 221, 32, 234, 196, + 1, 254, 131, 234, 196, 1, 246, 197, 234, 196, 1, 234, 198, 234, 196, 1, + 231, 218, 234, 196, 1, 251, 202, 234, 196, 221, 87, 78, 201, 1, 60, 201, + 29, 5, 72, 201, 29, 5, 68, 201, 29, 5, 167, 152, 201, 29, 5, 73, 201, 29, + 5, 74, 201, 29, 235, 94, 78, 201, 5, 51, 227, 94, 56, 201, 5, 254, 95, + 201, 5, 219, 77, 201, 1, 175, 201, 1, 236, 149, 201, 1, 245, 0, 201, 1, + 244, 125, 201, 1, 251, 169, 201, 1, 251, 69, 201, 1, 237, 123, 201, 1, + 231, 77, 201, 1, 221, 29, 201, 1, 221, 19, 201, 1, 249, 132, 201, 1, 249, + 116, 201, 1, 231, 217, 201, 1, 222, 155, 201, 1, 222, 35, 201, 1, 249, + 207, 201, 1, 249, 36, 201, 1, 208, 201, 1, 187, 201, 1, 229, 141, 201, 1, + 252, 237, 201, 1, 252, 94, 201, 1, 196, 201, 1, 184, 201, 1, 203, 201, 1, + 235, 188, 201, 1, 219, 189, 201, 1, 225, 25, 201, 1, 223, 218, 201, 1, + 226, 177, 201, 1, 217, 114, 201, 1, 155, 201, 1, 236, 74, 201, 1, 221, 4, + 201, 5, 252, 201, 50, 201, 5, 251, 122, 201, 5, 61, 56, 201, 219, 82, + 201, 20, 107, 201, 20, 103, 201, 20, 160, 201, 20, 154, 201, 54, 222, 65, + 201, 54, 220, 219, 201, 54, 131, 242, 161, 201, 54, 131, 221, 231, 201, + 228, 197, 248, 145, 201, 228, 197, 3, 250, 221, 201, 228, 197, 250, 221, + 201, 228, 197, 250, 105, 135, 201, 228, 197, 234, 83, 201, 228, 197, 234, + 241, 201, 228, 197, 249, 167, 201, 228, 197, 51, 249, 167, 201, 228, 197, + 235, 37, 48, 224, 6, 254, 64, 1, 243, 162, 48, 224, 6, 254, 64, 1, 235, + 151, 48, 224, 6, 254, 64, 1, 243, 126, 48, 224, 6, 254, 64, 1, 234, 1, + 48, 224, 6, 254, 64, 1, 228, 102, 48, 224, 6, 254, 64, 1, 218, 233, 48, + 224, 6, 254, 64, 1, 224, 209, 48, 224, 6, 254, 64, 1, 227, 174, 48, 224, + 6, 254, 64, 1, 252, 101, 48, 224, 6, 254, 64, 1, 222, 100, 48, 224, 6, + 254, 64, 1, 226, 127, 48, 224, 6, 254, 64, 1, 236, 224, 48, 224, 6, 254, + 64, 1, 231, 103, 48, 224, 6, 254, 64, 1, 236, 134, 48, 224, 6, 254, 64, + 1, 226, 168, 48, 224, 6, 254, 64, 1, 226, 145, 48, 224, 6, 254, 64, 1, + 245, 231, 48, 224, 6, 254, 64, 1, 254, 168, 48, 224, 6, 254, 64, 1, 253, + 206, 48, 224, 6, 254, 64, 1, 249, 34, 48, 224, 6, 254, 64, 1, 244, 91, + 48, 224, 6, 254, 64, 1, 249, 176, 48, 224, 6, 254, 64, 1, 244, 118, 48, + 224, 6, 254, 64, 1, 222, 46, 48, 224, 6, 254, 64, 1, 217, 94, 48, 224, 6, + 254, 64, 1, 249, 31, 48, 224, 6, 254, 64, 1, 217, 219, 48, 224, 6, 254, + 64, 1, 222, 24, 48, 224, 6, 254, 64, 1, 222, 5, 48, 224, 6, 254, 64, 54, + 107, 48, 224, 6, 254, 64, 54, 245, 196, 48, 224, 6, 254, 64, 120, 237, + 211, 253, 216, 1, 60, 253, 216, 1, 255, 58, 253, 216, 1, 254, 93, 253, + 216, 1, 255, 17, 253, 216, 1, 254, 131, 253, 216, 1, 255, 18, 253, 216, + 1, 254, 234, 253, 216, 1, 254, 230, 253, 216, 1, 73, 253, 216, 1, 246, + 250, 253, 216, 1, 74, 253, 216, 1, 230, 127, 253, 216, 1, 72, 253, 216, + 1, 237, 255, 253, 216, 1, 68, 253, 216, 1, 220, 23, 253, 216, 1, 236, + 184, 253, 216, 1, 218, 135, 253, 216, 1, 218, 101, 253, 216, 1, 218, 110, + 253, 216, 1, 244, 191, 253, 216, 1, 244, 155, 253, 216, 1, 244, 116, 253, + 216, 1, 251, 99, 253, 216, 1, 237, 114, 253, 216, 1, 222, 87, 253, 216, + 1, 222, 22, 253, 216, 1, 249, 92, 253, 216, 1, 249, 29, 253, 216, 1, 221, + 26, 253, 216, 1, 229, 198, 253, 216, 1, 245, 231, 253, 216, 1, 252, 144, + 253, 216, 1, 252, 92, 253, 216, 1, 232, 106, 253, 216, 1, 232, 68, 253, + 216, 1, 232, 69, 253, 216, 1, 232, 141, 253, 216, 1, 231, 73, 253, 216, + 1, 231, 216, 253, 216, 1, 234, 25, 253, 216, 1, 243, 52, 253, 216, 1, + 217, 164, 253, 216, 1, 218, 25, 253, 216, 1, 219, 165, 253, 216, 1, 227, + 216, 253, 216, 1, 235, 122, 253, 216, 1, 226, 94, 253, 216, 1, 217, 92, + 253, 216, 1, 224, 246, 253, 216, 1, 217, 72, 253, 216, 1, 224, 147, 253, + 216, 1, 223, 190, 253, 216, 1, 243, 162, 253, 216, 255, 7, 78, 221, 172, + 124, 188, 104, 131, 61, 228, 196, 3, 124, 188, 104, 131, 61, 228, 196, + 235, 146, 124, 188, 104, 131, 61, 228, 196, 235, 146, 131, 61, 104, 124, + 188, 228, 196, 235, 146, 124, 227, 92, 104, 131, 227, 94, 228, 196, 235, + 146, 131, 227, 94, 104, 124, 227, 92, 228, 196, 237, 193, 229, 224, 1, + 254, 166, 237, 193, 229, 224, 1, 252, 101, 237, 193, 229, 224, 1, 244, + 91, 237, 193, 229, 224, 1, 249, 176, 237, 193, 229, 224, 1, 243, 162, + 237, 193, 229, 224, 1, 218, 233, 237, 193, 229, 224, 1, 217, 95, 237, + 193, 229, 224, 1, 243, 126, 237, 193, 229, 224, 1, 222, 46, 237, 193, + 229, 224, 1, 217, 219, 237, 193, 229, 224, 1, 236, 224, 237, 193, 229, + 224, 1, 235, 151, 237, 193, 229, 224, 1, 234, 1, 237, 193, 229, 224, 1, + 231, 103, 237, 193, 229, 224, 1, 226, 145, 237, 193, 229, 224, 1, 253, + 207, 237, 193, 229, 224, 1, 229, 198, 237, 193, 229, 224, 1, 226, 168, + 237, 193, 229, 224, 1, 228, 102, 237, 193, 229, 224, 1, 227, 174, 237, + 193, 229, 224, 1, 224, 209, 237, 193, 229, 224, 1, 222, 100, 237, 193, + 229, 224, 54, 107, 237, 193, 229, 224, 54, 103, 237, 193, 229, 224, 54, + 160, 237, 193, 229, 224, 54, 154, 237, 193, 229, 224, 54, 222, 65, 237, + 193, 229, 224, 54, 220, 219, 237, 193, 229, 224, 54, 131, 242, 161, 237, + 193, 229, 224, 54, 131, 221, 231, 237, 193, 230, 33, 1, 254, 166, 237, + 193, 230, 33, 1, 252, 101, 237, 193, 230, 33, 1, 244, 91, 237, 193, 230, + 33, 1, 249, 176, 237, 193, 230, 33, 1, 243, 162, 237, 193, 230, 33, 1, + 218, 232, 237, 193, 230, 33, 1, 217, 95, 237, 193, 230, 33, 1, 243, 126, + 237, 193, 230, 33, 1, 222, 46, 237, 193, 230, 33, 1, 217, 219, 237, 193, + 230, 33, 1, 236, 224, 237, 193, 230, 33, 1, 235, 151, 237, 193, 230, 33, + 1, 234, 0, 237, 193, 230, 33, 1, 231, 103, 237, 193, 230, 33, 1, 226, + 145, 237, 193, 230, 33, 1, 229, 198, 237, 193, 230, 33, 1, 226, 168, 237, + 193, 230, 33, 1, 224, 209, 237, 193, 230, 33, 1, 222, 100, 237, 193, 230, + 33, 54, 107, 237, 193, 230, 33, 54, 103, 237, 193, 230, 33, 54, 160, 237, + 193, 230, 33, 54, 154, 237, 193, 230, 33, 54, 222, 65, 237, 193, 230, 33, + 54, 220, 219, 237, 193, 230, 33, 54, 131, 242, 161, 237, 193, 230, 33, + 54, 131, 221, 231, 48, 172, 1, 230, 100, 60, 48, 172, 1, 218, 17, 60, 48, + 172, 1, 218, 17, 254, 234, 48, 172, 1, 230, 100, 72, 48, 172, 1, 218, 17, + 72, 48, 172, 1, 218, 17, 73, 48, 172, 1, 230, 100, 74, 48, 172, 1, 230, + 100, 230, 167, 48, 172, 1, 218, 17, 230, 167, 48, 172, 1, 230, 100, 255, + 11, 48, 172, 1, 218, 17, 255, 11, 48, 172, 1, 230, 100, 254, 233, 48, + 172, 1, 218, 17, 254, 233, 48, 172, 1, 230, 100, 254, 209, 48, 172, 1, + 218, 17, 254, 209, 48, 172, 1, 230, 100, 254, 228, 48, 172, 1, 218, 17, + 254, 228, 48, 172, 1, 230, 100, 254, 244, 48, 172, 1, 218, 17, 254, 244, + 48, 172, 1, 230, 100, 254, 232, 48, 172, 1, 230, 100, 246, 80, 48, 172, + 1, 218, 17, 246, 80, 48, 172, 1, 230, 100, 253, 212, 48, 172, 1, 218, 17, + 253, 212, 48, 172, 1, 230, 100, 254, 216, 48, 172, 1, 218, 17, 254, 216, + 48, 172, 1, 230, 100, 254, 226, 48, 172, 1, 218, 17, 254, 226, 48, 172, + 1, 230, 100, 230, 166, 48, 172, 1, 218, 17, 230, 166, 48, 172, 1, 230, + 100, 254, 175, 48, 172, 1, 218, 17, 254, 175, 48, 172, 1, 230, 100, 254, + 225, 48, 172, 1, 230, 100, 246, 207, 48, 172, 1, 230, 100, 246, 205, 48, + 172, 1, 230, 100, 254, 131, 48, 172, 1, 230, 100, 254, 223, 48, 172, 1, + 218, 17, 254, 223, 48, 172, 1, 230, 100, 246, 180, 48, 172, 1, 218, 17, + 246, 180, 48, 172, 1, 230, 100, 246, 194, 48, 172, 1, 218, 17, 246, 194, + 48, 172, 1, 230, 100, 246, 169, 48, 172, 1, 218, 17, 246, 169, 48, 172, + 1, 218, 17, 254, 123, 48, 172, 1, 230, 100, 246, 185, 48, 172, 1, 218, + 17, 254, 222, 48, 172, 1, 230, 100, 246, 162, 48, 172, 1, 230, 100, 230, + 120, 48, 172, 1, 230, 100, 242, 67, 48, 172, 1, 230, 100, 247, 0, 48, + 172, 1, 218, 17, 247, 0, 48, 172, 1, 230, 100, 254, 69, 48, 172, 1, 218, + 17, 254, 69, 48, 172, 1, 230, 100, 237, 158, 48, 172, 1, 218, 17, 237, + 158, 48, 172, 1, 230, 100, 230, 106, 48, 172, 1, 218, 17, 230, 106, 48, + 172, 1, 230, 100, 254, 67, 48, 172, 1, 218, 17, 254, 67, 48, 172, 1, 230, + 100, 254, 221, 48, 172, 1, 230, 100, 254, 13, 48, 172, 1, 230, 100, 254, + 220, 48, 172, 1, 230, 100, 254, 7, 48, 172, 1, 218, 17, 254, 7, 48, 172, + 1, 230, 100, 246, 133, 48, 172, 1, 218, 17, 246, 133, 48, 172, 1, 230, + 100, 253, 244, 48, 172, 1, 218, 17, 253, 244, 48, 172, 1, 230, 100, 254, + 217, 48, 172, 1, 218, 17, 254, 217, 48, 172, 1, 230, 100, 230, 92, 48, + 172, 1, 230, 100, 252, 187, 227, 11, 20, 107, 227, 11, 20, 103, 227, 11, + 20, 160, 227, 11, 20, 154, 227, 11, 20, 174, 227, 11, 20, 182, 227, 11, + 20, 191, 227, 11, 20, 185, 227, 11, 20, 190, 227, 11, 54, 222, 65, 227, + 11, 54, 220, 219, 227, 11, 54, 221, 245, 227, 11, 54, 245, 119, 227, 11, + 54, 245, 196, 227, 11, 54, 224, 69, 227, 11, 54, 225, 38, 227, 11, 54, + 246, 227, 227, 11, 54, 232, 27, 227, 11, 54, 131, 242, 161, 227, 11, 54, + 124, 242, 161, 227, 11, 54, 148, 242, 161, 227, 11, 54, 245, 116, 242, + 161, 227, 11, 54, 245, 170, 242, 161, 227, 11, 54, 224, 82, 242, 161, + 227, 11, 54, 225, 43, 242, 161, 227, 11, 54, 246, 235, 242, 161, 227, 11, + 54, 232, 31, 242, 161, 227, 11, 245, 108, 131, 243, 194, 227, 11, 245, + 108, 131, 228, 89, 227, 11, 245, 108, 131, 221, 251, 227, 11, 245, 108, + 124, 221, 249, 194, 5, 251, 146, 194, 5, 254, 95, 194, 5, 219, 77, 194, + 1, 60, 194, 1, 255, 58, 194, 1, 72, 194, 1, 237, 255, 194, 1, 68, 194, 1, + 220, 23, 194, 1, 73, 194, 1, 254, 196, 194, 1, 74, 194, 1, 253, 232, 194, + 1, 175, 194, 1, 236, 149, 194, 1, 245, 0, 194, 1, 244, 125, 194, 1, 232, + 115, 194, 1, 251, 169, 194, 1, 251, 69, 194, 1, 237, 123, 194, 1, 237, + 103, 194, 1, 231, 77, 194, 1, 221, 29, 194, 1, 221, 19, 194, 1, 249, 132, + 194, 1, 249, 121, 194, 1, 249, 116, 194, 1, 227, 151, 194, 1, 231, 217, + 194, 1, 222, 155, 194, 1, 222, 35, 194, 1, 249, 207, 194, 1, 249, 36, + 194, 1, 208, 194, 1, 187, 194, 1, 229, 141, 194, 1, 252, 237, 194, 1, + 252, 94, 194, 1, 196, 194, 1, 184, 194, 1, 203, 194, 1, 235, 188, 194, 1, + 219, 189, 194, 1, 225, 25, 194, 1, 223, 218, 194, 1, 226, 177, 194, 1, + 155, 194, 29, 5, 255, 58, 194, 29, 5, 72, 194, 29, 5, 237, 255, 194, 29, + 5, 68, 194, 29, 5, 220, 23, 194, 29, 5, 73, 194, 29, 5, 254, 196, 194, + 29, 5, 74, 194, 29, 5, 253, 232, 194, 5, 219, 82, 194, 5, 231, 112, 194, + 255, 7, 55, 194, 246, 171, 55, 194, 54, 55, 194, 226, 87, 78, 194, 51, + 226, 87, 78, 194, 249, 167, 194, 51, 249, 167, 15, 5, 60, 15, 5, 112, 27, + 60, 15, 5, 112, 27, 252, 228, 15, 5, 112, 27, 244, 229, 222, 59, 15, 5, + 112, 27, 155, 15, 5, 112, 27, 238, 1, 15, 5, 112, 27, 235, 173, 244, 3, + 15, 5, 112, 27, 233, 62, 15, 5, 112, 27, 226, 165, 15, 5, 255, 60, 15, 5, + 255, 11, 15, 5, 255, 12, 27, 254, 5, 15, 5, 255, 12, 27, 247, 100, 244, + 3, 15, 5, 255, 12, 27, 244, 240, 15, 5, 255, 12, 27, 244, 229, 222, 59, + 15, 5, 255, 12, 27, 155, 15, 5, 255, 12, 27, 238, 2, 244, 3, 15, 5, 255, + 12, 27, 237, 231, 15, 5, 255, 12, 27, 235, 174, 15, 5, 255, 12, 27, 224, + 231, 15, 5, 255, 12, 27, 105, 88, 105, 88, 68, 15, 5, 255, 12, 244, 3, + 15, 5, 255, 9, 15, 5, 255, 10, 27, 252, 216, 15, 5, 255, 10, 27, 244, + 229, 222, 59, 15, 5, 255, 10, 27, 234, 26, 88, 246, 197, 15, 5, 255, 10, + 27, 225, 23, 15, 5, 255, 10, 27, 222, 130, 15, 5, 254, 244, 15, 5, 254, + 182, 15, 5, 254, 183, 27, 246, 143, 15, 5, 254, 183, 27, 224, 203, 88, + 244, 81, 15, 5, 254, 175, 15, 5, 254, 176, 27, 254, 175, 15, 5, 254, 176, + 27, 248, 229, 15, 5, 254, 176, 27, 244, 81, 15, 5, 254, 176, 27, 155, 15, + 5, 254, 176, 27, 236, 251, 15, 5, 254, 176, 27, 236, 113, 15, 5, 254, + 176, 27, 224, 246, 15, 5, 254, 176, 27, 220, 30, 15, 5, 254, 172, 15, 5, + 254, 166, 15, 5, 254, 137, 15, 5, 254, 138, 27, 224, 246, 15, 5, 254, + 131, 15, 5, 254, 132, 104, 254, 131, 15, 5, 254, 132, 148, 221, 176, 15, + 5, 254, 132, 88, 232, 228, 230, 110, 254, 132, 88, 232, 227, 15, 5, 254, + 132, 88, 232, 228, 223, 226, 15, 5, 254, 107, 15, 5, 254, 88, 15, 5, 254, + 61, 15, 5, 254, 62, 27, 235, 247, 15, 5, 254, 35, 15, 5, 254, 12, 15, 5, + 254, 7, 15, 5, 254, 8, 217, 38, 222, 59, 15, 5, 254, 8, 236, 254, 222, + 59, 15, 5, 254, 8, 104, 254, 8, 220, 254, 104, 220, 254, 220, 254, 104, + 220, 254, 229, 246, 15, 5, 254, 8, 104, 254, 8, 104, 254, 7, 15, 5, 254, + 8, 104, 254, 8, 104, 254, 8, 250, 95, 254, 8, 104, 254, 8, 104, 254, 7, + 15, 5, 254, 5, 15, 5, 254, 3, 15, 5, 252, 237, 15, 5, 252, 228, 15, 5, + 252, 225, 15, 5, 252, 223, 15, 5, 252, 217, 15, 5, 252, 218, 104, 252, + 217, 15, 5, 252, 216, 15, 5, 135, 15, 5, 252, 200, 15, 5, 252, 84, 15, 5, + 252, 85, 27, 60, 15, 5, 252, 85, 27, 244, 220, 15, 5, 252, 85, 27, 238, + 2, 244, 3, 15, 5, 251, 248, 15, 5, 251, 249, 104, 251, 249, 255, 11, 15, + 5, 251, 249, 104, 251, 249, 220, 87, 15, 5, 251, 249, 250, 95, 251, 248, + 15, 5, 251, 237, 15, 5, 251, 238, 104, 251, 237, 15, 5, 251, 228, 15, 5, + 251, 227, 15, 5, 249, 207, 15, 5, 249, 198, 15, 5, 249, 199, 236, 91, 27, + 112, 88, 234, 57, 15, 5, 249, 199, 236, 91, 27, 254, 137, 15, 5, 249, + 199, 236, 91, 27, 252, 216, 15, 5, 249, 199, 236, 91, 27, 252, 84, 15, 5, + 249, 199, 236, 91, 27, 245, 0, 15, 5, 249, 199, 236, 91, 27, 245, 1, 88, + 234, 57, 15, 5, 249, 199, 236, 91, 27, 244, 103, 15, 5, 249, 199, 236, + 91, 27, 244, 87, 15, 5, 249, 199, 236, 91, 27, 244, 11, 15, 5, 249, 199, + 236, 91, 27, 155, 15, 5, 249, 199, 236, 91, 27, 237, 156, 15, 5, 249, + 199, 236, 91, 27, 237, 157, 88, 234, 231, 15, 5, 249, 199, 236, 91, 27, + 236, 240, 15, 5, 249, 199, 236, 91, 27, 235, 188, 15, 5, 249, 199, 236, + 91, 27, 234, 231, 15, 5, 249, 199, 236, 91, 27, 234, 232, 88, 234, 56, + 15, 5, 249, 199, 236, 91, 27, 234, 219, 15, 5, 249, 199, 236, 91, 27, + 232, 141, 15, 5, 249, 199, 236, 91, 27, 229, 247, 88, 229, 246, 15, 5, + 249, 199, 236, 91, 27, 224, 140, 15, 5, 249, 199, 236, 91, 27, 222, 130, + 15, 5, 249, 199, 236, 91, 27, 220, 125, 88, 244, 87, 15, 5, 249, 199, + 236, 91, 27, 220, 30, 15, 5, 249, 175, 15, 5, 249, 156, 15, 5, 249, 155, + 15, 5, 249, 154, 15, 5, 249, 15, 15, 5, 248, 255, 15, 5, 248, 230, 15, 5, + 248, 231, 27, 224, 246, 15, 5, 248, 229, 15, 5, 248, 219, 15, 5, 248, + 220, 236, 209, 105, 244, 4, 248, 202, 15, 5, 248, 202, 15, 5, 247, 111, + 15, 5, 247, 112, 104, 247, 111, 15, 5, 247, 112, 244, 3, 15, 5, 247, 112, + 224, 228, 15, 5, 247, 109, 15, 5, 247, 110, 27, 246, 130, 15, 5, 247, + 108, 15, 5, 247, 107, 15, 5, 247, 106, 15, 5, 247, 105, 15, 5, 247, 101, + 15, 5, 247, 99, 15, 5, 247, 100, 244, 3, 15, 5, 247, 100, 244, 4, 244, 3, + 15, 5, 247, 98, 15, 5, 247, 91, 15, 5, 73, 15, 5, 178, 27, 229, 246, 15, + 5, 178, 104, 178, 231, 104, 104, 231, 103, 15, 5, 247, 17, 15, 5, 247, + 18, 27, 112, 88, 243, 214, 88, 249, 207, 15, 5, 247, 18, 27, 244, 220, + 15, 5, 247, 18, 27, 233, 196, 15, 5, 247, 18, 27, 226, 156, 15, 5, 247, + 18, 27, 224, 246, 15, 5, 247, 18, 27, 68, 15, 5, 246, 252, 15, 5, 246, + 242, 15, 5, 246, 217, 15, 5, 246, 197, 15, 5, 246, 198, 27, 244, 228, 15, + 5, 246, 198, 27, 244, 229, 222, 59, 15, 5, 246, 198, 27, 234, 25, 15, 5, + 246, 198, 250, 95, 246, 197, 15, 5, 246, 198, 230, 110, 246, 197, 15, 5, + 246, 198, 223, 226, 15, 5, 246, 145, 15, 5, 246, 143, 15, 5, 246, 130, + 15, 5, 246, 78, 15, 5, 246, 79, 27, 60, 15, 5, 246, 79, 27, 112, 88, 235, + 162, 15, 5, 246, 79, 27, 112, 88, 235, 163, 27, 235, 162, 15, 5, 246, 79, + 27, 254, 131, 15, 5, 246, 79, 27, 252, 228, 15, 5, 246, 79, 27, 247, 100, + 244, 3, 15, 5, 246, 79, 27, 247, 100, 244, 4, 244, 3, 15, 5, 246, 79, 27, + 155, 15, 5, 246, 79, 27, 243, 214, 244, 3, 15, 5, 246, 79, 27, 238, 2, + 244, 3, 15, 5, 246, 79, 27, 236, 208, 15, 5, 246, 79, 27, 236, 209, 223, + 226, 15, 5, 246, 79, 27, 236, 5, 15, 5, 246, 79, 27, 235, 188, 15, 5, + 246, 79, 27, 235, 163, 27, 235, 162, 15, 5, 246, 79, 27, 235, 67, 15, 5, + 246, 79, 27, 234, 231, 15, 5, 246, 79, 27, 220, 124, 15, 5, 246, 79, 27, + 220, 115, 15, 5, 245, 0, 15, 5, 245, 1, 244, 3, 15, 5, 244, 254, 15, 5, + 244, 255, 27, 112, 88, 249, 208, 88, 155, 15, 5, 244, 255, 27, 112, 88, + 155, 15, 5, 244, 255, 27, 112, 88, 238, 1, 15, 5, 244, 255, 27, 255, 10, + 222, 60, 88, 222, 147, 15, 5, 244, 255, 27, 254, 131, 15, 5, 244, 255, + 27, 254, 7, 15, 5, 244, 255, 27, 254, 6, 88, 244, 240, 15, 5, 244, 255, + 27, 252, 228, 15, 5, 244, 255, 27, 252, 201, 88, 203, 15, 5, 244, 255, + 27, 251, 228, 15, 5, 244, 255, 27, 251, 229, 88, 203, 15, 5, 244, 255, + 27, 249, 207, 15, 5, 244, 255, 27, 249, 15, 15, 5, 244, 255, 27, 248, + 231, 27, 224, 246, 15, 5, 244, 255, 27, 247, 109, 15, 5, 244, 255, 27, + 246, 217, 15, 5, 244, 255, 27, 246, 218, 88, 235, 188, 15, 5, 244, 255, + 27, 246, 197, 15, 5, 244, 255, 27, 246, 198, 27, 244, 229, 222, 59, 15, + 5, 244, 255, 27, 244, 229, 222, 59, 15, 5, 244, 255, 27, 244, 220, 15, 5, + 244, 255, 27, 244, 103, 15, 5, 244, 255, 27, 244, 101, 15, 5, 244, 255, + 27, 244, 102, 88, 60, 15, 5, 244, 255, 27, 244, 88, 88, 223, 103, 15, 5, + 244, 255, 27, 243, 214, 88, 234, 232, 88, 246, 130, 15, 5, 244, 255, 27, + 243, 197, 15, 5, 244, 255, 27, 243, 198, 88, 235, 188, 15, 5, 244, 255, + 27, 243, 113, 88, 235, 67, 15, 5, 244, 255, 27, 242, 169, 15, 5, 244, + 255, 27, 238, 2, 244, 3, 15, 5, 244, 255, 27, 237, 146, 88, 242, 174, 88, + 254, 7, 15, 5, 244, 255, 27, 236, 240, 15, 5, 244, 255, 27, 236, 208, 15, + 5, 244, 255, 27, 236, 110, 15, 5, 244, 255, 27, 236, 111, 88, 235, 162, + 15, 5, 244, 255, 27, 236, 6, 88, 254, 131, 15, 5, 244, 255, 27, 235, 188, + 15, 5, 244, 255, 27, 234, 26, 88, 246, 197, 15, 5, 244, 255, 27, 233, + 196, 15, 5, 244, 255, 27, 231, 103, 15, 5, 244, 255, 27, 231, 104, 104, + 231, 103, 15, 5, 244, 255, 27, 187, 15, 5, 244, 255, 27, 226, 156, 15, 5, + 244, 255, 27, 226, 131, 15, 5, 244, 255, 27, 224, 246, 15, 5, 244, 255, + 27, 224, 247, 88, 220, 240, 15, 5, 244, 255, 27, 224, 219, 15, 5, 244, + 255, 27, 223, 74, 15, 5, 244, 255, 27, 222, 130, 15, 5, 244, 255, 27, 68, + 15, 5, 244, 255, 27, 220, 115, 15, 5, 244, 255, 27, 220, 116, 88, 247, + 111, 15, 5, 244, 255, 104, 244, 254, 15, 5, 244, 249, 15, 5, 244, 250, + 250, 95, 244, 249, 15, 5, 244, 247, 15, 5, 244, 248, 104, 244, 248, 244, + 221, 104, 244, 220, 15, 5, 244, 240, 15, 5, 244, 241, 244, 248, 104, 244, + 248, 244, 221, 104, 244, 220, 15, 5, 244, 239, 15, 5, 244, 237, 15, 5, + 244, 230, 15, 5, 244, 228, 15, 5, 244, 229, 222, 59, 15, 5, 244, 229, + 104, 244, 228, 15, 5, 244, 229, 250, 95, 244, 228, 15, 5, 244, 220, 15, + 5, 244, 219, 15, 5, 244, 215, 15, 5, 244, 166, 15, 5, 244, 167, 27, 235, + 247, 15, 5, 244, 103, 15, 5, 244, 104, 27, 73, 15, 5, 244, 104, 27, 68, + 15, 5, 244, 104, 250, 95, 244, 103, 15, 5, 244, 101, 15, 5, 244, 102, + 104, 244, 101, 15, 5, 244, 102, 250, 95, 244, 101, 15, 5, 244, 99, 15, 5, + 244, 87, 15, 5, 244, 88, 244, 3, 15, 5, 244, 85, 15, 5, 244, 86, 27, 112, + 88, 238, 1, 15, 5, 244, 86, 27, 244, 229, 222, 59, 15, 5, 244, 86, 27, + 238, 1, 15, 5, 244, 86, 27, 234, 232, 88, 238, 1, 15, 5, 244, 86, 27, + 187, 15, 5, 244, 83, 15, 5, 244, 81, 15, 5, 244, 82, 250, 95, 244, 81, + 15, 5, 244, 82, 27, 252, 228, 15, 5, 244, 82, 27, 222, 130, 15, 5, 244, + 82, 222, 59, 15, 5, 244, 17, 15, 5, 244, 18, 250, 95, 244, 17, 15, 5, + 244, 15, 15, 5, 244, 16, 27, 236, 240, 15, 5, 244, 16, 27, 236, 241, 27, + 238, 2, 244, 3, 15, 5, 244, 16, 27, 231, 103, 15, 5, 244, 16, 27, 226, + 157, 88, 220, 253, 15, 5, 244, 16, 244, 3, 15, 5, 244, 11, 15, 5, 244, + 12, 27, 112, 88, 235, 247, 15, 5, 244, 12, 27, 235, 247, 15, 5, 244, 12, + 104, 244, 12, 234, 225, 15, 5, 244, 7, 15, 5, 244, 5, 15, 5, 244, 6, 27, + 224, 246, 15, 5, 243, 253, 15, 5, 243, 252, 15, 5, 243, 249, 15, 5, 243, + 248, 15, 5, 155, 15, 5, 243, 214, 222, 59, 15, 5, 243, 214, 244, 3, 15, + 5, 243, 197, 15, 5, 243, 112, 15, 5, 243, 113, 27, 254, 7, 15, 5, 243, + 113, 27, 254, 5, 15, 5, 243, 113, 27, 252, 228, 15, 5, 243, 113, 27, 248, + 202, 15, 5, 243, 113, 27, 244, 247, 15, 5, 243, 113, 27, 236, 104, 15, 5, + 243, 113, 27, 231, 103, 15, 5, 243, 113, 27, 224, 246, 15, 5, 243, 113, + 27, 68, 15, 5, 242, 173, 15, 5, 242, 169, 15, 5, 242, 170, 27, 254, 131, + 15, 5, 242, 170, 27, 243, 197, 15, 5, 242, 170, 27, 236, 208, 15, 5, 242, + 170, 27, 235, 29, 15, 5, 242, 170, 27, 220, 115, 15, 5, 242, 166, 15, 5, + 72, 15, 5, 242, 107, 60, 15, 5, 242, 69, 15, 5, 238, 29, 15, 5, 238, 30, + 104, 238, 30, 251, 228, 15, 5, 238, 30, 104, 238, 30, 223, 226, 15, 5, + 238, 4, 15, 5, 238, 1, 15, 5, 238, 2, 248, 255, 15, 5, 238, 2, 227, 147, + 15, 5, 238, 2, 104, 238, 2, 224, 205, 104, 224, 205, 220, 116, 104, 220, + 115, 15, 5, 238, 2, 244, 3, 15, 5, 237, 249, 15, 5, 237, 250, 27, 244, + 229, 222, 59, 15, 5, 237, 248, 15, 5, 237, 238, 15, 5, 237, 239, 27, 222, + 130, 15, 5, 237, 239, 250, 95, 237, 238, 15, 5, 237, 239, 230, 110, 237, + 238, 15, 5, 237, 239, 223, 226, 15, 5, 237, 231, 15, 5, 237, 223, 15, 5, + 237, 156, 15, 5, 237, 145, 15, 5, 175, 15, 5, 206, 27, 60, 15, 5, 206, + 27, 254, 244, 15, 5, 206, 27, 254, 245, 88, 236, 5, 15, 5, 206, 27, 254, + 5, 15, 5, 206, 27, 252, 228, 15, 5, 206, 27, 252, 216, 15, 5, 206, 27, + 135, 15, 5, 206, 27, 252, 84, 15, 5, 206, 27, 246, 143, 15, 5, 206, 27, + 246, 130, 15, 5, 206, 27, 245, 0, 15, 5, 206, 27, 244, 240, 15, 5, 206, + 27, 244, 229, 222, 59, 15, 5, 206, 27, 244, 220, 15, 5, 206, 27, 244, + 221, 88, 225, 24, 88, 60, 15, 5, 206, 27, 244, 103, 15, 5, 206, 27, 244, + 87, 15, 5, 206, 27, 244, 82, 88, 226, 131, 15, 5, 206, 27, 244, 82, 250, + 95, 244, 81, 15, 5, 206, 27, 244, 17, 15, 5, 206, 27, 243, 252, 15, 5, + 206, 27, 238, 1, 15, 5, 206, 27, 237, 238, 15, 5, 206, 27, 236, 240, 15, + 5, 206, 27, 236, 113, 15, 5, 206, 27, 236, 110, 15, 5, 206, 27, 235, 67, + 15, 5, 206, 27, 234, 231, 15, 5, 206, 27, 234, 25, 15, 5, 206, 27, 234, + 26, 88, 247, 111, 15, 5, 206, 27, 234, 26, 88, 244, 103, 15, 5, 206, 27, + 234, 26, 88, 222, 87, 15, 5, 206, 27, 233, 196, 15, 5, 206, 27, 233, 197, + 88, 231, 98, 15, 5, 206, 27, 232, 141, 15, 5, 206, 27, 231, 103, 15, 5, + 206, 27, 229, 108, 15, 5, 206, 27, 227, 22, 15, 5, 206, 27, 226, 177, 15, + 5, 206, 27, 226, 131, 15, 5, 206, 27, 225, 25, 15, 5, 206, 27, 224, 246, + 15, 5, 206, 27, 224, 219, 15, 5, 206, 27, 224, 170, 15, 5, 206, 27, 224, + 132, 15, 5, 206, 27, 223, 81, 15, 5, 206, 27, 222, 112, 15, 5, 206, 27, + 68, 15, 5, 206, 27, 220, 124, 15, 5, 206, 27, 220, 115, 15, 5, 206, 27, + 220, 90, 27, 187, 15, 5, 206, 27, 220, 30, 15, 5, 206, 27, 217, 42, 15, + 5, 237, 6, 15, 5, 237, 7, 250, 95, 237, 6, 15, 5, 236, 255, 15, 5, 236, + 253, 15, 5, 236, 251, 15, 5, 236, 250, 15, 5, 236, 248, 15, 5, 236, 249, + 104, 236, 248, 15, 5, 236, 240, 15, 5, 236, 241, 27, 238, 2, 244, 3, 15, + 5, 236, 236, 15, 5, 236, 237, 27, 252, 228, 15, 5, 236, 237, 250, 95, + 236, 236, 15, 5, 236, 235, 15, 5, 236, 234, 15, 5, 236, 208, 15, 5, 236, + 209, 235, 175, 27, 105, 104, 235, 175, 27, 68, 15, 5, 236, 209, 104, 236, + 209, 235, 175, 27, 105, 104, 235, 175, 27, 68, 15, 5, 236, 160, 15, 5, + 236, 113, 15, 5, 236, 114, 27, 252, 228, 15, 5, 236, 114, 27, 68, 15, 5, + 236, 114, 27, 220, 115, 15, 5, 236, 110, 15, 5, 236, 104, 15, 5, 236, 93, + 15, 5, 236, 92, 15, 5, 236, 90, 15, 5, 236, 91, 104, 236, 90, 15, 5, 236, + 7, 15, 5, 236, 8, 104, 243, 113, 27, 254, 6, 236, 8, 104, 243, 113, 27, + 254, 5, 15, 5, 236, 5, 15, 5, 236, 3, 15, 5, 236, 4, 219, 177, 17, 15, 5, + 236, 2, 15, 5, 236, 0, 15, 5, 236, 1, 244, 3, 15, 5, 235, 255, 15, 5, + 235, 247, 15, 5, 235, 248, 230, 110, 235, 247, 15, 5, 235, 242, 15, 5, + 235, 225, 15, 5, 235, 188, 15, 5, 235, 174, 15, 5, 235, 175, 27, 60, 15, + 5, 235, 175, 27, 112, 88, 249, 208, 88, 155, 15, 5, 235, 175, 27, 112, + 88, 244, 220, 15, 5, 235, 175, 27, 112, 88, 235, 162, 15, 5, 235, 175, + 27, 254, 175, 15, 5, 235, 175, 27, 254, 131, 15, 5, 235, 175, 27, 254, 8, + 217, 38, 222, 59, 15, 5, 235, 175, 27, 252, 228, 15, 5, 235, 175, 27, + 252, 84, 15, 5, 235, 175, 27, 249, 156, 15, 5, 235, 175, 27, 246, 197, + 15, 5, 235, 175, 27, 245, 0, 15, 5, 235, 175, 27, 244, 220, 15, 5, 235, + 175, 27, 244, 11, 15, 5, 235, 175, 27, 244, 12, 88, 244, 11, 15, 5, 235, + 175, 27, 155, 15, 5, 235, 175, 27, 243, 197, 15, 5, 235, 175, 27, 243, + 113, 27, 231, 103, 15, 5, 235, 175, 27, 238, 2, 244, 3, 15, 5, 235, 175, + 27, 237, 238, 15, 5, 235, 175, 27, 237, 239, 88, 155, 15, 5, 235, 175, + 27, 237, 239, 88, 234, 231, 15, 5, 235, 175, 27, 236, 113, 15, 5, 235, + 175, 27, 236, 104, 15, 5, 235, 175, 27, 236, 5, 15, 5, 235, 175, 27, 236, + 0, 15, 5, 235, 175, 27, 236, 1, 88, 243, 113, 88, 60, 15, 5, 235, 175, + 27, 235, 174, 15, 5, 235, 175, 27, 235, 29, 15, 5, 235, 175, 27, 234, + 231, 15, 5, 235, 175, 27, 234, 221, 15, 5, 235, 175, 27, 234, 25, 15, 5, + 235, 175, 27, 234, 26, 88, 246, 197, 15, 5, 235, 175, 27, 233, 62, 15, 5, + 235, 175, 27, 232, 141, 15, 5, 235, 175, 27, 224, 247, 88, 223, 74, 15, + 5, 235, 175, 27, 224, 203, 88, 244, 82, 88, 246, 143, 15, 5, 235, 175, + 27, 224, 203, 88, 244, 82, 222, 59, 15, 5, 235, 175, 27, 224, 168, 15, 5, + 235, 175, 27, 224, 169, 88, 224, 168, 15, 5, 235, 175, 27, 223, 74, 15, + 5, 235, 175, 27, 222, 141, 15, 5, 235, 175, 27, 222, 130, 15, 5, 235, + 175, 27, 222, 88, 88, 112, 88, 223, 104, 88, 208, 15, 5, 235, 175, 27, + 68, 15, 5, 235, 175, 27, 105, 88, 60, 15, 5, 235, 175, 27, 105, 88, 105, + 88, 68, 15, 5, 235, 175, 27, 220, 125, 88, 254, 7, 15, 5, 235, 175, 27, + 220, 115, 15, 5, 235, 175, 27, 220, 30, 15, 5, 235, 175, 223, 226, 15, 5, + 235, 172, 15, 5, 235, 173, 27, 224, 246, 15, 5, 235, 173, 27, 224, 247, + 88, 223, 74, 15, 5, 235, 173, 244, 3, 15, 5, 235, 173, 244, 4, 104, 235, + 173, 244, 4, 224, 246, 15, 5, 235, 169, 15, 5, 235, 162, 15, 5, 235, 163, + 27, 235, 162, 15, 5, 235, 160, 15, 5, 235, 161, 27, 235, 247, 15, 5, 235, + 161, 27, 235, 248, 88, 227, 22, 15, 5, 235, 67, 15, 5, 235, 54, 15, 5, + 235, 46, 15, 5, 235, 29, 15, 5, 234, 231, 15, 5, 234, 232, 27, 252, 228, + 15, 5, 234, 229, 15, 5, 234, 230, 27, 254, 175, 15, 5, 234, 230, 27, 252, + 228, 15, 5, 234, 230, 27, 246, 130, 15, 5, 234, 230, 27, 246, 131, 222, + 59, 15, 5, 234, 230, 27, 244, 229, 222, 59, 15, 5, 234, 230, 27, 243, + 113, 27, 252, 228, 15, 5, 234, 230, 27, 237, 238, 15, 5, 234, 230, 27, + 236, 253, 15, 5, 234, 230, 27, 236, 251, 15, 5, 234, 230, 27, 236, 252, + 88, 254, 7, 15, 5, 234, 230, 27, 236, 113, 15, 5, 234, 230, 27, 235, 189, + 88, 254, 7, 15, 5, 234, 230, 27, 235, 174, 15, 5, 234, 230, 27, 234, 26, + 88, 246, 197, 15, 5, 234, 230, 27, 232, 141, 15, 5, 234, 230, 27, 231, + 144, 15, 5, 234, 230, 27, 224, 141, 88, 254, 7, 15, 5, 234, 230, 27, 224, + 124, 88, 251, 248, 15, 5, 234, 230, 27, 220, 253, 15, 5, 234, 230, 222, + 59, 15, 5, 234, 230, 250, 95, 234, 229, 15, 5, 234, 230, 230, 110, 234, + 229, 15, 5, 234, 230, 223, 226, 15, 5, 234, 230, 224, 228, 15, 5, 234, + 228, 15, 5, 234, 225, 15, 5, 234, 226, 104, 234, 225, 15, 5, 234, 226, + 230, 110, 234, 225, 15, 5, 234, 226, 224, 228, 15, 5, 234, 224, 15, 5, + 234, 221, 15, 5, 234, 219, 15, 5, 234, 220, 104, 234, 219, 15, 5, 234, + 220, 104, 234, 220, 244, 221, 104, 244, 220, 15, 5, 196, 15, 5, 234, 120, + 27, 222, 130, 15, 5, 234, 120, 244, 3, 15, 5, 234, 119, 15, 5, 234, 106, + 15, 5, 234, 74, 15, 5, 234, 57, 15, 5, 234, 56, 15, 5, 234, 25, 15, 5, + 233, 244, 15, 5, 233, 196, 15, 5, 233, 159, 15, 5, 233, 99, 15, 5, 233, + 100, 104, 233, 99, 15, 5, 233, 92, 15, 5, 233, 93, 244, 3, 15, 5, 233, + 78, 15, 5, 233, 65, 15, 5, 233, 62, 15, 5, 233, 63, 27, 60, 15, 5, 233, + 63, 27, 235, 247, 15, 5, 233, 63, 27, 217, 114, 15, 5, 233, 63, 104, 233, + 62, 15, 5, 233, 63, 104, 233, 63, 27, 112, 88, 208, 15, 5, 233, 63, 250, + 95, 233, 62, 15, 5, 233, 60, 15, 5, 233, 61, 27, 60, 15, 5, 233, 61, 27, + 112, 88, 249, 15, 15, 5, 233, 61, 27, 249, 15, 15, 5, 233, 61, 244, 3, + 15, 5, 208, 15, 5, 232, 237, 15, 5, 232, 227, 15, 5, 232, 228, 237, 169, + 15, 5, 232, 228, 27, 224, 171, 222, 59, 15, 5, 232, 228, 230, 110, 232, + 227, 15, 5, 232, 226, 15, 5, 232, 222, 231, 90, 15, 5, 232, 221, 15, 5, + 232, 220, 15, 5, 232, 141, 15, 5, 232, 142, 27, 60, 15, 5, 232, 142, 27, + 220, 115, 15, 5, 232, 142, 224, 228, 15, 5, 232, 62, 15, 5, 232, 63, 27, + 73, 15, 5, 232, 61, 15, 5, 232, 34, 15, 5, 232, 35, 27, 244, 229, 222, + 59, 15, 5, 232, 35, 27, 244, 221, 88, 244, 229, 222, 59, 15, 5, 232, 32, + 15, 5, 232, 33, 27, 254, 131, 15, 5, 232, 33, 27, 254, 7, 15, 5, 232, 33, + 27, 254, 8, 88, 254, 7, 15, 5, 232, 33, 27, 244, 11, 15, 5, 232, 33, 27, + 234, 26, 88, 244, 229, 222, 59, 15, 5, 232, 33, 27, 232, 141, 15, 5, 232, + 33, 27, 231, 103, 15, 5, 232, 33, 27, 224, 246, 15, 5, 232, 33, 27, 224, + 247, 88, 112, 254, 131, 15, 5, 232, 33, 27, 224, 247, 88, 254, 7, 15, 5, + 232, 33, 27, 224, 247, 88, 254, 8, 88, 254, 7, 15, 5, 232, 33, 27, 220, + 125, 88, 254, 7, 15, 5, 232, 33, 27, 220, 30, 15, 5, 232, 22, 15, 5, 231, + 144, 15, 5, 231, 117, 15, 5, 231, 103, 15, 5, 231, 104, 235, 173, 27, + 244, 220, 15, 5, 231, 104, 235, 173, 27, 234, 57, 15, 5, 231, 104, 235, + 173, 27, 226, 156, 15, 5, 231, 104, 235, 173, 27, 226, 157, 104, 231, + 104, 235, 173, 27, 226, 156, 15, 5, 231, 104, 235, 173, 27, 220, 30, 15, + 5, 231, 104, 222, 59, 15, 5, 231, 104, 104, 231, 103, 15, 5, 231, 104, + 250, 95, 231, 103, 15, 5, 231, 104, 250, 95, 231, 104, 235, 173, 104, + 235, 172, 15, 5, 231, 98, 15, 5, 231, 99, 255, 10, 27, 254, 3, 15, 5, + 231, 99, 255, 10, 27, 252, 84, 15, 5, 231, 99, 255, 10, 27, 247, 107, 15, + 5, 231, 99, 255, 10, 27, 244, 11, 15, 5, 231, 99, 255, 10, 27, 238, 2, + 244, 3, 15, 5, 231, 99, 255, 10, 27, 236, 251, 15, 5, 231, 99, 255, 10, + 27, 235, 188, 15, 5, 231, 99, 255, 10, 27, 232, 141, 15, 5, 231, 99, 255, + 10, 27, 224, 121, 15, 5, 231, 99, 255, 10, 27, 220, 124, 15, 5, 231, 99, + 236, 91, 27, 252, 84, 15, 5, 231, 99, 236, 91, 27, 252, 85, 68, 15, 5, + 187, 15, 5, 230, 37, 15, 5, 230, 12, 15, 5, 229, 246, 15, 5, 229, 152, + 15, 5, 229, 108, 15, 5, 229, 109, 27, 60, 15, 5, 229, 109, 27, 255, 11, + 15, 5, 229, 109, 27, 252, 84, 15, 5, 229, 109, 27, 251, 248, 15, 5, 229, + 109, 27, 73, 15, 5, 229, 109, 27, 72, 15, 5, 229, 109, 27, 242, 69, 15, + 5, 229, 109, 27, 68, 15, 5, 229, 109, 27, 220, 124, 15, 5, 229, 109, 250, + 95, 229, 108, 15, 5, 229, 67, 15, 5, 229, 68, 27, 236, 236, 15, 5, 229, + 68, 27, 220, 115, 15, 5, 229, 68, 27, 217, 114, 15, 5, 229, 68, 230, 110, + 229, 67, 15, 5, 203, 15, 5, 227, 254, 15, 5, 227, 147, 15, 5, 227, 22, + 15, 5, 226, 177, 15, 5, 226, 166, 231, 90, 15, 5, 226, 165, 15, 5, 226, + 166, 27, 60, 15, 5, 226, 166, 27, 247, 111, 15, 5, 226, 166, 27, 247, + 109, 15, 5, 226, 166, 27, 155, 15, 5, 226, 166, 27, 236, 240, 15, 5, 226, + 166, 27, 235, 247, 15, 5, 226, 166, 27, 234, 219, 15, 5, 226, 166, 27, + 233, 196, 15, 5, 226, 166, 27, 231, 103, 15, 5, 226, 166, 27, 226, 156, + 15, 5, 226, 166, 27, 224, 219, 15, 5, 226, 166, 27, 222, 147, 15, 5, 226, + 166, 27, 220, 124, 15, 5, 226, 166, 27, 220, 121, 15, 5, 226, 166, 27, + 220, 94, 15, 5, 226, 166, 27, 220, 50, 15, 5, 226, 166, 27, 220, 30, 15, + 5, 226, 166, 104, 226, 165, 15, 5, 226, 166, 244, 3, 15, 5, 226, 156, 15, + 5, 226, 157, 235, 175, 27, 254, 5, 15, 5, 226, 138, 15, 5, 226, 131, 15, + 5, 225, 25, 15, 5, 225, 23, 15, 5, 225, 24, 27, 60, 15, 5, 225, 24, 27, + 252, 228, 15, 5, 225, 24, 27, 244, 81, 15, 5, 225, 24, 27, 232, 141, 15, + 5, 225, 24, 27, 224, 168, 15, 5, 225, 24, 27, 220, 240, 15, 5, 225, 24, + 27, 68, 15, 5, 225, 24, 27, 105, 88, 60, 15, 5, 225, 22, 15, 5, 225, 20, + 15, 5, 225, 3, 15, 5, 224, 246, 15, 5, 224, 247, 242, 173, 15, 5, 224, + 247, 104, 224, 247, 244, 248, 104, 244, 248, 244, 221, 104, 244, 220, 15, + 5, 224, 247, 104, 224, 247, 222, 148, 104, 222, 148, 244, 221, 104, 244, + 220, 15, 5, 224, 239, 15, 5, 224, 234, 15, 5, 224, 231, 15, 5, 224, 230, + 15, 5, 224, 227, 15, 5, 224, 219, 15, 5, 224, 220, 27, 60, 15, 5, 224, + 220, 27, 237, 238, 15, 5, 224, 213, 15, 5, 224, 214, 27, 60, 15, 5, 224, + 214, 27, 252, 217, 15, 5, 224, 214, 27, 251, 237, 15, 5, 224, 214, 27, + 248, 219, 15, 5, 224, 214, 27, 244, 220, 15, 5, 224, 214, 27, 238, 1, 15, + 5, 224, 214, 27, 238, 2, 244, 3, 15, 5, 224, 214, 27, 235, 242, 15, 5, + 224, 214, 27, 234, 221, 15, 5, 224, 214, 27, 233, 92, 15, 5, 224, 214, + 27, 226, 156, 15, 5, 224, 208, 15, 5, 224, 204, 15, 5, 224, 205, 222, 59, + 15, 5, 224, 205, 104, 224, 205, 251, 229, 104, 251, 228, 15, 5, 224, 202, + 15, 5, 224, 170, 15, 5, 224, 171, 104, 237, 170, 224, 170, 15, 5, 224, + 168, 15, 5, 224, 167, 15, 5, 224, 140, 15, 5, 224, 141, 244, 3, 15, 5, + 224, 132, 15, 5, 224, 130, 15, 5, 224, 131, 104, 224, 131, 224, 168, 15, + 5, 224, 123, 15, 5, 224, 121, 15, 5, 223, 103, 15, 5, 223, 104, 104, 223, + 103, 15, 5, 223, 83, 15, 5, 223, 82, 15, 5, 223, 81, 15, 5, 223, 74, 15, + 5, 223, 73, 15, 5, 223, 53, 15, 5, 223, 52, 15, 5, 222, 155, 15, 5, 222, + 156, 253, 251, 15, 5, 222, 156, 27, 243, 112, 15, 5, 222, 156, 27, 233, + 196, 15, 5, 222, 156, 244, 3, 15, 5, 222, 147, 15, 5, 222, 148, 104, 222, + 148, 232, 63, 104, 232, 63, 248, 203, 104, 248, 202, 15, 5, 222, 148, + 223, 226, 15, 5, 222, 141, 15, 5, 118, 27, 252, 84, 15, 5, 118, 27, 244, + 11, 15, 5, 118, 27, 224, 246, 15, 5, 118, 27, 224, 170, 15, 5, 118, 27, + 220, 253, 15, 5, 118, 27, 220, 115, 15, 5, 222, 130, 15, 5, 222, 112, 15, + 5, 222, 87, 15, 5, 222, 88, 244, 3, 15, 5, 221, 205, 15, 5, 221, 206, + 222, 59, 15, 5, 221, 181, 15, 5, 221, 165, 15, 5, 221, 166, 27, 222, 130, + 15, 5, 221, 166, 104, 221, 165, 15, 5, 221, 166, 104, 221, 166, 244, 248, + 104, 244, 248, 244, 221, 104, 244, 220, 15, 5, 221, 0, 15, 5, 220, 253, + 15, 5, 220, 251, 15, 5, 220, 249, 15, 5, 220, 240, 15, 5, 220, 241, 104, + 220, 241, 217, 115, 104, 217, 114, 15, 5, 68, 15, 5, 105, 244, 11, 15, 5, + 105, 105, 68, 15, 5, 105, 104, 105, 230, 44, 104, 230, 44, 244, 221, 104, + 244, 220, 15, 5, 105, 104, 105, 223, 54, 104, 223, 53, 15, 5, 105, 104, + 105, 105, 210, 104, 105, 227, 159, 15, 5, 220, 124, 15, 5, 220, 121, 15, + 5, 220, 115, 15, 5, 220, 116, 235, 242, 15, 5, 220, 116, 27, 252, 228, + 15, 5, 220, 116, 27, 233, 196, 15, 5, 220, 116, 27, 105, 88, 105, 88, 68, + 15, 5, 220, 116, 27, 105, 88, 105, 88, 105, 244, 3, 15, 5, 220, 116, 244, + 3, 15, 5, 220, 116, 224, 228, 15, 5, 220, 116, 224, 229, 27, 252, 228, + 15, 5, 220, 111, 15, 5, 220, 94, 15, 5, 220, 95, 27, 235, 174, 15, 5, + 220, 95, 27, 234, 26, 88, 249, 207, 15, 5, 220, 95, 27, 225, 23, 15, 5, + 220, 95, 27, 68, 15, 5, 220, 93, 15, 5, 220, 89, 15, 5, 220, 90, 27, 236, + 208, 15, 5, 220, 90, 27, 187, 15, 5, 220, 87, 15, 5, 220, 88, 244, 3, 15, + 5, 220, 50, 15, 5, 220, 51, 250, 95, 220, 50, 15, 5, 220, 51, 224, 228, + 15, 5, 220, 48, 15, 5, 220, 49, 27, 112, 88, 155, 15, 5, 220, 49, 27, + 112, 88, 208, 15, 5, 220, 49, 27, 254, 175, 15, 5, 220, 49, 27, 155, 15, + 5, 220, 49, 27, 231, 103, 15, 5, 220, 49, 27, 220, 124, 15, 5, 220, 49, + 27, 220, 125, 88, 254, 7, 15, 5, 220, 49, 27, 220, 125, 88, 252, 84, 15, + 5, 220, 47, 15, 5, 220, 44, 15, 5, 220, 43, 15, 5, 220, 40, 15, 5, 220, + 41, 27, 60, 15, 5, 220, 41, 27, 254, 3, 15, 5, 220, 41, 27, 135, 15, 5, + 220, 41, 27, 247, 101, 15, 5, 220, 41, 27, 245, 0, 15, 5, 220, 41, 27, + 244, 240, 15, 5, 220, 41, 27, 244, 229, 222, 59, 15, 5, 220, 41, 27, 244, + 220, 15, 5, 220, 41, 27, 244, 17, 15, 5, 220, 41, 27, 155, 15, 5, 220, + 41, 27, 238, 1, 15, 5, 220, 41, 27, 237, 238, 15, 5, 220, 41, 27, 237, + 145, 15, 5, 220, 41, 27, 236, 113, 15, 5, 220, 41, 27, 234, 219, 15, 5, + 220, 41, 27, 233, 159, 15, 5, 220, 41, 27, 187, 15, 5, 220, 41, 27, 224, + 246, 15, 5, 220, 41, 27, 224, 130, 15, 5, 220, 41, 27, 221, 0, 15, 5, + 220, 41, 27, 105, 88, 244, 11, 15, 5, 220, 41, 27, 220, 115, 15, 5, 220, + 41, 27, 220, 38, 15, 5, 220, 38, 15, 5, 220, 39, 27, 68, 15, 5, 220, 30, + 15, 5, 220, 31, 27, 60, 15, 5, 220, 31, 27, 236, 7, 15, 5, 220, 31, 27, + 235, 247, 15, 5, 220, 31, 27, 222, 130, 15, 5, 220, 27, 15, 5, 220, 29, + 15, 5, 220, 28, 15, 5, 220, 24, 15, 5, 220, 13, 15, 5, 220, 14, 27, 236, + 208, 15, 5, 220, 12, 15, 5, 217, 114, 15, 5, 217, 115, 222, 59, 15, 5, + 217, 115, 204, 27, 235, 247, 15, 5, 217, 111, 15, 5, 217, 104, 15, 5, + 217, 91, 15, 5, 217, 42, 15, 5, 217, 43, 104, 217, 42, 15, 5, 217, 41, + 15, 5, 217, 39, 15, 5, 217, 40, 236, 254, 222, 59, 15, 5, 217, 34, 15, 5, + 217, 26, 15, 5, 217, 13, 15, 5, 217, 11, 15, 5, 217, 12, 27, 60, 15, 5, + 217, 10, 15, 5, 217, 9, 15, 120, 5, 124, 254, 7, 15, 120, 5, 148, 254, 7, + 15, 120, 5, 245, 116, 254, 7, 15, 120, 5, 245, 170, 254, 7, 15, 120, 5, + 224, 82, 254, 7, 15, 120, 5, 225, 43, 254, 7, 15, 120, 5, 246, 235, 254, + 7, 15, 120, 5, 232, 31, 254, 7, 15, 120, 5, 148, 248, 202, 15, 120, 5, + 245, 116, 248, 202, 15, 120, 5, 245, 170, 248, 202, 15, 120, 5, 224, 82, + 248, 202, 15, 120, 5, 225, 43, 248, 202, 15, 120, 5, 246, 235, 248, 202, + 15, 120, 5, 232, 31, 248, 202, 15, 120, 5, 245, 116, 68, 15, 120, 5, 245, + 170, 68, 15, 120, 5, 224, 82, 68, 15, 120, 5, 225, 43, 68, 15, 120, 5, + 246, 235, 68, 15, 120, 5, 232, 31, 68, 15, 120, 5, 131, 244, 168, 15, + 120, 5, 124, 244, 168, 15, 120, 5, 148, 244, 168, 15, 120, 5, 245, 116, + 244, 168, 15, 120, 5, 245, 170, 244, 168, 15, 120, 5, 224, 82, 244, 168, + 15, 120, 5, 225, 43, 244, 168, 15, 120, 5, 246, 235, 244, 168, 15, 120, + 5, 232, 31, 244, 168, 15, 120, 5, 131, 244, 165, 15, 120, 5, 124, 244, + 165, 15, 120, 5, 148, 244, 165, 15, 120, 5, 245, 116, 244, 165, 15, 120, + 5, 245, 170, 244, 165, 15, 120, 5, 124, 225, 3, 15, 120, 5, 148, 225, 3, + 15, 120, 5, 148, 225, 4, 219, 177, 17, 15, 120, 5, 245, 116, 225, 3, 15, + 120, 5, 245, 170, 225, 3, 15, 120, 5, 224, 82, 225, 3, 15, 120, 5, 225, + 43, 225, 3, 15, 120, 5, 246, 235, 225, 3, 15, 120, 5, 232, 31, 225, 3, + 15, 120, 5, 131, 224, 254, 15, 120, 5, 124, 224, 254, 15, 120, 5, 148, + 224, 254, 15, 120, 5, 148, 224, 255, 219, 177, 17, 15, 120, 5, 245, 116, + 224, 254, 15, 120, 5, 245, 170, 224, 254, 15, 120, 5, 225, 4, 27, 244, + 241, 88, 248, 202, 15, 120, 5, 225, 4, 27, 244, 241, 88, 233, 159, 15, + 120, 5, 131, 251, 225, 15, 120, 5, 124, 251, 225, 15, 120, 5, 148, 251, + 225, 15, 120, 5, 148, 251, 226, 219, 177, 17, 15, 120, 5, 245, 116, 251, + 225, 15, 120, 5, 245, 170, 251, 225, 15, 120, 5, 148, 219, 177, 245, 124, + 246, 132, 15, 120, 5, 148, 219, 177, 245, 124, 246, 129, 15, 120, 5, 245, + 116, 219, 177, 245, 124, 235, 47, 15, 120, 5, 245, 116, 219, 177, 245, + 124, 235, 45, 15, 120, 5, 245, 116, 219, 177, 245, 124, 235, 48, 60, 15, + 120, 5, 245, 116, 219, 177, 245, 124, 235, 48, 253, 204, 15, 120, 5, 224, + 82, 219, 177, 245, 124, 254, 4, 15, 120, 5, 225, 43, 219, 177, 245, 124, + 237, 230, 15, 120, 5, 225, 43, 219, 177, 245, 124, 237, 232, 60, 15, 120, + 5, 225, 43, 219, 177, 245, 124, 237, 232, 253, 204, 15, 120, 5, 246, 235, + 219, 177, 245, 124, 220, 26, 15, 120, 5, 246, 235, 219, 177, 245, 124, + 220, 25, 15, 120, 5, 232, 31, 219, 177, 245, 124, 237, 246, 15, 120, 5, + 232, 31, 219, 177, 245, 124, 237, 245, 15, 120, 5, 232, 31, 219, 177, + 245, 124, 237, 244, 15, 120, 5, 232, 31, 219, 177, 245, 124, 237, 247, + 60, 15, 120, 5, 124, 254, 8, 222, 59, 15, 120, 5, 148, 254, 8, 222, 59, + 15, 120, 5, 245, 116, 254, 8, 222, 59, 15, 120, 5, 245, 170, 254, 8, 222, + 59, 15, 120, 5, 224, 82, 254, 8, 222, 59, 15, 120, 5, 131, 252, 207, 15, + 120, 5, 124, 252, 207, 15, 120, 5, 148, 252, 207, 15, 120, 5, 245, 116, + 252, 207, 15, 120, 5, 245, 116, 252, 208, 219, 177, 17, 15, 120, 5, 245, + 170, 252, 207, 15, 120, 5, 245, 170, 252, 208, 219, 177, 17, 15, 120, 5, + 232, 40, 15, 120, 5, 232, 41, 15, 120, 5, 131, 246, 128, 15, 120, 5, 124, + 246, 128, 15, 120, 5, 131, 221, 252, 248, 202, 15, 120, 5, 124, 221, 250, + 248, 202, 15, 120, 5, 245, 170, 224, 72, 248, 202, 15, 120, 5, 131, 221, + 252, 219, 177, 245, 124, 60, 15, 120, 5, 124, 221, 250, 219, 177, 245, + 124, 60, 15, 120, 5, 131, 246, 232, 254, 7, 15, 120, 5, 131, 228, 90, + 254, 7, 15, 120, 5, 48, 253, 254, 131, 224, 73, 15, 120, 5, 48, 253, 254, + 131, 228, 89, 15, 228, 197, 5, 48, 253, 254, 218, 174, 248, 191, 15, 228, + 197, 5, 69, 250, 175, 15, 228, 197, 5, 249, 11, 250, 175, 15, 228, 197, + 5, 249, 11, 221, 86, 10, 11, 255, 140, 10, 11, 255, 139, 10, 11, 255, + 138, 10, 11, 255, 137, 10, 11, 255, 136, 10, 11, 255, 135, 10, 11, 255, + 134, 10, 11, 255, 133, 10, 11, 255, 132, 10, 11, 255, 131, 10, 11, 255, + 130, 10, 11, 255, 129, 10, 11, 255, 128, 10, 11, 255, 127, 10, 11, 255, + 126, 10, 11, 255, 125, 10, 11, 255, 124, 10, 11, 255, 123, 10, 11, 255, + 122, 10, 11, 255, 121, 10, 11, 255, 120, 10, 11, 255, 119, 10, 11, 255, + 118, 10, 11, 255, 117, 10, 11, 255, 116, 10, 11, 255, 115, 10, 11, 255, + 114, 10, 11, 255, 113, 10, 11, 255, 112, 10, 11, 255, 111, 10, 11, 255, + 110, 10, 11, 255, 109, 10, 11, 255, 108, 10, 11, 255, 107, 10, 11, 255, + 106, 10, 11, 255, 105, 10, 11, 255, 104, 10, 11, 255, 103, 10, 11, 255, + 102, 10, 11, 255, 101, 10, 11, 255, 100, 10, 11, 255, 99, 10, 11, 255, + 98, 10, 11, 255, 97, 10, 11, 255, 96, 10, 11, 255, 95, 10, 11, 255, 94, + 10, 11, 255, 93, 10, 11, 255, 92, 10, 11, 255, 91, 10, 11, 255, 90, 10, + 11, 255, 89, 10, 11, 255, 88, 10, 11, 255, 87, 10, 11, 255, 86, 10, 11, + 255, 85, 10, 11, 255, 84, 10, 11, 255, 83, 10, 11, 255, 82, 10, 11, 255, + 81, 10, 11, 255, 80, 10, 11, 255, 79, 10, 11, 255, 78, 10, 11, 255, 77, + 10, 11, 255, 76, 10, 11, 255, 75, 10, 11, 255, 74, 10, 11, 255, 73, 10, + 11, 255, 72, 10, 11, 255, 71, 10, 11, 255, 70, 10, 11, 255, 69, 10, 11, + 255, 68, 10, 11, 255, 67, 10, 11, 255, 66, 10, 11, 255, 65, 10, 11, 255, + 64, 10, 11, 255, 63, 10, 11, 255, 62, 10, 11, 255, 61, 10, 11, 253, 202, + 10, 11, 253, 200, 10, 11, 253, 198, 10, 11, 253, 196, 10, 11, 253, 194, + 10, 11, 253, 193, 10, 11, 253, 191, 10, 11, 253, 189, 10, 11, 253, 187, + 10, 11, 253, 185, 10, 11, 251, 198, 10, 11, 251, 197, 10, 11, 251, 196, + 10, 11, 251, 195, 10, 11, 251, 194, 10, 11, 251, 193, 10, 11, 251, 192, + 10, 11, 251, 191, 10, 11, 251, 190, 10, 11, 251, 189, 10, 11, 251, 188, + 10, 11, 251, 187, 10, 11, 251, 186, 10, 11, 251, 185, 10, 11, 251, 184, + 10, 11, 251, 183, 10, 11, 251, 182, 10, 11, 251, 181, 10, 11, 251, 180, + 10, 11, 251, 179, 10, 11, 251, 178, 10, 11, 251, 177, 10, 11, 251, 176, + 10, 11, 251, 175, 10, 11, 251, 174, 10, 11, 251, 173, 10, 11, 251, 172, + 10, 11, 251, 171, 10, 11, 250, 45, 10, 11, 250, 44, 10, 11, 250, 43, 10, + 11, 250, 42, 10, 11, 250, 41, 10, 11, 250, 40, 10, 11, 250, 39, 10, 11, + 250, 38, 10, 11, 250, 37, 10, 11, 250, 36, 10, 11, 250, 35, 10, 11, 250, + 34, 10, 11, 250, 33, 10, 11, 250, 32, 10, 11, 250, 31, 10, 11, 250, 30, + 10, 11, 250, 29, 10, 11, 250, 28, 10, 11, 250, 27, 10, 11, 250, 26, 10, + 11, 250, 25, 10, 11, 250, 24, 10, 11, 250, 23, 10, 11, 250, 22, 10, 11, + 250, 21, 10, 11, 250, 20, 10, 11, 250, 19, 10, 11, 250, 18, 10, 11, 250, + 17, 10, 11, 250, 16, 10, 11, 250, 15, 10, 11, 250, 14, 10, 11, 250, 13, + 10, 11, 250, 12, 10, 11, 250, 11, 10, 11, 250, 10, 10, 11, 250, 9, 10, + 11, 250, 8, 10, 11, 250, 7, 10, 11, 250, 6, 10, 11, 250, 5, 10, 11, 250, + 4, 10, 11, 250, 3, 10, 11, 250, 2, 10, 11, 250, 1, 10, 11, 250, 0, 10, + 11, 249, 255, 10, 11, 249, 254, 10, 11, 249, 253, 10, 11, 249, 252, 10, + 11, 249, 251, 10, 11, 249, 250, 10, 11, 249, 249, 10, 11, 249, 248, 10, + 11, 249, 247, 10, 11, 249, 246, 10, 11, 249, 245, 10, 11, 249, 244, 10, + 11, 249, 243, 10, 11, 249, 242, 10, 11, 249, 241, 10, 11, 249, 240, 10, + 11, 249, 239, 10, 11, 249, 238, 10, 11, 249, 237, 10, 11, 249, 236, 10, + 11, 249, 235, 10, 11, 249, 234, 10, 11, 249, 233, 10, 11, 249, 232, 10, + 11, 249, 231, 10, 11, 249, 230, 10, 11, 249, 229, 10, 11, 249, 228, 10, + 11, 249, 227, 10, 11, 249, 226, 10, 11, 249, 225, 10, 11, 249, 224, 10, + 11, 249, 223, 10, 11, 249, 222, 10, 11, 249, 221, 10, 11, 249, 220, 10, + 11, 249, 219, 10, 11, 249, 218, 10, 11, 249, 217, 10, 11, 249, 216, 10, + 11, 249, 215, 10, 11, 249, 214, 10, 11, 249, 213, 10, 11, 249, 212, 10, + 11, 249, 211, 10, 11, 249, 210, 10, 11, 247, 62, 10, 11, 247, 61, 10, 11, + 247, 60, 10, 11, 247, 59, 10, 11, 247, 58, 10, 11, 247, 57, 10, 11, 247, + 56, 10, 11, 247, 55, 10, 11, 247, 54, 10, 11, 247, 53, 10, 11, 247, 52, + 10, 11, 247, 51, 10, 11, 247, 50, 10, 11, 247, 49, 10, 11, 247, 48, 10, + 11, 247, 47, 10, 11, 247, 46, 10, 11, 247, 45, 10, 11, 247, 44, 10, 11, + 247, 43, 10, 11, 247, 42, 10, 11, 247, 41, 10, 11, 247, 40, 10, 11, 247, + 39, 10, 11, 247, 38, 10, 11, 247, 37, 10, 11, 247, 36, 10, 11, 247, 35, + 10, 11, 247, 34, 10, 11, 247, 33, 10, 11, 247, 32, 10, 11, 247, 31, 10, + 11, 247, 30, 10, 11, 247, 29, 10, 11, 247, 28, 10, 11, 247, 27, 10, 11, + 247, 26, 10, 11, 247, 25, 10, 11, 247, 24, 10, 11, 247, 23, 10, 11, 247, + 22, 10, 11, 247, 21, 10, 11, 247, 20, 10, 11, 247, 19, 10, 11, 246, 73, + 10, 11, 246, 72, 10, 11, 246, 71, 10, 11, 246, 70, 10, 11, 246, 69, 10, + 11, 246, 68, 10, 11, 246, 67, 10, 11, 246, 66, 10, 11, 246, 65, 10, 11, + 246, 64, 10, 11, 246, 63, 10, 11, 246, 62, 10, 11, 246, 61, 10, 11, 246, + 60, 10, 11, 246, 59, 10, 11, 246, 58, 10, 11, 246, 57, 10, 11, 246, 56, + 10, 11, 246, 55, 10, 11, 246, 54, 10, 11, 246, 53, 10, 11, 246, 52, 10, + 11, 246, 51, 10, 11, 246, 50, 10, 11, 246, 49, 10, 11, 246, 48, 10, 11, + 246, 47, 10, 11, 246, 46, 10, 11, 246, 45, 10, 11, 246, 44, 10, 11, 246, + 43, 10, 11, 246, 42, 10, 11, 246, 41, 10, 11, 246, 40, 10, 11, 246, 39, + 10, 11, 246, 38, 10, 11, 246, 37, 10, 11, 246, 36, 10, 11, 246, 35, 10, + 11, 246, 34, 10, 11, 246, 33, 10, 11, 246, 32, 10, 11, 246, 31, 10, 11, + 246, 30, 10, 11, 246, 29, 10, 11, 246, 28, 10, 11, 246, 27, 10, 11, 246, + 26, 10, 11, 246, 25, 10, 11, 246, 24, 10, 11, 246, 23, 10, 11, 246, 22, + 10, 11, 246, 21, 10, 11, 246, 20, 10, 11, 246, 19, 10, 11, 246, 18, 10, + 11, 246, 17, 10, 11, 246, 16, 10, 11, 246, 15, 10, 11, 246, 14, 10, 11, + 246, 13, 10, 11, 246, 12, 10, 11, 246, 11, 10, 11, 246, 10, 10, 11, 246, + 9, 10, 11, 245, 66, 10, 11, 245, 65, 10, 11, 245, 64, 10, 11, 245, 63, + 10, 11, 245, 62, 10, 11, 245, 61, 10, 11, 245, 60, 10, 11, 245, 59, 10, + 11, 245, 58, 10, 11, 245, 57, 10, 11, 245, 56, 10, 11, 245, 55, 10, 11, + 245, 54, 10, 11, 245, 53, 10, 11, 245, 52, 10, 11, 245, 51, 10, 11, 245, + 50, 10, 11, 245, 49, 10, 11, 245, 48, 10, 11, 245, 47, 10, 11, 245, 46, + 10, 11, 245, 45, 10, 11, 245, 44, 10, 11, 245, 43, 10, 11, 245, 42, 10, + 11, 245, 41, 10, 11, 245, 40, 10, 11, 245, 39, 10, 11, 245, 38, 10, 11, + 245, 37, 10, 11, 245, 36, 10, 11, 245, 35, 10, 11, 245, 34, 10, 11, 245, + 33, 10, 11, 245, 32, 10, 11, 245, 31, 10, 11, 245, 30, 10, 11, 245, 29, + 10, 11, 245, 28, 10, 11, 245, 27, 10, 11, 245, 26, 10, 11, 245, 25, 10, + 11, 245, 24, 10, 11, 245, 23, 10, 11, 245, 22, 10, 11, 245, 21, 10, 11, + 245, 20, 10, 11, 245, 19, 10, 11, 245, 18, 10, 11, 245, 17, 10, 11, 245, + 16, 10, 11, 245, 15, 10, 11, 245, 14, 10, 11, 245, 13, 10, 11, 245, 12, + 10, 11, 245, 11, 10, 11, 245, 10, 10, 11, 245, 9, 10, 11, 245, 8, 10, 11, + 245, 7, 10, 11, 245, 6, 10, 11, 245, 5, 10, 11, 245, 4, 10, 11, 245, 3, + 10, 11, 243, 223, 10, 11, 243, 222, 10, 11, 243, 221, 10, 11, 243, 220, + 10, 11, 243, 219, 10, 11, 243, 218, 10, 11, 243, 217, 10, 11, 243, 216, + 10, 11, 243, 215, 10, 11, 242, 91, 10, 11, 242, 90, 10, 11, 242, 89, 10, + 11, 242, 88, 10, 11, 242, 87, 10, 11, 242, 86, 10, 11, 242, 85, 10, 11, + 242, 84, 10, 11, 242, 83, 10, 11, 242, 82, 10, 11, 242, 81, 10, 11, 242, + 80, 10, 11, 242, 79, 10, 11, 242, 78, 10, 11, 242, 77, 10, 11, 242, 76, + 10, 11, 242, 75, 10, 11, 242, 74, 10, 11, 242, 73, 10, 11, 237, 16, 10, + 11, 237, 15, 10, 11, 237, 14, 10, 11, 237, 13, 10, 11, 237, 12, 10, 11, + 237, 11, 10, 11, 237, 10, 10, 11, 237, 9, 10, 11, 235, 199, 10, 11, 235, + 198, 10, 11, 235, 197, 10, 11, 235, 196, 10, 11, 235, 195, 10, 11, 235, + 194, 10, 11, 235, 193, 10, 11, 235, 192, 10, 11, 235, 191, 10, 11, 235, + 190, 10, 11, 234, 186, 10, 11, 234, 185, 10, 11, 234, 184, 10, 11, 234, + 183, 10, 11, 234, 182, 10, 11, 234, 181, 10, 11, 234, 180, 10, 11, 234, + 179, 10, 11, 234, 178, 10, 11, 234, 177, 10, 11, 234, 176, 10, 11, 234, + 175, 10, 11, 234, 174, 10, 11, 234, 173, 10, 11, 234, 172, 10, 11, 234, + 171, 10, 11, 234, 170, 10, 11, 234, 169, 10, 11, 234, 168, 10, 11, 234, + 167, 10, 11, 234, 166, 10, 11, 234, 165, 10, 11, 234, 164, 10, 11, 234, + 163, 10, 11, 234, 162, 10, 11, 234, 161, 10, 11, 234, 160, 10, 11, 234, + 159, 10, 11, 234, 158, 10, 11, 234, 157, 10, 11, 234, 156, 10, 11, 234, + 155, 10, 11, 234, 154, 10, 11, 234, 153, 10, 11, 234, 152, 10, 11, 234, + 151, 10, 11, 234, 150, 10, 11, 234, 149, 10, 11, 234, 148, 10, 11, 234, + 147, 10, 11, 234, 146, 10, 11, 234, 145, 10, 11, 234, 144, 10, 11, 234, + 143, 10, 11, 234, 142, 10, 11, 234, 141, 10, 11, 234, 140, 10, 11, 234, + 139, 10, 11, 234, 138, 10, 11, 234, 137, 10, 11, 234, 136, 10, 11, 234, + 135, 10, 11, 234, 134, 10, 11, 234, 133, 10, 11, 234, 132, 10, 11, 234, + 131, 10, 11, 234, 130, 10, 11, 234, 129, 10, 11, 234, 128, 10, 11, 234, + 127, 10, 11, 234, 126, 10, 11, 234, 125, 10, 11, 234, 124, 10, 11, 234, + 123, 10, 11, 234, 122, 10, 11, 234, 121, 10, 11, 233, 31, 10, 11, 233, + 30, 10, 11, 233, 29, 10, 11, 233, 28, 10, 11, 233, 27, 10, 11, 233, 26, + 10, 11, 233, 25, 10, 11, 233, 24, 10, 11, 233, 23, 10, 11, 233, 22, 10, + 11, 233, 21, 10, 11, 233, 20, 10, 11, 233, 19, 10, 11, 233, 18, 10, 11, + 233, 17, 10, 11, 233, 16, 10, 11, 233, 15, 10, 11, 233, 14, 10, 11, 233, + 13, 10, 11, 233, 12, 10, 11, 233, 11, 10, 11, 233, 10, 10, 11, 233, 9, + 10, 11, 233, 8, 10, 11, 233, 7, 10, 11, 233, 6, 10, 11, 233, 5, 10, 11, + 233, 4, 10, 11, 233, 3, 10, 11, 233, 2, 10, 11, 233, 1, 10, 11, 233, 0, + 10, 11, 232, 255, 10, 11, 232, 254, 10, 11, 232, 253, 10, 11, 232, 252, + 10, 11, 232, 251, 10, 11, 232, 250, 10, 11, 232, 249, 10, 11, 232, 248, + 10, 11, 232, 247, 10, 11, 232, 246, 10, 11, 232, 245, 10, 11, 232, 244, + 10, 11, 232, 243, 10, 11, 232, 242, 10, 11, 232, 241, 10, 11, 232, 240, + 10, 11, 232, 239, 10, 11, 231, 241, 10, 11, 231, 240, 10, 11, 231, 239, + 10, 11, 231, 238, 10, 11, 231, 237, 10, 11, 231, 236, 10, 11, 231, 235, + 10, 11, 231, 234, 10, 11, 231, 233, 10, 11, 231, 232, 10, 11, 231, 231, + 10, 11, 231, 230, 10, 11, 231, 229, 10, 11, 231, 228, 10, 11, 231, 227, + 10, 11, 231, 226, 10, 11, 231, 225, 10, 11, 231, 224, 10, 11, 231, 223, + 10, 11, 231, 222, 10, 11, 231, 221, 10, 11, 231, 220, 10, 11, 231, 143, + 10, 11, 231, 142, 10, 11, 231, 141, 10, 11, 231, 140, 10, 11, 231, 139, + 10, 11, 231, 138, 10, 11, 231, 137, 10, 11, 231, 136, 10, 11, 231, 135, + 10, 11, 231, 134, 10, 11, 231, 133, 10, 11, 231, 132, 10, 11, 231, 131, + 10, 11, 231, 130, 10, 11, 231, 129, 10, 11, 231, 128, 10, 11, 231, 127, + 10, 11, 231, 126, 10, 11, 231, 125, 10, 11, 231, 124, 10, 11, 231, 123, + 10, 11, 231, 122, 10, 11, 231, 121, 10, 11, 231, 120, 10, 11, 231, 119, + 10, 11, 231, 118, 10, 11, 231, 5, 10, 11, 231, 4, 10, 11, 231, 3, 10, 11, + 231, 2, 10, 11, 231, 1, 10, 11, 231, 0, 10, 11, 230, 255, 10, 11, 230, + 254, 10, 11, 230, 253, 10, 11, 230, 252, 10, 11, 230, 251, 10, 11, 230, + 250, 10, 11, 230, 249, 10, 11, 230, 248, 10, 11, 230, 247, 10, 11, 230, + 246, 10, 11, 230, 245, 10, 11, 230, 244, 10, 11, 230, 243, 10, 11, 230, + 242, 10, 11, 230, 241, 10, 11, 230, 240, 10, 11, 230, 239, 10, 11, 230, + 238, 10, 11, 230, 237, 10, 11, 230, 236, 10, 11, 230, 235, 10, 11, 230, + 234, 10, 11, 230, 233, 10, 11, 230, 232, 10, 11, 230, 231, 10, 11, 230, + 230, 10, 11, 230, 229, 10, 11, 230, 228, 10, 11, 230, 227, 10, 11, 230, + 226, 10, 11, 230, 225, 10, 11, 230, 224, 10, 11, 230, 223, 10, 11, 230, + 222, 10, 11, 230, 221, 10, 11, 230, 220, 10, 11, 230, 219, 10, 11, 230, + 218, 10, 11, 230, 217, 10, 11, 230, 216, 10, 11, 230, 215, 10, 11, 230, + 214, 10, 11, 230, 213, 10, 11, 230, 212, 10, 11, 230, 211, 10, 11, 230, + 210, 10, 11, 230, 209, 10, 11, 230, 208, 10, 11, 230, 207, 10, 11, 230, + 206, 10, 11, 230, 205, 10, 11, 230, 204, 10, 11, 230, 203, 10, 11, 230, + 202, 10, 11, 230, 201, 10, 11, 230, 200, 10, 11, 230, 199, 10, 11, 230, + 198, 10, 11, 230, 197, 10, 11, 230, 196, 10, 11, 230, 195, 10, 11, 230, + 194, 10, 11, 230, 193, 10, 11, 230, 192, 10, 11, 230, 191, 10, 11, 230, + 190, 10, 11, 230, 189, 10, 11, 230, 188, 10, 11, 230, 187, 10, 11, 230, + 58, 10, 11, 230, 57, 10, 11, 230, 56, 10, 11, 230, 55, 10, 11, 230, 54, + 10, 11, 230, 53, 10, 11, 230, 52, 10, 11, 230, 51, 10, 11, 230, 50, 10, + 11, 230, 49, 10, 11, 230, 48, 10, 11, 230, 47, 10, 11, 230, 46, 10, 11, + 228, 162, 10, 11, 228, 161, 10, 11, 228, 160, 10, 11, 228, 159, 10, 11, + 228, 158, 10, 11, 228, 157, 10, 11, 228, 156, 10, 11, 228, 37, 10, 11, + 228, 36, 10, 11, 228, 35, 10, 11, 228, 34, 10, 11, 228, 33, 10, 11, 228, + 32, 10, 11, 228, 31, 10, 11, 228, 30, 10, 11, 228, 29, 10, 11, 228, 28, + 10, 11, 228, 27, 10, 11, 228, 26, 10, 11, 228, 25, 10, 11, 228, 24, 10, + 11, 228, 23, 10, 11, 228, 22, 10, 11, 228, 21, 10, 11, 228, 20, 10, 11, + 228, 19, 10, 11, 228, 18, 10, 11, 228, 17, 10, 11, 228, 16, 10, 11, 228, + 15, 10, 11, 228, 14, 10, 11, 228, 13, 10, 11, 228, 12, 10, 11, 228, 11, + 10, 11, 228, 10, 10, 11, 228, 9, 10, 11, 228, 8, 10, 11, 228, 7, 10, 11, + 228, 6, 10, 11, 228, 5, 10, 11, 228, 4, 10, 11, 226, 232, 10, 11, 226, + 231, 10, 11, 226, 230, 10, 11, 226, 229, 10, 11, 226, 228, 10, 11, 226, + 227, 10, 11, 226, 226, 10, 11, 226, 225, 10, 11, 226, 224, 10, 11, 226, + 223, 10, 11, 226, 222, 10, 11, 226, 221, 10, 11, 226, 220, 10, 11, 226, + 219, 10, 11, 226, 218, 10, 11, 226, 217, 10, 11, 226, 216, 10, 11, 226, + 215, 10, 11, 226, 214, 10, 11, 226, 213, 10, 11, 226, 212, 10, 11, 226, + 211, 10, 11, 226, 210, 10, 11, 226, 209, 10, 11, 226, 208, 10, 11, 226, + 207, 10, 11, 226, 206, 10, 11, 226, 205, 10, 11, 226, 204, 10, 11, 226, + 203, 10, 11, 226, 202, 10, 11, 226, 201, 10, 11, 226, 200, 10, 11, 226, + 199, 10, 11, 226, 198, 10, 11, 226, 197, 10, 11, 226, 196, 10, 11, 226, + 195, 10, 11, 226, 194, 10, 11, 226, 193, 10, 11, 226, 192, 10, 11, 226, + 191, 10, 11, 226, 190, 10, 11, 226, 189, 10, 11, 226, 188, 10, 11, 226, + 187, 10, 11, 226, 186, 10, 11, 226, 185, 10, 11, 226, 184, 10, 11, 226, + 183, 10, 11, 226, 182, 10, 11, 226, 181, 10, 11, 226, 180, 10, 11, 226, + 179, 10, 11, 222, 200, 10, 11, 222, 199, 10, 11, 222, 198, 10, 11, 222, + 197, 10, 11, 222, 196, 10, 11, 222, 195, 10, 11, 222, 194, 10, 11, 222, + 193, 10, 11, 222, 192, 10, 11, 222, 191, 10, 11, 222, 190, 10, 11, 222, + 189, 10, 11, 222, 188, 10, 11, 222, 187, 10, 11, 222, 186, 10, 11, 222, + 185, 10, 11, 222, 184, 10, 11, 222, 183, 10, 11, 222, 182, 10, 11, 222, + 181, 10, 11, 222, 180, 10, 11, 222, 179, 10, 11, 222, 178, 10, 11, 222, + 177, 10, 11, 222, 176, 10, 11, 222, 175, 10, 11, 222, 174, 10, 11, 222, + 173, 10, 11, 222, 172, 10, 11, 222, 171, 10, 11, 222, 170, 10, 11, 222, + 169, 10, 11, 222, 168, 10, 11, 222, 167, 10, 11, 222, 166, 10, 11, 222, + 165, 10, 11, 222, 164, 10, 11, 222, 163, 10, 11, 222, 162, 10, 11, 222, + 161, 10, 11, 222, 160, 10, 11, 222, 159, 10, 11, 222, 158, 10, 11, 222, + 157, 10, 11, 220, 172, 10, 11, 220, 171, 10, 11, 220, 170, 10, 11, 220, + 169, 10, 11, 220, 168, 10, 11, 220, 167, 10, 11, 220, 166, 10, 11, 220, + 165, 10, 11, 220, 164, 10, 11, 220, 163, 10, 11, 220, 162, 10, 11, 220, + 161, 10, 11, 220, 160, 10, 11, 220, 159, 10, 11, 220, 158, 10, 11, 220, + 157, 10, 11, 220, 156, 10, 11, 220, 155, 10, 11, 220, 154, 10, 11, 220, + 153, 10, 11, 220, 152, 10, 11, 220, 151, 10, 11, 220, 150, 10, 11, 220, + 149, 10, 11, 220, 148, 10, 11, 220, 147, 10, 11, 220, 146, 10, 11, 220, + 145, 10, 11, 220, 144, 10, 11, 220, 143, 10, 11, 220, 142, 10, 11, 220, + 141, 10, 11, 220, 140, 10, 11, 220, 139, 10, 11, 220, 138, 10, 11, 220, + 137, 10, 11, 220, 136, 10, 11, 220, 135, 10, 11, 220, 134, 10, 11, 220, + 133, 10, 11, 220, 132, 10, 11, 220, 131, 10, 11, 220, 130, 10, 11, 220, + 129, 10, 11, 220, 128, 10, 11, 220, 127, 10, 11, 220, 126, 10, 11, 220, + 10, 10, 11, 220, 9, 10, 11, 220, 8, 10, 11, 220, 7, 10, 11, 220, 6, 10, + 11, 220, 5, 10, 11, 220, 4, 10, 11, 220, 3, 10, 11, 220, 2, 10, 11, 220, + 1, 10, 11, 220, 0, 10, 11, 219, 255, 10, 11, 219, 254, 10, 11, 219, 253, + 10, 11, 219, 252, 10, 11, 219, 251, 10, 11, 219, 250, 10, 11, 219, 249, + 10, 11, 219, 248, 10, 11, 219, 247, 10, 11, 219, 246, 10, 11, 219, 245, + 10, 11, 219, 244, 10, 11, 219, 243, 10, 11, 219, 242, 10, 11, 219, 241, + 10, 11, 219, 240, 10, 11, 219, 239, 10, 11, 219, 238, 10, 11, 219, 237, + 10, 11, 219, 236, 10, 11, 219, 235, 10, 11, 219, 234, 10, 11, 219, 233, + 10, 11, 219, 232, 10, 11, 219, 231, 10, 11, 219, 230, 10, 11, 219, 229, + 10, 11, 219, 228, 10, 11, 219, 227, 10, 11, 219, 226, 10, 11, 219, 225, + 10, 11, 219, 224, 10, 11, 219, 223, 10, 11, 219, 222, 10, 11, 219, 221, + 10, 11, 219, 220, 10, 11, 219, 219, 10, 11, 219, 218, 10, 11, 219, 217, + 10, 11, 219, 216, 10, 11, 219, 215, 10, 11, 219, 214, 10, 11, 219, 213, + 10, 11, 219, 212, 10, 11, 219, 211, 10, 11, 219, 210, 10, 11, 219, 209, + 10, 11, 219, 208, 10, 11, 219, 207, 10, 11, 219, 206, 10, 11, 219, 205, + 10, 11, 219, 204, 10, 11, 219, 203, 10, 11, 219, 202, 10, 11, 219, 201, + 10, 11, 219, 200, 10, 11, 219, 199, 10, 11, 219, 198, 10, 11, 219, 197, + 10, 11, 219, 196, 10, 11, 219, 195, 10, 11, 219, 194, 10, 11, 219, 193, + 10, 11, 219, 192, 10, 11, 219, 191, 10, 11, 219, 190, 10, 11, 219, 39, + 10, 11, 219, 38, 10, 11, 219, 37, 10, 11, 219, 36, 10, 11, 219, 35, 10, + 11, 219, 34, 10, 11, 219, 33, 10, 11, 219, 32, 10, 11, 219, 31, 10, 11, + 219, 30, 10, 11, 219, 29, 10, 11, 219, 28, 10, 11, 219, 27, 10, 11, 219, + 26, 10, 11, 219, 25, 10, 11, 219, 24, 10, 11, 219, 23, 10, 11, 219, 22, + 10, 11, 219, 21, 10, 11, 219, 20, 10, 11, 219, 19, 10, 11, 219, 18, 10, + 11, 219, 17, 10, 11, 219, 16, 10, 11, 219, 15, 10, 11, 219, 14, 10, 11, + 219, 13, 10, 11, 219, 12, 10, 11, 219, 11, 10, 11, 219, 10, 10, 11, 219, + 9, 10, 11, 219, 8, 10, 11, 218, 150, 10, 11, 218, 149, 10, 11, 218, 148, + 10, 11, 218, 147, 10, 11, 218, 146, 10, 11, 218, 145, 10, 11, 218, 144, + 10, 11, 218, 143, 10, 11, 218, 142, 10, 11, 218, 141, 10, 11, 218, 140, + 10, 11, 218, 139, 10, 11, 218, 88, 10, 11, 218, 87, 10, 11, 218, 86, 10, + 11, 218, 85, 10, 11, 218, 84, 10, 11, 218, 83, 10, 11, 218, 82, 10, 11, + 218, 81, 10, 11, 218, 80, 10, 11, 217, 156, 10, 11, 217, 155, 10, 11, + 217, 154, 10, 11, 217, 153, 10, 11, 217, 152, 10, 11, 217, 151, 10, 11, + 217, 150, 10, 11, 217, 149, 10, 11, 217, 148, 10, 11, 217, 147, 10, 11, + 217, 146, 10, 11, 217, 145, 10, 11, 217, 144, 10, 11, 217, 143, 10, 11, + 217, 142, 10, 11, 217, 141, 10, 11, 217, 140, 10, 11, 217, 139, 10, 11, + 217, 138, 10, 11, 217, 137, 10, 11, 217, 136, 10, 11, 217, 135, 10, 11, + 217, 134, 10, 11, 217, 133, 10, 11, 217, 132, 10, 11, 217, 131, 10, 11, + 217, 130, 10, 11, 217, 129, 10, 11, 217, 128, 10, 11, 217, 127, 10, 11, + 217, 126, 10, 11, 217, 125, 10, 11, 217, 124, 10, 11, 217, 123, 10, 11, + 217, 122, 10, 11, 217, 121, 10, 11, 217, 120, 10, 11, 217, 119, 10, 11, + 217, 118, 10, 11, 217, 117, 10, 11, 217, 116, 10, 11, 255, 57, 10, 11, + 255, 56, 10, 11, 255, 55, 10, 11, 255, 54, 10, 11, 255, 53, 10, 11, 255, + 52, 10, 11, 255, 51, 10, 11, 255, 50, 10, 11, 255, 49, 10, 11, 255, 48, + 10, 11, 255, 47, 10, 11, 255, 46, 10, 11, 255, 45, 10, 11, 255, 44, 10, + 11, 255, 43, 10, 11, 255, 42, 10, 11, 255, 41, 10, 11, 255, 40, 10, 11, + 255, 39, 10, 11, 255, 38, 10, 11, 255, 37, 10, 11, 255, 36, 10, 11, 255, + 35, 10, 11, 255, 34, 10, 11, 255, 33, 10, 11, 255, 32, 10, 11, 255, 31, + 10, 11, 255, 30, 10, 11, 255, 29, 10, 11, 255, 28, 10, 11, 255, 27, 10, + 11, 255, 26, 10, 11, 255, 25, 10, 11, 255, 24, 46, 26, 16, 228, 206, 46, + 26, 16, 249, 148, 46, 26, 16, 229, 163, 46, 26, 16, 230, 67, 246, 221, + 46, 26, 16, 230, 67, 248, 214, 46, 26, 16, 219, 181, 246, 221, 46, 26, + 16, 219, 181, 248, 214, 46, 26, 16, 236, 198, 46, 26, 16, 222, 217, 46, + 26, 16, 229, 235, 46, 26, 16, 217, 205, 46, 26, 16, 217, 206, 248, 214, + 46, 26, 16, 236, 12, 46, 26, 16, 254, 89, 246, 221, 46, 26, 16, 246, 90, + 246, 221, 46, 26, 16, 222, 73, 46, 26, 16, 236, 164, 46, 26, 16, 254, 80, + 46, 26, 16, 254, 81, 248, 214, 46, 26, 16, 222, 222, 46, 26, 16, 221, + 242, 46, 26, 16, 230, 148, 254, 47, 46, 26, 16, 244, 56, 254, 47, 46, 26, + 16, 228, 205, 46, 26, 16, 251, 62, 46, 26, 16, 219, 171, 46, 26, 16, 237, + 144, 254, 47, 46, 26, 16, 236, 166, 254, 47, 46, 26, 16, 236, 165, 254, + 47, 46, 26, 16, 226, 119, 46, 26, 16, 229, 226, 46, 26, 16, 223, 151, + 254, 83, 46, 26, 16, 230, 66, 254, 47, 46, 26, 16, 219, 180, 254, 47, 46, + 26, 16, 254, 84, 254, 47, 46, 26, 16, 254, 78, 46, 26, 16, 236, 65, 46, + 26, 16, 227, 157, 46, 26, 16, 229, 106, 254, 47, 46, 26, 16, 221, 175, + 46, 26, 16, 254, 129, 46, 26, 16, 226, 75, 46, 26, 16, 222, 225, 254, 47, + 46, 26, 16, 222, 225, 233, 239, 223, 149, 46, 26, 16, 230, 61, 254, 47, + 46, 26, 16, 222, 17, 46, 26, 16, 235, 97, 46, 26, 16, 247, 77, 46, 26, + 16, 221, 92, 46, 26, 16, 222, 52, 46, 26, 16, 236, 15, 46, 26, 16, 254, + 89, 246, 90, 232, 131, 46, 26, 16, 245, 93, 254, 47, 46, 26, 16, 237, + 234, 46, 26, 16, 221, 68, 254, 47, 46, 26, 16, 236, 201, 221, 67, 46, 26, + 16, 229, 182, 46, 26, 16, 228, 209, 46, 26, 16, 236, 42, 46, 26, 16, 251, + 6, 254, 47, 46, 26, 16, 227, 232, 46, 26, 16, 229, 238, 254, 47, 46, 26, + 16, 229, 236, 254, 47, 46, 26, 16, 242, 63, 46, 26, 16, 232, 217, 46, 26, + 16, 229, 148, 46, 26, 16, 236, 43, 254, 152, 46, 26, 16, 221, 68, 254, + 152, 46, 26, 16, 223, 132, 46, 26, 16, 244, 25, 46, 26, 16, 237, 144, + 232, 131, 46, 26, 16, 230, 148, 232, 131, 46, 26, 16, 230, 67, 232, 131, + 46, 26, 16, 229, 147, 46, 26, 16, 236, 29, 46, 26, 16, 229, 146, 46, 26, + 16, 236, 14, 46, 26, 16, 229, 183, 232, 131, 46, 26, 16, 236, 165, 232, + 132, 254, 109, 46, 26, 16, 236, 166, 232, 132, 254, 109, 46, 26, 16, 217, + 203, 46, 26, 16, 254, 81, 232, 131, 46, 26, 16, 254, 82, 222, 223, 232, + 131, 46, 26, 16, 217, 204, 46, 26, 16, 236, 13, 46, 26, 16, 246, 216, 46, + 26, 16, 251, 63, 46, 26, 16, 233, 168, 237, 143, 46, 26, 16, 219, 181, + 232, 131, 46, 26, 16, 229, 106, 232, 131, 46, 26, 16, 228, 210, 232, 131, + 46, 26, 16, 230, 145, 46, 26, 16, 254, 100, 46, 26, 16, 234, 195, 46, 26, + 16, 229, 236, 232, 131, 46, 26, 16, 229, 238, 232, 131, 46, 26, 16, 246, + 119, 229, 237, 46, 26, 16, 235, 206, 46, 26, 16, 254, 101, 46, 26, 16, + 221, 68, 232, 131, 46, 26, 16, 246, 219, 46, 26, 16, 222, 225, 232, 131, + 46, 26, 16, 222, 218, 46, 26, 16, 251, 6, 232, 131, 46, 26, 16, 246, 161, + 46, 26, 16, 226, 76, 232, 131, 46, 26, 16, 218, 124, 236, 65, 46, 26, 16, + 221, 65, 46, 26, 16, 228, 211, 46, 26, 16, 221, 69, 46, 26, 16, 221, 66, + 46, 26, 16, 228, 208, 46, 26, 16, 221, 64, 46, 26, 16, 228, 207, 46, 26, + 16, 244, 55, 46, 26, 16, 254, 41, 46, 26, 16, 246, 119, 254, 41, 46, 26, + 16, 230, 61, 232, 131, 46, 26, 16, 222, 16, 246, 127, 46, 26, 16, 222, + 16, 246, 89, 46, 26, 16, 222, 18, 254, 85, 46, 26, 16, 222, 11, 236, 244, + 254, 77, 46, 26, 16, 236, 200, 46, 26, 16, 246, 186, 46, 26, 16, 217, + 253, 236, 197, 46, 26, 16, 217, 253, 254, 109, 46, 26, 16, 223, 150, 46, + 26, 16, 236, 66, 254, 109, 46, 26, 16, 248, 215, 254, 47, 46, 26, 16, + 236, 16, 254, 47, 46, 26, 16, 236, 16, 254, 152, 46, 26, 16, 236, 16, + 232, 131, 46, 26, 16, 254, 84, 232, 131, 46, 26, 16, 254, 86, 46, 26, 16, + 248, 214, 46, 26, 16, 221, 77, 46, 26, 16, 222, 44, 46, 26, 16, 236, 33, + 46, 26, 16, 235, 102, 246, 182, 250, 255, 46, 26, 16, 235, 102, 247, 78, + 251, 0, 46, 26, 16, 235, 102, 221, 79, 251, 0, 46, 26, 16, 235, 102, 222, + 54, 251, 0, 46, 26, 16, 235, 102, 237, 229, 250, 255, 46, 26, 16, 244, + 56, 232, 132, 254, 109, 46, 26, 16, 244, 56, 229, 227, 254, 37, 46, 26, + 16, 244, 56, 229, 227, 249, 40, 46, 26, 16, 248, 238, 46, 26, 16, 248, + 239, 229, 227, 254, 38, 236, 197, 46, 26, 16, 248, 239, 229, 227, 254, + 38, 254, 109, 46, 26, 16, 248, 239, 229, 227, 249, 40, 46, 26, 16, 221, + 83, 46, 26, 16, 254, 42, 46, 26, 16, 237, 236, 46, 26, 16, 249, 3, 46, + 26, 16, 254, 204, 229, 23, 254, 43, 46, 26, 16, 254, 204, 254, 40, 46, + 26, 16, 254, 204, 254, 43, 46, 26, 16, 254, 204, 233, 234, 46, 26, 16, + 254, 204, 233, 242, 46, 26, 16, 254, 204, 244, 57, 46, 26, 16, 254, 204, + 244, 54, 46, 26, 16, 254, 204, 229, 23, 244, 57, 46, 26, 16, 234, 60, + 228, 216, 242, 61, 46, 26, 16, 234, 60, 254, 154, 228, 216, 242, 61, 46, + 26, 16, 234, 60, 249, 39, 242, 61, 46, 26, 16, 234, 60, 254, 154, 249, + 39, 242, 61, 46, 26, 16, 234, 60, 221, 72, 242, 61, 46, 26, 16, 234, 60, + 221, 84, 46, 26, 16, 234, 60, 222, 48, 242, 61, 46, 26, 16, 234, 60, 222, + 48, 235, 105, 242, 61, 46, 26, 16, 234, 60, 235, 105, 242, 61, 46, 26, + 16, 234, 60, 229, 55, 242, 61, 46, 26, 16, 237, 149, 222, 69, 242, 62, + 46, 26, 16, 254, 82, 222, 69, 242, 62, 46, 26, 16, 245, 244, 222, 45, 46, + 26, 16, 245, 244, 233, 126, 46, 26, 16, 245, 244, 248, 243, 46, 26, 16, + 234, 60, 219, 175, 242, 61, 46, 26, 16, 234, 60, 228, 215, 242, 61, 46, + 26, 16, 234, 60, 229, 55, 222, 48, 242, 61, 46, 26, 16, 244, 52, 233, 34, + 254, 85, 46, 26, 16, 244, 52, 233, 34, 248, 213, 46, 26, 16, 246, 195, + 236, 244, 245, 93, 219, 61, 46, 26, 16, 237, 235, 46, 26, 16, 237, 233, + 46, 26, 16, 245, 93, 254, 48, 249, 38, 242, 60, 46, 26, 16, 245, 93, 249, + 1, 187, 46, 26, 16, 245, 93, 249, 1, 232, 217, 46, 26, 16, 245, 93, 232, + 213, 242, 61, 46, 26, 16, 245, 93, 249, 1, 249, 15, 46, 26, 16, 245, 93, + 224, 61, 249, 0, 249, 15, 46, 26, 16, 245, 93, 249, 1, 236, 184, 46, 26, + 16, 245, 93, 249, 1, 217, 21, 46, 26, 16, 245, 93, 249, 1, 232, 63, 236, + 197, 46, 26, 16, 245, 93, 249, 1, 232, 63, 254, 109, 46, 26, 16, 245, 93, + 234, 91, 251, 1, 248, 243, 46, 26, 16, 245, 93, 234, 91, 251, 1, 233, + 126, 46, 26, 16, 245, 204, 224, 61, 251, 1, 219, 174, 46, 26, 16, 245, + 93, 224, 61, 251, 1, 222, 226, 46, 26, 16, 245, 93, 232, 133, 46, 26, 16, + 251, 2, 216, 253, 46, 26, 16, 251, 2, 236, 64, 46, 26, 16, 251, 2, 223, + 250, 46, 26, 16, 245, 93, 242, 107, 217, 252, 222, 49, 46, 26, 16, 245, + 93, 246, 196, 254, 102, 46, 26, 16, 217, 252, 221, 73, 46, 26, 16, 248, + 251, 221, 73, 46, 26, 16, 248, 251, 222, 49, 46, 26, 16, 248, 251, 254, + 87, 247, 78, 248, 161, 46, 26, 16, 248, 251, 233, 124, 222, 53, 248, 161, + 46, 26, 16, 248, 251, 248, 235, 246, 99, 248, 161, 46, 26, 16, 248, 251, + 221, 81, 230, 152, 248, 161, 46, 26, 16, 217, 252, 254, 87, 247, 78, 248, + 161, 46, 26, 16, 217, 252, 233, 124, 222, 53, 248, 161, 46, 26, 16, 217, + 252, 248, 235, 246, 99, 248, 161, 46, 26, 16, 217, 252, 221, 81, 230, + 152, 248, 161, 46, 26, 16, 244, 179, 248, 250, 46, 26, 16, 244, 179, 217, + 251, 46, 26, 16, 249, 2, 254, 87, 233, 169, 46, 26, 16, 249, 2, 254, 87, + 234, 8, 46, 26, 16, 249, 2, 248, 214, 46, 26, 16, 249, 2, 222, 9, 46, 26, + 16, 224, 117, 222, 9, 46, 26, 16, 224, 117, 222, 10, 248, 201, 46, 26, + 16, 224, 117, 222, 10, 221, 74, 46, 26, 16, 224, 117, 222, 10, 222, 42, + 46, 26, 16, 224, 117, 254, 17, 46, 26, 16, 224, 117, 254, 18, 248, 201, + 46, 26, 16, 224, 117, 254, 18, 221, 74, 46, 26, 16, 224, 117, 254, 18, + 222, 42, 46, 26, 16, 248, 236, 244, 161, 46, 26, 16, 248, 242, 230, 86, + 46, 26, 16, 223, 144, 46, 26, 16, 254, 34, 187, 46, 26, 16, 254, 34, 219, + 61, 46, 26, 16, 254, 34, 245, 0, 46, 26, 16, 254, 34, 249, 15, 46, 26, + 16, 254, 34, 236, 184, 46, 26, 16, 254, 34, 217, 21, 46, 26, 16, 254, 34, + 232, 62, 46, 26, 16, 236, 165, 232, 132, 233, 241, 46, 26, 16, 236, 166, + 232, 132, 233, 241, 46, 26, 16, 236, 165, 232, 132, 236, 197, 46, 26, 16, + 236, 166, 232, 132, 236, 197, 46, 26, 16, 236, 66, 236, 197, 46, 26, 16, + 244, 56, 232, 132, 236, 197, 26, 16, 224, 109, 252, 197, 26, 16, 51, 252, + 197, 26, 16, 39, 252, 197, 26, 16, 227, 160, 39, 252, 197, 26, 16, 249, + 145, 252, 197, 26, 16, 224, 192, 252, 197, 26, 16, 42, 227, 182, 55, 26, + 16, 45, 227, 182, 55, 26, 16, 227, 182, 248, 143, 26, 16, 249, 184, 226, + 79, 26, 16, 249, 208, 251, 141, 26, 16, 226, 79, 26, 16, 250, 180, 26, + 16, 227, 180, 245, 193, 26, 16, 227, 180, 245, 192, 26, 16, 227, 180, + 245, 191, 26, 16, 245, 210, 26, 16, 245, 211, 56, 26, 16, 252, 10, 78, + 26, 16, 251, 163, 26, 16, 252, 19, 26, 16, 115, 26, 16, 230, 136, 223, + 163, 26, 16, 220, 205, 223, 163, 26, 16, 221, 227, 223, 163, 26, 16, 245, + 115, 223, 163, 26, 16, 245, 169, 223, 163, 26, 16, 224, 81, 223, 163, 26, + 16, 224, 79, 245, 101, 26, 16, 245, 113, 245, 101, 26, 16, 245, 68, 250, + 207, 26, 16, 245, 68, 250, 208, 230, 88, 254, 145, 26, 16, 245, 68, 250, + 208, 230, 88, 252, 185, 26, 16, 251, 203, 250, 207, 26, 16, 246, 75, 250, + 207, 26, 16, 246, 75, 250, 208, 230, 88, 254, 145, 26, 16, 246, 75, 250, + 208, 230, 88, 252, 185, 26, 16, 247, 116, 250, 206, 26, 16, 247, 116, + 250, 205, 26, 16, 233, 85, 234, 24, 227, 168, 26, 16, 51, 225, 0, 26, 16, + 51, 245, 156, 26, 16, 245, 157, 220, 63, 26, 16, 245, 157, 247, 132, 26, + 16, 232, 205, 220, 63, 26, 16, 232, 205, 247, 132, 26, 16, 225, 1, 220, + 63, 26, 16, 225, 1, 247, 132, 26, 16, 228, 90, 145, 225, 0, 26, 16, 228, + 90, 145, 245, 156, 26, 16, 250, 166, 221, 177, 26, 16, 250, 69, 221, 177, + 26, 16, 230, 88, 254, 145, 26, 16, 230, 88, 252, 185, 26, 16, 228, 74, + 254, 145, 26, 16, 228, 74, 252, 185, 26, 16, 233, 88, 227, 168, 26, 16, + 218, 205, 227, 168, 26, 16, 144, 227, 168, 26, 16, 228, 90, 227, 168, 26, + 16, 246, 232, 227, 168, 26, 16, 224, 76, 227, 168, 26, 16, 221, 243, 227, + 168, 26, 16, 224, 68, 227, 168, 26, 16, 131, 242, 162, 220, 217, 227, + 168, 26, 16, 218, 152, 231, 178, 26, 16, 88, 231, 178, 26, 16, 250, 222, + 218, 152, 231, 178, 26, 16, 40, 231, 179, 218, 207, 26, 16, 40, 231, 179, + 252, 53, 26, 16, 221, 91, 231, 179, 108, 218, 207, 26, 16, 221, 91, 231, + 179, 108, 252, 53, 26, 16, 221, 91, 231, 179, 42, 218, 207, 26, 16, 221, + 91, 231, 179, 42, 252, 53, 26, 16, 221, 91, 231, 179, 45, 218, 207, 26, + 16, 221, 91, 231, 179, 45, 252, 53, 26, 16, 221, 91, 231, 179, 113, 218, + 207, 26, 16, 221, 91, 231, 179, 113, 252, 53, 26, 16, 221, 91, 231, 179, + 108, 45, 218, 207, 26, 16, 221, 91, 231, 179, 108, 45, 252, 53, 26, 16, + 233, 118, 231, 179, 218, 207, 26, 16, 233, 118, 231, 179, 252, 53, 26, + 16, 221, 88, 231, 179, 113, 218, 207, 26, 16, 221, 88, 231, 179, 113, + 252, 53, 26, 16, 229, 230, 231, 178, 26, 16, 219, 67, 231, 178, 26, 16, + 231, 179, 252, 53, 26, 16, 231, 111, 231, 178, 26, 16, 250, 185, 231, + 179, 218, 207, 26, 16, 250, 185, 231, 179, 252, 53, 26, 16, 252, 8, 26, + 16, 218, 205, 231, 180, 26, 16, 144, 231, 180, 26, 16, 228, 90, 231, 180, + 26, 16, 246, 232, 231, 180, 26, 16, 224, 76, 231, 180, 26, 16, 221, 243, + 231, 180, 26, 16, 224, 68, 231, 180, 26, 16, 131, 242, 162, 220, 217, + 231, 180, 26, 16, 36, 223, 146, 26, 16, 36, 223, 233, 223, 146, 26, 16, + 36, 221, 97, 26, 16, 36, 221, 96, 26, 16, 36, 221, 95, 26, 16, 245, 183, + 221, 97, 26, 16, 245, 183, 221, 96, 26, 16, 245, 183, 221, 95, 26, 16, + 36, 253, 230, 248, 145, 26, 16, 36, 245, 162, 26, 16, 36, 245, 161, 26, + 16, 36, 245, 160, 26, 16, 36, 245, 159, 26, 16, 36, 245, 158, 26, 16, + 252, 131, 252, 143, 26, 16, 246, 190, 252, 143, 26, 16, 252, 131, 221, + 200, 26, 16, 246, 190, 221, 200, 26, 16, 252, 131, 224, 44, 26, 16, 246, + 190, 224, 44, 26, 16, 252, 131, 229, 115, 26, 16, 246, 190, 229, 115, 26, + 16, 36, 255, 0, 26, 16, 36, 223, 165, 26, 16, 36, 222, 58, 26, 16, 36, + 223, 166, 26, 16, 36, 234, 71, 26, 16, 36, 234, 70, 26, 16, 36, 254, 255, + 26, 16, 36, 234, 240, 26, 16, 254, 25, 220, 63, 26, 16, 254, 25, 247, + 132, 26, 16, 36, 248, 158, 26, 16, 36, 227, 91, 26, 16, 36, 245, 150, 26, + 16, 36, 224, 40, 26, 16, 36, 252, 113, 26, 16, 36, 51, 221, 124, 26, 16, + 36, 221, 78, 221, 124, 26, 16, 227, 95, 26, 16, 223, 99, 26, 16, 217, + 157, 26, 16, 229, 107, 26, 16, 233, 231, 26, 16, 245, 121, 26, 16, 250, + 106, 26, 16, 249, 83, 26, 16, 244, 47, 231, 181, 224, 55, 26, 16, 244, + 47, 231, 181, 231, 205, 224, 55, 26, 16, 221, 109, 26, 16, 220, 237, 26, + 16, 237, 170, 220, 237, 26, 16, 220, 238, 224, 55, 26, 16, 220, 238, 220, + 63, 26, 16, 230, 99, 223, 119, 26, 16, 230, 99, 223, 116, 26, 16, 230, + 99, 223, 115, 26, 16, 230, 99, 223, 114, 26, 16, 230, 99, 223, 113, 26, + 16, 230, 99, 223, 112, 26, 16, 230, 99, 223, 111, 26, 16, 230, 99, 223, + 110, 26, 16, 230, 99, 223, 109, 26, 16, 230, 99, 223, 118, 26, 16, 230, + 99, 223, 117, 26, 16, 243, 169, 26, 16, 232, 140, 26, 16, 246, 190, 117, + 223, 140, 26, 16, 249, 77, 224, 55, 26, 16, 36, 113, 252, 24, 26, 16, 36, + 108, 252, 24, 26, 16, 36, 243, 178, 26, 16, 36, 224, 34, 229, 59, 26, 16, + 229, 195, 78, 26, 16, 229, 195, 108, 78, 26, 16, 144, 229, 195, 78, 26, + 16, 244, 74, 220, 63, 26, 16, 244, 74, 247, 132, 26, 16, 2, 245, 182, 26, + 16, 249, 168, 26, 16, 249, 169, 254, 157, 26, 16, 234, 46, 26, 16, 234, + 250, 26, 16, 252, 5, 26, 16, 225, 71, 218, 207, 26, 16, 225, 71, 252, 53, + 26, 16, 233, 157, 26, 16, 233, 158, 252, 53, 26, 16, 225, 65, 218, 207, + 26, 16, 225, 65, 252, 53, 26, 16, 245, 82, 218, 207, 26, 16, 245, 82, + 252, 53, 26, 16, 234, 251, 229, 167, 227, 168, 26, 16, 234, 251, 237, + 228, 227, 168, 26, 16, 252, 6, 227, 168, 26, 16, 225, 71, 227, 168, 26, + 16, 233, 158, 227, 168, 26, 16, 225, 65, 227, 168, 26, 16, 222, 67, 229, + 165, 250, 87, 228, 224, 229, 166, 26, 16, 222, 67, 229, 165, 250, 87, + 228, 224, 237, 227, 26, 16, 222, 67, 229, 165, 250, 87, 228, 224, 229, + 167, 248, 224, 26, 16, 222, 67, 237, 226, 250, 87, 228, 224, 229, 166, + 26, 16, 222, 67, 237, 226, 250, 87, 228, 224, 237, 227, 26, 16, 222, 67, + 237, 226, 250, 87, 228, 224, 237, 228, 248, 224, 26, 16, 222, 67, 237, + 226, 250, 87, 228, 224, 237, 228, 248, 223, 26, 16, 222, 67, 237, 226, + 250, 87, 228, 224, 237, 228, 248, 222, 26, 16, 250, 103, 26, 16, 244, 26, + 251, 203, 250, 207, 26, 16, 244, 26, 246, 75, 250, 207, 26, 16, 40, 253, + 204, 26, 16, 219, 81, 26, 16, 229, 35, 26, 16, 250, 200, 26, 16, 226, + 110, 26, 16, 250, 202, 26, 16, 221, 115, 26, 16, 229, 17, 26, 16, 229, + 18, 245, 152, 26, 16, 226, 111, 245, 152, 26, 16, 221, 116, 227, 166, 26, + 16, 229, 154, 223, 95, 23, 219, 71, 165, 223, 18, 23, 219, 71, 165, 223, + 7, 23, 219, 71, 165, 222, 253, 23, 219, 71, 165, 222, 246, 23, 219, 71, + 165, 222, 238, 23, 219, 71, 165, 222, 232, 23, 219, 71, 165, 222, 231, + 23, 219, 71, 165, 222, 230, 23, 219, 71, 165, 222, 229, 23, 219, 71, 165, + 223, 17, 23, 219, 71, 165, 223, 16, 23, 219, 71, 165, 223, 15, 23, 219, + 71, 165, 223, 14, 23, 219, 71, 165, 223, 13, 23, 219, 71, 165, 223, 12, + 23, 219, 71, 165, 223, 11, 23, 219, 71, 165, 223, 10, 23, 219, 71, 165, + 223, 9, 23, 219, 71, 165, 223, 8, 23, 219, 71, 165, 223, 6, 23, 219, 71, + 165, 223, 5, 23, 219, 71, 165, 223, 4, 23, 219, 71, 165, 223, 3, 23, 219, + 71, 165, 223, 2, 23, 219, 71, 165, 222, 237, 23, 219, 71, 165, 222, 236, + 23, 219, 71, 165, 222, 235, 23, 219, 71, 165, 222, 234, 23, 219, 71, 165, + 222, 233, 23, 237, 189, 165, 223, 18, 23, 237, 189, 165, 223, 7, 23, 237, + 189, 165, 222, 246, 23, 237, 189, 165, 222, 238, 23, 237, 189, 165, 222, + 231, 23, 237, 189, 165, 222, 230, 23, 237, 189, 165, 223, 16, 23, 237, + 189, 165, 223, 15, 23, 237, 189, 165, 223, 14, 23, 237, 189, 165, 223, + 13, 23, 237, 189, 165, 223, 10, 23, 237, 189, 165, 223, 9, 23, 237, 189, + 165, 223, 8, 23, 237, 189, 165, 223, 3, 23, 237, 189, 165, 223, 2, 23, + 237, 189, 165, 223, 1, 23, 237, 189, 165, 223, 0, 23, 237, 189, 165, 222, + 255, 23, 237, 189, 165, 222, 254, 23, 237, 189, 165, 222, 252, 23, 237, + 189, 165, 222, 251, 23, 237, 189, 165, 222, 250, 23, 237, 189, 165, 222, + 249, 23, 237, 189, 165, 222, 248, 23, 237, 189, 165, 222, 247, 23, 237, + 189, 165, 222, 245, 23, 237, 189, 165, 222, 244, 23, 237, 189, 165, 222, + 243, 23, 237, 189, 165, 222, 242, 23, 237, 189, 165, 222, 241, 23, 237, + 189, 165, 222, 240, 23, 237, 189, 165, 222, 239, 23, 237, 189, 165, 222, + 237, 23, 237, 189, 165, 222, 236, 23, 237, 189, 165, 222, 235, 23, 237, + 189, 165, 222, 234, 23, 237, 189, 165, 222, 233, 36, 23, 26, 221, 75, 36, + 23, 26, 222, 43, 36, 23, 26, 229, 174, 23, 26, 235, 101, 233, 125, 35, + 247, 8, 248, 237, 35, 243, 150, 247, 8, 248, 237, 35, 242, 165, 247, 8, + 248, 237, 35, 247, 7, 243, 151, 248, 237, 35, 247, 7, 242, 164, 248, 237, + 35, 247, 8, 159, 35, 251, 84, 159, 35, 245, 90, 250, 221, 159, 35, 233, + 150, 159, 35, 252, 192, 159, 35, 236, 181, 224, 43, 159, 35, 250, 133, + 159, 35, 254, 9, 159, 35, 230, 109, 159, 35, 252, 13, 230, 83, 159, 35, + 249, 79, 156, 248, 198, 159, 35, 248, 195, 159, 35, 217, 210, 159, 35, + 237, 217, 159, 35, 229, 180, 159, 35, 227, 215, 159, 35, 250, 143, 159, + 35, 242, 253, 252, 233, 159, 35, 219, 1, 159, 35, 245, 138, 159, 35, 254, + 236, 159, 35, 227, 190, 159, 35, 227, 172, 159, 35, 247, 6, 159, 35, 237, + 45, 159, 35, 250, 138, 159, 35, 246, 189, 159, 35, 247, 87, 159, 35, 251, + 58, 159, 35, 249, 85, 159, 35, 21, 227, 171, 159, 35, 230, 38, 159, 35, + 235, 104, 159, 35, 250, 195, 159, 35, 236, 101, 159, 35, 244, 211, 159, + 35, 223, 126, 159, 35, 228, 189, 159, 35, 245, 89, 159, 35, 227, 173, + 159, 35, 235, 134, 156, 233, 134, 159, 35, 227, 169, 159, 35, 244, 64, + 199, 234, 12, 159, 35, 246, 191, 159, 35, 223, 133, 159, 35, 244, 28, + 159, 35, 246, 184, 159, 35, 229, 210, 159, 35, 227, 85, 159, 35, 245, + 151, 159, 35, 219, 173, 156, 218, 244, 159, 35, 250, 146, 159, 35, 234, + 23, 159, 35, 246, 120, 159, 35, 220, 71, 159, 35, 248, 225, 159, 35, 250, + 197, 233, 105, 159, 35, 244, 13, 159, 35, 244, 212, 237, 223, 159, 35, + 234, 53, 159, 35, 254, 253, 159, 35, 246, 203, 159, 35, 247, 134, 159, + 35, 218, 242, 159, 35, 224, 106, 159, 35, 237, 196, 159, 35, 249, 51, + 159, 35, 249, 150, 159, 35, 248, 221, 159, 35, 246, 93, 159, 35, 225, 37, + 159, 35, 223, 135, 159, 35, 243, 180, 159, 35, 250, 162, 159, 35, 250, + 193, 159, 35, 245, 248, 159, 35, 254, 205, 159, 35, 250, 161, 159, 35, + 230, 139, 222, 23, 219, 155, 159, 35, 248, 245, 159, 35, 235, 180, 159, + 35, 245, 118, 250, 112, 227, 69, 220, 73, 20, 107, 250, 112, 227, 69, + 220, 73, 20, 103, 250, 112, 227, 69, 220, 73, 20, 160, 250, 112, 227, 69, + 220, 73, 20, 154, 250, 112, 227, 69, 220, 73, 20, 174, 250, 112, 227, 69, + 220, 73, 20, 182, 250, 112, 227, 69, 220, 73, 20, 191, 250, 112, 227, 69, + 220, 73, 20, 185, 250, 112, 227, 69, 220, 73, 20, 190, 250, 112, 227, 69, + 222, 63, 20, 107, 250, 112, 227, 69, 222, 63, 20, 103, 250, 112, 227, 69, + 222, 63, 20, 160, 250, 112, 227, 69, 222, 63, 20, 154, 250, 112, 227, 69, + 222, 63, 20, 174, 250, 112, 227, 69, 222, 63, 20, 182, 250, 112, 227, 69, + 222, 63, 20, 191, 250, 112, 227, 69, 222, 63, 20, 185, 250, 112, 227, 69, + 222, 63, 20, 190, 14, 21, 6, 60, 14, 21, 6, 253, 204, 14, 21, 6, 251, + 202, 14, 21, 6, 250, 46, 14, 21, 6, 73, 14, 21, 6, 246, 74, 14, 21, 6, + 245, 67, 14, 21, 6, 243, 225, 14, 21, 6, 72, 14, 21, 6, 237, 126, 14, 21, + 6, 237, 17, 14, 21, 6, 153, 14, 21, 6, 189, 14, 21, 6, 207, 14, 21, 6, + 74, 14, 21, 6, 230, 59, 14, 21, 6, 228, 163, 14, 21, 6, 152, 14, 21, 6, + 198, 14, 21, 6, 222, 201, 14, 21, 6, 68, 14, 21, 6, 216, 216, 14, 21, 6, + 219, 40, 14, 21, 6, 218, 151, 14, 21, 6, 218, 90, 14, 21, 6, 217, 157, + 14, 21, 3, 60, 14, 21, 3, 253, 204, 14, 21, 3, 251, 202, 14, 21, 3, 250, + 46, 14, 21, 3, 73, 14, 21, 3, 246, 74, 14, 21, 3, 245, 67, 14, 21, 3, + 243, 225, 14, 21, 3, 72, 14, 21, 3, 237, 126, 14, 21, 3, 237, 17, 14, 21, + 3, 153, 14, 21, 3, 189, 14, 21, 3, 207, 14, 21, 3, 74, 14, 21, 3, 230, + 59, 14, 21, 3, 228, 163, 14, 21, 3, 152, 14, 21, 3, 198, 14, 21, 3, 222, + 201, 14, 21, 3, 68, 14, 21, 3, 216, 216, 14, 21, 3, 219, 40, 14, 21, 3, + 218, 151, 14, 21, 3, 218, 90, 14, 21, 3, 217, 157, 14, 30, 6, 60, 14, 30, + 6, 253, 204, 14, 30, 6, 251, 202, 14, 30, 6, 250, 46, 14, 30, 6, 73, 14, + 30, 6, 246, 74, 14, 30, 6, 245, 67, 14, 30, 6, 243, 225, 14, 30, 6, 72, + 14, 30, 6, 237, 126, 14, 30, 6, 237, 17, 14, 30, 6, 153, 14, 30, 6, 189, + 14, 30, 6, 207, 14, 30, 6, 74, 14, 30, 6, 230, 59, 14, 30, 6, 228, 163, + 14, 30, 6, 152, 14, 30, 6, 198, 14, 30, 6, 222, 201, 14, 30, 6, 68, 14, + 30, 6, 216, 216, 14, 30, 6, 219, 40, 14, 30, 6, 218, 151, 14, 30, 6, 218, + 90, 14, 30, 6, 217, 157, 14, 30, 3, 60, 14, 30, 3, 253, 204, 14, 30, 3, + 251, 202, 14, 30, 3, 250, 46, 14, 30, 3, 73, 14, 30, 3, 246, 74, 14, 30, + 3, 245, 67, 14, 30, 3, 72, 14, 30, 3, 237, 126, 14, 30, 3, 237, 17, 14, + 30, 3, 153, 14, 30, 3, 189, 14, 30, 3, 207, 14, 30, 3, 74, 14, 30, 3, + 230, 59, 14, 30, 3, 228, 163, 14, 30, 3, 152, 14, 30, 3, 198, 14, 30, 3, + 222, 201, 14, 30, 3, 68, 14, 30, 3, 216, 216, 14, 30, 3, 219, 40, 14, 30, + 3, 218, 151, 14, 30, 3, 218, 90, 14, 30, 3, 217, 157, 14, 21, 30, 6, 60, + 14, 21, 30, 6, 253, 204, 14, 21, 30, 6, 251, 202, 14, 21, 30, 6, 250, 46, + 14, 21, 30, 6, 73, 14, 21, 30, 6, 246, 74, 14, 21, 30, 6, 245, 67, 14, + 21, 30, 6, 243, 225, 14, 21, 30, 6, 72, 14, 21, 30, 6, 237, 126, 14, 21, + 30, 6, 237, 17, 14, 21, 30, 6, 153, 14, 21, 30, 6, 189, 14, 21, 30, 6, + 207, 14, 21, 30, 6, 74, 14, 21, 30, 6, 230, 59, 14, 21, 30, 6, 228, 163, + 14, 21, 30, 6, 152, 14, 21, 30, 6, 198, 14, 21, 30, 6, 222, 201, 14, 21, + 30, 6, 68, 14, 21, 30, 6, 216, 216, 14, 21, 30, 6, 219, 40, 14, 21, 30, + 6, 218, 151, 14, 21, 30, 6, 218, 90, 14, 21, 30, 6, 217, 157, 14, 21, 30, + 3, 60, 14, 21, 30, 3, 253, 204, 14, 21, 30, 3, 251, 202, 14, 21, 30, 3, + 250, 46, 14, 21, 30, 3, 73, 14, 21, 30, 3, 246, 74, 14, 21, 30, 3, 245, + 67, 14, 21, 30, 3, 243, 225, 14, 21, 30, 3, 72, 14, 21, 30, 3, 237, 126, + 14, 21, 30, 3, 237, 17, 14, 21, 30, 3, 153, 14, 21, 30, 3, 189, 14, 21, + 30, 3, 207, 14, 21, 30, 3, 74, 14, 21, 30, 3, 230, 59, 14, 21, 30, 3, + 228, 163, 14, 21, 30, 3, 152, 14, 21, 30, 3, 198, 14, 21, 30, 3, 222, + 201, 14, 21, 30, 3, 68, 14, 21, 30, 3, 216, 216, 14, 21, 30, 3, 219, 40, + 14, 21, 30, 3, 218, 151, 14, 21, 30, 3, 218, 90, 14, 21, 30, 3, 217, 157, + 14, 102, 6, 60, 14, 102, 6, 251, 202, 14, 102, 6, 250, 46, 14, 102, 6, + 245, 67, 14, 102, 6, 237, 126, 14, 102, 6, 237, 17, 14, 102, 6, 207, 14, + 102, 6, 74, 14, 102, 6, 230, 59, 14, 102, 6, 228, 163, 14, 102, 6, 198, + 14, 102, 6, 222, 201, 14, 102, 6, 68, 14, 102, 6, 216, 216, 14, 102, 6, + 219, 40, 14, 102, 6, 218, 151, 14, 102, 6, 218, 90, 14, 102, 6, 217, 157, + 14, 102, 3, 60, 14, 102, 3, 253, 204, 14, 102, 3, 251, 202, 14, 102, 3, + 250, 46, 14, 102, 3, 246, 74, 14, 102, 3, 243, 225, 14, 102, 3, 72, 14, + 102, 3, 237, 126, 14, 102, 3, 237, 17, 14, 102, 3, 153, 14, 102, 3, 189, + 14, 102, 3, 207, 14, 102, 3, 230, 59, 14, 102, 3, 228, 163, 14, 102, 3, + 152, 14, 102, 3, 198, 14, 102, 3, 222, 201, 14, 102, 3, 68, 14, 102, 3, + 216, 216, 14, 102, 3, 219, 40, 14, 102, 3, 218, 151, 14, 102, 3, 218, 90, + 14, 102, 3, 217, 157, 14, 21, 102, 6, 60, 14, 21, 102, 6, 253, 204, 14, + 21, 102, 6, 251, 202, 14, 21, 102, 6, 250, 46, 14, 21, 102, 6, 73, 14, + 21, 102, 6, 246, 74, 14, 21, 102, 6, 245, 67, 14, 21, 102, 6, 243, 225, + 14, 21, 102, 6, 72, 14, 21, 102, 6, 237, 126, 14, 21, 102, 6, 237, 17, + 14, 21, 102, 6, 153, 14, 21, 102, 6, 189, 14, 21, 102, 6, 207, 14, 21, + 102, 6, 74, 14, 21, 102, 6, 230, 59, 14, 21, 102, 6, 228, 163, 14, 21, + 102, 6, 152, 14, 21, 102, 6, 198, 14, 21, 102, 6, 222, 201, 14, 21, 102, + 6, 68, 14, 21, 102, 6, 216, 216, 14, 21, 102, 6, 219, 40, 14, 21, 102, 6, + 218, 151, 14, 21, 102, 6, 218, 90, 14, 21, 102, 6, 217, 157, 14, 21, 102, + 3, 60, 14, 21, 102, 3, 253, 204, 14, 21, 102, 3, 251, 202, 14, 21, 102, + 3, 250, 46, 14, 21, 102, 3, 73, 14, 21, 102, 3, 246, 74, 14, 21, 102, 3, + 245, 67, 14, 21, 102, 3, 243, 225, 14, 21, 102, 3, 72, 14, 21, 102, 3, + 237, 126, 14, 21, 102, 3, 237, 17, 14, 21, 102, 3, 153, 14, 21, 102, 3, + 189, 14, 21, 102, 3, 207, 14, 21, 102, 3, 74, 14, 21, 102, 3, 230, 59, + 14, 21, 102, 3, 228, 163, 14, 21, 102, 3, 152, 14, 21, 102, 3, 198, 14, + 21, 102, 3, 222, 201, 14, 21, 102, 3, 68, 14, 21, 102, 3, 216, 216, 14, + 21, 102, 3, 219, 40, 14, 21, 102, 3, 218, 151, 14, 21, 102, 3, 218, 90, + 14, 21, 102, 3, 217, 157, 14, 121, 6, 60, 14, 121, 6, 253, 204, 14, 121, + 6, 250, 46, 14, 121, 6, 73, 14, 121, 6, 246, 74, 14, 121, 6, 245, 67, 14, + 121, 6, 237, 126, 14, 121, 6, 237, 17, 14, 121, 6, 153, 14, 121, 6, 189, + 14, 121, 6, 207, 14, 121, 6, 74, 14, 121, 6, 230, 59, 14, 121, 6, 228, + 163, 14, 121, 6, 198, 14, 121, 6, 222, 201, 14, 121, 6, 68, 14, 121, 6, + 216, 216, 14, 121, 6, 219, 40, 14, 121, 6, 218, 151, 14, 121, 6, 218, 90, + 14, 121, 3, 60, 14, 121, 3, 253, 204, 14, 121, 3, 251, 202, 14, 121, 3, + 250, 46, 14, 121, 3, 73, 14, 121, 3, 246, 74, 14, 121, 3, 245, 67, 14, + 121, 3, 243, 225, 14, 121, 3, 72, 14, 121, 3, 237, 126, 14, 121, 3, 237, + 17, 14, 121, 3, 153, 14, 121, 3, 189, 14, 121, 3, 207, 14, 121, 3, 74, + 14, 121, 3, 230, 59, 14, 121, 3, 228, 163, 14, 121, 3, 152, 14, 121, 3, + 198, 14, 121, 3, 222, 201, 14, 121, 3, 68, 14, 121, 3, 216, 216, 14, 121, + 3, 219, 40, 14, 121, 3, 218, 151, 14, 121, 3, 218, 90, 14, 121, 3, 217, + 157, 14, 173, 6, 60, 14, 173, 6, 253, 204, 14, 173, 6, 250, 46, 14, 173, + 6, 73, 14, 173, 6, 246, 74, 14, 173, 6, 245, 67, 14, 173, 6, 72, 14, 173, + 6, 237, 126, 14, 173, 6, 237, 17, 14, 173, 6, 153, 14, 173, 6, 189, 14, + 173, 6, 74, 14, 173, 6, 198, 14, 173, 6, 222, 201, 14, 173, 6, 68, 14, + 173, 6, 216, 216, 14, 173, 6, 219, 40, 14, 173, 6, 218, 151, 14, 173, 6, + 218, 90, 14, 173, 3, 60, 14, 173, 3, 253, 204, 14, 173, 3, 251, 202, 14, + 173, 3, 250, 46, 14, 173, 3, 73, 14, 173, 3, 246, 74, 14, 173, 3, 245, + 67, 14, 173, 3, 243, 225, 14, 173, 3, 72, 14, 173, 3, 237, 126, 14, 173, + 3, 237, 17, 14, 173, 3, 153, 14, 173, 3, 189, 14, 173, 3, 207, 14, 173, + 3, 74, 14, 173, 3, 230, 59, 14, 173, 3, 228, 163, 14, 173, 3, 152, 14, + 173, 3, 198, 14, 173, 3, 222, 201, 14, 173, 3, 68, 14, 173, 3, 216, 216, + 14, 173, 3, 219, 40, 14, 173, 3, 218, 151, 14, 173, 3, 218, 90, 14, 173, + 3, 217, 157, 14, 21, 121, 6, 60, 14, 21, 121, 6, 253, 204, 14, 21, 121, + 6, 251, 202, 14, 21, 121, 6, 250, 46, 14, 21, 121, 6, 73, 14, 21, 121, 6, + 246, 74, 14, 21, 121, 6, 245, 67, 14, 21, 121, 6, 243, 225, 14, 21, 121, + 6, 72, 14, 21, 121, 6, 237, 126, 14, 21, 121, 6, 237, 17, 14, 21, 121, 6, + 153, 14, 21, 121, 6, 189, 14, 21, 121, 6, 207, 14, 21, 121, 6, 74, 14, + 21, 121, 6, 230, 59, 14, 21, 121, 6, 228, 163, 14, 21, 121, 6, 152, 14, + 21, 121, 6, 198, 14, 21, 121, 6, 222, 201, 14, 21, 121, 6, 68, 14, 21, + 121, 6, 216, 216, 14, 21, 121, 6, 219, 40, 14, 21, 121, 6, 218, 151, 14, + 21, 121, 6, 218, 90, 14, 21, 121, 6, 217, 157, 14, 21, 121, 3, 60, 14, + 21, 121, 3, 253, 204, 14, 21, 121, 3, 251, 202, 14, 21, 121, 3, 250, 46, + 14, 21, 121, 3, 73, 14, 21, 121, 3, 246, 74, 14, 21, 121, 3, 245, 67, 14, + 21, 121, 3, 243, 225, 14, 21, 121, 3, 72, 14, 21, 121, 3, 237, 126, 14, + 21, 121, 3, 237, 17, 14, 21, 121, 3, 153, 14, 21, 121, 3, 189, 14, 21, + 121, 3, 207, 14, 21, 121, 3, 74, 14, 21, 121, 3, 230, 59, 14, 21, 121, 3, + 228, 163, 14, 21, 121, 3, 152, 14, 21, 121, 3, 198, 14, 21, 121, 3, 222, + 201, 14, 21, 121, 3, 68, 14, 21, 121, 3, 216, 216, 14, 21, 121, 3, 219, + 40, 14, 21, 121, 3, 218, 151, 14, 21, 121, 3, 218, 90, 14, 21, 121, 3, + 217, 157, 14, 33, 6, 60, 14, 33, 6, 253, 204, 14, 33, 6, 251, 202, 14, + 33, 6, 250, 46, 14, 33, 6, 73, 14, 33, 6, 246, 74, 14, 33, 6, 245, 67, + 14, 33, 6, 243, 225, 14, 33, 6, 72, 14, 33, 6, 237, 126, 14, 33, 6, 237, + 17, 14, 33, 6, 153, 14, 33, 6, 189, 14, 33, 6, 207, 14, 33, 6, 74, 14, + 33, 6, 230, 59, 14, 33, 6, 228, 163, 14, 33, 6, 152, 14, 33, 6, 198, 14, + 33, 6, 222, 201, 14, 33, 6, 68, 14, 33, 6, 216, 216, 14, 33, 6, 219, 40, + 14, 33, 6, 218, 151, 14, 33, 6, 218, 90, 14, 33, 6, 217, 157, 14, 33, 3, + 60, 14, 33, 3, 253, 204, 14, 33, 3, 251, 202, 14, 33, 3, 250, 46, 14, 33, + 3, 73, 14, 33, 3, 246, 74, 14, 33, 3, 245, 67, 14, 33, 3, 243, 225, 14, + 33, 3, 72, 14, 33, 3, 237, 126, 14, 33, 3, 237, 17, 14, 33, 3, 153, 14, + 33, 3, 189, 14, 33, 3, 207, 14, 33, 3, 74, 14, 33, 3, 230, 59, 14, 33, 3, + 228, 163, 14, 33, 3, 152, 14, 33, 3, 198, 14, 33, 3, 222, 201, 14, 33, 3, + 68, 14, 33, 3, 216, 216, 14, 33, 3, 219, 40, 14, 33, 3, 218, 151, 14, 33, + 3, 218, 90, 14, 33, 3, 217, 157, 14, 33, 21, 6, 60, 14, 33, 21, 6, 253, + 204, 14, 33, 21, 6, 251, 202, 14, 33, 21, 6, 250, 46, 14, 33, 21, 6, 73, + 14, 33, 21, 6, 246, 74, 14, 33, 21, 6, 245, 67, 14, 33, 21, 6, 243, 225, + 14, 33, 21, 6, 72, 14, 33, 21, 6, 237, 126, 14, 33, 21, 6, 237, 17, 14, + 33, 21, 6, 153, 14, 33, 21, 6, 189, 14, 33, 21, 6, 207, 14, 33, 21, 6, + 74, 14, 33, 21, 6, 230, 59, 14, 33, 21, 6, 228, 163, 14, 33, 21, 6, 152, + 14, 33, 21, 6, 198, 14, 33, 21, 6, 222, 201, 14, 33, 21, 6, 68, 14, 33, + 21, 6, 216, 216, 14, 33, 21, 6, 219, 40, 14, 33, 21, 6, 218, 151, 14, 33, + 21, 6, 218, 90, 14, 33, 21, 6, 217, 157, 14, 33, 21, 3, 60, 14, 33, 21, + 3, 253, 204, 14, 33, 21, 3, 251, 202, 14, 33, 21, 3, 250, 46, 14, 33, 21, + 3, 73, 14, 33, 21, 3, 246, 74, 14, 33, 21, 3, 245, 67, 14, 33, 21, 3, + 243, 225, 14, 33, 21, 3, 72, 14, 33, 21, 3, 237, 126, 14, 33, 21, 3, 237, + 17, 14, 33, 21, 3, 153, 14, 33, 21, 3, 189, 14, 33, 21, 3, 207, 14, 33, + 21, 3, 74, 14, 33, 21, 3, 230, 59, 14, 33, 21, 3, 228, 163, 14, 33, 21, + 3, 152, 14, 33, 21, 3, 198, 14, 33, 21, 3, 222, 201, 14, 33, 21, 3, 68, + 14, 33, 21, 3, 216, 216, 14, 33, 21, 3, 219, 40, 14, 33, 21, 3, 218, 151, + 14, 33, 21, 3, 218, 90, 14, 33, 21, 3, 217, 157, 14, 33, 30, 6, 60, 14, + 33, 30, 6, 253, 204, 14, 33, 30, 6, 251, 202, 14, 33, 30, 6, 250, 46, 14, + 33, 30, 6, 73, 14, 33, 30, 6, 246, 74, 14, 33, 30, 6, 245, 67, 14, 33, + 30, 6, 243, 225, 14, 33, 30, 6, 72, 14, 33, 30, 6, 237, 126, 14, 33, 30, + 6, 237, 17, 14, 33, 30, 6, 153, 14, 33, 30, 6, 189, 14, 33, 30, 6, 207, + 14, 33, 30, 6, 74, 14, 33, 30, 6, 230, 59, 14, 33, 30, 6, 228, 163, 14, + 33, 30, 6, 152, 14, 33, 30, 6, 198, 14, 33, 30, 6, 222, 201, 14, 33, 30, + 6, 68, 14, 33, 30, 6, 216, 216, 14, 33, 30, 6, 219, 40, 14, 33, 30, 6, + 218, 151, 14, 33, 30, 6, 218, 90, 14, 33, 30, 6, 217, 157, 14, 33, 30, 3, + 60, 14, 33, 30, 3, 253, 204, 14, 33, 30, 3, 251, 202, 14, 33, 30, 3, 250, + 46, 14, 33, 30, 3, 73, 14, 33, 30, 3, 246, 74, 14, 33, 30, 3, 245, 67, + 14, 33, 30, 3, 243, 225, 14, 33, 30, 3, 72, 14, 33, 30, 3, 237, 126, 14, + 33, 30, 3, 237, 17, 14, 33, 30, 3, 153, 14, 33, 30, 3, 189, 14, 33, 30, + 3, 207, 14, 33, 30, 3, 74, 14, 33, 30, 3, 230, 59, 14, 33, 30, 3, 228, + 163, 14, 33, 30, 3, 152, 14, 33, 30, 3, 198, 14, 33, 30, 3, 222, 201, 14, + 33, 30, 3, 68, 14, 33, 30, 3, 216, 216, 14, 33, 30, 3, 219, 40, 14, 33, + 30, 3, 218, 151, 14, 33, 30, 3, 218, 90, 14, 33, 30, 3, 217, 157, 14, 33, + 21, 30, 6, 60, 14, 33, 21, 30, 6, 253, 204, 14, 33, 21, 30, 6, 251, 202, + 14, 33, 21, 30, 6, 250, 46, 14, 33, 21, 30, 6, 73, 14, 33, 21, 30, 6, + 246, 74, 14, 33, 21, 30, 6, 245, 67, 14, 33, 21, 30, 6, 243, 225, 14, 33, + 21, 30, 6, 72, 14, 33, 21, 30, 6, 237, 126, 14, 33, 21, 30, 6, 237, 17, + 14, 33, 21, 30, 6, 153, 14, 33, 21, 30, 6, 189, 14, 33, 21, 30, 6, 207, + 14, 33, 21, 30, 6, 74, 14, 33, 21, 30, 6, 230, 59, 14, 33, 21, 30, 6, + 228, 163, 14, 33, 21, 30, 6, 152, 14, 33, 21, 30, 6, 198, 14, 33, 21, 30, + 6, 222, 201, 14, 33, 21, 30, 6, 68, 14, 33, 21, 30, 6, 216, 216, 14, 33, + 21, 30, 6, 219, 40, 14, 33, 21, 30, 6, 218, 151, 14, 33, 21, 30, 6, 218, + 90, 14, 33, 21, 30, 6, 217, 157, 14, 33, 21, 30, 3, 60, 14, 33, 21, 30, + 3, 253, 204, 14, 33, 21, 30, 3, 251, 202, 14, 33, 21, 30, 3, 250, 46, 14, + 33, 21, 30, 3, 73, 14, 33, 21, 30, 3, 246, 74, 14, 33, 21, 30, 3, 245, + 67, 14, 33, 21, 30, 3, 243, 225, 14, 33, 21, 30, 3, 72, 14, 33, 21, 30, + 3, 237, 126, 14, 33, 21, 30, 3, 237, 17, 14, 33, 21, 30, 3, 153, 14, 33, + 21, 30, 3, 189, 14, 33, 21, 30, 3, 207, 14, 33, 21, 30, 3, 74, 14, 33, + 21, 30, 3, 230, 59, 14, 33, 21, 30, 3, 228, 163, 14, 33, 21, 30, 3, 152, + 14, 33, 21, 30, 3, 198, 14, 33, 21, 30, 3, 222, 201, 14, 33, 21, 30, 3, + 68, 14, 33, 21, 30, 3, 216, 216, 14, 33, 21, 30, 3, 219, 40, 14, 33, 21, + 30, 3, 218, 151, 14, 33, 21, 30, 3, 218, 90, 14, 33, 21, 30, 3, 217, 157, + 14, 211, 6, 60, 14, 211, 6, 253, 204, 14, 211, 6, 251, 202, 14, 211, 6, + 250, 46, 14, 211, 6, 73, 14, 211, 6, 246, 74, 14, 211, 6, 245, 67, 14, + 211, 6, 243, 225, 14, 211, 6, 72, 14, 211, 6, 237, 126, 14, 211, 6, 237, + 17, 14, 211, 6, 153, 14, 211, 6, 189, 14, 211, 6, 207, 14, 211, 6, 74, + 14, 211, 6, 230, 59, 14, 211, 6, 228, 163, 14, 211, 6, 152, 14, 211, 6, + 198, 14, 211, 6, 222, 201, 14, 211, 6, 68, 14, 211, 6, 216, 216, 14, 211, + 6, 219, 40, 14, 211, 6, 218, 151, 14, 211, 6, 218, 90, 14, 211, 6, 217, + 157, 14, 211, 3, 60, 14, 211, 3, 253, 204, 14, 211, 3, 251, 202, 14, 211, + 3, 250, 46, 14, 211, 3, 73, 14, 211, 3, 246, 74, 14, 211, 3, 245, 67, 14, + 211, 3, 243, 225, 14, 211, 3, 72, 14, 211, 3, 237, 126, 14, 211, 3, 237, + 17, 14, 211, 3, 153, 14, 211, 3, 189, 14, 211, 3, 207, 14, 211, 3, 74, + 14, 211, 3, 230, 59, 14, 211, 3, 228, 163, 14, 211, 3, 152, 14, 211, 3, + 198, 14, 211, 3, 222, 201, 14, 211, 3, 68, 14, 211, 3, 216, 216, 14, 211, + 3, 219, 40, 14, 211, 3, 218, 151, 14, 211, 3, 218, 90, 14, 211, 3, 217, + 157, 14, 30, 3, 248, 144, 72, 14, 30, 3, 248, 144, 237, 126, 14, 21, 6, + 254, 146, 14, 21, 6, 252, 102, 14, 21, 6, 244, 231, 14, 21, 6, 249, 62, + 14, 21, 6, 246, 156, 14, 21, 6, 217, 83, 14, 21, 6, 246, 121, 14, 21, 6, + 222, 6, 14, 21, 6, 237, 162, 14, 21, 6, 236, 221, 14, 21, 6, 235, 156, + 14, 21, 6, 233, 99, 14, 21, 6, 231, 144, 14, 21, 6, 218, 130, 14, 21, 6, + 230, 141, 14, 21, 6, 229, 108, 14, 21, 6, 227, 149, 14, 21, 6, 222, 7, + 100, 14, 21, 6, 224, 127, 14, 21, 6, 222, 105, 14, 21, 6, 220, 57, 14, + 21, 6, 229, 129, 14, 21, 6, 251, 31, 14, 21, 6, 228, 212, 14, 21, 6, 230, + 143, 14, 21, 232, 231, 14, 21, 3, 254, 146, 14, 21, 3, 252, 102, 14, 21, + 3, 244, 231, 14, 21, 3, 249, 62, 14, 21, 3, 246, 156, 14, 21, 3, 217, 83, + 14, 21, 3, 246, 121, 14, 21, 3, 222, 6, 14, 21, 3, 237, 162, 14, 21, 3, + 236, 221, 14, 21, 3, 235, 156, 14, 21, 3, 233, 99, 14, 21, 3, 231, 144, + 14, 21, 3, 218, 130, 14, 21, 3, 230, 141, 14, 21, 3, 229, 108, 14, 21, 3, + 227, 149, 14, 21, 3, 39, 224, 127, 14, 21, 3, 224, 127, 14, 21, 3, 222, + 105, 14, 21, 3, 220, 57, 14, 21, 3, 229, 129, 14, 21, 3, 251, 31, 14, 21, + 3, 228, 212, 14, 21, 3, 230, 143, 14, 21, 229, 223, 248, 246, 14, 21, + 246, 157, 100, 14, 21, 222, 7, 100, 14, 21, 236, 222, 100, 14, 21, 229, + 130, 100, 14, 21, 227, 150, 100, 14, 21, 229, 109, 100, 14, 30, 6, 254, + 146, 14, 30, 6, 252, 102, 14, 30, 6, 244, 231, 14, 30, 6, 249, 62, 14, + 30, 6, 246, 156, 14, 30, 6, 217, 83, 14, 30, 6, 246, 121, 14, 30, 6, 222, + 6, 14, 30, 6, 237, 162, 14, 30, 6, 236, 221, 14, 30, 6, 235, 156, 14, 30, + 6, 233, 99, 14, 30, 6, 231, 144, 14, 30, 6, 218, 130, 14, 30, 6, 230, + 141, 14, 30, 6, 229, 108, 14, 30, 6, 227, 149, 14, 30, 6, 222, 7, 100, + 14, 30, 6, 224, 127, 14, 30, 6, 222, 105, 14, 30, 6, 220, 57, 14, 30, 6, + 229, 129, 14, 30, 6, 251, 31, 14, 30, 6, 228, 212, 14, 30, 6, 230, 143, + 14, 30, 232, 231, 14, 30, 3, 254, 146, 14, 30, 3, 252, 102, 14, 30, 3, + 244, 231, 14, 30, 3, 249, 62, 14, 30, 3, 246, 156, 14, 30, 3, 217, 83, + 14, 30, 3, 246, 121, 14, 30, 3, 222, 6, 14, 30, 3, 237, 162, 14, 30, 3, + 236, 221, 14, 30, 3, 235, 156, 14, 30, 3, 233, 99, 14, 30, 3, 231, 144, + 14, 30, 3, 218, 130, 14, 30, 3, 230, 141, 14, 30, 3, 229, 108, 14, 30, 3, + 227, 149, 14, 30, 3, 39, 224, 127, 14, 30, 3, 224, 127, 14, 30, 3, 222, + 105, 14, 30, 3, 220, 57, 14, 30, 3, 229, 129, 14, 30, 3, 251, 31, 14, 30, + 3, 228, 212, 14, 30, 3, 230, 143, 14, 30, 229, 223, 248, 246, 14, 30, + 246, 157, 100, 14, 30, 222, 7, 100, 14, 30, 236, 222, 100, 14, 30, 229, + 130, 100, 14, 30, 227, 150, 100, 14, 30, 229, 109, 100, 14, 21, 30, 6, + 254, 146, 14, 21, 30, 6, 252, 102, 14, 21, 30, 6, 244, 231, 14, 21, 30, + 6, 249, 62, 14, 21, 30, 6, 246, 156, 14, 21, 30, 6, 217, 83, 14, 21, 30, + 6, 246, 121, 14, 21, 30, 6, 222, 6, 14, 21, 30, 6, 237, 162, 14, 21, 30, + 6, 236, 221, 14, 21, 30, 6, 235, 156, 14, 21, 30, 6, 233, 99, 14, 21, 30, + 6, 231, 144, 14, 21, 30, 6, 218, 130, 14, 21, 30, 6, 230, 141, 14, 21, + 30, 6, 229, 108, 14, 21, 30, 6, 227, 149, 14, 21, 30, 6, 222, 7, 100, 14, + 21, 30, 6, 224, 127, 14, 21, 30, 6, 222, 105, 14, 21, 30, 6, 220, 57, 14, + 21, 30, 6, 229, 129, 14, 21, 30, 6, 251, 31, 14, 21, 30, 6, 228, 212, 14, + 21, 30, 6, 230, 143, 14, 21, 30, 232, 231, 14, 21, 30, 3, 254, 146, 14, + 21, 30, 3, 252, 102, 14, 21, 30, 3, 244, 231, 14, 21, 30, 3, 249, 62, 14, + 21, 30, 3, 246, 156, 14, 21, 30, 3, 217, 83, 14, 21, 30, 3, 246, 121, 14, + 21, 30, 3, 222, 6, 14, 21, 30, 3, 237, 162, 14, 21, 30, 3, 236, 221, 14, + 21, 30, 3, 235, 156, 14, 21, 30, 3, 233, 99, 14, 21, 30, 3, 231, 144, 14, + 21, 30, 3, 218, 130, 14, 21, 30, 3, 230, 141, 14, 21, 30, 3, 229, 108, + 14, 21, 30, 3, 227, 149, 14, 21, 30, 3, 39, 224, 127, 14, 21, 30, 3, 224, + 127, 14, 21, 30, 3, 222, 105, 14, 21, 30, 3, 220, 57, 14, 21, 30, 3, 229, + 129, 14, 21, 30, 3, 251, 31, 14, 21, 30, 3, 228, 212, 14, 21, 30, 3, 230, + 143, 14, 21, 30, 229, 223, 248, 246, 14, 21, 30, 246, 157, 100, 14, 21, + 30, 222, 7, 100, 14, 21, 30, 236, 222, 100, 14, 21, 30, 229, 130, 100, + 14, 21, 30, 227, 150, 100, 14, 21, 30, 229, 109, 100, 14, 33, 21, 6, 254, + 146, 14, 33, 21, 6, 252, 102, 14, 33, 21, 6, 244, 231, 14, 33, 21, 6, + 249, 62, 14, 33, 21, 6, 246, 156, 14, 33, 21, 6, 217, 83, 14, 33, 21, 6, + 246, 121, 14, 33, 21, 6, 222, 6, 14, 33, 21, 6, 237, 162, 14, 33, 21, 6, + 236, 221, 14, 33, 21, 6, 235, 156, 14, 33, 21, 6, 233, 99, 14, 33, 21, 6, + 231, 144, 14, 33, 21, 6, 218, 130, 14, 33, 21, 6, 230, 141, 14, 33, 21, + 6, 229, 108, 14, 33, 21, 6, 227, 149, 14, 33, 21, 6, 222, 7, 100, 14, 33, + 21, 6, 224, 127, 14, 33, 21, 6, 222, 105, 14, 33, 21, 6, 220, 57, 14, 33, + 21, 6, 229, 129, 14, 33, 21, 6, 251, 31, 14, 33, 21, 6, 228, 212, 14, 33, + 21, 6, 230, 143, 14, 33, 21, 232, 231, 14, 33, 21, 3, 254, 146, 14, 33, + 21, 3, 252, 102, 14, 33, 21, 3, 244, 231, 14, 33, 21, 3, 249, 62, 14, 33, + 21, 3, 246, 156, 14, 33, 21, 3, 217, 83, 14, 33, 21, 3, 246, 121, 14, 33, + 21, 3, 222, 6, 14, 33, 21, 3, 237, 162, 14, 33, 21, 3, 236, 221, 14, 33, + 21, 3, 235, 156, 14, 33, 21, 3, 233, 99, 14, 33, 21, 3, 231, 144, 14, 33, + 21, 3, 218, 130, 14, 33, 21, 3, 230, 141, 14, 33, 21, 3, 229, 108, 14, + 33, 21, 3, 227, 149, 14, 33, 21, 3, 39, 224, 127, 14, 33, 21, 3, 224, + 127, 14, 33, 21, 3, 222, 105, 14, 33, 21, 3, 220, 57, 14, 33, 21, 3, 229, + 129, 14, 33, 21, 3, 251, 31, 14, 33, 21, 3, 228, 212, 14, 33, 21, 3, 230, + 143, 14, 33, 21, 229, 223, 248, 246, 14, 33, 21, 246, 157, 100, 14, 33, + 21, 222, 7, 100, 14, 33, 21, 236, 222, 100, 14, 33, 21, 229, 130, 100, + 14, 33, 21, 227, 150, 100, 14, 33, 21, 229, 109, 100, 14, 33, 21, 30, 6, + 254, 146, 14, 33, 21, 30, 6, 252, 102, 14, 33, 21, 30, 6, 244, 231, 14, + 33, 21, 30, 6, 249, 62, 14, 33, 21, 30, 6, 246, 156, 14, 33, 21, 30, 6, + 217, 83, 14, 33, 21, 30, 6, 246, 121, 14, 33, 21, 30, 6, 222, 6, 14, 33, + 21, 30, 6, 237, 162, 14, 33, 21, 30, 6, 236, 221, 14, 33, 21, 30, 6, 235, + 156, 14, 33, 21, 30, 6, 233, 99, 14, 33, 21, 30, 6, 231, 144, 14, 33, 21, + 30, 6, 218, 130, 14, 33, 21, 30, 6, 230, 141, 14, 33, 21, 30, 6, 229, + 108, 14, 33, 21, 30, 6, 227, 149, 14, 33, 21, 30, 6, 222, 7, 100, 14, 33, + 21, 30, 6, 224, 127, 14, 33, 21, 30, 6, 222, 105, 14, 33, 21, 30, 6, 220, + 57, 14, 33, 21, 30, 6, 229, 129, 14, 33, 21, 30, 6, 251, 31, 14, 33, 21, + 30, 6, 228, 212, 14, 33, 21, 30, 6, 230, 143, 14, 33, 21, 30, 232, 231, + 14, 33, 21, 30, 3, 254, 146, 14, 33, 21, 30, 3, 252, 102, 14, 33, 21, 30, + 3, 244, 231, 14, 33, 21, 30, 3, 249, 62, 14, 33, 21, 30, 3, 246, 156, 14, + 33, 21, 30, 3, 217, 83, 14, 33, 21, 30, 3, 246, 121, 14, 33, 21, 30, 3, + 222, 6, 14, 33, 21, 30, 3, 237, 162, 14, 33, 21, 30, 3, 236, 221, 14, 33, + 21, 30, 3, 235, 156, 14, 33, 21, 30, 3, 233, 99, 14, 33, 21, 30, 3, 231, + 144, 14, 33, 21, 30, 3, 218, 130, 14, 33, 21, 30, 3, 230, 141, 14, 33, + 21, 30, 3, 229, 108, 14, 33, 21, 30, 3, 227, 149, 14, 33, 21, 30, 3, 39, + 224, 127, 14, 33, 21, 30, 3, 224, 127, 14, 33, 21, 30, 3, 222, 105, 14, + 33, 21, 30, 3, 220, 57, 14, 33, 21, 30, 3, 229, 129, 14, 33, 21, 30, 3, + 251, 31, 14, 33, 21, 30, 3, 228, 212, 14, 33, 21, 30, 3, 230, 143, 14, + 33, 21, 30, 229, 223, 248, 246, 14, 33, 21, 30, 246, 157, 100, 14, 33, + 21, 30, 222, 7, 100, 14, 33, 21, 30, 236, 222, 100, 14, 33, 21, 30, 229, + 130, 100, 14, 33, 21, 30, 227, 150, 100, 14, 33, 21, 30, 229, 109, 100, + 14, 21, 6, 248, 240, 14, 21, 3, 248, 240, 14, 21, 20, 217, 84, 14, 21, + 20, 107, 14, 21, 20, 103, 14, 21, 20, 160, 14, 21, 20, 154, 14, 21, 20, + 174, 14, 21, 20, 182, 14, 21, 20, 191, 14, 21, 20, 185, 14, 21, 20, 190, + 14, 173, 20, 217, 84, 14, 173, 20, 107, 14, 173, 20, 103, 14, 173, 20, + 160, 14, 173, 20, 154, 14, 173, 20, 174, 14, 173, 20, 182, 14, 173, 20, + 191, 14, 173, 20, 185, 14, 173, 20, 190, 14, 33, 20, 217, 84, 14, 33, 20, + 107, 14, 33, 20, 103, 14, 33, 20, 160, 14, 33, 20, 154, 14, 33, 20, 174, + 14, 33, 20, 182, 14, 33, 20, 191, 14, 33, 20, 185, 14, 33, 20, 190, 14, + 33, 21, 20, 217, 84, 14, 33, 21, 20, 107, 14, 33, 21, 20, 103, 14, 33, + 21, 20, 160, 14, 33, 21, 20, 154, 14, 33, 21, 20, 174, 14, 33, 21, 20, + 182, 14, 33, 21, 20, 191, 14, 33, 21, 20, 185, 14, 33, 21, 20, 190, 14, + 211, 20, 217, 84, 14, 211, 20, 107, 14, 211, 20, 103, 14, 211, 20, 160, + 14, 211, 20, 154, 14, 211, 20, 174, 14, 211, 20, 182, 14, 211, 20, 191, + 14, 211, 20, 185, 14, 211, 20, 190, 234, 101, 81, 247, 5, 218, 194, 234, + 101, 81, 224, 6, 218, 194, 234, 101, 81, 218, 217, 218, 194, 234, 101, + 81, 231, 187, 218, 194, 234, 101, 81, 227, 203, 247, 123, 234, 101, 81, + 244, 27, 247, 123, 234, 101, 81, 67, 247, 123, 234, 101, 81, 131, 117, + 251, 54, 234, 101, 81, 124, 117, 251, 54, 234, 101, 81, 148, 117, 251, + 54, 234, 101, 81, 245, 116, 117, 251, 54, 234, 101, 81, 245, 170, 117, + 251, 54, 234, 101, 81, 224, 82, 117, 251, 54, 234, 101, 81, 225, 43, 117, + 251, 54, 234, 101, 81, 246, 235, 117, 251, 54, 234, 101, 81, 232, 31, + 117, 251, 54, 234, 101, 81, 131, 117, 252, 210, 234, 101, 81, 124, 117, + 252, 210, 234, 101, 81, 148, 117, 252, 210, 234, 101, 81, 245, 116, 117, + 252, 210, 234, 101, 81, 245, 170, 117, 252, 210, 234, 101, 81, 224, 82, + 117, 252, 210, 234, 101, 81, 225, 43, 117, 252, 210, 234, 101, 81, 246, + 235, 117, 252, 210, 234, 101, 81, 232, 31, 117, 252, 210, 234, 101, 81, + 131, 117, 250, 220, 234, 101, 81, 124, 117, 250, 220, 234, 101, 81, 148, + 117, 250, 220, 234, 101, 81, 245, 116, 117, 250, 220, 234, 101, 81, 245, + 170, 117, 250, 220, 234, 101, 81, 224, 82, 117, 250, 220, 234, 101, 81, + 225, 43, 117, 250, 220, 234, 101, 81, 246, 235, 117, 250, 220, 234, 101, + 81, 232, 31, 117, 250, 220, 234, 101, 81, 229, 45, 234, 101, 81, 230, + 104, 234, 101, 81, 252, 211, 234, 101, 81, 250, 254, 234, 101, 81, 223, + 232, 234, 101, 81, 223, 70, 234, 101, 81, 253, 223, 234, 101, 81, 218, + 190, 234, 101, 81, 237, 53, 234, 101, 81, 252, 233, 119, 81, 186, 252, + 233, 119, 81, 242, 240, 119, 81, 242, 239, 119, 81, 242, 238, 119, 81, + 242, 237, 119, 81, 242, 236, 119, 81, 242, 235, 119, 81, 242, 234, 119, + 81, 242, 233, 119, 81, 242, 232, 119, 81, 242, 231, 119, 81, 242, 230, + 119, 81, 242, 229, 119, 81, 242, 228, 119, 81, 242, 227, 119, 81, 242, + 226, 119, 81, 242, 225, 119, 81, 242, 224, 119, 81, 242, 223, 119, 81, + 242, 222, 119, 81, 242, 221, 119, 81, 242, 220, 119, 81, 242, 219, 119, + 81, 242, 218, 119, 81, 242, 217, 119, 81, 242, 216, 119, 81, 242, 215, + 119, 81, 242, 214, 119, 81, 242, 213, 119, 81, 242, 212, 119, 81, 242, + 211, 119, 81, 242, 210, 119, 81, 242, 209, 119, 81, 242, 208, 119, 81, + 242, 207, 119, 81, 242, 206, 119, 81, 242, 205, 119, 81, 242, 204, 119, + 81, 242, 203, 119, 81, 242, 202, 119, 81, 242, 201, 119, 81, 242, 200, + 119, 81, 242, 199, 119, 81, 242, 198, 119, 81, 242, 197, 119, 81, 242, + 196, 119, 81, 242, 195, 119, 81, 242, 194, 119, 81, 242, 193, 119, 81, + 242, 192, 119, 81, 69, 252, 233, 119, 81, 219, 151, 119, 81, 219, 150, + 119, 81, 219, 149, 119, 81, 219, 148, 119, 81, 219, 147, 119, 81, 219, + 146, 119, 81, 219, 145, 119, 81, 219, 144, 119, 81, 219, 143, 119, 81, + 219, 142, 119, 81, 219, 141, 119, 81, 219, 140, 119, 81, 219, 139, 119, + 81, 219, 138, 119, 81, 219, 137, 119, 81, 219, 136, 119, 81, 219, 135, + 119, 81, 219, 134, 119, 81, 219, 133, 119, 81, 219, 132, 119, 81, 219, + 131, 119, 81, 219, 130, 119, 81, 219, 129, 119, 81, 219, 128, 119, 81, + 219, 127, 119, 81, 219, 126, 119, 81, 219, 125, 119, 81, 219, 124, 119, + 81, 219, 123, 119, 81, 219, 122, 119, 81, 219, 121, 119, 81, 219, 120, + 119, 81, 219, 119, 119, 81, 219, 118, 119, 81, 219, 117, 119, 81, 219, + 116, 119, 81, 219, 115, 119, 81, 219, 114, 119, 81, 219, 113, 119, 81, + 219, 112, 119, 81, 219, 111, 119, 81, 219, 110, 119, 81, 219, 109, 119, + 81, 219, 108, 119, 81, 219, 107, 119, 81, 219, 106, 119, 81, 219, 105, + 119, 81, 219, 104, 119, 81, 219, 103, 20, 217, 85, 245, 90, 223, 136, 20, + 217, 85, 250, 168, 20, 131, 250, 168, 20, 124, 250, 168, 20, 148, 250, + 168, 20, 245, 116, 250, 168, 20, 245, 170, 250, 168, 20, 224, 82, 250, + 168, 20, 225, 43, 250, 168, 20, 246, 235, 250, 168, 20, 232, 31, 250, + 168, 82, 7, 6, 1, 60, 82, 7, 6, 1, 253, 204, 82, 7, 6, 1, 251, 202, 82, + 7, 6, 1, 250, 46, 82, 7, 6, 1, 73, 82, 7, 6, 1, 246, 74, 82, 7, 6, 1, + 245, 67, 82, 7, 6, 1, 243, 225, 82, 7, 6, 1, 72, 82, 7, 6, 1, 237, 126, + 82, 7, 6, 1, 237, 17, 82, 7, 6, 1, 153, 82, 7, 6, 1, 189, 82, 7, 6, 1, + 207, 82, 7, 6, 1, 74, 82, 7, 6, 1, 230, 59, 82, 7, 6, 1, 228, 163, 82, 7, + 6, 1, 152, 82, 7, 6, 1, 198, 82, 7, 6, 1, 222, 201, 82, 7, 6, 1, 68, 82, + 7, 6, 1, 216, 216, 82, 7, 6, 1, 219, 40, 82, 7, 6, 1, 218, 151, 82, 7, 6, + 1, 218, 90, 82, 7, 6, 1, 217, 157, 221, 114, 224, 236, 252, 17, 7, 6, 1, + 198, 34, 30, 7, 6, 1, 251, 202, 34, 30, 7, 6, 1, 152, 34, 251, 100, 34, + 218, 153, 204, 7, 6, 1, 253, 204, 204, 7, 6, 1, 207, 204, 7, 6, 1, 230, + 59, 204, 7, 6, 1, 198, 204, 7, 6, 1, 219, 40, 204, 242, 154, 204, 233, + 52, 204, 226, 96, 204, 223, 219, 204, 229, 4, 232, 136, 34, 7, 6, 1, 243, + 225, 232, 136, 34, 7, 6, 1, 230, 59, 232, 136, 204, 7, 6, 1, 237, 126, + 232, 136, 204, 7, 6, 1, 153, 232, 136, 204, 7, 6, 1, 189, 232, 136, 204, + 7, 6, 1, 230, 59, 250, 98, 232, 136, 204, 7, 6, 1, 230, 59, 232, 136, + 204, 242, 67, 232, 136, 204, 187, 232, 136, 204, 226, 177, 40, 248, 184, + 40, 136, 243, 0, 204, 9, 220, 76, 240, 8, 204, 9, 220, 76, 240, 12, 204, + 9, 220, 76, 240, 18, 204, 52, 249, 92, 204, 9, 220, 76, 240, 24, 204, 9, + 220, 76, 240, 14, 204, 9, 220, 76, 239, 248, 204, 9, 220, 76, 240, 13, + 204, 9, 220, 76, 240, 23, 204, 9, 220, 76, 240, 0, 204, 9, 220, 76, 239, + 252, 204, 9, 220, 76, 240, 2, 204, 9, 220, 76, 240, 20, 204, 9, 220, 76, + 240, 9, 204, 9, 220, 76, 240, 22, 204, 9, 220, 76, 240, 1, 204, 9, 220, + 76, 240, 21, 204, 9, 220, 76, 239, 249, 204, 9, 220, 76, 239, 251, 204, + 9, 220, 76, 239, 247, 204, 9, 220, 76, 240, 15, 204, 9, 220, 76, 240, 16, + 204, 9, 220, 76, 239, 254, 204, 9, 220, 76, 240, 6, 204, 9, 220, 76, 240, + 4, 204, 9, 220, 76, 240, 27, 204, 9, 220, 76, 240, 26, 204, 9, 220, 76, + 239, 245, 204, 9, 220, 76, 240, 10, 204, 9, 220, 76, 240, 25, 204, 9, + 220, 76, 240, 17, 204, 9, 220, 76, 240, 5, 204, 9, 220, 76, 239, 246, + 204, 9, 220, 76, 240, 7, 221, 114, 224, 236, 252, 17, 9, 220, 76, 239, + 255, 221, 114, 224, 236, 252, 17, 9, 220, 76, 240, 26, 221, 114, 224, + 236, 252, 17, 9, 220, 76, 240, 24, 221, 114, 224, 236, 252, 17, 9, 220, + 76, 240, 11, 221, 114, 224, 236, 252, 17, 9, 220, 76, 239, 253, 221, 114, + 224, 236, 252, 17, 9, 220, 76, 240, 7, 221, 114, 224, 236, 252, 17, 9, + 220, 76, 239, 250, 221, 114, 224, 236, 252, 17, 9, 220, 76, 240, 19, 221, + 114, 224, 236, 252, 17, 9, 220, 76, 240, 3, 9, 13, 242, 57, 9, 13, 242, + 56, 9, 13, 242, 55, 9, 13, 242, 54, 9, 13, 242, 53, 9, 13, 242, 52, 9, + 13, 242, 51, 9, 13, 242, 50, 9, 13, 242, 49, 9, 13, 242, 48, 9, 13, 242, + 47, 9, 13, 242, 46, 9, 13, 242, 45, 9, 13, 242, 44, 9, 13, 242, 43, 9, + 13, 242, 42, 9, 13, 242, 41, 9, 13, 242, 40, 9, 13, 242, 39, 9, 13, 242, + 38, 9, 13, 242, 37, 9, 13, 242, 36, 9, 13, 242, 35, 9, 13, 242, 34, 9, + 13, 242, 33, 9, 13, 242, 32, 9, 13, 242, 31, 9, 13, 242, 30, 9, 13, 242, + 29, 9, 13, 242, 28, 9, 13, 242, 27, 9, 13, 242, 26, 9, 13, 242, 25, 9, + 13, 242, 24, 9, 13, 242, 23, 9, 13, 242, 22, 9, 13, 242, 21, 9, 13, 242, + 20, 9, 13, 242, 19, 9, 13, 242, 18, 9, 13, 242, 17, 9, 13, 242, 16, 9, + 13, 242, 15, 9, 13, 242, 14, 9, 13, 242, 13, 9, 13, 242, 12, 9, 13, 242, + 11, 9, 13, 242, 10, 9, 13, 242, 9, 9, 13, 242, 8, 9, 13, 242, 7, 9, 13, + 242, 6, 9, 13, 242, 5, 9, 13, 242, 4, 9, 13, 242, 3, 9, 13, 242, 2, 9, + 13, 242, 1, 9, 13, 242, 0, 9, 13, 241, 255, 9, 13, 241, 254, 9, 13, 241, + 253, 9, 13, 241, 252, 9, 13, 241, 251, 9, 13, 241, 250, 9, 13, 241, 249, + 9, 13, 241, 248, 9, 13, 241, 247, 9, 13, 241, 246, 9, 13, 241, 245, 9, + 13, 241, 244, 9, 13, 241, 243, 9, 13, 241, 242, 9, 13, 241, 241, 9, 13, + 241, 240, 9, 13, 241, 239, 9, 13, 241, 238, 9, 13, 241, 237, 9, 13, 241, + 236, 9, 13, 241, 235, 9, 13, 241, 234, 9, 13, 241, 233, 9, 13, 241, 232, + 9, 13, 241, 231, 9, 13, 241, 230, 9, 13, 241, 229, 9, 13, 241, 228, 9, + 13, 241, 227, 9, 13, 241, 226, 9, 13, 241, 225, 9, 13, 241, 224, 9, 13, + 241, 223, 9, 13, 241, 222, 9, 13, 241, 221, 9, 13, 241, 220, 9, 13, 241, + 219, 9, 13, 241, 218, 9, 13, 241, 217, 9, 13, 241, 216, 9, 13, 241, 215, + 9, 13, 241, 214, 9, 13, 241, 213, 9, 13, 241, 212, 9, 13, 241, 211, 9, + 13, 241, 210, 9, 13, 241, 209, 9, 13, 241, 208, 9, 13, 241, 207, 9, 13, + 241, 206, 9, 13, 241, 205, 9, 13, 241, 204, 9, 13, 241, 203, 9, 13, 241, + 202, 9, 13, 241, 201, 9, 13, 241, 200, 9, 13, 241, 199, 9, 13, 241, 198, + 9, 13, 241, 197, 9, 13, 241, 196, 9, 13, 241, 195, 9, 13, 241, 194, 9, + 13, 241, 193, 9, 13, 241, 192, 9, 13, 241, 191, 9, 13, 241, 190, 9, 13, + 241, 189, 9, 13, 241, 188, 9, 13, 241, 187, 9, 13, 241, 186, 9, 13, 241, + 185, 9, 13, 241, 184, 9, 13, 241, 183, 9, 13, 241, 182, 9, 13, 241, 181, + 9, 13, 241, 180, 9, 13, 241, 179, 9, 13, 241, 178, 9, 13, 241, 177, 9, + 13, 241, 176, 9, 13, 241, 175, 9, 13, 241, 174, 9, 13, 241, 173, 9, 13, + 241, 172, 9, 13, 241, 171, 9, 13, 241, 170, 9, 13, 241, 169, 9, 13, 241, + 168, 9, 13, 241, 167, 9, 13, 241, 166, 9, 13, 241, 165, 9, 13, 241, 164, + 9, 13, 241, 163, 9, 13, 241, 162, 9, 13, 241, 161, 9, 13, 241, 160, 9, + 13, 241, 159, 9, 13, 241, 158, 9, 13, 241, 157, 9, 13, 241, 156, 9, 13, + 241, 155, 9, 13, 241, 154, 9, 13, 241, 153, 9, 13, 241, 152, 9, 13, 241, + 151, 9, 13, 241, 150, 9, 13, 241, 149, 9, 13, 241, 148, 9, 13, 241, 147, + 9, 13, 241, 146, 9, 13, 241, 145, 9, 13, 241, 144, 9, 13, 241, 143, 9, + 13, 241, 142, 9, 13, 241, 141, 9, 13, 241, 140, 9, 13, 241, 139, 9, 13, + 241, 138, 9, 13, 241, 137, 9, 13, 241, 136, 9, 13, 241, 135, 9, 13, 241, + 134, 9, 13, 241, 133, 9, 13, 241, 132, 9, 13, 241, 131, 9, 13, 241, 130, + 9, 13, 241, 129, 9, 13, 241, 128, 9, 13, 241, 127, 9, 13, 241, 126, 9, + 13, 241, 125, 9, 13, 241, 124, 9, 13, 241, 123, 9, 13, 241, 122, 9, 13, + 241, 121, 9, 13, 241, 120, 9, 13, 241, 119, 9, 13, 241, 118, 9, 13, 241, + 117, 9, 13, 241, 116, 9, 13, 241, 115, 9, 13, 241, 114, 9, 13, 241, 113, + 9, 13, 241, 112, 9, 13, 241, 111, 9, 13, 241, 110, 9, 13, 241, 109, 9, + 13, 241, 108, 9, 13, 241, 107, 9, 13, 241, 106, 9, 13, 241, 105, 9, 13, + 241, 104, 9, 13, 241, 103, 9, 13, 241, 102, 9, 13, 241, 101, 9, 13, 241, + 100, 9, 13, 241, 99, 9, 13, 241, 98, 9, 13, 241, 97, 9, 13, 241, 96, 9, + 13, 241, 95, 9, 13, 241, 94, 9, 13, 241, 93, 9, 13, 241, 92, 9, 13, 241, + 91, 9, 13, 241, 90, 9, 13, 241, 89, 9, 13, 241, 88, 9, 13, 241, 87, 9, + 13, 241, 86, 9, 13, 241, 85, 9, 13, 241, 84, 9, 13, 241, 83, 9, 13, 241, + 82, 9, 13, 241, 81, 9, 13, 241, 80, 9, 13, 241, 79, 9, 13, 241, 78, 9, + 13, 241, 77, 9, 13, 241, 76, 9, 13, 241, 75, 9, 13, 241, 74, 9, 13, 241, + 73, 9, 13, 241, 72, 9, 13, 241, 71, 9, 13, 241, 70, 9, 13, 241, 69, 9, + 13, 241, 68, 9, 13, 241, 67, 9, 13, 241, 66, 9, 13, 241, 65, 9, 13, 241, + 64, 9, 13, 241, 63, 9, 13, 241, 62, 9, 13, 241, 61, 9, 13, 241, 60, 9, + 13, 241, 59, 9, 13, 241, 58, 9, 13, 241, 57, 9, 13, 241, 56, 9, 13, 241, + 55, 9, 13, 241, 54, 9, 13, 241, 53, 9, 13, 241, 52, 9, 13, 241, 51, 9, + 13, 241, 50, 9, 13, 241, 49, 9, 13, 241, 48, 9, 13, 241, 47, 9, 13, 241, + 46, 9, 13, 241, 45, 9, 13, 241, 44, 9, 13, 241, 43, 9, 13, 241, 42, 9, + 13, 241, 41, 9, 13, 241, 40, 9, 13, 241, 39, 9, 13, 241, 38, 9, 13, 241, + 37, 9, 13, 241, 36, 9, 13, 241, 35, 9, 13, 241, 34, 9, 13, 241, 33, 9, + 13, 241, 32, 9, 13, 241, 31, 9, 13, 241, 30, 9, 13, 241, 29, 9, 13, 241, + 28, 9, 13, 241, 27, 9, 13, 241, 26, 9, 13, 241, 25, 9, 13, 241, 24, 9, + 13, 241, 23, 9, 13, 241, 22, 9, 13, 241, 21, 9, 13, 241, 20, 9, 13, 241, + 19, 9, 13, 241, 18, 9, 13, 241, 17, 9, 13, 241, 16, 9, 13, 241, 15, 9, + 13, 241, 14, 9, 13, 241, 13, 9, 13, 241, 12, 9, 13, 241, 11, 9, 13, 241, + 10, 9, 13, 241, 9, 9, 13, 241, 8, 9, 13, 241, 7, 9, 13, 241, 6, 9, 13, + 241, 5, 9, 13, 241, 4, 9, 13, 241, 3, 9, 13, 241, 2, 9, 13, 241, 1, 9, + 13, 241, 0, 9, 13, 240, 255, 9, 13, 240, 254, 9, 13, 240, 253, 9, 13, + 240, 252, 9, 13, 240, 251, 9, 13, 240, 250, 9, 13, 240, 249, 9, 13, 240, + 248, 9, 13, 240, 247, 9, 13, 240, 246, 9, 13, 240, 245, 9, 13, 240, 244, + 9, 13, 240, 243, 9, 13, 240, 242, 9, 13, 240, 241, 9, 13, 240, 240, 9, + 13, 240, 239, 9, 13, 240, 238, 9, 13, 240, 237, 9, 13, 240, 236, 9, 13, + 240, 235, 9, 13, 240, 234, 9, 13, 240, 233, 9, 13, 240, 232, 9, 13, 240, + 231, 9, 13, 240, 230, 9, 13, 240, 229, 9, 13, 240, 228, 9, 13, 240, 227, + 9, 13, 240, 226, 9, 13, 240, 225, 9, 13, 240, 224, 9, 13, 240, 223, 9, + 13, 240, 222, 9, 13, 240, 221, 9, 13, 240, 220, 9, 13, 240, 219, 9, 13, + 240, 218, 9, 13, 240, 217, 9, 13, 240, 216, 9, 13, 240, 215, 9, 13, 240, + 214, 9, 13, 240, 213, 9, 13, 240, 212, 9, 13, 240, 211, 9, 13, 240, 210, + 9, 13, 240, 209, 9, 13, 240, 208, 9, 13, 240, 207, 9, 13, 240, 206, 9, + 13, 240, 205, 9, 13, 240, 204, 9, 13, 240, 203, 9, 13, 240, 202, 9, 13, + 240, 201, 9, 13, 240, 200, 9, 13, 240, 199, 9, 13, 240, 198, 9, 13, 240, + 197, 9, 13, 240, 196, 9, 13, 240, 195, 9, 13, 240, 194, 9, 13, 240, 193, + 9, 13, 240, 192, 9, 13, 240, 191, 9, 13, 240, 190, 9, 13, 240, 189, 9, + 13, 240, 188, 9, 13, 240, 187, 9, 13, 240, 186, 9, 13, 240, 185, 9, 13, + 240, 184, 9, 13, 240, 183, 9, 13, 240, 182, 9, 13, 240, 181, 9, 13, 240, + 180, 9, 13, 240, 179, 9, 13, 240, 178, 9, 13, 240, 177, 9, 13, 240, 176, + 9, 13, 240, 175, 9, 13, 240, 174, 9, 13, 240, 173, 9, 13, 240, 172, 9, + 13, 240, 171, 9, 13, 240, 170, 9, 13, 240, 169, 9, 13, 240, 168, 9, 13, + 240, 167, 9, 13, 240, 166, 9, 13, 240, 165, 9, 13, 240, 164, 9, 13, 240, + 163, 9, 13, 240, 162, 9, 13, 240, 161, 9, 13, 240, 160, 9, 13, 240, 159, + 9, 13, 240, 158, 9, 13, 240, 157, 9, 13, 240, 156, 9, 13, 240, 155, 9, + 13, 240, 154, 9, 13, 240, 153, 9, 13, 240, 152, 9, 13, 240, 151, 9, 13, + 240, 150, 9, 13, 240, 149, 9, 13, 240, 148, 9, 13, 240, 147, 9, 13, 240, + 146, 9, 13, 240, 145, 9, 13, 240, 144, 9, 13, 240, 143, 9, 13, 240, 142, + 9, 13, 240, 141, 9, 13, 240, 140, 9, 13, 240, 139, 9, 13, 240, 138, 9, + 13, 240, 137, 9, 13, 240, 136, 9, 13, 240, 135, 9, 13, 240, 134, 9, 13, + 240, 133, 9, 13, 240, 132, 9, 13, 240, 131, 9, 13, 240, 130, 9, 13, 240, + 129, 9, 13, 240, 128, 9, 13, 240, 127, 9, 13, 240, 126, 9, 13, 240, 125, + 9, 13, 240, 124, 9, 13, 240, 123, 9, 13, 240, 122, 9, 13, 240, 121, 9, + 13, 240, 120, 9, 13, 240, 119, 9, 13, 240, 118, 9, 13, 240, 117, 9, 13, + 240, 116, 9, 13, 240, 115, 9, 13, 240, 114, 9, 13, 240, 113, 9, 13, 240, + 112, 9, 13, 240, 111, 9, 13, 240, 110, 9, 13, 240, 109, 9, 13, 240, 108, + 9, 13, 240, 107, 9, 13, 240, 106, 9, 13, 240, 105, 9, 13, 240, 104, 9, + 13, 240, 103, 9, 13, 240, 102, 9, 13, 240, 101, 9, 13, 240, 100, 9, 13, + 240, 99, 9, 13, 240, 98, 9, 13, 240, 97, 9, 13, 240, 96, 9, 13, 240, 95, + 9, 13, 240, 94, 9, 13, 240, 93, 9, 13, 240, 92, 9, 13, 240, 91, 9, 13, + 240, 90, 9, 13, 240, 89, 9, 13, 240, 88, 9, 13, 240, 87, 9, 13, 240, 86, + 9, 13, 240, 85, 9, 13, 240, 84, 9, 13, 240, 83, 9, 13, 240, 82, 9, 13, + 240, 81, 9, 13, 240, 80, 9, 13, 240, 79, 9, 13, 240, 78, 9, 13, 240, 77, + 9, 13, 240, 76, 9, 13, 240, 75, 9, 13, 240, 74, 9, 13, 240, 73, 9, 13, + 240, 72, 9, 13, 240, 71, 9, 13, 240, 70, 9, 13, 240, 69, 9, 13, 240, 68, + 9, 13, 240, 67, 9, 13, 240, 66, 9, 13, 240, 65, 9, 13, 240, 64, 9, 13, + 240, 63, 9, 13, 240, 62, 9, 13, 240, 61, 9, 13, 240, 60, 9, 13, 240, 59, + 9, 13, 240, 58, 9, 13, 240, 57, 9, 13, 240, 56, 9, 13, 240, 55, 9, 13, + 240, 54, 9, 13, 240, 53, 9, 13, 240, 52, 9, 13, 240, 51, 9, 13, 240, 50, + 9, 13, 240, 49, 9, 13, 240, 48, 9, 13, 240, 47, 9, 13, 240, 46, 9, 13, + 240, 45, 9, 13, 240, 44, 9, 13, 240, 43, 9, 13, 240, 42, 9, 13, 240, 41, + 9, 13, 240, 40, 9, 13, 240, 39, 9, 13, 240, 38, 9, 13, 240, 37, 9, 13, + 240, 36, 9, 13, 240, 35, 9, 13, 240, 34, 9, 13, 240, 33, 9, 13, 240, 32, + 9, 13, 240, 31, 9, 13, 240, 30, 9, 13, 240, 29, 9, 13, 240, 28, 235, 148, + 222, 141, 118, 223, 254, 118, 246, 95, 78, 118, 228, 69, 78, 118, 54, 55, + 118, 248, 155, 55, 118, 229, 169, 55, 118, 254, 134, 118, 254, 79, 118, + 42, 229, 229, 118, 45, 229, 229, 118, 253, 251, 118, 88, 55, 118, 250, + 168, 118, 242, 120, 118, 245, 90, 223, 136, 118, 224, 17, 118, 20, 217, + 84, 118, 20, 107, 118, 20, 103, 118, 20, 160, 118, 20, 154, 118, 20, 174, + 118, 20, 182, 118, 20, 191, 118, 20, 185, 118, 20, 190, 118, 250, 175, + 118, 225, 67, 118, 235, 87, 55, 118, 246, 154, 55, 118, 244, 30, 55, 118, + 228, 82, 78, 118, 250, 167, 253, 244, 118, 7, 6, 1, 60, 118, 7, 6, 1, + 253, 204, 118, 7, 6, 1, 251, 202, 118, 7, 6, 1, 250, 46, 118, 7, 6, 1, + 73, 118, 7, 6, 1, 246, 74, 118, 7, 6, 1, 245, 67, 118, 7, 6, 1, 243, 225, + 118, 7, 6, 1, 72, 118, 7, 6, 1, 237, 126, 118, 7, 6, 1, 237, 17, 118, 7, + 6, 1, 153, 118, 7, 6, 1, 189, 118, 7, 6, 1, 207, 118, 7, 6, 1, 74, 118, + 7, 6, 1, 230, 59, 118, 7, 6, 1, 228, 163, 118, 7, 6, 1, 152, 118, 7, 6, + 1, 198, 118, 7, 6, 1, 222, 201, 118, 7, 6, 1, 68, 118, 7, 6, 1, 216, 216, + 118, 7, 6, 1, 219, 40, 118, 7, 6, 1, 218, 151, 118, 7, 6, 1, 218, 90, + 118, 7, 6, 1, 217, 157, 118, 42, 40, 115, 118, 227, 160, 224, 17, 118, + 45, 40, 115, 118, 250, 217, 255, 0, 118, 109, 235, 43, 118, 244, 37, 255, + 0, 118, 7, 3, 1, 60, 118, 7, 3, 1, 253, 204, 118, 7, 3, 1, 251, 202, 118, + 7, 3, 1, 250, 46, 118, 7, 3, 1, 73, 118, 7, 3, 1, 246, 74, 118, 7, 3, 1, + 245, 67, 118, 7, 3, 1, 243, 225, 118, 7, 3, 1, 72, 118, 7, 3, 1, 237, + 126, 118, 7, 3, 1, 237, 17, 118, 7, 3, 1, 153, 118, 7, 3, 1, 189, 118, 7, + 3, 1, 207, 118, 7, 3, 1, 74, 118, 7, 3, 1, 230, 59, 118, 7, 3, 1, 228, + 163, 118, 7, 3, 1, 152, 118, 7, 3, 1, 198, 118, 7, 3, 1, 222, 201, 118, + 7, 3, 1, 68, 118, 7, 3, 1, 216, 216, 118, 7, 3, 1, 219, 40, 118, 7, 3, 1, + 218, 151, 118, 7, 3, 1, 218, 90, 118, 7, 3, 1, 217, 157, 118, 42, 250, + 79, 115, 118, 69, 235, 43, 118, 45, 250, 79, 115, 118, 221, 179, 251, + 153, 222, 141, 41, 225, 251, 41, 225, 240, 41, 225, 229, 41, 225, 217, + 41, 225, 206, 41, 225, 195, 41, 225, 184, 41, 225, 173, 41, 225, 162, 41, + 225, 154, 41, 225, 153, 41, 225, 152, 41, 225, 151, 41, 225, 149, 41, + 225, 148, 41, 225, 147, 41, 225, 146, 41, 225, 145, 41, 225, 144, 41, + 225, 143, 41, 225, 142, 41, 225, 141, 41, 225, 140, 41, 225, 138, 41, + 225, 137, 41, 225, 136, 41, 225, 135, 41, 225, 134, 41, 225, 133, 41, + 225, 132, 41, 225, 131, 41, 225, 130, 41, 225, 129, 41, 225, 127, 41, + 225, 126, 41, 225, 125, 41, 225, 124, 41, 225, 123, 41, 225, 122, 41, + 225, 121, 41, 225, 120, 41, 225, 119, 41, 225, 118, 41, 225, 116, 41, + 225, 115, 41, 225, 114, 41, 225, 113, 41, 225, 112, 41, 225, 111, 41, + 225, 110, 41, 225, 109, 41, 225, 108, 41, 225, 107, 41, 225, 105, 41, + 225, 104, 41, 225, 103, 41, 225, 102, 41, 225, 101, 41, 225, 100, 41, + 225, 99, 41, 225, 98, 41, 225, 97, 41, 225, 96, 41, 225, 94, 41, 225, 93, + 41, 225, 92, 41, 225, 91, 41, 225, 90, 41, 225, 89, 41, 225, 88, 41, 225, + 87, 41, 225, 86, 41, 225, 85, 41, 225, 83, 41, 225, 82, 41, 225, 81, 41, + 225, 80, 41, 225, 79, 41, 225, 78, 41, 225, 77, 41, 225, 76, 41, 225, 75, + 41, 225, 74, 41, 226, 71, 41, 226, 70, 41, 226, 69, 41, 226, 68, 41, 226, + 67, 41, 226, 66, 41, 226, 65, 41, 226, 64, 41, 226, 63, 41, 226, 62, 41, + 226, 60, 41, 226, 59, 41, 226, 58, 41, 226, 57, 41, 226, 56, 41, 226, 55, + 41, 226, 54, 41, 226, 53, 41, 226, 52, 41, 226, 51, 41, 226, 49, 41, 226, + 48, 41, 226, 47, 41, 226, 46, 41, 226, 45, 41, 226, 44, 41, 226, 43, 41, + 226, 42, 41, 226, 41, 41, 226, 40, 41, 226, 38, 41, 226, 37, 41, 226, 36, + 41, 226, 35, 41, 226, 34, 41, 226, 33, 41, 226, 32, 41, 226, 31, 41, 226, + 30, 41, 226, 29, 41, 226, 27, 41, 226, 26, 41, 226, 25, 41, 226, 24, 41, + 226, 23, 41, 226, 22, 41, 226, 21, 41, 226, 20, 41, 226, 19, 41, 226, 18, + 41, 226, 16, 41, 226, 15, 41, 226, 14, 41, 226, 13, 41, 226, 12, 41, 226, + 11, 41, 226, 10, 41, 226, 9, 41, 226, 8, 41, 226, 7, 41, 226, 5, 41, 226, + 4, 41, 226, 3, 41, 226, 2, 41, 226, 1, 41, 226, 0, 41, 225, 255, 41, 225, + 254, 41, 225, 253, 41, 225, 252, 41, 225, 250, 41, 225, 249, 41, 225, + 248, 41, 225, 247, 41, 225, 246, 41, 225, 245, 41, 225, 244, 41, 225, + 243, 41, 225, 242, 41, 225, 241, 41, 225, 239, 41, 225, 238, 41, 225, + 237, 41, 225, 236, 41, 225, 235, 41, 225, 234, 41, 225, 233, 41, 225, + 232, 41, 225, 231, 41, 225, 230, 41, 225, 228, 41, 225, 227, 41, 225, + 226, 41, 225, 225, 41, 225, 224, 41, 225, 223, 41, 225, 222, 41, 225, + 221, 41, 225, 220, 41, 225, 219, 41, 225, 216, 41, 225, 215, 41, 225, + 214, 41, 225, 213, 41, 225, 212, 41, 225, 211, 41, 225, 210, 41, 225, + 209, 41, 225, 208, 41, 225, 207, 41, 225, 205, 41, 225, 204, 41, 225, + 203, 41, 225, 202, 41, 225, 201, 41, 225, 200, 41, 225, 199, 41, 225, + 198, 41, 225, 197, 41, 225, 196, 41, 225, 194, 41, 225, 193, 41, 225, + 192, 41, 225, 191, 41, 225, 190, 41, 225, 189, 41, 225, 188, 41, 225, + 187, 41, 225, 186, 41, 225, 185, 41, 225, 183, 41, 225, 182, 41, 225, + 181, 41, 225, 180, 41, 225, 179, 41, 225, 178, 41, 225, 177, 41, 225, + 176, 41, 225, 175, 41, 225, 174, 41, 225, 172, 41, 225, 171, 41, 225, + 170, 41, 225, 169, 41, 225, 168, 41, 225, 167, 41, 225, 166, 41, 225, + 165, 41, 225, 164, 41, 225, 163, 41, 225, 161, 41, 225, 160, 41, 225, + 159, 41, 225, 158, 41, 225, 157, 41, 225, 156, 41, 225, 155, }; static unsigned char phrasebook_offset1[] = { - 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 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, 16, 52, 53, 54, - 16, 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, 16, 84, 85, 86, 87, 88, - 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 100, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 101, 102, 103, 104, 105, 106, - 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 16, 120, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 121, 122, 123, 124, - 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 16, - 139, 140, 141, 142, 143, 16, 16, 16, 16, 16, 16, 144, 16, 145, 16, 146, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 147, 148, 149, 150, 151, 152, 153, 16, 154, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 155, 156, 157, 158, 159, 16, 160, 16, 161, 162, 163, 164, 165, 166, - 167, 168, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 169, 170, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 171, 172, 173, 174, 175, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 176, - 16, 177, 178, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, + 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, 17, 87, 88, 89, 90, 91, + 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 103, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 104, 105, 106, 107, 108, + 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, + 123, 124, 125, 17, 126, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 127, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 128, 129, + 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, + 144, 145, 17, 146, 147, 148, 149, 150, 17, 17, 17, 17, 17, 17, 151, 17, + 152, 17, 153, 17, 154, 17, 155, 17, 17, 17, 156, 17, 17, 17, 17, 157, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 158, 159, 160, 161, 162, 163, + 164, 17, 165, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 166, 167, 168, 169, 170, 171, 172, 173, + 174, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 175, 176, 177, 178, 179, 17, 180, 17, 181, 182, + 183, 184, 185, 186, 187, 188, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 189, 190, 191, 192, 193, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 194, 195, 196, 197, 198, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 199, 17, 200, 201, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, }; 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, 114, 118, 122, 127, 132, 136, 140, - 144, 148, 153, 158, 162, 166, 171, 175, 179, 184, 189, 194, 199, 202, - 206, 209, 213, 216, 220, 224, 229, 234, 239, 243, 248, 252, 256, 260, - 265, 270, 274, 278, 282, 286, 291, 296, 300, 304, 309, 313, 317, 322, - 327, 332, 337, 341, 344, 348, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 349, 353, 358, - 361, 364, 367, 370, 373, 376, 377, 380, 386, 394, 396, 400, 403, 405, - 408, 411, 414, 417, 421, 424, 427, 431, 433, 436, 442, 450, 457, 464, - 471, 476, 483, 489, 496, 502, 508, 516, 521, 529, 536, 542, 549, 555, - 563, 570, 578, 585, 590, 597, 604, 610, 617, 623, 629, 632, 638, 645, - 651, 658, 664, 671, 676, 682, 689, 695, 702, 708, 714, 722, 727, 735, - 742, 748, 755, 761, 769, 776, 784, 791, 796, 803, 810, 816, 823, 829, - 835, 838, 844, 851, 857, 864, 870, 877, 882, 889, 896, 903, 910, 917, - 924, 931, 938, 945, 953, 961, 969, 977, 985, 993, 1001, 1009, 1016, 1023, - 1030, 1037, 1044, 1051, 1058, 1065, 1072, 1079, 1086, 1093, 1101, 1109, - 1117, 1125, 1133, 1141, 1149, 1157, 1165, 1173, 1180, 1187, 1194, 1201, - 1209, 1217, 1225, 1233, 1241, 1249, 1257, 1263, 1268, 1273, 1281, 1289, - 1297, 1305, 1310, 1317, 1324, 1332, 1340, 1348, 1356, 1366, 1376, 1383, - 1390, 1397, 1404, 1412, 1420, 1428, 1436, 1447, 1452, 1457, 1464, 1471, - 1478, 1485, 1492, 1499, 1504, 1509, 1516, 1523, 1531, 1539, 1547, 1555, - 1562, 1569, 1577, 1585, 1593, 1601, 1609, 1617, 1625, 1633, 1641, 1649, - 1656, 1663, 1669, 1675, 1682, 1689, 1696, 1703, 1711, 1719, 1726, 1733, - 1740, 1747, 1755, 1763, 1771, 1779, 1786, 1793, 1800, 1808, 1816, 1824, - 1832, 1837, 1843, 1849, 1856, 1863, 1868, 1873, 1879, 1886, 1893, 1900, - 1907, 1915, 1923, 1929, 1934, 1939, 1945, 1952, 1959, 1966, 1971, 1976, - 1981, 1988, 1995, 2002, 2009, 2016, 2021, 2029, 2039, 2047, 2054, 2061, - 2066, 2071, 2078, 2085, 2089, 2094, 2099, 2104, 2111, 2120, 2127, 2134, - 2143, 2150, 2157, 2162, 2169, 2176, 2183, 2190, 2197, 2202, 2209, 2216, - 2224, 2229, 2234, 2239, 2249, 2253, 2259, 2265, 2271, 2277, 2285, 2298, - 2306, 2311, 2321, 2326, 2331, 2341, 2346, 2353, 2360, 2368, 2376, 2383, - 2390, 2397, 2404, 2414, 2424, 2433, 2442, 2452, 2462, 2472, 2482, 2487, - 2497, 2507, 2517, 2527, 2535, 2543, 2550, 2557, 2565, 2573, 2581, 2589, - 2596, 2603, 2613, 2623, 2631, 2639, 2647, 2652, 2662, 2667, 2674, 2681, - 2686, 2691, 2699, 2707, 2717, 2727, 2734, 2741, 2749, 2757, 2765, 2773, - 2782, 2791, 2799, 2807, 2816, 2825, 2834, 2843, 2853, 2863, 2871, 2879, - 2888, 2897, 2906, 2915, 2925, 2935, 2943, 2951, 2960, 2969, 2978, 2987, - 2996, 3005, 3010, 3015, 3023, 3031, 3041, 3049, 3054, 3059, 3066, 3073, - 3080, 3087, 3094, 3101, 3111, 3121, 3131, 3141, 3148, 3155, 3165, 3175, - 3183, 3191, 3199, 3207, 3215, 3222, 3229, 3236, 3242, 3249, 3256, 3263, - 3272, 3282, 3292, 3299, 3306, 3312, 3317, 3322, 3328, 3334, 3341, 3348, - 3359, 3369, 3376, 3383, 3390, 3397, 3402, 3407, 3413, 3419, 3425, 3433, - 3441, 3448, 3453, 3458, 3465, 3471, 3478, 3487, 3496, 3505, 3512, 3517, - 3522, 3527, 3534, 3539, 3546, 3553, 3560, 3565, 3570, 3579, 3587, 3596, - 3601, 3606, 3616, 3623, 3631, 3640, 3645, 3651, 3657, 3664, 3669, 3674, - 3684, 3692, 3701, 3709, 3717, 3726, 3731, 3738, 3745, 3750, 3761, 3769, - 3777, 3783, 3792, 3797, 3802, 3809, 3814, 3820, 3826, 3832, 3841, 3849, - 3854, 3862, 3868, 3876, 3884, 3890, 3896, 3902, 3910, 3918, 3923, 3931, - 3937, 3942, 3949, 3957, 3966, 3973, 3980, 3990, 3997, 4004, 4014, 4021, - 4028, 4035, 4041, 4047, 4056, 4068, 4072, 4079, 4084, 4088, 4093, 4101, - 4108, 4113, 4118, 4122, 4127, 4132, 4136, 4141, 4147, 4153, 4159, 4166, - 4171, 4176, 4181, 4186, 4192, 4194, 4199, 4203, 4209, 4215, 4221, 4226, - 4233, 4240, 4246, 4253, 4261, 4269, 4274, 4279, 4283, 4288, 4290, 4292, - 4295, 4297, 4299, 4304, 4309, 4315, 4320, 4324, 4328, 4333, 4341, 4347, - 4352, 4358, 4363, 4369, 4377, 4385, 4389, 4393, 4398, 4404, 4410, 4416, - 4422, 4427, 4435, 4444, 4453, 4457, 4463, 4470, 4477, 4484, 4491, 4495, - 4501, 4506, 4511, 4516, 4521, 4523, 4526, 4529, 4532, 4535, 4537, 4541, - 4545, 4551, 4554, 4559, 4565, 4571, 4574, 4579, 4584, 4588, 4593, 4599, - 4605, 4611, 4616, 4621, 4626, 4629, 4635, 4640, 4645, 4649, 4654, 4660, - 4666, 4669, 4673, 4677, 4681, 4684, 4687, 4692, 4696, 4703, 4707, 4713, - 4717, 4723, 4727, 4731, 4735, 4740, 4745, 4751, 4756, 4763, 4769, 4775, - 4781, 4784, 4788, 4792, 4795, 4799, 4804, 4809, 4813, 4817, 4823, 4827, - 4831, 4836, 4842, 4847, 4852, 4856, 4862, 4867, 4872, 4877, 4882, 4888, - 4891, 4895, 4900, 4905, 4914, 4920, 4925, 4929, 4934, 4938, 4943, 4947, - 4951, 4956, 4959, 4965, 4970, 4975, 4980, 4985, 4990, 4995, 5001, 5007, - 5012, 5017, 5022, 5028, 5033, 5039, 5044, 5049, 5056, 5063, 5066, 5070, - 5077, 0, 0, 5084, 5087, 5095, 5104, 5114, 0, 0, 0, 0, 0, 5118, 5121, - 5126, 5134, 5139, 5147, 5155, 0, 5163, 0, 5171, 5179, 5187, 5198, 5203, - 5208, 5213, 5218, 5223, 5228, 5233, 5238, 5243, 5248, 5253, 5258, 5263, - 5268, 5273, 5278, 0, 5283, 5288, 5293, 5298, 5303, 5308, 5313, 5318, - 5326, 5334, 5342, 5350, 5358, 5366, 5377, 5382, 5387, 5392, 5397, 5402, - 5407, 5412, 5417, 5422, 5427, 5432, 5437, 5442, 5447, 5452, 5457, 5462, - 5468, 5473, 5478, 5483, 5488, 5493, 5498, 5503, 5511, 5519, 5527, 5535, - 5543, 5548, 5552, 5556, 5563, 5573, 5583, 5587, 5591, 5595, 5601, 5608, - 5612, 5617, 5621, 5626, 5630, 5635, 5639, 5644, 5649, 5654, 5659, 5664, - 5669, 5674, 5679, 5684, 5689, 5694, 5699, 5704, 5709, 5714, 5718, 5722, - 5728, 5732, 5737, 5743, 5750, 5755, 5760, 5767, 5772, 5777, 5783, 5791, - 5800, 5810, 5818, 5823, 5828, 5833, 5840, 5845, 5851, 5856, 5861, 5866, - 5871, 5876, 5881, 5889, 5895, 5900, 5904, 5909, 5914, 5919, 5924, 5929, - 5934, 5939, 5943, 5949, 5953, 5958, 5963, 5968, 5972, 5977, 5982, 5987, - 5992, 5996, 6001, 6005, 6010, 6015, 6020, 6025, 6031, 6036, 6042, 6046, - 6051, 6055, 6059, 6064, 6069, 6074, 6079, 6084, 6089, 6094, 6098, 6104, - 6108, 6113, 6118, 6123, 6127, 6132, 6137, 6142, 6147, 6151, 6156, 6160, - 6165, 6170, 6175, 6180, 6186, 6191, 6197, 6201, 6206, 6210, 6218, 6223, - 6228, 6233, 6240, 6245, 6251, 6256, 6261, 6266, 6271, 6276, 6281, 6289, - 6295, 6300, 6305, 6310, 6315, 6320, 6326, 6332, 6339, 6346, 6355, 6364, - 6371, 6378, 6387, 6396, 6401, 6406, 6411, 6416, 6421, 6426, 6431, 6436, - 6447, 6458, 6463, 6468, 6475, 6482, 6490, 6498, 6503, 6508, 6513, 6518, - 6522, 6526, 6530, 6535, 6540, 6544, 6551, 6556, 6566, 6576, 6582, 6588, - 6596, 6604, 6612, 6620, 6627, 6634, 6643, 6652, 6660, 6668, 6676, 6684, - 6691, 6698, 6705, 6712, 6718, 6724, 6730, 6736, 6744, 6752, 6759, 6766, - 6775, 6784, 6790, 6796, 6804, 6812, 6820, 6828, 6834, 6840, 6848, 6856, - 6864, 6872, 6879, 6886, 6894, 6902, 6910, 6918, 6923, 6928, 6935, 6942, - 6952, 6962, 6966, 6974, 6982, 6988, 6994, 7002, 7010, 7017, 7024, 7032, - 7040, 7047, 7054, 7062, 7070, 7075, 7082, 7089, 7095, 7101, 7107, 7113, - 7121, 7129, 7134, 7139, 7146, 7153, 7160, 7167, 7174, 7181, 7188, 7195, - 7203, 7211, 7218, 7225, 7231, 7237, 7243, 7249, 7257, 7265, 7271, 7277, - 7284, 7291, 7297, 7303, 7310, 7317, 7324, 7331, 7339, 7347, 7354, 7361, - 7370, 7379, 7386, 7393, 7400, 7407, 7414, 7421, 7428, 7435, 7442, 7449, - 7456, 7463, 7470, 7477, 7484, 7491, 7498, 7505, 7512, 7519, 7525, 7531, - 7538, 7545, 7550, 7555, 7560, 7565, 7570, 7575, 7580, 7585, 7590, 7595, - 7601, 7607, 7616, 7625, 7634, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 7643, 7648, 7653, 7658, 7663, 7668, 7673, 7678, 7683, 7687, 7692, 7697, - 7702, 7707, 7712, 7717, 7722, 7727, 7732, 7737, 7742, 7747, 7752, 7757, - 7762, 7767, 7772, 7777, 7781, 7786, 7791, 7796, 7801, 7806, 7811, 7816, - 7821, 7826, 0, 0, 7831, 7838, 7841, 7845, 7849, 7852, 7856, 0, 7860, - 7865, 7870, 7875, 7880, 7885, 7890, 7895, 7900, 7904, 7909, 7914, 7919, - 7924, 7929, 7934, 7939, 7944, 7949, 7954, 7959, 7964, 7969, 7974, 7979, - 7984, 7989, 7994, 7998, 8003, 8008, 8013, 8018, 8023, 8028, 8033, 8038, - 8043, 8048, 0, 8055, 8060, 0, 0, 0, 0, 0, 0, 8063, 8068, 8073, 8078, - 8085, 8092, 8097, 8102, 8107, 8112, 8117, 8122, 8127, 8134, 8139, 8146, - 8153, 8158, 8165, 8170, 8175, 8180, 8187, 8192, 8197, 8204, 8213, 8218, - 8223, 8228, 8233, 8239, 8244, 8251, 8258, 8265, 8270, 8275, 8280, 8285, - 8290, 8295, 8305, 8310, 8318, 8323, 8328, 8333, 8338, 8345, 8352, 8359, - 8365, 8370, 8377, 0, 0, 0, 0, 0, 0, 0, 0, 8384, 8388, 8392, 8396, 8400, - 8404, 8408, 8412, 8416, 8420, 8424, 8429, 8433, 8437, 8442, 8446, 8451, - 8455, 8459, 8463, 8468, 8472, 8477, 8481, 8485, 8489, 8493, 0, 0, 0, 0, - 0, 8497, 8504, 8512, 8519, 8524, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8529, - 8532, 8536, 8541, 0, 0, 8545, 8551, 8557, 8560, 8567, 8576, 8579, 8582, - 8587, 8593, 8597, 8605, 8611, 8617, 8625, 8629, 8634, 8644, 8649, 8653, - 8657, 8661, 0, 0, 8664, 8671, 0, 8675, 8679, 8686, 8692, 8699, 8705, - 8711, 8715, 8719, 8725, 8729, 8733, 8737, 8741, 8745, 8749, 8753, 8757, - 8761, 8765, 8769, 8773, 8777, 8781, 8785, 8789, 8793, 8801, 8809, 8818, - 8827, 8836, 8839, 8843, 8847, 8851, 8855, 8859, 8863, 8867, 8871, 8876, - 8880, 8883, 8886, 8889, 8892, 8895, 8898, 8901, 8904, 8908, 8911, 8914, - 8919, 8924, 8930, 8933, 8940, 8949, 8954, 8958, 0, 8965, 8970, 8974, - 8978, 8982, 8986, 8990, 8994, 8998, 9002, 9006, 9010, 9015, 9020, 9027, - 9033, 9039, 9045, 9050, 9058, 9066, 9071, 9077, 9083, 9089, 9095, 9099, - 9103, 9107, 9114, 9124, 9128, 9132, 9136, 9142, 9150, 9154, 9158, 9165, - 9169, 9173, 9177, 9184, 9191, 9203, 9207, 9211, 9215, 9225, 9234, 9238, - 9245, 9252, 9259, 9268, 9279, 9287, 9291, 9300, 9311, 9319, 9332, 9340, - 9348, 9356, 9364, 9370, 9379, 9386, 9390, 9398, 9402, 9409, 9417, 9421, - 9427, 9434, 9441, 9445, 9453, 9457, 9464, 9468, 9476, 9480, 9488, 9494, - 9500, 9507, 9514, 9521, 9527, 9531, 9538, 9546, 9552, 9559, 9566, 9572, - 9581, 9589, 9596, 9602, 9606, 9609, 9613, 9619, 9627, 9631, 9637, 9643, - 9649, 9656, 9659, 9666, 9671, 9679, 9684, 9688, 9700, 9712, 9718, 9724, - 9729, 9735, 9740, 9746, 9756, 9763, 9772, 9782, 9788, 9793, 9798, 9802, - 9806, 9811, 9816, 9822, 9830, 9838, 9849, 9854, 9862, 9870, 9877, 9883, - 9889, 9895, 9901, 9907, 9913, 9919, 9925, 9931, 9938, 9945, 9952, 9958, - 9966, 9974, 9980, 9987, 9994, 9999, 10004, 10008, 10015, 10022, 10031, - 10040, 10043, 10048, 10053, 0, 10058, 10062, 10066, 10072, 10076, 10080, - 10086, 10090, 10098, 10102, 10106, 10110, 10114, 10118, 10124, 10128, - 10134, 10138, 10142, 10146, 10150, 10154, 10159, 10162, 10166, 10171, - 10175, 10179, 10183, 10187, 10191, 10197, 10203, 10209, 10213, 10217, - 10222, 10226, 10230, 10235, 10239, 10243, 10250, 10257, 10261, 10265, - 10270, 10274, 10278, 10281, 10286, 10289, 10292, 10297, 10302, 10306, - 10310, 10316, 10322, 10325, 0, 0, 10328, 10334, 10340, 10346, 10356, - 10368, 10380, 10397, 10409, 10420, 10427, 10434, 10445, 10460, 10471, - 10477, 10486, 10494, 10506, 10516, 10524, 10536, 10543, 10551, 10563, - 10569, 10575, 10583, 10591, 10598, 10603, 10613, 10620, 10630, 10640, - 10653, 10667, 10681, 10691, 10702, 10713, 10726, 10739, 10753, 10765, - 10777, 10790, 10803, 10815, 10828, 10836, 10844, 10849, 10854, 10859, - 10864, 10869, 10874, 10879, 10884, 10889, 10894, 10899, 10904, 10909, - 10914, 10919, 10924, 10929, 10934, 10939, 10944, 10949, 10954, 10959, - 10964, 10969, 10974, 10979, 10984, 10989, 10994, 10999, 11004, 11008, - 11013, 11018, 11023, 11028, 11033, 11037, 11041, 11045, 11049, 11053, - 11057, 11061, 11065, 11069, 11073, 11077, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 11082, 11086, 11089, 11092, 11095, 11098, 11101, 11104, - 11107, 11110, 11113, 11116, 11120, 11123, 11126, 11129, 11133, 11136, - 11140, 11143, 11147, 11150, 11154, 11158, 11162, 11166, 11169, 11173, - 11177, 11181, 11185, 11188, 11192, 11198, 11201, 11205, 11209, 11212, - 11216, 11219, 11225, 11231, 11237, 11242, 11249, 11256, 11264, 11271, - 11277, 11283, 11290, 11295, 11300, 11305, 11310, 11316, 11320, 11323, - 11327, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11330, 11334, 11338, - 11342, 11347, 11350, 11354, 11357, 11361, 11364, 11368, 11372, 11376, - 11381, 11386, 11389, 11393, 11398, 11403, 11406, 11410, 11413, 11417, - 11421, 11425, 11429, 11433, 11437, 11441, 11445, 11449, 11453, 11457, - 11461, 11465, 11469, 11473, 11477, 11481, 11485, 11489, 11493, 11496, - 11500, 11504, 11508, 11511, 11514, 11517, 11521, 11525, 11529, 11533, - 11537, 11541, 11545, 11549, 0, 0, 11552, 11556, 11560, 11565, 11569, - 11574, 11578, 11583, 11588, 11594, 11600, 11606, 11610, 11615, 11621, - 11627, 11631, 11636, 0, 0, 11640, 11643, 11649, 11655, 11660, 0, 0, 0, - 11665, 11669, 11673, 11677, 11681, 11685, 11689, 11693, 11697, 11702, - 11707, 11712, 11718, 11721, 11725, 11729, 11732, 11735, 11738, 11741, - 11744, 11747, 11750, 11753, 11756, 11760, 11767, 0, 0, 0, 0, 0, 0, 0, 0, - 11772, 11776, 11780, 11786, 11790, 0, 11794, 11798, 11802, 0, 11806, - 11809, 11813, 11816, 11820, 11823, 11827, 11831, 0, 0, 11835, 11838, 0, - 0, 11842, 11845, 11849, 11852, 11856, 11860, 11864, 11868, 11872, 11876, - 11880, 11884, 11888, 11892, 11896, 11900, 11904, 11908, 11912, 11916, - 11920, 11924, 0, 11928, 11931, 11935, 11939, 11943, 11946, 11949, 0, - 11952, 0, 0, 0, 11956, 11960, 11964, 11968, 0, 0, 11971, 11975, 11979, - 11984, 11988, 11993, 11997, 12002, 12007, 0, 0, 12013, 12017, 0, 0, - 12022, 12026, 12031, 12035, 0, 0, 0, 0, 0, 0, 0, 0, 12041, 0, 0, 0, 0, - 12047, 12051, 0, 12055, 12059, 12064, 12069, 12074, 0, 0, 12080, 12084, - 12087, 12090, 12093, 12096, 12099, 12102, 12105, 12108, 12111, 12120, - 12128, 12132, 12136, 12142, 12148, 12154, 12160, 12174, 12181, 0, 0, 0, - 0, 0, 0, 12184, 12190, 12194, 0, 12198, 12201, 12205, 12208, 12212, - 12215, 0, 0, 0, 0, 12219, 12223, 0, 0, 12227, 12231, 12235, 12238, 12242, - 12246, 12250, 12254, 12258, 12262, 12266, 12270, 12274, 12278, 12282, - 12286, 12290, 12294, 12298, 12302, 12306, 12310, 0, 12314, 12317, 12321, - 12325, 12329, 12332, 12335, 0, 12338, 12342, 0, 12346, 12350, 0, 12354, - 12358, 0, 0, 12361, 0, 12365, 12370, 12374, 12379, 12383, 0, 0, 0, 0, - 12388, 12393, 0, 0, 12398, 12403, 12408, 0, 0, 0, 12412, 0, 0, 0, 0, 0, - 0, 0, 12416, 12420, 12424, 12428, 0, 12432, 0, 0, 0, 0, 0, 0, 0, 12436, - 12440, 12443, 12446, 12449, 12452, 12455, 12458, 12461, 12464, 12467, - 12470, 12473, 12476, 12479, 12484, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 12488, 12492, 12496, 0, 12500, 12503, 12507, 12510, 12514, 12517, 12521, - 12525, 12529, 0, 12534, 12537, 12541, 0, 12546, 12549, 12553, 12556, - 12560, 12564, 12568, 12572, 12576, 12580, 12584, 12588, 12592, 12596, - 12600, 12604, 12608, 12612, 12616, 12620, 12624, 12628, 0, 12632, 12635, - 12639, 12643, 12647, 12650, 12653, 0, 12656, 12660, 0, 12664, 12668, - 12672, 12676, 12680, 0, 0, 12683, 12687, 12691, 12696, 12700, 12705, - 12709, 12714, 12719, 12725, 0, 12731, 12735, 12740, 0, 12746, 12750, - 12755, 0, 0, 12759, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12762, - 12767, 12772, 12777, 0, 0, 12783, 12787, 12790, 12793, 12796, 12799, - 12802, 12805, 12808, 12811, 0, 12814, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 12818, 12822, 12826, 0, 12830, 12833, 12837, 12840, 12844, - 12847, 12851, 12855, 0, 0, 12859, 12862, 0, 0, 12866, 12869, 12873, - 12876, 12880, 12884, 12888, 12892, 12896, 12900, 12904, 12908, 12912, - 12916, 12920, 12924, 12928, 12932, 12936, 12940, 12944, 12948, 0, 12952, - 12955, 12959, 12963, 12967, 12970, 12973, 0, 12976, 12980, 0, 12984, - 12988, 12992, 12996, 13000, 0, 0, 13003, 13007, 13011, 13016, 13020, - 13025, 13029, 13034, 13039, 0, 0, 13045, 13049, 0, 0, 13054, 13058, - 13063, 0, 0, 0, 0, 0, 0, 0, 0, 13067, 13073, 0, 0, 0, 0, 13079, 13083, 0, - 13087, 13091, 13096, 13101, 13106, 0, 0, 13112, 13116, 13119, 13122, - 13125, 13128, 13131, 13134, 13137, 13140, 13143, 13146, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13150, 13154, 0, 13158, 13161, 13165, - 13168, 13172, 13175, 0, 0, 0, 13179, 13182, 13186, 0, 13190, 13193, - 13197, 13201, 0, 0, 0, 13204, 13208, 0, 13212, 0, 13216, 13220, 0, 0, 0, - 13224, 13228, 0, 0, 0, 13232, 13236, 13240, 0, 0, 0, 13243, 13246, 13249, - 13252, 13256, 13260, 13264, 13268, 13272, 13276, 13280, 13284, 0, 0, 0, - 0, 13287, 13292, 13296, 13301, 13305, 0, 0, 0, 13310, 13314, 13319, 0, - 13324, 13328, 13333, 13338, 0, 0, 13342, 0, 0, 0, 0, 0, 0, 13345, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13351, 13355, 13358, 13361, 13364, - 13367, 13370, 13373, 13376, 13379, 13382, 13386, 13391, 13396, 13400, - 13404, 13408, 13412, 13416, 13421, 13425, 0, 0, 0, 0, 0, 0, 13428, 13432, - 13436, 0, 13440, 13443, 13447, 13450, 13454, 13457, 13461, 13465, 0, - 13469, 13472, 13476, 0, 13480, 13483, 13487, 13491, 13494, 13498, 13502, - 13506, 13510, 13514, 13518, 13522, 13526, 13530, 13534, 13538, 13542, - 13546, 13550, 13554, 13558, 13562, 13566, 0, 13570, 13573, 13577, 13581, - 13585, 13588, 13591, 13594, 13598, 13602, 0, 13606, 13610, 13614, 13618, - 13622, 0, 0, 0, 13625, 13629, 13634, 13638, 13643, 13647, 13652, 13657, - 0, 13663, 13667, 13672, 0, 13677, 13681, 13686, 13691, 0, 0, 0, 0, 0, 0, - 0, 13695, 13699, 0, 13705, 13709, 0, 0, 0, 0, 0, 0, 13713, 13718, 13723, - 13728, 0, 0, 13734, 13738, 13741, 13744, 13747, 13750, 13753, 13756, - 13759, 13762, 0, 0, 0, 0, 0, 0, 0, 0, 13765, 13778, 13790, 13802, 13814, - 13826, 13838, 13850, 0, 0, 13854, 13858, 0, 13862, 13865, 13869, 13872, - 13876, 13879, 13883, 13887, 0, 13891, 13894, 13898, 0, 13902, 13905, - 13909, 13913, 13916, 13920, 13924, 13928, 13932, 13936, 13940, 13944, - 13948, 13952, 13956, 13960, 13964, 13968, 13972, 13976, 13980, 13984, - 13988, 0, 13992, 13995, 13999, 14003, 14007, 14010, 14013, 14016, 14020, - 14024, 0, 14028, 14032, 14036, 14040, 14044, 0, 0, 14047, 14051, 14055, - 14060, 14064, 14069, 14073, 14078, 14083, 0, 14089, 14093, 14098, 0, - 14103, 14107, 14112, 14117, 0, 0, 0, 0, 0, 0, 0, 14121, 14125, 0, 0, 0, - 0, 0, 0, 0, 14131, 0, 14135, 14140, 14145, 14150, 0, 0, 14156, 14160, - 14163, 14166, 14169, 14172, 14175, 14178, 14181, 14184, 0, 14187, 14191, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 14195, 14199, 0, 14203, - 14206, 14210, 14213, 14217, 14220, 14224, 14228, 0, 14232, 14235, 14239, - 0, 14243, 14246, 14250, 14254, 14257, 14261, 14265, 14269, 14273, 14277, - 14281, 14285, 14289, 14293, 14297, 14301, 14305, 14309, 14313, 14317, - 14321, 14325, 14329, 0, 14333, 14336, 14340, 14344, 14348, 14351, 14354, - 14357, 14361, 14365, 14369, 14373, 14377, 14381, 14385, 14389, 0, 0, 0, - 14392, 14396, 14401, 14405, 14410, 14414, 14419, 14424, 0, 14430, 14434, - 14439, 0, 14444, 14448, 14453, 14458, 0, 0, 0, 0, 0, 0, 0, 0, 0, 14462, - 0, 0, 0, 0, 0, 0, 0, 0, 14468, 14473, 14478, 14483, 0, 0, 14489, 14493, - 14496, 14499, 14502, 14505, 14508, 14511, 14514, 14517, 14520, 14524, - 14529, 14534, 14540, 14546, 0, 0, 0, 14552, 14556, 14562, 14567, 14573, - 14578, 14584, 0, 0, 14590, 14594, 0, 14598, 14602, 14606, 14610, 14614, - 14618, 14622, 14626, 14630, 14634, 14638, 14642, 14646, 14650, 14654, - 14658, 14662, 14666, 0, 0, 0, 14670, 14676, 14682, 14688, 14694, 14700, - 14706, 14712, 14718, 14724, 14730, 14736, 14744, 14750, 14756, 14762, - 14768, 14774, 14780, 14786, 14792, 14798, 14804, 14810, 0, 14816, 14822, - 14828, 14834, 14840, 14846, 14850, 14856, 14860, 0, 14864, 0, 0, 14870, - 14874, 14880, 14886, 14892, 14896, 14902, 0, 0, 0, 14906, 0, 0, 0, 0, - 14910, 14915, 14922, 14929, 14936, 14943, 0, 14950, 0, 14957, 14962, - 14967, 14974, 14981, 14990, 15001, 15010, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 15015, 15022, 15029, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 15034, 15040, 15046, 15052, 15058, 15064, 15070, 15076, 15082, - 15088, 15094, 15100, 15106, 15112, 15118, 15123, 15129, 15135, 15141, - 15147, 15153, 15158, 15164, 15170, 15176, 15182, 15188, 15194, 15200, - 15206, 15212, 15218, 15224, 15229, 15235, 15241, 15245, 15251, 15255, - 15261, 15267, 15273, 15279, 15285, 15291, 15296, 15302, 15306, 15311, - 15317, 15323, 15329, 15334, 15340, 15346, 15352, 15357, 15363, 0, 0, 0, - 0, 15367, 15373, 15378, 15384, 15389, 15397, 15405, 15409, 15413, 15417, - 15423, 15429, 15435, 15441, 15445, 15449, 15453, 15457, 15461, 15464, - 15467, 15470, 15473, 15476, 15479, 15482, 15485, 15488, 15492, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15496, 15500, 0, 15506, 0, 0, 15512, 15516, - 0, 15520, 0, 0, 15526, 0, 0, 0, 0, 0, 0, 15530, 15534, 15537, 15543, 0, - 15549, 15553, 15557, 15561, 15567, 15573, 15579, 0, 15585, 15589, 15593, - 0, 15599, 0, 15605, 0, 0, 15609, 15615, 0, 15621, 15624, 15630, 15633, - 15637, 15644, 15649, 15654, 15658, 15663, 15668, 15673, 15677, 0, 15682, - 15689, 15695, 0, 0, 15701, 15705, 15710, 15714, 15719, 0, 15724, 0, - 15729, 15735, 15741, 15747, 15753, 15757, 0, 0, 15760, 15764, 15767, - 15770, 15773, 15776, 15779, 15782, 15785, 15788, 0, 0, 15791, 15796, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 15801, 15805, 15816, 15831, 15846, 15856, - 15867, 15880, 15891, 15897, 15905, 15915, 15921, 15929, 15933, 15939, - 15945, 15953, 15963, 15971, 15984, 15990, 15998, 16006, 16018, 16025, - 16033, 16041, 16049, 16057, 16065, 16073, 16083, 16087, 16090, 16093, - 16096, 16099, 16102, 16105, 16108, 16111, 16114, 16118, 16122, 16126, - 16130, 16134, 16138, 16142, 16146, 16150, 16155, 16161, 16171, 16185, - 16195, 16201, 16207, 16215, 16223, 16231, 16239, 16245, 16251, 16254, - 16258, 16262, 16266, 16270, 16274, 16278, 0, 16282, 16286, 16290, 16294, - 16298, 16302, 16306, 16310, 16314, 16318, 16322, 16326, 16329, 16333, - 16337, 16341, 16344, 16348, 16352, 16356, 16360, 16364, 16368, 16372, - 16376, 16379, 16382, 16386, 16390, 16394, 16398, 16401, 16404, 16408, - 16413, 16417, 0, 0, 0, 0, 16421, 16426, 16430, 16435, 16439, 16444, - 16449, 16455, 16460, 16466, 16470, 16475, 16479, 16484, 16494, 16500, - 16505, 16511, 16521, 16527, 16531, 16535, 16541, 16547, 16555, 16561, - 16569, 0, 0, 0, 0, 16577, 16582, 16588, 16594, 16600, 16606, 16612, - 16618, 0, 16624, 16630, 16636, 16642, 16648, 16654, 16660, 16666, 16672, - 16678, 16684, 16690, 16695, 16701, 16707, 16713, 16718, 16724, 16730, - 16736, 16742, 16748, 16754, 16760, 16766, 16771, 16776, 16782, 16788, - 16794, 16800, 16805, 16810, 16816, 16824, 16831, 0, 16838, 16845, 16858, - 16865, 16872, 16880, 16888, 16894, 16900, 16906, 16916, 16921, 16927, - 16937, 16947, 0, 16957, 16967, 16975, 16987, 16999, 17005, 17019, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17034, 17037, 17041, - 17045, 17049, 17053, 17057, 17061, 17065, 17069, 17073, 17077, 17081, - 17085, 17089, 17093, 17097, 17101, 17105, 17109, 17113, 17117, 17120, - 17124, 17128, 17132, 17135, 17138, 17141, 17145, 17149, 17153, 17156, - 17160, 17163, 17168, 17171, 17175, 17178, 17182, 17185, 17190, 17193, - 17197, 17204, 17209, 17213, 17218, 17222, 17227, 17231, 17236, 17243, - 17249, 17254, 17258, 17262, 17266, 17270, 17274, 17280, 17286, 17293, - 17299, 17305, 17309, 17312, 17315, 17318, 17321, 17324, 17327, 17330, - 17333, 17336, 17342, 17346, 17350, 17354, 17358, 17362, 17366, 17370, - 17374, 17379, 17383, 17388, 17393, 17399, 17404, 17410, 17416, 17422, - 17428, 17434, 17443, 17451, 17460, 17468, 17477, 17486, 17497, 17507, - 17517, 17528, 17539, 17549, 17559, 17569, 17579, 17589, 17599, 17609, - 17619, 17627, 17634, 17640, 17647, 17652, 17658, 17664, 17670, 17676, - 17682, 17688, 17694, 17700, 17706, 17712, 17718, 17723, 17732, 17739, - 17745, 17752, 17760, 17766, 17772, 17778, 17784, 17792, 17800, 17810, - 17818, 17826, 17832, 17837, 17842, 17847, 17852, 17857, 17862, 17867, - 17872, 0, 0, 0, 0, 17877, 17882, 17888, 17893, 17898, 17903, 17908, - 17913, 17918, 17923, 17928, 17933, 17938, 17943, 17948, 17953, 17958, - 17963, 17968, 17973, 17978, 17983, 17988, 17993, 17998, 18003, 18008, - 18013, 18018, 18023, 18028, 18033, 18038, 18043, 18048, 18053, 18058, - 18063, 18068, 18073, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 18078, 18082, 18086, - 18090, 18094, 18098, 18102, 18106, 18110, 18114, 18118, 18122, 18126, - 18130, 18134, 18138, 18142, 18146, 18150, 18154, 18158, 18162, 18166, - 18170, 18174, 18178, 18182, 18186, 18190, 18194, 18198, 18202, 18206, - 18210, 18214, 18218, 18222, 18226, 18230, 18234, 18238, 18242, 18247, - 18251, 18256, 0, 0, 0, 18261, 18265, 18269, 18273, 18277, 18281, 18285, - 18289, 18293, 18297, 18301, 18305, 18309, 18313, 18317, 18321, 18325, - 18329, 18333, 18337, 18341, 18345, 18349, 18353, 18357, 18361, 18365, - 18369, 18373, 18377, 18381, 18385, 18389, 18393, 18397, 18401, 18405, - 18409, 18413, 18417, 18421, 18425, 18429, 18433, 18437, 18441, 18445, - 18449, 18453, 18457, 18461, 18465, 18469, 18473, 18477, 18481, 18485, - 18489, 18493, 18497, 18501, 18505, 18509, 18513, 18517, 18521, 18525, - 18529, 18533, 18537, 18541, 18545, 18549, 18553, 18557, 18561, 18565, - 18569, 18573, 18577, 18581, 18585, 18589, 18593, 18597, 18601, 18605, - 18609, 18613, 18617, 0, 0, 0, 0, 0, 18621, 18625, 18629, 18632, 18636, - 18639, 18643, 18647, 18650, 18654, 18658, 18661, 18665, 18669, 18673, - 18677, 18680, 18684, 18688, 18692, 18696, 18700, 18704, 18707, 18711, - 18715, 18719, 18723, 18727, 18731, 18735, 18739, 18743, 18747, 18751, - 18755, 18759, 18763, 18767, 18771, 18775, 18779, 18783, 18787, 18791, - 18795, 18799, 18803, 18807, 18811, 18815, 18819, 18823, 18827, 18831, - 18835, 18839, 18843, 18847, 18851, 18855, 18859, 18863, 18867, 18871, - 18875, 18879, 18883, 0, 0, 0, 0, 0, 18887, 18891, 18895, 18899, 18903, - 18907, 18911, 18915, 18919, 18923, 18927, 18931, 18935, 18939, 18943, - 18947, 18951, 18955, 18959, 18963, 18967, 18971, 18975, 18979, 18983, - 18987, 18991, 18995, 18999, 19003, 19007, 19011, 19015, 19019, 19023, - 19027, 19031, 19035, 19039, 19043, 19047, 19051, 19055, 19059, 19063, - 19067, 19071, 19075, 19079, 19083, 19087, 19091, 19095, 19099, 19103, - 19107, 19111, 19115, 19119, 19123, 19127, 19131, 19135, 19139, 19143, - 19147, 19151, 19155, 19159, 19163, 19167, 19171, 19175, 19179, 19183, - 19187, 19191, 19195, 19199, 19203, 19207, 19211, 0, 0, 0, 0, 0, 0, 19215, - 19218, 19222, 19226, 19230, 19234, 19238, 19242, 19246, 19250, 19254, + 75, 78, 82, 86, 91, 96, 101, 105, 110, 115, 120, 124, 129, 134, 138, 142, + 146, 150, 155, 160, 164, 168, 173, 177, 182, 187, 192, 197, 202, 205, + 209, 212, 216, 219, 223, 227, 232, 237, 242, 246, 251, 256, 261, 265, + 270, 275, 279, 283, 287, 291, 296, 301, 305, 309, 314, 318, 323, 328, + 333, 338, 343, 347, 350, 354, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 356, 360, 365, + 368, 371, 374, 377, 380, 383, 385, 388, 394, 402, 404, 408, 411, 413, + 416, 419, 422, 425, 429, 432, 435, 439, 441, 444, 450, 458, 465, 472, + 479, 484, 491, 497, 504, 511, 518, 526, 531, 539, 546, 552, 559, 566, + 574, 581, 589, 597, 602, 610, 617, 623, 630, 637, 644, 647, 653, 660, + 666, 673, 680, 687, 692, 698, 705, 711, 718, 725, 732, 740, 745, 753, + 760, 766, 773, 780, 788, 795, 803, 811, 816, 824, 831, 837, 844, 851, + 858, 861, 867, 874, 880, 887, 894, 901, 906, 914, 921, 928, 935, 942, + 949, 956, 963, 970, 978, 986, 994, 1002, 1010, 1018, 1026, 1034, 1041, + 1048, 1055, 1062, 1069, 1076, 1083, 1090, 1097, 1104, 1111, 1118, 1126, + 1134, 1142, 1150, 1158, 1166, 1174, 1182, 1190, 1198, 1205, 1212, 1220, + 1228, 1236, 1244, 1252, 1260, 1268, 1276, 1284, 1290, 1295, 1300, 1308, + 1316, 1324, 1332, 1337, 1344, 1351, 1359, 1367, 1375, 1383, 1393, 1403, + 1410, 1417, 1424, 1431, 1439, 1447, 1455, 1463, 1474, 1479, 1484, 1491, + 1498, 1505, 1512, 1519, 1526, 1531, 1536, 1543, 1550, 1558, 1566, 1574, + 1582, 1589, 1596, 1604, 1612, 1620, 1628, 1636, 1644, 1652, 1660, 1668, + 1676, 1683, 1690, 1697, 1704, 1711, 1718, 1725, 1732, 1740, 1748, 1755, + 1762, 1769, 1776, 1784, 1792, 1800, 1808, 1816, 1823, 1830, 1838, 1846, + 1854, 1862, 1867, 1873, 1879, 1886, 1893, 1898, 1903, 1909, 1916, 1923, + 1930, 1937, 1945, 1953, 1959, 1964, 1969, 1975, 1982, 1989, 1996, 2001, + 2006, 2011, 2018, 2025, 2032, 2039, 2046, 2051, 2059, 2069, 2078, 2085, + 2092, 2097, 2102, 2109, 2116, 2120, 2125, 2130, 2135, 2142, 2151, 2158, + 2165, 2174, 2181, 2188, 2193, 2200, 2207, 2214, 2221, 2228, 2233, 2240, + 2247, 2255, 2260, 2265, 2270, 2280, 2284, 2290, 2296, 2302, 2308, 2316, + 2329, 2337, 2342, 2352, 2357, 2362, 2372, 2377, 2384, 2391, 2399, 2407, + 2414, 2421, 2428, 2435, 2445, 2455, 2464, 2473, 2483, 2493, 2503, 2513, + 2518, 2528, 2538, 2548, 2558, 2566, 2574, 2581, 2588, 2596, 2604, 2612, + 2620, 2627, 2634, 2644, 2654, 2662, 2670, 2678, 2683, 2693, 2698, 2705, + 2712, 2717, 2722, 2730, 2738, 2748, 2758, 2765, 2772, 2780, 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, 3354, 3360, 3366, 3373, + 3380, 3391, 3401, 3408, 3415, 3422, 3429, 3434, 3439, 3445, 3451, 3457, + 3465, 3473, 3480, 3485, 3490, 3497, 3503, 3510, 3519, 3528, 3537, 3544, + 3550, 3556, 3561, 3568, 3574, 3581, 3588, 3595, 3600, 3605, 3615, 3623, + 3632, 3637, 3642, 3652, 3659, 3667, 3676, 3681, 3687, 3693, 3700, 3705, + 3710, 3720, 3728, 3737, 3745, 3753, 3762, 3767, 3774, 3781, 3786, 3797, + 3805, 3813, 3819, 3828, 3833, 3838, 3845, 3851, 3857, 3863, 3869, 3878, + 3886, 3891, 3899, 3905, 3913, 3921, 3927, 3933, 3939, 3947, 3955, 3961, + 3969, 3975, 3980, 3987, 3995, 4004, 4011, 4018, 4028, 4035, 4042, 4052, + 4059, 4066, 4073, 4079, 4085, 4094, 4106, 4111, 4118, 4123, 4127, 4132, + 4140, 4147, 4152, 4157, 4161, 4166, 4171, 4175, 4180, 4186, 4192, 4198, + 4205, 4210, 4215, 4220, 4225, 4231, 4233, 4238, 4242, 4248, 4254, 4260, + 4265, 4272, 4279, 4285, 4292, 4300, 4308, 4313, 4318, 4322, 4327, 4329, + 4331, 4334, 4336, 4339, 4344, 4349, 4355, 4360, 4364, 4368, 4373, 4381, + 4387, 4392, 4398, 4403, 4409, 4417, 4425, 4429, 4433, 4438, 4444, 4450, + 4456, 4462, 4467, 4475, 4484, 4493, 4498, 4504, 4511, 4518, 4525, 4532, + 4536, 4542, 4547, 4552, 4557, 4562, 4565, 4568, 4571, 4574, 4577, 4580, + 4584, 4588, 4594, 4597, 4602, 4608, 4614, 4617, 4622, 4627, 4631, 4636, + 4642, 4648, 4654, 4659, 4664, 4669, 4672, 4678, 4683, 4688, 4692, 4697, + 4703, 4709, 4712, 4716, 4720, 4724, 4727, 4730, 4735, 4739, 4746, 4750, + 4756, 4760, 4766, 4770, 4774, 4778, 4783, 4788, 4794, 4799, 4806, 4812, + 4818, 4824, 4827, 4831, 4835, 4839, 4843, 4848, 4853, 4857, 4861, 4867, + 4871, 4875, 4880, 4886, 4891, 4896, 4900, 4906, 4911, 4916, 4921, 4926, + 4932, 4935, 4939, 4944, 4949, 4958, 4964, 4969, 4973, 4978, 4982, 4987, + 4991, 4995, 5000, 5004, 5010, 5015, 5020, 5025, 5030, 5035, 5040, 5046, + 5052, 5058, 5063, 5068, 5074, 5080, 5086, 5091, 5096, 5103, 5110, 5114, + 5120, 5127, 0, 0, 5134, 5137, 5145, 5154, 5164, 0, 0, 0, 0, 0, 5168, + 5171, 5176, 5184, 5189, 5197, 5205, 0, 5213, 0, 5221, 5229, 5237, 5248, + 5253, 5258, 5263, 5268, 5273, 5278, 5283, 5288, 5293, 5298, 5303, 5308, + 5313, 5318, 5323, 5328, 0, 5333, 5338, 5343, 5348, 5353, 5358, 5363, + 5368, 5376, 5384, 5392, 5400, 5408, 5416, 5427, 5432, 5437, 5442, 5447, + 5452, 5457, 5462, 5467, 5472, 5477, 5482, 5487, 5492, 5497, 5502, 5507, + 5512, 5518, 5523, 5528, 5533, 5538, 5543, 5548, 5553, 5561, 5569, 5577, + 5585, 5593, 5598, 5602, 5606, 5613, 5623, 5633, 5637, 5641, 5645, 5651, + 5658, 5662, 5667, 5671, 5676, 5680, 5685, 5689, 5694, 5699, 5704, 5709, + 5714, 5719, 5724, 5729, 5734, 5739, 5744, 5749, 5754, 5759, 5764, 5768, + 5772, 5778, 5782, 5787, 5793, 5800, 5805, 5810, 5817, 5822, 5827, 5833, + 5841, 5850, 5860, 5868, 5873, 5878, 5883, 5890, 5895, 5901, 5906, 5911, + 5916, 5921, 5926, 5931, 5939, 5945, 5950, 5954, 5959, 5964, 5969, 5974, + 5979, 5984, 5989, 5993, 5999, 6003, 6008, 6013, 6018, 6022, 6027, 6032, + 6037, 6042, 6046, 6051, 6055, 6060, 6065, 6070, 6075, 6081, 6086, 6092, + 6096, 6101, 6105, 6109, 6114, 6119, 6124, 6129, 6134, 6139, 6144, 6148, + 6154, 6158, 6163, 6168, 6173, 6177, 6182, 6187, 6192, 6197, 6201, 6206, + 6210, 6215, 6220, 6225, 6230, 6236, 6241, 6247, 6251, 6256, 6260, 6268, + 6273, 6278, 6283, 6290, 6295, 6301, 6306, 6311, 6316, 6321, 6326, 6331, + 6339, 6345, 6350, 6355, 6360, 6365, 6370, 6376, 6382, 6389, 6396, 6405, + 6414, 6421, 6428, 6437, 6446, 6451, 6456, 6461, 6466, 6471, 6476, 6481, + 6486, 6497, 6508, 6513, 6518, 6525, 6532, 6540, 6548, 6553, 6558, 6563, + 6568, 6572, 6576, 6580, 6585, 6590, 6594, 6601, 6606, 6616, 6626, 6632, + 6638, 6646, 6654, 6662, 6670, 6677, 6684, 6693, 6702, 6710, 6718, 6726, + 6734, 6741, 6748, 6755, 6762, 6768, 6774, 6780, 6786, 6794, 6802, 6809, + 6816, 6825, 6834, 6840, 6846, 6854, 6862, 6870, 6878, 6884, 6890, 6898, + 6906, 6914, 6922, 6929, 6936, 6944, 6952, 6960, 6968, 6973, 6978, 6985, + 6992, 7002, 7012, 7016, 7024, 7032, 7038, 7044, 7052, 7060, 7067, 7074, + 7082, 7090, 7097, 7104, 7112, 7120, 7125, 7132, 7139, 7146, 7153, 7159, + 7165, 7173, 7181, 7186, 7191, 7199, 7207, 7215, 7223, 7231, 7239, 7246, + 7253, 7261, 7269, 7277, 7285, 7292, 7299, 7305, 7311, 7320, 7329, 7336, + 7343, 7350, 7357, 7364, 7371, 7378, 7385, 7393, 7401, 7409, 7417, 7425, + 7433, 7442, 7451, 7458, 7465, 7472, 7479, 7486, 7493, 7500, 7507, 7514, + 7521, 7528, 7535, 7542, 7549, 7556, 7563, 7570, 7577, 7584, 7591, 7597, + 7603, 7610, 7617, 7622, 7627, 7632, 7637, 7642, 7647, 7652, 7657, 7662, + 7667, 7673, 7679, 7688, 7697, 7706, 7715, 7723, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 7731, 7736, 7741, 7746, 7751, 7756, 7761, 7766, 7771, 7775, + 7780, 7785, 7790, 7795, 7800, 7805, 7810, 7815, 7820, 7825, 7830, 7835, + 7840, 7845, 7850, 7855, 7860, 7865, 7869, 7874, 7879, 7884, 7889, 7894, + 7899, 7904, 7909, 7914, 0, 0, 7919, 7926, 7929, 7933, 7937, 7940, 7944, + 0, 7948, 7953, 7958, 7963, 7968, 7973, 7978, 7983, 7988, 7992, 7997, + 8002, 8007, 8012, 8017, 8022, 8027, 8032, 8037, 8042, 8047, 8052, 8057, + 8062, 8067, 8072, 8077, 8082, 8086, 8091, 8096, 8101, 8106, 8111, 8116, + 8121, 8126, 8131, 8136, 0, 8143, 8148, 0, 0, 0, 0, 0, 0, 8151, 8156, + 8161, 8166, 8173, 8180, 8185, 8190, 8195, 8200, 8205, 8210, 8215, 8222, + 8227, 8234, 8241, 8246, 8253, 8258, 8263, 8268, 8275, 8280, 8285, 8292, + 8301, 8306, 8311, 8316, 8321, 8327, 8332, 8339, 8346, 8353, 8358, 8363, + 8368, 8373, 8378, 8383, 8393, 8398, 8406, 8411, 8416, 8421, 8426, 8433, + 8440, 8447, 8453, 8459, 8466, 0, 0, 0, 0, 0, 0, 0, 0, 8473, 8477, 8481, + 8485, 8489, 8493, 8497, 8501, 8505, 8509, 8513, 8518, 8522, 8526, 8531, + 8535, 8540, 8544, 8548, 8552, 8557, 8561, 8566, 8570, 8574, 8578, 8582, + 0, 0, 0, 0, 0, 8586, 8593, 8601, 8608, 8613, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 8618, 8621, 8625, 8630, 0, 0, 8634, 8640, 8646, 8649, 8656, 8665, + 8668, 8671, 8676, 8682, 8686, 8694, 8700, 8706, 8714, 8718, 8723, 8734, + 8739, 8743, 8747, 8751, 0, 0, 8754, 8761, 0, 8765, 8769, 8776, 8782, + 8789, 8795, 8801, 8805, 8809, 8815, 8819, 8823, 8827, 8831, 8835, 8839, + 8843, 8847, 8851, 8855, 8859, 8863, 8867, 8871, 8875, 8879, 8883, 8891, + 8899, 8909, 8918, 8927, 8930, 8934, 8938, 8942, 8946, 8950, 8954, 8958, + 8962, 8967, 8971, 8974, 8977, 8980, 8983, 8986, 8989, 8992, 8995, 8999, + 9002, 9005, 9010, 9015, 9021, 9024, 9031, 9040, 9045, 9049, 0, 9056, + 9061, 9065, 9069, 9073, 9077, 9081, 9085, 9089, 9093, 9097, 9101, 9106, + 9111, 9118, 9124, 9130, 9136, 9141, 9149, 9157, 9162, 9168, 9174, 9180, + 9186, 9190, 9194, 9198, 9205, 9215, 9219, 9223, 9227, 9233, 9241, 9245, + 9249, 9256, 9260, 9264, 9268, 9275, 9282, 9294, 9298, 9302, 9306, 9316, + 9325, 9329, 9337, 9344, 9351, 9360, 9371, 9379, 9383, 9392, 9403, 9411, + 9424, 9432, 9440, 9448, 9456, 9462, 9471, 9478, 9482, 9490, 9494, 9501, + 9509, 9513, 9519, 9526, 9533, 9537, 9545, 9549, 9556, 9560, 9568, 9572, + 9580, 9588, 9595, 9603, 9611, 9618, 9624, 9628, 9635, 9643, 9649, 9656, + 9663, 9669, 9678, 9686, 9693, 9699, 9703, 9706, 9710, 9716, 9724, 9728, + 9734, 9740, 9747, 9754, 9757, 9764, 9769, 9777, 9782, 9786, 9799, 9812, + 9818, 9825, 9830, 9836, 9841, 9847, 9857, 9864, 9873, 9883, 9889, 9894, + 9899, 9903, 9907, 9912, 9917, 9923, 9931, 9939, 9950, 9955, 9964, 9973, + 9980, 9986, 9992, 9998, 10004, 10010, 10016, 10022, 10028, 10034, 10041, + 10048, 10055, 10061, 10069, 10078, 10084, 10091, 10098, 10103, 10108, + 10112, 10119, 10126, 10135, 10144, 10147, 10152, 10157, 0, 10162, 10166, + 10170, 10176, 10180, 10184, 10190, 10194, 10202, 10206, 10210, 10214, + 10218, 10222, 10228, 10232, 10238, 10242, 10246, 10250, 10254, 10258, + 10263, 10266, 10270, 10275, 10279, 10283, 10287, 10291, 10295, 10301, + 10307, 10313, 10317, 10321, 10326, 10330, 10334, 10339, 10343, 10347, + 10354, 10361, 10365, 10369, 10374, 10378, 10382, 10385, 10390, 10393, + 10396, 10401, 10406, 10410, 10414, 10420, 10426, 10429, 0, 0, 10432, + 10438, 10444, 10450, 10460, 10472, 10484, 10501, 10513, 10524, 10532, + 10539, 10550, 10565, 10576, 10582, 10591, 10599, 10611, 10621, 10629, + 10641, 10648, 10656, 10668, 10674, 10680, 10688, 10696, 10704, 10710, + 10720, 10727, 10737, 10747, 10760, 10774, 10788, 10798, 10809, 10820, + 10833, 10846, 10860, 10872, 10884, 10897, 10910, 10922, 10935, 10944, + 10952, 10957, 10962, 10967, 10972, 10977, 10982, 10987, 10992, 10997, + 11002, 11007, 11012, 11017, 11022, 11027, 11032, 11037, 11042, 11047, + 11052, 11057, 11062, 11067, 11072, 11077, 11082, 11087, 11092, 11097, + 11102, 11107, 11112, 11116, 11121, 11126, 11131, 11136, 11141, 11145, + 11149, 11153, 11157, 11161, 11165, 11169, 11173, 11177, 11181, 11185, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11190, 11195, 11199, 11203, 11207, + 11211, 11215, 11219, 11223, 11227, 11231, 11235, 11240, 11244, 11248, + 11252, 11257, 11261, 11266, 11270, 11275, 11279, 11284, 11289, 11294, + 11299, 11303, 11308, 11313, 11318, 11323, 11327, 11332, 11339, 11343, + 11348, 11352, 11356, 11361, 11365, 11372, 11379, 11386, 11392, 11400, + 11408, 11417, 11425, 11432, 11439, 11447, 11453, 11459, 11465, 11471, + 11478, 11483, 11487, 11492, 0, 0, 0, 0, 0, 11496, 11500, 11504, 11508, + 11512, 11516, 11520, 11524, 11528, 11532, 11536, 11540, 11544, 11548, + 11552, 11556, 11560, 11564, 11568, 11572, 11576, 11580, 11584, 11588, + 11592, 11596, 11600, 11607, 11613, 11618, 11622, 11629, 11635, 11640, + 11646, 11651, 11655, 11661, 11667, 11672, 11676, 11680, 11685, 11689, + 11693, 11698, 0, 0, 11702, 11707, 11712, 11717, 11722, 11727, 11732, + 11736, 11743, 11748, 11753, 11758, 11763, 11768, 11775, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11780, 11786, + 11790, 11794, 11798, 11803, 11806, 11810, 11813, 11817, 11820, 11824, + 11828, 11832, 11837, 11842, 11845, 11849, 11854, 11859, 11862, 11866, + 11869, 11873, 11877, 11881, 11885, 11889, 11893, 11897, 11901, 11905, + 11909, 11913, 11917, 11921, 11925, 11929, 11933, 11937, 11941, 11944, + 11948, 11951, 11955, 11959, 11963, 11966, 11969, 11972, 11976, 11980, + 11984, 11988, 11992, 11996, 12000, 12004, 0, 0, 12007, 12011, 12015, + 12020, 12024, 12029, 12033, 12038, 12043, 12049, 12055, 12061, 12065, + 12070, 12076, 12082, 12086, 12091, 12095, 0, 12101, 12104, 12110, 12116, + 12121, 12126, 0, 0, 12133, 12137, 12141, 12145, 12149, 12153, 12157, + 12161, 12165, 12170, 12175, 12180, 12186, 12189, 12193, 12197, 12200, + 12203, 12206, 12209, 12212, 12215, 12218, 12221, 12224, 12228, 12235, 0, + 0, 0, 0, 0, 0, 12240, 12244, 12248, 12252, 12256, 12262, 12266, 0, 12270, + 12274, 12278, 0, 12282, 12285, 12289, 12292, 12296, 12299, 12303, 12307, + 0, 0, 12311, 12314, 0, 0, 12318, 12321, 12325, 12328, 12332, 12336, + 12340, 12344, 12348, 12352, 12356, 12360, 12364, 12368, 12372, 12376, + 12380, 12384, 12388, 12392, 12396, 12400, 0, 12403, 12406, 12410, 12414, + 12418, 12421, 12424, 0, 12427, 0, 0, 0, 12431, 12435, 12439, 12443, 0, 0, + 12446, 12450, 12454, 12459, 12463, 12468, 12472, 12477, 12482, 0, 0, + 12488, 12492, 0, 0, 12497, 12501, 12506, 12510, 0, 0, 0, 0, 0, 0, 0, 0, + 12516, 0, 0, 0, 0, 12522, 12526, 0, 12530, 12534, 12539, 12544, 12549, 0, + 0, 12555, 12559, 12562, 12565, 12568, 12571, 12574, 12577, 12580, 12583, + 12586, 12595, 12604, 12608, 12612, 12618, 12624, 12630, 12636, 12650, + 12657, 12660, 0, 0, 0, 0, 0, 12664, 12670, 12674, 0, 12678, 12681, 12685, + 12688, 12692, 12695, 0, 0, 0, 0, 12699, 12703, 0, 0, 12707, 12711, 12715, + 12718, 12722, 12726, 12730, 12734, 12738, 12742, 12746, 12750, 12754, + 12758, 12762, 12766, 12770, 12774, 12778, 12782, 12786, 12790, 0, 12793, + 12796, 12800, 12804, 12808, 12811, 12814, 0, 12817, 12821, 0, 12825, + 12829, 0, 12833, 12837, 0, 0, 12840, 0, 12844, 12849, 12853, 12858, + 12862, 0, 0, 0, 0, 12867, 12872, 0, 0, 12877, 12882, 12887, 0, 0, 0, + 12891, 0, 0, 0, 0, 0, 0, 0, 12895, 12899, 12903, 12907, 0, 12911, 0, 0, + 0, 0, 0, 0, 0, 12915, 12919, 12922, 12925, 12928, 12931, 12934, 12937, + 12940, 12943, 12946, 12949, 12952, 12955, 12958, 12963, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 12967, 12971, 12975, 0, 12979, 12982, 12986, 12989, 12993, + 12996, 13000, 13004, 13008, 0, 13013, 13016, 13020, 0, 13025, 13028, + 13032, 13035, 13039, 13043, 13047, 13051, 13055, 13059, 13063, 13067, + 13071, 13075, 13079, 13083, 13087, 13091, 13095, 13099, 13103, 13107, 0, + 13110, 13113, 13117, 13121, 13125, 13128, 13131, 0, 13134, 13138, 0, + 13142, 13146, 13150, 13154, 13158, 0, 0, 13161, 13165, 13169, 13174, + 13178, 13183, 13187, 13192, 13197, 13203, 0, 13209, 13213, 13218, 0, + 13224, 13228, 13233, 0, 0, 13237, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 13240, 13245, 13250, 13255, 0, 0, 13261, 13265, 13268, 13271, + 13274, 13277, 13280, 13283, 13286, 13289, 0, 13292, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 13296, 13300, 13304, 0, 13308, 13311, 13315, + 13318, 13322, 13325, 13329, 13333, 0, 0, 13337, 13340, 0, 0, 13344, + 13347, 13351, 13354, 13358, 13362, 13366, 13370, 13374, 13378, 13382, + 13386, 13390, 13394, 13398, 13402, 13406, 13410, 13414, 13418, 13422, + 13426, 0, 13429, 13432, 13436, 13440, 13444, 13447, 13450, 0, 13453, + 13457, 0, 13461, 13465, 13469, 13473, 13477, 0, 0, 13480, 13484, 13488, + 13493, 13497, 13502, 13506, 13511, 13516, 0, 0, 13522, 13526, 0, 0, + 13531, 13535, 13540, 0, 0, 0, 0, 0, 0, 0, 0, 13544, 13550, 0, 0, 0, 0, + 13556, 13560, 0, 13564, 13568, 13573, 13578, 13583, 0, 0, 13589, 13593, + 13596, 13599, 13602, 13605, 13608, 13611, 13614, 13617, 13620, 13623, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13627, 13631, 0, 13635, + 13638, 13642, 13645, 13649, 13652, 0, 0, 0, 13656, 13659, 13663, 0, + 13667, 13670, 13674, 13678, 0, 0, 0, 13681, 13685, 0, 13689, 0, 13693, + 13697, 0, 0, 0, 13701, 13705, 0, 0, 0, 13709, 13712, 13716, 0, 0, 0, + 13719, 13722, 13725, 13728, 13732, 13736, 13740, 13744, 13748, 13752, + 13756, 13760, 0, 0, 0, 0, 13763, 13768, 13772, 13777, 13781, 0, 0, 0, + 13786, 13790, 13795, 0, 13800, 13804, 13809, 13814, 0, 0, 13818, 0, 0, 0, + 0, 0, 0, 13821, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13827, 13831, + 13834, 13837, 13840, 13843, 13846, 13849, 13852, 13855, 13858, 13862, + 13867, 13872, 13876, 13880, 13884, 13888, 13892, 13897, 13901, 0, 0, 0, + 0, 0, 0, 13904, 13908, 13912, 0, 13916, 13919, 13923, 13926, 13930, + 13933, 13937, 13941, 0, 13945, 13948, 13952, 0, 13956, 13959, 13963, + 13967, 13970, 13974, 13978, 13982, 13986, 13990, 13994, 13998, 14002, + 14006, 14010, 14014, 14018, 14022, 14026, 14030, 14034, 14038, 14042, 0, + 14045, 14048, 14052, 14056, 14060, 14063, 14066, 14069, 14073, 14077, 0, + 14081, 14085, 14089, 14093, 14097, 0, 0, 0, 14100, 14104, 14109, 14113, + 14118, 14122, 14127, 14132, 0, 14138, 14142, 14147, 0, 14152, 14156, + 14161, 14166, 0, 0, 0, 0, 0, 0, 0, 14170, 14174, 0, 14180, 14184, 0, 0, + 0, 0, 0, 0, 14188, 14193, 14198, 14203, 0, 0, 14209, 14213, 14216, 14219, + 14222, 14225, 14228, 14231, 14234, 14237, 0, 0, 0, 0, 0, 0, 0, 0, 14240, + 14253, 14265, 14277, 14289, 14301, 14313, 14325, 0, 0, 14329, 14333, 0, + 14337, 14340, 14344, 14347, 14351, 14354, 14358, 14362, 0, 14366, 14369, + 14373, 0, 14377, 14380, 14384, 14388, 14391, 14395, 14399, 14403, 14407, + 14411, 14415, 14419, 14423, 14427, 14431, 14435, 14439, 14443, 14447, + 14451, 14455, 14459, 14463, 0, 14466, 14469, 14473, 14477, 14481, 14484, + 14487, 14490, 14494, 14498, 0, 14502, 14506, 14510, 14514, 14518, 0, 0, + 14521, 14525, 14529, 14534, 14538, 14543, 14547, 14552, 14557, 0, 14563, + 14567, 14572, 0, 14577, 14581, 14586, 14591, 0, 0, 0, 0, 0, 0, 0, 14595, + 14599, 0, 0, 0, 0, 0, 0, 0, 14605, 0, 14609, 14614, 14619, 14624, 0, 0, + 14630, 14634, 14637, 14640, 14643, 14646, 14649, 14652, 14655, 14658, 0, + 14661, 14665, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 14669, 14673, + 0, 14677, 14680, 14684, 14687, 14691, 14694, 14698, 14702, 0, 14706, + 14709, 14713, 0, 14717, 14720, 14724, 14728, 14731, 14735, 14739, 14743, + 14747, 14751, 14755, 14759, 14763, 14767, 14771, 14775, 14779, 14783, + 14787, 14791, 14795, 14799, 14803, 0, 14806, 14809, 14813, 14817, 14821, + 14824, 14827, 14830, 14834, 14838, 14842, 14846, 14850, 14854, 14858, + 14862, 0, 0, 0, 14865, 14869, 14874, 14878, 14883, 14887, 14892, 14897, + 0, 14903, 14907, 14912, 0, 14917, 14921, 14926, 14931, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 14935, 0, 0, 0, 0, 0, 0, 0, 0, 14941, 14946, 14951, 14956, 0, 0, + 14962, 14966, 14969, 14972, 14975, 14978, 14981, 14984, 14987, 14990, + 14993, 14997, 15002, 15007, 15013, 15019, 0, 0, 0, 15025, 15029, 15035, + 15040, 15046, 15051, 15057, 0, 0, 15063, 15067, 0, 15071, 15075, 15079, + 15083, 15087, 15091, 15095, 15099, 15103, 15107, 15111, 15115, 15119, + 15123, 15127, 15131, 15135, 15139, 0, 0, 0, 15143, 15149, 15155, 15161, + 15167, 15173, 15179, 15185, 15191, 15197, 15203, 15209, 15217, 15223, + 15229, 15235, 15241, 15247, 15253, 15259, 15265, 15271, 15277, 15283, 0, + 15289, 15295, 15301, 15307, 15313, 15319, 15323, 15329, 15333, 0, 15337, + 0, 0, 15343, 15347, 15353, 15359, 15365, 15369, 15375, 0, 0, 0, 15379, 0, + 0, 0, 0, 15383, 15388, 15395, 15402, 15409, 15416, 0, 15423, 0, 15430, + 15435, 15440, 15447, 15454, 15463, 15474, 15483, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15488, 15495, 15502, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 15507, 15513, 15519, 15525, 15531, 15537, 15543, 15549, + 15555, 15561, 15567, 15573, 15579, 15585, 15591, 15596, 15602, 15608, + 15614, 15620, 15626, 15631, 15637, 15643, 15649, 15655, 15661, 15667, + 15673, 15679, 15685, 15691, 15697, 15702, 15708, 15714, 15718, 15724, + 15728, 15734, 15740, 15746, 15752, 15758, 15764, 15769, 15775, 15779, + 15784, 15790, 15796, 15802, 15807, 15813, 15819, 15825, 15830, 15836, 0, + 0, 0, 0, 15840, 15846, 15851, 15857, 15862, 15870, 15878, 15882, 15886, + 15890, 15896, 15902, 15908, 15914, 15918, 15922, 15926, 15930, 15934, + 15937, 15940, 15943, 15946, 15949, 15952, 15955, 15958, 15961, 15965, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15969, 15973, 0, 15979, 0, 0, 15985, + 15989, 0, 15993, 0, 0, 15999, 0, 0, 0, 0, 0, 0, 16003, 16007, 16010, + 16016, 0, 16022, 16026, 16030, 16034, 16040, 16046, 16052, 0, 16058, + 16062, 16066, 0, 16072, 0, 16078, 0, 0, 16082, 16088, 0, 16094, 16097, + 16103, 16106, 16110, 16117, 16122, 16127, 16131, 16136, 16141, 16146, + 16150, 0, 16155, 16162, 16168, 0, 0, 16174, 16178, 16183, 16187, 16192, + 0, 16197, 0, 16202, 16208, 16214, 16220, 16226, 16230, 0, 0, 16233, + 16237, 16240, 16243, 16246, 16249, 16252, 16255, 16258, 16261, 0, 0, + 16264, 16269, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16274, 16278, 16289, 16304, + 16319, 16329, 16340, 16353, 16364, 16370, 16378, 16388, 16394, 16402, + 16406, 16412, 16418, 16426, 16436, 16444, 16457, 16463, 16471, 16479, + 16491, 16498, 16506, 16514, 16522, 16530, 16538, 16546, 16556, 16560, + 16563, 16566, 16569, 16572, 16575, 16578, 16581, 16584, 16587, 16591, + 16595, 16599, 16603, 16607, 16611, 16615, 16619, 16623, 16628, 16634, + 16644, 16658, 16668, 16674, 16680, 16688, 16696, 16704, 16712, 16718, + 16724, 16727, 16731, 16735, 16739, 16743, 16747, 16751, 0, 16755, 16759, + 16763, 16767, 16771, 16775, 16779, 16783, 16787, 16791, 16795, 16798, + 16801, 16805, 16809, 16813, 16816, 16820, 16824, 16828, 16832, 16836, + 16840, 16844, 16848, 16851, 16854, 16858, 16862, 16866, 16870, 16873, + 16876, 16880, 16885, 16889, 0, 0, 0, 0, 16893, 16898, 16902, 16907, + 16911, 16916, 16921, 16927, 16932, 16938, 16942, 16947, 16951, 16956, + 16966, 16972, 16977, 16983, 16993, 16999, 17003, 17007, 17013, 17019, + 17027, 17033, 17041, 0, 0, 0, 0, 17049, 17054, 17060, 17066, 17072, + 17078, 17084, 17090, 0, 17096, 17102, 17108, 17114, 17120, 17126, 17132, + 17138, 17144, 17150, 17156, 17161, 17166, 17172, 17178, 17184, 17189, + 17195, 17201, 17207, 17213, 17219, 17225, 17231, 17237, 17242, 17247, + 17253, 17259, 17265, 17271, 17276, 17281, 17287, 17295, 17302, 0, 17309, + 17316, 17329, 17336, 17343, 17351, 17359, 17365, 17371, 17377, 17387, + 17392, 17398, 17408, 17418, 0, 17428, 17438, 17446, 17458, 17470, 17476, + 17490, 17505, 17510, 17515, 17523, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 17531, 17534, 17538, 17542, 17546, 17550, 17554, 17558, 17562, + 17566, 17570, 17574, 17578, 17582, 17586, 17590, 17594, 17598, 17602, + 17606, 17610, 17613, 17616, 17620, 17624, 17628, 17631, 17634, 17637, + 17641, 17645, 17649, 17652, 17656, 17659, 17664, 17667, 17671, 17674, + 17678, 17681, 17686, 17689, 17693, 17700, 17705, 17709, 17714, 17718, + 17723, 17727, 17732, 17739, 17745, 17750, 17754, 17758, 17762, 17766, + 17770, 17776, 17782, 17789, 17795, 17801, 17805, 17808, 17811, 17814, + 17817, 17820, 17823, 17826, 17829, 17832, 17838, 17842, 17846, 17850, + 17854, 17858, 17862, 17866, 17870, 17875, 17879, 17884, 17889, 17895, + 17900, 17906, 17912, 17918, 17924, 17930, 17938, 17946, 17955, 17963, + 17972, 17981, 17992, 18002, 18012, 18023, 18034, 18044, 18054, 18064, + 18074, 18084, 18094, 18104, 18114, 18122, 18129, 18135, 18142, 18147, + 18153, 18159, 18165, 18171, 18177, 18183, 18188, 18194, 18200, 18206, + 18212, 18217, 18226, 18233, 18239, 18246, 18254, 18260, 18266, 18272, + 18278, 18286, 18294, 18304, 18312, 18320, 18326, 18331, 18336, 18341, + 18346, 18351, 18356, 18361, 18366, 18371, 18377, 18383, 18389, 18396, + 18401, 18407, 18412, 18417, 18422, 18427, 18432, 18437, 18442, 18447, + 18452, 18457, 18462, 18467, 18472, 18477, 18482, 18487, 18492, 18497, + 18502, 18507, 18512, 18517, 18522, 18527, 18532, 18537, 18542, 18547, + 18552, 18557, 18562, 18567, 18572, 18577, 18582, 18587, 18592, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 18597, 18601, 18605, 18609, 18613, 18617, 18621, + 18625, 18629, 18633, 18637, 18641, 18645, 18649, 18653, 18657, 18661, + 18665, 18669, 18673, 18677, 18681, 18685, 18689, 18693, 18697, 18701, + 18705, 18709, 18713, 18717, 18721, 18725, 18729, 18733, 18737, 18741, + 18745, 18749, 18753, 18757, 18761, 18766, 18770, 18775, 0, 0, 0, 18780, + 18784, 18788, 18792, 18796, 18800, 18804, 18808, 18812, 18816, 18820, + 18824, 18828, 18832, 18836, 18840, 18844, 18848, 18852, 18856, 18860, + 18864, 18868, 18872, 18876, 18880, 18884, 18888, 18892, 18896, 18900, + 18904, 18908, 18912, 18916, 18920, 18924, 18928, 18932, 18936, 18940, + 18944, 18948, 18952, 18956, 18960, 18964, 18968, 18972, 18976, 18980, + 18984, 18988, 18992, 18996, 19000, 19004, 19008, 19012, 19016, 19020, + 19024, 19028, 19032, 19036, 19040, 19044, 19048, 19052, 19056, 19060, + 19064, 19068, 19072, 19076, 19080, 19084, 19088, 19092, 19096, 19100, + 19104, 19108, 19112, 19116, 19120, 19124, 19128, 19132, 19136, 19140, + 19144, 19148, 19152, 19156, 19160, 19164, 19168, 19171, 19175, 19178, + 19182, 19186, 19189, 19193, 19197, 19200, 19204, 19208, 19212, 19216, + 19219, 19223, 19227, 19231, 19235, 19239, 19243, 19246, 19250, 19254, 19258, 19262, 19266, 19270, 19274, 19278, 19282, 19286, 19290, 19294, - 19298, 19302, 19306, 19310, 19313, 19317, 19321, 19325, 19329, 19333, - 19337, 19341, 19345, 19349, 19353, 19357, 19361, 19365, 19369, 19373, - 19376, 19380, 19384, 19388, 19392, 19396, 19400, 19404, 19408, 19412, - 19416, 19420, 19424, 19428, 19432, 19436, 19440, 19444, 19448, 19452, - 19456, 19460, 19464, 19468, 19472, 19476, 19480, 19484, 19488, 19492, - 19496, 19500, 0, 19504, 19508, 19512, 19516, 0, 0, 19520, 19524, 19528, - 19532, 19536, 19540, 19544, 0, 19548, 0, 19552, 19556, 19560, 19564, 0, - 0, 19568, 19572, 19576, 19580, 19584, 19588, 19592, 19596, 19600, 19604, - 19608, 19612, 19616, 19620, 19624, 19628, 19632, 19636, 19640, 19644, - 19648, 19652, 19656, 19659, 19663, 19667, 19671, 19675, 19679, 19683, - 19687, 19691, 19695, 19699, 19703, 19707, 19711, 19715, 19719, 19723, - 19727, 0, 19731, 19735, 19739, 19743, 0, 0, 19747, 19751, 19755, 19759, - 19763, 19767, 19771, 19775, 19779, 19783, 19787, 19791, 19795, 19799, - 19803, 19807, 19811, 19816, 19821, 19826, 19832, 19838, 19843, 19848, - 19854, 19857, 19861, 19865, 19869, 19873, 19877, 19881, 19885, 0, 19889, - 19893, 19897, 19901, 0, 0, 19905, 19909, 19913, 19917, 19921, 19925, - 19929, 0, 19933, 0, 19937, 19941, 19945, 19949, 0, 0, 19953, 19957, - 19961, 19965, 19969, 19973, 19977, 19981, 19985, 19990, 19995, 20000, - 20006, 20012, 20017, 0, 20022, 20026, 20030, 20034, 20038, 20042, 20046, - 20050, 20054, 20058, 20062, 20066, 20070, 20074, 20078, 20082, 20086, - 20089, 20093, 20097, 20101, 20105, 20109, 20113, 20117, 20121, 20125, - 20129, 20133, 20137, 20141, 20145, 20149, 20153, 20157, 20161, 20165, - 20169, 20173, 20177, 20181, 20185, 20189, 20193, 20197, 20201, 20205, - 20209, 20213, 20217, 20221, 20225, 20229, 20233, 20237, 20241, 20245, 0, - 20249, 20253, 20257, 20261, 0, 0, 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, 20492, 20496, 20500, 20504, 20508, 20512, 20516, 20520, - 20524, 20528, 0, 0, 0, 0, 20532, 20537, 20541, 20544, 20549, 20552, - 20555, 20558, 20563, 20567, 20572, 20575, 20578, 20581, 20584, 20587, - 20590, 20593, 20596, 20599, 20603, 20607, 20611, 20615, 20619, 20623, - 20627, 20631, 20635, 20639, 0, 0, 0, 20645, 20651, 20655, 20659, 20663, - 20669, 20673, 20677, 20681, 20687, 20691, 20695, 20699, 20705, 20709, - 20713, 20717, 20723, 20729, 20735, 20743, 20749, 20755, 20761, 20767, - 20773, 0, 0, 0, 0, 0, 0, 20779, 20782, 20785, 20788, 20791, 20794, 20797, - 20801, 20804, 20808, 20812, 20816, 20820, 20824, 20827, 20831, 20835, - 20839, 20843, 20847, 20851, 20855, 20859, 20863, 20867, 20871, 20874, - 20878, 20882, 20886, 20890, 20894, 20898, 20902, 20906, 20910, 20914, - 20918, 20922, 20926, 20930, 20934, 20938, 20942, 20946, 20950, 20953, - 20957, 20961, 20965, 20969, 20973, 20977, 20981, 20985, 20989, 20993, - 20997, 21001, 21005, 21009, 21013, 21017, 21021, 21025, 21029, 21033, - 21037, 21041, 21045, 21049, 21053, 21057, 21061, 21065, 21069, 21073, - 21077, 21081, 21085, 21088, 21092, 21096, 21100, 21104, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 21108, 21111, 21115, 21118, 21122, 21125, 21129, 21135, - 21140, 21144, 21147, 21151, 21155, 21160, 21164, 21169, 21173, 21178, - 21182, 21187, 21191, 21196, 21202, 21206, 21211, 21215, 21220, 21226, - 21230, 21236, 21242, 21246, 21251, 21259, 21267, 21274, 21279, 21284, - 21293, 21300, 21307, 21312, 21318, 21322, 21326, 21330, 21334, 21338, - 21342, 21346, 21350, 21354, 21358, 21364, 21369, 21374, 21377, 21381, - 21385, 21390, 21394, 21399, 21403, 21408, 21412, 21417, 21421, 21426, - 21430, 21435, 21439, 21444, 21450, 21454, 21459, 21463, 21467, 21471, - 21475, 21479, 21482, 21486, 21492, 21497, 21502, 21506, 21510, 21514, - 21519, 21523, 21528, 21532, 21537, 21540, 21544, 21548, 21553, 21557, - 21562, 21566, 21571, 21577, 21581, 21585, 21589, 21593, 21597, 21601, - 21605, 21609, 21613, 21617, 21621, 21627, 21630, 21634, 21638, 21643, - 21647, 21652, 21656, 21661, 21665, 21670, 21674, 21679, 21683, 21688, - 21692, 21697, 21703, 21707, 21711, 21717, 21723, 21729, 21735, 21739, - 21743, 21747, 21751, 21755, 21759, 21765, 21769, 21773, 21777, 21782, - 21786, 21791, 21795, 21800, 21804, 21809, 21813, 21818, 21822, 21827, - 21831, 21836, 21842, 21846, 21852, 21856, 21860, 21864, 21868, 21872, - 21876, 21882, 21885, 21889, 21893, 21898, 21902, 21907, 21911, 21916, - 21920, 21925, 21929, 21934, 21938, 21943, 21947, 21952, 21958, 21961, - 21965, 21969, 21974, 21979, 21983, 21987, 21991, 21995, 21999, 22003, - 22009, 22013, 22017, 22021, 22026, 22030, 22035, 22039, 22044, 22050, - 22053, 22058, 22062, 22066, 22070, 22074, 22078, 22082, 22086, 22092, - 22096, 22100, 22104, 22109, 22113, 22118, 22122, 22127, 22131, 22136, - 22140, 22145, 22149, 22154, 22158, 22163, 22166, 22170, 22174, 22178, - 22182, 22186, 22190, 22194, 22198, 22204, 22208, 22212, 22216, 22221, - 22225, 22230, 22234, 22239, 22243, 22248, 22252, 22257, 22261, 22266, - 22270, 22275, 22281, 22284, 22289, 22293, 22298, 22304, 22310, 22316, - 22322, 22328, 22334, 22340, 22344, 22348, 22352, 22356, 22360, 22364, - 22368, 22372, 22377, 22381, 22386, 22390, 22395, 22399, 22404, 22408, - 22413, 22417, 22422, 22426, 22431, 22435, 22439, 22443, 22447, 22451, - 22455, 22459, 22465, 22468, 22472, 22476, 22481, 22485, 22490, 22494, - 22499, 22503, 22508, 22512, 22517, 22521, 22526, 22530, 22535, 22541, - 22545, 22551, 22556, 22562, 22566, 22572, 22577, 22581, 22585, 22589, - 22593, 22597, 22602, 22605, 22609, 22614, 22618, 22623, 22626, 22630, - 22634, 22638, 22642, 22646, 22650, 22654, 22658, 22662, 22666, 22670, - 22675, 22679, 22683, 22689, 22693, 22699, 22703, 22709, 22713, 22717, - 22721, 22725, 22729, 22734, 22738, 22742, 22746, 22750, 22754, 22758, - 22762, 22766, 22770, 22774, 22780, 22786, 22792, 22798, 22804, 22809, - 22815, 22820, 22825, 22829, 22833, 22837, 22841, 22845, 22849, 22853, - 22857, 22861, 22865, 22869, 22873, 22877, 22882, 22887, 22892, 22896, - 22900, 22904, 22908, 22912, 22916, 22920, 22924, 22928, 22932, 22938, - 22944, 22950, 22956, 22962, 22968, 22974, 22980, 22986, 22990, 22994, - 22998, 23002, 23006, 23010, 23014, 23020, 23026, 23032, 23038, 23044, - 23050, 23056, 23062, 23068, 23073, 23078, 23083, 23088, 23094, 23100, - 23106, 23112, 23118, 23124, 23130, 23136, 23142, 23148, 23154, 23159, - 23165, 23171, 23177, 23182, 23187, 23192, 23197, 23202, 23207, 23212, - 23217, 23222, 23227, 23232, 23237, 23241, 23246, 23251, 23256, 23261, - 23266, 23271, 23276, 23281, 23286, 23291, 23296, 23301, 23306, 23311, - 23316, 23321, 23326, 23331, 23336, 23341, 23346, 23351, 23356, 23361, - 23366, 23371, 23376, 23381, 23386, 23390, 23395, 23400, 23405, 23410, - 23415, 23420, 23425, 23430, 23435, 23440, 23445, 23450, 23455, 23460, - 23465, 23470, 23475, 23480, 23485, 23490, 23495, 23500, 23505, 23510, - 23515, 23520, 23525, 23530, 23535, 23540, 23545, 23549, 23554, 23559, - 23564, 23569, 23574, 23578, 23583, 23589, 23594, 23599, 23604, 23609, - 23615, 23620, 23625, 23630, 23635, 23640, 23645, 23650, 23655, 23660, - 23665, 23670, 23675, 23680, 23685, 23690, 23695, 23700, 23705, 23710, - 23715, 23720, 23725, 23730, 23735, 23740, 23745, 23750, 23755, 23760, - 23765, 23770, 23775, 23780, 23785, 23790, 23795, 23800, 23805, 23810, - 23815, 23820, 23825, 23830, 23835, 23841, 23846, 23851, 23856, 23861, - 23866, 23871, 23876, 23881, 23886, 23891, 23896, 23901, 23906, 23911, - 23916, 23921, 23926, 23931, 23936, 23941, 23946, 23951, 23956, 23961, - 23966, 23971, 23976, 23981, 23986, 23991, 23996, 24001, 24006, 24011, - 24016, 24021, 24026, 24031, 24037, 24041, 24045, 24049, 24053, 24057, - 24061, 24065, 0, 0, 0, 0, 0, 0, 0, 0, 0, 24069, 24074, 24079, 24084, - 24089, 24094, 24099, 24104, 24109, 24114, 24119, 24124, 24129, 24134, - 24139, 24144, 24149, 24154, 24159, 24164, 24169, 24174, 24179, 24184, - 24189, 24194, 24199, 24204, 24209, 0, 0, 0, 24215, 24225, 24228, 24235, - 24239, 24243, 24247, 24255, 24259, 24264, 24269, 24274, 24278, 24283, - 24288, 24291, 24295, 24299, 24308, 24312, 24316, 24322, 24325, 24329, - 24336, 24340, 24348, 24353, 24358, 24363, 24368, 24377, 24382, 24386, - 24395, 24398, 24404, 24408, 24414, 24419, 24425, 24433, 24439, 24444, - 24451, 24456, 24460, 24464, 24474, 24480, 24484, 24494, 24500, 24504, - 24508, 24515, 24522, 24527, 24532, 24541, 24545, 24549, 24553, 24561, - 24568, 24572, 24576, 24580, 24584, 24588, 24592, 24596, 24600, 24604, - 24608, 24612, 24617, 24622, 24627, 24631, 24635, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 24639, 24643, 24647, 24651, 24655, 24660, 24665, - 24670, 24675, 24680, 24684, 24689, 24693, 0, 24697, 24702, 24707, 24712, - 24716, 24721, 24726, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 24731, 24735, - 24739, 24743, 24747, 24752, 24757, 24762, 24767, 24772, 24776, 24781, - 24785, 24789, 24793, 24798, 24803, 24808, 24812, 24817, 24822, 24827, - 24833, 0, 0, 0, 0, 0, 0, 0, 0, 0, 24838, 24842, 24846, 24850, 24854, - 24859, 24864, 24869, 24874, 24879, 24883, 24888, 24892, 24896, 24900, - 24905, 24910, 24915, 24919, 24924, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 24929, 24933, 24937, 24941, 24945, 24950, 24955, 24960, 24965, 24970, - 24974, 24979, 24983, 0, 24987, 24992, 24997, 0, 25002, 25007, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 25012, 25015, 25019, 25023, 25027, 25031, 25035, - 25039, 25043, 25047, 25051, 25055, 25059, 25063, 25067, 25071, 25075, - 25079, 25082, 25086, 25090, 25094, 25098, 25102, 25106, 25110, 25114, - 25118, 25122, 25126, 25130, 25134, 25138, 25141, 25145, 25149, 25155, - 25161, 25167, 25173, 25179, 25185, 25191, 25197, 25203, 25209, 25215, - 25221, 25227, 25233, 25242, 25251, 25257, 25263, 25269, 25274, 25278, - 25283, 25288, 25293, 25297, 25302, 25307, 25312, 25316, 25321, 25325, - 25330, 25335, 25340, 25345, 25349, 25353, 25357, 25361, 25365, 25369, - 25373, 25377, 25381, 25385, 25391, 25395, 25399, 25403, 25407, 25411, - 25419, 25425, 25429, 25435, 25439, 25445, 25449, 0, 0, 25453, 25457, - 25460, 25463, 25466, 25469, 25472, 25475, 25478, 25481, 0, 0, 0, 0, 0, 0, - 25484, 25492, 25500, 25508, 25516, 25524, 25532, 25540, 25548, 25556, 0, - 0, 0, 0, 0, 0, 25564, 25567, 25570, 25573, 25578, 25581, 25586, 25593, - 25601, 25606, 25613, 25616, 25623, 25630, 25637, 0, 25641, 25645, 25648, - 25651, 25654, 25657, 25660, 25663, 25666, 25669, 0, 0, 0, 0, 0, 0, 25672, - 25675, 25678, 25681, 25684, 25687, 25691, 25695, 25699, 25703, 25707, - 25711, 25714, 25718, 25722, 25725, 25729, 25733, 25737, 25741, 25745, - 25749, 25753, 25756, 25759, 25763, 25767, 25770, 25774, 25778, 25782, - 25786, 25790, 25794, 25798, 25802, 25809, 25814, 25819, 25824, 25829, - 25835, 25841, 25847, 25853, 25858, 25864, 25870, 25875, 25881, 25887, - 25893, 25899, 25905, 25910, 25916, 25921, 25927, 25933, 25939, 25945, - 25951, 25956, 25961, 25967, 25973, 25978, 25984, 25989, 25995, 26000, - 26005, 26011, 26017, 26023, 26029, 26035, 26041, 26047, 26053, 26059, - 26065, 26071, 26077, 26082, 26087, 26092, 26098, 0, 0, 0, 0, 0, 0, 0, 0, - 26104, 26113, 26122, 26130, 26138, 26148, 26156, 26165, 26172, 26179, - 26186, 26194, 26202, 26210, 26218, 26226, 26234, 26242, 26250, 26257, - 26265, 26273, 26281, 26289, 26297, 26307, 26317, 26327, 26337, 26347, - 26357, 26367, 26377, 26387, 26397, 26407, 26417, 26427, 26437, 26445, - 26453, 26463, 26471, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 26481, 26486, - 26489, 26493, 26497, 26501, 26505, 26509, 26513, 26517, 26521, 26525, - 26529, 26533, 26537, 26541, 26545, 26548, 26552, 26556, 26560, 26563, - 26566, 26569, 26573, 26577, 26581, 26585, 26589, 0, 0, 0, 26592, 26596, - 26600, 26604, 26609, 26614, 26619, 26624, 26628, 26632, 26637, 26642, 0, - 0, 0, 0, 26648, 26652, 26657, 26662, 26667, 26672, 26676, 26680, 26684, - 26689, 26693, 26697, 0, 0, 0, 0, 26701, 0, 0, 0, 26705, 26709, 26713, - 26717, 26720, 26723, 26726, 26729, 26732, 26735, 26738, 26741, 26744, - 26749, 26755, 26761, 26767, 26773, 26778, 26784, 26790, 26796, 26801, - 26807, 26812, 26818, 26824, 26829, 26835, 26841, 26847, 26853, 26858, - 26863, 26869, 26875, 26880, 26886, 26891, 26897, 26902, 26908, 0, 0, - 26914, 26920, 26926, 26932, 26938, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 26944, 26951, 26958, 26964, 26971, 26978, 26984, 26991, 26998, 27005, - 27012, 27018, 27025, 27032, 27038, 27045, 27052, 27059, 27066, 27073, - 27080, 27086, 27093, 27099, 27105, 27112, 27118, 27125, 27132, 27139, - 27146, 27153, 27160, 27166, 27173, 27180, 27186, 27193, 27200, 27207, - 27214, 27221, 0, 0, 0, 0, 0, 0, 27228, 27236, 27243, 27250, 27256, 27263, - 27269, 27276, 27282, 27289, 27296, 27303, 27310, 27317, 27324, 27331, - 27338, 27345, 27351, 27358, 27364, 27370, 27377, 27384, 27391, 27397, 0, - 0, 0, 0, 0, 0, 27403, 27409, 27414, 27419, 27424, 27429, 27434, 27439, - 27444, 27449, 0, 0, 0, 0, 27454, 27460, 27466, 27470, 27476, 27482, - 27488, 27494, 27500, 27506, 27512, 27518, 27524, 27530, 27536, 27542, - 27548, 27554, 27560, 27564, 27570, 27576, 27582, 27588, 27594, 27600, - 27606, 27612, 27618, 27624, 27630, 27636, 27642, 27648, 27654, 27658, - 27663, 27668, 27673, 27677, 27682, 27686, 27691, 27696, 27701, 27706, - 27711, 27716, 27721, 27726, 27731, 27735, 27739, 27744, 27749, 27754, - 27758, 27762, 27767, 27772, 27777, 27782, 0, 0, 27788, 27792, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 27799, 27805, - 27811, 27815, 27819, 27823, 27827, 27833, 27837, 27843, 27847, 27853, - 27859, 27867, 27873, 27881, 27885, 27889, 27893, 27899, 27902, 27907, - 27911, 27917, 27921, 27925, 27931, 27935, 27941, 27945, 27951, 27959, - 27967, 27975, 27981, 27985, 27991, 27995, 28001, 28005, 28008, 28014, - 28018, 28024, 28027, 28030, 28033, 28037, 28041, 28047, 28053, 28057, - 28060, 28064, 28069, 28074, 28081, 28086, 28093, 28100, 28109, 28116, - 28125, 28130, 28137, 28144, 28153, 28158, 28165, 28170, 28176, 28182, - 28188, 28194, 28200, 28206, 0, 0, 0, 0, 28212, 28216, 28219, 28222, - 28225, 28228, 28231, 28234, 28237, 28240, 28243, 28246, 28249, 28252, - 28257, 28262, 28267, 28270, 28275, 28280, 28285, 28290, 28297, 28302, - 28307, 28312, 28317, 28324, 28330, 28336, 28342, 28348, 28354, 28363, - 28372, 28378, 28384, 28393, 28402, 28411, 28420, 28429, 28438, 28447, - 28456, 0, 0, 0, 28465, 28469, 28473, 28477, 28480, 28483, 28486, 28490, - 28493, 28496, 28500, 28503, 28507, 28511, 28515, 28519, 28523, 28527, - 28531, 28535, 28539, 28543, 28546, 28550, 28554, 28558, 28561, 28564, - 28567, 28571, 28575, 28579, 28583, 28586, 28592, 28598, 28604, 28609, - 28614, 28619, 28624, 28629, 28634, 0, 0, 0, 28638, 28642, 28646, 28650, - 28653, 28656, 28659, 28662, 28665, 28668, 28671, 28674, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 28677, 28680, 28684, - 28688, 28692, 28696, 28700, 28704, 28708, 28712, 28716, 28720, 28724, - 28728, 28732, 28735, 28739, 28743, 28747, 28751, 28755, 28759, 28762, - 28766, 28770, 28774, 28778, 28781, 28784, 28788, 28791, 28795, 28799, - 28803, 28807, 28811, 28814, 28819, 28824, 28829, 28833, 28837, 28842, - 28846, 28851, 28855, 28861, 28866, 28871, 28876, 28882, 28887, 28893, - 28899, 28905, 28909, 0, 0, 0, 28913, 28918, 28927, 28932, 28939, 28944, - 28948, 28951, 28954, 28957, 28960, 28963, 28966, 28969, 28972, 0, 0, 0, - 28975, 28979, 28983, 28987, 28994, 29000, 29006, 29012, 29018, 29024, - 29030, 29036, 29042, 29048, 29055, 29062, 29069, 29076, 29083, 29090, - 29097, 29104, 29111, 29118, 29125, 29132, 29139, 29146, 29153, 29160, - 29167, 29174, 29181, 29188, 29195, 29202, 29209, 29216, 29223, 29230, - 29237, 29244, 29251, 29258, 29266, 29274, 29282, 29288, 29294, 29300, - 29308, 29317, 29322, 29328, 29334, 29342, 29348, 29354, 29360, 29365, - 29372, 29377, 29383, 29389, 29397, 29402, 29408, 29413, 29420, 29426, - 29434, 29442, 29448, 29454, 29461, 29468, 29474, 29480, 29486, 29492, - 29497, 29503, 29511, 29518, 29523, 29529, 29535, 29541, 29549, 29553, - 29559, 29565, 29571, 29577, 29583, 29589, 29593, 29598, 29603, 29610, - 29615, 29619, 29624, 29628, 29632, 29636, 29641, 29646, 29650, 29654, - 29658, 29663, 29667, 29672, 29677, 29681, 29686, 29690, 29695, 29699, - 29704, 29709, 29715, 29720, 29725, 29729, 29734, 29740, 29747, 29751, - 29756, 29761, 29765, 29770, 29774, 29780, 29787, 29794, 29799, 29804, - 29808, 29814, 29819, 29823, 29828, 29833, 29839, 29844, 29850, 29855, - 29861, 29867, 29873, 29879, 29886, 29893, 29900, 29907, 29914, 29919, - 29927, 29936, 29945, 29954, 29963, 29972, 29981, 29993, 30002, 30011, - 30020, 30025, 30030, 30036, 30044, 30052, 30059, 30066, 30073, 30080, - 30088, 30097, 30106, 30115, 30124, 30133, 30142, 30151, 30160, 30169, - 30178, 30187, 30196, 30205, 30214, 30222, 30231, 30242, 30250, 30260, - 30271, 30280, 30289, 30299, 30308, 30316, 30325, 30331, 30336, 30344, - 30349, 30356, 30361, 30370, 30375, 30380, 30387, 30392, 30397, 30405, - 30413, 30422, 30431, 30436, 30443, 30453, 30461, 30470, 30475, 30481, - 30486, 30493, 30498, 30507, 30512, 30517, 30522, 30529, 30534, 30539, - 30548, 30556, 30561, 30566, 30573, 30580, 30584, 30588, 30591, 30594, - 30597, 30600, 30603, 30606, 30613, 30616, 30619, 30624, 30628, 30632, - 30636, 30640, 30644, 30654, 30660, 30666, 30672, 30680, 30688, 30694, - 30699, 30705, 30711, 30716, 30722, 30728, 30733, 30739, 30745, 30753, - 30758, 30764, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 30770, 30775, 30784, 30792, 30800, 30807, 30814, 30821, 30828, - 30836, 30844, 30854, 30864, 30872, 30880, 30888, 30896, 30905, 30914, - 30922, 30930, 30939, 30948, 30958, 30968, 30977, 30986, 30994, 31002, - 31010, 31018, 31028, 31038, 31046, 31054, 31062, 31070, 31078, 31086, - 31094, 31102, 31109, 31116, 31124, 31132, 31141, 31150, 31159, 31168, - 31178, 31188, 31195, 31202, 31210, 31218, 31227, 31236, 31244, 31252, - 31264, 31276, 31285, 31294, 31303, 31312, 31319, 31326, 31334, 31342, - 31350, 31358, 31366, 31374, 31382, 31390, 31399, 31408, 31417, 31426, - 31435, 31444, 31453, 31462, 31472, 31482, 31491, 31500, 31507, 31514, - 31522, 31530, 31538, 31546, 31554, 31562, 31574, 31586, 31595, 31604, - 31612, 31620, 31628, 31636, 31647, 31658, 31669, 31680, 31692, 31704, - 31712, 31720, 31728, 31736, 31745, 31754, 31763, 31772, 31780, 31788, - 31796, 31804, 31812, 31820, 31829, 31838, 31847, 31856, 31863, 31870, - 31878, 31886, 31894, 31902, 31909, 31916, 31923, 31930, 31938, 31946, - 31954, 31962, 31970, 31978, 31985, 31992, 32000, 32008, 32016, 32024, - 32032, 32040, 32049, 32058, 32067, 32074, 32083, 32092, 32101, 32110, - 32120, 32129, 32135, 32140, 32147, 32154, 32162, 32170, 32179, 32188, - 32198, 32208, 32219, 32230, 32239, 32248, 32258, 32268, 32277, 32286, - 32296, 32306, 32317, 32328, 32337, 32346, 32356, 32366, 32373, 32380, - 32388, 32396, 32402, 32408, 32417, 32426, 32436, 32446, 32457, 32468, - 32477, 32486, 32496, 32506, 32515, 32524, 32532, 32540, 32547, 32554, - 32562, 32570, 32579, 32588, 32598, 32608, 32619, 32630, 32639, 32648, - 32658, 32668, 32677, 32686, 32696, 32706, 32717, 32728, 32737, 32746, - 32756, 32766, 32773, 32780, 32788, 32796, 32805, 32814, 32824, 32834, - 32845, 32856, 32865, 32874, 32884, 32894, 32902, 32910, 32918, 32926, - 32935, 32944, 32951, 32958, 32965, 32972, 32978, 32984, 32992, 33000, - 33008, 33016, 33026, 33036, 33046, 33056, 33066, 33076, 33084, 33092, - 33102, 33112, 33122, 33132, 33142, 33152, 33160, 33168, 33178, 33188, - 33198, 0, 0, 33208, 33216, 33224, 33234, 33244, 33254, 0, 0, 33264, - 33272, 33280, 33290, 33300, 33310, 33320, 33330, 33340, 33348, 33356, - 33366, 33376, 33386, 33396, 33406, 33416, 33424, 33432, 33442, 33452, - 33462, 33472, 33482, 33492, 33500, 33508, 33518, 33528, 33538, 33548, - 33558, 33568, 33576, 33584, 33594, 33604, 33614, 0, 0, 33624, 33632, - 33640, 33650, 33660, 33670, 0, 0, 33680, 33688, 33696, 33706, 33716, - 33726, 33736, 33746, 0, 33756, 0, 33764, 0, 33774, 0, 33784, 33794, - 33802, 33810, 33820, 33830, 33840, 33850, 33860, 33870, 33878, 33886, - 33896, 33906, 33916, 33926, 33936, 33946, 33954, 33962, 33970, 33978, - 33986, 33994, 34002, 34010, 34018, 34026, 34034, 34042, 34050, 0, 0, - 34058, 34068, 34078, 34091, 34104, 34117, 34130, 34143, 34156, 34166, - 34176, 34189, 34202, 34215, 34228, 34241, 34254, 34264, 34274, 34287, - 34300, 34313, 34326, 34339, 34352, 34362, 34372, 34385, 34398, 34411, - 34424, 34437, 34450, 34460, 34470, 34483, 34496, 34509, 34522, 34535, - 34548, 34558, 34568, 34581, 34594, 34607, 34620, 34633, 34646, 34654, - 34662, 34673, 34681, 0, 34692, 34700, 34711, 34719, 34727, 34735, 34743, - 34751, 34754, 34757, 34760, 34763, 34769, 34780, 34788, 0, 34799, 34807, - 34818, 34826, 34834, 34842, 34850, 34858, 34863, 34868, 34873, 34881, - 34889, 34900, 0, 0, 34911, 34919, 34930, 34938, 34946, 34954, 0, 34962, - 34967, 34972, 34977, 34985, 34993, 35004, 35015, 35023, 35031, 35039, - 35050, 35058, 35066, 35074, 35082, 35090, 35096, 35102, 0, 0, 35105, - 35116, 35124, 0, 35135, 35143, 35154, 35162, 35170, 35178, 35186, 35194, - 35197, 0, 35200, 35204, 35208, 35212, 35216, 35220, 35224, 35228, 35232, - 35236, 35240, 35244, 35250, 35256, 35262, 35265, 35268, 35270, 35274, - 35278, 35282, 35286, 35288, 35292, 35296, 35302, 35308, 35315, 35322, - 35327, 35332, 35338, 35344, 35346, 35349, 35351, 35355, 35359, 35363, - 35366, 35370, 35374, 35378, 35382, 35386, 35392, 35396, 35400, 35406, - 35411, 35418, 35420, 35423, 35427, 35430, 35434, 35439, 35441, 35450, - 35459, 35462, 35466, 35468, 35470, 35472, 35475, 35481, 35483, 35487, - 35491, 35498, 35505, 35509, 35514, 35519, 35524, 35528, 35532, 35536, - 35539, 35542, 35546, 35553, 35558, 35562, 35566, 35571, 35575, 35579, - 35584, 35589, 35593, 35597, 35601, 35603, 35608, 35613, 35617, 35621, - 35625, 35629, 0, 0, 0, 0, 0, 35633, 35639, 35645, 35651, 35657, 35662, - 35667, 35671, 0, 0, 35677, 35680, 35683, 35686, 35689, 35692, 35695, - 35699, 35703, 35708, 35713, 35718, 35724, 35728, 35731, 35734, 35737, - 35740, 35743, 35746, 35749, 35752, 35755, 35759, 35763, 35768, 35773, 0, - 35778, 35784, 35790, 35796, 35803, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 35810, 35813, 35816, 35819, 35824, 35827, 35830, 35833, 35836, 35839, - 35842, 35846, 35849, 35852, 35855, 35858, 35861, 35866, 35869, 35872, - 35875, 35878, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 35881, 35886, 35891, 35898, 35906, 35911, 35916, 35920, - 35924, 35929, 35936, 35943, 35947, 35952, 35957, 35962, 35967, 35974, - 35979, 35984, 35989, 35998, 36005, 36011, 36015, 36020, 36026, 36031, - 36038, 36046, 36054, 36058, 36062, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 36066, 36070, 36077, 36081, 36085, 36090, 36094, 36098, 36102, - 36104, 36108, 36111, 36114, 36118, 36121, 36125, 36133, 36136, 36140, - 36143, 36146, 36152, 36155, 36158, 36164, 36168, 36172, 36176, 36179, - 36183, 36186, 36190, 36192, 36195, 36198, 36202, 36204, 36208, 36211, - 36214, 36219, 36224, 36230, 36233, 36236, 36240, 36245, 36248, 36251, - 36254, 36258, 36262, 36265, 36268, 36270, 36273, 36276, 36279, 36283, - 36288, 36291, 36295, 36299, 36303, 36307, 36312, 36316, 36320, 36324, - 36329, 36334, 36339, 36343, 36347, 36352, 36356, 36359, 36362, 36364, - 36368, 0, 0, 0, 36374, 36381, 36388, 36395, 36402, 36409, 36417, 36424, - 36432, 36439, 36446, 36454, 36462, 36467, 36471, 36475, 36479, 36483, - 36487, 36491, 36495, 36499, 36503, 36508, 36513, 36518, 36523, 36529, - 36536, 36542, 36547, 36552, 36557, 36562, 36567, 36572, 36577, 36582, - 36587, 36593, 36599, 36605, 36611, 36618, 36626, 36633, 36643, 36650, - 36657, 36664, 36670, 36678, 36686, 36693, 0, 0, 0, 0, 0, 0, 0, 36701, - 36703, 36706, 36708, 36711, 36714, 36717, 36722, 36727, 36732, 36737, - 36741, 36745, 36749, 36753, 36758, 36764, 36769, 36775, 36780, 36785, - 36790, 36796, 36801, 36807, 36813, 36817, 36821, 36826, 36831, 36836, - 36841, 36846, 36854, 36862, 36870, 36878, 36885, 36893, 36900, 36907, - 36915, 36925, 36932, 36939, 36946, 36953, 36961, 36969, 36976, 36983, - 36991, 36999, 37004, 37012, 37017, 37022, 37028, 37033, 37039, 37046, - 37053, 37058, 37064, 37069, 37072, 37076, 37079, 37083, 37087, 37091, - 37097, 37103, 37109, 37115, 37119, 37123, 37127, 37131, 37137, 37143, - 37147, 37152, 37156, 37161, 37165, 37169, 37172, 37176, 37179, 37183, - 37190, 37198, 37209, 37220, 37225, 37234, 37241, 37249, 37257, 37261, - 37267, 37275, 37279, 37284, 37289, 37295, 37301, 37307, 37314, 37318, - 37322, 37327, 37330, 37332, 37336, 37340, 37347, 37351, 37353, 37355, - 37359, 37366, 37371, 37377, 37386, 37393, 37398, 37402, 37406, 37410, - 37413, 37416, 37419, 37423, 37427, 37431, 37435, 37439, 37442, 37446, - 37450, 37453, 37455, 37458, 37460, 37464, 37468, 37470, 37475, 37478, - 37482, 37486, 37490, 37492, 37494, 37496, 37499, 37503, 37507, 37511, - 37515, 37519, 37525, 37531, 37533, 37535, 37537, 37539, 37542, 37544, - 37548, 37550, 37554, 37556, 37561, 37565, 37569, 37571, 37574, 37578, - 37583, 37587, 37596, 37606, 37610, 37615, 37621, 37624, 37628, 37631, - 37636, 37640, 37646, 37650, 37661, 37669, 37673, 37677, 37683, 37687, - 37690, 37692, 37695, 37699, 37703, 37709, 37713, 37717, 37720, 37723, - 37727, 37732, 37737, 37742, 37747, 37752, 37759, 37766, 37770, 37774, - 37776, 37780, 37783, 37786, 37794, 37802, 37808, 37814, 37823, 37832, - 37837, 37842, 37850, 37858, 37860, 37862, 37867, 37872, 37878, 37884, - 37889, 37894, 37898, 37902, 37908, 37914, 37920, 37926, 37936, 37946, - 37953, 37960, 37962, 37966, 37970, 37975, 37980, 37987, 37994, 37997, - 38000, 38003, 38006, 38009, 38014, 38018, 38023, 38028, 38031, 38034, - 38038, 38042, 38046, 38051, 38054, 38057, 38060, 38063, 38065, 38067, - 38069, 38071, 38079, 38087, 38092, 38095, 38100, 38110, 38116, 38122, - 38128, 38136, 38144, 38155, 38159, 38163, 38165, 38171, 38173, 38175, - 38177, 38179, 38185, 38188, 38194, 38200, 38204, 38208, 38212, 38215, - 38219, 38223, 38225, 38234, 38243, 38248, 38253, 38258, 38264, 38270, - 38273, 38276, 38279, 38282, 38284, 38289, 38294, 38299, 38305, 38311, - 38318, 38325, 38330, 38335, 38340, 38345, 38353, 38361, 38369, 38377, - 38385, 38393, 38401, 38409, 38417, 38425, 38432, 38443, 38452, 38466, - 38469, 38474, 38480, 38486, 38493, 38507, 38522, 38528, 38534, 38541, - 38547, 38555, 38561, 38574, 38588, 38593, 38599, 38606, 38609, 38612, - 38614, 38617, 38620, 38622, 38624, 38628, 38631, 38634, 38637, 38640, - 38645, 38650, 38655, 38660, 38663, 38666, 38668, 38670, 38672, 38676, - 38680, 38684, 38690, 38693, 38695, 38697, 38702, 38707, 38712, 38717, - 38722, 38727, 38729, 38731, 38740, 38744, 38751, 38760, 38762, 38767, - 38772, 38779, 38783, 38785, 38789, 38791, 38795, 38799, 38803, 38805, - 38807, 38809, 38814, 38821, 38828, 38835, 38842, 38849, 38856, 38863, - 38870, 38876, 38882, 38889, 38896, 38903, 38910, 38916, 38922, 38929, - 38936, 38943, 38951, 38958, 38966, 38973, 38981, 38988, 38996, 39004, - 39011, 39019, 39026, 39034, 39041, 39049, 39056, 39063, 39070, 39077, - 39084, 39092, 39099, 39106, 39113, 39120, 39126, 39132, 39138, 39144, - 39152, 39160, 39166, 39172, 39178, 39184, 39189, 39195, 39202, 39210, - 39217, 39224, 39231, 39236, 39241, 39246, 39253, 39260, 39267, 39274, - 39279, 39283, 39292, 39298, 39301, 39309, 39312, 39317, 39322, 39325, - 39328, 39336, 39339, 39344, 39347, 39354, 39359, 39367, 39370, 39373, - 39376, 39381, 39386, 39389, 39392, 39399, 39402, 39407, 39414, 39418, - 39422, 39427, 39432, 39438, 39443, 39448, 39454, 39459, 39464, 39472, - 39478, 39485, 39493, 39499, 39506, 39514, 39523, 39530, 39536, 39544, - 39553, 39560, 39564, 39569, 39581, 39593, 39597, 39601, 39605, 39609, - 39619, 39623, 39628, 39633, 39638, 39643, 39648, 39653, 39663, 39673, - 39681, 39691, 39701, 39709, 39719, 39729, 39737, 39747, 39757, 39765, - 39773, 39783, 39793, 39796, 39799, 39802, 39807, 39811, 39817, 39824, - 39831, 39839, 39846, 39850, 39854, 39858, 39862, 39864, 39868, 39872, - 39877, 39882, 39889, 39896, 39899, 39906, 39908, 39910, 39914, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 39918, - 39922, 39929, 39936, 39943, 39950, 39954, 39958, 39962, 39966, 39971, - 39977, 39982, 39987, 39993, 39999, 40005, 40013, 40020, 40027, 40034, - 40041, 40047, 40053, 40062, 40066, 40073, 40077, 40081, 40087, 40093, - 40099, 40105, 40109, 40113, 40116, 40120, 40124, 40130, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 40136, 40139, - 40143, 40147, 40153, 40159, 40165, 40173, 40180, 40184, 40192, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 40197, 40200, - 40203, 40206, 40209, 40212, 40215, 40218, 40221, 40224, 40228, 40232, - 40236, 40240, 40244, 40248, 40252, 40256, 40260, 40264, 40268, 40271, - 40274, 40277, 40280, 40283, 40286, 40289, 40292, 40295, 40299, 40303, - 40307, 40311, 40315, 40319, 40323, 40327, 40331, 40335, 40339, 40345, - 40351, 40357, 40364, 40371, 40378, 40385, 40392, 40399, 40406, 40413, - 40420, 40427, 40434, 40441, 40448, 40455, 40462, 40469, 40476, 40481, - 40487, 40493, 40499, 40504, 40510, 40515, 40520, 40525, 40531, 40537, - 40542, 40547, 40552, 40557, 40563, 40569, 40574, 40579, 40585, 40590, - 40595, 40601, 40607, 40613, 40619, 40624, 40630, 40636, 40642, 40647, - 40653, 40658, 40663, 40668, 40674, 40680, 40685, 40690, 40695, 40700, - 40706, 40712, 40717, 40722, 40728, 40733, 40738, 40744, 40750, 40756, - 40762, 40767, 40773, 40779, 40785, 40790, 40796, 40801, 40806, 40811, - 40817, 40823, 40828, 40833, 40838, 40843, 40849, 40855, 40860, 40865, - 40871, 40876, 40881, 40887, 40893, 40899, 40905, 40909, 40915, 40921, - 40927, 40933, 40939, 40945, 40951, 40957, 40963, 40969, 40973, 40977, - 40981, 40985, 40989, 40993, 40997, 41001, 41005, 41010, 41016, 41021, - 41026, 41031, 41036, 41045, 41054, 41063, 41072, 41081, 41090, 41099, - 41108, 41115, 41123, 41131, 41138, 41145, 41153, 41161, 41168, 41175, - 41183, 41191, 41198, 41205, 41213, 41221, 41228, 41235, 41243, 41252, - 41261, 41269, 41278, 41287, 41294, 41301, 41309, 41318, 41327, 41335, - 41344, 41353, 41360, 41367, 41376, 41385, 41393, 41401, 41410, 41419, - 41426, 41433, 41442, 41451, 41459, 41467, 41476, 41485, 41492, 41499, - 41508, 41517, 41525, 41534, 41543, 41551, 41561, 41571, 41581, 41591, - 41600, 41609, 41618, 41627, 41634, 41642, 41650, 41658, 41666, 41671, - 41676, 41685, 41693, 41700, 41709, 41717, 41724, 41733, 41741, 41748, - 41757, 41765, 41772, 41781, 41789, 41796, 41805, 41813, 41820, 41829, - 41837, 41844, 41853, 41861, 41868, 41877, 41885, 41892, 41901, 41910, - 41919, 41928, 41940, 41952, 41959, 41964, 41969, 41974, 41979, 41984, - 41989, 41994, 41999, 42007, 42015, 42023, 42031, 42036, 42042, 42048, - 42054, 42058, 42065, 42071, 42078, 42082, 42089, 42095, 42102, 42106, - 42112, 42118, 42124, 42128, 42131, 42135, 42139, 42146, 42152, 42157, - 42162, 42168, 42180, 42189, 42202, 42215, 42221, 42230, 42242, 42245, - 42248, 42255, 42263, 42268, 42273, 42281, 42291, 42301, 42309, 42313, - 42317, 42320, 42323, 42327, 42331, 42334, 42337, 42342, 42347, 42353, - 42359, 42364, 42369, 42375, 42381, 42386, 42391, 42396, 42401, 42407, - 42413, 42418, 42423, 42429, 42435, 42440, 42445, 42448, 42451, 42460, - 42462, 42464, 42467, 42471, 42477, 42479, 42482, 42489, 42496, 42503, - 42511, 42521, 42535, 42540, 42545, 42549, 42554, 42562, 42569, 42578, - 42587, 42595, 42603, 42608, 42612, 42617, 42622, 42628, 42634, 42637, - 42643, 42649, 42659, 42668, 42676, 42684, 42693, 42702, 42706, 42714, - 42721, 42728, 42736, 42745, 42753, 42761, 42770, 42775, 42780, 42784, - 42789, 42794, 42800, 42806, 42810, 42816, 42818, 42820, 42822, 42824, - 42827, 42830, 42832, 42834, 42836, 42840, 42844, 42846, 42848, 42851, - 42854, 42858, 42864, 42870, 42872, 42879, 42883, 42888, 42893, 42895, - 42904, 42910, 42916, 42922, 42928, 42934, 42940, 42945, 42948, 42951, - 42954, 42956, 42958, 42962, 42966, 42971, 42976, 42981, 42984, 42988, - 42993, 42996, 43000, 43005, 43010, 43015, 43020, 43025, 43030, 43035, - 43040, 43045, 43050, 43055, 43060, 43066, 43072, 43078, 43080, 43083, - 43085, 43088, 43090, 43092, 43094, 43096, 43098, 43100, 43102, 43104, - 43106, 43108, 43110, 43112, 43114, 43116, 43118, 43120, 43122, 43127, - 43132, 43137, 43142, 43147, 43152, 43157, 43162, 43167, 43172, 43177, - 43182, 43187, 43192, 43197, 43202, 43207, 43212, 43217, 43222, 43226, - 43230, 43234, 43240, 43246, 43251, 43256, 43261, 43266, 43271, 43276, - 43284, 43292, 43300, 43308, 43316, 43324, 43332, 43340, 43346, 43351, - 43356, 43361, 43364, 43368, 43372, 43376, 43380, 43384, 43388, 43395, - 43402, 43410, 43418, 43423, 43428, 43435, 43442, 43449, 43456, 43459, - 43462, 43467, 43469, 43473, 43478, 43480, 43482, 43484, 43486, 43491, - 43494, 43496, 0, 0, 43501, 43504, 43508, 43513, 43518, 43526, 43532, - 43537, 43548, 43554, 43560, 43565, 43570, 43576, 43579, 43582, 43587, - 43589, 43593, 43595, 43597, 43599, 43601, 43603, 43605, 43610, 43612, - 43614, 43616, 0, 0, 0, 43618, 43623, 43628, 43633, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 43638, 43644, 43647, 43652, 0, 43655, 43660, 43664, - 43666, 0, 0, 43668, 43672, 43676, 43680, 43682, 43687, 43690, 43693, - 43696, 43700, 43704, 43709, 43713, 43718, 43723, 43727, 43733, 43740, - 43743, 43749, 43754, 43758, 43763, 43769, 43775, 43782, 43788, 43795, 0, - 43802, 43809, 43813, 43820, 43826, 43831, 43837, 43841, 43846, 43849, - 43855, 43861, 43868, 43876, 43883, 43892, 43902, 43909, 43915, 43919, - 43927, 43932, 43941, 43944, 43947, 43956, 43967, 43974, 43976, 43982, - 43987, 43989, 43992, 43996, 44004, 0, 44013, 0, 44018, 44025, 44033, - 44040, 0, 0, 0, 44048, 0, 44056, 44059, 44063, 44066, 44077, 44087, - 44097, 0, 0, 44106, 44115, 44121, 44129, 44133, 44141, 44145, 44153, - 44160, 44167, 44176, 44185, 44195, 44205, 44215, 44225, 44234, 44243, - 44253, 44263, 44272, 44281, 44288, 44295, 44302, 44309, 44316, 44323, - 44330, 44337, 44344, 44352, 44358, 44364, 44370, 44376, 44382, 44388, - 44394, 44400, 44406, 44413, 44421, 44429, 44437, 44445, 44453, 44461, - 44469, 44477, 44485, 44494, 0, 0, 0, 44499, 44505, 44508, 44514, 44520, - 44525, 44529, 44534, 44540, 44547, 44550, 44557, 44564, 44568, 44577, - 44586, 44591, 44597, 44602, 44607, 44614, 44621, 44628, 44636, 0, 44644, - 44653, 44658, 44662, 44669, 44673, 44680, 44688, 44693, 44701, 44705, - 44710, 44714, 44719, 0, 44723, 44728, 44737, 44739, 44743, 44747, 44754, - 44761, 44766, 44774, 44780, 0, 44786, 0, 0, 0, 44789, 44797, 44801, - 44808, 44815, 44823, 44828, 44833, 44839, 44844, 44849, 44855, 44860, - 44863, 44867, 44871, 44878, 44887, 44892, 44901, 44910, 44916, 44922, - 44927, 44932, 44937, 44942, 44948, 44954, 44962, 44970, 44976, 44982, - 44987, 44992, 44999, 45006, 45012, 45015, 45018, 45022, 45026, 45030, - 45035, 45041, 45047, 45054, 45061, 45066, 45070, 45074, 45078, 45082, - 45086, 45090, 45094, 45098, 45102, 45106, 45110, 45114, 45118, 45122, - 45126, 45130, 45134, 45138, 45142, 45146, 45150, 45154, 45158, 45162, - 45166, 45170, 45174, 45178, 45182, 45186, 45190, 45194, 45198, 45202, - 45206, 45210, 45214, 45218, 45222, 45226, 45230, 45234, 45238, 45242, - 45246, 45250, 45254, 45258, 45262, 45266, 45270, 45274, 45278, 45282, - 45286, 45290, 45294, 45298, 45302, 45306, 45310, 45314, 45318, 45322, - 45326, 45330, 45334, 45338, 45342, 45346, 45350, 45354, 45358, 45362, - 45366, 45370, 45374, 45378, 45382, 45386, 45390, 45394, 45398, 45402, - 45406, 45410, 45414, 45418, 45422, 45426, 45430, 45434, 45438, 45442, - 45446, 45450, 45454, 45458, 45462, 45466, 45470, 45474, 45478, 45482, - 45486, 45490, 45494, 45498, 45502, 45506, 45510, 45514, 45518, 45522, - 45526, 45530, 45534, 45538, 45542, 45546, 45550, 45554, 45558, 45562, - 45566, 45570, 45574, 45578, 45582, 45586, 45590, 45594, 45598, 45602, - 45606, 45610, 45614, 45618, 45622, 45626, 45630, 45634, 45638, 45642, - 45646, 45650, 45654, 45658, 45662, 45666, 45670, 45674, 45678, 45682, - 45686, 45690, 45694, 45698, 45702, 45706, 45710, 45714, 45718, 45722, - 45726, 45730, 45734, 45738, 45742, 45746, 45750, 45754, 45758, 45762, - 45766, 45770, 45774, 45778, 45782, 45786, 45790, 45794, 45798, 45802, - 45806, 45810, 45814, 45818, 45822, 45826, 45830, 45834, 45838, 45842, - 45846, 45850, 45854, 45858, 45862, 45866, 45870, 45874, 45878, 45882, - 45886, 45890, 45894, 45898, 45902, 45906, 45910, 45914, 45918, 45922, - 45926, 45930, 45934, 45938, 45942, 45946, 45950, 45954, 45958, 45962, - 45966, 45970, 45974, 45978, 45982, 45986, 45990, 45994, 45998, 46002, - 46006, 46010, 46014, 46018, 46022, 46026, 46030, 46034, 46038, 46042, - 46046, 46050, 46054, 46058, 46062, 46066, 46070, 46074, 46078, 46082, - 46086, 46090, 46097, 46105, 46111, 46117, 46124, 46131, 46137, 46143, - 46149, 46155, 46160, 46165, 46170, 46175, 46181, 46187, 46195, 46202, - 46207, 46212, 46220, 46229, 46236, 46246, 46257, 46260, 46263, 46267, - 46271, 46277, 46283, 46293, 46303, 46313, 46323, 46330, 46337, 46344, - 46351, 46362, 46373, 46384, 46395, 46405, 46415, 46427, 46439, 46450, - 46461, 46473, 46485, 46494, 46504, 46514, 46525, 46536, 46543, 46550, - 46557, 46564, 46574, 46584, 46591, 46598, 46605, 46612, 46619, 46626, - 46633, 46638, 46643, 46649, 46657, 46667, 46675, 46683, 46691, 46699, - 46707, 46715, 46723, 46731, 46739, 46747, 46756, 46765, 46773, 46781, - 46790, 46799, 46808, 46817, 46827, 46837, 46846, 46855, 46865, 46875, - 46889, 46906, 46920, 46937, 46951, 46965, 46979, 46993, 47003, 47014, - 47024, 47035, 47052, 47069, 47077, 47083, 47090, 47097, 47104, 47111, - 47116, 47122, 47127, 47132, 47138, 47143, 47148, 47153, 47158, 47163, - 47170, 47175, 47182, 47187, 47192, 47196, 47200, 47207, 47214, 47221, - 47228, 47235, 47242, 47255, 47268, 47281, 47294, 47302, 47310, 47316, - 47322, 47329, 47336, 47343, 47350, 47354, 47359, 47367, 47375, 47383, - 47390, 47394, 47402, 47410, 47413, 47416, 47421, 47427, 47435, 47443, - 47463, 47483, 47503, 47523, 47543, 47563, 47583, 47603, 47608, 47615, - 47624, 47632, 47640, 47645, 47648, 47651, 47656, 47659, 47678, 47685, - 47691, 47697, 47701, 47704, 47707, 47710, 47721, 47733, 47741, 47749, - 47753, 47758, 47762, 47767, 47772, 47777, 47783, 47792, 47799, 47806, - 47814, 47821, 47828, 47831, 47837, 47843, 47846, 47849, 47854, 47859, - 47865, 47871, 47875, 47880, 47887, 47891, 47897, 47901, 47905, 47913, - 47925, 47933, 47937, 47939, 47948, 47957, 47963, 47966, 47972, 47978, - 47983, 47988, 47993, 47998, 48003, 48008, 48010, 48016, 48021, 48028, - 48032, 48038, 48041, 48045, 48052, 48059, 48061, 48063, 48069, 48075, - 48081, 48090, 48099, 48106, 48113, 48119, 48125, 48130, 48135, 48140, - 48146, 48152, 48157, 48164, 48168, 48172, 48185, 48198, 48209, 48218, - 48224, 48231, 48236, 48241, 48246, 48251, 48256, 48258, 48265, 48272, - 48279, 48286, 48293, 48301, 48307, 48312, 48318, 48324, 48330, 48337, - 48343, 48351, 48359, 48367, 48375, 48382, 48388, 48394, 48403, 48407, - 48416, 48425, 48434, 48442, 48446, 48452, 48459, 48466, 48470, 48476, - 48483, 48488, 48493, 48499, 48504, 48509, 48516, 48523, 48528, 48533, - 48541, 48549, 48559, 48569, 48576, 48583, 48587, 48591, 48603, 48609, - 48615, 48620, 48625, 48632, 48639, 48645, 48651, 48660, 48668, 48676, - 48683, 48690, 48697, 48703, 48710, 48716, 48723, 48730, 48737, 48744, - 48750, 48755, 48764, 48774, 48781, 48790, 48796, 48801, 48806, 48815, - 48821, 48827, 48833, 48841, 48846, 48853, 48860, 48871, 48878, 48885, - 48892, 48899, 48906, 48913, 48920, 48931, 48942, 48952, 48962, 48974, - 48986, 48991, 48996, 49004, 49012, 49018, 49024, 49033, 49042, 49050, - 49058, 49066, 49074, 49084, 49094, 49108, 49122, 49129, 49136, 49147, - 49158, 49165, 49172, 49181, 49190, 49195, 49200, 49209, 49218, 49223, - 49228, 49236, 49242, 49248, 49256, 49264, 49277, 49290, 49294, 49298, - 49305, 49312, 49319, 49327, 49335, 49343, 49351, 49357, 49363, 49369, - 49375, 49382, 49389, 49397, 49405, 49408, 49411, 49416, 49421, 49427, - 49433, 49440, 49447, 49456, 49465, 49472, 49479, 49487, 49495, 49503, - 49511, 49518, 49525, 49532, 49539, 49543, 49547, 49554, 49561, 49566, - 49571, 49576, 49581, 49587, 49601, 49608, 49615, 49619, 49621, 49623, - 49628, 49633, 49638, 49642, 49650, 49657, 49664, 49672, 49684, 49692, - 49700, 49711, 49715, 49719, 49723, 49728, 49739, 49746, 49753, 49760, - 49765, 49772, 49781, 49789, 49795, 49801, 49807, 49816, 49825, 49833, - 49842, 49847, 49850, 49855, 49861, 49867, 49873, 49879, 49883, 49886, - 49890, 49894, 49900, 49906, 49912, 49918, 49922, 49926, 49933, 49940, - 49947, 49954, 49961, 49968, 49978, 49987, 49994, 50001, 50009, 50017, - 50021, 50026, 50031, 50037, 50043, 50046, 50049, 50052, 50055, 50059, - 50064, 50069, 50074, 50079, 50084, 50088, 50092, 50096, 50100, 50104, - 50108, 50112, 50118, 50122, 50128, 50133, 50140, 50148, 50155, 50163, - 50170, 50178, 50187, 50194, 50204, 50215, 50221, 50230, 50236, 50245, - 50254, 50260, 50266, 50270, 50274, 50283, 50292, 50299, 50306, 50315, 0, - 0, 0, 50324, 50329, 50333, 50337, 50342, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 50347, 50352, 50357, 50362, 50367, 50372, 50377, - 50382, 50387, 50392, 50397, 50403, 50407, 50412, 50417, 50422, 50427, - 50432, 50437, 50442, 50447, 50452, 50457, 50462, 50467, 50472, 50477, - 50482, 50487, 50492, 50497, 50502, 50507, 50512, 50517, 50523, 50528, - 50534, 50543, 50548, 50556, 50563, 50572, 50577, 50582, 50587, 50593, 0, - 50600, 50605, 50610, 50615, 50620, 50625, 50630, 50635, 50640, 50645, - 50650, 50656, 50660, 50665, 50670, 50675, 50680, 50685, 50690, 50695, - 50700, 50705, 50710, 50715, 50720, 50725, 50730, 50735, 50740, 50745, - 50750, 50755, 50760, 50765, 50770, 50776, 50781, 50787, 50796, 50801, - 50809, 50816, 50825, 50830, 50835, 50840, 50846, 0, 50853, 50861, 50869, - 50878, 50885, 50893, 50899, 50908, 50916, 50924, 50932, 50940, 50948, - 50956, 50961, 50968, 0, 50973, 50981, 50988, 50995, 51003, 51008, 51013, - 51020, 51027, 51036, 51046, 51052, 51059, 0, 0, 51063, 51068, 51073, - 51078, 51083, 51088, 51093, 51098, 51103, 51108, 51113, 51118, 51123, - 51128, 51133, 51138, 51143, 51148, 51153, 51158, 51163, 51168, 51173, - 51178, 51183, 51188, 51193, 51198, 51203, 51208, 51213, 51217, 51221, - 51226, 51231, 51236, 51241, 51246, 51251, 51256, 51261, 51266, 51271, - 51276, 51281, 51286, 51291, 51296, 51301, 51306, 51311, 51318, 51325, - 51332, 51339, 51346, 51353, 51360, 51367, 51374, 51381, 51388, 51395, - 51402, 51409, 51414, 51419, 51426, 51433, 51440, 51447, 51454, 51461, - 51468, 51475, 51482, 51489, 51496, 51503, 51509, 51515, 51521, 51527, - 51534, 51541, 51548, 51555, 51562, 51569, 51576, 51583, 51590, 51597, - 51605, 51613, 51621, 51629, 51637, 51645, 51653, 51661, 51665, 51671, - 51677, 51681, 51687, 51693, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 51699, 51707, 51716, 51725, 51733, 51739, 51744, 51749, 51754, 51759, - 51764, 51769, 51774, 51779, 51784, 51789, 51794, 51799, 51804, 51809, - 51814, 51819, 51824, 51829, 51834, 51839, 51844, 51849, 51854, 51859, - 51864, 51869, 51874, 51879, 51884, 51889, 51894, 51899, 51904, 51909, - 51914, 51919, 51924, 51929, 51934, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 51939, - 51942, 51946, 51950, 51954, 51958, 51966, 51970, 51974, 51978, 51982, - 51986, 51990, 51994, 51998, 52004, 52008, 52012, 52020, 52026, 52030, - 52034, 52038, 52044, 52048, 52054, 52058, 52062, 52068, 52074, 52078, - 52082, 52086, 52092, 52098, 52102, 52106, 52110, 52114, 52118, 52124, - 52130, 52134, 52138, 52142, 52146, 52150, 52154, 52158, 52162, 52166, - 52170, 52174, 52180, 0, 0, 0, 0, 0, 0, 0, 0, 0, 52184, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 52190, 52194, 52198, 52202, 52206, 52210, - 52214, 52218, 52222, 52226, 52230, 52236, 52240, 52244, 52248, 52252, - 52256, 52260, 52264, 52268, 52272, 52276, 52280, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 52284, 52288, 52292, 52296, 52300, 52304, 52308, 0, 52312, 52316, - 52320, 52324, 52328, 52332, 52336, 0, 52340, 52344, 52348, 52352, 52356, - 52360, 52364, 0, 52368, 52372, 52376, 52380, 52384, 52388, 52392, 0, - 52396, 52400, 52404, 52408, 52412, 52416, 52420, 0, 52424, 52428, 52432, - 52436, 52440, 52444, 52448, 0, 52452, 52456, 52460, 52464, 52468, 52472, - 52476, 0, 52480, 52484, 52488, 52492, 52496, 52500, 52504, 0, 52508, - 52513, 52518, 52523, 52528, 52533, 52538, 52542, 52547, 52552, 52557, - 52561, 52566, 52571, 52576, 52581, 52585, 52590, 52595, 52600, 52605, - 52610, 52615, 52619, 52624, 52629, 52636, 52641, 52646, 52652, 52659, - 52666, 52675, 52682, 52691, 52695, 52699, 52705, 52711, 52717, 52725, - 52731, 52735, 52739, 52743, 52749, 52755, 52759, 52761, 52765, 52770, - 52772, 52776, 52780, 52784, 52790, 52795, 52799, 52803, 52807, 52813, - 52818, 52823, 52828, 52833, 52840, 52847, 52852, 52857, 52862, 52867, - 52872, 52877, 52881, 52885, 52892, 52899, 52906, 52910, 52914, 52916, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 52920, 52924, 52928, 52933, 52938, 52943, 52947, 52951, - 52955, 52960, 52965, 52969, 52973, 52977, 52981, 52986, 52991, 52996, - 53001, 53005, 53009, 53014, 53019, 53024, 53029, 53033, 0, 53037, 53041, - 53045, 53049, 53053, 53057, 53061, 53066, 53071, 53075, 53080, 53085, - 53094, 53098, 53102, 53106, 53113, 53117, 53122, 53127, 53131, 53135, - 53141, 53146, 53151, 53156, 53161, 53165, 53169, 53173, 53177, 53181, - 53186, 53191, 53195, 53199, 53204, 53209, 53214, 53218, 53222, 53227, - 53232, 53238, 53244, 53248, 53254, 53260, 53264, 53270, 53276, 53281, - 53286, 53290, 53296, 53300, 53304, 53310, 53316, 53321, 53326, 53330, - 53334, 53342, 53348, 53354, 53360, 53365, 53370, 53375, 53381, 53385, - 53391, 53395, 53399, 53405, 53411, 53417, 53423, 53429, 53435, 53441, - 53447, 53453, 53459, 53465, 53471, 53475, 53481, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 53487, 53490, 53494, 53498, 53502, 53506, 53509, 53512, - 53516, 53520, 53524, 53528, 53531, 53536, 53540, 53544, 53548, 53554, - 53558, 53562, 53566, 53570, 53577, 53583, 53587, 53591, 53595, 53599, - 53603, 53607, 53611, 53615, 53619, 53623, 53627, 53633, 53637, 53641, - 53645, 53649, 53653, 53657, 53661, 53665, 53669, 53673, 53677, 53681, - 53685, 53689, 53693, 53697, 53703, 53709, 53714, 53719, 53723, 53727, - 53731, 53735, 53739, 53743, 53747, 53751, 53755, 53759, 53763, 53767, - 53771, 53775, 53779, 53783, 53787, 53791, 53795, 53799, 53803, 53807, - 53811, 53815, 53821, 53825, 53829, 53833, 53837, 53841, 53845, 53849, - 53853, 53858, 53865, 53869, 53873, 53877, 53881, 53885, 53889, 53893, - 53897, 53901, 53905, 53909, 53913, 53920, 53924, 53930, 53934, 53938, - 53942, 53946, 53950, 53953, 53957, 53961, 53965, 53969, 53973, 53977, - 53981, 53985, 53989, 53993, 53997, 54001, 54005, 54009, 54013, 54017, - 54021, 54025, 54029, 54033, 54037, 54041, 54045, 54049, 54053, 54057, - 54061, 54065, 54069, 54073, 54077, 54081, 54087, 54091, 54095, 54099, - 54103, 54107, 54111, 54115, 54119, 54123, 54127, 54131, 54135, 54139, - 54143, 54147, 54151, 54155, 54159, 54163, 54167, 54171, 54175, 54179, - 54183, 54187, 54191, 54195, 54203, 54207, 54211, 54215, 54219, 54223, - 54229, 54233, 54237, 54241, 54245, 54249, 54253, 54257, 54261, 54265, - 54269, 54273, 54277, 54281, 54287, 54291, 54295, 54299, 54303, 54307, - 54311, 54315, 54319, 54323, 54327, 54331, 54335, 54339, 54343, 54347, - 54351, 54355, 54359, 54363, 54367, 54371, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 54375, 54383, 54390, - 54401, 54411, 54419, 54428, 54437, 54447, 54459, 54471, 54482, 0, 0, 0, - 0, 54488, 54491, 54494, 54499, 54502, 54509, 54513, 54517, 54521, 54525, - 54529, 54534, 54539, 54543, 54547, 54552, 54557, 54562, 54567, 54570, - 54573, 54579, 54585, 54590, 54595, 54602, 54609, 54613, 54617, 54621, - 54628, 54634, 54641, 54646, 54650, 54654, 54658, 54662, 54666, 54670, - 54674, 54678, 54682, 54687, 54692, 54697, 54702, 54708, 54713, 54717, - 54723, 54734, 54744, 54759, 54768, 54772, 54781, 54786, 54791, 54796, - 54801, 54804, 54809, 54813, 0, 54819, 54823, 54826, 54830, 54833, 54837, - 54840, 54844, 54847, 54851, 54854, 54857, 54861, 54865, 54869, 54873, - 54877, 54881, 54885, 54889, 54893, 54897, 54901, 54905, 54909, 54913, - 54917, 54921, 54925, 54929, 54933, 54937, 54941, 54945, 54949, 54954, - 54958, 54962, 54966, 54970, 54973, 54977, 54981, 54985, 54989, 54993, - 54997, 55000, 55004, 55007, 55011, 55015, 55019, 55023, 55027, 55031, - 55035, 55039, 55043, 55047, 55051, 55055, 55058, 55062, 55066, 55070, - 55074, 55078, 55081, 55086, 55090, 55095, 55099, 55102, 55106, 55110, - 55114, 55118, 55123, 55127, 55131, 55135, 55139, 55142, 55146, 55150, 0, - 0, 55155, 55163, 55171, 55178, 55185, 55189, 55195, 55200, 55205, 55209, - 55212, 55216, 55219, 55223, 55226, 55230, 55233, 55237, 55240, 55243, - 55247, 55251, 55255, 55259, 55263, 55267, 55271, 55275, 55279, 55283, - 55287, 55291, 55295, 55299, 55303, 55307, 55311, 55315, 55319, 55323, - 55327, 55331, 55335, 55340, 55344, 55348, 55352, 55356, 55359, 55363, - 55367, 55371, 55375, 55379, 55383, 55386, 55390, 55393, 55397, 55401, - 55405, 55409, 55413, 55417, 55421, 55425, 55429, 55433, 55437, 55441, - 55444, 55448, 55452, 55456, 55460, 55464, 55467, 55472, 55476, 55481, - 55485, 55488, 55492, 55496, 55500, 55504, 55509, 55513, 55517, 55521, - 55525, 55528, 55532, 55536, 55541, 55545, 55549, 55553, 55557, 55562, - 55569, 55573, 55579, 0, 0, 0, 0, 0, 55584, 55588, 55592, 55595, 55599, - 55603, 55607, 55610, 55613, 55616, 55620, 55623, 55627, 55631, 55635, - 55639, 55643, 55647, 55650, 55654, 55658, 55661, 55664, 55667, 55670, - 55674, 55678, 55682, 55686, 55690, 55694, 55698, 55702, 55706, 55710, - 55713, 55716, 55720, 55723, 55727, 55731, 0, 0, 0, 55735, 55739, 55743, - 55747, 55751, 55755, 55759, 55763, 55767, 55771, 55775, 55779, 55783, - 55787, 55791, 55795, 55799, 55803, 55807, 55811, 55815, 55819, 55823, - 55827, 55831, 55835, 55839, 55843, 55847, 55851, 55855, 55858, 55862, - 55865, 55869, 55873, 55876, 55880, 55884, 55887, 55891, 55895, 55899, - 55903, 55906, 55910, 55914, 55918, 55922, 55926, 55930, 55933, 55936, - 55940, 55944, 55948, 55952, 55956, 55960, 55964, 55968, 55972, 55976, - 55980, 55984, 55988, 55992, 55996, 56000, 56004, 56008, 56012, 56016, - 56020, 56024, 56028, 56032, 56036, 56040, 56044, 56048, 56052, 56056, - 56060, 56064, 56068, 56072, 56076, 56080, 56084, 56088, 56092, 56096, - 56100, 0, 56104, 56110, 56116, 56121, 56126, 56131, 56137, 56143, 56149, - 56155, 56161, 56167, 56173, 56179, 56185, 56191, 56197, 56201, 56205, - 56209, 56213, 56217, 56221, 56225, 56229, 56233, 56237, 56241, 56245, - 56249, 56253, 56257, 56261, 56265, 56269, 56273, 56277, 56282, 56287, - 56292, 0, 0, 0, 0, 0, 0, 0, 0, 56296, 56300, 56304, 56308, 56312, 56316, - 56320, 56324, 56328, 56332, 56336, 56340, 56344, 56348, 56352, 56356, - 56359, 56362, 56365, 56369, 56373, 56377, 56381, 56385, 56389, 56393, - 56397, 56401, 56405, 56409, 56413, 56417, 56421, 56425, 56429, 56433, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 56437, 56442, 56447, 56452, 56456, - 56461, 56465, 56470, 56475, 56480, 56485, 56490, 56494, 56499, 56504, - 56509, 56514, 56518, 56522, 56526, 56530, 56534, 56538, 56542, 56546, - 56550, 56554, 56558, 56562, 56566, 56570, 56575, 56580, 56585, 56590, - 56595, 56600, 56605, 56610, 56615, 56620, 56625, 56630, 56635, 56640, - 56645, 56651, 0, 56658, 56661, 56664, 56667, 56670, 56673, 56676, 56679, - 56682, 56685, 56689, 56693, 56697, 56701, 56705, 56709, 56713, 56717, - 56721, 56725, 56729, 56733, 56737, 56741, 56745, 56749, 56753, 56757, - 56761, 56765, 56769, 56773, 56777, 56781, 56785, 56789, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 56793, 56796, 56801, 56806, 56811, 56816, 56821, 56826, - 56831, 56836, 56841, 56845, 56850, 56855, 56860, 56865, 56870, 56874, - 56878, 56882, 56886, 56890, 56894, 56898, 56902, 56906, 56910, 56914, - 56918, 56922, 56926, 56931, 56936, 56941, 56946, 56951, 56956, 56961, - 56966, 56971, 56976, 56981, 56986, 56991, 56996, 57002, 57008, 57013, - 57018, 57021, 57024, 57027, 57030, 57033, 57036, 57039, 57042, 57045, - 57049, 57053, 57057, 57061, 57065, 57069, 57073, 57077, 57081, 57085, - 57089, 57093, 57097, 57101, 57105, 57109, 57113, 57117, 57121, 57125, - 57129, 57133, 57137, 57141, 57145, 57149, 57153, 57157, 57161, 57165, - 57169, 57173, 57177, 57181, 57185, 57189, 57193, 57197, 57201, 57205, - 57210, 57215, 57220, 57225, 57229, 57234, 57239, 57244, 57249, 57254, - 57259, 57264, 57269, 57274, 57278, 57284, 57290, 57296, 57302, 57308, - 57314, 57320, 57326, 57332, 57338, 57344, 57350, 57353, 57356, 57359, - 57364, 57367, 57370, 57373, 57376, 57379, 57382, 57386, 57390, 57394, - 57398, 57402, 57406, 57410, 57414, 57418, 57422, 57426, 57430, 57434, - 57437, 57441, 57445, 57449, 57453, 57457, 57460, 57464, 57468, 57472, - 57476, 57479, 57483, 57487, 57491, 57495, 57498, 57502, 57506, 57509, - 57513, 57517, 57521, 57525, 57529, 57533, 57537, 0, 57541, 57544, 57547, - 57550, 57553, 57556, 57559, 57562, 57565, 57568, 57571, 57574, 57577, - 57580, 57583, 57586, 57589, 57592, 57595, 57598, 57601, 57604, 57607, - 57610, 57613, 57616, 57619, 57622, 57625, 57628, 57631, 57634, 57637, - 57640, 57643, 57646, 57649, 57652, 57655, 57658, 57661, 57664, 57667, - 57670, 57673, 57676, 57679, 57682, 57685, 57688, 57691, 57694, 57697, - 57700, 57703, 57706, 57709, 57712, 57715, 57718, 57721, 57724, 57727, - 57730, 57733, 57736, 57739, 57742, 57745, 57748, 57751, 57754, 57757, - 57760, 57763, 57766, 57769, 57772, 57775, 57778, 57781, 57784, 57787, - 57790, 57793, 57796, 57799, 57802, 57805, 57813, 57820, 57827, 57834, - 57841, 57848, 57855, 57862, 57869, 57876, 57884, 57892, 57900, 57908, - 57916, 57924, 57932, 57940, 57948, 57956, 57964, 57972, 57980, 57988, - 57996, 57999, 58002, 58005, 58007, 58010, 58013, 58016, 58021, 58026, - 58029, 58036, 58043, 58050, 58057, 58060, 58065, 58068, 58072, 58074, - 58076, 58079, 58082, 58085, 58088, 58091, 58094, 58097, 58102, 58106, - 58109, 58112, 58115, 58118, 58121, 58124, 58127, 58131, 58134, 58137, - 58140, 58143, 58146, 58150, 58153, 58156, 58159, 58164, 58169, 58174, - 58179, 58184, 58189, 58194, 58199, 58204, 58212, 58214, 58217, 58220, - 58223, 58226, 58231, 58239, 58242, 58245, 58249, 58252, 58255, 58258, - 58262, 58265, 58268, 58273, 58276, 58279, 58284, 58287, 58290, 58295, - 58300, 58305, 58308, 58311, 58314, 58317, 58323, 58326, 58329, 58332, - 58334, 58337, 58340, 58343, 58348, 58351, 58354, 58357, 58360, 58363, - 58368, 58371, 58374, 58377, 58380, 58383, 58386, 58389, 58392, 58395, - 58400, 58404, 58411, 58418, 58425, 58432, 58439, 58446, 58453, 58460, - 58467, 58475, 58483, 58491, 58499, 58507, 58515, 58523, 58531, 58539, - 58547, 58555, 58563, 58571, 58579, 58587, 58595, 58603, 58611, 58619, - 58627, 58635, 58643, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 19298, 19302, 19306, 19310, 19314, 19318, 19322, 19326, 19330, 19334, + 19338, 19342, 19346, 19350, 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, 19522, 19526, 19530, 19534, + 19538, 19542, 19546, 19550, 19554, 19558, 19562, 19566, 19570, 19574, + 19578, 19582, 19586, 19590, 19594, 19598, 19602, 19606, 19610, 19614, + 19618, 19622, 19626, 19630, 19634, 19638, 19642, 19646, 19650, 19654, + 19658, 19662, 19666, 19670, 19674, 19678, 19682, 19686, 19690, 19694, + 19698, 19702, 19706, 19710, 19714, 19718, 19722, 19726, 19730, 19734, + 19738, 19742, 19746, 19750, 19754, 19758, 19762, 19766, 19770, 19774, + 19778, 19782, 19786, 19790, 19794, 19798, 19801, 19805, 19809, 19813, + 19817, 19821, 19825, 19829, 19833, 19837, 19841, 19845, 19849, 19853, + 19857, 19861, 19865, 19869, 19873, 19877, 19881, 19885, 19889, 19893, + 19896, 19900, 19904, 19908, 19912, 19916, 19920, 19924, 19928, 19932, + 19936, 19940, 19944, 19948, 19952, 19956, 19959, 19963, 19967, 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, 0, 20087, 20091, + 20095, 20099, 0, 0, 20103, 20107, 20111, 20115, 20119, 20123, 20127, 0, + 20131, 0, 20135, 20139, 20143, 20147, 0, 0, 20151, 20155, 20159, 20163, + 20167, 20171, 20175, 20179, 20183, 20187, 20191, 20195, 20199, 20203, + 20207, 20211, 20215, 20219, 20223, 20227, 20231, 20235, 20239, 20242, + 20246, 20250, 20254, 20258, 20262, 20266, 20270, 20274, 20278, 20282, + 20286, 20290, 20294, 20298, 20302, 20306, 20310, 0, 20314, 20318, 20322, + 20326, 0, 0, 20330, 20333, 20337, 20341, 20345, 20349, 20353, 20357, + 20361, 20365, 20369, 20373, 20377, 20381, 20385, 20389, 20393, 20398, + 20403, 20408, 20414, 20420, 20425, 20430, 20436, 20439, 20443, 20447, + 20451, 20455, 20459, 20463, 20467, 0, 20471, 20475, 20479, 20483, 0, 0, + 20487, 20491, 20495, 20499, 20503, 20507, 20511, 0, 20515, 0, 20519, + 20523, 20527, 20531, 0, 0, 20535, 20539, 20543, 20547, 20551, 20555, + 20559, 20563, 20567, 20572, 20577, 20582, 20588, 20594, 20599, 0, 20604, + 20608, 20612, 20616, 20620, 20624, 20628, 20632, 20636, 20640, 20644, + 20648, 20652, 20656, 20660, 20664, 20668, 20671, 20675, 20679, 20683, + 20687, 20691, 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, 0, 20831, 20835, 20839, 20843, + 0, 0, 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, 21074, 21078, + 21082, 21086, 21090, 21094, 21098, 21102, 21106, 21110, 0, 0, 0, 0, + 21114, 21119, 21123, 21126, 21131, 21134, 21137, 21140, 21145, 21149, + 21154, 21157, 21160, 21163, 21166, 21169, 21172, 21175, 21178, 21181, + 21185, 21189, 21193, 21197, 21201, 21205, 21209, 21213, 21217, 21221, 0, + 0, 0, 21227, 21233, 21237, 21241, 21245, 21251, 21255, 21259, 21263, + 21269, 21273, 21277, 21281, 21287, 21291, 21295, 21299, 21305, 21311, + 21317, 21325, 21331, 21337, 21343, 21349, 21355, 0, 0, 0, 0, 0, 0, 21361, + 21364, 21367, 21370, 21373, 21376, 21380, 21384, 21387, 21391, 21395, + 21399, 21403, 21407, 21410, 21414, 21418, 21422, 21426, 21430, 21434, + 21438, 21442, 21446, 21450, 21454, 21457, 21461, 21465, 21469, 21473, + 21476, 21480, 21484, 21488, 21492, 21496, 21500, 21504, 21508, 21512, + 21516, 21520, 21524, 21528, 21532, 21535, 21539, 21543, 21547, 21551, + 21555, 21559, 21563, 21567, 21571, 21575, 21579, 21583, 21587, 21591, + 21595, 21599, 21603, 21607, 21611, 21615, 21619, 21623, 21627, 21631, + 21635, 21639, 21643, 21647, 21651, 21655, 21659, 21663, 21667, 21670, + 21674, 21678, 21682, 21686, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 21690, + 21694, 21697, 21701, 21704, 21708, 21711, 21715, 21721, 21726, 21730, + 21733, 21737, 21741, 21746, 21750, 21755, 21759, 21764, 21768, 21773, + 21777, 21782, 21788, 21792, 21797, 21801, 21806, 21812, 21816, 21822, + 21828, 21832, 21837, 21845, 21853, 21860, 21865, 21870, 21879, 21886, + 21893, 21898, 21904, 21908, 21912, 21916, 21920, 21924, 21928, 21932, + 21936, 21940, 21944, 21950, 21955, 21960, 21963, 21967, 21971, 21976, + 21980, 21985, 21989, 21994, 21998, 22003, 22007, 22012, 22016, 22021, + 22025, 22030, 22036, 22040, 22045, 22050, 22054, 22058, 22062, 22066, + 22069, 22073, 22079, 22084, 22089, 22093, 22097, 22101, 22106, 22110, + 22115, 22119, 22124, 22127, 22131, 22135, 22140, 22144, 22149, 22153, + 22158, 22164, 22168, 22172, 22176, 22180, 22184, 22188, 22192, 22196, + 22200, 22204, 22208, 22214, 22217, 22221, 22225, 22230, 22234, 22239, + 22243, 22248, 22252, 22257, 22261, 22266, 22270, 22275, 22279, 22284, + 22290, 22294, 22298, 22304, 22310, 22316, 22322, 22326, 22330, 22334, + 22338, 22342, 22346, 22352, 22356, 22360, 22364, 22369, 22373, 22378, + 22382, 22387, 22391, 22396, 22400, 22405, 22409, 22414, 22418, 22423, + 22429, 22433, 22439, 22443, 22447, 22451, 22455, 22459, 22463, 22469, + 22472, 22476, 22480, 22485, 22489, 22494, 22498, 22503, 22507, 22512, + 22516, 22521, 22525, 22530, 22534, 22539, 22545, 22548, 22552, 22556, + 22561, 22566, 22570, 22574, 22578, 22582, 22586, 22590, 22596, 22599, + 22603, 22607, 22612, 22616, 22621, 22625, 22630, 22636, 22639, 22644, + 22648, 22652, 22656, 22660, 22664, 22668, 22672, 22678, 22682, 22686, + 22690, 22695, 22699, 22704, 22708, 22713, 22717, 22722, 22726, 22731, + 22735, 22740, 22744, 22749, 22752, 22756, 22760, 22764, 22768, 22772, + 22776, 22780, 22784, 22790, 22794, 22798, 22802, 22807, 22811, 22816, + 22820, 22825, 22829, 22834, 22838, 22843, 22847, 22852, 22856, 22861, + 22867, 22870, 22875, 22879, 22884, 22890, 22896, 22902, 22908, 22914, + 22920, 22926, 22930, 22934, 22938, 22942, 22946, 22950, 22954, 22958, + 22963, 22967, 22972, 22976, 22981, 22985, 22990, 22994, 22999, 23003, + 23008, 23012, 23017, 23021, 23025, 23029, 23033, 23037, 23041, 23045, + 23051, 23054, 23058, 23062, 23067, 23071, 23076, 23080, 23085, 23089, + 23094, 23098, 23103, 23107, 23112, 23116, 23121, 23127, 23131, 23137, + 23142, 23148, 23152, 23158, 23163, 23167, 23171, 23175, 23179, 23183, + 23188, 23191, 23195, 23200, 23204, 23209, 23212, 23216, 23220, 23224, + 23228, 23232, 23236, 23240, 23244, 23248, 23252, 23256, 23261, 23265, + 23269, 23275, 23279, 23285, 23289, 23295, 23299, 23303, 23307, 23311, + 23315, 23320, 23324, 23328, 23332, 23336, 23340, 23344, 23348, 23352, + 23356, 23360, 23366, 23372, 23378, 23384, 23390, 23395, 23401, 23407, + 23413, 23417, 23421, 23425, 23429, 23433, 23437, 23441, 23445, 23449, + 23453, 23457, 23461, 23465, 23470, 23475, 23480, 23484, 23488, 23492, + 23496, 23500, 23504, 23508, 23512, 23516, 23520, 23526, 23532, 23538, + 23544, 23550, 23556, 23562, 23568, 23574, 23578, 23582, 23586, 23590, + 23594, 23598, 23602, 23608, 23614, 23620, 23626, 23632, 23638, 23644, + 23650, 23656, 23661, 23666, 23671, 23676, 23682, 23688, 23694, 23700, + 23706, 23712, 23718, 23723, 23729, 23735, 23741, 23746, 23752, 23758, + 23764, 23769, 23774, 23779, 23784, 23789, 23794, 23799, 23804, 23809, + 23814, 23819, 23824, 23828, 23833, 23838, 23843, 23848, 23853, 23858, + 23863, 23868, 23873, 23878, 23883, 23888, 23893, 23898, 23903, 23908, + 23913, 23918, 23923, 23928, 23933, 23938, 23943, 23948, 23953, 23958, + 23963, 23968, 23973, 23977, 23982, 23987, 23992, 23997, 24002, 24007, + 24012, 24017, 24022, 24027, 24032, 24037, 24042, 24047, 24052, 24057, + 24062, 24067, 24072, 24077, 24082, 24087, 24092, 24097, 24102, 24106, + 24111, 24116, 24121, 24126, 24131, 24135, 24140, 24145, 24150, 24155, + 24160, 24164, 24169, 24175, 24180, 24185, 24190, 24195, 24201, 24206, + 24211, 24216, 24221, 24226, 24231, 24236, 24241, 24246, 24251, 24256, + 24261, 24266, 24271, 24276, 24281, 24286, 24291, 24296, 24301, 24306, + 24311, 24316, 24321, 24326, 24331, 24336, 24341, 24346, 24351, 24356, + 24361, 24366, 24371, 24376, 24381, 24386, 24391, 24396, 24401, 24406, + 24411, 24416, 24421, 24427, 24432, 24437, 24442, 24447, 24452, 24457, + 24462, 24467, 24472, 24477, 24482, 24487, 24492, 24497, 24502, 24507, + 24512, 24517, 24522, 24527, 24532, 24537, 24542, 24547, 24552, 24557, + 24562, 24567, 24572, 24577, 24582, 24587, 24592, 24597, 24602, 24607, + 24612, 24617, 24623, 24627, 24631, 24635, 24639, 24643, 24647, 24651, + 24655, 24661, 24667, 24673, 24679, 24685, 24691, 24697, 24704, 24710, + 24715, 24720, 24725, 24730, 24735, 24740, 24745, 24750, 24755, 24760, + 24765, 24770, 24775, 24780, 24785, 24790, 24795, 24800, 24805, 24810, + 24815, 24820, 24825, 24830, 24835, 24840, 24845, 24850, 0, 0, 0, 24856, + 24866, 24870, 24877, 24881, 24885, 24889, 24897, 24901, 24906, 24911, + 24916, 24920, 24925, 24930, 24933, 24937, 24941, 24950, 24954, 24958, + 24964, 24968, 24972, 24980, 24984, 24992, 24998, 25004, 25010, 25016, + 25025, 25030, 25034, 25043, 25046, 25052, 25056, 25062, 25067, 25073, + 25081, 25087, 25092, 25099, 25104, 25108, 25112, 25122, 25128, 25132, + 25142, 25148, 25152, 25156, 25163, 25170, 25175, 25180, 25189, 25193, + 25197, 25201, 25209, 25216, 25220, 25224, 25228, 25232, 25236, 25240, + 25244, 25248, 25252, 25256, 25260, 25265, 25270, 25275, 25279, 25283, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 25287, 25291, 25295, 25299, + 25303, 25308, 25313, 25318, 25323, 25327, 25331, 25336, 25340, 0, 25344, + 25349, 25354, 25359, 25363, 25368, 25373, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 25378, 25382, 25386, 25390, 25394, 25399, 25404, 25409, 25414, 25418, + 25422, 25427, 25431, 25435, 25439, 25444, 25449, 25454, 25458, 25463, + 25468, 25473, 25479, 0, 0, 0, 0, 0, 0, 0, 0, 0, 25484, 25488, 25492, + 25496, 25500, 25505, 25510, 25515, 25520, 25524, 25528, 25533, 25537, + 25541, 25545, 25550, 25555, 25560, 25564, 25569, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 25574, 25578, 25582, 25586, 25590, 25595, 25600, 25605, + 25610, 25614, 25618, 25623, 25627, 0, 25631, 25636, 25641, 0, 25646, + 25651, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 25656, 25659, 25663, 25667, + 25671, 25675, 25679, 25683, 25687, 25691, 25695, 25699, 25703, 25707, + 25711, 25715, 25719, 25723, 25726, 25730, 25734, 25738, 25742, 25746, + 25750, 25754, 25758, 25762, 25766, 25770, 25774, 25778, 25782, 25785, + 25789, 25793, 25799, 25805, 25811, 25817, 25823, 25829, 25835, 25841, + 25847, 25853, 25859, 25865, 25871, 25877, 25886, 25895, 25901, 25907, + 25913, 25918, 25922, 25927, 25932, 25937, 25941, 25946, 25951, 25956, + 25960, 25965, 25969, 25974, 25979, 25984, 25989, 25993, 25997, 26001, + 26005, 26009, 26013, 26017, 26021, 26025, 26029, 26035, 26039, 26043, + 26047, 26051, 26055, 26063, 26069, 26073, 26079, 26083, 26089, 26093, 0, + 0, 26097, 26101, 26104, 26107, 26110, 26113, 26116, 26119, 26122, 26125, + 0, 0, 0, 0, 0, 0, 26128, 26136, 26144, 26152, 26160, 26168, 26176, 26184, + 26192, 26200, 0, 0, 0, 0, 0, 0, 26208, 26211, 26214, 26217, 26222, 26225, + 26230, 26237, 26245, 26250, 26257, 26260, 26267, 26274, 26281, 0, 26285, + 26289, 26292, 26295, 26298, 26301, 26304, 26307, 26310, 26313, 0, 0, 0, + 0, 0, 0, 26316, 26319, 26322, 26325, 26328, 26331, 26335, 26339, 26343, + 26346, 26350, 26354, 26357, 26361, 26365, 26368, 26372, 26376, 26380, + 26384, 26388, 26392, 26396, 26399, 26402, 26406, 26410, 26413, 26417, + 26421, 26425, 26429, 26433, 26437, 26441, 26445, 26452, 26457, 26462, + 26467, 26472, 26478, 26484, 26490, 26496, 26501, 26507, 26513, 26518, + 26524, 26530, 26536, 26542, 26548, 26553, 26559, 26564, 26570, 26576, + 26582, 26588, 26594, 26599, 26604, 26610, 26616, 26621, 26627, 26632, + 26638, 26643, 26648, 26654, 26660, 26666, 26672, 26678, 26684, 26690, + 26696, 26702, 26708, 26714, 26720, 26725, 26730, 26735, 26741, 0, 0, 0, + 0, 0, 0, 0, 0, 26747, 26756, 26765, 26773, 26781, 26791, 26799, 26808, + 26815, 26822, 26829, 26837, 26845, 26853, 26861, 26869, 26877, 26885, + 26893, 26900, 26908, 26916, 26924, 26932, 26940, 26950, 26960, 26970, + 26980, 26990, 27000, 27010, 27020, 27030, 27040, 27050, 27060, 27070, + 27080, 27088, 27096, 27106, 27114, 0, 0, 0, 0, 0, 27124, 27128, 27132, + 27136, 27140, 27144, 27148, 27152, 27156, 27160, 27164, 27168, 27172, + 27176, 27180, 27184, 27188, 27192, 27196, 27200, 27204, 27208, 27212, + 27216, 27222, 27226, 27232, 27236, 27242, 27246, 27252, 27256, 27260, + 27264, 27268, 27272, 27276, 27282, 27288, 27294, 27300, 27305, 27310, + 27315, 27321, 27327, 27333, 27339, 27346, 27352, 27357, 27362, 27366, + 27370, 27374, 27378, 27382, 27386, 27390, 27396, 27402, 27408, 27413, + 27420, 27425, 27430, 27436, 27441, 27448, 27455, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 27461, 27466, 27469, 27473, 27477, 27481, 27485, 27489, 27493, + 27497, 27501, 27505, 27509, 27513, 27517, 27521, 27524, 27527, 27531, + 27535, 27539, 27542, 27545, 27548, 27552, 27556, 27560, 27564, 27568, 0, + 0, 0, 27571, 27575, 27579, 27583, 27588, 27593, 27598, 27603, 27607, + 27611, 27616, 27621, 0, 0, 0, 0, 27627, 27631, 27636, 27641, 27646, + 27650, 27654, 27658, 27662, 27667, 27671, 27675, 0, 0, 0, 0, 27679, 0, 0, + 0, 27683, 27687, 27691, 27695, 27698, 27701, 27704, 27707, 27710, 27713, + 27716, 27719, 27722, 27727, 27733, 27739, 27745, 27751, 27756, 27762, + 27768, 27774, 27779, 27785, 27790, 27796, 27802, 27807, 27813, 27819, + 27825, 27830, 27835, 27840, 27846, 27852, 27857, 27863, 27868, 27874, + 27879, 27885, 0, 0, 27891, 27897, 27903, 27909, 27915, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 27921, 27928, 27935, 27941, 27948, 27955, 27961, 27968, + 27975, 27982, 27989, 27995, 28002, 28009, 28015, 28022, 28029, 28035, + 28042, 28049, 28055, 28061, 28068, 28074, 28080, 28087, 28093, 28100, + 28107, 28114, 28121, 28128, 28135, 28141, 28148, 28155, 28161, 28168, + 28175, 28182, 28189, 28196, 28203, 28210, 0, 0, 0, 0, 28217, 28225, + 28232, 28239, 28245, 28252, 28258, 28265, 28271, 28278, 28285, 28292, + 28299, 28306, 28313, 28320, 28327, 28334, 28341, 28348, 28354, 28360, + 28367, 28374, 28381, 28387, 0, 0, 0, 0, 0, 0, 28393, 28399, 28404, 28409, + 28414, 28419, 28424, 28429, 28434, 28439, 28444, 0, 0, 0, 28450, 28456, + 28462, 28466, 28472, 28478, 28484, 28490, 28496, 28502, 28508, 28514, + 28520, 28526, 28532, 28538, 28544, 28550, 28556, 28560, 28566, 28572, + 28578, 28584, 28590, 28596, 28602, 28608, 28614, 28620, 28626, 28632, + 28638, 28644, 28650, 28654, 28659, 28664, 28669, 28673, 28678, 28682, + 28687, 28692, 28697, 28701, 28706, 28711, 28716, 28721, 28726, 28730, + 28734, 28739, 28744, 28749, 28753, 28757, 28762, 28767, 28772, 28777, 0, + 0, 28783, 28787, 28794, 28799, 28805, 28811, 28816, 28822, 28828, 28833, + 28839, 28845, 28851, 28857, 28863, 28868, 28873, 28879, 28884, 28890, + 28895, 28901, 28907, 28913, 28919, 28923, 28928, 28933, 28939, 28945, + 28950, 28956, 28962, 28966, 28971, 28976, 28980, 28985, 28990, 28995, + 29000, 29006, 29012, 29018, 29023, 29028, 29032, 29037, 29041, 29046, + 29050, 29055, 29060, 29065, 29070, 29077, 29084, 29092, 29103, 29112, + 29120, 29127, 29138, 29144, 29151, 0, 29158, 29163, 29168, 29176, 29182, + 29190, 29195, 29201, 29207, 29213, 29218, 29224, 29229, 29236, 29242, + 29247, 29253, 29259, 29265, 29272, 29279, 29286, 29291, 29296, 29303, + 29310, 29317, 29324, 29331, 0, 0, 29338, 29345, 29352, 29358, 29364, + 29370, 29376, 29382, 29388, 29394, 29400, 0, 0, 0, 0, 0, 0, 29406, 29412, + 29417, 29422, 29427, 29432, 29437, 29442, 29447, 29452, 0, 0, 0, 0, 0, 0, + 29457, 29462, 29467, 29472, 29477, 29482, 29487, 29495, 29502, 29507, + 29512, 29517, 29522, 29527, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 58646, 58654, 58662, 58672, 58678, 58682, 58686, 58692, 58698, 58703, - 58707, 58711, 58715, 58719, 58725, 58729, 58733, 58737, 58747, 58751, - 58755, 58761, 58765, 58771, 58775, 58779, 58785, 58791, 58797, 58805, - 58813, 58817, 58821, 58825, 58831, 58835, 58844, 58850, 58854, 58858, - 58862, 58866, 58870, 58874, 58881, 58887, 58893, 58897, 58903, 58907, - 58913, 58921, 58931, 58935, 58943, 58947, 58953, 58961, 58969, 58973, - 58977, 58983, 58988, 58994, 59000, 59004, 59008, 59011, 59015, 59019, - 59023, 59027, 59031, 59035, 59039, 59042, 59046, 59050, 59054, 59058, - 59062, 59066, 59069, 59073, 59077, 59080, 59084, 59088, 59092, 59096, - 59100, 59104, 59108, 59112, 59116, 59120, 59124, 59128, 59132, 59136, - 59140, 59144, 59148, 59152, 59156, 59160, 59164, 59168, 59172, 59176, - 59180, 59184, 59188, 59192, 59196, 59200, 59204, 59208, 59212, 59216, - 59220, 59224, 59228, 59232, 59236, 59240, 59244, 59248, 59252, 59256, - 59259, 59263, 59267, 59271, 59275, 59279, 59283, 59287, 59291, 59295, - 59299, 59303, 59307, 59311, 59315, 59319, 59323, 59327, 59331, 59335, - 59339, 59343, 59347, 59351, 59355, 59359, 59363, 59367, 59371, 59375, - 59379, 59383, 59387, 59391, 59395, 59399, 59403, 59407, 59411, 59415, - 59419, 59423, 59427, 59431, 59435, 59439, 59443, 59447, 59451, 59455, - 59459, 59463, 59467, 59471, 59475, 59479, 59483, 59487, 59491, 59495, - 59499, 59503, 59507, 59511, 59515, 59519, 59523, 59527, 59531, 59535, - 59539, 59543, 59547, 59551, 59555, 59559, 59563, 59567, 59571, 59575, - 59579, 59583, 59587, 59591, 59595, 59599, 59603, 59607, 59611, 59615, - 59619, 59623, 59627, 59631, 59635, 59639, 59643, 59647, 59651, 59655, - 59659, 59663, 59667, 59671, 59675, 59679, 59683, 59687, 59691, 59695, - 59699, 59703, 59707, 59711, 59715, 59719, 59723, 59727, 59730, 59734, - 59738, 59742, 59746, 59750, 59754, 59758, 59762, 59766, 59770, 59774, - 59778, 59782, 59786, 59790, 59794, 59798, 59802, 59806, 59810, 59814, - 59818, 59822, 59826, 59830, 59834, 59838, 59842, 59846, 59850, 59854, - 59858, 59862, 59866, 59870, 59874, 59878, 59882, 59886, 59890, 59894, - 59898, 59902, 59906, 59910, 59914, 59918, 59922, 59926, 59930, 59934, - 59938, 59942, 59946, 59950, 59954, 59958, 59962, 59966, 59970, 59974, - 59978, 59982, 59986, 59990, 59994, 59998, 60002, 60006, 60010, 60014, - 60018, 60022, 60026, 60030, 60034, 60038, 60042, 60046, 60050, 60054, - 60058, 60062, 60066, 60070, 60074, 60078, 60082, 60086, 60090, 60094, - 60098, 60102, 60106, 60110, 60114, 60118, 60122, 60126, 60130, 60134, - 60138, 60142, 60146, 60150, 60154, 60158, 60162, 60166, 60170, 60174, - 60178, 60182, 60186, 60190, 60193, 60197, 60201, 60205, 60209, 60213, - 60217, 60221, 60225, 60229, 60233, 60237, 60241, 60245, 60249, 60253, - 60257, 60261, 60265, 60269, 60273, 60277, 60281, 60285, 60289, 60293, - 60297, 60301, 60305, 60309, 60313, 60317, 60321, 60325, 60329, 60333, - 60337, 60341, 60345, 60349, 60353, 60357, 60361, 60365, 60369, 60373, - 60377, 60381, 60385, 60389, 60393, 60397, 60401, 60405, 60409, 60413, - 60417, 60421, 60425, 60429, 60433, 60437, 60441, 60445, 60449, 60453, - 60457, 60461, 60465, 60469, 60473, 60477, 60481, 60485, 60489, 60493, - 60497, 60501, 60505, 60509, 60513, 60517, 60521, 60525, 60529, 60533, - 60537, 60541, 60545, 60549, 60553, 60557, 60561, 60565, 60569, 60573, - 60577, 60581, 60585, 60589, 60593, 60597, 60601, 60605, 60609, 60613, - 60617, 60621, 60625, 60629, 60633, 60637, 60641, 60645, 60649, 60653, - 60657, 60661, 60665, 60669, 60673, 60677, 60681, 60685, 60689, 60693, - 60697, 60701, 60705, 60709, 60713, 60717, 60721, 60725, 60729, 60733, - 60737, 60741, 60745, 60749, 60753, 60757, 60761, 60765, 60769, 60773, - 60777, 60781, 60785, 60789, 60793, 60797, 60801, 60805, 60809, 60813, - 60817, 60821, 60825, 60829, 60833, 60837, 60841, 60845, 60849, 60853, - 60857, 60861, 60865, 60869, 60873, 60877, 60881, 60885, 60889, 60893, - 60897, 60901, 60905, 60909, 60913, 60917, 60921, 60925, 60929, 60933, - 60937, 60941, 60945, 60949, 60953, 60957, 60961, 60965, 60969, 60973, - 60977, 60981, 60985, 60989, 60993, 60997, 61001, 61005, 61009, 61013, - 61017, 61021, 61025, 61029, 61033, 61037, 61041, 61045, 61048, 61052, - 61056, 61060, 61064, 61068, 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, 61204, 61208, 61212, - 61216, 61220, 61224, 61228, 61232, 61236, 61240, 61244, 61248, 61252, - 61256, 61260, 61264, 61268, 61272, 61276, 61280, 61284, 61288, 61292, - 61296, 61300, 61304, 61308, 61312, 61316, 61320, 61324, 61328, 61332, - 61336, 61340, 61344, 61348, 61352, 61356, 61360, 61364, 61368, 61372, - 61376, 61380, 61384, 61388, 61392, 61396, 61400, 61404, 61408, 61412, - 61416, 61420, 61424, 61428, 61432, 61436, 61440, 61444, 61448, 61452, - 61456, 61460, 61464, 61468, 61472, 61476, 61480, 61484, 61488, 61492, - 61496, 61500, 61503, 61507, 61511, 61515, 61519, 61523, 61527, 61531, - 61535, 61539, 61543, 61547, 61551, 61555, 61559, 61563, 61567, 61571, - 61575, 61579, 61583, 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, 61715, 61719, 61723, 61727, 61731, - 61735, 61739, 61743, 61747, 61751, 61755, 61759, 61763, 61767, 61771, - 61775, 61779, 61783, 61787, 61791, 61795, 61799, 61803, 61807, 61811, - 61815, 61819, 61823, 61827, 61831, 61835, 61839, 61843, 61847, 61851, - 61855, 61859, 61863, 61867, 61871, 61875, 61879, 61883, 61887, 61891, - 61895, 61899, 61903, 61907, 61911, 61915, 61919, 61923, 61927, 61931, - 61935, 61939, 61943, 61947, 61951, 61955, 61959, 61963, 61967, 61971, - 61975, 61979, 61983, 61987, 61991, 61995, 61999, 62003, 62007, 62011, - 62015, 62019, 62023, 62027, 62031, 62035, 62039, 62043, 62047, 62051, - 62055, 62059, 62063, 62067, 62071, 62075, 62079, 62083, 62087, 62091, - 62095, 62099, 62103, 62106, 62110, 62114, 62118, 62122, 62126, 62130, - 62134, 62138, 62142, 62146, 62150, 62154, 62158, 62162, 62166, 62170, - 62174, 62178, 62182, 62186, 62190, 62194, 62198, 62202, 62206, 62210, - 62214, 62218, 62222, 62226, 62230, 62234, 62238, 62242, 62246, 62250, - 62254, 62258, 62262, 62266, 62270, 62274, 62278, 62282, 62286, 62290, - 62294, 62298, 62302, 62306, 62310, 62314, 62318, 62322, 62326, 62330, - 62334, 62338, 62342, 62346, 62350, 62354, 62358, 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, 62486, 62490, - 62494, 62498, 62502, 62506, 62510, 62514, 62518, 62522, 62526, 62530, - 62534, 62538, 62542, 62546, 62550, 62554, 62558, 62562, 62566, 62570, - 62574, 62578, 62582, 62586, 62590, 62594, 62598, 62602, 62606, 62610, - 62614, 62618, 62622, 62626, 62630, 62634, 62638, 62642, 62646, 62650, - 62654, 62658, 62662, 62666, 62670, 62674, 62678, 62682, 62686, 62690, - 62694, 62698, 62702, 62706, 62710, 62714, 62718, 62722, 62726, 62730, - 62734, 62738, 62742, 62746, 62750, 62754, 62758, 62762, 62766, 62770, - 62774, 62778, 62782, 62786, 62790, 62794, 62798, 62802, 62806, 62810, - 62814, 62818, 62822, 62826, 62830, 62834, 62838, 62842, 62846, 62850, - 62854, 62858, 62862, 62865, 62869, 62873, 62877, 62881, 62885, 62889, - 62893, 62897, 62901, 62905, 62909, 62913, 62917, 62921, 62925, 62929, - 62933, 62937, 62941, 62945, 62949, 62953, 62957, 62961, 62965, 62969, - 62973, 62977, 62981, 62985, 62989, 62993, 62997, 63001, 63005, 63009, - 63013, 63017, 63021, 63025, 63029, 63033, 63037, 63041, 63045, 63049, - 63053, 63057, 63061, 63065, 63069, 63073, 63077, 63081, 63085, 63089, - 63093, 63097, 63101, 63105, 63109, 63113, 63117, 63121, 63125, 63129, - 63133, 63137, 63141, 63145, 63149, 63153, 63157, 63161, 63165, 63169, - 63173, 63177, 63181, 63185, 63189, 63193, 63197, 63201, 63205, 63209, - 63213, 63217, 63221, 63225, 63229, 63233, 63237, 63241, 63245, 63249, - 63253, 63257, 63261, 63265, 63269, 63273, 63277, 63281, 63285, 63289, - 63293, 63297, 63301, 63305, 63309, 63313, 63317, 63321, 63325, 63329, - 63333, 63337, 63341, 63345, 63349, 63353, 63357, 63361, 63365, 63369, - 63373, 63377, 63381, 63385, 63389, 63393, 63397, 63401, 63405, 63409, - 63413, 63417, 63421, 63425, 63429, 63433, 63437, 63441, 63445, 63449, - 63453, 63457, 63461, 63465, 63469, 63473, 63477, 63481, 63485, 63489, - 63493, 63497, 63501, 63505, 63509, 63513, 63517, 63521, 63525, 63529, - 63533, 63537, 63541, 63545, 63549, 63553, 63557, 63561, 63565, 63569, - 63573, 63577, 63581, 63585, 63589, 63593, 63597, 63601, 63605, 63609, - 63613, 63617, 63621, 63625, 63629, 63633, 63637, 63641, 63645, 0, 0, 0, - 63649, 63653, 63657, 63661, 63665, 63669, 63673, 63677, 63681, 63685, - 63689, 63693, 63697, 63701, 63705, 63709, 63713, 63717, 63721, 63725, - 63729, 63733, 63737, 63741, 63745, 63749, 63753, 63757, 63761, 63765, - 63769, 63773, 63777, 63781, 63785, 63789, 63793, 63797, 63801, 63805, - 63809, 63813, 63817, 63821, 63825, 63829, 63833, 63837, 63841, 63845, - 63849, 63853, 63857, 63861, 63865, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63869, 63873, - 63877, 63881, 63885, 63889, 63893, 63897, 63901, 63905, 63909, 63913, - 63917, 63921, 63925, 63929, 63933, 63937, 63941, 63945, 63949, 63953, - 63957, 63961, 63965, 63969, 63973, 63977, 63981, 63985, 63989, 63993, - 63997, 64001, 64005, 64009, 64013, 64016, 64020, 64024, 64028, 64032, - 64036, 64040, 64044, 64048, 64052, 64056, 64060, 64064, 64068, 64072, - 64076, 64080, 64084, 64088, 64092, 64096, 64100, 64104, 64108, 64112, - 64116, 64120, 64124, 64128, 64132, 64136, 64140, 64144, 64148, 64152, - 64156, 64160, 64163, 64167, 64171, 64174, 64178, 64182, 64186, 64189, - 64193, 64197, 64201, 64205, 64209, 64213, 64217, 64221, 64225, 64229, - 64233, 64237, 64241, 64245, 64248, 64252, 64256, 64260, 64264, 64268, - 64272, 64276, 64280, 64284, 64287, 64290, 64294, 64298, 64302, 64305, - 64309, 64313, 64317, 64321, 64325, 64329, 64333, 64337, 64341, 64345, - 64349, 64353, 64357, 64361, 64365, 64369, 64373, 64377, 64381, 64385, - 64389, 64393, 64397, 64401, 64405, 64409, 64413, 64417, 64421, 64425, - 64429, 64433, 64437, 64441, 64445, 64449, 64453, 64457, 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, 64607, 64611, 64615, 64619, 64623, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 29532, 29538, + 29544, 29548, 29552, 29556, 29560, 29566, 29570, 29576, 29580, 29586, + 29592, 29600, 29606, 29614, 29618, 29622, 29626, 29632, 29635, 29640, + 29644, 29650, 29654, 29658, 29664, 29668, 29674, 29678, 29684, 29692, + 29700, 29708, 29714, 29718, 29724, 29728, 29734, 29737, 29740, 29746, + 29750, 29756, 29759, 29762, 29765, 29769, 29773, 29779, 29785, 29789, + 29792, 29796, 29801, 29806, 29813, 29818, 29825, 29832, 29841, 29848, + 29857, 29862, 29869, 29876, 29885, 29890, 29897, 29902, 29908, 29914, + 29920, 29926, 29932, 29938, 0, 0, 0, 0, 29944, 29948, 29951, 29954, + 29957, 29960, 29963, 29966, 29969, 29972, 29975, 29978, 29981, 29984, + 29989, 29994, 29999, 30002, 30007, 30012, 30017, 30022, 30029, 30034, + 30039, 30044, 30049, 30056, 30062, 30068, 30074, 30080, 30086, 30095, + 30104, 30110, 30116, 30125, 30134, 30143, 30152, 30161, 30170, 30179, + 30188, 0, 0, 0, 30197, 30202, 30207, 30212, 30216, 30220, 30224, 30229, + 30233, 30237, 30242, 30246, 30251, 30256, 30261, 30266, 30271, 30276, + 30281, 30286, 30291, 30295, 30299, 30304, 30309, 30314, 30318, 30322, + 30326, 30331, 30336, 30341, 30346, 30350, 30357, 30364, 30371, 30377, + 30383, 30389, 30395, 30401, 30407, 0, 0, 0, 30412, 30417, 30422, 30427, + 30431, 30435, 30439, 30443, 30447, 30451, 30455, 30459, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 30463, 30466, 30470, + 30474, 30478, 30482, 30486, 30490, 30494, 30498, 30502, 30506, 30510, + 30514, 30517, 30520, 30524, 30528, 30532, 30536, 30540, 30544, 30547, + 30551, 30555, 30559, 30563, 30566, 30569, 30573, 30576, 30580, 30584, + 30588, 30592, 30596, 30599, 30604, 30609, 30614, 30618, 30622, 30627, + 30631, 30636, 30640, 30646, 30651, 30656, 30661, 30667, 30672, 30678, + 30684, 30690, 30694, 0, 0, 0, 30698, 30703, 30712, 30717, 30724, 30729, + 30733, 30736, 30739, 30742, 30745, 30748, 30751, 30754, 30757, 0, 0, 0, + 30760, 30764, 30768, 30772, 30779, 30785, 30791, 30797, 30803, 30809, + 30815, 30821, 30827, 30833, 30840, 30847, 30854, 30861, 30868, 30875, + 30882, 30889, 30896, 30903, 30910, 30917, 30924, 30931, 30938, 30945, + 30952, 30959, 30966, 30973, 30980, 30987, 30994, 31001, 31008, 31015, + 31022, 31029, 31036, 31043, 31051, 31059, 31067, 31073, 31079, 31085, + 31093, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 31102, 31107, 31112, 31117, 31122, 31131, + 31142, 31151, 31162, 31168, 31181, 31187, 31194, 31201, 31206, 31212, + 31218, 31229, 31238, 31245, 31252, 31260, 31267, 31275, 31285, 31295, + 31302, 31309, 31316, 31326, 31331, 31339, 31345, 31353, 31362, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 31367, 31372, 31378, 31384, 31392, 31398, + 31404, 31410, 31415, 31422, 31427, 31433, 31439, 31447, 31452, 31458, + 31463, 31470, 31476, 31484, 31492, 31498, 31504, 31511, 31518, 31524, + 31530, 31536, 31542, 31547, 31553, 31561, 31568, 31574, 31580, 31586, + 31592, 31600, 31604, 31610, 31616, 31622, 31628, 31634, 31640, 31644, + 31649, 31654, 31661, 31666, 31670, 31675, 31680, 31685, 31689, 31694, + 31699, 31703, 31707, 31711, 31716, 31720, 31725, 31730, 31734, 31739, + 31743, 31748, 31752, 31757, 31762, 31768, 31773, 31778, 31782, 31787, + 31793, 31800, 31805, 31810, 31815, 31819, 31824, 31828, 31834, 31841, + 31848, 31853, 31858, 31862, 31868, 31873, 31878, 31883, 31888, 31894, + 31899, 31905, 31910, 31916, 31922, 31928, 31935, 31942, 31949, 31956, + 31963, 31970, 31975, 31984, 31994, 32004, 32014, 32024, 32034, 32044, + 32057, 32067, 32077, 32087, 32093, 32098, 32105, 32113, 32121, 32128, + 32135, 32142, 32149, 32157, 32166, 32175, 32184, 32193, 32202, 32211, + 32220, 32229, 32238, 32247, 32256, 32265, 32274, 32283, 32291, 32300, + 32311, 32319, 32329, 32340, 32349, 32358, 32368, 32377, 32385, 32394, + 32400, 32405, 32413, 32418, 32425, 32430, 32439, 32445, 32451, 32458, + 32463, 32468, 32476, 32484, 32493, 32502, 32507, 32514, 32524, 32532, + 32541, 32546, 32552, 32557, 32564, 32569, 32578, 32583, 32588, 32593, + 32600, 32606, 32611, 32620, 32628, 32633, 32638, 32645, 32652, 32656, + 32660, 32663, 32666, 32669, 32672, 32675, 32678, 32685, 32688, 32691, + 32696, 32700, 32704, 32708, 32712, 32716, 32726, 32732, 32738, 32744, + 32752, 32760, 32766, 32772, 32779, 32785, 32790, 32796, 32802, 32807, + 32813, 32819, 32827, 32832, 32838, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 32844, 32850, 32855, 32864, 32872, 32880, + 32887, 32894, 32901, 32908, 32916, 32924, 32934, 32944, 32952, 32960, + 32968, 32976, 32985, 32994, 33002, 33010, 33019, 33028, 33038, 33048, + 33057, 33066, 33074, 33082, 33090, 33098, 33108, 33118, 33126, 33134, + 33142, 33150, 33158, 33166, 33174, 33182, 33190, 33198, 33206, 33214, + 33223, 33232, 33241, 33250, 33260, 33270, 33277, 33284, 33292, 33300, + 33309, 33318, 33326, 33334, 33346, 33358, 33367, 33376, 33385, 33394, + 33401, 33408, 33416, 33424, 33432, 33440, 33448, 33456, 33464, 33472, + 33481, 33490, 33499, 33508, 33517, 33526, 33536, 33546, 33556, 33566, + 33575, 33584, 33591, 33598, 33606, 33614, 33622, 33630, 33638, 33646, + 33658, 33670, 33679, 33688, 33696, 33704, 33712, 33720, 33731, 33742, + 33753, 33764, 33776, 33788, 33796, 33804, 33812, 33820, 33829, 33838, + 33847, 33856, 33864, 33872, 33880, 33888, 33896, 33904, 33913, 33922, + 33932, 33942, 33950, 33958, 33966, 33974, 33982, 33990, 33997, 34004, + 34012, 34020, 34028, 34036, 34044, 34052, 34060, 34068, 34076, 34084, + 34092, 34100, 34108, 34116, 34124, 34132, 34141, 34150, 34159, 34167, + 34176, 34185, 34194, 34203, 34213, 34222, 34228, 34233, 34240, 34247, + 34255, 34263, 34272, 34281, 34291, 34301, 34312, 34323, 34333, 34343, + 34353, 34363, 34372, 34381, 34391, 34401, 34412, 34423, 34433, 34443, + 34453, 34463, 34470, 34477, 34485, 34493, 34500, 34507, 34516, 34525, + 34535, 34545, 34556, 34567, 34577, 34587, 34597, 34607, 34616, 34625, + 34633, 34641, 34648, 34655, 34663, 34671, 34680, 34689, 34699, 34709, + 34720, 34731, 34741, 34751, 34761, 34771, 34780, 34789, 34799, 34809, + 34820, 34831, 34841, 34851, 34861, 34871, 34878, 34885, 34893, 34901, + 34910, 34919, 34929, 34939, 34950, 34961, 34971, 34981, 34991, 35001, + 35009, 35017, 35025, 35033, 35042, 35051, 35059, 35067, 35074, 35081, + 35088, 35095, 35103, 35111, 35119, 35127, 35137, 35147, 35157, 35167, + 35177, 35187, 35195, 35203, 35213, 35223, 35233, 35243, 35253, 35263, + 35271, 35279, 35289, 35299, 35309, 0, 0, 35319, 35327, 35335, 35345, + 35355, 35365, 0, 0, 35375, 35383, 35391, 35401, 35411, 35421, 35431, + 35441, 35451, 35459, 35467, 35477, 35487, 35497, 35507, 35517, 35527, + 35535, 35543, 35553, 35563, 35573, 35583, 35593, 35603, 35611, 35619, + 35629, 35639, 35649, 35659, 35669, 35679, 35687, 35695, 35705, 35715, + 35725, 0, 0, 35735, 35743, 35751, 35761, 35771, 35781, 0, 0, 35791, + 35799, 35807, 35817, 35827, 35837, 35847, 35857, 0, 35867, 0, 35875, 0, + 35885, 0, 35895, 35905, 35913, 35921, 35931, 35941, 35951, 35961, 35971, + 35981, 35989, 35997, 36007, 36017, 36027, 36037, 36047, 36057, 36065, + 36073, 36081, 36089, 36097, 36105, 36113, 36121, 36129, 36137, 36145, + 36153, 36161, 0, 0, 36169, 36179, 36189, 36202, 36215, 36228, 36241, + 36254, 36267, 36277, 36287, 36300, 36313, 36326, 36339, 36352, 36365, + 36375, 36385, 36398, 36411, 36424, 36437, 36450, 36463, 36473, 36483, + 36496, 36509, 36522, 36535, 36548, 36561, 36571, 36581, 36594, 36607, + 36620, 36633, 36646, 36659, 36669, 36679, 36692, 36705, 36718, 36731, + 36744, 36757, 36765, 36773, 36784, 36792, 0, 36803, 36811, 36822, 36830, + 36838, 36846, 36854, 36862, 36865, 36868, 36871, 36874, 36880, 36891, + 36899, 0, 36910, 36918, 36929, 36937, 36945, 36953, 36961, 36969, 36974, + 36979, 36984, 36992, 37000, 37011, 0, 0, 37022, 37030, 37041, 37049, + 37057, 37065, 0, 37073, 37078, 37083, 37088, 37096, 37104, 37115, 37126, + 37134, 37142, 37150, 37161, 37169, 37177, 37185, 37193, 37201, 37207, + 37213, 0, 0, 37216, 37227, 37235, 0, 37246, 37254, 37265, 37273, 37281, + 37289, 37297, 37305, 37308, 0, 37311, 37315, 37319, 37323, 37327, 37331, + 37335, 37339, 37343, 37347, 37351, 37355, 37361, 37367, 37373, 37376, + 37379, 37381, 37385, 37389, 37393, 37397, 37399, 37403, 37407, 37413, + 37419, 37426, 37433, 37438, 37443, 37449, 37455, 37457, 37460, 37462, + 37466, 37470, 37474, 37477, 37481, 37485, 37489, 37493, 37497, 37503, + 37507, 37511, 37517, 37522, 37529, 37531, 37534, 37538, 37541, 37545, + 37550, 37552, 37561, 37570, 37573, 37577, 37579, 37581, 37583, 37586, + 37592, 37594, 37598, 37602, 37609, 37616, 37620, 37625, 37630, 37635, + 37639, 37643, 37647, 37650, 37653, 37657, 37664, 37669, 37673, 37677, + 37682, 37686, 37690, 37695, 37700, 37704, 37708, 37712, 37714, 37719, + 37724, 37728, 37732, 37736, 37740, 0, 0, 0, 0, 0, 37744, 37750, 37756, + 37763, 37770, 37775, 37780, 37784, 0, 0, 37790, 37793, 37796, 37799, + 37802, 37805, 37808, 37812, 37816, 37821, 37826, 37831, 37837, 37841, + 37844, 37847, 37850, 37853, 37856, 37859, 37862, 37865, 37868, 37872, + 37876, 37881, 37886, 0, 37891, 37897, 37903, 37909, 37916, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 37923, 37926, 37929, 37932, 37937, 37940, 37943, 37946, + 37949, 37952, 37955, 37959, 37962, 37965, 37968, 37971, 37974, 37979, + 37982, 37985, 37988, 37991, 37994, 37999, 38002, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 38005, 38010, 38015, 38022, + 38030, 38035, 38040, 38044, 38048, 38053, 38060, 38067, 38071, 38076, + 38081, 38086, 38091, 38098, 38103, 38108, 38113, 38122, 38129, 38135, + 38139, 38144, 38150, 38155, 38162, 38170, 38178, 38182, 38186, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 38190, 38194, 38201, 38205, 38209, + 38214, 38218, 38222, 38226, 38228, 38232, 38236, 38240, 38245, 38249, + 38253, 38261, 38264, 38268, 38271, 38274, 38280, 38283, 38286, 38292, + 38296, 38300, 38304, 38307, 38311, 38314, 38318, 38320, 38323, 38326, + 38330, 38332, 38336, 38339, 38342, 38347, 38352, 38358, 38361, 38364, + 38368, 38373, 38376, 38379, 38382, 38386, 38390, 38393, 38396, 38398, + 38401, 38404, 38407, 38411, 38416, 38419, 38423, 38427, 38431, 38435, + 38440, 38445, 38449, 38453, 38458, 38463, 38468, 38472, 38476, 38481, + 38485, 38488, 38491, 38493, 38497, 38502, 38509, 38516, 38523, 38530, + 38537, 38544, 38551, 38558, 38566, 38573, 38581, 38588, 38595, 38603, + 38611, 38616, 38621, 38626, 38631, 38636, 38641, 38646, 38651, 38656, + 38661, 38667, 38673, 38679, 38685, 38692, 38700, 38707, 38713, 38719, + 38725, 38731, 38737, 38743, 38749, 38755, 38761, 38768, 38775, 38782, + 38789, 38797, 38806, 38814, 38825, 38833, 38841, 38849, 38855, 38864, + 38873, 38881, 38890, 0, 0, 0, 0, 0, 0, 38898, 38900, 38903, 38905, 38908, + 38911, 38914, 38919, 38924, 38929, 38934, 38938, 38942, 38946, 38950, + 38955, 38961, 38966, 38972, 38977, 38982, 38987, 38993, 38998, 39004, + 39010, 39014, 39018, 39023, 39028, 39033, 39038, 39043, 39051, 39059, + 39067, 39075, 39082, 39090, 39097, 39104, 39112, 39122, 39129, 39136, + 39143, 39150, 39158, 39166, 39173, 39180, 39188, 39196, 39201, 39209, + 39214, 39219, 39225, 39230, 39236, 39243, 39250, 39255, 39261, 39266, + 39269, 39273, 39276, 39280, 39284, 39288, 39294, 39300, 39306, 39312, + 39316, 39320, 39324, 39328, 39334, 39340, 39344, 39349, 39353, 39358, + 39362, 39366, 39369, 39373, 39376, 39380, 39387, 39395, 39406, 39417, + 39422, 39431, 39438, 39446, 39454, 39458, 39464, 39472, 39476, 39481, + 39486, 39492, 39498, 39504, 39511, 39515, 39519, 39524, 39527, 39529, + 39533, 39537, 39544, 39548, 39550, 39552, 39556, 39563, 39568, 39574, + 39583, 39590, 39595, 39599, 39603, 39607, 39610, 39613, 39616, 39620, + 39624, 39628, 39632, 39636, 39639, 39643, 39647, 39650, 39652, 39655, + 39657, 39661, 39665, 39667, 39672, 39675, 39679, 39683, 39687, 39689, + 39691, 39693, 39696, 39700, 39704, 39708, 39712, 39716, 39722, 39728, + 39730, 39732, 39734, 39736, 39739, 39741, 39745, 39747, 39751, 39754, + 39759, 39763, 39767, 39770, 39774, 39778, 39783, 39787, 39796, 39806, + 39810, 39815, 39821, 39825, 39829, 39832, 39837, 39841, 39847, 39851, + 39862, 39870, 39874, 39878, 39884, 39888, 39891, 39893, 39896, 39900, + 39904, 39910, 39914, 39918, 39921, 39924, 39928, 39933, 39938, 39943, + 39948, 39953, 39960, 39967, 39971, 39975, 39977, 39981, 39984, 39987, + 39995, 40003, 40009, 40015, 40024, 40033, 40038, 40043, 40051, 40059, + 40061, 40063, 40068, 40073, 40079, 40085, 40090, 40095, 40099, 40103, + 40109, 40115, 40121, 40127, 40137, 40147, 40154, 40161, 40163, 40167, + 40171, 40176, 40181, 40188, 40195, 40198, 40201, 40204, 40207, 40210, + 40215, 40219, 40224, 40229, 40232, 40235, 40238, 40241, 40244, 40248, + 40251, 40254, 40257, 40260, 40262, 40264, 40266, 40268, 40276, 40284, + 40289, 40292, 40297, 40307, 40313, 40319, 40325, 40333, 40341, 40352, + 40356, 40360, 40362, 40368, 40370, 40372, 40374, 40376, 40382, 40385, + 40391, 40397, 40401, 40405, 40409, 40412, 40416, 40420, 40422, 40431, + 40440, 40445, 40450, 40455, 40461, 40467, 40470, 40473, 40476, 40479, + 40481, 40486, 40491, 40496, 40502, 40508, 40515, 40522, 40527, 40532, + 40537, 40542, 40550, 40558, 40566, 40574, 40582, 40590, 40598, 40606, + 40614, 40622, 40629, 40640, 40649, 40663, 40666, 40671, 40677, 40683, + 40690, 40704, 40719, 40725, 40731, 40738, 40744, 40752, 40758, 40771, + 40785, 40790, 40796, 40803, 40806, 40809, 40811, 40814, 40817, 40819, + 40821, 40825, 40828, 40831, 40834, 40837, 40842, 40847, 40852, 40857, + 40860, 40863, 40865, 40867, 40869, 40873, 40877, 40881, 40887, 40890, + 40892, 40894, 40899, 40904, 40909, 40914, 40919, 40924, 40926, 40928, + 40937, 40941, 40948, 40957, 40959, 40964, 40969, 40976, 40980, 40982, + 40986, 40988, 40992, 40996, 41000, 41002, 41004, 41006, 41011, 41018, + 41025, 41032, 41039, 41046, 41053, 41060, 41067, 41073, 41079, 41086, + 41093, 41100, 41107, 41113, 41119, 41126, 41133, 41140, 41148, 41155, + 41163, 41170, 41178, 41185, 41193, 41201, 41208, 41216, 41223, 41231, + 41238, 41246, 41253, 41260, 41267, 41274, 41281, 41289, 41296, 41303, + 41310, 41318, 41325, 41332, 41339, 41346, 41354, 41362, 41369, 41376, + 41382, 41389, 41394, 41401, 41408, 41416, 41423, 41431, 41439, 41444, + 41449, 41454, 41461, 41468, 41475, 41482, 41487, 41491, 41500, 41506, + 41509, 41517, 41520, 41525, 41530, 41533, 41536, 41544, 41547, 41552, + 41555, 41562, 41567, 41575, 41578, 41581, 41584, 41589, 41594, 41597, + 41600, 41608, 41611, 41616, 41623, 41627, 41631, 41636, 41641, 41647, + 41652, 41658, 41664, 41669, 41675, 41683, 41689, 41697, 41705, 41711, + 41719, 41727, 41736, 41744, 41750, 41758, 41767, 41775, 41779, 41784, + 41797, 41810, 41814, 41818, 41822, 41826, 41836, 41840, 41845, 41850, + 41855, 41860, 41865, 41870, 41880, 41890, 41898, 41908, 41918, 41926, + 41936, 41946, 41954, 41964, 41974, 41982, 41990, 42000, 42010, 42013, + 42016, 42019, 42024, 42028, 42034, 42041, 42048, 42056, 42063, 42067, + 42071, 42075, 42079, 42081, 42085, 42089, 42094, 42099, 42106, 42113, + 42116, 42123, 42125, 42127, 42131, 42135, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 42140, 42144, 42151, 42158, 42165, + 42172, 42176, 42180, 42184, 42188, 42193, 42199, 42204, 42210, 42216, + 42222, 42228, 42236, 42243, 42250, 42257, 42264, 42270, 42276, 42285, + 42289, 42296, 42300, 42304, 42310, 42316, 42322, 42328, 42332, 42336, + 42339, 42343, 42347, 42354, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 42361, 42364, 42368, 42372, 42378, 42384, + 42390, 42398, 42405, 42409, 42417, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 42422, 42425, 42428, 42431, 42434, 42437, 42440, + 42443, 42446, 42449, 42453, 42457, 42461, 42465, 42469, 42473, 42477, + 42481, 42485, 42489, 42493, 42496, 42499, 42502, 42505, 42508, 42511, + 42514, 42517, 42520, 42524, 42528, 42532, 42536, 42540, 42544, 42548, + 42552, 42556, 42560, 42564, 42570, 42576, 42582, 42589, 42596, 42603, + 42610, 42617, 42624, 42631, 42638, 42645, 42652, 42659, 42666, 42673, + 42680, 42687, 42694, 42701, 42706, 42712, 42718, 42724, 42729, 42735, + 42741, 42747, 42752, 42758, 42764, 42769, 42774, 42779, 42784, 42790, + 42796, 42801, 42806, 42812, 42817, 42823, 42829, 42835, 42841, 42847, + 42852, 42858, 42864, 42870, 42875, 42881, 42887, 42893, 42898, 42904, + 42910, 42915, 42920, 42925, 42930, 42936, 42942, 42947, 42952, 42958, + 42963, 42969, 42975, 42981, 42987, 42993, 42998, 43004, 43010, 43016, + 43021, 43027, 43033, 43039, 43044, 43050, 43056, 43061, 43066, 43071, + 43076, 43082, 43088, 43093, 43098, 43104, 43109, 43115, 43121, 43127, + 43133, 43139, 43143, 43149, 43155, 43161, 43167, 43173, 43179, 43185, + 43191, 43197, 43203, 43207, 43211, 43215, 43219, 43223, 43227, 43231, + 43235, 43239, 43244, 43250, 43255, 43260, 43265, 43270, 43279, 43288, + 43297, 43306, 43315, 43324, 43333, 43342, 43349, 43357, 43365, 43372, + 43379, 43387, 43395, 43402, 43409, 43417, 43425, 43432, 43439, 43447, + 43455, 43462, 43469, 43477, 43486, 43495, 43503, 43512, 43521, 43528, + 43535, 43543, 43552, 43561, 43569, 43578, 43587, 43594, 43601, 43610, + 43619, 43627, 43635, 43644, 43653, 43660, 43667, 43676, 43685, 43693, + 43701, 43710, 43719, 43726, 43733, 43742, 43751, 43759, 43768, 43777, + 43785, 43795, 43805, 43815, 43825, 43834, 43843, 43852, 43861, 43868, + 43876, 43884, 43892, 43900, 43905, 43910, 43919, 43927, 43934, 43943, + 43951, 43958, 43967, 43975, 43982, 43991, 43999, 44006, 44015, 44023, + 44030, 44039, 44047, 44054, 44063, 44071, 44078, 44087, 44095, 44102, + 44111, 44119, 44126, 44135, 44144, 44153, 44162, 44175, 44188, 44195, + 44200, 44205, 44210, 44215, 44220, 44225, 44230, 44235, 44243, 44251, + 44259, 44267, 44272, 44279, 44286, 44293, 44298, 44306, 44313, 44321, + 44325, 44332, 44338, 44345, 44349, 44355, 44361, 44367, 44371, 44374, + 44378, 44382, 44389, 44395, 44401, 44407, 44413, 44427, 44437, 44451, + 44465, 44471, 44481, 44495, 44498, 44501, 44508, 44516, 44521, 44526, + 44534, 44545, 44556, 44564, 44568, 44572, 44575, 44578, 44582, 44586, + 44589, 44592, 44597, 44602, 44608, 44614, 44619, 44624, 44630, 44636, + 44641, 44646, 44651, 44656, 44662, 44668, 44673, 44678, 44684, 44690, + 44695, 44700, 44703, 44706, 44715, 44717, 44719, 44722, 44726, 44732, + 44734, 44737, 44744, 44751, 44759, 44767, 44777, 44791, 44796, 44801, + 44805, 44810, 44818, 44826, 44835, 44844, 44853, 44862, 44867, 44872, + 44878, 44884, 44890, 44896, 44899, 44905, 44911, 44921, 44931, 44939, + 44947, 44956, 44965, 44969, 44977, 44985, 44993, 45001, 45010, 45019, + 45028, 45037, 45042, 45047, 45052, 45057, 45062, 45068, 45074, 45079, + 45085, 45087, 45089, 45091, 45093, 45096, 45099, 45101, 45103, 45105, + 45109, 45113, 45115, 45117, 45120, 45123, 45127, 45133, 45139, 45141, + 45148, 45152, 45157, 45162, 45164, 45173, 45179, 45185, 45191, 45197, + 45203, 45209, 45214, 45217, 45220, 45223, 45225, 45227, 45231, 45235, + 45240, 45245, 45250, 45253, 45257, 45262, 45265, 45269, 45274, 45279, + 45284, 45289, 45294, 45299, 45304, 45309, 45314, 45319, 45324, 45329, + 45335, 45341, 45347, 45349, 45352, 45354, 45357, 45359, 45361, 45363, + 45365, 45367, 45369, 45371, 45373, 45375, 45377, 45379, 45381, 45383, + 45385, 45387, 45389, 45391, 45396, 45401, 45406, 45411, 45416, 45421, + 45426, 45431, 45436, 45441, 45446, 45451, 45456, 45461, 45466, 45471, + 45476, 45481, 45486, 45491, 45495, 45499, 45503, 45509, 45515, 45520, + 45525, 45530, 45535, 45540, 45545, 45553, 45561, 45569, 45577, 45585, + 45593, 45601, 45609, 45615, 45620, 45625, 45630, 45633, 45637, 45641, + 45645, 45649, 45653, 45657, 45664, 45671, 45679, 45687, 45692, 45697, + 45704, 45711, 45718, 45725, 45728, 45731, 45736, 45738, 45742, 45747, + 45749, 45751, 45753, 45755, 45760, 45763, 45765, 45770, 45777, 45784, + 45787, 45791, 45796, 45801, 45809, 45815, 45820, 45831, 45837, 45843, + 45848, 45853, 45859, 45862, 45865, 45870, 45872, 45876, 45878, 45880, + 45882, 45884, 45886, 45888, 45893, 45895, 45897, 45899, 45901, 45905, + 45907, 45910, 45915, 45920, 45925, 45930, 45936, 45942, 45944, 45947, + 45954, 45960, 45966, 45973, 45977, 0, 45981, 45983, 45987, 45993, 45998, + 46000, 46004, 46013, 46021, 46029, 46035, 46041, 46046, 46052, 46057, + 46060, 46074, 46077, 46082, 0, 46087, 0, 0, 0, 0, 46096, 46103, 46107, + 46109, 46111, 46115, 46121, 46126, 46132, 46134, 46140, 46142, 46148, + 46150, 46152, 46157, 46159, 46163, 46168, 46170, 46175, 46180, 46184, + 46191, 0, 46201, 46207, 46210, 46216, 0, 46219, 46224, 46228, 46230, 0, + 0, 46232, 46236, 46240, 46245, 46247, 46252, 46255, 46258, 46261, 46265, + 46269, 46274, 46278, 46283, 46288, 46292, 46298, 46305, 46308, 46314, + 46319, 46323, 46328, 46334, 46340, 46347, 46353, 46360, 0, 46367, 46374, + 46378, 46385, 46391, 46396, 46402, 46406, 46411, 46414, 46420, 46426, + 46433, 46441, 46448, 46457, 46467, 46474, 46480, 46484, 46492, 46497, + 46506, 46509, 46512, 46521, 46532, 46539, 46541, 46547, 46552, 46554, + 46557, 46561, 46569, 0, 46578, 0, 46583, 46591, 46599, 46607, 0, 0, 0, + 46615, 46623, 46628, 46631, 46635, 46638, 46649, 46659, 46669, 0, 0, + 46678, 46687, 46693, 46701, 46705, 46713, 46717, 46725, 46732, 46739, + 46748, 46757, 46767, 46777, 46787, 46797, 46806, 46815, 46825, 46835, + 46844, 46853, 46860, 46867, 46874, 46881, 46888, 46895, 46902, 46909, + 46916, 46924, 46930, 46936, 46942, 46948, 46954, 46960, 46966, 46972, + 46978, 46985, 46993, 47001, 47009, 47017, 47025, 47033, 47041, 47049, + 47057, 47066, 0, 0, 0, 47071, 47077, 47080, 47086, 47092, 47097, 47101, + 47106, 47112, 47119, 47122, 47129, 47136, 47140, 47149, 47158, 47163, + 47169, 47174, 47179, 47186, 47193, 47201, 47209, 0, 47218, 47227, 47232, + 47236, 47243, 47247, 47254, 47262, 47267, 47275, 47279, 47284, 47288, + 47293, 0, 47297, 47302, 47311, 47313, 47317, 47321, 47328, 47335, 47340, + 47348, 47354, 0, 47360, 0, 0, 0, 47363, 47371, 47375, 47382, 47390, + 47398, 47403, 47408, 47414, 47419, 47424, 47430, 47435, 47438, 47442, + 47446, 47453, 47462, 47467, 47476, 47485, 47491, 47497, 47502, 47507, + 47512, 47517, 47523, 47529, 47537, 47545, 47551, 47557, 47562, 47567, + 47574, 47581, 47587, 47590, 47593, 47597, 47601, 47605, 47610, 47616, + 47622, 47629, 47636, 47641, 47645, 47649, 47653, 47657, 47661, 47665, + 47669, 47673, 47677, 47681, 47685, 47689, 47693, 47697, 47701, 47705, + 47709, 47713, 47717, 47721, 47725, 47729, 47733, 47737, 47741, 47745, + 47749, 47753, 47757, 47761, 47765, 47769, 47773, 47777, 47781, 47785, + 47789, 47793, 47797, 47801, 47805, 47809, 47813, 47817, 47821, 47825, + 47829, 47833, 47837, 47841, 47845, 47849, 47853, 47857, 47861, 47865, + 47869, 47873, 47877, 47881, 47885, 47889, 47893, 47897, 47901, 47905, + 47909, 47913, 47917, 47921, 47925, 47929, 47933, 47937, 47941, 47945, + 47949, 47953, 47957, 47961, 47965, 47969, 47973, 47977, 47981, 47985, + 47989, 47993, 47997, 48001, 48005, 48009, 48013, 48017, 48021, 48025, + 48029, 48033, 48037, 48041, 48045, 48049, 48053, 48057, 48061, 48065, + 48069, 48073, 48077, 48081, 48085, 48089, 48093, 48097, 48101, 48105, + 48109, 48113, 48117, 48121, 48125, 48129, 48133, 48137, 48141, 48145, + 48149, 48153, 48157, 48161, 48165, 48169, 48173, 48177, 48181, 48185, + 48189, 48193, 48197, 48201, 48205, 48209, 48213, 48217, 48221, 48225, + 48229, 48233, 48237, 48241, 48245, 48249, 48253, 48257, 48261, 48265, + 48269, 48273, 48277, 48281, 48285, 48289, 48293, 48297, 48301, 48305, + 48309, 48313, 48317, 48321, 48325, 48329, 48333, 48337, 48341, 48345, + 48349, 48353, 48357, 48361, 48365, 48369, 48373, 48377, 48381, 48385, + 48389, 48393, 48397, 48401, 48405, 48409, 48413, 48417, 48421, 48425, + 48429, 48433, 48437, 48441, 48445, 48449, 48453, 48457, 48461, 48465, + 48469, 48473, 48477, 48481, 48485, 48489, 48493, 48497, 48501, 48505, + 48509, 48513, 48517, 48521, 48525, 48529, 48533, 48537, 48541, 48545, + 48549, 48553, 48557, 48561, 48565, 48569, 48573, 48577, 48581, 48585, + 48589, 48593, 48597, 48601, 48605, 48609, 48613, 48617, 48621, 48625, + 48629, 48633, 48637, 48641, 48645, 48649, 48653, 48657, 48661, 48665, + 48672, 48680, 48686, 48692, 48699, 48706, 48712, 48718, 48724, 48730, + 48735, 48740, 48745, 48750, 48756, 48762, 48770, 48777, 48782, 48787, + 48795, 48804, 48811, 48821, 48832, 48835, 48838, 48842, 48846, 48852, + 48858, 48868, 48878, 48888, 48898, 48905, 48912, 48919, 48926, 48937, + 48948, 48959, 48970, 48980, 48990, 49002, 49014, 49025, 49036, 49048, + 49060, 49069, 49079, 49089, 49100, 49111, 49118, 49125, 49132, 49139, + 49149, 49159, 49167, 49175, 49182, 49189, 49196, 49203, 49210, 49215, + 49220, 49226, 49234, 49244, 49252, 49260, 49268, 49276, 49284, 49292, + 49300, 49308, 49316, 49324, 49333, 49342, 49350, 49358, 49367, 49376, + 49385, 49394, 49404, 49414, 49423, 49432, 49442, 49452, 49466, 49483, + 49497, 49514, 49528, 49542, 49556, 49570, 49580, 49591, 49601, 49612, + 49629, 49646, 49654, 49660, 49667, 49674, 49681, 49688, 49693, 49699, + 49704, 49709, 49715, 49720, 49725, 49730, 49735, 49740, 49747, 49752, + 49759, 49764, 49769, 49773, 49777, 49784, 49791, 49798, 49805, 49812, + 49819, 49832, 49845, 49858, 49871, 49879, 49887, 49893, 49899, 49906, + 49913, 49920, 49927, 49931, 49936, 49944, 49952, 49960, 49967, 49971, + 49979, 49987, 49990, 49993, 49998, 50004, 50012, 50020, 50040, 50060, + 50080, 50100, 50120, 50140, 50160, 50180, 50185, 50192, 50201, 50209, + 50217, 50222, 50225, 50228, 50233, 50236, 50255, 50262, 50268, 50274, + 50278, 50281, 50284, 50287, 50298, 50310, 50317, 50324, 50327, 50331, + 50334, 50339, 50344, 50349, 50355, 50364, 50371, 50378, 50386, 50393, + 50400, 50403, 50409, 50415, 50418, 50421, 50426, 50431, 50437, 50443, + 50447, 50452, 50459, 50463, 50469, 50473, 50477, 50485, 50497, 50505, + 50509, 50511, 50520, 50529, 50535, 50538, 50544, 50550, 50555, 50560, + 50565, 50570, 50575, 50580, 50582, 50588, 50593, 50600, 50604, 50610, + 50613, 50617, 50624, 50631, 50633, 50635, 50641, 50647, 50653, 50662, + 50671, 50678, 50685, 50691, 50697, 50702, 50707, 50712, 50718, 50724, + 50729, 50736, 50740, 50744, 50757, 50770, 50781, 50790, 50796, 50803, + 50808, 50813, 50818, 50823, 50828, 50830, 50837, 50844, 50851, 50858, + 50865, 50873, 50879, 50884, 50890, 50896, 50902, 50909, 50915, 50923, + 50931, 50939, 50947, 50954, 50960, 50966, 50975, 50979, 50988, 50997, + 51006, 51014, 51018, 51024, 51031, 51038, 51042, 51048, 51055, 51060, + 51065, 51071, 51076, 51081, 51088, 51095, 51100, 51105, 51113, 51121, + 51131, 51141, 51148, 51155, 51159, 51163, 51175, 51181, 51187, 51192, + 51197, 51204, 51211, 51217, 51223, 51232, 51240, 51248, 51255, 51262, + 51269, 51275, 51282, 51288, 51295, 51302, 51309, 51316, 51322, 51327, + 51336, 51346, 51353, 51362, 51368, 51373, 51378, 51387, 51393, 51399, + 51405, 51413, 51418, 51425, 51432, 51443, 51450, 51457, 51464, 51471, + 51478, 51485, 51492, 51503, 51514, 51524, 51534, 51546, 51558, 51563, + 51568, 51576, 51584, 51590, 51596, 51605, 51614, 51622, 51630, 51638, + 51646, 51656, 51666, 51680, 51694, 51701, 51708, 51719, 51730, 51737, + 51744, 51753, 51762, 51767, 51772, 51781, 51790, 51795, 51800, 51808, + 51814, 51820, 51828, 51836, 51849, 51862, 51866, 51870, 51877, 51884, + 51891, 51899, 51907, 51915, 51923, 51929, 51935, 51941, 51947, 51954, + 51961, 51969, 51977, 51980, 51983, 51988, 51993, 51999, 52005, 52012, + 52019, 52028, 52037, 52044, 52051, 52059, 52067, 52075, 52083, 52090, + 52097, 52104, 52111, 52115, 52119, 52126, 52133, 52138, 52143, 52148, + 52153, 52159, 52173, 52180, 52187, 52191, 52193, 52195, 52200, 52205, + 52210, 52214, 52222, 52229, 52236, 52244, 52256, 52264, 52272, 52283, + 52287, 52291, 52295, 52300, 52311, 52318, 52325, 52332, 52337, 52344, + 52353, 52361, 52367, 52373, 52379, 52388, 52397, 52405, 52414, 52419, + 52422, 52427, 52433, 52439, 52445, 52451, 52455, 52458, 52462, 52466, + 52472, 52478, 52484, 52490, 52494, 52498, 52505, 52512, 52519, 52526, + 52533, 52540, 52550, 52560, 52567, 52574, 52582, 52590, 52594, 52599, + 52604, 52610, 52616, 52619, 52622, 52625, 52628, 52632, 52637, 52642, + 52647, 52652, 52657, 52661, 52665, 52669, 52673, 52677, 52681, 52685, + 52691, 52695, 52701, 52706, 52713, 52721, 52728, 52736, 52743, 52751, + 52760, 52767, 52777, 52788, 52794, 52803, 52809, 52818, 52827, 52833, + 52839, 52843, 52847, 52856, 52865, 52872, 52879, 52888, 0, 0, 0, 52897, + 52902, 52906, 52910, 52915, 52920, 52925, 52933, 52941, 52944, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 52948, 52953, 52958, 52963, 52968, + 52973, 52978, 52983, 52988, 52993, 52998, 53004, 53008, 53013, 53018, + 53023, 53028, 53033, 53038, 53043, 53048, 53053, 53058, 53063, 53068, + 53073, 53078, 53083, 53088, 53093, 53098, 53103, 53108, 53113, 53118, + 53124, 53129, 53135, 53144, 53149, 53157, 53164, 53173, 53178, 53183, + 53188, 53194, 0, 53201, 53206, 53211, 53216, 53221, 53226, 53231, 53236, + 53241, 53246, 53251, 53257, 53261, 53266, 53271, 53276, 53281, 53286, + 53291, 53296, 53301, 53306, 53311, 53316, 53321, 53326, 53331, 53336, + 53341, 53346, 53351, 53356, 53361, 53366, 53371, 53377, 53382, 53388, + 53397, 53402, 53410, 53417, 53426, 53431, 53436, 53441, 53447, 0, 53454, + 53462, 53470, 53480, 53487, 53495, 53501, 53510, 53518, 53526, 53534, + 53542, 53550, 53558, 53563, 53570, 53575, 53581, 53589, 53596, 53603, + 53611, 53617, 53623, 53630, 53637, 53646, 53656, 53662, 53669, 53674, + 53684, 53694, 53699, 53704, 53709, 53714, 53719, 53724, 53729, 53734, + 53739, 53744, 53749, 53754, 53759, 53764, 53769, 53774, 53779, 53784, + 53789, 53794, 53799, 53804, 53809, 53814, 53819, 53824, 53829, 53834, + 53839, 53844, 53848, 53852, 53857, 53862, 53867, 53872, 53877, 53882, + 53887, 53892, 53897, 53902, 53907, 53912, 53917, 53922, 53927, 53932, + 53937, 53942, 53949, 53956, 53963, 53970, 53977, 53984, 53991, 53998, + 54005, 54012, 54019, 54026, 54033, 54040, 54045, 54050, 54057, 54064, + 54071, 54078, 54085, 54092, 54099, 54106, 54113, 54120, 54127, 54134, + 54140, 54146, 54152, 54158, 54165, 54172, 54179, 54186, 54193, 54200, + 54207, 54214, 54221, 54228, 54236, 54244, 54252, 54260, 54268, 54276, + 54284, 54292, 54296, 54302, 54308, 54312, 54318, 54324, 54330, 54337, + 54344, 54351, 54358, 54363, 54369, 0, 0, 0, 0, 0, 0, 0, 54375, 54383, + 54392, 54401, 54409, 54415, 54420, 54425, 54430, 54435, 54440, 54445, + 54450, 54455, 54460, 54465, 54470, 54475, 54480, 54485, 54490, 54495, + 54500, 54505, 54510, 54515, 54520, 54525, 54530, 54535, 54540, 54545, + 54550, 54555, 54560, 54565, 54570, 54575, 54580, 54585, 54590, 54595, + 54600, 54605, 54610, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 54615, 54619, 54624, + 54629, 54634, 54639, 54648, 54653, 54658, 54663, 54668, 54673, 54678, + 54683, 54688, 54695, 54700, 54705, 54714, 54721, 54726, 54731, 54736, + 54743, 54748, 54755, 54760, 54765, 54772, 54779, 54784, 54789, 54794, + 54801, 54808, 54813, 54818, 54823, 54828, 54833, 54840, 54847, 54852, + 54857, 54862, 54867, 54872, 54877, 54882, 54887, 54892, 54897, 54902, + 54909, 0, 0, 0, 0, 0, 0, 0, 0, 0, 54914, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 54921, 54925, 54929, 54933, 54937, 54941, 54945, 54949, + 54953, 54957, 54961, 54967, 54971, 54975, 54979, 54983, 54987, 54991, + 54995, 54999, 55003, 55007, 55011, 0, 0, 0, 0, 0, 0, 0, 0, 0, 55015, + 55019, 55023, 55027, 55031, 55035, 55039, 0, 55043, 55047, 55051, 55055, + 55059, 55063, 55067, 0, 55071, 55075, 55079, 55083, 55087, 55091, 55095, + 0, 55099, 55103, 55107, 55111, 55115, 55119, 55123, 0, 55127, 55131, + 55135, 55139, 55143, 55147, 55151, 0, 55155, 55159, 55163, 55167, 55171, + 55175, 55179, 0, 55183, 55187, 55191, 55195, 55199, 55203, 55207, 0, + 55211, 55215, 55219, 55223, 55227, 55231, 55235, 0, 55239, 55244, 55249, + 55254, 55259, 55264, 55269, 55273, 55278, 55283, 55288, 55292, 55297, + 55302, 55307, 55312, 55316, 55321, 55326, 55331, 55336, 55341, 55346, + 55350, 55355, 55360, 55367, 55372, 55377, 55383, 55390, 55397, 55406, + 55413, 55422, 55426, 55430, 55436, 55442, 55448, 55456, 55462, 55466, + 55470, 55474, 55480, 55486, 55490, 55492, 55496, 55501, 55503, 55507, + 55511, 55515, 55521, 55526, 55530, 55534, 55539, 55545, 55550, 55555, + 55560, 55565, 55572, 55579, 55584, 55589, 55594, 55599, 55604, 55609, + 55613, 55617, 55624, 55631, 55637, 55641, 55645, 55648, 55652, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 55660, 55664, 55668, 55673, 55678, 55683, 55687, 55691, 55695, + 55700, 55705, 55709, 55713, 55717, 55721, 55726, 55731, 55736, 55741, + 55745, 55749, 55754, 55759, 55764, 55769, 55773, 0, 55777, 55781, 55785, + 55789, 55793, 55797, 55801, 55806, 55811, 55815, 55820, 55825, 55834, + 55838, 55842, 55846, 55853, 55857, 55862, 55867, 55871, 55875, 55881, + 55886, 55891, 55896, 55901, 55905, 55909, 55913, 55917, 55921, 55926, + 55931, 55935, 55939, 55944, 55949, 55954, 55958, 55962, 55967, 55972, + 55978, 55984, 55988, 55994, 56000, 56004, 56010, 56016, 56021, 56026, + 56030, 56036, 56040, 56044, 56050, 56056, 56061, 56066, 56070, 56074, + 56082, 56088, 56094, 56100, 56105, 56110, 56115, 56121, 56125, 56131, + 56135, 56139, 56145, 56151, 56157, 56163, 56169, 56175, 56181, 56187, + 56193, 56199, 56205, 56211, 56215, 56221, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 56227, 56230, 56234, 56238, 56242, 56246, 56249, 56252, 56256, + 56260, 56264, 56268, 56271, 56276, 56280, 56284, 56288, 56294, 56298, + 56302, 56306, 56310, 56317, 56323, 56327, 56331, 56335, 56339, 56343, + 56347, 56351, 56355, 56359, 56363, 56367, 56373, 56377, 56381, 56385, + 56389, 56393, 56397, 56401, 56405, 56409, 56413, 56417, 56421, 56425, + 56429, 56433, 56437, 56443, 56449, 56454, 56459, 56463, 56467, 56471, + 56475, 56479, 56483, 56487, 56491, 56495, 56499, 56503, 56507, 56511, + 56515, 56519, 56523, 56527, 56531, 56535, 56539, 56543, 56547, 56551, + 56555, 56561, 56565, 56569, 56573, 56577, 56581, 56585, 56589, 56593, + 56598, 56605, 56609, 56613, 56617, 56621, 56625, 56629, 56633, 56637, + 56641, 56645, 56649, 56653, 56660, 56664, 56670, 56674, 56678, 56682, + 56686, 56690, 56693, 56697, 56701, 56705, 56709, 56713, 56717, 56721, + 56725, 56729, 56733, 56737, 56741, 56745, 56749, 56753, 56757, 56761, + 56765, 56769, 56773, 56777, 56781, 56785, 56789, 56793, 56797, 56801, + 56805, 56809, 56813, 56817, 56821, 56827, 56831, 56835, 56839, 56843, + 56847, 56851, 56855, 56859, 56863, 56867, 56871, 56875, 56879, 56883, + 56887, 56891, 56895, 56899, 56903, 56907, 56911, 56915, 56919, 56923, + 56927, 56931, 56935, 56943, 56947, 56951, 56955, 56959, 56963, 56969, + 56973, 56977, 56981, 56985, 56989, 56993, 56997, 57001, 57005, 57009, + 57013, 57017, 57021, 57027, 57031, 57035, 57039, 57043, 57047, 57051, + 57055, 57059, 57063, 57067, 57071, 57075, 57079, 57083, 57087, 57091, + 57095, 57099, 57103, 57107, 57111, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 57115, 57123, 57130, 57141, 57151, + 57159, 57168, 57177, 57187, 57199, 57211, 57223, 0, 0, 0, 0, 57229, + 57232, 57235, 57240, 57243, 57250, 57254, 57258, 57262, 57266, 57270, + 57275, 57280, 57284, 57288, 57293, 57298, 57303, 57308, 57311, 57314, + 57320, 57326, 57331, 57336, 57343, 57350, 57354, 57358, 57362, 57369, + 57375, 57382, 57387, 57392, 57397, 57402, 57407, 57412, 57417, 57422, + 57427, 57432, 57437, 57442, 57447, 57452, 57458, 57463, 57467, 57473, + 57484, 57494, 57509, 57519, 57523, 57532, 57538, 57544, 57550, 57555, + 57558, 57563, 57567, 0, 57573, 57577, 57580, 57584, 57587, 57591, 57594, + 57598, 57601, 57605, 57608, 57611, 57615, 57619, 57623, 57627, 57631, + 57635, 57639, 57643, 57647, 57651, 57655, 57659, 57663, 57667, 57671, + 57675, 57679, 57683, 57687, 57691, 57695, 57699, 57703, 57708, 57712, + 57716, 57720, 57724, 57727, 57731, 57734, 57738, 57742, 57746, 57750, + 57753, 57757, 57760, 57764, 57768, 57772, 57776, 57780, 57784, 57788, + 57792, 57796, 57800, 57804, 57808, 57811, 57815, 57819, 57823, 57827, + 57831, 57834, 57839, 57843, 57848, 57852, 57855, 57859, 57863, 57867, + 57871, 57876, 57880, 57884, 57888, 57892, 57895, 57899, 57903, 0, 0, + 57908, 57916, 57924, 57931, 57938, 57942, 57948, 57953, 57958, 57962, + 57965, 57969, 57972, 57976, 57979, 57983, 57986, 57990, 57993, 57996, + 58000, 58004, 58008, 58012, 58016, 58020, 58024, 58028, 58032, 58036, + 58040, 58044, 58048, 58052, 58056, 58060, 58064, 58068, 58072, 58076, + 58080, 58084, 58088, 58093, 58097, 58101, 58105, 58109, 58112, 58116, + 58119, 58123, 58127, 58131, 58135, 58138, 58142, 58145, 58149, 58153, + 58157, 58161, 58165, 58169, 58173, 58177, 58181, 58185, 58189, 58193, + 58196, 58200, 58204, 58208, 58212, 58216, 58219, 58224, 58228, 58233, + 58237, 58240, 58244, 58248, 58252, 58256, 58261, 58265, 58269, 58273, + 58277, 58280, 58284, 58288, 58293, 58297, 58301, 58305, 58309, 58314, + 58321, 58325, 58331, 0, 0, 0, 0, 0, 58336, 58340, 58344, 58347, 58351, + 58355, 58359, 58362, 58365, 58369, 58373, 58377, 58381, 58385, 58389, + 58393, 58397, 58401, 58404, 58408, 58412, 58415, 58418, 58421, 58424, + 58428, 58432, 58436, 58440, 58444, 58448, 58452, 58456, 58460, 58464, + 58467, 58470, 58474, 58478, 58482, 58486, 0, 0, 0, 58490, 58494, 58498, + 58502, 58506, 58510, 58514, 58518, 58522, 58526, 58530, 58534, 58538, + 58542, 58546, 58550, 58554, 58558, 58562, 58566, 58570, 58574, 58578, + 58582, 58586, 58590, 58594, 58598, 58602, 58606, 58610, 58613, 58617, + 58620, 58624, 58628, 58631, 58635, 58639, 58642, 58646, 58650, 58654, + 58658, 58661, 58665, 58669, 58673, 58677, 58681, 58685, 58688, 58691, + 58695, 58699, 58703, 58707, 58711, 58715, 58719, 58723, 58727, 58731, + 58735, 58739, 58743, 58747, 58751, 58755, 58759, 58763, 58767, 58771, + 58775, 58779, 58783, 58787, 58791, 58795, 58799, 58803, 58807, 58811, + 58815, 58819, 58823, 58827, 58831, 58835, 58839, 58843, 58847, 58851, + 58855, 0, 58859, 58865, 58871, 58876, 58881, 58886, 58892, 58898, 58904, + 58910, 58916, 58922, 58928, 58934, 58940, 58946, 58952, 58956, 58960, + 58964, 58968, 58972, 58976, 58980, 58984, 58988, 58992, 58996, 59000, + 59004, 59008, 59012, 59016, 59020, 59024, 59028, 59032, 59037, 59042, + 59047, 0, 0, 0, 0, 0, 0, 0, 0, 59052, 59056, 59060, 59064, 59068, 59072, + 59076, 59080, 59084, 59088, 59092, 59096, 59100, 59104, 59108, 59112, + 59115, 59119, 59122, 59126, 59130, 59134, 59138, 59142, 59146, 59150, + 59154, 59158, 59162, 59166, 59170, 59174, 59178, 59182, 59186, 59190, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 59194, 59199, 59204, 59209, 59213, + 59218, 59222, 59227, 59232, 59237, 59242, 59247, 59251, 59256, 59261, + 59266, 59271, 59275, 59279, 59283, 59287, 59291, 59295, 59299, 59303, + 59307, 59311, 59315, 59319, 59323, 59327, 59332, 59337, 59342, 59347, + 59352, 59357, 59362, 59367, 59372, 59377, 59382, 59387, 59392, 59397, + 59402, 59408, 0, 59415, 59418, 59421, 59424, 59427, 59430, 59433, 59436, + 59439, 59442, 59446, 59450, 59454, 59458, 59462, 59466, 59470, 59474, + 59478, 59482, 59486, 59490, 59494, 59498, 59502, 59506, 59510, 59514, + 59518, 59522, 59526, 59530, 59534, 59538, 59542, 59546, 59550, 59554, + 59558, 59562, 59566, 59575, 59584, 59593, 59602, 59611, 59620, 59629, + 59638, 59641, 59646, 59651, 59656, 59661, 59666, 59671, 59676, 59681, + 59686, 59690, 59695, 59700, 59705, 59710, 59715, 59719, 59723, 59727, + 59731, 59735, 59739, 59743, 59747, 59751, 59755, 59759, 59763, 59767, + 59771, 59776, 59781, 59786, 59791, 59796, 59801, 59806, 59811, 59816, + 59821, 59826, 59831, 59836, 59841, 59847, 59853, 59858, 59863, 59866, + 59869, 59872, 59875, 59878, 59881, 59884, 59887, 59890, 59894, 59898, + 59902, 59906, 59910, 59914, 59918, 59922, 59926, 59930, 59934, 59938, + 59942, 59946, 59950, 59954, 59958, 59962, 59966, 59970, 59974, 59978, + 59982, 59986, 59990, 59994, 59998, 60002, 60006, 60010, 60014, 60018, + 60022, 60026, 60030, 60034, 60038, 60042, 60046, 60050, 60055, 60060, + 60065, 60070, 60074, 60079, 60084, 60089, 60094, 60099, 60104, 60109, + 60114, 60119, 60123, 60129, 60135, 60141, 60147, 60153, 60159, 60165, + 60171, 60177, 60183, 60189, 60195, 60198, 60201, 60204, 60209, 60212, + 60215, 60218, 60221, 60224, 60227, 60231, 60235, 60239, 60243, 60247, + 60251, 60255, 60259, 60263, 60267, 60271, 60275, 60279, 60282, 60285, + 60289, 60293, 60297, 60301, 60304, 60308, 60312, 60316, 60320, 60323, + 60327, 60331, 60335, 60339, 60342, 60346, 60350, 60353, 60357, 60361, + 60365, 60369, 60373, 60377, 60381, 0, 60385, 60388, 60391, 60394, 60397, + 60400, 60403, 60406, 60409, 60412, 60415, 60418, 60421, 60424, 60427, + 60430, 60433, 60436, 60439, 60442, 60445, 60448, 60451, 60454, 60457, + 60460, 60463, 60466, 60469, 60472, 60475, 60478, 60481, 60484, 60487, + 60490, 60493, 60496, 60499, 60502, 60505, 60508, 60511, 60514, 60517, + 60520, 60523, 60526, 60529, 60532, 60535, 60538, 60541, 60544, 60547, + 60550, 60553, 60556, 60559, 60562, 60565, 60568, 60571, 60574, 60577, + 60580, 60583, 60586, 60589, 60592, 60595, 60598, 60601, 60604, 60607, + 60610, 60613, 60616, 60619, 60622, 60625, 60628, 60631, 60634, 60637, + 60640, 60643, 60646, 60649, 60657, 60664, 60671, 60678, 60685, 60692, + 60699, 60706, 60713, 60720, 60728, 60736, 60744, 60752, 60760, 60768, + 60776, 60784, 60792, 60800, 60808, 60816, 60824, 60832, 60840, 60843, + 60846, 60849, 60851, 60854, 60857, 60860, 60865, 60870, 60873, 60880, + 60887, 60894, 60901, 60904, 60909, 60911, 60915, 60917, 60919, 60922, + 60925, 60928, 60931, 60934, 60937, 60940, 60945, 60950, 60953, 60956, + 60959, 60962, 60965, 60968, 60971, 60975, 60978, 60981, 60984, 60987, + 60990, 60994, 60997, 61000, 61003, 61008, 61013, 61018, 61023, 61028, + 61033, 61038, 61043, 61048, 61056, 61058, 61061, 61064, 61067, 61070, + 61075, 61083, 61086, 61089, 61093, 61096, 61099, 61102, 61107, 61110, + 61113, 61118, 61121, 61124, 61129, 61132, 61135, 61140, 61145, 61150, + 61153, 61156, 61159, 61162, 61168, 61171, 61174, 61177, 61179, 61182, + 61185, 61188, 61193, 61196, 61199, 61202, 61205, 61208, 61213, 61216, + 61219, 61222, 61225, 61228, 61231, 61234, 61237, 61240, 61245, 61249, + 61256, 61263, 61270, 61277, 61284, 61291, 61298, 61305, 61312, 61320, + 61328, 61336, 61344, 61352, 61360, 61368, 61376, 61384, 61392, 61400, + 61408, 61416, 61424, 61432, 61440, 61448, 61456, 61464, 61472, 61480, + 61488, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 61491, 61499, + 61507, 61517, 61523, 61527, 61531, 61537, 61543, 61548, 61552, 61556, + 61560, 61564, 61570, 61574, 61578, 61582, 61592, 61596, 61600, 61606, + 61610, 61616, 61620, 61624, 61630, 61636, 61642, 61650, 61658, 61662, + 61666, 61670, 61676, 61680, 61689, 61695, 61699, 61703, 61707, 61711, + 61715, 61719, 61726, 61732, 61738, 61742, 61748, 61752, 61758, 61766, + 61776, 61780, 61788, 61792, 61798, 61806, 61814, 61818, 61822, 61828, + 61833, 61839, 61845, 61849, 61853, 61856, 61860, 61864, 61868, 61872, + 61876, 61880, 61884, 61887, 61891, 61895, 61899, 61903, 61907, 61911, + 61914, 61918, 61922, 61925, 61929, 61933, 61937, 61941, 61945, 61949, + 61953, 61957, 61961, 61965, 61969, 61973, 61977, 61981, 61985, 61989, + 61993, 61997, 62001, 62005, 62009, 62013, 62017, 62021, 62025, 62029, + 62033, 62037, 62041, 62045, 62049, 62053, 62057, 62061, 62065, 62069, + 62073, 62077, 62081, 62085, 62089, 62093, 62097, 62101, 62104, 62108, + 62112, 62116, 62120, 62124, 62128, 62132, 62136, 62140, 62144, 62148, + 62152, 62156, 62160, 62164, 62168, 62172, 62176, 62180, 62184, 62188, + 62192, 62196, 62200, 62204, 62208, 62212, 62216, 62220, 62224, 62228, + 62232, 62236, 62240, 62244, 62248, 62252, 62256, 62260, 62264, 62268, + 62272, 62276, 62280, 62284, 62288, 62292, 62296, 62300, 62304, 62308, + 62312, 62316, 62320, 62324, 62328, 62332, 62336, 62340, 62344, 62348, + 62352, 62356, 62360, 62364, 62368, 62372, 62376, 62380, 62384, 62388, + 62392, 62396, 62400, 62404, 62408, 62412, 62416, 62420, 62424, 62428, + 62432, 62436, 62440, 62444, 62448, 62452, 62456, 62460, 62464, 62468, + 62472, 62476, 62480, 62484, 62488, 62492, 62496, 62500, 62504, 62508, + 62512, 62516, 62520, 62524, 62528, 62532, 62536, 62540, 62544, 62548, + 62552, 62556, 62560, 62564, 62568, 62572, 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, 62731, 62735, 62739, 62743, 62747, + 62751, 62755, 62759, 62763, 62767, 62771, 62775, 62779, 62783, 62787, + 62791, 62795, 62799, 62803, 62807, 62811, 62815, 62819, 62823, 62827, + 62831, 62835, 62839, 62843, 62847, 62851, 62855, 62859, 62863, 62867, + 62871, 62875, 62879, 62883, 62887, 62891, 62895, 62899, 62903, 62907, + 62911, 62915, 62919, 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, 63038, 63042, 63046, 63050, 63054, 63058, 63062, 63066, + 63070, 63074, 63078, 63082, 63086, 63090, 63094, 63098, 63102, 63106, + 63110, 63114, 63118, 63122, 63126, 63130, 63134, 63138, 63142, 63146, + 63150, 63154, 63158, 63162, 63166, 63170, 63174, 63178, 63182, 63186, + 63190, 63194, 63198, 63202, 63206, 63210, 63214, 63218, 63222, 63226, + 63230, 63234, 63238, 63242, 63246, 63250, 63254, 63258, 63262, 63266, + 63270, 63274, 63278, 63282, 63286, 63290, 63294, 63298, 63302, 63306, + 63310, 63314, 63318, 63322, 63326, 63330, 63334, 63338, 63342, 63346, + 63350, 63354, 63358, 63362, 63366, 63370, 63374, 63378, 63382, 63386, + 63390, 63394, 63397, 63401, 63405, 63409, 63413, 63417, 63421, 63425, + 63429, 63433, 63437, 63441, 63445, 63449, 63453, 63457, 63461, 63465, + 63469, 63473, 63477, 63481, 63485, 63489, 63493, 63497, 63501, 63505, + 63509, 63513, 63517, 63521, 63525, 63529, 63533, 63537, 63541, 63545, + 63549, 63553, 63557, 63561, 63565, 63569, 63573, 63577, 63581, 63585, + 63589, 63593, 63597, 63601, 63605, 63609, 63613, 63617, 63621, 63625, + 63629, 63633, 63637, 63641, 63645, 63649, 63653, 63657, 63661, 63665, + 63669, 63673, 63677, 63681, 63685, 63689, 63693, 63697, 63701, 63705, + 63709, 63713, 63717, 63721, 63725, 63729, 63733, 63737, 63741, 63745, + 63749, 63753, 63757, 63761, 63765, 63769, 63773, 63777, 63781, 63785, + 63789, 63793, 63797, 63801, 63805, 63809, 63813, 63817, 63821, 63825, + 63829, 63833, 63837, 63841, 63845, 63849, 63853, 63857, 63861, 63865, + 63869, 63873, 63877, 63881, 63885, 63889, 63892, 63896, 63900, 63904, + 63908, 63912, 63916, 63920, 63924, 63928, 63932, 63936, 63940, 63944, + 63948, 63952, 63956, 63960, 63964, 63968, 63972, 63976, 63980, 63984, + 63988, 63992, 63996, 64000, 64004, 64008, 64012, 64016, 64020, 64024, + 64028, 64032, 64036, 64040, 64044, 64048, 64052, 64056, 64060, 64064, + 64068, 64072, 64076, 64080, 64084, 64088, 64092, 64096, 64100, 64104, + 64108, 64112, 64116, 64120, 64124, 64128, 64132, 64136, 64140, 64144, + 64148, 64152, 64156, 64160, 64164, 64168, 64172, 64176, 64180, 64184, + 64188, 64192, 64196, 64200, 64204, 64208, 64212, 64216, 64220, 64224, + 64228, 64232, 64236, 64240, 64244, 64248, 64252, 64256, 64260, 64264, + 64268, 64272, 64276, 64280, 64284, 64288, 64292, 64296, 64300, 64304, + 64308, 64312, 64316, 64320, 64324, 64328, 64332, 64336, 64340, 64344, + 64347, 64351, 64355, 64359, 64363, 64367, 64371, 64375, 64379, 64383, + 64387, 64391, 64395, 64399, 64403, 64407, 64411, 64415, 64419, 64423, + 64427, 64431, 64435, 64439, 64443, 64447, 64451, 64455, 64459, 64463, + 64467, 64471, 64475, 64479, 64483, 64487, 64491, 64495, 64499, 64503, + 64507, 64511, 64515, 64519, 64523, 64527, 64531, 64535, 64539, 64543, + 64547, 64551, 64555, 64559, 64563, 64567, 64571, 64575, 64579, 64583, + 64587, 64591, 64595, 64599, 64603, 64607, 64611, 64615, 64619, 64623, 64627, 64631, 64635, 64639, 64643, 64647, 64651, 64655, 64659, 64663, - 64667, 64671, 64674, 64678, 64682, 64686, 64690, 64694, 64698, 64702, - 64706, 64710, 64714, 64718, 64722, 64726, 64730, 64734, 64738, 64742, - 64746, 64750, 64754, 64758, 64761, 64765, 64769, 64773, 64777, 64781, - 64785, 64789, 64793, 64797, 64801, 64805, 64809, 64813, 64817, 64821, - 64825, 64829, 64833, 64837, 64841, 64845, 64849, 64853, 64857, 64861, - 64865, 64869, 64873, 64877, 64881, 64885, 64889, 64893, 64897, 64901, - 64905, 64909, 64913, 64917, 64921, 64925, 64929, 64933, 64936, 64941, - 64945, 64951, 64956, 64962, 64966, 64970, 64974, 64978, 64982, 64986, - 64990, 64994, 64998, 65002, 65006, 65010, 65014, 65018, 65021, 65024, - 65027, 65030, 65033, 65036, 65039, 65042, 65045, 65050, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 65056, 65061, 65066, 65071, - 65076, 65082, 65088, 65093, 65098, 65103, 65108, 65115, 65122, 65129, - 65136, 65143, 65150, 65160, 65170, 65177, 65184, 65190, 65196, 65202, - 65208, 65217, 65226, 65233, 65240, 65251, 65262, 65267, 0, 0, 65272, - 65279, 65286, 65293, 65300, 65307, 65314, 65320, 65326, 65332, 65338, - 65345, 65352, 65357, 65361, 65368, 65375, 65382, 0, 0, 0, 0, 0, 0, 0, 0, - 65386, 65390, 65394, 65397, 65400, 65405, 65410, 65415, 65420, 65425, - 65430, 65435, 65440, 65445, 65450, 65459, 65468, 65473, 65478, 65483, - 65488, 65493, 65498, 65503, 65508, 65513, 65518, 65523, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 65528, 65537, 65546, 65555, 65564, 65573, 65582, 65591, 65600, - 65608, 65615, 65623, 65630, 65638, 65648, 65657, 65667, 65676, 65686, - 65694, 65701, 65709, 65716, 65724, 65729, 65734, 65739, 65747, 65753, - 65759, 65766, 65775, 65783, 65791, 65799, 65806, 65813, 65820, 65827, - 65832, 65837, 65842, 65847, 65852, 65857, 65862, 65867, 65875, 65883, - 65889, 65894, 65899, 65904, 65909, 65914, 65919, 65924, 65929, 65934, - 65942, 65950, 65955, 65960, 65969, 65978, 65985, 65992, 66001, 66010, - 66021, 66032, 66038, 66044, 66052, 66060, 66069, 66078, 66085, 66092, - 66097, 66102, 66113, 66124, 66132, 66140, 66150, 66160, 66171, 66182, - 66191, 66200, 66207, 66214, 66221, 66228, 66237, 66246, 66251, 66256, - 66263, 66270, 66277, 66284, 66295, 66306, 66311, 66316, 66321, 66326, - 66331, 66336, 66341, 66346, 66350, 66355, 66360, 66365, 66370, 66375, - 66381, 66386, 66391, 66398, 66405, 66412, 66419, 66425, 66432, 66439, - 66444, 66449, 66455, 66461, 66467, 66473, 66480, 66487, 66494, 66498, - 66505, 66510, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66515, 66522, - 66529, 66536, 66544, 66551, 66557, 66563, 66570, 66576, 66582, 66588, - 66595, 66602, 66609, 66616, 66623, 66630, 66637, 66644, 66651, 66658, - 66665, 66672, 66679, 66686, 66692, 66699, 66706, 66713, 66720, 66727, - 66734, 66741, 66748, 66755, 66762, 66769, 66776, 66783, 66790, 66797, - 66804, 66811, 66818, 66826, 66834, 66842, 66850, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66858, 66861, 66865, 66869, 66873, - 66877, 66881, 66885, 66889, 66893, 66897, 66901, 66905, 66908, 66912, - 66916, 66919, 66923, 66927, 66931, 66935, 66939, 66943, 66947, 66950, - 66953, 66957, 66961, 66965, 66968, 66971, 66974, 66977, 66980, 66983, - 66987, 66991, 66995, 66999, 67003, 67009, 67014, 67018, 67022, 67026, - 67030, 67035, 67041, 67046, 67052, 67057, 67062, 67066, 67072, 67077, - 67081, 0, 0, 0, 0, 0, 0, 0, 0, 67086, 67090, 67094, 67097, 67101, 67104, - 67108, 67111, 67115, 67119, 67124, 67128, 67133, 67136, 67140, 67144, - 67147, 67151, 67155, 67158, 67162, 67166, 67170, 67174, 67178, 67182, - 67186, 67190, 67194, 67198, 67202, 67206, 67210, 67214, 67218, 67222, - 67226, 67230, 67234, 67237, 67241, 67245, 67249, 67252, 67255, 67258, - 67262, 67266, 67270, 67274, 67278, 67281, 67285, 67291, 67296, 67300, - 67305, 67309, 67314, 67319, 67325, 67330, 67336, 67340, 67345, 67350, - 67354, 67359, 67364, 0, 0, 0, 0, 0, 0, 0, 0, 0, 67368, 67371, 67375, - 67379, 67382, 67385, 67388, 67391, 67394, 67397, 67400, 67403, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 67406, 67413, 67419, 67425, 67431, - 67437, 67443, 67449, 67455, 67461, 67467, 67473, 67480, 67487, 67494, - 67501, 67508, 67515, 67522, 67529, 67536, 67543, 67549, 67556, 67562, - 67569, 67576, 67582, 67588, 67595, 67602, 67609, 67615, 67622, 67629, - 67635, 67642, 67648, 67655, 67662, 67668, 67674, 67681, 67687, 67694, - 67701, 67710, 67717, 67724, 67728, 67733, 67738, 67743, 67748, 67753, - 67757, 67762, 67766, 67771, 67776, 67781, 67786, 67790, 67795, 67799, - 67804, 67808, 67813, 67818, 67823, 67828, 67832, 67837, 67842, 67847, - 67853, 67858, 67864, 67870, 67876, 67883, 67889, 67895, 67901, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 67905, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 67910, 67913, - 67916, 67919, 67922, 67926, 67929, 67932, 67936, 67940, 67944, 67948, - 67952, 67956, 67960, 67964, 67968, 67972, 67976, 67980, 67984, 67988, - 67992, 67996, 68000, 68004, 68008, 68011, 68015, 68019, 68023, 68027, - 68031, 68034, 68038, 68041, 68044, 68048, 68052, 68056, 68060, 68063, - 68068, 68072, 68077, 68082, 68086, 68091, 68095, 68100, 68105, 68110, - 68115, 68120, 68126, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68132, 68137, 68141, - 68146, 68153, 68158, 68163, 68167, 68172, 68177, 68181, 68185, 68190, - 68196, 0, 0, 68202, 68206, 68209, 68212, 68215, 68218, 68221, 68224, - 68227, 68230, 0, 0, 68233, 68238, 68243, 68249, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 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, 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, 68992, 68996, 69000, 69004, 69008, 69012, - 69016, 69020, 69024, 69028, 69032, 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, 0, 0, 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, 0, 0, 0, 0, 0, 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, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 70124, 70129, 70134, 70139, 70144, - 70149, 70157, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 70162, 70169, 70176, - 70183, 70190, 0, 0, 0, 0, 0, 70197, 70204, 70211, 70221, 70227, 70233, - 70239, 70245, 70251, 70257, 70264, 70270, 70276, 70282, 70291, 70300, - 70312, 70324, 70330, 70336, 70342, 70349, 70356, 70363, 70370, 70377, 0, - 70384, 70391, 70398, 70406, 70413, 0, 70420, 0, 70427, 70434, 0, 70441, - 70449, 0, 70456, 70463, 70470, 70477, 70484, 70491, 70498, 70505, 70512, - 70519, 70524, 70531, 70538, 70544, 70550, 70556, 70562, 70568, 70574, - 70580, 70586, 70592, 70598, 70604, 70610, 70616, 70622, 70628, 70634, - 70640, 70646, 70652, 70658, 70664, 70670, 70676, 70682, 70688, 70694, - 70700, 70706, 70712, 70718, 70724, 70730, 70736, 70742, 70748, 70754, - 70760, 70766, 70772, 70778, 70784, 70790, 70796, 70802, 70808, 70814, - 70820, 70826, 70832, 70838, 70844, 70850, 70856, 70862, 70868, 70874, - 70880, 70886, 70892, 70898, 70904, 70910, 70916, 70922, 70928, 70934, - 70940, 70946, 70952, 70958, 70964, 70970, 70976, 70982, 70988, 70994, - 71002, 71010, 71016, 71022, 71028, 71034, 71043, 71052, 71060, 71068, - 71076, 71084, 71092, 71100, 71108, 71116, 71123, 71130, 71140, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 71150, 71156, 71162, 71168, 71174, 71179, 71184, 71190, - 71196, 71202, 71208, 71216, 71222, 71228, 71236, 71244, 71252, 71260, - 71265, 71270, 71275, 71280, 71292, 71304, 71314, 71324, 71335, 71346, - 71357, 71368, 71378, 71388, 71399, 71410, 71421, 71432, 71442, 71452, - 71462, 71477, 71492, 71507, 71514, 71521, 71528, 71535, 71545, 71555, - 71565, 71576, 71586, 71594, 71602, 71610, 71618, 71627, 71635, 71643, - 71651, 71659, 71667, 71676, 71684, 71692, 71700, 71709, 71717, 71724, - 71731, 71738, 71745, 71752, 71759, 71766, 71774, 71782, 71790, 71798, - 71806, 71814, 71822, 71830, 71838, 71846, 71854, 71862, 71870, 71878, - 71886, 71894, 71902, 71910, 71918, 71926, 71934, 71943, 71951, 71959, - 71967, 71976, 71984, 71992, 72000, 72008, 72016, 72024, 72032, 72041, - 72049, 72056, 72063, 72070, 72077, 72085, 72092, 72099, 72106, 72113, - 72120, 72128, 72135, 72143, 72151, 72159, 72167, 72176, 72184, 72192, - 72200, 72209, 72217, 72224, 72231, 72238, 72245, 72253, 72260, 72270, - 72280, 72290, 72299, 72308, 72317, 72326, 72335, 72345, 72356, 72367, - 72377, 72388, 72399, 72409, 72418, 72427, 72435, 72444, 72453, 72461, - 72470, 72479, 72487, 72496, 72505, 72513, 72522, 72531, 72539, 72548, - 72557, 72565, 72574, 72582, 72591, 72599, 72607, 72615, 72623, 72632, - 72640, 72647, 72655, 72662, 72669, 72676, 72685, 72694, 72702, 72711, - 72720, 72728, 72738, 72746, 72754, 72761, 72769, 72777, 72784, 72794, - 72804, 72814, 72824, 72835, 72843, 72851, 72859, 72867, 72876, 72884, - 72892, 72900, 72908, 72917, 72925, 72932, 72939, 72946, 72953, 72960, - 72967, 72975, 72983, 72991, 72999, 73007, 73015, 73023, 73031, 73039, - 73047, 73055, 73063, 73071, 73079, 73087, 73095, 73103, 73111, 73119, - 73127, 73135, 73143, 73151, 73159, 73167, 73175, 73183, 73191, 73198, - 73205, 73212, 73219, 73227, 73234, 73241, 73248, 73255, 73263, 73271, - 73279, 73287, 73296, 73304, 73312, 73322, 73329, 73336, 73343, 73350, - 73358, 73368, 73379, 73387, 73396, 73404, 73413, 73421, 73430, 73438, - 73447, 73455, 73464, 73472, 73480, 73487, 73495, 73504, 73511, 73519, - 73528, 73537, 73546, 73555, 73563, 73572, 73580, 73589, 73597, 73606, - 73614, 73623, 73631, 73639, 73646, 73654, 73661, 73669, 73676, 73685, - 73693, 73702, 73710, 73718, 73726, 73734, 73742, 73751, 73760, 73769, - 73778, 73787, 73795, 73804, 73812, 73821, 73829, 73838, 73846, 73855, - 73863, 73871, 73878, 73886, 73893, 73901, 73908, 73917, 73925, 73934, - 73942, 73950, 73958, 73966, 73974, 73983, 73992, 74001, 74010, 74018, - 74026, 74034, 74042, 74051, 74060, 74068, 74076, 74084, 74092, 74100, - 74108, 74116, 74124, 74132, 74140, 74148, 74153, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 74158, 74168, 74178, 74188, 74198, 74208, 74218, - 74228, 74238, 74247, 74256, 74265, 74275, 74285, 74295, 74306, 74316, - 74326, 74336, 74346, 74356, 74366, 74376, 74386, 74396, 74406, 74416, - 74426, 74436, 74446, 74456, 74467, 74477, 74487, 74497, 74507, 74517, - 74527, 74537, 74547, 74557, 74568, 74578, 74588, 74599, 74609, 74619, - 74629, 74639, 74648, 74657, 74667, 74676, 74685, 74694, 74703, 74712, - 74721, 74730, 74739, 74748, 74757, 74766, 74775, 0, 0, 74784, 74793, - 74803, 74813, 74823, 74834, 74844, 74854, 74865, 74875, 74886, 74895, - 74904, 74914, 74924, 74935, 74945, 74956, 74966, 74977, 74986, 74996, - 75006, 75017, 75027, 75037, 75047, 75056, 75065, 75074, 75083, 75092, - 75101, 75111, 75121, 75131, 75140, 75150, 75160, 75170, 75179, 75188, - 75198, 75207, 75217, 75226, 75235, 75244, 75254, 75264, 75274, 75284, - 75294, 75304, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 75314, 75329, - 75344, 75350, 75356, 75362, 75368, 75374, 75380, 75386, 75392, 75400, - 75404, 75407, 0, 0, 75415, 75418, 75421, 75424, 75427, 75430, 75433, - 75436, 75439, 75442, 75445, 75448, 75451, 75454, 75457, 75460, 75463, - 75470, 75478, 75488, 75495, 75502, 75510, 75518, 75528, 75539, 0, 0, 0, - 0, 0, 0, 75547, 75552, 75557, 75564, 75571, 75577, 75583, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 75588, 75597, 75606, 75615, 75623, 75633, 75641, 75649, - 75658, 75667, 75678, 75689, 75699, 75709, 75719, 75729, 75738, 75747, - 75756, 75765, 75775, 75785, 75789, 75794, 75802, 75810, 75814, 75818, - 75822, 75827, 75832, 75837, 75842, 75845, 75849, 0, 75854, 75857, 75860, - 75864, 75868, 75873, 75877, 75881, 75886, 75891, 75898, 75905, 75908, - 75911, 75914, 75917, 75920, 75924, 75928, 0, 75932, 75937, 75941, 75945, - 0, 0, 0, 0, 75950, 75955, 75962, 75967, 75972, 0, 75977, 75982, 75987, - 75992, 75997, 76002, 76007, 76012, 76017, 76022, 76027, 76032, 76041, - 76050, 76058, 76066, 76075, 76084, 76093, 76102, 76110, 76118, 76126, - 76134, 76139, 76144, 76150, 76156, 76162, 76168, 76176, 76184, 76190, - 76196, 76202, 76208, 76214, 76220, 76226, 76232, 76237, 76242, 76247, - 76252, 76257, 76262, 76267, 76272, 76277, 76282, 76287, 76292, 76298, - 76304, 76310, 76316, 76322, 76328, 76334, 76340, 76346, 76352, 76358, - 76364, 76370, 76376, 76382, 76388, 76394, 76400, 76406, 76412, 76418, - 76424, 76430, 76436, 76442, 76448, 76454, 76460, 76466, 76472, 76478, - 76484, 76490, 76496, 76502, 76508, 76514, 76520, 76526, 76532, 76538, - 76544, 76550, 76556, 76562, 76568, 76574, 76580, 76586, 76592, 76598, - 76604, 76609, 76614, 76619, 76624, 76629, 76634, 76639, 76644, 76650, - 76656, 76662, 76668, 76674, 76680, 76686, 76692, 76698, 76704, 76710, - 76716, 76721, 76726, 76731, 76736, 76747, 76758, 76768, 76778, 76789, - 76800, 76807, 0, 0, 76814, 0, 76822, 76826, 76830, 76833, 76837, 76841, - 76844, 76847, 76851, 76855, 76858, 76861, 76864, 76867, 76872, 76875, - 76879, 76882, 76885, 76888, 76891, 76894, 76897, 76900, 76903, 76906, - 76909, 76912, 76916, 76920, 76924, 76928, 76933, 76938, 76944, 76950, - 76956, 76961, 76967, 76972, 76977, 76982, 76988, 76994, 76999, 77004, - 77009, 77014, 77020, 77026, 77031, 77036, 77042, 77047, 77052, 77058, - 77064, 77070, 77076, 77080, 77085, 77089, 77094, 77098, 77103, 77108, - 77114, 77120, 77126, 77131, 77137, 77142, 77147, 77152, 77158, 77164, - 77169, 77174, 77179, 77184, 77190, 77196, 77201, 77206, 77212, 77217, - 77222, 77228, 77234, 77240, 77246, 77251, 77255, 77260, 77262, 77267, - 77272, 77278, 77283, 77288, 77292, 77298, 77303, 77308, 77313, 77318, - 77323, 77328, 77333, 77339, 77345, 77351, 77359, 77363, 77367, 77371, - 77375, 77379, 77383, 77388, 77393, 77398, 77403, 77408, 77413, 77418, - 77423, 77428, 77433, 77438, 77443, 77448, 77452, 77457, 77462, 77467, - 77472, 77477, 77481, 77486, 77491, 77496, 77501, 77505, 77510, 77515, - 77520, 77525, 77529, 77534, 77539, 77543, 77548, 77553, 77558, 77563, - 77568, 77572, 77579, 77586, 77590, 77595, 77600, 77605, 77610, 77615, - 77620, 77625, 77630, 77635, 77640, 77645, 77650, 77655, 77660, 77665, - 77670, 77675, 77680, 77685, 77690, 77695, 77700, 77705, 77710, 77715, - 77720, 77725, 77730, 77735, 0, 0, 0, 77740, 77744, 77749, 77753, 77758, - 77763, 0, 0, 77767, 77772, 77777, 77781, 77786, 77791, 0, 0, 77796, - 77801, 77805, 77810, 77815, 77820, 0, 0, 77825, 77830, 77835, 0, 0, 0, - 77839, 77843, 77847, 77850, 77853, 77857, 77861, 0, 77865, 77871, 77874, - 77878, 77881, 77885, 77889, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 77893, 77899, - 77905, 77911, 77917, 0, 0, 77921, 77927, 77933, 77939, 77945, 77951, - 77958, 77965, 77972, 77979, 77986, 77993, 0, 78000, 78007, 78014, 78020, - 78027, 78034, 78041, 78048, 78054, 78061, 78068, 78075, 78082, 78089, - 78096, 78103, 78110, 78117, 78123, 78130, 78137, 78144, 78151, 78158, - 78165, 78172, 0, 78179, 78185, 78192, 78199, 78206, 78213, 78220, 78227, - 78234, 78241, 78248, 78255, 78262, 78269, 78275, 78282, 78289, 78296, - 78303, 0, 78310, 78317, 0, 78324, 78331, 78338, 78345, 78352, 78359, - 78366, 78373, 78380, 78387, 78394, 78401, 78408, 78415, 78422, 0, 0, - 78428, 78433, 78438, 78443, 78448, 78453, 78458, 78463, 78468, 78473, - 78478, 78483, 78488, 78493, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 78498, 78505, - 78512, 78519, 78526, 78533, 78540, 78547, 78554, 78561, 78568, 78575, - 78582, 78589, 78596, 78603, 78610, 78617, 78624, 78631, 78639, 78647, - 78654, 78661, 78666, 78674, 78682, 78689, 78696, 78701, 78708, 78713, - 78718, 78725, 78730, 78735, 78740, 78748, 78753, 78758, 78765, 78770, - 78775, 78782, 78789, 78794, 78799, 78804, 78809, 78814, 78819, 78824, - 78829, 78834, 78841, 78846, 78853, 78858, 78863, 78868, 78873, 78878, - 78883, 78888, 78893, 78898, 78903, 78908, 78915, 78922, 78929, 78936, - 78942, 78947, 78954, 78959, 78964, 78973, 78980, 78989, 78996, 79001, - 79006, 79014, 79019, 79024, 79029, 79034, 79039, 79046, 79051, 79056, - 79061, 79066, 79071, 79078, 79085, 79092, 79099, 79106, 79113, 79120, - 79127, 79134, 79141, 79148, 79155, 79162, 79169, 79176, 79183, 79190, - 79197, 79204, 79211, 79218, 79225, 79232, 79239, 79246, 79253, 79260, - 79267, 0, 0, 0, 0, 0, 79274, 79281, 79288, 0, 0, 0, 0, 79292, 79295, - 79298, 79301, 79304, 79307, 79310, 79313, 79316, 79319, 79323, 79327, - 79331, 79335, 79339, 79343, 79347, 79351, 79355, 79360, 79365, 79370, - 79376, 79382, 79388, 79394, 79400, 79406, 79411, 79416, 79421, 79427, - 79433, 79439, 79445, 79451, 79457, 79463, 79469, 79475, 79481, 79487, - 79493, 79499, 79505, 0, 0, 0, 79511, 79518, 79525, 79532, 79539, 79546, - 79555, 79564, 79571, 79578, 79586, 79594, 79602, 79608, 79615, 79624, - 79633, 79642, 79651, 79660, 79669, 79679, 79690, 79700, 79711, 79720, - 79729, 79738, 79748, 79759, 79769, 79780, 79791, 79800, 79808, 79814, - 79820, 79826, 79832, 79840, 79848, 79854, 79861, 79871, 79878, 79885, - 79892, 79899, 79906, 79916, 79923, 79930, 79938, 79946, 79955, 79964, - 79973, 79982, 79991, 79999, 80008, 80017, 80026, 80030, 80037, 80042, - 80047, 80051, 80055, 80059, 80063, 80068, 80073, 80079, 80085, 80089, - 80095, 80099, 80103, 80107, 80111, 80115, 80119, 80125, 0, 0, 0, 0, 0, - 80129, 80134, 80139, 80144, 80149, 80156, 80161, 80166, 80171, 80176, - 80181, 80186, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 80191, 80198, 80207, 80216, 80223, 80230, 80237, - 80244, 80251, 80258, 80264, 80271, 80278, 80285, 80292, 80299, 80306, - 80313, 80320, 80329, 80336, 80343, 80350, 80357, 80364, 80371, 80378, - 80385, 80394, 80401, 80408, 80415, 80422, 80429, 80436, 80445, 80452, - 80459, 80466, 80473, 80482, 80489, 80496, 80503, 80511, 80520, 0, 0, - 80529, 80533, 80537, 80542, 80547, 80551, 80556, 80560, 80565, 80570, - 80575, 80580, 80585, 80590, 80594, 80598, 80602, 80607, 80612, 80616, - 80621, 80626, 80630, 80634, 80639, 80644, 80649, 80654, 80658, 0, 0, 0, - 80663, 80667, 80672, 80677, 80681, 80686, 80690, 80695, 80700, 80705, - 80710, 80714, 80718, 80723, 80728, 80733, 80738, 80742, 80747, 80751, - 80756, 80761, 80765, 80770, 80775, 80780, 80784, 80788, 80793, 80798, - 80803, 80808, 80813, 80817, 80822, 80827, 80832, 80837, 80842, 80847, - 80852, 80857, 80862, 80867, 80872, 80877, 80882, 80887, 80892, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 80897, 80901, - 80906, 80911, 80916, 80920, 80925, 80930, 80935, 80940, 80944, 80948, - 80953, 80958, 80963, 80968, 80972, 80977, 80982, 80987, 80992, 80997, - 81002, 81006, 81011, 81016, 81021, 81026, 81031, 81036, 81041, 0, 81046, - 81050, 81054, 81059, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 81064, 81069, - 81074, 81079, 81084, 81089, 81094, 81099, 81104, 81109, 81114, 81119, - 81124, 81129, 81134, 81139, 81144, 81149, 81154, 81159, 81164, 81169, - 81174, 81179, 81184, 81189, 81194, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 81201, 81206, 81211, - 81216, 81221, 81226, 81231, 81236, 81241, 81246, 81251, 81256, 81261, - 81266, 81271, 81276, 81281, 81286, 81291, 81296, 81301, 81306, 81311, - 81316, 81321, 81326, 81331, 81335, 81339, 81343, 0, 81348, 81354, 81359, - 81364, 81369, 81374, 81380, 81386, 81392, 81398, 81404, 81410, 81416, - 81422, 81428, 81434, 81440, 81446, 81452, 81457, 81463, 81469, 81475, - 81481, 81486, 81492, 81498, 81503, 81509, 81515, 81520, 81526, 81532, - 81538, 81544, 81550, 81556, 0, 0, 0, 0, 81561, 81567, 81573, 81579, - 81585, 81591, 81597, 81603, 81609, 81616, 81621, 81626, 81632, 81638, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 81644, 81649, 81654, - 81659, 81665, 81670, 81676, 81682, 81688, 81694, 81701, 81707, 81714, - 81719, 81724, 81729, 81734, 81738, 81743, 81748, 81753, 81758, 81763, - 81768, 81773, 81778, 81783, 81788, 81793, 81798, 81803, 81808, 81813, - 81818, 81823, 81828, 81833, 81838, 81843, 81848, 81853, 81858, 81863, - 81868, 81874, 81879, 81885, 81891, 81897, 81903, 81910, 81916, 81923, - 81928, 81933, 81938, 81943, 81947, 81952, 81957, 81962, 81967, 81972, - 81977, 81982, 81987, 81992, 81997, 82002, 82007, 82012, 82017, 82022, - 82027, 82032, 82037, 82042, 82047, 82052, 82057, 82062, 82067, 82072, - 82077, 82082, 82087, 82092, 82097, 82102, 82107, 82112, 82117, 82122, - 82127, 82132, 82137, 82142, 82147, 82152, 82157, 82162, 82167, 82172, - 82177, 82182, 82187, 82192, 82197, 82202, 82207, 82212, 82217, 82222, - 82227, 82232, 82237, 82242, 82247, 82252, 82257, 82262, 82267, 82272, - 82277, 82282, 82287, 82292, 82297, 82302, 82307, 82312, 82317, 82322, - 82327, 82332, 82337, 82341, 82346, 82351, 82356, 82361, 82366, 82371, - 82376, 82381, 82386, 82391, 82396, 82401, 82405, 82409, 82413, 82417, - 82421, 82425, 82429, 82434, 82439, 0, 0, 82444, 82449, 82453, 82457, - 82461, 82465, 82469, 82473, 82477, 82481, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 82485, 82488, 82491, 82494, 82497, 82500, 0, 0, 82504, 0, - 82508, 82511, 82515, 82519, 82523, 82527, 82531, 82535, 82539, 82543, - 82547, 82550, 82554, 82558, 82562, 82566, 82570, 82574, 82578, 82582, - 82586, 82589, 82593, 82597, 82601, 82605, 82608, 82612, 82616, 82620, - 82624, 82628, 82632, 82636, 82640, 82644, 82648, 82652, 82656, 82659, - 82663, 82667, 82671, 82675, 0, 82679, 82683, 0, 0, 0, 82687, 0, 0, 82691, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82695, 82700, 82705, - 82710, 82715, 82720, 82725, 82730, 82735, 82740, 82745, 82750, 82755, - 82760, 82765, 82770, 82775, 82780, 82785, 82790, 82795, 82800, 82805, - 82809, 82814, 82819, 0, 0, 0, 0, 0, 82825, 82831, 82835, 82840, 82844, - 82849, 82853, 82857, 82861, 82866, 82871, 82875, 82879, 82883, 82887, - 82891, 82896, 82901, 82905, 82910, 82915, 82919, 82924, 82929, 82934, - 82939, 82944, 0, 0, 0, 0, 0, 82949, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 82954, 82957, 82961, 82965, 0, 82970, 82974, 0, 0, 0, 0, 0, - 82978, 82983, 82989, 82993, 82997, 83000, 83004, 83008, 0, 83012, 83016, - 83020, 0, 83024, 83028, 83032, 83036, 83040, 83044, 83048, 83052, 83056, - 83060, 83064, 83068, 83071, 83075, 83079, 83083, 83086, 83089, 83092, - 83096, 83100, 83104, 83108, 83112, 83116, 83119, 83123, 0, 0, 0, 0, - 83127, 83132, 83136, 0, 0, 0, 0, 83140, 83143, 83146, 83149, 83152, - 83155, 83159, 83163, 83168, 0, 0, 0, 0, 0, 0, 0, 0, 83173, 83178, 83184, - 83189, 83195, 83200, 83205, 83210, 83216, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 83221, 83224, 83229, 83235, 83243, 83248, 83254, 83262, - 83268, 83274, 83278, 83282, 83289, 83298, 83305, 83314, 83320, 83329, - 83336, 83343, 83350, 83360, 83366, 83370, 83377, 83386, 83396, 83403, - 83410, 83414, 83418, 83425, 83435, 83439, 83446, 83453, 83460, 83466, - 83473, 83480, 83487, 83494, 83498, 83502, 83506, 83513, 83517, 83524, - 83531, 83545, 83554, 83558, 83562, 83566, 83573, 83577, 83581, 83585, - 83593, 83601, 83620, 83630, 83650, 83654, 83658, 83662, 83666, 83670, - 83674, 83678, 83685, 83689, 83692, 83696, 83700, 83706, 83713, 83722, - 83726, 83735, 83744, 83752, 83756, 83763, 83767, 83771, 83775, 83779, - 83790, 83799, 83808, 83817, 83826, 83838, 83847, 83856, 83865, 83873, - 83882, 83894, 83903, 83912, 83921, 83933, 83942, 83951, 83963, 83972, - 83981, 83993, 84002, 84006, 84010, 84014, 84018, 84022, 84026, 84030, - 84037, 84041, 84045, 84056, 84060, 84064, 84071, 84077, 84083, 84087, - 84094, 84098, 84102, 84106, 84110, 84114, 84118, 84124, 84132, 84136, - 84140, 84143, 84149, 84159, 84163, 84175, 84182, 84189, 84196, 84203, - 84209, 84213, 84217, 84221, 84225, 84232, 84241, 84248, 84256, 84264, - 84270, 84274, 84278, 84282, 84286, 84292, 84301, 84313, 84320, 84327, - 84336, 84347, 84353, 84362, 84371, 84378, 84387, 84394, 84401, 84411, - 84418, 84425, 84432, 84439, 84443, 84449, 84453, 84464, 84472, 84481, - 84493, 84500, 84507, 84517, 84524, 84533, 84540, 84549, 84556, 84563, - 84573, 84580, 84587, 84597, 84604, 84616, 84625, 84632, 84639, 84646, - 84655, 84665, 84678, 84685, 84695, 84705, 84712, 84721, 84734, 84741, - 84748, 84755, 84765, 84775, 84782, 84792, 84799, 84806, 84816, 84822, - 84829, 84836, 84843, 84853, 84860, 84867, 84874, 84880, 84887, 84897, - 84904, 84908, 84916, 84920, 84932, 84936, 84950, 84954, 84958, 84962, - 84966, 84972, 84979, 84987, 84991, 84995, 84999, 85003, 85010, 85014, - 85020, 85026, 85034, 85038, 85045, 85053, 85057, 85061, 85067, 85071, - 85080, 85089, 85096, 85106, 85112, 85116, 85120, 85128, 85135, 85142, - 85148, 85152, 85160, 85164, 85171, 85183, 85190, 85200, 85206, 85210, - 85219, 85226, 85235, 85239, 85243, 85250, 85254, 85258, 85262, 85266, - 85269, 85275, 85281, 85285, 85289, 85296, 85303, 85310, 85317, 85324, - 85331, 85338, 85345, 85351, 85355, 85359, 85366, 85373, 85380, 85387, - 85394, 85398, 85401, 85406, 85410, 85414, 85423, 85432, 85436, 85440, - 85446, 85452, 85469, 85475, 85479, 85488, 85492, 85496, 85503, 85511, - 85519, 85525, 85529, 85533, 85537, 85541, 85544, 85549, 85555, 85564, - 85570, 85576, 85582, 85587, 85593, 85599, 85605, 85611, 85617, 85625, - 85631, 85642, 85648, 85654, 85663, 85673, 85679, 85685, 85691, 85697, - 85703, 85709, 85715, 85721, 85727, 85733, 85742, 85751, 85760, 85766, - 85775, 85781, 85787, 85793, 85799, 85805, 85811, 85817, 85823, 85829, - 85835, 85841, 85847, 85853, 85858, 85864, 85870, 85878, 85884, 85890, - 85894, 85902, 85906, 85910, 85914, 85918, 85922, 85929, 85933, 85942, - 85946, 85953, 85961, 85965, 85969, 85973, 85984, 85998, 86002, 86006, - 86013, 86019, 86026, 86030, 86034, 86038, 86042, 86046, 86053, 86057, - 86075, 86079, 86083, 86090, 86094, 86098, 86104, 86108, 86112, 86120, - 86124, 86128, 86132, 86136, 86141, 86151, 86159, 86167, 86173, 86179, - 86189, 86195, 86201, 86207, 86213, 86219, 86225, 86231, 86240, 86245, - 86251, 86260, 86268, 86274, 86282, 86291, 86297, 86303, 86309, 86315, - 86326, 86332, 86338, 86344, 86350, 86356, 86365, 86371, 86377, 86386, - 86398, 86409, 86415, 86424, 86430, 86436, 86442, 86456, 86461, 86468, - 86477, 86486, 86492, 86498, 86503, 86507, 86514, 86524, 86530, 86543, - 86547, 86551, 86558, 86562, 86568, 86577, 86581, 86585, 86589, 86593, - 86597, 86604, 86608, 86615, 86622, 86629, 86638, 86647, 86657, 86664, - 86671, 86678, 86688, 86695, 86705, 86712, 86722, 86729, 86736, 86746, - 86756, 86763, 86769, 86777, 86785, 86791, 86797, 86801, 86805, 86812, - 86820, 86826, 86830, 86834, 86838, 86845, 86857, 86860, 86867, 86873, - 86877, 86881, 86885, 86889, 86893, 86897, 86901, 86905, 86909, 86913, - 86920, 86924, 86930, 86934, 86938, 86942, 86948, 86955, 86962, 86969, - 86981, 86989, 86993, 86999, 87008, 87015, 87021, 87025, 87029, 87033, - 87039, 87048, 87056, 87060, 87066, 87070, 87074, 87078, 87084, 87091, - 87097, 87101, 87107, 87111, 87115, 87124, 87136, 87140, 87147, 87154, - 87164, 87171, 87183, 87190, 87197, 87204, 87215, 87225, 87238, 87248, - 87255, 87259, 87263, 87267, 87271, 87280, 87289, 87298, 87315, 87324, - 87330, 87337, 87345, 87358, 87362, 87371, 87380, 87389, 87398, 87409, - 87418, 87427, 87436, 87445, 87454, 87463, 87473, 87476, 87480, 87484, - 87488, 87492, 87496, 87502, 87509, 87516, 87523, 87529, 87535, 87542, - 87548, 87555, 87563, 87567, 87574, 87581, 87588, 87596, 87599, 87603, - 87607, 87611, 87615, 87621, 87625, 87631, 87638, 87645, 87651, 87658, - 87665, 87672, 87679, 87686, 87693, 87700, 87707, 87714, 87721, 87728, - 87735, 87742, 87749, 87755, 87759, 87767, 87771, 87775, 87779, 87783, - 87789, 87796, 87803, 87810, 87817, 87824, 87830, 87838, 87842, 87846, - 87850, 87854, 87860, 87877, 87894, 87898, 87902, 87906, 87910, 87914, - 87918, 87924, 87931, 87935, 87941, 87948, 87955, 87962, 87969, 87976, - 87985, 87992, 87999, 88006, 88013, 88017, 88021, 88027, 88039, 88043, - 88047, 88056, 88060, 88064, 88068, 88074, 88078, 88082, 88091, 88095, - 88099, 88103, 88110, 88114, 88118, 88122, 88126, 88130, 88134, 88138, - 88142, 88148, 88155, 88162, 88168, 88172, 88189, 88195, 88199, 88205, - 88211, 88217, 88223, 88229, 88235, 88239, 88243, 88247, 88253, 88257, - 88263, 88267, 88271, 88278, 88285, 88302, 88306, 88310, 88314, 88318, - 88322, 88334, 88337, 88342, 88347, 88362, 88372, 88383, 88387, 88391, - 88395, 88401, 88408, 88415, 88425, 88437, 88443, 88449, 88458, 88462, - 88466, 88473, 88483, 88490, 88496, 88500, 88504, 88511, 88517, 88521, - 88527, 88531, 88539, 88545, 88549, 88557, 88566, 88573, 88579, 88586, - 88593, 88603, 88613, 88617, 88621, 88625, 88629, 88635, 88642, 88648, - 88655, 88662, 88669, 88678, 88685, 88692, 88698, 88705, 88712, 88719, - 88726, 88733, 88740, 88746, 88753, 88760, 88767, 88776, 88783, 88790, - 88794, 88800, 88804, 88810, 88817, 88824, 88831, 88835, 88839, 88843, - 88847, 88851, 88858, 88862, 88866, 88872, 88881, 88885, 88889, 88893, - 88897, 88904, 88908, 88912, 88920, 88924, 88928, 88932, 88936, 88942, - 88946, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 88950, 88956, - 88962, 88969, 88976, 88983, 88990, 88997, 89004, 89010, 89017, 89024, - 89031, 89038, 89045, 89052, 89058, 89064, 89070, 89076, 89082, 89088, - 89094, 89100, 89106, 89113, 89120, 89127, 89134, 89141, 89148, 89154, - 89160, 89166, 89173, 89180, 89186, 89192, 89201, 89208, 89215, 89222, - 89229, 89236, 89243, 89249, 89255, 89261, 89270, 89277, 89284, 89295, - 89306, 89312, 89318, 89324, 89333, 89340, 89347, 89356, 89365, 89375, - 89385, 89396, 89408, 89418, 89428, 89439, 89451, 89461, 89471, 89481, - 89491, 89501, 89512, 89520, 89528, 89537, 89546, 89555, 89561, 89567, - 89573, 89580, 89590, 89597, 89607, 89612, 89617, 89623, 89629, 89637, - 89645, 89654, 89664, 89674, 89682, 89690, 89699, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 89708, 89719, 89726, 89734, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 89742, 89747, 89752, 89757, 89764, 89771, 89778, 89785, 89790, - 89795, 89800, 89805, 89812, 89817, 89824, 89831, 89836, 89841, 89846, - 89853, 89858, 89863, 89870, 89877, 89882, 89887, 89892, 89899, 89906, - 89913, 89918, 89923, 89930, 89937, 89944, 89951, 89956, 89961, 89966, - 89973, 89978, 89983, 89988, 89995, 90004, 90011, 90016, 90021, 90026, - 90031, 90036, 90041, 90050, 90057, 90062, 90069, 90076, 90081, 90086, - 90091, 90098, 90103, 90110, 90117, 90122, 90127, 90132, 90139, 90146, - 90151, 90156, 90163, 90170, 90177, 90182, 90187, 90192, 90197, 90204, - 90213, 90222, 90227, 90234, 90243, 90248, 90253, 90258, 90263, 90270, - 90277, 90284, 90291, 90296, 90301, 90306, 90313, 90320, 90327, 90332, - 90337, 90344, 90349, 90356, 90361, 90368, 90373, 90380, 90387, 90392, - 90397, 90402, 90407, 90412, 90417, 90422, 90427, 90432, 90439, 90446, - 90453, 90460, 90467, 90476, 90481, 90486, 90493, 90500, 90505, 90512, - 90519, 90526, 90533, 90540, 90547, 90552, 90557, 90562, 90567, 90572, - 90581, 90590, 90599, 90608, 90617, 90626, 90635, 90644, 90649, 90660, - 90671, 90680, 90685, 90690, 90695, 90700, 90709, 90716, 90723, 90730, - 90737, 90744, 90751, 90760, 90769, 90780, 90789, 90800, 90809, 90816, - 90825, 90836, 90845, 90854, 90863, 90872, 90879, 90886, 90893, 90902, - 90911, 90922, 90931, 90940, 90951, 90956, 90961, 90972, 90980, 90989, - 90998, 91007, 91018, 91027, 91036, 91047, 91058, 91069, 91080, 91091, - 91102, 91109, 91116, 91123, 91130, 91141, 91150, 91157, 91164, 91171, - 91182, 91193, 91204, 91215, 91226, 91237, 91248, 91259, 91266, 91273, - 91282, 91291, 91298, 91305, 91312, 91321, 91330, 91339, 91346, 91355, - 91364, 91373, 91380, 91387, 91392, 91398, 91405, 91412, 91419, 91426, - 91433, 91440, 91449, 91458, 91467, 91476, 91483, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 91492, 91498, 91503, 91508, 91515, 91521, 91527, 91533, 91539, - 91545, 91551, 91557, 91561, 91565, 91571, 91577, 91583, 91587, 91592, - 91597, 91601, 91605, 91608, 91614, 91620, 91626, 91632, 91638, 91644, - 91650, 91656, 91662, 91672, 91682, 91688, 91694, 91704, 91714, 91720, 0, - 0, 91726, 91734, 91739, 91744, 91750, 91756, 91762, 91768, 91774, 91780, - 91787, 91794, 91800, 91806, 91812, 91818, 91824, 91830, 91836, 91842, - 91847, 91853, 91859, 91865, 91871, 91877, 91886, 91892, 91897, 91905, - 91912, 91919, 91928, 91937, 91946, 91955, 91964, 91973, 91982, 91991, - 92001, 92011, 92019, 92027, 92036, 92045, 92051, 92057, 92063, 92069, - 92077, 92085, 92089, 92095, 92100, 92106, 92112, 92118, 92124, 92130, - 92139, 92144, 92151, 92156, 92161, 92166, 92172, 92178, 92184, 92191, - 92196, 92201, 92206, 92211, 92216, 92222, 92228, 92234, 92240, 92246, - 92252, 92258, 92264, 92269, 92274, 92279, 92284, 92289, 92294, 92299, - 92304, 92310, 92316, 92321, 92326, 92331, 92336, 92341, 92347, 92354, - 92358, 92362, 92366, 92370, 92374, 92378, 92382, 92386, 92394, 92404, - 92408, 92412, 92418, 92424, 92430, 92436, 92442, 92448, 92454, 92460, - 92466, 92472, 92478, 92484, 92490, 92496, 92500, 92504, 92511, 92517, - 92523, 92529, 92534, 92541, 92546, 92552, 92558, 92564, 92570, 92575, - 92579, 92585, 92589, 92593, 92597, 92603, 92609, 92613, 92619, 92625, - 92631, 92637, 92643, 92651, 92659, 92665, 92671, 92677, 92683, 92695, - 92707, 92721, 92733, 92745, 92759, 92773, 92787, 92791, 92799, 92807, - 92812, 92816, 92820, 92824, 92828, 92832, 92836, 92840, 92846, 92852, - 92858, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 92864, 92870, 92876, 92882, 92888, - 92894, 92900, 92906, 92912, 92918, 92924, 92930, 92936, 92942, 92948, - 92954, 92960, 92966, 92972, 92978, 92984, 92990, 92996, 93002, 93008, - 93014, 93020, 93026, 93032, 93038, 93044, 93050, 93056, 93062, 93068, - 93074, 93080, 93086, 93092, 93098, 93104, 93110, 93116, 93122, 93128, - 93134, 93140, 93146, 93152, 93158, 93164, 93170, 93176, 93182, 93188, - 93194, 93200, 93206, 93212, 93218, 93224, 93230, 93236, 93242, 93248, - 93254, 93260, 93265, 93270, 93275, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 93279, - 93284, 93291, 93298, 93305, 93312, 93317, 93321, 93327, 93331, 93335, - 93341, 93345, 93349, 93353, 93359, 93366, 93370, 93374, 93378, 93382, - 93386, 93390, 93396, 93400, 93404, 93408, 93412, 93416, 93420, 93424, - 93428, 93432, 93436, 93440, 93444, 93449, 93453, 93457, 93461, 93465, - 93469, 93473, 93477, 93481, 93485, 93492, 93496, 93503, 93507, 93511, - 93515, 93519, 93523, 93527, 93531, 93538, 93542, 93546, 93550, 93554, - 93558, 93564, 93568, 93574, 93578, 93582, 93586, 93590, 93594, 93598, - 93602, 93606, 93610, 93614, 93618, 93622, 93626, 93630, 93634, 93638, - 93642, 93646, 93650, 93658, 93662, 93666, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 93670, 93678, 93686, 93694, 93702, 93710, 93718, 93726, 93734, 93742, - 93750, 93758, 93766, 93774, 93782, 93790, 93798, 93806, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 93814, 93818, 93823, 93828, 93833, 93837, 93842, - 93846, 93850, 93854, 93859, 93864, 93868, 93872, 93876, 93880, 93885, - 93890, 93894, 93898, 93903, 93907, 93911, 93916, 93921, 93926, 93931, - 93935, 93940, 93945, 93950, 93954, 93959, 93963, 93967, 93971, 93976, - 93981, 93985, 93989, 93993, 93997, 94002, 94007, 94011, 94015, 94020, - 94024, 94028, 94033, 94038, 94043, 94048, 94052, 94057, 94062, 94067, - 94071, 94076, 94080, 94084, 94088, 94093, 94098, 94102, 94106, 94110, - 94114, 94119, 94124, 94128, 94132, 94137, 94141, 94145, 94150, 94155, - 94160, 94165, 94169, 94174, 94179, 94184, 94188, 94193, 0, 94197, 94201, - 94206, 94211, 94215, 94219, 94223, 94227, 94232, 94237, 94241, 94245, - 94250, 94254, 94258, 94263, 94268, 94273, 94278, 94283, 94289, 94295, - 94301, 94306, 94312, 94317, 94322, 94327, 94333, 94339, 94344, 94349, - 94354, 94359, 94365, 94371, 94376, 94381, 94387, 94392, 94397, 94403, - 94409, 94415, 94421, 94426, 94432, 94438, 94444, 94449, 94455, 94460, - 94465, 94470, 94476, 94482, 94487, 94492, 94497, 94502, 94508, 94514, - 94519, 94524, 94530, 94535, 94540, 94546, 94552, 94558, 94564, 0, 94568, - 94573, 0, 0, 94578, 0, 0, 94582, 94587, 0, 0, 94592, 94596, 94600, 94605, - 0, 94610, 94614, 94619, 94623, 94627, 94632, 94637, 94642, 94647, 94651, - 94656, 94661, 0, 94666, 0, 94671, 94675, 94679, 94684, 94689, 94693, - 94697, 0, 94701, 94706, 94711, 94715, 94719, 94724, 94728, 94732, 94737, - 94742, 94747, 94752, 94757, 94763, 94769, 94775, 94780, 94786, 94791, - 94796, 94801, 94807, 94813, 94818, 94823, 94828, 94833, 94839, 94845, - 94850, 94855, 94861, 94866, 94871, 94877, 94883, 94889, 94895, 94900, - 94906, 94912, 94918, 94923, 94929, 94934, 94939, 94944, 94950, 94956, - 94961, 94966, 94971, 94976, 94982, 94988, 94993, 94998, 95004, 95009, - 95014, 95020, 95026, 95032, 95038, 95042, 0, 95047, 95052, 95056, 95061, - 0, 0, 95065, 95070, 95075, 95079, 95083, 95087, 95091, 95096, 0, 95101, - 95105, 95110, 95114, 95118, 95123, 95128, 0, 95133, 95137, 95142, 95147, - 95152, 95156, 95161, 95165, 95169, 95173, 95178, 95183, 95187, 95191, - 95195, 95199, 95204, 95209, 95213, 95217, 95222, 95226, 95230, 95235, - 95240, 95245, 95250, 95254, 0, 95259, 95264, 95268, 95273, 0, 95277, - 95281, 95286, 95291, 95295, 0, 95299, 0, 0, 0, 95303, 95307, 95312, - 95316, 95320, 95325, 95330, 0, 95335, 95339, 95344, 95349, 95354, 95358, - 95363, 95367, 95371, 95375, 95380, 95385, 95389, 95393, 95397, 95401, - 95406, 95411, 95415, 95419, 95424, 95428, 95432, 95437, 95442, 95447, - 95452, 95457, 95463, 95469, 95475, 95480, 95486, 95491, 95496, 95501, - 95507, 95513, 95518, 95523, 95528, 95533, 95539, 95545, 95550, 95555, - 95561, 95566, 95571, 95577, 95583, 95589, 95595, 95600, 95606, 95612, - 95618, 95623, 95629, 95634, 95639, 95644, 95650, 95656, 95661, 95666, - 95671, 95676, 95682, 95688, 95693, 95698, 95704, 95709, 95714, 95720, - 95726, 95732, 95738, 95742, 95747, 95752, 95757, 95761, 95766, 95770, - 95774, 95778, 95783, 95788, 95792, 95796, 95800, 95804, 95809, 95814, - 95818, 95822, 95827, 95831, 95835, 95840, 95845, 95850, 95855, 95859, - 95864, 95869, 95874, 95878, 95883, 95887, 95891, 95895, 95900, 95905, - 95909, 95913, 95917, 95921, 95926, 95931, 95935, 95939, 95944, 95948, - 95952, 95957, 95962, 95967, 95972, 95977, 95983, 95989, 95995, 96000, - 96006, 96011, 96016, 96021, 96027, 96033, 96038, 96043, 96048, 96053, - 96059, 96065, 96070, 96075, 96081, 96086, 96091, 96097, 96103, 96109, - 96115, 96120, 96126, 96132, 96138, 96143, 96149, 96154, 96159, 96164, - 96170, 96176, 96181, 96186, 96191, 96196, 96202, 96208, 96213, 96218, - 96224, 96229, 96234, 96240, 96246, 96252, 96258, 96263, 96269, 96275, - 96281, 96286, 96292, 96297, 96302, 96307, 96313, 96319, 96324, 96329, - 96334, 96339, 96345, 96351, 96356, 96361, 96367, 96372, 96377, 96383, - 96389, 96395, 96401, 96406, 96412, 96418, 96424, 96429, 96435, 96440, - 96445, 96450, 96456, 96462, 96467, 96472, 96477, 96482, 96488, 96494, - 96499, 96504, 96510, 96515, 96520, 96526, 96532, 96538, 96544, 96550, - 96557, 96564, 96571, 96577, 96584, 96590, 96596, 96602, 96609, 96616, - 96622, 96628, 96634, 96640, 96647, 96654, 96660, 96666, 96673, 96679, - 96685, 96692, 96699, 96706, 96713, 96719, 96726, 96733, 96740, 96746, - 96753, 96759, 96765, 96771, 96778, 96785, 96791, 96797, 96803, 96809, - 96816, 96823, 96829, 96835, 96842, 96848, 96854, 96861, 96868, 96875, - 96882, 96886, 96891, 96896, 96901, 96905, 96910, 96914, 96918, 96922, - 96927, 96932, 96936, 96940, 96944, 96948, 96953, 96958, 96962, 96966, - 96971, 96975, 96979, 96984, 96989, 96994, 96999, 97003, 97008, 97013, - 97018, 97022, 97027, 97031, 97035, 97039, 97044, 97049, 97053, 97057, - 97061, 97065, 97070, 97075, 97079, 97083, 97088, 97092, 97096, 97101, - 97106, 97111, 97116, 97122, 0, 0, 97129, 97134, 97139, 97144, 97149, - 97154, 97159, 97164, 97169, 97174, 97179, 97184, 97189, 97194, 97199, - 97204, 97209, 97214, 97220, 97225, 97230, 97235, 97240, 97245, 97250, - 97255, 97259, 97264, 97269, 97274, 97279, 97284, 97289, 97294, 97299, - 97304, 97309, 97314, 97319, 97324, 97329, 97334, 97339, 97344, 97350, - 97355, 97360, 97365, 97370, 97375, 97380, 97385, 97391, 97396, 97401, - 97406, 97411, 97416, 97421, 97426, 97431, 97436, 97441, 97446, 97451, - 97456, 97461, 97466, 97471, 97476, 97481, 97486, 97491, 97496, 97501, - 97506, 97512, 97517, 97522, 97527, 97532, 97537, 97542, 97547, 97551, - 97556, 97561, 97566, 97571, 97576, 97581, 97586, 97591, 97596, 97601, - 97606, 97611, 97616, 97621, 97626, 97631, 97636, 97642, 97647, 97652, - 97657, 97662, 97667, 97672, 97677, 97683, 97688, 97693, 97698, 97703, - 97708, 97713, 97719, 97725, 97731, 97737, 97743, 97749, 97755, 97761, - 97767, 97773, 97779, 97785, 97791, 97797, 97803, 97809, 97815, 97822, - 97828, 97834, 97840, 97846, 97852, 97858, 97864, 97869, 97875, 97881, - 97887, 97893, 97899, 97905, 97911, 97917, 97923, 97929, 97935, 97941, - 97947, 97953, 97959, 97965, 97971, 97978, 97984, 97990, 97996, 98002, - 98008, 98014, 98020, 98027, 98033, 98039, 98045, 98051, 98057, 98063, - 98069, 98075, 98081, 98087, 98093, 98099, 98105, 98111, 98117, 98123, - 98129, 98135, 98141, 98147, 98153, 98159, 98165, 98172, 98178, 98184, - 98190, 98196, 98202, 98208, 98214, 98219, 98225, 98231, 98237, 98243, - 98249, 98255, 98261, 98267, 98273, 98279, 98285, 98291, 98297, 98303, - 98309, 98315, 98321, 98328, 98334, 98340, 98346, 98352, 98358, 98364, - 98370, 98377, 98383, 98389, 98395, 98401, 98407, 98413, 98420, 98427, - 98434, 98441, 98448, 98455, 98462, 98469, 98476, 98483, 98490, 98497, - 98504, 98511, 98518, 98525, 98532, 98540, 98547, 98554, 98561, 98568, - 98575, 98582, 98589, 98595, 98602, 98609, 98616, 98623, 98630, 98637, - 98644, 98651, 98658, 98665, 98672, 98679, 98686, 98693, 98700, 98707, - 98714, 98722, 98729, 98736, 98743, 98750, 98757, 98764, 98771, 98779, - 98786, 98793, 98800, 98807, 98814, 98821, 98826, 0, 0, 98831, 98836, - 98840, 98844, 98848, 98852, 98856, 98860, 98864, 98868, 98872, 98877, - 98881, 98885, 98889, 98893, 98897, 98901, 98905, 98909, 98913, 98918, - 98922, 98926, 98930, 98934, 98938, 98942, 98946, 98950, 98954, 98960, - 98965, 98970, 98975, 98980, 98985, 98990, 98995, 99000, 99005, 99010, - 99014, 99018, 99022, 99026, 99030, 99034, 99038, 99042, 99046, 99053, - 99060, 99067, 99074, 99081, 99088, 99094, 99101, 99108, 99115, 99123, - 99131, 99139, 99147, 99155, 99163, 99170, 99177, 99184, 99192, 99200, - 99208, 99216, 99224, 99232, 99239, 99246, 99253, 99261, 99269, 99277, - 99285, 99293, 99301, 99306, 99311, 99316, 99321, 99326, 99331, 99336, - 99341, 99346, 0, 0, 0, 0, 99351, 99356, 99360, 99364, 99368, 99372, - 99376, 99380, 99384, 99388, 99392, 99396, 99400, 99404, 99408, 99412, - 99416, 99420, 99424, 99428, 99432, 99436, 99440, 99444, 99448, 99452, - 99456, 99460, 99464, 99468, 99472, 99476, 99480, 99484, 99488, 99492, - 99496, 99500, 99504, 99508, 99512, 99516, 99520, 99524, 99528, 99532, - 99536, 99540, 99544, 99548, 99552, 99557, 99561, 99565, 99569, 99573, - 99577, 99581, 99585, 99589, 99593, 99597, 99601, 99605, 99609, 99613, - 99617, 99621, 99625, 99629, 99633, 99637, 99641, 99645, 99649, 99653, - 99657, 99661, 99665, 99669, 99673, 99677, 99681, 99685, 99689, 99693, - 99697, 99701, 99705, 99709, 99713, 99717, 99721, 99725, 99729, 99733, - 99737, 99741, 99745, 99749, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 99753, - 99757, 99761, 99765, 99769, 99773, 99777, 99781, 99785, 99789, 99793, - 99797, 99801, 99805, 99809, 99813, 99817, 99821, 99825, 99829, 99833, - 99837, 99841, 99845, 99849, 99853, 99857, 99861, 99865, 99869, 99873, - 99877, 99881, 99885, 99889, 99893, 99897, 99901, 99905, 99909, 99913, - 99917, 99921, 99925, 99929, 99933, 99937, 99941, 99945, 99949, 99953, - 99957, 99961, 99965, 99969, 99973, 99977, 99981, 99985, 99989, 99993, - 99997, 100001, 100005, 100009, 100013, 100017, 100021, 100025, 100029, - 100033, 100037, 100041, 100045, 100049, 100053, 100057, 100061, 100065, - 100069, 100073, 100077, 100081, 100085, 100089, 100093, 100097, 100101, - 100105, 100109, 100113, 100117, 100121, 100125, 100129, 100133, 100137, - 100141, 100145, 100149, 100153, 100157, 100161, 100165, 100169, 100173, - 100177, 100181, 100185, 100189, 100193, 100197, 100201, 100205, 100209, - 100213, 100217, 100221, 100225, 100229, 100233, 100237, 100241, 100245, - 100249, 100253, 100257, 100261, 100265, 100269, 100273, 100277, 100281, - 100285, 100289, 100293, 100297, 100301, 100305, 100309, 100313, 100317, - 100321, 100325, 100329, 100333, 100337, 100341, 100345, 100349, 100353, - 100357, 100361, 100365, 100369, 100373, 100377, 100381, 100385, 100389, - 100393, 100397, 100401, 100405, 100409, 100413, 100417, 100421, 100425, - 100429, 100433, 100437, 100441, 100445, 100449, 100453, 100457, 100461, - 100465, 100469, 100473, 100477, 100481, 100485, 100489, 100493, 100497, - 100501, 100505, 100509, 100513, 100517, 100521, 100525, 100529, 100533, - 100537, 100541, 100545, 100549, 100553, 100557, 100561, 100565, 100569, - 100573, 100577, 100581, 100585, 100589, 100593, 100597, 100601, 100605, - 100609, 100613, 100617, 100621, 100625, 100629, 100633, 100637, 100641, - 100645, 100649, 100653, 100657, 100661, 100665, 100669, 100673, 100677, - 100681, 100685, 100689, 100693, 100697, 100701, 100705, 100709, 100713, - 100717, 100721, 100725, 100729, 100733, 100737, 100741, 100745, 100749, - 100753, 100757, 100761, 100765, 100769, 100773, 100777, 100781, 100785, - 100789, 100793, 100797, 100801, 100805, 100809, 100813, 100817, 100821, - 100825, 100829, 100833, 100837, 100841, 100845, 100849, 100853, 100857, - 100861, 100865, 100869, 100873, 100877, 100881, 100885, 100889, 100893, - 100897, 100901, 100905, 100909, 100913, 100917, 100921, 100925, 100929, - 100933, 100937, 100941, 100945, 100949, 100953, 100957, 100961, 100965, - 100969, 100973, 100977, 100981, 100985, 100989, 100993, 100997, 101001, - 101005, 101009, 101013, 101017, 101021, 101025, 101029, 101033, 101037, - 101041, 101045, 101049, 101053, 101057, 101061, 101065, 101069, 101073, - 101077, 101081, 101085, 101089, 101093, 101097, 101101, 101105, 101109, - 101113, 101117, 101121, 101125, 101129, 101133, 101137, 101141, 101145, - 101149, 101153, 101157, 101161, 101165, 101169, 101173, 101177, 101181, - 101185, 101189, 101193, 101197, 101201, 101205, 101209, 101213, 101217, - 101221, 101225, 101229, 101233, 101237, 101241, 101245, 101249, 101253, - 101257, 101261, 101265, 101269, 101273, 101277, 101281, 101285, 101289, - 101293, 101297, 101301, 101305, 101309, 101313, 101317, 101321, 101325, - 101329, 101333, 101337, 101341, 101345, 101349, 101353, 101357, 101361, - 101365, 101369, 101373, 101377, 101381, 101385, 101389, 101393, 101397, - 101401, 101405, 101409, 101413, 101417, 101421, 101425, 101429, 101433, - 101437, 101441, 101445, 101449, 101453, 101457, 101461, 101465, 101469, - 101473, 101477, 101481, 101485, 101489, 101493, 101497, 101501, 101505, - 101509, 101513, 101517, 101521, 101525, 101529, 101533, 101537, 101541, - 101545, 101549, 101553, 101557, 101561, 101565, 101569, 101573, 101577, - 101581, 101585, 101589, 101593, 101597, 101601, 101605, 101609, 101613, - 101617, 101621, 101625, 101629, 101633, 101637, 101641, 101645, 101649, - 101653, 101657, 101661, 101665, 101669, 101673, 101677, 101681, 101685, - 101689, 101693, 101697, 101701, 101705, 101709, 101713, 101717, 101721, - 101725, 101729, 101733, 101737, 101741, 101745, 101749, 101753, 101757, - 101761, 101765, 101769, 101773, 101777, 101781, 101785, 101789, 101793, - 101797, 101801, 101805, 101809, 101813, 101817, 101821, 101825, 101829, - 101833, 101837, 101841, 101845, 101849, 101853, 101857, 101861, 101865, - 101869, 101873, 101877, 101881, 101885, 101889, 101893, 101897, 101901, - 101905, 101909, 101913, 101917, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 101921, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 101925, - 101928, 101932, 101936, 101939, 101943, 101947, 101950, 101953, 101957, - 101961, 101964, 101967, 101970, 101973, 101978, 101981, 101985, 101988, - 101991, 101994, 101997, 102000, 102003, 102006, 102009, 102012, 102015, - 102018, 102022, 102026, 102030, 102034, 102039, 102044, 102050, 102056, - 102062, 102067, 102073, 102078, 102083, 102088, 102094, 102100, 102105, - 102110, 102115, 102120, 102126, 102132, 102137, 102142, 102148, 102153, - 102158, 102164, 102170, 102176, 102182, 102186, 102191, 102195, 102200, - 102204, 102209, 102214, 102220, 102226, 102232, 102237, 102243, 102248, - 102253, 102258, 102264, 102270, 102275, 102280, 102285, 102290, 102296, - 102302, 102307, 102312, 102318, 102323, 102328, 102334, 102340, 102346, - 102352, 102357, 102361, 102366, 102368, 102372, 102375, 102378, 102381, - 102384, 102387, 102390, 102393, 102396, 102399, 102402, 102405, 102408, - 102411, 102414, 102417, 102420, 102423, 102426, 102429, 102432, 102435, - 102438, 102441, 102444, 102447, 102450, 102453, 102456, 102459, 102462, - 102465, 102468, 102471, 102474, 102477, 102480, 102483, 102486, 102489, - 102492, 102495, 102498, 102501, 102504, 102507, 102510, 102513, 102516, - 102519, 102522, 102525, 102528, 102531, 102534, 102537, 102540, 102543, - 102546, 102549, 102552, 102555, 102558, 102561, 102564, 102567, 102570, - 102573, 102576, 102579, 102582, 102585, 102588, 102591, 102594, 102597, - 102600, 102603, 102606, 102609, 102612, 102615, 102618, 102621, 102624, - 102627, 102630, 102633, 102636, 102639, 102642, 102645, 102648, 102651, - 102654, 102657, 102660, 102663, 102666, 102669, 102672, 102675, 102678, - 102681, 102684, 102687, 102690, 102693, 102696, 102699, 102702, 102705, - 102708, 102711, 102714, 102717, 102720, 102723, 102726, 102729, 102732, - 102735, 102738, 102741, 102744, 102747, 102750, 102753, 102756, 102759, - 102762, 102765, 102768, 102771, 102774, 102777, 102780, 102783, 102786, - 102789, 102792, 102795, 102798, 102801, 102804, 102807, 102810, 102813, - 102816, 102819, 102822, 102825, 102828, 102831, 102834, 102837, 102840, - 102843, 102846, 102849, 102852, 102855, 102858, 102861, 102864, 102867, - 102870, 102873, 102876, 102879, 102882, 102885, 102888, 102891, 102894, - 102897, 102900, 102903, 102906, 102909, 102912, 102915, 102918, 102921, - 102924, 102927, 102930, 102933, 102936, 102939, 102942, 102945, 102948, - 102951, 102954, 102957, 102960, 102963, 102966, 102969, 102972, 102975, - 102978, 102981, 102984, 102987, 102990, 102993, 102996, 102999, 103002, - 103005, 103008, 103011, 103014, 103017, 103020, 103023, 103026, 103029, - 103032, 103035, 103038, 103041, 103044, 103047, 103050, 103053, 103056, - 103059, 103062, 103065, 103068, 103071, 103074, 103077, 103080, 103083, - 103086, 103089, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 64667, 64671, 64675, 64679, 64683, 64687, 64691, 64695, 64699, 64703, + 64707, 64711, 64715, 64719, 64723, 64727, 64731, 64735, 64739, 64743, + 64747, 64751, 64755, 64759, 64763, 64767, 64771, 64775, 64779, 64783, + 64787, 64791, 64795, 64799, 64803, 64807, 64811, 64815, 64819, 64823, + 64827, 64831, 64835, 64839, 64843, 64847, 64851, 64855, 64859, 64863, + 64867, 64871, 64875, 64879, 64883, 64887, 64891, 64895, 64899, 64903, + 64907, 64911, 64915, 64919, 64923, 64927, 64931, 64935, 64939, 64943, + 64947, 64950, 64954, 64958, 64962, 64966, 64970, 64974, 64978, 64982, + 64986, 64990, 64994, 64998, 65002, 65006, 65010, 65014, 65018, 65022, + 65026, 65030, 65034, 65038, 65042, 65046, 65050, 65054, 65058, 65062, + 65066, 65070, 65074, 65078, 65082, 65086, 65090, 65094, 65098, 65102, + 65106, 65110, 65114, 65118, 65122, 65126, 65130, 65134, 65138, 65142, + 65146, 65150, 65154, 65158, 65162, 65166, 65170, 65174, 65178, 65182, + 65186, 65190, 65194, 65198, 65202, 65206, 65210, 65214, 65218, 65222, + 65226, 65230, 65234, 65238, 65242, 65246, 65250, 65254, 65258, 65262, + 65266, 65270, 65274, 65278, 65282, 65286, 65290, 65294, 65298, 65302, + 65306, 65310, 65314, 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, 65678, 65682, 65686, 65690, 65694, 65698, 65702, + 65706, 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, 66173, 66177, 66181, + 66185, 66189, 66193, 66197, 66201, 66205, 66209, 66213, 66217, 66221, + 66225, 66229, 66233, 66237, 66241, 66245, 66249, 66253, 66257, 66261, + 66265, 66269, 66273, 66277, 66281, 66285, 66289, 66293, 66297, 66301, + 66305, 66309, 66313, 66317, 66321, 66325, 66329, 66333, 66337, 66341, + 66345, 66349, 66353, 66357, 66361, 66365, 66369, 66373, 66377, 66381, + 66385, 66389, 66393, 66397, 66401, 66405, 66409, 66413, 66417, 66421, + 66425, 66429, 66433, 66437, 66441, 66445, 66449, 66453, 66457, 66461, + 66465, 66469, 66473, 66477, 66481, 66485, 66489, 0, 0, 0, 66493, 66497, + 66501, 66505, 66509, 66513, 66517, 66521, 66525, 66529, 66533, 66537, + 66541, 66545, 66549, 66553, 66557, 66561, 66565, 66569, 66573, 66577, + 66581, 66585, 66589, 66593, 66597, 66601, 66605, 66609, 66613, 66617, + 66621, 66625, 66629, 66633, 66637, 66641, 66645, 66649, 66653, 66657, + 66661, 66665, 66669, 66673, 66677, 66681, 66685, 66689, 66693, 66697, + 66701, 66705, 66709, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66713, 66718, 66722, + 66727, 66732, 66737, 66742, 66747, 66751, 66756, 66761, 66766, 66771, + 66776, 66781, 66786, 66790, 66794, 66799, 66804, 66809, 66814, 66819, + 66823, 66828, 66833, 66838, 66843, 66848, 66852, 66857, 66861, 66866, + 66870, 66875, 66879, 66883, 66887, 66892, 66897, 66902, 66910, 66918, + 66926, 66934, 66941, 66949, 66955, 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, 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, 67238, 67242, 67246, 67250, 67254, 67257, + 67261, 67265, 67268, 67272, 67276, 67280, 67283, 67287, 67291, 67295, + 67299, 67303, 67307, 67311, 67315, 67319, 67323, 67327, 67331, 67335, + 67339, 67342, 67346, 67350, 67354, 67358, 67362, 67366, 67370, 67374, + 67378, 67381, 67384, 67388, 67392, 67396, 67399, 67402, 67406, 67410, + 67414, 67418, 67422, 67426, 67430, 67434, 67438, 67442, 67446, 67450, + 67454, 67458, 67462, 67466, 67470, 67474, 67478, 67482, 67486, 67490, + 67494, 67498, 67502, 67506, 67510, 67514, 67518, 67522, 67526, 67530, + 67534, 67538, 67542, 67546, 67550, 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, 67767, + 67771, 67775, 67779, 67783, 67787, 67791, 67795, 67799, 67803, 67807, + 67811, 67815, 67819, 67823, 67827, 67831, 67835, 67839, 67843, 67847, + 67851, 67854, 67858, 67862, 67866, 67870, 67874, 67878, 67882, 67886, + 67890, 67894, 67898, 67902, 67906, 67910, 67914, 67918, 67922, 67926, + 67930, 67934, 67938, 67942, 67946, 67950, 67954, 67958, 67962, 67966, + 67970, 67974, 67978, 67982, 67986, 67990, 67994, 67998, 68002, 68006, + 68010, 68014, 68018, 68022, 68026, 68029, 68034, 68038, 68044, 68049, + 68055, 68059, 68063, 68067, 68071, 68075, 68079, 68083, 68087, 68091, + 68095, 68099, 68103, 68107, 68111, 68114, 68117, 68120, 68123, 68126, + 68129, 68132, 68135, 68138, 68143, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 68149, 68154, 68159, 68164, 68169, 68175, 68181, + 68186, 68191, 68196, 68201, 68208, 68215, 68222, 68229, 68236, 68243, + 68253, 68263, 68270, 68277, 68283, 68289, 68295, 68301, 68310, 68319, + 68326, 68333, 68344, 68355, 68360, 0, 0, 68365, 68372, 68379, 68386, + 68393, 68400, 68407, 68413, 68419, 68425, 68431, 68438, 68445, 68450, + 68454, 68461, 68468, 68475, 0, 0, 0, 0, 0, 0, 0, 0, 68479, 68483, 68487, + 68490, 68493, 68498, 68503, 68508, 68513, 68518, 68523, 68528, 68533, + 68538, 68543, 68552, 68561, 68566, 68571, 68576, 68581, 68586, 68591, + 68596, 68601, 68606, 68611, 68616, 0, 0, 0, 0, 0, 0, 0, 0, 68621, 68624, + 68627, 68630, 68634, 68638, 68642, 68646, 68649, 68653, 68656, 68660, + 68663, 68667, 68671, 68675, 68679, 68683, 68687, 68691, 68694, 68698, + 68702, 68706, 68710, 68714, 68718, 68722, 68726, 68730, 68734, 68738, + 68742, 68746, 68750, 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, 68852, 68856, + 68860, 68864, 68868, 68872, 68876, 68880, 68883, 68887, 68891, 68895, + 68899, 68903, 68907, 68911, 68915, 68919, 68923, 68927, 68931, 68936, + 68941, 68944, 68949, 68952, 68955, 68958, 0, 0, 0, 0, 0, 0, 0, 0, 68962, + 68971, 68980, 68989, 68998, 69007, 69016, 69025, 69034, 69042, 69049, + 69057, 69064, 69072, 69082, 69091, 69101, 69110, 69120, 69128, 69135, + 69143, 69150, 69158, 69163, 69168, 69173, 69182, 69188, 69194, 69201, + 69210, 69218, 69226, 69234, 69241, 69248, 69255, 69262, 69267, 69272, + 69277, 69282, 69287, 69292, 69297, 69302, 69310, 69318, 69324, 69329, + 69334, 69339, 69344, 69349, 69354, 69359, 69364, 69369, 69377, 69385, + 69390, 69395, 69404, 69413, 69420, 69427, 69436, 69445, 69456, 69467, + 69473, 69479, 69487, 69495, 69504, 69513, 69520, 69527, 69532, 69537, + 69548, 69559, 69567, 69575, 69585, 69595, 69606, 69617, 69626, 69635, + 69642, 69649, 69656, 69663, 69672, 69681, 69686, 69691, 69698, 69705, + 69712, 69719, 69730, 69741, 69746, 69751, 69756, 69761, 69766, 69771, + 69776, 69781, 69785, 69790, 69795, 69800, 69805, 69810, 69816, 69821, + 69826, 69833, 69840, 69847, 69854, 69861, 69869, 69877, 69882, 69887, + 69893, 69899, 69905, 69911, 69918, 69925, 69932, 69936, 69943, 69948, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 69953, 69960, 69967, 69974, 69982, + 69989, 69995, 70001, 70008, 70014, 70020, 70026, 70033, 70040, 70047, + 70054, 70061, 70068, 70075, 70082, 70089, 70096, 70103, 70110, 70117, + 70124, 70130, 70137, 70144, 70151, 70158, 70165, 70172, 70179, 70186, + 70193, 70200, 70207, 70214, 70221, 70228, 70235, 70242, 70249, 70256, + 70264, 70272, 70280, 70288, 0, 0, 0, 0, 70296, 70305, 70314, 70323, + 70332, 70341, 70350, 70357, 70364, 70371, 0, 0, 0, 0, 0, 0, 70378, 70382, + 70387, 70392, 70397, 70402, 70407, 70412, 70417, 70422, 70427, 70432, + 70436, 70440, 70445, 70450, 70454, 70459, 70464, 70469, 70474, 70479, + 70484, 70489, 70493, 70497, 70502, 70507, 70512, 70516, 70520, 70524, + 70528, 70532, 70536, 70541, 70546, 70551, 70556, 70561, 70568, 70574, + 70579, 70584, 70589, 70594, 70600, 70607, 70613, 70620, 70626, 70632, + 70637, 70644, 70650, 70655, 0, 0, 0, 0, 0, 0, 0, 0, 70661, 70665, 70669, + 70672, 70676, 70679, 70683, 70686, 70690, 70694, 70699, 70703, 70708, + 70711, 70715, 70719, 70722, 70726, 70730, 70733, 70737, 70741, 70745, + 70749, 70753, 70757, 70761, 70765, 70769, 70773, 70777, 70781, 70785, + 70789, 70793, 70797, 70801, 70805, 70808, 70811, 70815, 70819, 70823, + 70826, 70829, 70832, 70836, 70840, 70844, 70848, 70852, 70855, 70859, + 70865, 70870, 70874, 70879, 70883, 70888, 70893, 70899, 70904, 70910, + 70914, 70919, 70924, 70928, 70933, 70938, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 70942, 70945, 70949, 70953, 70956, 70959, 70962, 70965, 70968, 70971, + 70974, 70977, 0, 0, 0, 0, 0, 0, 70980, 70985, 70989, 70993, 70997, 71001, + 71005, 71009, 71013, 71017, 71021, 71025, 71029, 71033, 71037, 71041, + 71045, 71050, 71055, 71061, 71067, 71074, 71079, 71084, 71090, 71094, + 71099, 71102, 0, 0, 0, 0, 71105, 71112, 71118, 71124, 71130, 71136, + 71142, 71148, 71154, 71160, 71166, 71172, 71179, 71186, 71193, 71200, + 71207, 71214, 71221, 71228, 71235, 71241, 71247, 71254, 71260, 71267, + 71274, 71280, 71286, 71293, 71300, 71307, 71313, 71320, 71327, 71333, + 71340, 71346, 71353, 71360, 71366, 71372, 71379, 71385, 71392, 71399, + 71408, 71415, 71422, 71426, 71431, 71436, 71441, 71446, 71450, 71454, + 71459, 71463, 71468, 71473, 71478, 71483, 71487, 71492, 71496, 71501, + 71505, 71510, 71515, 71520, 71525, 71529, 71534, 71539, 71544, 71550, + 71555, 71561, 71567, 71573, 71580, 71586, 71592, 71599, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 71603, 71608, 71612, 71616, 71620, 71624, 71628, 71632, + 71636, 71640, 71644, 71648, 71652, 71656, 71660, 71664, 71668, 71672, + 71676, 71680, 71684, 71688, 71692, 71696, 71700, 71704, 71708, 71712, + 71716, 71720, 0, 0, 0, 71724, 71728, 71732, 71736, 71740, 71743, 71749, + 71752, 71756, 71759, 71765, 71771, 71779, 71782, 71786, 71789, 71792, + 71797, 71802, 71806, 71812, 71816, 71820, 71826, 71830, 71836, 71842, + 71846, 71850, 71856, 71860, 71866, 71872, 71876, 71882, 71886, 71892, + 71895, 71898, 71904, 71908, 71914, 71917, 71920, 71923, 71929, 71933, + 71937, 71943, 71949, 71953, 71956, 71962, 71967, 71972, 71977, 71984, + 71989, 71996, 72001, 72008, 72013, 72019, 72025, 72031, 72034, 72038, + 72042, 72047, 72052, 72057, 72062, 72067, 72072, 72077, 72082, 72089, + 72094, 0, 72100, 72103, 72107, 72110, 72113, 72116, 72119, 72122, 72125, + 72128, 72131, 0, 0, 0, 0, 72134, 72141, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 72146, + 72149, 72152, 72155, 72158, 72162, 72165, 72168, 72172, 72176, 72180, + 72184, 72188, 72192, 72196, 72200, 72204, 72208, 72212, 72216, 72220, + 72224, 72228, 72232, 72236, 72239, 72243, 72246, 72250, 72254, 72258, + 72262, 72266, 72269, 72273, 72276, 72279, 72283, 72287, 72291, 72295, + 72298, 72303, 72307, 72312, 72317, 72321, 72326, 72330, 72335, 72340, + 72345, 72350, 72355, 72361, 0, 0, 0, 0, 0, 0, 0, 0, 0, 72367, 72372, + 72377, 72382, 72389, 72394, 72399, 72403, 72408, 72413, 72417, 72421, + 72426, 72432, 0, 0, 72439, 72443, 72446, 72449, 72452, 72455, 72458, + 72461, 72464, 72467, 0, 0, 72470, 72475, 72480, 72486, 72493, 72499, + 72505, 72511, 72517, 72523, 72529, 72535, 72541, 72547, 72553, 72559, + 72564, 72570, 72575, 72581, 72587, 72594, 72600, 72606, 72611, 72618, + 72625, 72632, 72638, 72643, 72648, 72653, 0, 0, 0, 0, 72661, 72667, + 72673, 72679, 72685, 72691, 72697, 72703, 72709, 72715, 72721, 72727, + 72733, 72739, 72745, 72751, 72757, 72763, 72769, 72775, 72781, 72786, + 72791, 72797, 72803, 72809, 72815, 72821, 72827, 72833, 72839, 72845, + 72851, 72857, 72863, 72869, 72875, 72881, 72887, 72893, 72899, 72905, + 72911, 72917, 72923, 72929, 72935, 72940, 72945, 72951, 72956, 72960, + 72965, 72969, 72973, 72977, 72983, 72988, 72993, 72998, 73003, 73008, + 73013, 73018, 73025, 73032, 73039, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 73046, 73051, 73056, 73061, 73068, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 73075, + 73082, 73089, 73096, 73103, 73109, 73115, 73122, 73129, 73136, 73143, + 73150, 73157, 73164, 73171, 73178, 73184, 73191, 73198, 73205, 73212, + 73219, 73226, 73233, 73240, 73247, 73254, 73261, 73270, 73279, 73288, + 73297, 73306, 73315, 73324, 73333, 73341, 73349, 73357, 73365, 73373, + 73381, 73389, 73397, 73403, 73411, 0, 0, 73419, 73426, 73432, 73438, + 73444, 73450, 73456, 73462, 73468, 73474, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 73480, 73484, + 73488, 73492, 73496, 73500, 73504, 73508, 73512, 73516, 73520, 73524, + 73528, 73532, 73536, 73540, 73544, 73548, 73552, 73556, 73560, 73564, + 73568, 0, 0, 0, 0, 73572, 73576, 73580, 73584, 73588, 73592, 73596, + 73600, 73604, 73608, 73612, 73616, 73620, 73624, 73628, 73632, 73636, + 73640, 73644, 73648, 73652, 73656, 73660, 73664, 73668, 73672, 73676, + 73680, 73684, 73688, 73692, 73696, 73700, 73704, 73708, 73712, 73716, + 73720, 73724, 73728, 73732, 73736, 73740, 73744, 73748, 73752, 73756, + 73760, 73764, 0, 0, 0, 0, 73768, 73772, 73776, 73780, 73784, 73788, + 73792, 73796, 73800, 73804, 73808, 73812, 73816, 73820, 73824, 73828, + 73832, 73836, 73840, 73844, 73848, 73852, 73856, 73860, 73864, 73868, + 73872, 73876, 73880, 73884, 73888, 73892, 73896, 73900, 73904, 73908, + 73912, 73916, 73920, 73924, 73928, 73932, 73936, 73940, 73944, 73948, + 73952, 73956, 73960, 73964, 73968, 73972, 73976, 73980, 73984, 73988, + 73992, 73996, 74000, 74004, 74008, 74012, 74016, 74020, 74024, 74028, + 74032, 74036, 74040, 74044, 74048, 74052, 74056, 74060, 74064, 74068, + 74072, 74076, 74080, 74084, 74088, 74092, 74096, 74100, 74104, 74108, + 74112, 74116, 74120, 74124, 74128, 74132, 74136, 74140, 74144, 74148, + 74152, 74156, 74160, 74164, 74168, 74172, 74176, 74180, 74184, 74188, + 74192, 74196, 74200, 74204, 74208, 74212, 74216, 74220, 74224, 74228, + 74232, 74236, 74240, 74244, 74248, 74252, 74256, 74260, 74264, 74268, + 74272, 74276, 74280, 74284, 74288, 74292, 74296, 74300, 74304, 74308, + 74312, 74316, 74320, 74324, 74328, 74332, 74336, 74340, 74344, 74348, + 74352, 74356, 74360, 74364, 74368, 74372, 74376, 74380, 74384, 74388, + 74392, 74396, 74400, 74404, 74408, 74412, 74416, 74420, 74424, 74428, + 74432, 74436, 74440, 74444, 74448, 74452, 74456, 74460, 74464, 74468, + 74472, 74476, 74480, 74484, 74488, 74492, 74496, 74500, 74504, 74508, + 74512, 74516, 74520, 74524, 74528, 74532, 74536, 74540, 74544, 74548, + 74552, 74556, 74560, 74564, 74568, 74572, 74576, 74580, 74584, 74588, + 74592, 74596, 74600, 74604, 74608, 74612, 74616, 74620, 74624, 74628, + 74632, 74636, 74640, 74644, 74648, 74652, 74656, 74660, 74664, 74668, + 74672, 74676, 74680, 74684, 74688, 74692, 74696, 74700, 74704, 74708, + 74712, 74716, 74720, 74724, 74728, 74732, 74736, 74740, 74744, 74748, + 74752, 74756, 74760, 74764, 74768, 74772, 74776, 74780, 74784, 74788, + 74792, 74796, 74800, 74804, 74808, 74812, 74816, 74820, 74824, 74828, + 74832, 74836, 74840, 74844, 74848, 74852, 74856, 74860, 74864, 74868, + 74872, 74876, 74880, 74884, 74888, 74892, 74896, 74900, 74904, 74908, + 74912, 74916, 74920, 74924, 74928, 74932, 74936, 74940, 74944, 74948, + 74952, 74956, 74960, 74964, 74968, 74972, 0, 0, 74976, 74980, 74984, + 74988, 74992, 74996, 75000, 75004, 75008, 75012, 75016, 75020, 75024, + 75028, 75032, 75036, 75040, 75044, 75048, 75052, 75056, 75060, 75064, + 75068, 75072, 75076, 75080, 75084, 75088, 75092, 75096, 75100, 75104, + 75108, 75112, 75116, 75120, 75124, 75128, 75132, 75136, 75140, 75144, + 75148, 75152, 75156, 75160, 75164, 75168, 75172, 75176, 75180, 75184, + 75188, 75192, 75196, 75200, 75204, 75208, 75212, 75216, 75220, 0, 0, + 75224, 75228, 75232, 75236, 75240, 75244, 75248, 75252, 75256, 75260, + 75264, 75268, 75272, 75276, 75280, 75284, 75288, 75292, 75296, 75300, + 75304, 75308, 75312, 75316, 75320, 75324, 75328, 75332, 75336, 75340, + 75344, 75348, 75352, 75356, 75360, 75364, 75368, 75372, 75376, 75380, + 75384, 75388, 75392, 75396, 75400, 75404, 75408, 75412, 75416, 75420, + 75424, 75428, 75432, 75436, 75440, 75444, 75448, 75452, 75456, 75460, + 75464, 75468, 75472, 75476, 75480, 75484, 75488, 75492, 75496, 75500, + 75504, 75508, 75512, 75516, 75520, 75524, 75528, 75532, 75536, 75540, + 75544, 75548, 75552, 75556, 75560, 75564, 75568, 75572, 75576, 75580, + 75584, 75588, 75592, 75596, 75600, 75604, 75608, 75612, 75616, 75620, + 75624, 75628, 75632, 75636, 75640, 75644, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 75648, 75653, 75658, 75663, 75668, 75673, 75681, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 75686, 75693, 75700, 75707, 75714, 0, 0, 0, 0, 0, + 75721, 75728, 75735, 75745, 75751, 75757, 75763, 75769, 75775, 75781, + 75788, 75794, 75800, 75806, 75815, 75824, 75836, 75848, 75854, 75860, + 75866, 75873, 75880, 75887, 75894, 75901, 0, 75908, 75915, 75922, 75930, + 75937, 0, 75944, 0, 75951, 75958, 0, 75965, 75973, 0, 75980, 75987, + 75994, 76001, 76008, 76015, 76022, 76029, 76036, 76043, 76048, 76055, + 76062, 76068, 76074, 76080, 76086, 76092, 76098, 76104, 76110, 76116, + 76122, 76128, 76134, 76140, 76146, 76152, 76158, 76164, 76170, 76176, + 76182, 76188, 76194, 76200, 76206, 76212, 76218, 76224, 76230, 76236, + 76242, 76248, 76254, 76260, 76266, 76272, 76278, 76284, 76290, 76296, + 76302, 76308, 76314, 76320, 76326, 76332, 76338, 76344, 76350, 76356, + 76362, 76368, 76374, 76380, 76386, 76392, 76398, 76404, 76410, 76416, + 76422, 76428, 76434, 76440, 76446, 76452, 76458, 76464, 76470, 76476, + 76482, 76488, 76494, 76500, 76506, 76512, 76518, 76526, 76534, 76540, + 76546, 76552, 76558, 76567, 76576, 76584, 76592, 76600, 76608, 76616, + 76624, 76632, 76640, 76647, 76654, 76664, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 76674, 76680, 76686, 76692, 76698, 76703, 76708, 76714, 76720, 76726, + 76732, 76740, 76746, 76752, 76760, 76768, 76776, 76784, 76789, 76794, + 76799, 76804, 76816, 76828, 76838, 76848, 76859, 76870, 76881, 76892, + 76902, 76912, 76923, 76934, 76945, 76956, 76966, 76976, 76986, 77001, + 77016, 77031, 77038, 77045, 77052, 77059, 77069, 77079, 77089, 77100, + 77110, 77118, 77126, 77135, 77143, 77152, 77160, 77168, 77176, 77185, + 77193, 77202, 77210, 77218, 77226, 77235, 77243, 77250, 77257, 77264, + 77271, 77279, 77287, 77295, 77303, 77311, 77320, 77328, 77336, 77344, + 77352, 77360, 77369, 77377, 77385, 77393, 77401, 77409, 77417, 77425, + 77433, 77441, 77449, 77458, 77466, 77475, 77483, 77491, 77499, 77508, + 77516, 77524, 77532, 77540, 77549, 77558, 77566, 77575, 77583, 77591, + 77599, 77608, 77616, 77625, 77633, 77640, 77647, 77655, 77662, 77670, + 77677, 77685, 77693, 77702, 77710, 77719, 77727, 77735, 77743, 77752, + 77760, 77767, 77774, 77782, 77789, 77797, 77804, 77814, 77824, 77834, + 77843, 77852, 77861, 77870, 77879, 77889, 77900, 77911, 77921, 77932, + 77943, 77953, 77962, 77971, 77979, 77988, 77997, 78005, 78014, 78023, + 78031, 78040, 78049, 78057, 78066, 78075, 78083, 78092, 78101, 78109, + 78118, 78126, 78135, 78143, 78151, 78160, 78168, 78177, 78185, 78193, + 78202, 78210, 78217, 78224, 78233, 78242, 78250, 78259, 78268, 78276, + 78286, 78294, 78302, 78309, 78317, 78325, 78332, 78342, 78352, 78363, + 78373, 78384, 78392, 78400, 78409, 78417, 78426, 78434, 78442, 78451, + 78459, 78468, 78476, 78483, 78490, 78497, 78504, 78512, 78520, 78528, + 78536, 78545, 78553, 78561, 78570, 78578, 78586, 78594, 78603, 78611, + 78619, 78627, 78635, 78643, 78651, 78659, 78667, 78675, 78684, 78692, + 78700, 78708, 78716, 78724, 78733, 78742, 78750, 78758, 78766, 78775, + 78783, 78792, 78799, 78806, 78814, 78821, 78829, 78837, 78846, 78854, + 78863, 78871, 78879, 78889, 78896, 78903, 78911, 78918, 78926, 78936, + 78947, 78955, 78964, 78972, 78981, 78989, 78998, 79006, 79015, 79023, + 79032, 79041, 79049, 79057, 79065, 79074, 79081, 79089, 79098, 79107, + 79116, 79125, 79133, 79142, 79150, 79159, 79167, 79176, 79184, 79193, + 79201, 79209, 79216, 79224, 79231, 79240, 79248, 79257, 79265, 79274, + 79282, 79290, 79298, 79307, 79315, 79324, 79333, 79342, 79351, 79360, + 79368, 79377, 79385, 79394, 79402, 79411, 79419, 79428, 79436, 79444, + 79451, 79459, 79466, 79475, 79483, 79492, 79500, 79509, 79517, 79525, + 79533, 79542, 79550, 79559, 79568, 79577, 79586, 79594, 79602, 79611, + 79619, 79628, 79637, 79645, 79653, 79661, 79670, 79678, 79686, 79695, + 79703, 79711, 79719, 79727, 79732, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 79737, 79747, 79757, 79767, 79777, 79788, 79798, 79808, 79819, + 79828, 79837, 79846, 79856, 79866, 79876, 79887, 79897, 79907, 79917, + 79927, 79937, 79947, 79957, 79967, 79977, 79987, 79997, 80008, 80019, + 80029, 80039, 80050, 80061, 80072, 80082, 80092, 80102, 80112, 80122, + 80132, 80142, 80153, 80163, 80173, 80184, 80195, 80206, 80216, 80226, + 80236, 80246, 80257, 80267, 80277, 80288, 80299, 80309, 80319, 80328, + 80337, 80346, 80355, 80364, 80374, 0, 0, 80384, 80394, 80404, 80414, + 80424, 80435, 80445, 80455, 80466, 80476, 80487, 80496, 80505, 80516, + 80526, 80537, 80548, 80560, 80570, 80581, 80590, 80600, 80610, 80622, + 80632, 80642, 80652, 80662, 80672, 80681, 80690, 80699, 80708, 80718, + 80728, 80738, 80748, 80758, 80768, 80778, 80788, 80798, 80808, 80818, + 80828, 80837, 80846, 80855, 80865, 80875, 80885, 80895, 80905, 80916, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 80926, 80941, 80956, 80962, + 80968, 80974, 80980, 80986, 80992, 80998, 81004, 81012, 81016, 81019, 0, + 0, 81027, 81030, 81033, 81036, 81039, 81042, 81045, 81048, 81051, 81054, + 81057, 81060, 81063, 81066, 81069, 81072, 81075, 81083, 81092, 81103, + 81111, 81119, 81128, 81137, 81148, 81160, 0, 0, 0, 0, 0, 0, 81169, 81174, + 81179, 81186, 81193, 81199, 81205, 0, 0, 0, 0, 0, 0, 0, 0, 0, 81210, + 81220, 81230, 81240, 81249, 81260, 81269, 81278, 81288, 81298, 81310, + 81322, 81333, 81344, 81355, 81366, 81376, 81386, 81396, 81406, 81417, + 81428, 81432, 81437, 81446, 81455, 81459, 81463, 81467, 81472, 81477, + 81482, 81487, 81490, 81494, 0, 81499, 81502, 81505, 81509, 81513, 81518, + 81522, 81526, 81531, 81536, 81543, 81550, 81553, 81556, 81559, 81562, + 81565, 81569, 81573, 0, 81577, 81582, 81586, 81590, 0, 0, 0, 0, 81595, + 81600, 81607, 81612, 81617, 0, 81622, 81627, 81632, 81637, 81642, 81647, + 81652, 81657, 81662, 81667, 81672, 81677, 81686, 81695, 81703, 81711, + 81720, 81729, 81738, 81747, 81755, 81763, 81771, 81779, 81784, 81789, + 81795, 81801, 81807, 81813, 81821, 81829, 81835, 81841, 81847, 81853, + 81859, 81865, 81871, 81877, 81882, 81887, 81892, 81897, 81902, 81907, + 81912, 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, 82115, 82121, 82127, 82133, 82139, 82145, + 82151, 82157, 82163, 82169, 82175, 82181, 82187, 82193, 82199, 82205, + 82211, 82217, 82223, 82229, 82235, 82241, 82247, 82253, 82259, 82265, + 82271, 82277, 82282, 82287, 82292, 82297, 82303, 82309, 82315, 82321, + 82327, 82333, 82339, 82345, 82351, 82357, 82363, 82369, 82374, 82379, + 82384, 82389, 82401, 82413, 82424, 82435, 82447, 82459, 82467, 0, 0, + 82475, 0, 82483, 82487, 82491, 82494, 82498, 82502, 82505, 82508, 82512, + 82516, 82519, 82522, 82525, 82528, 82533, 82536, 82540, 82543, 82546, + 82549, 82552, 82555, 82558, 82561, 82564, 82567, 82570, 82573, 82577, + 82581, 82585, 82589, 82594, 82599, 82605, 82611, 82617, 82622, 82628, + 82634, 82640, 82645, 82651, 82657, 82662, 82667, 82672, 82677, 82683, + 82689, 82694, 82699, 82705, 82710, 82716, 82722, 82728, 82734, 82740, + 82744, 82749, 82753, 82758, 82762, 82767, 82772, 82778, 82784, 82790, + 82795, 82801, 82807, 82813, 82818, 82824, 82830, 82835, 82840, 82845, + 82850, 82856, 82862, 82867, 82872, 82878, 82883, 82889, 82895, 82901, + 82907, 82913, 82918, 82922, 82927, 82930, 82935, 82940, 82946, 82951, + 82956, 82960, 82966, 82971, 82976, 82981, 82986, 82991, 82996, 83001, + 83007, 83013, 83019, 83027, 83031, 83035, 83039, 83043, 83047, 83051, + 83056, 83061, 83066, 83071, 83076, 83081, 83086, 83091, 83096, 83101, + 83106, 83111, 83116, 83120, 83124, 83129, 83134, 83139, 83144, 83148, + 83153, 83158, 83163, 83168, 83172, 83177, 83182, 83187, 83192, 83196, + 83201, 83206, 83210, 83215, 83220, 83225, 83230, 83235, 83239, 83246, + 83253, 83257, 83262, 83267, 83272, 83277, 83282, 83287, 83292, 83297, + 83302, 83307, 83312, 83317, 83322, 83327, 83332, 83337, 83342, 83347, + 83352, 83357, 83362, 83367, 83372, 83377, 83382, 83387, 83392, 83397, + 83402, 0, 0, 0, 83407, 83411, 83416, 83420, 83425, 83430, 0, 0, 83434, + 83439, 83444, 83448, 83453, 83458, 0, 0, 83463, 83468, 83472, 83477, + 83482, 83487, 0, 0, 83492, 83497, 83502, 0, 0, 0, 83506, 83510, 83514, + 83517, 83520, 83524, 83528, 0, 83532, 83538, 83541, 83545, 83548, 83552, + 83556, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 83560, 83566, 83572, 83578, 83584, + 0, 0, 83588, 83594, 83600, 83606, 83612, 83618, 83625, 83632, 83639, + 83646, 83653, 83660, 0, 83667, 83674, 83681, 83687, 83694, 83701, 83708, + 83715, 83721, 83728, 83735, 83742, 83749, 83755, 83762, 83769, 83776, + 83783, 83789, 83796, 83803, 83810, 83817, 83824, 83831, 83838, 0, 83845, + 83851, 83858, 83865, 83872, 83879, 83886, 83893, 83900, 83907, 83914, + 83921, 83928, 83935, 83941, 83948, 83955, 83962, 83969, 0, 83976, 83983, + 0, 83990, 83997, 84004, 84011, 84018, 84025, 84032, 84039, 84046, 84053, + 84060, 84067, 84074, 84081, 84088, 0, 0, 84094, 84099, 84104, 84109, + 84114, 84119, 84124, 84129, 84134, 84139, 84144, 84149, 84154, 84159, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 84164, 84171, 84178, 84185, 84192, 84199, + 84206, 84213, 84220, 84227, 84234, 84241, 84248, 84255, 84262, 84269, + 84276, 84283, 84290, 84297, 84305, 84313, 84320, 84327, 84332, 84340, + 84348, 84355, 84362, 84367, 84374, 84379, 84384, 84391, 84396, 84401, + 84406, 84414, 84419, 84424, 84431, 84436, 84441, 84448, 84455, 84460, + 84465, 84470, 84475, 84480, 84485, 84490, 84495, 84500, 84507, 84512, + 84519, 84524, 84529, 84534, 84539, 84544, 84549, 84554, 84559, 84564, + 84569, 84574, 84581, 84588, 84595, 84602, 84608, 84613, 84620, 84625, + 84630, 84639, 84646, 84655, 84662, 84667, 84672, 84680, 84685, 84690, + 84695, 84700, 84705, 84712, 84717, 84722, 84727, 84732, 84737, 84744, + 84751, 84758, 84765, 84772, 84779, 84786, 84793, 84800, 84807, 84814, + 84821, 84828, 84835, 84842, 84849, 84856, 84863, 84870, 84877, 84884, + 84891, 84898, 84905, 84912, 84919, 84926, 84933, 0, 0, 0, 0, 0, 84940, + 84948, 84956, 0, 0, 0, 0, 84961, 84965, 84969, 84973, 84977, 84981, + 84985, 84989, 84993, 84997, 85002, 85007, 85012, 85017, 85022, 85027, + 85032, 85037, 85042, 85048, 85054, 85060, 85067, 85074, 85081, 85088, + 85095, 85102, 85108, 85114, 85120, 85127, 85134, 85141, 85148, 85155, + 85162, 85169, 85176, 85183, 85190, 85197, 85204, 85211, 85218, 0, 0, 0, + 85225, 85233, 85241, 85249, 85257, 85265, 85275, 85285, 85293, 85301, + 85309, 85317, 85325, 85331, 85338, 85347, 85356, 85365, 85374, 85383, + 85392, 85402, 85413, 85423, 85434, 85443, 85452, 85461, 85471, 85482, + 85492, 85503, 85514, 85523, 85531, 85537, 85543, 85549, 85555, 85563, + 85571, 85577, 85584, 85594, 85601, 85608, 85615, 85622, 85629, 85639, + 85646, 85653, 85661, 85669, 85678, 85687, 85696, 85705, 85714, 85722, + 85731, 85740, 85749, 85753, 85760, 85765, 85770, 85774, 85778, 85782, + 85786, 85791, 85796, 85802, 85808, 85812, 85818, 85822, 85826, 85830, + 85834, 85838, 85842, 85848, 0, 0, 0, 0, 0, 85852, 85857, 85862, 85867, + 85872, 85879, 85884, 85889, 85894, 85899, 85904, 85909, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 85914, + 85921, 85930, 85939, 85946, 85953, 85960, 85967, 85974, 85981, 85987, + 85994, 86001, 86008, 86015, 86022, 86029, 86036, 86043, 86052, 86059, + 86066, 86073, 86080, 86087, 86094, 86101, 86108, 86117, 86124, 86131, + 86138, 86145, 86152, 86159, 86168, 86175, 86182, 86189, 86196, 86205, + 86212, 86219, 86226, 86234, 86243, 0, 0, 86252, 86256, 86260, 86265, + 86270, 86275, 86280, 86284, 86289, 86294, 86299, 86304, 86309, 86314, + 86318, 86322, 86326, 86331, 86336, 86340, 86345, 86350, 86354, 86358, + 86363, 86368, 86373, 86378, 86383, 0, 0, 0, 86388, 86392, 86397, 86402, + 86406, 86411, 86415, 86420, 86425, 86430, 86435, 86439, 86443, 86448, + 86453, 86458, 86463, 86467, 86472, 86476, 86481, 86486, 86490, 86495, + 86500, 86505, 86509, 86513, 86518, 86523, 86528, 86533, 86538, 86543, + 86548, 86553, 86558, 86563, 86568, 86573, 86578, 86583, 86588, 86593, + 86598, 86603, 86608, 86613, 86618, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 86623, 86627, 86632, 86637, 86642, 86646, + 86651, 86656, 86661, 86666, 86670, 86674, 86679, 86684, 86689, 86694, + 86698, 86703, 86708, 86713, 86718, 86723, 86728, 86732, 86737, 86742, + 86747, 86752, 86757, 86762, 86767, 0, 86772, 86777, 86782, 86788, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 86794, 86799, 86804, 86809, 86814, 86819, + 86824, 86829, 86834, 86839, 86844, 86849, 86854, 86859, 86864, 86869, + 86874, 86879, 86884, 86889, 86894, 86899, 86904, 86909, 86914, 86919, + 86924, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 86931, 86936, 86941, 86946, 86951, 86956, 86961, + 86966, 86971, 86976, 86981, 86986, 86991, 86996, 87001, 87006, 87011, + 87016, 87021, 87026, 87031, 87036, 87041, 87046, 87051, 87056, 87061, + 87065, 87069, 87073, 0, 87078, 87084, 87089, 87094, 87099, 87104, 87110, + 87116, 87122, 87128, 87134, 87140, 87146, 87152, 87158, 87164, 87170, + 87176, 87182, 87187, 87193, 87199, 87204, 87210, 87215, 87221, 87227, + 87232, 87238, 87244, 87249, 87255, 87261, 87267, 87273, 87279, 87285, 0, + 0, 0, 0, 87290, 87296, 87302, 87308, 87314, 87320, 87326, 87332, 87338, + 87345, 87350, 87355, 87361, 87367, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 87373, 87378, 87383, 87388, 87394, 87399, 87405, 87411, + 87417, 87423, 87430, 87436, 87443, 87448, 87453, 87458, 87463, 87468, + 87473, 87478, 87483, 87488, 87493, 87498, 87503, 87508, 87513, 87518, + 87523, 87528, 87533, 87538, 87543, 87548, 87553, 87558, 87563, 87568, + 87573, 87578, 87583, 87588, 87593, 87598, 87604, 87609, 87615, 87621, + 87627, 87633, 87640, 87646, 87653, 87658, 87663, 87668, 87673, 87678, + 87683, 87688, 87693, 87698, 87703, 87708, 87713, 87718, 87723, 87728, + 87733, 87738, 87743, 87748, 87753, 87758, 87763, 87768, 87773, 87778, + 87783, 87788, 87793, 87798, 87803, 87808, 87813, 87818, 87823, 87828, + 87833, 87838, 87843, 87848, 87853, 87858, 87863, 87868, 87873, 87878, + 87883, 87888, 87893, 87898, 87903, 87908, 87913, 87918, 87923, 87928, + 87933, 87938, 87943, 87948, 87953, 87958, 87963, 87968, 87973, 87978, + 87983, 87988, 87993, 87998, 88003, 88008, 88013, 88018, 88023, 88028, + 88033, 88038, 88043, 88048, 88053, 88058, 88063, 88068, 88072, 88077, + 88082, 88087, 88092, 88097, 88102, 88107, 88112, 88117, 88122, 88127, + 88132, 88136, 88140, 88144, 88148, 88152, 88156, 88160, 88165, 88170, 0, + 0, 88175, 88180, 88184, 88188, 88192, 88196, 88200, 88204, 88208, 88212, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 88216, 88220, 88224, 88228, + 88232, 88236, 0, 0, 88241, 0, 88246, 88250, 88255, 88260, 88265, 88270, + 88275, 88280, 88285, 88290, 88295, 88299, 88304, 88309, 88314, 88319, + 88323, 88328, 88333, 88338, 88343, 88347, 88352, 88357, 88362, 88367, + 88371, 88376, 88381, 88386, 88391, 88396, 88401, 88406, 88411, 88416, + 88421, 88426, 88431, 88435, 88440, 88445, 88450, 88455, 0, 88460, 88465, + 0, 0, 0, 88470, 0, 0, 88475, 88480, 88487, 88494, 88501, 88508, 88515, + 88522, 88529, 88536, 88543, 88550, 88557, 88564, 88571, 88578, 88585, + 88592, 88599, 88606, 88613, 88620, 88627, 0, 88634, 88641, 88647, 88653, + 88659, 88666, 88673, 88681, 88689, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 88698, 88703, + 88708, 88713, 88718, 88723, 88728, 88733, 88738, 88743, 88748, 88753, + 88758, 88763, 88768, 88773, 88778, 88783, 88788, 88793, 88798, 88803, + 88808, 88812, 88817, 88822, 88828, 88832, 0, 0, 0, 88836, 88842, 88846, + 88851, 88856, 88861, 88865, 88870, 88874, 88879, 88884, 88888, 88892, + 88896, 88900, 88904, 88909, 88914, 88918, 88923, 88928, 88932, 88937, + 88942, 88947, 88952, 88957, 0, 0, 0, 0, 0, 88962, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 88967, 88970, 88974, 88978, 0, 88983, 88987, 0, + 0, 0, 0, 0, 88991, 88996, 89002, 89006, 89010, 89013, 89017, 89021, 0, + 89025, 89029, 89033, 0, 89037, 89041, 89045, 89049, 89053, 89057, 89061, + 89065, 89069, 89073, 89077, 89080, 89083, 89087, 89091, 89095, 89098, + 89101, 89104, 89108, 89112, 89116, 89120, 89124, 89128, 89131, 89135, 0, + 0, 0, 0, 89139, 89144, 89148, 0, 0, 0, 0, 89152, 89155, 89158, 89161, + 89164, 89167, 89171, 89175, 89180, 0, 0, 0, 0, 0, 0, 0, 0, 89185, 89190, + 89196, 89201, 89207, 89212, 89217, 89222, 89228, 0, 0, 0, 0, 0, 0, 0, + 89233, 89241, 89249, 89257, 89265, 89273, 89281, 89289, 89297, 89305, + 89313, 89321, 89329, 89337, 89345, 89353, 89361, 89369, 89377, 89385, + 89393, 89401, 89409, 89417, 89425, 89433, 89441, 89449, 89457, 89465, + 89472, 89480, 89488, 89492, 89497, 89502, 89507, 89512, 89517, 89522, + 89527, 89531, 89536, 89540, 89545, 89549, 89554, 89558, 89563, 89568, + 89573, 89578, 89583, 89588, 89593, 89598, 89603, 89608, 89613, 89618, + 89623, 89628, 89633, 89638, 89643, 89648, 89653, 89658, 89663, 89668, + 89673, 89678, 89683, 89688, 89693, 89698, 89703, 89708, 89713, 89718, + 89723, 89728, 89733, 89738, 89743, 89748, 0, 0, 0, 89753, 89758, 89767, + 89775, 89784, 89793, 89804, 89815, 89822, 89829, 89836, 89843, 89850, + 89857, 89864, 89871, 89878, 89885, 89892, 89899, 89906, 89913, 89920, + 89927, 89934, 89941, 89948, 89955, 89962, 0, 0, 89969, 89975, 89981, + 89987, 89993, 90000, 90007, 90015, 90023, 90030, 90037, 90044, 90051, + 90058, 90065, 90072, 90079, 90086, 90093, 90100, 90107, 90114, 90121, + 90128, 90135, 90142, 90149, 0, 0, 0, 0, 0, 90156, 90162, 90168, 90174, + 90180, 90187, 90194, 90202, 90210, 90216, 90222, 90229, 90235, 90241, + 90247, 90253, 90260, 90267, 90274, 90281, 90288, 90295, 90302, 90309, + 90316, 90323, 90330, 90337, 90344, 90351, 90358, 90365, 90372, 90379, + 90386, 90393, 90400, 90407, 90414, 90421, 90428, 90435, 90442, 90449, + 90456, 90463, 90470, 90477, 90484, 90491, 90498, 90505, 90512, 90519, + 90526, 90533, 90540, 90547, 90554, 90561, 90568, 90575, 90582, 90589, + 90596, 90603, 90610, 90617, 90624, 90631, 90638, 90645, 90652, 90659, + 90666, 90673, 90680, 90687, 90694, 90701, 90708, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 90715, 90719, 90723, 90727, 90731, 90735, 90739, 90743, 90747, 90751, + 90756, 90761, 90766, 90771, 90776, 90781, 90786, 90791, 90796, 90802, + 90808, 90814, 90821, 90828, 90835, 90842, 90849, 90856, 90863, 90870, + 90877, 0, 90884, 90888, 90892, 90896, 90899, 90903, 90906, 90910, 90913, + 90917, 90920, 90924, 90927, 90931, 90934, 90938, 90942, 90946, 90950, + 90954, 90958, 90962, 90966, 90970, 90974, 90978, 90982, 90986, 90990, + 90994, 90998, 91002, 91006, 91010, 91014, 91017, 91020, 91024, 91028, + 91032, 91035, 91038, 91041, 91045, 91049, 91053, 91057, 91061, 91064, + 91069, 91073, 91078, 91082, 91087, 91091, 91096, 91100, 91105, 91109, + 91113, 91117, 91121, 91124, 91128, 91133, 91136, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 91140, 91143, 91148, 91154, 91162, 91167, 91173, 91181, + 91187, 91193, 91197, 91201, 91208, 91217, 91224, 91233, 91239, 91248, + 91255, 91262, 91269, 91279, 91285, 91289, 91296, 91305, 91315, 91322, + 91329, 91333, 91337, 91344, 91354, 91358, 91365, 91372, 91379, 91385, + 91392, 91399, 91406, 91413, 91417, 91421, 91425, 91432, 91436, 91443, + 91450, 91464, 91473, 91477, 91481, 91485, 91492, 91496, 91500, 91504, + 91512, 91520, 91539, 91549, 91569, 91573, 91577, 91581, 91585, 91589, + 91593, 91597, 91604, 91608, 91611, 91615, 91619, 91625, 91632, 91641, + 91645, 91654, 91663, 91671, 91675, 91682, 91686, 91690, 91694, 91698, + 91709, 91718, 91727, 91736, 91745, 91757, 91766, 91775, 91784, 91792, + 91801, 91813, 91822, 91831, 91840, 91852, 91861, 91870, 91882, 91891, + 91900, 91912, 91921, 91925, 91929, 91933, 91937, 91941, 91945, 91949, + 91956, 91960, 91964, 91975, 91979, 91983, 91990, 91996, 92002, 92006, + 92013, 92017, 92021, 92025, 92029, 92033, 92037, 92043, 92051, 92055, + 92059, 92062, 92068, 92078, 92082, 92094, 92101, 92108, 92115, 92122, + 92128, 92132, 92136, 92140, 92144, 92151, 92160, 92167, 92175, 92183, + 92189, 92193, 92197, 92201, 92205, 92211, 92220, 92232, 92239, 92246, + 92255, 92266, 92272, 92281, 92290, 92297, 92306, 92313, 92320, 92330, + 92337, 92344, 92351, 92358, 92362, 92368, 92372, 92383, 92391, 92400, + 92412, 92419, 92426, 92436, 92443, 92452, 92459, 92468, 92475, 92482, + 92492, 92499, 92506, 92516, 92523, 92535, 92544, 92551, 92558, 92565, + 92574, 92584, 92597, 92604, 92614, 92624, 92631, 92640, 92653, 92660, + 92667, 92674, 92684, 92694, 92701, 92711, 92718, 92725, 92735, 92741, + 92748, 92755, 92762, 92772, 92779, 92786, 92793, 92799, 92806, 92816, + 92823, 92827, 92835, 92839, 92851, 92855, 92869, 92873, 92877, 92881, + 92885, 92891, 92898, 92906, 92910, 92914, 92918, 92922, 92929, 92933, + 92939, 92945, 92953, 92957, 92964, 92972, 92976, 92980, 92986, 92990, + 92999, 93008, 93015, 93025, 93031, 93035, 93039, 93047, 93054, 93061, + 93067, 93071, 93079, 93083, 93090, 93102, 93109, 93119, 93125, 93129, + 93138, 93145, 93154, 93158, 93162, 93169, 93173, 93177, 93181, 93185, + 93188, 93194, 93200, 93204, 93208, 93215, 93222, 93229, 93236, 93243, + 93250, 93257, 93264, 93270, 93274, 93278, 93285, 93292, 93299, 93306, + 93313, 93317, 93320, 93325, 93329, 93333, 93342, 93351, 93355, 93359, + 93365, 93371, 93388, 93394, 93398, 93407, 93411, 93415, 93422, 93430, + 93438, 93444, 93448, 93452, 93456, 93460, 93463, 93468, 93474, 93483, + 93489, 93495, 93501, 93506, 93512, 93518, 93524, 93530, 93536, 93544, + 93550, 93561, 93567, 93573, 93582, 93592, 93598, 93604, 93610, 93616, + 93622, 93628, 93634, 93640, 93646, 93652, 93661, 93670, 93679, 93685, + 93694, 93700, 93706, 93712, 93718, 93724, 93730, 93736, 93742, 93748, + 93754, 93760, 93766, 93772, 93777, 93783, 93789, 93797, 93803, 93809, + 93813, 93821, 93825, 93829, 93833, 93837, 93841, 93848, 93852, 93861, + 93865, 93872, 93880, 93884, 93888, 93892, 93905, 93921, 93925, 93929, + 93936, 93942, 93949, 93953, 93957, 93961, 93965, 93969, 93976, 93980, + 93998, 94002, 94006, 94013, 94017, 94021, 94027, 94031, 94035, 94043, + 94047, 94051, 94055, 94059, 94065, 94076, 94085, 94094, 94101, 94108, + 94119, 94126, 94133, 94140, 94147, 94154, 94161, 94168, 94178, 94184, + 94191, 94201, 94210, 94217, 94226, 94236, 94243, 94250, 94257, 94264, + 94276, 94283, 94290, 94297, 94304, 94311, 94321, 94328, 94335, 94345, + 94358, 94370, 94377, 94387, 94394, 94401, 94408, 94422, 94428, 94436, + 94446, 94456, 94463, 94470, 94476, 94480, 94487, 94497, 94503, 94516, + 94520, 94524, 94531, 94535, 94542, 94552, 94556, 94560, 94564, 94568, + 94572, 94579, 94583, 94590, 94597, 94604, 94613, 94622, 94632, 94639, + 94646, 94653, 94663, 94670, 94680, 94687, 94697, 94704, 94711, 94721, + 94731, 94738, 94744, 94752, 94760, 94766, 94772, 94776, 94780, 94787, + 94795, 94801, 94805, 94809, 94813, 94820, 94832, 94835, 94842, 94848, + 94852, 94856, 94860, 94864, 94868, 94872, 94876, 94880, 94884, 94888, + 94895, 94899, 94905, 94909, 94913, 94917, 94923, 94930, 94937, 94944, + 94955, 94963, 94967, 94973, 94982, 94989, 94995, 94998, 95002, 95006, + 95012, 95021, 95029, 95033, 95039, 95043, 95047, 95051, 95057, 95064, + 95070, 95074, 95080, 95084, 95088, 95097, 95109, 95113, 95120, 95127, + 95137, 95144, 95156, 95163, 95170, 95177, 95188, 95198, 95211, 95221, + 95228, 95232, 95236, 95240, 95244, 95253, 95262, 95271, 95288, 95297, + 95303, 95310, 95318, 95331, 95335, 95344, 95353, 95362, 95371, 95382, + 95391, 95400, 95409, 95418, 95427, 95436, 95446, 95449, 95453, 95457, + 95461, 95465, 95469, 95475, 95482, 95489, 95496, 95502, 95508, 95515, + 95521, 95528, 95536, 95540, 95547, 95554, 95561, 95569, 95572, 95576, + 95580, 95584, 95588, 95594, 95598, 95604, 95611, 95618, 95624, 95631, + 95638, 95645, 95652, 95659, 95666, 95673, 95680, 95687, 95694, 95701, + 95708, 95715, 95722, 95728, 95732, 95741, 95745, 95749, 95753, 95757, + 95763, 95770, 95777, 95784, 95791, 95798, 95804, 95812, 95816, 95820, + 95824, 95828, 95834, 95851, 95868, 95872, 95876, 95880, 95884, 95888, + 95892, 95898, 95905, 95909, 95915, 95922, 95929, 95936, 95943, 95950, + 95959, 95966, 95973, 95980, 95987, 95991, 95995, 96001, 96013, 96017, + 96021, 96030, 96034, 96038, 96042, 96048, 96052, 96056, 96065, 96069, + 96073, 96077, 96084, 96088, 96092, 96096, 96100, 96104, 96108, 96112, + 96116, 96122, 96129, 96136, 96142, 96146, 96163, 96169, 96173, 96179, + 96185, 96191, 96197, 96203, 96209, 96213, 96217, 96221, 96227, 96231, + 96237, 96241, 96245, 96252, 96259, 96276, 96280, 96284, 96288, 96292, + 96296, 96308, 96311, 96316, 96321, 96336, 96346, 96357, 96361, 96365, + 96369, 96375, 96382, 96389, 96399, 96411, 96417, 96423, 96432, 96436, + 96440, 96447, 96457, 96464, 96470, 96474, 96478, 96485, 96491, 96495, + 96501, 96505, 96513, 96519, 96523, 96531, 96539, 96546, 96552, 96559, + 96566, 96576, 96586, 96590, 96594, 96598, 96602, 96608, 96615, 96621, + 96628, 96635, 96642, 96651, 96658, 96665, 96671, 96678, 96685, 96692, + 96699, 96706, 96713, 96719, 96726, 96733, 96740, 96749, 96756, 96763, + 96767, 96773, 96777, 96783, 96790, 96797, 96804, 96808, 96812, 96816, + 96820, 96824, 96831, 96835, 96839, 96845, 96853, 96857, 96861, 96865, + 96869, 96876, 96880, 96884, 96892, 96896, 96900, 96904, 96908, 96914, + 96918, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 96922, 96928, + 96934, 96941, 96948, 96955, 96962, 96969, 96976, 96982, 96989, 96996, + 97003, 97010, 97017, 97024, 97030, 97036, 97042, 97048, 97054, 97060, + 97066, 97072, 97078, 97085, 97092, 97099, 97106, 97113, 97120, 97126, + 97132, 97138, 97145, 97152, 97158, 97164, 97173, 97180, 97187, 97194, + 97201, 97208, 97215, 97221, 97227, 97233, 97242, 97249, 97256, 97267, + 97278, 97284, 97290, 97296, 97305, 97312, 97319, 97329, 97339, 97350, + 97361, 97373, 97386, 97397, 97408, 97420, 97433, 97444, 97455, 97466, + 97477, 97488, 97500, 97508, 97516, 97525, 97534, 97543, 97549, 97555, + 97561, 97568, 97578, 97585, 97595, 97600, 97605, 97611, 97617, 97625, + 97633, 97642, 97653, 97664, 97672, 97680, 97689, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 97698, 97709, 97716, 97724, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 97732, 97736, 97740, 97744, 97748, 97752, 97756, 97760, 97764, + 97768, 97772, 97776, 97780, 97784, 97788, 97792, 97796, 97800, 97804, + 97808, 97812, 97816, 97820, 97824, 97828, 97832, 97836, 97840, 97844, + 97848, 97852, 97856, 97860, 97864, 97868, 97872, 97876, 97880, 97884, + 97888, 97892, 97896, 97900, 97904, 97908, 97912, 97916, 97920, 97924, + 97928, 97932, 97936, 97940, 97944, 97948, 97952, 97956, 97960, 97964, + 97968, 97972, 97976, 97980, 97984, 97988, 97992, 97996, 98000, 98004, + 98008, 98012, 98016, 98020, 98024, 98028, 98032, 98036, 98040, 98044, + 98048, 98052, 98056, 98060, 98064, 98068, 98072, 98076, 98080, 98084, + 98088, 98092, 98096, 98100, 98104, 98108, 98112, 98116, 98120, 98124, + 98128, 98132, 98136, 98140, 98144, 98148, 98152, 98156, 98160, 98164, + 98168, 98172, 98176, 98180, 98184, 98188, 98192, 98196, 98200, 98204, + 98208, 98212, 98216, 98220, 98224, 98228, 98232, 98236, 98240, 98244, + 98248, 98252, 98256, 98260, 98264, 98268, 98272, 98276, 98280, 98284, + 98288, 98292, 98296, 98300, 98304, 98308, 98312, 98316, 98320, 98324, + 98328, 98332, 98336, 98340, 98344, 98348, 98352, 98356, 98360, 98364, + 98368, 98372, 98376, 98380, 98384, 98388, 98392, 98396, 98400, 98404, + 98408, 98412, 98416, 98420, 98424, 98428, 98432, 98436, 98440, 98444, + 98448, 98452, 98456, 98460, 98464, 98468, 98472, 98476, 98480, 98484, + 98488, 98492, 98496, 98500, 98504, 98508, 98512, 98516, 98520, 98524, + 98528, 98532, 98536, 98540, 98544, 98548, 98552, 98556, 98560, 98564, + 98568, 98572, 98576, 98580, 98584, 98588, 98592, 98596, 98600, 98604, + 98608, 98612, 98616, 98620, 98624, 98628, 98632, 98636, 98640, 98644, + 98648, 98652, 98656, 98660, 98664, 98668, 98672, 98676, 98680, 98684, + 98688, 98692, 98696, 98700, 98704, 98708, 98712, 98716, 98720, 98724, + 98728, 98732, 98736, 98740, 98744, 98748, 98752, 98756, 98760, 98764, + 98768, 98772, 98776, 98780, 98784, 98788, 98792, 98796, 98800, 98804, + 98808, 98812, 98816, 98820, 98824, 98828, 98832, 98836, 98840, 98844, + 98848, 98852, 98856, 98860, 98864, 98868, 98872, 98876, 98880, 98884, + 98888, 98892, 98896, 98900, 98904, 98908, 98912, 98916, 98920, 98924, + 98928, 98932, 98936, 98940, 98944, 98948, 98952, 98956, 98960, 98964, + 98968, 98972, 98976, 98980, 98984, 98988, 98992, 98996, 99000, 99004, + 99008, 99012, 99016, 99020, 99024, 99028, 99032, 99036, 99040, 99044, + 99048, 99052, 99056, 99060, 99064, 99068, 99072, 99076, 99080, 99084, + 99088, 99092, 99096, 99100, 99104, 99108, 99112, 99116, 99120, 99124, + 99128, 99132, 99136, 99140, 99144, 99148, 99152, 99156, 99160, 99164, + 99168, 99172, 99176, 99180, 99184, 99188, 99192, 99196, 99200, 99204, + 99208, 99212, 99216, 99220, 99224, 99228, 99232, 99236, 99240, 99244, + 99248, 99252, 99256, 99260, 99264, 99268, 99272, 99276, 99280, 99284, + 99288, 99292, 99296, 99300, 99304, 99308, 99312, 99316, 99320, 99324, + 99328, 99332, 99336, 99340, 99344, 99348, 99352, 99356, 99360, 99364, + 99368, 99372, 99376, 99380, 99384, 99388, 99392, 99396, 99400, 99404, + 99408, 99412, 99416, 99420, 99424, 99428, 99432, 99436, 99440, 99444, + 99448, 99452, 99456, 99460, 99464, 99468, 99472, 99476, 99480, 99484, + 99488, 99492, 99496, 99500, 99504, 99508, 99512, 99516, 99520, 99524, + 99528, 99532, 99536, 99540, 99544, 99548, 99552, 99556, 99560, 99564, + 99568, 99572, 99576, 99580, 99584, 99588, 99592, 99596, 99600, 99604, + 99608, 99612, 99616, 99620, 99624, 99628, 99632, 99636, 99640, 99644, + 99648, 99652, 99656, 99660, 99664, 99668, 99672, 99676, 99680, 99684, + 99688, 99692, 99696, 99700, 99704, 99708, 99712, 99716, 99720, 99724, + 99728, 99732, 99736, 99740, 99744, 99748, 99752, 99756, 99760, 99764, + 99768, 99772, 99776, 99780, 99784, 99788, 99792, 99796, 99800, 99804, + 99808, 99812, 99816, 99820, 99824, 99828, 99832, 99836, 99840, 99844, + 99848, 99852, 99856, 99860, 99864, 99868, 99872, 99876, 99880, 99884, + 99888, 99892, 99896, 99900, 99904, 99908, 99912, 99916, 99920, 99924, + 99928, 99932, 99936, 99940, 99944, 99948, 99952, 99956, 99960, 99964, + 99968, 99972, 99976, 99980, 99984, 99988, 99992, 99996, 100000, 100004, + 100008, 100012, 100016, 100020, 100024, 100028, 100032, 100036, 100040, + 100044, 100048, 100052, 100056, 100060, 100064, 100068, 100072, 100076, + 100080, 100084, 100088, 100092, 100096, 100100, 100104, 100108, 100112, + 100116, 100120, 100124, 100128, 100132, 100136, 100140, 100144, 100148, + 100152, 100156, 100160, 100164, 100168, 100172, 100176, 100180, 100184, + 100188, 100192, 100196, 100200, 100204, 100208, 100212, 100216, 100220, + 100224, 100228, 100232, 100236, 100240, 100244, 100248, 100252, 100256, + 100260, 100264, 100268, 100272, 100276, 100280, 100284, 100288, 100292, + 100296, 100300, 100304, 100308, 100312, 100316, 100320, 100324, 100328, + 100332, 100336, 100340, 100344, 100348, 100352, 100356, 100360, 100364, + 100368, 100372, 100376, 100380, 100384, 100388, 100392, 100396, 100400, + 100404, 100408, 100412, 100416, 100420, 100424, 100428, 100432, 100436, + 100440, 100444, 100448, 100452, 100456, 100460, 100464, 100468, 100472, + 100476, 100480, 100484, 100488, 100492, 100496, 100500, 100504, 100508, + 100512, 100516, 100520, 100524, 100528, 100532, 100536, 100540, 100544, + 100548, 100552, 100556, 100560, 100564, 100568, 100572, 100576, 100580, + 100584, 100588, 100592, 100596, 100600, 100604, 100608, 100612, 100616, + 100620, 100624, 100628, 100632, 100636, 100640, 100644, 100648, 100652, + 100656, 100660, 100664, 100668, 100672, 100676, 100680, 100684, 100688, + 100692, 100696, 100700, 100704, 100708, 100712, 100716, 100720, 100724, + 100728, 100732, 100736, 100740, 100744, 100748, 100752, 100756, 100760, + 100764, 100768, 100772, 100776, 100780, 100784, 100788, 100792, 100796, + 100800, 100804, 100808, 100812, 100816, 100820, 100824, 100828, 100832, + 100836, 100840, 100844, 100848, 100852, 100856, 100860, 100864, 100868, + 100872, 100876, 100880, 100884, 100888, 100892, 100896, 100900, 100904, + 100908, 100912, 100916, 100920, 100924, 100928, 100932, 100936, 100940, + 100944, 100948, 100952, 100956, 100960, 100964, 100968, 100972, 100976, + 100980, 100984, 100988, 100992, 100996, 101000, 101004, 101008, 101012, + 101016, 101020, 101024, 101028, 101032, 101036, 101040, 101044, 101048, + 101052, 101056, 101060, 101064, 101068, 101072, 101076, 101080, 101084, + 101088, 101092, 101096, 101100, 101104, 101108, 101112, 101116, 101120, + 101124, 101128, 101132, 101136, 101140, 101144, 101148, 101152, 101156, + 101160, 101164, 101168, 101172, 101176, 101180, 101184, 101188, 101192, + 101196, 101200, 101204, 101208, 101212, 101216, 101220, 101224, 101228, + 101232, 101236, 101240, 101244, 101248, 101252, 101256, 101260, 101264, + 101268, 101272, 101276, 101280, 101284, 101288, 101292, 101296, 101300, + 101304, 101308, 101312, 101316, 101320, 101324, 101328, 101332, 101336, + 101340, 101344, 101348, 101352, 101356, 101360, 101364, 101368, 101372, + 101376, 101380, 101384, 101388, 101392, 101396, 101400, 101404, 101408, + 101412, 101416, 101420, 101424, 101428, 101432, 101436, 101440, 101444, + 101448, 101452, 101456, 101460, 101464, 101468, 101472, 101476, 101480, + 101484, 101488, 101492, 101496, 101500, 101504, 101508, 101512, 101516, + 101520, 101524, 101528, 101532, 101536, 101540, 101544, 101548, 101552, + 101556, 101560, 101564, 101568, 101572, 101576, 101580, 101584, 101588, + 101592, 101596, 101600, 101604, 101608, 101612, 101616, 101620, 101624, + 101628, 101632, 101636, 101640, 101644, 101648, 101652, 101656, 101660, + 101664, 101668, 101672, 101676, 101680, 101684, 101688, 101692, 101696, + 101700, 101704, 101708, 101712, 101716, 101720, 101724, 101728, 101732, + 101736, 101740, 101744, 101748, 101752, 101756, 101760, 101764, 101768, + 101772, 101776, 101780, 101784, 101788, 101792, 101796, 101800, 101804, + 101808, 101812, 101816, 101820, 101824, 101828, 101832, 101836, 101840, + 101844, 101848, 101852, 101856, 101860, 101864, 101868, 101872, 101876, + 101880, 101884, 101888, 101892, 101896, 101900, 101904, 101908, 101912, + 101916, 101920, 101924, 101928, 101932, 101936, 101940, 101944, 101948, + 101952, 101956, 101960, 101964, 101968, 101972, 101976, 101980, 101984, + 101988, 101992, 101996, 102000, 102004, 102008, 102012, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 102016, 102021, 102026, 102031, 102038, 102045, 102052, 102059, + 102064, 102069, 102074, 102079, 102086, 102091, 102098, 102105, 102110, + 102115, 102120, 102127, 102132, 102137, 102144, 102151, 102156, 102161, + 102166, 102173, 102180, 102187, 102192, 102197, 102204, 102211, 102218, + 102225, 102230, 102235, 102240, 102247, 102252, 102257, 102262, 102269, + 102278, 102285, 102290, 102295, 102300, 102305, 102310, 102315, 102324, + 102331, 102336, 102343, 102350, 102355, 102360, 102365, 102372, 102377, + 102384, 102391, 102396, 102401, 102406, 102413, 102420, 102425, 102430, + 102437, 102444, 102451, 102456, 102461, 102466, 102471, 102478, 102487, + 102496, 102501, 102508, 102517, 102522, 102527, 102532, 102537, 102544, + 102551, 102558, 102565, 102570, 102575, 102580, 102587, 102594, 102601, + 102606, 102611, 102618, 102623, 102630, 102635, 102642, 102647, 102654, + 102661, 102666, 102671, 102676, 102681, 102686, 102691, 102696, 102701, + 102706, 102713, 102720, 102727, 102734, 102741, 102750, 102755, 102760, + 102767, 102774, 102779, 102786, 102793, 102800, 102807, 102814, 102821, + 102826, 102831, 102836, 102841, 102846, 102855, 102864, 102873, 102882, + 102891, 102900, 102909, 102918, 102923, 102934, 102945, 102954, 102959, + 102964, 102969, 102974, 102983, 102990, 102997, 103004, 103011, 103018, + 103025, 103034, 103043, 103054, 103063, 103074, 103083, 103090, 103099, + 103110, 103119, 103128, 103137, 103146, 103153, 103160, 103167, 103176, + 103185, 103196, 103205, 103214, 103225, 103230, 103235, 103246, 103254, + 103263, 103272, 103281, 103292, 103301, 103310, 103321, 103332, 103343, + 103354, 103365, 103376, 103383, 103390, 103397, 103404, 103415, 103424, + 103431, 103438, 103445, 103456, 103467, 103478, 103489, 103500, 103511, + 103522, 103533, 103540, 103547, 103556, 103565, 103572, 103579, 103586, + 103595, 103604, 103613, 103620, 103629, 103638, 103647, 103654, 103661, + 103666, 103672, 103679, 103686, 103693, 103700, 103707, 103714, 103723, + 103732, 103741, 103750, 103757, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 103766, + 103772, 103777, 103782, 103789, 103795, 103801, 103807, 103813, 103819, + 103825, 103831, 103835, 103839, 103845, 103851, 103857, 103861, 103866, + 103871, 103875, 103879, 103882, 103888, 103894, 103900, 103906, 103912, + 103918, 103924, 103930, 103936, 103946, 103956, 103962, 103968, 103978, + 103988, 103994, 0, 0, 104000, 104008, 104013, 104018, 104024, 104030, + 104036, 104042, 104048, 104054, 104061, 104068, 104074, 104080, 104086, + 104092, 104098, 104104, 104110, 104116, 104121, 104127, 104133, 104139, + 104145, 104151, 104160, 104166, 104171, 104179, 104186, 104193, 104202, + 104211, 104220, 104229, 104238, 104247, 104256, 104265, 104275, 104285, + 104293, 104301, 104310, 104319, 104325, 104331, 104337, 104343, 104351, + 104359, 104363, 104369, 104374, 104380, 104386, 104392, 104398, 104404, + 104413, 104418, 104425, 104430, 104435, 104440, 104446, 104452, 104458, + 104465, 104470, 104475, 104480, 104485, 104490, 104496, 104502, 104508, + 104514, 104520, 104526, 104532, 104538, 104543, 104548, 104553, 104558, + 104563, 104568, 104573, 104578, 104584, 104590, 104595, 104600, 104605, + 104610, 104615, 104621, 104628, 104632, 104636, 104640, 104644, 104648, + 104652, 104656, 104660, 104668, 104678, 104682, 104686, 104692, 104698, + 104704, 104710, 104716, 104722, 104728, 104734, 104740, 104746, 104752, + 104758, 104764, 104770, 104774, 104778, 104785, 104791, 104797, 104803, + 104808, 104815, 104820, 104826, 104832, 104838, 104844, 104849, 104853, + 104859, 104863, 104867, 104871, 104877, 104883, 104887, 104893, 104899, + 104905, 104911, 104917, 104925, 104933, 104939, 104945, 104951, 104957, + 104969, 104981, 104995, 105007, 105019, 105033, 105047, 105061, 105065, + 105073, 105081, 105086, 105090, 105094, 105098, 105102, 105106, 105110, + 105114, 105120, 105126, 105132, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 105138, + 105144, 105150, 105156, 105162, 105168, 105174, 105180, 105186, 105192, + 105198, 105204, 105210, 105216, 105222, 105228, 105234, 105240, 105246, + 105252, 105258, 105264, 105270, 105276, 105282, 105288, 105294, 105300, + 105306, 105312, 105318, 105324, 105330, 105336, 105342, 105348, 105354, + 105360, 105366, 105372, 105378, 105384, 105390, 105396, 105402, 105408, + 105414, 105420, 105426, 105432, 105438, 105444, 105450, 105456, 105462, + 105468, 105474, 105480, 105486, 105492, 105498, 105504, 105510, 105516, + 105522, 105528, 105534, 105539, 105544, 105549, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 105553, 105558, 105565, 105572, 105579, 105586, 105591, 105595, + 105601, 105605, 105609, 105615, 105619, 105623, 105627, 105633, 105640, + 105644, 105648, 105652, 105656, 105660, 105664, 105670, 105674, 105678, + 105682, 105686, 105690, 105694, 105698, 105702, 105706, 105710, 105714, + 105718, 105723, 105727, 105731, 105735, 105739, 105743, 105747, 105751, + 105755, 105759, 105766, 105770, 105777, 105781, 105785, 105789, 105793, + 105797, 105801, 105805, 105812, 105816, 105820, 105824, 105828, 105832, + 105838, 105842, 105848, 105852, 105856, 105860, 105864, 105868, 105872, + 105876, 105880, 105884, 105888, 105892, 105896, 105900, 105904, 105908, + 105912, 105916, 105920, 105924, 105932, 105936, 105940, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 105944, 105952, 105960, 105968, 105976, 105984, 105992, 106000, + 106008, 106016, 106024, 106032, 106040, 106048, 106056, 106064, 106072, + 106080, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 106088, 106092, 106097, + 106102, 106107, 106111, 106116, 106121, 106126, 106130, 106135, 106140, + 106144, 106148, 106152, 106156, 106161, 106166, 106170, 106174, 106179, + 106183, 106188, 106193, 106198, 106203, 106208, 106212, 106217, 106222, + 106227, 106231, 106236, 106241, 106246, 106250, 106255, 106260, 106264, + 106268, 106272, 106276, 106281, 106286, 106290, 106294, 106299, 106303, + 106308, 106313, 106318, 106323, 106328, 106332, 106337, 106342, 106347, + 106351, 106356, 106361, 106366, 106370, 106375, 106380, 106384, 106388, + 106392, 106396, 106401, 106406, 106410, 106414, 106419, 106423, 106428, + 106433, 106438, 106443, 106448, 106452, 106457, 106462, 106467, 106471, + 106476, 0, 106481, 106485, 106490, 106495, 106499, 106503, 106507, + 106511, 106516, 106521, 106525, 106529, 106534, 106538, 106543, 106548, + 106553, 106558, 106563, 106568, 106574, 106580, 106586, 106591, 106597, + 106603, 106609, 106614, 106620, 106626, 106631, 106636, 106641, 106646, + 106652, 106658, 106663, 106668, 106674, 106679, 106685, 106691, 106697, + 106703, 106709, 106714, 106720, 106726, 106732, 106737, 106743, 106749, + 106755, 106760, 106766, 106772, 106777, 106782, 106787, 106792, 106798, + 106804, 106809, 106814, 106820, 106825, 106831, 106837, 106843, 106849, + 106855, 0, 106859, 106864, 0, 0, 106869, 0, 0, 106874, 106879, 0, 0, + 106884, 106888, 106892, 106897, 0, 106902, 106906, 106911, 106915, + 106920, 106925, 106930, 106935, 106940, 106944, 106949, 106954, 0, + 106959, 0, 106964, 106969, 106973, 106978, 106983, 106987, 106991, 0, + 106995, 107000, 107005, 107009, 107013, 107018, 107022, 107027, 107032, + 107037, 107042, 107047, 107052, 107058, 107064, 107070, 107075, 107081, + 107087, 107093, 107098, 107104, 107110, 107115, 107120, 107125, 107130, + 107136, 107142, 107147, 107152, 107158, 107163, 107169, 107175, 107181, + 107187, 107193, 107198, 107204, 107210, 107216, 107221, 107227, 107233, + 107239, 107244, 107250, 107256, 107261, 107266, 107271, 107276, 107282, + 107288, 107293, 107298, 107304, 107309, 107315, 107321, 107327, 107333, + 107339, 107343, 0, 107348, 107353, 107357, 107362, 0, 0, 107367, 107372, + 107377, 107381, 107385, 107389, 107393, 107398, 0, 107403, 107407, + 107412, 107416, 107421, 107426, 107431, 0, 107436, 107440, 107445, + 107450, 107455, 107459, 107464, 107469, 107474, 107478, 107483, 107488, + 107492, 107496, 107500, 107504, 107509, 107514, 107518, 107522, 107527, + 107531, 107536, 107541, 107546, 107551, 107556, 107560, 0, 107565, + 107570, 107574, 107579, 0, 107584, 107588, 107593, 107598, 107602, 0, + 107606, 0, 0, 0, 107610, 107614, 107619, 107623, 107628, 107633, 107638, + 0, 107643, 107647, 107652, 107657, 107662, 107666, 107671, 107676, + 107681, 107685, 107690, 107695, 107699, 107703, 107707, 107711, 107716, + 107721, 107725, 107729, 107734, 107738, 107743, 107748, 107753, 107758, + 107763, 107768, 107774, 107780, 107786, 107791, 107797, 107803, 107809, + 107814, 107820, 107826, 107831, 107836, 107841, 107846, 107852, 107858, + 107863, 107868, 107874, 107879, 107885, 107891, 107897, 107903, 107909, + 107914, 107920, 107926, 107932, 107937, 107943, 107949, 107955, 107960, + 107966, 107972, 107977, 107982, 107987, 107992, 107998, 108004, 108009, + 108014, 108020, 108025, 108031, 108037, 108043, 108049, 108055, 108059, + 108064, 108069, 108074, 108078, 108083, 108088, 108093, 108097, 108102, + 108107, 108111, 108115, 108119, 108123, 108128, 108133, 108137, 108141, + 108146, 108150, 108155, 108160, 108165, 108170, 108175, 108179, 108184, + 108189, 108194, 108198, 108203, 108208, 108213, 108217, 108222, 108227, + 108231, 108235, 108239, 108243, 108248, 108253, 108257, 108261, 108266, + 108270, 108275, 108280, 108285, 108290, 108295, 108300, 108306, 108312, + 108318, 108323, 108329, 108335, 108341, 108346, 108352, 108358, 108363, + 108368, 108373, 108378, 108384, 108390, 108395, 108400, 108406, 108411, + 108417, 108423, 108429, 108435, 108441, 108446, 108452, 108458, 108464, + 108469, 108475, 108481, 108487, 108492, 108498, 108504, 108509, 108514, + 108519, 108524, 108530, 108536, 108541, 108546, 108552, 108557, 108563, + 108569, 108575, 108581, 108587, 108592, 108598, 108604, 108610, 108615, + 108621, 108627, 108633, 108638, 108644, 108650, 108655, 108660, 108665, + 108670, 108676, 108682, 108687, 108692, 108698, 108703, 108709, 108715, + 108721, 108727, 108733, 108738, 108744, 108750, 108756, 108761, 108767, + 108773, 108779, 108784, 108790, 108796, 108801, 108806, 108811, 108816, + 108822, 108828, 108833, 108838, 108844, 108849, 108855, 108861, 108867, + 108873, 108879, 108885, 108892, 108899, 108906, 108912, 108919, 108926, + 108933, 108939, 108946, 108953, 108959, 108965, 108971, 108977, 108984, + 108991, 108997, 109003, 109010, 109016, 109023, 109030, 109037, 109044, + 109051, 109057, 109064, 109071, 109078, 109084, 109091, 109098, 109105, + 109111, 109118, 109125, 109131, 109137, 109143, 109149, 109156, 109163, + 109169, 109175, 109182, 109188, 109195, 109202, 109209, 109216, 109223, + 109227, 109232, 109237, 109242, 109246, 109251, 109256, 109261, 109265, + 109270, 109275, 109279, 109283, 109287, 109291, 109296, 109301, 109305, + 109309, 109314, 109318, 109323, 109328, 109333, 109338, 109343, 109347, + 109352, 109357, 109362, 109366, 109371, 109376, 109381, 109385, 109390, + 109395, 109399, 109403, 109407, 109411, 109416, 109421, 109425, 109429, + 109434, 109438, 109443, 109448, 109453, 109458, 109463, 109469, 0, 0, + 109476, 109481, 109486, 109491, 109496, 109501, 109506, 109511, 109516, + 109521, 109526, 109531, 109536, 109541, 109546, 109551, 109556, 109561, + 109567, 109572, 109577, 109582, 109587, 109592, 109597, 109602, 109606, + 109611, 109616, 109621, 109626, 109631, 109636, 109641, 109646, 109651, + 109656, 109661, 109666, 109671, 109676, 109681, 109686, 109691, 109697, + 109702, 109707, 109712, 109717, 109722, 109727, 109732, 109738, 109743, + 109748, 109753, 109758, 109763, 109768, 109773, 109778, 109783, 109788, + 109793, 109798, 109803, 109808, 109813, 109818, 109823, 109828, 109833, + 109838, 109843, 109848, 109853, 109859, 109864, 109869, 109874, 109879, + 109884, 109889, 109894, 109898, 109903, 109908, 109913, 109918, 109923, + 109928, 109933, 109938, 109943, 109948, 109953, 109958, 109963, 109968, + 109973, 109978, 109983, 109989, 109994, 109999, 110004, 110009, 110014, + 110019, 110024, 110030, 110035, 110040, 110045, 110050, 110055, 110060, + 110066, 110072, 110078, 110084, 110090, 110096, 110102, 110108, 110114, + 110120, 110126, 110132, 110138, 110144, 110150, 110156, 110162, 110169, + 110175, 110181, 110187, 110193, 110199, 110205, 110211, 110216, 110222, + 110228, 110234, 110240, 110246, 110252, 110258, 110264, 110270, 110276, + 110282, 110288, 110294, 110300, 110306, 110312, 110318, 110325, 110331, + 110337, 110343, 110349, 110355, 110361, 110367, 110374, 110380, 110386, + 110392, 110398, 110404, 110410, 110416, 110422, 110428, 110434, 110440, + 110446, 110452, 110458, 110464, 110470, 110476, 110482, 110488, 110494, + 110500, 110506, 110512, 110519, 110525, 110531, 110537, 110543, 110549, + 110555, 110561, 110566, 110572, 110578, 110584, 110590, 110596, 110602, + 110608, 110614, 110620, 110626, 110632, 110638, 110644, 110650, 110656, + 110662, 110668, 110675, 110681, 110687, 110693, 110699, 110705, 110711, + 110717, 110724, 110730, 110736, 110742, 110748, 110754, 110760, 110767, + 110774, 110781, 110788, 110795, 110802, 110809, 110816, 110823, 110830, + 110837, 110844, 110851, 110858, 110865, 110872, 110879, 110887, 110894, + 110901, 110908, 110915, 110922, 110929, 110936, 110942, 110949, 110956, + 110963, 110970, 110977, 110984, 110991, 110998, 111005, 111012, 111019, + 111026, 111033, 111040, 111047, 111054, 111061, 111069, 111076, 111083, + 111090, 111097, 111104, 111111, 111118, 111126, 111133, 111140, 111147, + 111154, 111161, 111168, 111173, 0, 0, 111178, 111183, 111187, 111191, + 111195, 111199, 111203, 111207, 111211, 111215, 111219, 111224, 111228, + 111232, 111236, 111240, 111244, 111248, 111252, 111256, 111260, 111265, + 111269, 111273, 111277, 111281, 111285, 111289, 111293, 111297, 111301, + 111307, 111312, 111317, 111322, 111327, 111332, 111337, 111342, 111347, + 111352, 111357, 111361, 111365, 111369, 111373, 111377, 111381, 111385, + 111389, 111393, 111400, 111407, 111414, 111421, 111428, 111435, 111441, + 111448, 111455, 111462, 111470, 111478, 111486, 111494, 111502, 111510, + 111517, 111524, 111531, 111539, 111547, 111555, 111563, 111571, 111579, + 111586, 111593, 111600, 111608, 111616, 111624, 111632, 111640, 111648, + 111653, 111658, 111663, 111668, 111673, 111678, 111683, 111688, 111693, + 0, 0, 0, 0, 111698, 111703, 111707, 111711, 111715, 111719, 111723, + 111727, 111731, 111735, 111739, 111743, 111747, 111751, 111755, 111759, + 111763, 111767, 111771, 111775, 111779, 111783, 111787, 111791, 111795, + 111799, 111803, 111807, 111811, 111815, 111819, 111823, 111827, 111831, + 111835, 111839, 111843, 111847, 111851, 111855, 111859, 111863, 111867, + 111871, 111875, 111879, 111883, 111887, 111891, 111895, 111899, 111904, + 111908, 111912, 111916, 111920, 111924, 111928, 111932, 111936, 111940, + 111944, 111948, 111952, 111956, 111960, 111964, 111968, 111972, 111976, + 111980, 111984, 111988, 111992, 111996, 112000, 112004, 112008, 112012, + 112016, 112020, 112024, 112028, 112032, 112036, 112040, 112044, 112048, + 112052, 112056, 112060, 112064, 112068, 112072, 112076, 112080, 112084, + 112088, 112092, 112096, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 112100, + 112107, 112112, 112116, 112120, 112124, 112129, 112134, 112139, 112144, + 112149, 0, 0, 0, 0, 0, 112154, 112159, 112165, 112171, 112177, 112182, + 112188, 112194, 112200, 112205, 112211, 112217, 112222, 112227, 112232, + 112237, 112243, 112249, 112254, 112259, 112265, 112270, 112276, 112282, + 112288, 112294, 112300, 112310, 112317, 112323, 112326, 0, 0, 112329, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 112335, 0, 112340, 0, 0, 112346, 0, 0, 0, + 112351, 0, 0, 0, 112357, 112360, 112363, 112366, 112369, 0, 0, 0, 0, 0, + 0, 0, 0, 112372, 0, 0, 0, 0, 0, 0, 0, 112380, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 112388, 0, 112396, + 112403, 0, 0, 112410, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 112418, 112428, + 112433, 112437, 0, 0, 112442, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 112445, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 112449, 112455, + 112461, 112467, 112471, 112477, 112483, 112489, 112495, 112501, 112507, + 112513, 112519, 112525, 112531, 112537, 112543, 112549, 112555, 112561, + 112567, 112573, 112579, 112585, 112591, 112597, 112603, 112609, 112615, + 112621, 112627, 112633, 112639, 112645, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 112651, 112662, 112673, 112684, 112695, 112706, 112717, 112728, + 112739, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 112750, 112754, 112758, 112762, 112766, + 112770, 112774, 112778, 112782, 112786, 112790, 112794, 112798, 112802, + 112806, 112810, 112814, 112818, 112822, 112826, 112830, 112834, 112838, + 112842, 112846, 112850, 112854, 112858, 112862, 112866, 112870, 112874, + 112878, 112882, 112886, 112890, 112894, 112898, 112902, 112906, 112910, + 112914, 112918, 112922, 112926, 112930, 112934, 112938, 112942, 112946, + 112950, 112954, 112958, 112962, 112966, 112970, 112974, 112978, 112982, + 112986, 112990, 112994, 112998, 113002, 113006, 113010, 113014, 113018, + 113022, 113026, 113030, 113034, 113038, 113042, 113046, 113050, 113054, + 113058, 113062, 113066, 113070, 113074, 113078, 113082, 113086, 113090, + 113094, 113098, 113102, 113106, 113110, 113114, 113118, 113122, 113126, + 113130, 113134, 113138, 113142, 113146, 113150, 113154, 113158, 113162, + 113166, 113170, 113174, 113178, 113182, 113186, 113190, 113194, 113198, + 113202, 113206, 113210, 113214, 113218, 113222, 113226, 113230, 113234, + 113238, 113242, 113246, 113250, 113254, 113258, 113262, 113266, 113270, + 113274, 113278, 113282, 113286, 113290, 113294, 113298, 113302, 113306, + 113310, 113314, 113318, 113322, 113326, 113330, 113334, 113338, 113342, + 113346, 113350, 113354, 113358, 113362, 113366, 113370, 113374, 113378, + 113382, 113386, 113390, 113394, 113398, 113402, 113406, 113410, 113414, + 113418, 113422, 113426, 113430, 113434, 113438, 113442, 113446, 113450, + 113454, 113458, 113462, 113466, 113470, 113474, 113478, 113482, 113486, + 113490, 113494, 113498, 113502, 113506, 113510, 113514, 113518, 113522, + 113526, 113530, 113534, 113538, 113542, 113546, 113550, 113554, 113558, + 113562, 113566, 113570, 113574, 113578, 113582, 113586, 113590, 113594, + 113598, 113602, 113606, 113610, 113614, 113618, 113622, 113626, 113630, + 113634, 113638, 113642, 113646, 113650, 113654, 113658, 113662, 113666, + 113670, 113674, 113678, 113682, 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, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 114918, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 114922, 114925, 114929, 114933, 114936, 114940, 114944, 114947, + 114950, 114954, 114958, 114961, 114964, 114967, 114970, 114975, 114978, + 114982, 114985, 114988, 114991, 114994, 114997, 115000, 115003, 115006, + 115009, 115012, 115015, 115019, 115023, 115027, 115031, 115036, 115041, + 115047, 115053, 115059, 115064, 115070, 115076, 115082, 115087, 115093, + 115099, 115104, 115109, 115114, 115119, 115125, 115131, 115136, 115141, + 115147, 115152, 115158, 115164, 115170, 115176, 115182, 115186, 115191, + 115195, 115200, 115204, 115209, 115214, 115220, 115226, 115232, 115237, + 115243, 115249, 115255, 115260, 115266, 115272, 115277, 115282, 115287, + 115292, 115298, 115304, 115309, 115314, 115320, 115325, 115331, 115337, + 115343, 115349, 115355, 115360, 115364, 115369, 115372, 115376, 115379, + 115382, 115385, 115388, 115391, 115394, 115397, 115400, 115403, 115406, + 115409, 115412, 115415, 115418, 115421, 115424, 115427, 115430, 115433, + 115436, 115439, 115442, 115445, 115448, 115451, 115454, 115457, 115460, + 115463, 115466, 115469, 115472, 115475, 115478, 115481, 115484, 115487, + 115490, 115493, 115496, 115499, 115502, 115505, 115508, 115511, 115514, + 115517, 115520, 115523, 115526, 115529, 115532, 115535, 115538, 115541, + 115544, 115547, 115550, 115553, 115556, 115559, 115562, 115565, 115568, + 115571, 115574, 115577, 115580, 115583, 115586, 115589, 115592, 115595, + 115598, 115601, 115604, 115607, 115610, 115613, 115616, 115619, 115622, + 115625, 115628, 115631, 115634, 115637, 115640, 115643, 115646, 115649, + 115652, 115655, 115658, 115661, 115664, 115667, 115670, 115673, 115676, + 115679, 115682, 115685, 115688, 115691, 115694, 115697, 115700, 115703, + 115706, 115709, 115712, 115715, 115718, 115721, 115724, 115727, 115730, + 115733, 115736, 115739, 115742, 115745, 115748, 115751, 115754, 115757, + 115760, 115763, 115766, 115769, 115772, 115775, 115778, 115781, 115784, + 115787, 115790, 115793, 115796, 115799, 115802, 115805, 115808, 115811, + 115814, 115817, 115820, 115823, 115826, 115829, 115832, 115835, 115838, + 115841, 115844, 115847, 115850, 115853, 115856, 115859, 115862, 115865, + 115868, 115871, 115874, 115877, 115880, 115883, 115886, 115889, 115892, + 115895, 115898, 115901, 115904, 115907, 115910, 115913, 115916, 115919, + 115922, 115925, 115928, 115931, 115934, 115937, 115940, 115943, 115946, + 115949, 115952, 115955, 115958, 115961, 115964, 115967, 115970, 115973, + 115976, 115979, 115982, 115985, 115988, 115991, 115994, 115997, 116000, + 116003, 116006, 116009, 116012, 116015, 116018, 116021, 116024, 116027, + 116030, 116033, 116036, 116039, 116042, 116045, 116048, 116051, 116054, + 116057, 116060, 116063, 116066, 116069, 116072, 116075, 116078, 116081, + 116084, 116087, 116090, 116093, 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, 0, 0, 0, 7929, 0, 194682, 0, 0, 66480, 0, 42833, 74529, - 12064, 0, 596, 0, 0, 65842, 8651, 0, 0, 120218, 12995, 64865, 1373, 0, 0, - 5816, 119067, 64810, 4231, 917833, 0, 4233, 4234, 4232, 917836, 0, - 120210, 917841, 917840, 0, 8851, 0, 0, 0, 41601, 8874, 0, 7748, 0, 0, 0, - 0, 41603, 9784, 0, 9188, 41600, 0, 0, 0, 1457, 3535, 0, 0, 0, 0, 65240, - 11951, 0, 3404, 0, 0, 0, 1759, 0, 194964, 0, 0, 0, 66577, 0, 0, 65859, 0, - 0, 0, 0, 0, 0, 65930, 9834, 3055, 9852, 0, 65288, 0, 11398, 0, 0, 119255, - 0, 0, 603, 0, 43548, 0, 0, 917824, 3350, 120817, 64318, 917828, 127089, - 3390, 74483, 43265, 120599, 917830, 917829, 0, 1919, 3400, 0, 917813, 0, - 917540, 66446, 64141, 8562, 64139, 64138, 4043, 8712, 64134, 64133, - 11297, 0, 0, 11966, 64128, 0, 0, 0, 64132, 10867, 64130, 64129, 0, 0, - 9779, 2764, 66002, 0, 9471, 0, 66021, 0, 0, 5457, 5440, 8857, 0, 65282, - 2843, 5355, 0, 0, 0, 5194, 11657, 0, 0, 0, 0, 0, 0, 127027, 10717, 64570, - 5630, 74350, 64143, 10682, 0, 10602, 800, 42499, 66186, 0, 0, 64930, - 11631, 64146, 64145, 64144, 762, 13172, 118859, 0, 0, 10906, 1353, 6960, - 0, 0, 5828, 8724, 917806, 8933, 1601, 42244, 858, 7080, 917808, 917807, - 8090, 0, 74401, 917811, 587, 0, 0, 0, 0, 0, 0, 2750, 0, 556, 64158, - 64157, 0, 12213, 0, 2760, 0, 0, 0, 0, 64156, 64155, 42496, 0, 64151, - 64150, 12679, 10053, 10421, 11787, 64153, 64152, 0, 0, 4839, 0, 0, 1874, - 120352, 0, 6577, 64125, 64124, 64123, 0, 0, 0, 7007, 7590, 65443, 9036, - 0, 64122, 74422, 66609, 0, 64117, 64116, 6287, 64114, 2725, 64120, 64119, - 64118, 42128, 0, 1177, 65601, 12322, 64106, 0, 0, 64102, 7859, 1945, - 64099, 0, 10453, 64104, 7188, 7997, 0, 0, 0, 8705, 64097, 64096, 9571, - 528, 917989, 0, 11429, 0, 0, 0, 0, 73841, 0, 0, 9056, 0, 6188, 120019, - 6155, 64068, 1823, 64066, 64065, 64072, 64071, 63, 7233, 0, 0, 41904, - 6639, 64064, 0, 0, 0, 1176, 118959, 0, 8162, 0, 0, 0, 120519, 66376, - 66242, 11415, 4333, 9855, 64112, 64642, 0, 5388, 0, 0, 0, 7714, 66222, 0, - 7768, 0, 4199, 64708, 0, 0, 0, 8708, 9560, 64077, 64076, 8996, 4992, - 4471, 42622, 64079, 64078, 0, 0, 0, 0, 64615, 0, 0, 12075, 0, 0, 5174, 0, - 0, 0, 3123, 0, 12685, 0, 8408, 64704, 0, 0, 9223, 0, 41616, 0, 73797, 0, - 1116, 0, 43049, 0, 43050, 8548, 0, 0, 119061, 0, 0, 13115, 64092, 64091, - 9322, 0, 120595, 64095, 64094, 8111, 66247, 42332, 64089, 64088, 6199, 0, - 0, 11434, 64083, 64082, 11329, 7737, 64087, 64086, 64085, 64084, 0, 0, - 41335, 4118, 1797, 0, 41334, 0, 46, 0, 0, 298, 0, 0, 0, 42627, 0, 32, - 6187, 119052, 11495, 11459, 3665, 0, 42871, 0, 19923, 74335, 0, 0, 66239, - 0, 64403, 4412, 7240, 0, 0, 0, 65758, 12750, 4181, 8544, 0, 120199, 0, - 120198, 120203, 6181, 65014, 0, 0, 0, 3639, 119588, 0, 0, 0, 10073, - 120206, 0, 0, 0, 42844, 7498, 1098, 0, 0, 0, 0, 10207, 8789, 0, 0, 0, 0, - 9234, 0, 6182, 0, 65058, 0, 0, 0, 0, 5471, 9461, 5573, 118936, 5473, 44, - 0, 66244, 118907, 0, 66238, 12844, 0, 1622, 7767, 1900, 41339, 11458, 0, - 0, 6581, 5576, 0, 64405, 41337, 0, 0, 8947, 0, 0, 41694, 0, 0, 7908, 0, - 10408, 6579, 0, 194829, 0, 0, 0, 6583, 7761, 127010, 120504, 194828, 0, - 5058, 41010, 9992, 0, 5057, 0, 0, 74538, 5054, 118951, 194971, 0, 0, - 1437, 41617, 658, 3497, 0, 7486, 5061, 5060, 4235, 0, 0, 0, 12113, 4236, - 4727, 0, 0, 7693, 10749, 0, 7488, 5773, 978, 0, 0, 41619, 10239, 0, 0, - 66209, 0, 0, 9748, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9341, - 119596, 2379, 11325, 0, 64668, 67854, 8125, 120545, 0, 119175, 917940, - 2369, 0, 0, 0, 119235, 74092, 73936, 7008, 0, 0, 0, 0, 2367, 0, 0, 264, - 2375, 8060, 6194, 119858, 1844, 119084, 0, 12858, 0, 0, 6961, 0, 0, 0, - 8800, 0, 42862, 4463, 65581, 6192, 194676, 42771, 0, 0, 725, 65042, + 74224, 4851, 0, 78156, 78499, 0, 7929, 0, 194682, 0, 78500, 66480, 0, + 42833, 74529, 12064, 0, 596, 0, 0, 13192, 8651, 0, 0, 120218, 12995, + 64865, 1373, 0, 0, 5816, 119067, 64810, 4231, 6825, 0, 4233, 4234, 4232, + 917836, 74415, 120210, 6384, 917840, 78108, 8851, 0, 0, 0, 41601, 8874, + 0, 7748, 0, 0, 0, 0, 41603, 9784, 0, 9188, 41600, 0, 120618, 0, 1457, + 3535, 0, 0, 0, 0, 65240, 11951, 0, 3404, 0, 0, 0, 1759, 0, 41076, 68383, + 120572, 119205, 66577, 0, 0, 65859, 0, 7404, 0, 0, 0, 0, 65908, 9834, + 3055, 9852, 0, 65288, 0, 11398, 0, 0, 119255, 0, 0, 603, 74398, 43548, 0, + 0, 917824, 3350, 120817, 64318, 917828, 127089, 3390, 74483, 43265, + 120599, 917830, 78573, 0, 1919, 3400, 0, 917813, 0, 917540, 66446, 64141, + 8562, 64139, 64138, 4043, 8712, 64134, 64133, 11297, 0, 0, 11966, 64128, + 0, 0, 0, 64132, 10867, 64130, 64129, 0, 43374, 9779, 2764, 66002, 10167, + 9471, 0, 66021, 0, 0, 5457, 5440, 8857, 0, 65282, 2843, 5355, 0, 0, 0, + 5194, 11657, 43984, 0, 0, 0, 0, 0, 127027, 10717, 64570, 5630, 74350, + 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, 0, 0, 0, 0, 78214, 2750, 0, 556, 64158, 64157, 0, + 12213, 194678, 2760, 0, 0, 0, 0, 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, 0, 0, 7007, 7590, 65443, 9036, 0, 64122, + 74422, 66609, 0, 64117, 64116, 6287, 64114, 2725, 64120, 64119, 43981, + 42128, 0, 1177, 65601, 12322, 64106, 0, 127306, 64102, 7859, 1945, 64099, + 0, 10453, 64104, 7188, 7997, 0, 7389, 0, 8705, 64097, 64096, 9571, 528, + 917989, 44017, 11429, 0, 0, 0, 917990, 73841, 0, 0, 9056, 0, 6188, + 120019, 6155, 64068, 1823, 64066, 64065, 64072, 64071, 63, 7233, 120698, + 0, 41904, 6639, 64064, 0, 0, 0, 1176, 118959, 0, 8162, 0, 0, 0, 120519, + 66376, 66242, 11415, 4333, 9855, 64112, 64642, 0, 5388, 0, 0, 0, 7714, + 66222, 0, 7768, 0, 4199, 64708, 0, 0, 0, 8708, 9560, 64077, 64076, 8996, + 4992, 4471, 42622, 64079, 64078, 0, 0, 0, 0, 64615, 0, 0, 12075, 0, 0, + 5174, 0, 0, 127557, 3123, 0, 12685, 0, 8408, 64704, 0, 0, 9223, 0, 41616, + 0, 73797, 0, 1116, 0, 43049, 0, 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, 0, 9927, 41335, 4118, 1797, 0, 41334, 0, 46, 43448, + 0, 298, 0, 0, 0, 42627, 0, 32, 6187, 119052, 11495, 11459, 3665, 0, + 42871, 0, 19923, 74335, 0, 0, 66239, 0, 64403, 4412, 7240, 0, 0, 0, + 65758, 12750, 4181, 8544, 0, 120199, 917897, 120198, 120203, 6181, 65014, + 0, 0, 0, 3639, 119588, 0, 0, 0, 10073, 120206, 0, 0, 68409, 42844, 7498, + 1098, 0, 0, 0, 0, 10207, 8789, 0, 0, 0, 0, 9234, 0, 6182, 0, 65058, 0, 0, + 0, 0, 5471, 9461, 5573, 118936, 5473, 44, 0, 66244, 118907, 0, 66238, + 12844, 0, 1622, 7767, 1900, 41339, 11458, 0, 0, 6581, 5576, 0, 64405, + 41337, 0, 41631, 8947, 68390, 0, 41694, 0, 0, 7908, 0, 10408, 6579, 0, + 64618, 0, 120147, 0, 6583, 7761, 127010, 120504, 194828, 0, 5058, 41010, + 9992, 0, 5057, 0, 0, 74538, 5054, 118951, 194971, 78606, 0, 1437, 41617, + 658, 3497, 0, 7486, 5061, 5060, 4235, 0, 0, 0, 12113, 4236, 4727, 0, 0, + 7693, 10749, 0, 7488, 5773, 978, 0, 0, 41619, 10239, 68611, 0, 66209, 0, + 0, 9748, 0, 127524, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9341, 119596, + 2379, 11325, 0, 64668, 67854, 8125, 120545, 6743, 119175, 917940, 2369, + 0, 0, 0, 119235, 74092, 73936, 7008, 43660, 0, 0, 0, 2367, 0, 0, 264, + 2375, 8060, 6194, 119858, 1844, 119084, 0, 12858, 0, 0, 6961, 0, 118839, + 0, 8800, 0, 42862, 4463, 65581, 6192, 194676, 42771, 0, 0, 725, 65042, 118797, 120800, 0, 12892, 0, 0, 0, 0, 0, 0, 0, 120707, 0, 0, 5074, 5073, - 0, 8983, 0, 917939, 0, 5072, 0, 6198, 11614, 0, 196, 0, 0, 0, 4929, + 0, 8983, 0, 74493, 0, 5072, 0, 6198, 11614, 0, 196, 0, 0, 0, 4929, 120342, 0, 0, 0, 0, 42847, 0, 0, 0, 4934, 0, 41323, 9758, 0, 120341, 0, 42584, 0, 4329, 41321, 4979, 3048, 7752, 41320, 0, 74418, 12819, 0, 5071, - 0, 3642, 0, 5070, 10042, 0, 3987, 5068, 0, 0, 120216, 0, 0, 10636, 73981, - 11806, 43167, 4531, 1245, 9105, 66463, 4921, 120219, 4926, 65544, 73884, - 194619, 0, 0, 64709, 0, 194620, 120790, 4922, 325, 992, 119568, 4925, 0, - 0, 9526, 4920, 0, 948, 0, 120208, 4930, 0, 0, 120275, 4933, 0, 0, 0, - 4928, 0, 0, 74770, 0, 0, 722, 0, 19908, 12637, 0, 119855, 8753, 1509, 0, - 5468, 9511, 0, 0, 1672, 6205, 10864, 74586, 0, 0, 0, 0, 0, 73863, 0, 0, - 41607, 120115, 1679, 120116, 194932, 120113, 0, 7005, 41609, 9580, 0, - 401, 0, 120109, 6968, 5761, 342, 8553, 0, 8143, 127115, 11983, 127113, - 624, 74508, 0, 119630, 5078, 74258, 12478, 0, 5076, 0, 194609, 0, 120097, - 685, 9025, 1524, 12618, 0, 5539, 0, 120095, 120102, 120094, 120552, 0, - 194611, 0, 0, 12520, 8058, 9732, 0, 5080, 64775, 5036, 5035, 120590, - 42604, 0, 0, 8074, 275, 13291, 1907, 0, 4432, 0, 5033, 0, 0, 4836, 3888, - 73792, 10729, 64546, 194600, 120681, 194937, 0, 67588, 119000, 0, 0, - 8858, 6409, 0, 120252, 0, 0, 0, 66321, 0, 12814, 0, 3432, 10218, 0, 6094, + 0, 3642, 0, 5070, 10042, 118835, 3987, 5068, 0, 8909, 78650, 78649, 0, + 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, 0, 120275, + 4933, 0, 0, 118985, 4928, 0, 0, 74770, 120194, 0, 722, 0, 19908, 12637, + 0, 119855, 8753, 1509, 0, 5468, 9511, 0, 0, 1672, 6205, 10864, 74586, 0, + 0, 0, 0, 0, 73863, 0, 0, 41607, 120115, 1679, 120116, 120180, 120113, 0, + 7005, 41609, 9580, 0, 401, 0, 120109, 6968, 5761, 342, 8553, 0, 8143, + 127115, 11983, 127113, 624, 74508, 0, 119630, 5078, 74258, 12478, 0, + 5076, 0, 194609, 0, 120097, 685, 9025, 1524, 12618, 0, 5539, 0, 120095, + 120102, 120094, 120552, 0, 194611, 78752, 0, 12520, 8058, 9732, 0, 5080, + 64775, 5036, 5035, 120590, 42604, 0, 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, 0, 0, 0, 66321, 0, 12814, 127248, 3432, 10218, 0, 6094, 7641, 42445, 0, 0, 42406, 1676, 74320, 194607, 0, 5030, 0, 0, 0, 0, 9622, - 0, 0, 0, 0, 0, 0, 0, 10544, 12919, 0, 0, 0, 0, 0, 0, 0, 947, 119835, - 194586, 194585, 10969, 119935, 7613, 119937, 119936, 4795, 119930, 7018, - 64914, 0, 120192, 120268, 0, 43567, 74056, 917910, 0, 119919, 7216, - 65232, 7217, 251, 7218, 7895, 4395, 43538, 119926, 119929, 119928, 7213, - 119922, 7214, 7215, 0, 74141, 8880, 7685, 0, 120173, 65540, 119618, 625, - 8187, 42861, 1113, 7236, 7915, 3630, 120176, 8179, 74264, 67886, 9316, - 10980, 2489, 65624, 8150, 1359, 0, 0, 0, 73756, 5042, 5041, 42769, 12084, - 0, 0, 0, 0, 0, 0, 0, 0, 12283, 1616, 3795, 0, 8795, 66245, 0, 0, 0, 1138, - 73905, 12677, 0, 0, 3239, 0, 0, 0, 8431, 0, 42164, 0, 11778, 12620, 0, - 73773, 119073, 5040, 0, 0, 0, 0, 0, 5039, 0, 0, 0, 5038, 0, 0, 13184, - 74293, 0, 64648, 0, 9359, 0, 0, 0, 65157, 6662, 0, 0, 3863, 73909, 4835, - 0, 0, 0, 4309, 0, 194569, 0, 194568, 1301, 0, 119595, 569, 0, 0, 711, - 119085, 0, 0, 73880, 11610, 11368, 0, 194571, 41331, 1006, 74240, 0, - 1550, 8201, 73737, 7627, 5499, 5031, 0, 0, 65784, 0, 65267, 3758, 0, - 65781, 64734, 0, 2440, 65780, 0, 8449, 0, 5008, 0, 8822, 0, 12121, 8255, - 5512, 73875, 119560, 0, 64313, 2641, 5906, 1119, 127068, 13038, 0, 2455, - 0, 118809, 0, 0, 0, 0, 8714, 0, 4211, 0, 0, 0, 0, 0, 5052, 66220, 5821, - 6186, 65778, 65775, 5051, 65773, 1429, 42647, 5050, 302, 388, 41115, 735, - 6637, 5907, 120670, 0, 12726, 74594, 9117, 0, 0, 5513, 6666, 5053, 74230, - 5510, 0, 0, 0, 2470, 0, 0, 1925, 0, 0, 0, 0, 5048, 5047, 0, 0, 0, 194863, - 0, 74497, 0, 8089, 6929, 639, 0, 68179, 0, 0, 0, 4599, 41402, 6674, - 120631, 43294, 1476, 648, 0, 65819, 3233, 0, 0, 10164, 0, 0, 3530, 9750, - 0, 0, 6656, 194858, 0, 5046, 8512, 65856, 74261, 8967, 0, 5045, 0, 1916, - 7986, 5044, 120556, 9006, 13128, 5043, 0, 7853, 74068, 74004, 9669, - 12341, 12703, 8402, 0, 119070, 0, 41750, 3586, 64508, 43148, 0, 0, - 119606, 0, 13296, 517, 0, 0, 0, 41528, 123, 65454, 0, 0, 74478, 10531, - 7784, 41526, 10829, 73991, 8057, 1126, 73895, 0, 194591, 0, 3925, 0, - 8069, 43142, 120439, 489, 0, 0, 120441, 120452, 43151, 0, 0, 66200, 0, 0, - 0, 0, 0, 0, 8711, 6183, 0, 0, 0, 120448, 7623, 118925, 194853, 9235, - 12760, 74176, 0, 66445, 43540, 120437, 3743, 11514, 11078, 0, 12136, 0, - 0, 120435, 0, 7726, 0, 19922, 267, 3393, 0, 1371, 194849, 0, 2458, 0, - 6201, 0, 41074, 4266, 10652, 41612, 41077, 3402, 9050, 3398, 0, 0, 0, - 3391, 41075, 2476, 0, 917550, 0, 10625, 0, 12767, 13017, 0, 64261, 64934, - 0, 13014, 13013, 0, 6673, 0, 0, 0, 12438, 0, 0, 0, 0, 0, 9053, 13015, - 74523, 0, 704, 66215, 6195, 0, 6660, 194941, 917760, 917793, 0, 12629, - 11435, 0, 0, 65538, 0, 0, 0, 74547, 0, 65448, 0, 12948, 195003, 195002, - 119238, 195004, 195007, 195006, 0, 0, 4287, 8276, 4902, 1131, 0, 0, - 66728, 1816, 0, 42533, 168, 0, 4898, 64298, 0, 0, 4901, 1821, 0, 578, + 0, 0, 6787, 0, 0, 0, 0, 10544, 12919, 0, 0, 0, 0, 0, 120789, 0, 947, + 119835, 194586, 194585, 10969, 119935, 7613, 119937, 119936, 4795, + 119930, 7018, 7376, 120181, 120192, 120268, 0, 43567, 74056, 917910, + 118963, 119919, 7216, 65232, 7217, 251, 7218, 7895, 4395, 43538, 119926, + 119929, 119928, 7213, 119922, 7214, 7215, 0, 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, 0, 0, + 73756, 5042, 5041, 42769, 12084, 0, 0, 0, 127319, 0, 917906, 0, 0, 12283, + 1616, 3795, 0, 8795, 66245, 0, 0, 0, 1138, 73905, 12677, 0, 0, 3239, 0, + 0, 0, 8431, 0, 42164, 0, 11778, 12620, 6826, 73773, 119073, 5040, 0, 0, + 0, 78420, 0, 5039, 0, 78418, 0, 5038, 0, 0, 13184, 74293, 0, 64648, 0, + 9359, 78416, 0, 0, 65157, 6662, 0, 0, 3863, 73909, 4835, 55266, 43432, 0, + 4309, 0, 194569, 0, 194568, 1301, 0, 42589, 569, 0, 73813, 711, 119085, + 0, 0, 73880, 11610, 11368, 0, 194571, 41331, 1006, 74240, 0, 1550, 8201, + 73737, 7627, 5499, 5031, 77908, 42738, 65784, 77907, 65267, 3758, 0, + 65781, 64734, 0, 2440, 65780, 77913, 8449, 0, 5008, 0, 8822, 0, 12121, + 8255, 5512, 73875, 119560, 0, 64313, 2641, 5906, 1119, 127068, 13038, 0, + 2455, 0, 118809, 0, 0, 0, 0, 8714, 0, 4211, 0, 0, 0, 0, 43713, 5052, + 66220, 5821, 6186, 65778, 65775, 5051, 65773, 1429, 42647, 5050, 302, + 388, 41115, 735, 6637, 5907, 120670, 0, 12726, 74594, 9117, 0, 195010, + 5513, 6666, 5053, 74230, 5510, 78451, 0, 78447, 2470, 78437, 0, 1925, 0, + 0, 74807, 0, 5048, 5047, 0, 0, 0, 194863, 0, 74497, 0, 8089, 6929, 639, + 0, 68179, 0, 0, 0, 4599, 41402, 6674, 43397, 43294, 1476, 648, 0, 65819, + 3233, 0, 41782, 6951, 0, 0, 3530, 9750, 0, 0, 6656, 194858, 0, 5046, + 8512, 65856, 74261, 8967, 0, 5045, 0, 1916, 7986, 5044, 120556, 9006, + 13128, 5043, 0, 7853, 74068, 74004, 9669, 12341, 12703, 8402, 0, 119070, + 0, 41750, 3586, 64508, 43148, 0, 0, 119606, 0, 13296, 517, 0, 0, 0, + 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, 0, 0, 66200, 0, 0, 0, 78423, 0, 0, 8711, 6183, 0, + 0, 0, 120448, 7623, 118925, 194853, 9235, 12760, 74176, 0, 66445, 43540, + 120437, 3743, 11514, 11078, 0, 12136, 0, 0, 120435, 0, 7726, 0, 19922, + 267, 3393, 42198, 1371, 194849, 69233, 2458, 0, 6201, 0, 41074, 4266, + 10652, 41612, 41077, 3402, 9050, 3398, 0, 0, 0, 3391, 41075, 2476, 0, + 917550, 0, 10625, 0, 12767, 13017, 78743, 64261, 64934, 127537, 13014, + 13013, 0, 6673, 0, 0, 0, 12438, 0, 0, 0, 0, 0, 9053, 13015, 74523, 0, + 704, 66215, 6195, 0, 6660, 78758, 917760, 917793, 42212, 12629, 11435, 0, + 55256, 65538, 0, 0, 0, 74547, 0, 65448, 78100, 12948, 119001, 195002, + 119238, 195004, 78099, 127085, 0, 0, 4287, 8276, 4902, 1131, 0, 78458, + 66728, 1816, 0, 42533, 168, 42845, 4898, 64298, 0, 0, 4901, 1821, 0, 578, 3653, 0, 791, 9162, 6977, 0, 119298, 74561, 0, 73731, 8354, 43590, 0, 0, 7557, 0, 119301, 8234, 7241, 0, 194994, 119167, 194996, 12811, 65925, - 3946, 195000, 10998, 0, 673, 194867, 64397, 0, 74599, 0, 0, 194977, - 194976, 2448, 194978, 10267, 8424, 2452, 120760, 194864, 8729, 0, 0, - 7845, 0, 0, 4408, 4122, 0, 11039, 8723, 194990, 194989, 119302, 731, - 119304, 119303, 2438, 64855, 119300, 119299, 1175, 0, 42135, 373, 119172, - 5396, 11457, 11521, 7723, 0, 0, 0, 41952, 0, 5273, 8248, 5269, 0, 5202, - 2404, 5267, 42823, 11291, 19915, 5277, 12963, 0, 6189, 4125, 1314, 12133, - 0, 118873, 1271, 0, 0, 66024, 41482, 3864, 74539, 0, 3879, 0, 12978, - 4166, 4574, 0, 7567, 7459, 0, 41390, 5384, 41882, 67647, 0, 0, 0, 0, - 41388, 0, 41392, 64288, 41387, 0, 8706, 5552, 0, 700, 0, 5553, 0, 7088, - 5356, 7499, 0, 66596, 0, 0, 0, 5554, 0, 12344, 10311, 0, 6665, 0, 0, - 7618, 8517, 11455, 0, 64632, 66017, 5555, 0, 0, 0, 0, 119204, 65033, - 9143, 6668, 195067, 195066, 195069, 656, 195071, 65037, 4577, 64624, 0, - 0, 0, 0, 4269, 73885, 917775, 42846, 917774, 950, 0, 0, 66580, 118895, - 66683, 10554, 917778, 119121, 0, 5098, 917770, 0, 119099, 5097, 4935, - 9848, 10381, 0, 0, 0, 3651, 0, 0, 0, 5102, 5101, 10269, 12983, 8138, 0, - 1932, 5100, 1439, 12093, 1247, 10034, 195064, 5099, 0, 1441, 42087, 3063, - 650, 0, 7838, 0, 195041, 195040, 119142, 9031, 195045, 195044, 9078, - 8545, 66356, 195048, 0, 9154, 9118, 0, 0, 2676, 7750, 0, 73812, 6190, - 8599, 195053, 0, 10795, 9857, 7014, 9858, 195033, 0, 12129, 0, 8481, 0, - 6202, 195035, 10920, 195037, 5203, 195039, 195038, 5108, 5107, 65818, - 66019, 9762, 0, 5541, 74772, 0, 12613, 5284, 6657, 207, 0, 4275, 74819, - 854, 68147, 74381, 0, 0, 5103, 0, 64348, 41368, 0, 488, 0, 0, 0, 10157, - 0, 43034, 11438, 0, 0, 0, 118839, 41771, 5106, 6669, 8504, 65154, 195025, - 41367, 5105, 195030, 195029, 6476, 5104, 0, 304, 3176, 0, 0, 932, 0, - 6567, 238, 74522, 195011, 195010, 19905, 120577, 195015, 120187, 41044, - 67640, 0, 64814, 9912, 65939, 10670, 74093, 13273, 0, 12552, 195019, - 8803, 309, 6622, 8151, 10858, 194596, 67636, 0, 12568, 0, 12553, 0, - 43275, 6950, 9712, 0, 0, 0, 65165, 0, 0, 66466, 0, 0, 0, 66725, 6191, - 11351, 10437, 11316, 67634, 0, 0, 41754, 67635, 9370, 2720, 194975, 0, - 8232, 118817, 0, 3222, 0, 0, 0, 66663, 0, 0, 10834, 0, 0, 65732, 0, 0, - 119579, 0, 195020, 0, 7781, 41383, 64568, 0, 120738, 12077, 0, 0, 0, - 42396, 0, 3475, 0, 2479, 0, 3632, 0, 10698, 0, 3648, 194960, 74844, - 67639, 3636, 67894, 3650, 8837, 65229, 1843, 42283, 0, 41562, 0, 74548, - 0, 3640, 0, 42321, 7284, 194974, 194973, 194950, 194949, 194952, 194951, - 0, 194953, 42080, 2529, 0, 0, 0, 42083, 194955, 194606, 194957, 67619, - 66367, 194958, 9634, 0, 9988, 0, 41068, 0, 0, 65264, 0, 0, 917923, 0, - 785, 8236, 194942, 9027, 68160, 67623, 64383, 0, 925, 0, 0, 41985, 41071, - 9586, 0, 41984, 9217, 0, 0, 0, 9186, 64580, 4016, 0, 0, 381, 0, 0, 42077, - 0, 194946, 5184, 42078, 194947, 10810, 0, 4585, 19943, 5860, 67633, 0, 0, - 812, 3615, 0, 5178, 194929, 120548, 120506, 5188, 74287, 67629, 3605, - 10692, 1166, 64429, 42639, 924, 0, 67631, 0, 0, 2442, 10703, 194940, - 67632, 0, 12771, 12736, 12753, 0, 73933, 67626, 42401, 0, 0, 0, 42288, - 12751, 0, 8542, 13145, 0, 2468, 66706, 41294, 3626, 3883, 64388, 42479, - 0, 41117, 0, 0, 0, 0, 67624, 0, 1290, 0, 65585, 2715, 806, 0, 41884, 0, - 7027, 64731, 0, 0, 0, 66325, 3465, 2405, 9240, 0, 12756, 65259, 0, 0, - 12752, 5833, 1432, 0, 41883, 73912, 9799, 0, 41886, 2480, 0, 43219, 0, - 6494, 5537, 0, 0, 0, 0, 1211, 0, 0, 0, 118832, 12318, 0, 0, 0, 10622, 0, - 0, 0, 6566, 0, 0, 73780, 0, 64864, 0, 194588, 0, 8284, 0, 0, 3589, 0, - 4035, 6492, 0, 4265, 6642, 3977, 74186, 41778, 836, 119216, 2488, 0, + 3946, 78078, 10998, 78080, 673, 194867, 64397, 0, 74599, 78449, 8890, + 194977, 194976, 2448, 78085, 10267, 8424, 2452, 78083, 194864, 8729, + 78456, 0, 7845, 0, 78692, 4408, 4122, 6772, 11039, 8723, 194990, 194989, + 119302, 731, 119304, 119303, 2438, 64855, 119300, 119299, 1175, 0, 42135, + 373, 119172, 5396, 11457, 11521, 7723, 0, 0, 0, 41952, 0, 5273, 8248, + 5269, 6337, 5202, 2404, 5267, 42823, 11291, 19915, 5277, 12963, 0, 6189, + 4125, 1314, 12133, 0, 118873, 1271, 0, 0, 66024, 41482, 3864, 74539, 0, + 3879, 0, 12978, 4166, 4574, 0, 7567, 7459, 0, 41390, 5384, 41882, 67647, + 0, 5759, 0, 0, 41388, 0, 41392, 64288, 41387, 0, 8706, 5552, 0, 700, 0, + 5553, 0, 7088, 5356, 7499, 78110, 66596, 0, 0, 10263, 5554, 0, 12344, + 10311, 78113, 6665, 0, 0, 7618, 8517, 11455, 78440, 64632, 66017, 5555, + 78088, 78093, 78091, 0, 42803, 65033, 9143, 6668, 195067, 195066, 195069, + 656, 195071, 65037, 4577, 64624, 0, 0, 0, 0, 4269, 73885, 917775, 42846, + 917774, 950, 0, 0, 66580, 118895, 66683, 10554, 917778, 119121, 0, 5098, + 917770, 0, 119099, 5097, 4935, 9848, 10381, 0, 917560, 0, 3651, 0, 0, + 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, 195044, 9078, 8545, 66356, 195048, + 0, 9154, 9118, 0, 0, 2676, 7750, 0, 73812, 6190, 8599, 195053, 0, 10795, + 9857, 7014, 9856, 195033, 0, 12129, 0, 8481, 0, 6202, 195035, 10920, + 195037, 5203, 195039, 195038, 5108, 5107, 65818, 66019, 9762, 0, 5541, + 74772, 0, 12613, 5284, 6657, 207, 0, 4275, 74819, 854, 68147, 74381, 0, + 0, 5103, 0, 64348, 41368, 43974, 488, 69811, 0, 0, 10157, 0, 43034, + 11438, 0, 0, 0, 68431, 41771, 5106, 6669, 8504, 65154, 69813, 41367, + 5105, 195030, 69809, 6476, 5104, 0, 304, 3176, 0, 0, 932, 0, 6567, 238, + 74522, 195011, 194595, 19905, 120577, 195015, 120187, 41044, 67640, + 194902, 42055, 9912, 65939, 10670, 74093, 13273, 0, 12552, 195019, 8803, + 309, 6622, 8151, 10858, 194596, 67636, 0, 12568, 0, 12553, 0, 43275, + 6950, 9712, 68680, 43970, 0, 65165, 0, 0, 66466, 0, 0, 0, 66725, 6191, + 11351, 10437, 11316, 67634, 0, 0, 41754, 67635, 9370, 2720, 194975, + 68462, 8232, 118817, 0, 3222, 0, 0, 0, 66663, 0, 0, 10834, 0, 0, 65732, + 0, 917547, 119579, 67679, 195020, 0, 7781, 41383, 64568, 0, 120738, + 12077, 0, 64586, 917620, 42396, 55255, 3475, 0, 2479, 0, 3632, 120728, + 10698, 8376, 3648, 194960, 74844, 67639, 3636, 67894, 3650, 8837, 65229, + 1843, 42283, 43250, 41562, 9100, 74548, 0, 3640, 0, 42321, 7284, 194974, + 194973, 194950, 194949, 194952, 194951, 0, 194953, 42080, 2529, 0, 0, 0, + 42083, 120678, 68398, 194957, 67619, 66367, 194958, 9634, 0, 9988, 0, + 41068, 0, 0, 65264, 0, 0, 917923, 0, 785, 8236, 194942, 9027, 68160, + 67623, 64383, 0, 925, 0, 0, 41985, 41071, 9586, 0, 41984, 9217, 0, 0, 0, + 9186, 2067, 4016, 0, 0, 381, 0, 0, 42077, 0, 194946, 5184, 42078, 194947, + 10810, 0, 4585, 19943, 5860, 67633, 0, 0, 812, 3615, 0, 5178, 44000, + 120548, 78807, 5188, 74287, 67629, 3605, 10692, 1166, 64429, 42639, 924, + 0, 67631, 0, 0, 2442, 10703, 78789, 67632, 917924, 12771, 12736, 12753, + 0, 73933, 67626, 42401, 0, 0, 127373, 42288, 12751, 0, 8542, 13145, 0, + 2468, 66706, 41294, 3626, 3883, 64388, 42479, 0, 41117, 0, 0, 0, 0, + 67624, 0, 1290, 0, 65585, 2715, 806, 65208, 41884, 917883, 7027, 64731, + 0, 0, 0, 66325, 3465, 2405, 9240, 0, 12756, 65259, 0, 0, 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, 0, 10622, 0, 0, + 0, 6566, 78659, 0, 73780, 0, 64864, 0, 78660, 0, 8284, 0, 0, 3589, 0, + 4035, 6492, 118981, 4265, 6642, 3977, 74186, 41778, 836, 119216, 2488, 0, 4582, 0, 0, 41777, 12926, 0, 7528, 10550, 0, 0, 0, 0, 0, 1374, 64878, - 119014, 0, 42389, 41374, 0, 0, 0, 41377, 0, 0, 400, 12597, 0, 0, 0, 6661, - 0, 64827, 0, 73817, 390, 0, 74755, 0, 3473, 7718, 0, 0, 0, 0, 0, 0, 0, - 11969, 0, 0, 8004, 1887, 0, 0, 8080, 7006, 0, 0, 0, 0, 1544, 0, 0, 64677, - 120716, 0, 6146, 0, 771, 0, 0, 12812, 13168, 42272, 12200, 917927, 7904, - 0, 953, 12917, 0, 12300, 0, 11491, 9724, 10341, 0, 9524, 7490, 11389, - 7489, 3379, 0, 7487, 0, 471, 7484, 7482, 7481, 7480, 7479, 7478, 7477, - 6501, 7475, 6918, 7473, 7472, 2474, 7470, 7468, 10232, 10615, 10213, 0, - 120222, 10049, 0, 3544, 0, 6017, 65311, 0, 0, 13306, 10533, 7870, 73949, - 7625, 0, 120544, 0, 0, 0, 0, 0, 0, 19961, 2472, 0, 120699, 0, 6019, 4256, - 120776, 74380, 0, 73847, 73844, 12845, 0, 0, 65138, 119355, 67862, 0, 0, - 120000, 120008, 8066, 7678, 74865, 0, 0, 0, 0, 7186, 0, 120555, 0, 445, - 120566, 0, 0, 0, 8330, 0, 0, 42797, 0, 120215, 0, 3902, 0, 1770, 0, 0, - 1560, 120209, 0, 4584, 73843, 0, 11712, 10866, 0, 1118, 0, 0, 0, 1081, - 7436, 0, 7252, 0, 5996, 0, 4903, 0, 41386, 5162, 119189, 1330, 0, 64530, - 0, 12047, 41384, 0, 0, 1848, 4334, 0, 41975, 64777, 10674, 12308, 0, 0, - 0, 0, 12715, 0, 0, 0, 2018, 66672, 41979, 66685, 119157, 0, 0, 0, 126984, - 0, 9334, 0, 0, 0, 7975, 0, 0, 0, 66621, 4884, 66597, 0, 0, 0, 6313, - 65513, 0, 0, 0, 0, 2345, 0, 463, 0, 0, 119607, 3117, 5460, 0, 0, 0, 0, - 42279, 194577, 0, 0, 0, 0, 0, 13248, 0, 0, 0, 0, 0, 0, 5663, 0, 0, 0, 0, - 2482, 1471, 0, 0, 42247, 12378, 73925, 0, 0, 12374, 0, 0, 0, 0, 2460, 0, - 11944, 12376, 0, 64679, 0, 12380, 10557, 64473, 5870, 0, 2024, 0, 0, 0, - 539, 0, 0, 0, 3853, 65180, 0, 120796, 120245, 0, 0, 8659, 0, 12474, 0, - 9503, 194969, 2478, 0, 4162, 0, 4260, 12953, 0, 120089, 12470, 0, 74189, - 2742, 12476, 11798, 10946, 0, 5000, 0, 0, 0, 0, 8213, 74017, 7771, 6161, - 0, 0, 0, 0, 0, 0, 120582, 0, 0, 10301, 10333, 10397, 0, 0, 73791, 0, 0, - 0, 0, 0, 4014, 12842, 73952, 12015, 0, 8275, 3893, 0, 0, 0, 7221, 42147, - 0, 74550, 74465, 64747, 118841, 0, 12516, 0, 0, 119017, 74537, 10892, - 8231, 0, 6473, 41968, 0, 41973, 3591, 41969, 0, 2453, 0, 0, 0, 0, 0, - 10349, 10413, 43591, 41962, 3202, 74353, 0, 8316, 0, 0, 0, 687, 0, 0, 0, - 1840, 0, 0, 119809, 4883, 285, 4723, 0, 0, 4459, 74577, 0, 41720, 11089, - 240, 19906, 0, 119248, 0, 9743, 120232, 13134, 0, 0, 0, 0, 0, 42634, 0, - 0, 3081, 11463, 120230, 0, 0, 10445, 0, 0, 66717, 2614, 9125, 119023, - 1729, 0, 120236, 65221, 63883, 43334, 64852, 0, 120235, 66201, 0, 66578, - 5001, 41879, 0, 4121, 5003, 884, 66700, 63879, 4943, 5150, 73889, 74182, - 0, 643, 3086, 0, 42448, 42299, 58, 0, 0, 120083, 63873, 8491, 0, 0, 0, - 4530, 42409, 0, 0, 2721, 120074, 119096, 19929, 0, 194574, 0, 4242, 4264, - 0, 0, 66179, 42412, 65941, 13114, 64522, 10740, 3094, 0, 9754, 119102, - 4437, 73948, 0, 0, 65179, 42174, 194925, 42430, 0, 0, 42355, 66026, 4306, - 41380, 0, 0, 0, 66667, 0, 0, 0, 120578, 42566, 0, 0, 5088, 6948, 0, 8524, - 0, 0, 12385, 0, 0, 0, 1386, 65034, 11480, 6116, 65039, 65038, 12392, - 65036, 8064, 0, 12101, 5822, 119004, 0, 710, 0, 11663, 1666, 42091, - 119657, 12383, 0, 42092, 0, 4289, 0, 63896, 12061, 42096, 0, 3362, 12377, - 0, 0, 0, 7461, 73901, 1244, 331, 73786, 12683, 10662, 0, 8112, 0, 65852, - 0, 12379, 0, 120818, 41964, 0, 63843, 12381, 41965, 0, 65866, 4327, 0, - 63840, 0, 41220, 13032, 0, 584, 12933, 43177, 12373, 0, 13000, 1351, 0, - 8698, 12665, 0, 1930, 0, 0, 12427, 0, 0, 13031, 0, 0, 0, 3657, 0, 65202, - 6000, 0, 12426, 0, 0, 41740, 12428, 41283, 41916, 119210, 0, 0, 12429, - 9695, 0, 7562, 0, 5170, 0, 41755, 676, 0, 0, 66664, 74427, 0, 3536, 0, - 9752, 0, 6162, 0, 0, 10113, 41829, 65886, 5159, 12422, 41832, 439, 43077, - 0, 120532, 74549, 11796, 40970, 41830, 0, 917799, 8308, 917797, 917796, - 0, 67864, 917801, 917800, 12336, 4135, 0, 341, 2727, 4129, 3539, 0, - 63861, 0, 7913, 0, 63859, 4131, 63868, 0, 63867, 4133, 11371, 210, 4600, - 0, 74560, 4137, 8082, 0, 119062, 0, 0, 4591, 0, 0, 0, 9680, 0, 120623, - 561, 12159, 195, 0, 41501, 0, 42031, 5719, 7172, 0, 8368, 0, 41499, 0, 0, - 42242, 41498, 917794, 42025, 0, 65805, 42463, 0, 2924, 0, 120510, 0, 0, - 119213, 73941, 0, 42330, 917784, 3969, 0, 0, 7169, 1992, 9652, 73977, - 7246, 42086, 917790, 917789, 0, 0, 0, 0, 0, 327, 0, 9042, 917777, 917776, - 65148, 12433, 917781, 917780, 917779, 12431, 8668, 12434, 0, 917782, - 5999, 0, 7712, 12432, 0, 0, 1726, 1015, 0, 8212, 0, 0, 42423, 119066, 0, - 0, 66709, 0, 8811, 927, 0, 0, 12436, 0, 42021, 0, 0, 1299, 12240, 42350, - 65143, 0, 195016, 0, 0, 11348, 0, 0, 0, 0, 0, 19914, 12179, 0, 9648, 0, - 63836, 63832, 917773, 10967, 63816, 2594, 3444, 63817, 64651, 0, 41503, - 0, 11265, 0, 0, 0, 0, 5664, 3972, 0, 0, 0, 917766, 12416, 917764, 119608, - 10816, 917769, 917768, 12418, 74111, 3882, 8532, 917771, 1573, 0, 119847, - 4596, 66339, 12417, 66001, 65343, 194782, 12414, 8287, 0, 0, 68108, 1143, - 119169, 0, 12415, 6626, 42763, 0, 118884, 9021, 120783, 0, 11724, 0, 0, - 127104, 194794, 0, 0, 8027, 10997, 9171, 12741, 11400, 74197, 194799, 0, - 0, 0, 0, 0, 0, 120190, 194773, 0, 194772, 42368, 0, 7715, 3881, 41487, - 12118, 42514, 0, 0, 0, 3009, 41476, 41489, 0, 3007, 1448, 3018, 0, 3889, + 119014, 0, 42389, 41374, 0, 0, 78492, 41377, 0, 0, 400, 12597, 120586, 0, + 0, 6661, 0, 64827, 0, 73817, 390, 0, 74755, 0, 3473, 7718, 0, 0, 0, + 55285, 0, 0, 0, 11969, 0, 0, 6365, 1887, 6763, 0, 8080, 7006, 0, 0, 6757, + 0, 1544, 0, 6766, 64677, 120716, 0, 6146, 0, 771, 0, 0, 12812, 13168, + 42272, 12200, 917927, 7904, 0, 953, 12917, 0, 12300, 0, 11491, 9724, + 10341, 0, 9524, 7490, 11389, 7489, 3379, 0, 7487, 0, 471, 7484, 7482, + 6753, 7480, 7479, 7478, 7477, 6501, 7475, 6918, 7473, 7472, 2474, 7470, + 7468, 10232, 10615, 10213, 0, 120222, 10049, 78884, 3544, 0, 6017, 65311, + 0, 120216, 13306, 10533, 7870, 73949, 7625, 0, 120544, 0, 0, 0, 0, 0, 0, + 19961, 2472, 42665, 120699, 0, 6019, 4256, 120776, 74380, 0, 42675, + 42658, 12845, 0, 0, 65138, 119355, 67862, 0, 65671, 120000, 120008, 8066, + 7678, 74865, 0, 0, 0, 0, 7186, 0, 120555, 0, 445, 120566, 0, 0, 0, 8330, + 0, 0, 42797, 0, 120215, 0, 3902, 0, 1770, 0, 0, 1560, 120209, 194972, + 4584, 73843, 0, 11712, 10866, 118928, 1118, 0, 0, 0, 1081, 7436, 68420, + 7252, 0, 5996, 0, 4903, 0, 41386, 5162, 119189, 1330, 0, 42848, 0, 12047, + 41384, 0, 0, 1848, 4334, 6324, 41975, 64777, 10674, 12308, 12186, 0, 0, + 0, 12715, 0, 0, 0, 2018, 66672, 41979, 66685, 119157, 0, 0, 0, 126984, 0, + 9334, 0, 127310, 0, 7975, 0, 77957, 0, 66621, 4884, 66597, 0, 0, 0, 6313, + 65513, 0, 0, 0, 0, 2345, 43697, 463, 0, 0, 119607, 3117, 5460, 0, 0, 0, + 0, 42279, 194577, 0, 78415, 0, 0, 0, 13248, 0, 0, 0, 0, 0, 0, 5663, 0, 0, + 0, 0, 2482, 1471, 0, 0, 42247, 12378, 73925, 127233, 0, 12374, 0, 0, 0, + 0, 2460, 0, 11944, 12376, 0, 64679, 0, 12380, 10557, 64473, 5870, 0, + 2024, 0, 0, 0, 539, 0, 0, 0, 3853, 65180, 0, 120796, 120245, 0, 0, 8659, + 0, 12474, 0, 9503, 194969, 2478, 0, 4162, 0, 4260, 12953, 0, 120089, + 12470, 0, 74189, 2742, 12476, 11798, 10946, 0, 5000, 0, 0, 0, 0, 8213, + 74017, 7771, 6161, 0, 6709, 0, 78885, 0, 194892, 120582, 78547, 0, 10301, + 10333, 10397, 0, 0, 73791, 0, 0, 0, 0, 0, 4014, 12842, 73952, 12015, 0, + 8275, 3893, 0, 0, 127555, 7221, 42147, 0, 74550, 74465, 64747, 118841, 0, + 12516, 4444, 0, 119017, 74537, 10892, 8231, 0, 6473, 41968, 78388, 41973, + 3591, 41969, 0, 2453, 0, 0, 64705, 0, 0, 10349, 10413, 43591, 41962, + 3202, 74353, 0, 8316, 0, 0, 0, 687, 0, 0, 0, 1840, 0, 68671, 119809, + 4883, 285, 4723, 77927, 0, 4459, 74577, 0, 41720, 11089, 240, 19906, 0, + 42323, 0, 9743, 120232, 13134, 0, 0, 0, 0, 0, 42634, 0, 43437, 3081, + 11463, 120230, 0, 0, 10445, 0, 0, 66717, 2614, 9125, 119023, 1729, 0, + 120236, 65221, 63883, 43334, 64852, 0, 120235, 66201, 0, 66578, 5001, + 41879, 74427, 4121, 5003, 884, 66700, 63879, 4943, 5150, 73889, 74182, 0, + 643, 3086, 0, 42448, 42299, 58, 0, 0, 120083, 63873, 8491, 0, 0, 0, 4530, + 42409, 0, 194575, 2721, 120074, 119096, 19929, 0, 194574, 0, 4242, 4264, + 120077, 0, 66179, 42412, 65941, 13114, 64522, 10740, 3094, 0, 9754, + 119102, 4437, 73948, 0, 0, 55280, 42174, 194925, 42430, 0, 0, 42355, + 66026, 4306, 41380, 68432, 0, 0, 66667, 127309, 0, 0, 42200, 42566, 0, 0, + 5088, 6948, 0, 8524, 0, 0, 12385, 0, 0, 0, 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, 0, 0, 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, 0, 13000, 1351, 0, 8698, 12665, 0, + 1930, 0, 78229, 12427, 66514, 0, 13031, 0, 63901, 0, 3657, 0, 65202, + 6000, 119206, 12426, 0, 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, 0, 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, 0, 0, 0, 9680, 0, 120623, 561, 12159, 195, 78508, + 41501, 0, 42031, 5719, 7172, 42687, 8368, 0, 41499, 0, 0, 42242, 41498, + 917794, 42025, 78567, 65805, 42463, 0, 2924, 0, 120510, 0, 0, 119213, + 73941, 0, 42330, 917784, 3969, 0, 0, 7169, 1992, 9652, 73977, 7246, + 42086, 917790, 917789, 0, 0, 0, 0, 0, 327, 0, 9042, 917777, 917776, + 65148, 12433, 917781, 127276, 917779, 12431, 8668, 12434, 0, 917782, + 5999, 0, 7712, 12432, 0, 43653, 1726, 1015, 0, 8212, 0, 0, 42423, 119066, + 0, 0, 66709, 0, 8811, 927, 0, 0, 12436, 0, 42021, 0, 0, 1299, 12240, + 42350, 65143, 0, 195016, 0, 78197, 11348, 0, 78037, 0, 0, 0, 19914, + 12179, 0, 9648, 194923, 63836, 63832, 917773, 10967, 63816, 2594, 3444, + 63817, 64651, 0, 41503, 0, 11265, 0, 0, 194922, 0, 5664, 3972, 0, 0, 0, + 917766, 12416, 917764, 119608, 10816, 917769, 917768, 12418, 74111, 3882, + 8532, 917771, 1573, 0, 119847, 4596, 66339, 12417, 66001, 65343, 194782, + 12414, 8287, 68219, 195017, 68108, 1143, 119169, 0, 12415, 6626, 42763, + 0, 118884, 9021, 120783, 0, 11724, 0, 0, 127104, 194794, 0, 0, 8027, + 10997, 9171, 12741, 11400, 74197, 194799, 0, 194798, 0, 0, 0, 127523, + 120190, 194773, 67608, 194772, 42368, 0, 7715, 3881, 41487, 12118, 42514, + 68651, 0, 0, 3009, 41476, 41489, 69825, 3007, 1448, 3018, 194809, 3889, 8521, 5083, 5082, 119859, 120184, 8519, 0, 3014, 5081, 65853, 0, 0, - 120183, 0, 5079, 64802, 65095, 4597, 65532, 0, 0, 12371, 0, 8407, 0, - 10805, 8518, 10779, 120188, 0, 0, 12367, 42170, 0, 0, 629, 1924, 0, - 12037, 74366, 5987, 8462, 8005, 12365, 66689, 0, 120815, 12369, 10649, 0, - 5077, 127108, 10880, 63927, 5075, 0, 0, 65075, 0, 11007, 0, 66659, 0, 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, 0, - 5276, 43021, 0, 0, 0, 0, 66461, 5177, 41324, 12055, 8722, 0, 41327, 0, - 66695, 4114, 409, 4383, 8900, 8948, 41325, 0, 721, 10182, 9108, 0, 0, - 119185, 0, 0, 0, 5998, 0, 42353, 74825, 0, 12587, 0, 0, 0, 0, 0, 41576, - 74121, 0, 119207, 0, 8578, 5995, 7573, 41575, 74789, 74752, 63944, 63949, - 0, 2670, 4167, 0, 11723, 0, 74120, 0, 65076, 938, 73857, 73854, 11737, - 9721, 0, 0, 0, 11742, 0, 0, 11493, 12334, 0, 4153, 12302, 10793, 5250, - 12407, 11978, 4404, 9189, 12401, 42007, 5775, 42005, 65806, 0, 0, 42002, - 12404, 0, 0, 4940, 12410, 7683, 1167, 0, 4983, 0, 861, 0, 0, 0, 0, 65577, - 0, 0, 0, 11956, 0, 0, 0, 9616, 6631, 0, 12816, 74583, 0, 12710, 0, 12721, - 4101, 66185, 0, 5992, 7616, 0, 0, 12577, 0, 0, 853, 0, 0, 0, 0, 5016, - 43535, 0, 42835, 9491, 917913, 0, 917914, 0, 12712, 917919, 0, 65060, + 120183, 78219, 5079, 64802, 42210, 4597, 65532, 78444, 120185, 12371, 0, + 8407, 0, 10805, 8518, 10779, 120188, 0, 0, 12367, 42170, 0, 0, 629, 1924, + 0, 12037, 74366, 5987, 8462, 8005, 12365, 63933, 127370, 120815, 12369, + 10649, 0, 5077, 127108, 10880, 63927, 5075, 0, 0, 65075, 0, 11007, 0, + 66659, 0, 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, 0, 0, 55236, 0, 66461, 5177, 41324, 12055, + 8722, 0, 41327, 0, 66695, 4114, 409, 4383, 8900, 8948, 41325, 0, 721, + 10182, 9108, 0, 0, 119185, 42229, 194912, 0, 5998, 0, 42353, 74825, 0, + 12587, 0, 78571, 0, 0, 0, 41576, 42215, 78570, 119207, 0, 8578, 5995, + 7573, 41575, 74789, 74752, 63944, 63949, 64767, 2670, 4167, 0, 11723, 0, + 74120, 0, 65076, 938, 43414, 73854, 11737, 9721, 0, 0, 0, 11742, 0, 0, + 11493, 12334, 0, 4153, 12302, 10793, 5250, 12407, 11978, 4404, 9189, + 12401, 42007, 5775, 6759, 65806, 43997, 0, 42002, 12404, 0, 0, 4940, + 12410, 7683, 1167, 73729, 4983, 0, 861, 0, 0, 0, 0, 65577, 43370, 0, 0, + 11956, 0, 0, 0, 9616, 6631, 0, 12816, 74583, 42218, 12710, 68674, 12721, + 4101, 66185, 0, 5992, 7616, 0, 0, 12577, 0, 0, 853, 42693, 0, 0, 0, 5016, + 43535, 63893, 42835, 9491, 917913, 0, 917914, 0, 12712, 917919, 0, 65060, 120797, 9900, 0, 0, 194919, 0, 0, 0, 64778, 12585, 10565, 0, 12177, 0, 0, - 0, 0, 0, 4900, 0, 0, 0, 8984, 4119, 0, 8971, 0, 43113, 9702, 0, 11025, - 9245, 13048, 4927, 4138, 0, 194921, 0, 12397, 0, 0, 13054, 12394, 0, 0, - 0, 13053, 0, 3948, 10781, 1546, 0, 5010, 1680, 10507, 0, 0, 0, 0, 0, 0, - 7267, 0, 74833, 0, 5993, 2819, 0, 12706, 0, 1893, 7266, 63915, 7264, - 7265, 0, 1363, 0, 63997, 63910, 63996, 3077, 0, 0, 1512, 0, 12589, 41479, - 0, 0, 43339, 0, 9836, 120727, 0, 41481, 43335, 7832, 42343, 3090, 43337, - 817, 1664, 1850, 0, 3079, 11340, 42408, 42447, 0, 120020, 42307, 12386, - 42304, 0, 0, 12389, 0, 0, 41996, 11526, 63985, 5864, 1147, 66688, 42887, - 1987, 0, 5480, 7858, 11653, 4116, 12391, 66193, 0, 4939, 12384, 0, 0, - 41686, 63905, 119601, 0, 0, 0, 0, 0, 0, 8247, 507, 91, 2042, 120775, 0, - 0, 66028, 10036, 41844, 119830, 774, 119831, 0, 119815, 5994, 12539, 0, - 119817, 120597, 119833, 0, 0, 0, 0, 7719, 6026, 2486, 0, 0, 162, 0, - 65219, 41073, 9687, 41681, 6304, 119812, 66196, 0, 5262, 0, 66658, 12681, - 42379, 0, 7534, 12219, 0, 0, 42810, 10492, 0, 0, 0, 43119, 0, 120753, - 12403, 2500, 195013, 0, 4899, 0, 0, 0, 74113, 2343, 4103, 19946, 74112, - 0, 13112, 0, 0, 12859, 0, 0, 66369, 5861, 0, 11999, 12400, 0, 0, 12645, - 5146, 11320, 0, 67612, 65040, 0, 64184, 12974, 64183, 67613, 120645, - 5147, 0, 0, 74524, 0, 1928, 0, 0, 5991, 3445, 67609, 4976, 64176, 0, - 67610, 8241, 0, 0, 4206, 0, 0, 0, 0, 0, 10138, 0, 0, 8897, 0, 0, 8357, - 4124, 0, 65836, 120641, 0, 0, 0, 0, 1123, 963, 41553, 10120, 12405, 0, 0, - 398, 13278, 9723, 41551, 120311, 7945, 0, 4402, 10896, 12402, 0, 42392, - 1305, 12408, 0, 0, 0, 0, 41464, 12411, 12969, 120824, 41465, 0, 195017, - 1575, 0, 63955, 165, 3024, 41467, 119163, 0, 9093, 0, 9147, 0, 0, 0, - 9148, 9692, 4096, 53, 73776, 12368, 195018, 0, 9594, 0, 0, 43527, 0, 727, - 0, 0, 5805, 0, 0, 0, 42176, 12370, 11655, 119095, 10591, 12364, 0, 12372, - 120642, 0, 0, 0, 0, 12366, 10963, 6066, 1329, 0, 3052, 9220, 0, 64478, 0, - 10803, 4132, 0, 0, 0, 0, 0, 74837, 0, 1499, 0, 8055, 0, 63965, 0, 63962, - 74042, 8924, 43123, 5988, 3660, 63969, 11781, 63968, 8788, 1357, 64851, - 65743, 0, 8774, 0, 127086, 67618, 120172, 0, 1933, 0, 9564, 0, 0, 73866, - 0, 0, 2487, 67614, 3121, 1804, 3311, 67615, 0, 0, 12220, 67616, 120598, - 0, 0, 0, 6675, 0, 0, 67592, 120685, 0, 64771, 1198, 9132, 0, 64619, 510, - 64663, 0, 0, 4561, 7711, 1398, 0, 0, 74034, 41569, 0, 11406, 8167, 12127, - 0, 840, 0, 0, 0, 6967, 0, 0, 9796, 0, 333, 0, 0, 8144, 0, 0, 0, 12406, 0, - 0, 0, 6678, 7769, 0, 12621, 0, 0, 10227, 4764, 43101, 0, 0, 40986, 4127, - 66487, 0, 0, 12754, 195022, 0, 0, 0, 67594, 65609, 12944, 4050, 67595, 0, - 43102, 10581, 12985, 4533, 0, 0, 6490, 0, 12038, 0, 0, 120704, 65461, - 9798, 0, 0, 1948, 119007, 0, 952, 0, 0, 0, 120802, 6449, 9494, 0, 0, - 43098, 4843, 8142, 64160, 4098, 64170, 0, 0, 3436, 0, 0, 12817, 67597, - 6676, 3930, 66708, 0, 0, 67598, 0, 0, 0, 65591, 41581, 65916, 1453, 0, 0, - 0, 8500, 0, 120142, 73743, 120400, 4317, 120140, 0, 64676, 0, 0, 67606, - 119083, 0, 0, 13102, 0, 66003, 6672, 0, 0, 0, 0, 63841, 9613, 9001, 4526, - 11274, 67601, 64520, 64210, 6664, 0, 42056, 10228, 64957, 11281, 0, - 64213, 1469, 66640, 65381, 0, 4988, 42372, 0, 9598, 904, 352, 0, 1451, - 8061, 8453, 4134, 0, 74847, 67600, 0, 0, 10520, 8575, 0, 1201, 0, 12846, - 0, 0, 11919, 64962, 0, 74864, 0, 8511, 9460, 823, 11587, 12305, 0, 64695, - 0, 12387, 1253, 13183, 65766, 500, 42783, 65765, 64208, 64369, 65760, - 65761, 119585, 11606, 64784, 11702, 66498, 9821, 0, 0, 5152, 11048, 7533, - 120121, 64410, 0, 0, 4323, 120062, 0, 0, 0, 42587, 65339, 41394, 0, 4763, - 4112, 118935, 0, 5260, 43143, 0, 326, 120131, 0, 0, 10771, 2876, 194915, - 194835, 194924, 41398, 127079, 9802, 127077, 127076, 453, 41396, 120524, - 0, 12140, 9572, 0, 7003, 194883, 42334, 7704, 0, 0, 43144, 4123, 0, - 43146, 0, 0, 0, 65759, 10765, 64061, 4465, 9808, 64056, 65582, 4126, 0, - 9521, 9589, 64755, 0, 64020, 0, 10464, 0, 0, 194869, 64514, 11528, 64024, - 0, 679, 64013, 0, 5850, 758, 7536, 0, 0, 41441, 10693, 64006, 0, 64005, - 10541, 119019, 0, 64660, 0, 119050, 0, 0, 1139, 43298, 64027, 64029, - 8970, 0, 64000, 0, 10774, 0, 42522, 12421, 194876, 0, 1852, 3057, 0, - 73744, 64034, 64041, 0, 0, 0, 0, 0, 7645, 12854, 74338, 3496, 0, 0, 0, - 9102, 627, 0, 6158, 8327, 74553, 66632, 12419, 0, 11570, 0, 19960, 11696, - 0, 1018, 0, 194909, 0, 1682, 194896, 0, 42756, 12951, 194906, 0, 0, - 73814, 11412, 12563, 10728, 194830, 0, 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, 0, - 64483, 65693, 0, 0, 0, 0, 42240, 0, 0, 42864, 0, 64667, 41868, 1184, 0, - 815, 11484, 0, 67840, 0, 0, 0, 0, 0, 64683, 0, 0, 0, 0, 0, 9879, 0, 0, - 4158, 0, 68166, 0, 0, 0, 0, 0, 332, 118808, 0, 5142, 2407, 0, 0, 0, 0, - 74373, 0, 0, 0, 63870, 43163, 0, 0, 119081, 42867, 1834, 0, 0, 0, 10940, - 65249, 119040, 8662, 0, 0, 2652, 120527, 11539, 10784, 195093, 0, 0, 0, - 0, 0, 118858, 917505, 1828, 74474, 120327, 0, 8531, 12499, 6280, 12324, - 118854, 65238, 0, 4832, 65573, 0, 6279, 12508, 12904, 12502, 9161, 0, - 1620, 0, 3601, 0, 0, 0, 609, 11555, 0, 12496, 0, 74181, 4343, 12505, 0, - 0, 0, 11377, 239, 0, 637, 0, 0, 43029, 0, 0, 0, 43565, 127082, 0, 12696, - 0, 0, 0, 12929, 0, 712, 0, 4197, 0, 42818, 0, 0, 120490, 0, 0, 1506, - 43562, 0, 0, 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, 0, 42571, 0, 0, 0, 0, 0, 0, 0, 3178, 0, 0, 0, 0, 9080, - 127000, 0, 0, 0, 0, 11082, 0, 5699, 195100, 0, 9488, 65166, 119112, 0, 0, - 0, 0, 0, 0, 5265, 0, 0, 11487, 67858, 12464, 0, 43045, 0, 0, 43345, 0, - 10770, 118994, 43344, 465, 9829, 0, 74348, 0, 43346, 8116, 795, 0, 0, - 12462, 10930, 10831, 0, 118952, 64362, 0, 0, 120811, 0, 12468, 8607, - 1008, 0, 10092, 0, 917842, 67855, 0, 73771, 1766, 11282, 11996, 1820, - 4547, 0, 0, 0, 0, 13223, 0, 64595, 0, 0, 0, 4345, 12616, 0, 0, 0, 74467, - 0, 0, 0, 5382, 0, 0, 0, 119060, 64953, 5406, 19920, 0, 66510, 3590, 0, - 1130, 0, 0, 42016, 11823, 43023, 0, 118896, 7742, 0, 13280, 0, 9326, - 73826, 5310, 74812, 0, 119962, 8959, 43589, 74334, 66723, 0, 8568, 0, - 120496, 73816, 120803, 0, 0, 0, 11621, 12460, 0, 0, 0, 0, 74519, 0, 0, 0, + 0, 77824, 0, 4900, 0, 12878, 0, 8984, 4119, 74768, 8971, 78593, 43113, + 9702, 78594, 11025, 9245, 13048, 4927, 4138, 74185, 194921, 0, 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, 0, 5993, + 2819, 0, 12706, 77840, 1893, 7266, 63915, 7264, 7265, 0, 1363, 0, 63997, + 63910, 63996, 3077, 0, 0, 1512, 0, 12589, 41479, 0, 0, 43339, 0, 9836, + 120727, 0, 41481, 43335, 7832, 42343, 3090, 43337, 817, 1664, 1850, 0, + 3079, 11340, 42408, 42447, 194704, 120020, 42307, 12386, 42304, 0, 0, + 12389, 0, 194694, 41996, 11526, 63985, 5864, 1147, 63992, 42887, 1987, 0, + 5480, 7858, 11653, 4116, 12391, 66193, 0, 4939, 12384, 0, 0, 41686, + 63905, 119601, 194688, 0, 0, 12649, 0, 0, 8247, 507, 91, 2042, 120775, + 43643, 194689, 66028, 10036, 41844, 119813, 774, 119831, 0, 119815, 5994, + 12539, 0, 78375, 120597, 119833, 0, 119600, 0, 0, 7719, 6026, 2486, 0, + 119808, 162, 0, 65219, 41073, 9687, 41681, 6304, 119812, 66196, 0, 5262, + 0, 55233, 12681, 42379, 0, 7534, 12219, 0, 127528, 42810, 10492, 0, 0, 0, + 43119, 0, 120753, 12403, 2500, 195013, 0, 4899, 0, 0, 0, 74113, 2343, + 4103, 19946, 74112, 77851, 13112, 0, 0, 12859, 0, 120148, 66369, 5861, 0, + 11999, 12400, 0, 0, 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, 0, 0, + 10138, 0, 0, 8897, 0, 0, 8357, 4124, 77862, 65836, 120641, 0, 77859, 0, + 0, 1123, 963, 41553, 10120, 12405, 120150, 0, 398, 13278, 9723, 6366, + 120311, 7945, 0, 4402, 9970, 12402, 0, 42392, 1305, 12408, 0, 44007, 0, + 0, 41464, 12411, 12969, 120824, 41465, 0, 8528, 1575, 0, 63955, 165, + 3024, 41467, 119163, 0, 9093, 0, 9147, 0, 63958, 0, 9148, 9692, 4096, 53, + 73776, 6750, 195018, 0, 9594, 0, 0, 43527, 0, 727, 0, 0, 5805, 0, 6726, + 0, 42176, 12370, 11655, 119095, 10591, 12364, 0, 12372, 120642, 120307, + 0, 0, 0, 12366, 10963, 6066, 1329, 0, 3052, 9220, 0, 64478, 0, 10803, + 4132, 120306, 68474, 0, 0, 0, 74837, 0, 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, 120154, 9564, 0, + 0, 73866, 0, 0, 2487, 67614, 3121, 1804, 3311, 67615, 0, 78302, 12220, + 67616, 120598, 0, 0, 68200, 6675, 0, 0, 67592, 120685, 0, 64771, 1198, + 9132, 0, 64619, 510, 64663, 0, 0, 4561, 2101, 1398, 0, 0, 74034, 41569, + 0, 11406, 8167, 12127, 0, 840, 0, 0, 0, 6967, 0, 0, 9796, 0, 333, 0, 0, + 8144, 0, 0, 0, 12406, 0, 19931, 119089, 6678, 7769, 0, 12621, 0, 0, + 10227, 4764, 43101, 9981, 0, 40986, 4127, 66487, 0, 42202, 12754, 195022, + 0, 0, 0, 67594, 2048, 12944, 4050, 67595, 917967, 43102, 10581, 12985, + 4533, 195021, 74003, 6490, 0, 12038, 0, 0, 120704, 65461, 9798, 0, 0, + 1948, 119007, 0, 952, 0, 0, 0, 120802, 6449, 9494, 120313, 0, 43098, + 4843, 8142, 64160, 4098, 64170, 0, 0, 3436, 0, 0, 12817, 67597, 6676, + 3930, 66708, 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, 0, 63841, 9613, + 9001, 4526, 11274, 67601, 64520, 64210, 6664, 78704, 42056, 10228, 64957, + 11281, 0, 64213, 1469, 66640, 65381, 42197, 4988, 42372, 0, 9598, 904, + 352, 42225, 1451, 8061, 8453, 4134, 0, 74847, 66576, 0, 0, 10520, 8575, + 9960, 1201, 0, 12846, 0, 0, 11919, 64962, 0, 43739, 127281, 8511, 9460, + 823, 11587, 12305, 0, 64695, 0, 12387, 1253, 13183, 65766, 500, 42783, + 65765, 64208, 64369, 65760, 65761, 119585, 11606, 64784, 11702, 66498, + 9821, 0, 0, 5152, 11048, 7533, 68366, 64410, 0, 0, 4323, 120062, 0, 0, + 127052, 42587, 42214, 41394, 0, 4763, 4112, 118935, 0, 5260, 43143, 0, + 326, 120131, 68423, 0, 10771, 2876, 74074, 194835, 194924, 41398, 7382, + 9802, 127077, 127076, 453, 41396, 120524, 42720, 12140, 9572, 0, 7003, + 194883, 42334, 7704, 0, 0, 43144, 4123, 8494, 43146, 9977, 0, 0, 65759, + 10765, 64061, 4465, 9808, 64056, 65582, 4126, 0, 9521, 9589, 64755, 0, + 64020, 0, 10464, 0, 0, 194869, 64514, 11528, 64024, 0, 679, 64013, 0, + 5850, 758, 7536, 0, 0, 41441, 10693, 64006, 0, 64005, 10541, 119019, 0, + 64660, 0, 119050, 0, 0, 1139, 43298, 64027, 64029, 8970, 0, 64000, 0, + 10774, 0, 42201, 12421, 194876, 0, 1852, 3057, 0, 73744, 64034, 64039, 0, + 0, 0, 0, 0, 7645, 12854, 74338, 3496, 0, 0, 0, 9102, 627, 0, 6158, 8327, + 74553, 66632, 12419, 13309, 11570, 0, 19960, 11696, 0, 1018, 118970, + 194909, 0, 1682, 194896, 194911, 42756, 6765, 194906, 0, 0, 73814, 11412, + 6768, 10728, 194830, 119010, 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, 0, 42240, 0, 0, 42864, 0, 64667, 41868, 1184, 0, 815, + 11484, 127535, 67840, 0, 0, 0, 0, 10986, 64683, 0, 0, 0, 0, 0, 9879, 0, + 0, 4158, 0, 68166, 0, 0, 0, 0, 0, 332, 118808, 0, 5142, 2407, 0, 42199, + 0, 0, 74373, 0, 55217, 0, 63870, 43163, 0, 0, 119081, 42867, 1834, 0, 0, + 69817, 10940, 65249, 119040, 8662, 0, 0, 2652, 120527, 11539, 10784, + 195093, 67674, 0, 0, 0, 0, 74562, 917505, 1828, 74474, 120327, 78620, + 8531, 12499, 6280, 12324, 118854, 65238, 68374, 4832, 65573, 0, 6279, + 12508, 12904, 12502, 9161, 0, 1620, 0, 3601, 195094, 0, 0, 609, 11555, 0, + 12496, 0, 74181, 4343, 12505, 0, 0, 0, 11377, 239, 0, 637, 0, 0, 42671, + 0, 0, 0, 43565, 127082, 0, 12696, 0, 0, 0, 12929, 0, 712, 0, 4197, 0, + 42818, 0, 0, 120490, 0, 0, 1506, 43562, 0, 0, 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, 917837, 0, 0, + 0, 0, 0, 0, 3178, 0, 0, 0, 0, 9080, 127000, 120352, 0, 68209, 0, 11082, + 0, 5699, 195100, 66000, 9488, 65166, 119112, 0, 0, 0, 0, 0, 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, 0, 120811, 0, 12468, 8607, 1008, 0, + 10092, 0, 917842, 67855, 55257, 73771, 1766, 11282, 11996, 1820, 4547, 0, + 0, 0, 0, 13223, 0, 64595, 0, 0, 0, 4345, 12616, 0, 0, 0, 74467, 0, 0, 0, + 5382, 0, 0, 0, 119060, 64953, 5406, 19920, 0, 66510, 3590, 0, 1130, 0, 0, + 42016, 11823, 43023, 0, 118896, 7742, 0, 13280, 0, 9326, 73826, 5310, + 74812, 0, 119962, 8959, 43589, 6747, 66723, 0, 8568, 0, 120496, 73816, + 120803, 0, 42670, 0, 11621, 12460, 0, 120631, 0, 43063, 74519, 0, 0, 0, 0, 0, 11689, 5410, 5783, 10468, 8403, 5400, 11594, 0, 0, 118990, 10491, 0, 64412, 0, 0, 5587, 42865, 64404, 8268, 4923, 65086, 8981, 12382, - 42133, 120755, 9706, 0, 0, 66610, 10461, 12103, 0, 8642, 0, 42766, 0, 0, - 0, 0, 119105, 0, 0, 0, 8816, 41515, 0, 11802, 8041, 1461, 910, 119133, 0, - 0, 3658, 0, 120525, 0, 7617, 0, 12888, 0, 0, 13143, 0, 41514, 0, 5703, 0, - 41517, 41504, 41519, 10016, 64305, 0, 65864, 623, 781, 670, 10660, 5769, - 613, 7543, 120774, 477, 41083, 0, 0, 592, 1578, 12459, 0, 0, 0, 8225, 0, - 654, 11345, 653, 652, 0, 647, 0, 633, 120744, 0, 0, 12480, 74354, 0, 39, - 12487, 0, 120529, 74199, 12482, 0, 12489, 0, 3195, 5550, 0, 7897, 0, - 1203, 74396, 1813, 64544, 41311, 12090, 0, 2877, 0, 0, 1675, 0, 0, 0, 0, - 10070, 10595, 0, 119077, 0, 0, 0, 0, 0, 118827, 0, 0, 0, 119561, 0, 0, 0, - 0, 0, 0, 0, 120692, 0, 0, 270, 0, 10714, 0, 0, 0, 0, 0, 65372, 0, 74038, - 119558, 6273, 66679, 364, 9595, 0, 0, 0, 707, 0, 0, 9282, 66489, 224, 0, - 0, 9332, 4966, 0, 0, 0, 0, 3841, 0, 0, 10732, 0, 850, 4972, 0, 64699, - 2909, 0, 65309, 0, 0, 11544, 10203, 9608, 0, 0, 11962, 0, 12507, 1196, 0, - 0, 777, 0, 4375, 65271, 0, 0, 12198, 0, 64824, 0, 0, 9454, 63778, 8658, - 42528, 0, 2705, 917975, 41520, 0, 0, 11986, 7765, 42502, 8280, 0, 2701, - 0, 0, 5767, 0, 0, 9809, 8353, 63747, 66701, 63772, 0, 63745, 1748, 63770, - 0, 0, 0, 65542, 63766, 0, 3061, 0, 63764, 63789, 9067, 6096, 0, 7694, 0, - 7257, 63768, 3485, 12987, 0, 0, 0, 63807, 1591, 0, 0, 63783, 0, 0, 0, 0, - 0, 0, 74575, 0, 65719, 13083, 64574, 65012, 0, 1640, 12495, 66691, 7624, - 3138, 10996, 0, 1922, 0, 12498, 10987, 0, 0, 3894, 65543, 0, 194842, 0, - 493, 0, 43197, 1717, 4228, 479, 10303, 917934, 0, 917935, 10335, 3520, - 917932, 12490, 64315, 0, 127039, 12493, 6233, 64636, 1002, 12491, 0, - 64911, 127040, 0, 65120, 0, 0, 0, 11611, 66228, 127041, 66213, 63864, - 66221, 66226, 66229, 13218, 66231, 66216, 8507, 66236, 66211, 66218, 0, - 66240, 0, 66233, 8928, 0, 7909, 66234, 11605, 63759, 0, 66208, 73999, - 63799, 0, 244, 11542, 12898, 12494, 73761, 12492, 12669, 0, 0, 74153, 0, - 0, 120680, 4882, 13040, 0, 8612, 4885, 74053, 0, 13042, 4880, 64662, - 2429, 1360, 248, 0, 63797, 0, 63792, 0, 7292, 0, 63756, 42786, 66693, 0, - 1870, 917916, 470, 0, 0, 120306, 0, 0, 4579, 0, 0, 12511, 74453, 12514, - 0, 74579, 7239, 7001, 8623, 0, 0, 0, 0, 12512, 11615, 13041, 0, 0, 659, - 6098, 0, 12234, 0, 127067, 8311, 12510, 41803, 13039, 127072, 12513, - 10202, 12471, 0, 8747, 0, 0, 0, 2323, 0, 2319, 0, 12477, 0, 2311, 0, - 4415, 237, 6281, 0, 0, 0, 2309, 1312, 8173, 0, 12469, 0, 0, 64335, 10609, - 0, 0, 9397, 11524, 9395, 9396, 9393, 9394, 9391, 9392, 9389, 6209, 9387, - 9388, 4932, 9386, 9383, 9384, 0, 0, 65451, 8185, 0, 917832, 43024, 43336, - 74375, 2313, 0, 7948, 9236, 0, 0, 0, 10570, 0, 6289, 10484, 0, 0, 11998, - 12082, 10924, 3147, 0, 0, 12524, 0, 2310, 11818, 9381, 9382, 9379, 9380, + 42133, 120755, 9706, 0, 0, 66610, 10461, 12103, 0, 8642, 0, 42766, 0, + 66566, 9983, 0, 119105, 0, 0, 0, 7398, 41515, 0, 11802, 8041, 1461, 910, + 119133, 0, 6749, 3658, 0, 120525, 0, 7617, 0, 12888, 0, 67668, 13143, 0, + 41514, 11097, 5703, 0, 41517, 41504, 41519, 10016, 64305, 0, 65864, 623, + 781, 670, 10660, 5769, 613, 7543, 120279, 477, 41083, 0, 0, 592, 1578, + 12459, 43449, 0, 0, 8225, 0, 654, 11345, 653, 652, 0, 647, 0, 633, + 120744, 0, 0, 12480, 43243, 0, 39, 12487, 0, 120529, 74199, 12482, 0, + 12489, 0, 3195, 5550, 0, 7897, 0, 1203, 74396, 1813, 64544, 41311, 12090, + 0, 2877, 0, 0, 1675, 0, 0, 0, 0, 10070, 10595, 0, 119077, 0, 0, 0, 0, 0, + 43244, 0, 0, 0, 119561, 0, 0, 0, 0, 0, 0, 0, 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, 64699, 2909, 68619, 44008, + 68627, 0, 11544, 10203, 9608, 0, 0, 11962, 0, 12507, 1196, 0, 0, 777, 0, + 4375, 65271, 67678, 0, 12198, 0, 64824, 0, 0, 9454, 63778, 8658, 42528, + 0, 2705, 917975, 41520, 0, 0, 11986, 7765, 42502, 8280, 0, 2701, 0, 0, + 5767, 0, 0, 9809, 8353, 63747, 66701, 63772, 0, 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, 0, 0, 0, 0, 74575, 0, 65719, 13083, 64574, 65012, 0, 1640, 12495, + 66691, 7624, 3138, 10996, 0, 1922, 0, 12498, 10987, 0, 0, 3894, 65543, 0, + 194842, 0, 493, 0, 43197, 1717, 4228, 479, 10303, 74020, 0, 917935, + 10335, 3520, 917932, 12490, 64315, 0, 127039, 12493, 6233, 42681, 1002, + 12491, 0, 64911, 127040, 2096, 65120, 0, 0, 0, 11611, 66228, 127041, + 66213, 63864, 66221, 66226, 66229, 13218, 66231, 66216, 8507, 66236, + 66211, 66218, 0, 66240, 78041, 66233, 8928, 0, 7909, 66234, 11605, 63759, + 0, 66208, 73999, 63799, 63803, 244, 11542, 12898, 12494, 73761, 12492, + 12669, 0, 0, 74153, 0, 0, 120680, 4882, 13040, 0, 8612, 4885, 74053, 0, + 13042, 4880, 64662, 2429, 1360, 248, 0, 63797, 0, 42358, 0, 7292, 0, + 63756, 42786, 66693, 0, 1870, 78040, 470, 78038, 78035, 78036, 0, 78034, + 4579, 0, 0, 12511, 74453, 12514, 0, 74579, 7239, 7001, 8623, 0, 0, 0, + 7378, 12512, 11615, 6104, 0, 0, 659, 6098, 0, 12234, 127307, 127067, + 8311, 12510, 41803, 13039, 127072, 12513, 10202, 12471, 0, 8747, 0, 0, 0, + 2323, 0, 2319, 77917, 12477, 77916, 2311, 0, 4415, 237, 6281, 0, 0, 0, + 2309, 1312, 8173, 0, 12469, 0, 78505, 64335, 10609, 0, 0, 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, + 0, 7948, 9236, 0, 0, 0, 10570, 43473, 6289, 10484, 0, 0, 11998, 12082, + 10924, 3147, 0, 120684, 12524, 0, 2310, 11818, 9381, 9382, 9379, 9380, 9377, 9378, 9375, 9376, 1683, 9374, 0, 9372, 12444, 0, 0, 13016, 8210, 0, - 42029, 11079, 12331, 0, 42032, 8744, 726, 0, 0, 4155, 0, 0, 42030, 5007, - 12522, 43088, 0, 4951, 0, 0, 0, 9922, 43309, 0, 12525, 0, 12016, 65770, - 9548, 0, 403, 0, 12503, 0, 0, 11030, 0, 0, 65691, 63998, 1819, 10496, 0, - 0, 119920, 0, 0, 0, 12506, 0, 12231, 0, 12500, 67605, 12509, 64393, 0, - 3389, 10589, 6608, 41047, 120321, 0, 0, 74069, 0, 0, 3608, 8281, 917839, - 1107, 0, 9076, 8862, 0, 41052, 13084, 64766, 43217, 7803, 13222, 118963, - 74782, 0, 8546, 11553, 63995, 13177, 9043, 6303, 0, 498, 64471, 120324, - 0, 12529, 8042, 0, 2344, 12528, 8031, 2414, 0, 0, 3231, 0, 6422, 66512, - 0, 12530, 2537, 0, 41429, 12658, 13036, 65772, 0, 0, 41433, 4719, 469, 0, - 4363, 3313, 41428, 0, 2023, 1772, 0, 0, 65706, 10051, 64812, 0, 0, 9920, - 12215, 0, 4931, 1951, 12497, 119363, 9607, 0, 9663, 0, 119634, 6503, - 41110, 0, 1491, 0, 0, 0, 41061, 0, 0, 0, 65026, 41993, 41509, 11045, - 65028, 0, 66476, 41108, 9738, 41995, 1075, 1958, 12535, 41992, 41506, 0, - 41687, 0, 120717, 0, 917816, 0, 7692, 0, 8008, 0, 330, 8566, 65083, - 41133, 9816, 0, 12532, 127055, 127056, 3508, 127058, 127059, 0, 917542, - 917815, 0, 6411, 12910, 120505, 66644, 13028, 0, 12537, 0, 0, 64136, - 12536, 2350, 13029, 0, 0, 0, 13030, 0, 4527, 0, 12538, 0, 0, 65599, - 65717, 12607, 0, 4948, 12484, 4032, 0, 42803, 0, 6207, 0, 6117, 66000, - 8412, 0, 7438, 1296, 2325, 41511, 0, 10149, 74118, 0, 0, 12481, 0, 12488, - 0, 0, 41556, 64414, 118802, 2354, 0, 73766, 0, 6295, 901, 41510, 7953, 0, - 65032, 41513, 0, 11927, 66584, 0, 0, 119010, 0, 0, 0, 848, 9868, 0, 6424, - 0, 119338, 0, 74031, 0, 0, 2352, 0, 893, 64576, 11289, 1407, 0, 0, 13026, - 0, 0, 0, 13023, 8903, 9777, 66715, 1871, 8099, 0, 0, 1343, 0, 0, 9325, - 13025, 6283, 11738, 0, 0, 0, 11741, 0, 0, 9216, 8263, 11279, 194752, 0, - 194754, 13021, 64494, 3136, 194758, 194757, 194760, 13022, 0, 64588, 0, - 0, 74552, 10014, 0, 41260, 119340, 13020, 118993, 194764, 194767, 74340, - 0, 0, 64945, 8029, 0, 0, 0, 3335, 0, 0, 9776, 120526, 194748, 5215, - 42644, 3333, 1632, 194751, 64849, 3342, 0, 5363, 12957, 0, 4156, 0, 0, - 6421, 0, 1611, 0, 13018, 74257, 0, 0, 3337, 4537, 67895, 11736, 0, 0, - 6482, 4214, 73790, 11945, 0, 13046, 8838, 425, 4025, 10709, 0, 73927, - 2392, 13047, 0, 0, 10617, 13049, 6499, 194739, 12424, 194741, 73944, - 13050, 194742, 194745, 6507, 0, 0, 0, 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, 194734, - 41057, 0, 0, 0, 0, 0, 0, 0, 0, 41496, 0, 9165, 1572, 11911, 0, 118842, - 2346, 13270, 8958, 0, 9646, 3773, 43183, 6401, 42536, 0, 0, 13043, 8056, - 0, 65681, 208, 0, 0, 0, 0, 0, 10699, 6408, 0, 7825, 5661, 0, 120630, - 3603, 41109, 2398, 3548, 0, 0, 0, 0, 3115, 0, 0, 11321, 0, 0, 0, 194726, - 4876, 74286, 0, 0, 0, 0, 41558, 41471, 73950, 8158, 41561, 41472, 0, - 13051, 194672, 3143, 194674, 194673, 41559, 1896, 66256, 13052, 194680, - 5665, 0, 119071, 41986, 63974, 0, 74352, 74161, 4154, 9863, 43550, 12310, - 5662, 42382, 194686, 73924, 1121, 194665, 63959, 0, 74378, 13231, 0, - 64752, 4732, 194666, 11596, 194668, 65187, 1626, 63983, 10110, 194671, - 42024, 6420, 42028, 0, 10509, 2795, 4910, 194728, 0, 64753, 6275, 0, - 118830, 63978, 11044, 3229, 6423, 42774, 0, 0, 0, 12823, 2331, 917810, - 42026, 6137, 0, 7524, 0, 0, 119343, 0, 8338, 0, 65043, 0, 822, 0, 9903, - 64721, 194657, 194656, 194659, 194658, 194661, 194660, 0, 41265, 5311, - 1795, 965, 118791, 10587, 0, 11278, 0, 194640, 0, 12946, 194641, 120705, - 194643, 6294, 3144, 194648, 194647, 65019, 194649, 73990, 0, 0, 748, - 41067, 2330, 535, 3148, 12375, 194652, 194629, 10556, 2475, 12388, 4889, - 8968, 67863, 3593, 0, 0, 2342, 0, 194634, 65206, 4894, 194635, 4890, - 194637, 0, 581, 4893, 0, 0, 65545, 4888, 4157, 917805, 0, 0, 0, 0, 10119, - 6415, 0, 0, 0, 0, 0, 11375, 64746, 2332, 0, 412, 0, 64932, 42880, 43587, - 0, 0, 0, 0, 65197, 0, 12203, 0, 0, 8913, 65854, 4875, 65811, 120381, - 194624, 120397, 9344, 8826, 120386, 120395, 13104, 74781, 11997, 120393, - 0, 0, 3134, 0, 65696, 0, 0, 66217, 0, 8334, 119344, 0, 3449, 0, 0, 0, 0, - 118950, 74011, 0, 0, 0, 0, 1908, 0, 4328, 10734, 127014, 0, 0, 7804, 0, - 10811, 6250, 11339, 4914, 11367, 0, 118971, 4917, 74516, 0, 64285, 4912, - 5464, 0, 118893, 2361, 7971, 0, 0, 0, 118986, 0, 8086, 74317, 0, 8319, - 2312, 40977, 10960, 40962, 8305, 12573, 0, 40980, 0, 13202, 0, 12582, 0, - 0, 0, 42438, 0, 6288, 0, 0, 5653, 42400, 10891, 7698, 5658, 74045, 0, 0, - 0, 4913, 0, 0, 0, 42326, 0, 0, 0, 42478, 2327, 0, 12959, 42287, 12705, 0, - 0, 12588, 8821, 6153, 2867, 194708, 66312, 698, 194709, 194712, 10356, - 74075, 194713, 651, 12641, 0, 0, 0, 0, 41552, 65115, 194691, 194690, - 194693, 194692, 194695, 194694, 194697, 74356, 0, 4716, 43277, 0, 0, - 12340, 120568, 0, 194700, 194699, 194702, 120676, 8703, 5462, 917629, 0, + 42029, 11079, 12331, 43451, 42032, 8744, 726, 0, 0, 4155, 0, 0, 42030, + 5007, 12522, 43088, 0, 4951, 0, 127240, 0, 9922, 43309, 0, 12525, 0, + 12016, 65770, 9548, 67665, 403, 78230, 12503, 0, 0, 11030, 0, 0, 65691, + 63998, 1819, 10496, 0, 0, 119920, 0, 0, 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, 0, + 41052, 13084, 64766, 43217, 7803, 13222, 74165, 74782, 0, 8546, 11553, + 63995, 13177, 9043, 6303, 0, 498, 64471, 120324, 0, 12529, 8042, 0, 2344, + 12528, 8031, 2414, 0, 0, 3231, 0, 6422, 66512, 0, 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, 0, 119634, + 6503, 41110, 0, 1491, 0, 0, 0, 41061, 0, 0, 0, 65026, 41993, 41509, + 11045, 65028, 78602, 66476, 41108, 9738, 41995, 1075, 1958, 12535, 41992, + 41506, 0, 41687, 0, 120717, 0, 9940, 0, 7692, 0, 8008, 41131, 330, 8566, + 65083, 41133, 9816, 0, 12532, 78550, 78546, 3508, 127058, 43235, 0, + 127298, 69783, 78231, 6411, 12910, 78554, 66644, 13028, 6737, 12537, 0, + 0, 64136, 12536, 2350, 13029, 78233, 0, 0, 13030, 6702, 4527, 0, 12538, + 0, 0, 65599, 65717, 9966, 0, 4948, 12484, 4032, 0, 12623, 0, 6207, 0, + 6117, 65930, 8412, 0, 7438, 1296, 2325, 41511, 0, 10149, 74118, 0, 0, + 12481, 0, 12488, 0, 0, 41556, 64414, 118802, 2354, 0, 73766, 0, 6295, + 901, 41510, 7953, 0, 65032, 41513, 0, 11927, 66584, 78559, 78560, 78557, + 78558, 0, 78556, 848, 9868, 0, 6424, 78568, 119338, 78565, 74031, 78563, + 78564, 2352, 78572, 893, 64576, 11289, 1407, 0, 0, 13026, 6762, 78579, + 78580, 13023, 8903, 9777, 66715, 1871, 8099, 0, 0, 1343, 0, 0, 9325, + 6818, 6283, 11738, 0, 0, 0, 11741, 0, 0, 9216, 8263, 11279, 194752, 0, + 194754, 13021, 64494, 3136, 194758, 194757, 194760, 13022, 42737, 64588, + 0, 0, 74552, 10014, 0, 41260, 119340, 13020, 118993, 194764, 194767, + 74340, 0, 0, 64945, 8029, 0, 0, 0, 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, 78584, 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, + 194739, 12424, 68614, 73944, 13050, 9924, 194745, 6507, 0, 0, 0, 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, 194734, 41057, 0, 0, 0, 0, 0, 0, 127109, 0, 41496, 0, + 9165, 1572, 11911, 0, 118842, 2346, 13270, 8958, 0, 9646, 3773, 43183, + 6401, 5831, 0, 0, 13043, 8056, 0, 65681, 208, 0, 0, 0, 0, 0, 10699, 6408, + 0, 7825, 5661, 0, 120630, 3603, 41109, 2398, 3548, 0, 0, 119933, 0, 3115, + 9918, 0, 11321, 0, 0, 0, 194726, 4876, 74286, 0, 0, 43468, 0, 41558, + 41471, 73950, 8158, 9944, 41472, 0, 13051, 78689, 3143, 194674, 6701, + 41559, 1896, 66256, 13052, 194680, 5665, 0, 119071, 7025, 63974, 0, + 74352, 74161, 4154, 9863, 43550, 12310, 5662, 42382, 194686, 73924, 1121, + 194665, 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, 917808, 118830, 63978, 11044, 3229, + 6423, 42774, 0, 0, 0, 12823, 2331, 917810, 42026, 6137, 0, 7524, 0, + 917809, 119343, 0, 8338, 0, 65043, 0, 822, 0, 9903, 64721, 42722, 194656, + 194659, 78655, 78661, 194660, 78662, 41265, 5311, 1795, 965, 118791, + 10587, 78055, 11278, 78632, 194640, 0, 12946, 194641, 120705, 194643, + 6294, 3144, 194648, 194647, 65019, 194649, 73990, 0, 0, 748, 41067, 2330, + 535, 3148, 12375, 194652, 194629, 10556, 2475, 12388, 4889, 8968, 67863, + 3593, 0, 0, 2342, 0, 194634, 65206, 4894, 194635, 4890, 194637, 917804, + 581, 4893, 0, 6571, 65545, 4888, 4157, 78048, 78049, 78046, 78047, 0, + 10119, 6415, 0, 0, 0, 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, 0, 0, 66217, 0, 8334, + 119344, 0, 3449, 0, 0, 78414, 78413, 118950, 74011, 0, 0, 0, 0, 1908, + 120167, 4328, 10734, 127014, 0, 0, 7804, 78272, 10811, 6250, 11339, 4914, + 11367, 0, 78054, 4917, 74516, 74208, 64285, 4912, 5464, 0, 118893, 2361, + 7971, 78072, 78073, 55243, 78071, 0, 8086, 74317, 6707, 8319, 2312, + 40977, 10960, 40962, 8305, 12573, 0, 40980, 0, 13202, 0, 12582, 78282, 0, + 0, 42438, 55221, 6288, 78280, 0, 5653, 42400, 10891, 7698, 5658, 74045, + 0, 0, 0, 4913, 0, 0, 0, 42326, 0, 0, 0, 42478, 2327, 0, 12563, 42287, + 12705, 0, 0, 12588, 8821, 6153, 2867, 194708, 66312, 698, 194709, 194606, + 10356, 74075, 194713, 651, 12641, 0, 0, 0, 0, 41552, 65115, 78465, 78467, + 78463, 78464, 194695, 78461, 194697, 74356, 0, 4716, 43277, 0, 78474, + 12340, 120568, 0, 194700, 55264, 41211, 120676, 8703, 5462, 917629, 0, 10101, 0, 0, 8479, 4151, 41933, 0, 0, 66254, 120821, 0, 0, 0, 0, 119194, 74050, 0, 0, 0, 0, 0, 0, 12278, 0, 0, 0, 2700, 12576, 7842, 12899, 0, 0, - 2699, 0, 0, 2985, 119222, 0, 0, 12192, 119314, 0, 119312, 9827, 119310, - 119311, 119308, 119309, 119306, 11481, 41210, 119305, 0, 35, 0, 0, 66694, - 74357, 0, 0, 43596, 6090, 64257, 7812, 10534, 0, 0, 73848, 0, 4272, 0, - 40967, 40964, 917825, 12704, 0, 43306, 0, 64497, 12138, 7930, 0, 43303, - 0, 0, 917826, 5244, 4189, 127098, 67596, 0, 4188, 1879, 0, 968, 0, 0, 0, - 8873, 0, 0, 0, 65555, 12574, 0, 0, 0, 74490, 0, 0, 0, 0, 0, 0, 12578, - 12720, 0, 41227, 0, 12346, 0, 64848, 0, 0, 7251, 0, 0, 118850, 119141, 0, - 66015, 0, 959, 8885, 12564, 66457, 0, 9469, 9632, 0, 74761, 64323, 0, 0, - 0, 0, 310, 0, 41564, 10976, 0, 0, 0, 0, 10054, 6497, 8574, 0, 9012, - 19958, 74420, 65089, 13215, 65047, 65163, 74044, 374, 43195, 816, 0, 0, - 0, 41934, 7465, 0, 0, 0, 4715, 6101, 0, 41936, 0, 4879, 0, 65446, 0, 307, - 0, 9585, 5374, 0, 0, 0, 0, 0, 0, 0, 65567, 120614, 1929, 0, 12142, 0, - 12236, 41419, 194618, 194621, 12982, 194623, 5378, 0, 0, 41421, 0, 4462, - 0, 0, 0, 821, 0, 2498, 5800, 120157, 0, 1760, 0, 4469, 2324, 828, 3611, - 0, 757, 1185, 0, 0, 43597, 10628, 74808, 194572, 7999, 0, 0, 0, 10634, - 10942, 7713, 2348, 0, 64374, 4380, 194608, 119044, 194610, 64324, 41240, - 862, 65626, 194613, 1810, 3673, 5137, 194617, 0, 7277, 65622, 0, 7566, - 64688, 194593, 194592, 194595, 120812, 194597, 4748, 194599, 194598, - 194601, 42260, 5871, 119075, 0, 74576, 0, 0, 194602, 3967, 194604, 13137, - 8775, 194605, 0, 2963, 0, 8410, 4454, 723, 0, 966, 4449, 0, 127060, 0, - 7819, 2320, 194589, 339, 4968, 194590, 120399, 8075, 0, 0, 8047, 0, 0, - 12634, 41542, 0, 7466, 118822, 12174, 42610, 0, 74452, 0, 1584, 66645, - 6045, 0, 120640, 65218, 0, 0, 0, 7537, 0, 11370, 0, 10330, 0, 10394, 0, + 2699, 0, 73845, 2985, 119222, 0, 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, 78483, 4272, 0, 40967, 40964, 917825, 12704, + 78487, 43306, 0, 64497, 12138, 7930, 0, 43303, 68216, 0, 917826, 5244, + 4189, 127098, 67596, 0, 4188, 1879, 0, 968, 0, 43743, 0, 8873, 0, 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, 0, 66015, 0, 959, 8885, 12564, 66457, 78808, 9469, 9632, + 0, 74761, 64323, 0, 0, 0, 0, 310, 0, 41281, 10976, 0, 194768, 0, 74266, + 10054, 6497, 8574, 0, 9012, 19958, 74420, 65089, 13215, 65047, 65163, + 74044, 374, 43195, 816, 0, 0, 0, 41934, 7465, 0, 0, 0, 4715, 6101, 0, + 41936, 0, 4879, 0, 65446, 0, 307, 0, 9585, 5374, 0, 0, 0, 0, 0, 0, 0, + 65567, 120614, 1929, 0, 12142, 0, 12236, 41419, 194618, 194621, 12982, + 194623, 5378, 78791, 0, 41421, 0, 4462, 0, 0, 0, 821, 0, 2498, 5800, + 120157, 0, 1760, 0, 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, 194599, 194598, 194601, 42260, 5871, 119075, + 0, 74576, 44019, 0, 194602, 3967, 194604, 13137, 8775, 194605, 0, 2963, + 0, 8410, 4454, 723, 917600, 966, 4449, 0, 127060, 0, 7819, 2320, 194589, + 339, 4968, 194590, 120399, 8075, 55276, 0, 8047, 0, 78827, 12634, 41542, + 78780, 7466, 6705, 12174, 42610, 0, 74452, 0, 1584, 66645, 6045, 6729, + 120640, 65218, 78777, 0, 78062, 7537, 0, 11370, 0, 10330, 0, 10394, 0, 194783, 0, 0, 9780, 0, 13092, 194576, 119605, 194578, 7074, 120396, 194579, 194582, 11414, 194584, 2531, 13034, 0, 0, 0, 1259, 7517, 0, 0, 194561, 40996, 13037, 7092, 641, 5219, 194567, 194566, 11064, 41129, 0, 42850, 13035, 9075, 0, 5466, 194570, 0, 64098, 65793, 4535, 194573, 4271, - 194575, 0, 0, 41410, 0, 64262, 0, 41407, 0, 0, 41131, 118864, 9046, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 64338, 2563, 13033, 247, 917787, 0, 12338, 4651, - 0, 11270, 0, 0, 11933, 0, 0, 41903, 67892, 11001, 0, 42255, 0, 0, 0, - 41905, 0, 0, 10775, 9793, 5009, 0, 42269, 64587, 0, 42535, 0, 64529, - 41408, 42853, 3877, 0, 0, 8147, 43566, 119021, 0, 10236, 65918, 0, 0, 0, - 64506, 0, 118921, 4747, 0, 0, 43200, 5832, 0, 0, 5141, 42600, 0, 43203, - 0, 0, 43286, 0, 0, 0, 0, 0, 0, 74137, 11303, 65547, 0, 7031, 859, 0, 0, - 0, 6059, 126985, 0, 0, 8535, 0, 0, 194787, 66032, 11488, 0, 120786, 0, 0, - 10558, 63885, 0, 11822, 0, 43189, 0, 0, 1788, 1579, 120482, 917817, 0, 0, - 0, 9028, 119571, 0, 0, 0, 1285, 64882, 41242, 0, 0, 12640, 0, 66642, 0, - 12625, 0, 0, 0, 3940, 41597, 0, 3396, 12642, 8665, 0, 0, 12630, 1653, 0, + 78417, 0, 6769, 41410, 0, 64262, 6767, 41407, 0, 0, 6755, 118864, 9046, + 0, 0, 0, 0, 0, 0, 67675, 0, 0, 0, 64338, 2563, 13033, 247, 118915, 0, + 12338, 4651, 0, 11270, 0, 0, 11933, 0, 0, 41903, 43447, 11001, 0, 42255, + 0, 0, 0, 41905, 0, 0, 10775, 9793, 5009, 0, 42269, 64587, 0, 42535, + 69812, 64529, 41408, 42853, 3877, 120795, 42674, 8147, 43566, 119021, 0, + 10236, 65918, 0, 0, 0, 64506, 0, 118921, 4747, 0, 0, 43200, 5832, 0, 0, + 5141, 42600, 0, 43203, 0, 0, 43286, 0, 0, 0, 0, 41305, 78776, 74137, + 11303, 65547, 0, 7031, 859, 0, 0, 0, 6059, 126985, 55235, 0, 8535, 0, + 65196, 194787, 66032, 11488, 0, 120786, 42233, 127488, 9946, 63885, 0, + 11822, 0, 43189, 0, 0, 1788, 1579, 120482, 917817, 0, 0, 0, 9028, 119571, + 69234, 0, 0, 1285, 64882, 41242, 0, 0, 12640, 0, 7401, 0, 12625, 68198, + 0, 0, 3940, 41597, 55260, 3396, 12642, 8665, 0, 0, 12630, 1653, 917815, 10153, 0, 6166, 120516, 120523, 0, 8815, 66673, 65046, 9285, 913, 42259, - 119317, 119318, 119315, 119316, 42485, 118837, 7878, 8211, 42293, 64377, - 0, 0, 0, 0, 12032, 0, 9725, 0, 0, 5263, 12818, 0, 41939, 10022, 65387, - 118831, 42777, 10139, 980, 0, 65386, 0, 0, 0, 43198, 7184, 0, 194797, - 917819, 10085, 119992, 0, 119999, 6634, 0, 0, 119323, 8072, 119321, - 119322, 0, 8872, 7783, 917992, 12398, 8237, 0, 0, 12395, 0, 0, 120565, - 9914, 127011, 917854, 73975, 74281, 0, 0, 0, 917853, 0, 64735, 41243, 0, - 7808, 1829, 0, 41937, 4358, 43272, 0, 0, 0, 0, 0, 1710, 0, 0, 0, 0, 49, - 6627, 0, 6258, 10683, 0, 9741, 120423, 5649, 917986, 0, 64418, 1643, - 74104, 8405, 3470, 0, 13213, 42452, 917987, 0, 120009, 0, 1072, 0, - 917990, 0, 6576, 41988, 41132, 65675, 1080, 120002, 74100, 0, 1101, - 120001, 12309, 0, 0, 12632, 1086, 1869, 0, 7680, 0, 65458, 120714, 12639, - 3380, 8123, 1091, 12638, 7977, 4501, 0, 0, 66309, 0, 0, 1494, 0, 0, 0, - 11693, 0, 10494, 119230, 65872, 12363, 11386, 0, 0, 0, 0, 64582, 0, - 73794, 0, 8022, 0, 0, 74106, 12413, 0, 0, 0, 0, 5570, 1881, 7210, 0, - 1012, 66630, 0, 120709, 7208, 66442, 5569, 0, 42339, 0, 6063, 0, 0, 0, + 119317, 119318, 119315, 68454, 42485, 118837, 7878, 8211, 42293, 64377, + 0, 0, 0, 194673, 12032, 0, 9725, 0, 78431, 5263, 12818, 78430, 41939, + 10022, 65387, 78419, 42777, 10139, 980, 43698, 65386, 0, 0, 43701, 43198, + 7184, 120673, 194797, 917819, 10085, 119992, 0, 119993, 6634, 0, 0, + 119323, 8072, 119321, 43700, 0, 8872, 7783, 917992, 12398, 8237, 0, 0, + 12395, 0, 126977, 120565, 9914, 127011, 917854, 73975, 6367, 6351, 66688, + 0, 78107, 0, 64735, 41243, 0, 7808, 1829, 0, 41937, 4358, 43272, 6353, 0, + 0, 120422, 0, 1710, 0, 0, 65607, 0, 49, 6627, 0, 6258, 10683, 78672, + 9741, 78443, 5649, 78441, 43443, 64418, 1643, 65213, 8405, 3470, 0, + 13213, 42452, 78331, 0, 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, 0, 0, 66309, 0, 0, 1494, 0, 0, 0, 11693, 0, + 10494, 119230, 65872, 12363, 11386, 0, 0, 0, 0, 64582, 0, 73794, 0, 8022, + 0, 0, 74106, 12413, 194829, 917994, 0, 917995, 5570, 1881, 7210, 0, 1012, + 66630, 0, 120709, 7208, 66442, 5569, 0, 42339, 0, 6063, 0, 0, 119594, 6053, 65602, 0, 0, 64727, 9160, 194827, 0, 0, 0, 10503, 118810, 6055, 3870, 4279, 8490, 120114, 4319, 64786, 8602, 120110, 11326, 0, 0, 0, - 120119, 120413, 120117, 120118, 120099, 120100, 65087, 5571, 3674, 9740, - 9121, 5568, 120107, 120108, 42085, 10107, 64567, 42870, 120101, 589, + 120119, 78333, 120117, 120118, 120099, 120100, 65087, 5571, 3674, 9740, + 9121, 5568, 120107, 120108, 42085, 10107, 42159, 42870, 120101, 589, 7050, 0, 43281, 10233, 41263, 66251, 65729, 66253, 0, 74099, 42645, 0, - 194815, 8583, 0, 5847, 6928, 0, 0, 0, 0, 0, 66592, 12204, 0, 19966, 0, - 42561, 120626, 0, 0, 8120, 120701, 0, 0, 0, 41063, 0, 10664, 0, 8369, 0, - 4551, 0, 74759, 0, 0, 9673, 66334, 65580, 10478, 127002, 12517, 557, - 9457, 12034, 0, 41056, 12519, 41004, 0, 0, 74094, 0, 0, 119001, 0, 0, 0, - 12111, 3927, 0, 12515, 1474, 67893, 5492, 6923, 0, 10441, 73836, 0, 0, - 5493, 0, 74319, 0, 66635, 12019, 0, 1618, 0, 0, 9645, 10430, 0, 5853, - 13063, 10363, 0, 12956, 0, 0, 11314, 0, 12060, 0, 0, 12826, 0, 0, 10514, - 65517, 74395, 2707, 8309, 0, 127054, 0, 43570, 2697, 0, 0, 127057, 2695, - 42171, 0, 0, 0, 67617, 194814, 0, 2693, 12125, 12766, 0, 1164, 0, 0, - 41918, 0, 0, 8687, 66009, 12178, 7053, 0, 7469, 0, 5248, 12218, 120538, - 6427, 42884, 41123, 0, 0, 42873, 41126, 9991, 41128, 74371, 127031, 0, - 9873, 0, 42877, 7994, 64762, 6104, 42843, 6591, 9340, 0, 1589, 0, 296, - 74438, 0, 0, 67841, 74370, 0, 8922, 0, 74600, 74435, 74836, 0, 12579, 0, - 12575, 6416, 5656, 2891, 13262, 65590, 5299, 0, 11473, 5449, 1252, 0, 0, - 41431, 74369, 65373, 5295, 0, 74114, 1223, 1642, 174, 0, 883, 4161, - 12691, 42603, 41413, 3212, 127025, 3211, 74810, 41425, 127029, 0, 74450, - 9728, 3846, 8070, 6150, 6636, 4370, 0, 0, 74178, 74587, 74117, 0, 0, 0, - 4986, 12189, 0, 0, 120499, 917553, 4257, 12104, 119182, 6220, 9004, - 65561, 0, 0, 0, 68135, 917576, 0, 0, 0, 0, 9890, 0, 12971, 0, 0, 73898, - 11979, 0, 118900, 0, 0, 9635, 12600, 8871, 0, 0, 0, 6469, 74227, 0, + 194815, 8583, 0, 5847, 6928, 0, 0, 0, 0, 0, 66592, 12204, 0, 19966, + 77856, 42561, 120626, 0, 0, 8120, 120701, 0, 0, 0, 41063, 0, 10664, 0, + 8369, 0, 4551, 0, 74759, 0, 0, 9673, 66334, 65580, 10478, 118960, 12517, + 557, 9457, 12034, 0, 6355, 12519, 41004, 0, 0, 74094, 0, 0, 77970, 0, 0, + 0, 12111, 3927, 0, 12515, 1474, 67893, 5492, 6923, 0, 10441, 73836, 0, + 43990, 5493, 0, 74319, 0, 66635, 12019, 0, 1618, 0, 120474, 9645, 10430, + 917959, 5853, 13063, 10363, 0, 12956, 0, 120729, 11314, 0, 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, 0, 0, 41918, 0, 0, 8687, 66009, 12178, + 7053, 0, 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, 0, 74600, 12700, 74836, 0, 12579, 0, 12575, 6416, 5656, 2891, + 13262, 65590, 5299, 0, 11473, 5449, 1252, 0, 78404, 41431, 74369, 65373, + 5295, 0, 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, 917553, 4257, 12104, 77942, 6220, 9004, 65561, 0, 77949, + 0, 68135, 917576, 77946, 0, 0, 0, 9890, 78561, 12971, 78453, 0, 73898, + 11979, 0, 118900, 917894, 0, 9635, 12600, 8871, 0, 0, 0, 6469, 74227, 0, 65304, 4679, 10230, 64300, 64867, 3427, 4240, 0, 0, 0, 0, 917952, 0, 0, - 0, 7282, 0, 65733, 64618, 0, 0, 3494, 74606, 6555, 0, 0, 0, 0, 0, 0, 0, - 65898, 0, 65312, 5447, 0, 12895, 65593, 4010, 0, 41106, 0, 65804, 0, - 41105, 0, 65820, 6232, 0, 0, 0, 43608, 119091, 0, 6538, 4335, 0, 3941, - 41122, 11061, 0, 64892, 9113, 1954, 12155, 0, 42878, 0, 0, 0, 74578, 0, - 65832, 0, 0, 0, 0, 0, 4586, 0, 350, 10951, 0, 509, 0, 0, 0, 0, 0, 5133, - 0, 0, 9500, 0, 12162, 64741, 0, 9354, 0, 0, 0, 2496, 11516, 944, 118851, - 3890, 12168, 1438, 0, 0, 0, 41947, 1220, 120828, 0, 0, 0, 1571, 42630, - 41949, 42805, 8270, 943, 564, 0, 312, 41980, 0, 0, 0, 8877, 269, 4429, - 6272, 9617, 1460, 6954, 0, 41120, 65121, 10862, 6060, 41119, 41416, - 74355, 4173, 0, 0, 0, 1906, 0, 11532, 74073, 0, 0, 1985, 6296, 9582, - 917895, 64287, 0, 0, 11428, 1730, 2457, 0, 19918, 10469, 0, 0, 7703, - 8840, 8035, 0, 0, 0, 0, 6129, 0, 0, 0, 0, 7874, 8681, 0, 0, 13136, 0, 0, - 74278, 63886, 118881, 9605, 73892, 13220, 0, 0, 5514, 0, 9228, 0, 0, 0, - 5240, 9811, 10012, 3096, 0, 0, 0, 66676, 65873, 0, 0, 0, 9501, 0, 1272, - 64536, 65465, 64654, 7467, 0, 1467, 10158, 10040, 0, 9519, 0, 0, 0, - 118899, 12193, 0, 0, 0, 0, 0, 19935, 0, 0, 0, 0, 0, 0, 5275, 0, 0, 8637, - 0, 0, 3789, 63880, 11471, 43554, 65862, 11474, 66332, 66603, 0, 0, 12042, - 0, 0, 9537, 3961, 12115, 0, 2605, 4500, 64561, 0, 4981, 0, 0, 63876, - 11667, 0, 0, 42362, 64686, 4499, 41649, 7589, 0, 0, 3237, 0, 120194, 0, - 8541, 0, 0, 41866, 0, 0, 0, 0, 0, 43555, 2823, 9559, 0, 41940, 8299, + 0, 7282, 78728, 65733, 4445, 0, 0, 3494, 74606, 6555, 0, 77976, 0, 0, + 78566, 0, 0, 65898, 0, 65312, 5447, 0, 12895, 65593, 4010, 0, 41106, 0, + 65804, 0, 41105, 0, 65820, 6232, 0, 0, 0, 43608, 119091, 0, 6538, 4335, + 78364, 3941, 41122, 11061, 78363, 64892, 9113, 1954, 12155, 0, 42878, + 11500, 0, 0, 74578, 0, 65832, 0, 0, 0, 77975, 0, 4586, 0, 350, 10951, 0, + 509, 0, 0, 0, 0, 0, 5133, 0, 0, 9500, 0, 12162, 64741, 0, 9354, 0, 0, 0, + 2496, 11516, 944, 118851, 3890, 12168, 1438, 0, 0, 0, 41947, 1220, + 120828, 0, 0, 0, 1571, 42630, 41949, 42805, 8270, 943, 564, 0, 312, + 41980, 0, 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, 0, 0, 1985, 6296, 9582, 917895, 64287, 0, 78115, + 11428, 1730, 2457, 0, 19918, 10469, 0, 0, 7703, 8840, 8035, 0, 0, 0, 0, + 6129, 0, 0, 0, 0, 7874, 8681, 0, 0, 13136, 0, 0, 74278, 63886, 118881, + 9605, 73892, 13220, 0, 120274, 5514, 0, 9228, 0, 0, 0, 5240, 9811, 10012, + 3096, 0, 0, 0, 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, 0, 19935, 0, 0, 0, 0, 0, 0, 5275, 0, 0, 8637, 0, 0, 3789, 63880, + 11471, 43554, 65862, 11474, 66332, 66603, 0, 2426, 12042, 0, 0, 9537, + 3961, 12115, 0, 2605, 4500, 64561, 55224, 4981, 0, 0, 63876, 11667, + 42686, 77973, 42362, 64686, 4499, 41649, 7589, 0, 0, 3237, 0, 68215, 0, + 8541, 78298, 0, 41866, 0, 0, 0, 0, 0, 43555, 2823, 9559, 0, 41940, 8299, 41945, 0, 41941, 3308, 7190, 64880, 8614, 65220, 41493, 0, 41699, 10762, 0, 12999, 0, 0, 8106, 4128, 0, 0, 4494, 0, 4012, 10395, 0, 119567, 65447, 0, 0, 11004, 695, 739, 696, 7611, 0, 42755, 74802, 9227, 7506, 7510, 0, 691, 738, 7511, 7512, 7515, 3868, 688, 41847, 690, 2548, 737, 974, 8003, - 0, 0, 0, 0, 3985, 0, 65860, 63921, 7051, 74208, 4682, 0, 12809, 6406, - 4685, 0, 10879, 10347, 4680, 9055, 0, 3851, 8132, 74325, 0, 917907, 0, - 41958, 119176, 917908, 0, 0, 0, 0, 7643, 42373, 11714, 67587, 43568, 0, - 11717, 7650, 10594, 64951, 7647, 7649, 0, 7646, 0, 0, 9651, 0, 3891, 0, - 0, 2337, 1735, 74324, 67860, 5452, 0, 0, 43561, 0, 0, 74146, 1860, 7495, - 7580, 5812, 7497, 7584, 0, 0, 0, 0, 7727, 0, 8498, 0, 8949, 3065, 0, 0, - 1569, 0, 12534, 12124, 7690, 0, 12533, 0, 6418, 4543, 0, 6969, 0, 74800, - 0, 0, 11980, 0, 0, 63894, 0, 12282, 66192, 0, 0, 8850, 74275, 9238, 0, 0, - 0, 0, 0, 12791, 0, 0, 0, 0, 73732, 12793, 12900, 0, 10950, 0, 0, 12790, - 41400, 119128, 0, 12792, 0, 0, 1744, 12789, 10366, 12317, 41310, 0, - 41399, 0, 0, 0, 0, 12690, 0, 0, 0, 0, 41652, 2974, 0, 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, 0, 0, 0, 0, 6413, - 6550, 0, 1940, 0, 66223, 220, 65193, 43551, 10678, 10044, 0, 0, 0, 0, - 6403, 5707, 10393, 0, 0, 66614, 0, 0, 0, 10297, 0, 3742, 0, 3959, 0, 0, - 0, 2467, 0, 6003, 63844, 6663, 8040, 0, 63845, 4182, 0, 4676, 120501, 0, - 0, 2510, 0, 10208, 0, 0, 11540, 43546, 12186, 0, 41060, 0, 0, 9083, 0, 0, - 0, 1559, 63831, 9677, 120260, 0, 65256, 0, 74070, 0, 0, 365, 12056, - 43027, 0, 41716, 0, 0, 0, 5516, 2845, 7717, 8036, 41717, 73827, 544, - 12045, 6278, 0, 5515, 0, 0, 0, 0, 43221, 65194, 0, 5517, 0, 0, 0, 67884, - 0, 67890, 67885, 67880, 67881, 67882, 67883, 0, 0, 67879, 0, 1902, 67887, - 9638, 12976, 0, 12483, 67872, 41769, 0, 41765, 0, 6667, 67874, 7556, - 67878, 74351, 11264, 989, 67876, 67889, 0, 1311, 0, 4326, 11000, 63824, - 13068, 10932, 0, 6917, 0, 0, 949, 917595, 0, 6148, 8605, 42253, 917967, - 0, 0, 0, 0, 0, 0, 63871, 0, 41796, 1269, 6530, 0, 65057, 0, 5144, 12221, - 0, 0, 4431, 4331, 0, 0, 41834, 5279, 0, 10336, 8312, 0, 118861, 0, 0, - 119654, 66036, 0, 0, 6428, 42270, 0, 0, 118866, 0, 5256, 1067, 255, - 12131, 0, 9493, 0, 41014, 11793, 0, 0, 74394, 43594, 10653, 0, 0, 119632, - 0, 6560, 7016, 74274, 0, 43556, 3929, 0, 6614, 2768, 0, 9746, 5135, - 11811, 12796, 11953, 0, 0, 5139, 346, 74303, 6305, 12795, 4675, 5168, 0, - 0, 74315, 74361, 8253, 8817, 1136, 0, 43563, 0, 0, 0, 65285, 8230, 9365, - 0, 0, 0, 0, 0, 4041, 0, 2357, 0, 12786, 229, 119885, 119884, 0, 43552, + 7406, 0, 0, 0, 3985, 0, 65860, 63921, 7051, 69777, 4682, 917805, 12809, + 6406, 4685, 0, 10879, 10347, 4680, 6341, 0, 3851, 8132, 74325, 0, 917907, + 0, 41958, 119176, 917908, 0, 0, 42657, 0, 7643, 42373, 11714, 67587, + 43568, 0, 11717, 7650, 10594, 64951, 7647, 7649, 0, 7646, 0, 78082, 9651, + 0, 3891, 0, 0, 2337, 1735, 74324, 67860, 5452, 0, 0, 43561, 0, 0, 74146, + 1860, 7495, 7580, 5812, 7497, 7584, 0, 0, 0, 120347, 7727, 0, 8498, + 69818, 8949, 3065, 42719, 0, 1569, 0, 12534, 12124, 7690, 0, 12533, 0, + 6418, 4543, 78086, 6969, 0, 74800, 0, 0, 11980, 0, 0, 63894, 120760, + 12282, 66192, 0, 74592, 8850, 74275, 9238, 10617, 917545, 0, 0, 0, 12791, + 0, 0, 0, 4447, 73732, 12793, 12900, 0, 10950, 0, 78087, 12790, 41400, + 119128, 0, 12792, 42232, 0, 1744, 12789, 10366, 12317, 41310, 0, 41399, + 0, 0, 55258, 0, 12690, 0, 0, 43672, 0, 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, 0, 77829, 0, 0, 6413, + 6550, 0, 1940, 0, 43637, 220, 65193, 43551, 10678, 10044, 0, 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, 63845, 4182, 78171, 4676, + 120501, 0, 0, 2510, 0, 10208, 78168, 0, 11540, 43546, 6692, 0, 41060, 0, + 0, 9083, 0, 0, 78144, 1559, 63831, 9677, 120260, 0, 65256, 0, 74070, 0, + 0, 365, 12056, 43027, 120423, 41716, 0, 0, 120472, 5516, 2845, 7717, + 8036, 41717, 73827, 544, 12045, 6278, 0, 5515, 0, 0, 0, 65339, 43221, + 65194, 0, 5517, 0, 0, 74841, 67884, 0, 67890, 67885, 67880, 67881, 67882, + 67883, 0, 0, 67879, 0, 1902, 67887, 9638, 12976, 0, 12483, 12368, 41769, + 42726, 41765, 0, 6667, 67874, 7556, 67878, 74351, 11264, 989, 42677, + 67889, 0, 1311, 0, 4326, 11000, 63824, 13068, 10932, 0, 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, 0, 0, + 41834, 5279, 0, 10336, 8312, 0, 42701, 0, 0, 78165, 66036, 0, 0, 6428, + 42270, 0, 0, 43059, 42666, 5256, 1067, 255, 12131, 0, 9493, 0, 41014, + 11793, 0, 0, 74394, 43460, 10653, 42723, 0, 119632, 0, 6560, 7016, 74274, + 0, 43556, 3929, 0, 6614, 2768, 0, 9746, 5135, 11811, 12796, 11953, 0, + 69761, 5139, 346, 74303, 6305, 12795, 4675, 5168, 78552, 0, 74315, 74361, + 8253, 8817, 1136, 0, 43563, 0, 0, 194750, 7392, 8230, 9365, 0, 0, 0, 0, + 0, 4041, 0, 2357, 43240, 12786, 229, 119885, 119884, 44004, 43552, 119881, 12350, 65554, 119882, 119877, 119876, 12785, 63863, 119873, 7770, - 10712, 64853, 12686, 118916, 42375, 0, 0, 66352, 10470, 0, 11059, 10791, - 0, 450, 0, 0, 10432, 12097, 5450, 64691, 1233, 0, 63856, 0, 66338, 0, 0, - 1839, 118799, 0, 10927, 1701, 0, 2388, 41749, 41761, 5453, 8361, 119865, - 41758, 5444, 41763, 64889, 119860, 119863, 119862, 0, 0, 0, 66432, 8801, - 3053, 4340, 0, 0, 65812, 0, 0, 41824, 0, 194801, 194800, 194803, 118997, - 194805, 194804, 194807, 194806, 194809, 194808, 0, 0, 4493, 4336, 0, - 2314, 43602, 0, 119325, 194811, 42439, 64638, 42327, 43528, 4489, 194791, - 0, 194793, 1912, 42385, 10306, 10370, 0, 0, 8867, 10250, 10258, 2712, - 1635, 194798, 1410, 0, 0, 118878, 0, 0, 0, 0, 559, 0, 41825, 0, 0, 4892, - 74016, 194781, 6542, 41957, 0, 5777, 0, 759, 65749, 65750, 65248, 12788, - 64487, 64552, 0, 10223, 42062, 0, 0, 0, 3668, 65754, 43560, 12226, 0, - 65149, 2340, 41959, 194786, 194785, 194788, 120154, 65747, 10937, 2962, - 0, 2321, 3587, 65745, 0, 8921, 66013, 0, 0, 194769, 194768, 194771, - 194770, 2949, 66012, 194775, 194774, 2958, 194776, 41820, 43038, 2395, 0, - 0, 120043, 194778, 120058, 194780, 194779, 42809, 42807, 0, 120047, - 10198, 4150, 64371, 8318, 41790, 0, 41898, 2360, 41794, 917942, 0, 0, 0, - 0, 2418, 0, 2411, 11336, 799, 63823, 10276, 10308, 10372, 917541, 41772, - 42813, 2317, 10260, 118980, 119576, 0, 0, 10384, 0, 0, 0, 7753, 2351, - 6655, 64489, 0, 0, 0, 0, 42779, 230, 0, 0, 43549, 4855, 42150, 65739, - 5441, 41896, 10288, 10320, 0, 855, 7046, 6109, 65045, 63839, 119116, 0, - 10098, 0, 74145, 0, 10264, 10280, 9184, 10376, 7013, 4467, 0, 0, 0, - 41887, 0, 4862, 9735, 6537, 120591, 0, 3914, 119604, 0, 9065, 12961, 0, - 0, 0, 0, 289, 0, 4694, 11420, 4690, 0, 120514, 0, 4693, 0, 73919, 0, - 4688, 120454, 0, 0, 119629, 8238, 3110, 120162, 0, 120163, 6528, 0, - 43035, 120161, 218, 0, 1520, 0, 4786, 0, 43225, 0, 0, 120158, 10088, - 6548, 0, 120156, 0, 8988, 8888, 0, 0, 0, 0, 10666, 0, 73902, 0, 0, 0, 0, - 0, 0, 4689, 8932, 0, 65560, 119209, 74441, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 10065, 8207, 0, 0, 0, 0, 662, 0, 9244, 0, 0, 119261, 0, 0, 0, 0, 41929, - 0, 0, 0, 41926, 0, 120443, 10513, 64637, 0, 0, 52, 13118, 6475, 0, 0, - 12095, 10225, 4812, 0, 0, 0, 74085, 0, 3978, 0, 0, 0, 11582, 120761, - 12281, 0, 6544, 13241, 0, 0, 0, 194860, 11765, 65258, 10369, 0, 1585, + 10712, 64853, 12686, 118916, 42375, 0, 127238, 66352, 10470, 0, 11059, + 10791, 917944, 450, 0, 0, 10432, 12097, 5450, 64691, 1233, 0, 44009, + 78284, 66338, 0, 0, 1839, 118799, 0, 10927, 1701, 0, 2388, 41749, 41761, + 5453, 8361, 119865, 41758, 5444, 41763, 64889, 119860, 119863, 78677, 0, + 0, 78174, 66432, 8801, 3053, 4340, 0, 0, 65812, 917831, 0, 41824, 0, + 194801, 194800, 194803, 42700, 194805, 194804, 194807, 78676, 120413, + 194808, 0, 0, 4493, 4336, 0, 2314, 43602, 78826, 119325, 194811, 42439, + 64638, 42327, 43528, 4489, 194791, 0, 194793, 1912, 42385, 10306, 10370, + 0, 0, 8867, 10250, 10258, 2712, 1635, 78821, 1410, 0, 0, 118878, 0, 0, + 9919, 0, 559, 0, 41825, 0, 78188, 4892, 74016, 194781, 6542, 41957, 0, + 5777, 0, 759, 65749, 2079, 65248, 12788, 64487, 64552, 0, 10223, 42062, + 0, 0, 0, 3668, 65754, 43560, 12226, 0, 65149, 2340, 41959, 194786, + 194785, 194788, 43618, 65747, 10937, 2962, 0, 2321, 3587, 65745, 0, 8921, + 9952, 0, 0, 42714, 9951, 43409, 194770, 2949, 66012, 194775, 194774, + 2958, 68359, 41820, 43038, 2395, 0, 9976, 120043, 194778, 120058, 68220, + 194779, 42809, 42807, 0, 120046, 10198, 4150, 64371, 8318, 41790, 0, + 41898, 2360, 41794, 917942, 0, 0, 0, 0, 2418, 0, 2411, 11336, 799, 63823, + 10276, 10308, 10372, 917541, 41772, 42813, 2317, 10260, 118980, 55284, 0, + 0, 10384, 0, 0, 0, 7753, 2351, 6655, 64489, 0, 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, 0, 10264, 10280, + 9184, 10376, 7013, 4467, 0, 0, 0, 41887, 0, 4862, 9735, 6537, 120591, 0, + 3914, 119604, 0, 9065, 12961, 0, 0, 0, 0, 289, 0, 4694, 11420, 4690, 0, + 120514, 917978, 4693, 0, 42724, 0, 4688, 120454, 0, 0, 119629, 8238, + 3110, 120162, 0, 120163, 6528, 127553, 43035, 120161, 218, 0, 1520, 0, + 4786, 0, 43225, 4602, 0, 78167, 10088, 6548, 0, 120156, 43978, 8988, + 8888, 0, 0, 0, 0, 10666, 0, 73902, 0, 0, 0, 9975, 0, 119902, 4689, 8932, + 0, 65560, 119209, 74441, 78810, 0, 0, 0, 0, 0, 0, 0, 0, 10065, 8207, 0, + 120539, 0, 0, 662, 0, 9244, 0, 0, 119261, 0, 0, 0, 0, 41929, 0, 0, 66674, + 41926, 120408, 120443, 10513, 64637, 194862, 0, 52, 13118, 6475, 0, 0, + 12095, 10225, 4812, 0, 0, 0, 74085, 0, 3978, 0, 917945, 0, 11582, 120761, + 12281, 0, 6544, 13241, 0, 69782, 0, 194860, 11765, 65258, 10369, 0, 1585, 7192, 10249, 422, 1500, 2036, 986, 194859, 64394, 5781, 5599, 64294, - 2494, 120450, 4861, 74021, 64334, 0, 0, 0, 0, 65102, 8961, 0, 10243, - 10245, 0, 0, 0, 120453, 64821, 9478, 2508, 0, 0, 202, 0, 74131, 1242, 0, - 0, 63940, 0, 64533, 0, 0, 67842, 11990, 0, 63939, 0, 65440, 2504, 0, 0, - 64829, 0, 6943, 0, 5859, 0, 2858, 0, 74294, 0, 74305, 0, 119027, 12992, - 2753, 1936, 74491, 0, 2751, 12662, 2763, 8953, 64701, 10731, 12922, 0, 0, - 0, 0, 0, 0, 74128, 2856, 119910, 47, 119911, 126986, 65858, 0, 0, 0, - 7899, 0, 8417, 65903, 7072, 0, 0, 4033, 0, 66474, 0, 0, 212, 64600, 1903, - 12320, 0, 0, 0, 0, 8915, 2759, 945, 0, 0, 0, 0, 0, 1291, 74828, 0, 0, - 9531, 13155, 8505, 0, 12062, 0, 0, 65487, 0, 41837, 120611, 120432, 0, 0, - 0, 120433, 0, 63935, 73962, 0, 64787, 43524, 0, 64426, 0, 0, 0, 0, 65664, - 64785, 9843, 0, 8674, 0, 0, 0, 0, 12624, 0, 1673, 4811, 0, 5986, 9338, - 3046, 74480, 5985, 917928, 119598, 9820, 0, 12187, 0, 0, 5984, 0, 43308, - 4393, 0, 0, 0, 0, 0, 74826, 64733, 0, 0, 3491, 0, 0, 0, 3514, 65485, 0, - 7492, 0, 0, 0, 7514, 0, 0, 194731, 7502, 7587, 0, 0, 0, 63925, 0, 7610, - 219, 0, 0, 692, 43588, 74433, 41635, 0, 9688, 0, 9535, 0, 0, 0, 0, 0, - 64610, 11804, 0, 0, 7453, 0, 8013, 0, 0, 0, 8895, 5253, 0, 5458, 0, 2866, - 0, 0, 65111, 0, 12018, 120484, 0, 0, 0, 8962, 0, 9641, 66653, 7059, 0, 0, - 9604, 0, 7441, 63826, 0, 118941, 64392, 0, 0, 2844, 0, 41974, 0, 12139, - 0, 0, 0, 3358, 65295, 0, 3104, 0, 0, 0, 0, 5308, 0, 290, 0, 0, 2862, - 2792, 195088, 0, 0, 3268, 66591, 0, 6552, 42367, 7035, 120558, 0, 0, - 1814, 0, 10240, 0, 195092, 0, 119020, 0, 0, 42646, 7606, 2591, 2837, - 4341, 0, 64482, 0, 8163, 65270, 0, 0, 0, 9112, 74431, 863, 9490, 0, 0, - 43323, 120513, 0, 9071, 0, 0, 3654, 0, 9637, 0, 2535, 65504, 7653, 40993, - 0, 66587, 195098, 0, 0, 0, 11006, 12927, 7807, 8073, 0, 10629, 0, 74088, - 3056, 10823, 0, 0, 8762, 10508, 74506, 73770, 63994, 43193, 10737, 3463, - 0, 0, 66633, 8695, 4815, 11322, 5811, 12345, 7049, 0, 5195, 0, 0, 66639, - 0, 0, 0, 0, 0, 120561, 1262, 0, 6561, 19939, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 119907, 64612, 11991, 0, 0, 0, 1502, 0, 0, 9107, 0, 5702, 3655, 0, 8430, - 0, 74132, 0, 0, 74057, 9603, 0, 5254, 120742, 7724, 74388, 74838, 10796, - 5129, 0, 0, 590, 7579, 5614, 5893, 194744, 11720, 0, 11721, 0, 0, 0, - 120541, 66038, 4793, 67851, 11726, 0, 74204, 0, 0, 917600, 894, 300, 0, - 12306, 66235, 0, 0, 0, 2562, 0, 0, 42503, 0, 11652, 0, 0, 119241, 0, 0, - 5096, 5095, 2863, 3424, 0, 10454, 42530, 5094, 119638, 0, 13156, 0, - 10832, 5093, 0, 0, 0, 5092, 10708, 11327, 0, 5091, 176, 0, 9153, 4104, 0, - 0, 1215, 0, 5744, 12272, 9832, 11777, 0, 0, 42881, 0, 8980, 118988, - 67861, 8844, 7433, 0, 0, 4278, 0, 0, 0, 0, 9074, 4348, 0, 65558, 65946, - 8113, 7087, 5255, 1786, 661, 0, 0, 0, 74423, 0, 586, 74414, 64359, 1267, - 0, 0, 0, 65731, 0, 0, 3621, 0, 66666, 0, 0, 6562, 12928, 0, 1228, 65490, - 11383, 0, 0, 0, 1714, 74406, 0, 0, 0, 0, 66225, 0, 0, 0, 11436, 119615, - 64, 0, 0, 10291, 10323, 2826, 0, 0, 0, 42008, 9708, 0, 0, 42011, 41999, - 0, 12206, 5839, 1702, 1240, 74065, 6286, 0, 0, 65833, 0, 0, 1765, 0, 0, - 65588, 0, 0, 0, 8401, 0, 42014, 0, 7030, 0, 10479, 64959, 2852, 0, 0, 0, - 0, 0, 0, 6963, 0, 12667, 0, 74786, 10147, 12935, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 64947, 12467, 2864, 64719, 1148, 10435, 11462, 41675, 0, 2765, 0, - 0, 0, 0, 0, 0, 66662, 0, 0, 9364, 194685, 74416, 0, 0, 119244, 263, - 10449, 41288, 0, 41839, 0, 0, 0, 0, 6931, 0, 64355, 7177, 120530, 0, 0, - 0, 4262, 10285, 10722, 42020, 0, 0, 6992, 42019, 0, 41290, 0, 750, 0, 0, - 10163, 0, 74066, 7032, 5954, 64931, 4314, 0, 198, 0, 730, 0, 0, 0, 0, - 13165, 10814, 74171, 42804, 678, 8240, 118960, 0, 41378, 11008, 6938, 0, - 0, 42812, 66246, 120560, 0, 0, 0, 3892, 0, 0, 0, 66045, 41470, 64805, 0, - 0, 0, 118982, 0, 497, 12100, 5953, 0, 7796, 0, 0, 73831, 0, 10293, 5952, - 1281, 0, 0, 0, 10677, 604, 41097, 9182, 1859, 0, 0, 3425, 0, 0, 2836, 0, - 0, 9707, 0, 43202, 0, 0, 65199, 1738, 0, 0, 2832, 0, 9670, 12937, 0, 0, - 0, 0, 2822, 0, 4436, 0, 0, 73752, 0, 64872, 0, 1331, 0, 0, 0, 12708, 0, - 5090, 5089, 0, 0, 119109, 0, 0, 319, 118931, 0, 9477, 0, 0, 5087, 0, - 7640, 96, 5086, 0, 0, 0, 5085, 64286, 0, 0, 41422, 0, 119901, 42356, - 3772, 0, 0, 5011, 0, 0, 0, 0, 0, 0, 6677, 7601, 0, 591, 64419, 118953, 0, - 0, 118923, 0, 0, 10939, 6106, 6933, 41271, 0, 119903, 4534, 41270, 0, 0, - 65574, 0, 9224, 0, 3671, 8976, 0, 0, 41275, 0, 0, 0, 7963, 42013, 0, 568, - 0, 41273, 0, 0, 0, 0, 9715, 0, 8258, 11753, 74820, 0, 9602, 118919, 42, - 0, 0, 0, 0, 7458, 0, 0, 65385, 0, 0, 11958, 0, 0, 0, 6254, 0, 66336, + 2494, 120450, 4861, 74021, 64334, 78203, 0, 0, 0, 65102, 8961, 65842, + 10243, 10245, 0, 120410, 0, 120453, 64821, 9478, 2508, 0, 0, 202, 0, + 74131, 1242, 65514, 0, 63940, 0, 64533, 120129, 0, 67842, 11990, 0, + 63939, 43375, 65440, 2504, 0, 78671, 64829, 0, 6943, 917934, 5859, 0, + 2858, 0, 74294, 0, 69239, 0, 119027, 12992, 2753, 1936, 74491, 0, 2751, + 12662, 2763, 8953, 64701, 10731, 12922, 7052, 917839, 0, 0, 0, 63920, + 74128, 2856, 119910, 47, 119911, 126986, 65858, 0, 0, 0, 7899, 0, 8417, + 65903, 7072, 0, 0, 4033, 0, 43992, 0, 0, 212, 64600, 1903, 12320, 0, 0, + 0, 0, 8915, 2759, 945, 6689, 0, 0, 0, 0, 1291, 74828, 0, 0, 9531, 13155, + 8505, 68379, 12062, 0, 0, 65487, 0, 41837, 120611, 120432, 0, 0, 0, + 120433, 0, 63935, 73962, 120806, 64787, 43524, 0, 64426, 0, 0, 0, 0, + 65664, 6693, 9843, 0, 8674, 0, 0, 0, 0, 12624, 0, 1673, 4811, 0, 5986, + 9338, 3046, 74480, 5985, 917928, 119598, 9820, 0, 12187, 0, 0, 5984, 0, + 43308, 4393, 0, 0, 0, 0, 0, 74826, 64733, 0, 0, 3491, 0, 0, 0, 3514, + 65485, 0, 7492, 0, 74605, 119134, 7514, 0, 0, 194731, 7502, 7587, 68353, + 0, 0, 63925, 0, 7610, 219, 0, 0, 692, 43588, 74433, 41635, 43241, 9688, + 0, 9535, 0, 0, 0, 64530, 0, 64610, 11804, 0, 0, 7453, 0, 8013, 0, 0, 0, + 8895, 5253, 0, 5458, 0, 2866, 0, 0, 65111, 68433, 6700, 120484, 0, 0, 0, + 8962, 77960, 9641, 43694, 7059, 0, 0, 9604, 78700, 7441, 63826, 0, + 118941, 64392, 0, 0, 2844, 0, 41974, 0, 12139, 0, 0, 0, 3358, 65295, 0, + 3104, 0, 0, 194765, 0, 5308, 0, 290, 0, 0, 2862, 2792, 195088, 0, 0, + 3268, 66591, 0, 6552, 42367, 7035, 120558, 0, 0, 1814, 0, 10240, 0, + 74305, 0, 74528, 0, 0, 42646, 7606, 2591, 2837, 4341, 77956, 64482, 0, + 8163, 65270, 0, 0, 0, 9112, 74431, 863, 9490, 119898, 0, 43323, 120513, + 119897, 9071, 0, 0, 3654, 7789, 9637, 0, 2535, 65504, 7653, 40993, + 119899, 66587, 195098, 0, 0, 0, 11006, 12927, 7807, 8073, 0, 10629, 0, + 74088, 3056, 10823, 0, 127327, 8762, 10508, 74506, 73770, 43969, 43193, + 10737, 3463, 0, 0, 66633, 8695, 4815, 11322, 5811, 12345, 7049, 0, 5195, + 0, 0, 66639, 0, 0, 0, 0, 0, 120561, 1262, 0, 6561, 19939, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 119907, 64612, 11991, 0, 0, 0, 1502, 0, 0, 9107, 0, 5702, + 3655, 67661, 8430, 0, 74132, 120758, 0, 74057, 9603, 0, 5254, 120742, + 7724, 74388, 68375, 10796, 5129, 0, 0, 590, 7579, 5614, 5893, 194744, + 11720, 0, 11721, 0, 4798, 0, 119316, 66038, 4793, 67851, 11726, 0, 74204, + 68610, 0, 68626, 894, 300, 0, 12306, 66235, 8004, 0, 0, 2562, 0, 0, + 42503, 0, 11652, 0, 0, 119241, 0, 0, 5096, 5095, 2863, 3424, 0, 10454, + 42530, 5094, 119638, 0, 13156, 0, 10832, 5093, 0, 0, 0, 5092, 10708, + 11327, 0, 5091, 176, 0, 9153, 4104, 78599, 78601, 1215, 42712, 5744, + 12272, 9832, 11777, 0, 127371, 42881, 0, 8980, 118988, 67861, 8844, 7209, + 0, 0, 4278, 0, 0, 0, 0, 9074, 4348, 0, 65558, 65946, 8113, 7087, 5255, + 1786, 661, 0, 0, 0, 74423, 0, 586, 74414, 64359, 1267, 0, 65468, 0, + 65731, 0, 0, 3621, 120473, 66666, 64211, 0, 6562, 12928, 0, 1228, 65490, + 11383, 0, 0, 0, 1714, 74406, 0, 0, 0, 0, 66225, 0, 0, 42660, 11436, 2070, + 64, 120694, 0, 10291, 10323, 2826, 0, 0, 0, 42008, 9708, 42710, 0, 42011, + 41999, 0, 12206, 5839, 1702, 1240, 74065, 6286, 0, 0, 65833, 77848, 0, + 1765, 0, 0, 65588, 0, 0, 0, 8401, 0, 42014, 0, 7030, 0, 10479, 64959, + 2852, 0, 0, 0, 0, 195061, 917951, 6963, 0, 12667, 64540, 74786, 10147, + 12935, 0, 0, 0, 0, 0, 78757, 0, 0, 0, 0, 64947, 12467, 2864, 64719, 1148, + 10435, 11462, 41675, 0, 2765, 0, 0, 0, 120719, 0, 0, 66662, 0, 78133, + 9364, 194685, 74416, 0, 0, 77988, 263, 10449, 41288, 0, 41839, 78387, 0, + 77986, 0, 6931, 0, 64355, 7177, 120530, 0, 0, 0, 4262, 10285, 10722, + 42020, 0, 6806, 6992, 42019, 0, 41290, 0, 750, 0, 0, 10163, 63913, 74066, + 7032, 5954, 64931, 4314, 0, 198, 68453, 730, 0, 63907, 77993, 78891, + 13165, 10814, 74171, 42804, 678, 8240, 78015, 0, 41378, 11008, 6938, 0, + 0, 2097, 66246, 120560, 0, 0, 0, 3892, 68632, 0, 6712, 66045, 41470, + 64805, 0, 0, 0, 64801, 0, 497, 12100, 5953, 0, 7796, 0, 43254, 73831, 0, + 10293, 5952, 1281, 0, 0, 0, 10677, 604, 41097, 9182, 1859, 0, 0, 3425, 0, + 0, 2836, 0, 0, 9707, 0, 43202, 0, 0, 65199, 1738, 917818, 0, 2832, 0, + 9670, 12937, 0, 66374, 0, 0, 2822, 0, 4436, 0, 0, 73752, 0, 64872, 0, + 1331, 0, 0, 0, 12708, 0, 5090, 5089, 0, 0, 119109, 0, 0, 319, 118931, + 43479, 9477, 0, 0, 5087, 0, 7640, 96, 5086, 0, 0, 0, 5085, 64286, 0, 0, + 41422, 0, 119901, 42356, 3772, 0, 0, 5011, 0, 0, 0, 0, 0, 127241, 6677, + 7601, 0, 591, 64419, 118953, 0, 0, 118923, 73734, 0, 10939, 6106, 6933, + 41271, 6760, 119903, 4534, 41270, 917962, 0, 65574, 0, 9224, 0, 3671, + 8976, 0, 0, 41275, 6372, 0, 55261, 7963, 6371, 0, 568, 0, 41273, 0, 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, 0, 42858, 11789, 65868, 5557, 917946, 9737, 13109, 0, - 9467, 5558, 8878, 0, 195036, 7451, 7435, 10146, 0, 9086, 64566, 0, 64584, - 7437, 7454, 12594, 0, 0, 4546, 7731, 0, 917948, 74243, 0, 3805, 0, 0, 0, - 41008, 0, 6307, 19949, 0, 7544, 0, 43525, 0, 0, 10152, 64422, 65091, - 119113, 7602, 64729, 0, 43521, 0, 42302, 0, 43523, 41447, 5559, 0, 8704, - 2397, 5556, 0, 0, 0, 9011, 9630, 0, 0, 0, 5506, 0, 1911, 66652, 0, 12598, - 8845, 66698, 0, 10792, 8889, 0, 6951, 0, 64751, 0, 66622, 0, 0, 74364, 0, - 0, 0, 74365, 7552, 0, 0, 65384, 7223, 4559, 0, 1956, 43138, 7024, 65728, - 64501, 1210, 0, 65175, 10184, 43140, 65727, 0, 0, 0, 38, 8533, 66669, 0, - 0, 0, 0, 4357, 0, 0, 0, 74233, 119846, 119852, 42860, 119838, 10941, - 65721, 6962, 0, 0, 0, 0, 11014, 0, 8942, 12000, 0, 0, 0, 11974, 0, 42772, - 0, 11650, 5013, 0, 0, 66210, 118914, 6613, 0, 0, 0, 0, 0, 64714, 0, 0, 0, - 12120, 0, 0, 11024, 74811, 0, 10563, 0, 0, 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, 0, 0, 3483, 127122, 1989, 0, 0, 9104, 3503, 65375, 0, 0, 42633, 1864, - 0, 74306, 41446, 2540, 7736, 0, 74064, 0, 10521, 0, 42173, 9705, 74124, - 8604, 6955, 10916, 0, 6149, 3887, 19956, 1411, 2824, 0, 10106, 0, 1403, - 0, 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, 0, 0, 0, 0, - 74585, 41391, 0, 917903, 376, 6987, 9221, 0, 0, 8823, 0, 12943, 65185, - 41869, 12619, 0, 10154, 0, 74439, 2039, 0, 7446, 1684, 63979, 10974, 458, - 120620, 0, 0, 0, 11916, 65016, 0, 0, 42115, 0, 12288, 0, 0, 1493, 42111, - 7553, 4097, 0, 13080, 0, 65808, 6610, 6030, 8059, 7508, 41636, 0, 0, 0, - 8794, 41278, 41629, 12154, 0, 41277, 64658, 0, 64380, 6625, 0, 19904, 0, - 0, 0, 65371, 7078, 0, 833, 0, 74592, 0, 10979, 41953, 0, 41434, 6062, 0, - 0, 19916, 6913, 933, 1341, 9842, 0, 65744, 0, 0, 0, 0, 41615, 10105, - 65810, 0, 41632, 7493, 0, 0, 41622, 0, 0, 119556, 74584, 7632, 9716, - 19954, 9805, 5990, 900, 0, 63957, 0, 0, 3612, 0, 64376, 0, 5389, 0, 0, - 65938, 2839, 9621, 582, 0, 74368, 3749, 6949, 7569, 74061, 0, 0, 6956, - 4403, 19962, 65559, 3299, 0, 0, 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, 0, 41183, 12907, 10271, 10287, - 684, 74185, 0, 2854, 119586, 4592, 65755, 0, 0, 11963, 65753, 0, 0, 0, 0, - 0, 9881, 0, 65757, 3415, 0, 0, 8648, 0, 118886, 43047, 0, 13180, 0, 418, - 0, 0, 10295, 10327, 10391, 41752, 74339, 8641, 41449, 0, 0, 0, 10911, - 6942, 0, 1024, 42849, 41751, 0, 8941, 0, 4554, 0, 9023, 11685, 0, 0, 0, - 0, 11437, 0, 0, 120700, 63967, 0, 41206, 120724, 9049, 41185, 43166, 0, - 11680, 0, 11686, 0, 65224, 4565, 4655, 119553, 0, 0, 64523, 10343, 10407, - 0, 66671, 11466, 0, 0, 42890, 0, 12050, 194750, 2860, 0, 0, 0, 42792, - 5743, 10424, 12065, 42872, 0, 0, 0, 8875, 0, 0, 917991, 7531, 12847, - 2413, 0, 0, 962, 0, 12855, 41196, 42564, 0, 1582, 0, 5508, 0, 0, 0, - 10801, 0, 118798, 0, 7173, 496, 10439, 4313, 64607, 119557, 7860, 0, 906, - 42793, 2842, 6405, 64722, 13132, 798, 64694, 12801, 8406, 1153, 0, 64788, - 0, 8054, 9174, 194749, 917976, 0, 0, 41611, 4642, 66574, 11556, 0, 0, 0, - 42089, 0, 9008, 0, 0, 195096, 42079, 917981, 917996, 42513, 0, 42842, - 73985, 0, 118974, 127003, 0, 0, 0, 0, 11335, 64069, 42093, 3920, 0, 0, 0, - 0, 4580, 41967, 0, 64384, 0, 119158, 3021, 42004, 0, 0, 42317, 41998, 0, - 6946, 0, 0, 0, 0, 65204, 0, 68113, 65196, 9880, 42010, 0, 64589, 10111, - 64875, 0, 0, 0, 11360, 0, 0, 0, 0, 42149, 0, 0, 0, 64941, 0, 0, 0, 0, - 65671, 4110, 66005, 6959, 10929, 119110, 0, 66703, 0, 8617, 41982, 6025, - 0, 0, 0, 0, 0, 9597, 42099, 43172, 0, 10117, 0, 0, 41642, 0, 0, 0, 8301, - 0, 0, 187, 0, 65669, 0, 4963, 0, 0, 0, 8964, 65676, 65785, 0, 41948, 0, - 0, 0, 41942, 65449, 3160, 10081, 13226, 42121, 42475, 0, 0, 41766, 0, - 65882, 0, 41760, 1189, 905, 480, 10985, 41733, 67859, 9629, 42436, 1745, - 0, 73835, 7888, 0, 0, 0, 0, 41507, 8806, 7023, 0, 74279, 64540, 0, 7867, - 0, 6236, 0, 0, 10505, 0, 12851, 118948, 348, 5474, 0, 3103, 0, 41753, 0, - 0, 0, 0, 0, 41739, 0, 42515, 10931, 41756, 43347, 42560, 5391, 41746, - 119147, 0, 41259, 5561, 74360, 2691, 0, 65553, 7933, 5562, 0, 0, 41262, - 0, 64421, 74846, 41251, 0, 0, 3979, 0, 0, 74813, 0, 0, 0, 0, 118847, - 41266, 0, 0, 917630, 10585, 65741, 41737, 9574, 2666, 0, 41738, 831, 419, - 13126, 10716, 0, 42822, 0, 6434, 0, 6939, 7766, 6432, 0, 0, 916, 769, - 41742, 11968, 120557, 6433, 5563, 547, 1943, 6439, 5560, 4994, 487, 0, - 4497, 3754, 0, 120424, 9039, 0, 41776, 0, 8716, 1595, 119206, 0, 0, - 74260, 0, 43267, 0, 0, 0, 12185, 0, 0, 0, 0, 0, 42856, 8634, 0, 0, 4209, - 120702, 0, 65879, 41538, 65612, 0, 669, 5679, 0, 0, 118961, 0, 0, 5678, - 11821, 0, 0, 460, 0, 0, 0, 0, 120747, 0, 0, 0, 119022, 0, 0, 0, 7782, - 9044, 4974, 11760, 917547, 7577, 65711, 41912, 1216, 0, 0, 5792, 0, 0, 0, - 0, 42264, 12244, 0, 5683, 0, 0, 0, 1549, 0, 0, 120398, 5682, 6206, 8670, - 74520, 5680, 917568, 10001, 0, 0, 1449, 10241, 0, 0, 0, 10552, 64342, - 41922, 0, 8584, 0, 5567, 2717, 0, 0, 5564, 42886, 41908, 42882, 5565, 0, - 0, 0, 65708, 65709, 5566, 0, 65704, 65705, 11904, 42875, 0, 42539, 5942, - 8468, 0, 10361, 10425, 65697, 65698, 65699, 0, 66598, 0, 64664, 10647, 0, - 0, 0, 457, 0, 65701, 1934, 43006, 0, 8802, 0, 65130, 0, 0, 6087, 0, 0, - 41757, 0, 8043, 8950, 65694, 64485, 43534, 10457, 0, 11961, 119006, 0, 0, - 0, 0, 0, 65515, 9499, 10035, 13069, 0, 0, 9889, 68184, 42806, 0, 7256, 0, - 0, 1667, 42161, 0, 42428, 0, 6934, 0, 10802, 64861, 6556, 0, 0, 8101, - 3610, 0, 41748, 4995, 955, 65907, 119208, 5350, 64339, 0, 64549, 10875, - 917956, 5477, 65692, 0, 0, 0, 12896, 10456, 917954, 0, 3874, 0, 0, 0, 0, - 0, 0, 65603, 0, 65687, 0, 41038, 74009, 119570, 67857, 8536, 0, 0, 0, - 74432, 724, 0, 1455, 0, 7183, 64583, 119233, 0, 4175, 917962, 0, 0, 939, - 0, 43520, 0, 74569, 917958, 0, 917959, 917945, 194704, 10788, 6088, 0, 0, - 190, 0, 12593, 0, 8188, 64408, 0, 4417, 0, 0, 41744, 0, 7827, 0, 6965, 0, - 0, 13201, 0, 0, 0, 74382, 73781, 7918, 73988, 0, 0, 917884, 1728, 0, - 120710, 178, 12972, 0, 0, 0, 120671, 0, 0, 0, 120405, 65690, 0, 0, - 119054, 0, 9252, 917889, 4652, 74259, 0, 0, 0, 13065, 9923, 10806, 0, - 11763, 0, 120688, 0, 119098, 0, 6993, 0, 0, 8333, 0, 0, 0, 0, 74464, 0, - 0, 74080, 0, 0, 11910, 0, 8278, 8963, 4034, 0, 0, 65344, 120517, 41747, - 0, 0, 8677, 0, 12707, 9350, 66037, 0, 8836, 12315, 12747, 8300, 0, 0, - 7491, 8856, 0, 0, 43150, 0, 120404, 65389, 120402, 120403, 10813, 2592, - 12853, 43269, 7263, 120244, 6536, 120238, 120239, 65516, 12321, 120391, - 120388, 120389, 10007, 120246, 9588, 120248, 1596, 120383, 41994, 65801, - 0, 0, 66572, 0, 0, 10613, 8092, 12805, 41928, 40981, 0, 0, 5006, 64328, - 0, 65298, 0, 8825, 74555, 65940, 0, 0, 6107, 0, 119177, 0, 0, 0, 11783, - 335, 120227, 64689, 438, 4510, 5765, 8721, 120233, 119227, 6092, 12840, - 43112, 8876, 120231, 8096, 10284, 0, 0, 0, 10380, 8733, 0, 0, 41602, 0, - 0, 74831, 917901, 0, 73747, 65399, 0, 64591, 42405, 0, 917897, 843, - 11541, 0, 0, 0, 41935, 74496, 41902, 0, 0, 215, 41258, 0, 43159, 1953, - 9579, 41938, 1256, 3910, 9407, 6242, 0, 0, 41257, 41900, 8675, 10700, - 8805, 1742, 0, 9333, 8202, 0, 0, 0, 0, 0, 73882, 499, 0, 0, 0, 126983, 0, - 1712, 5932, 0, 41762, 0, 0, 11967, 1775, 0, 0, 0, 0, 0, 9458, 0, 6470, - 9180, 120380, 43176, 0, 0, 42782, 0, 0, 0, 917912, 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, 0, 917980, 7507, - 0, 43149, 0, 65031, 7961, 1636, 0, 65029, 65024, 0, 12473, 6534, 0, 99, - 98, 97, 120571, 67584, 4049, 0, 0, 7090, 0, 7892, 917969, 10777, 0, - 65310, 65562, 66599, 0, 0, 8039, 3363, 66594, 0, 0, 0, 12596, 66595, - 42258, 42570, 5593, 119148, 120711, 0, 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, 0, 1536, - 64093, 73970, 0, 0, 0, 6020, 12716, 127112, 12744, 475, 120394, 13266, 0, - 127111, 0, 73926, 0, 10645, 1212, 6543, 0, 8134, 0, 2913, 73870, 0, 1866, - 0, 195095, 0, 8923, 1645, 12059, 66585, 0, 3196, 0, 0, 5935, 1250, 0, - 8174, 9787, 9856, 9859, 7916, 9861, 9860, 5258, 1882, 1892, 0, 10882, - 405, 11454, 73911, 0, 0, 41169, 8939, 41245, 0, 41170, 1454, 11369, 6477, - 12157, 0, 0, 0, 41172, 7855, 0, 0, 10480, 0, 0, 0, 8264, 12610, 0, 645, - 0, 7609, 40973, 0, 0, 0, 5824, 984, 0, 10688, 5851, 0, 7729, 73982, - 120518, 0, 195086, 66722, 0, 0, 0, 0, 4538, 120406, 43141, 0, 0, 74214, - 0, 0, 0, 118902, 43005, 0, 9552, 0, 0, 0, 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, 0, 8455, 10082, 11575, - 0, 119566, 0, 12808, 12183, 6145, 0, 64929, 0, 0, 0, 43186, 42509, 0, - 3922, 9187, 0, 0, 0, 119057, 11752, 3353, 9358, 0, 0, 66680, 120090, - 11747, 7931, 8558, 9795, 0, 0, 0, 120082, 120081, 120084, 41027, 120086, - 0, 120088, 120087, 7019, 120073, 0, 11751, 120078, 120077, 64657, 8657, - 120048, 8594, 120068, 0, 0, 120069, 120072, 120071, 0, 0, 43154, 41029, - 0, 11332, 65380, 7728, 0, 11294, 0, 66665, 7851, 0, 0, 8699, 0, 42524, 0, - 9085, 0, 7504, 9327, 6160, 0, 0, 0, 8088, 0, 74012, 0, 0, 4439, 6926, 0, - 12924, 0, 42369, 0, 65491, 65145, 9041, 43559, 64577, 10826, 0, 11296, 0, - 0, 0, 65825, 9577, 120494, 0, 64670, 0, 0, 42159, 11295, 0, 0, 120779, 0, - 0, 10902, 0, 0, 0, 0, 10472, 2995, 0, 0, 0, 2371, 0, 120808, 259, 1009, - 0, 2402, 2333, 6440, 0, 0, 65125, 41244, 0, 13271, 9103, 41180, 0, 0, 0, - 0, 10219, 0, 0, 0, 0, 43178, 127070, 41261, 119362, 917974, 8613, 0, - 118989, 917978, 917979, 41492, 12005, 917982, 0, 1890, 120056, 0, 0, 0, - 7293, 7991, 0, 10578, 0, 118840, 0, 0, 0, 0, 0, 0, 120054, 118815, 6635, - 0, 6164, 65170, 0, 0, 0, 11664, 0, 0, 0, 0, 118812, 0, 0, 0, 9175, 11925, - 0, 9088, 0, 64545, 1396, 0, 7546, 3847, 0, 0, 4985, 13288, 672, 8098, - 43196, 194746, 0, 0, 0, 74043, 65072, 1577, 11772, 0, 5928, 4525, 10658, - 65911, 1266, 10180, 0, 0, 12622, 0, 0, 0, 194714, 0, 13310, 773, 19933, - 1539, 0, 0, 66374, 0, 0, 0, 0, 3051, 5862, 7823, 0, 0, 120411, 3250, - 74020, 0, 66649, 9510, 66237, 0, 0, 41066, 64673, 917963, 917964, 0, - 3505, 8707, 917968, 917965, 917966, 917971, 917972, 3471, 917970, 5479, - 882, 6686, 119584, 11613, 120772, 42754, 0, 0, 0, 0, 0, 0, 0, 3225, 0, - 4433, 41156, 73745, 43173, 1443, 4381, 0, 0, 10926, 11756, 11757, 64879, + 9467, 5558, 8878, 0, 195036, 7451, 6706, 10146, 0, 9086, 64566, 0, 64584, + 7437, 7454, 12594, 0, 68362, 4546, 7731, 0, 119909, 74243, 0, 3805, 0, + 194565, 44001, 41008, 0, 6307, 19949, 0, 7544, 0, 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, 0, 0, 0, 5506, 0, + 1911, 66652, 0, 9961, 8845, 66698, 0, 10792, 8889, 0, 2098, 0, 64751, 0, + 66622, 0, 0, 74364, 0, 0, 0, 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, 0, 0, 0, 4357, 0, 0, 0, 74233, + 9967, 119852, 42860, 119838, 10941, 65721, 6962, 0, 0, 119324, 0, 11014, + 0, 8942, 12000, 69224, 0, 0, 11974, 0, 42772, 127518, 11650, 5013, 0, 0, + 66210, 118914, 6613, 0, 0, 0, 0, 0, 64714, 0, 0, 0, 12120, 43476, 0, + 11024, 74811, 0, 10563, 0, 0, 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, 0, + 3483, 119593, 1989, 0, 0, 9104, 3503, 65375, 0, 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, 0, + 1403, 0, 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, + 0, 12943, 65185, 41869, 12619, 0, 10154, 0, 74439, 2039, 0, 7446, 1684, + 63979, 10974, 458, 120620, 0, 69791, 0, 11916, 65016, 0, 78067, 42115, 0, + 12288, 78057, 0, 1493, 42111, 7553, 4097, 0, 13080, 0, 65808, 6610, 6030, + 8059, 7508, 13131, 0, 0, 0, 8794, 41278, 41629, 12154, 0, 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, 0, 195076, 0, 7405, 10105, 65810, 0, 41632, 7493, 0, 0, 41622, + 0, 0, 119556, 74584, 7632, 9716, 19954, 9805, 5990, 900, 0, 63957, 0, 0, + 3612, 0, 64376, 0, 5389, 0, 0, 65938, 2839, 9621, 582, 0, 74368, 3749, + 6949, 7569, 74061, 0, 0, 6956, 4403, 19962, 65559, 3299, 0, 0, 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, 0, 11963, 43620, 0, 78889, 0, 0, 0, 9881, 43115, 65757, 3415, + 0, 0, 8648, 0, 6741, 43047, 0, 13180, 0, 418, 0, 0, 10295, 10327, 10391, + 41752, 74339, 8641, 41449, 0, 74100, 0, 10911, 6942, 0, 1024, 42849, + 41751, 69776, 8941, 0, 4554, 0, 9023, 11685, 0, 9928, 78617, 0, 11437, + 43741, 0, 120700, 63967, 0, 41206, 120724, 9049, 41185, 43166, 0, 11680, + 0, 11686, 0, 65224, 4565, 4655, 119553, 0, 0, 64523, 10343, 10407, 0, + 66671, 11466, 0, 0, 42890, 0, 12050, 68201, 2860, 0, 0, 0, 42792, 5743, + 10424, 12065, 42872, 0, 0, 0, 8875, 0, 0, 917991, 7531, 12847, 2413, 0, + 78635, 962, 0, 12855, 41196, 42564, 0, 1582, 0, 5508, 0, 0, 0, 10801, 0, + 118798, 0, 7173, 496, 10439, 4313, 64607, 119557, 7860, 0, 906, 42793, + 2842, 6405, 64722, 13132, 798, 64694, 12801, 8406, 1153, 0, 64788, 0, + 8054, 9174, 194749, 917976, 9964, 0, 41611, 4642, 66574, 11556, 0, 0, + 78857, 42089, 78855, 9008, 0, 0, 195096, 42079, 917981, 77924, 42513, 0, + 42842, 73985, 65285, 118974, 127003, 0, 0, 0, 0, 11335, 64069, 42093, + 3920, 0, 0, 0, 0, 4580, 41967, 0, 64384, 0, 119158, 3021, 42004, 0, 0, + 42317, 41998, 0, 6946, 0, 0, 0, 0, 65204, 0, 68113, 42690, 9880, 42010, + 74824, 64589, 10111, 64875, 0, 68399, 43998, 11360, 0, 0, 0, 0, 42149, 0, + 0, 0, 64941, 77919, 0, 0, 0, 55247, 4110, 66005, 6959, 10929, 119110, 0, + 66703, 77921, 8617, 41982, 6025, 69242, 0, 0, 0, 0, 9597, 42099, 43172, + 0, 10117, 0, 0, 41636, 0, 0, 120681, 8301, 0, 0, 187, 0, 65669, 0, 4963, + 0, 127517, 0, 8964, 65676, 65785, 0, 41948, 0, 0, 0, 41942, 65449, 3160, + 10081, 13226, 42121, 42475, 42663, 0, 41766, 0, 65882, 78849, 41760, + 1189, 905, 480, 10985, 41733, 67859, 9629, 6742, 1745, 43625, 73835, + 7888, 0, 0, 0, 42656, 41507, 8806, 7023, 0, 74279, 9447, 78651, 7867, + 69218, 6236, 0, 0, 10505, 0, 12851, 118948, 348, 5474, 0, 3103, 0, 41753, + 0, 0, 0, 78844, 78845, 41739, 78843, 42515, 10931, 41756, 43347, 42560, + 5391, 41746, 119147, 0, 41259, 5561, 74360, 2691, 0, 65553, 7933, 5562, + 69800, 917851, 41262, 0, 64421, 74846, 41251, 0, 0, 3979, 0, 0, 74813, 0, + 0, 0, 0, 118847, 41266, 0, 0, 917630, 10585, 65741, 41737, 9574, 2666, 0, + 41738, 831, 419, 13126, 10716, 0, 42822, 0, 6434, 0, 6939, 7766, 6432, 0, + 0, 916, 769, 41742, 11968, 74805, 6433, 5563, 547, 1943, 6439, 5560, + 4994, 487, 0, 4497, 3754, 127056, 120424, 9039, 0, 41776, 0, 8716, 1595, + 41615, 0, 0, 74260, 0, 43267, 43219, 0, 0, 12185, 0, 0, 68355, 68357, 0, + 42856, 8634, 0, 0, 4209, 120702, 0, 65879, 41538, 65612, 0, 669, 5679, 0, + 69786, 118961, 0, 0, 5678, 11821, 0, 6711, 460, 0, 0, 0, 0, 120747, 0, 0, + 78050, 119022, 0, 0, 0, 7782, 9044, 4974, 11760, 78494, 7577, 65711, + 41912, 1216, 0, 0, 5792, 0, 0, 78501, 0, 42264, 12244, 0, 5683, 0, 0, + 78119, 1549, 0, 0, 120398, 5682, 6206, 8670, 10256, 5680, 917568, 10001, + 0, 69768, 1449, 10241, 78290, 0, 0, 10552, 64342, 41922, 0, 8584, 0, + 5567, 2717, 0, 0, 5564, 42886, 41908, 42882, 5565, 0, 0, 0, 65708, 65709, + 5566, 69803, 65704, 65705, 11904, 42875, 43373, 42539, 5942, 8468, 0, + 10361, 10425, 65697, 65698, 65699, 0, 66598, 0, 64664, 10647, 78702, + 78703, 78690, 457, 78502, 65701, 1934, 43006, 0, 8802, 78710, 65130, + 78706, 78709, 6087, 78705, 78716, 41757, 78711, 8043, 8950, 65694, 64485, + 43534, 10457, 0, 11961, 78725, 78722, 78723, 78720, 78721, 0, 65515, + 9499, 10035, 13069, 0, 0, 9889, 68184, 42806, 0, 7256, 0, 0, 1667, 42161, + 0, 42428, 0, 6934, 0, 10802, 64861, 6556, 78390, 0, 8101, 3610, 0, 41748, + 4995, 955, 65907, 119208, 5350, 64339, 78306, 64549, 10875, 917956, 5477, + 65692, 0, 0, 120397, 12896, 10456, 917954, 0, 3874, 0, 0, 0, 0, 0, 0, + 65603, 0, 65687, 0, 41038, 74009, 119570, 42239, 8536, 78740, 0, 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, + 0, 0, 6370, 0, 7827, 68441, 6965, 0, 0, 13201, 0, 0, 0, 74382, 73781, + 7918, 73988, 0, 0, 917884, 1728, 0, 120710, 178, 12972, 0, 0, 0, 120671, + 0, 0, 78327, 120405, 65690, 0, 0, 119054, 0, 9252, 917889, 4652, 68371, + 0, 0, 0, 13065, 9923, 10806, 0, 11763, 0, 120688, 6723, 78187, 0, 6993, + 0, 0, 8333, 0, 0, 11390, 0, 74464, 0, 0, 74080, 0, 0, 11910, 0, 8278, + 8963, 4034, 0, 0, 65344, 120517, 41747, 0, 0, 8677, 0, 12707, 9350, + 66037, 0, 8836, 12315, 12747, 8300, 0, 0, 7491, 8856, 0, 0, 43150, 0, + 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, 0, 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, 0, 11783, 335, 120227, 64689, + 438, 4510, 5765, 8721, 120233, 119227, 6092, 12840, 43112, 8876, 120231, + 8096, 10284, 0, 0, 0, 10380, 8733, 0, 0, 41602, 0, 0, 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, 0, 41257, 41900, 8675, 10700, 8805, 1742, 0, + 9333, 8202, 0, 0, 0, 0, 0, 73882, 499, 0, 43467, 0, 55290, 0, 1712, 5932, + 77845, 41762, 0, 0, 11967, 1775, 0, 0, 0, 0, 0, 9458, 0, 6470, 9180, + 120380, 43176, 0, 0, 42782, 0, 0, 0, 917912, 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, 194964, 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, 0, + 65310, 65562, 66599, 66722, 0, 8039, 3363, 66594, 43434, 0, 0, 12596, + 66595, 42258, 42570, 5593, 119148, 120711, 0, 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, 64093, 73970, 77930, 0, 0, 6020, 12716, 127112, 12744, 475, + 120394, 13266, 0, 127111, 0, 73926, 0, 10645, 1212, 6543, 0, 8134, 0, + 2913, 73870, 0, 1866, 0, 195095, 0, 8923, 1645, 12059, 66585, 78786, + 3196, 0, 0, 5935, 1250, 127066, 8174, 9787, 6733, 9859, 7916, 9861, 9860, + 5258, 1882, 1892, 6731, 10882, 405, 11454, 73911, 0, 0, 41169, 8939, + 41245, 0, 41170, 1454, 11369, 6477, 12157, 0, 0, 0, 41172, 7855, 0, 0, + 10480, 0, 0, 77936, 8264, 12610, 0, 645, 0, 7609, 40973, 0, 73833, 78249, + 5824, 984, 77918, 10688, 5851, 0, 7729, 73982, 120518, 0, 195086, 43369, + 0, 0, 68415, 0, 4538, 120406, 43141, 0, 0, 74214, 73886, 0, 0, 118902, + 43005, 78448, 9552, 0, 0, 0, 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, 0, 8455, 10082, 11575, 0, + 119566, 0, 12808, 12183, 6145, 0, 64929, 0, 0, 0, 43186, 42509, 0, 3922, + 9187, 0, 0, 0, 119057, 11752, 3353, 9358, 0, 917957, 66680, 120090, + 11747, 7931, 8558, 9795, 68380, 0, 0, 120082, 120081, 120084, 41027, + 120086, 0, 120088, 120087, 7019, 120073, 0, 11751, 120078, 78294, 64657, + 8657, 120048, 8594, 120068, 0, 0, 120069, 120072, 120071, 0, 0, 43154, + 41029, 0, 11332, 65380, 7728, 0, 11294, 0, 66665, 7851, 0, 8375, 8699, 0, + 42524, 0, 9085, 0, 7504, 9327, 6160, 0, 0, 0, 8088, 0, 74012, 0, 0, 4439, + 6926, 0, 12924, 0, 42369, 0, 65491, 65145, 9041, 43559, 64577, 10826, 0, + 11296, 0, 0, 0, 65825, 9577, 68199, 0, 64670, 0, 78056, 6793, 11295, 0, + 78053, 73872, 0, 0, 10902, 0, 0, 78070, 78068, 10472, 2995, 0, 0, 64682, + 2371, 78069, 120808, 259, 1009, 0, 2402, 2333, 6440, 0, 0, 65125, 41244, + 0, 13271, 9103, 41180, 0, 0, 0, 0, 10219, 0, 0, 0, 0, 43178, 127070, + 41261, 119362, 43640, 8613, 0, 118989, 6736, 195092, 41492, 12005, + 917982, 0, 1890, 120056, 0, 0, 0, 7293, 7991, 0, 10578, 0, 78076, 0, + 78077, 0, 0, 78800, 0, 120054, 42668, 6635, 0, 6164, 65170, 0, 0, 0, + 11664, 0, 0, 0, 0, 118812, 0, 0, 0, 9175, 11925, 78045, 9088, 0, 64545, + 1396, 0, 7546, 3847, 0, 0, 4985, 13288, 672, 8098, 43196, 194746, 0, 0, + 0, 74043, 65072, 1577, 11772, 13041, 5928, 4525, 10658, 65911, 1266, + 10180, 0, 0, 12622, 0, 0, 0, 194714, 0, 13310, 773, 19933, 1539, 0, + 126983, 42731, 0, 0, 0, 0, 3051, 5862, 7823, 0, 0, 120411, 3250, 43991, + 0, 66649, 9510, 66237, 0, 0, 41066, 64673, 917963, 917964, 0, 3505, 8707, + 917968, 6725, 917966, 917971, 917972, 3471, 917970, 5479, 882, 6686, + 119584, 11613, 120772, 42754, 0, 0, 0, 0, 0, 0, 0, 3225, 917996, 4433, + 41156, 43973, 43173, 1443, 4381, 0, 0, 10926, 11756, 11757, 64879, 917949, 917950, 917947, 13227, 0, 10021, 5160, 1387, 0, 917953, 41418, 0, - 65914, 917957, 217, 917955, 917960, 917961, 10443, 10789, 41158, 119257, - 4274, 0, 41483, 0, 41250, 0, 42179, 0, 5931, 11744, 0, 0, 41252, 66682, - 0, 119637, 41249, 1366, 64635, 0, 12466, 0, 0, 4397, 0, 0, 41296, 9545, - 41291, 0, 0, 41485, 3511, 41282, 5923, 10400, 0, 0, 760, 0, 12088, 5786, - 0, 42256, 119869, 119861, 417, 41474, 119562, 41565, 0, 5934, 119867, - 66583, 119231, 64877, 0, 64481, 0, 0, 41956, 0, 126995, 0, 0, 0, 42273, - 5819, 0, 917556, 0, 0, 0, 65910, 0, 10246, 0, 0, 1237, 10274, 4552, 0, 0, - 0, 1375, 66705, 43573, 65260, 42063, 0, 42811, 10312, 74192, 120794, - 7840, 0, 64890, 10252, 0, 0, 43185, 0, 4396, 0, 119880, 10769, 10331, - 119041, 0, 9753, 0, 8944, 0, 0, 10473, 0, 0, 6072, 43025, 10299, 0, 0, - 120608, 119874, 0, 0, 0, 0, 9330, 0, 7222, 10283, 10315, 10379, 4996, 0, - 13281, 66517, 7865, 10087, 0, 0, 119092, 0, 0, 7565, 66363, 12952, 64806, - 43180, 0, 68096, 0, 0, 74288, 622, 74023, 885, 64772, 1602, 0, 0, 852, 0, - 12160, 0, 10212, 65435, 0, 12071, 9609, 12156, 917983, 917984, 43586, - 11035, 10411, 917988, 10255, 10263, 10279, 4194, 10375, 917993, 0, 4315, - 12644, 917997, 917994, 917995, 43343, 0, 917998, 917999, 41177, 0, 0, - 917792, 0, 0, 8715, 0, 41179, 0, 43313, 0, 41176, 0, 994, 0, 8452, - 127103, 73966, 0, 0, 5921, 0, 2597, 0, 5922, 118903, 127109, 4186, - 127107, 127106, 127105, 73973, 0, 4406, 74601, 8480, 0, 9747, 0, 4413, 0, - 42268, 3198, 5924, 5920, 0, 6921, 0, 74007, 42869, 8418, 11681, 43169, - 10176, 0, 742, 0, 2893, 10772, 65276, 5937, 1914, 2553, 11682, 0, 0, 0, - 8363, 0, 2993, 7772, 3916, 0, 0, 1141, 42407, 8159, 718, 7572, 973, 0, - 120718, 3235, 2415, 43164, 0, 8018, 42333, 74756, 10675, 6937, 42486, 0, - 65390, 0, 0, 1202, 0, 0, 127037, 0, 0, 0, 0, 64542, 3260, 73829, 65388, - 0, 8419, 0, 127036, 0, 0, 74193, 0, 0, 0, 0, 1431, 0, 66565, 10821, 0, - 12804, 0, 8229, 1235, 3307, 11472, 0, 0, 4544, 0, 0, 0, 1740, 0, 8758, - 985, 12882, 64511, 0, 12068, 0, 0, 10141, 0, 63761, 8785, 4476, 0, 63763, - 12655, 8907, 0, 0, 0, 0, 0, 119572, 10665, 64616, 41572, 0, 0, 0, 41573, - 0, 3931, 0, 74143, 0, 0, 0, 0, 11982, 0, 0, 0, 0, 64484, 0, 41167, 0, - 41735, 0, 717, 10754, 0, 0, 0, 0, 63767, 0, 1780, 6936, 0, 0, 819, 10611, - 9694, 126978, 0, 0, 0, 0, 0, 0, 12820, 0, 6578, 7009, 7523, 6922, 74218, - 67848, 7525, 3346, 8339, 0, 0, 575, 268, 0, 8563, 0, 120343, 41541, - 65565, 8336, 5936, 7290, 0, 8337, 13081, 308, 11388, 7522, 120721, 0, - 65466, 11090, 6953, 0, 120346, 0, 120345, 5926, 0, 0, 0, 0, 0, 0, 9038, - 7887, 0, 7830, 11651, 13093, 64002, 0, 65742, 0, 119597, 11590, 0, 74048, - 0, 8595, 0, 0, 0, 13097, 0, 64643, 13283, 12697, 0, 120621, 3488, 5933, - 10033, 73738, 66241, 65570, 0, 12297, 119153, 1955, 0, 5349, 42538, 0, 0, - 65308, 9462, 0, 0, 0, 0, 0, 0, 5831, 0, 7638, 0, 42764, 0, 43109, 7637, - 11957, 120600, 0, 0, 0, 0, 0, 0, 0, 7636, 65171, 9124, 0, 120331, 0, 291, - 0, 0, 2027, 66230, 0, 0, 10403, 0, 4640, 64713, 10224, 120429, 42512, - 120431, 120430, 0, 0, 0, 0, 0, 0, 0, 119094, 74213, 7824, 0, 0, 41274, - 5778, 6302, 0, 0, 12680, 119130, 1417, 0, 194914, 9452, 0, 0, 11552, 0, - 0, 0, 65391, 0, 10172, 65453, 120408, 41264, 120410, 6426, 4641, 9179, - 64819, 64906, 41255, 42036, 41469, 41269, 120412, 41267, 4646, 120425, - 865, 42034, 120426, 120421, 4645, 42033, 120422, 0, 0, 64728, 0, 0, 0, - 1659, 919, 42784, 1671, 195089, 6069, 9219, 195090, 1661, 13120, 63784, - 195094, 10140, 9713, 119143, 0, 0, 0, 2306, 10485, 118943, 6068, 10612, - 195099, 0, 195101, 195078, 41462, 195080, 195079, 5422, 195081, 0, 0, 0, - 10229, 10635, 826, 195083, 195082, 195085, 195084, 195087, 6483, 0, 1808, - 7848, 0, 8100, 0, 0, 0, 13301, 0, 9667, 0, 0, 0, 11003, 9904, 0, 0, - 120690, 9144, 10921, 0, 0, 9840, 65131, 917560, 0, 10313, 0, 0, 64320, - 10265, 0, 10962, 118970, 43008, 8945, 0, 0, 41, 195072, 1792, 120515, - 195073, 8655, 195075, 0, 0, 12066, 0, 385, 4152, 2585, 0, 0, 3126, 0, - 74136, 10957, 0, 0, 0, 0, 13157, 0, 0, 3570, 0, 7443, 0, 0, 6997, 0, 0, - 7879, 8739, 11075, 0, 65216, 0, 0, 2593, 8463, 7810, 917862, 7839, - 119913, 0, 917860, 9691, 4411, 917847, 0, 0, 0, 0, 65254, 10066, 0, 0, 0, - 0, 13061, 8016, 0, 19932, 64831, 0, 0, 12390, 119171, 1634, 68115, 0, + 65914, 6721, 217, 917955, 917960, 917961, 10443, 10789, 41158, 119257, + 4274, 0, 41483, 0, 41250, 0, 42179, 0, 5931, 11744, 69232, 0, 41252, + 66682, 0, 119637, 41249, 1366, 64635, 0, 12466, 0, 0, 4397, 0, 0, 41296, + 9545, 41291, 0, 0, 41485, 3511, 41282, 5923, 10400, 0, 0, 760, 0, 12088, + 5786, 0, 42256, 119869, 119861, 417, 41474, 119562, 41565, 0, 5934, + 119867, 66583, 119231, 64877, 0, 64481, 78614, 66013, 41956, 43455, + 126995, 0, 0, 0, 42273, 5819, 0, 917556, 0, 0, 0, 65910, 0, 10246, + 120816, 0, 1237, 10274, 4552, 0, 0, 0, 1375, 66705, 43573, 65260, 42063, + 0, 42811, 10312, 74192, 120794, 7840, 0, 43630, 10252, 0, 0, 43185, 0, + 4396, 0, 119880, 10769, 9676, 119041, 0, 9753, 0, 8944, 0, 0, 10473, 0, + 0, 6072, 43025, 10299, 0, 0, 120608, 66326, 0, 0, 0, 0, 9330, 0, 7222, + 10283, 10315, 10379, 4996, 0, 13281, 66517, 7865, 10087, 78343, 0, 78347, + 0, 0, 7565, 66363, 12952, 64806, 43180, 77928, 68096, 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, 917993, 0, 4315, 12644, 127516, + 77937, 43639, 43343, 0, 917998, 11501, 41177, 0, 0, 917792, 0, 0, 8715, + 0, 41179, 0, 43313, 0, 41176, 0, 994, 0, 8452, 127103, 73966, 0, 0, 5921, + 0, 2597, 0, 5922, 118903, 77943, 4186, 127107, 127106, 127105, 6718, 0, + 4406, 74601, 8480, 9192, 9747, 0, 4413, 0, 42268, 3198, 5924, 5920, 0, + 6921, 78081, 74007, 42869, 8418, 11681, 43169, 10176, 0, 742, 0, 2893, + 10772, 65276, 5937, 1914, 2553, 11682, 6756, 0, 0, 8363, 0, 2993, 7772, + 3916, 0, 120494, 1141, 42407, 8159, 718, 7572, 973, 0, 120718, 3235, + 2415, 43164, 0, 8018, 42333, 74756, 10675, 6937, 42486, 43381, 65390, 0, + 0, 1202, 0, 0, 127037, 0, 0, 0, 78182, 64542, 3260, 73829, 65388, 9945, + 8419, 78042, 6738, 0, 43681, 74193, 2059, 0, 0, 55237, 1431, 0, 66565, + 10821, 0, 12804, 0, 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, 0, 0, 41573, 0, 3931, 120295, 74143, + 0, 0, 0, 0, 11982, 0, 0, 0, 0, 64484, 0, 41167, 0, 41735, 0, 717, 10754, + 0, 0, 0, 0, 63767, 0, 1780, 6936, 0, 0, 819, 10611, 9694, 126978, 0, 0, + 0, 0, 0, 0, 12820, 0, 6578, 7009, 7523, 6922, 74218, 67848, 7525, 3346, + 8339, 0, 0, 575, 268, 78111, 8563, 5754, 120343, 41541, 65565, 8336, + 5936, 7290, 78117, 8337, 13081, 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, 0, 8595, 0, 0, 43703, 13097, 0, 64643, + 13283, 12697, 0, 12381, 3488, 5933, 10033, 73738, 66241, 65570, 0, 12297, + 119153, 1955, 0, 5349, 42538, 0, 0, 65308, 9462, 0, 0, 0, 0, 42736, 0, + 5756, 0, 7638, 41642, 42764, 0, 43109, 7637, 5752, 120600, 0, 73832, 0, + 120635, 0, 78334, 0, 7636, 65171, 9124, 0, 78892, 0, 291, 0, 0, 2027, + 66230, 78142, 78136, 10403, 0, 4640, 64713, 10224, 120429, 42512, 120431, + 120430, 0, 0, 0, 0, 0, 0, 0, 119094, 74213, 7824, 0, 0, 41274, 5778, + 6302, 0, 0, 12680, 119130, 1417, 77889, 194914, 9452, 0, 74393, 11552, 0, + 0, 0, 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, 0, 0, 64728, 0, 78673, + 78674, 1659, 919, 42784, 1671, 195089, 6069, 9219, 195090, 1661, 13120, + 63784, 69819, 10140, 9713, 119143, 0, 0, 0, 2306, 10485, 118943, 6068, + 10612, 195099, 0, 195101, 195078, 41462, 195080, 195079, 5422, 195081, 0, + 0, 0, 10229, 10635, 826, 195083, 195082, 195085, 195084, 195087, 6483, 0, + 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, 0, 77951, + 12066, 0, 385, 4152, 2585, 0, 119068, 3126, 0, 74136, 10957, 0, 43258, 0, + 0, 13157, 0, 0, 3570, 0, 7443, 0, 44006, 6997, 0, 0, 7879, 8739, 11075, + 0, 65216, 0, 69795, 2593, 8463, 7810, 917862, 7839, 119913, 78806, + 119912, 9691, 4411, 78802, 0, 0, 43442, 78799, 65254, 10066, 0, 0, 0, 0, + 13061, 8016, 78687, 19932, 64831, 0, 0, 12390, 119171, 1634, 68115, 0, 11056, 0, 119925, 0, 41165, 11328, 12450, 0, 41166, 0, 12456, 119914, - 171, 5941, 12452, 917544, 12458, 12531, 0, 43013, 63800, 74162, 0, - 120483, 194920, 0, 12454, 63806, 42132, 12063, 195077, 0, 3230, 0, 0, 0, - 5209, 297, 5810, 8522, 8415, 0, 0, 0, 7077, 2497, 0, 960, 74156, 6981, 0, - 12938, 4292, 0, 74815, 10512, 0, 74814, 0, 0, 0, 2503, 73778, 1762, - 73833, 2495, 0, 5844, 119124, 118838, 0, 12654, 4663, 1899, 0, 2507, 0, - 8726, 65594, 0, 0, 0, 8892, 0, 0, 0, 0, 5782, 420, 0, 0, 120462, 10797, - 63794, 0, 0, 0, 63796, 118965, 0, 66581, 119205, 41608, 0, 0, 0, 4659, - 120788, 0, 0, 0, 0, 0, 0, 0, 329, 120472, 0, 917548, 0, 0, 41188, 13244, - 120466, 42167, 0, 0, 5380, 0, 0, 1155, 11365, 43126, 0, 0, 65684, 0, - 5601, 65192, 42765, 63752, 0, 7987, 0, 1172, 0, 0, 43601, 120476, 74126, - 5603, 0, 4473, 0, 194823, 0, 65347, 65346, 65345, 0, 0, 5347, 0, 0, - 73868, 118944, 10588, 0, 0, 63755, 0, 5343, 120473, 0, 4555, 5341, 0, 0, - 0, 5351, 0, 43104, 65244, 917892, 64541, 42519, 74472, 0, 0, 74765, - 917888, 0, 6638, 0, 65113, 271, 74180, 65370, 8835, 65368, 12653, 65366, - 42172, 41086, 65363, 65362, 65361, 11912, 65359, 11323, 65357, 11800, - 65355, 5345, 65353, 65352, 65351, 761, 65349, 19959, 0, 0, 0, 0, 0, - 64647, 0, 0, 4699, 0, 0, 0, 0, 64605, 0, 0, 0, 4916, 0, 380, 10958, - 66563, 917906, 0, 9773, 13167, 12918, 41096, 73980, 0, 917898, 917893, - 10684, 0, 917896, 0, 7946, 12541, 8182, 0, 0, 0, 0, 0, 0, 9005, 1225, - 6630, 0, 0, 0, 0, 8847, 0, 65876, 5535, 8329, 74590, 0, 0, 0, 0, 3127, - 2595, 65713, 0, 0, 5607, 41089, 0, 0, 74256, 2665, 11304, 0, 74200, 4970, - 8764, 120459, 8934, 0, 41566, 4492, 0, 65011, 41090, 0, 0, 1188, 7254, - 1100, 0, 0, 41081, 2912, 11749, 0, 0, 0, 3572, 10023, 4959, 13079, 0, 0, - 9729, 0, 0, 0, 0, 0, 0, 11803, 7996, 9907, 41450, 13304, 0, 0, 41451, 0, - 0, 8273, 0, 3451, 0, 972, 41453, 0, 0, 73883, 0, 73945, 0, 3455, 19955, - 9538, 0, 0, 0, 0, 0, 0, 11396, 0, 11019, 0, 0, 0, 120507, 41078, 0, 261, - 5927, 7791, 0, 0, 0, 10696, 0, 6073, 9838, 118920, 0, 6075, 0, 282, 0, - 6437, 74078, 0, 65861, 0, 0, 0, 0, 3474, 118787, 0, 120655, 6081, 0, 0, - 74076, 0, 0, 0, 0, 0, 0, 8751, 12623, 120273, 7816, 12636, 4665, 12628, - 4670, 120271, 120272, 0, 9642, 10912, 958, 0, 11387, 0, 4666, 0, 4915, 0, - 4669, 0, 68099, 13287, 4664, 10836, 120550, 0, 0, 0, 43595, 7450, 0, - 917875, 8664, 9697, 3606, 917873, 0, 0, 64815, 1063, 120250, 120251, - 9772, 7255, 8886, 1389, 0, 120257, 120258, 120259, 12941, 120253, 120254, - 120255, 120256, 12301, 120266, 120267, 41102, 66604, 120262, 120263, - 120264, 1017, 66600, 523, 505, 1447, 74436, 0, 0, 0, 8608, 42789, 0, 0, - 0, 119196, 11307, 66707, 917871, 0, 11745, 7919, 0, 1641, 0, 0, 8966, 0, - 0, 5908, 0, 0, 74562, 0, 1699, 74191, 74843, 0, 0, 6306, 10169, 0, - 119251, 0, 3766, 120457, 120456, 120455, 6611, 257, 43170, 13153, 0, - 42386, 0, 9436, 2599, 0, 6496, 9449, 5930, 11476, 11033, 11447, 0, 5622, - 120436, 8477, 3760, 1718, 9442, 66433, 3776, 0, 41435, 4352, 0, 2435, - 120809, 5621, 0, 4201, 3778, 4203, 4202, 4205, 4204, 120447, 3768, 68142, - 765, 41440, 3764, 8473, 120440, 8469, 120438, 12947, 4564, 0, 0, 74271, - 73753, 0, 0, 0, 0, 5225, 0, 0, 0, 0, 0, 0, 74793, 5626, 73807, 11771, 0, - 0, 0, 0, 5353, 5625, 74179, 0, 0, 1010, 64572, 0, 42623, 64277, 0, 6952, - 0, 120752, 119003, 2590, 5629, 65552, 7551, 10325, 5632, 10471, 120038, + 171, 5941, 12452, 917544, 12458, 12531, 78779, 43013, 63800, 74162, 0, + 120483, 9969, 0, 12454, 63806, 42132, 12063, 78425, 78424, 3230, 0, 0, 0, + 5209, 297, 5810, 8522, 8415, 0, 78429, 78428, 7077, 2497, 0, 960, 74156, + 6981, 0, 12938, 4292, 0, 74815, 10512, 0, 74814, 78875, 127505, 78876, + 2503, 73778, 1762, 69794, 2495, 78873, 5844, 78874, 118838, 0, 12654, + 4663, 1899, 78877, 2507, 64121, 8726, 65594, 0, 0, 0, 8892, 0, 0, 0, 0, + 5782, 420, 0, 0, 120462, 10797, 63794, 0, 0, 64814, 63796, 77965, 0, + 66581, 119204, 41608, 0, 0, 63792, 4659, 120788, 0, 43676, 0, 0, 0, 0, 0, + 329, 77968, 0, 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, 0, 1172, 69799, 6786, 43601, 120476, 74126, 5603, + 0, 4473, 0, 194823, 0, 65347, 65346, 65345, 0, 0, 5347, 69802, 0, 73868, + 118944, 10588, 0, 0, 63755, 0, 5343, 78422, 0, 4555, 5341, 0, 0, 0, 5351, + 0, 43104, 65244, 917892, 64541, 42519, 74472, 0, 0, 74765, 917888, 0, + 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, 0, 63856, 0, 0, 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, 0, 69780, 0, 0, 0, + 0, 9005, 1225, 6630, 0, 0, 0, 0, 8847, 0, 65876, 5535, 8329, 74590, 0, 0, + 0, 0, 3127, 2595, 65713, 42013, 0, 5607, 41089, 0, 0, 74256, 2665, 11304, + 0, 74200, 4970, 8764, 120459, 8934, 0, 41566, 4492, 0, 65011, 41090, 0, + 0, 1188, 7254, 1100, 0, 0, 41081, 2912, 11749, 69792, 0, 0, 3572, 10023, + 4959, 13079, 0, 0, 9729, 0, 0, 0, 43361, 0, 0, 11803, 7996, 9907, 41450, + 13304, 0, 127260, 41451, 0, 11095, 8273, 127533, 3451, 0, 972, 41453, 0, + 0, 73883, 0, 73945, 0, 3455, 19955, 9538, 0, 69807, 0, 0, 0, 0, 11396, 0, + 11019, 0, 0, 0, 120507, 41078, 0, 261, 5927, 7791, 0, 0, 0, 10696, 0, + 6073, 9838, 118920, 0, 6075, 0, 282, 0, 6437, 74078, 0, 65861, 0, 0, 0, + 0, 3474, 118787, 0, 120655, 6081, 0, 0, 74076, 78879, 0, 0, 0, 0, 0, + 8751, 11499, 120273, 7816, 12636, 4665, 12628, 4670, 120271, 120272, 0, + 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, 0, 120257, 120258, 120259, 12941, 42661, 120254, 120255, 120256, + 12301, 120266, 69820, 41102, 66604, 120262, 120263, 120264, 1017, 66600, + 523, 505, 1447, 74436, 0, 0, 0, 8608, 42789, 0, 0, 0, 119196, 11307, + 66707, 917871, 0, 11745, 7919, 0, 1641, 0, 0, 8966, 0, 0, 5908, 0, 0, + 6744, 0, 1699, 74191, 74843, 0, 0, 6306, 10169, 0, 119251, 118939, 3766, + 2389, 120456, 120455, 6611, 257, 43170, 13153, 0, 42386, 0, 9436, 2599, + 0, 6496, 9449, 5930, 11476, 11033, 11447, 0, 5622, 120436, 8477, 3760, + 1718, 9442, 66433, 3776, 0, 41435, 4352, 0, 2435, 120809, 5621, 0, 4201, + 3778, 4203, 4202, 4205, 4204, 120447, 3768, 68142, 765, 41440, 3764, + 8473, 6373, 8469, 120438, 12947, 4564, 0, 0, 74271, 73753, 8374, 0, 0, + 6829, 5225, 0, 0, 0, 0, 119615, 0, 74793, 5626, 73807, 11771, 0, 0, 0, 0, + 5353, 5625, 74179, 0, 0, 1010, 64572, 41780, 42623, 64277, 0, 6952, 0, + 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, 10961, 0, 203, 0, 0, 0, 0, 0, 0, - 64378, 42054, 0, 0, 554, 119649, 11358, 0, 12182, 42048, 11065, 0, 73891, - 0, 0, 5694, 7689, 74528, 9323, 4325, 3047, 10317, 175, 0, 0, 74605, 0, 0, - 1243, 42154, 5431, 6652, 0, 0, 0, 0, 68118, 0, 1129, 0, 0, 65900, 1986, - 7846, 0, 8661, 0, 65255, 0, 3845, 4490, 0, 6649, 74400, 1456, 7530, - 11977, 7249, 8366, 0, 7756, 12342, 0, 51, 41516, 0, 8570, 9568, 0, 456, - 7026, 8145, 1168, 9251, 9082, 0, 64055, 42781, 3866, 12323, 41512, 73805, - 68121, 0, 41494, 0, 4660, 0, 10405, 0, 0, 0, 0, 42040, 73918, 119627, - 7944, 41454, 12605, 0, 0, 41455, 236, 0, 0, 8214, 0, 0, 0, 41457, 0, - 119589, 1969, 2384, 8097, 0, 0, 0, 0, 8766, 0, 917863, 5854, 0, 10583, 0, - 119989, 0, 10416, 917869, 3872, 0, 0, 8429, 0, 0, 2838, 917867, 0, 0, 0, - 0, 0, 0, 0, 917864, 120813, 10553, 1662, 8483, 0, 43605, 5892, 917868, 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, 0, 10357, 0, 8170, 1704, 8556, 0, - 9659, 0, 0, 0, 9556, 0, 4503, 11353, 9647, 0, 0, 0, 0, 0, 0, 0, 0, 74229, - 66593, 6438, 0, 9109, 119565, 1289, 64599, 0, 0, 0, 65507, 2447, 0, 0, 0, - 0, 0, 0, 73750, 0, 0, 19937, 0, 0, 0, 5675, 254, 0, 0, 0, 42425, 8918, - 64003, 5716, 42312, 0, 0, 6972, 42826, 0, 42464, 120567, 0, 0, 74796, - 64400, 64693, 0, 0, 65429, 9515, 4435, 0, 0, 0, 0, 11785, 0, 64671, - 41978, 1412, 4594, 1391, 10536, 8067, 9901, 7775, 0, 0, 74588, 120748, - 3140, 0, 7960, 43271, 0, 12518, 10909, 0, 1428, 12472, 0, 0, 7699, 12393, - 0, 0, 0, 74518, 9063, 0, 4261, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64554, - 10574, 3878, 0, 42352, 1752, 73785, 0, 42506, 0, 10199, 0, 0, 0, 65919, - 0, 0, 720, 324, 0, 0, 0, 0, 1464, 40985, 0, 7974, 0, 68123, 0, 64488, 0, - 0, 0, 74787, 0, 0, 0, 65597, 0, 0, 0, 1302, 0, 0, 0, 0, 0, 5204, 74774, - 0, 0, 0, 3995, 0, 65608, 3714, 0, 0, 0, 10999, 11750, 0, 127004, 0, 0, 0, - 0, 8130, 8672, 10845, 11964, 0, 0, 0, 0, 0, 42863, 73839, 0, 0, 0, 0, 0, - 0, 468, 612, 0, 64401, 66448, 0, 0, 1674, 0, 5823, 0, 12280, 0, 540, + 120017, 120018, 120023, 64275, 120021, 10961, 0, 203, 0, 0, 0, 0, 78350, + 0, 64378, 42054, 0, 0, 554, 119649, 11358, 0, 12182, 42048, 11065, 0, + 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, 0, 1129, + 0, 0, 65900, 1986, 7846, 78804, 8661, 0, 65255, 0, 3845, 4490, 118969, + 6649, 74400, 1456, 7530, 11977, 7249, 8366, 0, 7756, 12342, 0, 51, 41516, + 0, 8570, 9568, 917863, 456, 7026, 8145, 1168, 9251, 9082, 0, 64055, + 42781, 3866, 12323, 41512, 73805, 68121, 0, 41494, 0, 4660, 0, 10405, 0, + 78803, 0, 0, 42040, 73918, 119627, 7944, 41454, 12605, 0, 42205, 41455, + 236, 64051, 78867, 8214, 0, 0, 0, 41457, 0, 119589, 1969, 2384, 8097, + 917864, 0, 0, 78029, 8766, 0, 78079, 5854, 0, 10583, 0, 119989, 0, 10416, + 917869, 3872, 917868, 0, 8429, 0, 0, 2838, 917867, 0, 0, 0, 0, 0, 0, 0, + 11096, 120813, 10553, 1662, 8483, 0, 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, 0, 78886, 0, + 0, 74229, 66593, 6438, 0, 9109, 78882, 1289, 64599, 0, 0, 0, 65507, 2447, + 0, 0, 0, 0, 0, 0, 6334, 0, 0, 19937, 0, 0, 0, 5675, 254, 0, 0, 0, 42425, + 8918, 64003, 5716, 42312, 0, 0, 6972, 42826, 0, 42464, 120567, 0, 0, + 74796, 64400, 64693, 0, 77861, 65429, 9515, 4435, 0, 42522, 0, 0, 11785, + 0, 64671, 41978, 1412, 4594, 1391, 10536, 8067, 9901, 7775, 0, 0, 74588, + 120748, 3140, 0, 7960, 43271, 0, 12518, 10909, 127508, 1428, 12472, 0, 0, + 7699, 12393, 0, 0, 0, 74518, 8223, 0, 4261, 0, 0, 0, 0, 0, 0, 0, 0, + 43419, 0, 64554, 10574, 3878, 0, 42352, 1752, 73785, 0, 42506, 0, 10199, + 0, 0, 0, 65919, 0, 6695, 720, 324, 0, 0, 43406, 0, 1464, 40985, 0, 7974, + 0, 43474, 0, 64488, 0, 0, 64041, 74787, 0, 78865, 0, 65597, 0, 78863, 0, + 1302, 0, 78861, 0, 0, 0, 5204, 74774, 43404, 43396, 0, 3995, 68360, + 65608, 3714, 0, 0, 0, 10999, 11750, 0, 43251, 68660, 43301, 0, 120557, + 8130, 8672, 10845, 11964, 0, 0, 0, 0, 68455, 42863, 73839, 0, 0, 0, 0, 0, + 0, 468, 612, 0, 64401, 66448, 68376, 0, 1674, 0, 5823, 0, 12280, 0, 540, 74564, 0, 0, 8432, 0, 11073, 0, 64316, 0, 0, 820, 41741, 0, 120667, 0, 64684, 126992, 3359, 7800, 0, 65177, 6226, 353, 12396, 0, 119612, 64742, - 0, 0, 0, 0, 12412, 19941, 0, 120277, 0, 1884, 9481, 42418, 0, 41157, 0, - 1195, 64898, 7924, 0, 41151, 2010, 0, 41328, 42344, 0, 12409, 0, 4360, - 127009, 9739, 0, 74392, 73921, 0, 42521, 8539, 0, 0, 0, 0, 4788, 0, 0, - 65734, 0, 64353, 0, 13075, 74429, 0, 64569, 43532, 10837, 2492, 0, - 118901, 0, 41136, 64351, 11813, 9649, 41154, 119617, 5128, 4038, 41143, - 65604, 64859, 41592, 0, 1648, 5435, 0, 0, 41343, 119848, 65439, 12709, - 6986, 0, 0, 0, 41349, 0, 12581, 10374, 5175, 0, 73806, 10254, 0, 10278, - 10262, 120295, 41346, 0, 607, 0, 0, 0, 12923, 10314, 10282, 65477, 10378, - 120297, 40976, 8265, 0, 119834, 40975, 5840, 42838, 0, 40978, 0, 119840, - 0, 0, 0, 66444, 10538, 0, 2550, 119836, 0, 0, 0, 3525, 0, 0, 0, 0, 5619, - 65822, 0, 194882, 7455, 0, 5616, 11486, 9656, 0, 0, 10727, 5615, 0, - 120551, 42380, 64895, 0, 66451, 808, 5455, 11347, 0, 1026, 5620, 194887, - 0, 11350, 5617, 0, 9225, 64639, 127073, 9145, 0, 1338, 120581, 0, 12739, - 0, 3084, 0, 0, 41025, 6037, 0, 3974, 0, 10290, 0, 3083, 10322, 0, 0, 0, - 41036, 0, 0, 43321, 65606, 0, 41032, 42388, 0, 64700, 10011, 1445, 40961, - 0, 194893, 0, 40960, 0, 0, 0, 40963, 0, 10402, 0, 0, 0, 10603, 0, 0, 0, - 0, 194923, 10083, 127069, 0, 194922, 0, 0, 0, 9073, 42585, 64302, 10704, - 65030, 4787, 0, 74829, 0, 65423, 0, 0, 9570, 0, 9525, 2689, 917626, - 65426, 0, 917624, 0, 0, 40966, 917623, 13286, 3998, 42598, 42596, 503, 0, - 8735, 2690, 66488, 42836, 194913, 41954, 917617, 1652, 772, 194877, 8310, - 65428, 3487, 0, 3585, 10194, 43320, 119159, 0, 194874, 6468, 41976, 9720, - 917606, 11767, 41970, 0, 5836, 12358, 0, 4355, 9048, 12180, 65027, 64680, - 65025, 64757, 0, 41488, 0, 8527, 194917, 12362, 12435, 12360, 41053, - 3266, 0, 12356, 8616, 41466, 0, 0, 11450, 0, 3638, 12354, 0, 3216, 0, - 2358, 0, 8633, 0, 0, 0, 0, 0, 0, 11759, 0, 0, 74823, 0, 41423, 8078, - 10504, 0, 0, 0, 0, 7002, 0, 41430, 42267, 41051, 41484, 0, 0, 41050, - 41473, 10466, 13099, 0, 0, 0, 6435, 0, 11362, 0, 0, 65382, 0, 41420, 0, - 3625, 0, 41409, 0, 0, 2041, 9178, 9672, 41427, 43541, 43317, 0, 0, 0, - 41424, 917598, 120546, 0, 0, 0, 41417, 1261, 0, 0, 12102, 119662, 41401, - 0, 0, 0, 0, 0, 42290, 3275, 0, 42329, 0, 0, 0, 0, 0, 0, 10989, 74234, 0, - 10598, 0, 2669, 903, 0, 2920, 0, 0, 74603, 64504, 19928, 0, 0, 3917, 0, - 11732, 0, 0, 41448, 41461, 0, 0, 917558, 0, 8819, 12663, 0, 41184, 74014, - 232, 74835, 120646, 9168, 65786, 0, 0, 0, 9094, 0, 11758, 0, 0, 1064, - 42467, 0, 10115, 19924, 0, 0, 7862, 64551, 13224, 8516, 41862, 66650, - 7561, 0, 74018, 1878, 0, 0, 2911, 0, 41178, 5427, 64823, 0, 0, 12617, - 41174, 0, 41458, 0, 41463, 42413, 11292, 2406, 775, 0, 65584, 0, 6074, - 9618, 194903, 0, 0, 0, 194901, 41436, 3656, 0, 194899, 41456, 0, 1599, - 11333, 0, 8514, 8513, 0, 1613, 0, 0, 0, 0, 0, 0, 74500, 41460, 10145, - 10542, 0, 120379, 0, 9905, 0, 65730, 0, 120374, 8427, 120375, 0, 120376, - 0, 11497, 64687, 74008, 120371, 3871, 0, 0, 9111, 5741, 0, 194846, - 120366, 119111, 120745, 0, 120369, 0, 11648, 0, 0, 120364, 41587, 120365, - 0, 74322, 42113, 0, 0, 12172, 0, 74530, 0, 65723, 0, 73871, 65724, 7928, - 120354, 0, 41595, 73730, 0, 42118, 73830, 66042, 10355, 0, 7875, 0, - 41598, 3993, 0, 1545, 40971, 536, 0, 119959, 0, 0, 65173, 65286, 0, 0, 0, - 0, 0, 0, 41375, 5402, 0, 0, 1687, 120503, 0, 0, 0, 64326, 40969, 10526, - 0, 8323, 40968, 1339, 11731, 0, 0, 65460, 12242, 0, 8020, 10843, 11554, - 0, 0, 8266, 41006, 65722, 0, 10710, 0, 118942, 0, 0, 119155, 195091, 0, - 119636, 0, 120687, 0, 0, 11755, 66305, 0, 0, 10917, 120767, 0, 11272, - 2040, 41247, 41326, 0, 1741, 42370, 1227, 0, 0, 11413, 0, 0, 0, 1586, - 4978, 0, 1984, 0, 0, 120651, 40984, 0, 9373, 0, 12916, 6284, 0, 41663, 0, - 0, 0, 9237, 9385, 41648, 0, 0, 0, 41666, 1830, 73783, 41076, 41287, 0, 0, - 0, 0, 0, 0, 41987, 41676, 0, 120823, 0, 41670, 0, 0, 2796, 65167, 11683, - 9902, 74521, 0, 11451, 0, 0, 42631, 2359, 0, 67844, 74164, 41238, 548, - 11405, 13133, 64368, 0, 0, 0, 397, 64678, 42139, 9547, 9590, 0, 1614, 0, - 64356, 66307, 6651, 1358, 0, 428, 9620, 1466, 0, 10982, 0, 1333, 0, 407, - 6425, 0, 74253, 0, 0, 0, 5804, 11976, 8554, 0, 0, 0, 9057, 42294, 41218, - 0, 0, 0, 1883, 10952, 8048, 0, 41225, 0, 118955, 0, 0, 0, 4407, 0, 65809, - 119074, 194821, 8448, 68122, 74183, 0, 12675, 12659, 0, 42363, 120624, - 194824, 119058, 10766, 12012, 2386, 64732, 9170, 917821, 9123, 64585, - 120500, 0, 0, 42051, 0, 4164, 9081, 0, 120569, 42049, 42042, 8709, 0, 0, - 120637, 42419, 0, 42047, 0, 0, 8470, 11807, 65897, 577, 0, 0, 74300, 0, - 0, 74840, 0, 0, 0, 0, 8736, 1414, 42643, 9683, 0, 74344, 0, 2536, 0, - 66330, 0, 0, 0, 0, 0, 0, 0, 66317, 0, 66315, 66316, 0, 11273, 0, 43004, - 7541, 0, 0, 961, 64307, 66324, 0, 0, 3106, 65917, 41284, 1696, 0, 891, - 12105, 0, 42624, 12802, 3264, 8824, 13268, 43003, 10936, 0, 0, 0, 0, 0, - 0, 2322, 0, 0, 11449, 0, 42868, 41285, 3547, 0, 0, 0, 0, 43216, 6089, 0, - 0, 0, 4170, 1029, 0, 0, 119224, 42374, 0, 744, 0, 0, 0, 65823, 0, 0, - 3551, 0, 0, 4623, 0, 0, 4598, 0, 65136, 0, 0, 0, 10851, 0, 6179, 0, 6180, - 0, 11952, 120778, 0, 11972, 0, 0, 0, 0, 177, 0, 6176, 120580, 0, 0, 6177, - 9020, 0, 0, 6178, 120249, 120242, 0, 120243, 7518, 8754, 0, 120237, - 74551, 43081, 0, 0, 9136, 120240, 4401, 41280, 0, 8974, 2308, 0, 74149, - 0, 2318, 0, 66361, 8198, 0, 64360, 12601, 0, 65266, 120827, 74307, 0, - 6970, 5404, 43332, 3667, 7936, 12925, 126989, 42055, 0, 0, 118949, 10874, - 65505, 0, 0, 42053, 0, 42057, 11083, 42052, 0, 0, 73845, 0, 9665, 0, 0, - 13181, 0, 0, 0, 0, 74148, 0, 0, 120225, 120229, 120224, 74172, 41145, 0, - 0, 0, 41148, 8683, 7594, 0, 0, 119090, 10869, 0, 41146, 0, 11441, 0, - 3512, 917612, 0, 8103, 0, 0, 65184, 11780, 41563, 42796, 0, 119106, - 41544, 65146, 0, 0, 0, 0, 19942, 0, 118908, 7988, 10436, 74273, 3271, - 73804, 64711, 0, 0, 0, 0, 3804, 13070, 11557, 42044, 0, 1095, 0, 3599, 0, - 0, 0, 0, 0, 0, 0, 74346, 66697, 0, 11684, 0, 0, 0, 0, 42043, 0, 66677, 0, - 42046, 120751, 4036, 0, 0, 0, 194862, 0, 11954, 0, 1450, 12986, 1340, 0, - 65441, 0, 0, 0, 0, 0, 0, 0, 0, 6539, 0, 0, 0, 0, 0, 0, 41190, 3973, - 194852, 4575, 41193, 7982, 429, 0, 0, 0, 194854, 65792, 0, 118968, 6417, - 118918, 0, 0, 194850, 0, 0, 4919, 10590, 0, 7755, 0, 0, 64548, 0, 1621, - 10214, 65126, 0, 0, 0, 12188, 0, 1617, 8050, 0, 5015, 0, 119174, 42590, - 194871, 1756, 0, 0, 65768, 120694, 41892, 0, 7555, 13103, 5408, 2817, - 1214, 0, 0, 0, 0, 0, 0, 0, 7957, 8689, 64723, 1056, 0, 74147, 0, 0, 0, - 7073, 65850, 12327, 0, 119028, 0, 0, 0, 2341, 8450, 8484, 8474, 0, 0, 0, - 8461, 0, 12153, 12799, 0, 120654, 120684, 9451, 7571, 13073, 0, 0, 681, - 0, 703, 0, 3272, 8781, 12894, 0, 11709, 0, 74446, 0, 0, 0, 11338, 120768, - 3276, 0, 0, 65928, 0, 0, 65021, 64795, 74574, 0, 10047, 0, 3262, 0, 0, 0, - 0, 74329, 163, 576, 9895, 1655, 0, 74591, 0, 0, 0, 0, 0, 0, 10039, 0, 0, - 5623, 5717, 5776, 0, 0, 0, 41591, 120586, 65252, 120795, 0, 0, 0, 0, 0, - 0, 0, 8887, 0, 7295, 11031, 0, 43157, 0, 8946, 10348, 10412, 8755, 0, 0, - 5718, 13221, 0, 0, 0, 0, 0, 8810, 74499, 686, 0, 0, 4619, 118954, 6654, - 73769, 0, 0, 12040, 65689, 10128, 65118, 0, 119151, 118891, 0, 0, 2401, - 68144, 8792, 0, 0, 65455, 0, 0, 0, 119129, 0, 12886, 0, 66624, 0, 43557, - 10300, 10161, 10396, 74135, 0, 0, 0, 73851, 3010, 6441, 0, 1458, 41475, - 0, 0, 0, 11479, 0, 0, 9100, 12864, 0, 0, 1061, 64780, 2001, 43111, 0, 0, - 4052, 0, 7626, 0, 0, 1045, 0, 5631, 0, 0, 0, 0, 74127, 0, 0, 8486, 0, - 73758, 2335, 4362, 0, 0, 73867, 1025, 0, 42625, 0, 0, 41443, 0, 0, 0, - 1774, 1523, 0, 0, 41445, 0, 0, 8567, 41442, 3988, 0, 0, 118910, 0, 65274, - 8564, 0, 0, 0, 0, 0, 65908, 0, 66513, 6256, 0, 579, 0, 10206, 0, 0, 2673, - 0, 11814, 0, 4488, 0, 0, 0, 10444, 120820, 0, 11799, 74407, 0, 4487, 0, - 42832, 1032, 0, 120736, 0, 7203, 0, 614, 0, 0, 120615, 0, 0, 0, 0, 0, + 0, 120282, 0, 0, 12412, 19941, 0, 120277, 78847, 1884, 9481, 42418, 0, + 41157, 0, 1195, 64898, 7924, 0, 41151, 2010, 0, 41328, 42344, 0, 12409, + 0, 4360, 127009, 9739, 0, 74392, 73921, 0, 42521, 8539, 0, 0, 0, 0, 4788, + 0, 0, 65734, 0, 64353, 0, 13075, 74429, 0, 64569, 43532, 10837, 2492, 0, + 118901, 68637, 41136, 64351, 11813, 9649, 41154, 119617, 5128, 4038, + 41143, 65604, 64859, 41592, 6771, 1648, 5435, 0, 6734, 41343, 119848, + 65439, 12709, 6986, 119846, 0, 0, 41349, 0, 12581, 10374, 5175, 0, 73806, + 10254, 0, 10278, 10262, 77950, 41346, 0, 607, 0, 0, 0, 12923, 10314, + 10282, 65477, 10378, 120297, 40976, 8265, 0, 119834, 40975, 5840, 42838, + 0, 40978, 0, 119840, 0, 0, 0, 66444, 10538, 0, 2550, 119836, 6779, 0, 0, + 3525, 6824, 118886, 0, 0, 5619, 65822, 0, 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, 0, 1338, 120581, 0, 12739, 4603, 3084, 0, 0, 9858, 6037, 0, + 3974, 78213, 10290, 0, 3083, 10322, 0, 0, 0, 41036, 0, 0, 43321, 65606, + 0, 41032, 42388, 0, 64700, 10011, 1445, 40961, 0, 194893, 0, 40960, 0, + 194891, 0, 40963, 64952, 10402, 0, 0, 0, 10603, 0, 0, 0, 0, 6714, 10083, + 127069, 194895, 78367, 0, 0, 0, 9073, 42585, 64302, 10704, 65030, 4787, + 0, 74829, 0, 65423, 0, 0, 9570, 0, 9525, 2689, 917626, 65426, 0, 917624, + 43740, 0, 40966, 917623, 13286, 3998, 42598, 42596, 503, 0, 8735, 2690, + 66488, 42836, 194913, 41954, 917617, 1652, 772, 6688, 8310, 65428, 3487, + 43416, 3585, 10194, 43320, 119159, 0, 194874, 6468, 41976, 9720, 917606, + 11767, 41970, 0, 5836, 12358, 0, 4355, 9048, 12180, 65027, 64680, 65025, + 43699, 0, 41488, 0, 8527, 194917, 12362, 12435, 12360, 41053, 3266, 0, + 12356, 8616, 41466, 0, 0, 11450, 0, 3638, 12354, 0, 3216, 0, 2358, + 119069, 8633, 0, 0, 119182, 69244, 0, 0, 11759, 0, 6368, 74823, 0, 41423, + 8078, 10504, 0, 41698, 42237, 0, 7002, 0, 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, 0, 2041, 9178, 9672, 41427, 43541, + 43317, 0, 0, 0, 41424, 917598, 120546, 0, 0, 0, 41417, 1261, 0, 0, 12102, + 119662, 41401, 0, 0, 0, 0, 0, 42290, 3275, 0, 42329, 0, 0, 0, 0, 0, + 120725, 10989, 74234, 0, 10598, 7410, 2669, 903, 0, 2920, 0, 127232, + 74603, 64504, 19928, 0, 0, 3917, 0, 11732, 0, 0, 41448, 41461, 0, 0, + 917558, 0, 8819, 12663, 0, 41184, 74014, 232, 74835, 120646, 9168, 65786, + 0, 0, 0, 9094, 0, 11758, 68425, 0, 1064, 42467, 0, 10115, 19924, 0, 0, + 7862, 64551, 13224, 8516, 41862, 66650, 7561, 78618, 69793, 1878, 0, 0, + 2911, 0, 41178, 5427, 64823, 0, 0, 12617, 41174, 0, 41458, 0, 41463, + 42413, 11292, 2406, 775, 0, 65584, 0, 6074, 9618, 194903, 0, 43440, 0, + 194901, 41436, 3656, 0, 194899, 41456, 0, 1599, 11333, 0, 6703, 8513, 0, + 1613, 0, 68456, 12598, 0, 0, 78745, 74500, 41460, 10145, 10542, 9937, + 78746, 0, 9905, 0, 65730, 0, 120374, 8427, 120375, 55246, 120376, 0, + 11497, 64687, 74008, 120371, 3871, 0, 0, 9111, 5741, 0, 194846, 120366, + 119111, 120745, 0, 120368, 0, 11648, 0, 0, 120364, 41587, 120365, 0, + 74322, 42113, 0, 0, 12172, 0, 74530, 65298, 65723, 194840, 73871, 65724, + 7928, 120354, 0, 41595, 73730, 0, 42118, 73830, 66042, 10355, 0, 7875, 0, + 41598, 3993, 0, 1545, 40971, 536, 0, 43029, 0, 0, 65173, 65286, 0, 0, 0, + 0, 0, 0, 41375, 5402, 0, 0, 1687, 120503, 0, 0, 78194, 64326, 40969, + 10526, 78753, 8323, 40968, 1339, 11731, 78756, 0, 65460, 12242, 0, 8020, + 10843, 11554, 0, 0, 8266, 41006, 65722, 0, 10710, 0, 118942, 67667, + 64567, 119155, 195091, 0, 119636, 67857, 120687, 0, 0, 11755, 66305, 0, + 0, 10917, 120767, 0, 11272, 2040, 41247, 41326, 195060, 1741, 42370, + 1227, 0, 0, 11413, 0, 0, 5283, 1586, 4978, 0, 1984, 0, 0, 120651, 40984, + 0, 9373, 0, 12916, 6284, 0, 41663, 0, 0, 0, 9237, 9385, 41648, 0, 0, 0, + 41666, 1830, 73783, 2056, 41287, 0, 0, 0, 42219, 0, 0, 41987, 41676, 0, + 120823, 0, 41670, 0, 0, 2796, 55291, 11683, 9902, 74521, 0, 11451, 0, 0, + 42631, 2359, 0, 67844, 74164, 41238, 548, 11405, 13133, 64368, 0, 0, 0, + 397, 43622, 42139, 9547, 9590, 0, 1614, 43661, 64356, 66307, 6651, 1358, + 0, 428, 9620, 1466, 78112, 10982, 118831, 1333, 0, 407, 6425, 0, 74253, + 0, 0, 0, 5804, 11976, 8554, 0, 0, 0, 9057, 42294, 41218, 0, 0, 78137, + 1883, 10952, 8048, 0, 41225, 0, 118955, 0, 0, 0, 4407, 0, 65809, 119074, + 194821, 8448, 68122, 74183, 0, 12675, 12659, 0, 42363, 120624, 194824, + 55273, 10766, 12012, 2386, 64732, 9170, 917821, 9123, 64585, 120500, 0, + 43367, 42051, 0, 4164, 9081, 0, 120569, 42049, 42042, 8709, 0, 0, 120637, + 42419, 0, 42047, 0, 0, 8470, 11807, 65897, 577, 0, 0, 74300, 0, 127308, + 74840, 0, 0, 0, 0, 8736, 1414, 42643, 9683, 43486, 74344, 0, 2536, 0, + 66330, 0, 0, 0, 0, 0, 0, 0, 66317, 917612, 66315, 2106, 0, 11273, 0, + 43004, 7541, 0, 0, 961, 64307, 66324, 64906, 0, 3106, 65917, 41284, 1696, + 0, 891, 12105, 0, 42624, 12802, 3264, 8824, 13268, 43003, 10936, 0, 0, 0, + 0, 0, 0, 2322, 0, 0, 11449, 0, 42868, 41285, 3547, 0, 0, 0, 0, 43216, + 6089, 78682, 0, 120578, 4170, 1029, 0, 127036, 119224, 42374, 0, 744, 0, + 0, 0, 65823, 0, 0, 3551, 0, 0, 4623, 55268, 0, 4598, 0, 65136, 0, 0, 0, + 10851, 0, 6179, 0, 6180, 0, 11952, 120778, 78648, 11972, 78646, 78647, + 78644, 78645, 177, 78643, 6176, 120580, 0, 0, 6177, 9020, 78652, 78653, + 6178, 120249, 120242, 0, 67673, 7518, 8754, 0, 120237, 74551, 43081, 0, + 0, 9136, 120240, 4401, 41280, 0, 8974, 2308, 0, 74149, 0, 2318, 0, 66361, + 8198, 0, 64360, 12601, 42536, 65266, 120827, 74307, 0, 6970, 5404, 43332, + 3667, 7936, 12925, 126989, 6385, 0, 0, 118949, 10874, 65505, 0, 0, 42053, + 2075, 42057, 11083, 42052, 0, 0, 67651, 0, 9665, 0, 0, 13181, 0, 0, 0, 0, + 74148, 0, 0, 120225, 120229, 120224, 74172, 41145, 0, 0, 0, 41148, 8683, + 7594, 127519, 0, 119090, 10869, 43458, 41146, 0, 11441, 0, 3512, 119633, + 0, 8103, 0, 0, 65184, 11780, 41563, 42796, 0, 119106, 41544, 65146, 0, 0, + 0, 0, 19942, 0, 118908, 7988, 10436, 74273, 3271, 73804, 64711, 0, 0, 0, + 0, 3804, 13070, 11557, 42044, 0, 1095, 0, 3599, 0, 0, 0, 8514, 0, 0, 0, + 74346, 66697, 0, 11684, 0, 0, 0, 0, 42043, 43232, 66677, 0, 42046, 78241, + 4036, 0, 0, 0, 194861, 0, 11954, 0, 1450, 12986, 1340, 0, 65441, 0, 0, 0, + 0, 0, 917542, 0, 0, 6539, 0, 0, 0, 194856, 0, 120492, 41190, 3973, + 119365, 4575, 41193, 7982, 429, 0, 0, 0, 194854, 65792, 0, 118968, 6417, + 118918, 78178, 0, 194850, 0, 0, 4919, 10590, 0, 7755, 0, 0, 64548, + 120506, 1621, 10214, 65126, 0, 127004, 0, 12188, 0, 1617, 8050, 0, 5015, + 0, 119174, 42590, 194871, 1756, 78181, 0, 65768, 6352, 41892, 0, 7555, + 13103, 5408, 2817, 1214, 0, 0, 0, 0, 0, 0, 0, 7957, 8689, 64723, 1056, 0, + 74147, 0, 0, 55286, 7073, 65850, 12327, 0, 119028, 0, 0, 0, 2341, 8450, + 8484, 8474, 0, 0, 0, 8461, 0, 12153, 12799, 0, 43709, 43708, 9451, 7571, + 13073, 0, 0, 681, 0, 703, 0, 3272, 8781, 12894, 0, 11709, 0, 74446, 0, 0, + 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, 0, 0, 0, 0, 10039, 0, 0, 5623, 5717, 5776, 0, 0, 0, + 41591, 11036, 65252, 120488, 0, 0, 0, 0, 0, 0, 0, 8887, 0, 7295, 11031, + 0, 43157, 0, 8946, 10348, 10412, 8755, 0, 0, 5718, 13221, 0, 0, 78135, 0, + 0, 8810, 74499, 686, 0, 0, 4619, 118954, 6654, 73769, 74426, 0, 12040, + 65689, 10128, 65118, 0, 119151, 118891, 0, 0, 2401, 68144, 8792, 0, 0, + 65455, 0, 0, 0, 119129, 0, 12886, 0, 66624, 0, 43557, 10300, 10161, + 10396, 74135, 0, 118945, 78118, 73851, 3010, 6441, 78122, 1458, 41475, 0, + 0, 0, 11479, 0, 0, 6350, 12864, 0, 78114, 1061, 64780, 2001, 43111, + 55230, 0, 4052, 0, 7626, 0, 0, 1045, 0, 5631, 41113, 0, 0, 43707, 74127, + 0, 0, 8486, 0, 73758, 2335, 4362, 0, 0, 69221, 1025, 0, 42625, 0, 78084, + 41443, 0, 0, 0, 1774, 1523, 0, 0, 41445, 78236, 0, 8567, 41442, 3988, 0, + 78237, 118910, 0, 65274, 8564, 0, 78238, 127515, 0, 0, 43446, 0, 66513, + 6256, 0, 579, 55218, 10206, 0, 6375, 2673, 0, 11814, 0, 4488, 0, 0, + 68451, 10444, 118846, 0, 11799, 74407, 68466, 4487, 0, 42832, 1032, + 120267, 43450, 78257, 7203, 0, 614, 78191, 0, 120615, 0, 78262, 0, 0, 0, 43121, 0, 0, 0, 1050, 7549, 0, 0, 9314, 0, 0, 120616, 0, 10057, 0, 0, 0, - 66504, 0, 0, 2307, 0, 64333, 0, 0, 73873, 0, 0, 0, 0, 0, 0, 10360, 0, 0, - 0, 440, 0, 13085, 9233, 74216, 0, 0, 0, 0, 66447, 8046, 64963, 65777, - 10125, 74212, 42819, 10910, 0, 1521, 9896, 0, 10487, 0, 12527, 0, 7970, - 0, 0, 0, 65769, 5243, 9849, 5239, 65771, 0, 0, 5237, 0, 0, 10103, 5247, - 4769, 0, 118977, 0, 5764, 0, 0, 3008, 4896, 0, 12087, 0, 0, 41103, 0, - 64565, 4773, 0, 0, 0, 4770, 0, 917567, 8731, 65378, 0, 120619, 9122, 0, - 0, 4774, 3019, 9997, 12834, 0, 9456, 10215, 0, 0, 0, 0, 0, 74776, 4281, - 4768, 0, 41535, 4099, 9017, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 42814, 880, 0, - 0, 0, 0, 0, 10116, 9877, 0, 0, 0, 7095, 0, 0, 120632, 0, 0, 8243, 2427, - 0, 7093, 0, 11585, 0, 0, 0, 12223, 0, 0, 1434, 0, 5637, 11573, 0, 0, 0, - 19951, 0, 0, 0, 0, 64432, 0, 0, 118888, 1156, 8740, 0, 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, 0, 0, 42257, 5696, 120470, 120465, 3862, 9643, 0, 0, - 7634, 0, 9845, 0, 0, 5701, 9722, 41490, 0, 1426, 120474, 0, 0, 0, 74345, - 8571, 194991, 0, 0, 0, 0, 43182, 12184, 0, 42022, 0, 10281, 0, 5650, - 43194, 64712, 0, 0, 990, 5647, 0, 0, 0, 41114, 11477, 5646, 0, 11018, 0, - 3945, 0, 0, 0, 0, 0, 0, 0, 1020, 73763, 0, 0, 5648, 64748, 0, 0, 10205, - 3545, 0, 6984, 0, 74051, 0, 118868, 120458, 2667, 0, 0, 0, 9911, 0, - 65020, 10097, 119166, 0, 0, 118836, 0, 0, 1140, 0, 0, 10159, 0, 0, 8128, - 0, 0, 0, 1815, 19910, 890, 0, 3267, 0, 0, 10123, 0, 4410, 1041, 10576, - 8102, 0, 580, 74232, 0, 0, 0, 0, 0, 19938, 65906, 0, 0, 0, 3298, 5375, - 10142, 0, 8215, 0, 6134, 41246, 64402, 0, 0, 0, 0, 0, 41382, 0, 0, 5173, - 65348, 527, 0, 0, 0, 0, 0, 11915, 0, 0, 10072, 0, 66434, 2329, 42250, 0, - 0, 0, 12245, 119237, 0, 0, 0, 0, 0, 74328, 0, 74769, 0, 0, 9069, 6144, 0, - 0, 73822, 0, 0, 64917, 41521, 118934, 494, 13250, 0, 65098, 0, 956, 0, - 12830, 10462, 73740, 0, 0, 0, 0, 66449, 13263, 0, 0, 13171, 0, 0, 0, 0, - 0, 1044, 41276, 0, 0, 0, 42068, 11795, 0, 0, 0, 0, 42450, 3907, 0, 64526, - 0, 0, 12295, 0, 11475, 0, 3020, 11537, 0, 66441, 0, 0, 0, 0, 1057, 566, - 0, 0, 3016, 42274, 0, 66490, 12921, 66571, 0, 0, 3006, 4620, 0, 0, 0, 0, - 64659, 0, 0, 0, 43333, 68129, 8626, 0, 0, 9090, 65377, 41596, 0, 0, 1698, - 0, 64477, 0, 0, 1053, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 1926, 0, 0, 7898, 8110, 10935, 0, 0, 5830, 0, 64594, 0, 0, 0, 0, 8693, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 119187, 11439, 0, 0, 0, 0, 42313, - 5579, 0, 0, 0, 0, 0, 5578, 41774, 0, 42023, 6234, 5669, 0, 0, 0, 0, 0, 0, - 5583, 0, 0, 42426, 5580, 42276, 2923, 892, 5582, 42465, 41330, 0, 5795, - 65512, 0, 65702, 0, 120801, 65251, 0, 65710, 0, 0, 0, 0, 5370, 0, 0, - 1638, 10966, 10188, 65878, 118848, 0, 0, 0, 0, 8172, 42017, 0, 10844, 0, - 0, 0, 0, 0, 0, 286, 0, 1062, 0, 0, 0, 0, 0, 1070, 64900, 0, 6095, 41865, - 0, 3015, 0, 917763, 5211, 0, 6400, 0, 194983, 0, 8189, 11276, 0, 0, 372, - 0, 0, 118874, 42102, 41585, 0, 0, 42101, 276, 0, 0, 33, 74226, 0, 9007, - 118796, 41588, 66033, 427, 10763, 0, 0, 0, 0, 1031, 6257, 0, 42104, 0, 0, - 2328, 0, 1071, 0, 0, 74848, 0, 0, 0, 1047, 0, 0, 64790, 0, 0, 10651, 0, - 0, 0, 0, 0, 119181, 5711, 41633, 12098, 65571, 9166, 0, 5710, 0, 0, - 65213, 13216, 0, 0, 0, 0, 64611, 41623, 0, 5715, 0, 0, 0, 5712, 2761, - 41620, 68124, 3074, 5722, 0, 8643, 73768, 0, 118906, 2757, 11067, 9718, - 74498, 8910, 10689, 6479, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 118911, 0, 0, 0, - 0, 0, 120010, 0, 8701, 68130, 119616, 120522, 0, 42477, 0, 12123, 4495, - 43569, 0, 0, 0, 64946, 10992, 0, 0, 0, 0, 9318, 120661, 13249, 65679, - 73808, 0, 65457, 42249, 7639, 0, 67845, 42641, 5454, 0, 0, 194997, - 120005, 0, 0, 5084, 0, 0, 119173, 0, 733, 0, 0, 0, 0, 41677, 0, 9218, - 1731, 0, 0, 0, 0, 0, 0, 0, 0, 127018, 0, 5155, 0, 5358, 0, 0, 917767, - 64424, 0, 3840, 64314, 41432, 0, 0, 0, 0, 0, 65943, 0, 3371, 10988, 0, - 8771, 1479, 0, 0, 1109, 11580, 0, 64601, 12205, 0, 0, 64507, 8868, 399, - 0, 74842, 0, 0, 12149, 13088, 551, 0, 10156, 12119, 0, 0, 2544, 65074, 0, - 0, 0, 0, 351, 119149, 0, 0, 0, 0, 74268, 0, 0, 0, 42377, 0, 0, 0, 0, 0, - 9013, 5588, 0, 0, 0, 0, 73960, 5585, 65881, 2549, 74469, 0, 0, 5584, - 8358, 0, 74411, 0, 10919, 0, 7980, 0, 0, 0, 41800, 5589, 0, 2664, 41613, - 5586, 118890, 0, 11356, 0, 0, 0, 0, 0, 42573, 67856, 0, 0, 0, 0, 0, 8135, - 6450, 10055, 0, 0, 0, 0, 5657, 0, 9626, 0, 0, 10179, 5654, 12939, 0, - 120799, 0, 0, 5652, 10945, 0, 0, 0, 3661, 7863, 0, 0, 0, 0, 0, 5659, 0, - 0, 66729, 5655, 0, 42168, 0, 1055, 917628, 0, 66310, 74030, 0, 12146, - 73955, 73956, 11618, 0, 126990, 0, 10272, 10304, 10368, 42518, 594, - 10244, 10248, 10256, 0, 64870, 0, 3467, 0, 0, 3331, 946, 10231, 1495, - 8131, 74330, 0, 9562, 0, 65927, 0, 0, 120155, 0, 64656, 0, 0, 194837, 0, - 5666, 65227, 5318, 0, 0, 9091, 10798, 0, 0, 10186, 0, 7732, 0, 64556, 0, - 0, 5668, 74445, 0, 0, 5670, 0, 0, 11820, 2992, 7826, 5667, 19952, 120807, - 0, 12749, 0, 0, 0, 66496, 4361, 119260, 1306, 9286, 1497, 0, 0, 0, 0, - 3571, 13247, 0, 7973, 66353, 0, 0, 67896, 43192, 0, 0, 553, 120653, 0, 0, - 5829, 0, 4587, 0, 65912, 0, 12746, 0, 0, 119924, 5633, 119927, 0, 0, 0, - 64905, 0, 9512, 0, 12742, 6443, 0, 0, 9135, 0, 0, 0, 0, 0, 0, 0, 12148, - 0, 0, 0, 64256, 0, 11669, 0, 5634, 4524, 0, 0, 0, 118880, 74266, 65182, - 0, 0, 5221, 0, 328, 0, 0, 0, 5636, 0, 5329, 0, 5638, 119918, 7940, 64938, - 43223, 0, 5635, 3373, 2986, 0, 74223, 3437, 0, 6203, 4247, 0, 11920, - 8274, 0, 0, 1657, 119921, 0, 0, 5639, 2954, 5660, 5640, 0, 0, 0, 0, 0, 0, - 41637, 0, 0, 0, 41625, 0, 0, 120713, 11705, 5642, 0, 0, 0, 4356, 11710, - 0, 12051, 0, 0, 5641, 8259, 0, 1058, 0, 67630, 0, 0, 1144, 0, 0, 0, 0, - 73890, 118972, 0, 73734, 0, 5645, 64964, 8652, 2547, 66484, 0, 0, 5608, - 65890, 0, 0, 67621, 119934, 9000, 0, 0, 0, 1865, 0, 5613, 74267, 0, 0, - 5610, 0, 0, 65826, 5612, 0, 10787, 917551, 2997, 0, 5609, 0, 65319, - 119933, 12316, 65376, 2412, 0, 8186, 9807, 74269, 0, 13130, 65874, 0, - 5807, 0, 10030, 5306, 12936, 0, 0, 11704, 0, 0, 10211, 0, 0, 0, 0, 11706, - 9710, 0, 0, 0, 413, 65623, 74237, 0, 9133, 74262, 0, 1042, 0, 64779, - 12171, 119240, 6185, 64776, 4984, 0, 708, 0, 0, 12241, 0, 0, 1308, 0, - 2534, 810, 0, 0, 0, 0, 0, 1917, 3000, 0, 0, 120739, 2364, 0, 74470, - 66618, 65680, 0, 10027, 0, 0, 12337, 120722, 0, 0, 2980, 755, 0, 931, - 13124, 68182, 0, 2748, 0, 0, 65041, 0, 73998, 8730, 0, 0, 119009, 7274, - 119250, 0, 7275, 0, 935, 0, 65840, 377, 42325, 11649, 0, 65253, 64301, 0, - 0, 42341, 65284, 2417, 0, 12884, 19912, 7907, 10768, 0, 194998, 0, 10673, - 119217, 7248, 0, 0, 1781, 5496, 3627, 62, 1649, 0, 964, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 13142, 0, 42415, 66575, 4542, 74037, 43547, 0, 0, 0, 2991, - 4946, 42454, 0, 7949, 0, 0, 11341, 42494, 3073, 65625, 9714, 11692, 0, 0, - 0, 6478, 9898, 0, 65237, 6241, 0, 4877, 0, 6238, 0, 10548, 127049, 4409, - 0, 0, 64798, 0, 5346, 0, 120528, 6237, 5461, 0, 9176, 0, 0, 65231, 65884, - 12678, 0, 0, 11378, 0, 42785, 2408, 3251, 0, 0, 5685, 0, 2461, 11052, - 7091, 5342, 8317, 0, 68163, 5340, 0, 0, 0, 73928, 0, 0, 0, 0, 0, 65482, - 0, 9142, 0, 0, 0, 10938, 0, 118790, 1182, 2542, 4826, 0, 0, 0, 529, 8580, - 0, 0, 10586, 10790, 11987, 66023, 41593, 41207, 0, 0, 41594, 225, 42828, - 0, 0, 0, 64705, 74379, 10721, 0, 3438, 42097, 0, 11084, 3194, 41870, 266, - 0, 0, 41873, 120575, 11324, 0, 0, 8420, 64918, 0, 41871, 41338, 3734, - 7734, 0, 8750, 66605, 66011, 0, 40965, 0, 0, 5161, 10572, 0, 0, 0, 64349, - 7287, 42162, 0, 0, 0, 11948, 0, 12359, 66674, 41369, 1697, 12191, 0, 0, - 7286, 0, 0, 10031, 0, 9870, 0, 8620, 65824, 0, 11938, 0, 7285, 0, 119577, - 0, 0, 0, 41583, 0, 65799, 0, 0, 0, 0, 0, 66199, 0, 3609, 0, 0, 832, - 120693, 120770, 0, 66007, 0, 65703, 0, 0, 0, 5180, 0, 41395, 41530, - 11691, 64773, 0, 74002, 0, 0, 0, 11036, 243, 13200, 0, 6024, 0, 74398, - 10037, 41529, 10648, 8538, 0, 0, 0, 4285, 66195, 0, 4230, 0, 13307, 0, 0, - 7563, 42376, 0, 0, 120512, 0, 0, 214, 0, 0, 0, 65893, 12208, 120488, 0, - 66311, 65589, 0, 2603, 0, 0, 0, 0, 0, 6022, 0, 2884, 0, 11620, 0, 43, 0, - 66453, 1016, 41107, 0, 41121, 3885, 92, 65456, 64608, 0, 74801, 0, 12451, - 0, 0, 0, 12453, 0, 0, 74241, 0, 8890, 12457, 0, 0, 0, 0, 118819, 0, 0, 0, - 66637, 7995, 8759, 0, 0, 12449, 0, 0, 0, 8752, 3197, 4720, 10165, 0, - 119249, 0, 11595, 64893, 0, 120180, 0, 0, 4993, 0, 6168, 10934, 1946, - 741, 0, 5494, 4639, 0, 1990, 66589, 4498, 0, 0, 0, 0, 0, 2960, 73779, 0, - 8969, 0, 0, 0, 0, 2950, 0, 6210, 0, 370, 0, 0, 0, 4953, 0, 0, 0, 0, 0, 0, - 0, 65688, 0, 5063, 3517, 2964, 0, 0, 65094, 74791, 10566, 10144, 66333, - 8252, 729, 66016, 0, 0, 0, 64923, 0, 65208, 9032, 0, 0, 0, 41215, 0, - 65883, 0, 0, 120602, 3761, 0, 0, 0, 0, 12912, 119012, 3850, 0, 0, 0, 0, - 0, 908, 0, 8611, 0, 0, 0, 0, 0, 0, 8978, 120540, 119135, 41586, 10527, 0, - 917848, 3848, 0, 0, 0, 65241, 5336, 0, 0, 663, 0, 10780, 0, 0, 0, 0, 0, - 0, 347, 0, 0, 0, 64675, 41582, 119126, 0, 65579, 12980, 0, 12143, 73733, - 0, 0, 0, 41804, 0, 0, 0, 0, 0, 41584, 10681, 0, 0, 73938, 0, 0, 4800, - 66661, 0, 66306, 64715, 0, 9518, 6609, 10434, 0, 11319, 1097, 0, 917850, - 41730, 0, 0, 0, 0, 65172, 41728, 41721, 0, 0, 0, 41203, 0, 13110, 41726, - 0, 0, 1000, 0, 0, 41140, 1209, 0, 0, 0, 1073, 0, 0, 41138, 0, 0, 0, - 12167, 1115, 41605, 9794, 127062, 127063, 127064, 12237, 127066, 66314, - 6587, 9290, 0, 0, 9231, 0, 2959, 7926, 0, 0, 0, 64398, 0, 119970, 12311, - 0, 0, 118846, 0, 0, 0, 119973, 0, 0, 0, 12290, 0, 0, 0, 42142, 10151, - 8205, 0, 5131, 0, 9627, 0, 0, 0, 0, 1944, 1248, 10148, 0, 119990, 119991, - 12701, 119993, 11308, 119995, 0, 119997, 119998, 65305, 74263, 4031, - 42794, 120003, 7075, 8154, 120006, 120007, 41817, 73934, 42275, 120011, - 120012, 120013, 120014, 120015, 6041, 0, 41899, 0, 8002, 0, 4364, 0, 0, - 64332, 0, 7813, 9064, 119986, 10124, 7526, 8601, 7281, 0, 7279, 12041, - 1418, 10885, 12673, 0, 0, 9660, 0, 13012, 4571, 0, 0, 0, 12078, 2970, 0, - 10933, 0, 0, 0, 0, 0, 41599, 0, 0, 0, 12950, 0, 3486, 0, 0, 4239, 0, 0, - 66511, 0, 2637, 64629, 8460, 127053, 8476, 0, 0, 0, 0, 65673, 1019, 0, - 4148, 0, 12289, 0, 4316, 0, 13119, 0, 5412, 66243, 10744, 0, 73864, 0, - 41734, 8206, 74081, 9163, 3286, 9072, 5867, 13302, 7622, 0, 41736, 0, - 41731, 0, 9483, 5416, 0, 119593, 10817, 0, 41539, 0, 0, 73963, 41855, - 41867, 65564, 11277, 65892, 11536, 10620, 0, 12210, 0, 73932, 5498, - 73942, 41536, 0, 0, 0, 3459, 8997, 0, 0, 0, 0, 0, 0, 66377, 0, 0, 0, 0, - 3161, 295, 0, 0, 0, 0, 0, 9016, 0, 63903, 63902, 63901, 0, 3971, 0, - 73972, 2952, 0, 11038, 10901, 63900, 63899, 63898, 0, 667, 12332, 63887, - 6086, 41722, 0, 5172, 0, 0, 4159, 0, 0, 9815, 63884, 19934, 63882, 41198, - 8555, 63878, 63877, 42460, 6050, 0, 63881, 63872, 0, 42421, 0, 41723, - 63875, 63874, 11460, 7432, 1913, 41913, 63852, 0, 0, 42348, 0, 74841, - 446, 41911, 0, 63851, 63850, 41910, 0, 63846, 2972, 12932, 7262, 0, - 63849, 63848, 63847, 0, 0, 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, 0, 0, - 10785, 0, 119170, 4557, 0, 9159, 10171, 13125, 63860, 5540, 63858, 63865, - 281, 13242, 63862, 74154, 0, 5536, 65568, 63857, 1388, 74169, 0, 1077, 0, - 65099, 11531, 0, 0, 0, 0, 0, 42773, 0, 0, 0, 119220, 0, 3663, 0, 1112, - 119122, 8686, 0, 5334, 65081, 0, 74778, 0, 11077, 0, 6509, 0, 5327, 0, - 19907, 63869, 3478, 7583, 7679, 2903, 0, 3001, 1158, 8745, 0, 73748, - 63866, 0, 1915, 4846, 0, 66371, 118984, 42105, 2990, 120128, 805, 120130, - 120125, 12070, 8760, 1117, 118987, 12212, 120123, 65174, 42357, 63835, - 63834, 0, 0, 12225, 63838, 63837, 0, 0, 63833, 6042, 66360, 8083, 0, 0, - 63821, 63820, 63819, 63818, 0, 5227, 9047, 63822, 0, 6091, 0, 10691, 560, - 5643, 8226, 119578, 63812, 63811, 63810, 63809, 5542, 63815, 63814, - 63813, 6047, 1597, 120143, 780, 206, 0, 4936, 65147, 8168, 63930, 0, - 1093, 9882, 63934, 63933, 63932, 917554, 63929, 3546, 1605, 0, 9806, - 65566, 0, 8400, 11343, 63920, 0, 63926, 2984, 5968, 9287, 0, 4618, 0, 0, - 13169, 5290, 5283, 1695, 10743, 1088, 63825, 7268, 1084, 1085, 63829, - 1083, 10131, 7283, 0, 63970, 0, 1092, 4754, 7273, 5252, 0, 0, 0, 0, 0, - 11809, 0, 0, 0, 2965, 7258, 8808, 0, 1089, 4187, 63937, 42119, 42120, 0, - 940, 5787, 10099, 63938, 0, 74494, 12463, 2994, 0, 0, 0, 9664, 0, 0, 0, - 0, 74343, 0, 0, 660, 10127, 666, 9022, 5532, 0, 5533, 0, 0, 6118, 222, - 979, 3884, 0, 74151, 120445, 6502, 0, 127118, 0, 63951, 12465, 0, 0, 0, - 63946, 1707, 63924, 12461, 63950, 63897, 63948, 63947, 63945, 6038, - 63943, 63942, 64685, 63895, 65838, 0, 7776, 0, 0, 0, 120444, 0, 801, - 43165, 1690, 63919, 63918, 63917, 13277, 63893, 0, 120638, 9906, 5486, - 2334, 0, 63916, 5483, 63914, 120610, 63911, 5484, 63909, 63908, 2539, 0, - 63913, 5485, 0, 195060, 9061, 5534, 10672, 4502, 0, 253, 0, 0, 0, 42854, - 0, 0, 11530, 0, 0, 0, 0, 0, 10474, 0, 13257, 42354, 0, 0, 0, 195065, 0, - 8413, 0, 0, 5693, 7272, 0, 13209, 64470, 65831, 0, 195063, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 66608, 3111, 41863, 8804, 66607, 0, 7270, 0, 66606, 6628, - 1076, 41305, 1436, 0, 0, 0, 63982, 10221, 12807, 63907, 63906, 1598, - 63904, 0, 0, 41729, 4423, 1307, 0, 10515, 41589, 0, 0, 6218, 0, 1430, 0, - 0, 120606, 119365, 5413, 7619, 3255, 3493, 74032, 11549, 10735, 0, 73937, - 10517, 0, 0, 10990, 65073, 5167, 4481, 3771, 0, 2710, 0, 0, 41724, 0, - 43073, 41690, 12479, 0, 0, 0, 0, 119659, 1628, 0, 0, 0, 65262, 63854, - 10783, 42315, 0, 63855, 120683, 0, 0, 5339, 74323, 0, 13004, 0, 4457, 0, - 0, 0, 0, 5684, 8678, 10914, 0, 5689, 65807, 0, 120617, 12633, 0, 0, - 65183, 5688, 11926, 6033, 6310, 5686, 0, 0, 0, 120647, 0, 50, 0, 9871, 0, - 0, 0, 0, 0, 66468, 0, 13259, 4448, 0, 0, 0, 0, 67853, 0, 10640, 0, 1151, - 0, 0, 0, 0, 195050, 0, 0, 0, 0, 12501, 64604, 0, 11527, 118870, 8812, 0, - 11538, 8673, 12650, 11020, 0, 66467, 10839, 8087, 0, 0, 9894, 0, 0, 0, - 4636, 0, 118985, 8053, 0, 0, 0, 0, 120495, 0, 0, 12277, 194627, 11995, - 194626, 0, 12158, 0, 8741, 10197, 0, 0, 0, 6531, 0, 0, 473, 0, 0, 0, - 1873, 1087, 0, 0, 0, 0, 66439, 43218, 0, 194716, 7237, 12504, 74282, 0, - 0, 0, 9489, 0, 0, 4384, 74220, 195055, 0, 917561, 13295, 43191, 0, 0, - 1154, 3857, 1205, 0, 0, 13100, 12958, 120706, 74168, 0, 0, 4421, 10592, - 0, 495, 0, 41712, 7983, 0, 0, 0, 8494, 0, 7654, 41710, 4196, 0, 437, - 41709, 73772, 0, 0, 9465, 13290, 119180, 4997, 64306, 0, 0, 4999, 194642, - 0, 0, 4711, 120769, 0, 2739, 0, 8044, 74834, 0, 41789, 0, 10809, 0, 0, 0, - 1779, 6600, 6601, 41543, 5325, 642, 64187, 13058, 0, 0, 0, 0, 13229, 0, - 10575, 0, 0, 0, 41791, 1104, 0, 0, 10655, 0, 0, 0, 0, 1082, 195049, 8428, - 0, 0, 0, 0, 0, 10167, 0, 12993, 8049, 41548, 0, 6458, 0, 0, 4761, 63828, - 4766, 64623, 1273, 194653, 0, 118876, 0, 6912, 1313, 7033, 10483, 0, - 41545, 0, 0, 0, 0, 0, 0, 0, 3484, 74337, 0, 0, 8503, 5122, 41527, 0, - 66320, 0, 0, 0, 0, 41537, 0, 8303, 8282, 11817, 0, 10003, 73859, 65904, - 194663, 1686, 0, 0, 11467, 3664, 65921, 64299, 194664, 0, 0, 4324, 126, - 42246, 119152, 0, 0, 65926, 7744, 194636, 74277, 74302, 0, 0, 6966, 0, - 8136, 0, 65600, 1633, 0, 0, 4762, 1103, 0, 0, 4765, 0, 13078, 0, 4760, - 63827, 0, 10871, 43199, 1102, 0, 0, 0, 0, 11546, 74794, 337, 0, 42591, - 8627, 12279, 1111, 0, 0, 4707, 0, 10143, 7883, 127081, 7880, 4522, 8645, - 5704, 13010, 0, 8304, 0, 0, 119575, 0, 0, 66654, 0, 0, 0, 13008, 0, 4385, - 0, 13011, 0, 0, 119161, 13009, 160, 2677, 0, 0, 41793, 65763, 74221, - 120141, 41792, 42770, 0, 65762, 118829, 64573, 5709, 0, 194638, 0, 0, 0, - 1079, 3867, 5708, 0, 0, 0, 5706, 64768, 5705, 8791, 4005, 0, 10237, - 10991, 0, 917579, 9173, 917581, 917580, 13170, 65942, 917577, 42605, - 120765, 917570, 917573, 917572, 10058, 0, 74867, 194654, 127078, 3339, - 11448, 1106, 917591, 917590, 917593, 3340, 917587, 917586, 917589, - 917588, 917583, 10605, 1309, 63966, 120743, 1754, 127075, 13246, 864, 0, - 118926, 8972, 0, 7849, 120092, 0, 13240, 195068, 5192, 4338, 0, 10948, - 917601, 13199, 120169, 1236, 13208, 13261, 13189, 13188, 120164, 0, 7440, - 0, 120153, 9553, 1590, 63777, 63776, 13178, 63782, 63781, 63780, 63779, - 1583, 0, 13260, 4550, 0, 64205, 0, 0, 41522, 0, 0, 0, 0, 11354, 0, 0, - 42795, 0, 119195, 11394, 194646, 13236, 13272, 13194, 1334, 0, 4479, - 1178, 65586, 120663, 66681, 119193, 4601, 0, 0, 0, 0, 0, 0, 0, 63787, + 66504, 0, 0, 2307, 0, 64333, 0, 0, 73873, 0, 0, 0, 0, 0, 0, 10360, 6746, + 0, 0, 440, 0, 13085, 9233, 74216, 0, 0, 68612, 0, 66447, 8046, 64963, + 65777, 10125, 74212, 42819, 10910, 0, 1521, 9896, 0, 10487, 0, 12527, 0, + 7970, 0, 0, 0, 65769, 5243, 9849, 5239, 65771, 0, 0, 5237, 0, 0, 10103, + 5247, 4769, 0, 118977, 12873, 5764, 0, 0, 3008, 4896, 0, 12087, 0, 55231, + 41103, 0, 64565, 4773, 0, 0, 0, 4770, 0, 917567, 8731, 65378, 0, 120619, + 9122, 0, 0, 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, 0, 0, 0, 10116, 9877, 0, 0, 0, 7095, 0, 0, + 6778, 0, 78090, 8243, 2427, 0, 7093, 0, 11585, 195003, 9962, 0, 12223, 0, + 0, 1434, 0, 5637, 11573, 0, 0, 0, 19951, 0, 78121, 0, 0, 55283, 0, 0, + 74437, 1156, 8740, 0, 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, 0, 0, 42257, 5696, + 120470, 120465, 3862, 9643, 0, 0, 7634, 65167, 9845, 0, 0, 5701, 9722, + 41490, 0, 1426, 68217, 0, 68447, 42204, 55270, 8571, 194991, 0, 0, 78818, + 0, 43182, 12184, 0, 42022, 0, 10281, 0, 5650, 43194, 64712, 10744, 0, + 990, 5647, 0, 7387, 78734, 41114, 11477, 5646, 12879, 11018, 0, 3945, 0, + 0, 0, 0, 0, 78212, 0, 1020, 73763, 0, 78731, 5648, 64748, 194910, 0, + 10205, 3545, 0, 6984, 0, 74051, 0, 43242, 120458, 2667, 0, 0, 0, 9911, 0, + 65020, 10097, 119166, 0, 0, 118836, 0, 78427, 1140, 78426, 0, 10159, 0, + 0, 8128, 0, 0, 917965, 1815, 19910, 890, 0, 3267, 0, 0, 10123, 0, 4410, + 1041, 10576, 6354, 0, 580, 74232, 0, 0, 0, 0, 0, 19938, 65906, 0, 0, 0, + 3298, 5375, 10142, 0, 8215, 0, 6134, 41246, 64402, 0, 0, 0, 0, 0, 41382, + 0, 0, 5173, 65348, 527, 0, 0, 0, 0, 78797, 11915, 0, 0, 10072, 0, 42695, + 2329, 42250, 0, 0, 0, 12245, 9939, 0, 0, 0, 0, 0, 74328, 119576, 74769, + 0, 119087, 9069, 6144, 0, 0, 73822, 0, 0, 64917, 41521, 118934, 494, + 13250, 0, 65098, 6364, 956, 0, 12830, 10462, 73740, 0, 0, 0, 0, 66449, + 13263, 74281, 69217, 13171, 0, 0, 0, 0, 0, 1044, 41276, 0, 0, 0, 42068, + 11795, 0, 0, 0, 0, 42450, 3907, 0, 64526, 0, 68197, 12295, 0, 11475, 0, + 3020, 11537, 0, 66441, 0, 0, 0, 0, 1057, 566, 42696, 0, 3016, 42274, + 43464, 66490, 12921, 66571, 78472, 0, 3006, 4620, 127237, 0, 0, 0, 64659, + 0, 0, 55253, 6357, 6362, 8626, 0, 0, 9090, 65377, 41596, 0, 0, 1698, 0, + 64477, 0, 0, 1053, 0, 78269, 0, 0, 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, 0, 0, 0, 6359, 0, 43471, 0, 0, 0, + 127274, 0, 6358, 6361, 1926, 6356, 0, 7898, 8110, 10935, 0, 43633, 5830, + 0, 43685, 0, 0, 0, 0, 8693, 78611, 119565, 0, 0, 0, 127257, 0, 0, 0, 0, + 0, 0, 0, 119187, 11439, 78868, 0, 0, 78869, 42313, 5579, 0, 0, 0, 0, 0, + 5578, 41774, 0, 42023, 6234, 5669, 0, 0, 0, 0, 127506, 68202, 5583, 0, 0, + 42426, 5580, 42276, 2923, 892, 5582, 42465, 41330, 194987, 5795, 65512, + 119006, 65702, 0, 120801, 65251, 0, 65710, 0, 0, 67672, 0, 5370, 0, + 194986, 1638, 10966, 10188, 65878, 118848, 0, 0, 0, 0, 8172, 42017, 0, + 10844, 0, 0, 0, 6374, 0, 0, 286, 78023, 1062, 0, 119999, 0, 7395, 0, + 1070, 64900, 0, 6095, 41865, 0, 3015, 0, 917763, 5211, 0, 6400, 0, + 194983, 0, 8189, 11276, 0, 0, 372, 0, 0, 118874, 42102, 41585, 0, 0, + 42101, 276, 78402, 0, 33, 74226, 0, 9007, 118796, 41588, 66033, 427, + 10763, 118819, 0, 0, 0, 1031, 6257, 0, 42104, 0, 0, 2328, 0, 1071, 0, 0, + 74848, 0, 0, 0, 1047, 0, 0, 64790, 0, 0, 10651, 0, 0, 0, 0, 0, 119181, + 5711, 41633, 12098, 65571, 9166, 0, 5710, 0, 6790, 65168, 13216, 0, 0, 0, + 0, 64611, 41623, 195001, 5715, 0, 0, 0, 5712, 2761, 41620, 68124, 3074, + 5722, 0, 8643, 73768, 0, 118906, 2757, 11067, 9718, 74498, 8910, 10689, + 6479, 0, 0, 0, 78607, 0, 0, 0, 0, 0, 0, 118911, 0, 0, 0, 0, 0, 120010, 0, + 8701, 68130, 119616, 120522, 0, 42477, 0, 12123, 4495, 43569, 0, 0, 0, + 64946, 10992, 0, 120009, 0, 0, 9318, 120661, 13249, 65679, 73808, 0, + 65457, 42249, 7639, 43995, 67845, 42641, 5454, 0, 0, 194997, 120005, 0, + 0, 5084, 0, 0, 118861, 0, 733, 917876, 78014, 78436, 78435, 41677, 0, + 9218, 1731, 0, 0, 0, 0, 0, 0, 0, 120001, 127018, 0, 5155, 0, 5358, 0, 0, + 917767, 64424, 0, 3840, 64314, 41432, 0, 0, 68430, 119116, 43253, 65943, + 0, 3371, 10988, 0, 8771, 1479, 0, 0, 1109, 11580, 0, 64601, 12205, 0, 0, + 64507, 8868, 399, 0, 74842, 0, 0, 12149, 13088, 551, 0, 10156, 12119, 0, + 0, 2544, 65074, 0, 0, 0, 78011, 351, 119149, 0, 0, 55229, 0, 74268, 0, 0, + 0, 42377, 0, 0, 0, 0, 0, 9013, 4054, 0, 0, 0, 0, 73960, 5585, 65881, + 2549, 74469, 0, 0, 5584, 8358, 0, 74411, 0, 10919, 0, 7980, 0, 0, 0, + 41800, 5589, 0, 2664, 41613, 5586, 118890, 0, 11356, 0, 0, 43452, 78609, + 0, 42573, 67856, 0, 78129, 0, 0, 0, 8135, 6450, 10055, 77996, 0, 0, 0, + 5657, 0, 9626, 0, 77994, 10179, 5654, 12939, 0, 120799, 0, 0, 5652, + 10945, 0, 66486, 0, 3661, 7863, 0, 0, 0, 74509, 0, 5659, 0, 0, 66729, + 5655, 0, 42168, 0, 1055, 917628, 0, 66310, 74030, 0, 12146, 73955, 73956, + 11618, 0, 126990, 0, 10272, 10304, 10368, 42518, 594, 10244, 10248, 7407, + 0, 64870, 0, 3467, 0, 0, 3331, 946, 10231, 1495, 8131, 74330, 0, 9562, + 69222, 65927, 0, 0, 120155, 69769, 64656, 0, 0, 194837, 0, 5666, 65227, + 5318, 63994, 0, 9091, 10798, 0, 917979, 10186, 0, 7732, 0, 64556, 0, 0, + 5668, 74445, 0, 0, 5670, 0, 0, 11820, 2992, 7826, 5667, 19952, 120807, 0, + 12749, 0, 0, 0, 66496, 4361, 119260, 1306, 9286, 1497, 0, 0, 0, 0, 3571, + 13247, 0, 7973, 66353, 68435, 78278, 67896, 43192, 0, 78265, 553, 120653, + 0, 0, 5829, 0, 4587, 78285, 65912, 0, 12746, 0, 0, 119924, 5633, 119927, + 0, 0, 0, 64905, 0, 9512, 0, 12742, 6443, 0, 0, 9135, 0, 41564, 0, 55219, + 0, 0, 0, 12148, 0, 78297, 0, 64256, 0, 11669, 0, 5634, 4524, 0, 127270, + 0, 118880, 2425, 65182, 0, 43636, 5221, 78410, 328, 0, 0, 69815, 5636, 0, + 5329, 0, 5638, 119918, 7940, 64938, 43223, 0, 5635, 3373, 2986, 78292, + 74223, 3437, 78291, 6203, 4247, 0, 11920, 8274, 0, 0, 1657, 41561, 78299, + 78295, 5639, 2954, 5660, 5640, 78303, 0, 78300, 42227, 0, 0, 41637, + 67872, 0, 78310, 41625, 43362, 78309, 120713, 11705, 5642, 0, 5486, 0, + 4356, 11710, 0, 12051, 0, 0, 5641, 8259, 0, 1058, 0, 67630, 0, 0, 1144, + 78750, 0, 42228, 0, 73890, 118972, 0, 65322, 0, 5645, 64964, 8652, 2547, + 66484, 43634, 0, 5608, 65890, 0, 0, 67621, 119934, 9000, 0, 0, 0, 1865, + 0, 5613, 74267, 0, 0, 5610, 0, 0, 65826, 2069, 0, 10787, 43999, 2997, 0, + 5609, 78316, 65319, 78313, 12316, 65376, 2412, 0, 8186, 9807, 74269, 0, + 13130, 65874, 0, 5807, 0, 10030, 5306, 12936, 0, 0, 11704, 0, 0, 10211, + 0, 0, 0, 0, 11706, 9710, 0, 0, 0, 413, 65623, 74237, 0, 9133, 74262, 0, + 1042, 0, 64779, 12171, 119240, 6185, 64776, 4984, 0, 708, 11391, 0, + 12241, 0, 0, 1308, 0, 2534, 810, 0, 0, 0, 0, 0, 1917, 3000, 0, 0, 120739, + 2364, 0, 74470, 66618, 65680, 0, 10027, 0, 0, 12337, 120722, 0, 0, 2980, + 755, 69774, 931, 13124, 68182, 6363, 2748, 0, 0, 65041, 0, 44011, 8730, + 0, 0, 78312, 7274, 119250, 0, 7275, 78304, 935, 0, 65840, 377, 42325, + 11649, 0, 65253, 64301, 0, 78308, 42341, 65284, 2417, 0, 12884, 19912, + 7907, 10768, 0, 194998, 0, 10673, 119217, 7248, 0, 0, 1781, 5496, 3627, + 62, 1649, 0, 964, 0, 0, 78226, 0, 127512, 0, 0, 0, 0, 43689, 0, 13142, + 78812, 42415, 66575, 4542, 74037, 43547, 0, 0, 7677, 2991, 4946, 42454, + 0, 7949, 0, 0, 11341, 42494, 3073, 65625, 9714, 11692, 4657, 0, 0, 6478, + 9898, 43673, 65237, 6241, 0, 4877, 0, 6238, 0, 10548, 127049, 4409, 0, 0, + 64798, 0, 5346, 0, 120528, 6237, 4874, 0, 9176, 0, 0, 65231, 65884, + 12678, 78748, 118912, 11378, 44018, 42785, 2408, 3251, 0, 0, 5685, 0, + 2461, 11052, 7091, 5342, 8317, 0, 68163, 5340, 0, 0, 43635, 73928, + 127529, 0, 0, 0, 0, 65482, 0, 9142, 0, 0, 0, 10938, 0, 118790, 1182, + 2542, 4826, 0, 0, 0, 529, 8580, 0, 0, 10586, 10790, 10839, 66023, 41593, + 41207, 0, 0, 41594, 225, 42828, 0, 0, 0, 11376, 74379, 10721, 67664, + 3438, 42097, 127267, 11084, 3194, 41870, 266, 78305, 0, 41873, 120575, + 11324, 0, 0, 8420, 64918, 0, 41871, 41338, 3734, 7734, 43683, 8750, + 66605, 66011, 0, 40965, 0, 0, 5161, 10572, 0, 0, 0, 64349, 7287, 42162, + 127552, 0, 0, 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, 0, 0, 0, 0, 78169, 66199, 0, + 3609, 68624, 0, 832, 120693, 120770, 78473, 66007, 78471, 65703, 0, 0, + 42732, 5180, 0, 41395, 41530, 11691, 64773, 0, 74002, 0, 0, 0, 6348, 243, + 13200, 0, 6024, 0, 9979, 10037, 41529, 10648, 8538, 43687, 0, 0, 4285, + 66195, 0, 4230, 0, 13307, 43256, 0, 7563, 42376, 0, 68442, 120512, 0, 0, + 214, 0, 0, 78466, 65893, 12208, 9973, 0, 66311, 65589, 0, 2603, 0, 0, 0, + 0, 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, 0, 0, + 74241, 0, 6791, 12457, 78268, 0, 0, 0, 78279, 0, 0, 0, 66637, 7995, 8759, + 43421, 78277, 12449, 0, 0, 0, 8752, 3197, 4720, 10165, 0, 119249, 0, + 11595, 64893, 0, 43435, 0, 0, 4993, 0, 6168, 10934, 1946, 741, 0, 5494, + 4639, 0, 1990, 66589, 4498, 78664, 119183, 0, 0, 0, 2960, 73779, 0, 8969, + 0, 43424, 127059, 0, 2950, 0, 6210, 65753, 370, 0, 0, 0, 4953, 0, 0, 0, + 0, 69230, 0, 0, 65688, 0, 5063, 3517, 2964, 43663, 917762, 6344, 74791, + 10566, 10144, 66333, 8252, 729, 66016, 78253, 0, 0, 64923, 0, 43669, + 9032, 78263, 78264, 0, 41215, 0, 65883, 0, 0, 120602, 3761, 0, 0, 0, 0, + 12912, 119012, 3850, 0, 0, 0, 0, 0, 908, 0, 8611, 0, 0, 0, 43691, 41197, + 0, 8978, 120540, 119135, 41586, 10527, 0, 917848, 3848, 78739, 194937, + 127536, 65241, 5336, 0, 0, 663, 0, 10780, 0, 0, 78767, 0, 0, 68193, 347, + 0, 0, 78775, 64675, 41582, 78774, 78744, 65579, 12980, 78769, 12143, + 73733, 78512, 0, 43441, 41804, 78523, 0, 78525, 0, 0, 41584, 10681, 0, 0, + 73938, 0, 0, 4800, 66661, 0, 66306, 64715, 78534, 9518, 6609, 10434, 0, + 11319, 1097, 0, 917850, 41730, 0, 0, 73847, 78761, 65172, 41728, 41721, + 0, 0, 0, 41203, 0, 13110, 41726, 0, 0, 1000, 0, 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, 0, 78796, + 78798, 78794, 78795, 68434, 78793, 66670, 0, 0, 12290, 0, 0, 0, 42142, + 9968, 8205, 0, 5131, 0, 9627, 78536, 78542, 78535, 0, 1944, 1248, 10148, + 0, 119990, 119991, 12701, 78376, 11308, 119995, 0, 119997, 119998, 65305, + 74263, 4031, 42794, 120003, 7075, 8154, 120006, 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, 0, 13012, 4571, 0, 0, 0, + 12078, 2970, 0, 10933, 0, 77870, 0, 0, 0, 41599, 0, 0, 0, 12950, 0, 3486, + 0, 0, 4239, 0, 0, 66511, 0, 2637, 64629, 8460, 127053, 8476, 0, 0, 0, 0, + 65673, 1019, 78495, 4148, 0, 12289, 0, 4316, 0, 13119, 0, 5412, 66243, + 9935, 0, 73864, 0, 41734, 8206, 74081, 9163, 3286, 9072, 5867, 13302, + 7622, 0, 41736, 0, 41731, 0, 7400, 5416, 68663, 118924, 10817, 0, 41539, + 0, 0, 73963, 41855, 41867, 65564, 11277, 65892, 11536, 10620, 0, 12210, + 66030, 73932, 5498, 73942, 41536, 0, 68204, 0, 3459, 8997, 0, 0, 0, 0, 0, + 0, 66377, 69781, 0, 0, 78511, 3161, 295, 120207, 0, 0, 0, 78742, 9016, + 43454, 63903, 63902, 43641, 0, 3971, 0, 73972, 2952, 78765, 11038, 10901, + 63900, 63899, 63898, 0, 667, 12332, 63887, 6086, 41722, 0, 5172, 0, 0, + 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, 0, 0, 42348, 0, 6752, 446, 41911, 0, 63851, 63850, + 41910, 0, 63846, 2972, 12932, 7262, 0, 63849, 63848, 63847, 0, 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, 0, 65099, 11531, + 5834, 0, 0, 0, 0, 42773, 0, 0, 0, 119220, 0, 3663, 0, 1112, 119122, 8686, + 0, 5334, 65081, 43249, 74778, 0, 11077, 0, 6509, 0, 5327, 0, 19907, + 63869, 3478, 7583, 7679, 2903, 0, 3001, 1158, 8745, 0, 73748, 63866, 0, + 1915, 4846, 0, 66371, 118984, 42105, 2990, 120128, 805, 69238, 120125, + 12070, 8760, 1117, 118987, 12212, 120123, 65174, 42357, 63835, 63834, 0, + 78240, 12225, 63838, 63837, 0, 0, 63833, 6042, 66360, 8083, 0, 0, 63821, + 63820, 63819, 63818, 0, 5227, 9047, 63822, 0, 6091, 0, 10691, 560, 5643, + 8226, 119578, 63812, 63811, 63810, 63809, 5542, 63815, 63814, 63813, + 6047, 1597, 120143, 780, 206, 77925, 4936, 65147, 8168, 63930, 2076, + 1093, 9882, 63934, 2082, 63932, 917554, 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, 0, 1092, 4754, 7273, 5252, + 44016, 43627, 0, 0, 7408, 11809, 0, 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, 120445, 6502, 0, 127118, 0, 63951, 12465, 0, 0, 0, 63946, 1707, + 63924, 12461, 63950, 63897, 63948, 63947, 63945, 6038, 63943, 63942, + 64685, 63895, 65838, 0, 7776, 0, 0, 0, 120444, 78172, 801, 43165, 1690, + 63919, 63918, 63917, 13277, 43659, 12951, 120638, 9906, 2054, 2334, + 78515, 63916, 5483, 63914, 120610, 63911, 5484, 63909, 63908, 2539, 0, + 43980, 5485, 0, 42697, 9061, 5534, 10672, 4502, 0, 253, 0, 68208, 0, + 42854, 78393, 0, 11530, 0, 68668, 0, 0, 0, 10474, 43426, 13257, 42354, 0, + 0, 0, 195065, 0, 8413, 0, 0, 5693, 7272, 0, 13209, 64470, 65831, 78460, + 195063, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66608, 3111, 41863, 8804, 66607, 0, + 7270, 0, 66606, 6628, 1076, 7433, 1436, 73844, 55226, 0, 63982, 7393, + 12807, 43413, 63906, 1598, 63904, 0, 0, 41729, 4423, 1307, 0, 10515, + 41589, 0, 0, 6218, 0, 1430, 0, 0, 120606, 78754, 5413, 7619, 3255, 3493, + 74032, 11549, 10735, 41743, 73937, 6801, 0, 4518, 10990, 65073, 5167, + 4481, 3771, 0, 2710, 0, 69243, 41724, 0, 43073, 41690, 12479, 0, 0, 0, 0, + 119659, 1628, 0, 0, 0, 65262, 6333, 10783, 42315, 0, 63855, 120683, 0, 0, + 5339, 74323, 0, 13004, 0, 4457, 0, 0, 0, 0, 5684, 8678, 10914, 0, 5689, + 65807, 0, 68464, 12633, 12870, 78521, 65183, 5688, 11926, 6033, 6310, + 5686, 0, 74251, 0, 120647, 0, 50, 10558, 9871, 0, 43655, 0, 0, 0, 66468, + 0, 13259, 4448, 0, 0, 0, 0, 67853, 0, 10640, 0, 1151, 0, 917607, 0, + 127079, 195050, 0, 0, 0, 0, 12501, 64604, 0, 11527, 118870, 8812, 0, + 11538, 8673, 12650, 11020, 0, 66467, 2105, 8087, 78163, 0, 9894, 0, 0, 0, + 4636, 55262, 78513, 4515, 2382, 0, 127055, 0, 120495, 0, 0, 12277, + 194627, 11995, 194626, 0, 12158, 0, 8741, 10197, 0, 0, 0, 6531, 0, 0, + 473, 43415, 0, 0, 1873, 1087, 0, 0, 0, 78527, 66439, 43218, 0, 194716, + 7237, 12504, 74282, 0, 0, 0, 9489, 0, 0, 4384, 74220, 195055, 2058, + 917561, 13295, 43191, 0, 0, 1154, 3857, 1205, 0, 0, 13100, 12958, 120706, + 74168, 0, 0, 4421, 10592, 0, 495, 0, 41712, 7983, 0, 120779, 0, 6347, 0, + 7654, 41710, 4196, 0, 437, 41709, 73772, 0, 0, 9465, 13290, 119180, 4997, + 64306, 0, 0, 4999, 194642, 0, 0, 4711, 120769, 0, 2739, 0, 8044, 74834, + 0, 41789, 0, 10809, 0, 0, 0, 1779, 6600, 6601, 41543, 5325, 642, 64187, + 13058, 120449, 12875, 0, 0, 13229, 0, 10575, 43399, 0, 0, 41791, 1104, 0, + 0, 10655, 0, 0, 0, 0, 1082, 195049, 8428, 6569, 0, 0, 0, 0, 6783, 0, + 12993, 8049, 41548, 44021, 6458, 0, 0, 4761, 63828, 4766, 64623, 1273, + 43407, 0, 118876, 195045, 6912, 1313, 6322, 10483, 0, 41545, 0, 0, 0, 0, + 0, 0, 78624, 3484, 74337, 0, 0, 8503, 5122, 41527, 0, 66320, 0, 0, 0, 0, + 41537, 0, 8303, 8282, 11817, 73857, 10003, 73859, 65904, 194663, 1686, 0, + 78406, 11467, 3664, 65921, 64299, 194664, 0, 0, 4324, 126, 42246, 119152, + 0, 74378, 65926, 7744, 194636, 74277, 74302, 78052, 0, 6966, 0, 8136, 0, + 65600, 1633, 0, 0, 4762, 1103, 0, 0, 4765, 0, 13078, 0, 4760, 63827, + 2050, 10871, 43199, 1102, 0, 42236, 0, 194667, 11546, 74794, 337, 0, + 42591, 8627, 12279, 1111, 0, 0, 4707, 68206, 10143, 7883, 127081, 7880, + 4522, 8645, 5704, 13010, 0, 8304, 0, 0, 119575, 0, 0, 66654, 0, 0, 0, + 13008, 0, 4385, 0, 13011, 0, 0, 119161, 13009, 160, 2677, 0, 0, 41793, + 65763, 74221, 120141, 41792, 42770, 0, 65762, 118829, 64573, 5709, 0, + 194638, 0, 0, 0, 1079, 3867, 5708, 0, 0, 0, 5706, 64768, 5705, 8791, + 4005, 0, 10237, 10991, 0, 43459, 9173, 917581, 917580, 13170, 65942, + 917577, 42605, 120765, 917570, 68647, 917572, 10058, 0, 74867, 194654, + 127078, 3339, 11448, 1106, 917591, 917590, 917593, 3340, 917587, 917586, + 917589, 917588, 120541, 10605, 1309, 63966, 120743, 1754, 127075, 13246, + 864, 0, 118926, 8972, 0, 7849, 120092, 0, 13240, 195068, 5192, 4338, 0, + 10948, 917601, 13199, 120169, 1236, 13208, 13261, 13189, 13188, 120164, + 0, 7440, 0, 120153, 9553, 1590, 63777, 63776, 13178, 63782, 63781, 63780, + 63779, 1583, 0, 13260, 4550, 0, 64205, 0, 0, 41522, 0, 0, 0, 0, 11354, 0, + 0, 42795, 0, 119195, 11394, 194646, 13236, 13272, 13194, 1334, 0, 4479, + 1178, 65586, 120663, 66681, 119193, 4601, 0, 0, 0, 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, 0, 0, 0, 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, 0, 41930, 63805, 63804, 63803, 63801, 41082, 8140, 63798, 6260, - 0, 0, 119225, 63793, 11988, 3898, 0, 10201, 12238, 63795, 42358, 10367, - 12521, 10431, 42114, 41932, 1068, 0, 12523, 12945, 0, 0, 7950, 10804, - 63771, 42787, 4386, 12224, 6973, 2793, 12475, 0, 0, 63769, 9530, 0, - 12232, 13135, 8596, 5681, 63762, 4595, 63760, 792, 0, 64803, 0, 8742, 0, - 11053, 0, 63744, 0, 0, 7588, 63748, 1693, 63746, 43204, 5055, 0, 0, 1090, - 120679, 0, 11665, 74133, 4558, 65685, 9523, 0, 0, 0, 11513, 0, 6157, - 63775, 63774, 63773, 13191, 12170, 3500, 3139, 0, 3170, 12485, 0, 10872, - 0, 13006, 64433, 0, 0, 941, 0, 0, 0, 65541, 11063, 0, 8228, 0, 42065, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 43603, 0, 65397, 288, 0, 0, 0, 10025, 0, 2918, - 0, 65300, 119871, 9883, 64726, 2790, 65395, 3793, 0, 0, 65393, 0, 74138, - 0, 0, 0, 74139, 120613, 65394, 11548, 5270, 0, 65396, 0, 65813, 13256, - 1282, 120771, 0, 0, 10888, 0, 65242, 0, 3330, 0, 0, 0, 0, 0, 0, 3304, - 42753, 0, 0, 0, 1627, 0, 0, 0, 5371, 13116, 0, 1826, 0, 0, 43094, 0, 0, - 0, 0, 9035, 0, 0, 0, 0, 0, 68125, 0, 164, 0, 0, 0, 6958, 0, 43116, 0, 0, - 13245, 0, 0, 0, 0, 73893, 0, 12666, 13175, 13207, 120414, 66014, 120428, + 10192, 13105, 8183, 120741, 2037, 0, 0, 10747, 125, 0, 64890, 0, 0, 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, 119225, 63793, 11988, 3898, 0, 10201, 12238, 63795, + 42194, 10367, 12521, 10431, 42114, 41932, 1068, 0, 12523, 12945, 0, + 42203, 7950, 10804, 63771, 42787, 4386, 12224, 6973, 2793, 12475, 0, 0, + 63769, 9530, 0, 12232, 13135, 8596, 5681, 63762, 4595, 63760, 792, 0, + 64803, 0, 8742, 0, 11053, 0, 63744, 0, 0, 7588, 63748, 1693, 63746, + 43204, 5055, 68426, 917853, 1090, 120679, 0, 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, 0, 0, 0, 7386, 0, 68358, 0, + 0, 43603, 0, 65397, 288, 0, 0, 0, 10025, 917916, 2918, 0, 65300, 119871, + 9883, 64726, 2790, 65395, 3793, 0, 0, 65393, 0, 74138, 0, 0, 0, 74139, + 120613, 65394, 11548, 5270, 0, 65396, 0, 65813, 13256, 1282, 120771, 0, + 0, 10888, 0, 65242, 0, 3330, 0, 0, 0, 0, 0, 74259, 3304, 42753, 0, 0, 0, + 1627, 0, 0, 0, 5371, 13116, 0, 1826, 118794, 0, 43094, 0, 43650, 0, 0, + 9035, 0, 0, 0, 0, 0, 68125, 0, 164, 0, 0, 0, 6958, 0, 43116, 0, 0, 13245, + 0, 0, 127376, 0, 73893, 0, 12666, 13175, 13207, 120414, 66014, 120428, 7447, 5929, 0, 65509, 0, 7449, 11306, 0, 73920, 3180, 0, 63808, 9054, - 971, 13062, 0, 0, 65195, 64767, 0, 74428, 0, 0, 0, 0, 0, 0, 10045, 64303, - 13275, 0, 11057, 0, 13276, 0, 41525, 0, 7271, 11444, 0, 0, 0, 12229, - 41523, 0, 0, 73751, 0, 64813, 0, 0, 10476, 3858, 0, 3932, 64958, 0, 0, - 73989, 0, 0, 0, 369, 0, 41784, 0, 64163, 0, 0, 0, 65474, 4796, 41782, 0, - 65479, 0, 41781, 10486, 41480, 120511, 9899, 0, 0, 404, 12821, 3741, 0, - 5788, 0, 0, 41222, 1831, 66020, 0, 0, 4388, 0, 746, 120784, 0, 0, 13131, - 65294, 0, 0, 0, 0, 4422, 4708, 3799, 74292, 119357, 0, 74430, 0, 11700, - 4374, 0, 0, 1364, 0, 8038, 0, 917597, 0, 0, 0, 0, 73979, 13174, 73968, - 13225, 0, 0, 65835, 0, 2365, 7841, 0, 42855, 118856, 42866, 0, 0, 0, - 66438, 41785, 41171, 64172, 13173, 4372, 119354, 0, 0, 0, 0, 0, 0, 12965, - 384, 64512, 10404, 10340, 119352, 1556, 5274, 13210, 0, 10017, 9733, - 41787, 0, 0, 41373, 0, 12303, 0, 13232, 13233, 349, 4863, 41371, 11656, - 0, 120703, 119883, 12861, 4398, 8543, 65618, 0, 1096, 0, 0, 0, 12441, - 12355, 119348, 119347, 4318, 10452, 0, 8032, 13243, 13237, 12719, 0, - 119101, 0, 64884, 119872, 119345, 8597, 0, 0, 9864, 0, 120785, 0, 0, - 13195, 41452, 64961, 7722, 0, 10459, 119878, 0, 119879, 66590, 0, 41533, - 66337, 0, 0, 0, 4965, 0, 917536, 73849, 0, 0, 0, 0, 6261, 119342, 43147, - 66570, 1957, 10420, 982, 2756, 13292, 13206, 0, 0, 2925, 73809, 13056, 0, - 13212, 65110, 0, 13190, 13187, 0, 13198, 118793, 0, 5242, 119179, 64476, - 1694, 8216, 0, 0, 43331, 0, 65620, 0, 43544, 0, 0, 41444, 65621, 120325, - 64799, 5246, 120326, 13185, 9709, 120323, 120322, 12314, 65616, 5238, - 119333, 0, 119337, 5236, 40979, 0, 74201, 8286, 0, 3936, 119331, 11699, - 41347, 0, 13235, 8842, 41248, 0, 4379, 13239, 12692, 7969, 0, 7219, 0, 0, - 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, 0, 0, 42841, 13267, 0, 0, - 41775, 0, 0, 41773, 0, 10663, 0, 0, 0, 6151, 12110, 0, 65572, 119602, - 65250, 13265, 13264, 64518, 0, 6100, 0, 0, 5808, 65922, 0, 12967, 66041, - 9676, 4583, 0, 0, 68097, 64575, 0, 11965, 0, 119211, 0, 0, 0, 0, 68102, - 9698, 7814, 74476, 119651, 0, 0, 41921, 0, 9756, 6985, 119258, 0, 74219, - 0, 0, 0, 8012, 5674, 12353, 0, 12361, 5677, 42323, 0, 41925, 0, 41920, - 5673, 120534, 5676, 41923, 12694, 118978, 5672, 1294, 0, 0, 0, 42511, - 1727, 0, 0, 0, 0, 0, 74222, 8718, 3550, 736, 10268, 4505, 10316, 74090, - 5826, 74270, 5813, 0, 120712, 5841, 5837, 0, 0, 3105, 12829, 5838, 5796, - 0, 119592, 5793, 0, 5866, 5797, 41011, 5865, 120091, 7956, 598, 0, 64649, + 971, 13062, 0, 0, 65195, 10164, 0, 74428, 0, 78146, 0, 0, 0, 0, 10045, + 12882, 13275, 0, 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, 0, 369, 0, 41784, 0, 64163, 0, 0, 0, 65474, + 4796, 12292, 0, 65479, 0, 41781, 10486, 41480, 120511, 9899, 0, 0, 404, + 12821, 3741, 0, 5788, 8092, 68212, 41222, 1831, 66020, 0, 0, 4388, 0, + 746, 120784, 0, 0, 12018, 65294, 0, 0, 0, 0, 4422, 4708, 3799, 74292, + 119357, 0, 74430, 0, 11700, 4374, 0, 0, 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, 41171, 64172, + 13173, 4372, 119354, 0, 0, 0, 0, 0, 0, 12965, 384, 64512, 10404, 10340, + 119352, 1556, 5274, 13210, 0, 10017, 9733, 41787, 0, 126994, 41373, + 78039, 12303, 0, 13232, 13233, 349, 4863, 41371, 11656, 0, 120703, + 119883, 12861, 4398, 8543, 65618, 0, 1096, 0, 0, 42688, 12441, 12355, + 119348, 119347, 4318, 10452, 0, 8032, 13243, 13237, 12719, 0, 119101, 0, + 64884, 119872, 119345, 8597, 0, 0, 9864, 0, 120785, 119874, 0, 13195, + 41452, 64961, 7722, 0, 10459, 119878, 0, 119879, 66590, 0, 41533, 66337, + 0, 0, 0, 4965, 0, 917536, 73849, 0, 43638, 78537, 0, 6261, 119342, 43147, + 66570, 1957, 10420, 982, 2756, 13292, 13206, 0, 0, 2925, 73809, 13056, + 127559, 13212, 43238, 0, 13190, 13187, 0, 13198, 118793, 0, 5242, 119179, + 64476, 1694, 8216, 0, 6770, 43331, 0, 65620, 0, 43544, 0, 0, 41444, + 65621, 120325, 64799, 5246, 120326, 13185, 9709, 120323, 120322, 12314, + 65616, 5238, 119333, 0, 119337, 5236, 40979, 0, 74201, 8286, 0, 3936, + 119331, 11699, 41347, 127249, 13235, 8842, 41248, 0, 4379, 13239, 12692, + 7969, 127266, 7219, 127250, 0, 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, 0, 0, 42841, 13267, 0, 0, 41775, 0, 0, 41773, 0, 10663, 0, 0, 0, + 6151, 12110, 42673, 65572, 119602, 65250, 13265, 13264, 64518, 0, 6100, + 0, 0, 5808, 65922, 0, 12967, 66041, 5612, 4583, 0, 0, 68097, 64575, 0, + 11965, 0, 119211, 0, 69789, 0, 0, 68102, 9698, 7814, 74476, 119651, 0, 0, + 41921, 118858, 9756, 6985, 119258, 0, 74219, 0, 0, 118997, 8012, 5674, + 12353, 0, 12361, 5677, 5588, 0, 41925, 0, 41920, 5673, 120534, 5676, + 41923, 12694, 118978, 5672, 1294, 0, 78059, 0, 42511, 1727, 0, 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, 0, 0, 0, 0, 0, 847, 0, 9529, 0, - 66657, 6980, 0, 120035, 0, 0, 0, 120033, 0, 0, 0, 120039, 0, 0, 0, 9624, - 0, 0, 43190, 65463, 1554, 0, 42611, 42563, 0, 5651, 2929, 0, 43201, 0, - 19963, 5698, 0, 0, 0, 0, 5644, 10292, 65546, 120492, 68141, 8372, 0, - 65116, 0, 120022, 0, 10388, 42799, 0, 41013, 10568, 0, 0, 2869, 0, 41015, - 0, 2785, 4366, 0, 10954, 41802, 0, 42608, 194688, 9884, 4759, 0, 0, - 10266, 41359, 1170, 127017, 0, 73908, 1609, 902, 0, 63936, 0, 11661, - 8122, 5818, 0, 0, 3861, 9540, 11028, 2554, 5158, 5714, 127015, 0, 0, 807, - 43079, 0, 0, 976, 5511, 64553, 0, 42155, 0, 41356, 74110, 118801, 0, 0, - 8676, 0, 0, 11066, 451, 63941, 5798, 9349, 42018, 0, 0, 0, 43609, 194703, - 120553, 1440, 0, 0, 120016, 74283, 11005, 0, 66656, 66044, 0, 194698, 0, - 0, 0, 10094, 0, 11529, 10857, 120643, 66436, 6546, 93, 0, 0, 74440, 0, 0, - 8171, 0, 119097, 127065, 917543, 383, 10377, 41656, 0, 0, 0, 5187, 0, 0, - 11286, 0, 64217, 0, 5232, 0, 41009, 0, 41005, 0, 0, 0, 8292, 195074, - 4980, 8860, 73947, 10028, 66478, 7076, 13182, 194705, 0, 0, 10631, 66031, - 7972, 0, 0, 0, 7900, 0, 11309, 194711, 4198, 64211, 0, 0, 0, 0, 0, 0, - 12931, 0, 0, 74285, 10185, 0, 64366, 65156, 8814, 0, 74771, 0, 0, 12836, - 0, 0, 74342, 8593, 0, 0, 0, 13255, 0, 0, 7464, 0, 65865, 0, 194650, 0, 0, - 9342, 120464, 0, 64516, 0, 0, 10129, 41007, 0, 0, 40995, 12209, 41012, - 119136, 0, 0, 120633, 40992, 0, 0, 0, 43558, 5522, 0, 61, 0, 74105, 3633, - 0, 65162, 41234, 12089, 0, 9771, 0, 13251, 0, 0, 6262, 2784, 0, 0, 8126, - 66483, 0, 0, 441, 42621, 0, 0, 41002, 40999, 119623, 43266, 0, 0, 10890, - 74481, 65834, 8324, 119103, 64417, 74817, 0, 64737, 0, 0, 8930, 0, 74249, - 1193, 10056, 1800, 13253, 13252, 7829, 0, 0, 7743, 0, 0, 0, 0, 0, 9034, - 6039, 0, 10075, 0, 41018, 65683, 10338, 66469, 0, 0, 0, 42815, 0, 41966, - 0, 0, 0, 11792, 0, 0, 911, 7539, 0, 0, 120339, 65159, 64390, 0, 0, 5520, - 11662, 0, 65330, 73886, 0, 0, 12326, 0, 0, 42808, 0, 9348, 64901, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 5857, 65342, 0, 119120, 0, 8644, 0, 0, 0, 74296, - 41909, 0, 120332, 2791, 0, 1891, 0, 0, 41907, 66647, 0, 8761, 12942, - 5748, 0, 10773, 0, 0, 8796, 0, 6412, 120347, 8520, 13146, 0, 63931, 0, - 65902, 2882, 0, 0, 12843, 4520, 0, 0, 0, 0, 0, 73860, 0, 0, 64345, 0, 0, - 0, 0, 0, 0, 0, 917585, 65117, 0, 0, 10427, 0, 3844, 0, 9755, 1110, 6612, - 12222, 0, 0, 0, 0, 783, 194935, 0, 0, 0, 0, 65056, 3620, 0, 118945, 4556, - 0, 0, 194933, 74250, 0, 0, 10510, 4382, 66482, 0, 0, 0, 9177, 8902, 0, - 9839, 0, 12891, 0, 0, 63999, 2016, 41917, 9788, 63928, 0, 1862, 65800, - 9155, 66623, 9786, 65082, 41919, 8579, 41914, 7981, 0, 0, 4508, 64883, 0, - 0, 0, 0, 64592, 74276, 120080, 41780, 120079, 68181, 0, 0, 0, 0, 12147, - 9024, 66378, 66472, 0, 64289, 65289, 0, 0, 0, 64509, 0, 0, 0, 11051, 0, - 0, 11355, 65885, 0, 0, 41214, 0, 12299, 0, 7500, 4506, 7773, 0, 0, - 118912, 0, 0, 4040, 0, 6167, 0, 63922, 6594, 0, 0, 0, 3624, 43036, 0, - 64655, 63990, 19947, 63988, 41955, 0, 63993, 63992, 9611, 0, 0, 0, 7738, - 63986, 11446, 63984, 0, 3435, 119652, 0, 119108, 7029, 64258, 41292, - 118898, 12748, 43115, 9517, 11518, 0, 0, 0, 194777, 63956, 42458, 63954, - 63953, 63960, 9591, 63958, 10217, 118845, 11469, 0, 42306, 2723, 118947, - 0, 0, 0, 0, 0, 11397, 2880, 0, 0, 2872, 0, 0, 3498, 4378, 917539, 4270, - 0, 65551, 118928, 6633, 0, 0, 5230, 0, 0, 0, 0, 0, 8161, 393, 12013, 0, - 0, 0, 415, 63964, 63963, 42345, 0, 5183, 1877, 42498, 0, 2927, 0, 63961, - 4472, 0, 0, 0, 0, 917936, 42340, 4756, 0, 7081, 10730, 7691, 0, 63830, - 119625, 194945, 42103, 8628, 9813, 0, 42453, 1604, 9565, 10539, 0, 65764, - 41415, 65767, 0, 8457, 42301, 11372, 64873, 11992, 0, 0, 63980, 11801, - 3622, 0, 64336, 12017, 10463, 63981, 4967, 64189, 1966, 63976, 0, 0, 0, - 0, 63971, 4347, 4416, 42098, 11009, 10694, 63973, 402, 0, 13147, 0, - 42100, 64646, 13228, 0, 41875, 3515, 74252, 11805, 0, 11302, 6259, 0, 0, - 0, 0, 0, 0, 0, 74425, 11299, 1561, 0, 0, 64942, 0, 194733, 0, 194732, 0, - 74301, 0, 11280, 0, 0, 74060, 0, 0, 119664, 5145, 12486, 65018, 66516, - 5409, 0, 194669, 64347, 5399, 9685, 74089, 7952, 5401, 0, 66616, 0, 0, 0, - 5405, 917555, 64866, 0, 0, 0, 0, 74248, 11330, 194723, 64690, 3254, 0, 0, - 0, 42390, 0, 194725, 0, 65077, 0, 0, 3355, 9508, 9867, 5723, 11520, 5611, - 0, 3377, 0, 0, 0, 0, 0, 0, 0, 119119, 0, 0, 119068, 0, 0, 1379, 246, 0, - 0, 3788, 0, 11041, 0, 66304, 0, 0, 8917, 42403, 301, 0, 0, 0, 0, 0, 0, - 10656, 0, 65214, 119242, 42567, 0, 13163, 0, 120831, 74597, 3182, 0, 0, - 0, 0, 65889, 42169, 4755, 74244, 0, 11443, 0, 66326, 74598, 608, 600, 0, - 1219, 3934, 64206, 11483, 74510, 0, 74485, 42442, 65470, 0, 64202, 13160, - 7759, 42482, 485, 0, 0, 9828, 0, 0, 42280, 0, 9351, 7778, 64379, 7496, - 42431, 6916, 1208, 0, 119631, 11002, 42470, 0, 0, 0, 0, 74041, 0, 0, - 43539, 5411, 0, 0, 0, 0, 9150, 0, 42393, 13086, 1310, 194687, 9337, - 12052, 10643, 64586, 0, 194684, 2546, 194683, 213, 118852, 65611, 0, 0, - 194756, 74310, 6554, 0, 11914, 0, 0, 0, 0, 0, 0, 194681, 118826, 2713, 0, - 9650, 43330, 0, 194675, 1406, 0, 0, 0, 0, 194678, 4143, 194677, 0, 65748, - 4141, 9682, 65287, 1508, 0, 8779, 10569, 8725, 13299, 66638, 0, 42263, - 4145, 0, 65751, 66613, 0, 65738, 73729, 9185, 9550, 0, 0, 0, 0, 0, 65736, - 41951, 64816, 65756, 0, 12955, 10596, 2888, 0, 0, 0, 9657, 9019, 194766, - 0, 2878, 5390, 0, 194961, 0, 0, 0, 7501, 13203, 0, 10429, 10365, 0, 0, - 41946, 7503, 5235, 803, 0, 0, 0, 8986, 0, 10632, 11934, 11452, 1332, 0, - 0, 0, 0, 917545, 1791, 5191, 9288, 64822, 2892, 0, 67849, 555, 0, 0, - 66646, 0, 119002, 13151, 74512, 7289, 74055, 0, 0, 64162, 5858, 41927, - 10582, 0, 1784, 1361, 195047, 0, 7905, 0, 64868, 0, 13158, 0, 7211, 0, - 9371, 0, 0, 0, 1625, 0, 0, 1342, 0, 64171, 0, 10903, 0, 0, 0, 0, 0, 4482, - 41606, 0, 0, 0, 0, 64381, 0, 0, 0, 42245, 0, 41972, 0, 444, 0, 9127, - 66687, 66619, 0, 194972, 0, 11349, 40991, 0, 0, 119599, 120830, 0, 1197, - 0, 1149, 194970, 0, 0, 40990, 0, 0, 3492, 0, 0, 0, 0, 0, 12838, 0, 19948, - 0, 3099, 0, 0, 41087, 0, 0, 0, 119059, 12036, 0, 0, 0, 8152, 0, 64428, - 12227, 0, 0, 12828, 0, 0, 0, 0, 0, 0, 10386, 119574, 0, 0, 0, 0, 68154, - 0, 1743, 0, 0, 0, 65186, 0, 0, 9606, 0, 0, 0, 0, 0, 0, 0, 0, 194967, 0, - 0, 3395, 9362, 10878, 0, 0, 0, 64830, 0, 0, 41091, 3426, 1344, 8870, 0, - 0, 4735, 0, 6119, 12822, 0, 0, 0, 74818, 0, 0, 42637, 41080, 0, 12039, - 10559, 0, 118892, 0, 9472, 0, 11929, 0, 7170, 9596, 6130, 0, 0, 11579, 0, - 0, 194740, 0, 0, 66699, 0, 1004, 0, 194737, 0, 66008, 12627, 0, 0, 0, 0, - 0, 11300, 43304, 9686, 5890, 11776, 7558, 0, 65627, 0, 10718, 13154, - 3461, 9139, 0, 0, 0, 0, 0, 73877, 65628, 0, 0, 0, 41708, 12860, 41703, - 12069, 10838, 5403, 10352, 73917, 10061, 0, 0, 5140, 209, 0, 41704, 0, - 43078, 0, 0, 0, 10899, 65469, 0, 0, 0, 2410, 993, 0, 120589, 120689, 0, - 0, 0, 7232, 0, 119253, 0, 0, 74462, 0, 10489, 42166, 0, 10659, 3600, 0, - 4224, 1336, 41518, 0, 0, 0, 0, 41139, 64820, 0, 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, 0, 0, 0, 0, 7209, 8223, 2409, 7799, 0, 74424, - 0, 0, 4731, 0, 66629, 0, 0, 1255, 4149, 9247, 0, 9913, 0, 0, 0, 0, 65101, - 0, 11694, 0, 11690, 5835, 0, 66625, 10842, 41354, 42123, 43097, 11688, - 66634, 1094, 194, 64692, 0, 8180, 0, 0, 73872, 73865, 0, 6114, 10898, - 43072, 0, 0, 0, 0, 0, 10695, 0, 7540, 0, 881, 7857, 6067, 65164, 0, 0, 0, - 13311, 0, 41857, 64321, 8359, 0, 12689, 0, 194594, 0, 0, 0, 68183, 0, 0, - 1287, 5436, 0, 0, 74142, 127013, 74152, 119078, 6051, 10497, 0, 8985, - 12109, 0, 0, 0, 0, 0, 3652, 10537, 0, 1276, 0, 6549, 279, 0, 0, 0, 0, - 1489, 0, 0, 0, 3899, 1007, 42124, 0, 42122, 0, 0, 0, 11985, 1345, 127006, - 0, 0, 8956, 43083, 0, 42138, 0, 0, 12151, 0, 0, 0, 6285, 0, 0, 0, 74194, - 492, 8685, 0, 0, 0, 0, 0, 2582, 11470, 64538, 7444, 0, 0, 41550, 0, - 73837, 0, 2527, 119824, 197, 2799, 0, 0, 120276, 0, 0, 66515, 767, 5524, - 7028, 0, 0, 119827, 0, 0, 0, 0, 0, 1799, 120497, 6971, 74336, 0, 0, - 65340, 118979, 0, 2434, 0, 0, 120579, 0, 4631, 0, 0, 6407, 0, 19931, - 43214, 0, 7570, 0, 3192, 0, 8414, 0, 0, 0, 0, 0, 9164, 66612, 0, 3171, - 6623, 4961, 0, 886, 0, 8654, 0, 9993, 74390, 64603, 0, 0, 9599, 0, 43084, - 0, 0, 0, 2399, 0, 8994, 10944, 41208, 0, 41168, 8178, 0, 3367, 195008, - 42510, 0, 0, 7789, 0, 1947, 0, 0, 0, 42759, 11068, 1705, 9331, 0, 74798, - 9181, 0, 0, 8017, 0, 65096, 66720, 0, 0, 0, 4909, 12126, 0, 120696, 4904, - 0, 195012, 1365, 9253, 42757, 0, 7462, 0, 0, 0, 0, 119587, 64415, 0, 0, - 5398, 0, 195014, 0, 0, 0, 0, 0, 0, 9476, 0, 0, 12763, 0, 3629, 0, 13005, - 0, 3628, 0, 0, 0, 3469, 42107, 42116, 917578, 64809, 2928, 4905, 9853, - 851, 9040, 0, 64665, 43086, 9114, 0, 42583, 9315, 4822, 4906, 3852, 2847, - 0, 3236, 11317, 1251, 7777, 41852, 11410, 10964, 0, 43222, 12646, 120269, - 10259, 9865, 65821, 0, 6018, 0, 0, 12276, 0, 0, 0, 0, 119613, 0, 0, - 10467, 0, 2443, 10918, 0, 0, 1001, 9241, 1927, 0, 0, 73987, 0, 0, 0, - 118828, 0, 65678, 12867, 0, 8260, 0, 7519, 118794, 12274, 8904, 518, - 65857, 0, 0, 13204, 4387, 857, 0, 65369, 0, 119583, 43125, 120592, 0, 0, - 0, 0, 5136, 1968, 0, 195023, 1337, 64967, 1629, 0, 796, 66506, 0, 74123, - 0, 0, 42314, 195021, 0, 74403, 6120, 478, 65151, 68128, 0, 43082, 6016, - 0, 42284, 0, 4276, 1206, 3619, 41638, 0, 3843, 12011, 8853, 3361, 0, 490, - 10715, 7578, 0, 0, 65350, 10530, 12348, 8653, 74314, 42435, 6154, 9551, - 65354, 0, 784, 42397, 334, 0, 42416, 65356, 65273, 0, 0, 7025, 10364, 0, - 778, 41626, 42455, 7989, 74063, 3227, 0, 0, 73983, 2915, 41698, 41022, - 41702, 10309, 127035, 0, 0, 6975, 0, 5415, 12176, 0, 0, 3462, 65215, - 42629, 0, 73784, 0, 0, 9759, 0, 0, 0, 8114, 0, 0, 0, 0, 8710, 42495, - 118956, 0, 4051, 10460, 74097, 118917, 1356, 12161, 0, 0, 0, 1619, 9703, + 66657, 6980, 0, 120035, 78484, 0, 0, 120033, 78486, 0, 0, 120039, 42683, + 0, 0, 9624, 0, 0, 43190, 65463, 1554, 0, 42611, 42563, 0, 5651, 2929, + 6792, 43201, 0, 19963, 5698, 0, 0, 0, 0, 5644, 10292, 65546, 69821, + 68141, 8372, 0, 65116, 0, 120022, 0, 10388, 42799, 0, 41013, 10568, 0, 0, + 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, 0, 11661, 8122, 5818, 0, 0, 3861, 9540, 11028, 2554, 5158, 5714, + 127015, 0, 0, 807, 43079, 0, 78475, 976, 5511, 64553, 0, 42155, 0, 41356, + 74110, 118801, 0, 0, 8676, 0, 0, 11066, 451, 63941, 5798, 9349, 42018, 0, + 0, 0, 43609, 194703, 120553, 1440, 0, 194701, 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, 10377, 41656, 0, 0, 0, 5187, 0, 127277, 11286, 68620, 64217, 0, + 5232, 0, 41009, 0, 41005, 0, 0, 0, 8292, 195074, 4980, 8860, 73947, + 10028, 66478, 7076, 13182, 194705, 0, 0, 10631, 66031, 7972, 0, 78785, 0, + 7900, 0, 11309, 78319, 4198, 42725, 0, 67656, 78819, 0, 0, 0, 12931, 0, + 42684, 74285, 2088, 0, 64366, 65156, 8814, 42238, 74771, 0, 0, 12836, 0, + 0, 74342, 8593, 0, 0, 68445, 13255, 0, 0, 7464, 0, 65865, 0, 194650, 0, + 0, 9342, 120464, 0, 64516, 0, 78792, 10129, 41007, 74375, 0, 40995, + 12209, 41012, 119136, 0, 0, 120633, 40992, 0, 0, 68653, 43558, 5522, 0, + 61, 0, 74105, 3633, 0, 65162, 41234, 12089, 78281, 9771, 0, 13251, 0, 0, + 6262, 2784, 42743, 0, 8126, 66483, 0, 0, 441, 42621, 0, 0, 41002, 40999, + 119623, 43266, 0, 0, 10890, 74481, 65834, 8324, 119103, 64417, 74817, 0, + 64737, 0, 0, 8930, 66678, 74249, 1193, 10056, 1800, 13253, 13252, 7829, + 0, 0, 7743, 0, 0, 77904, 0, 77905, 9034, 6039, 0, 10075, 0, 41018, 65683, + 10338, 66469, 0, 0, 0, 42815, 0, 41966, 0, 0, 0, 11792, 43064, 41025, + 911, 7539, 0, 0, 120339, 65159, 64390, 0, 0, 5520, 11662, 0, 65330, + 42812, 0, 0, 12326, 0, 0, 42808, 0, 9348, 64901, 0, 0, 0, 0, 0, 0, + 917584, 43702, 0, 5857, 65342, 0, 119120, 120079, 8644, 0, 0, 0, 74296, + 41909, 0, 120332, 2791, 0, 1891, 69824, 0, 41907, 66647, 0, 8761, 12942, + 5748, 0, 10773, 0, 0, 8796, 78149, 6412, 2061, 8520, 13146, 0, 63931, 0, + 65902, 2882, 0, 0, 12843, 4520, 120345, 0, 0, 0, 0, 73860, 0, 0, 64345, + 0, 0, 0, 194940, 0, 0, 43679, 917585, 65117, 194939, 0, 10427, 0, 3844, + 0, 9755, 1110, 6612, 12222, 0, 194934, 0, 0, 783, 194935, 0, 0, 0, + 194720, 65056, 3620, 0, 68378, 4556, 0, 0, 194933, 74250, 0, 67657, + 10510, 4382, 66482, 0, 0, 0, 9177, 8902, 0, 9839, 0, 12891, 0, 0, 63999, + 2016, 41917, 9788, 63928, 0, 1862, 65800, 9155, 66623, 9786, 65082, + 41919, 8579, 41914, 7981, 0, 0, 4508, 64883, 0, 0, 0, 0, 64592, 74276, + 120080, 6784, 78788, 68181, 0, 0, 0, 127534, 12147, 9024, 66378, 66472, + 0, 64289, 65289, 78151, 66658, 194929, 64509, 78152, 0, 0, 11051, 0, 0, + 11355, 65885, 0, 0, 41214, 0, 12299, 0, 7500, 4506, 7773, 0, 0, 9963, + 68649, 0, 4040, 0, 6167, 0, 63922, 6594, 0, 0, 0, 3624, 43036, 0, 6387, + 63990, 19947, 63988, 41955, 0, 63993, 10440, 9611, 0, 6803, 0, 7738, + 63986, 11446, 63984, 120331, 3435, 78164, 0, 119108, 7029, 64258, 41292, + 118898, 12748, 42742, 9517, 11518, 0, 78790, 0, 194777, 63956, 42458, + 63954, 63953, 63960, 9591, 4516, 10217, 68370, 11469, 0, 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, 0, 415, 63964, 63963, 42345, 0, 5183, 1877, 42498, 0, 2927, + 0, 63961, 4472, 0, 0, 78159, 0, 917936, 42340, 4756, 0, 7081, 10730, + 7691, 10331, 63830, 119625, 194945, 42103, 8628, 9813, 0, 42453, 1604, + 9565, 10539, 0, 65764, 41415, 65767, 0, 8457, 42301, 11372, 64873, 11992, + 0, 0, 63980, 11801, 3622, 0, 64336, 12017, 10463, 63981, 4967, 64189, + 1966, 43628, 0, 0, 0, 0, 63971, 4347, 4416, 42098, 11009, 10694, 63973, + 402, 0, 13147, 0, 42100, 64646, 13228, 0, 41875, 3515, 74252, 11805, 0, + 11302, 6259, 43395, 0, 0, 194670, 0, 0, 0, 74425, 11299, 1561, 0, 0, + 64942, 0, 194733, 0, 194732, 0, 74301, 0, 11280, 0, 69784, 74060, 0, 0, + 119664, 5145, 12486, 65018, 66516, 5409, 0, 194669, 7402, 5399, 9685, + 74089, 7952, 5401, 0, 66616, 68421, 0, 0, 5405, 917555, 64866, 0, 0, 0, + 78784, 74248, 11330, 194723, 64690, 3254, 0, 0, 0, 42390, 43678, 194725, + 0, 65077, 0, 6388, 3355, 9508, 9867, 5723, 11520, 5611, 0, 3377, 0, 0, 0, + 0, 78228, 0, 0, 42691, 917886, 0, 74767, 0, 0, 1379, 246, 0, 0, 3788, 0, + 11041, 0, 66304, 0, 0, 8917, 42403, 301, 0, 0, 0, 0, 0, 0, 10656, 0, + 65214, 119242, 42567, 0, 13163, 0, 120831, 74597, 3182, 0, 0, 0, 65034, + 65889, 42169, 4755, 74244, 0, 11443, 0, 66319, 74598, 608, 600, 0, 1219, + 3934, 64206, 11483, 74510, 0, 74485, 42442, 65470, 0, 64202, 13160, 7759, + 42482, 485, 0, 0, 9828, 0, 0, 42280, 0, 9351, 7778, 64379, 7496, 42431, + 6916, 1208, 0, 119631, 11002, 42470, 0, 118946, 0, 0, 74041, 0, 0, 43539, + 5411, 42196, 0, 0, 0, 9150, 0, 42393, 13086, 1310, 194687, 9337, 12052, + 10643, 55271, 0, 194684, 2546, 194683, 213, 118852, 65611, 0, 0, 194756, + 74310, 6554, 0, 11914, 0, 0, 0, 0, 0, 0, 194681, 118826, 2713, 0, 9650, + 43330, 0, 194675, 1406, 0, 0, 0, 0, 68223, 4143, 194677, 0, 65748, 4141, + 9682, 65287, 1508, 194963, 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, 0, 12955, 10596, 2888, 0, 0, 0, 9657, + 9019, 194766, 0, 2878, 5390, 0, 194961, 0, 68679, 0, 7501, 6328, 0, + 10429, 10365, 0, 0, 41946, 7503, 5235, 803, 68381, 0, 0, 8986, 0, 10632, + 11934, 11452, 1332, 0, 0, 0, 0, 118887, 1791, 5191, 9288, 64822, 2892, 0, + 43394, 555, 0, 0, 66646, 0, 119002, 13151, 74512, 7289, 74055, 0, 8854, + 64162, 5858, 41927, 10582, 0, 1784, 1361, 195047, 0, 7905, 0, 64868, 0, + 13158, 0, 7211, 0, 9371, 73973, 0, 6828, 1625, 0, 0, 1342, 68440, 64171, + 0, 10903, 0, 0, 0, 0, 0, 4482, 41606, 0, 0, 0, 0, 64381, 0, 0, 0, 42245, + 0, 41972, 0, 444, 0, 9127, 66687, 66619, 0, 78025, 0, 11349, 40991, 0, 0, + 119599, 120830, 0, 1197, 0, 1149, 194970, 0, 0, 40990, 0, 0, 3492, 0, 0, + 0, 0, 0, 12838, 0, 19948, 0, 3099, 0, 0, 41087, 0, 0, 0, 119059, 12036, + 0, 0, 0, 8152, 0, 64428, 12227, 0, 0, 12828, 127511, 0, 0, 120708, 0, 0, + 10386, 119574, 0, 0, 0, 0, 68154, 0, 1743, 0, 0, 0, 65186, 0, 0, 9606, 0, + 0, 0, 0, 0, 0, 0, 0, 194967, 0, 0, 3395, 9362, 10878, 0, 0, 78362, 64830, + 0, 0, 41091, 3426, 1344, 8870, 0, 0, 4735, 0, 6119, 12822, 42699, 0, 0, + 74818, 0, 0, 42637, 41080, 0, 12039, 10559, 0, 118892, 0, 9472, 0, 11929, + 0, 7170, 9596, 6130, 0, 43629, 11579, 194741, 0, 194740, 0, 0, 66699, 0, + 1004, 0, 194737, 43234, 66008, 12627, 0, 68414, 0, 43619, 43382, 11300, + 43304, 9686, 5890, 11776, 7558, 0, 65627, 0, 10718, 13154, 3461, 9139, 0, + 0, 0, 0, 65365, 73877, 65628, 78019, 0, 0, 41708, 12860, 41703, 12069, + 10838, 5403, 10352, 73917, 10061, 43237, 0, 5140, 209, 0, 41704, 41056, + 43078, 0, 0, 0, 10899, 65469, 0, 0, 0, 2410, 993, 0, 120589, 120689, + 78693, 0, 0, 7232, 0, 119253, 0, 0, 74462, 2066, 10489, 42166, 43463, + 10659, 3600, 0, 4224, 1336, 41518, 0, 0, 0, 0, 41139, 64820, 0, 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, 0, 0, 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, 0, 11690, 5835, 0, 66625, + 10842, 41354, 42123, 43097, 11688, 66634, 1094, 194, 64692, 0, 8180, 0, + 0, 9972, 73865, 4519, 6114, 10898, 43072, 0, 0, 0, 0, 0, 10695, 0, 7540, + 0, 881, 7857, 6067, 65164, 0, 0, 0, 13311, 68403, 41857, 64321, 8359, 0, + 12689, 0, 194594, 0, 0, 0, 68183, 0, 0, 1287, 5436, 0, 0, 74142, 127013, + 74152, 119078, 6051, 10497, 0, 8985, 12109, 0, 0, 0, 0, 0, 3652, 10537, + 0, 1276, 120440, 6549, 279, 73745, 0, 0, 0, 1489, 0, 0, 0, 3899, 1007, + 42124, 0, 42122, 0, 0, 0, 11985, 1345, 78600, 0, 0, 8956, 43083, 119830, + 42138, 78610, 0, 12151, 78608, 78604, 78605, 6285, 78603, 78612, 78613, + 74194, 492, 8685, 0, 0, 0, 78622, 43712, 2582, 11470, 64538, 7444, 78615, + 78616, 41550, 0, 73837, 119823, 2527, 119824, 197, 2799, 0, 41944, + 120276, 9933, 0, 66515, 767, 5524, 7028, 0, 0, 119827, 119817, 119828, + 78633, 10896, 0, 1799, 120497, 6971, 74336, 0, 0, 65340, 118979, 41551, + 2434, 0, 0, 120579, 0, 4631, 0, 0, 6407, 0, 6338, 43214, 0, 7570, 0, + 3192, 0, 8414, 0, 0, 0, 0, 0, 9164, 66612, 0, 3171, 6623, 4961, 68396, + 886, 55216, 8654, 78832, 9993, 74390, 64603, 0, 69241, 9599, 78629, + 43084, 78627, 78628, 78625, 2399, 0, 8994, 10944, 41208, 0, 41168, 8178, + 0, 3367, 195008, 42510, 78641, 78636, 6804, 78634, 1947, 0, 0, 0, 42759, + 11068, 1705, 9331, 0, 74798, 9181, 65359, 0, 8017, 0, 65096, 66720, 0, + 43475, 0, 4909, 12126, 0, 120696, 4904, 0, 195012, 1365, 9253, 42757, + 43436, 7462, 0, 0, 0, 0, 119587, 64415, 0, 0, 5398, 0, 195014, 0, 0, 0, + 119015, 0, 0, 9476, 0, 0, 12763, 0, 3629, 0, 13005, 0, 3628, 0, 0, 0, + 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, 119814, 0, 12276, 0, 68372, 0, 0, 119244, 0, 0, 10467, 0, + 2443, 10918, 78217, 119825, 1001, 9241, 1927, 0, 0, 73987, 0, 0, 0, + 118828, 127504, 65678, 12867, 0, 8260, 77945, 7519, 11505, 12274, 8904, + 518, 65857, 0, 0, 13204, 4387, 857, 0, 65369, 0, 119583, 43125, 120592, + 0, 0, 0, 0, 5136, 1968, 0, 195023, 1337, 64967, 1629, 0, 796, 66506, 0, + 74123, 12877, 0, 42314, 43388, 0, 74403, 6120, 478, 65151, 68128, 0, + 43082, 6016, 0, 42284, 0, 4276, 1206, 3619, 41638, 0, 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, 127265, 4442, 10364, 0, 778, 41626, 42455, 7989, 74063, 3227, 0, + 127275, 73983, 2915, 11502, 41022, 41702, 10309, 127035, 78320, 0, 6975, + 0, 5415, 12176, 0, 0, 3462, 65215, 42629, 78691, 73784, 0, 0, 9759, 0, + 78324, 127254, 8114, 78698, 78697, 78696, 78695, 8710, 42495, 118956, 0, + 4051, 10460, 43364, 118917, 1356, 12161, 42713, 0, 127268, 1619, 9703, 43152, 42489, 42112, 0, 1875, 10808, 42109, 120284, 41860, 64862, 13305, - 64907, 5289, 13144, 0, 0, 5575, 9675, 0, 5940, 226, 2649, 74493, 0, 0, 0, - 3382, 42449, 6498, 1658, 11936, 0, 0, 11269, 0, 73759, 43100, 74449, - 65508, 0, 0, 0, 8935, 917985, 0, 0, 0, 616, 0, 65178, 4684, 0, 119653, 0, - 0, 0, 6048, 74460, 42110, 73965, 10870, 8557, 11054, 0, 0, 9681, 4475, 0, - 0, 0, 0, 120731, 6035, 0, 7651, 10296, 0, 0, 0, 0, 0, 118966, 74144, - 40997, 0, 10392, 10328, 40998, 0, 74488, 0, 9800, 8979, 0, 119131, 41000, - 0, 119239, 6487, 10977, 0, 10344, 0, 65299, 5394, 0, 0, 10220, 66505, - 41200, 0, 4425, 0, 0, 0, 43074, 73799, 0, 0, 0, 12173, 0, 0, 0, 65338, 0, - 0, 119582, 4474, 0, 43093, 0, 1587, 0, 0, 64475, 0, 1369, 0, 0, 0, 0, - 4560, 0, 0, 0, 0, 64948, 4430, 74347, 42601, 4514, 0, 0, 8194, 65462, - 10626, 10965, 0, 8893, 0, 12542, 0, 65341, 0, 65829, 7925, 0, 10475, 0, - 0, 1352, 11069, 7707, 0, 0, 65279, 127102, 127101, 127100, 65605, 6040, - 127097, 10440, 0, 9336, 0, 0, 8899, 7798, 64474, 64259, 0, 65188, 7820, - 43018, 0, 0, 7746, 1492, 0, 10884, 0, 0, 5127, 11285, 42501, 5495, 4273, - 43095, 41426, 10849, 5730, 2999, 0, 120720, 74304, 371, 64373, 6023, 169, - 5497, 11708, 0, 0, 0, 0, 8224, 0, 8938, 6043, 12738, 0, 0, 5321, 0, 0, 0, - 2589, 74332, 1689, 7802, 4683, 74318, 0, 120296, 66704, 0, 0, 0, 0, - 74513, 6049, 0, 4027, 834, 118962, 1803, 0, 1503, 0, 0, 0, 5731, 1381, - 2387, 0, 0, 8289, 64525, 65817, 2881, 65514, 0, 9601, 2879, 9668, 9766, - 0, 5729, 0, 74410, 6036, 64881, 4026, 9361, 127091, 2887, 0, 3526, 6298, - 0, 0, 0, 0, 0, 8572, 6021, 0, 0, 0, 43155, 0, 0, 3146, 10959, 0, 0, 0, - 10981, 166, 0, 8635, 0, 10623, 408, 0, 0, 13298, 0, 7426, 41641, 12717, - 0, 7607, 10639, 66713, 0, 0, 41643, 74134, 0, 8713, 41640, 0, 41645, - 66712, 6645, 646, 66726, 66711, 42129, 0, 0, 3472, 8697, 0, 0, 0, 0, 0, - 0, 5809, 1950, 119356, 0, 74572, 0, 42136, 0, 0, 0, 0, 3247, 119854, - 65017, 0, 0, 66668, 0, 0, 10983, 0, 0, 0, 41567, 0, 0, 0, 0, 0, 0, 0, - 8285, 0, 4509, 0, 66471, 12216, 0, 40988, 0, 0, 41727, 0, 0, 2396, 0, 0, - 0, 0, 64940, 0, 3886, 0, 42457, 0, 0, 996, 0, 917571, 4249, 0, 917594, - 11707, 8222, 0, 7939, 0, 917574, 917582, 917592, 917569, 8534, 0, 40983, - 0, 0, 0, 7201, 12561, 0, 42371, 12558, 0, 0, 10052, 40982, 0, 0, 1488, 0, - 0, 0, 917559, 0, 0, 1563, 0, 9619, 0, 0, 0, 0, 0, 5803, 7797, 6070, - 10006, 0, 2922, 6082, 0, 65009, 0, 12567, 0, 0, 0, 0, 0, 3607, 65863, - 10046, 9612, 42153, 8218, 9485, 0, 2032, 0, 0, 0, 0, 0, 0, 43085, 6057, - 508, 0, 0, 120265, 0, 0, 0, 0, 638, 6083, 119072, 0, 0, 2305, 0, 0, 0, - 6056, 6659, 0, 0, 6085, 0, 0, 3915, 41634, 0, 41639, 63912, 11941, 0, - 4028, 1787, 42180, 43096, 0, 3249, 1768, 0, 12328, 501, 127074, 10601, 0, - 583, 0, 41977, 0, 66004, 119350, 6505, 74010, 0, 13064, 0, 120810, 6500, - 5526, 65049, 0, 74531, 0, 0, 12745, 9678, 0, 120587, 9869, 0, 1771, 0, - 8936, 0, 0, 4208, 0, 119115, 0, 0, 0, 74101, 0, 11762, 0, 0, 0, 0, 66475, - 0, 5027, 0, 0, 0, 5069, 73862, 5028, 9897, 0, 73739, 5026, 0, 0, 0, 0, - 8931, 0, 1415, 8866, 41901, 74790, 0, 119361, 0, 43106, 5029, 119360, - 1580, 3598, 0, 41070, 0, 0, 3440, 119359, 1562, 0, 917827, 119358, 1716, - 0, 10600, 0, 620, 41001, 6028, 0, 42892, 0, 74822, 5024, 120829, 41003, - 0, 5025, 0, 0, 0, 119328, 0, 65557, 0, 0, 0, 11599, 0, 11602, 6243, - 11574, 11581, 11597, 11598, 6253, 6105, 11584, 74195, 11569, 65275, 8906, - 127096, 66491, 2636, 0, 10815, 11619, 0, 41540, 7815, 11616, 6979, 12080, - 7721, 11604, 7869, 1592, 0, 42152, 0, 41048, 0, 829, 0, 0, 19950, 0, 0, - 6616, 0, 118875, 10953, 391, 0, 0, 482, 42296, 11588, 0, 43606, 0, 0, - 66370, 0, 42335, 0, 0, 0, 7538, 5315, 0, 42491, 0, 42061, 0, 4576, 0, 0, - 120241, 4277, 0, 4039, 64472, 42338, 368, 42058, 3960, 11043, 11337, - 120247, 917820, 63989, 3958, 12132, 1849, 0, 9921, 42451, 917818, 41147, - 42064, 11959, 42404, 41160, 0, 3618, 0, 0, 43300, 5156, 0, 0, 929, 0, - 917822, 42437, 1555, 0, 8691, 66435, 0, 41662, 0, 0, 0, 0, 0, 4578, - 64513, 41664, 0, 42578, 0, 41661, 0, 43305, 9356, 0, 0, 0, 1286, 10166, - 0, 0, 64707, 0, 42476, 7730, 0, 0, 42483, 0, 0, 42324, 42291, 10020, - 43359, 0, 6641, 525, 41627, 0, 8763, 0, 41628, 533, 11931, 65225, 8321, - 42504, 42581, 0, 6915, 42310, 4377, 8559, 0, 120234, 0, 13193, 64350, - 11666, 8679, 41924, 1576, 7735, 0, 0, 73840, 0, 11374, 0, 10889, 917909, - 7757, 42462, 120226, 126994, 66493, 2718, 4168, 73842, 13308, 120112, 0, - 1179, 4440, 0, 0, 363, 11015, 0, 0, 64296, 127090, 66692, 120826, 0, - 66492, 6593, 64625, 41963, 0, 119329, 0, 10013, 0, 0, 127095, 9492, - 11782, 64382, 12833, 0, 0, 1297, 41630, 630, 127094, 0, 0, 0, 1043, 0, 0, - 10090, 0, 0, 313, 917563, 41881, 0, 42311, 7445, 0, 5750, 10759, 9419, 0, - 9405, 11268, 0, 9398, 8526, 9399, 9422, 0, 66495, 0, 0, 0, 41718, 10707, - 1603, 0, 0, 0, 631, 0, 0, 13161, 65272, 0, 10546, 74210, 0, 11600, 0, - 2797, 73821, 42427, 306, 714, 3058, 42381, 120036, 127080, 12351, 42395, - 0, 11607, 0, 42282, 0, 0, 9157, 73765, 66364, 42433, 0, 7603, 12803, 180, - 42141, 0, 120612, 66494, 12674, 8244, 362, 0, 0, 8037, 917804, 11535, 0, - 74845, 5185, 66696, 5521, 10334, 5519, 0, 10302, 0, 10104, 1027, 5181, 0, - 0, 10523, 1446, 42320, 41646, 991, 5189, 42472, 41647, 120105, 1722, - 5581, 0, 3405, 0, 194644, 5523, 0, 42620, 0, 0, 9549, 0, 10549, 0, 9661, - 66486, 0, 120537, 120026, 0, 0, 0, 0, 41991, 0, 0, 7630, 9846, 7684, - 10350, 0, 1174, 0, 0, 0, 0, 66485, 0, 42277, 0, 42456, 65667, 0, 12330, - 0, 0, 42417, 42383, 0, 41344, 6293, 0, 66252, 0, 74443, 0, 10209, 8313, - 4195, 0, 9010, 66690, 0, 0, 64894, 0, 65871, 0, 1736, 0, 3901, 12228, - 120151, 65200, 3383, 10446, 0, 693, 9130, 314, 64149, 42420, 11949, 0, 0, - 11026, 0, 5332, 6940, 64154, 12635, 127007, 120628, 1751, 273, 8165, - 13166, 120763, 0, 0, 12824, 0, 4528, 5320, 6301, 0, 6133, 9339, 9463, - 42346, 10922, 64560, 3757, 0, 0, 0, 65869, 73760, 2569, 0, 2326, 65740, - 2565, 42459, 7596, 7921, 0, 74095, 0, 41848, 2567, 66006, 0, 4044, 0, 0, - 12233, 0, 1023, 474, 0, 119818, 0, 0, 42487, 65556, 0, 0, 42295, 0, 0, 0, - 0, 9835, 66499, 0, 0, 12275, 10895, 0, 274, 0, 1858, 0, 0, 0, 10118, - 3133, 0, 73795, 0, 9610, 8068, 8197, 0, 699, 0, 41665, 5868, 0, 0, 42182, - 7581, 19940, 0, 41667, 0, 0, 1923, 65583, 65802, 0, 64597, 0, 119184, 0, - 0, 6464, 7036, 2996, 1937, 0, 0, 41835, 4047, 41842, 0, 65217, 0, 0, - 11017, 0, 0, 293, 0, 0, 64791, 41827, 42466, 65416, 10579, 8560, 0, - 65413, 118835, 4803, 12964, 1739, 1941, 3900, 0, 1713, 0, 0, 73957, + 64907, 5289, 13144, 0, 0, 5575, 9675, 0, 5940, 226, 2649, 6336, 0, 0, + 43236, 3382, 42449, 6498, 1658, 11936, 78232, 0, 11269, 10151, 73759, + 43100, 74449, 65508, 0, 0, 0, 8935, 917985, 0, 0, 0, 616, 74753, 65178, + 4684, 78701, 119653, 0, 0, 0, 6048, 74460, 42110, 73965, 10870, 8557, + 11054, 68664, 119049, 9681, 4475, 0, 41142, 2100, 0, 120731, 6035, 0, + 7651, 10296, 0, 0, 0, 917987, 0, 118966, 74144, 40997, 0, 10392, 10328, + 40998, 43462, 74488, 0, 9800, 8979, 0, 119131, 41000, 0, 119239, 6487, + 10977, 0, 10344, 0, 65299, 5394, 43246, 78243, 10220, 66505, 41200, 0, + 4425, 0, 0, 0, 43074, 73799, 0, 78147, 0, 12173, 78545, 0, 0, 65338, 0, + 0, 119582, 4474, 0, 43093, 0, 1587, 0, 127372, 64475, 0, 1369, 0, 78251, + 7927, 0, 4560, 0, 0, 0, 0, 64948, 4430, 74347, 42601, 4514, 66434, 0, + 8194, 65462, 10626, 10965, 0, 8893, 0, 12542, 0, 65341, 0, 65829, 7925, + 119822, 10475, 0, 0, 1352, 11069, 7707, 127560, 0, 65279, 127102, 68207, + 127100, 65605, 6040, 127097, 10071, 0, 9336, 0, 0, 8899, 7798, 64474, + 64259, 0, 65188, 7820, 43018, 0, 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, 0, 8224, 0, + 8938, 6043, 12738, 0, 0, 5321, 0, 0, 0, 2589, 74332, 1689, 7802, 4683, + 74318, 42704, 120296, 11905, 0, 0, 0, 0, 74513, 6049, 0, 4027, 834, + 118962, 1803, 0, 1503, 0, 0, 0, 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, 0, 78519, + 0, 8572, 6021, 77896, 0, 77895, 43155, 0, 0, 3146, 10959, 9483, 0, 77893, + 10981, 166, 917841, 8635, 0, 10623, 408, 119058, 127507, 13298, 0, 7426, + 41641, 12717, 0, 7607, 10639, 66713, 0, 0, 41643, 74134, 0, 8713, 41640, + 10221, 41645, 66712, 6645, 646, 66726, 66711, 42129, 0, 77901, 3472, + 8697, 0, 0, 0, 0, 0, 0, 5809, 1950, 119356, 0, 74572, 0, 42136, 0, 0, 0, + 0, 3247, 119854, 65017, 0, 68428, 66668, 0, 0, 10983, 0, 0, 0, 41567, 0, + 0, 0, 194624, 0, 0, 0, 8285, 0, 4509, 0, 66471, 12216, 0, 40988, 0, 0, + 41727, 0, 0, 2396, 0, 0, 74018, 917538, 64940, 0, 3886, 0, 42457, 119008, + 0, 996, 68123, 917571, 4249, 0, 917594, 11707, 8222, 0, 7939, 0, 917574, + 917582, 917592, 917569, 8534, 0, 40983, 0, 0, 0, 7201, 12561, 0, 42371, + 12558, 0, 0, 10052, 40982, 0, 0, 1488, 0, 0, 0, 917559, 0, 0, 1563, 0, + 9619, 0, 0, 0, 0, 0, 5803, 7797, 6070, 10006, 0, 2922, 6082, 0, 65009, 0, + 12567, 0, 0, 41412, 0, 0, 3607, 65863, 10046, 9612, 42153, 8218, 9485, 0, + 2032, 78354, 0, 0, 0, 0, 0, 43085, 6057, 508, 0, 0, 120265, 0, 0, 0, 0, + 638, 6083, 119072, 0, 0, 2305, 78348, 0, 0, 6056, 6659, 0, 0, 6085, 0, 0, + 3915, 41634, 0, 41639, 63912, 11941, 0, 4028, 1787, 42180, 43096, 0, + 3249, 1768, 0, 12328, 501, 127074, 10601, 0, 583, 0, 41977, 0, 66004, + 119350, 6505, 74010, 0, 13064, 55267, 120810, 6500, 5526, 65049, 0, + 73764, 0, 0, 12745, 9678, 0, 120587, 9869, 0, 1771, 0, 8936, 0, 0, 4208, + 78341, 119115, 78342, 0, 0, 74101, 0, 11762, 0, 0, 77997, 0, 66475, 0, + 5027, 0, 0, 0, 5069, 73862, 5028, 9897, 0, 73739, 5026, 0, 68639, 6331, + 0, 8931, 0, 1415, 8866, 41901, 74790, 78138, 119361, 0, 43106, 5029, + 65309, 1580, 3598, 68424, 41070, 77903, 0, 3440, 78215, 1562, 0, 127236, + 119358, 1716, 0, 10600, 0, 620, 41001, 6028, 0, 42892, 0, 74822, 5024, + 120829, 41003, 0, 5025, 0, 0, 0, 119328, 0, 65557, 0, 74541, 0, 11599, 0, + 11602, 6243, 11574, 11581, 11597, 11598, 6253, 6105, 11584, 74195, 11569, + 65275, 8906, 127096, 5755, 2636, 0, 10815, 11619, 78717, 41540, 7815, + 11616, 6979, 12080, 7721, 11604, 7869, 1592, 0, 42152, 78498, 41048, 0, + 829, 0, 0, 19950, 0, 0, 6616, 0, 118875, 10953, 391, 0, 69785, 482, + 42296, 11588, 0, 43606, 0, 68397, 66370, 0, 42335, 0, 0, 0, 7538, 5315, + 0, 42491, 0, 42061, 0, 4576, 0, 68417, 120241, 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, 0, 0, 929, 6827, 42035, 42437, 1555, 0, 8691, + 66435, 0, 41662, 0, 0, 0, 0, 0, 4578, 64513, 41664, 0, 42578, 0, 41661, + 78715, 43305, 9356, 0, 0, 0, 1286, 10166, 0, 0, 64707, 0, 42476, 7730, 0, + 0, 42483, 0, 0, 42324, 42291, 10020, 43359, 0, 6641, 525, 41627, 0, 8763, + 0, 41628, 533, 11931, 65225, 8321, 42504, 42581, 0, 6915, 42310, 4377, + 8559, 0, 120234, 0, 13193, 64350, 11666, 8679, 41924, 1576, 7735, 0, 0, + 73840, 0, 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, + 0, 119329, 0, 10013, 0, 0, 127095, 9492, 11782, 64382, 12833, 118986, 0, + 1297, 41630, 630, 127094, 0, 120774, 120570, 1043, 43652, 66223, 10090, + 0, 0, 313, 917563, 41881, 0, 42311, 7445, 0, 5750, 10759, 9419, 55222, + 9405, 11268, 0, 9398, 8526, 9399, 9422, 0, 66495, 0, 0, 127239, 41718, + 10707, 1603, 0, 119003, 0, 631, 77952, 77953, 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, 0, 0, 8037, 917803, 11535, 0, 74845, 5185, 66696, 5521, + 10334, 2093, 77983, 10302, 0, 10104, 1027, 5181, 0, 0, 10523, 1446, + 42320, 41646, 991, 5189, 42472, 41647, 120105, 1722, 5581, 77979, 3405, + 0, 194644, 5523, 0, 42620, 0, 0, 9549, 0, 10549, 55282, 9661, 43682, 0, + 77910, 120026, 78708, 0, 77911, 0, 41991, 0, 0, 7630, 9846, 7684, 10350, + 0, 1174, 77981, 42733, 77978, 77980, 66485, 77977, 42277, 77974, 42456, + 65667, 0, 12330, 0, 0, 42417, 42383, 0, 41344, 6293, 0, 66252, 77984, + 74443, 0, 10209, 8313, 4195, 74435, 1316, 66690, 120032, 6332, 64894, 0, + 65871, 78060, 1736, 0, 3901, 12228, 120151, 65200, 3383, 10446, 78841, + 693, 9130, 314, 64149, 42420, 11949, 0, 120152, 11026, 0, 5332, 6940, + 64154, 12635, 127007, 42706, 1751, 273, 8165, 13166, 120763, 78840, 0, + 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, 0, 74095, 0, 41848, 2567, 66006, 0, 4044, 0, 0, 12233, 0, 1023, + 474, 0, 119818, 0, 0, 42487, 65556, 0, 0, 42295, 0, 0, 0, 0, 9835, 66499, + 0, 5417, 12275, 10895, 0, 274, 0, 1858, 0, 0, 55251, 10118, 3133, 0, + 73795, 0, 9610, 8068, 8197, 0, 699, 0, 41665, 5868, 0, 0, 42182, 7581, + 19940, 43668, 41667, 0, 0, 1923, 65583, 65802, 0, 64597, 43444, 119184, + 0, 0, 6464, 7036, 2996, 1937, 0, 0, 41835, 4047, 41842, 0, 64107, 0, 0, + 11017, 0, 0, 293, 77966, 0, 64791, 41827, 42466, 43422, 10579, 8560, 0, + 65413, 77963, 4803, 12964, 1739, 1941, 3900, 0, 1713, 77969, 0, 73957, 11407, 42441, 41971, 6297, 120098, 64105, 0, 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, 0, 6208, 0, - 5746, 73749, 0, 64416, 42422, 0, 0, 7082, 73775, 338, 5059, 194719, 0, - 42328, 10767, 0, 8115, 0, 0, 0, 8227, 0, 1218, 0, 0, 65848, 0, 0, 0, 0, - 126987, 4486, 0, 0, 0, 10925, 0, 0, 0, 0, 42309, 10257, 0, 10273, 0, - 10305, 42461, 0, 42349, 8832, 0, 64127, 10644, 0, 0, 42278, 74451, - 126988, 917857, 7794, 0, 42429, 11081, 42316, 119026, 3669, 3968, 42468, - 0, 0, 0, 65402, 119581, 0, 0, 64933, 0, 41960, 0, 0, 0, 0, 66678, 42391, - 1588, 65400, 8409, 0, 19967, 65398, 787, 0, 0, 0, 6115, 118940, 41654, - 42480, 0, 0, 41655, 65401, 0, 0, 0, 0, 644, 65500, 41657, 10778, 3659, - 9533, 184, 1553, 13107, 65484, 0, 10502, 74457, 0, 0, 41554, 0, 8220, 0, - 41557, 0, 0, 11070, 0, 5157, 4020, 73858, 41555, 9514, 64818, 65103, - 64641, 0, 119633, 7520, 0, 74377, 11029, 66651, 0, 0, 118930, 64527, 0, - 7877, 73803, 0, 0, 120096, 74602, 0, 0, 0, 42817, 0, 65212, 11715, 12190, - 12319, 0, 0, 0, 9502, 65427, 0, 65424, 0, 0, 9734, 65425, 0, 0, 0, 0, 0, - 10112, 10827, 0, 9866, 74527, 66675, 0, 8625, 64346, 11290, 10477, 0, - 8636, 0, 8315, 65444, 0, 0, 74595, 6152, 0, 0, 6629, 0, 120171, 0, 74589, - 0, 0, 0, 0, 0, 0, 11046, 11490, 43127, 4485, 0, 0, 64926, 0, 0, 0, 5869, - 12437, 0, 0, 7040, 3588, 0, 12825, 0, 0, 12725, 0, 0, 120167, 223, 0, 0, - 120166, 42444, 0, 64499, 65245, 0, 1171, 0, 120165, 0, 1805, 8772, 0, 0, - 65078, 65247, 0, 120111, 2338, 0, 118853, 0, 0, 0, 64800, 65236, 67644, - 68126, 1213, 0, 64075, 797, 64074, 8734, 4212, 0, 64387, 4115, 0, 5005, - 64070, 64073, 10679, 0, 0, 0, 64276, 426, 0, 0, 8251, 10136, 65436, 0, - 65088, 43302, 1224, 0, 65576, 0, 10701, 1764, 3101, 0, 65291, 120159, 0, - 11373, 74566, 0, 120103, 8663, 9312, 41644, 4539, 3787, 0, 9222, 0, 0, - 4259, 9092, 74567, 41961, 0, 12724, 66357, 42331, 64935, 0, 0, 1293, - 7947, 12003, 0, 74593, 120308, 2454, 74807, 3613, 0, 0, 0, 65888, 120307, - 10978, 10840, 0, 10668, 0, 43087, 12595, 120304, 0, 118806, 0, 1157, - 64903, 8638, 0, 0, 0, 0, 120319, 8235, 0, 4405, 10086, 0, 0, 0, 0, 65430, - 74013, 6079, 0, 10764, 0, 64291, 0, 998, 120312, 11062, 120313, 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, 0, 66373, 0, 0, 64908, 0, 6311, 0, 12004, 119192, 12049, - 43108, 0, 0, 41705, 0, 6598, 0, 6599, 0, 0, 42148, 118825, 66027, 0, - 6597, 9412, 8340, 11824, 64745, 0, 0, 0, 1988, 5407, 67865, 2430, 41678, - 0, 0, 2336, 0, 0, 0, 120442, 0, 1921, 10947, 19927, 0, 65406, 0, 19913, - 4284, 13217, 0, 0, 12841, 9229, 10956, 42285, 41674, 19964, 41679, 65084, - 3521, 0, 5774, 8325, 0, 65403, 0, 1854, 10794, 0, 0, 0, 0, 0, 5280, 0, - 4344, 12905, 65433, 6076, 64793, 41610, 768, 12074, 442, 0, 68162, 64081, - 12934, 41682, 65432, 41693, 0, 6071, 65434, 0, 4804, 6994, 0, 0, 0, - 41696, 467, 0, 0, 0, 0, 0, 8421, 0, 0, 64801, 502, 0, 65431, 0, 0, 12043, - 1303, 316, 0, 2029, 65191, 119246, 11533, 64365, 0, 0, 4860, 194645, 0, - 42488, 0, 9583, 0, 5546, 8019, 73856, 0, 0, 0, 5544, 2355, 12150, 65725, - 5543, 119245, 63751, 12137, 5548, 0, 0, 0, 0, 65726, 6077, 0, 65452, 0, - 11301, 0, 0, 0, 9874, 0, 0, 0, 3050, 65410, 0, 0, 0, 0, 42830, 0, 66716, - 0, 4691, 0, 9345, 621, 0, 0, 0, 65411, 0, 41182, 73881, 65408, 73899, 0, - 9474, 10545, 119118, 10887, 3786, 65409, 8894, 43179, 119611, 7923, 3716, + 74327, 7806, 0, 8914, 0, 0, 3183, 1435, 64876, 2969, 6046, 0, 6208, + 67849, 5746, 73749, 0, 64416, 42422, 0, 0, 7082, 73775, 338, 5059, + 194719, 0, 42328, 10767, 0, 8115, 0, 0, 0, 8227, 2073, 1218, 0, 0, 65848, + 0, 0, 0, 0, 126987, 4486, 0, 0, 0, 10925, 0, 0, 0, 0, 42309, 10257, 0, + 10273, 0, 10305, 42461, 0, 42349, 8832, 78051, 64127, 10644, 42662, + 78828, 42278, 74451, 126988, 917857, 7794, 0, 42429, 6377, 42316, 119026, + 3669, 3968, 42468, 0, 78544, 0, 65402, 119581, 0, 0, 64933, 0, 41960, + 6699, 0, 0, 0, 6823, 42391, 1588, 65400, 8409, 78223, 19967, 65398, 787, + 0, 917939, 0, 6115, 2078, 41654, 42480, 0, 0, 41655, 65401, 43975, 0, 0, + 0, 644, 65500, 41657, 10778, 3659, 9533, 184, 1553, 13107, 65484, 0, + 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, 0, 0, 118930, 64527, 0, 7877, 73803, 0, 0, + 120096, 74602, 9955, 0, 4055, 42817, 0, 65212, 11715, 12190, 12319, + 78630, 0, 78631, 9502, 65427, 0, 65424, 12607, 0, 9734, 65425, 0, 0, 0, + 78835, 0, 10112, 10827, 0, 9866, 74527, 66675, 0, 8625, 64346, 11290, + 10477, 0, 8636, 0, 8315, 65444, 0, 0, 74595, 6152, 0, 0, 6629, 0, 120171, + 0, 74589, 43993, 0, 69790, 0, 0, 43690, 11046, 11490, 42730, 4485, 0, 0, + 64926, 0, 0, 0, 5869, 12437, 42728, 0, 7040, 3588, 0, 12825, 0, 0, 12725, + 0, 0, 78642, 223, 0, 69806, 120166, 42444, 0, 64499, 65245, 0, 1171, 0, + 120165, 0, 1805, 8772, 0, 0, 9930, 65247, 78619, 120111, 2338, 0, 118853, + 0, 42676, 0, 64800, 65236, 67644, 68126, 1213, 0, 64075, 797, 64074, + 8734, 4212, 0, 64387, 4115, 0, 5005, 64070, 64073, 10679, 0, 77954, 0, + 64276, 426, 0, 0, 8251, 10136, 65436, 0, 65088, 43302, 1224, 0, 65576, + 120158, 10701, 1764, 3101, 0, 65291, 120159, 0, 11373, 6378, 0, 120103, + 8663, 9312, 41644, 4539, 3787, 0, 9222, 0, 0, 4259, 9092, 74567, 41961, + 0, 12724, 66357, 42331, 64935, 0, 0, 1293, 7947, 12003, 0, 74593, 120308, + 2454, 42717, 3613, 0, 0, 0, 65888, 8816, 10978, 10840, 0, 10668, 0, + 43087, 12595, 120304, 0, 118806, 0, 1157, 64903, 8638, 0, 0, 0, 0, + 120319, 8235, 120316, 4405, 10086, 120247, 0, 69216, 0, 65430, 74013, + 6079, 6817, 10764, 0, 64291, 0, 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, 0, + 66373, 0, 0, 64908, 0, 6311, 0, 12004, 119192, 12049, 43108, 0, 0, 41705, + 0, 6598, 0, 6599, 0, 0, 42148, 118825, 66027, 0, 6597, 9412, 8340, 11824, + 64745, 0, 0, 0, 1988, 5407, 67865, 2430, 41678, 0, 120243, 2336, 0, 0, + 78871, 120442, 0, 1921, 10947, 19927, 0, 65406, 0, 19913, 4284, 13217, 0, + 0, 12841, 9229, 10956, 42285, 41674, 19964, 41679, 65084, 3521, 0, 5774, + 8325, 0, 65403, 0, 1854, 10794, 0, 67660, 0, 0, 78359, 5280, 0, 4344, + 12905, 65433, 6076, 64793, 41610, 768, 12074, 442, 0, 68162, 64081, + 12934, 41682, 65432, 41693, 0, 6071, 65434, 0, 4804, 4053, 0, 0, 194653, + 41696, 467, 69823, 0, 69797, 0, 0, 8421, 0, 0, 43705, 502, 0, 65431, + 119056, 0, 12043, 1303, 316, 0, 2029, 65191, 119246, 11533, 64365, 43480, + 0, 4860, 194645, 0, 42488, 0, 9583, 0, 5546, 8019, 73856, 0, 0, 0, 5544, + 2355, 12150, 65725, 5543, 77989, 63751, 12137, 5548, 77985, 0, 65727, + 68388, 65726, 6077, 0, 65452, 0, 11301, 78013, 78008, 78010, 9874, 78007, + 0, 0, 3050, 65410, 0, 0, 78016, 78017, 42830, 43996, 66716, 0, 4691, 0, + 9345, 621, 0, 0, 0, 65411, 0, 41182, 73881, 65408, 73899, 78024, 9474, + 10545, 119118, 10887, 3786, 65409, 8894, 43179, 119611, 7923, 3716, 119341, 9996, 8508, 0, 7012, 8195, 0, 9566, 0, 3722, 0, 41707, 8493, 545, - 9575, 41379, 10050, 12718, 0, 8859, 41459, 0, 0, 120740, 0, 0, 9119, - 2787, 7920, 118823, 4021, 2012, 7985, 0, 119663, 0, 0, 0, 0, 410, 120449, - 1802, 120789, 74107, 0, 41659, 41671, 1827, 0, 64396, 10126, 12116, - 41673, 120370, 11422, 120372, 120373, 3860, 120367, 120368, 41345, - 120362, 120363, 11748, 42158, 7941, 11076, 8749, 120361, 12698, 64858, - 361, 120357, 845, 0, 41560, 11970, 4562, 917920, 2926, 0, 4569, 74130, 0, - 119221, 194630, 611, 74129, 64871, 0, 65629, 0, 0, 0, 0, 0, 120543, 0, 0, - 6291, 0, 0, 41669, 7094, 917921, 0, 0, 74054, 0, 0, 0, 839, 0, 7695, - 8769, 65246, 4829, 0, 4859, 64467, 0, 0, 118998, 7206, 0, 6647, 0, 0, 0, - 0, 64764, 4210, 0, 0, 804, 0, 0, 12298, 0, 0, 0, 64924, 10091, 73931, - 9468, 74245, 0, 0, 74246, 0, 12839, 64669, 0, 0, 1279, 1425, 6224, - 119229, 11049, 0, 917549, 0, 8482, 0, 0, 5032, 0, 11940, 67888, 664, 0, - 5034, 0, 0, 0, 0, 73888, 0, 13294, 67873, 64869, 6032, 0, 9115, 7430, - 120377, 0, 120819, 0, 120168, 73913, 120170, 41161, 5518, 4174, 10993, - 41162, 120160, 64528, 1169, 434, 41437, 1905, 6034, 41164, 64744, 9528, - 118867, 0, 524, 0, 74029, 788, 74027, 0, 0, 0, 1663, 10419, 74025, 42636, - 0, 0, 0, 120656, 0, 0, 0, 0, 0, 67897, 74039, 0, 0, 11395, 0, 119107, - 43612, 64344, 0, 0, 10855, 5445, 9355, 0, 65198, 0, 8989, 221, 65686, 0, - 0, 8010, 7191, 4962, 0, 8855, 0, 0, 64469, 0, 10555, 0, 0, 0, 0, 120427, - 10451, 0, 120152, 7245, 12443, 74405, 120148, 120149, 120150, 3873, 8367, - 0, 120146, 120147, 0, 66507, 0, 0, 11010, 12723, 74059, 74062, 6217, + 9575, 41379, 10050, 12718, 0, 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, 0, 4569, + 74130, 0, 43487, 194630, 611, 74129, 64871, 120379, 65629, 0, 0, 0, 0, 0, + 120543, 0, 0, 6291, 0, 78639, 41669, 7094, 917921, 0, 0, 74054, 0, + 195029, 0, 839, 0, 7695, 8769, 65246, 4829, 0, 4859, 64467, 0, 0, 118998, + 7206, 0, 6647, 43986, 0, 69766, 0, 64764, 4210, 0, 0, 804, 0, 0, 12298, + 0, 66653, 0, 64924, 10091, 73931, 9468, 74245, 0, 0, 74246, 0, 12839, + 64669, 0, 0, 1279, 1425, 6224, 119229, 11049, 0, 917549, 43239, 8482, 0, + 0, 5032, 77830, 11940, 67888, 664, 0, 5034, 0, 0, 127525, 42702, 73888, + 0, 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, 194668, 524, 0, + 74029, 788, 74027, 0, 0, 0, 1663, 10419, 74025, 42636, 0, 0, 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, 0, 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, 0, 74052, 0, 0, 120549, 119082, 64295, 120418, 0, 64765, 73923, 120417, 120662, 120730, 0, 6216, 0, 10755, 9455, 0, 8124, - 0, 9470, 6944, 0, 0, 0, 2828, 0, 531, 42638, 0, 0, 0, 73764, 8204, 3614, - 2827, 9696, 0, 0, 8728, 4354, 10904, 120502, 19936, 7833, 120691, 0, - 42599, 42597, 0, 120409, 0, 0, 8537, 0, 0, 0, 0, 0, 41199, 10121, 2028, - 0, 0, 0, 0, 3062, 0, 74447, 12608, 0, 66440, 7545, 9700, 12580, 0, - 120777, 0, 41155, 0, 74071, 0, 0, 12713, 0, 0, 0, 0, 0, 1734, 0, 0, 0, 0, - 2456, 231, 0, 74167, 542, 0, 118786, 0, 0, 1230, 0, 0, 3597, 9761, 10584, - 74235, 0, 4037, 0, 8352, 0, 5687, 0, 64515, 0, 0, 0, 67846, 0, 9704, 0, - 0, 74284, 0, 0, 8660, 0, 0, 0, 0, 74482, 4483, 1709, 0, 9909, 6080, 0, 0, - 1746, 1315, 8667, 0, 0, 13140, 65899, 10604, 0, 4480, 11266, 0, 1226, - 6930, 0, 0, 0, 10897, 41230, 605, 0, 74785, 120356, 0, 0, 41500, 0, 311, - 11453, 6221, 10608, 64943, 74280, 10877, 0, 64885, 74272, 0, 0, 0, 0, - 74312, 345, 0, 74456, 64606, 42589, 0, 0, 5037, 0, 1776, 8422, 0, 118814, - 41508, 41201, 323, 43328, 0, 120698, 1295, 0, 4625, 0, 4630, 13117, 0, 0, - 65123, 11293, 2668, 11288, 0, 42640, 65666, 2519, 0, 65420, 0, 0, 917886, - 5049, 0, 119011, 706, 7754, 10854, 8738, 0, 65419, 0, 0, 649, 65421, 0, + 127042, 9470, 6944, 0, 0, 0, 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, 0, 0, 0, 41199, + 10121, 2028, 0, 0, 0, 0, 3062, 0, 74447, 12608, 0, 66440, 7545, 9700, + 12580, 0, 120777, 120502, 41155, 0, 74071, 0, 0, 12713, 0, 0, 0, 78772, + 0, 1734, 0, 0, 0, 64594, 2456, 231, 0, 74167, 542, 0, 118786, 0, 0, 1230, + 0, 0, 3597, 4446, 10584, 74235, 0, 4037, 0, 8352, 0, 5687, 0, 64515, 0, + 0, 55265, 67846, 78434, 9704, 0, 0, 74284, 0, 0, 8660, 0, 0, 0, 78773, + 74482, 4483, 1709, 120617, 9909, 6080, 0, 0, 1746, 1315, 8667, 0, 0, + 13140, 65899, 10604, 0, 4480, 11266, 0, 1226, 6930, 0, 0, 6360, 10897, + 41230, 605, 0, 74785, 120356, 0, 0, 41500, 0, 311, 11453, 6221, 10608, + 64943, 74280, 10877, 118868, 64885, 74272, 0, 0, 0, 120736, 74312, 345, + 0, 74456, 64606, 9917, 0, 0, 5037, 0, 1776, 8422, 0, 118814, 41508, + 41201, 323, 43328, 0, 42698, 1295, 0, 4625, 0, 4630, 13117, 0, 0, 65123, + 11293, 2668, 11288, 0, 42640, 65666, 2519, 0, 65420, 0, 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, 0, 1183, 0, 7017, 42852, - 0, 8157, 9736, 64503, 65418, 0, 0, 74035, 0, 11913, 73874, 42848, 0, - 8920, 0, 0, 7962, 12211, 9837, 0, 66227, 0, 4184, 0, 0, 10177, 73777, - 1857, 0, 4626, 8464, 8472, 0, 4629, 8499, 0, 0, 4624, 7818, 194622, 0, 0, - 7805, 0, 0, 6935, 0, 0, 0, 0, 43327, 0, 119046, 8492, 8250, 8459, 0, - 8497, 8496, 0, 0, 0, 0, 9543, 0, 0, 0, 65849, 0, 0, 0, 0, 0, 8684, 0, - 6102, 0, 5298, 0, 5294, 0, 0, 0, 0, 0, 119826, 0, 119215, 0, 12073, 0, 0, - 0, 13108, 0, 74397, 41468, 0, 0, 5292, 0, 0, 1939, 5302, 3970, 0, 12455, - 1793, 0, 0, 0, 6643, 0, 65263, 0, 0, 41293, 0, 119125, 0, 13219, 9569, 0, - 74383, 0, 0, 0, 5500, 8813, 0, 0, 0, 5322, 0, 0, 0, 5324, 66443, 3784, - 41614, 65269, 6230, 0, 0, 43324, 3360, 0, 11523, 0, 0, 41732, 7197, 0, 0, - 0, 41821, 1249, 0, 0, 0, 118992, 0, 64899, 64763, 41149, 41807, 43162, - 41815, 41150, 0, 10571, 10096, 0, 0, 0, 6947, 41152, 887, 9249, 6565, 0, - 41990, 0, 41811, 74466, 0, 6670, 0, 0, 0, 43092, 43325, 0, 10168, 0, - 9781, 0, 9190, 0, 9666, 8269, 65944, 74005, 13019, 11670, 0, 315, 12813, - 0, 119648, 0, 0, 0, 0, 0, 0, 0, 1378, 9509, 0, 0, 74475, 3066, 0, 67847, - 0, 0, 0, 0, 8787, 0, 194616, 41618, 194615, 0, 194614, 0, 64652, 0, - 194612, 0, 0, 42088, 0, 0, 7176, 0, 10137, 6121, 10995, 0, 74534, 8119, - 64874, 0, 0, 0, 0, 74525, 0, 0, 12930, 1394, 74514, 0, 74515, 0, 118804, - 2998, 9527, 120659, 65190, 12977, 42090, 119165, 0, 119100, 41236, 0, - 65168, 42003, 41237, 5848, 0, 0, 3670, 0, 0, 0, 0, 7890, 0, 11298, 43315, - 0, 6229, 1593, 0, 0, 619, 4635, 65080, 0, 0, 4120, 65337, 65336, 0, - 11808, 119214, 74115, 9366, 42790, 42006, 0, 65327, 65326, 65325, 10757, - 1507, 65322, 65321, 65320, 65335, 65334, 65333, 65332, 65331, 42059, - 65329, 65328, 0, 9128, 118885, 42073, 41631, 64590, 0, 4371, 7196, 65318, - 2035, 65316, 4106, 65314, 65313, 42074, 0, 41228, 0, 119117, 41241, 7903, - 41239, 43533, 127099, 7189, 0, 0, 0, 12357, 42802, 0, 8487, 9131, 0, - 4615, 12695, 0, 0, 12175, 0, 64535, 0, 7809, 0, 0, 562, 12169, 6590, 0, - 66455, 64738, 3219, 0, 0, 0, 1037, 0, 2025, 0, 13098, 0, 10637, 4568, - 549, 1570, 0, 2835, 0, 10624, 194587, 11072, 0, 0, 0, 12606, 0, 2825, 0, - 10825, 8079, 2821, 41046, 0, 0, 0, 120593, 13071, 0, 452, 41049, 42840, - 43614, 2831, 0, 74596, 11465, 5212, 0, 64703, 119191, 42308, 7181, 0, - 41332, 0, 12333, 0, 1668, 0, 0, 0, 1187, 0, 42628, 0, 0, 0, 0, 3240, 0, - 12194, 0, 11591, 41065, 5323, 8166, 0, 0, 0, 74535, 1623, 65297, 0, 571, - 0, 4918, 0, 5288, 0, 8916, 65048, 1909, 8864, 0, 0, 10736, 0, 11571, - 7615, 0, 0, 4237, 0, 1035, 65815, 0, 7881, 701, 65936, 3489, 0, 0, 0, - 11403, 0, 0, 0, 3796, 0, 0, 3994, 11421, 0, 0, 0, 0, 0, 0, 64857, 0, - 2855, 0, 66308, 41621, 0, 0, 0, 10654, 0, 119226, 12164, 3246, 7906, 0, - 65847, 7182, 0, 13024, 194822, 119931, 0, 0, 0, 0, 1496, 747, 0, 942, - 2378, 43136, 0, 8466, 0, 9320, 8001, 1232, 8139, 11617, 0, 0, 11409, 0, - 0, 0, 66319, 0, 0, 11612, 0, 0, 2374, 0, 8475, 11609, 66313, 0, 0, 5286, - 119297, 0, 0, 64925, 0, 0, 0, 194583, 7705, 11942, 11305, 194581, 3309, - 0, 0, 0, 0, 11975, 0, 41653, 1280, 1241, 7168, 12096, 0, 0, 42565, 41651, - 0, 0, 0, 41650, 0, 66470, 0, 12914, 41491, 66010, 119552, 6078, 65100, 0, - 1475, 0, 0, 6084, 917546, 41064, 41062, 0, 0, 3256, 0, 42076, 0, 0, 0, - 8727, 0, 65875, 0, 0, 0, 10562, 74215, 67608, 0, 0, 3248, 74297, 3261, - 9015, 0, 0, 3635, 64337, 0, 0, 0, 7195, 0, 2007, 64431, 0, 0, 0, 0, 635, - 0, 0, 65613, 0, 0, 73997, 0, 0, 119218, 7984, 8600, 74434, 0, 4176, 0, - 2034, 0, 120805, 65891, 127038, 0, 318, 2038, 0, 0, 0, 3649, 13149, - 42145, 42798, 3634, 120291, 118927, 0, 120124, 7866, 0, 11402, 42146, - 120134, 74238, 120129, 2849, 127034, 0, 7938, 12960, 1761, 11812, 65379, - 74509, 0, 1159, 0, 0, 0, 0, 7178, 194632, 0, 41680, 0, 0, 11534, 1514, - 11668, 67891, 9313, 7015, 0, 67877, 0, 12989, 194560, 9368, 12848, 1624, - 43270, 0, 194563, 10818, 194562, 12649, 0, 0, 1194, 3242, 0, 9555, 8598, - 120299, 6169, 0, 1551, 2798, 65176, 120298, 42752, 119025, 0, 67875, - 120301, 3495, 66648, 0, 0, 0, 0, 4891, 0, 10641, 0, 73746, 0, 0, 0, - 73787, 0, 0, 7199, 64955, 0, 0, 0, 0, 0, 64952, 0, 193, 0, 0, 0, 0, 0, + 0, 8157, 9736, 64503, 65418, 0, 0, 74035, 0, 11913, 73874, 6696, 0, 8920, + 0, 0, 7962, 12211, 9837, 2051, 66227, 0, 4184, 0, 0, 10177, 73777, 1857, + 0, 4626, 8464, 8472, 0, 4629, 8499, 78321, 78322, 4624, 7818, 119173, 0, + 0, 7805, 0, 0, 6935, 0, 78325, 78326, 78323, 43327, 43989, 119046, 8492, + 8250, 8459, 0, 8497, 8496, 0, 0, 78336, 78339, 9543, 78335, 78332, 77832, + 65849, 77831, 0, 0, 12451, 0, 8684, 0, 6102, 0, 5298, 0, 5294, 0, 0, 0, + 195062, 9949, 119826, 43617, 119215, 0, 12073, 0, 0, 77863, 13108, 0, + 74397, 41468, 0, 0, 5292, 55272, 0, 1939, 5302, 3970, 0, 12455, 1793, 0, + 0, 0, 6643, 0, 65263, 0, 78330, 41293, 78328, 78329, 0, 13219, 9569, 0, + 74383, 0, 0, 0, 5500, 8813, 0, 0, 74566, 5322, 0, 78340, 43631, 5324, + 66443, 3784, 41614, 65269, 6230, 78349, 78345, 43324, 3360, 78344, 11523, + 0, 0, 9926, 7197, 0, 68429, 0, 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, 0, 6670, 77882, 0, 0, 43092, 43325, 0, 10168, 0, 9781, 194610, + 9190, 0, 9666, 8269, 65944, 74005, 13019, 11670, 0, 315, 12813, 0, 78432, + 78256, 78351, 78352, 0, 0, 0, 0, 1378, 9509, 0, 0, 74475, 3066, 0, 67847, + 0, 0, 0, 78365, 8787, 0, 194616, 41618, 194615, 78261, 194614, 0, 64652, + 0, 194612, 0, 78366, 42088, 0, 0, 7176, 0, 10137, 6121, 10995, 78259, + 74534, 8119, 64874, 917816, 0, 0, 0, 74525, 0, 0, 12930, 1394, 74514, 0, + 74515, 0, 118804, 2998, 9527, 120659, 65190, 12977, 42090, 119165, 0, + 119100, 41236, 0, 42005, 42003, 41237, 5848, 0, 0, 3670, 0, 194600, 0, 0, + 7890, 0, 11298, 43315, 0, 6229, 1593, 0, 0, 619, 4635, 65080, 0, 0, 4120, + 65337, 65336, 0, 11808, 119214, 74115, 9366, 42790, 42006, 0, 65327, + 65326, 65325, 10757, 1507, 42216, 65321, 65320, 65335, 65334, 65333, + 65332, 65331, 42059, 65329, 42689, 0, 9128, 118885, 42073, 6785, 64590, + 0, 4371, 7196, 65318, 2035, 65316, 4106, 65314, 65313, 42074, 0, 41228, + 0, 65609, 41241, 7903, 41239, 43533, 78459, 7189, 0, 0, 0, 12357, 42802, + 78450, 8487, 9131, 0, 4615, 12695, 0, 0, 12175, 0, 64535, 0, 7809, 0, 0, + 562, 12169, 6590, 69762, 66455, 64738, 3219, 68654, 0, 0, 1037, 0, 2025, + 0, 13098, 78442, 10637, 4568, 549, 1570, 0, 2835, 0, 10624, 43623, 11072, + 0, 0, 0, 12606, 78433, 2825, 0, 10825, 8079, 2821, 41046, 0, 0, 0, + 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, 0, 42628, 78575, 0, 0, 0, 3240, 0, 12194, 0, 11591, 41065, 5323, + 8166, 0, 0, 0, 74535, 1623, 65297, 0, 571, 0, 4918, 0, 5288, 127295, + 8916, 65048, 1909, 8864, 0, 0, 10736, 0, 11571, 7615, 0, 0, 4237, 0, + 1035, 65815, 0, 7881, 701, 65936, 3489, 0, 0, 120751, 11403, 0, 0, 0, + 3796, 6800, 0, 3994, 11421, 0, 0, 0, 0, 0, 0, 64857, 0, 2855, 0, 66308, + 41621, 68214, 0, 0, 10654, 0, 119226, 12164, 3246, 7906, 43972, 65847, + 7182, 0, 13024, 194822, 74270, 0, 0, 0, 0, 1496, 747, 0, 942, 2378, + 43136, 0, 8466, 0, 9320, 8001, 1232, 8139, 11617, 0, 0, 11409, 68373, + 6382, 0, 64634, 0, 0, 11612, 0, 67600, 2374, 0, 8475, 11609, 66313, 0, 0, + 5286, 119297, 0, 0, 64925, 0, 0, 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, 65100, 0, 1475, 0, 9938, 6084, 917546, 41064, 41062, + 0, 0, 3256, 0, 42076, 43252, 78823, 0, 8727, 0, 65875, 0, 0, 0, 10562, + 74215, 43065, 0, 0, 3248, 74297, 3261, 9015, 0, 0, 3635, 64337, 0, 0, 0, + 7195, 0, 2007, 64431, 0, 0, 0, 0, 635, 0, 0, 65613, 77909, 0, 73997, 0, + 0, 119218, 7984, 8600, 74434, 0, 4176, 0, 2034, 0, 120805, 65891, 127038, + 0, 318, 2038, 0, 78596, 0, 3649, 13149, 42145, 42798, 3634, 120291, + 118927, 67677, 120124, 7866, 0, 11402, 42146, 120134, 74238, 42664, 2849, + 127034, 0, 7938, 12960, 1761, 11812, 65379, 68386, 0, 1159, 0, 0, 0, 0, + 7178, 194632, 0, 41680, 0, 0, 11534, 1514, 11668, 67891, 9313, 7015, 0, + 67877, 0, 12989, 66474, 9368, 12848, 1624, 43270, 0, 194563, 10818, + 194562, 9953, 0, 78421, 1194, 3242, 9761, 9555, 8598, 120299, 6169, + 12871, 1551, 2798, 65176, 120298, 42752, 119025, 0, 67875, 120301, 3495, + 66648, 0, 0, 68364, 0, 4891, 0, 10641, 0, 73746, 0, 68352, 0, 73787, 0, + 194633, 7199, 64955, 0, 0, 0, 0, 0, 42685, 42679, 193, 0, 0, 0, 42667, 0, 5271, 0, 119661, 118882, 1362, 13297, 0, 0, 0, 0, 73789, 0, 6658, 4426, - 0, 0, 0, 119123, 7276, 42163, 5220, 0, 0, 0, 2416, 3310, 66030, 0, 379, - 0, 0, 0, 0, 3223, 65492, 1284, 0, 4549, 0, 0, 0, 0, 10807, 9558, 0, 0, - 8515, 8688, 12866, 0, 3294, 0, 0, 0, 0, 7564, 0, 43329, 0, 0, 73757, - 66456, 42359, 0, 2031, 0, 7202, 0, 12676, 66615, 0, 3215, 0, 7710, 1610, - 73801, 0, 0, 65682, 0, 0, 65924, 0, 228, 0, 1501, 0, 64395, 5179, 7200, - 6225, 0, 65794, 1725, 65533, 8196, 7476, 74399, 0, 0, 0, 8502, 5762, - 1967, 7483, 0, 0, 8104, 0, 7474, 0, 0, 0, 10414, 13001, 8141, 0, 42537, - 1557, 0, 0, 0, 0, 8631, 2545, 120672, 0, 0, 74190, 0, 0, 0, 42762, 0, 0, - 1650, 262, 1637, 0, 7901, 3238, 0, 41861, 0, 0, 65158, 10860, 0, 119134, - 7527, 0, 43319, 6419, 0, 45, 0, 0, 0, 0, 119810, 7194, 5291, 0, 0, 13129, - 0, 9084, 0, 8737, 0, 12881, 0, 12906, 9639, 7912, 2620, 0, 0, 0, 0, 179, - 65896, 0, 64756, 2853, 0, 118813, 0, 118996, 0, 2850, 8084, 0, 73850, - 2801, 119837, 42069, 119839, 74754, 119841, 42072, 119843, 119842, 74767, - 0, 0, 0, 0, 8245, 119313, 3158, 119853, 4389, 73813, 923, 119857, 119856, - 292, 13002, 119845, 119844, 3221, 1763, 119849, 4612, 119851, 119850, - 7253, 127110, 120618, 0, 10782, 3637, 12996, 43542, 0, 64578, 0, 3228, - 73869, 8783, 0, 119614, 2731, 0, 0, 118939, 4102, 7696, 73878, 0, 0, 0, - 43316, 4177, 11283, 9089, 0, 73996, 0, 64500, 68133, 0, 0, 1856, 0, 0, 0, - 0, 0, 0, 3208, 12975, 0, 0, 0, 0, 74072, 0, 0, 0, 0, 2033, 119008, 0, - 195026, 0, 7740, 0, 0, 0, 73964, 0, 0, 0, 65674, 0, 0, 41689, 0, 74006, - 64909, 6646, 11790, 74019, 0, 0, 0, 8561, 4573, 0, 5326, 0, 120605, 7230, - 8257, 0, 8778, 41688, 0, 65776, 0, 8314, 6459, 0, 7628, 65092, 73903, - 66721, 11342, 0, 0, 0, 0, 127001, 0, 11810, 13164, 10723, 967, 0, 0, - 11946, 0, 3257, 0, 12307, 1845, 0, 43526, 0, 0, 1886, 42342, 10089, 870, - 7648, 3499, 8609, 7652, 876, 871, 877, 0, 878, 42015, 879, 0, 4563, 0, 0, - 7591, 65887, 867, 9520, 872, 0, 868, 873, 7642, 0, 869, 874, 7644, 0, - 875, 790, 0, 0, 0, 0, 66182, 0, 5429, 0, 66180, 0, 66181, 0, 0, 0, 42067, - 0, 5433, 10657, 7911, 0, 1547, 66176, 42012, 0, 5425, 4977, 9999, 5317, - 5423, 4611, 0, 67637, 0, 9679, 74122, 0, 0, 0, 0, 4418, 66184, 4628, - 4245, 0, 0, 0, 1851, 0, 0, 11908, 0, 9360, 118897, 0, 42776, 66187, - 12837, 8829, 0, 0, 0, 0, 43318, 0, 8809, 119974, 0, 0, 120604, 0, 0, 0, - 0, 0, 0, 7427, 0, 4588, 0, 0, 74484, 0, 2433, 0, 119622, 3352, 74363, 0, - 0, 793, 74404, 0, 305, 567, 0, 842, 0, 8208, 0, 41695, 1647, 118877, 0, - 7837, 917625, 818, 5337, 917622, 917621, 41376, 119978, 917618, 120594, - 74086, 917615, 917614, 917613, 10973, 66359, 1372, 917609, 917608, 4969, - 1254, 917605, 917604, 917603, 917602, 65228, 0, 0, 0, 2840, 0, 119982, 0, - 0, 3245, 9068, 119069, 64725, 0, 0, 12991, 0, 2651, 0, 0, 917611, 0, 0, - 0, 0, 0, 0, 0, 43322, 0, 0, 0, 64372, 0, 3226, 655, 752, 7457, 7456, + 0, 0, 0, 119123, 7276, 42163, 5220, 0, 0, 0, 2416, 3310, 42703, 0, 379, + 0, 0, 0, 0, 3223, 65492, 1284, 194771, 4549, 0, 0, 0, 0, 10807, 9558, + 194613, 0, 8515, 8688, 12866, 0, 3294, 0, 8529, 0, 43385, 7564, 0, 43329, + 0, 0, 73757, 66456, 42359, 0, 2031, 0, 7202, 0, 12676, 42729, 0, 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, 0, 8502, 5762, 1967, 7483, 0, 0, 8104, 0, 7474, 0, 0, 0, 10414, 13001, + 8141, 0, 42537, 1557, 43594, 0, 6330, 6805, 8631, 2545, 120672, 0, 0, + 74190, 0, 0, 0, 42762, 0, 127017, 1650, 262, 1637, 0, 7901, 3238, 0, + 41861, 0, 0, 65158, 10860, 0, 43658, 7527, 0, 43319, 6419, 0, 45, 0, 0, + 0, 0, 119810, 7194, 5291, 0, 43666, 13129, 0, 9084, 0, 8737, 0, 12881, 0, + 12906, 9639, 7912, 2620, 0, 0, 0, 0, 179, 65896, 0, 64756, 2853, 0, + 118813, 0, 118996, 119009, 2850, 8084, 0, 73850, 2801, 119837, 42069, + 119839, 74754, 119841, 42072, 119843, 119842, 10398, 0, 0, 0, 0, 8245, + 68401, 3158, 119853, 4389, 43656, 923, 119857, 119856, 292, 13002, + 119845, 119844, 3221, 1763, 119849, 4612, 119851, 119850, 7253, 127110, + 68391, 0, 10782, 3637, 12996, 43542, 0, 64578, 0, 3228, 73869, 8783, 0, + 119614, 2731, 0, 0, 78585, 4102, 7696, 73878, 0, 0, 78586, 43316, 4177, + 11283, 9089, 0, 73996, 0, 64500, 43674, 0, 0, 1856, 0, 0, 6379, 0, 0, 0, + 3208, 12975, 0, 0, 0, 0, 74072, 55269, 0, 0, 0, 2033, 78577, 78576, + 195026, 55254, 7740, 0, 0, 0, 73964, 0, 0, 67612, 65674, 0, 0, 41689, 0, + 74006, 64909, 6646, 11790, 74019, 0, 0, 0, 8561, 4573, 0, 5326, 0, + 120605, 7230, 8257, 0, 8778, 41688, 0, 65776, 2071, 8314, 6459, 0, 7628, + 65092, 73903, 66721, 11342, 0, 0, 0, 0, 127001, 0, 11810, 13164, 10723, + 967, 0, 0, 11946, 0, 3257, 0, 12307, 1845, 0, 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, 0, 868, 873, 7642, 0, + 869, 874, 7644, 0, 875, 790, 0, 0, 0, 0, 66182, 0, 5429, 0, 66180, 0, + 66181, 68452, 0, 0, 42067, 0, 5433, 10657, 7911, 194622, 1547, 66176, + 42012, 120576, 5425, 4977, 9999, 5317, 5423, 4611, 0, 67637, 0, 9679, + 74122, 0, 0, 0, 0, 4418, 66184, 4628, 4245, 119648, 0, 0, 1851, 0, 0, + 11908, 0, 9360, 118897, 0, 42776, 66187, 12837, 8829, 7711, 0, 0, 119973, + 43318, 0, 8809, 119974, 0, 0, 120604, 0, 0, 0, 0, 0, 0, 7427, 0, 4588, + 43680, 0, 74484, 0, 2433, 0, 119622, 3352, 74363, 0, 0, 793, 74404, 0, + 305, 567, 67662, 842, 0, 8208, 0, 41695, 1647, 118877, 0, 7837, 917625, + 818, 5337, 917622, 917621, 41376, 119978, 917618, 120594, 74086, 917615, + 917614, 917613, 10973, 66359, 1372, 917609, 917608, 4969, 1254, 917605, + 917604, 917603, 917602, 65228, 78221, 0, 0, 2840, 0, 119982, 0, 0, 3245, + 9068, 68194, 64725, 0, 0, 12991, 0, 2651, 0, 0, 917611, 127026, 0, 0, 0, + 43648, 120812, 0, 43322, 0, 0, 0, 64372, 0, 3226, 655, 752, 7457, 7456, 7452, 3285, 0, 0, 119988, 65610, 0, 0, 0, 671, 250, 7434, 618, 668, 610, 42800, 7431, 1152, 42801, 640, 120666, 7448, 7439, 628, 3905, 73810, 0, - 0, 64749, 67850, 0, 0, 0, 0, 194873, 0, 0, 65945, 0, 0, 119590, 0, 0, 0, - 987, 6927, 11572, 42261, 11464, 3365, 0, 0, 0, 0, 0, 0, 0, 0, 11334, - 43326, 12609, 11519, 0, 5530, 5210, 0, 4627, 0, 5208, 0, 0, 10332, 5218, - 7976, 9156, 0, 3244, 5529, 0, 73894, 0, 5432, 64965, 5527, 74033, 10516, - 7790, 5528, 0, 42140, 120281, 0, 0, 43545, 120282, 0, 4000, 7429, 7428, - 665, 7424, 3206, 120279, 7884, 0, 0, 0, 0, 211, 2509, 0, 120573, 0, 3220, - 0, 0, 10690, 8951, 5214, 42474, 8118, 0, 7048, 4590, 0, 5852, 0, 0, 0, - 1708, 0, 0, 2623, 0, 0, 0, 0, 4698, 66509, 1066, 0, 4701, 0, 120285, - 74225, 119114, 8267, 0, 0, 0, 7516, 0, 2625, 0, 8034, 74309, 0, 3631, - 10955, 7850, 120293, 8416, 0, 0, 0, 0, 12660, 0, 0, 0, 74850, 41069, 0, - 0, 12099, 4310, 10032, 6252, 713, 7990, 0, 3990, 0, 0, 66368, 5017, - 64956, 7071, 0, 0, 1030, 118800, 0, 9513, 41059, 9357, 0, 1773, 0, - 120350, 0, 0, 7745, 9844, 0, 64650, 94, 1880, 74766, 0, 8908, 0, 0, - 65913, 0, 10752, 13003, 0, 0, 41307, 8732, 120338, 0, 1757, 6964, 4696, - 0, 0, 120806, 10029, 3641, 5419, 0, 0, 0, 0, 120344, 0, 0, 8610, 65230, - 7592, 856, 74299, 936, 13289, 0, 43171, 1459, 0, 65243, 0, 19953, 0, - 1504, 0, 0, 0, 74206, 7529, 0, 0, 0, 120782, 4113, 0, 2372, 336, 0, 7509, - 12152, 0, 682, 66458, 41505, 0, 64743, 10593, 1703, 0, 0, 8033, 0, 0, - 9810, 0, 0, 12970, 0, 42351, 10109, 0, 0, 0, 0, 119247, 0, 0, 74291, - 1965, 7069, 43312, 0, 73887, 0, 0, 64370, 6314, 41714, 8501, 0, 0, 74239, - 41317, 0, 5417, 0, 0, 0, 9353, 0, 41315, 917616, 0, 0, 6569, 0, 0, 0, - 119236, 634, 0, 0, 0, 917610, 4165, 8746, 0, 9654, 12856, 6924, 0, 7066, - 0, 0, 0, 41037, 0, 7786, 917607, 41039, 0, 0, 680, 6274, 0, 1181, 7056, - 3174, 0, 0, 0, 65665, 0, 0, 6920, 0, 0, 0, 0, 0, 64644, 126981, 0, 0, - 41028, 0, 6231, 2613, 65302, 40989, 0, 0, 0, 42760, 0, 0, 0, 40987, 4667, - 0, 0, 8828, 0, 0, 1246, 4746, 0, 0, 11021, 4749, 0, 0, 921, 4744, 0, - 12702, 242, 0, 1566, 8217, 0, 64653, 0, 0, 74036, 74505, 43274, 5313, - 951, 0, 0, 0, 7604, 0, 4009, 0, 0, 120562, 0, 0, 64860, 119138, 119902, - 0, 0, 4048, 0, 0, 120596, 1646, 0, 64534, 73995, 0, 0, 119890, 2579, - 119905, 3177, 11357, 9099, 4107, 3441, 119894, 2975, 74442, 9822, 0, 0, - 10084, 73943, 0, 0, 917562, 0, 3399, 9851, 0, 11909, 9059, 0, 7687, 0, - 8854, 0, 0, 0, 0, 0, 0, 1777, 9151, 1137, 0, 749, 42366, 0, 5385, 0, 0, - 0, 0, 5989, 0, 0, 0, 0, 41685, 0, 0, 9769, 41684, 0, 519, 0, 11740, 5766, - 0, 0, 2600, 8848, 120138, 41297, 0, 3666, 74473, 41300, 74468, 65160, 0, - 74542, 0, 74479, 0, 6558, 0, 0, 0, 120750, 252, 0, 41302, 0, 0, 0, 0, 0, - 11729, 8719, 9060, 0, 120139, 10761, 0, 0, 0, 118792, 11734, 0, 11730, 0, - 9593, 119188, 2403, 64808, 0, 0, 11728, 65894, 0, 0, 7764, 0, 0, 120825, - 0, 0, 4282, 8298, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8456, 0, 74783, 65670, 0, 0, - 0, 7774, 10607, 9792, 0, 0, 0, 0, 120764, 0, 10019, 74762, 0, 3458, 4365, - 0, 0, 3647, 0, 2602, 0, 0, 194707, 41135, 0, 0, 0, 64631, 172, 4971, - 41219, 41137, 1889, 7238, 6545, 0, 0, 7597, 10528, 0, 0, 3732, 73910, 0, - 5344, 0, 0, 0, 9062, 119252, 0, 0, 0, 64479, 9232, 0, 0, 0, 0, 10900, - 41531, 1263, 3720, 12048, 0, 64292, 41524, 7227, 119635, 6099, 41534, 0, - 0, 0, 299, 0, 8525, 0, 3524, 0, 8831, 0, 0, 3075, 0, 0, 0, 66362, 0, - 74758, 0, 0, 5845, 0, 0, 0, 2581, 8200, 65114, 74393, 0, 43283, 5551, 0, - 127085, 0, 0, 118855, 0, 0, 8680, 7204, 0, 2588, 2914, 7011, 0, 0, 2471, - 0, 2883, 2749, 119563, 73774, 10913, 0, 0, 8666, 675, 42493, 0, 0, 0, - 6219, 0, 0, 41232, 10928, 0, 41153, 41229, 118967, 0, 3738, 0, 0, 12711, - 3181, 66212, 74289, 0, 42857, 8262, 0, 0, 0, 0, 42347, 12092, 9615, 7234, - 74047, 0, 0, 64674, 0, 0, 73846, 0, 12722, 0, 922, 74426, 74507, 0, 0, - 3218, 120471, 74290, 120469, 64562, 120475, 8569, 11404, 11932, 73728, - 3214, 120461, 120468, 12128, 3207, 65486, 0, 1901, 0, 0, 120460, 7425, - 3205, 0, 0, 0, 0, 0, 0, 65459, 2606, 0, 73897, 0, 11496, 1173, 0, 41272, - 0, 0, 0, 0, 120737, 0, 0, 0, 378, 2610, 0, 65079, 0, 65695, 0, 37, 7068, - 0, 120480, 120479, 3209, 120477, 0, 10638, 9768, 120481, 0, 0, 0, 0, 0, - 0, 65510, 0, 0, 5233, 0, 64792, 0, 0, 0, 0, 7060, 9847, 0, 1685, 595, 0, - 73971, 1292, 8940, 0, 11088, 0, 10004, 126997, 0, 6541, 0, 0, 0, 3243, - 9014, 5606, 0, 538, 64620, 5602, 8467, 74391, 6547, 0, 8203, 0, 0, 8458, - 65211, 8495, 0, 0, 917552, 779, 0, 64367, 2465, 0, 8193, 0, 9730, 9280, - 0, 7065, 74155, 4346, 0, 73798, 504, 0, 120715, 8982, 0, 0, 0, 782, 0, - 10883, 0, 917876, 732, 3737, 0, 1548, 0, 0, 1832, 5604, 5735, 41141, 0, - 4376, 0, 41142, 3745, 0, 0, 42888, 65712, 0, 3869, 11937, 5725, 0, 1783, - 0, 5728, 0, 0, 0, 11918, 66567, 5724, 0, 5727, 0, 0, 0, 764, 0, 0, 43531, - 0, 9033, 0, 42532, 6223, 11042, 0, 11423, 0, 0, 0, 0, 0, 0, 6559, 64557, - 0, 0, 120648, 43019, 0, 10238, 0, 0, 0, 120675, 0, 1478, 9783, 0, 2607, + 0, 64749, 67850, 2107, 0, 0, 4605, 194873, 0, 43372, 65945, 0, 0, 119590, + 0, 0, 0, 987, 6927, 11572, 42261, 11464, 3365, 9971, 0, 0, 0, 0, 0, 0, 0, + 11334, 43326, 12609, 11519, 11503, 5530, 5210, 0, 4627, 0, 5208, 0, 0, + 10332, 5218, 7976, 9156, 0, 3244, 5529, 0, 73894, 0, 5432, 64965, 5527, + 74033, 10516, 7790, 5528, 0, 42140, 120281, 0, 0, 43545, 9887, 0, 4000, + 7429, 7428, 665, 7424, 3206, 120278, 7884, 0, 0, 0, 0, 211, 2509, 0, + 120573, 68672, 3220, 42235, 0, 10690, 8951, 5214, 42474, 8118, 0, 7048, + 4590, 127258, 5852, 0, 0, 127259, 1708, 0, 0, 2623, 11943, 0, 69226, 0, + 4698, 66509, 1066, 119921, 4701, 0, 120285, 74225, 119114, 8267, 0, 0, 0, + 7516, 0, 2625, 0, 8034, 74309, 0, 3631, 10955, 7850, 120293, 8416, 0, 0, + 0, 43384, 12660, 0, 0, 0, 74850, 41069, 0, 0, 12099, 4310, 10032, 6252, + 713, 7990, 0, 3990, 0, 0, 66368, 5017, 64956, 7071, 0, 119144, 1030, + 118800, 0, 9513, 41059, 9357, 0, 1773, 0, 120350, 0, 6339, 7745, 9844, 0, + 64650, 94, 1880, 74766, 0, 8908, 0, 0, 65913, 78470, 10752, 13003, 0, 0, + 41307, 8732, 120338, 0, 1757, 6964, 4696, 0, 0, 64785, 7394, 3641, 5419, + 0, 0, 0, 0, 120344, 43988, 0, 8610, 43062, 7592, 856, 74299, 936, 13289, + 127521, 43171, 1459, 0, 65243, 78638, 19953, 0, 1504, 0, 0, 12913, 74206, + 7529, 0, 0, 0, 120782, 4113, 0, 2372, 336, 0, 7509, 12152, 0, 682, 66458, + 41505, 0, 64743, 10593, 1703, 0, 0, 8033, 0, 0, 9810, 127269, 0, 12970, + 0, 42351, 10109, 0, 0, 194693, 0, 119247, 0, 0, 74291, 1965, 7069, 43312, + 0, 73887, 0, 2087, 64370, 6314, 41714, 8501, 0, 0, 74239, 41317, 0, 2091, + 0, 2090, 0, 9353, 77887, 2077, 77886, 0, 10498, 2083, 77888, 0, 0, + 119236, 634, 0, 0, 0, 69779, 4165, 8746, 0, 9654, 12856, 6924, 0, 7066, + 0, 0, 0, 41037, 42692, 7786, 12959, 41039, 0, 0, 680, 6274, 0, 1181, + 7056, 3174, 0, 0, 0, 65665, 0, 0, 6920, 0, 0, 0, 118965, 0, 64644, + 126981, 0, 0, 41028, 0, 6231, 2613, 65302, 40989, 0, 194696, 0, 42760, 0, + 0, 0, 40987, 4667, 0, 0, 8828, 0, 0, 1246, 4746, 0, 0, 11021, 4749, 0, 0, + 921, 4744, 0, 12702, 242, 0, 1566, 8217, 0, 64653, 78386, 0, 74036, + 74505, 43274, 5313, 951, 0, 0, 0, 7604, 0, 4009, 0, 0, 120562, 0, 0, + 64860, 119138, 119887, 0, 194702, 4048, 0, 0, 120596, 1646, 77890, 64534, + 73995, 0, 0, 119890, 2579, 119905, 3177, 11357, 9099, 4107, 3441, 119894, + 2975, 74442, 9822, 0, 55220, 10084, 73943, 118840, 0, 917562, 0, 3399, + 9851, 0, 11909, 9059, 0, 7687, 0, 6789, 0, 0, 0, 0, 0, 0, 1777, 9151, + 1137, 69767, 749, 42366, 0, 5385, 0, 0, 0, 0, 5989, 0, 0, 0, 0, 41685, + 69223, 0, 9769, 41684, 0, 519, 0, 11740, 5766, 0, 0, 2600, 8848, 120138, + 41297, 0, 3666, 74473, 41300, 74468, 65160, 0, 74542, 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, 0, 11730, 0, 9593, 5757, + 2403, 64808, 55275, 0, 11728, 65894, 0, 0, 7764, 0, 11094, 120825, 0, 0, + 4282, 8298, 0, 0, 0, 0, 0, 0, 0, 127509, 63854, 8456, 0, 74783, 65670, 0, + 78250, 0, 7774, 10607, 9792, 0, 0, 0, 0, 120764, 0, 10019, 74762, 0, + 3458, 4365, 0, 0, 3647, 0, 2602, 0, 0, 194707, 41135, 0, 0, 0, 64631, + 172, 4971, 41219, 41137, 1889, 7238, 6545, 0, 0, 7597, 10528, 0, 0, 3732, + 73910, 194588, 5344, 0, 43366, 43363, 9062, 119252, 0, 0, 0, 64479, 9232, + 0, 0, 0, 194712, 10900, 41531, 1263, 3720, 12048, 0, 64292, 41524, 7227, + 119635, 6099, 41534, 0, 0, 0, 299, 0, 8525, 0, 3524, 917565, 8831, 0, 0, + 3075, 67867, 0, 0, 66362, 0, 74758, 0, 0, 5845, 0, 0, 0, 2581, 8200, + 65114, 68460, 0, 43283, 5551, 0, 120735, 0, 6340, 118855, 0, 78134, 8680, + 7204, 0, 2588, 2914, 7011, 55281, 0, 2471, 0, 2883, 2749, 119563, 73774, + 10913, 0, 0, 8666, 675, 42493, 0, 43571, 0, 6219, 0, 9980, 41232, 10928, + 0, 41153, 41229, 118967, 0, 3738, 0, 0, 12711, 3181, 66212, 74289, 68472, + 42857, 8262, 0, 0, 0, 0, 42347, 12092, 9615, 7234, 74047, 0, 0, 64674, 0, + 0, 73846, 0, 12722, 0, 922, 43983, 74507, 0, 74461, 3218, 120471, 74290, + 120469, 64562, 120475, 8569, 11404, 11932, 73728, 3214, 120461, 120468, + 12128, 3207, 65486, 78729, 1901, 78727, 0, 120460, 7425, 3205, 0, 78737, + 78736, 78735, 43383, 78733, 65459, 2606, 78730, 73897, 0, 11496, 1173, 0, + 41272, 0, 0, 0, 0, 120737, 0, 0, 0, 378, 2610, 0, 65079, 0, 65695, 0, 37, + 7068, 0, 120480, 120479, 3209, 120477, 0, 10638, 9768, 120481, 0, 0, 0, + 0, 0, 0, 65510, 0, 0, 5233, 0, 64792, 0, 0, 0, 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, 0, + 8203, 78488, 0, 8458, 65211, 8495, 119904, 0, 917552, 779, 78314, 64367, + 2465, 0, 8193, 55279, 9730, 9280, 0, 7065, 74155, 4346, 0, 73798, 504, 0, + 120715, 8982, 0, 0, 0, 782, 0, 10883, 0, 194852, 732, 3737, 127253, 1548, + 68650, 0, 1832, 5604, 5735, 41141, 119020, 4376, 0, 11787, 3745, 0, 0, + 42888, 65712, 0, 3869, 11937, 5725, 0, 1783, 68648, 5728, 0, 0, 0, 11918, + 66567, 5724, 0, 5727, 0, 0, 0, 764, 0, 0, 43531, 0, 9033, 0, 42532, 6223, + 11042, 120749, 11423, 0, 0, 0, 43465, 0, 0, 6559, 64557, 0, 0, 120648, + 43019, 43477, 10238, 0, 0, 43377, 120675, 0, 1478, 9783, 11825, 2607, 64740, 0, 7739, 74543, 0, 0, 0, 6132, 0, 63765, 0, 0, 41144, 0, 0, 43537, - 0, 10093, 4369, 917791, 0, 0, 8820, 3947, 0, 0, 11515, 526, 0, 41295, - 194603, 917785, 0, 0, 7688, 917786, 7686, 8288, 11815, 0, 0, 0, 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, 7052, 0, 0, 12990, 1160, 42084, 119650, 41217, - 119660, 10018, 360, 0, 0, 68176, 5863, 3137, 0, 4147, 0, 41216, 7844, - 2616, 119190, 0, 65234, 0, 13076, 3135, 0, 0, 119139, 3142, 194948, 0, - 10819, 119580, 10183, 0, 2608, 1470, 73967, 0, 6227, 0, 0, 74775, 0, - 6163, 0, 0, 0, 0, 0, 8603, 0, 119866, 3306, 10876, 0, 119573, 0, 5834, 0, - 6222, 0, 0, 12086, 0, 1600, 64309, 64939, 0, 64783, 0, 11310, 0, 8882, 0, - 0, 2570, 7021, 0, 0, 43110, 0, 1234, 6540, 6974, 0, 0, 0, 5002, 0, 41286, - 0, 127019, 0, 43585, 0, 6551, 0, 0, 0, 41289, 0, 0, 0, 8977, 602, 120814, - 0, 0, 0, 0, 0, 41279, 0, 0, 0, 0, 43615, 0, 0, 0, 0, 12727, 0, 0, 0, - 9475, 0, 65105, 0, 9633, 10886, 43592, 7831, 0, 0, 0, 73915, 8076, 43048, - 8290, 8291, 43051, 0, 0, 2596, 43584, 0, 13113, 0, 0, 2393, 7058, 9087, - 74067, 0, 41574, 0, 0, 74058, 42035, 0, 0, 0, 0, 9854, 0, 64696, 0, 0, 0, - 74165, 0, 1720, 0, 0, 0, 6529, 7063, 0, 3751, 9120, 0, 0, 1798, 709, 0, - 1354, 1876, 13152, 6557, 12430, 8137, 0, 0, 0, 0, 245, 0, 11456, 41233, - 7070, 0, 0, 6136, 0, 65677, 8682, 41235, 0, 42045, 9804, 0, 432, 3595, 0, - 65437, 0, 74455, 42399, 0, 0, 0, 0, 119658, 0, 0, 0, 0, 8797, 0, 9052, - 64888, 0, 2356, 95, 74784, 10580, 0, 42286, 0, 64640, 0, 119104, 0, 0, 0, - 10063, 12652, 12199, 127030, 0, 2566, 11971, 0, 0, 1065, 0, 0, 0, 2576, - 0, 0, 0, 43604, 0, 0, 74082, 514, 74502, 0, 2921, 43215, 64493, 5772, - 12968, 0, 0, 74580, 917565, 2580, 0, 41341, 41223, 6564, 1463, 41342, 0, - 5293, 0, 0, 3733, 11346, 0, 12054, 0, 74098, 42827, 0, 13091, 0, 0, 0, - 917915, 0, 127026, 0, 74821, 0, 0, 119042, 0, 0, 13090, 66643, 0, 1270, - 1132, 42360, 0, 74096, 66655, 42569, 0, 0, 64761, 0, 41021, 8510, 42432, - 0, 0, 0, 0, 64496, 74109, 0, 9915, 0, 0, 7061, 41336, 3854, 0, 13141, - 917564, 0, 42319, 13082, 0, 7067, 0, 0, 0, 0, 0, 0, 0, 9029, 43543, 0, - 2353, 6308, 0, 74792, 2611, 119186, 0, 0, 0, 0, 0, 66627, 0, 4484, 8509, - 118976, 0, 65233, 0, 41224, 41017, 0, 3747, 10522, 0, 0, 1691, 41226, 0, - 12107, 0, 10905, 65010, 0, 697, 66018, 9284, 4244, 0, 0, 0, 13121, 0, 0, - 12010, 0, 0, 0, 0, 0, 0, 65816, 68111, 0, 0, 65668, 0, 0, 118784, 66365, - 0, 0, 12648, 0, 0, 0, 5785, 41309, 9764, 41316, 65877, 0, 13230, 41299, - 0, 0, 0, 0, 0, 0, 0, 13122, 0, 191, 74119, 0, 8000, 64411, 120652, 42889, - 64850, 41072, 41578, 0, 41577, 0, 10002, 0, 6533, 73802, 41570, 0, 683, - 396, 41580, 68146, 0, 12901, 0, 0, 343, 0, 0, 41360, 0, 0, 4743, 0, 0, - 74040, 74108, 8743, 1724, 1433, 119324, 0, 3739, 6263, 0, 0, 3964, 6592, - 0, 0, 66040, 0, 42568, 0, 0, 1778, 3956, 0, 42070, 6563, 43075, 9018, 0, - 0, 12067, 41312, 0, 5547, 0, 0, 0, 8175, 0, 284, 8108, 934, 0, 74001, - 173, 66460, 7174, 0, 0, 1750, 0, 4394, 0, 1807, 0, 0, 0, 5889, 0, 7180, - 0, 119145, 0, 0, 42471, 6982, 1721, 119144, 7891, 42243, 42160, 2583, - 4512, 0, 0, 0, 0, 0, 3855, 0, 0, 0, 0, 74295, 0, 0, 119140, 3975, 0, - 74087, 0, 12672, 3798, 2703, 0, 0, 0, 9774, 1275, 0, 0, 41095, 3962, 0, - 7873, 41101, 3954, 6457, 4513, 0, 0, 73994, 73992, 1468, 0, 0, 41851, 0, - 41846, 0, 0, 7633, 41849, 0, 4320, 3224, 0, 0, 0, 42531, 0, 1510, 0, - 8256, 0, 11393, 0, 8879, 0, 0, 8770, 0, 0, 127120, 1910, 8671, 0, 4283, - 0, 127117, 0, 0, 2654, 7893, 0, 0, 0, 0, 65106, 42761, 12857, 4581, 8411, - 119029, 127121, 0, 0, 0, 0, 0, 0, 1733, 4392, 2568, 10786, 0, 0, 8184, - 41486, 0, 0, 0, 0, 0, 0, 7185, 7965, 0, 0, 0, 0, 41350, 9129, 0, 0, 0, 0, - 0, 0, 10481, 0, 0, 7171, 0, 340, 0, 0, 0, 0, 0, 0, 0, 917620, 0, 0, 0, 0, - 0, 65203, 11392, 0, 0, 0, 3210, 0, 0, 0, 0, 0, 0, 917619, 0, 0, 10043, 0, - 1186, 41571, 6999, 617, 9464, 0, 3675, 5207, 65062, 5213, 0, 2617, 41348, - 41568, 0, 3253, 120535, 0, 8630, 0, 0, 5596, 5545, 7288, 2586, 64887, 0, - 5217, 0, 0, 0, 0, 64293, 68098, 2635, 0, 0, 0, 0, 0, 7835, 0, 0, 194988, - 0, 64558, 0, 0, 0, 0, 0, 0, 5784, 0, 0, 0, 0, 4011, 0, 68101, 0, 7864, - 4254, 118975, 0, 5600, 3903, 127083, 10447, 5598, 1207, 120521, 0, 3501, - 42582, 43600, 0, 0, 1124, 5597, 0, 0, 9321, 0, 0, 0, 0, 1719, 120576, 0, - 9671, 1125, 4399, 0, 0, 0, 7631, 5488, 65223, 0, 0, 5491, 0, 8937, 43044, - 2604, 74187, 5490, 43046, 5489, 7212, 11768, 43043, 6300, 0, 194789, 0, - 4390, 454, 41397, 0, 9875, 7593, 194792, 0, 118913, 7207, 0, 65901, 2394, - 2575, 0, 3746, 11016, 65752, 0, 0, 917944, 0, 11989, 0, 0, 0, 0, 0, 8249, - 0, 0, 0, 6640, 74806, 2598, 513, 0, 6586, 8656, 0, 0, 65008, 0, 194784, - 0, 194795, 0, 0, 194987, 0, 0, 0, 194986, 12647, 0, 194796, 0, 1036, 0, - 0, 1723, 0, 0, 0, 41579, 2444, 0, 10705, 73876, 0, 74486, 0, 740, 194985, - 0, 194984, 0, 4238, 11071, 9459, 917943, 0, 0, 0, 8121, 10438, 74487, - 42574, 13285, 195001, 11907, 0, 5690, 194999, 0, 0, 43181, 13095, 0, 0, - 64498, 0, 9506, 6978, 194993, 0, 0, 0, 194992, 0, 0, 1122, 317, 0, 0, 0, - 0, 1920, 0, 10173, 827, 0, 0, 0, 120126, 5223, 1304, 0, 119564, 5226, - 12602, 0, 0, 9329, 7758, 9239, 41173, 5224, 5487, 1222, 5692, 41725, 0, - 9674, 5695, 41711, 64627, 19909, 0, 74604, 5691, 287, 866, 233, 0, 0, - 42816, 0, 65140, 74797, 0, 8830, 6568, 42300, 10524, 41175, 0, 0, 0, - 5296, 0, 42492, 0, 0, 3302, 0, 0, 6516, 6515, 6514, 6513, 6512, 0, 7856, - 8690, 0, 0, 12122, 119628, 194813, 0, 1785, 0, 120635, 65153, 194810, - 5138, 0, 0, 0, 0, 4540, 41181, 0, 6200, 0, 5134, 0, 322, 4643, 5132, 0, - 0, 0, 5143, 0, 8790, 0, 0, 194802, 0, 8869, 120601, 0, 42060, 0, 0, 0, 0, - 10270, 10286, 10318, 10382, 43529, 66477, 0, 0, 74170, 0, 3234, 0, 0, - 74376, 43139, 118924, 127084, 120627, 8767, 0, 74489, 41281, 120746, - 5201, 0, 6215, 12714, 6214, 13101, 0, 0, 65268, 0, 0, 0, 11027, 0, 10059, - 10511, 42075, 9767, 789, 1749, 0, 127071, 0, 320, 0, 8647, 0, 3049, 0, - 6471, 42071, 43156, 0, 0, 0, 0, 4960, 5549, 0, 0, 8485, 4671, 5418, 0, - 3351, 0, 0, 10610, 5414, 3064, 6212, 4286, 5421, 0, 9554, 0, 0, 0, 6653, - 0, 0, 64510, 6213, 12885, 0, 119045, 64720, 0, 120759, 73741, 12603, 0, - 11430, 4566, 7843, 9317, 3801, 10342, 10406, 0, 119259, 42576, 0, 5200, - 0, 0, 0, 9183, 0, 74458, 73825, 395, 5482, 5198, 8786, 10390, 74202, - 5196, 43224, 6113, 42009, 5205, 0, 43307, 0, 118973, 0, 12134, 0, 0, - 118843, 9126, 435, 0, 12014, 12893, 8093, 9079, 3203, 192, 65109, 3385, - 0, 64430, 5383, 10294, 10326, 0, 5738, 0, 3336, 0, 5361, 3623, 41159, 0, - 68112, 7872, 8581, 0, 1260, 3149, 5359, 0, 0, 7914, 5357, 0, 0, 2624, - 5364, 0, 11431, 0, 9101, 11058, 0, 0, 0, 42271, 0, 65737, 120793, 0, 0, - 0, 10619, 0, 0, 0, 0, 0, 0, 0, 0, 9319, 7097, 119055, 0, 3232, 73824, - 74581, 0, 0, 0, 41889, 0, 0, 1161, 41895, 74103, 9701, 8622, 0, 0, 73819, - 120588, 5012, 119049, 41362, 0, 917762, 11921, 0, 11769, 0, 0, 41364, 0, - 74228, 41352, 41361, 0, 41366, 0, 3356, 0, 917, 0, 119915, 119923, 8199, - 119912, 119917, 677, 119916, 0, 119932, 0, 0, 0, 0, 3349, 74125, 7022, - 8927, 4739, 0, 5802, 0, 8615, 0, 0, 491, 0, 0, 0, 65837, 0, 8426, 11092, - 9891, 0, 42497, 0, 7586, 42305, 10852, 0, 0, 0, 0, 9095, 7741, 12684, - 41885, 1046, 0, 0, 0, 5815, 5171, 65539, 0, 6932, 0, 42394, 41878, 74849, - 917951, 0, 5169, 11935, 0, 0, 3175, 120822, 1537, 120804, 5176, 8905, - 4136, 4871, 0, 0, 9833, 0, 0, 1128, 65920, 0, 9711, 7057, 9408, 9409, - 9410, 9411, 3662, 9413, 3378, 9415, 9416, 9417, 9418, 8909, 9420, 9421, - 5897, 9423, 5165, 5126, 41385, 0, 41389, 917938, 8955, 3374, 9400, 9401, - 9402, 9403, 9404, 3507, 9406, 7629, 0, 19925, 0, 73832, 183, 0, 2631, 0, - 10627, 41130, 0, 3996, 0, 0, 0, 0, 119307, 0, 6580, 4332, 64825, 66329, - 10726, 66686, 41125, 5899, 41365, 917918, 12085, 0, 574, 917922, 0, - 73828, 5448, 41058, 5446, 73900, 41322, 74768, 5442, 4190, 0, 0, 5451, 0, - 3616, 0, 0, 0, 7708, 0, 10859, 65867, 10345, 10409, 4191, 0, 120719, - 73800, 42181, 0, 0, 4447, 0, 120708, 11788, 65587, 0, 10415, 74102, 0, - 205, 0, 10351, 119076, 0, 9862, 6588, 0, 64697, 0, 41355, 5505, 119154, - 5503, 8021, 0, 119150, 9819, 41357, 8011, 42885, 5507, 12044, 0, 0, - 10026, 5472, 65108, 1191, 13106, 5470, 10329, 5476, 8991, 66322, 0, 0, - 42874, 8550, 42876, 5592, 2919, 0, 2675, 5595, 0, 0, 4367, 0, 0, 5478, - 5904, 5594, 0, 74150, 7291, 5590, 0, 13067, 118909, 0, 0, 9731, 0, 64633, - 194565, 0, 0, 0, 0, 0, 10750, 0, 0, 74545, 0, 0, 12887, 10551, 194564, 0, - 0, 0, 120570, 0, 5199, 0, 1120, 42387, 0, 1444, 9486, 7554, 65839, 0, 0, - 1442, 0, 5894, 0, 0, 0, 0, 74313, 0, 13162, 0, 3334, 0, 118803, 0, 66022, - 0, 0, 1651, 0, 8861, 0, 0, 1142, 0, 8271, 0, 0, 0, 12903, 0, 4002, 0, - 10442, 10676, 3344, 0, 0, 12920, 0, 0, 0, 0, 1277, 0, 7871, 0, 0, 0, 0, - 119015, 120360, 0, 11784, 0, 0, 4700, 66366, 0, 120359, 11012, 0, 0, - 120358, 0, 4973, 8784, 0, 74804, 0, 0, 118981, 42440, 0, 43118, 0, 42364, - 0, 11543, 0, 0, 10346, 10410, 0, 9243, 2464, 0, 6108, 3372, 0, 6247, - 43117, 74526, 0, 74166, 0, 120355, 0, 0, 0, 0, 0, 0, 0, 74217, 3354, 0, - 4192, 9289, 118999, 41191, 3876, 0, 0, 120660, 0, 0, 0, 0, 0, 0, 11603, - 0, 0, 6589, 0, 194679, 0, 0, 0, 0, 0, 42572, 0, 10630, 74827, 1963, - 118889, 0, 11654, 0, 7550, 10686, 5903, 0, 0, 41329, 9662, 917937, 64698, - 3366, 10399, 0, 0, 11013, 0, 917933, 0, 0, 0, 6925, 0, 0, 917929, 0, - 11568, 0, 917931, 64579, 917930, 7852, 0, 0, 12292, 6312, 0, 64672, - 65296, 0, 118957, 0, 416, 12296, 74753, 73834, 0, 11050, 10984, 0, 0, 0, - 0, 0, 0, 9532, 66355, 0, 0, 917925, 64343, 195032, 0, 195031, 0, 0, - 195057, 11445, 0, 195028, 0, 195027, 0, 1021, 0, 9507, 10210, 74544, - 8023, 1200, 12243, 195062, 5282, 195061, 12540, 11545, 0, 120493, 3343, - 4424, 11047, 1885, 43268, 3896, 0, 66497, 2947, 392, 7894, 4391, 68139, - 0, 13059, 74816, 0, 3381, 7942, 0, 0, 0, 0, 0, 3913, 0, 0, 0, 7044, 1265, - 0, 6309, 7045, 7175, 7047, 0, 11791, 0, 0, 8221, 0, 41864, 0, 0, 0, 0, - 167, 0, 917584, 0, 74211, 41897, 0, 0, 0, 0, 0, 2493, 0, 118811, 0, 0, - 64354, 0, 8777, 0, 406, 8884, 2385, 0, 0, 0, 0, 43030, 42027, 12114, 0, - 0, 64936, 0, 0, 120629, 10561, 0, 8365, 0, 0, 65841, 120787, 11601, 0, 0, - 0, 917575, 7834, 74159, 0, 0, 10298, 6624, 4908, 917596, 1639, 0, 0, - 74157, 0, 0, 0, 0, 0, 0, 4817, 0, 194759, 0, 7043, 9600, 11022, 0, 0, 0, - 0, 0, 0, 7548, 64794, 42050, 12291, 0, 194761, 12343, 657, 195054, 64682, - 4461, 1134, 1838, 0, 0, 0, 4468, 0, 0, 0, 4456, 5206, 10720, 0, 42523, 0, - 0, 0, 0, 65550, 260, 4816, 74163, 10687, 0, 4821, 4466, 0, 195043, 4818, + 6761, 10093, 4369, 917791, 0, 0, 8820, 3947, 0, 0, 11515, 526, 0, 41295, + 194603, 917785, 194932, 0, 7688, 917786, 7686, 8288, 11815, 0, 0, 0, + 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, 0, 41216, + 7844, 2616, 119190, 68461, 65234, 0, 13076, 3135, 0, 78143, 119139, 3142, + 194948, 0, 10819, 119580, 10183, 0, 2608, 1470, 73967, 0, 6227, 0, 0, + 74775, 0, 6163, 0, 0, 0, 0, 0, 8603, 0, 119866, 3306, 10876, 43392, + 119573, 0, 5751, 0, 6222, 0, 0, 12086, 7403, 1600, 64309, 64939, 0, + 64783, 0, 11310, 0, 8882, 0, 0, 2570, 7021, 0, 0, 43110, 0, 1234, 6540, + 6974, 0, 0, 0, 5002, 0, 41286, 0, 127019, 0, 43585, 0, 6551, 0, 0, 0, + 41289, 0, 0, 0, 8977, 602, 120814, 0, 0, 0, 0, 0, 41279, 0, 0, 0, 11081, + 43615, 0, 0, 0, 0, 12727, 0, 0, 78397, 9475, 0, 65105, 0, 9633, 10886, + 43592, 7831, 0, 0, 0, 73915, 8076, 43048, 8290, 8291, 43051, 0, 0, 2596, + 43584, 0, 13113, 0, 0, 2393, 7058, 9087, 74067, 68673, 41574, 78337, 0, + 74058, 6376, 0, 0, 0, 0, 9854, 0, 64696, 0, 0, 0, 6994, 0, 1720, 0, 0, 0, + 6529, 7063, 0, 3751, 9120, 0, 0, 1798, 709, 0, 1354, 1876, 13152, 6557, + 12430, 8137, 0, 0, 0, 0, 245, 0, 11456, 41233, 7070, 0, 0, 6136, 0, + 65677, 8682, 41235, 0, 42045, 9804, 0, 432, 3595, 0, 65437, 0, 74455, + 42399, 0, 0, 0, 0, 119658, 0, 0, 0, 77894, 8797, 0, 9052, 64888, 0, 2356, + 95, 74784, 10580, 0, 42286, 0, 64640, 0, 119104, 0, 0, 0, 10063, 12652, + 12199, 127030, 0, 2566, 11971, 0, 0, 1065, 0, 0, 43400, 2576, 0, 0, 0, + 43604, 0, 0, 74082, 514, 74502, 0, 2921, 43215, 64493, 5772, 12968, 0, + 194944, 74580, 43398, 2580, 0, 41341, 41223, 6564, 1463, 41342, 0, 5293, + 0, 0, 3733, 11346, 0, 12054, 0, 74098, 42827, 0, 13091, 0, 0, 0, 917915, + 0, 127025, 0, 74821, 0, 0, 119042, 0, 0, 13090, 66643, 0, 1270, 1132, + 42360, 0, 74096, 66655, 42569, 0, 0, 64761, 0, 41021, 8510, 42432, 0, 0, + 0, 0, 64496, 74109, 0, 9915, 0, 0, 7061, 41336, 3854, 0, 13141, 68413, + 43401, 42319, 13082, 0, 7067, 68221, 0, 0, 0, 0, 0, 0, 9029, 43543, 0, + 2353, 6308, 0, 74792, 2611, 119186, 0, 0, 0, 43664, 0, 66627, 0, 4484, + 8509, 118976, 78116, 65233, 0, 41224, 41017, 0, 3747, 10522, 0, 0, 1691, + 41226, 0, 12107, 44002, 10905, 65010, 0, 697, 66018, 9284, 4244, 0, 0, 0, + 13121, 120036, 0, 12010, 0, 0, 0, 0, 0, 0, 65816, 68111, 0, 0, 65668, 0, + 6618, 118784, 66365, 0, 42234, 12648, 0, 0, 0, 5785, 41309, 9764, 41316, + 65877, 7383, 13230, 41299, 0, 0, 68365, 0, 0, 0, 0, 13122, 0, 191, 74119, + 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, 0, 42680, 41360, 78154, 0, 4743, 0, 0, 74040, 74108, 8743, 1724, + 1433, 119322, 0, 3739, 6263, 0, 0, 3964, 6592, 0, 0, 66040, 0, 42568, 0, + 0, 1778, 3956, 0, 42070, 6563, 43075, 9018, 0, 0, 12067, 41312, 0, 5547, + 74531, 0, 0, 8175, 0, 284, 8108, 934, 0, 74001, 173, 66460, 7174, 917917, + 118822, 1750, 0, 4394, 68368, 1807, 0, 0, 0, 5889, 0, 7180, 0, 119145, 0, + 0, 42471, 6982, 1721, 44022, 7891, 42243, 42160, 2583, 4512, 119360, + 65230, 0, 0, 0, 3855, 0, 0, 0, 0, 74295, 0, 0, 119140, 3975, 0, 74087, 0, + 12672, 3798, 2703, 0, 0, 2109, 9774, 1275, 0, 0, 41095, 3962, 0, 7873, + 41101, 3954, 6457, 4513, 0, 0, 73994, 73992, 1468, 0, 0, 41851, 0, 41846, + 0, 55238, 7633, 41849, 68385, 4320, 3224, 0, 0, 0, 42531, 0, 1510, 0, + 8256, 0, 11393, 0, 8879, 0, 0, 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, 0, 0, 8184, 41486, 0, 7396, 0, 0, 69788, 0, 7185, + 7965, 0, 0, 0, 0, 41350, 9129, 0, 0, 0, 0, 0, 0, 10481, 0, 0, 7171, 0, + 340, 0, 0, 0, 0, 0, 0, 0, 6764, 0, 0, 0, 0, 0, 65203, 11392, 119098, + 119359, 0, 3210, 0, 0, 0, 0, 0, 0, 917619, 0, 0, 10043, 0, 1186, 41571, + 6999, 617, 9464, 0, 3675, 5207, 65062, 5213, 194769, 2617, 41348, 41568, + 0, 3253, 120535, 0, 8630, 0, 0, 5596, 5545, 7288, 2586, 64887, 0, 5217, + 0, 0, 0, 0, 64293, 68098, 2635, 0, 0, 0, 0, 0, 7835, 0, 0, 194988, 0, + 64558, 127122, 0, 127121, 0, 0, 0, 5784, 0, 0, 0, 0, 4011, 917616, 68101, + 0, 7864, 4254, 65095, 0, 5600, 3903, 127083, 10447, 5598, 1207, 120521, + 66689, 3501, 42582, 43600, 194780, 0, 1124, 5597, 0, 0, 9321, 0, 0, 0, 0, + 1719, 68356, 68354, 9671, 1125, 4399, 0, 917610, 0, 7631, 5488, 65223, + 120532, 0, 5491, 0, 8937, 43044, 2604, 74187, 5490, 43046, 5489, 7212, + 11768, 43043, 6300, 0, 194789, 0, 4390, 454, 41397, 0, 9875, 7593, + 194792, 0, 118913, 7207, 0, 65901, 2394, 2575, 0, 3746, 11016, 65752, + 120037, 0, 43423, 0, 11989, 0, 0, 0, 0, 0, 8249, 0, 0, 78531, 6640, + 74806, 2598, 513, 0, 6586, 8656, 0, 127002, 65008, 0, 194784, 0, 194795, + 0, 0, 68475, 0, 0, 0, 78637, 12647, 0, 194796, 0, 1036, 0, 0, 1723, 0, 0, + 0, 41579, 2444, 0, 10705, 73876, 0, 74486, 0, 740, 194985, 194978, + 194984, 0, 4238, 11071, 9459, 68437, 78140, 78139, 0, 8121, 10438, 74487, + 42574, 13285, 55263, 11907, 195000, 5690, 194999, 0, 0, 43181, 13095, 0, + 0, 64498, 0, 9506, 6978, 194993, 77992, 0, 0, 194992, 0, 0, 1122, 317, 0, + 0, 0, 0, 1920, 0, 10173, 827, 0, 0, 78378, 120126, 5223, 1304, 0, 119564, + 5226, 12602, 0, 0, 9329, 7758, 9239, 41173, 5224, 5487, 1222, 5692, + 41725, 69229, 9674, 5695, 41711, 64627, 19909, 0, 74604, 5691, 287, 866, + 233, 0, 0, 42816, 0, 65140, 74797, 0, 8830, 6568, 42300, 10524, 41175, 0, + 0, 0, 5296, 0, 42492, 43402, 0, 3302, 0, 0, 6516, 6515, 6514, 6513, 6512, + 0, 7856, 8690, 0, 0, 12122, 119628, 43976, 0, 1785, 0, 68622, 65153, + 194810, 5138, 0, 0, 0, 0, 4540, 41181, 0, 6200, 0, 5134, 0, 322, 4643, + 5132, 0, 6389, 0, 5143, 0, 8790, 0, 0, 194802, 0, 8869, 120601, 0, 42060, + 0, 0, 0, 0, 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, 0, 65268, 0, 0, 0, 11027, + 0, 10059, 10511, 42075, 9767, 789, 1749, 78890, 127071, 0, 320, 0, 8647, + 0, 3049, 0, 6471, 42071, 43156, 9925, 127356, 127355, 0, 4960, 5549, + 127359, 0, 8485, 4671, 5418, 0, 3351, 127006, 0, 10610, 5414, 3064, 6212, + 4286, 5421, 0, 9554, 0, 0, 0, 6653, 0, 0, 64510, 6213, 12885, 0, 119045, + 64720, 0, 120759, 73741, 12603, 78654, 11430, 4566, 7843, 9317, 3801, + 10342, 10406, 0, 119259, 42576, 0, 5200, 0, 917948, 0, 9183, 0, 74458, + 73825, 395, 5482, 5198, 8786, 10390, 74202, 5196, 43224, 6113, 42009, + 5205, 0, 43307, 0, 118973, 0, 12134, 0, 0, 118843, 9126, 435, 0, 12014, + 12893, 8093, 9079, 3203, 192, 65109, 3385, 0, 64430, 5383, 10294, 10326, + 0, 5738, 0, 3336, 78355, 5361, 3623, 41159, 0, 68112, 7872, 8581, 0, + 1260, 3149, 5359, 0, 0, 7914, 5357, 0, 0, 2624, 5364, 0, 11431, 120030, + 9101, 11058, 78288, 0, 78293, 42271, 78289, 65737, 120793, 0, 65566, + 6717, 10619, 43360, 78385, 78384, 78383, 78382, 78381, 78380, 78379, + 9319, 7097, 119055, 77906, 3232, 73824, 74581, 120632, 0, 0, 41889, 0, 0, + 1161, 41895, 74103, 9701, 8622, 0, 0, 73819, 120588, 5012, 77912, 41362, + 0, 78296, 11921, 0, 11769, 0, 68609, 41364, 0, 74228, 41352, 41361, 0, + 41366, 0, 3356, 0, 917, 68422, 119915, 119923, 8199, 78389, 119917, 677, + 119916, 0, 119932, 0, 0, 0, 0, 3349, 74125, 7022, 8927, 4739, 0, 5802, 0, + 8615, 0, 0, 491, 0, 0, 0, 65837, 0, 8426, 11092, 9891, 0, 42497, 0, 7586, + 42305, 10852, 0, 0, 4606, 68448, 9095, 7741, 12684, 41885, 1046, 0, 0, 0, + 5815, 5171, 65539, 0, 6932, 78315, 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, 9402, 9403, 9404, + 3507, 9406, 7629, 0, 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, 73900, 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, + 78311, 11788, 65587, 68129, 10415, 74102, 0, 205, 0, 10351, 119076, 0, + 9862, 6588, 43257, 64697, 73998, 41355, 5505, 119154, 5503, 8021, 0, + 119150, 9819, 41357, 8011, 42885, 5507, 12044, 0, 0, 10026, 5472, 65108, + 1191, 13106, 5470, 10329, 5476, 8991, 66322, 69778, 78267, 42874, 8550, + 42876, 5592, 2919, 0, 2675, 5595, 78411, 0, 4367, 0, 0, 5478, 5904, 5594, + 0, 74150, 7291, 5590, 77849, 13067, 118909, 120372, 0, 9731, 0, 64633, + 77857, 77854, 77855, 77852, 77853, 77850, 10750, 43714, 77858, 74545, 0, + 0, 12887, 10551, 194564, 77866, 77867, 77864, 77865, 9929, 5199, 9936, + 1120, 42387, 0, 1444, 9486, 7554, 65839, 55252, 0, 1442, 0, 5894, 0, 0, + 0, 0, 74313, 0, 13162, 0, 3334, 0, 118803, 77881, 66022, 0, 0, 1651, 0, + 8861, 0, 0, 1142, 0, 8271, 0, 0, 0, 12903, 0, 4002, 43626, 10442, 10676, + 3344, 0, 0, 12920, 194560, 0, 0, 66642, 1277, 0, 7871, 0, 0, 78853, 0, + 78854, 120360, 0, 11784, 0, 78012, 4700, 66366, 78858, 120359, 11012, 0, + 78856, 120358, 77879, 4973, 8784, 77877, 74804, 77874, 77869, 77871, + 42440, 0, 43118, 0, 42364, 6774, 6773, 0, 120369, 10346, 10410, 78859, + 9243, 2464, 0, 6108, 3372, 0, 6247, 43117, 74526, 0, 74166, 0, 120355, 0, + 0, 0, 0, 0, 0, 0, 74217, 3354, 0, 4192, 9289, 118999, 41191, 3876, 0, 0, + 120660, 43696, 43380, 0, 0, 0, 0, 11603, 0, 0, 6589, 0, 194679, 0, 0, 0, + 0, 0, 42572, 0, 10630, 74827, 1963, 118889, 0, 11654, 0, 7550, 10686, + 5903, 0, 78009, 41329, 9662, 917937, 64698, 3366, 10399, 0, 0, 11013, 0, + 917933, 0, 78621, 194672, 6925, 0, 0, 917929, 0, 11568, 0, 917931, 64579, + 917930, 7852, 0, 0, 6754, 6312, 0, 64672, 65296, 0, 118957, 0, 416, + 12296, 68457, 73834, 68177, 11050, 10984, 0, 0, 0, 0, 0, 0, 9532, 66355, + 0, 0, 917925, 64343, 195032, 0, 195031, 0, 0, 195057, 11445, 0, 195028, + 195056, 195027, 10185, 1021, 0, 9507, 10210, 74544, 8023, 1200, 12243, + 78001, 5282, 78003, 12540, 11545, 0, 120493, 3343, 4424, 11047, 1885, + 43268, 3896, 78626, 66497, 2947, 392, 7894, 4391, 68139, 0, 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, 0, 78301, 0, 74211, 41897, 68477, 0, 917583, 0, 0, 2493, 0, + 118811, 0, 0, 64354, 0, 8777, 0, 406, 8884, 2385, 0, 0, 0, 917573, 43030, + 42027, 12114, 0, 917579, 64936, 0, 0, 120629, 10561, 0, 8365, 0, 0, + 65841, 120787, 11601, 0, 74121, 0, 917575, 7834, 74159, 0, 0, 10298, + 6624, 4908, 917596, 1639, 0, 0, 74157, 6327, 6724, 0, 0, 0, 0, 4817, + 78446, 194759, 0, 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, 0, 41403, 119977, 0, 0, 41406, 43273, 74160, 119983, 73939, 119985, 119984, 119979, 41404, 1165, 119980, 4451, 13087, 0, 11284, 119987, - 73855, 65155, 43014, 5439, 9363, 0, 3375, 0, 5900, 0, 7889, 2722, 42262, - 0, 0, 0, 0, 0, 0, 0, 11401, 0, 0, 0, 0, 0, 0, 0, 65438, 0, 7280, 0, 0, 0, - 4868, 119967, 119966, 0, 0, 0, 43161, 0, 119964, 0, 5182, 0, 120542, 0, - 0, 4226, 120798, 12135, 5732, 4464, 0, 0, 977, 4458, 0, 0, 64770, 0, 0, - 344, 0, 194790, 1395, 64279, 0, 0, 0, 786, 0, 43174, 64340, 0, 0, 0, - 43026, 7612, 10132, 64413, 0, 0, 0, 0, 0, 0, 120498, 0, 120734, 0, - 119160, 10204, 0, 0, 0, 0, 1399, 0, 0, 0, 8852, 0, 241, 0, 4907, 0, 0, - 7932, 9727, 0, 74255, 8748, 0, 0, 0, 0, 42780, 0, 0, 0, 4217, 0, 8650, 0, - 0, 0, 0, 118872, 43099, 3965, 0, 0, 0, 13300, 0, 0, 0, 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, 0, 42825, 41854, 5304, 0, 0, 6919, - 8619, 119655, 10038, 66454, 9592, 42851, 126993, 1542, 0, 0, 0, 0, 0, - 74311, 0, 0, 10181, 0, 0, 0, 7779, 0, 10195, 9479, 6029, 0, 0, 9689, 0, - 0, 8993, 66358, 0, 42378, 3368, 606, 0, 7697, 0, 0, 2030, 0, 6027, 8370, - 4322, 0, 65207, 0, 0, 0, 0, 0, 2735, 42831, 0, 0, 74866, 8881, 119047, 0, - 0, 73946, 0, 0, 0, 68140, 0, 9576, 0, 3347, 4160, 5154, 0, 3794, 66564, - 66514, 0, 7709, 41112, 0, 66560, 42041, 4572, 0, 66561, 0, 41113, 0, - 1615, 5855, 809, 0, 0, 0, 0, 5799, 0, 0, 0, 7260, 0, 43031, 64425, 65128, - 127061, 64386, 65257, 0, 0, 120607, 9347, 0, 6532, 0, 0, 0, 0, 65828, 0, - 283, 917917, 0, 532, 0, 0, 0, 120609, 0, 3370, 0, 11361, 5443, 0, 8153, - 73767, 0, 10741, 0, 0, 0, 0, 65495, 64706, 0, 0, 0, 0, 9466, 119600, - 9824, 0, 0, 0, 0, 915, 0, 0, 0, 0, 0, 0, 43264, 0, 0, 0, 0, 0, 0, 0, - 68161, 64550, 5186, 12890, 0, 0, 12108, 0, 65124, 0, 66043, 0, 0, 43107, - 0, 0, 42562, 0, 0, 0, 0, 11485, 6103, 127123, 0, 11718, 0, 12889, 0, 0, - 0, 0, 0, 0, 0, 1630, 0, 65483, 0, 12565, 0, 65476, 0, 0, 119554, 9283, - 7700, 917537, 9690, 65499, 0, 64593, 512, 3376, 118862, 0, 0, 0, 632, - 12940, 0, 42529, 0, 0, 5957, 0, 8926, 0, 0, 0, 10745, 10174, 0, 64581, - 5386, 120686, 11713, 10633, 120531, 5056, 0, 0, 0, 120773, 0, 9812, 0, - 4460, 0, 0, 0, 0, 0, 0, 0, 64278, 0, 0, 0, 0, 64389, 2953, 73879, 1801, - 12835, 917627, 0, 73823, 0, 66375, 0, 702, 42579, 0, 0, 13074, 0, 0, 0, - 0, 12106, 0, 74207, 1755, 10482, 12863, 0, 1163, 2951, 9522, 74079, - 195076, 120674, 0, 3384, 120728, 10702, 830, 0, 0, 0, 8451, 0, 0, 0, - 120762, 0, 0, 0, 0, 2908, 0, 0, 64902, 4243, 0, 12239, 0, 0, 4441, 0, 0, - 73940, 64352, 0, 0, 411, 0, 0, 0, 0, 0, 41890, 0, 2730, 41604, 0, 5428, - 194743, 3364, 42265, 0, 0, 118816, 0, 9684, 216, 0, 1401, 0, 0, 0, 0, 0, - 9158, 0, 120664, 5768, 0, 0, 0, 484, 0, 0, 0, 65895, 0, 0, 3338, 73935, - 572, 7041, 2736, 0, 0, 0, 2794, 8807, 64491, 0, 5438, 5222, 5381, 43114, - 0, 5193, 5125, 5456, 5509, 0, 194747, 9534, 0, 0, 0, 3430, 0, 0, 0, 0, - 981, 0, 4330, 120673, 120536, 1824, 10908, 0, 7034, 41683, 64617, 0, - 73754, 3957, 0, 64547, 0, 674, 63991, 0, 2946, 5354, 5251, 5328, 5307, - 3759, 11411, 8364, 5123, 0, 5281, 5469, 5121, 0, 0, 0, 5130, 0, 0, 0, 0, - 120726, 1221, 2733, 11746, 0, 5216, 0, 0, 0, 0, 3468, 0, 9230, 5939, 0, - 0, 0, 120677, 120729, 7278, 10321, 10289, 64613, 10385, 41706, 0, 0, 0, - 0, 11739, 0, 41981, 0, 5938, 0, 0, 12448, 7576, 10401, 10337, 73852, 0, + 73855, 65155, 43014, 5439, 9363, 127558, 3375, 0, 5900, 0, 7889, 2722, + 42262, 0, 0, 0, 0, 0, 0, 0, 11401, 0, 0, 68459, 0, 0, 0, 0, 65438, 0, + 7280, 0, 0, 0, 4868, 119967, 119966, 0, 0, 0, 43161, 0, 119964, 0, 5182, + 0, 120542, 0, 0, 4226, 120798, 12135, 5732, 4464, 0, 0, 977, 4458, 0, 0, + 64770, 74838, 0, 344, 0, 194790, 1395, 64279, 0, 0, 0, 786, 0, 43174, + 64340, 0, 0, 0, 43026, 7612, 10132, 64413, 0, 0, 0, 0, 0, 0, 68444, 0, + 120734, 0, 119160, 10204, 0, 0, 0, 0, 1399, 0, 65217, 0, 8852, 0, 241, 0, + 4907, 0, 0, 7932, 9727, 0, 74255, 8748, 0, 0, 0, 0, 42780, 0, 0, 0, 4217, + 0, 8650, 0, 0, 0, 0, 118872, 43099, 3965, 119119, 6719, 0, 13300, 78439, + 0, 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, 0, 42825, + 41854, 5304, 0, 78516, 6919, 8619, 119655, 10038, 66454, 9592, 42851, + 126993, 1542, 0, 0, 0, 0, 0, 74311, 78497, 0, 10181, 0, 43624, 0, 7779, + 0, 10195, 9479, 6029, 0, 0, 9689, 0, 0, 8993, 66358, 0, 42378, 3368, 606, + 0, 7697, 69237, 69787, 2030, 0, 6027, 8370, 4322, 0, 65207, 0, 0, 0, 0, + 0, 2735, 42831, 77935, 127120, 74866, 8881, 119047, 0, 0, 73946, 0, 0, 0, + 68140, 0, 9576, 0, 3347, 4160, 5154, 55288, 3794, 66564, 8530, 127063, + 7709, 41112, 0, 66560, 42041, 4572, 12876, 66561, 0, 6758, 0, 1615, 5855, + 809, 0, 0, 0, 0, 5799, 0, 0, 0, 7260, 0, 43031, 64425, 65128, 127061, + 64386, 65257, 0, 68616, 120607, 9347, 0, 6532, 0, 0, 0, 0, 65828, 0, 283, + 68665, 78813, 532, 78663, 0, 0, 120609, 0, 3370, 0, 11361, 5443, 78778, + 8153, 73767, 0, 10741, 0, 0, 0, 0, 65495, 64706, 0, 43344, 0, 78870, + 9466, 78866, 9824, 0, 0, 0, 0, 915, 43425, 0, 0, 0, 0, 0, 43264, 0, 0, 0, + 0, 78864, 6730, 78862, 68161, 64550, 5186, 12890, 0, 0, 12108, 0, 65124, + 43127, 66043, 0, 6326, 43107, 77826, 0, 42562, 0, 0, 0, 0, 11485, 6103, + 127123, 0, 11718, 0, 12889, 0, 0, 0, 0, 0, 55245, 0, 1630, 0, 65483, 0, + 12565, 0, 65476, 120013, 0, 119554, 9283, 7700, 917537, 9690, 65499, 0, + 64593, 512, 3376, 68210, 0, 0, 77892, 632, 12940, 77891, 42529, 78587, 0, + 5957, 0, 8926, 0, 0, 0, 10745, 10174, 7379, 64581, 5386, 120686, 11713, + 10633, 120531, 5056, 0, 0, 0, 120773, 0, 9812, 0, 4460, 0, 0, 0, 0, 0, 0, + 0, 64278, 0, 43466, 0, 0, 64389, 2953, 73879, 1801, 12835, 119029, 0, + 73823, 0, 66375, 2085, 702, 42579, 77884, 77885, 13074, 77883, 0, 0, 0, + 12106, 0, 74207, 1755, 10482, 12863, 77898, 1163, 2951, 9522, 74079, + 78266, 120674, 0, 3384, 69227, 10702, 830, 77902, 77899, 77900, 8451, 0, + 0, 0, 120762, 0, 0, 0, 0, 2908, 0, 43386, 64902, 4243, 0, 12239, 0, 0, + 4441, 0, 0, 73940, 64352, 127513, 0, 411, 0, 0, 0, 4056, 118992, 41890, + 0, 2730, 41604, 0, 5428, 194743, 3364, 42265, 0, 0, 118816, 194742, 9684, + 216, 0, 1401, 0, 44012, 0, 0, 0, 9158, 77842, 120664, 5768, 0, 0, 0, 484, + 0, 0, 0, 65895, 0, 0, 3338, 73935, 572, 7041, 2736, 67605, 0, 0, 2794, + 8807, 64491, 77847, 5438, 5222, 5381, 43114, 0, 5193, 5125, 5456, 5509, + 77846, 194747, 9534, 0, 0, 0, 3430, 0, 0, 0, 0, 981, 0, 4330, 73929, + 120536, 1824, 10908, 0, 7034, 41683, 64617, 0, 73754, 3957, 64358, 64547, + 0, 674, 63991, 0, 2946, 5354, 5251, 5328, 5307, 3759, 11411, 8364, 5123, + 0, 5281, 5469, 5121, 119245, 0, 0, 5130, 0, 0, 77990, 0, 120726, 1221, + 2733, 11746, 77991, 5216, 0, 0, 0, 0, 3468, 7033, 9230, 5939, 0, 0, 0, + 120677, 68400, 7278, 10321, 10289, 64613, 10385, 41706, 0, 0, 0, 0, + 11739, 0, 41981, 0, 5938, 0, 0, 12448, 7576, 10401, 10337, 73852, 0, 13057, 0, 126976, 0, 10009, 0, 64304, 0, 12165, 0, 0, 9885, 0, 8077, 0, - 0, 0, 0, 0, 0, 0, 4220, 10725, 10433, 0, 0, 4987, 64519, 0, 0, 0, 0, 0, - 10970, 11733, 0, 120792, 0, 19944, 0, 9009, 8551, 0, 11468, 74003, 7575, - 0, 2724, 0, 0, 12313, 119949, 515, 119947, 42791, 63987, 119942, 119943, - 119940, 119941, 119938, 9775, 4046, 4589, 4521, 0, 9141, 0, 0, 2741, - 64399, 6197, 1370, 0, 0, 0, 0, 0, 0, 6184, 8606, 3303, 41372, 11786, - 9473, 66203, 66177, 0, 11593, 43007, 4478, 66178, 0, 0, 2744, 0, 4477, 0, - 814, 42066, 66183, 66204, 66194, 119961, 66198, 41880, 66188, 66197, - 119954, 11955, 66190, 66191, 41111, 66189, 73788, 7788, 4847, 0, 0, 0, 0, - 0, 1581, 6535, 0, 12954, 430, 194934, 194939, 0, 194938, 5278, 4945, - 42883, 4950, 0, 120547, 0, 7269, 0, 5964, 12908, 0, 0, 74764, 74477, - 119146, 194936, 4949, 0, 443, 0, 4944, 5467, 119603, 0, 65137, 6044, - 65392, 0, 4213, 0, 41303, 0, 194931, 0, 41306, 73984, 2698, 0, 0, 12072, - 3193, 0, 41304, 824, 0, 12091, 119814, 119813, 119816, 4673, 64804, 4678, - 119820, 119819, 65059, 0, 119808, 0, 5481, 3490, 1199, 119811, 8356, - 119829, 119832, 4677, 12688, 3102, 0, 4672, 119822, 119821, 5531, 119823, - 42575, 119825, 119828, 4674, 4548, 0, 0, 0, 119946, 8025, 0, 127024, - 1855, 0, 119945, 0, 120554, 0, 0, 0, 0, 2745, 11797, 0, 0, 119939, 4654, - 0, 0, 194959, 73993, 10525, 4649, 65209, 0, 0, 4648, 43080, 0, 0, 0, - 6246, 64950, 7828, 4650, 0, 0, 119086, 4653, 7822, 0, 0, 43187, 8669, 0, - 0, 65093, 0, 0, 2716, 0, 0, 0, 0, 0, 0, 11060, 8547, 2711, 42165, 0, - 119228, 7992, 0, 0, 4662, 0, 0, 9149, 9146, 599, 4657, 194963, 120754, - 194962, 4656, 10130, 0, 7811, 40994, 194965, 6414, 5967, 4658, 3725, - 5713, 5814, 4661, 42434, 0, 0, 0, 64904, 9026, 10833, 0, 7547, 4867, 0, - 10008, 10222, 3054, 194956, 9744, 0, 7605, 4622, 119656, 0, 0, 0, 0, 0, - 9045, 0, 4225, 19926, 0, 12880, 65307, 4617, 0, 0, 0, 4616, 10518, 10423, - 10359, 0, 5958, 0, 0, 4215, 9789, 917941, 4321, 4621, 0, 41313, 522, - 5368, 0, 65803, 0, 5366, 12201, 5372, 0, 0, 0, 7720, 0, 2696, 0, 0, 4638, - 0, 1790, 0, 5965, 64363, 66569, 0, 194968, 5376, 1835, 5335, 194966, 0, - 4633, 0, 68119, 1180, 4632, 0, 5387, 5333, 0, 0, 42094, 5331, 4634, - 11928, 0, 5338, 4637, 0, 5971, 42414, 0, 1268, 65097, 42361, 0, 0, 73853, - 1427, 0, 0, 5970, 3431, 0, 10358, 10422, 4758, 0, 1608, 2738, 0, 10455, - 4753, 74026, 11344, 4222, 6240, 5231, 74384, 0, 0, 6248, 0, 0, 0, 42318, - 0, 5229, 4757, 0, 0, 2728, 4752, 64563, 65235, 5234, 0, 0, 0, 10713, 0, - 0, 2622, 7460, 0, 0, 0, 8954, 74760, 65189, 2632, 0, 10108, 1011, 5574, - 1853, 2709, 65139, 5577, 0, 0, 118871, 0, 8965, 7635, 42177, 5316, 0, - 5314, 6451, 5572, 0, 5312, 0, 5525, 5330, 5319, 0, 0, 194907, 119016, 0, - 0, 0, 0, 0, 195009, 0, 74022, 0, 64609, 0, 0, 0, 5721, 0, 10398, 8632, - 66465, 11267, 73961, 0, 5720, 0, 1692, 4219, 4610, 8696, 4305, 0, 4609, - 0, 4614, 541, 0, 5287, 5309, 5285, 0, 5961, 4647, 56, 4216, 10577, 41381, - 601, 4613, 0, 0, 0, 4608, 64260, 41124, 5190, 67628, 0, 68145, 7086, 0, - 119243, 67620, 0, 2734, 11074, 0, 67627, 43593, 0, 67625, 5960, 0, 8992, - 65293, 0, 1782, 67622, 68114, 119950, 0, 68180, 5501, 119952, 42508, - 7442, 120749, 359, 41253, 119957, 6239, 119956, 41256, 0, 68134, 0, - 74209, 0, 9346, 118904, 41254, 0, 43291, 3767, 5737, 0, 4865, 0, 5740, 0, - 5736, 4368, 0, 7193, 68137, 0, 5739, 41024, 4866, 0, 73904, 0, 4869, - 120563, 0, 4223, 0, 6650, 0, 0, 0, 0, 4870, 0, 74805, 66566, 0, 120758, - 0, 0, 0, 10122, 4864, 66568, 4144, 7937, 0, 6245, 0, 2732, 66459, 745, 0, - 195097, 0, 4777, 7821, 0, 0, 42775, 0, 194954, 0, 3097, 0, 5966, 0, 4778, - 0, 10863, 0, 4781, 0, 64407, 0, 0, 8577, 0, 118964, 43285, 10216, 4782, - 0, 0, 120757, 917924, 12325, 0, 8717, 0, 0, 4776, 0, 11492, 8700, 0, - 13176, 0, 10426, 0, 917599, 10362, 0, 1715, 4849, 8242, 9561, 73922, - 43278, 42635, 0, 0, 5963, 917926, 0, 0, 4850, 0, 1607, 466, 4853, 118995, - 4854, 0, 5164, 0, 1350, 5124, 64420, 1993, 5362, 8471, 2708, 0, 12445, - 3785, 234, 3199, 0, 41268, 4848, 2530, 0, 4798, 1964, 0, 73762, 10458, 0, - 8576, 0, 0, 2704, 4794, 0, 0, 8322, 4797, 74074, 0, 2694, 4792, 0, 2439, - 65104, 0, 0, 303, 0, 0, 0, 2437, 0, 4221, 4844, 118869, 0, 0, 0, 0, 0, - 43292, 0, 2441, 10739, 65090, 0, 119327, 0, 2451, 2714, 119326, 0, 0, - 4937, 74541, 753, 5849, 10597, 43089, 11722, 9248, 0, 42879, 11725, 0, 0, - 2726, 3107, 73958, 4941, 64937, 917538, 9140, 1408, 5261, 41412, 0, 181, - 0, 4942, 9539, 4938, 0, 65201, 5259, 9369, 64185, 4142, 5257, 0, 0, 4964, - 5264, 64178, 64177, 12979, 0, 64182, 64181, 64180, 64179, 9482, 4873, - 41231, 1822, 42526, 0, 12758, 3865, 0, 0, 10500, 0, 0, 0, 0, 9830, 0, - 389, 10893, 7521, 0, 4872, 5463, 0, 3125, 9567, 0, 4878, 5459, 4874, 0, - 9557, 5465, 0, 0, 11494, 0, 9563, 10865, 74570, 43279, 64186, 0, 0, - 64191, 64190, 8898, 64188, 0, 41030, 0, 0, 917835, 0, 917834, 0, 917837, - 41031, 0, 11960, 0, 3082, 0, 0, 0, 10573, 0, 7079, 5856, 127043, 5163, - 127042, 0, 1817, 66724, 0, 0, 10564, 7763, 13077, 41813, 4400, 41745, - 64207, 10275, 8925, 10371, 10307, 41814, 4248, 0, 0, 4541, 6299, 64204, - 64203, 64201, 64200, 64199, 64198, 0, 42156, 0, 0, 64193, 64192, 0, 0, - 64197, 64196, 64195, 64194, 13282, 64175, 64174, 64173, 0, 846, 0, 0, 0, - 0, 0, 0, 2543, 12163, 3108, 9745, 64167, 64166, 64165, 64164, 41743, 0, - 64169, 64168, 64949, 10972, 10251, 10247, 42768, 715, 64161, 43299, 9453, - 5348, 10943, 120378, 0, 11352, 550, 9910, 0, 0, 66579, 11551, 0, 0, 9504, - 7187, 0, 10373, 0, 120791, 10261, 10253, 6404, 10277, 0, 11984, 1552, - 65222, 6998, 0, 0, 3128, 4789, 5067, 5066, 118849, 4784, 0, 8827, 1146, - 5065, 0, 0, 68136, 0, 0, 5064, 2431, 0, 9450, 1809, 0, 0, 0, 5062, 1264, - 64817, 13254, 11697, 0, 9785, 64716, 0, 3933, 74559, 4740, 7954, 0, 0, - 42609, 0, 74175, 0, 127016, 0, 0, 42130, 0, 5151, 917831, 917823, 0, 0, - 0, 7620, 3800, 65122, 0, 0, 8355, 7854, 0, 954, 64927, 4185, 41045, 0, - 41438, 41439, 73978, 10711, 4593, 0, 120584, 0, 64774, 13309, 10532, - 66727, 0, 0, 0, 64759, 0, 5166, 9888, 0, 5148, 42834, 0, 120634, 118946, - 64140, 0, 64131, 3119, 917814, 0, 3060, 64135, 9986, 0, 0, 636, 11698, 0, - 0, 9916, 11701, 7836, 0, 64137, 8320, 118969, 8863, 0, 119960, 1477, - 43289, 0, 74358, 8618, 0, 9908, 0, 0, 0, 3937, 12312, 0, 0, 0, 64781, - 912, 10498, 4536, 119963, 74532, 0, 6244, 0, 194580, 3935, 120665, 0, 0, - 11950, 5392, 42248, 65129, 0, 5397, 0, 12046, 12599, 0, 0, 5395, 0, 5393, - 354, 0, 119948, 0, 0, 0, 42039, 0, 0, 64142, 626, 0, 5895, 0, 0, 5780, 0, - 0, 0, 0, 0, 43297, 0, 4311, 4644, 8818, 0, 0, 0, 73818, 3918, 66452, - 3797, 1644, 119944, 9658, 4140, 11385, 65947, 6455, 9030, 813, 0, 68131, - 4146, 0, 5360, 2466, 0, 0, 0, 6249, 42117, 0, 0, 0, 0, 74046, 120583, - 4911, 988, 917809, 0, 0, 0, 7054, 64147, 0, 64920, 917812, 917803, - 118933, 120349, 0, 0, 11981, 12202, 0, 11032, 120725, 6093, 11608, 975, - 0, 65843, 170, 0, 0, 4169, 0, 41859, 6058, 120401, 0, 120657, 0, 0, 0, - 9818, 10178, 10324, 42106, 5898, 74540, 4738, 41856, 7062, 917865, 4737, - 11779, 4742, 120564, 917866, 73736, 0, 9825, 6448, 12700, 127008, 4831, - 0, 0, 0, 5300, 4741, 42108, 0, 64159, 4736, 64148, 0, 849, 0, 0, 43288, - 0, 66620, 0, 0, 65549, 9496, 64598, 0, 0, 7876, 68132, 917872, 3928, - 917870, 65283, 10706, 7198, 0, 4842, 12053, 0, 0, 4841, 0, 4171, 12008, - 6251, 3923, 1490, 0, 119591, 0, 40972, 5245, 0, 10114, 42001, 41888, - 4845, 8332, 40974, 0, 4840, 9077, 917851, 1747, 917849, 4825, 0, 917852, - 0, 0, 0, 0, 0, 0, 0, 9850, 118937, 367, 1472, 917859, 6687, 1274, 0, - 5905, 12339, 8919, 73953, 10907, 65261, 11023, 119559, 4830, 9134, 0, - 64126, 43011, 0, 0, 64101, 0, 0, 4824, 10614, 120390, 0, 1888, 1960, - 7861, 917856, 0, 41836, 43012, 6052, 6064, 54, 43009, 12214, 0, 6211, 0, - 358, 41997, 41833, 11442, 10758, 65774, 0, 120384, 64115, 120385, 0, 0, - 0, 119053, 0, 12765, 64121, 126998, 12962, 0, 0, 4017, 12827, 5241, - 120392, 0, 41118, 3924, 0, 11366, 917843, 0, 0, 917846, 41116, 917844, - 917845, 0, 11363, 12057, 11917, 1567, 74000, 4721, 0, 66202, 8957, 4139, - 0, 0, 0, 0, 0, 12740, 0, 4722, 12761, 0, 12759, 4725, 0, 4726, 0, 0, 0, - 917904, 917905, 0, 12755, 12762, 4015, 0, 8052, 476, 0, 0, 0, 64212, - 41020, 1382, 64209, 64216, 64215, 64214, 1656, 41831, 0, 0, 41843, 8720, - 3908, 1452, 13111, 0, 64067, 0, 8552, 64113, 41845, 3849, 0, 66232, 9778, - 120066, 5891, 7064, 55, 74437, 917911, 0, 0, 7935, 67586, 0, 1114, 0, - 67585, 120052, 120053, 120050, 120051, 3938, 120057, 65417, 64717, - 120060, 120061, 65415, 120059, 6292, 65303, 7955, 6452, 4713, 917887, - 66249, 917885, 917890, 917891, 65152, 719, 120044, 120045, 120042, 41944, - 4532, 65412, 120046, 10868, 4717, 2349, 5902, 66450, 4712, 917902, - 917899, 917900, 0, 8155, 4718, 3942, 4714, 9625, 0, 0, 0, 12006, 0, 0, 0, - 0, 0, 65414, 6454, 1229, 0, 66437, 66025, 917894, 0, 42500, 120508, 4809, - 9623, 917874, 917879, 917880, 917877, 917878, 65405, 68159, 917881, - 917882, 5365, 4545, 8901, 917566, 119555, 4813, 0, 0, 5925, 4808, 64330, - 0, 65475, 0, 0, 4814, 0, 4810, 0, 0, 64928, 10543, 0, 3522, 0, 414, - 65404, 0, 0, 6456, 73820, 0, 11905, 917883, 0, 0, 0, 74495, 0, 0, 0, - 118820, 9751, 65407, 0, 11770, 3919, 0, 0, 65061, 0, 0, 0, 12235, 0, 0, - 0, 66576, 0, 64080, 0, 64090, 0, 0, 10162, 10310, 0, 8454, 0, 42038, 387, - 41363, 12737, 0, 4780, 0, 0, 64310, 64621, 0, 0, 0, 0, 0, 0, 8896, 0, - 375, 6976, 0, 119005, 0, 0, 0, 119202, 119203, 12526, 43120, 2315, 0, - 1938, 119197, 0, 4529, 119200, 119201, 119198, 119199, 0, 0, 0, 13150, - 64492, 0, 0, 0, 12902, 0, 42891, 66327, 74298, 0, 10799, 0, 2587, 66372, - 0, 4193, 120334, 4241, 0, 7998, 0, 0, 0, 0, 2316, 118821, 0, 0, 0, 64297, - 74799, 0, 74140, 0, 5373, 0, 0, 3762, 10015, 0, 119232, 0, 41590, 0, 0, - 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, 0, 68138, - 13072, 1894, 0, 0, 65478, 43310, 7231, 0, 11773, 0, 0, 0, 0, 2551, 0, - 6453, 10200, 6235, 0, 0, 0, 0, 4470, 0, 0, 7780, 5369, 118958, 5249, 0, - 5367, 8756, 0, 0, 5377, 120585, 68143, 1688, 0, 0, 0, 0, 0, 0, 0, 41697, - 41319, 1300, 10650, 41692, 64505, 4668, 0, 119624, 1465, 10850, 3943, 0, - 41205, 0, 0, 0, 0, 5352, 0, 0, 8839, 41314, 0, 7785, 41204, 0, 41209, 0, - 0, 43607, 0, 0, 5420, 3897, 0, 0, 74417, 4018, 0, 68127, 0, 0, 0, 0, 0, - 2561, 0, 3542, 41915, 12076, 7951, 68152, 118857, 5303, 6276, 1706, 0, 0, - 74116, 0, 65150, 41819, 0, 73951, 10847, 41822, 9985, 860, 0, 10506, 0, - 0, 10753, 10830, 0, 615, 64490, 7574, 0, 0, 0, 12909, 43016, 64559, - 127028, 0, 0, 0, 2020, 0, 4022, 0, 0, 0, 0, 41691, 0, 0, 0, 0, 64622, - 9070, 0, 0, 3911, 42829, 43122, 1033, 0, 0, 7000, 3904, 0, 0, 0, 0, - 127012, 13123, 10846, 3450, 0, 0, 118807, 0, 42778, 10000, 41088, 449, 0, - 3777, 0, 0, 9636, 0, 10738, 0, 9367, 593, 41085, 3999, 65226, 41713, - 12764, 0, 64409, 3596, 0, 0, 9763, 120280, 120283, 12347, 124, 12981, - 41127, 120278, 0, 0, 0, 0, 10820, 0, 0, 0, 1769, 41715, 2463, 0, 0, - 12770, 0, 1538, 0, 43124, 0, 195058, 7795, 120300, 0, 4828, 1258, 0, - 2006, 0, 0, 9498, 127032, 127033, 120289, 120288, 3939, 120290, 8846, - 8943, 120287, 120286, 2650, 4491, 1961, 42602, 11525, 120292, 1959, - 120294, 0, 11774, 41016, 0, 0, 0, 1511, 9324, 0, 10519, 66331, 3454, - 19930, 0, 41019, 0, 0, 65292, 0, 12862, 0, 0, 42143, 41828, 0, 65531, 0, - 118879, 0, 0, 0, 41826, 8865, 6402, 0, 13279, 7917, 120340, 0, 7733, 0, - 4998, 0, 0, 41950, 0, 4268, 0, 0, 0, 4013, 0, 10881, 0, 0, 0, 74788, - 2014, 0, 0, 9765, 0, 0, 0, 195059, 0, 65281, 0, 10949, 0, 0, 0, 2015, 0, - 0, 0, 66318, 74824, 0, 42517, 0, 0, 0, 0, 8094, 64468, 65909, 6474, 794, - 0, 12656, 0, 119353, 0, 1665, 0, 4833, 0, 119351, 0, 0, 189, 12611, 0, 0, - 2859, 4838, 0, 4834, 0, 0, 0, 4837, 0, 770, 0, 811, 0, 41042, 0, 41318, - 64427, 0, 0, 0, 3895, 0, 74341, 3976, 0, 42859, 10193, 3116, 7747, 0, 0, - 0, 0, 0, 0, 0, 41877, 0, 2871, 64614, 0, 999, 0, 68177, 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, 0, 0, 0, 3078, 1402, 0, 0, 0, 0, 0, 394, 3088, 0, 0, 0, - 3991, 64391, 0, 0, 424, 66328, 1999, 0, 73914, 0, 0, 0, 0, 0, 8246, 0, 0, - 0, 41840, 0, 2377, 1298, 64011, 12572, 11318, 12557, 12559, 12570, 8488, - 1003, 2373, 9446, 9447, 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, 0, 9655, 0, 2004, - 9096, 9782, 0, 9172, 0, 19965, 0, 5955, 120485, 1108, 0, 74773, 0, 0, - 64782, 3926, 0, 65210, 8798, 0, 0, 1392, 0, 0, 917557, 10606, 8065, - 118805, 10353, 10417, 0, 0, 64524, 0, 4019, 0, 0, 43280, 8219, 0, 1812, - 0, 0, 0, 0, 42410, 74448, 119132, 6054, 10697, 3169, 42297, 42322, 10642, - 3909, 74461, 0, 0, 0, 0, 0, 0, 1049, 0, 65707, 11943, 41806, 0, 42336, - 3921, 0, 11775, 64760, 11766, 1038, 42303, 9823, 0, 0, 4008, 64004, 8773, - 10733, 36, 0, 5153, 41805, 0, 73735, 763, 41808, 64910, 0, 2009, 0, 0, 0, - 9640, 119951, 0, 120695, 8621, 0, 12852, 3031, 0, 64361, 0, 182, 194718, - 0, 0, 0, 0, 9058, 366, 0, 9892, 5969, 11754, 10848, 4570, 65301, 0, 4255, - 0, 10102, 41189, 4003, 41026, 68109, 13293, 41192, 0, 0, 42251, 0, 42534, - 0, 11287, 6128, 0, 11034, 10923, 64423, 0, 65506, 0, 0, 74083, 0, 66582, - 0, 0, 119955, 0, 9817, 0, 0, 0, 12117, 66586, 4183, 10540, 66250, 127044, - 127045, 0, 0, 0, 12897, 3792, 2011, 0, 6065, 43160, 0, 194715, 8692, - 41186, 41816, 41023, 41818, 41187, 11659, 7922, 12614, 2005, 8523, - 120144, 0, 7513, 1863, 4710, 0, 5956, 7621, 120274, 127116, 4705, 716, 0, - 0, 4704, 120040, 120270, 42241, 161, 0, 74546, 66214, 4706, 0, 0, 120037, - 4709, 10680, 0, 43293, 0, 0, 119164, 0, 0, 0, 1700, 119223, 0, 0, 0, - 4004, 0, 10968, 43296, 0, 8506, 0, 0, 126996, 1005, 937, 120030, 4734, - 2870, 0, 120032, 0, 7463, 4729, 0, 235, 1384, 4728, 0, 120420, 120644, 0, - 8109, 43105, 0, 4730, 447, 13186, 1513, 4733, 120415, 0, 0, 42527, 12911, - 0, 1383, 8565, 2469, 120024, 119089, 6156, 68117, 0, 7993, 4288, 120416, - 2674, 13238, 11922, 0, 120330, 3510, 13234, 0, 120407, 5605, 42095, - 11364, 0, 1380, 65617, 120320, 120261, 13196, 13197, 120309, 120682, - 9495, 119346, 0, 5959, 0, 73976, 120305, 0, 6941, 119349, 13205, 13211, - 5801, 12769, 65905, 120316, 1283, 120302, 4779, 0, 3719, 4006, 0, 19957, - 0, 2021, 119332, 0, 0, 43028, 65493, 41838, 3875, 5962, 64341, 119339, - 9814, 43571, 5827, 3314, 7787, 0, 65494, 68153, 0, 0, 120636, 64531, 0, - 0, 0, 0, 0, 65467, 5771, 41298, 0, 9742, 521, 0, 10800, 0, 8404, 194625, - 483, 7096, 7089, 66323, 928, 0, 0, 0, 10599, 11586, 3989, 10971, 0, - 65782, 9841, 8843, 12145, 0, 10074, 120816, 0, 3769, 0, 0, 0, 0, 9573, 0, - 65290, 8849, 0, 65855, 65112, 1796, 0, 0, 0, 8164, 41301, 3502, 0, 0, - 10621, 73838, 0, 5825, 13007, 68165, 0, 0, 12661, 7608, 10354, 10418, - 42411, 2022, 0, 1409, 12195, 4001, 3112, 10824, 120639, 1390, 0, 0, 421, - 43536, 5846, 120120, 4130, 0, 7595, 42588, 7600, 0, 66035, 0, 0, 65851, - 42607, 0, 0, 3168, 0, 42134, 0, 2370, 2846, 0, 0, 0, 120132, 0, 1836, 0, - 0, 119137, 3740, 0, 6290, 65374, 120451, 65923, 3944, 66628, 120434, 0, - 6135, 3118, 74265, 119093, 120446, 0, 0, 8127, 8975, 64739, 7943, 0, 0, - 10618, 2584, 0, 0, 0, 9998, 0, 0, 0, 0, 0, 6204, 0, 0, 8279, 8776, 64954, - 4975, 74809, 0, 4267, 0, 0, 0, 0, 195046, 65700, 66562, 0, 64645, 0, 0, - 0, 12586, 0, 9242, 0, 0, 4523, 5842, 10495, 3122, 0, 7793, 0, 9328, 0, 0, - 12604, 0, 6615, 0, 0, 3986, 0, 0, 8912, 64555, 0, 0, 0, 9541, 0, 0, - 11275, 8540, 11498, 0, 0, 41040, 2459, 0, 13060, 41041, 74413, 0, 0, 0, - 0, 10450, 12551, 41043, 7020, 120353, 3765, 0, 0, 1606, 120348, 120351, - 3093, 0, 0, 0, 120649, 0, 0, 4312, 74091, 120337, 120336, 11923, 4023, - 120333, 5763, 120335, 4827, 10894, 12810, 64406, 118785, 4455, 74321, - 433, 119620, 66660, 2499, 0, 0, 0, 11973, 13089, 4293, 120329, 120328, - 42758, 12196, 42837, 0, 119319, 0, 0, 5817, 0, 0, 3120, 9797, 0, 0, 0, - 10389, 0, 0, 4895, 65358, 0, 4359, 585, 0, 3509, 0, 486, 4290, 0, 0, 0, - 0, 7004, 0, 65880, 0, 119048, 2380, 11380, 0, 0, 2376, 0, 0, 0, 5197, - 127046, 127047, 127048, 2366, 127050, 127051, 127052, 0, 0, 0, 0, 0, 0, - 0, 0, 74188, 0, 0, 0, 0, 0, 0, 0, 120049, 0, 1847, 0, 10339, 0, 42384, 0, - 4227, 74158, 0, 0, 43032, 0, 42365, 0, 12671, 11384, 0, 0, 0, 64797, 0, - 5820, 0, 0, 120065, 0, 120064, 120650, 42137, 9893, 2754, 12664, 120063, - 0, 13192, 0, 41799, 65530, 1711, 12984, 43039, 3114, 6255, 0, 118938, 0, - 10853, 926, 0, 74184, 0, 120055, 0, 43175, 0, 43037, 41798, 41035, 11583, - 0, 41801, 119088, 0, 520, 4200, 12699, 8331, 0, 3091, 41034, 0, 0, 8360, - 0, 0, 321, 4229, 64543, 0, 65563, 0, 0, 2861, 0, 10095, 0, 0, 0, 1861, 0, - 0, 0, 0, 43041, 0, 0, 0, 3859, 12181, 41660, 8209, 0, 120678, 12973, 0, - 74757, 0, 41658, 0, 0, 5760, 0, 743, 4414, 120766, 0, 42632, 917973, - 65161, 73896, 0, 0, 1405, 119063, 43220, 43341, 0, 19919, 0, 64532, - 65367, 0, 0, 0, 3513, 0, 118883, 43342, 119064, 65529, 65364, 0, 0, 6485, - 1397, 0, 65365, 0, 0, 0, 0, 0, 7471, 12079, 0, 12682, 43287, 0, 0, 0, 0, - 0, 0, 1099, 10490, 0, 10501, 65181, 74463, 0, 464, 41624, 119594, 0, 0, - 1346, 0, 917631, 64724, 64897, 423, 1818, 65144, 0, 8272, 0, 0, 4218, - 3087, 64960, 0, 43564, 0, 0, 9584, 10465, 0, 74359, 12626, 9106, 0, - 42642, 0, 64750, 9390, 0, 41797, 0, 0, 265, 41795, 64666, 0, 43530, 2752, - 0, 0, 0, 59, 0, 0, 0, 0, 0, 41810, 0, 7010, 0, 41809, 41495, 119364, 0, - 42252, 0, 8009, 3305, 43033, 511, 119320, 66255, 13127, 120067, 0, 0, 0, - 917977, 65915, 1400, 41812, 10685, 194870, 41211, 10387, 4453, 43276, - 917783, 13159, 0, 6481, 41213, 0, 0, 0, 0, 41983, 74198, 6617, 9116, 0, - 0, 462, 68110, 10493, 0, 8129, 0, 0, 74471, 6644, 11658, 0, 0, 3452, - 11906, 9581, 1385, 3098, 0, 119013, 43340, 0, 41033, 6493, 42626, 0, 0, - 11426, 0, 1681, 118789, 1204, 3755, 64661, 7235, 10170, 3966, 8911, 0, - 41841, 43338, 0, 0, 5726, 64915, 42175, 0, 0, 41497, 65044, 0, 2851, - 43017, 0, 0, 4373, 0, 0, 9587, 1789, 6671, 0, 3100, 0, 65360, 0, 0, 0, - 64922, 0, 8190, 12083, 0, 0, 6506, 64312, 74374, 2368, 0, 4419, 0, 0, - 3439, 1825, 1192, 120106, 8891, 3080, 120228, 2347, 5430, 0, 8990, 2848, - 0, 0, 0, 249, 0, 0, 0, 120658, 0, 0, 8883, 917802, 728, 68178, 995, 0, 0, - 64826, 0, 917798, 0, 0, 19945, 8091, 558, 0, 12273, 0, 0, 12112, 0, 0, 0, - 74419, 12335, 120104, 917795, 3443, 3129, 0, 12913, 65445, 0, 64891, 0, - 7725, 0, 0, 0, 8624, 0, 12446, 43295, 0, 41894, 0, 6277, 41672, 41893, - 10010, 0, 3540, 0, 835, 0, 0, 119868, 74408, 0, 73959, 5426, 4258, 0, 0, - 5424, 0, 8283, 0, 5434, 0, 0, 19917, 11408, 0, 11947, 0, 1404, 3095, - 11432, 0, 3464, 6486, 4819, 0, 0, 570, 8095, 3672, 119864, 1498, 0, 0, 0, - 431, 0, 0, 0, 0, 68167, 0, 13096, 0, 0, 0, 9516, 0, 5268, 0, 0, 0, 4450, - 120723, 11547, 64358, 0, 356, 3477, 227, 10488, 0, 382, 11418, 0, 0, 0, - 0, 0, 0, 6484, 2541, 66039, 0, 0, 0, 3549, 0, 9110, 119665, 2743, 0, - 43290, 194812, 9097, 0, 43015, 8782, 0, 776, 2524, 0, 8573, 0, 0, 0, 0, - 120572, 64944, 8952, 3856, 118818, 0, 5872, 6495, 0, 0, 0, 0, 0, 120733, - 12849, 3953, 1897, 0, 0, 11994, 4339, 74556, 0, 67843, 0, 0, 0, 74251, 0, - 5228, 0, 7868, 43184, 0, 0, 73986, 0, 0, 43022, 0, 1162, 0, 2671, 0, 0, - 0, 0, 118865, 4553, 73811, 0, 195005, 0, 0, 19921, 74331, 11424, 0, 4567, - 41891, 0, 0, 119056, 4820, 65239, 194662, 0, 0, 43042, 119212, 1377, 0, - 4897, 42821, 9250, 0, 4438, 64385, 0, 1753, 11331, 6147, 0, 43282, 8833, - 0, 0, 6504, 194667, 126979, 10719, 0, 1898, 1413, 42443, 0, 802, 12141, - 0, 0, 6648, 10671, 2528, 0, 64789, 9169, 838, 127092, 120697, 844, 5014, - 0, 256, 0, 9990, 0, 43301, 0, 7542, 65464, 9726, 0, 6489, 10048, 74326, - 0, 66573, 0, 0, 0, 11761, 194655, 0, 41094, 0, 0, 0, 0, 0, 6196, 6945, - 194628, 194890, 194631, 120491, 11816, 194943, 5733, 0, 0, 0, 41098, 0, - 41093, 0, 66626, 588, 9760, 0, 194717, 1238, 200, 0, 1660, 73916, 0, - 118905, 74362, 0, 0, 194651, 0, 0, 3394, 0, 120668, 0, 0, 0, 66219, 0, - 43284, 0, 7817, 1841, 11055, 120533, 194979, 194982, 1669, 10776, 194981, - 7701, 194980, 0, 194995, 1732, 4030, 0, 3963, 66611, 0, 41768, 6491, 0, - 65324, 914, 65323, 8071, 3538, 0, 0, 0, 0, 74367, 7614, 0, 11819, 0, - 12009, 12399, 0, 67852, 65537, 0, 10841, 0, 5301, 0, 0, 5734, 8960, 0, 0, - 65317, 0, 0, 0, 0, 12304, 0, 0, 65315, 0, 0, 0, 0, 0, 119621, 0, 74536, - 12447, 64486, 0, 0, 0, 0, 0, 0, 42767, 10915, 0, 12007, 0, 120520, 0, - 194878, 0, 0, 0, 8629, 0, 43168, 41872, 0, 4496, 0, 0, 0, 0, 0, 0, 0, - 64730, 0, 66714, 0, 0, 0, 65596, 0, 11416, 4280, 119018, 8765, 12784, - 7792, 1393, 0, 67871, 74386, 0, 8233, 43572, 0, 6683, 0, 3442, 12144, - 2841, 12543, 0, 1473, 42820, 64329, 917772, 0, 0, 6488, 357, 1048, 41100, - 0, 41104, 0, 41099, 1054, 119065, 1040, 65450, 0, 4434, 1069, 0, 0, - 74231, 917765, 0, 0, 0, 9693, 41943, 0, 41931, 41759, 12757, 4353, 0, - 1059, 9790, 8995, 0, 0, 65937, 0, 41764, 10646, 0, 118833, 0, 0, 74830, - 0, 12743, 0, 6480, 917761, 41779, 42580, 66601, 12207, 119619, 10986, - 66602, 11312, 64807, 0, 0, 41767, 0, 0, 43020, 0, 3955, 74254, 0, 0, - 917861, 0, 120735, 9770, 9246, 12230, 0, 0, 0, 10448, 41783, 41786, - 127093, 12797, 2755, 64571, 194912, 194927, 4857, 0, 4428, 12794, 73755, - 0, 0, 0, 0, 0, 5747, 194720, 0, 7978, 41092, 74571, 0, 11924, 74205, - 42144, 65015, 0, 563, 0, 0, 12798, 11271, 57, 0, 0, 0, 119043, 0, 0, - 43137, 694, 0, 9876, 0, 119168, 0, 0, 64537, 0, 277, 74385, 7229, 74459, - 0, 0, 64634, 64811, 8757, 119087, 0, 1574, 194633, 0, 2525, 4852, 5749, - 0, 13027, 42824, 120574, 1039, 9801, 10155, 5745, 188, 41858, 11592, 0, - 74015, 0, 41853, 4858, 0, 0, 436, 4771, 0, 2786, 0, 4856, 8051, 0, - 119609, 0, 9644, 0, 0, 0, 194916, 120732, 66710, 118834, 0, 73906, 0, - 127114, 0, 10234, 5843, 11939, 0, 42157, 0, 3157, 194918, 0, 0, 3504, - 119178, 0, 10822, 5149, 66029, 10226, 65142, 0, 3594, 42424, 0, 40, + 0, 0, 0, 0, 0, 0, 4220, 10725, 10433, 0, 68395, 4987, 64519, 0, 0, 0, 0, + 0, 10970, 11733, 0, 120792, 0, 19944, 0, 9009, 8551, 0, 11468, 64636, + 7575, 0, 2724, 0, 0, 12313, 119949, 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, 0, 11593, 43007, 4478, 66178, 0, 0, + 2744, 0, 4477, 118964, 814, 42066, 66183, 66204, 66194, 119961, 66198, + 41880, 66188, 66197, 78148, 11955, 66190, 66191, 41111, 66189, 73788, + 7788, 4847, 0, 0, 0, 0, 0, 1581, 6535, 78161, 12954, 430, 78160, 55259, + 78158, 194938, 5278, 4945, 42883, 4950, 0, 68625, 0, 7269, 0, 5964, + 12908, 0, 0, 74764, 74477, 119146, 194936, 4949, 0, 443, 0, 4944, 5467, + 119603, 0, 65137, 6044, 65392, 0, 4213, 0, 41303, 0, 194931, 0, 41306, + 73984, 2698, 127531, 0, 12072, 3193, 0, 41304, 824, 0, 12091, 78893, + 78894, 119816, 4673, 64804, 4678, 119820, 119819, 65059, 0, 6739, 0, + 5481, 3490, 1199, 119811, 8356, 119829, 119832, 4677, 12688, 3102, 0, + 4672, 78173, 78175, 5531, 68367, 42575, 78170, 78166, 4674, 4548, 44005, + 0, 68658, 119946, 8025, 68630, 127024, 1855, 0, 68669, 0, 119942, 127554, + 0, 0, 119652, 2745, 11797, 0, 0, 68643, 4654, 0, 0, 68638, 73993, 10525, + 4649, 65209, 0, 0, 4648, 43080, 0, 0, 0, 6246, 64950, 7828, 4650, 6777, + 6776, 6775, 4653, 7822, 78005, 0, 43187, 8669, 0, 6821, 65093, 0, 78881, + 2716, 0, 0, 0, 0, 68369, 0, 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, 0, 0, 0, 64904, 9026, 10833, 74864, 7547, 4867, 0, + 10008, 10222, 3054, 194956, 9744, 78860, 7605, 4622, 119656, 0, 0, 0, 0, + 0, 9045, 78888, 4225, 19926, 78887, 12880, 65307, 4617, 78883, 0, 41732, + 4616, 10518, 10423, 10359, 0, 5958, 0, 0, 4215, 9789, 917941, 4321, 4621, + 0, 41313, 522, 5368, 0, 65803, 0, 5366, 12201, 5372, 0, 0, 0, 7720, 7390, + 2696, 0, 0, 4638, 0, 1790, 78242, 5965, 64363, 66569, 68646, 194968, + 5376, 1835, 5335, 194966, 0, 4633, 0, 68119, 1180, 4632, 0, 5387, 5333, + 0, 0, 42094, 5331, 4634, 11928, 0, 5338, 4637, 0, 5971, 42414, 0, 1268, + 65097, 42361, 0, 0, 73853, 1427, 0, 0, 5970, 3431, 0, 10358, 10422, 4758, + 0, 1608, 2738, 0, 10455, 4753, 74026, 11344, 4222, 6240, 5231, 74384, 0, + 68377, 6248, 0, 0, 0, 42318, 0, 5229, 4757, 0, 0, 2728, 4752, 64563, + 65235, 5234, 0, 0, 0, 10713, 0, 0, 2622, 7460, 0, 0, 0, 8954, 74760, + 65189, 2632, 0, 10108, 1011, 5574, 1853, 2709, 65139, 5577, 0, 0, 118871, + 68641, 8965, 7635, 42177, 5316, 0, 5314, 6451, 5572, 0, 5312, 0, 5525, + 5330, 5319, 0, 0, 194907, 44003, 0, 0, 0, 120498, 0, 195009, 0, 74022, 0, + 64609, 0, 120634, 0, 5721, 0, 5519, 8632, 66465, 11267, 73961, 0, 5720, + 0, 1692, 4219, 4610, 8696, 4305, 0, 4609, 43478, 4614, 541, 0, 5287, + 5309, 5285, 68389, 5961, 4647, 56, 4216, 10577, 41381, 601, 4613, 0, 0, + 0, 4608, 64260, 41124, 5190, 67628, 0, 68145, 7086, 0, 119243, 67620, 0, + 2734, 11074, 0, 67627, 43593, 0, 67625, 5960, 0, 8992, 65293, 0, 1782, + 67622, 68114, 119939, 0, 68180, 5501, 119952, 42508, 7442, 43665, 359, + 41253, 68392, 6239, 119956, 41256, 0, 68134, 0, 74209, 0, 9346, 118904, + 41254, 0, 43291, 3767, 5737, 0, 4865, 0, 5740, 917997, 5736, 4368, 0, + 7193, 68137, 0, 5739, 41024, 4866, 0, 73904, 0, 4869, 120563, 0, 4223, 0, + 6650, 0, 0, 0, 0, 4870, 0, 68661, 6716, 78176, 68667, 68382, 68676, 0, + 10122, 4864, 66568, 4144, 7937, 0, 6245, 68652, 2732, 42734, 745, 0, + 195097, 0, 4777, 7821, 0, 68631, 42775, 0, 194954, 0, 3097, 0, 5966, 0, + 4778, 0, 10863, 0, 4781, 0, 64407, 0, 0, 8577, 0, 68196, 43285, 10216, + 4782, 0, 0, 120757, 68618, 12325, 43056, 8717, 0, 0, 4776, 0, 11492, + 8700, 0, 13176, 68363, 10426, 0, 917599, 10362, 0, 1715, 4849, 8242, + 9561, 73922, 43278, 42635, 0, 0, 5963, 917926, 0, 0, 4850, 0, 1607, 466, + 4853, 118995, 4854, 0, 5164, 0, 1350, 5124, 64420, 1993, 5362, 8471, + 2708, 0, 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, 0, 303, 0, 0, 0, 2437, + 0, 4221, 4844, 118869, 0, 0, 0, 0, 0, 43292, 0, 2441, 10739, 65090, 0, + 119327, 0, 2451, 2714, 119326, 0, 43379, 4937, 43376, 753, 5849, 10597, + 43089, 11722, 9248, 0, 42879, 11725, 0, 0, 2726, 3107, 73958, 4941, + 64937, 119233, 9140, 1408, 5261, 4607, 0, 181, 0, 4942, 9539, 4938, 0, + 65201, 5259, 9369, 64185, 4142, 5257, 0, 0, 4964, 5264, 64178, 64177, + 12979, 41411, 64182, 64181, 64180, 64179, 9482, 4873, 41231, 1822, 42526, + 0, 12758, 3865, 0, 0, 10500, 0, 0, 78028, 0, 9830, 43642, 389, 10893, + 7521, 0, 4872, 5463, 0, 3125, 9567, 0, 4878, 5459, 4604, 0, 9557, 5465, + 68617, 0, 11494, 0, 9563, 10865, 74570, 43279, 64186, 0, 78714, 64191, + 64190, 8898, 64188, 0, 41030, 78836, 0, 917835, 78820, 917834, 0, 78805, + 41031, 78801, 11960, 6745, 3082, 0, 78539, 73919, 10573, 41744, 7079, + 5856, 127043, 5163, 78809, 0, 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, 0, 42156, 78688, 0, + 64193, 64192, 78000, 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, 0, 64169, 64168, 64949, 10972, + 10251, 10247, 42768, 715, 64161, 43299, 9453, 5348, 10943, 120378, 0, + 11352, 550, 9910, 0, 0, 66579, 11551, 0, 0, 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, + 78196, 78192, 68136, 78190, 43412, 5064, 2431, 0, 9450, 1809, 0, 78200, + 78201, 5062, 1264, 64817, 13254, 11697, 0, 9785, 64716, 0, 3933, 74559, + 4740, 7954, 0, 0, 42609, 0, 74175, 0, 127016, 0, 0, 42130, 0, 5151, + 917829, 917823, 0, 0, 0, 7620, 3800, 65122, 0, 0, 8355, 7854, 0, 954, + 64927, 4185, 41045, 0, 41438, 41439, 68666, 10711, 4593, 0, 120584, 0, + 64774, 8053, 10532, 66727, 0, 0, 0, 64759, 6381, 5166, 9888, 0, 5148, + 42834, 0, 78205, 78206, 64140, 78204, 64131, 3119, 917814, 0, 3060, + 64135, 9986, 0, 77876, 636, 11698, 0, 0, 9916, 11701, 7836, 42741, 64137, + 8320, 78640, 8863, 0, 119960, 1477, 43289, 0, 74358, 8618, 0, 9908, 0, 0, + 0, 3937, 12312, 0, 0, 0, 64781, 912, 6349, 4536, 119963, 74532, 0, 6244, + 0, 194580, 3935, 120665, 0, 0, 11950, 5392, 42248, 65129, 68656, 5397, 0, + 12046, 12599, 0, 0, 5395, 0, 5393, 354, 68615, 119948, 78503, 0, 0, + 42039, 0, 0, 64142, 626, 0, 5895, 0, 0, 5780, 0, 0, 0, 0, 0, 43297, 0, + 4311, 4644, 8818, 0, 0, 0, 73818, 3918, 66452, 3797, 1644, 119944, 9658, + 4140, 11385, 65947, 6455, 9030, 813, 119945, 68131, 4146, 119957, 5360, + 2466, 0, 67669, 0, 6249, 42117, 0, 0, 0, 0, 74046, 120583, 4911, 988, + 917807, 0, 0, 43061, 7054, 64147, 0, 64920, 68195, 6698, 118933, 120349, + 0, 0, 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, 917866, 73736, 0, 9825, 6448, 6715, 127008, 4831, 0, 0, 0, + 5300, 4741, 42108, 0, 64159, 4736, 64148, 0, 849, 0, 78491, 43288, 0, + 66620, 0, 194920, 65549, 9496, 64598, 118866, 0, 7876, 68132, 917872, + 3928, 917870, 43378, 10706, 7198, 0, 4842, 12053, 0, 0, 4841, 0, 4171, + 12008, 6251, 3923, 1490, 0, 119591, 0, 40972, 5245, 0, 10114, 42001, + 41888, 4845, 8332, 40974, 64347, 4840, 9077, 78346, 1747, 917849, 4825, + 69240, 917852, 68655, 0, 0, 0, 0, 68628, 0, 9850, 118937, 367, 1472, + 917859, 6687, 1274, 0, 5905, 12339, 8919, 73953, 10907, 65261, 11023, + 119559, 4830, 9134, 78666, 64126, 43011, 0, 0, 64101, 0, 0, 4824, 10614, + 120390, 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, 120385, 0, 0, 0, 119053, 0, 12765, 64118, 126998, 12962, + 0, 0, 4017, 12827, 5241, 120392, 0, 41118, 3924, 0, 11366, 917843, 0, 0, + 917846, 41116, 917844, 917564, 0, 11363, 12057, 11917, 1567, 74000, 4721, + 0, 66202, 8957, 4139, 0, 0, 0, 0, 0, 12740, 0, 4722, 6816, 0, 12759, + 4725, 0, 4726, 0, 0, 0, 917904, 917905, 0, 12755, 12762, 4015, 0, 8052, + 476, 0, 0, 0, 64212, 41020, 1382, 64209, 64216, 64215, 64214, 1656, + 41831, 0, 0, 41843, 8720, 3908, 1452, 13111, 0, 64067, 0, 8552, 64113, + 41845, 3849, 78732, 66232, 9778, 120066, 5891, 7064, 55, 9948, 917911, 0, + 0, 7935, 67586, 0, 1114, 0, 67585, 78675, 120053, 120050, 120051, 3938, + 120057, 65417, 64717, 120060, 120061, 65415, 120059, 6292, 65303, 7955, + 6452, 4713, 917887, 66249, 917885, 917890, 917891, 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, 0, 12006, 0, 0, 0, 0, 0, 65414, 6454, 1229, 0, 66437, 66025, 78699, + 0, 42500, 120508, 4809, 9623, 917874, 78694, 917880, 917877, 917878, + 65405, 68159, 917881, 917882, 5365, 4545, 8901, 917566, 119555, 4813, 0, + 0, 5925, 4808, 64330, 0, 65475, 118940, 0, 4814, 0, 4810, 0, 0, 64928, + 10543, 0, 3522, 0, 414, 65404, 0, 0, 6456, 73820, 0, 6691, 42193, 0, 0, + 0, 74495, 0, 0, 0, 118820, 9751, 65407, 0, 11770, 3919, 0, 0, 65061, 0, + 0, 0, 12235, 0, 0, 195025, 64092, 0, 64080, 0, 64090, 0, 0, 10162, 10310, + 0, 8454, 0, 42038, 387, 41363, 12737, 0, 4780, 43368, 0, 64310, 64621, + 6732, 0, 0, 0, 0, 0, 8896, 0, 375, 6976, 66582, 119005, 0, 0, 0, 119202, + 119203, 12526, 43120, 2315, 0, 1938, 119197, 0, 4529, 119200, 119201, + 119198, 119199, 0, 0, 0, 13150, 64492, 0, 0, 0, 12902, 0, 42891, 66327, + 74298, 0, 10799, 0, 2587, 66372, 0, 4193, 120334, 4241, 0, 7998, 0, 0, 0, + 0, 2316, 118821, 0, 0, 0, 64297, 74799, 0, 74140, 0, 5373, 0, 0, 3762, + 10015, 0, 119232, 0, 41590, 0, 0, 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, 0, 68138, 13072, 1894, 0, 0, 65478, 43310, 7231, 0, + 11773, 0, 0, 0, 0, 2551, 0, 6453, 10200, 6235, 0, 119237, 0, 0, 4470, + 119613, 0, 7780, 5369, 118958, 5249, 0, 5367, 8756, 0, 0, 5377, 120585, + 68143, 1688, 78245, 0, 0, 0, 0, 0, 44020, 6808, 41319, 1300, 10650, + 41692, 64505, 4668, 0, 119624, 1465, 10850, 3943, 0, 41205, 41315, 0, 0, + 0, 5352, 0, 0, 8839, 41314, 7384, 7785, 41204, 0, 41209, 0, 0, 43607, 0, + 0, 5420, 3897, 0, 0, 74417, 4018, 0, 68127, 0, 0, 0, 0, 127526, 2561, + 68621, 3542, 41915, 12076, 7951, 68152, 118857, 5303, 6276, 1706, 0, + 78751, 74116, 0, 65150, 41819, 0, 73951, 10847, 41822, 9985, 860, 0, + 10506, 0, 0, 10753, 10830, 0, 615, 64490, 7574, 0, 77922, 0, 12909, + 43016, 64559, 127028, 0, 0, 0, 2020, 0, 4022, 0, 0, 77923, 0, 41691, 0, + 0, 74329, 0, 64622, 9070, 0, 68411, 3911, 42829, 43122, 1033, 74440, 0, + 7000, 3904, 0, 0, 0, 0, 127012, 13123, 10846, 3450, 0, 7397, 118807, 0, + 42778, 10000, 41088, 449, 0, 3777, 68458, 0, 9636, 0, 10738, 0, 9367, + 593, 41085, 3999, 65226, 41713, 12764, 0, 64409, 3596, 0, 0, 9763, + 120280, 120283, 12347, 124, 12981, 41127, 2092, 0, 0, 0, 0, 10820, 43987, + 0, 0, 1769, 41715, 2463, 78489, 0, 12770, 0, 1538, 0, 43124, 0, 195058, + 7795, 120300, 0, 4828, 1258, 0, 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, 0, + 1511, 9324, 78211, 10519, 66331, 3454, 19930, 0, 41019, 0, 0, 65292, + 6822, 12862, 0, 0, 42143, 41828, 78207, 65531, 78208, 118879, 55223, 0, + 0, 41826, 8865, 6402, 0, 13279, 7917, 120340, 0, 7733, 0, 4998, 0, 0, + 41950, 0, 4268, 0, 0, 0, 4013, 0, 10881, 0, 0, 0, 74788, 2014, 0, 0, + 9765, 0, 0, 0, 195059, 78357, 65281, 0, 10949, 0, 0, 0, 2015, 0, 0, 0, + 66318, 43233, 0, 42517, 0, 0, 0, 12698, 8094, 43445, 65909, 6474, 794, 0, + 12656, 0, 119353, 0, 1665, 0, 4833, 0, 119351, 0, 0, 189, 12611, 0, 0, + 2859, 4838, 0, 4834, 65078, 0, 0, 4837, 0, 770, 0, 811, 0, 41042, 917551, + 41318, 64427, 0, 0, 78848, 3895, 0, 74341, 3976, 0, 42859, 10193, 3116, + 7747, 0, 0, 0, 0, 0, 43686, 78846, 41877, 0, 2871, 64614, 0, 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, 0, 0, 0, + 119248, 394, 3088, 0, 0, 0, 3991, 64391, 0, 0, 424, 66328, 1999, 0, + 73914, 0, 0, 0, 0, 42231, 8246, 0, 0, 0, 41840, 0, 2377, 1298, 64011, + 12572, 11318, 12557, 12559, 12570, 8488, 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, 0, 9655, 0, 2004, 9096, 9782, 0, 9172, 0, 19965, + 0, 5955, 67666, 1108, 0, 74773, 0, 0, 64782, 3926, 0, 65210, 8798, 0, 0, + 1392, 0, 0, 917557, 10606, 8065, 118805, 10353, 10417, 0, 0, 64524, 0, + 4019, 0, 0, 43280, 8219, 68402, 1812, 0, 0, 0, 0, 42410, 74448, 119132, + 6054, 10697, 3169, 42297, 42322, 10642, 3909, 9950, 0, 0, 0, 68678, 0, 0, + 1049, 0, 65707, 2304, 41806, 0, 42336, 3921, 0, 11775, 64760, 11766, + 1038, 42303, 9823, 127278, 69236, 4008, 64004, 8773, 10733, 36, 0, 5153, + 41805, 0, 73735, 763, 41808, 64910, 0, 2009, 0, 0, 0, 9640, 119951, 0, + 120695, 8621, 0, 12852, 3031, 0, 64361, 0, 182, 194718, 0, 0, 119950, 0, + 9058, 366, 0, 9892, 5969, 11754, 10848, 4570, 65301, 44013, 4255, 0, + 10102, 41189, 4003, 41026, 68109, 13293, 41192, 0, 0, 42251, 0, 42534, + 65179, 11287, 6128, 0, 11034, 10923, 64423, 0, 65506, 0, 0, 74083, 0, + 9932, 0, 0, 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, 127116, + 4705, 716, 78004, 0, 4704, 120040, 120270, 42241, 161, 43977, 74546, + 66214, 4706, 0, 0, 42672, 4709, 10680, 0, 43293, 0, 0, 119164, 120328, 0, + 0, 1700, 119223, 0, 0, 0, 4004, 0, 10968, 43296, 0, 8506, 0, 0, 126996, + 1005, 937, 78216, 4734, 2870, 0, 78218, 0, 7463, 4729, 0, 235, 1384, + 4728, 0, 120420, 120644, 120421, 8109, 43105, 0, 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, 0, 73976, + 120305, 43371, 6941, 119349, 13205, 13211, 5801, 12769, 65905, 41697, + 1283, 120302, 4779, 0, 3719, 4006, 0, 19957, 0, 2021, 119332, 0, 0, + 43028, 65493, 41838, 3875, 5962, 64341, 119339, 9814, 43457, 5827, 3314, + 7787, 78234, 65494, 68153, 0, 0, 120636, 64531, 120692, 0, 0, 0, 66316, + 65467, 5771, 41298, 0, 9742, 521, 0, 10800, 0, 8404, 194625, 483, 7096, + 7089, 66323, 928, 0, 0, 119018, 10599, 11586, 3989, 10971, 0, 65782, + 9841, 8843, 12145, 0, 10074, 78548, 0, 3769, 0, 0, 0, 0, 9573, 0, 65290, + 8849, 0, 65855, 65112, 1796, 120505, 0, 78555, 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, 0, 7595, 42588, 7600, 120121, + 66035, 0, 0, 65851, 42607, 0, 0, 3168, 0, 42134, 0, 2370, 2846, 0, 0, 0, + 120132, 0, 1836, 0, 0, 119137, 3740, 0, 6290, 65374, 120451, 65923, 3944, + 66628, 120434, 0, 6135, 3118, 74265, 119093, 120446, 0, 0, 8127, 8975, + 64739, 7943, 0, 0, 10618, 2584, 0, 0, 0, 9998, 0, 0, 0, 0, 0, 6204, 0, 0, + 8279, 8776, 64954, 4975, 74809, 120130, 4267, 0, 42206, 0, 0, 195046, + 65700, 66562, 0, 64645, 0, 0, 0, 12586, 0, 9242, 0, 0, 4523, 5842, 10495, + 3122, 0, 7793, 78275, 9328, 0, 0, 12604, 0, 6615, 67650, 0, 3986, 44025, + 0, 8912, 64555, 7409, 0, 0, 9541, 78276, 0, 11275, 8540, 11498, 0, 0, + 41040, 2459, 0, 13060, 41041, 74413, 0, 0, 0, 68427, 10450, 12551, 41043, + 7020, 120353, 3765, 0, 0, 1606, 120348, 120351, 3093, 68436, 0, 0, + 120649, 0, 0, 4312, 74091, 120337, 120336, 11923, 4023, 120333, 5763, + 120335, 4827, 10894, 12810, 64406, 118785, 4455, 74321, 433, 119620, + 66660, 2499, 0, 0, 0, 11973, 13089, 4293, 120329, 42224, 42758, 12196, + 42837, 42226, 119319, 0, 119126, 5817, 0, 55277, 3120, 9797, 0, 0, 0, + 10389, 0, 0, 4895, 65358, 0, 4359, 585, 0, 3509, 0, 486, 4290, 5758, 0, + 0, 0, 7004, 0, 65880, 0, 119048, 2380, 11380, 0, 0, 2376, 0, 917847, 0, + 5197, 127046, 127047, 127048, 2366, 127050, 127051, 120554, 120045, 0, 0, + 0, 0, 0, 0, 0, 74188, 0, 0, 0, 120047, 0, 0, 0, 120049, 0, 1847, 0, + 10339, 0, 42384, 0, 4227, 74158, 0, 0, 43032, 0, 42365, 0, 12671, 11384, + 0, 0, 0, 64797, 0, 5820, 0, 120052, 120065, 0, 120064, 120650, 42137, + 9893, 2754, 12664, 120063, 0, 7377, 0, 41799, 65530, 1711, 12984, 43039, + 3114, 6255, 0, 118938, 0, 10853, 926, 0, 74184, 0, 120055, 0, 43175, 0, + 43037, 41798, 41035, 11583, 0, 41801, 119088, 0, 520, 4200, 12699, 8331, + 0, 3091, 41034, 127353, 0, 8360, 0, 78044, 321, 4229, 64543, 0, 65563, 0, + 917974, 2861, 0, 10095, 0, 0, 0, 1861, 0, 0, 0, 0, 43041, 0, 0, 0, 3859, + 12181, 41660, 8209, 0, 73867, 12973, 0, 74757, 127514, 41658, 0, 0, 5760, + 0, 743, 4414, 120766, 0, 42632, 917973, 65161, 73896, 0, 0, 1405, 119063, + 43220, 43341, 0, 19919, 0, 64532, 65367, 43710, 0, 0, 3513, 0, 118883, + 43342, 119064, 65529, 65364, 0, 0, 6485, 1397, 0, 41986, 0, 0, 0, 74097, + 0, 7471, 12079, 0, 12682, 43287, 0, 0, 0, 0, 0, 0, 1099, 10490, 0, 10501, + 65181, 74463, 0, 464, 41624, 65283, 67663, 78222, 1346, 0, 917631, 64724, + 64897, 423, 1818, 65144, 0, 8272, 0, 19911, 4218, 3087, 64960, 127234, + 43564, 0, 0, 9584, 10465, 0, 74359, 12626, 9106, 0, 42642, 0, 64750, + 9390, 0, 41797, 0, 0, 265, 41795, 64666, 0, 43530, 2752, 0, 0, 0, 59, 0, + 0, 0, 0, 77873, 41810, 0, 7010, 0, 41809, 41495, 119364, 0, 42252, 42213, + 8009, 3305, 43033, 511, 119320, 66255, 13127, 120067, 0, 0, 0, 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, 0, 3452, 11906, + 9581, 1385, 3098, 0, 119013, 43340, 0, 41033, 6493, 42626, 0, 0, 11426, + 0, 1681, 118789, 1204, 3755, 64661, 7235, 10170, 3966, 8911, 0, 41841, + 43338, 0, 0, 5726, 64915, 42175, 0, 0, 41497, 65044, 0, 2851, 43017, 0, + 0, 4373, 78058, 0, 9587, 1789, 6671, 0, 3100, 0, 65360, 0, 127510, 0, + 64922, 0, 8190, 12083, 0, 0, 6506, 64312, 74374, 2368, 0, 4419, 0, + 119125, 3439, 1825, 1192, 120106, 8891, 3080, 120228, 2347, 5430, 0, + 8990, 2848, 0, 0, 0, 249, 0, 0, 0, 120658, 0, 0, 8883, 917802, 728, + 68178, 995, 0, 0, 64826, 0, 917798, 0, 0, 19945, 8091, 558, 0, 12273, + 194814, 0, 12112, 0, 0, 0, 74419, 12335, 120104, 917795, 3443, 3129, 0, + 2102, 65445, 78258, 64891, 0, 7725, 0, 78255, 0, 8624, 69246, 12446, + 43295, 0, 41894, 0, 6277, 41672, 41893, 10010, 0, 3540, 0, 835, 0, 69816, + 119868, 74408, 0, 73959, 5426, 4258, 0, 0, 5424, 0, 8283, 0, 5434, 0, 0, + 19917, 11408, 0, 11947, 0, 1404, 3095, 11432, 194813, 3464, 6486, 4819, + 0, 0, 570, 8095, 3672, 119864, 1498, 67866, 0, 0, 431, 0, 0, 0, 0, 68167, + 0, 13096, 0, 0, 43408, 9516, 0, 5268, 42230, 42220, 0, 4450, 120723, + 11547, 43417, 0, 356, 3477, 227, 10488, 68203, 382, 11418, 0, 0, 0, 0, 0, + 0, 6484, 2541, 66039, 0, 78718, 0, 3549, 0, 9110, 119665, 2743, 0, 43290, + 194812, 9097, 0, 43015, 8782, 0, 776, 2524, 42707, 8573, 0, 0, 0, 0, + 42694, 64944, 8952, 3856, 118818, 0, 5872, 6495, 0, 0, 0, 0, 0, 120733, + 12849, 3953, 1897, 0, 65094, 11994, 4339, 74556, 0, 67843, 0, 0, 0, + 68473, 74104, 5228, 0, 7868, 43184, 0, 0, 73986, 43438, 0, 43022, 0, + 1162, 0, 2671, 0, 0, 0, 0, 118865, 4553, 73811, 0, 195005, 0, 0, 19921, + 74331, 11424, 195006, 4567, 41891, 0, 0, 55249, 4820, 65239, 194662, 0, + 0, 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, 127092, 120697, 844, 5014, 0, 256, 0, 9990, 0, 42739, + 0, 7542, 65464, 9726, 0, 6489, 10048, 74326, 78719, 66573, 0, 78724, + 78712, 11761, 194655, 0, 41094, 0, 0, 0, 0, 0, 6196, 6945, 194628, + 194890, 194631, 120491, 11816, 194943, 5733, 0, 0, 0, 41098, 0, 41093, 0, + 66626, 588, 9760, 0, 194717, 1238, 200, 0, 1660, 73916, 0, 118905, 74362, + 0, 0, 194651, 0, 0, 3394, 194894, 120668, 0, 0, 0, 66219, 0, 43284, + 194657, 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, 78713, 65328, 0, 74367, 7614, 0, + 11819, 0, 12009, 12399, 0, 67852, 65537, 0, 10841, 43430, 5301, 0, 0, + 5734, 8960, 0, 127527, 65317, 77880, 0, 0, 0, 12304, 0, 0, 65315, 0, 0, + 0, 0, 0, 119621, 0, 74536, 12447, 64486, 0, 0, 0, 0, 0, 0, 42767, 10915, + 0, 12007, 43695, 120520, 11975, 194878, 0, 0, 2555, 8629, 0, 43168, + 41872, 43706, 4496, 194879, 0, 0, 0, 0, 0, 0, 64730, 0, 66714, 68222, 0, + 0, 65596, 0, 11416, 4280, 67655, 8765, 12784, 7792, 1393, 127242, 67871, + 74386, 0, 8233, 43572, 0, 6683, 0, 3442, 12144, 2841, 12543, 0, 1473, + 42820, 64329, 917772, 0, 68642, 6488, 357, 1048, 41100, 0, 41104, 0, + 41099, 1054, 119065, 1040, 65450, 0, 4434, 1069, 0, 118862, 74231, + 917765, 0, 0, 0, 9693, 41943, 0, 41931, 41759, 12757, 4353, 0, 1059, + 9790, 8995, 0, 0, 65937, 0, 41764, 10646, 0, 118833, 0, 0, 74830, 78569, + 12743, 0, 6480, 917761, 41779, 42580, 66601, 12207, 119619, 6335, 66602, + 11312, 64807, 0, 0, 41767, 0, 0, 43020, 0, 3955, 74254, 0, 0, 917861, 0, + 77926, 9770, 9246, 12230, 0, 0, 0, 10448, 41783, 41786, 127093, 12797, + 2755, 64571, 78578, 194927, 4857, 0, 4428, 12794, 73755, 0, 78574, 0, 0, + 0, 5747, 78825, 0, 7978, 41092, 74571, 0, 11924, 74205, 42144, 65015, 0, + 563, 0, 0, 12798, 11271, 57, 0, 0, 917860, 119043, 0, 0, 43137, 694, 0, + 9876, 0, 119168, 0, 78822, 64537, 0, 277, 74385, 7229, 12761, 0, 0, + 13025, 64811, 8757, 78824, 0, 1574, 7381, 0, 2525, 4852, 5749, 68465, + 13027, 42824, 120574, 1039, 9801, 10155, 5745, 188, 41858, 11592, 0, + 74015, 9055, 41853, 4858, 917780, 0, 436, 4771, 0, 2786, 0, 4856, 8051, + 0, 119609, 0, 9644, 0, 0, 0, 194916, 120732, 66710, 118834, 0, 73906, 0, + 127114, 0, 10234, 5843, 11939, 0, 42157, 0, 3157, 194918, 68393, 0, 3504, + 119178, 0, 10822, 5149, 66029, 10226, 65142, 0, 3594, 42424, 194959, 40, 12657, 0, 0, 386, 0, 8834, 0, 12815, 43574, 0, 73907, 0, 74196, 7220, - 74504, 0, 74316, 0, 0, 4304, 74503, 8160, 0, 194753, 0, 0, 0, 1348, 0, 0, - 0, 13303, 0, 0, 194755, 7599, 1278, 0, 13269, 0, 0, 74387, 0, 0, 74492, - 6097, 7568, 8780, 4982, 0, 74501, 194763, 0, 194762, 2672, 3735, 194735, - 13138, 42266, 9484, 10724, 41202, 119024, 0, 0, 0, 9487, 0, 194765, 3842, - 195034, 195056, 12442, 6193, 9791, 0, 0, 42516, 7228, 7559, 74803, - 194689, 194851, 11399, 119219, 194856, 194855, 0, 194857, 3604, 0, 0, 0, - 0, 0, 42507, 1962, 194861, 194696, 42505, 11660, 0, 0, 0, 6995, 74173, - 5437, 74174, 10669, 8702, 7964, 194706, 0, 199, 194843, 4105, 194845, - 194701, 194847, 194710, 119875, 13148, 7560, 0, 9226, 0, 195070, 6472, - 65814, 73954, 0, 4724, 0, 0, 9191, 0, 0, 0, 0, 195024, 10196, 7886, 0, - 6585, 0, 6680, 195042, 0, 195051, 6679, 74412, 0, 194866, 74421, 11382, - 0, 0, 0, 0, 194833, 194832, 6681, 194834, 12693, 194836, 194839, 194838, - 194841, 194840, 65442, 119610, 118887, 12166, 74415, 66248, 194816, 0, - 194818, 194817, 194820, 194819, 5297, 7042, 13284, 6112, 7968, 194825, - 73929, 194738, 194736, 65746, 0, 74409, 74389, 194826, 4342, 42839, - 194831, 1677, 0, 0, 0, 917855, 11091, 11011, 2719, 0, 0, 0, 64495, 0, 0, - 7585, 65169, 42845, 4308, 917858, 74177, 7505, 543, 64916, 64736, 0, 0, - 66670, 0, 118922, 19911, 0, 43158, 7902, 0, 65265, 194639, 0, 0, 0, 0, 0, + 74504, 0, 74316, 0, 77932, 4304, 74503, 8160, 78707, 194753, 0, 0, 0, + 1348, 0, 78597, 0, 13303, 0, 0, 194755, 7599, 1278, 43616, 13269, 0, 0, + 74387, 78179, 78598, 74492, 6097, 7568, 8780, 4982, 0, 74501, 194763, + 78592, 194762, 2672, 3735, 194735, 13138, 42266, 9484, 10724, 41202, + 119024, 0, 43742, 0, 9487, 119959, 119117, 3842, 195034, 78668, 12442, + 6193, 9791, 0, 0, 42516, 7228, 7559, 74803, 78468, 194851, 11399, 119219, + 194691, 194855, 194690, 194857, 3604, 0, 119188, 0, 78540, 78541, 42507, + 1962, 78490, 78476, 42505, 11660, 0, 2072, 0, 6995, 74173, 5437, 74174, + 10669, 8702, 7964, 194706, 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, 0, 0, 195024, 10196, 7886, 0, 6585, + 0, 6680, 195042, 0, 195051, 6679, 74412, 0, 194866, 74421, 11382, 0, 0, + 0, 0, 194833, 194832, 6681, 194834, 12693, 194836, 42727, 194838, 194841, + 78195, 65442, 119610, 78199, 12166, 43248, 66248, 194816, 0, 194818, + 194817, 194820, 194819, 5297, 7042, 13284, 6112, 7968, 194825, 73927, + 194738, 194736, 65746, 0, 74409, 74389, 194826, 4342, 42839, 194831, + 1677, 0, 0, 194806, 917855, 11091, 11011, 2719, 0, 0, 119595, 64495, 0, + 0, 7585, 65169, 2052, 4308, 917858, 74177, 7505, 543, 64916, 64736, 0, 0, + 64655, 0, 118922, 2064, 0, 43158, 7902, 0, 65265, 194639, 0, 0, 0, 0, 0, 0, 12994, 0, 10828, 0, 6228, 4307, 3482, 0, 0, 0, 0, 506, 74573, 41194, - 65735, 0, 0, 41195, 0, 8169, 0, 8841, 0, 516, 0, 41197, 119051, 34, 0, - 120186, 120185, 1612, 74333, 120182, 120181, 74308, 12001, 120178, 10242, - 64564, 120179, 120174, 6584, 7749, 11037, 0, 1758, 0, 10667, 10560, - 120197, 120756, 1935, 11517, 120193, 120196, 120195, 1931, 120189, 74839, - 120191, 1217, 64702, 12643, 825, 0, 194905, 12294, 0, 194908, 9138, - 194910, 194902, 12631, 194911, 11080, 74554, 0, 5591, 1239, 0, 11313, 0, - 3403, 0, 0, 64364, 0, 0, 74582, 8998, 12988, 0, 9152, 0, 0, 194898, - 67589, 41850, 64290, 3433, 0, 12615, 1594, 65607, 6914, 67603, 0, 119569, + 65735, 2055, 43255, 41195, 0, 8169, 0, 8841, 0, 516, 0, 2063, 119051, 34, + 0, 120186, 11504, 1612, 74333, 120182, 74520, 74308, 12001, 120178, + 10242, 64564, 120179, 120174, 6584, 7749, 11037, 0, 1758, 0, 10667, + 10560, 120197, 120756, 1935, 11517, 120193, 120196, 120195, 1931, 120189, + 74839, 120191, 1217, 64702, 12643, 825, 0, 194905, 12294, 127261, 78834, + 9138, 78831, 78833, 12631, 78829, 11080, 74554, 0, 5591, 1239, 0, 11313, + 0, 3403, 0, 0, 64364, 0, 0, 74582, 8998, 12988, 0, 9152, 0, 0, 194898, + 67589, 41850, 64290, 3433, 0, 12615, 1594, 42192, 6914, 67603, 0, 119569, 74565, 41353, 67602, 67611, 4337, 0, 194897, 918, 65035, 41351, 7681, - 194900, 42577, 41393, 12668, 194904, 2477, 0, 0, 0, 0, 67604, 194880, 0, - 573, 194881, 194884, 11417, 194886, 194885, 194888, 67599, 0, 194889, - 67607, 11482, 0, 0, 3357, 0, 194891, 4207, 1288, 194892, 194895, 194894, - 0, 11589, 66354, 194872, 0, 0, 64602, 194670, 0, 0, 42788, 0, 64480, - 194875, 8423, 3348, 448, 194879, 9717, 0, 0, 997, 0, 0, 0, 0, 11440, - 11379, 42000, 13139, 0, 65013, 126999, 0, 73796, 0, 0, 12035, 0, 2818, 0, - 0, 73793, 0, 4172, 0, 0, 8373, 10873, 12197, 0, 0, 0, 0, 0, 126977, 0, 0, - 194865, 126982, 74563, 64828, 11419, 194868, 766, 1257, 0, 0, 11381, - 3265, 66617, 3274, 0, 0, 0, 0, 0, 41989, 0, 0, 0, 3263, 0, 65672, 0, - 3270, 64539, 11489, 0, 0, 0, 0, 9505, 65518, 0, 756, 195052, 0, 0, 0, - 7261, 0, 186, 0, 119156, 5770, 13179, 65830, 12612, 12949, 64856, 12800, - 0, 74203, 64718, 0, 0, 0, 118929, 0, 11578, 0, 119296, 0, 0, 0, 0, 74568, - 9254, 0, 1794, 120217, 64521, 5624, 120220, 120221, 119958, 120223, 3617, - 66636, 64886, 120211, 120212, 120213, 120214, 1872, 66508, 120467, 41079, - 10748, 5502, 119330, 4452, 0, 0, 0, 4511, 0, 0, 0, 11425, 0, 0, 1231, 0, - 0, 0, 9003, 8192, 0, 5305, 9653, 10616, 8694, 9546, 0, 0, 120478, 120200, - 65205, 120202, 64063, 9878, 74780, 119626, 120207, 64058, 8799, 42131, 0, - 64062, 1028, 64060, 64059, 837, 10567, 0, 43103, 0, 0, 11427, 2902, - 64043, 64042, 66464, 10756, 0, 42606, 64045, 64044, 0, 10076, 64040, - 64039, 0, 1034, 3392, 0, 43091, 64033, 64032, 65468, 64038, 64037, 64036, - 64035, 4291, 194928, 64015, 64014, 64681, 194930, 0, 194944, 0, 43090, 0, - 3476, 8973, 64012, 42473, 64010, 64008, 64007, 2003, 7706, 64517, 119183, + 194900, 42577, 41393, 12668, 194904, 2477, 0, 0, 127302, 0, 67604, + 194880, 127235, 573, 194881, 194884, 11417, 194886, 194885, 194888, + 67599, 0, 194889, 67607, 11482, 0, 0, 3357, 0, 42223, 4207, 1288, 78842, + 78839, 68419, 78837, 11589, 42195, 194872, 917627, 127263, 64602, 67618, + 0, 0, 42788, 68416, 64480, 194875, 8423, 3348, 448, 68476, 9717, 0, 0, + 997, 0, 0, 0, 0, 11440, 11379, 42000, 13139, 42221, 65013, 126999, 0, + 73796, 0, 119228, 12035, 0, 2818, 0, 0, 73793, 0, 4172, 0, 0, 8373, + 10873, 12197, 0, 0, 0, 0, 0, 78210, 0, 0, 194865, 126982, 74563, 64828, + 11419, 194868, 766, 1257, 0, 118845, 11381, 3265, 66617, 3274, 0, 0, 0, + 0, 119092, 41989, 0, 0, 0, 3263, 0, 65672, 0, 3270, 64539, 11489, 0, 0, + 0, 0, 9505, 65518, 194776, 756, 195052, 0, 0, 0, 7261, 0, 186, 0, 119156, + 5770, 13179, 65830, 12612, 12949, 64856, 12800, 0, 74203, 64718, 0, 0, 0, + 118929, 0, 11578, 0, 119296, 0, 0, 0, 0, 74568, 9254, 0, 1794, 120217, + 64521, 5624, 120220, 120221, 119958, 120223, 3617, 66636, 64886, 120211, + 120212, 120213, 120214, 1872, 66508, 120467, 41079, 10748, 5502, 119330, + 4452, 0, 0, 917879, 4511, 0, 0, 64678, 11425, 0, 43245, 1231, 0, 0, 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, 66464, 10756, 0, 42606, 64045, 64044, 43979, 10076, 64040, + 43060, 0, 1034, 3392, 0, 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, 0, 0, 4767, 9343, 64049, 64048, 120034, 1133, 64053, 64052, - 64051, 64050, 41340, 0, 0, 10005, 12329, 41333, 0, 8489, 1942, 0, 0, - 42520, 0, 0, 0, 10760, 64023, 64022, 64021, 6582, 0, 0, 64025, 9167, - 42151, 0, 0, 2026, 64019, 64018, 64017, 64016, 12768, 0, 7582, 0, 118915, - 0, 0, 0, 0, 120539, 0, 41411, 13094, 0, 7532, 41414, 0, 3179, 0, 64769, - 0, 0, 11461, 74454, 10751, 9051, 0, 0, 10535, 0, 0, 0, 2008, 64031, - 64030, 294, 41874, 0, 126991, 65929, 0, 0, 0, 0, 64028, 8146, 64026, - 41788, 194844, 0, 118795, 0, 119887, 119888, 0, 119886, 119891, 119892, - 119889, 11433, 119895, 119896, 0, 7801, 65578, 0, 12915, 0, 3297, 9699, - 0, 1135, 0, 0, 0, 1995, 7927, 0, 0, 2552, 41546, 60, 0, 8649, 41549, 0, - 0, 0, 6682, 0, 0, 64710, 41547, 0, 2013, 0, 119899, 119900, 119897, - 119898, 12832, 119904, 8081, 8362, 3537, 119908, 9137, 119906, 8999, 0, - 119909, 3466, 0, 0, 1996, 0, 3453, 6282, 0, 2002, 2000, 120175, 537, 0, - 4179, 65119, 1998, 0, 1842, 0, 0, 9628, 0, 12081, 9826, 64502, 1767, 0, - 0, 0, 120201, 0, 0, 0, 3059, 0, 120204, 119953, 120205, 0, 0, 0, 4100, - 920, 1811, 1355, 0, 0, 3592, 10078, 0, 0, 0, 8592, 65870, 68164, 0, + 43453, 64050, 41340, 118975, 0, 10005, 12329, 41333, 0, 8489, 1942, 0, 0, + 42520, 0, 0, 0, 10760, 64023, 64022, 64021, 6582, 43670, 0, 64025, 9167, + 42151, 78244, 0, 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, 0, 68218, 55274, 2008, 64031, 64030, 294, + 41874, 0, 126991, 65929, 0, 0, 0, 0, 64028, 8146, 64026, 41788, 194844, + 0, 118795, 6343, 43247, 119888, 0, 119886, 119891, 119892, 119889, 11433, + 119895, 119896, 0, 7801, 65578, 194839, 12915, 43968, 3297, 9699, 194955, + 1135, 0, 0, 0, 1995, 6722, 0, 0, 2552, 41546, 60, 68394, 8649, 41549, + 78496, 0, 0, 6682, 0, 78679, 64710, 41547, 0, 2013, 0, 78530, 78532, + 78528, 78529, 12832, 78493, 8081, 8362, 3537, 119908, 9137, 119906, 8999, + 0, 78533, 3466, 0, 0, 1996, 0, 3453, 6282, 0, 2002, 2000, 120175, 537, 0, + 4179, 65119, 1998, 0, 1842, 0, 0, 9628, 68446, 12081, 9826, 64502, 1767, + 0, 0, 0, 120201, 0, 0, 0, 3059, 44024, 120204, 119953, 120205, 0, 0, 0, + 4100, 920, 1811, 1355, 0, 0, 3592, 10078, 0, 0, 0, 8592, 65870, 68164, 0, 10742, 0, 0, 1994, 9281, 3296, 12865, 1997, 1895, }; Modified: python/branches/py3k-jit/Objects/codeobject.c ============================================================================== --- python/branches/py3k-jit/Objects/codeobject.c (original) +++ python/branches/py3k-jit/Objects/codeobject.c Fri Mar 19 00:32:03 2010 @@ -108,6 +108,7 @@ Py_INCREF(lnotab); co->co_lnotab = lnotab; co->co_zombieframe = NULL; + co->co_weakreflist = NULL; } return co; } @@ -331,6 +332,8 @@ Py_XDECREF(co->co_lnotab); if (co->co_zombieframe != NULL) PyObject_GC_Del(co->co_zombieframe); + if (co->co_weakreflist != NULL) + PyObject_ClearWeakRefs((PyObject*)co); PyObject_DEL(co); } @@ -462,7 +465,7 @@ 0, /* tp_traverse */ 0, /* tp_clear */ code_richcompare, /* tp_richcompare */ - 0, /* tp_weaklistoffset */ + offsetof(PyCodeObject, co_weakreflist), /* tp_weaklistoffset */ 0, /* tp_iter */ 0, /* tp_iternext */ 0, /* tp_methods */ Modified: python/branches/py3k-jit/Objects/unicodetype_db.h ============================================================================== --- python/branches/py3k-jit/Objects/unicodetype_db.h (original) +++ python/branches/py3k-jit/Objects/unicodetype_db.h Fri Mar 19 00:32:03 2010 @@ -64,11 +64,13 @@ {0, 10795, 0, 0, 0, 1921}, {0, 65373, 0, 0, 0, 1921}, {0, 10792, 0, 0, 0, 1921}, + {10815, 0, 10815, 0, 0, 1801}, {0, 65341, 0, 0, 0, 1921}, {0, 69, 0, 0, 0, 1921}, {0, 71, 0, 0, 0, 1921}, {10783, 0, 10783, 0, 0, 1801}, {10780, 0, 10780, 0, 0, 1801}, + {10782, 0, 10782, 0, 0, 1801}, {65326, 0, 65326, 0, 0, 1801}, {65330, 0, 65330, 0, 0, 1801}, {65331, 0, 65331, 0, 0, 1801}, @@ -175,6 +177,8 @@ {0, 54756, 0, 0, 0, 1921}, {0, 54787, 0, 0, 0, 1921}, {0, 54753, 0, 0, 0, 1921}, + {0, 54754, 0, 0, 0, 1921}, + {0, 54721, 0, 0, 0, 1921}, {58272, 0, 58272, 0, 0, 1801}, {0, 0, 0, 0, 0, 5889}, {42877, 7545, 42877, 0, 0, 3969}, @@ -185,508 +189,508 @@ /* type indexes */ #define SHIFT 7 static unsigned char index1[] = { - 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 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, 40, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 16, 50, 51, 52, - 16, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 63, 63, 64, 65, 66, 63, - 63, 63, 67, 68, 69, 63, 63, 63, 63, 63, 63, 70, 16, 71, 72, 73, 74, 75, - 76, 63, 77, 78, 79, 80, 81, 82, 83, 63, 63, 84, 85, 40, 40, 40, 40, 40, - 40, 86, 40, 40, 40, 40, 40, 87, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, - 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, - 40, 40, 40, 40, 40, 40, 40, 40, 88, 89, 90, 91, 40, 40, 40, 92, 40, 40, - 40, 93, 94, 40, 40, 40, 40, 40, 95, 40, 40, 40, 96, 40, 40, 40, 40, 40, - 40, 40, 40, 40, 40, 97, 98, 99, 40, 40, 40, 40, 40, 40, 100, 101, 40, 40, - 40, 40, 40, 40, 40, 40, 102, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, - 40, 40, 40, 103, 40, 40, 40, 40, 40, 40, 40, 40, 104, 40, 40, 40, 40, - 100, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, - 40, 40, 40, 103, 40, 40, 40, 40, 40, 40, 105, 40, 40, 40, 40, 40, 40, 40, - 40, 40, 40, 40, 40, 40, 40, 40, 40, 106, 107, 40, 40, 40, 40, 40, 40, 40, - 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 108, 109, 40, 40, 40, 40, 40, 40, - 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 110, 40, 40, 40, 40, 40, 40, - 40, 40, 40, 111, 40, 40, 112, 113, 114, 115, 116, 117, 118, 16, 119, 16, - 16, 16, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, - 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, - 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, - 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, - 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 120, - 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, - 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, - 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, - 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, 123, 124, 125, - 126, 127, 128, 40, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 16, - 139, 140, 141, 142, 143, 16, 16, 16, 16, 16, 16, 144, 16, 145, 16, 146, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 40, 40, 40, 40, 40, 40, 147, 16, 148, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 63, - 149, 150, 151, 152, 16, 153, 16, 154, 155, 156, 157, 158, 159, 160, 161, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 162, 163, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 164, 165, 166, 40, 40, 40, 40, 40, 40, - 40, 40, 40, 40, 40, 40, 40, 40, 40, 86, 167, 40, 168, 169, 40, 40, 40, - 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, - 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, - 40, 40, 40, 40, 40, 40, 40, 40, 40, 170, 40, 40, 40, 40, 40, 40, 40, 40, - 40, 40, 40, 171, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, - 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, - 40, 40, 172, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, - 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, - 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, - 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, - 40, 40, 40, 40, 40, 40, 40, 40, 173, 40, 40, 40, 40, 40, 40, 40, 40, 40, - 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, - 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, - 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, - 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, - 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, - 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, - 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, - 40, 174, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 40, 170, 40, 40, 175, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 176, 16, - 177, 178, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, - 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, - 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, - 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, - 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, - 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, - 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, - 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, - 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, - 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, - 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, - 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, - 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, - 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, - 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, - 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, - 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, - 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, - 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, - 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, - 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, - 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, - 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, - 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, - 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, - 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, - 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, - 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, - 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, - 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, - 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, - 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, - 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, - 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, - 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, - 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, - 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 179, 121, 121, - 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, - 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, - 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, - 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, - 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, - 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, - 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, - 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, - 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, - 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, - 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, - 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, - 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, - 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, - 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, - 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, - 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, - 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, - 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, - 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, - 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, - 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, - 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, - 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, - 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, - 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, - 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, - 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, - 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, - 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, - 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, - 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, - 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, - 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, - 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, - 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, - 121, 121, 121, 121, 121, 179, + 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, 34, 35, 36, 37, + 38, 39, 34, 34, 34, 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, 64, 64, 65, 66, 67, 64, + 64, 64, 68, 69, 70, 64, 64, 64, 64, 64, 64, 71, 17, 72, 73, 74, 75, 76, + 77, 64, 78, 79, 80, 81, 82, 83, 84, 64, 64, 85, 86, 34, 34, 34, 34, 34, + 34, 87, 34, 34, 34, 34, 34, 88, 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, 89, 90, 91, 92, 34, 34, 34, 93, 34, 34, + 34, 94, 95, 34, 34, 34, 34, 34, 96, 34, 34, 34, 97, 34, 34, 34, 34, 34, + 34, 34, 34, 34, 34, 98, 99, 100, 34, 34, 34, 34, 34, 34, 101, 102, 34, + 34, 34, 34, 34, 34, 34, 34, 103, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, + 34, 34, 34, 34, 104, 34, 34, 34, 34, 34, 34, 34, 34, 105, 34, 34, 34, 34, + 101, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, + 34, 34, 34, 104, 34, 34, 34, 34, 34, 34, 106, 34, 34, 34, 34, 34, 34, 34, + 34, 34, 34, 34, 34, 34, 34, 34, 34, 107, 108, 34, 34, 34, 34, 34, 34, 34, + 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 109, 110, 34, 34, 34, 34, 34, 34, + 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 111, 34, 34, 34, 34, 34, 34, + 34, 34, 34, 112, 34, 34, 113, 114, 115, 116, 117, 118, 119, 120, 121, + 122, 17, 123, 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, + 124, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, + 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, + 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, + 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, + 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 126, 127, 128, + 129, 130, 131, 132, 34, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, + 17, 143, 144, 145, 146, 147, 17, 17, 17, 17, 17, 17, 148, 17, 149, 17, + 150, 17, 151, 17, 152, 17, 17, 17, 153, 17, 17, 17, 17, 154, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 34, 34, 34, 34, 34, 34, 155, 17, 156, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 34, 34, 34, 34, 34, 34, 34, 34, 157, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 64, 158, 159, 160, 161, 17, 162, 17, 163, 164, 165, 166, 167, 168, + 169, 170, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 171, 172, 173, + 174, 175, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 176, 177, 178, 34, 34, 34, + 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 87, 179, 34, 180, 181, + 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, 182, 34, 34, 34, 34, 34, + 34, 34, 34, 34, 34, 34, 183, 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, 184, 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, 185, 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, 186, 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, 187, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 34, 182, 34, 34, 188, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 189, 17, 190, 191, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 125, 125, 125, 125, 125, 125, + 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, + 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, + 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, + 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, + 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, + 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, + 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, + 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, + 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, + 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, + 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, + 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, + 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, + 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, + 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, + 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, + 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, + 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, + 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, + 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, + 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, + 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, + 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, + 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, + 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, + 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, + 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, + 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, + 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, + 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, + 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, + 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, + 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, + 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, + 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, + 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, + 125, 192, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, + 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, + 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, + 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, + 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, + 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, + 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, + 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, + 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, + 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, + 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, + 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, + 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, + 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, + 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, + 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, + 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, + 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, + 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, + 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, + 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, + 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, + 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, + 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, + 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, + 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, + 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, + 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, + 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, + 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, + 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, + 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, + 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, + 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, + 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, + 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, + 125, 125, 125, 125, 125, 125, 125, 125, 125, 192, }; static unsigned char index2[] = { @@ -720,11 +724,11 @@ 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 58, 19, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 19, 19, 19, 19, 19, 19, 59, 26, - 27, 60, 61, 19, 19, 26, 27, 62, 63, 64, 26, 27, 26, 27, 26, 27, 26, 27, - 26, 27, 65, 66, 19, 67, 68, 19, 69, 69, 19, 70, 19, 71, 19, 19, 19, 19, - 69, 19, 19, 72, 19, 19, 19, 19, 73, 74, 19, 75, 19, 19, 19, 74, 19, 76, - 77, 19, 19, 78, 19, 19, 19, 19, 19, 19, 19, 79, 19, 19, 80, 19, 19, 80, - 19, 19, 19, 19, 80, 81, 82, 82, 83, 19, 19, 19, 19, 19, 84, 19, 50, 19, + 27, 60, 61, 62, 62, 26, 27, 63, 64, 65, 26, 27, 26, 27, 26, 27, 26, 27, + 26, 27, 66, 67, 68, 69, 70, 19, 71, 71, 19, 72, 19, 73, 19, 19, 19, 19, + 71, 19, 19, 74, 19, 19, 19, 19, 75, 76, 19, 77, 19, 19, 19, 76, 19, 78, + 79, 19, 19, 80, 19, 19, 19, 19, 19, 19, 19, 81, 19, 19, 82, 19, 19, 82, + 19, 19, 19, 19, 82, 83, 84, 84, 85, 19, 19, 19, 19, 19, 86, 19, 50, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 5, 5, 5, 5, 50, 50, 50, 50, 50, 50, 50, @@ -734,40 +738,40 @@ 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 85, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 87, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 26, 27, 26, 27, 50, 5, 26, 27, 0, 0, 86, - 45, 45, 45, 5, 0, 0, 0, 0, 0, 5, 5, 87, 17, 88, 88, 88, 0, 89, 0, 90, 90, + 17, 17, 17, 17, 17, 17, 17, 17, 26, 27, 26, 27, 50, 5, 26, 27, 0, 0, 88, + 45, 45, 45, 5, 0, 0, 0, 0, 0, 5, 5, 89, 17, 90, 90, 90, 0, 91, 0, 92, 92, 19, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 0, 16, 16, 16, 16, 16, 16, 16, 16, 16, 91, 92, 92, 92, 19, 18, 18, 18, - 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 93, 18, 18, 18, - 18, 18, 18, 18, 18, 18, 94, 95, 95, 96, 97, 98, 99, 99, 99, 100, 101, - 102, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, - 27, 26, 27, 26, 27, 26, 27, 103, 104, 105, 19, 106, 107, 5, 26, 27, 108, - 26, 27, 19, 58, 58, 58, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, - 109, 109, 109, 109, 109, 109, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 0, 16, 16, 16, 16, 16, 16, 16, 16, 16, 93, 94, 94, 94, 19, 18, 18, 18, + 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 95, 18, 18, 18, + 18, 18, 18, 18, 18, 18, 96, 97, 97, 98, 99, 100, 101, 101, 101, 102, 103, + 104, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, + 27, 26, 27, 26, 27, 26, 27, 105, 106, 107, 19, 108, 109, 5, 26, 27, 110, + 26, 27, 19, 58, 58, 58, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, + 111, 111, 111, 111, 111, 111, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, - 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 104, - 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, - 104, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, + 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 106, + 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, + 106, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 5, 17, 17, 17, 17, 17, 5, 5, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, - 26, 27, 26, 27, 26, 27, 110, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, - 27, 26, 27, 111, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, + 26, 27, 26, 27, 26, 27, 112, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, + 27, 26, 27, 113, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, - 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 112, 112, 112, 112, 112, 112, 112, 112, - 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, - 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, - 112, 112, 0, 0, 50, 5, 5, 5, 5, 5, 5, 0, 113, 113, 113, 113, 113, 113, - 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, - 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, - 113, 113, 113, 113, 19, 0, 5, 5, 0, 0, 0, 0, 0, 0, 17, 17, 17, 17, 17, + 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 114, 114, 114, 114, 114, 114, 114, 114, + 114, 114, 114, 114, 114, 114, 114, 114, 114, 114, 114, 114, 114, 114, + 114, 114, 114, 114, 114, 114, 114, 114, 114, 114, 114, 114, 114, 114, + 114, 114, 0, 0, 50, 5, 5, 5, 5, 5, 5, 0, 115, 115, 115, 115, 115, 115, + 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, + 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, + 115, 115, 115, 115, 19, 0, 5, 5, 0, 0, 0, 0, 0, 0, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 5, 17, 5, 17, 17, 5, 17, 17, 5, 17, 0, 0, 0, 0, 0, 0, 0, @@ -800,29 +804,35 @@ 0, 0, 0, 0, 0, 0, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 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, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 50, 50, 5, 5, 5, 5, 50, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 17, 50, 50, 5, 5, 5, 5, 50, 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, 17, 17, 17, + 17, 50, 17, 17, 17, 17, 17, 17, 17, 17, 17, 50, 17, 17, 17, 50, 17, 17, + 17, 17, 17, 0, 0, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 17, 17, 17, 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, 50, 50, 50, 50, 50, 50, 50, 0, 0, 17, 50, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 0, 0, 50, 17, 17, 17, 17, 0, 0, 0, 50, 50, 50, 50, 50, 50, + 17, 17, 17, 17, 0, 50, 17, 17, 17, 17, 17, 0, 0, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 17, 17, 5, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 5, 50, - 50, 0, 0, 0, 0, 0, 0, 0, 0, 50, 50, 50, 50, 50, 0, 17, 17, 17, 0, 50, 50, - 50, 50, 50, 50, 50, 50, 0, 0, 50, 50, 0, 0, 50, 50, 50, 50, 50, 50, 50, - 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 0, 50, 50, - 50, 50, 50, 50, 50, 0, 50, 0, 0, 0, 50, 50, 50, 50, 0, 0, 17, 50, 17, 17, - 17, 17, 17, 17, 17, 0, 0, 17, 17, 0, 0, 17, 17, 17, 50, 0, 0, 0, 0, 0, 0, - 0, 0, 17, 0, 0, 0, 0, 50, 50, 0, 50, 50, 50, 17, 17, 0, 0, 6, 7, 8, 9, - 10, 11, 12, 13, 14, 15, 50, 50, 5, 5, 24, 24, 24, 24, 5, 24, 5, 0, 0, 0, - 0, 0, 0, 17, 17, 17, 0, 50, 50, 50, 50, 50, 50, 0, 0, 0, 0, 50, 50, 0, 0, - 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, - 50, 50, 50, 50, 0, 50, 50, 50, 50, 50, 50, 50, 0, 50, 50, 0, 50, 50, 0, - 50, 50, 0, 0, 17, 0, 17, 17, 17, 17, 17, 0, 0, 0, 0, 17, 17, 0, 0, 17, + 50, 0, 0, 0, 0, 0, 0, 50, 50, 50, 50, 50, 50, 50, 0, 17, 17, 17, 0, 50, + 50, 50, 50, 50, 50, 50, 50, 0, 0, 50, 50, 0, 0, 50, 50, 50, 50, 50, 50, + 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 0, 50, + 50, 50, 50, 50, 50, 50, 0, 50, 0, 0, 0, 50, 50, 50, 50, 0, 0, 17, 50, 17, + 17, 17, 17, 17, 17, 17, 0, 0, 17, 17, 0, 0, 17, 17, 17, 50, 0, 0, 0, 0, + 0, 0, 0, 0, 17, 0, 0, 0, 0, 50, 50, 0, 50, 50, 50, 17, 17, 0, 0, 6, 7, 8, + 9, 10, 11, 12, 13, 14, 15, 50, 50, 5, 5, 24, 24, 24, 24, 24, 24, 5, 5, 0, + 0, 0, 0, 0, 17, 17, 17, 0, 50, 50, 50, 50, 50, 50, 0, 0, 0, 0, 50, 50, 0, + 0, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, + 50, 50, 50, 50, 50, 0, 50, 50, 50, 50, 50, 50, 50, 0, 50, 50, 0, 50, 50, + 0, 50, 50, 0, 0, 17, 0, 17, 17, 17, 17, 17, 0, 0, 0, 0, 17, 17, 0, 0, 17, 17, 17, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0, 50, 50, 50, 50, 0, 50, 0, 0, 0, 0, 0, 0, 0, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 17, 17, 50, 50, 50, 17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 17, 17, 0, 50, 50, 50, 50, 50, 50, @@ -872,14 +882,14 @@ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 17, 5, 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, 50, 50, 50, 50, 50, 50, 50, 50, 17, 50, 114, + 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 17, 50, 116, 17, 17, 17, 17, 17, 17, 17, 0, 0, 0, 0, 5, 50, 50, 50, 50, 50, 50, 50, 17, 17, 17, 17, 17, 17, 17, 17, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 5, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 50, 0, 50, 0, 0, 50, 50, 0, 50, 0, 0, 50, 0, 0, 0, 0, 0, 0, 50, 50, 50, 50, 0, 50, 50, 50, 50, 50, 50, 50, 0, 50, 50, 50, 0, 50, 0, 50, 0, 0, 50, 50, 0, 50, 50, 50, 50, 17, - 50, 114, 17, 17, 17, 17, 17, 17, 0, 17, 17, 50, 0, 0, 50, 50, 50, 50, 50, + 50, 116, 17, 17, 17, 17, 17, 17, 0, 17, 17, 50, 0, 0, 50, 50, 50, 50, 50, 0, 50, 0, 17, 17, 17, 17, 17, 17, 0, 0, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 0, 0, 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, 50, 5, 5, 5, 5, 5, 5, 5, @@ -893,7 +903,7 @@ 17, 17, 17, 17, 17, 17, 17, 0, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 0, 5, 5, 5, 5, 5, 5, 5, 5, 17, 5, 5, 5, - 5, 5, 5, 0, 5, 5, 5, 5, 5, 5, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 5, 5, 5, 0, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -903,55 +913,49 @@ 17, 50, 50, 50, 50, 17, 17, 17, 50, 17, 17, 17, 50, 50, 17, 17, 17, 17, 17, 17, 17, 50, 50, 50, 17, 17, 17, 17, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 50, - 17, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 0, 0, 0, 0, 5, 5, 115, 115, 115, - 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, - 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, - 115, 115, 115, 115, 115, 115, 115, 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, + 17, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 17, 17, 17, 17, 5, 5, 117, 117, + 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, + 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, + 117, 117, 117, 117, 117, 117, 117, 117, 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, 5, 50, 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, 5, 50, 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, 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, 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, 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, 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, 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, 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, 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, 50, 50, 50, 50, 0, 0, 50, 50, - 50, 50, 50, 50, 50, 0, 50, 0, 50, 50, 50, 50, 0, 0, 50, 50, 50, 50, 50, + 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 0, 50, 50, 50, 50, 0, + 0, 50, 50, 50, 50, 50, 50, 50, 0, 50, 0, 50, 50, 50, 50, 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, - 0, 50, 50, 50, 50, 0, 0, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, + 50, 50, 50, 0, 50, 50, 50, 50, 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, 0, 50, 50, 50, 50, 0, 0, 50, 50, 50, 50, 50, 50, 50, 0, 50, - 0, 50, 50, 50, 50, 0, 0, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, - 50, 50, 50, 0, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, + 50, 50, 50, 50, 50, 50, 0, 50, 50, 50, 50, 0, 0, 50, 50, 50, 50, 50, 50, + 50, 0, 50, 0, 50, 50, 50, 50, 0, 0, 50, 50, 50, 50, 50, 50, 50, 50, 50, + 50, 50, 50, 50, 50, 50, 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, 50, 50, 50, 50, 50, 50, 50, - 50, 50, 50, 50, 50, 50, 50, 0, 50, 50, 50, 50, 0, 0, 50, 50, 50, 50, 50, + 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 0, 50, 50, 50, 50, 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, 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, 17, 5, 5, 5, 5, 5, 5, 5, 5, - 5, 116, 117, 118, 119, 120, 121, 122, 123, 124, 24, 24, 24, 24, 24, 24, - 24, 24, 24, 24, 24, 0, 0, 0, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, - 50, 50, 50, 50, 50, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 0, 0, 0, 0, 0, 0, 50, + 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 0, 0, 0, 0, 17, 5, 5, 5, 5, + 5, 5, 5, 5, 5, 118, 119, 120, 121, 122, 123, 124, 125, 126, 24, 24, 24, + 24, 24, 24, 24, 24, 24, 24, 24, 0, 0, 0, 50, 50, 50, 50, 50, 50, 50, 50, + 50, 50, 50, 50, 50, 50, 50, 50, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 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, 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, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 5, 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, 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, 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, @@ -963,101 +967,106 @@ 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, 50, 50, 50, 50, 50, 50, 50, + 50, 50, 50, 50, 50, 50, 5, 5, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, + 50, 50, 50, 50, 50, 50, 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, 5, 5, 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, 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, 5, 5, 5, 127, 127, 127, 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, 0, 50, + 50, 50, 50, 17, 17, 17, 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, 17, 17, 17, 5, 5, + 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, 17, 17, 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, 0, 50, 50, 50, 0, 17, + 17, 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, 50, 50, 50, 50, + 50, 50, 50, 50, 50, 50, 50, 50, 1, 1, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 5, 5, 5, 50, 5, 5, 5, 5, 50, 17, 0, 0, 6, 7, 8, 9, 10, 11, + 12, 13, 14, 15, 0, 0, 0, 0, 0, 0, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, + 0, 0, 0, 0, 0, 0, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 17, 17, 17, 2, 0, 6, + 7, 8, 9, 10, 11, 12, 13, 14, 15, 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, 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, 5, 5, 50, 50, 50, 50, 50, 50, 50, 50, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 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, 5, 5, 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, 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, 50, 17, 50, 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, 5, 5, 5, 125, 125, 125, 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, 0, 50, 50, - 50, 50, 17, 17, 17, 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, 17, 17, 17, 5, 5, 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, 17, 17, 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, 0, 50, 50, 50, 0, 17, 17, - 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, 50, 50, 50, 50, 50, - 50, 50, 50, 50, 50, 50, 50, 1, 1, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 5, 5, 5, 50, 5, 5, 5, 5, 50, 17, 0, 0, 6, 7, 8, 9, 10, 11, 12, - 13, 14, 15, 0, 0, 0, 0, 0, 0, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 0, - 0, 0, 0, 0, 0, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 17, 17, 17, 2, 0, 6, 7, - 8, 9, 10, 11, 12, 13, 14, 15, 0, 0, 0, 0, 0, 0, 50, 50, 50, 50, 50, 50, + 50, 50, 50, 50, 50, 50, 50, 50, 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, 0, 0, 0, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 0, 0, 0, 0, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 0, 0, 0, 0, 5, 0, 0, 0, 5, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 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, 50, 50, 50, 50, 50, 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, 50, 50, 50, 50, 0, 0, 0, 0, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 50, + 50, 50, 50, 50, 50, 50, 17, 17, 0, 0, 0, 0, 0, 0, 6, 7, 8, 9, 10, 11, 12, + 13, 14, 15, 7, 0, 0, 0, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 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, 50, 50, + 17, 17, 17, 17, 17, 0, 0, 5, 5, 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, 50, 50, 17, 50, 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, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 0, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 0, 0, 17, 6, 7, 8, 9, 10, 11, + 12, 13, 14, 15, 0, 0, 0, 0, 0, 0, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 0, + 0, 0, 0, 0, 0, 5, 5, 5, 5, 5, 5, 5, 50, 5, 5, 5, 5, 5, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, 17, 17, 17, 17, 17, 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, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 0, 0, 0, 0, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 0, 0, 0, 0, 5, 0, 0, 0, 5, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 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, 50, 50, 50, 50, 50, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, + 50, 50, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 50, 50, 50, 50, 50, 50, 50, 0, 0, 0, 0, 6, 7, 8, 9, 10, 11, 12, 13, + 14, 15, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 5, 5, 5, 5, 5, 5, 5, 5, 5, 0, 0, 0, 17, 17, 17, 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, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 50, 50, - 50, 50, 50, 50, 50, 17, 17, 0, 0, 0, 0, 0, 0, 6, 7, 8, 9, 10, 11, 12, 13, - 14, 15, 0, 0, 0, 0, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, - 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 50, 50, 50, 50, 50, 50, - 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 17, - 17, 17, 17, 17, 0, 0, 5, 5, 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, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 0, 0, 0, 50, 50, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 17, 17, 17, 17, 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, 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, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 0, 0, 0, 5, 5, 5, 5, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 0, 0, 0, 50, + 50, 50, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 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, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 50, 50, 50, 50, 50, 50, 50, 0, 0, 0, 0, 6, 7, 8, 9, 10, - 11, 12, 13, 14, 15, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 5, 5, 5, 5, 5, 5, 5, 5, 5, 0, 0, 0, - 17, 17, 17, 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, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 0, 0, 0, 50, 50, 6, 7, 8, 9, 10, 11, 12, 13, - 14, 15, 0, 0, 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, 5, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 0, 0, 0, 5, 5, 5, 5, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 0, 0, - 0, 50, 50, 50, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 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, 5, 5, 19, 19, 19, 19, - 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 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, + 17, 17, 17, 5, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 50, 50, 50, 50, 17, 50, 50, 50, 50, 17, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, - 19, 19, 19, 19, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, + 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 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, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, - 19, 19, 19, 19, 19, 19, 19, 19, 50, 126, 19, 19, 19, 127, 19, 19, 19, 19, + 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, - 19, 19, 19, 19, 19, 19, 19, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, + 19, 19, 50, 128, 19, 19, 19, 129, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, + 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, + 19, 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, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 50, 50, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 17, 26, 27, 26, 27, 26, 27, - 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, + 17, 17, 17, 17, 17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 17, 17, 17, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, @@ -1065,50 +1074,50 @@ 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, - 19, 19, 19, 19, 19, 128, 19, 19, 129, 19, 26, 27, 26, 27, 26, 27, 26, 27, + 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 19, 19, 19, 19, 19, 130, + 19, 19, 131, 19, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, - 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 130, 130, - 130, 130, 130, 130, 130, 130, 131, 131, 131, 131, 131, 131, 131, 131, - 130, 130, 130, 130, 130, 130, 0, 0, 131, 131, 131, 131, 131, 131, 0, 0, - 130, 130, 130, 130, 130, 130, 130, 130, 131, 131, 131, 131, 131, 131, - 131, 131, 130, 130, 130, 130, 130, 130, 130, 130, 131, 131, 131, 131, - 131, 131, 131, 131, 130, 130, 130, 130, 130, 130, 0, 0, 131, 131, 131, - 131, 131, 131, 0, 0, 19, 130, 19, 130, 19, 130, 19, 130, 0, 131, 0, 131, - 0, 131, 0, 131, 130, 130, 130, 130, 130, 130, 130, 130, 131, 131, 131, - 131, 131, 131, 131, 131, 132, 132, 133, 133, 133, 133, 134, 134, 135, - 135, 136, 136, 137, 137, 0, 0, 130, 130, 130, 130, 130, 130, 130, 130, - 138, 138, 138, 138, 138, 138, 138, 138, 130, 130, 130, 130, 130, 130, - 130, 130, 138, 138, 138, 138, 138, 138, 138, 138, 130, 130, 130, 130, - 130, 130, 130, 130, 138, 138, 138, 138, 138, 138, 138, 138, 130, 130, 19, - 139, 19, 0, 19, 19, 131, 131, 140, 140, 141, 5, 142, 5, 5, 5, 19, 139, - 19, 0, 19, 19, 143, 143, 143, 143, 141, 5, 5, 5, 130, 130, 19, 19, 0, 0, - 19, 19, 131, 131, 144, 144, 0, 5, 5, 5, 130, 130, 19, 19, 19, 105, 19, - 19, 131, 131, 145, 145, 108, 5, 5, 5, 0, 0, 19, 139, 19, 0, 19, 19, 146, - 146, 147, 147, 141, 5, 5, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, - 1, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, - 5, 3, 3, 1, 1, 1, 1, 1, 2, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, - 17, 17, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 17, 5, - 5, 5, 5, 5, 5, 5, 5, 5, 5, 2, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 1, 1, 1, 1, - 1, 1, 148, 19, 0, 0, 149, 150, 151, 152, 153, 154, 5, 5, 5, 5, 5, 19, - 148, 23, 20, 21, 149, 150, 151, 152, 153, 154, 5, 5, 5, 5, 5, 0, 50, 50, - 50, 50, 50, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 5, 5, 5, 5, 5, 5, 5, 5, - 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 5, 5, 5, 5, 17, 5, 5, 5, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, - 5, 99, 5, 5, 5, 5, 99, 5, 5, 19, 99, 99, 99, 19, 19, 99, 99, 99, 19, 5, - 99, 5, 5, 155, 99, 99, 99, 99, 99, 5, 5, 5, 5, 5, 5, 99, 5, 156, 5, 99, - 5, 157, 158, 99, 99, 155, 19, 99, 99, 159, 99, 19, 50, 50, 50, 50, 19, 5, - 5, 19, 19, 99, 99, 5, 5, 5, 5, 5, 99, 19, 19, 19, 19, 5, 5, 5, 5, 160, 5, - 0, 0, 0, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 161, 161, - 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, - 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, - 162, 162, 125, 125, 125, 26, 27, 125, 125, 125, 125, 0, 0, 0, 0, 0, 0, 0, - 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, - 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, + 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 132, 132, 132, 132, 132, 132, + 132, 132, 133, 133, 133, 133, 133, 133, 133, 133, 132, 132, 132, 132, + 132, 132, 0, 0, 133, 133, 133, 133, 133, 133, 0, 0, 132, 132, 132, 132, + 132, 132, 132, 132, 133, 133, 133, 133, 133, 133, 133, 133, 132, 132, + 132, 132, 132, 132, 132, 132, 133, 133, 133, 133, 133, 133, 133, 133, + 132, 132, 132, 132, 132, 132, 0, 0, 133, 133, 133, 133, 133, 133, 0, 0, + 19, 132, 19, 132, 19, 132, 19, 132, 0, 133, 0, 133, 0, 133, 0, 133, 132, + 132, 132, 132, 132, 132, 132, 132, 133, 133, 133, 133, 133, 133, 133, + 133, 134, 134, 135, 135, 135, 135, 136, 136, 137, 137, 138, 138, 139, + 139, 0, 0, 132, 132, 132, 132, 132, 132, 132, 132, 140, 140, 140, 140, + 140, 140, 140, 140, 132, 132, 132, 132, 132, 132, 132, 132, 140, 140, + 140, 140, 140, 140, 140, 140, 132, 132, 132, 132, 132, 132, 132, 132, + 140, 140, 140, 140, 140, 140, 140, 140, 132, 132, 19, 141, 19, 0, 19, 19, + 133, 133, 142, 142, 143, 5, 144, 5, 5, 5, 19, 141, 19, 0, 19, 19, 145, + 145, 145, 145, 143, 5, 5, 5, 132, 132, 19, 19, 0, 0, 19, 19, 133, 133, + 146, 146, 0, 5, 5, 5, 132, 132, 19, 19, 19, 107, 19, 19, 133, 133, 147, + 147, 110, 5, 5, 5, 0, 0, 19, 141, 19, 0, 19, 19, 148, 148, 149, 149, 143, + 5, 5, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 5, 5, 5, 5, 5, + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 3, 3, 1, 1, 1, + 1, 1, 2, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 17, 17, 5, 5, 5, 5, + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 17, 5, 5, 5, 5, 5, 5, 5, 5, + 5, 5, 2, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 150, 50, 0, 0, + 151, 152, 153, 154, 155, 156, 5, 5, 5, 5, 5, 50, 150, 23, 20, 21, 151, + 152, 153, 154, 155, 156, 5, 5, 5, 5, 5, 0, 50, 50, 50, 50, 50, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, + 5, 5, 5, 5, 5, 5, 5, 5, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 5, 5, 5, 5, 17, 5, 5, 5, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 5, 101, 5, 5, 5, 5, + 101, 5, 5, 19, 101, 101, 101, 19, 19, 101, 101, 101, 19, 5, 101, 5, 5, + 157, 101, 101, 101, 101, 101, 5, 5, 5, 5, 5, 5, 101, 5, 158, 5, 101, 5, + 159, 160, 101, 101, 157, 19, 101, 101, 161, 101, 19, 50, 50, 50, 50, 19, + 5, 5, 19, 19, 101, 101, 5, 5, 5, 5, 5, 101, 19, 19, 19, 19, 5, 5, 5, 5, + 162, 5, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, + 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, + 163, 163, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, + 164, 164, 164, 164, 127, 127, 127, 26, 27, 127, 127, 127, 127, 24, 0, 0, + 0, 0, 0, 0, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, @@ -1121,134 +1130,136 @@ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, - 5, 5, 5, 5, 5, 5, 5, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, - 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 23, 20, 21, 149, 150, 151, 152, 153, 154, 24, 24, - 24, 24, 24, 24, 24, 24, 24, 24, 24, 23, 20, 21, 149, 150, 151, 152, 153, - 154, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 23, 20, 21, 149, 150, - 151, 152, 153, 154, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 5, 5, 5, - 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 163, - 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, - 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 164, 164, 164, - 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, - 164, 164, 164, 164, 164, 164, 164, 164, 164, 148, 24, 24, 24, 24, 24, 24, - 24, 24, 24, 24, 23, 20, 21, 149, 150, 151, 152, 153, 154, 24, 148, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, - 5, 5, 5, 5, 0, 0, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, - 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 0, 0, 0, 5, 5, 5, 5, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 5, 5, 5, 5, 0, 5, 5, 5, 5, 0, 0, 5, 5, 5, 5, 5, 5, - 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 0, 5, + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, - 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 0, 5, 0, 5, 5, 5, 5, 0, 0, 0, 5, 0, 5, 5, - 5, 5, 5, 5, 5, 0, 0, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, - 5, 5, 5, 5, 23, 20, 21, 149, 150, 151, 152, 153, 154, 24, 23, 20, 21, - 149, 150, 151, 152, 153, 154, 24, 23, 20, 21, 149, 150, 151, 152, 153, - 154, 24, 5, 0, 0, 0, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, - 5, 5, 5, 5, 5, 5, 5, 0, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 0, 5, - 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 0, 5, 0, 0, 0, 5, 5, 5, 5, 5, 5, 5, 5, 5, + 5, 5, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 23, 20, 21, 151, 152, 153, 154, 155, + 156, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 23, 20, 21, 151, 152, + 153, 154, 155, 156, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 23, 20, + 21, 151, 152, 153, 154, 155, 156, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, + 24, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, + 5, 5, 5, 165, 165, 165, 165, 165, 165, 165, 165, 165, 165, 165, 165, 165, + 165, 165, 165, 165, 165, 165, 165, 165, 165, 165, 165, 165, 165, 166, + 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, + 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 150, 24, 24, 24, + 24, 24, 24, 24, 24, 24, 24, 23, 20, 21, 151, 152, 153, 154, 155, 156, 24, + 150, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, + 5, 5, 5, 5, 5, 5, 5, 0, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, + 5, 5, 5, 0, 5, 0, 0, 0, 0, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, + 5, 5, 5, 5, 5, 5, 5, 5, 5, 0, 5, 5, 5, 5, 0, 5, 5, 5, 5, 0, 0, 5, 5, 5, + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, + 5, 0, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 0, 5, 0, 5, 5, 5, 5, 0, 0, 0, 5, + 5, 5, 5, 5, 5, 5, 5, 5, 0, 0, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, + 5, 5, 5, 5, 5, 5, 5, 23, 20, 21, 151, 152, 153, 154, 155, 156, 24, 23, + 20, 21, 151, 152, 153, 154, 155, 156, 24, 23, 20, 21, 151, 152, 153, 154, + 155, 156, 24, 5, 0, 0, 0, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, + 5, 5, 5, 5, 5, 5, 5, 5, 0, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 0, + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 0, 5, 0, 0, 0, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, - 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 0, 0, 0, 5, - 5, 5, 5, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 112, - 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, - 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, - 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, - 112, 112, 112, 112, 0, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, - 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, - 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, - 113, 113, 113, 113, 113, 113, 113, 113, 113, 0, 26, 27, 165, 166, 167, - 168, 169, 26, 27, 26, 27, 26, 27, 170, 171, 172, 0, 19, 26, 27, 19, 26, - 27, 19, 19, 19, 19, 19, 19, 50, 0, 0, 26, 27, 26, 27, 26, 27, 26, 27, 26, - 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, - 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, - 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, - 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, - 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, - 27, 19, 5, 5, 5, 5, 5, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 5, - 5, 5, 24, 5, 5, 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, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 0, 0, 0, + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 114, 114, 114, 114, 114, 114, 114, 114, 114, 114, 114, 114, 114, 114, + 114, 114, 114, 114, 114, 114, 114, 114, 114, 114, 114, 114, 114, 114, + 114, 114, 114, 114, 114, 114, 114, 114, 114, 114, 114, 114, 114, 114, + 114, 114, 114, 114, 114, 0, 115, 115, 115, 115, 115, 115, 115, 115, 115, + 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, + 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, + 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 0, 26, 27, 167, 168, + 169, 170, 171, 26, 27, 26, 27, 26, 27, 172, 173, 174, 175, 19, 26, 27, + 19, 26, 27, 19, 19, 19, 19, 19, 19, 50, 176, 176, 26, 27, 26, 27, 26, 27, + 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, + 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, + 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, + 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, + 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, + 26, 27, 26, 27, 19, 5, 5, 5, 5, 5, 5, 26, 27, 26, 27, 17, 17, 17, 0, 0, + 0, 0, 0, 0, 0, 5, 5, 5, 5, 24, 5, 5, 177, 177, 177, 177, 177, 177, 177, + 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, + 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, + 177, 177, 177, 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, 50, 50, 50, - 50, 50, 50, 50, 50, 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, 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, + 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 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, 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, 50, 50, 50, 50, 50, 50, 50, 0, 50, 50, 50, 50, + 50, 50, 50, 0, 50, 50, 50, 50, 50, 50, 50, 0, 50, 50, 50, 50, 50, 50, 50, 0, 50, 50, 50, 50, 50, 50, 50, 0, 50, 50, 50, 50, 50, 50, 50, 0, 50, 50, - 50, 50, 50, 50, 50, 0, 50, 50, 50, 50, 50, 50, 50, 0, 50, 50, 50, 50, 50, - 50, 50, 0, 50, 50, 50, 50, 50, 50, 50, 0, 50, 50, 50, 50, 50, 50, 50, 0, - 50, 50, 50, 50, 50, 50, 50, 0, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 50, 50, 50, 50, 50, 0, 50, 50, 50, 50, 50, 50, 50, 0, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, - 5, 5, 5, 5, 86, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 88, 5, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, - 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 0, 5, 5, 5, 5, 5, 5, 5, 5, - 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 5, 5, 5, + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 0, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, - 5, 5, 5, 5, 5, 5, 5, 5, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, - 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, - 5, 0, 0, 0, 0, 2, 5, 5, 5, 5, 50, 50, 125, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, - 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 17, 17, 17, 17, 17, 17, 5, 50, 50, 50, 50, 50, 5, 5, - 125, 125, 125, 50, 50, 5, 5, 5, 0, 50, 50, 50, 50, 50, 50, 50, 50, 50, + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 5, 5, 5, + 5, 5, 5, 5, 5, 5, 5, 5, 0, 0, 0, 0, 2, 5, 5, 5, 5, 50, 50, 127, 5, 5, 5, + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 127, + 127, 127, 127, 127, 127, 127, 127, 127, 17, 17, 17, 17, 17, 17, 5, 50, + 50, 50, 50, 50, 5, 5, 127, 127, 127, 50, 50, 5, 5, 5, 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, 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, 0, 0, 17, 17, 5, 5, 50, 50, 50, 5, 50, 50, 50, 50, + 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 0, 0, 17, 17, 5, 5, 50, 50, 50, + 5, 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, 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, 50, 50, 50, 50, 50, 50, 50, 50, 50, 5, 50, 50, 50, - 50, 0, 0, 0, 0, 0, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, + 50, 5, 50, 50, 50, 50, 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, 0, 0, 0, 50, 50, 50, 50, 50, 50, + 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 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, 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, 50, 50, 50, 0, 5, 5, - 24, 24, 24, 24, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 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, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, - 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 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, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, - 5, 5, 5, 5, 5, 5, 5, 5, 5, 0, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 5, + 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, + 50, 50, 0, 5, 5, 24, 24, 24, 24, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 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, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, - 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 24, 24, 24, 24, 24, 24, 24, 24, - 24, 24, 24, 24, 24, 24, 24, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, - 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 24, 24, 24, 24, 24, + 5, 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, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 0, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, + 5, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, - 5, 5, 5, 5, 5, 5, 5, 5, 0, 50, 50, 50, 50, 50, 174, 50, 50, 50, 50, 50, + 5, 5, 5, 5, 5, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, + 24, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 0, 50, 50, 50, 50, 50, + 178, 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, 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, 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, 174, 50, 50, 50, 50, 50, + 178, 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, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, @@ -1257,7 +1268,7 @@ 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, 50, 50, 50, 50, 50, 50, 50, - 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 174, + 50, 50, 50, 50, 50, 178, 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, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, @@ -1266,56 +1277,56 @@ 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, 50, 50, 50, 50, 50, 50, 50, + 50, 50, 50, 50, 50, 50, 178, 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, - 174, 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, 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, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, + 50, 50, 50, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, - 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 174, - 50, 50, 174, 50, 50, 50, 174, 50, 174, 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, + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, + 5, 5, 5, 5, 5, 5, 178, 50, 50, 178, 50, 50, 50, 178, 50, 178, 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, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, - 50, 50, 50, 174, 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, 174, 50, 50, 50, - 50, 50, 50, 50, 174, 50, 174, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, + 50, 50, 50, 50, 50, 50, 50, 50, 178, 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, 174, 174, 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, 174, 50, 50, 50, 50, 50, 50, 50, 50, 174, 50, + 50, 178, 50, 50, 50, 50, 50, 50, 50, 178, 50, 178, 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, 174, + 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 178, + 178, 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, 178, 50, 50, 50, 50, + 50, 50, 50, 50, 178, 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, 178, 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, 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, 174, 50, 50, 50, 50, 50, 50, 50, 50, 50, - 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 174, 50, 50, 50, 50, 50, 50, 50, + 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 178, 50, 50, 50, + 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 178, 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, 50, 50, 50, 50, 50, 50, 50, 50, - 50, 50, 50, 50, 174, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, + 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 178, 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, 174, 50, 174, 50, 174, 50, 50, 50, 50, 50, 50, 50, 50, 50, + 50, 50, 50, 50, 50, 50, 50, 50, 50, 178, 50, 178, 50, 178, 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, 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, 174, 50, 174, 174, 174, 50, 50, 50, 50, 50, 50, 174, 50, 50, 50, + 50, 50, 50, 50, 50, 50, 50, 50, 178, 50, 178, 178, 178, 50, 50, 50, 50, + 50, 50, 178, 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, 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, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, + 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 178, 178, 178, 178, 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, 174, 174, 174, 174, 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, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, @@ -1323,7 +1334,7 @@ 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, 50, 50, 50, 50, 50, 50, 50, - 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 174, 50, + 50, 50, 50, 50, 178, 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, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, @@ -1331,24 +1342,25 @@ 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, 50, 50, 50, 50, 50, 50, 50, + 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 178, 50, 50, 50, 50, 50, 50, 50, + 178, 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, 174, 50, 50, 50, 50, 50, 50, 50, 174, 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, 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, 50, + 50, 50, 50, 178, 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, 174, 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, 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, 50, 50, 50, 50, 50, 50, 50, 178, 178, 50, 50, 50, 50, 50, 50, 50, + 50, 50, 50, 50, 50, 178, 178, 178, 50, 178, 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, 174, 174, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, - 174, 174, 174, 50, 174, 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, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, @@ -1359,175 +1371,196 @@ 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, 50, 50, 50, 50, 50, 50, 50, + 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 178, 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, 50, 174, 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, 178, 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, 50, 174, 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, 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, 50, 50, 50, 50, 50, 50, 50, 50, 178, 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, 50, 174, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, + 50, 50, 50, 50, 50, 50, 50, 50, 178, 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, 50, 174, 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, 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, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, + 50, 50, 50, 50, 50, 50, 50, 50, 178, 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, 50, 174, 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, 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, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, + 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 178, 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, 50, 174, 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, 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, 50, 50, 50, 50, + 178, 50, 50, 50, 50, 178, 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, 174, 50, 50, 50, 50, - 174, 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, 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, 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, 174, + 50, 50, 50, 50, 178, 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, 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, 50, 50, 50, 50, 50, 50, 50, 50, 50, + 50, 50, 50, 50, 50, 50, 50, 50, 50, 178, 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, 174, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, + 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 178, 50, 50, 50, 50, 50, 178, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, - 50, 50, 50, 50, 50, 174, 50, 50, 50, 50, 50, 174, 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, 178, 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, 174, 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, 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, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, + 50, 50, 50, 50, 50, 50, 178, 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, 174, 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, 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, + 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, 50, 50, - 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 0, 0, 0, 5, 5, 5, 5, 5, 5, 5, + 0, 0, 0, 0, 0, 0, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 0, + 0, 0, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, - 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, - 50, 50, 5, 5, 5, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, - 50, 50, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 50, 50, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 26, 27, 26, 27, 26, 27, 26, 27, - 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, - 26, 27, 26, 27, 26, 27, 0, 0, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, - 27, 50, 17, 5, 5, 5, 5, 0, 0, 0, 0, 0, 0, 0, 0, 17, 17, 5, 50, 26, 27, - 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, - 26, 27, 26, 27, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, - 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 50, 50, 50, 50, 50, 50, 50, 50, 50, - 5, 5, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 19, 19, 26, + 5, 5, 5, 5, 5, 5, 5, 5, 5, 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, 50, + 50, 50, 50, 50, 50, 5, 5, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, + 50, 5, 5, 5, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, + 50, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 50, 50, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 26, 27, 26, 27, 26, 27, 26, 27, 26, + 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, + 27, 26, 27, 26, 27, 0, 0, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, + 50, 17, 5, 5, 5, 5, 0, 0, 0, 0, 0, 0, 0, 0, 17, 17, 5, 50, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, + 27, 26, 27, 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, 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, 127, 127, 127, 127, 127, 127, 127, 127, 127, + 127, 17, 17, 5, 5, 5, 5, 5, 5, 0, 0, 0, 0, 0, 0, 0, 0, 5, 5, 5, 5, 5, 5, + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 50, 50, 50, 50, 50, + 50, 50, 50, 50, 5, 5, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, + 27, 19, 19, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, - 27, 26, 27, 26, 27, 26, 27, 50, 19, 19, 19, 19, 19, 19, 19, 19, 26, 27, - 26, 27, 175, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 50, 5, 5, 26, 27, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 50, 19, 19, 19, 19, 19, 19, + 19, 19, 26, 27, 26, 27, 179, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 50, + 5, 5, 26, 27, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 50, 50, 50, 50, 50, 50, 17, - 50, 50, 50, 17, 50, 50, 50, 50, 17, 50, 50, 50, 50, 50, 50, 50, 50, 50, - 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 17, 17, 17, 17, - 17, 5, 5, 5, 5, 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, + 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, 17, 50, 50, 50, 17, 50, 50, 50, 50, 17, 50, 50, 50, 50, 50, 50, + 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 17, + 17, 17, 17, 17, 5, 5, 5, 5, 0, 0, 0, 0, 24, 24, 24, 24, 24, 24, 5, 5, 5, + 5, 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, 50, 50, 50, 50, 50, 50, 50, 50, 5, 5, - 5, 5, 0, 0, 0, 0, 0, 0, 0, 0, 17, 17, 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, 5, 5, 5, 5, 0, 0, 0, 0, 0, 0, 0, 0, 17, 17, 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, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 5, 6, 7, 8, 9, 10, 11, 12, - 13, 14, 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 7, 8, 9, 10, 11, - 12, 13, 14, 15, 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, 17, 17, 17, 17, - 17, 17, 17, 17, 5, 5, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, - 0, 0, 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, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 5, 6, + 7, 8, 9, 10, 11, 12, 13, 14, 15, 0, 0, 0, 0, 0, 0, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 50, 50, 50, 50, 50, + 50, 5, 5, 5, 50, 0, 0, 0, 0, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 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, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 50, 50, 50, 17, 50, 50, 50, 50, 50, - 50, 50, 50, 17, 17, 0, 0, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 0, 0, 5, 5, + 50, 50, 50, 50, 50, 50, 50, 50, 17, 17, 17, 17, 17, 17, 17, 17, 5, 5, 50, + 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, + 50, 50, 50, 50, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 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, 17, 17, 17, 17, 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, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 5, 5, 5, 5, 5, 5, 5, + 5, 5, 5, 5, 5, 5, 0, 50, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 0, 0, 0, 0, 5, 5, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, + 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 50, 50, 50, + 17, 50, 50, 50, 50, 50, 50, 50, 50, 17, 17, 0, 0, 6, 7, 8, 9, 10, 11, 12, + 13, 14, 15, 0, 0, 5, 5, 5, 5, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, + 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 5, 5, 5, 50, 17, 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, 50, 50, 50, 50, 50, 50, 50, 50, 17, 50, 17, 17, 17, + 50, 50, 17, 17, 50, 50, 50, 50, 50, 17, 17, 50, 17, 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, 50, 50, 50, 5, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 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, + 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, 17, + 17, 17, 17, 17, 17, 17, 17, 5, 17, 17, 0, 0, 6, 7, 8, 9, 10, 11, 12, 13, + 14, 15, 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, 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, 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, 50, 50, 50, 50, 50, 50, 50, 50, 50, + 0, 0, 0, 0, 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, 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, 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, 50, 50, 50, 50, 50, 50, 50, 50, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 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, 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, 50, 50, 50, 50, 50, - 50, 50, 50, 50, 50, 50, 50, 50, 50, 174, 50, 50, 50, 50, 50, 50, 50, 174, - 50, 50, 50, 50, 174, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, + 50, 50, 50, 50, 50, 50, 50, 50, 178, 50, 50, 50, 50, 50, 50, 50, 178, 50, + 50, 50, 50, 178, 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, 50, 50, 50, - 50, 50, 50, 50, 50, 50, 50, 50, 174, 50, 50, 50, 50, 50, 50, 50, 50, 50, + 50, 50, 50, 50, 50, 50, 50, 178, 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, 174, 50, 174, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, + 50, 50, 178, 50, 178, 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, 174, 50, 50, 50, 50, 50, 50, + 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 178, 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, 50, 50, 0, 0, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, + 50, 50, 50, 50, 50, 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, 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, 50, 50, + 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 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, 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, 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, + 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, 19, 19, 19, 19, 19, 19, 19, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 19, 19, 19, 19, 19, 0, 0, 0, 0, 0, 50, 17, 50, 50, 50, 50, + 0, 0, 0, 0, 0, 0, 0, 19, 19, 19, 19, 19, 19, 19, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 19, 19, 19, 19, 19, 0, 0, 0, 0, 0, 50, 17, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 5, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 0, 50, 50, 50, 50, 50, 0, 50, 0, 50, 50, 0, 50, 50, 0, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, @@ -1544,8 +1577,8 @@ 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, 50, 50, 50, 50, 50, 50, 50, - 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 86, - 86, 86, 86, 86, 86, 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, 88, + 88, 88, 88, 88, 88, 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, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, @@ -1559,13 +1592,13 @@ 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, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 86, 86, 5, 5, + 0, 0, 0, 0, 0, 0, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 88, 88, 5, 5, 0, 0, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 0, 0, 0, 0, 0, 0, 17, 17, 17, 17, 17, 17, 17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 5, 5, 17, 17, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 17, 17, 17, 5, 5, 5, 0, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 0, 5, 5, 5, 5, 0, 0, - 0, 0, 86, 50, 86, 50, 86, 0, 86, 50, 86, 50, 86, 50, 86, 50, 86, 50, 50, + 0, 0, 88, 50, 88, 50, 88, 0, 88, 50, 88, 50, 88, 50, 88, 50, 88, 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, 50, 50, 50, 50, 50, 50, 50, 50, 50, @@ -1581,7 +1614,7 @@ 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, 50, 50, 50, 50, 50, 50, 50, - 50, 50, 114, 114, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, + 50, 50, 116, 116, 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, 50, 50, 50, 50, 50, 50, 0, 0, 50, 50, 50, 50, 50, 50, 0, 0, 50, 50, 50, 50, 50, 50, 0, 0, 50, 50, 50, 0, 0, 0, 5, 5, 5, 5, 5, 5, 5, 0, 5, 5, @@ -1602,11 +1635,11 @@ 50, 50, 50, 50, 0, 0, 0, 0, 0, 5, 5, 5, 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, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, - 24, 24, 24, 24, 0, 0, 0, 5, 5, 5, 5, 5, 5, 5, 5, 5, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 24, 24, 24, 24, 5, 5, 5, 5, 5, 5, 5, + 24, 24, 24, 24, 0, 0, 0, 5, 5, 5, 5, 5, 5, 5, 5, 5, 127, 127, 127, 127, + 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, + 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, + 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, + 127, 127, 127, 127, 127, 127, 127, 24, 24, 24, 24, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 24, 0, 0, 0, 0, 0, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -1622,22 +1655,22 @@ 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, 24, 24, 24, 24, 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, 125, 50, 50, 50, 50, 50, 50, 50, 50, 125, 0, 0, 0, 0, 0, 0, + 50, 50, 50, 127, 50, 50, 50, 50, 50, 50, 50, 50, 127, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, 5, 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, 50, 50, 50, - 50, 50, 50, 50, 50, 5, 125, 125, 125, 125, 125, 0, 0, 0, 0, 0, 0, 0, 0, + 50, 50, 50, 50, 50, 5, 127, 127, 127, 127, 127, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 176, 176, 176, 176, 176, 176, 176, 176, - 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, - 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, - 176, 176, 176, 176, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, - 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, - 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, - 177, 177, 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, 180, 180, 180, 180, 180, 180, 180, 180, + 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, + 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, + 180, 180, 180, 180, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, + 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, + 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, + 181, 181, 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, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, @@ -1649,20 +1682,46 @@ 50, 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, 50, 50, 50, 50, 0, 50, 50, 0, 0, 0, 50, 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, 0, 5, 24, 24, 24, 24, 24, 24, 24, 24, 0, 0, 0, 0, 0, 0, + 0, 0, 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, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, + 50, 50, 50, 50, 50, 24, 24, 24, 24, 24, 24, 0, 0, 0, 5, 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, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 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, 17, 17, 17, 0, 17, 17, 0, 0, 0, 0, 0, 17, 17, 17, 17, 50, + 50, 50, 50, 0, 50, 50, 50, 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, 0, 0, 0, + 0, 17, 17, 17, 0, 0, 0, 0, 17, 23, 20, 21, 151, 24, 24, 24, 24, 0, 0, 0, + 0, 0, 0, 0, 0, 5, 5, 5, 5, 5, 5, 5, 5, 5, 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, 24, 24, 5, 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, 50, 50, 50, 50, 50, 50, 50, 0, 0, 0, 5, 5, 5, 5, 5, + 5, 5, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, + 50, 50, 50, 50, 50, 0, 0, 24, 24, 24, 24, 24, 24, 24, 24, 50, 50, 50, 50, + 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 0, 0, 0, 0, + 0, 24, 24, 24, 24, 24, 24, 24, 24, 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, 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, 50, 50, 50, 50, 50, 50, - 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 24, 24, - 24, 24, 0, 0, 0, 0, 0, 5, 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, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 17, 17, 17, 0, 17, - 17, 0, 0, 0, 0, 0, 17, 17, 17, 17, 50, 50, 50, 50, 0, 50, 50, 50, 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, 23, 20, 21, + 151, 152, 153, 154, 155, 156, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, + 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 0, 17, 17, 17, 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, 17, 17, 17, 0, 0, 0, 0, 17, - 23, 20, 21, 149, 24, 24, 24, 24, 0, 0, 0, 0, 0, 0, 0, 0, 5, 5, 5, 5, 5, - 5, 5, 5, 5, 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, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 5, 5, + 1, 5, 5, 5, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -1670,15 +1729,21 @@ 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, 50, 50, 50, 50, 50, 50, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 155, 155, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 155, 155, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 5, 5, 5, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 5, 5, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 127, 127, 127, 127, 127, + 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, + 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, + 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, + 127, 127, 127, 157, 157, 127, 127, 127, 127, 127, 127, 127, 127, 127, + 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, + 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 157, 157, 127, + 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 5, 5, 5, 5, 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, 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, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, @@ -1706,96 +1771,119 @@ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, - 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 19, 19, 19, 19, 19, 19, 19, + 0, 0, 0, 0, 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, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, - 19, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, - 99, 99, 99, 99, 99, 99, 99, 99, 99, 19, 19, 19, 19, 19, 19, 19, 0, 19, - 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 99, - 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, - 99, 99, 99, 99, 99, 99, 99, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, - 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 99, 0, 99, - 99, 0, 0, 99, 0, 0, 99, 99, 0, 0, 99, 99, 99, 99, 0, 99, 99, 99, 99, 99, - 99, 99, 99, 19, 19, 19, 19, 0, 19, 0, 19, 19, 19, 19, 19, 19, 19, 0, 19, - 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 99, 99, 99, 99, 99, 99, 99, 99, - 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, + 19, 19, 19, 19, 19, 19, 19, 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, 19, 19, 19, 19, 19, 19, 19, 0, 19, 19, 19, 19, 19, 19, 19, + 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 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, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, + 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 101, 0, 101, + 101, 0, 0, 101, 0, 0, 101, 101, 0, 0, 101, 101, 101, 101, 0, 101, 101, + 101, 101, 101, 101, 101, 101, 19, 19, 19, 19, 0, 19, 0, 19, 19, 19, 19, + 19, 19, 19, 0, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 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, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, - 19, 19, 19, 19, 19, 19, 19, 19, 99, 99, 0, 99, 99, 99, 99, 0, 0, 99, 99, - 99, 99, 99, 99, 99, 99, 0, 99, 99, 99, 99, 99, 99, 99, 0, 19, 19, 19, 19, + 19, 101, 101, 0, 101, 101, 101, 101, 0, 0, 101, 101, 101, 101, 101, 101, + 101, 101, 0, 101, 101, 101, 101, 101, 101, 101, 0, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, - 19, 19, 19, 19, 99, 99, 0, 99, 99, 99, 99, 0, 99, 99, 99, 99, 99, 0, 99, - 0, 0, 0, 99, 99, 99, 99, 99, 99, 99, 0, 19, 19, 19, 19, 19, 19, 19, 19, + 19, 19, 19, 101, 101, 0, 101, 101, 101, 101, 0, 101, 101, 101, 101, 101, + 0, 101, 0, 0, 0, 101, 101, 101, 101, 101, 101, 101, 0, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, - 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, - 99, 99, 99, 99, 99, 99, 99, 99, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, - 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 99, 99, - 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, - 99, 99, 99, 99, 99, 99, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, - 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 99, 99, 99, 99, - 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, - 99, 99, 99, 99, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, - 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 99, 99, 99, 99, 99, 99, - 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, - 99, 99, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, - 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 99, 99, 99, 99, 99, 99, 99, 99, - 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, + 19, 19, 19, 19, 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, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, + 19, 19, 19, 19, 19, 19, 19, 19, 19, 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, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, + 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 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, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, - 19, 19, 19, 19, 19, 19, 19, 19, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, - 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 19, 19, + 19, 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, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, - 19, 19, 19, 19, 19, 19, 19, 19, 0, 0, 99, 99, 99, 99, 99, 99, 99, 99, 99, - 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 5, 19, + 19, 19, 19, 19, 19, 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, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, + 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 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, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, + 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 0, 0, + 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, 5, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, - 19, 19, 19, 19, 19, 19, 5, 19, 19, 19, 19, 19, 19, 99, 99, 99, 99, 99, - 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, - 99, 99, 5, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, - 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 5, 19, 19, 19, 19, 19, 19, 99, - 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, - 99, 99, 99, 99, 99, 99, 5, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, - 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 5, 19, 19, 19, - 19, 19, 19, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, - 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 5, 19, 19, 19, 19, 19, 19, 19, + 19, 19, 19, 5, 19, 19, 19, 19, 19, 19, 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, 5, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, + 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 5, 19, 19, 19, 19, + 19, 19, 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, 5, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, - 5, 19, 19, 19, 19, 19, 19, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, - 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 5, 19, 19, 19, + 19, 19, 19, 19, 19, 5, 19, 19, 19, 19, 19, 19, 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, 5, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, + 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 5, 19, 19, + 19, 19, 19, 19, 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, 5, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, - 19, 19, 19, 19, 5, 19, 19, 19, 19, 19, 19, 99, 19, 0, 0, 6, 7, 8, 9, 10, - 11, 12, 13, 14, 15, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 6, 7, 8, 9, 10, - 11, 12, 13, 14, 15, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 6, 7, 8, 9, 10, - 11, 12, 13, 14, 15, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, + 19, 19, 19, 19, 19, 19, 19, 5, 19, 19, 19, 19, 19, 19, 101, 19, 0, 0, 6, + 7, 8, 9, 10, 11, 12, 13, 14, 15, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 6, + 7, 8, 9, 10, 11, 12, 13, 14, 15, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 6, + 7, 8, 9, 10, 11, 12, 13, 14, 15, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, - 5, 5, 0, 0, 0, 0, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, + 5, 5, 5, 5, 5, 5, 5, 0, 0, 0, 0, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, - 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, - 174, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, + 0, 0, 0, 150, 150, 23, 20, 21, 151, 152, 153, 154, 155, 156, 0, 0, 0, 0, + 0, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, + 5, 5, 5, 5, 5, 5, 5, 5, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 0, + 5, 0, 0, 5, 0, 0, 0, 5, 0, 0, 0, 5, 5, 5, 5, 5, 0, 0, 0, 0, 0, 0, 0, 0, + 5, 0, 0, 0, 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 0, 5, 5, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 5, 5, 5, 5, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 5, 5, 5, 5, 5, 5, + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, + 5, 5, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 5, 5, 5, 5, 5, 5, + 5, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 178, 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, 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, 174, 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, 178, 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, 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, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, - 50, 50, 50, 50, 50, 50, 50, 50, 50, 174, 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, 178, 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, 50, 50, 50, 50, 50, 50, 50, - 174, 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, 178, 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, 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, 174, 50, 50, 50, 50, 50, 50, 50, 50, 174, - 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 174, 50, 50, + 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 178, 50, + 50, 50, 50, 50, 50, 50, 50, 178, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, + 50, 50, 50, 50, 50, 178, 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, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, @@ -1806,32 +1894,32 @@ 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, 50, 50, 50, 50, 50, 50, 50, + 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 178, 50, 50, 50, 50, + 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 178, 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, 174, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, - 50, 50, 50, 50, 50, 50, 174, 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, 174, 50, + 50, 50, 50, 50, 50, 50, 178, 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, 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, 50, 50, 50, 50, 50, 50, 50, + 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 178, 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, 174, 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, 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, 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, 178, 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, 174, 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, 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, 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, 178, 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, 174, 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, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, @@ -1842,26 +1930,32 @@ 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, 50, 50, 50, 50, 50, 50, 50, + 50, 50, 50, 50, 50, 50, 50, 50, 178, 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, - 174, 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, 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, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 0, 0, 0, + 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, 50, 50, 50, 50, 50, 50, 50, 50, + 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, 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, 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, 1, 1, 1, 1, 1, 1, 1, 1, + 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, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, 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, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 17, 17, 17, 17, 17, 17, + 1, 1, 1, 1, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, @@ -1874,13 +1968,13 @@ 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 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, 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, 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, 0, 0, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, }; /* Returns the numeric value as double for Unicode characters @@ -1915,20 +2009,26 @@ case 0x1810: case 0x1946: case 0x19D0: + case 0x1A80: + case 0x1A90: case 0x1B50: case 0x1BB0: case 0x1C40: case 0x1C50: case 0x2070: case 0x2080: + case 0x2189: case 0x24EA: case 0x24FF: case 0x3007: case 0x96F6: case 0xA620: + case 0xA6EF: case 0xA8D0: case 0xA900: + case 0xA9D0: case 0xAA50: + case 0xABF0: case 0xF9B2: case 0xFF10: #ifdef Py_UNICODE_WIDE @@ -1939,6 +2039,8 @@ case 0x1D7E2: case 0x1D7EC: case 0x1D7F6: + case 0x1F100: + case 0x1F101: #endif return (double) 0.0; case 0x0031: @@ -1948,7 +2050,6 @@ case 0x07C1: case 0x0967: case 0x09E7: - case 0x09F4: case 0x0A67: case 0x0AE7: case 0x0B67: @@ -1969,6 +2070,9 @@ case 0x1811: case 0x1947: case 0x19D1: + case 0x19DA: + case 0x1A81: + case 0x1A91: case 0x1B51: case 0x1BB1: case 0x1C41: @@ -1994,9 +2098,12 @@ case 0x5E7A: case 0x5F0C: case 0xA621: + case 0xA6E6: case 0xA8D1: case 0xA901: + case 0xA9D1: case 0xAA51: + case 0xABF1: case 0xFF11: #ifdef Py_UNICODE_WIDE case 0x10107: @@ -2007,8 +2114,13 @@ case 0x10320: case 0x103D1: case 0x104A1: + case 0x10858: case 0x10916: case 0x10A40: + case 0x10A7D: + case 0x10B58: + case 0x10B78: + case 0x10E60: case 0x12415: case 0x1241E: case 0x1242C: @@ -2021,29 +2133,41 @@ case 0x1D7E3: case 0x1D7ED: case 0x1D7F7: + case 0x1F102: case 0x2092A: #endif return (double) 1.0; + case 0x2152: + return (double) 1.0/10.0; + case 0x09F4: + case 0xA833: + return (double) 1.0/16.0; case 0x00BD: case 0x0D74: case 0x0F2A: case 0x2CFD: + case 0xA831: #ifdef Py_UNICODE_WIDE case 0x10141: case 0x10175: case 0x10176: + case 0x10E7B: #endif return (double) 1.0/2.0; case 0x2153: #ifdef Py_UNICODE_WIDE + case 0x10E7D: case 0x1245A: case 0x1245D: #endif return (double) 1.0/3.0; case 0x00BC: + case 0x09F7: case 0x0D73: + case 0xA830: #ifdef Py_UNICODE_WIDE case 0x10140: + case 0x10E7C: case 0x12460: case 0x12462: #endif @@ -2055,11 +2179,17 @@ case 0x12461: #endif return (double) 1.0/6.0; + case 0x2150: + return (double) 1.0/7.0; + case 0x09F5: case 0x215B: + case 0xA834: #ifdef Py_UNICODE_WIDE case 0x1245F: #endif return (double) 1.0/8.0; + case 0x2151: + return (double) 1.0/9.0; case 0x0BF0: case 0x0D70: case 0x1372: @@ -2092,8 +2222,12 @@ case 0x10164: case 0x10322: case 0x103D3: + case 0x1085B: case 0x10917: case 0x10A44: + case 0x10B5C: + case 0x10B7C: + case 0x10E69: case 0x1D369: #endif return (double) 10.0; @@ -2111,8 +2245,12 @@ case 0x10152: case 0x1016A: case 0x103D5: + case 0x1085D: case 0x10919: case 0x10A46: + case 0x10B5E: + case 0x10B7E: + case 0x10E72: #endif return (double) 100.0; case 0x0BF2: @@ -2128,7 +2266,10 @@ case 0x1014D: case 0x10154: case 0x10171: + case 0x1085E: case 0x10A47: + case 0x10B5F: + case 0x10B7F: #endif return (double) 1000.0; case 0x137C: @@ -2138,6 +2279,7 @@ #ifdef Py_UNICODE_WIDE case 0x1012B: case 0x10155: + case 0x1085F: #endif return (double) 10000.0; case 0x2188: @@ -2215,7 +2357,6 @@ case 0x07C2: case 0x0968: case 0x09E8: - case 0x09F5: case 0x0A68: case 0x0AE8: case 0x0B68: @@ -2236,6 +2377,8 @@ case 0x1812: case 0x1948: case 0x19D2: + case 0x1A82: + case 0x1A92: case 0x1B52: case 0x1BB2: case 0x1C42: @@ -2263,9 +2406,12 @@ case 0x8CB3: case 0x8D30: case 0xA622: + case 0xA6E7: case 0xA8D2: case 0xA902: + case 0xA9D2: case 0xAA52: + case 0xABF2: case 0xF978: case 0xFF12: #ifdef Py_UNICODE_WIDE @@ -2276,7 +2422,12 @@ case 0x1015E: case 0x103D2: case 0x104A2: + case 0x10859: + case 0x1091A: case 0x10A41: + case 0x10B59: + case 0x10B79: + case 0x10E61: case 0x12400: case 0x12416: case 0x1241F: @@ -2292,12 +2443,14 @@ case 0x1D7E4: case 0x1D7EE: case 0x1D7F8: + case 0x1F103: case 0x22390: #endif return (double) 2.0; case 0x2154: #ifdef Py_UNICODE_WIDE case 0x10177: + case 0x10E7E: case 0x1245B: case 0x1245E: #endif @@ -2315,13 +2468,18 @@ #ifdef Py_UNICODE_WIDE case 0x10111: case 0x103D4: + case 0x1085C: case 0x10918: case 0x10A45: + case 0x10B5D: + case 0x10B7D: + case 0x10E6A: case 0x1D36A: #endif return (double) 20.0; #ifdef Py_UNICODE_WIDE case 0x1011A: + case 0x10E73: return (double) 200.0; #endif #ifdef Py_UNICODE_WIDE @@ -2357,7 +2515,6 @@ case 0x07C3: case 0x0969: case 0x09E9: - case 0x09F6: case 0x0A69: case 0x0AE9: case 0x0B69: @@ -2378,6 +2535,8 @@ case 0x1813: case 0x1949: case 0x19D3: + case 0x1A83: + case 0x1A93: case 0x1B53: case 0x1BB3: case 0x1C43: @@ -2404,15 +2563,23 @@ case 0x53C4: case 0x5F0E: case 0xA623: + case 0xA6E8: case 0xA8D3: case 0xA903: + case 0xA9D3: case 0xAA53: + case 0xABF3: case 0xF96B: case 0xFF13: #ifdef Py_UNICODE_WIDE case 0x10109: case 0x104A3: + case 0x1085A: + case 0x1091B: case 0x10A42: + case 0x10B5A: + case 0x10B7A: + case 0x10E62: case 0x12401: case 0x12408: case 0x12417: @@ -2433,16 +2600,22 @@ case 0x1D7E5: case 0x1D7EF: case 0x1D7F9: + case 0x1F104: case 0x20AFD: case 0x20B19: case 0x22998: case 0x23B1B: #endif return (double) 3.0; + case 0x09F6: + case 0xA835: + return (double) 3.0/16.0; case 0x0F2B: return (double) 3.0/2.0; case 0x00BE: + case 0x09F8: case 0x0D75: + case 0xA832: #ifdef Py_UNICODE_WIDE case 0x10178: #endif @@ -2458,6 +2631,7 @@ #ifdef Py_UNICODE_WIDE case 0x10112: case 0x10165: + case 0x10E6B: case 0x1D36B: case 0x20983: #endif @@ -2465,6 +2639,7 @@ #ifdef Py_UNICODE_WIDE case 0x1011B: case 0x1016B: + case 0x10E74: return (double) 300.0; #endif #ifdef Py_UNICODE_WIDE @@ -2499,7 +2674,6 @@ case 0x07C4: case 0x096A: case 0x09EA: - case 0x09F7: case 0x0A6A: case 0x0AEA: case 0x0B6A: @@ -2518,6 +2692,8 @@ case 0x1814: case 0x194A: case 0x19D4: + case 0x1A84: + case 0x1A94: case 0x1B54: case 0x1BB4: case 0x1C44: @@ -2541,14 +2717,20 @@ case 0x56DB: case 0x8086: case 0xA624: + case 0xA6E9: case 0xA8D4: case 0xA904: + case 0xA9D4: case 0xAA54: + case 0xABF4: case 0xFF14: #ifdef Py_UNICODE_WIDE case 0x1010A: case 0x104A4: case 0x10A43: + case 0x10B5B: + case 0x10B7B: + case 0x10E63: case 0x12402: case 0x12409: case 0x1240F: @@ -2570,6 +2752,7 @@ case 0x1D7E6: case 0x1D7F0: case 0x1D7FA: + case 0x1F105: case 0x20064: case 0x200E2: case 0x2626D: @@ -2582,6 +2765,7 @@ case 0x534C: #ifdef Py_UNICODE_WIDE case 0x10113: + case 0x10E6C: case 0x1D36C: case 0x2098C: case 0x2099C: @@ -2589,6 +2773,7 @@ return (double) 40.0; #ifdef Py_UNICODE_WIDE case 0x1011C: + case 0x10E75: return (double) 400.0; #endif #ifdef Py_UNICODE_WIDE @@ -2641,6 +2826,8 @@ case 0x1815: case 0x194B: case 0x19D5: + case 0x1A85: + case 0x1A95: case 0x1B55: case 0x1BB5: case 0x1C45: @@ -2664,9 +2851,12 @@ case 0x4E94: case 0x4F0D: case 0xA625: + case 0xA6EA: case 0xA8D5: case 0xA905: + case 0xA9D5: case 0xAA55: + case 0xABF5: case 0xFF15: #ifdef Py_UNICODE_WIDE case 0x1010B: @@ -2677,6 +2867,7 @@ case 0x10173: case 0x10321: case 0x104A5: + case 0x10E64: case 0x12403: case 0x1240A: case 0x12410: @@ -2694,6 +2885,7 @@ case 0x1D7E7: case 0x1D7F1: case 0x1D7FB: + case 0x1F106: case 0x20121: #endif return (double) 5.0; @@ -2722,6 +2914,8 @@ case 0x10169: case 0x10174: case 0x10323: + case 0x10A7E: + case 0x10E6D: case 0x1D36D: #endif return (double) 50.0; @@ -2737,6 +2931,7 @@ case 0x1016E: case 0x1016F: case 0x10170: + case 0x10E76: #endif return (double) 500.0; case 0x2181: @@ -2778,6 +2973,8 @@ case 0x1816: case 0x194C: case 0x19D6: + case 0x1A86: + case 0x1A96: case 0x1B56: case 0x1BB6: case 0x1C46: @@ -2801,15 +2998,19 @@ case 0x9646: case 0x9678: case 0xA626: + case 0xA6EB: case 0xA8D6: case 0xA906: + case 0xA9D6: case 0xAA56: + case 0xABF6: case 0xF9D1: case 0xF9D3: case 0xFF16: #ifdef Py_UNICODE_WIDE case 0x1010C: case 0x104A6: + case 0x10E65: case 0x12404: case 0x1240B: case 0x12411: @@ -2823,17 +3024,20 @@ case 0x1D7E8: case 0x1D7F2: case 0x1D7FC: + case 0x1F107: case 0x20AEA: #endif return (double) 6.0; case 0x1377: #ifdef Py_UNICODE_WIDE case 0x10115: + case 0x10E6E: case 0x1D36E: #endif return (double) 60.0; #ifdef Py_UNICODE_WIDE case 0x1011E: + case 0x10E77: return (double) 600.0; #endif #ifdef Py_UNICODE_WIDE @@ -2868,6 +3072,8 @@ case 0x1817: case 0x194D: case 0x19D7: + case 0x1A87: + case 0x1A97: case 0x1B57: case 0x1BB7: case 0x1C47: @@ -2891,13 +3097,17 @@ case 0x67D2: case 0x6F06: case 0xA627: + case 0xA6EC: case 0xA8D7: case 0xA907: + case 0xA9D7: case 0xAA57: + case 0xABF7: case 0xFF17: #ifdef Py_UNICODE_WIDE case 0x1010D: case 0x104A7: + case 0x10E66: case 0x12405: case 0x1240C: case 0x12412: @@ -2912,6 +3122,7 @@ case 0x1D7E9: case 0x1D7F3: case 0x1D7FD: + case 0x1F108: case 0x20001: #endif return (double) 7.0; @@ -2922,11 +3133,13 @@ case 0x1378: #ifdef Py_UNICODE_WIDE case 0x10116: + case 0x10E6F: case 0x1D36F: #endif return (double) 70.0; #ifdef Py_UNICODE_WIDE case 0x1011F: + case 0x10E78: return (double) 700.0; #endif #ifdef Py_UNICODE_WIDE @@ -2961,6 +3174,8 @@ case 0x1818: case 0x194E: case 0x19D8: + case 0x1A88: + case 0x1A98: case 0x1B58: case 0x1BB8: case 0x1C48: @@ -2982,13 +3197,17 @@ case 0x516B: case 0x634C: case 0xA628: + case 0xA6ED: case 0xA8D8: case 0xA908: + case 0xA9D8: case 0xAA58: + case 0xABF8: case 0xFF18: #ifdef Py_UNICODE_WIDE case 0x1010E: case 0x104A8: + case 0x10E67: case 0x12406: case 0x1240D: case 0x12413: @@ -3002,16 +3221,19 @@ case 0x1D7EA: case 0x1D7F4: case 0x1D7FE: + case 0x1F109: #endif return (double) 8.0; case 0x1379: #ifdef Py_UNICODE_WIDE case 0x10117: + case 0x10E70: case 0x1D370: #endif return (double) 80.0; #ifdef Py_UNICODE_WIDE case 0x10120: + case 0x10E79: return (double) 800.0; #endif #ifdef Py_UNICODE_WIDE @@ -3046,6 +3268,8 @@ case 0x1819: case 0x194F: case 0x19D9: + case 0x1A89: + case 0x1A99: case 0x1B59: case 0x1BB9: case 0x1C49: @@ -3068,13 +3292,17 @@ case 0x5EFE: case 0x7396: case 0xA629: + case 0xA6EE: case 0xA8D9: case 0xA909: + case 0xA9D9: case 0xAA59: + case 0xABF9: case 0xFF19: #ifdef Py_UNICODE_WIDE case 0x1010F: case 0x104A9: + case 0x10E68: case 0x12407: case 0x1240E: case 0x12414: @@ -3090,6 +3318,7 @@ case 0x1D7EB: case 0x1D7F5: case 0x1D7FF: + case 0x1F10A: case 0x2F890: #endif return (double) 9.0; @@ -3099,12 +3328,14 @@ #ifdef Py_UNICODE_WIDE case 0x10118: case 0x10341: + case 0x10E71: case 0x1D371: #endif return (double) 90.0; #ifdef Py_UNICODE_WIDE case 0x10121: case 0x1034A: + case 0x10E7A: return (double) 900.0; #endif #ifdef Py_UNICODE_WIDE Modified: python/branches/py3k-jit/Python/compile.c ============================================================================== --- python/branches/py3k-jit/Python/compile.c (original) +++ python/branches/py3k-jit/Python/compile.c Fri Mar 19 00:32:03 2010 @@ -1660,6 +1660,11 @@ if (!compiler_enter_scope(c, name, (void *)e, e->lineno)) return 0; + /* Make None the first constant, so the lambda can't have a + docstring. */ + if (compiler_add_o(c, c->u->u_consts, Py_None) < 0) + return 0; + c->u->u_argcount = asdl_seq_LEN(args->args); c->u->u_kwonlyargcount = asdl_seq_LEN(args->kwonlyargs); VISIT_IN_SCOPE(c, expr, e->v.Lambda.body); Modified: python/branches/py3k-jit/Tools/unicode/makeunicodedata.py ============================================================================== --- python/branches/py3k-jit/Tools/unicode/makeunicodedata.py (original) +++ python/branches/py3k-jit/Tools/unicode/makeunicodedata.py Fri Mar 19 00:32:03 2010 @@ -31,7 +31,7 @@ VERSION = "2.6" # The Unicode Database -UNIDATA_VERSION = "5.1.0" +UNIDATA_VERSION = "5.2.0" UNICODE_DATA = "UnicodeData%s.txt" COMPOSITION_EXCLUSIONS = "CompositionExclusions%s.txt" EASTASIAN_WIDTH = "EastAsianWidth%s.txt" From python-checkins at python.org Fri Mar 19 01:00:30 2010 From: python-checkins at python.org (collin.winter) Date: Fri, 19 Mar 2010 01:00:30 +0100 (CET) Subject: [Python-checkins] r79082 - python/trunk/Makefile.pre.in Message-ID: <20100319000030.91A47F83E@mail.python.org> Author: collin.winter Date: Fri Mar 19 01:00:30 2010 New Revision: 79082 Log: Add a separate python-config make target, useful for testing changes to Misc/python-config.in. Modified: python/trunk/Makefile.pre.in Modified: python/trunk/Makefile.pre.in ============================================================================== --- python/trunk/Makefile.pre.in (original) +++ python/trunk/Makefile.pre.in Fri Mar 19 01:00:30 2010 @@ -935,6 +935,11 @@ export EXE; EXE="$(BUILDEXE)"; \ cd $(srcdir)/Lib/$(PLATDIR); $(RUNSHARED) ./regen +python-config: $(srcdir)/Misc/python-config.in + # Substitution happens here, as the completely-expanded BINDIR + # is not available in configure + sed -e "s, at EXENAME@,$(BINDIR)/python$(VERSION)$(EXE)," < $(srcdir)/Misc/python-config.in >python-config + # Install the include files INCLDIRSTOMAKE=$(INCLUDEDIR) $(CONFINCLUDEDIR) $(INCLUDEPY) $(CONFINCLUDEPY) inclinstall: @@ -960,7 +965,7 @@ # pkgconfig directory LIBPC= $(LIBDIR)/pkgconfig -libainstall: all +libainstall: all python-config @for i in $(LIBDIR) $(LIBP) $(LIBPL) $(LIBPC); \ do \ if test ! -d $(DESTDIR)$$i; then \ @@ -991,9 +996,6 @@ $(INSTALL_DATA) Misc/python.pc $(DESTDIR)$(LIBPC)/python-$(VERSION).pc $(INSTALL_SCRIPT) $(srcdir)/Modules/makesetup $(DESTDIR)$(LIBPL)/makesetup $(INSTALL_SCRIPT) $(srcdir)/install-sh $(DESTDIR)$(LIBPL)/install-sh - # Substitution happens here, as the completely-expanded BINDIR - # is not available in configure - sed -e "s, at EXENAME@,$(BINDIR)/python$(VERSION)$(EXE)," < $(srcdir)/Misc/python-config.in >python-config $(INSTALL_SCRIPT) python-config $(DESTDIR)$(BINDIR)/python$(VERSION)-config rm python-config @if [ -s Modules/python.exp -a \ From python-checkins at python.org Fri Mar 19 01:03:01 2010 From: python-checkins at python.org (florent.xicluna) Date: Fri, 19 Mar 2010 01:03:01 +0100 (CET) Subject: [Python-checkins] r79083 - python/branches/py3k/Lib/test/test_unicodedata.py Message-ID: <20100319000301.D4A7AFAB7@mail.python.org> Author: florent.xicluna Date: Fri Mar 19 01:03:01 2010 New Revision: 79083 Log: Fix bad unicodedata checksum merge from trunk in r79062 Modified: python/branches/py3k/Lib/test/test_unicodedata.py Modified: python/branches/py3k/Lib/test/test_unicodedata.py ============================================================================== --- python/branches/py3k/Lib/test/test_unicodedata.py (original) +++ python/branches/py3k/Lib/test/test_unicodedata.py Fri Mar 19 01:03:01 2010 @@ -80,7 +80,7 @@ class UnicodeFunctionsTest(UnicodeDatabaseTest): # update this, if the database changes - expectedchecksum = 'dd36312c31318f938b9d9ecff757393508c5bd48' + expectedchecksum = '6ccf1b1a36460d2694f9b0b0f0324942fe70ede6' def test_function_checksum(self): data = [] From python-checkins at python.org Fri Mar 19 01:08:44 2010 From: python-checkins at python.org (collin.winter) Date: Fri, 19 Mar 2010 01:08:44 +0100 (CET) Subject: [Python-checkins] r79084 - in python/trunk/Misc: NEWS python-config.in Message-ID: <20100319000844.D74BFF6B6@mail.python.org> Author: collin.winter Date: Fri Mar 19 01:08:44 2010 New Revision: 79084 Log: Make python-config support multiple option flags on the same command line, rather than requiring one invocation per flag. Modified: python/trunk/Misc/NEWS python/trunk/Misc/python-config.in Modified: python/trunk/Misc/NEWS ============================================================================== --- python/trunk/Misc/NEWS (original) +++ python/trunk/Misc/NEWS Fri Mar 19 01:08:44 2010 @@ -82,6 +82,8 @@ measures the number of UDP packets processed per second depending on the number of background CPU-bound Python threads. +- python-config now supports multiple options on the same command line. + Build ----- Modified: python/trunk/Misc/python-config.in ============================================================================== --- python/trunk/Misc/python-config.in (original) +++ python/trunk/Misc/python-config.in Fri Mar 19 01:08:44 2010 @@ -5,11 +5,11 @@ import getopt from distutils import sysconfig -valid_opts = ['prefix', 'exec-prefix', 'includes', 'libs', 'cflags', +valid_opts = ['prefix', 'exec-prefix', 'includes', 'libs', 'cflags', 'ldflags', 'help'] def exit_with_usage(code=1): - print >>sys.stderr, "Usage: %s [%s]" % (sys.argv[0], + print >>sys.stderr, "Usage: %s [%s]" % (sys.argv[0], '|'.join('--'+opt for opt in valid_opts)) sys.exit(code) @@ -21,33 +21,36 @@ if not opts: exit_with_usage() -opt = opts[0][0] - pyver = sysconfig.get_config_var('VERSION') getvar = sysconfig.get_config_var -if opt == '--help': - exit_with_usage(0) - -elif opt == '--prefix': - print sysconfig.PREFIX +opt_flags = [flag for (flag, val) in opts] -elif opt == '--exec-prefix': - print sysconfig.EXEC_PREFIX +if '--help' in opt_flags: + exit_with_usage(code=0) -elif opt in ('--includes', '--cflags'): - flags = ['-I' + sysconfig.get_python_inc(), - '-I' + sysconfig.get_python_inc(plat_specific=True)] - if opt == '--cflags': - flags.extend(getvar('CFLAGS').split()) - print ' '.join(flags) - -elif opt in ('--libs', '--ldflags'): - libs = getvar('LIBS').split() + getvar('SYSLIBS').split() - libs.append('-lpython'+pyver) - # add the prefix/lib/pythonX.Y/config dir, but only if there is no - # shared library in prefix/lib/. - if opt == '--ldflags' and not getvar('Py_ENABLE_SHARED'): - libs.insert(0, '-L' + getvar('LIBPL')) - print ' '.join(libs) +for opt in opt_flags: + if opt == '--prefix': + print sysconfig.PREFIX + + elif opt == '--exec-prefix': + print sysconfig.EXEC_PREFIX + + elif opt in ('--includes', '--cflags'): + flags = ['-I' + sysconfig.get_python_inc(), + '-I' + sysconfig.get_python_inc(plat_specific=True)] + if opt == '--cflags': + flags.extend(getvar('CFLAGS').split()) + print ' '.join(flags) + + elif opt in ('--libs', '--ldflags'): + libs = getvar('LIBS').split() + getvar('SYSLIBS').split() + libs.append('-lpython'+pyver) + # add the prefix/lib/pythonX.Y/config dir, but only if there is no + # shared library in prefix/lib/. + if opt == '--ldflags': + if not getvar('Py_ENABLE_SHARED'): + libs.insert(0, '-L' + getvar('LIBPL')) + libs.extend(getvar('LINKFORSHARED').split()) + print ' '.join(libs) From solipsis at pitrou.net Fri Mar 19 01:19:43 2010 From: solipsis at pitrou.net (solipsis at pitrou.net) Date: Fri, 19 Mar 2010 01:19:43 +0100 (CET) Subject: [Python-checkins] Daily py3k reference leaks (r79062): sum=6 Message-ID: <20100319001943.929261770D@ns6635.ovh.net> py3k results for svn r79062 (hg cset 0cde5e07796a) -------------------------------------------------- test_subprocess leaked [2, 2, 2] references, sum=6 Command line was: ['./python', '-m', 'test.regrtest', '-uall', '-R', '3:3:/home/antoine/py3k/refleaks/reflogsplaSM', '-x', 'test_httpservers'] From nnorwitz at gmail.com Fri Mar 19 01:55:23 2010 From: nnorwitz at gmail.com (Neal Norwitz) Date: Thu, 18 Mar 2010 19:55:23 -0500 Subject: [Python-checkins] Python Regression Test Failures all (2) Message-ID: <20100319005523.GA3246@kbk-i386-bb.psfb.org> 351 tests OK. 2 tests failed: test_ftplib test_fork1 26 tests skipped: test_aepack test_al test_applesingle test_bsddb185 test_cd test_cl test_epoll test_gl test_imgfile test_ioctl test_kqueue test_macos test_macostools test_multiprocessing test_py3kwarn test_scriptpackages test_startfile test_sunaudiodev test_tcl test_tk test_ttk_guionly test_ttk_textonly test_unicode_file test_winreg test_winsound test_zipfile64 6 skips unexpected on linux2: test_multiprocessing test_ttk_guionly test_epoll test_tk test_ioctl test_ttk_textonly == CPython 2.7a4+ (trunk:79050M, Mar 18 2010, 16:05:07) [GCC 3.3.4 20040623 (Gentoo Linux 3.3.4-r1, ssp-3.3.2-2, pie-8.7.6)] == Linux-2.6.9-gentoo-r1-i686-AMD_Athlon-tm-_XP_3000+-with-gentoo-1.4.16 == /tmp/test_python_29215 test_grammar test_opcodes test_dict test_builtin test_exceptions test_types test_unittest test_doctest test_doctest2 test_MimeWriter test_SimpleHTTPServer test_StringIO test___all__ test___future__ test__locale test_abc test_abstract_numbers test_aepack test_aepack skipped -- No module named aetypes test_aifc test_al test_al skipped -- No module named al test_anydbm test_applesingle test_applesingle skipped -- No module named MacOS test_argparse test_array test_ascii_formatd test_ast test_asynchat test_asyncore test_atexit test_audioop test_augassign test_base64 test_bastion test_bigaddrspace test_bigmem test_binascii test_binhex test_binop test_bisect test_bool test_bsddb test_bsddb185 test_bsddb185 skipped -- No module named bsddb185 test_bsddb3 Sleepycat Software: Berkeley DB 4.1.25: (December 19, 2002) Test path prefix: /tmp/z-test_bsddb3-29215 test_buffer test_bufio test_bytes test_bz2 test_calendar test_call test_capi test_cd test_cd skipped -- No module named cd test_cfgparser test_cgi test_charmapcodec test_cl test_cl skipped -- No module named cl test_class test_cmath test_cmd test_cmd_line test_cmd_line_script test_code test_codeccallbacks test_codecencodings_cn test_codecencodings_hk test_codecencodings_jp test_codecencodings_kr test_codecencodings_tw test_codecmaps_cn test_codecmaps_hk test_codecmaps_jp test_codecmaps_kr test_codecmaps_tw test_codecs test_codeop test_coding test_coercion test_collections test_colorsys test_commands test_compare test_compile test_compileall test_compiler testCompileLibrary still working, be patient... testCompileLibrary still working, be patient... testCompileLibrary still working, be patient... testCompileLibrary still working, be patient... test_complex test_complex_args test_contains test_contextlib test_cookie test_cookielib test_copy test_copy_reg test_cpickle test_cprofile test_crypt test_csv test_ctypes test_datetime test_dbm test_decimal test_decorators test_defaultdict test_deque test_descr test_descrtut test_dictcomps test_dictviews test_difflib test_dircache test_dis test_distutils [20616 refs] test_dl test_docxmlrpc test_dumbdbm test_dummy_thread test_dummy_threading test_email test_email_codecs test_email_renamed test_enumerate test_eof test_epoll test_epoll skipped -- kernel doesn't support epoll() test_errno test_exception_variations test_extcall test_fcntl test_file test_file2k test_filecmp test_fileinput test_fileio test_float test_fnmatch test_fork1 test_format test_fpformat test_fractions test_frozen test_ftplib test_funcattrs test_functools test_future test_future3 test_future4 test_future5 test_future_builtins test_gc test_gdbm test_generators test_genericpath test_genexps test_getargs test_getargs2 test_getopt test_gettext test_gl test_gl skipped -- No module named gl test_glob test_global test_grp test_gzip test_hash test_hashlib test_heapq test_hmac test_hotshot test_htmllib test_htmlparser test_httplib test_httpservers [16621 refs] [16621 refs] [16621 refs] [26885 refs] test_imageop test_imaplib test_imgfile test_imgfile skipped -- No module named imgfile test_imp test_import test_importhooks test_importlib test_index test_inspect test_int test_int_literal test_io test_ioctl test_ioctl skipped -- Unable to open /dev/tty test_isinstance test_iter test_iterlen test_itertools test_json test_kqueue test_kqueue skipped -- test works only on BSD test_largefile test_lib2to3 test_linecache test_list test_locale test_logging test_long test_long_future test_longexp test_macos test_macos skipped -- No module named MacOS test_macostools test_macostools skipped -- No module named MacOS test_macpath test_mailbox test_marshal test_math test_md5 test_memoryio test_memoryview test_mhlib test_mimetools test_mimetypes test_minidom test_mmap test_module test_modulefinder test_multibytecodec test_multibytecodec_support test_multifile test_multiprocessing test_multiprocessing skipped -- This platform lacks a functioning sem_open implementation, therefore, the required synchronization primitives needed will not function, see issue 3770. test_mutants test_mutex test_netrc test_new test_nis test_normalization test_ntpath test_old_mailbox test_openpty test_operator test_optparse test_os [16621 refs] [16621 refs] test_parser Expecting 's_push: parser stack overflow' in next line s_push: parser stack overflow test_pdb test_peepholer test_pep247 test_pep263 test_pep277 test_pep292 test_pep352 test_pickle test_pickletools test_pipes test_pkg test_pkgimport test_pkgutil test_platform [18017 refs] [18017 refs] test_plistlib test_poll test_popen [16626 refs] [16626 refs] [16626 refs] test_popen2 test_poplib test_posix test_posixpath test_pow test_pprint test_print test_profile test_profilehooks test_property test_pstats test_pty test_pwd test_py3kwarn test_py3kwarn skipped -- test.test_py3kwarn must be run with the -3 flag test_pyclbr test_pydoc [21735 refs] [21735 refs] [21735 refs] [21735 refs] [21735 refs] [21734 refs] [21734 refs] test_pyexpat test_queue test_quopri [19450 refs] [19450 refs] test_random test_re test_readline test_repr test_resource test_rfc822 test_richcmp test_robotparser test_runpy test_sax test_scope test_scriptpackages test_scriptpackages skipped -- No module named aetools test_select test_set test_setcomps test_sets test_sgmllib test_sha test_shelve test_shlex test_shutil test_signal test_site [16621 refs] [16621 refs] [16621 refs] [16621 refs] test_slice test_smtplib test_smtpnet test_socket test_socketserver test_softspace test_sort test_sqlite test_ssl test_startfile test_startfile skipped -- module os has no attribute startfile test_str test_strftime test_string test_stringprep test_strop test_strptime test_strtod test_struct test_structmembers test_structseq test_subprocess [16621 refs] [16621 refs] [16621 refs] [16621 refs] [16621 refs] [16621 refs] [16621 refs] [16621 refs] [16621 refs] [16621 refs] [16621 refs] [16621 refs] [16621 refs] [16621 refs] [16836 refs] [16621 refs] [16621 refs] [16621 refs] [16621 refs] [16621 refs] . [16621 refs] [16621 refs] this bit of output is from a test of stdout in a different process ... [16621 refs] [16621 refs] [16836 refs] [16621 refs] [16621 refs] p.kill() succeeded after 3 attempts [16621 refs] Traceback (most recent call last): File "", line 1, in KeyboardInterrupt [16621 refs] p.terminate() succeeded after 2 attempts [16621 refs] [16621 refs] [16621 refs] [16621 refs] [16621 refs] [16621 refs] [16621 refs] [16621 refs] [16621 refs] [16621 refs] [16621 refs] [16621 refs] [16621 refs] [16621 refs] [16836 refs] [16621 refs] [16621 refs] [16621 refs] [16621 refs] [16621 refs] . [16621 refs] [16621 refs] this bit of output is from a test of stdout in a different process ... [16621 refs] [16621 refs] [16836 refs] test_sunaudiodev test_sunaudiodev skipped -- No module named sunaudiodev test_sundry test_symtable test_syntax test_sys [16621 refs] [16621 refs] [16621 refs] [16850 refs] [16644 refs] test_sysconfig [16621 refs] [16621 refs] test_tarfile test_tcl test_tcl skipped -- No module named _tkinter test_telnetlib test_tempfile [16621 refs] test_textwrap test_thread test_threaded_import Unhandled exception in thread started by Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/test/test_thread.py", line 218, in thread1 os.close(self.write_fd) OSError: [Errno 9] Bad file descriptor test_threadedtempfile test_threading [19921 refs] [21994 refs] [20906 refs] [20906 refs] [20906 refs] [20906 refs] test_threading_local test_threadsignals test_time test_timeout test_tk test_tk skipped -- No module named _tkinter test_tokenize test_trace test_traceback test_transformer test_ttk_guionly test_ttk_guionly skipped -- No module named _tkinter test_ttk_textonly test_ttk_textonly skipped -- No module named _tkinter test_tuple test_typechecks test_ucn test_unary test_undocumented_details test_unicode test_unicode_file test_unicode_file skipped -- No Unicode filesystem semantics on this platform. test_unicodedata test_univnewlines test_univnewlines2k test_unpack test_urllib test_urllib2 test_urllib2_localnet test_urllib2net test_urllibnet test_urlparse test_userdict test_userlist test_userstring test_uu test_uuid WARNING: uuid.getnode is unreliable on many platforms. It is disabled until the code and/or test can be fixed properly. WARNING: uuid._ifconfig_getnode is unreliable on many platforms. It is disabled until the code and/or test can be fixed properly. WARNING: uuid._unixdll_getnode is unreliable on many platforms. It is disabled until the code and/or test can be fixed properly. test_wait3 test_wait4 test_warnings test_wave test_weakref test_whichdb test_winreg test_winreg skipped -- No module named _winreg test_winsound test_winsound skipped -- No module named winsound test_with test_wsgiref test_xdrlib test_xml_etree test_xml_etree_c test_xmllib test_xmlrpc test_xpickle sh: line 1: python2.4: command not found sh: line 1: python2.6: command not found test_xrange test_zipfile test_size (test.test_ftplib.TestTLS_FTPClassMixin) ... ok test_storbinary (test.test_ftplib.TestTLS_FTPClassMixin) ... ok test_storbinary_rest (test.test_ftplib.TestTLS_FTPClassMixin) ... Exception in thread Thread-267: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/threading.py", line 530, in __bootstrap_inner self.run() File "/tmp/python-test/local/lib/python2.7/test/test_ftplib.py", line 223, in run asyncore.loop(timeout=0.1, count=1) File "/tmp/python-test/local/lib/python2.7/asyncore.py", line 211, in loop poll_fun(timeout, map) File "/tmp/python-test/local/lib/python2.7/asyncore.py", line 148, in poll read(obj) File "/tmp/python-test/local/lib/python2.7/asyncore.py", line 80, in read obj.handle_error() File "/tmp/python-test/local/lib/python2.7/asyncore.py", line 76, in read obj.handle_read_event() File "/tmp/python-test/local/lib/python2.7/test/test_ftplib.py", line 284, in handle_read_event super(SSLConnection, self).handle_read_event() File "/tmp/python-test/local/lib/python2.7/asyncore.py", line 421, in handle_read_event self.handle_read() File "/tmp/python-test/local/lib/python2.7/asynchat.py", line 112, in handle_read self.handle_error() File "/tmp/python-test/local/lib/python2.7/asynchat.py", line 110, in handle_read data = self.recv (self.ac_in_buffer_size) File "/tmp/python-test/local/lib/python2.7/test/test_ftplib.py", line 302, in recv return super(SSLConnection, self).recv(buffer_size) File "/tmp/python-test/local/lib/python2.7/asyncore.py", line 370, in recv data = self.socket.recv(buffer_size) File "/tmp/python-test/local/lib/python2.7/ssl.py", line 96, in self.recv = lambda buflen=1024, flags=0: SSLSocket.recv(self, buflen, flags) File "/tmp/python-test/local/lib/python2.7/ssl.py", line 222, in recv raise x SSLError: [Errno 1] _ssl.c:1335: error:140943FC:SSL routines:SSL3_READ_BYTES:sslv3 alert bad record mac ERROR test_storlines (test.test_ftplib.TestTLS_FTPClassMixin) ... ERROR test_voidcmd (test.test_ftplib.TestTLS_FTPClassMixin) ... ok test_auth_issued_twice (test.test_ftplib.TestTLS_FTPClass) ... ok test_auth_ssl (test.test_ftplib.TestTLS_FTPClass) ... ok test_control_connection (test.test_ftplib.TestTLS_FTPClass) ... ok test_data_connection (test.test_ftplib.TestTLS_FTPClass) ... ok test_login (test.test_ftplib.TestTLS_FTPClass) ... ok ====================================================================== ERROR: test_retrlines (test.test_ftplib.TestTLS_FTPClassMixin) ---------------------------------------------------------------------- Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/test/test_ftplib.py", line 566, in setUp self.client.connect(self.server.host, self.server.port) File "/tmp/python-test/local/lib/python2.7/ftplib.py", line 135, in connect self.welcome = self.getresp() File "/tmp/python-test/local/lib/python2.7/ftplib.py", line 210, in getresp resp = self.getmultiline() File "/tmp/python-test/local/lib/python2.7/ftplib.py", line 196, in getmultiline line = self.getline() File "/tmp/python-test/local/lib/python2.7/ftplib.py", line 183, in getline line = self.file.readline() File "/tmp/python-test/local/lib/python2.7/socket.py", line 445, in readline data = self._sock.recv(self._rbufsize) timeout: timed out ====================================================================== ERROR: test_rmd (test.test_ftplib.TestTLS_FTPClassMixin) ---------------------------------------------------------------------- Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/test/test_ftplib.py", line 569, in setUp self.client.prot_p() File "/tmp/python-test/local/lib/python2.7/ftplib.py", line 657, in prot_p resp = self.voidcmd('PROT P') File "/tmp/python-test/local/lib/python2.7/ftplib.py", line 249, in voidcmd return self.voidresp() File "/tmp/python-test/local/lib/python2.7/ftplib.py", line 224, in voidresp resp = self.getresp() File "/tmp/python-test/local/lib/python2.7/ftplib.py", line 210, in getresp resp = self.getmultiline() File "/tmp/python-test/local/lib/python2.7/ftplib.py", line 196, in getmultiline line = self.getline() File "/tmp/python-test/local/lib/python2.7/ftplib.py", line 183, in getline line = self.file.readline() File "/tmp/python-test/local/lib/python2.7/socket.py", line 445, in readline data = self._sock.recv(self._rbufsize) File "/tmp/python-test/local/lib/python2.7/ssl.py", line 96, in self.recv = lambda buflen=1024, flags=0: SSLSocket.recv(self, buflen, flags) File "/tmp/python-test/local/lib/python2.7/ssl.py", line 222, in recv raise x SSLError: [Errno 1] _ssl.c:1335: error:1408F455:SSL routines:SSL3_GET_RECORD:decryption failed or bad record mac ====================================================================== ERROR: test_storbinary_rest (test.test_ftplib.TestTLS_FTPClassMixin) ---------------------------------------------------------------------- Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/test/test_ftplib.py", line 486, in test_storbinary_rest self.client.storbinary('stor', f, rest=r) File "/tmp/python-test/local/lib/python2.7/ftplib.py", line 730, in storbinary return self.voidresp() File "/tmp/python-test/local/lib/python2.7/ftplib.py", line 224, in voidresp resp = self.getresp() File "/tmp/python-test/local/lib/python2.7/ftplib.py", line 210, in getresp resp = self.getmultiline() File "/tmp/python-test/local/lib/python2.7/ftplib.py", line 196, in getmultiline line = self.getline() File "/tmp/python-test/local/lib/python2.7/ftplib.py", line 183, in getline line = self.file.readline() File "/tmp/python-test/local/lib/python2.7/socket.py", line 445, in readline data = self._sock.recv(self._rbufsize) File "/tmp/python-test/local/lib/python2.7/ssl.py", line 96, in self.recv = lambda buflen=1024, flags=0: SSLSocket.recv(self, buflen, flags) File "/tmp/python-test/local/lib/python2.7/ssl.py", line 222, in recv raise x SSLError: [Errno 1] _ssl.c:1335: error:1408F455:SSL routines:SSL3_GET_RECORD:decryption failed or bad record mac ====================================================================== ERROR: test_storlines (test.test_ftplib.TestTLS_FTPClassMixin) ---------------------------------------------------------------------- Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/test/test_ftplib.py", line 491, in test_storlines self.client.storlines('stor', f) File "/tmp/python-test/local/lib/python2.7/ftplib.py", line 749, in storlines return self.voidresp() File "/tmp/python-test/local/lib/python2.7/ftplib.py", line 224, in voidresp resp = self.getresp() File "/tmp/python-test/local/lib/python2.7/ftplib.py", line 210, in getresp resp = self.getmultiline() File "/tmp/python-test/local/lib/python2.7/ftplib.py", line 196, in getmultiline line = self.getline() File "/tmp/python-test/local/lib/python2.7/ftplib.py", line 183, in getline line = self.file.readline() File "/tmp/python-test/local/lib/python2.7/socket.py", line 445, in readline data = self._sock.recv(self._rbufsize) File "/tmp/python-test/local/lib/python2.7/ssl.py", line 96, in self.recv = lambda buflen=1024, flags=0: SSLSocket.recv(self, buflen, flags) File "/tmp/python-test/local/lib/python2.7/ssl.py", line 222, in recv raise x SSLError: The read operation timed out ---------------------------------------------------------------------- Ran 61 tests in 23.804s FAILED (errors=4) test test_ftplib failed -- multiple errors occurred test_funcattrs test_functools test_future test_future3 test_future4 test_future5 test_future_builtins test_gc test_gdbm test_generators test_genericpath test_genexps test_getargs test_getargs2 test_getopt test_gettext test_gl test_gl skipped -- No module named gl test_glob test_global test_grp test_gzip test_hash test_hashlib test_heapq test_hmac test_hotshot test_htmllib test_htmlparser test_httplib test_httpservers [16621 refs] [16621 refs] [16621 refs] [26885 refs] test_imageop test_imaplib test_imgfile test_imgfile skipped -- No module named imgfile test_imp test_import test_importhooks test_importlib test_index test_inspect test_int test_int_literal test_io test_ioctl test_ioctl skipped -- Unable to open /dev/tty test_isinstance test_iter test_iterlen test_itertools test_json test_kqueue test_kqueue skipped -- test works only on BSD test_largefile test_lib2to3 test_linecache test_list test_locale test_logging test_long test_long_future test_longexp test_macos test_macos skipped -- No module named MacOS test_macostools test_macostools skipped -- No module named MacOS test_macpath test_mailbox test_marshal test_math test_md5 test_memoryio test_memoryview test_mhlib test_mimetools test_mimetypes test_minidom test_mmap test_module test_modulefinder test_multibytecodec test_multibytecodec_support test_multifile test_multiprocessing test_multiprocessing skipped -- This platform lacks a functioning sem_open implementation, therefore, the required synchronization primitives needed will not function, see issue 3770. test_mutants test_mutex test_netrc test_new test_nis test_normalization test_ntpath test_old_mailbox test_openpty test_operator test_optparse test_os [16621 refs] [16621 refs] test_parser Expecting 's_push: parser stack overflow' in next line s_push: parser stack overflow test_pdb test_peepholer test_pep247 test_pep263 test_pep277 test_pep292 test_pep352 test_pickle test_pickletools test_pipes test_pkg test_pkgimport test_pkgutil test_platform [18017 refs] [18017 refs] test_plistlib test_poll test_popen [16626 refs] [16626 refs] [16626 refs] test_popen2 test_poplib test_posix test_posixpath test_pow test_pprint test_print test_profile test_profilehooks test_property test_pstats test_pty test_pwd test_py3kwarn test_py3kwarn skipped -- test.test_py3kwarn must be run with the -3 flag test_pyclbr test_pydoc [21735 refs] [21735 refs] [21735 refs] [21735 refs] [21735 refs] [21734 refs] [21734 refs] test_pyexpat test_queue test_quopri [19450 refs] [19450 refs] test_random test_re test_readline test_repr test_resource test_rfc822 test_richcmp test_robotparser test_runpy test_sax test_scope test_scriptpackages test_scriptpackages skipped -- No module named aetools test_select test_set test_setcomps test_sets test_sgmllib test_sha test_shelve test_shlex test_shutil test_signal test_site [16621 refs] [16621 refs] [16621 refs] [16621 refs] test_slice test_smtplib test_smtpnet test_socket test_socketserver test_softspace test_sort test_sqlite test_ssl test_startfile test_startfile skipped -- module os has no attribute startfile test_str test_strftime test_string test_stringprep test_strop test_strptime test_strtod test_struct test_structmembers test_structseq test_subprocess [16621 refs] [16621 refs] [16621 refs] [16621 refs] [16621 refs] [16621 refs] [16621 refs] [16621 refs] [16621 refs] [16621 refs] [16621 refs] [16621 refs] [16621 refs] [16621 refs] [16836 refs] [16621 refs] [16621 refs] [16621 refs] [16621 refs] [16621 refs] . [16621 refs] [16621 refs] this bit of output is from a test of stdout in a different process ... [16621 refs] [16621 refs] [16836 refs] [16621 refs] [16621 refs] [16621 refs] Traceback (most recent call last): File "", line 1, in KeyboardInterrupt [16621 refs] p.terminate() succeeded after 2 attempts [16621 refs] [16621 refs] [16621 refs] [16621 refs] [16621 refs] [16621 refs] [16621 refs] [16621 refs] [16621 refs] [16621 refs] [16621 refs] [16621 refs] [16621 refs] [16621 refs] [16836 refs] [16621 refs] [16621 refs] [16621 refs] [16621 refs] [16621 refs] . [16621 refs] [16621 refs] this bit of output is from a test of stdout in a different process ... [16621 refs] [16621 refs] [16836 refs] test_sunaudiodev test_sunaudiodev skipped -- No module named sunaudiodev test_sundry test_symtable test_syntax test_sys [16621 refs] [16621 refs] [16621 refs] [16850 refs] [16644 refs] test_sysconfig [16621 refs] [16621 refs] test_tarfile test_tcl test_tcl skipped -- No module named _tkinter test_telnetlib test_tempfile [16621 refs] test_textwrap test_thread test_threaded_import test_threadedtempfile test_threading [19921 refs] [21994 refs] [20906 refs] [20906 refs] [20906 refs] [20906 refs] test_threading_local test_threadsignals test_time test_timeout test_tk test_tk skipped -- No module named _tkinter test_tokenize test_trace test_traceback test_transformer test_ttk_guionly test_ttk_guionly skipped -- No module named _tkinter test_ttk_textonly test_ttk_textonly skipped -- No module named _tkinter test_tuple test_typechecks test_ucn test_unary test_undocumented_details test_unicode test_unicode_file test_unicode_file skipped -- No Unicode filesystem semantics on this platform. test_unicodedata test_univnewlines test_univnewlines2k test_unpack test_urllib test_urllib2 test_urllib2_localnet test_urllib2net test_urllibnet test_urlparse test_userdict test_userlist test_userstring test_uu test_uuid WARNING: uuid.getnode is unreliable on many platforms. It is disabled until the code and/or test can be fixed properly. WARNING: uuid._ifconfig_getnode is unreliable on many platforms. It is disabled until the code and/or test can be fixed properly. WARNING: uuid._unixdll_getnode is unreliable on many platforms. It is disabled until the code and/or test can be fixed properly. test_wait3 test_wait4 test_warnings test_wave test_weakref test_whichdb test_winreg test_winreg skipped -- No module named _winreg test_winsound test_winsound skipped -- No module named winsound test_with test_wsgiref test_xdrlib test_xml_etree test_xml_etree_c test_xmllib test_xmlrpc test_xpickle sh: line 1: python2.4: command not found sh: line 1: python2.6: command not found test_xrange test_zipfile test_zipfile64 test_zipfile64 skipped -- test requires loads of disk-space bytes and a long time to run test_zipimport test_zipimport_support test_zlib 351 tests OK. 2 tests failed: test_ftplib test_fork1 26 tests skipped: test_aepack test_al test_applesingle test_bsddb185 test_cd test_cl test_epoll test_gl test_imgfile test_ioctl test_kqueue test_macos test_macostools test_multiprocessing test_py3kwarn test_scriptpackages test_startfile test_sunaudiodev test_tcl test_tk test_ttk_guionly test_ttk_textonly test_unicode_file test_winreg test_winsound test_zipfile64 6 skips unexpected on linux2: test_multiprocessing test_ttk_guionly test_epoll test_tk test_ioctl test_ttk_textonly [964482 refs] From nnorwitz at gmail.com Fri Mar 19 01:55:39 2010 From: nnorwitz at gmail.com (Neal Norwitz) Date: Thu, 18 Mar 2010 19:55:39 -0500 Subject: [Python-checkins] Python Regression Test Failures all (2) Message-ID: <20100319005539.GA3281@kbk-i386-bb.psfb.org> 351 tests OK. 2 tests failed: test_ftplib test_fork1 26 tests skipped: test_aepack test_al test_applesingle test_bsddb185 test_cd test_cl test_epoll test_gl test_imgfile test_ioctl test_kqueue test_macos test_macostools test_multiprocessing test_py3kwarn test_scriptpackages test_startfile test_sunaudiodev test_tcl test_tk test_ttk_guionly test_ttk_textonly test_unicode_file test_winreg test_winsound test_zipfile64 6 skips unexpected on linux2: test_multiprocessing test_ttk_guionly test_epoll test_tk test_ioctl test_ttk_textonly == CPython 2.7a4+ (trunk:79050M, Mar 18 2010, 16:05:07) [GCC 3.3.4 20040623 (Gentoo Linux 3.3.4-r1, ssp-3.3.2-2, pie-8.7.6)] == Linux-2.6.9-gentoo-r1-i686-AMD_Athlon-tm-_XP_3000+-with-gentoo-1.4.16 == /tmp/test_python_29215 test_grammar test_opcodes test_dict test_builtin test_exceptions test_types test_unittest test_doctest test_doctest2 test_MimeWriter test_SimpleHTTPServer test_StringIO test___all__ test___future__ test__locale test_abc test_abstract_numbers test_aepack test_aepack skipped -- No module named aetypes test_aifc test_al test_al skipped -- No module named al test_anydbm test_applesingle test_applesingle skipped -- No module named MacOS test_argparse test_array test_ascii_formatd test_ast test_asynchat test_asyncore test_atexit test_audioop test_augassign test_base64 test_bastion test_bigaddrspace test_bigmem test_binascii test_binhex test_binop test_bisect test_bool test_bsddb test_bsddb185 test_bsddb185 skipped -- No module named bsddb185 test_bsddb3 Sleepycat Software: Berkeley DB 4.1.25: (December 19, 2002) Test path prefix: /tmp/z-test_bsddb3-29215 test_buffer test_bufio test_bytes test_bz2 test_calendar test_call test_capi test_cd test_cd skipped -- No module named cd test_cfgparser test_cgi test_charmapcodec test_cl test_cl skipped -- No module named cl test_class test_cmath test_cmd test_cmd_line test_cmd_line_script test_code test_codeccallbacks test_codecencodings_cn test_codecencodings_hk test_codecencodings_jp test_codecencodings_kr test_codecencodings_tw test_codecmaps_cn test_codecmaps_hk test_codecmaps_jp test_codecmaps_kr test_codecmaps_tw test_codecs test_codeop test_coding test_coercion test_collections test_colorsys test_commands test_compare test_compile test_compileall test_compiler testCompileLibrary still working, be patient... testCompileLibrary still working, be patient... testCompileLibrary still working, be patient... testCompileLibrary still working, be patient... test_complex test_complex_args test_contains test_contextlib test_cookie test_cookielib test_copy test_copy_reg test_cpickle test_cprofile test_crypt test_csv test_ctypes test_datetime test_dbm test_decimal test_decorators test_defaultdict test_deque test_descr test_descrtut test_dictcomps test_dictviews test_difflib test_dircache test_dis test_distutils test_dl test_docxmlrpc test_dumbdbm test_dummy_thread test_dummy_threading test_email test_email_codecs test_email_renamed test_enumerate test_eof test_epoll test_epoll skipped -- kernel doesn't support epoll() test_errno test_exception_variations test_extcall test_fcntl test_file test_file2k test_filecmp test_fileinput test_fileio test_float test_fnmatch test_fork1 test_format test_fpformat test_fractions test_frozen test_ftplib test_funcattrs test_functools test_future test_future3 test_future4 test_future5 test_future_builtins test_gc test_gdbm test_generators test_genericpath test_genexps test_getargs test_getargs2 test_getopt test_gettext test_gl test_gl skipped -- No module named gl test_glob test_global test_grp test_gzip test_hash test_hashlib test_heapq test_hmac test_hotshot test_htmllib test_htmlparser test_httplib test_httpservers test_imageop test_imaplib test_imgfile test_imgfile skipped -- No module named imgfile test_imp test_import test_importhooks test_importlib test_index test_inspect test_int test_int_literal test_io test_ioctl test_ioctl skipped -- Unable to open /dev/tty test_isinstance test_iter test_iterlen test_itertools test_json test_kqueue test_kqueue skipped -- test works only on BSD test_largefile test_lib2to3 test_linecache test_list test_locale test_logging test_long test_long_future test_longexp test_macos test_macos skipped -- No module named MacOS test_macostools test_macostools skipped -- No module named MacOS test_macpath test_mailbox test_marshal test_math test_md5 test_memoryio test_memoryview test_mhlib test_mimetools test_mimetypes test_minidom test_mmap test_module test_modulefinder test_multibytecodec test_multibytecodec_support test_multifile test_multiprocessing test_multiprocessing skipped -- This platform lacks a functioning sem_open implementation, therefore, the required synchronization primitives needed will not function, see issue 3770. test_mutants test_mutex test_netrc test_new test_nis test_normalization test_ntpath test_old_mailbox test_openpty test_operator test_optparse test_os test_parser Expecting 's_push: parser stack overflow' in next line s_push: parser stack overflow test_pdb test_peepholer test_pep247 test_pep263 test_pep277 test_pep292 test_pep352 test_pickle test_pickletools test_pipes test_pkg test_pkgimport test_pkgutil test_platform test_plistlib test_poll test_popen test_popen2 test_poplib test_posix test_posixpath test_pow test_pprint test_print test_profile test_profilehooks test_property test_pstats test_pty test_pwd test_py3kwarn test_py3kwarn skipped -- test.test_py3kwarn must be run with the -3 flag test_pyclbr test_pydoc test_pyexpat test_queue test_quopri test_random test_re test_readline test_repr test_resource test_rfc822 test_richcmp test_robotparser test_runpy test_sax test_scope test_scriptpackages test_scriptpackages skipped -- No module named aetools test_select test_set test_setcomps test_sets test_sgmllib test_sha test_shelve test_shlex test_shutil test_signal test_site test_slice test_smtplib test_smtpnet test_socket test_socketserver test_softspace test_sort test_sqlite test_ssl test_startfile test_startfile skipped -- module os has no attribute startfile test_str test_strftime test_string test_stringprep test_strop test_strptime test_strtod test_struct test_structmembers test_structseq test_subprocess . this bit of output is from a test of stdout in a different process ... p.kill() succeeded after 3 attempts Traceback (most recent call last): File "", line 1, in KeyboardInterrupt p.terminate() succeeded after 2 attempts . this bit of output is from a test of stdout in a different process ... test_sunaudiodev test_sunaudiodev skipped -- No module named sunaudiodev test_sundry test_symtable test_syntax test_sys test_sysconfig test_tarfile test_tcl test_tcl skipped -- No module named _tkinter test_telnetlib test_tempfile test_textwrap test_thread test_threaded_import Unhandled exception in thread started by Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/test/test_thread.py", line 218, in thread1 os.close(self.write_fd) OSError: [Errno 9] Bad file descriptor test_threadedtempfile test_threading test_threading_local test_threadsignals test_time test_timeout test_tk test_tk skipped -- No module named _tkinter test_tokenize test_trace test_traceback test_transformer test_ttk_guionly test_ttk_guionly skipped -- No module named _tkinter test_ttk_textonly test_ttk_textonly skipped -- No module named _tkinter test_tuple test_typechecks test_ucn test_unary test_undocumented_details test_unicode test_unicode_file test_unicode_file skipped -- No Unicode filesystem semantics on this platform. test_unicodedata test_univnewlines test_univnewlines2k test_unpack test_urllib test_urllib2 test_urllib2_localnet test_urllib2net test_urllibnet test_urlparse test_userdict test_userlist test_userstring test_uu test_uuid WARNING: uuid.getnode is unreliable on many platforms. It is disabled until the code and/or test can be fixed properly. WARNING: uuid._ifconfig_getnode is unreliable on many platforms. It is disabled until the code and/or test can be fixed properly. WARNING: uuid._unixdll_getnode is unreliable on many platforms. It is disabled until the code and/or test can be fixed properly. test_wait3 test_wait4 test_warnings test_wave test_weakref test_whichdb test_winreg test_winreg skipped -- No module named _winreg test_winsound test_winsound skipped -- No module named winsound test_with test_wsgiref test_xdrlib test_xml_etree test_xml_etree_c test_xmllib test_xmlrpc test_xpickle sh: line 1: python2.4: command not found sh: line 1: python2.6: command not found test_xrange test_zipfile test_size (test.test_ftplib.TestTLS_FTPClassMixin) ... ok test_storbinary (test.test_ftplib.TestTLS_FTPClassMixin) ... ok test_storbinary_rest (test.test_ftplib.TestTLS_FTPClassMixin) ... Exception in thread Thread-267: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/threading.py", line 530, in __bootstrap_inner self.run() File "/tmp/python-test/local/lib/python2.7/test/test_ftplib.py", line 223, in run asyncore.loop(timeout=0.1, count=1) File "/tmp/python-test/local/lib/python2.7/asyncore.py", line 211, in loop poll_fun(timeout, map) File "/tmp/python-test/local/lib/python2.7/asyncore.py", line 148, in poll read(obj) File "/tmp/python-test/local/lib/python2.7/asyncore.py", line 80, in read obj.handle_error() File "/tmp/python-test/local/lib/python2.7/asyncore.py", line 76, in read obj.handle_read_event() File "/tmp/python-test/local/lib/python2.7/test/test_ftplib.py", line 284, in handle_read_event super(SSLConnection, self).handle_read_event() File "/tmp/python-test/local/lib/python2.7/asyncore.py", line 421, in handle_read_event self.handle_read() File "/tmp/python-test/local/lib/python2.7/asynchat.py", line 112, in handle_read self.handle_error() File "/tmp/python-test/local/lib/python2.7/asynchat.py", line 110, in handle_read data = self.recv (self.ac_in_buffer_size) File "/tmp/python-test/local/lib/python2.7/test/test_ftplib.py", line 302, in recv return super(SSLConnection, self).recv(buffer_size) File "/tmp/python-test/local/lib/python2.7/asyncore.py", line 370, in recv data = self.socket.recv(buffer_size) File "/tmp/python-test/local/lib/python2.7/ssl.py", line 96, in self.recv = lambda buflen=1024, flags=0: SSLSocket.recv(self, buflen, flags) File "/tmp/python-test/local/lib/python2.7/ssl.py", line 222, in recv raise x SSLError: [Errno 1] _ssl.c:1335: error:140943FC:SSL routines:SSL3_READ_BYTES:sslv3 alert bad record mac ERROR test_storlines (test.test_ftplib.TestTLS_FTPClassMixin) ... ERROR test_voidcmd (test.test_ftplib.TestTLS_FTPClassMixin) ... ok test_auth_issued_twice (test.test_ftplib.TestTLS_FTPClass) ... ok test_auth_ssl (test.test_ftplib.TestTLS_FTPClass) ... ok test_control_connection (test.test_ftplib.TestTLS_FTPClass) ... ok test_data_connection (test.test_ftplib.TestTLS_FTPClass) ... ok test_login (test.test_ftplib.TestTLS_FTPClass) ... ok ====================================================================== ERROR: test_retrlines (test.test_ftplib.TestTLS_FTPClassMixin) ---------------------------------------------------------------------- Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/test/test_ftplib.py", line 566, in setUp self.client.connect(self.server.host, self.server.port) File "/tmp/python-test/local/lib/python2.7/ftplib.py", line 135, in connect self.welcome = self.getresp() File "/tmp/python-test/local/lib/python2.7/ftplib.py", line 210, in getresp resp = self.getmultiline() File "/tmp/python-test/local/lib/python2.7/ftplib.py", line 196, in getmultiline line = self.getline() File "/tmp/python-test/local/lib/python2.7/ftplib.py", line 183, in getline line = self.file.readline() File "/tmp/python-test/local/lib/python2.7/socket.py", line 445, in readline data = self._sock.recv(self._rbufsize) timeout: timed out ====================================================================== ERROR: test_rmd (test.test_ftplib.TestTLS_FTPClassMixin) ---------------------------------------------------------------------- Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/test/test_ftplib.py", line 569, in setUp self.client.prot_p() File "/tmp/python-test/local/lib/python2.7/ftplib.py", line 657, in prot_p resp = self.voidcmd('PROT P') File "/tmp/python-test/local/lib/python2.7/ftplib.py", line 249, in voidcmd return self.voidresp() File "/tmp/python-test/local/lib/python2.7/ftplib.py", line 224, in voidresp resp = self.getresp() File "/tmp/python-test/local/lib/python2.7/ftplib.py", line 210, in getresp resp = self.getmultiline() File "/tmp/python-test/local/lib/python2.7/ftplib.py", line 196, in getmultiline line = self.getline() File "/tmp/python-test/local/lib/python2.7/ftplib.py", line 183, in getline line = self.file.readline() File "/tmp/python-test/local/lib/python2.7/socket.py", line 445, in readline data = self._sock.recv(self._rbufsize) File "/tmp/python-test/local/lib/python2.7/ssl.py", line 96, in self.recv = lambda buflen=1024, flags=0: SSLSocket.recv(self, buflen, flags) File "/tmp/python-test/local/lib/python2.7/ssl.py", line 222, in recv raise x SSLError: [Errno 1] _ssl.c:1335: error:1408F455:SSL routines:SSL3_GET_RECORD:decryption failed or bad record mac ====================================================================== ERROR: test_storbinary_rest (test.test_ftplib.TestTLS_FTPClassMixin) ---------------------------------------------------------------------- Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/test/test_ftplib.py", line 486, in test_storbinary_rest self.client.storbinary('stor', f, rest=r) File "/tmp/python-test/local/lib/python2.7/ftplib.py", line 730, in storbinary return self.voidresp() File "/tmp/python-test/local/lib/python2.7/ftplib.py", line 224, in voidresp resp = self.getresp() File "/tmp/python-test/local/lib/python2.7/ftplib.py", line 210, in getresp resp = self.getmultiline() File "/tmp/python-test/local/lib/python2.7/ftplib.py", line 196, in getmultiline line = self.getline() File "/tmp/python-test/local/lib/python2.7/ftplib.py", line 183, in getline line = self.file.readline() File "/tmp/python-test/local/lib/python2.7/socket.py", line 445, in readline data = self._sock.recv(self._rbufsize) File "/tmp/python-test/local/lib/python2.7/ssl.py", line 96, in self.recv = lambda buflen=1024, flags=0: SSLSocket.recv(self, buflen, flags) File "/tmp/python-test/local/lib/python2.7/ssl.py", line 222, in recv raise x SSLError: [Errno 1] _ssl.c:1335: error:1408F455:SSL routines:SSL3_GET_RECORD:decryption failed or bad record mac ====================================================================== ERROR: test_storlines (test.test_ftplib.TestTLS_FTPClassMixin) ---------------------------------------------------------------------- Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/test/test_ftplib.py", line 491, in test_storlines self.client.storlines('stor', f) File "/tmp/python-test/local/lib/python2.7/ftplib.py", line 749, in storlines return self.voidresp() File "/tmp/python-test/local/lib/python2.7/ftplib.py", line 224, in voidresp resp = self.getresp() File "/tmp/python-test/local/lib/python2.7/ftplib.py", line 210, in getresp resp = self.getmultiline() File "/tmp/python-test/local/lib/python2.7/ftplib.py", line 196, in getmultiline line = self.getline() File "/tmp/python-test/local/lib/python2.7/ftplib.py", line 183, in getline line = self.file.readline() File "/tmp/python-test/local/lib/python2.7/socket.py", line 445, in readline data = self._sock.recv(self._rbufsize) File "/tmp/python-test/local/lib/python2.7/ssl.py", line 96, in self.recv = lambda buflen=1024, flags=0: SSLSocket.recv(self, buflen, flags) File "/tmp/python-test/local/lib/python2.7/ssl.py", line 222, in recv raise x SSLError: The read operation timed out ---------------------------------------------------------------------- Ran 61 tests in 23.804s FAILED (errors=4) test test_ftplib failed -- multiple errors occurred test_funcattrs test_functools test_future test_future3 test_future4 test_future5 test_future_builtins test_gc test_gdbm test_generators test_genericpath test_genexps test_getargs test_getargs2 test_getopt test_gettext test_gl test_gl skipped -- No module named gl test_glob test_global test_grp test_gzip test_hash test_hashlib test_heapq test_hmac test_hotshot test_htmllib test_htmlparser test_httplib test_httpservers test_imageop test_imaplib test_imgfile test_imgfile skipped -- No module named imgfile test_imp test_import test_importhooks test_importlib test_index test_inspect test_int test_int_literal test_io test_ioctl test_ioctl skipped -- Unable to open /dev/tty test_isinstance test_iter test_iterlen test_itertools test_json test_kqueue test_kqueue skipped -- test works only on BSD test_largefile test_lib2to3 test_linecache test_list test_locale test_logging test_long test_long_future test_longexp test_macos test_macos skipped -- No module named MacOS test_macostools test_macostools skipped -- No module named MacOS test_macpath test_mailbox test_marshal test_math test_md5 test_memoryio test_memoryview test_mhlib test_mimetools test_mimetypes test_minidom test_mmap test_module test_modulefinder test_multibytecodec test_multibytecodec_support test_multifile test_multiprocessing test_multiprocessing skipped -- This platform lacks a functioning sem_open implementation, therefore, the required synchronization primitives needed will not function, see issue 3770. test_mutants test_mutex test_netrc test_new test_nis test_normalization test_ntpath test_old_mailbox test_openpty test_operator test_optparse test_os test_parser Expecting 's_push: parser stack overflow' in next line s_push: parser stack overflow test_pdb test_peepholer test_pep247 test_pep263 test_pep277 test_pep292 test_pep352 test_pickle test_pickletools test_pipes test_pkg test_pkgimport test_pkgutil test_platform test_plistlib test_poll test_popen test_popen2 test_poplib test_posix test_posixpath test_pow test_pprint test_print test_profile test_profilehooks test_property test_pstats test_pty test_pwd test_py3kwarn test_py3kwarn skipped -- test.test_py3kwarn must be run with the -3 flag test_pyclbr test_pydoc test_pyexpat test_queue test_quopri test_random test_re test_readline test_repr test_resource test_rfc822 test_richcmp test_robotparser test_runpy test_sax test_scope test_scriptpackages test_scriptpackages skipped -- No module named aetools test_select test_set test_setcomps test_sets test_sgmllib test_sha test_shelve test_shlex test_shutil test_signal test_site test_slice test_smtplib test_smtpnet test_socket test_socketserver test_softspace test_sort test_sqlite test_ssl test_startfile test_startfile skipped -- module os has no attribute startfile test_str test_strftime test_string test_stringprep test_strop test_strptime test_strtod test_struct test_structmembers test_structseq test_subprocess . this bit of output is from a test of stdout in a different process ... Traceback (most recent call last): File "", line 1, in KeyboardInterrupt p.terminate() succeeded after 2 attempts . this bit of output is from a test of stdout in a different process ... test_sunaudiodev test_sunaudiodev skipped -- No module named sunaudiodev test_sundry test_symtable test_syntax test_sys test_sysconfig test_tarfile test_tcl test_tcl skipped -- No module named _tkinter test_telnetlib test_tempfile test_textwrap test_thread test_threaded_import test_threadedtempfile test_threading test_threading_local test_threadsignals test_time test_timeout test_tk test_tk skipped -- No module named _tkinter test_tokenize test_trace test_traceback test_transformer test_ttk_guionly test_ttk_guionly skipped -- No module named _tkinter test_ttk_textonly test_ttk_textonly skipped -- No module named _tkinter test_tuple test_typechecks test_ucn test_unary test_undocumented_details test_unicode test_unicode_file test_unicode_file skipped -- No Unicode filesystem semantics on this platform. test_unicodedata test_univnewlines test_univnewlines2k test_unpack test_urllib test_urllib2 test_urllib2_localnet test_urllib2net test_urllibnet test_urlparse test_userdict test_userlist test_userstring test_uu test_uuid WARNING: uuid.getnode is unreliable on many platforms. It is disabled until the code and/or test can be fixed properly. WARNING: uuid._ifconfig_getnode is unreliable on many platforms. It is disabled until the code and/or test can be fixed properly. WARNING: uuid._unixdll_getnode is unreliable on many platforms. It is disabled until the code and/or test can be fixed properly. test_wait3 test_wait4 test_warnings test_wave test_weakref test_whichdb test_winreg test_winreg skipped -- No module named _winreg test_winsound test_winsound skipped -- No module named winsound test_with test_wsgiref test_xdrlib test_xml_etree test_xml_etree_c test_xmllib test_xmlrpc test_xpickle sh: line 1: python2.4: command not found sh: line 1: python2.6: command not found test_xrange test_zipfile test_zipfile64 test_zipfile64 skipped -- test requires loads of disk-space bytes and a long time to run test_zipimport test_zipimport_support test_zlib 351 tests OK. 2 tests failed: test_ftplib test_fork1 26 tests skipped: test_aepack test_al test_applesingle test_bsddb185 test_cd test_cl test_epoll test_gl test_imgfile test_ioctl test_kqueue test_macos test_macostools test_multiprocessing test_py3kwarn test_scriptpackages test_startfile test_sunaudiodev test_tcl test_tk test_ttk_guionly test_ttk_textonly test_unicode_file test_winreg test_winsound test_zipfile64 6 skips unexpected on linux2: test_multiprocessing test_ttk_guionly test_epoll test_tk test_ioctl test_ttk_textonly 351 tests OK. 2 tests failed: test_ftplib test_fork1 26 tests skipped: test_aepack test_al test_applesingle test_bsddb185 test_cd test_cl test_epoll test_gl test_imgfile test_ioctl test_kqueue test_macos test_macostools test_multiprocessing test_py3kwarn test_scriptpackages test_startfile test_sunaudiodev test_tcl test_tk test_ttk_guionly test_ttk_textonly test_unicode_file test_winreg test_winsound test_zipfile64 6 skips unexpected on linux2: test_multiprocessing test_ttk_guionly test_epoll test_tk test_ioctl test_ttk_textonly == CPython 2.7a4+ (trunk:79050M, Mar 18 2010, 16:05:07) [GCC 3.3.4 20040623 (Gentoo Linux 3.3.4-r1, ssp-3.3.2-2, pie-8.7.6)] == Linux-2.6.9-gentoo-r1-i686-AMD_Athlon-tm-_XP_3000+-with-gentoo-1.4.16 == /tmp/test_python_29215 test_grammar test_opcodes test_dict test_builtin test_exceptions test_types test_unittest test_doctest test_doctest2 test_MimeWriter test_SimpleHTTPServer test_StringIO test___all__ test___future__ test__locale test_abc test_abstract_numbers test_aepack test_aepack skipped -- No module named aetypes test_aifc test_al test_al skipped -- No module named al test_anydbm test_applesingle test_applesingle skipped -- No module named MacOS test_argparse test_array test_ascii_formatd test_ast test_asynchat test_asyncore test_atexit test_audioop test_augassign test_base64 test_bastion test_bigaddrspace test_bigmem test_binascii test_binhex test_binop test_bisect test_bool test_bsddb test_bsddb185 test_bsddb185 skipped -- No module named bsddb185 test_bsddb3 Sleepycat Software: Berkeley DB 4.1.25: (December 19, 2002) Test path prefix: /tmp/z-test_bsddb3-29215 test_buffer test_bufio test_bytes test_bz2 test_calendar test_call test_capi test_cd test_cd skipped -- No module named cd test_cfgparser test_cgi test_charmapcodec test_cl test_cl skipped -- No module named cl test_class test_cmath test_cmd test_cmd_line test_cmd_line_script test_code test_codeccallbacks test_codecencodings_cn test_codecencodings_hk test_codecencodings_jp test_codecencodings_kr test_codecencodings_tw test_codecmaps_cn test_codecmaps_hk test_codecmaps_jp test_codecmaps_kr test_codecmaps_tw test_codecs test_codeop test_coding test_coercion test_collections test_colorsys test_commands test_compare test_compile test_compileall test_compiler testCompileLibrary still working, be patient... testCompileLibrary still working, be patient... testCompileLibrary still working, be patient... testCompileLibrary still working, be patient... test_complex test_complex_args test_contains test_contextlib test_cookie test_cookielib test_copy test_copy_reg test_cpickle test_cprofile test_crypt test_csv test_ctypes test_datetime test_dbm test_decimal test_decorators test_defaultdict test_deque test_descr test_descrtut test_dictcomps test_dictviews test_difflib test_dircache test_dis test_distutils [20616 refs] test_dl test_docxmlrpc test_dumbdbm test_dummy_thread test_dummy_threading test_email test_email_codecs test_email_renamed test_enumerate test_eof test_epoll test_epoll skipped -- kernel doesn't support epoll() test_errno test_exception_variations test_extcall test_fcntl test_file test_file2k test_filecmp test_fileinput test_fileio test_float test_fnmatch test_fork1 test_format test_fpformat test_fractions test_frozen test_ftplib test_funcattrs test_functools test_future test_future3 test_future4 test_future5 test_future_builtins test_gc test_gdbm test_generators test_genericpath test_genexps test_getargs test_getargs2 test_getopt test_gettext test_gl test_gl skipped -- No module named gl test_glob test_global test_grp test_gzip test_hash test_hashlib test_heapq test_hmac test_hotshot test_htmllib test_htmlparser test_httplib test_httpservers [16621 refs] [16621 refs] [16621 refs] [26885 refs] test_imageop test_imaplib test_imgfile test_imgfile skipped -- No module named imgfile test_imp test_import test_importhooks test_importlib test_index test_inspect test_int test_int_literal test_io test_ioctl test_ioctl skipped -- Unable to open /dev/tty test_isinstance test_iter test_iterlen test_itertools test_json test_kqueue test_kqueue skipped -- test works only on BSD test_largefile test_lib2to3 test_linecache test_list test_locale test_logging test_long test_long_future test_longexp test_macos test_macos skipped -- No module named MacOS test_macostools test_macostools skipped -- No module named MacOS test_macpath test_mailbox test_marshal test_math test_md5 test_memoryio test_memoryview test_mhlib test_mimetools test_mimetypes test_minidom test_mmap test_module test_modulefinder test_multibytecodec test_multibytecodec_support test_multifile test_multiprocessing test_multiprocessing skipped -- This platform lacks a functioning sem_open implementation, therefore, the required synchronization primitives needed will not function, see issue 3770. test_mutants test_mutex test_netrc test_new test_nis test_normalization test_ntpath test_old_mailbox test_openpty test_operator test_optparse test_os [16621 refs] [16621 refs] test_parser Expecting 's_push: parser stack overflow' in next line s_push: parser stack overflow test_pdb test_peepholer test_pep247 test_pep263 test_pep277 test_pep292 test_pep352 test_pickle test_pickletools test_pipes test_pkg test_pkgimport test_pkgutil test_platform [18017 refs] [18017 refs] test_plistlib test_poll test_popen [16626 refs] [16626 refs] [16626 refs] test_popen2 test_poplib test_posix test_posixpath test_pow test_pprint test_print test_profile test_profilehooks test_property test_pstats test_pty test_pwd test_py3kwarn test_py3kwarn skipped -- test.test_py3kwarn must be run with the -3 flag test_pyclbr test_pydoc [21735 refs] [21735 refs] [21735 refs] [21735 refs] [21735 refs] [21734 refs] [21734 refs] test_pyexpat test_queue test_quopri [19450 refs] [19450 refs] test_random test_re test_readline test_repr test_resource test_rfc822 test_richcmp test_robotparser test_runpy test_sax test_scope test_scriptpackages test_scriptpackages skipped -- No module named aetools test_select test_set test_setcomps test_sets test_sgmllib test_sha test_shelve test_shlex test_shutil test_signal test_site [16621 refs] [16621 refs] [16621 refs] [16621 refs] test_slice test_smtplib test_smtpnet test_socket test_socketserver test_softspace test_sort test_sqlite test_ssl test_startfile test_startfile skipped -- module os has no attribute startfile test_str test_strftime test_string test_stringprep test_strop test_strptime test_strtod test_struct test_structmembers test_structseq test_subprocess [16621 refs] [16621 refs] [16621 refs] [16621 refs] [16621 refs] [16621 refs] [16621 refs] [16621 refs] [16621 refs] [16621 refs] [16621 refs] [16621 refs] [16621 refs] [16621 refs] [16836 refs] [16621 refs] [16621 refs] [16621 refs] [16621 refs] [16621 refs] . [16621 refs] [16621 refs] this bit of output is from a test of stdout in a different process ... [16621 refs] [16621 refs] [16836 refs] [16621 refs] [16621 refs] p.kill() succeeded after 3 attempts [16621 refs] Traceback (most recent call last): File "", line 1, in KeyboardInterrupt [16621 refs] p.terminate() succeeded after 2 attempts [16621 refs] [16621 refs] [16621 refs] [16621 refs] [16621 refs] [16621 refs] [16621 refs] [16621 refs] [16621 refs] [16621 refs] [16621 refs] [16621 refs] [16621 refs] [16621 refs] [16836 refs] [16621 refs] [16621 refs] [16621 refs] [16621 refs] [16621 refs] . [16621 refs] [16621 refs] this bit of output is from a test of stdout in a different process ... [16621 refs] [16621 refs] [16836 refs] test_sunaudiodev test_sunaudiodev skipped -- No module named sunaudiodev test_sundry test_symtable test_syntax test_sys [16621 refs] [16621 refs] [16621 refs] [16850 refs] [16644 refs] test_sysconfig [16621 refs] [16621 refs] test_tarfile test_tcl test_tcl skipped -- No module named _tkinter test_telnetlib test_tempfile [16621 refs] test_textwrap test_thread test_threaded_import Unhandled exception in thread started by Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/test/test_thread.py", line 218, in thread1 os.close(self.write_fd) OSError: [Errno 9] Bad file descriptor test_threadedtempfile test_threading [19921 refs] [21994 refs] [20906 refs] [20906 refs] [20906 refs] [20906 refs] test_threading_local test_threadsignals test_time test_timeout test_tk test_tk skipped -- No module named _tkinter test_tokenize test_trace test_traceback test_transformer test_ttk_guionly test_ttk_guionly skipped -- No module named _tkinter test_ttk_textonly test_ttk_textonly skipped -- No module named _tkinter test_tuple test_typechecks test_ucn test_unary test_undocumented_details test_unicode test_unicode_file test_unicode_file skipped -- No Unicode filesystem semantics on this platform. test_unicodedata test_univnewlines test_univnewlines2k test_unpack test_urllib test_urllib2 test_urllib2_localnet test_urllib2net test_urllibnet test_urlparse test_userdict test_userlist test_userstring test_uu test_uuid WARNING: uuid.getnode is unreliable on many platforms. It is disabled until the code and/or test can be fixed properly. WARNING: uuid._ifconfig_getnode is unreliable on many platforms. It is disabled until the code and/or test can be fixed properly. WARNING: uuid._unixdll_getnode is unreliable on many platforms. It is disabled until the code and/or test can be fixed properly. test_wait3 test_wait4 test_warnings test_wave test_weakref test_whichdb test_winreg test_winreg skipped -- No module named _winreg test_winsound test_winsound skipped -- No module named winsound test_with test_wsgiref test_xdrlib test_xml_etree test_xml_etree_c test_xmllib test_xmlrpc test_xpickle sh: line 1: python2.4: command not found sh: line 1: python2.6: command not found test_xrange test_zipfile test_size (test.test_ftplib.TestTLS_FTPClassMixin) ... ok test_storbinary (test.test_ftplib.TestTLS_FTPClassMixin) ... ok test_storbinary_rest (test.test_ftplib.TestTLS_FTPClassMixin) ... Exception in thread Thread-267: Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/threading.py", line 530, in __bootstrap_inner self.run() File "/tmp/python-test/local/lib/python2.7/test/test_ftplib.py", line 223, in run asyncore.loop(timeout=0.1, count=1) File "/tmp/python-test/local/lib/python2.7/asyncore.py", line 211, in loop poll_fun(timeout, map) File "/tmp/python-test/local/lib/python2.7/asyncore.py", line 148, in poll read(obj) File "/tmp/python-test/local/lib/python2.7/asyncore.py", line 80, in read obj.handle_error() File "/tmp/python-test/local/lib/python2.7/asyncore.py", line 76, in read obj.handle_read_event() File "/tmp/python-test/local/lib/python2.7/test/test_ftplib.py", line 284, in handle_read_event super(SSLConnection, self).handle_read_event() File "/tmp/python-test/local/lib/python2.7/asyncore.py", line 421, in handle_read_event self.handle_read() File "/tmp/python-test/local/lib/python2.7/asynchat.py", line 112, in handle_read self.handle_error() File "/tmp/python-test/local/lib/python2.7/asynchat.py", line 110, in handle_read data = self.recv (self.ac_in_buffer_size) File "/tmp/python-test/local/lib/python2.7/test/test_ftplib.py", line 302, in recv return super(SSLConnection, self).recv(buffer_size) File "/tmp/python-test/local/lib/python2.7/asyncore.py", line 370, in recv data = self.socket.recv(buffer_size) File "/tmp/python-test/local/lib/python2.7/ssl.py", line 96, in self.recv = lambda buflen=1024, flags=0: SSLSocket.recv(self, buflen, flags) File "/tmp/python-test/local/lib/python2.7/ssl.py", line 222, in recv raise x SSLError: [Errno 1] _ssl.c:1335: error:140943FC:SSL routines:SSL3_READ_BYTES:sslv3 alert bad record mac ERROR test_storlines (test.test_ftplib.TestTLS_FTPClassMixin) ... ERROR test_voidcmd (test.test_ftplib.TestTLS_FTPClassMixin) ... ok test_auth_issued_twice (test.test_ftplib.TestTLS_FTPClass) ... ok test_auth_ssl (test.test_ftplib.TestTLS_FTPClass) ... ok test_control_connection (test.test_ftplib.TestTLS_FTPClass) ... ok test_data_connection (test.test_ftplib.TestTLS_FTPClass) ... ok test_login (test.test_ftplib.TestTLS_FTPClass) ... ok ====================================================================== ERROR: test_retrlines (test.test_ftplib.TestTLS_FTPClassMixin) ---------------------------------------------------------------------- Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/test/test_ftplib.py", line 566, in setUp self.client.connect(self.server.host, self.server.port) File "/tmp/python-test/local/lib/python2.7/ftplib.py", line 135, in connect self.welcome = self.getresp() File "/tmp/python-test/local/lib/python2.7/ftplib.py", line 210, in getresp resp = self.getmultiline() File "/tmp/python-test/local/lib/python2.7/ftplib.py", line 196, in getmultiline line = self.getline() File "/tmp/python-test/local/lib/python2.7/ftplib.py", line 183, in getline line = self.file.readline() File "/tmp/python-test/local/lib/python2.7/socket.py", line 445, in readline data = self._sock.recv(self._rbufsize) timeout: timed out ====================================================================== ERROR: test_rmd (test.test_ftplib.TestTLS_FTPClassMixin) ---------------------------------------------------------------------- Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/test/test_ftplib.py", line 569, in setUp self.client.prot_p() File "/tmp/python-test/local/lib/python2.7/ftplib.py", line 657, in prot_p resp = self.voidcmd('PROT P') File "/tmp/python-test/local/lib/python2.7/ftplib.py", line 249, in voidcmd return self.voidresp() File "/tmp/python-test/local/lib/python2.7/ftplib.py", line 224, in voidresp resp = self.getresp() File "/tmp/python-test/local/lib/python2.7/ftplib.py", line 210, in getresp resp = self.getmultiline() File "/tmp/python-test/local/lib/python2.7/ftplib.py", line 196, in getmultiline line = self.getline() File "/tmp/python-test/local/lib/python2.7/ftplib.py", line 183, in getline line = self.file.readline() File "/tmp/python-test/local/lib/python2.7/socket.py", line 445, in readline data = self._sock.recv(self._rbufsize) File "/tmp/python-test/local/lib/python2.7/ssl.py", line 96, in self.recv = lambda buflen=1024, flags=0: SSLSocket.recv(self, buflen, flags) File "/tmp/python-test/local/lib/python2.7/ssl.py", line 222, in recv raise x SSLError: [Errno 1] _ssl.c:1335: error:1408F455:SSL routines:SSL3_GET_RECORD:decryption failed or bad record mac ====================================================================== ERROR: test_storbinary_rest (test.test_ftplib.TestTLS_FTPClassMixin) ---------------------------------------------------------------------- Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/test/test_ftplib.py", line 486, in test_storbinary_rest self.client.storbinary('stor', f, rest=r) File "/tmp/python-test/local/lib/python2.7/ftplib.py", line 730, in storbinary return self.voidresp() File "/tmp/python-test/local/lib/python2.7/ftplib.py", line 224, in voidresp resp = self.getresp() File "/tmp/python-test/local/lib/python2.7/ftplib.py", line 210, in getresp resp = self.getmultiline() File "/tmp/python-test/local/lib/python2.7/ftplib.py", line 196, in getmultiline line = self.getline() File "/tmp/python-test/local/lib/python2.7/ftplib.py", line 183, in getline line = self.file.readline() File "/tmp/python-test/local/lib/python2.7/socket.py", line 445, in readline data = self._sock.recv(self._rbufsize) File "/tmp/python-test/local/lib/python2.7/ssl.py", line 96, in self.recv = lambda buflen=1024, flags=0: SSLSocket.recv(self, buflen, flags) File "/tmp/python-test/local/lib/python2.7/ssl.py", line 222, in recv raise x SSLError: [Errno 1] _ssl.c:1335: error:1408F455:SSL routines:SSL3_GET_RECORD:decryption failed or bad record mac ====================================================================== ERROR: test_storlines (test.test_ftplib.TestTLS_FTPClassMixin) ---------------------------------------------------------------------- Traceback (most recent call last): File "/tmp/python-test/local/lib/python2.7/test/test_ftplib.py", line 491, in test_storlines self.client.storlines('stor', f) File "/tmp/python-test/local/lib/python2.7/ftplib.py", line 749, in storlines return self.voidresp() File "/tmp/python-test/local/lib/python2.7/ftplib.py", line 224, in voidresp resp = self.getresp() File "/tmp/python-test/local/lib/python2.7/ftplib.py", line 210, in getresp resp = self.getmultiline() File "/tmp/python-test/local/lib/python2.7/ftplib.py", line 196, in getmultiline line = self.getline() File "/tmp/python-test/local/lib/python2.7/ftplib.py", line 183, in getline line = self.file.readline() File "/tmp/python-test/local/lib/python2.7/socket.py", line 445, in readline data = self._sock.recv(self._rbufsize) File "/tmp/python-test/local/lib/python2.7/ssl.py", line 96, in self.recv = lambda buflen=1024, flags=0: SSLSocket.recv(self, buflen, flags) File "/tmp/python-test/local/lib/python2.7/ssl.py", line 222, in recv raise x SSLError: The read operation timed out ---------------------------------------------------------------------- Ran 61 tests in 23.804s FAILED (errors=4) test test_ftplib failed -- multiple errors occurred test_funcattrs test_functools test_future test_future3 test_future4 test_future5 test_future_builtins test_gc test_gdbm test_generators test_genericpath test_genexps test_getargs test_getargs2 test_getopt test_gettext test_gl test_gl skipped -- No module named gl test_glob test_global test_grp test_gzip test_hash test_hashlib test_heapq test_hmac test_hotshot test_htmllib test_htmlparser test_httplib test_httpservers [16621 refs] [16621 refs] [16621 refs] [26885 refs] test_imageop test_imaplib test_imgfile test_imgfile skipped -- No module named imgfile test_imp test_import test_importhooks test_importlib test_index test_inspect test_int test_int_literal test_io test_ioctl test_ioctl skipped -- Unable to open /dev/tty test_isinstance test_iter test_iterlen test_itertools test_json test_kqueue test_kqueue skipped -- test works only on BSD test_largefile test_lib2to3 test_linecache test_list test_locale test_logging test_long test_long_future test_longexp test_macos test_macos skipped -- No module named MacOS test_macostools test_macostools skipped -- No module named MacOS test_macpath test_mailbox test_marshal test_math test_md5 test_memoryio test_memoryview test_mhlib test_mimetools test_mimetypes test_minidom test_mmap test_module test_modulefinder test_multibytecodec test_multibytecodec_support test_multifile test_multiprocessing test_multiprocessing skipped -- This platform lacks a functioning sem_open implementation, therefore, the required synchronization primitives needed will not function, see issue 3770. test_mutants test_mutex test_netrc test_new test_nis test_normalization test_ntpath test_old_mailbox test_openpty test_operator test_optparse test_os [16621 refs] [16621 refs] test_parser Expecting 's_push: parser stack overflow' in next line s_push: parser stack overflow test_pdb test_peepholer test_pep247 test_pep263 test_pep277 test_pep292 test_pep352 test_pickle test_pickletools test_pipes test_pkg test_pkgimport test_pkgutil test_platform [18017 refs] [18017 refs] test_plistlib test_poll test_popen [16626 refs] [16626 refs] [16626 refs] test_popen2 test_poplib test_posix test_posixpath test_pow test_pprint test_print test_profile test_profilehooks test_property test_pstats test_pty test_pwd test_py3kwarn test_py3kwarn skipped -- test.test_py3kwarn must be run with the -3 flag test_pyclbr test_pydoc [21735 refs] [21735 refs] [21735 refs] [21735 refs] [21735 refs] [21734 refs] [21734 refs] test_pyexpat test_queue test_quopri [19450 refs] [19450 refs] test_random test_re test_readline test_repr test_resource test_rfc822 test_richcmp test_robotparser test_runpy test_sax test_scope test_scriptpackages test_scriptpackages skipped -- No module named aetools test_select test_set test_setcomps test_sets test_sgmllib test_sha test_shelve test_shlex test_shutil test_signal test_site [16621 refs] [16621 refs] [16621 refs] [16621 refs] test_slice test_smtplib test_smtpnet test_socket test_socketserver test_softspace test_sort test_sqlite test_ssl test_startfile test_startfile skipped -- module os has no attribute startfile test_str test_strftime test_string test_stringprep test_strop test_strptime test_strtod test_struct test_structmembers test_structseq test_subprocess [16621 refs] [16621 refs] [16621 refs] [16621 refs] [16621 refs] [16621 refs] [16621 refs] [16621 refs] [16621 refs] [16621 refs] [16621 refs] [16621 refs] [16621 refs] [16621 refs] [16836 refs] [16621 refs] [16621 refs] [16621 refs] [16621 refs] [16621 refs] . [16621 refs] [16621 refs] this bit of output is from a test of stdout in a different process ... [16621 refs] [16621 refs] [16836 refs] [16621 refs] [16621 refs] [16621 refs] Traceback (most recent call last): File "", line 1, in KeyboardInterrupt [16621 refs] p.terminate() succeeded after 2 attempts [16621 refs] [16621 refs] [16621 refs] [16621 refs] [16621 refs] [16621 refs] [16621 refs] [16621 refs] [16621 refs] [16621 refs] [16621 refs] [16621 refs] [16621 refs] [16621 refs] [16836 refs] [16621 refs] [16621 refs] [16621 refs] [16621 refs] [16621 refs] . [16621 refs] [16621 refs] this bit of output is from a test of stdout in a different process ... [16621 refs] [16621 refs] [16836 refs] test_sunaudiodev test_sunaudiodev skipped -- No module named sunaudiodev test_sundry test_symtable test_syntax test_sys [16621 refs] [16621 refs] [16621 refs] [16850 refs] [16644 refs] test_sysconfig [16621 refs] [16621 refs] test_tarfile test_tcl test_tcl skipped -- No module named _tkinter test_telnetlib test_tempfile [16621 refs] test_textwrap test_thread test_threaded_import test_threadedtempfile test_threading [19921 refs] [21994 refs] [20906 refs] [20906 refs] [20906 refs] [20906 refs] test_threading_local test_threadsignals test_time test_timeout test_tk test_tk skipped -- No module named _tkinter test_tokenize test_trace test_traceback test_transformer test_ttk_guionly test_ttk_guionly skipped -- No module named _tkinter test_ttk_textonly test_ttk_textonly skipped -- No module named _tkinter test_tuple test_typechecks test_ucn test_unary test_undocumented_details test_unicode test_unicode_file test_unicode_file skipped -- No Unicode filesystem semantics on this platform. test_unicodedata test_univnewlines test_univnewlines2k test_unpack test_urllib test_urllib2 test_urllib2_localnet test_urllib2net test_urllibnet test_urlparse test_userdict test_userlist test_userstring test_uu test_uuid WARNING: uuid.getnode is unreliable on many platforms. It is disabled until the code and/or test can be fixed properly. WARNING: uuid._ifconfig_getnode is unreliable on many platforms. It is disabled until the code and/or test can be fixed properly. WARNING: uuid._unixdll_getnode is unreliable on many platforms. It is disabled until the code and/or test can be fixed properly. test_wait3 test_wait4 test_warnings test_wave test_weakref test_whichdb test_winreg test_winreg skipped -- No module named _winreg test_winsound test_winsound skipped -- No module named winsound test_with test_wsgiref test_xdrlib test_xml_etree test_xml_etree_c test_xmllib test_xmlrpc test_xpickle sh: line 1: python2.4: command not found sh: line 1: python2.6: command not found test_xrange test_zipfile test_zipfile64 test_zipfile64 skipped -- test requires loads of disk-space bytes and a long time to run test_zipimport test_zipimport_support test_zlib 351 tests OK. 2 tests failed: test_ftplib test_fork1 26 tests skipped: test_aepack test_al test_applesingle test_bsddb185 test_cd test_cl test_epoll test_gl test_imgfile test_ioctl test_kqueue test_macos test_macostools test_multiprocessing test_py3kwarn test_scriptpackages test_startfile test_sunaudiodev test_tcl test_tk test_ttk_guionly test_ttk_textonly test_unicode_file test_winreg test_winsound test_zipfile64 6 skips unexpected on linux2: test_multiprocessing test_ttk_guionly test_epoll test_tk test_ioctl test_ttk_textonly [964482 refs] From nnorwitz at gmail.com Fri Mar 19 01:55:44 2010 From: nnorwitz at gmail.com (Neal Norwitz) Date: Thu, 18 Mar 2010 19:55:44 -0500 Subject: [Python-checkins] Python Regression Test Failures doc (1) Message-ID: <20100319005544.GA3303@kbk-i386-bb.psfb.org> rm -rf build/* rm -rf tools/sphinx rm -rf tools/pygments rm -rf tools/jinja2 rm -rf tools/docutils Checking out Sphinx... svn: Your .svn/tmp directory may be missing or corrupt; run 'svn cleanup' and try again svn: Can't open file 'tools/docutils/.svn/tmp/log.5': No such file or directory rs/__init__.py A tools/docutils/readers/pep.py A tools/docutils/readers/doctree.py A tools/docutils/__init__.py A tools/docutils/utils.py A tools/docutils/_string_template_compat.py A tools/docutils/statemachine.py make: *** [checkout] Error 1 From python-checkins at python.org Fri Mar 19 02:06:33 2010 From: python-checkins at python.org (benjamin.peterson) Date: Fri, 19 Mar 2010 02:06:33 +0100 (CET) Subject: [Python-checkins] r79086 - python/trunk/Lib/test/test_importhooks.py Message-ID: <20100319010633.A90DFFA7C@mail.python.org> Author: benjamin.peterson Date: Fri Mar 19 02:06:33 2010 New Revision: 79086 Log: keep DeprecationWarning from failing test Modified: python/trunk/Lib/test/test_importhooks.py Modified: python/trunk/Lib/test/test_importhooks.py ============================================================================== --- python/trunk/Lib/test/test_importhooks.py (original) +++ python/trunk/Lib/test/test_importhooks.py Fri Mar 19 02:06:33 2010 @@ -247,7 +247,7 @@ for n in sys.modules.keys(): if n.startswith(parent): del sys.modules[n] - with test_support.check_py3k_warnings(): + with test_support.check_py3k_warnings(), test_support.check_warnings(): for mname in mnames: m = __import__(mname, globals(), locals(), ["__dummy__"]) m.__loader__ # to make sure we actually handled the import From python-checkins at python.org Fri Mar 19 02:08:38 2010 From: python-checkins at python.org (benjamin.peterson) Date: Fri, 19 Mar 2010 02:08:38 +0100 (CET) Subject: [Python-checkins] r79087 - python/branches/py3k Message-ID: <20100319010838.61E29DE94@mail.python.org> Author: benjamin.peterson Date: Fri Mar 19 02:08:38 2010 New Revision: 79087 Log: Blocked revisions 79078,79086 via svnmerge ........ r79078 | benjamin.peterson | 2010-03-18 18:12:43 -0500 (Thu, 18 Mar 2010) | 1 line make compiler's py3k warning a full deprecation warning #6837 ........ r79086 | benjamin.peterson | 2010-03-18 20:06:33 -0500 (Thu, 18 Mar 2010) | 1 line keep DeprecationWarning from failing test ........ Modified: python/branches/py3k/ (props changed) From python-checkins at python.org Fri Mar 19 02:17:48 2010 From: python-checkins at python.org (florent.xicluna) Date: Fri, 19 Mar 2010 02:17:48 +0100 (CET) Subject: [Python-checkins] r79088 - in python/branches/py3k: Lib/test/test_unicodedata.py Misc/NEWS Modules/unicodedata_db.h Modules/unicodename_db.h Objects/unicodetype_db.h Tools/unicode/makeunicodedata.py Message-ID: <20100319011748.DB072ECB0@mail.python.org> Author: florent.xicluna Date: Fri Mar 19 02:17:46 2010 New Revision: 79088 Log: Revert Unicode UCD 5.2 upgrade in 3.x. It broke repr() for unicode objects, and gave failures in test_bigmem. Modified: python/branches/py3k/Lib/test/test_unicodedata.py python/branches/py3k/Misc/NEWS python/branches/py3k/Modules/unicodedata_db.h python/branches/py3k/Modules/unicodename_db.h python/branches/py3k/Objects/unicodetype_db.h python/branches/py3k/Tools/unicode/makeunicodedata.py Modified: python/branches/py3k/Lib/test/test_unicodedata.py ============================================================================== --- python/branches/py3k/Lib/test/test_unicodedata.py (original) +++ python/branches/py3k/Lib/test/test_unicodedata.py Fri Mar 19 02:17:46 2010 @@ -21,7 +21,7 @@ class UnicodeMethodsTest(unittest.TestCase): # update this, if the database changes - expectedchecksum = '4504dffd035baea02c5b9de82bebc3d65e0e0baf' + expectedchecksum = '0b915116051f3ed029a98542c2b7df63c9646272' def test_method_checksum(self): h = hashlib.sha1() @@ -80,7 +80,7 @@ class UnicodeFunctionsTest(UnicodeDatabaseTest): # update this, if the database changes - expectedchecksum = '6ccf1b1a36460d2694f9b0b0f0324942fe70ede6' + expectedchecksum = 'd4169ccff998ebbd1ec007a0b3fbd66e5ccf0229' def test_function_checksum(self): data = [] Modified: python/branches/py3k/Misc/NEWS ============================================================================== --- python/branches/py3k/Misc/NEWS (original) +++ python/branches/py3k/Misc/NEWS Fri Mar 19 02:17:46 2010 @@ -290,8 +290,6 @@ - ``tokenize.detect_encoding`` now returns ``'utf-8-sig'`` when a UTF-8 BOM is detected. -- Issue #8024: Update the Unicode database to 5.2. - - Issue #6716/2: Backslash-replace error output in compilall. - Issue #4961: Inconsistent/wrong result of askyesno function in tkMessageBox Modified: python/branches/py3k/Modules/unicodedata_db.h ============================================================================== --- python/branches/py3k/Modules/unicodedata_db.h (original) +++ python/branches/py3k/Modules/unicodedata_db.h Fri Mar 19 02:17:46 2010 @@ -1,6 +1,6 @@ /* this file was generated by Tools/unicode/makeunicodedata.py 2.6 */ -#define UNIDATA_VERSION "5.2.0" +#define UNIDATA_VERSION "5.1.0" /* a list of unique database records */ const _PyUnicode_DatabaseRecord _PyUnicode_Database_Records[] = { {0, 0, 0, 0, 0, 0}, @@ -178,7 +178,6 @@ {8, 0, 1, 0, 5, 0}, {14, 0, 1, 0, 5, 0}, {5, 9, 1, 0, 5, 0}, - {4, 1, 14, 0, 5, 0}, {4, 234, 14, 0, 5, 0}, {4, 214, 14, 0, 5, 0}, {4, 202, 14, 0, 5, 0}, @@ -215,9 +214,9 @@ {27, 0, 19, 0, 5, 136}, {22, 0, 19, 1, 5, 136}, {23, 0, 19, 1, 5, 136}, - {18, 0, 1, 0, 4, 136}, {28, 0, 11, 0, 5, 136}, {28, 0, 11, 0, 1, 0}, + {4, 1, 14, 0, 5, 0}, {30, 0, 19, 0, 5, 136}, {30, 0, 19, 0, 4, 136}, {1, 0, 1, 0, 4, 170}, @@ -265,7 +264,6 @@ {30, 0, 1, 0, 2, 0}, {9, 0, 1, 0, 2, 136}, {30, 0, 1, 0, 2, 136}, - {30, 0, 1, 0, 4, 0}, {9, 0, 19, 0, 2, 136}, {29, 0, 1, 0, 5, 0}, {15, 0, 1, 0, 5, 0}, @@ -316,18 +314,17 @@ {14, 0, 19, 0, 5, 0}, {8, 0, 19, 0, 5, 0}, {9, 0, 4, 0, 5, 0}, - {9, 0, 12, 0, 5, 0}, {30, 0, 1, 0, 5, 170}, {5, 216, 1, 0, 5, 0}, {5, 226, 1, 0, 5, 0}, {27, 0, 1, 0, 5, 136}, + {27, 0, 1, 1, 5, 136}, {7, 0, 9, 0, 5, 136}, - {30, 0, 1, 0, 5, 136}, }; /* Reindexing of NFC first characters. */ -#define TOTAL_FIRST 370 -#define TOTAL_LAST 55 +#define TOTAL_FIRST 367 +#define TOTAL_LAST 54 struct reindex{int start;short count,index;}; static struct reindex nfc_first[] = { { 60, 2, 0}, @@ -533,9 +530,6 @@ { 12507, 0, 361}, { 12527, 3, 362}, { 12541, 0, 366}, - { 69785, 0, 367}, - { 69787, 0, 368}, - { 69797, 0, 369}, {0,0,0} }; @@ -571,7 +565,6 @@ { 4142, 0, 50}, { 6965, 0, 51}, { 12441, 1, 52}, - { 69818, 0, 54}, {0,0,0} }; @@ -665,525 +658,515 @@ /* index tables for the database records */ #define SHIFT 7 static unsigned char index1[] = { - 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, 41, 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, 78, 79, 80, 81, 82, 83, 17, 84, 85, 86, 87, 88, - 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 100, 100, 100, 100, 100, - 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, - 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, - 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, - 100, 100, 100, 101, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, - 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, - 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, - 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, - 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, - 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, - 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, - 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, - 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, - 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, - 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, - 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 102, - 103, 100, 100, 100, 100, 100, 100, 100, 100, 104, 41, 41, 105, 106, 107, - 108, 109, 110, 111, 112, 113, 114, 17, 115, 116, 116, 116, 116, 116, 116, - 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, - 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, - 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, - 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, - 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, - 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 117, 118, 118, - 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, - 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, - 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, - 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, - 119, 119, 119, 119, 119, 119, 119, 119, 120, 120, 121, 122, 123, 124, - 125, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 17, 136, 137, - 138, 139, 140, 17, 17, 17, 17, 17, 17, 141, 17, 142, 17, 143, 17, 144, - 17, 145, 17, 17, 17, 146, 17, 17, 17, 17, 147, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 41, 41, 41, 41, 41, 41, 148, 17, 149, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 41, 41, 41, 41, 41, 41, 41, 41, 150, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 78, 151, - 152, 153, 154, 17, 155, 17, 156, 157, 158, 159, 160, 161, 162, 163, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 164, 165, 166, 167, 168, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 100, 100, 100, 100, 100, 100, 100, 100, - 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, - 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, - 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, - 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, - 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, - 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, - 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, - 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, - 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, - 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, - 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, - 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, - 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, - 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, - 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, - 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, - 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, - 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, - 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, - 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, - 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, - 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, - 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, - 100, 100, 100, 169, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, - 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, - 100, 100, 100, 100, 100, 100, 100, 100, 170, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 120, 120, 120, - 120, 171, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 172, 17, 173, 174, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, - 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, - 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, - 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, - 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, - 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, - 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, - 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, - 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, - 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, - 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, - 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, - 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, - 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, - 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, - 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, - 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, - 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, - 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, - 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, - 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, - 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, - 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, - 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, - 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, - 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, - 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, - 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, - 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, - 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, - 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, - 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, - 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, - 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, - 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, - 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, - 119, 119, 119, 119, 119, 119, 119, 119, 175, 119, 119, 119, 119, 119, - 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, - 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, - 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, - 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, - 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, - 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, - 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, - 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, - 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, - 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, - 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, - 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, - 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, - 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, - 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, - 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, - 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, - 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, - 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, - 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, - 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, - 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, - 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, - 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, - 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, - 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, - 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, - 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, - 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, - 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, - 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, - 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, - 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, - 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, - 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, - 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, - 119, 119, 175, -}; - -static unsigned short index2[] = { - 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 3, 2, 4, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 3, 3, 3, 2, 5, 6, 6, 7, 8, 7, 6, 6, 9, 10, 6, 11, 12, 13, 12, - 12, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 12, 6, 15, 16, 15, 6, 6, 17, + 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 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, 40, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 16, 50, 51, 52, + 16, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, + 70, 71, 72, 73, 74, 75, 75, 76, 77, 78, 79, 80, 16, 81, 82, 83, 84, 85, + 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 97, 97, 97, 97, 97, 97, + 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, + 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, + 97, 97, 97, 97, 97, 97, 97, 97, 98, 97, 97, 97, 97, 97, 97, 97, 97, 97, + 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, + 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, + 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, + 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, + 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, + 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, + 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, + 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, + 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 99, 100, 97, 97, 97, 97, 97, 97, + 97, 97, 101, 40, 40, 102, 103, 104, 105, 106, 107, 108, 16, 109, 16, 16, + 16, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, + 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, + 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, + 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, + 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, + 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, + 110, 110, 110, 111, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, + 112, 112, 112, 112, 112, 112, 113, 113, 113, 113, 113, 113, 113, 113, + 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, + 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, + 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, + 114, 114, 115, 116, 117, 118, 119, 119, 120, 121, 122, 123, 124, 125, + 126, 127, 128, 129, 16, 130, 131, 132, 133, 134, 16, 16, 16, 16, 16, 16, + 135, 16, 136, 16, 137, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 40, 40, 40, 40, 40, + 40, 138, 16, 139, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 75, 140, 141, 142, 143, 16, 144, 16, 145, 146, 147, + 148, 149, 150, 151, 152, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 153, 154, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 97, 97, 97, 97, + 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, + 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, + 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, + 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, + 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, + 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, + 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, + 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, + 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, + 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, + 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, + 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, + 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, + 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, + 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, + 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, + 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, + 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, + 97, 97, 97, 97, 97, 155, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 114, 114, 114, 114, 156, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 157, 16, 158, 159, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 113, 113, 113, 113, 113, + 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, + 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, + 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, + 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, + 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, + 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, + 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, + 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, + 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, + 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, + 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, + 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, + 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, + 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, + 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, + 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, + 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, + 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, + 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, + 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, + 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, + 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, + 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, + 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, + 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, + 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, + 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, + 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, + 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, + 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, + 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, + 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, + 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, + 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, + 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, + 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, + 113, 113, 160, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, + 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, + 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, + 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, + 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, + 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, + 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, + 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, + 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, + 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, + 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, + 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, + 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, + 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, + 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, + 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, + 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, + 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, + 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, + 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, + 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, + 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, + 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, + 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, + 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, + 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, + 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, + 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, + 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, + 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, + 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, + 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, + 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, + 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, + 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, + 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, + 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 160, +}; + +static unsigned short index2[] = { + 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 3, 2, 4, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 3, 3, 3, 2, 5, 6, 6, 7, 8, 7, 6, 6, 9, 10, 6, 11, 12, 13, 12, + 12, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 12, 6, 15, 16, 15, 6, 6, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 9, 6, 10, 18, 19, 18, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, @@ -1252,7 +1235,7 @@ 38, 43, 38, 43, 38, 43, 44, 46, 38, 43, 38, 43, 38, 43, 38, 43, 38, 43, 38, 43, 44, 46, 38, 43, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, - 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 0, 0, 0, 0, 0, 0, + 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 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, 0, 0, 52, 82, 82, 82, 82, 82, 82, 0, 46, 46, 46, @@ -1299,178 +1282,169 @@ 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 80, 80, 80, 80, 80, 80, 80, 84, 80, 135, 135, 27, 136, 136, 136, 135, 0, 0, 0, 0, - 0, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, - 105, 105, 105, 105, 105, 105, 105, 105, 80, 80, 80, 80, 135, 80, 80, 80, - 80, 80, 80, 80, 80, 80, 135, 80, 80, 80, 135, 80, 80, 80, 80, 80, 0, 0, - 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, - 102, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 133, 133, 133, 137, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 133, 133, 137, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, - 47, 47, 47, 47, 47, 47, 47, 138, 47, 47, 47, 47, 47, 47, 47, 138, 47, 47, - 138, 47, 47, 47, 47, 47, 0, 0, 139, 47, 137, 137, 137, 133, 133, 133, - 133, 133, 133, 133, 133, 137, 137, 137, 137, 140, 137, 0, 47, 80, 84, 80, - 80, 133, 0, 0, 141, 141, 141, 141, 141, 141, 141, 141, 47, 47, 133, 133, - 82, 82, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 82, 52, 47, 0, - 0, 0, 0, 0, 0, 47, 47, 47, 47, 47, 47, 47, 0, 133, 137, 137, 0, 47, 47, - 47, 47, 47, 47, 47, 47, 0, 0, 47, 47, 0, 0, 47, 47, 47, 47, 47, 47, 47, - 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 0, 47, 47, - 47, 47, 47, 47, 47, 0, 47, 0, 0, 0, 47, 47, 47, 47, 0, 0, 143, 47, 144, - 137, 137, 133, 133, 133, 133, 0, 0, 137, 137, 0, 0, 145, 145, 140, 47, 0, - 0, 0, 0, 0, 0, 0, 0, 144, 0, 0, 0, 0, 141, 141, 0, 141, 47, 47, 133, 133, - 0, 0, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 47, 47, 146, 146, - 147, 147, 147, 147, 147, 147, 79, 146, 0, 0, 0, 0, 0, 133, 133, 137, 0, - 47, 47, 47, 47, 47, 47, 0, 0, 0, 0, 47, 47, 0, 0, 47, 47, 47, 47, 47, 47, - 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 0, 47, - 47, 47, 47, 47, 47, 47, 0, 47, 141, 0, 47, 141, 0, 47, 47, 0, 0, 143, 0, - 137, 137, 137, 133, 133, 0, 0, 0, 0, 133, 133, 0, 0, 133, 133, 140, 0, 0, - 0, 133, 0, 0, 0, 0, 0, 0, 0, 141, 141, 141, 47, 0, 141, 0, 0, 0, 0, 0, 0, - 0, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 133, 133, 47, 47, - 47, 133, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 133, 133, 137, 0, 47, 47, 47, - 47, 47, 47, 47, 47, 47, 0, 47, 47, 47, 0, 47, 47, 47, 47, 47, 47, 47, 47, - 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 0, 47, 47, 47, - 47, 47, 47, 47, 0, 47, 47, 0, 47, 47, 47, 47, 47, 0, 0, 143, 47, 137, - 137, 137, 133, 133, 133, 133, 133, 0, 133, 133, 137, 0, 137, 137, 140, 0, - 0, 47, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 47, 47, 133, 133, 0, - 0, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 0, 146, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 133, 137, 137, 0, 47, 47, 47, 47, 47, - 47, 47, 47, 0, 0, 47, 47, 0, 0, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, - 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 0, 47, 47, 47, 47, 47, - 47, 47, 0, 47, 47, 0, 47, 47, 47, 47, 47, 0, 0, 143, 47, 144, 133, 137, - 133, 133, 133, 133, 0, 0, 137, 145, 0, 0, 145, 145, 140, 0, 0, 0, 0, 0, - 0, 0, 0, 148, 144, 0, 0, 0, 0, 141, 141, 0, 47, 47, 47, 133, 133, 0, 0, - 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 79, 47, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 133, 47, 0, 47, 47, 47, 47, 47, 47, 0, - 0, 0, 47, 47, 47, 0, 47, 47, 138, 47, 0, 0, 0, 47, 47, 0, 47, 0, 47, 47, - 0, 0, 0, 47, 47, 0, 0, 0, 47, 47, 47, 0, 0, 0, 47, 47, 47, 47, 47, 47, - 47, 47, 47, 47, 47, 47, 0, 0, 0, 0, 144, 137, 133, 137, 137, 0, 0, 0, - 137, 137, 137, 0, 145, 145, 145, 140, 0, 0, 47, 0, 0, 0, 0, 0, 0, 144, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 142, 142, 142, 142, 142, 142, 142, - 142, 142, 142, 147, 147, 147, 27, 27, 27, 27, 27, 27, 146, 27, 0, 0, 0, - 0, 0, 0, 137, 137, 137, 0, 47, 47, 47, 47, 47, 47, 47, 47, 0, 47, 47, 47, - 0, 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, 47, 47, 47, 47, 47, 47, 47, 47, 47, 0, 47, - 47, 47, 47, 47, 0, 0, 0, 47, 133, 133, 133, 137, 137, 137, 137, 0, 133, - 133, 149, 0, 133, 133, 133, 140, 0, 0, 0, 0, 0, 0, 0, 150, 151, 0, 47, - 47, 0, 0, 0, 0, 0, 0, 47, 47, 133, 133, 0, 0, 142, 142, 142, 142, 142, - 142, 142, 142, 142, 142, 0, 0, 0, 0, 0, 0, 0, 0, 152, 152, 152, 152, 152, - 152, 152, 79, 0, 0, 137, 137, 0, 47, 47, 47, 47, 47, 47, 47, 47, 0, 47, - 47, 47, 0, 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, 47, 47, 47, 47, 47, 47, 47, 47, - 47, 0, 47, 47, 47, 47, 47, 0, 0, 143, 47, 137, 153, 145, 137, 144, 137, - 137, 0, 153, 145, 145, 0, 145, 145, 133, 140, 0, 0, 0, 0, 0, 0, 0, 144, - 144, 0, 0, 0, 0, 0, 0, 0, 47, 0, 47, 47, 133, 133, 0, 0, 142, 142, 142, - 142, 142, 142, 142, 142, 142, 142, 0, 27, 27, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 137, 137, 0, 47, 47, 47, 47, 47, 47, 47, 47, 0, 47, 47, - 47, 0, 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, 47, 47, 47, 47, 47, 47, 47, 47, 47, - 47, 47, 47, 47, 47, 47, 0, 0, 0, 47, 144, 137, 137, 133, 133, 133, 133, - 0, 137, 137, 137, 0, 145, 145, 145, 140, 0, 0, 0, 0, 0, 0, 0, 0, 0, 144, - 0, 0, 0, 0, 0, 0, 0, 0, 47, 47, 133, 133, 0, 0, 142, 142, 142, 142, 142, - 142, 142, 142, 142, 142, 147, 147, 147, 147, 147, 147, 0, 0, 0, 79, 47, - 47, 47, 47, 47, 47, 0, 0, 137, 137, 0, 47, 47, 47, 47, 47, 47, 47, 47, - 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 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, - 0, 47, 47, 47, 47, 47, 47, 47, 47, 47, 0, 47, 0, 0, 47, 47, 47, 47, 47, - 47, 47, 0, 0, 0, 154, 0, 0, 0, 0, 144, 137, 137, 133, 133, 133, 0, 133, - 0, 137, 137, 145, 137, 145, 145, 145, 144, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 137, 137, 82, 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, 47, 47, 47, 47, 47, 47, 47, 47, 133, 47, 155, 133, 133, - 133, 133, 156, 156, 140, 0, 0, 0, 0, 146, 47, 47, 47, 47, 47, 47, 52, - 133, 157, 157, 157, 157, 133, 133, 133, 82, 142, 142, 142, 142, 142, 142, - 142, 142, 142, 142, 82, 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, 47, 47, - 0, 47, 0, 0, 47, 47, 0, 47, 0, 0, 47, 0, 0, 0, 0, 0, 0, 47, 47, 47, 47, - 0, 47, 47, 47, 47, 47, 47, 47, 0, 47, 47, 47, 0, 47, 0, 47, 0, 0, 47, 47, - 0, 47, 47, 47, 47, 133, 47, 155, 133, 133, 133, 133, 158, 158, 0, 133, - 133, 47, 0, 0, 47, 47, 47, 47, 47, 0, 52, 0, 159, 159, 159, 159, 133, - 133, 0, 0, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 0, 0, 155, - 155, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 79, 79, 79, 82, 82, 82, 82, 82, 82, - 82, 82, 160, 82, 82, 82, 82, 82, 82, 79, 79, 79, 79, 79, 84, 84, 79, 79, - 79, 79, 79, 79, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 147, - 147, 147, 147, 147, 147, 147, 147, 147, 147, 79, 84, 79, 84, 79, 161, - 162, 163, 162, 163, 137, 137, 47, 47, 47, 141, 47, 47, 47, 47, 0, 47, 47, - 47, 47, 141, 47, 47, 47, 47, 141, 47, 47, 47, 47, 141, 47, 47, 47, 47, - 141, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 141, 47, 47, 47, 0, - 0, 0, 0, 164, 165, 166, 167, 166, 166, 168, 166, 168, 165, 165, 165, 165, - 133, 137, 165, 166, 80, 80, 140, 82, 80, 80, 47, 47, 47, 47, 0, 0, 0, 0, - 133, 133, 133, 166, 133, 133, 133, 133, 0, 133, 133, 133, 133, 166, 133, - 133, 133, 133, 166, 133, 133, 133, 133, 166, 133, 133, 133, 133, 166, - 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 166, 133, - 133, 133, 0, 79, 79, 79, 79, 79, 79, 79, 79, 84, 79, 79, 79, 79, 79, 79, - 0, 79, 79, 82, 82, 82, 82, 82, 79, 79, 79, 79, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 138, 47, 47, 47, 47, 47, + 47, 47, 138, 47, 47, 138, 47, 47, 47, 47, 47, 0, 0, 139, 47, 137, 137, + 137, 133, 133, 133, 133, 133, 133, 133, 133, 137, 137, 137, 137, 140, 0, + 0, 47, 80, 84, 80, 80, 0, 0, 0, 141, 141, 141, 141, 141, 141, 141, 141, + 47, 47, 133, 133, 82, 82, 142, 142, 142, 142, 142, 142, 142, 142, 142, + 142, 82, 52, 47, 0, 0, 0, 0, 0, 0, 0, 0, 47, 47, 47, 47, 47, 0, 133, 137, + 137, 0, 47, 47, 47, 47, 47, 47, 47, 47, 0, 0, 47, 47, 0, 0, 47, 47, 47, + 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, + 47, 0, 47, 47, 47, 47, 47, 47, 47, 0, 47, 0, 0, 0, 47, 47, 47, 47, 0, 0, + 143, 47, 144, 137, 137, 133, 133, 133, 133, 0, 0, 137, 137, 0, 0, 145, + 145, 140, 47, 0, 0, 0, 0, 0, 0, 0, 0, 144, 0, 0, 0, 0, 141, 141, 0, 141, + 47, 47, 133, 133, 0, 0, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, + 47, 47, 146, 146, 147, 147, 147, 147, 147, 147, 79, 0, 0, 0, 0, 0, 0, + 133, 133, 137, 0, 47, 47, 47, 47, 47, 47, 0, 0, 0, 0, 47, 47, 0, 0, 47, + 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, + 47, 47, 47, 0, 47, 47, 47, 47, 47, 47, 47, 0, 47, 141, 0, 47, 141, 0, 47, + 47, 0, 0, 143, 0, 137, 137, 137, 133, 133, 0, 0, 0, 0, 133, 133, 0, 0, + 133, 133, 140, 0, 0, 0, 133, 0, 0, 0, 0, 0, 0, 0, 141, 141, 141, 47, 0, + 141, 0, 0, 0, 0, 0, 0, 0, 142, 142, 142, 142, 142, 142, 142, 142, 142, + 142, 133, 133, 47, 47, 47, 133, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 133, + 133, 137, 0, 47, 47, 47, 47, 47, 47, 47, 47, 47, 0, 47, 47, 47, 0, 47, + 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, + 47, 47, 47, 0, 47, 47, 47, 47, 47, 47, 47, 0, 47, 47, 0, 47, 47, 47, 47, + 47, 0, 0, 143, 47, 137, 137, 137, 133, 133, 133, 133, 133, 0, 133, 133, + 137, 0, 137, 137, 140, 0, 0, 47, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 47, 47, 133, 133, 0, 0, 142, 142, 142, 142, 142, 142, 142, 142, + 142, 142, 0, 146, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 133, 137, + 137, 0, 47, 47, 47, 47, 47, 47, 47, 47, 0, 0, 47, 47, 0, 0, 47, 47, 47, + 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, + 47, 0, 47, 47, 47, 47, 47, 47, 47, 0, 47, 47, 0, 47, 47, 47, 47, 47, 0, + 0, 143, 47, 144, 133, 137, 133, 133, 133, 133, 0, 0, 137, 145, 0, 0, 145, + 145, 140, 0, 0, 0, 0, 0, 0, 0, 0, 148, 144, 0, 0, 0, 0, 141, 141, 0, 47, + 47, 47, 133, 133, 0, 0, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, + 79, 47, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 133, 47, 0, 47, + 47, 47, 47, 47, 47, 0, 0, 0, 47, 47, 47, 0, 47, 47, 138, 47, 0, 0, 0, 47, + 47, 0, 47, 0, 47, 47, 0, 0, 0, 47, 47, 0, 0, 0, 47, 47, 47, 0, 0, 0, 47, + 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 0, 0, 0, 0, 144, 137, 133, + 137, 137, 0, 0, 0, 137, 137, 137, 0, 145, 145, 145, 140, 0, 0, 47, 0, 0, + 0, 0, 0, 0, 144, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 142, 142, 142, + 142, 142, 142, 142, 142, 142, 142, 147, 147, 147, 27, 27, 27, 27, 27, 27, + 146, 27, 0, 0, 0, 0, 0, 0, 137, 137, 137, 0, 47, 47, 47, 47, 47, 47, 47, + 47, 0, 47, 47, 47, 0, 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, 47, 47, 47, 47, 47, 47, + 47, 47, 47, 0, 47, 47, 47, 47, 47, 0, 0, 0, 47, 133, 133, 133, 137, 137, + 137, 137, 0, 133, 133, 149, 0, 133, 133, 133, 140, 0, 0, 0, 0, 0, 0, 0, + 150, 151, 0, 47, 47, 0, 0, 0, 0, 0, 0, 47, 47, 133, 133, 0, 0, 142, 142, + 142, 142, 142, 142, 142, 142, 142, 142, 0, 0, 0, 0, 0, 0, 0, 0, 152, 152, + 152, 152, 152, 152, 152, 79, 0, 0, 137, 137, 0, 47, 47, 47, 47, 47, 47, + 47, 47, 0, 47, 47, 47, 0, 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, 47, 47, 47, 47, 47, + 47, 47, 47, 47, 0, 47, 47, 47, 47, 47, 0, 0, 143, 47, 137, 153, 145, 137, + 144, 137, 137, 0, 153, 145, 145, 0, 145, 145, 133, 140, 0, 0, 0, 0, 0, 0, + 0, 144, 144, 0, 0, 0, 0, 0, 0, 0, 47, 0, 47, 47, 133, 133, 0, 0, 142, + 142, 142, 142, 142, 142, 142, 142, 142, 142, 0, 27, 27, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 137, 137, 0, 47, 47, 47, 47, 47, 47, 47, 47, + 0, 47, 47, 47, 0, 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, 47, 47, 47, 47, 47, 47, 47, + 47, 47, 47, 47, 47, 47, 47, 47, 0, 0, 0, 47, 144, 137, 137, 133, 133, + 133, 133, 0, 137, 137, 137, 0, 145, 145, 145, 140, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 144, 0, 0, 0, 0, 0, 0, 0, 0, 47, 47, 133, 133, 0, 0, 142, 142, 142, + 142, 142, 142, 142, 142, 142, 142, 147, 147, 147, 147, 147, 147, 0, 0, 0, + 79, 47, 47, 47, 47, 47, 47, 0, 0, 137, 137, 0, 47, 47, 47, 47, 47, 47, + 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 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, 0, 47, 47, 47, 47, 47, 47, 47, 47, 47, 0, 47, 0, 0, 47, 47, 47, + 47, 47, 47, 47, 0, 0, 0, 154, 0, 0, 0, 0, 144, 137, 137, 133, 133, 133, + 0, 133, 0, 137, 137, 145, 137, 145, 145, 145, 144, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 137, 137, 82, 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, 47, 47, 47, 47, 47, 47, 47, 47, 133, 47, 155, + 133, 133, 133, 133, 156, 156, 140, 0, 0, 0, 0, 146, 47, 47, 47, 47, 47, + 47, 52, 133, 157, 157, 157, 157, 133, 133, 133, 82, 142, 142, 142, 142, + 142, 142, 142, 142, 142, 142, 82, 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, 47, 47, 0, 47, 0, 0, 47, 47, 0, 47, 0, 0, 47, 0, 0, 0, 0, 0, 0, 47, + 47, 47, 47, 0, 47, 47, 47, 47, 47, 47, 47, 0, 47, 47, 47, 0, 47, 0, 47, + 0, 0, 47, 47, 0, 47, 47, 47, 47, 133, 47, 155, 133, 133, 133, 133, 158, + 158, 0, 133, 133, 47, 0, 0, 47, 47, 47, 47, 47, 0, 52, 0, 159, 159, 159, + 159, 133, 133, 0, 0, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 0, + 0, 155, 155, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 79, 79, 79, 82, 82, 82, 82, + 82, 82, 82, 82, 160, 82, 82, 82, 82, 82, 82, 79, 79, 79, 79, 79, 84, 84, + 79, 79, 79, 79, 79, 79, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, + 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 79, 84, 79, 84, 79, + 161, 162, 163, 162, 163, 137, 137, 47, 47, 47, 141, 47, 47, 47, 47, 0, + 47, 47, 47, 47, 141, 47, 47, 47, 47, 141, 47, 47, 47, 47, 141, 47, 47, + 47, 47, 141, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 141, 47, 47, + 47, 0, 0, 0, 0, 164, 165, 166, 167, 166, 166, 168, 166, 168, 165, 165, + 165, 165, 133, 137, 165, 166, 80, 80, 140, 82, 80, 80, 47, 47, 47, 47, 0, + 0, 0, 0, 133, 133, 133, 166, 133, 133, 133, 133, 0, 133, 133, 133, 133, + 166, 133, 133, 133, 133, 166, 133, 133, 133, 133, 166, 133, 133, 133, + 133, 166, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, + 166, 133, 133, 133, 0, 79, 79, 79, 79, 79, 79, 79, 79, 84, 79, 79, 79, + 79, 79, 79, 0, 79, 79, 82, 82, 82, 82, 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, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, + 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, 138, 47, 47, 47, 47, 137, 137, 133, 148, 133, - 133, 137, 133, 133, 133, 133, 133, 143, 137, 140, 140, 137, 137, 133, - 133, 47, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 82, 82, 82, - 82, 82, 82, 47, 47, 47, 47, 47, 47, 137, 137, 133, 133, 47, 47, 47, 47, - 133, 133, 133, 47, 137, 137, 137, 47, 47, 137, 137, 137, 137, 137, 137, - 137, 47, 47, 47, 133, 133, 133, 133, 47, 47, 47, 47, 47, 47, 47, 47, 47, - 47, 47, 47, 47, 133, 137, 137, 133, 133, 137, 137, 137, 137, 137, 137, - 84, 47, 137, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 137, 137, - 137, 133, 79, 79, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, + 47, 47, 47, 47, 47, 47, 47, 47, 47, 138, 47, 47, 47, 47, 137, 137, 133, + 148, 133, 133, 137, 133, 133, 133, 133, 133, 143, 137, 140, 140, 137, + 137, 133, 133, 47, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 82, + 82, 82, 82, 82, 82, 47, 47, 47, 47, 47, 47, 137, 137, 133, 133, 47, 47, + 47, 47, 133, 133, 133, 47, 137, 137, 137, 47, 47, 137, 137, 137, 137, + 137, 137, 137, 47, 47, 47, 133, 133, 133, 133, 47, 47, 47, 47, 47, 47, + 47, 47, 47, 47, 47, 47, 47, 133, 137, 137, 133, 133, 137, 137, 137, 137, + 137, 137, 84, 47, 137, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, + 0, 0, 0, 0, 79, 79, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 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, 0, 0, 0, 0, 0, 0, 47, 47, 47, 47, 47, + 44, 44, 44, 44, 44, 44, 44, 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, 82, 50, 0, 0, 0, 169, 169, 169, 169, 169, 169, 169, 169, 169, - 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, + 47, 47, 47, 82, 50, 0, 0, 0, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, - 169, 169, 169, 47, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, - 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 47, 47, 47, 47, 47, 47, + 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 0, 0, 0, 0, 0, + 169, 47, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, + 170, 170, 170, 170, 170, 170, 170, 170, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, - 47, 47, 47, 169, 169, 169, 169, 169, 170, 170, 170, 170, 170, 170, 170, + 47, 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, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, - 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, + 170, 170, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, - 47, 47, 47, 47, 47, 47, 47, 47, 169, 169, 169, 169, 169, 169, 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, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 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, - 47, 47, 47, 0, 0, 47, 47, 47, 47, 47, 47, 47, 0, 47, 0, 47, 47, 47, 47, - 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, 0, 47, 47, 47, 47, 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, 0, 47, 47, 47, 47, 0, 0, 47, 47, 47, - 47, 47, 47, 47, 0, 47, 0, 47, 47, 47, 47, 0, 0, 47, 47, 47, 47, 47, 47, - 47, 47, 47, 47, 47, 47, 47, 47, 47, 0, 47, 47, 47, 47, 47, 47, 47, 47, + 47, 47, 47, 47, 47, 47, 47, 47, 0, 47, 47, 47, 47, 0, 0, 47, 47, 47, 47, + 47, 47, 47, 0, 47, 0, 47, 47, 47, 47, 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, 0, 47, + 47, 47, 47, 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, 0, 47, 47, 47, 47, 0, - 0, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, + 47, 0, 47, 47, 47, 47, 0, 0, 47, 47, 47, 47, 47, 47, 47, 0, 47, 0, 47, + 47, 47, 47, 0, 0, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, + 47, 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, 0, 0, 0, 0, 80, - 79, 82, 82, 82, 82, 82, 82, 82, 82, 147, 147, 147, 147, 147, 147, 147, - 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 0, 0, 0, - 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 27, 27, - 27, 27, 27, 27, 27, 27, 27, 27, 0, 0, 0, 0, 0, 0, 47, 47, 47, 47, 47, 47, + 47, 47, 47, 47, 47, 0, 47, 47, 47, 47, 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, 0, 0, 0, 0, 80, 79, 82, 82, 82, 82, 82, 82, 82, + 82, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, + 147, 147, 147, 147, 147, 147, 0, 0, 0, 47, 47, 47, 47, 47, 47, 47, 47, + 47, 47, 47, 47, 47, 47, 47, 47, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, + 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 83, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 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, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, @@ -1489,438 +1463,423 @@ 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, - 47, 47, 82, 82, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, - 47, 47, 47, 171, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, - 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 162, 163, 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, 82, 82, 47, 47, 47, 47, 47, + 47, 47, 47, 0, 0, 0, 0, 0, 0, 0, 0, 0, 171, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, + 47, 162, 163, 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, 82, 82, 82, 172, 172, 172, 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, 0, 47, 47, 47, - 47, 133, 133, 140, 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, 133, 133, 140, 82, - 82, 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, 133, 133, 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, 0, 47, 47, 47, - 0, 133, 133, 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, 82, 82, 82, 172, 172, 172, 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, 0, 47, 47, 47, 47, 133, 133, 140, 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, 133, 133, 140, 82, 82, 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, 133, 133, 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, 0, 47, 47, 47, 0, 133, 133, 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, 173, 173, 137, 133, 133, 133, - 133, 133, 133, 133, 137, 137, 137, 137, 137, 137, 137, 137, 133, 137, - 137, 133, 133, 133, 133, 133, 133, 133, 133, 133, 140, 133, 82, 82, 82, - 52, 82, 82, 82, 146, 47, 80, 0, 0, 142, 142, 142, 142, 142, 142, 142, - 142, 142, 142, 0, 0, 0, 0, 0, 0, 152, 152, 152, 152, 152, 152, 152, 152, - 152, 152, 0, 0, 0, 0, 0, 0, 136, 136, 136, 136, 136, 136, 83, 136, 136, - 136, 136, 133, 133, 133, 171, 0, 142, 142, 142, 142, 142, 142, 142, 142, - 142, 142, 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, 52, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, + 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 173, 173, + 137, 133, 133, 133, 133, 133, 133, 133, 137, 137, 137, 137, 137, 137, + 137, 137, 133, 137, 137, 133, 133, 133, 133, 133, 133, 133, 133, 133, + 140, 133, 82, 82, 82, 52, 82, 82, 82, 146, 47, 80, 0, 0, 142, 142, 142, + 142, 142, 142, 142, 142, 142, 142, 0, 0, 0, 0, 0, 0, 152, 152, 152, 152, + 152, 152, 152, 152, 152, 152, 0, 0, 0, 0, 0, 0, 136, 136, 136, 136, 136, + 136, 83, 136, 136, 136, 136, 133, 133, 133, 171, 0, 142, 142, 142, 142, + 142, 142, 142, 142, 142, 142, 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, 52, 47, 47, 47, 47, 47, 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, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, - 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 86, 47, - 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, 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, 86, 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, 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, 47, 47, 47, 47, 47, 47, 47, 47, 47, + 47, 47, 47, 47, 47, 47, 47, 0, 0, 0, 133, 133, 133, 137, 137, 137, 137, + 133, 133, 137, 137, 137, 0, 0, 0, 0, 137, 137, 133, 137, 137, 137, 137, + 137, 137, 85, 80, 84, 0, 0, 0, 0, 27, 0, 0, 0, 136, 136, 142, 142, 142, + 142, 142, 142, 142, 142, 142, 142, 47, 47, 47, 47, 47, 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, 133, 133, 133, 137, 137, 137, 137, 133, 133, 137, 137, - 137, 0, 0, 0, 0, 137, 137, 133, 137, 137, 137, 137, 137, 137, 85, 80, 84, - 0, 0, 0, 0, 27, 0, 0, 0, 136, 136, 142, 142, 142, 142, 142, 142, 142, - 142, 142, 142, 47, 47, 47, 47, 47, 47, 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, 47, - 47, 47, 47, 47, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 47, 47, 47, 47, 47, 47, + 47, 47, 47, 0, 0, 47, 47, 47, 47, 47, 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, 0, 0, 0, 0, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, - 137, 137, 137, 137, 137, 137, 137, 47, 47, 47, 47, 47, 47, 47, 137, 137, - 0, 0, 0, 0, 0, 0, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, - 0, 0, 0, 136, 136, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, + 47, 47, 47, 47, 47, 47, 0, 0, 0, 0, 0, 0, 137, 137, 137, 137, 137, 137, + 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 47, 47, 47, 47, + 47, 47, 47, 137, 137, 0, 0, 0, 0, 0, 0, 142, 142, 142, 142, 142, 142, + 142, 142, 142, 142, 0, 0, 0, 0, 136, 136, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, - 27, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, - 47, 47, 47, 47, 47, 47, 80, 84, 137, 137, 137, 0, 0, 82, 82, 47, 47, 47, - 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, - 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, - 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 137, 133, 137, - 133, 133, 133, 133, 133, 133, 133, 0, 140, 137, 133, 137, 137, 133, 133, - 133, 133, 133, 133, 133, 133, 137, 137, 137, 137, 137, 137, 133, 133, 80, - 80, 80, 80, 80, 80, 80, 80, 0, 0, 84, 142, 142, 142, 142, 142, 142, 142, - 142, 142, 142, 0, 0, 0, 0, 0, 0, 142, 142, 142, 142, 142, 142, 142, 142, - 142, 142, 0, 0, 0, 0, 0, 0, 82, 82, 82, 82, 82, 82, 82, 52, 82, 82, 82, - 82, 82, 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, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 133, 133, 133, 133, 137, 47, - 138, 47, 138, 47, 138, 47, 138, 47, 138, 47, 47, 47, 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, 143, 144, 133, 133, 133, 133, - 133, 145, 133, 145, 137, 137, 145, 145, 133, 145, 174, 47, 47, 47, 47, - 47, 47, 47, 0, 0, 0, 0, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, - 82, 82, 82, 82, 82, 82, 82, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 80, - 84, 80, 80, 80, 80, 80, 80, 80, 79, 79, 79, 79, 79, 79, 79, 79, 79, 0, 0, - 0, 133, 133, 137, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, - 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 137, 133, - 133, 133, 133, 137, 137, 133, 133, 174, 0, 0, 0, 47, 47, 142, 142, 142, - 142, 142, 142, 142, 142, 142, 142, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 27, 27, 27, 27, 27, 27, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, + 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 80, 84, 137, 137, 137, 0, 0, + 82, 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, 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, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 133, 133, 133, 133, 137, 47, 138, 47, 138, 47, 138, 47, 138, 47, + 138, 47, 47, 47, 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, 137, 137, 137, 137, 137, 137, 137, 137, 133, - 133, 133, 133, 133, 133, 133, 133, 137, 137, 133, 143, 0, 0, 0, 82, 82, - 82, 82, 82, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 0, 0, 0, - 47, 47, 47, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 47, 47, 47, + 47, 47, 143, 144, 133, 133, 133, 133, 133, 145, 133, 145, 137, 137, 145, + 145, 133, 145, 174, 47, 47, 47, 47, 47, 47, 47, 0, 0, 0, 0, 142, 142, + 142, 142, 142, 142, 142, 142, 142, 142, 82, 82, 82, 82, 82, 82, 82, 79, + 79, 79, 79, 79, 79, 79, 79, 79, 79, 80, 84, 80, 80, 80, 80, 80, 80, 80, + 79, 79, 79, 79, 79, 79, 79, 79, 79, 0, 0, 0, 133, 133, 137, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, - 47, 47, 47, 47, 47, 47, 47, 47, 47, 52, 52, 52, 52, 52, 52, 82, 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, + 47, 47, 47, 47, 47, 47, 47, 47, 47, 137, 133, 133, 133, 133, 137, 137, + 133, 133, 174, 0, 0, 0, 47, 47, 142, 142, 142, 142, 142, 142, 142, 142, + 142, 142, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 82, 175, 84, 84, 84, 84, 84, 80, 80, 84, - 84, 84, 84, 80, 137, 175, 175, 175, 175, 175, 175, 175, 47, 47, 47, 47, - 84, 47, 47, 47, 47, 137, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 46, 46, + 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, 137, 137, 137, 137, 137, 137, 137, 137, 133, 133, 133, 133, 133, 133, + 133, 133, 137, 137, 133, 143, 0, 0, 0, 82, 82, 82, 82, 82, 142, 142, 142, + 142, 142, 142, 142, 142, 142, 142, 0, 0, 0, 47, 47, 47, 142, 142, 142, + 142, 142, 142, 142, 142, 142, 142, 47, 47, 47, 47, 47, 47, 47, 47, 47, + 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, + 47, 47, 47, 52, 52, 52, 52, 52, 52, 82, 82, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, - 46, 46, 46, 46, 46, 46, 50, 50, 50, 52, 50, 50, 50, 50, 50, 50, 50, 50, - 50, 50, 50, 52, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, - 50, 50, 50, 50, 52, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, - 50, 50, 50, 50, 50, 50, 35, 35, 35, 35, 35, 35, 35, 35, 35, 46, 46, 46, - 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 50, 46, 46, 46, 46, 46, 46, 46, + 46, 50, 50, 50, 52, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 52, 50, + 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 52, + 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, + 50, 35, 35, 35, 35, 35, 35, 35, 35, 35, 46, 46, 46, 46, 46, 46, 46, 46, + 46, 46, 46, 46, 46, 50, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, - 46, 46, 46, 46, 46, 46, 46, 46, 46, 50, 50, 50, 50, 50, 50, 50, 50, 50, + 46, 46, 46, 46, 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, 80, 80, 84, 80, 80, 80, 80, 80, - 80, 80, 84, 80, 80, 176, 177, 84, 178, 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, 84, 80, 84, 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, 179, 46, 46, 44, 46, 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, 46, 44, 46, 44, - 46, 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, + 50, 50, 50, 50, 50, 80, 80, 84, 80, 80, 80, 80, 80, 80, 80, 84, 80, 80, + 175, 176, 84, 177, 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, 80, 84, 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, 178, 46, 46, 44, 46, 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, 46, 44, 46, 44, 46, 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, 180, 43, 180, 43, 180, 43, 180, 43, 180, 43, 180, 43, 180, 0, 0, - 43, 43, 43, 43, 43, 43, 43, 43, 181, 181, 181, 181, 181, 181, 181, 181, - 43, 43, 43, 43, 43, 43, 43, 43, 181, 181, 181, 181, 181, 181, 181, 181, - 43, 43, 43, 43, 43, 43, 43, 43, 181, 181, 181, 181, 181, 181, 181, 181, - 43, 43, 43, 43, 43, 0, 43, 43, 38, 38, 38, 182, 181, 57, 180, 57, 57, 75, - 43, 43, 43, 0, 43, 43, 38, 182, 38, 182, 181, 75, 75, 75, 43, 43, 43, - 180, 0, 0, 43, 43, 38, 38, 38, 182, 0, 75, 75, 75, 43, 43, 43, 180, 43, - 43, 43, 43, 38, 38, 38, 182, 38, 75, 183, 183, 0, 0, 43, 43, 43, 0, 43, - 43, 38, 182, 38, 182, 181, 183, 57, 0, 184, 184, 185, 185, 185, 185, 185, - 185, 185, 185, 185, 131, 131, 131, 173, 186, 187, 188, 83, 187, 187, 187, - 22, 189, 190, 191, 192, 193, 190, 191, 192, 193, 22, 22, 22, 136, 194, - 194, 194, 22, 195, 196, 197, 198, 199, 200, 201, 21, 202, 108, 202, 203, - 204, 22, 189, 189, 136, 29, 36, 22, 189, 136, 194, 205, 205, 136, 136, - 136, 206, 162, 163, 189, 189, 189, 136, 136, 136, 136, 136, 136, 136, - 136, 77, 136, 205, 136, 136, 189, 136, 136, 136, 136, 136, 136, 136, 185, - 131, 131, 131, 131, 131, 0, 0, 0, 0, 0, 131, 131, 131, 131, 131, 131, - 207, 50, 0, 0, 34, 207, 207, 207, 207, 207, 208, 208, 209, 210, 211, 212, - 207, 34, 34, 34, 34, 207, 207, 207, 207, 207, 208, 208, 209, 210, 211, 0, - 50, 50, 50, 50, 50, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 146, 146, 146, 146, - 146, 146, 146, 146, 213, 214, 146, 146, 23, 146, 146, 146, 146, 146, 146, - 146, 146, 146, 146, 146, 146, 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, 175, 175, 80, 80, 80, 80, 175, 175, - 175, 80, 80, 81, 81, 81, 81, 80, 81, 81, 81, 175, 175, 80, 84, 80, 175, - 175, 84, 84, 84, 84, 80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 215, 215, 48, 216, 27, 216, 215, 48, 27, 216, 35, 48, 48, 48, 35, 35, 48, - 48, 48, 28, 27, 48, 216, 27, 27, 48, 48, 48, 48, 48, 27, 27, 215, 216, - 216, 27, 48, 27, 217, 27, 48, 27, 182, 217, 48, 48, 218, 35, 48, 48, 44, - 48, 35, 155, 155, 155, 155, 35, 27, 215, 35, 35, 48, 48, 219, 77, 77, 77, - 77, 48, 35, 35, 35, 35, 27, 77, 27, 27, 46, 79, 220, 220, 220, 37, 37, - 220, 220, 220, 220, 220, 220, 37, 37, 37, 37, 220, 221, 221, 221, 221, - 221, 221, 221, 221, 221, 221, 221, 221, 222, 222, 222, 222, 221, 221, - 221, 221, 221, 221, 221, 221, 221, 221, 222, 222, 222, 222, 222, 222, - 172, 172, 172, 44, 46, 172, 172, 172, 172, 37, 0, 0, 0, 0, 0, 0, 40, 40, - 40, 40, 40, 25, 25, 25, 25, 25, 223, 223, 27, 27, 27, 27, 77, 27, 27, 77, - 27, 27, 77, 27, 27, 27, 27, 27, 27, 27, 223, 27, 27, 27, 27, 27, 27, 27, - 27, 27, 25, 25, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, - 27, 27, 27, 27, 27, 224, 223, 223, 27, 27, 40, 27, 40, 27, 27, 27, 27, - 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 25, 27, 27, 27, - 27, 27, 27, 27, 27, 27, 27, 27, 27, 77, 77, 77, 77, 77, 77, 77, 77, 77, - 77, 77, 77, 40, 225, 226, 226, 227, 77, 77, 40, 226, 227, 225, 226, 227, - 225, 77, 40, 77, 226, 228, 229, 77, 226, 225, 77, 77, 77, 226, 225, 225, - 226, 40, 226, 226, 225, 225, 40, 227, 40, 227, 40, 40, 40, 40, 226, 230, - 219, 226, 219, 219, 225, 225, 225, 40, 40, 40, 40, 77, 225, 77, 225, 226, - 226, 225, 225, 225, 227, 225, 225, 227, 225, 225, 227, 226, 227, 225, - 225, 226, 77, 77, 77, 77, 77, 226, 225, 225, 225, 77, 77, 77, 77, 77, 77, - 77, 77, 77, 225, 231, 40, 227, 77, 226, 226, 226, 226, 225, 225, 226, - 226, 77, 223, 231, 231, 227, 227, 225, 225, 227, 227, 225, 225, 227, 227, - 225, 225, 225, 225, 225, 225, 227, 227, 226, 226, 227, 227, 226, 226, - 227, 227, 225, 225, 225, 77, 77, 225, 225, 225, 225, 77, 77, 40, 77, 77, - 225, 40, 77, 77, 77, 77, 77, 77, 77, 77, 225, 225, 77, 40, 225, 225, 225, - 225, 225, 225, 227, 227, 227, 227, 225, 225, 225, 225, 225, 225, 225, - 225, 225, 77, 77, 77, 77, 77, 225, 226, 77, 77, 77, 77, 77, 77, 77, 77, - 77, 225, 225, 225, 225, 225, 77, 77, 225, 225, 77, 77, 77, 77, 225, 225, - 225, 225, 225, 225, 225, 225, 225, 225, 227, 227, 227, 227, 225, 225, - 225, 225, 225, 225, 227, 227, 227, 227, 77, 77, 225, 225, 225, 225, 225, - 225, 225, 225, 225, 225, 225, 225, 225, 225, 225, 225, 27, 27, 27, 27, - 27, 27, 27, 27, 225, 225, 225, 225, 27, 27, 27, 27, 27, 27, 25, 27, 27, - 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 225, 225, 27, 27, 27, 27, 27, - 27, 27, 232, 233, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 79, 79, 79, + 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, 179, 43, 179, + 43, 179, 43, 179, 43, 179, 43, 179, 43, 179, 0, 0, 43, 43, 43, 43, 43, + 43, 43, 43, 180, 180, 180, 180, 180, 180, 180, 180, 43, 43, 43, 43, 43, + 43, 43, 43, 180, 180, 180, 180, 180, 180, 180, 180, 43, 43, 43, 43, 43, + 43, 43, 43, 180, 180, 180, 180, 180, 180, 180, 180, 43, 43, 43, 43, 43, + 0, 43, 43, 38, 38, 38, 181, 180, 57, 179, 57, 57, 75, 43, 43, 43, 0, 43, + 43, 38, 181, 38, 181, 180, 75, 75, 75, 43, 43, 43, 179, 0, 0, 43, 43, 38, + 38, 38, 181, 0, 75, 75, 75, 43, 43, 43, 179, 43, 43, 43, 43, 38, 38, 38, + 181, 38, 75, 182, 182, 0, 0, 43, 43, 43, 0, 43, 43, 38, 181, 38, 181, + 180, 182, 57, 0, 183, 183, 184, 184, 184, 184, 184, 184, 184, 184, 184, + 131, 131, 131, 173, 185, 186, 187, 83, 186, 186, 186, 22, 188, 189, 190, + 191, 192, 189, 190, 191, 192, 22, 22, 22, 136, 193, 193, 193, 22, 194, + 195, 196, 197, 198, 199, 200, 21, 201, 108, 201, 202, 203, 22, 188, 188, + 136, 29, 36, 22, 188, 136, 193, 204, 204, 136, 136, 136, 205, 162, 163, + 188, 188, 188, 136, 136, 136, 136, 136, 136, 136, 136, 77, 136, 204, 136, + 136, 188, 136, 136, 136, 136, 136, 136, 136, 184, 131, 131, 131, 131, + 131, 0, 0, 0, 0, 0, 131, 131, 131, 131, 131, 131, 206, 35, 0, 0, 34, 206, + 206, 206, 206, 206, 207, 207, 208, 209, 210, 28, 206, 34, 34, 34, 34, + 206, 206, 206, 206, 206, 207, 207, 208, 209, 210, 0, 50, 50, 50, 50, 50, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 146, 146, 146, 146, 146, 146, 146, 146, + 211, 212, 146, 146, 23, 146, 146, 146, 146, 146, 146, 146, 146, 146, 0, + 0, 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, 213, 213, 80, 80, 80, 80, 213, 213, 213, 80, 80, 81, 81, 81, + 81, 80, 81, 81, 81, 213, 213, 80, 84, 80, 213, 213, 84, 84, 84, 84, 80, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 214, 214, 48, 215, 27, 215, + 214, 48, 27, 215, 35, 48, 48, 48, 35, 35, 48, 48, 48, 28, 27, 48, 215, + 27, 27, 48, 48, 48, 48, 48, 27, 27, 214, 215, 215, 27, 48, 27, 216, 27, + 48, 27, 181, 216, 48, 48, 217, 35, 48, 48, 44, 48, 35, 155, 155, 155, + 155, 35, 27, 214, 35, 35, 48, 48, 218, 77, 77, 77, 77, 48, 35, 35, 35, + 35, 27, 77, 27, 27, 46, 79, 0, 0, 0, 37, 37, 219, 219, 219, 219, 219, + 219, 37, 37, 37, 37, 219, 220, 220, 220, 220, 220, 220, 220, 220, 220, + 220, 220, 220, 221, 221, 221, 221, 220, 220, 220, 220, 220, 220, 220, + 220, 220, 220, 221, 221, 221, 221, 221, 221, 172, 172, 172, 44, 46, 172, + 172, 172, 172, 0, 0, 0, 0, 0, 0, 0, 40, 40, 40, 40, 40, 25, 25, 25, 25, + 25, 222, 222, 27, 27, 27, 27, 77, 27, 27, 77, 27, 27, 77, 27, 27, 27, 27, + 27, 27, 27, 222, 27, 27, 27, 27, 27, 27, 27, 27, 27, 25, 25, 27, 27, 27, + 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 223, 222, + 222, 27, 27, 40, 27, 40, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, + 27, 27, 27, 27, 27, 27, 25, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, + 27, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 40, 224, 225, 225, + 226, 77, 77, 40, 225, 226, 224, 225, 226, 224, 77, 40, 77, 225, 227, 228, + 77, 225, 224, 77, 77, 77, 225, 224, 224, 225, 40, 225, 225, 224, 224, 40, + 226, 40, 226, 40, 40, 40, 40, 225, 229, 218, 225, 218, 218, 224, 224, + 224, 40, 40, 40, 40, 77, 224, 77, 224, 225, 225, 224, 224, 224, 226, 224, + 224, 226, 224, 224, 226, 225, 226, 224, 224, 225, 77, 77, 77, 77, 77, + 225, 224, 224, 224, 77, 77, 77, 77, 77, 77, 77, 77, 77, 224, 230, 40, + 226, 77, 225, 225, 225, 225, 224, 224, 225, 225, 77, 222, 230, 230, 226, + 226, 224, 224, 226, 226, 224, 224, 226, 226, 224, 224, 224, 224, 224, + 224, 226, 226, 225, 225, 226, 226, 225, 225, 226, 226, 224, 224, 224, 77, + 77, 224, 224, 224, 224, 77, 77, 40, 77, 77, 224, 40, 77, 77, 77, 77, 77, + 77, 77, 77, 224, 224, 77, 40, 224, 224, 224, 224, 224, 224, 226, 226, + 226, 226, 224, 224, 224, 224, 224, 224, 224, 224, 224, 77, 77, 77, 77, + 77, 224, 225, 77, 77, 77, 77, 77, 77, 77, 77, 77, 224, 224, 224, 224, + 224, 77, 77, 224, 224, 77, 77, 77, 77, 224, 224, 224, 224, 224, 224, 224, + 224, 224, 224, 226, 226, 226, 226, 224, 224, 224, 224, 224, 224, 226, + 226, 226, 226, 77, 77, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, + 224, 224, 224, 224, 224, 224, 27, 27, 27, 27, 27, 27, 27, 27, 224, 224, + 224, 224, 27, 27, 27, 27, 27, 27, 25, 27, 27, 27, 27, 27, 27, 27, 27, 27, + 27, 27, 27, 27, 224, 224, 27, 27, 27, 27, 27, 27, 27, 231, 232, 27, 27, + 27, 27, 27, 27, 27, 27, 27, 27, 27, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, - 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 27, 77, 27, 27, 27, 27, + 79, 79, 79, 79, 79, 79, 27, 77, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, + 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 79, 27, 27, 27, + 27, 27, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, + 77, 77, 77, 77, 77, 77, 77, 77, 77, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, - 27, 27, 79, 27, 27, 27, 27, 27, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, - 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 27, 27, 27, + 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 77, 77, 77, 77, 77, + 77, 27, 27, 27, 27, 27, 27, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, - 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, - 27, 77, 77, 77, 77, 77, 77, 27, 27, 27, 27, 27, 27, 27, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 27, 27, 27, 27, 27, - 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, - 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 27, 27, - 27, 27, 27, 27, 27, 27, 27, 27, 27, 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, + 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 27, 27, 27, 27, 27, 27, 27, 27, + 27, 27, 27, 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, 234, 234, 234, 234, + 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, 233, 233, 233, 233, 233, 233, 233, 233, 233, + 233, 233, 233, 233, 233, 233, 233, 233, 233, 233, 233, 233, 233, 233, + 233, 233, 233, 233, 233, 233, 233, 233, 233, 233, 233, 233, 233, 233, + 233, 233, 233, 233, 233, 233, 233, 233, 233, 233, 233, 233, 233, 233, + 233, 233, 233, 233, 233, 233, 233, 233, 233, 233, 233, 233, 233, 233, + 233, 233, 233, 233, 233, 233, 233, 233, 233, 233, 233, 233, 233, 219, 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, - 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, - 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, - 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, - 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, - 234, 234, 234, 234, 220, 235, 235, 235, 235, 235, 235, 235, 235, 235, - 235, 235, 235, 235, 235, 235, 235, 235, 235, 235, 235, 235, 25, 25, 25, - 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, + 234, 234, 234, 234, 234, 234, 234, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, - 25, 27, 27, 27, 27, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, + 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 27, 27, 27, 27, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, - 25, 25, 25, 25, 25, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 25, - 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 27, 27, 25, - 25, 25, 25, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 25, 25, 27, 25, 25, - 25, 25, 25, 25, 25, 27, 27, 27, 27, 27, 27, 27, 27, 25, 25, 27, 27, 25, - 40, 27, 27, 27, 27, 25, 25, 27, 27, 25, 40, 27, 27, 27, 27, 25, 25, 25, - 27, 27, 25, 27, 27, 25, 25, 25, 25, 27, 27, 27, 27, 27, 27, 27, 27, 27, - 27, 27, 27, 27, 27, 27, 27, 25, 25, 25, 25, 27, 27, 27, 27, 27, 27, 27, - 27, 27, 25, 27, 27, 27, 27, 27, 27, 27, 27, 77, 77, 77, 77, 77, 77, 77, - 77, 27, 27, 27, 27, 27, 25, 25, 27, 27, 25, 27, 27, 27, 27, 25, 25, 27, - 27, 27, 27, 25, 25, 27, 27, 27, 27, 27, 27, 25, 27, 25, 27, 27, 27, 27, + 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 27, + 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 25, 25, 25, 25, 25, 25, 25, + 25, 25, 25, 25, 25, 25, 25, 25, 25, 27, 27, 25, 25, 25, 25, 27, 27, 27, + 27, 27, 27, 27, 27, 27, 27, 25, 25, 27, 25, 25, 25, 25, 25, 25, 25, 27, + 27, 27, 27, 27, 27, 27, 27, 25, 25, 27, 27, 25, 40, 27, 27, 27, 27, 25, + 25, 27, 27, 25, 40, 27, 27, 27, 27, 25, 25, 25, 27, 27, 25, 27, 27, 25, + 25, 25, 25, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, + 27, 25, 25, 25, 25, 27, 27, 27, 27, 27, 27, 27, 27, 27, 25, 27, 27, 27, + 27, 27, 27, 27, 27, 77, 77, 77, 77, 77, 77, 77, 77, 27, 27, 27, 27, 27, + 25, 25, 27, 27, 25, 27, 27, 27, 27, 25, 25, 27, 27, 27, 27, 25, 25, 27, + 27, 27, 27, 27, 27, 25, 27, 25, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, - 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 25, 27, 25, 27, 27, 27, 27, + 27, 27, 27, 27, 27, 25, 27, 25, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, - 27, 27, 27, 27, 27, 27, 27, 25, 25, 27, 25, 25, 25, 27, 25, 25, 25, 25, - 27, 25, 25, 27, 40, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, + 27, 25, 25, 27, 25, 25, 25, 27, 25, 25, 25, 25, 27, 25, 25, 27, 40, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, - 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 25, 25, 27, - 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 79, 27, 27, 27, 27, 27, 27, - 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 25, 25, 27, 27, 27, 27, 25, - 25, 25, 25, 25, 25, 25, 25, 25, 25, 0, 25, 25, 25, 25, 25, 25, 25, 25, - 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 0, 25, 0, 0, 0, 0, 25, 25, - 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, - 25, 25, 25, 25, 0, 27, 27, 27, 27, 0, 27, 27, 27, 27, 0, 0, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, - 27, 27, 27, 27, 27, 27, 27, 0, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, - 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 25, 27, 27, 27, 27, 27, 27, 27, - 27, 27, 27, 27, 27, 27, 27, 0, 27, 0, 27, 27, 27, 27, 0, 0, 0, 27, 25, - 27, 27, 27, 27, 27, 27, 27, 0, 0, 27, 27, 27, 27, 27, 27, 27, 162, 163, - 162, 163, 162, 163, 162, 163, 162, 163, 162, 163, 162, 163, 235, 235, - 235, 235, 235, 235, 235, 235, 235, 235, 152, 152, 152, 152, 152, 152, - 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 27, - 0, 0, 0, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, - 27, 27, 27, 27, 27, 27, 27, 27, 0, 27, 27, 27, 27, 27, 27, 27, 27, 27, - 27, 27, 27, 27, 27, 0, 225, 77, 77, 225, 225, 162, 163, 77, 225, 225, 77, - 0, 225, 0, 0, 0, 77, 77, 77, 225, 225, 225, 225, 77, 77, 77, 77, 77, 225, - 225, 225, 77, 77, 77, 225, 225, 225, 225, 9, 10, 9, 10, 9, 10, 9, 10, - 162, 163, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, - 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, + 27, 27, 27, 27, 27, 27, 27, 27, 27, 0, 0, 27, 27, 27, 27, 27, 27, 27, 27, + 27, 27, 27, 27, 79, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, + 27, 27, 27, 0, 0, 0, 27, 27, 27, 27, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 27, 27, 27, 27, 0, 27, 27, 27, 27, 0, 0, 27, 27, 27, 27, 27, 27, 27, + 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, + 27, 27, 27, 0, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, + 27, 27, 27, 27, 27, 27, 25, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, + 27, 27, 27, 0, 27, 0, 27, 27, 27, 27, 0, 0, 0, 27, 0, 27, 27, 27, 27, 27, + 27, 27, 0, 0, 27, 27, 27, 27, 27, 27, 27, 162, 163, 162, 163, 162, 163, + 162, 163, 162, 163, 162, 163, 162, 163, 234, 234, 234, 234, 234, 234, + 234, 234, 234, 234, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, + 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 27, 0, 0, 0, 27, 27, + 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, + 27, 27, 27, 27, 0, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, + 27, 0, 224, 77, 77, 224, 224, 162, 163, 77, 224, 224, 77, 0, 224, 0, 0, + 0, 77, 77, 77, 224, 224, 224, 224, 77, 77, 77, 77, 77, 224, 224, 224, 77, + 77, 77, 224, 224, 224, 224, 9, 10, 9, 10, 9, 10, 9, 10, 162, 163, 77, 77, + 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, - 79, 79, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, + 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 77, 77, + 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, - 77, 77, 77, 77, 77, 77, 77, 162, 163, 9, 10, 162, 163, 162, 163, 162, - 163, 162, 163, 162, 163, 162, 163, 162, 163, 162, 163, 162, 163, 77, 77, - 225, 225, 225, 225, 225, 225, 225, 225, 225, 225, 225, 225, 225, 225, - 225, 225, 225, 225, 225, 225, 225, 77, 77, 77, 77, 77, 77, 77, 77, 225, - 77, 77, 77, 77, 77, 77, 77, 225, 225, 225, 225, 225, 225, 77, 77, 77, - 225, 77, 77, 77, 77, 225, 225, 225, 225, 225, 77, 225, 225, 77, 77, 162, - 163, 162, 163, 225, 77, 77, 77, 77, 225, 77, 225, 225, 225, 77, 77, 225, - 225, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 225, 225, 225, 225, 225, - 225, 77, 77, 162, 163, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, - 225, 225, 219, 225, 225, 225, 225, 225, 225, 225, 225, 225, 225, 225, - 225, 225, 225, 225, 225, 77, 225, 225, 225, 225, 77, 77, 225, 77, 225, - 77, 77, 225, 77, 225, 225, 225, 225, 77, 77, 77, 77, 77, 225, 225, 77, - 77, 77, 77, 77, 77, 225, 225, 225, 77, 77, 77, 77, 77, 77, 77, 77, 77, - 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 225, 225, 77, - 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 225, 225, 77, 77, 77, 77, 225, - 225, 225, 225, 77, 225, 225, 77, 77, 225, 219, 209, 209, 77, 77, 225, - 225, 225, 225, 225, 225, 225, 225, 225, 225, 225, 225, 225, 225, 225, - 225, 225, 225, 225, 225, 225, 225, 225, 225, 225, 225, 225, 225, 225, - 225, 225, 225, 225, 225, 225, 225, 225, 225, 225, 225, 225, 225, 225, 77, - 77, 225, 225, 225, 225, 225, 225, 225, 225, 77, 225, 225, 225, 225, 225, - 225, 225, 225, 225, 225, 225, 225, 225, 225, 225, 225, 225, 225, 225, - 225, 225, 225, 225, 225, 225, 225, 225, 225, 225, 225, 225, 225, 225, - 225, 225, 225, 225, 225, 225, 225, 77, 77, 77, 77, 77, 236, 77, 225, 77, - 77, 77, 225, 225, 225, 225, 225, 77, 77, 77, 77, 77, 225, 225, 225, 77, - 77, 77, 77, 225, 77, 77, 77, 225, 225, 225, 225, 225, 77, 225, 77, 77, + 77, 77, 77, 162, 163, 9, 10, 162, 163, 162, 163, 162, 163, 162, 163, 162, + 163, 162, 163, 162, 163, 162, 163, 162, 163, 77, 77, 224, 224, 224, 224, + 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, + 224, 224, 224, 77, 77, 77, 77, 77, 77, 77, 77, 224, 77, 77, 77, 77, 77, + 77, 77, 224, 224, 224, 224, 224, 224, 77, 77, 77, 224, 77, 77, 77, 77, + 224, 224, 224, 224, 224, 77, 224, 224, 77, 77, 162, 163, 162, 163, 224, + 77, 77, 77, 77, 224, 77, 224, 224, 224, 77, 77, 224, 224, 77, 77, 77, 77, + 77, 77, 77, 77, 77, 77, 224, 224, 224, 224, 224, 224, 77, 77, 162, 163, + 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 224, 224, 218, 224, 224, + 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 77, + 224, 224, 224, 224, 77, 77, 224, 77, 224, 77, 77, 224, 77, 224, 224, 224, + 224, 77, 77, 77, 77, 77, 224, 224, 77, 77, 77, 77, 77, 77, 224, 224, 224, + 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, + 77, 77, 77, 77, 77, 77, 224, 224, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, + 77, 224, 224, 77, 77, 77, 77, 224, 224, 224, 224, 77, 224, 224, 77, 77, + 224, 218, 208, 208, 77, 77, 224, 224, 224, 224, 224, 224, 224, 224, 224, + 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, + 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, + 224, 224, 224, 224, 224, 224, 77, 77, 224, 224, 224, 224, 224, 224, 224, + 224, 77, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, + 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, + 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 77, 77, + 77, 77, 77, 235, 77, 224, 77, 77, 77, 224, 224, 224, 224, 224, 77, 77, + 77, 77, 77, 224, 224, 224, 77, 77, 77, 77, 224, 77, 77, 77, 224, 224, + 224, 224, 224, 77, 224, 77, 77, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, - 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 77, 77, 77, 77, 77, 77, - 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 27, 27, 77, - 77, 77, 77, 77, 77, 0, 0, 0, 27, 27, 27, 27, 27, 25, 25, 25, 25, 25, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, + 27, 27, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, + 77, 77, 77, 77, 77, 27, 27, 77, 77, 77, 77, 77, 77, 0, 0, 0, 27, 27, 27, + 27, 27, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 44, 44, 44, 44, 44, 44, - 44, 44, 44, 0, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, + 44, 44, 44, 44, 44, 44, 44, 44, 44, 0, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, - 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 0, 44, 46, - 44, 44, 44, 46, 46, 44, 46, 44, 46, 44, 46, 44, 44, 44, 44, 46, 44, 46, - 46, 44, 46, 46, 46, 46, 46, 46, 35, 50, 44, 44, 44, 46, 44, 46, 44, 46, - 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, - 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, - 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, - 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, - 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, - 44, 46, 44, 46, 46, 27, 27, 27, 27, 27, 27, 44, 46, 44, 46, 80, 80, 80, - 0, 0, 0, 0, 0, 0, 0, 136, 136, 136, 136, 152, 136, 136, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, - 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, + 46, 46, 46, 0, 44, 46, 44, 44, 44, 46, 46, 44, 46, 44, 46, 44, 46, 44, + 44, 44, 0, 46, 44, 46, 46, 44, 46, 46, 46, 46, 46, 46, 35, 50, 0, 0, 44, + 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, + 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, + 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, + 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, + 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, + 46, 44, 46, 44, 46, 44, 46, 44, 46, 46, 27, 27, 27, 27, 27, 27, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 136, 136, 136, 136, 152, 136, 136, 46, + 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, + 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, + 46, 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, 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, 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, + 47, 47, 47, 47, 47, 47, 47, 47, 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, 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, 47, 47, 47, 47, 47, 47, 47, 0, 47, 47, 47, 47, 47, 47, 47, 0, 47, 47, 47, 47, 47, 47, 47, 0, 47, 47, 47, 47, 47, 47, 47, 0, 47, 47, 47, 47, 47, 47, 47, 0, 47, 47, 47, 47, 47, 47, 47, 0, 47, 47, 47, 47, 47, - 47, 47, 0, 47, 47, 47, 47, 47, 47, 47, 0, 47, 47, 47, 47, 47, 47, 47, 0, - 47, 47, 47, 47, 47, 47, 47, 0, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, + 47, 47, 0, 47, 47, 47, 47, 47, 47, 47, 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, 136, 136, 29, 36, 29, 36, 136, 136, 136, 29, 36, 136, 29, - 36, 136, 136, 136, 136, 136, 136, 136, 136, 136, 83, 136, 136, 83, 136, - 29, 36, 136, 136, 29, 36, 162, 163, 162, 163, 162, 163, 162, 163, 136, - 136, 136, 136, 136, 51, 136, 136, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 237, 237, 237, 237, + 80, 80, 80, 80, 80, 80, 136, 136, 29, 36, 29, 36, 136, 136, 136, 29, 36, + 136, 29, 36, 136, 136, 136, 136, 136, 136, 136, 136, 136, 83, 136, 136, + 83, 136, 29, 36, 136, 136, 29, 36, 162, 163, 162, 163, 162, 163, 162, + 163, 136, 136, 136, 136, 136, 51, 136, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 236, 236, + 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, + 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 0, 236, 236, 236, 236, + 237, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, + 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, + 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, + 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, + 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, + 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, + 237, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, - 237, 237, 237, 237, 237, 237, 237, 237, 0, 237, 237, 237, 237, 238, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, - 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 238, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 238, 238, 238, 238, 238, 238, 238, 238, 238, - 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, - 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, - 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, - 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, - 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, - 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, - 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, - 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, - 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, - 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, - 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, - 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, - 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, - 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, - 238, 238, 238, 238, 238, 238, 238, 238, 238, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 237, 237, 237, 237, - 237, 237, 237, 237, 237, 237, 237, 237, 0, 0, 0, 0, 239, 240, 240, 240, - 237, 241, 169, 242, 243, 244, 243, 244, 243, 244, 243, 244, 243, 244, - 237, 237, 243, 244, 243, 244, 243, 244, 243, 244, 245, 246, 247, 247, - 237, 242, 242, 242, 242, 242, 242, 242, 242, 242, 248, 249, 250, 251, - 252, 252, 245, 241, 241, 241, 241, 241, 238, 237, 253, 253, 253, 241, - 169, 240, 237, 27, 0, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, - 169, 254, 169, 254, 169, 254, 169, 254, 169, 254, 169, 254, 169, 254, - 169, 254, 169, 254, 169, 254, 169, 254, 169, 254, 169, 169, 254, 169, - 254, 169, 254, 169, 169, 169, 169, 169, 169, 254, 254, 169, 254, 254, - 169, 254, 254, 169, 254, 254, 169, 254, 254, 169, 169, 169, 169, 169, - 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, - 169, 169, 169, 254, 169, 169, 0, 0, 255, 255, 256, 256, 241, 257, 258, - 245, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 254, 169, - 254, 169, 254, 169, 254, 169, 254, 169, 254, 169, 254, 169, 254, 169, - 254, 169, 254, 169, 254, 169, 254, 169, 169, 254, 169, 254, 169, 254, - 169, 169, 169, 169, 169, 169, 254, 254, 169, 254, 254, 169, 254, 254, - 169, 254, 254, 169, 254, 254, 169, 169, 169, 169, 169, 169, 169, 169, - 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, - 254, 169, 169, 254, 254, 254, 254, 240, 241, 241, 257, 258, 0, 0, 0, 0, - 0, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, - 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, - 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 0, 0, 0, - 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, - 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, - 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, - 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, - 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, - 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, - 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 0, 259, 259, 260, 260, - 260, 260, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 169, 169, - 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, - 169, 169, 169, 169, 169, 169, 169, 169, 0, 0, 0, 0, 0, 0, 0, 0, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, - 237, 237, 237, 237, 237, 237, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 169, - 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, - 169, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, - 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, - 261, 261, 238, 238, 0, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, - 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, - 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, - 261, 261, 262, 262, 262, 262, 262, 262, 262, 262, 238, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, 261, 261, - 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, - 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 238, 238, - 238, 259, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 261, 261, - 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, - 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, - 261, 261, 261, 261, 261, 261, 261, 261, 261, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, 261, 261, 261, 261, - 261, 261, 261, 261, 261, 261, 261, 261, 238, 238, 238, 238, 261, 261, - 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, - 261, 261, 261, 261, 261, 261, 261, 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, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, - 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, - 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, - 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, - 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, - 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, - 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, - 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, - 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 238, 238, 238, 238, - 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, - 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, - 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, - 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, - 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, - 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, - 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, - 261, 238, 238, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, - 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, - 261, 261, 261, 261, 261, 261, 238, 169, 169, 169, 169, 169, 169, 169, + 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, + 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, + 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, + 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, + 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, + 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, + 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 236, + 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 0, 0, 0, 0, 238, + 239, 239, 239, 236, 240, 169, 241, 242, 243, 242, 243, 242, 243, 242, + 243, 242, 243, 236, 236, 242, 243, 242, 243, 242, 243, 242, 243, 244, + 245, 246, 246, 236, 241, 241, 241, 241, 241, 241, 241, 241, 241, 247, + 248, 249, 250, 251, 251, 244, 240, 240, 240, 240, 240, 237, 236, 252, + 252, 252, 240, 169, 239, 236, 27, 0, 169, 169, 169, 169, 169, 169, 169, + 169, 169, 169, 169, 253, 169, 253, 169, 253, 169, 253, 169, 253, 169, + 253, 169, 253, 169, 253, 169, 253, 169, 253, 169, 253, 169, 253, 169, + 169, 253, 169, 253, 169, 253, 169, 169, 169, 169, 169, 169, 253, 253, + 169, 253, 253, 169, 253, 253, 169, 253, 253, 169, 253, 253, 169, 169, + 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, + 169, 169, 169, 169, 169, 169, 253, 169, 169, 0, 0, 254, 254, 255, 255, + 240, 256, 257, 244, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, + 169, 253, 169, 253, 169, 253, 169, 253, 169, 253, 169, 253, 169, 253, + 169, 253, 169, 253, 169, 253, 169, 253, 169, 253, 169, 169, 253, 169, + 253, 169, 253, 169, 169, 169, 169, 169, 169, 253, 253, 169, 253, 253, + 169, 253, 253, 169, 253, 253, 169, 253, 253, 169, 169, 169, 169, 169, + 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, + 169, 169, 169, 253, 169, 169, 253, 253, 253, 253, 239, 240, 240, 256, + 257, 0, 0, 0, 0, 0, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, + 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, + 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, + 169, 169, 169, 0, 0, 0, 257, 257, 257, 257, 257, 257, 257, 257, 257, 257, + 257, 257, 257, 257, 257, 257, 257, 257, 257, 257, 257, 257, 257, 257, + 257, 257, 257, 257, 257, 257, 257, 257, 257, 257, 257, 257, 257, 257, + 257, 257, 257, 257, 257, 257, 257, 257, 257, 257, 257, 257, 257, 257, + 257, 257, 257, 257, 257, 257, 257, 257, 257, 257, 257, 257, 257, 257, + 257, 257, 257, 257, 257, 257, 257, 257, 257, 257, 257, 257, 257, 257, + 257, 257, 257, 257, 257, 257, 257, 257, 257, 257, 257, 257, 257, 257, 0, + 258, 258, 259, 259, 259, 259, 260, 260, 260, 260, 260, 260, 260, 260, + 260, 260, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, + 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 0, 0, 0, 0, + 0, 0, 0, 0, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, + 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, + 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, + 169, 169, 169, 169, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, + 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, + 260, 260, 260, 260, 260, 237, 237, 0, 259, 259, 259, 259, 259, 259, 259, + 259, 259, 259, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, + 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, + 260, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 237, 261, 261, 261, 261, 261, + 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 260, 260, 260, 260, + 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, + 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 237, 237, 237, 258, + 259, 259, 259, 259, 259, 259, 259, 259, 259, 259, 260, 260, 260, 260, + 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, + 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, + 260, 260, 260, 260, 260, 260, 260, 261, 261, 261, 261, 261, 261, 261, + 261, 261, 261, 261, 261, 261, 261, 261, 260, 260, 260, 260, 260, 260, + 260, 260, 260, 260, 260, 260, 237, 237, 237, 237, 260, 260, 260, 260, + 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, + 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, + 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, + 260, 0, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, + 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, + 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, + 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, + 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, + 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, + 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, + 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, + 260, 260, 260, 260, 260, 260, 260, 260, 237, 237, 237, 237, 260, 260, + 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, + 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, + 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, + 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, + 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, + 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, + 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 237, + 237, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, + 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, + 260, 260, 260, 260, 237, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, @@ -1933,21 +1892,20 @@ 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, - 169, 169, 169, 169, 169, 169, 169, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 27, 27, + 169, 169, 169, 169, 169, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, - 27, 27, 27, 27, 27, 27, 27, 27, 169, 169, 169, 169, 169, 169, 169, 169, + 27, 27, 27, 27, 27, 27, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, - 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 0, 0, 0, 0, + 169, 169, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, - 169, 169, 169, 169, 169, 169, 169, 241, 169, 169, 169, 169, 169, 169, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, + 169, 169, 240, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, @@ -1955,164 +1913,139 @@ 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, - 169, 0, 0, 0, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, - 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, - 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, - 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, - 237, 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, 52, 52, 52, 52, 52, 52, - 82, 82, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 52, 136, 136, - 136, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 142, - 142, 142, 142, 142, 142, 142, 142, 142, 142, 47, 47, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 44, 46, 44, 46, 44, 46, 44, 46, - 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, - 44, 46, 44, 46, 44, 46, 0, 0, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, - 46, 47, 80, 81, 81, 81, 136, 0, 0, 0, 0, 0, 0, 0, 0, 80, 80, 136, 51, 44, + 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 0, 0, 0, 236, 236, 236, + 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, + 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, + 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, + 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 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, 52, 136, 136, 136, 47, + 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 142, 142, + 142, 142, 142, 142, 142, 142, 142, 142, 47, 47, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, - 46, 44, 46, 44, 46, 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, 172, 172, 172, 172, 172, 172, 172, - 172, 172, 172, 80, 80, 82, 82, 82, 82, 82, 82, 0, 0, 0, 0, 0, 0, 0, 0, - 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, - 53, 53, 53, 53, 53, 51, 51, 51, 51, 51, 51, 51, 51, 51, 53, 53, 44, 46, - 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 46, 46, 44, 46, 44, 46, + 46, 44, 46, 44, 46, 0, 0, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, + 47, 80, 81, 81, 81, 136, 0, 0, 0, 0, 0, 0, 0, 0, 80, 80, 136, 51, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, + 44, 46, 44, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 53, 53, 53, 53, 53, 53, 53, 53, + 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 51, 51, 51, + 51, 51, 51, 51, 51, 51, 53, 53, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, + 44, 46, 44, 46, 46, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, - 44, 46, 44, 46, 50, 46, 46, 46, 46, 46, 46, 46, 46, 44, 46, 44, 46, 44, - 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 51, 264, 264, 44, 46, 0, 0, 0, 0, + 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 50, 46, 46, 46, + 46, 46, 46, 46, 46, 44, 46, 44, 46, 44, 44, 46, 44, 46, 44, 46, 44, 46, + 44, 46, 51, 262, 262, 44, 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, 0, 0, 0, 0, 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, 133, 47, 47, - 47, 140, 47, 47, 47, 47, 133, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, - 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 137, 137, 133, 133, 137, - 27, 27, 27, 27, 0, 0, 0, 0, 147, 147, 147, 147, 147, 147, 79, 79, 146, - 218, 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, 136, 136, 136, 136, 0, 0, 0, 0, 0, 0, 0, 0, 137, 137, 47, + 47, 47, 47, 47, 47, 47, 47, 133, 47, 47, 47, 140, 47, 47, 47, 47, 133, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, + 47, 47, 47, 47, 47, 137, 137, 133, 133, 137, 27, 27, 27, 27, 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, 137, 137, 137, 137, - 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 140, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 82, 82, 142, 142, 142, 142, 142, 142, 142, 142, 142, - 142, 0, 0, 0, 0, 0, 0, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, - 80, 80, 80, 80, 80, 80, 47, 47, 47, 47, 47, 47, 82, 82, 82, 47, 0, 0, 0, - 0, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, - 47, 47, 47, 47, 47, 133, 133, 133, 133, 133, 84, 84, 84, 82, 82, 47, 47, + 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 136, 136, 136, 136, 0, 0, 0, 0, + 0, 0, 0, 0, 137, 137, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, - 47, 47, 47, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 137, - 174, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 169, 169, 169, 169, 169, 169, - 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, - 169, 169, 169, 169, 169, 169, 169, 169, 169, 0, 0, 0, 133, 133, 133, 137, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, + 47, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, + 137, 137, 140, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 82, 142, 142, 142, 142, + 142, 142, 142, 142, 142, 142, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, - 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 143, 137, 137, 133, 133, 133, - 133, 137, 137, 133, 137, 137, 137, 174, 82, 82, 82, 82, 82, 82, 82, 82, - 82, 82, 82, 82, 82, 0, 52, 142, 142, 142, 142, 142, 142, 142, 142, 142, - 142, 0, 0, 0, 0, 82, 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, 47, 47, 47, 47, 47, 47, + 47, 47, 47, 47, 133, 133, 133, 133, 133, 84, 84, 84, 82, 82, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, - 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 133, - 133, 133, 133, 133, 133, 137, 137, 133, 133, 137, 137, 133, 133, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 47, 47, 47, 133, 47, 47, 47, 47, 47, 47, 47, 47, 133, - 137, 0, 0, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 0, 0, 82, - 82, 82, 82, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, - 47, 52, 47, 47, 47, 47, 47, 47, 79, 79, 79, 47, 137, 0, 0, 0, 0, 47, 47, + 47, 47, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 137, 174, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, - 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 80, 47, 80, 80, 84, 47, 47, 80, - 80, 47, 47, 47, 47, 47, 80, 80, 47, 80, 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, 47, 47, 52, 82, 82, 0, 0, 0, 0, + 47, 47, 133, 133, 133, 133, 133, 133, 137, 137, 133, 133, 137, 137, 133, + 133, 0, 0, 0, 0, 0, 0, 0, 0, 0, 47, 47, 47, 133, 47, 47, 47, 47, 47, 47, + 47, 47, 133, 137, 0, 0, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, + 0, 0, 82, 82, 82, 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, 253, 253, 253, 253, 253, + 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, + 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, + 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, + 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, + 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, + 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, + 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, + 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, + 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, + 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, + 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, + 253, 253, 253, 253, 253, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 137, 137, 133, - 137, 137, 133, 137, 137, 82, 137, 140, 0, 0, 142, 142, 142, 142, 142, - 142, 142, 142, 142, 142, 0, 0, 0, 0, 0, 0, 254, 254, 254, 254, 254, 254, - 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, - 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, - 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, - 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, - 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, - 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, - 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, - 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, - 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, - 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, - 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, - 254, 254, 254, 254, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 169, 169, 169, - 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, - 169, 169, 169, 169, 169, 169, 0, 0, 0, 0, 169, 169, 169, 169, 169, 169, - 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, - 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, - 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, - 169, 0, 0, 0, 0, 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, + 0, 0, 0, 0, 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, + 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, + 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, + 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, + 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, + 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, + 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, + 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, + 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, + 263, 263, 263, 263, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, + 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, + 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, + 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, + 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, + 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, + 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, + 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, + 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, + 264, 264, 264, 264, 264, 264, 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, 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, 169, 169, 265, 169, 265, 169, + 169, 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, 169, 265, 169, + 265, 169, 169, 265, 265, 169, 169, 169, 265, 265, 265, 265, 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, 0, 0, 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, 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, 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, 267, 267, 267, 267, 267, 267, 267, - 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, - 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, - 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, - 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, - 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, - 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, - 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, - 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, - 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, - 267, 267, 267, 267, 267, 267, 267, 267, 267, 169, 169, 267, 169, 267, - 169, 169, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 169, 267, - 169, 267, 169, 169, 267, 267, 169, 169, 169, 267, 267, 267, 267, 0, 0, - 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, - 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, - 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, - 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, - 267, 267, 267, 267, 267, 267, 0, 0, 267, 267, 267, 267, 267, 267, 267, - 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, - 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, - 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, - 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, - 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, - 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, - 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, - 267, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, - 268, 269, 268, 270, 270, 270, 270, 270, 270, 270, 270, 270, 208, 268, - 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 0, 268, 268, - 268, 268, 268, 0, 268, 0, 268, 268, 0, 268, 268, 0, 268, 268, 268, 268, - 268, 268, 268, 268, 268, 270, 128, 128, 128, 128, 128, 128, 128, 128, + 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, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 266, 267, 266, + 268, 268, 268, 268, 268, 268, 268, 268, 268, 207, 266, 266, 266, 266, + 266, 266, 266, 266, 266, 266, 266, 266, 266, 0, 266, 266, 266, 266, 266, + 0, 266, 0, 266, 266, 0, 266, 266, 0, 266, 266, 266, 266, 266, 266, 266, + 266, 266, 268, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, - 128, 128, 128, 128, 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, + 128, 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, @@ -2129,26 +2062,26 @@ 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, - 128, 128, 128, 128, 128, 128, 128, 128, 192, 271, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 128, 128, 128, 191, 269, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, - 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 0, 0, 128, + 128, 128, 128, 128, 128, 128, 128, 128, 128, 0, 0, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, - 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 0, 0, 0, 0, 0, 0, + 128, 128, 128, 128, 128, 128, 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 128, 128, 128, 128, 128, - 128, 128, 128, 128, 272, 27, 0, 0, 70, 70, 70, 70, 70, 70, 70, 70, 70, - 70, 70, 70, 70, 70, 70, 70, 273, 273, 273, 273, 273, 273, 273, 274, 275, - 273, 0, 0, 0, 0, 0, 0, 80, 80, 80, 80, 80, 80, 80, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 273, 276, 276, 277, 277, 274, 275, 274, 275, 274, 275, 274, 275, - 274, 275, 274, 275, 274, 275, 274, 275, 240, 240, 274, 275, 273, 273, - 273, 273, 277, 277, 277, 278, 273, 278, 0, 273, 278, 273, 273, 276, 279, - 280, 279, 280, 279, 280, 281, 273, 273, 282, 283, 284, 284, 285, 0, 273, - 286, 281, 273, 0, 0, 0, 0, 128, 128, 128, 115, 128, 0, 128, 128, 128, + 0, 0, 0, 0, 0, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, + 128, 270, 27, 0, 0, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, + 70, 70, 70, 271, 271, 271, 271, 271, 271, 271, 272, 273, 271, 0, 0, 0, 0, + 0, 0, 80, 80, 80, 80, 80, 80, 80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 271, 274, + 274, 275, 275, 272, 273, 272, 273, 272, 273, 272, 273, 272, 273, 272, + 273, 272, 273, 272, 273, 239, 239, 272, 273, 271, 271, 271, 271, 275, + 275, 275, 276, 271, 276, 0, 271, 276, 271, 271, 274, 277, 278, 277, 278, + 277, 278, 279, 271, 271, 280, 281, 282, 282, 283, 0, 271, 284, 279, 271, + 0, 0, 0, 0, 128, 128, 128, 115, 128, 0, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, @@ -2158,210 +2091,173 @@ 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, - 128, 128, 128, 128, 128, 128, 0, 0, 131, 0, 287, 287, 288, 289, 288, 287, - 287, 290, 291, 287, 292, 293, 294, 293, 293, 295, 295, 295, 295, 295, - 295, 295, 295, 295, 295, 293, 287, 296, 297, 296, 287, 287, 298, 298, - 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, - 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, 290, 287, 291, 299, - 300, 299, 301, 301, 301, 301, 301, 301, 301, 301, 301, 301, 301, 301, - 301, 301, 301, 301, 301, 301, 301, 301, 301, 301, 301, 301, 301, 301, - 290, 297, 291, 297, 290, 291, 302, 303, 304, 302, 302, 305, 305, 305, - 305, 305, 305, 305, 305, 305, 305, 306, 305, 305, 305, 305, 305, 305, - 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, - 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, - 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 306, 306, 305, - 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, - 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, - 305, 305, 0, 0, 0, 305, 305, 305, 305, 305, 305, 0, 0, 305, 305, 305, - 305, 305, 305, 0, 0, 305, 305, 305, 305, 305, 305, 0, 0, 305, 305, 305, - 0, 0, 0, 289, 289, 297, 299, 307, 289, 289, 0, 308, 309, 309, 309, 309, - 308, 308, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 310, 310, 310, 27, 25, 0, 0, 47, - 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 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, 0, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, - 47, 47, 47, 47, 0, 47, 47, 0, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, - 47, 47, 47, 47, 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, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, + 128, 128, 128, 0, 0, 131, 0, 285, 285, 286, 287, 286, 285, 285, 288, 289, + 285, 290, 291, 292, 291, 291, 293, 293, 293, 293, 293, 293, 293, 293, + 293, 293, 291, 285, 294, 295, 294, 285, 285, 296, 296, 296, 296, 296, + 296, 296, 296, 296, 296, 296, 296, 296, 296, 296, 296, 296, 296, 296, + 296, 296, 296, 296, 296, 296, 296, 288, 285, 289, 297, 298, 297, 299, + 299, 299, 299, 299, 299, 299, 299, 299, 299, 299, 299, 299, 299, 299, + 299, 299, 299, 299, 299, 299, 299, 299, 299, 299, 299, 288, 295, 289, + 295, 288, 289, 300, 301, 302, 300, 300, 303, 303, 303, 303, 303, 303, + 303, 303, 303, 303, 304, 303, 303, 303, 303, 303, 303, 303, 303, 303, + 303, 303, 303, 303, 303, 303, 303, 303, 303, 303, 303, 303, 303, 303, + 303, 303, 303, 303, 303, 303, 303, 303, 303, 303, 303, 303, 303, 303, + 303, 303, 303, 303, 303, 303, 303, 303, 304, 304, 303, 303, 303, 303, + 303, 303, 303, 303, 303, 303, 303, 303, 303, 303, 303, 303, 303, 303, + 303, 303, 303, 303, 303, 303, 303, 303, 303, 303, 303, 303, 303, 0, 0, 0, + 303, 303, 303, 303, 303, 303, 0, 0, 303, 303, 303, 303, 303, 303, 0, 0, + 303, 303, 303, 303, 303, 303, 0, 0, 303, 303, 303, 0, 0, 0, 287, 287, + 295, 297, 305, 287, 287, 0, 306, 307, 307, 307, 307, 306, 306, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 308, 308, 308, 27, 25, 0, 0, 47, 47, 47, 47, 47, 47, + 47, 47, 47, 47, 47, 47, 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, 0, 47, 47, + 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 0, + 47, 47, 0, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 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, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 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, 82, 136, 79, 0, 0, 0, 0, 147, 147, + 47, 0, 0, 0, 0, 0, 82, 136, 79, 0, 0, 0, 0, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, - 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, - 147, 0, 0, 0, 79, 79, 79, 79, 79, 79, 79, 79, 79, 311, 311, 311, 311, - 311, 311, 311, 311, 311, 311, 311, 311, 311, 311, 311, 311, 311, 311, - 311, 311, 311, 311, 311, 311, 311, 311, 311, 311, 311, 311, 311, 311, - 311, 311, 311, 311, 311, 311, 311, 311, 311, 311, 311, 311, 311, 311, - 311, 311, 311, 311, 311, 311, 311, 152, 152, 152, 152, 27, 27, 27, 27, - 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 152, 0, 0, 0, 0, 0, - 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 0, 0, 0, 0, 0, 0, 0, 0, + 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 0, 0, 0, 79, 79, + 79, 79, 79, 79, 79, 79, 79, 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, 309, 309, 309, + 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, + 309, 309, 152, 152, 152, 152, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, + 27, 27, 27, 27, 27, 27, 152, 0, 0, 0, 0, 0, 27, 27, 27, 27, 27, 27, 27, + 27, 27, 27, 27, 27, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 79, 79, 79, - 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, - 79, 79, 79, 79, 79, 79, 84, 0, 0, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, + 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 84, 0, 0, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, - 47, 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, 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, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 147, 147, 147, 147, 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, 172, 47, 47, 47, 47, 47, 47, 47, 47, 172, 0, 0, + 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, 47, 47, 47, 47, 47, 47, 47, 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, 147, 147, 147, 147, 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, 172, 47, + 47, 47, 47, 47, 47, 47, 47, 172, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 82, 47, 47, + 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, 47, 47, 47, 47, 47, 47, 47, 47, 82, 172, 172, 172, 172, 172, 0, 0, 0, + 47, 47, 47, 47, 47, 47, 0, 82, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, + 47, 47, 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, 47, 47, 47, 47, 47, 47, 47, + 47, 82, 172, 172, 172, 172, 172, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, + 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, 46, 46, 46, - 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, + 44, 44, 44, 44, 44, 44, 44, 44, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, - 46, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, + 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 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, 142, 142, 142, 142, 142, 142, 142, 142, - 142, 142, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 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, + 0, 0, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 105, 105, 105, 105, - 105, 105, 0, 0, 105, 0, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, - 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, - 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, - 105, 105, 105, 105, 105, 105, 0, 105, 105, 0, 0, 0, 105, 0, 0, 105, 105, - 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, - 105, 105, 105, 105, 105, 105, 105, 0, 102, 312, 312, 312, 312, 312, 312, - 312, 312, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 105, 105, 105, 105, 105, 105, 105, 105, - 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, - 312, 312, 312, 312, 312, 312, 0, 0, 0, 136, 105, 105, 105, 105, 105, 105, - 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, - 105, 105, 105, 105, 105, 105, 0, 0, 0, 0, 0, 102, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 105, 133, 133, 133, 0, 133, 133, 0, 0, 0, 0, 0, - 133, 84, 133, 80, 105, 105, 105, 105, 0, 105, 105, 105, 0, 105, 105, 105, - 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, - 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 0, 0, 0, 0, 80, 175, - 84, 0, 0, 0, 0, 140, 312, 312, 312, 312, 312, 312, 312, 312, 0, 0, 0, 0, - 0, 0, 0, 0, 102, 102, 102, 102, 102, 102, 102, 102, 102, 0, 0, 0, 0, 0, - 0, 0, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, - 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, - 105, 105, 312, 312, 102, 105, 105, 105, 105, 105, 105, 105, 105, 105, - 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, - 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, - 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, - 105, 105, 105, 0, 0, 0, 136, 136, 136, 136, 136, 136, 136, 105, 105, 105, - 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, - 105, 105, 105, 105, 105, 0, 0, 312, 312, 312, 312, 312, 312, 312, 312, - 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, - 105, 105, 105, 105, 105, 0, 0, 0, 0, 0, 312, 312, 312, 312, 312, 312, - 312, 312, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, + 0, 0, 0, 0, 0, 0, 0, 0, 105, 105, 105, 105, 105, 105, 0, 0, 105, 0, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, - 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, - 105, 105, 105, 105, 105, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 105, 0, 105, 105, 0, 0, 0, 105, 0, 0, 105, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, + 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 310, 310, 310, + 310, 0, 0, 0, 0, 0, 136, 105, 105, 105, 105, 105, 105, 105, 105, 105, + 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, + 105, 105, 105, 0, 0, 0, 0, 0, 102, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 133, 133, - 137, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, - 47, 47, 47, 47, 47, 47, 138, 47, 138, 47, 47, 47, 47, 47, 47, 47, 47, 47, - 47, 47, 47, 47, 47, 138, 47, 47, 47, 47, 137, 137, 137, 133, 133, 133, - 133, 137, 137, 140, 139, 82, 82, 173, 82, 82, 82, 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, 105, 133, 133, 133, 0, 133, 133, 0, 0, 0, 0, 0, 133, 84, 133, + 80, 105, 105, 105, 105, 0, 105, 105, 105, 0, 105, 105, 105, 105, 105, + 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, + 105, 105, 105, 105, 105, 105, 105, 105, 0, 0, 0, 0, 80, 213, 84, 0, 0, 0, + 0, 140, 310, 310, 310, 310, 310, 310, 310, 310, 0, 0, 0, 0, 0, 0, 0, 0, + 102, 102, 102, 102, 102, 102, 102, 102, 102, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, + 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, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 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, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, + 47, 47, 47, 47, 47, 47, 47, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, - 172, 172, 172, 172, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 82, 82, - 82, 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, 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, 79, 79, 79, 79, 79, 79, 79, 79, - 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, + 172, 172, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 82, 82, 82, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, - 79, 79, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 79, 79, 79, 79, 79, 79, 79, 79, 79, + 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, - 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 0, 0, 79, 79, 79, 79, 79, + 79, 79, 79, 79, 79, 79, 79, 79, 79, 0, 0, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, - 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 314, 314, 314, 314, 314, - 314, 314, 315, 315, 175, 175, 175, 79, 79, 79, 316, 315, 315, 315, 315, - 315, 131, 131, 131, 131, 131, 131, 131, 131, 84, 84, 84, 84, 84, 84, 84, - 84, 79, 79, 80, 80, 80, 80, 80, 84, 84, 79, 79, 79, 79, 79, 79, 79, 79, + 79, 79, 79, 79, 79, 79, 79, 79, 79, 311, 311, 311, 311, 311, 311, 311, + 312, 312, 213, 213, 213, 79, 79, 79, 313, 312, 312, 312, 312, 312, 131, + 131, 131, 131, 131, 131, 131, 131, 84, 84, 84, 84, 84, 84, 84, 84, 79, + 79, 80, 80, 80, 80, 80, 84, 84, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, - 79, 79, 79, 79, 80, 80, 80, 80, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, - 79, 79, 79, 314, 314, 314, 314, 314, 314, 79, 79, 79, 79, 79, 79, 79, 79, + 79, 79, 80, 80, 80, 80, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, + 79, 311, 311, 311, 311, 311, 311, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, - 79, 79, 79, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 27, 27, 27, 27, 27, 27, 27, 27, + 79, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, - 27, 27, 27, 27, 80, 80, 80, 27, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 27, 27, 80, 80, 80, 27, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 27, 27, 27, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, - 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, - 147, 147, 147, 147, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, 48, 48, + 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 0, 0, 0, 0, 0, 0, 0, 0, 0, 147, + 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, + 147, 147, 147, 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, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, - 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, + 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, - 48, 48, 48, 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, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 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, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, - 48, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, - 35, 35, 35, 35, 35, 35, 35, 35, 35, 48, 0, 48, 48, 0, 0, 48, 0, 0, 48, - 48, 0, 0, 48, 48, 48, 48, 0, 48, 48, 48, 48, 48, 48, 48, 48, 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, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, - 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, - 35, 35, 48, 48, 0, 48, 48, 48, 48, 0, 0, 48, 48, 48, 48, 48, 48, 48, 48, - 0, 48, 48, 48, 48, 48, 48, 48, 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, 48, 48, - 0, 48, 48, 48, 48, 0, 48, 48, 48, 48, 48, 0, 48, 0, 0, 0, 48, 48, 48, 48, + 35, 35, 35, 35, 35, 35, 35, 35, 48, 0, 48, 48, 0, 0, 48, 0, 0, 48, 48, 0, + 0, 48, 48, 48, 48, 0, 48, 48, 48, 48, 48, 48, 48, 48, 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, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 35, 35, 35, 35, 35, 35, 35, 35, + 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, + 48, 48, 0, 48, 48, 48, 48, 0, 0, 48, 48, 48, 48, 48, 48, 48, 48, 0, 48, + 48, 48, 48, 48, 48, 48, 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, 48, 48, 0, + 48, 48, 48, 48, 0, 48, 48, 48, 48, 48, 0, 48, 0, 0, 0, 48, 48, 48, 48, 48, 48, 48, 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, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, @@ -2382,25 +2278,25 @@ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 35, 35, 35, 35, 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, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, - 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 317, 35, 35, 35, 35, 35, 35, 35, + 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 314, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, - 219, 35, 35, 35, 35, 35, 35, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, - 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 317, 35, 35, 35, + 315, 35, 35, 35, 35, 35, 35, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 314, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, - 35, 35, 35, 35, 219, 35, 35, 35, 35, 35, 35, 48, 48, 48, 48, 48, 48, 48, + 35, 35, 35, 35, 315, 35, 35, 35, 35, 35, 35, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, - 317, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, - 35, 35, 35, 35, 35, 35, 35, 35, 219, 35, 35, 35, 35, 35, 35, 48, 48, 48, + 314, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, + 35, 35, 35, 35, 35, 35, 35, 35, 315, 35, 35, 35, 35, 35, 35, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, - 48, 48, 48, 48, 317, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, - 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 219, 35, 35, 35, 35, 35, + 48, 48, 48, 48, 314, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, + 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 315, 35, 35, 35, 35, 35, 35, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, - 48, 48, 48, 48, 48, 48, 48, 48, 317, 35, 35, 35, 35, 35, 35, 35, 35, 35, - 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 219, 35, - 35, 35, 35, 35, 35, 48, 35, 0, 0, 318, 318, 318, 318, 318, 318, 318, 318, - 318, 318, 318, 318, 318, 318, 318, 318, 318, 318, 318, 318, 318, 318, - 318, 318, 318, 318, 318, 318, 318, 318, 318, 318, 318, 318, 318, 318, - 318, 318, 318, 318, 318, 318, 318, 318, 318, 318, 318, 318, 318, 318, 27, + 48, 48, 48, 48, 48, 48, 48, 48, 314, 35, 35, 35, 35, 35, 35, 35, 35, 35, + 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 315, 35, + 35, 35, 35, 35, 35, 48, 35, 0, 0, 316, 316, 316, 316, 316, 316, 316, 316, + 316, 316, 316, 316, 316, 316, 316, 316, 316, 316, 316, 316, 316, 316, + 316, 316, 316, 316, 316, 316, 316, 316, 316, 316, 316, 316, 316, 316, + 316, 316, 316, 316, 316, 316, 316, 316, 316, 316, 316, 316, 316, 316, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 0, 0, 0, 0, 27, 27, 27, 27, 27, 27, 27, 27, @@ -2413,55 +2309,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, 34, 34, 34, 34, 34, 34, 34, 34, - 34, 34, 34, 0, 0, 0, 0, 0, 234, 234, 234, 234, 234, 234, 234, 234, 234, - 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, - 234, 234, 234, 234, 234, 234, 234, 319, 0, 0, 234, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 234, 0, 234, 0, 0, 234, 0, 0, 0, 234, 0, 0, 0, 234, 234, 234, - 234, 234, 0, 0, 0, 0, 0, 0, 0, 0, 262, 0, 0, 0, 0, 0, 0, 0, 262, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 262, 0, - 262, 262, 0, 0, 262, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 262, 262, 262, 262, 0, - 0, 234, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 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, 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, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 261, 261, 261, 261, 261, 261, 261, 261, 261, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, - 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, - 169, 169, 169, 169, 169, 169, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, - 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, - 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 0, 0, 0, 0, + 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 267, - 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, - 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, - 267, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 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, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, - 131, 131, 131, 131, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, + 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 70, 70, 70, 70, + 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, @@ -2474,17 +2345,16 @@ 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, - 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 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, 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, 0, + 70, 70, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 264, 264, 264, + 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, + 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, + 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, + 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, + 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, + 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, + 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, + 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, + 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 0, 0, }; /* decomposition data */ @@ -2721,555 +2591,552 @@ 69, 262, 70, 262, 77, 262, 111, 258, 1488, 258, 1489, 258, 1490, 258, 1491, 262, 105, 770, 70, 65, 88, 262, 960, 262, 947, 262, 915, 262, 928, 262, 8721, 262, 68, 262, 100, 262, 101, 262, 105, 262, 106, 772, 49, - 8260, 55, 772, 49, 8260, 57, 1028, 49, 8260, 49, 48, 772, 49, 8260, 51, - 772, 50, 8260, 51, 772, 49, 8260, 53, 772, 50, 8260, 53, 772, 51, 8260, - 53, 772, 52, 8260, 53, 772, 49, 8260, 54, 772, 53, 8260, 54, 772, 49, - 8260, 56, 772, 51, 8260, 56, 772, 53, 8260, 56, 772, 55, 8260, 56, 516, - 49, 8260, 258, 73, 514, 73, 73, 770, 73, 73, 73, 514, 73, 86, 258, 86, - 514, 86, 73, 770, 86, 73, 73, 1026, 86, 73, 73, 73, 514, 73, 88, 258, 88, - 514, 88, 73, 770, 88, 73, 73, 258, 76, 258, 67, 258, 68, 258, 77, 258, - 105, 514, 105, 105, 770, 105, 105, 105, 514, 105, 118, 258, 118, 514, - 118, 105, 770, 118, 105, 105, 1026, 118, 105, 105, 105, 514, 105, 120, - 258, 120, 514, 120, 105, 770, 120, 105, 105, 258, 108, 258, 99, 258, 100, - 258, 109, 772, 48, 8260, 51, 512, 8592, 824, 512, 8594, 824, 512, 8596, - 824, 512, 8656, 824, 512, 8660, 824, 512, 8658, 824, 512, 8707, 824, 512, - 8712, 824, 512, 8715, 824, 512, 8739, 824, 512, 8741, 824, 514, 8747, - 8747, 770, 8747, 8747, 8747, 514, 8750, 8750, 770, 8750, 8750, 8750, 512, - 8764, 824, 512, 8771, 824, 512, 8773, 824, 512, 8776, 824, 512, 61, 824, - 512, 8801, 824, 512, 8781, 824, 512, 60, 824, 512, 62, 824, 512, 8804, - 824, 512, 8805, 824, 512, 8818, 824, 512, 8819, 824, 512, 8822, 824, 512, - 8823, 824, 512, 8826, 824, 512, 8827, 824, 512, 8834, 824, 512, 8835, - 824, 512, 8838, 824, 512, 8839, 824, 512, 8866, 824, 512, 8872, 824, 512, - 8873, 824, 512, 8875, 824, 512, 8828, 824, 512, 8829, 824, 512, 8849, - 824, 512, 8850, 824, 512, 8882, 824, 512, 8883, 824, 512, 8884, 824, 512, - 8885, 824, 256, 12296, 256, 12297, 263, 49, 263, 50, 263, 51, 263, 52, - 263, 53, 263, 54, 263, 55, 263, 56, 263, 57, 519, 49, 48, 519, 49, 49, - 519, 49, 50, 519, 49, 51, 519, 49, 52, 519, 49, 53, 519, 49, 54, 519, 49, - 55, 519, 49, 56, 519, 49, 57, 519, 50, 48, 770, 40, 49, 41, 770, 40, 50, - 41, 770, 40, 51, 41, 770, 40, 52, 41, 770, 40, 53, 41, 770, 40, 54, 41, - 770, 40, 55, 41, 770, 40, 56, 41, 770, 40, 57, 41, 1026, 40, 49, 48, 41, - 1026, 40, 49, 49, 41, 1026, 40, 49, 50, 41, 1026, 40, 49, 51, 41, 1026, - 40, 49, 52, 41, 1026, 40, 49, 53, 41, 1026, 40, 49, 54, 41, 1026, 40, 49, - 55, 41, 1026, 40, 49, 56, 41, 1026, 40, 49, 57, 41, 1026, 40, 50, 48, 41, - 514, 49, 46, 514, 50, 46, 514, 51, 46, 514, 52, 46, 514, 53, 46, 514, 54, - 46, 514, 55, 46, 514, 56, 46, 514, 57, 46, 770, 49, 48, 46, 770, 49, 49, - 46, 770, 49, 50, 46, 770, 49, 51, 46, 770, 49, 52, 46, 770, 49, 53, 46, - 770, 49, 54, 46, 770, 49, 55, 46, 770, 49, 56, 46, 770, 49, 57, 46, 770, - 50, 48, 46, 770, 40, 97, 41, 770, 40, 98, 41, 770, 40, 99, 41, 770, 40, - 100, 41, 770, 40, 101, 41, 770, 40, 102, 41, 770, 40, 103, 41, 770, 40, - 104, 41, 770, 40, 105, 41, 770, 40, 106, 41, 770, 40, 107, 41, 770, 40, - 108, 41, 770, 40, 109, 41, 770, 40, 110, 41, 770, 40, 111, 41, 770, 40, - 112, 41, 770, 40, 113, 41, 770, 40, 114, 41, 770, 40, 115, 41, 770, 40, - 116, 41, 770, 40, 117, 41, 770, 40, 118, 41, 770, 40, 119, 41, 770, 40, - 120, 41, 770, 40, 121, 41, 770, 40, 122, 41, 263, 65, 263, 66, 263, 67, - 263, 68, 263, 69, 263, 70, 263, 71, 263, 72, 263, 73, 263, 74, 263, 75, - 263, 76, 263, 77, 263, 78, 263, 79, 263, 80, 263, 81, 263, 82, 263, 83, - 263, 84, 263, 85, 263, 86, 263, 87, 263, 88, 263, 89, 263, 90, 263, 97, - 263, 98, 263, 99, 263, 100, 263, 101, 263, 102, 263, 103, 263, 104, 263, - 105, 263, 106, 263, 107, 263, 108, 263, 109, 263, 110, 263, 111, 263, - 112, 263, 113, 263, 114, 263, 115, 263, 116, 263, 117, 263, 118, 263, - 119, 263, 120, 263, 121, 263, 122, 263, 48, 1026, 8747, 8747, 8747, 8747, - 770, 58, 58, 61, 514, 61, 61, 770, 61, 61, 61, 512, 10973, 824, 261, 106, - 259, 86, 259, 11617, 258, 27597, 258, 40863, 258, 19968, 258, 20008, 258, - 20022, 258, 20031, 258, 20057, 258, 20101, 258, 20108, 258, 20128, 258, - 20154, 258, 20799, 258, 20837, 258, 20843, 258, 20866, 258, 20886, 258, - 20907, 258, 20960, 258, 20981, 258, 20992, 258, 21147, 258, 21241, 258, - 21269, 258, 21274, 258, 21304, 258, 21313, 258, 21340, 258, 21353, 258, - 21378, 258, 21430, 258, 21448, 258, 21475, 258, 22231, 258, 22303, 258, - 22763, 258, 22786, 258, 22794, 258, 22805, 258, 22823, 258, 22899, 258, - 23376, 258, 23424, 258, 23544, 258, 23567, 258, 23586, 258, 23608, 258, - 23662, 258, 23665, 258, 24027, 258, 24037, 258, 24049, 258, 24062, 258, - 24178, 258, 24186, 258, 24191, 258, 24308, 258, 24318, 258, 24331, 258, - 24339, 258, 24400, 258, 24417, 258, 24435, 258, 24515, 258, 25096, 258, - 25142, 258, 25163, 258, 25903, 258, 25908, 258, 25991, 258, 26007, 258, - 26020, 258, 26041, 258, 26080, 258, 26085, 258, 26352, 258, 26376, 258, - 26408, 258, 27424, 258, 27490, 258, 27513, 258, 27571, 258, 27595, 258, - 27604, 258, 27611, 258, 27663, 258, 27668, 258, 27700, 258, 28779, 258, - 29226, 258, 29238, 258, 29243, 258, 29247, 258, 29255, 258, 29273, 258, - 29275, 258, 29356, 258, 29572, 258, 29577, 258, 29916, 258, 29926, 258, - 29976, 258, 29983, 258, 29992, 258, 30000, 258, 30091, 258, 30098, 258, - 30326, 258, 30333, 258, 30382, 258, 30399, 258, 30446, 258, 30683, 258, - 30690, 258, 30707, 258, 31034, 258, 31160, 258, 31166, 258, 31348, 258, - 31435, 258, 31481, 258, 31859, 258, 31992, 258, 32566, 258, 32593, 258, - 32650, 258, 32701, 258, 32769, 258, 32780, 258, 32786, 258, 32819, 258, - 32895, 258, 32905, 258, 33251, 258, 33258, 258, 33267, 258, 33276, 258, - 33292, 258, 33307, 258, 33311, 258, 33390, 258, 33394, 258, 33400, 258, - 34381, 258, 34411, 258, 34880, 258, 34892, 258, 34915, 258, 35198, 258, - 35211, 258, 35282, 258, 35328, 258, 35895, 258, 35910, 258, 35925, 258, - 35960, 258, 35997, 258, 36196, 258, 36208, 258, 36275, 258, 36523, 258, - 36554, 258, 36763, 258, 36784, 258, 36789, 258, 37009, 258, 37193, 258, - 37318, 258, 37324, 258, 37329, 258, 38263, 258, 38272, 258, 38428, 258, - 38582, 258, 38585, 258, 38632, 258, 38737, 258, 38750, 258, 38754, 258, - 38761, 258, 38859, 258, 38893, 258, 38899, 258, 38913, 258, 39080, 258, - 39131, 258, 39135, 258, 39318, 258, 39321, 258, 39340, 258, 39592, 258, - 39640, 258, 39647, 258, 39717, 258, 39727, 258, 39730, 258, 39740, 258, - 39770, 258, 40165, 258, 40565, 258, 40575, 258, 40613, 258, 40635, 258, - 40643, 258, 40653, 258, 40657, 258, 40697, 258, 40701, 258, 40718, 258, - 40723, 258, 40736, 258, 40763, 258, 40778, 258, 40786, 258, 40845, 258, - 40860, 258, 40864, 264, 32, 258, 12306, 258, 21313, 258, 21316, 258, - 21317, 512, 12363, 12441, 512, 12365, 12441, 512, 12367, 12441, 512, - 12369, 12441, 512, 12371, 12441, 512, 12373, 12441, 512, 12375, 12441, - 512, 12377, 12441, 512, 12379, 12441, 512, 12381, 12441, 512, 12383, - 12441, 512, 12385, 12441, 512, 12388, 12441, 512, 12390, 12441, 512, - 12392, 12441, 512, 12399, 12441, 512, 12399, 12442, 512, 12402, 12441, - 512, 12402, 12442, 512, 12405, 12441, 512, 12405, 12442, 512, 12408, - 12441, 512, 12408, 12442, 512, 12411, 12441, 512, 12411, 12442, 512, - 12358, 12441, 514, 32, 12441, 514, 32, 12442, 512, 12445, 12441, 521, - 12424, 12426, 512, 12459, 12441, 512, 12461, 12441, 512, 12463, 12441, - 512, 12465, 12441, 512, 12467, 12441, 512, 12469, 12441, 512, 12471, - 12441, 512, 12473, 12441, 512, 12475, 12441, 512, 12477, 12441, 512, - 12479, 12441, 512, 12481, 12441, 512, 12484, 12441, 512, 12486, 12441, - 512, 12488, 12441, 512, 12495, 12441, 512, 12495, 12442, 512, 12498, - 12441, 512, 12498, 12442, 512, 12501, 12441, 512, 12501, 12442, 512, - 12504, 12441, 512, 12504, 12442, 512, 12507, 12441, 512, 12507, 12442, - 512, 12454, 12441, 512, 12527, 12441, 512, 12528, 12441, 512, 12529, - 12441, 512, 12530, 12441, 512, 12541, 12441, 521, 12467, 12488, 258, - 4352, 258, 4353, 258, 4522, 258, 4354, 258, 4524, 258, 4525, 258, 4355, - 258, 4356, 258, 4357, 258, 4528, 258, 4529, 258, 4530, 258, 4531, 258, - 4532, 258, 4533, 258, 4378, 258, 4358, 258, 4359, 258, 4360, 258, 4385, - 258, 4361, 258, 4362, 258, 4363, 258, 4364, 258, 4365, 258, 4366, 258, - 4367, 258, 4368, 258, 4369, 258, 4370, 258, 4449, 258, 4450, 258, 4451, - 258, 4452, 258, 4453, 258, 4454, 258, 4455, 258, 4456, 258, 4457, 258, - 4458, 258, 4459, 258, 4460, 258, 4461, 258, 4462, 258, 4463, 258, 4464, - 258, 4465, 258, 4466, 258, 4467, 258, 4468, 258, 4469, 258, 4448, 258, - 4372, 258, 4373, 258, 4551, 258, 4552, 258, 4556, 258, 4558, 258, 4563, - 258, 4567, 258, 4569, 258, 4380, 258, 4573, 258, 4575, 258, 4381, 258, - 4382, 258, 4384, 258, 4386, 258, 4387, 258, 4391, 258, 4393, 258, 4395, - 258, 4396, 258, 4397, 258, 4398, 258, 4399, 258, 4402, 258, 4406, 258, - 4416, 258, 4423, 258, 4428, 258, 4593, 258, 4594, 258, 4439, 258, 4440, - 258, 4441, 258, 4484, 258, 4485, 258, 4488, 258, 4497, 258, 4498, 258, - 4500, 258, 4510, 258, 4513, 259, 19968, 259, 20108, 259, 19977, 259, - 22235, 259, 19978, 259, 20013, 259, 19979, 259, 30002, 259, 20057, 259, - 19993, 259, 19969, 259, 22825, 259, 22320, 259, 20154, 770, 40, 4352, 41, - 770, 40, 4354, 41, 770, 40, 4355, 41, 770, 40, 4357, 41, 770, 40, 4358, - 41, 770, 40, 4359, 41, 770, 40, 4361, 41, 770, 40, 4363, 41, 770, 40, - 4364, 41, 770, 40, 4366, 41, 770, 40, 4367, 41, 770, 40, 4368, 41, 770, - 40, 4369, 41, 770, 40, 4370, 41, 1026, 40, 4352, 4449, 41, 1026, 40, - 4354, 4449, 41, 1026, 40, 4355, 4449, 41, 1026, 40, 4357, 4449, 41, 1026, - 40, 4358, 4449, 41, 1026, 40, 4359, 4449, 41, 1026, 40, 4361, 4449, 41, - 1026, 40, 4363, 4449, 41, 1026, 40, 4364, 4449, 41, 1026, 40, 4366, 4449, - 41, 1026, 40, 4367, 4449, 41, 1026, 40, 4368, 4449, 41, 1026, 40, 4369, - 4449, 41, 1026, 40, 4370, 4449, 41, 1026, 40, 4364, 4462, 41, 1794, 40, - 4363, 4457, 4364, 4453, 4523, 41, 1538, 40, 4363, 4457, 4370, 4462, 41, - 770, 40, 19968, 41, 770, 40, 20108, 41, 770, 40, 19977, 41, 770, 40, - 22235, 41, 770, 40, 20116, 41, 770, 40, 20845, 41, 770, 40, 19971, 41, - 770, 40, 20843, 41, 770, 40, 20061, 41, 770, 40, 21313, 41, 770, 40, - 26376, 41, 770, 40, 28779, 41, 770, 40, 27700, 41, 770, 40, 26408, 41, - 770, 40, 37329, 41, 770, 40, 22303, 41, 770, 40, 26085, 41, 770, 40, - 26666, 41, 770, 40, 26377, 41, 770, 40, 31038, 41, 770, 40, 21517, 41, - 770, 40, 29305, 41, 770, 40, 36001, 41, 770, 40, 31069, 41, 770, 40, - 21172, 41, 770, 40, 20195, 41, 770, 40, 21628, 41, 770, 40, 23398, 41, - 770, 40, 30435, 41, 770, 40, 20225, 41, 770, 40, 36039, 41, 770, 40, - 21332, 41, 770, 40, 31085, 41, 770, 40, 20241, 41, 770, 40, 33258, 41, - 770, 40, 33267, 41, 263, 21839, 263, 24188, 263, 25991, 263, 31631, 778, - 80, 84, 69, 519, 50, 49, 519, 50, 50, 519, 50, 51, 519, 50, 52, 519, 50, - 53, 519, 50, 54, 519, 50, 55, 519, 50, 56, 519, 50, 57, 519, 51, 48, 519, - 51, 49, 519, 51, 50, 519, 51, 51, 519, 51, 52, 519, 51, 53, 263, 4352, - 263, 4354, 263, 4355, 263, 4357, 263, 4358, 263, 4359, 263, 4361, 263, - 4363, 263, 4364, 263, 4366, 263, 4367, 263, 4368, 263, 4369, 263, 4370, - 519, 4352, 4449, 519, 4354, 4449, 519, 4355, 4449, 519, 4357, 4449, 519, - 4358, 4449, 519, 4359, 4449, 519, 4361, 4449, 519, 4363, 4449, 519, 4364, - 4449, 519, 4366, 4449, 519, 4367, 4449, 519, 4368, 4449, 519, 4369, 4449, - 519, 4370, 4449, 1287, 4366, 4449, 4535, 4352, 4457, 1031, 4364, 4462, - 4363, 4468, 519, 4363, 4462, 263, 19968, 263, 20108, 263, 19977, 263, - 22235, 263, 20116, 263, 20845, 263, 19971, 263, 20843, 263, 20061, 263, - 21313, 263, 26376, 263, 28779, 263, 27700, 263, 26408, 263, 37329, 263, - 22303, 263, 26085, 263, 26666, 263, 26377, 263, 31038, 263, 21517, 263, - 29305, 263, 36001, 263, 31069, 263, 21172, 263, 31192, 263, 30007, 263, - 22899, 263, 36969, 263, 20778, 263, 21360, 263, 27880, 263, 38917, 263, - 20241, 263, 20889, 263, 27491, 263, 19978, 263, 20013, 263, 19979, 263, - 24038, 263, 21491, 263, 21307, 263, 23447, 263, 23398, 263, 30435, 263, - 20225, 263, 36039, 263, 21332, 263, 22812, 519, 51, 54, 519, 51, 55, 519, - 51, 56, 519, 51, 57, 519, 52, 48, 519, 52, 49, 519, 52, 50, 519, 52, 51, - 519, 52, 52, 519, 52, 53, 519, 52, 54, 519, 52, 55, 519, 52, 56, 519, 52, - 57, 519, 53, 48, 514, 49, 26376, 514, 50, 26376, 514, 51, 26376, 514, 52, - 26376, 514, 53, 26376, 514, 54, 26376, 514, 55, 26376, 514, 56, 26376, - 514, 57, 26376, 770, 49, 48, 26376, 770, 49, 49, 26376, 770, 49, 50, - 26376, 522, 72, 103, 778, 101, 114, 103, 522, 101, 86, 778, 76, 84, 68, - 263, 12450, 263, 12452, 263, 12454, 263, 12456, 263, 12458, 263, 12459, - 263, 12461, 263, 12463, 263, 12465, 263, 12467, 263, 12469, 263, 12471, - 263, 12473, 263, 12475, 263, 12477, 263, 12479, 263, 12481, 263, 12484, - 263, 12486, 263, 12488, 263, 12490, 263, 12491, 263, 12492, 263, 12493, - 263, 12494, 263, 12495, 263, 12498, 263, 12501, 263, 12504, 263, 12507, - 263, 12510, 263, 12511, 263, 12512, 263, 12513, 263, 12514, 263, 12516, - 263, 12518, 263, 12520, 263, 12521, 263, 12522, 263, 12523, 263, 12524, - 263, 12525, 263, 12527, 263, 12528, 263, 12529, 263, 12530, 1034, 12450, - 12497, 12540, 12488, 1034, 12450, 12523, 12501, 12449, 1034, 12450, - 12531, 12506, 12450, 778, 12450, 12540, 12523, 1034, 12452, 12491, 12531, - 12464, 778, 12452, 12531, 12481, 778, 12454, 12457, 12531, 1290, 12456, - 12473, 12463, 12540, 12489, 1034, 12456, 12540, 12459, 12540, 778, 12458, - 12531, 12473, 778, 12458, 12540, 12512, 778, 12459, 12452, 12522, 1034, - 12459, 12521, 12483, 12488, 1034, 12459, 12525, 12522, 12540, 778, 12460, - 12525, 12531, 778, 12460, 12531, 12510, 522, 12462, 12460, 778, 12462, - 12491, 12540, 1034, 12461, 12517, 12522, 12540, 1034, 12462, 12523, - 12480, 12540, 522, 12461, 12525, 1290, 12461, 12525, 12464, 12521, 12512, - 1546, 12461, 12525, 12513, 12540, 12488, 12523, 1290, 12461, 12525, - 12527, 12483, 12488, 778, 12464, 12521, 12512, 1290, 12464, 12521, 12512, - 12488, 12531, 1290, 12463, 12523, 12476, 12452, 12525, 1034, 12463, - 12525, 12540, 12493, 778, 12465, 12540, 12473, 778, 12467, 12523, 12490, - 778, 12467, 12540, 12509, 1034, 12469, 12452, 12463, 12523, 1290, 12469, - 12531, 12481, 12540, 12512, 1034, 12471, 12522, 12531, 12464, 778, 12475, - 12531, 12481, 778, 12475, 12531, 12488, 778, 12480, 12540, 12473, 522, - 12487, 12471, 522, 12489, 12523, 522, 12488, 12531, 522, 12490, 12494, - 778, 12494, 12483, 12488, 778, 12495, 12452, 12484, 1290, 12497, 12540, - 12475, 12531, 12488, 778, 12497, 12540, 12484, 1034, 12496, 12540, 12524, - 12523, 1290, 12500, 12450, 12473, 12488, 12523, 778, 12500, 12463, 12523, - 522, 12500, 12467, 522, 12499, 12523, 1290, 12501, 12449, 12521, 12483, - 12489, 1034, 12501, 12451, 12540, 12488, 1290, 12502, 12483, 12471, - 12455, 12523, 778, 12501, 12521, 12531, 1290, 12504, 12463, 12479, 12540, - 12523, 522, 12506, 12477, 778, 12506, 12491, 12498, 778, 12504, 12523, - 12484, 778, 12506, 12531, 12473, 778, 12506, 12540, 12472, 778, 12505, - 12540, 12479, 1034, 12509, 12452, 12531, 12488, 778, 12508, 12523, 12488, - 522, 12507, 12531, 778, 12509, 12531, 12489, 778, 12507, 12540, 12523, - 778, 12507, 12540, 12531, 1034, 12510, 12452, 12463, 12525, 778, 12510, - 12452, 12523, 778, 12510, 12483, 12495, 778, 12510, 12523, 12463, 1290, - 12510, 12531, 12471, 12519, 12531, 1034, 12511, 12463, 12525, 12531, 522, - 12511, 12522, 1290, 12511, 12522, 12496, 12540, 12523, 522, 12513, 12460, - 1034, 12513, 12460, 12488, 12531, 1034, 12513, 12540, 12488, 12523, 778, - 12516, 12540, 12489, 778, 12516, 12540, 12523, 778, 12518, 12450, 12531, - 1034, 12522, 12483, 12488, 12523, 522, 12522, 12521, 778, 12523, 12500, - 12540, 1034, 12523, 12540, 12502, 12523, 522, 12524, 12512, 1290, 12524, - 12531, 12488, 12466, 12531, 778, 12527, 12483, 12488, 514, 48, 28857, - 514, 49, 28857, 514, 50, 28857, 514, 51, 28857, 514, 52, 28857, 514, 53, - 28857, 514, 54, 28857, 514, 55, 28857, 514, 56, 28857, 514, 57, 28857, - 770, 49, 48, 28857, 770, 49, 49, 28857, 770, 49, 50, 28857, 770, 49, 51, - 28857, 770, 49, 52, 28857, 770, 49, 53, 28857, 770, 49, 54, 28857, 770, - 49, 55, 28857, 770, 49, 56, 28857, 770, 49, 57, 28857, 770, 50, 48, - 28857, 770, 50, 49, 28857, 770, 50, 50, 28857, 770, 50, 51, 28857, 770, - 50, 52, 28857, 778, 104, 80, 97, 522, 100, 97, 522, 65, 85, 778, 98, 97, - 114, 522, 111, 86, 522, 112, 99, 522, 100, 109, 778, 100, 109, 178, 778, - 100, 109, 179, 522, 73, 85, 522, 24179, 25104, 522, 26157, 21644, 522, - 22823, 27491, 522, 26126, 27835, 1034, 26666, 24335, 20250, 31038, 522, - 112, 65, 522, 110, 65, 522, 956, 65, 522, 109, 65, 522, 107, 65, 522, 75, - 66, 522, 77, 66, 522, 71, 66, 778, 99, 97, 108, 1034, 107, 99, 97, 108, - 522, 112, 70, 522, 110, 70, 522, 956, 70, 522, 956, 103, 522, 109, 103, - 522, 107, 103, 522, 72, 122, 778, 107, 72, 122, 778, 77, 72, 122, 778, - 71, 72, 122, 778, 84, 72, 122, 522, 956, 8467, 522, 109, 8467, 522, 100, - 8467, 522, 107, 8467, 522, 102, 109, 522, 110, 109, 522, 956, 109, 522, - 109, 109, 522, 99, 109, 522, 107, 109, 778, 109, 109, 178, 778, 99, 109, - 178, 522, 109, 178, 778, 107, 109, 178, 778, 109, 109, 179, 778, 99, 109, - 179, 522, 109, 179, 778, 107, 109, 179, 778, 109, 8725, 115, 1034, 109, - 8725, 115, 178, 522, 80, 97, 778, 107, 80, 97, 778, 77, 80, 97, 778, 71, - 80, 97, 778, 114, 97, 100, 1290, 114, 97, 100, 8725, 115, 1546, 114, 97, - 100, 8725, 115, 178, 522, 112, 115, 522, 110, 115, 522, 956, 115, 522, - 109, 115, 522, 112, 86, 522, 110, 86, 522, 956, 86, 522, 109, 86, 522, - 107, 86, 522, 77, 86, 522, 112, 87, 522, 110, 87, 522, 956, 87, 522, 109, - 87, 522, 107, 87, 522, 77, 87, 522, 107, 937, 522, 77, 937, 1034, 97, 46, - 109, 46, 522, 66, 113, 522, 99, 99, 522, 99, 100, 1034, 67, 8725, 107, - 103, 778, 67, 111, 46, 522, 100, 66, 522, 71, 121, 522, 104, 97, 522, 72, - 80, 522, 105, 110, 522, 75, 75, 522, 75, 77, 522, 107, 116, 522, 108, - 109, 522, 108, 110, 778, 108, 111, 103, 522, 108, 120, 522, 109, 98, 778, - 109, 105, 108, 778, 109, 111, 108, 522, 80, 72, 1034, 112, 46, 109, 46, - 778, 80, 80, 77, 522, 80, 82, 522, 115, 114, 522, 83, 118, 522, 87, 98, - 778, 86, 8725, 109, 778, 65, 8725, 109, 514, 49, 26085, 514, 50, 26085, - 514, 51, 26085, 514, 52, 26085, 514, 53, 26085, 514, 54, 26085, 514, 55, - 26085, 514, 56, 26085, 514, 57, 26085, 770, 49, 48, 26085, 770, 49, 49, - 26085, 770, 49, 50, 26085, 770, 49, 51, 26085, 770, 49, 52, 26085, 770, - 49, 53, 26085, 770, 49, 54, 26085, 770, 49, 55, 26085, 770, 49, 56, - 26085, 770, 49, 57, 26085, 770, 50, 48, 26085, 770, 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, 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, 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, 119127, 119141, 512, 119128, 119141, 512, 119135, + 8260, 51, 772, 50, 8260, 51, 772, 49, 8260, 53, 772, 50, 8260, 53, 772, + 51, 8260, 53, 772, 52, 8260, 53, 772, 49, 8260, 54, 772, 53, 8260, 54, + 772, 49, 8260, 56, 772, 51, 8260, 56, 772, 53, 8260, 56, 772, 55, 8260, + 56, 516, 49, 8260, 258, 73, 514, 73, 73, 770, 73, 73, 73, 514, 73, 86, + 258, 86, 514, 86, 73, 770, 86, 73, 73, 1026, 86, 73, 73, 73, 514, 73, 88, + 258, 88, 514, 88, 73, 770, 88, 73, 73, 258, 76, 258, 67, 258, 68, 258, + 77, 258, 105, 514, 105, 105, 770, 105, 105, 105, 514, 105, 118, 258, 118, + 514, 118, 105, 770, 118, 105, 105, 1026, 118, 105, 105, 105, 514, 105, + 120, 258, 120, 514, 120, 105, 770, 120, 105, 105, 258, 108, 258, 99, 258, + 100, 258, 109, 512, 8592, 824, 512, 8594, 824, 512, 8596, 824, 512, 8656, + 824, 512, 8660, 824, 512, 8658, 824, 512, 8707, 824, 512, 8712, 824, 512, + 8715, 824, 512, 8739, 824, 512, 8741, 824, 514, 8747, 8747, 770, 8747, + 8747, 8747, 514, 8750, 8750, 770, 8750, 8750, 8750, 512, 8764, 824, 512, + 8771, 824, 512, 8773, 824, 512, 8776, 824, 512, 61, 824, 512, 8801, 824, + 512, 8781, 824, 512, 60, 824, 512, 62, 824, 512, 8804, 824, 512, 8805, + 824, 512, 8818, 824, 512, 8819, 824, 512, 8822, 824, 512, 8823, 824, 512, + 8826, 824, 512, 8827, 824, 512, 8834, 824, 512, 8835, 824, 512, 8838, + 824, 512, 8839, 824, 512, 8866, 824, 512, 8872, 824, 512, 8873, 824, 512, + 8875, 824, 512, 8828, 824, 512, 8829, 824, 512, 8849, 824, 512, 8850, + 824, 512, 8882, 824, 512, 8883, 824, 512, 8884, 824, 512, 8885, 824, 256, + 12296, 256, 12297, 263, 49, 263, 50, 263, 51, 263, 52, 263, 53, 263, 54, + 263, 55, 263, 56, 263, 57, 519, 49, 48, 519, 49, 49, 519, 49, 50, 519, + 49, 51, 519, 49, 52, 519, 49, 53, 519, 49, 54, 519, 49, 55, 519, 49, 56, + 519, 49, 57, 519, 50, 48, 770, 40, 49, 41, 770, 40, 50, 41, 770, 40, 51, + 41, 770, 40, 52, 41, 770, 40, 53, 41, 770, 40, 54, 41, 770, 40, 55, 41, + 770, 40, 56, 41, 770, 40, 57, 41, 1026, 40, 49, 48, 41, 1026, 40, 49, 49, + 41, 1026, 40, 49, 50, 41, 1026, 40, 49, 51, 41, 1026, 40, 49, 52, 41, + 1026, 40, 49, 53, 41, 1026, 40, 49, 54, 41, 1026, 40, 49, 55, 41, 1026, + 40, 49, 56, 41, 1026, 40, 49, 57, 41, 1026, 40, 50, 48, 41, 514, 49, 46, + 514, 50, 46, 514, 51, 46, 514, 52, 46, 514, 53, 46, 514, 54, 46, 514, 55, + 46, 514, 56, 46, 514, 57, 46, 770, 49, 48, 46, 770, 49, 49, 46, 770, 49, + 50, 46, 770, 49, 51, 46, 770, 49, 52, 46, 770, 49, 53, 46, 770, 49, 54, + 46, 770, 49, 55, 46, 770, 49, 56, 46, 770, 49, 57, 46, 770, 50, 48, 46, + 770, 40, 97, 41, 770, 40, 98, 41, 770, 40, 99, 41, 770, 40, 100, 41, 770, + 40, 101, 41, 770, 40, 102, 41, 770, 40, 103, 41, 770, 40, 104, 41, 770, + 40, 105, 41, 770, 40, 106, 41, 770, 40, 107, 41, 770, 40, 108, 41, 770, + 40, 109, 41, 770, 40, 110, 41, 770, 40, 111, 41, 770, 40, 112, 41, 770, + 40, 113, 41, 770, 40, 114, 41, 770, 40, 115, 41, 770, 40, 116, 41, 770, + 40, 117, 41, 770, 40, 118, 41, 770, 40, 119, 41, 770, 40, 120, 41, 770, + 40, 121, 41, 770, 40, 122, 41, 263, 65, 263, 66, 263, 67, 263, 68, 263, + 69, 263, 70, 263, 71, 263, 72, 263, 73, 263, 74, 263, 75, 263, 76, 263, + 77, 263, 78, 263, 79, 263, 80, 263, 81, 263, 82, 263, 83, 263, 84, 263, + 85, 263, 86, 263, 87, 263, 88, 263, 89, 263, 90, 263, 97, 263, 98, 263, + 99, 263, 100, 263, 101, 263, 102, 263, 103, 263, 104, 263, 105, 263, 106, + 263, 107, 263, 108, 263, 109, 263, 110, 263, 111, 263, 112, 263, 113, + 263, 114, 263, 115, 263, 116, 263, 117, 263, 118, 263, 119, 263, 120, + 263, 121, 263, 122, 263, 48, 1026, 8747, 8747, 8747, 8747, 770, 58, 58, + 61, 514, 61, 61, 770, 61, 61, 61, 512, 10973, 824, 261, 106, 259, 86, + 259, 11617, 258, 27597, 258, 40863, 258, 19968, 258, 20008, 258, 20022, + 258, 20031, 258, 20057, 258, 20101, 258, 20108, 258, 20128, 258, 20154, + 258, 20799, 258, 20837, 258, 20843, 258, 20866, 258, 20886, 258, 20907, + 258, 20960, 258, 20981, 258, 20992, 258, 21147, 258, 21241, 258, 21269, + 258, 21274, 258, 21304, 258, 21313, 258, 21340, 258, 21353, 258, 21378, + 258, 21430, 258, 21448, 258, 21475, 258, 22231, 258, 22303, 258, 22763, + 258, 22786, 258, 22794, 258, 22805, 258, 22823, 258, 22899, 258, 23376, + 258, 23424, 258, 23544, 258, 23567, 258, 23586, 258, 23608, 258, 23662, + 258, 23665, 258, 24027, 258, 24037, 258, 24049, 258, 24062, 258, 24178, + 258, 24186, 258, 24191, 258, 24308, 258, 24318, 258, 24331, 258, 24339, + 258, 24400, 258, 24417, 258, 24435, 258, 24515, 258, 25096, 258, 25142, + 258, 25163, 258, 25903, 258, 25908, 258, 25991, 258, 26007, 258, 26020, + 258, 26041, 258, 26080, 258, 26085, 258, 26352, 258, 26376, 258, 26408, + 258, 27424, 258, 27490, 258, 27513, 258, 27571, 258, 27595, 258, 27604, + 258, 27611, 258, 27663, 258, 27668, 258, 27700, 258, 28779, 258, 29226, + 258, 29238, 258, 29243, 258, 29247, 258, 29255, 258, 29273, 258, 29275, + 258, 29356, 258, 29572, 258, 29577, 258, 29916, 258, 29926, 258, 29976, + 258, 29983, 258, 29992, 258, 30000, 258, 30091, 258, 30098, 258, 30326, + 258, 30333, 258, 30382, 258, 30399, 258, 30446, 258, 30683, 258, 30690, + 258, 30707, 258, 31034, 258, 31160, 258, 31166, 258, 31348, 258, 31435, + 258, 31481, 258, 31859, 258, 31992, 258, 32566, 258, 32593, 258, 32650, + 258, 32701, 258, 32769, 258, 32780, 258, 32786, 258, 32819, 258, 32895, + 258, 32905, 258, 33251, 258, 33258, 258, 33267, 258, 33276, 258, 33292, + 258, 33307, 258, 33311, 258, 33390, 258, 33394, 258, 33400, 258, 34381, + 258, 34411, 258, 34880, 258, 34892, 258, 34915, 258, 35198, 258, 35211, + 258, 35282, 258, 35328, 258, 35895, 258, 35910, 258, 35925, 258, 35960, + 258, 35997, 258, 36196, 258, 36208, 258, 36275, 258, 36523, 258, 36554, + 258, 36763, 258, 36784, 258, 36789, 258, 37009, 258, 37193, 258, 37318, + 258, 37324, 258, 37329, 258, 38263, 258, 38272, 258, 38428, 258, 38582, + 258, 38585, 258, 38632, 258, 38737, 258, 38750, 258, 38754, 258, 38761, + 258, 38859, 258, 38893, 258, 38899, 258, 38913, 258, 39080, 258, 39131, + 258, 39135, 258, 39318, 258, 39321, 258, 39340, 258, 39592, 258, 39640, + 258, 39647, 258, 39717, 258, 39727, 258, 39730, 258, 39740, 258, 39770, + 258, 40165, 258, 40565, 258, 40575, 258, 40613, 258, 40635, 258, 40643, + 258, 40653, 258, 40657, 258, 40697, 258, 40701, 258, 40718, 258, 40723, + 258, 40736, 258, 40763, 258, 40778, 258, 40786, 258, 40845, 258, 40860, + 258, 40864, 264, 32, 258, 12306, 258, 21313, 258, 21316, 258, 21317, 512, + 12363, 12441, 512, 12365, 12441, 512, 12367, 12441, 512, 12369, 12441, + 512, 12371, 12441, 512, 12373, 12441, 512, 12375, 12441, 512, 12377, + 12441, 512, 12379, 12441, 512, 12381, 12441, 512, 12383, 12441, 512, + 12385, 12441, 512, 12388, 12441, 512, 12390, 12441, 512, 12392, 12441, + 512, 12399, 12441, 512, 12399, 12442, 512, 12402, 12441, 512, 12402, + 12442, 512, 12405, 12441, 512, 12405, 12442, 512, 12408, 12441, 512, + 12408, 12442, 512, 12411, 12441, 512, 12411, 12442, 512, 12358, 12441, + 514, 32, 12441, 514, 32, 12442, 512, 12445, 12441, 521, 12424, 12426, + 512, 12459, 12441, 512, 12461, 12441, 512, 12463, 12441, 512, 12465, + 12441, 512, 12467, 12441, 512, 12469, 12441, 512, 12471, 12441, 512, + 12473, 12441, 512, 12475, 12441, 512, 12477, 12441, 512, 12479, 12441, + 512, 12481, 12441, 512, 12484, 12441, 512, 12486, 12441, 512, 12488, + 12441, 512, 12495, 12441, 512, 12495, 12442, 512, 12498, 12441, 512, + 12498, 12442, 512, 12501, 12441, 512, 12501, 12442, 512, 12504, 12441, + 512, 12504, 12442, 512, 12507, 12441, 512, 12507, 12442, 512, 12454, + 12441, 512, 12527, 12441, 512, 12528, 12441, 512, 12529, 12441, 512, + 12530, 12441, 512, 12541, 12441, 521, 12467, 12488, 258, 4352, 258, 4353, + 258, 4522, 258, 4354, 258, 4524, 258, 4525, 258, 4355, 258, 4356, 258, + 4357, 258, 4528, 258, 4529, 258, 4530, 258, 4531, 258, 4532, 258, 4533, + 258, 4378, 258, 4358, 258, 4359, 258, 4360, 258, 4385, 258, 4361, 258, + 4362, 258, 4363, 258, 4364, 258, 4365, 258, 4366, 258, 4367, 258, 4368, + 258, 4369, 258, 4370, 258, 4449, 258, 4450, 258, 4451, 258, 4452, 258, + 4453, 258, 4454, 258, 4455, 258, 4456, 258, 4457, 258, 4458, 258, 4459, + 258, 4460, 258, 4461, 258, 4462, 258, 4463, 258, 4464, 258, 4465, 258, + 4466, 258, 4467, 258, 4468, 258, 4469, 258, 4448, 258, 4372, 258, 4373, + 258, 4551, 258, 4552, 258, 4556, 258, 4558, 258, 4563, 258, 4567, 258, + 4569, 258, 4380, 258, 4573, 258, 4575, 258, 4381, 258, 4382, 258, 4384, + 258, 4386, 258, 4387, 258, 4391, 258, 4393, 258, 4395, 258, 4396, 258, + 4397, 258, 4398, 258, 4399, 258, 4402, 258, 4406, 258, 4416, 258, 4423, + 258, 4428, 258, 4593, 258, 4594, 258, 4439, 258, 4440, 258, 4441, 258, + 4484, 258, 4485, 258, 4488, 258, 4497, 258, 4498, 258, 4500, 258, 4510, + 258, 4513, 259, 19968, 259, 20108, 259, 19977, 259, 22235, 259, 19978, + 259, 20013, 259, 19979, 259, 30002, 259, 20057, 259, 19993, 259, 19969, + 259, 22825, 259, 22320, 259, 20154, 770, 40, 4352, 41, 770, 40, 4354, 41, + 770, 40, 4355, 41, 770, 40, 4357, 41, 770, 40, 4358, 41, 770, 40, 4359, + 41, 770, 40, 4361, 41, 770, 40, 4363, 41, 770, 40, 4364, 41, 770, 40, + 4366, 41, 770, 40, 4367, 41, 770, 40, 4368, 41, 770, 40, 4369, 41, 770, + 40, 4370, 41, 1026, 40, 4352, 4449, 41, 1026, 40, 4354, 4449, 41, 1026, + 40, 4355, 4449, 41, 1026, 40, 4357, 4449, 41, 1026, 40, 4358, 4449, 41, + 1026, 40, 4359, 4449, 41, 1026, 40, 4361, 4449, 41, 1026, 40, 4363, 4449, + 41, 1026, 40, 4364, 4449, 41, 1026, 40, 4366, 4449, 41, 1026, 40, 4367, + 4449, 41, 1026, 40, 4368, 4449, 41, 1026, 40, 4369, 4449, 41, 1026, 40, + 4370, 4449, 41, 1026, 40, 4364, 4462, 41, 1794, 40, 4363, 4457, 4364, + 4453, 4523, 41, 1538, 40, 4363, 4457, 4370, 4462, 41, 770, 40, 19968, 41, + 770, 40, 20108, 41, 770, 40, 19977, 41, 770, 40, 22235, 41, 770, 40, + 20116, 41, 770, 40, 20845, 41, 770, 40, 19971, 41, 770, 40, 20843, 41, + 770, 40, 20061, 41, 770, 40, 21313, 41, 770, 40, 26376, 41, 770, 40, + 28779, 41, 770, 40, 27700, 41, 770, 40, 26408, 41, 770, 40, 37329, 41, + 770, 40, 22303, 41, 770, 40, 26085, 41, 770, 40, 26666, 41, 770, 40, + 26377, 41, 770, 40, 31038, 41, 770, 40, 21517, 41, 770, 40, 29305, 41, + 770, 40, 36001, 41, 770, 40, 31069, 41, 770, 40, 21172, 41, 770, 40, + 20195, 41, 770, 40, 21628, 41, 770, 40, 23398, 41, 770, 40, 30435, 41, + 770, 40, 20225, 41, 770, 40, 36039, 41, 770, 40, 21332, 41, 770, 40, + 31085, 41, 770, 40, 20241, 41, 770, 40, 33258, 41, 770, 40, 33267, 41, + 778, 80, 84, 69, 519, 50, 49, 519, 50, 50, 519, 50, 51, 519, 50, 52, 519, + 50, 53, 519, 50, 54, 519, 50, 55, 519, 50, 56, 519, 50, 57, 519, 51, 48, + 519, 51, 49, 519, 51, 50, 519, 51, 51, 519, 51, 52, 519, 51, 53, 263, + 4352, 263, 4354, 263, 4355, 263, 4357, 263, 4358, 263, 4359, 263, 4361, + 263, 4363, 263, 4364, 263, 4366, 263, 4367, 263, 4368, 263, 4369, 263, + 4370, 519, 4352, 4449, 519, 4354, 4449, 519, 4355, 4449, 519, 4357, 4449, + 519, 4358, 4449, 519, 4359, 4449, 519, 4361, 4449, 519, 4363, 4449, 519, + 4364, 4449, 519, 4366, 4449, 519, 4367, 4449, 519, 4368, 4449, 519, 4369, + 4449, 519, 4370, 4449, 1287, 4366, 4449, 4535, 4352, 4457, 1031, 4364, + 4462, 4363, 4468, 519, 4363, 4462, 263, 19968, 263, 20108, 263, 19977, + 263, 22235, 263, 20116, 263, 20845, 263, 19971, 263, 20843, 263, 20061, + 263, 21313, 263, 26376, 263, 28779, 263, 27700, 263, 26408, 263, 37329, + 263, 22303, 263, 26085, 263, 26666, 263, 26377, 263, 31038, 263, 21517, + 263, 29305, 263, 36001, 263, 31069, 263, 21172, 263, 31192, 263, 30007, + 263, 22899, 263, 36969, 263, 20778, 263, 21360, 263, 27880, 263, 38917, + 263, 20241, 263, 20889, 263, 27491, 263, 19978, 263, 20013, 263, 19979, + 263, 24038, 263, 21491, 263, 21307, 263, 23447, 263, 23398, 263, 30435, + 263, 20225, 263, 36039, 263, 21332, 263, 22812, 519, 51, 54, 519, 51, 55, + 519, 51, 56, 519, 51, 57, 519, 52, 48, 519, 52, 49, 519, 52, 50, 519, 52, + 51, 519, 52, 52, 519, 52, 53, 519, 52, 54, 519, 52, 55, 519, 52, 56, 519, + 52, 57, 519, 53, 48, 514, 49, 26376, 514, 50, 26376, 514, 51, 26376, 514, + 52, 26376, 514, 53, 26376, 514, 54, 26376, 514, 55, 26376, 514, 56, + 26376, 514, 57, 26376, 770, 49, 48, 26376, 770, 49, 49, 26376, 770, 49, + 50, 26376, 522, 72, 103, 778, 101, 114, 103, 522, 101, 86, 778, 76, 84, + 68, 263, 12450, 263, 12452, 263, 12454, 263, 12456, 263, 12458, 263, + 12459, 263, 12461, 263, 12463, 263, 12465, 263, 12467, 263, 12469, 263, + 12471, 263, 12473, 263, 12475, 263, 12477, 263, 12479, 263, 12481, 263, + 12484, 263, 12486, 263, 12488, 263, 12490, 263, 12491, 263, 12492, 263, + 12493, 263, 12494, 263, 12495, 263, 12498, 263, 12501, 263, 12504, 263, + 12507, 263, 12510, 263, 12511, 263, 12512, 263, 12513, 263, 12514, 263, + 12516, 263, 12518, 263, 12520, 263, 12521, 263, 12522, 263, 12523, 263, + 12524, 263, 12525, 263, 12527, 263, 12528, 263, 12529, 263, 12530, 1034, + 12450, 12497, 12540, 12488, 1034, 12450, 12523, 12501, 12449, 1034, + 12450, 12531, 12506, 12450, 778, 12450, 12540, 12523, 1034, 12452, 12491, + 12531, 12464, 778, 12452, 12531, 12481, 778, 12454, 12457, 12531, 1290, + 12456, 12473, 12463, 12540, 12489, 1034, 12456, 12540, 12459, 12540, 778, + 12458, 12531, 12473, 778, 12458, 12540, 12512, 778, 12459, 12452, 12522, + 1034, 12459, 12521, 12483, 12488, 1034, 12459, 12525, 12522, 12540, 778, + 12460, 12525, 12531, 778, 12460, 12531, 12510, 522, 12462, 12460, 778, + 12462, 12491, 12540, 1034, 12461, 12517, 12522, 12540, 1034, 12462, + 12523, 12480, 12540, 522, 12461, 12525, 1290, 12461, 12525, 12464, 12521, + 12512, 1546, 12461, 12525, 12513, 12540, 12488, 12523, 1290, 12461, + 12525, 12527, 12483, 12488, 778, 12464, 12521, 12512, 1290, 12464, 12521, + 12512, 12488, 12531, 1290, 12463, 12523, 12476, 12452, 12525, 1034, + 12463, 12525, 12540, 12493, 778, 12465, 12540, 12473, 778, 12467, 12523, + 12490, 778, 12467, 12540, 12509, 1034, 12469, 12452, 12463, 12523, 1290, + 12469, 12531, 12481, 12540, 12512, 1034, 12471, 12522, 12531, 12464, 778, + 12475, 12531, 12481, 778, 12475, 12531, 12488, 778, 12480, 12540, 12473, + 522, 12487, 12471, 522, 12489, 12523, 522, 12488, 12531, 522, 12490, + 12494, 778, 12494, 12483, 12488, 778, 12495, 12452, 12484, 1290, 12497, + 12540, 12475, 12531, 12488, 778, 12497, 12540, 12484, 1034, 12496, 12540, + 12524, 12523, 1290, 12500, 12450, 12473, 12488, 12523, 778, 12500, 12463, + 12523, 522, 12500, 12467, 522, 12499, 12523, 1290, 12501, 12449, 12521, + 12483, 12489, 1034, 12501, 12451, 12540, 12488, 1290, 12502, 12483, + 12471, 12455, 12523, 778, 12501, 12521, 12531, 1290, 12504, 12463, 12479, + 12540, 12523, 522, 12506, 12477, 778, 12506, 12491, 12498, 778, 12504, + 12523, 12484, 778, 12506, 12531, 12473, 778, 12506, 12540, 12472, 778, + 12505, 12540, 12479, 1034, 12509, 12452, 12531, 12488, 778, 12508, 12523, + 12488, 522, 12507, 12531, 778, 12509, 12531, 12489, 778, 12507, 12540, + 12523, 778, 12507, 12540, 12531, 1034, 12510, 12452, 12463, 12525, 778, + 12510, 12452, 12523, 778, 12510, 12483, 12495, 778, 12510, 12523, 12463, + 1290, 12510, 12531, 12471, 12519, 12531, 1034, 12511, 12463, 12525, + 12531, 522, 12511, 12522, 1290, 12511, 12522, 12496, 12540, 12523, 522, + 12513, 12460, 1034, 12513, 12460, 12488, 12531, 1034, 12513, 12540, + 12488, 12523, 778, 12516, 12540, 12489, 778, 12516, 12540, 12523, 778, + 12518, 12450, 12531, 1034, 12522, 12483, 12488, 12523, 522, 12522, 12521, + 778, 12523, 12500, 12540, 1034, 12523, 12540, 12502, 12523, 522, 12524, + 12512, 1290, 12524, 12531, 12488, 12466, 12531, 778, 12527, 12483, 12488, + 514, 48, 28857, 514, 49, 28857, 514, 50, 28857, 514, 51, 28857, 514, 52, + 28857, 514, 53, 28857, 514, 54, 28857, 514, 55, 28857, 514, 56, 28857, + 514, 57, 28857, 770, 49, 48, 28857, 770, 49, 49, 28857, 770, 49, 50, + 28857, 770, 49, 51, 28857, 770, 49, 52, 28857, 770, 49, 53, 28857, 770, + 49, 54, 28857, 770, 49, 55, 28857, 770, 49, 56, 28857, 770, 49, 57, + 28857, 770, 50, 48, 28857, 770, 50, 49, 28857, 770, 50, 50, 28857, 770, + 50, 51, 28857, 770, 50, 52, 28857, 778, 104, 80, 97, 522, 100, 97, 522, + 65, 85, 778, 98, 97, 114, 522, 111, 86, 522, 112, 99, 522, 100, 109, 778, + 100, 109, 178, 778, 100, 109, 179, 522, 73, 85, 522, 24179, 25104, 522, + 26157, 21644, 522, 22823, 27491, 522, 26126, 27835, 1034, 26666, 24335, + 20250, 31038, 522, 112, 65, 522, 110, 65, 522, 956, 65, 522, 109, 65, + 522, 107, 65, 522, 75, 66, 522, 77, 66, 522, 71, 66, 778, 99, 97, 108, + 1034, 107, 99, 97, 108, 522, 112, 70, 522, 110, 70, 522, 956, 70, 522, + 956, 103, 522, 109, 103, 522, 107, 103, 522, 72, 122, 778, 107, 72, 122, + 778, 77, 72, 122, 778, 71, 72, 122, 778, 84, 72, 122, 522, 956, 8467, + 522, 109, 8467, 522, 100, 8467, 522, 107, 8467, 522, 102, 109, 522, 110, + 109, 522, 956, 109, 522, 109, 109, 522, 99, 109, 522, 107, 109, 778, 109, + 109, 178, 778, 99, 109, 178, 522, 109, 178, 778, 107, 109, 178, 778, 109, + 109, 179, 778, 99, 109, 179, 522, 109, 179, 778, 107, 109, 179, 778, 109, + 8725, 115, 1034, 109, 8725, 115, 178, 522, 80, 97, 778, 107, 80, 97, 778, + 77, 80, 97, 778, 71, 80, 97, 778, 114, 97, 100, 1290, 114, 97, 100, 8725, + 115, 1546, 114, 97, 100, 8725, 115, 178, 522, 112, 115, 522, 110, 115, + 522, 956, 115, 522, 109, 115, 522, 112, 86, 522, 110, 86, 522, 956, 86, + 522, 109, 86, 522, 107, 86, 522, 77, 86, 522, 112, 87, 522, 110, 87, 522, + 956, 87, 522, 109, 87, 522, 107, 87, 522, 77, 87, 522, 107, 937, 522, 77, + 937, 1034, 97, 46, 109, 46, 522, 66, 113, 522, 99, 99, 522, 99, 100, + 1034, 67, 8725, 107, 103, 778, 67, 111, 46, 522, 100, 66, 522, 71, 121, + 522, 104, 97, 522, 72, 80, 522, 105, 110, 522, 75, 75, 522, 75, 77, 522, + 107, 116, 522, 108, 109, 522, 108, 110, 778, 108, 111, 103, 522, 108, + 120, 522, 109, 98, 778, 109, 105, 108, 778, 109, 111, 108, 522, 80, 72, + 1034, 112, 46, 109, 46, 778, 80, 80, 77, 522, 80, 82, 522, 115, 114, 522, + 83, 118, 522, 87, 98, 778, 86, 8725, 109, 778, 65, 8725, 109, 514, 49, + 26085, 514, 50, 26085, 514, 51, 26085, 514, 52, 26085, 514, 53, 26085, + 514, 54, 26085, 514, 55, 26085, 514, 56, 26085, 514, 57, 26085, 770, 49, + 48, 26085, 770, 49, 49, 26085, 770, 49, 50, 26085, 770, 49, 51, 26085, + 770, 49, 52, 26085, 770, 49, 53, 26085, 770, 49, 54, 26085, 770, 49, 55, + 26085, 770, 49, 56, 26085, 770, 49, 57, 26085, 770, 50, 48, 26085, 770, + 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, 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, 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, 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, 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, @@ -3407,91 +3274,71 @@ 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, 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, 66, 266, 78, 266, 80, - 266, 83, 266, 87, 522, 72, 86, 522, 77, 86, 522, 83, 68, 522, 83, 83, - 778, 80, 80, 86, 522, 68, 74, 522, 12411, 12363, 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, 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, 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, + 262, 53, 262, 54, 262, 55, 262, 56, 262, 57, 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, @@ -3535,7 +3382,7 @@ 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 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, 7, 7, 7, 7, 7, 7, + 41, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, @@ -3543,9 +3390,8 @@ 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 43, 7, 7, 44, 45, - 46, 47, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 48, 49, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 42, 7, 7, 43, 44, + 45, 46, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, @@ -3556,7 +3402,8 @@ 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 50, 51, 52, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 47, 48, 49, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, @@ -3981,72 +3828,32 @@ 0, 3271, 0, 3273, 0, 3275, 0, 3277, 3279, 3281, 3283, 0, 3285, 3287, 3289, 0, 3291, 3293, 3295, 3297, 3299, 3301, 3303, 0, 3305, 3309, 3311, 3313, 3315, 3317, 0, 0, 0, 0, 3319, 3321, 3323, 3325, 3327, 0, 0, 0, 0, - 0, 0, 3329, 3333, 3337, 3342, 3346, 3350, 3354, 3358, 3362, 3366, 3370, - 3374, 3378, 3382, 3386, 3390, 3393, 3395, 3398, 3402, 3405, 3407, 3410, - 3414, 3419, 3422, 3424, 3427, 3431, 3433, 3435, 3437, 3439, 3441, 3444, - 3448, 3451, 3453, 3456, 3460, 3465, 3468, 3470, 3473, 3477, 3479, 3481, - 3483, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3485, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 3489, 3492, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 3495, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3498, 3501, 3504, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3507, 0, - 0, 0, 0, 3510, 0, 0, 3513, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 3516, 0, 3519, 0, 0, 0, 0, 0, 3522, 3525, 0, - 3529, 3532, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3536, 0, 0, - 3539, 0, 0, 3542, 0, 3545, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 3548, 0, 3551, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3554, - 3557, 3560, 3563, 3566, 0, 0, 3569, 3572, 0, 0, 3575, 3578, 0, 0, 0, 0, - 0, 0, 3581, 3584, 0, 0, 3587, 3590, 0, 0, 3593, 3596, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 3599, 3602, 3605, 3608, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3611, 3614, 3617, 3620, 0, 0, 0, 0, - 0, 0, 3623, 3626, 3629, 3632, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3635, - 3637, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 3639, 3641, 3643, 3645, 3647, 3649, 3651, 3653, 3655, 3657, 3660, 3663, - 3666, 3669, 3672, 3675, 3678, 3681, 3684, 3687, 3690, 3694, 3698, 3702, - 3706, 3710, 3714, 3718, 3722, 3726, 3731, 3736, 3741, 3746, 3751, 3756, - 3761, 3766, 3771, 3776, 3781, 3784, 3787, 3790, 3793, 3796, 3799, 3802, - 3805, 3808, 3812, 3816, 3820, 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, 3958, 3960, 3962, 3964, 3966, 3968, 3970, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 4062, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 4067, 4071, 4074, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 3329, 3333, 3337, 3341, 3345, 3349, 3353, 3357, 3361, + 3365, 3369, 3373, 3377, 3380, 3382, 3385, 3389, 3392, 3394, 3397, 3401, + 3406, 3409, 3411, 3414, 3418, 3420, 3422, 3424, 3426, 3428, 3431, 3435, + 3438, 3440, 3443, 3447, 3452, 3455, 3457, 3460, 3464, 3466, 3468, 3470, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 3472, 3475, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 3478, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 3481, 3484, 3487, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3490, 0, 0, 0, 0, + 3493, 0, 0, 3496, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 3499, 0, 3502, 0, 0, 0, 0, 0, 3505, 3508, 0, 3512, 3515, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3519, 0, 0, 3522, 0, 0, + 3525, 0, 3528, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 3531, 0, 3534, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3537, 3540, 3543, + 3546, 3549, 0, 0, 3552, 3555, 0, 0, 3558, 3561, 0, 0, 0, 0, 0, 0, 3564, + 3567, 0, 0, 3570, 3573, 0, 0, 3576, 3579, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 3582, 3585, 3588, 3591, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 3594, 3597, 3600, 3603, 0, 0, 0, 0, 0, 0, 3606, + 3609, 3612, 3615, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3618, 3620, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4081, 4083, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -4056,8 +3863,37 @@ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4085, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3622, 3624, 3626, + 3628, 3630, 3632, 3634, 3636, 3638, 3640, 3643, 3646, 3649, 3652, 3655, + 3658, 3661, 3664, 3667, 3670, 3673, 3677, 3681, 3685, 3689, 3693, 3697, + 3701, 3705, 3709, 3714, 3719, 3724, 3729, 3734, 3739, 3744, 3749, 3754, + 3759, 3764, 3767, 3770, 3773, 3776, 3779, 3782, 3785, 3788, 3791, 3795, + 3799, 3803, 3807, 3811, 3815, 3819, 3823, 3827, 3831, 3835, 3839, 3843, + 3847, 3851, 3855, 3859, 3863, 3867, 3871, 3875, 3879, 3883, 3887, 3891, + 3895, 3899, 3903, 3907, 3911, 3915, 3919, 3923, 3927, 3931, 3935, 3939, + 3941, 3943, 3945, 3947, 3949, 3951, 3953, 3955, 3957, 3959, 3961, 3963, + 3965, 3967, 3969, 3971, 3973, 3975, 3977, 3979, 3981, 3983, 3985, 3987, + 3989, 3991, 3993, 3995, 3997, 3999, 4001, 4003, 4005, 4007, 4009, 4011, + 4013, 4015, 4017, 4019, 4021, 4023, 4025, 4027, 4029, 4031, 4033, 4035, + 4037, 4039, 4041, 4043, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4045, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 4050, 4054, 4057, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4061, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 4064, 4066, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -4067,460 +3903,435 @@ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4068, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4087, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 4089, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4091, 4093, 4095, 4097, 4099, - 4101, 4103, 4105, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 4519, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4521, 0, 4523, 4525, 4527, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4529, 0, 4532, 0, 4535, 0, 4538, - 0, 4541, 0, 4544, 0, 4547, 0, 4550, 0, 4553, 0, 4556, 0, 4559, 0, 4562, - 0, 0, 4565, 0, 4568, 0, 4571, 0, 0, 0, 0, 0, 0, 4574, 4577, 0, 4580, - 4583, 0, 4586, 4589, 0, 4592, 4595, 0, 4598, 4601, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4604, 0, 0, 0, 0, 0, 0, - 4607, 4610, 0, 4613, 4616, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4619, 0, - 4622, 0, 4625, 0, 4628, 0, 4631, 0, 4634, 0, 4637, 0, 4640, 0, 4643, 0, - 4646, 0, 4649, 0, 4652, 0, 0, 4655, 0, 4658, 0, 4661, 0, 0, 0, 0, 0, 0, - 4664, 4667, 0, 4670, 4673, 0, 4676, 4679, 0, 4682, 4685, 0, 4688, 4691, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4694, - 0, 0, 4697, 4700, 4703, 4706, 0, 0, 0, 4709, 4712, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4715, 4717, 4719, - 4721, 4723, 4725, 4727, 4729, 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, 0, 0, 0, 4903, 4905, 4907, - 4909, 4911, 4913, 4915, 4917, 4919, 4921, 4923, 4925, 4927, 4929, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4931, - 4935, 4939, 4943, 4947, 4951, 4955, 4959, 4963, 4967, 4971, 4975, 4979, - 4983, 4987, 4992, 4997, 5002, 5007, 5012, 5017, 5022, 5027, 5032, 5037, - 5042, 5047, 5052, 5057, 5062, 5070, 0, 5077, 5081, 5085, 5089, 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, 5223, 5225, 5227, 0, 0, - 0, 0, 0, 0, 0, 0, 5229, 5233, 5236, 5239, 5242, 5245, 5248, 5251, 5254, - 5257, 5260, 5263, 5266, 5269, 5272, 5275, 5278, 5280, 5282, 5284, 5286, - 5288, 5290, 5292, 5294, 5296, 5298, 5300, 5302, 5304, 5306, 5309, 5312, - 5315, 5318, 5321, 5324, 5327, 5330, 5333, 5336, 5339, 5342, 5345, 5348, - 5354, 5359, 0, 5362, 5364, 5366, 5368, 5370, 5372, 5374, 5376, 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, 5463, 5466, 5469, 5472, 5475, 5478, 5481, - 5484, 5487, 5490, 5493, 5496, 5499, 5502, 5505, 5508, 5511, 5514, 5517, - 5520, 5523, 5526, 5529, 5532, 5536, 5540, 5544, 5547, 5551, 5554, 5558, - 5560, 5562, 5564, 5566, 5568, 5570, 5572, 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, 0, 5652, - 5657, 5662, 5667, 5671, 5676, 5680, 5684, 5690, 5695, 5699, 5703, 5707, - 5712, 5717, 5721, 5725, 5728, 5732, 5737, 5742, 5745, 5751, 5758, 5764, - 5768, 5774, 5780, 5785, 5789, 5793, 5797, 5802, 5808, 5813, 5817, 5821, - 5825, 5828, 5831, 5834, 5837, 5841, 5845, 5851, 5855, 5860, 5866, 5870, - 5873, 5876, 5882, 5887, 5893, 5897, 5903, 5906, 5910, 5914, 5918, 5922, - 5926, 5931, 5935, 5938, 5942, 5946, 5950, 5955, 5959, 5963, 5967, 5973, - 5978, 5981, 5987, 5990, 5995, 6000, 6004, 6008, 6012, 6017, 6020, 6024, - 6029, 6032, 6038, 6042, 6045, 6048, 6051, 6054, 6057, 6060, 6063, 6066, - 6069, 6072, 6076, 6080, 6084, 6088, 6092, 6096, 6100, 6104, 6108, 6112, - 6116, 6120, 6124, 6128, 6132, 6136, 6139, 6142, 6146, 6149, 6152, 6155, - 6159, 6163, 6166, 6169, 6172, 6175, 6178, 6183, 6186, 6189, 6192, 6195, - 6198, 6201, 6204, 6207, 6211, 6216, 6219, 6222, 6225, 6228, 6231, 6234, - 6237, 6241, 6245, 6249, 6253, 6256, 6259, 6262, 6265, 6268, 6271, 6274, - 6277, 6280, 6283, 6287, 6291, 6294, 6298, 6302, 6306, 6309, 6313, 6317, - 6322, 6325, 6329, 6333, 6337, 6341, 6347, 6354, 6357, 6360, 6363, 6366, - 6369, 6372, 6375, 6378, 6381, 6384, 6387, 6390, 6393, 6396, 6399, 6402, - 6405, 6408, 6413, 6416, 6419, 6422, 6427, 6431, 6434, 6437, 6440, 6443, - 6446, 6449, 6452, 6455, 6458, 6461, 6465, 6468, 6471, 6475, 6479, 6482, - 6487, 6491, 6494, 6497, 6500, 6503, 6507, 6511, 6514, 6517, 6520, 6523, - 6526, 6529, 6532, 6535, 6538, 6542, 6546, 6550, 6554, 6558, 6562, 6566, - 6570, 6574, 6578, 6582, 6586, 6590, 6594, 6598, 6602, 6606, 6610, 6614, - 6618, 6622, 6626, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 4070, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4072, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 4074, 4076, 4078, 4080, 4082, 4084, 4086, 4088, + 4090, 4092, 4094, 4096, 4098, 4100, 4102, 4104, 4106, 4108, 4110, 4112, + 4114, 4116, 4118, 4120, 4122, 4124, 4126, 4128, 4130, 4132, 4134, 4136, + 4138, 4140, 4142, 4144, 4146, 4148, 4150, 4152, 4154, 4156, 4158, 4160, + 4162, 4164, 4166, 4168, 4170, 4172, 4174, 4176, 4178, 4180, 4182, 4184, + 4186, 4188, 4190, 4192, 4194, 4196, 4198, 4200, 4202, 4204, 4206, 4208, + 4210, 4212, 4214, 4216, 4218, 4220, 4222, 4224, 4226, 4228, 4230, 4232, + 4234, 4236, 4238, 4240, 4242, 4244, 4246, 4248, 4250, 4252, 4254, 4256, + 4258, 4260, 4262, 4264, 4266, 4268, 4270, 4272, 4274, 4276, 4278, 4280, + 4282, 4284, 4286, 4288, 4290, 4292, 4294, 4296, 4298, 4300, 4302, 4304, + 4306, 4308, 4310, 4312, 4314, 4316, 4318, 4320, 4322, 4324, 4326, 4328, + 4330, 4332, 4334, 4336, 4338, 4340, 4342, 4344, 4346, 4348, 4350, 4352, + 4354, 4356, 4358, 4360, 4362, 4364, 4366, 4368, 4370, 4372, 4374, 4376, + 4378, 4380, 4382, 4384, 4386, 4388, 4390, 4392, 4394, 4396, 4398, 4400, + 4402, 4404, 4406, 4408, 4410, 4412, 4414, 4416, 4418, 4420, 4422, 4424, + 4426, 4428, 4430, 4432, 4434, 4436, 4438, 4440, 4442, 4444, 4446, 4448, + 4450, 4452, 4454, 4456, 4458, 4460, 4462, 4464, 4466, 4468, 4470, 4472, + 4474, 4476, 4478, 4480, 4482, 4484, 4486, 4488, 4490, 4492, 4494, 4496, + 4498, 4500, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4502, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 4504, 0, 4506, 4508, 4510, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 4512, 0, 4515, 0, 4518, 0, 4521, 0, 4524, 0, 4527, + 0, 4530, 0, 4533, 0, 4536, 0, 4539, 0, 4542, 0, 4545, 0, 0, 4548, 0, + 4551, 0, 4554, 0, 0, 0, 0, 0, 0, 4557, 4560, 0, 4563, 4566, 0, 4569, + 4572, 0, 4575, 4578, 0, 4581, 4584, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4587, 0, 0, 0, 0, 0, 0, 4590, 4593, 0, + 4596, 4599, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4602, 0, 4605, 0, 4608, + 0, 4611, 0, 4614, 0, 4617, 0, 4620, 0, 4623, 0, 4626, 0, 4629, 0, 4632, + 0, 4635, 0, 0, 4638, 0, 4641, 0, 4644, 0, 0, 0, 0, 0, 0, 4647, 4650, 0, + 4653, 4656, 0, 4659, 4662, 0, 4665, 4668, 0, 4671, 4674, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4677, 0, 0, 4680, + 4683, 4686, 4689, 0, 0, 0, 4692, 4695, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4698, 4700, 4702, 4704, 4706, + 4708, 4710, 4712, 4714, 4716, 4718, 4720, 4722, 4724, 4726, 4728, 4730, + 4732, 4734, 4736, 4738, 4740, 4742, 4744, 4746, 4748, 4750, 4752, 4754, + 4756, 4758, 4760, 4762, 4764, 4766, 4768, 4770, 4772, 4774, 4776, 4778, + 4780, 4782, 4784, 4786, 4788, 4790, 4792, 4794, 4796, 4798, 4800, 4802, + 4804, 4806, 4808, 4810, 4812, 4814, 4816, 4818, 4820, 4822, 4824, 4826, + 4828, 4830, 4832, 4834, 4836, 4838, 4840, 4842, 4844, 4846, 4848, 4850, + 4852, 4854, 4856, 4858, 4860, 4862, 4864, 4866, 4868, 4870, 4872, 4874, + 4876, 4878, 4880, 4882, 4884, 0, 0, 0, 4886, 4888, 4890, 4892, 4894, + 4896, 4898, 4900, 4902, 4904, 4906, 4908, 4910, 4912, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4914, 4918, 4922, + 4926, 4930, 4934, 4938, 4942, 4946, 4950, 4954, 4958, 4962, 4966, 4970, + 4975, 4980, 4985, 4990, 4995, 5000, 5005, 5010, 5015, 5020, 5025, 5030, + 5035, 5040, 5045, 5053, 0, 5060, 5064, 5068, 5072, 5076, 5080, 5084, + 5088, 5092, 5096, 5100, 5104, 5108, 5112, 5116, 5120, 5124, 5128, 5132, + 5136, 5140, 5144, 5148, 5152, 5156, 5160, 5164, 5168, 5172, 5176, 5180, + 5184, 5188, 5192, 5196, 5200, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5204, + 5208, 5211, 5214, 5217, 5220, 5223, 5226, 5229, 5232, 5235, 5238, 5241, + 5244, 5247, 5250, 5253, 5255, 5257, 5259, 5261, 5263, 5265, 5267, 5269, + 5271, 5273, 5275, 5277, 5279, 5281, 5284, 5287, 5290, 5293, 5296, 5299, + 5302, 5305, 5308, 5311, 5314, 5317, 5320, 5323, 5329, 5334, 0, 5337, + 5339, 5341, 5343, 5345, 5347, 5349, 5351, 5353, 5355, 5357, 5359, 5361, + 5363, 5365, 5367, 5369, 5371, 5373, 5375, 5377, 5379, 5381, 5383, 5385, + 5387, 5389, 5391, 5393, 5395, 5397, 5399, 5401, 5403, 5405, 5407, 5409, + 5411, 5413, 5415, 5417, 5419, 5421, 5423, 5425, 5427, 5429, 5431, 5433, + 5435, 5438, 5441, 5444, 5447, 5450, 5453, 5456, 5459, 5462, 5465, 5468, + 5471, 5474, 5477, 5480, 5483, 5486, 5489, 5492, 5495, 5498, 5501, 5504, + 5507, 5511, 5515, 5519, 5522, 5526, 5529, 5533, 5535, 5537, 5539, 5541, + 5543, 5545, 5547, 5549, 5551, 5553, 5555, 5557, 5559, 5561, 5563, 5565, + 5567, 5569, 5571, 5573, 5575, 5577, 5579, 5581, 5583, 5585, 5587, 5589, + 5591, 5593, 5595, 5597, 5599, 5601, 5603, 5605, 5607, 5609, 5611, 5613, + 5615, 5617, 5619, 5621, 5623, 5625, 0, 5627, 5632, 5637, 5642, 5646, + 5651, 5655, 5659, 5665, 5670, 5674, 5678, 5682, 5687, 5692, 5696, 5700, + 5703, 5707, 5712, 5717, 5720, 5726, 5733, 5739, 5743, 5749, 5755, 5760, + 5764, 5768, 5772, 5777, 5783, 5788, 5792, 5796, 5800, 5803, 5806, 5809, + 5812, 5816, 5820, 5826, 5830, 5835, 5841, 5845, 5848, 5851, 5857, 5862, + 5868, 5872, 5878, 5881, 5885, 5889, 5893, 5897, 5901, 5906, 5910, 5913, + 5917, 5921, 5925, 5930, 5934, 5938, 5942, 5948, 5953, 5956, 5962, 5965, + 5970, 5975, 5979, 5983, 5987, 5992, 5995, 5999, 6004, 6007, 6013, 6017, + 6020, 6023, 6026, 6029, 6032, 6035, 6038, 6041, 6044, 6047, 6051, 6055, + 6059, 6063, 6067, 6071, 6075, 6079, 6083, 6087, 6091, 6095, 6099, 6103, + 6107, 6111, 6114, 6117, 6121, 6124, 6127, 6130, 6134, 6138, 6141, 6144, + 6147, 6150, 6153, 6158, 6161, 6164, 6167, 6170, 6173, 6176, 6179, 6182, + 6186, 6191, 6194, 6197, 6200, 6203, 6206, 6209, 6212, 6216, 6220, 6224, + 6228, 6231, 6234, 6237, 6240, 6243, 6246, 6249, 6252, 6255, 6258, 6262, + 6266, 6269, 6273, 6277, 6281, 6284, 6288, 6292, 6297, 6300, 6304, 6308, + 6312, 6316, 6322, 6329, 6332, 6335, 6338, 6341, 6344, 6347, 6350, 6353, + 6356, 6359, 6362, 6365, 6368, 6371, 6374, 6377, 6380, 6383, 6388, 6391, + 6394, 6397, 6402, 6406, 6409, 6412, 6415, 6418, 6421, 6424, 6427, 6430, + 6433, 6436, 6440, 6443, 6446, 6450, 6454, 6457, 6462, 6466, 6469, 6472, + 6475, 6478, 6482, 6486, 6489, 6492, 6495, 6498, 6501, 6504, 6507, 6510, + 6513, 6517, 6521, 6525, 6529, 6533, 6537, 6541, 6545, 6549, 6553, 6557, + 6561, 6565, 6569, 6573, 6577, 6581, 6585, 6589, 6593, 6597, 6601, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6605, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6607, 6609, 6611, 6613, + 6615, 6617, 6619, 6621, 6623, 6625, 6627, 6629, 6631, 6633, 6635, 6637, + 6639, 6641, 6643, 6645, 6647, 6649, 6651, 6653, 6655, 6657, 6659, 6661, + 6663, 6665, 6667, 6669, 6671, 6673, 6675, 6677, 6679, 6681, 6683, 6685, + 6687, 6689, 6691, 6693, 6695, 6697, 6699, 6701, 6703, 6705, 6707, 6709, + 6711, 6713, 6715, 6717, 6719, 6721, 6723, 6725, 6727, 6729, 6731, 6733, + 6735, 6737, 6739, 6741, 6743, 6745, 6747, 6749, 6751, 6753, 6755, 6757, + 6759, 6761, 6763, 6765, 6767, 6769, 6771, 6773, 6775, 6777, 6779, 6781, + 6783, 6785, 6787, 6789, 6791, 6793, 6795, 6797, 6799, 6801, 6803, 6805, + 6807, 6809, 6811, 6813, 6815, 6817, 6819, 6821, 6823, 6825, 6827, 6829, + 6831, 6833, 6835, 6837, 6839, 6841, 6843, 6845, 6847, 6849, 6851, 6853, + 6855, 6857, 6859, 6861, 6863, 6865, 6867, 6869, 6871, 6873, 6875, 6877, + 6879, 6881, 6883, 6885, 6887, 6889, 6891, 6893, 6895, 6897, 6899, 6901, + 6903, 6905, 6907, 6909, 6911, 6913, 6915, 6917, 6919, 6921, 6923, 6925, + 6927, 6929, 6931, 6933, 6935, 6937, 6939, 6941, 6943, 6945, 6947, 6949, + 6951, 6953, 6955, 6957, 6959, 6961, 6963, 6965, 6967, 6969, 6971, 6973, + 6975, 6977, 6979, 6981, 6983, 6985, 6987, 6989, 6991, 6993, 6995, 6997, + 6999, 7001, 7003, 7005, 7007, 7009, 7011, 7013, 7015, 7017, 7019, 7021, + 7023, 7025, 7027, 7029, 7031, 7033, 7035, 7037, 7039, 7041, 7043, 7045, + 7047, 7049, 7051, 7053, 7055, 7057, 7059, 7061, 7063, 7065, 7067, 7069, + 7071, 7073, 7075, 7077, 7079, 7081, 7083, 7085, 7087, 7089, 7091, 7093, + 7095, 7097, 7099, 7101, 7103, 7105, 7107, 7109, 7111, 7113, 7115, 7117, + 7119, 7121, 7123, 7125, 7127, 7129, 7131, 7133, 7135, 7137, 7139, 7141, + 7143, 7145, 0, 0, 7147, 0, 7149, 0, 0, 7151, 7153, 7155, 7157, 7159, + 7161, 7163, 7165, 7167, 7169, 0, 7171, 0, 7173, 0, 0, 7175, 7177, 0, 0, + 0, 7179, 7181, 7183, 7185, 0, 0, 7187, 7189, 7191, 7193, 7195, 7197, + 7199, 7201, 7203, 7205, 7207, 7209, 7211, 7213, 7215, 7217, 7219, 7221, + 7223, 7225, 7227, 7229, 7231, 7233, 7235, 7237, 7239, 7241, 7243, 7245, + 7247, 7249, 7251, 7253, 7255, 7257, 7259, 7261, 7263, 7265, 7267, 7269, + 7271, 7273, 7275, 7277, 7279, 7281, 7283, 7285, 7287, 7289, 7291, 7293, + 7295, 7297, 7299, 7301, 7303, 0, 0, 0, 0, 0, 7305, 7307, 7309, 7311, + 7313, 7315, 7317, 7319, 7321, 7323, 7325, 7327, 7329, 7331, 7333, 7335, + 7337, 7339, 7341, 7343, 7345, 7347, 7349, 7351, 7353, 7355, 7357, 7359, + 7361, 7363, 7365, 7367, 7369, 7371, 7373, 7375, 7377, 7379, 7381, 7383, + 7385, 7387, 7389, 7391, 7393, 7395, 7397, 7399, 7401, 7403, 7405, 7407, + 7409, 7411, 7413, 7415, 7417, 7419, 7421, 7423, 7425, 7427, 7429, 7431, + 7433, 7435, 7437, 7439, 7441, 7443, 7445, 7447, 7449, 7451, 7453, 7455, + 7457, 7459, 7461, 7463, 7465, 7467, 7469, 7471, 7473, 7475, 7477, 7479, + 7481, 7483, 7485, 7487, 7489, 7491, 7493, 7495, 7497, 7499, 7501, 7503, + 7505, 7507, 7509, 7511, 7513, 7515, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 7517, 7520, 7523, 7526, 7530, 7534, 7537, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 7540, 7543, 7546, 7549, 7552, 0, 0, 0, 0, 0, 7555, 0, 7558, + 7561, 7563, 7565, 7567, 7569, 7571, 7573, 7575, 7577, 7579, 7581, 7584, + 7587, 7590, 7593, 7596, 7599, 7602, 7605, 7608, 7611, 7614, 7617, 0, + 7620, 7623, 7626, 7629, 7632, 0, 7635, 0, 7638, 7641, 0, 7644, 7647, 0, + 7650, 7653, 7656, 7659, 7662, 7665, 7668, 7671, 7674, 7677, 7680, 7682, + 7684, 7686, 7688, 7690, 7692, 7694, 7696, 7698, 7700, 7702, 7704, 7706, + 7708, 7710, 7712, 7714, 7716, 7718, 7720, 7722, 7724, 7726, 7728, 7730, + 7732, 7734, 7736, 7738, 7740, 7742, 7744, 7746, 7748, 7750, 7752, 7754, + 7756, 7758, 7760, 7762, 7764, 7766, 7768, 7770, 7772, 7774, 7776, 7778, + 7780, 7782, 7784, 7786, 7788, 7790, 7792, 7794, 7796, 7798, 7800, 7802, + 7804, 7806, 7808, 7810, 7812, 7814, 7816, 7818, 7820, 7822, 7824, 7826, + 7828, 7830, 7832, 7834, 7836, 7838, 7840, 7842, 7844, 7846, 7848, 7850, + 7852, 7854, 7856, 7858, 7860, 7862, 7864, 7866, 7868, 7870, 7872, 7874, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 7876, 7878, 7880, 7882, 7884, 7886, 7888, + 7890, 7892, 7894, 7896, 7898, 7900, 7902, 7904, 7906, 7908, 7910, 7912, + 7914, 7916, 7918, 7920, 7922, 7925, 7928, 7931, 7934, 7937, 7940, 7943, + 7946, 7949, 7952, 7955, 7958, 7961, 7964, 7967, 7970, 7973, 7976, 7978, + 7980, 7982, 7984, 7987, 7990, 7993, 7996, 7999, 8002, 8005, 8008, 8011, + 8014, 8017, 8020, 8023, 8026, 8029, 8032, 8035, 8038, 8041, 8044, 8047, + 8050, 8053, 8056, 8059, 8062, 8065, 8068, 8071, 8074, 8077, 8080, 8083, + 8086, 8089, 8092, 8095, 8098, 8101, 8104, 8107, 8110, 8113, 8116, 8119, + 8122, 8125, 8128, 8131, 8134, 8137, 8140, 8143, 8146, 8149, 8152, 8155, + 8158, 8161, 8164, 8167, 8170, 8173, 8176, 8179, 8182, 8185, 8188, 8191, + 8194, 8197, 8200, 8203, 8206, 8209, 8212, 8215, 8218, 8221, 8224, 8227, + 8230, 8233, 8236, 8239, 8242, 8245, 8248, 8251, 8254, 8257, 8260, 8263, + 8266, 8270, 8274, 8278, 8282, 8286, 8290, 8293, 8296, 8299, 8302, 8305, + 8308, 8311, 8314, 8317, 8320, 8323, 8326, 8329, 8332, 8335, 8338, 8341, + 8344, 8347, 8350, 8353, 8356, 8359, 8362, 8365, 8368, 8371, 8374, 8377, + 8380, 8383, 8386, 8389, 8392, 8395, 8398, 8401, 8404, 8407, 8410, 8413, + 8416, 8419, 8422, 8425, 8428, 8431, 8434, 8437, 8440, 8443, 8446, 8449, + 8452, 8455, 8458, 8461, 8464, 8467, 8470, 8473, 8476, 8479, 8482, 8485, + 8488, 8491, 8494, 8497, 8500, 8503, 8506, 8509, 8512, 8515, 8518, 8521, + 8524, 8527, 8530, 8533, 8536, 8539, 8542, 8545, 8548, 8551, 8554, 8557, + 8560, 8563, 8566, 8569, 8572, 8575, 8578, 8581, 8584, 8587, 8590, 8593, + 8596, 8599, 8602, 8605, 8608, 8611, 8614, 8617, 8620, 8623, 8626, 8629, + 8632, 8635, 8638, 8641, 8644, 8647, 8650, 8653, 8656, 8659, 8662, 8665, + 8668, 8671, 8674, 8677, 8680, 8683, 8686, 8689, 8692, 8695, 8698, 8701, + 8704, 8707, 8710, 8713, 8716, 8720, 8724, 8728, 8731, 8734, 8737, 8740, + 8743, 8746, 8749, 8752, 8755, 8758, 8761, 8764, 8767, 8770, 8773, 8776, + 8779, 8782, 8785, 8788, 8791, 8794, 8797, 8800, 8803, 8806, 8809, 8812, + 8815, 8818, 8821, 8824, 8827, 8830, 8833, 8836, 8839, 8842, 8845, 8848, + 8851, 8854, 8857, 8860, 8863, 8866, 8869, 8872, 8875, 8878, 8881, 8884, + 8887, 8890, 8893, 8896, 8899, 8902, 8905, 8908, 8911, 8914, 8917, 8920, + 8923, 8926, 8929, 8932, 8935, 8938, 8941, 8944, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8947, 8951, 8955, 8959, 8963, 8967, 8971, + 8975, 8979, 8983, 8987, 8991, 8995, 8999, 9003, 9007, 9011, 9015, 9019, + 9023, 9027, 9031, 9035, 9039, 9043, 9047, 9051, 9055, 9059, 9063, 9067, + 9071, 9075, 9079, 9083, 9087, 9091, 9095, 9099, 9103, 9107, 9111, 9115, + 9119, 9123, 9127, 9131, 9135, 9139, 9143, 9147, 9151, 9155, 9159, 9163, + 9167, 9171, 9175, 9179, 9183, 9187, 9191, 9195, 9199, 0, 0, 9203, 9207, + 9211, 9215, 9219, 9223, 9227, 9231, 9235, 9239, 9243, 9247, 9251, 9255, + 9259, 9263, 9267, 9271, 9275, 9279, 9283, 9287, 9291, 9295, 9299, 9303, + 9307, 9311, 9315, 9319, 9323, 9327, 9331, 9335, 9339, 9343, 9347, 9351, + 9355, 9359, 9363, 9367, 9371, 9375, 9379, 9383, 9387, 9391, 9395, 9399, + 9403, 9407, 9411, 9415, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 9419, 9423, 9427, 9432, 9437, 9442, 9447, 9452, 9457, 9462, 9466, 9485, + 9494, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9499, + 9501, 9503, 9505, 9507, 9509, 9511, 9513, 9515, 9517, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9519, 9521, 9523, 9525, + 9527, 9529, 9531, 9533, 9535, 9537, 9539, 9541, 9543, 9545, 9547, 9549, + 9551, 9553, 9555, 9557, 9559, 0, 0, 9561, 9563, 9565, 9567, 9569, 9571, + 9573, 9575, 9577, 9579, 9581, 9583, 0, 9585, 9587, 9589, 9591, 9593, + 9595, 9597, 9599, 9601, 9603, 9605, 9607, 9609, 9611, 9613, 9615, 9617, + 9619, 9621, 0, 9623, 9625, 9627, 9629, 0, 0, 0, 0, 9631, 9634, 9637, 0, + 9640, 0, 9643, 9646, 9649, 9652, 9655, 9658, 9661, 9664, 9667, 9670, + 9673, 9675, 9677, 9679, 9681, 9683, 9685, 9687, 9689, 9691, 9693, 9695, + 9697, 9699, 9701, 9703, 9705, 9707, 9709, 9711, 9713, 9715, 9717, 9719, + 9721, 9723, 9725, 9727, 9729, 9731, 9733, 9735, 9737, 9739, 9741, 9743, + 9745, 9747, 9749, 9751, 9753, 9755, 9757, 9759, 9761, 9763, 9765, 9767, + 9769, 9771, 9773, 9775, 9777, 9779, 9781, 9783, 9785, 9787, 9789, 9791, + 9793, 9795, 9797, 9799, 9801, 9803, 9805, 9807, 9809, 9811, 9813, 9815, + 9817, 9819, 9821, 9823, 9825, 9827, 9829, 9831, 9833, 9835, 9837, 9839, + 9841, 9843, 9845, 9847, 9849, 9851, 9853, 9855, 9857, 9859, 9861, 9863, + 9865, 9867, 9869, 9871, 9873, 9875, 9877, 9879, 9881, 9883, 9885, 9887, + 9889, 9891, 9893, 9895, 9897, 9899, 9901, 9903, 9905, 9907, 9910, 9913, + 9916, 9919, 9922, 9925, 9928, 0, 0, 0, 0, 9931, 9933, 9935, 9937, 9939, + 9941, 9943, 9945, 9947, 9949, 9951, 9953, 9955, 9957, 9959, 9961, 9963, + 9965, 9967, 9969, 9971, 9973, 9975, 9977, 9979, 9981, 9983, 9985, 9987, + 9989, 9991, 9993, 9995, 9997, 9999, 10001, 10003, 10005, 10007, 10009, + 10011, 10013, 10015, 10017, 10019, 10021, 10023, 10025, 10027, 10029, + 10031, 10033, 10035, 10037, 10039, 10041, 10043, 10045, 10047, 10049, + 10051, 10053, 10055, 10057, 10059, 10061, 10063, 10065, 10067, 10069, + 10071, 10073, 10075, 10077, 10079, 10081, 10083, 10085, 10087, 10089, + 10091, 10093, 10095, 10097, 10099, 10101, 10103, 10105, 10107, 10109, + 10111, 10113, 10115, 10117, 10119, 10121, 10123, 10125, 10127, 10129, + 10131, 10133, 10135, 10137, 10139, 10141, 10143, 10145, 10147, 10149, + 10151, 10153, 10155, 10157, 10159, 10161, 10163, 10165, 10167, 10169, + 10171, 10173, 10175, 10177, 10179, 10181, 10183, 10185, 10187, 10189, + 10191, 10193, 10195, 10197, 10199, 10201, 10203, 10205, 10207, 10209, + 10211, 10213, 10215, 10217, 10219, 10221, 10223, 10225, 10227, 10229, + 10231, 10233, 10235, 10237, 10239, 10241, 10243, 10245, 10247, 10249, + 10251, 10253, 10255, 10257, 10259, 10261, 10263, 10265, 10267, 10269, + 10271, 10273, 10275, 10277, 10279, 10281, 10283, 10285, 10287, 10289, + 10291, 10293, 10295, 10297, 10299, 10301, 10303, 10305, 10307, 10309, 0, + 0, 0, 10311, 10313, 10315, 10317, 10319, 10321, 0, 0, 10323, 10325, + 10327, 10329, 10331, 10333, 0, 0, 10335, 10337, 10339, 10341, 10343, + 10345, 0, 0, 10347, 10349, 10351, 0, 0, 0, 10353, 10355, 10357, 10359, + 10361, 10363, 10365, 0, 10367, 10369, 10371, 10373, 10375, 10377, 10379, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10381, 10384, 10387, 10390, + 10393, 10396, 10399, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10402, + 10405, 10408, 10411, 10414, 10417, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 10420, 10422, 10424, 10426, 10428, 10430, 10432, 10434, 10436, + 10438, 10440, 10442, 10444, 10446, 10448, 10450, 10452, 10454, 10456, + 10458, 10460, 10462, 10464, 10466, 10468, 10470, 10472, 10474, 10476, + 10478, 10480, 10482, 10484, 10486, 10488, 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, 0, 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, 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, 0, 10732, 10734, 0, 0, + 10736, 0, 0, 10738, 10740, 0, 0, 10742, 10744, 10746, 10748, 0, 10750, + 10752, 10754, 10756, 10758, 10760, 10762, 10764, 10766, 10768, 10770, + 10772, 0, 10774, 0, 10776, 10778, 10780, 10782, 10784, 10786, 10788, 0, + 10790, 10792, 10794, 10796, 10798, 10800, 10802, 10804, 10806, 10808, + 10810, 10812, 10814, 10816, 10818, 10820, 10822, 10824, 10826, 10828, + 10830, 10832, 10834, 10836, 10838, 10840, 10842, 10844, 10846, 10848, + 10850, 10852, 10854, 10856, 10858, 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, 0, 10920, 10922, 10924, 10926, 0, 0, + 10928, 10930, 10932, 10934, 10936, 10938, 10940, 10942, 0, 10944, 10946, + 10948, 10950, 10952, 10954, 10956, 0, 10958, 10960, 10962, 10964, 10966, + 10968, 10970, 10972, 10974, 10976, 10978, 10980, 10982, 10984, 10986, + 10988, 10990, 10992, 10994, 10996, 10998, 11000, 11002, 11004, 11006, + 11008, 11010, 11012, 0, 11014, 11016, 11018, 11020, 0, 11022, 11024, + 11026, 11028, 11030, 0, 11032, 0, 0, 0, 11034, 11036, 11038, 11040, + 11042, 11044, 11046, 0, 11048, 11050, 11052, 11054, 11056, 11058, 11060, + 11062, 11064, 11066, 11068, 11070, 11072, 11074, 11076, 11078, 11080, + 11082, 11084, 11086, 11088, 11090, 11092, 11094, 11096, 11098, 11100, + 11102, 11104, 11106, 11108, 11110, 11112, 11114, 11116, 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, 0, 0, 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, 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, 0, 0, 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, 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, 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, 12544, 12546, 12548, 12550, 12552, 12554, 12556, + 12558, 12560, 12562, 12564, 12566, 12568, 12570, 12572, 12574, 12576, + 12578, 12580, 12582, 12584, 12586, 12588, 12590, 12592, 12594, 12596, + 12598, 12600, 12602, 12604, 12606, 12608, 12610, 12612, 12614, 12616, + 12618, 12620, 12622, 12624, 12626, 12628, 12630, 12632, 12634, 12636, + 12638, 12640, 12642, 12644, 12646, 12648, 12650, 12652, 12654, 12656, + 12658, 12660, 12662, 12664, 12666, 12668, 12670, 12672, 12674, 12676, + 12678, 12680, 12682, 12684, 12686, 12688, 12690, 12692, 12694, 12696, + 12698, 12700, 12702, 12704, 12706, 12708, 12710, 12712, 12714, 12716, + 12718, 12720, 12722, 12724, 12726, 12728, 12730, 12732, 12734, 12736, + 12738, 12740, 12742, 12744, 12746, 12748, 12750, 12752, 12754, 12756, + 12758, 12760, 12762, 12764, 12766, 12768, 12770, 12772, 12774, 12776, + 12778, 12780, 12782, 12784, 12786, 12788, 12790, 12792, 12794, 12796, + 12798, 12800, 12802, 12804, 12806, 12808, 12810, 12812, 12814, 12816, + 12818, 12820, 12822, 12824, 12826, 12828, 12830, 12832, 12834, 12836, + 12838, 12840, 12842, 12844, 12846, 12848, 12850, 12852, 12854, 12856, + 12858, 12860, 12862, 12864, 12866, 12868, 12870, 12872, 12874, 12876, + 12878, 12880, 12882, 12884, 12886, 12888, 12890, 12892, 12894, 12896, + 12898, 12900, 12902, 12904, 12906, 12908, 12910, 12912, 12914, 12916, + 12918, 12920, 12922, 12924, 12926, 12928, 12930, 12932, 12934, 12936, + 12938, 12940, 12942, 12944, 12946, 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, 13002, 13004, 13006, 13008, 13010, 13012, 13014, 13016, + 13018, 13020, 13022, 13024, 13026, 13028, 13030, 13032, 13034, 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, 13122, 13124, 13126, 13128, 13130, 13132, 13134, 13136, + 13138, 13140, 13142, 13144, 13146, 13148, 13150, 13152, 13154, 13156, + 13158, 13160, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6630, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 6632, 6634, 6636, 6638, 6640, 6642, 6644, 6646, 6648, 6650, 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, 0, 0, 7172, 0, 7174, 0, 0, 7176, - 7178, 7180, 7182, 7184, 7186, 7188, 7190, 7192, 7194, 0, 7196, 0, 7198, - 0, 0, 7200, 7202, 0, 0, 0, 7204, 7206, 7208, 7210, 0, 0, 7212, 7214, - 7216, 7218, 7220, 7222, 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, - 0, 0, 7336, 7338, 7340, 7342, 7344, 7346, 7348, 7350, 7352, 7354, 7356, - 7358, 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, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7548, 7551, 7554, 7557, 7561, 7565, - 7568, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7571, 7574, 7577, 7580, 7583, - 0, 0, 0, 0, 0, 7586, 0, 7589, 7592, 7594, 7596, 7598, 7600, 7602, 7604, - 7606, 7608, 7610, 7612, 7615, 7618, 7621, 7624, 7627, 7630, 7633, 7636, - 7639, 7642, 7645, 7648, 0, 7651, 7654, 7657, 7660, 7663, 0, 7666, 0, - 7669, 7672, 0, 7675, 7678, 0, 7681, 7684, 7687, 7690, 7693, 7696, 7699, - 7702, 7705, 7708, 7711, 7713, 7715, 7717, 7719, 7721, 7723, 7725, 7727, - 7729, 7731, 7733, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7907, 7909, - 7911, 7913, 7915, 7917, 7919, 7921, 7923, 7925, 7927, 7929, 7931, 7933, - 7935, 7937, 7939, 7941, 7943, 7945, 7947, 7949, 7951, 7953, 7956, 7959, - 7962, 7965, 7968, 7971, 7974, 7977, 7980, 7983, 7986, 7989, 7992, 7995, - 7998, 8001, 8004, 8007, 8009, 8011, 8013, 8015, 8018, 8021, 8024, 8027, - 8030, 8033, 8036, 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, 8301, 8305, 8309, 8313, 8317, 8321, - 8324, 8327, 8330, 8333, 8336, 8339, 8342, 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, 8751, 8755, - 8759, 8762, 8765, 8768, 8771, 8774, 8777, 8780, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8978, 8982, - 8986, 8990, 8994, 8998, 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, 0, 0, 9234, 9238, 9242, 9246, 9250, 9254, 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, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9450, 9454, 9458, 9463, 9468, 9473, 9478, - 9483, 9488, 9493, 9497, 9516, 9525, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 9530, 9532, 9534, 9536, 9538, 9540, 9542, 9544, - 9546, 9548, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 9550, 9552, 9554, 9556, 9558, 9560, 9562, 9564, 9566, 9568, 9570, - 9572, 9574, 9576, 9578, 9580, 9582, 9584, 9586, 9588, 9590, 0, 0, 9592, - 9594, 9596, 9598, 9600, 9602, 9604, 9606, 9608, 9610, 9612, 9614, 0, - 9616, 9618, 9620, 9622, 9624, 9626, 9628, 9630, 9632, 9634, 9636, 9638, - 9640, 9642, 9644, 9646, 9648, 9650, 9652, 0, 9654, 9656, 9658, 9660, 0, - 0, 0, 0, 9662, 9665, 9668, 0, 9671, 0, 9674, 9677, 9680, 9683, 9686, - 9689, 9692, 9695, 9698, 9701, 9704, 9706, 9708, 9710, 9712, 9714, 9716, - 9718, 9720, 9722, 9724, 9726, 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, 9941, 9944, 9947, 9950, 9953, 9956, 9959, 0, 0, 0, 0, - 9962, 9964, 9966, 9968, 9970, 9972, 9974, 9976, 9978, 9980, 9982, 9984, - 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, 0, 0, 0, 10342, 10344, - 10346, 10348, 10350, 10352, 0, 0, 10354, 10356, 10358, 10360, 10362, - 10364, 0, 0, 10366, 10368, 10370, 10372, 10374, 10376, 0, 0, 10378, - 10380, 10382, 0, 0, 0, 10384, 10386, 10388, 10390, 10392, 10394, 10396, - 0, 10398, 10400, 10402, 10404, 10406, 10408, 10410, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10412, 0, - 10415, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10418, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 10421, 10424, 10427, 10430, 10433, 10436, 10439, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10442, 10445, 10448, 10451, 10454, 10457, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10460, 10462, 10464, 10466, - 10468, 10470, 10472, 10474, 10476, 10478, 10480, 10482, 10484, 10486, - 10488, 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, 0, 10630, 10632, 10634, 10636, 10638, 10640, 10642, 10644, 10646, - 10648, 10650, 10652, 10654, 10656, 10658, 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, 0, 10772, 10774, 0, 0, 10776, 0, 0, 10778, 10780, 0, 0, - 10782, 10784, 10786, 10788, 0, 10790, 10792, 10794, 10796, 10798, 10800, - 10802, 10804, 10806, 10808, 10810, 10812, 0, 10814, 0, 10816, 10818, - 10820, 10822, 10824, 10826, 10828, 0, 10830, 10832, 10834, 10836, 10838, - 10840, 10842, 10844, 10846, 10848, 10850, 10852, 10854, 10856, 10858, - 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, 0, - 10960, 10962, 10964, 10966, 0, 0, 10968, 10970, 10972, 10974, 10976, - 10978, 10980, 10982, 0, 10984, 10986, 10988, 10990, 10992, 10994, 10996, - 0, 10998, 11000, 11002, 11004, 11006, 11008, 11010, 11012, 11014, 11016, - 11018, 11020, 11022, 11024, 11026, 11028, 11030, 11032, 11034, 11036, - 11038, 11040, 11042, 11044, 11046, 11048, 11050, 11052, 0, 11054, 11056, - 11058, 11060, 0, 11062, 11064, 11066, 11068, 11070, 0, 11072, 0, 0, 0, - 11074, 11076, 11078, 11080, 11082, 11084, 11086, 0, 11088, 11090, 11092, - 11094, 11096, 11098, 11100, 11102, 11104, 11106, 11108, 11110, 11112, - 11114, 11116, 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, 0, 0, 11768, 11770, - 11772, 11774, 11776, 11778, 11780, 11782, 11784, 11786, 11788, 11790, - 11792, 11794, 11796, 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, 0, - 0, 12352, 12354, 12356, 12358, 12360, 12362, 12364, 12366, 12368, 12370, - 12372, 12374, 12376, 12378, 12380, 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, 12455, 12458, 12461, 12464, 12467, 12470, 12473, 12476, 12479, - 12482, 0, 0, 0, 0, 0, 12485, 12489, 12493, 12497, 12501, 12505, 12509, - 12513, 12517, 12521, 12525, 12529, 12533, 12537, 12541, 12545, 12549, - 12553, 12557, 12561, 12565, 12569, 12573, 12577, 12581, 12585, 12589, - 12593, 12595, 12597, 12600, 0, 0, 12603, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 12605, 0, 12607, 0, 0, 12609, 0, 0, 0, 12611, 0, 0, 0, 12613, 12616, - 12619, 12622, 12625, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 12629, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12632, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12635, 12637, 12639, 12641, 12643, 12645, - 12647, 12649, 12651, 12653, 12655, 12657, 12659, 12661, 12663, 12665, - 12667, 12669, 12671, 12673, 12675, 12677, 12679, 12681, 12683, 12685, - 12687, 12689, 12691, 12693, 12695, 12697, 12699, 12701, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 12703, 12707, 12711, 12715, 12719, 12723, 12727, - 12731, 12735, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12739, 12741, - 12743, 12745, 12747, 12749, 12751, 12753, 12755, 12757, 12759, 12761, - 12763, 12765, 12767, 12769, 12771, 12773, 12775, 12777, 12779, 12781, - 12783, 12785, 12787, 12789, 12791, 12793, 12795, 12797, 12799, 12801, - 12803, 12805, 12807, 12809, 12811, 12813, 12815, 12817, 12819, 12821, - 12823, 12825, 12827, 12829, 12831, 12833, 12835, 12837, 12839, 12841, - 12843, 12845, 12847, 12849, 12851, 12853, 12855, 12857, 12859, 12861, - 12863, 12865, 12867, 12869, 12871, 12873, 12875, 12877, 12879, 12881, - 12883, 12885, 12887, 12889, 12891, 12893, 12895, 12897, 12899, 12901, - 12903, 12905, 12907, 12909, 12911, 12913, 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, 12969, 12971, 12973, 12975, 12977, 12979, 12981, - 12983, 12985, 12987, 12989, 12991, 12993, 12995, 12997, 12999, 13001, - 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, 13089, 13091, 13093, 13095, 13097, 13099, 13101, - 13103, 13105, 13107, 13109, 13111, 13113, 13115, 13117, 13119, 13121, - 13123, 13125, 13127, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -4528,392 +4339,352 @@ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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 +#define COMP_SHIFT 3 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, 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, 19, 20, 21, 22, 0, 0, 0, - 0, 0, 0, 23, 24, 25, 26, 27, 28, 29, 0, 0, 0, 0, 0, 0, 0, 0, 30, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 31, 32, 33, 0, 0, 34, 0, 0, 0, 0, 0, 0, 0, 0, - 35, 36, 37, 38, 39, 40, 0, 0, 0, 0, 0, 0, 0, 41, 42, 43, 44, 45, 46, 47, - 0, 0, 0, 0, 0, 0, 0, 48, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 49, 0, - 50, 0, 51, 52, 53, 0, 0, 0, 0, 0, 0, 54, 0, 0, 55, 56, 57, 58, 59, 0, 0, - 0, 0, 0, 0, 60, 61, 0, 0, 62, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 64, 65, 0, - 66, 67, 68, 0, 0, 0, 0, 0, 0, 69, 70, 71, 72, 73, 74, 75, 0, 0, 0, 0, 0, - 0, 0, 76, 0, 77, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 78, 79, 0, 80, 81, 82, - 83, 0, 0, 0, 0, 0, 0, 0, 84, 85, 86, 0, 87, 88, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 89, 90, 0, 91, 92, 93, 0, 0, 0, 0, 0, 0, 94, 95, 96, 97, 98, 99, 100, - 0, 0, 0, 0, 0, 0, 0, 0, 101, 0, 0, 102, 0, 0, 0, 0, 0, 0, 0, 0, 0, 103, - 104, 0, 0, 105, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 106, 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, 111, 112, - 0, 113, 114, 0, 115, 0, 0, 0, 0, 0, 0, 0, 116, 117, 118, 119, 120, 121, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 122, 0, 0, 123, 0, 124, 0, 0, 0, 0, 0, 0, 125, - 126, 127, 128, 0, 129, 0, 0, 0, 0, 0, 0, 0, 0, 0, 130, 0, 131, 132, 133, - 134, 0, 0, 0, 0, 0, 0, 0, 135, 136, 137, 138, 139, 140, 141, 0, 0, 0, 0, - 0, 0, 0, 0, 142, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 143, 144, 145, 146, 0, - 147, 0, 0, 0, 0, 0, 0, 0, 0, 148, 149, 150, 151, 152, 153, 154, 0, 0, 0, - 0, 0, 0, 0, 155, 156, 157, 158, 159, 160, 161, 0, 0, 0, 0, 0, 0, 0, 162, - 0, 163, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 164, 0, 0, 165, 166, 167, 0, 168, - 0, 0, 0, 0, 0, 0, 169, 0, 0, 170, 171, 172, 173, 0, 0, 0, 0, 0, 0, 0, - 174, 175, 0, 0, 176, 0, 0, 0, 0, 0, 0, 0, 0, 177, 178, 179, 180, 0, 181, - 182, 183, 0, 0, 0, 0, 0, 0, 184, 185, 186, 187, 188, 0, 189, 0, 0, 0, 0, - 0, 0, 0, 190, 191, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 192, 193, 194, - 195, 196, 197, 198, 0, 0, 0, 0, 0, 0, 0, 199, 200, 201, 0, 202, 203, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 204, 205, 206, 207, 208, 209, 0, 0, 0, 0, 0, 0, - 210, 211, 212, 213, 214, 215, 216, 0, 0, 0, 0, 0, 0, 0, 217, 0, 0, 0, - 218, 0, 0, 0, 0, 0, 0, 0, 0, 219, 220, 221, 222, 0, 223, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 224, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 225, 226, 227, 0, - 228, 0, 0, 0, 0, 0, 0, 0, 0, 0, 229, 230, 231, 0, 232, 0, 233, 0, 0, 0, - 0, 0, 0, 234, 235, 0, 0, 0, 0, 0, 236, 0, 0, 0, 0, 0, 0, 237, 238, 239, - 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, 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, 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, 251, 252, 253, 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, 255, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 256, 257, 0, 258, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 259, 260, 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, 263, 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, 265, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 266, 267, 268, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 269, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 270, 271, 272, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 273, 274, 275, 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, 277, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 278, 279, - 0, 280, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 281, 282, 283, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 284, 285, 286, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 287, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 288, 289, 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, 291, 0, 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, 293, 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, - 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, 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, - 300, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 301, 302, 303, 0, 0, 304, 0, 0, 0, - 0, 0, 0, 0, 0, 305, 306, 307, 0, 308, 0, 0, 0, 0, 0, 0, 0, 0, 0, 309, - 310, 311, 0, 312, 0, 0, 0, 0, 0, 0, 0, 0, 0, 313, 0, 314, 0, 315, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 316, 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, 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, 0, 0, 320, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 321, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 322, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 323, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 324, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 325, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 326, 327, 0, 328, 329, 0, 0, 330, 0, 0, 0, 0, 0, 0, 331, 0, - 0, 332, 0, 0, 0, 0, 0, 0, 0, 0, 0, 333, 334, 0, 0, 335, 0, 0, 0, 336, 0, - 0, 0, 0, 0, 337, 338, 339, 0, 340, 0, 0, 0, 0, 0, 0, 0, 0, 0, 341, 0, 0, - 342, 343, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 344, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 345, 346, 347, 0, 348, 0, 0, 0, 0, 0, 0, 0, 0, 0, 349, 0, 0, 0, - 350, 0, 0, 351, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 352, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 353, 0, 0, 0, 0, 0, 354, 355, 356, 0, 357, 0, - 0, 358, 359, 0, 0, 0, 0, 0, 360, 0, 0, 0, 361, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 362, 0, 0, 363, 364, 0, 0, 365, 0, 0, 0, 0, 0, 0, 366, 367, 0, 368, 0, 0, - 0, 369, 0, 0, 0, 0, 0, 370, 371, 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, 374, 375, 376, 377, 378, 0, 0, - 379, 0, 0, 0, 0, 0, 0, 380, 0, 0, 381, 0, 0, 0, 382, 0, 0, 0, 0, 0, 383, - 384, 0, 0, 0, 0, 0, 385, 0, 0, 0, 0, 0, 0, 386, 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, 389, 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, - 0, 392, 393, 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, 396, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 397, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 398, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 399, 400, 401, 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, 404, - 405, 406, 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, 408, 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, 410, 411, 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, 414, 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, 416, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 417, 418, 419, 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, 422, 423, 424, 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, 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, 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, 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, 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, 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, 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, 0, 440, 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, 442, 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, 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, 0, 446, 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, 0, 0, 0, 0, 0, 0, 0, 449, 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, 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, 456, 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, 458, 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, 460, 0, 0, 0, 0, 0, 0, 0, 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, 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, 467, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 468, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 469, 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, 472, 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, 474, 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, 476, 477, 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, 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, 0, 0, 0, 0, 0, 0, 0, 482, 0, 0, 0, 0, 0, 0, 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, 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, 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, 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, 0, 0, 0, 0, 0, 0, 0, 497, 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, 499, 0, 0, 0, 0, 0, 0, - 0, 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, 502, 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, 0, 0, 0, 0, 0, 0, 505, - 506, 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, 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, 0, 0, 0, 0, 0, 0, 0, 512, 0, 0, 0, 0, 0, - 0, 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, 517, 0, 0, 0, 0, 0, 0, - 518, 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, 0, 0, 0, 0, 0, 0, 0, 522, 0, 0, 0, 0, 0, 0, 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, 527, 0, 0, 0, 0, 0, 0, 528, 0, 0, 0, 0, - 0, 0, 529, 0, 0, 0, 0, 0, 0, 530, 0, 0, 0, 0, 0, 0, 531, 0, 0, 0, 0, 0, - 532, 533, 0, 0, 0, 0, 0, 534, 0, 0, 0, 0, 0, 0, 535, 0, 0, 0, 0, 0, 0, - 536, 0, 0, 0, 0, 0, 0, 537, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 538, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 539, 540, 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, 543, 0, 0, 0, 0, 0, 0, 544, 0, 0, 0, 0, 0, 0, 545, 0, 0, 0, 0, 0, 546, - 547, 0, 0, 0, 0, 0, 548, 0, 0, 0, 0, 0, 0, 549, 0, 0, 0, 0, 0, 0, 550, 0, - 0, 0, 0, 0, 0, 551, 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, 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, 559, 0, 0, 0, 0, 0, 0, 560, 0, 0, 0, 0, 0, 0, - 561, 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, 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, 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, 573, 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, 577, 578, 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, 581, 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, 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, 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, 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, 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, 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, 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, - 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, 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, 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, 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, - 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, 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, 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, 0, 0, 0, 0, 0, 0, 0, 634, 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, 636, 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, - 638, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 639, 640, 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, 642, 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, - 644, 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, 646, 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, 648, 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, 650, 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, 652, 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, - 654, 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, 656, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 657, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 658, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 659, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 660, 661, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 662, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 663, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 664, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 665, 666, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 667, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 668, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 669, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 670, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 671, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 672, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 673, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 674, + 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 3, 0, 0, 0, 4, 5, 6, 7, + 0, 0, 0, 8, 0, 9, 10, 0, 0, 11, 12, 13, 14, 0, 0, 0, 0, 15, 16, 17, 0, 0, + 0, 18, 19, 20, 21, 0, 0, 0, 22, 0, 0, 0, 0, 0, 23, 24, 25, 26, 0, 0, 0, + 27, 28, 29, 30, 0, 0, 0, 31, 32, 33, 34, 0, 0, 0, 35, 0, 0, 0, 0, 0, 36, + 0, 37, 38, 39, 0, 0, 40, 41, 42, 43, 0, 0, 0, 44, 45, 46, 0, 0, 0, 0, 47, + 48, 49, 50, 0, 0, 51, 52, 53, 54, 0, 0, 0, 55, 56, 0, 0, 0, 0, 0, 57, 58, + 59, 60, 0, 0, 0, 61, 62, 63, 0, 0, 0, 0, 64, 65, 66, 67, 0, 0, 68, 69, + 70, 71, 0, 0, 0, 72, 0, 73, 0, 0, 0, 0, 74, 0, 75, 0, 0, 0, 0, 76, 0, 0, + 0, 0, 0, 77, 78, 79, 0, 0, 0, 0, 80, 81, 82, 83, 0, 0, 0, 84, 85, 86, 0, + 0, 0, 0, 87, 88, 0, 89, 0, 0, 90, 91, 0, 92, 0, 0, 0, 0, 93, 94, 95, 0, + 0, 0, 96, 97, 98, 99, 0, 0, 0, 100, 0, 0, 0, 0, 0, 101, 102, 0, 103, 0, + 0, 0, 104, 105, 106, 107, 0, 0, 0, 108, 109, 110, 111, 0, 0, 0, 112, 113, + 0, 0, 0, 0, 114, 115, 116, 117, 0, 0, 0, 118, 119, 120, 121, 0, 0, 0, + 122, 0, 123, 0, 0, 0, 124, 125, 126, 127, 128, 0, 0, 129, 130, 131, 132, + 0, 0, 0, 133, 134, 0, 0, 0, 0, 0, 135, 136, 137, 138, 0, 0, 139, 140, + 141, 142, 0, 0, 0, 0, 143, 144, 145, 0, 0, 0, 146, 147, 148, 149, 0, 0, + 0, 150, 0, 151, 0, 0, 0, 152, 153, 154, 0, 0, 0, 0, 0, 155, 0, 0, 0, 0, + 0, 156, 157, 158, 0, 0, 0, 0, 159, 160, 161, 162, 0, 0, 163, 0, 0, 0, + 164, 0, 0, 165, 166, 0, 0, 0, 0, 0, 167, 0, 0, 0, 0, 0, 0, 168, 0, 0, 0, + 0, 0, 169, 170, 0, 0, 0, 0, 0, 171, 0, 0, 0, 0, 0, 0, 172, 173, 0, 0, 0, + 0, 0, 174, 0, 0, 0, 0, 0, 175, 176, 0, 0, 0, 0, 0, 177, 178, 0, 0, 0, 0, + 0, 179, 0, 0, 0, 0, 0, 0, 180, 0, 0, 0, 0, 0, 181, 182, 183, 0, 0, 0, 0, + 184, 185, 0, 0, 0, 0, 0, 186, 0, 0, 0, 0, 0, 0, 187, 0, 0, 0, 0, 0, 188, + 189, 0, 0, 0, 0, 0, 190, 0, 0, 0, 0, 0, 0, 191, 192, 0, 0, 0, 0, 0, 193, + 0, 0, 0, 0, 0, 194, 195, 0, 0, 0, 0, 0, 196, 197, 0, 0, 0, 0, 0, 198, 0, + 0, 0, 0, 0, 0, 199, 0, 0, 0, 0, 0, 200, 201, 202, 0, 0, 0, 0, 203, 204, + 0, 0, 0, 0, 0, 205, 206, 0, 0, 0, 0, 0, 207, 0, 0, 0, 0, 0, 208, 0, 0, 0, + 0, 0, 0, 209, 0, 0, 0, 0, 0, 0, 210, 0, 0, 0, 0, 0, 0, 211, 0, 0, 0, 0, + 0, 0, 212, 0, 0, 0, 0, 0, 0, 213, 0, 0, 0, 0, 0, 0, 214, 0, 0, 0, 0, 0, + 215, 0, 0, 0, 0, 0, 216, 0, 0, 0, 0, 0, 0, 0, 217, 0, 0, 0, 0, 0, 0, 218, + 0, 0, 0, 0, 0, 219, 0, 0, 0, 0, 0, 220, 221, 222, 0, 0, 0, 0, 223, 224, + 225, 0, 0, 0, 0, 226, 227, 228, 0, 0, 0, 0, 229, 230, 231, 0, 0, 0, 0, 0, + 232, 0, 0, 0, 0, 0, 233, 0, 0, 0, 0, 0, 234, 0, 0, 0, 0, 0, 0, 235, 0, 0, + 0, 0, 0, 0, 236, 0, 0, 0, 0, 0, 0, 237, 0, 0, 0, 0, 0, 238, 0, 0, 0, 0, + 0, 0, 239, 0, 0, 0, 0, 0, 0, 240, 0, 0, 0, 0, 0, 0, 241, 0, 0, 0, 0, 0, + 242, 0, 243, 244, 0, 0, 0, 245, 246, 0, 0, 0, 0, 247, 0, 248, 0, 249, 0, + 0, 250, 251, 252, 0, 0, 0, 0, 253, 0, 254, 0, 0, 0, 0, 0, 255, 0, 0, 0, + 0, 256, 257, 258, 0, 0, 0, 0, 259, 0, 260, 0, 261, 0, 0, 0, 0, 0, 262, 0, + 0, 0, 0, 0, 0, 263, 0, 0, 264, 265, 266, 0, 267, 0, 0, 268, 0, 269, 0, 0, + 0, 0, 270, 0, 271, 272, 0, 0, 0, 273, 274, 0, 275, 0, 0, 276, 0, 277, 0, + 0, 0, 0, 0, 0, 278, 0, 0, 0, 0, 279, 280, 281, 282, 0, 0, 0, 283, 284, 0, + 285, 0, 0, 286, 0, 0, 0, 287, 0, 0, 288, 0, 0, 0, 289, 0, 0, 0, 0, 0, + 290, 0, 0, 0, 291, 0, 0, 0, 0, 0, 0, 292, 0, 0, 0, 0, 0, 0, 293, 0, 0, 0, + 0, 0, 294, 0, 0, 0, 0, 0, 0, 295, 0, 0, 0, 0, 0, 0, 296, 0, 0, 0, 0, 0, + 0, 297, 0, 0, 0, 0, 0, 298, 299, 0, 0, 0, 0, 0, 300, 0, 0, 0, 0, 0, 0, + 301, 0, 0, 0, 0, 0, 0, 302, 0, 0, 0, 0, 0, 0, 303, 0, 0, 0, 0, 0, 304, 0, + 0, 0, 0, 0, 0, 305, 0, 0, 0, 0, 0, 0, 306, 0, 0, 0, 0, 0, 307, 0, 0, 0, + 0, 0, 0, 308, 0, 0, 0, 0, 0, 0, 309, 0, 0, 0, 0, 0, 0, 310, 0, 0, 0, 0, + 0, 311, 312, 0, 0, 0, 0, 0, 313, 0, 0, 0, 0, 0, 0, 314, 0, 0, 0, 0, 0, 0, + 315, 0, 0, 0, 0, 0, 0, 316, 0, 0, 0, 0, 0, 317, 0, 0, 0, 0, 0, 0, 318, 0, + 0, 0, 0, 0, 0, 319, 0, 0, 0, 0, 0, 0, 320, 0, 0, 0, 0, 0, 0, 321, 0, 0, + 0, 0, 0, 322, 0, 0, 0, 0, 0, 0, 323, 0, 0, 0, 0, 0, 0, 324, 0, 0, 0, 0, + 0, 325, 0, 0, 0, 0, 0, 0, 0, 0, 0, 326, 0, 0, 0, 0, 0, 0, 327, 0, 0, 0, + 0, 0, 0, 328, 0, 0, 0, 0, 0, 329, 0, 0, 0, 0, 0, 0, 330, 0, 0, 0, 0, 0, + 0, 331, 0, 0, 0, 0, 0, 0, 332, 0, 0, 0, 0, 0, 0, 333, 0, 0, 0, 0, 0, 334, + 0, 0, 0, 0, 0, 0, 335, 0, 0, 0, 0, 0, 0, 336, 337, 0, 0, 0, 0, 0, 0, 338, + 0, 0, 0, 0, 0, 339, 0, 0, 0, 0, 0, 0, 340, 0, 0, 0, 0, 0, 0, 341, 0, 0, + 0, 0, 0, 0, 342, 0, 0, 0, 0, 0, 0, 343, 0, 0, 0, 0, 0, 344, 0, 0, 0, 0, + 0, 0, 345, 346, 0, 0, 0, 0, 0, 347, 0, 0, 0, 0, 0, 0, 348, 0, 0, 0, 0, 0, + 0, 349, 0, 0, 0, 0, 0, 0, 350, 0, 0, 0, 0, 0, 0, 351, 0, 0, 0, 0, 0, 0, + 352, 0, 0, 0, 0, 0, 353, 0, 0, 0, 0, 0, 0, 354, 0, 0, 0, 0, 0, 0, 355, 0, + 0, 0, 0, 0, 0, 356, 0, 0, 0, 0, 0, 357, 0, 0, 0, 0, 0, 0, 358, 0, 0, 0, + 0, 0, 0, 359, 0, 0, 0, 0, 0, 0, 360, 0, 0, 0, 0, 0, 361, 362, 0, 0, 0, 0, + 0, 0, 363, 0, 0, 0, 0, 0, 0, 364, 0, 0, 0, 0, 0, 0, 365, 0, 0, 0, 0, 0, + 0, 366, 0, 0, 0, 0, 0, 367, 0, 0, 0, 0, 0, 0, 368, 0, 0, 0, 0, 0, 369, + 370, 0, 0, 0, 0, 0, 371, 0, 0, 0, 0, 0, 0, 372, 0, 0, 0, 0, 0, 0, 373, 0, + 0, 0, 0, 0, 374, 0, 0, 0, 0, 0, 0, 375, 0, 0, 376, 0, 0, 0, 377, 0, 0, + 378, 0, 0, 0, 0, 0, 0, 379, 0, 0, 0, 0, 0, 0, 380, 0, 0, 0, 0, 0, 381, 0, + 0, 0, 0, 0, 0, 382, 0, 0, 0, 0, 0, 0, 383, 0, 0, 0, 0, 0, 0, 384, 0, 0, + 385, 0, 0, 386, 0, 0, 0, 387, 0, 0, 388, 0, 0, 0, 0, 0, 0, 389, 0, 0, 0, + 0, 0, 0, 390, 0, 0, 0, 0, 0, 391, 0, 0, 0, 0, 0, 0, 392, 0, 0, 0, 0, 0, + 0, 393, 0, 0, 0, 0, 0, 0, 394, 0, 0, 395, 0, 0, 0, 0, 0, 0, 396, 0, 0, 0, + 0, 0, 397, 0, 0, 0, 0, 0, 0, 398, 0, 0, 0, 0, 0, 0, 399, 0, 0, 400, 0, 0, + 0, 401, 0, 0, 402, 0, 0, 0, 0, 0, 0, 403, 0, 0, 0, 0, 0, 0, 404, 0, 0, 0, + 0, 0, 405, 0, 0, 0, 0, 0, 0, 406, 0, 0, 0, 0, 0, 0, 407, 0, 0, 0, 0, 0, + 0, 408, 0, 0, 409, 0, 0, 410, 0, 0, 0, 411, 0, 0, 412, 0, 0, 0, 0, 0, 0, + 413, 0, 0, 0, 0, 0, 0, 414, 0, 0, 0, 0, 0, 415, 0, 0, 0, 0, 0, 0, 416, 0, + 0, 0, 0, 0, 0, 417, 0, 0, 0, 0, 0, 0, 418, 0, 0, 419, 0, 0, 420, 0, 0, 0, + 421, 0, 0, 422, 0, 0, 423, 0, 0, 0, 424, 0, 0, 425, 0, 0, 0, 426, 0, 0, + 427, 0, 0, 0, 0, 0, 0, 428, 0, 0, 0, 0, 0, 429, 0, 0, 0, 0, 0, 0, 430, 0, + 0, 0, 0, 0, 0, 431, 0, 0, 432, 0, 0, 0, 433, 0, 0, 434, 0, 0, 435, 0, 0, + 0, 436, 0, 0, 437, 0, 0, 0, 438, 0, 0, 439, 0, 0, 440, 0, 0, 0, 0, 0, 0, + 441, 0, 0, 0, 0, 0, 0, 442, 0, 0, 0, 0, 0, 0, 443, 0, 0, 0, 0, 0, 444, 0, + 0, 0, 0, 0, 0, 445, 0, 0, 0, 0, 0, 0, 446, 0, 0, 447, 0, 0, 0, 448, 0, 0, + 449, 0, 0, 450, 0, 0, 0, 0, 0, 0, 451, 0, 0, 0, 0, 0, 0, 452, 0, 0, 0, 0, + 0, 0, 453, 0, 0, 0, 0, 0, 454, 0, 0, 0, 0, 0, 0, 455, 0, 0, 0, 0, 0, 0, + 456, 0, 0, 0, 0, 0, 0, 457, 0, 0, 0, 0, 0, 458, 0, 0, 0, 0, 0, 0, 459, 0, + 0, 0, 0, 0, 0, 460, 0, 0, 461, 0, 0, 0, 462, 0, 0, 0, 0, 0, 463, 0, 0, 0, + 0, 0, 0, 464, 0, 0, 465, 0, 0, 0, 466, 0, 0, 0, 0, 0, 467, 0, 0, 0, 0, 0, + 0, 468, 0, 0, 0, 0, 0, 0, 469, 0, 0, 0, 0, 0, 0, 470, 0, 0, 0, 0, 0, 471, + 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, 475, 0, 0, 0, 0, 0, 0, 476, 0, 0, 0, 0, 0, 0, 477, 0, 0, 0, + 0, 0, 0, 478, 0, 0, 0, 0, 0, 479, 0, 0, 0, 0, 0, 0, 480, 0, 0, 0, 0, 0, + 0, 481, 0, 0, 0, 0, 0, 0, 482, 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, 486, 0, 0, 0, 0, 0, 487, 0, 0, + 0, 0, 0, 0, 488, 0, 0, 0, 0, 0, 0, 489, 0, 0, 0, 0, 0, 0, 490, 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, 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, 499, 0, 0, 0, 0, 0, 0, 500, 0, 0, + 0, 0, 0, 0, 501, 0, 0, 0, 0, 0, 0, 502, 0, 0, 0, 0, 0, 503, 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, + 507, 0, 0, 0, 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, 512, 0, 0, 0, 0, 0, 0, + 513, 0, 0, 0, 0, 0, 0, 514, 0, 0, 0, 0, 0, 0, 515, 0, 0, 0, 0, 0, 516, 0, + 0, 0, 0, 0, 0, 517, 0, 0, 0, 0, 0, 0, 518, 0, 0, 0, 0, 0, 0, 519, 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, 524, 0, 0, 0, 0, 0, 0, 525, 0, 0, 0, 0, 0, 0, + 526, 0, 0, 0, 0, 0, 0, 527, 0, 0, 0, 0, 0, 528, 0, 0, 0, 0, 0, 0, 529, 0, + 0, 0, 0, 0, 0, 530, 0, 0, 0, 0, 0, 0, 531, 0, 0, 0, 0, 0, 532, 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, 536, 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, 540, 0, 0, 0, 0, 0, 0, 541, 0, 0, 0, 0, 0, 0, 542, 0, + 0, 0, 0, 0, 0, 543, 0, 0, 0, 0, 0, 544, 0, 0, 0, 0, 0, 0, 545, 0, 0, 0, + 0, 0, 0, 546, 0, 0, 0, 0, 0, 0, 547, 0, 0, 0, 0, 0, 548, 0, 0, 0, 0, 0, + 0, 549, 0, 0, 0, 0, 0, 0, 550, 0, 0, 0, 0, 0, 0, 551, 0, 0, 0, 0, 0, 552, + 0, 0, 0, 0, 0, 0, 553, 0, 0, 0, 0, 0, 0, 554, 0, 0, 0, 0, 0, 0, 555, }; -static unsigned int comp_data[] = { - 0, 0, 0, 0, 0, 0, 0, 8814, 0, 0, 8800, 0, 0, 8815, 0, 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, 7682, 0, 0, 7684, 0, 0, 0, 0, 7686, 0, 262, - 264, 0, 0, 0, 266, 0, 0, 0, 0, 268, 0, 199, 0, 0, 0, 7690, 0, 0, 0, 0, - 270, 0, 0, 0, 0, 0, 7692, 0, 0, 0, 7696, 0, 7698, 0, 0, 7694, 0, 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, 0, 7710, 0, 500, 284, 0, - 7712, 286, 288, 0, 0, 0, 0, 486, 0, 290, 0, 0, 0, 292, 0, 0, 0, 7714, - 7718, 0, 0, 0, 542, 0, 0, 0, 0, 0, 7716, 0, 0, 0, 7720, 0, 0, 7722, 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, 308, 0, 7728, 0, 0, 0, 0, - 0, 488, 0, 7730, 0, 0, 0, 310, 0, 0, 0, 0, 7732, 0, 0, 0, 0, 0, 313, 0, - 317, 0, 0, 0, 0, 0, 7734, 0, 0, 0, 315, 0, 7740, 0, 0, 7738, 0, 0, 0, 0, - 0, 7742, 0, 0, 0, 0, 7744, 0, 0, 7746, 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, 0, 0, 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, 0, 0, 0, 7764, 7766, 0, 0, 0, 0, 0, - 340, 0, 0, 0, 0, 7768, 344, 528, 530, 0, 0, 0, 7770, 0, 0, 0, 342, 0, 0, - 0, 0, 7774, 0, 346, 348, 0, 0, 0, 7776, 0, 0, 0, 0, 352, 0, 7778, 0, 0, - 536, 350, 0, 0, 0, 7786, 0, 0, 0, 0, 356, 0, 7788, 0, 0, 538, 354, 0, - 7792, 0, 0, 7790, 0, 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, 7804, 0, 0, 0, 0, 0, 7806, 0, 7808, 7810, 372, 0, 0, 0, 7814, 7812, - 0, 7816, 0, 0, 0, 7818, 7820, 0, 0, 0, 7922, 221, 374, 7928, 562, 0, - 7822, 376, 7926, 0, 0, 0, 0, 7924, 0, 0, 377, 7824, 0, 0, 0, 379, 381, 0, - 0, 0, 0, 0, 7826, 0, 0, 0, 0, 7828, 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, 7683, 0, 0, 7685, 0, 0, 0, 0, 7687, 0, 0, 0, 0, 0, 263, 265, 0, 0, 0, - 267, 0, 0, 0, 0, 269, 0, 0, 0, 0, 0, 231, 0, 0, 0, 7691, 271, 0, 0, 0, 0, - 0, 7693, 0, 0, 0, 7697, 0, 7699, 0, 0, 7695, 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, 7711, 0, 0, 0, 0, 0, 501, 285, 0, 7713, 287, - 289, 0, 0, 0, 0, 487, 0, 0, 0, 0, 0, 291, 0, 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, 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, 309, 0, 0, 0, 0, 496, - 0, 0, 0, 0, 7729, 0, 489, 0, 0, 0, 0, 0, 7731, 0, 0, 0, 311, 7733, 0, 0, - 0, 0, 0, 314, 0, 318, 0, 0, 0, 0, 0, 7735, 0, 0, 0, 316, 0, 7741, 0, 0, - 7739, 0, 7743, 0, 0, 0, 0, 7745, 0, 0, 7747, 0, 0, 0, 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, 0, 0, 0, 242, 243, 244, 245, 333, 335, 559, 246, 7887, 0, 337, - 466, 525, 527, 0, 0, 417, 7885, 491, 0, 0, 0, 0, 0, 7765, 0, 0, 0, 0, - 7767, 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, 347, 349, 0, 0, 0, 7777, 0, 0, 0, 0, - 353, 0, 7779, 0, 0, 537, 351, 0, 0, 0, 7787, 7831, 0, 0, 0, 357, 0, 0, 0, - 0, 0, 7789, 0, 0, 539, 355, 0, 7793, 0, 0, 7791, 0, 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, 0, 7805, 0, 7807, 0, 0, - 0, 0, 0, 7809, 7811, 373, 0, 0, 0, 7815, 7813, 0, 7832, 0, 0, 0, 7817, 0, - 0, 0, 7819, 7821, 0, 0, 0, 7923, 253, 375, 7929, 563, 0, 7823, 255, 7927, - 7833, 0, 0, 0, 7925, 0, 0, 378, 7825, 0, 0, 0, 380, 0, 0, 0, 0, 382, 0, - 7827, 0, 0, 0, 0, 7829, 0, 0, 0, 0, 8173, 901, 0, 0, 0, 0, 0, 0, 8129, 0, - 0, 7846, 7844, 0, 7850, 0, 0, 0, 0, 7848, 0, 0, 478, 0, 0, 0, 506, 0, 0, - 508, 0, 0, 482, 0, 0, 0, 7688, 0, 7872, 7870, 0, 7876, 0, 0, 0, 0, 7874, - 0, 0, 0, 7726, 0, 0, 0, 0, 0, 7890, 7888, 0, 7894, 0, 0, 0, 0, 7892, 0, - 0, 0, 7756, 0, 0, 556, 0, 0, 7758, 0, 0, 0, 554, 0, 0, 0, 510, 0, 0, 0, - 0, 0, 475, 471, 0, 0, 469, 0, 0, 473, 0, 0, 0, 7847, 7845, 0, 7851, 0, 0, - 0, 0, 7849, 0, 0, 479, 0, 0, 0, 507, 0, 0, 509, 0, 0, 483, 0, 0, 0, 7689, - 0, 7873, 7871, 0, 7877, 0, 0, 0, 0, 7875, 0, 0, 0, 7727, 0, 0, 0, 0, 0, - 7891, 7889, 0, 7895, 0, 0, 0, 0, 7893, 0, 0, 0, 7757, 0, 0, 557, 0, 0, - 7759, 0, 0, 0, 555, 0, 0, 0, 511, 0, 0, 0, 0, 0, 476, 472, 0, 0, 470, 0, - 0, 474, 0, 0, 0, 7856, 7854, 0, 7860, 0, 0, 0, 0, 7858, 0, 0, 7857, 7855, - 0, 7861, 0, 0, 0, 0, 7859, 0, 0, 7700, 7702, 0, 0, 0, 0, 0, 7701, 7703, - 0, 0, 0, 0, 0, 7760, 7762, 0, 7761, 7763, 0, 0, 0, 7780, 0, 0, 7781, 0, - 0, 7782, 0, 0, 0, 0, 0, 0, 7783, 0, 7800, 0, 0, 7801, 0, 0, 0, 0, 7802, - 0, 0, 7803, 0, 0, 0, 0, 0, 7835, 0, 0, 0, 0, 7900, 7898, 0, 7904, 0, 0, - 0, 0, 7902, 7906, 0, 0, 0, 0, 0, 7901, 7899, 0, 7905, 0, 0, 0, 0, 7903, - 0, 0, 0, 0, 7907, 0, 7914, 7912, 0, 7918, 0, 0, 0, 0, 7916, 0, 0, 0, 0, - 7920, 0, 7915, 7913, 0, 7919, 7917, 0, 0, 0, 0, 7921, 0, 0, 0, 0, 494, 0, - 0, 0, 492, 0, 0, 493, 0, 0, 480, 0, 0, 0, 0, 0, 0, 481, 0, 0, 0, 7708, 0, - 0, 7709, 0, 560, 0, 0, 0, 0, 0, 0, 561, 0, 495, 0, 0, 0, 8122, 902, 0, 0, - 8121, 8120, 0, 0, 0, 0, 7944, 7945, 0, 0, 0, 0, 0, 8124, 0, 8136, 904, 0, - 0, 0, 0, 7960, 7961, 0, 0, 0, 8138, 905, 0, 0, 0, 0, 7976, 7977, 0, 8140, - 0, 0, 0, 0, 0, 8154, 906, 0, 0, 8153, 8152, 0, 938, 0, 0, 7992, 7993, 0, - 0, 0, 8184, 908, 0, 0, 0, 0, 8008, 8009, 0, 0, 0, 0, 0, 0, 8172, 0, 0, 0, - 8170, 910, 0, 0, 8169, 8168, 0, 939, 0, 0, 0, 8025, 0, 0, 0, 8186, 911, - 8040, 8041, 0, 0, 0, 0, 0, 8188, 0, 0, 8116, 0, 0, 8132, 0, 0, 0, 0, 0, - 8048, 940, 0, 0, 8113, 8112, 0, 0, 0, 0, 7936, 7937, 0, 0, 0, 0, 8118, - 8115, 0, 0, 0, 0, 0, 8050, 941, 7952, 7953, 0, 0, 0, 8052, 942, 0, 0, 0, - 0, 7968, 7969, 0, 0, 0, 0, 8134, 8131, 0, 8054, 943, 0, 0, 8145, 8144, 0, - 970, 0, 0, 7984, 7985, 8150, 0, 0, 0, 0, 0, 0, 8056, 972, 0, 0, 0, 0, - 8000, 8001, 0, 8164, 8165, 0, 0, 0, 8058, 973, 0, 0, 8161, 8160, 0, 971, - 0, 0, 0, 0, 0, 0, 8016, 8017, 0, 0, 0, 0, 8166, 0, 0, 8060, 974, 0, 0, 0, - 0, 8032, 8033, 8182, 8179, 0, 0, 0, 0, 0, 8146, 912, 0, 0, 0, 0, 0, 0, - 8151, 0, 0, 8162, 944, 0, 0, 8167, 0, 0, 0, 8180, 0, 0, 979, 0, 0, 0, 0, - 0, 980, 0, 0, 1031, 0, 0, 0, 0, 1232, 0, 1234, 0, 0, 0, 0, 1027, 0, 1024, - 0, 0, 0, 0, 1238, 0, 1025, 1217, 0, 1244, 0, 0, 1246, 0, 0, 0, 1037, 0, - 0, 0, 1250, 1049, 0, 1252, 0, 0, 0, 0, 1036, 0, 0, 0, 0, 1254, 0, 0, 0, - 1262, 1038, 0, 1264, 0, 0, 1266, 0, 0, 0, 1268, 0, 0, 0, 0, 0, 0, 1272, - 0, 0, 1260, 0, 0, 0, 0, 1233, 0, 1235, 0, 0, 0, 0, 1107, 0, 1104, 0, 0, - 0, 0, 1239, 0, 1105, 1218, 0, 1245, 0, 0, 1247, 0, 0, 0, 1117, 0, 0, 0, - 1251, 1081, 0, 1253, 0, 0, 0, 0, 1116, 0, 0, 0, 0, 1255, 0, 0, 0, 1263, - 1118, 0, 1265, 0, 0, 1267, 0, 0, 0, 1269, 0, 0, 0, 0, 0, 0, 1273, 0, 0, - 1261, 0, 0, 1111, 0, 0, 0, 1142, 0, 0, 1143, 0, 0, 0, 0, 0, 1242, 0, 0, - 1243, 0, 0, 1258, 0, 0, 0, 0, 0, 0, 1259, 0, 1570, 1571, 1573, 0, 1572, - 0, 0, 1574, 0, 0, 0, 0, 0, 0, 1730, 0, 0, 1747, 0, 0, 1728, 0, 0, 0, 0, - 2345, 0, 0, 2353, 0, 0, 2356, 0, 0, 0, 2507, 2508, 0, 0, 0, 2891, 2888, - 2892, 2964, 0, 0, 0, 0, 0, 3018, 3020, 0, 3019, 0, 0, 0, 0, 3144, 0, 0, - 0, 0, 3264, 0, 3274, 3271, 3272, 0, 3275, 0, 0, 0, 0, 3402, 3404, 0, - 3403, 0, 0, 0, 0, 3546, 3548, 3550, 0, 0, 0, 0, 3549, 0, 0, 0, 0, 0, - 4134, 0, 0, 0, 6918, 0, 0, 6920, 0, 0, 6922, 0, 0, 6924, 0, 0, 0, 0, 0, - 0, 6926, 0, 0, 6930, 0, 0, 6971, 0, 0, 6973, 0, 0, 0, 0, 0, 0, 6976, 0, - 0, 6977, 0, 0, 6979, 0, 0, 0, 7736, 0, 0, 7737, 0, 0, 0, 0, 0, 0, 7772, - 0, 0, 7773, 0, 0, 0, 0, 7784, 0, 0, 7785, 0, 0, 7852, 0, 0, 7862, 0, 0, - 0, 7853, 0, 0, 7863, 0, 0, 0, 7878, 0, 0, 7879, 0, 0, 7896, 0, 0, 7897, - 0, 0, 0, 0, 7938, 7940, 0, 0, 7942, 8064, 0, 7939, 7941, 0, 0, 7943, - 8065, 0, 0, 8066, 0, 0, 0, 0, 0, 0, 8067, 0, 0, 8068, 0, 0, 8069, 0, 0, - 8070, 0, 0, 0, 0, 0, 0, 8071, 0, 7946, 7948, 0, 0, 7950, 8072, 0, 7947, - 7949, 0, 0, 7951, 8073, 0, 0, 8074, 0, 0, 0, 0, 0, 0, 8075, 0, 0, 8076, - 0, 0, 8077, 0, 0, 8078, 0, 0, 0, 0, 0, 0, 8079, 0, 7954, 7956, 0, 7955, - 7957, 0, 0, 0, 0, 0, 7962, 7964, 0, 0, 0, 0, 0, 7963, 7965, 0, 7970, - 7972, 0, 0, 7974, 8080, 0, 7971, 7973, 0, 0, 7975, 8081, 0, 0, 8082, 0, - 0, 0, 0, 0, 0, 8083, 0, 0, 8084, 0, 0, 8085, 0, 0, 8086, 0, 0, 0, 0, 0, - 0, 8087, 0, 7978, 7980, 0, 0, 7982, 8088, 0, 7979, 7981, 0, 0, 7983, - 8089, 0, 0, 8090, 0, 0, 0, 0, 0, 0, 8091, 0, 0, 8092, 0, 0, 8093, 0, 0, - 8094, 0, 0, 0, 0, 0, 0, 8095, 0, 7986, 7988, 0, 0, 7990, 0, 0, 7987, - 7989, 0, 0, 7991, 0, 0, 0, 0, 0, 0, 7994, 7996, 0, 0, 0, 0, 0, 0, 7998, - 0, 0, 7995, 7997, 0, 0, 7999, 0, 0, 8002, 8004, 0, 8003, 8005, 0, 0, 0, - 0, 0, 8010, 8012, 0, 0, 0, 0, 0, 8011, 8013, 0, 8018, 8020, 0, 0, 8022, - 0, 0, 8019, 8021, 0, 0, 8023, 0, 0, 0, 0, 0, 0, 8027, 8029, 0, 0, 0, 0, - 0, 0, 8031, 0, 0, 8034, 8036, 0, 0, 8038, 8096, 0, 8035, 8037, 0, 0, - 8039, 8097, 0, 0, 8098, 0, 0, 8099, 0, 0, 0, 0, 0, 0, 8100, 0, 0, 8101, - 0, 0, 8102, 0, 0, 8103, 0, 0, 0, 0, 0, 8042, 8044, 0, 0, 8046, 8104, 0, - 8043, 8045, 0, 0, 8047, 8105, 0, 0, 8106, 0, 0, 8107, 0, 0, 0, 0, 0, 0, - 8108, 0, 0, 8109, 0, 0, 8110, 0, 0, 8111, 0, 0, 0, 0, 0, 0, 8114, 0, 0, - 8130, 0, 0, 8178, 0, 0, 8119, 0, 0, 0, 0, 0, 8141, 8142, 0, 0, 8143, 0, - 0, 0, 8135, 0, 0, 8183, 0, 0, 0, 0, 0, 8157, 8158, 0, 0, 0, 0, 0, 0, - 8159, 0, 8602, 0, 0, 8603, 0, 0, 0, 0, 0, 0, 8622, 0, 0, 8653, 0, 0, - 8655, 0, 0, 8654, 0, 0, 0, 0, 0, 0, 8708, 0, 0, 8713, 0, 0, 8716, 0, 0, - 8740, 0, 0, 0, 0, 0, 0, 8742, 0, 0, 8769, 0, 0, 8772, 0, 0, 8775, 0, 0, - 0, 0, 0, 0, 8777, 0, 0, 8813, 0, 0, 8802, 0, 0, 8816, 0, 0, 0, 0, 0, 0, - 8817, 0, 0, 8820, 0, 0, 8821, 0, 0, 8824, 0, 0, 0, 0, 0, 0, 8825, 0, 0, - 8832, 0, 0, 8833, 0, 0, 8928, 0, 0, 0, 0, 0, 0, 8929, 0, 0, 8836, 0, 0, - 8837, 0, 0, 8840, 0, 0, 0, 0, 0, 0, 8841, 0, 0, 8930, 0, 0, 8931, 0, 0, - 8876, 0, 0, 0, 0, 0, 0, 8877, 0, 0, 8878, 0, 0, 8879, 0, 0, 8938, 0, 0, - 0, 0, 0, 0, 8939, 0, 0, 8940, 0, 0, 8941, 0, 0, 0, 12436, 0, 0, 12364, 0, - 0, 0, 0, 0, 0, 12366, 0, 0, 12368, 0, 0, 12370, 0, 0, 12372, 0, 0, 0, 0, - 0, 0, 12374, 0, 0, 12376, 0, 0, 12378, 0, 0, 12380, 0, 0, 0, 0, 0, 0, - 12382, 0, 0, 12384, 0, 0, 12386, 0, 0, 12389, 0, 0, 0, 0, 0, 0, 12391, 0, - 0, 12393, 0, 0, 12400, 12401, 0, 12403, 12404, 0, 0, 0, 0, 0, 12406, - 12407, 0, 0, 0, 0, 0, 12409, 12410, 0, 12412, 12413, 0, 12446, 0, 0, 0, - 0, 0, 0, 12532, 0, 0, 12460, 0, 0, 12462, 0, 0, 12464, 0, 0, 0, 0, 0, 0, - 12466, 0, 0, 12468, 0, 0, 12470, 0, 0, 12472, 0, 0, 0, 0, 0, 0, 12474, 0, - 0, 12476, 0, 0, 12478, 0, 0, 12480, 0, 0, 0, 0, 0, 0, 12482, 0, 0, 12485, - 0, 0, 12487, 0, 0, 12489, 0, 0, 0, 0, 0, 0, 12496, 12497, 0, 0, 0, 0, 0, - 12499, 12500, 0, 12502, 12503, 0, 12505, 12506, 0, 0, 0, 0, 0, 12508, - 12509, 0, 0, 0, 0, 0, 12535, 0, 0, 12536, 0, 0, 12537, 0, 0, 0, 0, 0, 0, - 12538, 0, 0, 12542, 0, 0, 0, 0, 69786, 0, 0, 69788, 0, 0, 69803, +static unsigned short comp_data[] = { + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8814, 0, 0, 0, 0, 0, 8800, 0, 0, 0, 0, + 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 7682, 0, 0, 7684, 0, 0, 0, 0, 0, 0, + 0, 0, 7686, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 262, 264, 0, 0, 0, 266, + 0, 0, 0, 0, 268, 0, 0, 0, 0, 0, 0, 0, 0, 0, 199, 0, 0, 0, 0, 0, 0, 7690, + 0, 0, 0, 0, 270, 0, 0, 0, 0, 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, 0, 0, 0, 0, + 0, 0, 0, 0, 7710, 0, 0, 0, 0, 0, 0, 0, 0, 500, 284, 0, 7712, 286, 288, 0, + 0, 0, 0, 486, 0, 0, 0, 0, 0, 0, 0, 0, 0, 290, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 292, 0, 0, 0, 7714, 7718, 0, 0, 0, 542, 0, 0, 0, 0, 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, 0, 0, 0, 0, 302, 0, 0, 7724, 0, + 0, 0, 0, 0, 0, 308, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7728, 0, 488, 0, + 0, 0, 0, 0, 7730, 0, 0, 0, 310, 0, 0, 0, 0, 7732, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 313, 0, 0, 0, 0, 0, 0, 0, 0, 0, 317, 0, 0, 0, 0, 0, 7734, 0, + 0, 0, 315, 0, 7740, 0, 0, 7738, 0, 0, 0, 0, 7742, 0, 0, 0, 0, 7744, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 7746, 0, 0, 0, 0, 504, 323, 0, 209, 0, 0, 7748, + 0, 0, 0, 0, 327, 0, 0, 0, 0, 0, 7750, 0, 0, 0, 325, 0, 7754, 0, 0, 7752, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, + 0, 0, 0, 0, 0, 7764, 0, 0, 0, 0, 7766, 0, 0, 0, 0, 0, 0, 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, 0, 0, 346, 348, 0, 0, 0, 7776, 0, 0, 0, 0, 352, 0, 0, + 0, 0, 0, 7778, 0, 0, 536, 350, 0, 0, 0, 0, 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, 0, 0, + 0, 0, 0, 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, 0, 0, 0, 0, 7804, 0, 0, 0, 0, 0, 7806, 0, 0, 0, 0, 7808, 7810, 372, 0, + 0, 0, 7814, 7812, 0, 7816, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7818, 7820, 0, + 0, 0, 0, 0, 0, 7922, 221, 374, 7928, 562, 0, 7822, 376, 7926, 0, 0, 0, 0, + 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, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 7683, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 7685, 7687, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 263, 265, 0, 0, 0, + 267, 0, 0, 0, 0, 269, 0, 231, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 7711, 0, + 0, 0, 0, 0, 0, 0, 0, 501, 285, 0, 7713, 287, 289, 0, 0, 0, 0, 487, 0, + 291, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 309, 0, 0, 0, 0, 0, + 0, 0, 0, 496, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7729, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 489, 0, 0, 0, 0, 0, 7731, 0, 0, 0, 311, 0, 0, 0, 0, 7733, 0, 0, 0, + 0, 314, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 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, 0, + 0, 0, 0, 7765, 0, 0, 0, 0, 7767, 0, 0, 0, 0, 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, 0, 0, 0, 0, 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, 0, 0, 0, 0, 7787, + 7831, 0, 0, 0, 357, 0, 0, 0, 0, 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, 0, + 0, 0, 0, 7805, 0, 0, 0, 0, 0, 7807, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 7809, 7811, 373, 0, 0, 0, 7815, 7813, 0, 7832, 0, 0, 0, 0, 0, 0, 0, 7817, + 0, 0, 7819, 7821, 0, 0, 0, 0, 0, 0, 7923, 253, 375, 7929, 563, 0, 7823, + 255, 7927, 7833, 0, 0, 0, 0, 0, 0, 0, 7925, 0, 0, 0, 0, 0, 378, 7825, 0, + 0, 0, 380, 0, 0, 0, 0, 382, 0, 0, 0, 0, 0, 7827, 0, 0, 0, 0, 0, 0, 0, 0, + 7829, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8173, 901, 0, 0, 8129, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 7846, 7844, 0, 7850, 0, 0, 0, 0, 7848, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 478, 0, 0, 506, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 508, 0, + 0, 482, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7688, 0, 0, 0, 0, 7872, 7870, 0, + 7876, 0, 0, 0, 0, 7874, 0, 0, 0, 0, 0, 0, 7726, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 7890, 7888, 0, 7894, 0, 0, 0, 0, 7892, 0, 0, 0, 0, 0, 0, + 7756, 0, 0, 556, 0, 0, 7758, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 554, 0, 0, + 510, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 475, 471, 0, 0, 469, 0, 0, 0, 0, + 0, 0, 473, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7847, 7845, 0, 7851, 0, 0, 0, 0, + 7849, 0, 0, 0, 0, 0, 0, 0, 0, 0, 479, 0, 0, 507, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 509, 0, 0, 483, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7689, 0, 0, + 0, 0, 7873, 7871, 0, 7877, 0, 0, 0, 0, 7875, 0, 0, 0, 0, 0, 0, 7727, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7891, 7889, 0, 7895, 0, 0, 0, 0, 7893, + 0, 0, 0, 0, 0, 0, 7757, 0, 0, 557, 0, 0, 7759, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 555, 0, 0, 511, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 476, 472, 0, 0, + 470, 0, 0, 0, 0, 0, 0, 474, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7856, 7854, 0, + 7860, 0, 0, 0, 0, 7858, 0, 0, 0, 0, 0, 7857, 7855, 0, 7861, 0, 0, 0, 0, + 7859, 0, 0, 0, 0, 0, 7700, 7702, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 7701, 7703, 0, 0, 0, 0, 7760, 7762, 0, 0, 0, 0, 7761, 7763, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 7780, 0, 0, 0, 0, 0, 7781, 0, 0, 0, 0, 0, 7782, 0, 0, + 0, 0, 0, 7783, 0, 0, 0, 0, 0, 0, 0, 0, 7800, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 7801, 0, 0, 0, 7802, 0, 0, 0, 0, 0, 7803, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 7835, 0, 0, 0, 0, 0, 0, 0, 7900, 7898, 0, 7904, 0, 0, + 0, 0, 7902, 0, 0, 0, 0, 0, 0, 0, 0, 7906, 0, 0, 0, 0, 7901, 7899, 0, + 7905, 0, 0, 0, 0, 7903, 0, 0, 0, 0, 0, 0, 0, 0, 7907, 0, 0, 0, 0, 7914, + 7912, 0, 7918, 0, 0, 0, 0, 7916, 0, 0, 0, 0, 0, 0, 0, 0, 7920, 0, 0, 0, + 0, 7915, 7913, 0, 7919, 0, 0, 0, 0, 7917, 0, 0, 0, 0, 0, 0, 0, 0, 7921, + 0, 0, 0, 0, 0, 0, 0, 494, 0, 0, 0, 0, 0, 0, 492, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 493, 0, 0, 0, 0, 0, 480, 0, 0, 0, 0, 0, 481, 0, 0, 0, 0, + 0, 0, 7708, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7709, 0, 0, 0, 0, 560, + 0, 0, 0, 0, 0, 561, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 495, 0, 0, 8122, + 902, 0, 0, 8121, 8120, 7944, 7945, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 8124, 8136, 904, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7960, 7961, 0, 0, 0, + 0, 0, 0, 8138, 905, 0, 0, 0, 0, 7976, 7977, 0, 0, 0, 0, 0, 8140, 0, 0, 0, + 0, 0, 0, 0, 0, 8154, 906, 0, 0, 8153, 8152, 0, 938, 0, 0, 0, 0, 0, 0, + 7992, 7993, 0, 0, 0, 0, 0, 0, 8184, 908, 0, 0, 0, 0, 8008, 8009, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8172, 0, 0, 0, 0, 0, 0, 8170, 910, 0, 0, + 8169, 8168, 0, 939, 0, 0, 0, 0, 0, 0, 0, 8025, 0, 0, 0, 0, 0, 0, 8186, + 911, 0, 0, 0, 0, 8040, 8041, 0, 0, 0, 0, 0, 8188, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 8116, 0, 0, 0, 0, 0, 8132, 0, 0, 0, 0, 0, 0, 0, 0, 8048, + 940, 0, 0, 8113, 8112, 0, 0, 0, 0, 0, 0, 0, 0, 7936, 7937, 0, 0, 0, 0, + 8118, 8115, 0, 0, 0, 0, 0, 0, 0, 0, 8050, 941, 0, 0, 0, 0, 7952, 7953, 0, + 0, 0, 0, 0, 0, 8052, 942, 0, 0, 0, 0, 7968, 7969, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 8134, 8131, 8054, 943, 0, 0, 8145, 8144, 0, 970, 0, 0, 0, 0, + 0, 0, 7984, 7985, 0, 0, 0, 0, 8150, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8056, 972, + 0, 0, 0, 0, 8000, 8001, 0, 0, 0, 0, 8164, 8165, 0, 0, 0, 0, 0, 0, 8058, + 973, 0, 0, 8161, 8160, 0, 971, 0, 0, 0, 0, 0, 0, 8016, 8017, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 8166, 0, 8060, 974, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 8032, 8033, 0, 0, 0, 0, 8182, 8179, 0, 0, 0, 0, 0, 0, 0, 0, 8146, + 912, 0, 0, 8151, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8162, 944, 0, 0, 8167, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8180, 0, 979, 0, 0, 0, 0, 0, 980, 0, + 0, 0, 0, 0, 1031, 0, 0, 0, 1232, 0, 1234, 0, 0, 0, 0, 0, 0, 0, 1027, 0, + 0, 0, 0, 1024, 0, 0, 0, 0, 1238, 0, 1025, 0, 0, 0, 1217, 0, 1244, 0, 0, + 0, 0, 0, 1246, 0, 0, 0, 0, 0, 0, 1037, 0, 0, 0, 1250, 1049, 0, 1252, 0, + 0, 0, 0, 0, 0, 0, 1036, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1254, 0, 0, + 1262, 1038, 0, 1264, 0, 0, 1266, 0, 0, 1268, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 1272, 0, 0, 0, 0, 0, 1260, 0, 0, 0, 1233, 0, 1235, 0, 0, 0, + 0, 0, 0, 0, 1107, 0, 0, 0, 0, 1104, 0, 0, 0, 0, 1239, 0, 1105, 0, 0, 0, + 1218, 0, 1245, 0, 0, 0, 0, 0, 1247, 0, 0, 0, 0, 0, 0, 1117, 0, 0, 0, + 1251, 1081, 0, 1253, 0, 0, 0, 0, 0, 0, 0, 1116, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 1255, 0, 0, 1263, 1118, 0, 1265, 0, 0, 1267, 0, 0, 1269, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1273, 0, 0, 0, 0, 0, 1261, 0, 0, 0, 0, + 0, 1111, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1142, 0, 0, 0, 0, 0, 1143, 0, 0, + 0, 0, 0, 0, 0, 0, 1242, 0, 0, 0, 0, 0, 1243, 0, 0, 0, 0, 0, 1258, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1259, 0, 0, 0, 0, 1570, 1571, 1573, 0, + 0, 0, 0, 1572, 0, 0, 0, 0, 0, 1574, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1730, 0, 0, 0, 0, 0, 1747, 0, 0, 0, 0, 0, 1728, 0, 0, 0, 0, 0, 0, 0, + 2345, 0, 0, 0, 0, 0, 2353, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2356, + 0, 0, 0, 0, 0, 0, 2507, 2508, 0, 0, 0, 0, 0, 0, 2891, 2888, 2892, 0, 0, + 0, 0, 0, 0, 0, 2964, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3018, 3020, 0, + 0, 0, 0, 3019, 0, 0, 0, 0, 0, 0, 0, 3144, 0, 0, 0, 0, 0, 0, 0, 3264, 0, + 0, 0, 0, 3274, 3271, 3272, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3275, 0, + 0, 0, 0, 0, 0, 0, 3402, 3404, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3403, + 0, 0, 0, 0, 0, 0, 0, 3546, 3548, 3550, 0, 0, 0, 3549, 0, 0, 0, 0, 0, 0, + 0, 0, 4134, 0, 0, 0, 0, 0, 0, 6918, 0, 0, 0, 0, 0, 6920, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 6922, 0, 0, 0, 0, 0, 6924, 0, 0, 0, 0, 0, 6926, + 0, 0, 0, 0, 0, 6930, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6971, 0, 0, + 0, 0, 0, 6973, 0, 0, 0, 0, 0, 6976, 0, 0, 0, 0, 0, 6977, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 6979, 0, 0, 0, 0, 0, 0, 7736, 0, 0, 0, 0, 0, + 7737, 0, 0, 0, 0, 0, 7772, 0, 0, 0, 0, 0, 7773, 0, 0, 0, 0, 0, 0, 0, + 7784, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7785, 0, 7852, 0, 0, 7862, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7853, 0, 0, 7863, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 7878, 0, 0, 0, 0, 0, 7879, 0, 0, 0, 0, 0, 7896, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 7897, 0, 0, 0, 7938, 7940, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 7942, 8064, 7939, 7941, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7943, 8065, + 0, 0, 0, 0, 0, 8066, 0, 0, 0, 0, 0, 8067, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 8068, 0, 0, 0, 0, 0, 8069, 0, 0, 0, 0, 0, 8070, 0, 0, 0, 0, 0, + 8071, 0, 0, 0, 0, 0, 0, 0, 0, 7946, 7948, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 7950, 8072, 7947, 7949, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7951, 8073, 0, 0, + 0, 0, 0, 8074, 0, 0, 0, 0, 0, 8075, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 8076, 0, 0, 0, 0, 0, 8077, 0, 0, 0, 0, 0, 8078, 0, 0, 0, 0, 0, 8079, + 0, 0, 0, 0, 0, 0, 0, 0, 7954, 7956, 0, 0, 0, 0, 7955, 7957, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 7962, 7964, 0, 0, 0, 0, 7963, 7965, 0, 0, 0, 0, + 7970, 7972, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7974, 8080, 7971, 7973, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 7975, 8081, 0, 0, 0, 0, 0, 8082, 0, 0, 0, 0, 0, + 8083, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8084, 0, 0, 0, 0, 0, 8085, + 0, 0, 0, 0, 0, 8086, 0, 0, 0, 0, 0, 8087, 0, 0, 0, 0, 0, 0, 0, 0, 7978, + 7980, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7982, 8088, 7979, 7981, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 7983, 8089, 0, 0, 0, 0, 0, 8090, 0, 0, 0, 0, 0, 8091, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8092, 0, 0, 0, 0, 0, 8093, 0, 0, + 0, 0, 0, 8094, 0, 0, 0, 0, 0, 8095, 0, 0, 0, 0, 0, 0, 0, 0, 7986, 7988, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7990, 0, 7987, 7989, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 7991, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7994, 7996, 0, 0, 7998, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 7995, 7997, 0, 0, 7999, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 8002, 8004, 0, 0, 0, 0, 8003, 8005, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 8010, 8012, 0, 0, 0, 0, 8011, 8013, 0, 0, 0, 0, 8018, 8020, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 8022, 0, 8019, 8021, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 8023, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8027, 8029, 0, 0, 8031, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 8034, 8036, 0, 0, 8038, 8096, 0, 0, 0, 0, 0, 0, 0, 0, 8035, + 8037, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8039, 8097, 0, 0, 0, 0, 0, 8098, 0, + 0, 0, 0, 0, 8099, 0, 0, 0, 0, 0, 8100, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 8101, 0, 0, 0, 0, 0, 8102, 0, 0, 0, 0, 0, 8103, 0, 0, 0, 0, 0, 0, + 0, 0, 8042, 8044, 0, 0, 8046, 8104, 0, 0, 0, 0, 0, 0, 0, 0, 8043, 8045, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8047, 8105, 0, 0, 0, 0, 0, 8106, 0, 0, 0, + 0, 0, 8107, 0, 0, 0, 0, 0, 8108, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 8109, 0, 0, 0, 0, 0, 8110, 0, 0, 0, 0, 0, 8111, 0, 0, 0, 0, 0, 8114, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8130, 0, 0, 0, 0, 0, 8178, 0, 0, 0, + 0, 0, 8119, 0, 0, 0, 0, 0, 0, 0, 0, 8141, 8142, 0, 0, 8143, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8135, 0, 0, 0, 0, 0, 8183, 0, 0, 0, 0, 0, + 0, 0, 0, 8157, 8158, 0, 0, 8159, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 8602, 0, 0, 0, 0, 0, 8603, 0, 0, 0, 0, 0, 8622, 0, 0, 0, 0, 0, 8653, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8655, 0, 0, 0, 0, 0, 8654, 0, 0, 0, + 0, 0, 8708, 0, 0, 0, 0, 0, 8713, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 8716, 0, 0, 0, 0, 0, 8740, 0, 0, 0, 0, 0, 8742, 0, 0, 0, 0, 0, 8769, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8772, 0, 0, 0, 0, 0, 8775, 0, 0, 0, + 0, 0, 8777, 0, 0, 0, 0, 0, 8813, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 8802, 0, 0, 0, 0, 0, 8816, 0, 0, 0, 0, 0, 8817, 0, 0, 0, 0, 0, 8820, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8821, 0, 0, 0, 0, 0, 8824, 0, 0, 0, + 0, 0, 8825, 0, 0, 0, 0, 0, 8832, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 8833, 0, 0, 0, 0, 0, 8928, 0, 0, 0, 0, 0, 8929, 0, 0, 0, 0, 0, 8836, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8837, 0, 0, 0, 0, 0, 8840, 0, 0, 0, + 0, 0, 8841, 0, 0, 0, 0, 0, 8930, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 8931, 0, 0, 0, 0, 0, 8876, 0, 0, 0, 0, 0, 8877, 0, 0, 0, 0, 0, 8878, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8879, 0, 0, 0, 0, 0, 8938, 0, 0, 0, + 0, 0, 8939, 0, 0, 0, 0, 0, 8940, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 8941, 0, 0, 0, 0, 0, 0, 12436, 0, 0, 0, 0, 0, 12364, 0, 0, 0, 0, 0, + 12366, 0, 0, 0, 0, 0, 12368, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 12370, 0, 0, 0, 0, 0, 12372, 0, 0, 0, 0, 0, 12374, 0, 0, 0, 0, 0, 12376, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12378, 0, 0, 0, 0, 0, 12380, 0, 0, + 0, 0, 0, 12382, 0, 0, 0, 0, 0, 12384, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 12386, 0, 0, 0, 0, 0, 12389, 0, 0, 0, 0, 0, 12391, 0, 0, 0, 0, 0, + 12393, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12400, 12401, 0, 0, 0, 0, + 12403, 12404, 0, 0, 0, 0, 12406, 12407, 0, 0, 0, 0, 12409, 12410, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12412, 12413, 0, 0, 0, 0, 12446, 0, 0, 0, + 0, 0, 12532, 0, 0, 0, 0, 0, 12460, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 12462, 0, 0, 0, 0, 0, 12464, 0, 0, 0, 0, 0, 12466, 0, 0, 0, 0, 0, 12468, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12470, 0, 0, 0, 0, 0, 12472, 0, 0, + 0, 0, 0, 12474, 0, 0, 0, 0, 0, 12476, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 12478, 0, 0, 0, 0, 0, 12480, 0, 0, 0, 0, 0, 12482, 0, 0, 0, 0, 0, + 12485, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12487, 0, 0, 0, 0, 0, + 12489, 0, 0, 0, 0, 0, 12496, 12497, 0, 0, 0, 0, 12499, 12500, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 12502, 12503, 0, 0, 0, 0, 12505, 12506, 0, 0, 0, + 0, 12508, 12509, 0, 0, 0, 0, 12535, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 12536, 0, 0, 0, 0, 0, 12537, 0, 0, 0, 0, 0, 12538, 0, 0, 0, 0, 0, + 12542, 0, }; static const change_record change_records_3_2_0[] = { @@ -4929,11 +4700,6 @@ { 255, 29, 255, 255, 0 }, { 255, 26, 255, 255, 0 }, { 5, 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 }, @@ -4963,42 +4729,40 @@ { 255, 23, 255, 255, 0 }, { 9, 255, 255, 255, 0 }, { 255, 20, 255, 255, 0 }, + { 255, 255, 255, 255, -1 }, { 255, 255, 255, 255, 1e+16 }, { 255, 255, 255, 255, 1e+20 }, { 255, 19, 255, 255, 0 }, { 15, 255, 255, 255, 0 }, { 255, 19, 255, 255, -1 }, - { 1, 255, 255, 0, 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, 2, 15, 16, 17, - 18, 19, 20, 21, 22, 23, 2, 2, 2, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, - 34, 2, 2, 2, 35, 36, 2, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, - 49, 2, 50, 2, 2, 51, 52, 53, 54, 55, 2, 2, 56, 57, 58, 2, 2, 59, 60, 61, - 62, 63, 63, 2, 2, 2, 2, 64, 2, 65, 66, 67, 68, 69, 2, 2, 2, 2, 70, 71, - 72, 73, 74, 75, 76, 77, 78, 2, 2, 2, 2, 2, 2, 79, 2, 2, 2, 2, 2, 80, 2, + 0, 1, 2, 2, 3, 4, 5, 6, 2, 7, 8, 9, 10, 11, 12, 13, 2, 2, 14, 15, 16, 17, + 18, 19, 20, 21, 22, 2, 2, 2, 23, 24, 25, 26, 2, 2, 27, 28, 29, 30, 2, 2, + 2, 2, 2, 31, 2, 32, 33, 34, 35, 36, 37, 2, 38, 39, 40, 2, 41, 42, 2, 43, + 2, 2, 44, 45, 46, 47, 48, 2, 2, 49, 50, 51, 2, 2, 52, 53, 2, 54, 55, 55, + 2, 2, 2, 2, 56, 2, 57, 58, 59, 60, 61, 2, 2, 2, 2, 62, 63, 64, 65, 66, + 67, 68, 69, 70, 2, 2, 2, 2, 2, 2, 71, 2, 2, 2, 2, 2, 72, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 81, 2, 82, 2, 2, 2, 2, 2, 2, 2, 2, 83, - 84, 2, 2, 2, 2, 2, 2, 2, 85, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 86, 87, + 2, 2, 2, 2, 2, 2, 2, 73, 2, 74, 2, 2, 2, 2, 2, 2, 2, 2, 75, 76, 2, 2, 2, + 2, 2, 2, 2, 77, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 78, 79, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 88, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 80, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 89, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 90, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 91, 92, 2, 2, 2, 2, 2, 2, 2, 2, 93, 48, 48, - 94, 95, 48, 96, 97, 98, 99, 100, 101, 102, 2, 103, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 81, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 82, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 83, 84, 2, 2, 2, 2, 2, 2, 2, 2, 2, 41, 41, 85, 86, 41, 87, + 88, 89, 90, 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, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 104, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 105, 106, 107, 108, 109, 2, 2, 2, 2, 110, 111, 2, 112, 113, 114, - 115, 116, 117, 2, 118, 119, 120, 121, 122, 2, 2, 2, 2, 2, 2, 123, 2, 124, - 2, 125, 2, 126, 2, 127, 2, 2, 2, 128, 2, 2, 2, 2, 129, 2, 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, 93, 94, 95, + 96, 2, 2, 2, 2, 97, 98, 2, 99, 100, 101, 102, 103, 104, 2, 105, 106, 107, + 108, 109, 2, 2, 2, 2, 2, 2, 110, 2, 111, 2, 112, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 48, 48, 48, 48, 48, 48, 130, 2, 131, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 48, 48, 48, 48, 48, 48, 48, 48, 132, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 41, 41, 41, 41, 41, 41, 113, 2, 114, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, @@ -5012,34 +4776,33 @@ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 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, 2, 134, 2, 135, 2, 2, 136, 2, 2, 2, 137, 138, 139, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 140, 141, 142, 143, - 144, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 145, 146, 90, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 79, 147, 2, 148, 149, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 115, 2, 116, 2, 117, 2, 2, 118, 2, 2, 2, 119, + 120, 121, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 150, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 151, 2, 2, 2, + 2, 2, 2, 122, 123, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 124, 125, 82, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 71, 126, 2, 127, 128, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 152, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 129, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 130, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 131, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 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, 132, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, - 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, - 48, 154, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 150, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 129, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, @@ -5272,10 +5035,9 @@ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 48, - 155, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 41, 133, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, @@ -5336,7 +5098,10 @@ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 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[] = { @@ -5384,7 +5149,7 @@ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 0, 0, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -5414,189 +5179,150 @@ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 7, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 0, 0, 0, 0, 0, - 0, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 12, 13, 14, 15, 16, 0, 0, 7, 0, 0, 0, 0, 0, 7, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 0, 0, 0, 0, 0, - 0, 0, 0, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 0, - 17, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 0, 0, 0, 7, 7, 7, 7, 7, 7, - 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 18, 18, 18, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 7, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, - 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 0, 12, 0, 0, 0, 0, 0, 0, 12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 7, 7, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, + 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 7, 7, 7, 7, 7, 7, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 13, 13, 13, 13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, - 7, 7, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 7, 0, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, + 0, 7, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 0, 0, 0, 0, 7, 7, 7, 7, 7, + 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 7, + 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 0, 0, 0, 0, 0, - 0, 0, 0, 19, 20, 21, 22, 23, 24, 25, 26, 27, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 0, 7, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 0, 0, 0, 0, 0, 0, + 0, 0, 14, 15, 16, 17, 18, 19, 20, 21, 22, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 18, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 23, 23, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 24, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 28, 28, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 29, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, - 0, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 0, 0, 0, 0, 7, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 0, 0, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, - 0, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 7, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, + 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, + 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, - 0, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 7, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, + 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, - 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, @@ -5605,198 +5331,195 @@ 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 0, 0, 0, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, - 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 30, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 27, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, 0, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, + 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 28, 0, 0, 0, 29, 30, 31, 32, 33, 34, + 1, 1, 0, 0, 0, 0, 28, 6, 4, 5, 29, 30, 31, 32, 33, 34, 1, 1, 0, 0, 0, 0, + 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, 0, 7, 7, 7, - 7, 7, 7, 7, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 33, 8, 0, - 0, 34, 35, 36, 37, 38, 39, 1, 1, 0, 0, 0, 8, 33, 6, 4, 5, 34, 35, 36, 37, - 38, 39, 1, 1, 0, 0, 0, 0, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, + 0, 0, 0, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 40, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 36, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 41, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, 37, 38, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 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, 43, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 44, 44, 44, 44, 44, 44, 44, 44, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, + 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, + 39, 39, 39, 39, 39, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 39, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 7, 7, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 0, 7, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, + 7, 7, 7, 0, 0, 0, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 7, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 32, - 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, - 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, - 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, - 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, - 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, - 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, - 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, - 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, + 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, + 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, + 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, + 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, + 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, + 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, + 27, 27, 27, 27, 27, 27, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 0, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 0, 7, 7, 7, 7, 7, 7, 7, 0, 7, 7, 7, 7, 7, 7, 7, 0, 7, 7, 7, 7, 7, 7, 7, 0, 7, 7, 7, 7, 7, 7, 7, 0, 7, 7, 7, 7, 7, 7, 7, 0, - 7, 7, 7, 7, 7, 7, 7, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 0, 7, 7, 7, 7, 7, 7, 7, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, + 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 41, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 41, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 41, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 41, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 46, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, + 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 41, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 41, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 41, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 41, 0, 0, 0, 0, 0, 0, 0, 41, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 41, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 43, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -5805,56 +5528,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, 41, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, - 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 41, 0, 0, 0, 0, 0, 0, 0, 41, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 41, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 41, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -5862,70 +5579,49 @@ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, - 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, + 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 7, 7, + 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 41, 0, 0, 0, 0, + 0, 0, 0, 41, 0, 0, 0, 0, 41, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 41, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 41, 0, 41, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 41, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 0, - 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -5934,247 +5630,199 @@ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 18, 18, 18, 18, 18, 18, 0, 0, 0, 1, 1, 18, - 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 13, 13, 13, 13, 13, 13, 0, 0, 0, 1, 1, 13, 13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, 40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 49, 0, 0, 0, 0, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 0, 7, 7, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 0, 0, 0, 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, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 7, + 7, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 7, 7, 7, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, + 0, 0, 0, 7, 7, 7, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, + 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 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, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, + 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, + 0, 0, 0, 0, 0, 41, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, - 7, 7, 0, 0, 7, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 0, 7, 7, 0, 0, 0, 7, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, + 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, 0, 7, 7, 0, 0, 0, 0, 0, - 7, 7, 7, 7, 7, 7, 7, 7, 0, 7, 7, 7, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 7, 7, 7, 0, - 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 0, 0, 7, 0, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 7, 7, 0, 0, 0, 7, + 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, + 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 7, 7, 7, 7, 0, 7, 7, 0, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 0, + 7, 7, 7, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 7, 7, 7, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, + 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, + 0, 0, 0, 0, 0, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 7, 0, 0, 7, 0, - 0, 0, 7, 0, 0, 0, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, - 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 7, 0, 7, 7, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, - 7, 7, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 41, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 41, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, - 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 41, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 41, 0, + 0, 0, 0, 0, 0, 0, 0, 41, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 41, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 41, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 41, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 41, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 41, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 41, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 41, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 0, 0, 0, 0, 0, 0, 0, 0, 41, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 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) Modified: python/branches/py3k/Modules/unicodename_db.h ============================================================================== --- python/branches/py3k/Modules/unicodename_db.h (original) +++ python/branches/py3k/Modules/unicodename_db.h Fri Mar 19 02:17:46 2010 @@ -6,614 +6,498 @@ static unsigned char lexicon[] = { 76, 69, 84, 84, 69, 210, 87, 73, 84, 200, 83, 77, 65, 76, 204, 83, 89, 76, 76, 65, 66, 76, 197, 83, 73, 71, 206, 67, 65, 80, 73, 84, 65, 204, - 76, 65, 84, 73, 206, 89, 201, 67, 74, 203, 69, 71, 89, 80, 84, 73, 65, - 206, 72, 73, 69, 82, 79, 71, 76, 89, 80, 200, 65, 82, 65, 66, 73, 195, - 67, 79, 77, 80, 65, 84, 73, 66, 73, 76, 73, 84, 217, 77, 65, 84, 72, 69, - 77, 65, 84, 73, 67, 65, 204, 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, 68, 73, 71, 73, 212, 66, 79, 76, - 196, 72, 65, 78, 71, 85, 204, 71, 82, 69, 69, 203, 76, 73, 71, 65, 84, - 85, 82, 197, 65, 78, 196, 77, 85, 83, 73, 67, 65, 204, 84, 73, 77, 69, - 211, 69, 84, 72, 73, 79, 80, 73, 195, 86, 79, 87, 69, 204, 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, 67, 73, 82, 67, 76, 69, - 196, 70, 79, 210, 67, 79, 77, 66, 73, 78, 73, 78, 199, 84, 65, 201, 86, - 65, 201, 70, 73, 78, 65, 204, 83, 81, 85, 65, 82, 197, 86, 65, 82, 73, - 65, 84, 73, 79, 206, 76, 69, 70, 212, 66, 82, 65, 73, 76, 76, 197, 80, - 65, 84, 84, 69, 82, 206, 82, 73, 71, 72, 212, 66, 89, 90, 65, 78, 84, 73, - 78, 197, 73, 83, 79, 76, 65, 84, 69, 196, 194, 65, 66, 79, 86, 69, 128, - 68, 79, 85, 66, 76, 197, 75, 65, 84, 65, 75, 65, 78, 193, 75, 65, 78, 71, - 88, 201, 78, 85, 77, 66, 69, 210, 83, 73, 71, 78, 128, 66, 69, 76, 79, - 87, 128, 76, 73, 78, 69, 65, 210, 77, 79, 68, 73, 70, 73, 69, 210, 84, - 73, 66, 69, 84, 65, 206, 65, 128, 68, 79, 212, 77, 69, 69, 205, 77, 89, - 65, 78, 77, 65, 210, 67, 65, 82, 82, 73, 69, 210, 65, 82, 82, 79, 87, - 128, 73, 78, 73, 84, 73, 65, 204, 87, 72, 73, 84, 197, 85, 128, 86, 69, - 82, 84, 73, 67, 65, 204, 89, 69, 200, 65, 66, 79, 86, 197, 73, 128, 79, - 128, 67, 79, 80, 84, 73, 195, 65, 82, 82, 79, 215, 77, 79, 78, 71, 79, - 76, 73, 65, 206, 77, 65, 82, 75, 128, 75, 72, 77, 69, 210, 68, 69, 86, - 65, 78, 65, 71, 65, 82, 201, 84, 73, 76, 197, 80, 65, 82, 69, 78, 84, 72, - 69, 83, 73, 90, 69, 196, 84, 72, 65, 205, 66, 76, 65, 67, 203, 74, 79, - 78, 71, 83, 69, 79, 78, 199, 66, 79, 216, 72, 69, 66, 82, 69, 215, 80, - 76, 85, 211, 68, 82, 65, 87, 73, 78, 71, 211, 82, 73, 71, 72, 84, 87, 65, - 82, 68, 211, 67, 72, 79, 83, 69, 79, 78, 199, 83, 84, 82, 79, 75, 69, + 76, 65, 84, 73, 206, 89, 201, 67, 74, 203, 65, 82, 65, 66, 73, 195, 67, + 79, 77, 80, 65, 84, 73, 66, 73, 76, 73, 84, 217, 77, 65, 84, 72, 69, 77, + 65, 84, 73, 67, 65, 204, 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, 79, 76, 196, 71, 82, 69, 69, 203, + 76, 73, 71, 65, 84, 85, 82, 197, 68, 73, 71, 73, 212, 65, 78, 196, 77, + 85, 83, 73, 67, 65, 204, 84, 73, 77, 69, 211, 69, 84, 72, 73, 79, 80, 73, + 195, 72, 65, 78, 71, 85, 204, 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, 86, 79, 87, 69, 204, 70, 79, 210, 67, 73, 82, 67, 76, 69, + 196, 86, 65, 201, 70, 73, 78, 65, 204, 67, 79, 77, 66, 73, 78, 73, 78, + 199, 83, 81, 85, 65, 82, 197, 86, 65, 82, 73, 65, 84, 73, 79, 206, 66, + 82, 65, 73, 76, 76, 197, 80, 65, 84, 84, 69, 82, 206, 82, 73, 71, 72, + 212, 76, 69, 70, 212, 66, 89, 90, 65, 78, 84, 73, 78, 197, 73, 83, 79, + 76, 65, 84, 69, 196, 194, 65, 66, 79, 86, 69, 128, 68, 79, 85, 66, 76, + 197, 75, 65, 84, 65, 75, 65, 78, 193, 75, 65, 78, 71, 88, 201, 76, 73, + 78, 69, 65, 210, 66, 69, 76, 79, 87, 128, 77, 79, 68, 73, 70, 73, 69, + 210, 83, 73, 71, 78, 128, 84, 73, 66, 69, 84, 65, 206, 77, 69, 69, 205, + 68, 79, 212, 65, 128, 65, 82, 82, 79, 87, 128, 73, 78, 73, 84, 73, 65, + 204, 67, 65, 82, 82, 73, 69, 210, 86, 69, 82, 84, 73, 67, 65, 204, 89, + 69, 200, 87, 72, 73, 84, 197, 65, 66, 79, 86, 197, 78, 85, 77, 66, 69, + 210, 85, 128, 65, 82, 82, 79, 215, 77, 79, 78, 71, 79, 76, 73, 65, 206, + 77, 89, 65, 78, 77, 65, 210, 67, 79, 80, 84, 73, 195, 75, 72, 77, 69, + 210, 79, 128, 73, 128, 84, 73, 76, 197, 77, 65, 82, 75, 128, 66, 79, 216, + 72, 69, 66, 82, 69, 215, 80, 76, 85, 211, 68, 82, 65, 87, 73, 78, 71, + 211, 82, 73, 71, 72, 84, 87, 65, 82, 68, 211, 83, 84, 82, 79, 75, 69, 128, 72, 65, 76, 70, 87, 73, 68, 84, 200, 66, 65, 76, 73, 78, 69, 83, - 197, 71, 69, 79, 82, 71, 73, 65, 206, 72, 79, 79, 75, 128, 73, 68, 69, - 79, 71, 82, 65, 205, 73, 68, 69, 79, 71, 82, 65, 80, 72, 73, 195, 65, 76, - 69, 198, 83, 89, 77, 66, 79, 76, 128, 84, 79, 128, 83, 67, 82, 73, 80, - 212, 84, 87, 79, 128, 79, 86, 69, 210, 213, 72, 69, 65, 86, 217, 79, 78, - 69, 128, 85, 208, 76, 79, 215, 70, 85, 76, 76, 87, 73, 68, 84, 200, 72, - 65, 200, 68, 79, 87, 206, 69, 81, 85, 65, 204, 66, 82, 65, 67, 75, 69, - 84, 128, 72, 73, 71, 200, 79, 198, 84, 65, 199, 68, 79, 77, 73, 78, 207, - 78, 85, 77, 69, 82, 73, 195, 70, 82, 65, 75, 84, 85, 210, 74, 85, 78, 71, - 83, 69, 79, 78, 199, 77, 65, 76, 65, 89, 65, 76, 65, 205, 84, 87, 207, - 71, 76, 65, 71, 79, 76, 73, 84, 73, 195, 67, 72, 65, 82, 65, 67, 84, 69, - 210, 76, 69, 70, 84, 87, 65, 82, 68, 211, 77, 69, 68, 73, 65, 204, 84, - 69, 76, 85, 71, 213, 66, 69, 78, 71, 65, 76, 201, 79, 78, 197, 65, 82, - 77, 69, 78, 73, 65, 206, 74, 65, 86, 65, 78, 69, 83, 197, 74, 69, 69, - 205, 66, 65, 82, 128, 72, 73, 82, 65, 71, 65, 78, 193, 87, 69, 83, 84, - 45, 67, 82, 69, 197, 73, 68, 69, 79, 71, 82, 65, 80, 200, 66, 65, 77, 85, - 205, 84, 72, 65, 201, 75, 65, 78, 78, 65, 68, 193, 67, 72, 69, 82, 79, - 75, 69, 197, 72, 65, 76, 198, 84, 79, 78, 197, 78, 69, 215, 79, 82, 73, - 89, 193, 84, 72, 82, 69, 197, 67, 72, 65, 205, 71, 85, 74, 65, 82, 65, - 84, 201, 76, 85, 197, 70, 79, 85, 82, 128, 72, 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, 84, 72, 82, 69, 69, 128, 68, 69, 83, 69, 82, 69, 212, 83, 73, - 78, 72, 65, 76, 193, 71, 85, 82, 77, 85, 75, 72, 201, 77, 65, 82, 203, - 78, 79, 84, 65, 84, 73, 79, 206, 83, 89, 82, 73, 65, 195, 86, 79, 67, 65, - 76, 73, 195, 65, 67, 85, 84, 69, 128, 76, 69, 80, 67, 72, 193, 76, 73, - 71, 72, 212, 76, 79, 78, 199, 84, 85, 82, 75, 73, 195, 68, 79, 85, 66, - 76, 69, 45, 83, 84, 82, 85, 67, 203, 70, 73, 86, 69, 128, 75, 65, 128, - 84, 65, 77, 73, 204, 86, 73, 69, 212, 65, 80, 204, 70, 85, 78, 67, 84, - 73, 79, 78, 65, 204, 72, 65, 77, 90, 193, 83, 73, 88, 128, 84, 69, 76, - 69, 71, 82, 65, 80, 200, 89, 65, 128, 69, 73, 71, 72, 84, 128, 72, 79, - 82, 73, 90, 79, 78, 84, 65, 204, 80, 65, 128, 68, 79, 84, 211, 78, 73, - 78, 69, 128, 83, 69, 86, 69, 78, 128, 66, 65, 82, 194, 68, 65, 83, 73, - 193, 75, 65, 73, 84, 72, 201, 76, 73, 77, 66, 213, 77, 65, 128, 77, 65, - 75, 83, 85, 82, 193, 83, 128, 84, 207, 66, 79, 80, 79, 77, 79, 70, 207, - 75, 72, 65, 82, 79, 83, 72, 84, 72, 201, 76, 65, 207, 82, 65, 128, 83, - 81, 85, 65, 82, 69, 196, 72, 69, 88, 65, 71, 82, 65, 205, 75, 193, 78, - 65, 128, 80, 83, 73, 76, 201, 82, 69, 86, 69, 82, 83, 69, 196, 77, 79, - 78, 79, 83, 80, 65, 67, 197, 78, 79, 212, 83, 65, 77, 65, 82, 73, 84, 65, - 206, 83, 84, 82, 79, 75, 197, 84, 85, 82, 78, 69, 196, 86, 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, 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, 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, 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, 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, 128, 89, 89, 128, 89, 87, 79, 79, + 197, 66, 76, 65, 67, 203, 71, 69, 79, 82, 71, 73, 65, 206, 72, 79, 79, + 75, 128, 73, 68, 69, 79, 71, 82, 65, 205, 73, 68, 69, 79, 71, 82, 65, 80, + 72, 73, 195, 84, 65, 201, 65, 76, 69, 198, 80, 65, 82, 69, 78, 84, 72, + 69, 83, 73, 90, 69, 196, 68, 69, 86, 65, 78, 65, 71, 65, 82, 201, 83, 67, + 82, 73, 80, 212, 84, 79, 128, 213, 83, 89, 77, 66, 79, 76, 128, 85, 208, + 70, 85, 76, 76, 87, 73, 68, 84, 200, 72, 65, 200, 68, 79, 87, 206, 66, + 82, 65, 67, 75, 69, 84, 128, 69, 81, 85, 65, 204, 79, 198, 79, 86, 69, + 210, 84, 65, 199, 68, 79, 77, 73, 78, 207, 70, 82, 65, 75, 84, 85, 210, + 78, 85, 77, 69, 82, 73, 195, 72, 69, 65, 86, 217, 84, 87, 79, 128, 77, + 65, 76, 65, 89, 65, 76, 65, 205, 71, 76, 65, 71, 79, 76, 73, 84, 73, 195, + 67, 72, 65, 82, 65, 67, 84, 69, 210, 76, 69, 70, 84, 87, 65, 82, 68, 211, + 79, 78, 69, 128, 84, 69, 76, 85, 71, 213, 65, 82, 77, 69, 78, 73, 65, + 206, 66, 69, 78, 71, 65, 76, 201, 67, 72, 79, 83, 69, 79, 78, 199, 74, + 69, 69, 205, 77, 69, 68, 73, 65, 204, 66, 65, 82, 128, 72, 73, 82, 65, + 71, 65, 78, 193, 87, 69, 83, 84, 45, 67, 82, 69, 197, 84, 72, 65, 201, + 75, 65, 78, 78, 65, 68, 193, 67, 72, 69, 82, 79, 75, 69, 197, 72, 65, 76, + 198, 73, 68, 69, 79, 71, 82, 65, 80, 200, 79, 82, 73, 89, 193, 84, 87, + 207, 67, 72, 65, 205, 71, 85, 74, 65, 82, 65, 84, 201, 74, 79, 78, 71, + 83, 69, 79, 78, 199, 78, 69, 215, 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, 76, 85, 197, 83, 73, 78, 72, 65, 76, 193, 71, 85, 82, + 77, 85, 75, 72, 201, 78, 79, 84, 65, 84, 73, 79, 206, 83, 89, 82, 73, 65, + 195, 84, 72, 82, 69, 197, 86, 79, 67, 65, 76, 73, 195, 72, 65, 128, 65, + 67, 85, 84, 69, 128, 76, 69, 80, 67, 72, 193, 76, 73, 71, 72, 212, 70, + 79, 85, 82, 128, 68, 79, 85, 66, 76, 69, 45, 83, 84, 82, 85, 67, 203, 84, + 65, 77, 73, 204, 65, 80, 204, 70, 85, 78, 67, 84, 73, 79, 78, 65, 204, + 72, 65, 77, 90, 193, 77, 65, 82, 203, 84, 72, 82, 69, 69, 128, 84, 69, + 76, 69, 71, 82, 65, 80, 200, 79, 78, 197, 72, 79, 82, 73, 90, 79, 78, 84, + 65, 204, 74, 85, 78, 71, 83, 69, 79, 78, 199, 66, 65, 82, 194, 68, 65, + 83, 73, 193, 70, 73, 86, 69, 128, 76, 73, 77, 66, 213, 77, 65, 75, 83, + 85, 82, 193, 66, 79, 80, 79, 77, 79, 70, 207, 75, 65, 128, 75, 72, 65, + 82, 79, 83, 72, 84, 72, 201, 76, 65, 207, 84, 207, 72, 69, 88, 65, 71, + 82, 65, 205, 76, 79, 78, 199, 83, 73, 88, 128, 76, 79, 215, 80, 83, 73, + 76, 201, 69, 73, 71, 72, 84, 128, 75, 193, 77, 79, 78, 79, 83, 80, 65, + 67, 197, 78, 79, 212, 89, 65, 128, 78, 73, 78, 69, 128, 83, 128, 83, 69, + 86, 69, 78, 128, 83, 84, 82, 79, 75, 197, 86, 128, 68, 79, 84, 211, 77, + 65, 128, 82, 69, 86, 69, 82, 83, 69, 196, 72, 73, 71, 200, 75, 72, 65, + 200, 76, 79, 87, 69, 210, 78, 75, 207, 84, 73, 76, 68, 69, 128, 84, 79, + 78, 197, 78, 85, 77, 69, 82, 65, 204, 82, 65, 128, 84, 85, 82, 78, 69, + 196, 65, 69, 71, 69, 65, 206, 72, 128, 80, 65, 128, 71, 128, 76, 65, 71, + 65, 194, 80, 72, 65, 71, 83, 45, 80, 193, 67, 89, 80, 82, 73, 79, 212, + 68, 73, 65, 69, 82, 69, 83, 73, 83, 128, 83, 85, 78, 68, 65, 78, 69, 83, + 197, 84, 73, 70, 73, 78, 65, 71, 200, 68, 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, 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, + 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, 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, 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, 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, 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, + 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, 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, 85, 75, 65, 76, 69, 65, 80, 73, 78, 84, 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, 80, 128, 89, 85, 79, 88, 128, 89, 85, 79, 84, 128, - 89, 85, 79, 80, 128, 89, 85, 79, 128, 89, 85, 68, 72, 128, 89, 85, 68, - 200, 89, 85, 65, 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, 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, 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, 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, 206, 89, - 69, 76, 76, 79, 87, 128, 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, 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, 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, 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, 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, 65, 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, 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, 128, 87, 82, 79, 78, 71, 128, - 87, 82, 73, 84, 73, 78, 199, 87, 82, 69, 65, 84, 200, 87, 82, 65, 80, - 128, 87, 79, 88, 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, 65, - 78, 128, 87, 79, 76, 79, 83, 79, 128, 87, 79, 69, 128, 87, 79, 65, 128, - 87, 73, 84, 72, 79, 85, 212, 87, 73, 78, 84, 69, 82, 128, 87, 73, 78, 74, - 65, 128, 87, 73, 78, 69, 128, 87, 73, 78, 68, 85, 128, 87, 73, 78, 68, - 128, 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, 71, 128, 87, 69, 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, 69, 78, 128, 87, 69, 68, 71, 69, 45, 84, 65, 73, 76, 69, 196, 87, - 69, 65, 80, 79, 78, 128, 87, 66, 128, 87, 65, 89, 128, 87, 65, 217, 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, 69, 128, 87, 65, - 86, 197, 87, 65, 85, 128, 87, 65, 84, 84, 79, 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, 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, 84, 128, 86, 85, 82, 88, 128, 86, - 85, 82, 128, 86, 85, 80, 128, 86, 85, 76, 71, 65, 210, 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, 76, 85, 77, 197, 86, 79, 76, 84, 65, 71, - 197, 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, 204, 86, - 79, 128, 86, 73, 88, 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, 78, 69, 128, 86, 73, 78, 128, 86, 73, 76, - 76, 65, 71, 69, 128, 86, 73, 69, 88, 128, 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, 65, 128, 86, 73, 67, 84, 79, 82, 217, 86, 73, 128, 86, 69, 88, 128, - 86, 69, 87, 128, 86, 69, 215, 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, 80, 128, 86, 69, 78, 68, 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, 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, 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, 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, 50, 128, 85, 83, 72, 128, 85, 83, 200, - 85, 83, 69, 196, 85, 83, 69, 128, 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, 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, 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, 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, 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, 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, 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, 76, 73, 78, 197, 84, 87, 79, 45, 72, 69, 65, 68, 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, 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, - 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, 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, 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, - 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, 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, 73, 128, 84, 84, 72, 87, 69, 128, 84, 84, - 72, 79, 79, 128, 84, 84, 72, 79, 128, 84, 84, 72, 73, 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, 69, 128, 84, 84, 65, 89, 65, 78, 78, 65, - 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, 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, 69, 128, 84, 82, 85, 67, 75, 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, 75, 85, 84, 65, 83, 84, 201, 84, 82, - 79, 69, 90, 69, 78, 73, 65, 206, 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, 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, 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, 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, 83, 83, 73, 79, 78, 128, 84, 82, - 65, 78, 83, 77, 73, 83, 83, 73, 79, 206, 84, 82, 65, 70, 70, 73, 67, 128, - 84, 82, 65, 68, 197, 84, 82, 65, 67, 75, 128, 84, 82, 128, 84, 79, 88, - 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, 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, 128, 84, 79, 78, 79, 83, 128, 84, - 79, 78, 71, 85, 69, 128, 84, 79, 78, 71, 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, 76, 79, 78, 71, - 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, 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, 76, 79, 128, 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, 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, 65, 71, 77, 65, 128, 84, 73, 77, 69, 83, - 128, 84, 73, 77, 69, 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, 73, 128, 84, 73, 71, 72, 212, 84, 73, 71, 69, 82, - 128, 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, 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, 128, - 84, 72, 82, 79, 85, 71, 72, 128, 84, 72, 82, 79, 85, 71, 200, 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, 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, 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, 89, 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, 69, 69, 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, 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, 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, - 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, 71, - 197, 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, 73, 83, 72, 193, 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, 73, 87, 83, 128, 84, 69, 71, 69, 72, - 128, 84, 69, 197, 84, 69, 68, 85, 78, 71, 128, 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, 45, 85, 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, 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, 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, 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, 199, 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, 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, 128, 84, 65, 67, 75, 128, 84, 65, 67, 203, 84, 65, 66, 85, 76, - 65, 84, 73, 79, 78, 128, 84, 65, 66, 76, 69, 128, 84, 65, 66, 128, 84, - 65, 194, 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, 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, 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, 82, 88, 128, 83, 89, 82, 77, 65, - 84, 73, 75, 73, 128, 83, 89, 82, 77, 65, 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, 77, 77, 69, 84, 82, 89, 128, 83, 89, 77, 77, 69, 84, 82, 73, 195, 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, 65, 128, 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, 73, 128, 83, 87, - 73, 128, 83, 87, 71, 128, 83, 87, 69, 69, 84, 128, 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, 82, 88, 128, 83, 85, 82, 82, 79, - 85, 78, 68, 128, 83, 85, 82, 82, 79, 85, 78, 196, 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, 128, 83, 85, 79, 88, 128, - 83, 85, 79, 80, 128, 83, 85, 79, 128, 83, 85, 78, 71, 128, 83, 85, 78, - 68, 65, 78, 69, 83, 197, 83, 85, 78, 128, 83, 85, 206, 83, 85, 77, 77, + 85, 80, 128, 89, 85, 79, 88, 128, 89, 85, 79, 84, 128, 89, 85, 79, 80, + 128, 89, 85, 79, 128, 89, 85, 68, 72, 128, 89, 85, 68, 200, 89, 85, 65, + 78, 128, 89, 85, 45, 89, 69, 79, 128, 89, 85, 45, 89, 69, 128, 89, 85, + 45, 85, 128, 89, 85, 45, 73, 128, 89, 85, 45, 69, 79, 128, 89, 85, 45, + 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, 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, 80, 128, 89, 79, 79, 128, 89, 79, 77, + 79, 128, 89, 79, 71, 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, 128, + 89, 207, 89, 78, 128, 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, 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, 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, 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, + 85, 128, 89, 69, 79, 45, 79, 128, 89, 69, 206, 89, 69, 76, 76, 79, 87, + 128, 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, 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, 71, 128, 89, 65, 78, 199, 89, 65, 78, 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, 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, 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, 65, 128, 89, 65, 45, 89, 79, 128, 89, + 65, 45, 79, 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, 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, 87, 89, 78, 78, 128, 87, 89, 78, 206, 87, 86, 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, 128, 87, 82, 79, 78, 71, 128, 87, 82, 73, 84, + 73, 78, 199, 87, 82, 69, 65, 84, 200, 87, 82, 65, 80, 128, 87, 79, 88, + 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, 65, 78, 128, 87, 79, 76, + 79, 83, 79, 128, 87, 79, 69, 128, 87, 79, 65, 128, 87, 73, 78, 84, 69, + 82, 128, 87, 73, 78, 74, 65, 128, 87, 73, 78, 69, 128, 87, 73, 78, 68, + 85, 128, 87, 73, 78, 68, 128, 87, 73, 78, 128, 87, 73, 71, 71, 76, 217, + 87, 73, 68, 69, 45, 72, 69, 65, 68, 69, 196, 87, 73, 68, 197, 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, 71, 128, 87, 69, 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, 69, 78, 128, 87, 69, 68, 71, 69, 45, 84, 65, 73, 76, 69, 196, 87, 69, + 65, 80, 79, 78, 128, 87, 66, 128, 87, 65, 88, 128, 87, 65, 87, 128, 87, + 65, 215, 87, 65, 86, 217, 87, 65, 86, 69, 128, 87, 65, 86, 197, 87, 65, + 85, 128, 87, 65, 84, 84, 79, 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, 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, 69, 78, 128, 87, 65, 69, 128, 87, 65, 65, 86, 85, 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, 84, 128, 86, 85, 82, 88, 128, 86, 85, 82, 128, 86, + 85, 80, 128, 86, 85, 76, 71, 65, 210, 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, 76, 85, 77, 197, 86, 79, 76, 84, 65, 71, 197, 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, 204, 86, 79, 128, 86, 73, + 88, 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, 78, 69, 128, 86, 73, 78, 128, 86, 73, 76, 76, 65, 71, 69, + 128, 86, 73, 69, 88, 128, 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, 65, 128, 86, + 73, 67, 84, 79, 82, 217, 86, 73, 128, 86, 69, 88, 128, 86, 69, 87, 128, + 86, 69, 215, 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, 80, 128, + 86, 69, 78, 68, 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, + 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, + 128, 86, 65, 78, 69, 128, 86, 65, 76, 76, 69, 89, 128, 86, 65, 65, 86, + 85, 128, 86, 65, 65, 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, + 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, 50, 128, 85, + 83, 72, 128, 85, 83, 200, 85, 83, 69, 196, 85, 83, 69, 128, 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, 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, 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, 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, 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, 76, 85, 128, 85, 76, 213, 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, 69, 128, 85, 69, + 128, 85, 68, 85, 71, 128, 85, 68, 65, 84, 84, 65, 128, 85, 68, 65, 65, + 84, 128, 85, 68, 128, 85, 196, 85, 67, 128, 85, 66, 85, 70, 73, 76, 73, + 128, 85, 66, 65, 68, 65, 77, 65, 128, 85, 66, 128, 85, 65, 84, 72, 128, + 85, 65, 128, 85, 178, 85, 45, 69, 79, 45, 69, 85, 128, 85, 45, 65, 69, + 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, 76, 73, + 78, 197, 84, 87, 79, 45, 72, 69, 65, 68, 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, + 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, 84, 69, 89, 65, + 83, 65, 84, 128, 84, 85, 84, 128, 84, 85, 82, 88, 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, 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, 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, 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, + 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, 73, 128, 84, + 84, 72, 79, 128, 84, 84, 72, 73, 128, 84, 84, 72, 69, 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, 69, 128, 84, 84, + 65, 89, 65, 78, 78, 65, 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, 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, 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, 69, 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, 75, 85, 84, 65, 83, 84, 201, 84, 82, 79, 69, 90, 69, 78, 73, 65, 206, + 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, 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, 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, + 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, 83, 83, 73, 79, 78, 128, 84, 82, 65, 78, 83, 77, 73, 83, 83, 73, + 79, 206, 84, 82, 65, 68, 197, 84, 82, 65, 67, 75, 128, 84, 82, 128, 84, + 79, 88, 128, 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, 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, 128, 84, 79, 78, 79, 83, 128, 84, 79, 78, 71, 85, 69, 128, 84, 79, + 78, 71, 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, 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, 85, 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, 76, 79, 128, 84, 73, 84, 128, + 84, 73, 82, 79, 78, 73, 65, 206, 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, 78, 69, 128, 84, 73, 78, 65, 71, + 77, 65, 128, 84, 73, 77, 69, 83, 128, 84, 73, 77, 69, 128, 84, 73, 76, + 68, 197, 84, 73, 76, 128, 84, 73, 75, 69, 85, 84, 45, 82, 73, 69, 85, 76, + 128, 84, 73, 75, 69, 85, 84, 45, 75, 73, 89, 69, 79, 75, 128, 84, 73, 75, + 69, 85, 84, 128, 84, 73, 75, 69, 85, 212, 84, 73, 73, 128, 84, 73, 71, + 72, 212, 84, 73, 71, 69, 82, 128, 84, 73, 69, 88, 128, 84, 73, 69, 80, + 128, 84, 73, 197, 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, 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, 128, 84, 72, + 82, 79, 85, 71, 72, 128, 84, 72, 82, 79, 85, 71, 200, 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, 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, 82, 78, 128, 84, 72, 79, 82, 206, 84, 72, 79, + 79, 128, 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, 89, 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, 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, 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, 69, 69, 128, 84, 72, 197, 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, 65, 65, 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, 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, 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, 128, 84, 69, + 78, 211, 84, 69, 78, 128, 84, 69, 206, 84, 69, 77, 80, 85, 211, 84, 69, + 76, 79, 85, 211, 84, 69, 76, 73, 83, 72, 193, 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, 73, 87, 83, 128, 84, 69, 71, 69, 72, 128, 84, 69, 197, 84, + 69, 68, 85, 78, 71, 128, 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, + 45, 85, 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, 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, + 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, + 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, 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, 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, 67, + 75, 128, 84, 65, 67, 203, 84, 65, 66, 85, 76, 65, 84, 73, 79, 78, 128, + 84, 65, 66, 76, 69, 128, 84, 65, 66, 128, 84, 65, 194, 84, 65, 65, 76, + 85, 74, 193, 84, 65, 65, 73, 128, 84, 65, 50, 128, 84, 65, 45, 82, 79, + 76, 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, 82, 88, 128, 83, 89, 82, 77, 65, 84, + 73, 75, 73, 128, 83, 89, 82, 77, 65, 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, + 77, 77, 69, 84, 82, 89, 128, 83, 89, 77, 77, 69, 84, 82, 73, 195, 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, 65, 128, 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, 73, 128, 83, 87, 73, + 128, 83, 87, 71, 128, 83, 87, 69, 69, 84, 128, 83, 87, 65, 83, 200, 83, + 87, 65, 80, 80, 73, 78, 71, 128, 83, 87, 65, 65, 128, 83, 87, 128, 83, + 85, 88, 128, 83, 85, 84, 128, 83, 85, 83, 80, 69, 78, 83, 73, 79, 206, + 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, 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, 128, 83, 85, 79, 88, 128, 83, 85, 79, 80, 128, 83, 85, 79, + 128, 83, 85, 78, 71, 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, 75, 85, 78, 128, 83, 85, 75, 85, 206, 83, 85, 75, 85, 128, 83, 85, 75, @@ -635,529 +519,463 @@ 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, 73, 80, 69, 128, 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, 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, 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, 205, 83, 84, 69, 65, 77, 128, 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, 69, 82, 83, - 128, 83, 84, 65, 82, 212, 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, 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, 128, 83, 83, 73, 88, 128, 83, 83, 73, 84, 128, 83, - 83, 73, 80, 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, 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, 65, - 128, 83, 83, 65, 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, 84, 128, 83, 80, 79, 79, 78, 128, 83, 80, 76, 73, 84, 84, 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, 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, 67, 72, 128, 83, 80, 69, 67, 73, 65, 76, 128, 83, 80, 69, 65, 82, - 128, 83, 80, 65, 84, 72, 73, 128, 83, 80, 65, 82, 75, 76, 69, 128, 83, - 80, 65, 68, 197, 83, 80, 65, 67, 73, 78, 199, 83, 80, 128, 83, 79, 89, - 128, 83, 79, 87, 73, 76, 207, 83, 79, 87, 128, 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, 79, 128, 83, 79, 78, 71, 128, 83, 79, - 78, 128, 83, 79, 76, 73, 68, 85, 83, 128, 83, 79, 76, 73, 68, 85, 211, - 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, 212, 83, 79, 198, 83, 79, 67, 73, - 69, 84, 89, 128, 83, 79, 67, 67, 69, 210, 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, 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, 193, 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, - 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, 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, 204, 83, 75, 76, 73, 82, 79, 206, 83, 75, 73, - 78, 128, 83, 75, 73, 69, 82, 128, 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, 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, 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, + 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, 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, 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, + 205, 83, 84, 69, 65, 77, 128, 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, 69, 82, 83, 128, 83, 84, 65, 82, 212, 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, 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, 128, + 83, 83, 73, 88, 128, 83, 83, 73, 84, 128, 83, 83, 73, 80, 128, 83, 83, + 73, 69, 88, 128, 83, 83, 73, 69, 80, 128, 83, 83, 73, 69, 128, 83, 83, + 73, 128, 83, 83, 69, 88, 128, 83, 83, 69, 80, 128, 83, 83, 69, 69, 128, + 83, 83, 65, 88, 128, 83, 83, 65, 84, 128, 83, 83, 65, 80, 128, 83, 83, + 65, 78, 71, 84, 73, 75, 69, 85, 84, 128, 83, 83, 65, 78, 71, 83, 73, 79, + 83, 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, 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, 128, 83, 83, 65, 78, 71, 65, 82, 65, 69, 65, + 128, 83, 83, 65, 65, 128, 83, 83, 65, 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, 196, 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, 84, 128, 83, + 80, 79, 79, 78, 128, 83, 80, 76, 73, 84, 84, 73, 78, 199, 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, 68, 69, 82, 217, 83, 80, 73, 67, + 69, 128, 83, 80, 72, 69, 82, 73, 67, 65, 204, 83, 80, 69, 69, 67, 72, + 128, 83, 80, 69, 67, 73, 65, 76, 128, 83, 80, 69, 65, 82, 128, 83, 80, + 65, 84, 72, 73, 128, 83, 80, 65, 82, 75, 76, 69, 128, 83, 80, 65, 68, + 197, 83, 80, 65, 67, 73, 78, 199, 83, 80, 128, 83, 79, 87, 73, 76, 207, + 83, 79, 87, 128, 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, 128, 83, 79, 79, 128, 83, 79, 78, 128, 83, + 79, 76, 73, 68, 85, 83, 128, 83, 79, 76, 73, 68, 85, 211, 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, 212, 83, 79, 198, 83, 79, 67, 73, 69, 84, 89, 128, + 83, 79, 65, 128, 83, 207, 83, 78, 79, 87, 77, 65, 78, 128, 83, 78, 79, + 87, 70, 76, 65, 75, 69, 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, 193, 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, 86, 79, 128, 83, 76, 79, 80, 73, 78, 199, 83, 76, 79, 80, 69, + 128, 83, 76, 73, 78, 71, 128, 83, 76, 73, 67, 69, 128, 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, 204, 83, 75, 76, 73, 82, 79, 206, 83, 75, + 73, 78, 128, 83, 75, 69, 87, 69, 196, 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, 200, 83, 73, 88, + 84, 69, 69, 78, 128, 83, 73, 88, 84, 69, 69, 206, 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, 82, 73, 78, 71, 85, 128, 83, 73, + 79, 83, 45, 84, 73, 75, 69, 85, 84, 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, 73, 69, 85, 80, 128, 83, 73, 79, 83, 45, 80, 72, 73, 69, 85, 80, 72, + 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, 73, 89, 69, 79, 75, 128, 83, + 73, 79, 83, 45, 75, 72, 73, 69, 85, 75, 72, 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, 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, 128, 83, 73, 76, 75, 128, - 83, 73, 76, 73, 81, 85, 193, 83, 73, 76, 65, 51, 128, 83, 73, 75, 73, - 128, 83, 73, 75, 50, 128, 83, 73, 75, 178, 83, 73, 73, 128, 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, - 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, - 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, 70, 70, 76, 197, 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, 79, 89, 128, 83, 72, 79, 88, 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, - 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, - 80, 128, 83, 72, 79, 79, 84, 128, 83, 72, 79, 79, 128, 83, 72, 79, 71, - 201, 83, 72, 79, 199, 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, 128, 83, 72, 73, 210, 83, 72, - 73, 80, 128, 83, 72, 73, 78, 84, 207, 83, 72, 73, 78, 73, 71, 128, 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, 73, 128, 83, 72, 72, 65, - 128, 83, 72, 69, 88, 128, 83, 72, 69, 86, 65, 128, 83, 72, 69, 85, 88, - 128, 83, 72, 69, 84, 128, 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, 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, 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, 68, 79, 87, 69, 196, - 83, 72, 65, 68, 69, 128, 83, 72, 65, 68, 68, 65, 128, 83, 72, 65, 68, 68, + 73, 78, 71, 76, 197, 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, 128, 83, 73, 76, 75, 128, 83, 73, 76, 73, 81, 85, 193, 83, + 73, 76, 65, 51, 128, 83, 73, 75, 73, 128, 83, 73, 75, 50, 128, 83, 73, + 75, 178, 83, 73, 73, 128, 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, 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, 65, 128, + 83, 72, 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, 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, 70, 70, 76, 197, 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, 79, 88, 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, 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, 80, 128, 83, 72, 79, 79, 84, 128, 83, 72, 79, 79, 128, + 83, 72, 79, 71, 201, 83, 72, 79, 199, 83, 72, 79, 197, 83, 72, 79, 65, + 128, 83, 72, 79, 128, 83, 72, 73, 84, 65, 128, 83, 72, 73, 84, 193, 83, + 72, 73, 82, 128, 83, 72, 73, 210, 83, 72, 73, 80, 128, 83, 72, 73, 78, + 73, 71, 128, 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, 73, 128, + 83, 72, 72, 65, 128, 83, 72, 69, 88, 128, 83, 72, 69, 86, 65, 128, 83, + 72, 69, 84, 128, 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, 88, 128, + 83, 72, 65, 86, 73, 89, 65, 78, 73, 128, 83, 72, 65, 86, 73, 65, 206, 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, 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, 128, 83, 72, 65, 78, 71, 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, 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, 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, 206, 83, 69, 85, 88, - 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, 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, 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, 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, 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, - 73, 80, 84, 128, 83, 67, 82, 69, 69, 78, 128, 83, 67, 82, 69, 69, 206, - 83, 67, 79, 82, 80, 73, 85, 83, 128, 83, 67, 73, 83, 83, 79, 82, 83, 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, 76, 65, 82, - 128, 83, 67, 72, 69, 77, 193, 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, 73, 77, 65, - 84, 65, 128, 83, 65, 87, 65, 78, 128, 83, 65, 87, 128, 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, 83, 65, 75, 128, 83, - 65, 82, 73, 128, 83, 65, 82, 193, 83, 65, 82, 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, 65, 72, 128, 83, 65, 78, 128, 83, 65, 77, 89, 79, - 203, 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, 128, 83, 65, 76, 84, 73, 82, 69, - 128, 83, 65, 76, 84, 73, 76, 76, 79, 128, 83, 65, 76, 84, 128, 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, 128, 83, 65, 75, 79, 84, 128, 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, 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, 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, 89, 65, 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, 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, 128, 82, 85, 77, 201, 82, 85, 77, 65, 201, 82, 85, - 77, 128, 82, 85, 205, 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, 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, 89, 128, 82, 82, 85, 88, 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, 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, 128, 82, 82, 65, 88, 128, 82, 82, 65, - 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, 79, 84, - 128, 82, 79, 79, 75, 128, 82, 79, 79, 70, 128, 82, 79, 79, 128, 82, 79, - 77, 65, 206, 82, 79, 196, 82, 79, 67, 128, 82, 79, 66, 65, 84, 128, 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, 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, 75, 82, 73, 75, 128, 82, 73, 73, 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, 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, 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, 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, 197, 82, 69, 85, 88, 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, 83, 85, 80, 73, 78, 85, - 83, 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, 69, 65, 84, 69, 196, 82, 69, 80, 69, 65, 84, - 128, 82, 69, 80, 69, 65, 212, 82, 69, 80, 65, 128, 82, 69, 80, 193, 82, - 69, 78, 84, 79, 71, 69, 78, 128, 82, 69, 78, 128, 82, 69, 77, 85, 128, - 82, 69, 76, 73, 71, 73, 79, 78, 128, 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, 73, 83, 84, 69, 82, 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, 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, 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, 89, 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, 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, 77, 128, 82, 65, 75, 72, 65, 78, 71, 128, 82, 65, 73, 83, 69, - 196, 82, 65, 73, 78, 128, 82, 65, 73, 206, 82, 65, 73, 68, 207, 82, 65, - 73, 68, 65, 128, 82, 65, 73, 128, 82, 65, 72, 77, 65, 84, 85, 76, 76, 65, - 200, 82, 65, 70, 69, 128, 82, 65, 69, 128, 82, 65, 68, 73, 79, 65, 67, - 84, 73, 86, 197, 82, 65, 68, 201, 82, 65, 68, 128, 82, 65, 196, 82, 65, - 66, 128, 82, 65, 65, 73, 128, 82, 65, 65, 128, 82, 65, 51, 128, 82, 65, - 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, + 69, 86, 69, 78, 84, 69, 69, 78, 128, 83, 69, 86, 69, 78, 84, 69, 69, 206, + 83, 69, 86, 69, 206, 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, 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, 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, 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, 76, 128, 83, 69, 65, 71, 85, 76, 204, 83, 68, 79, 78, 199, + 83, 67, 87, 65, 128, 83, 67, 82, 85, 80, 76, 69, 128, 83, 67, 82, 73, 80, + 84, 128, 83, 67, 82, 69, 69, 78, 128, 83, 67, 82, 69, 69, 206, 83, 67, + 79, 82, 80, 73, 85, 83, 128, 83, 67, 73, 83, 83, 79, 82, 83, 128, 83, 67, + 72, 87, 65, 128, 83, 67, 72, 87, 193, 83, 67, 72, 79, 76, 65, 82, 128, + 83, 67, 72, 69, 77, 193, 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, 73, 77, 65, 84, + 65, 128, 83, 65, 87, 128, 83, 65, 85, 73, 76, 128, 83, 65, 84, 85, 82, + 78, 128, 83, 65, 83, 65, 75, 128, 83, 65, 82, 73, 128, 83, 65, 82, 193, + 83, 65, 82, 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, 65, 72, + 128, 83, 65, 78, 128, 83, 65, 77, 89, 79, 203, 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, 65, 82, 73, 84, 65, + 206, 83, 65, 76, 84, 73, 82, 69, 128, 83, 65, 76, 84, 73, 76, 76, 79, + 128, 83, 65, 76, 84, 128, 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, 128, 83, 65, 74, 68, 65, 72, 128, 83, 65, 73, 76, 128, 83, 65, 73, + 75, 85, 82, 85, 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, 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, 89, + 65, 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, 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, 128, 82, 85, 77, 65, 201, 82, 85, 77, 128, 82, 85, 205, 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, 194, 82, 85, 65, + 128, 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, 89, 128, 82, 82, 85, 88, 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, 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, 128, 82, 82, 65, 88, 128, 82, + 82, 65, 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, 79, + 84, 128, 82, 79, 79, 75, 128, 82, 79, 79, 70, 128, 82, 79, 79, 128, 82, + 79, 77, 65, 206, 82, 79, 196, 82, 79, 67, 128, 82, 79, 66, 65, 84, 128, + 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, 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, 70, 79, 82, 90, 65, 78, 68, 79, 128, 82, 73, + 206, 82, 73, 75, 82, 73, 75, 128, 82, 73, 73, 128, 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, 196, 82, 73, + 71, 72, 84, 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, 83, 73, 79, 83, 128, 82, 73, 69, 85, 76, 45, + 83, 73, 79, 83, 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, 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, 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, 128, 82, 73, 69, 85, 76, 45, 75, 72, 73, + 69, 85, 75, 72, 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, 204, 82, 73, 69, 76, 128, 82, 73, 67, 69, 77, 128, + 82, 73, 67, 69, 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, 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, 197, 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, 83, 85, 80, 73, 78, 85, 83, + 128, 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, 72, 128, 82, 69, 83, 200, 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, 69, 65, 84, 69, 196, 82, 69, 80, 69, + 65, 84, 128, 82, 69, 80, 69, 65, 212, 82, 69, 80, 65, 128, 82, 69, 80, + 193, 82, 69, 78, 84, 79, 71, 69, 78, 128, 82, 69, 77, 85, 128, 82, 69, + 76, 73, 71, 73, 79, 78, 128, 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, + 73, 83, 84, 69, 82, 69, 196, 82, 69, 70, 69, 82, 69, 78, 67, 197, 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, 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, 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, 89, 128, 82, 65, 84, 73, 79, 128, 82, 65, + 84, 128, 82, 65, 83, 79, 85, 204, 82, 65, 83, 72, 65, 128, 82, 65, 80, + 73, 83, 77, 65, 128, 82, 65, 78, 71, 197, 82, 65, 78, 128, 82, 65, 77, + 211, 82, 65, 77, 66, 65, 84, 128, 82, 65, 77, 128, 82, 65, 75, 72, 65, + 78, 71, 128, 82, 65, 73, 83, 69, 196, 82, 65, 73, 78, 128, 82, 65, 73, + 206, 82, 65, 73, 68, 207, 82, 65, 73, 68, 65, 128, 82, 65, 72, 77, 65, + 84, 85, 76, 76, 65, 200, 82, 65, 70, 69, 128, 82, 65, 69, 128, 82, 65, + 68, 73, 79, 65, 67, 84, 73, 86, 197, 82, 65, 68, 201, 82, 65, 68, 128, + 82, 65, 196, 82, 65, 66, 128, 82, 65, 65, 73, 128, 82, 65, 65, 128, 82, + 65, 51, 128, 82, 65, 50, 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, @@ -1169,42 +987,37 @@ 85, 79, 84, 128, 81, 85, 79, 80, 128, 81, 85, 79, 128, 81, 85, 75, 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, 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, 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, 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, 209, 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, 84, 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, 73, 84, 89, 128, 80, 85, 82, 128, 80, 85, 80, - 128, 80, 85, 79, 88, 128, 80, 85, 79, 80, 128, 80, 85, 79, 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, 69, 128, - 80, 85, 65, 69, 128, 80, 85, 50, 128, 80, 85, 128, 80, 84, 72, 65, 72, + 128, 81, 85, 73, 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, 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, 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, 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, + 73, 88, 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, 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, 65, 65, 128, 209, 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, 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, 84, 128, 80, 85, 83, 72, 73, 78, 199, 80, 85, 82, 88, 128, + 80, 85, 82, 73, 84, 89, 128, 80, 85, 82, 128, 80, 85, 80, 128, 80, 85, + 79, 88, 128, 80, 85, 79, 80, 128, 80, 85, 79, 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, 50, 128, 80, 85, 128, 80, 84, 72, 65, 72, 193, 80, 84, 69, 128, 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, @@ -1218,318 +1031,247 @@ 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, 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, 83, 72, 84, 72, 65, 77, 65, 84, 82, 193, - 80, 82, 73, 78, 84, 128, 80, 82, 73, 78, 212, 80, 82, 73, 77, 69, 128, - 80, 82, 73, 77, 197, 80, 82, 69, 86, 73, 79, 85, 211, 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, 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, 85, 78, 196, 80, 79, 83, 84, 80, 79, 83, 73, 84, 73, 79, - 206, 80, 79, 83, 84, 65, 204, 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, 128, 80, 79, 208, 80, 79, 79, 128, 80, 79, 78, 68, - 79, 128, 80, 79, 76, 201, 80, 79, 76, 69, 128, 80, 79, 75, 82, 89, 84, - 73, 69, 128, 80, 79, 75, 79, 74, 73, 128, 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, 77, 69, 196, 80, 76, 85, 77, 128, 80, 76, 85, 75, 128, 80, 76, - 79, 87, 128, 80, 76, 79, 80, 72, 85, 128, 80, 76, 69, 84, 72, 82, 79, 78, - 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, 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, - 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, 80, 73, 78, 71, 128, 80, 73, 80, 128, - 80, 73, 78, 87, 72, 69, 69, 204, 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, 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, 80, 128, 80, 73, 69, 67, 69, 128, 80, - 73, 69, 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, 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, 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, + 86, 65, 84, 69, 128, 80, 82, 73, 78, 84, 128, 80, 82, 73, 78, 212, 80, + 82, 73, 77, 69, 128, 80, 82, 73, 77, 197, 80, 82, 69, 86, 73, 79, 85, + 211, 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, 70, 65, 67, 197, 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, 77, 128, 80, 80, 65, 128, 80, 79, 88, 128, 80, 79, 87, + 69, 82, 211, 80, 79, 87, 69, 82, 128, 80, 79, 85, 78, 196, 80, 79, 83, + 84, 80, 79, 83, 73, 84, 73, 79, 206, 80, 79, 83, 84, 65, 204, 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, 128, 80, 79, 208, 80, + 79, 79, 128, 80, 79, 78, 68, 79, 128, 80, 79, 76, 201, 80, 79, 76, 69, + 128, 80, 79, 75, 82, 89, 84, 73, 69, 128, 80, 79, 75, 79, 74, 73, 128, + 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, 77, 69, 196, 80, 76, 85, 77, 128, + 80, 76, 85, 75, 128, 80, 76, 79, 87, 128, 80, 76, 79, 80, 72, 85, 128, + 80, 76, 69, 84, 72, 82, 79, 78, 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, 197, + 80, 76, 65, 128, 80, 73, 90, 90, 73, 67, 65, 84, 79, 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, 67, 69, 83, + 128, 80, 73, 82, 73, 71, 128, 80, 73, 82, 73, 199, 80, 73, 80, 73, 78, + 71, 128, 80, 73, 80, 128, 80, 73, 78, 87, 72, 69, 69, 204, 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, 69, 88, 128, 80, 73, 69, 85, 80, 45, 84, 73, 75, 69, + 85, 84, 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, 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, 128, 80, 73, 69, 85, 80, 45, 80, 72, 73, 69, 85, + 80, 72, 128, 80, 73, 69, 85, 80, 45, 78, 73, 69, 85, 78, 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, 80, 128, 80, 73, + 69, 67, 69, 128, 80, 73, 69, 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, 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, 73, 80, 80, 73, 78, 197, 80, 72, 73, 69, 85, 80, 72, + 45, 80, 73, 69, 85, 80, 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, 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, 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, + 72, 65, 73, 83, 84, 79, 211, 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, 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, 128, 80, 69, - 82, 83, 79, 206, 80, 69, 82, 83, 73, 65, 206, 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, 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, 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, 78, 84, 65, 83, 69, 77, 69, 128, 80, 69, - 78, 84, 65, 71, 79, 78, 128, 80, 69, 78, 83, 85, 128, 80, 69, 78, 78, - 217, 80, 69, 78, 73, 72, 73, 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, 80, 128, - 80, 69, 69, 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, 69, 128, 80, 69, 65, 67, 197, 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, 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, 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, 69, 81, 128, 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, 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, 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, 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, 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, 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, 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, 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, 72, 76, 65, 86, 201, 80, 65, 68, 77, 193, 80, 65, - 68, 193, 80, 65, 68, 128, 80, 65, 67, 75, 73, 78, 71, 128, 80, 65, 65, - 84, 85, 128, 80, 65, 65, 83, 69, 78, 84, 79, 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, 78, 75, 73, 193, 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, 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, 68, 73, 78, 65, 204, 79, 82, 67, 72, 73, 68, - 128, 79, 80, 84, 73, 79, 206, 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, 69, 82, 65, 84, 79, 82, - 128, 79, 80, 69, 82, 65, 84, 79, 210, 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, 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, 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, - 76, 73, 78, 197, 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, 77, - 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, 72, 128, 79, 71, 79, 78, 69, 75, 128, 79, 71, - 79, 78, 69, 203, 79, 71, 72, 65, 205, 79, 69, 75, 128, 79, 68, 196, 79, - 67, 84, 79, 66, 69, 82, 128, 79, 67, 210, 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, 80, - 128, 78, 90, 85, 79, 88, 128, 78, 90, 85, 79, 128, 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, 128, 78, 90, 65, 88, 128, 78, 90, 65, 84, 128, 78, 90, 65, 80, - 128, 78, 90, 65, 128, 78, 89, 87, 65, 128, 78, 89, 85, 88, 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, 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, 211, 78, 89, 73, 80, 128, 78, 89, 73, - 78, 45, 68, 79, 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, 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, - 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, 84, - 73, 76, 76, 85, 128, 78, 85, 84, 128, 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, 128, - 78, 85, 77, 128, 78, 85, 76, 76, 128, 78, 85, 76, 204, 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, 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, 69, 69, 128, 78, 83, 72, 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, 128, 78, 79, 84, 197, 78, 79, 84, 67, 72, 69, 196, - 78, 79, 84, 67, 72, 128, 78, 79, 84, 128, 78, 79, 83, 69, 128, 78, 79, - 82, 84, 72, 87, 69, 83, 212, 78, 79, 82, 84, 200, 78, 79, 82, 77, 65, - 204, 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, 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, 79, 128, - 78, 78, 78, 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, 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, 75, 207, 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, 80, 128, 78, 74, 85, 79, 88, 128, - 78, 74, 85, 79, 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, 128, 78, 74, 73, 128, 78, 74, 69, 69, - 128, 78, 74, 69, 128, 78, 74, 65, 69, 77, 76, 73, 128, 78, 74, 65, 69, - 77, 128, 78, 74, 128, 78, 73, 88, 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, 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, 73, 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, 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, 65, 128, 78, 72, 128, 78, 71, 89, 69, 128, 78, - 71, 86, 69, 128, 78, 71, 85, 79, 88, 128, 78, 71, 85, 79, 84, 128, 78, - 71, 85, 79, 128, 78, 71, 79, 88, 128, 78, 71, 79, 85, 128, 78, 71, 79, - 213, 78, 71, 79, 84, 128, 78, 71, 79, 80, 128, 78, 71, 79, 78, 128, 78, - 71, 79, 69, 72, 128, 78, 71, 79, 69, 200, 78, 71, 207, 78, 71, 75, 87, - 65, 69, 78, 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, 71, 85, 128, 78, 71, 71, - 79, 79, 128, 78, 71, 71, 79, 128, 78, 71, 71, 73, 128, 78, 71, 71, 69, - 78, 128, 78, 71, 71, 69, 69, 128, 78, 71, 71, 69, 128, 78, 71, 71, 128, - 78, 71, 69, 88, 128, 78, 71, 69, 80, 128, 78, 71, 69, 78, 128, 78, 71, - 69, 65, 68, 65, 76, 128, 78, 71, 69, 128, 78, 71, 65, 88, 128, 78, 71, - 65, 84, 128, 78, 71, 65, 211, 78, 71, 65, 80, 128, 78, 71, 65, 78, 128, - 78, 71, 65, 73, 128, 78, 71, 65, 65, 73, 128, 78, 71, 193, 78, 70, 128, - 78, 69, 88, 212, 78, 69, 88, 128, 78, 69, 87, 76, 73, 78, 69, 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, + 82, 83, 73, 65, 206, 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, + 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, 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, 78, 84, 65, 83, 69, 77, 69, 128, 80, 69, 78, 84, 65, 71, 79, + 78, 128, 80, 69, 78, 83, 85, 128, 80, 69, 78, 78, 217, 80, 69, 78, 73, + 72, 73, 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, 80, 128, 80, 69, 69, 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, 69, 128, 80, 69, 65, 67, 197, + 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, 88, 128, 80, 65, + 87, 78, 128, 80, 65, 215, 80, 65, 86, 73, 89, 65, 78, 73, 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, 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, 69, 81, 128, 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, 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, 210, 80, 65, 80, 128, 80, 65, 208, 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, 75, 82, 65, 128, 80, 65, 78, 84, 73, 128, 80, 65, 78, 79, + 76, 79, 78, 71, 128, 80, 65, 78, 71, 87, 73, 83, 65, 68, 128, 80, 65, 78, + 71, 76, 65, 89, 65, 82, 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, 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, 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, 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, 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, 68, 77, 193, 80, 65, 68, 128, 80, 65, 67, 75, + 73, 78, 71, 128, 80, 65, 65, 84, 85, 128, 80, 65, 65, 83, 69, 78, 84, 79, + 128, 80, 65, 65, 73, 128, 80, 65, 65, 45, 80, 73, 76, 76, 65, 128, 80, + 65, 65, 128, 80, 50, 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, 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, 128, 79, 85, 84, 76, 73, + 78, 69, 196, 79, 85, 84, 76, 73, 78, 69, 128, 79, 85, 84, 69, 210, 79, + 85, 78, 75, 73, 193, 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, 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, + 73, 71, 73, 78, 65, 204, 79, 82, 73, 71, 73, 78, 128, 79, 82, 68, 73, 78, + 65, 204, 79, 82, 67, 72, 73, 68, 128, 79, 80, 84, 73, 79, 206, 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, 69, 82, 65, 84, 79, 82, 128, 79, 80, 69, 82, 65, 84, 79, 210, 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, 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, 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, + 76, 73, 78, 197, 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, 77, 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, 69, 79, 78, 128, 79, + 73, 76, 128, 79, 72, 77, 128, 79, 72, 205, 79, 72, 128, 79, 71, 79, 78, + 69, 75, 128, 79, 71, 79, 78, 69, 203, 79, 71, 72, 65, 205, 79, 68, 196, + 79, 67, 84, 79, 66, 69, 82, 128, 79, 67, 210, 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, 45, 89, 69, 128, 79, 45, 69, 79, 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, 80, 128, 78, + 90, 85, 79, 88, 128, 78, 90, 85, 79, 128, 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, + 128, 78, 90, 65, 88, 128, 78, 90, 65, 84, 128, 78, 90, 65, 80, 128, 78, + 90, 65, 128, 78, 89, 87, 65, 128, 78, 89, 85, 88, 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, 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, 211, 78, 89, 73, 80, 128, 78, 89, 73, 78, 45, + 68, 79, 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, 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, 65, 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, 84, 73, 76, 76, + 85, 128, 78, 85, 84, 128, 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, 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, 66, 69, 82, + 128, 78, 85, 77, 128, 78, 85, 76, 76, 128, 78, 85, 76, 204, 78, 85, 75, + 84, 65, 128, 78, 85, 69, 128, 78, 85, 66, 73, 65, 206, 78, 85, 49, 49, + 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, 88, 128, 78, 79, + 87, 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, 128, 78, 79, 84, 197, 78, 79, 84, + 67, 72, 69, 196, 78, 79, 84, 67, 72, 128, 78, 79, 84, 128, 78, 79, 83, + 69, 128, 78, 79, 82, 84, 72, 87, 69, 83, 212, 78, 79, 82, 84, 200, 78, + 79, 82, 77, 65, 204, 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, 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, 79, 128, 78, 78, 78, 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, 77, 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, 80, 128, 78, + 74, 85, 79, 88, 128, 78, 74, 85, 79, 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, 128, 78, 74, 73, 128, 78, 74, 69, 69, 128, + 78, 74, 69, 128, 78, 74, 128, 78, 73, 88, 128, 78, 73, 83, 65, 71, 128, + 78, 73, 82, 85, 71, 85, 128, 78, 73, 80, 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, 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, 73, + 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, 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, 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, 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, 65, 128, 78, 72, 128, 78, 71, 85, 79, 88, 128, 78, 71, 85, + 79, 84, 128, 78, 71, 85, 79, 128, 78, 71, 79, 88, 128, 78, 71, 79, 84, + 128, 78, 71, 79, 80, 128, 78, 71, 79, 78, 128, 78, 71, 79, 69, 72, 128, + 78, 71, 79, 69, 200, 78, 71, 207, 78, 71, 75, 65, 128, 78, 71, 73, 69, + 88, 128, 78, 71, 73, 69, 80, 128, 78, 71, 73, 69, 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, 78, 128, 78, 71, 71, 69, 69, 128, 78, 71, 71, 69, 128, + 78, 71, 71, 65, 128, 78, 71, 71, 128, 78, 71, 69, 88, 128, 78, 71, 69, + 80, 128, 78, 71, 69, 78, 128, 78, 71, 69, 65, 68, 65, 76, 128, 78, 71, + 69, 128, 78, 71, 65, 88, 128, 78, 71, 65, 84, 128, 78, 71, 65, 211, 78, + 71, 65, 80, 128, 78, 71, 65, 78, 128, 78, 71, 65, 73, 128, 78, 71, 65, + 65, 73, 128, 78, 71, 193, 78, 70, 128, 78, 69, 88, 212, 78, 69, 88, 128, + 78, 69, 87, 76, 73, 78, 69, 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, 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, 73, 84, 72, 69, 210, 78, 69, 71, 65, 84, 73, 86, 197, 78, 69, 71, 65, 84, 73, 79, @@ -1541,1488 +1283,1367 @@ 78, 68, 73, 80, 128, 78, 68, 73, 69, 88, 128, 78, 68, 73, 69, 128, 78, 68, 73, 128, 78, 68, 69, 88, 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, 65, 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, 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, 206, 78, 65, 82, 82, 79, - 215, 78, 65, 82, 128, 78, 65, 79, 211, 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, 73, - 82, 193, 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, 66, 76, 65, - 128, 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, 65, 128, 78, 65, - 193, 78, 65, 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, 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, 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, 84, 128, 77, - 85, 83, 73, 67, 128, 77, 85, 83, 73, 195, 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, 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, 128, 77, 85, 199, 77, 85, 69, - 128, 77, 85, 67, 200, 77, 85, 67, 65, 65, 68, 128, 77, 85, 65, 78, 128, - 77, 85, 45, 71, 65, 65, 72, 76, 65, 193, 77, 213, 77, 83, 128, 77, 80, - 65, 128, 77, 79, 88, 128, 77, 79, 86, 69, 196, 77, 79, 85, 84, 72, 128, - 77, 79, 85, 84, 200, 77, 79, 85, 78, 84, 65, 73, 78, 128, 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, 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, 128, 77, 79, 78, 84, 72, 128, 77, 79, 78, 84, 200, 77, 79, - 78, 79, 83, 84, 65, 66, 76, 197, 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, 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, 65, 128, 77, 207, 77, 78, - 89, 65, 205, 77, 78, 65, 83, 128, 77, 77, 128, 77, 205, 77, 76, 65, 128, - 77, 76, 128, 77, 73, 88, 128, 77, 73, 84, 128, 77, 73, 212, 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, - 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, - 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, 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, 196, 77, 73, 67, 82, 207, 77, 73, 128, 77, 72, 90, - 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, 128, 77, 71, 66, 73, 128, - 77, 71, 66, 69, 69, 128, 77, 71, 66, 69, 128, 77, 71, 66, 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, 69, 90, 90, 79, 128, 77, 69, 88, 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, 71, - 128, 77, 69, 84, 65, 76, 128, 77, 69, 84, 193, 77, 69, 83, 83, 69, 78, - 73, 65, 206, 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, 128, 77, 69, 82, 71, 69, 128, 77, 69, 82, 67, 85, 82, 89, 128, 77, - 69, 78, 68, 85, 84, 128, 77, 69, 78, 128, 77, 69, 206, 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, 78, 128, 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, 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, 69, 69, 128, 77, 69, 69, 128, 77, 69, 68, 73, 85, + 65, 80, 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, 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, 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, 206, 78, 65, 82, 82, 79, 215, 78, 65, 82, 128, 78, 65, 80, 128, 78, + 65, 79, 211, 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, 73, 82, 193, 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, 66, 76, 65, 128, 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, 65, 128, 78, 65, 193, 78, 65, 50, 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, 128, 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, 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, 84, 128, 77, 85, 83, 73, 67, 128, 77, 85, 83, + 73, 195, 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, 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, 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, 128, 77, 85, 199, 77, 85, 69, 128, + 77, 85, 67, 200, 77, 85, 67, 65, 65, 68, 128, 77, 85, 65, 78, 128, 77, + 85, 45, 71, 65, 65, 72, 76, 65, 193, 77, 213, 77, 83, 128, 77, 80, 65, + 128, 77, 79, 88, 128, 77, 79, 86, 69, 196, 77, 79, 85, 84, 72, 128, 77, + 79, 85, 84, 200, 77, 79, 85, 78, 84, 65, 73, 78, 128, 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, 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, 128, 77, 79, 78, 84, 72, 128, 77, 79, 78, 84, 200, 77, 79, 78, + 79, 83, 84, 65, 66, 76, 197, 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, 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, 65, 128, 77, 207, 77, 78, 89, + 65, 205, 77, 78, 65, 83, 128, 77, 77, 128, 77, 205, 77, 76, 65, 128, 77, + 76, 128, 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, 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, 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, 83, 83, 65, 78, 71, 83, 73, 79, 83, 128, 77, 73, + 69, 85, 77, 45, 82, 73, 69, 85, 76, 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, 72, 73, 69, 85, 72, 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, 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, 196, 77, + 73, 67, 82, 207, 77, 73, 128, 77, 201, 77, 72, 90, 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, 128, 77, 71, 66, 73, 128, 77, 71, 66, 69, 69, + 128, 77, 71, 66, 69, 128, 77, 71, 66, 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, + 69, 90, 90, 79, 128, 77, 69, 88, 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, 71, 128, 77, 69, 84, 65, 76, + 128, 77, 69, 84, 193, 77, 69, 83, 83, 69, 78, 73, 65, 206, 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, 128, 77, 69, 82, 67, + 85, 82, 89, 128, 77, 69, 78, 128, 77, 69, 206, 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, 128, 77, 69, 205, 77, 69, 76, 79, 78, 128, 77, 69, 73, + 90, 73, 128, 77, 69, 71, 65, 84, 79, 78, 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, 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, 65, 84, 128, 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, 67, 72, 213, 77, 66, 85, 128, 77, 66, 79, 79, 128, 77, 66, 79, 128, 77, 66, 73, - 128, 77, 66, 69, 78, 128, 77, 66, 69, 69, 128, 77, 66, 69, 128, 77, 66, - 65, 65, 128, 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, 65, 128, 77, 65, 88, 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, 79, 82, 193, 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, 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, 66, 85, - 84, 65, 128, 77, 65, 82, 66, 85, 84, 193, 77, 65, 82, 128, 77, 65, 81, - 65, 70, 128, 77, 65, 80, 73, 81, 128, 77, 65, 208, 77, 65, 78, 83, 89, - 79, 78, 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, 67, 72, 213, 77, 65, 78, 65, 67, - 76, 69, 83, 128, 77, 65, 76, 84, 69, 83, 197, 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, 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, 75, 85, 82, 79, 128, 77, 65, - 73, 68, 69, 78, 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, 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, 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, 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, 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, 65, 76, 128, 76, 85, 71, - 65, 204, 76, 85, 69, 128, 76, 85, 51, 128, 76, 85, 50, 128, 76, 85, 178, - 76, 79, 90, 69, 78, 71, 69, 128, 76, 79, 90, 69, 78, 71, 197, 76, 79, 88, - 128, 76, 79, 87, 69, 210, 76, 79, 87, 45, 185, 76, 79, 85, 82, 69, 128, - 76, 79, 84, 85, 83, 128, 76, 79, 84, 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, 128, 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, 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, 67, 65, 84, 73, 86, 69, 128, 76, 79, 67, 65, 84, - 73, 79, 206, 76, 79, 65, 128, 76, 78, 128, 76, 77, 128, 76, 76, 76, 65, - 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, 82, 193, 76, 73, 84, 128, 76, 73, 83, 213, 76, 73, - 83, 72, 128, 76, 73, 82, 193, 76, 73, 81, 85, 73, 196, 76, 73, 80, 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, 76, 89, 128, 76, 73, 76, 73, 84, 72, 128, 76, 73, 76, - 128, 76, 73, 73, 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, 128, 76, 73, 69, 84, 128, 76, 73, 69, 80, 128, - 76, 73, 69, 128, 76, 73, 68, 128, 76, 73, 66, 82, 65, 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, 84, 84, 69, - 82, 128, 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, - 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, 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, 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, 75, 128, 76, 69, 69, 69, 69, 128, 76, 69, 65, 84, 72, 69, 82, 128, - 76, 69, 65, 70, 128, 76, 69, 65, 68, 69, 82, 128, 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, 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, - 84, 128, 76, 65, 83, 212, 76, 65, 82, 89, 78, 71, 69, 65, 204, 76, 65, - 82, 71, 69, 210, 76, 65, 82, 71, 197, 76, 65, 80, 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, - 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, 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, 65, 84, 128, 76, 65, 65, - 78, 128, 76, 65, 65, 77, 85, 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, 69, 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, 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, 80, 128, 75, 85, 79, 88, 128, 75, 85, 79, 80, - 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, 55, 128, 75, 85, - 52, 128, 75, 85, 180, 75, 85, 51, 128, 75, 85, 179, 75, 84, 128, 75, 83, - 83, 65, 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, 79, 128, 75, 80, 79, 128, 75, 80, 73, 128, 75, 80, 69, 78, 128, - 75, 80, 69, 69, 128, 75, 80, 69, 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, + 128, 77, 66, 69, 69, 128, 77, 66, 69, 128, 77, 66, 65, 128, 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, 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, 79, 82, 193, 77, + 65, 83, 72, 50, 128, 77, 65, 83, 67, 85, 76, 73, 78, 197, 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, 66, 85, 84, 65, + 128, 77, 65, 82, 66, 85, 84, 193, 77, 65, 82, 128, 77, 65, 81, 65, 70, + 128, 77, 65, 80, 73, 81, 128, 77, 65, 78, 83, 89, 79, 78, 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, 67, 72, 213, 77, 65, 78, 65, 67, 76, 69, 83, 128, 77, + 65, 76, 84, 69, 83, 197, 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, 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, 75, 85, 82, 79, 128, 77, 65, 73, 68, 69, 78, 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, 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, 65, + 73, 128, 77, 65, 65, 128, 77, 65, 50, 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, 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, 65, 84, 197, 76, 85, 205, 76, 85, 76, 128, 76, 85, 73, 83, + 128, 76, 85, 72, 128, 76, 85, 71, 65, 76, 128, 76, 85, 71, 65, 204, 76, + 85, 51, 128, 76, 85, 50, 128, 76, 85, 178, 76, 79, 90, 69, 78, 71, 69, + 128, 76, 79, 90, 69, 78, 71, 197, 76, 79, 88, 128, 76, 79, 87, 45, 185, + 76, 79, 85, 82, 69, 128, 76, 79, 84, 85, 83, 128, 76, 79, 84, 128, 76, + 79, 82, 82, 65, 73, 78, 69, 128, 76, 79, 80, 128, 76, 79, 79, 84, 128, + 76, 79, 79, 80, 128, 76, 79, 79, 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, 76, 76, 128, 76, 79, 71, 210, 76, 79, + 71, 79, 84, 89, 80, 197, 76, 79, 71, 128, 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, + 77, 128, 76, 76, 76, 65, 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, 84, + 84, 76, 197, 76, 73, 84, 82, 193, 76, 73, 84, 128, 76, 73, 83, 72, 128, + 76, 73, 82, 193, 76, 73, 81, 85, 73, 196, 76, 73, 80, 128, 76, 73, 78, + 75, 73, 78, 199, 76, 73, 78, 203, 76, 73, 78, 69, 83, 128, 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, 76, 89, 128, 76, 73, 76, 73, 84, 72, 128, + 76, 73, 76, 128, 76, 73, 73, 128, 76, 73, 71, 72, 84, 78, 73, 78, 71, + 128, 76, 73, 71, 72, 84, 128, 76, 73, 70, 69, 128, 76, 73, 69, 88, 128, + 76, 73, 69, 84, 128, 76, 73, 69, 80, 128, 76, 73, 69, 128, 76, 73, 68, + 128, 76, 73, 66, 82, 65, 128, 76, 73, 65, 66, 73, 76, 73, 84, 217, 76, + 72, 79, 79, 128, 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, 84, 84, 69, 82, 128, + 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, 128, 76, 69, + 78, 84, 73, 67, 85, 76, 65, 210, 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, 73, 128, 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, 69, 70, 84, 45, 72, 65, 78, 196, 76, 69, 70, + 84, 128, 76, 69, 69, 75, 128, 76, 69, 65, 84, 72, 69, 82, 128, 76, 69, + 65, 70, 128, 76, 69, 65, 68, 69, 82, 128, 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, 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, 84, 128, 76, + 65, 83, 212, 76, 65, 82, 89, 78, 71, 69, 65, 204, 76, 65, 82, 71, 69, + 210, 76, 65, 82, 71, 197, 76, 65, 80, 128, 76, 65, 78, 71, 85, 65, 71, + 197, 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, 72, 83, 72, 85, 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, 69, 86, 128, 76, 65, 69, 128, 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, 65, 78, 128, 76, 65, 65, 77, 85, 128, 76, 65, 65, 73, 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, 69, 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, 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, 80, 128, 75, 85, 79, 88, 128, 75, + 85, 79, 80, 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, 55, + 128, 75, 85, 52, 128, 75, 85, 180, 75, 85, 51, 128, 75, 85, 179, 75, 84, + 128, 75, 83, 83, 65, 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, 79, 128, 75, 80, 79, 128, 75, 80, 73, 128, 75, 80, 69, + 78, 128, 75, 80, 69, 69, 128, 75, 80, 69, 128, 75, 80, 65, 78, 128, 75, + 80, 65, 128, 75, 79, 88, 128, 75, 79, 84, 79, 128, 75, 79, 84, 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, 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, 128, - 75, 78, 73, 71, 72, 84, 128, 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, 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, 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, 73, - 128, 75, 73, 72, 128, 75, 73, 69, 88, 128, 75, 73, 69, 80, 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, 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, 73, 84, 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, 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, 66, 79, 65, 82, 68, 128, 75, 69, 89, 128, 75, - 69, 217, 75, 69, 88, 128, 75, 69, 85, 88, 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, 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, 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, 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, 80, 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, - 75, 79, 128, 75, 65, 75, 65, 66, 65, 84, 128, 75, 65, 75, 128, 75, 65, - 203, 75, 65, 73, 82, 73, 128, 75, 65, 73, 128, 75, 65, 201, 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, - 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, 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, 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, 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, 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, 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, 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, 65, 89, 65, 78, 78, 65, 128, 74, 65, 86, 73, 89, 65, - 78, 73, 128, 74, 65, 82, 128, 74, 65, 80, 65, 78, 69, 83, 197, 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, 68, 69, 128, 74, 65, 65, 128, 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, 89, 69, 75, 128, - 73, 89, 65, 78, 78, 65, 128, 73, 85, 74, 65, 128, 73, 85, 128, 73, 84, - 69, 82, 65, 84, 73, 79, 206, 73, 84, 69, 77, 128, 73, 83, 83, 72, 65, 82, - 128, 73, 83, 211, 73, 83, 79, 78, 128, 73, 83, 79, 206, 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, 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, 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, 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, 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, 195, 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, 76, 85, 68, 73, 78, 199, 73, - 78, 67, 72, 128, 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, 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, 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, 54, 68, 55, 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, 55, 50, 67, 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, 52, 51, 57, 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, 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, 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, 82, 89, 86, 78, 73, 193, 72, 80, 87, 71, 128, 72, 80, - 65, 128, 72, 80, 128, 72, 79, 85, 82, 71, 76, 65, 83, 83, 128, 72, 79, - 85, 210, 72, 79, 84, 65, 128, 72, 79, 82, 83, 69, 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, 78, 128, 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, 72, 79, 76, 65, 77, 128, 72, 79, 76, 65, - 205, 72, 79, 75, 65, 128, 72, 79, 73, 128, 72, 79, 69, 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, 82, 69, 86, - 69, 82, 83, 69, 68, 45, 185, 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, 128, 72, 73, 68, 73, 78, 199, 72, 73, 68, - 69, 84, 128, 72, 73, 68, 69, 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, - 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, 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, 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, 128, 72, 69, 65, 82, 212, 72, 69, 65, 68, 83, - 84, 82, 79, 75, 69, 128, 72, 69, 65, 68, 83, 84, 79, 78, 197, 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, 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, 78, - 85, 78, 79, 207, 72, 65, 78, 71, 90, 72, 79, 213, 72, 65, 78, 68, 83, - 128, 72, 65, 78, 68, 76, 69, 83, 128, 72, 65, 78, 68, 128, 72, 65, 78, + 65, 206, 75, 79, 82, 65, 78, 73, 195, 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, 72, 128, 75, 79, 69, 84, + 128, 75, 79, 65, 128, 75, 78, 73, 71, 72, 84, 128, 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, 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, 203, 75, 73, 88, 128, 75, 73, 84, 128, 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, 80, 128, 75, 73, + 208, 75, 73, 78, 83, 72, 73, 80, 128, 75, 73, 73, 128, 75, 73, 72, 128, + 75, 73, 69, 88, 128, 75, 73, 69, 80, 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, 65, 84, 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, 73, + 69, 85, 75, 200, 75, 72, 73, 128, 75, 72, 72, 65, 128, 75, 72, 69, 73, + 128, 75, 72, 69, 69, 128, 75, 72, 69, 128, 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, 75, 65, 83, 83, 73, 65, 206, 75, 72, 65, 73, + 128, 75, 72, 65, 72, 128, 75, 72, 65, 65, 128, 75, 71, 128, 75, 69, 89, + 67, 65, 80, 128, 75, 69, 89, 66, 79, 65, 82, 68, 128, 75, 69, 89, 128, + 75, 69, 217, 75, 69, 88, 128, 75, 69, 84, 84, 201, 75, 69, 83, 72, 50, + 128, 75, 69, 80, 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, 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, 86, 89, 75, 65, 128, 75, 65, + 85, 78, 65, 128, 75, 65, 85, 206, 75, 65, 84, 79, 128, 75, 65, 84, 72, + 73, 83, 84, 73, 128, 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, 84, 128, 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, 82, 79, 82, + 73, 73, 128, 75, 65, 82, 69, 206, 75, 65, 82, 65, 84, 84, 79, 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, 80, 128, 75, 65, 78, 84, 65, 74, 193, 75, + 65, 78, 71, 128, 75, 65, 78, 65, 75, 79, 128, 75, 65, 77, 52, 128, 75, + 65, 77, 50, 128, 75, 65, 75, 79, 128, 75, 65, 75, 65, 66, 65, 84, 128, + 75, 65, 75, 128, 75, 65, 203, 75, 65, 73, 82, 73, 128, 75, 65, 73, 128, + 75, 65, 201, 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, 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, 65, + 178, 74, 87, 65, 128, 74, 85, 84, 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, + 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, 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, 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, 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, 65, 89, 65, 78, 78, 65, 128, 74, + 65, 86, 73, 89, 65, 78, 73, 128, 74, 65, 82, 128, 74, 65, 80, 65, 78, 69, + 83, 197, 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, 68, 69, 128, 74, 65, 65, 128, + 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, 89, + 65, 78, 78, 65, 128, 73, 89, 128, 73, 85, 74, 65, 128, 73, 85, 128, 73, + 84, 69, 82, 65, 84, 73, 79, 206, 73, 84, 69, 77, 128, 73, 83, 83, 72, 65, + 82, 128, 73, 83, 211, 73, 83, 79, 78, 128, 73, 83, 79, 206, 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, 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, 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, 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, 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, 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, + 76, 85, 68, 73, 78, 199, 73, 78, 67, 72, 128, 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, 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, + 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, 77, 73, 69, 85, 77, 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, 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, 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, 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, 45, 89, 65, 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, 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, 65, 82, 65, 68, 68, 79, 128, + 72, 82, 89, 86, 78, 73, 193, 72, 80, 87, 71, 128, 72, 80, 65, 128, 72, + 80, 128, 72, 79, 85, 83, 69, 128, 72, 79, 85, 82, 71, 76, 65, 83, 83, + 128, 72, 79, 85, 210, 72, 79, 84, 65, 128, 72, 79, 82, 83, 69, 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, 79, 82, + 85, 128, 72, 79, 79, 78, 128, 72, 79, 77, 79, 84, 72, 69, 84, 73, 67, + 128, 72, 79, 77, 79, 84, 72, 69, 84, 73, 195, 72, 79, 76, 68, 73, 78, + 199, 72, 79, 76, 65, 77, 128, 72, 79, 76, 65, 205, 72, 79, 69, 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, 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, 82, 73, 81, 128, + 72, 73, 71, 72, 45, 82, 69, 86, 69, 82, 83, 69, 68, 45, 185, 72, 73, 69, + 88, 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, 128, 72, 73, 68, 73, 78, 199, 72, 73, 68, 69, 84, 128, + 72, 73, 68, 69, 128, 72, 72, 87, 65, 128, 72, 72, 85, 128, 72, 72, 79, + 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, 65, 71, 79, 78, 128, 72, 69, 84, 72, + 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, 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, 205, 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, 128, + 72, 69, 65, 82, 212, 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, 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, 78, 85, 78, 79, 207, 72, 65, 78, 71, 90, + 72, 79, 213, 72, 65, 78, 68, 83, 128, 72, 65, 78, 68, 128, 72, 65, 78, 45, 65, 75, 65, 84, 128, 72, 65, 77, 90, 65, 128, 72, 65, 77, 77, 69, 210, 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, 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, 69, 128, - 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, + 72, 65, 65, 82, 85, 128, 72, 65, 193, 72, 65, 45, 72, 65, 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, 89, 73, 128, 71, 89, 70, 213, 71, 89, 69, 69, 128, 71, 89, 69, 128, + 71, 89, 65, 83, 128, 71, 89, 65, 65, 128, 71, 89, 65, 128, 71, 89, 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, @@ -3035,558 +2656,462 @@ 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, 77, 77, 193, 71, 82, 65, 73, 78, 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, 78, 71, 128, 71, 79, 76, 68, 128, 71, 79, 75, 128, 71, 79, 73, - 78, 199, 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, 84, - 84, 65, 204, 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, 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, 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, 69, 128, 71, 72, 69, 128, 71, 72, 197, 71, 72, 65, 89, 78, 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, 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, 80, 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, 80, 128, 71, - 71, 65, 65, 128, 71, 69, 84, 193, 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, 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, 69, 78, 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, 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, - 65, 78, 128, 71, 65, 77, 65, 76, 128, 71, 65, 77, 65, 204, 71, 65, 77, - 128, 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, 89, 128, 70, 87, 73, - 128, 70, 87, 69, 69, 128, 70, 87, 69, 128, 70, 87, 65, 65, 128, 70, 87, - 65, 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, 82, 128, 70, 85, 80, 128, 70, 85, - 78, 69, 82, 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, 69, 204, 70, 84, 72, 79, - 82, 193, 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, 205, 70, 82, 79, - 71, 128, 70, 82, 73, 84, 85, 128, 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, 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, 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, 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, 78, 79, 84, 197, 70, 79, 79, 84, - 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, - 128, 70, 77, 128, 70, 76, 89, 128, 70, 76, 85, 84, 69, 128, 70, 76, 79, - 87, 69, 82, 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, 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, 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, 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, 76, 73, 78, 197, - 70, 73, 86, 197, 70, 73, 84, 65, 128, 70, 73, 84, 128, 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, 69, 128, 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, 83, 84, 73, 86, 65, 76, 128, 70, 69, 82, 82, 89, 128, 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, 65, 89, 65, 78, 78, 65, 128, 70, 65, 88, 128, 70, 65, 84, 72, - 69, 82, 128, 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, 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, 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, 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, 65, 65, 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, 66, 69, 89, 70, 73, 76, 73, 128, 69, 89, 65, 78, 78, 65, - 128, 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, 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, 69, 83, 83, 128, - 69, 88, 67, 69, 76, 76, 69, 78, 84, 128, 69, 87, 69, 128, 69, 86, 69, 78, - 73, 78, 71, 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, 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, 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, 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, 206, 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, 76, 72, 88, 128, 69, 79, 72, 128, 69, 78, 89, 128, 69, - 78, 86, 69, 76, 79, 80, 69, 128, 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, 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, 79, 211, 69, 78, 78, 128, 69, 78, 76, 65, 82, 71, 69, 77, - 69, 78, 84, 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, 196, 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, 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, 83, 73, 83, - 128, 69, 76, 76, 73, 80, 83, 69, 128, 69, 76, 73, 70, 73, 128, 69, 76, - 69, 86, 69, 78, 128, 69, 76, 69, 86, 69, 206, 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, - 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, 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, 200, 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, 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, 68, 90, 90, 69, 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, 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, 128, 68, 85, 84, 73, 69, 83, 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, 78, 128, 68, 85, 77, 128, 68, 85, 76, 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, 213, 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, 45, 83, 72, 65, 68, 79, 87, 69, 196, 68, 82, 73, 86, 69, 128, 68, 82, - 73, 86, 197, 68, 82, 73, 204, 68, 82, 65, 85, 71, 72, 84, 211, 68, 82, - 65, 71, 79, 78, 128, 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, 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, - 55, 128, 68, 79, 84, 83, 45, 50, 53, 54, 56, 128, 68, 79, 84, 83, 45, 50, - 53, 54, 55, 56, 128, 68, 79, 84, 83, 45, 50, 53, 54, 55, 128, 68, 79, 84, - 83, 45, 50, 53, 54, 128, 68, 79, 84, 83, 45, 50, 53, 128, 68, 79, 84, 83, - 45, 50, 52, 56, 128, 68, 79, 84, 83, 45, 50, 52, 55, 56, 128, 68, 79, 84, - 83, 45, 50, 52, 55, 128, 68, 79, 84, 83, 45, 50, 52, 54, 56, 128, 68, 79, - 84, 83, 45, 50, 52, 54, 55, 56, 128, 68, 79, 84, 83, 45, 50, 52, 54, 55, - 128, 68, 79, 84, 83, 45, 50, 52, 54, 128, 68, 79, 84, 83, 45, 50, 52, 53, - 56, 128, 68, 79, 84, 83, 45, 50, 52, 53, 55, 56, 128, 68, 79, 84, 83, 45, - 50, 52, 53, 55, 128, 68, 79, 84, 83, 45, 50, 52, 53, 54, 56, 128, 68, 79, - 84, 83, 45, 50, 52, 53, 54, 55, 56, 128, 68, 79, 84, 83, 45, 50, 52, 53, - 54, 55, 128, 68, 79, 84, 83, 45, 50, 52, 53, 54, 128, 68, 79, 84, 83, 45, - 50, 52, 53, 128, 68, 79, 84, 83, 45, 50, 52, 128, 68, 79, 84, 83, 45, 50, - 51, 56, 128, 68, 79, 84, 83, 45, 50, 51, 55, 56, 128, 68, 79, 84, 83, 45, - 50, 51, 55, 128, 68, 79, 84, 83, 45, 50, 51, 54, 56, 128, 68, 79, 84, 83, - 45, 50, 51, 54, 55, 56, 128, 68, 79, 84, 83, 45, 50, 51, 54, 55, 128, 68, - 79, 84, 83, 45, 50, 51, 54, 128, 68, 79, 84, 83, 45, 50, 51, 53, 56, 128, - 68, 79, 84, 83, 45, 50, 51, 53, 55, 56, 128, 68, 79, 84, 83, 45, 50, 51, - 53, 55, 128, 68, 79, 84, 83, 45, 50, 51, 53, 54, 56, 128, 68, 79, 84, 83, - 45, 50, 51, 53, 54, 55, 56, 128, 68, 79, 84, 83, 45, 50, 51, 53, 54, 55, - 128, 68, 79, 84, 83, 45, 50, 51, 53, 54, 128, 68, 79, 84, 83, 45, 50, 51, - 53, 128, 68, 79, 84, 83, 45, 50, 51, 52, 56, 128, 68, 79, 84, 83, 45, 50, - 51, 52, 55, 56, 128, 68, 79, 84, 83, 45, 50, 51, 52, 55, 128, 68, 79, 84, - 83, 45, 50, 51, 52, 54, 56, 128, 68, 79, 84, 83, 45, 50, 51, 52, 54, 55, - 56, 128, 68, 79, 84, 83, 45, 50, 51, 52, 54, 55, 128, 68, 79, 84, 83, 45, - 50, 51, 52, 54, 128, 68, 79, 84, 83, 45, 50, 51, 52, 53, 56, 128, 68, 79, - 84, 83, 45, 50, 51, 52, 53, 55, 56, 128, 68, 79, 84, 83, 45, 50, 51, 52, - 53, 55, 128, 68, 79, 84, 83, 45, 50, 51, 52, 53, 54, 56, 128, 68, 79, 84, - 83, 45, 50, 51, 52, 53, 54, 55, 56, 128, 68, 79, 84, 83, 45, 50, 51, 52, - 53, 54, 55, 128, 68, 79, 84, 83, 45, 50, 51, 52, 53, 54, 128, 68, 79, 84, - 83, 45, 50, 51, 52, 53, 128, 68, 79, 84, 83, 45, 50, 51, 52, 128, 68, 79, - 84, 83, 45, 50, 51, 128, 68, 79, 84, 83, 45, 50, 128, 68, 79, 84, 83, 45, - 49, 56, 128, 68, 79, 84, 83, 45, 49, 55, 56, 128, 68, 79, 84, 83, 45, 49, - 55, 128, 68, 79, 84, 83, 45, 49, 54, 56, 128, 68, 79, 84, 83, 45, 49, 54, - 55, 56, 128, 68, 79, 84, 83, 45, 49, 54, 55, 128, 68, 79, 84, 83, 45, 49, - 54, 128, 68, 79, 84, 83, 45, 49, 53, 56, 128, 68, 79, 84, 83, 45, 49, 53, - 55, 56, 128, 68, 79, 84, 83, 45, 49, 53, 55, 128, 68, 79, 84, 83, 45, 49, - 53, 54, 56, 128, 68, 79, 84, 83, 45, 49, 53, 54, 55, 56, 128, 68, 79, 84, - 83, 45, 49, 53, 54, 55, 128, 68, 79, 84, 83, 45, 49, 53, 54, 128, 68, 79, - 84, 83, 45, 49, 53, 128, 68, 79, 84, 83, 45, 49, 52, 56, 128, 68, 79, 84, - 83, 45, 49, 52, 55, 56, 128, 68, 79, 84, 83, 45, 49, 52, 55, 128, 68, 79, - 84, 83, 45, 49, 52, 54, 56, 128, 68, 79, 84, 83, 45, 49, 52, 54, 55, 56, - 128, 68, 79, 84, 83, 45, 49, 52, 54, 55, 128, 68, 79, 84, 83, 45, 49, 52, - 54, 128, 68, 79, 84, 83, 45, 49, 52, 53, 56, 128, 68, 79, 84, 83, 45, 49, - 52, 53, 55, 56, 128, 68, 79, 84, 83, 45, 49, 52, 53, 55, 128, 68, 79, 84, - 83, 45, 49, 52, 53, 54, 56, 128, 68, 79, 84, 83, 45, 49, 52, 53, 54, 55, - 56, 128, 68, 79, 84, 83, 45, 49, 52, 53, 54, 55, 128, 68, 79, 84, 83, 45, - 49, 52, 53, 54, 128, 68, 79, 84, 83, 45, 49, 52, 53, 128, 68, 79, 84, 83, - 45, 49, 52, 128, 68, 79, 84, 83, 45, 49, 51, 56, 128, 68, 79, 84, 83, 45, - 49, 51, 55, 56, 128, 68, 79, 84, 83, 45, 49, 51, 55, 128, 68, 79, 84, 83, - 45, 49, 51, 54, 56, 128, 68, 79, 84, 83, 45, 49, 51, 54, 55, 56, 128, 68, - 79, 84, 83, 45, 49, 51, 54, 55, 128, 68, 79, 84, 83, 45, 49, 51, 54, 128, - 68, 79, 84, 83, 45, 49, 51, 53, 56, 128, 68, 79, 84, 83, 45, 49, 51, 53, - 55, 56, 128, 68, 79, 84, 83, 45, 49, 51, 53, 55, 128, 68, 79, 84, 83, 45, - 49, 51, 53, 54, 56, 128, 68, 79, 84, 83, 45, 49, 51, 53, 54, 55, 56, 128, - 68, 79, 84, 83, 45, 49, 51, 53, 54, 55, 128, 68, 79, 84, 83, 45, 49, 51, - 53, 54, 128, 68, 79, 84, 83, 45, 49, 51, 53, 128, 68, 79, 84, 83, 45, 49, - 51, 52, 56, 128, 68, 79, 84, 83, 45, 49, 51, 52, 55, 56, 128, 68, 79, 84, - 83, 45, 49, 51, 52, 55, 128, 68, 79, 84, 83, 45, 49, 51, 52, 54, 56, 128, - 68, 79, 84, 83, 45, 49, 51, 52, 54, 55, 56, 128, 68, 79, 84, 83, 45, 49, - 51, 52, 54, 55, 128, 68, 79, 84, 83, 45, 49, 51, 52, 54, 128, 68, 79, 84, - 83, 45, 49, 51, 52, 53, 56, 128, 68, 79, 84, 83, 45, 49, 51, 52, 53, 55, - 56, 128, 68, 79, 84, 83, 45, 49, 51, 52, 53, 55, 128, 68, 79, 84, 83, 45, - 49, 51, 52, 53, 54, 56, 128, 68, 79, 84, 83, 45, 49, 51, 52, 53, 54, 55, - 56, 128, 68, 79, 84, 83, 45, 49, 51, 52, 53, 54, 55, 128, 68, 79, 84, 83, - 45, 49, 51, 52, 53, 54, 128, 68, 79, 84, 83, 45, 49, 51, 52, 53, 128, 68, - 79, 84, 83, 45, 49, 51, 52, 128, 68, 79, 84, 83, 45, 49, 51, 128, 68, 79, - 84, 83, 45, 49, 50, 56, 128, 68, 79, 84, 83, 45, 49, 50, 55, 56, 128, 68, - 79, 84, 83, 45, 49, 50, 55, 128, 68, 79, 84, 83, 45, 49, 50, 54, 56, 128, - 68, 79, 84, 83, 45, 49, 50, 54, 55, 56, 128, 68, 79, 84, 83, 45, 49, 50, - 54, 55, 128, 68, 79, 84, 83, 45, 49, 50, 54, 128, 68, 79, 84, 83, 45, 49, - 50, 53, 56, 128, 68, 79, 84, 83, 45, 49, 50, 53, 55, 56, 128, 68, 79, 84, - 83, 45, 49, 50, 53, 55, 128, 68, 79, 84, 83, 45, 49, 50, 53, 54, 56, 128, - 68, 79, 84, 83, 45, 49, 50, 53, 54, 55, 56, 128, 68, 79, 84, 83, 45, 49, - 50, 53, 54, 55, 128, 68, 79, 84, 83, 45, 49, 50, 53, 54, 128, 68, 79, 84, - 83, 45, 49, 50, 53, 128, 68, 79, 84, 83, 45, 49, 50, 52, 56, 128, 68, 79, - 84, 83, 45, 49, 50, 52, 55, 56, 128, 68, 79, 84, 83, 45, 49, 50, 52, 55, - 128, 68, 79, 84, 83, 45, 49, 50, 52, 54, 56, 128, 68, 79, 84, 83, 45, 49, - 50, 52, 54, 55, 56, 128, 68, 79, 84, 83, 45, 49, 50, 52, 54, 55, 128, 68, - 79, 84, 83, 45, 49, 50, 52, 54, 128, 68, 79, 84, 83, 45, 49, 50, 52, 53, - 56, 128, 68, 79, 84, 83, 45, 49, 50, 52, 53, 55, 56, 128, 68, 79, 84, 83, - 45, 49, 50, 52, 53, 55, 128, 68, 79, 84, 83, 45, 49, 50, 52, 53, 54, 56, - 128, 68, 79, 84, 83, 45, 49, 50, 52, 53, 54, 55, 56, 128, 68, 79, 84, 83, - 45, 49, 50, 52, 53, 54, 55, 128, 68, 79, 84, 83, 45, 49, 50, 52, 53, 54, - 128, 68, 79, 84, 83, 45, 49, 50, 52, 53, 128, 68, 79, 84, 83, 45, 49, 50, - 52, 128, 68, 79, 84, 83, 45, 49, 50, 51, 56, 128, 68, 79, 84, 83, 45, 49, - 50, 51, 55, 56, 128, 68, 79, 84, 83, 45, 49, 50, 51, 55, 128, 68, 79, 84, - 83, 45, 49, 50, 51, 54, 56, 128, 68, 79, 84, 83, 45, 49, 50, 51, 54, 55, - 56, 128, 68, 79, 84, 83, 45, 49, 50, 51, 54, 55, 128, 68, 79, 84, 83, 45, - 49, 50, 51, 54, 128, 68, 79, 84, 83, 45, 49, 50, 51, 53, 56, 128, 68, 79, - 84, 83, 45, 49, 50, 51, 53, 55, 56, 128, 68, 79, 84, 83, 45, 49, 50, 51, - 53, 55, 128, 68, 79, 84, 83, 45, 49, 50, 51, 53, 54, 56, 128, 68, 79, 84, - 83, 45, 49, 50, 51, 53, 54, 55, 56, 128, 68, 79, 84, 83, 45, 49, 50, 51, - 53, 54, 55, 128, 68, 79, 84, 83, 45, 49, 50, 51, 53, 54, 128, 68, 79, 84, - 83, 45, 49, 50, 51, 53, 128, 68, 79, 84, 83, 45, 49, 50, 51, 52, 56, 128, - 68, 79, 84, 83, 45, 49, 50, 51, 52, 55, 56, 128, 68, 79, 84, 83, 45, 49, - 50, 51, 52, 55, 128, 68, 79, 84, 83, 45, 49, 50, 51, 52, 54, 56, 128, 68, - 79, 84, 83, 45, 49, 50, 51, 52, 54, 55, 56, 128, 68, 79, 84, 83, 45, 49, - 50, 51, 52, 54, 55, 128, 68, 79, 84, 83, 45, 49, 50, 51, 52, 54, 128, 68, - 79, 84, 83, 45, 49, 50, 51, 52, 53, 56, 128, 68, 79, 84, 83, 45, 49, 50, - 51, 52, 53, 55, 56, 128, 68, 79, 84, 83, 45, 49, 50, 51, 52, 53, 55, 128, - 68, 79, 84, 83, 45, 49, 50, 51, 52, 53, 54, 56, 128, 68, 79, 84, 83, 45, - 49, 50, 51, 52, 53, 54, 55, 56, 128, 68, 79, 84, 83, 45, 49, 50, 51, 52, - 53, 54, 55, 128, 68, 79, 84, 83, 45, 49, 50, 51, 52, 53, 54, 128, 68, 79, - 84, 83, 45, 49, 50, 51, 52, 53, 128, 68, 79, 84, 83, 45, 49, 50, 51, 52, - 128, 68, 79, 84, 83, 45, 49, 50, 51, 128, 68, 79, 84, 83, 45, 49, 50, - 128, 68, 79, 84, 83, 45, 49, 128, 68, 79, 84, 83, 128, 68, 79, 84, 76, - 69, 83, 211, 68, 79, 82, 85, 128, 68, 79, 79, 82, 128, 68, 79, 79, 78, - 71, 128, 68, 79, 78, 71, 128, 68, 79, 77, 65, 73, 206, 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, 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, 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, 74, 128, - 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, 80, 69, 82, 83, 73, 79, 78, 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, 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, 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, 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, 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, + 65, 212, 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, 77, 77, 193, + 71, 82, 65, 73, 78, 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, 78, 71, 128, 71, 79, 76, 68, 128, + 71, 79, 73, 78, 199, 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, 84, 84, 65, 204, 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, 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, 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, 83, 84, + 128, 71, 72, 79, 128, 71, 72, 73, 128, 71, 72, 72, 65, 128, 71, 72, 69, + 69, 128, 71, 72, 69, 128, 71, 72, 197, 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, 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, 80, 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, 80, 128, 71, 71, 65, 65, 128, 71, 69, 84, + 193, 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, 68, 79, 76, 65, 128, 71, 69, 68, 69, 128, 71, 69, 66, 207, + 71, 69, 66, 193, 71, 69, 65, 82, 128, 71, 68, 65, 78, 128, 71, 67, 73, + 71, 128, 71, 67, 65, 206, 71, 66, 79, 78, 128, 71, 66, 69, 78, 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, 51, 128, 71, + 65, 80, 80, 69, 196, 71, 65, 78, 77, 65, 128, 71, 65, 78, 71, 73, 65, + 128, 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, 65, 76, 128, 71, + 65, 77, 65, 204, 71, 65, 77, 128, 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, 70, 89, 88, 128, 70, 89, + 84, 128, 70, 89, 80, 128, 70, 89, 65, 128, 70, 89, 128, 70, 87, 73, 128, + 70, 87, 69, 69, 128, 70, 87, 69, 128, 70, 87, 65, 65, 128, 70, 87, 65, + 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, 82, 128, 70, 85, 80, 128, 70, 85, 78, + 69, 82, 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, 84, 72, 79, 82, 193, 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, 205, 70, 82, 79, 71, 128, 70, 82, 73, + 84, 85, 128, 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, 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, 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, 83, 84, 69, 82, 73, 78, 71, 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, 78, 79, 84, + 197, 70, 79, 79, 84, 128, 70, 79, 79, 128, 70, 79, 78, 71, 77, 65, 78, + 128, 70, 79, 76, 76, 89, 128, 70, 79, 76, 76, 79, 87, 73, 78, 71, 128, + 70, 79, 128, 70, 77, 128, 70, 76, 89, 128, 70, 76, 85, 84, 69, 128, 70, + 76, 79, 87, 69, 82, 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, 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, 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, + 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, 128, 70, 76, 128, 70, 73, 88, 69, 68, 45, 70, 79, 82, + 205, 70, 73, 88, 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, 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, 69, 128, 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, + 83, 84, 73, 86, 65, 76, 128, 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, 65, 89, 65, 78, 78, 65, + 128, 70, 65, 88, 128, 70, 65, 84, 72, 69, 82, 128, 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, + 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, 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, 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, 73, 128, + 70, 65, 65, 70, 85, 128, 70, 65, 65, 128, 69, 90, 200, 69, 90, 69, 78, + 128, 69, 90, 69, 206, 69, 89, 66, 69, 89, 70, 73, 76, 73, 128, 69, 89, + 65, 78, 78, 65, 128, 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, 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, 69, 83, 83, 128, 69, 88, 67, 69, + 76, 76, 69, 78, 84, 128, 69, 87, 69, 128, 69, 86, 69, 78, 73, 78, 71, + 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, 69, 85, 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, 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, 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, 206, 69, 80, 73, 71, 82, 65, 80, 72, 73, 195, 69, + 80, 73, 68, 65, 85, 82, 69, 65, 206, 69, 80, 69, 71, 69, 82, 77, 65, 128, + 69, 79, 76, 72, 88, 128, 69, 79, 72, 128, 69, 78, 86, 69, 76, 79, 80, 69, + 128, 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, 79, + 211, 69, 78, 78, 128, 69, 78, 76, 65, 82, 71, 69, 77, 69, 78, 84, 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, 196, + 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, 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, 69, 76, 76, 73, 83, 72, 77, + 69, 78, 84, 128, 69, 77, 66, 69, 68, 68, 73, 78, 71, 128, 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, 128, 69, 76, 69, 86, 69, 206, 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, 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, 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, 200, 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, 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, + 68, 90, 90, 69, 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, 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, 128, 68, + 85, 84, 73, 69, 83, 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, 78, 128, 68, 85, 77, 128, 68, 85, 76, 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, 213, 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, 45, 83, 72, 65, + 68, 79, 87, 69, 196, 68, 82, 73, 86, 69, 128, 68, 82, 73, 204, 68, 82, + 65, 85, 71, 72, 84, 211, 68, 82, 65, 71, 79, 78, 128, 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, 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, 55, 128, 68, 79, 84, 83, 45, 50, 53, 54, 56, 128, + 68, 79, 84, 83, 45, 50, 53, 54, 55, 56, 128, 68, 79, 84, 83, 45, 50, 53, + 54, 55, 128, 68, 79, 84, 83, 45, 50, 53, 54, 128, 68, 79, 84, 83, 45, 50, + 53, 128, 68, 79, 84, 83, 45, 50, 52, 56, 128, 68, 79, 84, 83, 45, 50, 52, + 55, 56, 128, 68, 79, 84, 83, 45, 50, 52, 55, 128, 68, 79, 84, 83, 45, 50, + 52, 54, 56, 128, 68, 79, 84, 83, 45, 50, 52, 54, 55, 56, 128, 68, 79, 84, + 83, 45, 50, 52, 54, 55, 128, 68, 79, 84, 83, 45, 50, 52, 54, 128, 68, 79, + 84, 83, 45, 50, 52, 53, 56, 128, 68, 79, 84, 83, 45, 50, 52, 53, 55, 56, + 128, 68, 79, 84, 83, 45, 50, 52, 53, 55, 128, 68, 79, 84, 83, 45, 50, 52, + 53, 54, 56, 128, 68, 79, 84, 83, 45, 50, 52, 53, 54, 55, 56, 128, 68, 79, + 84, 83, 45, 50, 52, 53, 54, 55, 128, 68, 79, 84, 83, 45, 50, 52, 53, 54, + 128, 68, 79, 84, 83, 45, 50, 52, 53, 128, 68, 79, 84, 83, 45, 50, 52, + 128, 68, 79, 84, 83, 45, 50, 51, 56, 128, 68, 79, 84, 83, 45, 50, 51, 55, + 56, 128, 68, 79, 84, 83, 45, 50, 51, 55, 128, 68, 79, 84, 83, 45, 50, 51, + 54, 56, 128, 68, 79, 84, 83, 45, 50, 51, 54, 55, 56, 128, 68, 79, 84, 83, + 45, 50, 51, 54, 55, 128, 68, 79, 84, 83, 45, 50, 51, 54, 128, 68, 79, 84, + 83, 45, 50, 51, 53, 56, 128, 68, 79, 84, 83, 45, 50, 51, 53, 55, 56, 128, + 68, 79, 84, 83, 45, 50, 51, 53, 55, 128, 68, 79, 84, 83, 45, 50, 51, 53, + 54, 56, 128, 68, 79, 84, 83, 45, 50, 51, 53, 54, 55, 56, 128, 68, 79, 84, + 83, 45, 50, 51, 53, 54, 55, 128, 68, 79, 84, 83, 45, 50, 51, 53, 54, 128, + 68, 79, 84, 83, 45, 50, 51, 53, 128, 68, 79, 84, 83, 45, 50, 51, 52, 56, + 128, 68, 79, 84, 83, 45, 50, 51, 52, 55, 56, 128, 68, 79, 84, 83, 45, 50, + 51, 52, 55, 128, 68, 79, 84, 83, 45, 50, 51, 52, 54, 56, 128, 68, 79, 84, + 83, 45, 50, 51, 52, 54, 55, 56, 128, 68, 79, 84, 83, 45, 50, 51, 52, 54, + 55, 128, 68, 79, 84, 83, 45, 50, 51, 52, 54, 128, 68, 79, 84, 83, 45, 50, + 51, 52, 53, 56, 128, 68, 79, 84, 83, 45, 50, 51, 52, 53, 55, 56, 128, 68, + 79, 84, 83, 45, 50, 51, 52, 53, 55, 128, 68, 79, 84, 83, 45, 50, 51, 52, + 53, 54, 56, 128, 68, 79, 84, 83, 45, 50, 51, 52, 53, 54, 55, 56, 128, 68, + 79, 84, 83, 45, 50, 51, 52, 53, 54, 55, 128, 68, 79, 84, 83, 45, 50, 51, + 52, 53, 54, 128, 68, 79, 84, 83, 45, 50, 51, 52, 53, 128, 68, 79, 84, 83, + 45, 50, 51, 52, 128, 68, 79, 84, 83, 45, 50, 51, 128, 68, 79, 84, 83, 45, + 50, 128, 68, 79, 84, 83, 45, 49, 56, 128, 68, 79, 84, 83, 45, 49, 55, 56, + 128, 68, 79, 84, 83, 45, 49, 55, 128, 68, 79, 84, 83, 45, 49, 54, 56, + 128, 68, 79, 84, 83, 45, 49, 54, 55, 56, 128, 68, 79, 84, 83, 45, 49, 54, + 55, 128, 68, 79, 84, 83, 45, 49, 54, 128, 68, 79, 84, 83, 45, 49, 53, 56, + 128, 68, 79, 84, 83, 45, 49, 53, 55, 56, 128, 68, 79, 84, 83, 45, 49, 53, + 55, 128, 68, 79, 84, 83, 45, 49, 53, 54, 56, 128, 68, 79, 84, 83, 45, 49, + 53, 54, 55, 56, 128, 68, 79, 84, 83, 45, 49, 53, 54, 55, 128, 68, 79, 84, + 83, 45, 49, 53, 54, 128, 68, 79, 84, 83, 45, 49, 53, 128, 68, 79, 84, 83, + 45, 49, 52, 56, 128, 68, 79, 84, 83, 45, 49, 52, 55, 56, 128, 68, 79, 84, + 83, 45, 49, 52, 55, 128, 68, 79, 84, 83, 45, 49, 52, 54, 56, 128, 68, 79, + 84, 83, 45, 49, 52, 54, 55, 56, 128, 68, 79, 84, 83, 45, 49, 52, 54, 55, + 128, 68, 79, 84, 83, 45, 49, 52, 54, 128, 68, 79, 84, 83, 45, 49, 52, 53, + 56, 128, 68, 79, 84, 83, 45, 49, 52, 53, 55, 56, 128, 68, 79, 84, 83, 45, + 49, 52, 53, 55, 128, 68, 79, 84, 83, 45, 49, 52, 53, 54, 56, 128, 68, 79, + 84, 83, 45, 49, 52, 53, 54, 55, 56, 128, 68, 79, 84, 83, 45, 49, 52, 53, + 54, 55, 128, 68, 79, 84, 83, 45, 49, 52, 53, 54, 128, 68, 79, 84, 83, 45, + 49, 52, 53, 128, 68, 79, 84, 83, 45, 49, 52, 128, 68, 79, 84, 83, 45, 49, + 51, 56, 128, 68, 79, 84, 83, 45, 49, 51, 55, 56, 128, 68, 79, 84, 83, 45, + 49, 51, 55, 128, 68, 79, 84, 83, 45, 49, 51, 54, 56, 128, 68, 79, 84, 83, + 45, 49, 51, 54, 55, 56, 128, 68, 79, 84, 83, 45, 49, 51, 54, 55, 128, 68, + 79, 84, 83, 45, 49, 51, 54, 128, 68, 79, 84, 83, 45, 49, 51, 53, 56, 128, + 68, 79, 84, 83, 45, 49, 51, 53, 55, 56, 128, 68, 79, 84, 83, 45, 49, 51, + 53, 55, 128, 68, 79, 84, 83, 45, 49, 51, 53, 54, 56, 128, 68, 79, 84, 83, + 45, 49, 51, 53, 54, 55, 56, 128, 68, 79, 84, 83, 45, 49, 51, 53, 54, 55, + 128, 68, 79, 84, 83, 45, 49, 51, 53, 54, 128, 68, 79, 84, 83, 45, 49, 51, + 53, 128, 68, 79, 84, 83, 45, 49, 51, 52, 56, 128, 68, 79, 84, 83, 45, 49, + 51, 52, 55, 56, 128, 68, 79, 84, 83, 45, 49, 51, 52, 55, 128, 68, 79, 84, + 83, 45, 49, 51, 52, 54, 56, 128, 68, 79, 84, 83, 45, 49, 51, 52, 54, 55, + 56, 128, 68, 79, 84, 83, 45, 49, 51, 52, 54, 55, 128, 68, 79, 84, 83, 45, + 49, 51, 52, 54, 128, 68, 79, 84, 83, 45, 49, 51, 52, 53, 56, 128, 68, 79, + 84, 83, 45, 49, 51, 52, 53, 55, 56, 128, 68, 79, 84, 83, 45, 49, 51, 52, + 53, 55, 128, 68, 79, 84, 83, 45, 49, 51, 52, 53, 54, 56, 128, 68, 79, 84, + 83, 45, 49, 51, 52, 53, 54, 55, 56, 128, 68, 79, 84, 83, 45, 49, 51, 52, + 53, 54, 55, 128, 68, 79, 84, 83, 45, 49, 51, 52, 53, 54, 128, 68, 79, 84, + 83, 45, 49, 51, 52, 53, 128, 68, 79, 84, 83, 45, 49, 51, 52, 128, 68, 79, + 84, 83, 45, 49, 51, 128, 68, 79, 84, 83, 45, 49, 50, 56, 128, 68, 79, 84, + 83, 45, 49, 50, 55, 56, 128, 68, 79, 84, 83, 45, 49, 50, 55, 128, 68, 79, + 84, 83, 45, 49, 50, 54, 56, 128, 68, 79, 84, 83, 45, 49, 50, 54, 55, 56, + 128, 68, 79, 84, 83, 45, 49, 50, 54, 55, 128, 68, 79, 84, 83, 45, 49, 50, + 54, 128, 68, 79, 84, 83, 45, 49, 50, 53, 56, 128, 68, 79, 84, 83, 45, 49, + 50, 53, 55, 56, 128, 68, 79, 84, 83, 45, 49, 50, 53, 55, 128, 68, 79, 84, + 83, 45, 49, 50, 53, 54, 56, 128, 68, 79, 84, 83, 45, 49, 50, 53, 54, 55, + 56, 128, 68, 79, 84, 83, 45, 49, 50, 53, 54, 55, 128, 68, 79, 84, 83, 45, + 49, 50, 53, 54, 128, 68, 79, 84, 83, 45, 49, 50, 53, 128, 68, 79, 84, 83, + 45, 49, 50, 52, 56, 128, 68, 79, 84, 83, 45, 49, 50, 52, 55, 56, 128, 68, + 79, 84, 83, 45, 49, 50, 52, 55, 128, 68, 79, 84, 83, 45, 49, 50, 52, 54, + 56, 128, 68, 79, 84, 83, 45, 49, 50, 52, 54, 55, 56, 128, 68, 79, 84, 83, + 45, 49, 50, 52, 54, 55, 128, 68, 79, 84, 83, 45, 49, 50, 52, 54, 128, 68, + 79, 84, 83, 45, 49, 50, 52, 53, 56, 128, 68, 79, 84, 83, 45, 49, 50, 52, + 53, 55, 56, 128, 68, 79, 84, 83, 45, 49, 50, 52, 53, 55, 128, 68, 79, 84, + 83, 45, 49, 50, 52, 53, 54, 56, 128, 68, 79, 84, 83, 45, 49, 50, 52, 53, + 54, 55, 56, 128, 68, 79, 84, 83, 45, 49, 50, 52, 53, 54, 55, 128, 68, 79, + 84, 83, 45, 49, 50, 52, 53, 54, 128, 68, 79, 84, 83, 45, 49, 50, 52, 53, + 128, 68, 79, 84, 83, 45, 49, 50, 52, 128, 68, 79, 84, 83, 45, 49, 50, 51, + 56, 128, 68, 79, 84, 83, 45, 49, 50, 51, 55, 56, 128, 68, 79, 84, 83, 45, + 49, 50, 51, 55, 128, 68, 79, 84, 83, 45, 49, 50, 51, 54, 56, 128, 68, 79, + 84, 83, 45, 49, 50, 51, 54, 55, 56, 128, 68, 79, 84, 83, 45, 49, 50, 51, + 54, 55, 128, 68, 79, 84, 83, 45, 49, 50, 51, 54, 128, 68, 79, 84, 83, 45, + 49, 50, 51, 53, 56, 128, 68, 79, 84, 83, 45, 49, 50, 51, 53, 55, 56, 128, + 68, 79, 84, 83, 45, 49, 50, 51, 53, 55, 128, 68, 79, 84, 83, 45, 49, 50, + 51, 53, 54, 56, 128, 68, 79, 84, 83, 45, 49, 50, 51, 53, 54, 55, 56, 128, + 68, 79, 84, 83, 45, 49, 50, 51, 53, 54, 55, 128, 68, 79, 84, 83, 45, 49, + 50, 51, 53, 54, 128, 68, 79, 84, 83, 45, 49, 50, 51, 53, 128, 68, 79, 84, + 83, 45, 49, 50, 51, 52, 56, 128, 68, 79, 84, 83, 45, 49, 50, 51, 52, 55, + 56, 128, 68, 79, 84, 83, 45, 49, 50, 51, 52, 55, 128, 68, 79, 84, 83, 45, + 49, 50, 51, 52, 54, 56, 128, 68, 79, 84, 83, 45, 49, 50, 51, 52, 54, 55, + 56, 128, 68, 79, 84, 83, 45, 49, 50, 51, 52, 54, 55, 128, 68, 79, 84, 83, + 45, 49, 50, 51, 52, 54, 128, 68, 79, 84, 83, 45, 49, 50, 51, 52, 53, 56, + 128, 68, 79, 84, 83, 45, 49, 50, 51, 52, 53, 55, 56, 128, 68, 79, 84, 83, + 45, 49, 50, 51, 52, 53, 55, 128, 68, 79, 84, 83, 45, 49, 50, 51, 52, 53, + 54, 56, 128, 68, 79, 84, 83, 45, 49, 50, 51, 52, 53, 54, 55, 56, 128, 68, + 79, 84, 83, 45, 49, 50, 51, 52, 53, 54, 55, 128, 68, 79, 84, 83, 45, 49, + 50, 51, 52, 53, 54, 128, 68, 79, 84, 83, 45, 49, 50, 51, 52, 53, 128, 68, + 79, 84, 83, 45, 49, 50, 51, 52, 128, 68, 79, 84, 83, 45, 49, 50, 51, 128, + 68, 79, 84, 83, 45, 49, 50, 128, 68, 79, 84, 83, 45, 49, 128, 68, 79, 84, + 83, 128, 68, 79, 84, 76, 69, 83, 211, 68, 79, 82, 85, 128, 68, 79, 79, + 82, 128, 68, 79, 79, 78, 71, 128, 68, 79, 78, 71, 128, 68, 79, 78, 128, + 68, 79, 77, 65, 73, 206, 68, 79, 76, 76, 65, 210, 68, 79, 76, 73, 85, 77, + 128, 68, 79, 73, 84, 128, 68, 79, 71, 128, 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, 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, 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, 80, 69, 82, 83, 73, 79, 78, 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, 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, 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, + 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, 211, 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, 65, 84, 72, 128, 68, 72, 65, 76, 128, + 68, 72, 65, 65, 76, 85, 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, 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, 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, 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, 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, 69, - 70, 69, 67, 84, 73, 86, 69, 78, 69, 83, 211, 68, 69, 69, 82, 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, 73, 83, 73, 86, 69, 78, 69, 83, 83, - 128, 68, 69, 67, 73, 77, 65, 204, 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, 79, 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, 194, 68, 65, 217, 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, - 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, 128, - 68, 65, 78, 199, 68, 65, 78, 68, 65, 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, 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, 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, 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, 84, 128, - 67, 85, 212, 67, 85, 83, 84, 79, 77, 69, 210, 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, 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, 208, 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, 82, 89, 80, 84, 79, 71, 82, 65, 77, 77, 73, + 128, 68, 69, 78, 71, 128, 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, 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, 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, 69, 70, 69, 67, 84, + 73, 86, 69, 78, 69, 83, 211, 68, 69, 69, 82, 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, 73, 83, 73, 86, 69, 78, 69, 83, 83, 128, 68, 69, + 67, 73, 77, 65, 204, 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, 79, 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, 194, + 68, 65, 217, 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, 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, 128, 68, 65, + 78, 199, 68, 65, 78, 68, 65, 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, 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, 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, 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, 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, 69, 82, 85, 83, 128, 67, 89, 80, 128, 67, 89, 76, 73, 78, 68, 82, 73, + 67, 73, 84, 89, 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, 84, 128, 67, 85, 212, 67, 85, 83, 84, 79, 77, 69, 210, 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, 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, 82, 89, 80, 84, 79, 71, 82, 65, 77, 77, 73, 195, 67, 82, 85, 90, 69, 73, 82, 207, 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, @@ -3603,33 +3128,32 @@ 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, 128, 67, 79, 79, 128, 67, 79, 78, - 86, 69, 82, 71, 73, 78, 199, 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, 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, - 79, 78, 65, 78, 212, 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, 76, 73, 67, 84, 128, 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, 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, - 128, 67, 79, 77, 77, 193, 67, 79, 77, 73, 78, 199, 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, 128, 67, 79, 70, 70, 73, 78, 128, 67, 79, 69, - 78, 71, 128, 67, 79, 68, 65, 128, 67, 79, 65, 128, 67, 79, 128, 67, 77, - 128, 67, 205, 67, 76, 85, 83, 84, 69, 210, 67, 76, 85, 66, 45, 83, 80, - 79, 75, 69, 196, 67, 76, 85, 66, 128, 67, 76, 85, 194, 67, 76, 79, 85, - 68, 128, 67, 76, 79, 85, 196, 67, 76, 79, 84, 72, 69, 83, 128, 67, 76, + 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, 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, 79, 78, 65, 78, 212, 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, 76, + 73, 67, 84, 128, 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, 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, 128, 67, 79, 77, 77, 193, 67, 79, 77, 73, 78, + 199, 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, 128, 67, 79, 70, 70, + 73, 78, 128, 67, 79, 69, 78, 71, 128, 67, 79, 68, 65, 128, 67, 79, 65, + 128, 67, 79, 128, 67, 77, 128, 67, 205, 67, 76, 85, 83, 84, 69, 210, 67, + 76, 85, 66, 45, 83, 80, 79, 75, 69, 196, 67, 76, 85, 66, 128, 67, 76, 85, + 194, 67, 76, 79, 85, 68, 128, 67, 76, 79, 84, 72, 69, 83, 128, 67, 76, 79, 84, 72, 128, 67, 76, 79, 83, 69, 78, 69, 83, 83, 128, 67, 76, 79, 83, 69, 68, 128, 67, 76, 79, 83, 69, 196, 67, 76, 79, 83, 197, 67, 76, 79, 67, 75, 87, 73, 83, 197, 67, 76, 73, 86, 73, 83, 128, 67, 76, 73, 78, 71, @@ -3641,34 +3165,31 @@ 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, 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, 73, 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, 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, 65, 128, 67, 72, 79, 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, 76, 76, 213, 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, 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, 73, 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, 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, 65, + 128, 67, 72, 79, 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, 76, + 76, 213, 67, 72, 73, 76, 68, 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, 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, 211, 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, 69, 128, 67, 72, 69, 67, 75, 128, + 80, 128, 67, 72, 69, 206, 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, 73, 79, 84, 128, 67, 72, 65, 82, 73, 79, 212, @@ -3676,53 +3197,41 @@ 69, 82, 128, 67, 72, 65, 82, 128, 67, 72, 65, 80, 128, 67, 72, 65, 78, 71, 69, 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, 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, 69, 88, - 128, 67, 69, 82, 69, 83, 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, 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, 69, 69, 128, - 67, 67, 72, 69, 128, 67, 67, 72, 65, 65, 128, 67, 67, 72, 65, 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, 84, 65, 87, 65, 128, 67, - 65, 84, 128, 67, 65, 83, 84, 76, 69, 128, 67, 65, 82, 89, 83, 84, 73, 65, - 206, 67, 65, 82, 84, 128, 67, 65, 82, 82, 73, 65, 71, 197, 67, 65, 82, - 80, 69, 78, 84, 82, 217, 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, 128, 67, 65, 210, 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, 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, 76, 89, 65, 128, 67, 65, 76, 89, 193, 67, 65, 76, 76, 128, 67, - 65, 76, 67, 128, 67, 65, 75, 82, 65, 128, 67, 65, 69, 83, 85, 82, 65, - 128, 67, 65, 68, 85, 67, 69, 85, 83, 128, 67, 65, 68, 193, 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, + 76, 73, 128, 67, 72, 65, 73, 82, 128, 67, 72, 65, 68, 65, 128, 67, 72, + 65, 196, 67, 72, 65, 65, 128, 67, 69, 88, 128, 67, 69, 82, 69, 83, 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, 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, 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, 69, 69, 128, 67, 67, 72, 69, 128, 67, 67, + 72, 65, 65, 128, 67, 67, 72, 65, 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, 84, 65, 87, 65, 128, 67, 65, 84, 128, 67, 65, 82, 89, + 83, 84, 73, 65, 206, 67, 65, 82, 84, 128, 67, 65, 82, 82, 73, 65, 71, + 197, 67, 65, 82, 80, 69, 78, 84, 82, 217, 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, 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, 82, 65, 66, 73, 78, 68, 85, + 128, 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, 76, 89, 65, 128, 67, 65, 76, 89, 193, 67, 65, + 76, 76, 128, 67, 65, 76, 67, 128, 67, 65, 69, 83, 85, 82, 65, 128, 67, + 65, 68, 85, 67, 69, 85, 83, 128, 67, 65, 68, 193, 67, 65, 65, 73, 128, + 67, 193, 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, 69, 76, 79, 82, 85, 83, 83, 73, 65, 78, 45, 85, 75, 82, 65, 73, 78, 73, 65, 206, 66, 217, 66, 88, 71, 128, 66, 87, 73, 128, 66, 87, 69, 69, 128, @@ -3741,178 +3250,167 @@ 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, 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, 79, 87, 84, 73, 69, 128, 66, 79, 87, 84, 73, 197, 66, 79, 87, - 128, 66, 79, 215, 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, 82, 85, 84, 79, 128, 66, 79, 79, 77, 69, 82, 65, - 78, 71, 128, 66, 79, 78, 69, 128, 66, 79, 76, 212, 66, 79, 68, 89, 128, - 66, 79, 65, 82, 128, 66, 79, 65, 128, 66, 76, 85, 69, 128, 66, 76, 79, - 79, 68, 128, 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, 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, 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, 65, 66, 73, 65, 204, 66, 73, 71, 128, 66, 73, 199, 66, - 73, 69, 84, 128, 66, 73, 68, 69, 78, 84, 65, 204, 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, 77, 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, 84, - 128, 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, 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, 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, 206, 66, 69, 70, 79, 82, 197, - 66, 69, 69, 84, 65, 128, 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, 128, 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, 84, 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, 128, 66, 66, - 65, 88, 128, 66, 66, 65, 84, 128, 66, 66, 65, 80, 128, 66, 66, 65, 128, - 66, 65, 89, 65, 78, 78, 65, 128, 66, 65, 85, 128, 66, 65, 84, 72, 84, 85, - 66, 128, 66, 65, 84, 72, 65, 77, 65, 83, 65, 84, 128, 66, 65, 83, 83, 65, - 128, 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, 65, 50, 128, 66, 65, 210, 66, 65, 78, - 84, 79, 67, 128, 66, 65, 78, 203, 66, 65, 78, 68, 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, 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, 71, 65, - 128, 66, 65, 71, 51, 128, 66, 65, 199, 66, 65, 68, 71, 69, 82, 128, 66, - 65, 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, - 45, 84, 73, 76, 84, 69, 196, 66, 65, 67, 75, 128, 66, 65, 67, 203, 66, - 65, 65, 82, 69, 82, 85, 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, 83, 84, 82, 65, 204, 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, 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, 65, 82, 86, 65, 86, 69, 68, 73, 195, - 65, 84, 72, 65, 80, 65, 83, 67, 65, 206, 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, 76, - 79, 71, 73, 67, 65, 204, 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, 69, 196, 65, 83, 80, 69, 82, 128, 65, 83, 72, 71, 65, - 66, 128, 65, 83, 72, 57, 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, 65, 66, 197, 65, 82, 83, 69, 79, 83, - 128, 65, 82, 83, 69, 79, 211, 65, 82, 82, 79, 87, 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, 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, + 78, 67, 200, 66, 82, 65, 75, 67, 69, 84, 128, 66, 82, 65, 67, 75, 69, + 212, 66, 82, 65, 67, 69, 128, 66, 81, 128, 66, 79, 87, 84, 73, 69, 128, + 66, 79, 87, 84, 73, 197, 66, 79, 87, 128, 66, 79, 215, 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, 82, 85, 84, + 79, 128, 66, 79, 79, 77, 69, 82, 65, 78, 71, 128, 66, 79, 78, 69, 128, + 66, 79, 76, 212, 66, 79, 68, 89, 128, 66, 79, 65, 84, 128, 66, 79, 65, + 82, 128, 66, 79, 65, 128, 66, 76, 85, 69, 128, 66, 76, 79, 79, 68, 128, + 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, 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, 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, + 65, 66, 73, 65, 204, 66, 73, 71, 128, 66, 73, 199, 66, 73, 69, 84, 128, + 66, 73, 68, 69, 78, 84, 65, 204, 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, 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, 84, 128, 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, + 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, 73, 84, 72, 128, 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, 206, 66, 69, 70, 79, 82, + 197, 66, 69, 69, 84, 65, 128, 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, 84, 128, 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, 84, 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, 128, 66, 66, 65, 88, 128, 66, + 66, 65, 84, 128, 66, 66, 65, 80, 128, 66, 66, 65, 128, 66, 65, 89, 65, + 78, 78, 65, 128, 66, 65, 84, 72, 84, 85, 66, 128, 66, 65, 84, 72, 65, 77, + 65, 83, 65, 84, 128, 66, 65, 83, 83, 65, 128, 66, 65, 83, 72, 75, 73, + 210, 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, 65, 50, 128, 66, 65, 210, 66, 65, 78, 84, 79, 67, 128, 66, + 65, 78, 203, 66, 65, 78, 68, 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, 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, 65, 82, 50, 128, 66, 65, 71, 65, 128, + 66, 65, 71, 51, 128, 66, 65, 199, 66, 65, 68, 71, 69, 82, 128, 66, 65, + 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, 45, + 84, 73, 76, 84, 69, 196, 66, 65, 67, 75, 128, 66, 65, 67, 203, 66, 65, + 65, 82, 69, 82, 85, 128, 66, 65, 65, 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, 185, 66, 48, 48, 184, 66, 48, 48, 183, 66, 48, 48, 182, 66, + 48, 48, 181, 66, 48, 48, 180, 66, 48, 48, 179, 66, 48, 48, 178, 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, 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, 83, 84, 82, 65, 204, 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, 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, 72, 65, 80, 65, 83, 67, 65, 206, 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, 76, 79, 71, 73, 67, 65, 204, 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, 69, 196, 65, 83, 72, 71, + 65, 66, 128, 65, 83, 72, 57, 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, 65, 66, 197, 65, 82, 83, 69, 79, + 83, 128, 65, 82, 83, 69, 79, 211, 65, 82, 82, 79, 87, 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, 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, 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, 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, 79, 84, 72, 69, 83, 128, 65, 80, 79, 84, 72, 69, 77, 65, + 65, 82, 75, 84, 73, 75, 207, 65, 82, 75, 65, 66, 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, 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, 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, 68, + 128, 65, 82, 65, 196, 65, 82, 65, 66, 73, 67, 45, 73, 78, 68, 73, 195, + 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, 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, 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, @@ -3920,52 +3418,45 @@ 65, 80, 73, 78, 128, 65, 80, 69, 83, 207, 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, 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, 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, 72, 85, 128, 65, 78, 71, 85, 76, 65, 82, 128, - 65, 78, 71, 83, 84, 82, 79, 205, 65, 78, 71, 75, 72, 65, 78, 75, 72, 85, - 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, 66, - 193, 65, 77, 65, 82, 128, 65, 77, 65, 210, 65, 77, 65, 76, 71, 65, 77, - 65, 84, 73, 79, 206, 65, 76, 86, 69, 79, 76, 65, 210, 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, 76, 79, 128, 65, 76, 76, 73, 65, 78, 67, 69, 128, 65, - 76, 76, 201, 65, 76, 76, 65, 200, 65, 76, 73, 71, 78, 69, 196, 65, 76, - 73, 70, 85, 128, 65, 76, 71, 73, 218, 65, 76, 70, 65, 128, 65, 76, 69, - 85, 212, 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, 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, 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, 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, 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, - 69, 89, 65, 78, 78, 65, 128, 65, 69, 89, 128, 65, 69, 84, 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, 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, 197, 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, 65, 75, 128, 65, 68, 65, + 85, 68, 65, 84, 84, 65, 128, 65, 78, 84, 73, 82, 69, 83, 84, 82, 73, 67, + 84, 73, 79, 78, 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, 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, 75, 72, 128, 65, 78, 72, 85, 128, + 65, 78, 71, 85, 76, 65, 82, 128, 65, 78, 71, 83, 84, 82, 79, 205, 65, 78, + 71, 75, 72, 65, 78, 75, 72, 85, 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, 77, 80, 83, 128, 65, 77, 80, 69, 82, 83, 65, 78, 68, 128, 65, 77, 79, + 85, 78, 212, 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, 76, 86, 69, 79, 76, 65, + 210, 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, 76, 79, 128, 65, 76, 76, 73, + 65, 78, 67, 69, 128, 65, 76, 76, 201, 65, 76, 76, 65, 200, 65, 76, 73, + 71, 78, 69, 196, 65, 76, 73, 70, 85, 128, 65, 76, 71, 73, 218, 65, 76, + 70, 65, 128, 65, 76, 69, 85, 212, 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, 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, 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, 82, 80, 76, 65, 78, 69, 128, 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, + 71, 71, 65, 210, 65, 72, 65, 68, 128, 65, 71, 79, 71, 201, 65, 71, 71, + 82, 65, 86, 65, 84, 73, 79, 78, 128, 65, 71, 65, 73, 78, 128, 65, 70, 84, + 69, 210, 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, 69, 89, 65, 78, + 78, 65, 128, 65, 69, 83, 67, 85, 76, 65, 80, 73, 85, 83, 128, 65, 69, 83, + 67, 128, 65, 69, 76, 65, 45, 80, 73, 76, 76, 65, 128, 65, 69, 69, 89, 65, + 78, 78, 65, 128, 65, 69, 68, 65, 45, 80, 73, 76, 76, 65, 128, 65, 197, + 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, 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, @@ -3977,13280 +3468,11856 @@ 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, 65, 77, 128, 65, 65, 75, 128, 65, 65, 74, 128, 65, 65, 66, 65, + 65, 70, 73, 76, 73, 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, 15, 23, 27, 34, 39, 41, 44, 52, 62, 68, 81, 93, 102, 108, - 113, 121, 130, 135, 139, 145, 150, 158, 161, 168, 173, 181, 186, 192, - 200, 207, 217, 224, 227, 236, 239, 242, 247, 253, 262, 266, 273, 280, - 285, 294, 136, 302, 303, 309, 315, 323, 329, 335, 340, 346, 352, 360, - 367, 369, 372, 376, 383, 390, 396, 403, 408, 410, 418, 421, 426, 307, - 428, 430, 436, 441, 450, 455, 460, 470, 474, 487, 491, 496, 505, 508, - 514, 518, 526, 536, 544, 551, 560, 568, 576, 581, 589, 600, 604, 611, - 614, 620, 624, 628, 629, 634, 638, 640, 643, 652, 322, 655, 659, 664, - 672, 676, 678, 681, 687, 694, 701, 710, 719, 722, 732, 741, 750, 756, - 762, 769, 772, 780, 788, 792, 796, 804, 813, 822, 827, 831, 686, 838, - 846, 850, 854, 857, 862, 867, 871, 879, 794, 609, 882, 887, 225, 890, - 895, 905, 914, 920, 927, 934, 942, 946, 954, 960, 967, 973, 979, 984, - 988, 994, 1007, 1012, 1015, 1020, 22, 1024, 1027, 1037, 1042, 1046, 1055, - 1058, 1064, 1074, 1077, 111, 1081, 1086, 1092, 1096, 1101, 1107, 1112, - 1115, 1122, 1124, 1126, 1134, 1144, 1147, 1150, 1157, 1165, 338, 1167, - 1170, 1175, 1183, 1192, 1195, 1204, 1210, 1216, 1218, 1223, 1228, 1234, - 1239, 1244, 1248, 1253, 1259, 1264, 1269, 1273, 1278, 1283, 1287, 1292, - 1297, 1302, 1308, 1314, 1320, 1325, 1329, 1334, 1339, 1344, 1348, 1353, - 1358, 1363, 1368, 1219, 1224, 1229, 1235, 1240, 1372, 1245, 1378, 1387, - 1249, 1391, 1254, 1260, 1265, 1395, 1400, 1405, 1409, 1413, 1419, 1423, - 1270, 1426, 1430, 1274, 1436, 1279, 1440, 1444, 1284, 1448, 1453, 1457, - 1460, 1464, 1288, 1293, 1469, 1298, 1475, 1481, 1487, 1493, 1303, 1315, - 1321, 1497, 1501, 1505, 1508, 1326, 1512, 1514, 1519, 1524, 1530, 1535, - 1540, 1544, 1549, 1554, 1559, 1564, 1570, 1575, 1580, 1586, 1592, 1597, - 1601, 1606, 1611, 1616, 1621, 1625, 1633, 1637, 1642, 1647, 1652, 1657, - 1661, 1664, 1669, 1674, 1679, 1684, 1690, 1695, 1699, 1330, 1702, 1707, - 1712, 1335, 1716, 1720, 1727, 1340, 1734, 1345, 1738, 1740, 1745, 1751, - 1349, 1756, 1765, 1354, 1770, 1776, 1359, 1781, 1786, 1789, 1794, 1798, - 1802, 1806, 1809, 1813, 1364, 1369, 1040, 1818, 1824, 1830, 1836, 1842, - 1848, 1854, 1860, 1866, 1871, 1877, 1883, 1889, 1895, 1901, 1907, 1913, - 1919, 1925, 1930, 1935, 1940, 1945, 1950, 1955, 1960, 1965, 1970, 1975, - 1981, 1986, 1992, 1997, 2003, 2009, 2014, 2020, 2026, 2032, 2038, 2043, - 2048, 2050, 2051, 2055, 2059, 2064, 2068, 2072, 2076, 2080, 2083, 2088, - 2092, 2097, 2101, 2105, 2110, 2114, 2117, 2121, 2135, 2139, 2143, 2146, - 2151, 2155, 2159, 2163, 2168, 2173, 2178, 2182, 2187, 2191, 2196, 2203, - 2209, 2214, 2219, 2224, 2230, 2235, 2241, 2246, 2249, 1236, 2251, 2258, - 2266, 2276, 2285, 2299, 2303, 2307, 2320, 2328, 2332, 2337, 2341, 2345, - 2349, 2354, 2359, 2364, 2368, 2371, 2375, 2382, 2389, 2395, 2400, 2405, - 2411, 2417, 2422, 2425, 1742, 2427, 2433, 2437, 2442, 2446, 2450, 1747, - 1753, 2455, 2459, 2462, 2467, 2472, 2477, 2481, 2488, 2493, 2496, 2503, - 2509, 2513, 2517, 2521, 2527, 2533, 2547, 2564, 2579, 2594, 2603, 2608, - 2612, 2617, 2622, 2626, 2638, 2645, 2651, 2199, 2657, 2664, 2670, 2673, - 2680, 2684, 2688, 2692, 2073, 2696, 2701, 2706, 2710, 2718, 2722, 2726, - 2730, 2735, 2740, 2745, 2749, 2754, 2759, 2763, 2768, 2772, 2775, 2779, - 2783, 2788, 2792, 2796, 2802, 2811, 2815, 2819, 2825, 2830, 2837, 2841, - 2851, 2855, 2860, 2864, 2869, 2875, 2880, 2884, 2385, 2888, 2893, 2899, - 2904, 2908, 2913, 2918, 2922, 2928, 2933, 2939, 2943, 2949, 2954, 2959, - 2964, 2969, 2974, 2979, 2984, 2989, 2994, 3000, 3005, 1246, 80, 3011, - 3015, 3019, 3023, 3028, 3032, 3036, 3040, 3044, 3049, 3053, 3058, 3062, - 3065, 3069, 3074, 3078, 3083, 3087, 3091, 3095, 3100, 3104, 3107, 3120, - 3124, 3128, 3132, 3136, 3140, 3143, 3147, 3151, 3156, 3160, 3165, 3170, - 3175, 3179, 3182, 3185, 3191, 3195, 3199, 3202, 3206, 3210, 3213, 3219, - 3224, 3229, 3235, 3240, 3245, 3251, 3257, 3262, 3267, 3272, 1044, 507, - 3277, 3280, 3285, 3289, 3292, 3297, 3302, 3306, 3311, 3315, 3320, 3324, - 3328, 3331, 3337, 3344, 3350, 3355, 3359, 3364, 3368, 3378, 3382, 3386, - 3391, 3396, 3406, 2084, 3411, 3415, 3418, 3424, 3431, 3435, 621, 720, - 3439, 3446, 3453, 3459, 3464, 3470, 3475, 2093, 3479, 3487, 555, 3493, - 3504, 3508, 3518, 2098, 3524, 3529, 3544, 3550, 3557, 3567, 3573, 3578, - 3584, 3587, 3591, 3598, 3603, 3607, 3611, 3615, 3619, 3624, 3630, 3070, - 3635, 3647, 1546, 3654, 3657, 3661, 3664, 3668, 3682, 3686, 3689, 3693, - 3698, 3702, 3706, 3712, 3718, 3723, 3729, 3733, 3741, 3751, 3757, 3762, - 3771, 3779, 3786, 3790, 3799, 3803, 3808, 3813, 3817, 3825, 3829, 3834, - 3838, 2106, 1388, 3844, 3849, 3855, 3860, 3865, 3870, 3875, 3880, 3885, - 3891, 3896, 3902, 3907, 3912, 3917, 3923, 3928, 3933, 3938, 3943, 3949, - 3954, 3960, 3965, 3970, 3975, 3980, 3985, 3990, 3996, 4001, 4006, 344, - 440, 4011, 4017, 4021, 4025, 4030, 4034, 4038, 4041, 4045, 4049, 4053, - 4058, 4062, 4066, 3841, 4072, 4079, 4083, 4096, 4100, 4104, 4108, 4112, - 4116, 4122, 4129, 4133, 4141, 4150, 4156, 4161, 4164, 4168, 4172, 4182, - 4192, 4200, 4207, 4214, 4220, 4226, 4233, 4237, 4242, 4246, 4254, 4259, - 4267, 4272, 4277, 4281, 4286, 4293, 4296, 4300, 4304, 4307, 4313, 4319, - 4323, 4334, 4344, 4359, 4374, 4389, 4404, 4419, 4434, 4449, 4464, 4479, - 4494, 4509, 4524, 4539, 4554, 4569, 4584, 4599, 4614, 4629, 4644, 4659, - 4674, 4689, 4704, 4719, 4734, 4749, 4764, 4779, 4794, 4809, 4824, 4839, - 4854, 4869, 4884, 4899, 4914, 4929, 4944, 4959, 4974, 4989, 5004, 5019, - 5034, 5049, 5064, 5079, 5088, 5097, 5102, 5108, 5112, 5117, 5121, 5124, - 5128, 2846, 5131, 5136, 306, 424, 5142, 5150, 5154, 5158, 5161, 5167, - 5171, 5179, 5185, 5190, 5197, 5204, 5210, 5215, 5222, 5228, 5232, 5237, - 5249, 5260, 5267, 5273, 3092, 5277, 5283, 5288, 5293, 5298, 5304, 5309, - 5314, 5319, 5324, 5330, 5335, 5340, 5346, 5351, 5357, 5362, 5368, 5373, - 5379, 5384, 5389, 5394, 5399, 5404, 5410, 5415, 5420, 5425, 5431, 5437, - 5443, 5449, 5455, 5461, 5467, 5473, 5479, 5485, 5491, 5497, 5502, 5507, - 5512, 5517, 5522, 5527, 5532, 5537, 5543, 5549, 5554, 5560, 5566, 5572, - 5577, 5582, 5587, 5592, 5598, 5604, 5609, 5614, 5619, 5624, 5629, 5635, - 5640, 5646, 5652, 5658, 5664, 5670, 5676, 5682, 5688, 5694, 5160, 5699, - 5703, 5707, 5710, 5717, 5720, 5728, 5733, 5738, 5729, 5743, 5730, 5747, - 5753, 5759, 5764, 5769, 5776, 5781, 5785, 5788, 5792, 2140, 516, 5796, - 5800, 5805, 5811, 5816, 5820, 5823, 5827, 5832, 5836, 5843, 5847, 5851, - 5855, 884, 699, 5858, 5866, 5873, 5880, 5886, 5893, 5901, 5908, 5915, - 5920, 5932, 1266, 1396, 1401, 5943, 1406, 5947, 5951, 5960, 5969, 5975, - 5980, 5984, 5990, 5995, 6002, 6006, 6015, 6024, 6033, 6042, 6047, 6052, - 6064, 6069, 3312, 6073, 6075, 6080, 6084, 6093, 6101, 1410, 825, 3316, - 3321, 6107, 6111, 6120, 6126, 6131, 6134, 6143, 2591, 6149, 6157, 6161, - 6165, 3325, 6169, 6174, 6181, 6187, 6193, 6196, 6198, 6201, 6209, 6217, - 6225, 6228, 6233, 5740, 6236, 6238, 6243, 6248, 6253, 6258, 6263, 6268, - 6273, 6278, 6283, 6288, 6294, 6299, 6304, 6309, 6315, 6320, 6325, 6330, - 6335, 6340, 6345, 6351, 6356, 6361, 6366, 6371, 6376, 6381, 6386, 6391, - 6396, 6401, 6406, 6411, 6416, 6421, 6426, 6431, 6436, 6442, 6448, 6453, - 6458, 6463, 6468, 6473, 2197, 2204, 2210, 6478, 6484, 2236, 2242, 6492, - 6496, 6501, 6505, 6509, 6513, 6518, 6522, 6527, 6531, 6534, 6537, 6543, - 6549, 6555, 6561, 6567, 6573, 6579, 6583, 6587, 6591, 6595, 6599, 6604, - 6611, 6619, 6629, 6634, 6638, 6649, 6662, 6673, 6686, 6697, 6709, 6721, - 6733, 6746, 6759, 6766, 6772, 6779, 6785, 6789, 6794, 6798, 6805, 6813, - 6817, 6823, 6833, 6837, 6842, 6847, 6854, 6860, 5888, 6870, 6874, 6881, - 698, 6885, 6889, 6894, 6899, 6904, 6908, 6914, 6922, 6926, 6936, 6940, - 6946, 6951, 6955, 2132, 6961, 6969, 6978, 6982, 6988, 6993, 6998, 7003, - 7009, 7014, 3708, 7019, 7023, 7029, 7035, 7040, 7045, 7050, 6983, 7056, - 7060, 7067, 7073, 7078, 7082, 7087, 7091, 7100, 6177, 6184, 7105, 2732, - 7109, 7114, 7119, 6989, 7123, 6994, 6999, 7128, 7135, 7142, 7148, 7154, - 7160, 7165, 7170, 7175, 7004, 7010, 7181, 7187, 7192, 7200, 7015, 7205, - 1079, 7208, 7216, 7222, 7228, 7237, 7242, 7248, 7263, 7280, 7299, 7308, - 7316, 7331, 7341, 7351, 7357, 7369, 7378, 7386, 7393, 7400, 7406, 7411, - 7419, 7429, 7436, 7446, 7456, 7466, 7475, 7485, 7499, 7514, 7523, 7531, - 7536, 7540, 7549, 7559, 7569, 7579, 7584, 7588, 7597, 7607, 7618, 7631, - 7644, 7656, 7664, 7669, 7675, 7678, 7682, 7690, 7695, 7699, 7707, 7716, - 7724, 7731, 7742, 7746, 7749, 7755, 7759, 7765, 7772, 7777, 7784, 7791, - 7798, 7805, 7812, 7819, 7824, 7276, 7829, 7836, 7845, 7849, 7861, 7865, - 7868, 7872, 7876, 7880, 7884, 7890, 7895, 7901, 7906, 7911, 7917, 7922, - 7927, 6850, 7932, 7936, 7940, 7944, 7949, 7954, 7960, 7964, 7971, 7976, - 7984, 7988, 7991, 7997, 8004, 8008, 8011, 8016, 8020, 3736, 8026, 8034, - 8040, 6865, 8045, 8051, 8056, 8060, 8063, 8078, 8097, 8109, 8122, 8135, - 8148, 8162, 8175, 8190, 8197, 8203, 8207, 8212, 8218, 8226, 8231, 6011, - 8236, 8239, 8244, 8248, 2737, 877, 8254, 8258, 8264, 8270, 8275, 8281, - 8286, 7024, 8292, 8298, 8303, 8308, 8316, 8322, 8335, 8343, 8350, 8354, - 8362, 8369, 8381, 8391, 8398, 8405, 8414, 8423, 8431, 8436, 8442, 7030, - 8447, 8453, 7036, 8458, 8461, 8468, 8474, 8487, 8498, 8505, 8511, 8520, - 8528, 8535, 8541, 8547, 8552, 8556, 8561, 8070, 8567, 7041, 8574, 8579, - 8586, 8592, 8598, 8603, 8611, 8619, 8626, 8630, 8644, 8654, 8659, 8663, - 8674, 8680, 8685, 8690, 8694, 7046, 8699, 8702, 8707, 8719, 8726, 8731, - 8735, 8740, 8744, 8751, 8757, 7051, 6984, 8764, 2742, 8, 8771, 8776, - 8780, 8786, 8797, 8807, 8816, 8828, 8833, 8837, 8845, 8859, 8863, 8866, - 8874, 8881, 8889, 8893, 8904, 8908, 8915, 8920, 8924, 8930, 8935, 8939, - 8944, 8948, 8951, 8957, 8962, 8968, 8975, 8985, 8994, 9001, 7061, 7068, - 7074, 7079, 9007, 7083, 9013, 9016, 9023, 9038, 9054, 9069, 970, 406, - 9074, 9082, 9089, 9095, 9100, 9105, 7092, 9107, 9111, 9115, 9125, 9130, - 9134, 9143, 9147, 9150, 9157, 9161, 9164, 9172, 9179, 9187, 9191, 9198, - 9202, 9208, 9212, 9216, 9220, 9226, 9230, 9234, 9241, 9245, 9250, 9254, - 9261, 9267, 9275, 9281, 9291, 9296, 9301, 9305, 9313, 3641, 9321, 9326, - 9330, 9334, 9337, 9345, 9352, 9356, 9360, 9365, 9369, 9380, 9386, 9390, - 9393, 9400, 9405, 7101, 9410, 9414, 1704, 4265, 9421, 9426, 9431, 9436, - 9442, 9447, 9453, 9458, 9463, 9468, 9473, 9478, 9483, 9488, 9493, 9498, - 9503, 9508, 9513, 9518, 9523, 9528, 9533, 9539, 9544, 9549, 9554, 9559, - 9564, 9570, 9575, 9580, 9586, 9591, 9597, 9602, 9608, 9613, 9618, 9623, - 9628, 9634, 9639, 9644, 670, 134, 9649, 9653, 9658, 9663, 9667, 9671, - 9675, 9680, 9684, 9689, 9693, 9696, 9700, 9704, 9709, 9719, 9725, 9729, - 9733, 9740, 9748, 9757, 9768, 9775, 9782, 9791, 9800, 9809, 9818, 9827, - 9836, 9846, 9856, 9866, 9876, 9886, 9895, 9905, 9915, 9925, 9935, 9945, - 9955, 9965, 9974, 9984, 9994, 10004, 10014, 10024, 10034, 10043, 10053, - 10063, 10073, 10083, 10093, 10103, 10113, 10123, 10133, 10142, 10152, - 10162, 10172, 10182, 10192, 10202, 10212, 10222, 10232, 10242, 10251, - 10257, 10261, 10264, 10268, 10273, 10280, 10286, 10291, 10295, 10300, - 10304, 10308, 7110, 10314, 10319, 10328, 7115, 10333, 10336, 10342, - 10350, 7120, 10357, 10361, 10365, 10369, 10379, 10384, 10393, 10401, - 10408, 10413, 10420, 10425, 10429, 10432, 10443, 10453, 10462, 10470, - 10481, 10493, 10503, 10507, 10512, 10517, 10521, 10526, 10535, 10539, - 10542, 10549, 10559, 10568, 10575, 10579, 10585, 10590, 10595, 10599, - 10608, 10613, 10619, 10624, 10628, 10637, 10645, 10653, 10660, 10668, - 10680, 10691, 10701, 10708, 10714, 10723, 10734, 10743, 10752, 10760, - 10767, 10776, 10784, 5761, 10788, 10790, 10795, 10801, 10809, 10816, - 10825, 10834, 10843, 10852, 10861, 10870, 10879, 10888, 10898, 10908, - 10917, 10924, 10938, 10945, 10953, 10962, 10968, 10977, 10985, 10994, - 11007, 11015, 11022, 11035, 11041, 11050, 11059, 11064, 11068, 11074, - 11080, 11087, 6864, 11092, 11097, 11104, 11109, 11114, 11118, 11124, - 11132, 11140, 11147, 11155, 11163, 11168, 11174, 11179, 11183, 11194, - 11202, 11208, 11213, 11222, 11228, 11233, 11242, 11256, 3600, 11260, - 11265, 11270, 11276, 11281, 11286, 11290, 11295, 11300, 5760, 11305, - 11310, 11315, 11320, 11324, 11329, 11334, 11339, 11345, 11351, 11356, - 11360, 11365, 11370, 11375, 7124, 11380, 11385, 11390, 11395, 11412, - 11430, 11442, 11455, 11472, 11488, 11505, 11515, 11534, 11545, 11556, - 11567, 11578, 11590, 11601, 11612, 11629, 11640, 11651, 11656, 2317, - 11660, 11663, 11669, 11677, 11685, 11690, 11698, 11706, 11713, 11718, - 11724, 11731, 11739, 11746, 11758, 11763, 9032, 11769, 11778, 11786, - 11793, 11799, 11807, 11814, 11821, 11827, 11836, 11844, 11851, 11859, - 11865, 11872, 11880, 11885, 3372, 1187, 11892, 11895, 11306, 11899, - 11905, 11909, 11921, 11926, 11933, 11939, 11944, 11951, 11311, 11316, - 11955, 11959, 11964, 11968, 11976, 11983, 11990, 12007, 12011, 12014, - 12022, 12028, 3428, 12032, 12034, 12042, 12049, 12059, 12064, 12070, - 12075, 12079, 12085, 12090, 12093, 12100, 12106, 12112, 12117, 12124, - 12130, 12135, 12142, 12146, 12152, 12159, 12165, 12171, 12179, 12185, - 12193, 12199, 12205, 12210, 12217, 12222, 12226, 12231, 12238, 12243, - 12249, 12255, 12261, 12264, 12268, 12280, 12286, 12291, 12298, 12304, - 12310, 12321, 12331, 12340, 12348, 12355, 12365, 12375, 12383, 12386, - 11330, 12391, 11335, 11460, 12399, 12412, 12427, 12438, 11477, 12456, - 12469, 12482, 12493, 8085, 12504, 12517, 12536, 12547, 12558, 12569, - 2542, 12582, 12586, 12594, 12605, 12612, 12618, 12626, 12630, 12636, - 12639, 12649, 12657, 12664, 12672, 12677, 12682, 12689, 12695, 12700, - 12705, 12709, 12713, 12719, 12725, 12730, 12735, 12740, 12744, 11340, - 11346, 11352, 12748, 12756, 12765, 12772, 7000, 12776, 12778, 12783, - 12788, 12794, 12799, 12804, 12809, 12814, 12818, 12824, 12830, 12835, - 12841, 12846, 12851, 12857, 12862, 12867, 12872, 12878, 12883, 12888, - 12894, 12900, 12905, 12912, 12919, 12924, 12928, 12932, 12935, 12943, - 12948, 12955, 12960, 12965, 12975, 12980, 12987, 12993, 13003, 13017, - 13031, 13045, 13059, 13074, 13089, 13106, 13124, 13137, 13143, 13148, - 13153, 13159, 13164, 13169, 13173, 13177, 13182, 13186, 13197, 13203, - 13208, 13213, 13217, 13222, 13228, 13235, 13240, 13244, 13250, 13255, - 13260, 13264, 13270, 13275, 13280, 13287, 13292, 13296, 13300, 13305, - 13310, 13316, 13322, 13327, 13336, 13344, 13351, 13358, 13364, 13370, - 13375, 13380, 13386, 13391, 13397, 13402, 13408, 13414, 13421, 13427, - 13432, 13437, 7166, 13446, 13449, 13455, 13460, 13465, 13475, 13482, - 13487, 13493, 13498, 13504, 13509, 13515, 13521, 13526, 13534, 13541, - 13546, 13552, 13557, 13561, 13570, 13581, 13588, 13596, 13602, 13609, - 13615, 13620, 13624, 13630, 13635, 13640, 13645, 7171, 5777, 2756, 13649, - 13653, 13657, 13661, 13665, 13668, 13675, 13683, 11366, 13690, 13700, - 13708, 13715, 13723, 13733, 13742, 13747, 10458, 10467, 13752, 13762, - 13777, 13783, 13790, 13797, 13803, 13813, 13823, 11371, 13832, 13838, - 13844, 13852, 13860, 13865, 13874, 13882, 13894, 13904, 13914, 13924, - 13933, 13945, 13955, 13965, 13976, 13981, 13993, 14005, 14017, 14029, - 14041, 14053, 14065, 14077, 14089, 14101, 14112, 14124, 14136, 14148, - 14160, 14172, 14184, 14196, 14208, 14220, 14232, 14243, 14255, 14267, - 14279, 14291, 14303, 14315, 14327, 14339, 14351, 14363, 14374, 14386, - 14398, 14410, 14422, 14434, 14446, 14458, 14470, 14482, 14494, 14505, - 14517, 14529, 14541, 14553, 14565, 14577, 14589, 14601, 14613, 14625, - 14636, 14648, 14660, 14672, 14684, 14696, 14708, 14720, 14732, 14744, - 14756, 14767, 14779, 14791, 14803, 14815, 14827, 14839, 14851, 14863, - 14875, 14887, 14898, 14910, 14922, 14934, 14946, 14959, 14972, 14985, - 14998, 15011, 15024, 15037, 15049, 15062, 15075, 15088, 15101, 15114, - 15127, 15140, 15153, 15166, 15179, 15191, 15204, 15217, 15230, 15243, - 15256, 15269, 15282, 15295, 15308, 15321, 15333, 15346, 15359, 15372, - 15385, 15398, 15411, 15424, 15437, 15450, 15463, 15475, 15488, 15501, - 15514, 15527, 15540, 15553, 15566, 15579, 15592, 15605, 15617, 15630, - 15643, 15656, 15669, 15682, 15695, 15708, 15721, 15734, 15747, 15759, - 15770, 15783, 15796, 15809, 15822, 15835, 15848, 15861, 15874, 15887, - 15900, 15912, 15925, 15938, 15951, 15964, 15977, 15990, 16003, 16016, - 16029, 16042, 16054, 16067, 16080, 16093, 16106, 16119, 16132, 16145, - 16158, 16171, 16184, 16196, 16209, 16222, 16235, 16248, 16261, 16274, - 16287, 16300, 16313, 16326, 16338, 16351, 16364, 16377, 16390, 16403, - 16416, 16429, 16442, 16455, 16468, 16480, 16493, 16506, 16519, 16532, - 16545, 16558, 16571, 16584, 16597, 16610, 16622, 16635, 16648, 16661, - 16674, 16687, 16700, 16713, 16726, 16739, 16752, 16764, 16777, 16790, - 16803, 16816, 16829, 16842, 16855, 16868, 16881, 16894, 16906, 16919, - 16932, 16945, 16958, 16971, 16984, 16997, 17010, 17023, 17036, 17048, - 17061, 17074, 17087, 17100, 17113, 17126, 17139, 17152, 17165, 17178, - 17190, 17201, 17209, 17216, 17222, 17226, 17232, 17238, 17246, 17252, - 17257, 7005, 17261, 17268, 17276, 17283, 17290, 8481, 17297, 17306, - 17311, 5793, 17318, 17323, 17326, 17331, 17339, 17346, 17353, 17359, - 17368, 17377, 17383, 17388, 17398, 17405, 17413, 17419, 17429, 17438, - 17442, 17449, 17453, 17458, 17464, 17472, 17476, 11381, 17485, 17491, - 17495, 17501, 17508, 17519, 6829, 17527, 17533, 17538, 17542, 17546, - 7415, 17551, 17559, 17566, 17575, 17582, 17589, 17595, 17599, 17605, - 17611, 17619, 17625, 17632, 17638, 17644, 17648, 17656, 17665, 17670, - 17681, 17686, 17691, 17696, 5966, 17700, 17706, 17713, 17722, 17727, - 17735, 17747, 17752, 17756, 17759, 17765, 17771, 17776, 17780, 17783, - 17794, 17799, 7201, 17806, 7016, 7206, 17811, 17816, 17821, 17826, 17831, - 17836, 17841, 17846, 17851, 17856, 17861, 17866, 17872, 17877, 17882, - 17887, 17892, 17897, 17902, 17907, 17912, 17917, 17923, 17929, 17934, - 17939, 17944, 17949, 17954, 17959, 17964, 17969, 17974, 17980, 17985, - 17990, 17995, 18001, 18007, 18012, 18017, 18022, 18027, 18032, 18037, - 18042, 18047, 18053, 18058, 18063, 18068, 18073, 18079, 18084, 18089, - 18093, 129, 18101, 18105, 18109, 18113, 18118, 18122, 18126, 9788, 18130, - 18135, 18139, 18144, 18148, 18153, 18157, 18163, 18168, 18172, 18176, - 18184, 18188, 18193, 18198, 18202, 18208, 18213, 18217, 18222, 18227, - 18231, 18238, 18242, 18246, 18251, 18255, 18258, 18271, 18276, 18285, - 7238, 18290, 18293, 2605, 2610, 18297, 18303, 18309, 18314, 18319, 18324, - 18330, 18335, 18340, 18344, 18349, 18354, 18360, 18365, 18370, 18376, - 18381, 18385, 18390, 18395, 18400, 18404, 18409, 18414, 18419, 18424, - 18428, 18432, 18437, 2765, 18386, 18441, 18448, 7494, 18460, 18468, - 18391, 18475, 18480, 18396, 18488, 18493, 18498, 18503, 18507, 18512, - 18515, 18519, 18525, 18530, 6856, 1709, 1714, 18534, 18540, 18546, 18551, - 18555, 18559, 18563, 18566, 18572, 18579, 18587, 18593, 18599, 18604, - 18609, 18613, 11741, 12361, 18618, 18630, 18633, 18640, 18644, 18652, - 18663, 18672, 18685, 18695, 18709, 18721, 18735, 18745, 18757, 18763, - 18778, 18802, 18820, 18839, 18852, 18866, 18884, 18900, 18917, 18935, - 18946, 18965, 18982, 19002, 19020, 19032, 19046, 19060, 19072, 19089, - 19108, 19126, 19138, 19156, 19175, 11520, 19188, 19208, 19220, 8116, - 19232, 19237, 19242, 19247, 19253, 19258, 2334, 19262, 19268, 19272, - 19275, 19279, 19287, 19293, 18405, 19297, 19308, 19314, 19320, 19329, - 19336, 19341, 19348, 19354, 19363, 19371, 19381, 19391, 19396, 19405, - 19414, 19425, 19436, 3677, 19446, 19450, 19460, 19468, 19478, 19489, - 19497, 19504, 19510, 19515, 18415, 19519, 19528, 19532, 19537, 19546, - 19554, 19564, 19573, 19579, 19585, 18420, 18425, 19589, 19599, 916, - 19608, 11702, 1154, 19622, 19631, 19639, 19650, 19661, 19671, 19680, - 19689, 19698, 19704, 19713, 19721, 7178, 19727, 19730, 19734, 19739, - 19744, 19752, 18433, 19756, 19762, 19768, 19773, 19778, 19782, 19790, - 19796, 19802, 3351, 19810, 19815, 19820, 19824, 19828, 19835, 19839, - 19847, 19853, 19858, 19862, 19867, 19873, 19877, 19888, 19893, 19897, - 19908, 19912, 19916, 19919, 19923, 19928, 19932, 19936, 903, 19940, - 19945, 19950, 19955, 19960, 19965, 19970, 19975, 19980, 19985, 19990, - 19995, 20000, 20005, 20011, 20016, 20021, 20026, 20031, 20036, 20041, - 20047, 20052, 20057, 20062, 20067, 20072, 20077, 20082, 20088, 20094, - 20099, 20105, 20110, 20115, 5, 20121, 20125, 20129, 20133, 20138, 20142, - 20146, 20150, 20154, 20159, 20163, 20168, 20172, 20175, 20179, 20184, - 20188, 20193, 20197, 20201, 20205, 20210, 20214, 20218, 20228, 20233, - 20237, 20241, 20246, 20251, 20260, 20265, 20270, 20274, 20278, 20290, - 20299, 20308, 20314, 20318, 20322, 20332, 20341, 20349, 20355, 20359, - 20366, 20376, 20385, 20393, 20401, 20408, 20416, 20425, 20434, 20442, - 20447, 20451, 20455, 20458, 20460, 20464, 20468, 20473, 20478, 20482, - 20486, 20489, 20493, 20496, 20500, 20503, 20506, 20510, 20516, 20520, - 20524, 20528, 20533, 20538, 20543, 20547, 20550, 20555, 20561, 20566, - 20572, 20577, 20581, 20585, 20589, 20594, 20598, 20603, 20607, 20614, - 20618, 20621, 20625, 20631, 20637, 20641, 20645, 20650, 20657, 20663, - 20667, 20676, 20680, 20684, 20687, 20693, 20698, 20704, 1471, 1773, - 20709, 20714, 20719, 20724, 20729, 20734, 20739, 2157, 20744, 20745, - 20748, 20752, 20756, 20761, 20765, 20769, 20772, 20777, 20782, 20786, - 20789, 20794, 20798, 20803, 20807, 11714, 20812, 20815, 20818, 20822, - 20826, 20835, 20842, 20847, 20854, 20858, 20862, 20867, 20872, 20876, - 20881, 20893, 20904, 20909, 20913, 20918, 20922, 20925, 20931, 5894, - 2252, 20935, 20951, 7270, 20971, 20980, 20996, 21000, 21003, 21009, - 21019, 21025, 21040, 21052, 21063, 21071, 21080, 21086, 21095, 21105, - 21116, 21127, 21136, 21145, 21153, 21160, 21168, 21181, 21187, 21192, - 21198, 21203, 21211, 21223, 21235, 21249, 21257, 21264, 21273, 21282, - 21290, 21298, 21306, 21313, 21322, 21330, 21340, 21349, 21359, 21368, - 21377, 21385, 21390, 21394, 21397, 21401, 21405, 21409, 21413, 21417, - 21423, 21429, 11759, 21434, 21446, 21452, 7623, 21463, 21473, 21482, - 21486, 21489, 21493, 21499, 21503, 21508, 21517, 21524, 5935, 21531, - 21539, 21546, 21552, 21557, 21563, 21569, 21577, 21581, 21584, 21586, - 21402, 21595, 21601, 21611, 21616, 21622, 21627, 21632, 21637, 21644, - 21653, 21662, 21668, 21673, 21679, 21684, 21691, 21702, 21707, 21711, - 21721, 21725, 21730, 21740, 21749, 21753, 21761, 21768, 21774, 21779, - 21786, 21790, 10323, 21798, 21805, 21812, 18204, 21327, 21817, 21821, - 18952, 21826, 21840, 21856, 21874, 21893, 21910, 21928, 18971, 21945, - 21965, 18988, 21977, 21989, 12443, 22001, 19008, 22015, 22027, 8129, - 22041, 22046, 22051, 22057, 22061, 22066, 22076, 22082, 7994, 22088, - 22090, 22095, 22103, 22107, 21640, 22113, 22120, 22130, 22135, 22139, - 22142, 22148, 22156, 22166, 22182, 22195, 22209, 12461, 22223, 22230, - 22234, 22237, 22242, 22246, 22256, 22261, 22266, 22271, 22279, 22287, - 22296, 22301, 12466, 22305, 22308, 22311, 22316, 22332, 22340, 22348, - 22356, 22361, 22365, 22371, 22377, 22380, 22386, 22398, 22405, 22411, - 22418, 22432, 22445, 22454, 22466, 22477, 22486, 22495, 22503, 22514, - 5917, 22521, 22527, 22532, 22538, 22548, 22557, 22563, 22568, 22575, - 22583, 22595, 22602, 22611, 22619, 22625, 22631, 22636, 22640, 22643, - 22649, 22654, 22658, 22669, 22678, 22686, 22691, 22697, 10921, 6581, - 22702, 22705, 22708, 22714, 22722, 22730, 22734, 22738, 22743, 22746, - 22755, 22763, 22774, 22778, 22784, 22790, 22794, 22800, 22822, 22846, - 22853, 22859, 22870, 22888, 22895, 22903, 22907, 22916, 22929, 22937, - 22949, 22960, 22970, 22984, 22993, 23001, 23013, 7287, 23024, 23035, - 23047, 23057, 23066, 23071, 23075, 23083, 23088, 23092, 23095, 23098, - 23106, 23114, 23123, 23133, 23142, 23148, 23162, 2556, 23184, 23193, - 23203, 23215, 23225, 23233, 23241, 23250, 23255, 23266, 23277, 23281, - 23291, 23300, 23310, 23320, 23328, 23337, 23344, 23352, 23359, 23368, - 23372, 23380, 23387, 23394, 23405, 23420, 23427, 23437, 23446, 23452, - 11054, 23459, 23464, 23468, 23472, 23480, 23486, 23495, 23500, 23510, - 19517, 23514, 23517, 23522, 23527, 23532, 23537, 23542, 23547, 23552, - 23557, 23563, 23568, 23573, 23579, 1242, 639, 23584, 23593, 2300, 23600, - 23605, 23609, 23615, 1275, 506, 343, 23620, 23629, 23637, 23646, 23654, - 23665, 23674, 23682, 23686, 23689, 23697, 23705, 11727, 23710, 23716, - 4101, 23721, 23725, 23731, 23735, 23742, 1437, 23748, 7355, 23755, 23765, - 23773, 23779, 23788, 23796, 23802, 23810, 23817, 23824, 1478, 2338, - 23831, 23837, 23848, 23859, 23867, 23874, 23883, 23891, 23898, 23905, - 23918, 23929, 23948, 1280, 23952, 23957, 23965, 3387, 23969, 23974, 1441, - 20487, 23984, 23988, 23993, 23997, 3333, 24003, 24011, 24018, 24026, - 3388, 260, 24031, 24039, 24047, 24054, 24060, 24065, 24072, 24075, 24081, - 21504, 24087, 106, 24091, 24095, 24101, 24106, 24113, 24119, 2263, 24123, - 24127, 24130, 24133, 24140, 24146, 18500, 24151, 3432, 13175, 24155, - 24158, 24166, 24169, 24179, 24191, 24196, 24200, 24208, 24215, 24221, - 24228, 24235, 24238, 24242, 24246, 1445, 24256, 24258, 24263, 24269, - 24275, 24280, 24285, 24290, 24295, 24300, 24305, 24310, 24315, 24320, - 24325, 24330, 24335, 24340, 24345, 24351, 24357, 24363, 24369, 24374, - 24379, 24384, 24390, 24395, 24400, 24405, 24411, 24416, 24422, 24427, - 24432, 24437, 24442, 24448, 24453, 24459, 24464, 24469, 24474, 24479, - 24485, 24490, 24496, 24501, 24506, 24511, 24516, 24521, 24526, 24531, - 24536, 24541, 24547, 24553, 24559, 24564, 24569, 24574, 24579, 24585, - 24591, 24597, 24603, 24609, 24615, 24620, 24626, 24631, 24636, 24641, - 24646, 24652, 2376, 24657, 2383, 2390, 2647, 24662, 2396, 2406, 24668, - 24672, 24677, 24682, 24688, 24693, 24698, 24702, 24707, 24713, 24718, - 24723, 24729, 24734, 24738, 24743, 24748, 24753, 24758, 24763, 24769, - 24775, 24780, 24784, 24789, 24793, 24798, 24803, 24808, 24812, 24817, - 24822, 24827, 24832, 24838, 24844, 24849, 24853, 24858, 24863, 24868, - 24873, 24878, 24882, 24887, 24892, 24897, 24901, 24906, 24914, 24920, - 24926, 24932, 24937, 24941, 24944, 24948, 24953, 24957, 24962, 24966, - 24969, 24974, 17578, 23752, 24979, 24984, 24988, 24993, 24997, 25001, - 25006, 25010, 25013, 25016, 25020, 25025, 25033, 25037, 25042, 25046, - 25050, 25055, 25060, 25064, 25070, 25075, 25080, 25087, 25094, 25098, - 25101, 25107, 25116, 25123, 25130, 25134, 25139, 25143, 25149, 25155, - 25159, 25165, 25170, 25175, 25182, 25188, 25194, 25200, 25206, 25213, - 25219, 25225, 25231, 25237, 25243, 25249, 25255, 25262, 25268, 25275, - 25281, 25287, 25293, 25299, 25305, 25311, 25317, 25323, 25329, 8917, - 25335, 25340, 25345, 12716, 25350, 25355, 25360, 25366, 25371, 25376, - 25380, 25385, 25390, 25396, 25401, 25406, 25410, 25415, 25420, 25424, - 25429, 25434, 25439, 25443, 25448, 25453, 25458, 25462, 25466, 12060, - 25470, 25479, 25485, 25491, 25500, 25508, 25513, 25517, 25524, 25530, - 25534, 25539, 25548, 25553, 1477, 25559, 25562, 25566, 18541, 18547, - 25572, 25576, 25587, 25598, 25610, 25617, 25624, 25629, 25633, 17235, - 685, 17577, 25641, 25645, 25650, 25656, 25661, 25667, 25672, 25678, - 25683, 8022, 2714, 3282, 25687, 25690, 25696, 25702, 25708, 25715, 25721, - 25727, 25733, 25739, 25745, 25751, 25757, 25763, 25769, 25775, 25781, - 25787, 25794, 25800, 25806, 25812, 25818, 25824, 25827, 25832, 25837, - 25843, 25848, 25853, 25857, 25862, 25868, 25873, 25878, 25884, 25889, - 25895, 25899, 25904, 25909, 25914, 25919, 25923, 25928, 25933, 25938, - 25944, 25950, 25956, 25961, 25965, 25970, 25974, 25982, 3455, 25988, - 25991, 5976, 25995, 26001, 26008, 5985, 26012, 26018, 26025, 26031, - 26040, 26048, 26052, 26059, 26065, 26069, 26072, 26081, 26089, 26093, - 26103, 26113, 26123, 26129, 26139, 26144, 26157, 26171, 26182, 26194, - 26206, 26220, 26233, 26245, 26257, 11561, 26271, 26276, 26281, 26285, - 26289, 26293, 1762, 22475, 26297, 26302, 26307, 26311, 26314, 26319, - 26324, 26330, 26336, 7767, 12395, 26341, 26346, 26351, 26355, 26360, - 25651, 26365, 26370, 26376, 25657, 26381, 26384, 26392, 25662, 26397, - 26403, 26409, 25668, 26414, 26419, 26425, 26430, 26435, 26441, 26447, - 23128, 26452, 26456, 26461, 26466, 26471, 26479, 26483, 26488, 26493, - 26497, 26502, 26507, 26512, 25673, 25679, 26518, 2452, 234, 26521, 26524, - 26528, 26532, 26540, 26547, 26554, 26558, 26561, 26567, 26575, 26583, - 26587, 26591, 26594, 26601, 26605, 26612, 26620, 26628, 26635, 26639, - 635, 292, 26651, 26656, 26661, 26667, 26672, 3466, 26677, 26682, 26687, - 26692, 26697, 18626, 26702, 26707, 26712, 26717, 26723, 26728, 26732, - 26737, 26742, 26747, 26751, 26756, 26761, 26766, 18464, 3472, 26771, - 26776, 26781, 26787, 26792, 26797, 26801, 26806, 26811, 26817, 26822, - 26827, 26831, 26836, 26841, 26846, 26850, 26855, 26860, 26865, 26871, - 26877, 26882, 26886, 26891, 26896, 26901, 26905, 26913, 26917, 26923, - 26927, 26934, 13070, 26940, 26947, 26955, 26962, 26968, 26980, 26986, - 2666, 26990, 26596, 26994, 27005, 27010, 27015, 27020, 27024, 27029, - 18552, 27033, 17591, 27038, 27043, 27049, 27054, 27058, 27062, 27065, - 27071, 27082, 27094, 27099, 27103, 27106, 321, 27110, 27115, 27120, - 27125, 27130, 27135, 27141, 27146, 27151, 27157, 27162, 27168, 27173, - 27179, 27184, 27189, 27194, 27199, 27204, 27209, 27214, 27219, 27225, - 27230, 27235, 27240, 27245, 27250, 27255, 27260, 27266, 27272, 27277, - 27282, 27287, 27292, 27297, 27302, 27307, 27312, 27317, 27322, 27327, - 27332, 27337, 27342, 27347, 27352, 27357, 27362, 27368, 26, 27373, 27377, - 27381, 27389, 27393, 27397, 27400, 27403, 27408, 27412, 27417, 27421, - 27426, 27430, 27435, 27439, 27442, 27444, 27447, 27449, 27453, 27465, - 27474, 27478, 27484, 27489, 27495, 27500, 27505, 27509, 27514, 27521, - 27526, 27532, 27537, 27541, 27548, 21335, 21345, 27552, 27557, 27562, - 27567, 27571, 27578, 6076, 27584, 27593, 27601, 27616, 27630, 27638, - 27649, 27658, 27663, 5243, 27673, 27678, 27682, 27685, 27689, 27693, - 27700, 27705, 6820, 27715, 27717, 27720, 27724, 27728, 27733, 27739, - 27744, 27753, 27759, 27764, 27771, 27775, 27782, 27795, 27803, 27807, - 27817, 27822, 27826, 27830, 27836, 27841, 27851, 27860, 27871, 27879, - 27890, 27899, 27902, 27906, 27914, 27920, 27928, 27935, 27941, 2351, - 27945, 27947, 27952, 27957, 27960, 27962, 27966, 27969, 27973, 27977, - 27980, 27986, 27996, 28001, 28007, 28011, 28016, 28029, 21606, 28035, - 28044, 13898, 26109, 28051, 28056, 28060, 28068, 28075, 28080, 28084, - 28088, 28096, 28102, 28108, 28113, 28117, 28120, 28125, 28138, 28154, - 19078, 28171, 28183, 28200, 28212, 28226, 19095, 19114, 28238, 28250, - 2573, 28264, 28269, 28274, 28278, 28285, 28297, 28303, 28306, 28311, - 18244, 28314, 28318, 28321, 28326, 28331, 28337, 28342, 28347, 28353, - 28359, 28364, 28368, 28373, 28378, 28383, 28387, 28390, 28396, 28401, - 28406, 28411, 28415, 28420, 28426, 28431, 28436, 28442, 28447, 28452, - 28457, 28462, 28467, 28471, 28474, 28480, 28484, 28492, 28499, 28507, - 28517, 28523, 28529, 28533, 28542, 28547, 28552, 8036, 28557, 28564, - 28570, 28575, 28581, 28589, 28596, 28600, 28603, 28614, 28621, 28627, - 28636, 28640, 28643, 28649, 28656, 28662, 28668, 28676, 24055, 28683, - 28691, 28697, 28702, 28708, 28713, 28719, 28723, 28730, 28736, 21619, - 28745, 28750, 28758, 28766, 7383, 4120, 28773, 28777, 28781, 28785, - 28790, 28794, 28798, 28803, 28808, 28812, 17640, 28817, 28821, 28825, - 28829, 28832, 28834, 28839, 28847, 28851, 28858, 28862, 28870, 28877, - 28887, 28891, 28895, 28903, 28909, 28918, 10570, 28924, 28933, 28940, - 28948, 28956, 28964, 28971, 28978, 28985, 28992, 28999, 29004, 29010, - 29027, 29035, 29043, 29050, 380, 29054, 29060, 27654, 29066, 29069, - 29077, 29083, 29089, 29098, 29104, 3420, 12046, 29113, 29120, 29125, - 29129, 29136, 29144, 29153, 29163, 29169, 29177, 29186, 29194, 18248, - 29201, 29208, 29214, 29224, 29233, 29244, 29248, 29254, 29259, 29265, - 29271, 29276, 29289, 29302, 29315, 29322, 29328, 29333, 29337, 1451, - 29341, 29346, 29351, 29356, 29361, 29367, 29372, 29377, 29382, 29387, - 29392, 29397, 29402, 29408, 29414, 29419, 29424, 29430, 29435, 29440, - 29445, 29451, 29456, 29461, 29466, 29471, 29477, 29482, 29487, 29493, - 29498, 29503, 29508, 29513, 29518, 29524, 29529, 29535, 29540, 29546, - 29551, 29556, 29561, 29567, 29573, 29579, 29585, 29591, 29597, 29603, - 29609, 29614, 29619, 29625, 29630, 29635, 29640, 29645, 29650, 29655, - 29660, 29666, 29671, 29676, 29682, 29688, 101, 29693, 29695, 29699, - 29703, 29707, 29712, 29716, 7323, 29720, 29726, 4331, 29732, 29735, - 29740, 29744, 29749, 29753, 29757, 29762, 7869, 29766, 29770, 29774, - 12131, 29779, 29783, 29788, 29793, 29798, 29802, 29809, 21623, 29815, - 29818, 29822, 29827, 29833, 29837, 29843, 29848, 29852, 29856, 29860, - 3317, 3322, 24194, 29863, 29871, 29878, 29882, 29887, 342, 29892, 29898, - 29904, 29908, 29917, 29921, 29925, 29930, 29935, 29939, 29946, 29952, - 29957, 29972, 29987, 30002, 30018, 30036, 7831, 30050, 30055, 30059, - 30067, 27788, 30075, 30079, 30088, 30096, 7546, 11842, 30100, 30103, - 30106, 6089, 3621, 30111, 30119, 30123, 30126, 30130, 30135, 30140, - 30146, 30151, 30155, 30159, 30164, 30168, 30174, 30178, 30185, 30189, - 9256, 30196, 30202, 30207, 30214, 30221, 30228, 23641, 6020, 30235, - 30242, 30249, 30255, 30260, 30267, 30278, 30284, 30289, 30296, 30300, - 30304, 30314, 30325, 30331, 30336, 30341, 30346, 30351, 30355, 30359, - 30365, 2255, 767, 7891, 7896, 7902, 30374, 7907, 7912, 7918, 30379, - 30389, 30393, 7923, 30398, 30401, 30406, 30410, 30415, 30422, 30428, - 30438, 4146, 30447, 30451, 30455, 30465, 30471, 30482, 30488, 30494, - 30499, 30505, 30511, 30516, 30519, 30526, 30532, 30537, 30544, 30551, - 30555, 30565, 30578, 30587, 30596, 30607, 30620, 30629, 30640, 30645, - 30650, 7928, 30656, 30664, 30669, 5094, 21, 30676, 30681, 13284, 30685, - 30688, 30691, 23219, 30695, 23650, 30703, 30707, 30710, 30716, 30722, - 30730, 30736, 30743, 30747, 30751, 23383, 30755, 30764, 30770, 30775, - 30779, 30787, 21669, 30793, 30800, 30806, 30811, 30816, 30820, 30826, - 30831, 30837, 3747, 716, 30844, 30848, 30851, 12054, 30863, 29182, 30874, - 30877, 30884, 30890, 30894, 30900, 30905, 30911, 30916, 30921, 30925, - 30930, 30935, 30945, 30951, 30964, 30970, 30975, 30981, 13193, 1454, 932, - 25770, 25776, 30986, 25782, 25795, 25801, 25807, 30992, 25813, 25819, - 30998, 31004, 14, 31012, 31019, 31023, 31027, 31035, 31039, 31044, 31048, - 31055, 31060, 31064, 31069, 31075, 31080, 31086, 31091, 31095, 31099, - 31103, 31108, 31112, 31117, 31121, 31128, 31133, 31137, 31142, 31146, - 31151, 31155, 31160, 12218, 12223, 31165, 31169, 31172, 31176, 31181, - 31185, 31191, 31198, 31203, 31213, 31218, 31226, 31230, 31233, 31237, - 31242, 31247, 31251, 31256, 10581, 31267, 31271, 31274, 31278, 31282, - 31285, 31289, 6108, 10597, 31292, 31295, 31300, 31304, 31313, 31329, - 31345, 31355, 23138, 31362, 31366, 31371, 31375, 31379, 31384, 31389, - 31393, 31398, 31402, 31406, 22323, 31412, 17702, 31417, 31424, 31432, - 31438, 31445, 31453, 31459, 31463, 31469, 31477, 31481, 31490, 7304, - 31498, 31502, 31510, 31517, 31522, 31526, 31529, 31533, 31536, 31540, - 31547, 31552, 21814, 25825, 31556, 31563, 31569, 31574, 31577, 31579, - 31586, 31593, 31599, 31603, 31606, 31610, 31614, 31618, 31623, 31627, - 31631, 31634, 31638, 31652, 19144, 31671, 31684, 31697, 31710, 19162, - 31725, 8090, 31740, 31746, 31750, 31754, 31761, 31767, 31772, 31778, - 31788, 31800, 31811, 31816, 31823, 31827, 31830, 12589, 31838, 12239, - 31851, 31855, 31859, 31864, 31869, 31873, 31877, 31880, 5750, 23022, - 31885, 31889, 31895, 31904, 31909, 29159, 31915, 31920, 31924, 31929, - 31936, 31940, 31943, 11526, 31948, 31955, 939, 31959, 31964, 31969, - 31975, 31980, 31985, 31989, 31994, 32000, 32005, 32011, 32016, 32022, - 32032, 32037, 32042, 32046, 5245, 5257, 32051, 32054, 32061, 32070, - 32074, 32077, 32081, 32086, 668, 32091, 32097, 23211, 32103, 32108, - 32118, 32127, 32134, 32140, 32144, 32151, 32157, 32164, 32170, 32180, - 32188, 32194, 32200, 32205, 32209, 32216, 32222, 32229, 31619, 548, 1208, - 32235, 32240, 32243, 32249, 32257, 1383, 32262, 32266, 32271, 32278, - 32284, 32288, 32293, 32302, 32309, 32319, 32325, 23237, 32342, 32351, - 32359, 32365, 32370, 32377, 32383, 32391, 32400, 32408, 32413, 32421, - 32427, 32446, 12522, 32460, 32476, 32490, 32496, 32501, 32506, 32511, - 32517, 32522, 32526, 32533, 32538, 32542, 319, 2807, 32549, 32554, 22579, - 32380, 32559, 32564, 32572, 32576, 32579, 32585, 32589, 23287, 32592, - 32596, 32599, 32604, 32608, 32613, 32618, 32622, 32627, 32631, 17511, - 17522, 32635, 32640, 32646, 22292, 32651, 32655, 12702, 32658, 32663, - 32668, 32673, 32678, 32683, 32688, 32693, 453, 43, 25828, 25833, 25838, - 25844, 25849, 25854, 32698, 25858, 32702, 32706, 25863, 25869, 32710, - 25874, 25879, 32718, 32723, 25885, 32728, 32733, 32738, 32743, 32749, - 32755, 25896, 32768, 32774, 25900, 25905, 32778, 25910, 25915, 32781, - 32786, 32790, 25591, 32796, 10746, 32803, 32808, 25920, 32812, 32817, - 32822, 32827, 32831, 32836, 32841, 32847, 32852, 32857, 32863, 32869, - 32874, 32878, 32883, 32888, 32893, 32897, 32902, 32907, 32912, 32918, - 32924, 32930, 32935, 32939, 32944, 32948, 25924, 25929, 25934, 32952, - 32956, 25939, 25945, 25951, 25957, 32968, 21521, 32972, 32976, 32981, - 32986, 32991, 32995, 32999, 33009, 33014, 33019, 33023, 33027, 33030, - 33038, 25966, 1461, 33043, 33051, 33060, 33064, 33072, 33080, 33096, - 33101, 1731, 9398, 33105, 2853, 33117, 33118, 33126, 33133, 33138, 33143, - 7197, 1043, 7950, 33150, 33155, 33158, 33167, 1294, 33172, 33179, 33182, - 33187, 18600, 2485, 33191, 8312, 33201, 33207, 2273, 2283, 33216, 33225, - 27997, 7985, 3565, 29063, 1299, 33235, 33243, 33250, 33255, 33259, 33263, - 19759, 8012, 33271, 33280, 33289, 33297, 33304, 33309, 33322, 33335, - 33347, 33359, 33371, 33384, 33395, 33406, 33414, 33422, 33434, 33446, - 33457, 33466, 33474, 33481, 33493, 33500, 33509, 33516, 33529, 33539, - 33544, 33550, 33555, 33559, 33566, 33570, 33577, 33585, 2451, 33592, - 33603, 33613, 33622, 33630, 33640, 33648, 33658, 33663, 33669, 33680, - 33690, 33699, 33708, 33718, 33727, 33732, 33737, 1687, 37, 33745, 33753, - 33764, 33775, 33785, 33792, 33798, 33803, 33807, 33818, 33828, 33837, - 33848, 13257, 13262, 33853, 33862, 33867, 33877, 33882, 33890, 33898, - 33905, 33911, 8057, 1018, 33915, 33921, 33926, 33929, 2094, 31856, 33937, - 33941, 33944, 1494, 33950, 11019, 1304, 33955, 33968, 33982, 2536, 34000, - 34012, 34024, 2550, 2567, 34038, 34051, 2582, 34065, 34077, 2597, 34091, - 1310, 1316, 1322, 8237, 34096, 34101, 34106, 34110, 34125, 34140, 34155, - 34170, 34185, 34200, 34215, 34230, 34245, 34260, 34275, 34290, 34305, - 34320, 34335, 34350, 34365, 34380, 34395, 34410, 34425, 34440, 34455, - 34470, 34485, 34500, 34515, 34530, 34545, 34560, 34575, 34590, 34605, - 34620, 34635, 34650, 34665, 34680, 34695, 34710, 34725, 34740, 34755, - 34770, 34785, 34800, 34815, 34830, 34845, 34860, 34875, 34890, 34905, - 34920, 34935, 34950, 34965, 34980, 34995, 35010, 35025, 35040, 35055, - 35070, 35085, 35100, 35115, 35130, 35145, 35160, 35175, 35190, 35205, - 35220, 35235, 35250, 35265, 35280, 35295, 35310, 35325, 35340, 35355, - 35370, 35385, 35400, 35415, 35430, 35445, 35460, 35475, 35490, 35505, - 35520, 35535, 35550, 35565, 35580, 35595, 35610, 35625, 35640, 35655, - 35670, 35685, 35700, 35715, 35730, 35745, 35760, 35775, 35790, 35805, - 35820, 35835, 35850, 35865, 35880, 35895, 35910, 35925, 35940, 35955, - 35970, 35985, 36000, 36015, 36030, 36045, 36060, 36075, 36090, 36105, - 36120, 36135, 36150, 36165, 36180, 36195, 36210, 36225, 36240, 36255, - 36270, 36285, 36300, 36315, 36330, 36345, 36360, 36375, 36390, 36405, - 36420, 36435, 36450, 36465, 36480, 36495, 36510, 36525, 36540, 36555, - 36570, 36585, 36600, 36615, 36630, 36645, 36660, 36675, 36690, 36705, - 36720, 36735, 36750, 36765, 36780, 36795, 36810, 36825, 36840, 36855, - 36870, 36885, 36900, 36915, 36930, 36945, 36960, 36975, 36990, 37005, - 37020, 37035, 37050, 37065, 37080, 37095, 37110, 37125, 37140, 37155, - 37170, 37185, 37200, 37215, 37230, 37245, 37260, 37275, 37290, 37305, - 37320, 37335, 37350, 37365, 37380, 37395, 37410, 37425, 37440, 37455, - 37470, 37485, 37500, 37515, 37530, 37545, 37560, 37575, 37590, 37605, - 37620, 37635, 37650, 37665, 37680, 37695, 37710, 37725, 37740, 37755, - 37770, 37785, 37800, 37815, 37830, 37845, 37860, 37875, 37890, 37905, - 37920, 37935, 37950, 37965, 37980, 37995, 38010, 38025, 38040, 38055, - 38070, 38085, 38100, 38115, 38130, 38145, 38160, 38175, 38190, 38205, - 38220, 38235, 38250, 38265, 38280, 38295, 38310, 38325, 38340, 38355, - 38370, 38385, 38400, 38415, 38430, 38445, 38460, 38475, 38490, 38505, - 38520, 38535, 38550, 38565, 38580, 38595, 38610, 38625, 38640, 38655, - 38670, 38685, 38700, 38715, 38730, 38745, 38760, 38775, 38790, 38805, - 38820, 38835, 38850, 38865, 38880, 38895, 38910, 38925, 38940, 38955, - 38970, 38985, 39000, 39015, 39030, 39045, 39060, 39075, 39090, 39105, - 39120, 39135, 39150, 39165, 39180, 39195, 39210, 39225, 39240, 39255, - 39270, 39285, 39300, 39315, 39330, 39345, 39360, 39375, 39390, 39405, - 39420, 39435, 39450, 39465, 39480, 39495, 39510, 39525, 39540, 39555, - 39570, 39585, 39600, 39615, 39630, 39645, 39660, 39675, 39690, 39705, - 39720, 39735, 39750, 39765, 39780, 39795, 39810, 39825, 39840, 39855, - 39870, 39885, 39900, 39915, 39930, 39945, 39960, 39975, 39990, 40005, - 40020, 40035, 40050, 40065, 40080, 40095, 40110, 40125, 40140, 40155, - 40170, 40185, 40200, 40215, 40230, 40245, 40260, 40275, 40290, 40305, - 40320, 40335, 40350, 40365, 40380, 40395, 40410, 40425, 40440, 40455, - 40470, 40485, 40500, 40515, 40530, 40545, 40560, 40575, 40590, 40605, - 40620, 40635, 40650, 40665, 40680, 40695, 40710, 40725, 40740, 40755, - 40770, 40785, 40800, 40815, 40830, 40845, 40860, 40875, 40890, 40905, - 40920, 40935, 40950, 40965, 40980, 40995, 41010, 41025, 41040, 41055, - 41070, 41085, 41100, 41115, 41130, 41145, 41160, 41175, 41190, 41205, - 41220, 41235, 41250, 41265, 41280, 41295, 41310, 41325, 41340, 41355, - 41370, 41385, 41400, 41415, 41430, 41445, 41460, 41475, 41490, 41505, - 41520, 41535, 41550, 41565, 41580, 41595, 41610, 41625, 41640, 41655, - 41670, 41685, 41700, 41715, 41730, 41745, 41761, 41777, 41793, 41809, - 41825, 41841, 41857, 41873, 41889, 41905, 41921, 41937, 41953, 41969, - 41985, 42001, 42017, 42033, 42049, 42065, 42081, 42097, 42113, 42129, - 42145, 42161, 42177, 42193, 42209, 42225, 42241, 42257, 42273, 42289, - 42305, 42321, 42337, 42353, 42369, 42385, 42401, 42417, 42433, 42449, - 42465, 42481, 42497, 42513, 42529, 42545, 42561, 42577, 42593, 42609, - 42625, 42641, 42657, 42673, 42689, 42705, 42721, 42737, 42753, 42769, - 42785, 42801, 42817, 42833, 42849, 42865, 42881, 42897, 42913, 42929, - 42945, 42961, 42977, 42993, 43009, 43025, 43041, 43057, 43073, 43089, - 43105, 43121, 43137, 43153, 43169, 43185, 43201, 43217, 43233, 43249, - 43265, 43281, 43297, 43313, 43329, 43345, 43361, 43377, 43393, 43409, - 43425, 43441, 43457, 43473, 43489, 43505, 43521, 43537, 43553, 43569, - 43585, 43601, 43617, 43633, 43649, 43665, 43681, 43697, 43713, 43729, - 43745, 43761, 43777, 43793, 43809, 43825, 43841, 43857, 43873, 43889, - 43905, 43921, 43937, 43953, 43969, 43985, 44001, 44017, 44033, 44049, - 44065, 44081, 44097, 44113, 44129, 44145, 44161, 44177, 44193, 44209, - 44225, 44241, 44257, 44273, 44289, 44305, 44321, 44337, 44353, 44369, - 44385, 44401, 44417, 44433, 44449, 44465, 44481, 44497, 44513, 44529, - 44545, 44561, 44577, 44593, 44609, 44625, 44641, 44657, 44673, 44689, - 44705, 44721, 44737, 44753, 44769, 44785, 44801, 44817, 44833, 44849, - 44865, 44881, 44897, 44913, 44929, 44945, 44961, 44977, 44993, 45009, - 45025, 45041, 45057, 45073, 45089, 45105, 45121, 45137, 45153, 45169, - 45185, 45201, 45217, 45233, 45249, 45265, 45281, 45297, 45313, 45329, - 45345, 45361, 45377, 45393, 45409, 45425, 45441, 45457, 45473, 45489, - 45505, 45521, 45537, 45553, 45569, 45585, 45601, 45617, 45633, 45649, - 45665, 45681, 45697, 45713, 45729, 45745, 45761, 45777, 45793, 45809, - 45825, 45841, 45857, 45873, 45889, 45905, 45921, 45937, 45953, 45969, - 45985, 46001, 46017, 46033, 46049, 46065, 46081, 46097, 46113, 46129, - 46145, 46161, 46177, 46193, 46209, 46225, 46241, 46257, 46273, 46289, - 46305, 46321, 46337, 46353, 46369, 46385, 46401, 46417, 46433, 46449, - 46465, 46481, 46497, 46513, 46529, 46545, 46561, 46577, 46593, 46609, - 46625, 46641, 46657, 46673, 46689, 46705, 46721, 46737, 46753, 46769, - 46785, 46801, 46817, 46833, 46849, 46865, 46881, 46897, 46913, 46929, - 46945, 46961, 46977, 46993, 47009, 47025, 47041, 47057, 47073, 47089, - 47105, 47121, 47137, 47153, 47169, 47185, 47201, 47217, 47233, 47249, - 47265, 47281, 47297, 47313, 47329, 47345, 47361, 47377, 47393, 47409, - 47425, 47441, 47457, 47473, 47489, 47505, 47521, 47537, 47553, 47569, - 47585, 47601, 47617, 47633, 47649, 47665, 47681, 47697, 47713, 47729, - 47745, 47761, 47777, 47793, 47809, 47825, 47841, 47857, 47873, 47889, - 47905, 47921, 47937, 47953, 47969, 47985, 48001, 48017, 48033, 48049, - 48065, 48081, 48097, 48113, 48129, 48145, 48161, 48177, 48193, 48209, - 48225, 48241, 48257, 48273, 48289, 48305, 48321, 48337, 48353, 48369, - 48385, 48401, 48417, 48433, 48449, 48465, 48481, 48497, 48513, 48529, - 48545, 48561, 48577, 48593, 48609, 48625, 48641, 48657, 48673, 48689, - 48705, 48721, 48737, 48753, 48769, 48785, 48801, 48817, 48833, 48849, - 48865, 48881, 48897, 48913, 48929, 48945, 48961, 48977, 48993, 49009, - 49025, 49041, 49057, 49073, 49089, 49105, 49121, 49137, 49153, 49169, - 49185, 49201, 49217, 49233, 49249, 49265, 49281, 49297, 49313, 49329, - 49345, 49361, 49377, 49393, 49409, 49425, 49441, 49457, 49473, 49489, - 49505, 49521, 49537, 49553, 49569, 49585, 49601, 49617, 49633, 49649, - 49665, 49681, 49697, 49713, 49729, 49745, 49761, 49777, 49793, 49809, - 49825, 49841, 49857, 49873, 49889, 49905, 49921, 49937, 49953, 49969, - 49985, 50001, 50017, 50033, 50049, 50065, 50081, 50097, 50113, 50129, - 50145, 50161, 50177, 50193, 50209, 50225, 50241, 50257, 50273, 50289, - 50305, 50321, 50337, 50353, 50369, 50385, 50401, 50417, 50432, 50441, - 50447, 50453, 50463, 50471, 11823, 13787, 7661, 50484, 1502, 50492, - 22665, 5207, 50498, 50503, 50508, 50513, 50518, 50524, 50529, 50535, - 50540, 50546, 50551, 50556, 50561, 50566, 50572, 50577, 50582, 50587, - 50592, 50597, 50602, 50607, 50613, 50618, 50624, 50631, 2489, 50636, - 50642, 6480, 50646, 50651, 50658, 50666, 40, 50670, 50676, 50681, 50686, - 50690, 50695, 50699, 50703, 8255, 50707, 50717, 50730, 50741, 50754, - 50761, 50767, 50772, 50778, 50784, 50790, 50795, 50800, 50805, 50810, - 50814, 50819, 50824, 50829, 50835, 50841, 50847, 50852, 50856, 50861, - 50866, 50870, 50875, 50880, 50885, 50889, 8271, 8282, 8287, 1545, 50893, - 1550, 50899, 50902, 1581, 50908, 1587, 1593, 8317, 50913, 50921, 50928, - 50932, 50938, 50943, 25620, 50948, 50955, 50960, 50964, 50968, 1598, - 12933, 12944, 50977, 50984, 50989, 50993, 12956, 1602, 30319, 50996, - 51006, 51010, 1607, 31921, 51015, 8437, 8443, 51021, 51033, 51050, 51067, - 51084, 51101, 51118, 51135, 51152, 51169, 51186, 51203, 51220, 51237, - 51254, 51271, 51288, 51305, 51322, 51339, 51356, 51373, 51390, 51407, - 51424, 51441, 51458, 51475, 51492, 51509, 51526, 51543, 51560, 51577, - 51594, 51611, 51628, 51645, 51662, 51679, 51696, 51713, 51730, 51747, - 51764, 51781, 51798, 51815, 51832, 51849, 51866, 51877, 51882, 1612, - 51886, 51892, 7144, 1617, 22912, 51897, 51908, 51918, 51923, 51930, - 51936, 51941, 51946, 51950, 8454, 1622, 8459, 51954, 51959, 51965, 51970, - 51975, 51980, 51985, 51990, 51995, 52000, 52006, 52012, 52018, 52023, - 52027, 52032, 52037, 52041, 52046, 52051, 52056, 52060, 52065, 52071, - 52076, 52081, 52085, 52090, 52095, 52101, 52106, 52111, 52117, 52123, - 52128, 52132, 52137, 52142, 52147, 52151, 52156, 52161, 52166, 52172, - 52178, 52183, 52187, 52191, 52196, 52201, 52206, 24124, 52210, 52215, - 52220, 52226, 52231, 52236, 52240, 52245, 52250, 52256, 52261, 52266, - 52272, 52278, 52283, 52287, 52292, 52297, 52301, 52306, 52311, 52316, - 52322, 52328, 52333, 52337, 52342, 52347, 52351, 52356, 52361, 52366, - 52370, 52373, 26077, 52378, 52386, 13218, 13236, 8557, 52392, 8562, - 52407, 52412, 52423, 52435, 52447, 52459, 2588, 52471, 52476, 52480, - 52486, 52492, 1634, 940, 52497, 52502, 31960, 52506, 52510, 52515, 52519, - 13301, 52524, 52527, 52535, 1638, 8587, 8593, 1643, 52543, 52550, 52555, - 52564, 52574, 52581, 1648, 52588, 52593, 13376, 52597, 52602, 52609, - 52615, 52619, 52629, 13398, 7063, 7070, 1653, 52636, 52642, 52650, 52657, - 52663, 52669, 52674, 52685, 52694, 3498, 25495, 25504, 13438, 1658, 1662, - 52702, 52713, 52718, 1665, 52726, 52731, 52743, 52749, 52754, 1670, - 52759, 52764, 52772, 52780, 52787, 52796, 52804, 52813, 1675, 1680, - 52817, 52824, 13547, 52832, 52838, 52846, 52851, 8727, 52860, 52866, - 52872, 52877, 52885, 8736, 8741, 52893, 52899, 3563, 32038, 52904, 52910, - 52915, 52923, 52930, 52935, 52939, 52945, 1691, 52950, 52953, 977, 52959, - 52964, 52969, 52975, 52980, 52985, 52990, 52995, 53000, 53005, 1700, 9, - 53011, 53015, 53020, 53024, 53028, 53032, 26315, 53037, 53042, 53047, - 53051, 53054, 53058, 53062, 53067, 53071, 53076, 53080, 28322, 28327, - 28332, 53083, 53090, 53096, 31804, 53106, 28338, 28343, 26325, 26331, - 28354, 26337, 53111, 53116, 53120, 53124, 53127, 53131, 53134, 53139, - 53143, 53147, 53150, 53162, 27517, 53169, 12396, 760, 53172, 53176, - 53181, 53185, 10779, 53188, 53195, 53208, 53217, 53222, 53232, 53245, - 53257, 53264, 53269, 53278, 53291, 29283, 53309, 53314, 53321, 53327, - 53332, 53340, 22979, 585, 53346, 53352, 53358, 53363, 26342, 4176, 26356, - 53367, 53377, 53382, 53392, 53407, 53413, 53419, 26361, 25652, 53424, - 53429, 53434, 53438, 53443, 53448, 53452, 4217, 26382, 53456, 53462, 337, - 53472, 53479, 53488, 53494, 53502, 53506, 53510, 53514, 53518, 53523, - 53527, 53533, 53541, 53546, 53550, 53555, 53559, 53563, 53569, 53575, - 53580, 53584, 26398, 53589, 26404, 26410, 53594, 53600, 53605, 53609, - 25669, 13167, 53612, 53616, 53621, 53628, 53634, 53638, 53643, 53649, - 53653, 53657, 53662, 53667, 53671, 53674, 53680, 53685, 53692, 53699, - 53705, 53710, 53715, 53719, 53724, 53730, 53735, 53741, 53746, 53751, - 53756, 53762, 53767, 53772, 53778, 53784, 53790, 26415, 53795, 53800, - 53805, 26426, 53810, 53815, 53820, 53826, 53832, 26431, 53837, 53842, - 53847, 26442, 26448, 53852, 53857, 53862, 53867, 23129, 26453, 26457, - 53872, 53843, 53876, 53882, 53890, 53897, 53903, 53913, 53919, 53926, - 8214, 26462, 53932, 53945, 53954, 53960, 53969, 53975, 19524, 53982, - 53989, 26443, 53999, 54006, 54011, 54015, 54019, 54024, 4251, 54028, - 54033, 54038, 28416, 28421, 54042, 28427, 28432, 54047, 28437, 28443, - 54052, 28448, 54063, 54066, 54078, 54086, 26484, 54090, 54099, 54109, - 54118, 26489, 54123, 54130, 54139, 54145, 54153, 27045, 4069, 54158, - 26498, 54164, 54167, 54173, 54180, 54185, 54190, 19456, 54194, 54200, - 54206, 54211, 54217, 54223, 54228, 765, 29092, 29839, 29845, 54232, - 54236, 54240, 54243, 54256, 54262, 54266, 54269, 54274, 27708, 54278, - 25674, 17585, 54284, 4197, 4205, 6948, 54287, 54292, 54297, 54302, 54307, - 54312, 54317, 54322, 54327, 54332, 54338, 54343, 54348, 54354, 54359, - 54364, 54369, 54374, 54379, 54384, 54390, 54395, 54401, 54406, 54411, - 54416, 54421, 54426, 54431, 54436, 54441, 54446, 54451, 54457, 54462, - 54467, 54472, 54477, 54482, 54487, 54493, 54498, 54503, 54508, 54513, - 54518, 54523, 54528, 54533, 54538, 54544, 54549, 54554, 54559, 54564, - 54570, 54576, 54581, 54587, 54592, 54597, 54602, 54607, 54612, 1495, 235, - 54617, 54621, 54625, 54629, 54633, 54636, 54640, 54645, 54649, 54654, - 54658, 54662, 54666, 54671, 54675, 54680, 54684, 54688, 54695, 11999, - 54704, 54713, 54717, 20701, 54721, 54727, 54735, 54741, 54753, 54757, - 54762, 54768, 54778, 54788, 54794, 54798, 54803, 54809, 54818, 54827, - 54835, 12274, 54839, 54848, 54856, 54867, 54878, 54887, 54891, 54900, - 54910, 54916, 54921, 54927, 54932, 98, 25579, 54943, 21735, 54949, 54956, - 54962, 54966, 54976, 54984, 54989, 54993, 55001, 55005, 55011, 55021, - 1132, 55024, 55027, 55031, 55037, 55044, 55050, 55059, 55068, 55074, - 55080, 55085, 55092, 55099, 55112, 55121, 55130, 55135, 55139, 55146, - 55153, 55160, 55167, 55174, 55179, 55183, 55187, 55190, 55200, 55204, - 55213, 55217, 55222, 55226, 55235, 55243, 55251, 55256, 55260, 55265, - 55270, 55274, 55280, 55292, 55300, 55310, 55317, 55323, 55328, 55332, - 55336, 55340, 55349, 55358, 55367, 55373, 55379, 55385, 55390, 55397, - 55403, 55411, 55418, 9779, 55424, 55430, 55434, 11225, 55438, 55447, - 55453, 55461, 55468, 55472, 55476, 55482, 55490, 55497, 55503, 55514, - 55518, 55522, 55526, 55529, 55535, 55540, 55544, 55548, 55557, 55565, - 55572, 19890, 31572, 55578, 55586, 55590, 55597, 55606, 55614, 55620, - 55625, 55629, 55634, 55638, 55643, 55652, 55656, 55663, 55670, 55678, - 55684, 55695, 55701, 55710, 55717, 55724, 55731, 55738, 55745, 34285, - 55752, 55759, 55764, 55770, 37407, 55774, 55779, 55784, 55790, 55796, - 55802, 55807, 55812, 55817, 55822, 55828, 55833, 55839, 55844, 55850, - 55855, 55860, 55865, 55870, 55875, 55880, 55885, 55891, 55896, 55902, - 55907, 55912, 55917, 55922, 55927, 55932, 55938, 55943, 55948, 55953, - 55958, 55963, 55968, 55973, 55978, 55983, 55988, 55994, 55999, 56004, - 56009, 56014, 56019, 56024, 56029, 56034, 56040, 56045, 56050, 56055, - 56060, 56065, 56070, 56075, 56080, 56085, 56090, 56095, 56100, 56106, - 1816, 216, 30402, 56111, 56114, 56119, 56123, 55247, 56126, 56136, 56143, - 56152, 56162, 56172, 56180, 56188, 56192, 56195, 56202, 56208, 56219, - 56231, 56242, 56249, 1305, 19361, 56259, 2518, 56263, 1087, 13743, 30918, - 56271, 56284, 56288, 56293, 56298, 56303, 56309, 56315, 56320, 6489, - 56325, 56333, 8588, 56338, 56344, 1703, 8600, 669, 56353, 56362, 56372, - 22357, 56381, 56387, 13353, 56393, 56397, 3678, 8890, 56403, 52708, - 56410, 6919, 171, 11159, 56416, 56428, 56432, 56438, 22932, 56442, 8878, - 2623, 4, 56447, 56457, 56463, 56474, 56481, 56487, 56493, 56501, 56508, - 56518, 56528, 56538, 1317, 56547, 56553, 2646, 2652, 6486, 2200, 56557, - 56561, 56570, 56581, 56589, 56597, 56603, 56614, 56625, 56633, 56639, - 8931, 56644, 56652, 56656, 56660, 23273, 56672, 56682, 56688, 56694, - 56704, 56707, 56718, 56728, 56737, 56741, 56748, 1089, 2511, 56758, - 56763, 56771, 56779, 56790, 56804, 11111, 374, 56814, 56818, 56827, - 56835, 56841, 56848, 56854, 56861, 56871, 56879, 3570, 184, 56887, 56898, - 56902, 56914, 23120, 148, 56920, 56925, 56929, 56936, 56942, 56950, - 56957, 6740, 56964, 56973, 3625, 56981, 13399, 56985, 2681, 419, 56990, - 57003, 57008, 1815, 602, 57012, 3631, 57020, 57026, 917, 57036, 57045, - 57050, 11847, 57054, 37617, 57057, 3580, 19507, 57065, 57072, 19549, - 57076, 57083, 57089, 57094, 11861, 57099, 57111, 57117, 57125, 2693, - 1735, 57133, 57135, 57140, 57145, 57150, 57156, 57161, 57166, 57171, - 57176, 57181, 57186, 57192, 57197, 57202, 57207, 57212, 57217, 57222, - 57227, 57232, 57238, 57243, 57248, 57253, 57259, 57264, 57270, 57275, - 57280, 57285, 57290, 57295, 57300, 57305, 57311, 57316, 57322, 57327, - 57332, 57337, 57342, 57347, 57352, 57357, 57362, 57367, 57372, 57376, - 57380, 57385, 57389, 57394, 57399, 57405, 57410, 57414, 57418, 57421, - 57423, 57427, 57430, 57435, 57439, 57443, 57447, 57451, 57460, 26652, - 57463, 26657, 26662, 57470, 57479, 26668, 57484, 26673, 57493, 57498, - 9018, 57502, 57507, 57512, 57516, 57520, 57524, 57528, 57531, 57535, - 6170, 57541, 57546, 57550, 3467, 57553, 57555, 57559, 57562, 57567, - 57571, 57577, 57590, 57596, 57601, 57605, 57613, 57620, 57628, 57637, - 57645, 26678, 57652, 57662, 57671, 57684, 57689, 57694, 57700, 57707, - 57718, 57730, 57737, 57746, 57755, 57764, 57771, 57777, 57784, 57792, - 57799, 57807, 57816, 57824, 57831, 57839, 57848, 57856, 57865, 57875, - 57884, 57892, 57899, 57907, 57916, 57924, 57933, 57943, 57952, 57960, - 57969, 57979, 57988, 57998, 58009, 58019, 58028, 58036, 58043, 58051, - 58060, 58068, 58077, 58087, 58096, 58104, 58113, 58123, 58132, 58142, - 58153, 58163, 58172, 58180, 58189, 58199, 58208, 58218, 58229, 58239, - 58248, 58258, 58269, 58279, 58290, 58302, 58313, 58323, 58332, 58340, - 58347, 58355, 58364, 58372, 58381, 58391, 58400, 58408, 58417, 58427, - 58436, 58446, 58457, 58467, 58476, 58484, 58493, 58503, 58512, 58522, - 58533, 58543, 58552, 58562, 58573, 58583, 58594, 58606, 58617, 58627, - 58636, 58644, 58653, 58663, 58672, 58682, 58693, 58703, 58712, 58722, - 58733, 58743, 58754, 58766, 58777, 58787, 58796, 58806, 58817, 58827, - 58838, 58850, 58861, 58871, 58882, 58894, 58905, 58917, 58930, 58942, - 58953, 58963, 58972, 58980, 58987, 58995, 59004, 59012, 59021, 59031, - 59040, 59048, 59057, 59067, 59076, 59086, 59097, 59107, 59116, 59124, - 59133, 59143, 59152, 59162, 59173, 59183, 59192, 59202, 59213, 59223, - 59234, 59246, 59257, 59267, 59276, 59284, 59293, 59303, 59312, 59322, - 59333, 59343, 59352, 59362, 59373, 59383, 59394, 59406, 59417, 59427, - 59436, 59446, 59457, 59467, 59478, 59490, 59501, 59511, 59522, 59534, - 59545, 59557, 59570, 59582, 59593, 59603, 59612, 59620, 59629, 59639, - 59648, 59658, 59669, 59679, 59688, 59698, 59709, 59719, 59730, 59742, - 59753, 59763, 59772, 59782, 59793, 59803, 59814, 59826, 59837, 59847, - 59858, 59870, 59881, 59893, 59906, 59918, 59929, 59939, 59948, 59958, - 59969, 59979, 59990, 60002, 60013, 60023, 60034, 60046, 60057, 60069, - 60082, 60094, 60105, 60115, 60126, 60138, 60149, 60161, 60174, 60186, - 60197, 60209, 60222, 60234, 60247, 60261, 60274, 60286, 60297, 60307, - 60316, 60324, 60331, 60336, 6029, 60343, 26688, 60348, 60353, 26693, - 60359, 17319, 31449, 60364, 60370, 60376, 60383, 60390, 60395, 60399, - 60403, 60412, 60418, 60430, 60441, 60445, 2936, 6004, 60450, 60453, - 60455, 60459, 60463, 60467, 34097, 60472, 60476, 60479, 60484, 60488, - 60495, 60501, 60505, 60509, 26703, 60512, 60519, 60528, 60536, 60547, - 60555, 60563, 60570, 60577, 60583, 60594, 26708, 60599, 60610, 60622, - 60633, 60641, 2484, 60646, 60659, 60663, 60671, 60676, 60684, 13908, - 60695, 60701, 60708, 60716, 60722, 26713, 60727, 7592, 50467, 60734, - 60737, 60745, 60758, 60771, 60784, 60797, 60804, 60815, 60824, 34102, - 34107, 60829, 60833, 60841, 60848, 60857, 60865, 60871, 60880, 60888, - 60896, 60900, 60909, 60918, 60928, 60941, 60954, 60964, 26718, 60970, - 60977, 60983, 26724, 60988, 60991, 60995, 61003, 61012, 33840, 61020, - 61028, 61035, 61043, 61053, 61062, 61071, 61080, 61088, 61099, 61109, - 7184, 17802, 61118, 61123, 61128, 61132, 61136, 61141, 61147, 61152, - 61157, 61163, 61168, 61173, 17767, 61178, 61185, 61193, 61201, 61206, - 61213, 61220, 61224, 61228, 61236, 61244, 26733, 61250, 61256, 61268, - 61274, 61279, 61290, 61300, 61310, 61322, 61328, 61338, 26738, 61347, - 61356, 61362, 61374, 61385, 61392, 61397, 61401, 61409, 61415, 61420, - 61425, 61432, 61444, 61454, 61463, 61470, 27937, 19731, 61476, 61481, - 61485, 61489, 61494, 61500, 61511, 61524, 61529, 26743, 61534, 61546, - 61555, 61568, 61575, 61584, 61592, 61597, 61603, 1484, 61608, 61613, - 61618, 61623, 61629, 61634, 61639, 61645, 61651, 61656, 61660, 61665, - 61670, 61675, 50973, 61680, 61685, 61690, 61695, 61701, 61707, 61712, - 61716, 61721, 61726, 61731, 61736, 61741, 61745, 61751, 61756, 61765, - 61770, 61775, 61780, 61785, 61789, 61796, 61802, 13605, 13612, 37872, - 61807, 61757, 61809, 26752, 61812, 61821, 61827, 4263, 26757, 61831, - 61837, 61843, 61848, 61852, 61859, 61864, 61874, 61883, 61887, 61893, - 61899, 61905, 61909, 61917, 61924, 61932, 61940, 26762, 61947, 61950, - 61957, 61962, 61966, 61972, 61977, 61981, 61990, 61998, 62004, 62009, - 27544, 62016, 62023, 62029, 62034, 62040, 62047, 62053, 26475, 22688, - 62059, 62064, 62070, 62082, 61790, 61797, 62092, 62097, 62104, 62111, - 62117, 62128, 62133, 6965, 62141, 62144, 62150, 62154, 62158, 62161, - 62167, 26571, 4283, 836, 10621, 62174, 62180, 62186, 62192, 62198, 62204, - 62210, 62216, 62222, 62227, 62232, 62237, 62242, 62247, 62252, 62257, - 62262, 62267, 62272, 62277, 62282, 62287, 62293, 62298, 62303, 62309, - 62314, 62319, 62325, 62331, 62337, 62343, 62349, 62355, 62361, 62367, - 62373, 62378, 62383, 62389, 62394, 62399, 62405, 62410, 62415, 62420, - 62425, 62430, 62435, 62440, 62445, 62450, 62455, 62460, 62465, 62471, - 62476, 62481, 62486, 62492, 62497, 62502, 62507, 62512, 62518, 62523, - 62528, 62533, 62538, 62543, 62548, 62553, 62558, 62563, 62568, 62573, - 62578, 62583, 62588, 62593, 62598, 62603, 62608, 62613, 62619, 62624, - 62629, 62634, 62639, 62644, 62649, 62654, 1846, 138, 62659, 62663, 62667, - 62672, 62680, 62684, 62691, 62699, 62703, 62716, 62720, 62723, 62728, - 62732, 62737, 62741, 62749, 62753, 17327, 62758, 62762, 62766, 62769, - 62777, 62782, 62789, 62795, 62801, 62806, 62814, 56276, 62821, 62826, - 62831, 62835, 62839, 62842, 62847, 62852, 62856, 62859, 62865, 62869, - 62879, 62888, 62891, 62904, 62912, 62920, 62930, 62943, 62950, 62961, - 62967, 62972, 62977, 62983, 62992, 61536, 63000, 63006, 63014, 63018, - 63022, 63028, 63036, 63048, 63060, 63067, 63071, 63082, 63090, 63097, - 63109, 63117, 63125, 63132, 63138, 63148, 63157, 63162, 63172, 63176, - 63180, 63190, 63197, 63209, 63221, 63230, 60649, 63237, 63248, 63262, - 63270, 63280, 63287, 63295, 63304, 63312, 63322, 63331, 63342, 63354, - 63363, 63373, 63380, 63389, 63404, 63413, 63426, 63441, 63445, 63457, - 63468, 63479, 63490, 63500, 63511, 63519, 63525, 63535, 63541, 63546, - 63552, 63558, 63563, 63570, 7469, 13928, 63576, 63581, 63588, 63594, - 63599, 63603, 63606, 63609, 63611, 63618, 63629, 63634, 63638, 63644, - 63649, 63657, 56720, 56730, 63663, 63673, 63680, 63686, 63691, 63700, - 63707, 63715, 63724, 63730, 63736, 63743, 63750, 63755, 63759, 63764, - 63769, 63774, 63778, 62711, 63787, 63791, 63802, 63812, 13937, 63823, - 63831, 13949, 63838, 22598, 63842, 63846, 63851, 63868, 63880, 8169, - 63892, 63897, 63902, 63907, 63911, 63914, 63919, 63924, 63930, 63935, - 4075, 17378, 63940, 63945, 63951, 63958, 63963, 63968, 63974, 63980, - 63986, 63991, 63997, 64001, 64015, 64023, 64031, 64037, 64042, 64049, - 64054, 64059, 64067, 64072, 64078, 64083, 64088, 64092, 64095, 64113, - 64132, 64145, 64159, 64175, 64182, 64189, 64195, 64202, 64207, 64213, - 64219, 64224, 64229, 64245, 8182, 64259, 64266, 64270, 64273, 64278, - 64283, 64290, 64295, 64300, 64305, 64309, 64317, 9090, 64326, 64331, - 64337, 9101, 64342, 64345, 64350, 64360, 64369, 64374, 64382, 64389, - 64400, 64410, 64415, 64420, 64427, 64433, 64438, 64445, 64454, 64462, - 64468, 64475, 64481, 64485, 13451, 2910, 64490, 64494, 64500, 64506, - 64513, 64517, 64538, 64560, 64576, 64593, 64612, 64621, 64631, 64638, - 64645, 22517, 64651, 64655, 64663, 64669, 64677, 64681, 64689, 64696, - 64700, 64706, 64712, 64717, 3375, 34302, 64723, 64727, 64731, 64735, - 64740, 64745, 64750, 64756, 64761, 64767, 64772, 64777, 64781, 64786, - 34317, 64790, 64795, 64803, 64807, 64812, 64819, 64828, 64834, 64841, - 64845, 64852, 64861, 64866, 64874, 64883, 64889, 64894, 64899, 64905, - 64911, 64916, 64920, 64924, 64927, 64935, 64945, 64950, 32057, 64958, - 64970, 64974, 64986, 64997, 65004, 65010, 65017, 65029, 65036, 65042, - 17439, 65046, 65052, 65058, 65063, 65068, 5084, 65073, 65079, 65087, - 65096, 65100, 65106, 64782, 24971, 65111, 65113, 65118, 65123, 65128, - 65133, 65138, 65143, 65148, 65153, 65158, 65163, 65168, 65173, 65178, - 65183, 65189, 65194, 65199, 65204, 65209, 65214, 65219, 65224, 65229, - 65235, 65241, 65247, 65252, 65257, 65269, 65274, 1852, 67, 65279, 65284, - 26772, 26777, 26782, 26788, 26793, 65288, 26798, 65310, 65312, 65316, - 65320, 65325, 65329, 26802, 65333, 26807, 65341, 65344, 26812, 18179, - 65353, 65357, 1415, 65362, 26823, 65365, 65370, 21354, 21364, 65375, - 65379, 65384, 65390, 65395, 65404, 65409, 65416, 65422, 65427, 65432, - 65437, 65445, 26828, 1110, 65452, 65458, 65463, 65468, 65473, 65479, - 65484, 65491, 65497, 65502, 65510, 65516, 13959, 65523, 29296, 65536, - 65541, 65547, 65560, 65564, 65573, 65580, 65586, 65594, 65603, 65610, - 65616, 26832, 65619, 65626, 65632, 65636, 65639, 65647, 65661, 65668, - 26837, 65674, 26842, 65681, 28422, 65691, 65696, 65700, 17717, 65705, - 65710, 26847, 54013, 65714, 65719, 65725, 65731, 65738, 65744, 65749, - 65754, 65763, 65775, 65790, 27067, 65796, 13117, 26851, 65800, 65807, - 26856, 65813, 65822, 65829, 65838, 65844, 65849, 65855, 26861, 65860, - 65869, 65878, 65885, 65891, 65897, 65905, 65909, 26866, 65912, 26872, - 26878, 65917, 65925, 65935, 26883, 65939, 65941, 65945, 65950, 65954, - 65958, 65964, 65969, 65973, 65978, 2915, 65982, 65989, 65993, 66002, - 66010, 66017, 66022, 66027, 66031, 66035, 66038, 66044, 66052, 66058, - 66062, 66067, 66074, 66080, 28799, 66085, 66088, 66093, 66097, 66102, - 66107, 66111, 66119, 21373, 21382, 66125, 66131, 66137, 66142, 66146, - 66149, 66159, 66164, 66170, 66176, 66184, 66189, 28438, 66193, 66201, - 66207, 66212, 66217, 50653, 28444, 66223, 66228, 66232, 66237, 66242, - 66247, 66251, 66256, 66261, 66267, 66272, 66277, 66283, 66289, 66294, - 66298, 66303, 66308, 66313, 66317, 66322, 66327, 66332, 66338, 66344, - 66350, 66355, 66359, 66364, 66369, 66373, 66378, 66383, 66388, 66392, - 26887, 66400, 66404, 66412, 18521, 66423, 66429, 66436, 66441, 66450, - 66455, 66459, 66464, 66472, 66480, 66487, 56422, 66493, 66501, 66508, - 66519, 66525, 26897, 66528, 66535, 32183, 66539, 66544, 66549, 6877, - 66553, 66561, 66568, 66575, 66581, 66445, 66595, 66601, 66605, 66608, - 66616, 66623, 66628, 66641, 66648, 66653, 66658, 66661, 66668, 66672, - 66682, 66692, 66701, 66712, 66717, 66721, 28813, 17641, 32629, 66729, - 66734, 66739, 66744, 66749, 66754, 66759, 66763, 66768, 66773, 66778, - 66783, 66788, 66793, 66797, 66802, 66807, 66811, 66815, 66819, 66823, - 66828, 66833, 66837, 66842, 66846, 66850, 66855, 66860, 66865, 66870, - 66874, 66879, 66884, 66888, 66893, 66898, 66903, 66908, 66913, 66918, - 66923, 66928, 66933, 66938, 66943, 66948, 66953, 66958, 66963, 66968, - 66973, 66978, 66983, 66988, 66992, 66997, 67002, 67007, 67012, 67017, - 67022, 67027, 67032, 67037, 67042, 67047, 67051, 67056, 67060, 67065, - 67070, 67075, 67080, 67085, 67090, 67095, 67100, 67105, 67109, 67113, - 67118, 67123, 67127, 67132, 67137, 67141, 67146, 67151, 67156, 67161, - 67165, 67170, 67175, 67179, 67184, 67188, 67192, 67196, 67200, 67205, - 67209, 67213, 67217, 67221, 67225, 67229, 67233, 67237, 67241, 67246, - 67251, 67256, 67261, 67266, 67271, 67276, 67281, 67286, 67291, 67295, - 67299, 67303, 67307, 67311, 67315, 67320, 67324, 67329, 67333, 67338, - 67343, 67347, 67351, 67356, 67360, 67364, 67368, 67372, 67376, 67380, - 67384, 67388, 67392, 67396, 67400, 67404, 67408, 67412, 67417, 67422, - 67426, 67430, 67434, 67438, 67442, 67446, 67451, 67455, 67459, 67463, - 67467, 67471, 67475, 67480, 67484, 67489, 67493, 67497, 67501, 67505, - 67509, 67513, 67517, 67521, 67525, 67529, 67533, 67538, 67542, 67546, - 67550, 67554, 67558, 67562, 67566, 67570, 67574, 67578, 67582, 67587, - 67591, 67595, 67600, 67605, 67609, 67613, 67617, 67621, 67625, 67629, - 67633, 67637, 67642, 67646, 67651, 67655, 67660, 67664, 67669, 67673, - 67679, 67684, 67688, 67693, 67697, 67702, 67706, 67711, 67715, 67720, - 1503, 67724, 1741, 1746, 67728, 67732, 2711, 67736, 1384, 67741, 1350, - 67745, 67749, 67756, 67763, 67777, 2727, 5159, 67786, 67794, 67801, - 67808, 67821, 67834, 67845, 67850, 67857, 67869, 3703, 9162, 67873, - 67878, 67887, 67897, 67902, 67906, 67911, 67918, 67924, 67936, 1355, - 11688, 67946, 67952, 67966, 67978, 67987, 67996, 68005, 68013, 68024, - 68032, 3742, 68042, 68051, 68057, 68064, 28919, 68069, 2755, 10316, - 68073, 68080, 6828, 68089, 2760, 26495, 68095, 68102, 68108, 68115, - 68121, 68128, 68138, 68147, 68158, 68165, 68171, 68181, 68189, 68195, - 68210, 68216, 68221, 68228, 68231, 68237, 68244, 68250, 68258, 68267, - 68275, 68281, 68290, 33842, 68304, 68309, 11709, 68315, 68328, 68337, - 68345, 68352, 68356, 68360, 68363, 68370, 68377, 68385, 68393, 68402, - 68410, 11645, 68418, 68423, 68427, 68439, 68446, 68455, 793, 68465, 2776, - 68474, 68478, 68484, 68497, 68509, 68519, 68528, 68540, 68548, 68557, - 68568, 68579, 68589, 68599, 68608, 68616, 8811, 68623, 68627, 68632, - 68637, 68643, 1360, 9217, 68650, 68661, 68670, 68678, 68687, 68695, - 68711, 68722, 68738, 68748, 68769, 68782, 68795, 68800, 68806, 22084, - 68812, 68815, 68822, 68832, 6139, 68839, 68844, 68849, 68857, 7517, 7526, - 68865, 68876, 2784, 2789, 68882, 8419, 68888, 68895, 68902, 68915, 2193, - 50, 68920, 68925, 68935, 68941, 68945, 68950, 68954, 2812, 68966, 68974, - 68985, 68996, 69005, 69010, 69016, 69021, 69031, 69041, 69046, 69052, - 69057, 69066, 17674, 69070, 3804, 12, 69075, 69082, 766, 69088, 69093, - 52873, 69098, 69103, 69109, 69117, 69122, 69129, 69135, 30869, 33740, - 69141, 2816, 32, 69151, 69164, 69172, 69177, 69183, 2838, 25639, 69188, - 69196, 69203, 69208, 50895, 53694, 69217, 1686, 1795, 69222, 69227, - 69234, 1799, 237, 69241, 69247, 69252, 69259, 1803, 69264, 69270, 69275, - 69287, 4250, 69297, 1810, 69303, 69308, 69315, 69322, 69337, 69344, - 69352, 69356, 69360, 69372, 69377, 69381, 23272, 3830, 69385, 69396, - 69400, 69404, 69410, 69414, 69423, 69427, 69438, 69442, 2238, 69446, - 69448, 2935, 7189, 69456, 69461, 69465, 69474, 69480, 2905, 13622, 69484, - 69497, 69515, 69520, 69528, 69536, 69546, 69558, 69571, 69578, 69594, - 69601, 69607, 958, 69614, 69621, 69631, 69640, 69652, 34706, 69660, 2919, - 9391, 69663, 69671, 69675, 2923, 69679, 17523, 52946, 3514, 69683, 2929, - 69687, 69697, 69703, 69709, 69715, 69721, 69727, 69733, 69739, 69745, - 69751, 69757, 69763, 69769, 69775, 69781, 69787, 69793, 69799, 69805, - 69811, 69817, 69823, 69829, 69835, 69841, 69847, 69854, 69861, 69867, - 69873, 69879, 69885, 69891, 69897, 1365, 12692, 9411, 69903, 69908, - 69913, 69918, 69923, 69928, 69933, 69938, 69943, 69948, 69953, 69958, - 69963, 69968, 69973, 69978, 69983, 69988, 69993, 69998, 70003, 70008, - 70013, 70018, 70023, 70028, 70034, 70039, 70044, 70050, 70055, 70061, - 70066, 70071, 70077, 70082, 70087, 70092, 70097, 70102, 70107, 70112, - 70117, 69698, 69704, 69710, 69716, 69722, 69728, 69734, 69740, 69746, - 69752, 69758, 69764, 69770, 69776, 69782, 70123, 69788, 69794, 69800, - 70129, 69806, 69812, 69818, 69824, 69830, 69836, 69842, 69862, 70135, - 70141, 69868, 70147, 69874, 69880, 69886, 69892, 69898, 2950, 2955, - 70153, 70158, 70161, 70167, 70173, 70180, 70185, 70190, 2243, +static unsigned short lexicon_offset[] = { + 0, 0, 6, 10, 15, 23, 27, 34, 39, 41, 44, 50, 63, 75, 84, 90, 95, 103, + 112, 116, 121, 129, 134, 137, 144, 149, 157, 163, 169, 177, 184, 194, + 199, 202, 209, 212, 217, 226, 232, 241, 248, 255, 260, 264, 273, 281, + 282, 288, 294, 302, 308, 314, 320, 328, 333, 340, 344, 347, 349, 355, + 362, 369, 377, 380, 385, 390, 396, 398, 403, 412, 419, 425, 286, 430, + 432, 434, 438, 443, 446, 452, 456, 464, 474, 481, 113, 490, 498, 503, + 511, 516, 524, 535, 538, 542, 555, 565, 571, 574, 575, 582, 584, 593, + 301, 596, 600, 608, 613, 615, 619, 622, 628, 635, 642, 647, 651, 660, + 670, 679, 688, 692, 698, 706, 713, 721, 725, 731, 735, 743, 752, 756, + 627, 763, 771, 775, 784, 789, 792, 796, 804, 813, 816, 821, 831, 840, + 847, 200, 733, 850, 857, 580, 865, 873, 879, 884, 891, 894, 900, 906, + 911, 916, 929, 22, 934, 937, 947, 952, 956, 962, 971, 974, 984, 993, 997, + 1002, 1007, 1012, 1019, 1027, 1030, 1040, 1043, 1045, 1053, 1057, 1061, + 93, 1064, 1069, 1075, 1077, 1086, 1089, 1092, 1097, 1099, 1105, 1111, + 1113, 1117, 331, 1120, 1128, 1132, 1136, 1141, 1144, 1150, 1154, 1161, + 1164, 1170, 80, 1176, 1178, 1181, 1183, 657, 1188, 1196, 1203, 1213, + 1222, 1230, 1232, 1237, 1242, 1248, 1253, 1258, 1262, 1267, 1273, 1278, + 1283, 1287, 1292, 1297, 1301, 1306, 1311, 1316, 1322, 1328, 1334, 1339, + 1343, 1348, 1353, 1358, 1362, 1367, 1372, 1377, 1382, 1233, 1238, 1243, + 1249, 1254, 1386, 1259, 1392, 1401, 1263, 1405, 1268, 1274, 1279, 1409, + 1414, 1419, 1423, 1427, 1433, 1437, 1284, 1440, 1444, 1288, 1450, 1293, + 1454, 1458, 1298, 1462, 1467, 1471, 1474, 1478, 1302, 1307, 1312, 1483, + 1489, 1495, 1501, 1317, 1329, 1335, 1505, 1509, 1513, 1516, 1340, 1520, + 1522, 1527, 1532, 1538, 1543, 1548, 1552, 1557, 1562, 1567, 1572, 1578, + 1583, 1588, 1594, 1600, 1605, 1609, 1614, 1619, 1624, 1629, 1633, 1641, + 1645, 1650, 1655, 1660, 1665, 1669, 1672, 1677, 1682, 1687, 1692, 1698, + 1703, 1707, 1344, 1710, 1715, 1720, 1349, 1724, 1728, 1735, 1354, 1742, + 1359, 1746, 1748, 1754, 1363, 1759, 1768, 1368, 1773, 1779, 1373, 1784, + 1789, 1792, 1797, 1801, 1805, 1809, 1812, 1378, 1383, 950, 1816, 1818, + 1819, 1823, 1827, 1832, 1836, 1840, 1844, 1847, 1852, 1856, 1861, 1865, + 1869, 1874, 1878, 1881, 1885, 1899, 1903, 1907, 1910, 1915, 1919, 1923, + 1928, 1933, 1938, 1942, 1947, 1951, 1956, 1963, 1969, 1974, 1979, 1985, + 1990, 1995, 1998, 1250, 2000, 2007, 2015, 2025, 2034, 2048, 2052, 2065, + 2073, 2077, 2082, 2086, 2090, 2095, 2100, 2104, 2107, 2111, 2118, 2125, + 2131, 2136, 2141, 2144, 2146, 2149, 2155, 2159, 2164, 2168, 2172, 1750, + 1756, 2177, 2181, 2184, 2189, 2194, 2199, 2203, 2210, 2215, 2218, 2225, + 2231, 2235, 2239, 2243, 2249, 2255, 2269, 2286, 2295, 2300, 2304, 2309, + 2314, 2318, 2330, 2336, 1959, 2342, 2345, 2352, 2356, 2360, 2364, 1966, + 2368, 2373, 2378, 2382, 2390, 2394, 2398, 2402, 2407, 2412, 2417, 2421, + 2426, 2431, 2435, 2440, 2444, 2447, 2451, 2455, 2460, 2464, 2468, 2477, + 2481, 2485, 2491, 2496, 2503, 2507, 2511, 2516, 2520, 2525, 2531, 2536, + 2540, 2121, 2544, 2549, 2555, 2560, 2564, 2569, 2574, 2578, 2584, 2589, + 2595, 2599, 2605, 2610, 1260, 62, 2616, 2620, 2624, 2628, 2633, 2637, + 2641, 2645, 2649, 2654, 2658, 2663, 2667, 2670, 2674, 2679, 2683, 2688, + 2692, 2696, 2701, 2705, 2708, 2721, 2725, 2729, 2733, 2737, 2741, 2744, + 2748, 2752, 2757, 2761, 2766, 2771, 2776, 2780, 2783, 2786, 2792, 2796, + 2800, 2803, 2807, 2811, 1059, 445, 2814, 2819, 2823, 2826, 2831, 2836, + 2840, 2845, 2849, 2852, 2858, 2865, 2871, 2876, 2880, 2885, 2889, 2899, + 2903, 2907, 2912, 2917, 2927, 1848, 2932, 2936, 2939, 2945, 2952, 2956, + 648, 790, 2960, 2967, 2973, 2978, 2984, 2989, 1857, 2993, 485, 2999, + 3010, 1862, 3014, 3019, 3034, 3040, 3047, 3057, 3063, 3068, 3074, 3077, + 3081, 3088, 3093, 3097, 3101, 3105, 3109, 3114, 3120, 2675, 3125, 3137, + 1554, 3144, 3147, 3151, 3155, 3158, 3162, 3167, 3171, 3175, 3181, 3187, + 3192, 3198, 3202, 3210, 3220, 3226, 3231, 3240, 3248, 3255, 3259, 3268, + 3272, 3277, 3282, 3286, 3294, 3299, 3303, 1870, 1402, 318, 402, 3309, + 3315, 3319, 3323, 3328, 3332, 3336, 3339, 3343, 3347, 3351, 3356, 3360, + 3364, 3306, 3370, 3377, 3381, 3394, 3398, 3402, 3406, 3410, 3414, 3420, + 3427, 3431, 3439, 3448, 3454, 3459, 3462, 3466, 3470, 3480, 3490, 3498, + 3505, 3512, 3518, 3524, 3531, 3535, 3540, 3544, 3552, 3557, 3565, 3570, + 3575, 3579, 3584, 3591, 3594, 3598, 3602, 3605, 3611, 3617, 3621, 3632, + 3642, 3657, 3672, 3687, 3702, 3717, 3732, 3747, 3762, 3777, 3792, 3807, + 3822, 3837, 3852, 3867, 3882, 3897, 3912, 3927, 3942, 3957, 3972, 3987, + 4002, 4017, 4032, 4047, 4062, 4077, 4092, 4107, 4122, 4137, 4152, 4167, + 4182, 4197, 4212, 4227, 4242, 4257, 4272, 4287, 4302, 4317, 4332, 4347, + 4362, 4377, 4386, 4395, 4400, 4406, 4410, 4415, 4419, 4422, 4426, 4429, + 4434, 285, 388, 4440, 4448, 4452, 4456, 4459, 4465, 4469, 4477, 4483, + 4488, 4495, 4502, 4508, 4513, 4520, 4526, 4530, 4535, 4542, 4548, 2693, + 4458, 4552, 4556, 4560, 4563, 4570, 4573, 4581, 4586, 4591, 4582, 4583, + 4596, 4602, 4608, 4613, 4618, 4625, 4630, 4634, 4637, 4641, 1904, 454, + 4645, 4649, 4654, 4660, 4665, 4669, 4672, 4676, 4681, 4685, 4692, 4696, + 4700, 4704, 913, 633, 4707, 4715, 4722, 4729, 4735, 4742, 4750, 4757, + 4764, 4769, 4781, 1280, 1410, 1415, 4792, 1420, 4796, 4800, 4809, 4818, + 4824, 4829, 4833, 4839, 4844, 4848, 4857, 4866, 4875, 4884, 4889, 4894, + 4906, 2846, 4910, 4912, 4917, 4921, 4930, 4938, 1424, 4919, 4944, 4948, + 4951, 4955, 4964, 4970, 4975, 4978, 4987, 4993, 5001, 5005, 5009, 5012, + 5017, 5024, 5030, 5033, 5035, 5038, 5046, 5054, 5057, 5062, 4593, 5065, + 1964, 1970, 5067, 5075, 1991, 5080, 5084, 5089, 5093, 5097, 5101, 5106, + 5110, 5115, 5119, 5122, 5125, 5131, 5137, 5143, 5149, 5155, 5161, 5167, + 5171, 5175, 5179, 5183, 5187, 5192, 5200, 5210, 5215, 5219, 5230, 5243, + 5254, 5267, 5278, 5290, 5302, 5314, 5327, 5340, 5347, 5353, 5360, 5366, + 5370, 5375, 5379, 5386, 5394, 5398, 5404, 5414, 5418, 5423, 5430, 5436, + 4737, 5446, 5450, 5457, 632, 5461, 5465, 5470, 5475, 5480, 5484, 5490, + 5494, 5498, 5504, 5509, 5513, 1896, 5519, 5527, 5536, 5540, 5546, 5551, + 5556, 5561, 5567, 5572, 3177, 5577, 5581, 5586, 5591, 5541, 5596, 5600, + 5607, 5613, 5618, 5622, 5627, 5631, 5640, 5020, 5645, 2404, 5649, 5654, + 5659, 5547, 5663, 5552, 5557, 5668, 5675, 5682, 5688, 5694, 5700, 5705, + 5710, 5715, 5562, 5568, 5721, 5727, 5732, 5573, 5737, 1115, 5740, 5748, + 5754, 5760, 5769, 5774, 5789, 5806, 5825, 5834, 5842, 5857, 5867, 5877, + 5883, 5895, 5904, 5912, 5919, 5926, 5932, 5937, 5945, 5955, 5962, 5972, + 5982, 5992, 6001, 6011, 6025, 6040, 6049, 6057, 6062, 6066, 6075, 6085, + 6095, 6105, 6110, 6114, 6123, 6133, 6144, 6157, 6170, 6182, 6187, 6193, + 6196, 6200, 6205, 6209, 6217, 6226, 6234, 6241, 6252, 6256, 6259, 6265, + 6269, 6275, 6282, 6287, 6294, 6301, 6308, 6315, 6322, 6329, 6334, 5802, + 6339, 6348, 6352, 6364, 6368, 6371, 6375, 6379, 6383, 6387, 6392, 6397, + 6402, 6408, 6413, 6418, 5426, 6423, 6427, 6431, 6435, 6440, 6445, 6451, + 6455, 6463, 6467, 6470, 6476, 6483, 6487, 6490, 6495, 3205, 6501, 6509, + 6515, 5441, 6520, 6525, 6529, 6542, 6556, 6563, 6569, 6573, 6578, 6584, + 6589, 4853, 6594, 6597, 6602, 6606, 2409, 802, 6612, 6616, 6622, 6628, + 6633, 6638, 6646, 6652, 6665, 6673, 6677, 6685, 6692, 6704, 6714, 6721, + 6728, 6737, 6746, 6754, 6760, 6765, 6770, 6776, 5582, 6781, 6784, 6791, + 6797, 6810, 6821, 6828, 6834, 6843, 6851, 6858, 6864, 6870, 6875, 6879, + 6884, 6890, 6898, 5587, 6905, 6910, 6917, 6923, 6928, 6936, 6944, 6951, + 6955, 6969, 6979, 6984, 6988, 6999, 7005, 7010, 7015, 7019, 5592, 7024, + 7027, 7039, 7046, 7051, 7055, 7060, 7064, 7071, 7077, 7084, 5542, 7089, + 2414, 8, 7096, 7101, 7105, 7111, 7122, 7132, 7141, 7153, 7158, 7162, + 7170, 7184, 7188, 7191, 7199, 7206, 7214, 7218, 7229, 7233, 7240, 7245, + 7249, 7254, 7258, 7262, 7265, 7271, 7277, 7284, 7294, 7303, 7310, 5601, + 5608, 5614, 5619, 7316, 5623, 7322, 7325, 7332, 7347, 7363, 7378, 897, + 383, 7383, 7391, 7398, 7404, 7409, 7414, 5632, 7416, 7420, 7430, 7435, + 7439, 7448, 7452, 7455, 7462, 7466, 7469, 7477, 7484, 7492, 7496, 7500, + 7506, 7510, 7514, 7518, 7524, 7528, 7535, 7539, 7544, 7548, 7555, 7561, + 7569, 7575, 7585, 7590, 7595, 7599, 7607, 3131, 7615, 7620, 7624, 7628, + 7631, 7639, 7646, 7650, 7655, 7659, 7670, 7676, 7680, 7683, 7690, 5641, + 7695, 7699, 1712, 3563, 606, 133, 7706, 7710, 7715, 7720, 7724, 7728, + 7732, 7737, 7741, 7746, 7750, 7753, 7757, 7761, 7766, 7776, 7782, 7786, + 7790, 7797, 7805, 7814, 7825, 7832, 7839, 7848, 7857, 7866, 7875, 7884, + 7893, 7903, 7913, 7923, 7933, 7943, 7952, 7962, 7972, 7982, 7992, 8002, + 8012, 8022, 8031, 8041, 8051, 8061, 8071, 8081, 8091, 8100, 8110, 8120, + 8130, 8140, 8150, 8160, 8170, 8180, 8190, 8199, 8209, 8219, 8229, 8239, + 8249, 8259, 8269, 8279, 8289, 8299, 8308, 8314, 8318, 8321, 8325, 8330, + 8337, 8343, 8348, 8352, 8357, 8361, 8365, 5650, 8371, 8376, 8385, 5655, + 8390, 5660, 8393, 8397, 8401, 8411, 8416, 8425, 8433, 8440, 8445, 8452, + 8457, 8461, 8464, 8475, 8485, 8494, 8502, 8513, 8525, 8535, 8539, 8544, + 8549, 8553, 8558, 8562, 8565, 8572, 8582, 8591, 8598, 8602, 8608, 8613, + 8618, 8622, 8631, 8636, 8642, 8647, 8651, 8660, 8668, 8676, 8683, 8691, + 8703, 8714, 8724, 8731, 8737, 8746, 8757, 8766, 8775, 8783, 8790, 8799, + 8807, 4610, 8811, 8813, 8818, 8824, 8832, 8839, 8848, 8857, 8866, 8875, + 8884, 8893, 8902, 8911, 8921, 8931, 8940, 8954, 8961, 8969, 8978, 8984, + 8993, 9001, 9010, 9023, 9031, 9038, 9051, 9057, 9066, 9075, 9080, 9084, + 9090, 9096, 9103, 5440, 9108, 9113, 9120, 9125, 9130, 9134, 9140, 9148, + 9156, 9163, 9171, 9179, 9184, 9190, 9195, 9199, 9210, 9218, 9224, 9229, + 9238, 9244, 9249, 9258, 9272, 3090, 9276, 9281, 9286, 9292, 9297, 9302, + 9306, 9311, 9316, 4609, 9321, 9326, 9331, 9336, 9340, 9345, 9350, 9355, + 9361, 9367, 9372, 9376, 9381, 9386, 5664, 9391, 9396, 9401, 9406, 9418, + 9428, 9439, 9450, 9461, 9473, 9484, 9495, 9506, 9517, 9522, 2062, 9526, + 9529, 9535, 9543, 9551, 9556, 9564, 9572, 9579, 9586, 9591, 9597, 9604, + 9612, 9619, 9631, 9636, 7341, 9642, 9651, 9658, 9664, 9672, 9679, 9686, + 9692, 9701, 9708, 9716, 9722, 9729, 9737, 9742, 2893, 1081, 9749, 9322, + 9752, 9758, 9762, 9774, 9779, 9786, 9792, 9797, 9327, 9332, 9801, 9805, + 9809, 9817, 9824, 9831, 9848, 9852, 9855, 9863, 2949, 9867, 9869, 9877, + 9887, 9893, 9898, 9902, 9908, 9913, 9916, 9923, 9929, 9935, 9940, 9947, + 9953, 9958, 9965, 9971, 9978, 9984, 9990, 9996, 10004, 10010, 10016, + 10021, 10028, 10033, 10037, 10042, 10049, 10054, 10060, 10063, 10067, + 10079, 10085, 10090, 10097, 10103, 10109, 10118, 10126, 10133, 10143, + 10153, 10161, 9346, 10164, 9351, 10172, 10184, 10197, 10212, 10223, + 10241, 10252, 10265, 10276, 10287, 10299, 10312, 10323, 10334, 10345, + 2264, 10358, 10362, 10370, 10381, 10388, 10394, 10398, 10404, 10407, + 10417, 10425, 10432, 10440, 10445, 10450, 10457, 10463, 10468, 10473, + 10477, 10481, 10487, 10493, 10498, 10503, 10508, 10512, 9356, 9362, 9368, + 10516, 10524, 10533, 10540, 5558, 10544, 10546, 10551, 10556, 10562, + 10567, 10572, 10577, 10581, 10587, 10592, 10598, 10603, 10608, 10614, + 10619, 10624, 10629, 10635, 10640, 10645, 10651, 10657, 10662, 10669, + 10676, 10681, 10685, 10689, 10692, 10700, 10705, 10710, 10720, 10725, + 10732, 10738, 10748, 10762, 10776, 10790, 10804, 10819, 10834, 10851, + 10869, 10882, 10888, 10893, 10898, 10904, 10909, 10914, 10918, 10922, + 10927, 10931, 10937, 10942, 10947, 10951, 10956, 10963, 10968, 10972, + 10978, 10983, 10988, 10992, 10998, 11003, 11008, 11015, 11020, 11024, + 11028, 11033, 11038, 11044, 11049, 11058, 11066, 11073, 11080, 11086, + 11092, 11097, 11102, 11108, 11113, 11119, 11124, 11130, 11136, 11143, + 11149, 11154, 11159, 5706, 11168, 11171, 11177, 11182, 11192, 11199, + 11204, 11210, 11215, 11221, 11226, 11232, 11237, 11245, 11252, 11257, + 11263, 11267, 11276, 11287, 11294, 11302, 11308, 11315, 11321, 11326, + 11330, 11336, 11341, 11346, 11351, 5711, 4626, 2428, 11355, 11359, 11363, + 11367, 11371, 11374, 11381, 11389, 9377, 11396, 11406, 11414, 11421, + 11431, 11440, 8490, 8499, 11445, 11455, 11470, 11476, 11483, 11490, + 11496, 11506, 11516, 9382, 11525, 11531, 11537, 11545, 11553, 11558, + 11567, 11575, 11587, 11597, 11607, 11617, 11626, 11638, 11648, 11658, + 11669, 11674, 11686, 11698, 11710, 11722, 11734, 11746, 11758, 11770, + 11782, 11794, 11805, 11817, 11829, 11841, 11853, 11865, 11877, 11889, + 11901, 11913, 11925, 11936, 11948, 11960, 11972, 11984, 11996, 12008, + 12020, 12032, 12044, 12056, 12067, 12079, 12091, 12103, 12115, 12127, + 12139, 12151, 12163, 12175, 12187, 12198, 12210, 12222, 12234, 12246, + 12258, 12270, 12282, 12294, 12306, 12318, 12329, 12341, 12353, 12365, + 12377, 12389, 12401, 12413, 12425, 12437, 12449, 12460, 12472, 12484, + 12496, 12508, 12520, 12532, 12544, 12556, 12568, 12580, 12591, 12603, + 12615, 12627, 12639, 12652, 12665, 12678, 12691, 12704, 12717, 12730, + 12742, 12755, 12768, 12781, 12794, 12807, 12820, 12833, 12846, 12859, + 12872, 12884, 12897, 12910, 12923, 12936, 12949, 12962, 12975, 12988, + 13001, 13014, 13026, 13039, 13052, 13065, 13078, 13091, 13104, 13117, + 13130, 13143, 13156, 13168, 13181, 13194, 13207, 13220, 13233, 13246, + 13259, 13272, 13285, 13298, 13310, 13323, 13336, 13349, 13362, 13375, + 13388, 13401, 13414, 13427, 13440, 13452, 13463, 13476, 13489, 13502, + 13515, 13528, 13541, 13554, 13567, 13580, 13593, 13605, 13618, 13631, + 13644, 13657, 13670, 13683, 13696, 13709, 13722, 13735, 13747, 13760, + 13773, 13786, 13799, 13812, 13825, 13838, 13851, 13864, 13877, 13889, + 13902, 13915, 13928, 13941, 13954, 13967, 13980, 13993, 14006, 14019, + 14031, 14044, 14057, 14070, 14083, 14096, 14109, 14122, 14135, 14148, + 14161, 14173, 14186, 14199, 14212, 14225, 14238, 14251, 14264, 14277, + 14290, 14303, 14315, 14328, 14341, 14354, 14367, 14380, 14393, 14406, + 14419, 14432, 14445, 14457, 14470, 14483, 14496, 14509, 14522, 14535, + 14548, 14561, 14574, 14587, 14599, 14612, 14625, 14638, 14651, 14664, + 14677, 14690, 14703, 14716, 14729, 14741, 14754, 14767, 14780, 14793, + 14806, 14819, 14832, 14845, 14858, 14871, 14883, 14894, 14902, 14909, + 14915, 14919, 14925, 14931, 14939, 14945, 14950, 5563, 14954, 14961, + 14969, 14976, 14983, 6804, 14990, 14999, 15004, 4642, 15011, 15016, + 15021, 15029, 15036, 15043, 15049, 15058, 15067, 15073, 15078, 15086, + 15092, 15102, 15111, 15115, 15122, 15126, 15131, 15137, 15145, 15149, + 9392, 15158, 15162, 15168, 5410, 15175, 15181, 15186, 15190, 15194, 5941, + 15199, 15207, 15214, 15223, 15230, 15237, 15243, 15247, 15253, 15259, + 15267, 15273, 15280, 15286, 15295, 15303, 15312, 15317, 15328, 15333, + 15338, 15343, 4815, 15347, 15354, 15359, 15367, 15379, 15384, 15388, + 15391, 15397, 15403, 15408, 15412, 15415, 15426, 15431, 5733, 15438, + 5574, 5738, 15443, 15447, 111, 15455, 15459, 15463, 15467, 15472, 15476, + 15480, 7845, 15484, 15490, 15495, 15499, 15503, 15511, 15515, 15520, + 15525, 15529, 15535, 15540, 15544, 15549, 15554, 15558, 15565, 15569, + 15574, 15578, 15581, 15594, 15599, 15608, 15613, 15616, 2297, 2302, + 15620, 15626, 15631, 15636, 15641, 15647, 15652, 15657, 15661, 15666, + 15671, 15677, 15682, 15687, 15693, 15698, 15702, 15707, 15712, 15717, + 15721, 15726, 15731, 15736, 15741, 15745, 15749, 15754, 2437, 15703, + 15758, 15765, 6020, 15777, 15785, 15708, 15792, 15797, 15713, 15805, + 15810, 15815, 15820, 15824, 15829, 15832, 15836, 15842, 15847, 5432, + 1717, 1722, 15851, 15857, 15863, 15868, 15872, 15876, 15880, 15883, + 15889, 15896, 15904, 15910, 15916, 15921, 15926, 9614, 10139, 15930, + 15942, 15945, 15952, 15956, 15967, 15976, 15989, 15999, 16013, 16025, + 16039, 16049, 16055, 16073, 16092, 16105, 16119, 16135, 16146, 16163, + 16181, 16193, 16207, 16221, 16233, 16250, 16269, 16281, 16299, 16312, + 16326, 16346, 6536, 16358, 16363, 16368, 16374, 16379, 2079, 16383, + 16389, 16393, 16396, 16400, 16408, 16414, 15722, 16418, 16429, 16435, + 16441, 16450, 16457, 16464, 16470, 16479, 16487, 16497, 16502, 16511, + 16520, 16531, 16542, 16552, 16557, 16561, 16569, 16579, 16590, 16598, + 16605, 16611, 16616, 15732, 16620, 16629, 16634, 16643, 16651, 16661, + 16670, 16676, 16682, 15737, 15742, 16686, 16696, 958, 9568, 3031, 16705, + 16714, 16722, 16733, 16744, 16754, 16763, 16772, 16781, 16787, 16796, + 16804, 5718, 16810, 16813, 16817, 16822, 16827, 16835, 15750, 16839, + 16845, 16849, 16855, 16861, 2872, 16869, 16874, 16878, 16882, 16889, + 16893, 16901, 16907, 16912, 16916, 16921, 16927, 16938, 16943, 16947, + 16958, 16962, 16966, 16969, 16973, 16978, 16982, 16986, 829, 16990, 5, + 16996, 17000, 17004, 17008, 17013, 17017, 17021, 17025, 17029, 17034, + 17038, 17043, 17047, 17050, 17054, 17059, 17063, 17068, 17072, 17076, + 17080, 17085, 17089, 17093, 17103, 17108, 17112, 17116, 17121, 17126, + 17135, 17140, 17145, 17149, 17153, 17165, 17174, 17183, 17189, 17193, + 17203, 17212, 17220, 17226, 17230, 17237, 17247, 17256, 17264, 17272, + 17279, 17288, 17297, 17305, 17310, 17314, 17318, 17321, 17323, 17327, + 17331, 17336, 17340, 17344, 17347, 17351, 17354, 17358, 17361, 17365, + 17369, 17373, 17377, 17382, 17387, 17392, 17396, 17399, 17404, 17410, + 17415, 17421, 17426, 17430, 17434, 17438, 17443, 17447, 17452, 17456, + 17463, 17467, 17470, 17474, 17480, 17486, 17490, 17494, 17499, 17506, + 17512, 17516, 17525, 17529, 17533, 17536, 17542, 17547, 17553, 17558, + 1776, 2449, 17562, 17563, 17566, 17570, 17574, 17579, 17583, 17587, + 17590, 17595, 17599, 17602, 17607, 17611, 17616, 17620, 9587, 17625, + 17628, 17631, 17635, 17639, 17646, 17651, 17658, 17662, 17666, 17671, + 17676, 17680, 17685, 17697, 17708, 17712, 17715, 17721, 4743, 2001, + 17725, 17741, 5796, 17761, 17770, 17786, 17790, 17793, 17799, 17809, + 17815, 17830, 17842, 17853, 17861, 17870, 17876, 17885, 17895, 17906, + 17917, 17926, 17935, 17943, 17950, 17958, 17964, 17969, 17975, 17980, + 17988, 18000, 18012, 18026, 18033, 18042, 18051, 18059, 18067, 18075, + 18082, 18091, 18099, 18109, 18118, 18128, 18137, 18146, 18154, 18159, + 18163, 18166, 18170, 18174, 18178, 18184, 18190, 9632, 18195, 18207, + 18213, 6149, 18224, 18234, 18243, 18247, 18250, 18254, 18260, 18264, + 18269, 18278, 18285, 4784, 18292, 18300, 18307, 18313, 18318, 18324, + 18330, 18338, 18342, 18345, 18347, 18167, 18356, 18362, 18372, 18377, + 18383, 18388, 18393, 18398, 18405, 18414, 18423, 18429, 18434, 18440, + 18445, 18452, 18457, 18461, 18471, 18475, 18480, 18490, 18499, 18503, + 18510, 18516, 18521, 18528, 18532, 8380, 18540, 18547, 18554, 15531, + 18096, 18559, 18563, 18568, 18581, 18595, 18611, 18629, 18646, 18664, + 16152, 18681, 18693, 18707, 10228, 16169, 18719, 18731, 9444, 18745, + 18750, 18755, 18761, 18765, 18770, 18780, 18786, 6473, 18792, 18794, + 18799, 18807, 18811, 18401, 18817, 18824, 18834, 18839, 18843, 18846, + 18852, 18860, 18870, 10257, 18884, 18891, 18895, 18898, 18903, 18907, + 18917, 18922, 18927, 18935, 18944, 18949, 10262, 18953, 18956, 18959, + 18975, 18983, 18991, 18999, 19004, 19008, 19014, 19020, 19023, 19029, + 19041, 19048, 19055, 19069, 19082, 19091, 19103, 19114, 19123, 19132, + 19140, 19151, 4766, 19158, 19164, 19169, 19175, 19185, 19194, 19200, + 19205, 19212, 19224, 19231, 19240, 19248, 19254, 19260, 19265, 19269, + 19272, 19278, 19283, 19287, 19298, 19307, 19315, 19320, 19326, 9981, + 5169, 19331, 19334, 19337, 19343, 19351, 19359, 19363, 19368, 19371, + 19380, 19388, 19399, 19403, 19409, 19415, 19419, 19425, 19447, 19471, + 19478, 19484, 19495, 19513, 19520, 19524, 19533, 19546, 19554, 19566, + 19577, 19587, 19601, 19610, 19618, 19630, 5813, 19641, 19652, 19664, + 19674, 19683, 19688, 19692, 19700, 19705, 19709, 19712, 19720, 19728, + 19737, 19746, 2278, 19752, 19761, 19771, 19781, 19790, 19795, 19806, + 19817, 19821, 19831, 19840, 19850, 19860, 19868, 19877, 19884, 19892, + 19899, 19908, 19912, 19920, 19927, 19934, 19945, 19960, 19967, 19977, + 19986, 9070, 19992, 19997, 20001, 20009, 20015, 20024, 20029, 20039, + 1194, 20043, 1256, 583, 20046, 20055, 18106, 20062, 20067, 20071, 20077, + 1289, 444, 317, 20082, 20091, 20100, 20108, 20119, 20128, 20136, 20139, + 20147, 20155, 9600, 20160, 20166, 3399, 20171, 20175, 20181, 20185, + 20192, 1451, 20198, 5881, 20205, 20215, 20223, 20229, 20238, 20246, + 20254, 20261, 20268, 1486, 20275, 20281, 20292, 20303, 20311, 20318, + 20327, 20335, 20342, 20349, 20362, 20373, 20392, 1294, 20396, 20401, + 20409, 2908, 20413, 20418, 1455, 17345, 20428, 20432, 20437, 20441, 2854, + 20447, 20455, 2909, 239, 20463, 20471, 20479, 20486, 20492, 20497, 20504, + 20507, 20513, 18265, 20519, 88, 20523, 20527, 20533, 20538, 20544, 2012, + 20548, 20552, 20555, 20558, 20565, 20571, 15817, 2953, 10920, 20576, + 20579, 20587, 20590, 20602, 20607, 20611, 20619, 20626, 20632, 20639, + 20646, 20649, 20653, 20657, 1459, 20667, 2332, 2132, 20672, 20677, 20681, + 20686, 20691, 20697, 20702, 20707, 20711, 20716, 20722, 20727, 20732, + 20738, 20743, 20747, 20752, 20757, 20762, 20767, 20772, 20778, 20784, + 20789, 20793, 20798, 20802, 20807, 20812, 20817, 20821, 20826, 20831, + 20836, 20841, 20847, 20853, 20858, 20862, 20867, 20872, 20877, 20882, + 20887, 20891, 20896, 20901, 20906, 20910, 20915, 20923, 20929, 20935, + 20941, 20946, 20950, 20953, 20957, 20962, 20966, 20971, 20975, 20978, + 20983, 15226, 20202, 20988, 20992, 20997, 21001, 21004, 21007, 21011, + 21016, 21024, 21028, 21033, 21037, 21041, 21046, 21051, 21055, 21061, + 21066, 21073, 21080, 21084, 21087, 21093, 21102, 21109, 21113, 21118, + 21122, 21128, 21132, 21138, 7242, 10484, 21143, 21148, 21153, 21159, + 21164, 21169, 21173, 21178, 21183, 21189, 21194, 21199, 21203, 21208, + 21213, 21217, 21222, 21227, 21232, 21236, 21241, 21246, 21251, 21255, + 21259, 21263, 21272, 21278, 21284, 21293, 21301, 21306, 21310, 21317, + 21323, 21327, 21332, 21341, 21346, 1485, 21352, 21355, 21359, 15858, + 15864, 21365, 21369, 21380, 21391, 21403, 21410, 21417, 21422, 21426, + 14928, 626, 15225, 21434, 21438, 21443, 21449, 21454, 21460, 21465, + 21471, 21476, 2386, 2816, 21480, 21483, 21488, 21493, 21499, 21504, + 21509, 21513, 21518, 21524, 21529, 21534, 21540, 21545, 21549, 21554, + 21559, 21564, 21569, 21573, 21578, 21583, 21588, 21594, 21600, 21606, + 21611, 21615, 21620, 2969, 21624, 21627, 4825, 21631, 21637, 21644, 4834, + 21648, 21655, 21661, 21670, 21678, 21682, 21689, 21695, 21699, 21702, + 21711, 21719, 21723, 21733, 21743, 21749, 21759, 21764, 21777, 21791, + 21802, 21814, 21828, 21841, 21853, 9455, 21865, 21870, 21875, 21879, + 21883, 21887, 1765, 19112, 21891, 21896, 21901, 21905, 21908, 21914, + 21920, 6277, 10168, 21925, 21930, 21935, 21444, 21940, 21945, 21951, + 21450, 21956, 21959, 21455, 21964, 21970, 21976, 21461, 21981, 21986, + 21992, 21997, 22002, 22008, 22014, 22019, 22024, 22028, 22033, 22038, + 22043, 22051, 22055, 22060, 22065, 22069, 22074, 22079, 22084, 21466, + 21472, 22090, 2174, 224, 22093, 22096, 22100, 22104, 22112, 22119, 22126, + 22130, 22133, 22139, 22147, 22151, 22155, 22158, 22165, 22169, 22176, + 22184, 22192, 22199, 22203, 689, 271, 22215, 22220, 22225, 22231, 22236, + 2980, 22241, 22246, 22251, 22256, 22261, 15938, 22266, 22271, 22276, + 22281, 22287, 22292, 22296, 22301, 22306, 22311, 22315, 22320, 22325, + 15781, 2986, 22330, 22335, 22340, 22346, 22351, 22356, 22360, 22365, + 22370, 22376, 22381, 22386, 22390, 22395, 22400, 22405, 22409, 22414, + 22419, 22424, 22430, 22436, 22441, 22445, 22450, 22455, 22460, 22464, + 22472, 22478, 22482, 22489, 10815, 22495, 22502, 22510, 22517, 22523, + 22535, 22541, 22545, 22549, 22160, 22553, 22564, 22569, 22574, 22579, + 22583, 22588, 15869, 22592, 15239, 22597, 22602, 22608, 22613, 22617, + 22621, 22624, 22630, 22641, 22653, 22658, 22662, 22665, 2387, 300, 22669, + 22675, 26, 22680, 22684, 22688, 22696, 22700, 22704, 22707, 22712, 22716, + 22721, 22725, 22730, 22734, 22739, 22743, 22746, 22748, 22751, 22753, + 22757, 22769, 22778, 22782, 22788, 22793, 22799, 22804, 22809, 22813, + 22818, 22825, 22830, 22834, 22841, 18104, 18114, 22845, 22850, 22855, + 22860, 22864, 22871, 4913, 22877, 22886, 22894, 22909, 22923, 22931, + 22942, 22951, 22956, 22966, 22971, 22975, 22978, 22982, 22986, 22993, + 22998, 5401, 23008, 23010, 23013, 23017, 23021, 23026, 23032, 23037, + 23046, 23052, 23057, 23064, 23068, 23075, 23088, 23096, 23100, 23110, + 23115, 23119, 23123, 23129, 23134, 23144, 23153, 23164, 23172, 23183, + 23192, 23195, 23199, 23207, 23213, 23221, 23228, 23234, 2092, 23238, + 23240, 23245, 23250, 23253, 23255, 23259, 23262, 23266, 23270, 23276, + 23286, 23291, 23297, 23301, 23306, 23319, 18367, 23325, 23334, 11591, + 21729, 23341, 23346, 23350, 23358, 23365, 23370, 23374, 23378, 23386, + 23392, 23398, 23403, 23407, 23410, 23415, 16239, 23431, 23443, 23455, + 16256, 23469, 23481, 10281, 23495, 23500, 23505, 23509, 23516, 23528, + 23534, 23537, 23542, 23545, 23547, 23551, 23554, 23559, 23564, 23570, + 23575, 23580, 23586, 23592, 23597, 23601, 23606, 23611, 23616, 23620, + 23623, 23629, 23634, 23639, 23644, 23648, 23653, 23659, 23664, 23669, + 23675, 23680, 23685, 23690, 23695, 23700, 23704, 23707, 23713, 23717, + 23725, 23732, 23740, 23750, 23756, 23762, 23766, 23775, 23780, 23785, + 6511, 23790, 23797, 23803, 23808, 23816, 23820, 23823, 23834, 23841, + 23847, 23851, 23854, 23860, 23866, 23874, 20487, 23881, 23889, 23894, + 23900, 23905, 23909, 23916, 23922, 18380, 23931, 23936, 23944, 23952, + 5909, 3418, 23959, 23963, 23967, 23971, 23976, 23980, 23984, 23989, + 23993, 23997, 24001, 24005, 24009, 24012, 24014, 24022, 24026, 24033, + 24037, 24045, 24052, 24062, 24066, 24070, 24078, 24084, 8593, 24090, + 24099, 24106, 24114, 24122, 24130, 24137, 24144, 24151, 24158, 24165, + 24170, 24176, 24193, 24201, 24209, 24216, 416, 24220, 24226, 22947, + 24232, 24240, 24246, 24252, 24261, 24267, 2941, 15826, 24276, 24283, + 24288, 24292, 24299, 24307, 24316, 24326, 24332, 24340, 24349, 24357, + 15571, 24364, 24371, 24377, 24387, 24396, 24407, 24411, 24416, 24422, + 24428, 24433, 24446, 24459, 24472, 24479, 24485, 24490, 24494, 1465, 83, + 24498, 24500, 24504, 24508, 24512, 24517, 24521, 5849, 24525, 24531, + 3629, 24537, 24540, 24545, 24549, 24554, 24558, 24562, 24567, 6372, + 24571, 24575, 24579, 9954, 24584, 24588, 24593, 24598, 24603, 24607, + 18384, 24613, 24616, 24620, 24625, 24629, 24635, 24640, 24644, 24648, + 4945, 4949, 20605, 24651, 24659, 24666, 24670, 316, 24675, 24681, 24687, + 24691, 24700, 24704, 24709, 24714, 24718, 24724, 24729, 24744, 24759, + 24774, 24790, 24808, 19756, 24822, 24827, 24831, 23081, 24839, 24843, + 24852, 24860, 6072, 9756, 24864, 24867, 24870, 4926, 3111, 24875, 24883, + 24887, 24890, 24894, 24899, 24905, 24910, 24914, 24919, 24923, 24929, + 24933, 24940, 7550, 24944, 24950, 24957, 24964, 24971, 20095, 4862, + 24978, 24985, 24992, 24998, 25003, 25010, 25021, 25027, 25032, 25039, + 25043, 25047, 25057, 25063, 25068, 25073, 25078, 25083, 25087, 25091, + 25097, 2004, 711, 6388, 25106, 6393, 25111, 6398, 6403, 6409, 25116, + 25126, 25130, 6414, 25135, 25138, 25143, 25147, 25152, 25159, 25165, + 25175, 3444, 25184, 25188, 25192, 25202, 25213, 25219, 25225, 25230, + 25236, 25239, 25246, 25252, 25257, 25264, 25271, 25275, 25285, 25298, + 25307, 25316, 25327, 25340, 25349, 25354, 6419, 25359, 25367, 25372, + 4392, 21, 25379, 25384, 11012, 25388, 25391, 25394, 25398, 25406, 25410, + 25413, 25419, 25425, 25433, 25439, 25446, 25450, 25454, 19923, 25458, + 25467, 25473, 25478, 25482, 25490, 25496, 25501, 25506, 25510, 25516, + 25521, 25527, 3216, 25534, 25538, 25541, 9882, 25553, 25564, 25571, + 25577, 25581, 25587, 25592, 25598, 25603, 25607, 25612, 25617, 25627, + 25633, 25646, 25651, 25657, 16672, 1468, 855, 25662, 25668, 14, 25676, + 25683, 25687, 25691, 25699, 25703, 25708, 25712, 25719, 25724, 25728, + 25733, 25739, 25744, 25750, 25755, 25759, 25763, 25767, 25772, 25776, + 25781, 25785, 25792, 25797, 25801, 25806, 25810, 25815, 25819, 10029, + 10034, 25824, 25828, 25831, 25835, 25840, 25844, 25850, 25857, 25862, + 25872, 25877, 25885, 25889, 25892, 25896, 25901, 25906, 25910, 25915, + 8604, 25926, 25930, 25933, 25937, 25941, 25944, 25948, 4952, 8620, 25951, + 25954, 25959, 25963, 25972, 25988, 26004, 26014, 19742, 26021, 26025, + 26030, 26034, 26038, 26043, 26048, 26052, 26057, 26061, 18966, 26065, + 26070, 26074, 26081, 26089, 26095, 26102, 26108, 26112, 26118, 26126, + 26130, 26139, 5830, 26147, 26151, 26159, 26166, 26171, 26175, 26180, + 18556, 1142, 26184, 26191, 26197, 26202, 26205, 26207, 26214, 26221, + 26227, 26231, 26234, 26238, 26242, 26246, 26251, 26255, 26259, 26262, + 26266, 16287, 26285, 6549, 26298, 26304, 26308, 26312, 26319, 26325, + 26330, 26336, 26346, 26358, 26369, 26374, 26381, 26385, 26388, 10365, + 10050, 26396, 26400, 26404, 26409, 26414, 26418, 26422, 26425, 4599, + 19639, 26430, 26434, 26440, 24322, 26446, 26450, 26455, 26462, 26466, + 10304, 26469, 26476, 862, 26480, 26485, 26490, 26495, 26499, 26504, + 26510, 26515, 26521, 26526, 26536, 26541, 26546, 15604, 23800, 26551, + 26554, 26561, 26570, 26574, 26577, 26581, 604, 26586, 26592, 26596, + 26606, 26615, 26622, 26628, 26632, 26639, 26645, 26652, 26658, 26668, + 26676, 26682, 26688, 26693, 26697, 26704, 26710, 26717, 26247, 478, 1109, + 26723, 26728, 26731, 26737, 26745, 1397, 26750, 26754, 26761, 26767, + 26771, 26776, 26785, 26795, 26801, 26818, 26822, 26831, 26839, 26845, + 26850, 26857, 26863, 26871, 26876, 26884, 26903, 16332, 26917, 26933, + 26947, 26953, 26958, 26963, 26968, 26974, 26979, 26983, 26990, 26995, + 298, 2473, 27002, 27007, 19856, 26860, 27012, 27017, 27025, 27029, 27032, + 27038, 27042, 19827, 27045, 27049, 27052, 27057, 27061, 27066, 27071, + 27075, 27080, 27084, 27088, 27093, 27099, 18940, 27104, 27108, 10470, + 441, 43, 21484, 21489, 21494, 21500, 21505, 21510, 27111, 21514, 27115, + 21519, 21525, 27119, 21530, 21535, 27127, 27132, 21541, 27137, 27142, + 27147, 27152, 27158, 27164, 21546, 27177, 27183, 21550, 21555, 27187, + 21560, 21565, 27190, 27195, 27199, 21384, 27205, 8769, 27212, 27217, + 21570, 27221, 27226, 27231, 27236, 27240, 27245, 27250, 27256, 27261, + 27266, 27272, 27278, 27283, 27287, 27292, 27297, 27302, 27306, 27311, + 27316, 27321, 27327, 27333, 27339, 27344, 27348, 27353, 27357, 21574, + 21579, 21584, 27361, 27365, 21589, 21595, 21601, 21607, 27377, 18282, + 27381, 27385, 27390, 27395, 27399, 27409, 27414, 27419, 27423, 27427, + 27430, 27438, 21616, 1475, 27443, 27451, 27460, 27464, 27472, 27480, + 27496, 27501, 1739, 7688, 27505, 2509, 27517, 27518, 27526, 27533, 27538, + 27545, 1058, 6441, 27548, 27553, 27556, 27565, 1308, 27570, 27577, 27580, + 27585, 15917, 2207, 6642, 27589, 27595, 1210, 2032, 27604, 27613, 23287, + 6464, 3055, 1313, 27623, 27631, 27638, 27643, 27647, 27651, 16842, 6491, + 27659, 27668, 27677, 27685, 27692, 27697, 27710, 27723, 27735, 27747, + 27759, 27772, 27783, 27794, 27802, 27810, 27822, 27834, 27845, 27854, + 27862, 27869, 27881, 27888, 27897, 27904, 27914, 27919, 27925, 27930, + 27934, 27941, 27945, 27952, 27960, 2173, 27967, 27978, 27988, 27997, + 28005, 28015, 28023, 28033, 28039, 28050, 28060, 28069, 28078, 28088, + 28097, 1695, 37, 28102, 28113, 28124, 28134, 28141, 28147, 28152, 28156, + 28167, 28177, 28186, 28197, 10985, 10990, 28202, 28211, 28216, 28226, + 28231, 28239, 28247, 28254, 28260, 6526, 932, 28264, 28270, 28275, 28278, + 1858, 26401, 28286, 28290, 28293, 1502, 28299, 9035, 1318, 28304, 28317, + 28331, 2258, 28349, 28361, 2272, 28375, 28387, 28400, 28414, 28426, 2289, + 28440, 1324, 1330, 1336, 6595, 28445, 28450, 28455, 28459, 28474, 28489, + 28504, 28519, 28534, 28549, 28564, 28579, 28594, 28609, 28624, 28639, + 28654, 28669, 28684, 28699, 28714, 28729, 28744, 28759, 28774, 28789, + 28804, 28819, 28834, 28849, 28864, 28879, 28894, 28909, 28924, 28939, + 28954, 28969, 28984, 28999, 29014, 29029, 29044, 29059, 29074, 29089, + 29104, 29119, 29134, 29149, 29164, 29179, 29194, 29209, 29224, 29239, + 29254, 29269, 29284, 29299, 29314, 29329, 29344, 29359, 29374, 29389, + 29404, 29419, 29434, 29449, 29464, 29479, 29494, 29509, 29524, 29539, + 29554, 29569, 29584, 29599, 29614, 29629, 29644, 29659, 29674, 29689, + 29704, 29719, 29734, 29749, 29764, 29779, 29794, 29809, 29824, 29839, + 29854, 29869, 29884, 29899, 29914, 29929, 29944, 29959, 29974, 29989, + 30004, 30019, 30034, 30049, 30064, 30079, 30094, 30109, 30124, 30139, + 30154, 30169, 30184, 30199, 30214, 30229, 30244, 30259, 30274, 30289, + 30304, 30319, 30334, 30349, 30364, 30379, 30394, 30409, 30424, 30439, + 30454, 30469, 30484, 30499, 30514, 30529, 30544, 30559, 30574, 30589, + 30604, 30619, 30634, 30649, 30664, 30679, 30694, 30709, 30724, 30739, + 30754, 30769, 30784, 30799, 30814, 30829, 30844, 30859, 30874, 30889, + 30904, 30919, 30934, 30949, 30964, 30979, 30994, 31009, 31024, 31039, + 31054, 31069, 31084, 31099, 31114, 31129, 31144, 31159, 31174, 31189, + 31204, 31219, 31234, 31249, 31264, 31279, 31294, 31309, 31324, 31339, + 31354, 31369, 31384, 31399, 31414, 31429, 31444, 31459, 31474, 31489, + 31504, 31519, 31534, 31549, 31564, 31579, 31594, 31609, 31624, 31639, + 31654, 31669, 31684, 31699, 31714, 31729, 31744, 31759, 31774, 31789, + 31804, 31819, 31834, 31849, 31864, 31879, 31894, 31909, 31924, 31939, + 31954, 31969, 31984, 31999, 32014, 32029, 32044, 32059, 32074, 32089, + 32104, 32119, 32134, 32149, 32164, 32179, 32194, 32209, 32224, 32239, + 32254, 32269, 32284, 32299, 32314, 32329, 32344, 32359, 32374, 32389, + 32404, 32419, 32434, 32449, 32464, 32479, 32494, 32509, 32524, 32539, + 32554, 32569, 32584, 32599, 32614, 32629, 32644, 32659, 32674, 32689, + 32704, 32719, 32734, 32749, 32764, 32779, 32794, 32809, 32824, 32839, + 32854, 32869, 32884, 32899, 32914, 32929, 32944, 32959, 32974, 32989, + 33004, 33019, 33034, 33049, 33064, 33079, 33094, 33109, 33124, 33139, + 33154, 33169, 33184, 33199, 33214, 33229, 33244, 33259, 33274, 33289, + 33304, 33319, 33334, 33349, 33364, 33379, 33394, 33409, 33424, 33439, + 33454, 33469, 33484, 33499, 33514, 33529, 33544, 33559, 33574, 33589, + 33604, 33619, 33634, 33649, 33664, 33679, 33694, 33709, 33724, 33739, + 33754, 33769, 33784, 33799, 33814, 33829, 33844, 33859, 33874, 33889, + 33904, 33919, 33934, 33949, 33964, 33979, 33994, 34009, 34024, 34039, + 34054, 34069, 34084, 34099, 34114, 34129, 34144, 34159, 34174, 34189, + 34204, 34219, 34234, 34249, 34264, 34279, 34294, 34309, 34324, 34339, + 34354, 34369, 34384, 34399, 34414, 34429, 34444, 34459, 34474, 34489, + 34504, 34519, 34534, 34549, 34564, 34579, 34594, 34609, 34624, 34639, + 34654, 34669, 34684, 34699, 34714, 34729, 34744, 34759, 34774, 34789, + 34804, 34819, 34834, 34849, 34864, 34879, 34894, 34909, 34924, 34939, + 34954, 34969, 34984, 34999, 35014, 35029, 35044, 35059, 35074, 35089, + 35104, 35119, 35134, 35149, 35164, 35179, 35194, 35209, 35224, 35239, + 35254, 35269, 35284, 35299, 35314, 35329, 35344, 35359, 35374, 35389, + 35404, 35419, 35434, 35449, 35464, 35480, 35496, 35512, 35528, 35544, + 35560, 35576, 35592, 35608, 35624, 35640, 35656, 35672, 35688, 35704, + 35720, 35736, 35752, 35768, 35784, 35800, 35816, 35832, 35848, 35864, + 35880, 35896, 35912, 35928, 35944, 35960, 35976, 35992, 36008, 36024, + 36040, 36056, 36072, 36088, 36104, 36120, 36136, 36152, 36168, 36184, + 36200, 36216, 36232, 36248, 36264, 36280, 36296, 36312, 36328, 36344, + 36360, 36376, 36392, 36408, 36424, 36440, 36456, 36472, 36488, 36504, + 36520, 36536, 36552, 36568, 36584, 36600, 36616, 36632, 36648, 36664, + 36680, 36696, 36712, 36728, 36744, 36760, 36776, 36792, 36808, 36824, + 36840, 36856, 36872, 36888, 36904, 36920, 36936, 36952, 36968, 36984, + 37000, 37016, 37032, 37048, 37064, 37080, 37096, 37112, 37128, 37144, + 37160, 37176, 37192, 37208, 37224, 37240, 37256, 37272, 37288, 37304, + 37320, 37336, 37352, 37368, 37384, 37400, 37416, 37432, 37448, 37464, + 37480, 37496, 37512, 37528, 37544, 37560, 37576, 37592, 37608, 37624, + 37640, 37656, 37672, 37688, 37704, 37720, 37736, 37752, 37768, 37784, + 37800, 37816, 37832, 37848, 37864, 37880, 37896, 37912, 37928, 37944, + 37960, 37976, 37992, 38008, 38024, 38040, 38056, 38072, 38088, 38104, + 38120, 38136, 38152, 38168, 38184, 38200, 38216, 38232, 38248, 38264, + 38280, 38296, 38312, 38328, 38344, 38360, 38376, 38392, 38408, 38424, + 38440, 38456, 38472, 38488, 38504, 38520, 38536, 38552, 38568, 38584, + 38600, 38616, 38632, 38648, 38664, 38680, 38696, 38712, 38728, 38744, + 38760, 38776, 38792, 38808, 38824, 38840, 38856, 38872, 38888, 38904, + 38920, 38936, 38952, 38968, 38984, 39000, 39016, 39032, 39048, 39064, + 39080, 39096, 39112, 39128, 39144, 39160, 39176, 39192, 39208, 39224, + 39240, 39256, 39272, 39288, 39304, 39320, 39336, 39352, 39368, 39384, + 39400, 39416, 39432, 39448, 39464, 39480, 39496, 39512, 39528, 39544, + 39560, 39576, 39592, 39608, 39624, 39640, 39656, 39672, 39688, 39704, + 39720, 39736, 39752, 39768, 39784, 39800, 39816, 39832, 39848, 39864, + 39880, 39896, 39912, 39928, 39944, 39960, 39976, 39992, 40008, 40024, + 40040, 40056, 40072, 40088, 40104, 40120, 40136, 40152, 40168, 40184, + 40200, 40216, 40232, 40248, 40264, 40280, 40296, 40312, 40328, 40344, + 40360, 40376, 40392, 40408, 40424, 40440, 40456, 40472, 40488, 40504, + 40520, 40536, 40552, 40568, 40584, 40600, 40616, 40632, 40648, 40664, + 40680, 40696, 40712, 40728, 40744, 40760, 40776, 40792, 40808, 40824, + 40840, 40856, 40872, 40888, 40904, 40920, 40936, 40952, 40968, 40984, + 41000, 41016, 41032, 41048, 41064, 41080, 41096, 41112, 41128, 41144, + 41160, 41176, 41192, 41208, 41224, 41240, 41256, 41272, 41288, 41304, + 41320, 41336, 41352, 41368, 41384, 41400, 41416, 41432, 41448, 41464, + 41480, 41496, 41512, 41528, 41544, 41560, 41576, 41592, 41608, 41624, + 41640, 41656, 41672, 41688, 41704, 41720, 41736, 41752, 41768, 41784, + 41800, 41816, 41832, 41848, 41864, 41880, 41896, 41912, 41928, 41944, + 41960, 41976, 41992, 42008, 42024, 42040, 42056, 42072, 42088, 42104, + 42120, 42136, 42152, 42168, 42184, 42200, 42216, 42232, 42248, 42264, + 42280, 42296, 42312, 42328, 42344, 42360, 42376, 42392, 42408, 42424, + 42440, 42456, 42472, 42488, 42504, 42520, 42536, 42552, 42568, 42584, + 42600, 42616, 42632, 42648, 42664, 42680, 42696, 42712, 42728, 42744, + 42760, 42776, 42792, 42808, 42824, 42840, 42856, 42872, 42888, 42904, + 42920, 42936, 42952, 42968, 42984, 43000, 43016, 43032, 43048, 43064, + 43080, 43096, 43112, 43128, 43144, 43160, 43176, 43192, 43208, 43224, + 43240, 43256, 43272, 43288, 43304, 43320, 43336, 43352, 43368, 43384, + 43400, 43416, 43432, 43448, 43464, 43480, 43496, 43512, 43528, 43544, + 43560, 43576, 43592, 43608, 43624, 43640, 43656, 43672, 43688, 43704, + 43720, 43736, 43752, 43768, 43784, 43800, 43816, 43832, 43848, 43864, + 43880, 43896, 43912, 43928, 43944, 43960, 43976, 43992, 44008, 44024, + 44040, 44056, 44072, 44088, 44104, 44120, 44136, 44151, 44160, 44166, + 44172, 44182, 44190, 9688, 44203, 1510, 44211, 19294, 44217, 2211, 44222, + 44226, 44231, 44238, 44246, 40, 44250, 44256, 44261, 44266, 44270, 44275, + 44279, 44283, 6613, 44287, 44297, 44310, 44321, 44334, 44341, 44347, + 44352, 44358, 44364, 44370, 44375, 44380, 44385, 44390, 44394, 44399, + 44404, 44409, 44415, 44421, 44427, 44432, 44436, 44441, 44446, 44450, + 44455, 44460, 44465, 44469, 10588, 10599, 17405, 1553, 44473, 1558, + 44479, 44482, 1589, 44488, 1595, 1601, 6647, 44493, 44501, 44508, 44512, + 44518, 44523, 44528, 44535, 44540, 44544, 1606, 10690, 10701, 44553, + 44560, 44565, 44569, 1610, 44572, 44578, 44588, 44592, 1615, 26447, + 44597, 6755, 6761, 44603, 44615, 44632, 44649, 44666, 44683, 44700, + 44717, 44734, 44751, 44768, 44785, 44802, 44819, 44836, 44853, 44870, + 44887, 44904, 44921, 44938, 44955, 44972, 44989, 45006, 45023, 45040, + 45057, 45074, 45091, 45108, 45125, 45142, 45159, 45176, 45193, 45210, + 45227, 45244, 45261, 45278, 45295, 45312, 45329, 45346, 45363, 45380, + 45397, 45414, 45431, 45448, 45459, 1620, 45464, 45470, 5684, 1625, 19529, + 45475, 45486, 45496, 45503, 45509, 45514, 6777, 1630, 6782, 45518, 45523, + 45529, 45534, 45539, 45544, 45549, 45554, 45559, 45564, 45570, 45576, + 45582, 45587, 45591, 45596, 45601, 45605, 45610, 45615, 45620, 45624, + 45629, 45635, 45640, 45645, 45649, 45654, 45659, 45665, 45670, 45675, + 45681, 45687, 45692, 45696, 45701, 45706, 45711, 45715, 45720, 45725, + 45730, 45736, 45742, 45747, 45751, 45756, 45761, 45766, 45770, 45775, + 45780, 45786, 45791, 45796, 45800, 45805, 45810, 45816, 45821, 45826, + 45832, 45838, 45843, 45847, 45852, 45857, 45861, 45866, 45871, 45876, + 45882, 45888, 45893, 45897, 45902, 45907, 45911, 45916, 45921, 45926, + 45930, 45933, 21707, 45938, 10952, 10964, 6880, 45944, 6885, 45959, + 45964, 45976, 45988, 46000, 2324, 46012, 46017, 46021, 46027, 46033, + 1642, 863, 46038, 46043, 46047, 46051, 46055, 46060, 46064, 11029, 46069, + 46072, 1646, 46080, 6918, 1651, 46085, 46092, 46097, 46106, 46116, 46123, + 1656, 46130, 46135, 11098, 46139, 46144, 46151, 46155, 46165, 11120, + 5603, 5610, 1661, 46172, 46178, 46186, 46193, 46199, 46205, 46210, 3004, + 21288, 21297, 11160, 1666, 1670, 46218, 46229, 46234, 1673, 46242, 46247, + 46259, 46265, 46270, 1678, 46275, 46280, 46288, 46296, 46303, 46312, + 46320, 46329, 1683, 1688, 46333, 46340, 46348, 46354, 46359, 7047, 46368, + 46374, 46380, 46385, 46393, 7056, 7061, 46401, 46407, 3053, 26542, 46412, + 46418, 46423, 46431, 46438, 46443, 46447, 1699, 46453, 46456, 904, 46462, + 9, 46468, 46472, 46477, 46481, 46485, 46489, 46494, 46498, 46503, 46508, + 46512, 46515, 46519, 46524, 46528, 46533, 46537, 23555, 23560, 23565, + 46540, 46547, 46553, 26362, 46563, 23571, 23576, 21909, 21915, 23587, + 21921, 46568, 46573, 46577, 46581, 46584, 46588, 46591, 46596, 46600, + 46604, 46607, 46619, 22821, 46626, 10169, 696, 46629, 46633, 46638, + 46642, 8802, 46645, 46652, 46665, 46674, 46679, 46689, 46702, 46714, + 46721, 46726, 46739, 24440, 46757, 46762, 46769, 46775, 46780, 46788, + 19596, 520, 46794, 46800, 46806, 46811, 21926, 3474, 21931, 46815, 46825, + 46830, 46840, 46855, 46861, 46867, 21936, 21445, 46872, 46877, 46882, + 46887, 46892, 46896, 3515, 21957, 46900, 46906, 330, 46916, 46923, 46932, + 46938, 46946, 46950, 46954, 46958, 46962, 46967, 46971, 46977, 46985, + 46990, 46994, 46999, 47003, 47007, 47013, 47019, 47024, 47028, 21965, + 47033, 21971, 21977, 47038, 47044, 47049, 47053, 21462, 10912, 47056, + 47060, 47065, 47072, 47078, 47082, 47088, 47092, 47096, 47101, 47106, + 47110, 47113, 47118, 47125, 47132, 47138, 47143, 47148, 47152, 47157, + 47163, 47168, 47174, 47179, 47184, 47189, 47195, 47200, 47205, 47211, + 47217, 47223, 21982, 47228, 47233, 47238, 21993, 47243, 47248, 47253, + 47259, 47265, 21998, 47270, 47275, 47280, 22009, 22015, 47285, 47290, + 47295, 47300, 22020, 22025, 22029, 47305, 47276, 47309, 47315, 47323, + 47330, 47336, 47346, 47352, 47359, 6580, 22034, 47365, 47378, 47387, + 47393, 47402, 47408, 16625, 47415, 47422, 22010, 47432, 47439, 47444, + 47448, 47452, 3549, 47457, 47462, 47467, 23649, 23654, 47471, 23660, + 23665, 47476, 23670, 23676, 47481, 23681, 47492, 47495, 47507, 47515, + 22056, 47519, 47528, 47538, 47547, 22061, 47552, 47559, 47568, 47574, + 47582, 22604, 3367, 47587, 22070, 47593, 47599, 47606, 47611, 22075, + 47615, 47621, 47627, 47632, 47638, 47643, 709, 24255, 24631, 24637, + 47647, 47651, 47655, 47658, 47671, 47677, 47681, 47684, 47689, 23001, + 47693, 21467, 15233, 47699, 3495, 3503, 5506, 225, 47702, 47706, 47710, + 47714, 47718, 47721, 47725, 47730, 47734, 47739, 47743, 47747, 47751, + 47756, 47760, 47765, 47769, 47773, 47780, 9840, 47789, 47798, 17550, + 47802, 47808, 47816, 47822, 47834, 47838, 47843, 47849, 47859, 47869, + 47875, 47879, 47884, 47890, 47899, 47908, 47916, 10073, 47920, 47929, + 47937, 47948, 47959, 47968, 47972, 47982, 47988, 47993, 47999, 48004, + 21372, 48015, 18485, 48021, 48028, 48034, 48038, 48048, 48056, 48061, + 48065, 48073, 48079, 48089, 1025, 48092, 48095, 48099, 48105, 48112, + 48118, 48127, 48136, 48142, 48148, 48153, 48160, 48167, 48180, 48189, + 48198, 48203, 48207, 48214, 48221, 48228, 48235, 48242, 48247, 48251, + 48254, 48264, 48268, 48277, 48281, 48286, 48290, 48299, 48307, 48315, + 48320, 48324, 48329, 48334, 48338, 48344, 48356, 48364, 48374, 48381, + 48387, 48392, 48396, 48400, 48404, 48413, 48422, 48431, 48437, 48443, + 48449, 48454, 48461, 48467, 48475, 48482, 7836, 48488, 48494, 48498, + 9241, 48502, 48511, 48519, 48526, 48530, 48534, 48540, 48548, 48555, + 48561, 48572, 48576, 48580, 48584, 48587, 48593, 48598, 48602, 48606, + 48615, 48623, 48630, 16940, 26200, 48636, 48644, 48648, 48655, 48664, + 48672, 48678, 48683, 48687, 48692, 48696, 48701, 48710, 48714, 48721, + 48728, 48736, 48742, 48753, 48759, 48768, 48775, 48782, 48789, 48796, + 48803, 28634, 48810, 48815, 48821, 31711, 2542, 193, 25139, 48825, 48828, + 48833, 48311, 48837, 48847, 48854, 48863, 48873, 48883, 48891, 48895, + 48898, 48905, 48911, 48922, 48934, 48945, 48952, 1319, 16477, 48962, + 2240, 48966, 1100, 11441, 25600, 48974, 48987, 48991, 48996, 49001, 5072, + 49007, 49015, 7154, 49020, 49026, 1711, 6925, 605, 49035, 49044, 49054, + 19000, 49063, 49069, 11075, 49075, 49079, 11082, 7215, 49085, 46224, + 49092, 5691, 147, 9175, 49098, 49110, 49114, 49120, 19549, 49124, 7203, + 2315, 4, 49129, 49139, 49145, 49156, 49163, 49169, 49175, 49183, 49190, + 49200, 49210, 1331, 49219, 49225, 2331, 2337, 5069, 1960, 49229, 49238, + 49249, 49260, 49268, 49274, 49279, 49287, 49291, 49295, 19813, 49307, + 49317, 49323, 49329, 49339, 49342, 49353, 49363, 49372, 49379, 1102, + 2233, 49389, 49394, 49402, 49410, 49421, 49435, 9127, 342, 49445, 49454, + 49462, 49468, 49475, 49481, 49488, 49498, 49506, 3060, 197, 49514, 49525, + 49529, 49541, 19734, 119, 49547, 49552, 49556, 49563, 49569, 49577, + 49584, 5321, 49591, 49600, 3115, 49608, 11121, 49612, 2353, 378, 49617, + 49630, 49635, 31876, 540, 49639, 3121, 49647, 49653, 959, 49663, 49672, + 49677, 9704, 49681, 49684, 3070, 16608, 49692, 49699, 16646, 49703, + 49710, 49716, 49721, 9718, 49726, 49738, 49744, 49752, 2365, 1743, 49760, + 49762, 49767, 49772, 49776, 49780, 49785, 49789, 49794, 49799, 49805, + 49810, 49814, 49818, 49821, 49823, 49827, 49830, 49835, 49839, 49843, + 49847, 49851, 49860, 22216, 49863, 22221, 22226, 49870, 49879, 22232, + 49884, 22237, 49893, 49898, 7327, 49902, 49907, 49912, 49916, 49920, + 49924, 49928, 49931, 49935, 5013, 49941, 49946, 49950, 2981, 49953, + 49955, 49959, 49962, 49967, 49971, 49977, 49990, 49996, 50000, 50008, + 50015, 50023, 50032, 50040, 22242, 50047, 50057, 50066, 50079, 50084, + 50089, 50095, 50102, 50113, 50125, 50132, 50141, 50150, 50159, 50166, + 50172, 50179, 50187, 50194, 50202, 50211, 50219, 50226, 50234, 50243, + 50251, 50260, 50270, 50279, 50287, 50294, 50302, 50311, 50319, 50328, + 50338, 50347, 50355, 50364, 50374, 50383, 50393, 50404, 50414, 50423, + 50431, 50438, 50446, 50455, 50463, 50472, 50482, 50491, 50499, 50508, + 50518, 50527, 50537, 50548, 50558, 50567, 50575, 50584, 50594, 50603, + 50613, 50624, 50634, 50643, 50653, 50664, 50674, 50685, 50697, 50708, + 50718, 50727, 50735, 50742, 50750, 50759, 50767, 50776, 50786, 50795, + 50803, 50812, 50822, 50831, 50841, 50852, 50862, 50871, 50879, 50888, + 50898, 50907, 50917, 50928, 50938, 50947, 50957, 50968, 50978, 50989, + 51001, 51012, 51022, 51031, 51039, 51048, 51058, 51067, 51077, 51088, + 51098, 51107, 51117, 51128, 51138, 51149, 51161, 51172, 51182, 51191, + 51201, 51212, 51222, 51233, 51245, 51256, 51266, 51277, 51289, 51300, + 51312, 51325, 51337, 51348, 51358, 51367, 51375, 51382, 51390, 51399, + 51407, 51416, 51426, 51435, 51443, 51452, 51462, 51471, 51481, 51492, + 51502, 51511, 51519, 51528, 51538, 51547, 51557, 51568, 51578, 51587, + 51597, 51608, 51618, 51629, 51641, 51652, 51662, 51671, 51679, 51688, + 51698, 51707, 51717, 51728, 51738, 51747, 51757, 51768, 51778, 51789, + 51801, 51812, 51822, 51831, 51841, 51852, 51862, 51873, 51885, 51896, + 51906, 51917, 51929, 51940, 51952, 51965, 51977, 51988, 51998, 52007, + 52015, 52024, 52034, 52043, 52053, 52064, 52074, 52083, 52093, 52104, + 52114, 52125, 52137, 52148, 52158, 52167, 52177, 52188, 52198, 52209, + 52221, 52232, 52242, 52253, 52265, 52276, 52288, 52301, 52313, 52324, + 52334, 52343, 52353, 52364, 52374, 52385, 52397, 52408, 52418, 52429, + 52441, 52452, 52464, 52477, 52489, 52500, 52510, 52521, 52533, 52544, + 52556, 52569, 52581, 52592, 52604, 52617, 52629, 52642, 52656, 52669, + 52681, 52692, 52702, 52711, 52719, 52726, 52731, 4871, 52738, 22252, + 52743, 52748, 22257, 52754, 15012, 52759, 52763, 52769, 52775, 52782, + 52787, 52791, 52795, 52804, 52810, 52822, 52833, 52837, 2592, 4846, + 52842, 52845, 52847, 52851, 52855, 52859, 28446, 52864, 52868, 52871, + 52876, 52880, 52887, 52893, 52897, 22267, 52901, 52908, 52917, 52925, + 52936, 52944, 52952, 52959, 52966, 52972, 52983, 22272, 52988, 52999, + 53011, 53022, 53030, 2206, 53035, 53048, 53052, 53060, 11601, 53071, + 53077, 53084, 53092, 53098, 22277, 53103, 6118, 44186, 53110, 53113, + 53121, 53134, 53147, 53160, 53173, 53180, 53191, 53200, 28451, 28456, + 53205, 53213, 53220, 53229, 53237, 53243, 53252, 53260, 53268, 53272, + 53281, 53290, 53300, 53313, 53326, 53336, 22282, 53342, 53349, 53355, + 22288, 53360, 53363, 53367, 53375, 53384, 28189, 53392, 53400, 53407, + 53415, 53425, 53434, 53443, 53452, 53460, 53471, 5724, 15434, 53480, + 53485, 53489, 53493, 53498, 53504, 53509, 53514, 53520, 53525, 53530, + 15399, 53535, 53542, 53550, 53555, 53562, 53566, 53570, 53578, 53586, + 22297, 53592, 53598, 53610, 53616, 53621, 53632, 53642, 53652, 53664, + 53670, 53680, 22302, 53689, 53698, 53704, 53716, 53727, 53734, 53739, + 53747, 53753, 53758, 53763, 53770, 53782, 53792, 53801, 53808, 23230, + 16814, 53814, 53819, 53823, 53827, 53832, 53838, 53849, 53862, 53867, + 22307, 53872, 53884, 53893, 53906, 53913, 53922, 53930, 53935, 53941, + 1147, 53946, 53951, 53956, 53961, 53967, 53972, 53977, 53983, 53989, + 53994, 53998, 54003, 54008, 54013, 44549, 54018, 54023, 54028, 54033, + 54039, 54045, 54050, 54054, 54059, 54064, 54069, 54074, 54079, 54083, + 54089, 54094, 54103, 54108, 54113, 54118, 54123, 54127, 54134, 54140, + 11311, 32176, 54145, 54095, 54147, 22316, 54150, 54159, 54165, 3561, + 22321, 54169, 54175, 54181, 54186, 54190, 54197, 54202, 54212, 54221, + 54225, 54231, 54237, 54243, 54247, 54255, 54262, 54270, 54278, 22326, + 54285, 54288, 54295, 54300, 54304, 54310, 54315, 54319, 54328, 54336, + 54342, 54347, 22837, 54354, 54360, 54365, 54371, 54378, 22047, 19317, + 54384, 54389, 54395, 54407, 54128, 54135, 54417, 54422, 54429, 54436, + 54442, 54453, 54458, 5523, 54466, 54469, 54475, 54479, 54483, 54486, + 54492, 46981, 3581, 761, 8644, 115, 54499, 54503, 54507, 54512, 54520, + 54524, 54532, 54536, 54549, 54553, 54556, 54561, 54565, 54570, 54574, + 54582, 54586, 15017, 54591, 54595, 54599, 54602, 54610, 54615, 54622, + 54628, 54634, 54639, 54647, 48979, 54654, 54659, 54664, 54668, 54672, + 54677, 54682, 54686, 54689, 54695, 54699, 54709, 54718, 54721, 54734, + 54742, 54750, 54760, 54773, 54780, 54791, 54797, 54802, 54807, 54813, + 54822, 53874, 54830, 54836, 54844, 54848, 54852, 54858, 54866, 54878, + 54890, 54897, 54901, 54912, 54920, 54927, 54939, 54947, 54955, 54962, + 54968, 54978, 54987, 54992, 55002, 55006, 55010, 55017, 55029, 55041, + 55050, 53038, 55057, 55068, 55082, 55090, 55100, 55107, 55115, 55124, + 55132, 55142, 55151, 55162, 55174, 55183, 55193, 55200, 55209, 55224, + 55233, 55246, 55261, 55265, 55277, 55288, 55299, 55310, 55320, 55331, + 55339, 55345, 55355, 55361, 55366, 55372, 55378, 55383, 55390, 5995, + 11621, 55396, 55401, 55408, 55414, 55419, 55423, 55426, 55429, 55431, + 55438, 55449, 55454, 55458, 55464, 55472, 49355, 49365, 55478, 55488, + 55495, 55501, 55506, 55515, 55522, 55530, 55539, 55545, 55551, 55558, + 55565, 55570, 55574, 55579, 55584, 55589, 55593, 54544, 55602, 55606, + 55617, 55627, 11630, 55638, 55646, 11642, 55653, 19227, 55657, 55661, + 55666, 9500, 55678, 55683, 55688, 55693, 55697, 55700, 55705, 55710, + 55716, 55721, 3373, 15068, 55726, 55731, 55737, 55744, 55749, 55754, + 55760, 55766, 55772, 55777, 55783, 55787, 55801, 55809, 55817, 55823, + 55828, 55835, 55840, 55845, 55853, 55858, 55864, 55869, 55874, 55878, + 55881, 55899, 55918, 55931, 55945, 55961, 55968, 55975, 55981, 55988, + 55993, 55999, 56005, 56010, 56026, 10350, 56040, 56047, 56051, 56054, + 56059, 56064, 56071, 56076, 56081, 56086, 7399, 56090, 56095, 56101, + 7410, 56106, 56109, 56114, 56124, 56133, 56138, 56146, 56153, 56164, + 56174, 56179, 56184, 56191, 56197, 56202, 56209, 56218, 56226, 56232, + 56238, 56242, 11173, 2566, 56247, 56251, 56257, 56264, 56268, 56289, + 56311, 56327, 56344, 56363, 56372, 56382, 56389, 56396, 19154, 56402, + 56406, 56414, 56420, 56428, 56432, 56440, 56447, 56451, 56457, 2896, + 28651, 56463, 56467, 56471, 56475, 56480, 56485, 56490, 56496, 56501, + 56507, 56512, 56517, 56521, 56526, 28666, 56530, 56535, 56543, 56547, + 56552, 56559, 56568, 56574, 56581, 56585, 56594, 56599, 56607, 56616, + 56622, 56627, 56632, 56638, 56644, 56649, 56653, 56661, 56671, 56676, + 26557, 56684, 56696, 56700, 56712, 56719, 56725, 56732, 56744, 56751, + 56757, 15112, 56761, 56767, 56773, 56778, 56783, 4382, 56788, 56796, + 56805, 56809, 56522, 20980, 56814, 56816, 56828, 56833, 5036, 49, 56838, + 56843, 22331, 22336, 22341, 22347, 22352, 56847, 22357, 56869, 56871, + 56875, 56879, 56884, 56888, 22361, 56892, 22366, 56900, 56903, 22371, + 15506, 56912, 56916, 1429, 56921, 22382, 56924, 56929, 18123, 18133, + 56934, 56938, 56943, 56949, 56954, 56963, 56968, 56975, 56981, 56986, + 56991, 56996, 57004, 22387, 1010, 57011, 57017, 57022, 57027, 57032, + 57038, 57043, 57050, 57056, 57061, 57069, 57075, 11652, 57082, 24453, + 57095, 57100, 57106, 57119, 57123, 57132, 57139, 57145, 57153, 57160, + 57166, 22391, 57169, 57176, 57182, 57186, 57189, 57197, 57211, 57218, + 22396, 57224, 22401, 57231, 23655, 57241, 57246, 57250, 57255, 57260, + 57265, 22406, 47446, 57269, 57274, 57280, 57286, 57293, 57299, 57304, + 57309, 57318, 57330, 57345, 22626, 57351, 10862, 22410, 57355, 57362, + 22415, 57368, 57377, 57384, 57393, 57399, 57404, 57410, 22420, 57415, + 57424, 57433, 57440, 57446, 57452, 57460, 57464, 22425, 57467, 22431, + 22437, 57472, 57480, 57490, 22442, 57494, 57496, 57500, 57505, 57509, + 57513, 57519, 57524, 57528, 2571, 57532, 57539, 57543, 57552, 57560, + 57567, 57572, 57577, 57581, 57585, 57588, 57594, 57602, 57608, 57612, + 57617, 57624, 57630, 47477, 57635, 57638, 57643, 57647, 57652, 57657, + 57661, 57669, 18142, 18151, 57675, 57681, 57686, 57690, 57693, 57703, + 57708, 57714, 57720, 57728, 57733, 23671, 57737, 57745, 57750, 57755, + 44233, 23677, 57761, 57766, 57770, 57775, 57780, 57785, 57789, 57794, + 57799, 57805, 57810, 57815, 57821, 57827, 57832, 57836, 57841, 57846, + 57851, 57855, 57860, 57865, 57870, 57876, 57882, 57888, 57893, 57897, + 57902, 57907, 57911, 57916, 57921, 57926, 57930, 22446, 57938, 57946, + 15838, 57957, 57963, 57970, 57975, 57979, 57984, 57992, 58000, 58007, + 49104, 58013, 58021, 58028, 58039, 58045, 22456, 58048, 58055, 26671, + 58059, 58064, 58069, 5453, 58073, 58081, 58088, 58095, 58101, 58115, + 58121, 58125, 58128, 58136, 58143, 58148, 58155, 58160, 58165, 58168, + 58175, 58179, 58189, 58199, 58208, 58219, 58224, 58228, 58236, 22461, + 27082, 58240, 58245, 58250, 58255, 58260, 58265, 58270, 58274, 58279, + 58284, 58289, 58294, 58299, 58304, 58308, 58313, 58318, 58322, 58326, + 58330, 58334, 58339, 58344, 58348, 58353, 58357, 58361, 58366, 58371, + 58376, 58381, 58385, 58390, 58395, 58399, 58404, 58409, 58414, 58419, + 58424, 58429, 58434, 58439, 58444, 58449, 58454, 58459, 58464, 58469, + 58474, 58479, 58484, 58489, 58494, 58499, 58503, 58508, 58513, 58518, + 58523, 58528, 58533, 58538, 58543, 58548, 58553, 58558, 58562, 58567, + 58571, 58576, 58581, 58586, 58591, 58596, 58601, 58606, 58611, 58616, + 58620, 58624, 58629, 58634, 58638, 58643, 58648, 58652, 58657, 58662, + 58667, 58672, 58676, 58681, 58686, 58690, 58695, 58699, 58703, 58707, + 58711, 58716, 58720, 58724, 58728, 58732, 58736, 58740, 58744, 58748, + 58752, 58757, 58762, 58767, 58772, 58777, 58782, 58787, 58792, 58797, + 58802, 58806, 58810, 58814, 58818, 58822, 58826, 58831, 58835, 58840, + 58844, 58849, 58854, 58858, 58862, 58867, 58871, 58875, 58879, 58883, + 58887, 58891, 58895, 58899, 58903, 58907, 58911, 58915, 58919, 58923, + 58928, 58933, 58937, 58941, 58945, 58949, 58953, 58957, 58962, 58966, + 58970, 58974, 58978, 58982, 58986, 58991, 58995, 59000, 59004, 59008, + 59012, 59016, 59020, 59024, 59028, 59032, 59036, 59040, 59044, 59049, + 59053, 59057, 59061, 59065, 59069, 59073, 59077, 59081, 59085, 59089, + 59093, 59098, 59102, 59106, 59111, 59116, 59120, 59124, 59128, 59132, + 59136, 59140, 59144, 59148, 59152, 59156, 59160, 59164, 59168, 59172, + 59176, 59180, 1511, 59184, 1749, 59188, 59192, 2383, 59196, 1398, 59201, + 1364, 59205, 59209, 59216, 59230, 2399, 4457, 59239, 59247, 59254, 59261, + 59274, 59287, 59298, 59303, 59310, 59322, 3172, 7467, 59326, 59331, + 59340, 59350, 59355, 59359, 59364, 1369, 9554, 59374, 59380, 59394, + 59406, 59415, 59424, 59433, 59441, 59452, 59460, 3211, 59470, 59479, + 59486, 24085, 59491, 2427, 8373, 59495, 59502, 5409, 59511, 2432, 22067, + 59517, 59524, 59530, 59537, 59543, 59550, 59560, 59569, 59580, 59587, + 59593, 59603, 59611, 59617, 59632, 59638, 59643, 59650, 59653, 59659, + 59666, 59672, 59681, 59689, 59695, 59704, 28191, 59718, 59723, 9582, + 59729, 59738, 59746, 59753, 59757, 59761, 59764, 59771, 59779, 59787, + 9511, 59796, 59801, 59805, 59817, 59826, 59836, 2448, 59845, 59851, + 59864, 59876, 59886, 59895, 59907, 59915, 59924, 59935, 59946, 59956, + 59966, 59975, 59983, 7136, 59990, 59994, 59999, 60004, 60010, 1374, 7515, + 60017, 60028, 60037, 60045, 60054, 60070, 60081, 60097, 60107, 60128, + 60141, 60146, 60152, 18788, 60158, 60161, 60168, 4983, 60178, 60183, + 60188, 60196, 6043, 6052, 60204, 2456, 2461, 6742, 60215, 60222, 60229, + 1953, 101, 60242, 60247, 60257, 60263, 60267, 60272, 60276, 2478, 60288, + 60296, 60307, 60318, 60327, 60332, 60338, 60343, 60353, 60363, 60368, + 60374, 60379, 60388, 15321, 60392, 3273, 12, 60397, 60404, 710, 60410, + 60415, 46381, 60420, 60425, 60431, 60439, 60444, 60451, 60457, 25559, + 60463, 2482, 32, 60473, 60486, 60494, 60499, 60505, 2504, 21432, 60510, + 60518, 60525, 44475, 47127, 60534, 1694, 1798, 60539, 60544, 60551, 1802, + 210, 60558, 60564, 60569, 60576, 1806, 60581, 60586, 3548, 60598, 1813, + 60604, 60609, 60616, 60631, 60638, 60646, 60658, 60663, 60674, 60683, + 2122, 60694, 60696, 2591, 5729, 60704, 60709, 60713, 60722, 60728, 2561, + 11328, 60732, 60745, 60763, 60768, 60776, 60784, 60794, 60806, 60819, + 60826, 60842, 60849, 60855, 877, 60862, 60869, 60879, 60888, 60900, + 29055, 60908, 2575, 1186, 60911, 60919, 60923, 2579, 60927, 60931, 60935, + 2585, 60939, 1379, 10460, 7696, 59775, 2606, 60949, 60952, 60958, 60964, + 60971, 60976, 60981, 1992, }; /* code->name phrasebook */ #define phrasebook_shift 7 -#define phrasebook_short 216 +#define phrasebook_short 222 static unsigned char phrasebook[] = { - 0, 223, 254, 246, 95, 78, 228, 69, 78, 54, 55, 248, 155, 55, 229, 169, - 55, 254, 134, 254, 79, 42, 229, 229, 45, 229, 229, 253, 251, 88, 55, 250, - 168, 242, 120, 245, 90, 223, 136, 224, 17, 20, 217, 84, 20, 107, 20, 103, - 20, 160, 20, 154, 20, 174, 20, 182, 20, 191, 20, 185, 20, 190, 250, 175, - 225, 67, 235, 87, 55, 246, 154, 55, 244, 30, 55, 228, 82, 78, 250, 167, - 253, 244, 7, 6, 1, 60, 7, 6, 1, 253, 204, 7, 6, 1, 251, 202, 7, 6, 1, - 250, 46, 7, 6, 1, 73, 7, 6, 1, 246, 74, 7, 6, 1, 245, 67, 7, 6, 1, 243, - 225, 7, 6, 1, 72, 7, 6, 1, 237, 126, 7, 6, 1, 237, 17, 7, 6, 1, 153, 7, - 6, 1, 189, 7, 6, 1, 207, 7, 6, 1, 74, 7, 6, 1, 230, 59, 7, 6, 1, 228, - 163, 7, 6, 1, 152, 7, 6, 1, 198, 7, 6, 1, 222, 201, 7, 6, 1, 68, 7, 6, 1, - 216, 216, 7, 6, 1, 219, 40, 7, 6, 1, 218, 151, 7, 6, 1, 218, 90, 7, 6, 1, - 217, 157, 42, 40, 115, 227, 160, 224, 17, 45, 40, 115, 250, 217, 255, 0, - 109, 235, 43, 244, 37, 255, 0, 7, 3, 1, 60, 7, 3, 1, 253, 204, 7, 3, 1, - 251, 202, 7, 3, 1, 250, 46, 7, 3, 1, 73, 7, 3, 1, 246, 74, 7, 3, 1, 245, - 67, 7, 3, 1, 243, 225, 7, 3, 1, 72, 7, 3, 1, 237, 126, 7, 3, 1, 237, 17, - 7, 3, 1, 153, 7, 3, 1, 189, 7, 3, 1, 207, 7, 3, 1, 74, 7, 3, 1, 230, 59, - 7, 3, 1, 228, 163, 7, 3, 1, 152, 7, 3, 1, 198, 7, 3, 1, 222, 201, 7, 3, - 1, 68, 7, 3, 1, 216, 216, 7, 3, 1, 219, 40, 7, 3, 1, 218, 151, 7, 3, 1, - 218, 90, 7, 3, 1, 217, 157, 42, 250, 79, 115, 69, 235, 43, 45, 250, 79, - 115, 221, 179, 231, 203, 223, 254, 237, 170, 246, 95, 78, 251, 86, 55, - 229, 11, 55, 250, 78, 55, 218, 19, 55, 252, 1, 135, 226, 87, 55, 249, 13, - 250, 126, 55, 245, 215, 230, 103, 237, 211, 235, 112, 51, 254, 120, 228, - 69, 78, 212, 55, 224, 21, 242, 121, 227, 198, 55, 234, 115, 249, 77, 55, - 229, 42, 55, 223, 59, 103, 223, 59, 160, 254, 248, 255, 0, 233, 195, 55, - 229, 73, 55, 233, 193, 248, 145, 251, 92, 223, 59, 107, 234, 58, 230, - 103, 237, 211, 227, 106, 51, 254, 120, 228, 69, 78, 219, 55, 245, 108, - 131, 228, 89, 219, 55, 245, 108, 131, 243, 194, 219, 55, 245, 108, 148, - 228, 87, 237, 170, 228, 82, 78, 7, 6, 1, 112, 2, 244, 36, 7, 6, 1, 112, - 2, 168, 7, 6, 1, 112, 2, 250, 216, 7, 6, 1, 112, 2, 221, 179, 7, 6, 1, - 112, 2, 249, 13, 7, 6, 1, 112, 2, 227, 94, 50, 7, 6, 1, 254, 234, 7, 6, - 1, 251, 203, 2, 251, 92, 7, 6, 1, 178, 2, 244, 36, 7, 6, 1, 178, 2, 168, - 7, 6, 1, 178, 2, 250, 216, 7, 6, 1, 178, 2, 249, 13, 7, 6, 1, 242, 107, - 2, 244, 36, 7, 6, 1, 242, 107, 2, 168, 7, 6, 1, 242, 107, 2, 250, 216, 7, - 6, 1, 242, 107, 2, 249, 13, 7, 6, 1, 246, 118, 7, 6, 1, 233, 34, 2, 221, - 179, 7, 6, 1, 142, 2, 244, 36, 7, 6, 1, 142, 2, 168, 7, 6, 1, 142, 2, - 250, 216, 7, 6, 1, 142, 2, 221, 179, 7, 6, 1, 142, 2, 249, 13, 233, 84, - 55, 7, 6, 1, 142, 2, 92, 7, 6, 1, 105, 2, 244, 36, 7, 6, 1, 105, 2, 168, - 7, 6, 1, 105, 2, 250, 216, 7, 6, 1, 105, 2, 249, 13, 7, 6, 1, 218, 91, 2, - 168, 7, 6, 1, 221, 234, 7, 3, 1, 225, 1, 198, 7, 3, 1, 112, 2, 244, 36, - 7, 3, 1, 112, 2, 168, 7, 3, 1, 112, 2, 250, 216, 7, 3, 1, 112, 2, 221, - 179, 7, 3, 1, 112, 2, 249, 13, 7, 3, 1, 112, 2, 227, 94, 50, 7, 3, 1, - 254, 234, 7, 3, 1, 251, 203, 2, 251, 92, 7, 3, 1, 178, 2, 244, 36, 7, 3, - 1, 178, 2, 168, 7, 3, 1, 178, 2, 250, 216, 7, 3, 1, 178, 2, 249, 13, 7, - 3, 1, 242, 107, 2, 244, 36, 7, 3, 1, 242, 107, 2, 168, 7, 3, 1, 242, 107, - 2, 250, 216, 7, 3, 1, 242, 107, 2, 249, 13, 7, 3, 1, 246, 118, 7, 3, 1, - 233, 34, 2, 221, 179, 7, 3, 1, 142, 2, 244, 36, 7, 3, 1, 142, 2, 168, 7, - 3, 1, 142, 2, 250, 216, 7, 3, 1, 142, 2, 221, 179, 7, 3, 1, 142, 2, 249, - 13, 248, 188, 55, 7, 3, 1, 142, 2, 92, 7, 3, 1, 105, 2, 244, 36, 7, 3, 1, - 105, 2, 168, 7, 3, 1, 105, 2, 250, 216, 7, 3, 1, 105, 2, 249, 13, 7, 3, - 1, 218, 91, 2, 168, 7, 3, 1, 221, 234, 7, 3, 1, 218, 91, 2, 249, 13, 7, - 6, 1, 112, 2, 234, 115, 7, 3, 1, 112, 2, 234, 115, 7, 6, 1, 112, 2, 252, - 8, 7, 3, 1, 112, 2, 252, 8, 7, 6, 1, 112, 2, 230, 162, 7, 3, 1, 112, 2, - 230, 162, 7, 6, 1, 251, 203, 2, 168, 7, 3, 1, 251, 203, 2, 168, 7, 6, 1, - 251, 203, 2, 250, 216, 7, 3, 1, 251, 203, 2, 250, 216, 7, 6, 1, 251, 203, - 2, 61, 50, 7, 3, 1, 251, 203, 2, 61, 50, 7, 6, 1, 251, 203, 2, 251, 130, - 7, 3, 1, 251, 203, 2, 251, 130, 7, 6, 1, 250, 47, 2, 251, 130, 7, 3, 1, - 250, 47, 2, 251, 130, 7, 6, 1, 250, 47, 2, 92, 7, 3, 1, 250, 47, 2, 92, - 7, 6, 1, 178, 2, 234, 115, 7, 3, 1, 178, 2, 234, 115, 7, 6, 1, 178, 2, - 252, 8, 7, 3, 1, 178, 2, 252, 8, 7, 6, 1, 178, 2, 61, 50, 7, 3, 1, 178, - 2, 61, 50, 7, 6, 1, 178, 2, 230, 162, 7, 3, 1, 178, 2, 230, 162, 7, 6, 1, - 178, 2, 251, 130, 7, 3, 1, 178, 2, 251, 130, 7, 6, 1, 245, 68, 2, 250, - 216, 7, 3, 1, 245, 68, 2, 250, 216, 7, 6, 1, 245, 68, 2, 252, 8, 7, 3, 1, - 245, 68, 2, 252, 8, 7, 6, 1, 245, 68, 2, 61, 50, 7, 3, 1, 245, 68, 2, 61, - 50, 7, 6, 1, 245, 68, 2, 251, 92, 7, 3, 1, 245, 68, 2, 251, 92, 7, 6, 1, - 243, 226, 2, 250, 216, 7, 3, 1, 243, 226, 2, 250, 216, 7, 6, 1, 243, 226, - 2, 92, 7, 3, 1, 243, 226, 2, 92, 7, 6, 1, 242, 107, 2, 221, 179, 7, 3, 1, - 242, 107, 2, 221, 179, 7, 6, 1, 242, 107, 2, 234, 115, 7, 3, 1, 242, 107, - 2, 234, 115, 7, 6, 1, 242, 107, 2, 252, 8, 7, 3, 1, 242, 107, 2, 252, 8, - 7, 6, 1, 242, 107, 2, 230, 162, 7, 3, 1, 242, 107, 2, 230, 162, 7, 6, 1, - 242, 107, 2, 61, 50, 7, 3, 1, 248, 144, 72, 7, 6, 24, 237, 253, 7, 3, 24, - 237, 253, 7, 6, 1, 237, 127, 2, 250, 216, 7, 3, 1, 237, 127, 2, 250, 216, - 7, 6, 1, 237, 18, 2, 251, 92, 7, 3, 1, 237, 18, 2, 251, 92, 7, 3, 1, 236, - 17, 7, 6, 1, 235, 202, 2, 168, 7, 3, 1, 235, 202, 2, 168, 7, 6, 1, 235, - 202, 2, 251, 92, 7, 3, 1, 235, 202, 2, 251, 92, 7, 6, 1, 235, 202, 2, - 251, 130, 7, 3, 1, 235, 202, 2, 251, 130, 7, 6, 1, 235, 202, 2, 233, 193, - 248, 145, 7, 3, 1, 235, 202, 2, 233, 193, 248, 145, 7, 6, 1, 235, 202, 2, - 92, 7, 3, 1, 235, 202, 2, 92, 7, 6, 1, 233, 34, 2, 168, 7, 3, 1, 233, 34, - 2, 168, 7, 6, 1, 233, 34, 2, 251, 92, 7, 3, 1, 233, 34, 2, 251, 92, 7, 6, - 1, 233, 34, 2, 251, 130, 7, 3, 1, 233, 34, 2, 251, 130, 7, 3, 1, 233, 34, - 228, 246, 251, 213, 254, 79, 7, 6, 1, 246, 185, 7, 3, 1, 246, 185, 7, 6, - 1, 142, 2, 234, 115, 7, 3, 1, 142, 2, 234, 115, 7, 6, 1, 142, 2, 252, 8, - 7, 3, 1, 142, 2, 252, 8, 7, 6, 1, 142, 2, 51, 168, 7, 3, 1, 142, 2, 51, - 168, 7, 6, 24, 230, 167, 7, 3, 24, 230, 167, 7, 6, 1, 228, 39, 2, 168, 7, - 3, 1, 228, 39, 2, 168, 7, 6, 1, 228, 39, 2, 251, 92, 7, 3, 1, 228, 39, 2, - 251, 92, 7, 6, 1, 228, 39, 2, 251, 130, 7, 3, 1, 228, 39, 2, 251, 130, 7, - 6, 1, 226, 235, 2, 168, 7, 3, 1, 226, 235, 2, 168, 7, 6, 1, 226, 235, 2, - 250, 216, 7, 3, 1, 226, 235, 2, 250, 216, 7, 6, 1, 226, 235, 2, 251, 92, - 7, 3, 1, 226, 235, 2, 251, 92, 7, 6, 1, 226, 235, 2, 251, 130, 7, 3, 1, - 226, 235, 2, 251, 130, 7, 6, 1, 222, 202, 2, 251, 92, 7, 3, 1, 222, 202, - 2, 251, 92, 7, 6, 1, 222, 202, 2, 251, 130, 7, 3, 1, 222, 202, 2, 251, - 130, 7, 6, 1, 222, 202, 2, 92, 7, 3, 1, 222, 202, 2, 92, 7, 6, 1, 105, 2, - 221, 179, 7, 3, 1, 105, 2, 221, 179, 7, 6, 1, 105, 2, 234, 115, 7, 3, 1, - 105, 2, 234, 115, 7, 6, 1, 105, 2, 252, 8, 7, 3, 1, 105, 2, 252, 8, 7, 6, - 1, 105, 2, 227, 94, 50, 7, 3, 1, 105, 2, 227, 94, 50, 7, 6, 1, 105, 2, - 51, 168, 7, 3, 1, 105, 2, 51, 168, 7, 6, 1, 105, 2, 230, 162, 7, 3, 1, - 105, 2, 230, 162, 7, 6, 1, 219, 41, 2, 250, 216, 7, 3, 1, 219, 41, 2, - 250, 216, 7, 6, 1, 218, 91, 2, 250, 216, 7, 3, 1, 218, 91, 2, 250, 216, - 7, 6, 1, 218, 91, 2, 249, 13, 7, 6, 1, 217, 158, 2, 168, 7, 3, 1, 217, - 158, 2, 168, 7, 6, 1, 217, 158, 2, 61, 50, 7, 3, 1, 217, 158, 2, 61, 50, - 7, 6, 1, 217, 158, 2, 251, 130, 7, 3, 1, 217, 158, 2, 251, 130, 7, 3, 1, - 171, 198, 7, 3, 1, 49, 2, 92, 7, 6, 1, 49, 2, 96, 7, 6, 1, 49, 2, 221, - 117, 7, 3, 1, 49, 2, 221, 117, 7, 6, 1, 145, 182, 7, 3, 1, 145, 182, 7, - 6, 1, 230, 119, 74, 7, 6, 1, 251, 203, 2, 96, 7, 3, 1, 251, 203, 2, 96, - 7, 6, 1, 254, 212, 250, 46, 7, 6, 1, 250, 47, 2, 96, 7, 6, 1, 250, 47, 2, - 221, 117, 7, 3, 1, 250, 47, 2, 221, 117, 7, 3, 1, 215, 249, 62, 7, 6, 1, - 210, 73, 7, 6, 1, 226, 104, 7, 6, 1, 230, 119, 73, 7, 6, 1, 246, 75, 2, - 96, 7, 3, 1, 246, 75, 2, 96, 7, 6, 1, 245, 68, 2, 96, 7, 6, 1, 244, 231, - 7, 3, 1, 242, 154, 7, 6, 1, 237, 162, 7, 6, 1, 242, 107, 2, 92, 7, 6, 1, - 237, 18, 2, 96, 7, 3, 1, 237, 18, 2, 96, 7, 3, 1, 235, 202, 2, 135, 7, 3, - 1, 235, 158, 2, 92, 7, 6, 1, 215, 189, 7, 6, 1, 233, 34, 2, 42, 96, 7, 3, - 1, 233, 34, 2, 171, 45, 235, 106, 7, 6, 1, 142, 2, 233, 193, 221, 179, 7, - 6, 1, 142, 2, 242, 189, 7, 3, 1, 142, 2, 242, 189, 7, 6, 1, 230, 158, 7, - 3, 1, 230, 158, 7, 6, 1, 230, 60, 2, 96, 7, 3, 1, 230, 60, 2, 96, 7, 1, - 217, 202, 7, 6, 1, 145, 103, 7, 3, 1, 145, 103, 7, 6, 1, 246, 133, 7, 1, - 210, 246, 134, 234, 247, 7, 3, 1, 222, 202, 2, 230, 29, 96, 7, 6, 1, 222, - 202, 2, 96, 7, 3, 1, 222, 202, 2, 96, 7, 6, 1, 222, 202, 2, 227, 164, 96, - 7, 6, 1, 105, 2, 242, 189, 7, 3, 1, 105, 2, 242, 189, 7, 6, 1, 220, 57, - 7, 6, 1, 220, 11, 2, 96, 7, 6, 1, 218, 91, 2, 96, 7, 3, 1, 218, 91, 2, - 96, 7, 6, 1, 217, 158, 2, 92, 7, 3, 1, 217, 158, 2, 92, 7, 6, 1, 246, 76, - 7, 6, 1, 246, 77, 227, 159, 7, 3, 1, 246, 77, 227, 159, 7, 3, 1, 246, 77, - 2, 222, 135, 7, 1, 124, 2, 92, 7, 6, 1, 145, 174, 7, 3, 1, 145, 174, 7, - 1, 237, 170, 244, 73, 223, 137, 2, 92, 7, 1, 218, 154, 7, 1, 249, 55, - 250, 204, 7, 1, 235, 139, 250, 204, 7, 1, 254, 141, 250, 204, 7, 1, 227, - 164, 250, 204, 7, 6, 1, 247, 76, 2, 251, 130, 7, 6, 1, 250, 47, 2, 3, 1, - 217, 158, 2, 251, 130, 7, 3, 1, 247, 76, 2, 251, 130, 7, 6, 1, 235, 21, - 7, 6, 1, 235, 202, 2, 3, 1, 237, 126, 7, 3, 1, 235, 21, 7, 6, 1, 232, 19, - 7, 6, 1, 233, 34, 2, 3, 1, 237, 126, 7, 3, 1, 232, 19, 7, 6, 1, 112, 2, - 251, 130, 7, 3, 1, 112, 2, 251, 130, 7, 6, 1, 242, 107, 2, 251, 130, 7, - 3, 1, 242, 107, 2, 251, 130, 7, 6, 1, 142, 2, 251, 130, 7, 3, 1, 142, 2, - 251, 130, 7, 6, 1, 105, 2, 251, 130, 7, 3, 1, 105, 2, 251, 130, 7, 6, 1, - 105, 2, 249, 14, 25, 234, 115, 7, 3, 1, 105, 2, 249, 14, 25, 234, 115, 7, - 6, 1, 105, 2, 249, 14, 25, 168, 7, 3, 1, 105, 2, 249, 14, 25, 168, 7, 6, - 1, 105, 2, 249, 14, 25, 251, 130, 7, 3, 1, 105, 2, 249, 14, 25, 251, 130, - 7, 6, 1, 105, 2, 249, 14, 25, 244, 36, 7, 3, 1, 105, 2, 249, 14, 25, 244, - 36, 7, 3, 1, 215, 73, 7, 6, 1, 112, 2, 249, 14, 25, 234, 115, 7, 3, 1, - 112, 2, 249, 14, 25, 234, 115, 7, 6, 1, 112, 2, 61, 71, 25, 234, 115, 7, - 3, 1, 112, 2, 61, 71, 25, 234, 115, 7, 6, 1, 254, 235, 2, 234, 115, 7, 3, - 1, 254, 235, 2, 234, 115, 7, 6, 1, 245, 68, 2, 92, 7, 3, 1, 245, 68, 2, - 92, 7, 6, 1, 245, 68, 2, 251, 130, 7, 3, 1, 245, 68, 2, 251, 130, 7, 6, - 1, 237, 18, 2, 251, 130, 7, 3, 1, 237, 18, 2, 251, 130, 7, 6, 1, 142, 2, - 230, 162, 7, 3, 1, 142, 2, 230, 162, 7, 6, 1, 142, 2, 230, 163, 25, 234, - 115, 7, 3, 1, 142, 2, 230, 163, 25, 234, 115, 7, 6, 1, 246, 77, 2, 251, - 130, 7, 3, 1, 246, 77, 2, 251, 130, 7, 3, 1, 237, 127, 2, 251, 130, 7, 6, - 1, 247, 75, 7, 6, 1, 250, 47, 2, 3, 1, 217, 157, 7, 3, 1, 247, 75, 7, 6, - 1, 245, 68, 2, 168, 7, 3, 1, 245, 68, 2, 168, 7, 6, 1, 242, 152, 7, 6, 1, - 218, 154, 7, 6, 1, 233, 34, 2, 244, 36, 7, 3, 1, 233, 34, 2, 244, 36, 7, - 6, 1, 112, 2, 227, 94, 71, 25, 168, 7, 3, 1, 112, 2, 227, 94, 71, 25, - 168, 7, 6, 1, 254, 235, 2, 168, 7, 3, 1, 254, 235, 2, 168, 7, 6, 1, 142, - 2, 214, 25, 168, 7, 3, 1, 142, 2, 214, 25, 168, 7, 6, 1, 112, 2, 51, 244, - 36, 7, 3, 1, 112, 2, 51, 244, 36, 7, 6, 1, 112, 2, 237, 170, 252, 8, 7, - 3, 1, 112, 2, 237, 170, 252, 8, 7, 6, 1, 178, 2, 51, 244, 36, 7, 3, 1, - 178, 2, 51, 244, 36, 7, 6, 1, 178, 2, 237, 170, 252, 8, 7, 3, 1, 178, 2, - 237, 170, 252, 8, 7, 6, 1, 242, 107, 2, 51, 244, 36, 7, 3, 1, 242, 107, - 2, 51, 244, 36, 7, 6, 1, 242, 107, 2, 237, 170, 252, 8, 7, 3, 1, 242, - 107, 2, 237, 170, 252, 8, 7, 6, 1, 142, 2, 51, 244, 36, 7, 3, 1, 142, 2, - 51, 244, 36, 7, 6, 1, 142, 2, 237, 170, 252, 8, 7, 3, 1, 142, 2, 237, - 170, 252, 8, 7, 6, 1, 228, 39, 2, 51, 244, 36, 7, 3, 1, 228, 39, 2, 51, - 244, 36, 7, 6, 1, 228, 39, 2, 237, 170, 252, 8, 7, 3, 1, 228, 39, 2, 237, - 170, 252, 8, 7, 6, 1, 105, 2, 51, 244, 36, 7, 3, 1, 105, 2, 51, 244, 36, - 7, 6, 1, 105, 2, 237, 170, 252, 8, 7, 3, 1, 105, 2, 237, 170, 252, 8, 7, - 6, 1, 226, 235, 2, 250, 169, 56, 7, 3, 1, 226, 235, 2, 250, 169, 56, 7, - 6, 1, 222, 202, 2, 250, 169, 56, 7, 3, 1, 222, 202, 2, 250, 169, 56, 7, - 6, 1, 217, 218, 7, 3, 1, 217, 218, 7, 6, 1, 243, 226, 2, 251, 130, 7, 3, - 1, 243, 226, 2, 251, 130, 7, 6, 1, 233, 34, 2, 171, 45, 235, 106, 7, 3, - 1, 250, 47, 2, 250, 80, 7, 6, 1, 230, 86, 7, 3, 1, 230, 86, 7, 6, 1, 217, - 158, 2, 96, 7, 3, 1, 217, 158, 2, 96, 7, 6, 1, 112, 2, 61, 50, 7, 3, 1, - 112, 2, 61, 50, 7, 6, 1, 178, 2, 251, 92, 7, 3, 1, 178, 2, 251, 92, 7, 6, - 1, 142, 2, 249, 14, 25, 234, 115, 7, 3, 1, 142, 2, 249, 14, 25, 234, 115, - 7, 6, 1, 142, 2, 221, 180, 25, 234, 115, 7, 3, 1, 142, 2, 221, 180, 25, - 234, 115, 7, 6, 1, 142, 2, 61, 50, 7, 3, 1, 142, 2, 61, 50, 7, 6, 1, 142, - 2, 61, 71, 25, 234, 115, 7, 3, 1, 142, 2, 61, 71, 25, 234, 115, 7, 6, 1, - 218, 91, 2, 234, 115, 7, 3, 1, 218, 91, 2, 234, 115, 7, 3, 1, 235, 202, - 2, 250, 80, 7, 3, 1, 233, 34, 2, 250, 80, 7, 3, 1, 222, 202, 2, 250, 80, - 7, 3, 1, 248, 144, 237, 126, 7, 3, 1, 249, 135, 248, 233, 7, 3, 1, 228, - 99, 248, 233, 7, 6, 1, 112, 2, 92, 7, 6, 1, 251, 203, 2, 92, 7, 3, 1, - 251, 203, 2, 92, 7, 6, 1, 235, 202, 2, 135, 7, 6, 1, 222, 202, 2, 249, - 11, 92, 7, 3, 1, 226, 235, 2, 223, 33, 222, 135, 7, 3, 1, 217, 158, 2, - 223, 33, 222, 135, 7, 6, 1, 244, 73, 223, 136, 7, 3, 1, 244, 73, 223, - 136, 7, 6, 1, 49, 2, 92, 7, 6, 1, 105, 135, 7, 6, 1, 215, 216, 216, 7, 6, - 1, 178, 2, 92, 7, 3, 1, 178, 2, 92, 7, 6, 1, 237, 127, 2, 92, 7, 3, 1, - 237, 127, 2, 92, 7, 6, 1, 3, 228, 164, 2, 242, 247, 222, 135, 7, 3, 1, - 228, 164, 2, 242, 247, 222, 135, 7, 6, 1, 228, 39, 2, 92, 7, 3, 1, 228, - 39, 2, 92, 7, 6, 1, 218, 91, 2, 92, 7, 3, 1, 218, 91, 2, 92, 7, 3, 1, - 215, 60, 7, 3, 1, 254, 146, 7, 3, 1, 215, 254, 146, 7, 3, 1, 49, 2, 96, - 7, 3, 1, 230, 119, 74, 7, 3, 1, 251, 203, 2, 250, 80, 7, 3, 1, 250, 47, - 2, 222, 135, 7, 3, 1, 250, 47, 2, 96, 7, 3, 1, 210, 73, 7, 3, 1, 226, - 104, 7, 3, 1, 226, 105, 2, 96, 7, 3, 1, 230, 119, 73, 7, 3, 1, 210, 230, - 119, 73, 7, 3, 1, 210, 230, 119, 178, 2, 96, 7, 3, 1, 250, 197, 210, 230, - 119, 73, 7, 3, 1, 248, 144, 237, 127, 2, 92, 7, 3, 1, 245, 68, 2, 96, 7, - 3, 1, 102, 245, 67, 7, 1, 3, 6, 245, 67, 7, 3, 1, 244, 231, 7, 3, 1, 227, - 237, 242, 189, 7, 3, 1, 215, 243, 225, 7, 3, 1, 243, 226, 2, 96, 7, 3, 1, - 243, 137, 2, 96, 7, 3, 1, 242, 107, 2, 92, 7, 3, 1, 237, 162, 7, 1, 3, 6, - 72, 7, 3, 1, 235, 202, 2, 233, 193, 221, 179, 7, 3, 1, 235, 202, 2, 252, - 116, 7, 3, 1, 235, 202, 2, 227, 164, 96, 7, 3, 1, 235, 81, 7, 3, 1, 215, - 189, 7, 3, 1, 215, 234, 187, 2, 171, 235, 106, 7, 3, 1, 234, 187, 2, 96, - 7, 3, 1, 233, 34, 2, 42, 96, 7, 3, 1, 233, 34, 2, 227, 164, 96, 7, 1, 3, - 6, 207, 7, 3, 1, 252, 196, 74, 7, 1, 3, 6, 230, 167, 7, 3, 1, 250, 197, - 230, 143, 7, 3, 1, 229, 129, 7, 3, 1, 215, 152, 7, 3, 1, 215, 228, 39, 2, - 171, 235, 106, 7, 3, 1, 215, 228, 39, 2, 96, 7, 3, 1, 228, 39, 2, 171, - 235, 106, 7, 3, 1, 228, 39, 2, 222, 135, 7, 3, 1, 228, 39, 2, 245, 173, - 7, 3, 1, 210, 228, 39, 2, 245, 173, 7, 1, 3, 6, 152, 7, 1, 3, 6, 237, - 170, 152, 7, 3, 1, 226, 235, 2, 96, 7, 3, 1, 246, 133, 7, 3, 1, 248, 144, - 237, 127, 2, 214, 25, 96, 7, 3, 1, 223, 224, 210, 246, 133, 7, 3, 1, 246, - 134, 2, 250, 80, 7, 3, 1, 215, 222, 201, 7, 3, 1, 222, 202, 2, 227, 164, - 96, 7, 3, 1, 105, 135, 7, 3, 1, 220, 57, 7, 3, 1, 220, 11, 2, 96, 7, 3, - 1, 215, 216, 216, 7, 3, 1, 215, 219, 40, 7, 3, 1, 215, 218, 90, 7, 1, 3, - 6, 218, 90, 7, 3, 1, 217, 158, 2, 227, 164, 96, 7, 3, 1, 217, 158, 2, - 250, 80, 7, 3, 1, 246, 76, 7, 3, 1, 246, 77, 2, 250, 80, 7, 1, 244, 73, - 223, 136, 7, 1, 229, 133, 219, 70, 245, 100, 7, 1, 237, 170, 244, 73, - 223, 136, 7, 1, 223, 124, 251, 202, 7, 1, 252, 74, 250, 204, 7, 1, 3, 6, - 253, 204, 7, 3, 1, 250, 197, 230, 119, 73, 7, 1, 3, 6, 245, 68, 2, 96, 7, - 1, 3, 6, 243, 225, 7, 3, 1, 237, 127, 2, 250, 97, 7, 3, 1, 215, 237, 17, - 7, 1, 3, 6, 153, 7, 3, 1, 228, 164, 2, 96, 7, 1, 244, 73, 223, 137, 2, - 92, 7, 1, 210, 244, 73, 223, 137, 2, 92, 7, 3, 1, 247, 76, 248, 233, 7, - 3, 1, 249, 37, 248, 233, 7, 3, 1, 247, 76, 248, 234, 2, 250, 80, 7, 3, 1, - 221, 57, 248, 233, 7, 3, 1, 222, 55, 248, 233, 7, 3, 1, 222, 94, 248, - 234, 2, 250, 80, 7, 3, 1, 245, 213, 248, 233, 7, 3, 1, 234, 233, 248, - 233, 7, 3, 1, 234, 188, 248, 233, 7, 1, 252, 74, 229, 168, 7, 1, 252, 81, - 229, 168, 7, 3, 1, 215, 243, 226, 2, 245, 173, 7, 3, 1, 215, 243, 226, 2, - 245, 174, 25, 222, 135, 58, 1, 3, 243, 225, 58, 1, 3, 243, 226, 2, 96, - 58, 1, 3, 237, 126, 58, 1, 3, 152, 58, 1, 3, 215, 152, 58, 1, 3, 215, - 228, 39, 2, 96, 58, 1, 3, 6, 237, 170, 152, 58, 1, 3, 219, 40, 58, 1, 3, - 218, 90, 58, 1, 228, 235, 58, 1, 51, 228, 235, 58, 1, 215, 250, 168, 58, - 1, 254, 79, 58, 1, 210, 250, 168, 58, 1, 45, 144, 227, 93, 58, 1, 42, - 144, 227, 93, 58, 1, 244, 73, 223, 136, 58, 1, 210, 244, 73, 223, 136, - 58, 1, 42, 254, 20, 58, 1, 45, 254, 20, 58, 1, 108, 254, 20, 58, 1, 113, - 254, 20, 58, 1, 250, 217, 255, 0, 251, 130, 58, 1, 69, 235, 43, 58, 1, - 234, 115, 58, 1, 254, 248, 255, 0, 58, 1, 244, 37, 255, 0, 58, 1, 109, - 69, 235, 43, 58, 1, 109, 234, 115, 58, 1, 109, 244, 37, 255, 0, 58, 1, - 109, 254, 248, 255, 0, 58, 1, 221, 87, 250, 175, 58, 1, 144, 221, 87, - 250, 175, 58, 1, 251, 83, 45, 144, 227, 93, 58, 1, 251, 83, 42, 144, 227, - 93, 58, 1, 108, 222, 143, 58, 1, 113, 222, 143, 58, 1, 88, 55, 58, 1, - 233, 155, 55, 252, 8, 61, 50, 227, 94, 50, 230, 162, 3, 221, 179, 51, - 254, 248, 255, 0, 58, 1, 227, 148, 96, 58, 1, 250, 101, 255, 0, 58, 1, 3, - 244, 231, 58, 1, 3, 153, 58, 1, 3, 198, 58, 1, 3, 218, 151, 58, 1, 3, - 210, 244, 73, 223, 136, 58, 1, 246, 85, 145, 135, 58, 1, 116, 145, 135, - 58, 1, 233, 194, 145, 135, 58, 1, 109, 145, 135, 58, 1, 246, 84, 145, - 135, 58, 1, 217, 241, 249, 52, 145, 78, 58, 1, 218, 46, 249, 52, 145, 78, - 58, 1, 219, 68, 58, 1, 220, 84, 58, 1, 51, 254, 79, 58, 1, 109, 113, 254, - 20, 58, 1, 109, 108, 254, 20, 58, 1, 109, 42, 254, 20, 58, 1, 109, 45, - 254, 20, 58, 1, 109, 227, 93, 58, 1, 233, 193, 244, 37, 255, 0, 58, 1, - 233, 193, 51, 244, 37, 255, 0, 58, 1, 233, 193, 51, 254, 248, 255, 0, 58, - 1, 109, 221, 179, 58, 1, 227, 241, 250, 175, 58, 1, 252, 131, 116, 221, - 132, 58, 1, 246, 190, 116, 221, 132, 58, 1, 252, 131, 109, 221, 132, 58, - 1, 246, 190, 109, 221, 132, 58, 1, 224, 237, 58, 1, 230, 119, 224, 237, - 58, 1, 109, 42, 65, 36, 244, 37, 255, 0, 36, 254, 248, 255, 0, 36, 250, - 217, 255, 0, 36, 221, 179, 36, 234, 115, 36, 230, 73, 36, 252, 8, 36, 61, - 50, 36, 249, 13, 36, 242, 247, 50, 36, 227, 94, 50, 36, 51, 254, 248, - 255, 0, 36, 251, 130, 36, 69, 235, 44, 50, 36, 51, 69, 235, 44, 50, 36, - 51, 244, 37, 255, 0, 36, 251, 146, 36, 237, 170, 252, 8, 36, 215, 250, - 169, 50, 36, 250, 169, 50, 36, 210, 250, 169, 50, 36, 250, 169, 71, 227, - 109, 36, 244, 37, 255, 1, 56, 36, 254, 248, 255, 1, 56, 36, 42, 222, 144, - 56, 36, 45, 222, 144, 56, 36, 42, 254, 120, 50, 36, 242, 189, 36, 42, - 144, 227, 94, 56, 36, 108, 222, 144, 56, 36, 113, 222, 144, 56, 36, 88, - 5, 56, 36, 233, 155, 5, 56, 36, 230, 27, 242, 247, 56, 36, 227, 164, 242, - 247, 56, 36, 61, 56, 36, 249, 14, 56, 36, 227, 94, 56, 36, 250, 169, 56, - 36, 251, 92, 36, 230, 162, 36, 69, 235, 44, 56, 36, 252, 4, 56, 36, 237, - 170, 51, 254, 50, 56, 36, 251, 131, 56, 36, 250, 217, 255, 1, 56, 36, - 252, 9, 56, 36, 237, 170, 252, 9, 56, 36, 221, 180, 56, 36, 234, 116, 56, - 36, 109, 235, 43, 36, 51, 109, 235, 43, 36, 221, 180, 230, 74, 36, 224, - 192, 214, 230, 74, 36, 171, 214, 230, 74, 36, 224, 192, 224, 18, 230, 74, - 36, 171, 224, 18, 230, 74, 36, 45, 144, 227, 94, 56, 36, 237, 170, 252, - 4, 56, 36, 40, 56, 36, 226, 93, 56, 36, 218, 152, 50, 36, 69, 221, 179, - 36, 51, 230, 73, 36, 244, 37, 145, 78, 36, 254, 248, 145, 78, 36, 23, - 229, 163, 36, 23, 236, 33, 36, 23, 249, 8, 221, 123, 36, 23, 217, 207, - 36, 252, 4, 50, 36, 246, 154, 5, 56, 36, 51, 69, 235, 44, 56, 36, 42, - 254, 120, 56, 36, 212, 221, 180, 50, 36, 242, 251, 50, 36, 254, 151, 114, - 199, 50, 36, 42, 45, 76, 56, 36, 220, 53, 76, 56, 36, 244, 41, 237, 54, - 36, 45, 254, 21, 50, 36, 42, 144, 227, 94, 50, 36, 245, 210, 36, 218, - 152, 56, 36, 42, 254, 21, 56, 36, 45, 254, 21, 56, 36, 45, 254, 21, 25, - 108, 254, 21, 56, 36, 45, 144, 227, 94, 50, 36, 61, 71, 227, 109, 36, - 253, 252, 56, 36, 51, 227, 94, 56, 36, 217, 33, 50, 36, 51, 252, 9, 56, - 36, 51, 252, 8, 36, 51, 234, 115, 36, 51, 234, 116, 56, 36, 51, 221, 179, - 36, 51, 237, 170, 252, 8, 36, 51, 90, 76, 56, 36, 7, 3, 1, 60, 36, 7, 3, - 1, 73, 36, 7, 3, 1, 72, 36, 7, 3, 1, 74, 36, 7, 3, 1, 68, 36, 7, 3, 1, - 251, 202, 36, 7, 3, 1, 250, 46, 36, 7, 3, 1, 243, 225, 36, 7, 3, 1, 189, - 36, 7, 3, 1, 152, 36, 7, 3, 1, 222, 201, 36, 7, 3, 1, 216, 216, 36, 7, 3, - 1, 218, 151, 23, 6, 1, 243, 127, 23, 3, 1, 243, 127, 23, 6, 1, 254, 49, - 226, 142, 23, 3, 1, 254, 49, 226, 142, 23, 231, 107, 55, 23, 234, 237, - 231, 107, 55, 23, 6, 1, 230, 15, 248, 240, 23, 3, 1, 230, 15, 248, 240, - 23, 217, 207, 23, 3, 210, 234, 218, 224, 128, 100, 23, 3, 247, 143, 234, - 218, 224, 128, 100, 23, 3, 210, 247, 143, 234, 218, 224, 128, 100, 23, - 228, 82, 78, 23, 221, 123, 23, 249, 8, 221, 123, 23, 6, 1, 254, 147, 2, - 221, 123, 23, 254, 110, 222, 73, 23, 6, 1, 246, 157, 2, 221, 123, 23, 6, - 1, 246, 122, 2, 221, 123, 23, 6, 1, 237, 163, 2, 221, 123, 23, 6, 1, 230, - 142, 2, 221, 123, 23, 6, 1, 220, 58, 2, 221, 123, 23, 6, 1, 230, 144, 2, - 221, 123, 23, 3, 1, 237, 163, 2, 249, 8, 25, 221, 123, 23, 6, 1, 254, - 146, 23, 6, 1, 252, 102, 23, 6, 1, 244, 231, 23, 6, 1, 249, 62, 23, 6, 1, - 246, 156, 23, 6, 1, 217, 83, 23, 6, 1, 246, 121, 23, 6, 1, 222, 6, 23, 6, - 1, 237, 162, 23, 6, 1, 236, 221, 23, 6, 1, 235, 156, 23, 6, 1, 233, 99, - 23, 6, 1, 231, 144, 23, 6, 1, 218, 130, 23, 6, 1, 230, 141, 23, 6, 1, - 229, 108, 23, 6, 1, 227, 149, 23, 6, 1, 224, 127, 23, 6, 1, 222, 105, 23, - 6, 1, 220, 57, 23, 6, 1, 229, 129, 23, 6, 1, 251, 31, 23, 6, 1, 228, 212, - 23, 6, 1, 230, 143, 23, 6, 1, 237, 163, 2, 249, 7, 23, 6, 1, 220, 58, 2, - 249, 7, 23, 3, 1, 254, 147, 2, 221, 123, 23, 3, 1, 246, 157, 2, 221, 123, - 23, 3, 1, 246, 122, 2, 221, 123, 23, 3, 1, 237, 163, 2, 221, 123, 23, 3, - 1, 220, 58, 2, 249, 8, 25, 221, 123, 23, 3, 1, 254, 146, 23, 3, 1, 252, - 102, 23, 3, 1, 244, 231, 23, 3, 1, 249, 62, 23, 3, 1, 246, 156, 23, 3, 1, - 217, 83, 23, 3, 1, 246, 121, 23, 3, 1, 222, 6, 23, 3, 1, 237, 162, 23, 3, - 1, 236, 221, 23, 3, 1, 235, 156, 23, 3, 1, 233, 99, 23, 3, 1, 231, 144, - 23, 3, 1, 218, 130, 23, 3, 1, 230, 141, 23, 3, 1, 229, 108, 23, 3, 1, - 227, 149, 23, 3, 1, 39, 224, 127, 23, 3, 1, 224, 127, 23, 3, 1, 222, 105, - 23, 3, 1, 220, 57, 23, 3, 1, 229, 129, 23, 3, 1, 251, 31, 23, 3, 1, 228, - 212, 23, 3, 1, 230, 143, 23, 3, 1, 237, 163, 2, 249, 7, 23, 3, 1, 220, - 58, 2, 249, 7, 23, 3, 1, 230, 142, 2, 221, 123, 23, 3, 1, 220, 58, 2, - 221, 123, 23, 3, 1, 230, 144, 2, 221, 123, 23, 6, 236, 244, 100, 23, 252, - 103, 100, 23, 222, 7, 100, 23, 220, 58, 2, 242, 247, 100, 23, 220, 58, 2, - 254, 248, 25, 242, 247, 100, 23, 220, 58, 2, 249, 14, 25, 242, 247, 100, - 23, 229, 130, 100, 23, 229, 109, 100, 23, 236, 244, 100, 23, 1, 254, 49, - 236, 37, 23, 3, 1, 254, 49, 236, 37, 23, 1, 223, 144, 23, 3, 1, 223, 144, - 23, 1, 248, 240, 23, 3, 1, 248, 240, 23, 1, 236, 37, 23, 3, 1, 236, 37, - 23, 1, 226, 142, 23, 3, 1, 226, 142, 75, 6, 1, 224, 238, 75, 3, 1, 224, - 238, 75, 6, 1, 245, 219, 75, 3, 1, 245, 219, 75, 6, 1, 236, 135, 75, 3, - 1, 236, 135, 75, 6, 1, 242, 242, 75, 3, 1, 242, 242, 75, 6, 1, 244, 226, - 75, 3, 1, 244, 226, 75, 6, 1, 224, 211, 75, 3, 1, 224, 211, 75, 6, 1, - 249, 75, 75, 3, 1, 249, 75, 23, 236, 222, 100, 23, 227, 150, 100, 23, - 234, 218, 224, 128, 100, 23, 1, 217, 212, 23, 6, 222, 7, 100, 23, 234, - 218, 246, 157, 100, 23, 210, 234, 218, 246, 157, 100, 23, 6, 1, 224, 200, - 23, 3, 1, 224, 200, 23, 6, 234, 218, 224, 128, 100, 23, 6, 1, 226, 140, - 23, 3, 1, 226, 140, 23, 227, 150, 2, 214, 100, 23, 6, 210, 234, 218, 224, - 128, 100, 23, 6, 247, 143, 234, 218, 224, 128, 100, 23, 6, 210, 247, 143, - 234, 218, 224, 128, 100, 31, 6, 1, 238, 27, 2, 244, 36, 31, 6, 1, 237, - 166, 31, 6, 1, 248, 182, 31, 6, 1, 244, 78, 31, 6, 1, 220, 99, 238, 26, - 31, 6, 1, 247, 73, 31, 6, 1, 251, 211, 72, 31, 6, 1, 217, 250, 31, 6, 1, - 237, 114, 31, 6, 1, 235, 20, 31, 6, 1, 232, 15, 31, 6, 1, 221, 46, 31, 6, - 1, 236, 76, 31, 6, 1, 242, 107, 2, 244, 36, 31, 6, 1, 224, 192, 68, 31, - 6, 1, 247, 69, 31, 6, 1, 60, 31, 6, 1, 252, 144, 31, 6, 1, 219, 165, 31, - 6, 1, 244, 116, 31, 6, 1, 249, 92, 31, 6, 1, 238, 26, 31, 6, 1, 217, 72, - 31, 6, 1, 217, 92, 31, 6, 1, 72, 31, 6, 1, 224, 192, 72, 31, 6, 1, 175, - 31, 6, 1, 246, 217, 31, 6, 1, 246, 205, 31, 6, 1, 246, 197, 31, 6, 1, 74, - 31, 6, 1, 229, 198, 31, 6, 1, 246, 148, 31, 6, 1, 246, 138, 31, 6, 1, - 222, 87, 31, 6, 1, 68, 31, 6, 1, 246, 244, 31, 6, 1, 155, 31, 6, 1, 221, - 50, 31, 6, 1, 251, 46, 31, 6, 1, 225, 25, 31, 6, 1, 224, 248, 31, 6, 1, - 243, 181, 55, 31, 6, 1, 218, 7, 31, 6, 1, 224, 21, 55, 31, 6, 1, 73, 31, - 6, 1, 217, 200, 31, 6, 1, 184, 31, 3, 1, 60, 31, 3, 1, 252, 144, 31, 3, - 1, 219, 165, 31, 3, 1, 244, 116, 31, 3, 1, 249, 92, 31, 3, 1, 238, 26, - 31, 3, 1, 217, 72, 31, 3, 1, 217, 92, 31, 3, 1, 72, 31, 3, 1, 224, 192, - 72, 31, 3, 1, 175, 31, 3, 1, 246, 217, 31, 3, 1, 246, 205, 31, 3, 1, 246, - 197, 31, 3, 1, 74, 31, 3, 1, 229, 198, 31, 3, 1, 246, 148, 31, 3, 1, 246, - 138, 31, 3, 1, 222, 87, 31, 3, 1, 68, 31, 3, 1, 246, 244, 31, 3, 1, 155, - 31, 3, 1, 221, 50, 31, 3, 1, 251, 46, 31, 3, 1, 225, 25, 31, 3, 1, 224, - 248, 31, 3, 1, 243, 181, 55, 31, 3, 1, 218, 7, 31, 3, 1, 224, 21, 55, 31, - 3, 1, 73, 31, 3, 1, 217, 200, 31, 3, 1, 184, 31, 3, 1, 238, 27, 2, 244, - 36, 31, 3, 1, 237, 166, 31, 3, 1, 248, 182, 31, 3, 1, 244, 78, 31, 3, 1, - 220, 99, 238, 26, 31, 3, 1, 247, 73, 31, 3, 1, 251, 211, 72, 31, 3, 1, - 217, 250, 31, 3, 1, 237, 114, 31, 3, 1, 235, 20, 31, 3, 1, 232, 15, 31, - 3, 1, 221, 46, 31, 3, 1, 236, 76, 31, 3, 1, 242, 107, 2, 244, 36, 31, 3, - 1, 224, 192, 68, 31, 3, 1, 247, 69, 31, 6, 1, 230, 143, 31, 3, 1, 230, - 143, 31, 6, 1, 218, 36, 31, 3, 1, 218, 36, 31, 6, 1, 237, 160, 73, 31, 3, - 1, 237, 160, 73, 31, 6, 1, 235, 25, 217, 178, 31, 3, 1, 235, 25, 217, - 178, 31, 6, 1, 237, 160, 235, 25, 217, 178, 31, 3, 1, 237, 160, 235, 25, - 217, 178, 31, 6, 1, 252, 76, 217, 178, 31, 3, 1, 252, 76, 217, 178, 31, - 6, 1, 237, 160, 252, 76, 217, 178, 31, 3, 1, 237, 160, 252, 76, 217, 178, - 31, 6, 1, 236, 11, 31, 3, 1, 236, 11, 31, 6, 1, 228, 212, 31, 3, 1, 228, - 212, 31, 6, 1, 245, 171, 31, 3, 1, 245, 171, 31, 6, 1, 237, 128, 31, 3, - 1, 237, 128, 31, 6, 1, 237, 129, 2, 51, 244, 37, 255, 0, 31, 3, 1, 237, - 129, 2, 51, 244, 37, 255, 0, 31, 6, 1, 220, 102, 31, 3, 1, 220, 102, 31, - 6, 1, 227, 57, 230, 143, 31, 3, 1, 227, 57, 230, 143, 31, 6, 1, 230, 144, - 2, 221, 160, 31, 3, 1, 230, 144, 2, 221, 160, 31, 6, 1, 230, 92, 31, 3, - 1, 230, 92, 31, 6, 1, 236, 37, 31, 3, 1, 236, 37, 31, 221, 230, 55, 36, - 31, 221, 160, 36, 31, 230, 28, 36, 31, 193, 229, 39, 36, 31, 209, 229, - 39, 36, 31, 229, 25, 36, 31, 242, 162, 221, 230, 55, 36, 31, 233, 162, - 55, 31, 6, 1, 224, 192, 242, 107, 2, 222, 135, 31, 3, 1, 224, 192, 242, - 107, 2, 222, 135, 31, 6, 1, 225, 63, 55, 31, 3, 1, 225, 63, 55, 31, 6, 1, - 246, 149, 2, 221, 202, 31, 3, 1, 246, 149, 2, 221, 202, 31, 6, 1, 244, - 117, 2, 220, 56, 31, 3, 1, 244, 117, 2, 220, 56, 31, 6, 1, 244, 117, 2, - 92, 31, 3, 1, 244, 117, 2, 92, 31, 6, 1, 244, 117, 2, 233, 193, 96, 31, - 3, 1, 244, 117, 2, 233, 193, 96, 31, 6, 1, 217, 73, 2, 249, 48, 31, 3, 1, - 217, 73, 2, 249, 48, 31, 6, 1, 217, 93, 2, 249, 48, 31, 3, 1, 217, 93, 2, - 249, 48, 31, 6, 1, 206, 2, 249, 48, 31, 3, 1, 206, 2, 249, 48, 31, 6, 1, - 206, 2, 69, 92, 31, 3, 1, 206, 2, 69, 92, 31, 6, 1, 206, 2, 92, 31, 3, 1, - 206, 2, 92, 31, 6, 1, 252, 186, 175, 31, 3, 1, 252, 186, 175, 31, 6, 1, - 246, 198, 2, 249, 48, 31, 3, 1, 246, 198, 2, 249, 48, 31, 6, 24, 246, - 198, 244, 116, 31, 3, 24, 246, 198, 244, 116, 31, 6, 1, 229, 199, 2, 233, - 193, 96, 31, 3, 1, 229, 199, 2, 233, 193, 96, 31, 6, 1, 255, 6, 155, 31, - 3, 1, 255, 6, 155, 31, 6, 1, 246, 139, 2, 249, 48, 31, 3, 1, 246, 139, 2, - 249, 48, 31, 6, 1, 222, 88, 2, 249, 48, 31, 3, 1, 222, 88, 2, 249, 48, - 31, 6, 1, 223, 130, 68, 31, 3, 1, 223, 130, 68, 31, 6, 1, 223, 130, 105, - 2, 92, 31, 3, 1, 223, 130, 105, 2, 92, 31, 6, 1, 243, 214, 2, 249, 48, - 31, 3, 1, 243, 214, 2, 249, 48, 31, 6, 24, 222, 88, 221, 50, 31, 3, 24, - 222, 88, 221, 50, 31, 6, 1, 251, 47, 2, 249, 48, 31, 3, 1, 251, 47, 2, - 249, 48, 31, 6, 1, 251, 47, 2, 69, 92, 31, 3, 1, 251, 47, 2, 69, 92, 31, - 6, 1, 224, 222, 31, 3, 1, 224, 222, 31, 6, 1, 255, 6, 251, 46, 31, 3, 1, - 255, 6, 251, 46, 31, 6, 1, 255, 6, 251, 47, 2, 249, 48, 31, 3, 1, 255, 6, - 251, 47, 2, 249, 48, 31, 1, 230, 22, 31, 6, 1, 217, 73, 2, 252, 8, 31, 3, - 1, 217, 73, 2, 252, 8, 31, 6, 1, 206, 2, 96, 31, 3, 1, 206, 2, 96, 31, 6, - 1, 246, 218, 2, 222, 135, 31, 3, 1, 246, 218, 2, 222, 135, 31, 6, 1, 246, - 198, 2, 96, 31, 3, 1, 246, 198, 2, 96, 31, 6, 1, 246, 198, 2, 222, 135, - 31, 3, 1, 246, 198, 2, 222, 135, 31, 6, 1, 236, 144, 251, 46, 31, 3, 1, - 236, 144, 251, 46, 31, 6, 1, 246, 206, 2, 222, 135, 31, 3, 1, 246, 206, - 2, 222, 135, 31, 3, 1, 230, 22, 31, 6, 1, 112, 2, 252, 8, 31, 3, 1, 112, - 2, 252, 8, 31, 6, 1, 112, 2, 249, 13, 31, 3, 1, 112, 2, 249, 13, 31, 6, - 24, 112, 238, 26, 31, 3, 24, 112, 238, 26, 31, 6, 1, 238, 27, 2, 252, 8, - 31, 3, 1, 238, 27, 2, 252, 8, 31, 6, 1, 226, 104, 31, 3, 1, 226, 104, 31, - 6, 1, 226, 105, 2, 249, 13, 31, 3, 1, 226, 105, 2, 249, 13, 31, 6, 1, - 217, 73, 2, 249, 13, 31, 3, 1, 217, 73, 2, 249, 13, 31, 6, 1, 217, 93, 2, - 249, 13, 31, 3, 1, 217, 93, 2, 249, 13, 31, 6, 1, 255, 6, 247, 73, 31, 3, - 1, 255, 6, 247, 73, 31, 6, 1, 242, 107, 2, 234, 115, 31, 3, 1, 242, 107, - 2, 234, 115, 31, 6, 1, 242, 107, 2, 249, 13, 31, 3, 1, 242, 107, 2, 249, - 13, 31, 6, 1, 142, 2, 249, 13, 31, 3, 1, 142, 2, 249, 13, 31, 6, 1, 252, - 196, 74, 31, 3, 1, 252, 196, 74, 31, 6, 1, 252, 196, 142, 2, 249, 13, 31, - 3, 1, 252, 196, 142, 2, 249, 13, 31, 6, 1, 178, 2, 249, 13, 31, 3, 1, - 178, 2, 249, 13, 31, 6, 1, 105, 2, 234, 115, 31, 3, 1, 105, 2, 234, 115, - 31, 6, 1, 105, 2, 249, 13, 31, 3, 1, 105, 2, 249, 13, 31, 6, 1, 105, 2, - 51, 168, 31, 3, 1, 105, 2, 51, 168, 31, 6, 1, 251, 47, 2, 249, 13, 31, 3, - 1, 251, 47, 2, 249, 13, 31, 6, 1, 244, 117, 2, 249, 48, 31, 3, 1, 244, - 117, 2, 249, 48, 31, 6, 1, 218, 8, 2, 249, 13, 31, 3, 1, 218, 8, 2, 249, - 13, 31, 6, 1, 244, 117, 2, 214, 25, 96, 31, 3, 1, 244, 117, 2, 214, 25, - 96, 31, 6, 1, 243, 214, 2, 96, 31, 3, 1, 243, 214, 2, 96, 31, 6, 1, 243, - 214, 2, 92, 31, 3, 1, 243, 214, 2, 92, 31, 6, 1, 236, 45, 249, 92, 31, 3, - 1, 236, 45, 249, 92, 31, 6, 1, 236, 45, 248, 182, 31, 3, 1, 236, 45, 248, - 182, 31, 6, 1, 236, 45, 217, 25, 31, 3, 1, 236, 45, 217, 25, 31, 6, 1, - 236, 45, 247, 67, 31, 3, 1, 236, 45, 247, 67, 31, 6, 1, 236, 45, 235, 20, - 31, 3, 1, 236, 45, 235, 20, 31, 6, 1, 236, 45, 232, 15, 31, 3, 1, 236, - 45, 232, 15, 31, 6, 1, 236, 45, 224, 67, 31, 3, 1, 236, 45, 224, 67, 31, - 6, 1, 236, 45, 221, 156, 31, 3, 1, 236, 45, 221, 156, 31, 6, 1, 210, 217, - 92, 31, 3, 1, 210, 217, 92, 31, 6, 1, 246, 218, 2, 96, 31, 3, 1, 246, - 218, 2, 96, 31, 6, 1, 235, 79, 31, 3, 1, 235, 79, 31, 6, 1, 227, 151, 31, - 3, 1, 227, 151, 31, 6, 1, 218, 65, 31, 3, 1, 218, 65, 31, 6, 1, 228, 155, - 31, 3, 1, 228, 155, 31, 6, 1, 218, 227, 31, 3, 1, 218, 227, 31, 6, 1, - 254, 165, 175, 31, 3, 1, 254, 165, 175, 31, 6, 1, 246, 218, 2, 233, 193, - 96, 31, 3, 1, 246, 218, 2, 233, 193, 96, 31, 6, 1, 246, 198, 2, 233, 193, - 96, 31, 3, 1, 246, 198, 2, 233, 193, 96, 31, 6, 1, 229, 199, 2, 249, 48, - 31, 3, 1, 229, 199, 2, 249, 48, 132, 6, 1, 253, 209, 132, 6, 1, 252, 114, - 132, 6, 1, 244, 93, 132, 6, 1, 249, 207, 132, 6, 1, 246, 254, 132, 6, 1, - 217, 114, 132, 6, 1, 246, 239, 132, 6, 1, 246, 123, 132, 6, 1, 101, 132, - 6, 1, 217, 72, 132, 6, 1, 237, 200, 132, 6, 1, 235, 23, 132, 6, 1, 218, - 133, 132, 6, 1, 251, 169, 132, 6, 1, 236, 168, 132, 6, 1, 243, 4, 132, 6, - 1, 237, 123, 132, 6, 1, 244, 124, 132, 6, 1, 251, 42, 132, 6, 1, 233, - 251, 132, 6, 1, 217, 250, 132, 6, 1, 231, 174, 132, 6, 1, 225, 25, 132, - 6, 1, 219, 72, 132, 6, 1, 251, 69, 132, 6, 1, 229, 187, 132, 6, 1, 237, - 100, 132, 6, 1, 203, 132, 6, 1, 226, 77, 132, 6, 1, 219, 96, 132, 6, 1, - 221, 158, 132, 6, 1, 227, 196, 132, 6, 1, 250, 182, 132, 6, 1, 217, 236, - 132, 6, 1, 229, 61, 132, 6, 1, 236, 178, 132, 6, 1, 230, 161, 132, 6, 1, - 245, 221, 132, 58, 1, 42, 144, 227, 93, 132, 254, 79, 132, 246, 201, 78, - 132, 246, 95, 78, 132, 250, 168, 132, 228, 82, 78, 132, 255, 7, 78, 132, - 3, 1, 253, 209, 132, 3, 1, 252, 114, 132, 3, 1, 244, 93, 132, 3, 1, 249, - 207, 132, 3, 1, 246, 254, 132, 3, 1, 217, 114, 132, 3, 1, 246, 239, 132, - 3, 1, 246, 123, 132, 3, 1, 101, 132, 3, 1, 217, 72, 132, 3, 1, 237, 200, - 132, 3, 1, 235, 23, 132, 3, 1, 218, 133, 132, 3, 1, 251, 169, 132, 3, 1, - 236, 168, 132, 3, 1, 243, 4, 132, 3, 1, 237, 123, 132, 3, 1, 244, 124, - 132, 3, 1, 251, 42, 132, 3, 1, 233, 251, 132, 3, 1, 217, 250, 132, 3, 1, - 231, 174, 132, 3, 1, 225, 25, 132, 3, 1, 219, 72, 132, 3, 1, 251, 69, - 132, 3, 1, 229, 187, 132, 3, 1, 237, 100, 132, 3, 1, 203, 132, 3, 1, 226, - 77, 132, 3, 1, 219, 96, 132, 3, 1, 221, 158, 132, 3, 1, 227, 196, 132, 3, - 1, 250, 182, 132, 3, 1, 217, 236, 132, 3, 1, 229, 61, 132, 3, 1, 236, - 178, 132, 3, 1, 230, 161, 132, 3, 1, 245, 221, 132, 3, 24, 246, 255, 217, - 236, 132, 245, 90, 223, 136, 132, 242, 121, 87, 255, 1, 246, 116, 87, - 255, 1, 226, 78, 87, 255, 1, 225, 12, 87, 255, 1, 217, 102, 228, 138, 87, - 255, 1, 217, 102, 244, 246, 87, 255, 1, 221, 168, 87, 255, 1, 227, 158, - 87, 255, 1, 217, 101, 87, 255, 1, 229, 219, 87, 255, 1, 218, 0, 87, 255, - 1, 222, 41, 87, 255, 1, 244, 171, 87, 255, 1, 244, 172, 233, 70, 87, 255, - 1, 244, 169, 87, 255, 1, 228, 139, 229, 242, 87, 255, 1, 222, 70, 244, - 185, 87, 255, 1, 229, 202, 87, 255, 1, 253, 239, 243, 206, 87, 255, 1, - 233, 79, 87, 255, 1, 234, 104, 87, 255, 1, 233, 245, 87, 255, 1, 233, - 246, 236, 179, 87, 255, 1, 249, 153, 87, 255, 1, 228, 150, 87, 255, 1, - 222, 70, 228, 134, 87, 255, 1, 218, 10, 252, 115, 217, 217, 87, 255, 1, - 230, 149, 87, 255, 1, 237, 241, 87, 255, 1, 249, 76, 87, 255, 1, 217, 31, - 87, 164, 234, 54, 250, 221, 87, 229, 32, 224, 224, 87, 229, 32, 243, 172, - 226, 78, 87, 229, 32, 243, 172, 229, 214, 87, 229, 32, 243, 172, 228, - 143, 87, 229, 32, 243, 94, 87, 229, 32, 221, 48, 87, 229, 32, 226, 78, - 87, 229, 32, 229, 214, 87, 229, 32, 228, 143, 87, 229, 32, 242, 254, 87, - 229, 32, 242, 255, 243, 174, 35, 219, 169, 87, 229, 32, 228, 85, 87, 229, - 32, 249, 194, 156, 234, 77, 87, 229, 32, 233, 237, 87, 228, 197, 234, 76, - 87, 229, 32, 227, 248, 87, 228, 197, 229, 220, 87, 229, 32, 224, 210, - 248, 145, 87, 229, 32, 224, 113, 248, 145, 87, 228, 197, 224, 22, 229, - 216, 87, 164, 220, 60, 248, 145, 87, 164, 234, 237, 248, 145, 87, 228, - 197, 231, 104, 243, 205, 87, 229, 32, 228, 144, 228, 138, 87, 1, 254, - 168, 87, 1, 252, 104, 87, 1, 244, 91, 87, 1, 249, 177, 87, 1, 243, 162, - 87, 1, 219, 169, 87, 1, 217, 95, 87, 1, 243, 128, 87, 1, 222, 50, 87, 1, - 217, 220, 87, 1, 39, 236, 246, 87, 1, 236, 246, 87, 1, 235, 152, 87, 1, - 39, 234, 1, 87, 1, 234, 1, 87, 1, 39, 231, 103, 87, 1, 231, 103, 87, 1, - 226, 145, 87, 1, 253, 207, 87, 1, 39, 229, 198, 87, 1, 229, 198, 87, 1, - 39, 221, 51, 87, 1, 221, 51, 87, 1, 228, 107, 87, 1, 227, 174, 87, 1, - 224, 209, 87, 1, 222, 102, 87, 24, 217, 248, 51, 219, 169, 87, 24, 217, - 248, 219, 170, 217, 220, 87, 24, 217, 248, 51, 217, 220, 87, 228, 197, - 244, 171, 87, 228, 197, 244, 169, 12, 54, 55, 12, 5, 226, 139, 12, 245, - 132, 234, 63, 12, 5, 226, 167, 254, 63, 250, 89, 227, 64, 254, 63, 245, - 110, 227, 64, 12, 227, 222, 254, 63, 229, 170, 233, 164, 55, 254, 63, - 229, 170, 222, 66, 221, 232, 55, 254, 214, 55, 12, 250, 168, 12, 249, - 141, 225, 54, 12, 229, 34, 219, 154, 55, 12, 5, 233, 147, 12, 5, 226, - 152, 254, 170, 218, 245, 12, 5, 254, 170, 254, 0, 12, 5, 227, 247, 254, - 169, 12, 5, 227, 251, 254, 155, 254, 116, 12, 5, 222, 128, 12, 3, 116, - 222, 137, 12, 3, 116, 24, 99, 2, 235, 161, 2, 218, 21, 12, 3, 116, 217, - 106, 12, 3, 245, 238, 12, 3, 249, 172, 12, 3, 236, 206, 12, 225, 67, 12, - 221, 78, 61, 228, 197, 78, 12, 228, 82, 78, 12, 1, 243, 192, 12, 1, 99, - 2, 234, 111, 50, 12, 1, 99, 2, 181, 50, 12, 1, 218, 234, 2, 181, 50, 12, - 1, 99, 2, 181, 56, 12, 1, 70, 2, 181, 50, 12, 1, 254, 168, 12, 1, 252, - 128, 12, 1, 222, 78, 234, 72, 12, 1, 222, 77, 12, 1, 222, 19, 12, 1, 237, - 112, 12, 1, 243, 202, 12, 1, 236, 146, 12, 1, 249, 183, 12, 1, 222, 29, - 12, 1, 227, 196, 12, 1, 217, 106, 12, 1, 226, 82, 12, 1, 224, 242, 12, 1, - 226, 170, 12, 1, 249, 202, 12, 1, 222, 137, 12, 1, 217, 109, 12, 1, 254, - 191, 12, 1, 244, 122, 12, 1, 236, 177, 2, 124, 188, 50, 12, 1, 236, 177, - 2, 148, 188, 56, 12, 1, 245, 241, 70, 2, 237, 170, 216, 216, 12, 1, 245, - 241, 70, 2, 124, 188, 50, 12, 1, 245, 241, 70, 2, 148, 188, 50, 12, 222, - 107, 12, 1, 245, 221, 12, 1, 228, 148, 12, 1, 236, 246, 12, 1, 235, 160, - 12, 1, 234, 14, 12, 1, 231, 193, 12, 1, 243, 146, 12, 1, 218, 233, 12, 1, - 99, 234, 92, 12, 1, 218, 21, 12, 245, 236, 12, 249, 170, 12, 236, 204, - 12, 245, 238, 12, 249, 172, 12, 236, 206, 12, 225, 16, 12, 223, 75, 12, - 234, 109, 50, 12, 181, 50, 12, 181, 56, 12, 223, 94, 254, 168, 12, 237, - 170, 249, 172, 12, 164, 231, 194, 244, 107, 12, 216, 255, 12, 29, 5, 3, - 220, 11, 50, 12, 29, 5, 237, 170, 3, 220, 11, 50, 12, 29, 5, 61, 56, 12, - 210, 249, 172, 12, 245, 239, 2, 124, 248, 143, 254, 63, 20, 217, 84, 254, - 63, 20, 107, 254, 63, 20, 103, 254, 63, 20, 160, 254, 63, 20, 154, 254, - 63, 20, 174, 254, 63, 20, 182, 254, 63, 20, 191, 254, 63, 20, 185, 254, - 63, 20, 190, 12, 229, 169, 55, 12, 249, 86, 225, 54, 12, 221, 230, 225, - 54, 12, 245, 170, 229, 30, 223, 156, 12, 1, 248, 144, 252, 128, 12, 1, - 248, 144, 228, 148, 12, 1, 223, 59, 254, 168, 12, 1, 99, 218, 246, 12, 1, - 99, 2, 218, 235, 181, 50, 12, 1, 99, 2, 218, 235, 181, 56, 12, 1, 116, - 243, 192, 12, 1, 116, 181, 254, 168, 12, 1, 116, 181, 218, 233, 12, 1, - 105, 2, 181, 50, 12, 1, 116, 181, 218, 21, 12, 1, 221, 23, 12, 1, 221, - 21, 12, 1, 252, 135, 12, 1, 222, 78, 2, 227, 93, 12, 1, 222, 78, 2, 148, - 188, 71, 247, 129, 12, 1, 229, 187, 12, 1, 222, 75, 12, 1, 252, 126, 12, - 1, 111, 2, 181, 50, 12, 1, 111, 2, 124, 188, 69, 50, 12, 1, 231, 70, 12, - 1, 247, 79, 12, 1, 111, 2, 148, 188, 50, 12, 1, 222, 91, 12, 1, 222, 89, - 12, 1, 249, 127, 12, 1, 249, 184, 2, 227, 93, 12, 1, 249, 184, 2, 61, 56, - 12, 1, 249, 184, 2, 61, 252, 118, 25, 3, 222, 137, 12, 1, 249, 189, 12, - 1, 249, 129, 12, 1, 247, 103, 12, 1, 249, 184, 2, 148, 188, 71, 247, 129, - 12, 1, 249, 184, 2, 245, 116, 188, 50, 12, 1, 227, 48, 12, 1, 227, 197, - 2, 3, 216, 216, 12, 1, 227, 197, 2, 227, 93, 12, 1, 227, 197, 2, 61, 56, - 12, 1, 227, 197, 2, 3, 220, 11, 56, 12, 1, 227, 197, 2, 61, 252, 118, 25, - 61, 50, 12, 1, 227, 197, 2, 124, 188, 50, 12, 1, 237, 109, 12, 1, 227, - 197, 2, 245, 116, 188, 50, 12, 1, 226, 83, 2, 61, 252, 118, 25, 61, 50, - 12, 1, 226, 83, 2, 148, 188, 56, 12, 1, 226, 83, 2, 148, 188, 252, 118, - 25, 148, 188, 50, 12, 1, 226, 171, 2, 124, 188, 56, 12, 1, 226, 171, 2, - 148, 188, 50, 12, 1, 222, 138, 2, 148, 188, 50, 12, 1, 254, 192, 2, 148, - 188, 50, 12, 1, 248, 144, 245, 221, 12, 1, 245, 222, 2, 61, 233, 104, 56, - 12, 1, 245, 222, 2, 61, 56, 12, 1, 219, 158, 12, 1, 245, 222, 2, 148, - 188, 56, 12, 1, 229, 185, 12, 1, 228, 149, 2, 61, 50, 12, 1, 228, 149, 2, - 148, 188, 50, 12, 1, 236, 176, 12, 1, 223, 33, 236, 246, 12, 1, 236, 247, - 2, 227, 93, 12, 1, 236, 247, 2, 61, 50, 12, 1, 232, 117, 12, 1, 236, 247, - 2, 148, 188, 56, 12, 1, 244, 243, 12, 1, 244, 244, 2, 227, 93, 12, 1, - 232, 82, 12, 1, 244, 244, 2, 124, 188, 56, 12, 1, 244, 9, 12, 1, 244, - 244, 2, 148, 188, 50, 12, 1, 235, 161, 2, 3, 216, 216, 12, 1, 235, 161, - 2, 61, 50, 12, 1, 235, 161, 2, 148, 188, 50, 12, 1, 235, 161, 2, 148, - 188, 56, 12, 1, 231, 194, 2, 61, 56, 12, 1, 231, 194, 244, 107, 12, 1, - 227, 78, 12, 1, 231, 194, 2, 227, 93, 12, 1, 231, 194, 2, 148, 188, 50, - 12, 1, 243, 147, 248, 163, 12, 1, 222, 92, 2, 61, 50, 12, 1, 243, 147, 2, - 70, 50, 12, 1, 243, 147, 244, 65, 12, 1, 243, 147, 244, 66, 2, 181, 50, - 12, 1, 222, 78, 234, 73, 244, 65, 12, 1, 218, 234, 2, 227, 93, 12, 1, - 236, 98, 230, 167, 12, 1, 230, 167, 12, 1, 68, 12, 1, 217, 200, 12, 1, - 236, 98, 217, 200, 12, 1, 218, 234, 2, 124, 188, 50, 12, 1, 219, 165, 12, - 1, 245, 241, 218, 21, 12, 1, 70, 2, 222, 135, 12, 1, 70, 2, 3, 216, 216, - 12, 1, 218, 234, 2, 61, 50, 12, 1, 73, 12, 1, 70, 2, 148, 188, 56, 12, 1, - 70, 252, 194, 12, 1, 70, 252, 195, 2, 181, 50, 12, 245, 90, 223, 136, 12, - 1, 254, 234, 12, 3, 116, 24, 226, 171, 2, 235, 161, 2, 99, 234, 92, 12, - 3, 116, 24, 228, 149, 2, 235, 161, 2, 99, 234, 92, 12, 3, 116, 62, 66, - 17, 12, 3, 116, 235, 161, 254, 168, 12, 3, 116, 237, 112, 12, 3, 116, - 148, 248, 143, 12, 3, 116, 226, 82, 12, 246, 190, 117, 253, 211, 12, 223, - 154, 117, 227, 20, 246, 218, 243, 91, 12, 3, 116, 227, 55, 217, 84, 12, - 3, 116, 220, 59, 227, 207, 217, 84, 12, 3, 116, 248, 144, 243, 160, 117, - 236, 146, 12, 3, 116, 62, 47, 17, 12, 3, 109, 226, 82, 12, 3, 116, 234, - 110, 12, 3, 218, 233, 12, 3, 218, 21, 12, 3, 116, 218, 21, 12, 3, 116, - 231, 193, 12, 229, 57, 117, 226, 159, 12, 246, 199, 251, 85, 109, 223, - 136, 12, 246, 199, 251, 85, 116, 223, 136, 12, 227, 55, 116, 223, 137, 2, - 245, 186, 251, 84, 12, 3, 109, 234, 14, 12, 1, 249, 184, 2, 237, 170, - 216, 216, 12, 1, 227, 197, 2, 237, 170, 216, 216, 246, 87, 254, 63, 20, - 217, 84, 246, 87, 254, 63, 20, 107, 246, 87, 254, 63, 20, 103, 246, 87, - 254, 63, 20, 160, 246, 87, 254, 63, 20, 154, 246, 87, 254, 63, 20, 174, - 246, 87, 254, 63, 20, 182, 246, 87, 254, 63, 20, 191, 246, 87, 254, 63, - 20, 185, 246, 87, 254, 63, 20, 190, 12, 1, 224, 243, 2, 61, 56, 12, 1, - 249, 203, 2, 61, 56, 12, 1, 244, 123, 2, 61, 56, 12, 5, 224, 112, 254, - 134, 12, 5, 224, 112, 229, 13, 233, 251, 12, 1, 243, 147, 2, 237, 170, - 216, 216, 166, 246, 190, 117, 229, 240, 166, 223, 55, 245, 90, 223, 136, - 166, 223, 96, 245, 90, 223, 136, 166, 223, 55, 250, 175, 166, 223, 96, - 250, 175, 166, 186, 250, 175, 166, 250, 176, 224, 64, 235, 115, 166, 250, - 176, 224, 64, 227, 109, 166, 223, 55, 250, 176, 224, 64, 235, 115, 166, - 223, 96, 250, 176, 224, 64, 227, 109, 166, 250, 134, 166, 243, 179, 230, - 179, 166, 243, 179, 233, 236, 166, 243, 179, 253, 253, 166, 255, 7, 78, - 166, 1, 254, 171, 166, 1, 223, 59, 254, 171, 166, 1, 252, 101, 166, 1, - 244, 235, 166, 1, 244, 236, 244, 216, 166, 1, 249, 180, 166, 1, 248, 144, - 249, 181, 227, 89, 166, 1, 243, 162, 166, 1, 218, 233, 166, 1, 217, 106, - 166, 1, 243, 126, 166, 1, 222, 46, 166, 1, 222, 47, 244, 216, 166, 1, - 217, 188, 166, 1, 217, 189, 243, 162, 166, 1, 236, 224, 166, 1, 235, 159, - 166, 1, 233, 161, 166, 1, 231, 103, 166, 1, 225, 60, 166, 1, 39, 225, 60, - 166, 1, 73, 166, 1, 229, 198, 166, 1, 210, 229, 198, 166, 1, 226, 168, - 166, 1, 228, 142, 166, 1, 227, 89, 166, 1, 224, 209, 166, 1, 222, 100, - 166, 1, 229, 159, 252, 90, 166, 1, 229, 159, 244, 120, 166, 1, 229, 159, - 249, 32, 166, 228, 203, 50, 166, 228, 203, 56, 166, 228, 203, 247, 142, - 166, 217, 15, 50, 166, 217, 15, 56, 166, 217, 15, 247, 142, 166, 227, - 219, 50, 166, 227, 219, 56, 166, 247, 143, 217, 22, 242, 241, 166, 247, - 143, 217, 22, 254, 117, 166, 243, 165, 50, 166, 243, 165, 56, 166, 243, - 164, 247, 142, 166, 246, 136, 50, 166, 246, 136, 56, 166, 226, 250, 166, - 245, 215, 248, 145, 166, 228, 63, 166, 227, 17, 166, 124, 69, 188, 50, - 166, 124, 69, 188, 56, 166, 148, 188, 50, 166, 148, 188, 56, 166, 230, - 177, 235, 44, 50, 166, 230, 177, 235, 44, 56, 166, 233, 58, 166, 252, - 193, 166, 1, 224, 19, 217, 78, 166, 1, 224, 19, 236, 139, 166, 1, 224, - 19, 245, 231, 12, 1, 252, 129, 2, 148, 188, 242, 191, 56, 12, 1, 252, - 129, 2, 61, 252, 118, 25, 148, 188, 50, 12, 1, 252, 129, 2, 148, 188, - 229, 28, 220, 53, 56, 12, 1, 252, 129, 2, 148, 188, 229, 28, 220, 53, - 252, 118, 25, 124, 188, 50, 12, 1, 252, 129, 2, 124, 188, 252, 118, 25, - 61, 50, 12, 1, 252, 129, 2, 237, 170, 3, 220, 11, 56, 12, 1, 252, 129, 2, - 3, 216, 216, 12, 1, 111, 2, 124, 188, 50, 12, 1, 111, 2, 148, 188, 229, - 28, 220, 53, 56, 12, 1, 249, 184, 2, 124, 188, 219, 102, 252, 118, 25, 3, - 222, 137, 12, 1, 249, 184, 2, 237, 170, 3, 220, 11, 56, 12, 1, 227, 197, - 2, 92, 12, 1, 226, 83, 2, 245, 116, 188, 50, 12, 1, 254, 192, 2, 124, - 188, 50, 12, 1, 254, 192, 2, 148, 188, 229, 28, 247, 130, 50, 12, 1, 254, - 192, 2, 124, 188, 219, 102, 50, 12, 1, 245, 222, 2, 124, 188, 56, 12, 1, - 245, 222, 2, 148, 188, 229, 28, 220, 53, 56, 12, 1, 236, 177, 2, 61, 50, - 12, 1, 236, 177, 2, 148, 188, 50, 12, 1, 236, 177, 2, 148, 188, 229, 28, - 220, 53, 56, 12, 1, 62, 2, 61, 50, 12, 1, 62, 2, 61, 56, 12, 1, 231, 194, - 2, 124, 188, 56, 12, 1, 231, 194, 2, 3, 222, 137, 12, 1, 231, 194, 2, 3, - 216, 216, 12, 1, 235, 161, 2, 135, 12, 1, 227, 197, 2, 124, 188, 219, - 102, 50, 12, 1, 227, 197, 2, 181, 50, 12, 1, 226, 83, 2, 124, 188, 219, - 102, 50, 12, 1, 111, 2, 3, 12, 1, 222, 138, 56, 12, 1, 111, 2, 3, 12, 1, - 222, 138, 25, 124, 248, 143, 12, 1, 226, 83, 2, 3, 12, 1, 222, 138, 25, - 124, 248, 143, 12, 1, 227, 197, 2, 3, 12, 1, 222, 138, 25, 124, 248, 143, - 12, 1, 111, 2, 3, 12, 1, 222, 138, 50, 12, 1, 99, 2, 246, 87, 254, 63, - 20, 124, 50, 12, 1, 99, 2, 246, 87, 254, 63, 20, 148, 50, 12, 1, 245, - 241, 70, 2, 246, 87, 254, 63, 20, 124, 50, 12, 1, 245, 241, 70, 2, 246, - 87, 254, 63, 20, 148, 50, 12, 1, 245, 241, 70, 2, 246, 87, 254, 63, 20, - 245, 116, 56, 12, 1, 218, 234, 2, 246, 87, 254, 63, 20, 124, 50, 12, 1, - 218, 234, 2, 246, 87, 254, 63, 20, 148, 50, 12, 1, 70, 252, 195, 2, 246, - 87, 254, 63, 20, 124, 50, 12, 1, 70, 252, 195, 2, 246, 87, 254, 63, 20, - 148, 50, 12, 1, 111, 2, 246, 87, 254, 63, 20, 245, 116, 56, 12, 1, 226, - 83, 2, 246, 87, 254, 63, 20, 245, 116, 50, 12, 1, 226, 83, 2, 237, 170, - 216, 216, 12, 1, 236, 247, 2, 124, 188, 50, 222, 32, 1, 243, 211, 222, - 32, 1, 224, 251, 222, 32, 1, 231, 192, 222, 32, 1, 228, 0, 222, 32, 1, - 252, 236, 222, 32, 1, 235, 76, 222, 32, 1, 237, 3, 222, 32, 1, 254, 160, - 222, 32, 1, 219, 187, 222, 32, 1, 234, 13, 222, 32, 1, 246, 6, 222, 32, - 1, 249, 35, 222, 32, 1, 222, 34, 222, 32, 1, 235, 185, 222, 32, 1, 244, - 252, 222, 32, 1, 244, 71, 222, 32, 1, 226, 81, 222, 32, 1, 249, 139, 222, - 32, 1, 217, 98, 222, 32, 1, 222, 101, 222, 32, 1, 218, 76, 222, 32, 1, - 229, 209, 222, 32, 1, 237, 116, 222, 32, 1, 251, 49, 222, 32, 1, 221, 28, - 222, 32, 1, 243, 120, 222, 32, 1, 236, 148, 222, 32, 1, 222, 33, 222, 32, - 1, 217, 113, 222, 32, 1, 224, 241, 222, 32, 1, 226, 174, 222, 32, 1, 249, - 205, 222, 32, 1, 101, 222, 32, 1, 217, 21, 222, 32, 1, 254, 189, 222, 32, - 1, 244, 121, 222, 32, 1, 228, 152, 222, 32, 1, 219, 5, 222, 32, 255, 8, - 222, 32, 255, 23, 222, 32, 242, 68, 222, 32, 246, 249, 222, 32, 220, 118, - 222, 32, 230, 126, 222, 32, 247, 1, 222, 32, 246, 82, 222, 32, 230, 176, - 222, 32, 230, 184, 222, 32, 223, 75, 222, 32, 1, 232, 235, 231, 242, 20, - 217, 84, 231, 242, 20, 107, 231, 242, 20, 103, 231, 242, 20, 160, 231, - 242, 20, 154, 231, 242, 20, 174, 231, 242, 20, 182, 231, 242, 20, 191, - 231, 242, 20, 185, 231, 242, 20, 190, 231, 242, 1, 60, 231, 242, 1, 246, - 250, 231, 242, 1, 72, 231, 242, 1, 73, 231, 242, 1, 68, 231, 242, 1, 230, - 127, 231, 242, 1, 74, 231, 242, 1, 249, 195, 231, 242, 1, 207, 231, 242, - 1, 252, 237, 231, 242, 1, 187, 231, 242, 1, 222, 155, 231, 242, 1, 237, - 123, 231, 242, 1, 251, 69, 231, 242, 1, 249, 207, 231, 242, 1, 203, 231, - 242, 1, 227, 52, 231, 242, 1, 226, 177, 231, 242, 1, 244, 204, 231, 242, - 1, 246, 8, 231, 242, 1, 175, 231, 242, 1, 235, 188, 231, 242, 1, 232, - 238, 218, 184, 231, 242, 1, 196, 231, 242, 1, 231, 77, 231, 242, 1, 208, - 231, 242, 1, 155, 231, 242, 1, 219, 7, 231, 242, 1, 184, 231, 242, 1, - 231, 78, 218, 184, 231, 242, 1, 237, 52, 237, 123, 231, 242, 1, 237, 52, - 251, 69, 231, 242, 1, 237, 52, 203, 231, 242, 36, 224, 192, 116, 221, - 132, 231, 242, 36, 224, 192, 109, 221, 132, 231, 242, 36, 224, 192, 227, - 88, 221, 132, 231, 242, 36, 171, 249, 47, 221, 132, 231, 242, 36, 171, - 116, 221, 132, 231, 242, 36, 171, 109, 221, 132, 231, 242, 36, 171, 227, - 88, 221, 132, 231, 242, 36, 232, 209, 78, 231, 242, 36, 51, 61, 50, 231, - 242, 116, 145, 254, 79, 231, 242, 109, 145, 254, 79, 231, 242, 16, 230, - 128, 249, 58, 231, 242, 16, 244, 203, 231, 242, 250, 168, 231, 242, 246, - 95, 78, 231, 242, 235, 166, 213, 1, 254, 173, 213, 1, 252, 60, 213, 1, - 244, 234, 213, 1, 249, 182, 213, 1, 237, 133, 213, 1, 252, 236, 213, 1, - 217, 87, 213, 1, 237, 140, 213, 1, 221, 161, 213, 1, 217, 177, 213, 1, - 237, 4, 213, 1, 235, 183, 213, 1, 233, 161, 213, 1, 231, 103, 213, 1, - 224, 110, 213, 1, 237, 223, 213, 1, 245, 203, 213, 1, 221, 53, 213, 1, - 228, 79, 213, 1, 227, 89, 213, 1, 225, 9, 213, 1, 222, 151, 213, 164, - 237, 223, 213, 164, 237, 222, 213, 164, 230, 172, 213, 164, 249, 193, - 213, 58, 1, 246, 160, 217, 177, 213, 164, 246, 160, 217, 177, 213, 29, 5, - 171, 73, 213, 29, 5, 73, 213, 29, 5, 230, 72, 255, 58, 213, 29, 5, 171, - 255, 58, 213, 29, 5, 255, 58, 213, 29, 5, 230, 72, 60, 213, 29, 5, 171, - 60, 213, 29, 5, 60, 213, 58, 1, 224, 192, 60, 213, 29, 5, 224, 192, 60, - 213, 29, 5, 171, 68, 213, 29, 5, 68, 213, 58, 1, 72, 213, 29, 5, 171, 72, - 213, 29, 5, 72, 213, 29, 5, 74, 213, 29, 5, 223, 75, 213, 164, 232, 128, - 213, 228, 197, 232, 128, 213, 228, 197, 254, 211, 213, 228, 197, 254, - 122, 213, 228, 197, 252, 181, 213, 228, 197, 253, 240, 213, 228, 197, - 224, 201, 213, 255, 7, 78, 213, 228, 197, 234, 4, 228, 113, 213, 228, - 197, 217, 29, 213, 228, 197, 228, 113, 213, 228, 197, 217, 112, 213, 228, - 197, 220, 233, 213, 228, 197, 254, 36, 213, 228, 197, 224, 22, 234, 55, - 213, 228, 197, 254, 113, 80, 5, 237, 170, 251, 146, 80, 5, 251, 146, 80, - 5, 254, 95, 80, 5, 219, 77, 80, 1, 224, 192, 60, 80, 1, 60, 80, 1, 255, - 58, 80, 1, 72, 80, 1, 237, 255, 80, 1, 68, 80, 1, 220, 23, 80, 1, 167, - 152, 80, 1, 167, 153, 80, 1, 251, 149, 73, 80, 1, 224, 192, 73, 80, 1, - 73, 80, 1, 254, 196, 80, 1, 251, 149, 74, 80, 1, 224, 192, 74, 80, 1, 74, - 80, 1, 253, 232, 80, 1, 175, 80, 1, 236, 149, 80, 1, 245, 0, 80, 1, 244, - 125, 80, 1, 232, 115, 80, 1, 251, 169, 80, 1, 251, 69, 80, 1, 237, 123, - 80, 1, 237, 103, 80, 1, 231, 77, 80, 1, 221, 29, 80, 1, 221, 19, 80, 1, - 249, 132, 80, 1, 249, 116, 80, 1, 231, 217, 80, 1, 222, 155, 80, 1, 222, - 35, 80, 1, 249, 207, 80, 1, 249, 36, 80, 1, 208, 80, 1, 231, 208, 80, 1, - 187, 80, 1, 229, 141, 80, 1, 252, 237, 80, 1, 252, 94, 80, 1, 196, 80, 1, - 184, 80, 1, 203, 80, 1, 227, 52, 80, 1, 235, 188, 80, 1, 235, 17, 80, 1, - 235, 16, 80, 1, 219, 189, 80, 1, 225, 25, 80, 1, 223, 218, 80, 1, 226, - 177, 80, 1, 155, 80, 5, 231, 112, 80, 5, 253, 219, 80, 29, 5, 255, 58, - 80, 29, 5, 72, 80, 29, 5, 237, 255, 80, 29, 5, 68, 80, 29, 5, 220, 23, - 80, 29, 5, 167, 152, 80, 29, 5, 167, 227, 53, 80, 29, 5, 251, 149, 73, - 80, 29, 5, 224, 192, 73, 80, 29, 5, 73, 80, 29, 5, 254, 196, 80, 29, 5, - 251, 149, 74, 80, 29, 5, 224, 192, 74, 80, 29, 5, 74, 80, 29, 5, 253, - 232, 80, 5, 219, 82, 80, 29, 5, 228, 232, 73, 80, 230, 146, 80, 223, 125, - 5, 220, 112, 80, 223, 125, 5, 254, 97, 80, 244, 37, 255, 0, 80, 254, 248, - 255, 0, 80, 29, 5, 251, 149, 171, 73, 80, 1, 228, 155, 80, 1, 236, 133, - 80, 1, 244, 114, 80, 1, 217, 114, 80, 1, 249, 121, 80, 1, 227, 151, 80, - 1, 246, 8, 80, 1, 217, 165, 80, 1, 167, 227, 53, 80, 1, 167, 235, 18, 80, - 29, 5, 167, 153, 80, 29, 5, 167, 235, 18, 80, 249, 167, 80, 51, 249, 167, - 80, 20, 217, 84, 80, 20, 107, 80, 20, 103, 80, 20, 160, 80, 20, 154, 80, - 20, 174, 80, 20, 182, 80, 20, 191, 80, 20, 185, 80, 20, 190, 80, 255, 7, - 55, 80, 5, 116, 223, 253, 248, 145, 80, 1, 251, 149, 60, 80, 1, 217, 80, - 80, 1, 106, 184, 80, 1, 244, 160, 80, 1, 237, 87, 80, 1, 244, 73, 223, - 136, 80, 1, 249, 122, 80, 1, 252, 178, 130, 5, 251, 146, 130, 5, 254, 95, - 130, 5, 219, 77, 130, 1, 60, 130, 1, 255, 58, 130, 1, 72, 130, 1, 237, - 255, 130, 1, 68, 130, 1, 220, 23, 130, 1, 167, 152, 130, 1, 167, 153, - 130, 1, 73, 130, 1, 254, 196, 130, 1, 74, 130, 1, 253, 232, 130, 1, 175, - 130, 1, 236, 149, 130, 1, 245, 0, 130, 1, 244, 125, 130, 1, 232, 115, - 130, 1, 251, 169, 130, 1, 251, 69, 130, 1, 237, 123, 130, 1, 237, 103, - 130, 1, 231, 77, 130, 1, 221, 29, 130, 1, 221, 19, 130, 1, 249, 132, 130, - 1, 249, 116, 130, 1, 231, 217, 130, 1, 222, 155, 130, 1, 222, 35, 130, 1, - 249, 207, 130, 1, 249, 36, 130, 1, 208, 130, 1, 187, 130, 1, 229, 141, - 130, 1, 252, 237, 130, 1, 252, 94, 130, 1, 196, 130, 1, 184, 130, 1, 203, - 130, 1, 235, 188, 130, 1, 225, 25, 130, 1, 223, 218, 130, 1, 226, 177, - 130, 1, 155, 130, 5, 231, 112, 130, 5, 253, 219, 130, 29, 5, 255, 58, - 130, 29, 5, 72, 130, 29, 5, 237, 255, 130, 29, 5, 68, 130, 29, 5, 220, - 23, 130, 29, 5, 167, 152, 130, 29, 5, 167, 227, 53, 130, 29, 5, 73, 130, - 29, 5, 254, 196, 130, 29, 5, 74, 130, 29, 5, 253, 232, 130, 5, 219, 82, - 130, 1, 236, 141, 222, 155, 130, 253, 233, 235, 94, 78, 130, 1, 227, 52, - 130, 1, 227, 151, 130, 1, 217, 165, 130, 1, 167, 227, 53, 130, 1, 167, - 235, 18, 130, 29, 5, 167, 153, 130, 29, 5, 167, 235, 18, 130, 20, 217, - 84, 130, 20, 107, 130, 20, 103, 130, 20, 160, 130, 20, 154, 130, 20, 174, - 130, 20, 182, 130, 20, 191, 130, 20, 185, 130, 20, 190, 130, 1, 228, 3, - 2, 233, 193, 249, 10, 130, 1, 228, 3, 2, 234, 237, 249, 10, 130, 227, 4, - 78, 130, 227, 4, 55, 130, 250, 78, 231, 106, 107, 130, 250, 78, 231, 106, - 103, 130, 250, 78, 231, 106, 160, 130, 250, 78, 231, 106, 154, 130, 250, - 78, 231, 106, 131, 235, 88, 222, 28, 222, 23, 249, 56, 130, 250, 78, 249, - 57, 224, 77, 130, 237, 141, 130, 244, 227, 78, 163, 5, 254, 243, 252, 72, - 163, 5, 252, 72, 163, 5, 219, 77, 163, 1, 60, 163, 1, 255, 58, 163, 1, - 72, 163, 1, 237, 255, 163, 1, 68, 163, 1, 220, 23, 163, 1, 246, 250, 163, - 1, 254, 196, 163, 1, 230, 127, 163, 1, 253, 232, 163, 1, 175, 163, 1, - 236, 149, 163, 1, 245, 0, 163, 1, 244, 125, 163, 1, 232, 115, 163, 1, - 251, 169, 163, 1, 251, 69, 163, 1, 237, 123, 163, 1, 237, 103, 163, 1, - 231, 77, 163, 1, 221, 29, 163, 1, 221, 19, 163, 1, 249, 132, 163, 1, 249, - 116, 163, 1, 231, 217, 163, 1, 222, 155, 163, 1, 222, 35, 163, 1, 249, - 207, 163, 1, 249, 36, 163, 1, 208, 163, 1, 187, 163, 1, 229, 141, 163, 1, - 252, 237, 163, 1, 252, 94, 163, 1, 196, 163, 1, 184, 163, 1, 203, 163, 1, - 235, 188, 163, 1, 235, 17, 163, 1, 219, 189, 163, 1, 225, 25, 163, 1, - 226, 177, 163, 1, 155, 163, 5, 231, 112, 163, 29, 5, 255, 58, 163, 29, 5, - 72, 163, 29, 5, 237, 255, 163, 29, 5, 68, 163, 29, 5, 220, 23, 163, 29, - 5, 246, 250, 163, 29, 5, 254, 196, 163, 29, 5, 230, 127, 163, 29, 5, 253, - 232, 163, 5, 219, 82, 163, 5, 220, 114, 163, 1, 236, 133, 163, 1, 244, - 114, 163, 1, 217, 114, 163, 1, 227, 52, 163, 1, 246, 8, 163, 20, 217, 84, - 163, 20, 107, 163, 20, 103, 163, 20, 160, 163, 20, 154, 163, 20, 174, - 163, 20, 182, 163, 20, 191, 163, 20, 185, 163, 20, 190, 163, 221, 167, - 163, 254, 242, 163, 237, 155, 163, 220, 46, 163, 246, 224, 230, 132, 163, - 5, 218, 54, 150, 5, 251, 146, 150, 5, 254, 95, 150, 5, 219, 77, 150, 1, - 60, 150, 1, 255, 58, 150, 1, 72, 150, 1, 237, 255, 150, 1, 68, 150, 1, - 220, 23, 150, 1, 167, 152, 150, 1, 167, 153, 150, 29, 251, 149, 73, 150, - 1, 73, 150, 1, 254, 196, 150, 29, 251, 149, 74, 150, 1, 74, 150, 1, 253, - 232, 150, 1, 175, 150, 1, 236, 149, 150, 1, 245, 0, 150, 1, 244, 125, - 150, 1, 232, 115, 150, 1, 251, 169, 150, 1, 251, 69, 150, 1, 237, 123, - 150, 1, 237, 103, 150, 1, 231, 77, 150, 1, 221, 29, 150, 1, 221, 19, 150, - 1, 249, 132, 150, 1, 249, 116, 150, 1, 231, 217, 150, 1, 222, 155, 150, - 1, 222, 35, 150, 1, 249, 207, 150, 1, 249, 36, 150, 1, 208, 150, 1, 187, - 150, 1, 229, 141, 150, 1, 252, 237, 150, 1, 252, 94, 150, 1, 196, 150, 1, - 184, 150, 1, 203, 150, 1, 235, 188, 150, 1, 235, 17, 150, 1, 219, 189, - 150, 1, 225, 25, 150, 1, 223, 218, 150, 1, 226, 177, 150, 1, 155, 150, 5, - 231, 112, 150, 5, 253, 219, 150, 29, 5, 255, 58, 150, 29, 5, 72, 150, 29, - 5, 237, 255, 150, 29, 5, 68, 150, 29, 5, 220, 23, 150, 29, 5, 167, 152, - 150, 29, 5, 167, 227, 53, 150, 29, 5, 251, 149, 73, 150, 29, 5, 73, 150, - 29, 5, 254, 196, 150, 29, 5, 251, 149, 74, 150, 29, 5, 74, 150, 29, 5, - 253, 232, 150, 5, 219, 82, 150, 230, 146, 150, 1, 167, 227, 53, 150, 1, - 167, 235, 18, 150, 29, 5, 167, 153, 150, 29, 5, 167, 235, 18, 150, 20, - 217, 84, 150, 20, 107, 150, 20, 103, 150, 20, 160, 150, 20, 154, 150, 20, - 174, 150, 20, 182, 150, 20, 191, 150, 20, 185, 150, 20, 190, 150, 227, 4, - 55, 147, 5, 251, 146, 147, 5, 254, 95, 147, 5, 219, 77, 147, 1, 60, 147, - 1, 255, 58, 147, 1, 72, 147, 1, 237, 255, 147, 1, 68, 147, 1, 220, 23, - 147, 1, 167, 152, 147, 1, 167, 153, 147, 1, 73, 147, 1, 254, 196, 147, 1, - 74, 147, 1, 253, 232, 147, 1, 175, 147, 1, 236, 149, 147, 1, 245, 0, 147, - 1, 244, 125, 147, 1, 232, 115, 147, 1, 251, 169, 147, 1, 251, 69, 147, 1, - 237, 123, 147, 1, 237, 103, 147, 1, 231, 77, 147, 1, 221, 29, 147, 1, - 221, 19, 147, 1, 249, 132, 147, 1, 249, 116, 147, 1, 231, 217, 147, 1, - 222, 155, 147, 1, 222, 35, 147, 1, 249, 207, 147, 1, 249, 36, 147, 1, - 208, 147, 1, 187, 147, 1, 229, 141, 147, 1, 252, 237, 147, 1, 252, 94, - 147, 1, 196, 147, 1, 184, 147, 1, 203, 147, 1, 235, 188, 147, 1, 235, 17, - 147, 1, 219, 189, 147, 1, 225, 25, 147, 1, 223, 218, 147, 1, 226, 177, - 147, 1, 155, 147, 5, 231, 112, 147, 5, 253, 219, 147, 29, 5, 255, 58, - 147, 29, 5, 72, 147, 29, 5, 237, 255, 147, 29, 5, 68, 147, 29, 5, 220, - 23, 147, 29, 5, 167, 152, 147, 29, 5, 167, 227, 53, 147, 29, 5, 73, 147, - 29, 5, 254, 196, 147, 29, 5, 74, 147, 29, 5, 253, 232, 147, 5, 219, 82, - 147, 254, 197, 235, 94, 78, 147, 253, 233, 235, 94, 78, 147, 1, 227, 52, - 147, 1, 227, 151, 147, 1, 217, 165, 147, 1, 167, 227, 53, 147, 1, 167, - 235, 18, 147, 29, 5, 167, 153, 147, 29, 5, 167, 235, 18, 147, 20, 217, - 84, 147, 20, 107, 147, 20, 103, 147, 20, 160, 147, 20, 154, 147, 20, 174, - 147, 20, 182, 147, 20, 191, 147, 20, 185, 147, 20, 190, 147, 237, 141, - 147, 1, 219, 7, 176, 5, 254, 95, 176, 5, 219, 77, 176, 1, 60, 176, 1, - 255, 58, 176, 1, 72, 176, 1, 237, 255, 176, 1, 68, 176, 1, 220, 23, 176, - 1, 73, 176, 1, 246, 250, 176, 1, 254, 196, 176, 1, 74, 176, 1, 230, 127, - 176, 1, 253, 232, 176, 1, 175, 176, 1, 232, 115, 176, 1, 251, 169, 176, - 1, 237, 123, 176, 1, 231, 77, 176, 1, 221, 29, 176, 1, 231, 217, 176, 1, - 222, 155, 176, 1, 208, 176, 1, 231, 208, 176, 1, 187, 176, 1, 196, 176, - 1, 184, 176, 1, 203, 176, 1, 227, 52, 176, 1, 235, 188, 176, 1, 235, 17, - 176, 1, 235, 16, 176, 1, 219, 189, 176, 1, 225, 25, 176, 1, 223, 218, - 176, 1, 226, 177, 176, 1, 155, 176, 29, 5, 255, 58, 176, 29, 5, 72, 176, - 29, 5, 237, 255, 176, 29, 5, 68, 176, 29, 5, 220, 23, 176, 29, 5, 73, - 176, 29, 5, 246, 250, 176, 29, 5, 254, 196, 176, 29, 5, 74, 176, 29, 5, - 230, 127, 176, 29, 5, 253, 232, 176, 5, 219, 82, 176, 230, 146, 176, 253, - 233, 235, 94, 78, 176, 20, 217, 84, 176, 20, 107, 176, 20, 103, 176, 20, - 160, 176, 20, 154, 176, 20, 174, 176, 20, 182, 176, 20, 191, 176, 20, - 185, 176, 20, 190, 176, 54, 222, 65, 176, 54, 131, 242, 161, 176, 54, - 131, 221, 231, 176, 249, 137, 55, 176, 233, 121, 55, 176, 218, 23, 55, - 176, 249, 89, 55, 176, 250, 107, 55, 176, 254, 14, 71, 55, 176, 227, 4, - 55, 176, 54, 55, 129, 5, 251, 146, 129, 5, 254, 95, 129, 5, 219, 77, 129, - 1, 60, 129, 1, 255, 58, 129, 1, 72, 129, 1, 237, 255, 129, 1, 68, 129, 1, - 220, 23, 129, 1, 167, 152, 129, 1, 167, 153, 129, 1, 73, 129, 1, 246, - 250, 129, 1, 254, 196, 129, 1, 74, 129, 1, 230, 127, 129, 1, 253, 232, - 129, 1, 175, 129, 1, 236, 149, 129, 1, 245, 0, 129, 1, 244, 125, 129, 1, - 232, 115, 129, 1, 251, 169, 129, 1, 251, 69, 129, 1, 237, 123, 129, 1, - 237, 103, 129, 1, 231, 77, 129, 1, 221, 29, 129, 1, 221, 19, 129, 1, 249, - 132, 129, 1, 249, 116, 129, 1, 231, 217, 129, 1, 222, 155, 129, 1, 222, - 35, 129, 1, 249, 207, 129, 1, 249, 36, 129, 1, 208, 129, 1, 187, 129, 1, - 229, 141, 129, 1, 252, 237, 129, 1, 252, 94, 129, 1, 196, 129, 1, 184, - 129, 1, 203, 129, 1, 227, 52, 129, 1, 235, 188, 129, 1, 235, 17, 129, 1, - 219, 189, 129, 1, 225, 25, 129, 1, 223, 218, 129, 1, 226, 177, 129, 1, - 155, 129, 5, 253, 219, 129, 29, 5, 255, 58, 129, 29, 5, 72, 129, 29, 5, - 237, 255, 129, 29, 5, 68, 129, 29, 5, 220, 23, 129, 29, 5, 167, 152, 129, - 29, 5, 167, 227, 53, 129, 29, 5, 73, 129, 29, 5, 246, 250, 129, 29, 5, - 254, 196, 129, 29, 5, 74, 129, 29, 5, 230, 127, 129, 29, 5, 253, 232, - 129, 5, 219, 82, 129, 235, 94, 78, 129, 254, 197, 235, 94, 78, 129, 1, - 221, 55, 129, 1, 247, 74, 129, 1, 167, 227, 53, 129, 1, 167, 235, 18, - 129, 29, 5, 167, 153, 129, 29, 5, 167, 235, 18, 129, 20, 217, 84, 129, - 20, 107, 129, 20, 103, 129, 20, 160, 129, 20, 154, 129, 20, 174, 129, 20, - 182, 129, 20, 191, 129, 20, 185, 129, 20, 190, 129, 245, 108, 20, 217, - 85, 35, 230, 169, 229, 9, 117, 154, 129, 245, 108, 20, 131, 35, 230, 169, - 229, 9, 117, 154, 129, 245, 108, 20, 124, 35, 230, 169, 229, 9, 117, 154, - 129, 245, 108, 20, 148, 35, 230, 169, 229, 9, 117, 154, 129, 245, 108, - 20, 131, 35, 246, 104, 229, 9, 117, 154, 129, 245, 108, 20, 124, 35, 246, - 104, 229, 9, 117, 154, 129, 245, 108, 20, 148, 35, 246, 104, 229, 9, 117, - 154, 129, 5, 220, 229, 141, 5, 254, 95, 141, 5, 219, 77, 141, 1, 60, 141, - 1, 255, 58, 141, 1, 72, 141, 1, 237, 255, 141, 1, 68, 141, 1, 220, 23, - 141, 1, 167, 152, 141, 1, 167, 153, 141, 1, 73, 141, 1, 246, 250, 141, 1, - 254, 196, 141, 1, 74, 141, 1, 230, 127, 141, 1, 253, 232, 141, 1, 175, - 141, 1, 236, 149, 141, 1, 245, 0, 141, 1, 244, 125, 141, 1, 232, 115, - 141, 1, 251, 169, 141, 1, 251, 69, 141, 1, 237, 123, 141, 1, 237, 103, - 141, 1, 231, 77, 141, 1, 221, 29, 141, 1, 221, 19, 141, 1, 249, 132, 141, - 1, 249, 116, 141, 1, 231, 217, 141, 1, 222, 155, 141, 1, 222, 35, 141, 1, - 249, 207, 141, 1, 249, 36, 141, 1, 208, 141, 1, 187, 141, 1, 229, 141, - 141, 1, 252, 237, 141, 1, 252, 94, 141, 1, 196, 141, 1, 184, 141, 1, 203, - 141, 1, 227, 52, 141, 1, 235, 188, 141, 1, 235, 17, 141, 1, 219, 189, - 141, 1, 225, 25, 141, 1, 223, 218, 141, 1, 226, 177, 141, 1, 155, 141, 5, - 231, 112, 141, 5, 253, 219, 141, 29, 5, 255, 58, 141, 29, 5, 72, 141, 29, - 5, 237, 255, 141, 29, 5, 68, 141, 29, 5, 220, 23, 141, 29, 5, 167, 152, - 141, 29, 5, 167, 227, 53, 141, 29, 5, 73, 141, 29, 5, 246, 250, 141, 29, - 5, 254, 196, 141, 29, 5, 74, 141, 29, 5, 230, 127, 141, 29, 5, 253, 232, - 141, 5, 219, 82, 141, 235, 94, 78, 141, 254, 197, 235, 94, 78, 141, 1, - 246, 8, 141, 1, 167, 227, 53, 141, 1, 167, 235, 18, 141, 29, 5, 167, 153, - 141, 29, 5, 167, 235, 18, 141, 20, 217, 84, 141, 20, 107, 141, 20, 103, - 141, 20, 160, 141, 20, 154, 141, 20, 174, 141, 20, 182, 141, 20, 191, - 141, 20, 185, 141, 20, 190, 141, 5, 237, 92, 141, 5, 220, 61, 123, 5, - 254, 95, 123, 5, 219, 77, 123, 1, 60, 123, 1, 255, 58, 123, 1, 72, 123, - 1, 237, 255, 123, 1, 68, 123, 1, 220, 23, 123, 1, 167, 152, 123, 1, 167, - 153, 123, 1, 73, 123, 1, 246, 250, 123, 1, 254, 196, 123, 1, 74, 123, 1, - 230, 127, 123, 1, 253, 232, 123, 1, 175, 123, 1, 236, 149, 123, 1, 245, - 0, 123, 1, 244, 125, 123, 1, 232, 115, 123, 1, 251, 169, 123, 1, 251, 69, - 123, 1, 237, 123, 123, 1, 237, 103, 123, 1, 231, 77, 123, 1, 221, 29, - 123, 1, 221, 19, 123, 1, 249, 132, 123, 1, 249, 116, 123, 1, 231, 217, - 123, 1, 222, 155, 123, 1, 222, 35, 123, 1, 249, 207, 123, 1, 249, 36, - 123, 1, 208, 123, 1, 187, 123, 1, 229, 141, 123, 1, 252, 237, 123, 1, - 252, 94, 123, 1, 196, 123, 1, 184, 123, 1, 203, 123, 1, 227, 52, 123, 1, - 235, 188, 123, 1, 235, 17, 123, 1, 235, 16, 123, 1, 219, 189, 123, 1, - 225, 25, 123, 1, 223, 218, 123, 1, 226, 177, 123, 1, 155, 123, 5, 253, - 219, 123, 29, 5, 255, 58, 123, 29, 5, 72, 123, 29, 5, 237, 255, 123, 29, - 5, 68, 123, 29, 5, 220, 23, 123, 29, 5, 167, 152, 123, 29, 5, 167, 227, - 53, 123, 29, 5, 73, 123, 29, 5, 246, 250, 123, 29, 5, 254, 196, 123, 29, - 5, 74, 123, 29, 5, 230, 127, 123, 29, 5, 253, 232, 123, 5, 219, 82, 123, - 253, 233, 235, 94, 78, 123, 1, 167, 227, 53, 123, 1, 167, 235, 18, 123, - 29, 5, 167, 153, 123, 29, 5, 167, 235, 18, 123, 20, 217, 84, 123, 20, - 107, 123, 20, 103, 123, 20, 160, 123, 20, 154, 123, 20, 174, 123, 20, - 182, 123, 20, 191, 123, 20, 185, 123, 20, 190, 123, 54, 222, 65, 123, 54, - 131, 242, 161, 123, 54, 131, 221, 231, 123, 245, 108, 131, 228, 89, 123, - 245, 108, 131, 243, 194, 123, 245, 108, 148, 228, 87, 123, 249, 141, 78, - 123, 1, 251, 23, 231, 218, 123, 1, 251, 23, 207, 123, 1, 251, 23, 227, - 53, 123, 1, 251, 23, 153, 123, 1, 251, 23, 235, 18, 123, 1, 251, 23, 237, - 17, 162, 5, 254, 94, 162, 5, 219, 76, 162, 1, 253, 210, 162, 1, 255, 13, - 162, 1, 254, 215, 162, 1, 254, 229, 162, 1, 237, 132, 162, 1, 237, 254, - 162, 1, 220, 15, 162, 1, 220, 17, 162, 1, 237, 153, 162, 1, 237, 154, - 162, 1, 237, 240, 162, 1, 237, 242, 162, 1, 246, 83, 162, 1, 246, 246, - 162, 1, 254, 184, 162, 1, 230, 62, 162, 1, 230, 122, 162, 1, 253, 222, - 162, 1, 254, 149, 236, 189, 162, 1, 234, 105, 236, 189, 162, 1, 254, 149, - 244, 207, 162, 1, 234, 105, 244, 207, 162, 1, 236, 228, 232, 232, 162, 1, - 226, 135, 244, 207, 162, 1, 254, 149, 251, 117, 162, 1, 234, 105, 251, - 117, 162, 1, 254, 149, 237, 115, 162, 1, 234, 105, 237, 115, 162, 1, 222, - 149, 232, 232, 162, 1, 222, 149, 226, 134, 232, 233, 162, 1, 226, 135, - 237, 115, 162, 1, 254, 149, 221, 27, 162, 1, 234, 105, 221, 27, 162, 1, - 254, 149, 249, 123, 162, 1, 234, 105, 249, 123, 162, 1, 233, 56, 232, - 198, 162, 1, 226, 135, 249, 123, 162, 1, 254, 149, 222, 95, 162, 1, 234, - 105, 222, 95, 162, 1, 254, 149, 249, 136, 162, 1, 234, 105, 249, 136, - 162, 1, 249, 164, 232, 198, 162, 1, 226, 135, 249, 136, 162, 1, 254, 149, - 229, 204, 162, 1, 234, 105, 229, 204, 162, 1, 254, 149, 252, 179, 162, 1, - 234, 105, 252, 179, 162, 1, 234, 44, 162, 1, 254, 136, 252, 179, 162, 1, - 218, 29, 162, 1, 227, 221, 162, 1, 249, 164, 235, 131, 162, 1, 219, 167, - 162, 1, 222, 149, 226, 117, 162, 1, 233, 56, 226, 117, 162, 1, 249, 164, - 226, 117, 162, 1, 243, 166, 162, 1, 233, 56, 235, 131, 162, 1, 245, 233, - 162, 5, 254, 174, 162, 29, 5, 254, 224, 162, 29, 5, 236, 158, 254, 231, - 162, 29, 5, 248, 241, 254, 231, 162, 29, 5, 236, 158, 237, 150, 162, 29, - 5, 248, 241, 237, 150, 162, 29, 5, 236, 158, 230, 42, 162, 29, 5, 248, - 241, 230, 42, 162, 29, 5, 244, 245, 162, 29, 5, 236, 46, 162, 29, 5, 248, - 241, 236, 46, 162, 29, 5, 236, 48, 249, 73, 162, 29, 5, 236, 47, 243, - 212, 254, 224, 162, 29, 5, 236, 47, 243, 212, 248, 241, 254, 224, 162, - 29, 5, 236, 47, 243, 212, 244, 206, 162, 29, 5, 244, 206, 162, 29, 5, - 248, 241, 244, 245, 162, 29, 5, 248, 241, 244, 206, 162, 228, 197, 235, - 254, 140, 126, 236, 58, 236, 243, 140, 126, 236, 126, 236, 145, 140, 126, - 236, 126, 236, 119, 140, 126, 236, 126, 236, 116, 140, 126, 236, 126, - 236, 123, 140, 126, 236, 126, 227, 240, 140, 126, 232, 85, 232, 74, 140, - 126, 251, 12, 251, 60, 140, 126, 251, 12, 251, 20, 140, 126, 251, 12, - 251, 59, 140, 126, 224, 27, 224, 26, 140, 126, 251, 12, 251, 9, 140, 126, - 217, 232, 217, 239, 140, 126, 248, 168, 251, 66, 140, 126, 199, 229, 213, - 140, 126, 221, 240, 222, 27, 140, 126, 221, 240, 232, 215, 140, 126, 221, - 240, 229, 111, 140, 126, 231, 205, 232, 134, 140, 126, 248, 168, 249, 74, - 140, 126, 199, 222, 116, 140, 126, 221, 240, 221, 219, 140, 126, 221, - 240, 222, 31, 140, 126, 221, 240, 221, 237, 140, 126, 231, 205, 231, 144, - 140, 126, 252, 42, 252, 220, 140, 126, 229, 38, 229, 58, 140, 126, 229, - 119, 229, 113, 140, 126, 245, 140, 246, 8, 140, 126, 229, 119, 229, 135, - 140, 126, 245, 140, 245, 245, 140, 126, 229, 119, 226, 143, 140, 126, - 233, 137, 196, 140, 126, 217, 232, 218, 55, 140, 126, 227, 76, 227, 21, - 140, 126, 227, 22, 140, 126, 235, 13, 235, 36, 140, 126, 234, 231, 140, - 126, 218, 188, 219, 3, 140, 126, 224, 27, 226, 155, 140, 126, 224, 27, - 227, 0, 140, 126, 224, 27, 223, 102, 140, 126, 243, 5, 243, 95, 140, 126, - 235, 13, 250, 252, 140, 126, 142, 254, 123, 140, 126, 243, 5, 231, 200, - 140, 126, 230, 30, 140, 126, 226, 130, 60, 140, 126, 234, 100, 243, 190, - 140, 126, 226, 130, 255, 58, 140, 126, 226, 130, 254, 140, 140, 126, 226, - 130, 72, 140, 126, 226, 130, 237, 255, 140, 126, 226, 130, 220, 110, 140, - 126, 226, 130, 220, 108, 140, 126, 226, 130, 68, 140, 126, 226, 130, 220, - 23, 140, 126, 229, 121, 140, 250, 78, 16, 252, 221, 140, 126, 226, 130, - 73, 140, 126, 226, 130, 254, 234, 140, 126, 226, 130, 74, 140, 126, 226, - 130, 254, 197, 234, 96, 140, 126, 226, 130, 254, 197, 234, 97, 140, 126, - 235, 164, 140, 126, 234, 93, 140, 126, 234, 94, 140, 126, 234, 100, 246, - 223, 140, 126, 234, 100, 221, 239, 140, 126, 234, 100, 221, 93, 140, 126, - 234, 100, 251, 50, 140, 126, 222, 25, 140, 126, 232, 36, 140, 126, 218, - 49, 140, 126, 245, 135, 140, 20, 217, 84, 140, 20, 107, 140, 20, 103, - 140, 20, 160, 140, 20, 154, 140, 20, 174, 140, 20, 182, 140, 20, 191, - 140, 20, 185, 140, 20, 190, 140, 126, 254, 121, 140, 126, 236, 124, 202, - 1, 236, 57, 202, 1, 236, 126, 223, 66, 202, 1, 236, 126, 222, 121, 202, - 1, 232, 84, 202, 1, 250, 182, 202, 1, 224, 27, 222, 121, 202, 1, 231, 56, - 202, 1, 248, 167, 202, 1, 101, 202, 1, 221, 240, 223, 66, 202, 1, 221, - 240, 222, 121, 202, 1, 231, 204, 202, 1, 252, 41, 202, 1, 229, 37, 202, - 1, 229, 119, 223, 66, 202, 1, 245, 140, 222, 121, 202, 1, 229, 119, 222, - 121, 202, 1, 245, 140, 223, 66, 202, 1, 233, 136, 202, 1, 217, 231, 202, - 1, 235, 13, 235, 36, 202, 1, 235, 13, 234, 246, 202, 1, 218, 187, 202, 1, - 224, 27, 223, 66, 202, 1, 243, 5, 223, 66, 202, 1, 74, 202, 1, 243, 5, - 222, 121, 202, 246, 208, 202, 29, 5, 60, 202, 29, 5, 234, 100, 236, 233, - 202, 29, 5, 255, 58, 202, 29, 5, 254, 140, 202, 29, 5, 72, 202, 29, 5, - 237, 255, 202, 29, 5, 218, 90, 202, 29, 5, 217, 166, 202, 29, 5, 68, 202, - 29, 5, 220, 23, 202, 29, 5, 234, 100, 236, 44, 202, 225, 62, 5, 235, 12, - 202, 225, 62, 5, 231, 56, 202, 29, 5, 73, 202, 29, 5, 246, 237, 202, 29, - 5, 74, 202, 29, 5, 253, 212, 202, 29, 5, 254, 196, 202, 236, 58, 235, - 188, 202, 145, 234, 100, 246, 223, 202, 145, 234, 100, 221, 239, 202, - 145, 234, 100, 221, 205, 202, 145, 234, 100, 251, 123, 202, 251, 151, 78, - 202, 232, 43, 202, 20, 217, 84, 202, 20, 107, 202, 20, 103, 202, 20, 160, - 202, 20, 154, 202, 20, 174, 202, 20, 182, 202, 20, 191, 202, 20, 185, - 202, 20, 190, 202, 243, 5, 231, 204, 202, 243, 5, 233, 136, 59, 4, 230, - 146, 59, 164, 244, 19, 217, 243, 233, 213, 221, 61, 60, 59, 164, 244, 19, - 217, 243, 233, 213, 255, 144, 227, 80, 252, 146, 196, 59, 164, 244, 19, - 217, 243, 233, 213, 255, 144, 244, 19, 221, 45, 196, 59, 164, 66, 217, - 243, 233, 213, 234, 27, 196, 59, 164, 250, 194, 217, 243, 233, 213, 225, - 31, 196, 59, 164, 251, 135, 217, 243, 233, 213, 229, 112, 225, 19, 196, - 59, 164, 217, 243, 233, 213, 221, 45, 225, 19, 196, 59, 164, 226, 115, - 225, 18, 59, 164, 251, 251, 217, 243, 233, 212, 59, 164, 252, 55, 224, - 197, 217, 243, 233, 212, 59, 164, 237, 173, 221, 44, 59, 164, 249, 68, - 221, 45, 251, 250, 59, 164, 225, 18, 59, 164, 231, 60, 225, 18, 59, 164, - 221, 45, 225, 18, 59, 164, 231, 60, 221, 45, 225, 18, 59, 164, 227, 96, - 251, 39, 223, 229, 225, 18, 59, 164, 227, 154, 244, 44, 225, 18, 59, 164, - 251, 135, 255, 148, 227, 26, 234, 26, 171, 251, 154, 59, 164, 244, 19, - 221, 44, 59, 235, 5, 5, 251, 67, 227, 25, 59, 235, 5, 5, 235, 77, 227, - 25, 59, 253, 248, 5, 225, 28, 244, 194, 255, 149, 227, 25, 59, 253, 248, - 5, 255, 146, 187, 59, 253, 248, 5, 226, 95, 221, 40, 59, 5, 227, 218, - 248, 179, 244, 193, 59, 5, 227, 218, 248, 179, 244, 70, 59, 5, 227, 218, - 248, 179, 244, 20, 59, 5, 227, 218, 232, 230, 244, 193, 59, 5, 227, 218, - 232, 230, 244, 70, 59, 5, 227, 218, 248, 179, 227, 218, 232, 229, 59, 20, - 217, 84, 59, 20, 107, 59, 20, 103, 59, 20, 160, 59, 20, 154, 59, 20, 174, - 59, 20, 182, 59, 20, 191, 59, 20, 185, 59, 20, 190, 59, 20, 144, 107, 59, - 20, 144, 103, 59, 20, 144, 160, 59, 20, 144, 154, 59, 20, 144, 174, 59, - 20, 144, 182, 59, 20, 144, 191, 59, 20, 144, 185, 59, 20, 144, 190, 59, - 20, 144, 217, 84, 59, 164, 251, 253, 227, 25, 59, 164, 232, 109, 251, - 204, 231, 68, 217, 23, 59, 164, 251, 135, 255, 148, 227, 26, 251, 205, - 233, 172, 251, 154, 59, 164, 232, 109, 251, 204, 225, 29, 227, 25, 59, - 164, 251, 47, 233, 212, 59, 164, 221, 56, 255, 145, 59, 164, 244, 8, 227, - 26, 243, 228, 59, 164, 244, 8, 227, 26, 243, 234, 59, 164, 254, 124, 236, - 140, 243, 228, 59, 164, 254, 124, 236, 140, 243, 234, 59, 5, 218, 42, - 221, 43, 59, 5, 234, 75, 221, 43, 59, 1, 175, 59, 1, 236, 149, 59, 1, - 245, 0, 59, 1, 244, 125, 59, 1, 232, 115, 59, 1, 251, 169, 59, 1, 251, - 69, 59, 1, 237, 123, 59, 1, 231, 77, 59, 1, 221, 29, 59, 1, 221, 19, 59, - 1, 249, 132, 59, 1, 249, 116, 59, 1, 231, 217, 59, 1, 222, 155, 59, 1, - 222, 35, 59, 1, 249, 207, 59, 1, 249, 36, 59, 1, 208, 59, 1, 187, 59, 1, - 229, 141, 59, 1, 252, 237, 59, 1, 252, 94, 59, 1, 196, 59, 1, 221, 55, - 59, 1, 221, 47, 59, 1, 247, 74, 59, 1, 247, 70, 59, 1, 219, 7, 59, 1, - 217, 80, 59, 1, 217, 114, 59, 1, 255, 151, 59, 1, 184, 59, 1, 203, 59, 1, - 235, 188, 59, 1, 225, 25, 59, 1, 223, 218, 59, 1, 226, 177, 59, 1, 155, - 59, 1, 60, 59, 1, 236, 10, 59, 1, 245, 167, 203, 59, 1, 236, 74, 59, 1, - 227, 52, 59, 29, 5, 255, 58, 59, 29, 5, 72, 59, 29, 5, 237, 255, 59, 29, - 5, 68, 59, 29, 5, 220, 23, 59, 29, 5, 167, 152, 59, 29, 5, 167, 227, 53, - 59, 29, 5, 167, 153, 59, 29, 5, 167, 235, 18, 59, 29, 5, 73, 59, 29, 5, - 246, 250, 59, 29, 5, 74, 59, 29, 5, 230, 127, 59, 5, 227, 81, 223, 104, - 232, 116, 227, 75, 59, 5, 227, 80, 252, 145, 59, 29, 5, 210, 72, 59, 29, - 5, 210, 237, 255, 59, 5, 231, 68, 217, 24, 232, 236, 249, 207, 59, 5, - 224, 37, 235, 124, 59, 164, 243, 196, 59, 164, 230, 21, 59, 5, 235, 127, - 227, 25, 59, 5, 218, 46, 227, 25, 59, 5, 235, 128, 221, 56, 251, 154, 59, - 5, 234, 28, 251, 154, 59, 5, 244, 22, 251, 155, 227, 152, 59, 5, 244, 22, - 234, 20, 227, 152, 59, 223, 97, 1, 175, 59, 223, 97, 1, 236, 149, 59, - 223, 97, 1, 245, 0, 59, 223, 97, 1, 244, 125, 59, 223, 97, 1, 232, 115, - 59, 223, 97, 1, 251, 169, 59, 223, 97, 1, 251, 69, 59, 223, 97, 1, 237, - 123, 59, 223, 97, 1, 231, 77, 59, 223, 97, 1, 221, 29, 59, 223, 97, 1, - 221, 19, 59, 223, 97, 1, 249, 132, 59, 223, 97, 1, 249, 116, 59, 223, 97, - 1, 231, 217, 59, 223, 97, 1, 222, 155, 59, 223, 97, 1, 222, 35, 59, 223, - 97, 1, 249, 207, 59, 223, 97, 1, 249, 36, 59, 223, 97, 1, 208, 59, 223, - 97, 1, 187, 59, 223, 97, 1, 229, 141, 59, 223, 97, 1, 252, 237, 59, 223, - 97, 1, 252, 94, 59, 223, 97, 1, 196, 59, 223, 97, 1, 221, 55, 59, 223, - 97, 1, 221, 47, 59, 223, 97, 1, 247, 74, 59, 223, 97, 1, 247, 70, 59, - 223, 97, 1, 219, 7, 59, 223, 97, 1, 217, 80, 59, 223, 97, 1, 217, 114, - 59, 223, 97, 1, 255, 151, 59, 223, 97, 1, 184, 59, 223, 97, 1, 203, 59, - 223, 97, 1, 235, 188, 59, 223, 97, 1, 225, 25, 59, 223, 97, 1, 223, 218, - 59, 223, 97, 1, 226, 177, 59, 223, 97, 1, 155, 59, 223, 97, 1, 60, 59, - 223, 97, 1, 236, 10, 59, 223, 97, 1, 245, 167, 219, 7, 59, 223, 97, 1, - 245, 167, 184, 59, 223, 97, 1, 245, 167, 203, 59, 236, 8, 227, 23, 236, - 149, 59, 236, 8, 227, 23, 236, 150, 251, 205, 233, 172, 251, 154, 59, - 251, 144, 5, 106, 252, 140, 59, 251, 144, 5, 170, 252, 140, 59, 251, 144, - 5, 251, 145, 222, 86, 59, 251, 144, 5, 226, 114, 255, 150, 59, 16, 247, - 121, 251, 248, 59, 16, 227, 217, 227, 82, 59, 16, 230, 35, 244, 192, 59, - 16, 227, 217, 227, 83, 227, 154, 244, 43, 59, 16, 229, 112, 187, 59, 16, - 231, 190, 251, 248, 59, 16, 231, 190, 251, 249, 231, 60, 255, 147, 59, - 16, 231, 190, 251, 249, 244, 21, 255, 147, 59, 16, 231, 190, 251, 249, - 251, 205, 255, 147, 59, 5, 227, 218, 232, 230, 227, 218, 248, 178, 59, 5, - 227, 218, 232, 230, 244, 20, 59, 164, 251, 252, 224, 197, 244, 104, 233, - 213, 227, 153, 59, 164, 233, 138, 217, 243, 244, 104, 233, 213, 227, 153, - 59, 164, 231, 60, 221, 44, 59, 164, 66, 252, 12, 227, 77, 217, 243, 233, - 213, 234, 27, 196, 59, 164, 250, 194, 252, 12, 227, 77, 217, 243, 233, - 213, 225, 31, 196, 227, 108, 223, 38, 55, 235, 114, 223, 38, 55, 227, - 108, 223, 38, 5, 2, 248, 143, 235, 114, 223, 38, 5, 2, 248, 143, 63, 1, - 175, 63, 1, 236, 149, 63, 1, 245, 0, 63, 1, 244, 125, 63, 1, 232, 115, - 63, 1, 251, 169, 63, 1, 251, 69, 63, 1, 237, 123, 63, 1, 237, 103, 63, 1, - 231, 77, 63, 1, 231, 206, 63, 1, 221, 29, 63, 1, 221, 19, 63, 1, 249, - 132, 63, 1, 249, 116, 63, 1, 231, 217, 63, 1, 222, 155, 63, 1, 222, 35, - 63, 1, 249, 207, 63, 1, 249, 36, 63, 1, 208, 63, 1, 187, 63, 1, 229, 141, - 63, 1, 252, 237, 63, 1, 252, 94, 63, 1, 196, 63, 1, 184, 63, 1, 203, 63, - 1, 235, 188, 63, 1, 219, 7, 63, 1, 226, 177, 63, 1, 155, 63, 1, 235, 17, - 63, 1, 60, 63, 1, 225, 10, 60, 63, 1, 72, 63, 1, 237, 255, 63, 1, 68, 63, - 1, 220, 23, 63, 1, 73, 63, 1, 233, 128, 73, 63, 1, 74, 63, 1, 253, 232, - 63, 29, 5, 222, 123, 255, 58, 63, 29, 5, 255, 58, 63, 29, 5, 72, 63, 29, - 5, 237, 255, 63, 29, 5, 68, 63, 29, 5, 220, 23, 63, 29, 5, 73, 63, 29, 5, - 254, 196, 63, 29, 5, 233, 128, 237, 255, 63, 29, 5, 233, 128, 74, 63, 29, - 5, 178, 50, 63, 5, 254, 95, 63, 5, 61, 56, 63, 5, 219, 77, 63, 5, 219, - 82, 63, 5, 254, 11, 63, 250, 147, 5, 128, 184, 63, 250, 147, 5, 128, 203, - 63, 250, 147, 5, 128, 219, 7, 63, 250, 147, 5, 128, 155, 63, 1, 244, 32, - 226, 177, 63, 20, 217, 84, 63, 20, 107, 63, 20, 103, 63, 20, 160, 63, 20, - 154, 63, 20, 174, 63, 20, 182, 63, 20, 191, 63, 20, 185, 63, 20, 190, 63, - 5, 235, 25, 226, 86, 63, 5, 226, 86, 63, 16, 235, 9, 63, 16, 250, 163, - 63, 16, 254, 213, 63, 16, 244, 178, 63, 1, 225, 25, 63, 1, 223, 218, 63, - 1, 167, 152, 63, 1, 167, 227, 53, 63, 1, 167, 153, 63, 1, 167, 235, 18, - 63, 29, 5, 167, 152, 63, 29, 5, 167, 227, 53, 63, 29, 5, 167, 153, 63, - 29, 5, 167, 235, 18, 63, 1, 233, 128, 232, 115, 63, 1, 233, 128, 237, - 103, 63, 1, 233, 128, 252, 178, 63, 1, 233, 128, 252, 174, 63, 250, 147, - 5, 233, 128, 128, 208, 63, 250, 147, 5, 233, 128, 128, 196, 63, 250, 147, - 5, 233, 128, 128, 235, 188, 63, 1, 225, 30, 236, 213, 225, 25, 63, 29, 5, - 225, 30, 236, 213, 246, 115, 63, 145, 164, 225, 30, 236, 213, 243, 170, - 63, 145, 164, 225, 30, 236, 213, 236, 185, 229, 118, 63, 1, 218, 215, - 228, 175, 236, 213, 222, 35, 63, 1, 218, 215, 228, 175, 236, 213, 228, - 181, 63, 29, 5, 218, 215, 228, 175, 236, 213, 246, 115, 63, 29, 5, 218, - 215, 228, 175, 236, 213, 220, 110, 63, 5, 218, 215, 228, 175, 236, 213, - 221, 131, 63, 5, 218, 215, 228, 175, 236, 213, 221, 130, 63, 5, 218, 215, - 228, 175, 236, 213, 221, 129, 63, 5, 218, 215, 228, 175, 236, 213, 221, - 128, 63, 5, 218, 215, 228, 175, 236, 213, 221, 127, 63, 1, 247, 4, 228, - 175, 236, 213, 231, 217, 63, 1, 247, 4, 228, 175, 236, 213, 217, 173, 63, - 1, 247, 4, 228, 175, 236, 213, 244, 106, 63, 29, 5, 244, 188, 236, 213, - 72, 63, 29, 5, 236, 190, 230, 167, 63, 29, 5, 236, 190, 68, 63, 29, 5, - 236, 190, 246, 250, 63, 1, 225, 10, 175, 63, 1, 225, 10, 236, 149, 63, 1, - 225, 10, 245, 0, 63, 1, 225, 10, 251, 169, 63, 1, 225, 10, 217, 114, 63, - 1, 225, 10, 231, 77, 63, 1, 225, 10, 249, 207, 63, 1, 225, 10, 208, 63, - 1, 225, 10, 229, 141, 63, 1, 225, 10, 246, 8, 63, 1, 225, 10, 252, 237, - 63, 1, 225, 10, 222, 35, 63, 1, 225, 10, 155, 63, 250, 147, 5, 225, 10, - 128, 219, 7, 63, 29, 5, 225, 10, 255, 58, 63, 29, 5, 225, 10, 73, 63, 29, - 5, 225, 10, 178, 50, 63, 29, 5, 225, 10, 39, 218, 90, 63, 5, 225, 10, - 221, 130, 63, 5, 225, 10, 221, 129, 63, 5, 225, 10, 221, 127, 63, 5, 225, - 10, 221, 126, 63, 5, 225, 10, 250, 115, 221, 130, 63, 5, 225, 10, 250, - 115, 221, 129, 63, 5, 225, 10, 250, 115, 246, 200, 221, 132, 63, 1, 227, - 12, 230, 26, 246, 8, 63, 5, 227, 12, 230, 26, 221, 127, 63, 225, 10, 20, - 217, 84, 63, 225, 10, 20, 107, 63, 225, 10, 20, 103, 63, 225, 10, 20, - 160, 63, 225, 10, 20, 154, 63, 225, 10, 20, 174, 63, 225, 10, 20, 182, - 63, 225, 10, 20, 191, 63, 225, 10, 20, 185, 63, 225, 10, 20, 190, 63, 5, - 236, 143, 221, 131, 63, 5, 236, 143, 221, 129, 63, 29, 5, 254, 186, 60, - 63, 29, 5, 254, 186, 254, 196, 63, 16, 225, 10, 107, 63, 16, 225, 10, - 246, 94, 95, 6, 1, 254, 131, 95, 6, 1, 252, 209, 95, 6, 1, 244, 230, 95, - 6, 1, 248, 153, 95, 6, 1, 246, 197, 95, 6, 1, 219, 85, 95, 6, 1, 217, 87, - 95, 6, 1, 222, 119, 95, 6, 1, 237, 223, 95, 6, 1, 236, 233, 95, 6, 1, - 235, 143, 95, 6, 1, 234, 86, 95, 6, 1, 232, 211, 95, 6, 1, 230, 138, 95, - 6, 1, 229, 243, 95, 6, 1, 217, 76, 95, 6, 1, 227, 249, 95, 6, 1, 226, - 140, 95, 6, 1, 222, 112, 95, 6, 1, 220, 87, 95, 6, 1, 229, 134, 95, 6, 1, - 236, 138, 95, 6, 1, 244, 119, 95, 6, 1, 228, 140, 95, 6, 1, 224, 209, 95, - 6, 1, 251, 22, 95, 6, 1, 251, 154, 95, 6, 1, 237, 91, 95, 6, 1, 250, 224, - 95, 6, 1, 251, 56, 95, 6, 1, 218, 136, 95, 6, 1, 237, 101, 95, 6, 1, 243, - 208, 95, 6, 1, 243, 162, 95, 6, 1, 243, 108, 95, 6, 1, 218, 227, 95, 6, - 1, 243, 182, 95, 6, 1, 243, 2, 95, 1, 254, 131, 95, 1, 252, 209, 95, 1, - 244, 230, 95, 1, 248, 153, 95, 1, 246, 197, 95, 1, 219, 85, 95, 1, 217, - 87, 95, 1, 222, 119, 95, 1, 237, 223, 95, 1, 236, 233, 95, 1, 235, 143, - 95, 1, 234, 86, 95, 1, 232, 211, 95, 1, 230, 138, 95, 1, 229, 243, 95, 1, - 217, 76, 95, 1, 227, 249, 95, 1, 226, 140, 95, 1, 222, 112, 95, 1, 220, - 87, 95, 1, 229, 134, 95, 1, 236, 138, 95, 1, 244, 119, 95, 1, 228, 140, - 95, 1, 224, 209, 95, 1, 251, 22, 95, 1, 251, 154, 95, 1, 237, 91, 95, 1, - 250, 224, 95, 1, 251, 56, 95, 1, 218, 136, 95, 1, 237, 101, 95, 1, 243, - 208, 95, 1, 243, 162, 95, 1, 243, 108, 95, 1, 218, 227, 95, 1, 243, 182, - 95, 1, 243, 2, 95, 1, 245, 203, 95, 1, 217, 233, 95, 1, 246, 210, 95, 1, - 215, 244, 230, 95, 1, 254, 191, 95, 229, 241, 225, 54, 58, 1, 95, 232, - 211, 22, 91, 236, 86, 22, 91, 223, 211, 22, 91, 232, 55, 22, 91, 221, - 192, 22, 91, 223, 200, 22, 91, 227, 140, 22, 91, 233, 187, 22, 91, 229, - 99, 22, 91, 223, 208, 22, 91, 224, 104, 22, 91, 223, 205, 22, 91, 238, - 22, 22, 91, 250, 230, 22, 91, 223, 215, 22, 91, 251, 29, 22, 91, 236, - 128, 22, 91, 222, 0, 22, 91, 229, 127, 22, 91, 243, 106, 22, 91, 232, 51, - 22, 91, 223, 209, 22, 91, 232, 45, 22, 91, 232, 49, 22, 91, 221, 189, 22, - 91, 227, 128, 22, 91, 223, 207, 22, 91, 227, 138, 22, 91, 236, 217, 22, - 91, 233, 180, 22, 91, 236, 220, 22, 91, 229, 94, 22, 91, 229, 92, 22, 91, - 229, 80, 22, 91, 229, 88, 22, 91, 229, 86, 22, 91, 229, 83, 22, 91, 229, - 85, 22, 91, 229, 82, 22, 91, 229, 87, 22, 91, 229, 97, 22, 91, 229, 98, - 22, 91, 229, 81, 22, 91, 229, 91, 22, 91, 236, 218, 22, 91, 236, 216, 22, - 91, 224, 97, 22, 91, 224, 95, 22, 91, 224, 87, 22, 91, 224, 90, 22, 91, - 224, 96, 22, 91, 224, 92, 22, 91, 224, 91, 22, 91, 224, 89, 22, 91, 224, - 100, 22, 91, 224, 102, 22, 91, 224, 103, 22, 91, 224, 98, 22, 91, 224, - 88, 22, 91, 224, 93, 22, 91, 224, 101, 22, 91, 251, 15, 22, 91, 251, 13, - 22, 91, 251, 78, 22, 91, 251, 76, 22, 91, 230, 1, 22, 91, 238, 17, 22, - 91, 238, 8, 22, 91, 238, 16, 22, 91, 238, 13, 22, 91, 238, 11, 22, 91, - 238, 15, 22, 91, 223, 212, 22, 91, 238, 20, 22, 91, 238, 21, 22, 91, 238, - 9, 22, 91, 238, 14, 22, 91, 218, 6, 22, 91, 250, 229, 22, 91, 251, 16, - 22, 91, 251, 14, 22, 91, 251, 79, 22, 91, 251, 77, 22, 91, 251, 27, 22, - 91, 251, 28, 22, 91, 251, 17, 22, 91, 251, 80, 22, 91, 229, 125, 22, 91, - 236, 219, 22, 91, 223, 213, 22, 91, 218, 12, 22, 91, 236, 77, 22, 91, - 232, 47, 22, 91, 232, 53, 22, 91, 232, 52, 22, 91, 221, 186, 22, 91, 245, - 185, 22, 122, 245, 185, 22, 122, 60, 22, 122, 254, 234, 22, 122, 184, 22, - 122, 218, 65, 22, 122, 246, 168, 22, 122, 73, 22, 122, 218, 16, 22, 122, - 218, 25, 22, 122, 74, 22, 122, 219, 7, 22, 122, 219, 4, 22, 122, 230, - 167, 22, 122, 217, 231, 22, 122, 68, 22, 122, 218, 219, 22, 122, 218, - 227, 22, 122, 218, 204, 22, 122, 217, 200, 22, 122, 246, 115, 22, 122, - 217, 250, 22, 122, 72, 22, 122, 255, 142, 22, 122, 255, 141, 22, 122, - 218, 79, 22, 122, 218, 77, 22, 122, 246, 166, 22, 122, 246, 165, 22, 122, - 246, 167, 22, 122, 218, 15, 22, 122, 218, 14, 22, 122, 231, 13, 22, 122, - 231, 14, 22, 122, 231, 7, 22, 122, 231, 12, 22, 122, 231, 10, 22, 122, - 217, 225, 22, 122, 217, 224, 22, 122, 217, 223, 22, 122, 217, 226, 22, - 122, 217, 227, 22, 122, 220, 179, 22, 122, 220, 178, 22, 122, 220, 177, - 22, 122, 220, 174, 22, 122, 220, 175, 22, 122, 217, 199, 22, 122, 217, - 196, 22, 122, 217, 197, 22, 122, 217, 191, 22, 122, 217, 192, 22, 122, - 217, 193, 22, 122, 217, 195, 22, 122, 246, 109, 22, 122, 246, 111, 22, - 122, 217, 249, 22, 122, 242, 106, 22, 122, 242, 98, 22, 122, 242, 101, - 22, 122, 242, 99, 22, 122, 242, 103, 22, 122, 242, 105, 22, 122, 254, 60, - 22, 122, 254, 57, 22, 122, 254, 55, 22, 122, 254, 56, 22, 122, 223, 216, - 22, 122, 255, 143, 22, 122, 218, 78, 22, 122, 218, 13, 22, 122, 231, 9, - 22, 122, 231, 8, 22, 85, 236, 86, 22, 85, 223, 211, 22, 85, 236, 79, 22, - 85, 232, 55, 22, 85, 232, 53, 22, 85, 232, 52, 22, 85, 221, 192, 22, 85, - 227, 140, 22, 85, 227, 135, 22, 85, 227, 132, 22, 85, 227, 125, 22, 85, - 227, 120, 22, 85, 227, 115, 22, 85, 227, 126, 22, 85, 227, 138, 22, 85, - 233, 187, 22, 85, 229, 99, 22, 85, 229, 88, 22, 85, 224, 104, 22, 85, - 223, 205, 22, 85, 238, 22, 22, 85, 250, 230, 22, 85, 251, 29, 22, 85, - 236, 128, 22, 85, 222, 0, 22, 85, 229, 127, 22, 85, 243, 106, 22, 85, - 236, 80, 22, 85, 236, 78, 22, 85, 232, 51, 22, 85, 232, 45, 22, 85, 232, - 47, 22, 85, 232, 50, 22, 85, 232, 46, 22, 85, 221, 189, 22, 85, 221, 186, - 22, 85, 227, 133, 22, 85, 227, 128, 22, 85, 227, 114, 22, 85, 227, 113, - 22, 85, 223, 207, 22, 85, 227, 130, 22, 85, 227, 129, 22, 85, 227, 122, - 22, 85, 227, 124, 22, 85, 227, 137, 22, 85, 227, 117, 22, 85, 227, 127, - 22, 85, 227, 136, 22, 85, 227, 112, 22, 85, 233, 183, 22, 85, 233, 178, - 22, 85, 233, 180, 22, 85, 233, 177, 22, 85, 233, 175, 22, 85, 233, 181, - 22, 85, 233, 186, 22, 85, 233, 184, 22, 85, 236, 220, 22, 85, 229, 90, - 22, 85, 229, 91, 22, 85, 229, 96, 22, 85, 236, 218, 22, 85, 224, 97, 22, - 85, 224, 87, 22, 85, 224, 90, 22, 85, 224, 92, 22, 85, 230, 1, 22, 85, - 238, 17, 22, 85, 238, 10, 22, 85, 223, 212, 22, 85, 238, 18, 22, 85, 218, - 6, 22, 85, 218, 2, 22, 85, 218, 3, 22, 85, 229, 125, 22, 85, 236, 219, - 22, 85, 243, 104, 22, 85, 243, 102, 22, 85, 243, 105, 22, 85, 243, 103, - 22, 85, 218, 12, 22, 85, 236, 82, 22, 85, 236, 81, 22, 85, 236, 85, 22, - 85, 236, 83, 22, 85, 236, 84, 22, 85, 223, 209, 28, 4, 155, 28, 4, 242, - 173, 28, 4, 243, 112, 28, 4, 243, 211, 28, 4, 243, 148, 28, 4, 243, 162, - 28, 4, 243, 4, 28, 4, 243, 3, 28, 4, 235, 188, 28, 4, 234, 231, 28, 4, - 235, 67, 28, 4, 235, 187, 28, 4, 235, 118, 28, 4, 235, 122, 28, 4, 235, - 12, 28, 4, 234, 206, 28, 4, 243, 121, 28, 4, 243, 115, 28, 4, 243, 117, - 28, 4, 243, 120, 28, 4, 243, 118, 28, 4, 243, 119, 28, 4, 243, 116, 28, - 4, 243, 114, 28, 4, 196, 28, 4, 233, 99, 28, 4, 233, 196, 28, 4, 234, - 118, 28, 4, 234, 16, 28, 4, 234, 25, 28, 4, 233, 136, 28, 4, 233, 49, 28, - 4, 222, 212, 28, 4, 222, 206, 28, 4, 222, 208, 28, 4, 222, 211, 28, 4, - 222, 209, 28, 4, 222, 210, 28, 4, 222, 207, 28, 4, 222, 205, 28, 4, 203, - 28, 4, 227, 22, 28, 4, 227, 147, 28, 4, 228, 0, 28, 4, 227, 200, 28, 4, - 227, 216, 28, 4, 227, 75, 28, 4, 226, 252, 28, 4, 226, 177, 28, 4, 223, - 103, 28, 4, 224, 140, 28, 4, 226, 175, 28, 4, 226, 84, 28, 4, 226, 94, - 28, 4, 224, 26, 28, 4, 223, 36, 28, 4, 225, 25, 28, 4, 224, 170, 28, 4, - 224, 221, 28, 4, 225, 21, 28, 4, 224, 244, 28, 4, 224, 246, 28, 4, 224, - 200, 28, 4, 224, 157, 28, 4, 228, 155, 28, 4, 228, 98, 28, 4, 228, 121, - 28, 4, 228, 154, 28, 4, 228, 135, 28, 4, 228, 136, 28, 4, 228, 110, 28, - 4, 228, 109, 28, 4, 228, 57, 28, 4, 228, 53, 28, 4, 228, 56, 28, 4, 228, - 54, 28, 4, 228, 55, 28, 4, 228, 133, 28, 4, 228, 127, 28, 4, 228, 129, - 28, 4, 228, 132, 28, 4, 228, 130, 28, 4, 228, 131, 28, 4, 228, 128, 28, - 4, 228, 126, 28, 4, 228, 122, 28, 4, 228, 125, 28, 4, 228, 123, 28, 4, - 228, 124, 28, 4, 252, 237, 28, 4, 251, 248, 28, 4, 252, 84, 28, 4, 252, - 236, 28, 4, 252, 137, 28, 4, 252, 144, 28, 4, 252, 41, 28, 4, 251, 218, - 28, 4, 219, 189, 28, 4, 219, 56, 28, 4, 219, 94, 28, 4, 219, 188, 28, 4, - 219, 160, 28, 4, 219, 165, 28, 4, 219, 72, 28, 4, 219, 49, 28, 4, 222, - 155, 28, 4, 221, 0, 28, 4, 221, 205, 28, 4, 222, 152, 28, 4, 222, 80, 28, - 4, 222, 87, 28, 4, 101, 28, 4, 220, 225, 28, 4, 251, 169, 28, 4, 250, 92, - 28, 4, 250, 235, 28, 4, 251, 168, 28, 4, 251, 91, 28, 4, 251, 99, 28, 4, - 250, 182, 28, 4, 250, 66, 28, 4, 218, 138, 28, 4, 218, 114, 28, 4, 218, - 130, 28, 4, 218, 137, 28, 4, 218, 134, 28, 4, 218, 135, 28, 4, 218, 121, - 28, 4, 218, 120, 28, 4, 218, 109, 28, 4, 218, 105, 28, 4, 218, 108, 28, - 4, 218, 106, 28, 4, 218, 107, 28, 4, 208, 28, 4, 231, 144, 28, 4, 232, - 62, 28, 4, 232, 235, 28, 4, 232, 139, 28, 4, 232, 141, 28, 4, 231, 204, - 28, 4, 231, 85, 28, 4, 231, 77, 28, 4, 231, 50, 28, 4, 231, 67, 28, 4, - 231, 76, 28, 4, 231, 72, 28, 4, 231, 73, 28, 4, 231, 56, 28, 4, 231, 43, - 28, 4, 244, 73, 60, 28, 4, 244, 73, 68, 28, 4, 244, 73, 72, 28, 4, 244, - 73, 255, 58, 28, 4, 244, 73, 246, 250, 28, 4, 244, 73, 73, 28, 4, 244, - 73, 74, 28, 4, 244, 73, 219, 7, 28, 4, 175, 28, 4, 236, 7, 28, 4, 236, - 113, 28, 4, 237, 5, 28, 4, 236, 183, 28, 4, 236, 184, 28, 4, 236, 57, 28, - 4, 236, 56, 28, 4, 235, 234, 28, 4, 235, 229, 28, 4, 235, 233, 28, 4, - 235, 230, 28, 4, 235, 231, 28, 4, 235, 224, 28, 4, 235, 218, 28, 4, 235, - 220, 28, 4, 235, 223, 28, 4, 235, 221, 28, 4, 235, 222, 28, 4, 235, 219, - 28, 4, 235, 217, 28, 4, 235, 213, 28, 4, 235, 216, 28, 4, 235, 214, 28, - 4, 235, 215, 28, 4, 219, 7, 28, 4, 218, 165, 28, 4, 218, 204, 28, 4, 219, - 6, 28, 4, 218, 224, 28, 4, 218, 227, 28, 4, 218, 187, 28, 4, 218, 186, - 28, 4, 229, 133, 60, 28, 4, 229, 133, 68, 28, 4, 229, 133, 72, 28, 4, - 229, 133, 255, 58, 28, 4, 229, 133, 246, 250, 28, 4, 229, 133, 73, 28, 4, - 229, 133, 74, 28, 4, 217, 114, 28, 4, 217, 13, 28, 4, 217, 42, 28, 4, - 217, 113, 28, 4, 217, 90, 28, 4, 217, 92, 28, 4, 217, 21, 28, 4, 217, 0, - 28, 4, 217, 80, 28, 4, 217, 60, 28, 4, 217, 67, 28, 4, 217, 79, 28, 4, - 217, 71, 28, 4, 217, 72, 28, 4, 217, 65, 28, 4, 217, 51, 28, 4, 184, 28, - 4, 217, 200, 28, 4, 217, 250, 28, 4, 218, 76, 28, 4, 218, 22, 28, 4, 218, - 25, 28, 4, 217, 231, 28, 4, 217, 222, 28, 4, 249, 207, 28, 4, 247, 111, - 28, 4, 249, 15, 28, 4, 249, 206, 28, 4, 249, 82, 28, 4, 249, 92, 28, 4, - 248, 167, 28, 4, 247, 83, 28, 4, 249, 132, 28, 4, 249, 102, 28, 4, 249, - 114, 28, 4, 249, 131, 28, 4, 249, 119, 28, 4, 249, 120, 28, 4, 249, 107, - 28, 4, 249, 93, 28, 4, 237, 123, 28, 4, 237, 43, 28, 4, 237, 98, 28, 4, - 237, 122, 28, 4, 237, 113, 28, 4, 237, 114, 28, 4, 237, 59, 28, 4, 237, - 25, 28, 4, 245, 0, 28, 4, 244, 17, 28, 4, 244, 103, 28, 4, 244, 253, 28, - 4, 244, 184, 28, 4, 244, 191, 28, 4, 244, 68, 28, 4, 244, 67, 28, 4, 243, - 243, 28, 4, 243, 239, 28, 4, 243, 242, 28, 4, 243, 240, 28, 4, 243, 241, - 28, 4, 244, 160, 28, 4, 244, 140, 28, 4, 244, 150, 28, 4, 244, 159, 28, - 4, 244, 154, 28, 4, 244, 155, 28, 4, 244, 144, 28, 4, 244, 129, 28, 4, - 222, 35, 28, 4, 221, 223, 28, 4, 222, 2, 28, 4, 222, 34, 28, 4, 222, 21, - 28, 4, 222, 22, 28, 4, 221, 239, 28, 4, 221, 216, 28, 4, 251, 69, 28, 4, - 250, 253, 28, 4, 251, 31, 28, 4, 251, 68, 28, 4, 251, 43, 28, 4, 251, 46, - 28, 4, 251, 11, 28, 4, 250, 242, 28, 4, 229, 141, 28, 4, 229, 114, 28, 4, - 229, 129, 28, 4, 229, 140, 28, 4, 229, 131, 28, 4, 229, 132, 28, 4, 229, - 118, 28, 4, 229, 110, 28, 4, 221, 55, 28, 4, 221, 36, 28, 4, 221, 39, 28, - 4, 221, 54, 28, 4, 221, 49, 28, 4, 221, 50, 28, 4, 221, 38, 28, 4, 221, - 34, 28, 4, 220, 188, 28, 4, 220, 180, 28, 4, 220, 184, 28, 4, 220, 187, - 28, 4, 220, 185, 28, 4, 220, 186, 28, 4, 220, 182, 28, 4, 220, 181, 28, - 4, 246, 8, 28, 4, 245, 92, 28, 4, 245, 203, 28, 4, 246, 7, 28, 4, 245, - 226, 28, 4, 245, 231, 28, 4, 245, 139, 28, 4, 245, 78, 28, 4, 187, 28, 4, - 228, 202, 28, 4, 229, 108, 28, 4, 230, 43, 28, 4, 229, 191, 28, 4, 229, - 198, 28, 4, 229, 37, 28, 4, 228, 181, 28, 4, 226, 242, 28, 4, 233, 39, - 28, 4, 245, 72, 28, 36, 244, 183, 78, 28, 226, 87, 78, 28, 218, 173, 28, - 245, 90, 223, 136, 28, 250, 168, 28, 225, 67, 28, 250, 175, 28, 228, 242, - 250, 175, 28, 228, 82, 78, 28, 229, 241, 225, 54, 28, 20, 107, 28, 20, - 103, 28, 20, 160, 28, 20, 154, 28, 20, 174, 28, 20, 182, 28, 20, 191, 28, - 20, 185, 28, 20, 190, 28, 54, 222, 65, 28, 54, 220, 219, 28, 54, 221, - 245, 28, 54, 245, 119, 28, 54, 245, 196, 28, 54, 224, 69, 28, 54, 225, - 38, 28, 54, 246, 227, 28, 54, 232, 27, 28, 54, 242, 161, 28, 54, 222, 66, - 221, 231, 28, 4, 226, 91, 233, 49, 28, 4, 233, 45, 28, 4, 233, 46, 28, 4, - 233, 47, 28, 4, 226, 91, 251, 218, 28, 4, 251, 215, 28, 4, 251, 216, 28, - 4, 251, 217, 28, 4, 226, 91, 245, 78, 28, 4, 245, 74, 28, 4, 245, 75, 28, - 4, 245, 76, 28, 4, 226, 91, 228, 181, 28, 4, 228, 177, 28, 4, 228, 178, - 28, 4, 228, 179, 28, 221, 133, 164, 217, 234, 28, 221, 133, 164, 249, 50, - 28, 221, 133, 164, 227, 97, 28, 221, 133, 164, 224, 192, 227, 97, 28, - 221, 133, 164, 248, 248, 28, 221, 133, 164, 236, 167, 28, 221, 133, 164, - 251, 19, 28, 221, 133, 164, 243, 110, 28, 221, 133, 164, 249, 49, 28, - 221, 133, 164, 235, 245, 143, 1, 60, 143, 1, 73, 143, 1, 72, 143, 1, 74, - 143, 1, 68, 143, 1, 216, 216, 143, 1, 245, 0, 143, 1, 175, 143, 1, 244, - 191, 143, 1, 244, 103, 143, 1, 244, 68, 143, 1, 244, 17, 143, 1, 243, - 244, 143, 1, 155, 143, 1, 243, 162, 143, 1, 243, 112, 143, 1, 243, 4, - 143, 1, 242, 173, 143, 1, 242, 154, 143, 1, 235, 188, 143, 1, 235, 122, - 143, 1, 235, 67, 143, 1, 235, 12, 143, 1, 234, 231, 143, 1, 234, 207, - 143, 1, 196, 143, 1, 234, 25, 143, 1, 233, 196, 143, 1, 233, 136, 143, 1, - 233, 99, 143, 1, 208, 143, 1, 243, 26, 143, 1, 232, 224, 143, 1, 232, - 141, 143, 1, 232, 62, 143, 1, 231, 204, 143, 1, 231, 144, 143, 1, 231, - 87, 143, 1, 228, 97, 143, 1, 228, 84, 143, 1, 228, 78, 143, 1, 228, 72, - 143, 1, 228, 61, 143, 1, 228, 59, 143, 1, 226, 177, 143, 1, 198, 143, 1, - 226, 94, 143, 1, 224, 140, 143, 1, 224, 26, 143, 1, 223, 103, 143, 1, - 223, 41, 143, 1, 249, 207, 143, 1, 222, 155, 143, 1, 249, 92, 143, 1, - 222, 87, 143, 1, 249, 15, 143, 1, 221, 205, 143, 1, 248, 167, 143, 1, - 247, 111, 143, 1, 247, 85, 143, 1, 248, 176, 143, 1, 221, 155, 143, 1, - 221, 154, 143, 1, 221, 144, 143, 1, 221, 143, 143, 1, 221, 142, 143, 1, - 221, 141, 143, 1, 221, 55, 143, 1, 221, 50, 143, 1, 221, 39, 143, 1, 221, - 38, 143, 1, 221, 36, 143, 1, 221, 35, 143, 1, 219, 7, 143, 1, 218, 227, - 143, 1, 218, 204, 143, 1, 218, 187, 143, 1, 218, 165, 143, 1, 218, 156, - 143, 1, 184, 143, 1, 218, 25, 143, 1, 217, 250, 143, 1, 217, 231, 143, 1, - 217, 200, 143, 1, 217, 174, 18, 19, 242, 121, 18, 19, 73, 18, 19, 255, - 22, 18, 19, 72, 18, 19, 237, 255, 18, 19, 74, 18, 19, 230, 127, 18, 19, - 218, 89, 230, 127, 18, 19, 64, 246, 250, 18, 19, 64, 72, 18, 19, 60, 18, - 19, 255, 58, 18, 19, 218, 227, 18, 19, 137, 218, 227, 18, 19, 218, 204, - 18, 19, 137, 218, 204, 18, 19, 218, 196, 18, 19, 137, 218, 196, 18, 19, - 218, 187, 18, 19, 137, 218, 187, 18, 19, 218, 180, 18, 19, 137, 218, 180, - 18, 19, 232, 207, 218, 180, 18, 19, 219, 7, 18, 19, 137, 219, 7, 18, 19, - 219, 6, 18, 19, 137, 219, 6, 18, 19, 232, 207, 219, 6, 18, 19, 254, 196, - 18, 19, 218, 89, 219, 40, 18, 19, 244, 73, 223, 136, 18, 19, 39, 168, 18, - 19, 39, 244, 36, 18, 19, 39, 252, 29, 144, 227, 93, 18, 19, 39, 221, 120, - 144, 227, 93, 18, 19, 39, 45, 144, 227, 93, 18, 19, 39, 227, 93, 18, 19, - 39, 51, 168, 18, 19, 39, 51, 224, 192, 69, 223, 107, 18, 19, 39, 233, - 193, 248, 145, 18, 19, 39, 224, 192, 186, 92, 18, 19, 39, 229, 43, 18, - 19, 39, 113, 222, 143, 18, 19, 246, 197, 18, 19, 237, 223, 18, 19, 230, - 138, 18, 19, 254, 131, 18, 19, 229, 198, 18, 19, 230, 41, 18, 19, 229, - 108, 18, 19, 229, 76, 18, 19, 229, 37, 18, 19, 229, 21, 18, 19, 218, 89, - 229, 21, 18, 19, 64, 243, 148, 18, 19, 64, 243, 112, 18, 19, 187, 18, 19, - 230, 43, 18, 19, 228, 179, 18, 19, 137, 228, 179, 18, 19, 228, 177, 18, - 19, 137, 228, 177, 18, 19, 228, 176, 18, 19, 137, 228, 176, 18, 19, 228, - 174, 18, 19, 137, 228, 174, 18, 19, 228, 173, 18, 19, 137, 228, 173, 18, - 19, 228, 181, 18, 19, 137, 228, 181, 18, 19, 228, 180, 18, 19, 137, 228, - 180, 18, 19, 218, 89, 228, 180, 18, 19, 230, 59, 18, 19, 137, 230, 59, - 18, 19, 64, 243, 225, 18, 19, 222, 87, 18, 19, 222, 150, 18, 19, 221, - 205, 18, 19, 221, 194, 18, 19, 101, 18, 19, 221, 122, 18, 19, 218, 89, - 221, 122, 18, 19, 64, 249, 82, 18, 19, 64, 249, 15, 18, 19, 222, 155, 18, - 19, 222, 152, 18, 19, 220, 223, 18, 19, 137, 220, 223, 18, 19, 220, 208, - 18, 19, 137, 220, 208, 18, 19, 220, 207, 18, 19, 137, 220, 207, 18, 19, - 103, 18, 19, 137, 103, 18, 19, 220, 203, 18, 19, 137, 220, 203, 18, 19, - 220, 225, 18, 19, 137, 220, 225, 18, 19, 220, 224, 18, 19, 137, 220, 224, - 18, 19, 232, 207, 220, 224, 18, 19, 222, 201, 18, 19, 221, 26, 18, 19, - 221, 12, 18, 19, 221, 11, 18, 19, 221, 29, 18, 19, 236, 184, 18, 19, 237, - 2, 18, 19, 236, 113, 18, 19, 236, 105, 18, 19, 236, 57, 18, 19, 236, 41, - 18, 19, 218, 89, 236, 41, 18, 19, 175, 18, 19, 237, 5, 18, 19, 235, 231, - 18, 19, 137, 235, 231, 18, 19, 235, 229, 18, 19, 137, 235, 229, 18, 19, - 235, 228, 18, 19, 137, 235, 228, 18, 19, 235, 227, 18, 19, 137, 235, 227, - 18, 19, 235, 226, 18, 19, 137, 235, 226, 18, 19, 235, 234, 18, 19, 137, - 235, 234, 18, 19, 235, 233, 18, 19, 137, 235, 233, 18, 19, 232, 207, 235, - 233, 18, 19, 237, 17, 18, 19, 235, 235, 18, 19, 224, 5, 236, 178, 18, 19, - 224, 5, 236, 106, 18, 19, 224, 5, 236, 53, 18, 19, 224, 5, 236, 245, 18, - 19, 251, 99, 18, 19, 251, 167, 18, 19, 250, 235, 18, 19, 250, 225, 18, - 19, 250, 182, 18, 19, 250, 130, 18, 19, 218, 89, 250, 130, 18, 19, 251, - 169, 18, 19, 251, 168, 18, 19, 250, 64, 18, 19, 137, 250, 64, 18, 19, - 250, 62, 18, 19, 137, 250, 62, 18, 19, 250, 61, 18, 19, 137, 250, 61, 18, - 19, 250, 60, 18, 19, 137, 250, 60, 18, 19, 250, 59, 18, 19, 137, 250, 59, - 18, 19, 250, 66, 18, 19, 137, 250, 66, 18, 19, 250, 65, 18, 19, 137, 250, - 65, 18, 19, 232, 207, 250, 65, 18, 19, 251, 202, 18, 19, 226, 116, 222, - 37, 18, 19, 234, 25, 18, 19, 234, 117, 18, 19, 233, 196, 18, 19, 233, - 171, 18, 19, 233, 136, 18, 19, 233, 119, 18, 19, 218, 89, 233, 119, 18, - 19, 196, 18, 19, 234, 118, 18, 19, 233, 47, 18, 19, 137, 233, 47, 18, 19, - 233, 45, 18, 19, 137, 233, 45, 18, 19, 233, 44, 18, 19, 137, 233, 44, 18, - 19, 233, 43, 18, 19, 137, 233, 43, 18, 19, 233, 42, 18, 19, 137, 233, 42, - 18, 19, 233, 49, 18, 19, 137, 233, 49, 18, 19, 233, 48, 18, 19, 137, 233, - 48, 18, 19, 232, 207, 233, 48, 18, 19, 189, 18, 19, 137, 189, 18, 19, - 233, 199, 18, 19, 253, 243, 189, 18, 19, 226, 116, 189, 18, 19, 232, 141, - 18, 19, 232, 234, 18, 19, 232, 62, 18, 19, 232, 38, 18, 19, 231, 204, 18, - 19, 231, 195, 18, 19, 218, 89, 231, 195, 18, 19, 208, 18, 19, 232, 235, - 18, 19, 231, 83, 18, 19, 137, 231, 83, 18, 19, 231, 85, 18, 19, 137, 231, - 85, 18, 19, 231, 84, 18, 19, 137, 231, 84, 18, 19, 232, 207, 231, 84, 18, - 19, 207, 18, 19, 64, 232, 117, 18, 19, 232, 67, 18, 19, 235, 122, 18, 19, - 235, 186, 18, 19, 235, 67, 18, 19, 235, 55, 18, 19, 235, 12, 18, 19, 234, - 248, 18, 19, 218, 89, 234, 248, 18, 19, 235, 188, 18, 19, 235, 187, 18, - 19, 234, 204, 18, 19, 137, 234, 204, 18, 19, 234, 203, 18, 19, 137, 234, - 203, 18, 19, 234, 202, 18, 19, 137, 234, 202, 18, 19, 234, 201, 18, 19, - 137, 234, 201, 18, 19, 234, 200, 18, 19, 137, 234, 200, 18, 19, 234, 206, - 18, 19, 137, 234, 206, 18, 19, 234, 205, 18, 19, 137, 234, 205, 18, 19, - 153, 18, 19, 137, 153, 18, 19, 128, 153, 18, 19, 226, 94, 18, 19, 226, - 173, 18, 19, 224, 140, 18, 19, 224, 125, 18, 19, 224, 26, 18, 19, 224, - 14, 18, 19, 218, 89, 224, 14, 18, 19, 226, 177, 18, 19, 226, 175, 18, 19, - 223, 32, 18, 19, 137, 223, 32, 18, 19, 223, 29, 18, 19, 137, 223, 29, 18, - 19, 223, 28, 18, 19, 137, 223, 28, 18, 19, 223, 27, 18, 19, 137, 223, 27, - 18, 19, 223, 26, 18, 19, 137, 223, 26, 18, 19, 223, 36, 18, 19, 137, 223, - 36, 18, 19, 223, 35, 18, 19, 137, 223, 35, 18, 19, 232, 207, 223, 35, 18, - 19, 198, 18, 19, 253, 243, 198, 18, 19, 223, 37, 18, 19, 252, 50, 198, - 18, 19, 233, 116, 224, 66, 18, 19, 232, 207, 224, 59, 18, 19, 232, 207, - 226, 233, 18, 19, 232, 207, 223, 228, 18, 19, 232, 207, 223, 105, 18, 19, - 232, 207, 224, 58, 18, 19, 232, 207, 226, 97, 18, 19, 224, 246, 18, 19, - 224, 221, 18, 19, 224, 216, 18, 19, 224, 200, 18, 19, 224, 195, 18, 19, - 225, 25, 18, 19, 225, 21, 18, 19, 224, 155, 18, 19, 137, 224, 155, 18, - 19, 224, 154, 18, 19, 137, 224, 154, 18, 19, 224, 153, 18, 19, 137, 224, - 153, 18, 19, 224, 152, 18, 19, 137, 224, 152, 18, 19, 224, 151, 18, 19, - 137, 224, 151, 18, 19, 224, 157, 18, 19, 137, 224, 157, 18, 19, 224, 156, - 18, 19, 137, 224, 156, 18, 19, 225, 27, 18, 19, 218, 25, 18, 19, 218, 74, - 18, 19, 217, 250, 18, 19, 217, 242, 18, 19, 217, 231, 18, 19, 217, 216, - 18, 19, 218, 89, 217, 216, 18, 19, 184, 18, 19, 218, 76, 18, 19, 217, - 171, 18, 19, 137, 217, 171, 18, 19, 217, 170, 18, 19, 137, 217, 170, 18, - 19, 217, 169, 18, 19, 137, 217, 169, 18, 19, 217, 168, 18, 19, 137, 217, - 168, 18, 19, 217, 167, 18, 19, 137, 217, 167, 18, 19, 217, 173, 18, 19, - 137, 217, 173, 18, 19, 217, 172, 18, 19, 137, 217, 172, 18, 19, 232, 207, - 217, 172, 18, 19, 218, 90, 18, 19, 252, 82, 218, 90, 18, 19, 137, 218, - 90, 18, 19, 226, 116, 217, 250, 18, 19, 227, 216, 18, 19, 228, 38, 227, - 216, 18, 19, 137, 235, 122, 18, 19, 227, 255, 18, 19, 227, 147, 18, 19, - 227, 98, 18, 19, 227, 75, 18, 19, 227, 67, 18, 19, 137, 235, 12, 18, 19, - 203, 18, 19, 228, 0, 18, 19, 137, 235, 188, 18, 19, 226, 251, 18, 19, - 137, 226, 251, 18, 19, 152, 18, 19, 137, 152, 18, 19, 128, 152, 18, 19, - 245, 231, 18, 19, 246, 5, 18, 19, 245, 203, 18, 19, 245, 190, 18, 19, - 245, 139, 18, 19, 245, 134, 18, 19, 246, 8, 18, 19, 246, 7, 18, 19, 245, - 77, 18, 19, 137, 245, 77, 18, 19, 246, 74, 18, 19, 222, 22, 18, 19, 233, - 32, 222, 22, 18, 19, 222, 2, 18, 19, 233, 32, 222, 2, 18, 19, 221, 254, - 18, 19, 233, 32, 221, 254, 18, 19, 221, 239, 18, 19, 221, 236, 18, 19, - 222, 35, 18, 19, 222, 34, 18, 19, 221, 215, 18, 19, 137, 221, 215, 18, - 19, 222, 37, 18, 19, 221, 17, 18, 19, 221, 16, 18, 19, 221, 15, 18, 19, - 221, 19, 18, 19, 221, 20, 18, 19, 220, 201, 18, 19, 220, 200, 18, 19, - 220, 199, 18, 19, 220, 202, 18, 19, 231, 102, 243, 162, 18, 19, 231, 102, - 243, 112, 18, 19, 231, 102, 243, 97, 18, 19, 231, 102, 243, 4, 18, 19, - 231, 102, 242, 248, 18, 19, 231, 102, 155, 18, 19, 231, 102, 243, 211, - 18, 19, 231, 102, 243, 225, 18, 19, 231, 101, 243, 225, 18, 19, 243, 90, - 18, 19, 228, 151, 18, 19, 228, 121, 18, 19, 228, 116, 18, 19, 228, 110, - 18, 19, 228, 105, 18, 19, 228, 155, 18, 19, 228, 154, 18, 19, 228, 163, - 18, 19, 221, 151, 18, 19, 221, 149, 18, 19, 221, 148, 18, 19, 221, 152, - 18, 19, 137, 227, 216, 18, 19, 137, 227, 147, 18, 19, 137, 227, 75, 18, - 19, 137, 203, 18, 19, 232, 113, 18, 19, 232, 92, 18, 19, 232, 88, 18, 19, - 232, 84, 18, 19, 232, 80, 18, 19, 232, 115, 18, 19, 232, 114, 18, 19, - 232, 117, 18, 19, 231, 215, 18, 19, 226, 116, 224, 246, 18, 19, 226, 116, - 224, 221, 18, 19, 226, 116, 224, 200, 18, 19, 226, 116, 225, 25, 18, 19, - 218, 178, 222, 22, 18, 19, 218, 178, 222, 2, 18, 19, 218, 178, 221, 239, - 18, 19, 218, 178, 222, 35, 18, 19, 218, 178, 222, 37, 18, 19, 235, 73, - 18, 19, 235, 72, 18, 19, 235, 71, 18, 19, 235, 70, 18, 19, 235, 79, 18, - 19, 235, 78, 18, 19, 235, 80, 18, 19, 222, 36, 222, 22, 18, 19, 222, 36, - 222, 2, 18, 19, 222, 36, 221, 254, 18, 19, 222, 36, 221, 239, 18, 19, - 222, 36, 221, 236, 18, 19, 222, 36, 222, 35, 18, 19, 222, 36, 222, 34, - 18, 19, 222, 36, 222, 37, 18, 19, 254, 185, 253, 204, 18, 19, 252, 50, - 73, 18, 19, 252, 50, 72, 18, 19, 252, 50, 74, 18, 19, 252, 50, 60, 18, - 19, 252, 50, 218, 227, 18, 19, 252, 50, 218, 204, 18, 19, 252, 50, 218, - 187, 18, 19, 252, 50, 219, 7, 18, 19, 252, 50, 232, 141, 18, 19, 252, 50, - 232, 62, 18, 19, 252, 50, 231, 204, 18, 19, 252, 50, 208, 18, 19, 252, - 50, 236, 184, 18, 19, 252, 50, 236, 113, 18, 19, 252, 50, 236, 57, 18, - 19, 252, 50, 175, 18, 19, 226, 116, 243, 162, 18, 19, 226, 116, 243, 112, - 18, 19, 226, 116, 243, 4, 18, 19, 226, 116, 155, 18, 19, 64, 244, 109, - 18, 19, 64, 244, 112, 18, 19, 64, 244, 116, 18, 19, 64, 244, 115, 18, 19, - 64, 244, 113, 18, 19, 64, 244, 125, 18, 19, 64, 227, 22, 18, 19, 64, 227, - 75, 18, 19, 64, 227, 216, 18, 19, 64, 227, 200, 18, 19, 64, 227, 147, 18, - 19, 64, 203, 18, 19, 64, 218, 165, 18, 19, 64, 218, 187, 18, 19, 64, 218, - 227, 18, 19, 64, 218, 224, 18, 19, 64, 218, 204, 18, 19, 64, 219, 7, 18, - 19, 64, 242, 147, 18, 19, 64, 242, 148, 18, 19, 64, 242, 151, 18, 19, 64, - 242, 150, 18, 19, 64, 242, 149, 18, 19, 64, 242, 153, 18, 19, 64, 221, - 223, 18, 19, 64, 221, 239, 18, 19, 64, 222, 22, 18, 19, 64, 222, 21, 18, - 19, 64, 222, 2, 18, 19, 64, 222, 35, 18, 19, 64, 221, 3, 18, 19, 64, 221, - 11, 18, 19, 64, 221, 26, 18, 19, 64, 221, 25, 18, 19, 64, 221, 12, 18, - 19, 64, 221, 29, 18, 19, 64, 228, 202, 18, 19, 64, 229, 37, 18, 19, 64, - 229, 198, 18, 19, 64, 229, 191, 18, 19, 64, 229, 108, 18, 19, 64, 187, - 18, 19, 64, 230, 59, 18, 19, 64, 244, 17, 18, 19, 64, 244, 68, 18, 19, - 64, 244, 191, 18, 19, 64, 244, 184, 18, 19, 64, 244, 103, 18, 19, 64, - 245, 0, 18, 19, 64, 236, 120, 18, 19, 64, 236, 125, 18, 19, 64, 236, 137, - 18, 19, 64, 236, 136, 18, 19, 64, 236, 130, 18, 19, 64, 236, 149, 18, 19, - 64, 236, 69, 18, 19, 64, 236, 70, 18, 19, 64, 236, 73, 18, 19, 64, 236, - 72, 18, 19, 64, 236, 71, 18, 19, 64, 236, 74, 18, 19, 64, 236, 75, 18, - 19, 64, 231, 144, 18, 19, 64, 231, 204, 18, 19, 64, 232, 141, 18, 19, 64, - 232, 139, 18, 19, 64, 232, 62, 18, 19, 64, 208, 18, 19, 64, 233, 99, 18, - 19, 64, 233, 136, 18, 19, 64, 234, 25, 18, 19, 64, 234, 16, 18, 19, 64, - 233, 196, 18, 19, 64, 196, 18, 19, 64, 217, 200, 18, 19, 64, 217, 231, - 18, 19, 64, 218, 25, 18, 19, 64, 218, 22, 18, 19, 64, 217, 250, 18, 19, - 64, 184, 18, 19, 64, 237, 43, 18, 19, 226, 116, 237, 43, 18, 19, 64, 237, - 59, 18, 19, 64, 237, 114, 18, 19, 64, 237, 113, 18, 19, 64, 237, 98, 18, - 19, 226, 116, 237, 98, 18, 19, 64, 237, 123, 18, 19, 64, 237, 72, 18, 19, - 64, 237, 76, 18, 19, 64, 237, 86, 18, 19, 64, 237, 85, 18, 19, 64, 237, - 84, 18, 19, 64, 237, 87, 18, 19, 64, 234, 231, 18, 19, 64, 235, 12, 18, - 19, 64, 235, 122, 18, 19, 64, 235, 118, 18, 19, 64, 235, 67, 18, 19, 64, - 235, 188, 18, 19, 64, 248, 171, 18, 19, 64, 248, 172, 18, 19, 64, 248, - 175, 18, 19, 64, 248, 174, 18, 19, 64, 248, 173, 18, 19, 64, 248, 176, - 18, 19, 64, 235, 69, 18, 19, 64, 235, 71, 18, 19, 64, 235, 75, 18, 19, - 64, 235, 74, 18, 19, 64, 235, 73, 18, 19, 64, 235, 79, 18, 19, 64, 221, - 146, 18, 19, 64, 221, 148, 18, 19, 64, 221, 151, 18, 19, 64, 221, 150, - 18, 19, 64, 221, 149, 18, 19, 64, 221, 152, 18, 19, 64, 221, 142, 18, 19, - 64, 221, 143, 18, 19, 64, 221, 154, 18, 19, 64, 221, 153, 18, 19, 64, - 221, 144, 18, 19, 64, 221, 155, 18, 19, 64, 217, 13, 18, 19, 64, 217, 21, - 18, 19, 64, 217, 92, 18, 19, 64, 217, 90, 18, 19, 64, 217, 42, 18, 19, - 64, 217, 114, 18, 19, 64, 217, 157, 18, 19, 64, 66, 217, 157, 18, 19, 64, - 247, 65, 18, 19, 64, 247, 66, 18, 19, 64, 247, 73, 18, 19, 64, 247, 72, - 18, 19, 64, 247, 68, 18, 19, 64, 247, 74, 18, 19, 64, 223, 103, 18, 19, - 64, 224, 26, 18, 19, 64, 226, 94, 18, 19, 64, 226, 84, 18, 19, 64, 224, - 140, 18, 19, 64, 226, 177, 18, 19, 64, 224, 170, 18, 19, 64, 224, 200, - 18, 19, 64, 224, 246, 18, 19, 64, 224, 244, 18, 19, 64, 224, 221, 18, 19, - 64, 225, 25, 18, 19, 64, 225, 27, 18, 19, 64, 221, 36, 18, 19, 64, 221, - 38, 18, 19, 64, 221, 50, 18, 19, 64, 221, 49, 18, 19, 64, 221, 39, 18, - 19, 64, 221, 55, 18, 19, 64, 250, 253, 18, 19, 64, 251, 11, 18, 19, 64, - 251, 46, 18, 19, 64, 251, 43, 18, 19, 64, 251, 31, 18, 19, 64, 251, 69, - 18, 19, 64, 221, 5, 18, 19, 64, 221, 6, 18, 19, 64, 221, 9, 18, 19, 64, - 221, 8, 18, 19, 64, 221, 7, 18, 19, 64, 221, 10, 18, 19, 251, 32, 55, 18, - 19, 245, 90, 223, 136, 18, 19, 228, 147, 18, 19, 232, 112, 18, 19, 231, - 212, 18, 19, 231, 211, 18, 19, 231, 210, 18, 19, 231, 209, 18, 19, 231, - 214, 18, 19, 231, 213, 18, 19, 218, 178, 221, 213, 18, 19, 218, 178, 221, - 212, 18, 19, 218, 178, 221, 211, 18, 19, 218, 178, 221, 210, 18, 19, 218, - 178, 221, 209, 18, 19, 218, 178, 221, 216, 18, 19, 218, 178, 221, 215, - 18, 19, 218, 178, 39, 222, 37, 18, 19, 252, 50, 219, 40, 230, 164, 223, - 255, 78, 230, 164, 1, 252, 122, 230, 164, 1, 234, 222, 230, 164, 1, 245, - 230, 230, 164, 1, 226, 161, 230, 164, 1, 232, 25, 230, 164, 1, 220, 122, - 230, 164, 1, 249, 185, 230, 164, 1, 221, 173, 230, 164, 1, 250, 177, 230, - 164, 1, 251, 89, 230, 164, 1, 233, 91, 230, 164, 1, 244, 53, 230, 164, 1, - 232, 105, 230, 164, 1, 223, 131, 230, 164, 1, 227, 18, 230, 164, 1, 254, - 193, 230, 164, 1, 230, 131, 230, 164, 1, 220, 50, 230, 164, 1, 247, 14, - 230, 164, 1, 237, 165, 230, 164, 1, 247, 15, 230, 164, 1, 230, 105, 230, - 164, 1, 220, 103, 230, 164, 1, 238, 5, 230, 164, 1, 247, 12, 230, 164, 1, - 229, 184, 230, 164, 245, 229, 78, 230, 164, 210, 245, 229, 78, 157, 1, - 245, 220, 245, 212, 245, 232, 246, 74, 157, 1, 216, 216, 157, 1, 220, 36, - 220, 51, 68, 157, 1, 217, 202, 157, 1, 218, 90, 157, 1, 219, 40, 157, 1, - 221, 218, 221, 217, 221, 234, 157, 1, 246, 118, 157, 1, 254, 106, 60, - 157, 1, 230, 94, 74, 157, 1, 255, 3, 60, 157, 1, 254, 219, 157, 1, 234, - 254, 74, 157, 1, 224, 185, 74, 157, 1, 74, 157, 1, 230, 167, 157, 1, 230, - 138, 157, 1, 227, 244, 227, 253, 227, 195, 152, 157, 1, 236, 195, 157, 1, - 251, 87, 157, 1, 236, 196, 237, 17, 157, 1, 245, 67, 157, 1, 246, 185, - 157, 1, 244, 187, 243, 231, 245, 67, 157, 1, 244, 220, 157, 1, 218, 160, - 218, 155, 219, 40, 157, 1, 243, 203, 243, 225, 157, 1, 243, 207, 243, - 225, 157, 1, 235, 0, 243, 225, 157, 1, 224, 188, 243, 225, 157, 1, 232, - 203, 231, 74, 232, 204, 207, 157, 1, 224, 186, 207, 157, 1, 247, 140, - 157, 1, 237, 148, 237, 152, 237, 142, 72, 157, 1, 73, 157, 1, 237, 106, - 237, 126, 157, 1, 244, 173, 157, 1, 235, 1, 254, 234, 157, 1, 224, 190, - 60, 157, 1, 237, 135, 246, 164, 157, 1, 229, 155, 229, 173, 230, 59, 157, - 1, 254, 162, 246, 163, 157, 1, 224, 3, 198, 157, 1, 224, 129, 234, 253, - 198, 157, 1, 224, 184, 198, 157, 1, 251, 202, 157, 1, 217, 157, 157, 1, - 221, 159, 221, 166, 220, 190, 222, 201, 157, 1, 224, 183, 222, 201, 157, - 1, 250, 46, 157, 1, 252, 107, 252, 110, 252, 56, 253, 204, 157, 1, 224, - 189, 253, 204, 157, 1, 247, 139, 157, 1, 230, 115, 157, 1, 246, 238, 246, - 240, 73, 157, 1, 234, 81, 234, 87, 189, 157, 1, 234, 255, 189, 157, 1, - 224, 187, 189, 157, 1, 235, 136, 235, 171, 235, 4, 153, 157, 1, 247, 141, - 157, 1, 237, 203, 157, 1, 237, 204, 157, 1, 249, 196, 249, 201, 250, 46, - 157, 1, 230, 90, 246, 117, 74, 157, 1, 247, 11, 157, 1, 237, 164, 157, 1, - 250, 63, 157, 1, 251, 160, 157, 1, 251, 98, 157, 1, 223, 161, 157, 1, - 234, 252, 157, 1, 224, 182, 157, 1, 242, 64, 157, 1, 228, 163, 157, 1, - 218, 151, 157, 224, 109, 228, 196, 157, 233, 85, 228, 196, 157, 250, 101, - 228, 196, 157, 254, 33, 100, 157, 220, 227, 100, 157, 252, 121, 100, 222, - 140, 1, 60, 222, 140, 1, 72, 222, 140, 1, 68, 222, 140, 1, 175, 222, 140, - 1, 245, 0, 222, 140, 1, 232, 115, 222, 140, 1, 222, 155, 222, 140, 1, - 249, 207, 222, 140, 1, 208, 222, 140, 1, 187, 222, 140, 1, 252, 237, 222, - 140, 1, 196, 222, 140, 1, 184, 222, 140, 1, 235, 188, 222, 140, 1, 219, - 7, 222, 140, 1, 226, 177, 222, 140, 1, 155, 222, 140, 29, 5, 72, 222, - 140, 29, 5, 68, 222, 140, 5, 219, 82, 243, 184, 1, 60, 243, 184, 1, 72, - 243, 184, 1, 68, 243, 184, 1, 175, 243, 184, 1, 245, 0, 243, 184, 1, 232, - 115, 243, 184, 1, 222, 155, 243, 184, 1, 249, 207, 243, 184, 1, 208, 243, - 184, 1, 187, 243, 184, 1, 252, 237, 243, 184, 1, 196, 243, 184, 1, 184, - 243, 184, 1, 203, 243, 184, 1, 235, 188, 243, 184, 1, 219, 7, 243, 184, - 1, 226, 177, 243, 184, 1, 155, 243, 184, 29, 5, 72, 243, 184, 29, 5, 68, - 243, 184, 5, 230, 14, 229, 122, 224, 109, 228, 196, 229, 122, 51, 228, - 196, 251, 245, 1, 60, 251, 245, 1, 72, 251, 245, 1, 68, 251, 245, 1, 175, - 251, 245, 1, 245, 0, 251, 245, 1, 232, 115, 251, 245, 1, 222, 155, 251, - 245, 1, 249, 207, 251, 245, 1, 208, 251, 245, 1, 187, 251, 245, 1, 252, - 237, 251, 245, 1, 196, 251, 245, 1, 184, 251, 245, 1, 203, 251, 245, 1, - 235, 188, 251, 245, 1, 219, 7, 251, 245, 1, 226, 177, 251, 245, 1, 155, - 251, 245, 29, 5, 72, 251, 245, 29, 5, 68, 222, 139, 1, 60, 222, 139, 1, - 72, 222, 139, 1, 68, 222, 139, 1, 175, 222, 139, 1, 245, 0, 222, 139, 1, - 232, 115, 222, 139, 1, 222, 155, 222, 139, 1, 249, 207, 222, 139, 1, 208, - 222, 139, 1, 187, 222, 139, 1, 252, 237, 222, 139, 1, 196, 222, 139, 1, - 184, 222, 139, 1, 235, 188, 222, 139, 1, 219, 7, 222, 139, 1, 226, 177, - 222, 139, 29, 5, 72, 222, 139, 29, 5, 68, 79, 1, 175, 79, 1, 236, 149, - 79, 1, 236, 57, 79, 1, 236, 125, 79, 1, 232, 84, 79, 1, 251, 169, 79, 1, - 251, 69, 79, 1, 250, 182, 79, 1, 251, 11, 79, 1, 231, 56, 79, 1, 249, - 207, 79, 1, 221, 19, 79, 1, 248, 167, 79, 1, 221, 15, 79, 1, 231, 207, - 79, 1, 222, 155, 79, 1, 222, 35, 79, 1, 101, 79, 1, 221, 239, 79, 1, 231, - 204, 79, 1, 252, 237, 79, 1, 229, 141, 79, 1, 229, 37, 79, 1, 229, 118, - 79, 1, 233, 136, 79, 1, 217, 231, 79, 1, 227, 75, 79, 1, 235, 12, 79, 1, - 219, 72, 79, 1, 225, 25, 79, 1, 223, 182, 79, 1, 226, 177, 79, 1, 155, - 79, 1, 235, 188, 79, 1, 228, 155, 79, 237, 214, 29, 228, 141, 79, 237, - 214, 29, 228, 154, 79, 237, 214, 29, 228, 121, 79, 237, 214, 29, 228, - 116, 79, 237, 214, 29, 228, 98, 79, 237, 214, 29, 228, 73, 79, 237, 214, - 29, 228, 61, 79, 237, 214, 29, 228, 60, 79, 237, 214, 29, 226, 243, 79, - 237, 214, 29, 226, 236, 79, 237, 214, 29, 234, 198, 79, 237, 214, 29, - 234, 189, 79, 237, 214, 29, 228, 136, 79, 237, 214, 29, 228, 147, 79, - 237, 214, 29, 228, 106, 220, 198, 107, 79, 237, 214, 29, 228, 106, 220, - 198, 103, 79, 237, 214, 29, 228, 137, 79, 29, 237, 202, 254, 69, 79, 29, - 237, 202, 255, 58, 79, 29, 5, 255, 58, 79, 29, 5, 72, 79, 29, 5, 237, - 255, 79, 29, 5, 218, 90, 79, 29, 5, 217, 166, 79, 29, 5, 68, 79, 29, 5, - 220, 23, 79, 29, 5, 220, 123, 79, 29, 5, 230, 167, 79, 29, 5, 184, 79, - 29, 5, 238, 26, 79, 29, 5, 73, 79, 29, 5, 254, 234, 79, 29, 5, 254, 196, - 79, 29, 5, 230, 127, 79, 29, 5, 253, 232, 79, 5, 232, 37, 79, 5, 227, - 214, 79, 5, 217, 176, 79, 5, 233, 55, 79, 5, 221, 80, 79, 5, 252, 203, - 79, 5, 227, 71, 79, 5, 221, 138, 79, 5, 236, 239, 79, 5, 254, 198, 79, 5, - 226, 141, 226, 137, 79, 5, 219, 79, 79, 5, 250, 179, 79, 5, 252, 183, 79, - 5, 236, 142, 79, 5, 252, 199, 79, 5, 251, 156, 229, 77, 235, 239, 79, 5, - 235, 100, 221, 122, 79, 5, 252, 96, 79, 5, 229, 120, 233, 97, 79, 5, 236, - 40, 79, 250, 78, 16, 227, 142, 79, 5, 253, 218, 79, 5, 253, 235, 79, 20, - 217, 84, 79, 20, 107, 79, 20, 103, 79, 20, 160, 79, 20, 154, 79, 20, 174, - 79, 20, 182, 79, 20, 191, 79, 20, 185, 79, 20, 190, 79, 16, 235, 100, - 253, 237, 224, 16, 79, 16, 235, 100, 253, 237, 233, 72, 79, 16, 235, 100, - 253, 237, 229, 76, 79, 16, 235, 100, 253, 237, 252, 123, 79, 16, 235, - 100, 253, 237, 251, 233, 79, 16, 235, 100, 253, 237, 229, 1, 79, 16, 235, - 100, 253, 237, 228, 251, 79, 16, 235, 100, 253, 237, 228, 249, 79, 16, - 235, 100, 253, 237, 228, 255, 79, 16, 235, 100, 253, 237, 228, 253, 77, - 252, 66, 77, 246, 208, 77, 250, 168, 77, 245, 90, 223, 136, 77, 250, 175, - 77, 245, 116, 248, 143, 77, 221, 137, 224, 21, 242, 121, 77, 224, 139, 4, - 252, 26, 234, 63, 77, 234, 84, 250, 168, 77, 234, 84, 245, 90, 223, 136, - 77, 232, 23, 77, 245, 103, 41, 226, 74, 107, 77, 245, 103, 41, 226, 74, - 103, 77, 245, 103, 41, 226, 74, 160, 77, 29, 225, 54, 77, 20, 217, 84, - 77, 20, 107, 77, 20, 103, 77, 20, 160, 77, 20, 154, 77, 20, 174, 77, 20, - 182, 77, 20, 191, 77, 20, 185, 77, 20, 190, 77, 1, 60, 77, 1, 73, 77, 1, - 72, 77, 1, 74, 77, 1, 68, 77, 1, 230, 167, 77, 1, 220, 110, 77, 1, 246, - 250, 77, 1, 208, 77, 1, 254, 123, 77, 1, 252, 237, 77, 1, 187, 77, 1, - 228, 155, 77, 1, 245, 0, 77, 1, 196, 77, 1, 235, 188, 77, 1, 226, 177, - 77, 1, 225, 25, 77, 1, 222, 155, 77, 1, 249, 207, 77, 1, 251, 69, 77, 1, - 237, 123, 77, 1, 184, 77, 1, 203, 77, 1, 219, 7, 77, 1, 246, 8, 77, 1, - 175, 77, 1, 236, 149, 77, 1, 221, 55, 77, 1, 217, 114, 77, 1, 243, 211, - 77, 1, 217, 14, 77, 1, 235, 79, 77, 1, 217, 67, 77, 1, 251, 31, 77, 1, - 221, 137, 171, 29, 55, 77, 1, 221, 137, 73, 77, 1, 221, 137, 72, 77, 1, - 221, 137, 74, 77, 1, 221, 137, 68, 77, 1, 221, 137, 230, 167, 77, 1, 221, - 137, 220, 110, 77, 1, 221, 137, 254, 123, 77, 1, 221, 137, 252, 237, 77, - 1, 221, 137, 187, 77, 1, 221, 137, 228, 155, 77, 1, 221, 137, 245, 0, 77, - 1, 221, 137, 196, 77, 1, 221, 137, 222, 155, 77, 1, 221, 137, 249, 207, - 77, 1, 221, 137, 251, 69, 77, 1, 221, 137, 237, 123, 77, 1, 221, 137, - 221, 55, 77, 1, 221, 137, 184, 77, 1, 221, 137, 219, 7, 77, 1, 221, 137, - 175, 77, 1, 221, 137, 244, 253, 77, 1, 221, 137, 243, 211, 77, 1, 221, - 137, 237, 97, 77, 1, 221, 137, 232, 60, 77, 1, 221, 137, 247, 74, 77, 1, - 224, 139, 73, 77, 1, 224, 139, 72, 77, 1, 224, 139, 237, 133, 77, 1, 224, - 139, 220, 110, 77, 1, 224, 139, 68, 77, 1, 224, 139, 254, 123, 77, 1, - 224, 139, 175, 77, 1, 224, 139, 245, 0, 77, 1, 224, 139, 155, 77, 1, 224, - 139, 187, 77, 1, 224, 139, 225, 25, 77, 1, 224, 139, 222, 155, 77, 1, - 224, 139, 249, 207, 77, 1, 224, 139, 237, 123, 77, 1, 224, 139, 246, 8, - 77, 1, 224, 139, 244, 253, 77, 1, 224, 139, 243, 211, 77, 1, 224, 139, - 221, 55, 77, 1, 224, 139, 217, 114, 77, 1, 224, 139, 228, 0, 77, 1, 224, - 139, 251, 69, 77, 1, 224, 139, 217, 80, 77, 1, 234, 84, 72, 77, 1, 234, - 84, 175, 77, 1, 234, 84, 203, 77, 1, 234, 84, 246, 8, 77, 1, 234, 84, - 217, 80, 77, 1, 254, 161, 244, 238, 254, 96, 107, 77, 1, 254, 161, 244, - 238, 219, 78, 107, 77, 1, 254, 161, 244, 238, 249, 174, 77, 1, 254, 161, - 244, 238, 220, 120, 77, 1, 254, 161, 244, 238, 237, 170, 220, 120, 77, 1, - 254, 161, 244, 238, 252, 212, 77, 1, 254, 161, 244, 238, 148, 252, 212, - 77, 1, 254, 161, 244, 238, 60, 77, 1, 254, 161, 244, 238, 72, 77, 1, 254, - 161, 244, 238, 175, 77, 1, 254, 161, 244, 238, 232, 115, 77, 1, 254, 161, - 244, 238, 251, 169, 77, 1, 254, 161, 244, 238, 221, 29, 77, 1, 254, 161, - 244, 238, 221, 19, 77, 1, 254, 161, 244, 238, 249, 132, 77, 1, 254, 161, - 244, 238, 231, 217, 77, 1, 254, 161, 244, 238, 222, 155, 77, 1, 254, 161, - 244, 238, 249, 207, 77, 1, 254, 161, 244, 238, 187, 77, 1, 254, 161, 244, - 238, 229, 141, 77, 1, 254, 161, 244, 238, 223, 218, 77, 1, 254, 161, 244, - 238, 217, 80, 77, 1, 254, 161, 244, 238, 217, 114, 77, 1, 254, 161, 244, - 238, 254, 202, 77, 1, 221, 137, 254, 161, 244, 238, 222, 155, 77, 1, 221, - 137, 254, 161, 244, 238, 217, 80, 77, 1, 234, 84, 254, 161, 244, 238, - 244, 125, 77, 1, 234, 84, 254, 161, 244, 238, 232, 115, 77, 1, 234, 84, - 254, 161, 244, 238, 251, 169, 77, 1, 234, 84, 254, 161, 244, 238, 237, - 103, 77, 1, 234, 84, 254, 161, 244, 238, 221, 29, 77, 1, 234, 84, 254, - 161, 244, 238, 249, 116, 77, 1, 234, 84, 254, 161, 244, 238, 222, 155, - 77, 1, 234, 84, 254, 161, 244, 238, 249, 36, 77, 1, 234, 84, 254, 161, - 244, 238, 223, 218, 77, 1, 234, 84, 254, 161, 244, 238, 250, 57, 77, 1, - 234, 84, 254, 161, 244, 238, 217, 80, 77, 1, 234, 84, 254, 161, 244, 238, - 217, 114, 77, 1, 254, 161, 244, 238, 144, 68, 77, 1, 254, 161, 244, 238, - 144, 184, 77, 1, 234, 84, 254, 161, 244, 238, 252, 94, 77, 1, 254, 161, - 244, 238, 249, 197, 77, 1, 234, 84, 254, 161, 244, 238, 235, 79, 18, 19, - 230, 63, 18, 19, 253, 212, 18, 19, 255, 14, 18, 19, 218, 229, 18, 19, - 229, 7, 18, 19, 229, 205, 18, 19, 228, 172, 18, 19, 222, 96, 18, 19, 236, - 191, 18, 19, 235, 232, 18, 19, 234, 45, 18, 19, 231, 172, 18, 19, 232, - 199, 18, 19, 235, 132, 18, 19, 224, 1, 18, 19, 226, 118, 18, 19, 224, - 175, 18, 19, 224, 249, 18, 19, 224, 150, 18, 19, 217, 208, 18, 19, 218, - 30, 18, 19, 227, 222, 18, 19, 231, 82, 18, 19, 230, 155, 231, 82, 18, 19, - 231, 81, 18, 19, 230, 155, 231, 81, 18, 19, 231, 80, 18, 19, 230, 155, - 231, 80, 18, 19, 231, 79, 18, 19, 230, 155, 231, 79, 18, 19, 226, 248, - 18, 19, 226, 247, 18, 19, 226, 246, 18, 19, 226, 245, 18, 19, 226, 244, - 18, 19, 226, 252, 18, 19, 230, 155, 230, 59, 18, 19, 230, 155, 222, 201, - 18, 19, 230, 155, 237, 17, 18, 19, 230, 155, 251, 202, 18, 19, 230, 155, - 189, 18, 19, 230, 155, 207, 18, 19, 230, 155, 198, 18, 19, 230, 155, 225, - 27, 18, 19, 247, 4, 219, 40, 18, 19, 218, 215, 219, 40, 18, 19, 39, 3, - 227, 93, 18, 19, 39, 227, 241, 248, 145, 18, 19, 228, 38, 226, 249, 18, - 19, 137, 234, 248, 18, 19, 137, 235, 187, 18, 19, 221, 214, 18, 19, 221, - 216, 18, 19, 221, 13, 18, 19, 221, 14, 18, 19, 221, 18, 18, 19, 221, 145, - 18, 19, 221, 147, 18, 19, 226, 116, 224, 155, 18, 19, 226, 116, 224, 195, - 18, 19, 226, 116, 242, 248, 18, 19, 64, 243, 238, 18, 19, 64, 249, 60, - 244, 184, 18, 19, 64, 244, 253, 18, 19, 64, 243, 243, 18, 19, 226, 116, - 237, 27, 18, 19, 64, 237, 25, 18, 19, 252, 139, 249, 60, 153, 18, 19, - 252, 139, 249, 60, 152, 18, 19, 64, 249, 55, 198, 195, 219, 59, 235, 84, - 195, 1, 175, 195, 1, 236, 149, 195, 1, 245, 0, 195, 1, 244, 125, 195, 1, - 232, 115, 195, 1, 251, 169, 195, 1, 251, 69, 195, 1, 237, 123, 195, 1, - 237, 103, 195, 1, 218, 47, 195, 1, 222, 155, 195, 1, 222, 35, 195, 1, - 249, 207, 195, 1, 249, 36, 195, 1, 208, 195, 1, 187, 195, 1, 229, 141, - 195, 1, 252, 237, 195, 1, 252, 94, 195, 1, 196, 195, 1, 184, 195, 1, 203, - 195, 1, 235, 188, 195, 1, 219, 7, 195, 1, 225, 25, 195, 1, 223, 218, 195, - 1, 226, 177, 195, 1, 155, 195, 29, 5, 60, 195, 29, 5, 72, 195, 29, 5, 68, - 195, 29, 5, 246, 250, 195, 29, 5, 254, 196, 195, 29, 5, 230, 127, 195, - 29, 5, 253, 232, 195, 29, 5, 73, 195, 29, 5, 74, 195, 223, 97, 1, 184, - 195, 223, 97, 1, 203, 195, 223, 97, 1, 219, 7, 195, 3, 1, 175, 195, 3, 1, - 232, 115, 195, 3, 1, 254, 95, 195, 3, 1, 222, 155, 195, 3, 1, 208, 195, - 3, 1, 187, 195, 3, 1, 196, 195, 3, 1, 203, 195, 3, 1, 235, 188, 195, 5, - 233, 89, 195, 5, 236, 173, 195, 5, 226, 176, 195, 5, 234, 248, 195, 246, - 95, 78, 195, 228, 82, 78, 195, 20, 217, 84, 195, 20, 107, 195, 20, 103, - 195, 20, 160, 195, 20, 154, 195, 20, 174, 195, 20, 182, 195, 20, 191, - 195, 20, 185, 195, 20, 190, 37, 235, 123, 1, 175, 37, 235, 123, 1, 218, - 138, 37, 235, 123, 1, 232, 115, 37, 235, 123, 1, 221, 55, 37, 235, 123, - 1, 226, 177, 37, 235, 123, 1, 184, 37, 235, 123, 1, 222, 155, 37, 235, - 123, 1, 222, 35, 37, 235, 123, 1, 235, 188, 37, 235, 123, 1, 187, 37, - 235, 123, 1, 229, 141, 37, 235, 123, 1, 196, 37, 235, 123, 1, 246, 8, 37, - 235, 123, 1, 219, 189, 37, 235, 123, 1, 155, 37, 235, 123, 1, 228, 155, - 37, 235, 123, 1, 236, 149, 37, 235, 123, 1, 221, 47, 37, 235, 123, 1, - 208, 37, 235, 123, 1, 60, 37, 235, 123, 1, 72, 37, 235, 123, 1, 246, 250, - 37, 235, 123, 1, 246, 239, 37, 235, 123, 1, 68, 37, 235, 123, 1, 230, - 127, 37, 235, 123, 1, 74, 37, 235, 123, 1, 220, 110, 37, 235, 123, 1, 73, - 37, 235, 123, 1, 253, 231, 37, 235, 123, 1, 254, 196, 37, 235, 123, 1, - 221, 130, 37, 235, 123, 1, 221, 129, 37, 235, 123, 1, 221, 128, 37, 235, - 123, 1, 221, 127, 37, 235, 123, 1, 221, 126, 146, 37, 151, 1, 116, 228, - 155, 146, 37, 151, 1, 109, 228, 155, 146, 37, 151, 1, 116, 175, 146, 37, - 151, 1, 116, 218, 138, 146, 37, 151, 1, 116, 232, 115, 146, 37, 151, 1, - 109, 175, 146, 37, 151, 1, 109, 218, 138, 146, 37, 151, 1, 109, 232, 115, - 146, 37, 151, 1, 116, 221, 55, 146, 37, 151, 1, 116, 226, 177, 146, 37, - 151, 1, 116, 184, 146, 37, 151, 1, 109, 221, 55, 146, 37, 151, 1, 109, - 226, 177, 146, 37, 151, 1, 109, 184, 146, 37, 151, 1, 116, 222, 155, 146, - 37, 151, 1, 116, 222, 35, 146, 37, 151, 1, 116, 208, 146, 37, 151, 1, - 109, 222, 155, 146, 37, 151, 1, 109, 222, 35, 146, 37, 151, 1, 109, 208, - 146, 37, 151, 1, 116, 187, 146, 37, 151, 1, 116, 229, 141, 146, 37, 151, - 1, 116, 196, 146, 37, 151, 1, 109, 187, 146, 37, 151, 1, 109, 229, 141, - 146, 37, 151, 1, 109, 196, 146, 37, 151, 1, 116, 246, 8, 146, 37, 151, 1, - 116, 219, 189, 146, 37, 151, 1, 116, 235, 188, 146, 37, 151, 1, 109, 246, - 8, 146, 37, 151, 1, 109, 219, 189, 146, 37, 151, 1, 109, 235, 188, 146, - 37, 151, 1, 116, 155, 146, 37, 151, 1, 116, 249, 207, 146, 37, 151, 1, - 116, 252, 237, 146, 37, 151, 1, 109, 155, 146, 37, 151, 1, 109, 249, 207, - 146, 37, 151, 1, 109, 252, 237, 146, 37, 151, 1, 116, 235, 236, 146, 37, - 151, 1, 116, 218, 111, 146, 37, 151, 1, 109, 235, 236, 146, 37, 151, 1, - 109, 218, 111, 146, 37, 151, 1, 116, 223, 102, 146, 37, 151, 1, 109, 223, - 102, 146, 37, 151, 29, 5, 29, 224, 181, 146, 37, 151, 29, 5, 255, 58, - 146, 37, 151, 29, 5, 237, 255, 146, 37, 151, 29, 5, 68, 146, 37, 151, 29, - 5, 220, 23, 146, 37, 151, 29, 5, 73, 146, 37, 151, 29, 5, 254, 234, 146, - 37, 151, 29, 5, 74, 146, 37, 151, 29, 5, 230, 185, 146, 37, 151, 29, 5, - 220, 110, 146, 37, 151, 29, 5, 253, 212, 146, 37, 151, 29, 5, 255, 14, - 146, 37, 151, 29, 5, 220, 16, 146, 37, 151, 29, 5, 230, 63, 146, 37, 151, - 29, 5, 230, 182, 146, 37, 151, 29, 5, 220, 107, 146, 37, 151, 29, 5, 237, - 133, 146, 37, 151, 1, 39, 216, 216, 146, 37, 151, 1, 39, 232, 117, 146, - 37, 151, 1, 39, 207, 146, 37, 151, 1, 39, 189, 146, 37, 151, 1, 39, 237, - 17, 146, 37, 151, 1, 39, 250, 46, 146, 37, 151, 1, 39, 253, 204, 146, 37, - 151, 145, 234, 67, 146, 37, 151, 145, 234, 66, 146, 37, 151, 20, 217, 84, - 146, 37, 151, 20, 107, 146, 37, 151, 20, 103, 146, 37, 151, 20, 160, 146, - 37, 151, 20, 154, 146, 37, 151, 20, 174, 146, 37, 151, 20, 182, 146, 37, - 151, 20, 191, 146, 37, 151, 20, 185, 146, 37, 151, 20, 190, 146, 37, 151, - 83, 20, 107, 146, 37, 151, 5, 235, 177, 146, 37, 151, 5, 235, 176, 79, - 16, 229, 211, 79, 16, 233, 73, 236, 55, 79, 16, 229, 77, 236, 55, 79, 16, - 252, 124, 236, 55, 79, 16, 251, 234, 236, 55, 79, 16, 229, 2, 236, 55, - 79, 16, 228, 252, 236, 55, 79, 16, 228, 250, 236, 55, 79, 16, 229, 0, - 236, 55, 79, 16, 228, 254, 236, 55, 79, 16, 249, 163, 236, 55, 79, 16, - 249, 159, 236, 55, 79, 16, 249, 158, 236, 55, 79, 16, 249, 161, 236, 55, - 79, 16, 249, 160, 236, 55, 79, 16, 249, 157, 236, 55, 79, 16, 220, 230, - 79, 16, 233, 73, 227, 70, 79, 16, 229, 77, 227, 70, 79, 16, 252, 124, - 227, 70, 79, 16, 251, 234, 227, 70, 79, 16, 229, 2, 227, 70, 79, 16, 228, - 252, 227, 70, 79, 16, 228, 250, 227, 70, 79, 16, 229, 0, 227, 70, 79, 16, - 228, 254, 227, 70, 79, 16, 249, 163, 227, 70, 79, 16, 249, 159, 227, 70, - 79, 16, 249, 158, 227, 70, 79, 16, 249, 161, 227, 70, 79, 16, 249, 160, - 227, 70, 79, 16, 249, 157, 227, 70, 251, 246, 1, 175, 251, 246, 1, 245, - 0, 251, 246, 1, 232, 115, 251, 246, 1, 232, 87, 251, 246, 1, 187, 251, - 246, 1, 252, 237, 251, 246, 1, 196, 251, 246, 1, 233, 102, 251, 246, 1, - 222, 155, 251, 246, 1, 249, 207, 251, 246, 1, 208, 251, 246, 1, 231, 171, - 251, 246, 1, 251, 169, 251, 246, 1, 237, 123, 251, 246, 1, 231, 77, 251, - 246, 1, 231, 75, 251, 246, 1, 184, 251, 246, 1, 203, 251, 246, 1, 235, - 188, 251, 246, 1, 219, 189, 251, 246, 1, 226, 177, 251, 246, 1, 60, 251, - 246, 1, 155, 251, 246, 29, 5, 72, 251, 246, 29, 5, 68, 251, 246, 29, 5, - 73, 251, 246, 29, 5, 74, 251, 246, 29, 5, 254, 234, 251, 246, 230, 24, - 251, 246, 246, 190, 117, 226, 86, 37, 83, 1, 116, 175, 37, 83, 1, 116, - 236, 149, 37, 83, 1, 116, 235, 224, 37, 83, 1, 109, 175, 37, 83, 1, 109, - 235, 224, 37, 83, 1, 109, 236, 149, 37, 83, 1, 232, 115, 37, 83, 1, 116, - 251, 169, 37, 83, 1, 116, 251, 69, 37, 83, 1, 109, 251, 169, 37, 83, 1, - 109, 226, 177, 37, 83, 1, 109, 251, 69, 37, 83, 1, 231, 77, 37, 83, 1, - 227, 227, 37, 83, 1, 116, 227, 225, 37, 83, 1, 249, 207, 37, 83, 1, 109, - 227, 225, 37, 83, 1, 227, 235, 37, 83, 1, 116, 222, 155, 37, 83, 1, 116, - 222, 35, 37, 83, 1, 109, 222, 155, 37, 83, 1, 109, 222, 35, 37, 83, 1, - 208, 37, 83, 1, 252, 237, 37, 83, 1, 116, 187, 37, 83, 1, 116, 229, 141, - 37, 83, 1, 116, 246, 8, 37, 83, 1, 109, 187, 37, 83, 1, 109, 246, 8, 37, - 83, 1, 109, 229, 141, 37, 83, 1, 196, 37, 83, 1, 109, 184, 37, 83, 1, - 116, 184, 37, 83, 1, 203, 37, 83, 1, 227, 19, 37, 83, 1, 235, 188, 37, - 83, 1, 234, 227, 37, 83, 1, 219, 7, 37, 83, 1, 116, 225, 25, 37, 83, 1, - 116, 223, 218, 37, 83, 1, 116, 226, 177, 37, 83, 1, 116, 155, 37, 83, 1, - 235, 17, 37, 83, 1, 60, 37, 83, 1, 109, 155, 37, 83, 1, 72, 37, 83, 1, - 237, 255, 37, 83, 1, 68, 37, 83, 1, 220, 23, 37, 83, 1, 246, 250, 37, 83, - 1, 230, 127, 37, 83, 1, 235, 177, 37, 83, 1, 244, 32, 226, 177, 37, 83, - 250, 147, 5, 128, 203, 37, 83, 250, 147, 5, 128, 235, 188, 37, 83, 250, - 147, 5, 235, 189, 222, 118, 235, 167, 37, 83, 5, 234, 100, 236, 230, 235, - 167, 37, 83, 250, 147, 5, 39, 232, 115, 37, 83, 250, 147, 5, 109, 187, - 37, 83, 250, 147, 5, 116, 227, 226, 156, 109, 187, 37, 83, 250, 147, 5, - 196, 37, 83, 250, 147, 5, 252, 237, 37, 83, 250, 147, 5, 226, 177, 37, - 83, 5, 226, 158, 37, 83, 29, 5, 60, 37, 83, 29, 5, 234, 100, 226, 127, - 37, 83, 29, 5, 255, 58, 37, 83, 29, 5, 222, 123, 255, 58, 37, 83, 29, 5, - 72, 37, 83, 29, 5, 237, 255, 37, 83, 29, 5, 220, 110, 37, 83, 29, 5, 220, - 22, 37, 83, 29, 5, 68, 37, 83, 29, 5, 220, 23, 37, 83, 29, 5, 74, 37, 83, - 29, 5, 230, 186, 56, 37, 83, 29, 5, 230, 63, 37, 83, 29, 5, 73, 37, 83, - 29, 5, 254, 234, 37, 83, 29, 5, 230, 127, 37, 83, 29, 5, 254, 196, 37, - 83, 29, 5, 83, 254, 196, 37, 83, 29, 5, 230, 186, 50, 37, 83, 5, 234, - 100, 236, 229, 37, 83, 5, 221, 131, 37, 83, 5, 221, 130, 37, 83, 5, 236, - 118, 221, 129, 37, 83, 5, 236, 118, 221, 128, 37, 83, 5, 236, 118, 221, - 127, 37, 83, 5, 228, 3, 243, 210, 37, 83, 5, 234, 100, 226, 148, 37, 83, - 5, 236, 117, 236, 215, 37, 83, 36, 250, 93, 248, 145, 37, 83, 242, 243, - 20, 217, 84, 37, 83, 242, 243, 20, 107, 37, 83, 242, 243, 20, 103, 37, - 83, 242, 243, 20, 160, 37, 83, 242, 243, 20, 154, 37, 83, 242, 243, 20, - 174, 37, 83, 242, 243, 20, 182, 37, 83, 242, 243, 20, 191, 37, 83, 242, - 243, 20, 185, 37, 83, 242, 243, 20, 190, 37, 83, 83, 20, 217, 84, 37, 83, - 83, 20, 107, 37, 83, 83, 20, 103, 37, 83, 83, 20, 160, 37, 83, 83, 20, - 154, 37, 83, 83, 20, 174, 37, 83, 83, 20, 182, 37, 83, 83, 20, 191, 37, - 83, 83, 20, 185, 37, 83, 83, 20, 190, 37, 83, 5, 218, 203, 37, 83, 5, - 218, 202, 37, 83, 5, 226, 121, 37, 83, 5, 236, 163, 37, 83, 5, 242, 180, - 37, 83, 5, 248, 157, 37, 83, 5, 210, 227, 59, 227, 235, 37, 83, 5, 234, - 100, 218, 48, 37, 83, 5, 237, 1, 37, 83, 5, 237, 0, 37, 83, 5, 226, 126, - 37, 83, 5, 226, 125, 37, 83, 5, 243, 186, 37, 83, 5, 251, 166, 94, 5, - 220, 97, 227, 144, 94, 5, 220, 97, 251, 148, 94, 5, 251, 95, 94, 5, 223, - 51, 94, 5, 252, 64, 94, 1, 254, 180, 94, 1, 254, 181, 222, 82, 94, 1, - 237, 251, 94, 1, 237, 252, 222, 82, 94, 1, 220, 100, 94, 1, 220, 101, - 222, 82, 94, 1, 228, 3, 227, 183, 94, 1, 228, 3, 227, 184, 222, 82, 94, - 1, 235, 189, 235, 95, 94, 1, 235, 189, 235, 96, 222, 82, 94, 1, 246, 222, - 94, 1, 254, 194, 94, 1, 230, 153, 94, 1, 230, 154, 222, 82, 94, 1, 175, - 94, 1, 206, 234, 103, 94, 1, 245, 0, 94, 1, 245, 1, 244, 58, 94, 1, 232, - 115, 94, 1, 251, 169, 94, 1, 251, 170, 235, 179, 94, 1, 237, 123, 94, 1, - 237, 124, 237, 107, 94, 1, 231, 77, 94, 1, 222, 156, 235, 138, 94, 1, - 222, 156, 233, 68, 234, 103, 94, 1, 249, 208, 233, 68, 254, 148, 94, 1, - 249, 208, 233, 68, 234, 103, 94, 1, 232, 238, 227, 238, 94, 1, 222, 155, - 94, 1, 222, 156, 222, 99, 94, 1, 249, 207, 94, 1, 249, 208, 234, 108, 94, - 1, 208, 94, 1, 187, 94, 1, 230, 44, 236, 225, 94, 1, 252, 237, 94, 1, - 252, 238, 236, 174, 94, 1, 196, 94, 1, 184, 94, 1, 203, 94, 1, 235, 188, - 94, 1, 219, 7, 94, 1, 226, 178, 226, 164, 94, 1, 226, 178, 226, 132, 94, - 1, 226, 177, 94, 1, 155, 94, 5, 227, 177, 94, 29, 5, 222, 82, 94, 29, 5, - 220, 96, 94, 29, 5, 220, 97, 226, 129, 94, 29, 5, 223, 77, 94, 29, 5, - 223, 78, 237, 243, 94, 29, 5, 228, 3, 227, 183, 94, 29, 5, 228, 3, 227, - 184, 222, 82, 94, 29, 5, 235, 189, 235, 95, 94, 29, 5, 235, 189, 235, 96, - 222, 82, 94, 29, 5, 222, 124, 94, 29, 5, 222, 125, 227, 183, 94, 29, 5, - 222, 125, 222, 82, 94, 29, 5, 222, 125, 227, 184, 222, 82, 94, 29, 5, - 229, 171, 94, 29, 5, 229, 172, 222, 82, 94, 254, 240, 254, 239, 94, 1, - 236, 247, 226, 128, 94, 1, 236, 122, 226, 128, 94, 1, 220, 183, 226, 128, - 94, 1, 246, 245, 226, 128, 94, 1, 219, 166, 226, 128, 94, 1, 217, 105, - 226, 128, 94, 1, 253, 246, 226, 128, 94, 20, 217, 84, 94, 20, 107, 94, - 20, 103, 94, 20, 160, 94, 20, 154, 94, 20, 174, 94, 20, 182, 94, 20, 191, - 94, 20, 185, 94, 20, 190, 94, 229, 254, 94, 230, 19, 94, 218, 193, 94, - 251, 132, 230, 13, 94, 251, 132, 224, 122, 94, 251, 132, 229, 228, 94, - 230, 18, 94, 26, 16, 248, 151, 94, 26, 16, 249, 59, 94, 26, 16, 247, 97, - 94, 26, 16, 249, 165, 94, 26, 16, 249, 166, 223, 51, 94, 26, 16, 248, - 218, 94, 26, 16, 249, 200, 94, 26, 16, 249, 44, 94, 26, 16, 249, 186, 94, - 26, 16, 249, 166, 244, 186, 94, 26, 16, 36, 222, 79, 94, 26, 16, 36, 246, - 188, 94, 26, 16, 36, 236, 169, 94, 26, 16, 36, 236, 171, 94, 26, 16, 36, - 237, 111, 94, 26, 16, 36, 236, 170, 2, 237, 111, 94, 26, 16, 36, 236, - 172, 2, 237, 111, 94, 26, 16, 36, 252, 112, 94, 26, 16, 36, 244, 61, 94, - 26, 16, 227, 107, 230, 119, 247, 107, 94, 26, 16, 227, 107, 230, 119, - 249, 198, 94, 26, 16, 227, 107, 250, 197, 220, 251, 94, 26, 16, 227, 107, - 250, 197, 222, 131, 94, 26, 16, 235, 113, 230, 119, 230, 9, 94, 26, 16, - 235, 113, 230, 119, 228, 195, 94, 26, 16, 235, 113, 250, 197, 229, 54, - 94, 26, 16, 235, 113, 250, 197, 229, 46, 94, 26, 16, 235, 113, 230, 119, - 229, 72, 223, 67, 5, 229, 251, 223, 67, 5, 230, 5, 223, 67, 5, 230, 3, - 223, 67, 1, 60, 223, 67, 1, 72, 223, 67, 1, 68, 223, 67, 1, 254, 234, - 223, 67, 1, 74, 223, 67, 1, 73, 223, 67, 1, 246, 115, 223, 67, 1, 175, - 223, 67, 1, 228, 155, 223, 67, 1, 245, 0, 223, 67, 1, 232, 115, 223, 67, - 1, 251, 169, 223, 67, 1, 237, 123, 223, 67, 1, 217, 114, 223, 67, 1, 231, - 77, 223, 67, 1, 222, 155, 223, 67, 1, 249, 207, 223, 67, 1, 208, 223, 67, - 1, 187, 223, 67, 1, 246, 8, 223, 67, 1, 219, 189, 223, 67, 1, 252, 237, - 223, 67, 1, 196, 223, 67, 1, 184, 223, 67, 1, 203, 223, 67, 1, 235, 188, - 223, 67, 1, 219, 7, 223, 67, 1, 226, 177, 223, 67, 1, 218, 138, 223, 67, - 1, 155, 223, 67, 250, 147, 5, 230, 16, 223, 67, 250, 147, 5, 229, 253, - 223, 67, 250, 147, 5, 229, 250, 223, 67, 29, 5, 230, 8, 223, 67, 29, 5, - 229, 249, 223, 67, 29, 5, 230, 11, 223, 67, 29, 5, 230, 2, 223, 67, 29, - 5, 230, 17, 223, 67, 29, 5, 230, 10, 223, 67, 5, 230, 20, 223, 67, 1, - 236, 149, 223, 67, 1, 223, 20, 223, 67, 20, 217, 84, 223, 67, 20, 107, - 223, 67, 20, 103, 223, 67, 20, 160, 223, 67, 20, 154, 223, 67, 20, 174, - 223, 67, 20, 182, 223, 67, 20, 191, 223, 67, 20, 185, 223, 67, 20, 190, - 169, 1, 175, 169, 1, 236, 67, 169, 1, 236, 149, 169, 1, 245, 0, 169, 1, - 244, 77, 169, 1, 232, 115, 169, 1, 251, 169, 169, 1, 251, 69, 169, 1, - 237, 123, 169, 1, 231, 77, 169, 1, 222, 155, 169, 1, 222, 35, 169, 1, - 249, 207, 169, 1, 208, 169, 1, 187, 169, 1, 229, 58, 169, 1, 229, 141, - 169, 1, 246, 8, 169, 1, 245, 165, 169, 1, 252, 237, 169, 1, 252, 54, 169, - 1, 196, 169, 1, 233, 142, 169, 1, 221, 55, 169, 1, 221, 47, 169, 1, 247, - 74, 169, 1, 184, 169, 1, 203, 169, 1, 235, 188, 169, 1, 155, 169, 1, 243, - 89, 169, 1, 219, 189, 169, 1, 226, 177, 169, 1, 225, 25, 169, 1, 219, 7, - 169, 1, 60, 169, 223, 97, 1, 184, 169, 223, 97, 1, 203, 169, 29, 5, 255, - 58, 169, 29, 5, 72, 169, 29, 5, 74, 169, 29, 5, 230, 127, 169, 29, 5, 68, - 169, 29, 5, 220, 23, 169, 29, 5, 73, 169, 250, 147, 5, 237, 17, 169, 250, - 147, 5, 189, 169, 250, 147, 5, 153, 169, 250, 147, 5, 207, 169, 250, 147, - 5, 230, 59, 169, 250, 147, 5, 152, 169, 250, 147, 5, 222, 201, 169, 250, - 147, 5, 231, 62, 169, 250, 147, 5, 236, 229, 169, 5, 227, 236, 169, 5, - 231, 112, 169, 228, 197, 222, 154, 169, 228, 197, 231, 69, 221, 208, 222, - 154, 169, 228, 197, 251, 74, 169, 228, 197, 221, 42, 251, 74, 169, 228, - 197, 221, 41, 169, 20, 217, 84, 169, 20, 107, 169, 20, 103, 169, 20, 160, - 169, 20, 154, 169, 20, 174, 169, 20, 182, 169, 20, 191, 169, 20, 185, - 169, 20, 190, 169, 1, 221, 29, 169, 1, 221, 19, 169, 1, 249, 132, 230, - 151, 251, 26, 20, 217, 84, 230, 151, 251, 26, 20, 107, 230, 151, 251, 26, - 20, 103, 230, 151, 251, 26, 20, 160, 230, 151, 251, 26, 20, 154, 230, - 151, 251, 26, 20, 174, 230, 151, 251, 26, 20, 182, 230, 151, 251, 26, 20, - 191, 230, 151, 251, 26, 20, 185, 230, 151, 251, 26, 20, 190, 230, 151, - 251, 26, 1, 235, 188, 230, 151, 251, 26, 1, 253, 244, 230, 151, 251, 26, - 1, 254, 209, 230, 151, 251, 26, 1, 254, 123, 230, 151, 251, 26, 1, 254, - 175, 230, 151, 251, 26, 1, 235, 187, 230, 151, 251, 26, 1, 255, 20, 230, - 151, 251, 26, 1, 255, 21, 230, 151, 251, 26, 1, 255, 19, 230, 151, 251, - 26, 1, 255, 15, 230, 151, 251, 26, 1, 235, 67, 230, 151, 251, 26, 1, 237, - 151, 230, 151, 251, 26, 1, 238, 0, 230, 151, 251, 26, 1, 237, 167, 230, - 151, 251, 26, 1, 237, 156, 230, 151, 251, 26, 1, 234, 231, 230, 151, 251, - 26, 1, 220, 117, 230, 151, 251, 26, 1, 220, 115, 230, 151, 251, 26, 1, - 220, 68, 230, 151, 251, 26, 1, 220, 16, 230, 151, 251, 26, 1, 235, 122, - 230, 151, 251, 26, 1, 246, 162, 230, 151, 251, 26, 1, 246, 253, 230, 151, - 251, 26, 1, 246, 197, 230, 151, 251, 26, 1, 246, 142, 230, 151, 251, 26, - 1, 235, 12, 230, 151, 251, 26, 1, 230, 89, 230, 151, 251, 26, 1, 230, - 181, 230, 151, 251, 26, 1, 230, 79, 230, 151, 251, 26, 1, 230, 161, 230, - 151, 251, 26, 233, 100, 221, 1, 230, 151, 251, 26, 244, 251, 221, 2, 230, - 151, 251, 26, 233, 98, 221, 2, 230, 151, 251, 26, 227, 193, 230, 151, - 251, 26, 229, 139, 230, 151, 251, 26, 254, 201, 230, 151, 251, 26, 228, - 197, 233, 96, 230, 151, 251, 26, 228, 197, 51, 233, 96, 219, 162, 145, - 236, 211, 219, 162, 145, 225, 2, 219, 162, 145, 228, 241, 219, 162, 5, - 232, 39, 219, 162, 5, 218, 56, 233, 191, 223, 39, 219, 162, 145, 218, 56, - 254, 206, 237, 214, 223, 39, 219, 162, 145, 218, 56, 237, 214, 223, 39, - 219, 162, 145, 218, 56, 236, 199, 237, 214, 223, 39, 219, 162, 145, 251, - 149, 56, 219, 162, 145, 218, 56, 236, 199, 237, 214, 223, 40, 226, 106, - 219, 162, 145, 51, 223, 39, 219, 162, 145, 221, 78, 223, 39, 219, 162, - 145, 236, 199, 254, 97, 219, 162, 145, 61, 56, 219, 162, 145, 124, 188, - 56, 219, 162, 145, 148, 188, 56, 219, 162, 145, 227, 99, 236, 210, 237, - 214, 223, 39, 219, 162, 145, 253, 242, 237, 214, 223, 39, 219, 162, 5, - 219, 78, 223, 39, 219, 162, 5, 219, 78, 220, 112, 219, 162, 5, 210, 219, - 78, 220, 112, 219, 162, 5, 219, 78, 254, 97, 219, 162, 5, 210, 219, 78, - 254, 97, 219, 162, 5, 219, 78, 220, 113, 2, 222, 135, 219, 162, 5, 219, - 78, 254, 98, 2, 222, 135, 219, 162, 5, 254, 96, 254, 105, 219, 162, 5, - 254, 96, 252, 222, 219, 162, 5, 254, 96, 219, 184, 219, 162, 5, 254, 96, - 219, 185, 2, 222, 135, 219, 162, 5, 221, 162, 219, 162, 5, 243, 123, 171, - 254, 95, 219, 162, 5, 171, 254, 95, 219, 162, 5, 227, 24, 171, 254, 95, - 219, 162, 5, 254, 96, 220, 119, 233, 90, 219, 162, 5, 254, 46, 7, 1, 3, - 6, 60, 7, 1, 3, 6, 254, 234, 7, 3, 1, 215, 254, 234, 7, 1, 3, 6, 252, - 196, 253, 204, 7, 1, 3, 6, 251, 202, 7, 1, 3, 6, 250, 46, 7, 1, 3, 6, - 246, 118, 7, 1, 3, 6, 73, 7, 3, 1, 215, 230, 119, 73, 7, 3, 1, 215, 72, - 7, 1, 3, 6, 237, 126, 7, 1, 3, 6, 237, 17, 7, 1, 3, 6, 235, 202, 2, 92, - 7, 1, 3, 6, 189, 7, 1, 3, 6, 210, 207, 7, 1, 3, 6, 74, 7, 1, 3, 6, 230, - 119, 74, 7, 3, 1, 224, 136, 74, 7, 3, 1, 224, 136, 230, 119, 74, 7, 3, 1, - 224, 136, 142, 2, 92, 7, 3, 1, 215, 230, 167, 7, 1, 3, 6, 230, 86, 7, 3, - 1, 221, 120, 144, 74, 7, 3, 1, 252, 29, 144, 74, 7, 1, 3, 6, 230, 59, 7, - 1, 3, 6, 210, 152, 7, 1, 3, 6, 215, 152, 7, 1, 3, 6, 222, 201, 7, 1, 3, - 6, 68, 7, 3, 1, 224, 136, 68, 7, 3, 1, 224, 136, 249, 12, 68, 7, 3, 1, - 224, 136, 215, 189, 7, 1, 3, 6, 216, 216, 7, 1, 3, 6, 219, 40, 7, 1, 3, - 6, 217, 157, 7, 1, 3, 6, 246, 76, 7, 1, 219, 70, 235, 144, 223, 241, 7, - 1, 254, 191, 23, 1, 3, 6, 244, 231, 23, 1, 3, 6, 235, 156, 23, 1, 3, 6, - 229, 108, 23, 1, 3, 6, 227, 149, 23, 1, 3, 6, 228, 212, 31, 1, 3, 6, 246, - 217, 58, 1, 6, 60, 58, 1, 6, 254, 234, 58, 1, 6, 253, 204, 58, 1, 6, 252, - 196, 253, 204, 58, 1, 6, 250, 46, 58, 1, 6, 73, 58, 1, 6, 210, 73, 58, 1, - 6, 245, 67, 58, 1, 6, 243, 225, 58, 1, 6, 72, 58, 1, 6, 237, 126, 58, 1, - 6, 237, 17, 58, 1, 6, 153, 58, 1, 6, 189, 58, 1, 6, 207, 58, 1, 6, 210, - 207, 58, 1, 6, 74, 58, 1, 6, 230, 86, 58, 1, 6, 230, 59, 58, 1, 6, 152, - 58, 1, 6, 222, 201, 58, 1, 6, 68, 58, 1, 6, 219, 40, 58, 1, 3, 60, 58, 1, - 3, 215, 60, 58, 1, 3, 254, 146, 58, 1, 3, 215, 254, 234, 58, 1, 3, 253, - 204, 58, 1, 3, 250, 46, 58, 1, 3, 73, 58, 1, 3, 226, 104, 58, 1, 3, 230, - 119, 73, 58, 1, 3, 215, 230, 119, 73, 58, 1, 3, 245, 67, 58, 1, 3, 215, - 72, 58, 1, 3, 237, 17, 58, 1, 3, 189, 58, 1, 3, 246, 185, 58, 1, 3, 74, - 58, 1, 3, 230, 119, 74, 58, 1, 3, 221, 120, 144, 74, 58, 1, 3, 252, 29, - 144, 74, 58, 1, 3, 230, 59, 58, 1, 3, 222, 201, 58, 1, 3, 68, 58, 1, 3, - 224, 136, 68, 58, 1, 3, 215, 189, 58, 1, 3, 216, 216, 58, 1, 3, 254, 191, - 58, 1, 3, 252, 102, 58, 1, 3, 23, 244, 231, 58, 1, 3, 249, 62, 58, 1, 3, - 23, 229, 129, 58, 1, 3, 251, 31, 7, 223, 94, 3, 1, 72, 7, 223, 94, 3, 1, - 152, 7, 223, 94, 3, 1, 68, 7, 223, 94, 3, 1, 216, 216, 23, 223, 94, 3, 1, - 252, 102, 23, 223, 94, 3, 1, 244, 231, 23, 223, 94, 3, 1, 227, 149, 23, - 223, 94, 3, 1, 229, 129, 23, 223, 94, 3, 1, 251, 31, 7, 3, 1, 220, 110, - 7, 3, 1, 49, 2, 233, 193, 221, 179, 7, 3, 1, 250, 47, 2, 233, 193, 221, - 179, 7, 3, 1, 246, 75, 2, 233, 193, 221, 179, 7, 3, 1, 234, 187, 2, 233, - 193, 221, 179, 7, 3, 1, 233, 34, 2, 233, 193, 221, 179, 7, 3, 1, 230, 60, - 2, 233, 193, 221, 179, 7, 3, 1, 228, 39, 2, 233, 193, 221, 179, 7, 3, 1, - 228, 39, 2, 245, 174, 25, 233, 193, 221, 179, 7, 3, 1, 226, 235, 2, 233, - 193, 221, 179, 7, 3, 1, 222, 202, 2, 233, 193, 221, 179, 7, 3, 1, 217, - 158, 2, 233, 193, 221, 179, 7, 3, 1, 215, 245, 67, 58, 1, 31, 246, 197, - 7, 3, 1, 237, 188, 245, 67, 7, 3, 1, 222, 38, 2, 223, 121, 7, 3, 6, 1, - 242, 107, 2, 92, 7, 3, 1, 237, 163, 2, 92, 7, 3, 1, 230, 60, 2, 92, 7, 3, - 6, 1, 105, 2, 92, 7, 3, 1, 220, 58, 2, 92, 7, 3, 1, 49, 2, 230, 29, 96, - 7, 3, 1, 250, 47, 2, 230, 29, 96, 7, 3, 1, 246, 75, 2, 230, 29, 96, 7, 3, - 1, 245, 68, 2, 230, 29, 96, 7, 3, 1, 237, 18, 2, 230, 29, 96, 7, 3, 1, - 235, 202, 2, 230, 29, 96, 7, 3, 1, 234, 187, 2, 230, 29, 96, 7, 3, 1, - 233, 34, 2, 230, 29, 96, 7, 3, 1, 230, 60, 2, 230, 29, 96, 7, 3, 1, 228, - 39, 2, 230, 29, 96, 7, 3, 1, 226, 235, 2, 230, 29, 96, 7, 3, 1, 246, 134, - 2, 230, 29, 96, 7, 3, 1, 220, 11, 2, 230, 29, 96, 7, 3, 1, 218, 152, 2, - 230, 29, 96, 7, 3, 1, 217, 158, 2, 230, 29, 96, 7, 3, 1, 112, 2, 227, - 164, 96, 7, 3, 1, 254, 147, 2, 227, 164, 96, 7, 3, 1, 250, 47, 2, 242, - 247, 25, 222, 135, 7, 3, 1, 178, 2, 227, 164, 96, 7, 3, 1, 230, 119, 178, - 2, 227, 164, 96, 7, 3, 1, 210, 230, 119, 178, 2, 227, 164, 96, 7, 3, 1, - 226, 105, 2, 227, 164, 96, 7, 3, 1, 242, 107, 2, 227, 164, 96, 7, 3, 1, - 230, 119, 142, 2, 227, 164, 96, 7, 3, 1, 246, 134, 2, 227, 164, 96, 7, 3, - 1, 105, 2, 227, 164, 96, 7, 3, 1, 246, 77, 2, 227, 164, 96, 58, 1, 3, - 215, 254, 146, 58, 1, 3, 251, 202, 58, 1, 3, 251, 203, 2, 250, 80, 58, 1, - 3, 246, 118, 58, 1, 3, 210, 230, 119, 73, 58, 1, 3, 246, 74, 58, 1, 3, - 248, 144, 237, 127, 2, 92, 58, 1, 3, 102, 245, 67, 58, 1, 3, 215, 243, - 225, 58, 1, 3, 242, 107, 2, 92, 58, 1, 3, 237, 162, 58, 1, 3, 6, 72, 58, - 1, 3, 6, 242, 107, 2, 92, 58, 1, 3, 237, 127, 2, 250, 97, 58, 1, 3, 235, - 202, 2, 227, 164, 96, 58, 1, 3, 235, 202, 2, 230, 29, 96, 58, 1, 3, 6, - 153, 58, 1, 3, 234, 187, 2, 96, 58, 1, 3, 215, 234, 187, 2, 171, 235, - 106, 58, 1, 3, 233, 34, 2, 42, 96, 58, 1, 3, 233, 34, 2, 227, 164, 96, - 58, 1, 3, 6, 207, 58, 1, 3, 252, 196, 74, 58, 1, 3, 229, 129, 58, 1, 3, - 226, 235, 2, 96, 58, 1, 3, 246, 133, 58, 1, 3, 222, 202, 2, 230, 29, 96, - 58, 1, 3, 105, 135, 58, 1, 3, 220, 57, 58, 1, 3, 6, 68, 58, 1, 3, 220, - 11, 2, 96, 58, 1, 3, 215, 216, 216, 58, 1, 3, 217, 157, 58, 1, 3, 217, - 158, 2, 227, 164, 96, 58, 1, 3, 217, 158, 2, 250, 80, 58, 1, 3, 246, 76, - 58, 1, 3, 222, 6, 36, 247, 143, 244, 37, 255, 0, 36, 247, 143, 254, 248, - 255, 0, 36, 224, 36, 56, 36, 223, 45, 78, 36, 234, 114, 36, 244, 34, 36, - 234, 112, 36, 254, 246, 36, 244, 35, 36, 254, 247, 36, 7, 3, 1, 228, 39, - 56, 36, 252, 7, 36, 234, 113, 36, 51, 250, 217, 50, 36, 230, 163, 50, 36, - 217, 33, 56, 36, 237, 152, 56, 36, 220, 51, 50, 36, 220, 35, 50, 36, 7, - 3, 1, 245, 154, 230, 119, 112, 50, 36, 7, 3, 1, 254, 234, 36, 7, 3, 1, - 254, 93, 36, 7, 3, 1, 253, 220, 36, 7, 3, 1, 251, 203, 251, 92, 36, 7, 3, - 1, 237, 188, 250, 46, 36, 7, 3, 1, 246, 118, 36, 7, 3, 1, 245, 67, 36, 7, - 1, 3, 6, 245, 67, 36, 7, 3, 1, 237, 17, 36, 7, 3, 1, 153, 36, 7, 1, 3, 6, - 153, 36, 7, 1, 3, 6, 189, 36, 7, 3, 1, 207, 36, 7, 1, 3, 6, 207, 36, 7, - 1, 3, 6, 152, 36, 7, 3, 1, 228, 39, 227, 58, 36, 7, 3, 1, 198, 36, 7, 3, - 1, 171, 198, 36, 7, 3, 1, 217, 157, 36, 254, 151, 114, 199, 56, 36, 42, - 254, 21, 50, 36, 45, 254, 21, 25, 113, 254, 21, 56, 7, 6, 1, 112, 2, 227, - 94, 56, 7, 3, 1, 112, 2, 227, 94, 56, 7, 6, 1, 49, 2, 61, 50, 7, 3, 1, - 49, 2, 61, 50, 7, 6, 1, 49, 2, 61, 56, 7, 3, 1, 49, 2, 61, 56, 7, 6, 1, - 49, 2, 235, 44, 56, 7, 3, 1, 49, 2, 235, 44, 56, 7, 6, 1, 251, 203, 2, - 251, 93, 25, 168, 7, 3, 1, 251, 203, 2, 251, 93, 25, 168, 7, 6, 1, 250, - 47, 2, 61, 50, 7, 3, 1, 250, 47, 2, 61, 50, 7, 6, 1, 250, 47, 2, 61, 56, - 7, 3, 1, 250, 47, 2, 61, 56, 7, 6, 1, 250, 47, 2, 235, 44, 56, 7, 3, 1, - 250, 47, 2, 235, 44, 56, 7, 6, 1, 250, 47, 2, 251, 92, 7, 3, 1, 250, 47, - 2, 251, 92, 7, 6, 1, 250, 47, 2, 250, 217, 56, 7, 3, 1, 250, 47, 2, 250, - 217, 56, 7, 6, 1, 178, 2, 234, 116, 25, 244, 36, 7, 3, 1, 178, 2, 234, - 116, 25, 244, 36, 7, 6, 1, 178, 2, 234, 116, 25, 168, 7, 3, 1, 178, 2, - 234, 116, 25, 168, 7, 6, 1, 178, 2, 250, 217, 56, 7, 3, 1, 178, 2, 250, - 217, 56, 7, 6, 1, 178, 2, 221, 180, 56, 7, 3, 1, 178, 2, 221, 180, 56, 7, - 6, 1, 178, 2, 251, 93, 25, 252, 8, 7, 3, 1, 178, 2, 251, 93, 25, 252, 8, - 7, 6, 1, 246, 75, 2, 61, 50, 7, 3, 1, 246, 75, 2, 61, 50, 7, 6, 1, 245, - 68, 2, 234, 115, 7, 3, 1, 245, 68, 2, 234, 115, 7, 6, 1, 243, 226, 2, 61, - 50, 7, 3, 1, 243, 226, 2, 61, 50, 7, 6, 1, 243, 226, 2, 61, 56, 7, 3, 1, - 243, 226, 2, 61, 56, 7, 6, 1, 243, 226, 2, 249, 13, 7, 3, 1, 243, 226, 2, - 249, 13, 7, 6, 1, 243, 226, 2, 251, 92, 7, 3, 1, 243, 226, 2, 251, 92, 7, - 6, 1, 243, 226, 2, 252, 9, 56, 7, 3, 1, 243, 226, 2, 252, 9, 56, 7, 6, 1, - 242, 107, 2, 221, 180, 56, 7, 3, 1, 242, 107, 2, 221, 180, 56, 7, 6, 1, - 242, 107, 2, 249, 14, 25, 168, 7, 3, 1, 242, 107, 2, 249, 14, 25, 168, 7, - 6, 1, 237, 18, 2, 168, 7, 3, 1, 237, 18, 2, 168, 7, 6, 1, 237, 18, 2, 61, - 56, 7, 3, 1, 237, 18, 2, 61, 56, 7, 6, 1, 237, 18, 2, 235, 44, 56, 7, 3, - 1, 237, 18, 2, 235, 44, 56, 7, 6, 1, 235, 202, 2, 61, 56, 7, 3, 1, 235, - 202, 2, 61, 56, 7, 6, 1, 235, 202, 2, 61, 252, 118, 25, 234, 115, 7, 3, - 1, 235, 202, 2, 61, 252, 118, 25, 234, 115, 7, 6, 1, 235, 202, 2, 235, - 44, 56, 7, 3, 1, 235, 202, 2, 235, 44, 56, 7, 6, 1, 235, 202, 2, 250, - 217, 56, 7, 3, 1, 235, 202, 2, 250, 217, 56, 7, 6, 1, 234, 187, 2, 168, - 7, 3, 1, 234, 187, 2, 168, 7, 6, 1, 234, 187, 2, 61, 50, 7, 3, 1, 234, - 187, 2, 61, 50, 7, 6, 1, 234, 187, 2, 61, 56, 7, 3, 1, 234, 187, 2, 61, - 56, 7, 6, 1, 233, 34, 2, 61, 50, 7, 3, 1, 233, 34, 2, 61, 50, 7, 6, 1, - 233, 34, 2, 61, 56, 7, 3, 1, 233, 34, 2, 61, 56, 7, 6, 1, 233, 34, 2, - 235, 44, 56, 7, 3, 1, 233, 34, 2, 235, 44, 56, 7, 6, 1, 233, 34, 2, 250, - 217, 56, 7, 3, 1, 233, 34, 2, 250, 217, 56, 7, 6, 1, 142, 2, 221, 180, - 25, 168, 7, 3, 1, 142, 2, 221, 180, 25, 168, 7, 6, 1, 142, 2, 221, 180, - 25, 249, 13, 7, 3, 1, 142, 2, 221, 180, 25, 249, 13, 7, 6, 1, 142, 2, - 234, 116, 25, 244, 36, 7, 3, 1, 142, 2, 234, 116, 25, 244, 36, 7, 6, 1, - 142, 2, 234, 116, 25, 168, 7, 3, 1, 142, 2, 234, 116, 25, 168, 7, 6, 1, - 230, 60, 2, 168, 7, 3, 1, 230, 60, 2, 168, 7, 6, 1, 230, 60, 2, 61, 50, - 7, 3, 1, 230, 60, 2, 61, 50, 7, 6, 1, 228, 39, 2, 61, 50, 7, 3, 1, 228, - 39, 2, 61, 50, 7, 6, 1, 228, 39, 2, 61, 56, 7, 3, 1, 228, 39, 2, 61, 56, - 7, 6, 1, 228, 39, 2, 61, 252, 118, 25, 234, 115, 7, 3, 1, 228, 39, 2, 61, - 252, 118, 25, 234, 115, 7, 6, 1, 228, 39, 2, 235, 44, 56, 7, 3, 1, 228, - 39, 2, 235, 44, 56, 7, 6, 1, 226, 235, 2, 61, 50, 7, 3, 1, 226, 235, 2, - 61, 50, 7, 6, 1, 226, 235, 2, 61, 56, 7, 3, 1, 226, 235, 2, 61, 56, 7, 6, - 1, 226, 235, 2, 254, 248, 25, 61, 50, 7, 3, 1, 226, 235, 2, 254, 248, 25, - 61, 50, 7, 6, 1, 226, 235, 2, 251, 131, 25, 61, 50, 7, 3, 1, 226, 235, 2, - 251, 131, 25, 61, 50, 7, 6, 1, 226, 235, 2, 61, 252, 118, 25, 61, 50, 7, - 3, 1, 226, 235, 2, 61, 252, 118, 25, 61, 50, 7, 6, 1, 222, 202, 2, 61, - 50, 7, 3, 1, 222, 202, 2, 61, 50, 7, 6, 1, 222, 202, 2, 61, 56, 7, 3, 1, - 222, 202, 2, 61, 56, 7, 6, 1, 222, 202, 2, 235, 44, 56, 7, 3, 1, 222, - 202, 2, 235, 44, 56, 7, 6, 1, 222, 202, 2, 250, 217, 56, 7, 3, 1, 222, - 202, 2, 250, 217, 56, 7, 6, 1, 105, 2, 249, 14, 56, 7, 3, 1, 105, 2, 249, - 14, 56, 7, 6, 1, 105, 2, 221, 180, 56, 7, 3, 1, 105, 2, 221, 180, 56, 7, - 6, 1, 105, 2, 250, 217, 56, 7, 3, 1, 105, 2, 250, 217, 56, 7, 6, 1, 105, - 2, 221, 180, 25, 168, 7, 3, 1, 105, 2, 221, 180, 25, 168, 7, 6, 1, 105, - 2, 234, 116, 25, 249, 13, 7, 3, 1, 105, 2, 234, 116, 25, 249, 13, 7, 6, - 1, 220, 11, 2, 221, 179, 7, 3, 1, 220, 11, 2, 221, 179, 7, 6, 1, 220, 11, - 2, 61, 56, 7, 3, 1, 220, 11, 2, 61, 56, 7, 6, 1, 219, 41, 2, 244, 36, 7, - 3, 1, 219, 41, 2, 244, 36, 7, 6, 1, 219, 41, 2, 168, 7, 3, 1, 219, 41, 2, - 168, 7, 6, 1, 219, 41, 2, 249, 13, 7, 3, 1, 219, 41, 2, 249, 13, 7, 6, 1, - 219, 41, 2, 61, 50, 7, 3, 1, 219, 41, 2, 61, 50, 7, 6, 1, 219, 41, 2, 61, - 56, 7, 3, 1, 219, 41, 2, 61, 56, 7, 6, 1, 218, 152, 2, 61, 50, 7, 3, 1, - 218, 152, 2, 61, 50, 7, 6, 1, 218, 152, 2, 249, 13, 7, 3, 1, 218, 152, 2, - 249, 13, 7, 6, 1, 218, 91, 2, 61, 50, 7, 3, 1, 218, 91, 2, 61, 50, 7, 6, - 1, 217, 158, 2, 250, 216, 7, 3, 1, 217, 158, 2, 250, 216, 7, 6, 1, 217, - 158, 2, 61, 56, 7, 3, 1, 217, 158, 2, 61, 56, 7, 6, 1, 217, 158, 2, 235, - 44, 56, 7, 3, 1, 217, 158, 2, 235, 44, 56, 7, 3, 1, 243, 226, 2, 235, 44, - 56, 7, 3, 1, 222, 202, 2, 249, 13, 7, 3, 1, 219, 41, 2, 227, 94, 50, 7, - 3, 1, 218, 91, 2, 227, 94, 50, 7, 3, 1, 112, 2, 45, 144, 227, 93, 7, 3, - 1, 171, 226, 235, 2, 61, 50, 7, 3, 1, 171, 226, 235, 2, 249, 11, 92, 7, - 3, 1, 171, 226, 235, 2, 116, 92, 7, 6, 1, 225, 1, 198, 7, 3, 1, 249, 62, - 7, 6, 1, 112, 2, 61, 56, 7, 3, 1, 112, 2, 61, 56, 7, 6, 1, 112, 2, 242, - 247, 50, 7, 3, 1, 112, 2, 242, 247, 50, 7, 6, 1, 112, 2, 250, 217, 25, - 168, 7, 3, 1, 112, 2, 250, 217, 25, 168, 7, 6, 1, 112, 2, 250, 217, 25, - 244, 36, 7, 3, 1, 112, 2, 250, 217, 25, 244, 36, 7, 6, 1, 112, 2, 250, - 217, 25, 242, 247, 50, 7, 3, 1, 112, 2, 250, 217, 25, 242, 247, 50, 7, 6, - 1, 112, 2, 250, 217, 25, 221, 179, 7, 3, 1, 112, 2, 250, 217, 25, 221, - 179, 7, 6, 1, 112, 2, 250, 217, 25, 61, 56, 7, 3, 1, 112, 2, 250, 217, - 25, 61, 56, 7, 6, 1, 112, 2, 252, 9, 25, 168, 7, 3, 1, 112, 2, 252, 9, - 25, 168, 7, 6, 1, 112, 2, 252, 9, 25, 244, 36, 7, 3, 1, 112, 2, 252, 9, - 25, 244, 36, 7, 6, 1, 112, 2, 252, 9, 25, 242, 247, 50, 7, 3, 1, 112, 2, - 252, 9, 25, 242, 247, 50, 7, 6, 1, 112, 2, 252, 9, 25, 221, 179, 7, 3, 1, - 112, 2, 252, 9, 25, 221, 179, 7, 6, 1, 112, 2, 252, 9, 25, 61, 56, 7, 3, - 1, 112, 2, 252, 9, 25, 61, 56, 7, 6, 1, 178, 2, 61, 56, 7, 3, 1, 178, 2, - 61, 56, 7, 6, 1, 178, 2, 242, 247, 50, 7, 3, 1, 178, 2, 242, 247, 50, 7, - 6, 1, 178, 2, 221, 179, 7, 3, 1, 178, 2, 221, 179, 7, 6, 1, 178, 2, 250, - 217, 25, 168, 7, 3, 1, 178, 2, 250, 217, 25, 168, 7, 6, 1, 178, 2, 250, - 217, 25, 244, 36, 7, 3, 1, 178, 2, 250, 217, 25, 244, 36, 7, 6, 1, 178, - 2, 250, 217, 25, 242, 247, 50, 7, 3, 1, 178, 2, 250, 217, 25, 242, 247, - 50, 7, 6, 1, 178, 2, 250, 217, 25, 221, 179, 7, 3, 1, 178, 2, 250, 217, - 25, 221, 179, 7, 6, 1, 178, 2, 250, 217, 25, 61, 56, 7, 3, 1, 178, 2, - 250, 217, 25, 61, 56, 7, 6, 1, 242, 107, 2, 242, 247, 50, 7, 3, 1, 242, - 107, 2, 242, 247, 50, 7, 6, 1, 242, 107, 2, 61, 56, 7, 3, 1, 242, 107, 2, - 61, 56, 7, 6, 1, 142, 2, 61, 56, 7, 3, 1, 142, 2, 61, 56, 7, 6, 1, 142, - 2, 242, 247, 50, 7, 3, 1, 142, 2, 242, 247, 50, 7, 6, 1, 142, 2, 250, - 217, 25, 168, 7, 3, 1, 142, 2, 250, 217, 25, 168, 7, 6, 1, 142, 2, 250, - 217, 25, 244, 36, 7, 3, 1, 142, 2, 250, 217, 25, 244, 36, 7, 6, 1, 142, - 2, 250, 217, 25, 242, 247, 50, 7, 3, 1, 142, 2, 250, 217, 25, 242, 247, - 50, 7, 6, 1, 142, 2, 250, 217, 25, 221, 179, 7, 3, 1, 142, 2, 250, 217, - 25, 221, 179, 7, 6, 1, 142, 2, 250, 217, 25, 61, 56, 7, 3, 1, 142, 2, - 250, 217, 25, 61, 56, 7, 6, 1, 142, 2, 242, 190, 25, 168, 7, 3, 1, 142, - 2, 242, 190, 25, 168, 7, 6, 1, 142, 2, 242, 190, 25, 244, 36, 7, 3, 1, - 142, 2, 242, 190, 25, 244, 36, 7, 6, 1, 142, 2, 242, 190, 25, 242, 247, - 50, 7, 3, 1, 142, 2, 242, 190, 25, 242, 247, 50, 7, 6, 1, 142, 2, 242, - 190, 25, 221, 179, 7, 3, 1, 142, 2, 242, 190, 25, 221, 179, 7, 6, 1, 142, - 2, 242, 190, 25, 61, 56, 7, 3, 1, 142, 2, 242, 190, 25, 61, 56, 7, 6, 1, - 105, 2, 61, 56, 7, 3, 1, 105, 2, 61, 56, 7, 6, 1, 105, 2, 242, 247, 50, - 7, 3, 1, 105, 2, 242, 247, 50, 7, 6, 1, 105, 2, 242, 190, 25, 168, 7, 3, - 1, 105, 2, 242, 190, 25, 168, 7, 6, 1, 105, 2, 242, 190, 25, 244, 36, 7, - 3, 1, 105, 2, 242, 190, 25, 244, 36, 7, 6, 1, 105, 2, 242, 190, 25, 242, - 247, 50, 7, 3, 1, 105, 2, 242, 190, 25, 242, 247, 50, 7, 6, 1, 105, 2, - 242, 190, 25, 221, 179, 7, 3, 1, 105, 2, 242, 190, 25, 221, 179, 7, 6, 1, - 105, 2, 242, 190, 25, 61, 56, 7, 3, 1, 105, 2, 242, 190, 25, 61, 56, 7, - 6, 1, 218, 91, 2, 244, 36, 7, 3, 1, 218, 91, 2, 244, 36, 7, 6, 1, 218, - 91, 2, 61, 56, 7, 3, 1, 218, 91, 2, 61, 56, 7, 6, 1, 218, 91, 2, 242, - 247, 50, 7, 3, 1, 218, 91, 2, 242, 247, 50, 7, 6, 1, 218, 91, 2, 221, - 179, 7, 3, 1, 218, 91, 2, 221, 179, 7, 6, 1, 233, 192, 235, 18, 7, 3, 1, - 233, 192, 235, 18, 7, 6, 1, 233, 192, 216, 216, 7, 3, 1, 233, 192, 216, - 216, 7, 6, 1, 218, 91, 2, 234, 247, 7, 3, 1, 218, 91, 2, 234, 247, 23, 3, - 1, 254, 147, 2, 228, 206, 23, 3, 1, 254, 147, 2, 249, 144, 23, 3, 1, 254, - 147, 2, 209, 25, 219, 178, 23, 3, 1, 254, 147, 2, 193, 25, 219, 178, 23, - 3, 1, 254, 147, 2, 209, 25, 230, 64, 23, 3, 1, 254, 147, 2, 193, 25, 230, - 64, 23, 3, 1, 254, 147, 2, 209, 25, 229, 163, 23, 3, 1, 254, 147, 2, 193, - 25, 229, 163, 23, 6, 1, 254, 147, 2, 228, 206, 23, 6, 1, 254, 147, 2, - 249, 144, 23, 6, 1, 254, 147, 2, 209, 25, 219, 178, 23, 6, 1, 254, 147, - 2, 193, 25, 219, 178, 23, 6, 1, 254, 147, 2, 209, 25, 230, 64, 23, 6, 1, - 254, 147, 2, 193, 25, 230, 64, 23, 6, 1, 254, 147, 2, 209, 25, 229, 163, - 23, 6, 1, 254, 147, 2, 193, 25, 229, 163, 23, 3, 1, 246, 157, 2, 228, - 206, 23, 3, 1, 246, 157, 2, 249, 144, 23, 3, 1, 246, 157, 2, 209, 25, - 219, 178, 23, 3, 1, 246, 157, 2, 193, 25, 219, 178, 23, 3, 1, 246, 157, - 2, 209, 25, 230, 64, 23, 3, 1, 246, 157, 2, 193, 25, 230, 64, 23, 6, 1, - 246, 157, 2, 228, 206, 23, 6, 1, 246, 157, 2, 249, 144, 23, 6, 1, 246, - 157, 2, 209, 25, 219, 178, 23, 6, 1, 246, 157, 2, 193, 25, 219, 178, 23, - 6, 1, 246, 157, 2, 209, 25, 230, 64, 23, 6, 1, 246, 157, 2, 193, 25, 230, - 64, 23, 3, 1, 246, 122, 2, 228, 206, 23, 3, 1, 246, 122, 2, 249, 144, 23, - 3, 1, 246, 122, 2, 209, 25, 219, 178, 23, 3, 1, 246, 122, 2, 193, 25, - 219, 178, 23, 3, 1, 246, 122, 2, 209, 25, 230, 64, 23, 3, 1, 246, 122, 2, - 193, 25, 230, 64, 23, 3, 1, 246, 122, 2, 209, 25, 229, 163, 23, 3, 1, - 246, 122, 2, 193, 25, 229, 163, 23, 6, 1, 246, 122, 2, 228, 206, 23, 6, - 1, 246, 122, 2, 249, 144, 23, 6, 1, 246, 122, 2, 209, 25, 219, 178, 23, - 6, 1, 246, 122, 2, 193, 25, 219, 178, 23, 6, 1, 246, 122, 2, 209, 25, - 230, 64, 23, 6, 1, 246, 122, 2, 193, 25, 230, 64, 23, 6, 1, 246, 122, 2, - 209, 25, 229, 163, 23, 6, 1, 246, 122, 2, 193, 25, 229, 163, 23, 3, 1, - 237, 163, 2, 228, 206, 23, 3, 1, 237, 163, 2, 249, 144, 23, 3, 1, 237, - 163, 2, 209, 25, 219, 178, 23, 3, 1, 237, 163, 2, 193, 25, 219, 178, 23, - 3, 1, 237, 163, 2, 209, 25, 230, 64, 23, 3, 1, 237, 163, 2, 193, 25, 230, - 64, 23, 3, 1, 237, 163, 2, 209, 25, 229, 163, 23, 3, 1, 237, 163, 2, 193, - 25, 229, 163, 23, 6, 1, 237, 163, 2, 228, 206, 23, 6, 1, 237, 163, 2, - 249, 144, 23, 6, 1, 237, 163, 2, 209, 25, 219, 178, 23, 6, 1, 237, 163, - 2, 193, 25, 219, 178, 23, 6, 1, 237, 163, 2, 209, 25, 230, 64, 23, 6, 1, - 237, 163, 2, 193, 25, 230, 64, 23, 6, 1, 237, 163, 2, 209, 25, 229, 163, - 23, 6, 1, 237, 163, 2, 193, 25, 229, 163, 23, 3, 1, 230, 142, 2, 228, - 206, 23, 3, 1, 230, 142, 2, 249, 144, 23, 3, 1, 230, 142, 2, 209, 25, - 219, 178, 23, 3, 1, 230, 142, 2, 193, 25, 219, 178, 23, 3, 1, 230, 142, - 2, 209, 25, 230, 64, 23, 3, 1, 230, 142, 2, 193, 25, 230, 64, 23, 6, 1, - 230, 142, 2, 228, 206, 23, 6, 1, 230, 142, 2, 249, 144, 23, 6, 1, 230, - 142, 2, 209, 25, 219, 178, 23, 6, 1, 230, 142, 2, 193, 25, 219, 178, 23, - 6, 1, 230, 142, 2, 209, 25, 230, 64, 23, 6, 1, 230, 142, 2, 193, 25, 230, - 64, 23, 3, 1, 220, 58, 2, 228, 206, 23, 3, 1, 220, 58, 2, 249, 144, 23, - 3, 1, 220, 58, 2, 209, 25, 219, 178, 23, 3, 1, 220, 58, 2, 193, 25, 219, - 178, 23, 3, 1, 220, 58, 2, 209, 25, 230, 64, 23, 3, 1, 220, 58, 2, 193, - 25, 230, 64, 23, 3, 1, 220, 58, 2, 209, 25, 229, 163, 23, 3, 1, 220, 58, - 2, 193, 25, 229, 163, 23, 6, 1, 220, 58, 2, 249, 144, 23, 6, 1, 220, 58, - 2, 193, 25, 219, 178, 23, 6, 1, 220, 58, 2, 193, 25, 230, 64, 23, 6, 1, - 220, 58, 2, 193, 25, 229, 163, 23, 3, 1, 230, 144, 2, 228, 206, 23, 3, 1, - 230, 144, 2, 249, 144, 23, 3, 1, 230, 144, 2, 209, 25, 219, 178, 23, 3, - 1, 230, 144, 2, 193, 25, 219, 178, 23, 3, 1, 230, 144, 2, 209, 25, 230, - 64, 23, 3, 1, 230, 144, 2, 193, 25, 230, 64, 23, 3, 1, 230, 144, 2, 209, - 25, 229, 163, 23, 3, 1, 230, 144, 2, 193, 25, 229, 163, 23, 6, 1, 230, - 144, 2, 228, 206, 23, 6, 1, 230, 144, 2, 249, 144, 23, 6, 1, 230, 144, 2, - 209, 25, 219, 178, 23, 6, 1, 230, 144, 2, 193, 25, 219, 178, 23, 6, 1, - 230, 144, 2, 209, 25, 230, 64, 23, 6, 1, 230, 144, 2, 193, 25, 230, 64, - 23, 6, 1, 230, 144, 2, 209, 25, 229, 163, 23, 6, 1, 230, 144, 2, 193, 25, - 229, 163, 23, 3, 1, 254, 147, 2, 219, 178, 23, 3, 1, 254, 147, 2, 230, - 64, 23, 3, 1, 246, 157, 2, 219, 178, 23, 3, 1, 246, 157, 2, 230, 64, 23, - 3, 1, 246, 122, 2, 219, 178, 23, 3, 1, 246, 122, 2, 230, 64, 23, 3, 1, - 237, 163, 2, 219, 178, 23, 3, 1, 237, 163, 2, 230, 64, 23, 3, 1, 230, - 142, 2, 219, 178, 23, 3, 1, 230, 142, 2, 230, 64, 23, 3, 1, 220, 58, 2, - 219, 178, 23, 3, 1, 220, 58, 2, 230, 64, 23, 3, 1, 230, 144, 2, 219, 178, - 23, 3, 1, 230, 144, 2, 230, 64, 23, 3, 1, 254, 147, 2, 209, 25, 217, 207, - 23, 3, 1, 254, 147, 2, 193, 25, 217, 207, 23, 3, 1, 254, 147, 2, 209, 25, - 219, 179, 25, 217, 207, 23, 3, 1, 254, 147, 2, 193, 25, 219, 179, 25, - 217, 207, 23, 3, 1, 254, 147, 2, 209, 25, 230, 65, 25, 217, 207, 23, 3, - 1, 254, 147, 2, 193, 25, 230, 65, 25, 217, 207, 23, 3, 1, 254, 147, 2, - 209, 25, 229, 164, 25, 217, 207, 23, 3, 1, 254, 147, 2, 193, 25, 229, - 164, 25, 217, 207, 23, 6, 1, 254, 147, 2, 209, 25, 228, 217, 23, 6, 1, - 254, 147, 2, 193, 25, 228, 217, 23, 6, 1, 254, 147, 2, 209, 25, 219, 179, - 25, 228, 217, 23, 6, 1, 254, 147, 2, 193, 25, 219, 179, 25, 228, 217, 23, - 6, 1, 254, 147, 2, 209, 25, 230, 65, 25, 228, 217, 23, 6, 1, 254, 147, 2, - 193, 25, 230, 65, 25, 228, 217, 23, 6, 1, 254, 147, 2, 209, 25, 229, 164, - 25, 228, 217, 23, 6, 1, 254, 147, 2, 193, 25, 229, 164, 25, 228, 217, 23, - 3, 1, 246, 122, 2, 209, 25, 217, 207, 23, 3, 1, 246, 122, 2, 193, 25, - 217, 207, 23, 3, 1, 246, 122, 2, 209, 25, 219, 179, 25, 217, 207, 23, 3, - 1, 246, 122, 2, 193, 25, 219, 179, 25, 217, 207, 23, 3, 1, 246, 122, 2, - 209, 25, 230, 65, 25, 217, 207, 23, 3, 1, 246, 122, 2, 193, 25, 230, 65, - 25, 217, 207, 23, 3, 1, 246, 122, 2, 209, 25, 229, 164, 25, 217, 207, 23, - 3, 1, 246, 122, 2, 193, 25, 229, 164, 25, 217, 207, 23, 6, 1, 246, 122, - 2, 209, 25, 228, 217, 23, 6, 1, 246, 122, 2, 193, 25, 228, 217, 23, 6, 1, - 246, 122, 2, 209, 25, 219, 179, 25, 228, 217, 23, 6, 1, 246, 122, 2, 193, - 25, 219, 179, 25, 228, 217, 23, 6, 1, 246, 122, 2, 209, 25, 230, 65, 25, - 228, 217, 23, 6, 1, 246, 122, 2, 193, 25, 230, 65, 25, 228, 217, 23, 6, - 1, 246, 122, 2, 209, 25, 229, 164, 25, 228, 217, 23, 6, 1, 246, 122, 2, - 193, 25, 229, 164, 25, 228, 217, 23, 3, 1, 230, 144, 2, 209, 25, 217, - 207, 23, 3, 1, 230, 144, 2, 193, 25, 217, 207, 23, 3, 1, 230, 144, 2, - 209, 25, 219, 179, 25, 217, 207, 23, 3, 1, 230, 144, 2, 193, 25, 219, - 179, 25, 217, 207, 23, 3, 1, 230, 144, 2, 209, 25, 230, 65, 25, 217, 207, - 23, 3, 1, 230, 144, 2, 193, 25, 230, 65, 25, 217, 207, 23, 3, 1, 230, - 144, 2, 209, 25, 229, 164, 25, 217, 207, 23, 3, 1, 230, 144, 2, 193, 25, - 229, 164, 25, 217, 207, 23, 6, 1, 230, 144, 2, 209, 25, 228, 217, 23, 6, - 1, 230, 144, 2, 193, 25, 228, 217, 23, 6, 1, 230, 144, 2, 209, 25, 219, - 179, 25, 228, 217, 23, 6, 1, 230, 144, 2, 193, 25, 219, 179, 25, 228, - 217, 23, 6, 1, 230, 144, 2, 209, 25, 230, 65, 25, 228, 217, 23, 6, 1, - 230, 144, 2, 193, 25, 230, 65, 25, 228, 217, 23, 6, 1, 230, 144, 2, 209, - 25, 229, 164, 25, 228, 217, 23, 6, 1, 230, 144, 2, 193, 25, 229, 164, 25, - 228, 217, 23, 3, 1, 254, 147, 2, 219, 57, 23, 3, 1, 254, 147, 2, 234, - 115, 23, 3, 1, 254, 147, 2, 219, 179, 25, 217, 207, 23, 3, 1, 254, 147, - 2, 217, 207, 23, 3, 1, 254, 147, 2, 230, 65, 25, 217, 207, 23, 3, 1, 254, - 147, 2, 229, 163, 23, 3, 1, 254, 147, 2, 229, 164, 25, 217, 207, 23, 6, - 1, 254, 147, 2, 219, 57, 23, 6, 1, 254, 147, 2, 234, 115, 23, 6, 1, 254, - 147, 2, 219, 178, 23, 6, 1, 254, 147, 2, 230, 64, 23, 6, 1, 254, 147, 2, - 228, 217, 23, 236, 33, 23, 228, 217, 23, 228, 206, 23, 229, 163, 23, 249, - 8, 25, 229, 163, 23, 3, 1, 246, 122, 2, 219, 179, 25, 217, 207, 23, 3, 1, - 246, 122, 2, 217, 207, 23, 3, 1, 246, 122, 2, 230, 65, 25, 217, 207, 23, - 3, 1, 246, 122, 2, 229, 163, 23, 3, 1, 246, 122, 2, 229, 164, 25, 217, - 207, 23, 6, 1, 246, 157, 2, 219, 178, 23, 6, 1, 246, 157, 2, 230, 64, 23, - 6, 1, 246, 122, 2, 219, 178, 23, 6, 1, 246, 122, 2, 230, 64, 23, 6, 1, - 246, 122, 2, 228, 217, 23, 209, 25, 219, 178, 23, 209, 25, 230, 64, 23, - 209, 25, 229, 163, 23, 3, 1, 237, 163, 2, 219, 57, 23, 3, 1, 237, 163, 2, - 234, 115, 23, 3, 1, 237, 163, 2, 249, 8, 25, 219, 178, 23, 3, 1, 237, - 163, 2, 249, 8, 25, 230, 64, 23, 3, 1, 237, 163, 2, 229, 163, 23, 3, 1, - 237, 163, 2, 249, 8, 25, 229, 163, 23, 6, 1, 237, 163, 2, 219, 57, 23, 6, - 1, 237, 163, 2, 234, 115, 23, 6, 1, 237, 163, 2, 219, 178, 23, 6, 1, 237, - 163, 2, 230, 64, 23, 193, 25, 219, 178, 23, 193, 25, 230, 64, 23, 193, - 25, 229, 163, 23, 3, 1, 220, 58, 2, 219, 57, 23, 3, 1, 220, 58, 2, 234, - 115, 23, 3, 1, 220, 58, 2, 249, 8, 25, 219, 178, 23, 3, 1, 220, 58, 2, - 249, 8, 25, 230, 64, 23, 3, 1, 227, 150, 2, 228, 206, 23, 3, 1, 227, 150, - 2, 249, 144, 23, 3, 1, 220, 58, 2, 229, 163, 23, 3, 1, 220, 58, 2, 249, - 8, 25, 229, 163, 23, 6, 1, 220, 58, 2, 219, 57, 23, 6, 1, 220, 58, 2, - 234, 115, 23, 6, 1, 220, 58, 2, 219, 178, 23, 6, 1, 220, 58, 2, 230, 64, - 23, 6, 1, 227, 150, 2, 249, 144, 23, 249, 8, 25, 219, 178, 23, 249, 8, - 25, 230, 64, 23, 219, 178, 23, 3, 1, 230, 144, 2, 219, 179, 25, 217, 207, - 23, 3, 1, 230, 144, 2, 217, 207, 23, 3, 1, 230, 144, 2, 230, 65, 25, 217, - 207, 23, 3, 1, 230, 144, 2, 229, 163, 23, 3, 1, 230, 144, 2, 229, 164, - 25, 217, 207, 23, 6, 1, 230, 142, 2, 219, 178, 23, 6, 1, 230, 142, 2, - 230, 64, 23, 6, 1, 230, 144, 2, 219, 178, 23, 6, 1, 230, 144, 2, 230, 64, - 23, 6, 1, 230, 144, 2, 228, 217, 23, 230, 64, 23, 249, 144, 246, 198, - 228, 95, 246, 206, 228, 95, 246, 198, 223, 254, 246, 206, 223, 254, 221, - 226, 223, 254, 245, 114, 223, 254, 224, 80, 223, 254, 245, 194, 223, 254, - 228, 197, 223, 254, 221, 253, 223, 254, 243, 201, 223, 254, 217, 85, 218, - 199, 223, 254, 217, 85, 218, 199, 231, 197, 217, 85, 218, 199, 237, 54, - 235, 108, 78, 227, 102, 78, 242, 121, 231, 198, 242, 121, 245, 194, 249, - 146, 246, 198, 249, 146, 246, 206, 249, 146, 186, 135, 51, 69, 235, 43, - 51, 109, 235, 43, 42, 224, 109, 228, 69, 78, 45, 224, 109, 228, 69, 78, - 224, 109, 234, 238, 228, 69, 78, 224, 109, 243, 98, 228, 69, 78, 42, 51, - 228, 69, 78, 45, 51, 228, 69, 78, 51, 234, 238, 228, 69, 78, 51, 243, 98, - 228, 69, 78, 249, 192, 51, 249, 192, 251, 241, 221, 87, 251, 241, 131, - 61, 235, 121, 124, 61, 235, 121, 186, 246, 208, 242, 119, 229, 31, 235, - 44, 225, 54, 229, 241, 225, 54, 235, 108, 246, 204, 227, 102, 246, 204, - 229, 20, 248, 209, 245, 123, 235, 108, 230, 71, 227, 102, 230, 71, 232, - 210, 231, 203, 223, 254, 229, 170, 233, 164, 55, 229, 170, 222, 66, 221, - 232, 55, 228, 235, 51, 228, 235, 221, 78, 228, 235, 210, 228, 235, 210, - 51, 228, 235, 210, 221, 78, 228, 235, 251, 134, 224, 109, 235, 112, 254, - 120, 228, 69, 78, 224, 109, 227, 106, 254, 120, 228, 69, 78, 227, 199, - 78, 51, 246, 95, 78, 237, 177, 230, 73, 220, 78, 126, 221, 200, 251, 135, - 237, 191, 229, 31, 253, 249, 242, 122, 251, 241, 245, 108, 224, 55, 42, - 40, 252, 18, 2, 228, 77, 45, 40, 252, 18, 2, 228, 77, 51, 228, 82, 78, - 228, 82, 246, 95, 78, 246, 95, 228, 82, 78, 221, 164, 5, 246, 123, 210, - 229, 73, 55, 84, 127, 251, 241, 84, 90, 251, 241, 109, 253, 251, 210, - 225, 67, 250, 198, 220, 63, 124, 253, 250, 254, 159, 219, 101, 250, 167, - 233, 155, 55, 223, 23, 249, 146, 237, 170, 220, 78, 245, 145, 228, 197, - 78, 148, 61, 228, 196, 228, 92, 228, 235, 245, 116, 61, 228, 196, 245, - 170, 61, 228, 196, 124, 61, 228, 196, 245, 116, 61, 78, 247, 143, 250, - 100, 221, 86, 69, 245, 116, 248, 143, 234, 18, 14, 223, 254, 218, 174, - 237, 54, 245, 88, 254, 76, 237, 168, 221, 176, 237, 168, 225, 54, 237, - 168, 229, 43, 237, 201, 222, 228, 223, 34, 254, 250, 222, 228, 223, 34, - 237, 201, 12, 245, 124, 225, 5, 254, 250, 12, 245, 124, 225, 5, 232, 206, - 20, 225, 6, 231, 199, 20, 225, 6, 223, 59, 217, 84, 223, 59, 7, 3, 1, 72, - 223, 59, 154, 223, 59, 174, 223, 59, 182, 223, 59, 191, 223, 59, 185, - 223, 59, 190, 223, 59, 88, 55, 223, 59, 233, 154, 223, 59, 246, 154, 55, - 223, 59, 42, 229, 229, 223, 59, 45, 229, 229, 223, 59, 7, 3, 1, 207, 223, - 94, 217, 84, 223, 94, 107, 223, 94, 103, 223, 94, 160, 223, 94, 154, 223, - 94, 174, 223, 94, 182, 223, 94, 191, 223, 94, 185, 223, 94, 190, 223, 94, - 88, 55, 223, 94, 233, 154, 223, 94, 246, 154, 55, 223, 94, 42, 229, 229, - 223, 94, 45, 229, 229, 7, 223, 94, 3, 1, 60, 7, 223, 94, 3, 1, 73, 7, - 223, 94, 3, 1, 74, 7, 223, 94, 3, 1, 218, 151, 7, 223, 94, 3, 1, 226, - 104, 246, 106, 55, 250, 176, 55, 250, 94, 55, 245, 102, 245, 104, 55, - 235, 30, 55, 233, 165, 55, 232, 223, 55, 229, 153, 55, 227, 4, 55, 218, - 182, 55, 146, 224, 232, 55, 248, 152, 55, 246, 107, 55, 236, 100, 55, - 220, 252, 55, 247, 127, 55, 244, 170, 229, 177, 55, 229, 151, 55, 244, - 14, 55, 253, 224, 55, 242, 176, 55, 251, 94, 55, 235, 24, 221, 111, 55, - 223, 246, 55, 222, 64, 55, 36, 42, 243, 177, 50, 36, 45, 243, 177, 50, - 36, 171, 69, 235, 44, 230, 74, 36, 224, 192, 69, 235, 44, 230, 74, 36, - 254, 104, 76, 50, 36, 250, 199, 76, 50, 36, 42, 76, 50, 36, 45, 76, 50, - 36, 227, 94, 230, 74, 36, 250, 199, 227, 94, 230, 74, 36, 254, 104, 227, - 94, 230, 74, 36, 148, 188, 50, 36, 245, 116, 188, 50, 36, 246, 193, 250, - 221, 36, 246, 193, 223, 227, 36, 246, 193, 249, 4, 36, 246, 193, 250, - 222, 252, 230, 36, 42, 45, 76, 50, 36, 246, 193, 226, 100, 36, 246, 193, - 236, 152, 36, 246, 193, 220, 55, 229, 28, 221, 90, 36, 227, 160, 224, 18, - 230, 74, 36, 51, 69, 214, 230, 74, 36, 254, 111, 100, 36, 221, 78, 220, - 80, 36, 218, 201, 252, 4, 50, 36, 127, 76, 230, 74, 36, 171, 51, 224, 18, - 230, 74, 36, 90, 243, 177, 2, 192, 247, 129, 36, 127, 243, 177, 2, 192, - 247, 129, 36, 42, 76, 56, 36, 45, 76, 56, 36, 253, 252, 50, 254, 254, - 230, 165, 254, 241, 199, 222, 23, 223, 98, 173, 6, 251, 202, 249, 77, - 251, 88, 251, 85, 235, 44, 100, 251, 136, 230, 165, 251, 165, 220, 86, - 246, 108, 250, 144, 226, 98, 249, 77, 245, 250, 102, 3, 245, 67, 102, 6, - 243, 225, 252, 51, 6, 243, 225, 173, 6, 243, 225, 229, 53, 250, 144, 229, - 53, 250, 145, 104, 124, 229, 108, 102, 6, 72, 252, 51, 6, 72, 102, 6, - 153, 102, 3, 153, 235, 202, 49, 252, 201, 100, 173, 6, 207, 231, 105, 55, - 224, 9, 227, 210, 250, 125, 102, 6, 230, 59, 173, 6, 230, 59, 173, 6, - 228, 163, 102, 6, 152, 252, 51, 6, 152, 173, 6, 152, 228, 239, 222, 129, - 227, 169, 225, 50, 78, 222, 72, 55, 221, 107, 164, 55, 219, 153, 173, 6, - 217, 157, 230, 85, 55, 230, 160, 55, 237, 170, 230, 160, 55, 252, 51, 6, - 217, 157, 215, 23, 3, 1, 237, 162, 236, 175, 55, 254, 118, 55, 102, 6, - 253, 204, 252, 51, 6, 251, 202, 246, 126, 100, 102, 3, 73, 102, 6, 73, - 102, 6, 246, 74, 215, 6, 246, 74, 102, 6, 189, 102, 3, 74, 99, 100, 252, - 105, 100, 244, 92, 100, 249, 178, 100, 237, 205, 224, 7, 227, 59, 6, 228, - 163, 245, 252, 55, 173, 3, 229, 108, 173, 3, 244, 231, 173, 6, 244, 231, - 173, 6, 229, 108, 173, 233, 33, 223, 71, 215, 33, 6, 245, 67, 215, 33, 6, - 153, 210, 33, 6, 153, 215, 33, 6, 218, 90, 173, 30, 6, 250, 46, 173, 30, - 3, 250, 46, 173, 30, 3, 73, 173, 30, 3, 72, 173, 30, 3, 237, 126, 228, - 220, 235, 43, 215, 254, 134, 229, 170, 55, 254, 177, 215, 3, 246, 74, 16, - 35, 213, 224, 7, 219, 55, 245, 108, 131, 225, 40, 219, 55, 245, 108, 131, - 232, 26, 219, 55, 245, 108, 131, 222, 61, 219, 55, 245, 108, 131, 221, - 251, 219, 55, 245, 108, 124, 221, 249, 219, 55, 245, 108, 131, 245, 199, - 219, 55, 245, 108, 124, 245, 198, 219, 55, 245, 108, 148, 245, 198, 219, - 55, 245, 108, 245, 116, 245, 198, 219, 55, 245, 108, 131, 224, 73, 219, - 55, 245, 108, 245, 170, 224, 71, 219, 55, 245, 108, 131, 246, 231, 219, - 55, 245, 108, 148, 246, 229, 219, 55, 245, 108, 245, 170, 246, 229, 219, - 55, 245, 108, 225, 43, 246, 229, 245, 108, 231, 106, 107, 227, 68, 231, - 107, 107, 227, 68, 231, 107, 103, 227, 68, 231, 107, 160, 227, 68, 231, - 107, 154, 227, 68, 231, 107, 174, 227, 68, 231, 107, 182, 227, 68, 231, - 107, 191, 227, 68, 231, 107, 185, 227, 68, 231, 107, 190, 227, 68, 231, - 107, 222, 65, 227, 68, 231, 107, 246, 211, 227, 68, 231, 107, 220, 221, - 227, 68, 231, 107, 245, 196, 227, 68, 231, 107, 131, 242, 161, 227, 68, - 231, 107, 245, 170, 242, 161, 227, 68, 231, 107, 131, 221, 231, 3, 227, - 68, 231, 107, 107, 3, 227, 68, 231, 107, 103, 3, 227, 68, 231, 107, 160, - 3, 227, 68, 231, 107, 154, 3, 227, 68, 231, 107, 174, 3, 227, 68, 231, - 107, 182, 3, 227, 68, 231, 107, 191, 3, 227, 68, 231, 107, 185, 3, 227, - 68, 231, 107, 190, 3, 227, 68, 231, 107, 222, 65, 3, 227, 68, 231, 107, - 246, 211, 3, 227, 68, 231, 107, 220, 221, 3, 227, 68, 231, 107, 245, 196, - 3, 227, 68, 231, 107, 131, 242, 161, 3, 227, 68, 231, 107, 245, 170, 242, - 161, 3, 227, 68, 231, 107, 131, 221, 231, 227, 68, 231, 107, 131, 221, - 232, 251, 203, 250, 46, 227, 68, 231, 107, 245, 170, 221, 231, 227, 68, - 231, 107, 222, 66, 221, 231, 227, 68, 231, 107, 210, 131, 242, 161, 7, 3, - 1, 210, 251, 202, 227, 68, 231, 107, 224, 82, 235, 140, 17, 227, 68, 231, - 107, 245, 197, 247, 10, 17, 227, 68, 231, 107, 245, 197, 221, 231, 227, - 68, 231, 107, 131, 242, 162, 221, 231, 219, 55, 245, 108, 217, 85, 221, - 249, 127, 65, 220, 53, 65, 90, 65, 247, 130, 65, 42, 45, 65, 108, 113, - 65, 231, 187, 218, 217, 65, 231, 187, 247, 5, 65, 224, 6, 247, 5, 65, - 224, 6, 218, 217, 65, 127, 76, 2, 92, 90, 76, 2, 92, 127, 218, 237, 65, - 90, 218, 237, 65, 127, 124, 243, 158, 65, 220, 53, 124, 243, 158, 65, 90, - 124, 243, 158, 65, 247, 130, 124, 243, 158, 65, 127, 76, 2, 222, 135, 90, - 76, 2, 222, 135, 127, 76, 245, 97, 135, 220, 53, 76, 245, 97, 135, 90, - 76, 245, 97, 135, 247, 130, 76, 245, 97, 135, 108, 113, 76, 2, 252, 189, - 127, 76, 2, 96, 90, 76, 2, 96, 127, 76, 2, 234, 247, 90, 76, 2, 234, 247, - 42, 45, 218, 237, 65, 42, 45, 76, 2, 92, 247, 130, 217, 33, 65, 220, 53, - 76, 2, 221, 170, 235, 107, 220, 53, 76, 2, 221, 170, 227, 100, 247, 130, - 76, 2, 221, 170, 235, 107, 247, 130, 76, 2, 221, 170, 227, 100, 90, 76, - 2, 250, 124, 247, 129, 247, 130, 76, 2, 250, 124, 235, 107, 254, 104, - 221, 120, 225, 70, 65, 250, 199, 221, 120, 225, 70, 65, 231, 187, 218, - 217, 76, 199, 171, 135, 127, 76, 199, 252, 201, 104, 90, 76, 199, 135, - 254, 104, 230, 119, 250, 222, 65, 250, 199, 230, 119, 250, 222, 65, 127, - 243, 177, 2, 192, 220, 52, 127, 243, 177, 2, 192, 247, 129, 220, 53, 243, - 177, 2, 192, 227, 100, 220, 53, 243, 177, 2, 192, 235, 107, 90, 243, 177, - 2, 192, 220, 52, 90, 243, 177, 2, 192, 247, 129, 247, 130, 243, 177, 2, - 192, 227, 100, 247, 130, 243, 177, 2, 192, 235, 107, 90, 76, 104, 127, - 65, 220, 53, 76, 127, 117, 247, 130, 65, 127, 76, 104, 90, 65, 127, 230, - 32, 254, 19, 220, 53, 230, 32, 254, 19, 90, 230, 32, 254, 19, 247, 130, - 230, 32, 254, 19, 127, 243, 177, 104, 90, 243, 176, 90, 243, 177, 104, - 127, 243, 176, 127, 51, 76, 2, 92, 42, 45, 51, 76, 2, 92, 90, 51, 76, 2, - 92, 127, 51, 65, 220, 53, 51, 65, 90, 51, 65, 247, 130, 51, 65, 42, 45, - 51, 65, 108, 113, 51, 65, 231, 187, 218, 217, 51, 65, 231, 187, 247, 5, - 51, 65, 224, 6, 247, 5, 51, 65, 224, 6, 218, 217, 51, 65, 127, 221, 78, - 65, 90, 221, 78, 65, 127, 223, 223, 65, 90, 223, 223, 65, 220, 53, 76, 2, - 51, 92, 247, 130, 76, 2, 51, 92, 127, 249, 145, 65, 220, 53, 249, 145, - 65, 90, 249, 145, 65, 247, 130, 249, 145, 65, 127, 76, 199, 135, 90, 76, - 199, 135, 127, 67, 65, 220, 53, 67, 65, 90, 67, 65, 247, 130, 67, 65, - 220, 53, 67, 76, 245, 97, 135, 220, 53, 67, 76, 230, 139, 229, 193, 220, - 53, 67, 76, 230, 139, 229, 194, 2, 186, 135, 220, 53, 67, 76, 230, 139, - 229, 194, 2, 69, 135, 220, 53, 67, 51, 65, 220, 53, 67, 51, 76, 230, 139, - 229, 193, 90, 67, 76, 245, 97, 218, 254, 231, 187, 218, 217, 76, 199, - 250, 123, 224, 6, 247, 5, 76, 199, 250, 123, 108, 113, 67, 65, 45, 76, 2, - 3, 250, 221, 247, 130, 76, 127, 117, 220, 53, 65, 148, 90, 254, 19, 127, - 76, 2, 69, 92, 90, 76, 2, 69, 92, 42, 45, 76, 2, 69, 92, 127, 76, 2, 51, - 69, 92, 90, 76, 2, 51, 69, 92, 42, 45, 76, 2, 51, 69, 92, 127, 230, 117, - 65, 90, 230, 117, 65, 42, 45, 230, 117, 65, 35, 254, 157, 250, 164, 229, - 223, 248, 246, 222, 14, 246, 91, 222, 14, 248, 160, 212, 246, 92, 246, - 199, 225, 45, 237, 215, 232, 231, 246, 213, 230, 165, 212, 254, 132, 246, - 213, 230, 165, 3, 246, 213, 230, 165, 250, 140, 254, 14, 233, 254, 248, - 160, 212, 250, 142, 254, 14, 233, 254, 3, 250, 140, 254, 14, 233, 254, - 246, 190, 117, 228, 222, 233, 33, 228, 229, 233, 33, 250, 128, 233, 33, - 223, 71, 233, 155, 55, 233, 153, 55, 61, 229, 43, 248, 188, 224, 55, 225, - 46, 233, 154, 253, 252, 230, 112, 227, 94, 230, 112, 251, 242, 230, 112, - 40, 227, 64, 250, 89, 227, 64, 245, 110, 227, 64, 228, 218, 101, 237, - 207, 45, 254, 119, 254, 119, 234, 22, 254, 119, 223, 245, 254, 119, 248, - 190, 248, 160, 212, 248, 193, 229, 234, 101, 212, 229, 234, 101, 235, 7, - 254, 126, 235, 7, 230, 105, 237, 174, 220, 74, 237, 186, 51, 237, 186, - 221, 78, 237, 186, 250, 136, 237, 186, 223, 49, 237, 186, 219, 65, 237, - 186, 250, 199, 237, 186, 250, 199, 250, 136, 237, 186, 254, 104, 250, - 136, 237, 186, 222, 13, 252, 138, 227, 224, 228, 219, 61, 233, 154, 246, - 96, 244, 176, 228, 219, 242, 250, 221, 180, 230, 112, 210, 221, 179, 237, - 170, 235, 129, 198, 224, 111, 218, 236, 218, 168, 228, 229, 212, 221, - 179, 233, 155, 221, 179, 253, 247, 114, 101, 212, 253, 247, 114, 101, - 254, 72, 114, 101, 254, 72, 251, 222, 212, 254, 249, 114, 101, 232, 135, - 254, 72, 231, 190, 254, 249, 114, 101, 254, 151, 114, 101, 212, 254, 151, - 114, 101, 254, 151, 114, 156, 114, 101, 221, 78, 221, 179, 254, 158, 114, - 101, 246, 150, 101, 244, 175, 246, 150, 101, 248, 247, 252, 99, 254, 74, - 222, 23, 235, 51, 244, 175, 114, 101, 254, 72, 114, 199, 156, 222, 23, - 237, 237, 230, 165, 237, 237, 117, 156, 254, 72, 114, 101, 250, 176, 246, - 153, 246, 154, 250, 175, 227, 94, 237, 224, 114, 101, 227, 94, 114, 101, - 250, 117, 101, 246, 125, 246, 152, 101, 223, 157, 246, 153, 249, 63, 114, - 101, 114, 199, 251, 213, 249, 78, 234, 22, 251, 212, 228, 80, 114, 101, - 212, 114, 101, 242, 59, 101, 212, 242, 59, 101, 223, 123, 246, 150, 101, - 235, 87, 156, 114, 101, 244, 30, 156, 114, 101, 235, 87, 104, 114, 101, - 244, 30, 104, 114, 101, 235, 87, 251, 222, 212, 114, 101, 244, 30, 251, - 222, 212, 114, 101, 233, 95, 235, 86, 233, 95, 244, 29, 252, 99, 212, - 246, 150, 101, 212, 235, 86, 212, 244, 29, 232, 135, 235, 87, 231, 190, - 114, 101, 232, 135, 244, 30, 231, 190, 114, 101, 235, 87, 156, 246, 150, - 101, 244, 30, 156, 246, 150, 101, 232, 135, 235, 87, 231, 190, 246, 150, - 101, 232, 135, 244, 30, 231, 190, 246, 150, 101, 235, 87, 156, 244, 29, - 244, 30, 156, 235, 86, 232, 135, 235, 87, 231, 190, 244, 29, 232, 135, - 244, 30, 231, 190, 235, 86, 228, 244, 223, 84, 228, 245, 156, 114, 101, - 223, 85, 156, 114, 101, 228, 245, 156, 246, 150, 101, 223, 85, 156, 246, - 150, 101, 248, 160, 212, 228, 247, 248, 160, 212, 223, 86, 223, 93, 230, - 165, 223, 58, 230, 165, 212, 112, 223, 93, 230, 165, 212, 112, 223, 58, - 230, 165, 223, 93, 117, 156, 114, 101, 223, 58, 117, 156, 114, 101, 232, - 135, 112, 223, 93, 117, 231, 190, 114, 101, 232, 135, 112, 223, 58, 117, - 231, 190, 114, 101, 223, 93, 117, 2, 212, 114, 101, 223, 58, 117, 2, 212, - 114, 101, 233, 81, 233, 82, 233, 83, 233, 82, 220, 74, 40, 237, 237, 230, - 165, 40, 230, 101, 230, 165, 40, 237, 237, 117, 156, 114, 101, 40, 230, - 101, 117, 156, 114, 101, 40, 251, 143, 40, 250, 82, 34, 229, 43, 34, 233, - 154, 34, 221, 176, 34, 248, 188, 224, 55, 34, 61, 230, 112, 34, 227, 94, - 230, 112, 34, 253, 252, 230, 112, 34, 246, 153, 34, 249, 146, 204, 229, - 43, 204, 233, 154, 204, 221, 176, 204, 61, 230, 112, 45, 222, 143, 42, - 222, 143, 113, 222, 143, 108, 222, 143, 253, 255, 233, 133, 221, 62, 245, - 128, 221, 78, 69, 252, 201, 45, 220, 236, 51, 69, 252, 201, 51, 45, 220, - 236, 248, 160, 212, 228, 214, 212, 221, 62, 248, 160, 212, 245, 129, 232, - 138, 51, 69, 252, 201, 51, 45, 220, 236, 228, 245, 220, 82, 227, 192, - 223, 85, 220, 82, 227, 192, 231, 188, 223, 101, 230, 165, 250, 140, 254, - 14, 231, 188, 223, 100, 231, 188, 223, 101, 117, 156, 114, 101, 250, 140, - 254, 14, 231, 188, 223, 101, 156, 114, 101, 230, 101, 230, 165, 237, 237, - 230, 165, 233, 87, 243, 131, 250, 150, 234, 49, 237, 183, 218, 118, 232, - 216, 231, 189, 45, 254, 120, 2, 254, 51, 45, 221, 90, 233, 33, 235, 7, - 254, 126, 233, 33, 235, 7, 230, 105, 233, 33, 237, 174, 233, 33, 220, 74, - 249, 5, 230, 112, 61, 230, 112, 223, 157, 230, 112, 248, 188, 221, 176, - 252, 22, 42, 231, 188, 245, 251, 225, 66, 228, 229, 45, 231, 188, 245, - 251, 225, 66, 228, 229, 42, 225, 66, 228, 229, 45, 225, 66, 228, 229, - 210, 221, 180, 246, 153, 250, 79, 235, 7, 230, 105, 250, 79, 235, 7, 254, - 126, 51, 223, 92, 51, 223, 57, 51, 237, 174, 51, 220, 74, 229, 62, 114, - 25, 229, 234, 101, 235, 87, 2, 248, 145, 244, 30, 2, 248, 145, 219, 100, - 233, 95, 235, 86, 219, 100, 233, 95, 244, 29, 235, 87, 114, 199, 156, - 244, 29, 244, 30, 114, 199, 156, 235, 86, 114, 199, 156, 235, 86, 114, - 199, 156, 244, 29, 114, 199, 156, 228, 244, 114, 199, 156, 223, 84, 248, - 160, 212, 228, 248, 156, 246, 155, 248, 160, 212, 223, 87, 156, 246, 155, - 212, 40, 237, 237, 117, 156, 114, 101, 212, 40, 230, 101, 117, 156, 114, - 101, 40, 237, 237, 117, 156, 212, 114, 101, 40, 230, 101, 117, 156, 212, - 114, 101, 235, 87, 251, 222, 212, 246, 150, 101, 244, 30, 251, 222, 212, - 246, 150, 101, 228, 245, 251, 222, 212, 246, 150, 101, 223, 85, 251, 222, - 212, 246, 150, 101, 212, 231, 188, 223, 101, 230, 165, 248, 160, 212, - 250, 142, 254, 14, 231, 188, 223, 100, 212, 231, 188, 223, 101, 117, 156, - 114, 101, 248, 160, 212, 250, 142, 254, 14, 231, 188, 223, 101, 156, 246, - 155, 69, 246, 208, 233, 191, 186, 246, 208, 108, 45, 249, 11, 246, 208, - 113, 45, 249, 11, 246, 208, 246, 213, 117, 2, 171, 186, 92, 246, 213, - 117, 2, 69, 252, 201, 253, 245, 246, 190, 117, 186, 92, 3, 246, 213, 117, - 2, 69, 252, 201, 253, 245, 246, 190, 117, 186, 92, 246, 213, 117, 2, 61, - 50, 246, 213, 117, 2, 230, 77, 3, 246, 213, 117, 2, 230, 77, 246, 213, - 117, 2, 220, 81, 246, 213, 117, 2, 124, 186, 223, 107, 250, 140, 2, 171, - 186, 92, 250, 140, 2, 69, 252, 201, 253, 245, 246, 190, 117, 186, 92, 3, - 250, 140, 2, 69, 252, 201, 253, 245, 246, 190, 117, 186, 92, 250, 140, 2, - 230, 77, 3, 250, 140, 2, 230, 77, 217, 158, 165, 252, 226, 233, 253, 249, - 6, 55, 246, 215, 65, 242, 182, 108, 254, 20, 113, 254, 20, 228, 225, 229, - 156, 218, 235, 235, 43, 42, 251, 90, 45, 251, 90, 42, 245, 149, 45, 245, - 149, 252, 29, 45, 250, 102, 252, 29, 42, 250, 102, 221, 120, 45, 250, - 102, 221, 120, 42, 250, 102, 210, 212, 55, 40, 234, 234, 254, 51, 226, - 80, 226, 85, 222, 72, 227, 211, 229, 16, 237, 211, 219, 88, 223, 227, - 229, 57, 117, 237, 182, 55, 215, 212, 55, 218, 242, 242, 183, 221, 120, - 42, 250, 123, 221, 120, 45, 250, 123, 252, 29, 42, 250, 123, 252, 29, 45, - 250, 123, 221, 120, 144, 237, 186, 252, 29, 144, 237, 186, 245, 95, 224, - 39, 108, 254, 21, 252, 100, 124, 186, 252, 191, 230, 107, 236, 154, 246, - 146, 199, 222, 23, 227, 109, 218, 152, 237, 224, 112, 227, 209, 252, 21, - 236, 153, 235, 112, 254, 120, 115, 227, 106, 254, 120, 115, 246, 146, - 199, 222, 23, 235, 115, 252, 111, 227, 93, 250, 56, 254, 158, 254, 28, - 222, 227, 221, 112, 227, 9, 248, 228, 230, 102, 250, 152, 222, 113, 224, - 49, 250, 114, 250, 113, 179, 180, 16, 242, 104, 179, 180, 16, 223, 221, - 228, 95, 179, 180, 16, 228, 96, 246, 155, 179, 180, 16, 228, 96, 248, - 193, 179, 180, 16, 228, 96, 249, 4, 179, 180, 16, 228, 96, 237, 47, 179, - 180, 16, 228, 96, 250, 221, 179, 180, 16, 250, 222, 223, 142, 179, 180, - 16, 250, 222, 237, 47, 179, 180, 16, 224, 56, 135, 179, 180, 16, 252, - 231, 135, 179, 180, 16, 228, 96, 224, 55, 179, 180, 16, 228, 96, 252, - 230, 179, 180, 16, 228, 96, 235, 86, 179, 180, 16, 228, 96, 244, 29, 179, - 180, 16, 127, 219, 183, 179, 180, 16, 90, 219, 183, 179, 180, 16, 228, - 96, 127, 65, 179, 180, 16, 228, 96, 90, 65, 179, 180, 16, 250, 222, 252, - 230, 179, 180, 16, 113, 222, 144, 220, 81, 179, 180, 16, 249, 63, 223, - 142, 179, 180, 16, 228, 96, 113, 251, 134, 179, 180, 16, 228, 96, 249, - 62, 179, 180, 16, 113, 222, 144, 237, 47, 179, 180, 16, 220, 53, 219, - 183, 179, 180, 16, 228, 96, 220, 53, 65, 179, 180, 16, 108, 222, 144, - 230, 77, 179, 180, 16, 249, 72, 223, 142, 179, 180, 16, 228, 96, 108, - 251, 134, 179, 180, 16, 228, 96, 249, 71, 179, 180, 16, 108, 222, 144, - 237, 47, 179, 180, 16, 247, 130, 219, 183, 179, 180, 16, 228, 96, 247, - 130, 65, 179, 180, 16, 228, 68, 220, 81, 179, 180, 16, 249, 63, 220, 81, - 179, 180, 16, 249, 5, 220, 81, 179, 180, 16, 237, 48, 220, 81, 179, 180, - 16, 250, 222, 220, 81, 179, 180, 16, 108, 224, 198, 237, 47, 179, 180, - 16, 228, 68, 228, 95, 179, 180, 16, 250, 222, 223, 156, 179, 180, 16, - 228, 96, 250, 175, 179, 180, 16, 108, 222, 144, 249, 13, 179, 180, 16, - 249, 72, 249, 13, 179, 180, 16, 223, 157, 249, 13, 179, 180, 16, 237, 48, - 249, 13, 179, 180, 16, 250, 222, 249, 13, 179, 180, 16, 113, 224, 198, - 223, 142, 179, 180, 16, 42, 224, 198, 223, 142, 179, 180, 16, 221, 180, - 249, 13, 179, 180, 16, 244, 30, 249, 13, 179, 180, 16, 250, 169, 135, - 179, 180, 16, 249, 72, 221, 179, 179, 180, 16, 217, 32, 179, 180, 16, - 223, 143, 221, 179, 179, 180, 16, 225, 68, 220, 81, 179, 180, 16, 228, - 96, 212, 246, 155, 179, 180, 16, 228, 96, 228, 81, 179, 180, 16, 113, - 251, 135, 221, 179, 179, 180, 16, 108, 251, 135, 221, 179, 179, 180, 16, - 237, 162, 179, 180, 16, 227, 149, 179, 180, 16, 230, 143, 179, 180, 16, - 254, 147, 220, 81, 179, 180, 16, 246, 157, 220, 81, 179, 180, 16, 237, - 163, 220, 81, 179, 180, 16, 230, 144, 220, 81, 179, 180, 16, 254, 146, - 212, 251, 45, 78, 45, 254, 120, 2, 247, 130, 217, 33, 65, 224, 177, 230, - 119, 252, 21, 252, 120, 100, 69, 235, 44, 2, 233, 193, 248, 145, 237, - 191, 100, 250, 137, 220, 79, 100, 248, 204, 220, 79, 100, 246, 201, 100, - 250, 160, 100, 67, 40, 2, 251, 85, 69, 235, 43, 246, 179, 100, 254, 142, - 236, 155, 100, 243, 142, 100, 34, 186, 252, 201, 2, 231, 183, 34, 221, - 91, 247, 132, 252, 1, 250, 222, 2, 231, 186, 65, 220, 77, 100, 233, 122, - 100, 242, 117, 100, 230, 118, 243, 224, 100, 230, 118, 235, 200, 100, - 229, 218, 100, 229, 217, 100, 248, 210, 250, 77, 16, 245, 124, 103, 224, - 20, 100, 179, 180, 16, 228, 95, 249, 86, 225, 55, 236, 155, 100, 228, - 237, 230, 34, 232, 120, 230, 34, 228, 234, 226, 101, 100, 250, 209, 226, - 101, 100, 42, 229, 230, 220, 60, 96, 42, 229, 230, 246, 86, 42, 229, 230, - 234, 237, 96, 45, 229, 230, 220, 60, 96, 45, 229, 230, 246, 86, 45, 229, - 230, 234, 237, 96, 42, 40, 252, 18, 220, 60, 250, 123, 42, 40, 252, 18, - 246, 86, 42, 40, 252, 18, 234, 237, 250, 123, 45, 40, 252, 18, 220, 60, - 250, 123, 45, 40, 252, 18, 246, 86, 45, 40, 252, 18, 234, 237, 250, 123, - 42, 250, 79, 252, 18, 220, 60, 96, 42, 250, 79, 252, 18, 233, 193, 229, - 102, 42, 250, 79, 252, 18, 234, 237, 96, 250, 79, 252, 18, 246, 86, 45, - 250, 79, 252, 18, 220, 60, 96, 45, 250, 79, 252, 18, 233, 193, 229, 102, - 45, 250, 79, 252, 18, 234, 237, 96, 237, 187, 246, 86, 186, 235, 44, 246, - 86, 220, 60, 42, 156, 234, 237, 45, 250, 79, 252, 18, 226, 86, 220, 60, - 45, 156, 234, 237, 42, 250, 79, 252, 18, 226, 86, 223, 72, 221, 119, 223, - 72, 252, 28, 221, 120, 40, 115, 252, 29, 40, 115, 252, 29, 40, 252, 18, - 104, 221, 120, 40, 115, 32, 16, 252, 28, 42, 69, 86, 235, 43, 45, 69, 86, - 235, 43, 186, 226, 112, 235, 42, 186, 226, 112, 235, 41, 186, 226, 112, - 235, 40, 186, 226, 112, 235, 39, 249, 54, 16, 170, 69, 25, 221, 120, 227, - 109, 249, 54, 16, 170, 69, 25, 252, 29, 227, 109, 249, 54, 16, 170, 69, - 2, 250, 221, 249, 54, 16, 170, 113, 25, 186, 2, 250, 221, 249, 54, 16, - 170, 108, 25, 186, 2, 250, 221, 249, 54, 16, 170, 69, 2, 221, 90, 249, - 54, 16, 170, 113, 25, 186, 2, 221, 90, 249, 54, 16, 170, 108, 25, 186, 2, - 221, 90, 249, 54, 16, 170, 69, 25, 218, 236, 249, 54, 16, 170, 113, 25, - 186, 2, 218, 236, 249, 54, 16, 170, 108, 25, 186, 2, 218, 236, 249, 54, - 16, 170, 113, 25, 242, 241, 249, 54, 16, 170, 108, 25, 242, 241, 249, 54, - 16, 170, 69, 25, 221, 120, 235, 115, 249, 54, 16, 170, 69, 25, 252, 29, - 235, 115, 40, 245, 133, 227, 163, 100, 246, 225, 100, 69, 235, 44, 246, - 86, 233, 233, 252, 8, 233, 233, 171, 104, 224, 191, 233, 233, 224, 192, - 104, 235, 2, 233, 233, 171, 104, 124, 224, 179, 233, 233, 124, 224, 180, - 104, 235, 2, 233, 233, 124, 224, 180, 237, 55, 233, 233, 221, 75, 233, - 233, 222, 43, 233, 233, 229, 174, 247, 9, 244, 24, 245, 81, 221, 120, - 229, 229, 252, 29, 229, 229, 221, 120, 250, 79, 115, 252, 29, 250, 79, - 115, 221, 120, 221, 114, 224, 236, 115, 252, 29, 221, 114, 224, 236, 115, - 67, 221, 101, 252, 111, 227, 94, 2, 250, 221, 223, 129, 245, 155, 255, 3, - 250, 76, 246, 214, 237, 174, 249, 86, 246, 88, 100, 16, 35, 231, 110, 16, - 35, 223, 154, 117, 243, 157, 16, 35, 223, 154, 117, 222, 39, 16, 35, 246, - 190, 117, 222, 39, 16, 35, 246, 190, 117, 221, 104, 16, 35, 246, 181, 16, - 35, 254, 252, 16, 35, 252, 119, 16, 35, 252, 229, 16, 35, 186, 222, 145, - 16, 35, 235, 44, 245, 224, 16, 35, 69, 222, 145, 16, 35, 245, 124, 245, - 224, 16, 35, 251, 128, 227, 162, 16, 35, 224, 217, 230, 83, 16, 35, 224, - 217, 237, 223, 16, 35, 249, 142, 235, 34, 246, 135, 16, 35, 249, 42, 250, - 132, 107, 16, 35, 249, 42, 250, 132, 103, 16, 35, 249, 42, 250, 132, 160, - 16, 35, 249, 42, 250, 132, 154, 16, 35, 232, 136, 254, 252, 16, 35, 222, - 224, 238, 28, 16, 35, 246, 190, 117, 221, 105, 252, 45, 16, 35, 251, 152, - 16, 35, 246, 190, 117, 234, 17, 16, 35, 223, 90, 16, 35, 246, 135, 16, - 35, 245, 189, 225, 54, 16, 35, 244, 23, 225, 54, 16, 35, 227, 212, 225, - 54, 16, 35, 220, 73, 225, 54, 16, 35, 223, 254, 16, 35, 249, 69, 252, 48, - 100, 230, 119, 252, 21, 16, 35, 232, 122, 16, 35, 249, 70, 245, 124, 103, - 16, 35, 223, 91, 245, 124, 103, 230, 171, 96, 230, 171, 251, 64, 230, - 171, 245, 127, 230, 171, 237, 170, 245, 127, 230, 171, 252, 117, 251, - 247, 230, 171, 252, 25, 221, 200, 230, 171, 252, 15, 252, 204, 242, 58, - 230, 171, 254, 135, 117, 251, 44, 230, 171, 249, 146, 230, 171, 250, 70, - 254, 254, 231, 108, 230, 171, 51, 252, 230, 34, 20, 107, 34, 20, 103, 34, - 20, 160, 34, 20, 154, 34, 20, 174, 34, 20, 182, 34, 20, 191, 34, 20, 185, - 34, 20, 190, 34, 54, 222, 65, 34, 54, 246, 211, 34, 54, 220, 221, 34, 54, - 221, 247, 34, 54, 245, 111, 34, 54, 245, 200, 34, 54, 224, 77, 34, 54, - 225, 41, 34, 54, 246, 233, 34, 54, 232, 29, 34, 54, 220, 219, 82, 20, - 107, 82, 20, 103, 82, 20, 160, 82, 20, 154, 82, 20, 174, 82, 20, 182, 82, - 20, 191, 82, 20, 185, 82, 20, 190, 82, 54, 222, 65, 82, 54, 246, 211, 82, - 54, 220, 221, 82, 54, 221, 247, 82, 54, 245, 111, 82, 54, 245, 200, 82, - 54, 224, 77, 82, 54, 225, 41, 82, 54, 246, 233, 82, 54, 232, 29, 82, 54, - 220, 219, 20, 131, 245, 90, 223, 136, 20, 124, 245, 90, 223, 136, 20, - 148, 245, 90, 223, 136, 20, 245, 116, 245, 90, 223, 136, 20, 245, 170, - 245, 90, 223, 136, 20, 224, 82, 245, 90, 223, 136, 20, 225, 43, 245, 90, - 223, 136, 20, 246, 235, 245, 90, 223, 136, 20, 232, 31, 245, 90, 223, - 136, 54, 222, 66, 245, 90, 223, 136, 54, 246, 212, 245, 90, 223, 136, 54, - 220, 222, 245, 90, 223, 136, 54, 221, 248, 245, 90, 223, 136, 54, 245, - 112, 245, 90, 223, 136, 54, 245, 201, 245, 90, 223, 136, 54, 224, 78, - 245, 90, 223, 136, 54, 225, 42, 245, 90, 223, 136, 54, 246, 234, 245, 90, - 223, 136, 54, 232, 30, 245, 90, 223, 136, 54, 220, 220, 245, 90, 223, - 136, 82, 7, 3, 1, 60, 82, 7, 3, 1, 253, 204, 82, 7, 3, 1, 251, 202, 82, - 7, 3, 1, 250, 46, 82, 7, 3, 1, 73, 82, 7, 3, 1, 246, 74, 82, 7, 3, 1, - 245, 67, 82, 7, 3, 1, 243, 225, 82, 7, 3, 1, 72, 82, 7, 3, 1, 237, 126, - 82, 7, 3, 1, 237, 17, 82, 7, 3, 1, 153, 82, 7, 3, 1, 189, 82, 7, 3, 1, - 207, 82, 7, 3, 1, 74, 82, 7, 3, 1, 230, 59, 82, 7, 3, 1, 228, 163, 82, 7, - 3, 1, 152, 82, 7, 3, 1, 198, 82, 7, 3, 1, 222, 201, 82, 7, 3, 1, 68, 82, - 7, 3, 1, 216, 216, 82, 7, 3, 1, 219, 40, 82, 7, 3, 1, 218, 151, 82, 7, 3, - 1, 218, 90, 82, 7, 3, 1, 217, 157, 34, 7, 6, 1, 60, 34, 7, 6, 1, 253, - 204, 34, 7, 6, 1, 251, 202, 34, 7, 6, 1, 250, 46, 34, 7, 6, 1, 73, 34, 7, - 6, 1, 246, 74, 34, 7, 6, 1, 245, 67, 34, 7, 6, 1, 243, 225, 34, 7, 6, 1, - 72, 34, 7, 6, 1, 237, 126, 34, 7, 6, 1, 237, 17, 34, 7, 6, 1, 153, 34, 7, - 6, 1, 189, 34, 7, 6, 1, 207, 34, 7, 6, 1, 74, 34, 7, 6, 1, 230, 59, 34, - 7, 6, 1, 228, 163, 34, 7, 6, 1, 152, 34, 7, 6, 1, 198, 34, 7, 6, 1, 222, - 201, 34, 7, 6, 1, 68, 34, 7, 6, 1, 216, 216, 34, 7, 6, 1, 219, 40, 34, 7, - 6, 1, 218, 151, 34, 7, 6, 1, 218, 90, 34, 7, 6, 1, 217, 157, 34, 7, 3, 1, - 60, 34, 7, 3, 1, 253, 204, 34, 7, 3, 1, 251, 202, 34, 7, 3, 1, 250, 46, - 34, 7, 3, 1, 73, 34, 7, 3, 1, 246, 74, 34, 7, 3, 1, 245, 67, 34, 7, 3, 1, - 243, 225, 34, 7, 3, 1, 72, 34, 7, 3, 1, 237, 126, 34, 7, 3, 1, 237, 17, - 34, 7, 3, 1, 153, 34, 7, 3, 1, 189, 34, 7, 3, 1, 207, 34, 7, 3, 1, 74, - 34, 7, 3, 1, 230, 59, 34, 7, 3, 1, 228, 163, 34, 7, 3, 1, 152, 34, 7, 3, - 1, 198, 34, 7, 3, 1, 222, 201, 34, 7, 3, 1, 68, 34, 7, 3, 1, 216, 216, - 34, 7, 3, 1, 219, 40, 34, 7, 3, 1, 218, 151, 34, 7, 3, 1, 218, 90, 34, 7, - 3, 1, 217, 157, 34, 20, 217, 84, 232, 136, 34, 54, 246, 211, 232, 136, - 34, 54, 220, 221, 232, 136, 34, 54, 221, 247, 232, 136, 34, 54, 245, 111, - 232, 136, 34, 54, 245, 200, 232, 136, 34, 54, 224, 77, 232, 136, 34, 54, - 225, 41, 232, 136, 34, 54, 246, 233, 232, 136, 34, 54, 232, 29, 232, 136, - 34, 54, 220, 219, 51, 34, 20, 107, 51, 34, 20, 103, 51, 34, 20, 160, 51, - 34, 20, 154, 51, 34, 20, 174, 51, 34, 20, 182, 51, 34, 20, 191, 51, 34, - 20, 185, 51, 34, 20, 190, 51, 34, 54, 222, 65, 232, 136, 34, 20, 217, 84, - 86, 89, 170, 242, 241, 86, 89, 106, 242, 241, 86, 89, 170, 219, 152, 86, - 89, 106, 219, 152, 86, 89, 170, 221, 78, 249, 147, 242, 241, 86, 89, 106, - 221, 78, 249, 147, 242, 241, 86, 89, 170, 221, 78, 249, 147, 219, 152, - 86, 89, 106, 221, 78, 249, 147, 219, 152, 86, 89, 170, 228, 92, 249, 147, - 242, 241, 86, 89, 106, 228, 92, 249, 147, 242, 241, 86, 89, 170, 228, 92, - 249, 147, 219, 152, 86, 89, 106, 228, 92, 249, 147, 219, 152, 86, 89, - 170, 113, 25, 227, 109, 86, 89, 113, 170, 25, 45, 243, 149, 86, 89, 113, - 106, 25, 45, 235, 58, 86, 89, 106, 113, 25, 227, 109, 86, 89, 170, 113, - 25, 235, 115, 86, 89, 113, 170, 25, 42, 243, 149, 86, 89, 113, 106, 25, - 42, 235, 58, 86, 89, 106, 113, 25, 235, 115, 86, 89, 170, 108, 25, 227, - 109, 86, 89, 108, 170, 25, 45, 243, 149, 86, 89, 108, 106, 25, 45, 235, - 58, 86, 89, 106, 108, 25, 227, 109, 86, 89, 170, 108, 25, 235, 115, 86, - 89, 108, 170, 25, 42, 243, 149, 86, 89, 108, 106, 25, 42, 235, 58, 86, - 89, 106, 108, 25, 235, 115, 86, 89, 170, 69, 25, 227, 109, 86, 89, 69, - 170, 25, 45, 243, 149, 86, 89, 108, 106, 25, 45, 113, 235, 58, 86, 89, - 113, 106, 25, 45, 108, 235, 58, 86, 89, 69, 106, 25, 45, 235, 58, 86, 89, - 113, 170, 25, 45, 108, 243, 149, 86, 89, 108, 170, 25, 45, 113, 243, 149, - 86, 89, 106, 69, 25, 227, 109, 86, 89, 170, 69, 25, 235, 115, 86, 89, 69, - 170, 25, 42, 243, 149, 86, 89, 108, 106, 25, 42, 113, 235, 58, 86, 89, - 113, 106, 25, 42, 108, 235, 58, 86, 89, 69, 106, 25, 42, 235, 58, 86, 89, - 113, 170, 25, 42, 108, 243, 149, 86, 89, 108, 170, 25, 42, 113, 243, 149, - 86, 89, 106, 69, 25, 235, 115, 86, 89, 170, 113, 25, 242, 241, 86, 89, - 42, 106, 25, 45, 113, 235, 58, 86, 89, 45, 106, 25, 42, 113, 235, 58, 86, - 89, 113, 170, 25, 186, 243, 149, 86, 89, 113, 106, 25, 186, 235, 58, 86, - 89, 45, 170, 25, 42, 113, 243, 149, 86, 89, 42, 170, 25, 45, 113, 243, - 149, 86, 89, 106, 113, 25, 242, 241, 86, 89, 170, 108, 25, 242, 241, 86, - 89, 42, 106, 25, 45, 108, 235, 58, 86, 89, 45, 106, 25, 42, 108, 235, 58, - 86, 89, 108, 170, 25, 186, 243, 149, 86, 89, 108, 106, 25, 186, 235, 58, - 86, 89, 45, 170, 25, 42, 108, 243, 149, 86, 89, 42, 170, 25, 45, 108, - 243, 149, 86, 89, 106, 108, 25, 242, 241, 86, 89, 170, 69, 25, 242, 241, - 86, 89, 42, 106, 25, 45, 69, 235, 58, 86, 89, 45, 106, 25, 42, 69, 235, - 58, 86, 89, 69, 170, 25, 186, 243, 149, 86, 89, 108, 106, 25, 113, 186, - 235, 58, 86, 89, 113, 106, 25, 108, 186, 235, 58, 86, 89, 69, 106, 25, - 186, 235, 58, 86, 89, 42, 108, 106, 25, 45, 113, 235, 58, 86, 89, 45, - 108, 106, 25, 42, 113, 235, 58, 86, 89, 42, 113, 106, 25, 45, 108, 235, - 58, 86, 89, 45, 113, 106, 25, 42, 108, 235, 58, 86, 89, 113, 170, 25, - 108, 186, 243, 149, 86, 89, 108, 170, 25, 113, 186, 243, 149, 86, 89, 45, - 170, 25, 42, 69, 243, 149, 86, 89, 42, 170, 25, 45, 69, 243, 149, 86, 89, - 106, 69, 25, 242, 241, 86, 89, 170, 51, 249, 147, 242, 241, 86, 89, 106, - 51, 249, 147, 242, 241, 86, 89, 170, 51, 249, 147, 219, 152, 86, 89, 106, - 51, 249, 147, 219, 152, 86, 89, 51, 242, 241, 86, 89, 51, 219, 152, 86, - 89, 113, 224, 109, 25, 45, 247, 138, 86, 89, 113, 51, 25, 45, 224, 108, - 86, 89, 51, 113, 25, 227, 109, 86, 89, 113, 224, 109, 25, 42, 247, 138, - 86, 89, 113, 51, 25, 42, 224, 108, 86, 89, 51, 113, 25, 235, 115, 86, 89, - 108, 224, 109, 25, 45, 247, 138, 86, 89, 108, 51, 25, 45, 224, 108, 86, - 89, 51, 108, 25, 227, 109, 86, 89, 108, 224, 109, 25, 42, 247, 138, 86, - 89, 108, 51, 25, 42, 224, 108, 86, 89, 51, 108, 25, 235, 115, 86, 89, 69, - 224, 109, 25, 45, 247, 138, 86, 89, 69, 51, 25, 45, 224, 108, 86, 89, 51, - 69, 25, 227, 109, 86, 89, 69, 224, 109, 25, 42, 247, 138, 86, 89, 69, 51, - 25, 42, 224, 108, 86, 89, 51, 69, 25, 235, 115, 86, 89, 113, 224, 109, - 25, 186, 247, 138, 86, 89, 113, 51, 25, 186, 224, 108, 86, 89, 51, 113, - 25, 242, 241, 86, 89, 108, 224, 109, 25, 186, 247, 138, 86, 89, 108, 51, - 25, 186, 224, 108, 86, 89, 51, 108, 25, 242, 241, 86, 89, 69, 224, 109, - 25, 186, 247, 138, 86, 89, 69, 51, 25, 186, 224, 108, 86, 89, 51, 69, 25, - 242, 241, 86, 89, 170, 254, 52, 113, 25, 227, 109, 86, 89, 170, 254, 52, - 113, 25, 235, 115, 86, 89, 170, 254, 52, 108, 25, 235, 115, 86, 89, 170, - 254, 52, 108, 25, 227, 109, 86, 89, 170, 249, 11, 220, 60, 45, 199, 234, - 237, 235, 115, 86, 89, 170, 249, 11, 220, 60, 42, 199, 234, 237, 227, - 109, 86, 89, 170, 249, 11, 250, 100, 86, 89, 170, 235, 115, 86, 89, 170, - 220, 63, 86, 89, 170, 227, 109, 86, 89, 170, 247, 132, 86, 89, 106, 235, - 115, 86, 89, 106, 220, 63, 86, 89, 106, 227, 109, 86, 89, 106, 247, 132, - 86, 89, 170, 42, 25, 106, 227, 109, 86, 89, 170, 108, 25, 106, 247, 132, - 86, 89, 106, 42, 25, 170, 227, 109, 86, 89, 106, 108, 25, 170, 247, 132, - 220, 60, 144, 252, 45, 234, 237, 131, 246, 232, 252, 45, 234, 237, 131, - 228, 90, 252, 45, 234, 237, 148, 246, 230, 252, 45, 234, 237, 144, 252, - 45, 234, 237, 245, 170, 246, 230, 252, 45, 234, 237, 148, 228, 88, 252, - 45, 234, 237, 225, 43, 246, 230, 252, 45, 245, 90, 252, 45, 42, 225, 43, - 246, 230, 252, 45, 42, 148, 228, 88, 252, 45, 42, 245, 170, 246, 230, - 252, 45, 42, 144, 252, 45, 42, 148, 246, 230, 252, 45, 42, 131, 228, 90, - 252, 45, 42, 131, 246, 232, 252, 45, 45, 144, 252, 45, 170, 225, 15, 234, - 18, 225, 15, 249, 152, 225, 15, 220, 60, 131, 246, 232, 252, 45, 45, 131, - 246, 232, 252, 45, 228, 94, 234, 237, 235, 115, 228, 94, 234, 237, 227, - 109, 228, 94, 220, 60, 235, 115, 228, 94, 220, 60, 42, 25, 234, 237, 42, - 25, 234, 237, 227, 109, 228, 94, 220, 60, 42, 25, 234, 237, 227, 109, - 228, 94, 220, 60, 42, 25, 220, 60, 45, 25, 234, 237, 235, 115, 228, 94, - 220, 60, 42, 25, 220, 60, 45, 25, 234, 237, 227, 109, 228, 94, 220, 60, - 227, 109, 228, 94, 220, 60, 45, 25, 234, 237, 235, 115, 228, 94, 220, 60, - 45, 25, 234, 237, 42, 25, 234, 237, 227, 109, 84, 223, 227, 67, 223, 227, - 67, 40, 2, 227, 55, 250, 122, 67, 40, 250, 141, 84, 3, 223, 227, 40, 2, - 186, 245, 187, 40, 2, 69, 245, 187, 40, 2, 230, 95, 250, 96, 245, 187, - 40, 2, 220, 60, 42, 199, 234, 237, 45, 245, 187, 40, 2, 220, 60, 45, 199, - 234, 237, 42, 245, 187, 40, 2, 249, 11, 250, 96, 245, 187, 84, 3, 223, - 227, 67, 3, 223, 227, 84, 227, 208, 67, 227, 208, 84, 69, 227, 208, 67, - 69, 227, 208, 84, 229, 232, 67, 229, 232, 84, 220, 62, 221, 90, 67, 220, - 62, 221, 90, 84, 220, 62, 3, 221, 90, 67, 220, 62, 3, 221, 90, 84, 227, - 106, 221, 90, 67, 227, 106, 221, 90, 84, 227, 106, 3, 221, 90, 67, 227, - 106, 3, 221, 90, 84, 227, 106, 229, 29, 67, 227, 106, 229, 29, 84, 247, - 131, 221, 90, 67, 247, 131, 221, 90, 84, 247, 131, 3, 221, 90, 67, 247, - 131, 3, 221, 90, 84, 235, 112, 221, 90, 67, 235, 112, 221, 90, 84, 235, - 112, 3, 221, 90, 67, 235, 112, 3, 221, 90, 84, 235, 112, 229, 29, 67, - 235, 112, 229, 29, 84, 249, 4, 67, 249, 4, 67, 249, 5, 250, 141, 84, 3, - 249, 4, 245, 175, 234, 234, 67, 250, 221, 247, 143, 250, 221, 250, 222, - 2, 69, 245, 187, 251, 239, 84, 250, 221, 250, 222, 2, 42, 144, 252, 53, - 250, 222, 2, 45, 144, 252, 53, 250, 222, 2, 234, 237, 144, 252, 53, 250, - 222, 2, 220, 60, 144, 252, 53, 250, 222, 2, 220, 60, 45, 228, 94, 252, - 53, 250, 222, 2, 254, 158, 251, 222, 220, 60, 42, 228, 94, 252, 53, 42, - 144, 84, 250, 221, 45, 144, 84, 250, 221, 237, 171, 251, 241, 237, 171, - 67, 250, 221, 220, 60, 144, 237, 171, 67, 250, 221, 234, 237, 144, 237, - 171, 67, 250, 221, 220, 60, 42, 228, 94, 250, 219, 254, 51, 220, 60, 45, - 228, 94, 250, 219, 254, 51, 234, 237, 45, 228, 94, 250, 219, 254, 51, - 234, 237, 42, 228, 94, 250, 219, 254, 51, 220, 60, 144, 250, 221, 234, - 237, 144, 250, 221, 84, 234, 237, 45, 221, 90, 84, 234, 237, 42, 221, 90, - 84, 220, 60, 42, 221, 90, 84, 220, 60, 45, 221, 90, 67, 251, 241, 40, 2, - 42, 144, 252, 53, 40, 2, 45, 144, 252, 53, 40, 2, 220, 60, 42, 249, 11, - 144, 252, 53, 40, 2, 234, 237, 45, 249, 11, 144, 252, 53, 67, 40, 2, 69, - 252, 63, 235, 43, 67, 220, 62, 221, 91, 2, 248, 145, 220, 62, 221, 91, 2, - 42, 144, 252, 53, 220, 62, 221, 91, 2, 45, 144, 252, 53, 235, 146, 250, - 221, 67, 40, 2, 220, 60, 42, 228, 93, 67, 40, 2, 234, 237, 42, 228, 93, - 67, 40, 2, 234, 237, 45, 228, 93, 67, 40, 2, 220, 60, 45, 228, 93, 67, - 250, 222, 2, 220, 60, 42, 228, 93, 67, 250, 222, 2, 234, 237, 42, 228, - 93, 67, 250, 222, 2, 234, 237, 45, 228, 93, 67, 250, 222, 2, 220, 60, 45, - 228, 93, 220, 60, 42, 221, 90, 220, 60, 45, 221, 90, 234, 237, 42, 221, - 90, 67, 234, 18, 223, 227, 84, 234, 18, 223, 227, 67, 234, 18, 3, 223, - 227, 84, 234, 18, 3, 223, 227, 234, 237, 45, 221, 90, 84, 223, 69, 2, - 227, 220, 250, 189, 220, 91, 224, 28, 250, 171, 84, 223, 156, 67, 223, - 156, 235, 56, 221, 220, 223, 68, 254, 10, 231, 201, 249, 47, 231, 201, - 250, 149, 230, 109, 84, 222, 71, 67, 222, 71, 252, 213, 252, 21, 252, - 213, 86, 2, 251, 44, 252, 213, 86, 2, 218, 151, 226, 149, 220, 92, 2, - 227, 243, 247, 117, 242, 187, 252, 98, 67, 224, 196, 229, 102, 84, 224, - 196, 229, 102, 225, 11, 210, 227, 59, 245, 148, 243, 154, 251, 241, 84, - 42, 229, 28, 237, 213, 84, 45, 229, 28, 237, 213, 67, 42, 229, 28, 237, - 213, 67, 108, 229, 28, 237, 213, 67, 45, 229, 28, 237, 213, 67, 113, 229, - 28, 237, 213, 224, 60, 25, 250, 99, 251, 120, 55, 227, 250, 55, 252, 69, - 55, 251, 164, 254, 115, 230, 96, 250, 100, 251, 32, 227, 149, 250, 101, - 117, 234, 243, 250, 101, 117, 237, 105, 223, 157, 25, 250, 104, 245, 241, - 100, 254, 238, 225, 13, 243, 193, 25, 224, 138, 229, 197, 100, 217, 241, - 218, 45, 221, 82, 35, 243, 151, 221, 82, 35, 235, 165, 221, 82, 35, 245, - 179, 221, 82, 35, 221, 221, 221, 82, 35, 218, 194, 221, 82, 35, 218, 240, - 221, 82, 35, 233, 107, 221, 82, 35, 247, 8, 218, 211, 117, 249, 30, 67, - 245, 94, 246, 3, 67, 224, 38, 246, 3, 84, 224, 38, 246, 3, 67, 223, 69, - 2, 227, 220, 245, 178, 228, 90, 233, 117, 235, 142, 228, 90, 233, 117, - 233, 249, 245, 217, 55, 247, 8, 234, 90, 55, 237, 31, 226, 124, 220, 45, - 232, 129, 229, 41, 254, 39, 222, 104, 244, 182, 251, 150, 235, 90, 219, - 80, 235, 65, 226, 102, 226, 163, 251, 140, 254, 68, 229, 66, 67, 251, 37, - 236, 102, 67, 251, 37, 228, 83, 67, 251, 37, 227, 65, 67, 251, 37, 252, - 62, 67, 251, 37, 236, 59, 67, 251, 37, 229, 207, 84, 251, 37, 236, 102, - 84, 251, 37, 228, 83, 84, 251, 37, 227, 65, 84, 251, 37, 252, 62, 84, - 251, 37, 236, 59, 84, 251, 37, 229, 207, 84, 223, 252, 223, 80, 67, 243, - 154, 223, 80, 67, 249, 5, 223, 80, 84, 250, 188, 223, 80, 67, 223, 252, - 223, 80, 84, 243, 154, 223, 80, 84, 249, 5, 223, 80, 67, 250, 188, 223, - 80, 242, 187, 223, 231, 228, 90, 231, 180, 246, 232, 231, 180, 252, 142, - 246, 232, 231, 177, 252, 142, 224, 76, 231, 177, 233, 59, 245, 157, 55, - 233, 59, 232, 205, 55, 233, 59, 225, 1, 55, 218, 217, 166, 250, 100, 247, - 5, 166, 250, 100, 220, 70, 227, 204, 100, 227, 204, 16, 35, 220, 197, - 229, 50, 227, 204, 16, 35, 220, 196, 229, 50, 227, 204, 16, 35, 220, 195, - 229, 50, 227, 204, 16, 35, 220, 194, 229, 50, 227, 204, 16, 35, 220, 193, - 229, 50, 227, 204, 16, 35, 220, 192, 229, 50, 227, 204, 16, 35, 220, 191, - 229, 50, 227, 204, 16, 35, 244, 180, 234, 50, 84, 220, 70, 227, 204, 100, - 227, 205, 229, 245, 100, 229, 222, 229, 245, 100, 229, 162, 229, 245, 55, - 218, 209, 100, 248, 254, 246, 2, 248, 254, 246, 1, 248, 254, 246, 0, 248, - 254, 245, 255, 248, 254, 245, 254, 248, 254, 245, 253, 67, 250, 222, 2, - 61, 227, 109, 67, 250, 222, 2, 124, 248, 143, 84, 250, 222, 2, 67, 61, - 227, 109, 84, 250, 222, 2, 124, 67, 248, 143, 233, 125, 35, 218, 45, 233, - 125, 35, 217, 240, 248, 237, 35, 244, 31, 218, 45, 248, 237, 35, 235, 85, - 217, 240, 248, 237, 35, 235, 85, 218, 45, 248, 237, 35, 244, 31, 217, - 240, 67, 245, 163, 84, 245, 163, 243, 193, 25, 229, 104, 254, 128, 250, - 98, 223, 24, 223, 164, 117, 254, 218, 226, 113, 254, 167, 245, 144, 244, - 189, 223, 164, 117, 243, 133, 253, 238, 100, 245, 153, 230, 80, 67, 223, - 156, 148, 235, 38, 250, 131, 227, 109, 148, 235, 38, 250, 131, 235, 115, - 218, 250, 55, 116, 219, 66, 55, 247, 135, 245, 217, 55, 247, 135, 234, - 90, 55, 237, 179, 245, 217, 25, 234, 90, 55, 234, 90, 25, 245, 217, 55, - 234, 90, 2, 214, 55, 234, 90, 2, 214, 25, 234, 90, 25, 245, 217, 55, 69, - 234, 90, 2, 214, 55, 186, 234, 90, 2, 214, 55, 234, 18, 67, 250, 221, - 234, 18, 84, 250, 221, 234, 18, 3, 67, 250, 221, 234, 62, 100, 248, 186, - 100, 220, 69, 229, 221, 100, 250, 178, 245, 86, 220, 42, 232, 124, 251, - 72, 230, 25, 237, 37, 219, 98, 251, 18, 84, 233, 118, 235, 53, 225, 34, - 225, 64, 228, 75, 225, 48, 224, 24, 252, 215, 252, 188, 204, 236, 154, - 67, 247, 122, 234, 86, 67, 247, 122, 236, 102, 84, 247, 122, 234, 86, 84, - 247, 122, 236, 102, 224, 29, 218, 189, 224, 31, 223, 69, 252, 125, 250, - 189, 227, 242, 84, 224, 28, 221, 222, 250, 190, 25, 227, 242, 215, 67, - 224, 196, 229, 102, 215, 84, 224, 196, 229, 102, 67, 249, 5, 237, 224, - 223, 227, 250, 95, 235, 149, 248, 206, 251, 137, 229, 104, 251, 138, 224, - 51, 243, 141, 2, 67, 250, 100, 34, 250, 95, 235, 149, 251, 65, 231, 205, - 246, 174, 254, 144, 230, 135, 42, 218, 230, 221, 106, 84, 220, 204, 42, - 218, 230, 221, 106, 67, 220, 204, 42, 218, 230, 221, 106, 84, 42, 235, - 150, 233, 248, 67, 42, 235, 150, 233, 248, 247, 120, 224, 46, 55, 106, - 67, 247, 131, 221, 90, 42, 250, 197, 246, 174, 204, 226, 149, 245, 247, - 249, 11, 237, 224, 67, 250, 222, 237, 224, 84, 223, 227, 84, 221, 63, - 227, 167, 42, 246, 173, 227, 167, 42, 246, 172, 106, 250, 222, 2, 214, - 25, 124, 188, 50, 84, 250, 101, 230, 139, 224, 218, 224, 207, 224, 174, - 250, 245, 251, 125, 243, 93, 224, 83, 244, 190, 218, 189, 242, 171, 244, - 190, 2, 243, 188, 234, 79, 16, 35, 235, 57, 233, 107, 220, 92, 230, 139, - 244, 24, 245, 117, 245, 164, 237, 224, 242, 252, 245, 209, 226, 160, 40, - 245, 116, 250, 122, 224, 63, 242, 66, 224, 65, 229, 158, 2, 252, 215, - 222, 62, 237, 118, 252, 204, 100, 243, 156, 244, 33, 100, 245, 91, 228, - 198, 250, 83, 230, 139, 84, 223, 227, 67, 245, 164, 2, 186, 233, 193, 84, - 223, 120, 220, 60, 252, 49, 226, 103, 84, 226, 103, 234, 237, 252, 49, - 226, 103, 67, 226, 103, 222, 72, 235, 10, 55, 222, 114, 247, 119, 254, - 187, 246, 170, 219, 93, 243, 189, 218, 167, 243, 189, 234, 237, 45, 229, - 181, 229, 181, 220, 60, 45, 229, 181, 67, 232, 59, 84, 232, 59, 251, 45, - 78, 106, 251, 45, 78, 233, 84, 218, 151, 106, 233, 84, 218, 151, 252, - 213, 218, 151, 106, 252, 213, 218, 151, 230, 80, 23, 250, 100, 106, 23, - 250, 100, 230, 119, 251, 85, 250, 100, 106, 230, 119, 251, 85, 250, 100, - 7, 250, 100, 225, 14, 67, 7, 250, 100, 230, 80, 7, 250, 100, 234, 88, - 250, 100, 223, 157, 117, 249, 140, 245, 116, 222, 83, 253, 251, 245, 116, - 252, 214, 253, 251, 106, 245, 116, 252, 214, 253, 251, 245, 116, 250, - 186, 253, 251, 84, 245, 116, 229, 30, 223, 156, 67, 245, 116, 229, 30, - 223, 156, 223, 125, 230, 80, 67, 223, 156, 34, 67, 223, 156, 230, 119, - 251, 85, 84, 223, 156, 84, 251, 85, 67, 223, 156, 230, 80, 84, 223, 156, - 106, 230, 80, 84, 223, 156, 229, 71, 223, 156, 225, 14, 67, 223, 156, - 106, 253, 251, 230, 119, 251, 85, 253, 251, 246, 235, 223, 236, 253, 251, - 246, 235, 229, 30, 84, 223, 156, 246, 235, 229, 30, 229, 71, 223, 156, - 224, 82, 229, 30, 84, 223, 156, 246, 235, 229, 30, 227, 206, 84, 223, - 156, 106, 246, 235, 229, 30, 227, 206, 84, 223, 156, 220, 222, 229, 30, - 84, 223, 156, 224, 78, 229, 30, 253, 251, 222, 83, 253, 251, 230, 119, - 251, 85, 222, 83, 253, 251, 106, 222, 83, 253, 251, 224, 82, 229, 149, - 84, 25, 67, 245, 147, 84, 245, 147, 67, 245, 147, 246, 235, 229, 149, - 230, 80, 84, 245, 147, 34, 230, 119, 251, 85, 246, 235, 229, 30, 223, - 156, 106, 222, 83, 229, 71, 253, 251, 224, 30, 221, 195, 221, 85, 224, - 30, 106, 251, 35, 224, 30, 223, 251, 106, 223, 251, 252, 214, 253, 251, - 246, 235, 222, 83, 228, 221, 253, 251, 106, 246, 235, 222, 83, 228, 221, - 253, 251, 225, 14, 67, 250, 221, 234, 237, 45, 247, 118, 67, 223, 227, - 220, 60, 45, 247, 118, 67, 223, 227, 234, 237, 45, 225, 14, 67, 223, 227, - 220, 60, 45, 225, 14, 67, 223, 227, 84, 249, 5, 233, 155, 67, 218, 151, - 106, 246, 95, 164, 100, 170, 69, 135, 234, 18, 69, 135, 106, 69, 135, - 106, 224, 109, 215, 250, 169, 228, 69, 164, 230, 98, 106, 224, 109, 250, - 169, 228, 69, 164, 230, 98, 106, 51, 215, 250, 169, 228, 69, 164, 230, - 98, 106, 51, 250, 169, 228, 69, 164, 230, 98, 250, 73, 223, 147, 229, - 241, 5, 230, 98, 106, 246, 95, 164, 230, 98, 106, 243, 154, 246, 95, 164, - 230, 98, 106, 84, 243, 153, 227, 59, 106, 84, 243, 154, 251, 241, 245, - 148, 243, 153, 227, 59, 245, 148, 243, 154, 251, 241, 234, 18, 42, 229, - 230, 230, 98, 234, 18, 45, 229, 230, 230, 98, 234, 18, 245, 154, 42, 229, - 230, 230, 98, 234, 18, 245, 154, 45, 229, 230, 230, 98, 234, 18, 235, - 112, 254, 120, 252, 18, 230, 98, 234, 18, 227, 106, 254, 120, 252, 18, - 230, 98, 106, 235, 112, 254, 120, 228, 69, 164, 230, 98, 106, 227, 106, - 254, 120, 228, 69, 164, 230, 98, 106, 235, 112, 254, 120, 252, 18, 230, - 98, 106, 227, 106, 254, 120, 252, 18, 230, 98, 170, 42, 221, 114, 224, - 236, 252, 18, 230, 98, 170, 45, 221, 114, 224, 236, 252, 18, 230, 98, - 234, 18, 42, 250, 79, 252, 18, 230, 98, 234, 18, 45, 250, 79, 252, 18, - 230, 98, 248, 217, 232, 136, 34, 20, 107, 248, 217, 232, 136, 34, 20, - 103, 248, 217, 232, 136, 34, 20, 160, 248, 217, 232, 136, 34, 20, 154, - 248, 217, 232, 136, 34, 20, 174, 248, 217, 232, 136, 34, 20, 182, 248, - 217, 232, 136, 34, 20, 191, 248, 217, 232, 136, 34, 20, 185, 248, 217, - 232, 136, 34, 20, 190, 248, 217, 232, 136, 34, 54, 222, 65, 248, 217, 34, - 33, 20, 107, 248, 217, 34, 33, 20, 103, 248, 217, 34, 33, 20, 160, 248, - 217, 34, 33, 20, 154, 248, 217, 34, 33, 20, 174, 248, 217, 34, 33, 20, - 182, 248, 217, 34, 33, 20, 191, 248, 217, 34, 33, 20, 185, 248, 217, 34, - 33, 20, 190, 248, 217, 34, 33, 54, 222, 65, 248, 217, 232, 136, 34, 33, - 20, 107, 248, 217, 232, 136, 34, 33, 20, 103, 248, 217, 232, 136, 34, 33, - 20, 160, 248, 217, 232, 136, 34, 33, 20, 154, 248, 217, 232, 136, 34, 33, - 20, 174, 248, 217, 232, 136, 34, 33, 20, 182, 248, 217, 232, 136, 34, 33, - 20, 191, 248, 217, 232, 136, 34, 33, 20, 185, 248, 217, 232, 136, 34, 33, - 20, 190, 248, 217, 232, 136, 34, 33, 54, 222, 65, 106, 218, 200, 90, 65, - 106, 224, 6, 247, 5, 65, 106, 90, 65, 106, 231, 187, 247, 5, 65, 247, - 124, 229, 32, 90, 65, 106, 227, 56, 90, 65, 221, 89, 90, 65, 106, 221, - 89, 90, 65, 249, 145, 221, 89, 90, 65, 106, 249, 145, 221, 89, 90, 65, - 84, 90, 65, 221, 228, 221, 118, 90, 254, 20, 221, 228, 252, 27, 90, 254, - 20, 84, 90, 254, 20, 106, 84, 250, 73, 247, 130, 25, 90, 65, 106, 84, - 250, 73, 220, 53, 25, 90, 65, 223, 224, 84, 90, 65, 106, 250, 157, 84, - 90, 65, 227, 105, 67, 90, 65, 235, 111, 67, 90, 65, 252, 232, 225, 14, - 67, 90, 65, 245, 96, 225, 14, 67, 90, 65, 106, 234, 237, 227, 104, 67, - 90, 65, 106, 220, 60, 227, 104, 67, 90, 65, 231, 182, 234, 237, 227, 104, - 67, 90, 65, 231, 182, 220, 60, 227, 104, 67, 90, 65, 34, 106, 67, 90, 65, - 218, 206, 90, 65, 252, 52, 224, 6, 247, 5, 65, 252, 52, 90, 65, 252, 52, - 231, 187, 247, 5, 65, 106, 252, 52, 224, 6, 247, 5, 65, 106, 252, 52, 90, - 65, 106, 252, 52, 231, 187, 247, 5, 65, 222, 85, 90, 65, 106, 222, 84, - 90, 65, 218, 225, 90, 65, 106, 218, 225, 90, 65, 230, 116, 90, 65, 148, - 248, 227, 254, 119, 67, 221, 91, 250, 141, 3, 67, 221, 90, 229, 160, 230, - 119, 223, 92, 230, 119, 223, 57, 42, 226, 234, 252, 226, 249, 67, 45, - 226, 234, 252, 226, 249, 67, 156, 2, 61, 237, 190, 227, 160, 224, 18, - 228, 243, 223, 92, 223, 58, 228, 243, 224, 17, 69, 252, 201, 2, 186, 92, - 171, 248, 187, 67, 249, 5, 2, 251, 83, 248, 145, 25, 2, 248, 145, 246, - 213, 117, 230, 114, 220, 52, 234, 237, 45, 250, 124, 2, 248, 145, 220, - 60, 42, 250, 124, 2, 248, 145, 42, 230, 82, 237, 57, 45, 230, 82, 237, - 57, 245, 90, 230, 82, 237, 57, 235, 146, 108, 222, 143, 235, 146, 113, - 222, 143, 42, 25, 45, 51, 220, 236, 42, 25, 45, 222, 143, 42, 233, 87, - 171, 45, 222, 143, 171, 42, 222, 143, 108, 222, 144, 2, 250, 222, 50, - 234, 235, 248, 192, 251, 213, 186, 227, 16, 67, 250, 156, 249, 4, 67, - 250, 156, 249, 5, 2, 127, 221, 202, 67, 250, 156, 249, 5, 2, 90, 221, - 202, 67, 40, 2, 127, 221, 202, 67, 40, 2, 90, 221, 202, 14, 42, 67, 40, - 115, 14, 45, 67, 40, 115, 14, 42, 254, 120, 115, 14, 45, 254, 120, 115, - 14, 42, 51, 254, 120, 115, 14, 45, 51, 254, 120, 115, 14, 42, 67, 221, - 114, 224, 236, 115, 14, 45, 67, 221, 114, 224, 236, 115, 14, 42, 245, - 154, 229, 229, 14, 45, 245, 154, 229, 229, 220, 53, 228, 92, 65, 247, - 130, 228, 92, 65, 254, 104, 244, 222, 250, 222, 65, 250, 199, 244, 222, - 250, 222, 65, 45, 76, 2, 34, 229, 43, 171, 127, 65, 171, 90, 65, 171, 42, - 45, 65, 171, 127, 51, 65, 171, 90, 51, 65, 171, 42, 45, 51, 65, 171, 127, - 76, 245, 97, 135, 171, 90, 76, 245, 97, 135, 171, 127, 51, 76, 245, 97, - 135, 171, 90, 51, 76, 245, 97, 135, 171, 90, 223, 223, 65, 43, 44, 252, - 47, 43, 44, 248, 142, 43, 44, 248, 14, 43, 44, 248, 141, 43, 44, 247, - 206, 43, 44, 248, 77, 43, 44, 248, 13, 43, 44, 248, 140, 43, 44, 247, - 174, 43, 44, 248, 45, 43, 44, 247, 237, 43, 44, 248, 108, 43, 44, 247, - 205, 43, 44, 248, 76, 43, 44, 248, 12, 43, 44, 248, 139, 43, 44, 247, - 158, 43, 44, 248, 29, 43, 44, 247, 221, 43, 44, 248, 92, 43, 44, 247, - 189, 43, 44, 248, 60, 43, 44, 247, 252, 43, 44, 248, 123, 43, 44, 247, - 173, 43, 44, 248, 44, 43, 44, 247, 236, 43, 44, 248, 107, 43, 44, 247, - 204, 43, 44, 248, 75, 43, 44, 248, 11, 43, 44, 248, 138, 43, 44, 247, - 150, 43, 44, 248, 21, 43, 44, 247, 213, 43, 44, 248, 84, 43, 44, 247, - 181, 43, 44, 248, 52, 43, 44, 247, 244, 43, 44, 248, 115, 43, 44, 247, - 165, 43, 44, 248, 36, 43, 44, 247, 228, 43, 44, 248, 99, 43, 44, 247, - 196, 43, 44, 248, 67, 43, 44, 248, 3, 43, 44, 248, 130, 43, 44, 247, 157, - 43, 44, 248, 28, 43, 44, 247, 220, 43, 44, 248, 91, 43, 44, 247, 188, 43, - 44, 248, 59, 43, 44, 247, 251, 43, 44, 248, 122, 43, 44, 247, 172, 43, - 44, 248, 43, 43, 44, 247, 235, 43, 44, 248, 106, 43, 44, 247, 203, 43, - 44, 248, 74, 43, 44, 248, 10, 43, 44, 248, 137, 43, 44, 247, 146, 43, 44, - 248, 17, 43, 44, 247, 209, 43, 44, 248, 80, 43, 44, 247, 177, 43, 44, - 248, 48, 43, 44, 247, 240, 43, 44, 248, 111, 43, 44, 247, 161, 43, 44, - 248, 32, 43, 44, 247, 224, 43, 44, 248, 95, 43, 44, 247, 192, 43, 44, - 248, 63, 43, 44, 247, 255, 43, 44, 248, 126, 43, 44, 247, 153, 43, 44, - 248, 24, 43, 44, 247, 216, 43, 44, 248, 87, 43, 44, 247, 184, 43, 44, - 248, 55, 43, 44, 247, 247, 43, 44, 248, 118, 43, 44, 247, 168, 43, 44, - 248, 39, 43, 44, 247, 231, 43, 44, 248, 102, 43, 44, 247, 199, 43, 44, - 248, 70, 43, 44, 248, 6, 43, 44, 248, 133, 43, 44, 247, 149, 43, 44, 248, - 20, 43, 44, 247, 212, 43, 44, 248, 83, 43, 44, 247, 180, 43, 44, 248, 51, - 43, 44, 247, 243, 43, 44, 248, 114, 43, 44, 247, 164, 43, 44, 248, 35, - 43, 44, 247, 227, 43, 44, 248, 98, 43, 44, 247, 195, 43, 44, 248, 66, 43, - 44, 248, 2, 43, 44, 248, 129, 43, 44, 247, 156, 43, 44, 248, 27, 43, 44, - 247, 219, 43, 44, 248, 90, 43, 44, 247, 187, 43, 44, 248, 58, 43, 44, - 247, 250, 43, 44, 248, 121, 43, 44, 247, 171, 43, 44, 248, 42, 43, 44, - 247, 234, 43, 44, 248, 105, 43, 44, 247, 202, 43, 44, 248, 73, 43, 44, - 248, 9, 43, 44, 248, 136, 43, 44, 247, 144, 43, 44, 248, 15, 43, 44, 247, - 207, 43, 44, 248, 78, 43, 44, 247, 175, 43, 44, 248, 46, 43, 44, 247, - 238, 43, 44, 248, 109, 43, 44, 247, 159, 43, 44, 248, 30, 43, 44, 247, - 222, 43, 44, 248, 93, 43, 44, 247, 190, 43, 44, 248, 61, 43, 44, 247, - 253, 43, 44, 248, 124, 43, 44, 247, 151, 43, 44, 248, 22, 43, 44, 247, - 214, 43, 44, 248, 85, 43, 44, 247, 182, 43, 44, 248, 53, 43, 44, 247, - 245, 43, 44, 248, 116, 43, 44, 247, 166, 43, 44, 248, 37, 43, 44, 247, - 229, 43, 44, 248, 100, 43, 44, 247, 197, 43, 44, 248, 68, 43, 44, 248, 4, - 43, 44, 248, 131, 43, 44, 247, 147, 43, 44, 248, 18, 43, 44, 247, 210, - 43, 44, 248, 81, 43, 44, 247, 178, 43, 44, 248, 49, 43, 44, 247, 241, 43, - 44, 248, 112, 43, 44, 247, 162, 43, 44, 248, 33, 43, 44, 247, 225, 43, - 44, 248, 96, 43, 44, 247, 193, 43, 44, 248, 64, 43, 44, 248, 0, 43, 44, - 248, 127, 43, 44, 247, 154, 43, 44, 248, 25, 43, 44, 247, 217, 43, 44, - 248, 88, 43, 44, 247, 185, 43, 44, 248, 56, 43, 44, 247, 248, 43, 44, - 248, 119, 43, 44, 247, 169, 43, 44, 248, 40, 43, 44, 247, 232, 43, 44, - 248, 103, 43, 44, 247, 200, 43, 44, 248, 71, 43, 44, 248, 7, 43, 44, 248, - 134, 43, 44, 247, 145, 43, 44, 248, 16, 43, 44, 247, 208, 43, 44, 248, - 79, 43, 44, 247, 176, 43, 44, 248, 47, 43, 44, 247, 239, 43, 44, 248, - 110, 43, 44, 247, 160, 43, 44, 248, 31, 43, 44, 247, 223, 43, 44, 248, - 94, 43, 44, 247, 191, 43, 44, 248, 62, 43, 44, 247, 254, 43, 44, 248, - 125, 43, 44, 247, 152, 43, 44, 248, 23, 43, 44, 247, 215, 43, 44, 248, - 86, 43, 44, 247, 183, 43, 44, 248, 54, 43, 44, 247, 246, 43, 44, 248, - 117, 43, 44, 247, 167, 43, 44, 248, 38, 43, 44, 247, 230, 43, 44, 248, - 101, 43, 44, 247, 198, 43, 44, 248, 69, 43, 44, 248, 5, 43, 44, 248, 132, - 43, 44, 247, 148, 43, 44, 248, 19, 43, 44, 247, 211, 43, 44, 248, 82, 43, - 44, 247, 179, 43, 44, 248, 50, 43, 44, 247, 242, 43, 44, 248, 113, 43, - 44, 247, 163, 43, 44, 248, 34, 43, 44, 247, 226, 43, 44, 248, 97, 43, 44, - 247, 194, 43, 44, 248, 65, 43, 44, 248, 1, 43, 44, 248, 128, 43, 44, 247, - 155, 43, 44, 248, 26, 43, 44, 247, 218, 43, 44, 248, 89, 43, 44, 247, - 186, 43, 44, 248, 57, 43, 44, 247, 249, 43, 44, 248, 120, 43, 44, 247, - 170, 43, 44, 248, 41, 43, 44, 247, 233, 43, 44, 248, 104, 43, 44, 247, - 201, 43, 44, 248, 72, 43, 44, 248, 8, 43, 44, 248, 135, 90, 220, 206, 76, - 2, 69, 92, 90, 220, 206, 76, 2, 51, 69, 92, 127, 51, 76, 2, 69, 92, 90, - 51, 76, 2, 69, 92, 42, 45, 51, 76, 2, 69, 92, 90, 220, 206, 76, 245, 97, - 135, 127, 51, 76, 245, 97, 135, 90, 51, 76, 245, 97, 135, 247, 130, 76, - 2, 186, 92, 220, 53, 76, 2, 186, 92, 220, 53, 221, 78, 65, 247, 130, 221, - 78, 65, 127, 51, 249, 147, 65, 90, 51, 249, 147, 65, 127, 221, 78, 249, - 147, 65, 90, 221, 78, 249, 147, 65, 90, 220, 206, 221, 78, 249, 147, 65, - 90, 76, 2, 247, 143, 223, 146, 220, 53, 76, 199, 135, 247, 130, 76, 199, - 135, 90, 76, 2, 222, 136, 2, 69, 92, 90, 76, 2, 222, 136, 2, 51, 69, 92, - 90, 220, 206, 76, 2, 222, 135, 90, 220, 206, 76, 2, 222, 136, 2, 69, 92, - 90, 220, 206, 76, 2, 222, 136, 2, 51, 69, 92, 127, 254, 22, 90, 254, 22, - 127, 51, 254, 22, 90, 51, 254, 22, 127, 76, 199, 84, 249, 4, 90, 76, 199, - 84, 249, 4, 127, 76, 245, 97, 252, 201, 199, 84, 249, 4, 90, 76, 245, 97, - 252, 201, 199, 84, 249, 4, 231, 187, 218, 217, 25, 224, 6, 247, 5, 65, - 231, 187, 247, 5, 25, 224, 6, 218, 217, 65, 231, 187, 218, 217, 76, 2, - 96, 231, 187, 247, 5, 76, 2, 96, 224, 6, 247, 5, 76, 2, 96, 224, 6, 218, - 217, 76, 2, 96, 231, 187, 218, 217, 76, 25, 231, 187, 247, 5, 65, 231, - 187, 247, 5, 76, 25, 224, 6, 247, 5, 65, 224, 6, 247, 5, 76, 25, 224, 6, - 218, 217, 65, 224, 6, 218, 217, 76, 25, 231, 187, 218, 217, 65, 227, 88, - 249, 11, 250, 95, 245, 247, 249, 10, 245, 247, 249, 11, 250, 95, 227, 88, - 249, 10, 224, 6, 247, 5, 76, 250, 95, 231, 187, 247, 5, 65, 231, 187, - 247, 5, 76, 250, 95, 224, 6, 247, 5, 65, 245, 247, 249, 11, 250, 95, 231, - 187, 247, 5, 65, 227, 88, 249, 11, 250, 95, 224, 6, 247, 5, 65, 231, 187, - 247, 5, 76, 250, 95, 231, 187, 218, 217, 65, 231, 187, 218, 217, 76, 250, - 95, 231, 187, 247, 5, 65, 218, 237, 76, 229, 28, 248, 208, 227, 109, 76, - 229, 28, 90, 222, 15, 250, 72, 220, 52, 76, 229, 28, 90, 222, 15, 250, - 72, 247, 129, 76, 229, 28, 247, 130, 222, 15, 250, 72, 235, 107, 76, 229, - 28, 247, 130, 222, 15, 250, 72, 227, 100, 227, 103, 254, 52, 250, 199, - 65, 235, 110, 254, 52, 254, 104, 65, 221, 120, 254, 52, 254, 104, 65, - 252, 29, 254, 52, 254, 104, 65, 221, 120, 254, 52, 250, 199, 76, 2, 233, - 154, 221, 120, 254, 52, 254, 104, 76, 2, 229, 43, 234, 237, 45, 225, 69, - 250, 199, 65, 234, 237, 42, 225, 69, 254, 104, 65, 254, 104, 250, 197, - 250, 222, 65, 250, 199, 250, 197, 250, 222, 65, 90, 76, 71, 224, 192, - 127, 65, 127, 76, 71, 224, 192, 90, 65, 224, 192, 90, 76, 71, 127, 65, - 90, 76, 2, 88, 56, 127, 76, 2, 88, 56, 90, 76, 221, 225, 218, 151, 42, - 45, 76, 221, 225, 3, 250, 221, 220, 53, 220, 206, 76, 245, 97, 3, 250, - 221, 42, 192, 108, 45, 192, 113, 243, 176, 42, 192, 113, 45, 192, 108, - 243, 176, 108, 192, 45, 113, 192, 42, 243, 176, 108, 192, 42, 113, 192, - 45, 243, 176, 42, 192, 108, 45, 192, 108, 243, 176, 108, 192, 45, 113, - 192, 45, 243, 176, 42, 192, 113, 45, 192, 113, 243, 176, 108, 192, 42, - 113, 192, 42, 243, 176, 127, 243, 177, 2, 192, 108, 199, 135, 90, 243, - 177, 2, 192, 108, 199, 135, 220, 53, 243, 177, 2, 192, 45, 199, 135, 247, - 130, 243, 177, 2, 192, 45, 199, 135, 127, 243, 177, 2, 192, 113, 199, - 135, 90, 243, 177, 2, 192, 113, 199, 135, 220, 53, 243, 177, 2, 192, 42, - 199, 135, 247, 130, 243, 177, 2, 192, 42, 199, 135, 127, 243, 177, 2, - 192, 108, 245, 97, 135, 90, 243, 177, 2, 192, 108, 245, 97, 135, 220, 53, - 243, 177, 2, 192, 45, 245, 97, 135, 247, 130, 243, 177, 2, 192, 45, 245, - 97, 135, 127, 243, 177, 2, 192, 113, 245, 97, 135, 90, 243, 177, 2, 192, - 113, 245, 97, 135, 220, 53, 243, 177, 2, 192, 42, 245, 97, 135, 247, 130, - 243, 177, 2, 192, 42, 245, 97, 135, 127, 243, 177, 2, 192, 108, 71, 127, - 243, 177, 2, 192, 247, 132, 220, 53, 243, 177, 2, 192, 42, 252, 106, 220, - 53, 243, 177, 2, 192, 227, 109, 90, 243, 177, 2, 192, 108, 71, 90, 243, - 177, 2, 192, 247, 132, 247, 130, 243, 177, 2, 192, 42, 252, 106, 247, - 130, 243, 177, 2, 192, 227, 109, 127, 243, 177, 2, 192, 108, 71, 90, 243, - 177, 2, 192, 220, 63, 127, 243, 177, 2, 192, 113, 71, 90, 243, 177, 2, - 192, 247, 132, 90, 243, 177, 2, 192, 108, 71, 127, 243, 177, 2, 192, 220, - 63, 90, 243, 177, 2, 192, 113, 71, 127, 243, 177, 2, 192, 247, 132, 127, - 243, 177, 2, 192, 108, 71, 171, 249, 146, 127, 243, 177, 2, 192, 113, - 252, 118, 171, 249, 146, 90, 243, 177, 2, 192, 108, 71, 171, 249, 146, - 90, 243, 177, 2, 192, 113, 252, 118, 171, 249, 146, 220, 53, 243, 177, 2, - 192, 42, 252, 106, 247, 130, 243, 177, 2, 192, 227, 109, 247, 130, 243, - 177, 2, 192, 42, 252, 106, 220, 53, 243, 177, 2, 192, 227, 109, 45, 51, - 76, 2, 227, 55, 243, 159, 246, 154, 5, 71, 90, 65, 221, 180, 230, 113, - 71, 90, 65, 127, 76, 71, 221, 180, 230, 112, 90, 76, 71, 221, 180, 230, - 112, 90, 76, 71, 254, 151, 114, 101, 235, 87, 71, 127, 65, 127, 76, 221, - 225, 235, 86, 244, 30, 71, 90, 65, 223, 93, 71, 90, 65, 127, 76, 221, - 225, 223, 92, 223, 58, 71, 127, 65, 42, 245, 177, 222, 135, 45, 245, 177, - 222, 135, 108, 245, 177, 222, 135, 113, 245, 177, 222, 135, 221, 78, 69, - 252, 201, 249, 67, 217, 158, 165, 223, 234, 217, 158, 165, 220, 198, 250, - 175, 42, 67, 250, 79, 115, 45, 67, 250, 79, 115, 42, 67, 229, 229, 45, - 67, 229, 229, 217, 158, 165, 42, 237, 237, 115, 217, 158, 165, 45, 237, - 237, 115, 217, 158, 165, 42, 252, 71, 115, 217, 158, 165, 45, 252, 71, - 115, 42, 40, 252, 18, 2, 220, 81, 45, 40, 252, 18, 2, 220, 81, 42, 40, - 252, 18, 2, 221, 203, 237, 224, 221, 120, 250, 123, 45, 40, 252, 18, 2, - 221, 203, 237, 224, 252, 29, 250, 123, 42, 40, 252, 18, 2, 221, 203, 237, - 224, 252, 29, 250, 123, 45, 40, 252, 18, 2, 221, 203, 237, 224, 221, 120, - 250, 123, 42, 254, 120, 252, 18, 2, 248, 145, 45, 254, 120, 252, 18, 2, - 248, 145, 42, 254, 52, 235, 87, 115, 45, 254, 52, 244, 30, 115, 51, 42, - 254, 52, 244, 30, 115, 51, 45, 254, 52, 235, 87, 115, 42, 84, 221, 114, - 224, 236, 115, 45, 84, 221, 114, 224, 236, 115, 247, 143, 245, 214, 69, - 217, 33, 235, 43, 234, 22, 254, 120, 230, 114, 235, 115, 45, 254, 120, - 219, 177, 2, 223, 227, 234, 22, 45, 254, 120, 2, 248, 145, 254, 120, 2, - 226, 235, 237, 190, 254, 248, 254, 119, 223, 245, 254, 120, 230, 114, - 235, 115, 223, 245, 254, 120, 230, 114, 220, 63, 215, 254, 119, 210, 254, - 119, 254, 120, 2, 220, 81, 210, 254, 120, 2, 220, 81, 230, 177, 254, 120, - 230, 114, 220, 63, 230, 177, 254, 120, 230, 114, 247, 132, 234, 22, 254, - 120, 2, 230, 119, 254, 32, 246, 187, 237, 224, 76, 229, 28, 108, 25, 227, - 109, 234, 22, 254, 120, 2, 230, 119, 254, 32, 246, 187, 237, 224, 76, - 229, 28, 108, 25, 235, 115, 234, 22, 254, 120, 2, 230, 119, 254, 32, 246, - 187, 237, 224, 76, 229, 28, 113, 25, 227, 109, 234, 22, 254, 120, 2, 230, - 119, 254, 32, 246, 187, 237, 224, 76, 229, 28, 113, 25, 235, 115, 234, - 22, 254, 120, 2, 230, 119, 254, 32, 246, 187, 237, 224, 76, 229, 28, 45, - 25, 220, 63, 234, 22, 254, 120, 2, 230, 119, 254, 32, 246, 187, 237, 224, - 76, 229, 28, 42, 25, 220, 63, 234, 22, 254, 120, 2, 230, 119, 254, 32, - 246, 187, 237, 224, 76, 229, 28, 45, 25, 247, 132, 234, 22, 254, 120, 2, - 230, 119, 254, 32, 246, 187, 237, 224, 76, 229, 28, 42, 25, 247, 132, - 210, 246, 199, 225, 45, 246, 199, 225, 46, 2, 230, 77, 246, 199, 225, 46, - 2, 3, 250, 222, 50, 246, 199, 225, 46, 2, 45, 76, 50, 246, 199, 225, 46, - 2, 42, 76, 50, 250, 222, 2, 186, 135, 34, 69, 135, 34, 229, 233, 34, 227, - 160, 224, 17, 34, 229, 160, 250, 222, 248, 192, 251, 213, 186, 252, 201, - 25, 221, 120, 144, 248, 192, 251, 213, 69, 135, 250, 222, 2, 223, 60, - 218, 151, 34, 254, 103, 248, 188, 55, 108, 76, 221, 225, 250, 221, 34, - 67, 251, 241, 34, 251, 241, 34, 235, 86, 34, 244, 29, 250, 222, 2, 3, - 250, 222, 199, 222, 23, 227, 109, 250, 222, 2, 124, 186, 223, 108, 199, - 222, 23, 227, 109, 204, 227, 88, 249, 11, 224, 55, 204, 245, 247, 249, - 11, 224, 55, 204, 253, 251, 204, 3, 250, 221, 204, 223, 227, 124, 237, - 56, 223, 225, 221, 91, 2, 61, 50, 221, 91, 2, 220, 81, 226, 235, 237, - 224, 221, 90, 221, 91, 2, 225, 52, 253, 245, 252, 28, 45, 221, 91, 71, - 42, 221, 90, 42, 221, 91, 252, 106, 69, 135, 69, 252, 201, 252, 106, 45, - 221, 90, 252, 23, 2, 42, 144, 252, 53, 252, 23, 2, 45, 144, 252, 53, 84, - 252, 22, 27, 2, 42, 144, 252, 53, 27, 2, 45, 144, 252, 53, 67, 242, 183, - 84, 242, 183, 42, 218, 198, 245, 214, 45, 218, 198, 245, 214, 42, 51, - 218, 198, 245, 214, 45, 51, 218, 198, 245, 214, 237, 218, 237, 207, 221, - 201, 104, 237, 207, 237, 208, 232, 138, 2, 69, 135, 247, 137, 233, 87, - 40, 2, 250, 135, 230, 81, 237, 216, 254, 13, 224, 166, 228, 229, 246, - 154, 5, 25, 224, 57, 229, 233, 246, 154, 5, 25, 224, 57, 229, 234, 2, - 221, 180, 50, 242, 59, 199, 25, 224, 57, 229, 233, 244, 75, 223, 155, - 222, 12, 247, 131, 221, 91, 2, 42, 144, 252, 53, 247, 131, 221, 91, 2, - 45, 144, 252, 53, 84, 249, 5, 2, 113, 65, 84, 234, 234, 67, 250, 222, 2, - 113, 65, 84, 250, 222, 2, 113, 65, 246, 141, 67, 223, 227, 246, 141, 84, - 223, 227, 246, 141, 67, 249, 4, 246, 141, 84, 249, 4, 246, 141, 67, 250, - 221, 246, 141, 84, 250, 221, 227, 15, 227, 160, 224, 18, 230, 112, 224, - 18, 2, 230, 77, 227, 160, 224, 18, 2, 186, 92, 252, 76, 224, 17, 252, 76, - 227, 160, 224, 17, 51, 229, 43, 221, 78, 229, 43, 235, 112, 250, 73, 254, - 120, 115, 227, 106, 250, 73, 254, 120, 115, 221, 171, 233, 152, 233, 33, - 34, 61, 230, 112, 233, 33, 34, 88, 230, 112, 233, 33, 34, 27, 230, 112, - 233, 33, 220, 75, 230, 113, 2, 248, 145, 233, 33, 220, 75, 230, 113, 2, - 229, 43, 233, 33, 40, 237, 175, 230, 112, 233, 33, 40, 220, 75, 230, 112, - 124, 235, 7, 25, 230, 112, 124, 235, 7, 156, 230, 112, 233, 33, 27, 230, - 112, 233, 131, 124, 223, 74, 223, 72, 2, 237, 186, 228, 92, 237, 187, - 230, 112, 245, 181, 229, 225, 237, 186, 237, 187, 2, 51, 92, 237, 187, - 253, 217, 2, 224, 55, 250, 218, 245, 87, 254, 104, 237, 184, 235, 44, - 237, 185, 2, 227, 207, 229, 212, 254, 29, 229, 24, 235, 44, 237, 185, 2, - 225, 69, 229, 212, 254, 29, 229, 24, 235, 44, 237, 185, 212, 237, 219, - 222, 23, 229, 24, 237, 187, 254, 29, 112, 229, 32, 230, 112, 228, 86, - 237, 187, 230, 112, 237, 187, 2, 127, 76, 2, 96, 237, 187, 2, 27, 55, - 237, 187, 2, 237, 174, 237, 187, 2, 220, 74, 237, 187, 2, 230, 77, 237, - 187, 2, 220, 81, 237, 57, 235, 146, 42, 221, 91, 230, 112, 217, 158, 165, - 226, 109, 250, 159, 217, 158, 165, 226, 109, 229, 69, 217, 158, 165, 226, - 109, 228, 226, 88, 5, 2, 3, 250, 222, 50, 88, 5, 2, 250, 217, 255, 1, 50, - 88, 5, 2, 221, 180, 50, 88, 5, 2, 61, 56, 88, 5, 2, 221, 180, 56, 88, 5, - 2, 223, 94, 103, 88, 5, 2, 84, 221, 90, 233, 155, 5, 2, 250, 169, 50, - 233, 155, 5, 2, 61, 56, 233, 155, 5, 2, 245, 247, 248, 143, 233, 155, 5, - 2, 227, 88, 248, 143, 88, 5, 237, 224, 42, 144, 250, 221, 88, 5, 237, - 224, 45, 144, 250, 221, 219, 164, 156, 250, 101, 228, 229, 233, 84, 5, 2, - 61, 50, 233, 84, 5, 2, 220, 81, 225, 66, 228, 230, 2, 252, 29, 250, 196, - 224, 41, 228, 229, 233, 84, 5, 237, 224, 42, 144, 250, 221, 233, 84, 5, - 237, 224, 45, 144, 250, 221, 34, 233, 84, 5, 2, 250, 217, 255, 0, 233, - 84, 5, 237, 224, 51, 250, 221, 34, 248, 188, 55, 88, 5, 237, 224, 221, - 90, 233, 155, 5, 237, 224, 221, 90, 233, 84, 5, 237, 224, 221, 90, 237, - 181, 228, 229, 227, 101, 237, 181, 228, 229, 217, 158, 165, 227, 191, - 250, 159, 254, 139, 156, 250, 128, 237, 175, 2, 248, 145, 220, 75, 2, - 233, 155, 55, 220, 75, 2, 230, 77, 237, 175, 2, 230, 77, 237, 175, 2, - 235, 7, 254, 126, 220, 75, 2, 235, 7, 230, 105, 220, 75, 71, 237, 174, - 237, 175, 71, 220, 74, 220, 75, 71, 252, 201, 71, 237, 174, 237, 175, 71, - 252, 201, 71, 220, 74, 220, 75, 252, 106, 25, 237, 56, 2, 220, 74, 237, - 175, 252, 106, 25, 237, 56, 2, 237, 174, 250, 197, 220, 75, 2, 225, 51, - 250, 197, 237, 175, 2, 225, 51, 51, 40, 237, 174, 51, 40, 220, 74, 250, - 197, 220, 75, 2, 225, 52, 25, 224, 41, 228, 229, 235, 7, 25, 2, 61, 50, - 235, 7, 156, 2, 61, 50, 51, 235, 7, 254, 126, 51, 235, 7, 230, 105, 124, - 237, 176, 235, 7, 254, 126, 124, 237, 176, 235, 7, 230, 105, 224, 48, - 235, 146, 230, 105, 224, 48, 235, 146, 254, 126, 235, 7, 156, 230, 75, - 235, 7, 254, 126, 235, 7, 25, 2, 233, 193, 223, 146, 235, 7, 156, 2, 233, - 193, 223, 146, 235, 7, 25, 2, 186, 249, 146, 235, 7, 156, 2, 186, 249, - 146, 235, 7, 25, 2, 51, 230, 77, 235, 7, 25, 2, 220, 81, 235, 7, 25, 2, - 51, 220, 81, 3, 219, 161, 2, 220, 81, 235, 7, 156, 2, 51, 230, 77, 235, - 7, 156, 2, 51, 220, 81, 217, 158, 165, 248, 154, 254, 99, 217, 158, 165, - 227, 234, 254, 99, 246, 154, 5, 2, 61, 56, 242, 59, 2, 61, 50, 221, 78, - 186, 252, 201, 2, 51, 69, 92, 221, 78, 186, 252, 201, 2, 221, 78, 69, 92, - 221, 180, 230, 113, 2, 61, 50, 221, 180, 230, 113, 2, 227, 88, 248, 143, - 224, 116, 233, 155, 224, 115, 250, 153, 2, 61, 50, 246, 154, 2, 253, 251, - 254, 151, 114, 199, 2, 250, 217, 255, 0, 254, 72, 114, 156, 114, 101, - 246, 154, 5, 71, 88, 55, 88, 5, 71, 246, 154, 55, 246, 154, 5, 71, 221, - 180, 230, 112, 51, 250, 176, 246, 155, 124, 250, 148, 246, 154, 224, 126, - 148, 250, 148, 246, 154, 224, 126, 246, 154, 5, 2, 124, 188, 71, 25, 124, - 188, 56, 246, 150, 2, 245, 116, 188, 50, 235, 87, 2, 250, 222, 237, 190, - 244, 30, 2, 250, 222, 237, 190, 235, 87, 2, 228, 82, 164, 50, 244, 30, 2, - 228, 82, 164, 50, 235, 87, 156, 224, 57, 114, 101, 244, 30, 156, 224, 57, - 114, 101, 235, 87, 156, 224, 57, 114, 199, 2, 61, 237, 190, 244, 30, 156, - 224, 57, 114, 199, 2, 61, 237, 190, 235, 87, 156, 224, 57, 114, 199, 2, - 61, 50, 244, 30, 156, 224, 57, 114, 199, 2, 61, 50, 235, 87, 156, 224, - 57, 114, 199, 2, 61, 71, 227, 109, 244, 30, 156, 224, 57, 114, 199, 2, - 61, 71, 235, 115, 235, 87, 156, 254, 73, 244, 30, 156, 254, 73, 235, 87, - 25, 224, 107, 212, 114, 101, 244, 30, 25, 224, 107, 212, 114, 101, 235, - 87, 25, 212, 254, 73, 244, 30, 25, 212, 254, 73, 235, 87, 71, 247, 136, - 114, 71, 244, 29, 244, 30, 71, 247, 136, 114, 71, 235, 86, 235, 87, 71, - 224, 116, 156, 246, 155, 244, 30, 71, 224, 116, 156, 246, 155, 235, 87, - 71, 224, 116, 71, 244, 29, 244, 30, 71, 224, 116, 71, 235, 86, 235, 87, - 71, 244, 30, 71, 247, 136, 246, 155, 244, 30, 71, 235, 87, 71, 247, 136, - 246, 155, 235, 87, 71, 224, 57, 114, 71, 244, 30, 71, 224, 57, 246, 155, - 244, 30, 71, 224, 57, 114, 71, 235, 87, 71, 224, 57, 246, 155, 224, 57, - 114, 199, 156, 235, 86, 224, 57, 114, 199, 156, 244, 29, 224, 57, 114, - 199, 156, 235, 87, 2, 61, 237, 190, 224, 57, 114, 199, 156, 244, 30, 2, - 61, 237, 190, 247, 136, 114, 199, 156, 235, 86, 247, 136, 114, 199, 156, - 244, 29, 247, 136, 224, 57, 114, 199, 156, 235, 86, 247, 136, 224, 57, - 114, 199, 156, 244, 29, 224, 116, 156, 235, 86, 224, 116, 156, 244, 29, - 224, 116, 71, 235, 87, 71, 246, 154, 55, 224, 116, 71, 244, 30, 71, 246, - 154, 55, 51, 232, 127, 235, 86, 51, 232, 127, 244, 29, 51, 232, 127, 235, - 87, 2, 220, 81, 244, 30, 230, 75, 235, 86, 244, 30, 252, 106, 235, 86, - 235, 87, 250, 197, 251, 213, 250, 74, 244, 30, 250, 197, 251, 213, 250, - 74, 235, 87, 250, 197, 251, 213, 250, 75, 71, 224, 57, 246, 155, 244, 30, - 250, 197, 251, 213, 250, 75, 71, 224, 57, 246, 155, 224, 42, 222, 27, - 235, 145, 222, 27, 224, 42, 222, 28, 156, 114, 101, 235, 145, 222, 28, - 156, 114, 101, 246, 154, 5, 2, 251, 236, 50, 228, 245, 71, 224, 107, 246, - 154, 55, 223, 85, 71, 224, 107, 246, 154, 55, 228, 245, 71, 224, 107, - 212, 114, 101, 223, 85, 71, 224, 107, 212, 114, 101, 228, 245, 71, 246, - 154, 55, 223, 85, 71, 246, 154, 55, 228, 245, 71, 212, 114, 101, 223, 85, - 71, 212, 114, 101, 228, 245, 71, 254, 151, 114, 101, 223, 85, 71, 254, - 151, 114, 101, 228, 245, 71, 212, 254, 151, 114, 101, 223, 85, 71, 212, - 254, 151, 114, 101, 51, 228, 244, 51, 223, 84, 223, 93, 2, 248, 145, 223, - 58, 2, 248, 145, 223, 93, 2, 88, 5, 56, 223, 58, 2, 88, 5, 56, 223, 93, - 2, 233, 84, 5, 56, 223, 58, 2, 233, 84, 5, 56, 223, 93, 117, 156, 114, - 199, 2, 61, 50, 223, 58, 117, 156, 114, 199, 2, 61, 50, 223, 93, 117, 71, - 246, 154, 55, 223, 58, 117, 71, 246, 154, 55, 223, 93, 117, 71, 221, 180, - 230, 112, 223, 58, 117, 71, 221, 180, 230, 112, 223, 93, 117, 71, 254, - 151, 114, 101, 223, 58, 117, 71, 254, 151, 114, 101, 223, 93, 117, 71, - 212, 114, 101, 223, 58, 117, 71, 212, 114, 101, 40, 42, 230, 119, 86, - 230, 112, 40, 45, 230, 119, 86, 230, 112, 250, 197, 223, 92, 250, 197, - 223, 57, 250, 197, 223, 93, 156, 114, 101, 250, 197, 223, 58, 156, 114, - 101, 223, 93, 71, 223, 57, 223, 58, 71, 223, 92, 223, 93, 71, 223, 92, - 223, 58, 71, 223, 57, 223, 58, 252, 106, 223, 92, 223, 58, 252, 106, 25, - 237, 56, 251, 213, 249, 147, 2, 223, 92, 246, 213, 117, 230, 114, 247, - 129, 229, 63, 2, 222, 81, 221, 119, 221, 102, 237, 174, 245, 125, 231, - 196, 224, 192, 42, 222, 143, 224, 192, 113, 222, 143, 224, 192, 108, 222, - 143, 229, 161, 2, 198, 69, 252, 201, 221, 78, 45, 220, 236, 51, 69, 252, - 201, 42, 220, 236, 69, 252, 201, 51, 42, 220, 236, 51, 69, 252, 201, 51, - 42, 220, 236, 171, 249, 147, 245, 97, 42, 233, 255, 117, 51, 219, 152, - 224, 192, 113, 222, 144, 2, 230, 77, 224, 192, 108, 222, 144, 2, 220, 81, - 224, 192, 108, 222, 144, 71, 224, 192, 113, 222, 143, 51, 113, 222, 143, - 51, 108, 222, 143, 51, 214, 212, 55, 210, 51, 214, 212, 55, 248, 160, - 212, 248, 194, 2, 210, 232, 137, 224, 55, 69, 235, 44, 2, 250, 222, 50, - 69, 235, 44, 2, 250, 222, 56, 113, 222, 144, 2, 250, 222, 56, 229, 234, - 2, 186, 92, 229, 234, 2, 221, 180, 230, 112, 221, 78, 69, 252, 201, 252, - 73, 227, 192, 221, 78, 69, 252, 201, 2, 186, 92, 221, 78, 250, 176, 230, - 112, 221, 78, 232, 127, 235, 86, 221, 78, 232, 127, 244, 29, 247, 136, - 224, 57, 235, 87, 156, 114, 101, 247, 136, 224, 57, 244, 30, 156, 114, - 101, 221, 78, 224, 18, 252, 73, 227, 192, 235, 146, 221, 78, 69, 252, - 201, 230, 112, 51, 224, 18, 230, 112, 67, 69, 135, 233, 33, 67, 69, 135, - 231, 187, 247, 5, 67, 65, 231, 187, 218, 217, 67, 65, 224, 6, 247, 5, 67, - 65, 224, 6, 218, 217, 67, 65, 42, 45, 67, 65, 127, 84, 65, 220, 53, 84, - 65, 247, 130, 84, 65, 231, 187, 247, 5, 84, 65, 231, 187, 218, 217, 84, - 65, 224, 6, 247, 5, 84, 65, 224, 6, 218, 217, 84, 65, 42, 45, 84, 65, - 108, 113, 84, 65, 90, 76, 2, 221, 170, 247, 129, 90, 76, 2, 221, 170, - 220, 52, 127, 76, 2, 221, 170, 247, 129, 127, 76, 2, 221, 170, 220, 52, - 40, 2, 221, 120, 144, 252, 53, 40, 2, 252, 29, 144, 252, 53, 40, 2, 220, - 60, 45, 249, 11, 144, 252, 53, 40, 2, 234, 237, 42, 249, 11, 144, 252, - 53, 249, 5, 2, 42, 144, 252, 53, 249, 5, 2, 45, 144, 252, 53, 249, 5, 2, - 221, 120, 144, 252, 53, 249, 5, 2, 252, 29, 144, 252, 53, 247, 143, 223, - 227, 84, 235, 146, 223, 227, 67, 235, 146, 223, 227, 84, 219, 100, 3, - 223, 227, 67, 219, 100, 3, 223, 227, 84, 229, 175, 67, 229, 175, 67, 243, - 124, 84, 243, 124, 186, 84, 243, 124, 84, 235, 146, 250, 221, 84, 234, - 18, 249, 4, 67, 234, 18, 249, 4, 84, 234, 18, 234, 234, 67, 234, 18, 234, - 234, 84, 3, 249, 4, 84, 3, 234, 234, 67, 3, 234, 234, 84, 186, 246, 209, - 67, 186, 246, 209, 84, 69, 246, 209, 67, 69, 246, 209, 42, 76, 2, 3, 250, - 221, 148, 127, 254, 19, 42, 76, 2, 34, 229, 43, 171, 127, 223, 223, 65, - 127, 220, 206, 76, 2, 69, 92, 127, 220, 206, 76, 2, 51, 69, 92, 127, 220, - 206, 76, 245, 97, 135, 127, 220, 206, 221, 78, 249, 147, 65, 127, 76, 2, - 247, 143, 223, 146, 127, 76, 2, 222, 136, 2, 69, 92, 127, 76, 2, 222, - 136, 2, 51, 69, 92, 127, 220, 206, 76, 2, 222, 135, 127, 220, 206, 76, 2, - 222, 136, 2, 69, 92, 127, 220, 206, 76, 2, 222, 136, 2, 51, 69, 92, 127, - 76, 221, 225, 218, 151, 218, 237, 76, 229, 28, 248, 208, 235, 115, 246, - 154, 5, 71, 127, 65, 227, 160, 221, 180, 230, 113, 71, 127, 65, 127, 76, - 71, 227, 160, 254, 151, 114, 101, 90, 76, 221, 225, 244, 29, 90, 76, 221, - 225, 223, 57, 127, 228, 92, 65, 90, 228, 92, 65, 227, 160, 221, 180, 230, - 113, 71, 90, 65, 90, 76, 71, 227, 160, 254, 151, 114, 101, 221, 180, 230, - 113, 71, 127, 65, 127, 76, 71, 254, 151, 114, 101, 127, 76, 71, 227, 160, - 221, 180, 230, 112, 90, 76, 71, 227, 160, 221, 180, 230, 112, 67, 234, - 18, 223, 156, 84, 3, 223, 156, 67, 3, 223, 156, 84, 227, 106, 229, 175, - 67, 227, 106, 229, 175, 106, 235, 146, 250, 221, 106, 230, 78, 2, 230, - 78, 237, 190, 106, 250, 222, 2, 250, 222, 237, 190, 106, 250, 221, 106, - 34, 226, 149, 125, 6, 1, 253, 205, 125, 6, 1, 251, 244, 125, 6, 1, 219, - 163, 125, 6, 1, 244, 76, 125, 6, 1, 248, 162, 125, 6, 1, 218, 1, 125, 6, - 1, 217, 66, 125, 6, 1, 247, 71, 125, 6, 1, 217, 89, 125, 6, 1, 237, 130, - 125, 6, 1, 66, 237, 130, 125, 6, 1, 72, 125, 6, 1, 248, 180, 125, 6, 1, - 236, 238, 125, 6, 1, 235, 19, 125, 6, 1, 233, 37, 125, 6, 1, 232, 208, - 125, 6, 1, 230, 129, 125, 6, 1, 229, 26, 125, 6, 1, 227, 87, 125, 6, 1, - 224, 47, 125, 6, 1, 220, 226, 125, 6, 1, 220, 98, 125, 6, 1, 245, 99, - 125, 6, 1, 243, 130, 125, 6, 1, 230, 87, 125, 6, 1, 229, 198, 125, 6, 1, - 224, 173, 125, 6, 1, 221, 39, 125, 6, 1, 251, 3, 125, 6, 1, 225, 25, 125, - 6, 1, 218, 7, 125, 6, 1, 218, 9, 125, 6, 1, 218, 34, 125, 6, 1, 223, 243, - 155, 125, 6, 1, 217, 200, 125, 6, 1, 3, 217, 178, 125, 6, 1, 3, 217, 179, - 2, 222, 135, 125, 6, 1, 217, 231, 125, 6, 1, 237, 161, 3, 217, 178, 125, - 6, 1, 252, 76, 217, 178, 125, 6, 1, 237, 161, 252, 76, 217, 178, 125, 6, - 1, 245, 171, 125, 6, 1, 237, 128, 125, 6, 1, 224, 172, 125, 6, 1, 221, - 70, 60, 125, 6, 1, 235, 137, 233, 37, 125, 3, 1, 253, 205, 125, 3, 1, - 251, 244, 125, 3, 1, 219, 163, 125, 3, 1, 244, 76, 125, 3, 1, 248, 162, - 125, 3, 1, 218, 1, 125, 3, 1, 217, 66, 125, 3, 1, 247, 71, 125, 3, 1, - 217, 89, 125, 3, 1, 237, 130, 125, 3, 1, 66, 237, 130, 125, 3, 1, 72, - 125, 3, 1, 248, 180, 125, 3, 1, 236, 238, 125, 3, 1, 235, 19, 125, 3, 1, - 233, 37, 125, 3, 1, 232, 208, 125, 3, 1, 230, 129, 125, 3, 1, 229, 26, - 125, 3, 1, 227, 87, 125, 3, 1, 224, 47, 125, 3, 1, 220, 226, 125, 3, 1, - 220, 98, 125, 3, 1, 245, 99, 125, 3, 1, 243, 130, 125, 3, 1, 230, 87, - 125, 3, 1, 229, 198, 125, 3, 1, 224, 173, 125, 3, 1, 221, 39, 125, 3, 1, - 251, 3, 125, 3, 1, 225, 25, 125, 3, 1, 218, 7, 125, 3, 1, 218, 9, 125, 3, - 1, 218, 34, 125, 3, 1, 223, 243, 155, 125, 3, 1, 217, 200, 125, 3, 1, 3, - 217, 178, 125, 3, 1, 3, 217, 179, 2, 222, 135, 125, 3, 1, 217, 231, 125, - 3, 1, 237, 161, 3, 217, 178, 125, 3, 1, 252, 76, 217, 178, 125, 3, 1, - 237, 161, 252, 76, 217, 178, 125, 3, 1, 245, 171, 125, 3, 1, 237, 128, - 125, 3, 1, 224, 172, 125, 3, 1, 221, 70, 60, 125, 3, 1, 235, 137, 233, - 37, 7, 6, 1, 235, 202, 2, 51, 135, 7, 3, 1, 235, 202, 2, 51, 135, 7, 6, - 1, 235, 202, 2, 233, 193, 221, 179, 7, 6, 1, 230, 60, 2, 92, 7, 6, 1, - 228, 39, 2, 222, 135, 7, 3, 1, 112, 2, 92, 7, 3, 1, 222, 202, 2, 249, 11, - 92, 7, 6, 1, 243, 226, 2, 249, 48, 7, 3, 1, 243, 226, 2, 249, 48, 7, 6, - 1, 237, 18, 2, 249, 48, 7, 3, 1, 237, 18, 2, 249, 48, 7, 6, 1, 217, 158, - 2, 249, 48, 7, 3, 1, 217, 158, 2, 249, 48, 7, 6, 1, 254, 146, 7, 6, 1, - 234, 187, 2, 96, 7, 6, 1, 215, 60, 7, 6, 1, 215, 254, 146, 7, 3, 1, 220, - 11, 2, 45, 96, 7, 6, 1, 219, 41, 2, 96, 7, 3, 1, 219, 41, 2, 96, 7, 3, 1, - 220, 11, 2, 250, 80, 7, 6, 1, 144, 243, 225, 7, 3, 1, 144, 243, 225, 7, - 3, 1, 222, 133, 229, 129, 7, 3, 1, 178, 2, 231, 183, 7, 3, 1, 215, 228, - 39, 2, 222, 135, 7, 3, 1, 142, 2, 109, 227, 94, 237, 190, 7, 1, 3, 6, - 215, 73, 7, 223, 94, 3, 1, 237, 126, 58, 1, 6, 216, 216, 7, 6, 1, 226, - 235, 2, 223, 33, 222, 135, 7, 6, 1, 217, 158, 2, 223, 33, 222, 135, 75, - 6, 1, 254, 163, 75, 3, 1, 254, 163, 75, 6, 1, 219, 92, 75, 3, 1, 219, 92, - 75, 6, 1, 244, 231, 75, 3, 1, 244, 231, 75, 6, 1, 249, 179, 75, 3, 1, - 249, 179, 75, 6, 1, 246, 236, 75, 3, 1, 246, 236, 75, 6, 1, 224, 11, 75, - 3, 1, 224, 11, 75, 6, 1, 217, 99, 75, 3, 1, 217, 99, 75, 6, 1, 243, 171, - 75, 3, 1, 243, 171, 75, 6, 1, 222, 4, 75, 3, 1, 222, 4, 75, 6, 1, 242, - 70, 75, 3, 1, 242, 70, 75, 6, 1, 236, 226, 75, 3, 1, 236, 226, 75, 6, 1, - 235, 135, 75, 3, 1, 235, 135, 75, 6, 1, 233, 196, 75, 3, 1, 233, 196, 75, - 6, 1, 232, 62, 75, 3, 1, 232, 62, 75, 6, 1, 236, 11, 75, 3, 1, 236, 11, - 75, 6, 1, 74, 75, 3, 1, 74, 75, 6, 1, 229, 108, 75, 3, 1, 229, 108, 75, - 6, 1, 227, 75, 75, 3, 1, 227, 75, 75, 6, 1, 224, 118, 75, 3, 1, 224, 118, - 75, 6, 1, 222, 105, 75, 3, 1, 222, 105, 75, 6, 1, 220, 123, 75, 3, 1, - 220, 123, 75, 6, 1, 245, 203, 75, 3, 1, 245, 203, 75, 6, 1, 236, 130, 75, - 3, 1, 236, 130, 75, 6, 1, 228, 212, 75, 3, 1, 228, 212, 75, 6, 1, 230, - 123, 75, 3, 1, 230, 123, 75, 6, 1, 249, 9, 254, 168, 75, 3, 1, 249, 9, - 254, 168, 75, 6, 1, 48, 75, 254, 191, 75, 3, 1, 48, 75, 254, 191, 75, 6, - 1, 250, 93, 246, 236, 75, 3, 1, 250, 93, 246, 236, 75, 6, 1, 249, 9, 236, - 226, 75, 3, 1, 249, 9, 236, 226, 75, 6, 1, 249, 9, 232, 62, 75, 3, 1, - 249, 9, 232, 62, 75, 6, 1, 250, 93, 232, 62, 75, 3, 1, 250, 93, 232, 62, - 75, 6, 1, 48, 75, 230, 123, 75, 3, 1, 48, 75, 230, 123, 75, 6, 1, 226, - 142, 75, 3, 1, 226, 142, 75, 6, 1, 250, 98, 224, 238, 75, 3, 1, 250, 98, - 224, 238, 75, 6, 1, 48, 75, 224, 238, 75, 3, 1, 48, 75, 224, 238, 75, 6, - 1, 48, 75, 246, 133, 75, 3, 1, 48, 75, 246, 133, 75, 6, 1, 254, 178, 236, - 135, 75, 3, 1, 254, 178, 236, 135, 75, 6, 1, 249, 9, 242, 242, 75, 3, 1, - 249, 9, 242, 242, 75, 6, 1, 48, 75, 242, 242, 75, 3, 1, 48, 75, 242, 242, - 75, 6, 1, 48, 75, 155, 75, 3, 1, 48, 75, 155, 75, 6, 1, 235, 201, 155, - 75, 3, 1, 235, 201, 155, 75, 6, 1, 48, 75, 243, 145, 75, 3, 1, 48, 75, - 243, 145, 75, 6, 1, 48, 75, 243, 173, 75, 3, 1, 48, 75, 243, 173, 75, 6, - 1, 48, 75, 244, 226, 75, 3, 1, 48, 75, 244, 226, 75, 6, 1, 48, 75, 248, - 183, 75, 3, 1, 48, 75, 248, 183, 75, 6, 1, 48, 75, 224, 211, 75, 3, 1, - 48, 75, 224, 211, 75, 6, 1, 48, 231, 115, 224, 211, 75, 3, 1, 48, 231, - 115, 224, 211, 75, 6, 1, 48, 231, 115, 232, 92, 75, 3, 1, 48, 231, 115, - 232, 92, 75, 6, 1, 48, 231, 115, 231, 67, 75, 3, 1, 48, 231, 115, 231, - 67, 75, 6, 1, 48, 231, 115, 218, 238, 75, 3, 1, 48, 231, 115, 218, 238, - 75, 16, 236, 243, 75, 16, 233, 197, 227, 75, 75, 16, 229, 109, 227, 75, - 75, 16, 223, 152, 75, 16, 222, 106, 227, 75, 75, 16, 236, 131, 227, 75, - 75, 16, 224, 212, 224, 118, 75, 6, 1, 250, 93, 224, 238, 75, 3, 1, 250, - 93, 224, 238, 75, 6, 1, 250, 93, 244, 226, 75, 3, 1, 250, 93, 244, 226, - 75, 36, 232, 63, 50, 75, 36, 223, 238, 254, 2, 75, 36, 223, 238, 235, 92, - 75, 48, 231, 115, 245, 90, 223, 136, 75, 48, 231, 115, 248, 210, 228, 82, - 78, 75, 48, 231, 115, 237, 210, 228, 82, 78, 75, 48, 231, 115, 219, 154, - 248, 191, 75, 245, 108, 131, 243, 194, 75, 245, 90, 223, 136, 75, 233, - 113, 248, 191, 95, 3, 1, 254, 131, 95, 3, 1, 252, 209, 95, 3, 1, 244, - 230, 95, 3, 1, 248, 153, 95, 3, 1, 246, 197, 95, 3, 1, 219, 85, 95, 3, 1, - 217, 87, 95, 3, 1, 222, 119, 95, 3, 1, 237, 223, 95, 3, 1, 236, 233, 95, - 3, 1, 235, 143, 95, 3, 1, 234, 86, 95, 3, 1, 232, 211, 95, 3, 1, 230, - 138, 95, 3, 1, 229, 243, 95, 3, 1, 217, 76, 95, 3, 1, 227, 249, 95, 3, 1, - 226, 140, 95, 3, 1, 222, 112, 95, 3, 1, 220, 87, 95, 3, 1, 229, 134, 95, - 3, 1, 236, 138, 95, 3, 1, 244, 119, 95, 3, 1, 228, 140, 95, 3, 1, 224, - 209, 95, 3, 1, 251, 22, 95, 3, 1, 251, 154, 95, 3, 1, 237, 91, 95, 3, 1, - 250, 224, 95, 3, 1, 251, 56, 95, 3, 1, 218, 136, 95, 3, 1, 237, 101, 95, - 3, 1, 243, 208, 95, 3, 1, 243, 162, 95, 3, 1, 243, 108, 95, 3, 1, 218, - 227, 95, 3, 1, 243, 182, 95, 3, 1, 243, 2, 221, 197, 1, 184, 221, 197, 1, - 218, 72, 221, 197, 1, 218, 71, 221, 197, 1, 218, 63, 221, 197, 1, 218, - 61, 221, 197, 1, 252, 108, 255, 2, 218, 57, 221, 197, 1, 218, 57, 221, - 197, 1, 218, 69, 221, 197, 1, 218, 66, 221, 197, 1, 218, 68, 221, 197, 1, - 218, 67, 221, 197, 1, 217, 254, 221, 197, 1, 218, 64, 221, 197, 1, 218, - 55, 221, 197, 1, 220, 255, 218, 55, 221, 197, 1, 218, 52, 221, 197, 1, - 218, 59, 221, 197, 1, 252, 108, 255, 2, 218, 59, 221, 197, 1, 220, 255, - 218, 59, 221, 197, 1, 218, 58, 221, 197, 1, 218, 76, 221, 197, 1, 218, - 53, 221, 197, 1, 220, 255, 218, 53, 221, 197, 1, 218, 43, 221, 197, 1, - 220, 255, 218, 43, 221, 197, 1, 217, 250, 221, 197, 1, 218, 27, 221, 197, - 1, 254, 200, 218, 27, 221, 197, 1, 220, 255, 218, 27, 221, 197, 1, 218, - 51, 221, 197, 1, 218, 50, 221, 197, 1, 218, 47, 221, 197, 1, 220, 255, - 218, 60, 221, 197, 1, 220, 255, 218, 45, 221, 197, 1, 218, 44, 221, 197, - 1, 217, 200, 221, 197, 1, 218, 41, 221, 197, 1, 218, 40, 221, 197, 1, - 218, 62, 221, 197, 1, 220, 255, 218, 62, 221, 197, 1, 253, 208, 218, 62, - 221, 197, 1, 218, 39, 221, 197, 1, 218, 37, 221, 197, 1, 218, 38, 221, - 197, 1, 218, 36, 221, 197, 1, 218, 35, 221, 197, 1, 218, 70, 221, 197, 1, - 218, 33, 221, 197, 1, 218, 32, 221, 197, 1, 218, 31, 221, 197, 1, 218, - 30, 221, 197, 1, 218, 28, 221, 197, 1, 222, 98, 218, 28, 221, 197, 1, - 218, 26, 221, 197, 58, 1, 235, 182, 78, 28, 4, 235, 11, 28, 4, 233, 135, - 28, 4, 227, 73, 28, 4, 224, 25, 28, 4, 224, 199, 28, 4, 252, 40, 28, 4, - 221, 139, 28, 4, 250, 181, 28, 4, 231, 202, 28, 4, 231, 55, 28, 4, 244, - 73, 230, 185, 28, 4, 217, 20, 28, 4, 248, 165, 28, 4, 249, 106, 28, 4, - 237, 58, 28, 4, 221, 238, 28, 4, 251, 10, 28, 4, 229, 117, 28, 4, 229, - 36, 28, 4, 244, 130, 28, 4, 244, 126, 28, 4, 244, 127, 28, 4, 244, 128, - 28, 4, 223, 218, 28, 4, 223, 178, 28, 4, 223, 189, 28, 4, 223, 217, 28, - 4, 223, 193, 28, 4, 223, 194, 28, 4, 223, 182, 28, 4, 251, 114, 28, 4, - 251, 101, 28, 4, 251, 103, 28, 4, 251, 113, 28, 4, 251, 111, 28, 4, 251, - 112, 28, 4, 251, 102, 28, 4, 216, 247, 28, 4, 216, 227, 28, 4, 216, 238, - 28, 4, 216, 246, 28, 4, 216, 241, 28, 4, 216, 242, 28, 4, 216, 230, 28, - 4, 251, 110, 28, 4, 251, 104, 28, 4, 251, 106, 28, 4, 251, 109, 28, 4, - 251, 107, 28, 4, 251, 108, 28, 4, 251, 105, 28, 4, 228, 51, 28, 4, 228, - 41, 28, 4, 228, 47, 28, 4, 228, 50, 28, 4, 228, 48, 28, 4, 228, 49, 28, - 4, 228, 46, 28, 4, 235, 212, 28, 4, 235, 204, 28, 4, 235, 207, 28, 4, - 235, 211, 28, 4, 235, 208, 28, 4, 235, 209, 28, 4, 235, 205, 28, 4, 218, - 103, 28, 4, 218, 93, 28, 4, 218, 99, 28, 4, 218, 102, 28, 4, 218, 100, - 28, 4, 218, 101, 28, 4, 218, 98, 28, 4, 243, 236, 28, 4, 243, 227, 28, 4, - 243, 230, 28, 4, 243, 235, 28, 4, 243, 232, 28, 4, 243, 233, 28, 4, 243, - 229, 36, 31, 1, 252, 144, 36, 31, 1, 219, 165, 36, 31, 1, 244, 116, 36, - 31, 1, 249, 92, 36, 31, 1, 217, 72, 36, 31, 1, 217, 92, 36, 31, 1, 175, - 36, 31, 1, 246, 217, 36, 31, 1, 246, 205, 36, 31, 1, 246, 197, 36, 31, 1, - 74, 36, 31, 1, 229, 198, 36, 31, 1, 246, 148, 36, 31, 1, 246, 138, 36, - 31, 1, 222, 87, 36, 31, 1, 155, 36, 31, 1, 221, 50, 36, 31, 1, 251, 46, - 36, 31, 1, 225, 25, 36, 31, 1, 224, 248, 36, 31, 1, 245, 171, 36, 31, 1, - 246, 137, 36, 31, 1, 60, 36, 31, 1, 238, 26, 36, 31, 1, 248, 181, 36, 31, - 1, 233, 123, 220, 102, 36, 31, 1, 218, 36, 36, 31, 1, 217, 200, 36, 31, - 1, 237, 160, 60, 36, 31, 1, 235, 25, 217, 178, 36, 31, 1, 252, 76, 217, - 178, 36, 31, 1, 237, 160, 252, 76, 217, 178, 45, 254, 120, 223, 89, 234, - 63, 45, 254, 120, 247, 143, 223, 89, 234, 63, 42, 223, 89, 115, 45, 223, - 89, 115, 42, 247, 143, 223, 89, 115, 45, 247, 143, 223, 89, 115, 227, - 241, 237, 178, 234, 63, 227, 241, 247, 143, 237, 178, 234, 63, 247, 143, - 221, 103, 234, 63, 42, 221, 103, 115, 45, 221, 103, 115, 227, 241, 223, - 227, 42, 227, 241, 230, 140, 115, 45, 227, 241, 230, 140, 115, 246, 251, - 250, 121, 229, 239, 245, 126, 229, 239, 210, 245, 126, 229, 239, 242, - 118, 247, 143, 230, 180, 247, 130, 254, 127, 220, 53, 254, 127, 247, 143, - 227, 106, 254, 119, 51, 230, 177, 242, 121, 237, 170, 237, 177, 230, 23, - 252, 14, 242, 122, 2, 249, 13, 221, 180, 2, 227, 94, 50, 42, 109, 229, - 231, 115, 45, 109, 229, 231, 115, 221, 180, 2, 61, 50, 221, 180, 2, 61, - 56, 42, 69, 252, 201, 2, 228, 77, 45, 69, 252, 201, 2, 228, 77, 221, 120, - 42, 144, 115, 221, 120, 45, 144, 115, 252, 29, 42, 144, 115, 252, 29, 45, - 144, 115, 42, 224, 136, 105, 115, 45, 224, 136, 105, 115, 42, 51, 229, - 229, 45, 51, 229, 229, 124, 188, 104, 131, 61, 228, 196, 131, 61, 104, - 124, 188, 228, 196, 204, 245, 116, 61, 228, 196, 245, 170, 61, 78, 210, - 228, 82, 78, 69, 221, 179, 227, 94, 229, 31, 218, 174, 225, 55, 233, 193, - 248, 145, 9, 32, 227, 181, 9, 32, 250, 203, 9, 32, 226, 90, 107, 9, 32, - 226, 90, 103, 9, 32, 226, 90, 160, 9, 32, 229, 157, 9, 32, 252, 21, 9, - 32, 222, 146, 9, 32, 236, 61, 107, 9, 32, 236, 61, 103, 9, 32, 248, 189, - 9, 32, 226, 92, 9, 32, 3, 107, 9, 32, 3, 103, 9, 32, 235, 155, 107, 9, - 32, 235, 155, 103, 9, 32, 235, 155, 160, 9, 32, 235, 155, 154, 9, 32, - 224, 35, 9, 32, 221, 229, 9, 32, 224, 33, 107, 9, 32, 224, 33, 103, 9, - 32, 243, 154, 107, 9, 32, 243, 154, 103, 9, 32, 243, 189, 9, 32, 227, - 233, 9, 32, 251, 8, 9, 32, 223, 68, 9, 32, 233, 117, 9, 32, 249, 90, 9, - 32, 233, 110, 9, 32, 250, 213, 9, 32, 218, 241, 107, 9, 32, 218, 241, - 103, 9, 32, 245, 179, 9, 32, 229, 208, 107, 9, 32, 229, 208, 103, 9, 32, - 224, 114, 144, 221, 99, 221, 60, 9, 32, 250, 110, 9, 32, 248, 159, 9, 32, - 237, 121, 9, 32, 252, 36, 117, 250, 192, 9, 32, 246, 81, 9, 32, 223, 240, - 107, 9, 32, 223, 240, 103, 9, 32, 252, 211, 9, 32, 224, 119, 9, 32, 251, - 199, 224, 119, 9, 32, 232, 126, 107, 9, 32, 232, 126, 103, 9, 32, 232, - 126, 160, 9, 32, 232, 126, 154, 9, 32, 233, 243, 9, 32, 224, 240, 9, 32, - 227, 239, 9, 32, 246, 100, 9, 32, 230, 150, 9, 32, 251, 255, 107, 9, 32, - 251, 255, 103, 9, 32, 234, 21, 9, 32, 233, 112, 9, 32, 244, 40, 107, 9, - 32, 244, 40, 103, 9, 32, 244, 40, 160, 9, 32, 221, 196, 9, 32, 250, 191, - 9, 32, 218, 217, 107, 9, 32, 218, 217, 103, 9, 32, 251, 199, 226, 84, 9, - 32, 224, 114, 242, 189, 9, 32, 242, 189, 9, 32, 251, 199, 223, 247, 9, - 32, 251, 199, 224, 235, 9, 32, 245, 133, 9, 32, 251, 199, 251, 127, 9, - 32, 224, 114, 218, 255, 9, 32, 219, 0, 107, 9, 32, 219, 0, 103, 9, 32, - 250, 214, 9, 32, 251, 199, 244, 62, 9, 32, 171, 107, 9, 32, 171, 103, 9, - 32, 251, 199, 235, 2, 9, 32, 251, 199, 244, 213, 9, 32, 233, 109, 107, 9, - 32, 233, 109, 103, 9, 32, 227, 242, 9, 32, 252, 43, 9, 32, 251, 199, 222, - 117, 235, 119, 9, 32, 251, 199, 235, 120, 9, 32, 251, 199, 218, 194, 9, - 32, 251, 199, 245, 142, 9, 32, 247, 3, 107, 9, 32, 247, 3, 103, 9, 32, - 247, 3, 160, 9, 32, 251, 199, 247, 2, 9, 32, 243, 159, 9, 32, 251, 199, - 242, 188, 9, 32, 252, 35, 9, 32, 244, 111, 9, 32, 251, 199, 245, 176, 9, - 32, 251, 199, 252, 67, 9, 32, 251, 199, 226, 151, 9, 32, 224, 114, 218, - 212, 9, 32, 224, 114, 218, 20, 9, 32, 251, 199, 245, 98, 9, 32, 237, 125, - 246, 103, 9, 32, 251, 199, 246, 103, 9, 32, 237, 125, 221, 121, 9, 32, - 251, 199, 221, 121, 9, 32, 237, 125, 247, 123, 9, 32, 251, 199, 247, 123, - 9, 32, 220, 234, 9, 32, 237, 125, 220, 234, 9, 32, 251, 199, 220, 234, - 53, 32, 107, 53, 32, 235, 43, 53, 32, 248, 145, 53, 32, 224, 55, 53, 32, - 226, 89, 53, 32, 96, 53, 32, 103, 53, 32, 235, 64, 53, 32, 234, 86, 53, - 32, 235, 103, 53, 32, 246, 178, 53, 32, 185, 53, 32, 113, 252, 21, 53, - 32, 250, 111, 53, 32, 242, 65, 53, 32, 222, 146, 53, 32, 230, 119, 252, - 21, 53, 32, 236, 60, 53, 32, 229, 10, 53, 32, 218, 169, 53, 32, 223, 235, - 53, 32, 45, 230, 119, 252, 21, 53, 32, 243, 109, 246, 192, 53, 32, 222, - 65, 53, 32, 248, 189, 53, 32, 226, 92, 53, 32, 250, 203, 53, 32, 228, - 231, 53, 32, 254, 208, 53, 32, 233, 105, 53, 32, 246, 192, 53, 32, 247, - 8, 53, 32, 226, 108, 53, 32, 244, 68, 53, 32, 244, 69, 224, 45, 53, 32, - 246, 102, 53, 32, 252, 75, 53, 32, 218, 183, 53, 32, 251, 24, 53, 32, - 227, 66, 53, 32, 237, 220, 53, 32, 224, 43, 53, 32, 235, 154, 53, 32, - 250, 119, 53, 32, 223, 230, 53, 32, 233, 107, 53, 32, 227, 84, 53, 32, - 218, 171, 53, 32, 230, 134, 53, 32, 220, 239, 53, 32, 247, 113, 53, 32, - 224, 192, 221, 229, 53, 32, 247, 143, 250, 203, 53, 32, 171, 223, 122, - 53, 32, 124, 243, 187, 53, 32, 224, 194, 53, 32, 252, 24, 53, 32, 224, - 32, 53, 32, 252, 3, 53, 32, 223, 145, 53, 32, 243, 153, 53, 32, 243, 195, - 53, 32, 248, 148, 53, 32, 243, 189, 53, 32, 252, 14, 53, 32, 227, 233, - 53, 32, 226, 99, 53, 32, 248, 212, 53, 32, 253, 213, 53, 32, 223, 227, - 53, 32, 231, 184, 53, 32, 223, 68, 53, 32, 226, 118, 53, 32, 233, 117, - 53, 32, 221, 98, 53, 32, 235, 178, 53, 32, 223, 136, 53, 32, 249, 90, 53, - 32, 218, 226, 53, 32, 248, 168, 231, 184, 53, 32, 250, 165, 53, 32, 245, - 84, 53, 32, 250, 211, 53, 32, 223, 148, 53, 32, 218, 240, 53, 32, 245, - 179, 53, 32, 250, 210, 53, 32, 245, 235, 53, 32, 51, 218, 151, 53, 32, - 144, 221, 99, 221, 60, 53, 32, 224, 52, 53, 32, 245, 243, 53, 32, 250, - 110, 53, 32, 248, 159, 53, 32, 228, 228, 53, 32, 237, 121, 53, 32, 234, - 3, 53, 32, 221, 178, 53, 32, 223, 31, 53, 32, 235, 59, 53, 32, 220, 33, - 53, 32, 245, 202, 53, 32, 252, 36, 117, 250, 192, 53, 32, 224, 137, 53, - 32, 247, 143, 222, 62, 53, 32, 218, 207, 53, 32, 224, 62, 53, 32, 248, - 202, 53, 32, 246, 81, 53, 32, 223, 249, 53, 32, 65, 53, 32, 223, 138, 53, - 32, 223, 239, 53, 32, 221, 108, 53, 32, 244, 45, 53, 32, 251, 119, 53, - 32, 223, 160, 53, 32, 252, 211, 53, 32, 227, 145, 53, 32, 224, 119, 53, - 32, 237, 117, 53, 32, 232, 125, 53, 32, 224, 240, 53, 32, 245, 228, 53, - 32, 230, 150, 53, 32, 254, 126, 53, 32, 229, 47, 53, 32, 247, 11, 53, 32, - 251, 254, 53, 32, 234, 21, 53, 32, 233, 156, 53, 32, 225, 73, 53, 32, - 254, 23, 53, 32, 233, 112, 53, 32, 221, 124, 53, 32, 230, 111, 53, 32, - 252, 38, 53, 32, 223, 134, 53, 32, 250, 174, 53, 32, 244, 39, 53, 32, - 221, 196, 53, 32, 237, 192, 53, 32, 252, 44, 53, 32, 219, 0, 246, 192, - 53, 32, 250, 191, 53, 32, 218, 216, 53, 32, 226, 84, 53, 32, 242, 189, - 53, 32, 223, 247, 53, 32, 219, 186, 53, 32, 252, 141, 53, 32, 229, 78, - 53, 32, 252, 227, 53, 32, 224, 235, 53, 32, 227, 202, 53, 32, 227, 10, - 53, 32, 245, 133, 53, 32, 252, 37, 53, 32, 251, 127, 53, 32, 252, 58, 53, - 32, 233, 114, 53, 32, 218, 255, 53, 32, 250, 214, 53, 32, 218, 192, 53, - 32, 248, 199, 53, 32, 219, 86, 53, 32, 244, 62, 53, 32, 235, 2, 53, 32, - 244, 213, 53, 32, 233, 108, 53, 32, 224, 54, 53, 32, 224, 192, 222, 134, - 252, 67, 53, 32, 227, 242, 53, 32, 252, 43, 53, 32, 218, 166, 53, 32, - 246, 3, 53, 32, 235, 119, 53, 32, 222, 117, 235, 119, 53, 32, 235, 116, - 53, 32, 224, 8, 53, 32, 235, 120, 53, 32, 218, 194, 53, 32, 245, 142, 53, - 32, 247, 2, 53, 32, 243, 159, 53, 32, 245, 106, 53, 32, 242, 188, 53, 32, - 252, 35, 53, 32, 222, 122, 53, 32, 243, 200, 53, 32, 245, 195, 53, 32, - 226, 172, 218, 192, 53, 32, 251, 121, 53, 32, 244, 111, 53, 32, 245, 176, - 53, 32, 252, 67, 53, 32, 226, 151, 53, 32, 249, 80, 53, 32, 218, 212, 53, - 32, 243, 139, 53, 32, 218, 20, 53, 32, 233, 163, 53, 32, 252, 53, 53, 32, - 246, 202, 53, 32, 245, 98, 53, 32, 221, 76, 53, 32, 247, 115, 53, 32, - 227, 228, 53, 32, 231, 185, 53, 32, 246, 103, 53, 32, 221, 121, 53, 32, - 247, 123, 53, 32, 220, 234, 53, 32, 245, 143, 98, 249, 46, 126, 42, 199, - 227, 109, 98, 249, 46, 126, 71, 199, 56, 98, 249, 46, 126, 42, 199, 233, - 193, 25, 227, 109, 98, 249, 46, 126, 71, 199, 233, 193, 25, 56, 98, 249, - 46, 126, 245, 90, 223, 47, 98, 249, 46, 126, 223, 48, 245, 97, 50, 98, - 249, 46, 126, 223, 48, 245, 97, 56, 98, 249, 46, 126, 223, 48, 245, 97, - 235, 115, 98, 249, 46, 126, 223, 48, 245, 97, 220, 60, 235, 115, 98, 249, - 46, 126, 223, 48, 245, 97, 220, 60, 227, 109, 98, 249, 46, 126, 223, 48, - 245, 97, 234, 237, 235, 115, 98, 249, 46, 126, 230, 76, 98, 223, 254, 98, - 250, 168, 98, 245, 90, 223, 136, 248, 196, 78, 237, 118, 237, 209, 223, - 159, 100, 98, 237, 138, 78, 98, 250, 194, 78, 98, 54, 217, 84, 42, 254, - 120, 115, 45, 254, 120, 115, 42, 51, 254, 120, 115, 45, 51, 254, 120, - 115, 42, 250, 124, 115, 45, 250, 124, 115, 42, 67, 250, 124, 115, 45, 67, - 250, 124, 115, 42, 84, 235, 91, 115, 45, 84, 235, 91, 115, 229, 14, 78, - 244, 163, 78, 42, 221, 114, 224, 236, 115, 45, 221, 114, 224, 236, 115, - 42, 67, 235, 91, 115, 45, 67, 235, 91, 115, 42, 67, 221, 114, 224, 236, - 115, 45, 67, 221, 114, 224, 236, 115, 42, 67, 40, 115, 45, 67, 40, 115, - 218, 237, 249, 146, 210, 51, 228, 236, 228, 69, 78, 51, 228, 236, 228, - 69, 78, 109, 51, 228, 236, 228, 69, 78, 229, 14, 164, 246, 3, 243, 185, - 231, 107, 107, 243, 185, 231, 107, 103, 243, 185, 231, 107, 160, 243, - 185, 231, 107, 154, 243, 185, 231, 107, 174, 243, 185, 231, 107, 182, - 243, 185, 231, 107, 191, 243, 185, 231, 107, 185, 243, 185, 231, 107, - 190, 98, 235, 83, 145, 78, 98, 227, 88, 145, 78, 98, 249, 52, 145, 78, - 98, 246, 177, 145, 78, 22, 224, 109, 61, 145, 78, 22, 51, 61, 145, 78, - 218, 235, 249, 146, 69, 236, 232, 227, 182, 78, 69, 236, 232, 227, 182, - 2, 219, 70, 224, 9, 78, 69, 236, 232, 227, 182, 164, 220, 60, 243, 194, - 69, 236, 232, 227, 182, 2, 219, 70, 224, 9, 164, 220, 60, 243, 194, 69, - 236, 232, 227, 182, 164, 234, 237, 243, 194, 34, 229, 14, 78, 98, 183, - 235, 44, 245, 225, 225, 55, 100, 243, 185, 231, 107, 222, 65, 243, 185, - 231, 107, 220, 219, 243, 185, 231, 107, 221, 245, 69, 98, 237, 138, 78, - 234, 52, 78, 229, 225, 254, 143, 78, 98, 41, 237, 211, 98, 144, 245, 188, - 223, 254, 136, 1, 3, 60, 136, 1, 60, 136, 1, 3, 72, 136, 1, 72, 136, 1, - 3, 68, 136, 1, 68, 136, 1, 3, 73, 136, 1, 73, 136, 1, 3, 74, 136, 1, 74, - 136, 1, 175, 136, 1, 245, 0, 136, 1, 236, 113, 136, 1, 244, 103, 136, 1, - 236, 7, 136, 1, 244, 17, 136, 1, 236, 184, 136, 1, 244, 191, 136, 1, 236, - 57, 136, 1, 244, 68, 136, 1, 226, 177, 136, 1, 217, 114, 136, 1, 224, - 140, 136, 1, 217, 42, 136, 1, 223, 103, 136, 1, 217, 13, 136, 1, 226, 94, - 136, 1, 217, 92, 136, 1, 224, 26, 136, 1, 217, 21, 136, 1, 222, 155, 136, - 1, 249, 207, 136, 1, 221, 205, 136, 1, 249, 15, 136, 1, 3, 221, 0, 136, - 1, 221, 0, 136, 1, 247, 111, 136, 1, 222, 87, 136, 1, 249, 92, 136, 1, - 101, 136, 1, 248, 167, 136, 1, 208, 136, 1, 232, 62, 136, 1, 231, 144, - 136, 1, 232, 141, 136, 1, 231, 204, 136, 1, 155, 136, 1, 252, 237, 136, - 1, 187, 136, 1, 243, 112, 136, 1, 252, 84, 136, 1, 229, 108, 136, 1, 242, - 173, 136, 1, 251, 248, 136, 1, 228, 202, 136, 1, 243, 162, 136, 1, 252, - 144, 136, 1, 229, 198, 136, 1, 243, 4, 136, 1, 252, 41, 136, 1, 229, 37, - 136, 1, 196, 136, 1, 233, 196, 136, 1, 233, 99, 136, 1, 234, 25, 136, 1, - 233, 136, 136, 1, 3, 184, 136, 1, 184, 136, 1, 3, 217, 200, 136, 1, 217, - 200, 136, 1, 3, 217, 231, 136, 1, 217, 231, 136, 1, 203, 136, 1, 227, - 147, 136, 1, 227, 22, 136, 1, 227, 216, 136, 1, 227, 75, 136, 1, 3, 219, - 7, 136, 1, 219, 7, 136, 1, 218, 204, 136, 1, 218, 227, 136, 1, 218, 187, - 136, 1, 207, 136, 1, 219, 56, 136, 1, 3, 175, 136, 1, 3, 236, 184, 36, - 236, 202, 219, 70, 224, 9, 78, 36, 236, 202, 225, 72, 224, 9, 78, 236, - 202, 219, 70, 224, 9, 78, 236, 202, 225, 72, 224, 9, 78, 136, 237, 138, - 78, 136, 219, 70, 237, 138, 78, 136, 248, 234, 217, 213, 236, 202, 51, - 242, 121, 52, 1, 3, 60, 52, 1, 60, 52, 1, 3, 72, 52, 1, 72, 52, 1, 3, 68, - 52, 1, 68, 52, 1, 3, 73, 52, 1, 73, 52, 1, 3, 74, 52, 1, 74, 52, 1, 175, - 52, 1, 245, 0, 52, 1, 236, 113, 52, 1, 244, 103, 52, 1, 236, 7, 52, 1, - 244, 17, 52, 1, 236, 184, 52, 1, 244, 191, 52, 1, 236, 57, 52, 1, 244, - 68, 52, 1, 226, 177, 52, 1, 217, 114, 52, 1, 224, 140, 52, 1, 217, 42, - 52, 1, 223, 103, 52, 1, 217, 13, 52, 1, 226, 94, 52, 1, 217, 92, 52, 1, - 224, 26, 52, 1, 217, 21, 52, 1, 222, 155, 52, 1, 249, 207, 52, 1, 221, - 205, 52, 1, 249, 15, 52, 1, 3, 221, 0, 52, 1, 221, 0, 52, 1, 247, 111, - 52, 1, 222, 87, 52, 1, 249, 92, 52, 1, 101, 52, 1, 248, 167, 52, 1, 208, - 52, 1, 232, 62, 52, 1, 231, 144, 52, 1, 232, 141, 52, 1, 231, 204, 52, 1, - 155, 52, 1, 252, 237, 52, 1, 187, 52, 1, 243, 112, 52, 1, 252, 84, 52, 1, - 229, 108, 52, 1, 242, 173, 52, 1, 251, 248, 52, 1, 228, 202, 52, 1, 243, - 162, 52, 1, 252, 144, 52, 1, 229, 198, 52, 1, 243, 4, 52, 1, 252, 41, 52, - 1, 229, 37, 52, 1, 196, 52, 1, 233, 196, 52, 1, 233, 99, 52, 1, 234, 25, - 52, 1, 233, 136, 52, 1, 3, 184, 52, 1, 184, 52, 1, 3, 217, 200, 52, 1, - 217, 200, 52, 1, 3, 217, 231, 52, 1, 217, 231, 52, 1, 203, 52, 1, 227, - 147, 52, 1, 227, 22, 52, 1, 227, 216, 52, 1, 227, 75, 52, 1, 3, 219, 7, - 52, 1, 219, 7, 52, 1, 218, 204, 52, 1, 218, 227, 52, 1, 218, 187, 52, 1, - 207, 52, 1, 219, 56, 52, 1, 3, 175, 52, 1, 3, 236, 184, 52, 1, 219, 189, - 52, 1, 219, 94, 52, 1, 219, 165, 52, 1, 219, 72, 52, 233, 193, 248, 145, - 236, 202, 228, 223, 224, 9, 78, 52, 237, 138, 78, 52, 219, 70, 237, 138, - 78, 52, 248, 234, 236, 30, 200, 1, 253, 204, 200, 1, 230, 59, 200, 1, - 189, 200, 1, 246, 74, 200, 1, 250, 46, 200, 1, 222, 201, 200, 1, 207, - 200, 1, 153, 200, 1, 245, 67, 200, 1, 237, 17, 200, 1, 243, 225, 200, 1, - 237, 126, 200, 1, 228, 163, 200, 1, 218, 151, 200, 1, 217, 81, 200, 1, - 251, 70, 200, 1, 225, 27, 200, 1, 152, 200, 1, 217, 157, 200, 1, 251, - 202, 200, 1, 198, 200, 1, 60, 200, 1, 74, 200, 1, 73, 200, 1, 246, 239, - 200, 1, 254, 196, 200, 1, 246, 237, 200, 1, 253, 232, 200, 1, 230, 86, - 200, 1, 254, 131, 200, 1, 246, 197, 200, 1, 254, 123, 200, 1, 246, 185, - 200, 1, 246, 148, 200, 1, 72, 200, 1, 68, 200, 1, 237, 137, 200, 1, 216, - 216, 200, 1, 232, 117, 200, 1, 244, 72, 200, 1, 238, 0, 22, 1, 236, 86, - 22, 1, 223, 211, 22, 1, 236, 79, 22, 1, 232, 55, 22, 1, 232, 53, 22, 1, - 232, 52, 22, 1, 221, 192, 22, 1, 223, 200, 22, 1, 227, 140, 22, 1, 227, - 135, 22, 1, 227, 132, 22, 1, 227, 125, 22, 1, 227, 120, 22, 1, 227, 115, - 22, 1, 227, 126, 22, 1, 227, 138, 22, 1, 233, 187, 22, 1, 229, 99, 22, 1, - 223, 208, 22, 1, 229, 88, 22, 1, 224, 104, 22, 1, 223, 205, 22, 1, 238, - 22, 22, 1, 250, 230, 22, 1, 223, 215, 22, 1, 251, 29, 22, 1, 236, 128, - 22, 1, 222, 0, 22, 1, 229, 127, 22, 1, 243, 106, 22, 1, 60, 22, 1, 254, - 234, 22, 1, 184, 22, 1, 218, 65, 22, 1, 246, 168, 22, 1, 73, 22, 1, 218, - 16, 22, 1, 218, 25, 22, 1, 74, 22, 1, 219, 7, 22, 1, 219, 4, 22, 1, 230, - 167, 22, 1, 217, 231, 22, 1, 68, 22, 1, 218, 219, 22, 1, 218, 227, 22, 1, - 218, 204, 22, 1, 217, 200, 22, 1, 246, 115, 22, 1, 217, 250, 22, 1, 72, - 22, 245, 185, 22, 1, 223, 209, 22, 1, 232, 45, 22, 1, 232, 47, 22, 1, - 232, 50, 22, 1, 227, 133, 22, 1, 227, 114, 22, 1, 227, 122, 22, 1, 227, - 127, 22, 1, 227, 112, 22, 1, 233, 180, 22, 1, 233, 177, 22, 1, 233, 181, - 22, 1, 236, 220, 22, 1, 229, 94, 22, 1, 229, 80, 22, 1, 229, 86, 22, 1, - 229, 83, 22, 1, 229, 97, 22, 1, 229, 81, 22, 1, 236, 218, 22, 1, 236, - 216, 22, 1, 224, 97, 22, 1, 224, 95, 22, 1, 224, 87, 22, 1, 224, 92, 22, - 1, 224, 102, 22, 1, 230, 1, 22, 1, 223, 212, 22, 1, 218, 6, 22, 1, 218, - 2, 22, 1, 218, 3, 22, 1, 236, 219, 22, 1, 223, 213, 22, 1, 218, 12, 22, - 1, 217, 225, 22, 1, 217, 224, 22, 1, 217, 227, 22, 1, 217, 191, 22, 1, - 217, 192, 22, 1, 217, 195, 22, 1, 254, 60, 22, 1, 254, 54, 98, 254, 112, - 235, 33, 78, 98, 254, 112, 227, 160, 78, 98, 254, 112, 131, 78, 98, 254, - 112, 124, 78, 98, 254, 112, 148, 78, 98, 254, 112, 245, 116, 78, 98, 254, - 112, 221, 120, 78, 98, 254, 112, 233, 193, 78, 98, 254, 112, 252, 29, 78, - 98, 254, 112, 245, 178, 78, 98, 254, 112, 226, 90, 78, 98, 254, 112, 221, - 252, 78, 98, 254, 112, 245, 110, 78, 98, 254, 112, 243, 152, 78, 98, 254, - 112, 247, 9, 78, 98, 254, 112, 234, 87, 78, 200, 1, 251, 248, 200, 1, - 217, 42, 200, 1, 237, 98, 200, 1, 244, 17, 200, 1, 246, 250, 200, 1, 246, - 183, 200, 1, 230, 127, 200, 1, 230, 131, 200, 1, 237, 156, 200, 1, 254, - 114, 200, 1, 237, 198, 200, 1, 220, 68, 200, 1, 237, 238, 200, 1, 232, - 101, 200, 1, 254, 190, 200, 1, 253, 228, 200, 1, 254, 140, 200, 1, 230, - 146, 200, 1, 230, 133, 200, 1, 237, 195, 200, 39, 1, 230, 59, 200, 39, 1, - 222, 201, 200, 39, 1, 237, 17, 200, 39, 1, 243, 225, 9, 214, 222, 201, 9, - 214, 218, 213, 9, 214, 218, 131, 9, 214, 251, 214, 9, 214, 223, 37, 9, - 214, 242, 111, 9, 214, 242, 115, 9, 214, 242, 179, 9, 214, 242, 112, 9, - 214, 222, 204, 9, 214, 242, 114, 9, 214, 242, 110, 9, 214, 242, 177, 9, - 214, 242, 113, 9, 214, 242, 109, 9, 214, 207, 9, 214, 243, 225, 9, 214, - 198, 9, 214, 230, 59, 9, 214, 224, 0, 9, 214, 250, 46, 9, 214, 242, 116, - 9, 214, 243, 122, 9, 214, 222, 213, 9, 214, 223, 22, 9, 214, 223, 168, 9, - 214, 225, 32, 9, 214, 229, 200, 9, 214, 228, 165, 9, 214, 221, 140, 9, - 214, 222, 203, 9, 214, 223, 30, 9, 214, 242, 123, 9, 214, 242, 108, 9, - 214, 229, 143, 9, 214, 228, 163, 52, 1, 3, 236, 7, 52, 1, 3, 224, 140, - 52, 1, 3, 223, 103, 52, 1, 3, 101, 52, 1, 3, 231, 144, 52, 1, 3, 155, 52, - 1, 3, 243, 112, 52, 1, 3, 242, 173, 52, 1, 3, 243, 162, 52, 1, 3, 243, 4, - 52, 1, 3, 233, 99, 52, 1, 3, 203, 52, 1, 3, 227, 147, 52, 1, 3, 227, 22, - 52, 1, 3, 227, 216, 52, 1, 3, 227, 75, 82, 22, 236, 86, 82, 22, 232, 55, - 82, 22, 221, 192, 82, 22, 227, 140, 82, 22, 233, 187, 82, 22, 229, 99, - 82, 22, 224, 104, 82, 22, 238, 22, 82, 22, 250, 230, 82, 22, 251, 29, 82, - 22, 236, 128, 82, 22, 222, 0, 82, 22, 229, 127, 82, 22, 243, 106, 82, 22, - 236, 87, 60, 82, 22, 232, 56, 60, 82, 22, 221, 193, 60, 82, 22, 227, 141, - 60, 82, 22, 233, 188, 60, 82, 22, 229, 100, 60, 82, 22, 224, 105, 60, 82, - 22, 238, 23, 60, 82, 22, 250, 231, 60, 82, 22, 251, 30, 60, 82, 22, 236, - 129, 60, 82, 22, 222, 1, 60, 82, 22, 229, 128, 60, 82, 22, 243, 107, 60, - 82, 22, 250, 231, 68, 82, 236, 34, 126, 230, 156, 82, 236, 34, 126, 142, - 242, 173, 82, 138, 107, 82, 138, 103, 82, 138, 160, 82, 138, 154, 82, - 138, 174, 82, 138, 182, 82, 138, 191, 82, 138, 185, 82, 138, 190, 82, - 138, 222, 65, 82, 138, 233, 117, 82, 138, 245, 179, 82, 138, 218, 240, - 82, 138, 218, 179, 82, 138, 233, 238, 82, 138, 247, 8, 82, 138, 223, 68, - 82, 138, 223, 139, 82, 138, 243, 168, 82, 138, 224, 23, 82, 138, 232, - 218, 82, 138, 223, 248, 82, 138, 245, 184, 82, 138, 250, 154, 82, 138, - 235, 181, 82, 138, 227, 178, 82, 138, 251, 159, 82, 138, 223, 106, 82, - 138, 223, 56, 82, 138, 246, 176, 82, 138, 227, 170, 82, 138, 254, 153, - 82, 138, 245, 208, 82, 138, 227, 168, 82, 138, 225, 73, 82, 138, 227, - 215, 34, 138, 228, 81, 34, 138, 236, 103, 34, 138, 226, 107, 34, 138, - 236, 30, 34, 54, 222, 66, 230, 139, 84, 223, 227, 34, 54, 220, 220, 230, - 139, 84, 223, 227, 34, 54, 221, 246, 230, 139, 84, 223, 227, 34, 54, 245, - 120, 230, 139, 84, 223, 227, 34, 54, 245, 197, 230, 139, 84, 223, 227, - 34, 54, 224, 70, 230, 139, 84, 223, 227, 34, 54, 225, 39, 230, 139, 84, - 223, 227, 34, 54, 246, 228, 230, 139, 84, 223, 227, 229, 221, 55, 34, 54, - 220, 220, 107, 34, 54, 220, 220, 103, 34, 54, 220, 220, 160, 34, 54, 220, - 220, 154, 34, 54, 220, 220, 174, 34, 54, 220, 220, 182, 34, 54, 220, 220, - 191, 34, 54, 220, 220, 185, 34, 54, 220, 220, 190, 34, 54, 221, 245, 34, - 54, 221, 246, 107, 34, 54, 221, 246, 103, 34, 54, 221, 246, 160, 34, 54, - 221, 246, 154, 34, 54, 221, 246, 174, 34, 22, 236, 86, 34, 22, 232, 55, - 34, 22, 221, 192, 34, 22, 227, 140, 34, 22, 233, 187, 34, 22, 229, 99, - 34, 22, 224, 104, 34, 22, 238, 22, 34, 22, 250, 230, 34, 22, 251, 29, 34, - 22, 236, 128, 34, 22, 222, 0, 34, 22, 229, 127, 34, 22, 243, 106, 34, 22, - 236, 87, 60, 34, 22, 232, 56, 60, 34, 22, 221, 193, 60, 34, 22, 227, 141, - 60, 34, 22, 233, 188, 60, 34, 22, 229, 100, 60, 34, 22, 224, 105, 60, 34, - 22, 238, 23, 60, 34, 22, 250, 231, 60, 34, 22, 251, 30, 60, 34, 22, 236, - 129, 60, 34, 22, 222, 1, 60, 34, 22, 229, 128, 60, 34, 22, 243, 107, 60, - 34, 236, 34, 126, 251, 61, 34, 236, 34, 126, 237, 40, 34, 22, 238, 23, - 68, 236, 34, 223, 159, 100, 34, 138, 107, 34, 138, 103, 34, 138, 160, 34, - 138, 154, 34, 138, 174, 34, 138, 182, 34, 138, 191, 34, 138, 185, 34, - 138, 190, 34, 138, 222, 65, 34, 138, 233, 117, 34, 138, 245, 179, 34, - 138, 218, 240, 34, 138, 218, 179, 34, 138, 233, 238, 34, 138, 247, 8, 34, - 138, 223, 68, 34, 138, 223, 139, 34, 138, 243, 168, 34, 138, 224, 23, 34, - 138, 232, 218, 34, 138, 223, 248, 34, 138, 245, 184, 34, 138, 250, 154, - 34, 138, 235, 181, 34, 138, 226, 88, 34, 138, 234, 89, 34, 138, 245, 216, - 34, 138, 223, 79, 34, 138, 246, 97, 34, 138, 228, 233, 34, 138, 253, 236, - 34, 138, 237, 139, 34, 138, 227, 168, 34, 138, 250, 127, 34, 138, 250, - 118, 34, 138, 243, 99, 34, 138, 251, 84, 34, 138, 234, 239, 34, 138, 235, - 115, 34, 138, 227, 109, 34, 138, 234, 19, 34, 138, 227, 189, 34, 138, - 223, 106, 34, 138, 223, 56, 34, 138, 246, 176, 34, 138, 227, 170, 34, - 138, 254, 153, 34, 138, 232, 42, 34, 54, 221, 246, 182, 34, 54, 221, 246, - 191, 34, 54, 221, 246, 185, 34, 54, 221, 246, 190, 34, 54, 245, 119, 34, - 54, 245, 120, 107, 34, 54, 245, 120, 103, 34, 54, 245, 120, 160, 34, 54, - 245, 120, 154, 34, 54, 245, 120, 174, 34, 54, 245, 120, 182, 34, 54, 245, - 120, 191, 34, 54, 245, 120, 185, 34, 54, 245, 120, 190, 34, 54, 245, 196, - 98, 183, 16, 35, 237, 119, 98, 183, 16, 35, 245, 227, 98, 183, 16, 35, - 234, 69, 98, 183, 16, 35, 254, 71, 98, 183, 16, 35, 234, 45, 98, 183, 16, - 35, 237, 38, 98, 183, 16, 35, 237, 39, 98, 183, 16, 35, 253, 229, 98, - 183, 16, 35, 225, 53, 98, 183, 16, 35, 230, 170, 98, 183, 16, 35, 231, - 175, 98, 183, 16, 35, 249, 87, 40, 243, 122, 40, 246, 144, 40, 246, 105, - 235, 49, 235, 66, 55, 34, 52, 60, 34, 52, 72, 34, 52, 68, 34, 52, 73, 34, - 52, 74, 34, 52, 175, 34, 52, 236, 113, 34, 52, 236, 7, 34, 52, 236, 184, - 34, 52, 236, 57, 34, 52, 226, 177, 34, 52, 224, 140, 34, 52, 223, 103, - 34, 52, 226, 94, 34, 52, 224, 26, 34, 52, 222, 155, 34, 52, 221, 205, 34, - 52, 221, 0, 34, 52, 222, 87, 34, 52, 101, 34, 52, 208, 34, 52, 232, 62, - 34, 52, 231, 144, 34, 52, 232, 141, 34, 52, 231, 204, 34, 52, 155, 34, - 52, 243, 112, 34, 52, 242, 173, 34, 52, 243, 162, 34, 52, 243, 4, 34, 52, - 196, 34, 52, 233, 196, 34, 52, 233, 99, 34, 52, 234, 25, 34, 52, 233, - 136, 34, 52, 184, 34, 52, 217, 200, 34, 52, 217, 231, 34, 52, 203, 34, - 52, 227, 147, 34, 52, 227, 22, 34, 52, 227, 216, 34, 52, 227, 75, 34, 52, - 219, 7, 34, 52, 218, 204, 34, 52, 218, 227, 34, 52, 218, 187, 40, 254, - 91, 40, 254, 15, 40, 254, 108, 40, 255, 16, 40, 237, 199, 40, 237, 172, - 40, 220, 66, 40, 246, 124, 40, 246, 248, 40, 230, 130, 40, 230, 125, 40, - 236, 242, 40, 236, 214, 40, 236, 212, 40, 244, 217, 40, 244, 225, 40, - 244, 94, 40, 244, 90, 40, 235, 203, 40, 244, 84, 40, 236, 97, 40, 236, - 96, 40, 236, 95, 40, 236, 94, 40, 243, 251, 40, 243, 250, 40, 235, 244, - 40, 235, 246, 40, 236, 180, 40, 236, 32, 40, 236, 39, 40, 226, 162, 40, - 226, 136, 40, 224, 85, 40, 225, 58, 40, 225, 57, 40, 249, 204, 40, 249, - 45, 40, 248, 146, 40, 221, 134, 40, 232, 214, 40, 231, 176, 40, 243, 199, - 40, 230, 40, 40, 230, 39, 40, 252, 235, 40, 229, 105, 40, 229, 74, 40, - 229, 75, 40, 252, 65, 40, 242, 172, 40, 242, 168, 40, 251, 223, 40, 242, - 155, 40, 243, 143, 40, 229, 150, 40, 229, 178, 40, 243, 129, 40, 229, - 176, 40, 229, 189, 40, 252, 133, 40, 229, 27, 40, 252, 31, 40, 242, 249, - 40, 229, 22, 40, 242, 245, 40, 242, 246, 40, 234, 98, 40, 234, 95, 40, - 234, 102, 40, 234, 59, 40, 234, 80, 40, 233, 167, 40, 233, 149, 40, 233, - 148, 40, 234, 9, 40, 234, 7, 40, 234, 10, 40, 218, 75, 40, 218, 73, 40, - 217, 190, 40, 227, 86, 40, 227, 90, 40, 227, 3, 40, 226, 254, 40, 227, - 188, 40, 227, 186, 40, 218, 239, 98, 183, 16, 35, 242, 184, 217, 84, 98, - 183, 16, 35, 242, 184, 107, 98, 183, 16, 35, 242, 184, 103, 98, 183, 16, - 35, 242, 184, 160, 98, 183, 16, 35, 242, 184, 154, 98, 183, 16, 35, 242, - 184, 174, 98, 183, 16, 35, 242, 184, 182, 98, 183, 16, 35, 242, 184, 191, - 98, 183, 16, 35, 242, 184, 185, 98, 183, 16, 35, 242, 184, 190, 98, 183, - 16, 35, 242, 184, 222, 65, 98, 183, 16, 35, 242, 184, 246, 211, 98, 183, - 16, 35, 242, 184, 220, 221, 98, 183, 16, 35, 242, 184, 221, 247, 98, 183, - 16, 35, 242, 184, 245, 111, 98, 183, 16, 35, 242, 184, 245, 200, 98, 183, - 16, 35, 242, 184, 224, 77, 98, 183, 16, 35, 242, 184, 225, 41, 98, 183, - 16, 35, 242, 184, 246, 233, 98, 183, 16, 35, 242, 184, 232, 29, 98, 183, - 16, 35, 242, 184, 220, 219, 98, 183, 16, 35, 242, 184, 220, 213, 98, 183, - 16, 35, 242, 184, 220, 209, 98, 183, 16, 35, 242, 184, 220, 210, 98, 183, - 16, 35, 242, 184, 220, 215, 40, 242, 178, 40, 249, 207, 40, 253, 232, 40, - 135, 40, 230, 79, 40, 229, 201, 40, 248, 169, 40, 248, 170, 223, 226, 40, - 248, 170, 250, 88, 40, 237, 137, 40, 246, 147, 232, 219, 243, 144, 40, - 246, 147, 232, 219, 222, 221, 40, 246, 147, 232, 219, 222, 132, 40, 246, - 147, 232, 219, 234, 6, 40, 250, 120, 40, 230, 44, 254, 133, 40, 208, 40, - 233, 100, 60, 40, 196, 40, 175, 40, 236, 187, 40, 234, 41, 40, 244, 205, - 40, 251, 161, 40, 236, 186, 40, 229, 144, 40, 232, 119, 40, 233, 100, - 246, 74, 40, 233, 100, 245, 67, 40, 233, 230, 40, 236, 151, 40, 242, 116, - 40, 236, 115, 40, 233, 198, 40, 244, 105, 40, 221, 207, 40, 233, 100, - 153, 40, 233, 143, 40, 248, 177, 40, 236, 68, 40, 245, 141, 40, 231, 219, - 40, 233, 100, 189, 40, 233, 140, 40, 250, 183, 40, 236, 62, 40, 233, 141, - 223, 226, 40, 250, 184, 223, 226, 40, 234, 187, 223, 226, 40, 236, 63, - 223, 226, 40, 233, 141, 250, 88, 40, 250, 184, 250, 88, 40, 234, 187, - 250, 88, 40, 236, 63, 250, 88, 40, 234, 187, 104, 198, 40, 234, 187, 104, - 226, 235, 223, 226, 40, 187, 40, 236, 26, 40, 233, 102, 40, 244, 48, 40, - 227, 252, 40, 227, 253, 104, 198, 40, 227, 253, 104, 226, 235, 223, 226, - 40, 228, 213, 40, 231, 148, 40, 233, 100, 198, 40, 233, 101, 40, 228, - 183, 40, 231, 87, 40, 233, 100, 216, 216, 40, 233, 52, 40, 235, 237, 40, - 233, 53, 234, 9, 40, 228, 182, 40, 231, 86, 40, 233, 100, 219, 40, 40, - 233, 50, 40, 235, 235, 40, 233, 51, 234, 9, 40, 237, 18, 230, 159, 40, - 234, 187, 230, 159, 40, 254, 140, 40, 252, 20, 40, 251, 115, 40, 251, - 100, 40, 251, 203, 104, 236, 151, 40, 250, 182, 40, 249, 134, 40, 243, - 237, 40, 155, 40, 242, 179, 40, 237, 223, 40, 236, 75, 40, 236, 63, 251, - 142, 40, 236, 9, 40, 235, 15, 40, 235, 14, 40, 235, 8, 40, 234, 199, 40, - 234, 42, 224, 43, 40, 233, 166, 40, 233, 129, 40, 229, 142, 40, 229, 40, - 40, 229, 5, 40, 229, 3, 40, 223, 220, 40, 223, 41, 40, 218, 228, 40, 220, - 11, 104, 189, 40, 112, 104, 189, 98, 183, 16, 35, 249, 137, 107, 98, 183, - 16, 35, 249, 137, 103, 98, 183, 16, 35, 249, 137, 160, 98, 183, 16, 35, - 249, 137, 154, 98, 183, 16, 35, 249, 137, 174, 98, 183, 16, 35, 249, 137, - 182, 98, 183, 16, 35, 249, 137, 191, 98, 183, 16, 35, 249, 137, 185, 98, - 183, 16, 35, 249, 137, 190, 98, 183, 16, 35, 249, 137, 222, 65, 98, 183, - 16, 35, 249, 137, 246, 211, 98, 183, 16, 35, 249, 137, 220, 221, 98, 183, - 16, 35, 249, 137, 221, 247, 98, 183, 16, 35, 249, 137, 245, 111, 98, 183, - 16, 35, 249, 137, 245, 200, 98, 183, 16, 35, 249, 137, 224, 77, 98, 183, - 16, 35, 249, 137, 225, 41, 98, 183, 16, 35, 249, 137, 246, 233, 98, 183, - 16, 35, 249, 137, 232, 29, 98, 183, 16, 35, 249, 137, 220, 219, 98, 183, - 16, 35, 249, 137, 220, 213, 98, 183, 16, 35, 249, 137, 220, 209, 98, 183, - 16, 35, 249, 137, 220, 210, 98, 183, 16, 35, 249, 137, 220, 215, 98, 183, - 16, 35, 249, 137, 220, 216, 98, 183, 16, 35, 249, 137, 220, 211, 98, 183, - 16, 35, 249, 137, 220, 212, 98, 183, 16, 35, 249, 137, 220, 218, 98, 183, - 16, 35, 249, 137, 220, 214, 98, 183, 16, 35, 249, 137, 221, 245, 98, 183, - 16, 35, 249, 137, 221, 244, 40, 244, 240, 205, 35, 222, 23, 250, 108, - 243, 151, 205, 35, 222, 23, 227, 213, 247, 8, 205, 35, 248, 244, 253, - 245, 222, 23, 252, 130, 205, 35, 217, 211, 245, 137, 205, 35, 219, 1, - 205, 35, 250, 155, 205, 35, 222, 23, 254, 30, 205, 35, 242, 253, 221, - 136, 205, 35, 3, 222, 120, 205, 35, 221, 100, 205, 35, 229, 196, 205, 35, - 223, 158, 205, 35, 245, 218, 205, 35, 244, 32, 229, 15, 205, 35, 233, - 132, 205, 35, 246, 175, 205, 35, 245, 138, 205, 35, 218, 172, 230, 139, - 222, 23, 249, 88, 205, 35, 254, 75, 205, 35, 250, 139, 205, 35, 252, 59, - 221, 224, 205, 35, 244, 46, 205, 35, 223, 237, 254, 90, 205, 35, 227, - 162, 205, 35, 237, 194, 205, 35, 244, 32, 222, 120, 205, 35, 233, 106, - 250, 122, 205, 35, 244, 32, 228, 240, 205, 35, 222, 23, 255, 4, 218, 240, - 205, 35, 222, 23, 250, 201, 245, 179, 205, 35, 237, 206, 205, 35, 247, - 90, 205, 35, 227, 165, 205, 35, 244, 32, 229, 10, 205, 35, 228, 227, 205, - 35, 249, 151, 117, 222, 23, 235, 58, 205, 35, 222, 23, 245, 246, 205, 35, - 230, 109, 205, 35, 230, 173, 205, 35, 249, 66, 205, 35, 249, 84, 205, 35, - 237, 217, 205, 35, 252, 11, 205, 35, 250, 170, 199, 234, 12, 205, 35, - 244, 212, 221, 136, 205, 35, 228, 187, 220, 54, 205, 35, 230, 108, 205, - 35, 222, 23, 218, 221, 205, 35, 227, 156, 205, 35, 222, 23, 251, 121, - 205, 35, 222, 23, 254, 26, 221, 221, 205, 35, 222, 23, 236, 181, 223, - 141, 233, 107, 205, 35, 249, 43, 205, 35, 222, 23, 234, 61, 234, 99, 205, - 35, 255, 5, 205, 35, 222, 23, 218, 252, 205, 35, 222, 23, 244, 177, 218, - 194, 205, 35, 222, 23, 237, 44, 235, 165, 205, 35, 248, 200, 205, 35, - 235, 50, 205, 35, 237, 197, 221, 59, 205, 35, 3, 228, 240, 205, 35, 254, - 210, 250, 162, 205, 35, 252, 132, 250, 162, 8, 4, 237, 140, 8, 4, 237, - 134, 8, 4, 72, 8, 4, 237, 159, 8, 4, 238, 24, 8, 4, 238, 7, 8, 4, 238, - 26, 8, 4, 238, 25, 8, 4, 253, 244, 8, 4, 253, 214, 8, 4, 60, 8, 4, 254, - 92, 8, 4, 220, 64, 8, 4, 220, 67, 8, 4, 220, 65, 8, 4, 230, 92, 8, 4, - 230, 68, 8, 4, 74, 8, 4, 230, 120, 8, 4, 246, 98, 8, 4, 73, 8, 4, 218, - 165, 8, 4, 252, 60, 8, 4, 252, 57, 8, 4, 252, 84, 8, 4, 252, 68, 8, 4, - 252, 78, 8, 4, 252, 77, 8, 4, 252, 80, 8, 4, 252, 79, 8, 4, 252, 184, 8, - 4, 252, 180, 8, 4, 252, 237, 8, 4, 252, 202, 8, 4, 251, 231, 8, 4, 251, - 235, 8, 4, 251, 232, 8, 4, 252, 30, 8, 4, 252, 21, 8, 4, 252, 41, 8, 4, - 252, 32, 8, 4, 252, 97, 8, 4, 252, 144, 8, 4, 252, 109, 8, 4, 251, 221, - 8, 4, 251, 219, 8, 4, 251, 248, 8, 4, 251, 230, 8, 4, 251, 224, 8, 4, - 251, 228, 8, 4, 251, 207, 8, 4, 251, 206, 8, 4, 251, 212, 8, 4, 251, 210, - 8, 4, 251, 208, 8, 4, 251, 209, 8, 4, 229, 64, 8, 4, 229, 60, 8, 4, 229, - 108, 8, 4, 229, 70, 8, 4, 229, 79, 8, 4, 229, 103, 8, 4, 229, 101, 8, 4, - 229, 215, 8, 4, 229, 206, 8, 4, 187, 8, 4, 229, 246, 8, 4, 228, 192, 8, - 4, 228, 194, 8, 4, 228, 193, 8, 4, 229, 12, 8, 4, 229, 8, 8, 4, 229, 37, - 8, 4, 229, 19, 8, 4, 228, 185, 8, 4, 228, 184, 8, 4, 228, 202, 8, 4, 228, - 191, 8, 4, 228, 188, 8, 4, 228, 190, 8, 4, 228, 167, 8, 4, 228, 166, 8, - 4, 228, 171, 8, 4, 228, 170, 8, 4, 228, 168, 8, 4, 228, 169, 8, 4, 252, - 165, 8, 4, 252, 164, 8, 4, 252, 171, 8, 4, 252, 166, 8, 4, 252, 168, 8, - 4, 252, 167, 8, 4, 252, 170, 8, 4, 252, 169, 8, 4, 252, 176, 8, 4, 252, - 175, 8, 4, 252, 178, 8, 4, 252, 177, 8, 4, 252, 156, 8, 4, 252, 158, 8, - 4, 252, 157, 8, 4, 252, 161, 8, 4, 252, 160, 8, 4, 252, 163, 8, 4, 252, - 162, 8, 4, 252, 172, 8, 4, 252, 174, 8, 4, 252, 173, 8, 4, 252, 152, 8, - 4, 252, 151, 8, 4, 252, 159, 8, 4, 252, 155, 8, 4, 252, 153, 8, 4, 252, - 154, 8, 4, 252, 148, 8, 4, 252, 147, 8, 4, 252, 150, 8, 4, 252, 149, 8, - 4, 232, 188, 8, 4, 232, 187, 8, 4, 232, 193, 8, 4, 232, 189, 8, 4, 232, - 190, 8, 4, 232, 192, 8, 4, 232, 191, 8, 4, 232, 195, 8, 4, 232, 194, 8, - 4, 232, 197, 8, 4, 232, 196, 8, 4, 232, 184, 8, 4, 232, 183, 8, 4, 232, - 186, 8, 4, 232, 185, 8, 4, 232, 178, 8, 4, 232, 177, 8, 4, 232, 182, 8, - 4, 232, 181, 8, 4, 232, 179, 8, 4, 232, 180, 8, 4, 232, 172, 8, 4, 232, - 171, 8, 4, 232, 176, 8, 4, 232, 175, 8, 4, 232, 173, 8, 4, 232, 174, 8, - 4, 243, 46, 8, 4, 243, 45, 8, 4, 243, 51, 8, 4, 243, 47, 8, 4, 243, 48, - 8, 4, 243, 50, 8, 4, 243, 49, 8, 4, 243, 54, 8, 4, 243, 53, 8, 4, 243, - 56, 8, 4, 243, 55, 8, 4, 243, 37, 8, 4, 243, 39, 8, 4, 243, 38, 8, 4, - 243, 42, 8, 4, 243, 41, 8, 4, 243, 44, 8, 4, 243, 43, 8, 4, 243, 33, 8, - 4, 243, 32, 8, 4, 243, 40, 8, 4, 243, 36, 8, 4, 243, 34, 8, 4, 243, 35, - 8, 4, 243, 27, 8, 4, 243, 31, 8, 4, 243, 30, 8, 4, 243, 28, 8, 4, 243, - 29, 8, 4, 233, 145, 8, 4, 233, 144, 8, 4, 233, 196, 8, 4, 233, 151, 8, 4, - 233, 173, 8, 4, 233, 190, 8, 4, 233, 189, 8, 4, 234, 51, 8, 4, 234, 47, - 8, 4, 196, 8, 4, 234, 78, 8, 4, 233, 75, 8, 4, 233, 74, 8, 4, 233, 77, 8, - 4, 233, 76, 8, 4, 233, 111, 8, 4, 233, 103, 8, 4, 233, 136, 8, 4, 233, - 115, 8, 4, 233, 232, 8, 4, 234, 25, 8, 4, 233, 57, 8, 4, 233, 54, 8, 4, - 233, 99, 8, 4, 233, 71, 8, 4, 233, 64, 8, 4, 233, 69, 8, 4, 233, 36, 8, - 4, 233, 35, 8, 4, 233, 41, 8, 4, 233, 38, 8, 4, 245, 172, 8, 4, 245, 168, - 8, 4, 245, 203, 8, 4, 245, 180, 8, 4, 245, 240, 8, 4, 245, 234, 8, 4, - 246, 8, 8, 4, 245, 242, 8, 4, 245, 109, 8, 4, 245, 139, 8, 4, 245, 130, - 8, 4, 245, 80, 8, 4, 245, 79, 8, 4, 245, 92, 8, 4, 245, 85, 8, 4, 245, - 83, 8, 4, 245, 84, 8, 4, 245, 70, 8, 4, 245, 69, 8, 4, 245, 73, 8, 4, - 245, 71, 8, 4, 219, 74, 8, 4, 219, 73, 8, 4, 219, 94, 8, 4, 219, 83, 8, - 4, 219, 89, 8, 4, 219, 87, 8, 4, 219, 91, 8, 4, 219, 90, 8, 4, 219, 172, - 8, 4, 219, 168, 8, 4, 219, 189, 8, 4, 219, 182, 8, 4, 219, 62, 8, 4, 219, - 58, 8, 4, 219, 72, 8, 4, 219, 63, 8, 4, 219, 95, 8, 4, 219, 156, 8, 4, - 219, 51, 8, 4, 219, 50, 8, 4, 219, 56, 8, 4, 219, 54, 8, 4, 219, 52, 8, - 4, 219, 53, 8, 4, 219, 44, 8, 4, 219, 43, 8, 4, 219, 48, 8, 4, 219, 47, - 8, 4, 219, 45, 8, 4, 219, 46, 8, 4, 248, 197, 8, 4, 248, 185, 8, 4, 249, - 15, 8, 4, 248, 216, 8, 4, 248, 249, 8, 4, 248, 253, 8, 4, 248, 252, 8, 4, - 249, 143, 8, 4, 249, 138, 8, 4, 249, 207, 8, 4, 249, 162, 8, 4, 247, 95, - 8, 4, 247, 96, 8, 4, 248, 145, 8, 4, 247, 128, 8, 4, 248, 167, 8, 4, 248, - 147, 8, 4, 249, 41, 8, 4, 249, 92, 8, 4, 249, 53, 8, 4, 247, 88, 8, 4, - 247, 86, 8, 4, 247, 111, 8, 4, 247, 94, 8, 4, 247, 89, 8, 4, 247, 92, 8, - 4, 221, 161, 8, 4, 221, 157, 8, 4, 221, 205, 8, 4, 221, 169, 8, 4, 221, - 198, 8, 4, 221, 200, 8, 4, 221, 199, 8, 4, 222, 110, 8, 4, 222, 97, 8, 4, - 222, 155, 8, 4, 222, 115, 8, 4, 220, 244, 8, 4, 220, 243, 8, 4, 220, 246, - 8, 4, 220, 245, 8, 4, 221, 113, 8, 4, 221, 110, 8, 4, 101, 8, 4, 221, - 119, 8, 4, 222, 40, 8, 4, 222, 87, 8, 4, 222, 57, 8, 4, 220, 231, 8, 4, - 220, 228, 8, 4, 221, 0, 8, 4, 220, 242, 8, 4, 220, 232, 8, 4, 220, 240, - 8, 4, 249, 109, 8, 4, 249, 108, 8, 4, 249, 114, 8, 4, 249, 110, 8, 4, - 249, 111, 8, 4, 249, 113, 8, 4, 249, 112, 8, 4, 249, 125, 8, 4, 249, 124, - 8, 4, 249, 132, 8, 4, 249, 126, 8, 4, 249, 99, 8, 4, 249, 101, 8, 4, 249, - 100, 8, 4, 249, 104, 8, 4, 249, 103, 8, 4, 249, 107, 8, 4, 249, 105, 8, - 4, 249, 117, 8, 4, 249, 120, 8, 4, 249, 118, 8, 4, 249, 95, 8, 4, 249, - 94, 8, 4, 249, 102, 8, 4, 249, 98, 8, 4, 249, 96, 8, 4, 249, 97, 8, 4, - 232, 156, 8, 4, 232, 155, 8, 4, 232, 160, 8, 4, 232, 157, 8, 4, 232, 158, - 8, 4, 232, 159, 8, 4, 232, 166, 8, 4, 232, 165, 8, 4, 232, 169, 8, 4, - 232, 167, 8, 4, 232, 150, 8, 4, 232, 149, 8, 4, 232, 154, 8, 4, 232, 151, - 8, 4, 232, 161, 8, 4, 232, 164, 8, 4, 232, 162, 8, 4, 232, 144, 8, 4, - 232, 143, 8, 4, 232, 148, 8, 4, 232, 147, 8, 4, 232, 145, 8, 4, 232, 146, - 8, 4, 243, 13, 8, 4, 243, 12, 8, 4, 243, 19, 8, 4, 243, 14, 8, 4, 243, - 16, 8, 4, 243, 15, 8, 4, 243, 18, 8, 4, 243, 17, 8, 4, 243, 24, 8, 4, - 243, 23, 8, 4, 243, 26, 8, 4, 243, 25, 8, 4, 243, 7, 8, 4, 243, 8, 8, 4, - 243, 10, 8, 4, 243, 9, 8, 4, 243, 11, 8, 4, 243, 20, 8, 4, 243, 22, 8, 4, - 243, 21, 8, 4, 243, 6, 8, 4, 232, 21, 8, 4, 232, 20, 8, 4, 232, 62, 8, 4, - 232, 24, 8, 4, 232, 44, 8, 4, 232, 58, 8, 4, 232, 57, 8, 4, 232, 201, 8, - 4, 208, 8, 4, 232, 212, 8, 4, 231, 95, 8, 4, 231, 97, 8, 4, 231, 96, 8, - 4, 231, 184, 8, 4, 231, 173, 8, 4, 231, 204, 8, 4, 231, 191, 8, 4, 232, - 121, 8, 4, 232, 141, 8, 4, 232, 130, 8, 4, 231, 91, 8, 4, 231, 88, 8, 4, - 231, 144, 8, 4, 231, 94, 8, 4, 231, 92, 8, 4, 231, 93, 8, 4, 243, 77, 8, - 4, 243, 76, 8, 4, 243, 82, 8, 4, 243, 78, 8, 4, 243, 79, 8, 4, 243, 81, - 8, 4, 243, 80, 8, 4, 243, 87, 8, 4, 243, 86, 8, 4, 243, 89, 8, 4, 243, - 88, 8, 4, 243, 69, 8, 4, 243, 71, 8, 4, 243, 70, 8, 4, 243, 73, 8, 4, - 243, 75, 8, 4, 243, 74, 8, 4, 243, 83, 8, 4, 243, 85, 8, 4, 243, 84, 8, - 4, 243, 65, 8, 4, 243, 64, 8, 4, 243, 72, 8, 4, 243, 68, 8, 4, 243, 66, - 8, 4, 243, 67, 8, 4, 243, 59, 8, 4, 243, 58, 8, 4, 243, 63, 8, 4, 243, - 62, 8, 4, 243, 60, 8, 4, 243, 61, 8, 4, 235, 27, 8, 4, 235, 22, 8, 4, - 235, 67, 8, 4, 235, 32, 8, 4, 235, 61, 8, 4, 235, 60, 8, 4, 235, 63, 8, - 4, 235, 62, 8, 4, 235, 141, 8, 4, 235, 133, 8, 4, 235, 188, 8, 4, 235, - 147, 8, 4, 234, 214, 8, 4, 234, 213, 8, 4, 234, 216, 8, 4, 234, 215, 8, - 4, 234, 242, 8, 4, 234, 236, 8, 4, 235, 12, 8, 4, 234, 245, 8, 4, 235, - 82, 8, 4, 235, 122, 8, 4, 235, 89, 8, 4, 234, 209, 8, 4, 234, 208, 8, 4, - 234, 231, 8, 4, 234, 212, 8, 4, 234, 210, 8, 4, 234, 211, 8, 4, 234, 191, - 8, 4, 234, 190, 8, 4, 234, 198, 8, 4, 234, 194, 8, 4, 234, 192, 8, 4, - 234, 193, 8, 4, 244, 80, 8, 4, 244, 79, 8, 4, 244, 103, 8, 4, 244, 89, 8, - 4, 244, 96, 8, 4, 244, 95, 8, 4, 244, 98, 8, 4, 244, 97, 8, 4, 244, 214, - 8, 4, 244, 209, 8, 4, 245, 0, 8, 4, 244, 223, 8, 4, 244, 0, 8, 4, 243, - 255, 8, 4, 244, 2, 8, 4, 244, 1, 8, 4, 244, 51, 8, 4, 244, 49, 8, 4, 244, - 68, 8, 4, 244, 59, 8, 4, 244, 164, 8, 4, 244, 162, 8, 4, 244, 191, 8, 4, - 244, 174, 8, 4, 243, 246, 8, 4, 243, 245, 8, 4, 244, 17, 8, 4, 243, 254, - 8, 4, 243, 247, 8, 4, 243, 253, 8, 4, 236, 89, 8, 4, 236, 88, 8, 4, 236, - 113, 8, 4, 236, 99, 8, 4, 236, 107, 8, 4, 236, 109, 8, 4, 236, 108, 8, 4, - 236, 203, 8, 4, 236, 192, 8, 4, 175, 8, 4, 236, 227, 8, 4, 235, 250, 8, - 4, 235, 252, 8, 4, 235, 251, 8, 4, 236, 31, 8, 4, 236, 27, 8, 4, 236, 57, - 8, 4, 236, 38, 8, 4, 236, 159, 8, 4, 236, 156, 8, 4, 236, 184, 8, 4, 236, - 162, 8, 4, 235, 240, 8, 4, 235, 238, 8, 4, 236, 7, 8, 4, 235, 249, 8, 4, - 235, 243, 8, 4, 235, 247, 8, 4, 244, 146, 8, 4, 244, 145, 8, 4, 244, 150, - 8, 4, 244, 147, 8, 4, 244, 149, 8, 4, 244, 148, 8, 4, 244, 157, 8, 4, - 244, 156, 8, 4, 244, 160, 8, 4, 244, 158, 8, 4, 244, 137, 8, 4, 244, 136, - 8, 4, 244, 139, 8, 4, 244, 138, 8, 4, 244, 142, 8, 4, 244, 141, 8, 4, - 244, 144, 8, 4, 244, 143, 8, 4, 244, 152, 8, 4, 244, 151, 8, 4, 244, 155, - 8, 4, 244, 153, 8, 4, 244, 132, 8, 4, 244, 131, 8, 4, 244, 140, 8, 4, - 244, 135, 8, 4, 244, 133, 8, 4, 244, 134, 8, 4, 233, 214, 8, 4, 233, 215, - 8, 4, 233, 227, 8, 4, 233, 226, 8, 4, 233, 229, 8, 4, 233, 228, 8, 4, - 233, 205, 8, 4, 233, 207, 8, 4, 233, 206, 8, 4, 233, 210, 8, 4, 233, 209, - 8, 4, 233, 212, 8, 4, 233, 211, 8, 4, 233, 216, 8, 4, 233, 218, 8, 4, - 233, 217, 8, 4, 233, 201, 8, 4, 233, 200, 8, 4, 233, 208, 8, 4, 233, 204, - 8, 4, 233, 202, 8, 4, 233, 203, 8, 4, 242, 133, 8, 4, 242, 132, 8, 4, - 242, 139, 8, 4, 242, 134, 8, 4, 242, 136, 8, 4, 242, 135, 8, 4, 242, 138, - 8, 4, 242, 137, 8, 4, 242, 144, 8, 4, 242, 143, 8, 4, 242, 146, 8, 4, - 242, 145, 8, 4, 242, 125, 8, 4, 242, 124, 8, 4, 242, 127, 8, 4, 242, 126, - 8, 4, 242, 129, 8, 4, 242, 128, 8, 4, 242, 131, 8, 4, 242, 130, 8, 4, - 242, 140, 8, 4, 242, 142, 8, 4, 242, 141, 8, 4, 232, 89, 8, 4, 232, 91, - 8, 4, 232, 90, 8, 4, 232, 108, 8, 4, 232, 107, 8, 4, 232, 115, 8, 4, 232, - 110, 8, 4, 232, 71, 8, 4, 232, 70, 8, 4, 232, 72, 8, 4, 232, 78, 8, 4, - 232, 75, 8, 4, 232, 84, 8, 4, 232, 79, 8, 4, 232, 102, 8, 4, 232, 106, 8, - 4, 232, 103, 8, 4, 243, 92, 8, 4, 243, 100, 8, 4, 243, 108, 8, 4, 243, - 173, 8, 4, 243, 167, 8, 4, 155, 8, 4, 243, 183, 8, 4, 242, 157, 8, 4, - 242, 156, 8, 4, 242, 159, 8, 4, 242, 158, 8, 4, 242, 186, 8, 4, 242, 181, - 8, 4, 243, 4, 8, 4, 242, 244, 8, 4, 243, 125, 8, 4, 243, 162, 8, 4, 243, - 135, 8, 4, 218, 243, 8, 4, 218, 231, 8, 4, 219, 7, 8, 4, 218, 251, 8, 4, - 218, 157, 8, 4, 218, 159, 8, 4, 218, 158, 8, 4, 218, 170, 8, 4, 218, 187, - 8, 4, 218, 175, 8, 4, 218, 214, 8, 4, 218, 227, 8, 4, 218, 218, 8, 4, - 217, 28, 8, 4, 217, 27, 8, 4, 217, 42, 8, 4, 217, 30, 8, 4, 217, 35, 8, - 4, 217, 37, 8, 4, 217, 36, 8, 4, 217, 100, 8, 4, 217, 97, 8, 4, 217, 114, - 8, 4, 217, 103, 8, 4, 217, 6, 8, 4, 217, 8, 8, 4, 217, 7, 8, 4, 217, 17, - 8, 4, 217, 16, 8, 4, 217, 21, 8, 4, 217, 18, 8, 4, 217, 82, 8, 4, 217, - 92, 8, 4, 217, 86, 8, 4, 217, 2, 8, 4, 217, 1, 8, 4, 217, 13, 8, 4, 217, - 5, 8, 4, 217, 3, 8, 4, 217, 4, 8, 4, 216, 249, 8, 4, 216, 248, 8, 4, 216, - 254, 8, 4, 216, 252, 8, 4, 216, 250, 8, 4, 216, 251, 8, 4, 250, 215, 8, - 4, 250, 212, 8, 4, 250, 235, 8, 4, 250, 223, 8, 4, 250, 232, 8, 4, 250, - 226, 8, 4, 250, 234, 8, 4, 250, 233, 8, 4, 251, 124, 8, 4, 251, 118, 8, - 4, 251, 169, 8, 4, 251, 143, 8, 4, 250, 84, 8, 4, 250, 86, 8, 4, 250, 85, - 8, 4, 250, 116, 8, 4, 250, 109, 8, 4, 250, 182, 8, 4, 250, 129, 8, 4, - 251, 71, 8, 4, 251, 99, 8, 4, 251, 75, 8, 4, 250, 68, 8, 4, 250, 67, 8, - 4, 250, 92, 8, 4, 250, 82, 8, 4, 250, 71, 8, 4, 250, 81, 8, 4, 250, 49, - 8, 4, 250, 48, 8, 4, 250, 58, 8, 4, 250, 55, 8, 4, 250, 50, 8, 4, 250, - 52, 8, 4, 216, 232, 8, 4, 216, 231, 8, 4, 216, 238, 8, 4, 216, 233, 8, 4, - 216, 235, 8, 4, 216, 234, 8, 4, 216, 237, 8, 4, 216, 236, 8, 4, 216, 244, - 8, 4, 216, 243, 8, 4, 216, 247, 8, 4, 216, 245, 8, 4, 216, 228, 8, 4, - 216, 230, 8, 4, 216, 229, 8, 4, 216, 239, 8, 4, 216, 242, 8, 4, 216, 240, - 8, 4, 216, 223, 8, 4, 216, 227, 8, 4, 216, 226, 8, 4, 216, 224, 8, 4, - 216, 225, 8, 4, 216, 218, 8, 4, 216, 217, 8, 4, 216, 222, 8, 4, 216, 221, - 8, 4, 216, 219, 8, 4, 216, 220, 8, 4, 231, 31, 8, 4, 231, 30, 8, 4, 231, - 36, 8, 4, 231, 32, 8, 4, 231, 33, 8, 4, 231, 35, 8, 4, 231, 34, 8, 4, - 231, 40, 8, 4, 231, 39, 8, 4, 231, 42, 8, 4, 231, 41, 8, 4, 231, 25, 8, - 4, 231, 26, 8, 4, 231, 28, 8, 4, 231, 29, 8, 4, 231, 37, 8, 4, 231, 38, - 8, 4, 231, 21, 8, 4, 231, 27, 8, 4, 231, 24, 8, 4, 231, 22, 8, 4, 231, - 23, 8, 4, 231, 16, 8, 4, 231, 15, 8, 4, 231, 20, 8, 4, 231, 19, 8, 4, - 231, 17, 8, 4, 231, 18, 8, 4, 224, 84, 8, 4, 182, 8, 4, 224, 140, 8, 4, - 224, 86, 8, 4, 224, 133, 8, 4, 224, 135, 8, 4, 224, 134, 8, 4, 226, 127, - 8, 4, 226, 120, 8, 4, 226, 177, 8, 4, 226, 133, 8, 4, 223, 63, 8, 4, 223, - 65, 8, 4, 223, 64, 8, 4, 224, 12, 8, 4, 224, 2, 8, 4, 224, 26, 8, 4, 224, - 13, 8, 4, 225, 36, 8, 4, 226, 94, 8, 4, 225, 56, 8, 4, 223, 44, 8, 4, - 223, 42, 8, 4, 223, 103, 8, 4, 223, 62, 8, 4, 223, 46, 8, 4, 223, 53, 8, - 4, 222, 215, 8, 4, 222, 214, 8, 4, 223, 21, 8, 4, 222, 220, 8, 4, 222, - 216, 8, 4, 222, 219, 8, 4, 223, 184, 8, 4, 223, 183, 8, 4, 223, 189, 8, - 4, 223, 185, 8, 4, 223, 186, 8, 4, 223, 188, 8, 4, 223, 187, 8, 4, 223, - 196, 8, 4, 223, 195, 8, 4, 223, 218, 8, 4, 223, 197, 8, 4, 223, 180, 8, - 4, 223, 179, 8, 4, 223, 182, 8, 4, 223, 181, 8, 4, 223, 191, 8, 4, 223, - 194, 8, 4, 223, 192, 8, 4, 223, 176, 8, 4, 223, 175, 8, 4, 223, 178, 8, - 4, 223, 177, 8, 4, 223, 170, 8, 4, 223, 169, 8, 4, 223, 174, 8, 4, 223, - 173, 8, 4, 223, 171, 8, 4, 223, 172, 8, 4, 217, 75, 8, 4, 217, 74, 8, 4, - 217, 80, 8, 4, 217, 77, 8, 4, 217, 57, 8, 4, 217, 59, 8, 4, 217, 58, 8, - 4, 217, 62, 8, 4, 217, 61, 8, 4, 217, 65, 8, 4, 217, 63, 8, 4, 217, 69, - 8, 4, 217, 68, 8, 4, 217, 72, 8, 4, 217, 70, 8, 4, 217, 53, 8, 4, 217, - 52, 8, 4, 217, 60, 8, 4, 217, 56, 8, 4, 217, 54, 8, 4, 217, 55, 8, 4, - 217, 45, 8, 4, 217, 44, 8, 4, 217, 49, 8, 4, 217, 48, 8, 4, 217, 46, 8, - 4, 217, 47, 8, 4, 251, 51, 8, 4, 251, 48, 8, 4, 251, 69, 8, 4, 251, 57, - 8, 4, 250, 249, 8, 4, 250, 248, 8, 4, 250, 251, 8, 4, 250, 250, 8, 4, - 251, 5, 8, 4, 251, 4, 8, 4, 251, 11, 8, 4, 251, 7, 8, 4, 251, 36, 8, 4, - 251, 34, 8, 4, 251, 46, 8, 4, 251, 38, 8, 4, 250, 243, 8, 4, 250, 253, 8, - 4, 250, 247, 8, 4, 250, 244, 8, 4, 250, 246, 8, 4, 250, 237, 8, 4, 250, - 236, 8, 4, 250, 241, 8, 4, 250, 240, 8, 4, 250, 238, 8, 4, 250, 239, 8, - 4, 227, 51, 8, 4, 227, 52, 8, 4, 227, 38, 8, 4, 227, 39, 8, 4, 227, 42, - 8, 4, 227, 41, 8, 4, 227, 44, 8, 4, 227, 43, 8, 4, 227, 46, 8, 4, 227, - 45, 8, 4, 227, 50, 8, 4, 227, 47, 8, 4, 227, 34, 8, 4, 227, 33, 8, 4, - 227, 40, 8, 4, 227, 37, 8, 4, 227, 35, 8, 4, 227, 36, 8, 4, 227, 28, 8, - 4, 227, 27, 8, 4, 227, 32, 8, 4, 227, 31, 8, 4, 227, 29, 8, 4, 227, 30, - 8, 4, 231, 169, 8, 4, 231, 168, 8, 4, 231, 171, 8, 4, 231, 170, 8, 4, - 231, 161, 8, 4, 231, 163, 8, 4, 231, 162, 8, 4, 231, 165, 8, 4, 231, 164, - 8, 4, 231, 167, 8, 4, 231, 166, 8, 4, 231, 156, 8, 4, 231, 155, 8, 4, - 231, 160, 8, 4, 231, 159, 8, 4, 231, 157, 8, 4, 231, 158, 8, 4, 231, 150, - 8, 4, 231, 149, 8, 4, 231, 154, 8, 4, 231, 153, 8, 4, 231, 151, 8, 4, - 231, 152, 8, 4, 224, 253, 8, 4, 224, 250, 8, 4, 225, 25, 8, 4, 225, 7, 8, - 4, 224, 163, 8, 4, 224, 165, 8, 4, 224, 164, 8, 4, 224, 178, 8, 4, 224, - 176, 8, 4, 224, 200, 8, 4, 224, 193, 8, 4, 224, 226, 8, 4, 224, 223, 8, - 4, 224, 246, 8, 4, 224, 233, 8, 4, 224, 159, 8, 4, 224, 158, 8, 4, 224, - 170, 8, 4, 224, 162, 8, 4, 224, 160, 8, 4, 224, 161, 8, 4, 224, 143, 8, - 4, 224, 142, 8, 4, 224, 149, 8, 4, 224, 146, 8, 4, 224, 144, 8, 4, 224, - 145, 8, 4, 227, 228, 8, 4, 227, 223, 8, 4, 203, 8, 4, 227, 233, 8, 4, - 227, 6, 8, 4, 227, 8, 8, 4, 227, 7, 8, 4, 227, 60, 8, 4, 227, 54, 8, 4, - 227, 75, 8, 4, 227, 63, 8, 4, 227, 155, 8, 4, 227, 216, 8, 4, 227, 185, - 8, 4, 226, 255, 8, 4, 226, 253, 8, 4, 227, 22, 8, 4, 227, 5, 8, 4, 227, - 1, 8, 4, 227, 2, 8, 4, 226, 238, 8, 4, 226, 237, 8, 4, 226, 243, 8, 4, - 226, 241, 8, 4, 226, 239, 8, 4, 226, 240, 8, 4, 237, 89, 8, 4, 237, 88, - 8, 4, 237, 98, 8, 4, 237, 90, 8, 4, 237, 94, 8, 4, 237, 93, 8, 4, 237, - 96, 8, 4, 237, 95, 8, 4, 237, 34, 8, 4, 237, 33, 8, 4, 237, 36, 8, 4, - 237, 35, 8, 4, 237, 47, 8, 4, 237, 46, 8, 4, 237, 59, 8, 4, 237, 49, 8, - 4, 237, 28, 8, 4, 237, 26, 8, 4, 237, 43, 8, 4, 237, 32, 8, 4, 237, 29, - 8, 4, 237, 30, 8, 4, 237, 20, 8, 4, 237, 19, 8, 4, 237, 24, 8, 4, 237, - 23, 8, 4, 237, 21, 8, 4, 237, 22, 8, 4, 228, 114, 8, 4, 228, 112, 8, 4, - 228, 121, 8, 4, 228, 115, 8, 4, 228, 118, 8, 4, 228, 117, 8, 4, 228, 120, - 8, 4, 228, 119, 8, 4, 228, 70, 8, 4, 228, 67, 8, 4, 228, 72, 8, 4, 228, - 71, 8, 4, 228, 101, 8, 4, 228, 100, 8, 4, 228, 110, 8, 4, 228, 104, 8, 4, - 228, 62, 8, 4, 228, 58, 8, 4, 228, 98, 8, 4, 228, 66, 8, 4, 228, 64, 8, - 4, 228, 65, 8, 4, 228, 42, 8, 4, 228, 40, 8, 4, 228, 52, 8, 4, 228, 45, - 8, 4, 228, 43, 8, 4, 228, 44, 8, 4, 237, 78, 8, 4, 237, 77, 8, 4, 237, - 84, 8, 4, 237, 79, 8, 4, 237, 81, 8, 4, 237, 80, 8, 4, 237, 83, 8, 4, - 237, 82, 8, 4, 237, 69, 8, 4, 237, 71, 8, 4, 237, 70, 8, 4, 237, 74, 8, - 4, 237, 73, 8, 4, 237, 76, 8, 4, 237, 75, 8, 4, 237, 65, 8, 4, 237, 64, - 8, 4, 237, 72, 8, 4, 237, 68, 8, 4, 237, 66, 8, 4, 237, 67, 8, 4, 237, - 61, 8, 4, 237, 60, 8, 4, 237, 63, 8, 4, 237, 62, 8, 4, 232, 7, 8, 4, 232, - 6, 8, 4, 232, 13, 8, 4, 232, 8, 8, 4, 232, 10, 8, 4, 232, 9, 8, 4, 232, - 12, 8, 4, 232, 11, 8, 4, 231, 253, 8, 4, 231, 254, 8, 4, 232, 2, 8, 4, - 232, 1, 8, 4, 232, 5, 8, 4, 232, 3, 8, 4, 231, 249, 8, 4, 232, 0, 8, 4, - 231, 252, 8, 4, 231, 250, 8, 4, 231, 251, 8, 4, 231, 244, 8, 4, 231, 243, - 8, 4, 231, 248, 8, 4, 231, 247, 8, 4, 231, 245, 8, 4, 231, 246, 8, 4, - 231, 59, 8, 4, 231, 58, 8, 4, 231, 67, 8, 4, 231, 61, 8, 4, 231, 64, 8, - 4, 231, 63, 8, 4, 231, 66, 8, 4, 231, 65, 8, 4, 231, 47, 8, 4, 231, 49, - 8, 4, 231, 48, 8, 4, 231, 52, 8, 4, 231, 51, 8, 4, 231, 56, 8, 4, 231, - 53, 8, 4, 231, 45, 8, 4, 231, 44, 8, 4, 231, 50, 8, 4, 231, 46, 8, 4, - 218, 123, 8, 4, 218, 122, 8, 4, 218, 130, 8, 4, 218, 125, 8, 4, 218, 127, - 8, 4, 218, 126, 8, 4, 218, 129, 8, 4, 218, 128, 8, 4, 218, 112, 8, 4, - 218, 113, 8, 4, 218, 117, 8, 4, 218, 116, 8, 4, 218, 121, 8, 4, 218, 119, - 8, 4, 218, 94, 8, 4, 218, 92, 8, 4, 218, 104, 8, 4, 218, 97, 8, 4, 218, - 95, 8, 4, 218, 96, 8, 4, 217, 237, 8, 4, 217, 235, 8, 4, 217, 250, 8, 4, - 217, 238, 8, 4, 217, 245, 8, 4, 217, 244, 8, 4, 217, 247, 8, 4, 217, 246, - 8, 4, 217, 185, 8, 4, 217, 184, 8, 4, 217, 187, 8, 4, 217, 186, 8, 4, - 217, 212, 8, 4, 217, 209, 8, 4, 217, 231, 8, 4, 217, 215, 8, 4, 217, 177, - 8, 4, 217, 175, 8, 4, 217, 200, 8, 4, 217, 183, 8, 4, 217, 180, 8, 4, - 217, 181, 8, 4, 217, 160, 8, 4, 217, 159, 8, 4, 217, 166, 8, 4, 217, 163, - 8, 4, 217, 161, 8, 4, 217, 162, 8, 32, 228, 101, 8, 32, 235, 67, 8, 32, - 236, 89, 8, 32, 231, 61, 8, 32, 250, 55, 8, 32, 223, 189, 8, 32, 244, - 143, 8, 32, 244, 174, 8, 32, 233, 196, 8, 32, 242, 133, 8, 32, 234, 193, - 8, 32, 252, 152, 8, 32, 233, 115, 8, 32, 217, 231, 8, 32, 228, 185, 8, - 32, 242, 127, 8, 32, 222, 110, 8, 32, 245, 0, 8, 32, 217, 5, 8, 32, 250, - 49, 8, 32, 249, 97, 8, 32, 251, 228, 8, 32, 244, 139, 8, 32, 231, 53, 8, - 32, 221, 0, 8, 32, 230, 120, 8, 32, 237, 65, 8, 32, 217, 17, 8, 32, 228, - 167, 8, 32, 243, 44, 8, 32, 217, 237, 8, 32, 219, 53, 8, 32, 224, 149, 8, - 32, 219, 156, 8, 32, 217, 114, 8, 32, 237, 59, 8, 32, 231, 24, 8, 32, - 237, 63, 8, 32, 244, 51, 8, 32, 237, 83, 8, 32, 218, 187, 8, 32, 247, - 111, 8, 32, 224, 161, 8, 32, 235, 63, 8, 32, 250, 58, 8, 32, 250, 85, 8, - 32, 250, 223, 8, 32, 242, 130, 8, 32, 224, 253, 8, 32, 217, 4, 8, 32, - 224, 193, 8, 32, 251, 46, 8, 32, 216, 235, 8, 32, 232, 192, 8, 32, 236, - 184, 235, 28, 1, 252, 237, 235, 28, 1, 187, 235, 28, 1, 229, 141, 235, - 28, 1, 249, 207, 235, 28, 1, 222, 155, 235, 28, 1, 222, 35, 235, 28, 1, - 245, 0, 235, 28, 1, 175, 235, 28, 1, 236, 149, 235, 28, 1, 237, 123, 235, - 28, 1, 251, 169, 235, 28, 1, 251, 69, 235, 28, 1, 247, 74, 235, 28, 1, - 221, 55, 235, 28, 1, 221, 47, 235, 28, 1, 196, 235, 28, 1, 208, 235, 28, - 1, 235, 188, 235, 28, 1, 226, 177, 235, 28, 1, 217, 80, 235, 28, 1, 217, - 114, 235, 28, 1, 232, 115, 235, 28, 1, 155, 235, 28, 1, 218, 138, 235, - 28, 1, 243, 121, 235, 28, 1, 246, 8, 235, 28, 1, 219, 7, 235, 28, 1, 225, - 25, 235, 28, 1, 184, 235, 28, 1, 244, 125, 235, 28, 1, 60, 235, 28, 1, - 254, 234, 235, 28, 1, 73, 235, 28, 1, 246, 115, 235, 28, 1, 72, 235, 28, - 1, 74, 235, 28, 1, 68, 235, 28, 1, 220, 110, 235, 28, 1, 220, 105, 235, - 28, 1, 230, 167, 235, 28, 1, 145, 233, 40, 221, 205, 235, 28, 1, 145, - 232, 238, 229, 37, 235, 28, 1, 145, 233, 40, 250, 57, 235, 28, 1, 145, - 233, 40, 252, 41, 235, 28, 1, 145, 233, 40, 208, 235, 28, 1, 145, 233, - 40, 237, 104, 235, 28, 228, 197, 250, 168, 235, 28, 228, 197, 245, 90, - 223, 136, 38, 4, 246, 250, 38, 4, 246, 247, 38, 4, 243, 148, 38, 4, 218, - 224, 38, 4, 218, 223, 38, 4, 229, 191, 38, 4, 252, 91, 38, 4, 252, 137, - 38, 4, 234, 34, 38, 4, 236, 23, 38, 4, 233, 223, 38, 4, 244, 201, 38, 4, - 245, 226, 38, 4, 219, 160, 38, 4, 222, 80, 38, 4, 222, 21, 38, 4, 249, - 28, 38, 4, 249, 25, 38, 4, 235, 118, 38, 4, 227, 200, 38, 4, 249, 82, 38, - 4, 232, 163, 38, 4, 226, 84, 38, 4, 224, 244, 38, 4, 217, 90, 38, 4, 217, - 71, 38, 4, 251, 91, 38, 4, 237, 113, 38, 4, 232, 14, 38, 4, 218, 22, 38, - 4, 236, 183, 38, 4, 232, 98, 38, 4, 244, 184, 38, 4, 234, 16, 38, 4, 232, - 139, 38, 4, 231, 72, 38, 4, 72, 38, 4, 237, 223, 38, 4, 243, 112, 38, 4, - 243, 96, 38, 4, 218, 204, 38, 4, 218, 195, 38, 4, 229, 108, 38, 4, 252, - 89, 38, 4, 252, 84, 38, 4, 234, 32, 38, 4, 236, 21, 38, 4, 233, 222, 38, - 4, 244, 199, 38, 4, 245, 203, 38, 4, 219, 94, 38, 4, 221, 205, 38, 4, - 222, 2, 38, 4, 249, 20, 38, 4, 249, 24, 38, 4, 235, 67, 38, 4, 227, 147, - 38, 4, 249, 15, 38, 4, 232, 160, 38, 4, 224, 140, 38, 4, 224, 221, 38, 4, - 217, 42, 38, 4, 217, 67, 38, 4, 250, 235, 38, 4, 237, 98, 38, 4, 232, 13, - 38, 4, 217, 250, 38, 4, 236, 113, 38, 4, 232, 96, 38, 4, 244, 103, 38, 4, - 233, 196, 38, 4, 232, 62, 38, 4, 231, 67, 38, 4, 60, 38, 4, 254, 131, 38, - 4, 232, 111, 38, 4, 155, 38, 4, 243, 191, 38, 4, 219, 7, 38, 4, 218, 253, - 38, 4, 187, 38, 4, 252, 94, 38, 4, 252, 237, 38, 4, 234, 37, 38, 4, 236, - 26, 38, 4, 236, 25, 38, 4, 233, 225, 38, 4, 244, 204, 38, 4, 246, 8, 38, - 4, 219, 189, 38, 4, 222, 155, 38, 4, 222, 35, 38, 4, 249, 36, 38, 4, 249, - 27, 38, 4, 235, 188, 38, 4, 203, 38, 4, 249, 207, 38, 4, 232, 169, 38, 4, - 226, 177, 38, 4, 225, 25, 38, 4, 217, 114, 38, 4, 217, 80, 38, 4, 251, - 169, 38, 4, 237, 123, 38, 4, 232, 18, 38, 4, 184, 38, 4, 175, 38, 4, 236, - 233, 38, 4, 232, 100, 38, 4, 245, 0, 38, 4, 196, 38, 4, 208, 38, 4, 231, - 77, 38, 4, 230, 127, 38, 4, 230, 124, 38, 4, 242, 248, 38, 4, 218, 180, - 38, 4, 218, 176, 38, 4, 229, 21, 38, 4, 252, 87, 38, 4, 252, 34, 38, 4, - 234, 30, 38, 4, 236, 19, 38, 4, 233, 220, 38, 4, 244, 196, 38, 4, 245, - 134, 38, 4, 219, 64, 38, 4, 221, 122, 38, 4, 221, 236, 38, 4, 249, 18, - 38, 4, 249, 22, 38, 4, 234, 248, 38, 4, 227, 67, 38, 4, 248, 150, 38, 4, - 232, 152, 38, 4, 224, 14, 38, 4, 224, 195, 38, 4, 217, 19, 38, 4, 217, - 64, 38, 4, 250, 130, 38, 4, 237, 50, 38, 4, 232, 4, 38, 4, 217, 216, 38, - 4, 236, 41, 38, 4, 232, 94, 38, 4, 244, 60, 38, 4, 233, 119, 38, 4, 231, - 195, 38, 4, 231, 54, 38, 4, 68, 38, 4, 220, 87, 38, 4, 242, 173, 38, 4, - 242, 163, 38, 4, 218, 165, 38, 4, 218, 161, 38, 4, 228, 202, 38, 4, 252, - 86, 38, 4, 251, 248, 38, 4, 234, 29, 38, 4, 236, 18, 38, 4, 233, 219, 38, - 4, 244, 195, 38, 4, 245, 92, 38, 4, 219, 56, 38, 4, 221, 0, 38, 4, 221, - 223, 38, 4, 249, 16, 38, 4, 249, 21, 38, 4, 234, 231, 38, 4, 227, 22, 38, - 4, 247, 111, 38, 4, 232, 148, 38, 4, 223, 103, 38, 4, 224, 170, 38, 4, - 217, 13, 38, 4, 217, 60, 38, 4, 250, 92, 38, 4, 237, 43, 38, 4, 232, 0, - 38, 4, 217, 200, 38, 4, 236, 7, 38, 4, 232, 93, 38, 4, 244, 17, 38, 4, - 233, 99, 38, 4, 231, 144, 38, 4, 231, 50, 38, 4, 74, 38, 4, 230, 138, 38, - 4, 232, 81, 38, 4, 243, 4, 38, 4, 242, 249, 38, 4, 218, 187, 38, 4, 218, - 181, 38, 4, 229, 37, 38, 4, 252, 88, 38, 4, 252, 41, 38, 4, 234, 31, 38, - 4, 236, 20, 38, 4, 233, 221, 38, 4, 244, 198, 38, 4, 244, 197, 38, 4, - 245, 139, 38, 4, 219, 72, 38, 4, 101, 38, 4, 221, 239, 38, 4, 249, 19, - 38, 4, 249, 23, 38, 4, 235, 12, 38, 4, 227, 75, 38, 4, 248, 167, 38, 4, - 232, 154, 38, 4, 224, 26, 38, 4, 224, 200, 38, 4, 217, 21, 38, 4, 217, - 65, 38, 4, 250, 182, 38, 4, 237, 59, 38, 4, 232, 5, 38, 4, 217, 231, 38, - 4, 236, 57, 38, 4, 232, 95, 38, 4, 244, 68, 38, 4, 233, 136, 38, 4, 231, - 204, 38, 4, 231, 56, 38, 4, 73, 38, 4, 246, 197, 38, 4, 232, 104, 38, 4, - 243, 162, 38, 4, 243, 138, 38, 4, 218, 227, 38, 4, 218, 220, 38, 4, 229, - 198, 38, 4, 252, 92, 38, 4, 252, 144, 38, 4, 234, 35, 38, 4, 236, 24, 38, - 4, 236, 22, 38, 4, 233, 224, 38, 4, 244, 202, 38, 4, 244, 200, 38, 4, - 245, 231, 38, 4, 219, 165, 38, 4, 222, 87, 38, 4, 222, 22, 38, 4, 249, - 29, 38, 4, 249, 26, 38, 4, 235, 122, 38, 4, 227, 216, 38, 4, 249, 92, 38, - 4, 232, 164, 38, 4, 226, 94, 38, 4, 224, 246, 38, 4, 217, 92, 38, 4, 217, - 72, 38, 4, 251, 99, 38, 4, 237, 114, 38, 4, 232, 15, 38, 4, 218, 25, 38, - 4, 236, 184, 38, 4, 232, 99, 38, 4, 232, 97, 38, 4, 244, 191, 38, 4, 244, - 181, 38, 4, 234, 25, 38, 4, 232, 141, 38, 4, 231, 73, 38, 4, 232, 117, - 38, 4, 235, 93, 38, 250, 168, 38, 245, 90, 223, 136, 38, 228, 82, 78, 38, - 4, 232, 153, 246, 8, 38, 4, 232, 153, 175, 38, 4, 232, 153, 224, 14, 38, - 16, 245, 223, 38, 16, 236, 182, 38, 16, 221, 174, 38, 16, 232, 38, 38, - 16, 252, 205, 38, 16, 246, 7, 38, 16, 222, 152, 38, 16, 249, 165, 38, 16, - 248, 149, 38, 16, 235, 253, 38, 16, 221, 125, 38, 16, 248, 166, 38, 16, - 237, 51, 38, 20, 217, 84, 38, 20, 107, 38, 20, 103, 38, 20, 160, 38, 20, - 154, 38, 20, 174, 38, 20, 182, 38, 20, 191, 38, 20, 185, 38, 20, 190, 38, - 4, 232, 153, 196, 38, 4, 232, 153, 248, 167, 31, 6, 1, 217, 88, 31, 3, 1, - 217, 88, 31, 6, 1, 247, 71, 31, 3, 1, 247, 71, 31, 6, 1, 210, 247, 73, - 31, 3, 1, 210, 247, 73, 31, 6, 1, 237, 162, 31, 3, 1, 237, 162, 31, 6, 1, - 248, 181, 31, 3, 1, 248, 181, 31, 6, 1, 233, 123, 220, 102, 31, 3, 1, - 233, 123, 220, 102, 31, 6, 1, 252, 2, 230, 143, 31, 3, 1, 252, 2, 230, - 143, 31, 6, 1, 232, 123, 218, 11, 31, 3, 1, 232, 123, 218, 11, 31, 6, 1, - 218, 8, 2, 252, 234, 218, 11, 31, 3, 1, 218, 8, 2, 252, 234, 218, 11, 31, - 6, 1, 237, 160, 218, 36, 31, 3, 1, 237, 160, 218, 36, 31, 6, 1, 210, 217, - 200, 31, 3, 1, 210, 217, 200, 31, 6, 1, 237, 160, 60, 31, 3, 1, 237, 160, - 60, 31, 6, 1, 250, 197, 235, 25, 217, 178, 31, 3, 1, 250, 197, 235, 25, - 217, 178, 31, 6, 1, 252, 46, 217, 178, 31, 3, 1, 252, 46, 217, 178, 31, - 6, 1, 237, 160, 250, 197, 235, 25, 217, 178, 31, 3, 1, 237, 160, 250, - 197, 235, 25, 217, 178, 31, 6, 1, 217, 233, 31, 3, 1, 217, 233, 31, 6, 1, - 224, 21, 249, 92, 31, 3, 1, 224, 21, 249, 92, 31, 6, 1, 224, 21, 246, - 217, 31, 3, 1, 224, 21, 246, 217, 31, 6, 1, 224, 21, 246, 205, 31, 3, 1, - 224, 21, 246, 205, 31, 6, 1, 233, 127, 74, 31, 3, 1, 233, 127, 74, 31, 6, - 1, 252, 70, 74, 31, 3, 1, 252, 70, 74, 31, 6, 1, 51, 233, 127, 74, 31, 3, - 1, 51, 233, 127, 74, 31, 1, 233, 86, 74, 36, 31, 219, 42, 36, 31, 222, - 66, 233, 162, 55, 36, 31, 242, 162, 233, 162, 55, 36, 31, 221, 232, 233, - 162, 55, 224, 53, 253, 251, 36, 31, 236, 194, 36, 31, 229, 203, 31, 236, - 194, 31, 229, 203, 31, 6, 1, 247, 82, 31, 3, 1, 247, 82, 31, 6, 1, 247, - 64, 31, 3, 1, 247, 64, 31, 6, 1, 217, 50, 31, 3, 1, 217, 50, 31, 6, 1, - 251, 108, 31, 3, 1, 251, 108, 31, 6, 1, 247, 63, 31, 3, 1, 247, 63, 31, - 6, 1, 222, 88, 2, 233, 193, 96, 31, 3, 1, 222, 88, 2, 233, 193, 96, 31, - 6, 1, 220, 223, 31, 3, 1, 220, 223, 31, 6, 1, 221, 33, 31, 3, 1, 221, 33, - 31, 6, 1, 221, 37, 31, 3, 1, 221, 37, 31, 6, 1, 222, 93, 31, 3, 1, 222, - 93, 31, 6, 1, 242, 151, 31, 3, 1, 242, 151, 31, 6, 1, 224, 155, 31, 3, 1, - 224, 155, 139, 1, 60, 139, 1, 175, 139, 1, 68, 139, 1, 236, 7, 139, 1, - 246, 250, 139, 1, 227, 200, 139, 1, 222, 142, 139, 1, 74, 139, 1, 231, - 67, 139, 1, 72, 139, 1, 235, 188, 139, 1, 187, 139, 1, 227, 98, 139, 1, - 227, 143, 139, 1, 235, 117, 139, 1, 234, 15, 139, 1, 222, 152, 139, 1, - 232, 168, 139, 1, 232, 17, 139, 1, 189, 139, 1, 223, 43, 139, 1, 233, 99, - 139, 1, 224, 216, 139, 1, 224, 140, 139, 1, 224, 225, 139, 1, 225, 44, - 139, 1, 235, 208, 139, 1, 236, 159, 139, 1, 231, 116, 139, 1, 231, 144, - 139, 1, 231, 255, 139, 1, 217, 214, 139, 1, 224, 170, 139, 1, 217, 182, - 139, 1, 184, 139, 1, 231, 147, 139, 1, 236, 157, 139, 1, 229, 145, 139, - 1, 232, 14, 139, 1, 231, 146, 139, 1, 228, 199, 139, 1, 218, 164, 139, 1, - 229, 191, 139, 1, 245, 226, 139, 1, 227, 22, 139, 1, 234, 231, 139, 1, - 233, 196, 139, 1, 232, 62, 139, 1, 227, 161, 139, 1, 227, 249, 139, 1, - 236, 168, 139, 1, 232, 86, 139, 1, 232, 100, 139, 1, 232, 115, 139, 1, - 224, 200, 139, 1, 228, 200, 139, 1, 245, 92, 139, 1, 245, 136, 139, 1, - 219, 7, 139, 1, 208, 139, 1, 235, 67, 139, 1, 229, 108, 139, 1, 234, 244, - 139, 1, 236, 57, 139, 1, 234, 33, 139, 1, 227, 187, 139, 1, 233, 251, - 139, 1, 196, 139, 1, 221, 205, 139, 1, 236, 113, 139, 1, 233, 136, 139, - 1, 234, 36, 139, 1, 222, 50, 139, 1, 236, 26, 139, 1, 222, 65, 139, 1, - 231, 145, 139, 1, 226, 147, 139, 1, 246, 4, 139, 1, 236, 28, 139, 1, 236, - 54, 139, 36, 164, 236, 36, 139, 36, 164, 220, 250, 139, 232, 16, 139, - 245, 90, 223, 136, 139, 250, 175, 139, 250, 168, 139, 225, 67, 139, 228, - 82, 78, 58, 1, 251, 21, 145, 217, 241, 229, 72, 58, 1, 251, 21, 145, 218, - 46, 229, 72, 58, 1, 251, 21, 145, 217, 241, 225, 8, 58, 1, 251, 21, 145, - 218, 46, 225, 8, 58, 1, 251, 21, 145, 217, 241, 228, 98, 58, 1, 251, 21, - 145, 218, 46, 228, 98, 58, 1, 251, 21, 145, 217, 241, 227, 22, 58, 1, - 251, 21, 145, 218, 46, 227, 22, 58, 1, 246, 85, 247, 143, 145, 135, 58, - 1, 116, 247, 143, 145, 135, 58, 1, 233, 194, 247, 143, 145, 135, 58, 1, - 109, 247, 143, 145, 135, 58, 1, 246, 84, 247, 143, 145, 135, 58, 1, 246, - 85, 247, 143, 235, 109, 145, 135, 58, 1, 116, 247, 143, 235, 109, 145, - 135, 58, 1, 233, 194, 247, 143, 235, 109, 145, 135, 58, 1, 109, 247, 143, - 235, 109, 145, 135, 58, 1, 246, 84, 247, 143, 235, 109, 145, 135, 58, 1, - 246, 85, 235, 109, 145, 135, 58, 1, 116, 235, 109, 145, 135, 58, 1, 233, - 194, 235, 109, 145, 135, 58, 1, 109, 235, 109, 145, 135, 58, 1, 246, 84, - 235, 109, 145, 135, 58, 1, 61, 69, 135, 58, 1, 61, 224, 55, 58, 1, 61, - 186, 135, 58, 1, 234, 237, 45, 250, 124, 254, 119, 58, 1, 227, 241, 108, - 65, 58, 1, 227, 241, 113, 65, 58, 1, 227, 241, 246, 95, 78, 58, 1, 227, - 241, 237, 170, 246, 95, 78, 58, 1, 109, 237, 170, 246, 95, 78, 58, 1, - 223, 125, 25, 116, 221, 132, 58, 1, 223, 125, 25, 109, 221, 132, 7, 6, 1, - 246, 241, 254, 168, 7, 3, 1, 246, 241, 254, 168, 7, 6, 1, 246, 241, 254, - 191, 7, 3, 1, 246, 241, 254, 191, 7, 6, 1, 243, 136, 7, 3, 1, 243, 136, - 7, 6, 1, 220, 189, 7, 3, 1, 220, 189, 7, 6, 1, 221, 94, 7, 3, 1, 221, 94, - 7, 6, 1, 250, 90, 7, 3, 1, 250, 90, 7, 6, 1, 250, 91, 2, 250, 168, 7, 3, - 1, 250, 91, 2, 250, 168, 7, 1, 3, 6, 246, 74, 7, 1, 3, 6, 198, 7, 6, 1, - 255, 58, 7, 3, 1, 255, 58, 7, 6, 1, 254, 93, 7, 3, 1, 254, 93, 7, 6, 1, - 253, 232, 7, 3, 1, 253, 232, 7, 6, 1, 253, 220, 7, 3, 1, 253, 220, 7, 6, - 1, 253, 221, 2, 186, 135, 7, 3, 1, 253, 221, 2, 186, 135, 7, 6, 1, 253, - 212, 7, 3, 1, 253, 212, 7, 6, 1, 210, 251, 203, 2, 248, 145, 7, 3, 1, - 210, 251, 203, 2, 248, 145, 7, 6, 1, 237, 18, 2, 92, 7, 3, 1, 237, 18, 2, - 92, 7, 6, 1, 237, 18, 2, 249, 11, 92, 7, 3, 1, 237, 18, 2, 249, 11, 92, - 7, 6, 1, 237, 18, 2, 214, 25, 249, 11, 92, 7, 3, 1, 237, 18, 2, 214, 25, - 249, 11, 92, 7, 6, 1, 252, 1, 153, 7, 3, 1, 252, 1, 153, 7, 6, 1, 235, - 202, 2, 116, 92, 7, 3, 1, 235, 202, 2, 116, 92, 7, 6, 1, 142, 2, 171, - 214, 230, 74, 7, 3, 1, 142, 2, 171, 214, 230, 74, 7, 6, 1, 142, 2, 234, - 247, 7, 3, 1, 142, 2, 234, 247, 7, 6, 1, 230, 127, 7, 3, 1, 230, 127, 7, - 6, 1, 230, 60, 2, 214, 221, 225, 249, 48, 7, 3, 1, 230, 60, 2, 214, 221, - 225, 249, 48, 7, 6, 1, 230, 60, 2, 245, 146, 7, 3, 1, 230, 60, 2, 245, - 146, 7, 6, 1, 230, 60, 2, 223, 222, 222, 135, 7, 3, 1, 230, 60, 2, 223, - 222, 222, 135, 7, 6, 1, 228, 164, 2, 214, 221, 225, 249, 48, 7, 3, 1, - 228, 164, 2, 214, 221, 225, 249, 48, 7, 6, 1, 228, 164, 2, 249, 11, 92, - 7, 3, 1, 228, 164, 2, 249, 11, 92, 7, 6, 1, 228, 39, 227, 58, 7, 3, 1, - 228, 39, 227, 58, 7, 6, 1, 227, 14, 227, 58, 7, 3, 1, 227, 14, 227, 58, - 7, 6, 1, 220, 11, 2, 249, 11, 92, 7, 3, 1, 220, 11, 2, 249, 11, 92, 7, 6, - 1, 219, 48, 7, 3, 1, 219, 48, 7, 6, 1, 219, 75, 217, 157, 7, 3, 1, 219, - 75, 217, 157, 7, 6, 1, 221, 235, 2, 92, 7, 3, 1, 221, 235, 2, 92, 7, 6, - 1, 221, 235, 2, 214, 221, 225, 249, 48, 7, 3, 1, 221, 235, 2, 214, 221, - 225, 249, 48, 7, 6, 1, 219, 157, 7, 3, 1, 219, 157, 7, 6, 1, 246, 123, 7, - 3, 1, 246, 123, 7, 6, 1, 237, 151, 7, 3, 1, 237, 151, 7, 6, 1, 250, 158, - 7, 3, 1, 250, 158, 58, 1, 220, 34, 7, 3, 1, 247, 102, 7, 3, 1, 234, 219, - 7, 3, 1, 233, 80, 7, 3, 1, 231, 109, 7, 3, 1, 227, 13, 7, 1, 3, 6, 227, - 13, 7, 3, 1, 220, 249, 7, 3, 1, 220, 94, 7, 6, 1, 237, 188, 250, 46, 7, - 3, 1, 237, 188, 250, 46, 7, 6, 1, 237, 188, 246, 74, 7, 3, 1, 237, 188, - 246, 74, 7, 6, 1, 237, 188, 245, 67, 7, 6, 1, 215, 237, 188, 245, 67, 7, - 3, 1, 215, 237, 188, 245, 67, 7, 6, 1, 215, 153, 7, 3, 1, 215, 153, 7, 6, - 1, 237, 188, 152, 7, 3, 1, 237, 188, 152, 7, 6, 1, 237, 188, 198, 7, 3, - 1, 237, 188, 198, 7, 6, 1, 237, 188, 222, 201, 7, 3, 1, 237, 188, 222, - 201, 58, 1, 109, 250, 217, 255, 0, 58, 1, 250, 175, 58, 1, 224, 192, 246, - 154, 55, 7, 6, 1, 226, 150, 7, 3, 1, 226, 150, 7, 246, 158, 1, 210, 246, - 74, 7, 246, 158, 1, 210, 230, 59, 7, 246, 158, 1, 237, 170, 189, 7, 246, - 158, 1, 242, 107, 234, 250, 7, 246, 158, 1, 254, 49, 189, 223, 19, 232, - 225, 1, 60, 223, 19, 232, 225, 1, 72, 223, 19, 232, 225, 5, 247, 84, 223, - 19, 232, 225, 1, 68, 223, 19, 232, 225, 1, 73, 223, 19, 232, 225, 1, 74, - 223, 19, 232, 225, 5, 243, 175, 223, 19, 232, 225, 1, 236, 57, 223, 19, - 232, 225, 1, 236, 125, 223, 19, 232, 225, 1, 244, 68, 223, 19, 232, 225, - 1, 244, 112, 223, 19, 232, 225, 5, 254, 95, 223, 19, 232, 225, 1, 250, - 182, 223, 19, 232, 225, 1, 251, 11, 223, 19, 232, 225, 1, 237, 59, 223, - 19, 232, 225, 1, 237, 99, 223, 19, 232, 225, 1, 221, 11, 223, 19, 232, - 225, 1, 221, 15, 223, 19, 232, 225, 1, 249, 107, 223, 19, 232, 225, 1, - 249, 115, 223, 19, 232, 225, 1, 101, 223, 19, 232, 225, 1, 221, 239, 223, - 19, 232, 225, 1, 248, 167, 223, 19, 232, 225, 1, 249, 19, 223, 19, 232, - 225, 1, 231, 204, 223, 19, 232, 225, 1, 229, 37, 223, 19, 232, 225, 1, - 229, 118, 223, 19, 232, 225, 1, 252, 41, 223, 19, 232, 225, 1, 252, 88, - 223, 19, 232, 225, 1, 233, 136, 223, 19, 232, 225, 1, 227, 75, 223, 19, - 232, 225, 1, 235, 12, 223, 19, 232, 225, 1, 227, 44, 223, 19, 232, 225, - 1, 224, 26, 223, 19, 232, 225, 1, 243, 4, 223, 19, 232, 225, 29, 5, 60, - 223, 19, 232, 225, 29, 5, 72, 223, 19, 232, 225, 29, 5, 68, 223, 19, 232, - 225, 29, 5, 73, 223, 19, 232, 225, 29, 5, 230, 127, 223, 19, 232, 225, - 229, 33, 234, 67, 223, 19, 232, 225, 229, 33, 234, 66, 223, 19, 232, 225, - 229, 33, 234, 65, 223, 19, 232, 225, 229, 33, 234, 64, 231, 187, 237, - 212, 245, 108, 131, 228, 89, 231, 187, 237, 212, 245, 108, 131, 243, 194, - 231, 187, 237, 212, 245, 108, 148, 228, 87, 231, 187, 237, 212, 245, 108, - 131, 224, 75, 231, 187, 237, 212, 245, 108, 131, 246, 231, 231, 187, 237, - 212, 245, 108, 148, 224, 74, 231, 187, 237, 212, 228, 90, 78, 231, 187, - 237, 212, 229, 56, 78, 231, 187, 237, 212, 227, 4, 78, 231, 187, 237, - 212, 228, 91, 78, 229, 138, 1, 175, 229, 138, 1, 236, 149, 229, 138, 1, - 245, 0, 229, 138, 1, 232, 115, 229, 138, 1, 251, 169, 229, 138, 1, 251, - 69, 229, 138, 1, 237, 123, 229, 138, 1, 231, 77, 229, 138, 1, 222, 155, - 229, 138, 1, 222, 35, 229, 138, 1, 249, 207, 229, 138, 1, 208, 229, 138, - 1, 187, 229, 138, 1, 229, 141, 229, 138, 1, 252, 237, 229, 138, 1, 196, - 229, 138, 1, 221, 55, 229, 138, 1, 221, 47, 229, 138, 1, 247, 74, 229, - 138, 1, 219, 7, 229, 138, 1, 217, 80, 229, 138, 1, 217, 114, 229, 138, 1, - 3, 60, 229, 138, 1, 184, 229, 138, 1, 203, 229, 138, 1, 235, 188, 229, - 138, 1, 225, 25, 229, 138, 1, 226, 177, 229, 138, 1, 155, 229, 138, 1, - 60, 229, 138, 1, 72, 229, 138, 1, 68, 229, 138, 1, 73, 229, 138, 1, 74, - 229, 138, 1, 228, 155, 229, 138, 1, 218, 138, 229, 138, 1, 246, 8, 229, - 138, 1, 244, 160, 229, 138, 1, 246, 250, 229, 138, 223, 97, 1, 219, 7, - 229, 138, 223, 97, 1, 184, 229, 138, 1, 221, 29, 229, 138, 1, 221, 19, - 229, 138, 1, 249, 132, 229, 138, 1, 231, 217, 229, 138, 1, 254, 144, 184, - 229, 138, 1, 219, 69, 225, 25, 229, 138, 1, 219, 70, 155, 229, 138, 1, - 254, 1, 246, 8, 229, 138, 223, 97, 1, 203, 229, 138, 223, 61, 1, 203, - 229, 138, 1, 251, 146, 229, 138, 224, 109, 243, 160, 78, 229, 138, 51, - 243, 160, 78, 229, 138, 164, 225, 18, 229, 138, 164, 51, 225, 18, 158, 5, - 254, 95, 158, 5, 219, 77, 158, 1, 60, 158, 1, 255, 58, 158, 1, 72, 158, - 1, 237, 255, 158, 1, 68, 158, 1, 220, 23, 158, 1, 167, 152, 158, 1, 167, - 227, 53, 158, 1, 167, 153, 158, 1, 167, 235, 18, 158, 1, 73, 158, 1, 246, - 250, 158, 1, 254, 196, 158, 1, 74, 158, 1, 230, 127, 158, 1, 253, 232, - 158, 1, 175, 158, 1, 236, 149, 158, 1, 245, 0, 158, 1, 244, 125, 158, 1, - 232, 115, 158, 1, 251, 169, 158, 1, 251, 69, 158, 1, 237, 123, 158, 1, - 237, 103, 158, 1, 231, 77, 158, 1, 221, 29, 158, 1, 221, 19, 158, 1, 249, - 132, 158, 1, 249, 116, 158, 1, 231, 217, 158, 1, 222, 155, 158, 1, 222, - 35, 158, 1, 249, 207, 158, 1, 249, 36, 158, 1, 208, 158, 1, 187, 158, 1, - 229, 141, 158, 1, 252, 237, 158, 1, 252, 94, 158, 1, 196, 158, 1, 184, - 158, 1, 203, 158, 1, 235, 188, 158, 1, 219, 189, 158, 1, 225, 25, 158, 1, - 223, 218, 158, 1, 226, 177, 158, 1, 155, 158, 1, 235, 17, 158, 250, 147, - 5, 243, 209, 158, 29, 5, 255, 58, 158, 29, 5, 72, 158, 29, 5, 237, 255, - 158, 29, 5, 68, 158, 29, 5, 220, 23, 158, 29, 5, 167, 152, 158, 29, 5, - 167, 227, 53, 158, 29, 5, 167, 153, 158, 29, 5, 167, 235, 18, 158, 29, 5, - 73, 158, 29, 5, 246, 250, 158, 29, 5, 254, 196, 158, 29, 5, 74, 158, 29, - 5, 230, 127, 158, 29, 5, 253, 232, 158, 5, 219, 82, 158, 249, 167, 158, - 51, 249, 167, 158, 20, 217, 84, 158, 20, 107, 158, 20, 103, 158, 20, 160, - 158, 20, 154, 158, 20, 174, 158, 20, 182, 158, 20, 191, 158, 20, 185, - 158, 20, 190, 36, 80, 20, 217, 84, 36, 80, 20, 107, 36, 80, 20, 103, 36, - 80, 20, 160, 36, 80, 20, 154, 36, 80, 20, 174, 36, 80, 20, 182, 36, 80, - 20, 191, 36, 80, 20, 185, 36, 80, 20, 190, 36, 80, 1, 60, 36, 80, 1, 68, - 36, 80, 1, 175, 36, 80, 1, 208, 36, 80, 1, 187, 36, 80, 1, 203, 36, 80, - 1, 219, 94, 36, 80, 5, 253, 219, 80, 5, 223, 253, 251, 146, 80, 5, 251, - 147, 219, 82, 80, 5, 51, 251, 147, 219, 82, 80, 5, 251, 147, 103, 80, 5, - 251, 147, 160, 80, 5, 251, 147, 253, 219, 80, 5, 228, 186, 80, 244, 224, - 245, 185, 80, 251, 134, 80, 243, 155, 236, 190, 235, 68, 20, 217, 84, - 236, 190, 235, 68, 20, 107, 236, 190, 235, 68, 20, 103, 236, 190, 235, - 68, 20, 160, 236, 190, 235, 68, 20, 154, 236, 190, 235, 68, 20, 174, 236, - 190, 235, 68, 20, 182, 236, 190, 235, 68, 20, 191, 236, 190, 235, 68, 20, - 185, 236, 190, 235, 68, 20, 190, 236, 190, 235, 68, 1, 175, 236, 190, - 235, 68, 1, 236, 149, 236, 190, 235, 68, 1, 245, 0, 236, 190, 235, 68, 1, - 232, 115, 236, 190, 235, 68, 1, 226, 177, 236, 190, 235, 68, 1, 225, 25, - 236, 190, 235, 68, 1, 217, 114, 236, 190, 235, 68, 1, 231, 77, 236, 190, - 235, 68, 1, 222, 155, 236, 190, 235, 68, 1, 242, 175, 236, 190, 235, 68, - 1, 208, 236, 190, 235, 68, 1, 187, 236, 190, 235, 68, 1, 229, 141, 236, - 190, 235, 68, 1, 196, 236, 190, 235, 68, 1, 249, 207, 236, 190, 235, 68, - 1, 252, 237, 236, 190, 235, 68, 1, 203, 236, 190, 235, 68, 1, 184, 236, - 190, 235, 68, 1, 235, 188, 236, 190, 235, 68, 1, 219, 7, 236, 190, 235, - 68, 1, 222, 35, 236, 190, 235, 68, 1, 155, 236, 190, 235, 68, 1, 219, - 189, 236, 190, 235, 68, 1, 251, 169, 236, 190, 235, 68, 1, 60, 236, 190, - 235, 68, 1, 230, 167, 236, 190, 235, 68, 1, 72, 236, 190, 235, 68, 1, - 230, 127, 236, 190, 235, 68, 29, 220, 110, 236, 190, 235, 68, 29, 73, - 236, 190, 235, 68, 29, 68, 236, 190, 235, 68, 29, 246, 250, 236, 190, - 235, 68, 29, 74, 236, 190, 235, 68, 145, 229, 48, 236, 190, 235, 68, 145, - 251, 157, 236, 190, 235, 68, 145, 251, 158, 229, 48, 236, 190, 235, 68, - 5, 250, 62, 236, 190, 235, 68, 5, 224, 148, 227, 194, 1, 175, 227, 194, - 1, 245, 0, 227, 194, 1, 232, 115, 227, 194, 1, 222, 155, 227, 194, 1, - 249, 207, 227, 194, 1, 208, 227, 194, 1, 187, 227, 194, 1, 252, 237, 227, - 194, 1, 196, 227, 194, 1, 251, 169, 227, 194, 1, 237, 123, 227, 194, 1, - 231, 77, 227, 194, 1, 226, 177, 227, 194, 1, 203, 227, 194, 1, 235, 188, - 227, 194, 1, 184, 227, 194, 1, 219, 7, 227, 194, 1, 155, 227, 194, 1, - 234, 37, 227, 194, 1, 232, 100, 227, 194, 1, 232, 169, 227, 194, 1, 231, - 57, 227, 194, 1, 60, 227, 194, 29, 5, 72, 227, 194, 29, 5, 68, 227, 194, - 29, 5, 73, 227, 194, 29, 5, 254, 196, 227, 194, 29, 5, 74, 227, 194, 29, - 5, 253, 232, 227, 194, 29, 5, 246, 115, 227, 194, 29, 5, 247, 16, 227, - 194, 250, 147, 5, 232, 117, 227, 194, 250, 147, 5, 207, 227, 194, 250, - 147, 5, 152, 227, 194, 250, 147, 5, 243, 225, 227, 194, 219, 82, 227, - 194, 226, 87, 78, 22, 91, 221, 188, 22, 91, 221, 187, 22, 91, 221, 185, - 22, 91, 221, 190, 22, 91, 227, 135, 22, 91, 227, 119, 22, 91, 227, 114, - 22, 91, 227, 116, 22, 91, 227, 132, 22, 91, 227, 125, 22, 91, 227, 118, - 22, 91, 227, 137, 22, 91, 227, 120, 22, 91, 227, 139, 22, 91, 227, 136, - 22, 91, 233, 183, 22, 91, 233, 174, 22, 91, 233, 177, 22, 91, 229, 84, - 22, 91, 229, 95, 22, 91, 229, 96, 22, 91, 223, 203, 22, 91, 238, 12, 22, - 91, 238, 19, 22, 91, 223, 214, 22, 91, 223, 201, 22, 91, 229, 126, 22, - 91, 243, 101, 22, 91, 223, 198, 133, 5, 229, 252, 133, 5, 251, 96, 133, - 5, 235, 130, 133, 5, 218, 197, 133, 1, 60, 133, 1, 242, 107, 236, 193, - 133, 1, 72, 133, 1, 237, 255, 133, 1, 68, 133, 1, 230, 44, 251, 73, 133, - 1, 232, 116, 235, 98, 133, 1, 232, 116, 235, 99, 227, 229, 133, 1, 73, - 133, 1, 254, 196, 133, 1, 74, 133, 1, 175, 133, 1, 206, 226, 128, 133, 1, - 206, 233, 67, 133, 1, 245, 0, 133, 1, 245, 1, 233, 67, 133, 1, 232, 115, - 133, 1, 251, 169, 133, 1, 251, 170, 233, 67, 133, 1, 237, 123, 133, 1, - 231, 78, 233, 67, 133, 1, 237, 124, 234, 103, 133, 1, 231, 77, 133, 1, - 221, 29, 133, 1, 221, 30, 234, 103, 133, 1, 249, 132, 133, 1, 249, 133, - 234, 103, 133, 1, 232, 238, 233, 67, 133, 1, 222, 155, 133, 1, 222, 156, - 233, 67, 133, 1, 249, 207, 133, 1, 249, 208, 234, 103, 133, 1, 208, 133, - 1, 187, 133, 1, 230, 44, 233, 67, 133, 1, 252, 237, 133, 1, 252, 238, - 233, 67, 133, 1, 196, 133, 1, 184, 133, 1, 203, 133, 1, 228, 3, 254, 203, - 133, 1, 235, 188, 133, 1, 219, 7, 133, 1, 226, 178, 233, 67, 133, 1, 226, - 178, 234, 103, 133, 1, 226, 177, 133, 1, 155, 133, 5, 251, 97, 222, 68, - 133, 29, 5, 222, 111, 133, 29, 5, 221, 135, 133, 29, 5, 218, 162, 133, - 29, 5, 218, 163, 234, 5, 133, 29, 5, 223, 77, 133, 29, 5, 223, 78, 233, - 250, 133, 29, 5, 222, 124, 133, 29, 5, 248, 207, 233, 66, 133, 29, 5, - 229, 171, 133, 250, 147, 5, 236, 161, 133, 250, 147, 5, 229, 179, 133, - 250, 147, 5, 251, 162, 133, 230, 6, 133, 42, 227, 176, 133, 45, 227, 176, - 133, 230, 36, 254, 125, 133, 230, 36, 234, 107, 133, 230, 36, 234, 223, - 133, 230, 36, 218, 193, 133, 230, 36, 230, 7, 133, 230, 36, 235, 35, 133, - 230, 36, 234, 217, 133, 230, 36, 254, 239, 133, 230, 36, 254, 240, 254, - 239, 133, 230, 36, 229, 65, 133, 215, 230, 36, 229, 65, 133, 230, 4, 133, - 20, 217, 84, 133, 20, 107, 133, 20, 103, 133, 20, 160, 133, 20, 154, 133, - 20, 174, 133, 20, 182, 133, 20, 191, 133, 20, 185, 133, 20, 190, 133, - 230, 36, 221, 163, 220, 248, 133, 230, 36, 237, 147, 149, 1, 60, 149, 1, - 72, 149, 1, 68, 149, 1, 73, 149, 1, 254, 196, 149, 1, 74, 149, 1, 175, - 149, 1, 236, 149, 149, 1, 245, 0, 149, 1, 244, 125, 149, 1, 232, 73, 149, - 1, 232, 115, 149, 1, 251, 69, 149, 1, 251, 33, 149, 1, 237, 123, 149, 1, - 237, 103, 149, 1, 232, 64, 149, 1, 232, 66, 149, 1, 232, 65, 149, 1, 222, - 155, 149, 1, 222, 35, 149, 1, 249, 207, 149, 1, 249, 36, 149, 1, 231, - 114, 149, 1, 208, 149, 1, 249, 132, 149, 1, 187, 149, 1, 229, 6, 149, 1, - 229, 141, 149, 1, 252, 237, 149, 1, 252, 94, 149, 1, 233, 94, 149, 1, - 196, 149, 1, 252, 178, 149, 1, 184, 149, 1, 203, 149, 1, 235, 188, 149, - 1, 219, 189, 149, 1, 223, 218, 149, 1, 226, 177, 149, 1, 155, 149, 29, 5, - 255, 58, 149, 29, 5, 72, 149, 29, 5, 237, 255, 149, 29, 5, 246, 237, 149, - 29, 5, 68, 149, 29, 5, 230, 167, 149, 29, 5, 74, 149, 29, 5, 254, 196, - 149, 29, 5, 253, 232, 149, 29, 5, 220, 110, 149, 250, 147, 5, 184, 149, - 250, 147, 5, 203, 149, 250, 147, 5, 235, 188, 149, 250, 147, 5, 219, 7, - 149, 1, 39, 237, 17, 149, 1, 39, 245, 67, 149, 1, 39, 232, 117, 149, 250, - 147, 5, 39, 232, 117, 149, 1, 39, 251, 70, 149, 1, 39, 222, 201, 149, 1, - 39, 207, 149, 1, 39, 230, 59, 149, 1, 39, 218, 90, 149, 1, 39, 152, 149, - 1, 39, 153, 149, 1, 39, 223, 219, 149, 250, 147, 5, 39, 189, 149, 250, - 147, 5, 39, 243, 225, 149, 20, 217, 84, 149, 20, 107, 149, 20, 103, 149, - 20, 160, 149, 20, 154, 149, 20, 174, 149, 20, 182, 149, 20, 191, 149, 20, - 185, 149, 20, 190, 149, 228, 197, 223, 242, 149, 228, 197, 249, 167, 149, - 228, 197, 51, 249, 167, 149, 228, 197, 221, 78, 249, 167, 63, 1, 236, - 143, 245, 0, 63, 1, 236, 143, 251, 169, 63, 1, 236, 143, 251, 69, 63, 1, - 236, 143, 237, 123, 63, 1, 236, 143, 237, 103, 63, 1, 236, 143, 231, 77, - 63, 1, 236, 143, 221, 29, 63, 1, 236, 143, 221, 19, 63, 1, 236, 143, 249, - 132, 63, 1, 236, 143, 249, 116, 63, 1, 236, 143, 249, 36, 63, 1, 236, - 143, 208, 63, 1, 236, 143, 226, 177, 63, 1, 236, 143, 155, 63, 1, 236, - 143, 243, 121, 63, 1, 236, 143, 246, 8, 63, 58, 1, 236, 143, 227, 201, - 63, 1, 236, 143, 218, 138, 63, 1, 236, 143, 217, 114, 63, 1, 236, 143, - 203, 63, 235, 6, 236, 143, 230, 182, 63, 235, 6, 236, 143, 228, 111, 63, - 235, 6, 236, 143, 243, 57, 63, 16, 254, 186, 246, 94, 63, 16, 254, 186, - 107, 63, 16, 254, 186, 103, 63, 1, 254, 186, 203, 63, 5, 229, 248, 236, - 213, 221, 132, 37, 177, 1, 109, 236, 57, 37, 177, 1, 116, 236, 57, 37, - 177, 1, 109, 236, 125, 37, 177, 1, 116, 236, 125, 37, 177, 1, 109, 236, - 132, 37, 177, 1, 116, 236, 132, 37, 177, 1, 109, 244, 68, 37, 177, 1, - 116, 244, 68, 37, 177, 1, 109, 232, 84, 37, 177, 1, 116, 232, 84, 37, - 177, 1, 109, 250, 182, 37, 177, 1, 116, 250, 182, 37, 177, 1, 109, 251, - 11, 37, 177, 1, 116, 251, 11, 37, 177, 1, 109, 224, 26, 37, 177, 1, 116, - 224, 26, 37, 177, 1, 109, 231, 56, 37, 177, 1, 116, 231, 56, 37, 177, 1, - 109, 248, 167, 37, 177, 1, 116, 248, 167, 37, 177, 1, 109, 101, 37, 177, - 1, 116, 101, 37, 177, 1, 109, 221, 239, 37, 177, 1, 116, 221, 239, 37, - 177, 1, 109, 231, 204, 37, 177, 1, 116, 231, 204, 37, 177, 1, 109, 252, - 41, 37, 177, 1, 116, 252, 41, 37, 177, 1, 109, 229, 37, 37, 177, 1, 116, - 229, 37, 37, 177, 1, 109, 229, 118, 37, 177, 1, 116, 229, 118, 37, 177, - 1, 109, 245, 139, 37, 177, 1, 116, 245, 139, 37, 177, 1, 109, 233, 136, - 37, 177, 1, 116, 233, 136, 37, 177, 1, 109, 217, 231, 37, 177, 1, 116, - 217, 231, 37, 177, 1, 109, 227, 75, 37, 177, 1, 116, 227, 75, 37, 177, 1, - 109, 235, 12, 37, 177, 1, 116, 235, 12, 37, 177, 1, 109, 219, 72, 37, - 177, 1, 116, 219, 72, 37, 177, 1, 109, 243, 4, 37, 177, 1, 116, 243, 4, - 37, 177, 1, 109, 74, 37, 177, 1, 116, 74, 37, 177, 234, 100, 236, 229, - 37, 177, 29, 255, 58, 37, 177, 29, 72, 37, 177, 29, 220, 110, 37, 177, - 29, 68, 37, 177, 29, 73, 37, 177, 29, 74, 37, 177, 234, 100, 236, 127, - 37, 177, 29, 242, 72, 37, 177, 29, 220, 109, 37, 177, 29, 220, 123, 37, - 177, 29, 253, 231, 37, 177, 29, 253, 212, 37, 177, 29, 254, 131, 37, 177, - 29, 254, 140, 37, 177, 145, 234, 100, 246, 223, 37, 177, 145, 234, 100, - 231, 113, 37, 177, 145, 234, 100, 221, 239, 37, 177, 145, 234, 100, 224, - 15, 37, 177, 16, 236, 44, 37, 177, 16, 231, 113, 37, 177, 16, 226, 148, - 37, 177, 16, 243, 5, 243, 1, 37, 177, 16, 236, 52, 236, 51, 234, 11, 234, - 43, 1, 236, 49, 234, 11, 234, 43, 1, 226, 148, 234, 11, 234, 43, 1, 235, - 167, 234, 11, 234, 43, 1, 233, 145, 234, 11, 234, 43, 1, 187, 234, 11, - 234, 43, 1, 208, 234, 11, 234, 43, 1, 251, 25, 234, 11, 234, 43, 1, 221, - 181, 234, 11, 234, 43, 1, 236, 121, 234, 11, 234, 43, 1, 232, 76, 234, - 11, 234, 43, 1, 221, 233, 234, 11, 234, 43, 1, 219, 2, 234, 11, 234, 43, - 1, 218, 45, 234, 11, 234, 43, 1, 242, 167, 234, 11, 234, 43, 1, 220, 87, - 234, 11, 234, 43, 1, 72, 234, 11, 234, 43, 1, 229, 136, 234, 11, 234, 43, - 1, 253, 241, 234, 11, 234, 43, 1, 244, 63, 234, 11, 234, 43, 1, 237, 102, - 234, 11, 234, 43, 1, 227, 246, 234, 11, 234, 43, 1, 252, 237, 234, 11, - 234, 43, 1, 237, 91, 234, 11, 234, 43, 1, 248, 232, 234, 11, 234, 43, 1, - 244, 110, 234, 11, 234, 43, 1, 249, 17, 234, 11, 234, 43, 1, 252, 93, - 234, 11, 234, 43, 1, 236, 50, 234, 249, 234, 11, 234, 43, 1, 235, 168, - 234, 249, 234, 11, 234, 43, 1, 233, 146, 234, 249, 234, 11, 234, 43, 1, - 230, 44, 234, 249, 234, 11, 234, 43, 1, 232, 238, 234, 249, 234, 11, 234, - 43, 1, 221, 182, 234, 249, 234, 11, 234, 43, 1, 232, 77, 234, 249, 234, - 11, 234, 43, 1, 242, 107, 234, 249, 234, 11, 234, 43, 29, 5, 230, 137, - 234, 11, 234, 43, 29, 5, 237, 221, 234, 11, 234, 43, 29, 5, 254, 130, - 234, 11, 234, 43, 29, 5, 218, 18, 234, 11, 234, 43, 29, 5, 224, 10, 234, - 11, 234, 43, 29, 5, 220, 85, 234, 11, 234, 43, 29, 5, 251, 40, 234, 11, - 234, 43, 29, 5, 231, 100, 234, 11, 234, 43, 251, 41, 234, 11, 234, 43, - 234, 220, 237, 131, 234, 11, 234, 43, 254, 70, 237, 131, 234, 11, 234, - 43, 20, 217, 84, 234, 11, 234, 43, 20, 107, 234, 11, 234, 43, 20, 103, - 234, 11, 234, 43, 20, 160, 234, 11, 234, 43, 20, 154, 234, 11, 234, 43, - 20, 174, 234, 11, 234, 43, 20, 182, 234, 11, 234, 43, 20, 191, 234, 11, - 234, 43, 20, 185, 234, 11, 234, 43, 20, 190, 22, 122, 231, 6, 22, 122, - 231, 11, 22, 122, 217, 230, 22, 122, 217, 229, 22, 122, 217, 228, 22, - 122, 220, 173, 22, 122, 220, 176, 22, 122, 217, 198, 22, 122, 217, 194, - 22, 122, 246, 114, 22, 122, 246, 112, 22, 122, 246, 113, 22, 122, 246, - 110, 22, 122, 242, 97, 22, 122, 242, 96, 22, 122, 242, 94, 22, 122, 242, - 95, 22, 122, 242, 100, 22, 122, 242, 93, 22, 122, 242, 92, 22, 122, 242, - 102, 22, 122, 254, 59, 22, 122, 254, 58, 22, 85, 232, 48, 22, 85, 232, - 54, 22, 85, 223, 200, 22, 85, 223, 199, 22, 85, 221, 187, 22, 85, 221, - 185, 22, 85, 221, 184, 22, 85, 221, 190, 22, 85, 221, 191, 22, 85, 221, - 183, 22, 85, 227, 119, 22, 85, 227, 134, 22, 85, 223, 206, 22, 85, 227, - 131, 22, 85, 227, 121, 22, 85, 227, 123, 22, 85, 227, 110, 22, 85, 227, - 111, 22, 85, 236, 217, 22, 85, 233, 182, 22, 85, 233, 176, 22, 85, 223, - 210, 22, 85, 233, 179, 22, 85, 233, 185, 22, 85, 229, 80, 22, 85, 229, - 89, 22, 85, 229, 93, 22, 85, 223, 208, 22, 85, 229, 83, 22, 85, 229, 97, - 22, 85, 229, 98, 22, 85, 224, 96, 22, 85, 224, 99, 22, 85, 223, 204, 22, - 85, 223, 202, 22, 85, 224, 94, 22, 85, 224, 102, 22, 85, 224, 103, 22, - 85, 224, 88, 22, 85, 224, 101, 22, 85, 229, 255, 22, 85, 230, 0, 22, 85, - 218, 4, 22, 85, 218, 5, 22, 85, 250, 228, 22, 85, 250, 227, 22, 85, 223, - 215, 22, 85, 229, 124, 22, 85, 229, 123, 9, 13, 239, 244, 9, 13, 239, - 243, 9, 13, 239, 242, 9, 13, 239, 241, 9, 13, 239, 240, 9, 13, 239, 239, - 9, 13, 239, 238, 9, 13, 239, 237, 9, 13, 239, 236, 9, 13, 239, 235, 9, - 13, 239, 234, 9, 13, 239, 233, 9, 13, 239, 232, 9, 13, 239, 231, 9, 13, - 239, 230, 9, 13, 239, 229, 9, 13, 239, 228, 9, 13, 239, 227, 9, 13, 239, - 226, 9, 13, 239, 225, 9, 13, 239, 224, 9, 13, 239, 223, 9, 13, 239, 222, - 9, 13, 239, 221, 9, 13, 239, 220, 9, 13, 239, 219, 9, 13, 239, 218, 9, - 13, 239, 217, 9, 13, 239, 216, 9, 13, 239, 215, 9, 13, 239, 214, 9, 13, - 239, 213, 9, 13, 239, 212, 9, 13, 239, 211, 9, 13, 239, 210, 9, 13, 239, - 209, 9, 13, 239, 208, 9, 13, 239, 207, 9, 13, 239, 206, 9, 13, 239, 205, - 9, 13, 239, 204, 9, 13, 239, 203, 9, 13, 239, 202, 9, 13, 239, 201, 9, - 13, 239, 200, 9, 13, 239, 199, 9, 13, 239, 198, 9, 13, 239, 197, 9, 13, - 239, 196, 9, 13, 239, 195, 9, 13, 239, 194, 9, 13, 239, 193, 9, 13, 239, - 192, 9, 13, 239, 191, 9, 13, 239, 190, 9, 13, 239, 189, 9, 13, 239, 188, - 9, 13, 239, 187, 9, 13, 239, 186, 9, 13, 239, 185, 9, 13, 239, 184, 9, - 13, 239, 183, 9, 13, 239, 182, 9, 13, 239, 181, 9, 13, 239, 180, 9, 13, - 239, 179, 9, 13, 239, 178, 9, 13, 239, 177, 9, 13, 239, 176, 9, 13, 239, - 175, 9, 13, 239, 174, 9, 13, 239, 173, 9, 13, 239, 172, 9, 13, 239, 171, - 9, 13, 239, 170, 9, 13, 239, 169, 9, 13, 239, 168, 9, 13, 239, 167, 9, - 13, 239, 166, 9, 13, 239, 165, 9, 13, 239, 164, 9, 13, 239, 163, 9, 13, - 239, 162, 9, 13, 239, 161, 9, 13, 239, 160, 9, 13, 239, 159, 9, 13, 239, - 158, 9, 13, 239, 157, 9, 13, 239, 156, 9, 13, 239, 155, 9, 13, 239, 154, - 9, 13, 239, 153, 9, 13, 239, 152, 9, 13, 239, 151, 9, 13, 239, 150, 9, - 13, 239, 149, 9, 13, 239, 148, 9, 13, 239, 147, 9, 13, 239, 146, 9, 13, - 239, 145, 9, 13, 239, 144, 9, 13, 239, 143, 9, 13, 239, 142, 9, 13, 239, - 141, 9, 13, 239, 140, 9, 13, 239, 139, 9, 13, 239, 138, 9, 13, 239, 137, - 9, 13, 239, 136, 9, 13, 239, 135, 9, 13, 239, 134, 9, 13, 239, 133, 9, - 13, 239, 132, 9, 13, 239, 131, 9, 13, 239, 130, 9, 13, 239, 129, 9, 13, - 239, 128, 9, 13, 239, 127, 9, 13, 239, 126, 9, 13, 239, 125, 9, 13, 239, - 124, 9, 13, 239, 123, 9, 13, 239, 122, 9, 13, 239, 121, 9, 13, 239, 120, - 9, 13, 239, 119, 9, 13, 239, 118, 9, 13, 239, 117, 9, 13, 239, 116, 9, - 13, 239, 115, 9, 13, 239, 114, 9, 13, 239, 113, 9, 13, 239, 112, 9, 13, - 239, 111, 9, 13, 239, 110, 9, 13, 239, 109, 9, 13, 239, 108, 9, 13, 239, - 107, 9, 13, 239, 106, 9, 13, 239, 105, 9, 13, 239, 104, 9, 13, 239, 103, - 9, 13, 239, 102, 9, 13, 239, 101, 9, 13, 239, 100, 9, 13, 239, 99, 9, 13, - 239, 98, 9, 13, 239, 97, 9, 13, 239, 96, 9, 13, 239, 95, 9, 13, 239, 94, - 9, 13, 239, 93, 9, 13, 239, 92, 9, 13, 239, 91, 9, 13, 239, 90, 9, 13, - 239, 89, 9, 13, 239, 88, 9, 13, 239, 87, 9, 13, 239, 86, 9, 13, 239, 85, - 9, 13, 239, 84, 9, 13, 239, 83, 9, 13, 239, 82, 9, 13, 239, 81, 9, 13, - 239, 80, 9, 13, 239, 79, 9, 13, 239, 78, 9, 13, 239, 77, 9, 13, 239, 76, - 9, 13, 239, 75, 9, 13, 239, 74, 9, 13, 239, 73, 9, 13, 239, 72, 9, 13, - 239, 71, 9, 13, 239, 70, 9, 13, 239, 69, 9, 13, 239, 68, 9, 13, 239, 67, - 9, 13, 239, 66, 9, 13, 239, 65, 9, 13, 239, 64, 9, 13, 239, 63, 9, 13, - 239, 62, 9, 13, 239, 61, 9, 13, 239, 60, 9, 13, 239, 59, 9, 13, 239, 58, - 9, 13, 239, 57, 9, 13, 239, 56, 9, 13, 239, 55, 9, 13, 239, 54, 9, 13, - 239, 53, 9, 13, 239, 52, 9, 13, 239, 51, 9, 13, 239, 50, 9, 13, 239, 49, - 9, 13, 239, 48, 9, 13, 239, 47, 9, 13, 239, 46, 9, 13, 239, 45, 9, 13, - 239, 44, 9, 13, 239, 43, 9, 13, 239, 42, 9, 13, 239, 41, 9, 13, 239, 40, - 9, 13, 239, 39, 9, 13, 239, 38, 9, 13, 239, 37, 9, 13, 239, 36, 9, 13, - 239, 35, 9, 13, 239, 34, 9, 13, 239, 33, 9, 13, 239, 32, 9, 13, 239, 31, - 9, 13, 239, 30, 9, 13, 239, 29, 9, 13, 239, 28, 9, 13, 239, 27, 9, 13, - 239, 26, 9, 13, 239, 25, 9, 13, 239, 24, 9, 13, 239, 23, 9, 13, 239, 22, - 9, 13, 239, 21, 9, 13, 239, 20, 9, 13, 239, 19, 9, 13, 239, 18, 9, 13, - 239, 17, 9, 13, 239, 16, 9, 13, 239, 15, 9, 13, 239, 14, 9, 13, 239, 13, - 9, 13, 239, 12, 9, 13, 239, 11, 9, 13, 239, 10, 9, 13, 239, 9, 9, 13, - 239, 8, 9, 13, 239, 7, 9, 13, 239, 6, 9, 13, 239, 5, 9, 13, 239, 4, 9, - 13, 239, 3, 9, 13, 239, 2, 9, 13, 239, 1, 9, 13, 239, 0, 9, 13, 238, 255, - 9, 13, 238, 254, 9, 13, 238, 253, 9, 13, 238, 252, 9, 13, 238, 251, 9, - 13, 238, 250, 9, 13, 238, 249, 9, 13, 238, 248, 9, 13, 238, 247, 9, 13, - 238, 246, 9, 13, 238, 245, 9, 13, 238, 244, 9, 13, 238, 243, 9, 13, 238, - 242, 9, 13, 238, 241, 9, 13, 238, 240, 9, 13, 238, 239, 9, 13, 238, 238, - 9, 13, 238, 237, 9, 13, 238, 236, 9, 13, 238, 235, 9, 13, 238, 234, 9, - 13, 238, 233, 9, 13, 238, 232, 9, 13, 238, 231, 9, 13, 238, 230, 9, 13, - 238, 229, 9, 13, 238, 228, 9, 13, 238, 227, 9, 13, 238, 226, 9, 13, 238, - 225, 9, 13, 238, 224, 9, 13, 238, 223, 9, 13, 238, 222, 9, 13, 238, 221, - 9, 13, 238, 220, 9, 13, 238, 219, 9, 13, 238, 218, 9, 13, 238, 217, 9, - 13, 238, 216, 9, 13, 238, 215, 9, 13, 238, 214, 9, 13, 238, 213, 9, 13, - 238, 212, 9, 13, 238, 211, 9, 13, 238, 210, 9, 13, 238, 209, 9, 13, 238, - 208, 9, 13, 238, 207, 9, 13, 238, 206, 9, 13, 238, 205, 9, 13, 238, 204, - 9, 13, 238, 203, 9, 13, 238, 202, 9, 13, 238, 201, 9, 13, 238, 200, 9, - 13, 238, 199, 9, 13, 238, 198, 9, 13, 238, 197, 9, 13, 238, 196, 9, 13, - 238, 195, 9, 13, 238, 194, 9, 13, 238, 193, 9, 13, 238, 192, 9, 13, 238, - 191, 9, 13, 238, 190, 9, 13, 238, 189, 9, 13, 238, 188, 9, 13, 238, 187, - 9, 13, 238, 186, 9, 13, 238, 185, 9, 13, 238, 184, 9, 13, 238, 183, 9, - 13, 238, 182, 9, 13, 238, 181, 9, 13, 238, 180, 9, 13, 238, 179, 9, 13, - 238, 178, 9, 13, 238, 177, 9, 13, 238, 176, 9, 13, 238, 175, 9, 13, 238, - 174, 9, 13, 238, 173, 9, 13, 238, 172, 9, 13, 238, 171, 9, 13, 238, 170, - 9, 13, 238, 169, 9, 13, 238, 168, 9, 13, 238, 167, 9, 13, 238, 166, 9, - 13, 238, 165, 9, 13, 238, 164, 9, 13, 238, 163, 9, 13, 238, 162, 9, 13, - 238, 161, 9, 13, 238, 160, 9, 13, 238, 159, 9, 13, 238, 158, 9, 13, 238, - 157, 9, 13, 238, 156, 9, 13, 238, 155, 9, 13, 238, 154, 9, 13, 238, 153, - 9, 13, 238, 152, 9, 13, 238, 151, 9, 13, 238, 150, 9, 13, 238, 149, 9, - 13, 238, 148, 9, 13, 238, 147, 9, 13, 238, 146, 9, 13, 238, 145, 9, 13, - 238, 144, 9, 13, 238, 143, 9, 13, 238, 142, 9, 13, 238, 141, 9, 13, 238, - 140, 9, 13, 238, 139, 9, 13, 238, 138, 9, 13, 238, 137, 9, 13, 238, 136, - 9, 13, 238, 135, 9, 13, 238, 134, 9, 13, 238, 133, 9, 13, 238, 132, 9, - 13, 238, 131, 9, 13, 238, 130, 9, 13, 238, 129, 9, 13, 238, 128, 9, 13, - 238, 127, 9, 13, 238, 126, 9, 13, 238, 125, 9, 13, 238, 124, 9, 13, 238, - 123, 9, 13, 238, 122, 9, 13, 238, 121, 9, 13, 238, 120, 9, 13, 238, 119, - 9, 13, 238, 118, 9, 13, 238, 117, 9, 13, 238, 116, 9, 13, 238, 115, 9, - 13, 238, 114, 9, 13, 238, 113, 9, 13, 238, 112, 9, 13, 238, 111, 9, 13, - 238, 110, 9, 13, 238, 109, 9, 13, 238, 108, 9, 13, 238, 107, 9, 13, 238, - 106, 9, 13, 238, 105, 9, 13, 238, 104, 9, 13, 238, 103, 9, 13, 238, 102, - 9, 13, 238, 101, 9, 13, 238, 100, 9, 13, 238, 99, 9, 13, 238, 98, 9, 13, - 238, 97, 9, 13, 238, 96, 9, 13, 238, 95, 9, 13, 238, 94, 9, 13, 238, 93, - 9, 13, 238, 92, 9, 13, 238, 91, 9, 13, 238, 90, 9, 13, 238, 89, 9, 13, - 238, 88, 9, 13, 238, 87, 9, 13, 238, 86, 9, 13, 238, 85, 9, 13, 238, 84, - 9, 13, 238, 83, 9, 13, 238, 82, 9, 13, 238, 81, 9, 13, 238, 80, 9, 13, - 238, 79, 9, 13, 238, 78, 9, 13, 238, 77, 9, 13, 238, 76, 9, 13, 238, 75, - 9, 13, 238, 74, 9, 13, 238, 73, 9, 13, 238, 72, 9, 13, 238, 71, 9, 13, - 238, 70, 9, 13, 238, 69, 9, 13, 238, 68, 9, 13, 238, 67, 9, 13, 238, 66, - 9, 13, 238, 65, 9, 13, 238, 64, 9, 13, 238, 63, 9, 13, 238, 62, 9, 13, - 238, 61, 9, 13, 238, 60, 9, 13, 238, 59, 9, 13, 238, 58, 9, 13, 238, 57, - 9, 13, 238, 56, 9, 13, 238, 55, 9, 13, 238, 54, 9, 13, 238, 53, 9, 13, - 238, 52, 9, 13, 238, 51, 9, 13, 238, 50, 9, 13, 238, 49, 9, 13, 238, 48, - 9, 13, 238, 47, 9, 13, 238, 46, 9, 13, 238, 45, 9, 13, 238, 44, 9, 13, - 238, 43, 9, 13, 238, 42, 9, 13, 238, 41, 9, 13, 238, 40, 9, 13, 238, 39, - 9, 13, 238, 38, 9, 13, 238, 37, 9, 13, 238, 36, 9, 13, 238, 35, 9, 13, - 238, 34, 9, 13, 238, 33, 9, 13, 238, 32, 9, 13, 238, 31, 7, 3, 24, 245, - 207, 7, 3, 24, 245, 203, 7, 3, 24, 245, 166, 7, 3, 24, 245, 206, 7, 3, - 24, 245, 205, 7, 3, 24, 171, 226, 235, 222, 201, 7, 3, 24, 223, 168, 132, - 3, 24, 233, 252, 231, 174, 132, 3, 24, 233, 252, 246, 254, 132, 3, 24, - 233, 252, 237, 200, 132, 3, 24, 219, 97, 231, 174, 132, 3, 24, 233, 252, - 218, 133, 87, 1, 217, 221, 2, 243, 94, 87, 229, 32, 237, 42, 219, 176, - 87, 24, 217, 248, 217, 221, 217, 221, 229, 214, 87, 1, 254, 142, 253, - 207, 87, 1, 218, 201, 254, 168, 87, 1, 218, 201, 249, 177, 87, 1, 218, - 201, 243, 162, 87, 1, 218, 201, 236, 246, 87, 1, 218, 201, 235, 152, 87, - 1, 218, 201, 39, 234, 1, 87, 1, 218, 201, 227, 174, 87, 1, 218, 201, 222, - 102, 87, 1, 254, 142, 88, 55, 87, 1, 224, 210, 2, 224, 210, 248, 145, 87, - 1, 224, 210, 2, 224, 113, 248, 145, 87, 1, 224, 210, 2, 249, 194, 25, - 224, 210, 248, 145, 87, 1, 224, 210, 2, 249, 194, 25, 224, 113, 248, 145, - 87, 1, 99, 2, 229, 214, 87, 1, 99, 2, 228, 143, 87, 1, 99, 2, 234, 77, - 87, 1, 252, 105, 2, 249, 193, 87, 1, 244, 92, 2, 249, 193, 87, 1, 249, - 178, 2, 249, 193, 87, 1, 243, 163, 2, 234, 77, 87, 1, 219, 170, 2, 249, - 193, 87, 1, 217, 96, 2, 249, 193, 87, 1, 222, 51, 2, 249, 193, 87, 1, - 217, 221, 2, 249, 193, 87, 1, 39, 236, 247, 2, 249, 193, 87, 1, 236, 247, - 2, 249, 193, 87, 1, 235, 153, 2, 249, 193, 87, 1, 234, 2, 2, 249, 193, - 87, 1, 231, 104, 2, 249, 193, 87, 1, 226, 146, 2, 249, 193, 87, 1, 39, - 229, 199, 2, 249, 193, 87, 1, 229, 199, 2, 249, 193, 87, 1, 221, 52, 2, - 249, 193, 87, 1, 228, 108, 2, 249, 193, 87, 1, 227, 175, 2, 249, 193, 87, - 1, 224, 210, 2, 249, 193, 87, 1, 222, 103, 2, 249, 193, 87, 1, 219, 170, - 2, 242, 254, 87, 1, 252, 105, 2, 227, 248, 87, 1, 236, 247, 2, 227, 248, - 87, 1, 229, 199, 2, 227, 248, 87, 24, 99, 235, 152, 12, 1, 99, 218, 247, - 47, 17, 12, 1, 99, 218, 247, 39, 17, 12, 1, 252, 136, 47, 17, 12, 1, 252, - 136, 39, 17, 12, 1, 252, 136, 66, 17, 12, 1, 252, 136, 128, 17, 12, 1, - 229, 188, 47, 17, 12, 1, 229, 188, 39, 17, 12, 1, 229, 188, 66, 17, 12, - 1, 229, 188, 128, 17, 12, 1, 252, 127, 47, 17, 12, 1, 252, 127, 39, 17, - 12, 1, 252, 127, 66, 17, 12, 1, 252, 127, 128, 17, 12, 1, 221, 22, 47, - 17, 12, 1, 221, 22, 39, 17, 12, 1, 221, 22, 66, 17, 12, 1, 221, 22, 128, - 17, 12, 1, 222, 76, 47, 17, 12, 1, 222, 76, 39, 17, 12, 1, 222, 76, 66, - 17, 12, 1, 222, 76, 128, 17, 12, 1, 221, 24, 47, 17, 12, 1, 221, 24, 39, - 17, 12, 1, 221, 24, 66, 17, 12, 1, 221, 24, 128, 17, 12, 1, 219, 159, 47, - 17, 12, 1, 219, 159, 39, 17, 12, 1, 219, 159, 66, 17, 12, 1, 219, 159, - 128, 17, 12, 1, 229, 186, 47, 17, 12, 1, 229, 186, 39, 17, 12, 1, 229, - 186, 66, 17, 12, 1, 229, 186, 128, 17, 12, 1, 247, 80, 47, 17, 12, 1, - 247, 80, 39, 17, 12, 1, 247, 80, 66, 17, 12, 1, 247, 80, 128, 17, 12, 1, - 231, 71, 47, 17, 12, 1, 231, 71, 39, 17, 12, 1, 231, 71, 66, 17, 12, 1, - 231, 71, 128, 17, 12, 1, 222, 92, 47, 17, 12, 1, 222, 92, 39, 17, 12, 1, - 222, 92, 66, 17, 12, 1, 222, 92, 128, 17, 12, 1, 222, 90, 47, 17, 12, 1, - 222, 90, 39, 17, 12, 1, 222, 90, 66, 17, 12, 1, 222, 90, 128, 17, 12, 1, - 249, 130, 47, 17, 12, 1, 249, 130, 39, 17, 12, 1, 249, 190, 47, 17, 12, - 1, 249, 190, 39, 17, 12, 1, 247, 104, 47, 17, 12, 1, 247, 104, 39, 17, - 12, 1, 249, 128, 47, 17, 12, 1, 249, 128, 39, 17, 12, 1, 237, 110, 47, - 17, 12, 1, 237, 110, 39, 17, 12, 1, 227, 49, 47, 17, 12, 1, 227, 49, 39, - 17, 12, 1, 236, 177, 47, 17, 12, 1, 236, 177, 39, 17, 12, 1, 236, 177, - 66, 17, 12, 1, 236, 177, 128, 17, 12, 1, 244, 244, 47, 17, 12, 1, 244, - 244, 39, 17, 12, 1, 244, 244, 66, 17, 12, 1, 244, 244, 128, 17, 12, 1, - 244, 10, 47, 17, 12, 1, 244, 10, 39, 17, 12, 1, 244, 10, 66, 17, 12, 1, - 244, 10, 128, 17, 12, 1, 232, 83, 47, 17, 12, 1, 232, 83, 39, 17, 12, 1, - 232, 83, 66, 17, 12, 1, 232, 83, 128, 17, 12, 1, 231, 194, 244, 108, 47, - 17, 12, 1, 231, 194, 244, 108, 39, 17, 12, 1, 227, 79, 47, 17, 12, 1, - 227, 79, 39, 17, 12, 1, 227, 79, 66, 17, 12, 1, 227, 79, 128, 17, 12, 1, - 243, 147, 2, 70, 71, 47, 17, 12, 1, 243, 147, 2, 70, 71, 39, 17, 12, 1, - 243, 147, 244, 66, 47, 17, 12, 1, 243, 147, 244, 66, 39, 17, 12, 1, 243, - 147, 244, 66, 66, 17, 12, 1, 243, 147, 244, 66, 128, 17, 12, 1, 243, 147, - 248, 164, 47, 17, 12, 1, 243, 147, 248, 164, 39, 17, 12, 1, 243, 147, - 248, 164, 66, 17, 12, 1, 243, 147, 248, 164, 128, 17, 12, 1, 70, 252, - 195, 47, 17, 12, 1, 70, 252, 195, 39, 17, 12, 1, 70, 252, 195, 2, 181, - 71, 47, 17, 12, 1, 70, 252, 195, 2, 181, 71, 39, 17, 12, 1, 232, 118, 47, - 17, 12, 1, 232, 118, 39, 17, 12, 1, 232, 118, 66, 17, 12, 1, 232, 118, - 128, 17, 12, 1, 105, 47, 17, 12, 1, 105, 39, 17, 12, 1, 230, 168, 47, 17, - 12, 1, 230, 168, 39, 17, 12, 1, 217, 201, 47, 17, 12, 1, 217, 201, 39, - 17, 12, 1, 105, 2, 181, 71, 47, 17, 12, 1, 219, 166, 47, 17, 12, 1, 219, - 166, 39, 17, 12, 1, 236, 98, 230, 168, 47, 17, 12, 1, 236, 98, 230, 168, - 39, 17, 12, 1, 236, 98, 217, 201, 47, 17, 12, 1, 236, 98, 217, 201, 39, - 17, 12, 1, 178, 47, 17, 12, 1, 178, 39, 17, 12, 1, 178, 66, 17, 12, 1, - 178, 128, 17, 12, 1, 220, 104, 236, 188, 236, 98, 99, 197, 66, 17, 12, 1, - 220, 104, 236, 188, 236, 98, 99, 197, 128, 17, 12, 24, 70, 2, 181, 71, 2, - 99, 47, 17, 12, 24, 70, 2, 181, 71, 2, 99, 39, 17, 12, 24, 70, 2, 181, - 71, 2, 254, 235, 47, 17, 12, 24, 70, 2, 181, 71, 2, 254, 235, 39, 17, 12, - 24, 70, 2, 181, 71, 2, 218, 234, 47, 17, 12, 24, 70, 2, 181, 71, 2, 218, - 234, 39, 17, 12, 24, 70, 2, 181, 71, 2, 105, 47, 17, 12, 24, 70, 2, 181, - 71, 2, 105, 39, 17, 12, 24, 70, 2, 181, 71, 2, 230, 168, 47, 17, 12, 24, - 70, 2, 181, 71, 2, 230, 168, 39, 17, 12, 24, 70, 2, 181, 71, 2, 217, 201, - 47, 17, 12, 24, 70, 2, 181, 71, 2, 217, 201, 39, 17, 12, 24, 70, 2, 181, - 71, 2, 178, 47, 17, 12, 24, 70, 2, 181, 71, 2, 178, 39, 17, 12, 24, 70, - 2, 181, 71, 2, 178, 66, 17, 12, 24, 220, 104, 236, 98, 70, 2, 181, 71, 2, - 99, 197, 47, 17, 12, 24, 220, 104, 236, 98, 70, 2, 181, 71, 2, 99, 197, - 39, 17, 12, 24, 220, 104, 236, 98, 70, 2, 181, 71, 2, 99, 197, 66, 17, - 12, 1, 245, 241, 70, 47, 17, 12, 1, 245, 241, 70, 39, 17, 12, 1, 245, - 241, 70, 66, 17, 12, 1, 245, 241, 70, 128, 17, 12, 24, 70, 2, 181, 71, 2, - 134, 47, 17, 12, 24, 70, 2, 181, 71, 2, 111, 47, 17, 12, 24, 70, 2, 181, - 71, 2, 62, 47, 17, 12, 24, 70, 2, 181, 71, 2, 99, 197, 47, 17, 12, 24, - 70, 2, 181, 71, 2, 70, 47, 17, 12, 24, 252, 129, 2, 134, 47, 17, 12, 24, - 252, 129, 2, 111, 47, 17, 12, 24, 252, 129, 2, 236, 147, 47, 17, 12, 24, - 252, 129, 2, 62, 47, 17, 12, 24, 252, 129, 2, 99, 197, 47, 17, 12, 24, - 252, 129, 2, 70, 47, 17, 12, 24, 222, 78, 2, 134, 47, 17, 12, 24, 222, - 78, 2, 111, 47, 17, 12, 24, 222, 78, 2, 236, 147, 47, 17, 12, 24, 222, - 78, 2, 62, 47, 17, 12, 24, 222, 78, 2, 99, 197, 47, 17, 12, 24, 222, 78, - 2, 70, 47, 17, 12, 24, 222, 20, 2, 134, 47, 17, 12, 24, 222, 20, 2, 62, - 47, 17, 12, 24, 222, 20, 2, 99, 197, 47, 17, 12, 24, 222, 20, 2, 70, 47, - 17, 12, 24, 134, 2, 111, 47, 17, 12, 24, 134, 2, 62, 47, 17, 12, 24, 111, - 2, 134, 47, 17, 12, 24, 111, 2, 62, 47, 17, 12, 24, 236, 147, 2, 134, 47, - 17, 12, 24, 236, 147, 2, 111, 47, 17, 12, 24, 236, 147, 2, 62, 47, 17, - 12, 24, 226, 83, 2, 134, 47, 17, 12, 24, 226, 83, 2, 111, 47, 17, 12, 24, - 226, 83, 2, 236, 147, 47, 17, 12, 24, 226, 83, 2, 62, 47, 17, 12, 24, - 226, 171, 2, 111, 47, 17, 12, 24, 226, 171, 2, 62, 47, 17, 12, 24, 249, - 203, 2, 134, 47, 17, 12, 24, 249, 203, 2, 111, 47, 17, 12, 24, 249, 203, - 2, 236, 147, 47, 17, 12, 24, 249, 203, 2, 62, 47, 17, 12, 24, 222, 138, - 2, 111, 47, 17, 12, 24, 222, 138, 2, 62, 47, 17, 12, 24, 217, 110, 2, 62, - 47, 17, 12, 24, 254, 192, 2, 134, 47, 17, 12, 24, 254, 192, 2, 62, 47, - 17, 12, 24, 244, 123, 2, 134, 47, 17, 12, 24, 244, 123, 2, 62, 47, 17, - 12, 24, 245, 222, 2, 134, 47, 17, 12, 24, 245, 222, 2, 111, 47, 17, 12, - 24, 245, 222, 2, 236, 147, 47, 17, 12, 24, 245, 222, 2, 62, 47, 17, 12, - 24, 245, 222, 2, 99, 197, 47, 17, 12, 24, 245, 222, 2, 70, 47, 17, 12, - 24, 228, 149, 2, 111, 47, 17, 12, 24, 228, 149, 2, 62, 47, 17, 12, 24, - 228, 149, 2, 99, 197, 47, 17, 12, 24, 228, 149, 2, 70, 47, 17, 12, 24, - 236, 247, 2, 99, 47, 17, 12, 24, 236, 247, 2, 134, 47, 17, 12, 24, 236, - 247, 2, 111, 47, 17, 12, 24, 236, 247, 2, 236, 147, 47, 17, 12, 24, 236, - 247, 2, 235, 161, 47, 17, 12, 24, 236, 247, 2, 62, 47, 17, 12, 24, 236, - 247, 2, 99, 197, 47, 17, 12, 24, 236, 247, 2, 70, 47, 17, 12, 24, 235, - 161, 2, 134, 47, 17, 12, 24, 235, 161, 2, 111, 47, 17, 12, 24, 235, 161, - 2, 236, 147, 47, 17, 12, 24, 235, 161, 2, 62, 47, 17, 12, 24, 235, 161, - 2, 99, 197, 47, 17, 12, 24, 235, 161, 2, 70, 47, 17, 12, 24, 62, 2, 134, - 47, 17, 12, 24, 62, 2, 111, 47, 17, 12, 24, 62, 2, 236, 147, 47, 17, 12, - 24, 62, 2, 62, 47, 17, 12, 24, 62, 2, 99, 197, 47, 17, 12, 24, 62, 2, 70, - 47, 17, 12, 24, 231, 194, 2, 134, 47, 17, 12, 24, 231, 194, 2, 111, 47, - 17, 12, 24, 231, 194, 2, 236, 147, 47, 17, 12, 24, 231, 194, 2, 62, 47, - 17, 12, 24, 231, 194, 2, 99, 197, 47, 17, 12, 24, 231, 194, 2, 70, 47, - 17, 12, 24, 243, 147, 2, 134, 47, 17, 12, 24, 243, 147, 2, 62, 47, 17, - 12, 24, 243, 147, 2, 99, 197, 47, 17, 12, 24, 243, 147, 2, 70, 47, 17, - 12, 24, 70, 2, 134, 47, 17, 12, 24, 70, 2, 111, 47, 17, 12, 24, 70, 2, - 236, 147, 47, 17, 12, 24, 70, 2, 62, 47, 17, 12, 24, 70, 2, 99, 197, 47, - 17, 12, 24, 70, 2, 70, 47, 17, 12, 24, 222, 30, 2, 223, 59, 99, 47, 17, - 12, 24, 227, 197, 2, 223, 59, 99, 47, 17, 12, 24, 99, 197, 2, 223, 59, - 99, 47, 17, 12, 24, 225, 17, 2, 249, 171, 47, 17, 12, 24, 225, 17, 2, - 236, 205, 47, 17, 12, 24, 225, 17, 2, 245, 239, 47, 17, 12, 24, 225, 17, - 2, 249, 173, 47, 17, 12, 24, 225, 17, 2, 236, 207, 47, 17, 12, 24, 225, - 17, 2, 223, 59, 99, 47, 17, 12, 24, 70, 2, 181, 71, 2, 227, 197, 39, 17, - 12, 24, 70, 2, 181, 71, 2, 217, 107, 39, 17, 12, 24, 70, 2, 181, 71, 2, - 62, 39, 17, 12, 24, 70, 2, 181, 71, 2, 231, 194, 39, 17, 12, 24, 70, 2, - 181, 71, 2, 99, 197, 39, 17, 12, 24, 70, 2, 181, 71, 2, 70, 39, 17, 12, - 24, 252, 129, 2, 227, 197, 39, 17, 12, 24, 252, 129, 2, 217, 107, 39, 17, - 12, 24, 252, 129, 2, 62, 39, 17, 12, 24, 252, 129, 2, 231, 194, 39, 17, - 12, 24, 252, 129, 2, 99, 197, 39, 17, 12, 24, 252, 129, 2, 70, 39, 17, - 12, 24, 222, 78, 2, 227, 197, 39, 17, 12, 24, 222, 78, 2, 217, 107, 39, - 17, 12, 24, 222, 78, 2, 62, 39, 17, 12, 24, 222, 78, 2, 231, 194, 39, 17, - 12, 24, 222, 78, 2, 99, 197, 39, 17, 12, 24, 222, 78, 2, 70, 39, 17, 12, - 24, 222, 20, 2, 227, 197, 39, 17, 12, 24, 222, 20, 2, 217, 107, 39, 17, - 12, 24, 222, 20, 2, 62, 39, 17, 12, 24, 222, 20, 2, 231, 194, 39, 17, 12, - 24, 222, 20, 2, 99, 197, 39, 17, 12, 24, 222, 20, 2, 70, 39, 17, 12, 24, - 245, 222, 2, 99, 197, 39, 17, 12, 24, 245, 222, 2, 70, 39, 17, 12, 24, - 228, 149, 2, 99, 197, 39, 17, 12, 24, 228, 149, 2, 70, 39, 17, 12, 24, - 236, 247, 2, 99, 39, 17, 12, 24, 236, 247, 2, 235, 161, 39, 17, 12, 24, - 236, 247, 2, 62, 39, 17, 12, 24, 236, 247, 2, 99, 197, 39, 17, 12, 24, - 236, 247, 2, 70, 39, 17, 12, 24, 235, 161, 2, 62, 39, 17, 12, 24, 235, - 161, 2, 99, 197, 39, 17, 12, 24, 235, 161, 2, 70, 39, 17, 12, 24, 62, 2, - 99, 39, 17, 12, 24, 62, 2, 62, 39, 17, 12, 24, 231, 194, 2, 227, 197, 39, - 17, 12, 24, 231, 194, 2, 217, 107, 39, 17, 12, 24, 231, 194, 2, 62, 39, - 17, 12, 24, 231, 194, 2, 231, 194, 39, 17, 12, 24, 231, 194, 2, 99, 197, - 39, 17, 12, 24, 231, 194, 2, 70, 39, 17, 12, 24, 99, 197, 2, 223, 59, 99, - 39, 17, 12, 24, 70, 2, 227, 197, 39, 17, 12, 24, 70, 2, 217, 107, 39, 17, - 12, 24, 70, 2, 62, 39, 17, 12, 24, 70, 2, 231, 194, 39, 17, 12, 24, 70, - 2, 99, 197, 39, 17, 12, 24, 70, 2, 70, 39, 17, 12, 24, 70, 2, 181, 71, 2, - 134, 66, 17, 12, 24, 70, 2, 181, 71, 2, 111, 66, 17, 12, 24, 70, 2, 181, - 71, 2, 236, 147, 66, 17, 12, 24, 70, 2, 181, 71, 2, 62, 66, 17, 12, 24, - 70, 2, 181, 71, 2, 243, 147, 66, 17, 12, 24, 252, 129, 2, 134, 66, 17, - 12, 24, 252, 129, 2, 111, 66, 17, 12, 24, 252, 129, 2, 236, 147, 66, 17, - 12, 24, 252, 129, 2, 62, 66, 17, 12, 24, 252, 129, 2, 243, 147, 66, 17, - 12, 24, 222, 78, 2, 134, 66, 17, 12, 24, 222, 78, 2, 111, 66, 17, 12, 24, - 222, 78, 2, 236, 147, 66, 17, 12, 24, 222, 78, 2, 62, 66, 17, 12, 24, - 222, 78, 2, 243, 147, 66, 17, 12, 24, 222, 20, 2, 62, 66, 17, 12, 24, - 134, 2, 111, 66, 17, 12, 24, 134, 2, 62, 66, 17, 12, 24, 111, 2, 134, 66, - 17, 12, 24, 111, 2, 62, 66, 17, 12, 24, 236, 147, 2, 134, 66, 17, 12, 24, - 236, 147, 2, 62, 66, 17, 12, 24, 226, 83, 2, 134, 66, 17, 12, 24, 226, - 83, 2, 111, 66, 17, 12, 24, 226, 83, 2, 236, 147, 66, 17, 12, 24, 226, - 83, 2, 62, 66, 17, 12, 24, 226, 171, 2, 111, 66, 17, 12, 24, 226, 171, 2, - 236, 147, 66, 17, 12, 24, 226, 171, 2, 62, 66, 17, 12, 24, 249, 203, 2, - 134, 66, 17, 12, 24, 249, 203, 2, 111, 66, 17, 12, 24, 249, 203, 2, 236, - 147, 66, 17, 12, 24, 249, 203, 2, 62, 66, 17, 12, 24, 222, 138, 2, 111, - 66, 17, 12, 24, 217, 110, 2, 62, 66, 17, 12, 24, 254, 192, 2, 134, 66, - 17, 12, 24, 254, 192, 2, 62, 66, 17, 12, 24, 244, 123, 2, 134, 66, 17, - 12, 24, 244, 123, 2, 62, 66, 17, 12, 24, 245, 222, 2, 134, 66, 17, 12, - 24, 245, 222, 2, 111, 66, 17, 12, 24, 245, 222, 2, 236, 147, 66, 17, 12, - 24, 245, 222, 2, 62, 66, 17, 12, 24, 228, 149, 2, 111, 66, 17, 12, 24, - 228, 149, 2, 62, 66, 17, 12, 24, 236, 247, 2, 134, 66, 17, 12, 24, 236, - 247, 2, 111, 66, 17, 12, 24, 236, 247, 2, 236, 147, 66, 17, 12, 24, 236, - 247, 2, 235, 161, 66, 17, 12, 24, 236, 247, 2, 62, 66, 17, 12, 24, 235, - 161, 2, 134, 66, 17, 12, 24, 235, 161, 2, 111, 66, 17, 12, 24, 235, 161, - 2, 236, 147, 66, 17, 12, 24, 235, 161, 2, 62, 66, 17, 12, 24, 235, 161, - 2, 243, 147, 66, 17, 12, 24, 62, 2, 134, 66, 17, 12, 24, 62, 2, 111, 66, - 17, 12, 24, 62, 2, 236, 147, 66, 17, 12, 24, 62, 2, 62, 66, 17, 12, 24, - 231, 194, 2, 134, 66, 17, 12, 24, 231, 194, 2, 111, 66, 17, 12, 24, 231, - 194, 2, 236, 147, 66, 17, 12, 24, 231, 194, 2, 62, 66, 17, 12, 24, 231, - 194, 2, 243, 147, 66, 17, 12, 24, 243, 147, 2, 134, 66, 17, 12, 24, 243, - 147, 2, 62, 66, 17, 12, 24, 243, 147, 2, 223, 59, 99, 66, 17, 12, 24, 70, - 2, 134, 66, 17, 12, 24, 70, 2, 111, 66, 17, 12, 24, 70, 2, 236, 147, 66, - 17, 12, 24, 70, 2, 62, 66, 17, 12, 24, 70, 2, 243, 147, 66, 17, 12, 24, - 70, 2, 181, 71, 2, 62, 128, 17, 12, 24, 70, 2, 181, 71, 2, 243, 147, 128, - 17, 12, 24, 252, 129, 2, 62, 128, 17, 12, 24, 252, 129, 2, 243, 147, 128, - 17, 12, 24, 222, 78, 2, 62, 128, 17, 12, 24, 222, 78, 2, 243, 147, 128, - 17, 12, 24, 222, 20, 2, 62, 128, 17, 12, 24, 222, 20, 2, 243, 147, 128, - 17, 12, 24, 226, 83, 2, 62, 128, 17, 12, 24, 226, 83, 2, 243, 147, 128, - 17, 12, 24, 224, 243, 2, 62, 128, 17, 12, 24, 224, 243, 2, 243, 147, 128, - 17, 12, 24, 236, 247, 2, 235, 161, 128, 17, 12, 24, 236, 247, 2, 62, 128, - 17, 12, 24, 235, 161, 2, 62, 128, 17, 12, 24, 231, 194, 2, 62, 128, 17, - 12, 24, 231, 194, 2, 243, 147, 128, 17, 12, 24, 70, 2, 62, 128, 17, 12, - 24, 70, 2, 243, 147, 128, 17, 12, 24, 225, 17, 2, 245, 239, 128, 17, 12, - 24, 225, 17, 2, 249, 173, 128, 17, 12, 24, 225, 17, 2, 236, 207, 128, 17, - 12, 24, 222, 138, 2, 99, 197, 47, 17, 12, 24, 222, 138, 2, 70, 47, 17, - 12, 24, 254, 192, 2, 99, 197, 47, 17, 12, 24, 254, 192, 2, 70, 47, 17, - 12, 24, 244, 123, 2, 99, 197, 47, 17, 12, 24, 244, 123, 2, 70, 47, 17, - 12, 24, 226, 83, 2, 99, 197, 47, 17, 12, 24, 226, 83, 2, 70, 47, 17, 12, - 24, 224, 243, 2, 99, 197, 47, 17, 12, 24, 224, 243, 2, 70, 47, 17, 12, - 24, 111, 2, 99, 197, 47, 17, 12, 24, 111, 2, 70, 47, 17, 12, 24, 134, 2, - 99, 197, 47, 17, 12, 24, 134, 2, 70, 47, 17, 12, 24, 236, 147, 2, 99, - 197, 47, 17, 12, 24, 236, 147, 2, 70, 47, 17, 12, 24, 226, 171, 2, 99, - 197, 47, 17, 12, 24, 226, 171, 2, 70, 47, 17, 12, 24, 249, 203, 2, 99, - 197, 47, 17, 12, 24, 249, 203, 2, 70, 47, 17, 12, 24, 224, 243, 2, 134, - 47, 17, 12, 24, 224, 243, 2, 111, 47, 17, 12, 24, 224, 243, 2, 236, 147, - 47, 17, 12, 24, 224, 243, 2, 62, 47, 17, 12, 24, 224, 243, 2, 227, 197, - 47, 17, 12, 24, 226, 83, 2, 227, 197, 47, 17, 12, 24, 226, 171, 2, 227, - 197, 47, 17, 12, 24, 249, 203, 2, 227, 197, 47, 17, 12, 24, 222, 138, 2, - 99, 197, 39, 17, 12, 24, 222, 138, 2, 70, 39, 17, 12, 24, 254, 192, 2, - 99, 197, 39, 17, 12, 24, 254, 192, 2, 70, 39, 17, 12, 24, 244, 123, 2, - 99, 197, 39, 17, 12, 24, 244, 123, 2, 70, 39, 17, 12, 24, 226, 83, 2, 99, - 197, 39, 17, 12, 24, 226, 83, 2, 70, 39, 17, 12, 24, 224, 243, 2, 99, - 197, 39, 17, 12, 24, 224, 243, 2, 70, 39, 17, 12, 24, 111, 2, 99, 197, - 39, 17, 12, 24, 111, 2, 70, 39, 17, 12, 24, 134, 2, 99, 197, 39, 17, 12, - 24, 134, 2, 70, 39, 17, 12, 24, 236, 147, 2, 99, 197, 39, 17, 12, 24, - 236, 147, 2, 70, 39, 17, 12, 24, 226, 171, 2, 99, 197, 39, 17, 12, 24, - 226, 171, 2, 70, 39, 17, 12, 24, 249, 203, 2, 99, 197, 39, 17, 12, 24, - 249, 203, 2, 70, 39, 17, 12, 24, 224, 243, 2, 134, 39, 17, 12, 24, 224, - 243, 2, 111, 39, 17, 12, 24, 224, 243, 2, 236, 147, 39, 17, 12, 24, 224, - 243, 2, 62, 39, 17, 12, 24, 224, 243, 2, 227, 197, 39, 17, 12, 24, 226, - 83, 2, 227, 197, 39, 17, 12, 24, 226, 171, 2, 227, 197, 39, 17, 12, 24, - 249, 203, 2, 227, 197, 39, 17, 12, 24, 224, 243, 2, 134, 66, 17, 12, 24, - 224, 243, 2, 111, 66, 17, 12, 24, 224, 243, 2, 236, 147, 66, 17, 12, 24, - 224, 243, 2, 62, 66, 17, 12, 24, 226, 83, 2, 243, 147, 66, 17, 12, 24, - 224, 243, 2, 243, 147, 66, 17, 12, 24, 222, 138, 2, 62, 66, 17, 12, 24, - 226, 83, 2, 134, 128, 17, 12, 24, 226, 83, 2, 111, 128, 17, 12, 24, 226, - 83, 2, 236, 147, 128, 17, 12, 24, 224, 243, 2, 134, 128, 17, 12, 24, 224, - 243, 2, 111, 128, 17, 12, 24, 224, 243, 2, 236, 147, 128, 17, 12, 24, - 222, 138, 2, 62, 128, 17, 12, 24, 217, 110, 2, 62, 128, 17, 12, 24, 99, - 2, 245, 237, 39, 17, 12, 24, 99, 2, 245, 237, 47, 17, 230, 97, 42, 229, - 229, 230, 97, 45, 229, 229, 12, 24, 222, 78, 2, 134, 2, 62, 66, 17, 12, - 24, 222, 78, 2, 111, 2, 134, 39, 17, 12, 24, 222, 78, 2, 111, 2, 134, 66, - 17, 12, 24, 222, 78, 2, 111, 2, 62, 66, 17, 12, 24, 222, 78, 2, 236, 147, - 2, 62, 66, 17, 12, 24, 222, 78, 2, 62, 2, 134, 66, 17, 12, 24, 222, 78, - 2, 62, 2, 111, 66, 17, 12, 24, 222, 78, 2, 62, 2, 236, 147, 66, 17, 12, - 24, 134, 2, 62, 2, 111, 39, 17, 12, 24, 134, 2, 62, 2, 111, 66, 17, 12, - 24, 111, 2, 62, 2, 70, 39, 17, 12, 24, 111, 2, 62, 2, 99, 197, 39, 17, - 12, 24, 226, 83, 2, 111, 2, 134, 66, 17, 12, 24, 226, 83, 2, 134, 2, 111, - 66, 17, 12, 24, 226, 83, 2, 134, 2, 99, 197, 39, 17, 12, 24, 226, 83, 2, - 62, 2, 111, 39, 17, 12, 24, 226, 83, 2, 62, 2, 111, 66, 17, 12, 24, 226, - 83, 2, 62, 2, 134, 66, 17, 12, 24, 226, 83, 2, 62, 2, 62, 39, 17, 12, 24, - 226, 83, 2, 62, 2, 62, 66, 17, 12, 24, 226, 171, 2, 111, 2, 111, 39, 17, - 12, 24, 226, 171, 2, 111, 2, 111, 66, 17, 12, 24, 226, 171, 2, 62, 2, 62, - 39, 17, 12, 24, 224, 243, 2, 111, 2, 62, 39, 17, 12, 24, 224, 243, 2, - 111, 2, 62, 66, 17, 12, 24, 224, 243, 2, 134, 2, 70, 39, 17, 12, 24, 224, - 243, 2, 62, 2, 236, 147, 39, 17, 12, 24, 224, 243, 2, 62, 2, 236, 147, - 66, 17, 12, 24, 224, 243, 2, 62, 2, 62, 39, 17, 12, 24, 224, 243, 2, 62, - 2, 62, 66, 17, 12, 24, 249, 203, 2, 111, 2, 99, 197, 39, 17, 12, 24, 249, - 203, 2, 236, 147, 2, 62, 39, 17, 12, 24, 249, 203, 2, 236, 147, 2, 62, - 66, 17, 12, 24, 222, 138, 2, 62, 2, 111, 39, 17, 12, 24, 222, 138, 2, 62, - 2, 111, 66, 17, 12, 24, 222, 138, 2, 62, 2, 62, 66, 17, 12, 24, 222, 138, - 2, 62, 2, 70, 39, 17, 12, 24, 254, 192, 2, 134, 2, 62, 39, 17, 12, 24, - 254, 192, 2, 62, 2, 62, 39, 17, 12, 24, 254, 192, 2, 62, 2, 62, 66, 17, - 12, 24, 254, 192, 2, 62, 2, 99, 197, 39, 17, 12, 24, 244, 123, 2, 62, 2, - 62, 39, 17, 12, 24, 244, 123, 2, 62, 2, 70, 39, 17, 12, 24, 244, 123, 2, - 62, 2, 99, 197, 39, 17, 12, 24, 245, 222, 2, 236, 147, 2, 62, 39, 17, 12, - 24, 245, 222, 2, 236, 147, 2, 62, 66, 17, 12, 24, 228, 149, 2, 62, 2, - 111, 39, 17, 12, 24, 228, 149, 2, 62, 2, 62, 39, 17, 12, 24, 235, 161, 2, - 111, 2, 62, 39, 17, 12, 24, 235, 161, 2, 111, 2, 70, 39, 17, 12, 24, 235, - 161, 2, 111, 2, 99, 197, 39, 17, 12, 24, 235, 161, 2, 134, 2, 134, 66, - 17, 12, 24, 235, 161, 2, 134, 2, 134, 39, 17, 12, 24, 235, 161, 2, 236, - 147, 2, 62, 39, 17, 12, 24, 235, 161, 2, 236, 147, 2, 62, 66, 17, 12, 24, - 235, 161, 2, 62, 2, 111, 39, 17, 12, 24, 235, 161, 2, 62, 2, 111, 66, 17, - 12, 24, 62, 2, 111, 2, 134, 66, 17, 12, 24, 62, 2, 111, 2, 62, 66, 17, - 12, 24, 62, 2, 111, 2, 70, 39, 17, 12, 24, 62, 2, 134, 2, 111, 66, 17, - 12, 24, 62, 2, 134, 2, 62, 66, 17, 12, 24, 62, 2, 236, 147, 2, 134, 66, - 17, 12, 24, 62, 2, 236, 147, 2, 62, 66, 17, 12, 24, 62, 2, 134, 2, 236, - 147, 66, 17, 12, 24, 243, 147, 2, 62, 2, 134, 66, 17, 12, 24, 243, 147, - 2, 62, 2, 62, 66, 17, 12, 24, 231, 194, 2, 111, 2, 62, 66, 17, 12, 24, - 231, 194, 2, 111, 2, 99, 197, 39, 17, 12, 24, 231, 194, 2, 134, 2, 62, - 39, 17, 12, 24, 231, 194, 2, 134, 2, 62, 66, 17, 12, 24, 231, 194, 2, - 134, 2, 99, 197, 39, 17, 12, 24, 231, 194, 2, 62, 2, 70, 39, 17, 12, 24, - 231, 194, 2, 62, 2, 99, 197, 39, 17, 12, 24, 70, 2, 62, 2, 62, 39, 17, - 12, 24, 70, 2, 62, 2, 62, 66, 17, 12, 24, 252, 129, 2, 236, 147, 2, 70, - 39, 17, 12, 24, 222, 78, 2, 134, 2, 70, 39, 17, 12, 24, 222, 78, 2, 134, - 2, 99, 197, 39, 17, 12, 24, 222, 78, 2, 236, 147, 2, 70, 39, 17, 12, 24, - 222, 78, 2, 236, 147, 2, 99, 197, 39, 17, 12, 24, 222, 78, 2, 62, 2, 70, - 39, 17, 12, 24, 222, 78, 2, 62, 2, 99, 197, 39, 17, 12, 24, 134, 2, 62, - 2, 70, 39, 17, 12, 24, 134, 2, 111, 2, 99, 197, 39, 17, 12, 24, 134, 2, - 62, 2, 99, 197, 39, 17, 12, 24, 226, 83, 2, 236, 147, 2, 99, 197, 39, 17, - 12, 24, 226, 171, 2, 111, 2, 70, 39, 17, 12, 24, 224, 243, 2, 111, 2, 70, - 39, 17, 12, 24, 249, 203, 2, 111, 2, 70, 39, 17, 12, 24, 235, 161, 2, - 134, 2, 70, 39, 17, 12, 24, 235, 161, 2, 62, 2, 70, 39, 17, 12, 24, 70, - 2, 111, 2, 70, 39, 17, 12, 24, 70, 2, 134, 2, 70, 39, 17, 12, 24, 70, 2, - 62, 2, 70, 39, 17, 12, 24, 62, 2, 62, 2, 70, 39, 17, 12, 24, 228, 149, 2, - 62, 2, 70, 39, 17, 12, 24, 231, 194, 2, 111, 2, 70, 39, 17, 12, 24, 228, - 149, 2, 62, 2, 111, 66, 17, 12, 24, 235, 161, 2, 111, 2, 62, 66, 17, 12, - 24, 254, 192, 2, 62, 2, 70, 39, 17, 12, 24, 236, 247, 2, 62, 2, 70, 39, - 17, 12, 24, 231, 194, 2, 134, 2, 111, 66, 17, 12, 24, 62, 2, 236, 147, 2, - 70, 39, 17, 12, 24, 235, 161, 2, 134, 2, 62, 66, 17, 12, 24, 236, 247, 2, - 62, 2, 62, 39, 17, 12, 24, 235, 161, 2, 134, 2, 62, 39, 17, 12, 24, 231, - 194, 2, 134, 2, 111, 39, 17, 12, 24, 134, 2, 111, 2, 70, 39, 17, 12, 24, - 111, 2, 134, 2, 70, 39, 17, 12, 24, 62, 2, 134, 2, 70, 39, 17, 12, 24, - 245, 222, 2, 62, 2, 70, 39, 17, 12, 24, 252, 129, 2, 111, 2, 70, 39, 17, - 12, 24, 236, 247, 2, 62, 2, 62, 66, 17, 12, 24, 254, 192, 2, 134, 2, 62, - 66, 17, 12, 24, 226, 171, 2, 62, 2, 62, 66, 17, 12, 24, 226, 83, 2, 236, - 147, 2, 70, 39, 17, 12, 24, 231, 194, 2, 134, 2, 70, 39, 17, 12, 24, 226, - 153, 220, 32, 254, 14, 236, 35, 223, 137, 5, 47, 17, 12, 24, 228, 145, - 220, 32, 254, 14, 236, 35, 223, 137, 5, 47, 17, 12, 24, 254, 156, 47, 17, - 12, 24, 254, 179, 47, 17, 12, 24, 233, 130, 47, 17, 12, 24, 226, 154, 47, - 17, 12, 24, 227, 230, 47, 17, 12, 24, 254, 170, 47, 17, 12, 24, 218, 249, - 47, 17, 12, 24, 226, 153, 47, 17, 12, 24, 226, 152, 254, 170, 218, 248, - 12, 24, 237, 120, 227, 146, 55, 12, 24, 252, 61, 254, 65, 254, 66, 41, - 226, 73, 41, 225, 218, 41, 225, 150, 41, 225, 139, 41, 225, 128, 41, 225, - 117, 41, 225, 106, 41, 225, 95, 41, 225, 84, 41, 226, 72, 41, 226, 61, - 41, 226, 50, 41, 226, 39, 41, 226, 28, 41, 226, 17, 41, 226, 6, 228, 238, - 245, 124, 35, 69, 250, 168, 228, 238, 245, 124, 35, 69, 98, 250, 168, - 228, 238, 245, 124, 35, 69, 98, 245, 90, 223, 136, 228, 238, 245, 124, - 35, 69, 250, 175, 228, 238, 245, 124, 35, 69, 225, 67, 228, 238, 245, - 124, 35, 69, 246, 95, 78, 228, 238, 245, 124, 35, 69, 228, 82, 78, 228, - 238, 245, 124, 35, 69, 42, 67, 235, 91, 115, 228, 238, 245, 124, 35, 69, - 45, 67, 235, 91, 252, 16, 228, 238, 245, 124, 35, 69, 186, 246, 208, 36, - 24, 42, 243, 194, 36, 24, 45, 243, 194, 36, 51, 221, 180, 42, 243, 194, - 36, 51, 221, 180, 45, 243, 194, 36, 234, 116, 42, 243, 194, 36, 234, 116, - 45, 243, 194, 36, 250, 151, 234, 115, 228, 238, 245, 124, 35, 69, 124, - 61, 235, 121, 228, 238, 245, 124, 35, 69, 246, 206, 249, 146, 228, 238, - 245, 124, 35, 69, 246, 198, 249, 146, 228, 238, 245, 124, 35, 69, 109, - 235, 43, 228, 238, 245, 124, 35, 69, 218, 235, 109, 235, 43, 228, 238, - 245, 124, 35, 69, 42, 229, 229, 228, 238, 245, 124, 35, 69, 45, 229, 229, - 228, 238, 245, 124, 35, 69, 42, 250, 79, 115, 228, 238, 245, 124, 35, 69, - 45, 250, 79, 115, 228, 238, 245, 124, 35, 69, 42, 221, 114, 224, 236, - 115, 228, 238, 245, 124, 35, 69, 45, 221, 114, 224, 236, 115, 228, 238, - 245, 124, 35, 69, 42, 84, 235, 91, 115, 228, 238, 245, 124, 35, 69, 45, - 84, 235, 91, 115, 228, 238, 245, 124, 35, 69, 42, 51, 254, 120, 115, 228, - 238, 245, 124, 35, 69, 45, 51, 254, 120, 115, 228, 238, 245, 124, 35, 69, - 42, 254, 120, 115, 228, 238, 245, 124, 35, 69, 45, 254, 120, 115, 228, - 238, 245, 124, 35, 69, 42, 250, 124, 115, 228, 238, 245, 124, 35, 69, 45, - 250, 124, 115, 228, 238, 245, 124, 35, 69, 42, 67, 250, 124, 115, 228, - 238, 245, 124, 35, 69, 45, 67, 250, 124, 115, 225, 49, 248, 145, 67, 225, - 49, 248, 145, 228, 238, 245, 124, 35, 69, 42, 40, 115, 228, 238, 245, - 124, 35, 69, 45, 40, 115, 249, 145, 230, 73, 251, 82, 230, 73, 218, 235, - 230, 73, 51, 218, 235, 230, 73, 249, 145, 109, 235, 43, 251, 82, 109, - 235, 43, 218, 235, 109, 235, 43, 3, 250, 168, 3, 98, 250, 168, 3, 245, - 90, 223, 136, 3, 225, 67, 3, 250, 175, 3, 228, 82, 78, 3, 246, 95, 78, 3, - 246, 206, 249, 146, 3, 42, 229, 229, 3, 45, 229, 229, 3, 42, 250, 79, - 115, 3, 45, 250, 79, 115, 3, 42, 221, 114, 224, 236, 115, 3, 45, 221, - 114, 224, 236, 115, 3, 54, 55, 3, 254, 134, 3, 253, 251, 3, 88, 55, 3, - 242, 120, 3, 235, 87, 55, 3, 244, 30, 55, 3, 246, 154, 55, 3, 227, 160, - 224, 17, 3, 248, 155, 55, 3, 229, 169, 55, 3, 250, 167, 253, 244, 12, - 245, 237, 47, 17, 12, 222, 108, 2, 245, 237, 50, 12, 249, 171, 47, 17, - 12, 222, 136, 245, 107, 12, 236, 205, 47, 17, 12, 245, 239, 47, 17, 12, - 245, 239, 128, 17, 12, 249, 173, 47, 17, 12, 249, 173, 128, 17, 12, 236, - 207, 47, 17, 12, 236, 207, 128, 17, 12, 225, 17, 47, 17, 12, 225, 17, - 128, 17, 12, 223, 76, 47, 17, 12, 223, 76, 128, 17, 12, 1, 181, 47, 17, - 12, 1, 99, 2, 234, 111, 71, 47, 17, 12, 1, 99, 2, 234, 111, 71, 39, 17, - 12, 1, 99, 2, 181, 71, 47, 17, 12, 1, 99, 2, 181, 71, 39, 17, 12, 1, 218, - 234, 2, 181, 71, 47, 17, 12, 1, 218, 234, 2, 181, 71, 39, 17, 12, 1, 99, - 2, 181, 252, 118, 47, 17, 12, 1, 99, 2, 181, 252, 118, 39, 17, 12, 1, 70, - 2, 181, 71, 47, 17, 12, 1, 70, 2, 181, 71, 39, 17, 12, 1, 70, 2, 181, 71, - 66, 17, 12, 1, 70, 2, 181, 71, 128, 17, 12, 1, 99, 47, 17, 12, 1, 99, 39, - 17, 12, 1, 252, 129, 47, 17, 12, 1, 252, 129, 39, 17, 12, 1, 252, 129, - 66, 17, 12, 1, 252, 129, 128, 17, 12, 1, 222, 78, 234, 73, 47, 17, 12, 1, - 222, 78, 234, 73, 39, 17, 12, 1, 222, 78, 47, 17, 12, 1, 222, 78, 39, 17, - 12, 1, 222, 78, 66, 17, 12, 1, 222, 78, 128, 17, 12, 1, 222, 20, 47, 17, - 12, 1, 222, 20, 39, 17, 12, 1, 222, 20, 66, 17, 12, 1, 222, 20, 128, 17, - 12, 1, 134, 47, 17, 12, 1, 134, 39, 17, 12, 1, 134, 66, 17, 12, 1, 134, - 128, 17, 12, 1, 111, 47, 17, 12, 1, 111, 39, 17, 12, 1, 111, 66, 17, 12, - 1, 111, 128, 17, 12, 1, 236, 147, 47, 17, 12, 1, 236, 147, 39, 17, 12, 1, - 236, 147, 66, 17, 12, 1, 236, 147, 128, 17, 12, 1, 249, 184, 47, 17, 12, - 1, 249, 184, 39, 17, 12, 1, 222, 30, 47, 17, 12, 1, 222, 30, 39, 17, 12, - 1, 227, 197, 47, 17, 12, 1, 227, 197, 39, 17, 12, 1, 217, 107, 47, 17, - 12, 1, 217, 107, 39, 17, 12, 1, 226, 83, 47, 17, 12, 1, 226, 83, 39, 17, - 12, 1, 226, 83, 66, 17, 12, 1, 226, 83, 128, 17, 12, 1, 224, 243, 47, 17, - 12, 1, 224, 243, 39, 17, 12, 1, 224, 243, 66, 17, 12, 1, 224, 243, 128, - 17, 12, 1, 226, 171, 47, 17, 12, 1, 226, 171, 39, 17, 12, 1, 226, 171, - 66, 17, 12, 1, 226, 171, 128, 17, 12, 1, 249, 203, 47, 17, 12, 1, 249, - 203, 39, 17, 12, 1, 249, 203, 66, 17, 12, 1, 249, 203, 128, 17, 12, 1, - 222, 138, 47, 17, 12, 1, 222, 138, 39, 17, 12, 1, 222, 138, 66, 17, 12, - 1, 222, 138, 128, 17, 12, 1, 217, 110, 47, 17, 12, 1, 217, 110, 39, 17, - 12, 1, 217, 110, 66, 17, 12, 1, 217, 110, 128, 17, 12, 1, 254, 192, 47, - 17, 12, 1, 254, 192, 39, 17, 12, 1, 254, 192, 66, 17, 12, 1, 254, 192, - 128, 17, 12, 1, 244, 123, 47, 17, 12, 1, 244, 123, 39, 17, 12, 1, 244, - 123, 66, 17, 12, 1, 244, 123, 128, 17, 12, 1, 245, 222, 47, 17, 12, 1, - 245, 222, 39, 17, 12, 1, 245, 222, 66, 17, 12, 1, 245, 222, 128, 17, 12, - 1, 228, 149, 47, 17, 12, 1, 228, 149, 39, 17, 12, 1, 228, 149, 66, 17, - 12, 1, 228, 149, 128, 17, 12, 1, 236, 247, 47, 17, 12, 1, 236, 247, 39, - 17, 12, 1, 236, 247, 66, 17, 12, 1, 236, 247, 128, 17, 12, 1, 235, 161, - 47, 17, 12, 1, 235, 161, 39, 17, 12, 1, 235, 161, 66, 17, 12, 1, 235, - 161, 128, 17, 12, 1, 62, 47, 17, 12, 1, 62, 39, 17, 12, 1, 62, 66, 17, - 12, 1, 62, 128, 17, 12, 1, 231, 194, 47, 17, 12, 1, 231, 194, 39, 17, 12, - 1, 231, 194, 66, 17, 12, 1, 231, 194, 128, 17, 12, 1, 243, 147, 47, 17, - 12, 1, 243, 147, 39, 17, 12, 1, 243, 147, 66, 17, 12, 1, 243, 147, 128, - 17, 12, 1, 218, 234, 47, 17, 12, 1, 218, 234, 39, 17, 12, 1, 99, 197, 47, - 17, 12, 1, 99, 197, 39, 17, 12, 1, 70, 47, 17, 12, 1, 70, 39, 17, 12, 1, - 70, 66, 17, 12, 1, 70, 128, 17, 12, 24, 235, 161, 2, 99, 2, 234, 111, 71, - 47, 17, 12, 24, 235, 161, 2, 99, 2, 234, 111, 71, 39, 17, 12, 24, 235, - 161, 2, 99, 2, 181, 71, 47, 17, 12, 24, 235, 161, 2, 99, 2, 181, 71, 39, - 17, 12, 24, 235, 161, 2, 99, 2, 181, 252, 118, 47, 17, 12, 24, 235, 161, - 2, 99, 2, 181, 252, 118, 39, 17, 12, 24, 235, 161, 2, 99, 47, 17, 12, 24, - 235, 161, 2, 99, 39, 17, 217, 85, 218, 199, 231, 203, 223, 254, 110, 246, - 95, 78, 110, 228, 69, 78, 110, 54, 55, 110, 248, 155, 55, 110, 229, 169, - 55, 110, 254, 134, 110, 254, 79, 110, 42, 229, 229, 110, 45, 229, 229, - 110, 253, 251, 110, 88, 55, 110, 250, 168, 110, 242, 120, 110, 245, 90, - 223, 136, 110, 224, 17, 110, 20, 217, 84, 110, 20, 107, 110, 20, 103, - 110, 20, 160, 110, 20, 154, 110, 20, 174, 110, 20, 182, 110, 20, 191, - 110, 20, 185, 110, 20, 190, 110, 250, 175, 110, 225, 67, 110, 235, 87, - 55, 110, 246, 154, 55, 110, 244, 30, 55, 110, 228, 82, 78, 110, 250, 167, - 253, 244, 110, 7, 6, 1, 60, 110, 7, 6, 1, 253, 204, 110, 7, 6, 1, 251, - 202, 110, 7, 6, 1, 250, 46, 110, 7, 6, 1, 73, 110, 7, 6, 1, 246, 74, 110, - 7, 6, 1, 245, 67, 110, 7, 6, 1, 243, 225, 110, 7, 6, 1, 72, 110, 7, 6, 1, - 237, 126, 110, 7, 6, 1, 237, 17, 110, 7, 6, 1, 153, 110, 7, 6, 1, 189, - 110, 7, 6, 1, 207, 110, 7, 6, 1, 74, 110, 7, 6, 1, 230, 59, 110, 7, 6, 1, - 228, 163, 110, 7, 6, 1, 152, 110, 7, 6, 1, 198, 110, 7, 6, 1, 222, 201, - 110, 7, 6, 1, 68, 110, 7, 6, 1, 216, 216, 110, 7, 6, 1, 219, 40, 110, 7, - 6, 1, 218, 151, 110, 7, 6, 1, 218, 90, 110, 7, 6, 1, 217, 157, 110, 42, - 40, 115, 110, 227, 160, 224, 17, 110, 45, 40, 115, 110, 250, 217, 255, 0, - 110, 109, 235, 43, 110, 244, 37, 255, 0, 110, 7, 3, 1, 60, 110, 7, 3, 1, - 253, 204, 110, 7, 3, 1, 251, 202, 110, 7, 3, 1, 250, 46, 110, 7, 3, 1, - 73, 110, 7, 3, 1, 246, 74, 110, 7, 3, 1, 245, 67, 110, 7, 3, 1, 243, 225, - 110, 7, 3, 1, 72, 110, 7, 3, 1, 237, 126, 110, 7, 3, 1, 237, 17, 110, 7, - 3, 1, 153, 110, 7, 3, 1, 189, 110, 7, 3, 1, 207, 110, 7, 3, 1, 74, 110, - 7, 3, 1, 230, 59, 110, 7, 3, 1, 228, 163, 110, 7, 3, 1, 152, 110, 7, 3, - 1, 198, 110, 7, 3, 1, 222, 201, 110, 7, 3, 1, 68, 110, 7, 3, 1, 216, 216, - 110, 7, 3, 1, 219, 40, 110, 7, 3, 1, 218, 151, 110, 7, 3, 1, 218, 90, - 110, 7, 3, 1, 217, 157, 110, 42, 250, 79, 115, 110, 69, 235, 43, 110, 45, - 250, 79, 115, 110, 221, 179, 110, 42, 67, 229, 229, 110, 45, 67, 229, - 229, 93, 98, 245, 90, 223, 136, 93, 42, 250, 124, 115, 93, 45, 250, 124, - 115, 93, 98, 250, 168, 93, 52, 233, 193, 248, 145, 93, 52, 1, 218, 187, - 93, 52, 1, 3, 60, 93, 52, 1, 3, 72, 93, 52, 1, 3, 68, 93, 52, 1, 3, 73, - 93, 52, 1, 3, 74, 93, 52, 1, 3, 184, 93, 52, 1, 3, 217, 200, 93, 52, 1, - 3, 217, 231, 93, 52, 1, 3, 221, 0, 93, 236, 202, 228, 223, 224, 9, 78, - 93, 52, 1, 60, 93, 52, 1, 72, 93, 52, 1, 68, 93, 52, 1, 73, 93, 52, 1, - 74, 93, 52, 1, 175, 93, 52, 1, 236, 113, 93, 52, 1, 236, 7, 93, 52, 1, - 236, 184, 93, 52, 1, 236, 57, 93, 52, 1, 226, 177, 93, 52, 1, 224, 140, - 93, 52, 1, 223, 103, 93, 52, 1, 226, 94, 93, 52, 1, 224, 26, 93, 52, 1, - 222, 155, 93, 52, 1, 221, 205, 93, 52, 1, 221, 0, 93, 52, 1, 222, 87, 93, - 52, 1, 101, 93, 52, 1, 208, 93, 52, 1, 232, 62, 93, 52, 1, 231, 144, 93, - 52, 1, 232, 141, 93, 52, 1, 231, 204, 93, 52, 1, 155, 93, 52, 1, 243, - 112, 93, 52, 1, 242, 173, 93, 52, 1, 243, 162, 93, 52, 1, 243, 4, 93, 52, - 1, 196, 93, 52, 1, 233, 196, 93, 52, 1, 233, 99, 93, 52, 1, 234, 25, 93, - 52, 1, 233, 136, 93, 52, 1, 184, 93, 52, 1, 217, 200, 93, 52, 1, 217, - 231, 93, 52, 1, 203, 93, 52, 1, 227, 147, 93, 52, 1, 227, 22, 93, 52, 1, - 227, 216, 93, 52, 1, 227, 75, 93, 52, 1, 219, 7, 93, 52, 1, 207, 93, 52, - 219, 70, 224, 9, 78, 93, 52, 225, 72, 224, 9, 78, 93, 22, 245, 185, 93, - 22, 1, 236, 86, 93, 22, 1, 223, 211, 93, 22, 1, 236, 79, 93, 22, 1, 232, - 55, 93, 22, 1, 232, 53, 93, 22, 1, 232, 52, 93, 22, 1, 221, 192, 93, 22, - 1, 223, 200, 93, 22, 1, 227, 140, 93, 22, 1, 227, 135, 93, 22, 1, 227, - 132, 93, 22, 1, 227, 125, 93, 22, 1, 227, 120, 93, 22, 1, 227, 115, 93, - 22, 1, 227, 126, 93, 22, 1, 227, 138, 93, 22, 1, 233, 187, 93, 22, 1, - 229, 99, 93, 22, 1, 223, 208, 93, 22, 1, 229, 88, 93, 22, 1, 224, 104, - 93, 22, 1, 223, 205, 93, 22, 1, 238, 22, 93, 22, 1, 250, 230, 93, 22, 1, - 223, 215, 93, 22, 1, 251, 29, 93, 22, 1, 236, 128, 93, 22, 1, 222, 0, 93, - 22, 1, 229, 127, 93, 22, 1, 243, 106, 93, 22, 1, 60, 93, 22, 1, 254, 234, - 93, 22, 1, 184, 93, 22, 1, 218, 65, 93, 22, 1, 246, 168, 93, 22, 1, 73, - 93, 22, 1, 218, 16, 93, 22, 1, 218, 25, 93, 22, 1, 74, 93, 22, 1, 219, 7, - 93, 22, 1, 219, 4, 93, 22, 1, 230, 167, 93, 22, 1, 217, 231, 93, 22, 1, - 68, 93, 22, 1, 218, 219, 93, 22, 1, 218, 227, 93, 22, 1, 218, 204, 93, - 22, 1, 217, 200, 93, 22, 1, 246, 115, 93, 22, 1, 217, 250, 93, 22, 1, 72, - 110, 251, 86, 55, 110, 229, 11, 55, 110, 212, 55, 110, 234, 115, 110, - 252, 1, 135, 110, 218, 19, 55, 110, 218, 182, 55, 93, 245, 122, 170, 219, - 152, 93, 127, 65, 93, 220, 53, 65, 93, 90, 65, 93, 247, 130, 65, 93, 84, - 223, 227, 93, 67, 250, 221, 237, 180, 254, 112, 254, 128, 237, 180, 254, - 112, 225, 54, 237, 180, 254, 112, 222, 56, 230, 178, 227, 179, 251, 55, - 227, 179, 251, 55, 57, 49, 4, 253, 188, 60, 57, 49, 4, 253, 157, 73, 57, - 49, 4, 253, 166, 72, 57, 49, 4, 253, 134, 74, 57, 49, 4, 253, 184, 68, - 57, 49, 4, 253, 203, 249, 207, 57, 49, 4, 253, 150, 249, 92, 57, 49, 4, - 253, 190, 249, 15, 57, 49, 4, 253, 180, 248, 167, 57, 49, 4, 253, 144, - 247, 111, 57, 49, 4, 253, 138, 237, 123, 57, 49, 4, 253, 149, 237, 114, - 57, 49, 4, 253, 159, 237, 59, 57, 49, 4, 253, 130, 237, 43, 57, 49, 4, - 253, 118, 175, 57, 49, 4, 253, 151, 236, 184, 57, 49, 4, 253, 128, 236, - 113, 57, 49, 4, 253, 125, 236, 57, 57, 49, 4, 253, 114, 236, 7, 57, 49, - 4, 253, 115, 196, 57, 49, 4, 253, 181, 234, 25, 57, 49, 4, 253, 122, 233, - 196, 57, 49, 4, 253, 179, 233, 136, 57, 49, 4, 253, 171, 233, 99, 57, 49, - 4, 253, 192, 208, 57, 49, 4, 253, 170, 232, 141, 57, 49, 4, 253, 164, - 232, 62, 57, 49, 4, 253, 143, 231, 204, 57, 49, 4, 253, 140, 231, 144, - 57, 49, 4, 253, 199, 187, 57, 49, 4, 253, 123, 229, 198, 57, 49, 4, 253, - 156, 229, 108, 57, 49, 4, 253, 183, 229, 37, 57, 49, 4, 253, 145, 228, - 202, 57, 49, 4, 253, 178, 228, 155, 57, 49, 4, 253, 117, 228, 136, 57, - 49, 4, 253, 173, 228, 121, 57, 49, 4, 253, 162, 228, 110, 57, 49, 4, 253, - 135, 203, 57, 49, 4, 253, 167, 227, 216, 57, 49, 4, 253, 142, 227, 147, - 57, 49, 4, 253, 201, 227, 75, 57, 49, 4, 253, 168, 227, 22, 57, 49, 4, - 253, 163, 226, 177, 57, 49, 4, 253, 186, 226, 94, 57, 49, 4, 253, 154, - 224, 140, 57, 49, 4, 253, 182, 224, 26, 57, 49, 4, 253, 137, 223, 103, - 57, 49, 4, 253, 136, 222, 155, 57, 49, 4, 253, 197, 222, 87, 57, 49, 4, - 253, 158, 221, 205, 57, 49, 4, 253, 195, 101, 57, 49, 4, 253, 126, 221, - 0, 57, 49, 4, 253, 141, 219, 7, 57, 49, 4, 253, 120, 218, 227, 57, 49, 4, - 253, 155, 218, 204, 57, 49, 4, 253, 153, 218, 187, 57, 49, 4, 253, 177, - 217, 114, 57, 49, 4, 253, 121, 217, 92, 57, 49, 4, 253, 174, 217, 21, 57, - 49, 4, 253, 169, 255, 60, 57, 49, 4, 253, 152, 255, 59, 57, 49, 4, 253, - 111, 253, 232, 57, 49, 4, 253, 124, 247, 82, 57, 49, 4, 253, 107, 247, - 81, 57, 49, 4, 253, 147, 231, 85, 57, 49, 4, 253, 165, 228, 201, 57, 49, - 4, 253, 133, 228, 204, 57, 49, 4, 253, 119, 228, 2, 57, 49, 4, 253, 161, - 228, 1, 57, 49, 4, 253, 127, 227, 74, 57, 49, 4, 253, 129, 222, 153, 57, - 49, 4, 253, 109, 220, 223, 57, 49, 4, 253, 106, 103, 57, 49, 16, 253, - 176, 57, 49, 16, 253, 175, 57, 49, 16, 253, 172, 57, 49, 16, 253, 160, - 57, 49, 16, 253, 148, 57, 49, 16, 253, 146, 57, 49, 16, 253, 139, 57, 49, - 16, 253, 132, 57, 49, 16, 253, 131, 57, 49, 16, 253, 116, 57, 49, 16, - 253, 113, 57, 49, 16, 253, 112, 57, 49, 16, 253, 110, 57, 49, 16, 253, - 108, 57, 49, 97, 253, 105, 234, 86, 57, 49, 97, 253, 104, 218, 183, 57, - 49, 97, 253, 103, 249, 80, 57, 49, 97, 253, 102, 246, 151, 57, 49, 97, - 253, 101, 234, 68, 57, 49, 97, 253, 100, 223, 162, 57, 49, 97, 253, 99, - 246, 100, 57, 49, 97, 253, 98, 227, 239, 57, 49, 97, 253, 97, 224, 245, - 57, 49, 97, 253, 96, 243, 161, 57, 49, 97, 253, 95, 224, 4, 57, 49, 97, - 253, 94, 252, 39, 57, 49, 97, 253, 93, 250, 110, 57, 49, 97, 253, 92, - 251, 243, 57, 49, 97, 253, 91, 218, 212, 57, 49, 97, 253, 90, 252, 198, - 57, 49, 97, 253, 89, 230, 147, 57, 49, 97, 253, 88, 223, 244, 57, 49, 97, - 253, 87, 250, 54, 57, 49, 233, 125, 253, 86, 236, 223, 57, 49, 233, 125, - 253, 85, 236, 231, 57, 49, 97, 253, 84, 230, 157, 57, 49, 97, 253, 83, - 218, 192, 57, 49, 97, 253, 82, 57, 49, 233, 125, 253, 81, 254, 44, 57, - 49, 233, 125, 253, 80, 233, 247, 57, 49, 97, 253, 79, 252, 0, 57, 49, 97, - 253, 78, 244, 62, 57, 49, 97, 253, 77, 57, 49, 97, 253, 76, 218, 177, 57, - 49, 97, 253, 75, 57, 49, 97, 253, 74, 57, 49, 97, 253, 73, 242, 189, 57, - 49, 97, 253, 72, 57, 49, 97, 253, 71, 57, 49, 97, 253, 70, 57, 49, 233, - 125, 253, 68, 220, 235, 57, 49, 97, 253, 67, 57, 49, 97, 253, 66, 57, 49, - 97, 253, 65, 250, 192, 57, 49, 97, 253, 64, 57, 49, 97, 253, 63, 57, 49, - 97, 253, 62, 244, 218, 57, 49, 97, 253, 61, 254, 31, 57, 49, 97, 253, 60, - 57, 49, 97, 253, 59, 57, 49, 97, 253, 58, 57, 49, 97, 253, 57, 57, 49, - 97, 253, 56, 57, 49, 97, 253, 55, 57, 49, 97, 253, 54, 57, 49, 97, 253, - 53, 57, 49, 97, 253, 52, 57, 49, 97, 253, 51, 233, 120, 57, 49, 97, 253, - 50, 57, 49, 97, 253, 49, 221, 98, 57, 49, 97, 253, 48, 57, 49, 97, 253, - 47, 57, 49, 97, 253, 46, 57, 49, 97, 253, 45, 57, 49, 97, 253, 44, 57, - 49, 97, 253, 43, 57, 49, 97, 253, 42, 57, 49, 97, 253, 41, 57, 49, 97, - 253, 40, 57, 49, 97, 253, 39, 57, 49, 97, 253, 38, 57, 49, 97, 253, 37, - 243, 140, 57, 49, 97, 253, 16, 245, 131, 57, 49, 97, 253, 13, 252, 182, - 57, 49, 97, 253, 8, 223, 249, 57, 49, 97, 253, 7, 65, 57, 49, 97, 253, 6, - 57, 49, 97, 253, 5, 223, 25, 57, 49, 97, 253, 4, 57, 49, 97, 253, 3, 57, - 49, 97, 253, 2, 218, 208, 251, 52, 57, 49, 97, 253, 1, 251, 52, 57, 49, - 97, 253, 0, 251, 53, 245, 105, 57, 49, 97, 252, 255, 218, 210, 57, 49, - 97, 252, 254, 57, 49, 97, 252, 253, 57, 49, 233, 125, 252, 252, 248, 211, - 57, 49, 97, 252, 251, 57, 49, 97, 252, 250, 57, 49, 97, 252, 248, 57, 49, - 97, 252, 247, 57, 49, 97, 252, 246, 57, 49, 97, 252, 245, 249, 149, 57, - 49, 97, 252, 244, 57, 49, 97, 252, 243, 57, 49, 97, 252, 242, 57, 49, 97, - 252, 241, 57, 49, 97, 252, 240, 57, 49, 97, 219, 99, 253, 69, 57, 49, 97, - 219, 99, 253, 36, 57, 49, 97, 219, 99, 253, 35, 57, 49, 97, 219, 99, 253, - 34, 57, 49, 97, 219, 99, 253, 33, 57, 49, 97, 219, 99, 253, 32, 57, 49, - 97, 219, 99, 253, 31, 57, 49, 97, 219, 99, 253, 30, 57, 49, 97, 219, 99, - 253, 29, 57, 49, 97, 219, 99, 253, 28, 57, 49, 97, 219, 99, 253, 27, 57, - 49, 97, 219, 99, 253, 26, 57, 49, 97, 219, 99, 253, 25, 57, 49, 97, 219, - 99, 253, 24, 57, 49, 97, 219, 99, 253, 23, 57, 49, 97, 219, 99, 253, 22, - 57, 49, 97, 219, 99, 253, 21, 57, 49, 97, 219, 99, 253, 20, 57, 49, 97, - 219, 99, 253, 19, 57, 49, 97, 219, 99, 253, 18, 57, 49, 97, 219, 99, 253, - 17, 57, 49, 97, 219, 99, 253, 15, 57, 49, 97, 219, 99, 253, 14, 57, 49, - 97, 219, 99, 253, 12, 57, 49, 97, 219, 99, 253, 11, 57, 49, 97, 219, 99, - 253, 10, 57, 49, 97, 219, 99, 253, 9, 57, 49, 97, 219, 99, 252, 249, 57, - 49, 97, 219, 99, 252, 239, 254, 227, 218, 174, 225, 55, 235, 43, 254, - 227, 218, 174, 225, 55, 248, 145, 254, 227, 251, 45, 78, 254, 227, 54, - 107, 254, 227, 54, 103, 254, 227, 54, 160, 254, 227, 54, 154, 254, 227, - 54, 174, 254, 227, 54, 182, 254, 227, 54, 191, 254, 227, 54, 185, 254, - 227, 54, 190, 254, 227, 54, 222, 65, 254, 227, 54, 220, 219, 254, 227, - 54, 221, 245, 254, 227, 54, 245, 119, 254, 227, 54, 245, 196, 254, 227, - 54, 224, 69, 254, 227, 54, 225, 38, 254, 227, 54, 246, 227, 254, 227, 54, - 232, 27, 254, 227, 54, 131, 242, 161, 254, 227, 54, 124, 242, 161, 254, - 227, 54, 148, 242, 161, 254, 227, 54, 245, 116, 242, 161, 254, 227, 54, - 245, 170, 242, 161, 254, 227, 54, 224, 82, 242, 161, 254, 227, 54, 225, - 43, 242, 161, 254, 227, 54, 246, 235, 242, 161, 254, 227, 54, 232, 31, - 242, 161, 254, 227, 54, 131, 221, 231, 254, 227, 54, 124, 221, 231, 254, - 227, 54, 148, 221, 231, 254, 227, 54, 245, 116, 221, 231, 254, 227, 54, - 245, 170, 221, 231, 254, 227, 54, 224, 82, 221, 231, 254, 227, 54, 225, - 43, 221, 231, 254, 227, 54, 246, 235, 221, 231, 254, 227, 54, 232, 31, - 221, 231, 254, 227, 54, 222, 66, 221, 231, 254, 227, 54, 220, 220, 221, - 231, 254, 227, 54, 221, 246, 221, 231, 254, 227, 54, 245, 120, 221, 231, - 254, 227, 54, 245, 197, 221, 231, 254, 227, 54, 224, 70, 221, 231, 254, - 227, 54, 225, 39, 221, 231, 254, 227, 54, 246, 228, 221, 231, 254, 227, - 54, 232, 28, 221, 231, 254, 227, 218, 222, 252, 190, 220, 72, 254, 227, - 218, 222, 245, 178, 223, 88, 254, 227, 218, 222, 226, 90, 223, 88, 254, - 227, 218, 222, 221, 252, 223, 88, 254, 227, 218, 222, 245, 110, 223, 88, - 254, 227, 247, 114, 234, 24, 245, 178, 223, 88, 254, 227, 235, 31, 234, - 24, 245, 178, 223, 88, 254, 227, 234, 24, 226, 90, 223, 88, 254, 227, - 234, 24, 221, 252, 223, 88, 23, 254, 251, 253, 234, 131, 228, 89, 23, - 254, 251, 253, 234, 131, 243, 194, 23, 254, 251, 253, 234, 131, 247, 126, - 23, 254, 251, 253, 234, 174, 23, 254, 251, 253, 234, 245, 196, 23, 254, - 251, 253, 234, 245, 170, 242, 161, 23, 254, 251, 253, 234, 245, 170, 221, - 231, 23, 254, 251, 253, 234, 245, 197, 221, 231, 23, 254, 251, 253, 234, - 245, 170, 222, 126, 23, 254, 251, 253, 234, 222, 66, 222, 126, 23, 254, - 251, 253, 234, 245, 197, 222, 126, 23, 254, 251, 253, 234, 131, 242, 162, - 222, 126, 23, 254, 251, 253, 234, 245, 170, 242, 162, 222, 126, 23, 254, - 251, 253, 234, 131, 221, 232, 222, 126, 23, 254, 251, 253, 234, 245, 170, - 221, 232, 222, 126, 23, 254, 251, 253, 234, 245, 170, 223, 153, 23, 254, - 251, 253, 234, 222, 66, 223, 153, 23, 254, 251, 253, 234, 245, 197, 223, - 153, 23, 254, 251, 253, 234, 131, 242, 162, 223, 153, 23, 254, 251, 253, - 234, 245, 170, 242, 162, 223, 153, 23, 254, 251, 253, 234, 131, 221, 232, - 223, 153, 23, 254, 251, 253, 234, 222, 66, 221, 232, 223, 153, 23, 254, - 251, 253, 234, 245, 197, 221, 232, 223, 153, 23, 254, 251, 253, 234, 222, - 66, 233, 139, 23, 254, 251, 243, 134, 131, 229, 49, 23, 254, 251, 222, 8, - 107, 23, 254, 251, 243, 132, 107, 23, 254, 251, 246, 159, 103, 23, 254, - 251, 222, 8, 103, 23, 254, 251, 250, 51, 124, 247, 125, 23, 254, 251, - 246, 159, 124, 247, 125, 23, 254, 251, 221, 71, 174, 23, 254, 251, 221, - 71, 222, 65, 23, 254, 251, 221, 71, 222, 66, 254, 144, 17, 23, 254, 251, - 243, 132, 222, 65, 23, 254, 251, 233, 240, 222, 65, 23, 254, 251, 222, 8, - 222, 65, 23, 254, 251, 222, 8, 221, 245, 23, 254, 251, 221, 71, 245, 196, - 23, 254, 251, 221, 71, 245, 197, 254, 144, 17, 23, 254, 251, 243, 132, - 245, 196, 23, 254, 251, 222, 8, 245, 196, 23, 254, 251, 222, 8, 131, 242, - 161, 23, 254, 251, 222, 8, 148, 242, 161, 23, 254, 251, 246, 159, 245, - 170, 242, 161, 23, 254, 251, 221, 71, 245, 170, 242, 161, 23, 254, 251, - 222, 8, 245, 170, 242, 161, 23, 254, 251, 251, 126, 245, 170, 242, 161, - 23, 254, 251, 232, 200, 245, 170, 242, 161, 23, 254, 251, 222, 8, 131, - 221, 231, 23, 254, 251, 222, 8, 245, 170, 221, 231, 23, 254, 251, 249, - 65, 245, 170, 233, 139, 23, 254, 251, 223, 127, 245, 197, 233, 139, 23, - 131, 144, 55, 23, 131, 144, 5, 254, 144, 17, 23, 124, 221, 250, 55, 23, - 148, 228, 88, 55, 23, 218, 23, 55, 23, 222, 127, 55, 23, 247, 127, 55, - 23, 230, 175, 55, 23, 124, 230, 174, 55, 23, 148, 230, 174, 55, 23, 245, - 116, 230, 174, 55, 23, 245, 170, 230, 174, 55, 23, 233, 235, 55, 23, 235, - 210, 252, 190, 55, 23, 235, 26, 55, 23, 230, 84, 55, 23, 218, 132, 55, - 23, 254, 16, 55, 23, 254, 27, 55, 23, 244, 42, 55, 23, 221, 58, 252, 190, - 55, 23, 217, 85, 55, 227, 68, 225, 35, 55, 227, 68, 220, 83, 55, 227, 68, - 225, 59, 55, 227, 68, 225, 33, 55, 227, 68, 248, 226, 225, 33, 55, 227, - 68, 224, 120, 55, 227, 68, 249, 61, 55, 227, 68, 228, 76, 55, 227, 68, - 225, 47, 55, 227, 68, 247, 93, 55, 227, 68, 254, 14, 55, 227, 68, 251, - 81, 55, 229, 137, 248, 205, 5, 229, 192, 229, 137, 248, 205, 5, 229, 44, - 243, 159, 229, 137, 248, 205, 5, 222, 109, 243, 159, 229, 137, 248, 205, - 5, 251, 139, 229, 137, 248, 205, 5, 251, 24, 229, 137, 248, 205, 5, 218, - 183, 229, 137, 248, 205, 5, 243, 140, 229, 137, 248, 205, 5, 244, 210, - 229, 137, 248, 205, 5, 221, 204, 229, 137, 248, 205, 5, 65, 229, 137, - 248, 205, 5, 252, 24, 229, 137, 248, 205, 5, 224, 218, 229, 137, 248, - 205, 5, 250, 187, 229, 137, 248, 205, 5, 234, 85, 229, 137, 248, 205, 5, - 234, 48, 229, 137, 248, 205, 5, 226, 122, 229, 137, 248, 205, 5, 235, 64, - 229, 137, 248, 205, 5, 252, 33, 229, 137, 248, 205, 5, 251, 129, 229, 51, - 229, 137, 248, 205, 5, 248, 156, 229, 137, 248, 205, 5, 250, 172, 229, - 137, 248, 205, 5, 224, 50, 229, 137, 248, 205, 5, 250, 173, 229, 137, - 248, 205, 5, 252, 134, 229, 137, 248, 205, 5, 224, 206, 229, 137, 248, - 205, 5, 242, 189, 229, 137, 248, 205, 5, 243, 111, 229, 137, 248, 205, 5, - 251, 240, 235, 106, 229, 137, 248, 205, 5, 251, 124, 229, 137, 248, 205, - 5, 227, 239, 229, 137, 248, 205, 5, 247, 13, 229, 137, 248, 205, 5, 247, - 133, 229, 137, 248, 205, 5, 220, 247, 229, 137, 248, 205, 5, 252, 137, - 229, 137, 248, 205, 5, 229, 52, 221, 98, 229, 137, 248, 205, 5, 219, 84, - 229, 137, 248, 205, 5, 229, 244, 229, 137, 248, 205, 5, 227, 62, 229, - 137, 248, 205, 5, 235, 52, 229, 137, 248, 205, 5, 230, 69, 252, 233, 229, - 137, 248, 205, 5, 245, 143, 229, 137, 248, 205, 5, 244, 38, 229, 137, - 248, 205, 5, 223, 128, 229, 137, 248, 205, 5, 3, 253, 213, 229, 137, 248, - 205, 5, 218, 235, 252, 206, 229, 137, 248, 205, 5, 36, 230, 177, 92, 234, - 197, 1, 60, 234, 197, 1, 73, 234, 197, 1, 253, 204, 234, 197, 1, 252, 95, - 234, 197, 1, 245, 67, 234, 197, 1, 250, 46, 234, 197, 1, 72, 234, 197, 1, - 219, 40, 234, 197, 1, 217, 157, 234, 197, 1, 222, 37, 234, 197, 1, 237, - 126, 234, 197, 1, 237, 17, 234, 197, 1, 228, 163, 234, 197, 1, 153, 234, - 197, 1, 189, 234, 197, 1, 207, 234, 197, 1, 233, 140, 234, 197, 1, 231, - 218, 234, 197, 1, 68, 234, 197, 1, 230, 59, 234, 197, 1, 236, 75, 234, - 197, 1, 152, 234, 197, 1, 198, 234, 197, 1, 222, 201, 234, 197, 1, 221, - 32, 234, 197, 1, 254, 131, 234, 197, 1, 246, 197, 234, 197, 1, 243, 225, - 234, 197, 1, 218, 151, 251, 133, 1, 60, 251, 133, 1, 230, 45, 251, 133, - 1, 250, 46, 251, 133, 1, 153, 251, 133, 1, 220, 21, 251, 133, 1, 152, - 251, 133, 1, 235, 126, 251, 133, 1, 255, 60, 251, 133, 1, 228, 163, 251, - 133, 1, 253, 204, 251, 133, 1, 189, 251, 133, 1, 74, 251, 133, 1, 249, - 209, 251, 133, 1, 222, 201, 251, 133, 1, 225, 27, 251, 133, 1, 225, 26, - 251, 133, 1, 198, 251, 133, 1, 251, 201, 251, 133, 1, 68, 251, 133, 1, - 231, 218, 251, 133, 1, 218, 151, 251, 133, 1, 207, 251, 133, 1, 221, 31, - 251, 133, 1, 230, 59, 251, 133, 1, 223, 219, 251, 133, 1, 72, 251, 133, - 1, 73, 251, 133, 1, 220, 18, 251, 133, 1, 237, 17, 251, 133, 1, 237, 8, - 251, 133, 1, 232, 170, 251, 133, 1, 220, 23, 251, 133, 1, 245, 67, 251, - 133, 1, 245, 2, 251, 133, 1, 223, 168, 251, 133, 1, 223, 167, 251, 133, - 1, 232, 117, 251, 133, 1, 237, 255, 251, 133, 1, 251, 200, 251, 133, 1, - 221, 32, 251, 133, 1, 220, 20, 251, 133, 1, 227, 53, 251, 133, 1, 234, - 41, 251, 133, 1, 234, 40, 251, 133, 1, 234, 39, 251, 133, 1, 234, 38, - 251, 133, 1, 235, 125, 251, 133, 1, 247, 17, 251, 133, 1, 220, 19, 48, - 30, 1, 60, 48, 30, 1, 252, 144, 48, 30, 1, 236, 184, 48, 30, 1, 249, 92, - 48, 30, 1, 73, 48, 30, 1, 219, 165, 48, 30, 1, 217, 92, 48, 30, 1, 243, - 162, 48, 30, 1, 222, 22, 48, 30, 1, 72, 48, 30, 1, 175, 48, 30, 1, 246, - 217, 48, 30, 1, 246, 205, 48, 30, 1, 246, 197, 48, 30, 1, 246, 133, 48, - 30, 1, 74, 48, 30, 1, 229, 198, 48, 30, 1, 224, 246, 48, 30, 1, 236, 7, - 48, 30, 1, 246, 148, 48, 30, 1, 246, 138, 48, 30, 1, 222, 87, 48, 30, 1, - 68, 48, 30, 1, 246, 220, 48, 30, 1, 229, 132, 48, 30, 1, 236, 137, 48, - 30, 1, 246, 244, 48, 30, 1, 246, 140, 48, 30, 1, 251, 46, 48, 30, 1, 237, - 255, 48, 30, 1, 220, 23, 48, 30, 231, 107, 107, 48, 30, 231, 107, 174, - 48, 30, 231, 107, 222, 65, 48, 30, 231, 107, 245, 196, 244, 50, 1, 254, - 199, 244, 50, 1, 252, 219, 244, 50, 1, 244, 100, 244, 50, 1, 249, 191, - 244, 50, 1, 254, 195, 244, 50, 1, 228, 146, 244, 50, 1, 237, 136, 244, - 50, 1, 243, 204, 244, 50, 1, 221, 241, 244, 50, 1, 246, 226, 244, 50, 1, - 235, 241, 244, 50, 1, 235, 170, 244, 50, 1, 234, 82, 244, 50, 1, 232, - 202, 244, 50, 1, 237, 108, 244, 50, 1, 220, 37, 244, 50, 1, 230, 31, 244, - 50, 1, 232, 27, 244, 50, 1, 227, 245, 244, 50, 1, 226, 123, 244, 50, 1, - 222, 74, 244, 50, 1, 218, 191, 244, 50, 1, 245, 249, 244, 50, 1, 238, 3, - 244, 50, 1, 242, 152, 244, 50, 1, 230, 91, 244, 50, 1, 232, 31, 242, 161, - 220, 106, 1, 254, 150, 220, 106, 1, 252, 102, 220, 106, 1, 244, 232, 220, - 106, 1, 236, 149, 220, 106, 1, 249, 62, 220, 106, 1, 243, 4, 220, 106, 1, - 218, 187, 220, 106, 1, 217, 83, 220, 106, 1, 242, 185, 220, 106, 1, 222, - 50, 220, 106, 1, 217, 220, 220, 106, 1, 236, 246, 220, 106, 1, 224, 209, - 220, 106, 1, 235, 156, 220, 106, 1, 234, 1, 220, 106, 1, 249, 33, 220, - 106, 1, 231, 103, 220, 106, 1, 217, 13, 220, 106, 1, 226, 144, 220, 106, - 1, 254, 191, 220, 106, 1, 228, 202, 220, 106, 1, 226, 169, 220, 106, 1, - 228, 103, 220, 106, 1, 227, 231, 220, 106, 1, 222, 26, 220, 106, 1, 244, - 122, 220, 106, 1, 101, 220, 106, 1, 72, 220, 106, 1, 68, 220, 106, 1, - 223, 178, 220, 106, 218, 174, 248, 191, 48, 229, 159, 5, 60, 48, 229, - 159, 5, 72, 48, 229, 159, 5, 68, 48, 229, 159, 5, 175, 48, 229, 159, 5, - 236, 7, 48, 229, 159, 5, 245, 0, 48, 229, 159, 5, 244, 17, 48, 229, 159, - 5, 218, 138, 48, 229, 159, 5, 251, 169, 48, 229, 159, 5, 237, 123, 48, - 229, 159, 5, 237, 98, 48, 229, 159, 5, 222, 155, 48, 229, 159, 5, 221, 0, - 48, 229, 159, 5, 249, 207, 48, 229, 159, 5, 249, 15, 48, 229, 159, 5, - 247, 111, 48, 229, 159, 5, 222, 35, 48, 229, 159, 5, 187, 48, 229, 159, - 5, 252, 237, 48, 229, 159, 5, 246, 8, 48, 229, 159, 5, 208, 48, 229, 159, - 5, 231, 144, 48, 229, 159, 5, 196, 48, 229, 159, 5, 233, 196, 48, 229, - 159, 5, 233, 99, 48, 229, 159, 5, 184, 48, 229, 159, 5, 219, 189, 48, - 229, 159, 5, 219, 94, 48, 229, 159, 5, 203, 48, 229, 159, 5, 227, 22, 48, - 229, 159, 5, 235, 188, 48, 229, 159, 5, 226, 177, 48, 229, 159, 5, 217, - 114, 48, 229, 159, 5, 225, 25, 48, 229, 159, 5, 223, 218, 48, 229, 159, - 5, 155, 48, 229, 159, 5, 253, 227, 48, 229, 159, 5, 253, 226, 48, 229, - 159, 5, 253, 225, 48, 229, 159, 5, 218, 115, 48, 229, 159, 5, 249, 188, - 48, 229, 159, 5, 249, 187, 48, 229, 159, 5, 252, 224, 48, 229, 159, 5, - 251, 220, 48, 229, 159, 218, 174, 248, 191, 48, 229, 159, 54, 107, 48, - 229, 159, 54, 103, 48, 229, 159, 54, 222, 65, 48, 229, 159, 54, 220, 219, - 48, 229, 159, 54, 242, 161, 161, 6, 1, 171, 72, 161, 6, 1, 171, 73, 161, - 6, 1, 171, 60, 161, 6, 1, 171, 254, 202, 161, 6, 1, 171, 74, 161, 6, 1, - 171, 230, 127, 161, 6, 1, 224, 192, 72, 161, 6, 1, 224, 192, 73, 161, 6, - 1, 224, 192, 60, 161, 6, 1, 224, 192, 254, 202, 161, 6, 1, 224, 192, 74, - 161, 6, 1, 224, 192, 230, 127, 161, 6, 1, 253, 212, 161, 6, 1, 230, 70, - 161, 6, 1, 218, 165, 161, 6, 1, 218, 22, 161, 6, 1, 243, 225, 161, 6, 1, - 229, 191, 161, 6, 1, 252, 137, 161, 6, 1, 222, 80, 161, 6, 1, 249, 82, - 161, 6, 1, 251, 43, 161, 6, 1, 237, 113, 161, 6, 1, 236, 191, 161, 6, 1, - 244, 208, 161, 6, 1, 246, 244, 161, 6, 1, 219, 160, 161, 6, 1, 246, 118, - 161, 6, 1, 222, 21, 161, 6, 1, 246, 138, 161, 6, 1, 217, 90, 161, 6, 1, - 246, 133, 161, 6, 1, 217, 71, 161, 6, 1, 246, 148, 161, 6, 1, 246, 217, - 161, 6, 1, 246, 205, 161, 6, 1, 246, 197, 161, 6, 1, 246, 185, 161, 6, 1, - 230, 158, 161, 6, 1, 246, 101, 161, 3, 1, 171, 72, 161, 3, 1, 171, 73, - 161, 3, 1, 171, 60, 161, 3, 1, 171, 254, 202, 161, 3, 1, 171, 74, 161, 3, - 1, 171, 230, 127, 161, 3, 1, 224, 192, 72, 161, 3, 1, 224, 192, 73, 161, - 3, 1, 224, 192, 60, 161, 3, 1, 224, 192, 254, 202, 161, 3, 1, 224, 192, - 74, 161, 3, 1, 224, 192, 230, 127, 161, 3, 1, 253, 212, 161, 3, 1, 230, - 70, 161, 3, 1, 218, 165, 161, 3, 1, 218, 22, 161, 3, 1, 243, 225, 161, 3, - 1, 229, 191, 161, 3, 1, 252, 137, 161, 3, 1, 222, 80, 161, 3, 1, 249, 82, - 161, 3, 1, 251, 43, 161, 3, 1, 237, 113, 161, 3, 1, 236, 191, 161, 3, 1, - 244, 208, 161, 3, 1, 246, 244, 161, 3, 1, 219, 160, 161, 3, 1, 246, 118, - 161, 3, 1, 222, 21, 161, 3, 1, 246, 138, 161, 3, 1, 217, 90, 161, 3, 1, - 246, 133, 161, 3, 1, 217, 71, 161, 3, 1, 246, 148, 161, 3, 1, 246, 217, - 161, 3, 1, 246, 205, 161, 3, 1, 246, 197, 161, 3, 1, 246, 185, 161, 3, 1, - 230, 158, 161, 3, 1, 246, 101, 224, 252, 1, 229, 190, 224, 252, 1, 221, - 113, 224, 252, 1, 236, 112, 224, 252, 1, 245, 226, 224, 252, 1, 221, 255, - 224, 252, 1, 224, 26, 224, 252, 1, 223, 50, 224, 252, 1, 250, 245, 224, - 252, 1, 218, 24, 224, 252, 1, 242, 160, 224, 252, 1, 252, 83, 224, 252, - 1, 249, 91, 224, 252, 1, 244, 242, 224, 252, 1, 219, 60, 224, 252, 1, - 222, 3, 224, 252, 1, 217, 19, 224, 252, 1, 234, 23, 224, 252, 1, 237, 41, - 224, 252, 1, 218, 185, 224, 252, 1, 243, 213, 224, 252, 1, 235, 3, 224, - 252, 1, 233, 160, 224, 252, 1, 238, 6, 224, 252, 1, 246, 243, 224, 252, - 1, 254, 7, 224, 252, 1, 254, 237, 224, 252, 1, 230, 138, 224, 252, 1, - 218, 177, 224, 252, 1, 230, 83, 224, 252, 1, 254, 202, 224, 252, 1, 227, - 72, 224, 252, 1, 231, 103, 224, 252, 1, 247, 2, 224, 252, 1, 254, 207, - 224, 252, 1, 242, 65, 224, 252, 1, 220, 63, 224, 252, 1, 230, 183, 224, - 252, 1, 230, 121, 224, 252, 1, 230, 157, 224, 252, 1, 253, 215, 224, 252, - 1, 254, 45, 224, 252, 1, 230, 105, 224, 252, 1, 254, 188, 224, 252, 1, - 246, 142, 224, 252, 1, 254, 24, 224, 252, 1, 247, 11, 224, 252, 1, 242, - 71, 224, 252, 1, 217, 255, 230, 93, 1, 254, 168, 230, 93, 1, 252, 237, - 230, 93, 1, 222, 155, 230, 93, 1, 237, 123, 230, 93, 1, 218, 138, 230, - 93, 1, 236, 149, 230, 93, 1, 249, 81, 230, 93, 1, 203, 230, 93, 1, 226, - 177, 230, 93, 1, 224, 215, 230, 93, 1, 249, 36, 230, 93, 1, 251, 116, - 230, 93, 1, 245, 0, 230, 93, 1, 246, 8, 230, 93, 1, 228, 153, 230, 93, 1, - 237, 4, 230, 93, 1, 235, 184, 230, 93, 1, 233, 170, 230, 93, 1, 231, 89, - 230, 93, 1, 218, 233, 230, 93, 1, 155, 230, 93, 1, 184, 230, 93, 1, 60, - 230, 93, 1, 73, 230, 93, 1, 72, 230, 93, 1, 74, 230, 93, 1, 68, 230, 93, - 1, 255, 58, 230, 93, 1, 246, 250, 230, 93, 1, 230, 127, 230, 93, 20, 217, - 84, 230, 93, 20, 107, 230, 93, 20, 103, 230, 93, 20, 160, 230, 93, 20, - 154, 230, 93, 20, 174, 230, 93, 20, 182, 230, 93, 20, 191, 230, 93, 20, - 185, 230, 93, 20, 190, 250, 53, 4, 60, 250, 53, 4, 73, 250, 53, 4, 72, - 250, 53, 4, 74, 250, 53, 4, 68, 250, 53, 4, 237, 123, 250, 53, 4, 237, - 59, 250, 53, 4, 175, 250, 53, 4, 236, 184, 250, 53, 4, 236, 113, 250, 53, - 4, 236, 57, 250, 53, 4, 236, 7, 250, 53, 4, 235, 188, 250, 53, 4, 235, - 122, 250, 53, 4, 235, 67, 250, 53, 4, 235, 12, 250, 53, 4, 234, 231, 250, - 53, 4, 196, 250, 53, 4, 234, 25, 250, 53, 4, 233, 196, 250, 53, 4, 233, - 136, 250, 53, 4, 233, 99, 250, 53, 4, 208, 250, 53, 4, 232, 141, 250, 53, - 4, 232, 62, 250, 53, 4, 231, 204, 250, 53, 4, 231, 144, 250, 53, 4, 187, - 250, 53, 4, 229, 198, 250, 53, 4, 229, 108, 250, 53, 4, 229, 37, 250, 53, - 4, 228, 202, 250, 53, 4, 203, 250, 53, 4, 227, 216, 250, 53, 4, 227, 147, - 250, 53, 4, 227, 75, 250, 53, 4, 227, 22, 250, 53, 4, 226, 177, 250, 53, - 4, 226, 94, 250, 53, 4, 224, 140, 250, 53, 4, 224, 26, 250, 53, 4, 223, - 103, 250, 53, 4, 222, 155, 250, 53, 4, 222, 87, 250, 53, 4, 221, 205, - 250, 53, 4, 101, 250, 53, 4, 221, 0, 250, 53, 4, 219, 7, 250, 53, 4, 218, - 227, 250, 53, 4, 218, 204, 250, 53, 4, 218, 187, 250, 53, 4, 218, 138, - 250, 53, 4, 218, 135, 250, 53, 4, 217, 114, 250, 53, 4, 217, 21, 237, - 225, 254, 53, 1, 254, 166, 237, 225, 254, 53, 1, 252, 101, 237, 225, 254, - 53, 1, 244, 91, 237, 225, 254, 53, 1, 249, 176, 237, 225, 254, 53, 1, - 243, 162, 237, 225, 254, 53, 1, 218, 233, 237, 225, 254, 53, 1, 217, 95, - 237, 225, 254, 53, 1, 243, 126, 237, 225, 254, 53, 1, 222, 46, 237, 225, - 254, 53, 1, 217, 219, 237, 225, 254, 53, 1, 236, 224, 237, 225, 254, 53, - 1, 235, 151, 237, 225, 254, 53, 1, 234, 1, 237, 225, 254, 53, 1, 231, - 103, 237, 225, 254, 53, 1, 226, 145, 237, 225, 254, 53, 1, 253, 207, 237, - 225, 254, 53, 1, 229, 198, 237, 225, 254, 53, 1, 226, 168, 237, 225, 254, - 53, 1, 228, 102, 237, 225, 254, 53, 1, 227, 174, 237, 225, 254, 53, 1, - 224, 209, 237, 225, 254, 53, 1, 222, 100, 237, 225, 254, 53, 226, 87, 55, - 237, 225, 254, 53, 54, 107, 237, 225, 254, 53, 54, 103, 237, 225, 254, - 53, 54, 160, 237, 225, 254, 53, 54, 222, 65, 237, 225, 254, 53, 54, 220, - 219, 237, 225, 254, 53, 54, 131, 242, 161, 237, 225, 254, 53, 54, 131, - 221, 231, 237, 225, 254, 53, 54, 222, 66, 221, 231, 229, 116, 1, 254, - 164, 229, 116, 1, 252, 104, 229, 116, 1, 244, 233, 229, 116, 1, 249, 64, - 229, 116, 1, 243, 162, 229, 116, 1, 218, 238, 229, 116, 1, 217, 108, 229, - 116, 1, 243, 128, 229, 116, 1, 222, 50, 229, 116, 1, 217, 220, 229, 116, - 1, 236, 246, 229, 116, 1, 235, 157, 229, 116, 1, 234, 1, 229, 116, 1, - 231, 103, 229, 116, 1, 225, 61, 229, 116, 1, 254, 191, 229, 116, 1, 229, - 198, 229, 116, 1, 226, 169, 229, 116, 1, 228, 107, 229, 116, 1, 227, 61, - 229, 116, 1, 224, 209, 229, 116, 1, 222, 105, 229, 116, 54, 107, 229, - 116, 54, 222, 65, 229, 116, 54, 220, 219, 229, 116, 54, 131, 242, 161, - 229, 116, 54, 103, 229, 116, 54, 160, 229, 116, 218, 174, 225, 54, 234, - 196, 1, 60, 234, 196, 1, 253, 204, 234, 196, 1, 245, 67, 234, 196, 1, - 250, 46, 234, 196, 1, 73, 234, 196, 1, 216, 216, 234, 196, 1, 72, 234, - 196, 1, 218, 90, 234, 196, 1, 237, 17, 234, 196, 1, 153, 234, 196, 1, - 189, 234, 196, 1, 207, 234, 196, 1, 74, 234, 196, 1, 152, 234, 196, 1, - 223, 219, 234, 196, 1, 222, 201, 234, 196, 1, 68, 234, 196, 1, 246, 74, - 234, 196, 1, 228, 163, 234, 196, 1, 198, 234, 196, 1, 221, 32, 234, 196, - 1, 254, 131, 234, 196, 1, 246, 197, 234, 196, 1, 234, 198, 234, 196, 1, - 231, 218, 234, 196, 1, 251, 202, 234, 196, 221, 87, 78, 201, 1, 60, 201, - 29, 5, 72, 201, 29, 5, 68, 201, 29, 5, 167, 152, 201, 29, 5, 73, 201, 29, - 5, 74, 201, 29, 235, 94, 78, 201, 5, 51, 227, 94, 56, 201, 5, 254, 95, - 201, 5, 219, 77, 201, 1, 175, 201, 1, 236, 149, 201, 1, 245, 0, 201, 1, - 244, 125, 201, 1, 251, 169, 201, 1, 251, 69, 201, 1, 237, 123, 201, 1, - 231, 77, 201, 1, 221, 29, 201, 1, 221, 19, 201, 1, 249, 132, 201, 1, 249, - 116, 201, 1, 231, 217, 201, 1, 222, 155, 201, 1, 222, 35, 201, 1, 249, - 207, 201, 1, 249, 36, 201, 1, 208, 201, 1, 187, 201, 1, 229, 141, 201, 1, - 252, 237, 201, 1, 252, 94, 201, 1, 196, 201, 1, 184, 201, 1, 203, 201, 1, - 235, 188, 201, 1, 219, 189, 201, 1, 225, 25, 201, 1, 223, 218, 201, 1, - 226, 177, 201, 1, 217, 114, 201, 1, 155, 201, 1, 236, 74, 201, 1, 221, 4, - 201, 5, 252, 201, 50, 201, 5, 251, 122, 201, 5, 61, 56, 201, 219, 82, - 201, 20, 107, 201, 20, 103, 201, 20, 160, 201, 20, 154, 201, 54, 222, 65, - 201, 54, 220, 219, 201, 54, 131, 242, 161, 201, 54, 131, 221, 231, 201, - 228, 197, 248, 145, 201, 228, 197, 3, 250, 221, 201, 228, 197, 250, 221, - 201, 228, 197, 250, 105, 135, 201, 228, 197, 234, 83, 201, 228, 197, 234, - 241, 201, 228, 197, 249, 167, 201, 228, 197, 51, 249, 167, 201, 228, 197, - 235, 37, 48, 224, 6, 254, 64, 1, 243, 162, 48, 224, 6, 254, 64, 1, 235, - 151, 48, 224, 6, 254, 64, 1, 243, 126, 48, 224, 6, 254, 64, 1, 234, 1, - 48, 224, 6, 254, 64, 1, 228, 102, 48, 224, 6, 254, 64, 1, 218, 233, 48, - 224, 6, 254, 64, 1, 224, 209, 48, 224, 6, 254, 64, 1, 227, 174, 48, 224, - 6, 254, 64, 1, 252, 101, 48, 224, 6, 254, 64, 1, 222, 100, 48, 224, 6, - 254, 64, 1, 226, 127, 48, 224, 6, 254, 64, 1, 236, 224, 48, 224, 6, 254, - 64, 1, 231, 103, 48, 224, 6, 254, 64, 1, 236, 134, 48, 224, 6, 254, 64, - 1, 226, 168, 48, 224, 6, 254, 64, 1, 226, 145, 48, 224, 6, 254, 64, 1, - 245, 231, 48, 224, 6, 254, 64, 1, 254, 168, 48, 224, 6, 254, 64, 1, 253, - 206, 48, 224, 6, 254, 64, 1, 249, 34, 48, 224, 6, 254, 64, 1, 244, 91, - 48, 224, 6, 254, 64, 1, 249, 176, 48, 224, 6, 254, 64, 1, 244, 118, 48, - 224, 6, 254, 64, 1, 222, 46, 48, 224, 6, 254, 64, 1, 217, 94, 48, 224, 6, - 254, 64, 1, 249, 31, 48, 224, 6, 254, 64, 1, 217, 219, 48, 224, 6, 254, - 64, 1, 222, 24, 48, 224, 6, 254, 64, 1, 222, 5, 48, 224, 6, 254, 64, 54, - 107, 48, 224, 6, 254, 64, 54, 245, 196, 48, 224, 6, 254, 64, 120, 237, - 211, 253, 216, 1, 60, 253, 216, 1, 255, 58, 253, 216, 1, 254, 93, 253, - 216, 1, 255, 17, 253, 216, 1, 254, 131, 253, 216, 1, 255, 18, 253, 216, - 1, 254, 234, 253, 216, 1, 254, 230, 253, 216, 1, 73, 253, 216, 1, 246, - 250, 253, 216, 1, 74, 253, 216, 1, 230, 127, 253, 216, 1, 72, 253, 216, - 1, 237, 255, 253, 216, 1, 68, 253, 216, 1, 220, 23, 253, 216, 1, 236, - 184, 253, 216, 1, 218, 135, 253, 216, 1, 218, 101, 253, 216, 1, 218, 110, - 253, 216, 1, 244, 191, 253, 216, 1, 244, 155, 253, 216, 1, 244, 116, 253, - 216, 1, 251, 99, 253, 216, 1, 237, 114, 253, 216, 1, 222, 87, 253, 216, - 1, 222, 22, 253, 216, 1, 249, 92, 253, 216, 1, 249, 29, 253, 216, 1, 221, - 26, 253, 216, 1, 229, 198, 253, 216, 1, 245, 231, 253, 216, 1, 252, 144, - 253, 216, 1, 252, 92, 253, 216, 1, 232, 106, 253, 216, 1, 232, 68, 253, - 216, 1, 232, 69, 253, 216, 1, 232, 141, 253, 216, 1, 231, 73, 253, 216, - 1, 231, 216, 253, 216, 1, 234, 25, 253, 216, 1, 243, 52, 253, 216, 1, - 217, 164, 253, 216, 1, 218, 25, 253, 216, 1, 219, 165, 253, 216, 1, 227, - 216, 253, 216, 1, 235, 122, 253, 216, 1, 226, 94, 253, 216, 1, 217, 92, - 253, 216, 1, 224, 246, 253, 216, 1, 217, 72, 253, 216, 1, 224, 147, 253, - 216, 1, 223, 190, 253, 216, 1, 243, 162, 253, 216, 255, 7, 78, 221, 172, - 124, 188, 104, 131, 61, 228, 196, 3, 124, 188, 104, 131, 61, 228, 196, - 235, 146, 124, 188, 104, 131, 61, 228, 196, 235, 146, 131, 61, 104, 124, - 188, 228, 196, 235, 146, 124, 227, 92, 104, 131, 227, 94, 228, 196, 235, - 146, 131, 227, 94, 104, 124, 227, 92, 228, 196, 237, 193, 229, 224, 1, - 254, 166, 237, 193, 229, 224, 1, 252, 101, 237, 193, 229, 224, 1, 244, - 91, 237, 193, 229, 224, 1, 249, 176, 237, 193, 229, 224, 1, 243, 162, - 237, 193, 229, 224, 1, 218, 233, 237, 193, 229, 224, 1, 217, 95, 237, - 193, 229, 224, 1, 243, 126, 237, 193, 229, 224, 1, 222, 46, 237, 193, - 229, 224, 1, 217, 219, 237, 193, 229, 224, 1, 236, 224, 237, 193, 229, - 224, 1, 235, 151, 237, 193, 229, 224, 1, 234, 1, 237, 193, 229, 224, 1, - 231, 103, 237, 193, 229, 224, 1, 226, 145, 237, 193, 229, 224, 1, 253, - 207, 237, 193, 229, 224, 1, 229, 198, 237, 193, 229, 224, 1, 226, 168, - 237, 193, 229, 224, 1, 228, 102, 237, 193, 229, 224, 1, 227, 174, 237, - 193, 229, 224, 1, 224, 209, 237, 193, 229, 224, 1, 222, 100, 237, 193, - 229, 224, 54, 107, 237, 193, 229, 224, 54, 103, 237, 193, 229, 224, 54, - 160, 237, 193, 229, 224, 54, 154, 237, 193, 229, 224, 54, 222, 65, 237, - 193, 229, 224, 54, 220, 219, 237, 193, 229, 224, 54, 131, 242, 161, 237, - 193, 229, 224, 54, 131, 221, 231, 237, 193, 230, 33, 1, 254, 166, 237, - 193, 230, 33, 1, 252, 101, 237, 193, 230, 33, 1, 244, 91, 237, 193, 230, - 33, 1, 249, 176, 237, 193, 230, 33, 1, 243, 162, 237, 193, 230, 33, 1, - 218, 232, 237, 193, 230, 33, 1, 217, 95, 237, 193, 230, 33, 1, 243, 126, - 237, 193, 230, 33, 1, 222, 46, 237, 193, 230, 33, 1, 217, 219, 237, 193, - 230, 33, 1, 236, 224, 237, 193, 230, 33, 1, 235, 151, 237, 193, 230, 33, - 1, 234, 0, 237, 193, 230, 33, 1, 231, 103, 237, 193, 230, 33, 1, 226, - 145, 237, 193, 230, 33, 1, 229, 198, 237, 193, 230, 33, 1, 226, 168, 237, - 193, 230, 33, 1, 224, 209, 237, 193, 230, 33, 1, 222, 100, 237, 193, 230, - 33, 54, 107, 237, 193, 230, 33, 54, 103, 237, 193, 230, 33, 54, 160, 237, - 193, 230, 33, 54, 154, 237, 193, 230, 33, 54, 222, 65, 237, 193, 230, 33, - 54, 220, 219, 237, 193, 230, 33, 54, 131, 242, 161, 237, 193, 230, 33, - 54, 131, 221, 231, 48, 172, 1, 230, 100, 60, 48, 172, 1, 218, 17, 60, 48, - 172, 1, 218, 17, 254, 234, 48, 172, 1, 230, 100, 72, 48, 172, 1, 218, 17, - 72, 48, 172, 1, 218, 17, 73, 48, 172, 1, 230, 100, 74, 48, 172, 1, 230, - 100, 230, 167, 48, 172, 1, 218, 17, 230, 167, 48, 172, 1, 230, 100, 255, - 11, 48, 172, 1, 218, 17, 255, 11, 48, 172, 1, 230, 100, 254, 233, 48, - 172, 1, 218, 17, 254, 233, 48, 172, 1, 230, 100, 254, 209, 48, 172, 1, - 218, 17, 254, 209, 48, 172, 1, 230, 100, 254, 228, 48, 172, 1, 218, 17, - 254, 228, 48, 172, 1, 230, 100, 254, 244, 48, 172, 1, 218, 17, 254, 244, - 48, 172, 1, 230, 100, 254, 232, 48, 172, 1, 230, 100, 246, 80, 48, 172, - 1, 218, 17, 246, 80, 48, 172, 1, 230, 100, 253, 212, 48, 172, 1, 218, 17, - 253, 212, 48, 172, 1, 230, 100, 254, 216, 48, 172, 1, 218, 17, 254, 216, - 48, 172, 1, 230, 100, 254, 226, 48, 172, 1, 218, 17, 254, 226, 48, 172, - 1, 230, 100, 230, 166, 48, 172, 1, 218, 17, 230, 166, 48, 172, 1, 230, - 100, 254, 175, 48, 172, 1, 218, 17, 254, 175, 48, 172, 1, 230, 100, 254, - 225, 48, 172, 1, 230, 100, 246, 207, 48, 172, 1, 230, 100, 246, 205, 48, - 172, 1, 230, 100, 254, 131, 48, 172, 1, 230, 100, 254, 223, 48, 172, 1, - 218, 17, 254, 223, 48, 172, 1, 230, 100, 246, 180, 48, 172, 1, 218, 17, - 246, 180, 48, 172, 1, 230, 100, 246, 194, 48, 172, 1, 218, 17, 246, 194, - 48, 172, 1, 230, 100, 246, 169, 48, 172, 1, 218, 17, 246, 169, 48, 172, - 1, 218, 17, 254, 123, 48, 172, 1, 230, 100, 246, 185, 48, 172, 1, 218, - 17, 254, 222, 48, 172, 1, 230, 100, 246, 162, 48, 172, 1, 230, 100, 230, - 120, 48, 172, 1, 230, 100, 242, 67, 48, 172, 1, 230, 100, 247, 0, 48, - 172, 1, 218, 17, 247, 0, 48, 172, 1, 230, 100, 254, 69, 48, 172, 1, 218, - 17, 254, 69, 48, 172, 1, 230, 100, 237, 158, 48, 172, 1, 218, 17, 237, - 158, 48, 172, 1, 230, 100, 230, 106, 48, 172, 1, 218, 17, 230, 106, 48, - 172, 1, 230, 100, 254, 67, 48, 172, 1, 218, 17, 254, 67, 48, 172, 1, 230, - 100, 254, 221, 48, 172, 1, 230, 100, 254, 13, 48, 172, 1, 230, 100, 254, - 220, 48, 172, 1, 230, 100, 254, 7, 48, 172, 1, 218, 17, 254, 7, 48, 172, - 1, 230, 100, 246, 133, 48, 172, 1, 218, 17, 246, 133, 48, 172, 1, 230, - 100, 253, 244, 48, 172, 1, 218, 17, 253, 244, 48, 172, 1, 230, 100, 254, - 217, 48, 172, 1, 218, 17, 254, 217, 48, 172, 1, 230, 100, 230, 92, 48, - 172, 1, 230, 100, 252, 187, 227, 11, 20, 107, 227, 11, 20, 103, 227, 11, - 20, 160, 227, 11, 20, 154, 227, 11, 20, 174, 227, 11, 20, 182, 227, 11, - 20, 191, 227, 11, 20, 185, 227, 11, 20, 190, 227, 11, 54, 222, 65, 227, - 11, 54, 220, 219, 227, 11, 54, 221, 245, 227, 11, 54, 245, 119, 227, 11, - 54, 245, 196, 227, 11, 54, 224, 69, 227, 11, 54, 225, 38, 227, 11, 54, - 246, 227, 227, 11, 54, 232, 27, 227, 11, 54, 131, 242, 161, 227, 11, 54, - 124, 242, 161, 227, 11, 54, 148, 242, 161, 227, 11, 54, 245, 116, 242, - 161, 227, 11, 54, 245, 170, 242, 161, 227, 11, 54, 224, 82, 242, 161, - 227, 11, 54, 225, 43, 242, 161, 227, 11, 54, 246, 235, 242, 161, 227, 11, - 54, 232, 31, 242, 161, 227, 11, 245, 108, 131, 243, 194, 227, 11, 245, - 108, 131, 228, 89, 227, 11, 245, 108, 131, 221, 251, 227, 11, 245, 108, - 124, 221, 249, 194, 5, 251, 146, 194, 5, 254, 95, 194, 5, 219, 77, 194, - 1, 60, 194, 1, 255, 58, 194, 1, 72, 194, 1, 237, 255, 194, 1, 68, 194, 1, - 220, 23, 194, 1, 73, 194, 1, 254, 196, 194, 1, 74, 194, 1, 253, 232, 194, - 1, 175, 194, 1, 236, 149, 194, 1, 245, 0, 194, 1, 244, 125, 194, 1, 232, - 115, 194, 1, 251, 169, 194, 1, 251, 69, 194, 1, 237, 123, 194, 1, 237, - 103, 194, 1, 231, 77, 194, 1, 221, 29, 194, 1, 221, 19, 194, 1, 249, 132, - 194, 1, 249, 121, 194, 1, 249, 116, 194, 1, 227, 151, 194, 1, 231, 217, - 194, 1, 222, 155, 194, 1, 222, 35, 194, 1, 249, 207, 194, 1, 249, 36, - 194, 1, 208, 194, 1, 187, 194, 1, 229, 141, 194, 1, 252, 237, 194, 1, - 252, 94, 194, 1, 196, 194, 1, 184, 194, 1, 203, 194, 1, 235, 188, 194, 1, - 219, 189, 194, 1, 225, 25, 194, 1, 223, 218, 194, 1, 226, 177, 194, 1, - 155, 194, 29, 5, 255, 58, 194, 29, 5, 72, 194, 29, 5, 237, 255, 194, 29, - 5, 68, 194, 29, 5, 220, 23, 194, 29, 5, 73, 194, 29, 5, 254, 196, 194, - 29, 5, 74, 194, 29, 5, 253, 232, 194, 5, 219, 82, 194, 5, 231, 112, 194, - 255, 7, 55, 194, 246, 171, 55, 194, 54, 55, 194, 226, 87, 78, 194, 51, - 226, 87, 78, 194, 249, 167, 194, 51, 249, 167, 15, 5, 60, 15, 5, 112, 27, - 60, 15, 5, 112, 27, 252, 228, 15, 5, 112, 27, 244, 229, 222, 59, 15, 5, - 112, 27, 155, 15, 5, 112, 27, 238, 1, 15, 5, 112, 27, 235, 173, 244, 3, - 15, 5, 112, 27, 233, 62, 15, 5, 112, 27, 226, 165, 15, 5, 255, 60, 15, 5, - 255, 11, 15, 5, 255, 12, 27, 254, 5, 15, 5, 255, 12, 27, 247, 100, 244, - 3, 15, 5, 255, 12, 27, 244, 240, 15, 5, 255, 12, 27, 244, 229, 222, 59, - 15, 5, 255, 12, 27, 155, 15, 5, 255, 12, 27, 238, 2, 244, 3, 15, 5, 255, - 12, 27, 237, 231, 15, 5, 255, 12, 27, 235, 174, 15, 5, 255, 12, 27, 224, - 231, 15, 5, 255, 12, 27, 105, 88, 105, 88, 68, 15, 5, 255, 12, 244, 3, - 15, 5, 255, 9, 15, 5, 255, 10, 27, 252, 216, 15, 5, 255, 10, 27, 244, - 229, 222, 59, 15, 5, 255, 10, 27, 234, 26, 88, 246, 197, 15, 5, 255, 10, - 27, 225, 23, 15, 5, 255, 10, 27, 222, 130, 15, 5, 254, 244, 15, 5, 254, - 182, 15, 5, 254, 183, 27, 246, 143, 15, 5, 254, 183, 27, 224, 203, 88, - 244, 81, 15, 5, 254, 175, 15, 5, 254, 176, 27, 254, 175, 15, 5, 254, 176, - 27, 248, 229, 15, 5, 254, 176, 27, 244, 81, 15, 5, 254, 176, 27, 155, 15, - 5, 254, 176, 27, 236, 251, 15, 5, 254, 176, 27, 236, 113, 15, 5, 254, - 176, 27, 224, 246, 15, 5, 254, 176, 27, 220, 30, 15, 5, 254, 172, 15, 5, - 254, 166, 15, 5, 254, 137, 15, 5, 254, 138, 27, 224, 246, 15, 5, 254, - 131, 15, 5, 254, 132, 104, 254, 131, 15, 5, 254, 132, 148, 221, 176, 15, - 5, 254, 132, 88, 232, 228, 230, 110, 254, 132, 88, 232, 227, 15, 5, 254, - 132, 88, 232, 228, 223, 226, 15, 5, 254, 107, 15, 5, 254, 88, 15, 5, 254, - 61, 15, 5, 254, 62, 27, 235, 247, 15, 5, 254, 35, 15, 5, 254, 12, 15, 5, - 254, 7, 15, 5, 254, 8, 217, 38, 222, 59, 15, 5, 254, 8, 236, 254, 222, - 59, 15, 5, 254, 8, 104, 254, 8, 220, 254, 104, 220, 254, 220, 254, 104, - 220, 254, 229, 246, 15, 5, 254, 8, 104, 254, 8, 104, 254, 7, 15, 5, 254, - 8, 104, 254, 8, 104, 254, 8, 250, 95, 254, 8, 104, 254, 8, 104, 254, 7, - 15, 5, 254, 5, 15, 5, 254, 3, 15, 5, 252, 237, 15, 5, 252, 228, 15, 5, - 252, 225, 15, 5, 252, 223, 15, 5, 252, 217, 15, 5, 252, 218, 104, 252, - 217, 15, 5, 252, 216, 15, 5, 135, 15, 5, 252, 200, 15, 5, 252, 84, 15, 5, - 252, 85, 27, 60, 15, 5, 252, 85, 27, 244, 220, 15, 5, 252, 85, 27, 238, - 2, 244, 3, 15, 5, 251, 248, 15, 5, 251, 249, 104, 251, 249, 255, 11, 15, - 5, 251, 249, 104, 251, 249, 220, 87, 15, 5, 251, 249, 250, 95, 251, 248, - 15, 5, 251, 237, 15, 5, 251, 238, 104, 251, 237, 15, 5, 251, 228, 15, 5, - 251, 227, 15, 5, 249, 207, 15, 5, 249, 198, 15, 5, 249, 199, 236, 91, 27, - 112, 88, 234, 57, 15, 5, 249, 199, 236, 91, 27, 254, 137, 15, 5, 249, - 199, 236, 91, 27, 252, 216, 15, 5, 249, 199, 236, 91, 27, 252, 84, 15, 5, - 249, 199, 236, 91, 27, 245, 0, 15, 5, 249, 199, 236, 91, 27, 245, 1, 88, - 234, 57, 15, 5, 249, 199, 236, 91, 27, 244, 103, 15, 5, 249, 199, 236, - 91, 27, 244, 87, 15, 5, 249, 199, 236, 91, 27, 244, 11, 15, 5, 249, 199, - 236, 91, 27, 155, 15, 5, 249, 199, 236, 91, 27, 237, 156, 15, 5, 249, - 199, 236, 91, 27, 237, 157, 88, 234, 231, 15, 5, 249, 199, 236, 91, 27, - 236, 240, 15, 5, 249, 199, 236, 91, 27, 235, 188, 15, 5, 249, 199, 236, - 91, 27, 234, 231, 15, 5, 249, 199, 236, 91, 27, 234, 232, 88, 234, 56, - 15, 5, 249, 199, 236, 91, 27, 234, 219, 15, 5, 249, 199, 236, 91, 27, - 232, 141, 15, 5, 249, 199, 236, 91, 27, 229, 247, 88, 229, 246, 15, 5, - 249, 199, 236, 91, 27, 224, 140, 15, 5, 249, 199, 236, 91, 27, 222, 130, - 15, 5, 249, 199, 236, 91, 27, 220, 125, 88, 244, 87, 15, 5, 249, 199, - 236, 91, 27, 220, 30, 15, 5, 249, 175, 15, 5, 249, 156, 15, 5, 249, 155, - 15, 5, 249, 154, 15, 5, 249, 15, 15, 5, 248, 255, 15, 5, 248, 230, 15, 5, - 248, 231, 27, 224, 246, 15, 5, 248, 229, 15, 5, 248, 219, 15, 5, 248, - 220, 236, 209, 105, 244, 4, 248, 202, 15, 5, 248, 202, 15, 5, 247, 111, - 15, 5, 247, 112, 104, 247, 111, 15, 5, 247, 112, 244, 3, 15, 5, 247, 112, - 224, 228, 15, 5, 247, 109, 15, 5, 247, 110, 27, 246, 130, 15, 5, 247, - 108, 15, 5, 247, 107, 15, 5, 247, 106, 15, 5, 247, 105, 15, 5, 247, 101, - 15, 5, 247, 99, 15, 5, 247, 100, 244, 3, 15, 5, 247, 100, 244, 4, 244, 3, - 15, 5, 247, 98, 15, 5, 247, 91, 15, 5, 73, 15, 5, 178, 27, 229, 246, 15, - 5, 178, 104, 178, 231, 104, 104, 231, 103, 15, 5, 247, 17, 15, 5, 247, - 18, 27, 112, 88, 243, 214, 88, 249, 207, 15, 5, 247, 18, 27, 244, 220, - 15, 5, 247, 18, 27, 233, 196, 15, 5, 247, 18, 27, 226, 156, 15, 5, 247, - 18, 27, 224, 246, 15, 5, 247, 18, 27, 68, 15, 5, 246, 252, 15, 5, 246, - 242, 15, 5, 246, 217, 15, 5, 246, 197, 15, 5, 246, 198, 27, 244, 228, 15, - 5, 246, 198, 27, 244, 229, 222, 59, 15, 5, 246, 198, 27, 234, 25, 15, 5, - 246, 198, 250, 95, 246, 197, 15, 5, 246, 198, 230, 110, 246, 197, 15, 5, - 246, 198, 223, 226, 15, 5, 246, 145, 15, 5, 246, 143, 15, 5, 246, 130, - 15, 5, 246, 78, 15, 5, 246, 79, 27, 60, 15, 5, 246, 79, 27, 112, 88, 235, - 162, 15, 5, 246, 79, 27, 112, 88, 235, 163, 27, 235, 162, 15, 5, 246, 79, - 27, 254, 131, 15, 5, 246, 79, 27, 252, 228, 15, 5, 246, 79, 27, 247, 100, - 244, 3, 15, 5, 246, 79, 27, 247, 100, 244, 4, 244, 3, 15, 5, 246, 79, 27, - 155, 15, 5, 246, 79, 27, 243, 214, 244, 3, 15, 5, 246, 79, 27, 238, 2, - 244, 3, 15, 5, 246, 79, 27, 236, 208, 15, 5, 246, 79, 27, 236, 209, 223, - 226, 15, 5, 246, 79, 27, 236, 5, 15, 5, 246, 79, 27, 235, 188, 15, 5, - 246, 79, 27, 235, 163, 27, 235, 162, 15, 5, 246, 79, 27, 235, 67, 15, 5, - 246, 79, 27, 234, 231, 15, 5, 246, 79, 27, 220, 124, 15, 5, 246, 79, 27, - 220, 115, 15, 5, 245, 0, 15, 5, 245, 1, 244, 3, 15, 5, 244, 254, 15, 5, - 244, 255, 27, 112, 88, 249, 208, 88, 155, 15, 5, 244, 255, 27, 112, 88, - 155, 15, 5, 244, 255, 27, 112, 88, 238, 1, 15, 5, 244, 255, 27, 255, 10, - 222, 60, 88, 222, 147, 15, 5, 244, 255, 27, 254, 131, 15, 5, 244, 255, - 27, 254, 7, 15, 5, 244, 255, 27, 254, 6, 88, 244, 240, 15, 5, 244, 255, - 27, 252, 228, 15, 5, 244, 255, 27, 252, 201, 88, 203, 15, 5, 244, 255, - 27, 251, 228, 15, 5, 244, 255, 27, 251, 229, 88, 203, 15, 5, 244, 255, - 27, 249, 207, 15, 5, 244, 255, 27, 249, 15, 15, 5, 244, 255, 27, 248, - 231, 27, 224, 246, 15, 5, 244, 255, 27, 247, 109, 15, 5, 244, 255, 27, - 246, 217, 15, 5, 244, 255, 27, 246, 218, 88, 235, 188, 15, 5, 244, 255, - 27, 246, 197, 15, 5, 244, 255, 27, 246, 198, 27, 244, 229, 222, 59, 15, - 5, 244, 255, 27, 244, 229, 222, 59, 15, 5, 244, 255, 27, 244, 220, 15, 5, - 244, 255, 27, 244, 103, 15, 5, 244, 255, 27, 244, 101, 15, 5, 244, 255, - 27, 244, 102, 88, 60, 15, 5, 244, 255, 27, 244, 88, 88, 223, 103, 15, 5, - 244, 255, 27, 243, 214, 88, 234, 232, 88, 246, 130, 15, 5, 244, 255, 27, - 243, 197, 15, 5, 244, 255, 27, 243, 198, 88, 235, 188, 15, 5, 244, 255, - 27, 243, 113, 88, 235, 67, 15, 5, 244, 255, 27, 242, 169, 15, 5, 244, - 255, 27, 238, 2, 244, 3, 15, 5, 244, 255, 27, 237, 146, 88, 242, 174, 88, - 254, 7, 15, 5, 244, 255, 27, 236, 240, 15, 5, 244, 255, 27, 236, 208, 15, - 5, 244, 255, 27, 236, 110, 15, 5, 244, 255, 27, 236, 111, 88, 235, 162, - 15, 5, 244, 255, 27, 236, 6, 88, 254, 131, 15, 5, 244, 255, 27, 235, 188, - 15, 5, 244, 255, 27, 234, 26, 88, 246, 197, 15, 5, 244, 255, 27, 233, - 196, 15, 5, 244, 255, 27, 231, 103, 15, 5, 244, 255, 27, 231, 104, 104, - 231, 103, 15, 5, 244, 255, 27, 187, 15, 5, 244, 255, 27, 226, 156, 15, 5, - 244, 255, 27, 226, 131, 15, 5, 244, 255, 27, 224, 246, 15, 5, 244, 255, - 27, 224, 247, 88, 220, 240, 15, 5, 244, 255, 27, 224, 219, 15, 5, 244, - 255, 27, 223, 74, 15, 5, 244, 255, 27, 222, 130, 15, 5, 244, 255, 27, 68, - 15, 5, 244, 255, 27, 220, 115, 15, 5, 244, 255, 27, 220, 116, 88, 247, - 111, 15, 5, 244, 255, 104, 244, 254, 15, 5, 244, 249, 15, 5, 244, 250, - 250, 95, 244, 249, 15, 5, 244, 247, 15, 5, 244, 248, 104, 244, 248, 244, - 221, 104, 244, 220, 15, 5, 244, 240, 15, 5, 244, 241, 244, 248, 104, 244, - 248, 244, 221, 104, 244, 220, 15, 5, 244, 239, 15, 5, 244, 237, 15, 5, - 244, 230, 15, 5, 244, 228, 15, 5, 244, 229, 222, 59, 15, 5, 244, 229, - 104, 244, 228, 15, 5, 244, 229, 250, 95, 244, 228, 15, 5, 244, 220, 15, - 5, 244, 219, 15, 5, 244, 215, 15, 5, 244, 166, 15, 5, 244, 167, 27, 235, - 247, 15, 5, 244, 103, 15, 5, 244, 104, 27, 73, 15, 5, 244, 104, 27, 68, - 15, 5, 244, 104, 250, 95, 244, 103, 15, 5, 244, 101, 15, 5, 244, 102, - 104, 244, 101, 15, 5, 244, 102, 250, 95, 244, 101, 15, 5, 244, 99, 15, 5, - 244, 87, 15, 5, 244, 88, 244, 3, 15, 5, 244, 85, 15, 5, 244, 86, 27, 112, - 88, 238, 1, 15, 5, 244, 86, 27, 244, 229, 222, 59, 15, 5, 244, 86, 27, - 238, 1, 15, 5, 244, 86, 27, 234, 232, 88, 238, 1, 15, 5, 244, 86, 27, - 187, 15, 5, 244, 83, 15, 5, 244, 81, 15, 5, 244, 82, 250, 95, 244, 81, - 15, 5, 244, 82, 27, 252, 228, 15, 5, 244, 82, 27, 222, 130, 15, 5, 244, - 82, 222, 59, 15, 5, 244, 17, 15, 5, 244, 18, 250, 95, 244, 17, 15, 5, - 244, 15, 15, 5, 244, 16, 27, 236, 240, 15, 5, 244, 16, 27, 236, 241, 27, - 238, 2, 244, 3, 15, 5, 244, 16, 27, 231, 103, 15, 5, 244, 16, 27, 226, - 157, 88, 220, 253, 15, 5, 244, 16, 244, 3, 15, 5, 244, 11, 15, 5, 244, - 12, 27, 112, 88, 235, 247, 15, 5, 244, 12, 27, 235, 247, 15, 5, 244, 12, - 104, 244, 12, 234, 225, 15, 5, 244, 7, 15, 5, 244, 5, 15, 5, 244, 6, 27, - 224, 246, 15, 5, 243, 253, 15, 5, 243, 252, 15, 5, 243, 249, 15, 5, 243, - 248, 15, 5, 155, 15, 5, 243, 214, 222, 59, 15, 5, 243, 214, 244, 3, 15, - 5, 243, 197, 15, 5, 243, 112, 15, 5, 243, 113, 27, 254, 7, 15, 5, 243, - 113, 27, 254, 5, 15, 5, 243, 113, 27, 252, 228, 15, 5, 243, 113, 27, 248, - 202, 15, 5, 243, 113, 27, 244, 247, 15, 5, 243, 113, 27, 236, 104, 15, 5, - 243, 113, 27, 231, 103, 15, 5, 243, 113, 27, 224, 246, 15, 5, 243, 113, - 27, 68, 15, 5, 242, 173, 15, 5, 242, 169, 15, 5, 242, 170, 27, 254, 131, - 15, 5, 242, 170, 27, 243, 197, 15, 5, 242, 170, 27, 236, 208, 15, 5, 242, - 170, 27, 235, 29, 15, 5, 242, 170, 27, 220, 115, 15, 5, 242, 166, 15, 5, - 72, 15, 5, 242, 107, 60, 15, 5, 242, 69, 15, 5, 238, 29, 15, 5, 238, 30, - 104, 238, 30, 251, 228, 15, 5, 238, 30, 104, 238, 30, 223, 226, 15, 5, - 238, 4, 15, 5, 238, 1, 15, 5, 238, 2, 248, 255, 15, 5, 238, 2, 227, 147, - 15, 5, 238, 2, 104, 238, 2, 224, 205, 104, 224, 205, 220, 116, 104, 220, - 115, 15, 5, 238, 2, 244, 3, 15, 5, 237, 249, 15, 5, 237, 250, 27, 244, - 229, 222, 59, 15, 5, 237, 248, 15, 5, 237, 238, 15, 5, 237, 239, 27, 222, - 130, 15, 5, 237, 239, 250, 95, 237, 238, 15, 5, 237, 239, 230, 110, 237, - 238, 15, 5, 237, 239, 223, 226, 15, 5, 237, 231, 15, 5, 237, 223, 15, 5, - 237, 156, 15, 5, 237, 145, 15, 5, 175, 15, 5, 206, 27, 60, 15, 5, 206, - 27, 254, 244, 15, 5, 206, 27, 254, 245, 88, 236, 5, 15, 5, 206, 27, 254, - 5, 15, 5, 206, 27, 252, 228, 15, 5, 206, 27, 252, 216, 15, 5, 206, 27, - 135, 15, 5, 206, 27, 252, 84, 15, 5, 206, 27, 246, 143, 15, 5, 206, 27, - 246, 130, 15, 5, 206, 27, 245, 0, 15, 5, 206, 27, 244, 240, 15, 5, 206, - 27, 244, 229, 222, 59, 15, 5, 206, 27, 244, 220, 15, 5, 206, 27, 244, - 221, 88, 225, 24, 88, 60, 15, 5, 206, 27, 244, 103, 15, 5, 206, 27, 244, - 87, 15, 5, 206, 27, 244, 82, 88, 226, 131, 15, 5, 206, 27, 244, 82, 250, - 95, 244, 81, 15, 5, 206, 27, 244, 17, 15, 5, 206, 27, 243, 252, 15, 5, - 206, 27, 238, 1, 15, 5, 206, 27, 237, 238, 15, 5, 206, 27, 236, 240, 15, - 5, 206, 27, 236, 113, 15, 5, 206, 27, 236, 110, 15, 5, 206, 27, 235, 67, - 15, 5, 206, 27, 234, 231, 15, 5, 206, 27, 234, 25, 15, 5, 206, 27, 234, - 26, 88, 247, 111, 15, 5, 206, 27, 234, 26, 88, 244, 103, 15, 5, 206, 27, - 234, 26, 88, 222, 87, 15, 5, 206, 27, 233, 196, 15, 5, 206, 27, 233, 197, - 88, 231, 98, 15, 5, 206, 27, 232, 141, 15, 5, 206, 27, 231, 103, 15, 5, - 206, 27, 229, 108, 15, 5, 206, 27, 227, 22, 15, 5, 206, 27, 226, 177, 15, - 5, 206, 27, 226, 131, 15, 5, 206, 27, 225, 25, 15, 5, 206, 27, 224, 246, - 15, 5, 206, 27, 224, 219, 15, 5, 206, 27, 224, 170, 15, 5, 206, 27, 224, - 132, 15, 5, 206, 27, 223, 81, 15, 5, 206, 27, 222, 112, 15, 5, 206, 27, - 68, 15, 5, 206, 27, 220, 124, 15, 5, 206, 27, 220, 115, 15, 5, 206, 27, - 220, 90, 27, 187, 15, 5, 206, 27, 220, 30, 15, 5, 206, 27, 217, 42, 15, - 5, 237, 6, 15, 5, 237, 7, 250, 95, 237, 6, 15, 5, 236, 255, 15, 5, 236, - 253, 15, 5, 236, 251, 15, 5, 236, 250, 15, 5, 236, 248, 15, 5, 236, 249, - 104, 236, 248, 15, 5, 236, 240, 15, 5, 236, 241, 27, 238, 2, 244, 3, 15, - 5, 236, 236, 15, 5, 236, 237, 27, 252, 228, 15, 5, 236, 237, 250, 95, - 236, 236, 15, 5, 236, 235, 15, 5, 236, 234, 15, 5, 236, 208, 15, 5, 236, - 209, 235, 175, 27, 105, 104, 235, 175, 27, 68, 15, 5, 236, 209, 104, 236, - 209, 235, 175, 27, 105, 104, 235, 175, 27, 68, 15, 5, 236, 160, 15, 5, - 236, 113, 15, 5, 236, 114, 27, 252, 228, 15, 5, 236, 114, 27, 68, 15, 5, - 236, 114, 27, 220, 115, 15, 5, 236, 110, 15, 5, 236, 104, 15, 5, 236, 93, - 15, 5, 236, 92, 15, 5, 236, 90, 15, 5, 236, 91, 104, 236, 90, 15, 5, 236, - 7, 15, 5, 236, 8, 104, 243, 113, 27, 254, 6, 236, 8, 104, 243, 113, 27, - 254, 5, 15, 5, 236, 5, 15, 5, 236, 3, 15, 5, 236, 4, 219, 177, 17, 15, 5, - 236, 2, 15, 5, 236, 0, 15, 5, 236, 1, 244, 3, 15, 5, 235, 255, 15, 5, - 235, 247, 15, 5, 235, 248, 230, 110, 235, 247, 15, 5, 235, 242, 15, 5, - 235, 225, 15, 5, 235, 188, 15, 5, 235, 174, 15, 5, 235, 175, 27, 60, 15, - 5, 235, 175, 27, 112, 88, 249, 208, 88, 155, 15, 5, 235, 175, 27, 112, - 88, 244, 220, 15, 5, 235, 175, 27, 112, 88, 235, 162, 15, 5, 235, 175, - 27, 254, 175, 15, 5, 235, 175, 27, 254, 131, 15, 5, 235, 175, 27, 254, 8, - 217, 38, 222, 59, 15, 5, 235, 175, 27, 252, 228, 15, 5, 235, 175, 27, - 252, 84, 15, 5, 235, 175, 27, 249, 156, 15, 5, 235, 175, 27, 246, 197, - 15, 5, 235, 175, 27, 245, 0, 15, 5, 235, 175, 27, 244, 220, 15, 5, 235, - 175, 27, 244, 11, 15, 5, 235, 175, 27, 244, 12, 88, 244, 11, 15, 5, 235, - 175, 27, 155, 15, 5, 235, 175, 27, 243, 197, 15, 5, 235, 175, 27, 243, - 113, 27, 231, 103, 15, 5, 235, 175, 27, 238, 2, 244, 3, 15, 5, 235, 175, - 27, 237, 238, 15, 5, 235, 175, 27, 237, 239, 88, 155, 15, 5, 235, 175, - 27, 237, 239, 88, 234, 231, 15, 5, 235, 175, 27, 236, 113, 15, 5, 235, - 175, 27, 236, 104, 15, 5, 235, 175, 27, 236, 5, 15, 5, 235, 175, 27, 236, - 0, 15, 5, 235, 175, 27, 236, 1, 88, 243, 113, 88, 60, 15, 5, 235, 175, - 27, 235, 174, 15, 5, 235, 175, 27, 235, 29, 15, 5, 235, 175, 27, 234, - 231, 15, 5, 235, 175, 27, 234, 221, 15, 5, 235, 175, 27, 234, 25, 15, 5, - 235, 175, 27, 234, 26, 88, 246, 197, 15, 5, 235, 175, 27, 233, 62, 15, 5, - 235, 175, 27, 232, 141, 15, 5, 235, 175, 27, 224, 247, 88, 223, 74, 15, - 5, 235, 175, 27, 224, 203, 88, 244, 82, 88, 246, 143, 15, 5, 235, 175, - 27, 224, 203, 88, 244, 82, 222, 59, 15, 5, 235, 175, 27, 224, 168, 15, 5, - 235, 175, 27, 224, 169, 88, 224, 168, 15, 5, 235, 175, 27, 223, 74, 15, - 5, 235, 175, 27, 222, 141, 15, 5, 235, 175, 27, 222, 130, 15, 5, 235, - 175, 27, 222, 88, 88, 112, 88, 223, 104, 88, 208, 15, 5, 235, 175, 27, - 68, 15, 5, 235, 175, 27, 105, 88, 60, 15, 5, 235, 175, 27, 105, 88, 105, - 88, 68, 15, 5, 235, 175, 27, 220, 125, 88, 254, 7, 15, 5, 235, 175, 27, - 220, 115, 15, 5, 235, 175, 27, 220, 30, 15, 5, 235, 175, 223, 226, 15, 5, - 235, 172, 15, 5, 235, 173, 27, 224, 246, 15, 5, 235, 173, 27, 224, 247, - 88, 223, 74, 15, 5, 235, 173, 244, 3, 15, 5, 235, 173, 244, 4, 104, 235, - 173, 244, 4, 224, 246, 15, 5, 235, 169, 15, 5, 235, 162, 15, 5, 235, 163, - 27, 235, 162, 15, 5, 235, 160, 15, 5, 235, 161, 27, 235, 247, 15, 5, 235, - 161, 27, 235, 248, 88, 227, 22, 15, 5, 235, 67, 15, 5, 235, 54, 15, 5, - 235, 46, 15, 5, 235, 29, 15, 5, 234, 231, 15, 5, 234, 232, 27, 252, 228, - 15, 5, 234, 229, 15, 5, 234, 230, 27, 254, 175, 15, 5, 234, 230, 27, 252, - 228, 15, 5, 234, 230, 27, 246, 130, 15, 5, 234, 230, 27, 246, 131, 222, - 59, 15, 5, 234, 230, 27, 244, 229, 222, 59, 15, 5, 234, 230, 27, 243, - 113, 27, 252, 228, 15, 5, 234, 230, 27, 237, 238, 15, 5, 234, 230, 27, - 236, 253, 15, 5, 234, 230, 27, 236, 251, 15, 5, 234, 230, 27, 236, 252, - 88, 254, 7, 15, 5, 234, 230, 27, 236, 113, 15, 5, 234, 230, 27, 235, 189, - 88, 254, 7, 15, 5, 234, 230, 27, 235, 174, 15, 5, 234, 230, 27, 234, 26, - 88, 246, 197, 15, 5, 234, 230, 27, 232, 141, 15, 5, 234, 230, 27, 231, - 144, 15, 5, 234, 230, 27, 224, 141, 88, 254, 7, 15, 5, 234, 230, 27, 224, - 124, 88, 251, 248, 15, 5, 234, 230, 27, 220, 253, 15, 5, 234, 230, 222, - 59, 15, 5, 234, 230, 250, 95, 234, 229, 15, 5, 234, 230, 230, 110, 234, - 229, 15, 5, 234, 230, 223, 226, 15, 5, 234, 230, 224, 228, 15, 5, 234, - 228, 15, 5, 234, 225, 15, 5, 234, 226, 104, 234, 225, 15, 5, 234, 226, - 230, 110, 234, 225, 15, 5, 234, 226, 224, 228, 15, 5, 234, 224, 15, 5, - 234, 221, 15, 5, 234, 219, 15, 5, 234, 220, 104, 234, 219, 15, 5, 234, - 220, 104, 234, 220, 244, 221, 104, 244, 220, 15, 5, 196, 15, 5, 234, 120, - 27, 222, 130, 15, 5, 234, 120, 244, 3, 15, 5, 234, 119, 15, 5, 234, 106, - 15, 5, 234, 74, 15, 5, 234, 57, 15, 5, 234, 56, 15, 5, 234, 25, 15, 5, - 233, 244, 15, 5, 233, 196, 15, 5, 233, 159, 15, 5, 233, 99, 15, 5, 233, - 100, 104, 233, 99, 15, 5, 233, 92, 15, 5, 233, 93, 244, 3, 15, 5, 233, - 78, 15, 5, 233, 65, 15, 5, 233, 62, 15, 5, 233, 63, 27, 60, 15, 5, 233, - 63, 27, 235, 247, 15, 5, 233, 63, 27, 217, 114, 15, 5, 233, 63, 104, 233, - 62, 15, 5, 233, 63, 104, 233, 63, 27, 112, 88, 208, 15, 5, 233, 63, 250, - 95, 233, 62, 15, 5, 233, 60, 15, 5, 233, 61, 27, 60, 15, 5, 233, 61, 27, - 112, 88, 249, 15, 15, 5, 233, 61, 27, 249, 15, 15, 5, 233, 61, 244, 3, - 15, 5, 208, 15, 5, 232, 237, 15, 5, 232, 227, 15, 5, 232, 228, 237, 169, - 15, 5, 232, 228, 27, 224, 171, 222, 59, 15, 5, 232, 228, 230, 110, 232, - 227, 15, 5, 232, 226, 15, 5, 232, 222, 231, 90, 15, 5, 232, 221, 15, 5, - 232, 220, 15, 5, 232, 141, 15, 5, 232, 142, 27, 60, 15, 5, 232, 142, 27, - 220, 115, 15, 5, 232, 142, 224, 228, 15, 5, 232, 62, 15, 5, 232, 63, 27, - 73, 15, 5, 232, 61, 15, 5, 232, 34, 15, 5, 232, 35, 27, 244, 229, 222, - 59, 15, 5, 232, 35, 27, 244, 221, 88, 244, 229, 222, 59, 15, 5, 232, 32, - 15, 5, 232, 33, 27, 254, 131, 15, 5, 232, 33, 27, 254, 7, 15, 5, 232, 33, - 27, 254, 8, 88, 254, 7, 15, 5, 232, 33, 27, 244, 11, 15, 5, 232, 33, 27, - 234, 26, 88, 244, 229, 222, 59, 15, 5, 232, 33, 27, 232, 141, 15, 5, 232, - 33, 27, 231, 103, 15, 5, 232, 33, 27, 224, 246, 15, 5, 232, 33, 27, 224, - 247, 88, 112, 254, 131, 15, 5, 232, 33, 27, 224, 247, 88, 254, 7, 15, 5, - 232, 33, 27, 224, 247, 88, 254, 8, 88, 254, 7, 15, 5, 232, 33, 27, 220, - 125, 88, 254, 7, 15, 5, 232, 33, 27, 220, 30, 15, 5, 232, 22, 15, 5, 231, - 144, 15, 5, 231, 117, 15, 5, 231, 103, 15, 5, 231, 104, 235, 173, 27, - 244, 220, 15, 5, 231, 104, 235, 173, 27, 234, 57, 15, 5, 231, 104, 235, - 173, 27, 226, 156, 15, 5, 231, 104, 235, 173, 27, 226, 157, 104, 231, - 104, 235, 173, 27, 226, 156, 15, 5, 231, 104, 235, 173, 27, 220, 30, 15, - 5, 231, 104, 222, 59, 15, 5, 231, 104, 104, 231, 103, 15, 5, 231, 104, - 250, 95, 231, 103, 15, 5, 231, 104, 250, 95, 231, 104, 235, 173, 104, - 235, 172, 15, 5, 231, 98, 15, 5, 231, 99, 255, 10, 27, 254, 3, 15, 5, - 231, 99, 255, 10, 27, 252, 84, 15, 5, 231, 99, 255, 10, 27, 247, 107, 15, - 5, 231, 99, 255, 10, 27, 244, 11, 15, 5, 231, 99, 255, 10, 27, 238, 2, - 244, 3, 15, 5, 231, 99, 255, 10, 27, 236, 251, 15, 5, 231, 99, 255, 10, - 27, 235, 188, 15, 5, 231, 99, 255, 10, 27, 232, 141, 15, 5, 231, 99, 255, - 10, 27, 224, 121, 15, 5, 231, 99, 255, 10, 27, 220, 124, 15, 5, 231, 99, - 236, 91, 27, 252, 84, 15, 5, 231, 99, 236, 91, 27, 252, 85, 68, 15, 5, - 187, 15, 5, 230, 37, 15, 5, 230, 12, 15, 5, 229, 246, 15, 5, 229, 152, - 15, 5, 229, 108, 15, 5, 229, 109, 27, 60, 15, 5, 229, 109, 27, 255, 11, - 15, 5, 229, 109, 27, 252, 84, 15, 5, 229, 109, 27, 251, 248, 15, 5, 229, - 109, 27, 73, 15, 5, 229, 109, 27, 72, 15, 5, 229, 109, 27, 242, 69, 15, - 5, 229, 109, 27, 68, 15, 5, 229, 109, 27, 220, 124, 15, 5, 229, 109, 250, - 95, 229, 108, 15, 5, 229, 67, 15, 5, 229, 68, 27, 236, 236, 15, 5, 229, - 68, 27, 220, 115, 15, 5, 229, 68, 27, 217, 114, 15, 5, 229, 68, 230, 110, - 229, 67, 15, 5, 203, 15, 5, 227, 254, 15, 5, 227, 147, 15, 5, 227, 22, - 15, 5, 226, 177, 15, 5, 226, 166, 231, 90, 15, 5, 226, 165, 15, 5, 226, - 166, 27, 60, 15, 5, 226, 166, 27, 247, 111, 15, 5, 226, 166, 27, 247, - 109, 15, 5, 226, 166, 27, 155, 15, 5, 226, 166, 27, 236, 240, 15, 5, 226, - 166, 27, 235, 247, 15, 5, 226, 166, 27, 234, 219, 15, 5, 226, 166, 27, - 233, 196, 15, 5, 226, 166, 27, 231, 103, 15, 5, 226, 166, 27, 226, 156, - 15, 5, 226, 166, 27, 224, 219, 15, 5, 226, 166, 27, 222, 147, 15, 5, 226, - 166, 27, 220, 124, 15, 5, 226, 166, 27, 220, 121, 15, 5, 226, 166, 27, - 220, 94, 15, 5, 226, 166, 27, 220, 50, 15, 5, 226, 166, 27, 220, 30, 15, - 5, 226, 166, 104, 226, 165, 15, 5, 226, 166, 244, 3, 15, 5, 226, 156, 15, - 5, 226, 157, 235, 175, 27, 254, 5, 15, 5, 226, 138, 15, 5, 226, 131, 15, - 5, 225, 25, 15, 5, 225, 23, 15, 5, 225, 24, 27, 60, 15, 5, 225, 24, 27, - 252, 228, 15, 5, 225, 24, 27, 244, 81, 15, 5, 225, 24, 27, 232, 141, 15, - 5, 225, 24, 27, 224, 168, 15, 5, 225, 24, 27, 220, 240, 15, 5, 225, 24, - 27, 68, 15, 5, 225, 24, 27, 105, 88, 60, 15, 5, 225, 22, 15, 5, 225, 20, - 15, 5, 225, 3, 15, 5, 224, 246, 15, 5, 224, 247, 242, 173, 15, 5, 224, - 247, 104, 224, 247, 244, 248, 104, 244, 248, 244, 221, 104, 244, 220, 15, - 5, 224, 247, 104, 224, 247, 222, 148, 104, 222, 148, 244, 221, 104, 244, - 220, 15, 5, 224, 239, 15, 5, 224, 234, 15, 5, 224, 231, 15, 5, 224, 230, - 15, 5, 224, 227, 15, 5, 224, 219, 15, 5, 224, 220, 27, 60, 15, 5, 224, - 220, 27, 237, 238, 15, 5, 224, 213, 15, 5, 224, 214, 27, 60, 15, 5, 224, - 214, 27, 252, 217, 15, 5, 224, 214, 27, 251, 237, 15, 5, 224, 214, 27, - 248, 219, 15, 5, 224, 214, 27, 244, 220, 15, 5, 224, 214, 27, 238, 1, 15, - 5, 224, 214, 27, 238, 2, 244, 3, 15, 5, 224, 214, 27, 235, 242, 15, 5, - 224, 214, 27, 234, 221, 15, 5, 224, 214, 27, 233, 92, 15, 5, 224, 214, - 27, 226, 156, 15, 5, 224, 208, 15, 5, 224, 204, 15, 5, 224, 205, 222, 59, - 15, 5, 224, 205, 104, 224, 205, 251, 229, 104, 251, 228, 15, 5, 224, 202, - 15, 5, 224, 170, 15, 5, 224, 171, 104, 237, 170, 224, 170, 15, 5, 224, - 168, 15, 5, 224, 167, 15, 5, 224, 140, 15, 5, 224, 141, 244, 3, 15, 5, - 224, 132, 15, 5, 224, 130, 15, 5, 224, 131, 104, 224, 131, 224, 168, 15, - 5, 224, 123, 15, 5, 224, 121, 15, 5, 223, 103, 15, 5, 223, 104, 104, 223, - 103, 15, 5, 223, 83, 15, 5, 223, 82, 15, 5, 223, 81, 15, 5, 223, 74, 15, - 5, 223, 73, 15, 5, 223, 53, 15, 5, 223, 52, 15, 5, 222, 155, 15, 5, 222, - 156, 253, 251, 15, 5, 222, 156, 27, 243, 112, 15, 5, 222, 156, 27, 233, - 196, 15, 5, 222, 156, 244, 3, 15, 5, 222, 147, 15, 5, 222, 148, 104, 222, - 148, 232, 63, 104, 232, 63, 248, 203, 104, 248, 202, 15, 5, 222, 148, - 223, 226, 15, 5, 222, 141, 15, 5, 118, 27, 252, 84, 15, 5, 118, 27, 244, - 11, 15, 5, 118, 27, 224, 246, 15, 5, 118, 27, 224, 170, 15, 5, 118, 27, - 220, 253, 15, 5, 118, 27, 220, 115, 15, 5, 222, 130, 15, 5, 222, 112, 15, - 5, 222, 87, 15, 5, 222, 88, 244, 3, 15, 5, 221, 205, 15, 5, 221, 206, - 222, 59, 15, 5, 221, 181, 15, 5, 221, 165, 15, 5, 221, 166, 27, 222, 130, - 15, 5, 221, 166, 104, 221, 165, 15, 5, 221, 166, 104, 221, 166, 244, 248, - 104, 244, 248, 244, 221, 104, 244, 220, 15, 5, 221, 0, 15, 5, 220, 253, - 15, 5, 220, 251, 15, 5, 220, 249, 15, 5, 220, 240, 15, 5, 220, 241, 104, - 220, 241, 217, 115, 104, 217, 114, 15, 5, 68, 15, 5, 105, 244, 11, 15, 5, - 105, 105, 68, 15, 5, 105, 104, 105, 230, 44, 104, 230, 44, 244, 221, 104, - 244, 220, 15, 5, 105, 104, 105, 223, 54, 104, 223, 53, 15, 5, 105, 104, - 105, 105, 210, 104, 105, 227, 159, 15, 5, 220, 124, 15, 5, 220, 121, 15, - 5, 220, 115, 15, 5, 220, 116, 235, 242, 15, 5, 220, 116, 27, 252, 228, - 15, 5, 220, 116, 27, 233, 196, 15, 5, 220, 116, 27, 105, 88, 105, 88, 68, - 15, 5, 220, 116, 27, 105, 88, 105, 88, 105, 244, 3, 15, 5, 220, 116, 244, - 3, 15, 5, 220, 116, 224, 228, 15, 5, 220, 116, 224, 229, 27, 252, 228, - 15, 5, 220, 111, 15, 5, 220, 94, 15, 5, 220, 95, 27, 235, 174, 15, 5, - 220, 95, 27, 234, 26, 88, 249, 207, 15, 5, 220, 95, 27, 225, 23, 15, 5, - 220, 95, 27, 68, 15, 5, 220, 93, 15, 5, 220, 89, 15, 5, 220, 90, 27, 236, - 208, 15, 5, 220, 90, 27, 187, 15, 5, 220, 87, 15, 5, 220, 88, 244, 3, 15, - 5, 220, 50, 15, 5, 220, 51, 250, 95, 220, 50, 15, 5, 220, 51, 224, 228, - 15, 5, 220, 48, 15, 5, 220, 49, 27, 112, 88, 155, 15, 5, 220, 49, 27, - 112, 88, 208, 15, 5, 220, 49, 27, 254, 175, 15, 5, 220, 49, 27, 155, 15, - 5, 220, 49, 27, 231, 103, 15, 5, 220, 49, 27, 220, 124, 15, 5, 220, 49, - 27, 220, 125, 88, 254, 7, 15, 5, 220, 49, 27, 220, 125, 88, 252, 84, 15, - 5, 220, 47, 15, 5, 220, 44, 15, 5, 220, 43, 15, 5, 220, 40, 15, 5, 220, - 41, 27, 60, 15, 5, 220, 41, 27, 254, 3, 15, 5, 220, 41, 27, 135, 15, 5, - 220, 41, 27, 247, 101, 15, 5, 220, 41, 27, 245, 0, 15, 5, 220, 41, 27, - 244, 240, 15, 5, 220, 41, 27, 244, 229, 222, 59, 15, 5, 220, 41, 27, 244, - 220, 15, 5, 220, 41, 27, 244, 17, 15, 5, 220, 41, 27, 155, 15, 5, 220, - 41, 27, 238, 1, 15, 5, 220, 41, 27, 237, 238, 15, 5, 220, 41, 27, 237, - 145, 15, 5, 220, 41, 27, 236, 113, 15, 5, 220, 41, 27, 234, 219, 15, 5, - 220, 41, 27, 233, 159, 15, 5, 220, 41, 27, 187, 15, 5, 220, 41, 27, 224, - 246, 15, 5, 220, 41, 27, 224, 130, 15, 5, 220, 41, 27, 221, 0, 15, 5, - 220, 41, 27, 105, 88, 244, 11, 15, 5, 220, 41, 27, 220, 115, 15, 5, 220, - 41, 27, 220, 38, 15, 5, 220, 38, 15, 5, 220, 39, 27, 68, 15, 5, 220, 30, - 15, 5, 220, 31, 27, 60, 15, 5, 220, 31, 27, 236, 7, 15, 5, 220, 31, 27, - 235, 247, 15, 5, 220, 31, 27, 222, 130, 15, 5, 220, 27, 15, 5, 220, 29, - 15, 5, 220, 28, 15, 5, 220, 24, 15, 5, 220, 13, 15, 5, 220, 14, 27, 236, - 208, 15, 5, 220, 12, 15, 5, 217, 114, 15, 5, 217, 115, 222, 59, 15, 5, - 217, 115, 204, 27, 235, 247, 15, 5, 217, 111, 15, 5, 217, 104, 15, 5, - 217, 91, 15, 5, 217, 42, 15, 5, 217, 43, 104, 217, 42, 15, 5, 217, 41, - 15, 5, 217, 39, 15, 5, 217, 40, 236, 254, 222, 59, 15, 5, 217, 34, 15, 5, - 217, 26, 15, 5, 217, 13, 15, 5, 217, 11, 15, 5, 217, 12, 27, 60, 15, 5, - 217, 10, 15, 5, 217, 9, 15, 120, 5, 124, 254, 7, 15, 120, 5, 148, 254, 7, - 15, 120, 5, 245, 116, 254, 7, 15, 120, 5, 245, 170, 254, 7, 15, 120, 5, - 224, 82, 254, 7, 15, 120, 5, 225, 43, 254, 7, 15, 120, 5, 246, 235, 254, - 7, 15, 120, 5, 232, 31, 254, 7, 15, 120, 5, 148, 248, 202, 15, 120, 5, - 245, 116, 248, 202, 15, 120, 5, 245, 170, 248, 202, 15, 120, 5, 224, 82, - 248, 202, 15, 120, 5, 225, 43, 248, 202, 15, 120, 5, 246, 235, 248, 202, - 15, 120, 5, 232, 31, 248, 202, 15, 120, 5, 245, 116, 68, 15, 120, 5, 245, - 170, 68, 15, 120, 5, 224, 82, 68, 15, 120, 5, 225, 43, 68, 15, 120, 5, - 246, 235, 68, 15, 120, 5, 232, 31, 68, 15, 120, 5, 131, 244, 168, 15, - 120, 5, 124, 244, 168, 15, 120, 5, 148, 244, 168, 15, 120, 5, 245, 116, - 244, 168, 15, 120, 5, 245, 170, 244, 168, 15, 120, 5, 224, 82, 244, 168, - 15, 120, 5, 225, 43, 244, 168, 15, 120, 5, 246, 235, 244, 168, 15, 120, - 5, 232, 31, 244, 168, 15, 120, 5, 131, 244, 165, 15, 120, 5, 124, 244, - 165, 15, 120, 5, 148, 244, 165, 15, 120, 5, 245, 116, 244, 165, 15, 120, - 5, 245, 170, 244, 165, 15, 120, 5, 124, 225, 3, 15, 120, 5, 148, 225, 3, - 15, 120, 5, 148, 225, 4, 219, 177, 17, 15, 120, 5, 245, 116, 225, 3, 15, - 120, 5, 245, 170, 225, 3, 15, 120, 5, 224, 82, 225, 3, 15, 120, 5, 225, - 43, 225, 3, 15, 120, 5, 246, 235, 225, 3, 15, 120, 5, 232, 31, 225, 3, - 15, 120, 5, 131, 224, 254, 15, 120, 5, 124, 224, 254, 15, 120, 5, 148, - 224, 254, 15, 120, 5, 148, 224, 255, 219, 177, 17, 15, 120, 5, 245, 116, - 224, 254, 15, 120, 5, 245, 170, 224, 254, 15, 120, 5, 225, 4, 27, 244, - 241, 88, 248, 202, 15, 120, 5, 225, 4, 27, 244, 241, 88, 233, 159, 15, - 120, 5, 131, 251, 225, 15, 120, 5, 124, 251, 225, 15, 120, 5, 148, 251, - 225, 15, 120, 5, 148, 251, 226, 219, 177, 17, 15, 120, 5, 245, 116, 251, - 225, 15, 120, 5, 245, 170, 251, 225, 15, 120, 5, 148, 219, 177, 245, 124, - 246, 132, 15, 120, 5, 148, 219, 177, 245, 124, 246, 129, 15, 120, 5, 245, - 116, 219, 177, 245, 124, 235, 47, 15, 120, 5, 245, 116, 219, 177, 245, - 124, 235, 45, 15, 120, 5, 245, 116, 219, 177, 245, 124, 235, 48, 60, 15, - 120, 5, 245, 116, 219, 177, 245, 124, 235, 48, 253, 204, 15, 120, 5, 224, - 82, 219, 177, 245, 124, 254, 4, 15, 120, 5, 225, 43, 219, 177, 245, 124, - 237, 230, 15, 120, 5, 225, 43, 219, 177, 245, 124, 237, 232, 60, 15, 120, - 5, 225, 43, 219, 177, 245, 124, 237, 232, 253, 204, 15, 120, 5, 246, 235, - 219, 177, 245, 124, 220, 26, 15, 120, 5, 246, 235, 219, 177, 245, 124, - 220, 25, 15, 120, 5, 232, 31, 219, 177, 245, 124, 237, 246, 15, 120, 5, - 232, 31, 219, 177, 245, 124, 237, 245, 15, 120, 5, 232, 31, 219, 177, - 245, 124, 237, 244, 15, 120, 5, 232, 31, 219, 177, 245, 124, 237, 247, - 60, 15, 120, 5, 124, 254, 8, 222, 59, 15, 120, 5, 148, 254, 8, 222, 59, - 15, 120, 5, 245, 116, 254, 8, 222, 59, 15, 120, 5, 245, 170, 254, 8, 222, - 59, 15, 120, 5, 224, 82, 254, 8, 222, 59, 15, 120, 5, 131, 252, 207, 15, - 120, 5, 124, 252, 207, 15, 120, 5, 148, 252, 207, 15, 120, 5, 245, 116, - 252, 207, 15, 120, 5, 245, 116, 252, 208, 219, 177, 17, 15, 120, 5, 245, - 170, 252, 207, 15, 120, 5, 245, 170, 252, 208, 219, 177, 17, 15, 120, 5, - 232, 40, 15, 120, 5, 232, 41, 15, 120, 5, 131, 246, 128, 15, 120, 5, 124, - 246, 128, 15, 120, 5, 131, 221, 252, 248, 202, 15, 120, 5, 124, 221, 250, - 248, 202, 15, 120, 5, 245, 170, 224, 72, 248, 202, 15, 120, 5, 131, 221, - 252, 219, 177, 245, 124, 60, 15, 120, 5, 124, 221, 250, 219, 177, 245, - 124, 60, 15, 120, 5, 131, 246, 232, 254, 7, 15, 120, 5, 131, 228, 90, - 254, 7, 15, 120, 5, 48, 253, 254, 131, 224, 73, 15, 120, 5, 48, 253, 254, - 131, 228, 89, 15, 228, 197, 5, 48, 253, 254, 218, 174, 248, 191, 15, 228, - 197, 5, 69, 250, 175, 15, 228, 197, 5, 249, 11, 250, 175, 15, 228, 197, - 5, 249, 11, 221, 86, 10, 11, 255, 140, 10, 11, 255, 139, 10, 11, 255, - 138, 10, 11, 255, 137, 10, 11, 255, 136, 10, 11, 255, 135, 10, 11, 255, - 134, 10, 11, 255, 133, 10, 11, 255, 132, 10, 11, 255, 131, 10, 11, 255, - 130, 10, 11, 255, 129, 10, 11, 255, 128, 10, 11, 255, 127, 10, 11, 255, - 126, 10, 11, 255, 125, 10, 11, 255, 124, 10, 11, 255, 123, 10, 11, 255, - 122, 10, 11, 255, 121, 10, 11, 255, 120, 10, 11, 255, 119, 10, 11, 255, - 118, 10, 11, 255, 117, 10, 11, 255, 116, 10, 11, 255, 115, 10, 11, 255, - 114, 10, 11, 255, 113, 10, 11, 255, 112, 10, 11, 255, 111, 10, 11, 255, - 110, 10, 11, 255, 109, 10, 11, 255, 108, 10, 11, 255, 107, 10, 11, 255, - 106, 10, 11, 255, 105, 10, 11, 255, 104, 10, 11, 255, 103, 10, 11, 255, - 102, 10, 11, 255, 101, 10, 11, 255, 100, 10, 11, 255, 99, 10, 11, 255, - 98, 10, 11, 255, 97, 10, 11, 255, 96, 10, 11, 255, 95, 10, 11, 255, 94, - 10, 11, 255, 93, 10, 11, 255, 92, 10, 11, 255, 91, 10, 11, 255, 90, 10, - 11, 255, 89, 10, 11, 255, 88, 10, 11, 255, 87, 10, 11, 255, 86, 10, 11, - 255, 85, 10, 11, 255, 84, 10, 11, 255, 83, 10, 11, 255, 82, 10, 11, 255, - 81, 10, 11, 255, 80, 10, 11, 255, 79, 10, 11, 255, 78, 10, 11, 255, 77, - 10, 11, 255, 76, 10, 11, 255, 75, 10, 11, 255, 74, 10, 11, 255, 73, 10, - 11, 255, 72, 10, 11, 255, 71, 10, 11, 255, 70, 10, 11, 255, 69, 10, 11, - 255, 68, 10, 11, 255, 67, 10, 11, 255, 66, 10, 11, 255, 65, 10, 11, 255, - 64, 10, 11, 255, 63, 10, 11, 255, 62, 10, 11, 255, 61, 10, 11, 253, 202, - 10, 11, 253, 200, 10, 11, 253, 198, 10, 11, 253, 196, 10, 11, 253, 194, - 10, 11, 253, 193, 10, 11, 253, 191, 10, 11, 253, 189, 10, 11, 253, 187, - 10, 11, 253, 185, 10, 11, 251, 198, 10, 11, 251, 197, 10, 11, 251, 196, - 10, 11, 251, 195, 10, 11, 251, 194, 10, 11, 251, 193, 10, 11, 251, 192, - 10, 11, 251, 191, 10, 11, 251, 190, 10, 11, 251, 189, 10, 11, 251, 188, - 10, 11, 251, 187, 10, 11, 251, 186, 10, 11, 251, 185, 10, 11, 251, 184, - 10, 11, 251, 183, 10, 11, 251, 182, 10, 11, 251, 181, 10, 11, 251, 180, - 10, 11, 251, 179, 10, 11, 251, 178, 10, 11, 251, 177, 10, 11, 251, 176, - 10, 11, 251, 175, 10, 11, 251, 174, 10, 11, 251, 173, 10, 11, 251, 172, - 10, 11, 251, 171, 10, 11, 250, 45, 10, 11, 250, 44, 10, 11, 250, 43, 10, - 11, 250, 42, 10, 11, 250, 41, 10, 11, 250, 40, 10, 11, 250, 39, 10, 11, - 250, 38, 10, 11, 250, 37, 10, 11, 250, 36, 10, 11, 250, 35, 10, 11, 250, - 34, 10, 11, 250, 33, 10, 11, 250, 32, 10, 11, 250, 31, 10, 11, 250, 30, - 10, 11, 250, 29, 10, 11, 250, 28, 10, 11, 250, 27, 10, 11, 250, 26, 10, - 11, 250, 25, 10, 11, 250, 24, 10, 11, 250, 23, 10, 11, 250, 22, 10, 11, - 250, 21, 10, 11, 250, 20, 10, 11, 250, 19, 10, 11, 250, 18, 10, 11, 250, - 17, 10, 11, 250, 16, 10, 11, 250, 15, 10, 11, 250, 14, 10, 11, 250, 13, - 10, 11, 250, 12, 10, 11, 250, 11, 10, 11, 250, 10, 10, 11, 250, 9, 10, - 11, 250, 8, 10, 11, 250, 7, 10, 11, 250, 6, 10, 11, 250, 5, 10, 11, 250, - 4, 10, 11, 250, 3, 10, 11, 250, 2, 10, 11, 250, 1, 10, 11, 250, 0, 10, - 11, 249, 255, 10, 11, 249, 254, 10, 11, 249, 253, 10, 11, 249, 252, 10, - 11, 249, 251, 10, 11, 249, 250, 10, 11, 249, 249, 10, 11, 249, 248, 10, - 11, 249, 247, 10, 11, 249, 246, 10, 11, 249, 245, 10, 11, 249, 244, 10, - 11, 249, 243, 10, 11, 249, 242, 10, 11, 249, 241, 10, 11, 249, 240, 10, - 11, 249, 239, 10, 11, 249, 238, 10, 11, 249, 237, 10, 11, 249, 236, 10, - 11, 249, 235, 10, 11, 249, 234, 10, 11, 249, 233, 10, 11, 249, 232, 10, - 11, 249, 231, 10, 11, 249, 230, 10, 11, 249, 229, 10, 11, 249, 228, 10, - 11, 249, 227, 10, 11, 249, 226, 10, 11, 249, 225, 10, 11, 249, 224, 10, - 11, 249, 223, 10, 11, 249, 222, 10, 11, 249, 221, 10, 11, 249, 220, 10, - 11, 249, 219, 10, 11, 249, 218, 10, 11, 249, 217, 10, 11, 249, 216, 10, - 11, 249, 215, 10, 11, 249, 214, 10, 11, 249, 213, 10, 11, 249, 212, 10, - 11, 249, 211, 10, 11, 249, 210, 10, 11, 247, 62, 10, 11, 247, 61, 10, 11, - 247, 60, 10, 11, 247, 59, 10, 11, 247, 58, 10, 11, 247, 57, 10, 11, 247, - 56, 10, 11, 247, 55, 10, 11, 247, 54, 10, 11, 247, 53, 10, 11, 247, 52, - 10, 11, 247, 51, 10, 11, 247, 50, 10, 11, 247, 49, 10, 11, 247, 48, 10, - 11, 247, 47, 10, 11, 247, 46, 10, 11, 247, 45, 10, 11, 247, 44, 10, 11, - 247, 43, 10, 11, 247, 42, 10, 11, 247, 41, 10, 11, 247, 40, 10, 11, 247, - 39, 10, 11, 247, 38, 10, 11, 247, 37, 10, 11, 247, 36, 10, 11, 247, 35, - 10, 11, 247, 34, 10, 11, 247, 33, 10, 11, 247, 32, 10, 11, 247, 31, 10, - 11, 247, 30, 10, 11, 247, 29, 10, 11, 247, 28, 10, 11, 247, 27, 10, 11, - 247, 26, 10, 11, 247, 25, 10, 11, 247, 24, 10, 11, 247, 23, 10, 11, 247, - 22, 10, 11, 247, 21, 10, 11, 247, 20, 10, 11, 247, 19, 10, 11, 246, 73, - 10, 11, 246, 72, 10, 11, 246, 71, 10, 11, 246, 70, 10, 11, 246, 69, 10, - 11, 246, 68, 10, 11, 246, 67, 10, 11, 246, 66, 10, 11, 246, 65, 10, 11, - 246, 64, 10, 11, 246, 63, 10, 11, 246, 62, 10, 11, 246, 61, 10, 11, 246, - 60, 10, 11, 246, 59, 10, 11, 246, 58, 10, 11, 246, 57, 10, 11, 246, 56, - 10, 11, 246, 55, 10, 11, 246, 54, 10, 11, 246, 53, 10, 11, 246, 52, 10, - 11, 246, 51, 10, 11, 246, 50, 10, 11, 246, 49, 10, 11, 246, 48, 10, 11, - 246, 47, 10, 11, 246, 46, 10, 11, 246, 45, 10, 11, 246, 44, 10, 11, 246, - 43, 10, 11, 246, 42, 10, 11, 246, 41, 10, 11, 246, 40, 10, 11, 246, 39, - 10, 11, 246, 38, 10, 11, 246, 37, 10, 11, 246, 36, 10, 11, 246, 35, 10, - 11, 246, 34, 10, 11, 246, 33, 10, 11, 246, 32, 10, 11, 246, 31, 10, 11, - 246, 30, 10, 11, 246, 29, 10, 11, 246, 28, 10, 11, 246, 27, 10, 11, 246, - 26, 10, 11, 246, 25, 10, 11, 246, 24, 10, 11, 246, 23, 10, 11, 246, 22, - 10, 11, 246, 21, 10, 11, 246, 20, 10, 11, 246, 19, 10, 11, 246, 18, 10, - 11, 246, 17, 10, 11, 246, 16, 10, 11, 246, 15, 10, 11, 246, 14, 10, 11, - 246, 13, 10, 11, 246, 12, 10, 11, 246, 11, 10, 11, 246, 10, 10, 11, 246, - 9, 10, 11, 245, 66, 10, 11, 245, 65, 10, 11, 245, 64, 10, 11, 245, 63, - 10, 11, 245, 62, 10, 11, 245, 61, 10, 11, 245, 60, 10, 11, 245, 59, 10, - 11, 245, 58, 10, 11, 245, 57, 10, 11, 245, 56, 10, 11, 245, 55, 10, 11, - 245, 54, 10, 11, 245, 53, 10, 11, 245, 52, 10, 11, 245, 51, 10, 11, 245, - 50, 10, 11, 245, 49, 10, 11, 245, 48, 10, 11, 245, 47, 10, 11, 245, 46, - 10, 11, 245, 45, 10, 11, 245, 44, 10, 11, 245, 43, 10, 11, 245, 42, 10, - 11, 245, 41, 10, 11, 245, 40, 10, 11, 245, 39, 10, 11, 245, 38, 10, 11, - 245, 37, 10, 11, 245, 36, 10, 11, 245, 35, 10, 11, 245, 34, 10, 11, 245, - 33, 10, 11, 245, 32, 10, 11, 245, 31, 10, 11, 245, 30, 10, 11, 245, 29, - 10, 11, 245, 28, 10, 11, 245, 27, 10, 11, 245, 26, 10, 11, 245, 25, 10, - 11, 245, 24, 10, 11, 245, 23, 10, 11, 245, 22, 10, 11, 245, 21, 10, 11, - 245, 20, 10, 11, 245, 19, 10, 11, 245, 18, 10, 11, 245, 17, 10, 11, 245, - 16, 10, 11, 245, 15, 10, 11, 245, 14, 10, 11, 245, 13, 10, 11, 245, 12, - 10, 11, 245, 11, 10, 11, 245, 10, 10, 11, 245, 9, 10, 11, 245, 8, 10, 11, - 245, 7, 10, 11, 245, 6, 10, 11, 245, 5, 10, 11, 245, 4, 10, 11, 245, 3, - 10, 11, 243, 223, 10, 11, 243, 222, 10, 11, 243, 221, 10, 11, 243, 220, - 10, 11, 243, 219, 10, 11, 243, 218, 10, 11, 243, 217, 10, 11, 243, 216, - 10, 11, 243, 215, 10, 11, 242, 91, 10, 11, 242, 90, 10, 11, 242, 89, 10, - 11, 242, 88, 10, 11, 242, 87, 10, 11, 242, 86, 10, 11, 242, 85, 10, 11, - 242, 84, 10, 11, 242, 83, 10, 11, 242, 82, 10, 11, 242, 81, 10, 11, 242, - 80, 10, 11, 242, 79, 10, 11, 242, 78, 10, 11, 242, 77, 10, 11, 242, 76, - 10, 11, 242, 75, 10, 11, 242, 74, 10, 11, 242, 73, 10, 11, 237, 16, 10, - 11, 237, 15, 10, 11, 237, 14, 10, 11, 237, 13, 10, 11, 237, 12, 10, 11, - 237, 11, 10, 11, 237, 10, 10, 11, 237, 9, 10, 11, 235, 199, 10, 11, 235, - 198, 10, 11, 235, 197, 10, 11, 235, 196, 10, 11, 235, 195, 10, 11, 235, - 194, 10, 11, 235, 193, 10, 11, 235, 192, 10, 11, 235, 191, 10, 11, 235, - 190, 10, 11, 234, 186, 10, 11, 234, 185, 10, 11, 234, 184, 10, 11, 234, - 183, 10, 11, 234, 182, 10, 11, 234, 181, 10, 11, 234, 180, 10, 11, 234, - 179, 10, 11, 234, 178, 10, 11, 234, 177, 10, 11, 234, 176, 10, 11, 234, - 175, 10, 11, 234, 174, 10, 11, 234, 173, 10, 11, 234, 172, 10, 11, 234, - 171, 10, 11, 234, 170, 10, 11, 234, 169, 10, 11, 234, 168, 10, 11, 234, - 167, 10, 11, 234, 166, 10, 11, 234, 165, 10, 11, 234, 164, 10, 11, 234, - 163, 10, 11, 234, 162, 10, 11, 234, 161, 10, 11, 234, 160, 10, 11, 234, - 159, 10, 11, 234, 158, 10, 11, 234, 157, 10, 11, 234, 156, 10, 11, 234, - 155, 10, 11, 234, 154, 10, 11, 234, 153, 10, 11, 234, 152, 10, 11, 234, - 151, 10, 11, 234, 150, 10, 11, 234, 149, 10, 11, 234, 148, 10, 11, 234, - 147, 10, 11, 234, 146, 10, 11, 234, 145, 10, 11, 234, 144, 10, 11, 234, - 143, 10, 11, 234, 142, 10, 11, 234, 141, 10, 11, 234, 140, 10, 11, 234, - 139, 10, 11, 234, 138, 10, 11, 234, 137, 10, 11, 234, 136, 10, 11, 234, - 135, 10, 11, 234, 134, 10, 11, 234, 133, 10, 11, 234, 132, 10, 11, 234, - 131, 10, 11, 234, 130, 10, 11, 234, 129, 10, 11, 234, 128, 10, 11, 234, - 127, 10, 11, 234, 126, 10, 11, 234, 125, 10, 11, 234, 124, 10, 11, 234, - 123, 10, 11, 234, 122, 10, 11, 234, 121, 10, 11, 233, 31, 10, 11, 233, - 30, 10, 11, 233, 29, 10, 11, 233, 28, 10, 11, 233, 27, 10, 11, 233, 26, - 10, 11, 233, 25, 10, 11, 233, 24, 10, 11, 233, 23, 10, 11, 233, 22, 10, - 11, 233, 21, 10, 11, 233, 20, 10, 11, 233, 19, 10, 11, 233, 18, 10, 11, - 233, 17, 10, 11, 233, 16, 10, 11, 233, 15, 10, 11, 233, 14, 10, 11, 233, - 13, 10, 11, 233, 12, 10, 11, 233, 11, 10, 11, 233, 10, 10, 11, 233, 9, - 10, 11, 233, 8, 10, 11, 233, 7, 10, 11, 233, 6, 10, 11, 233, 5, 10, 11, - 233, 4, 10, 11, 233, 3, 10, 11, 233, 2, 10, 11, 233, 1, 10, 11, 233, 0, - 10, 11, 232, 255, 10, 11, 232, 254, 10, 11, 232, 253, 10, 11, 232, 252, - 10, 11, 232, 251, 10, 11, 232, 250, 10, 11, 232, 249, 10, 11, 232, 248, - 10, 11, 232, 247, 10, 11, 232, 246, 10, 11, 232, 245, 10, 11, 232, 244, - 10, 11, 232, 243, 10, 11, 232, 242, 10, 11, 232, 241, 10, 11, 232, 240, - 10, 11, 232, 239, 10, 11, 231, 241, 10, 11, 231, 240, 10, 11, 231, 239, - 10, 11, 231, 238, 10, 11, 231, 237, 10, 11, 231, 236, 10, 11, 231, 235, - 10, 11, 231, 234, 10, 11, 231, 233, 10, 11, 231, 232, 10, 11, 231, 231, - 10, 11, 231, 230, 10, 11, 231, 229, 10, 11, 231, 228, 10, 11, 231, 227, - 10, 11, 231, 226, 10, 11, 231, 225, 10, 11, 231, 224, 10, 11, 231, 223, - 10, 11, 231, 222, 10, 11, 231, 221, 10, 11, 231, 220, 10, 11, 231, 143, - 10, 11, 231, 142, 10, 11, 231, 141, 10, 11, 231, 140, 10, 11, 231, 139, - 10, 11, 231, 138, 10, 11, 231, 137, 10, 11, 231, 136, 10, 11, 231, 135, - 10, 11, 231, 134, 10, 11, 231, 133, 10, 11, 231, 132, 10, 11, 231, 131, - 10, 11, 231, 130, 10, 11, 231, 129, 10, 11, 231, 128, 10, 11, 231, 127, - 10, 11, 231, 126, 10, 11, 231, 125, 10, 11, 231, 124, 10, 11, 231, 123, - 10, 11, 231, 122, 10, 11, 231, 121, 10, 11, 231, 120, 10, 11, 231, 119, - 10, 11, 231, 118, 10, 11, 231, 5, 10, 11, 231, 4, 10, 11, 231, 3, 10, 11, - 231, 2, 10, 11, 231, 1, 10, 11, 231, 0, 10, 11, 230, 255, 10, 11, 230, - 254, 10, 11, 230, 253, 10, 11, 230, 252, 10, 11, 230, 251, 10, 11, 230, - 250, 10, 11, 230, 249, 10, 11, 230, 248, 10, 11, 230, 247, 10, 11, 230, - 246, 10, 11, 230, 245, 10, 11, 230, 244, 10, 11, 230, 243, 10, 11, 230, - 242, 10, 11, 230, 241, 10, 11, 230, 240, 10, 11, 230, 239, 10, 11, 230, - 238, 10, 11, 230, 237, 10, 11, 230, 236, 10, 11, 230, 235, 10, 11, 230, - 234, 10, 11, 230, 233, 10, 11, 230, 232, 10, 11, 230, 231, 10, 11, 230, - 230, 10, 11, 230, 229, 10, 11, 230, 228, 10, 11, 230, 227, 10, 11, 230, - 226, 10, 11, 230, 225, 10, 11, 230, 224, 10, 11, 230, 223, 10, 11, 230, - 222, 10, 11, 230, 221, 10, 11, 230, 220, 10, 11, 230, 219, 10, 11, 230, - 218, 10, 11, 230, 217, 10, 11, 230, 216, 10, 11, 230, 215, 10, 11, 230, - 214, 10, 11, 230, 213, 10, 11, 230, 212, 10, 11, 230, 211, 10, 11, 230, - 210, 10, 11, 230, 209, 10, 11, 230, 208, 10, 11, 230, 207, 10, 11, 230, - 206, 10, 11, 230, 205, 10, 11, 230, 204, 10, 11, 230, 203, 10, 11, 230, - 202, 10, 11, 230, 201, 10, 11, 230, 200, 10, 11, 230, 199, 10, 11, 230, - 198, 10, 11, 230, 197, 10, 11, 230, 196, 10, 11, 230, 195, 10, 11, 230, - 194, 10, 11, 230, 193, 10, 11, 230, 192, 10, 11, 230, 191, 10, 11, 230, - 190, 10, 11, 230, 189, 10, 11, 230, 188, 10, 11, 230, 187, 10, 11, 230, - 58, 10, 11, 230, 57, 10, 11, 230, 56, 10, 11, 230, 55, 10, 11, 230, 54, - 10, 11, 230, 53, 10, 11, 230, 52, 10, 11, 230, 51, 10, 11, 230, 50, 10, - 11, 230, 49, 10, 11, 230, 48, 10, 11, 230, 47, 10, 11, 230, 46, 10, 11, - 228, 162, 10, 11, 228, 161, 10, 11, 228, 160, 10, 11, 228, 159, 10, 11, - 228, 158, 10, 11, 228, 157, 10, 11, 228, 156, 10, 11, 228, 37, 10, 11, - 228, 36, 10, 11, 228, 35, 10, 11, 228, 34, 10, 11, 228, 33, 10, 11, 228, - 32, 10, 11, 228, 31, 10, 11, 228, 30, 10, 11, 228, 29, 10, 11, 228, 28, - 10, 11, 228, 27, 10, 11, 228, 26, 10, 11, 228, 25, 10, 11, 228, 24, 10, - 11, 228, 23, 10, 11, 228, 22, 10, 11, 228, 21, 10, 11, 228, 20, 10, 11, - 228, 19, 10, 11, 228, 18, 10, 11, 228, 17, 10, 11, 228, 16, 10, 11, 228, - 15, 10, 11, 228, 14, 10, 11, 228, 13, 10, 11, 228, 12, 10, 11, 228, 11, - 10, 11, 228, 10, 10, 11, 228, 9, 10, 11, 228, 8, 10, 11, 228, 7, 10, 11, - 228, 6, 10, 11, 228, 5, 10, 11, 228, 4, 10, 11, 226, 232, 10, 11, 226, - 231, 10, 11, 226, 230, 10, 11, 226, 229, 10, 11, 226, 228, 10, 11, 226, - 227, 10, 11, 226, 226, 10, 11, 226, 225, 10, 11, 226, 224, 10, 11, 226, - 223, 10, 11, 226, 222, 10, 11, 226, 221, 10, 11, 226, 220, 10, 11, 226, - 219, 10, 11, 226, 218, 10, 11, 226, 217, 10, 11, 226, 216, 10, 11, 226, - 215, 10, 11, 226, 214, 10, 11, 226, 213, 10, 11, 226, 212, 10, 11, 226, - 211, 10, 11, 226, 210, 10, 11, 226, 209, 10, 11, 226, 208, 10, 11, 226, - 207, 10, 11, 226, 206, 10, 11, 226, 205, 10, 11, 226, 204, 10, 11, 226, - 203, 10, 11, 226, 202, 10, 11, 226, 201, 10, 11, 226, 200, 10, 11, 226, - 199, 10, 11, 226, 198, 10, 11, 226, 197, 10, 11, 226, 196, 10, 11, 226, - 195, 10, 11, 226, 194, 10, 11, 226, 193, 10, 11, 226, 192, 10, 11, 226, - 191, 10, 11, 226, 190, 10, 11, 226, 189, 10, 11, 226, 188, 10, 11, 226, - 187, 10, 11, 226, 186, 10, 11, 226, 185, 10, 11, 226, 184, 10, 11, 226, - 183, 10, 11, 226, 182, 10, 11, 226, 181, 10, 11, 226, 180, 10, 11, 226, - 179, 10, 11, 222, 200, 10, 11, 222, 199, 10, 11, 222, 198, 10, 11, 222, - 197, 10, 11, 222, 196, 10, 11, 222, 195, 10, 11, 222, 194, 10, 11, 222, - 193, 10, 11, 222, 192, 10, 11, 222, 191, 10, 11, 222, 190, 10, 11, 222, - 189, 10, 11, 222, 188, 10, 11, 222, 187, 10, 11, 222, 186, 10, 11, 222, - 185, 10, 11, 222, 184, 10, 11, 222, 183, 10, 11, 222, 182, 10, 11, 222, - 181, 10, 11, 222, 180, 10, 11, 222, 179, 10, 11, 222, 178, 10, 11, 222, - 177, 10, 11, 222, 176, 10, 11, 222, 175, 10, 11, 222, 174, 10, 11, 222, - 173, 10, 11, 222, 172, 10, 11, 222, 171, 10, 11, 222, 170, 10, 11, 222, - 169, 10, 11, 222, 168, 10, 11, 222, 167, 10, 11, 222, 166, 10, 11, 222, - 165, 10, 11, 222, 164, 10, 11, 222, 163, 10, 11, 222, 162, 10, 11, 222, - 161, 10, 11, 222, 160, 10, 11, 222, 159, 10, 11, 222, 158, 10, 11, 222, - 157, 10, 11, 220, 172, 10, 11, 220, 171, 10, 11, 220, 170, 10, 11, 220, - 169, 10, 11, 220, 168, 10, 11, 220, 167, 10, 11, 220, 166, 10, 11, 220, - 165, 10, 11, 220, 164, 10, 11, 220, 163, 10, 11, 220, 162, 10, 11, 220, - 161, 10, 11, 220, 160, 10, 11, 220, 159, 10, 11, 220, 158, 10, 11, 220, - 157, 10, 11, 220, 156, 10, 11, 220, 155, 10, 11, 220, 154, 10, 11, 220, - 153, 10, 11, 220, 152, 10, 11, 220, 151, 10, 11, 220, 150, 10, 11, 220, - 149, 10, 11, 220, 148, 10, 11, 220, 147, 10, 11, 220, 146, 10, 11, 220, - 145, 10, 11, 220, 144, 10, 11, 220, 143, 10, 11, 220, 142, 10, 11, 220, - 141, 10, 11, 220, 140, 10, 11, 220, 139, 10, 11, 220, 138, 10, 11, 220, - 137, 10, 11, 220, 136, 10, 11, 220, 135, 10, 11, 220, 134, 10, 11, 220, - 133, 10, 11, 220, 132, 10, 11, 220, 131, 10, 11, 220, 130, 10, 11, 220, - 129, 10, 11, 220, 128, 10, 11, 220, 127, 10, 11, 220, 126, 10, 11, 220, - 10, 10, 11, 220, 9, 10, 11, 220, 8, 10, 11, 220, 7, 10, 11, 220, 6, 10, - 11, 220, 5, 10, 11, 220, 4, 10, 11, 220, 3, 10, 11, 220, 2, 10, 11, 220, - 1, 10, 11, 220, 0, 10, 11, 219, 255, 10, 11, 219, 254, 10, 11, 219, 253, - 10, 11, 219, 252, 10, 11, 219, 251, 10, 11, 219, 250, 10, 11, 219, 249, - 10, 11, 219, 248, 10, 11, 219, 247, 10, 11, 219, 246, 10, 11, 219, 245, - 10, 11, 219, 244, 10, 11, 219, 243, 10, 11, 219, 242, 10, 11, 219, 241, - 10, 11, 219, 240, 10, 11, 219, 239, 10, 11, 219, 238, 10, 11, 219, 237, - 10, 11, 219, 236, 10, 11, 219, 235, 10, 11, 219, 234, 10, 11, 219, 233, - 10, 11, 219, 232, 10, 11, 219, 231, 10, 11, 219, 230, 10, 11, 219, 229, - 10, 11, 219, 228, 10, 11, 219, 227, 10, 11, 219, 226, 10, 11, 219, 225, - 10, 11, 219, 224, 10, 11, 219, 223, 10, 11, 219, 222, 10, 11, 219, 221, - 10, 11, 219, 220, 10, 11, 219, 219, 10, 11, 219, 218, 10, 11, 219, 217, - 10, 11, 219, 216, 10, 11, 219, 215, 10, 11, 219, 214, 10, 11, 219, 213, - 10, 11, 219, 212, 10, 11, 219, 211, 10, 11, 219, 210, 10, 11, 219, 209, - 10, 11, 219, 208, 10, 11, 219, 207, 10, 11, 219, 206, 10, 11, 219, 205, - 10, 11, 219, 204, 10, 11, 219, 203, 10, 11, 219, 202, 10, 11, 219, 201, - 10, 11, 219, 200, 10, 11, 219, 199, 10, 11, 219, 198, 10, 11, 219, 197, - 10, 11, 219, 196, 10, 11, 219, 195, 10, 11, 219, 194, 10, 11, 219, 193, - 10, 11, 219, 192, 10, 11, 219, 191, 10, 11, 219, 190, 10, 11, 219, 39, - 10, 11, 219, 38, 10, 11, 219, 37, 10, 11, 219, 36, 10, 11, 219, 35, 10, - 11, 219, 34, 10, 11, 219, 33, 10, 11, 219, 32, 10, 11, 219, 31, 10, 11, - 219, 30, 10, 11, 219, 29, 10, 11, 219, 28, 10, 11, 219, 27, 10, 11, 219, - 26, 10, 11, 219, 25, 10, 11, 219, 24, 10, 11, 219, 23, 10, 11, 219, 22, - 10, 11, 219, 21, 10, 11, 219, 20, 10, 11, 219, 19, 10, 11, 219, 18, 10, - 11, 219, 17, 10, 11, 219, 16, 10, 11, 219, 15, 10, 11, 219, 14, 10, 11, - 219, 13, 10, 11, 219, 12, 10, 11, 219, 11, 10, 11, 219, 10, 10, 11, 219, - 9, 10, 11, 219, 8, 10, 11, 218, 150, 10, 11, 218, 149, 10, 11, 218, 148, - 10, 11, 218, 147, 10, 11, 218, 146, 10, 11, 218, 145, 10, 11, 218, 144, - 10, 11, 218, 143, 10, 11, 218, 142, 10, 11, 218, 141, 10, 11, 218, 140, - 10, 11, 218, 139, 10, 11, 218, 88, 10, 11, 218, 87, 10, 11, 218, 86, 10, - 11, 218, 85, 10, 11, 218, 84, 10, 11, 218, 83, 10, 11, 218, 82, 10, 11, - 218, 81, 10, 11, 218, 80, 10, 11, 217, 156, 10, 11, 217, 155, 10, 11, - 217, 154, 10, 11, 217, 153, 10, 11, 217, 152, 10, 11, 217, 151, 10, 11, - 217, 150, 10, 11, 217, 149, 10, 11, 217, 148, 10, 11, 217, 147, 10, 11, - 217, 146, 10, 11, 217, 145, 10, 11, 217, 144, 10, 11, 217, 143, 10, 11, - 217, 142, 10, 11, 217, 141, 10, 11, 217, 140, 10, 11, 217, 139, 10, 11, - 217, 138, 10, 11, 217, 137, 10, 11, 217, 136, 10, 11, 217, 135, 10, 11, - 217, 134, 10, 11, 217, 133, 10, 11, 217, 132, 10, 11, 217, 131, 10, 11, - 217, 130, 10, 11, 217, 129, 10, 11, 217, 128, 10, 11, 217, 127, 10, 11, - 217, 126, 10, 11, 217, 125, 10, 11, 217, 124, 10, 11, 217, 123, 10, 11, - 217, 122, 10, 11, 217, 121, 10, 11, 217, 120, 10, 11, 217, 119, 10, 11, - 217, 118, 10, 11, 217, 117, 10, 11, 217, 116, 10, 11, 255, 57, 10, 11, - 255, 56, 10, 11, 255, 55, 10, 11, 255, 54, 10, 11, 255, 53, 10, 11, 255, - 52, 10, 11, 255, 51, 10, 11, 255, 50, 10, 11, 255, 49, 10, 11, 255, 48, - 10, 11, 255, 47, 10, 11, 255, 46, 10, 11, 255, 45, 10, 11, 255, 44, 10, - 11, 255, 43, 10, 11, 255, 42, 10, 11, 255, 41, 10, 11, 255, 40, 10, 11, - 255, 39, 10, 11, 255, 38, 10, 11, 255, 37, 10, 11, 255, 36, 10, 11, 255, - 35, 10, 11, 255, 34, 10, 11, 255, 33, 10, 11, 255, 32, 10, 11, 255, 31, - 10, 11, 255, 30, 10, 11, 255, 29, 10, 11, 255, 28, 10, 11, 255, 27, 10, - 11, 255, 26, 10, 11, 255, 25, 10, 11, 255, 24, 46, 26, 16, 228, 206, 46, - 26, 16, 249, 148, 46, 26, 16, 229, 163, 46, 26, 16, 230, 67, 246, 221, - 46, 26, 16, 230, 67, 248, 214, 46, 26, 16, 219, 181, 246, 221, 46, 26, - 16, 219, 181, 248, 214, 46, 26, 16, 236, 198, 46, 26, 16, 222, 217, 46, - 26, 16, 229, 235, 46, 26, 16, 217, 205, 46, 26, 16, 217, 206, 248, 214, - 46, 26, 16, 236, 12, 46, 26, 16, 254, 89, 246, 221, 46, 26, 16, 246, 90, - 246, 221, 46, 26, 16, 222, 73, 46, 26, 16, 236, 164, 46, 26, 16, 254, 80, - 46, 26, 16, 254, 81, 248, 214, 46, 26, 16, 222, 222, 46, 26, 16, 221, - 242, 46, 26, 16, 230, 148, 254, 47, 46, 26, 16, 244, 56, 254, 47, 46, 26, - 16, 228, 205, 46, 26, 16, 251, 62, 46, 26, 16, 219, 171, 46, 26, 16, 237, - 144, 254, 47, 46, 26, 16, 236, 166, 254, 47, 46, 26, 16, 236, 165, 254, - 47, 46, 26, 16, 226, 119, 46, 26, 16, 229, 226, 46, 26, 16, 223, 151, - 254, 83, 46, 26, 16, 230, 66, 254, 47, 46, 26, 16, 219, 180, 254, 47, 46, - 26, 16, 254, 84, 254, 47, 46, 26, 16, 254, 78, 46, 26, 16, 236, 65, 46, - 26, 16, 227, 157, 46, 26, 16, 229, 106, 254, 47, 46, 26, 16, 221, 175, - 46, 26, 16, 254, 129, 46, 26, 16, 226, 75, 46, 26, 16, 222, 225, 254, 47, - 46, 26, 16, 222, 225, 233, 239, 223, 149, 46, 26, 16, 230, 61, 254, 47, - 46, 26, 16, 222, 17, 46, 26, 16, 235, 97, 46, 26, 16, 247, 77, 46, 26, - 16, 221, 92, 46, 26, 16, 222, 52, 46, 26, 16, 236, 15, 46, 26, 16, 254, - 89, 246, 90, 232, 131, 46, 26, 16, 245, 93, 254, 47, 46, 26, 16, 237, - 234, 46, 26, 16, 221, 68, 254, 47, 46, 26, 16, 236, 201, 221, 67, 46, 26, - 16, 229, 182, 46, 26, 16, 228, 209, 46, 26, 16, 236, 42, 46, 26, 16, 251, - 6, 254, 47, 46, 26, 16, 227, 232, 46, 26, 16, 229, 238, 254, 47, 46, 26, - 16, 229, 236, 254, 47, 46, 26, 16, 242, 63, 46, 26, 16, 232, 217, 46, 26, - 16, 229, 148, 46, 26, 16, 236, 43, 254, 152, 46, 26, 16, 221, 68, 254, - 152, 46, 26, 16, 223, 132, 46, 26, 16, 244, 25, 46, 26, 16, 237, 144, - 232, 131, 46, 26, 16, 230, 148, 232, 131, 46, 26, 16, 230, 67, 232, 131, - 46, 26, 16, 229, 147, 46, 26, 16, 236, 29, 46, 26, 16, 229, 146, 46, 26, - 16, 236, 14, 46, 26, 16, 229, 183, 232, 131, 46, 26, 16, 236, 165, 232, - 132, 254, 109, 46, 26, 16, 236, 166, 232, 132, 254, 109, 46, 26, 16, 217, - 203, 46, 26, 16, 254, 81, 232, 131, 46, 26, 16, 254, 82, 222, 223, 232, - 131, 46, 26, 16, 217, 204, 46, 26, 16, 236, 13, 46, 26, 16, 246, 216, 46, - 26, 16, 251, 63, 46, 26, 16, 233, 168, 237, 143, 46, 26, 16, 219, 181, - 232, 131, 46, 26, 16, 229, 106, 232, 131, 46, 26, 16, 228, 210, 232, 131, - 46, 26, 16, 230, 145, 46, 26, 16, 254, 100, 46, 26, 16, 234, 195, 46, 26, - 16, 229, 236, 232, 131, 46, 26, 16, 229, 238, 232, 131, 46, 26, 16, 246, - 119, 229, 237, 46, 26, 16, 235, 206, 46, 26, 16, 254, 101, 46, 26, 16, - 221, 68, 232, 131, 46, 26, 16, 246, 219, 46, 26, 16, 222, 225, 232, 131, - 46, 26, 16, 222, 218, 46, 26, 16, 251, 6, 232, 131, 46, 26, 16, 246, 161, - 46, 26, 16, 226, 76, 232, 131, 46, 26, 16, 218, 124, 236, 65, 46, 26, 16, - 221, 65, 46, 26, 16, 228, 211, 46, 26, 16, 221, 69, 46, 26, 16, 221, 66, - 46, 26, 16, 228, 208, 46, 26, 16, 221, 64, 46, 26, 16, 228, 207, 46, 26, - 16, 244, 55, 46, 26, 16, 254, 41, 46, 26, 16, 246, 119, 254, 41, 46, 26, - 16, 230, 61, 232, 131, 46, 26, 16, 222, 16, 246, 127, 46, 26, 16, 222, - 16, 246, 89, 46, 26, 16, 222, 18, 254, 85, 46, 26, 16, 222, 11, 236, 244, - 254, 77, 46, 26, 16, 236, 200, 46, 26, 16, 246, 186, 46, 26, 16, 217, - 253, 236, 197, 46, 26, 16, 217, 253, 254, 109, 46, 26, 16, 223, 150, 46, - 26, 16, 236, 66, 254, 109, 46, 26, 16, 248, 215, 254, 47, 46, 26, 16, - 236, 16, 254, 47, 46, 26, 16, 236, 16, 254, 152, 46, 26, 16, 236, 16, - 232, 131, 46, 26, 16, 254, 84, 232, 131, 46, 26, 16, 254, 86, 46, 26, 16, - 248, 214, 46, 26, 16, 221, 77, 46, 26, 16, 222, 44, 46, 26, 16, 236, 33, - 46, 26, 16, 235, 102, 246, 182, 250, 255, 46, 26, 16, 235, 102, 247, 78, - 251, 0, 46, 26, 16, 235, 102, 221, 79, 251, 0, 46, 26, 16, 235, 102, 222, - 54, 251, 0, 46, 26, 16, 235, 102, 237, 229, 250, 255, 46, 26, 16, 244, - 56, 232, 132, 254, 109, 46, 26, 16, 244, 56, 229, 227, 254, 37, 46, 26, - 16, 244, 56, 229, 227, 249, 40, 46, 26, 16, 248, 238, 46, 26, 16, 248, - 239, 229, 227, 254, 38, 236, 197, 46, 26, 16, 248, 239, 229, 227, 254, - 38, 254, 109, 46, 26, 16, 248, 239, 229, 227, 249, 40, 46, 26, 16, 221, - 83, 46, 26, 16, 254, 42, 46, 26, 16, 237, 236, 46, 26, 16, 249, 3, 46, - 26, 16, 254, 204, 229, 23, 254, 43, 46, 26, 16, 254, 204, 254, 40, 46, - 26, 16, 254, 204, 254, 43, 46, 26, 16, 254, 204, 233, 234, 46, 26, 16, - 254, 204, 233, 242, 46, 26, 16, 254, 204, 244, 57, 46, 26, 16, 254, 204, - 244, 54, 46, 26, 16, 254, 204, 229, 23, 244, 57, 46, 26, 16, 234, 60, - 228, 216, 242, 61, 46, 26, 16, 234, 60, 254, 154, 228, 216, 242, 61, 46, - 26, 16, 234, 60, 249, 39, 242, 61, 46, 26, 16, 234, 60, 254, 154, 249, - 39, 242, 61, 46, 26, 16, 234, 60, 221, 72, 242, 61, 46, 26, 16, 234, 60, - 221, 84, 46, 26, 16, 234, 60, 222, 48, 242, 61, 46, 26, 16, 234, 60, 222, - 48, 235, 105, 242, 61, 46, 26, 16, 234, 60, 235, 105, 242, 61, 46, 26, - 16, 234, 60, 229, 55, 242, 61, 46, 26, 16, 237, 149, 222, 69, 242, 62, - 46, 26, 16, 254, 82, 222, 69, 242, 62, 46, 26, 16, 245, 244, 222, 45, 46, - 26, 16, 245, 244, 233, 126, 46, 26, 16, 245, 244, 248, 243, 46, 26, 16, - 234, 60, 219, 175, 242, 61, 46, 26, 16, 234, 60, 228, 215, 242, 61, 46, - 26, 16, 234, 60, 229, 55, 222, 48, 242, 61, 46, 26, 16, 244, 52, 233, 34, - 254, 85, 46, 26, 16, 244, 52, 233, 34, 248, 213, 46, 26, 16, 246, 195, - 236, 244, 245, 93, 219, 61, 46, 26, 16, 237, 235, 46, 26, 16, 237, 233, - 46, 26, 16, 245, 93, 254, 48, 249, 38, 242, 60, 46, 26, 16, 245, 93, 249, - 1, 187, 46, 26, 16, 245, 93, 249, 1, 232, 217, 46, 26, 16, 245, 93, 232, - 213, 242, 61, 46, 26, 16, 245, 93, 249, 1, 249, 15, 46, 26, 16, 245, 93, - 224, 61, 249, 0, 249, 15, 46, 26, 16, 245, 93, 249, 1, 236, 184, 46, 26, - 16, 245, 93, 249, 1, 217, 21, 46, 26, 16, 245, 93, 249, 1, 232, 63, 236, - 197, 46, 26, 16, 245, 93, 249, 1, 232, 63, 254, 109, 46, 26, 16, 245, 93, - 234, 91, 251, 1, 248, 243, 46, 26, 16, 245, 93, 234, 91, 251, 1, 233, - 126, 46, 26, 16, 245, 204, 224, 61, 251, 1, 219, 174, 46, 26, 16, 245, - 93, 224, 61, 251, 1, 222, 226, 46, 26, 16, 245, 93, 232, 133, 46, 26, 16, - 251, 2, 216, 253, 46, 26, 16, 251, 2, 236, 64, 46, 26, 16, 251, 2, 223, - 250, 46, 26, 16, 245, 93, 242, 107, 217, 252, 222, 49, 46, 26, 16, 245, - 93, 246, 196, 254, 102, 46, 26, 16, 217, 252, 221, 73, 46, 26, 16, 248, - 251, 221, 73, 46, 26, 16, 248, 251, 222, 49, 46, 26, 16, 248, 251, 254, - 87, 247, 78, 248, 161, 46, 26, 16, 248, 251, 233, 124, 222, 53, 248, 161, - 46, 26, 16, 248, 251, 248, 235, 246, 99, 248, 161, 46, 26, 16, 248, 251, - 221, 81, 230, 152, 248, 161, 46, 26, 16, 217, 252, 254, 87, 247, 78, 248, - 161, 46, 26, 16, 217, 252, 233, 124, 222, 53, 248, 161, 46, 26, 16, 217, - 252, 248, 235, 246, 99, 248, 161, 46, 26, 16, 217, 252, 221, 81, 230, - 152, 248, 161, 46, 26, 16, 244, 179, 248, 250, 46, 26, 16, 244, 179, 217, - 251, 46, 26, 16, 249, 2, 254, 87, 233, 169, 46, 26, 16, 249, 2, 254, 87, - 234, 8, 46, 26, 16, 249, 2, 248, 214, 46, 26, 16, 249, 2, 222, 9, 46, 26, - 16, 224, 117, 222, 9, 46, 26, 16, 224, 117, 222, 10, 248, 201, 46, 26, - 16, 224, 117, 222, 10, 221, 74, 46, 26, 16, 224, 117, 222, 10, 222, 42, - 46, 26, 16, 224, 117, 254, 17, 46, 26, 16, 224, 117, 254, 18, 248, 201, - 46, 26, 16, 224, 117, 254, 18, 221, 74, 46, 26, 16, 224, 117, 254, 18, - 222, 42, 46, 26, 16, 248, 236, 244, 161, 46, 26, 16, 248, 242, 230, 86, - 46, 26, 16, 223, 144, 46, 26, 16, 254, 34, 187, 46, 26, 16, 254, 34, 219, - 61, 46, 26, 16, 254, 34, 245, 0, 46, 26, 16, 254, 34, 249, 15, 46, 26, - 16, 254, 34, 236, 184, 46, 26, 16, 254, 34, 217, 21, 46, 26, 16, 254, 34, - 232, 62, 46, 26, 16, 236, 165, 232, 132, 233, 241, 46, 26, 16, 236, 166, - 232, 132, 233, 241, 46, 26, 16, 236, 165, 232, 132, 236, 197, 46, 26, 16, - 236, 166, 232, 132, 236, 197, 46, 26, 16, 236, 66, 236, 197, 46, 26, 16, - 244, 56, 232, 132, 236, 197, 26, 16, 224, 109, 252, 197, 26, 16, 51, 252, - 197, 26, 16, 39, 252, 197, 26, 16, 227, 160, 39, 252, 197, 26, 16, 249, - 145, 252, 197, 26, 16, 224, 192, 252, 197, 26, 16, 42, 227, 182, 55, 26, - 16, 45, 227, 182, 55, 26, 16, 227, 182, 248, 143, 26, 16, 249, 184, 226, - 79, 26, 16, 249, 208, 251, 141, 26, 16, 226, 79, 26, 16, 250, 180, 26, - 16, 227, 180, 245, 193, 26, 16, 227, 180, 245, 192, 26, 16, 227, 180, - 245, 191, 26, 16, 245, 210, 26, 16, 245, 211, 56, 26, 16, 252, 10, 78, - 26, 16, 251, 163, 26, 16, 252, 19, 26, 16, 115, 26, 16, 230, 136, 223, - 163, 26, 16, 220, 205, 223, 163, 26, 16, 221, 227, 223, 163, 26, 16, 245, - 115, 223, 163, 26, 16, 245, 169, 223, 163, 26, 16, 224, 81, 223, 163, 26, - 16, 224, 79, 245, 101, 26, 16, 245, 113, 245, 101, 26, 16, 245, 68, 250, - 207, 26, 16, 245, 68, 250, 208, 230, 88, 254, 145, 26, 16, 245, 68, 250, - 208, 230, 88, 252, 185, 26, 16, 251, 203, 250, 207, 26, 16, 246, 75, 250, - 207, 26, 16, 246, 75, 250, 208, 230, 88, 254, 145, 26, 16, 246, 75, 250, - 208, 230, 88, 252, 185, 26, 16, 247, 116, 250, 206, 26, 16, 247, 116, - 250, 205, 26, 16, 233, 85, 234, 24, 227, 168, 26, 16, 51, 225, 0, 26, 16, - 51, 245, 156, 26, 16, 245, 157, 220, 63, 26, 16, 245, 157, 247, 132, 26, - 16, 232, 205, 220, 63, 26, 16, 232, 205, 247, 132, 26, 16, 225, 1, 220, - 63, 26, 16, 225, 1, 247, 132, 26, 16, 228, 90, 145, 225, 0, 26, 16, 228, - 90, 145, 245, 156, 26, 16, 250, 166, 221, 177, 26, 16, 250, 69, 221, 177, - 26, 16, 230, 88, 254, 145, 26, 16, 230, 88, 252, 185, 26, 16, 228, 74, - 254, 145, 26, 16, 228, 74, 252, 185, 26, 16, 233, 88, 227, 168, 26, 16, - 218, 205, 227, 168, 26, 16, 144, 227, 168, 26, 16, 228, 90, 227, 168, 26, - 16, 246, 232, 227, 168, 26, 16, 224, 76, 227, 168, 26, 16, 221, 243, 227, - 168, 26, 16, 224, 68, 227, 168, 26, 16, 131, 242, 162, 220, 217, 227, - 168, 26, 16, 218, 152, 231, 178, 26, 16, 88, 231, 178, 26, 16, 250, 222, - 218, 152, 231, 178, 26, 16, 40, 231, 179, 218, 207, 26, 16, 40, 231, 179, - 252, 53, 26, 16, 221, 91, 231, 179, 108, 218, 207, 26, 16, 221, 91, 231, - 179, 108, 252, 53, 26, 16, 221, 91, 231, 179, 42, 218, 207, 26, 16, 221, - 91, 231, 179, 42, 252, 53, 26, 16, 221, 91, 231, 179, 45, 218, 207, 26, - 16, 221, 91, 231, 179, 45, 252, 53, 26, 16, 221, 91, 231, 179, 113, 218, - 207, 26, 16, 221, 91, 231, 179, 113, 252, 53, 26, 16, 221, 91, 231, 179, - 108, 45, 218, 207, 26, 16, 221, 91, 231, 179, 108, 45, 252, 53, 26, 16, - 233, 118, 231, 179, 218, 207, 26, 16, 233, 118, 231, 179, 252, 53, 26, - 16, 221, 88, 231, 179, 113, 218, 207, 26, 16, 221, 88, 231, 179, 113, - 252, 53, 26, 16, 229, 230, 231, 178, 26, 16, 219, 67, 231, 178, 26, 16, - 231, 179, 252, 53, 26, 16, 231, 111, 231, 178, 26, 16, 250, 185, 231, - 179, 218, 207, 26, 16, 250, 185, 231, 179, 252, 53, 26, 16, 252, 8, 26, - 16, 218, 205, 231, 180, 26, 16, 144, 231, 180, 26, 16, 228, 90, 231, 180, - 26, 16, 246, 232, 231, 180, 26, 16, 224, 76, 231, 180, 26, 16, 221, 243, - 231, 180, 26, 16, 224, 68, 231, 180, 26, 16, 131, 242, 162, 220, 217, - 231, 180, 26, 16, 36, 223, 146, 26, 16, 36, 223, 233, 223, 146, 26, 16, - 36, 221, 97, 26, 16, 36, 221, 96, 26, 16, 36, 221, 95, 26, 16, 245, 183, - 221, 97, 26, 16, 245, 183, 221, 96, 26, 16, 245, 183, 221, 95, 26, 16, - 36, 253, 230, 248, 145, 26, 16, 36, 245, 162, 26, 16, 36, 245, 161, 26, - 16, 36, 245, 160, 26, 16, 36, 245, 159, 26, 16, 36, 245, 158, 26, 16, - 252, 131, 252, 143, 26, 16, 246, 190, 252, 143, 26, 16, 252, 131, 221, - 200, 26, 16, 246, 190, 221, 200, 26, 16, 252, 131, 224, 44, 26, 16, 246, - 190, 224, 44, 26, 16, 252, 131, 229, 115, 26, 16, 246, 190, 229, 115, 26, - 16, 36, 255, 0, 26, 16, 36, 223, 165, 26, 16, 36, 222, 58, 26, 16, 36, - 223, 166, 26, 16, 36, 234, 71, 26, 16, 36, 234, 70, 26, 16, 36, 254, 255, - 26, 16, 36, 234, 240, 26, 16, 254, 25, 220, 63, 26, 16, 254, 25, 247, - 132, 26, 16, 36, 248, 158, 26, 16, 36, 227, 91, 26, 16, 36, 245, 150, 26, - 16, 36, 224, 40, 26, 16, 36, 252, 113, 26, 16, 36, 51, 221, 124, 26, 16, - 36, 221, 78, 221, 124, 26, 16, 227, 95, 26, 16, 223, 99, 26, 16, 217, - 157, 26, 16, 229, 107, 26, 16, 233, 231, 26, 16, 245, 121, 26, 16, 250, - 106, 26, 16, 249, 83, 26, 16, 244, 47, 231, 181, 224, 55, 26, 16, 244, - 47, 231, 181, 231, 205, 224, 55, 26, 16, 221, 109, 26, 16, 220, 237, 26, - 16, 237, 170, 220, 237, 26, 16, 220, 238, 224, 55, 26, 16, 220, 238, 220, - 63, 26, 16, 230, 99, 223, 119, 26, 16, 230, 99, 223, 116, 26, 16, 230, - 99, 223, 115, 26, 16, 230, 99, 223, 114, 26, 16, 230, 99, 223, 113, 26, - 16, 230, 99, 223, 112, 26, 16, 230, 99, 223, 111, 26, 16, 230, 99, 223, - 110, 26, 16, 230, 99, 223, 109, 26, 16, 230, 99, 223, 118, 26, 16, 230, - 99, 223, 117, 26, 16, 243, 169, 26, 16, 232, 140, 26, 16, 246, 190, 117, - 223, 140, 26, 16, 249, 77, 224, 55, 26, 16, 36, 113, 252, 24, 26, 16, 36, - 108, 252, 24, 26, 16, 36, 243, 178, 26, 16, 36, 224, 34, 229, 59, 26, 16, - 229, 195, 78, 26, 16, 229, 195, 108, 78, 26, 16, 144, 229, 195, 78, 26, - 16, 244, 74, 220, 63, 26, 16, 244, 74, 247, 132, 26, 16, 2, 245, 182, 26, - 16, 249, 168, 26, 16, 249, 169, 254, 157, 26, 16, 234, 46, 26, 16, 234, - 250, 26, 16, 252, 5, 26, 16, 225, 71, 218, 207, 26, 16, 225, 71, 252, 53, - 26, 16, 233, 157, 26, 16, 233, 158, 252, 53, 26, 16, 225, 65, 218, 207, - 26, 16, 225, 65, 252, 53, 26, 16, 245, 82, 218, 207, 26, 16, 245, 82, - 252, 53, 26, 16, 234, 251, 229, 167, 227, 168, 26, 16, 234, 251, 237, - 228, 227, 168, 26, 16, 252, 6, 227, 168, 26, 16, 225, 71, 227, 168, 26, - 16, 233, 158, 227, 168, 26, 16, 225, 65, 227, 168, 26, 16, 222, 67, 229, - 165, 250, 87, 228, 224, 229, 166, 26, 16, 222, 67, 229, 165, 250, 87, - 228, 224, 237, 227, 26, 16, 222, 67, 229, 165, 250, 87, 228, 224, 229, - 167, 248, 224, 26, 16, 222, 67, 237, 226, 250, 87, 228, 224, 229, 166, - 26, 16, 222, 67, 237, 226, 250, 87, 228, 224, 237, 227, 26, 16, 222, 67, - 237, 226, 250, 87, 228, 224, 237, 228, 248, 224, 26, 16, 222, 67, 237, - 226, 250, 87, 228, 224, 237, 228, 248, 223, 26, 16, 222, 67, 237, 226, - 250, 87, 228, 224, 237, 228, 248, 222, 26, 16, 250, 103, 26, 16, 244, 26, - 251, 203, 250, 207, 26, 16, 244, 26, 246, 75, 250, 207, 26, 16, 40, 253, - 204, 26, 16, 219, 81, 26, 16, 229, 35, 26, 16, 250, 200, 26, 16, 226, - 110, 26, 16, 250, 202, 26, 16, 221, 115, 26, 16, 229, 17, 26, 16, 229, - 18, 245, 152, 26, 16, 226, 111, 245, 152, 26, 16, 221, 116, 227, 166, 26, - 16, 229, 154, 223, 95, 23, 219, 71, 165, 223, 18, 23, 219, 71, 165, 223, - 7, 23, 219, 71, 165, 222, 253, 23, 219, 71, 165, 222, 246, 23, 219, 71, - 165, 222, 238, 23, 219, 71, 165, 222, 232, 23, 219, 71, 165, 222, 231, - 23, 219, 71, 165, 222, 230, 23, 219, 71, 165, 222, 229, 23, 219, 71, 165, - 223, 17, 23, 219, 71, 165, 223, 16, 23, 219, 71, 165, 223, 15, 23, 219, - 71, 165, 223, 14, 23, 219, 71, 165, 223, 13, 23, 219, 71, 165, 223, 12, - 23, 219, 71, 165, 223, 11, 23, 219, 71, 165, 223, 10, 23, 219, 71, 165, - 223, 9, 23, 219, 71, 165, 223, 8, 23, 219, 71, 165, 223, 6, 23, 219, 71, - 165, 223, 5, 23, 219, 71, 165, 223, 4, 23, 219, 71, 165, 223, 3, 23, 219, - 71, 165, 223, 2, 23, 219, 71, 165, 222, 237, 23, 219, 71, 165, 222, 236, - 23, 219, 71, 165, 222, 235, 23, 219, 71, 165, 222, 234, 23, 219, 71, 165, - 222, 233, 23, 237, 189, 165, 223, 18, 23, 237, 189, 165, 223, 7, 23, 237, - 189, 165, 222, 246, 23, 237, 189, 165, 222, 238, 23, 237, 189, 165, 222, - 231, 23, 237, 189, 165, 222, 230, 23, 237, 189, 165, 223, 16, 23, 237, - 189, 165, 223, 15, 23, 237, 189, 165, 223, 14, 23, 237, 189, 165, 223, - 13, 23, 237, 189, 165, 223, 10, 23, 237, 189, 165, 223, 9, 23, 237, 189, - 165, 223, 8, 23, 237, 189, 165, 223, 3, 23, 237, 189, 165, 223, 2, 23, - 237, 189, 165, 223, 1, 23, 237, 189, 165, 223, 0, 23, 237, 189, 165, 222, - 255, 23, 237, 189, 165, 222, 254, 23, 237, 189, 165, 222, 252, 23, 237, - 189, 165, 222, 251, 23, 237, 189, 165, 222, 250, 23, 237, 189, 165, 222, - 249, 23, 237, 189, 165, 222, 248, 23, 237, 189, 165, 222, 247, 23, 237, - 189, 165, 222, 245, 23, 237, 189, 165, 222, 244, 23, 237, 189, 165, 222, - 243, 23, 237, 189, 165, 222, 242, 23, 237, 189, 165, 222, 241, 23, 237, - 189, 165, 222, 240, 23, 237, 189, 165, 222, 239, 23, 237, 189, 165, 222, - 237, 23, 237, 189, 165, 222, 236, 23, 237, 189, 165, 222, 235, 23, 237, - 189, 165, 222, 234, 23, 237, 189, 165, 222, 233, 36, 23, 26, 221, 75, 36, - 23, 26, 222, 43, 36, 23, 26, 229, 174, 23, 26, 235, 101, 233, 125, 35, - 247, 8, 248, 237, 35, 243, 150, 247, 8, 248, 237, 35, 242, 165, 247, 8, - 248, 237, 35, 247, 7, 243, 151, 248, 237, 35, 247, 7, 242, 164, 248, 237, - 35, 247, 8, 159, 35, 251, 84, 159, 35, 245, 90, 250, 221, 159, 35, 233, - 150, 159, 35, 252, 192, 159, 35, 236, 181, 224, 43, 159, 35, 250, 133, - 159, 35, 254, 9, 159, 35, 230, 109, 159, 35, 252, 13, 230, 83, 159, 35, - 249, 79, 156, 248, 198, 159, 35, 248, 195, 159, 35, 217, 210, 159, 35, - 237, 217, 159, 35, 229, 180, 159, 35, 227, 215, 159, 35, 250, 143, 159, - 35, 242, 253, 252, 233, 159, 35, 219, 1, 159, 35, 245, 138, 159, 35, 254, - 236, 159, 35, 227, 190, 159, 35, 227, 172, 159, 35, 247, 6, 159, 35, 237, - 45, 159, 35, 250, 138, 159, 35, 246, 189, 159, 35, 247, 87, 159, 35, 251, - 58, 159, 35, 249, 85, 159, 35, 21, 227, 171, 159, 35, 230, 38, 159, 35, - 235, 104, 159, 35, 250, 195, 159, 35, 236, 101, 159, 35, 244, 211, 159, - 35, 223, 126, 159, 35, 228, 189, 159, 35, 245, 89, 159, 35, 227, 173, - 159, 35, 235, 134, 156, 233, 134, 159, 35, 227, 169, 159, 35, 244, 64, - 199, 234, 12, 159, 35, 246, 191, 159, 35, 223, 133, 159, 35, 244, 28, - 159, 35, 246, 184, 159, 35, 229, 210, 159, 35, 227, 85, 159, 35, 245, - 151, 159, 35, 219, 173, 156, 218, 244, 159, 35, 250, 146, 159, 35, 234, - 23, 159, 35, 246, 120, 159, 35, 220, 71, 159, 35, 248, 225, 159, 35, 250, - 197, 233, 105, 159, 35, 244, 13, 159, 35, 244, 212, 237, 223, 159, 35, - 234, 53, 159, 35, 254, 253, 159, 35, 246, 203, 159, 35, 247, 134, 159, - 35, 218, 242, 159, 35, 224, 106, 159, 35, 237, 196, 159, 35, 249, 51, - 159, 35, 249, 150, 159, 35, 248, 221, 159, 35, 246, 93, 159, 35, 225, 37, - 159, 35, 223, 135, 159, 35, 243, 180, 159, 35, 250, 162, 159, 35, 250, - 193, 159, 35, 245, 248, 159, 35, 254, 205, 159, 35, 250, 161, 159, 35, - 230, 139, 222, 23, 219, 155, 159, 35, 248, 245, 159, 35, 235, 180, 159, - 35, 245, 118, 250, 112, 227, 69, 220, 73, 20, 107, 250, 112, 227, 69, - 220, 73, 20, 103, 250, 112, 227, 69, 220, 73, 20, 160, 250, 112, 227, 69, - 220, 73, 20, 154, 250, 112, 227, 69, 220, 73, 20, 174, 250, 112, 227, 69, - 220, 73, 20, 182, 250, 112, 227, 69, 220, 73, 20, 191, 250, 112, 227, 69, - 220, 73, 20, 185, 250, 112, 227, 69, 220, 73, 20, 190, 250, 112, 227, 69, - 222, 63, 20, 107, 250, 112, 227, 69, 222, 63, 20, 103, 250, 112, 227, 69, - 222, 63, 20, 160, 250, 112, 227, 69, 222, 63, 20, 154, 250, 112, 227, 69, - 222, 63, 20, 174, 250, 112, 227, 69, 222, 63, 20, 182, 250, 112, 227, 69, - 222, 63, 20, 191, 250, 112, 227, 69, 222, 63, 20, 185, 250, 112, 227, 69, - 222, 63, 20, 190, 14, 21, 6, 60, 14, 21, 6, 253, 204, 14, 21, 6, 251, - 202, 14, 21, 6, 250, 46, 14, 21, 6, 73, 14, 21, 6, 246, 74, 14, 21, 6, - 245, 67, 14, 21, 6, 243, 225, 14, 21, 6, 72, 14, 21, 6, 237, 126, 14, 21, - 6, 237, 17, 14, 21, 6, 153, 14, 21, 6, 189, 14, 21, 6, 207, 14, 21, 6, - 74, 14, 21, 6, 230, 59, 14, 21, 6, 228, 163, 14, 21, 6, 152, 14, 21, 6, - 198, 14, 21, 6, 222, 201, 14, 21, 6, 68, 14, 21, 6, 216, 216, 14, 21, 6, - 219, 40, 14, 21, 6, 218, 151, 14, 21, 6, 218, 90, 14, 21, 6, 217, 157, - 14, 21, 3, 60, 14, 21, 3, 253, 204, 14, 21, 3, 251, 202, 14, 21, 3, 250, - 46, 14, 21, 3, 73, 14, 21, 3, 246, 74, 14, 21, 3, 245, 67, 14, 21, 3, - 243, 225, 14, 21, 3, 72, 14, 21, 3, 237, 126, 14, 21, 3, 237, 17, 14, 21, - 3, 153, 14, 21, 3, 189, 14, 21, 3, 207, 14, 21, 3, 74, 14, 21, 3, 230, - 59, 14, 21, 3, 228, 163, 14, 21, 3, 152, 14, 21, 3, 198, 14, 21, 3, 222, - 201, 14, 21, 3, 68, 14, 21, 3, 216, 216, 14, 21, 3, 219, 40, 14, 21, 3, - 218, 151, 14, 21, 3, 218, 90, 14, 21, 3, 217, 157, 14, 30, 6, 60, 14, 30, - 6, 253, 204, 14, 30, 6, 251, 202, 14, 30, 6, 250, 46, 14, 30, 6, 73, 14, - 30, 6, 246, 74, 14, 30, 6, 245, 67, 14, 30, 6, 243, 225, 14, 30, 6, 72, - 14, 30, 6, 237, 126, 14, 30, 6, 237, 17, 14, 30, 6, 153, 14, 30, 6, 189, - 14, 30, 6, 207, 14, 30, 6, 74, 14, 30, 6, 230, 59, 14, 30, 6, 228, 163, - 14, 30, 6, 152, 14, 30, 6, 198, 14, 30, 6, 222, 201, 14, 30, 6, 68, 14, - 30, 6, 216, 216, 14, 30, 6, 219, 40, 14, 30, 6, 218, 151, 14, 30, 6, 218, - 90, 14, 30, 6, 217, 157, 14, 30, 3, 60, 14, 30, 3, 253, 204, 14, 30, 3, - 251, 202, 14, 30, 3, 250, 46, 14, 30, 3, 73, 14, 30, 3, 246, 74, 14, 30, - 3, 245, 67, 14, 30, 3, 72, 14, 30, 3, 237, 126, 14, 30, 3, 237, 17, 14, - 30, 3, 153, 14, 30, 3, 189, 14, 30, 3, 207, 14, 30, 3, 74, 14, 30, 3, - 230, 59, 14, 30, 3, 228, 163, 14, 30, 3, 152, 14, 30, 3, 198, 14, 30, 3, - 222, 201, 14, 30, 3, 68, 14, 30, 3, 216, 216, 14, 30, 3, 219, 40, 14, 30, - 3, 218, 151, 14, 30, 3, 218, 90, 14, 30, 3, 217, 157, 14, 21, 30, 6, 60, - 14, 21, 30, 6, 253, 204, 14, 21, 30, 6, 251, 202, 14, 21, 30, 6, 250, 46, - 14, 21, 30, 6, 73, 14, 21, 30, 6, 246, 74, 14, 21, 30, 6, 245, 67, 14, - 21, 30, 6, 243, 225, 14, 21, 30, 6, 72, 14, 21, 30, 6, 237, 126, 14, 21, - 30, 6, 237, 17, 14, 21, 30, 6, 153, 14, 21, 30, 6, 189, 14, 21, 30, 6, - 207, 14, 21, 30, 6, 74, 14, 21, 30, 6, 230, 59, 14, 21, 30, 6, 228, 163, - 14, 21, 30, 6, 152, 14, 21, 30, 6, 198, 14, 21, 30, 6, 222, 201, 14, 21, - 30, 6, 68, 14, 21, 30, 6, 216, 216, 14, 21, 30, 6, 219, 40, 14, 21, 30, - 6, 218, 151, 14, 21, 30, 6, 218, 90, 14, 21, 30, 6, 217, 157, 14, 21, 30, - 3, 60, 14, 21, 30, 3, 253, 204, 14, 21, 30, 3, 251, 202, 14, 21, 30, 3, - 250, 46, 14, 21, 30, 3, 73, 14, 21, 30, 3, 246, 74, 14, 21, 30, 3, 245, - 67, 14, 21, 30, 3, 243, 225, 14, 21, 30, 3, 72, 14, 21, 30, 3, 237, 126, - 14, 21, 30, 3, 237, 17, 14, 21, 30, 3, 153, 14, 21, 30, 3, 189, 14, 21, - 30, 3, 207, 14, 21, 30, 3, 74, 14, 21, 30, 3, 230, 59, 14, 21, 30, 3, - 228, 163, 14, 21, 30, 3, 152, 14, 21, 30, 3, 198, 14, 21, 30, 3, 222, - 201, 14, 21, 30, 3, 68, 14, 21, 30, 3, 216, 216, 14, 21, 30, 3, 219, 40, - 14, 21, 30, 3, 218, 151, 14, 21, 30, 3, 218, 90, 14, 21, 30, 3, 217, 157, - 14, 102, 6, 60, 14, 102, 6, 251, 202, 14, 102, 6, 250, 46, 14, 102, 6, - 245, 67, 14, 102, 6, 237, 126, 14, 102, 6, 237, 17, 14, 102, 6, 207, 14, - 102, 6, 74, 14, 102, 6, 230, 59, 14, 102, 6, 228, 163, 14, 102, 6, 198, - 14, 102, 6, 222, 201, 14, 102, 6, 68, 14, 102, 6, 216, 216, 14, 102, 6, - 219, 40, 14, 102, 6, 218, 151, 14, 102, 6, 218, 90, 14, 102, 6, 217, 157, - 14, 102, 3, 60, 14, 102, 3, 253, 204, 14, 102, 3, 251, 202, 14, 102, 3, - 250, 46, 14, 102, 3, 246, 74, 14, 102, 3, 243, 225, 14, 102, 3, 72, 14, - 102, 3, 237, 126, 14, 102, 3, 237, 17, 14, 102, 3, 153, 14, 102, 3, 189, - 14, 102, 3, 207, 14, 102, 3, 230, 59, 14, 102, 3, 228, 163, 14, 102, 3, - 152, 14, 102, 3, 198, 14, 102, 3, 222, 201, 14, 102, 3, 68, 14, 102, 3, - 216, 216, 14, 102, 3, 219, 40, 14, 102, 3, 218, 151, 14, 102, 3, 218, 90, - 14, 102, 3, 217, 157, 14, 21, 102, 6, 60, 14, 21, 102, 6, 253, 204, 14, - 21, 102, 6, 251, 202, 14, 21, 102, 6, 250, 46, 14, 21, 102, 6, 73, 14, - 21, 102, 6, 246, 74, 14, 21, 102, 6, 245, 67, 14, 21, 102, 6, 243, 225, - 14, 21, 102, 6, 72, 14, 21, 102, 6, 237, 126, 14, 21, 102, 6, 237, 17, - 14, 21, 102, 6, 153, 14, 21, 102, 6, 189, 14, 21, 102, 6, 207, 14, 21, - 102, 6, 74, 14, 21, 102, 6, 230, 59, 14, 21, 102, 6, 228, 163, 14, 21, - 102, 6, 152, 14, 21, 102, 6, 198, 14, 21, 102, 6, 222, 201, 14, 21, 102, - 6, 68, 14, 21, 102, 6, 216, 216, 14, 21, 102, 6, 219, 40, 14, 21, 102, 6, - 218, 151, 14, 21, 102, 6, 218, 90, 14, 21, 102, 6, 217, 157, 14, 21, 102, - 3, 60, 14, 21, 102, 3, 253, 204, 14, 21, 102, 3, 251, 202, 14, 21, 102, - 3, 250, 46, 14, 21, 102, 3, 73, 14, 21, 102, 3, 246, 74, 14, 21, 102, 3, - 245, 67, 14, 21, 102, 3, 243, 225, 14, 21, 102, 3, 72, 14, 21, 102, 3, - 237, 126, 14, 21, 102, 3, 237, 17, 14, 21, 102, 3, 153, 14, 21, 102, 3, - 189, 14, 21, 102, 3, 207, 14, 21, 102, 3, 74, 14, 21, 102, 3, 230, 59, - 14, 21, 102, 3, 228, 163, 14, 21, 102, 3, 152, 14, 21, 102, 3, 198, 14, - 21, 102, 3, 222, 201, 14, 21, 102, 3, 68, 14, 21, 102, 3, 216, 216, 14, - 21, 102, 3, 219, 40, 14, 21, 102, 3, 218, 151, 14, 21, 102, 3, 218, 90, - 14, 21, 102, 3, 217, 157, 14, 121, 6, 60, 14, 121, 6, 253, 204, 14, 121, - 6, 250, 46, 14, 121, 6, 73, 14, 121, 6, 246, 74, 14, 121, 6, 245, 67, 14, - 121, 6, 237, 126, 14, 121, 6, 237, 17, 14, 121, 6, 153, 14, 121, 6, 189, - 14, 121, 6, 207, 14, 121, 6, 74, 14, 121, 6, 230, 59, 14, 121, 6, 228, - 163, 14, 121, 6, 198, 14, 121, 6, 222, 201, 14, 121, 6, 68, 14, 121, 6, - 216, 216, 14, 121, 6, 219, 40, 14, 121, 6, 218, 151, 14, 121, 6, 218, 90, - 14, 121, 3, 60, 14, 121, 3, 253, 204, 14, 121, 3, 251, 202, 14, 121, 3, - 250, 46, 14, 121, 3, 73, 14, 121, 3, 246, 74, 14, 121, 3, 245, 67, 14, - 121, 3, 243, 225, 14, 121, 3, 72, 14, 121, 3, 237, 126, 14, 121, 3, 237, - 17, 14, 121, 3, 153, 14, 121, 3, 189, 14, 121, 3, 207, 14, 121, 3, 74, - 14, 121, 3, 230, 59, 14, 121, 3, 228, 163, 14, 121, 3, 152, 14, 121, 3, - 198, 14, 121, 3, 222, 201, 14, 121, 3, 68, 14, 121, 3, 216, 216, 14, 121, - 3, 219, 40, 14, 121, 3, 218, 151, 14, 121, 3, 218, 90, 14, 121, 3, 217, - 157, 14, 173, 6, 60, 14, 173, 6, 253, 204, 14, 173, 6, 250, 46, 14, 173, - 6, 73, 14, 173, 6, 246, 74, 14, 173, 6, 245, 67, 14, 173, 6, 72, 14, 173, - 6, 237, 126, 14, 173, 6, 237, 17, 14, 173, 6, 153, 14, 173, 6, 189, 14, - 173, 6, 74, 14, 173, 6, 198, 14, 173, 6, 222, 201, 14, 173, 6, 68, 14, - 173, 6, 216, 216, 14, 173, 6, 219, 40, 14, 173, 6, 218, 151, 14, 173, 6, - 218, 90, 14, 173, 3, 60, 14, 173, 3, 253, 204, 14, 173, 3, 251, 202, 14, - 173, 3, 250, 46, 14, 173, 3, 73, 14, 173, 3, 246, 74, 14, 173, 3, 245, - 67, 14, 173, 3, 243, 225, 14, 173, 3, 72, 14, 173, 3, 237, 126, 14, 173, - 3, 237, 17, 14, 173, 3, 153, 14, 173, 3, 189, 14, 173, 3, 207, 14, 173, - 3, 74, 14, 173, 3, 230, 59, 14, 173, 3, 228, 163, 14, 173, 3, 152, 14, - 173, 3, 198, 14, 173, 3, 222, 201, 14, 173, 3, 68, 14, 173, 3, 216, 216, - 14, 173, 3, 219, 40, 14, 173, 3, 218, 151, 14, 173, 3, 218, 90, 14, 173, - 3, 217, 157, 14, 21, 121, 6, 60, 14, 21, 121, 6, 253, 204, 14, 21, 121, - 6, 251, 202, 14, 21, 121, 6, 250, 46, 14, 21, 121, 6, 73, 14, 21, 121, 6, - 246, 74, 14, 21, 121, 6, 245, 67, 14, 21, 121, 6, 243, 225, 14, 21, 121, - 6, 72, 14, 21, 121, 6, 237, 126, 14, 21, 121, 6, 237, 17, 14, 21, 121, 6, - 153, 14, 21, 121, 6, 189, 14, 21, 121, 6, 207, 14, 21, 121, 6, 74, 14, - 21, 121, 6, 230, 59, 14, 21, 121, 6, 228, 163, 14, 21, 121, 6, 152, 14, - 21, 121, 6, 198, 14, 21, 121, 6, 222, 201, 14, 21, 121, 6, 68, 14, 21, - 121, 6, 216, 216, 14, 21, 121, 6, 219, 40, 14, 21, 121, 6, 218, 151, 14, - 21, 121, 6, 218, 90, 14, 21, 121, 6, 217, 157, 14, 21, 121, 3, 60, 14, - 21, 121, 3, 253, 204, 14, 21, 121, 3, 251, 202, 14, 21, 121, 3, 250, 46, - 14, 21, 121, 3, 73, 14, 21, 121, 3, 246, 74, 14, 21, 121, 3, 245, 67, 14, - 21, 121, 3, 243, 225, 14, 21, 121, 3, 72, 14, 21, 121, 3, 237, 126, 14, - 21, 121, 3, 237, 17, 14, 21, 121, 3, 153, 14, 21, 121, 3, 189, 14, 21, - 121, 3, 207, 14, 21, 121, 3, 74, 14, 21, 121, 3, 230, 59, 14, 21, 121, 3, - 228, 163, 14, 21, 121, 3, 152, 14, 21, 121, 3, 198, 14, 21, 121, 3, 222, - 201, 14, 21, 121, 3, 68, 14, 21, 121, 3, 216, 216, 14, 21, 121, 3, 219, - 40, 14, 21, 121, 3, 218, 151, 14, 21, 121, 3, 218, 90, 14, 21, 121, 3, - 217, 157, 14, 33, 6, 60, 14, 33, 6, 253, 204, 14, 33, 6, 251, 202, 14, - 33, 6, 250, 46, 14, 33, 6, 73, 14, 33, 6, 246, 74, 14, 33, 6, 245, 67, - 14, 33, 6, 243, 225, 14, 33, 6, 72, 14, 33, 6, 237, 126, 14, 33, 6, 237, - 17, 14, 33, 6, 153, 14, 33, 6, 189, 14, 33, 6, 207, 14, 33, 6, 74, 14, - 33, 6, 230, 59, 14, 33, 6, 228, 163, 14, 33, 6, 152, 14, 33, 6, 198, 14, - 33, 6, 222, 201, 14, 33, 6, 68, 14, 33, 6, 216, 216, 14, 33, 6, 219, 40, - 14, 33, 6, 218, 151, 14, 33, 6, 218, 90, 14, 33, 6, 217, 157, 14, 33, 3, - 60, 14, 33, 3, 253, 204, 14, 33, 3, 251, 202, 14, 33, 3, 250, 46, 14, 33, - 3, 73, 14, 33, 3, 246, 74, 14, 33, 3, 245, 67, 14, 33, 3, 243, 225, 14, - 33, 3, 72, 14, 33, 3, 237, 126, 14, 33, 3, 237, 17, 14, 33, 3, 153, 14, - 33, 3, 189, 14, 33, 3, 207, 14, 33, 3, 74, 14, 33, 3, 230, 59, 14, 33, 3, - 228, 163, 14, 33, 3, 152, 14, 33, 3, 198, 14, 33, 3, 222, 201, 14, 33, 3, - 68, 14, 33, 3, 216, 216, 14, 33, 3, 219, 40, 14, 33, 3, 218, 151, 14, 33, - 3, 218, 90, 14, 33, 3, 217, 157, 14, 33, 21, 6, 60, 14, 33, 21, 6, 253, - 204, 14, 33, 21, 6, 251, 202, 14, 33, 21, 6, 250, 46, 14, 33, 21, 6, 73, - 14, 33, 21, 6, 246, 74, 14, 33, 21, 6, 245, 67, 14, 33, 21, 6, 243, 225, - 14, 33, 21, 6, 72, 14, 33, 21, 6, 237, 126, 14, 33, 21, 6, 237, 17, 14, - 33, 21, 6, 153, 14, 33, 21, 6, 189, 14, 33, 21, 6, 207, 14, 33, 21, 6, - 74, 14, 33, 21, 6, 230, 59, 14, 33, 21, 6, 228, 163, 14, 33, 21, 6, 152, - 14, 33, 21, 6, 198, 14, 33, 21, 6, 222, 201, 14, 33, 21, 6, 68, 14, 33, - 21, 6, 216, 216, 14, 33, 21, 6, 219, 40, 14, 33, 21, 6, 218, 151, 14, 33, - 21, 6, 218, 90, 14, 33, 21, 6, 217, 157, 14, 33, 21, 3, 60, 14, 33, 21, - 3, 253, 204, 14, 33, 21, 3, 251, 202, 14, 33, 21, 3, 250, 46, 14, 33, 21, - 3, 73, 14, 33, 21, 3, 246, 74, 14, 33, 21, 3, 245, 67, 14, 33, 21, 3, - 243, 225, 14, 33, 21, 3, 72, 14, 33, 21, 3, 237, 126, 14, 33, 21, 3, 237, - 17, 14, 33, 21, 3, 153, 14, 33, 21, 3, 189, 14, 33, 21, 3, 207, 14, 33, - 21, 3, 74, 14, 33, 21, 3, 230, 59, 14, 33, 21, 3, 228, 163, 14, 33, 21, - 3, 152, 14, 33, 21, 3, 198, 14, 33, 21, 3, 222, 201, 14, 33, 21, 3, 68, - 14, 33, 21, 3, 216, 216, 14, 33, 21, 3, 219, 40, 14, 33, 21, 3, 218, 151, - 14, 33, 21, 3, 218, 90, 14, 33, 21, 3, 217, 157, 14, 33, 30, 6, 60, 14, - 33, 30, 6, 253, 204, 14, 33, 30, 6, 251, 202, 14, 33, 30, 6, 250, 46, 14, - 33, 30, 6, 73, 14, 33, 30, 6, 246, 74, 14, 33, 30, 6, 245, 67, 14, 33, - 30, 6, 243, 225, 14, 33, 30, 6, 72, 14, 33, 30, 6, 237, 126, 14, 33, 30, - 6, 237, 17, 14, 33, 30, 6, 153, 14, 33, 30, 6, 189, 14, 33, 30, 6, 207, - 14, 33, 30, 6, 74, 14, 33, 30, 6, 230, 59, 14, 33, 30, 6, 228, 163, 14, - 33, 30, 6, 152, 14, 33, 30, 6, 198, 14, 33, 30, 6, 222, 201, 14, 33, 30, - 6, 68, 14, 33, 30, 6, 216, 216, 14, 33, 30, 6, 219, 40, 14, 33, 30, 6, - 218, 151, 14, 33, 30, 6, 218, 90, 14, 33, 30, 6, 217, 157, 14, 33, 30, 3, - 60, 14, 33, 30, 3, 253, 204, 14, 33, 30, 3, 251, 202, 14, 33, 30, 3, 250, - 46, 14, 33, 30, 3, 73, 14, 33, 30, 3, 246, 74, 14, 33, 30, 3, 245, 67, - 14, 33, 30, 3, 243, 225, 14, 33, 30, 3, 72, 14, 33, 30, 3, 237, 126, 14, - 33, 30, 3, 237, 17, 14, 33, 30, 3, 153, 14, 33, 30, 3, 189, 14, 33, 30, - 3, 207, 14, 33, 30, 3, 74, 14, 33, 30, 3, 230, 59, 14, 33, 30, 3, 228, - 163, 14, 33, 30, 3, 152, 14, 33, 30, 3, 198, 14, 33, 30, 3, 222, 201, 14, - 33, 30, 3, 68, 14, 33, 30, 3, 216, 216, 14, 33, 30, 3, 219, 40, 14, 33, - 30, 3, 218, 151, 14, 33, 30, 3, 218, 90, 14, 33, 30, 3, 217, 157, 14, 33, - 21, 30, 6, 60, 14, 33, 21, 30, 6, 253, 204, 14, 33, 21, 30, 6, 251, 202, - 14, 33, 21, 30, 6, 250, 46, 14, 33, 21, 30, 6, 73, 14, 33, 21, 30, 6, - 246, 74, 14, 33, 21, 30, 6, 245, 67, 14, 33, 21, 30, 6, 243, 225, 14, 33, - 21, 30, 6, 72, 14, 33, 21, 30, 6, 237, 126, 14, 33, 21, 30, 6, 237, 17, - 14, 33, 21, 30, 6, 153, 14, 33, 21, 30, 6, 189, 14, 33, 21, 30, 6, 207, - 14, 33, 21, 30, 6, 74, 14, 33, 21, 30, 6, 230, 59, 14, 33, 21, 30, 6, - 228, 163, 14, 33, 21, 30, 6, 152, 14, 33, 21, 30, 6, 198, 14, 33, 21, 30, - 6, 222, 201, 14, 33, 21, 30, 6, 68, 14, 33, 21, 30, 6, 216, 216, 14, 33, - 21, 30, 6, 219, 40, 14, 33, 21, 30, 6, 218, 151, 14, 33, 21, 30, 6, 218, - 90, 14, 33, 21, 30, 6, 217, 157, 14, 33, 21, 30, 3, 60, 14, 33, 21, 30, - 3, 253, 204, 14, 33, 21, 30, 3, 251, 202, 14, 33, 21, 30, 3, 250, 46, 14, - 33, 21, 30, 3, 73, 14, 33, 21, 30, 3, 246, 74, 14, 33, 21, 30, 3, 245, - 67, 14, 33, 21, 30, 3, 243, 225, 14, 33, 21, 30, 3, 72, 14, 33, 21, 30, - 3, 237, 126, 14, 33, 21, 30, 3, 237, 17, 14, 33, 21, 30, 3, 153, 14, 33, - 21, 30, 3, 189, 14, 33, 21, 30, 3, 207, 14, 33, 21, 30, 3, 74, 14, 33, - 21, 30, 3, 230, 59, 14, 33, 21, 30, 3, 228, 163, 14, 33, 21, 30, 3, 152, - 14, 33, 21, 30, 3, 198, 14, 33, 21, 30, 3, 222, 201, 14, 33, 21, 30, 3, - 68, 14, 33, 21, 30, 3, 216, 216, 14, 33, 21, 30, 3, 219, 40, 14, 33, 21, - 30, 3, 218, 151, 14, 33, 21, 30, 3, 218, 90, 14, 33, 21, 30, 3, 217, 157, - 14, 211, 6, 60, 14, 211, 6, 253, 204, 14, 211, 6, 251, 202, 14, 211, 6, - 250, 46, 14, 211, 6, 73, 14, 211, 6, 246, 74, 14, 211, 6, 245, 67, 14, - 211, 6, 243, 225, 14, 211, 6, 72, 14, 211, 6, 237, 126, 14, 211, 6, 237, - 17, 14, 211, 6, 153, 14, 211, 6, 189, 14, 211, 6, 207, 14, 211, 6, 74, - 14, 211, 6, 230, 59, 14, 211, 6, 228, 163, 14, 211, 6, 152, 14, 211, 6, - 198, 14, 211, 6, 222, 201, 14, 211, 6, 68, 14, 211, 6, 216, 216, 14, 211, - 6, 219, 40, 14, 211, 6, 218, 151, 14, 211, 6, 218, 90, 14, 211, 6, 217, - 157, 14, 211, 3, 60, 14, 211, 3, 253, 204, 14, 211, 3, 251, 202, 14, 211, - 3, 250, 46, 14, 211, 3, 73, 14, 211, 3, 246, 74, 14, 211, 3, 245, 67, 14, - 211, 3, 243, 225, 14, 211, 3, 72, 14, 211, 3, 237, 126, 14, 211, 3, 237, - 17, 14, 211, 3, 153, 14, 211, 3, 189, 14, 211, 3, 207, 14, 211, 3, 74, - 14, 211, 3, 230, 59, 14, 211, 3, 228, 163, 14, 211, 3, 152, 14, 211, 3, - 198, 14, 211, 3, 222, 201, 14, 211, 3, 68, 14, 211, 3, 216, 216, 14, 211, - 3, 219, 40, 14, 211, 3, 218, 151, 14, 211, 3, 218, 90, 14, 211, 3, 217, - 157, 14, 30, 3, 248, 144, 72, 14, 30, 3, 248, 144, 237, 126, 14, 21, 6, - 254, 146, 14, 21, 6, 252, 102, 14, 21, 6, 244, 231, 14, 21, 6, 249, 62, - 14, 21, 6, 246, 156, 14, 21, 6, 217, 83, 14, 21, 6, 246, 121, 14, 21, 6, - 222, 6, 14, 21, 6, 237, 162, 14, 21, 6, 236, 221, 14, 21, 6, 235, 156, - 14, 21, 6, 233, 99, 14, 21, 6, 231, 144, 14, 21, 6, 218, 130, 14, 21, 6, - 230, 141, 14, 21, 6, 229, 108, 14, 21, 6, 227, 149, 14, 21, 6, 222, 7, - 100, 14, 21, 6, 224, 127, 14, 21, 6, 222, 105, 14, 21, 6, 220, 57, 14, - 21, 6, 229, 129, 14, 21, 6, 251, 31, 14, 21, 6, 228, 212, 14, 21, 6, 230, - 143, 14, 21, 232, 231, 14, 21, 3, 254, 146, 14, 21, 3, 252, 102, 14, 21, - 3, 244, 231, 14, 21, 3, 249, 62, 14, 21, 3, 246, 156, 14, 21, 3, 217, 83, - 14, 21, 3, 246, 121, 14, 21, 3, 222, 6, 14, 21, 3, 237, 162, 14, 21, 3, - 236, 221, 14, 21, 3, 235, 156, 14, 21, 3, 233, 99, 14, 21, 3, 231, 144, - 14, 21, 3, 218, 130, 14, 21, 3, 230, 141, 14, 21, 3, 229, 108, 14, 21, 3, - 227, 149, 14, 21, 3, 39, 224, 127, 14, 21, 3, 224, 127, 14, 21, 3, 222, - 105, 14, 21, 3, 220, 57, 14, 21, 3, 229, 129, 14, 21, 3, 251, 31, 14, 21, - 3, 228, 212, 14, 21, 3, 230, 143, 14, 21, 229, 223, 248, 246, 14, 21, - 246, 157, 100, 14, 21, 222, 7, 100, 14, 21, 236, 222, 100, 14, 21, 229, - 130, 100, 14, 21, 227, 150, 100, 14, 21, 229, 109, 100, 14, 30, 6, 254, - 146, 14, 30, 6, 252, 102, 14, 30, 6, 244, 231, 14, 30, 6, 249, 62, 14, - 30, 6, 246, 156, 14, 30, 6, 217, 83, 14, 30, 6, 246, 121, 14, 30, 6, 222, - 6, 14, 30, 6, 237, 162, 14, 30, 6, 236, 221, 14, 30, 6, 235, 156, 14, 30, - 6, 233, 99, 14, 30, 6, 231, 144, 14, 30, 6, 218, 130, 14, 30, 6, 230, - 141, 14, 30, 6, 229, 108, 14, 30, 6, 227, 149, 14, 30, 6, 222, 7, 100, - 14, 30, 6, 224, 127, 14, 30, 6, 222, 105, 14, 30, 6, 220, 57, 14, 30, 6, - 229, 129, 14, 30, 6, 251, 31, 14, 30, 6, 228, 212, 14, 30, 6, 230, 143, - 14, 30, 232, 231, 14, 30, 3, 254, 146, 14, 30, 3, 252, 102, 14, 30, 3, - 244, 231, 14, 30, 3, 249, 62, 14, 30, 3, 246, 156, 14, 30, 3, 217, 83, - 14, 30, 3, 246, 121, 14, 30, 3, 222, 6, 14, 30, 3, 237, 162, 14, 30, 3, - 236, 221, 14, 30, 3, 235, 156, 14, 30, 3, 233, 99, 14, 30, 3, 231, 144, - 14, 30, 3, 218, 130, 14, 30, 3, 230, 141, 14, 30, 3, 229, 108, 14, 30, 3, - 227, 149, 14, 30, 3, 39, 224, 127, 14, 30, 3, 224, 127, 14, 30, 3, 222, - 105, 14, 30, 3, 220, 57, 14, 30, 3, 229, 129, 14, 30, 3, 251, 31, 14, 30, - 3, 228, 212, 14, 30, 3, 230, 143, 14, 30, 229, 223, 248, 246, 14, 30, - 246, 157, 100, 14, 30, 222, 7, 100, 14, 30, 236, 222, 100, 14, 30, 229, - 130, 100, 14, 30, 227, 150, 100, 14, 30, 229, 109, 100, 14, 21, 30, 6, - 254, 146, 14, 21, 30, 6, 252, 102, 14, 21, 30, 6, 244, 231, 14, 21, 30, - 6, 249, 62, 14, 21, 30, 6, 246, 156, 14, 21, 30, 6, 217, 83, 14, 21, 30, - 6, 246, 121, 14, 21, 30, 6, 222, 6, 14, 21, 30, 6, 237, 162, 14, 21, 30, - 6, 236, 221, 14, 21, 30, 6, 235, 156, 14, 21, 30, 6, 233, 99, 14, 21, 30, - 6, 231, 144, 14, 21, 30, 6, 218, 130, 14, 21, 30, 6, 230, 141, 14, 21, - 30, 6, 229, 108, 14, 21, 30, 6, 227, 149, 14, 21, 30, 6, 222, 7, 100, 14, - 21, 30, 6, 224, 127, 14, 21, 30, 6, 222, 105, 14, 21, 30, 6, 220, 57, 14, - 21, 30, 6, 229, 129, 14, 21, 30, 6, 251, 31, 14, 21, 30, 6, 228, 212, 14, - 21, 30, 6, 230, 143, 14, 21, 30, 232, 231, 14, 21, 30, 3, 254, 146, 14, - 21, 30, 3, 252, 102, 14, 21, 30, 3, 244, 231, 14, 21, 30, 3, 249, 62, 14, - 21, 30, 3, 246, 156, 14, 21, 30, 3, 217, 83, 14, 21, 30, 3, 246, 121, 14, - 21, 30, 3, 222, 6, 14, 21, 30, 3, 237, 162, 14, 21, 30, 3, 236, 221, 14, - 21, 30, 3, 235, 156, 14, 21, 30, 3, 233, 99, 14, 21, 30, 3, 231, 144, 14, - 21, 30, 3, 218, 130, 14, 21, 30, 3, 230, 141, 14, 21, 30, 3, 229, 108, - 14, 21, 30, 3, 227, 149, 14, 21, 30, 3, 39, 224, 127, 14, 21, 30, 3, 224, - 127, 14, 21, 30, 3, 222, 105, 14, 21, 30, 3, 220, 57, 14, 21, 30, 3, 229, - 129, 14, 21, 30, 3, 251, 31, 14, 21, 30, 3, 228, 212, 14, 21, 30, 3, 230, - 143, 14, 21, 30, 229, 223, 248, 246, 14, 21, 30, 246, 157, 100, 14, 21, - 30, 222, 7, 100, 14, 21, 30, 236, 222, 100, 14, 21, 30, 229, 130, 100, - 14, 21, 30, 227, 150, 100, 14, 21, 30, 229, 109, 100, 14, 33, 21, 6, 254, - 146, 14, 33, 21, 6, 252, 102, 14, 33, 21, 6, 244, 231, 14, 33, 21, 6, - 249, 62, 14, 33, 21, 6, 246, 156, 14, 33, 21, 6, 217, 83, 14, 33, 21, 6, - 246, 121, 14, 33, 21, 6, 222, 6, 14, 33, 21, 6, 237, 162, 14, 33, 21, 6, - 236, 221, 14, 33, 21, 6, 235, 156, 14, 33, 21, 6, 233, 99, 14, 33, 21, 6, - 231, 144, 14, 33, 21, 6, 218, 130, 14, 33, 21, 6, 230, 141, 14, 33, 21, - 6, 229, 108, 14, 33, 21, 6, 227, 149, 14, 33, 21, 6, 222, 7, 100, 14, 33, - 21, 6, 224, 127, 14, 33, 21, 6, 222, 105, 14, 33, 21, 6, 220, 57, 14, 33, - 21, 6, 229, 129, 14, 33, 21, 6, 251, 31, 14, 33, 21, 6, 228, 212, 14, 33, - 21, 6, 230, 143, 14, 33, 21, 232, 231, 14, 33, 21, 3, 254, 146, 14, 33, - 21, 3, 252, 102, 14, 33, 21, 3, 244, 231, 14, 33, 21, 3, 249, 62, 14, 33, - 21, 3, 246, 156, 14, 33, 21, 3, 217, 83, 14, 33, 21, 3, 246, 121, 14, 33, - 21, 3, 222, 6, 14, 33, 21, 3, 237, 162, 14, 33, 21, 3, 236, 221, 14, 33, - 21, 3, 235, 156, 14, 33, 21, 3, 233, 99, 14, 33, 21, 3, 231, 144, 14, 33, - 21, 3, 218, 130, 14, 33, 21, 3, 230, 141, 14, 33, 21, 3, 229, 108, 14, - 33, 21, 3, 227, 149, 14, 33, 21, 3, 39, 224, 127, 14, 33, 21, 3, 224, - 127, 14, 33, 21, 3, 222, 105, 14, 33, 21, 3, 220, 57, 14, 33, 21, 3, 229, - 129, 14, 33, 21, 3, 251, 31, 14, 33, 21, 3, 228, 212, 14, 33, 21, 3, 230, - 143, 14, 33, 21, 229, 223, 248, 246, 14, 33, 21, 246, 157, 100, 14, 33, - 21, 222, 7, 100, 14, 33, 21, 236, 222, 100, 14, 33, 21, 229, 130, 100, - 14, 33, 21, 227, 150, 100, 14, 33, 21, 229, 109, 100, 14, 33, 21, 30, 6, - 254, 146, 14, 33, 21, 30, 6, 252, 102, 14, 33, 21, 30, 6, 244, 231, 14, - 33, 21, 30, 6, 249, 62, 14, 33, 21, 30, 6, 246, 156, 14, 33, 21, 30, 6, - 217, 83, 14, 33, 21, 30, 6, 246, 121, 14, 33, 21, 30, 6, 222, 6, 14, 33, - 21, 30, 6, 237, 162, 14, 33, 21, 30, 6, 236, 221, 14, 33, 21, 30, 6, 235, - 156, 14, 33, 21, 30, 6, 233, 99, 14, 33, 21, 30, 6, 231, 144, 14, 33, 21, - 30, 6, 218, 130, 14, 33, 21, 30, 6, 230, 141, 14, 33, 21, 30, 6, 229, - 108, 14, 33, 21, 30, 6, 227, 149, 14, 33, 21, 30, 6, 222, 7, 100, 14, 33, - 21, 30, 6, 224, 127, 14, 33, 21, 30, 6, 222, 105, 14, 33, 21, 30, 6, 220, - 57, 14, 33, 21, 30, 6, 229, 129, 14, 33, 21, 30, 6, 251, 31, 14, 33, 21, - 30, 6, 228, 212, 14, 33, 21, 30, 6, 230, 143, 14, 33, 21, 30, 232, 231, - 14, 33, 21, 30, 3, 254, 146, 14, 33, 21, 30, 3, 252, 102, 14, 33, 21, 30, - 3, 244, 231, 14, 33, 21, 30, 3, 249, 62, 14, 33, 21, 30, 3, 246, 156, 14, - 33, 21, 30, 3, 217, 83, 14, 33, 21, 30, 3, 246, 121, 14, 33, 21, 30, 3, - 222, 6, 14, 33, 21, 30, 3, 237, 162, 14, 33, 21, 30, 3, 236, 221, 14, 33, - 21, 30, 3, 235, 156, 14, 33, 21, 30, 3, 233, 99, 14, 33, 21, 30, 3, 231, - 144, 14, 33, 21, 30, 3, 218, 130, 14, 33, 21, 30, 3, 230, 141, 14, 33, - 21, 30, 3, 229, 108, 14, 33, 21, 30, 3, 227, 149, 14, 33, 21, 30, 3, 39, - 224, 127, 14, 33, 21, 30, 3, 224, 127, 14, 33, 21, 30, 3, 222, 105, 14, - 33, 21, 30, 3, 220, 57, 14, 33, 21, 30, 3, 229, 129, 14, 33, 21, 30, 3, - 251, 31, 14, 33, 21, 30, 3, 228, 212, 14, 33, 21, 30, 3, 230, 143, 14, - 33, 21, 30, 229, 223, 248, 246, 14, 33, 21, 30, 246, 157, 100, 14, 33, - 21, 30, 222, 7, 100, 14, 33, 21, 30, 236, 222, 100, 14, 33, 21, 30, 229, - 130, 100, 14, 33, 21, 30, 227, 150, 100, 14, 33, 21, 30, 229, 109, 100, - 14, 21, 6, 248, 240, 14, 21, 3, 248, 240, 14, 21, 20, 217, 84, 14, 21, - 20, 107, 14, 21, 20, 103, 14, 21, 20, 160, 14, 21, 20, 154, 14, 21, 20, - 174, 14, 21, 20, 182, 14, 21, 20, 191, 14, 21, 20, 185, 14, 21, 20, 190, - 14, 173, 20, 217, 84, 14, 173, 20, 107, 14, 173, 20, 103, 14, 173, 20, - 160, 14, 173, 20, 154, 14, 173, 20, 174, 14, 173, 20, 182, 14, 173, 20, - 191, 14, 173, 20, 185, 14, 173, 20, 190, 14, 33, 20, 217, 84, 14, 33, 20, - 107, 14, 33, 20, 103, 14, 33, 20, 160, 14, 33, 20, 154, 14, 33, 20, 174, - 14, 33, 20, 182, 14, 33, 20, 191, 14, 33, 20, 185, 14, 33, 20, 190, 14, - 33, 21, 20, 217, 84, 14, 33, 21, 20, 107, 14, 33, 21, 20, 103, 14, 33, - 21, 20, 160, 14, 33, 21, 20, 154, 14, 33, 21, 20, 174, 14, 33, 21, 20, - 182, 14, 33, 21, 20, 191, 14, 33, 21, 20, 185, 14, 33, 21, 20, 190, 14, - 211, 20, 217, 84, 14, 211, 20, 107, 14, 211, 20, 103, 14, 211, 20, 160, - 14, 211, 20, 154, 14, 211, 20, 174, 14, 211, 20, 182, 14, 211, 20, 191, - 14, 211, 20, 185, 14, 211, 20, 190, 234, 101, 81, 247, 5, 218, 194, 234, - 101, 81, 224, 6, 218, 194, 234, 101, 81, 218, 217, 218, 194, 234, 101, - 81, 231, 187, 218, 194, 234, 101, 81, 227, 203, 247, 123, 234, 101, 81, - 244, 27, 247, 123, 234, 101, 81, 67, 247, 123, 234, 101, 81, 131, 117, - 251, 54, 234, 101, 81, 124, 117, 251, 54, 234, 101, 81, 148, 117, 251, - 54, 234, 101, 81, 245, 116, 117, 251, 54, 234, 101, 81, 245, 170, 117, - 251, 54, 234, 101, 81, 224, 82, 117, 251, 54, 234, 101, 81, 225, 43, 117, - 251, 54, 234, 101, 81, 246, 235, 117, 251, 54, 234, 101, 81, 232, 31, - 117, 251, 54, 234, 101, 81, 131, 117, 252, 210, 234, 101, 81, 124, 117, - 252, 210, 234, 101, 81, 148, 117, 252, 210, 234, 101, 81, 245, 116, 117, - 252, 210, 234, 101, 81, 245, 170, 117, 252, 210, 234, 101, 81, 224, 82, - 117, 252, 210, 234, 101, 81, 225, 43, 117, 252, 210, 234, 101, 81, 246, - 235, 117, 252, 210, 234, 101, 81, 232, 31, 117, 252, 210, 234, 101, 81, - 131, 117, 250, 220, 234, 101, 81, 124, 117, 250, 220, 234, 101, 81, 148, - 117, 250, 220, 234, 101, 81, 245, 116, 117, 250, 220, 234, 101, 81, 245, - 170, 117, 250, 220, 234, 101, 81, 224, 82, 117, 250, 220, 234, 101, 81, - 225, 43, 117, 250, 220, 234, 101, 81, 246, 235, 117, 250, 220, 234, 101, - 81, 232, 31, 117, 250, 220, 234, 101, 81, 229, 45, 234, 101, 81, 230, - 104, 234, 101, 81, 252, 211, 234, 101, 81, 250, 254, 234, 101, 81, 223, - 232, 234, 101, 81, 223, 70, 234, 101, 81, 253, 223, 234, 101, 81, 218, - 190, 234, 101, 81, 237, 53, 234, 101, 81, 252, 233, 119, 81, 186, 252, - 233, 119, 81, 242, 240, 119, 81, 242, 239, 119, 81, 242, 238, 119, 81, - 242, 237, 119, 81, 242, 236, 119, 81, 242, 235, 119, 81, 242, 234, 119, - 81, 242, 233, 119, 81, 242, 232, 119, 81, 242, 231, 119, 81, 242, 230, - 119, 81, 242, 229, 119, 81, 242, 228, 119, 81, 242, 227, 119, 81, 242, - 226, 119, 81, 242, 225, 119, 81, 242, 224, 119, 81, 242, 223, 119, 81, - 242, 222, 119, 81, 242, 221, 119, 81, 242, 220, 119, 81, 242, 219, 119, - 81, 242, 218, 119, 81, 242, 217, 119, 81, 242, 216, 119, 81, 242, 215, - 119, 81, 242, 214, 119, 81, 242, 213, 119, 81, 242, 212, 119, 81, 242, - 211, 119, 81, 242, 210, 119, 81, 242, 209, 119, 81, 242, 208, 119, 81, - 242, 207, 119, 81, 242, 206, 119, 81, 242, 205, 119, 81, 242, 204, 119, - 81, 242, 203, 119, 81, 242, 202, 119, 81, 242, 201, 119, 81, 242, 200, - 119, 81, 242, 199, 119, 81, 242, 198, 119, 81, 242, 197, 119, 81, 242, - 196, 119, 81, 242, 195, 119, 81, 242, 194, 119, 81, 242, 193, 119, 81, - 242, 192, 119, 81, 69, 252, 233, 119, 81, 219, 151, 119, 81, 219, 150, - 119, 81, 219, 149, 119, 81, 219, 148, 119, 81, 219, 147, 119, 81, 219, - 146, 119, 81, 219, 145, 119, 81, 219, 144, 119, 81, 219, 143, 119, 81, - 219, 142, 119, 81, 219, 141, 119, 81, 219, 140, 119, 81, 219, 139, 119, - 81, 219, 138, 119, 81, 219, 137, 119, 81, 219, 136, 119, 81, 219, 135, - 119, 81, 219, 134, 119, 81, 219, 133, 119, 81, 219, 132, 119, 81, 219, - 131, 119, 81, 219, 130, 119, 81, 219, 129, 119, 81, 219, 128, 119, 81, - 219, 127, 119, 81, 219, 126, 119, 81, 219, 125, 119, 81, 219, 124, 119, - 81, 219, 123, 119, 81, 219, 122, 119, 81, 219, 121, 119, 81, 219, 120, - 119, 81, 219, 119, 119, 81, 219, 118, 119, 81, 219, 117, 119, 81, 219, - 116, 119, 81, 219, 115, 119, 81, 219, 114, 119, 81, 219, 113, 119, 81, - 219, 112, 119, 81, 219, 111, 119, 81, 219, 110, 119, 81, 219, 109, 119, - 81, 219, 108, 119, 81, 219, 107, 119, 81, 219, 106, 119, 81, 219, 105, - 119, 81, 219, 104, 119, 81, 219, 103, 20, 217, 85, 245, 90, 223, 136, 20, - 217, 85, 250, 168, 20, 131, 250, 168, 20, 124, 250, 168, 20, 148, 250, - 168, 20, 245, 116, 250, 168, 20, 245, 170, 250, 168, 20, 224, 82, 250, - 168, 20, 225, 43, 250, 168, 20, 246, 235, 250, 168, 20, 232, 31, 250, - 168, 82, 7, 6, 1, 60, 82, 7, 6, 1, 253, 204, 82, 7, 6, 1, 251, 202, 82, - 7, 6, 1, 250, 46, 82, 7, 6, 1, 73, 82, 7, 6, 1, 246, 74, 82, 7, 6, 1, - 245, 67, 82, 7, 6, 1, 243, 225, 82, 7, 6, 1, 72, 82, 7, 6, 1, 237, 126, - 82, 7, 6, 1, 237, 17, 82, 7, 6, 1, 153, 82, 7, 6, 1, 189, 82, 7, 6, 1, - 207, 82, 7, 6, 1, 74, 82, 7, 6, 1, 230, 59, 82, 7, 6, 1, 228, 163, 82, 7, - 6, 1, 152, 82, 7, 6, 1, 198, 82, 7, 6, 1, 222, 201, 82, 7, 6, 1, 68, 82, - 7, 6, 1, 216, 216, 82, 7, 6, 1, 219, 40, 82, 7, 6, 1, 218, 151, 82, 7, 6, - 1, 218, 90, 82, 7, 6, 1, 217, 157, 221, 114, 224, 236, 252, 17, 7, 6, 1, - 198, 34, 30, 7, 6, 1, 251, 202, 34, 30, 7, 6, 1, 152, 34, 251, 100, 34, - 218, 153, 204, 7, 6, 1, 253, 204, 204, 7, 6, 1, 207, 204, 7, 6, 1, 230, - 59, 204, 7, 6, 1, 198, 204, 7, 6, 1, 219, 40, 204, 242, 154, 204, 233, - 52, 204, 226, 96, 204, 223, 219, 204, 229, 4, 232, 136, 34, 7, 6, 1, 243, - 225, 232, 136, 34, 7, 6, 1, 230, 59, 232, 136, 204, 7, 6, 1, 237, 126, - 232, 136, 204, 7, 6, 1, 153, 232, 136, 204, 7, 6, 1, 189, 232, 136, 204, - 7, 6, 1, 230, 59, 250, 98, 232, 136, 204, 7, 6, 1, 230, 59, 232, 136, - 204, 242, 67, 232, 136, 204, 187, 232, 136, 204, 226, 177, 40, 248, 184, - 40, 136, 243, 0, 204, 9, 220, 76, 240, 8, 204, 9, 220, 76, 240, 12, 204, - 9, 220, 76, 240, 18, 204, 52, 249, 92, 204, 9, 220, 76, 240, 24, 204, 9, - 220, 76, 240, 14, 204, 9, 220, 76, 239, 248, 204, 9, 220, 76, 240, 13, - 204, 9, 220, 76, 240, 23, 204, 9, 220, 76, 240, 0, 204, 9, 220, 76, 239, - 252, 204, 9, 220, 76, 240, 2, 204, 9, 220, 76, 240, 20, 204, 9, 220, 76, - 240, 9, 204, 9, 220, 76, 240, 22, 204, 9, 220, 76, 240, 1, 204, 9, 220, - 76, 240, 21, 204, 9, 220, 76, 239, 249, 204, 9, 220, 76, 239, 251, 204, - 9, 220, 76, 239, 247, 204, 9, 220, 76, 240, 15, 204, 9, 220, 76, 240, 16, - 204, 9, 220, 76, 239, 254, 204, 9, 220, 76, 240, 6, 204, 9, 220, 76, 240, - 4, 204, 9, 220, 76, 240, 27, 204, 9, 220, 76, 240, 26, 204, 9, 220, 76, - 239, 245, 204, 9, 220, 76, 240, 10, 204, 9, 220, 76, 240, 25, 204, 9, - 220, 76, 240, 17, 204, 9, 220, 76, 240, 5, 204, 9, 220, 76, 239, 246, - 204, 9, 220, 76, 240, 7, 221, 114, 224, 236, 252, 17, 9, 220, 76, 239, - 255, 221, 114, 224, 236, 252, 17, 9, 220, 76, 240, 26, 221, 114, 224, - 236, 252, 17, 9, 220, 76, 240, 24, 221, 114, 224, 236, 252, 17, 9, 220, - 76, 240, 11, 221, 114, 224, 236, 252, 17, 9, 220, 76, 239, 253, 221, 114, - 224, 236, 252, 17, 9, 220, 76, 240, 7, 221, 114, 224, 236, 252, 17, 9, - 220, 76, 239, 250, 221, 114, 224, 236, 252, 17, 9, 220, 76, 240, 19, 221, - 114, 224, 236, 252, 17, 9, 220, 76, 240, 3, 9, 13, 242, 57, 9, 13, 242, - 56, 9, 13, 242, 55, 9, 13, 242, 54, 9, 13, 242, 53, 9, 13, 242, 52, 9, - 13, 242, 51, 9, 13, 242, 50, 9, 13, 242, 49, 9, 13, 242, 48, 9, 13, 242, - 47, 9, 13, 242, 46, 9, 13, 242, 45, 9, 13, 242, 44, 9, 13, 242, 43, 9, - 13, 242, 42, 9, 13, 242, 41, 9, 13, 242, 40, 9, 13, 242, 39, 9, 13, 242, - 38, 9, 13, 242, 37, 9, 13, 242, 36, 9, 13, 242, 35, 9, 13, 242, 34, 9, - 13, 242, 33, 9, 13, 242, 32, 9, 13, 242, 31, 9, 13, 242, 30, 9, 13, 242, - 29, 9, 13, 242, 28, 9, 13, 242, 27, 9, 13, 242, 26, 9, 13, 242, 25, 9, - 13, 242, 24, 9, 13, 242, 23, 9, 13, 242, 22, 9, 13, 242, 21, 9, 13, 242, - 20, 9, 13, 242, 19, 9, 13, 242, 18, 9, 13, 242, 17, 9, 13, 242, 16, 9, - 13, 242, 15, 9, 13, 242, 14, 9, 13, 242, 13, 9, 13, 242, 12, 9, 13, 242, - 11, 9, 13, 242, 10, 9, 13, 242, 9, 9, 13, 242, 8, 9, 13, 242, 7, 9, 13, - 242, 6, 9, 13, 242, 5, 9, 13, 242, 4, 9, 13, 242, 3, 9, 13, 242, 2, 9, - 13, 242, 1, 9, 13, 242, 0, 9, 13, 241, 255, 9, 13, 241, 254, 9, 13, 241, - 253, 9, 13, 241, 252, 9, 13, 241, 251, 9, 13, 241, 250, 9, 13, 241, 249, - 9, 13, 241, 248, 9, 13, 241, 247, 9, 13, 241, 246, 9, 13, 241, 245, 9, - 13, 241, 244, 9, 13, 241, 243, 9, 13, 241, 242, 9, 13, 241, 241, 9, 13, - 241, 240, 9, 13, 241, 239, 9, 13, 241, 238, 9, 13, 241, 237, 9, 13, 241, - 236, 9, 13, 241, 235, 9, 13, 241, 234, 9, 13, 241, 233, 9, 13, 241, 232, - 9, 13, 241, 231, 9, 13, 241, 230, 9, 13, 241, 229, 9, 13, 241, 228, 9, - 13, 241, 227, 9, 13, 241, 226, 9, 13, 241, 225, 9, 13, 241, 224, 9, 13, - 241, 223, 9, 13, 241, 222, 9, 13, 241, 221, 9, 13, 241, 220, 9, 13, 241, - 219, 9, 13, 241, 218, 9, 13, 241, 217, 9, 13, 241, 216, 9, 13, 241, 215, - 9, 13, 241, 214, 9, 13, 241, 213, 9, 13, 241, 212, 9, 13, 241, 211, 9, - 13, 241, 210, 9, 13, 241, 209, 9, 13, 241, 208, 9, 13, 241, 207, 9, 13, - 241, 206, 9, 13, 241, 205, 9, 13, 241, 204, 9, 13, 241, 203, 9, 13, 241, - 202, 9, 13, 241, 201, 9, 13, 241, 200, 9, 13, 241, 199, 9, 13, 241, 198, - 9, 13, 241, 197, 9, 13, 241, 196, 9, 13, 241, 195, 9, 13, 241, 194, 9, - 13, 241, 193, 9, 13, 241, 192, 9, 13, 241, 191, 9, 13, 241, 190, 9, 13, - 241, 189, 9, 13, 241, 188, 9, 13, 241, 187, 9, 13, 241, 186, 9, 13, 241, - 185, 9, 13, 241, 184, 9, 13, 241, 183, 9, 13, 241, 182, 9, 13, 241, 181, - 9, 13, 241, 180, 9, 13, 241, 179, 9, 13, 241, 178, 9, 13, 241, 177, 9, - 13, 241, 176, 9, 13, 241, 175, 9, 13, 241, 174, 9, 13, 241, 173, 9, 13, - 241, 172, 9, 13, 241, 171, 9, 13, 241, 170, 9, 13, 241, 169, 9, 13, 241, - 168, 9, 13, 241, 167, 9, 13, 241, 166, 9, 13, 241, 165, 9, 13, 241, 164, - 9, 13, 241, 163, 9, 13, 241, 162, 9, 13, 241, 161, 9, 13, 241, 160, 9, - 13, 241, 159, 9, 13, 241, 158, 9, 13, 241, 157, 9, 13, 241, 156, 9, 13, - 241, 155, 9, 13, 241, 154, 9, 13, 241, 153, 9, 13, 241, 152, 9, 13, 241, - 151, 9, 13, 241, 150, 9, 13, 241, 149, 9, 13, 241, 148, 9, 13, 241, 147, - 9, 13, 241, 146, 9, 13, 241, 145, 9, 13, 241, 144, 9, 13, 241, 143, 9, - 13, 241, 142, 9, 13, 241, 141, 9, 13, 241, 140, 9, 13, 241, 139, 9, 13, - 241, 138, 9, 13, 241, 137, 9, 13, 241, 136, 9, 13, 241, 135, 9, 13, 241, - 134, 9, 13, 241, 133, 9, 13, 241, 132, 9, 13, 241, 131, 9, 13, 241, 130, - 9, 13, 241, 129, 9, 13, 241, 128, 9, 13, 241, 127, 9, 13, 241, 126, 9, - 13, 241, 125, 9, 13, 241, 124, 9, 13, 241, 123, 9, 13, 241, 122, 9, 13, - 241, 121, 9, 13, 241, 120, 9, 13, 241, 119, 9, 13, 241, 118, 9, 13, 241, - 117, 9, 13, 241, 116, 9, 13, 241, 115, 9, 13, 241, 114, 9, 13, 241, 113, - 9, 13, 241, 112, 9, 13, 241, 111, 9, 13, 241, 110, 9, 13, 241, 109, 9, - 13, 241, 108, 9, 13, 241, 107, 9, 13, 241, 106, 9, 13, 241, 105, 9, 13, - 241, 104, 9, 13, 241, 103, 9, 13, 241, 102, 9, 13, 241, 101, 9, 13, 241, - 100, 9, 13, 241, 99, 9, 13, 241, 98, 9, 13, 241, 97, 9, 13, 241, 96, 9, - 13, 241, 95, 9, 13, 241, 94, 9, 13, 241, 93, 9, 13, 241, 92, 9, 13, 241, - 91, 9, 13, 241, 90, 9, 13, 241, 89, 9, 13, 241, 88, 9, 13, 241, 87, 9, - 13, 241, 86, 9, 13, 241, 85, 9, 13, 241, 84, 9, 13, 241, 83, 9, 13, 241, - 82, 9, 13, 241, 81, 9, 13, 241, 80, 9, 13, 241, 79, 9, 13, 241, 78, 9, - 13, 241, 77, 9, 13, 241, 76, 9, 13, 241, 75, 9, 13, 241, 74, 9, 13, 241, - 73, 9, 13, 241, 72, 9, 13, 241, 71, 9, 13, 241, 70, 9, 13, 241, 69, 9, - 13, 241, 68, 9, 13, 241, 67, 9, 13, 241, 66, 9, 13, 241, 65, 9, 13, 241, - 64, 9, 13, 241, 63, 9, 13, 241, 62, 9, 13, 241, 61, 9, 13, 241, 60, 9, - 13, 241, 59, 9, 13, 241, 58, 9, 13, 241, 57, 9, 13, 241, 56, 9, 13, 241, - 55, 9, 13, 241, 54, 9, 13, 241, 53, 9, 13, 241, 52, 9, 13, 241, 51, 9, - 13, 241, 50, 9, 13, 241, 49, 9, 13, 241, 48, 9, 13, 241, 47, 9, 13, 241, - 46, 9, 13, 241, 45, 9, 13, 241, 44, 9, 13, 241, 43, 9, 13, 241, 42, 9, - 13, 241, 41, 9, 13, 241, 40, 9, 13, 241, 39, 9, 13, 241, 38, 9, 13, 241, - 37, 9, 13, 241, 36, 9, 13, 241, 35, 9, 13, 241, 34, 9, 13, 241, 33, 9, - 13, 241, 32, 9, 13, 241, 31, 9, 13, 241, 30, 9, 13, 241, 29, 9, 13, 241, - 28, 9, 13, 241, 27, 9, 13, 241, 26, 9, 13, 241, 25, 9, 13, 241, 24, 9, - 13, 241, 23, 9, 13, 241, 22, 9, 13, 241, 21, 9, 13, 241, 20, 9, 13, 241, - 19, 9, 13, 241, 18, 9, 13, 241, 17, 9, 13, 241, 16, 9, 13, 241, 15, 9, - 13, 241, 14, 9, 13, 241, 13, 9, 13, 241, 12, 9, 13, 241, 11, 9, 13, 241, - 10, 9, 13, 241, 9, 9, 13, 241, 8, 9, 13, 241, 7, 9, 13, 241, 6, 9, 13, - 241, 5, 9, 13, 241, 4, 9, 13, 241, 3, 9, 13, 241, 2, 9, 13, 241, 1, 9, - 13, 241, 0, 9, 13, 240, 255, 9, 13, 240, 254, 9, 13, 240, 253, 9, 13, - 240, 252, 9, 13, 240, 251, 9, 13, 240, 250, 9, 13, 240, 249, 9, 13, 240, - 248, 9, 13, 240, 247, 9, 13, 240, 246, 9, 13, 240, 245, 9, 13, 240, 244, - 9, 13, 240, 243, 9, 13, 240, 242, 9, 13, 240, 241, 9, 13, 240, 240, 9, - 13, 240, 239, 9, 13, 240, 238, 9, 13, 240, 237, 9, 13, 240, 236, 9, 13, - 240, 235, 9, 13, 240, 234, 9, 13, 240, 233, 9, 13, 240, 232, 9, 13, 240, - 231, 9, 13, 240, 230, 9, 13, 240, 229, 9, 13, 240, 228, 9, 13, 240, 227, - 9, 13, 240, 226, 9, 13, 240, 225, 9, 13, 240, 224, 9, 13, 240, 223, 9, - 13, 240, 222, 9, 13, 240, 221, 9, 13, 240, 220, 9, 13, 240, 219, 9, 13, - 240, 218, 9, 13, 240, 217, 9, 13, 240, 216, 9, 13, 240, 215, 9, 13, 240, - 214, 9, 13, 240, 213, 9, 13, 240, 212, 9, 13, 240, 211, 9, 13, 240, 210, - 9, 13, 240, 209, 9, 13, 240, 208, 9, 13, 240, 207, 9, 13, 240, 206, 9, - 13, 240, 205, 9, 13, 240, 204, 9, 13, 240, 203, 9, 13, 240, 202, 9, 13, - 240, 201, 9, 13, 240, 200, 9, 13, 240, 199, 9, 13, 240, 198, 9, 13, 240, - 197, 9, 13, 240, 196, 9, 13, 240, 195, 9, 13, 240, 194, 9, 13, 240, 193, - 9, 13, 240, 192, 9, 13, 240, 191, 9, 13, 240, 190, 9, 13, 240, 189, 9, - 13, 240, 188, 9, 13, 240, 187, 9, 13, 240, 186, 9, 13, 240, 185, 9, 13, - 240, 184, 9, 13, 240, 183, 9, 13, 240, 182, 9, 13, 240, 181, 9, 13, 240, - 180, 9, 13, 240, 179, 9, 13, 240, 178, 9, 13, 240, 177, 9, 13, 240, 176, - 9, 13, 240, 175, 9, 13, 240, 174, 9, 13, 240, 173, 9, 13, 240, 172, 9, - 13, 240, 171, 9, 13, 240, 170, 9, 13, 240, 169, 9, 13, 240, 168, 9, 13, - 240, 167, 9, 13, 240, 166, 9, 13, 240, 165, 9, 13, 240, 164, 9, 13, 240, - 163, 9, 13, 240, 162, 9, 13, 240, 161, 9, 13, 240, 160, 9, 13, 240, 159, - 9, 13, 240, 158, 9, 13, 240, 157, 9, 13, 240, 156, 9, 13, 240, 155, 9, - 13, 240, 154, 9, 13, 240, 153, 9, 13, 240, 152, 9, 13, 240, 151, 9, 13, - 240, 150, 9, 13, 240, 149, 9, 13, 240, 148, 9, 13, 240, 147, 9, 13, 240, - 146, 9, 13, 240, 145, 9, 13, 240, 144, 9, 13, 240, 143, 9, 13, 240, 142, - 9, 13, 240, 141, 9, 13, 240, 140, 9, 13, 240, 139, 9, 13, 240, 138, 9, - 13, 240, 137, 9, 13, 240, 136, 9, 13, 240, 135, 9, 13, 240, 134, 9, 13, - 240, 133, 9, 13, 240, 132, 9, 13, 240, 131, 9, 13, 240, 130, 9, 13, 240, - 129, 9, 13, 240, 128, 9, 13, 240, 127, 9, 13, 240, 126, 9, 13, 240, 125, - 9, 13, 240, 124, 9, 13, 240, 123, 9, 13, 240, 122, 9, 13, 240, 121, 9, - 13, 240, 120, 9, 13, 240, 119, 9, 13, 240, 118, 9, 13, 240, 117, 9, 13, - 240, 116, 9, 13, 240, 115, 9, 13, 240, 114, 9, 13, 240, 113, 9, 13, 240, - 112, 9, 13, 240, 111, 9, 13, 240, 110, 9, 13, 240, 109, 9, 13, 240, 108, - 9, 13, 240, 107, 9, 13, 240, 106, 9, 13, 240, 105, 9, 13, 240, 104, 9, - 13, 240, 103, 9, 13, 240, 102, 9, 13, 240, 101, 9, 13, 240, 100, 9, 13, - 240, 99, 9, 13, 240, 98, 9, 13, 240, 97, 9, 13, 240, 96, 9, 13, 240, 95, - 9, 13, 240, 94, 9, 13, 240, 93, 9, 13, 240, 92, 9, 13, 240, 91, 9, 13, - 240, 90, 9, 13, 240, 89, 9, 13, 240, 88, 9, 13, 240, 87, 9, 13, 240, 86, - 9, 13, 240, 85, 9, 13, 240, 84, 9, 13, 240, 83, 9, 13, 240, 82, 9, 13, - 240, 81, 9, 13, 240, 80, 9, 13, 240, 79, 9, 13, 240, 78, 9, 13, 240, 77, - 9, 13, 240, 76, 9, 13, 240, 75, 9, 13, 240, 74, 9, 13, 240, 73, 9, 13, - 240, 72, 9, 13, 240, 71, 9, 13, 240, 70, 9, 13, 240, 69, 9, 13, 240, 68, - 9, 13, 240, 67, 9, 13, 240, 66, 9, 13, 240, 65, 9, 13, 240, 64, 9, 13, - 240, 63, 9, 13, 240, 62, 9, 13, 240, 61, 9, 13, 240, 60, 9, 13, 240, 59, - 9, 13, 240, 58, 9, 13, 240, 57, 9, 13, 240, 56, 9, 13, 240, 55, 9, 13, - 240, 54, 9, 13, 240, 53, 9, 13, 240, 52, 9, 13, 240, 51, 9, 13, 240, 50, - 9, 13, 240, 49, 9, 13, 240, 48, 9, 13, 240, 47, 9, 13, 240, 46, 9, 13, - 240, 45, 9, 13, 240, 44, 9, 13, 240, 43, 9, 13, 240, 42, 9, 13, 240, 41, - 9, 13, 240, 40, 9, 13, 240, 39, 9, 13, 240, 38, 9, 13, 240, 37, 9, 13, - 240, 36, 9, 13, 240, 35, 9, 13, 240, 34, 9, 13, 240, 33, 9, 13, 240, 32, - 9, 13, 240, 31, 9, 13, 240, 30, 9, 13, 240, 29, 9, 13, 240, 28, 235, 148, - 222, 141, 118, 223, 254, 118, 246, 95, 78, 118, 228, 69, 78, 118, 54, 55, - 118, 248, 155, 55, 118, 229, 169, 55, 118, 254, 134, 118, 254, 79, 118, - 42, 229, 229, 118, 45, 229, 229, 118, 253, 251, 118, 88, 55, 118, 250, - 168, 118, 242, 120, 118, 245, 90, 223, 136, 118, 224, 17, 118, 20, 217, - 84, 118, 20, 107, 118, 20, 103, 118, 20, 160, 118, 20, 154, 118, 20, 174, - 118, 20, 182, 118, 20, 191, 118, 20, 185, 118, 20, 190, 118, 250, 175, - 118, 225, 67, 118, 235, 87, 55, 118, 246, 154, 55, 118, 244, 30, 55, 118, - 228, 82, 78, 118, 250, 167, 253, 244, 118, 7, 6, 1, 60, 118, 7, 6, 1, - 253, 204, 118, 7, 6, 1, 251, 202, 118, 7, 6, 1, 250, 46, 118, 7, 6, 1, - 73, 118, 7, 6, 1, 246, 74, 118, 7, 6, 1, 245, 67, 118, 7, 6, 1, 243, 225, - 118, 7, 6, 1, 72, 118, 7, 6, 1, 237, 126, 118, 7, 6, 1, 237, 17, 118, 7, - 6, 1, 153, 118, 7, 6, 1, 189, 118, 7, 6, 1, 207, 118, 7, 6, 1, 74, 118, - 7, 6, 1, 230, 59, 118, 7, 6, 1, 228, 163, 118, 7, 6, 1, 152, 118, 7, 6, - 1, 198, 118, 7, 6, 1, 222, 201, 118, 7, 6, 1, 68, 118, 7, 6, 1, 216, 216, - 118, 7, 6, 1, 219, 40, 118, 7, 6, 1, 218, 151, 118, 7, 6, 1, 218, 90, - 118, 7, 6, 1, 217, 157, 118, 42, 40, 115, 118, 227, 160, 224, 17, 118, - 45, 40, 115, 118, 250, 217, 255, 0, 118, 109, 235, 43, 118, 244, 37, 255, - 0, 118, 7, 3, 1, 60, 118, 7, 3, 1, 253, 204, 118, 7, 3, 1, 251, 202, 118, - 7, 3, 1, 250, 46, 118, 7, 3, 1, 73, 118, 7, 3, 1, 246, 74, 118, 7, 3, 1, - 245, 67, 118, 7, 3, 1, 243, 225, 118, 7, 3, 1, 72, 118, 7, 3, 1, 237, - 126, 118, 7, 3, 1, 237, 17, 118, 7, 3, 1, 153, 118, 7, 3, 1, 189, 118, 7, - 3, 1, 207, 118, 7, 3, 1, 74, 118, 7, 3, 1, 230, 59, 118, 7, 3, 1, 228, - 163, 118, 7, 3, 1, 152, 118, 7, 3, 1, 198, 118, 7, 3, 1, 222, 201, 118, - 7, 3, 1, 68, 118, 7, 3, 1, 216, 216, 118, 7, 3, 1, 219, 40, 118, 7, 3, 1, - 218, 151, 118, 7, 3, 1, 218, 90, 118, 7, 3, 1, 217, 157, 118, 42, 250, - 79, 115, 118, 69, 235, 43, 118, 45, 250, 79, 115, 118, 221, 179, 251, - 153, 222, 141, 41, 225, 251, 41, 225, 240, 41, 225, 229, 41, 225, 217, - 41, 225, 206, 41, 225, 195, 41, 225, 184, 41, 225, 173, 41, 225, 162, 41, - 225, 154, 41, 225, 153, 41, 225, 152, 41, 225, 151, 41, 225, 149, 41, - 225, 148, 41, 225, 147, 41, 225, 146, 41, 225, 145, 41, 225, 144, 41, - 225, 143, 41, 225, 142, 41, 225, 141, 41, 225, 140, 41, 225, 138, 41, - 225, 137, 41, 225, 136, 41, 225, 135, 41, 225, 134, 41, 225, 133, 41, - 225, 132, 41, 225, 131, 41, 225, 130, 41, 225, 129, 41, 225, 127, 41, - 225, 126, 41, 225, 125, 41, 225, 124, 41, 225, 123, 41, 225, 122, 41, - 225, 121, 41, 225, 120, 41, 225, 119, 41, 225, 118, 41, 225, 116, 41, - 225, 115, 41, 225, 114, 41, 225, 113, 41, 225, 112, 41, 225, 111, 41, - 225, 110, 41, 225, 109, 41, 225, 108, 41, 225, 107, 41, 225, 105, 41, - 225, 104, 41, 225, 103, 41, 225, 102, 41, 225, 101, 41, 225, 100, 41, - 225, 99, 41, 225, 98, 41, 225, 97, 41, 225, 96, 41, 225, 94, 41, 225, 93, - 41, 225, 92, 41, 225, 91, 41, 225, 90, 41, 225, 89, 41, 225, 88, 41, 225, - 87, 41, 225, 86, 41, 225, 85, 41, 225, 83, 41, 225, 82, 41, 225, 81, 41, - 225, 80, 41, 225, 79, 41, 225, 78, 41, 225, 77, 41, 225, 76, 41, 225, 75, - 41, 225, 74, 41, 226, 71, 41, 226, 70, 41, 226, 69, 41, 226, 68, 41, 226, - 67, 41, 226, 66, 41, 226, 65, 41, 226, 64, 41, 226, 63, 41, 226, 62, 41, - 226, 60, 41, 226, 59, 41, 226, 58, 41, 226, 57, 41, 226, 56, 41, 226, 55, - 41, 226, 54, 41, 226, 53, 41, 226, 52, 41, 226, 51, 41, 226, 49, 41, 226, - 48, 41, 226, 47, 41, 226, 46, 41, 226, 45, 41, 226, 44, 41, 226, 43, 41, - 226, 42, 41, 226, 41, 41, 226, 40, 41, 226, 38, 41, 226, 37, 41, 226, 36, - 41, 226, 35, 41, 226, 34, 41, 226, 33, 41, 226, 32, 41, 226, 31, 41, 226, - 30, 41, 226, 29, 41, 226, 27, 41, 226, 26, 41, 226, 25, 41, 226, 24, 41, - 226, 23, 41, 226, 22, 41, 226, 21, 41, 226, 20, 41, 226, 19, 41, 226, 18, - 41, 226, 16, 41, 226, 15, 41, 226, 14, 41, 226, 13, 41, 226, 12, 41, 226, - 11, 41, 226, 10, 41, 226, 9, 41, 226, 8, 41, 226, 7, 41, 226, 5, 41, 226, - 4, 41, 226, 3, 41, 226, 2, 41, 226, 1, 41, 226, 0, 41, 225, 255, 41, 225, - 254, 41, 225, 253, 41, 225, 252, 41, 225, 250, 41, 225, 249, 41, 225, - 248, 41, 225, 247, 41, 225, 246, 41, 225, 245, 41, 225, 244, 41, 225, - 243, 41, 225, 242, 41, 225, 241, 41, 225, 239, 41, 225, 238, 41, 225, - 237, 41, 225, 236, 41, 225, 235, 41, 225, 234, 41, 225, 233, 41, 225, - 232, 41, 225, 231, 41, 225, 230, 41, 225, 228, 41, 225, 227, 41, 225, - 226, 41, 225, 225, 41, 225, 224, 41, 225, 223, 41, 225, 222, 41, 225, - 221, 41, 225, 220, 41, 225, 219, 41, 225, 216, 41, 225, 215, 41, 225, - 214, 41, 225, 213, 41, 225, 212, 41, 225, 211, 41, 225, 210, 41, 225, - 209, 41, 225, 208, 41, 225, 207, 41, 225, 205, 41, 225, 204, 41, 225, - 203, 41, 225, 202, 41, 225, 201, 41, 225, 200, 41, 225, 199, 41, 225, - 198, 41, 225, 197, 41, 225, 196, 41, 225, 194, 41, 225, 193, 41, 225, - 192, 41, 225, 191, 41, 225, 190, 41, 225, 189, 41, 225, 188, 41, 225, - 187, 41, 225, 186, 41, 225, 185, 41, 225, 183, 41, 225, 182, 41, 225, - 181, 41, 225, 180, 41, 225, 179, 41, 225, 178, 41, 225, 177, 41, 225, - 176, 41, 225, 175, 41, 225, 174, 41, 225, 172, 41, 225, 171, 41, 225, - 170, 41, 225, 169, 41, 225, 168, 41, 225, 167, 41, 225, 166, 41, 225, - 165, 41, 225, 164, 41, 225, 163, 41, 225, 161, 41, 225, 160, 41, 225, - 159, 41, 225, 158, 41, 225, 157, 41, 225, 156, 41, 225, 155, + 0, 228, 145, 247, 149, 76, 232, 57, 76, 65, 53, 249, 150, 53, 233, 123, + 53, 254, 193, 254, 144, 42, 233, 180, 41, 233, 180, 254, 69, 79, 53, 251, + 54, 244, 94, 246, 218, 228, 38, 228, 161, 21, 223, 89, 21, 118, 21, 113, + 21, 166, 21, 158, 21, 173, 21, 183, 21, 194, 21, 187, 21, 192, 251, 61, + 229, 186, 237, 213, 53, 247, 204, 53, 245, 231, 53, 232, 69, 76, 251, 53, + 254, 62, 7, 6, 1, 57, 7, 6, 1, 254, 27, 7, 6, 1, 252, 44, 7, 6, 1, 222, + 222, 7, 6, 1, 72, 7, 6, 1, 247, 130, 7, 6, 1, 214, 7, 6, 1, 212, 7, 6, 1, + 74, 7, 6, 1, 239, 182, 7, 6, 1, 239, 76, 7, 6, 1, 149, 7, 6, 1, 185, 7, + 6, 1, 199, 7, 6, 1, 73, 7, 6, 1, 233, 244, 7, 6, 1, 232, 139, 7, 6, 1, + 146, 7, 6, 1, 193, 7, 6, 1, 227, 109, 7, 6, 1, 66, 7, 6, 1, 196, 7, 6, 1, + 224, 174, 7, 6, 1, 224, 73, 7, 6, 1, 224, 25, 7, 6, 1, 223, 119, 42, 37, + 104, 231, 193, 228, 161, 41, 37, 104, 251, 102, 255, 41, 184, 237, 170, + 245, 237, 255, 41, 7, 3, 1, 57, 7, 3, 1, 254, 27, 7, 3, 1, 252, 44, 7, 3, + 1, 222, 222, 7, 3, 1, 72, 7, 3, 1, 247, 130, 7, 3, 1, 214, 7, 3, 1, 212, + 7, 3, 1, 74, 7, 3, 1, 239, 182, 7, 3, 1, 239, 76, 7, 3, 1, 149, 7, 3, 1, + 185, 7, 3, 1, 199, 7, 3, 1, 73, 7, 3, 1, 233, 244, 7, 3, 1, 232, 139, 7, + 3, 1, 146, 7, 3, 1, 193, 7, 3, 1, 227, 109, 7, 3, 1, 66, 7, 3, 1, 196, 7, + 3, 1, 224, 174, 7, 3, 1, 224, 73, 7, 3, 1, 224, 25, 7, 3, 1, 223, 119, + 42, 250, 223, 104, 61, 237, 170, 41, 250, 223, 104, 205, 235, 5, 228, + 145, 239, 223, 247, 149, 76, 251, 220, 53, 232, 234, 53, 250, 222, 53, + 223, 222, 53, 252, 99, 125, 230, 206, 53, 219, 251, 13, 53, 247, 81, 234, + 29, 240, 7, 237, 235, 47, 254, 182, 232, 57, 76, 190, 53, 228, 165, 244, + 95, 231, 227, 53, 237, 63, 250, 62, 53, 233, 9, 53, 227, 219, 113, 227, + 219, 166, 255, 33, 255, 41, 236, 156, 53, 233, 38, 53, 236, 154, 249, + 140, 251, 226, 227, 219, 118, 237, 8, 234, 29, 240, 7, 231, 151, 47, 254, + 182, 232, 57, 76, 224, 189, 246, 235, 168, 232, 76, 224, 189, 246, 235, + 168, 245, 151, 224, 189, 246, 235, 152, 232, 74, 239, 223, 232, 69, 76, + 7, 6, 1, 102, 2, 245, 236, 7, 6, 1, 102, 2, 155, 7, 6, 1, 102, 2, 251, + 101, 7, 6, 1, 102, 2, 205, 7, 6, 1, 102, 2, 219, 7, 6, 1, 102, 2, 231, + 140, 46, 7, 6, 1, 255, 19, 7, 6, 1, 252, 45, 2, 251, 226, 7, 6, 1, 161, + 2, 245, 236, 7, 6, 1, 161, 2, 155, 7, 6, 1, 161, 2, 251, 101, 7, 6, 1, + 161, 2, 219, 7, 6, 1, 244, 81, 2, 245, 236, 7, 6, 1, 244, 81, 2, 155, 7, + 6, 1, 244, 81, 2, 251, 101, 7, 6, 1, 244, 81, 2, 219, 7, 6, 1, 247, 168, + 7, 6, 1, 236, 5, 2, 205, 7, 6, 1, 130, 2, 245, 236, 7, 6, 1, 130, 2, 155, + 7, 6, 1, 130, 2, 251, 101, 7, 6, 1, 130, 2, 205, 7, 6, 1, 130, 2, 219, + 236, 52, 53, 7, 6, 1, 130, 2, 82, 7, 6, 1, 97, 2, 245, 236, 7, 6, 1, 97, + 2, 155, 7, 6, 1, 97, 2, 251, 101, 7, 6, 1, 97, 2, 219, 7, 6, 1, 224, 26, + 2, 155, 7, 6, 1, 226, 196, 7, 3, 1, 229, 124, 193, 7, 3, 1, 102, 2, 245, + 236, 7, 3, 1, 102, 2, 155, 7, 3, 1, 102, 2, 251, 101, 7, 3, 1, 102, 2, + 205, 7, 3, 1, 102, 2, 219, 7, 3, 1, 102, 2, 231, 140, 46, 7, 3, 1, 255, + 19, 7, 3, 1, 252, 45, 2, 251, 226, 7, 3, 1, 161, 2, 245, 236, 7, 3, 1, + 161, 2, 155, 7, 3, 1, 161, 2, 251, 101, 7, 3, 1, 161, 2, 219, 7, 3, 1, + 244, 81, 2, 245, 236, 7, 3, 1, 244, 81, 2, 155, 7, 3, 1, 244, 81, 2, 251, + 101, 7, 3, 1, 244, 81, 2, 219, 7, 3, 1, 247, 168, 7, 3, 1, 236, 5, 2, + 205, 7, 3, 1, 130, 2, 245, 236, 7, 3, 1, 130, 2, 155, 7, 3, 1, 130, 2, + 251, 101, 7, 3, 1, 130, 2, 205, 7, 3, 1, 130, 2, 219, 249, 181, 53, 7, 3, + 1, 130, 2, 82, 7, 3, 1, 97, 2, 245, 236, 7, 3, 1, 97, 2, 155, 7, 3, 1, + 97, 2, 251, 101, 7, 3, 1, 97, 2, 219, 7, 3, 1, 224, 26, 2, 155, 7, 3, 1, + 226, 196, 7, 3, 1, 224, 26, 2, 219, 7, 6, 1, 102, 2, 237, 63, 7, 3, 1, + 102, 2, 237, 63, 7, 6, 1, 102, 2, 252, 106, 7, 3, 1, 102, 2, 252, 106, 7, + 6, 1, 102, 2, 234, 84, 7, 3, 1, 102, 2, 234, 84, 7, 6, 1, 252, 45, 2, + 155, 7, 3, 1, 252, 45, 2, 155, 7, 6, 1, 252, 45, 2, 251, 101, 7, 3, 1, + 252, 45, 2, 251, 101, 7, 6, 1, 252, 45, 2, 56, 46, 7, 3, 1, 252, 45, 2, + 56, 46, 7, 6, 1, 252, 45, 2, 252, 5, 7, 3, 1, 252, 45, 2, 252, 5, 7, 6, + 1, 250, 192, 2, 252, 5, 7, 3, 1, 250, 192, 2, 252, 5, 7, 6, 1, 250, 192, + 2, 82, 7, 3, 1, 250, 192, 2, 82, 7, 6, 1, 161, 2, 237, 63, 7, 3, 1, 161, + 2, 237, 63, 7, 6, 1, 161, 2, 252, 106, 7, 3, 1, 161, 2, 252, 106, 7, 6, + 1, 161, 2, 56, 46, 7, 3, 1, 161, 2, 56, 46, 7, 6, 1, 161, 2, 234, 84, 7, + 3, 1, 161, 2, 234, 84, 7, 6, 1, 161, 2, 252, 5, 7, 3, 1, 161, 2, 252, 5, + 7, 6, 1, 246, 196, 2, 251, 101, 7, 3, 1, 246, 196, 2, 251, 101, 7, 6, 1, + 246, 196, 2, 252, 106, 7, 3, 1, 246, 196, 2, 252, 106, 7, 6, 1, 246, 196, + 2, 56, 46, 7, 3, 1, 246, 196, 2, 56, 46, 7, 6, 1, 246, 196, 2, 251, 226, + 7, 3, 1, 246, 196, 2, 251, 226, 7, 6, 1, 245, 172, 2, 251, 101, 7, 3, 1, + 245, 172, 2, 251, 101, 7, 6, 1, 245, 172, 2, 82, 7, 3, 1, 245, 172, 2, + 82, 7, 6, 1, 244, 81, 2, 205, 7, 3, 1, 244, 81, 2, 205, 7, 6, 1, 244, 81, + 2, 237, 63, 7, 3, 1, 244, 81, 2, 237, 63, 7, 6, 1, 244, 81, 2, 252, 106, + 7, 3, 1, 244, 81, 2, 252, 106, 7, 6, 1, 244, 81, 2, 234, 84, 7, 3, 1, + 244, 81, 2, 234, 84, 7, 6, 1, 244, 81, 2, 56, 46, 7, 3, 1, 249, 139, 74, + 7, 6, 20, 240, 45, 7, 3, 20, 240, 45, 7, 6, 1, 239, 183, 2, 251, 101, 7, + 3, 1, 239, 183, 2, 251, 101, 7, 6, 1, 239, 77, 2, 251, 226, 7, 3, 1, 239, + 77, 2, 251, 226, 7, 3, 1, 238, 117, 7, 6, 1, 238, 47, 2, 155, 7, 3, 1, + 238, 47, 2, 155, 7, 6, 1, 238, 47, 2, 251, 226, 7, 3, 1, 238, 47, 2, 251, + 226, 7, 6, 1, 238, 47, 2, 252, 5, 7, 3, 1, 238, 47, 2, 252, 5, 7, 6, 1, + 238, 47, 2, 236, 154, 249, 140, 7, 3, 1, 238, 47, 2, 236, 154, 249, 140, + 7, 6, 1, 238, 47, 2, 82, 7, 3, 1, 238, 47, 2, 82, 7, 6, 1, 236, 5, 2, + 155, 7, 3, 1, 236, 5, 2, 155, 7, 6, 1, 236, 5, 2, 251, 226, 7, 3, 1, 236, + 5, 2, 251, 226, 7, 6, 1, 236, 5, 2, 252, 5, 7, 3, 1, 236, 5, 2, 252, 5, + 7, 3, 1, 236, 5, 232, 215, 252, 55, 254, 144, 7, 6, 1, 247, 228, 7, 3, 1, + 247, 228, 7, 6, 1, 130, 2, 237, 63, 7, 3, 1, 130, 2, 237, 63, 7, 6, 1, + 130, 2, 252, 106, 7, 3, 1, 130, 2, 252, 106, 7, 6, 1, 130, 2, 47, 155, 7, + 3, 1, 130, 2, 47, 155, 7, 6, 20, 234, 88, 7, 3, 20, 234, 88, 7, 6, 1, + 232, 27, 2, 155, 7, 3, 1, 232, 27, 2, 155, 7, 6, 1, 232, 27, 2, 251, 226, + 7, 3, 1, 232, 27, 2, 251, 226, 7, 6, 1, 232, 27, 2, 252, 5, 7, 3, 1, 232, + 27, 2, 252, 5, 7, 6, 1, 231, 35, 2, 155, 7, 3, 1, 231, 35, 2, 155, 7, 6, + 1, 231, 35, 2, 251, 101, 7, 3, 1, 231, 35, 2, 251, 101, 7, 6, 1, 231, 35, + 2, 251, 226, 7, 3, 1, 231, 35, 2, 251, 226, 7, 6, 1, 231, 35, 2, 252, 5, + 7, 3, 1, 231, 35, 2, 252, 5, 7, 6, 1, 227, 110, 2, 251, 226, 7, 3, 1, + 227, 110, 2, 251, 226, 7, 6, 1, 227, 110, 2, 252, 5, 7, 3, 1, 227, 110, + 2, 252, 5, 7, 6, 1, 227, 110, 2, 82, 7, 3, 1, 227, 110, 2, 82, 7, 6, 1, + 97, 2, 205, 7, 3, 1, 97, 2, 205, 7, 6, 1, 97, 2, 237, 63, 7, 3, 1, 97, 2, + 237, 63, 7, 6, 1, 97, 2, 252, 106, 7, 3, 1, 97, 2, 252, 106, 7, 6, 1, 97, + 2, 231, 140, 46, 7, 3, 1, 97, 2, 231, 140, 46, 7, 6, 1, 97, 2, 47, 155, + 7, 3, 1, 97, 2, 47, 155, 7, 6, 1, 97, 2, 234, 84, 7, 3, 1, 97, 2, 234, + 84, 7, 6, 1, 224, 175, 2, 251, 101, 7, 3, 1, 224, 175, 2, 251, 101, 7, 6, + 1, 224, 26, 2, 251, 101, 7, 3, 1, 224, 26, 2, 251, 101, 7, 6, 1, 224, 26, + 2, 219, 7, 6, 1, 223, 120, 2, 155, 7, 3, 1, 223, 120, 2, 155, 7, 6, 1, + 223, 120, 2, 56, 46, 7, 3, 1, 223, 120, 2, 56, 46, 7, 6, 1, 223, 120, 2, + 252, 5, 7, 3, 1, 223, 120, 2, 252, 5, 7, 3, 1, 182, 193, 7, 3, 1, 45, 2, + 82, 7, 6, 1, 45, 2, 88, 7, 6, 1, 45, 2, 226, 103, 7, 3, 1, 45, 2, 226, + 103, 7, 6, 1, 206, 183, 7, 3, 1, 206, 183, 7, 6, 1, 234, 44, 73, 7, 6, 1, + 252, 45, 2, 88, 7, 3, 1, 252, 45, 2, 88, 7, 6, 1, 255, 10, 222, 222, 7, + 6, 1, 250, 192, 2, 88, 7, 6, 1, 250, 192, 2, 226, 103, 7, 3, 1, 250, 192, + 2, 226, 103, 7, 3, 1, 209, 250, 47, 7, 6, 1, 200, 72, 7, 6, 1, 230, 222, + 7, 6, 1, 234, 44, 72, 7, 6, 1, 247, 131, 2, 88, 7, 3, 1, 247, 131, 2, 88, + 7, 6, 1, 246, 196, 2, 88, 7, 6, 1, 246, 169, 7, 3, 1, 244, 128, 7, 6, 1, + 239, 215, 7, 6, 1, 244, 81, 2, 82, 7, 6, 1, 239, 77, 2, 88, 7, 3, 1, 239, + 77, 2, 88, 7, 3, 1, 238, 47, 2, 125, 7, 3, 1, 238, 18, 2, 82, 7, 6, 1, + 209, 185, 7, 6, 1, 236, 5, 2, 42, 88, 7, 3, 1, 236, 5, 2, 182, 41, 237, + 229, 7, 6, 1, 130, 2, 236, 154, 205, 7, 6, 1, 130, 2, 244, 160, 7, 3, 1, + 130, 2, 244, 160, 7, 6, 1, 234, 80, 7, 3, 1, 234, 80, 7, 6, 1, 233, 245, + 2, 88, 7, 3, 1, 233, 245, 2, 88, 7, 1, 223, 160, 7, 6, 1, 206, 113, 7, 3, + 1, 206, 113, 7, 6, 1, 247, 183, 7, 1, 200, 247, 184, 237, 124, 7, 3, 1, + 227, 110, 2, 233, 229, 88, 7, 6, 1, 227, 110, 2, 88, 7, 3, 1, 227, 110, + 2, 88, 7, 6, 1, 227, 110, 2, 231, 196, 88, 7, 6, 1, 97, 2, 244, 160, 7, + 3, 1, 97, 2, 244, 160, 7, 6, 1, 225, 110, 7, 6, 1, 225, 65, 2, 88, 7, 6, + 1, 224, 26, 2, 88, 7, 3, 1, 224, 26, 2, 88, 7, 6, 1, 223, 120, 2, 82, 7, + 3, 1, 223, 120, 2, 82, 7, 6, 1, 247, 132, 7, 6, 1, 247, 133, 231, 192, 7, + 3, 1, 247, 133, 231, 192, 7, 3, 1, 247, 133, 2, 227, 89, 7, 1, 135, 2, + 82, 7, 6, 1, 206, 173, 7, 3, 1, 206, 173, 7, 1, 239, 223, 246, 16, 228, + 39, 2, 82, 7, 1, 224, 75, 7, 1, 250, 41, 251, 89, 7, 1, 238, 2, 251, 89, + 7, 1, 254, 200, 251, 89, 7, 1, 231, 196, 251, 89, 7, 6, 1, 248, 72, 2, + 252, 5, 7, 6, 1, 250, 192, 2, 3, 1, 223, 120, 2, 252, 5, 7, 3, 1, 248, + 72, 2, 252, 5, 7, 6, 1, 237, 152, 7, 6, 1, 238, 47, 2, 3, 1, 239, 182, 7, + 3, 1, 237, 152, 7, 6, 1, 235, 50, 7, 6, 1, 236, 5, 2, 3, 1, 239, 182, 7, + 3, 1, 235, 50, 7, 6, 1, 102, 2, 252, 5, 7, 3, 1, 102, 2, 252, 5, 7, 6, 1, + 244, 81, 2, 252, 5, 7, 3, 1, 244, 81, 2, 252, 5, 7, 6, 1, 130, 2, 252, 5, + 7, 3, 1, 130, 2, 252, 5, 7, 6, 1, 97, 2, 252, 5, 7, 3, 1, 97, 2, 252, 5, + 7, 6, 1, 97, 2, 250, 3, 22, 237, 63, 7, 3, 1, 97, 2, 250, 3, 22, 237, 63, + 7, 6, 1, 97, 2, 250, 3, 22, 155, 7, 3, 1, 97, 2, 250, 3, 22, 155, 7, 6, + 1, 97, 2, 250, 3, 22, 252, 5, 7, 3, 1, 97, 2, 250, 3, 22, 252, 5, 7, 6, + 1, 97, 2, 250, 3, 22, 245, 236, 7, 3, 1, 97, 2, 250, 3, 22, 245, 236, 7, + 3, 1, 209, 72, 7, 6, 1, 102, 2, 250, 3, 22, 237, 63, 7, 3, 1, 102, 2, + 250, 3, 22, 237, 63, 7, 6, 1, 102, 2, 56, 64, 22, 237, 63, 7, 3, 1, 102, + 2, 56, 64, 22, 237, 63, 7, 6, 1, 255, 20, 2, 237, 63, 7, 3, 1, 255, 20, + 2, 237, 63, 7, 6, 1, 246, 196, 2, 82, 7, 3, 1, 246, 196, 2, 82, 7, 6, 1, + 246, 196, 2, 252, 5, 7, 3, 1, 246, 196, 2, 252, 5, 7, 6, 1, 239, 77, 2, + 252, 5, 7, 3, 1, 239, 77, 2, 252, 5, 7, 6, 1, 130, 2, 234, 84, 7, 3, 1, + 130, 2, 234, 84, 7, 6, 1, 130, 2, 234, 85, 22, 237, 63, 7, 3, 1, 130, 2, + 234, 85, 22, 237, 63, 7, 6, 1, 247, 133, 2, 252, 5, 7, 3, 1, 247, 133, 2, + 252, 5, 7, 3, 1, 239, 183, 2, 252, 5, 7, 6, 1, 248, 71, 7, 6, 1, 250, + 192, 2, 3, 1, 223, 119, 7, 3, 1, 248, 71, 7, 6, 1, 246, 196, 2, 155, 7, + 3, 1, 246, 196, 2, 155, 7, 6, 1, 244, 126, 7, 6, 1, 224, 75, 7, 6, 1, + 236, 5, 2, 245, 236, 7, 3, 1, 236, 5, 2, 245, 236, 7, 6, 1, 102, 2, 231, + 140, 64, 22, 155, 7, 3, 1, 102, 2, 231, 140, 64, 22, 155, 7, 6, 1, 255, + 20, 2, 155, 7, 3, 1, 255, 20, 2, 155, 7, 6, 1, 130, 2, 195, 22, 155, 7, + 3, 1, 130, 2, 195, 22, 155, 7, 6, 1, 102, 2, 47, 245, 236, 7, 3, 1, 102, + 2, 47, 245, 236, 7, 6, 1, 102, 2, 239, 223, 252, 106, 7, 3, 1, 102, 2, + 239, 223, 252, 106, 7, 6, 1, 161, 2, 47, 245, 236, 7, 3, 1, 161, 2, 47, + 245, 236, 7, 6, 1, 161, 2, 239, 223, 252, 106, 7, 3, 1, 161, 2, 239, 223, + 252, 106, 7, 6, 1, 244, 81, 2, 47, 245, 236, 7, 3, 1, 244, 81, 2, 47, + 245, 236, 7, 6, 1, 244, 81, 2, 239, 223, 252, 106, 7, 3, 1, 244, 81, 2, + 239, 223, 252, 106, 7, 6, 1, 130, 2, 47, 245, 236, 7, 3, 1, 130, 2, 47, + 245, 236, 7, 6, 1, 130, 2, 239, 223, 252, 106, 7, 3, 1, 130, 2, 239, 223, + 252, 106, 7, 6, 1, 232, 27, 2, 47, 245, 236, 7, 3, 1, 232, 27, 2, 47, + 245, 236, 7, 6, 1, 232, 27, 2, 239, 223, 252, 106, 7, 3, 1, 232, 27, 2, + 239, 223, 252, 106, 7, 6, 1, 97, 2, 47, 245, 236, 7, 3, 1, 97, 2, 47, + 245, 236, 7, 6, 1, 97, 2, 239, 223, 252, 106, 7, 3, 1, 97, 2, 239, 223, + 252, 106, 7, 6, 1, 231, 35, 2, 251, 55, 51, 7, 3, 1, 231, 35, 2, 251, 55, + 51, 7, 6, 1, 227, 110, 2, 251, 55, 51, 7, 3, 1, 227, 110, 2, 251, 55, 51, + 7, 6, 1, 223, 174, 7, 3, 1, 223, 174, 7, 6, 1, 245, 172, 2, 252, 5, 7, 3, + 1, 245, 172, 2, 252, 5, 7, 6, 1, 236, 5, 2, 182, 41, 237, 229, 7, 3, 1, + 250, 192, 2, 250, 224, 7, 6, 1, 234, 13, 7, 3, 1, 234, 13, 7, 6, 1, 223, + 120, 2, 88, 7, 3, 1, 223, 120, 2, 88, 7, 6, 1, 102, 2, 56, 46, 7, 3, 1, + 102, 2, 56, 46, 7, 6, 1, 161, 2, 251, 226, 7, 3, 1, 161, 2, 251, 226, 7, + 6, 1, 130, 2, 250, 3, 22, 237, 63, 7, 3, 1, 130, 2, 250, 3, 22, 237, 63, + 7, 6, 1, 130, 2, 226, 159, 22, 237, 63, 7, 3, 1, 130, 2, 226, 159, 22, + 237, 63, 7, 6, 1, 130, 2, 56, 46, 7, 3, 1, 130, 2, 56, 46, 7, 6, 1, 130, + 2, 56, 64, 22, 237, 63, 7, 3, 1, 130, 2, 56, 64, 22, 237, 63, 7, 6, 1, + 224, 26, 2, 237, 63, 7, 3, 1, 224, 26, 2, 237, 63, 7, 3, 1, 238, 47, 2, + 250, 224, 7, 3, 1, 236, 5, 2, 250, 224, 7, 3, 1, 227, 110, 2, 250, 224, + 7, 3, 1, 249, 139, 239, 182, 7, 3, 1, 250, 119, 249, 223, 7, 3, 1, 232, + 85, 249, 223, 7, 6, 1, 102, 2, 82, 7, 6, 1, 252, 45, 2, 82, 7, 3, 1, 252, + 45, 2, 82, 7, 6, 1, 238, 47, 2, 125, 7, 6, 1, 227, 110, 2, 250, 1, 82, 7, + 3, 1, 231, 35, 2, 227, 197, 227, 89, 7, 3, 1, 223, 120, 2, 227, 197, 227, + 89, 7, 6, 1, 246, 16, 228, 38, 7, 3, 1, 246, 16, 228, 38, 7, 6, 1, 45, 2, + 82, 7, 6, 1, 97, 125, 7, 6, 1, 209, 196, 7, 6, 1, 161, 2, 82, 7, 3, 1, + 161, 2, 82, 7, 6, 1, 239, 183, 2, 82, 7, 3, 1, 239, 183, 2, 82, 7, 6, 1, + 3, 232, 140, 2, 244, 217, 227, 89, 7, 3, 1, 232, 140, 2, 244, 217, 227, + 89, 7, 6, 1, 232, 27, 2, 82, 7, 3, 1, 232, 27, 2, 82, 7, 6, 1, 224, 26, + 2, 82, 7, 3, 1, 224, 26, 2, 82, 7, 3, 1, 209, 57, 7, 3, 1, 254, 205, 7, + 3, 1, 209, 254, 205, 7, 3, 1, 45, 2, 88, 7, 3, 1, 234, 44, 73, 7, 3, 1, + 252, 45, 2, 250, 224, 7, 3, 1, 250, 192, 2, 227, 89, 7, 3, 1, 250, 192, + 2, 88, 7, 3, 1, 200, 72, 7, 3, 1, 230, 222, 7, 3, 1, 230, 223, 2, 88, 7, + 3, 1, 234, 44, 72, 7, 3, 1, 200, 234, 44, 72, 7, 3, 1, 200, 234, 44, 161, + 2, 88, 7, 3, 1, 251, 82, 200, 234, 44, 72, 7, 3, 1, 249, 139, 239, 183, + 2, 82, 7, 3, 1, 246, 196, 2, 88, 7, 3, 1, 95, 214, 7, 1, 3, 6, 214, 7, 3, + 1, 246, 169, 7, 3, 1, 232, 4, 244, 160, 7, 3, 1, 209, 212, 7, 3, 1, 245, + 172, 2, 88, 7, 3, 1, 245, 99, 2, 88, 7, 3, 1, 244, 81, 2, 82, 7, 3, 1, + 239, 215, 7, 1, 3, 6, 74, 7, 3, 1, 238, 47, 2, 236, 154, 205, 7, 3, 1, + 238, 47, 2, 252, 212, 7, 3, 1, 238, 47, 2, 231, 196, 88, 7, 3, 1, 237, + 207, 7, 3, 1, 209, 185, 7, 3, 1, 209, 237, 69, 2, 182, 237, 229, 7, 3, 1, + 237, 69, 2, 88, 7, 3, 1, 236, 5, 2, 42, 88, 7, 3, 1, 236, 5, 2, 231, 196, + 88, 7, 1, 3, 6, 199, 7, 3, 1, 253, 31, 73, 7, 1, 3, 6, 234, 88, 7, 3, 1, + 251, 82, 234, 66, 7, 3, 1, 233, 87, 7, 3, 1, 209, 146, 7, 3, 1, 209, 232, + 27, 2, 182, 237, 229, 7, 3, 1, 209, 232, 27, 2, 88, 7, 3, 1, 232, 27, 2, + 182, 237, 229, 7, 3, 1, 232, 27, 2, 227, 89, 7, 3, 1, 232, 27, 2, 247, + 40, 7, 3, 1, 200, 232, 27, 2, 247, 40, 7, 1, 3, 6, 146, 7, 1, 3, 6, 239, + 223, 146, 7, 3, 1, 231, 35, 2, 88, 7, 3, 1, 247, 183, 7, 3, 1, 249, 139, + 239, 183, 2, 195, 22, 88, 7, 3, 1, 228, 116, 200, 247, 183, 7, 3, 1, 247, + 184, 2, 250, 224, 7, 3, 1, 209, 227, 109, 7, 3, 1, 227, 110, 2, 231, 196, + 88, 7, 3, 1, 97, 125, 7, 3, 1, 225, 110, 7, 3, 1, 225, 65, 2, 88, 7, 3, + 1, 209, 196, 7, 3, 1, 209, 224, 174, 7, 3, 1, 209, 224, 25, 7, 1, 3, 6, + 224, 25, 7, 3, 1, 223, 120, 2, 231, 196, 88, 7, 3, 1, 223, 120, 2, 250, + 224, 7, 3, 1, 247, 132, 7, 3, 1, 247, 133, 2, 250, 224, 7, 1, 246, 16, + 228, 38, 7, 1, 233, 91, 224, 204, 246, 227, 7, 1, 239, 223, 246, 16, 228, + 38, 7, 1, 228, 26, 252, 44, 7, 1, 252, 171, 251, 89, 7, 1, 3, 6, 254, 27, + 7, 3, 1, 251, 82, 234, 44, 72, 7, 1, 3, 6, 246, 196, 2, 88, 7, 1, 3, 6, + 212, 7, 3, 1, 239, 183, 2, 250, 240, 7, 3, 1, 209, 239, 76, 7, 1, 3, 6, + 149, 7, 3, 1, 232, 140, 2, 88, 7, 1, 246, 16, 228, 39, 2, 82, 7, 1, 200, + 246, 16, 228, 39, 2, 82, 7, 3, 1, 248, 72, 249, 223, 7, 3, 1, 250, 23, + 249, 223, 7, 3, 1, 248, 72, 249, 224, 2, 250, 224, 7, 3, 1, 226, 46, 249, + 223, 7, 3, 1, 227, 15, 249, 223, 7, 3, 1, 227, 51, 249, 224, 2, 250, 224, + 7, 3, 1, 247, 79, 249, 223, 7, 3, 1, 237, 112, 249, 223, 7, 3, 1, 237, + 70, 249, 223, 7, 1, 252, 171, 233, 122, 7, 1, 252, 178, 233, 122, 7, 3, + 1, 209, 245, 172, 2, 247, 40, 7, 3, 1, 209, 245, 172, 2, 247, 41, 22, + 227, 89, 52, 1, 3, 212, 52, 1, 3, 245, 172, 2, 88, 52, 1, 3, 239, 182, + 52, 1, 3, 146, 52, 1, 3, 209, 146, 52, 1, 3, 209, 232, 27, 2, 88, 52, 1, + 3, 6, 239, 223, 146, 52, 1, 3, 224, 174, 52, 1, 3, 224, 25, 52, 1, 232, + 205, 52, 1, 47, 232, 205, 52, 1, 209, 251, 54, 52, 1, 254, 144, 52, 1, + 200, 251, 54, 52, 1, 41, 132, 231, 139, 52, 1, 42, 132, 231, 139, 52, 1, + 246, 16, 228, 38, 52, 1, 200, 246, 16, 228, 38, 52, 1, 42, 254, 93, 52, + 1, 41, 254, 93, 52, 1, 99, 254, 93, 52, 1, 103, 254, 93, 52, 1, 251, 102, + 255, 41, 252, 5, 52, 1, 61, 237, 170, 52, 1, 237, 63, 52, 1, 255, 33, + 255, 41, 52, 1, 245, 237, 255, 41, 52, 1, 184, 61, 237, 170, 52, 1, 184, + 237, 63, 52, 1, 184, 245, 237, 255, 41, 52, 1, 184, 255, 33, 255, 41, 52, + 1, 226, 75, 251, 61, 52, 1, 132, 226, 75, 251, 61, 52, 1, 251, 217, 41, + 132, 231, 139, 52, 1, 251, 217, 42, 132, 231, 139, 52, 1, 99, 227, 96, + 52, 1, 103, 227, 96, 52, 1, 79, 53, 52, 1, 236, 121, 53, 252, 106, 56, + 46, 231, 140, 46, 234, 84, 3, 205, 47, 255, 33, 255, 41, 52, 1, 231, 181, + 88, 52, 1, 250, 244, 255, 41, 52, 1, 3, 246, 169, 52, 1, 3, 149, 52, 1, + 3, 193, 52, 1, 3, 224, 73, 52, 1, 3, 200, 246, 16, 228, 38, 52, 1, 247, + 140, 206, 125, 52, 1, 201, 206, 125, 52, 1, 236, 155, 206, 125, 52, 1, + 184, 206, 125, 52, 1, 247, 139, 206, 125, 52, 1, 223, 193, 250, 38, 206, + 76, 52, 1, 223, 249, 250, 38, 206, 76, 52, 1, 224, 202, 52, 1, 225, 136, + 52, 1, 47, 254, 144, 52, 1, 184, 103, 254, 93, 52, 1, 184, 99, 254, 93, + 52, 1, 184, 42, 254, 93, 52, 1, 184, 41, 254, 93, 52, 1, 184, 231, 139, + 52, 1, 236, 154, 245, 237, 255, 41, 52, 1, 236, 154, 47, 245, 237, 255, + 41, 52, 1, 236, 154, 47, 255, 33, 255, 41, 52, 1, 184, 205, 52, 1, 232, + 8, 251, 61, 52, 1, 252, 226, 201, 226, 118, 52, 1, 247, 233, 201, 226, + 118, 52, 1, 252, 226, 184, 226, 118, 52, 1, 247, 233, 184, 226, 118, 52, + 1, 229, 105, 52, 1, 234, 44, 229, 105, 52, 1, 184, 42, 58, 36, 245, 237, + 255, 41, 36, 255, 33, 255, 41, 36, 251, 102, 255, 41, 36, 205, 36, 237, + 63, 36, 234, 1, 36, 252, 106, 36, 56, 46, 36, 219, 36, 244, 217, 46, 36, + 231, 140, 46, 36, 47, 255, 33, 255, 41, 36, 252, 5, 36, 61, 237, 171, 46, + 36, 47, 61, 237, 171, 46, 36, 47, 245, 237, 255, 41, 36, 252, 19, 36, + 239, 223, 252, 106, 36, 209, 251, 55, 46, 36, 251, 55, 46, 36, 200, 251, + 55, 46, 36, 251, 55, 64, 231, 153, 36, 245, 237, 255, 42, 51, 36, 255, + 33, 255, 42, 51, 36, 42, 227, 97, 51, 36, 41, 227, 97, 51, 36, 42, 254, + 182, 46, 36, 244, 160, 36, 42, 132, 231, 140, 51, 36, 99, 227, 97, 51, + 36, 103, 227, 97, 51, 36, 79, 5, 51, 36, 236, 121, 5, 51, 36, 233, 227, + 244, 217, 51, 36, 231, 196, 244, 217, 51, 36, 56, 51, 36, 250, 3, 51, 36, + 231, 140, 51, 36, 251, 55, 51, 36, 251, 226, 36, 234, 84, 36, 61, 237, + 171, 51, 36, 252, 102, 51, 36, 239, 223, 47, 254, 121, 51, 36, 252, 6, + 51, 36, 251, 102, 255, 42, 51, 36, 252, 107, 51, 36, 239, 223, 252, 107, + 51, 36, 226, 159, 51, 36, 237, 64, 51, 36, 184, 237, 170, 36, 47, 184, + 237, 170, 36, 226, 159, 234, 2, 36, 229, 63, 195, 234, 2, 36, 182, 195, + 234, 2, 36, 229, 63, 228, 162, 234, 2, 36, 182, 228, 162, 234, 2, 36, 41, + 132, 231, 140, 51, 36, 239, 223, 252, 102, 51, 36, 37, 51, 36, 230, 212, + 51, 36, 224, 74, 46, 36, 61, 205, 36, 47, 234, 1, 36, 245, 237, 206, 76, + 36, 255, 33, 206, 76, 36, 19, 233, 117, 36, 19, 238, 132, 36, 19, 249, + 254, 226, 109, 36, 19, 223, 165, 36, 252, 102, 46, 36, 247, 204, 5, 51, + 36, 47, 61, 237, 171, 51, 36, 42, 254, 182, 51, 36, 190, 226, 159, 46, + 36, 244, 221, 46, 36, 254, 210, 105, 180, 46, 36, 42, 41, 67, 51, 36, + 225, 106, 67, 51, 36, 245, 241, 239, 112, 36, 41, 254, 94, 46, 36, 42, + 132, 231, 140, 46, 36, 247, 76, 36, 224, 74, 51, 36, 42, 254, 94, 51, 36, + 41, 254, 94, 51, 36, 41, 254, 94, 22, 99, 254, 94, 51, 36, 41, 132, 231, + 140, 46, 36, 56, 64, 231, 153, 36, 254, 70, 51, 36, 47, 231, 140, 51, 36, + 223, 38, 46, 36, 47, 252, 107, 51, 36, 47, 252, 106, 36, 47, 237, 63, 36, + 47, 237, 64, 51, 36, 47, 205, 36, 47, 239, 223, 252, 106, 36, 47, 81, 67, + 51, 36, 7, 3, 1, 57, 36, 7, 3, 1, 72, 36, 7, 3, 1, 74, 36, 7, 3, 1, 73, + 36, 7, 3, 1, 66, 36, 7, 3, 1, 252, 44, 36, 7, 3, 1, 222, 222, 36, 7, 3, + 1, 212, 36, 7, 3, 1, 185, 36, 7, 3, 1, 146, 36, 7, 3, 1, 227, 109, 36, 7, + 3, 1, 196, 36, 7, 3, 1, 224, 73, 19, 6, 1, 245, 89, 19, 3, 1, 245, 89, + 19, 6, 1, 254, 120, 230, 255, 19, 3, 1, 254, 120, 230, 255, 19, 207, 53, + 19, 203, 207, 53, 19, 6, 1, 233, 215, 249, 230, 19, 3, 1, 233, 215, 249, + 230, 19, 223, 165, 19, 3, 200, 237, 99, 229, 3, 98, 19, 3, 248, 138, 237, + 99, 229, 3, 98, 19, 3, 200, 248, 138, 237, 99, 229, 3, 98, 19, 232, 69, + 76, 19, 226, 109, 19, 249, 254, 226, 109, 19, 6, 1, 254, 206, 2, 226, + 109, 19, 254, 173, 227, 30, 19, 6, 1, 247, 207, 2, 226, 109, 19, 6, 1, + 247, 172, 2, 226, 109, 19, 6, 1, 239, 216, 2, 226, 109, 19, 6, 1, 234, + 65, 2, 226, 109, 19, 6, 1, 225, 111, 2, 226, 109, 19, 6, 1, 234, 67, 2, + 226, 109, 19, 3, 1, 239, 216, 2, 249, 254, 22, 226, 109, 19, 6, 1, 254, + 205, 19, 6, 1, 252, 198, 19, 6, 1, 246, 169, 19, 6, 1, 250, 47, 19, 6, 1, + 247, 206, 19, 6, 1, 223, 88, 19, 6, 1, 247, 171, 19, 6, 1, 226, 223, 19, + 6, 1, 239, 215, 19, 6, 1, 239, 35, 19, 6, 1, 238, 16, 19, 6, 1, 236, 66, + 19, 6, 1, 234, 206, 19, 6, 1, 224, 64, 19, 6, 1, 234, 64, 19, 6, 1, 233, + 69, 19, 6, 1, 231, 182, 19, 6, 1, 229, 2, 19, 6, 1, 227, 61, 19, 6, 1, + 225, 110, 19, 6, 1, 233, 87, 19, 6, 1, 251, 169, 19, 6, 1, 232, 183, 19, + 6, 1, 234, 66, 19, 6, 1, 239, 216, 2, 249, 253, 19, 6, 1, 225, 111, 2, + 249, 253, 19, 3, 1, 254, 206, 2, 226, 109, 19, 3, 1, 247, 207, 2, 226, + 109, 19, 3, 1, 247, 172, 2, 226, 109, 19, 3, 1, 239, 216, 2, 226, 109, + 19, 3, 1, 225, 111, 2, 249, 254, 22, 226, 109, 19, 3, 1, 254, 205, 19, 3, + 1, 252, 198, 19, 3, 1, 246, 169, 19, 3, 1, 250, 47, 19, 3, 1, 247, 206, + 19, 3, 1, 223, 88, 19, 3, 1, 247, 171, 19, 3, 1, 226, 223, 19, 3, 1, 239, + 215, 19, 3, 1, 239, 35, 19, 3, 1, 238, 16, 19, 3, 1, 236, 66, 19, 3, 1, + 234, 206, 19, 3, 1, 224, 64, 19, 3, 1, 234, 64, 19, 3, 1, 233, 69, 19, 3, + 1, 231, 182, 19, 3, 1, 35, 229, 2, 19, 3, 1, 229, 2, 19, 3, 1, 227, 61, + 19, 3, 1, 225, 110, 19, 3, 1, 233, 87, 19, 3, 1, 251, 169, 19, 3, 1, 232, + 183, 19, 3, 1, 234, 66, 19, 3, 1, 239, 216, 2, 249, 253, 19, 3, 1, 225, + 111, 2, 249, 253, 19, 3, 1, 234, 65, 2, 226, 109, 19, 3, 1, 225, 111, 2, + 226, 109, 19, 3, 1, 234, 67, 2, 226, 109, 19, 6, 239, 57, 98, 19, 252, + 199, 98, 19, 226, 224, 98, 19, 225, 111, 2, 244, 217, 98, 19, 225, 111, + 2, 255, 33, 22, 244, 217, 98, 19, 225, 111, 2, 250, 3, 22, 244, 217, 98, + 19, 233, 88, 98, 19, 233, 70, 98, 19, 239, 57, 98, 19, 1, 254, 120, 238, + 135, 19, 3, 1, 254, 120, 238, 135, 19, 1, 228, 46, 19, 3, 1, 228, 46, 19, + 1, 249, 230, 19, 3, 1, 249, 230, 19, 1, 238, 135, 19, 3, 1, 238, 135, 19, + 1, 230, 255, 19, 3, 1, 230, 255, 70, 6, 1, 229, 106, 70, 3, 1, 229, 106, + 70, 6, 1, 247, 85, 70, 3, 1, 247, 85, 70, 6, 1, 238, 215, 70, 3, 1, 238, + 215, 70, 6, 1, 244, 213, 70, 3, 1, 244, 213, 70, 6, 1, 246, 165, 70, 3, + 1, 246, 165, 70, 6, 1, 229, 80, 70, 3, 1, 229, 80, 70, 6, 1, 250, 60, 70, + 3, 1, 250, 60, 19, 239, 36, 98, 19, 231, 183, 98, 19, 237, 99, 229, 3, + 98, 19, 1, 223, 169, 19, 6, 226, 224, 98, 19, 237, 99, 247, 207, 98, 19, + 200, 237, 99, 247, 207, 98, 19, 6, 1, 229, 71, 19, 3, 1, 229, 71, 19, 6, + 237, 99, 229, 3, 98, 19, 6, 1, 230, 253, 19, 3, 1, 230, 253, 19, 231, + 183, 2, 195, 98, 19, 6, 200, 237, 99, 229, 3, 98, 19, 6, 248, 138, 237, + 99, 229, 3, 98, 19, 6, 200, 248, 138, 237, 99, 229, 3, 98, 28, 6, 1, 240, + 73, 2, 245, 236, 28, 6, 1, 239, 219, 28, 6, 1, 249, 176, 28, 6, 1, 246, + 21, 28, 6, 1, 225, 150, 240, 72, 28, 6, 1, 248, 69, 28, 6, 1, 252, 53, + 74, 28, 6, 1, 223, 202, 28, 6, 1, 239, 170, 28, 6, 1, 237, 151, 28, 6, 1, + 235, 48, 28, 6, 1, 226, 36, 28, 6, 1, 238, 169, 28, 6, 1, 244, 81, 2, + 245, 236, 28, 6, 1, 229, 63, 66, 28, 6, 1, 248, 65, 28, 6, 1, 57, 28, 6, + 1, 252, 238, 28, 6, 1, 225, 42, 28, 6, 1, 246, 58, 28, 6, 1, 250, 77, 28, + 6, 1, 240, 72, 28, 6, 1, 223, 77, 28, 6, 1, 223, 97, 28, 6, 1, 74, 28, 6, + 1, 229, 63, 74, 28, 6, 1, 177, 28, 6, 1, 248, 2, 28, 6, 1, 247, 247, 28, + 6, 1, 247, 239, 28, 6, 1, 73, 28, 6, 1, 233, 151, 28, 6, 1, 247, 198, 28, + 6, 1, 247, 188, 28, 6, 1, 227, 44, 28, 6, 1, 66, 28, 6, 1, 248, 29, 28, + 6, 1, 154, 28, 6, 1, 226, 40, 28, 6, 1, 251, 182, 28, 6, 1, 229, 146, 28, + 6, 1, 229, 116, 28, 6, 1, 245, 140, 53, 28, 6, 1, 223, 213, 28, 6, 1, + 228, 165, 53, 28, 6, 1, 72, 28, 6, 1, 223, 158, 28, 6, 1, 191, 28, 3, 1, + 57, 28, 3, 1, 252, 238, 28, 3, 1, 225, 42, 28, 3, 1, 246, 58, 28, 3, 1, + 250, 77, 28, 3, 1, 240, 72, 28, 3, 1, 223, 77, 28, 3, 1, 223, 97, 28, 3, + 1, 74, 28, 3, 1, 229, 63, 74, 28, 3, 1, 177, 28, 3, 1, 248, 2, 28, 3, 1, + 247, 247, 28, 3, 1, 247, 239, 28, 3, 1, 73, 28, 3, 1, 233, 151, 28, 3, 1, + 247, 198, 28, 3, 1, 247, 188, 28, 3, 1, 227, 44, 28, 3, 1, 66, 28, 3, 1, + 248, 29, 28, 3, 1, 154, 28, 3, 1, 226, 40, 28, 3, 1, 251, 182, 28, 3, 1, + 229, 146, 28, 3, 1, 229, 116, 28, 3, 1, 245, 140, 53, 28, 3, 1, 223, 213, + 28, 3, 1, 228, 165, 53, 28, 3, 1, 72, 28, 3, 1, 223, 158, 28, 3, 1, 191, + 28, 3, 1, 240, 73, 2, 245, 236, 28, 3, 1, 239, 219, 28, 3, 1, 249, 176, + 28, 3, 1, 246, 21, 28, 3, 1, 225, 150, 240, 72, 28, 3, 1, 248, 69, 28, 3, + 1, 252, 53, 74, 28, 3, 1, 223, 202, 28, 3, 1, 239, 170, 28, 3, 1, 237, + 151, 28, 3, 1, 235, 48, 28, 3, 1, 226, 36, 28, 3, 1, 238, 169, 28, 3, 1, + 244, 81, 2, 245, 236, 28, 3, 1, 229, 63, 66, 28, 3, 1, 248, 65, 28, 6, 1, + 234, 66, 28, 3, 1, 234, 66, 28, 6, 1, 223, 239, 28, 3, 1, 223, 239, 28, + 6, 1, 239, 213, 72, 28, 3, 1, 239, 213, 72, 28, 6, 1, 237, 155, 223, 139, + 28, 3, 1, 237, 155, 223, 139, 28, 6, 1, 239, 213, 237, 155, 223, 139, 28, + 3, 1, 239, 213, 237, 155, 223, 139, 28, 6, 1, 252, 173, 223, 139, 28, 3, + 1, 252, 173, 223, 139, 28, 6, 1, 239, 213, 252, 173, 223, 139, 28, 3, 1, + 239, 213, 252, 173, 223, 139, 28, 6, 1, 238, 111, 28, 3, 1, 238, 111, 28, + 6, 1, 232, 183, 28, 3, 1, 232, 183, 28, 6, 1, 247, 38, 28, 3, 1, 247, 38, + 28, 6, 1, 239, 184, 28, 3, 1, 239, 184, 28, 6, 1, 239, 185, 2, 47, 245, + 237, 255, 41, 28, 3, 1, 239, 185, 2, 47, 245, 237, 255, 41, 28, 6, 1, + 225, 153, 28, 3, 1, 225, 153, 28, 6, 1, 231, 104, 234, 66, 28, 3, 1, 231, + 104, 234, 66, 28, 6, 1, 234, 67, 2, 226, 143, 28, 3, 1, 234, 67, 2, 226, + 143, 28, 6, 1, 234, 19, 28, 3, 1, 234, 19, 28, 6, 1, 238, 135, 28, 3, 1, + 238, 135, 28, 226, 193, 53, 36, 28, 226, 143, 36, 28, 233, 228, 36, 28, + 172, 233, 6, 36, 28, 186, 233, 6, 36, 28, 232, 248, 36, 28, 244, 136, + 226, 193, 53, 36, 28, 236, 128, 53, 28, 6, 1, 229, 63, 244, 81, 2, 227, + 89, 28, 3, 1, 229, 63, 244, 81, 2, 227, 89, 28, 6, 1, 229, 182, 53, 28, + 3, 1, 229, 182, 53, 28, 6, 1, 247, 199, 2, 226, 172, 28, 3, 1, 247, 199, + 2, 226, 172, 28, 6, 1, 246, 59, 2, 225, 109, 28, 3, 1, 246, 59, 2, 225, + 109, 28, 6, 1, 246, 59, 2, 82, 28, 3, 1, 246, 59, 2, 82, 28, 6, 1, 246, + 59, 2, 236, 154, 88, 28, 3, 1, 246, 59, 2, 236, 154, 88, 28, 6, 1, 223, + 78, 2, 250, 34, 28, 3, 1, 223, 78, 2, 250, 34, 28, 6, 1, 223, 98, 2, 250, + 34, 28, 3, 1, 223, 98, 2, 250, 34, 28, 6, 1, 188, 2, 250, 34, 28, 3, 1, + 188, 2, 250, 34, 28, 6, 1, 188, 2, 61, 82, 28, 3, 1, 188, 2, 61, 82, 28, + 6, 1, 188, 2, 82, 28, 3, 1, 188, 2, 82, 28, 6, 1, 253, 23, 177, 28, 3, 1, + 253, 23, 177, 28, 6, 1, 247, 240, 2, 250, 34, 28, 3, 1, 247, 240, 2, 250, + 34, 28, 6, 20, 247, 240, 246, 58, 28, 3, 20, 247, 240, 246, 58, 28, 6, 1, + 233, 152, 2, 236, 154, 88, 28, 3, 1, 233, 152, 2, 236, 154, 88, 28, 6, 1, + 255, 47, 154, 28, 3, 1, 255, 47, 154, 28, 6, 1, 247, 189, 2, 250, 34, 28, + 3, 1, 247, 189, 2, 250, 34, 28, 6, 1, 227, 45, 2, 250, 34, 28, 3, 1, 227, + 45, 2, 250, 34, 28, 6, 1, 228, 32, 66, 28, 3, 1, 228, 32, 66, 28, 6, 1, + 228, 32, 97, 2, 82, 28, 3, 1, 228, 32, 97, 2, 82, 28, 6, 1, 245, 170, 2, + 250, 34, 28, 3, 1, 245, 170, 2, 250, 34, 28, 6, 20, 227, 45, 226, 40, 28, + 3, 20, 227, 45, 226, 40, 28, 6, 1, 251, 183, 2, 250, 34, 28, 3, 1, 251, + 183, 2, 250, 34, 28, 6, 1, 251, 183, 2, 61, 82, 28, 3, 1, 251, 183, 2, + 61, 82, 28, 6, 1, 229, 91, 28, 3, 1, 229, 91, 28, 6, 1, 255, 47, 251, + 182, 28, 3, 1, 255, 47, 251, 182, 28, 6, 1, 255, 47, 251, 183, 2, 250, + 34, 28, 3, 1, 255, 47, 251, 183, 2, 250, 34, 28, 1, 233, 222, 28, 6, 1, + 223, 78, 2, 252, 106, 28, 3, 1, 223, 78, 2, 252, 106, 28, 6, 1, 188, 2, + 88, 28, 3, 1, 188, 2, 88, 28, 6, 1, 248, 3, 2, 227, 89, 28, 3, 1, 248, 3, + 2, 227, 89, 28, 6, 1, 247, 240, 2, 88, 28, 3, 1, 247, 240, 2, 88, 28, 6, + 1, 247, 240, 2, 227, 89, 28, 3, 1, 247, 240, 2, 227, 89, 28, 6, 1, 238, + 223, 251, 182, 28, 3, 1, 238, 223, 251, 182, 28, 6, 1, 247, 248, 2, 227, + 89, 28, 3, 1, 247, 248, 2, 227, 89, 28, 3, 1, 233, 222, 28, 6, 1, 102, 2, + 252, 106, 28, 3, 1, 102, 2, 252, 106, 28, 6, 1, 102, 2, 219, 28, 3, 1, + 102, 2, 219, 28, 6, 20, 102, 240, 72, 28, 3, 20, 102, 240, 72, 28, 6, 1, + 240, 73, 2, 252, 106, 28, 3, 1, 240, 73, 2, 252, 106, 28, 6, 1, 230, 222, + 28, 3, 1, 230, 222, 28, 6, 1, 230, 223, 2, 219, 28, 3, 1, 230, 223, 2, + 219, 28, 6, 1, 223, 78, 2, 219, 28, 3, 1, 223, 78, 2, 219, 28, 6, 1, 223, + 98, 2, 219, 28, 3, 1, 223, 98, 2, 219, 28, 6, 1, 255, 47, 248, 69, 28, 3, + 1, 255, 47, 248, 69, 28, 6, 1, 244, 81, 2, 237, 63, 28, 3, 1, 244, 81, 2, + 237, 63, 28, 6, 1, 244, 81, 2, 219, 28, 3, 1, 244, 81, 2, 219, 28, 6, 1, + 130, 2, 219, 28, 3, 1, 130, 2, 219, 28, 6, 1, 253, 31, 73, 28, 3, 1, 253, + 31, 73, 28, 6, 1, 253, 31, 130, 2, 219, 28, 3, 1, 253, 31, 130, 2, 219, + 28, 6, 1, 161, 2, 219, 28, 3, 1, 161, 2, 219, 28, 6, 1, 97, 2, 237, 63, + 28, 3, 1, 97, 2, 237, 63, 28, 6, 1, 97, 2, 219, 28, 3, 1, 97, 2, 219, 28, + 6, 1, 97, 2, 47, 155, 28, 3, 1, 97, 2, 47, 155, 28, 6, 1, 251, 183, 2, + 219, 28, 3, 1, 251, 183, 2, 219, 28, 6, 1, 246, 59, 2, 250, 34, 28, 3, 1, + 246, 59, 2, 250, 34, 28, 6, 1, 223, 214, 2, 219, 28, 3, 1, 223, 214, 2, + 219, 28, 6, 1, 246, 59, 2, 195, 22, 88, 28, 3, 1, 246, 59, 2, 195, 22, + 88, 28, 6, 1, 245, 170, 2, 88, 28, 3, 1, 245, 170, 2, 88, 28, 6, 1, 245, + 170, 2, 82, 28, 3, 1, 245, 170, 2, 82, 28, 6, 1, 238, 143, 250, 77, 28, + 3, 1, 238, 143, 250, 77, 28, 6, 1, 238, 143, 249, 176, 28, 3, 1, 238, + 143, 249, 176, 28, 6, 1, 238, 143, 223, 31, 28, 3, 1, 238, 143, 223, 31, + 28, 6, 1, 238, 143, 248, 63, 28, 3, 1, 238, 143, 248, 63, 28, 6, 1, 238, + 143, 237, 151, 28, 3, 1, 238, 143, 237, 151, 28, 6, 1, 238, 143, 235, 48, + 28, 3, 1, 238, 143, 235, 48, 28, 6, 1, 238, 143, 228, 204, 28, 3, 1, 238, + 143, 228, 204, 28, 6, 1, 238, 143, 226, 139, 28, 3, 1, 238, 143, 226, + 139, 28, 6, 1, 200, 223, 97, 28, 3, 1, 200, 223, 97, 28, 6, 1, 248, 3, 2, + 88, 28, 3, 1, 248, 3, 2, 88, 28, 6, 1, 237, 205, 28, 3, 1, 237, 205, 28, + 6, 1, 231, 184, 28, 3, 1, 231, 184, 28, 6, 1, 224, 10, 28, 3, 1, 224, 10, + 28, 6, 1, 232, 138, 28, 3, 1, 232, 138, 28, 6, 1, 224, 141, 28, 3, 1, + 224, 141, 28, 6, 1, 254, 224, 177, 28, 3, 1, 254, 224, 177, 28, 6, 1, + 248, 3, 2, 236, 154, 88, 28, 3, 1, 248, 3, 2, 236, 154, 88, 28, 6, 1, + 247, 240, 2, 236, 154, 88, 28, 3, 1, 247, 240, 2, 236, 154, 88, 120, 6, + 1, 254, 31, 120, 6, 1, 252, 210, 120, 6, 1, 246, 36, 120, 6, 1, 250, 189, + 120, 6, 1, 248, 39, 120, 6, 1, 223, 117, 120, 6, 1, 248, 24, 120, 6, 1, + 247, 173, 120, 6, 1, 96, 120, 6, 1, 223, 77, 120, 6, 1, 239, 252, 120, 6, + 1, 237, 154, 120, 6, 1, 224, 67, 120, 6, 1, 252, 39, 120, 6, 1, 238, 243, + 120, 6, 1, 244, 227, 120, 6, 1, 239, 179, 120, 6, 1, 246, 65, 120, 6, 1, + 251, 178, 120, 6, 1, 236, 210, 120, 6, 1, 223, 202, 120, 6, 1, 234, 232, + 120, 6, 1, 229, 146, 120, 6, 1, 224, 206, 120, 6, 1, 251, 204, 120, 6, 1, + 233, 140, 120, 6, 1, 239, 158, 120, 6, 1, 208, 120, 6, 1, 230, 196, 120, + 6, 1, 224, 230, 120, 6, 1, 226, 141, 120, 6, 1, 231, 225, 120, 6, 1, 251, + 68, 120, 6, 1, 223, 188, 120, 6, 1, 233, 27, 120, 6, 1, 238, 253, 120, 6, + 1, 234, 83, 120, 6, 1, 247, 87, 120, 52, 1, 42, 132, 231, 139, 120, 254, + 144, 120, 247, 243, 76, 120, 247, 149, 76, 120, 251, 54, 120, 232, 69, + 76, 120, 255, 48, 76, 120, 3, 1, 254, 31, 120, 3, 1, 252, 210, 120, 3, 1, + 246, 36, 120, 3, 1, 250, 189, 120, 3, 1, 248, 39, 120, 3, 1, 223, 117, + 120, 3, 1, 248, 24, 120, 3, 1, 247, 173, 120, 3, 1, 96, 120, 3, 1, 223, + 77, 120, 3, 1, 239, 252, 120, 3, 1, 237, 154, 120, 3, 1, 224, 67, 120, 3, + 1, 252, 39, 120, 3, 1, 238, 243, 120, 3, 1, 244, 227, 120, 3, 1, 239, + 179, 120, 3, 1, 246, 65, 120, 3, 1, 251, 178, 120, 3, 1, 236, 210, 120, + 3, 1, 223, 202, 120, 3, 1, 234, 232, 120, 3, 1, 229, 146, 120, 3, 1, 224, + 206, 120, 3, 1, 251, 204, 120, 3, 1, 233, 140, 120, 3, 1, 239, 158, 120, + 3, 1, 208, 120, 3, 1, 230, 196, 120, 3, 1, 224, 230, 120, 3, 1, 226, 141, + 120, 3, 1, 231, 225, 120, 3, 1, 251, 68, 120, 3, 1, 223, 188, 120, 3, 1, + 233, 27, 120, 3, 1, 238, 253, 120, 3, 1, 234, 83, 120, 3, 1, 247, 87, + 120, 3, 20, 248, 40, 223, 188, 120, 246, 218, 228, 38, 120, 244, 95, 78, + 255, 42, 247, 166, 78, 255, 42, 230, 197, 78, 255, 42, 229, 133, 78, 255, + 42, 223, 106, 232, 121, 78, 255, 42, 223, 106, 246, 183, 78, 255, 42, + 226, 149, 78, 255, 42, 231, 191, 78, 255, 42, 223, 105, 78, 255, 42, 233, + 171, 78, 255, 42, 223, 208, 78, 255, 42, 227, 1, 78, 255, 42, 246, 112, + 78, 255, 42, 246, 113, 236, 38, 78, 255, 42, 246, 110, 78, 255, 42, 232, + 122, 233, 193, 78, 255, 42, 227, 27, 246, 126, 78, 255, 42, 233, 155, 78, + 255, 42, 254, 60, 245, 163, 78, 255, 42, 236, 47, 78, 255, 42, 237, 53, + 78, 255, 42, 236, 206, 78, 255, 42, 236, 207, 238, 254, 78, 255, 42, 250, + 137, 78, 255, 42, 232, 133, 78, 255, 42, 227, 27, 232, 117, 78, 255, 42, + 223, 216, 252, 211, 223, 173, 78, 255, 42, 234, 72, 78, 255, 42, 240, 33, + 78, 255, 42, 250, 61, 78, 255, 42, 223, 36, 78, 165, 237, 5, 251, 106, + 78, 232, 255, 229, 93, 78, 232, 255, 245, 131, 230, 197, 78, 232, 255, + 245, 131, 233, 166, 78, 232, 255, 245, 131, 232, 126, 78, 232, 255, 245, + 58, 78, 232, 255, 226, 38, 78, 232, 255, 230, 197, 78, 232, 255, 233, + 166, 78, 232, 255, 232, 126, 78, 232, 255, 244, 223, 78, 232, 255, 244, + 224, 245, 133, 32, 225, 46, 78, 232, 255, 232, 72, 78, 232, 255, 250, + 176, 145, 237, 27, 78, 232, 255, 236, 198, 78, 232, 171, 237, 26, 78, + 232, 255, 232, 14, 78, 232, 171, 233, 172, 78, 232, 255, 229, 79, 249, + 140, 78, 232, 255, 228, 244, 249, 140, 78, 232, 171, 228, 166, 233, 168, + 78, 165, 225, 113, 249, 140, 78, 165, 203, 249, 140, 78, 232, 171, 234, + 195, 245, 162, 78, 232, 255, 232, 127, 232, 121, 78, 1, 254, 227, 78, 1, + 252, 200, 78, 1, 246, 34, 78, 1, 250, 160, 78, 1, 245, 121, 78, 1, 225, + 46, 78, 1, 223, 99, 78, 1, 245, 90, 78, 1, 227, 10, 78, 1, 223, 175, 78, + 1, 35, 239, 59, 78, 1, 239, 59, 78, 1, 238, 12, 78, 1, 35, 236, 215, 78, + 1, 236, 215, 78, 1, 35, 234, 194, 78, 1, 234, 194, 78, 1, 231, 2, 78, 1, + 254, 29, 78, 1, 35, 233, 151, 78, 1, 233, 151, 78, 1, 35, 226, 41, 78, 1, + 226, 41, 78, 1, 232, 92, 78, 1, 231, 205, 78, 1, 229, 78, 78, 1, 227, 58, + 78, 20, 223, 200, 47, 225, 46, 78, 20, 223, 200, 225, 47, 223, 175, 78, + 20, 223, 200, 47, 223, 175, 78, 232, 171, 246, 112, 78, 232, 171, 246, + 110, 10, 65, 53, 10, 5, 230, 252, 10, 247, 1, 237, 13, 10, 5, 231, 21, + 254, 131, 250, 232, 231, 111, 254, 131, 246, 237, 231, 111, 10, 231, 250, + 254, 131, 233, 124, 236, 130, 53, 254, 131, 233, 124, 227, 24, 226, 195, + 53, 255, 12, 53, 10, 251, 54, 10, 250, 125, 229, 173, 10, 233, 1, 225, + 32, 53, 10, 5, 236, 113, 10, 5, 231, 8, 254, 229, 224, 156, 10, 5, 254, + 229, 254, 74, 10, 5, 232, 13, 254, 228, 10, 5, 232, 17, 254, 214, 254, + 178, 10, 5, 227, 82, 10, 3, 201, 227, 91, 10, 3, 201, 20, 92, 2, 216, 2, + 223, 224, 10, 3, 201, 223, 110, 10, 3, 247, 104, 10, 3, 250, 156, 10, 3, + 239, 23, 10, 229, 186, 10, 226, 66, 56, 232, 171, 76, 10, 232, 69, 76, + 10, 1, 245, 149, 10, 1, 92, 2, 237, 59, 46, 10, 1, 92, 2, 164, 46, 10, 1, + 224, 145, 2, 164, 46, 10, 1, 92, 2, 164, 51, 10, 1, 62, 2, 164, 46, 10, + 1, 254, 227, 10, 1, 252, 223, 10, 1, 227, 35, 237, 22, 10, 1, 227, 34, + 10, 1, 226, 236, 10, 1, 239, 168, 10, 1, 245, 159, 10, 1, 238, 225, 10, + 1, 250, 165, 10, 1, 226, 245, 10, 1, 231, 225, 10, 1, 223, 110, 10, 1, + 230, 201, 10, 1, 229, 110, 10, 1, 231, 24, 10, 1, 250, 184, 10, 1, 227, + 91, 10, 1, 223, 113, 10, 1, 254, 248, 10, 1, 246, 63, 10, 1, 238, 252, 2, + 135, 197, 46, 10, 1, 238, 252, 2, 152, 197, 51, 10, 1, 247, 107, 62, 2, + 239, 223, 196, 10, 1, 247, 107, 62, 2, 135, 197, 46, 10, 1, 247, 107, 62, + 2, 152, 197, 46, 10, 227, 63, 10, 1, 247, 87, 10, 1, 232, 131, 10, 1, + 239, 59, 10, 1, 238, 20, 10, 1, 236, 225, 10, 1, 234, 251, 10, 1, 245, + 107, 10, 1, 224, 144, 10, 1, 92, 237, 41, 10, 1, 223, 224, 10, 247, 102, + 10, 250, 154, 10, 239, 21, 10, 247, 104, 10, 250, 156, 10, 239, 23, 10, + 229, 137, 10, 227, 234, 10, 237, 57, 46, 10, 164, 46, 10, 164, 51, 10, + 227, 253, 254, 227, 10, 239, 223, 250, 156, 10, 165, 234, 252, 246, 50, + 10, 223, 5, 10, 31, 5, 3, 225, 65, 46, 10, 31, 5, 239, 223, 3, 225, 65, + 46, 10, 31, 5, 56, 51, 10, 200, 250, 156, 10, 247, 105, 2, 135, 249, 138, + 254, 131, 21, 223, 89, 254, 131, 21, 118, 254, 131, 21, 113, 254, 131, + 21, 166, 254, 131, 21, 158, 254, 131, 21, 173, 254, 131, 21, 183, 254, + 131, 21, 194, 254, 131, 21, 187, 254, 131, 21, 192, 10, 233, 123, 53, 10, + 250, 71, 229, 173, 10, 226, 193, 229, 173, 10, 247, 37, 232, 253, 228, + 58, 10, 1, 249, 139, 252, 223, 10, 1, 249, 139, 232, 131, 10, 1, 227, + 219, 254, 227, 10, 1, 92, 224, 157, 10, 1, 92, 2, 224, 146, 164, 46, 10, + 1, 92, 2, 224, 146, 164, 51, 10, 1, 201, 245, 149, 10, 1, 201, 164, 254, + 227, 10, 1, 201, 164, 224, 144, 10, 1, 97, 2, 164, 46, 10, 1, 201, 164, + 223, 224, 10, 1, 226, 14, 10, 1, 226, 12, 10, 1, 252, 230, 10, 1, 227, + 35, 2, 231, 139, 10, 1, 227, 35, 2, 152, 197, 64, 248, 124, 10, 1, 233, + 140, 10, 1, 227, 32, 10, 1, 252, 221, 10, 1, 101, 2, 164, 46, 10, 1, 101, + 2, 135, 197, 61, 46, 10, 1, 234, 166, 10, 1, 248, 75, 10, 1, 101, 2, 152, + 197, 46, 10, 1, 227, 48, 10, 1, 227, 46, 10, 1, 250, 112, 10, 1, 250, + 166, 2, 231, 139, 10, 1, 250, 166, 2, 56, 51, 10, 1, 250, 166, 2, 56, + 252, 214, 22, 3, 227, 91, 10, 1, 250, 171, 10, 1, 250, 114, 10, 1, 248, + 99, 10, 1, 250, 166, 2, 152, 197, 64, 248, 124, 10, 1, 250, 166, 2, 246, + 243, 197, 46, 10, 1, 231, 95, 10, 1, 231, 226, 2, 3, 196, 10, 1, 231, + 226, 2, 231, 139, 10, 1, 231, 226, 2, 56, 51, 10, 1, 231, 226, 2, 3, 225, + 65, 51, 10, 1, 231, 226, 2, 56, 252, 214, 22, 56, 46, 10, 1, 231, 226, 2, + 135, 197, 46, 10, 1, 239, 165, 10, 1, 231, 226, 2, 246, 243, 197, 46, 10, + 1, 230, 202, 2, 56, 252, 214, 22, 56, 46, 10, 1, 230, 202, 2, 152, 197, + 51, 10, 1, 230, 202, 2, 152, 197, 252, 214, 22, 152, 197, 46, 10, 1, 231, + 25, 2, 135, 197, 51, 10, 1, 231, 25, 2, 152, 197, 46, 10, 1, 227, 92, 2, + 152, 197, 46, 10, 1, 254, 249, 2, 152, 197, 46, 10, 1, 249, 139, 247, 87, + 10, 1, 247, 88, 2, 56, 236, 71, 51, 10, 1, 247, 88, 2, 56, 51, 10, 1, + 225, 36, 10, 1, 247, 88, 2, 152, 197, 51, 10, 1, 233, 138, 10, 1, 232, + 132, 2, 56, 46, 10, 1, 232, 132, 2, 152, 197, 46, 10, 1, 238, 251, 10, 1, + 227, 197, 239, 59, 10, 1, 239, 60, 2, 231, 139, 10, 1, 239, 60, 2, 56, + 46, 10, 1, 235, 139, 10, 1, 239, 60, 2, 152, 197, 51, 10, 1, 246, 180, + 10, 1, 246, 181, 2, 231, 139, 10, 1, 235, 105, 10, 1, 246, 181, 2, 135, + 197, 51, 10, 1, 245, 210, 10, 1, 246, 181, 2, 152, 197, 46, 10, 1, 216, + 2, 3, 196, 10, 1, 216, 2, 56, 46, 10, 1, 216, 2, 152, 197, 46, 10, 1, + 216, 2, 152, 197, 51, 10, 1, 234, 252, 2, 56, 51, 10, 1, 234, 252, 246, + 50, 10, 1, 231, 125, 10, 1, 234, 252, 2, 231, 139, 10, 1, 234, 252, 2, + 152, 197, 46, 10, 1, 245, 108, 249, 157, 10, 1, 227, 49, 2, 56, 46, 10, + 1, 245, 108, 2, 62, 46, 10, 1, 245, 108, 246, 8, 10, 1, 245, 108, 246, 9, + 2, 164, 46, 10, 1, 227, 35, 237, 23, 246, 8, 10, 1, 224, 145, 2, 231, + 139, 10, 1, 238, 185, 234, 88, 10, 1, 234, 88, 10, 1, 66, 10, 1, 223, + 158, 10, 1, 238, 185, 223, 158, 10, 1, 224, 145, 2, 135, 197, 46, 10, 1, + 225, 42, 10, 1, 247, 107, 223, 224, 10, 1, 62, 2, 227, 89, 10, 1, 62, 2, + 3, 196, 10, 1, 224, 145, 2, 56, 46, 10, 1, 72, 10, 1, 62, 2, 152, 197, + 51, 10, 1, 62, 253, 29, 10, 1, 62, 253, 30, 2, 164, 46, 10, 246, 218, + 228, 38, 10, 1, 255, 19, 10, 3, 201, 20, 231, 25, 2, 216, 2, 92, 237, 41, + 10, 3, 201, 20, 232, 132, 2, 216, 2, 92, 237, 41, 10, 3, 201, 55, 59, 15, + 10, 3, 201, 216, 254, 227, 10, 3, 201, 239, 168, 10, 3, 201, 152, 249, + 138, 10, 3, 201, 230, 201, 10, 247, 233, 106, 254, 33, 10, 228, 56, 106, + 231, 68, 248, 3, 245, 56, 10, 3, 201, 231, 102, 223, 89, 10, 3, 201, 225, + 112, 231, 235, 223, 89, 10, 3, 201, 249, 139, 245, 119, 106, 238, 225, + 10, 3, 201, 55, 44, 15, 10, 3, 184, 230, 201, 10, 3, 201, 237, 58, 10, 3, + 224, 144, 10, 3, 223, 224, 10, 3, 201, 223, 224, 10, 3, 201, 234, 251, + 10, 233, 23, 106, 231, 14, 10, 247, 241, 251, 219, 184, 228, 38, 10, 247, + 241, 251, 219, 201, 228, 38, 10, 231, 102, 201, 228, 39, 2, 247, 53, 251, + 218, 10, 3, 184, 236, 225, 10, 1, 250, 166, 2, 239, 223, 196, 10, 1, 231, + 226, 2, 239, 223, 196, 247, 142, 254, 131, 21, 223, 89, 247, 142, 254, + 131, 21, 118, 247, 142, 254, 131, 21, 113, 247, 142, 254, 131, 21, 166, + 247, 142, 254, 131, 21, 158, 247, 142, 254, 131, 21, 173, 247, 142, 254, + 131, 21, 183, 247, 142, 254, 131, 21, 194, 247, 142, 254, 131, 21, 187, + 247, 142, 254, 131, 21, 192, 10, 1, 229, 111, 2, 56, 51, 10, 1, 250, 185, + 2, 56, 51, 10, 1, 246, 64, 2, 56, 51, 10, 5, 228, 243, 254, 193, 10, 5, + 228, 243, 232, 236, 236, 210, 10, 1, 245, 108, 2, 239, 223, 196, 151, + 247, 233, 106, 233, 191, 151, 227, 215, 246, 218, 228, 38, 151, 227, 255, + 246, 218, 228, 38, 151, 227, 215, 251, 61, 151, 227, 255, 251, 61, 151, + 169, 251, 61, 151, 251, 62, 228, 202, 237, 237, 151, 251, 62, 228, 202, + 231, 153, 151, 227, 215, 251, 62, 228, 202, 237, 237, 151, 227, 255, 251, + 62, 228, 202, 231, 153, 151, 251, 20, 151, 245, 138, 234, 99, 151, 245, + 138, 236, 197, 151, 245, 138, 254, 71, 151, 255, 48, 76, 151, 1, 254, + 230, 151, 1, 227, 219, 254, 230, 151, 1, 252, 197, 151, 1, 246, 172, 151, + 1, 246, 173, 246, 156, 151, 1, 250, 163, 151, 1, 249, 139, 250, 164, 231, + 136, 151, 1, 245, 121, 151, 1, 224, 144, 151, 1, 223, 110, 151, 1, 245, + 88, 151, 1, 227, 6, 151, 1, 227, 7, 246, 156, 151, 1, 223, 148, 151, 1, + 223, 149, 245, 121, 151, 1, 239, 38, 151, 1, 238, 19, 151, 1, 236, 127, + 151, 1, 234, 194, 151, 1, 229, 179, 151, 1, 35, 229, 179, 151, 1, 72, + 151, 1, 233, 151, 151, 1, 200, 233, 151, 151, 1, 231, 22, 151, 1, 232, + 125, 151, 1, 231, 136, 151, 1, 229, 78, 151, 1, 227, 56, 151, 1, 233, + 113, 252, 187, 151, 1, 233, 113, 246, 61, 151, 1, 233, 113, 250, 19, 151, + 232, 174, 46, 151, 232, 174, 51, 151, 232, 174, 248, 137, 151, 223, 21, + 46, 151, 223, 21, 51, 151, 223, 21, 248, 137, 151, 231, 247, 46, 151, + 231, 247, 51, 151, 248, 138, 223, 28, 244, 212, 151, 248, 138, 223, 28, + 254, 179, 151, 245, 124, 46, 151, 245, 124, 51, 151, 245, 123, 248, 137, + 151, 247, 186, 46, 151, 247, 186, 51, 151, 231, 44, 151, 247, 81, 249, + 140, 151, 232, 51, 151, 231, 66, 151, 135, 61, 197, 46, 151, 135, 61, + 197, 51, 151, 152, 197, 46, 151, 152, 197, 51, 151, 234, 97, 237, 171, + 46, 151, 234, 97, 237, 171, 51, 151, 236, 28, 151, 253, 28, 151, 1, 228, + 163, 223, 83, 151, 1, 228, 163, 238, 219, 151, 1, 228, 163, 247, 97, 10, + 1, 252, 224, 2, 152, 197, 244, 162, 51, 10, 1, 252, 224, 2, 56, 252, 214, + 22, 152, 197, 46, 10, 1, 252, 224, 2, 152, 197, 232, 251, 225, 106, 51, + 10, 1, 252, 224, 2, 152, 197, 232, 251, 225, 106, 252, 214, 22, 135, 197, + 46, 10, 1, 252, 224, 2, 135, 197, 252, 214, 22, 56, 46, 10, 1, 252, 224, + 2, 239, 223, 3, 225, 65, 51, 10, 1, 252, 224, 2, 3, 196, 10, 1, 101, 2, + 135, 197, 46, 10, 1, 101, 2, 152, 197, 232, 251, 225, 106, 51, 10, 1, + 250, 166, 2, 135, 197, 224, 236, 252, 214, 22, 3, 227, 91, 10, 1, 250, + 166, 2, 239, 223, 3, 225, 65, 51, 10, 1, 231, 226, 2, 82, 10, 1, 230, + 202, 2, 246, 243, 197, 46, 10, 1, 254, 249, 2, 135, 197, 46, 10, 1, 254, + 249, 2, 152, 197, 232, 251, 248, 125, 46, 10, 1, 254, 249, 2, 135, 197, + 224, 236, 46, 10, 1, 247, 88, 2, 135, 197, 51, 10, 1, 247, 88, 2, 152, + 197, 232, 251, 225, 106, 51, 10, 1, 238, 252, 2, 56, 46, 10, 1, 238, 252, + 2, 152, 197, 46, 10, 1, 238, 252, 2, 152, 197, 232, 251, 225, 106, 51, + 10, 1, 55, 2, 56, 46, 10, 1, 55, 2, 56, 51, 10, 1, 234, 252, 2, 135, 197, + 51, 10, 1, 234, 252, 2, 3, 227, 91, 10, 1, 234, 252, 2, 3, 196, 10, 1, + 216, 2, 125, 10, 1, 231, 226, 2, 135, 197, 224, 236, 46, 10, 1, 231, 226, + 2, 164, 46, 10, 1, 230, 202, 2, 135, 197, 224, 236, 46, 10, 1, 101, 2, 3, + 10, 1, 227, 92, 51, 10, 1, 101, 2, 3, 10, 1, 227, 92, 22, 135, 249, 138, + 10, 1, 230, 202, 2, 3, 10, 1, 227, 92, 22, 135, 249, 138, 10, 1, 231, + 226, 2, 3, 10, 1, 227, 92, 22, 135, 249, 138, 10, 1, 101, 2, 3, 10, 1, + 227, 92, 46, 10, 1, 92, 2, 247, 142, 254, 131, 21, 135, 46, 10, 1, 92, 2, + 247, 142, 254, 131, 21, 152, 46, 10, 1, 247, 107, 62, 2, 247, 142, 254, + 131, 21, 135, 46, 10, 1, 247, 107, 62, 2, 247, 142, 254, 131, 21, 152, + 46, 10, 1, 247, 107, 62, 2, 247, 142, 254, 131, 21, 246, 243, 51, 10, 1, + 224, 145, 2, 247, 142, 254, 131, 21, 135, 46, 10, 1, 224, 145, 2, 247, + 142, 254, 131, 21, 152, 46, 10, 1, 62, 253, 30, 2, 247, 142, 254, 131, + 21, 135, 46, 10, 1, 62, 253, 30, 2, 247, 142, 254, 131, 21, 152, 46, 10, + 1, 101, 2, 247, 142, 254, 131, 21, 246, 243, 51, 10, 1, 230, 202, 2, 247, + 142, 254, 131, 21, 246, 243, 46, 10, 1, 230, 202, 2, 239, 223, 196, 10, + 1, 239, 60, 2, 135, 197, 46, 226, 248, 1, 245, 167, 226, 248, 1, 229, + 118, 226, 248, 1, 234, 250, 226, 248, 1, 232, 22, 226, 248, 1, 253, 69, + 226, 248, 1, 237, 202, 226, 248, 1, 239, 70, 226, 248, 1, 254, 219, 226, + 248, 1, 225, 62, 226, 248, 1, 236, 224, 226, 248, 1, 247, 127, 226, 248, + 1, 250, 21, 226, 248, 1, 226, 250, 226, 248, 1, 238, 40, 226, 248, 1, + 246, 189, 226, 248, 1, 246, 14, 226, 248, 1, 230, 200, 226, 248, 1, 250, + 123, 226, 248, 1, 223, 102, 226, 248, 1, 227, 57, 226, 248, 1, 224, 21, + 226, 248, 1, 233, 161, 226, 248, 1, 239, 172, 226, 248, 1, 251, 185, 226, + 248, 1, 226, 19, 226, 248, 1, 245, 83, 226, 248, 1, 238, 226, 226, 248, + 1, 226, 249, 226, 248, 1, 223, 116, 226, 248, 1, 229, 109, 226, 248, 1, + 231, 28, 226, 248, 1, 250, 187, 226, 248, 1, 96, 226, 248, 1, 223, 27, + 226, 248, 1, 254, 246, 226, 248, 1, 246, 62, 226, 248, 1, 232, 135, 226, + 248, 1, 224, 171, 226, 248, 255, 49, 226, 248, 255, 62, 226, 248, 244, + 70, 226, 248, 248, 34, 226, 248, 225, 166, 226, 248, 234, 51, 226, 248, + 248, 41, 226, 248, 247, 137, 226, 248, 234, 96, 226, 248, 234, 104, 226, + 248, 227, 234, 226, 248, 1, 235, 254, 204, 21, 223, 89, 204, 21, 118, + 204, 21, 113, 204, 21, 166, 204, 21, 158, 204, 21, 173, 204, 21, 183, + 204, 21, 194, 204, 21, 187, 204, 21, 192, 204, 1, 57, 204, 1, 248, 35, + 204, 1, 74, 204, 1, 72, 204, 1, 66, 204, 1, 234, 52, 204, 1, 73, 204, 1, + 250, 177, 204, 1, 199, 204, 1, 253, 70, 204, 1, 213, 204, 1, 227, 107, + 204, 1, 239, 179, 204, 1, 251, 204, 204, 1, 250, 189, 204, 1, 208, 204, + 1, 231, 99, 204, 1, 231, 31, 204, 1, 246, 144, 204, 1, 247, 129, 204, 1, + 177, 204, 1, 238, 43, 204, 1, 236, 2, 224, 102, 204, 1, 198, 204, 1, 234, + 173, 204, 1, 236, 1, 204, 1, 154, 204, 1, 224, 173, 204, 1, 191, 204, 1, + 234, 174, 224, 102, 204, 1, 239, 110, 239, 179, 204, 1, 239, 110, 251, + 204, 204, 1, 239, 110, 208, 204, 36, 229, 63, 201, 226, 118, 204, 36, + 229, 63, 184, 226, 118, 204, 36, 229, 63, 231, 135, 226, 118, 204, 36, + 182, 250, 33, 226, 118, 204, 36, 182, 201, 226, 118, 204, 36, 182, 184, + 226, 118, 204, 36, 182, 231, 135, 226, 118, 204, 36, 235, 228, 76, 204, + 36, 47, 56, 46, 204, 201, 206, 254, 144, 204, 184, 206, 254, 144, 204, + 14, 234, 53, 250, 44, 204, 14, 246, 143, 204, 251, 54, 204, 247, 149, 76, + 204, 238, 25, 94, 5, 252, 19, 94, 5, 254, 160, 94, 5, 224, 211, 94, 1, + 229, 63, 57, 94, 1, 57, 94, 1, 255, 63, 94, 1, 74, 94, 1, 240, 47, 94, 1, + 66, 94, 1, 225, 76, 94, 1, 153, 146, 94, 1, 153, 149, 94, 1, 252, 21, 72, + 94, 1, 229, 63, 72, 94, 1, 72, 94, 1, 254, 253, 94, 1, 252, 21, 73, 94, + 1, 229, 63, 73, 94, 1, 73, 94, 1, 254, 53, 94, 1, 177, 94, 1, 238, 227, + 94, 1, 246, 193, 94, 1, 246, 66, 94, 1, 235, 137, 94, 1, 252, 39, 94, 1, + 251, 204, 94, 1, 239, 179, 94, 1, 239, 160, 94, 1, 234, 173, 94, 1, 226, + 20, 94, 1, 226, 10, 94, 1, 250, 117, 94, 1, 250, 101, 94, 1, 235, 18, 94, + 1, 227, 107, 94, 1, 226, 251, 94, 1, 250, 189, 94, 1, 250, 22, 94, 1, + 236, 1, 94, 1, 235, 10, 94, 1, 213, 94, 1, 233, 97, 94, 1, 253, 70, 94, + 1, 252, 190, 94, 1, 198, 94, 1, 191, 94, 1, 208, 94, 1, 231, 99, 94, 1, + 238, 43, 94, 1, 237, 148, 94, 1, 237, 147, 94, 1, 225, 64, 94, 1, 229, + 146, 94, 1, 228, 110, 94, 1, 231, 31, 94, 1, 154, 94, 5, 234, 202, 94, 5, + 254, 40, 94, 31, 5, 255, 63, 94, 31, 5, 74, 94, 31, 5, 240, 47, 94, 31, + 5, 66, 94, 31, 5, 225, 76, 94, 31, 5, 153, 146, 94, 31, 5, 153, 231, 100, + 94, 31, 5, 252, 21, 72, 94, 31, 5, 229, 63, 72, 94, 31, 5, 72, 94, 31, 5, + 254, 253, 94, 31, 5, 252, 21, 73, 94, 31, 5, 229, 63, 73, 94, 31, 5, 73, + 94, 31, 5, 254, 53, 94, 5, 224, 216, 94, 234, 69, 94, 228, 27, 5, 225, + 161, 94, 228, 27, 5, 254, 162, 94, 245, 237, 255, 41, 94, 255, 33, 255, + 41, 94, 1, 232, 138, 94, 1, 238, 214, 94, 1, 246, 56, 94, 1, 223, 117, + 94, 1, 250, 106, 94, 1, 231, 184, 94, 1, 247, 129, 94, 1, 223, 126, 94, + 1, 153, 231, 100, 94, 1, 153, 237, 149, 94, 31, 5, 153, 149, 94, 31, 5, + 153, 237, 149, 94, 250, 151, 94, 47, 250, 151, 94, 21, 223, 89, 94, 21, + 118, 94, 21, 113, 94, 21, 166, 94, 21, 158, 94, 21, 173, 94, 21, 183, 94, + 21, 194, 94, 21, 187, 94, 21, 192, 94, 255, 48, 53, 94, 5, 201, 228, 144, + 249, 140, 94, 1, 252, 21, 57, 94, 1, 246, 101, 94, 1, 239, 145, 94, 1, + 246, 16, 228, 38, 94, 1, 250, 107, 94, 1, 253, 16, 121, 5, 252, 19, 121, + 5, 254, 160, 121, 5, 224, 211, 121, 1, 57, 121, 1, 255, 63, 121, 1, 74, + 121, 1, 240, 47, 121, 1, 66, 121, 1, 225, 76, 121, 1, 153, 146, 121, 1, + 153, 149, 121, 1, 72, 121, 1, 254, 253, 121, 1, 73, 121, 1, 254, 53, 121, + 1, 177, 121, 1, 238, 227, 121, 1, 246, 193, 121, 1, 246, 66, 121, 1, 235, + 137, 121, 1, 252, 39, 121, 1, 251, 204, 121, 1, 239, 179, 121, 1, 239, + 160, 121, 1, 234, 173, 121, 1, 226, 20, 121, 1, 226, 10, 121, 1, 250, + 117, 121, 1, 250, 101, 121, 1, 235, 18, 121, 1, 227, 107, 121, 1, 226, + 251, 121, 1, 250, 189, 121, 1, 250, 22, 121, 1, 236, 1, 121, 1, 213, 121, + 1, 233, 97, 121, 1, 253, 70, 121, 1, 252, 190, 121, 1, 198, 121, 1, 191, + 121, 1, 208, 121, 1, 238, 43, 121, 1, 229, 146, 121, 1, 228, 110, 121, 1, + 231, 31, 121, 1, 154, 121, 5, 234, 202, 121, 5, 254, 40, 121, 31, 5, 255, + 63, 121, 31, 5, 74, 121, 31, 5, 240, 47, 121, 31, 5, 66, 121, 31, 5, 225, + 76, 121, 31, 5, 153, 146, 121, 31, 5, 153, 231, 100, 121, 31, 5, 72, 121, + 31, 5, 254, 253, 121, 31, 5, 73, 121, 31, 5, 254, 53, 121, 5, 224, 216, + 121, 1, 238, 221, 227, 107, 121, 254, 54, 237, 219, 76, 121, 1, 231, 99, + 121, 1, 231, 184, 121, 1, 223, 126, 121, 1, 153, 231, 100, 121, 1, 153, + 237, 149, 121, 31, 5, 153, 149, 121, 31, 5, 153, 237, 149, 121, 21, 223, + 89, 121, 21, 118, 121, 21, 113, 121, 21, 166, 121, 21, 158, 121, 21, 173, + 121, 21, 183, 121, 21, 194, 121, 21, 187, 121, 21, 192, 121, 1, 232, 25, + 2, 236, 154, 250, 0, 121, 1, 232, 25, 2, 203, 250, 0, 121, 231, 54, 76, + 121, 231, 54, 53, 121, 250, 222, 234, 197, 118, 121, 250, 222, 234, 197, + 113, 121, 250, 222, 234, 197, 166, 121, 250, 222, 234, 197, 158, 121, + 250, 222, 234, 197, 168, 237, 214, 226, 244, 226, 240, 250, 42, 121, 250, + 222, 250, 43, 228, 212, 121, 239, 196, 148, 5, 255, 28, 252, 169, 148, 5, + 252, 169, 148, 5, 224, 211, 148, 1, 57, 148, 1, 255, 63, 148, 1, 74, 148, + 1, 240, 47, 148, 1, 66, 148, 1, 225, 76, 148, 1, 248, 35, 148, 1, 254, + 253, 148, 1, 234, 52, 148, 1, 254, 53, 148, 1, 177, 148, 1, 238, 227, + 148, 1, 246, 193, 148, 1, 246, 66, 148, 1, 235, 137, 148, 1, 252, 39, + 148, 1, 251, 204, 148, 1, 239, 179, 148, 1, 239, 160, 148, 1, 234, 173, + 148, 1, 226, 20, 148, 1, 226, 10, 148, 1, 250, 117, 148, 1, 250, 101, + 148, 1, 235, 18, 148, 1, 227, 107, 148, 1, 226, 251, 148, 1, 250, 189, + 148, 1, 250, 22, 148, 1, 236, 1, 148, 1, 213, 148, 1, 233, 97, 148, 1, + 253, 70, 148, 1, 252, 190, 148, 1, 198, 148, 1, 191, 148, 1, 208, 148, 1, + 238, 43, 148, 1, 237, 148, 148, 1, 225, 64, 148, 1, 229, 146, 148, 1, + 231, 31, 148, 1, 154, 148, 5, 234, 202, 148, 31, 5, 255, 63, 148, 31, 5, + 74, 148, 31, 5, 240, 47, 148, 31, 5, 66, 148, 31, 5, 225, 76, 148, 31, 5, + 248, 35, 148, 31, 5, 254, 253, 148, 31, 5, 234, 52, 148, 31, 5, 254, 53, + 148, 5, 224, 216, 148, 5, 225, 162, 148, 1, 238, 214, 148, 1, 246, 56, + 148, 1, 223, 117, 148, 1, 231, 99, 148, 1, 247, 129, 148, 21, 223, 89, + 148, 21, 118, 148, 21, 113, 148, 21, 166, 148, 21, 158, 148, 21, 173, + 148, 21, 183, 148, 21, 194, 148, 21, 187, 148, 21, 192, 148, 226, 148, + 148, 255, 27, 148, 239, 209, 148, 225, 99, 148, 248, 9, 234, 57, 148, 5, + 224, 0, 137, 5, 252, 19, 137, 5, 254, 160, 137, 5, 224, 211, 137, 1, 57, + 137, 1, 255, 63, 137, 1, 74, 137, 1, 240, 47, 137, 1, 66, 137, 1, 225, + 76, 137, 1, 153, 146, 137, 1, 153, 149, 137, 31, 252, 21, 72, 137, 1, 72, + 137, 1, 254, 253, 137, 31, 252, 21, 73, 137, 1, 73, 137, 1, 254, 53, 137, + 1, 177, 137, 1, 238, 227, 137, 1, 246, 193, 137, 1, 246, 66, 137, 1, 235, + 137, 137, 1, 252, 39, 137, 1, 251, 204, 137, 1, 239, 179, 137, 1, 239, + 160, 137, 1, 234, 173, 137, 1, 226, 20, 137, 1, 226, 10, 137, 1, 250, + 117, 137, 1, 250, 101, 137, 1, 235, 18, 137, 1, 227, 107, 137, 1, 226, + 251, 137, 1, 250, 189, 137, 1, 250, 22, 137, 1, 236, 1, 137, 1, 213, 137, + 1, 233, 97, 137, 1, 253, 70, 137, 1, 252, 190, 137, 1, 198, 137, 1, 191, + 137, 1, 208, 137, 1, 238, 43, 137, 1, 237, 148, 137, 1, 225, 64, 137, 1, + 229, 146, 137, 1, 228, 110, 137, 1, 231, 31, 137, 1, 154, 137, 5, 234, + 202, 137, 5, 254, 40, 137, 31, 5, 255, 63, 137, 31, 5, 74, 137, 31, 5, + 240, 47, 137, 31, 5, 66, 137, 31, 5, 225, 76, 137, 31, 5, 153, 146, 137, + 31, 5, 153, 231, 100, 137, 31, 5, 252, 21, 72, 137, 31, 5, 72, 137, 31, + 5, 254, 253, 137, 31, 5, 252, 21, 73, 137, 31, 5, 73, 137, 31, 5, 254, + 53, 137, 5, 224, 216, 137, 234, 69, 137, 1, 153, 231, 100, 137, 1, 153, + 237, 149, 137, 31, 5, 153, 149, 137, 31, 5, 153, 237, 149, 137, 21, 223, + 89, 137, 21, 118, 137, 21, 113, 137, 21, 166, 137, 21, 158, 137, 21, 173, + 137, 21, 183, 137, 21, 194, 137, 21, 187, 137, 21, 192, 137, 231, 54, 53, + 134, 5, 252, 19, 134, 5, 254, 160, 134, 5, 224, 211, 134, 1, 57, 134, 1, + 255, 63, 134, 1, 74, 134, 1, 240, 47, 134, 1, 66, 134, 1, 225, 76, 134, + 1, 153, 146, 134, 1, 153, 149, 134, 1, 72, 134, 1, 254, 253, 134, 1, 73, + 134, 1, 254, 53, 134, 1, 177, 134, 1, 238, 227, 134, 1, 246, 193, 134, 1, + 246, 66, 134, 1, 235, 137, 134, 1, 252, 39, 134, 1, 251, 204, 134, 1, + 239, 179, 134, 1, 239, 160, 134, 1, 234, 173, 134, 1, 226, 20, 134, 1, + 226, 10, 134, 1, 250, 117, 134, 1, 250, 101, 134, 1, 235, 18, 134, 1, + 227, 107, 134, 1, 226, 251, 134, 1, 250, 189, 134, 1, 250, 22, 134, 1, + 236, 1, 134, 1, 213, 134, 1, 233, 97, 134, 1, 253, 70, 134, 1, 252, 190, + 134, 1, 198, 134, 1, 191, 134, 1, 208, 134, 1, 238, 43, 134, 1, 237, 148, + 134, 1, 225, 64, 134, 1, 229, 146, 134, 1, 228, 110, 134, 1, 231, 31, + 134, 1, 154, 134, 5, 234, 202, 134, 5, 254, 40, 134, 31, 5, 255, 63, 134, + 31, 5, 74, 134, 31, 5, 240, 47, 134, 31, 5, 66, 134, 31, 5, 225, 76, 134, + 31, 5, 153, 146, 134, 31, 5, 153, 231, 100, 134, 31, 5, 72, 134, 31, 5, + 254, 253, 134, 31, 5, 73, 134, 31, 5, 254, 53, 134, 5, 224, 216, 134, + 254, 254, 237, 219, 76, 134, 254, 54, 237, 219, 76, 134, 1, 231, 99, 134, + 1, 231, 184, 134, 1, 223, 126, 134, 1, 153, 231, 100, 134, 1, 153, 237, + 149, 134, 31, 5, 153, 149, 134, 31, 5, 153, 237, 149, 134, 21, 223, 89, + 134, 21, 118, 134, 21, 113, 134, 21, 166, 134, 21, 158, 134, 21, 173, + 134, 21, 183, 134, 21, 194, 134, 21, 187, 134, 21, 192, 134, 239, 196, + 134, 1, 224, 173, 160, 5, 254, 160, 160, 5, 224, 211, 160, 1, 57, 160, 1, + 255, 63, 160, 1, 74, 160, 1, 240, 47, 160, 1, 66, 160, 1, 225, 76, 160, + 1, 72, 160, 1, 248, 35, 160, 1, 254, 253, 160, 1, 73, 160, 1, 234, 52, + 160, 1, 254, 53, 160, 1, 177, 160, 1, 235, 137, 160, 1, 252, 39, 160, 1, + 239, 179, 160, 1, 234, 173, 160, 1, 226, 20, 160, 1, 235, 18, 160, 1, + 227, 107, 160, 1, 236, 1, 160, 1, 235, 10, 160, 1, 213, 160, 1, 198, 160, + 1, 191, 160, 1, 208, 160, 1, 231, 99, 160, 1, 238, 43, 160, 1, 237, 148, + 160, 1, 237, 147, 160, 1, 225, 64, 160, 1, 229, 146, 160, 1, 228, 110, + 160, 1, 231, 31, 160, 1, 154, 160, 31, 5, 255, 63, 160, 31, 5, 74, 160, + 31, 5, 240, 47, 160, 31, 5, 66, 160, 31, 5, 225, 76, 160, 31, 5, 72, 160, + 31, 5, 248, 35, 160, 31, 5, 254, 253, 160, 31, 5, 73, 160, 31, 5, 234, + 52, 160, 31, 5, 254, 53, 160, 5, 224, 216, 160, 234, 69, 160, 254, 54, + 237, 219, 76, 160, 21, 223, 89, 160, 21, 118, 160, 21, 113, 160, 21, 166, + 160, 21, 158, 160, 21, 173, 160, 21, 183, 160, 21, 194, 160, 21, 187, + 160, 21, 192, 160, 65, 227, 23, 160, 65, 168, 244, 135, 160, 65, 168, + 226, 194, 160, 250, 121, 53, 160, 236, 88, 53, 160, 223, 226, 53, 160, + 250, 74, 53, 160, 250, 250, 53, 160, 254, 87, 64, 53, 160, 231, 54, 53, + 160, 65, 53, 119, 5, 252, 19, 119, 5, 254, 160, 119, 5, 224, 211, 119, 1, + 57, 119, 1, 255, 63, 119, 1, 74, 119, 1, 240, 47, 119, 1, 66, 119, 1, + 225, 76, 119, 1, 153, 146, 119, 1, 153, 149, 119, 1, 72, 119, 1, 248, 35, + 119, 1, 254, 253, 119, 1, 73, 119, 1, 234, 52, 119, 1, 254, 53, 119, 1, + 177, 119, 1, 238, 227, 119, 1, 246, 193, 119, 1, 246, 66, 119, 1, 235, + 137, 119, 1, 252, 39, 119, 1, 251, 204, 119, 1, 239, 179, 119, 1, 239, + 160, 119, 1, 234, 173, 119, 1, 226, 20, 119, 1, 226, 10, 119, 1, 250, + 117, 119, 1, 250, 101, 119, 1, 235, 18, 119, 1, 227, 107, 119, 1, 226, + 251, 119, 1, 250, 189, 119, 1, 250, 22, 119, 1, 236, 1, 119, 1, 213, 119, + 1, 233, 97, 119, 1, 253, 70, 119, 1, 252, 190, 119, 1, 198, 119, 1, 191, + 119, 1, 208, 119, 1, 231, 99, 119, 1, 238, 43, 119, 1, 237, 148, 119, 1, + 225, 64, 119, 1, 229, 146, 119, 1, 228, 110, 119, 1, 231, 31, 119, 1, + 154, 119, 5, 254, 40, 119, 31, 5, 255, 63, 119, 31, 5, 74, 119, 31, 5, + 240, 47, 119, 31, 5, 66, 119, 31, 5, 225, 76, 119, 31, 5, 153, 146, 119, + 31, 5, 153, 231, 100, 119, 31, 5, 72, 119, 31, 5, 248, 35, 119, 31, 5, + 254, 253, 119, 31, 5, 73, 119, 31, 5, 234, 52, 119, 31, 5, 254, 53, 119, + 5, 224, 216, 119, 237, 219, 76, 119, 254, 254, 237, 219, 76, 119, 1, 226, + 44, 119, 1, 248, 70, 119, 1, 153, 231, 100, 119, 1, 153, 237, 149, 119, + 31, 5, 153, 149, 119, 31, 5, 153, 237, 149, 119, 21, 223, 89, 119, 21, + 118, 119, 21, 113, 119, 21, 166, 119, 21, 158, 119, 21, 173, 119, 21, + 183, 119, 21, 194, 119, 21, 187, 119, 21, 192, 119, 246, 235, 21, 223, + 90, 32, 234, 90, 232, 232, 106, 158, 119, 246, 235, 21, 168, 32, 234, 90, + 232, 232, 106, 158, 119, 246, 235, 21, 135, 32, 234, 90, 232, 232, 106, + 158, 119, 246, 235, 21, 152, 32, 234, 90, 232, 232, 106, 158, 119, 246, + 235, 21, 168, 32, 247, 158, 232, 232, 106, 158, 119, 246, 235, 21, 135, + 32, 247, 158, 232, 232, 106, 158, 119, 246, 235, 21, 152, 32, 247, 158, + 232, 232, 106, 158, 119, 5, 225, 226, 129, 5, 254, 160, 129, 5, 224, 211, + 129, 1, 57, 129, 1, 255, 63, 129, 1, 74, 129, 1, 240, 47, 129, 1, 66, + 129, 1, 225, 76, 129, 1, 153, 146, 129, 1, 153, 149, 129, 1, 72, 129, 1, + 248, 35, 129, 1, 254, 253, 129, 1, 73, 129, 1, 234, 52, 129, 1, 254, 53, + 129, 1, 177, 129, 1, 238, 227, 129, 1, 246, 193, 129, 1, 246, 66, 129, 1, + 235, 137, 129, 1, 252, 39, 129, 1, 251, 204, 129, 1, 239, 179, 129, 1, + 239, 160, 129, 1, 234, 173, 129, 1, 226, 20, 129, 1, 226, 10, 129, 1, + 250, 117, 129, 1, 250, 101, 129, 1, 235, 18, 129, 1, 227, 107, 129, 1, + 226, 251, 129, 1, 250, 189, 129, 1, 250, 22, 129, 1, 236, 1, 129, 1, 213, + 129, 1, 233, 97, 129, 1, 253, 70, 129, 1, 252, 190, 129, 1, 198, 129, 1, + 191, 129, 1, 208, 129, 1, 231, 99, 129, 1, 238, 43, 129, 1, 237, 148, + 129, 1, 225, 64, 129, 1, 229, 146, 129, 1, 228, 110, 129, 1, 231, 31, + 129, 1, 154, 129, 5, 234, 202, 129, 5, 254, 40, 129, 31, 5, 255, 63, 129, + 31, 5, 74, 129, 31, 5, 240, 47, 129, 31, 5, 66, 129, 31, 5, 225, 76, 129, + 31, 5, 153, 146, 129, 31, 5, 153, 231, 100, 129, 31, 5, 72, 129, 31, 5, + 248, 35, 129, 31, 5, 254, 253, 129, 31, 5, 73, 129, 31, 5, 234, 52, 129, + 31, 5, 254, 53, 129, 5, 224, 216, 129, 237, 219, 76, 129, 254, 254, 237, + 219, 76, 129, 1, 247, 129, 129, 1, 153, 231, 100, 129, 1, 153, 237, 149, + 129, 31, 5, 153, 149, 129, 31, 5, 153, 237, 149, 129, 21, 223, 89, 129, + 21, 118, 129, 21, 113, 129, 21, 166, 129, 21, 158, 129, 21, 173, 129, 21, + 183, 129, 21, 194, 129, 21, 187, 129, 21, 192, 129, 5, 239, 150, 129, 5, + 225, 114, 114, 5, 254, 160, 114, 5, 224, 211, 114, 1, 57, 114, 1, 255, + 63, 114, 1, 74, 114, 1, 240, 47, 114, 1, 66, 114, 1, 225, 76, 114, 1, + 153, 146, 114, 1, 153, 149, 114, 1, 72, 114, 1, 248, 35, 114, 1, 254, + 253, 114, 1, 73, 114, 1, 234, 52, 114, 1, 254, 53, 114, 1, 177, 114, 1, + 238, 227, 114, 1, 246, 193, 114, 1, 246, 66, 114, 1, 235, 137, 114, 1, + 252, 39, 114, 1, 251, 204, 114, 1, 239, 179, 114, 1, 239, 160, 114, 1, + 234, 173, 114, 1, 226, 20, 114, 1, 226, 10, 114, 1, 250, 117, 114, 1, + 250, 101, 114, 1, 235, 18, 114, 1, 227, 107, 114, 1, 226, 251, 114, 1, + 250, 189, 114, 1, 250, 22, 114, 1, 236, 1, 114, 1, 213, 114, 1, 233, 97, + 114, 1, 253, 70, 114, 1, 252, 190, 114, 1, 198, 114, 1, 191, 114, 1, 208, + 114, 1, 231, 99, 114, 1, 238, 43, 114, 1, 237, 148, 114, 1, 237, 147, + 114, 1, 225, 64, 114, 1, 229, 146, 114, 1, 228, 110, 114, 1, 231, 31, + 114, 1, 154, 114, 5, 254, 40, 114, 31, 5, 255, 63, 114, 31, 5, 74, 114, + 31, 5, 240, 47, 114, 31, 5, 66, 114, 31, 5, 225, 76, 114, 31, 5, 153, + 146, 114, 31, 5, 153, 231, 100, 114, 31, 5, 72, 114, 31, 5, 248, 35, 114, + 31, 5, 254, 253, 114, 31, 5, 73, 114, 31, 5, 234, 52, 114, 31, 5, 254, + 53, 114, 5, 224, 216, 114, 254, 54, 237, 219, 76, 114, 1, 153, 231, 100, + 114, 1, 153, 237, 149, 114, 31, 5, 153, 149, 114, 31, 5, 153, 237, 149, + 114, 21, 223, 89, 114, 21, 118, 114, 21, 113, 114, 21, 166, 114, 21, 158, + 114, 21, 173, 114, 21, 183, 114, 21, 194, 114, 21, 187, 114, 21, 192, + 114, 65, 227, 23, 114, 65, 168, 244, 135, 114, 65, 168, 226, 194, 114, + 246, 235, 168, 232, 76, 114, 246, 235, 168, 245, 151, 114, 246, 235, 152, + 232, 74, 114, 250, 125, 76, 114, 1, 251, 162, 235, 19, 114, 1, 251, 162, + 199, 114, 1, 251, 162, 231, 100, 114, 1, 251, 162, 149, 114, 1, 251, 162, + 237, 149, 114, 1, 251, 162, 239, 76, 147, 5, 254, 159, 147, 5, 224, 210, + 147, 1, 254, 32, 147, 1, 255, 54, 147, 1, 255, 13, 147, 1, 255, 17, 147, + 1, 239, 187, 147, 1, 240, 46, 147, 1, 225, 69, 147, 1, 225, 71, 147, 1, + 239, 207, 147, 1, 239, 208, 147, 1, 240, 32, 147, 1, 240, 34, 147, 1, + 247, 138, 147, 1, 248, 31, 147, 1, 254, 242, 147, 1, 233, 247, 147, 1, + 234, 47, 147, 1, 254, 43, 147, 1, 254, 208, 239, 8, 147, 1, 237, 54, 239, + 8, 147, 1, 254, 208, 246, 147, 147, 1, 237, 54, 246, 147, 147, 1, 239, + 42, 235, 251, 147, 1, 230, 248, 246, 147, 147, 1, 254, 208, 251, 249, + 147, 1, 237, 54, 251, 249, 147, 1, 254, 208, 239, 171, 147, 1, 237, 54, + 239, 171, 147, 1, 227, 102, 235, 251, 147, 1, 227, 102, 230, 247, 235, + 252, 147, 1, 230, 248, 239, 171, 147, 1, 254, 208, 226, 18, 147, 1, 237, + 54, 226, 18, 147, 1, 254, 208, 250, 108, 147, 1, 237, 54, 250, 108, 147, + 1, 236, 26, 235, 218, 147, 1, 230, 248, 250, 108, 147, 1, 254, 208, 227, + 52, 147, 1, 237, 54, 227, 52, 147, 1, 254, 208, 250, 120, 147, 1, 237, + 54, 250, 120, 147, 1, 250, 148, 235, 218, 147, 1, 230, 248, 250, 120, + 147, 1, 254, 208, 233, 157, 147, 1, 237, 54, 233, 157, 147, 1, 254, 208, + 253, 17, 147, 1, 237, 54, 253, 17, 147, 1, 236, 251, 147, 1, 254, 195, + 253, 17, 147, 1, 223, 232, 147, 1, 231, 249, 147, 1, 250, 148, 237, 251, + 147, 1, 225, 44, 147, 1, 227, 102, 230, 233, 147, 1, 236, 26, 230, 233, + 147, 1, 250, 148, 230, 233, 147, 1, 245, 125, 147, 1, 236, 26, 237, 251, + 147, 1, 247, 99, 147, 5, 254, 232, 147, 31, 5, 255, 16, 147, 31, 5, 238, + 235, 255, 18, 147, 31, 5, 249, 231, 255, 18, 147, 31, 5, 238, 235, 239, + 204, 147, 31, 5, 249, 231, 239, 204, 147, 31, 5, 238, 235, 233, 240, 147, + 31, 5, 249, 231, 233, 240, 147, 31, 5, 246, 182, 147, 31, 5, 238, 144, + 147, 31, 5, 249, 231, 238, 144, 147, 31, 5, 238, 146, 250, 58, 147, 31, + 5, 238, 145, 245, 168, 255, 16, 147, 31, 5, 238, 145, 245, 168, 249, 231, + 255, 16, 147, 31, 5, 238, 145, 245, 168, 246, 146, 147, 31, 5, 246, 146, + 147, 31, 5, 249, 231, 246, 182, 147, 31, 5, 249, 231, 246, 146, 147, 232, + 171, 238, 98, 128, 116, 238, 151, 239, 56, 128, 116, 238, 209, 238, 224, + 128, 116, 238, 209, 238, 203, 128, 116, 238, 209, 238, 202, 128, 116, + 238, 209, 238, 206, 128, 116, 238, 209, 232, 7, 128, 116, 235, 108, 235, + 99, 128, 116, 251, 151, 251, 196, 128, 116, 251, 151, 251, 159, 128, 116, + 251, 151, 251, 195, 128, 116, 228, 170, 228, 169, 128, 116, 251, 151, + 251, 148, 128, 116, 223, 184, 223, 191, 128, 116, 249, 162, 251, 201, + 128, 116, 180, 233, 165, 128, 116, 226, 202, 226, 243, 128, 116, 226, + 202, 235, 234, 128, 116, 226, 202, 233, 72, 128, 116, 235, 7, 235, 155, + 128, 116, 249, 162, 250, 59, 128, 116, 180, 227, 71, 128, 116, 226, 202, + 226, 183, 128, 116, 226, 202, 226, 247, 128, 116, 226, 202, 226, 199, + 128, 116, 235, 7, 234, 206, 128, 116, 252, 139, 253, 54, 128, 116, 233, + 5, 233, 24, 128, 116, 233, 80, 233, 74, 128, 116, 247, 8, 247, 129, 128, + 116, 233, 80, 233, 93, 128, 116, 247, 8, 247, 111, 128, 116, 233, 80, + 231, 0, 128, 116, 236, 104, 198, 128, 116, 223, 184, 224, 1, 128, 116, + 231, 123, 231, 69, 128, 116, 231, 70, 128, 116, 237, 144, 237, 164, 128, + 116, 237, 110, 128, 116, 224, 106, 224, 169, 128, 116, 228, 170, 231, 11, + 128, 116, 228, 170, 231, 50, 128, 116, 228, 170, 228, 5, 128, 116, 244, + 228, 245, 59, 128, 116, 237, 144, 251, 135, 128, 116, 130, 254, 184, 128, + 116, 244, 228, 235, 2, 128, 116, 233, 230, 128, 116, 230, 243, 57, 128, + 116, 237, 49, 245, 147, 128, 116, 230, 243, 255, 63, 128, 116, 230, 243, + 254, 199, 128, 116, 230, 243, 74, 128, 116, 230, 243, 240, 47, 128, 116, + 230, 243, 225, 159, 128, 116, 230, 243, 225, 158, 128, 116, 230, 243, 66, + 128, 116, 230, 243, 225, 76, 128, 116, 233, 82, 128, 250, 222, 14, 253, + 55, 128, 116, 230, 243, 72, 128, 116, 230, 243, 255, 19, 128, 116, 230, + 243, 73, 128, 116, 230, 243, 254, 254, 237, 45, 128, 116, 230, 243, 254, + 254, 237, 46, 128, 116, 238, 23, 128, 116, 237, 42, 128, 116, 237, 43, + 128, 116, 237, 49, 248, 8, 128, 116, 237, 49, 226, 201, 128, 116, 237, + 49, 226, 81, 128, 116, 237, 49, 251, 186, 128, 116, 226, 241, 128, 116, + 235, 66, 128, 116, 223, 251, 128, 116, 247, 4, 128, 21, 223, 89, 128, 21, + 118, 128, 21, 113, 128, 21, 166, 128, 21, 158, 128, 21, 173, 128, 21, + 183, 128, 21, 194, 128, 21, 187, 128, 21, 192, 128, 116, 254, 183, 128, + 116, 238, 207, 179, 1, 238, 150, 179, 1, 238, 209, 227, 226, 179, 1, 238, + 209, 227, 75, 179, 1, 235, 107, 179, 1, 251, 68, 179, 1, 228, 170, 227, + 75, 179, 1, 234, 152, 179, 1, 249, 161, 179, 1, 96, 179, 1, 226, 202, + 227, 226, 179, 1, 226, 202, 227, 75, 179, 1, 235, 6, 179, 1, 252, 138, + 179, 1, 233, 4, 179, 1, 233, 80, 227, 226, 179, 1, 247, 8, 227, 75, 179, + 1, 233, 80, 227, 75, 179, 1, 247, 8, 227, 226, 179, 1, 236, 103, 179, 1, + 223, 183, 179, 1, 237, 144, 237, 164, 179, 1, 237, 144, 237, 123, 179, 1, + 224, 105, 179, 1, 228, 170, 227, 226, 179, 1, 244, 228, 227, 226, 179, 1, + 73, 179, 1, 244, 228, 227, 75, 179, 247, 249, 179, 31, 5, 57, 179, 31, 5, + 237, 49, 239, 46, 179, 31, 5, 255, 63, 179, 31, 5, 254, 199, 179, 31, 5, + 74, 179, 31, 5, 240, 47, 179, 31, 5, 224, 25, 179, 31, 5, 223, 127, 179, + 31, 5, 66, 179, 31, 5, 225, 76, 179, 31, 5, 237, 49, 238, 142, 179, 229, + 181, 5, 237, 143, 179, 229, 181, 5, 234, 152, 179, 31, 5, 72, 179, 31, 5, + 248, 22, 179, 31, 5, 73, 179, 31, 5, 254, 34, 179, 31, 5, 254, 253, 179, + 238, 151, 238, 43, 179, 206, 237, 49, 248, 8, 179, 206, 237, 49, 226, + 201, 179, 206, 237, 49, 226, 175, 179, 206, 237, 49, 251, 255, 179, 252, + 23, 76, 179, 235, 72, 179, 21, 223, 89, 179, 21, 118, 179, 21, 113, 179, + 21, 166, 179, 21, 158, 179, 21, 173, 179, 21, 183, 179, 21, 194, 179, 21, + 187, 179, 21, 192, 179, 244, 228, 235, 6, 179, 244, 228, 236, 103, 54, 4, + 234, 69, 54, 165, 245, 220, 223, 195, 236, 174, 226, 50, 57, 54, 165, + 245, 220, 223, 195, 236, 174, 255, 68, 231, 127, 252, 240, 198, 54, 165, + 245, 220, 223, 195, 236, 174, 255, 68, 245, 220, 226, 35, 198, 54, 165, + 59, 223, 195, 236, 174, 236, 237, 198, 54, 165, 251, 79, 223, 195, 236, + 174, 229, 152, 198, 54, 165, 252, 10, 223, 195, 236, 174, 233, 73, 229, + 140, 198, 54, 165, 223, 195, 236, 174, 226, 35, 229, 140, 198, 54, 165, + 230, 231, 229, 139, 54, 165, 252, 93, 223, 195, 236, 173, 54, 165, 252, + 152, 229, 68, 223, 195, 236, 173, 54, 165, 239, 226, 226, 34, 54, 165, + 250, 53, 226, 35, 252, 92, 54, 165, 229, 139, 54, 165, 234, 156, 229, + 139, 54, 165, 226, 35, 229, 139, 54, 165, 234, 156, 226, 35, 229, 139, + 54, 165, 231, 142, 251, 177, 228, 122, 229, 139, 54, 165, 231, 187, 245, + 244, 229, 139, 54, 165, 252, 10, 255, 72, 231, 73, 236, 236, 182, 252, + 26, 54, 165, 245, 220, 226, 34, 54, 237, 137, 5, 251, 202, 231, 72, 54, + 237, 137, 5, 237, 203, 231, 72, 54, 254, 66, 5, 229, 149, 246, 134, 255, + 73, 231, 72, 54, 254, 66, 5, 255, 70, 213, 54, 254, 66, 5, 230, 214, 226, + 30, 54, 5, 231, 246, 249, 173, 246, 133, 54, 5, 231, 246, 249, 173, 246, + 13, 54, 5, 231, 246, 249, 173, 245, 221, 54, 5, 231, 246, 235, 249, 246, + 133, 54, 5, 231, 246, 235, 249, 246, 13, 54, 5, 231, 246, 249, 173, 231, + 246, 235, 248, 54, 21, 223, 89, 54, 21, 118, 54, 21, 113, 54, 21, 166, + 54, 21, 158, 54, 21, 173, 54, 21, 183, 54, 21, 194, 54, 21, 187, 54, 21, + 192, 54, 21, 132, 118, 54, 21, 132, 113, 54, 21, 132, 166, 54, 21, 132, + 158, 54, 21, 132, 173, 54, 21, 132, 183, 54, 21, 132, 194, 54, 21, 132, + 187, 54, 21, 132, 192, 54, 21, 132, 223, 89, 54, 165, 252, 95, 231, 72, + 54, 165, 235, 131, 252, 46, 234, 164, 223, 29, 54, 165, 252, 10, 255, 72, + 231, 73, 252, 47, 236, 138, 252, 26, 54, 165, 235, 131, 252, 46, 229, + 150, 231, 72, 54, 165, 251, 183, 236, 173, 54, 165, 226, 45, 255, 69, 54, + 165, 245, 209, 231, 73, 245, 174, 54, 165, 245, 209, 231, 73, 245, 180, + 54, 165, 254, 185, 238, 220, 245, 174, 54, 165, 254, 185, 238, 220, 245, + 180, 54, 5, 223, 245, 226, 33, 54, 5, 237, 25, 226, 33, 54, 1, 177, 54, + 1, 238, 227, 54, 1, 246, 193, 54, 1, 246, 66, 54, 1, 235, 137, 54, 1, + 252, 39, 54, 1, 251, 204, 54, 1, 239, 179, 54, 1, 234, 173, 54, 1, 226, + 20, 54, 1, 226, 10, 54, 1, 250, 117, 54, 1, 250, 101, 54, 1, 235, 18, 54, + 1, 227, 107, 54, 1, 226, 251, 54, 1, 250, 189, 54, 1, 250, 22, 54, 1, + 236, 1, 54, 1, 213, 54, 1, 233, 97, 54, 1, 253, 70, 54, 1, 252, 190, 54, + 1, 198, 54, 1, 226, 44, 54, 1, 226, 37, 54, 1, 248, 70, 54, 1, 248, 66, + 54, 1, 224, 173, 54, 1, 223, 85, 54, 1, 223, 117, 54, 1, 255, 75, 54, 1, + 191, 54, 1, 208, 54, 1, 238, 43, 54, 1, 229, 146, 54, 1, 228, 110, 54, 1, + 231, 31, 54, 1, 154, 54, 1, 57, 54, 1, 238, 110, 54, 1, 247, 34, 208, 54, + 1, 238, 167, 54, 1, 231, 99, 54, 31, 5, 255, 63, 54, 31, 5, 74, 54, 31, + 5, 240, 47, 54, 31, 5, 66, 54, 31, 5, 225, 76, 54, 31, 5, 153, 146, 54, + 31, 5, 153, 231, 100, 54, 31, 5, 153, 149, 54, 31, 5, 153, 237, 149, 54, + 31, 5, 72, 54, 31, 5, 248, 35, 54, 31, 5, 73, 54, 31, 5, 234, 52, 54, 5, + 231, 128, 228, 7, 235, 138, 231, 122, 54, 5, 231, 127, 252, 239, 54, 31, + 5, 200, 74, 54, 31, 5, 200, 240, 47, 54, 5, 234, 164, 223, 30, 235, 255, + 250, 189, 54, 5, 228, 178, 237, 245, 54, 165, 245, 153, 54, 165, 233, + 221, 54, 5, 237, 248, 231, 72, 54, 5, 223, 249, 231, 72, 54, 5, 237, 249, + 226, 45, 252, 26, 54, 5, 236, 238, 252, 26, 54, 5, 245, 223, 252, 27, + 231, 185, 54, 5, 245, 223, 236, 230, 231, 185, 54, 228, 0, 1, 177, 54, + 228, 0, 1, 238, 227, 54, 228, 0, 1, 246, 193, 54, 228, 0, 1, 246, 66, 54, + 228, 0, 1, 235, 137, 54, 228, 0, 1, 252, 39, 54, 228, 0, 1, 251, 204, 54, + 228, 0, 1, 239, 179, 54, 228, 0, 1, 234, 173, 54, 228, 0, 1, 226, 20, 54, + 228, 0, 1, 226, 10, 54, 228, 0, 1, 250, 117, 54, 228, 0, 1, 250, 101, 54, + 228, 0, 1, 235, 18, 54, 228, 0, 1, 227, 107, 54, 228, 0, 1, 226, 251, 54, + 228, 0, 1, 250, 189, 54, 228, 0, 1, 250, 22, 54, 228, 0, 1, 236, 1, 54, + 228, 0, 1, 213, 54, 228, 0, 1, 233, 97, 54, 228, 0, 1, 253, 70, 54, 228, + 0, 1, 252, 190, 54, 228, 0, 1, 198, 54, 228, 0, 1, 226, 44, 54, 228, 0, + 1, 226, 37, 54, 228, 0, 1, 248, 70, 54, 228, 0, 1, 248, 66, 54, 228, 0, + 1, 224, 173, 54, 228, 0, 1, 223, 85, 54, 228, 0, 1, 223, 117, 54, 228, 0, + 1, 255, 75, 54, 228, 0, 1, 191, 54, 228, 0, 1, 208, 54, 228, 0, 1, 238, + 43, 54, 228, 0, 1, 229, 146, 54, 228, 0, 1, 228, 110, 54, 228, 0, 1, 231, + 31, 54, 228, 0, 1, 154, 54, 228, 0, 1, 57, 54, 228, 0, 1, 238, 110, 54, + 228, 0, 1, 247, 34, 224, 173, 54, 228, 0, 1, 247, 34, 191, 54, 228, 0, 1, + 247, 34, 208, 54, 238, 108, 231, 71, 238, 227, 54, 238, 108, 231, 71, + 238, 228, 252, 47, 236, 138, 252, 26, 54, 252, 17, 5, 112, 252, 234, 54, + 252, 17, 5, 157, 252, 234, 54, 252, 17, 5, 252, 18, 227, 43, 54, 252, 17, + 5, 230, 230, 255, 74, 54, 14, 248, 116, 252, 90, 54, 14, 231, 245, 231, + 129, 54, 14, 233, 234, 246, 132, 54, 14, 231, 245, 231, 130, 231, 187, + 245, 243, 54, 14, 233, 73, 213, 54, 14, 234, 248, 252, 90, 54, 14, 234, + 248, 252, 91, 234, 156, 255, 71, 54, 14, 234, 248, 252, 91, 245, 222, + 255, 71, 54, 14, 234, 248, 252, 91, 252, 47, 255, 71, 54, 5, 231, 246, + 235, 249, 231, 246, 249, 172, 54, 5, 231, 246, 235, 249, 245, 221, 54, + 165, 252, 94, 229, 68, 246, 47, 236, 174, 231, 186, 54, 165, 236, 105, + 223, 195, 246, 47, 236, 174, 231, 186, 54, 165, 234, 156, 226, 34, 54, + 165, 59, 252, 110, 231, 124, 223, 195, 236, 174, 236, 237, 198, 54, 165, + 251, 79, 252, 110, 231, 124, 223, 195, 236, 174, 229, 152, 198, 69, 1, + 177, 69, 1, 238, 227, 69, 1, 246, 193, 69, 1, 246, 66, 69, 1, 235, 137, + 69, 1, 252, 39, 69, 1, 251, 204, 69, 1, 239, 179, 69, 1, 239, 160, 69, 1, + 234, 173, 69, 1, 235, 8, 69, 1, 226, 20, 69, 1, 226, 10, 69, 1, 250, 117, + 69, 1, 250, 101, 69, 1, 235, 18, 69, 1, 227, 107, 69, 1, 226, 251, 69, 1, + 250, 189, 69, 1, 250, 22, 69, 1, 236, 1, 69, 1, 213, 69, 1, 233, 97, 69, + 1, 253, 70, 69, 1, 252, 190, 69, 1, 198, 69, 1, 191, 69, 1, 208, 69, 1, + 238, 43, 69, 1, 224, 173, 69, 1, 231, 31, 69, 1, 154, 69, 1, 237, 148, + 69, 1, 57, 69, 1, 229, 131, 57, 69, 1, 74, 69, 1, 240, 47, 69, 1, 66, 69, + 1, 225, 76, 69, 1, 72, 69, 1, 236, 95, 72, 69, 1, 73, 69, 1, 254, 53, 69, + 31, 5, 227, 77, 255, 63, 69, 31, 5, 255, 63, 69, 31, 5, 74, 69, 31, 5, + 240, 47, 69, 31, 5, 66, 69, 31, 5, 225, 76, 69, 31, 5, 72, 69, 31, 5, + 254, 253, 69, 31, 5, 236, 95, 240, 47, 69, 31, 5, 236, 95, 73, 69, 31, 5, + 161, 46, 69, 5, 254, 160, 69, 5, 56, 51, 69, 5, 224, 211, 69, 5, 224, + 216, 69, 5, 254, 84, 69, 251, 33, 5, 124, 191, 69, 251, 33, 5, 124, 208, + 69, 251, 33, 5, 124, 224, 173, 69, 251, 33, 5, 124, 154, 69, 1, 245, 233, + 231, 31, 69, 21, 223, 89, 69, 21, 118, 69, 21, 113, 69, 21, 166, 69, 21, + 158, 69, 21, 173, 69, 21, 183, 69, 21, 194, 69, 21, 187, 69, 21, 192, 69, + 5, 237, 155, 230, 205, 69, 5, 230, 205, 69, 14, 237, 140, 69, 14, 251, + 49, 69, 14, 255, 11, 69, 14, 246, 119, 69, 1, 229, 146, 69, 1, 228, 110, + 69, 1, 153, 146, 69, 1, 153, 231, 100, 69, 1, 153, 149, 69, 1, 153, 237, + 149, 69, 31, 5, 153, 146, 69, 31, 5, 153, 231, 100, 69, 31, 5, 153, 149, + 69, 31, 5, 153, 237, 149, 69, 1, 236, 95, 235, 137, 69, 1, 236, 95, 239, + 160, 69, 1, 236, 95, 253, 16, 69, 1, 236, 95, 253, 12, 69, 251, 33, 5, + 236, 95, 124, 236, 1, 69, 251, 33, 5, 236, 95, 124, 198, 69, 251, 33, 5, + 236, 95, 124, 238, 43, 69, 1, 229, 151, 239, 28, 229, 146, 69, 31, 5, + 229, 151, 239, 28, 247, 165, 69, 206, 165, 229, 151, 239, 28, 245, 129, + 69, 206, 165, 229, 151, 239, 28, 239, 4, 233, 79, 69, 1, 224, 129, 232, + 150, 239, 28, 226, 251, 69, 1, 224, 129, 232, 150, 239, 28, 232, 156, 69, + 31, 5, 224, 129, 232, 150, 239, 28, 247, 165, 69, 31, 5, 224, 129, 232, + 150, 239, 28, 225, 159, 69, 5, 224, 129, 232, 150, 239, 28, 226, 117, 69, + 5, 224, 129, 232, 150, 239, 28, 226, 116, 69, 5, 224, 129, 232, 150, 239, + 28, 226, 115, 69, 5, 224, 129, 232, 150, 239, 28, 226, 114, 69, 5, 224, + 129, 232, 150, 239, 28, 226, 113, 69, 1, 248, 44, 232, 150, 239, 28, 235, + 18, 69, 1, 248, 44, 232, 150, 239, 28, 223, 134, 69, 1, 248, 44, 232, + 150, 239, 28, 246, 49, 69, 31, 5, 246, 129, 239, 28, 74, 69, 31, 5, 239, + 9, 234, 88, 69, 31, 5, 239, 9, 66, 69, 31, 5, 239, 9, 248, 35, 69, 1, + 229, 131, 177, 69, 1, 229, 131, 238, 227, 69, 1, 229, 131, 246, 193, 69, + 1, 229, 131, 252, 39, 69, 1, 229, 131, 223, 117, 69, 1, 229, 131, 234, + 173, 69, 1, 229, 131, 250, 189, 69, 1, 229, 131, 236, 1, 69, 1, 229, 131, + 233, 97, 69, 1, 229, 131, 247, 129, 69, 1, 229, 131, 253, 70, 69, 1, 229, + 131, 226, 251, 69, 1, 229, 131, 154, 69, 251, 33, 5, 229, 131, 124, 224, + 173, 69, 31, 5, 229, 131, 255, 63, 69, 31, 5, 229, 131, 72, 69, 31, 5, + 229, 131, 161, 46, 69, 31, 5, 229, 131, 35, 224, 25, 69, 5, 229, 131, + 226, 116, 69, 5, 229, 131, 226, 115, 69, 5, 229, 131, 226, 113, 69, 5, + 229, 131, 226, 112, 69, 5, 229, 131, 251, 2, 226, 116, 69, 5, 229, 131, + 251, 2, 226, 115, 69, 5, 229, 131, 251, 2, 247, 242, 226, 118, 69, 1, + 231, 61, 233, 226, 247, 129, 69, 5, 231, 61, 233, 226, 226, 113, 69, 229, + 131, 21, 223, 89, 69, 229, 131, 21, 118, 69, 229, 131, 21, 113, 69, 229, + 131, 21, 166, 69, 229, 131, 21, 158, 69, 229, 131, 21, 173, 69, 229, 131, + 21, 183, 69, 229, 131, 21, 194, 69, 229, 131, 21, 187, 69, 229, 131, 21, + 192, 69, 14, 229, 131, 118, 69, 14, 229, 131, 247, 148, 87, 6, 1, 254, + 190, 87, 6, 1, 253, 44, 87, 6, 1, 246, 168, 87, 6, 1, 249, 148, 87, 6, 1, + 247, 239, 87, 6, 1, 224, 219, 87, 6, 1, 223, 92, 87, 6, 1, 227, 73, 87, + 6, 1, 240, 16, 87, 6, 1, 239, 46, 87, 6, 1, 238, 6, 87, 6, 1, 237, 35, + 87, 6, 1, 235, 230, 87, 6, 1, 234, 61, 87, 6, 1, 233, 194, 87, 6, 1, 223, + 81, 87, 6, 1, 232, 15, 87, 6, 1, 230, 253, 87, 6, 1, 227, 67, 87, 6, 1, + 225, 138, 87, 6, 1, 233, 92, 87, 6, 1, 238, 218, 87, 6, 1, 246, 60, 87, + 6, 1, 232, 123, 87, 6, 1, 229, 78, 87, 6, 1, 251, 161, 87, 6, 1, 252, 26, + 87, 6, 1, 239, 149, 87, 6, 1, 251, 109, 87, 6, 1, 251, 192, 87, 6, 1, + 224, 70, 87, 6, 1, 239, 159, 87, 6, 1, 245, 165, 87, 6, 1, 245, 121, 87, + 6, 1, 245, 71, 87, 6, 1, 224, 141, 87, 6, 1, 245, 141, 87, 6, 1, 244, + 225, 87, 1, 254, 190, 87, 1, 253, 44, 87, 1, 246, 168, 87, 1, 249, 148, + 87, 1, 247, 239, 87, 1, 224, 219, 87, 1, 223, 92, 87, 1, 227, 73, 87, 1, + 240, 16, 87, 1, 239, 46, 87, 1, 238, 6, 87, 1, 237, 35, 87, 1, 235, 230, + 87, 1, 234, 61, 87, 1, 233, 194, 87, 1, 223, 81, 87, 1, 232, 15, 87, 1, + 230, 253, 87, 1, 227, 67, 87, 1, 225, 138, 87, 1, 233, 92, 87, 1, 238, + 218, 87, 1, 246, 60, 87, 1, 232, 123, 87, 1, 229, 78, 87, 1, 251, 161, + 87, 1, 252, 26, 87, 1, 239, 149, 87, 1, 251, 109, 87, 1, 251, 192, 87, 1, + 224, 70, 87, 1, 239, 159, 87, 1, 245, 165, 87, 1, 245, 121, 87, 1, 245, + 71, 87, 1, 224, 141, 87, 1, 245, 141, 87, 1, 244, 225, 87, 1, 247, 70, + 87, 1, 223, 185, 87, 1, 247, 251, 87, 1, 209, 246, 168, 87, 1, 254, 248, + 87, 233, 192, 229, 173, 52, 1, 87, 235, 230, 26, 122, 238, 173, 26, 122, + 228, 104, 26, 122, 235, 82, 26, 122, 226, 163, 26, 122, 228, 99, 26, 122, + 231, 174, 26, 122, 236, 148, 26, 122, 233, 60, 26, 122, 228, 102, 26, + 122, 228, 236, 26, 122, 228, 100, 26, 122, 240, 68, 26, 122, 251, 113, + 26, 122, 228, 107, 26, 122, 251, 167, 26, 122, 238, 210, 26, 122, 226, + 218, 26, 122, 233, 85, 26, 122, 245, 69, 26, 122, 235, 79, 26, 122, 228, + 103, 26, 122, 235, 74, 26, 122, 235, 77, 26, 122, 226, 162, 26, 122, 231, + 165, 26, 122, 228, 101, 26, 122, 231, 173, 26, 122, 239, 31, 26, 122, + 236, 143, 26, 122, 239, 34, 26, 122, 233, 56, 26, 122, 233, 55, 26, 122, + 233, 45, 26, 122, 233, 52, 26, 122, 233, 50, 26, 122, 233, 48, 26, 122, + 233, 49, 26, 122, 233, 47, 26, 122, 233, 51, 26, 122, 233, 58, 26, 122, + 233, 59, 26, 122, 233, 46, 26, 122, 233, 54, 26, 122, 239, 32, 26, 122, + 239, 30, 26, 122, 228, 230, 26, 122, 228, 228, 26, 122, 228, 221, 26, + 122, 228, 224, 26, 122, 228, 229, 26, 122, 228, 226, 26, 122, 228, 225, + 26, 122, 228, 223, 26, 122, 228, 232, 26, 122, 228, 234, 26, 122, 228, + 235, 26, 122, 228, 231, 26, 122, 228, 222, 26, 122, 228, 227, 26, 122, + 228, 233, 26, 122, 251, 154, 26, 122, 251, 152, 26, 122, 251, 212, 26, + 122, 251, 210, 26, 122, 233, 204, 26, 122, 240, 64, 26, 122, 240, 56, 26, + 122, 240, 63, 26, 122, 240, 60, 26, 122, 240, 59, 26, 122, 240, 62, 26, + 122, 228, 105, 26, 122, 240, 66, 26, 122, 240, 67, 26, 122, 240, 57, 26, + 122, 240, 61, 26, 122, 223, 212, 26, 122, 251, 112, 26, 122, 251, 155, + 26, 122, 251, 153, 26, 122, 251, 213, 26, 122, 251, 211, 26, 122, 251, + 165, 26, 122, 251, 166, 26, 122, 251, 156, 26, 122, 251, 214, 26, 122, + 233, 84, 26, 122, 239, 33, 26, 122, 228, 106, 26, 122, 223, 218, 26, 122, + 247, 52, 26, 170, 247, 52, 26, 170, 57, 26, 170, 255, 19, 26, 170, 191, + 26, 170, 224, 10, 26, 170, 247, 217, 26, 170, 72, 26, 170, 223, 221, 26, + 170, 223, 228, 26, 170, 73, 26, 170, 224, 173, 26, 170, 224, 170, 26, + 170, 234, 88, 26, 170, 223, 183, 26, 170, 66, 26, 170, 224, 133, 26, 170, + 224, 141, 26, 170, 224, 118, 26, 170, 223, 158, 26, 170, 247, 165, 26, + 170, 223, 202, 26, 170, 74, 26, 170, 255, 67, 26, 170, 255, 66, 26, 170, + 224, 23, 26, 170, 224, 22, 26, 170, 247, 215, 26, 170, 247, 214, 26, 170, + 247, 216, 26, 170, 223, 220, 26, 170, 223, 219, 26, 170, 234, 109, 26, + 170, 234, 110, 26, 170, 234, 106, 26, 170, 234, 108, 26, 170, 234, 107, + 26, 170, 223, 180, 26, 170, 223, 179, 26, 170, 223, 178, 26, 170, 223, + 181, 26, 170, 223, 182, 26, 170, 225, 177, 26, 170, 225, 176, 26, 170, + 225, 175, 26, 170, 225, 173, 26, 170, 225, 174, 26, 170, 223, 157, 26, + 170, 223, 155, 26, 170, 223, 156, 26, 170, 223, 151, 26, 170, 223, 152, + 26, 170, 223, 153, 26, 170, 223, 154, 26, 170, 247, 163, 26, 170, 247, + 164, 26, 170, 223, 201, 26, 170, 244, 80, 26, 170, 244, 74, 26, 170, 244, + 76, 26, 170, 244, 75, 26, 170, 244, 77, 26, 170, 244, 79, 26, 170, 254, + 128, 26, 170, 254, 127, 26, 170, 254, 125, 26, 170, 254, 126, 26, 170, + 228, 108, 26, 138, 238, 173, 26, 138, 228, 104, 26, 138, 238, 171, 26, + 138, 235, 82, 26, 138, 235, 81, 26, 138, 235, 80, 26, 138, 226, 163, 26, + 138, 231, 174, 26, 138, 231, 170, 26, 138, 231, 168, 26, 138, 231, 162, + 26, 138, 231, 159, 26, 138, 231, 157, 26, 138, 231, 163, 26, 138, 231, + 173, 26, 138, 236, 148, 26, 138, 233, 60, 26, 138, 233, 52, 26, 138, 228, + 236, 26, 138, 228, 100, 26, 138, 240, 68, 26, 138, 251, 113, 26, 138, + 251, 167, 26, 138, 238, 210, 26, 138, 226, 218, 26, 138, 233, 85, 26, + 138, 245, 69, 26, 138, 238, 172, 26, 138, 238, 170, 26, 138, 235, 79, 26, + 138, 235, 74, 26, 138, 235, 76, 26, 138, 235, 78, 26, 138, 235, 75, 26, + 138, 226, 162, 26, 138, 226, 161, 26, 138, 231, 169, 26, 138, 231, 165, + 26, 138, 231, 156, 26, 138, 231, 155, 26, 138, 228, 101, 26, 138, 231, + 167, 26, 138, 231, 166, 26, 138, 231, 160, 26, 138, 231, 161, 26, 138, + 231, 172, 26, 138, 231, 158, 26, 138, 231, 164, 26, 138, 231, 171, 26, + 138, 231, 154, 26, 138, 236, 145, 26, 138, 236, 142, 26, 138, 236, 143, + 26, 138, 236, 141, 26, 138, 236, 140, 26, 138, 236, 144, 26, 138, 236, + 147, 26, 138, 236, 146, 26, 138, 239, 34, 26, 138, 233, 53, 26, 138, 233, + 54, 26, 138, 233, 57, 26, 138, 239, 32, 26, 138, 228, 230, 26, 138, 228, + 221, 26, 138, 228, 224, 26, 138, 228, 226, 26, 138, 233, 204, 26, 138, + 240, 64, 26, 138, 240, 58, 26, 138, 228, 105, 26, 138, 240, 65, 26, 138, + 223, 212, 26, 138, 223, 210, 26, 138, 223, 211, 26, 138, 233, 84, 26, + 138, 239, 33, 26, 138, 245, 67, 26, 138, 245, 65, 26, 138, 245, 68, 26, + 138, 245, 66, 26, 138, 223, 218, 25, 4, 154, 25, 4, 244, 145, 25, 4, 245, + 75, 25, 4, 245, 167, 25, 4, 245, 109, 25, 4, 245, 121, 25, 4, 244, 227, + 25, 4, 244, 226, 25, 4, 238, 43, 25, 4, 237, 110, 25, 4, 237, 193, 25, 4, + 238, 42, 25, 4, 237, 239, 25, 4, 237, 243, 25, 4, 237, 143, 25, 4, 237, + 88, 25, 4, 245, 84, 25, 4, 245, 78, 25, 4, 245, 80, 25, 4, 245, 83, 25, + 4, 245, 81, 25, 4, 245, 82, 25, 4, 245, 79, 25, 4, 245, 77, 25, 4, 198, + 25, 4, 236, 66, 25, 4, 236, 157, 25, 4, 237, 66, 25, 4, 236, 226, 25, 4, + 236, 235, 25, 4, 236, 103, 25, 4, 236, 19, 25, 4, 227, 120, 25, 4, 227, + 114, 25, 4, 227, 116, 25, 4, 227, 119, 25, 4, 227, 117, 25, 4, 227, 118, + 25, 4, 227, 115, 25, 4, 227, 113, 25, 4, 208, 25, 4, 231, 70, 25, 4, 231, + 180, 25, 4, 232, 22, 25, 4, 231, 229, 25, 4, 231, 244, 25, 4, 231, 122, + 25, 4, 231, 46, 25, 4, 231, 31, 25, 4, 228, 6, 25, 4, 229, 15, 25, 4, + 231, 29, 25, 4, 230, 203, 25, 4, 230, 213, 25, 4, 228, 169, 25, 4, 227, + 200, 25, 4, 229, 146, 25, 4, 229, 43, 25, 4, 229, 90, 25, 4, 229, 142, + 25, 4, 229, 112, 25, 4, 229, 114, 25, 4, 229, 71, 25, 4, 229, 30, 25, 4, + 232, 138, 25, 4, 232, 84, 25, 4, 232, 104, 25, 4, 232, 137, 25, 4, 232, + 118, 25, 4, 232, 119, 25, 4, 232, 95, 25, 4, 232, 94, 25, 4, 232, 45, 25, + 4, 232, 41, 25, 4, 232, 44, 25, 4, 232, 42, 25, 4, 232, 43, 25, 4, 232, + 116, 25, 4, 232, 110, 25, 4, 232, 112, 25, 4, 232, 115, 25, 4, 232, 113, + 25, 4, 232, 114, 25, 4, 232, 111, 25, 4, 232, 109, 25, 4, 232, 105, 25, + 4, 232, 108, 25, 4, 232, 106, 25, 4, 232, 107, 25, 4, 253, 70, 25, 4, + 252, 90, 25, 4, 252, 181, 25, 4, 253, 69, 25, 4, 252, 232, 25, 4, 252, + 238, 25, 4, 252, 138, 25, 4, 252, 60, 25, 4, 225, 64, 25, 4, 224, 190, + 25, 4, 224, 228, 25, 4, 225, 63, 25, 4, 225, 38, 25, 4, 225, 42, 25, 4, + 224, 206, 25, 4, 224, 183, 25, 4, 227, 107, 25, 4, 225, 250, 25, 4, 226, + 175, 25, 4, 227, 104, 25, 4, 227, 37, 25, 4, 227, 44, 25, 4, 96, 25, 4, + 225, 222, 25, 4, 252, 39, 25, 4, 250, 235, 25, 4, 251, 118, 25, 4, 252, + 38, 25, 4, 251, 225, 25, 4, 251, 231, 25, 4, 251, 68, 25, 4, 250, 210, + 25, 4, 224, 72, 25, 4, 224, 48, 25, 4, 224, 64, 25, 4, 224, 71, 25, 4, + 224, 68, 25, 4, 224, 69, 25, 4, 224, 55, 25, 4, 224, 54, 25, 4, 224, 44, + 25, 4, 224, 40, 25, 4, 224, 43, 25, 4, 224, 41, 25, 4, 224, 42, 25, 4, + 236, 1, 25, 4, 234, 206, 25, 4, 235, 89, 25, 4, 235, 254, 25, 4, 235, + 160, 25, 4, 235, 162, 25, 4, 235, 6, 25, 4, 234, 177, 25, 4, 234, 173, + 25, 4, 234, 146, 25, 4, 234, 163, 25, 4, 234, 172, 25, 4, 234, 168, 25, + 4, 234, 169, 25, 4, 234, 152, 25, 4, 234, 139, 25, 4, 246, 16, 57, 25, 4, + 246, 16, 66, 25, 4, 246, 16, 74, 25, 4, 246, 16, 255, 63, 25, 4, 246, 16, + 248, 35, 25, 4, 246, 16, 72, 25, 4, 246, 16, 73, 25, 4, 246, 16, 224, + 173, 25, 4, 177, 25, 4, 238, 107, 25, 4, 238, 199, 25, 4, 239, 72, 25, 4, + 239, 2, 25, 4, 239, 3, 25, 4, 238, 150, 25, 4, 238, 149, 25, 4, 238, 78, + 25, 4, 238, 74, 25, 4, 238, 77, 25, 4, 238, 75, 25, 4, 238, 76, 25, 4, + 238, 69, 25, 4, 238, 63, 25, 4, 238, 65, 25, 4, 238, 68, 25, 4, 238, 66, + 25, 4, 238, 67, 25, 4, 238, 64, 25, 4, 238, 62, 25, 4, 238, 58, 25, 4, + 238, 61, 25, 4, 238, 59, 25, 4, 238, 60, 25, 4, 224, 173, 25, 4, 224, 83, + 25, 4, 224, 118, 25, 4, 224, 172, 25, 4, 224, 138, 25, 4, 224, 141, 25, + 4, 224, 105, 25, 4, 224, 104, 25, 4, 233, 91, 57, 25, 4, 233, 91, 66, 25, + 4, 233, 91, 74, 25, 4, 233, 91, 255, 63, 25, 4, 233, 91, 248, 35, 25, 4, + 233, 91, 72, 25, 4, 233, 91, 73, 25, 4, 223, 117, 25, 4, 223, 19, 25, 4, + 223, 47, 25, 4, 223, 116, 25, 4, 223, 95, 25, 4, 223, 97, 25, 4, 223, 27, + 25, 4, 223, 6, 25, 4, 223, 85, 25, 4, 223, 65, 25, 4, 223, 72, 25, 4, + 223, 84, 25, 4, 223, 76, 25, 4, 223, 77, 25, 4, 223, 70, 25, 4, 223, 56, + 25, 4, 191, 25, 4, 223, 158, 25, 4, 223, 202, 25, 4, 224, 21, 25, 4, 223, + 225, 25, 4, 223, 228, 25, 4, 223, 183, 25, 4, 223, 177, 25, 4, 250, 189, + 25, 4, 248, 107, 25, 4, 250, 4, 25, 4, 250, 188, 25, 4, 250, 67, 25, 4, + 250, 77, 25, 4, 249, 161, 25, 4, 248, 79, 25, 4, 250, 117, 25, 4, 250, + 87, 25, 4, 250, 99, 25, 4, 250, 116, 25, 4, 250, 104, 25, 4, 250, 105, + 25, 4, 250, 92, 25, 4, 250, 78, 25, 4, 239, 179, 25, 4, 239, 101, 25, 4, + 239, 156, 25, 4, 239, 178, 25, 4, 239, 169, 25, 4, 239, 170, 25, 4, 239, + 117, 25, 4, 239, 84, 25, 4, 246, 193, 25, 4, 245, 218, 25, 4, 246, 46, + 25, 4, 246, 190, 25, 4, 246, 125, 25, 4, 246, 131, 25, 4, 246, 11, 25, 4, + 246, 10, 25, 4, 245, 188, 25, 4, 245, 184, 25, 4, 245, 187, 25, 4, 245, + 185, 25, 4, 245, 186, 25, 4, 246, 101, 25, 4, 246, 81, 25, 4, 246, 91, + 25, 4, 246, 100, 25, 4, 246, 95, 25, 4, 246, 96, 25, 4, 246, 85, 25, 4, + 246, 70, 25, 4, 226, 251, 25, 4, 226, 186, 25, 4, 226, 220, 25, 4, 226, + 250, 25, 4, 226, 238, 25, 4, 226, 239, 25, 4, 226, 201, 25, 4, 226, 180, + 25, 4, 251, 204, 25, 4, 251, 136, 25, 4, 251, 169, 25, 4, 251, 203, 25, + 4, 251, 179, 25, 4, 251, 182, 25, 4, 251, 150, 25, 4, 251, 125, 25, 4, + 233, 97, 25, 4, 233, 75, 25, 4, 233, 87, 25, 4, 233, 96, 25, 4, 233, 89, + 25, 4, 233, 90, 25, 4, 233, 79, 25, 4, 233, 71, 25, 4, 226, 44, 25, 4, + 226, 26, 25, 4, 226, 29, 25, 4, 226, 43, 25, 4, 226, 39, 25, 4, 226, 40, + 25, 4, 226, 28, 25, 4, 226, 24, 25, 4, 225, 186, 25, 4, 225, 178, 25, 4, + 225, 182, 25, 4, 225, 185, 25, 4, 225, 183, 25, 4, 225, 184, 25, 4, 225, + 180, 25, 4, 225, 179, 25, 4, 247, 129, 25, 4, 246, 219, 25, 4, 247, 70, + 25, 4, 247, 128, 25, 4, 247, 92, 25, 4, 247, 97, 25, 4, 247, 7, 25, 4, + 246, 206, 25, 4, 213, 25, 4, 232, 173, 25, 4, 233, 69, 25, 4, 233, 241, + 25, 4, 233, 144, 25, 4, 233, 151, 25, 4, 233, 4, 25, 4, 232, 156, 25, 4, + 231, 42, 25, 4, 236, 10, 25, 4, 246, 200, 25, 36, 246, 124, 76, 25, 230, + 206, 76, 25, 224, 91, 25, 246, 218, 228, 38, 25, 251, 54, 25, 229, 186, + 25, 251, 61, 25, 232, 211, 251, 61, 25, 232, 69, 76, 25, 233, 192, 229, + 173, 25, 21, 118, 25, 21, 113, 25, 21, 166, 25, 21, 158, 25, 21, 173, 25, + 21, 183, 25, 21, 194, 25, 21, 187, 25, 21, 192, 25, 65, 227, 23, 25, 65, + 225, 216, 25, 65, 226, 207, 25, 65, 246, 245, 25, 65, 247, 63, 25, 65, + 228, 206, 25, 65, 229, 159, 25, 65, 248, 12, 25, 65, 235, 57, 25, 65, + 244, 135, 25, 65, 227, 24, 226, 194, 25, 4, 230, 210, 236, 19, 25, 4, + 236, 15, 25, 4, 236, 16, 25, 4, 236, 17, 25, 4, 230, 210, 252, 60, 25, 4, + 252, 57, 25, 4, 252, 58, 25, 4, 252, 59, 25, 4, 230, 210, 246, 206, 25, + 4, 246, 202, 25, 4, 246, 203, 25, 4, 246, 204, 25, 4, 230, 210, 232, 156, + 25, 4, 232, 152, 25, 4, 232, 153, 25, 4, 232, 154, 25, 226, 119, 165, + 223, 186, 25, 226, 119, 165, 250, 36, 25, 226, 119, 165, 231, 143, 25, + 226, 119, 165, 229, 63, 231, 143, 25, 226, 119, 165, 249, 238, 25, 226, + 119, 165, 238, 242, 25, 226, 119, 165, 251, 158, 25, 226, 119, 165, 245, + 73, 25, 226, 119, 165, 250, 35, 25, 226, 119, 165, 238, 89, 131, 1, 57, + 131, 1, 72, 131, 1, 74, 131, 1, 73, 131, 1, 66, 131, 1, 196, 131, 1, 246, + 193, 131, 1, 177, 131, 1, 246, 131, 131, 1, 246, 46, 131, 1, 246, 11, + 131, 1, 245, 218, 131, 1, 245, 189, 131, 1, 154, 131, 1, 245, 121, 131, + 1, 245, 75, 131, 1, 244, 227, 131, 1, 244, 145, 131, 1, 244, 128, 131, 1, + 238, 43, 131, 1, 237, 243, 131, 1, 237, 193, 131, 1, 237, 143, 131, 1, + 237, 110, 131, 1, 237, 89, 131, 1, 198, 131, 1, 236, 235, 131, 1, 236, + 157, 131, 1, 236, 103, 131, 1, 236, 66, 131, 1, 236, 1, 131, 1, 244, 249, + 131, 1, 235, 243, 131, 1, 235, 162, 131, 1, 235, 89, 131, 1, 235, 6, 131, + 1, 234, 206, 131, 1, 234, 179, 131, 1, 232, 83, 131, 1, 232, 71, 131, 1, + 232, 66, 131, 1, 232, 60, 131, 1, 232, 49, 131, 1, 232, 47, 131, 1, 231, + 31, 131, 1, 193, 131, 1, 230, 213, 131, 1, 229, 15, 131, 1, 228, 169, + 131, 1, 228, 6, 131, 1, 227, 202, 131, 1, 250, 189, 131, 1, 227, 107, + 131, 1, 250, 77, 131, 1, 227, 44, 131, 1, 250, 4, 131, 1, 226, 175, 131, + 1, 249, 161, 131, 1, 248, 107, 131, 1, 248, 81, 131, 1, 249, 170, 131, 1, + 226, 138, 131, 1, 226, 137, 131, 1, 226, 129, 131, 1, 226, 128, 131, 1, + 226, 127, 131, 1, 226, 126, 131, 1, 226, 44, 131, 1, 226, 40, 131, 1, + 226, 29, 131, 1, 226, 28, 131, 1, 226, 26, 131, 1, 226, 25, 131, 1, 224, + 173, 131, 1, 224, 141, 131, 1, 224, 118, 131, 1, 224, 105, 131, 1, 224, + 83, 131, 1, 224, 77, 131, 1, 191, 131, 1, 223, 228, 131, 1, 223, 202, + 131, 1, 223, 183, 131, 1, 223, 158, 131, 1, 223, 135, 16, 17, 72, 16, 17, + 255, 61, 16, 17, 74, 16, 17, 240, 47, 16, 17, 73, 16, 17, 234, 52, 16, + 17, 224, 24, 234, 52, 16, 17, 60, 248, 35, 16, 17, 60, 74, 16, 17, 57, + 16, 17, 255, 63, 16, 17, 224, 141, 16, 17, 127, 224, 141, 16, 17, 224, + 118, 16, 17, 127, 224, 118, 16, 17, 224, 113, 16, 17, 127, 224, 113, 16, + 17, 224, 105, 16, 17, 127, 224, 105, 16, 17, 224, 98, 16, 17, 127, 224, + 98, 16, 17, 235, 226, 224, 98, 16, 17, 224, 173, 16, 17, 127, 224, 173, + 16, 17, 224, 172, 16, 17, 127, 224, 172, 16, 17, 235, 226, 224, 172, 16, + 17, 254, 253, 16, 17, 224, 24, 224, 174, 16, 17, 246, 16, 228, 38, 16, + 17, 35, 155, 16, 17, 35, 245, 236, 16, 17, 35, 252, 126, 132, 231, 139, + 16, 17, 35, 226, 106, 132, 231, 139, 16, 17, 35, 41, 132, 231, 139, 16, + 17, 35, 231, 139, 16, 17, 35, 47, 155, 16, 17, 35, 47, 229, 63, 61, 228, + 10, 16, 17, 35, 236, 154, 249, 140, 16, 17, 35, 229, 63, 169, 82, 16, 17, + 35, 233, 10, 16, 17, 35, 103, 227, 96, 16, 17, 247, 239, 16, 17, 240, 16, + 16, 17, 234, 61, 16, 17, 254, 190, 16, 17, 233, 151, 16, 17, 233, 239, + 16, 17, 233, 69, 16, 17, 233, 41, 16, 17, 233, 4, 16, 17, 232, 244, 16, + 17, 224, 24, 232, 244, 16, 17, 60, 245, 109, 16, 17, 60, 245, 75, 16, 17, + 213, 16, 17, 233, 241, 16, 17, 232, 154, 16, 17, 127, 232, 154, 16, 17, + 232, 152, 16, 17, 127, 232, 152, 16, 17, 232, 151, 16, 17, 127, 232, 151, + 16, 17, 232, 149, 16, 17, 127, 232, 149, 16, 17, 232, 148, 16, 17, 127, + 232, 148, 16, 17, 232, 156, 16, 17, 127, 232, 156, 16, 17, 232, 155, 16, + 17, 127, 232, 155, 16, 17, 224, 24, 232, 155, 16, 17, 233, 244, 16, 17, + 127, 233, 244, 16, 17, 60, 212, 16, 17, 227, 44, 16, 17, 227, 103, 16, + 17, 226, 175, 16, 17, 226, 165, 16, 17, 96, 16, 17, 226, 108, 16, 17, + 224, 24, 226, 108, 16, 17, 60, 250, 67, 16, 17, 60, 250, 4, 16, 17, 227, + 107, 16, 17, 227, 104, 16, 17, 225, 220, 16, 17, 127, 225, 220, 16, 17, + 225, 205, 16, 17, 127, 225, 205, 16, 17, 225, 204, 16, 17, 127, 225, 204, + 16, 17, 113, 16, 17, 127, 113, 16, 17, 225, 201, 16, 17, 127, 225, 201, + 16, 17, 225, 222, 16, 17, 127, 225, 222, 16, 17, 225, 221, 16, 17, 127, + 225, 221, 16, 17, 235, 226, 225, 221, 16, 17, 227, 109, 16, 17, 226, 17, + 16, 17, 226, 6, 16, 17, 226, 5, 16, 17, 226, 20, 16, 17, 239, 3, 16, 17, + 239, 69, 16, 17, 238, 199, 16, 17, 238, 191, 16, 17, 238, 150, 16, 17, + 238, 139, 16, 17, 224, 24, 238, 139, 16, 17, 177, 16, 17, 239, 72, 16, + 17, 238, 76, 16, 17, 127, 238, 76, 16, 17, 238, 74, 16, 17, 127, 238, 74, + 16, 17, 238, 73, 16, 17, 127, 238, 73, 16, 17, 238, 72, 16, 17, 127, 238, + 72, 16, 17, 238, 71, 16, 17, 127, 238, 71, 16, 17, 238, 78, 16, 17, 127, + 238, 78, 16, 17, 238, 77, 16, 17, 127, 238, 77, 16, 17, 235, 226, 238, + 77, 16, 17, 239, 76, 16, 17, 238, 79, 16, 17, 228, 151, 238, 253, 16, 17, + 228, 151, 238, 192, 16, 17, 228, 151, 238, 147, 16, 17, 228, 151, 239, + 58, 16, 17, 251, 231, 16, 17, 252, 37, 16, 17, 251, 118, 16, 17, 251, + 110, 16, 17, 251, 68, 16, 17, 251, 17, 16, 17, 224, 24, 251, 17, 16, 17, + 252, 39, 16, 17, 252, 38, 16, 17, 250, 208, 16, 17, 127, 250, 208, 16, + 17, 250, 206, 16, 17, 127, 250, 206, 16, 17, 250, 205, 16, 17, 127, 250, + 205, 16, 17, 250, 204, 16, 17, 127, 250, 204, 16, 17, 250, 203, 16, 17, + 127, 250, 203, 16, 17, 250, 210, 16, 17, 127, 250, 210, 16, 17, 250, 209, + 16, 17, 127, 250, 209, 16, 17, 235, 226, 250, 209, 16, 17, 252, 44, 16, + 17, 230, 232, 226, 253, 16, 17, 236, 235, 16, 17, 237, 65, 16, 17, 236, + 157, 16, 17, 236, 137, 16, 17, 236, 103, 16, 17, 236, 86, 16, 17, 224, + 24, 236, 86, 16, 17, 198, 16, 17, 237, 66, 16, 17, 236, 17, 16, 17, 127, + 236, 17, 16, 17, 236, 15, 16, 17, 127, 236, 15, 16, 17, 236, 14, 16, 17, + 127, 236, 14, 16, 17, 236, 13, 16, 17, 127, 236, 13, 16, 17, 236, 12, 16, + 17, 127, 236, 12, 16, 17, 236, 19, 16, 17, 127, 236, 19, 16, 17, 236, 18, + 16, 17, 127, 236, 18, 16, 17, 235, 226, 236, 18, 16, 17, 185, 16, 17, + 127, 185, 16, 17, 236, 160, 16, 17, 254, 61, 185, 16, 17, 230, 232, 185, + 16, 17, 235, 162, 16, 17, 235, 253, 16, 17, 235, 89, 16, 17, 235, 68, 16, + 17, 235, 6, 16, 17, 234, 253, 16, 17, 224, 24, 234, 253, 16, 17, 236, 1, + 16, 17, 235, 254, 16, 17, 234, 175, 16, 17, 127, 234, 175, 16, 17, 234, + 177, 16, 17, 127, 234, 177, 16, 17, 234, 176, 16, 17, 127, 234, 176, 16, + 17, 235, 226, 234, 176, 16, 17, 199, 16, 17, 60, 235, 139, 16, 17, 235, + 94, 16, 17, 237, 243, 16, 17, 238, 41, 16, 17, 237, 193, 16, 17, 237, + 182, 16, 17, 237, 143, 16, 17, 237, 125, 16, 17, 224, 24, 237, 125, 16, + 17, 238, 43, 16, 17, 238, 42, 16, 17, 237, 86, 16, 17, 127, 237, 86, 16, + 17, 237, 85, 16, 17, 127, 237, 85, 16, 17, 237, 84, 16, 17, 127, 237, 84, + 16, 17, 237, 83, 16, 17, 127, 237, 83, 16, 17, 237, 82, 16, 17, 127, 237, + 82, 16, 17, 237, 88, 16, 17, 127, 237, 88, 16, 17, 237, 87, 16, 17, 127, + 237, 87, 16, 17, 149, 16, 17, 127, 149, 16, 17, 124, 149, 16, 17, 230, + 213, 16, 17, 231, 27, 16, 17, 229, 15, 16, 17, 229, 0, 16, 17, 228, 169, + 16, 17, 228, 159, 16, 17, 224, 24, 228, 159, 16, 17, 231, 31, 16, 17, + 231, 29, 16, 17, 227, 196, 16, 17, 127, 227, 196, 16, 17, 227, 193, 16, + 17, 127, 227, 193, 16, 17, 227, 192, 16, 17, 127, 227, 192, 16, 17, 227, + 191, 16, 17, 127, 227, 191, 16, 17, 227, 190, 16, 17, 127, 227, 190, 16, + 17, 227, 200, 16, 17, 127, 227, 200, 16, 17, 227, 199, 16, 17, 127, 227, + 199, 16, 17, 235, 226, 227, 199, 16, 17, 193, 16, 17, 254, 61, 193, 16, + 17, 227, 201, 16, 17, 252, 147, 193, 16, 17, 236, 83, 228, 203, 16, 17, + 235, 226, 228, 198, 16, 17, 235, 226, 231, 33, 16, 17, 235, 226, 228, + 121, 16, 17, 235, 226, 228, 8, 16, 17, 235, 226, 228, 197, 16, 17, 235, + 226, 230, 215, 16, 17, 229, 114, 16, 17, 229, 90, 16, 17, 229, 85, 16, + 17, 229, 71, 16, 17, 229, 66, 16, 17, 229, 146, 16, 17, 229, 142, 16, 17, + 229, 28, 16, 17, 127, 229, 28, 16, 17, 229, 27, 16, 17, 127, 229, 27, 16, + 17, 229, 26, 16, 17, 127, 229, 26, 16, 17, 229, 25, 16, 17, 127, 229, 25, + 16, 17, 229, 24, 16, 17, 127, 229, 24, 16, 17, 229, 30, 16, 17, 127, 229, + 30, 16, 17, 229, 29, 16, 17, 127, 229, 29, 16, 17, 229, 148, 16, 17, 223, + 228, 16, 17, 224, 19, 16, 17, 223, 202, 16, 17, 223, 194, 16, 17, 223, + 183, 16, 17, 223, 172, 16, 17, 224, 24, 223, 172, 16, 17, 191, 16, 17, + 224, 21, 16, 17, 223, 132, 16, 17, 127, 223, 132, 16, 17, 223, 131, 16, + 17, 127, 223, 131, 16, 17, 223, 130, 16, 17, 127, 223, 130, 16, 17, 223, + 129, 16, 17, 127, 223, 129, 16, 17, 223, 128, 16, 17, 127, 223, 128, 16, + 17, 223, 134, 16, 17, 127, 223, 134, 16, 17, 223, 133, 16, 17, 127, 223, + 133, 16, 17, 235, 226, 223, 133, 16, 17, 224, 25, 16, 17, 252, 179, 224, + 25, 16, 17, 127, 224, 25, 16, 17, 230, 232, 223, 202, 16, 17, 231, 244, + 16, 17, 232, 26, 231, 244, 16, 17, 127, 237, 243, 16, 17, 232, 21, 16, + 17, 231, 180, 16, 17, 231, 144, 16, 17, 231, 122, 16, 17, 231, 114, 16, + 17, 127, 237, 143, 16, 17, 208, 16, 17, 232, 22, 16, 17, 127, 238, 43, + 16, 17, 231, 45, 16, 17, 127, 231, 45, 16, 17, 146, 16, 17, 127, 146, 16, + 17, 124, 146, 16, 17, 247, 97, 16, 17, 247, 126, 16, 17, 247, 70, 16, 17, + 247, 57, 16, 17, 247, 7, 16, 17, 247, 3, 16, 17, 247, 129, 16, 17, 247, + 128, 16, 17, 246, 205, 16, 17, 127, 246, 205, 16, 17, 247, 130, 16, 17, + 226, 239, 16, 17, 236, 3, 226, 239, 16, 17, 226, 220, 16, 17, 236, 3, + 226, 220, 16, 17, 226, 216, 16, 17, 236, 3, 226, 216, 16, 17, 226, 201, + 16, 17, 226, 198, 16, 17, 226, 251, 16, 17, 226, 250, 16, 17, 226, 179, + 16, 17, 127, 226, 179, 16, 17, 226, 253, 16, 17, 226, 9, 16, 17, 226, 8, + 16, 17, 226, 7, 16, 17, 226, 10, 16, 17, 226, 11, 16, 17, 225, 199, 16, + 17, 225, 198, 16, 17, 225, 197, 16, 17, 225, 200, 16, 17, 234, 193, 245, + 121, 16, 17, 234, 193, 245, 75, 16, 17, 234, 193, 245, 61, 16, 17, 234, + 193, 244, 227, 16, 17, 234, 193, 244, 218, 16, 17, 234, 193, 154, 16, 17, + 234, 193, 245, 167, 16, 17, 234, 193, 212, 16, 17, 234, 192, 212, 16, 17, + 245, 55, 16, 17, 232, 134, 16, 17, 232, 104, 16, 17, 232, 99, 16, 17, + 232, 95, 16, 17, 232, 90, 16, 17, 232, 138, 16, 17, 232, 137, 16, 17, + 232, 139, 16, 17, 226, 134, 16, 17, 226, 132, 16, 17, 226, 131, 16, 17, + 226, 135, 16, 17, 127, 231, 244, 16, 17, 127, 231, 180, 16, 17, 127, 231, + 122, 16, 17, 127, 208, 16, 17, 235, 135, 16, 17, 235, 114, 16, 17, 235, + 110, 16, 17, 235, 107, 16, 17, 235, 103, 16, 17, 235, 137, 16, 17, 235, + 136, 16, 17, 235, 139, 16, 17, 235, 17, 16, 17, 230, 232, 229, 114, 16, + 17, 230, 232, 229, 90, 16, 17, 230, 232, 229, 71, 16, 17, 230, 232, 229, + 146, 16, 17, 224, 96, 226, 239, 16, 17, 224, 96, 226, 220, 16, 17, 224, + 96, 226, 201, 16, 17, 224, 96, 226, 251, 16, 17, 224, 96, 226, 253, 16, + 17, 237, 199, 16, 17, 237, 198, 16, 17, 237, 197, 16, 17, 237, 196, 16, + 17, 237, 205, 16, 17, 237, 204, 16, 17, 237, 206, 16, 17, 226, 252, 226, + 239, 16, 17, 226, 252, 226, 220, 16, 17, 226, 252, 226, 216, 16, 17, 226, + 252, 226, 201, 16, 17, 226, 252, 226, 198, 16, 17, 226, 252, 226, 251, + 16, 17, 226, 252, 226, 250, 16, 17, 226, 252, 226, 253, 16, 17, 254, 243, + 254, 27, 16, 17, 252, 147, 72, 16, 17, 252, 147, 74, 16, 17, 252, 147, + 73, 16, 17, 252, 147, 57, 16, 17, 252, 147, 224, 141, 16, 17, 252, 147, + 224, 118, 16, 17, 252, 147, 224, 105, 16, 17, 252, 147, 224, 173, 16, 17, + 252, 147, 235, 162, 16, 17, 252, 147, 235, 89, 16, 17, 252, 147, 235, 6, + 16, 17, 252, 147, 236, 1, 16, 17, 252, 147, 239, 3, 16, 17, 252, 147, + 238, 199, 16, 17, 252, 147, 238, 150, 16, 17, 252, 147, 177, 16, 17, 230, + 232, 245, 121, 16, 17, 230, 232, 245, 75, 16, 17, 230, 232, 244, 227, 16, + 17, 230, 232, 154, 16, 17, 60, 246, 52, 16, 17, 60, 246, 54, 16, 17, 60, + 246, 58, 16, 17, 60, 246, 57, 16, 17, 60, 246, 55, 16, 17, 60, 246, 66, + 16, 17, 60, 231, 70, 16, 17, 60, 231, 122, 16, 17, 60, 231, 244, 16, 17, + 60, 231, 229, 16, 17, 60, 231, 180, 16, 17, 60, 208, 16, 17, 60, 224, 83, + 16, 17, 60, 224, 105, 16, 17, 60, 224, 141, 16, 17, 60, 224, 138, 16, 17, + 60, 224, 118, 16, 17, 60, 224, 173, 16, 17, 60, 244, 121, 16, 17, 60, + 244, 122, 16, 17, 60, 244, 125, 16, 17, 60, 244, 124, 16, 17, 60, 244, + 123, 16, 17, 60, 244, 127, 16, 17, 60, 226, 186, 16, 17, 60, 226, 201, + 16, 17, 60, 226, 239, 16, 17, 60, 226, 238, 16, 17, 60, 226, 220, 16, 17, + 60, 226, 251, 16, 17, 60, 225, 253, 16, 17, 60, 226, 5, 16, 17, 60, 226, + 17, 16, 17, 60, 226, 16, 16, 17, 60, 226, 6, 16, 17, 60, 226, 20, 16, 17, + 60, 232, 173, 16, 17, 60, 233, 4, 16, 17, 60, 233, 151, 16, 17, 60, 233, + 144, 16, 17, 60, 233, 69, 16, 17, 60, 213, 16, 17, 60, 233, 244, 16, 17, + 60, 245, 218, 16, 17, 60, 246, 11, 16, 17, 60, 246, 131, 16, 17, 60, 246, + 125, 16, 17, 60, 246, 46, 16, 17, 60, 246, 193, 16, 17, 60, 238, 204, 16, + 17, 60, 238, 208, 16, 17, 60, 238, 217, 16, 17, 60, 238, 216, 16, 17, 60, + 238, 212, 16, 17, 60, 238, 227, 16, 17, 60, 238, 162, 16, 17, 60, 238, + 163, 16, 17, 60, 238, 166, 16, 17, 60, 238, 165, 16, 17, 60, 238, 164, + 16, 17, 60, 238, 167, 16, 17, 60, 238, 168, 16, 17, 60, 234, 206, 16, 17, + 60, 235, 6, 16, 17, 60, 235, 162, 16, 17, 60, 235, 160, 16, 17, 60, 235, + 89, 16, 17, 60, 236, 1, 16, 17, 60, 236, 66, 16, 17, 60, 236, 103, 16, + 17, 60, 236, 235, 16, 17, 60, 236, 226, 16, 17, 60, 236, 157, 16, 17, 60, + 198, 16, 17, 60, 223, 158, 16, 17, 60, 223, 183, 16, 17, 60, 223, 228, + 16, 17, 60, 223, 225, 16, 17, 60, 223, 202, 16, 17, 60, 191, 16, 17, 60, + 239, 101, 16, 17, 230, 232, 239, 101, 16, 17, 60, 239, 117, 16, 17, 60, + 239, 170, 16, 17, 60, 239, 169, 16, 17, 60, 239, 156, 16, 17, 230, 232, + 239, 156, 16, 17, 60, 239, 179, 16, 17, 60, 239, 130, 16, 17, 60, 239, + 134, 16, 17, 60, 239, 144, 16, 17, 60, 239, 143, 16, 17, 60, 239, 142, + 16, 17, 60, 239, 145, 16, 17, 60, 237, 110, 16, 17, 60, 237, 143, 16, 17, + 60, 237, 243, 16, 17, 60, 237, 239, 16, 17, 60, 237, 193, 16, 17, 60, + 238, 43, 16, 17, 60, 249, 165, 16, 17, 60, 249, 166, 16, 17, 60, 249, + 169, 16, 17, 60, 249, 168, 16, 17, 60, 249, 167, 16, 17, 60, 249, 170, + 16, 17, 60, 237, 195, 16, 17, 60, 237, 197, 16, 17, 60, 237, 201, 16, 17, + 60, 237, 200, 16, 17, 60, 237, 199, 16, 17, 60, 237, 205, 16, 17, 60, + 226, 130, 16, 17, 60, 226, 131, 16, 17, 60, 226, 134, 16, 17, 60, 226, + 133, 16, 17, 60, 226, 132, 16, 17, 60, 226, 135, 16, 17, 60, 226, 127, + 16, 17, 60, 226, 128, 16, 17, 60, 226, 137, 16, 17, 60, 226, 136, 16, 17, + 60, 226, 129, 16, 17, 60, 226, 138, 16, 17, 60, 223, 19, 16, 17, 60, 223, + 27, 16, 17, 60, 223, 97, 16, 17, 60, 223, 95, 16, 17, 60, 223, 47, 16, + 17, 60, 223, 117, 16, 17, 60, 223, 119, 16, 17, 60, 59, 223, 119, 16, 17, + 60, 248, 61, 16, 17, 60, 248, 62, 16, 17, 60, 248, 69, 16, 17, 60, 248, + 68, 16, 17, 60, 248, 64, 16, 17, 60, 248, 70, 16, 17, 60, 228, 6, 16, 17, + 60, 228, 169, 16, 17, 60, 230, 213, 16, 17, 60, 230, 203, 16, 17, 60, + 229, 15, 16, 17, 60, 231, 31, 16, 17, 60, 229, 43, 16, 17, 60, 229, 71, + 16, 17, 60, 229, 114, 16, 17, 60, 229, 112, 16, 17, 60, 229, 90, 16, 17, + 60, 229, 146, 16, 17, 60, 229, 148, 16, 17, 60, 226, 26, 16, 17, 60, 226, + 28, 16, 17, 60, 226, 40, 16, 17, 60, 226, 39, 16, 17, 60, 226, 29, 16, + 17, 60, 226, 44, 16, 17, 60, 251, 136, 16, 17, 60, 251, 150, 16, 17, 60, + 251, 182, 16, 17, 60, 251, 179, 16, 17, 60, 251, 169, 16, 17, 60, 251, + 204, 16, 17, 60, 225, 255, 16, 17, 60, 226, 0, 16, 17, 60, 226, 3, 16, + 17, 60, 226, 2, 16, 17, 60, 226, 1, 16, 17, 60, 226, 4, 16, 17, 251, 170, + 53, 16, 17, 246, 218, 228, 38, 16, 17, 232, 130, 16, 17, 235, 134, 16, + 17, 235, 14, 16, 17, 235, 13, 16, 17, 235, 12, 16, 17, 235, 11, 16, 17, + 235, 16, 16, 17, 235, 15, 234, 86, 228, 146, 76, 234, 86, 1, 252, 218, + 234, 86, 1, 237, 103, 234, 86, 1, 247, 96, 234, 86, 1, 231, 15, 234, 86, + 1, 235, 56, 234, 86, 1, 225, 169, 234, 86, 1, 250, 167, 234, 86, 1, 226, + 153, 234, 86, 1, 251, 63, 234, 86, 1, 251, 223, 234, 86, 1, 236, 58, 234, + 86, 1, 245, 253, 234, 86, 1, 235, 127, 234, 86, 1, 228, 33, 234, 86, 1, + 231, 67, 234, 86, 1, 254, 250, 234, 86, 1, 234, 56, 234, 86, 1, 225, 103, + 234, 86, 1, 248, 54, 234, 86, 1, 239, 218, 234, 86, 1, 248, 55, 234, 86, + 1, 234, 31, 234, 86, 1, 225, 154, 234, 86, 1, 240, 53, 234, 86, 1, 248, + 52, 234, 86, 1, 233, 137, 234, 86, 247, 95, 76, 234, 86, 200, 247, 95, + 76, 140, 1, 247, 86, 247, 78, 247, 98, 247, 130, 140, 1, 196, 140, 1, + 225, 89, 225, 104, 66, 140, 1, 223, 160, 140, 1, 224, 25, 140, 1, 224, + 174, 140, 1, 226, 182, 226, 181, 226, 196, 140, 1, 247, 168, 140, 1, 254, + 169, 57, 140, 1, 234, 21, 73, 140, 1, 255, 44, 57, 140, 1, 255, 15, 140, + 1, 237, 130, 73, 140, 1, 229, 56, 73, 140, 1, 73, 140, 1, 234, 88, 140, + 1, 234, 61, 140, 1, 232, 11, 232, 19, 231, 224, 146, 140, 1, 239, 13, + 140, 1, 251, 221, 140, 1, 239, 14, 239, 76, 140, 1, 214, 140, 1, 247, + 228, 140, 1, 246, 128, 245, 177, 214, 140, 1, 246, 160, 140, 1, 224, 81, + 224, 76, 224, 174, 140, 1, 245, 160, 212, 140, 1, 245, 164, 212, 140, 1, + 237, 132, 212, 140, 1, 229, 59, 212, 140, 1, 235, 222, 234, 170, 235, + 223, 199, 140, 1, 229, 57, 199, 140, 1, 248, 135, 140, 1, 239, 202, 239, + 206, 239, 197, 74, 140, 1, 72, 140, 1, 239, 162, 239, 182, 140, 1, 246, + 114, 140, 1, 237, 133, 255, 19, 140, 1, 229, 61, 57, 140, 1, 239, 190, + 247, 213, 140, 1, 233, 110, 233, 127, 233, 244, 140, 1, 254, 221, 247, + 212, 140, 1, 228, 149, 193, 140, 1, 229, 4, 237, 129, 193, 140, 1, 229, + 55, 193, 140, 1, 252, 44, 140, 1, 223, 119, 140, 1, 226, 142, 226, 147, + 225, 188, 227, 109, 140, 1, 229, 54, 227, 109, 140, 1, 222, 222, 140, 1, + 252, 203, 252, 206, 252, 153, 254, 27, 140, 1, 229, 60, 254, 27, 140, 1, + 248, 134, 140, 1, 234, 40, 140, 1, 248, 23, 248, 25, 72, 140, 1, 237, 30, + 237, 36, 185, 140, 1, 237, 131, 185, 140, 1, 229, 58, 185, 140, 1, 237, + 255, 238, 28, 237, 136, 149, 140, 1, 248, 136, 140, 1, 239, 255, 140, 1, + 240, 0, 140, 1, 250, 178, 250, 183, 222, 222, 140, 1, 234, 17, 247, 167, + 73, 140, 1, 248, 51, 140, 1, 239, 217, 140, 1, 250, 207, 140, 1, 252, 32, + 140, 1, 251, 230, 140, 1, 228, 63, 140, 1, 237, 128, 140, 1, 229, 53, + 140, 1, 244, 68, 140, 1, 232, 139, 140, 1, 224, 73, 140, 228, 241, 232, + 170, 140, 236, 53, 232, 170, 140, 250, 244, 232, 170, 140, 254, 106, 98, + 140, 225, 224, 98, 140, 252, 217, 98, 227, 94, 1, 57, 227, 94, 1, 74, + 227, 94, 1, 66, 227, 94, 1, 177, 227, 94, 1, 246, 193, 227, 94, 1, 235, + 137, 227, 94, 1, 227, 107, 227, 94, 1, 250, 189, 227, 94, 1, 236, 1, 227, + 94, 1, 213, 227, 94, 1, 253, 70, 227, 94, 1, 198, 227, 94, 1, 191, 227, + 94, 1, 238, 43, 227, 94, 1, 224, 173, 227, 94, 1, 231, 31, 227, 94, 1, + 154, 227, 94, 31, 5, 74, 227, 94, 31, 5, 66, 227, 94, 5, 224, 216, 245, + 143, 1, 57, 245, 143, 1, 74, 245, 143, 1, 66, 245, 143, 1, 177, 245, 143, + 1, 246, 193, 245, 143, 1, 235, 137, 245, 143, 1, 227, 107, 245, 143, 1, + 250, 189, 245, 143, 1, 236, 1, 245, 143, 1, 213, 245, 143, 1, 253, 70, + 245, 143, 1, 198, 245, 143, 1, 191, 245, 143, 1, 208, 245, 143, 1, 238, + 43, 245, 143, 1, 224, 173, 245, 143, 1, 231, 31, 245, 143, 1, 154, 245, + 143, 31, 5, 74, 245, 143, 31, 5, 66, 245, 143, 5, 233, 214, 233, 83, 228, + 241, 232, 170, 233, 83, 47, 232, 170, 252, 87, 1, 57, 252, 87, 1, 74, + 252, 87, 1, 66, 252, 87, 1, 177, 252, 87, 1, 246, 193, 252, 87, 1, 235, + 137, 252, 87, 1, 227, 107, 252, 87, 1, 250, 189, 252, 87, 1, 236, 1, 252, + 87, 1, 213, 252, 87, 1, 253, 70, 252, 87, 1, 198, 252, 87, 1, 191, 252, + 87, 1, 208, 252, 87, 1, 238, 43, 252, 87, 1, 224, 173, 252, 87, 1, 231, + 31, 252, 87, 1, 154, 252, 87, 31, 5, 74, 252, 87, 31, 5, 66, 227, 93, 1, + 57, 227, 93, 1, 74, 227, 93, 1, 66, 227, 93, 1, 177, 227, 93, 1, 246, + 193, 227, 93, 1, 235, 137, 227, 93, 1, 227, 107, 227, 93, 1, 250, 189, + 227, 93, 1, 236, 1, 227, 93, 1, 213, 227, 93, 1, 253, 70, 227, 93, 1, + 198, 227, 93, 1, 191, 227, 93, 1, 238, 43, 227, 93, 1, 224, 173, 227, 93, + 1, 231, 31, 227, 93, 31, 5, 74, 227, 93, 31, 5, 66, 71, 1, 177, 71, 1, + 238, 227, 71, 1, 238, 150, 71, 1, 238, 208, 71, 1, 235, 107, 71, 1, 252, + 39, 71, 1, 251, 204, 71, 1, 251, 68, 71, 1, 251, 150, 71, 1, 234, 152, + 71, 1, 250, 189, 71, 1, 226, 10, 71, 1, 249, 161, 71, 1, 226, 7, 71, 1, + 235, 9, 71, 1, 227, 107, 71, 1, 226, 251, 71, 1, 96, 71, 1, 226, 201, 71, + 1, 235, 6, 71, 1, 253, 70, 71, 1, 233, 97, 71, 1, 233, 4, 71, 1, 233, 79, + 71, 1, 236, 103, 71, 1, 223, 183, 71, 1, 231, 122, 71, 1, 237, 143, 71, + 1, 224, 206, 71, 1, 229, 146, 71, 1, 228, 84, 71, 1, 231, 31, 71, 1, 154, + 71, 1, 238, 43, 71, 1, 232, 138, 71, 240, 9, 31, 232, 124, 71, 240, 9, + 31, 232, 137, 71, 240, 9, 31, 232, 104, 71, 240, 9, 31, 232, 99, 71, 240, + 9, 31, 232, 84, 71, 240, 9, 31, 232, 61, 71, 240, 9, 31, 232, 49, 71, + 240, 9, 31, 232, 48, 71, 240, 9, 31, 231, 43, 71, 240, 9, 31, 231, 36, + 71, 240, 9, 31, 237, 80, 71, 240, 9, 31, 237, 71, 71, 240, 9, 31, 232, + 119, 71, 240, 9, 31, 232, 130, 71, 240, 9, 31, 232, 91, 225, 196, 118, + 71, 240, 9, 31, 232, 91, 225, 196, 113, 71, 240, 9, 31, 232, 120, 71, 31, + 239, 254, 254, 135, 71, 31, 239, 254, 255, 63, 71, 31, 5, 255, 63, 71, + 31, 5, 74, 71, 31, 5, 240, 47, 71, 31, 5, 224, 25, 71, 31, 5, 223, 127, + 71, 31, 5, 66, 71, 31, 5, 225, 76, 71, 31, 5, 225, 170, 71, 31, 5, 234, + 88, 71, 31, 5, 191, 71, 31, 5, 240, 72, 71, 31, 5, 72, 71, 31, 5, 255, + 19, 71, 31, 5, 254, 253, 71, 31, 5, 234, 52, 71, 31, 5, 254, 53, 71, 5, + 235, 67, 71, 5, 231, 242, 71, 5, 223, 137, 71, 5, 236, 25, 71, 5, 226, + 68, 71, 5, 253, 38, 71, 5, 231, 118, 71, 5, 226, 123, 71, 5, 239, 52, 71, + 5, 254, 255, 71, 5, 230, 254, 230, 250, 71, 5, 224, 213, 71, 5, 251, 65, + 71, 5, 253, 20, 71, 5, 238, 222, 71, 5, 253, 34, 71, 5, 252, 28, 233, 42, + 238, 83, 71, 5, 237, 223, 226, 108, 71, 5, 252, 192, 71, 5, 233, 81, 236, + 64, 71, 5, 238, 138, 71, 250, 222, 14, 231, 176, 71, 5, 254, 39, 71, 5, + 254, 56, 71, 21, 223, 89, 71, 21, 118, 71, 21, 113, 71, 21, 166, 71, 21, + 158, 71, 21, 173, 71, 21, 183, 71, 21, 194, 71, 21, 187, 71, 21, 192, 71, + 14, 237, 223, 254, 58, 228, 160, 71, 14, 237, 223, 254, 58, 236, 40, 71, + 14, 237, 223, 254, 58, 233, 41, 71, 14, 237, 223, 254, 58, 252, 219, 71, + 14, 237, 223, 254, 58, 252, 75, 71, 14, 237, 223, 254, 58, 232, 226, 71, + 14, 237, 223, 254, 58, 232, 220, 71, 14, 237, 223, 254, 58, 232, 218, 71, + 14, 237, 223, 254, 58, 232, 224, 71, 14, 237, 223, 254, 58, 232, 222, 68, + 252, 163, 68, 247, 249, 68, 251, 54, 68, 246, 218, 228, 38, 68, 251, 61, + 68, 246, 243, 249, 138, 68, 226, 122, 228, 165, 244, 95, 68, 229, 14, 4, + 252, 123, 237, 13, 68, 237, 33, 251, 54, 68, 237, 33, 246, 218, 228, 38, + 68, 235, 54, 68, 246, 230, 38, 230, 193, 118, 68, 246, 230, 38, 230, 193, + 113, 68, 246, 230, 38, 230, 193, 166, 68, 31, 229, 173, 68, 21, 223, 89, + 68, 21, 118, 68, 21, 113, 68, 21, 166, 68, 21, 158, 68, 21, 173, 68, 21, + 183, 68, 21, 194, 68, 21, 187, 68, 21, 192, 68, 1, 57, 68, 1, 72, 68, 1, + 74, 68, 1, 73, 68, 1, 66, 68, 1, 234, 88, 68, 1, 225, 159, 68, 1, 248, + 35, 68, 1, 236, 1, 68, 1, 254, 184, 68, 1, 253, 70, 68, 1, 213, 68, 1, + 232, 138, 68, 1, 246, 193, 68, 1, 198, 68, 1, 238, 43, 68, 1, 231, 31, + 68, 1, 229, 146, 68, 1, 227, 107, 68, 1, 250, 189, 68, 1, 251, 204, 68, + 1, 239, 179, 68, 1, 191, 68, 1, 208, 68, 1, 224, 173, 68, 1, 247, 129, + 68, 1, 177, 68, 1, 238, 227, 68, 1, 226, 44, 68, 1, 223, 117, 68, 1, 245, + 167, 68, 1, 223, 20, 68, 1, 237, 205, 68, 1, 223, 72, 68, 1, 251, 169, + 68, 1, 226, 122, 182, 31, 53, 68, 1, 226, 122, 72, 68, 1, 226, 122, 74, + 68, 1, 226, 122, 73, 68, 1, 226, 122, 66, 68, 1, 226, 122, 234, 88, 68, + 1, 226, 122, 225, 159, 68, 1, 226, 122, 254, 184, 68, 1, 226, 122, 253, + 70, 68, 1, 226, 122, 213, 68, 1, 226, 122, 232, 138, 68, 1, 226, 122, + 246, 193, 68, 1, 226, 122, 198, 68, 1, 226, 122, 227, 107, 68, 1, 226, + 122, 250, 189, 68, 1, 226, 122, 251, 204, 68, 1, 226, 122, 239, 179, 68, + 1, 226, 122, 226, 44, 68, 1, 226, 122, 191, 68, 1, 226, 122, 224, 173, + 68, 1, 226, 122, 177, 68, 1, 226, 122, 246, 190, 68, 1, 226, 122, 245, + 167, 68, 1, 226, 122, 239, 155, 68, 1, 226, 122, 235, 87, 68, 1, 226, + 122, 248, 70, 68, 1, 229, 14, 72, 68, 1, 229, 14, 74, 68, 1, 229, 14, + 239, 188, 68, 1, 229, 14, 225, 159, 68, 1, 229, 14, 66, 68, 1, 229, 14, + 254, 184, 68, 1, 229, 14, 177, 68, 1, 229, 14, 246, 193, 68, 1, 229, 14, + 154, 68, 1, 229, 14, 213, 68, 1, 229, 14, 229, 146, 68, 1, 229, 14, 227, + 107, 68, 1, 229, 14, 250, 189, 68, 1, 229, 14, 239, 179, 68, 1, 229, 14, + 247, 129, 68, 1, 229, 14, 246, 190, 68, 1, 229, 14, 245, 167, 68, 1, 229, + 14, 226, 44, 68, 1, 229, 14, 223, 117, 68, 1, 229, 14, 232, 22, 68, 1, + 229, 14, 251, 204, 68, 1, 229, 14, 223, 85, 68, 1, 237, 33, 74, 68, 1, + 237, 33, 177, 68, 1, 237, 33, 208, 68, 1, 237, 33, 247, 129, 68, 1, 237, + 33, 223, 85, 68, 1, 254, 220, 246, 175, 254, 161, 118, 68, 1, 254, 220, + 246, 175, 224, 212, 118, 68, 1, 254, 220, 246, 175, 250, 158, 68, 1, 254, + 220, 246, 175, 225, 167, 68, 1, 254, 220, 246, 175, 239, 223, 225, 167, + 68, 1, 254, 220, 246, 175, 253, 47, 68, 1, 254, 220, 246, 175, 152, 253, + 47, 68, 1, 254, 220, 246, 175, 57, 68, 1, 254, 220, 246, 175, 74, 68, 1, + 254, 220, 246, 175, 177, 68, 1, 254, 220, 246, 175, 235, 137, 68, 1, 254, + 220, 246, 175, 252, 39, 68, 1, 254, 220, 246, 175, 226, 20, 68, 1, 254, + 220, 246, 175, 226, 10, 68, 1, 254, 220, 246, 175, 250, 117, 68, 1, 254, + 220, 246, 175, 235, 18, 68, 1, 254, 220, 246, 175, 227, 107, 68, 1, 254, + 220, 246, 175, 250, 189, 68, 1, 254, 220, 246, 175, 213, 68, 1, 254, 220, + 246, 175, 233, 97, 68, 1, 254, 220, 246, 175, 228, 110, 68, 1, 254, 220, + 246, 175, 223, 85, 68, 1, 254, 220, 246, 175, 223, 117, 68, 1, 254, 220, + 246, 175, 255, 3, 68, 1, 226, 122, 254, 220, 246, 175, 227, 107, 68, 1, + 226, 122, 254, 220, 246, 175, 223, 85, 68, 1, 237, 33, 254, 220, 246, + 175, 246, 66, 68, 1, 237, 33, 254, 220, 246, 175, 235, 137, 68, 1, 237, + 33, 254, 220, 246, 175, 252, 39, 68, 1, 237, 33, 254, 220, 246, 175, 239, + 160, 68, 1, 237, 33, 254, 220, 246, 175, 226, 20, 68, 1, 237, 33, 254, + 220, 246, 175, 250, 101, 68, 1, 237, 33, 254, 220, 246, 175, 227, 107, + 68, 1, 237, 33, 254, 220, 246, 175, 250, 22, 68, 1, 237, 33, 254, 220, + 246, 175, 228, 110, 68, 1, 237, 33, 254, 220, 246, 175, 250, 201, 68, 1, + 237, 33, 254, 220, 246, 175, 223, 85, 68, 1, 237, 33, 254, 220, 246, 175, + 223, 117, 68, 1, 254, 220, 246, 175, 132, 66, 68, 1, 254, 220, 246, 175, + 132, 191, 68, 1, 237, 33, 254, 220, 246, 175, 252, 190, 68, 1, 254, 220, + 246, 175, 250, 179, 68, 1, 237, 33, 254, 220, 246, 175, 237, 205, 174, + 224, 193, 237, 210, 174, 1, 177, 174, 1, 238, 227, 174, 1, 246, 193, 174, + 1, 246, 66, 174, 1, 235, 137, 174, 1, 252, 39, 174, 1, 251, 204, 174, 1, + 239, 179, 174, 1, 239, 160, 174, 1, 223, 250, 174, 1, 227, 107, 174, 1, + 226, 251, 174, 1, 250, 189, 174, 1, 250, 22, 174, 1, 236, 1, 174, 1, 213, + 174, 1, 233, 97, 174, 1, 253, 70, 174, 1, 252, 190, 174, 1, 198, 174, 1, + 191, 174, 1, 208, 174, 1, 238, 43, 174, 1, 224, 173, 174, 1, 229, 146, + 174, 1, 228, 110, 174, 1, 231, 31, 174, 1, 154, 174, 31, 5, 57, 174, 31, + 5, 74, 174, 31, 5, 66, 174, 31, 5, 248, 35, 174, 31, 5, 254, 253, 174, + 31, 5, 234, 52, 174, 31, 5, 254, 53, 174, 31, 5, 72, 174, 31, 5, 73, 174, + 228, 0, 1, 191, 174, 228, 0, 1, 208, 174, 228, 0, 1, 224, 173, 174, 3, 1, + 177, 174, 3, 1, 235, 137, 174, 3, 1, 254, 160, 174, 3, 1, 227, 107, 174, + 3, 1, 236, 1, 174, 3, 1, 213, 174, 3, 1, 198, 174, 3, 1, 208, 174, 3, 1, + 238, 43, 174, 5, 236, 57, 174, 5, 238, 248, 174, 5, 231, 30, 174, 5, 237, + 125, 174, 247, 149, 76, 174, 232, 69, 76, 174, 21, 223, 89, 174, 21, 118, + 174, 21, 113, 174, 21, 166, 174, 21, 158, 174, 21, 173, 174, 21, 183, + 174, 21, 194, 174, 21, 187, 174, 21, 192, 91, 237, 244, 1, 177, 91, 237, + 244, 1, 224, 72, 91, 237, 244, 1, 235, 137, 91, 237, 244, 1, 226, 44, 91, + 237, 244, 1, 231, 31, 91, 237, 244, 1, 191, 91, 237, 244, 1, 227, 107, + 91, 237, 244, 1, 226, 251, 91, 237, 244, 1, 238, 43, 91, 237, 244, 1, + 213, 91, 237, 244, 1, 233, 97, 91, 237, 244, 1, 198, 91, 237, 244, 1, + 247, 129, 91, 237, 244, 1, 225, 64, 91, 237, 244, 1, 154, 91, 237, 244, + 1, 232, 138, 91, 237, 244, 1, 238, 227, 91, 237, 244, 1, 226, 37, 91, + 237, 244, 1, 236, 1, 91, 237, 244, 1, 57, 91, 237, 244, 1, 74, 91, 237, + 244, 1, 248, 35, 91, 237, 244, 1, 248, 24, 91, 237, 244, 1, 66, 91, 237, + 244, 1, 234, 52, 91, 237, 244, 1, 73, 91, 237, 244, 1, 225, 159, 91, 237, + 244, 1, 72, 91, 237, 244, 1, 254, 52, 91, 237, 244, 1, 254, 253, 91, 237, + 244, 1, 226, 116, 91, 237, 244, 1, 226, 115, 91, 237, 244, 1, 226, 114, + 91, 237, 244, 1, 226, 113, 91, 237, 244, 1, 226, 112, 139, 91, 144, 1, + 201, 232, 138, 139, 91, 144, 1, 184, 232, 138, 139, 91, 144, 1, 201, 177, + 139, 91, 144, 1, 201, 224, 72, 139, 91, 144, 1, 201, 235, 137, 139, 91, + 144, 1, 184, 177, 139, 91, 144, 1, 184, 224, 72, 139, 91, 144, 1, 184, + 235, 137, 139, 91, 144, 1, 201, 226, 44, 139, 91, 144, 1, 201, 231, 31, + 139, 91, 144, 1, 201, 191, 139, 91, 144, 1, 184, 226, 44, 139, 91, 144, + 1, 184, 231, 31, 139, 91, 144, 1, 184, 191, 139, 91, 144, 1, 201, 227, + 107, 139, 91, 144, 1, 201, 226, 251, 139, 91, 144, 1, 201, 236, 1, 139, + 91, 144, 1, 184, 227, 107, 139, 91, 144, 1, 184, 226, 251, 139, 91, 144, + 1, 184, 236, 1, 139, 91, 144, 1, 201, 213, 139, 91, 144, 1, 201, 233, 97, + 139, 91, 144, 1, 201, 198, 139, 91, 144, 1, 184, 213, 139, 91, 144, 1, + 184, 233, 97, 139, 91, 144, 1, 184, 198, 139, 91, 144, 1, 201, 247, 129, + 139, 91, 144, 1, 201, 225, 64, 139, 91, 144, 1, 201, 238, 43, 139, 91, + 144, 1, 184, 247, 129, 139, 91, 144, 1, 184, 225, 64, 139, 91, 144, 1, + 184, 238, 43, 139, 91, 144, 1, 201, 154, 139, 91, 144, 1, 201, 250, 189, + 139, 91, 144, 1, 201, 253, 70, 139, 91, 144, 1, 184, 154, 139, 91, 144, + 1, 184, 250, 189, 139, 91, 144, 1, 184, 253, 70, 139, 91, 144, 1, 201, + 238, 80, 139, 91, 144, 1, 201, 224, 45, 139, 91, 144, 1, 184, 238, 80, + 139, 91, 144, 1, 184, 224, 45, 139, 91, 144, 31, 5, 31, 229, 52, 139, 91, + 144, 31, 5, 255, 63, 139, 91, 144, 31, 5, 240, 47, 139, 91, 144, 31, 5, + 66, 139, 91, 144, 31, 5, 225, 76, 139, 91, 144, 31, 5, 72, 139, 91, 144, + 31, 5, 255, 19, 139, 91, 144, 31, 5, 73, 139, 91, 144, 31, 5, 234, 105, + 139, 91, 144, 31, 5, 225, 159, 139, 91, 144, 31, 5, 254, 34, 139, 91, + 144, 31, 5, 255, 55, 139, 91, 144, 31, 5, 225, 70, 139, 91, 144, 31, 5, + 233, 248, 139, 91, 144, 31, 5, 234, 102, 139, 91, 144, 31, 5, 225, 157, + 139, 91, 144, 31, 5, 239, 188, 139, 91, 144, 1, 35, 196, 139, 91, 144, 1, + 35, 235, 139, 139, 91, 144, 1, 35, 199, 139, 91, 144, 1, 35, 185, 139, + 91, 144, 1, 35, 239, 76, 139, 91, 144, 1, 35, 222, 222, 139, 91, 144, 1, + 35, 254, 27, 139, 91, 144, 206, 237, 17, 139, 91, 144, 206, 237, 16, 139, + 91, 144, 21, 223, 89, 139, 91, 144, 21, 118, 139, 91, 144, 21, 113, 139, + 91, 144, 21, 166, 139, 91, 144, 21, 158, 139, 91, 144, 21, 173, 139, 91, + 144, 21, 183, 139, 91, 144, 21, 194, 139, 91, 144, 21, 187, 139, 91, 144, + 21, 192, 139, 91, 144, 5, 238, 33, 139, 91, 144, 5, 238, 32, 71, 14, 233, + 163, 71, 14, 236, 41, 238, 148, 71, 14, 233, 42, 238, 148, 71, 14, 252, + 220, 238, 148, 71, 14, 252, 76, 238, 148, 71, 14, 232, 227, 238, 148, 71, + 14, 232, 221, 238, 148, 71, 14, 232, 219, 238, 148, 71, 14, 232, 225, + 238, 148, 71, 14, 232, 223, 238, 148, 71, 14, 250, 147, 238, 148, 71, 14, + 250, 143, 238, 148, 71, 14, 250, 142, 238, 148, 71, 14, 250, 145, 238, + 148, 71, 14, 250, 144, 238, 148, 71, 14, 250, 141, 238, 148, 71, 14, 225, + 227, 71, 14, 236, 41, 231, 117, 71, 14, 233, 42, 231, 117, 71, 14, 252, + 220, 231, 117, 71, 14, 252, 76, 231, 117, 71, 14, 232, 227, 231, 117, 71, + 14, 232, 221, 231, 117, 71, 14, 232, 219, 231, 117, 71, 14, 232, 225, + 231, 117, 71, 14, 232, 223, 231, 117, 71, 14, 250, 147, 231, 117, 71, 14, + 250, 143, 231, 117, 71, 14, 250, 142, 231, 117, 71, 14, 250, 145, 231, + 117, 71, 14, 250, 144, 231, 117, 71, 14, 250, 141, 231, 117, 252, 88, 1, + 177, 252, 88, 1, 246, 193, 252, 88, 1, 235, 137, 252, 88, 1, 235, 109, + 252, 88, 1, 213, 252, 88, 1, 253, 70, 252, 88, 1, 198, 252, 88, 1, 236, + 69, 252, 88, 1, 227, 107, 252, 88, 1, 250, 189, 252, 88, 1, 236, 1, 252, + 88, 1, 234, 230, 252, 88, 1, 252, 39, 252, 88, 1, 239, 179, 252, 88, 1, + 234, 173, 252, 88, 1, 234, 171, 252, 88, 1, 191, 252, 88, 1, 208, 252, + 88, 1, 238, 43, 252, 88, 1, 225, 64, 252, 88, 1, 231, 31, 252, 88, 1, 57, + 252, 88, 1, 154, 252, 88, 31, 5, 74, 252, 88, 31, 5, 66, 252, 88, 31, 5, + 72, 252, 88, 31, 5, 73, 252, 88, 31, 5, 255, 19, 252, 88, 233, 224, 252, + 88, 247, 233, 106, 230, 205, 85, 5, 225, 148, 231, 177, 85, 5, 225, 148, + 252, 20, 85, 5, 251, 229, 85, 5, 227, 211, 85, 5, 252, 161, 85, 1, 254, + 238, 85, 1, 254, 239, 227, 39, 85, 1, 240, 43, 85, 1, 240, 44, 227, 39, + 85, 1, 225, 151, 85, 1, 225, 152, 227, 39, 85, 1, 232, 25, 231, 213, 85, + 1, 232, 25, 231, 214, 227, 39, 85, 1, 238, 44, 237, 220, 85, 1, 238, 44, + 237, 221, 227, 39, 85, 1, 248, 7, 85, 1, 254, 251, 85, 1, 234, 76, 85, 1, + 234, 77, 227, 39, 85, 1, 177, 85, 1, 188, 237, 52, 85, 1, 246, 193, 85, + 1, 246, 194, 246, 2, 85, 1, 235, 137, 85, 1, 252, 39, 85, 1, 252, 40, + 238, 35, 85, 1, 239, 179, 85, 1, 239, 180, 239, 163, 85, 1, 234, 173, 85, + 1, 227, 108, 238, 1, 85, 1, 227, 108, 236, 36, 237, 52, 85, 1, 250, 190, + 236, 36, 254, 207, 85, 1, 250, 190, 236, 36, 237, 52, 85, 1, 236, 2, 232, + 5, 85, 1, 227, 107, 85, 1, 227, 108, 227, 55, 85, 1, 250, 189, 85, 1, + 250, 190, 237, 56, 85, 1, 236, 1, 85, 1, 213, 85, 1, 233, 242, 239, 39, + 85, 1, 253, 70, 85, 1, 253, 71, 238, 249, 85, 1, 198, 85, 1, 191, 85, 1, + 208, 85, 1, 238, 43, 85, 1, 224, 173, 85, 1, 231, 32, 231, 18, 85, 1, + 231, 32, 230, 245, 85, 1, 231, 31, 85, 1, 154, 85, 5, 231, 207, 85, 31, + 5, 227, 39, 85, 31, 5, 225, 147, 85, 31, 5, 225, 148, 230, 242, 85, 31, + 5, 227, 236, 85, 31, 5, 227, 237, 240, 35, 85, 31, 5, 232, 25, 231, 213, + 85, 31, 5, 232, 25, 231, 214, 227, 39, 85, 31, 5, 238, 44, 237, 220, 85, + 31, 5, 238, 44, 237, 221, 227, 39, 85, 31, 5, 227, 78, 85, 31, 5, 227, + 79, 231, 213, 85, 31, 5, 227, 79, 227, 39, 85, 31, 5, 227, 79, 231, 214, + 227, 39, 85, 31, 5, 233, 125, 85, 31, 5, 233, 126, 227, 39, 85, 255, 25, + 255, 24, 85, 1, 239, 60, 230, 241, 85, 1, 238, 205, 230, 241, 85, 1, 225, + 181, 230, 241, 85, 1, 248, 30, 230, 241, 85, 1, 225, 43, 230, 241, 85, 1, + 223, 109, 230, 241, 85, 1, 254, 64, 230, 241, 85, 21, 223, 89, 85, 21, + 118, 85, 21, 113, 85, 21, 166, 85, 21, 158, 85, 21, 173, 85, 21, 183, 85, + 21, 194, 85, 21, 187, 85, 21, 192, 85, 233, 203, 85, 233, 219, 85, 224, + 110, 85, 252, 7, 233, 213, 85, 252, 7, 228, 253, 85, 252, 7, 233, 179, + 85, 233, 218, 85, 23, 14, 249, 146, 85, 23, 14, 250, 45, 85, 23, 14, 248, + 93, 85, 23, 14, 250, 149, 85, 23, 14, 250, 150, 227, 211, 85, 23, 14, + 249, 209, 85, 23, 14, 250, 182, 85, 23, 14, 250, 30, 85, 23, 14, 250, + 168, 85, 23, 14, 250, 150, 246, 127, 85, 23, 14, 36, 227, 36, 85, 23, 14, + 36, 247, 231, 85, 23, 14, 36, 238, 244, 85, 23, 14, 36, 238, 246, 85, 23, + 14, 36, 239, 167, 85, 23, 14, 36, 238, 245, 2, 239, 167, 85, 23, 14, 36, + 238, 247, 2, 239, 167, 85, 23, 14, 36, 252, 208, 85, 23, 14, 36, 246, 5, + 85, 23, 14, 231, 152, 234, 44, 248, 103, 85, 23, 14, 231, 152, 234, 44, + 250, 180, 85, 23, 14, 231, 152, 251, 82, 225, 245, 85, 23, 14, 231, 152, + 251, 82, 227, 85, 85, 23, 14, 237, 236, 234, 44, 233, 209, 85, 23, 14, + 237, 236, 234, 44, 232, 169, 85, 23, 14, 237, 236, 251, 82, 233, 21, 85, + 23, 14, 237, 236, 251, 82, 233, 13, 85, 23, 14, 237, 236, 234, 44, 233, + 37, 220, 5, 233, 201, 220, 5, 233, 207, 220, 5, 233, 206, 220, 1, 57, + 220, 1, 74, 220, 1, 66, 220, 1, 255, 19, 220, 1, 73, 220, 1, 72, 220, 1, + 247, 165, 220, 1, 177, 220, 1, 232, 138, 220, 1, 246, 193, 220, 1, 235, + 137, 220, 1, 252, 39, 220, 1, 239, 179, 220, 1, 223, 117, 220, 1, 234, + 173, 220, 1, 227, 107, 220, 1, 250, 189, 220, 1, 236, 1, 220, 1, 213, + 220, 1, 247, 129, 220, 1, 225, 64, 220, 1, 253, 70, 220, 1, 198, 220, 1, + 191, 220, 1, 208, 220, 1, 238, 43, 220, 1, 224, 173, 220, 1, 231, 31, + 220, 1, 224, 72, 220, 1, 154, 220, 251, 33, 5, 233, 216, 220, 251, 33, 5, + 233, 202, 220, 251, 33, 5, 233, 200, 220, 31, 5, 233, 208, 220, 31, 5, + 233, 199, 220, 31, 5, 233, 211, 220, 31, 5, 233, 205, 220, 31, 5, 233, + 217, 220, 31, 5, 233, 210, 220, 5, 233, 220, 220, 1, 238, 227, 220, 1, + 227, 184, 220, 21, 223, 89, 220, 21, 118, 220, 21, 113, 220, 21, 166, + 220, 21, 158, 220, 21, 173, 220, 21, 183, 220, 21, 194, 220, 21, 187, + 220, 21, 192, 156, 1, 177, 156, 1, 238, 160, 156, 1, 238, 227, 156, 1, + 246, 193, 156, 1, 246, 20, 156, 1, 235, 137, 156, 1, 252, 39, 156, 1, + 251, 204, 156, 1, 239, 179, 156, 1, 234, 173, 156, 1, 227, 107, 156, 1, + 226, 251, 156, 1, 250, 189, 156, 1, 236, 1, 156, 1, 213, 156, 1, 233, 24, + 156, 1, 233, 97, 156, 1, 247, 129, 156, 1, 247, 32, 156, 1, 253, 70, 156, + 1, 252, 151, 156, 1, 198, 156, 1, 236, 109, 156, 1, 226, 44, 156, 1, 226, + 37, 156, 1, 248, 70, 156, 1, 191, 156, 1, 208, 156, 1, 238, 43, 156, 1, + 154, 156, 1, 245, 54, 156, 1, 225, 64, 156, 1, 231, 31, 156, 1, 229, 146, + 156, 1, 224, 173, 156, 1, 57, 156, 228, 0, 1, 191, 156, 228, 0, 1, 208, + 156, 31, 5, 255, 63, 156, 31, 5, 74, 156, 31, 5, 73, 156, 31, 5, 234, 52, + 156, 31, 5, 66, 156, 31, 5, 225, 76, 156, 31, 5, 72, 156, 251, 33, 5, + 239, 76, 156, 251, 33, 5, 185, 156, 251, 33, 5, 149, 156, 251, 33, 5, + 199, 156, 251, 33, 5, 233, 244, 156, 251, 33, 5, 146, 156, 251, 33, 5, + 227, 109, 156, 251, 33, 5, 234, 158, 156, 251, 33, 5, 239, 43, 156, 5, + 232, 3, 156, 5, 234, 202, 156, 232, 171, 227, 106, 156, 232, 171, 234, + 165, 226, 178, 227, 106, 156, 232, 171, 251, 208, 156, 232, 171, 226, 32, + 251, 208, 156, 232, 171, 226, 31, 156, 21, 223, 89, 156, 21, 118, 156, + 21, 113, 156, 21, 166, 156, 21, 158, 156, 21, 173, 156, 21, 183, 156, 21, + 194, 156, 21, 187, 156, 21, 192, 156, 1, 226, 20, 156, 1, 226, 10, 156, + 1, 250, 117, 234, 74, 251, 164, 21, 223, 89, 234, 74, 251, 164, 21, 118, + 234, 74, 251, 164, 21, 113, 234, 74, 251, 164, 21, 166, 234, 74, 251, + 164, 21, 158, 234, 74, 251, 164, 21, 173, 234, 74, 251, 164, 21, 183, + 234, 74, 251, 164, 21, 194, 234, 74, 251, 164, 21, 187, 234, 74, 251, + 164, 21, 192, 234, 74, 251, 164, 1, 238, 43, 234, 74, 251, 164, 1, 254, + 62, 234, 74, 251, 164, 1, 255, 8, 234, 74, 251, 164, 1, 254, 184, 234, + 74, 251, 164, 1, 254, 233, 234, 74, 251, 164, 1, 238, 42, 234, 74, 251, + 164, 1, 255, 59, 234, 74, 251, 164, 1, 255, 60, 234, 74, 251, 164, 1, + 255, 58, 234, 74, 251, 164, 1, 255, 56, 234, 74, 251, 164, 1, 237, 193, + 234, 74, 251, 164, 1, 239, 205, 234, 74, 251, 164, 1, 240, 48, 234, 74, + 251, 164, 1, 239, 220, 234, 74, 251, 164, 1, 239, 210, 234, 74, 251, 164, + 1, 237, 110, 234, 74, 251, 164, 1, 225, 165, 234, 74, 251, 164, 1, 225, + 163, 234, 74, 251, 164, 1, 225, 121, 234, 74, 251, 164, 1, 225, 70, 234, + 74, 251, 164, 1, 237, 243, 234, 74, 251, 164, 1, 247, 211, 234, 74, 251, + 164, 1, 248, 38, 234, 74, 251, 164, 1, 247, 239, 234, 74, 251, 164, 1, + 247, 192, 234, 74, 251, 164, 1, 237, 143, 234, 74, 251, 164, 1, 234, 16, + 234, 74, 251, 164, 1, 234, 101, 234, 74, 251, 164, 1, 234, 6, 234, 74, + 251, 164, 1, 234, 83, 234, 74, 251, 164, 236, 67, 225, 251, 234, 74, 251, + 164, 246, 188, 225, 252, 234, 74, 251, 164, 236, 65, 225, 252, 234, 74, + 251, 164, 231, 222, 234, 74, 251, 164, 233, 95, 234, 74, 251, 164, 255, + 2, 234, 74, 251, 164, 232, 171, 236, 63, 234, 74, 251, 164, 232, 171, 47, + 236, 63, 7, 1, 3, 6, 57, 7, 1, 3, 6, 255, 19, 7, 3, 1, 209, 255, 19, 7, + 1, 3, 6, 253, 31, 254, 27, 7, 1, 3, 6, 252, 44, 7, 1, 3, 6, 222, 222, 7, + 1, 3, 6, 247, 168, 7, 1, 3, 6, 72, 7, 3, 1, 209, 234, 44, 72, 7, 3, 1, + 209, 74, 7, 1, 3, 6, 239, 182, 7, 1, 3, 6, 239, 76, 7, 1, 3, 6, 238, 47, + 2, 82, 7, 1, 3, 6, 185, 7, 1, 3, 6, 200, 199, 7, 1, 3, 6, 73, 7, 1, 3, 6, + 234, 44, 73, 7, 3, 1, 229, 11, 73, 7, 3, 1, 229, 11, 234, 44, 73, 7, 3, + 1, 229, 11, 130, 2, 82, 7, 3, 1, 209, 234, 88, 7, 1, 3, 6, 234, 13, 7, 3, + 1, 226, 106, 132, 73, 7, 3, 1, 252, 126, 132, 73, 7, 1, 3, 6, 233, 244, + 7, 1, 3, 6, 200, 146, 7, 1, 3, 6, 209, 146, 7, 1, 3, 6, 227, 109, 7, 1, + 3, 6, 66, 7, 3, 1, 229, 11, 66, 7, 3, 1, 229, 11, 250, 2, 66, 7, 3, 1, + 229, 11, 209, 185, 7, 1, 3, 6, 196, 7, 1, 3, 6, 224, 174, 7, 1, 3, 6, + 223, 119, 7, 1, 3, 6, 247, 132, 7, 1, 224, 204, 238, 7, 228, 133, 7, 1, + 254, 248, 19, 1, 3, 6, 246, 169, 19, 1, 3, 6, 238, 16, 19, 1, 3, 6, 233, + 69, 19, 1, 3, 6, 231, 182, 19, 1, 3, 6, 232, 183, 28, 1, 3, 6, 248, 2, + 52, 1, 6, 57, 52, 1, 6, 255, 19, 52, 1, 6, 254, 27, 52, 1, 6, 253, 31, + 254, 27, 52, 1, 6, 222, 222, 52, 1, 6, 72, 52, 1, 6, 200, 72, 52, 1, 6, + 214, 52, 1, 6, 212, 52, 1, 6, 74, 52, 1, 6, 239, 182, 52, 1, 6, 239, 76, + 52, 1, 6, 149, 52, 1, 6, 185, 52, 1, 6, 199, 52, 1, 6, 200, 199, 52, 1, + 6, 73, 52, 1, 6, 234, 13, 52, 1, 6, 233, 244, 52, 1, 6, 146, 52, 1, 6, + 227, 109, 52, 1, 6, 66, 52, 1, 6, 224, 174, 52, 1, 3, 57, 52, 1, 3, 209, + 57, 52, 1, 3, 254, 205, 52, 1, 3, 209, 255, 19, 52, 1, 3, 254, 27, 52, 1, + 3, 222, 222, 52, 1, 3, 72, 52, 1, 3, 230, 222, 52, 1, 3, 234, 44, 72, 52, + 1, 3, 209, 234, 44, 72, 52, 1, 3, 214, 52, 1, 3, 209, 74, 52, 1, 3, 239, + 76, 52, 1, 3, 185, 52, 1, 3, 247, 228, 52, 1, 3, 73, 52, 1, 3, 234, 44, + 73, 52, 1, 3, 226, 106, 132, 73, 52, 1, 3, 252, 126, 132, 73, 52, 1, 3, + 233, 244, 52, 1, 3, 227, 109, 52, 1, 3, 66, 52, 1, 3, 229, 11, 66, 52, 1, + 3, 209, 185, 52, 1, 3, 196, 52, 1, 3, 254, 248, 52, 1, 3, 252, 198, 52, + 1, 3, 19, 246, 169, 52, 1, 3, 250, 47, 52, 1, 3, 19, 233, 87, 52, 1, 3, + 251, 169, 7, 227, 253, 3, 1, 74, 7, 227, 253, 3, 1, 146, 7, 227, 253, 3, + 1, 66, 7, 227, 253, 3, 1, 196, 19, 227, 253, 3, 1, 252, 198, 19, 227, + 253, 3, 1, 246, 169, 19, 227, 253, 3, 1, 231, 182, 19, 227, 253, 3, 1, + 233, 87, 19, 227, 253, 3, 1, 251, 169, 7, 3, 1, 225, 159, 7, 3, 1, 45, 2, + 236, 154, 205, 7, 3, 1, 250, 192, 2, 236, 154, 205, 7, 3, 1, 247, 131, 2, + 236, 154, 205, 7, 3, 1, 237, 69, 2, 236, 154, 205, 7, 3, 1, 236, 5, 2, + 236, 154, 205, 7, 3, 1, 233, 245, 2, 236, 154, 205, 7, 3, 1, 232, 27, 2, + 236, 154, 205, 7, 3, 1, 232, 27, 2, 247, 41, 22, 236, 154, 205, 7, 3, 1, + 231, 35, 2, 236, 154, 205, 7, 3, 1, 227, 110, 2, 236, 154, 205, 7, 3, 1, + 223, 120, 2, 236, 154, 205, 7, 3, 1, 209, 214, 52, 1, 28, 247, 239, 7, 3, + 1, 239, 241, 214, 7, 3, 1, 226, 254, 2, 228, 23, 7, 3, 6, 1, 244, 81, 2, + 82, 7, 3, 1, 239, 216, 2, 82, 7, 3, 1, 233, 245, 2, 82, 7, 3, 6, 1, 97, + 2, 82, 7, 3, 1, 225, 111, 2, 82, 7, 3, 1, 45, 2, 233, 229, 88, 7, 3, 1, + 250, 192, 2, 233, 229, 88, 7, 3, 1, 247, 131, 2, 233, 229, 88, 7, 3, 1, + 246, 196, 2, 233, 229, 88, 7, 3, 1, 239, 77, 2, 233, 229, 88, 7, 3, 1, + 238, 47, 2, 233, 229, 88, 7, 3, 1, 237, 69, 2, 233, 229, 88, 7, 3, 1, + 236, 5, 2, 233, 229, 88, 7, 3, 1, 233, 245, 2, 233, 229, 88, 7, 3, 1, + 232, 27, 2, 233, 229, 88, 7, 3, 1, 231, 35, 2, 233, 229, 88, 7, 3, 1, + 247, 184, 2, 233, 229, 88, 7, 3, 1, 225, 65, 2, 233, 229, 88, 7, 3, 1, + 224, 74, 2, 233, 229, 88, 7, 3, 1, 223, 120, 2, 233, 229, 88, 7, 3, 1, + 102, 2, 231, 196, 88, 7, 3, 1, 254, 206, 2, 231, 196, 88, 7, 3, 1, 250, + 192, 2, 244, 217, 22, 227, 89, 7, 3, 1, 161, 2, 231, 196, 88, 7, 3, 1, + 234, 44, 161, 2, 231, 196, 88, 7, 3, 1, 200, 234, 44, 161, 2, 231, 196, + 88, 7, 3, 1, 230, 223, 2, 231, 196, 88, 7, 3, 1, 244, 81, 2, 231, 196, + 88, 7, 3, 1, 234, 44, 130, 2, 231, 196, 88, 7, 3, 1, 247, 184, 2, 231, + 196, 88, 7, 3, 1, 97, 2, 231, 196, 88, 7, 3, 1, 247, 133, 2, 231, 196, + 88, 52, 1, 3, 209, 254, 205, 52, 1, 3, 252, 44, 52, 1, 3, 252, 45, 2, + 250, 224, 52, 1, 3, 247, 168, 52, 1, 3, 200, 234, 44, 72, 52, 1, 3, 247, + 130, 52, 1, 3, 249, 139, 239, 183, 2, 82, 52, 1, 3, 95, 214, 52, 1, 3, + 209, 212, 52, 1, 3, 244, 81, 2, 82, 52, 1, 3, 239, 215, 52, 1, 3, 6, 74, + 52, 1, 3, 6, 244, 81, 2, 82, 52, 1, 3, 239, 183, 2, 250, 240, 52, 1, 3, + 238, 47, 2, 231, 196, 88, 52, 1, 3, 238, 47, 2, 233, 229, 88, 52, 1, 3, + 6, 149, 52, 1, 3, 237, 69, 2, 88, 52, 1, 3, 209, 237, 69, 2, 182, 237, + 229, 52, 1, 3, 236, 5, 2, 42, 88, 52, 1, 3, 236, 5, 2, 231, 196, 88, 52, + 1, 3, 6, 199, 52, 1, 3, 253, 31, 73, 52, 1, 3, 233, 87, 52, 1, 3, 231, + 35, 2, 88, 52, 1, 3, 247, 183, 52, 1, 3, 227, 110, 2, 233, 229, 88, 52, + 1, 3, 97, 125, 52, 1, 3, 225, 110, 52, 1, 3, 6, 66, 52, 1, 3, 225, 65, 2, + 88, 52, 1, 3, 209, 196, 52, 1, 3, 223, 119, 52, 1, 3, 223, 120, 2, 231, + 196, 88, 52, 1, 3, 223, 120, 2, 250, 224, 52, 1, 3, 247, 132, 52, 1, 3, + 226, 223, 36, 248, 138, 245, 237, 255, 41, 36, 248, 138, 255, 33, 255, + 41, 36, 228, 177, 51, 36, 227, 205, 76, 36, 237, 62, 36, 245, 234, 36, + 237, 60, 36, 255, 31, 36, 245, 235, 36, 255, 32, 36, 7, 3, 1, 232, 27, + 51, 36, 252, 105, 36, 237, 61, 36, 47, 251, 102, 46, 36, 234, 85, 46, 36, + 223, 38, 51, 36, 239, 206, 51, 36, 225, 104, 46, 36, 225, 88, 46, 36, 7, + 3, 1, 247, 22, 234, 44, 102, 46, 36, 7, 3, 1, 255, 19, 36, 7, 3, 1, 254, + 158, 36, 7, 3, 1, 254, 41, 36, 7, 3, 1, 252, 45, 251, 226, 36, 7, 3, 1, + 239, 241, 222, 222, 36, 7, 3, 1, 247, 168, 36, 7, 3, 1, 214, 36, 7, 1, 3, + 6, 214, 36, 7, 3, 1, 239, 76, 36, 7, 3, 1, 149, 36, 7, 1, 3, 6, 149, 36, + 7, 1, 3, 6, 185, 36, 7, 3, 1, 199, 36, 7, 1, 3, 6, 199, 36, 7, 1, 3, 6, + 146, 36, 7, 3, 1, 232, 27, 231, 105, 36, 7, 3, 1, 193, 36, 7, 3, 1, 182, + 193, 36, 7, 3, 1, 223, 119, 36, 42, 254, 94, 46, 36, 41, 254, 94, 22, + 103, 254, 94, 51, 7, 6, 1, 102, 2, 231, 140, 51, 7, 3, 1, 102, 2, 231, + 140, 51, 7, 6, 1, 45, 2, 56, 46, 7, 3, 1, 45, 2, 56, 46, 7, 6, 1, 45, 2, + 56, 51, 7, 3, 1, 45, 2, 56, 51, 7, 6, 1, 45, 2, 237, 171, 51, 7, 3, 1, + 45, 2, 237, 171, 51, 7, 6, 1, 252, 45, 2, 251, 227, 22, 155, 7, 3, 1, + 252, 45, 2, 251, 227, 22, 155, 7, 6, 1, 250, 192, 2, 56, 46, 7, 3, 1, + 250, 192, 2, 56, 46, 7, 6, 1, 250, 192, 2, 56, 51, 7, 3, 1, 250, 192, 2, + 56, 51, 7, 6, 1, 250, 192, 2, 237, 171, 51, 7, 3, 1, 250, 192, 2, 237, + 171, 51, 7, 6, 1, 250, 192, 2, 251, 226, 7, 3, 1, 250, 192, 2, 251, 226, + 7, 6, 1, 250, 192, 2, 251, 102, 51, 7, 3, 1, 250, 192, 2, 251, 102, 51, + 7, 6, 1, 161, 2, 237, 64, 22, 245, 236, 7, 3, 1, 161, 2, 237, 64, 22, + 245, 236, 7, 6, 1, 161, 2, 237, 64, 22, 155, 7, 3, 1, 161, 2, 237, 64, + 22, 155, 7, 6, 1, 161, 2, 251, 102, 51, 7, 3, 1, 161, 2, 251, 102, 51, 7, + 6, 1, 161, 2, 226, 159, 51, 7, 3, 1, 161, 2, 226, 159, 51, 7, 6, 1, 161, + 2, 251, 227, 22, 252, 106, 7, 3, 1, 161, 2, 251, 227, 22, 252, 106, 7, 6, + 1, 247, 131, 2, 56, 46, 7, 3, 1, 247, 131, 2, 56, 46, 7, 6, 1, 246, 196, + 2, 237, 63, 7, 3, 1, 246, 196, 2, 237, 63, 7, 6, 1, 245, 172, 2, 56, 46, + 7, 3, 1, 245, 172, 2, 56, 46, 7, 6, 1, 245, 172, 2, 56, 51, 7, 3, 1, 245, + 172, 2, 56, 51, 7, 6, 1, 245, 172, 2, 219, 7, 3, 1, 245, 172, 2, 219, 7, + 6, 1, 245, 172, 2, 251, 226, 7, 3, 1, 245, 172, 2, 251, 226, 7, 6, 1, + 245, 172, 2, 252, 107, 51, 7, 3, 1, 245, 172, 2, 252, 107, 51, 7, 6, 1, + 244, 81, 2, 226, 159, 51, 7, 3, 1, 244, 81, 2, 226, 159, 51, 7, 6, 1, + 244, 81, 2, 250, 3, 22, 155, 7, 3, 1, 244, 81, 2, 250, 3, 22, 155, 7, 6, + 1, 239, 77, 2, 155, 7, 3, 1, 239, 77, 2, 155, 7, 6, 1, 239, 77, 2, 56, + 51, 7, 3, 1, 239, 77, 2, 56, 51, 7, 6, 1, 239, 77, 2, 237, 171, 51, 7, 3, + 1, 239, 77, 2, 237, 171, 51, 7, 6, 1, 238, 47, 2, 56, 51, 7, 3, 1, 238, + 47, 2, 56, 51, 7, 6, 1, 238, 47, 2, 56, 252, 214, 22, 237, 63, 7, 3, 1, + 238, 47, 2, 56, 252, 214, 22, 237, 63, 7, 6, 1, 238, 47, 2, 237, 171, 51, + 7, 3, 1, 238, 47, 2, 237, 171, 51, 7, 6, 1, 238, 47, 2, 251, 102, 51, 7, + 3, 1, 238, 47, 2, 251, 102, 51, 7, 6, 1, 237, 69, 2, 155, 7, 3, 1, 237, + 69, 2, 155, 7, 6, 1, 237, 69, 2, 56, 46, 7, 3, 1, 237, 69, 2, 56, 46, 7, + 6, 1, 237, 69, 2, 56, 51, 7, 3, 1, 237, 69, 2, 56, 51, 7, 6, 1, 236, 5, + 2, 56, 46, 7, 3, 1, 236, 5, 2, 56, 46, 7, 6, 1, 236, 5, 2, 56, 51, 7, 3, + 1, 236, 5, 2, 56, 51, 7, 6, 1, 236, 5, 2, 237, 171, 51, 7, 3, 1, 236, 5, + 2, 237, 171, 51, 7, 6, 1, 236, 5, 2, 251, 102, 51, 7, 3, 1, 236, 5, 2, + 251, 102, 51, 7, 6, 1, 130, 2, 226, 159, 22, 155, 7, 3, 1, 130, 2, 226, + 159, 22, 155, 7, 6, 1, 130, 2, 226, 159, 22, 219, 7, 3, 1, 130, 2, 226, + 159, 22, 219, 7, 6, 1, 130, 2, 237, 64, 22, 245, 236, 7, 3, 1, 130, 2, + 237, 64, 22, 245, 236, 7, 6, 1, 130, 2, 237, 64, 22, 155, 7, 3, 1, 130, + 2, 237, 64, 22, 155, 7, 6, 1, 233, 245, 2, 155, 7, 3, 1, 233, 245, 2, + 155, 7, 6, 1, 233, 245, 2, 56, 46, 7, 3, 1, 233, 245, 2, 56, 46, 7, 6, 1, + 232, 27, 2, 56, 46, 7, 3, 1, 232, 27, 2, 56, 46, 7, 6, 1, 232, 27, 2, 56, + 51, 7, 3, 1, 232, 27, 2, 56, 51, 7, 6, 1, 232, 27, 2, 56, 252, 214, 22, + 237, 63, 7, 3, 1, 232, 27, 2, 56, 252, 214, 22, 237, 63, 7, 6, 1, 232, + 27, 2, 237, 171, 51, 7, 3, 1, 232, 27, 2, 237, 171, 51, 7, 6, 1, 231, 35, + 2, 56, 46, 7, 3, 1, 231, 35, 2, 56, 46, 7, 6, 1, 231, 35, 2, 56, 51, 7, + 3, 1, 231, 35, 2, 56, 51, 7, 6, 1, 231, 35, 2, 255, 33, 22, 56, 46, 7, 3, + 1, 231, 35, 2, 255, 33, 22, 56, 46, 7, 6, 1, 231, 35, 2, 252, 6, 22, 56, + 46, 7, 3, 1, 231, 35, 2, 252, 6, 22, 56, 46, 7, 6, 1, 231, 35, 2, 56, + 252, 214, 22, 56, 46, 7, 3, 1, 231, 35, 2, 56, 252, 214, 22, 56, 46, 7, + 6, 1, 227, 110, 2, 56, 46, 7, 3, 1, 227, 110, 2, 56, 46, 7, 6, 1, 227, + 110, 2, 56, 51, 7, 3, 1, 227, 110, 2, 56, 51, 7, 6, 1, 227, 110, 2, 237, + 171, 51, 7, 3, 1, 227, 110, 2, 237, 171, 51, 7, 6, 1, 227, 110, 2, 251, + 102, 51, 7, 3, 1, 227, 110, 2, 251, 102, 51, 7, 6, 1, 97, 2, 250, 3, 51, + 7, 3, 1, 97, 2, 250, 3, 51, 7, 6, 1, 97, 2, 226, 159, 51, 7, 3, 1, 97, 2, + 226, 159, 51, 7, 6, 1, 97, 2, 251, 102, 51, 7, 3, 1, 97, 2, 251, 102, 51, + 7, 6, 1, 97, 2, 226, 159, 22, 155, 7, 3, 1, 97, 2, 226, 159, 22, 155, 7, + 6, 1, 97, 2, 237, 64, 22, 219, 7, 3, 1, 97, 2, 237, 64, 22, 219, 7, 6, 1, + 225, 65, 2, 205, 7, 3, 1, 225, 65, 2, 205, 7, 6, 1, 225, 65, 2, 56, 51, + 7, 3, 1, 225, 65, 2, 56, 51, 7, 6, 1, 224, 175, 2, 245, 236, 7, 3, 1, + 224, 175, 2, 245, 236, 7, 6, 1, 224, 175, 2, 155, 7, 3, 1, 224, 175, 2, + 155, 7, 6, 1, 224, 175, 2, 219, 7, 3, 1, 224, 175, 2, 219, 7, 6, 1, 224, + 175, 2, 56, 46, 7, 3, 1, 224, 175, 2, 56, 46, 7, 6, 1, 224, 175, 2, 56, + 51, 7, 3, 1, 224, 175, 2, 56, 51, 7, 6, 1, 224, 74, 2, 56, 46, 7, 3, 1, + 224, 74, 2, 56, 46, 7, 6, 1, 224, 74, 2, 219, 7, 3, 1, 224, 74, 2, 219, + 7, 6, 1, 224, 26, 2, 56, 46, 7, 3, 1, 224, 26, 2, 56, 46, 7, 6, 1, 223, + 120, 2, 251, 101, 7, 3, 1, 223, 120, 2, 251, 101, 7, 6, 1, 223, 120, 2, + 56, 51, 7, 3, 1, 223, 120, 2, 56, 51, 7, 6, 1, 223, 120, 2, 237, 171, 51, + 7, 3, 1, 223, 120, 2, 237, 171, 51, 7, 3, 1, 245, 172, 2, 237, 171, 51, + 7, 3, 1, 227, 110, 2, 219, 7, 3, 1, 224, 175, 2, 231, 140, 46, 7, 3, 1, + 224, 26, 2, 231, 140, 46, 7, 3, 1, 102, 2, 41, 132, 231, 139, 7, 3, 1, + 182, 231, 35, 2, 56, 46, 7, 3, 1, 182, 231, 35, 2, 250, 1, 82, 7, 3, 1, + 182, 231, 35, 2, 201, 82, 7, 6, 1, 229, 124, 193, 7, 3, 1, 250, 47, 7, 6, + 1, 102, 2, 56, 51, 7, 3, 1, 102, 2, 56, 51, 7, 6, 1, 102, 2, 244, 217, + 46, 7, 3, 1, 102, 2, 244, 217, 46, 7, 6, 1, 102, 2, 251, 102, 22, 155, 7, + 3, 1, 102, 2, 251, 102, 22, 155, 7, 6, 1, 102, 2, 251, 102, 22, 245, 236, + 7, 3, 1, 102, 2, 251, 102, 22, 245, 236, 7, 6, 1, 102, 2, 251, 102, 22, + 244, 217, 46, 7, 3, 1, 102, 2, 251, 102, 22, 244, 217, 46, 7, 6, 1, 102, + 2, 251, 102, 22, 205, 7, 3, 1, 102, 2, 251, 102, 22, 205, 7, 6, 1, 102, + 2, 251, 102, 22, 56, 51, 7, 3, 1, 102, 2, 251, 102, 22, 56, 51, 7, 6, 1, + 102, 2, 252, 107, 22, 155, 7, 3, 1, 102, 2, 252, 107, 22, 155, 7, 6, 1, + 102, 2, 252, 107, 22, 245, 236, 7, 3, 1, 102, 2, 252, 107, 22, 245, 236, + 7, 6, 1, 102, 2, 252, 107, 22, 244, 217, 46, 7, 3, 1, 102, 2, 252, 107, + 22, 244, 217, 46, 7, 6, 1, 102, 2, 252, 107, 22, 205, 7, 3, 1, 102, 2, + 252, 107, 22, 205, 7, 6, 1, 102, 2, 252, 107, 22, 56, 51, 7, 3, 1, 102, + 2, 252, 107, 22, 56, 51, 7, 6, 1, 161, 2, 56, 51, 7, 3, 1, 161, 2, 56, + 51, 7, 6, 1, 161, 2, 244, 217, 46, 7, 3, 1, 161, 2, 244, 217, 46, 7, 6, + 1, 161, 2, 205, 7, 3, 1, 161, 2, 205, 7, 6, 1, 161, 2, 251, 102, 22, 155, + 7, 3, 1, 161, 2, 251, 102, 22, 155, 7, 6, 1, 161, 2, 251, 102, 22, 245, + 236, 7, 3, 1, 161, 2, 251, 102, 22, 245, 236, 7, 6, 1, 161, 2, 251, 102, + 22, 244, 217, 46, 7, 3, 1, 161, 2, 251, 102, 22, 244, 217, 46, 7, 6, 1, + 161, 2, 251, 102, 22, 205, 7, 3, 1, 161, 2, 251, 102, 22, 205, 7, 6, 1, + 161, 2, 251, 102, 22, 56, 51, 7, 3, 1, 161, 2, 251, 102, 22, 56, 51, 7, + 6, 1, 244, 81, 2, 244, 217, 46, 7, 3, 1, 244, 81, 2, 244, 217, 46, 7, 6, + 1, 244, 81, 2, 56, 51, 7, 3, 1, 244, 81, 2, 56, 51, 7, 6, 1, 130, 2, 56, + 51, 7, 3, 1, 130, 2, 56, 51, 7, 6, 1, 130, 2, 244, 217, 46, 7, 3, 1, 130, + 2, 244, 217, 46, 7, 6, 1, 130, 2, 251, 102, 22, 155, 7, 3, 1, 130, 2, + 251, 102, 22, 155, 7, 6, 1, 130, 2, 251, 102, 22, 245, 236, 7, 3, 1, 130, + 2, 251, 102, 22, 245, 236, 7, 6, 1, 130, 2, 251, 102, 22, 244, 217, 46, + 7, 3, 1, 130, 2, 251, 102, 22, 244, 217, 46, 7, 6, 1, 130, 2, 251, 102, + 22, 205, 7, 3, 1, 130, 2, 251, 102, 22, 205, 7, 6, 1, 130, 2, 251, 102, + 22, 56, 51, 7, 3, 1, 130, 2, 251, 102, 22, 56, 51, 7, 6, 1, 130, 2, 244, + 161, 22, 155, 7, 3, 1, 130, 2, 244, 161, 22, 155, 7, 6, 1, 130, 2, 244, + 161, 22, 245, 236, 7, 3, 1, 130, 2, 244, 161, 22, 245, 236, 7, 6, 1, 130, + 2, 244, 161, 22, 244, 217, 46, 7, 3, 1, 130, 2, 244, 161, 22, 244, 217, + 46, 7, 6, 1, 130, 2, 244, 161, 22, 205, 7, 3, 1, 130, 2, 244, 161, 22, + 205, 7, 6, 1, 130, 2, 244, 161, 22, 56, 51, 7, 3, 1, 130, 2, 244, 161, + 22, 56, 51, 7, 6, 1, 97, 2, 56, 51, 7, 3, 1, 97, 2, 56, 51, 7, 6, 1, 97, + 2, 244, 217, 46, 7, 3, 1, 97, 2, 244, 217, 46, 7, 6, 1, 97, 2, 244, 161, + 22, 155, 7, 3, 1, 97, 2, 244, 161, 22, 155, 7, 6, 1, 97, 2, 244, 161, 22, + 245, 236, 7, 3, 1, 97, 2, 244, 161, 22, 245, 236, 7, 6, 1, 97, 2, 244, + 161, 22, 244, 217, 46, 7, 3, 1, 97, 2, 244, 161, 22, 244, 217, 46, 7, 6, + 1, 97, 2, 244, 161, 22, 205, 7, 3, 1, 97, 2, 244, 161, 22, 205, 7, 6, 1, + 97, 2, 244, 161, 22, 56, 51, 7, 3, 1, 97, 2, 244, 161, 22, 56, 51, 7, 6, + 1, 224, 26, 2, 245, 236, 7, 3, 1, 224, 26, 2, 245, 236, 7, 6, 1, 224, 26, + 2, 56, 51, 7, 3, 1, 224, 26, 2, 56, 51, 7, 6, 1, 224, 26, 2, 244, 217, + 46, 7, 3, 1, 224, 26, 2, 244, 217, 46, 7, 6, 1, 224, 26, 2, 205, 7, 3, 1, + 224, 26, 2, 205, 7, 6, 1, 236, 153, 237, 149, 7, 3, 1, 236, 153, 237, + 149, 7, 6, 1, 236, 153, 196, 7, 3, 1, 236, 153, 196, 7, 6, 1, 224, 26, 2, + 237, 124, 7, 3, 1, 224, 26, 2, 237, 124, 19, 3, 1, 254, 206, 2, 232, 177, + 19, 3, 1, 254, 206, 2, 250, 128, 19, 3, 1, 254, 206, 2, 186, 22, 225, 55, + 19, 3, 1, 254, 206, 2, 172, 22, 225, 55, 19, 3, 1, 254, 206, 2, 186, 22, + 233, 249, 19, 3, 1, 254, 206, 2, 172, 22, 233, 249, 19, 3, 1, 254, 206, + 2, 186, 22, 233, 117, 19, 3, 1, 254, 206, 2, 172, 22, 233, 117, 19, 6, 1, + 254, 206, 2, 232, 177, 19, 6, 1, 254, 206, 2, 250, 128, 19, 6, 1, 254, + 206, 2, 186, 22, 225, 55, 19, 6, 1, 254, 206, 2, 172, 22, 225, 55, 19, 6, + 1, 254, 206, 2, 186, 22, 233, 249, 19, 6, 1, 254, 206, 2, 172, 22, 233, + 249, 19, 6, 1, 254, 206, 2, 186, 22, 233, 117, 19, 6, 1, 254, 206, 2, + 172, 22, 233, 117, 19, 3, 1, 247, 207, 2, 232, 177, 19, 3, 1, 247, 207, + 2, 250, 128, 19, 3, 1, 247, 207, 2, 186, 22, 225, 55, 19, 3, 1, 247, 207, + 2, 172, 22, 225, 55, 19, 3, 1, 247, 207, 2, 186, 22, 233, 249, 19, 3, 1, + 247, 207, 2, 172, 22, 233, 249, 19, 6, 1, 247, 207, 2, 232, 177, 19, 6, + 1, 247, 207, 2, 250, 128, 19, 6, 1, 247, 207, 2, 186, 22, 225, 55, 19, 6, + 1, 247, 207, 2, 172, 22, 225, 55, 19, 6, 1, 247, 207, 2, 186, 22, 233, + 249, 19, 6, 1, 247, 207, 2, 172, 22, 233, 249, 19, 3, 1, 247, 172, 2, + 232, 177, 19, 3, 1, 247, 172, 2, 250, 128, 19, 3, 1, 247, 172, 2, 186, + 22, 225, 55, 19, 3, 1, 247, 172, 2, 172, 22, 225, 55, 19, 3, 1, 247, 172, + 2, 186, 22, 233, 249, 19, 3, 1, 247, 172, 2, 172, 22, 233, 249, 19, 3, 1, + 247, 172, 2, 186, 22, 233, 117, 19, 3, 1, 247, 172, 2, 172, 22, 233, 117, + 19, 6, 1, 247, 172, 2, 232, 177, 19, 6, 1, 247, 172, 2, 250, 128, 19, 6, + 1, 247, 172, 2, 186, 22, 225, 55, 19, 6, 1, 247, 172, 2, 172, 22, 225, + 55, 19, 6, 1, 247, 172, 2, 186, 22, 233, 249, 19, 6, 1, 247, 172, 2, 172, + 22, 233, 249, 19, 6, 1, 247, 172, 2, 186, 22, 233, 117, 19, 6, 1, 247, + 172, 2, 172, 22, 233, 117, 19, 3, 1, 239, 216, 2, 232, 177, 19, 3, 1, + 239, 216, 2, 250, 128, 19, 3, 1, 239, 216, 2, 186, 22, 225, 55, 19, 3, 1, + 239, 216, 2, 172, 22, 225, 55, 19, 3, 1, 239, 216, 2, 186, 22, 233, 249, + 19, 3, 1, 239, 216, 2, 172, 22, 233, 249, 19, 3, 1, 239, 216, 2, 186, 22, + 233, 117, 19, 3, 1, 239, 216, 2, 172, 22, 233, 117, 19, 6, 1, 239, 216, + 2, 232, 177, 19, 6, 1, 239, 216, 2, 250, 128, 19, 6, 1, 239, 216, 2, 186, + 22, 225, 55, 19, 6, 1, 239, 216, 2, 172, 22, 225, 55, 19, 6, 1, 239, 216, + 2, 186, 22, 233, 249, 19, 6, 1, 239, 216, 2, 172, 22, 233, 249, 19, 6, 1, + 239, 216, 2, 186, 22, 233, 117, 19, 6, 1, 239, 216, 2, 172, 22, 233, 117, + 19, 3, 1, 234, 65, 2, 232, 177, 19, 3, 1, 234, 65, 2, 250, 128, 19, 3, 1, + 234, 65, 2, 186, 22, 225, 55, 19, 3, 1, 234, 65, 2, 172, 22, 225, 55, 19, + 3, 1, 234, 65, 2, 186, 22, 233, 249, 19, 3, 1, 234, 65, 2, 172, 22, 233, + 249, 19, 6, 1, 234, 65, 2, 232, 177, 19, 6, 1, 234, 65, 2, 250, 128, 19, + 6, 1, 234, 65, 2, 186, 22, 225, 55, 19, 6, 1, 234, 65, 2, 172, 22, 225, + 55, 19, 6, 1, 234, 65, 2, 186, 22, 233, 249, 19, 6, 1, 234, 65, 2, 172, + 22, 233, 249, 19, 3, 1, 225, 111, 2, 232, 177, 19, 3, 1, 225, 111, 2, + 250, 128, 19, 3, 1, 225, 111, 2, 186, 22, 225, 55, 19, 3, 1, 225, 111, 2, + 172, 22, 225, 55, 19, 3, 1, 225, 111, 2, 186, 22, 233, 249, 19, 3, 1, + 225, 111, 2, 172, 22, 233, 249, 19, 3, 1, 225, 111, 2, 186, 22, 233, 117, + 19, 3, 1, 225, 111, 2, 172, 22, 233, 117, 19, 6, 1, 225, 111, 2, 250, + 128, 19, 6, 1, 225, 111, 2, 172, 22, 225, 55, 19, 6, 1, 225, 111, 2, 172, + 22, 233, 249, 19, 6, 1, 225, 111, 2, 172, 22, 233, 117, 19, 3, 1, 234, + 67, 2, 232, 177, 19, 3, 1, 234, 67, 2, 250, 128, 19, 3, 1, 234, 67, 2, + 186, 22, 225, 55, 19, 3, 1, 234, 67, 2, 172, 22, 225, 55, 19, 3, 1, 234, + 67, 2, 186, 22, 233, 249, 19, 3, 1, 234, 67, 2, 172, 22, 233, 249, 19, 3, + 1, 234, 67, 2, 186, 22, 233, 117, 19, 3, 1, 234, 67, 2, 172, 22, 233, + 117, 19, 6, 1, 234, 67, 2, 232, 177, 19, 6, 1, 234, 67, 2, 250, 128, 19, + 6, 1, 234, 67, 2, 186, 22, 225, 55, 19, 6, 1, 234, 67, 2, 172, 22, 225, + 55, 19, 6, 1, 234, 67, 2, 186, 22, 233, 249, 19, 6, 1, 234, 67, 2, 172, + 22, 233, 249, 19, 6, 1, 234, 67, 2, 186, 22, 233, 117, 19, 6, 1, 234, 67, + 2, 172, 22, 233, 117, 19, 3, 1, 254, 206, 2, 225, 55, 19, 3, 1, 254, 206, + 2, 233, 249, 19, 3, 1, 247, 207, 2, 225, 55, 19, 3, 1, 247, 207, 2, 233, + 249, 19, 3, 1, 247, 172, 2, 225, 55, 19, 3, 1, 247, 172, 2, 233, 249, 19, + 3, 1, 239, 216, 2, 225, 55, 19, 3, 1, 239, 216, 2, 233, 249, 19, 3, 1, + 234, 65, 2, 225, 55, 19, 3, 1, 234, 65, 2, 233, 249, 19, 3, 1, 225, 111, + 2, 225, 55, 19, 3, 1, 225, 111, 2, 233, 249, 19, 3, 1, 234, 67, 2, 225, + 55, 19, 3, 1, 234, 67, 2, 233, 249, 19, 3, 1, 254, 206, 2, 186, 22, 223, + 165, 19, 3, 1, 254, 206, 2, 172, 22, 223, 165, 19, 3, 1, 254, 206, 2, + 186, 22, 225, 56, 22, 223, 165, 19, 3, 1, 254, 206, 2, 172, 22, 225, 56, + 22, 223, 165, 19, 3, 1, 254, 206, 2, 186, 22, 233, 250, 22, 223, 165, 19, + 3, 1, 254, 206, 2, 172, 22, 233, 250, 22, 223, 165, 19, 3, 1, 254, 206, + 2, 186, 22, 233, 118, 22, 223, 165, 19, 3, 1, 254, 206, 2, 172, 22, 233, + 118, 22, 223, 165, 19, 6, 1, 254, 206, 2, 186, 22, 232, 188, 19, 6, 1, + 254, 206, 2, 172, 22, 232, 188, 19, 6, 1, 254, 206, 2, 186, 22, 225, 56, + 22, 232, 188, 19, 6, 1, 254, 206, 2, 172, 22, 225, 56, 22, 232, 188, 19, + 6, 1, 254, 206, 2, 186, 22, 233, 250, 22, 232, 188, 19, 6, 1, 254, 206, + 2, 172, 22, 233, 250, 22, 232, 188, 19, 6, 1, 254, 206, 2, 186, 22, 233, + 118, 22, 232, 188, 19, 6, 1, 254, 206, 2, 172, 22, 233, 118, 22, 232, + 188, 19, 3, 1, 247, 172, 2, 186, 22, 223, 165, 19, 3, 1, 247, 172, 2, + 172, 22, 223, 165, 19, 3, 1, 247, 172, 2, 186, 22, 225, 56, 22, 223, 165, + 19, 3, 1, 247, 172, 2, 172, 22, 225, 56, 22, 223, 165, 19, 3, 1, 247, + 172, 2, 186, 22, 233, 250, 22, 223, 165, 19, 3, 1, 247, 172, 2, 172, 22, + 233, 250, 22, 223, 165, 19, 3, 1, 247, 172, 2, 186, 22, 233, 118, 22, + 223, 165, 19, 3, 1, 247, 172, 2, 172, 22, 233, 118, 22, 223, 165, 19, 6, + 1, 247, 172, 2, 186, 22, 232, 188, 19, 6, 1, 247, 172, 2, 172, 22, 232, + 188, 19, 6, 1, 247, 172, 2, 186, 22, 225, 56, 22, 232, 188, 19, 6, 1, + 247, 172, 2, 172, 22, 225, 56, 22, 232, 188, 19, 6, 1, 247, 172, 2, 186, + 22, 233, 250, 22, 232, 188, 19, 6, 1, 247, 172, 2, 172, 22, 233, 250, 22, + 232, 188, 19, 6, 1, 247, 172, 2, 186, 22, 233, 118, 22, 232, 188, 19, 6, + 1, 247, 172, 2, 172, 22, 233, 118, 22, 232, 188, 19, 3, 1, 234, 67, 2, + 186, 22, 223, 165, 19, 3, 1, 234, 67, 2, 172, 22, 223, 165, 19, 3, 1, + 234, 67, 2, 186, 22, 225, 56, 22, 223, 165, 19, 3, 1, 234, 67, 2, 172, + 22, 225, 56, 22, 223, 165, 19, 3, 1, 234, 67, 2, 186, 22, 233, 250, 22, + 223, 165, 19, 3, 1, 234, 67, 2, 172, 22, 233, 250, 22, 223, 165, 19, 3, + 1, 234, 67, 2, 186, 22, 233, 118, 22, 223, 165, 19, 3, 1, 234, 67, 2, + 172, 22, 233, 118, 22, 223, 165, 19, 6, 1, 234, 67, 2, 186, 22, 232, 188, + 19, 6, 1, 234, 67, 2, 172, 22, 232, 188, 19, 6, 1, 234, 67, 2, 186, 22, + 225, 56, 22, 232, 188, 19, 6, 1, 234, 67, 2, 172, 22, 225, 56, 22, 232, + 188, 19, 6, 1, 234, 67, 2, 186, 22, 233, 250, 22, 232, 188, 19, 6, 1, + 234, 67, 2, 172, 22, 233, 250, 22, 232, 188, 19, 6, 1, 234, 67, 2, 186, + 22, 233, 118, 22, 232, 188, 19, 6, 1, 234, 67, 2, 172, 22, 233, 118, 22, + 232, 188, 19, 3, 1, 254, 206, 2, 224, 191, 19, 3, 1, 254, 206, 2, 237, + 63, 19, 3, 1, 254, 206, 2, 225, 56, 22, 223, 165, 19, 3, 1, 254, 206, 2, + 223, 165, 19, 3, 1, 254, 206, 2, 233, 250, 22, 223, 165, 19, 3, 1, 254, + 206, 2, 233, 117, 19, 3, 1, 254, 206, 2, 233, 118, 22, 223, 165, 19, 6, + 1, 254, 206, 2, 224, 191, 19, 6, 1, 254, 206, 2, 237, 63, 19, 6, 1, 254, + 206, 2, 225, 55, 19, 6, 1, 254, 206, 2, 233, 249, 19, 6, 1, 254, 206, 2, + 232, 188, 19, 238, 132, 19, 232, 188, 19, 232, 177, 19, 233, 117, 19, + 249, 254, 22, 233, 117, 19, 3, 1, 247, 172, 2, 225, 56, 22, 223, 165, 19, + 3, 1, 247, 172, 2, 223, 165, 19, 3, 1, 247, 172, 2, 233, 250, 22, 223, + 165, 19, 3, 1, 247, 172, 2, 233, 117, 19, 3, 1, 247, 172, 2, 233, 118, + 22, 223, 165, 19, 6, 1, 247, 207, 2, 225, 55, 19, 6, 1, 247, 207, 2, 233, + 249, 19, 6, 1, 247, 172, 2, 225, 55, 19, 6, 1, 247, 172, 2, 233, 249, 19, + 6, 1, 247, 172, 2, 232, 188, 19, 186, 22, 225, 55, 19, 186, 22, 233, 249, + 19, 186, 22, 233, 117, 19, 3, 1, 239, 216, 2, 224, 191, 19, 3, 1, 239, + 216, 2, 237, 63, 19, 3, 1, 239, 216, 2, 249, 254, 22, 225, 55, 19, 3, 1, + 239, 216, 2, 249, 254, 22, 233, 249, 19, 3, 1, 239, 216, 2, 233, 117, 19, + 3, 1, 239, 216, 2, 249, 254, 22, 233, 117, 19, 6, 1, 239, 216, 2, 224, + 191, 19, 6, 1, 239, 216, 2, 237, 63, 19, 6, 1, 239, 216, 2, 225, 55, 19, + 6, 1, 239, 216, 2, 233, 249, 19, 172, 22, 225, 55, 19, 172, 22, 233, 249, + 19, 172, 22, 233, 117, 19, 3, 1, 225, 111, 2, 224, 191, 19, 3, 1, 225, + 111, 2, 237, 63, 19, 3, 1, 225, 111, 2, 249, 254, 22, 225, 55, 19, 3, 1, + 225, 111, 2, 249, 254, 22, 233, 249, 19, 3, 1, 231, 183, 2, 232, 177, 19, + 3, 1, 231, 183, 2, 250, 128, 19, 3, 1, 225, 111, 2, 233, 117, 19, 3, 1, + 225, 111, 2, 249, 254, 22, 233, 117, 19, 6, 1, 225, 111, 2, 224, 191, 19, + 6, 1, 225, 111, 2, 237, 63, 19, 6, 1, 225, 111, 2, 225, 55, 19, 6, 1, + 225, 111, 2, 233, 249, 19, 6, 1, 231, 183, 2, 250, 128, 19, 249, 254, 22, + 225, 55, 19, 249, 254, 22, 233, 249, 19, 225, 55, 19, 3, 1, 234, 67, 2, + 225, 56, 22, 223, 165, 19, 3, 1, 234, 67, 2, 223, 165, 19, 3, 1, 234, 67, + 2, 233, 250, 22, 223, 165, 19, 3, 1, 234, 67, 2, 233, 117, 19, 3, 1, 234, + 67, 2, 233, 118, 22, 223, 165, 19, 6, 1, 234, 65, 2, 225, 55, 19, 6, 1, + 234, 65, 2, 233, 249, 19, 6, 1, 234, 67, 2, 225, 55, 19, 6, 1, 234, 67, + 2, 233, 249, 19, 6, 1, 234, 67, 2, 232, 188, 19, 233, 249, 19, 250, 128, + 247, 240, 232, 81, 247, 248, 232, 81, 247, 240, 228, 145, 247, 248, 228, + 145, 226, 189, 228, 145, 246, 241, 228, 145, 228, 215, 228, 145, 247, 61, + 228, 145, 232, 171, 228, 145, 226, 215, 228, 145, 245, 158, 228, 145, + 223, 90, 224, 115, 228, 145, 223, 90, 224, 115, 234, 255, 223, 90, 224, + 115, 239, 112, 237, 231, 76, 231, 147, 76, 244, 95, 235, 0, 244, 95, 247, + 61, 250, 130, 247, 240, 250, 130, 247, 248, 250, 130, 169, 125, 47, 61, + 237, 170, 47, 184, 237, 170, 42, 228, 241, 232, 57, 76, 41, 228, 241, + 232, 57, 76, 228, 241, 237, 116, 232, 57, 76, 228, 241, 245, 62, 232, 57, + 76, 42, 47, 232, 57, 76, 41, 47, 232, 57, 76, 47, 237, 116, 232, 57, 76, + 47, 245, 62, 232, 57, 76, 250, 174, 47, 250, 174, 252, 83, 226, 75, 252, + 83, 168, 56, 237, 242, 135, 56, 237, 242, 169, 247, 249, 244, 93, 232, + 254, 237, 171, 229, 173, 233, 192, 229, 173, 237, 231, 247, 246, 231, + 147, 247, 246, 232, 243, 249, 200, 246, 249, 237, 231, 234, 0, 231, 147, + 234, 0, 235, 229, 235, 5, 228, 145, 233, 124, 236, 130, 53, 233, 124, + 227, 24, 226, 195, 53, 232, 205, 47, 232, 205, 226, 66, 232, 205, 200, + 232, 205, 200, 47, 232, 205, 200, 226, 66, 232, 205, 252, 9, 228, 241, + 237, 235, 254, 182, 232, 57, 76, 228, 241, 231, 151, 254, 182, 232, 57, + 76, 231, 228, 76, 47, 247, 149, 76, 239, 230, 234, 1, 225, 130, 116, 226, + 170, 252, 10, 239, 244, 232, 254, 254, 67, 244, 96, 252, 83, 246, 235, + 228, 194, 42, 37, 252, 115, 2, 232, 65, 41, 37, 252, 115, 2, 232, 65, 47, + 232, 69, 76, 232, 69, 247, 149, 76, 247, 149, 232, 69, 76, 226, 145, 5, + 247, 173, 200, 233, 38, 53, 86, 117, 252, 83, 86, 81, 252, 83, 184, 254, + 69, 200, 229, 186, 251, 83, 225, 116, 135, 254, 68, 254, 218, 224, 235, + 251, 53, 236, 121, 53, 227, 187, 250, 130, 239, 223, 225, 130, 247, 13, + 232, 171, 76, 152, 56, 232, 170, 232, 78, 232, 205, 246, 243, 56, 232, + 170, 247, 37, 56, 232, 170, 135, 56, 232, 170, 246, 243, 56, 76, 248, + 138, 250, 243, 226, 74, 61, 246, 243, 249, 138, 236, 228, 12, 228, 145, + 224, 92, 239, 112, 246, 216, 254, 141, 239, 221, 226, 156, 239, 221, 229, + 173, 239, 221, 233, 10, 239, 253, 227, 136, 227, 198, 255, 35, 227, 136, + 227, 198, 239, 253, 10, 211, 229, 127, 255, 35, 10, 211, 229, 127, 235, + 225, 21, 229, 128, 235, 1, 21, 229, 128, 227, 219, 223, 89, 227, 219, 7, + 3, 1, 74, 227, 219, 158, 227, 219, 173, 227, 219, 183, 227, 219, 194, + 227, 219, 187, 227, 219, 192, 227, 219, 79, 53, 227, 219, 236, 120, 227, + 219, 247, 204, 53, 227, 219, 42, 233, 180, 227, 219, 41, 233, 180, 227, + 219, 7, 3, 1, 199, 227, 253, 223, 89, 227, 253, 118, 227, 253, 113, 227, + 253, 166, 227, 253, 158, 227, 253, 173, 227, 253, 183, 227, 253, 194, + 227, 253, 187, 227, 253, 192, 227, 253, 79, 53, 227, 253, 236, 120, 227, + 253, 247, 204, 53, 227, 253, 42, 233, 180, 227, 253, 41, 233, 180, 7, + 227, 253, 3, 1, 57, 7, 227, 253, 3, 1, 72, 7, 227, 253, 3, 1, 73, 7, 227, + 253, 3, 1, 224, 73, 7, 227, 253, 3, 1, 230, 222, 247, 160, 53, 251, 62, + 53, 250, 237, 53, 246, 229, 246, 231, 53, 237, 159, 53, 236, 131, 53, + 235, 242, 53, 233, 108, 53, 231, 54, 53, 224, 100, 53, 139, 229, 100, 53, + 249, 147, 53, 247, 161, 53, 238, 187, 53, 225, 246, 53, 248, 122, 53, + 246, 111, 233, 131, 53, 233, 106, 53, 245, 215, 53, 254, 45, 53, 244, + 148, 53, 251, 228, 53, 36, 42, 245, 136, 46, 36, 41, 245, 136, 46, 36, + 182, 61, 237, 171, 234, 2, 36, 229, 63, 61, 237, 171, 234, 2, 36, 254, + 168, 67, 46, 36, 251, 84, 67, 46, 36, 42, 67, 46, 36, 41, 67, 46, 36, + 231, 140, 234, 2, 36, 251, 84, 231, 140, 234, 2, 36, 254, 168, 231, 140, + 234, 2, 36, 152, 197, 46, 36, 246, 243, 197, 46, 36, 247, 236, 251, 106, + 36, 247, 236, 228, 120, 36, 247, 236, 249, 250, 36, 247, 236, 251, 107, + 253, 63, 36, 42, 41, 67, 46, 36, 247, 236, 230, 218, 36, 247, 236, 238, + 230, 36, 247, 236, 225, 108, 232, 251, 226, 78, 36, 231, 193, 228, 162, + 234, 2, 36, 47, 61, 195, 234, 2, 36, 254, 174, 98, 36, 226, 66, 225, 132, + 36, 224, 117, 252, 102, 46, 36, 117, 67, 234, 2, 36, 182, 47, 228, 162, + 234, 2, 36, 81, 245, 136, 2, 171, 248, 124, 36, 117, 245, 136, 2, 171, + 248, 124, 36, 42, 67, 51, 36, 41, 67, 51, 36, 254, 70, 46, 255, 39, 234, + 87, 255, 26, 180, 226, 240, 228, 1, 159, 6, 252, 44, 250, 62, 251, 222, + 251, 219, 237, 171, 98, 252, 11, 234, 87, 252, 36, 225, 137, 247, 162, + 251, 30, 230, 216, 250, 62, 247, 116, 95, 3, 214, 95, 6, 212, 252, 148, + 6, 212, 159, 6, 212, 233, 20, 251, 30, 233, 20, 251, 31, 107, 135, 233, + 69, 95, 6, 74, 252, 148, 6, 74, 95, 6, 149, 95, 3, 149, 238, 47, 45, 253, + 36, 98, 159, 6, 199, 234, 196, 53, 228, 155, 231, 238, 251, 12, 95, 6, + 233, 244, 159, 6, 233, 244, 159, 6, 232, 139, 95, 6, 146, 252, 148, 6, + 146, 159, 6, 146, 232, 209, 227, 83, 231, 200, 229, 169, 76, 227, 29, 53, + 226, 94, 165, 53, 225, 31, 159, 6, 223, 119, 234, 12, 53, 234, 82, 53, + 239, 223, 234, 82, 53, 252, 148, 6, 223, 119, 209, 19, 3, 1, 239, 215, + 238, 250, 53, 254, 180, 53, 95, 6, 254, 27, 252, 148, 6, 252, 44, 247, + 176, 98, 95, 3, 72, 95, 6, 72, 95, 6, 247, 130, 209, 6, 247, 130, 95, 6, + 185, 95, 3, 73, 92, 98, 252, 201, 98, 246, 35, 98, 250, 161, 98, 240, 1, + 228, 153, 231, 106, 6, 232, 139, 247, 118, 53, 159, 3, 233, 69, 159, 3, + 246, 169, 159, 6, 246, 169, 159, 6, 233, 69, 159, 236, 4, 227, 230, 209, + 30, 6, 214, 209, 30, 6, 149, 200, 30, 6, 149, 209, 30, 6, 224, 25, 159, + 27, 6, 222, 222, 159, 27, 3, 222, 222, 159, 27, 3, 72, 159, 27, 3, 74, + 159, 27, 3, 239, 182, 232, 191, 237, 170, 209, 254, 193, 233, 124, 53, + 254, 235, 209, 3, 247, 130, 14, 32, 231, 4, 228, 153, 224, 189, 246, 235, + 168, 226, 213, 224, 189, 246, 235, 135, 226, 211, 224, 189, 246, 235, + 168, 247, 66, 224, 189, 246, 235, 135, 247, 65, 224, 189, 246, 235, 152, + 247, 65, 224, 189, 246, 235, 246, 243, 247, 65, 224, 189, 246, 235, 168, + 228, 210, 224, 189, 246, 235, 247, 37, 228, 208, 224, 189, 246, 235, 168, + 248, 16, 224, 189, 246, 235, 152, 248, 14, 224, 189, 246, 235, 247, 37, + 248, 14, 224, 189, 246, 235, 229, 163, 248, 14, 246, 235, 234, 197, 118, + 231, 115, 207, 118, 231, 115, 207, 113, 231, 115, 207, 166, 231, 115, + 207, 158, 231, 115, 207, 173, 231, 115, 207, 183, 231, 115, 207, 194, + 231, 115, 207, 187, 231, 115, 207, 192, 231, 115, 207, 227, 23, 231, 115, + 207, 247, 252, 231, 115, 207, 225, 218, 231, 115, 207, 247, 63, 231, 115, + 207, 168, 244, 135, 231, 115, 207, 247, 37, 244, 135, 231, 115, 207, 168, + 226, 194, 3, 231, 115, 207, 118, 3, 231, 115, 207, 113, 3, 231, 115, 207, + 166, 3, 231, 115, 207, 158, 3, 231, 115, 207, 173, 3, 231, 115, 207, 183, + 3, 231, 115, 207, 194, 3, 231, 115, 207, 187, 3, 231, 115, 207, 192, 3, + 231, 115, 207, 227, 23, 3, 231, 115, 207, 247, 252, 3, 231, 115, 207, + 225, 218, 3, 231, 115, 207, 247, 63, 3, 231, 115, 207, 168, 244, 135, 3, + 231, 115, 207, 247, 37, 244, 135, 3, 231, 115, 207, 168, 226, 194, 231, + 115, 207, 168, 226, 195, 252, 45, 222, 222, 231, 115, 207, 247, 37, 226, + 194, 231, 115, 207, 227, 24, 226, 194, 231, 115, 207, 200, 168, 244, 135, + 7, 3, 1, 200, 252, 44, 231, 115, 207, 228, 217, 238, 3, 15, 231, 115, + 207, 247, 64, 248, 50, 15, 231, 115, 207, 247, 64, 226, 194, 231, 115, + 207, 168, 244, 136, 226, 194, 117, 58, 225, 106, 58, 81, 58, 248, 125, + 58, 42, 41, 58, 99, 103, 58, 234, 245, 224, 131, 58, 234, 245, 248, 45, + 58, 228, 152, 248, 45, 58, 228, 152, 224, 131, 58, 117, 67, 2, 82, 81, + 67, 2, 82, 117, 224, 148, 58, 81, 224, 148, 58, 117, 135, 245, 117, 58, + 225, 106, 135, 245, 117, 58, 81, 135, 245, 117, 58, 248, 125, 135, 245, + 117, 58, 117, 67, 2, 227, 89, 81, 67, 2, 227, 89, 117, 67, 246, 224, 125, + 225, 106, 67, 246, 224, 125, 81, 67, 246, 224, 125, 248, 125, 67, 246, + 224, 125, 99, 103, 67, 2, 253, 24, 117, 67, 2, 88, 81, 67, 2, 88, 117, + 67, 2, 237, 124, 81, 67, 2, 237, 124, 42, 41, 224, 148, 58, 42, 41, 67, + 2, 82, 248, 125, 223, 38, 58, 225, 106, 67, 2, 226, 151, 237, 230, 225, + 106, 67, 2, 226, 151, 231, 145, 248, 125, 67, 2, 226, 151, 237, 230, 248, + 125, 67, 2, 226, 151, 231, 145, 81, 67, 2, 251, 11, 248, 124, 248, 125, + 67, 2, 251, 11, 237, 230, 254, 168, 226, 106, 229, 189, 58, 251, 84, 226, + 106, 229, 189, 58, 234, 245, 224, 131, 67, 180, 182, 125, 117, 67, 180, + 253, 36, 107, 81, 67, 180, 125, 254, 168, 234, 44, 251, 107, 58, 251, 84, + 234, 44, 251, 107, 58, 117, 245, 136, 2, 171, 225, 105, 117, 245, 136, 2, + 171, 248, 124, 225, 106, 245, 136, 2, 171, 231, 145, 225, 106, 245, 136, + 2, 171, 237, 230, 81, 245, 136, 2, 171, 225, 105, 81, 245, 136, 2, 171, + 248, 124, 248, 125, 245, 136, 2, 171, 231, 145, 248, 125, 245, 136, 2, + 171, 237, 230, 81, 67, 107, 117, 58, 225, 106, 67, 117, 106, 248, 125, + 58, 117, 67, 107, 81, 58, 117, 233, 232, 254, 92, 225, 106, 233, 232, + 254, 92, 81, 233, 232, 254, 92, 248, 125, 233, 232, 254, 92, 117, 245, + 136, 107, 81, 245, 135, 81, 245, 136, 107, 117, 245, 135, 117, 47, 67, 2, + 82, 42, 41, 47, 67, 2, 82, 81, 47, 67, 2, 82, 117, 47, 58, 225, 106, 47, + 58, 81, 47, 58, 248, 125, 47, 58, 42, 41, 47, 58, 99, 103, 47, 58, 234, + 245, 224, 131, 47, 58, 234, 245, 248, 45, 47, 58, 228, 152, 248, 45, 47, + 58, 228, 152, 224, 131, 47, 58, 117, 226, 66, 58, 81, 226, 66, 58, 117, + 228, 115, 58, 81, 228, 115, 58, 225, 106, 67, 2, 47, 82, 248, 125, 67, 2, + 47, 82, 117, 250, 129, 58, 225, 106, 250, 129, 58, 81, 250, 129, 58, 248, + 125, 250, 129, 58, 117, 67, 180, 125, 81, 67, 180, 125, 117, 63, 58, 225, + 106, 63, 58, 81, 63, 58, 248, 125, 63, 58, 225, 106, 63, 67, 246, 224, + 125, 225, 106, 63, 67, 234, 62, 233, 146, 225, 106, 63, 67, 234, 62, 233, + 147, 2, 169, 125, 225, 106, 63, 67, 234, 62, 233, 147, 2, 61, 125, 225, + 106, 63, 47, 58, 225, 106, 63, 47, 67, 234, 62, 233, 146, 81, 63, 67, + 246, 224, 224, 165, 234, 245, 224, 131, 67, 180, 251, 10, 228, 152, 248, + 45, 67, 180, 251, 10, 99, 103, 63, 58, 41, 67, 2, 3, 251, 106, 248, 125, + 67, 117, 106, 225, 106, 58, 152, 81, 254, 92, 117, 67, 2, 61, 82, 81, 67, + 2, 61, 82, 42, 41, 67, 2, 61, 82, 117, 67, 2, 47, 61, 82, 81, 67, 2, 47, + 61, 82, 42, 41, 67, 2, 47, 61, 82, 117, 234, 42, 58, 81, 234, 42, 58, 42, + 41, 234, 42, 58, 32, 254, 216, 251, 50, 233, 175, 249, 236, 226, 231, + 247, 145, 226, 231, 249, 154, 190, 247, 146, 247, 241, 229, 164, 240, 10, + 235, 250, 247, 254, 234, 87, 190, 254, 191, 247, 254, 234, 87, 3, 247, + 254, 234, 87, 251, 26, 254, 87, 236, 213, 249, 154, 190, 251, 28, 254, + 87, 236, 213, 3, 251, 26, 254, 87, 236, 213, 247, 233, 106, 232, 193, + 236, 4, 232, 200, 236, 4, 251, 15, 236, 4, 227, 230, 236, 121, 53, 236, + 119, 53, 56, 233, 10, 249, 181, 228, 194, 229, 165, 236, 120, 254, 70, + 234, 37, 231, 140, 234, 37, 252, 84, 234, 37, 37, 231, 111, 250, 232, + 231, 111, 246, 237, 231, 111, 232, 189, 96, 240, 3, 41, 254, 181, 254, + 181, 236, 232, 254, 181, 228, 137, 254, 181, 249, 183, 249, 154, 190, + 249, 186, 233, 185, 96, 190, 233, 185, 96, 237, 138, 254, 186, 237, 138, + 234, 31, 239, 227, 225, 127, 239, 239, 47, 239, 239, 226, 66, 239, 239, + 251, 22, 239, 239, 227, 209, 239, 239, 224, 199, 239, 239, 251, 84, 239, + 239, 251, 84, 251, 22, 239, 239, 254, 168, 251, 22, 239, 239, 226, 230, + 252, 233, 231, 252, 232, 190, 56, 236, 120, 247, 150, 246, 117, 232, 190, + 244, 220, 226, 159, 234, 37, 200, 205, 239, 223, 237, 250, 193, 228, 242, + 224, 147, 224, 86, 232, 200, 190, 205, 236, 121, 205, 254, 65, 105, 96, + 190, 254, 65, 105, 96, 254, 137, 105, 96, 254, 137, 252, 64, 190, 255, + 34, 105, 96, 235, 156, 254, 137, 234, 248, 255, 34, 105, 96, 254, 210, + 105, 96, 190, 254, 210, 105, 96, 254, 210, 105, 145, 105, 96, 226, 66, + 205, 254, 217, 105, 96, 247, 200, 96, 246, 116, 247, 200, 96, 249, 237, + 252, 195, 254, 139, 226, 240, 237, 178, 246, 116, 105, 96, 254, 137, 105, + 180, 145, 226, 240, 240, 29, 234, 87, 240, 29, 106, 145, 254, 137, 105, + 96, 251, 62, 247, 203, 247, 204, 251, 61, 231, 140, 240, 17, 105, 96, + 231, 140, 105, 96, 251, 4, 96, 247, 175, 247, 202, 96, 228, 59, 247, 203, + 250, 48, 105, 96, 105, 180, 252, 55, 250, 63, 236, 232, 252, 54, 232, 67, + 105, 96, 190, 105, 96, 244, 63, 96, 190, 244, 63, 96, 228, 25, 247, 200, + 96, 237, 213, 145, 105, 96, 245, 231, 145, 105, 96, 237, 213, 107, 105, + 96, 245, 231, 107, 105, 96, 237, 213, 252, 64, 190, 105, 96, 245, 231, + 252, 64, 190, 105, 96, 236, 62, 237, 212, 236, 62, 245, 230, 252, 195, + 190, 247, 200, 96, 190, 237, 212, 190, 245, 230, 235, 156, 237, 213, 234, + 248, 105, 96, 235, 156, 245, 231, 234, 248, 105, 96, 237, 213, 145, 247, + 200, 96, 245, 231, 145, 247, 200, 96, 235, 156, 237, 213, 234, 248, 247, + 200, 96, 235, 156, 245, 231, 234, 248, 247, 200, 96, 237, 213, 145, 245, + 230, 245, 231, 145, 237, 212, 235, 156, 237, 213, 234, 248, 245, 230, + 235, 156, 245, 231, 234, 248, 237, 212, 232, 213, 227, 243, 232, 214, + 145, 105, 96, 227, 244, 145, 105, 96, 232, 214, 145, 247, 200, 96, 227, + 244, 145, 247, 200, 96, 249, 154, 190, 232, 216, 249, 154, 190, 227, 245, + 227, 252, 234, 87, 227, 218, 234, 87, 190, 102, 227, 252, 234, 87, 190, + 102, 227, 218, 234, 87, 227, 252, 106, 145, 105, 96, 227, 218, 106, 145, + 105, 96, 235, 156, 102, 227, 252, 106, 234, 248, 105, 96, 235, 156, 102, + 227, 218, 106, 234, 248, 105, 96, 227, 252, 106, 2, 190, 105, 96, 227, + 218, 106, 2, 190, 105, 96, 236, 49, 236, 50, 236, 51, 236, 50, 225, 127, + 37, 240, 29, 234, 87, 37, 234, 27, 234, 87, 37, 240, 29, 106, 145, 105, + 96, 37, 234, 27, 106, 145, 105, 96, 37, 252, 16, 37, 250, 226, 33, 233, + 10, 33, 236, 120, 33, 226, 156, 33, 249, 181, 228, 194, 33, 56, 234, 37, + 33, 231, 140, 234, 37, 33, 254, 70, 234, 37, 33, 247, 203, 33, 250, 130, + 228, 119, 233, 10, 228, 119, 236, 120, 228, 119, 226, 156, 228, 119, 56, + 234, 37, 41, 227, 96, 42, 227, 96, 103, 227, 96, 99, 227, 96, 254, 73, + 236, 100, 226, 51, 246, 253, 226, 66, 61, 253, 36, 41, 225, 232, 47, 61, + 253, 36, 47, 41, 225, 232, 249, 154, 190, 232, 185, 190, 226, 51, 249, + 154, 190, 246, 254, 235, 159, 47, 61, 253, 36, 47, 41, 225, 232, 232, + 214, 225, 134, 231, 221, 227, 244, 225, 134, 231, 221, 234, 246, 228, 4, + 234, 87, 251, 26, 254, 87, 234, 246, 228, 3, 234, 246, 228, 4, 106, 145, + 105, 96, 251, 26, 254, 87, 234, 246, 228, 4, 145, 105, 96, 234, 27, 234, + 87, 240, 29, 234, 87, 236, 55, 245, 93, 251, 36, 237, 0, 239, 236, 224, + 52, 235, 235, 234, 247, 41, 254, 182, 2, 254, 122, 41, 226, 78, 236, 4, + 237, 138, 254, 186, 236, 4, 237, 138, 234, 31, 236, 4, 239, 227, 236, 4, + 225, 127, 249, 251, 234, 37, 56, 234, 37, 228, 59, 234, 37, 249, 181, + 226, 156, 252, 119, 42, 234, 246, 247, 117, 229, 185, 232, 200, 41, 234, + 246, 247, 117, 229, 185, 232, 200, 42, 229, 185, 232, 200, 41, 229, 185, + 232, 200, 200, 226, 159, 247, 203, 250, 223, 237, 138, 234, 31, 250, 223, + 237, 138, 254, 186, 47, 227, 251, 47, 227, 217, 47, 239, 227, 47, 225, + 127, 233, 28, 105, 22, 233, 185, 96, 237, 213, 2, 249, 140, 245, 231, 2, + 249, 140, 224, 234, 236, 62, 237, 212, 224, 234, 236, 62, 245, 230, 237, + 213, 105, 180, 145, 245, 230, 245, 231, 105, 180, 145, 237, 212, 105, + 180, 145, 237, 212, 105, 180, 145, 245, 230, 105, 180, 145, 232, 213, + 105, 180, 145, 227, 243, 249, 154, 190, 232, 217, 145, 247, 205, 249, + 154, 190, 227, 246, 145, 247, 205, 190, 37, 240, 29, 106, 145, 105, 96, + 190, 37, 234, 27, 106, 145, 105, 96, 37, 240, 29, 106, 145, 190, 105, 96, + 37, 234, 27, 106, 145, 190, 105, 96, 237, 213, 252, 64, 190, 247, 200, + 96, 245, 231, 252, 64, 190, 247, 200, 96, 232, 214, 252, 64, 190, 247, + 200, 96, 227, 244, 252, 64, 190, 247, 200, 96, 190, 234, 246, 228, 4, + 234, 87, 249, 154, 190, 251, 28, 254, 87, 234, 246, 228, 3, 190, 234, + 246, 228, 4, 106, 145, 105, 96, 249, 154, 190, 251, 28, 254, 87, 234, + 246, 228, 4, 145, 247, 205, 61, 247, 249, 236, 152, 169, 247, 249, 99, + 41, 250, 1, 247, 249, 103, 41, 250, 1, 247, 249, 247, 254, 106, 2, 182, + 169, 82, 247, 254, 106, 2, 61, 253, 36, 254, 63, 247, 233, 106, 169, 82, + 3, 247, 254, 106, 2, 61, 253, 36, 254, 63, 247, 233, 106, 169, 82, 247, + 254, 106, 2, 56, 46, 247, 254, 106, 2, 234, 5, 3, 247, 254, 106, 2, 234, + 5, 247, 254, 106, 2, 225, 133, 247, 254, 106, 2, 135, 169, 228, 10, 251, + 26, 2, 182, 169, 82, 251, 26, 2, 61, 253, 36, 254, 63, 247, 233, 106, + 169, 82, 3, 251, 26, 2, 61, 253, 36, 254, 63, 247, 233, 106, 169, 82, + 251, 26, 2, 234, 5, 3, 251, 26, 2, 234, 5, 223, 120, 150, 253, 59, 236, + 212, 249, 252, 53, 248, 0, 58, 244, 153, 99, 254, 93, 103, 254, 93, 232, + 196, 233, 111, 224, 146, 237, 170, 42, 251, 224, 41, 251, 224, 42, 247, + 17, 41, 247, 17, 252, 126, 41, 250, 245, 252, 126, 42, 250, 245, 226, + 106, 41, 250, 245, 226, 106, 42, 250, 245, 200, 190, 53, 37, 237, 113, + 254, 122, 230, 199, 230, 204, 227, 29, 231, 239, 232, 239, 240, 7, 224, + 222, 228, 120, 233, 23, 106, 239, 235, 53, 209, 190, 53, 224, 153, 244, + 154, 226, 106, 42, 251, 10, 226, 106, 41, 251, 10, 252, 126, 42, 251, 10, + 252, 126, 41, 251, 10, 226, 106, 132, 239, 239, 252, 126, 132, 239, 239, + 246, 222, 228, 180, 99, 254, 94, 252, 196, 135, 169, 253, 26, 234, 32, + 238, 232, 247, 196, 180, 226, 240, 231, 153, 224, 74, 240, 17, 102, 231, + 237, 252, 118, 238, 231, 237, 235, 254, 182, 104, 231, 151, 254, 182, + 104, 247, 196, 180, 226, 240, 237, 237, 252, 207, 231, 139, 250, 200, + 254, 217, 254, 101, 227, 135, 226, 98, 231, 59, 249, 219, 234, 28, 251, + 38, 227, 68, 228, 189, 251, 1, 251, 0, 162, 163, 14, 244, 78, 162, 163, + 14, 228, 113, 232, 81, 162, 163, 14, 232, 82, 247, 205, 162, 163, 14, + 232, 82, 249, 186, 162, 163, 14, 232, 82, 249, 250, 162, 163, 14, 232, + 82, 239, 105, 162, 163, 14, 232, 82, 251, 106, 162, 163, 14, 251, 107, + 228, 44, 162, 163, 14, 251, 107, 239, 105, 162, 163, 14, 228, 195, 125, + 162, 163, 14, 253, 64, 125, 162, 163, 14, 232, 82, 228, 194, 162, 163, + 14, 232, 82, 253, 63, 162, 163, 14, 232, 82, 237, 212, 162, 163, 14, 232, + 82, 245, 230, 162, 163, 14, 117, 225, 60, 162, 163, 14, 81, 225, 60, 162, + 163, 14, 232, 82, 117, 58, 162, 163, 14, 232, 82, 81, 58, 162, 163, 14, + 251, 107, 253, 63, 162, 163, 14, 103, 227, 97, 225, 133, 162, 163, 14, + 250, 48, 228, 44, 162, 163, 14, 232, 82, 103, 252, 9, 162, 163, 14, 232, + 82, 250, 47, 162, 163, 14, 103, 227, 97, 239, 105, 162, 163, 14, 225, + 106, 225, 60, 162, 163, 14, 232, 82, 225, 106, 58, 162, 163, 14, 99, 227, + 97, 234, 5, 162, 163, 14, 250, 57, 228, 44, 162, 163, 14, 232, 82, 99, + 252, 9, 162, 163, 14, 232, 82, 250, 56, 162, 163, 14, 99, 227, 97, 239, + 105, 162, 163, 14, 248, 125, 225, 60, 162, 163, 14, 232, 82, 248, 125, + 58, 162, 163, 14, 232, 56, 225, 133, 162, 163, 14, 250, 48, 225, 133, + 162, 163, 14, 249, 251, 225, 133, 162, 163, 14, 239, 106, 225, 133, 162, + 163, 14, 251, 107, 225, 133, 162, 163, 14, 99, 229, 69, 239, 105, 162, + 163, 14, 232, 56, 232, 81, 162, 163, 14, 251, 107, 228, 58, 162, 163, 14, + 232, 82, 251, 61, 162, 163, 14, 99, 227, 97, 219, 162, 163, 14, 250, 57, + 219, 162, 163, 14, 228, 59, 219, 162, 163, 14, 239, 106, 219, 162, 163, + 14, 251, 107, 219, 162, 163, 14, 103, 229, 69, 228, 44, 162, 163, 14, 42, + 229, 69, 228, 44, 162, 163, 14, 226, 159, 219, 162, 163, 14, 245, 231, + 219, 162, 163, 14, 251, 55, 125, 162, 163, 14, 250, 57, 205, 162, 163, + 14, 223, 37, 162, 163, 14, 228, 45, 205, 162, 163, 14, 229, 187, 225, + 133, 162, 163, 14, 232, 82, 190, 247, 205, 162, 163, 14, 232, 82, 232, + 68, 162, 163, 14, 103, 252, 10, 205, 162, 163, 14, 99, 252, 10, 205, 162, + 163, 14, 239, 215, 162, 163, 14, 231, 182, 162, 163, 14, 234, 66, 162, + 163, 14, 254, 206, 225, 133, 162, 163, 14, 247, 207, 225, 133, 162, 163, + 14, 239, 216, 225, 133, 162, 163, 14, 234, 67, 225, 133, 162, 163, 14, + 254, 205, 190, 251, 181, 76, 41, 254, 182, 2, 248, 125, 223, 38, 58, 229, + 48, 234, 44, 252, 118, 252, 216, 98, 61, 237, 171, 2, 236, 154, 249, 140, + 239, 244, 98, 251, 23, 225, 131, 98, 249, 197, 225, 131, 98, 247, 243, + 98, 251, 46, 98, 63, 37, 2, 251, 219, 61, 237, 170, 247, 223, 98, 254, + 201, 238, 233, 98, 245, 103, 98, 33, 169, 253, 36, 2, 234, 241, 33, 226, + 79, 248, 127, 252, 99, 251, 107, 2, 234, 244, 58, 225, 129, 98, 236, 89, + 98, 244, 91, 98, 234, 43, 245, 171, 98, 234, 43, 238, 45, 98, 233, 170, + 98, 233, 169, 98, 249, 201, 250, 221, 14, 211, 113, 228, 164, 98, 162, + 163, 14, 232, 81, 250, 71, 229, 174, 238, 233, 98, 232, 207, 233, 233, + 235, 142, 233, 233, 232, 204, 230, 219, 98, 251, 94, 230, 219, 98, 42, + 233, 181, 225, 113, 88, 42, 233, 181, 247, 141, 42, 233, 181, 203, 88, + 41, 233, 181, 225, 113, 88, 41, 233, 181, 247, 141, 41, 233, 181, 203, + 88, 42, 37, 252, 115, 225, 113, 251, 10, 42, 37, 252, 115, 247, 141, 42, + 37, 252, 115, 203, 251, 10, 41, 37, 252, 115, 225, 113, 251, 10, 41, 37, + 252, 115, 247, 141, 41, 37, 252, 115, 203, 251, 10, 42, 250, 223, 252, + 115, 225, 113, 88, 42, 250, 223, 252, 115, 236, 154, 233, 63, 42, 250, + 223, 252, 115, 203, 88, 250, 223, 252, 115, 247, 141, 41, 250, 223, 252, + 115, 225, 113, 88, 41, 250, 223, 252, 115, 236, 154, 233, 63, 41, 250, + 223, 252, 115, 203, 88, 239, 240, 247, 141, 169, 237, 171, 247, 141, 225, + 113, 42, 145, 203, 41, 250, 223, 252, 115, 230, 205, 225, 113, 41, 145, + 203, 42, 250, 223, 252, 115, 230, 205, 227, 231, 226, 105, 227, 231, 252, + 125, 226, 106, 37, 104, 252, 126, 37, 104, 252, 126, 37, 252, 115, 107, + 226, 106, 37, 104, 29, 14, 252, 125, 42, 61, 77, 237, 170, 41, 61, 77, + 237, 170, 169, 230, 228, 237, 169, 169, 230, 228, 237, 168, 169, 230, + 228, 237, 167, 169, 230, 228, 237, 166, 250, 40, 14, 157, 61, 22, 226, + 106, 231, 153, 250, 40, 14, 157, 61, 22, 252, 126, 231, 153, 250, 40, 14, + 157, 61, 2, 251, 106, 250, 40, 14, 157, 103, 22, 169, 2, 251, 106, 250, + 40, 14, 157, 99, 22, 169, 2, 251, 106, 250, 40, 14, 157, 61, 2, 226, 78, + 250, 40, 14, 157, 103, 22, 169, 2, 226, 78, 250, 40, 14, 157, 99, 22, + 169, 2, 226, 78, 250, 40, 14, 157, 61, 22, 224, 147, 250, 40, 14, 157, + 103, 22, 169, 2, 224, 147, 250, 40, 14, 157, 99, 22, 169, 2, 224, 147, + 250, 40, 14, 157, 103, 22, 244, 212, 250, 40, 14, 157, 99, 22, 244, 212, + 250, 40, 14, 157, 61, 22, 226, 106, 237, 237, 250, 40, 14, 157, 61, 22, + 252, 126, 237, 237, 37, 247, 2, 231, 195, 98, 248, 10, 98, 61, 237, 171, + 247, 141, 236, 194, 252, 106, 236, 194, 182, 107, 229, 62, 236, 194, 229, + 63, 107, 237, 134, 236, 194, 182, 107, 135, 229, 50, 236, 194, 135, 229, + 51, 107, 237, 134, 236, 194, 135, 229, 51, 239, 113, 236, 194, 226, 63, + 236, 194, 227, 3, 236, 194, 233, 128, 248, 49, 245, 225, 246, 209, 226, + 106, 233, 180, 252, 126, 233, 180, 226, 106, 250, 223, 104, 252, 126, + 250, 223, 104, 226, 106, 226, 100, 229, 104, 104, 252, 126, 226, 100, + 229, 104, 104, 63, 226, 89, 252, 207, 231, 140, 2, 251, 106, 228, 31, + 247, 23, 255, 44, 250, 220, 247, 255, 239, 227, 14, 32, 234, 200, 14, 32, + 228, 56, 106, 245, 116, 14, 32, 228, 56, 106, 226, 255, 14, 32, 247, 233, + 106, 226, 255, 14, 32, 247, 233, 106, 226, 92, 14, 32, 247, 224, 14, 32, + 255, 37, 14, 32, 252, 215, 14, 32, 253, 62, 14, 32, 169, 227, 98, 14, 32, + 237, 171, 247, 90, 14, 32, 61, 227, 98, 14, 32, 211, 247, 90, 14, 32, + 252, 3, 231, 194, 14, 32, 229, 86, 234, 10, 14, 32, 229, 86, 240, 16, 14, + 32, 250, 126, 237, 163, 247, 185, 14, 32, 250, 28, 251, 18, 118, 14, 32, + 250, 28, 251, 18, 113, 14, 32, 250, 28, 251, 18, 166, 14, 32, 250, 28, + 251, 18, 158, 14, 32, 235, 157, 255, 37, 14, 32, 227, 132, 240, 74, 14, + 32, 247, 233, 106, 226, 93, 252, 142, 14, 32, 252, 24, 14, 32, 247, 233, + 106, 236, 227, 14, 32, 227, 249, 14, 32, 247, 185, 14, 32, 247, 56, 229, + 173, 14, 32, 245, 224, 229, 173, 14, 32, 231, 240, 229, 173, 14, 32, 225, + 126, 229, 173, 14, 32, 228, 145, 14, 32, 250, 54, 252, 145, 98, 234, 44, + 252, 118, 14, 32, 235, 144, 14, 32, 250, 55, 211, 113, 14, 32, 227, 250, + 211, 113, 234, 92, 88, 234, 92, 251, 200, 234, 92, 246, 252, 234, 92, + 239, 223, 246, 252, 234, 92, 252, 213, 252, 89, 234, 92, 252, 122, 226, + 170, 234, 92, 252, 113, 253, 39, 244, 62, 234, 92, 254, 194, 106, 251, + 180, 234, 92, 250, 130, 234, 92, 250, 214, 255, 39, 234, 198, 234, 92, + 47, 253, 63, 33, 21, 118, 33, 21, 113, 33, 21, 166, 33, 21, 158, 33, 21, + 173, 33, 21, 183, 33, 21, 194, 33, 21, 187, 33, 21, 192, 33, 65, 227, 23, + 33, 65, 247, 252, 33, 65, 225, 218, 33, 65, 226, 209, 33, 65, 246, 238, + 33, 65, 247, 67, 33, 65, 228, 212, 33, 65, 229, 161, 33, 65, 248, 18, 33, + 65, 235, 59, 33, 65, 225, 216, 93, 21, 118, 93, 21, 113, 93, 21, 166, 93, + 21, 158, 93, 21, 173, 93, 21, 183, 93, 21, 194, 93, 21, 187, 93, 21, 192, + 93, 65, 227, 23, 93, 65, 247, 252, 93, 65, 225, 218, 93, 65, 226, 209, + 93, 65, 246, 238, 93, 65, 247, 67, 93, 65, 228, 212, 93, 65, 229, 161, + 93, 65, 248, 18, 93, 65, 235, 59, 93, 65, 225, 216, 21, 168, 246, 218, + 228, 38, 21, 135, 246, 218, 228, 38, 21, 152, 246, 218, 228, 38, 21, 246, + 243, 246, 218, 228, 38, 21, 247, 37, 246, 218, 228, 38, 21, 228, 217, + 246, 218, 228, 38, 21, 229, 163, 246, 218, 228, 38, 21, 248, 20, 246, + 218, 228, 38, 21, 235, 61, 246, 218, 228, 38, 65, 227, 24, 246, 218, 228, + 38, 65, 247, 253, 246, 218, 228, 38, 65, 225, 219, 246, 218, 228, 38, 65, + 226, 210, 246, 218, 228, 38, 65, 246, 239, 246, 218, 228, 38, 65, 247, + 68, 246, 218, 228, 38, 65, 228, 213, 246, 218, 228, 38, 65, 229, 162, + 246, 218, 228, 38, 65, 248, 19, 246, 218, 228, 38, 65, 235, 60, 246, 218, + 228, 38, 65, 225, 217, 246, 218, 228, 38, 93, 7, 3, 1, 57, 93, 7, 3, 1, + 254, 27, 93, 7, 3, 1, 252, 44, 93, 7, 3, 1, 222, 222, 93, 7, 3, 1, 72, + 93, 7, 3, 1, 247, 130, 93, 7, 3, 1, 214, 93, 7, 3, 1, 212, 93, 7, 3, 1, + 74, 93, 7, 3, 1, 239, 182, 93, 7, 3, 1, 239, 76, 93, 7, 3, 1, 149, 93, 7, + 3, 1, 185, 93, 7, 3, 1, 199, 93, 7, 3, 1, 73, 93, 7, 3, 1, 233, 244, 93, + 7, 3, 1, 232, 139, 93, 7, 3, 1, 146, 93, 7, 3, 1, 193, 93, 7, 3, 1, 227, + 109, 93, 7, 3, 1, 66, 93, 7, 3, 1, 196, 93, 7, 3, 1, 224, 174, 93, 7, 3, + 1, 224, 73, 93, 7, 3, 1, 224, 25, 93, 7, 3, 1, 223, 119, 33, 7, 6, 1, 57, + 33, 7, 6, 1, 254, 27, 33, 7, 6, 1, 252, 44, 33, 7, 6, 1, 222, 222, 33, 7, + 6, 1, 72, 33, 7, 6, 1, 247, 130, 33, 7, 6, 1, 214, 33, 7, 6, 1, 212, 33, + 7, 6, 1, 74, 33, 7, 6, 1, 239, 182, 33, 7, 6, 1, 239, 76, 33, 7, 6, 1, + 149, 33, 7, 6, 1, 185, 33, 7, 6, 1, 199, 33, 7, 6, 1, 73, 33, 7, 6, 1, + 233, 244, 33, 7, 6, 1, 232, 139, 33, 7, 6, 1, 146, 33, 7, 6, 1, 193, 33, + 7, 6, 1, 227, 109, 33, 7, 6, 1, 66, 33, 7, 6, 1, 196, 33, 7, 6, 1, 224, + 174, 33, 7, 6, 1, 224, 73, 33, 7, 6, 1, 224, 25, 33, 7, 6, 1, 223, 119, + 33, 7, 3, 1, 57, 33, 7, 3, 1, 254, 27, 33, 7, 3, 1, 252, 44, 33, 7, 3, 1, + 222, 222, 33, 7, 3, 1, 72, 33, 7, 3, 1, 247, 130, 33, 7, 3, 1, 214, 33, + 7, 3, 1, 212, 33, 7, 3, 1, 74, 33, 7, 3, 1, 239, 182, 33, 7, 3, 1, 239, + 76, 33, 7, 3, 1, 149, 33, 7, 3, 1, 185, 33, 7, 3, 1, 199, 33, 7, 3, 1, + 73, 33, 7, 3, 1, 233, 244, 33, 7, 3, 1, 232, 139, 33, 7, 3, 1, 146, 33, + 7, 3, 1, 193, 33, 7, 3, 1, 227, 109, 33, 7, 3, 1, 66, 33, 7, 3, 1, 196, + 33, 7, 3, 1, 224, 174, 33, 7, 3, 1, 224, 73, 33, 7, 3, 1, 224, 25, 33, 7, + 3, 1, 223, 119, 33, 21, 223, 89, 235, 157, 33, 65, 247, 252, 235, 157, + 33, 65, 225, 218, 235, 157, 33, 65, 226, 209, 235, 157, 33, 65, 246, 238, + 235, 157, 33, 65, 247, 67, 235, 157, 33, 65, 228, 212, 235, 157, 33, 65, + 229, 161, 235, 157, 33, 65, 248, 18, 235, 157, 33, 65, 235, 59, 235, 157, + 33, 65, 225, 216, 47, 33, 21, 118, 47, 33, 21, 113, 47, 33, 21, 166, 47, + 33, 21, 158, 47, 33, 21, 173, 47, 33, 21, 183, 47, 33, 21, 194, 47, 33, + 21, 187, 47, 33, 21, 192, 47, 33, 65, 227, 23, 235, 157, 33, 21, 223, 89, + 77, 80, 157, 244, 212, 77, 80, 112, 244, 212, 77, 80, 157, 225, 30, 77, + 80, 112, 225, 30, 77, 80, 157, 226, 66, 250, 131, 244, 212, 77, 80, 112, + 226, 66, 250, 131, 244, 212, 77, 80, 157, 226, 66, 250, 131, 225, 30, 77, + 80, 112, 226, 66, 250, 131, 225, 30, 77, 80, 157, 232, 78, 250, 131, 244, + 212, 77, 80, 112, 232, 78, 250, 131, 244, 212, 77, 80, 157, 232, 78, 250, + 131, 225, 30, 77, 80, 112, 232, 78, 250, 131, 225, 30, 77, 80, 157, 103, + 22, 231, 153, 77, 80, 103, 157, 22, 41, 245, 110, 77, 80, 103, 112, 22, + 41, 237, 184, 77, 80, 112, 103, 22, 231, 153, 77, 80, 157, 103, 22, 237, + 237, 77, 80, 103, 157, 22, 42, 245, 110, 77, 80, 103, 112, 22, 42, 237, + 184, 77, 80, 112, 103, 22, 237, 237, 77, 80, 157, 99, 22, 231, 153, 77, + 80, 99, 157, 22, 41, 245, 110, 77, 80, 99, 112, 22, 41, 237, 184, 77, 80, + 112, 99, 22, 231, 153, 77, 80, 157, 99, 22, 237, 237, 77, 80, 99, 157, + 22, 42, 245, 110, 77, 80, 99, 112, 22, 42, 237, 184, 77, 80, 112, 99, 22, + 237, 237, 77, 80, 157, 61, 22, 231, 153, 77, 80, 61, 157, 22, 41, 245, + 110, 77, 80, 99, 112, 22, 41, 103, 237, 184, 77, 80, 103, 112, 22, 41, + 99, 237, 184, 77, 80, 61, 112, 22, 41, 237, 184, 77, 80, 103, 157, 22, + 41, 99, 245, 110, 77, 80, 99, 157, 22, 41, 103, 245, 110, 77, 80, 112, + 61, 22, 231, 153, 77, 80, 157, 61, 22, 237, 237, 77, 80, 61, 157, 22, 42, + 245, 110, 77, 80, 99, 112, 22, 42, 103, 237, 184, 77, 80, 103, 112, 22, + 42, 99, 237, 184, 77, 80, 61, 112, 22, 42, 237, 184, 77, 80, 103, 157, + 22, 42, 99, 245, 110, 77, 80, 99, 157, 22, 42, 103, 245, 110, 77, 80, + 112, 61, 22, 237, 237, 77, 80, 157, 103, 22, 244, 212, 77, 80, 42, 112, + 22, 41, 103, 237, 184, 77, 80, 41, 112, 22, 42, 103, 237, 184, 77, 80, + 103, 157, 22, 169, 245, 110, 77, 80, 103, 112, 22, 169, 237, 184, 77, 80, + 41, 157, 22, 42, 103, 245, 110, 77, 80, 42, 157, 22, 41, 103, 245, 110, + 77, 80, 112, 103, 22, 244, 212, 77, 80, 157, 99, 22, 244, 212, 77, 80, + 42, 112, 22, 41, 99, 237, 184, 77, 80, 41, 112, 22, 42, 99, 237, 184, 77, + 80, 99, 157, 22, 169, 245, 110, 77, 80, 99, 112, 22, 169, 237, 184, 77, + 80, 41, 157, 22, 42, 99, 245, 110, 77, 80, 42, 157, 22, 41, 99, 245, 110, + 77, 80, 112, 99, 22, 244, 212, 77, 80, 157, 61, 22, 244, 212, 77, 80, 42, + 112, 22, 41, 61, 237, 184, 77, 80, 41, 112, 22, 42, 61, 237, 184, 77, 80, + 61, 157, 22, 169, 245, 110, 77, 80, 99, 112, 22, 103, 169, 237, 184, 77, + 80, 103, 112, 22, 99, 169, 237, 184, 77, 80, 61, 112, 22, 169, 237, 184, + 77, 80, 42, 99, 112, 22, 41, 103, 237, 184, 77, 80, 41, 99, 112, 22, 42, + 103, 237, 184, 77, 80, 42, 103, 112, 22, 41, 99, 237, 184, 77, 80, 41, + 103, 112, 22, 42, 99, 237, 184, 77, 80, 103, 157, 22, 99, 169, 245, 110, + 77, 80, 99, 157, 22, 103, 169, 245, 110, 77, 80, 41, 157, 22, 42, 61, + 245, 110, 77, 80, 42, 157, 22, 41, 61, 245, 110, 77, 80, 112, 61, 22, + 244, 212, 77, 80, 157, 47, 250, 131, 244, 212, 77, 80, 112, 47, 250, 131, + 244, 212, 77, 80, 157, 47, 250, 131, 225, 30, 77, 80, 112, 47, 250, 131, + 225, 30, 77, 80, 47, 244, 212, 77, 80, 47, 225, 30, 77, 80, 103, 228, + 241, 22, 41, 248, 133, 77, 80, 103, 47, 22, 41, 228, 240, 77, 80, 47, + 103, 22, 231, 153, 77, 80, 103, 228, 241, 22, 42, 248, 133, 77, 80, 103, + 47, 22, 42, 228, 240, 77, 80, 47, 103, 22, 237, 237, 77, 80, 99, 228, + 241, 22, 41, 248, 133, 77, 80, 99, 47, 22, 41, 228, 240, 77, 80, 47, 99, + 22, 231, 153, 77, 80, 99, 228, 241, 22, 42, 248, 133, 77, 80, 99, 47, 22, + 42, 228, 240, 77, 80, 47, 99, 22, 237, 237, 77, 80, 61, 228, 241, 22, 41, + 248, 133, 77, 80, 61, 47, 22, 41, 228, 240, 77, 80, 47, 61, 22, 231, 153, + 77, 80, 61, 228, 241, 22, 42, 248, 133, 77, 80, 61, 47, 22, 42, 228, 240, + 77, 80, 47, 61, 22, 237, 237, 77, 80, 103, 228, 241, 22, 169, 248, 133, + 77, 80, 103, 47, 22, 169, 228, 240, 77, 80, 47, 103, 22, 244, 212, 77, + 80, 99, 228, 241, 22, 169, 248, 133, 77, 80, 99, 47, 22, 169, 228, 240, + 77, 80, 47, 99, 22, 244, 212, 77, 80, 61, 228, 241, 22, 169, 248, 133, + 77, 80, 61, 47, 22, 169, 228, 240, 77, 80, 47, 61, 22, 244, 212, 77, 80, + 157, 254, 123, 103, 22, 231, 153, 77, 80, 157, 254, 123, 103, 22, 237, + 237, 77, 80, 157, 254, 123, 99, 22, 237, 237, 77, 80, 157, 254, 123, 99, + 22, 231, 153, 77, 80, 157, 250, 1, 225, 113, 41, 180, 203, 237, 237, 77, + 80, 157, 250, 1, 225, 113, 42, 180, 203, 231, 153, 77, 80, 157, 250, 1, + 250, 243, 77, 80, 157, 237, 237, 77, 80, 157, 225, 116, 77, 80, 157, 231, + 153, 77, 80, 157, 248, 127, 77, 80, 112, 237, 237, 77, 80, 112, 225, 116, + 77, 80, 112, 231, 153, 77, 80, 112, 248, 127, 77, 80, 157, 42, 22, 112, + 231, 153, 77, 80, 157, 99, 22, 112, 248, 127, 77, 80, 112, 42, 22, 157, + 231, 153, 77, 80, 112, 99, 22, 157, 248, 127, 225, 113, 132, 252, 142, + 203, 168, 248, 17, 252, 142, 203, 168, 232, 77, 252, 142, 203, 152, 248, + 15, 252, 142, 203, 132, 252, 142, 203, 247, 37, 248, 15, 252, 142, 203, + 152, 232, 75, 252, 142, 203, 229, 163, 248, 15, 252, 142, 246, 218, 252, + 142, 42, 229, 163, 248, 15, 252, 142, 42, 152, 232, 75, 252, 142, 42, + 247, 37, 248, 15, 252, 142, 42, 132, 252, 142, 42, 152, 248, 15, 252, + 142, 42, 168, 232, 77, 252, 142, 42, 168, 248, 17, 252, 142, 41, 132, + 252, 142, 157, 229, 136, 236, 228, 229, 136, 250, 136, 229, 136, 225, + 113, 168, 248, 17, 252, 142, 41, 168, 248, 17, 252, 142, 232, 80, 203, + 237, 237, 232, 80, 203, 231, 153, 232, 80, 225, 113, 237, 237, 232, 80, + 225, 113, 42, 22, 203, 42, 22, 203, 231, 153, 232, 80, 225, 113, 42, 22, + 203, 231, 153, 232, 80, 225, 113, 42, 22, 225, 113, 41, 22, 203, 237, + 237, 232, 80, 225, 113, 42, 22, 225, 113, 41, 22, 203, 231, 153, 232, 80, + 225, 113, 231, 153, 232, 80, 225, 113, 41, 22, 203, 237, 237, 232, 80, + 225, 113, 41, 22, 203, 42, 22, 203, 231, 153, 86, 228, 120, 63, 228, 120, + 63, 37, 2, 231, 102, 251, 9, 63, 37, 251, 27, 86, 3, 228, 120, 37, 2, + 169, 247, 54, 37, 2, 61, 247, 54, 37, 2, 234, 22, 250, 239, 247, 54, 37, + 2, 225, 113, 42, 180, 203, 41, 247, 54, 37, 2, 225, 113, 41, 180, 203, + 42, 247, 54, 37, 2, 250, 1, 250, 239, 247, 54, 86, 3, 228, 120, 63, 3, + 228, 120, 86, 231, 236, 63, 231, 236, 86, 61, 231, 236, 63, 61, 231, 236, + 86, 233, 183, 63, 233, 183, 86, 225, 115, 226, 78, 63, 225, 115, 226, 78, + 86, 225, 115, 3, 226, 78, 63, 225, 115, 3, 226, 78, 86, 231, 151, 226, + 78, 63, 231, 151, 226, 78, 86, 231, 151, 3, 226, 78, 63, 231, 151, 3, + 226, 78, 86, 231, 151, 232, 252, 63, 231, 151, 232, 252, 86, 248, 126, + 226, 78, 63, 248, 126, 226, 78, 86, 248, 126, 3, 226, 78, 63, 248, 126, + 3, 226, 78, 86, 237, 235, 226, 78, 63, 237, 235, 226, 78, 86, 237, 235, + 3, 226, 78, 63, 237, 235, 3, 226, 78, 86, 237, 235, 232, 252, 63, 237, + 235, 232, 252, 86, 249, 250, 63, 249, 250, 63, 249, 251, 251, 27, 86, 3, + 249, 250, 247, 42, 237, 113, 63, 251, 106, 248, 138, 251, 106, 251, 107, + 2, 61, 247, 54, 252, 81, 86, 251, 106, 251, 107, 2, 42, 132, 252, 150, + 251, 107, 2, 41, 132, 252, 150, 251, 107, 2, 203, 132, 252, 150, 251, + 107, 2, 225, 113, 132, 252, 150, 251, 107, 2, 225, 113, 41, 232, 80, 252, + 150, 251, 107, 2, 254, 217, 252, 64, 225, 113, 42, 232, 80, 252, 150, 42, + 132, 86, 251, 106, 41, 132, 86, 251, 106, 239, 224, 252, 83, 239, 224, + 63, 251, 106, 225, 113, 132, 239, 224, 63, 251, 106, 203, 132, 239, 224, + 63, 251, 106, 225, 113, 42, 232, 80, 251, 104, 254, 122, 225, 113, 41, + 232, 80, 251, 104, 254, 122, 203, 41, 232, 80, 251, 104, 254, 122, 203, + 42, 232, 80, 251, 104, 254, 122, 225, 113, 132, 251, 106, 203, 132, 251, + 106, 86, 203, 41, 226, 78, 86, 203, 42, 226, 78, 86, 225, 113, 42, 226, + 78, 86, 225, 113, 41, 226, 78, 63, 252, 83, 37, 2, 42, 132, 252, 150, 37, + 2, 41, 132, 252, 150, 37, 2, 225, 113, 42, 250, 1, 132, 252, 150, 37, 2, + 203, 41, 250, 1, 132, 252, 150, 63, 37, 2, 61, 252, 160, 237, 170, 63, + 225, 115, 226, 79, 2, 249, 140, 225, 115, 226, 79, 2, 42, 132, 252, 150, + 225, 115, 226, 79, 2, 41, 132, 252, 150, 238, 9, 251, 106, 63, 37, 2, + 225, 113, 42, 232, 79, 63, 37, 2, 203, 42, 232, 79, 63, 37, 2, 203, 41, + 232, 79, 63, 37, 2, 225, 113, 41, 232, 79, 63, 251, 107, 2, 225, 113, 42, + 232, 79, 63, 251, 107, 2, 203, 42, 232, 79, 63, 251, 107, 2, 203, 41, + 232, 79, 63, 251, 107, 2, 225, 113, 41, 232, 79, 225, 113, 42, 226, 78, + 225, 113, 41, 226, 78, 203, 42, 226, 78, 63, 236, 228, 228, 120, 86, 236, + 228, 228, 120, 63, 236, 228, 3, 228, 120, 86, 236, 228, 3, 228, 120, 203, + 41, 226, 78, 86, 227, 228, 2, 231, 248, 251, 75, 225, 142, 228, 171, 251, + 57, 86, 228, 58, 63, 228, 58, 237, 183, 226, 184, 227, 227, 254, 83, 235, + 3, 250, 33, 235, 3, 251, 35, 234, 34, 86, 227, 28, 63, 227, 28, 253, 48, + 252, 118, 253, 48, 77, 2, 251, 180, 253, 48, 77, 2, 224, 73, 231, 5, 225, + 143, 2, 232, 10, 248, 113, 244, 158, 252, 194, 63, 229, 67, 233, 63, 86, + 229, 67, 233, 63, 229, 132, 200, 231, 106, 247, 16, 245, 115, 252, 83, + 86, 42, 232, 251, 240, 8, 86, 41, 232, 251, 240, 8, 63, 42, 232, 251, + 240, 8, 63, 99, 232, 251, 240, 8, 63, 41, 232, 251, 240, 8, 63, 103, 232, + 251, 240, 8, 228, 199, 22, 250, 242, 251, 252, 53, 232, 16, 53, 252, 166, + 53, 252, 35, 254, 177, 234, 23, 250, 243, 251, 170, 231, 182, 250, 244, + 106, 237, 121, 250, 244, 106, 239, 161, 228, 59, 22, 250, 247, 247, 107, + 98, 255, 23, 229, 134, 245, 150, 22, 229, 13, 233, 150, 98, 223, 193, + 223, 248, 226, 70, 32, 245, 112, 226, 70, 32, 238, 24, 226, 70, 32, 247, + 46, 226, 70, 32, 226, 185, 226, 70, 32, 224, 111, 226, 70, 32, 224, 151, + 226, 70, 32, 236, 74, 226, 70, 32, 248, 48, 224, 125, 106, 250, 18, 63, + 246, 221, 247, 125, 63, 228, 179, 247, 125, 86, 228, 179, 247, 125, 63, + 227, 228, 2, 231, 248, 247, 45, 232, 77, 236, 84, 238, 5, 232, 77, 236, + 84, 236, 209, 247, 83, 53, 248, 48, 237, 39, 53, 239, 89, 230, 239, 225, + 98, 235, 150, 233, 8, 254, 111, 227, 60, 246, 123, 252, 22, 237, 216, + 224, 214, 237, 191, 230, 220, 231, 17, 252, 13, 254, 134, 233, 31, 63, + 251, 175, 238, 189, 63, 251, 175, 232, 70, 63, 251, 175, 231, 112, 63, + 251, 175, 252, 159, 63, 251, 175, 238, 152, 63, 251, 175, 233, 159, 86, + 251, 175, 238, 189, 86, 251, 175, 232, 70, 86, 251, 175, 231, 112, 86, + 251, 175, 252, 159, 86, 251, 175, 238, 152, 86, 251, 175, 233, 159, 86, + 228, 143, 227, 239, 63, 245, 115, 227, 239, 63, 249, 251, 227, 239, 86, + 251, 74, 227, 239, 63, 228, 143, 227, 239, 86, 245, 115, 227, 239, 86, + 249, 251, 227, 239, 63, 251, 74, 227, 239, 244, 158, 228, 124, 232, 77, + 234, 238, 248, 17, 234, 238, 252, 236, 248, 17, 234, 235, 252, 236, 228, + 211, 234, 235, 236, 29, 247, 25, 53, 236, 29, 235, 224, 53, 236, 29, 229, + 124, 53, 224, 131, 151, 250, 243, 248, 45, 151, 250, 243, 225, 123, 231, + 232, 98, 231, 232, 14, 32, 225, 195, 233, 17, 231, 232, 14, 32, 225, 194, + 233, 17, 231, 232, 14, 32, 225, 193, 233, 17, 231, 232, 14, 32, 225, 192, + 233, 17, 231, 232, 14, 32, 225, 191, 233, 17, 231, 232, 14, 32, 225, 190, + 233, 17, 231, 232, 14, 32, 225, 189, 233, 17, 231, 232, 14, 32, 246, 121, + 237, 1, 86, 225, 123, 231, 232, 98, 231, 233, 233, 196, 98, 233, 174, + 233, 196, 98, 233, 116, 233, 196, 53, 224, 123, 98, 249, 244, 247, 124, + 249, 244, 247, 123, 249, 244, 247, 122, 249, 244, 247, 121, 249, 244, + 247, 120, 249, 244, 247, 119, 63, 251, 107, 2, 56, 231, 153, 63, 251, + 107, 2, 135, 249, 138, 86, 251, 107, 2, 63, 56, 231, 153, 86, 251, 107, + 2, 135, 63, 249, 138, 236, 92, 32, 223, 248, 236, 92, 32, 223, 192, 249, + 227, 32, 245, 232, 223, 248, 249, 227, 32, 237, 211, 223, 192, 249, 227, + 32, 237, 211, 223, 248, 249, 227, 32, 245, 232, 223, 192, 63, 247, 31, + 86, 247, 31, 245, 150, 22, 233, 65, 254, 188, 250, 241, 227, 188, 228, + 66, 106, 255, 14, 230, 229, 254, 226, 247, 12, 246, 130, 228, 66, 106, + 245, 95, 254, 59, 98, 247, 21, 234, 7, 63, 228, 58, 224, 161, 53, 201, + 224, 200, 53, 248, 130, 247, 83, 53, 248, 130, 237, 39, 53, 239, 232, + 247, 83, 22, 237, 39, 53, 237, 39, 22, 247, 83, 53, 237, 39, 2, 195, 53, + 237, 39, 2, 195, 22, 237, 39, 22, 247, 83, 53, 61, 237, 39, 2, 195, 53, + 169, 237, 39, 2, 195, 53, 236, 228, 63, 251, 106, 236, 228, 86, 251, 106, + 236, 228, 3, 63, 251, 106, 237, 12, 98, 249, 179, 98, 225, 122, 233, 173, + 98, 251, 64, 246, 214, 225, 95, 235, 146, 251, 207, 233, 225, 239, 95, + 224, 232, 251, 157, 86, 236, 85, 237, 180, 229, 155, 229, 183, 232, 63, + 229, 167, 63, 248, 117, 237, 35, 63, 248, 117, 238, 189, 86, 248, 117, + 237, 35, 86, 248, 117, 238, 189, 225, 113, 252, 146, 230, 221, 86, 230, + 221, 203, 252, 146, 230, 221, 63, 230, 221, 227, 29, 237, 141, 53, 227, + 69, 248, 115, 254, 244, 247, 218, 224, 227, 245, 146, 224, 85, 245, 146, + 203, 41, 233, 134, 233, 134, 225, 113, 41, 233, 134, 63, 235, 86, 86, + 235, 86, 251, 181, 76, 112, 251, 181, 76, 236, 52, 224, 73, 112, 236, 52, + 224, 73, 253, 48, 224, 73, 112, 253, 48, 224, 73, 234, 7, 19, 250, 243, + 112, 19, 250, 243, 234, 44, 251, 219, 250, 243, 112, 234, 44, 251, 219, + 250, 243, 7, 250, 243, 229, 135, 63, 7, 250, 243, 234, 7, 7, 250, 243, + 237, 37, 250, 243, 228, 59, 106, 250, 124, 246, 243, 227, 40, 254, 69, + 246, 243, 253, 49, 254, 69, 112, 246, 243, 253, 49, 254, 69, 246, 243, + 251, 72, 254, 69, 86, 246, 243, 232, 253, 228, 58, 63, 246, 243, 232, + 253, 228, 58, 228, 27, 234, 7, 63, 228, 58, 33, 63, 228, 58, 234, 44, + 251, 219, 86, 228, 58, 86, 251, 219, 63, 228, 58, 234, 7, 86, 228, 58, + 112, 234, 7, 86, 228, 58, 233, 36, 228, 58, 229, 135, 63, 228, 58, 112, + 254, 69, 234, 44, 251, 219, 254, 69, 248, 20, 228, 129, 254, 69, 248, 20, + 232, 253, 86, 228, 58, 248, 20, 232, 253, 233, 36, 228, 58, 228, 217, + 232, 253, 86, 228, 58, 248, 20, 232, 253, 231, 234, 86, 228, 58, 112, + 248, 20, 232, 253, 231, 234, 86, 228, 58, 225, 219, 232, 253, 86, 228, + 58, 228, 213, 232, 253, 254, 69, 227, 40, 254, 69, 234, 44, 251, 219, + 227, 40, 254, 69, 112, 227, 40, 254, 69, 228, 217, 233, 104, 86, 22, 63, + 247, 15, 86, 247, 15, 63, 247, 15, 248, 20, 233, 104, 234, 7, 86, 247, + 15, 33, 234, 44, 251, 219, 248, 20, 232, 253, 228, 58, 112, 227, 40, 233, + 36, 254, 69, 228, 172, 226, 166, 226, 73, 228, 172, 112, 251, 173, 228, + 172, 228, 142, 112, 228, 142, 253, 49, 254, 69, 248, 20, 227, 40, 232, + 192, 254, 69, 112, 248, 20, 227, 40, 232, 192, 254, 69, 229, 135, 63, + 251, 106, 203, 41, 248, 114, 63, 228, 120, 225, 113, 41, 248, 114, 63, + 228, 120, 203, 41, 229, 135, 63, 228, 120, 225, 113, 41, 229, 135, 63, + 228, 120, 86, 249, 251, 236, 121, 63, 224, 73, 157, 61, 125, 236, 228, + 61, 125, 112, 61, 125, 112, 228, 241, 209, 251, 55, 232, 57, 165, 234, + 25, 112, 228, 241, 251, 55, 232, 57, 165, 234, 25, 112, 47, 209, 251, 55, + 232, 57, 165, 234, 25, 112, 47, 251, 55, 232, 57, 165, 234, 25, 250, 217, + 228, 49, 233, 192, 5, 234, 25, 112, 247, 149, 165, 234, 25, 112, 245, + 115, 247, 149, 165, 234, 25, 112, 86, 245, 114, 231, 106, 112, 86, 245, + 115, 252, 83, 247, 16, 245, 114, 231, 106, 247, 16, 245, 115, 252, 83, + 236, 228, 42, 233, 181, 234, 25, 236, 228, 41, 233, 181, 234, 25, 236, + 228, 247, 22, 42, 233, 181, 234, 25, 236, 228, 247, 22, 41, 233, 181, + 234, 25, 236, 228, 237, 235, 254, 182, 252, 115, 234, 25, 236, 228, 231, + 151, 254, 182, 252, 115, 234, 25, 112, 237, 235, 254, 182, 232, 57, 165, + 234, 25, 112, 231, 151, 254, 182, 232, 57, 165, 234, 25, 112, 237, 235, + 254, 182, 252, 115, 234, 25, 112, 231, 151, 254, 182, 252, 115, 234, 25, + 157, 42, 226, 100, 229, 104, 252, 115, 234, 25, 157, 41, 226, 100, 229, + 104, 252, 115, 234, 25, 236, 228, 42, 250, 223, 252, 115, 234, 25, 236, + 228, 41, 250, 223, 252, 115, 234, 25, 249, 208, 235, 157, 33, 21, 118, + 249, 208, 235, 157, 33, 21, 113, 249, 208, 235, 157, 33, 21, 166, 249, + 208, 235, 157, 33, 21, 158, 249, 208, 235, 157, 33, 21, 173, 249, 208, + 235, 157, 33, 21, 183, 249, 208, 235, 157, 33, 21, 194, 249, 208, 235, + 157, 33, 21, 187, 249, 208, 235, 157, 33, 21, 192, 249, 208, 235, 157, + 33, 65, 227, 23, 249, 208, 33, 30, 21, 118, 249, 208, 33, 30, 21, 113, + 249, 208, 33, 30, 21, 166, 249, 208, 33, 30, 21, 158, 249, 208, 33, 30, + 21, 173, 249, 208, 33, 30, 21, 183, 249, 208, 33, 30, 21, 194, 249, 208, + 33, 30, 21, 187, 249, 208, 33, 30, 21, 192, 249, 208, 33, 30, 65, 227, + 23, 249, 208, 235, 157, 33, 30, 21, 118, 249, 208, 235, 157, 33, 30, 21, + 113, 249, 208, 235, 157, 33, 30, 21, 166, 249, 208, 235, 157, 33, 30, 21, + 158, 249, 208, 235, 157, 33, 30, 21, 173, 249, 208, 235, 157, 33, 30, 21, + 183, 249, 208, 235, 157, 33, 30, 21, 194, 249, 208, 235, 157, 33, 30, 21, + 187, 249, 208, 235, 157, 33, 30, 21, 192, 249, 208, 235, 157, 33, 30, 65, + 227, 23, 112, 224, 116, 81, 58, 112, 228, 152, 248, 45, 58, 112, 81, 58, + 112, 234, 245, 248, 45, 58, 248, 119, 232, 255, 81, 58, 112, 231, 103, + 81, 58, 226, 77, 81, 58, 112, 226, 77, 81, 58, 250, 129, 226, 77, 81, 58, + 112, 250, 129, 226, 77, 81, 58, 86, 81, 58, 226, 191, 226, 104, 81, 254, + 93, 226, 191, 252, 124, 81, 254, 93, 86, 81, 254, 93, 112, 86, 250, 217, + 248, 125, 22, 81, 58, 112, 86, 250, 217, 225, 106, 22, 81, 58, 228, 116, + 86, 81, 58, 112, 251, 43, 86, 81, 58, 231, 150, 63, 81, 58, 237, 234, 63, + 81, 58, 253, 65, 229, 135, 63, 81, 58, 246, 223, 229, 135, 63, 81, 58, + 112, 203, 231, 149, 63, 81, 58, 112, 225, 113, 231, 149, 63, 81, 58, 234, + 240, 203, 231, 149, 63, 81, 58, 234, 240, 225, 113, 231, 149, 63, 81, 58, + 33, 112, 63, 81, 58, 224, 120, 81, 58, 252, 149, 228, 152, 248, 45, 58, + 252, 149, 81, 58, 252, 149, 234, 245, 248, 45, 58, 112, 252, 149, 228, + 152, 248, 45, 58, 112, 252, 149, 81, 58, 112, 252, 149, 234, 245, 248, + 45, 58, 227, 42, 81, 58, 112, 227, 41, 81, 58, 224, 139, 81, 58, 112, + 224, 139, 81, 58, 234, 41, 81, 58, 152, 249, 218, 254, 181, 63, 226, 79, + 251, 27, 3, 63, 226, 78, 233, 114, 234, 44, 227, 251, 234, 44, 227, 217, + 42, 231, 34, 253, 59, 250, 52, 41, 231, 34, 253, 59, 250, 52, 145, 2, 56, + 239, 243, 231, 193, 228, 162, 232, 212, 227, 251, 227, 218, 232, 212, + 228, 161, 61, 253, 36, 2, 169, 82, 182, 249, 180, 63, 249, 251, 2, 251, + 217, 249, 140, 22, 2, 249, 140, 247, 254, 106, 234, 39, 225, 105, 203, + 41, 251, 11, 2, 249, 140, 225, 113, 42, 251, 11, 2, 249, 140, 42, 234, 9, + 239, 115, 41, 234, 9, 239, 115, 246, 218, 234, 9, 239, 115, 238, 9, 99, + 227, 96, 238, 9, 103, 227, 96, 42, 22, 41, 47, 225, 232, 42, 22, 41, 227, + 96, 42, 236, 55, 182, 41, 227, 96, 182, 42, 227, 96, 99, 227, 97, 2, 251, + 107, 46, 237, 114, 249, 185, 252, 55, 169, 231, 65, 63, 251, 42, 249, + 250, 63, 251, 42, 249, 251, 2, 117, 226, 172, 63, 251, 42, 249, 251, 2, + 81, 226, 172, 63, 37, 2, 117, 226, 172, 63, 37, 2, 81, 226, 172, 12, 42, + 63, 37, 104, 12, 41, 63, 37, 104, 12, 42, 254, 182, 104, 12, 41, 254, + 182, 104, 12, 42, 47, 254, 182, 104, 12, 41, 47, 254, 182, 104, 12, 42, + 63, 226, 100, 229, 104, 104, 12, 41, 63, 226, 100, 229, 104, 104, 12, 42, + 247, 22, 233, 180, 12, 41, 247, 22, 233, 180, 225, 106, 232, 78, 58, 248, + 125, 232, 78, 58, 254, 168, 246, 162, 251, 107, 58, 251, 84, 246, 162, + 251, 107, 58, 41, 67, 2, 33, 233, 10, 182, 117, 58, 182, 81, 58, 182, 42, + 41, 58, 182, 117, 47, 58, 182, 81, 47, 58, 182, 42, 41, 47, 58, 182, 117, + 67, 246, 224, 125, 182, 81, 67, 246, 224, 125, 182, 117, 47, 67, 246, + 224, 125, 182, 81, 47, 67, 246, 224, 125, 182, 81, 228, 115, 58, 39, 40, + 252, 144, 39, 40, 249, 137, 39, 40, 249, 9, 39, 40, 249, 136, 39, 40, + 248, 201, 39, 40, 249, 72, 39, 40, 249, 8, 39, 40, 249, 135, 39, 40, 248, + 169, 39, 40, 249, 40, 39, 40, 248, 232, 39, 40, 249, 103, 39, 40, 248, + 200, 39, 40, 249, 71, 39, 40, 249, 7, 39, 40, 249, 134, 39, 40, 248, 153, + 39, 40, 249, 24, 39, 40, 248, 216, 39, 40, 249, 87, 39, 40, 248, 184, 39, + 40, 249, 55, 39, 40, 248, 247, 39, 40, 249, 118, 39, 40, 248, 168, 39, + 40, 249, 39, 39, 40, 248, 231, 39, 40, 249, 102, 39, 40, 248, 199, 39, + 40, 249, 70, 39, 40, 249, 6, 39, 40, 249, 133, 39, 40, 248, 145, 39, 40, + 249, 16, 39, 40, 248, 208, 39, 40, 249, 79, 39, 40, 248, 176, 39, 40, + 249, 47, 39, 40, 248, 239, 39, 40, 249, 110, 39, 40, 248, 160, 39, 40, + 249, 31, 39, 40, 248, 223, 39, 40, 249, 94, 39, 40, 248, 191, 39, 40, + 249, 62, 39, 40, 248, 254, 39, 40, 249, 125, 39, 40, 248, 152, 39, 40, + 249, 23, 39, 40, 248, 215, 39, 40, 249, 86, 39, 40, 248, 183, 39, 40, + 249, 54, 39, 40, 248, 246, 39, 40, 249, 117, 39, 40, 248, 167, 39, 40, + 249, 38, 39, 40, 248, 230, 39, 40, 249, 101, 39, 40, 248, 198, 39, 40, + 249, 69, 39, 40, 249, 5, 39, 40, 249, 132, 39, 40, 248, 141, 39, 40, 249, + 12, 39, 40, 248, 204, 39, 40, 249, 75, 39, 40, 248, 172, 39, 40, 249, 43, + 39, 40, 248, 235, 39, 40, 249, 106, 39, 40, 248, 156, 39, 40, 249, 27, + 39, 40, 248, 219, 39, 40, 249, 90, 39, 40, 248, 187, 39, 40, 249, 58, 39, + 40, 248, 250, 39, 40, 249, 121, 39, 40, 248, 148, 39, 40, 249, 19, 39, + 40, 248, 211, 39, 40, 249, 82, 39, 40, 248, 179, 39, 40, 249, 50, 39, 40, + 248, 242, 39, 40, 249, 113, 39, 40, 248, 163, 39, 40, 249, 34, 39, 40, + 248, 226, 39, 40, 249, 97, 39, 40, 248, 194, 39, 40, 249, 65, 39, 40, + 249, 1, 39, 40, 249, 128, 39, 40, 248, 144, 39, 40, 249, 15, 39, 40, 248, + 207, 39, 40, 249, 78, 39, 40, 248, 175, 39, 40, 249, 46, 39, 40, 248, + 238, 39, 40, 249, 109, 39, 40, 248, 159, 39, 40, 249, 30, 39, 40, 248, + 222, 39, 40, 249, 93, 39, 40, 248, 190, 39, 40, 249, 61, 39, 40, 248, + 253, 39, 40, 249, 124, 39, 40, 248, 151, 39, 40, 249, 22, 39, 40, 248, + 214, 39, 40, 249, 85, 39, 40, 248, 182, 39, 40, 249, 53, 39, 40, 248, + 245, 39, 40, 249, 116, 39, 40, 248, 166, 39, 40, 249, 37, 39, 40, 248, + 229, 39, 40, 249, 100, 39, 40, 248, 197, 39, 40, 249, 68, 39, 40, 249, 4, + 39, 40, 249, 131, 39, 40, 248, 139, 39, 40, 249, 10, 39, 40, 248, 202, + 39, 40, 249, 73, 39, 40, 248, 170, 39, 40, 249, 41, 39, 40, 248, 233, 39, + 40, 249, 104, 39, 40, 248, 154, 39, 40, 249, 25, 39, 40, 248, 217, 39, + 40, 249, 88, 39, 40, 248, 185, 39, 40, 249, 56, 39, 40, 248, 248, 39, 40, + 249, 119, 39, 40, 248, 146, 39, 40, 249, 17, 39, 40, 248, 209, 39, 40, + 249, 80, 39, 40, 248, 177, 39, 40, 249, 48, 39, 40, 248, 240, 39, 40, + 249, 111, 39, 40, 248, 161, 39, 40, 249, 32, 39, 40, 248, 224, 39, 40, + 249, 95, 39, 40, 248, 192, 39, 40, 249, 63, 39, 40, 248, 255, 39, 40, + 249, 126, 39, 40, 248, 142, 39, 40, 249, 13, 39, 40, 248, 205, 39, 40, + 249, 76, 39, 40, 248, 173, 39, 40, 249, 44, 39, 40, 248, 236, 39, 40, + 249, 107, 39, 40, 248, 157, 39, 40, 249, 28, 39, 40, 248, 220, 39, 40, + 249, 91, 39, 40, 248, 188, 39, 40, 249, 59, 39, 40, 248, 251, 39, 40, + 249, 122, 39, 40, 248, 149, 39, 40, 249, 20, 39, 40, 248, 212, 39, 40, + 249, 83, 39, 40, 248, 180, 39, 40, 249, 51, 39, 40, 248, 243, 39, 40, + 249, 114, 39, 40, 248, 164, 39, 40, 249, 35, 39, 40, 248, 227, 39, 40, + 249, 98, 39, 40, 248, 195, 39, 40, 249, 66, 39, 40, 249, 2, 39, 40, 249, + 129, 39, 40, 248, 140, 39, 40, 249, 11, 39, 40, 248, 203, 39, 40, 249, + 74, 39, 40, 248, 171, 39, 40, 249, 42, 39, 40, 248, 234, 39, 40, 249, + 105, 39, 40, 248, 155, 39, 40, 249, 26, 39, 40, 248, 218, 39, 40, 249, + 89, 39, 40, 248, 186, 39, 40, 249, 57, 39, 40, 248, 249, 39, 40, 249, + 120, 39, 40, 248, 147, 39, 40, 249, 18, 39, 40, 248, 210, 39, 40, 249, + 81, 39, 40, 248, 178, 39, 40, 249, 49, 39, 40, 248, 241, 39, 40, 249, + 112, 39, 40, 248, 162, 39, 40, 249, 33, 39, 40, 248, 225, 39, 40, 249, + 96, 39, 40, 248, 193, 39, 40, 249, 64, 39, 40, 249, 0, 39, 40, 249, 127, + 39, 40, 248, 143, 39, 40, 249, 14, 39, 40, 248, 206, 39, 40, 249, 77, 39, + 40, 248, 174, 39, 40, 249, 45, 39, 40, 248, 237, 39, 40, 249, 108, 39, + 40, 248, 158, 39, 40, 249, 29, 39, 40, 248, 221, 39, 40, 249, 92, 39, 40, + 248, 189, 39, 40, 249, 60, 39, 40, 248, 252, 39, 40, 249, 123, 39, 40, + 248, 150, 39, 40, 249, 21, 39, 40, 248, 213, 39, 40, 249, 84, 39, 40, + 248, 181, 39, 40, 249, 52, 39, 40, 248, 244, 39, 40, 249, 115, 39, 40, + 248, 165, 39, 40, 249, 36, 39, 40, 248, 228, 39, 40, 249, 99, 39, 40, + 248, 196, 39, 40, 249, 67, 39, 40, 249, 3, 39, 40, 249, 130, 81, 225, + 203, 67, 2, 61, 82, 81, 225, 203, 67, 2, 47, 61, 82, 117, 47, 67, 2, 61, + 82, 81, 47, 67, 2, 61, 82, 42, 41, 47, 67, 2, 61, 82, 81, 225, 203, 67, + 246, 224, 125, 117, 47, 67, 246, 224, 125, 81, 47, 67, 246, 224, 125, + 248, 125, 67, 2, 169, 82, 225, 106, 67, 2, 169, 82, 225, 106, 226, 66, + 58, 248, 125, 226, 66, 58, 117, 47, 250, 131, 58, 81, 47, 250, 131, 58, + 117, 226, 66, 250, 131, 58, 81, 226, 66, 250, 131, 58, 81, 225, 203, 226, + 66, 250, 131, 58, 81, 67, 2, 248, 138, 228, 48, 225, 106, 67, 180, 125, + 248, 125, 67, 180, 125, 81, 67, 2, 227, 90, 2, 61, 82, 81, 67, 2, 227, + 90, 2, 47, 61, 82, 81, 225, 203, 67, 2, 227, 89, 81, 225, 203, 67, 2, + 227, 90, 2, 61, 82, 81, 225, 203, 67, 2, 227, 90, 2, 47, 61, 82, 117, + 254, 95, 81, 254, 95, 117, 47, 254, 95, 81, 47, 254, 95, 117, 67, 180, + 86, 249, 250, 81, 67, 180, 86, 249, 250, 117, 67, 246, 224, 253, 36, 180, + 86, 249, 250, 81, 67, 246, 224, 253, 36, 180, 86, 249, 250, 234, 245, + 224, 131, 22, 228, 152, 248, 45, 58, 234, 245, 248, 45, 22, 228, 152, + 224, 131, 58, 234, 245, 224, 131, 67, 2, 88, 234, 245, 248, 45, 67, 2, + 88, 228, 152, 248, 45, 67, 2, 88, 228, 152, 224, 131, 67, 2, 88, 234, + 245, 224, 131, 67, 22, 234, 245, 248, 45, 58, 234, 245, 248, 45, 67, 22, + 228, 152, 248, 45, 58, 228, 152, 248, 45, 67, 22, 228, 152, 224, 131, 58, + 228, 152, 224, 131, 67, 22, 234, 245, 224, 131, 58, 231, 135, 250, 1, + 250, 238, 247, 113, 250, 0, 247, 113, 250, 1, 250, 238, 231, 135, 250, 0, + 228, 152, 248, 45, 67, 250, 238, 234, 245, 248, 45, 58, 234, 245, 248, + 45, 67, 250, 238, 228, 152, 248, 45, 58, 247, 113, 250, 1, 250, 238, 234, + 245, 248, 45, 58, 231, 135, 250, 1, 250, 238, 228, 152, 248, 45, 58, 234, + 245, 248, 45, 67, 250, 238, 234, 245, 224, 131, 58, 234, 245, 224, 131, + 67, 250, 238, 234, 245, 248, 45, 58, 224, 148, 67, 232, 251, 249, 199, + 231, 153, 67, 232, 251, 81, 226, 232, 250, 216, 225, 105, 67, 232, 251, + 81, 226, 232, 250, 216, 248, 124, 67, 232, 251, 248, 125, 226, 232, 250, + 216, 237, 230, 67, 232, 251, 248, 125, 226, 232, 250, 216, 231, 145, 231, + 148, 254, 123, 251, 84, 58, 237, 233, 254, 123, 254, 168, 58, 226, 106, + 254, 123, 254, 168, 58, 252, 126, 254, 123, 254, 168, 58, 226, 106, 254, + 123, 251, 84, 67, 2, 236, 120, 226, 106, 254, 123, 254, 168, 67, 2, 233, + 10, 203, 41, 229, 188, 251, 84, 58, 203, 42, 229, 188, 254, 168, 58, 254, + 168, 251, 82, 251, 107, 58, 251, 84, 251, 82, 251, 107, 58, 81, 67, 64, + 229, 63, 117, 58, 117, 67, 64, 229, 63, 81, 58, 229, 63, 81, 67, 64, 117, + 58, 81, 67, 2, 79, 51, 117, 67, 2, 79, 51, 81, 67, 226, 188, 224, 73, 42, + 41, 67, 226, 188, 3, 251, 106, 225, 106, 225, 203, 67, 246, 224, 3, 251, + 106, 42, 171, 99, 41, 171, 103, 245, 135, 42, 171, 103, 41, 171, 99, 245, + 135, 99, 171, 41, 103, 171, 42, 245, 135, 99, 171, 42, 103, 171, 41, 245, + 135, 42, 171, 99, 41, 171, 99, 245, 135, 99, 171, 41, 103, 171, 41, 245, + 135, 42, 171, 103, 41, 171, 103, 245, 135, 99, 171, 42, 103, 171, 42, + 245, 135, 117, 245, 136, 2, 171, 99, 180, 125, 81, 245, 136, 2, 171, 99, + 180, 125, 225, 106, 245, 136, 2, 171, 41, 180, 125, 248, 125, 245, 136, + 2, 171, 41, 180, 125, 117, 245, 136, 2, 171, 103, 180, 125, 81, 245, 136, + 2, 171, 103, 180, 125, 225, 106, 245, 136, 2, 171, 42, 180, 125, 248, + 125, 245, 136, 2, 171, 42, 180, 125, 117, 245, 136, 2, 171, 99, 246, 224, + 125, 81, 245, 136, 2, 171, 99, 246, 224, 125, 225, 106, 245, 136, 2, 171, + 41, 246, 224, 125, 248, 125, 245, 136, 2, 171, 41, 246, 224, 125, 117, + 245, 136, 2, 171, 103, 246, 224, 125, 81, 245, 136, 2, 171, 103, 246, + 224, 125, 225, 106, 245, 136, 2, 171, 42, 246, 224, 125, 248, 125, 245, + 136, 2, 171, 42, 246, 224, 125, 117, 245, 136, 2, 171, 99, 64, 117, 245, + 136, 2, 171, 248, 127, 225, 106, 245, 136, 2, 171, 42, 252, 202, 225, + 106, 245, 136, 2, 171, 231, 153, 81, 245, 136, 2, 171, 99, 64, 81, 245, + 136, 2, 171, 248, 127, 248, 125, 245, 136, 2, 171, 42, 252, 202, 248, + 125, 245, 136, 2, 171, 231, 153, 117, 245, 136, 2, 171, 99, 64, 81, 245, + 136, 2, 171, 225, 116, 117, 245, 136, 2, 171, 103, 64, 81, 245, 136, 2, + 171, 248, 127, 81, 245, 136, 2, 171, 99, 64, 117, 245, 136, 2, 171, 225, + 116, 81, 245, 136, 2, 171, 103, 64, 117, 245, 136, 2, 171, 248, 127, 117, + 245, 136, 2, 171, 99, 64, 182, 250, 130, 117, 245, 136, 2, 171, 103, 252, + 214, 182, 250, 130, 81, 245, 136, 2, 171, 99, 64, 182, 250, 130, 81, 245, + 136, 2, 171, 103, 252, 214, 182, 250, 130, 225, 106, 245, 136, 2, 171, + 42, 252, 202, 248, 125, 245, 136, 2, 171, 231, 153, 248, 125, 245, 136, + 2, 171, 42, 252, 202, 225, 106, 245, 136, 2, 171, 231, 153, 41, 47, 67, + 2, 231, 102, 245, 118, 247, 204, 5, 64, 81, 58, 226, 159, 234, 38, 64, + 81, 58, 117, 67, 64, 226, 159, 234, 37, 81, 67, 64, 226, 159, 234, 37, + 81, 67, 64, 254, 210, 105, 96, 237, 213, 64, 117, 58, 117, 67, 226, 188, + 237, 212, 245, 231, 64, 81, 58, 227, 252, 64, 81, 58, 117, 67, 226, 188, + 227, 251, 227, 218, 64, 117, 58, 42, 247, 44, 227, 89, 41, 247, 44, 227, + 89, 99, 247, 44, 227, 89, 103, 247, 44, 227, 89, 226, 66, 61, 253, 36, + 250, 52, 223, 120, 150, 228, 127, 223, 120, 150, 225, 196, 251, 61, 42, + 63, 250, 223, 104, 41, 63, 250, 223, 104, 42, 63, 233, 180, 41, 63, 233, + 180, 223, 120, 150, 42, 240, 29, 104, 223, 120, 150, 41, 240, 29, 104, + 223, 120, 150, 42, 252, 168, 104, 223, 120, 150, 41, 252, 168, 104, 42, + 37, 252, 115, 2, 225, 133, 41, 37, 252, 115, 2, 225, 133, 42, 37, 252, + 115, 2, 226, 173, 240, 17, 226, 106, 251, 10, 41, 37, 252, 115, 2, 226, + 173, 240, 17, 252, 126, 251, 10, 42, 37, 252, 115, 2, 226, 173, 240, 17, + 252, 126, 251, 10, 41, 37, 252, 115, 2, 226, 173, 240, 17, 226, 106, 251, + 10, 42, 254, 182, 252, 115, 2, 249, 140, 41, 254, 182, 252, 115, 2, 249, + 140, 42, 254, 123, 237, 213, 104, 41, 254, 123, 245, 231, 104, 47, 42, + 254, 123, 245, 231, 104, 47, 41, 254, 123, 237, 213, 104, 42, 86, 226, + 100, 229, 104, 104, 41, 86, 226, 100, 229, 104, 104, 248, 138, 247, 80, + 61, 223, 38, 237, 170, 236, 232, 254, 182, 234, 39, 237, 237, 41, 254, + 182, 225, 54, 2, 228, 120, 236, 232, 41, 254, 182, 2, 249, 140, 254, 182, + 2, 231, 35, 239, 243, 255, 33, 254, 181, 228, 137, 254, 182, 234, 39, + 237, 237, 228, 137, 254, 182, 234, 39, 225, 116, 209, 254, 181, 200, 254, + 181, 254, 182, 2, 225, 133, 200, 254, 182, 2, 225, 133, 234, 97, 254, + 182, 234, 39, 225, 116, 234, 97, 254, 182, 234, 39, 248, 127, 236, 232, + 254, 182, 2, 234, 44, 254, 105, 247, 230, 240, 17, 67, 232, 251, 99, 22, + 231, 153, 236, 232, 254, 182, 2, 234, 44, 254, 105, 247, 230, 240, 17, + 67, 232, 251, 99, 22, 237, 237, 236, 232, 254, 182, 2, 234, 44, 254, 105, + 247, 230, 240, 17, 67, 232, 251, 103, 22, 231, 153, 236, 232, 254, 182, + 2, 234, 44, 254, 105, 247, 230, 240, 17, 67, 232, 251, 103, 22, 237, 237, + 236, 232, 254, 182, 2, 234, 44, 254, 105, 247, 230, 240, 17, 67, 232, + 251, 41, 22, 225, 116, 236, 232, 254, 182, 2, 234, 44, 254, 105, 247, + 230, 240, 17, 67, 232, 251, 42, 22, 225, 116, 236, 232, 254, 182, 2, 234, + 44, 254, 105, 247, 230, 240, 17, 67, 232, 251, 41, 22, 248, 127, 236, + 232, 254, 182, 2, 234, 44, 254, 105, 247, 230, 240, 17, 67, 232, 251, 42, + 22, 248, 127, 200, 247, 241, 229, 164, 247, 241, 229, 165, 2, 234, 5, + 247, 241, 229, 165, 2, 3, 251, 107, 46, 247, 241, 229, 165, 2, 41, 67, + 46, 247, 241, 229, 165, 2, 42, 67, 46, 251, 107, 2, 169, 125, 33, 61, + 125, 33, 233, 184, 33, 231, 193, 228, 161, 33, 233, 114, 251, 107, 249, + 185, 252, 55, 169, 253, 36, 22, 226, 106, 132, 249, 185, 252, 55, 61, + 125, 251, 107, 2, 227, 220, 224, 73, 33, 254, 167, 249, 181, 53, 99, 67, + 226, 188, 251, 106, 33, 63, 252, 83, 33, 252, 83, 33, 237, 212, 33, 245, + 230, 251, 107, 2, 3, 251, 107, 180, 226, 240, 231, 153, 251, 107, 2, 135, + 169, 228, 11, 180, 226, 240, 231, 153, 228, 119, 231, 135, 250, 1, 228, + 194, 228, 119, 247, 113, 250, 1, 228, 194, 228, 119, 254, 69, 228, 119, + 3, 251, 106, 228, 119, 228, 120, 135, 239, 114, 228, 117, 226, 79, 2, 56, + 46, 226, 79, 2, 225, 133, 231, 35, 240, 17, 226, 78, 226, 79, 2, 229, + 171, 254, 63, 252, 125, 41, 226, 79, 64, 42, 226, 78, 42, 226, 79, 252, + 202, 61, 125, 61, 253, 36, 252, 202, 41, 226, 78, 252, 120, 2, 42, 132, + 252, 150, 252, 120, 2, 41, 132, 252, 150, 86, 252, 119, 24, 2, 42, 132, + 252, 150, 24, 2, 41, 132, 252, 150, 63, 244, 154, 86, 244, 154, 42, 224, + 114, 247, 80, 41, 224, 114, 247, 80, 42, 47, 224, 114, 247, 80, 41, 47, + 224, 114, 247, 80, 240, 13, 240, 3, 226, 171, 107, 240, 3, 240, 4, 235, + 159, 2, 61, 125, 248, 132, 236, 55, 37, 2, 251, 21, 234, 8, 240, 11, 254, + 86, 229, 39, 232, 200, 247, 204, 5, 22, 228, 196, 233, 184, 247, 204, 5, + 22, 228, 196, 233, 185, 2, 226, 159, 46, 244, 63, 180, 22, 228, 196, 233, + 184, 246, 18, 228, 57, 226, 229, 248, 126, 226, 79, 2, 42, 132, 252, 150, + 248, 126, 226, 79, 2, 41, 132, 252, 150, 86, 249, 251, 2, 103, 58, 86, + 237, 113, 63, 251, 107, 2, 103, 58, 86, 251, 107, 2, 103, 58, 247, 191, + 63, 228, 120, 247, 191, 86, 228, 120, 247, 191, 63, 249, 250, 247, 191, + 86, 249, 250, 247, 191, 63, 251, 106, 247, 191, 86, 251, 106, 231, 64, + 231, 193, 228, 162, 234, 37, 228, 162, 2, 234, 5, 231, 193, 228, 162, 2, + 169, 82, 252, 173, 228, 161, 252, 173, 231, 193, 228, 161, 47, 233, 10, + 226, 66, 233, 10, 237, 235, 250, 217, 254, 182, 104, 231, 151, 250, 217, + 254, 182, 104, 226, 152, 236, 118, 236, 4, 33, 56, 234, 37, 236, 4, 33, + 79, 234, 37, 236, 4, 33, 24, 234, 37, 236, 4, 225, 128, 234, 38, 2, 249, + 140, 236, 4, 225, 128, 234, 38, 2, 233, 10, 236, 4, 37, 239, 228, 234, + 37, 236, 4, 37, 225, 128, 234, 37, 135, 237, 138, 22, 234, 37, 135, 237, + 138, 145, 234, 37, 236, 4, 24, 234, 37, 236, 98, 135, 227, 233, 227, 231, + 2, 239, 239, 232, 78, 239, 240, 234, 37, 247, 48, 233, 176, 239, 239, + 239, 240, 2, 47, 82, 239, 240, 254, 38, 2, 228, 194, 251, 103, 246, 215, + 254, 168, 239, 237, 237, 171, 239, 238, 2, 231, 235, 233, 164, 254, 102, + 232, 247, 237, 171, 239, 238, 2, 229, 188, 233, 164, 254, 102, 232, 247, + 237, 171, 239, 238, 190, 240, 14, 226, 240, 232, 247, 239, 240, 254, 102, + 102, 232, 255, 234, 37, 232, 73, 239, 240, 234, 37, 239, 240, 2, 117, 67, + 2, 88, 239, 240, 2, 24, 53, 239, 240, 2, 239, 227, 239, 240, 2, 225, 127, + 239, 240, 2, 234, 5, 239, 240, 2, 225, 133, 239, 115, 238, 9, 42, 226, + 79, 234, 37, 223, 120, 150, 230, 225, 251, 45, 223, 120, 150, 230, 225, + 233, 34, 223, 120, 150, 230, 225, 232, 197, 79, 5, 2, 3, 251, 107, 46, + 79, 5, 2, 251, 102, 255, 42, 46, 79, 5, 2, 226, 159, 46, 79, 5, 2, 56, + 51, 79, 5, 2, 226, 159, 51, 79, 5, 2, 227, 253, 113, 79, 5, 2, 86, 226, + 78, 236, 121, 5, 2, 251, 55, 46, 236, 121, 5, 2, 56, 51, 236, 121, 5, 2, + 247, 113, 249, 138, 236, 121, 5, 2, 231, 135, 249, 138, 79, 5, 240, 17, + 42, 132, 251, 106, 79, 5, 240, 17, 41, 132, 251, 106, 225, 41, 145, 250, + 244, 232, 200, 236, 52, 5, 2, 56, 46, 236, 52, 5, 2, 225, 133, 229, 185, + 232, 201, 2, 252, 126, 251, 81, 228, 182, 232, 200, 236, 52, 5, 240, 17, + 42, 132, 251, 106, 236, 52, 5, 240, 17, 41, 132, 251, 106, 33, 236, 52, + 5, 2, 251, 102, 255, 41, 236, 52, 5, 240, 17, 47, 251, 106, 33, 249, 181, + 53, 79, 5, 240, 17, 226, 78, 236, 121, 5, 240, 17, 226, 78, 236, 52, 5, + 240, 17, 226, 78, 239, 234, 232, 200, 231, 146, 239, 234, 232, 200, 223, + 120, 150, 231, 220, 251, 45, 254, 198, 145, 251, 15, 239, 228, 2, 249, + 140, 225, 128, 2, 236, 121, 53, 225, 128, 2, 234, 5, 239, 228, 2, 234, 5, + 239, 228, 2, 237, 138, 254, 186, 225, 128, 2, 237, 138, 234, 31, 225, + 128, 64, 239, 227, 239, 228, 64, 225, 127, 225, 128, 64, 253, 36, 64, + 239, 227, 239, 228, 64, 253, 36, 64, 225, 127, 225, 128, 252, 202, 22, + 239, 114, 2, 225, 127, 239, 228, 252, 202, 22, 239, 114, 2, 239, 227, + 251, 82, 225, 128, 2, 229, 170, 251, 82, 239, 228, 2, 229, 170, 47, 37, + 239, 227, 47, 37, 225, 127, 251, 82, 225, 128, 2, 229, 171, 22, 228, 182, + 232, 200, 237, 138, 22, 2, 56, 46, 237, 138, 145, 2, 56, 46, 47, 237, + 138, 254, 186, 47, 237, 138, 234, 31, 135, 239, 229, 237, 138, 254, 186, + 135, 239, 229, 237, 138, 234, 31, 228, 188, 238, 9, 234, 31, 228, 188, + 238, 9, 254, 186, 237, 138, 145, 234, 3, 237, 138, 254, 186, 237, 138, + 22, 2, 236, 154, 228, 48, 237, 138, 145, 2, 236, 154, 228, 48, 237, 138, + 22, 2, 169, 250, 130, 237, 138, 145, 2, 169, 250, 130, 237, 138, 22, 2, + 47, 234, 5, 237, 138, 22, 2, 225, 133, 237, 138, 22, 2, 47, 225, 133, 3, + 225, 39, 2, 225, 133, 237, 138, 145, 2, 47, 234, 5, 237, 138, 145, 2, 47, + 225, 133, 223, 120, 150, 249, 149, 254, 163, 223, 120, 150, 232, 2, 254, + 163, 247, 204, 5, 2, 56, 51, 244, 63, 2, 56, 46, 226, 66, 169, 253, 36, + 2, 47, 61, 82, 226, 66, 169, 253, 36, 2, 226, 66, 61, 82, 226, 159, 234, + 38, 2, 56, 46, 226, 159, 234, 38, 2, 231, 135, 249, 138, 228, 247, 236, + 121, 228, 246, 251, 39, 2, 56, 46, 247, 204, 2, 254, 69, 254, 210, 105, + 180, 2, 251, 102, 255, 41, 254, 137, 105, 145, 105, 96, 247, 204, 5, 64, + 79, 53, 79, 5, 64, 247, 204, 53, 247, 204, 5, 64, 226, 159, 234, 37, 47, + 251, 62, 247, 205, 135, 251, 34, 247, 204, 229, 1, 152, 251, 34, 247, + 204, 229, 1, 247, 204, 5, 2, 135, 197, 64, 22, 135, 197, 51, 247, 200, 2, + 246, 243, 197, 46, 237, 213, 2, 251, 107, 239, 243, 245, 231, 2, 251, + 107, 239, 243, 237, 213, 2, 232, 69, 165, 46, 245, 231, 2, 232, 69, 165, + 46, 237, 213, 145, 228, 196, 105, 96, 245, 231, 145, 228, 196, 105, 96, + 237, 213, 145, 228, 196, 105, 180, 2, 56, 239, 243, 245, 231, 145, 228, + 196, 105, 180, 2, 56, 239, 243, 237, 213, 145, 228, 196, 105, 180, 2, 56, + 46, 245, 231, 145, 228, 196, 105, 180, 2, 56, 46, 237, 213, 145, 228, + 196, 105, 180, 2, 56, 64, 231, 153, 245, 231, 145, 228, 196, 105, 180, 2, + 56, 64, 237, 237, 237, 213, 145, 254, 138, 245, 231, 145, 254, 138, 237, + 213, 22, 228, 239, 190, 105, 96, 245, 231, 22, 228, 239, 190, 105, 96, + 237, 213, 22, 190, 254, 138, 245, 231, 22, 190, 254, 138, 237, 213, 64, + 248, 131, 105, 64, 245, 230, 245, 231, 64, 248, 131, 105, 64, 237, 212, + 237, 213, 64, 228, 247, 145, 247, 205, 245, 231, 64, 228, 247, 145, 247, + 205, 237, 213, 64, 228, 247, 64, 245, 230, 245, 231, 64, 228, 247, 64, + 237, 212, 237, 213, 64, 245, 231, 64, 248, 131, 247, 205, 245, 231, 64, + 237, 213, 64, 248, 131, 247, 205, 237, 213, 64, 228, 196, 105, 64, 245, + 231, 64, 228, 196, 247, 205, 245, 231, 64, 228, 196, 105, 64, 237, 213, + 64, 228, 196, 247, 205, 228, 196, 105, 180, 145, 237, 212, 228, 196, 105, + 180, 145, 245, 230, 228, 196, 105, 180, 145, 237, 213, 2, 56, 239, 243, + 228, 196, 105, 180, 145, 245, 231, 2, 56, 239, 243, 248, 131, 105, 180, + 145, 237, 212, 248, 131, 105, 180, 145, 245, 230, 248, 131, 228, 196, + 105, 180, 145, 237, 212, 248, 131, 228, 196, 105, 180, 145, 245, 230, + 228, 247, 145, 237, 212, 228, 247, 145, 245, 230, 228, 247, 64, 237, 213, + 64, 247, 204, 53, 228, 247, 64, 245, 231, 64, 247, 204, 53, 47, 235, 149, + 237, 212, 47, 235, 149, 245, 230, 47, 235, 149, 237, 213, 2, 225, 133, + 245, 231, 234, 3, 237, 212, 245, 231, 252, 202, 237, 212, 237, 213, 251, + 82, 252, 55, 250, 218, 245, 231, 251, 82, 252, 55, 250, 218, 237, 213, + 251, 82, 252, 55, 250, 219, 64, 228, 196, 247, 205, 245, 231, 251, 82, + 252, 55, 250, 219, 64, 228, 196, 247, 205, 228, 183, 226, 243, 238, 8, + 226, 243, 228, 183, 226, 244, 145, 105, 96, 238, 8, 226, 244, 145, 105, + 96, 247, 204, 5, 2, 252, 78, 46, 232, 214, 64, 228, 239, 247, 204, 53, + 227, 244, 64, 228, 239, 247, 204, 53, 232, 214, 64, 228, 239, 190, 105, + 96, 227, 244, 64, 228, 239, 190, 105, 96, 232, 214, 64, 247, 204, 53, + 227, 244, 64, 247, 204, 53, 232, 214, 64, 190, 105, 96, 227, 244, 64, + 190, 105, 96, 232, 214, 64, 254, 210, 105, 96, 227, 244, 64, 254, 210, + 105, 96, 232, 214, 64, 190, 254, 210, 105, 96, 227, 244, 64, 190, 254, + 210, 105, 96, 47, 232, 213, 47, 227, 243, 227, 252, 2, 249, 140, 227, + 218, 2, 249, 140, 227, 252, 2, 79, 5, 51, 227, 218, 2, 79, 5, 51, 227, + 252, 2, 236, 52, 5, 51, 227, 218, 2, 236, 52, 5, 51, 227, 252, 106, 145, + 105, 180, 2, 56, 46, 227, 218, 106, 145, 105, 180, 2, 56, 46, 227, 252, + 106, 64, 247, 204, 53, 227, 218, 106, 64, 247, 204, 53, 227, 252, 106, + 64, 226, 159, 234, 37, 227, 218, 106, 64, 226, 159, 234, 37, 227, 252, + 106, 64, 254, 210, 105, 96, 227, 218, 106, 64, 254, 210, 105, 96, 227, + 252, 106, 64, 190, 105, 96, 227, 218, 106, 64, 190, 105, 96, 37, 42, 234, + 44, 77, 234, 37, 37, 41, 234, 44, 77, 234, 37, 251, 82, 227, 251, 251, + 82, 227, 217, 251, 82, 227, 252, 145, 105, 96, 251, 82, 227, 218, 145, + 105, 96, 227, 252, 64, 227, 217, 227, 218, 64, 227, 251, 227, 252, 64, + 227, 251, 227, 218, 64, 227, 217, 227, 218, 252, 202, 227, 251, 227, 218, + 252, 202, 22, 239, 114, 252, 55, 250, 131, 2, 227, 251, 247, 254, 106, + 234, 39, 248, 124, 233, 29, 2, 227, 38, 226, 105, 226, 90, 239, 227, 246, + 250, 234, 254, 229, 63, 42, 227, 96, 229, 63, 103, 227, 96, 229, 63, 99, + 227, 96, 233, 115, 2, 193, 61, 253, 36, 226, 66, 41, 225, 232, 47, 61, + 253, 36, 42, 225, 232, 61, 253, 36, 47, 42, 225, 232, 47, 61, 253, 36, + 47, 42, 225, 232, 182, 250, 131, 246, 224, 42, 236, 214, 106, 47, 225, + 30, 229, 63, 103, 227, 97, 2, 234, 5, 229, 63, 99, 227, 97, 2, 225, 133, + 229, 63, 99, 227, 97, 64, 229, 63, 103, 227, 96, 47, 103, 227, 96, 47, + 99, 227, 96, 47, 195, 190, 53, 200, 47, 195, 190, 53, 249, 154, 190, 249, + 187, 2, 200, 235, 158, 228, 194, 61, 237, 171, 2, 251, 107, 46, 61, 237, + 171, 2, 251, 107, 51, 103, 227, 97, 2, 251, 107, 51, 233, 185, 2, 169, + 82, 233, 185, 2, 226, 159, 234, 37, 226, 66, 61, 253, 36, 252, 170, 231, + 221, 226, 66, 61, 253, 36, 2, 169, 82, 226, 66, 251, 62, 234, 37, 226, + 66, 235, 149, 237, 212, 226, 66, 235, 149, 245, 230, 248, 131, 228, 196, + 237, 213, 145, 105, 96, 248, 131, 228, 196, 245, 231, 145, 105, 96, 226, + 66, 228, 162, 252, 170, 231, 221, 238, 9, 226, 66, 61, 253, 36, 234, 37, + 47, 228, 162, 234, 37, 63, 61, 125, 236, 4, 63, 61, 125, 234, 245, 248, + 45, 63, 58, 234, 245, 224, 131, 63, 58, 228, 152, 248, 45, 63, 58, 228, + 152, 224, 131, 63, 58, 42, 41, 63, 58, 117, 86, 58, 225, 106, 86, 58, + 248, 125, 86, 58, 234, 245, 248, 45, 86, 58, 234, 245, 224, 131, 86, 58, + 228, 152, 248, 45, 86, 58, 228, 152, 224, 131, 86, 58, 42, 41, 86, 58, + 99, 103, 86, 58, 81, 67, 2, 226, 151, 248, 124, 81, 67, 2, 226, 151, 225, + 105, 117, 67, 2, 226, 151, 248, 124, 117, 67, 2, 226, 151, 225, 105, 37, + 2, 226, 106, 132, 252, 150, 37, 2, 252, 126, 132, 252, 150, 37, 2, 225, + 113, 41, 250, 1, 132, 252, 150, 37, 2, 203, 42, 250, 1, 132, 252, 150, + 249, 251, 2, 42, 132, 252, 150, 249, 251, 2, 41, 132, 252, 150, 249, 251, + 2, 226, 106, 132, 252, 150, 249, 251, 2, 252, 126, 132, 252, 150, 248, + 138, 228, 120, 86, 238, 9, 228, 120, 63, 238, 9, 228, 120, 86, 224, 234, + 3, 228, 120, 63, 224, 234, 3, 228, 120, 86, 233, 129, 63, 233, 129, 63, + 245, 86, 86, 245, 86, 169, 86, 245, 86, 86, 238, 9, 251, 106, 86, 236, + 228, 249, 250, 63, 236, 228, 249, 250, 86, 236, 228, 237, 113, 63, 236, + 228, 237, 113, 86, 3, 249, 250, 86, 3, 237, 113, 63, 3, 237, 113, 86, + 169, 247, 250, 63, 169, 247, 250, 86, 61, 247, 250, 63, 61, 247, 250, 42, + 67, 2, 3, 251, 106, 152, 117, 254, 92, 42, 67, 2, 33, 233, 10, 182, 117, + 228, 115, 58, 117, 225, 203, 67, 2, 61, 82, 117, 225, 203, 67, 2, 47, 61, + 82, 117, 225, 203, 67, 246, 224, 125, 117, 225, 203, 226, 66, 250, 131, + 58, 117, 67, 2, 248, 138, 228, 48, 117, 67, 2, 227, 90, 2, 61, 82, 117, + 67, 2, 227, 90, 2, 47, 61, 82, 117, 225, 203, 67, 2, 227, 89, 117, 225, + 203, 67, 2, 227, 90, 2, 61, 82, 117, 225, 203, 67, 2, 227, 90, 2, 47, 61, + 82, 117, 67, 226, 188, 224, 73, 224, 148, 67, 232, 251, 249, 199, 237, + 237, 247, 204, 5, 64, 117, 58, 231, 193, 226, 159, 234, 38, 64, 117, 58, + 117, 67, 64, 231, 193, 254, 210, 105, 96, 81, 67, 226, 188, 245, 230, 81, + 67, 226, 188, 227, 217, 117, 232, 78, 58, 81, 232, 78, 58, 231, 193, 226, + 159, 234, 38, 64, 81, 58, 81, 67, 64, 231, 193, 254, 210, 105, 96, 226, + 159, 234, 38, 64, 117, 58, 117, 67, 64, 254, 210, 105, 96, 117, 67, 64, + 231, 193, 226, 159, 234, 37, 81, 67, 64, 231, 193, 226, 159, 234, 37, 63, + 236, 228, 228, 58, 86, 3, 228, 58, 63, 3, 228, 58, 86, 231, 151, 233, + 129, 63, 231, 151, 233, 129, 115, 6, 1, 254, 28, 115, 6, 1, 252, 86, 115, + 6, 1, 225, 40, 115, 6, 1, 246, 19, 115, 6, 1, 249, 156, 115, 6, 1, 223, + 209, 115, 6, 1, 223, 71, 115, 6, 1, 248, 67, 115, 6, 1, 223, 94, 115, 6, + 1, 239, 186, 115, 6, 1, 59, 239, 186, 115, 6, 1, 74, 115, 6, 1, 249, 174, + 115, 6, 1, 239, 51, 115, 6, 1, 237, 150, 115, 6, 1, 236, 8, 115, 6, 1, + 235, 227, 115, 6, 1, 234, 54, 115, 6, 1, 232, 249, 115, 6, 1, 231, 134, + 115, 6, 1, 228, 187, 115, 6, 1, 225, 223, 115, 6, 1, 225, 149, 115, 6, 1, + 246, 226, 115, 6, 1, 245, 92, 115, 6, 1, 234, 14, 115, 6, 1, 233, 151, + 115, 6, 1, 229, 46, 115, 6, 1, 226, 29, 115, 6, 1, 251, 142, 115, 6, 1, + 229, 146, 115, 6, 1, 223, 213, 115, 6, 1, 223, 215, 115, 6, 1, 223, 237, + 115, 6, 1, 228, 135, 154, 115, 6, 1, 223, 158, 115, 6, 1, 3, 223, 139, + 115, 6, 1, 3, 223, 140, 2, 227, 89, 115, 6, 1, 223, 183, 115, 6, 1, 239, + 214, 3, 223, 139, 115, 6, 1, 252, 173, 223, 139, 115, 6, 1, 239, 214, + 252, 173, 223, 139, 115, 6, 1, 247, 38, 115, 6, 1, 239, 184, 115, 6, 1, + 229, 45, 115, 6, 1, 226, 58, 57, 115, 6, 1, 238, 0, 236, 8, 115, 3, 1, + 254, 28, 115, 3, 1, 252, 86, 115, 3, 1, 225, 40, 115, 3, 1, 246, 19, 115, + 3, 1, 249, 156, 115, 3, 1, 223, 209, 115, 3, 1, 223, 71, 115, 3, 1, 248, + 67, 115, 3, 1, 223, 94, 115, 3, 1, 239, 186, 115, 3, 1, 59, 239, 186, + 115, 3, 1, 74, 115, 3, 1, 249, 174, 115, 3, 1, 239, 51, 115, 3, 1, 237, + 150, 115, 3, 1, 236, 8, 115, 3, 1, 235, 227, 115, 3, 1, 234, 54, 115, 3, + 1, 232, 249, 115, 3, 1, 231, 134, 115, 3, 1, 228, 187, 115, 3, 1, 225, + 223, 115, 3, 1, 225, 149, 115, 3, 1, 246, 226, 115, 3, 1, 245, 92, 115, + 3, 1, 234, 14, 115, 3, 1, 233, 151, 115, 3, 1, 229, 46, 115, 3, 1, 226, + 29, 115, 3, 1, 251, 142, 115, 3, 1, 229, 146, 115, 3, 1, 223, 213, 115, + 3, 1, 223, 215, 115, 3, 1, 223, 237, 115, 3, 1, 228, 135, 154, 115, 3, 1, + 223, 158, 115, 3, 1, 3, 223, 139, 115, 3, 1, 3, 223, 140, 2, 227, 89, + 115, 3, 1, 223, 183, 115, 3, 1, 239, 214, 3, 223, 139, 115, 3, 1, 252, + 173, 223, 139, 115, 3, 1, 239, 214, 252, 173, 223, 139, 115, 3, 1, 247, + 38, 115, 3, 1, 239, 184, 115, 3, 1, 229, 45, 115, 3, 1, 226, 58, 57, 115, + 3, 1, 238, 0, 236, 8, 7, 6, 1, 238, 47, 2, 47, 125, 7, 3, 1, 238, 47, 2, + 47, 125, 7, 6, 1, 238, 47, 2, 236, 154, 205, 7, 6, 1, 233, 245, 2, 82, 7, + 6, 1, 232, 27, 2, 227, 89, 7, 3, 1, 102, 2, 82, 7, 3, 1, 227, 110, 2, + 250, 1, 82, 7, 6, 1, 245, 172, 2, 250, 34, 7, 3, 1, 245, 172, 2, 250, 34, + 7, 6, 1, 239, 77, 2, 250, 34, 7, 3, 1, 239, 77, 2, 250, 34, 7, 6, 1, 223, + 120, 2, 250, 34, 7, 3, 1, 223, 120, 2, 250, 34, 7, 6, 1, 254, 205, 7, 6, + 1, 237, 69, 2, 88, 7, 6, 1, 209, 57, 7, 3, 1, 225, 65, 2, 41, 88, 7, 6, + 1, 224, 175, 2, 88, 7, 3, 1, 224, 175, 2, 88, 7, 3, 1, 225, 65, 2, 250, + 224, 7, 6, 1, 132, 212, 7, 3, 1, 132, 212, 7, 3, 1, 227, 87, 233, 87, 7, + 3, 1, 161, 2, 234, 241, 7, 3, 1, 209, 232, 27, 2, 227, 89, 7, 3, 1, 130, + 2, 184, 231, 140, 239, 243, 7, 1, 3, 6, 209, 72, 7, 227, 253, 3, 1, 239, + 182, 52, 1, 6, 196, 70, 6, 1, 254, 222, 70, 3, 1, 254, 222, 70, 6, 1, + 224, 226, 70, 3, 1, 224, 226, 70, 6, 1, 246, 169, 70, 3, 1, 246, 169, 70, + 6, 1, 250, 162, 70, 3, 1, 250, 162, 70, 6, 1, 248, 21, 70, 3, 1, 248, 21, + 70, 6, 1, 228, 156, 70, 3, 1, 228, 156, 70, 6, 1, 223, 103, 70, 3, 1, + 223, 103, 70, 6, 1, 245, 130, 70, 3, 1, 245, 130, 70, 6, 1, 226, 222, 70, + 3, 1, 226, 222, 70, 6, 1, 244, 72, 70, 3, 1, 244, 72, 70, 6, 1, 239, 40, + 70, 3, 1, 239, 40, 70, 6, 1, 237, 254, 70, 3, 1, 237, 254, 70, 6, 1, 236, + 157, 70, 3, 1, 236, 157, 70, 6, 1, 235, 89, 70, 3, 1, 235, 89, 70, 6, 1, + 238, 111, 70, 3, 1, 238, 111, 70, 6, 1, 73, 70, 3, 1, 73, 70, 6, 1, 233, + 69, 70, 3, 1, 233, 69, 70, 6, 1, 231, 122, 70, 3, 1, 231, 122, 70, 6, 1, + 228, 249, 70, 3, 1, 228, 249, 70, 6, 1, 227, 61, 70, 3, 1, 227, 61, 70, + 6, 1, 225, 170, 70, 3, 1, 225, 170, 70, 6, 1, 247, 70, 70, 3, 1, 247, 70, + 70, 6, 1, 238, 212, 70, 3, 1, 238, 212, 70, 6, 1, 232, 183, 70, 3, 1, + 232, 183, 70, 6, 1, 234, 48, 70, 3, 1, 234, 48, 70, 6, 1, 249, 255, 254, + 227, 70, 3, 1, 249, 255, 254, 227, 70, 6, 1, 84, 70, 254, 248, 70, 3, 1, + 84, 70, 254, 248, 70, 6, 1, 250, 236, 248, 21, 70, 3, 1, 250, 236, 248, + 21, 70, 6, 1, 249, 255, 239, 40, 70, 3, 1, 249, 255, 239, 40, 70, 6, 1, + 249, 255, 235, 89, 70, 3, 1, 249, 255, 235, 89, 70, 6, 1, 250, 236, 235, + 89, 70, 3, 1, 250, 236, 235, 89, 70, 6, 1, 84, 70, 234, 48, 70, 3, 1, 84, + 70, 234, 48, 70, 6, 1, 230, 255, 70, 3, 1, 230, 255, 70, 6, 1, 250, 241, + 229, 106, 70, 3, 1, 250, 241, 229, 106, 70, 6, 1, 84, 70, 229, 106, 70, + 3, 1, 84, 70, 229, 106, 70, 6, 1, 84, 70, 247, 183, 70, 3, 1, 84, 70, + 247, 183, 70, 6, 1, 254, 236, 238, 215, 70, 3, 1, 254, 236, 238, 215, 70, + 6, 1, 249, 255, 244, 213, 70, 3, 1, 249, 255, 244, 213, 70, 6, 1, 84, 70, + 244, 213, 70, 3, 1, 84, 70, 244, 213, 70, 6, 1, 84, 70, 154, 70, 3, 1, + 84, 70, 154, 70, 6, 1, 238, 46, 154, 70, 3, 1, 238, 46, 154, 70, 6, 1, + 84, 70, 245, 106, 70, 3, 1, 84, 70, 245, 106, 70, 6, 1, 84, 70, 245, 132, + 70, 3, 1, 84, 70, 245, 132, 70, 6, 1, 84, 70, 246, 165, 70, 3, 1, 84, 70, + 246, 165, 70, 6, 1, 84, 70, 249, 177, 70, 3, 1, 84, 70, 249, 177, 70, 6, + 1, 84, 70, 229, 80, 70, 3, 1, 84, 70, 229, 80, 70, 6, 1, 84, 234, 204, + 229, 80, 70, 3, 1, 84, 234, 204, 229, 80, 70, 6, 1, 84, 234, 204, 235, + 114, 70, 3, 1, 84, 234, 204, 235, 114, 70, 6, 1, 84, 234, 204, 234, 163, + 70, 3, 1, 84, 234, 204, 234, 163, 70, 6, 1, 84, 234, 204, 224, 149, 70, + 3, 1, 84, 234, 204, 224, 149, 70, 14, 239, 56, 70, 14, 236, 158, 231, + 122, 70, 14, 233, 70, 231, 122, 70, 14, 228, 54, 70, 14, 227, 62, 231, + 122, 70, 14, 238, 213, 231, 122, 70, 14, 229, 81, 228, 249, 70, 84, 234, + 204, 246, 218, 228, 38, 70, 84, 234, 204, 249, 201, 232, 69, 76, 70, 84, + 234, 204, 240, 6, 232, 69, 76, 70, 84, 234, 204, 225, 32, 249, 184, 70, + 246, 235, 168, 245, 151, 70, 246, 218, 228, 38, 70, 236, 80, 249, 184, + 87, 3, 1, 254, 190, 87, 3, 1, 253, 44, 87, 3, 1, 246, 168, 87, 3, 1, 249, + 148, 87, 3, 1, 247, 239, 87, 3, 1, 224, 219, 87, 3, 1, 223, 92, 87, 3, 1, + 227, 73, 87, 3, 1, 240, 16, 87, 3, 1, 239, 46, 87, 3, 1, 238, 6, 87, 3, + 1, 237, 35, 87, 3, 1, 235, 230, 87, 3, 1, 234, 61, 87, 3, 1, 233, 194, + 87, 3, 1, 223, 81, 87, 3, 1, 232, 15, 87, 3, 1, 230, 253, 87, 3, 1, 227, + 67, 87, 3, 1, 225, 138, 87, 3, 1, 233, 92, 87, 3, 1, 238, 218, 87, 3, 1, + 246, 60, 87, 3, 1, 232, 123, 87, 3, 1, 229, 78, 87, 3, 1, 251, 161, 87, + 3, 1, 252, 26, 87, 3, 1, 239, 149, 87, 3, 1, 251, 109, 87, 3, 1, 251, + 192, 87, 3, 1, 224, 70, 87, 3, 1, 239, 159, 87, 3, 1, 245, 165, 87, 3, 1, + 245, 121, 87, 3, 1, 245, 71, 87, 3, 1, 224, 141, 87, 3, 1, 245, 141, 87, + 3, 1, 244, 225, 221, 1, 191, 221, 1, 224, 17, 221, 1, 224, 16, 221, 1, + 224, 8, 221, 1, 224, 6, 221, 1, 252, 204, 255, 43, 224, 2, 221, 1, 224, + 2, 221, 1, 224, 14, 221, 1, 224, 11, 221, 1, 224, 13, 221, 1, 224, 12, + 221, 1, 223, 206, 221, 1, 224, 9, 221, 1, 224, 1, 221, 1, 225, 249, 224, + 1, 221, 1, 223, 254, 221, 1, 224, 4, 221, 1, 252, 204, 255, 43, 224, 4, + 221, 1, 225, 249, 224, 4, 221, 1, 224, 3, 221, 1, 224, 21, 221, 1, 223, + 255, 221, 1, 225, 249, 223, 255, 221, 1, 223, 246, 221, 1, 225, 249, 223, + 246, 221, 1, 223, 202, 221, 1, 223, 230, 221, 1, 255, 1, 223, 230, 221, + 1, 225, 249, 223, 230, 221, 1, 223, 253, 221, 1, 223, 252, 221, 1, 223, + 250, 221, 1, 225, 249, 224, 5, 221, 1, 225, 249, 223, 248, 221, 1, 223, + 247, 221, 1, 223, 158, 221, 1, 223, 244, 221, 1, 223, 243, 221, 1, 224, + 7, 221, 1, 225, 249, 224, 7, 221, 1, 254, 30, 224, 7, 221, 1, 223, 242, + 221, 1, 223, 240, 221, 1, 223, 241, 221, 1, 223, 239, 221, 1, 223, 238, + 221, 1, 224, 15, 221, 1, 223, 236, 221, 1, 223, 235, 221, 1, 223, 234, + 221, 1, 223, 233, 221, 1, 223, 231, 221, 1, 227, 54, 223, 231, 221, 1, + 223, 229, 221, 52, 1, 238, 38, 76, 25, 4, 237, 142, 25, 4, 236, 102, 25, + 4, 231, 120, 25, 4, 228, 168, 25, 4, 229, 70, 25, 4, 252, 137, 25, 4, + 226, 124, 25, 4, 251, 67, 25, 4, 235, 4, 25, 4, 234, 151, 25, 4, 246, 16, + 234, 105, 25, 4, 223, 26, 25, 4, 249, 159, 25, 4, 250, 91, 25, 4, 239, + 116, 25, 4, 226, 200, 25, 4, 251, 149, 25, 4, 233, 78, 25, 4, 233, 3, 25, + 4, 246, 71, 25, 4, 246, 67, 25, 4, 246, 68, 25, 4, 246, 69, 25, 4, 228, + 110, 25, 4, 228, 80, 25, 4, 228, 91, 25, 4, 228, 109, 25, 4, 228, 94, 25, + 4, 228, 95, 25, 4, 228, 84, 25, 4, 251, 246, 25, 4, 251, 233, 25, 4, 251, + 235, 25, 4, 251, 245, 25, 4, 251, 243, 25, 4, 251, 244, 25, 4, 251, 234, + 25, 4, 222, 253, 25, 4, 222, 233, 25, 4, 222, 244, 25, 4, 222, 252, 25, + 4, 222, 247, 25, 4, 222, 248, 25, 4, 222, 236, 25, 4, 251, 242, 25, 4, + 251, 236, 25, 4, 251, 238, 25, 4, 251, 241, 25, 4, 251, 239, 25, 4, 251, + 240, 25, 4, 251, 237, 25, 4, 232, 39, 25, 4, 232, 29, 25, 4, 232, 35, 25, + 4, 232, 38, 25, 4, 232, 36, 25, 4, 232, 37, 25, 4, 232, 34, 25, 4, 238, + 57, 25, 4, 238, 49, 25, 4, 238, 52, 25, 4, 238, 56, 25, 4, 238, 53, 25, + 4, 238, 54, 25, 4, 238, 50, 25, 4, 224, 38, 25, 4, 224, 28, 25, 4, 224, + 34, 25, 4, 224, 37, 25, 4, 224, 35, 25, 4, 224, 36, 25, 4, 224, 33, 25, + 4, 245, 182, 25, 4, 245, 173, 25, 4, 245, 176, 25, 4, 245, 181, 25, 4, + 245, 178, 25, 4, 245, 179, 25, 4, 245, 175, 36, 28, 1, 252, 238, 36, 28, + 1, 225, 42, 36, 28, 1, 246, 58, 36, 28, 1, 250, 77, 36, 28, 1, 223, 77, + 36, 28, 1, 223, 97, 36, 28, 1, 177, 36, 28, 1, 248, 2, 36, 28, 1, 247, + 247, 36, 28, 1, 247, 239, 36, 28, 1, 73, 36, 28, 1, 233, 151, 36, 28, 1, + 247, 198, 36, 28, 1, 247, 188, 36, 28, 1, 227, 44, 36, 28, 1, 154, 36, + 28, 1, 226, 40, 36, 28, 1, 251, 182, 36, 28, 1, 229, 146, 36, 28, 1, 229, + 116, 36, 28, 1, 247, 38, 36, 28, 1, 247, 187, 36, 28, 1, 57, 36, 28, 1, + 240, 72, 36, 28, 1, 249, 175, 36, 28, 1, 236, 90, 225, 153, 36, 28, 1, + 223, 239, 36, 28, 1, 223, 158, 36, 28, 1, 239, 213, 57, 36, 28, 1, 237, + 155, 223, 139, 36, 28, 1, 252, 173, 223, 139, 36, 28, 1, 239, 213, 252, + 173, 223, 139, 41, 254, 182, 227, 248, 237, 13, 41, 254, 182, 248, 138, + 227, 248, 237, 13, 42, 227, 248, 104, 41, 227, 248, 104, 42, 248, 138, + 227, 248, 104, 41, 248, 138, 227, 248, 104, 232, 8, 239, 231, 237, 13, + 232, 8, 248, 138, 239, 231, 237, 13, 248, 138, 226, 91, 237, 13, 42, 226, + 91, 104, 41, 226, 91, 104, 232, 8, 228, 120, 42, 232, 8, 234, 63, 104, + 41, 232, 8, 234, 63, 104, 248, 36, 251, 8, 233, 190, 246, 251, 233, 190, + 200, 246, 251, 233, 190, 244, 92, 248, 138, 234, 100, 248, 125, 254, 187, + 225, 106, 254, 187, 248, 138, 231, 151, 254, 181, 47, 234, 97, 244, 95, + 239, 223, 239, 230, 233, 223, 252, 112, 244, 96, 2, 219, 226, 159, 2, + 231, 140, 46, 42, 184, 233, 182, 104, 41, 184, 233, 182, 104, 226, 159, + 2, 56, 46, 226, 159, 2, 56, 51, 42, 61, 253, 36, 2, 232, 65, 41, 61, 253, + 36, 2, 232, 65, 226, 106, 42, 132, 104, 226, 106, 41, 132, 104, 252, 126, + 42, 132, 104, 252, 126, 41, 132, 104, 42, 229, 11, 97, 104, 41, 229, 11, + 97, 104, 42, 47, 233, 180, 41, 47, 233, 180, 135, 197, 107, 168, 56, 232, + 170, 168, 56, 107, 135, 197, 232, 170, 228, 119, 246, 243, 56, 232, 170, + 247, 37, 56, 76, 200, 232, 69, 76, 61, 205, 231, 140, 232, 254, 9, 29, + 231, 211, 9, 29, 251, 88, 9, 29, 230, 209, 118, 9, 29, 230, 209, 113, 9, + 29, 230, 209, 166, 9, 29, 233, 112, 9, 29, 252, 118, 9, 29, 227, 99, 9, + 29, 238, 154, 118, 9, 29, 238, 154, 113, 9, 29, 249, 182, 9, 29, 230, + 211, 9, 29, 3, 118, 9, 29, 3, 113, 9, 29, 238, 15, 118, 9, 29, 238, 15, + 113, 9, 29, 238, 15, 166, 9, 29, 238, 15, 158, 9, 29, 228, 176, 9, 29, + 226, 192, 9, 29, 228, 174, 118, 9, 29, 228, 174, 113, 9, 29, 245, 115, + 118, 9, 29, 245, 115, 113, 9, 29, 245, 146, 9, 29, 232, 1, 9, 29, 251, + 147, 9, 29, 227, 227, 9, 29, 236, 84, 9, 29, 250, 75, 9, 29, 236, 77, 9, + 29, 251, 98, 9, 29, 224, 152, 118, 9, 29, 224, 152, 113, 9, 29, 247, 46, + 9, 29, 233, 160, 118, 9, 29, 233, 160, 113, 9, 29, 228, 245, 132, 226, + 87, 226, 49, 9, 29, 250, 253, 9, 29, 249, 153, 9, 29, 239, 177, 9, 29, + 252, 133, 106, 251, 77, 9, 29, 247, 136, 9, 29, 228, 132, 118, 9, 29, + 228, 132, 113, 9, 29, 253, 46, 9, 29, 228, 250, 9, 29, 252, 41, 228, 250, + 9, 29, 235, 148, 118, 9, 29, 235, 148, 113, 9, 29, 235, 148, 166, 9, 29, + 235, 148, 158, 9, 29, 236, 204, 9, 29, 229, 108, 9, 29, 232, 6, 9, 29, + 247, 154, 9, 29, 234, 73, 9, 29, 252, 97, 118, 9, 29, 252, 97, 113, 9, + 29, 236, 231, 9, 29, 236, 79, 9, 29, 245, 240, 118, 9, 29, 245, 240, 113, + 9, 29, 245, 240, 166, 9, 29, 226, 167, 9, 29, 251, 76, 9, 29, 224, 131, + 118, 9, 29, 224, 131, 113, 9, 29, 252, 41, 230, 203, 9, 29, 228, 245, + 244, 160, 9, 29, 244, 160, 9, 29, 252, 41, 228, 138, 9, 29, 252, 41, 229, + 103, 9, 29, 247, 2, 9, 29, 252, 41, 252, 2, 9, 29, 228, 245, 224, 166, 9, + 29, 224, 167, 118, 9, 29, 224, 167, 113, 9, 29, 251, 99, 9, 29, 252, 41, + 246, 6, 9, 29, 182, 118, 9, 29, 182, 113, 9, 29, 252, 41, 237, 134, 9, + 29, 252, 41, 246, 153, 9, 29, 236, 76, 118, 9, 29, 236, 76, 113, 9, 29, + 232, 9, 9, 29, 252, 140, 9, 29, 252, 41, 227, 72, 237, 240, 9, 29, 252, + 41, 237, 241, 9, 29, 252, 41, 224, 111, 9, 29, 252, 41, 247, 10, 9, 29, + 248, 43, 118, 9, 29, 248, 43, 113, 9, 29, 248, 43, 166, 9, 29, 252, 41, + 248, 42, 9, 29, 245, 118, 9, 29, 252, 41, 244, 159, 9, 29, 252, 132, 9, + 29, 246, 53, 9, 29, 252, 41, 247, 43, 9, 29, 252, 41, 252, 164, 9, 29, + 252, 41, 231, 7, 9, 29, 228, 245, 224, 126, 9, 29, 228, 245, 223, 223, 9, + 29, 252, 41, 246, 225, 9, 29, 239, 181, 247, 157, 9, 29, 252, 41, 247, + 157, 9, 29, 239, 181, 226, 107, 9, 29, 252, 41, 226, 107, 9, 29, 239, + 181, 248, 118, 9, 29, 252, 41, 248, 118, 9, 29, 225, 230, 9, 29, 239, + 181, 225, 230, 9, 29, 252, 41, 225, 230, 49, 29, 118, 49, 29, 237, 170, + 49, 29, 249, 140, 49, 29, 228, 194, 49, 29, 230, 208, 49, 29, 88, 49, 29, + 113, 49, 29, 237, 190, 49, 29, 237, 35, 49, 29, 237, 226, 49, 29, 247, + 222, 49, 29, 187, 49, 29, 103, 252, 118, 49, 29, 250, 254, 49, 29, 244, + 69, 49, 29, 227, 99, 49, 29, 234, 44, 252, 118, 49, 29, 238, 153, 49, 29, + 232, 233, 49, 29, 224, 87, 49, 29, 228, 128, 49, 29, 41, 234, 44, 252, + 118, 49, 29, 245, 72, 247, 235, 49, 29, 227, 23, 49, 29, 249, 182, 49, + 29, 230, 211, 49, 29, 251, 88, 49, 29, 232, 202, 49, 29, 255, 7, 49, 29, + 236, 72, 49, 29, 247, 235, 49, 29, 248, 48, 49, 29, 230, 224, 49, 29, + 246, 11, 49, 29, 246, 12, 228, 186, 49, 29, 247, 156, 49, 29, 252, 172, + 49, 29, 224, 101, 49, 29, 251, 163, 49, 29, 231, 113, 49, 29, 240, 15, + 49, 29, 228, 184, 49, 29, 238, 14, 49, 29, 251, 6, 49, 29, 228, 123, 49, + 29, 236, 74, 49, 29, 231, 131, 49, 29, 224, 89, 49, 29, 234, 59, 49, 29, + 225, 235, 49, 29, 248, 109, 49, 29, 229, 63, 226, 192, 49, 29, 248, 138, + 251, 88, 49, 29, 182, 228, 24, 49, 29, 135, 245, 145, 49, 29, 229, 65, + 49, 29, 252, 121, 49, 29, 228, 173, 49, 29, 252, 101, 49, 29, 228, 47, + 49, 29, 245, 114, 49, 29, 245, 152, 49, 29, 249, 143, 49, 29, 245, 146, + 49, 29, 252, 112, 49, 29, 232, 1, 49, 29, 230, 217, 49, 29, 249, 203, 49, + 29, 254, 35, 49, 29, 228, 120, 49, 29, 234, 242, 49, 29, 227, 227, 49, + 29, 230, 234, 49, 29, 236, 84, 49, 29, 226, 86, 49, 29, 238, 34, 49, 29, + 228, 38, 49, 29, 250, 75, 49, 29, 224, 140, 49, 29, 249, 162, 234, 242, + 49, 29, 251, 51, 49, 29, 246, 212, 49, 29, 251, 96, 49, 29, 228, 50, 49, + 29, 224, 151, 49, 29, 247, 46, 49, 29, 251, 95, 49, 29, 247, 101, 49, 29, + 47, 224, 73, 49, 29, 132, 226, 87, 226, 49, 49, 29, 228, 191, 49, 29, + 247, 109, 49, 29, 250, 253, 49, 29, 249, 153, 49, 29, 232, 199, 49, 29, + 239, 177, 49, 29, 236, 217, 49, 29, 226, 158, 49, 29, 227, 195, 49, 29, + 237, 185, 49, 29, 225, 86, 49, 29, 247, 69, 49, 29, 252, 133, 106, 251, + 77, 49, 29, 229, 12, 49, 29, 248, 138, 227, 21, 49, 29, 224, 121, 49, 29, + 228, 201, 49, 29, 249, 195, 49, 29, 247, 136, 49, 29, 228, 140, 49, 29, + 58, 49, 29, 228, 40, 49, 29, 228, 131, 49, 29, 226, 95, 49, 29, 245, 245, + 49, 29, 251, 251, 49, 29, 228, 62, 49, 29, 253, 46, 49, 29, 231, 178, 49, + 29, 228, 250, 49, 29, 239, 173, 49, 29, 235, 147, 49, 29, 229, 108, 49, + 29, 247, 94, 49, 29, 234, 73, 49, 29, 254, 186, 49, 29, 233, 14, 49, 29, + 248, 51, 49, 29, 252, 96, 49, 29, 236, 231, 49, 29, 236, 122, 49, 29, + 229, 192, 49, 29, 254, 96, 49, 29, 236, 79, 49, 29, 226, 110, 49, 29, + 234, 36, 49, 29, 252, 135, 49, 29, 228, 36, 49, 29, 251, 60, 49, 29, 245, + 239, 49, 29, 226, 167, 49, 29, 239, 245, 49, 29, 252, 141, 49, 29, 224, + 167, 247, 235, 49, 29, 251, 76, 49, 29, 224, 130, 49, 29, 230, 203, 49, + 29, 244, 160, 49, 29, 228, 138, 49, 29, 225, 61, 49, 29, 252, 235, 49, + 29, 233, 43, 49, 29, 253, 60, 49, 29, 229, 103, 49, 29, 231, 230, 49, 29, + 231, 60, 49, 29, 247, 2, 49, 29, 252, 134, 49, 29, 252, 2, 49, 29, 252, + 155, 49, 29, 236, 81, 49, 29, 224, 166, 49, 29, 251, 99, 49, 29, 224, + 109, 49, 29, 249, 192, 49, 29, 224, 220, 49, 29, 246, 6, 49, 29, 237, + 134, 49, 29, 246, 153, 49, 29, 236, 75, 49, 29, 228, 193, 49, 29, 229, + 63, 227, 88, 252, 164, 49, 29, 232, 9, 49, 29, 252, 140, 49, 29, 224, 84, + 49, 29, 247, 125, 49, 29, 237, 240, 49, 29, 227, 72, 237, 240, 49, 29, + 237, 238, 49, 29, 228, 154, 49, 29, 237, 241, 49, 29, 224, 111, 49, 29, + 247, 10, 49, 29, 248, 42, 49, 29, 245, 118, 49, 29, 246, 233, 49, 29, + 244, 159, 49, 29, 252, 132, 49, 29, 227, 76, 49, 29, 245, 157, 49, 29, + 247, 62, 49, 29, 231, 26, 224, 109, 49, 29, 251, 253, 49, 29, 246, 53, + 49, 29, 247, 43, 49, 29, 252, 164, 49, 29, 231, 7, 49, 29, 250, 65, 49, + 29, 224, 126, 49, 29, 245, 101, 49, 29, 223, 223, 49, 29, 236, 129, 49, + 29, 252, 150, 49, 29, 247, 244, 49, 29, 246, 225, 49, 29, 226, 64, 49, + 29, 248, 111, 49, 29, 231, 253, 49, 29, 234, 243, 49, 29, 247, 157, 49, + 29, 226, 107, 49, 29, 248, 118, 49, 29, 225, 230, 49, 29, 247, 11, 90, + 250, 32, 116, 42, 180, 231, 153, 90, 250, 32, 116, 64, 180, 51, 90, 250, + 32, 116, 42, 180, 236, 154, 22, 231, 153, 90, 250, 32, 116, 64, 180, 236, + 154, 22, 51, 90, 250, 32, 116, 246, 218, 227, 207, 90, 250, 32, 116, 227, + 208, 246, 224, 46, 90, 250, 32, 116, 227, 208, 246, 224, 51, 90, 250, 32, + 116, 227, 208, 246, 224, 237, 237, 90, 250, 32, 116, 227, 208, 246, 224, + 225, 113, 237, 237, 90, 250, 32, 116, 227, 208, 246, 224, 225, 113, 231, + 153, 90, 250, 32, 116, 227, 208, 246, 224, 203, 237, 237, 90, 250, 32, + 116, 234, 4, 90, 228, 145, 90, 251, 54, 90, 246, 218, 228, 38, 249, 189, + 76, 239, 174, 240, 5, 228, 61, 98, 90, 239, 193, 76, 90, 251, 79, 76, 90, + 65, 223, 89, 42, 254, 182, 104, 41, 254, 182, 104, 42, 47, 254, 182, 104, + 41, 47, 254, 182, 104, 42, 251, 11, 104, 41, 251, 11, 104, 42, 63, 251, + 11, 104, 41, 63, 251, 11, 104, 42, 86, 237, 217, 104, 41, 86, 237, 217, + 104, 232, 237, 76, 246, 104, 76, 42, 226, 100, 229, 104, 104, 41, 226, + 100, 229, 104, 104, 42, 63, 237, 217, 104, 41, 63, 237, 217, 104, 42, 63, + 226, 100, 229, 104, 104, 41, 63, 226, 100, 229, 104, 104, 42, 63, 37, + 104, 41, 63, 37, 104, 224, 148, 250, 130, 200, 47, 232, 206, 232, 57, 76, + 47, 232, 206, 232, 57, 76, 184, 47, 232, 206, 232, 57, 76, 232, 237, 165, + 247, 125, 245, 144, 207, 118, 245, 144, 207, 113, 245, 144, 207, 166, + 245, 144, 207, 158, 245, 144, 207, 173, 245, 144, 207, 183, 245, 144, + 207, 194, 245, 144, 207, 187, 245, 144, 207, 192, 90, 237, 209, 206, 76, + 90, 231, 135, 206, 76, 90, 250, 38, 206, 76, 90, 247, 221, 206, 76, 26, + 228, 241, 56, 206, 76, 26, 47, 56, 206, 76, 224, 146, 250, 130, 61, 239, + 45, 231, 212, 76, 61, 239, 45, 231, 212, 2, 224, 204, 228, 155, 76, 61, + 239, 45, 231, 212, 165, 225, 113, 245, 151, 61, 239, 45, 231, 212, 2, + 224, 204, 228, 155, 165, 225, 113, 245, 151, 61, 239, 45, 231, 212, 165, + 203, 245, 151, 33, 232, 237, 76, 90, 167, 237, 171, 247, 91, 229, 174, + 98, 245, 144, 207, 227, 23, 245, 144, 207, 225, 216, 245, 144, 207, 226, + 207, 61, 90, 239, 193, 76, 237, 3, 76, 233, 176, 254, 202, 76, 90, 38, + 240, 7, 90, 132, 247, 55, 228, 145, 126, 1, 3, 57, 126, 1, 57, 126, 1, 3, + 74, 126, 1, 74, 126, 1, 3, 66, 126, 1, 66, 126, 1, 3, 72, 126, 1, 72, + 126, 1, 3, 73, 126, 1, 73, 126, 1, 177, 126, 1, 246, 193, 126, 1, 238, + 199, 126, 1, 246, 46, 126, 1, 238, 107, 126, 1, 245, 218, 126, 1, 239, 3, + 126, 1, 246, 131, 126, 1, 238, 150, 126, 1, 246, 11, 126, 1, 231, 31, + 126, 1, 223, 117, 126, 1, 229, 15, 126, 1, 223, 47, 126, 1, 228, 6, 126, + 1, 223, 19, 126, 1, 230, 213, 126, 1, 223, 97, 126, 1, 228, 169, 126, 1, + 223, 27, 126, 1, 227, 107, 126, 1, 250, 189, 126, 1, 226, 175, 126, 1, + 250, 4, 126, 1, 3, 225, 250, 126, 1, 225, 250, 126, 1, 248, 107, 126, 1, + 227, 44, 126, 1, 250, 77, 126, 1, 96, 126, 1, 249, 161, 126, 1, 236, 1, + 126, 1, 235, 89, 126, 1, 234, 206, 126, 1, 235, 162, 126, 1, 235, 6, 126, + 1, 154, 126, 1, 253, 70, 126, 1, 213, 126, 1, 245, 75, 126, 1, 252, 181, + 126, 1, 233, 69, 126, 1, 244, 145, 126, 1, 252, 90, 126, 1, 232, 173, + 126, 1, 245, 121, 126, 1, 252, 238, 126, 1, 233, 151, 126, 1, 244, 227, + 126, 1, 252, 138, 126, 1, 233, 4, 126, 1, 198, 126, 1, 236, 157, 126, 1, + 236, 66, 126, 1, 236, 235, 126, 1, 236, 103, 126, 1, 3, 191, 126, 1, 191, + 126, 1, 3, 223, 158, 126, 1, 223, 158, 126, 1, 3, 223, 183, 126, 1, 223, + 183, 126, 1, 208, 126, 1, 231, 180, 126, 1, 231, 70, 126, 1, 231, 244, + 126, 1, 231, 122, 126, 1, 3, 224, 173, 126, 1, 224, 173, 126, 1, 224, + 118, 126, 1, 224, 141, 126, 1, 224, 105, 126, 1, 199, 126, 1, 224, 190, + 126, 1, 3, 177, 126, 1, 3, 239, 3, 36, 239, 19, 224, 204, 228, 155, 76, + 36, 239, 19, 229, 191, 228, 155, 76, 239, 19, 224, 204, 228, 155, 76, + 239, 19, 229, 191, 228, 155, 76, 126, 239, 193, 76, 126, 224, 204, 239, + 193, 76, 126, 249, 224, 223, 170, 239, 19, 47, 244, 95, 48, 1, 3, 57, 48, + 1, 57, 48, 1, 3, 74, 48, 1, 74, 48, 1, 3, 66, 48, 1, 66, 48, 1, 3, 72, + 48, 1, 72, 48, 1, 3, 73, 48, 1, 73, 48, 1, 177, 48, 1, 246, 193, 48, 1, + 238, 199, 48, 1, 246, 46, 48, 1, 238, 107, 48, 1, 245, 218, 48, 1, 239, + 3, 48, 1, 246, 131, 48, 1, 238, 150, 48, 1, 246, 11, 48, 1, 231, 31, 48, + 1, 223, 117, 48, 1, 229, 15, 48, 1, 223, 47, 48, 1, 228, 6, 48, 1, 223, + 19, 48, 1, 230, 213, 48, 1, 223, 97, 48, 1, 228, 169, 48, 1, 223, 27, 48, + 1, 227, 107, 48, 1, 250, 189, 48, 1, 226, 175, 48, 1, 250, 4, 48, 1, 3, + 225, 250, 48, 1, 225, 250, 48, 1, 248, 107, 48, 1, 227, 44, 48, 1, 250, + 77, 48, 1, 96, 48, 1, 249, 161, 48, 1, 236, 1, 48, 1, 235, 89, 48, 1, + 234, 206, 48, 1, 235, 162, 48, 1, 235, 6, 48, 1, 154, 48, 1, 253, 70, 48, + 1, 213, 48, 1, 245, 75, 48, 1, 252, 181, 48, 1, 233, 69, 48, 1, 244, 145, + 48, 1, 252, 90, 48, 1, 232, 173, 48, 1, 245, 121, 48, 1, 252, 238, 48, 1, + 233, 151, 48, 1, 244, 227, 48, 1, 252, 138, 48, 1, 233, 4, 48, 1, 198, + 48, 1, 236, 157, 48, 1, 236, 66, 48, 1, 236, 235, 48, 1, 236, 103, 48, 1, + 3, 191, 48, 1, 191, 48, 1, 3, 223, 158, 48, 1, 223, 158, 48, 1, 3, 223, + 183, 48, 1, 223, 183, 48, 1, 208, 48, 1, 231, 180, 48, 1, 231, 70, 48, 1, + 231, 244, 48, 1, 231, 122, 48, 1, 3, 224, 173, 48, 1, 224, 173, 48, 1, + 224, 118, 48, 1, 224, 141, 48, 1, 224, 105, 48, 1, 199, 48, 1, 224, 190, + 48, 1, 3, 177, 48, 1, 3, 239, 3, 48, 1, 225, 64, 48, 1, 224, 228, 48, 1, + 225, 42, 48, 1, 224, 206, 48, 236, 154, 249, 140, 239, 19, 232, 194, 228, + 155, 76, 48, 239, 193, 76, 48, 224, 204, 239, 193, 76, 48, 249, 224, 238, + 129, 176, 1, 254, 27, 176, 1, 233, 244, 176, 1, 185, 176, 1, 247, 130, + 176, 1, 222, 222, 176, 1, 227, 109, 176, 1, 199, 176, 1, 149, 176, 1, + 214, 176, 1, 239, 76, 176, 1, 212, 176, 1, 239, 182, 176, 1, 232, 139, + 176, 1, 224, 73, 176, 1, 223, 86, 176, 1, 251, 205, 176, 1, 229, 148, + 176, 1, 146, 176, 1, 223, 119, 176, 1, 252, 44, 176, 1, 193, 176, 1, 57, + 176, 1, 73, 176, 1, 72, 176, 1, 248, 24, 176, 1, 254, 253, 176, 1, 248, + 22, 176, 1, 254, 53, 176, 1, 234, 13, 176, 1, 254, 190, 176, 1, 247, 239, + 176, 1, 254, 184, 176, 1, 247, 228, 176, 1, 247, 198, 176, 1, 74, 176, 1, + 66, 176, 1, 239, 192, 176, 1, 196, 176, 1, 235, 139, 176, 1, 246, 15, + 176, 1, 240, 48, 26, 1, 238, 173, 26, 1, 228, 104, 26, 1, 238, 171, 26, + 1, 235, 82, 26, 1, 235, 81, 26, 1, 235, 80, 26, 1, 226, 163, 26, 1, 228, + 99, 26, 1, 231, 174, 26, 1, 231, 170, 26, 1, 231, 168, 26, 1, 231, 162, + 26, 1, 231, 159, 26, 1, 231, 157, 26, 1, 231, 163, 26, 1, 231, 173, 26, + 1, 236, 148, 26, 1, 233, 60, 26, 1, 228, 102, 26, 1, 233, 52, 26, 1, 228, + 236, 26, 1, 228, 100, 26, 1, 240, 68, 26, 1, 251, 113, 26, 1, 228, 107, + 26, 1, 251, 167, 26, 1, 238, 210, 26, 1, 226, 218, 26, 1, 233, 85, 26, 1, + 245, 69, 26, 1, 57, 26, 1, 255, 19, 26, 1, 191, 26, 1, 224, 10, 26, 1, + 247, 217, 26, 1, 72, 26, 1, 223, 221, 26, 1, 223, 228, 26, 1, 73, 26, 1, + 224, 173, 26, 1, 224, 170, 26, 1, 234, 88, 26, 1, 223, 183, 26, 1, 66, + 26, 1, 224, 133, 26, 1, 224, 141, 26, 1, 224, 118, 26, 1, 223, 158, 26, + 1, 247, 165, 26, 1, 223, 202, 26, 1, 74, 26, 247, 52, 26, 1, 228, 103, + 26, 1, 235, 74, 26, 1, 235, 76, 26, 1, 235, 78, 26, 1, 231, 169, 26, 1, + 231, 156, 26, 1, 231, 160, 26, 1, 231, 164, 26, 1, 231, 154, 26, 1, 236, + 143, 26, 1, 236, 141, 26, 1, 236, 144, 26, 1, 239, 34, 26, 1, 233, 56, + 26, 1, 233, 45, 26, 1, 233, 50, 26, 1, 233, 48, 26, 1, 233, 58, 26, 1, + 233, 46, 26, 1, 239, 32, 26, 1, 239, 30, 26, 1, 228, 230, 26, 1, 228, + 228, 26, 1, 228, 221, 26, 1, 228, 226, 26, 1, 228, 234, 26, 1, 233, 204, + 26, 1, 228, 105, 26, 1, 223, 212, 26, 1, 223, 210, 26, 1, 223, 211, 26, + 1, 239, 33, 26, 1, 228, 106, 26, 1, 223, 218, 26, 1, 223, 180, 26, 1, + 223, 179, 26, 1, 223, 182, 26, 1, 223, 151, 26, 1, 223, 152, 26, 1, 223, + 154, 26, 1, 254, 128, 26, 1, 254, 124, 90, 254, 175, 237, 162, 76, 90, + 254, 175, 231, 193, 76, 90, 254, 175, 168, 76, 90, 254, 175, 135, 76, 90, + 254, 175, 152, 76, 90, 254, 175, 246, 243, 76, 90, 254, 175, 226, 106, + 76, 90, 254, 175, 236, 154, 76, 90, 254, 175, 252, 126, 76, 90, 254, 175, + 247, 45, 76, 90, 254, 175, 230, 209, 76, 90, 254, 175, 226, 214, 76, 90, + 254, 175, 246, 237, 76, 90, 254, 175, 245, 113, 76, 90, 254, 175, 248, + 49, 76, 90, 254, 175, 237, 36, 76, 176, 1, 252, 90, 176, 1, 223, 47, 176, + 1, 239, 156, 176, 1, 245, 218, 176, 1, 248, 35, 176, 1, 247, 226, 176, 1, + 234, 52, 176, 1, 234, 56, 176, 1, 239, 210, 176, 1, 254, 176, 176, 1, + 239, 250, 176, 1, 225, 121, 176, 1, 240, 30, 176, 1, 235, 123, 176, 1, + 254, 247, 176, 1, 254, 49, 176, 1, 254, 199, 176, 1, 234, 69, 176, 1, + 234, 58, 176, 1, 239, 247, 176, 35, 1, 233, 244, 176, 35, 1, 227, 109, + 176, 35, 1, 239, 76, 176, 35, 1, 212, 9, 195, 227, 109, 9, 195, 224, 127, + 9, 195, 224, 65, 9, 195, 252, 56, 9, 195, 227, 201, 9, 195, 244, 85, 9, + 195, 244, 89, 9, 195, 244, 151, 9, 195, 244, 86, 9, 195, 227, 112, 9, + 195, 244, 88, 9, 195, 244, 84, 9, 195, 244, 149, 9, 195, 244, 87, 9, 195, + 244, 83, 9, 195, 199, 9, 195, 212, 9, 195, 193, 9, 195, 233, 244, 9, 195, + 228, 147, 9, 195, 222, 222, 9, 195, 244, 90, 9, 195, 245, 85, 9, 195, + 227, 121, 9, 195, 227, 186, 9, 195, 228, 70, 9, 195, 229, 153, 9, 195, + 233, 153, 9, 195, 232, 141, 9, 195, 226, 125, 9, 195, 227, 111, 9, 195, + 227, 194, 9, 195, 244, 97, 9, 195, 244, 82, 9, 195, 233, 99, 9, 195, 232, + 139, 48, 1, 3, 238, 107, 48, 1, 3, 229, 15, 48, 1, 3, 228, 6, 48, 1, 3, + 96, 48, 1, 3, 234, 206, 48, 1, 3, 154, 48, 1, 3, 245, 75, 48, 1, 3, 244, + 145, 48, 1, 3, 245, 121, 48, 1, 3, 244, 227, 48, 1, 3, 236, 66, 48, 1, 3, + 208, 48, 1, 3, 231, 180, 48, 1, 3, 231, 70, 48, 1, 3, 231, 244, 48, 1, 3, + 231, 122, 93, 26, 238, 173, 93, 26, 235, 82, 93, 26, 226, 163, 93, 26, + 231, 174, 93, 26, 236, 148, 93, 26, 233, 60, 93, 26, 228, 236, 93, 26, + 240, 68, 93, 26, 251, 113, 93, 26, 251, 167, 93, 26, 238, 210, 93, 26, + 226, 218, 93, 26, 233, 85, 93, 26, 245, 69, 93, 26, 238, 174, 57, 93, 26, + 235, 83, 57, 93, 26, 226, 164, 57, 93, 26, 231, 175, 57, 93, 26, 236, + 149, 57, 93, 26, 233, 61, 57, 93, 26, 228, 237, 57, 93, 26, 240, 69, 57, + 93, 26, 251, 114, 57, 93, 26, 251, 168, 57, 93, 26, 238, 211, 57, 93, 26, + 226, 219, 57, 93, 26, 233, 86, 57, 93, 26, 245, 70, 57, 93, 26, 251, 114, + 66, 93, 238, 133, 116, 234, 78, 93, 238, 133, 116, 130, 244, 145, 93, + 133, 118, 93, 133, 113, 93, 133, 166, 93, 133, 158, 93, 133, 173, 93, + 133, 183, 93, 133, 194, 93, 133, 187, 93, 133, 192, 93, 133, 227, 23, 93, + 133, 236, 84, 93, 133, 247, 46, 93, 133, 224, 151, 93, 133, 224, 97, 93, + 133, 236, 199, 93, 133, 248, 48, 93, 133, 227, 227, 93, 133, 228, 41, 93, + 133, 245, 127, 93, 133, 228, 167, 93, 133, 235, 237, 93, 133, 228, 139, + 93, 133, 247, 51, 93, 133, 251, 40, 93, 133, 238, 37, 93, 133, 231, 208, + 93, 133, 252, 31, 93, 133, 228, 9, 93, 133, 227, 216, 93, 133, 247, 220, + 93, 133, 231, 201, 93, 133, 254, 212, 93, 133, 247, 75, 93, 133, 231, + 199, 93, 133, 229, 192, 93, 133, 231, 243, 233, 173, 53, 33, 65, 225, + 217, 118, 33, 65, 225, 217, 113, 33, 65, 225, 217, 166, 33, 65, 225, 217, + 158, 33, 65, 225, 217, 173, 33, 65, 225, 217, 183, 33, 65, 225, 217, 194, + 33, 65, 225, 217, 187, 33, 65, 225, 217, 192, 33, 65, 226, 207, 33, 65, + 226, 208, 118, 33, 65, 226, 208, 113, 33, 65, 226, 208, 166, 33, 65, 226, + 208, 158, 33, 65, 226, 208, 173, 33, 26, 238, 173, 33, 26, 235, 82, 33, + 26, 226, 163, 33, 26, 231, 174, 33, 26, 236, 148, 33, 26, 233, 60, 33, + 26, 228, 236, 33, 26, 240, 68, 33, 26, 251, 113, 33, 26, 251, 167, 33, + 26, 238, 210, 33, 26, 226, 218, 33, 26, 233, 85, 33, 26, 245, 69, 33, 26, + 238, 174, 57, 33, 26, 235, 83, 57, 33, 26, 226, 164, 57, 33, 26, 231, + 175, 57, 33, 26, 236, 149, 57, 33, 26, 233, 61, 57, 33, 26, 228, 237, 57, + 33, 26, 240, 69, 57, 33, 26, 251, 114, 57, 33, 26, 251, 168, 57, 33, 26, + 238, 211, 57, 33, 26, 226, 219, 57, 33, 26, 233, 86, 57, 33, 26, 245, 70, + 57, 33, 238, 133, 116, 251, 197, 33, 238, 133, 116, 239, 98, 33, 26, 240, + 69, 66, 238, 133, 228, 61, 98, 33, 133, 118, 33, 133, 113, 33, 133, 166, + 33, 133, 158, 33, 133, 173, 33, 133, 183, 33, 133, 194, 33, 133, 187, 33, + 133, 192, 33, 133, 227, 23, 33, 133, 236, 84, 33, 133, 247, 46, 33, 133, + 224, 151, 33, 133, 224, 97, 33, 133, 236, 199, 33, 133, 248, 48, 33, 133, + 227, 227, 33, 133, 228, 41, 33, 133, 245, 127, 33, 133, 228, 167, 33, + 133, 235, 237, 33, 133, 228, 139, 33, 133, 247, 51, 33, 133, 251, 40, 33, + 133, 238, 37, 33, 133, 230, 207, 33, 133, 237, 38, 33, 133, 247, 82, 33, + 133, 227, 238, 33, 133, 247, 151, 33, 133, 232, 203, 33, 133, 254, 57, + 33, 133, 239, 194, 33, 133, 231, 199, 33, 133, 251, 14, 33, 133, 251, 5, + 33, 133, 245, 63, 33, 133, 251, 218, 33, 133, 237, 117, 33, 133, 237, + 237, 33, 133, 231, 153, 33, 133, 236, 229, 33, 133, 231, 218, 33, 133, + 228, 9, 33, 133, 227, 216, 33, 133, 247, 220, 33, 133, 231, 201, 33, 133, + 254, 212, 33, 133, 235, 71, 33, 65, 226, 208, 183, 33, 65, 226, 208, 194, + 33, 65, 226, 208, 187, 33, 65, 226, 208, 192, 33, 65, 246, 245, 33, 65, + 246, 246, 118, 33, 65, 246, 246, 113, 33, 65, 246, 246, 166, 33, 65, 246, + 246, 158, 33, 65, 246, 246, 173, 33, 65, 246, 246, 183, 33, 65, 246, 246, + 194, 33, 65, 246, 246, 187, 33, 65, 246, 246, 192, 33, 65, 247, 63, 90, + 167, 14, 32, 239, 175, 90, 167, 14, 32, 247, 93, 90, 167, 14, 32, 237, + 19, 90, 167, 14, 32, 254, 136, 90, 167, 14, 32, 236, 252, 90, 167, 14, + 32, 239, 96, 90, 167, 14, 32, 239, 97, 90, 167, 14, 32, 254, 50, 90, 167, + 14, 32, 229, 172, 90, 167, 14, 32, 234, 91, 90, 167, 14, 32, 234, 233, + 90, 167, 14, 32, 250, 72, 37, 245, 85, 37, 247, 194, 37, 247, 159, 237, + 176, 237, 192, 53, 33, 48, 57, 33, 48, 74, 33, 48, 66, 33, 48, 72, 33, + 48, 73, 33, 48, 177, 33, 48, 238, 199, 33, 48, 238, 107, 33, 48, 239, 3, + 33, 48, 238, 150, 33, 48, 231, 31, 33, 48, 229, 15, 33, 48, 228, 6, 33, + 48, 230, 213, 33, 48, 228, 169, 33, 48, 227, 107, 33, 48, 226, 175, 33, + 48, 225, 250, 33, 48, 227, 44, 33, 48, 96, 33, 48, 236, 1, 33, 48, 235, + 89, 33, 48, 234, 206, 33, 48, 235, 162, 33, 48, 235, 6, 33, 48, 154, 33, + 48, 245, 75, 33, 48, 244, 145, 33, 48, 245, 121, 33, 48, 244, 227, 33, + 48, 198, 33, 48, 236, 157, 33, 48, 236, 66, 33, 48, 236, 235, 33, 48, + 236, 103, 33, 48, 191, 33, 48, 223, 158, 33, 48, 223, 183, 33, 48, 208, + 33, 48, 231, 180, 33, 48, 231, 70, 33, 48, 231, 244, 33, 48, 231, 122, + 33, 48, 224, 173, 33, 48, 224, 118, 33, 48, 224, 141, 33, 48, 224, 105, + 37, 254, 156, 37, 254, 88, 37, 254, 171, 37, 255, 57, 37, 239, 251, 37, + 239, 225, 37, 225, 119, 37, 247, 174, 37, 248, 33, 37, 234, 55, 37, 234, + 50, 37, 239, 55, 37, 239, 29, 37, 239, 27, 37, 246, 157, 37, 246, 164, + 37, 246, 37, 37, 246, 33, 37, 238, 48, 37, 246, 27, 37, 238, 184, 37, + 238, 183, 37, 238, 182, 37, 238, 181, 37, 245, 196, 37, 245, 195, 37, + 238, 88, 37, 238, 90, 37, 238, 255, 37, 238, 131, 37, 238, 137, 37, 231, + 16, 37, 230, 249, 37, 228, 219, 37, 229, 177, 37, 229, 176, 37, 250, 186, + 37, 250, 31, 37, 249, 141, 37, 226, 120, 37, 235, 233, 37, 234, 234, 37, + 245, 156, 37, 233, 238, 37, 233, 237, 37, 253, 68, 37, 233, 66, 37, 233, + 39, 37, 233, 40, 37, 252, 162, 37, 244, 144, 37, 244, 141, 37, 252, 65, + 37, 244, 129, 37, 245, 104, 37, 233, 105, 37, 233, 132, 37, 245, 91, 37, + 233, 130, 37, 233, 142, 37, 252, 228, 37, 232, 250, 37, 252, 128, 37, + 244, 219, 37, 232, 245, 37, 244, 215, 37, 244, 216, 37, 237, 47, 37, 237, + 44, 37, 237, 51, 37, 237, 9, 37, 237, 29, 37, 236, 133, 37, 236, 115, 37, + 236, 114, 37, 236, 221, 37, 236, 219, 37, 236, 222, 37, 224, 20, 37, 224, + 18, 37, 223, 150, 37, 231, 133, 37, 231, 137, 37, 231, 53, 37, 231, 48, + 37, 231, 217, 37, 231, 216, 37, 224, 150, 90, 167, 14, 32, 244, 155, 223, + 89, 90, 167, 14, 32, 244, 155, 118, 90, 167, 14, 32, 244, 155, 113, 90, + 167, 14, 32, 244, 155, 166, 90, 167, 14, 32, 244, 155, 158, 90, 167, 14, + 32, 244, 155, 173, 90, 167, 14, 32, 244, 155, 183, 90, 167, 14, 32, 244, + 155, 194, 90, 167, 14, 32, 244, 155, 187, 90, 167, 14, 32, 244, 155, 192, + 90, 167, 14, 32, 244, 155, 227, 23, 90, 167, 14, 32, 244, 155, 247, 252, + 90, 167, 14, 32, 244, 155, 225, 218, 90, 167, 14, 32, 244, 155, 226, 209, + 90, 167, 14, 32, 244, 155, 246, 238, 90, 167, 14, 32, 244, 155, 247, 67, + 90, 167, 14, 32, 244, 155, 228, 212, 90, 167, 14, 32, 244, 155, 229, 161, + 90, 167, 14, 32, 244, 155, 248, 18, 90, 167, 14, 32, 244, 155, 235, 59, + 90, 167, 14, 32, 244, 155, 225, 216, 90, 167, 14, 32, 244, 155, 225, 210, + 90, 167, 14, 32, 244, 155, 225, 206, 90, 167, 14, 32, 244, 155, 225, 207, + 90, 167, 14, 32, 244, 155, 225, 212, 37, 244, 150, 37, 250, 189, 37, 254, + 53, 37, 125, 37, 234, 6, 37, 233, 154, 37, 249, 163, 37, 249, 164, 228, + 118, 37, 249, 164, 250, 231, 37, 239, 192, 37, 247, 197, 235, 238, 245, + 105, 37, 247, 197, 235, 238, 227, 129, 37, 247, 197, 235, 238, 227, 86, + 37, 247, 197, 235, 238, 236, 218, 37, 251, 7, 37, 233, 242, 254, 192, 37, + 236, 1, 37, 236, 67, 57, 37, 198, 37, 177, 37, 239, 6, 37, 236, 249, 37, + 246, 145, 37, 252, 33, 37, 239, 5, 37, 233, 100, 37, 235, 141, 37, 236, + 67, 247, 130, 37, 236, 67, 214, 37, 236, 191, 37, 238, 229, 37, 244, 90, + 37, 238, 201, 37, 236, 159, 37, 246, 48, 37, 226, 177, 37, 236, 67, 149, + 37, 236, 110, 37, 249, 171, 37, 238, 161, 37, 247, 9, 37, 235, 20, 37, + 236, 67, 185, 37, 236, 107, 37, 251, 69, 37, 238, 155, 37, 236, 108, 228, + 118, 37, 251, 70, 228, 118, 37, 237, 69, 228, 118, 37, 238, 156, 228, + 118, 37, 236, 108, 250, 231, 37, 251, 70, 250, 231, 37, 237, 69, 250, + 231, 37, 238, 156, 250, 231, 37, 237, 69, 107, 193, 37, 237, 69, 107, + 231, 35, 228, 118, 37, 213, 37, 238, 126, 37, 236, 69, 37, 245, 248, 37, + 232, 18, 37, 232, 19, 107, 193, 37, 232, 19, 107, 231, 35, 228, 118, 37, + 232, 184, 37, 234, 207, 37, 236, 67, 193, 37, 236, 68, 37, 232, 158, 37, + 234, 179, 37, 236, 67, 196, 37, 236, 22, 37, 238, 81, 37, 236, 23, 236, + 221, 37, 232, 157, 37, 234, 178, 37, 236, 67, 224, 174, 37, 236, 20, 37, + 238, 79, 37, 236, 21, 236, 221, 37, 239, 77, 234, 81, 37, 237, 69, 234, + 81, 37, 254, 199, 37, 252, 117, 37, 251, 247, 37, 251, 232, 37, 252, 45, + 107, 238, 229, 37, 251, 68, 37, 250, 118, 37, 245, 183, 37, 154, 37, 244, + 151, 37, 240, 16, 37, 238, 168, 37, 238, 156, 252, 15, 37, 238, 109, 37, + 237, 146, 37, 237, 145, 37, 237, 139, 37, 237, 81, 37, 236, 250, 228, + 184, 37, 236, 132, 37, 236, 96, 37, 233, 98, 37, 233, 7, 37, 232, 229, + 37, 232, 228, 37, 228, 112, 37, 227, 202, 37, 224, 142, 37, 225, 65, 107, + 185, 37, 102, 107, 185, 90, 167, 14, 32, 250, 121, 118, 90, 167, 14, 32, + 250, 121, 113, 90, 167, 14, 32, 250, 121, 166, 90, 167, 14, 32, 250, 121, + 158, 90, 167, 14, 32, 250, 121, 173, 90, 167, 14, 32, 250, 121, 183, 90, + 167, 14, 32, 250, 121, 194, 90, 167, 14, 32, 250, 121, 187, 90, 167, 14, + 32, 250, 121, 192, 90, 167, 14, 32, 250, 121, 227, 23, 90, 167, 14, 32, + 250, 121, 247, 252, 90, 167, 14, 32, 250, 121, 225, 218, 90, 167, 14, 32, + 250, 121, 226, 209, 90, 167, 14, 32, 250, 121, 246, 238, 90, 167, 14, 32, + 250, 121, 247, 67, 90, 167, 14, 32, 250, 121, 228, 212, 90, 167, 14, 32, + 250, 121, 229, 161, 90, 167, 14, 32, 250, 121, 248, 18, 90, 167, 14, 32, + 250, 121, 235, 59, 90, 167, 14, 32, 250, 121, 225, 216, 90, 167, 14, 32, + 250, 121, 225, 210, 90, 167, 14, 32, 250, 121, 225, 206, 90, 167, 14, 32, + 250, 121, 225, 207, 90, 167, 14, 32, 250, 121, 225, 212, 90, 167, 14, 32, + 250, 121, 225, 213, 90, 167, 14, 32, 250, 121, 225, 208, 90, 167, 14, 32, + 250, 121, 225, 209, 90, 167, 14, 32, 250, 121, 225, 215, 90, 167, 14, 32, + 250, 121, 225, 211, 90, 167, 14, 32, 250, 121, 226, 207, 90, 167, 14, 32, + 250, 121, 226, 206, 37, 246, 177, 181, 32, 226, 240, 250, 251, 245, 112, + 181, 32, 226, 240, 231, 241, 248, 48, 181, 32, 249, 234, 254, 63, 226, + 240, 252, 225, 181, 32, 223, 168, 247, 5, 181, 32, 224, 168, 181, 32, + 251, 41, 181, 32, 226, 240, 254, 103, 181, 32, 244, 222, 226, 121, 181, + 32, 3, 227, 74, 181, 32, 226, 88, 181, 32, 233, 149, 181, 32, 228, 60, + 181, 32, 247, 84, 181, 32, 245, 233, 232, 238, 181, 32, 236, 99, 181, 32, + 247, 219, 181, 32, 247, 6, 181, 32, 224, 90, 234, 62, 226, 240, 250, 73, + 181, 32, 254, 140, 181, 32, 251, 25, 181, 32, 252, 156, 226, 187, 181, + 32, 245, 246, 181, 32, 228, 130, 254, 155, 181, 32, 231, 194, 181, 32, + 239, 246, 181, 32, 245, 233, 227, 74, 181, 32, 236, 73, 251, 9, 181, 32, + 245, 233, 232, 210, 181, 32, 226, 240, 255, 45, 224, 151, 181, 32, 226, + 240, 251, 86, 247, 46, 181, 32, 240, 2, 181, 32, 248, 86, 181, 32, 231, + 197, 181, 32, 245, 233, 232, 233, 181, 32, 232, 198, 181, 32, 250, 135, + 106, 226, 240, 237, 184, 181, 32, 226, 240, 247, 112, 181, 32, 234, 34, + 181, 32, 234, 93, 181, 32, 250, 51, 181, 32, 250, 69, 181, 32, 240, 12, + 181, 32, 252, 109, 181, 32, 251, 56, 180, 236, 223, 181, 32, 246, 152, + 226, 121, 181, 32, 232, 161, 225, 107, 181, 32, 234, 33, 181, 32, 226, + 240, 224, 135, 181, 32, 231, 189, 181, 32, 226, 240, 251, 253, 181, 32, + 226, 240, 254, 99, 226, 185, 181, 32, 226, 240, 239, 0, 228, 43, 236, 74, + 181, 32, 250, 29, 181, 32, 226, 240, 237, 11, 237, 48, 181, 32, 255, 46, + 181, 32, 226, 240, 224, 163, 181, 32, 226, 240, 246, 118, 224, 111, 181, + 32, 226, 240, 239, 102, 238, 24, 181, 32, 249, 193, 181, 32, 237, 177, + 181, 32, 239, 249, 226, 48, 181, 32, 3, 232, 210, 181, 32, 255, 9, 251, + 48, 181, 32, 252, 227, 251, 48, 8, 4, 239, 195, 8, 4, 239, 189, 8, 4, 74, + 8, 4, 239, 212, 8, 4, 240, 70, 8, 4, 240, 55, 8, 4, 240, 72, 8, 4, 240, + 71, 8, 4, 254, 62, 8, 4, 254, 36, 8, 4, 57, 8, 4, 254, 157, 8, 4, 225, + 117, 8, 4, 225, 120, 8, 4, 225, 118, 8, 4, 234, 19, 8, 4, 233, 253, 8, 4, + 73, 8, 4, 234, 45, 8, 4, 247, 152, 8, 4, 72, 8, 4, 224, 83, 8, 4, 252, + 157, 8, 4, 252, 154, 8, 4, 252, 181, 8, 4, 252, 165, 8, 4, 252, 175, 8, + 4, 252, 174, 8, 4, 252, 177, 8, 4, 252, 176, 8, 4, 253, 21, 8, 4, 253, + 18, 8, 4, 253, 70, 8, 4, 253, 37, 8, 4, 252, 73, 8, 4, 252, 77, 8, 4, + 252, 74, 8, 4, 252, 127, 8, 4, 252, 118, 8, 4, 252, 138, 8, 4, 252, 129, + 8, 4, 252, 193, 8, 4, 252, 238, 8, 4, 252, 205, 8, 4, 252, 63, 8, 4, 252, + 61, 8, 4, 252, 90, 8, 4, 252, 72, 8, 4, 252, 66, 8, 4, 252, 70, 8, 4, + 252, 49, 8, 4, 252, 48, 8, 4, 252, 54, 8, 4, 252, 52, 8, 4, 252, 50, 8, + 4, 252, 51, 8, 4, 233, 30, 8, 4, 233, 26, 8, 4, 233, 69, 8, 4, 233, 35, + 8, 4, 233, 44, 8, 4, 233, 64, 8, 4, 233, 62, 8, 4, 233, 167, 8, 4, 233, + 158, 8, 4, 213, 8, 4, 233, 197, 8, 4, 232, 166, 8, 4, 232, 168, 8, 4, + 232, 167, 8, 4, 232, 235, 8, 4, 232, 231, 8, 4, 233, 4, 8, 4, 232, 242, + 8, 4, 232, 160, 8, 4, 232, 159, 8, 4, 232, 173, 8, 4, 232, 165, 8, 4, + 232, 162, 8, 4, 232, 164, 8, 4, 232, 143, 8, 4, 232, 142, 8, 4, 232, 147, + 8, 4, 232, 146, 8, 4, 232, 144, 8, 4, 232, 145, 8, 4, 253, 3, 8, 4, 253, + 2, 8, 4, 253, 9, 8, 4, 253, 4, 8, 4, 253, 6, 8, 4, 253, 5, 8, 4, 253, 8, + 8, 4, 253, 7, 8, 4, 253, 14, 8, 4, 253, 13, 8, 4, 253, 16, 8, 4, 253, 15, + 8, 4, 252, 250, 8, 4, 252, 252, 8, 4, 252, 251, 8, 4, 252, 255, 8, 4, + 252, 254, 8, 4, 253, 1, 8, 4, 253, 0, 8, 4, 253, 10, 8, 4, 253, 12, 8, 4, + 253, 11, 8, 4, 252, 246, 8, 4, 252, 245, 8, 4, 252, 253, 8, 4, 252, 249, + 8, 4, 252, 247, 8, 4, 252, 248, 8, 4, 252, 242, 8, 4, 252, 241, 8, 4, + 252, 244, 8, 4, 252, 243, 8, 4, 235, 208, 8, 4, 235, 207, 8, 4, 235, 213, + 8, 4, 235, 209, 8, 4, 235, 210, 8, 4, 235, 212, 8, 4, 235, 211, 8, 4, + 235, 215, 8, 4, 235, 214, 8, 4, 235, 217, 8, 4, 235, 216, 8, 4, 235, 204, + 8, 4, 235, 203, 8, 4, 235, 206, 8, 4, 235, 205, 8, 4, 235, 198, 8, 4, + 235, 197, 8, 4, 235, 202, 8, 4, 235, 201, 8, 4, 235, 199, 8, 4, 235, 200, + 8, 4, 235, 192, 8, 4, 235, 191, 8, 4, 235, 196, 8, 4, 235, 195, 8, 4, + 235, 193, 8, 4, 235, 194, 8, 4, 245, 13, 8, 4, 245, 12, 8, 4, 245, 18, 8, + 4, 245, 14, 8, 4, 245, 15, 8, 4, 245, 17, 8, 4, 245, 16, 8, 4, 245, 20, + 8, 4, 245, 19, 8, 4, 245, 22, 8, 4, 245, 21, 8, 4, 245, 4, 8, 4, 245, 6, + 8, 4, 245, 5, 8, 4, 245, 9, 8, 4, 245, 8, 8, 4, 245, 11, 8, 4, 245, 10, + 8, 4, 245, 0, 8, 4, 244, 255, 8, 4, 245, 7, 8, 4, 245, 3, 8, 4, 245, 1, + 8, 4, 245, 2, 8, 4, 244, 250, 8, 4, 244, 254, 8, 4, 244, 253, 8, 4, 244, + 251, 8, 4, 244, 252, 8, 4, 236, 112, 8, 4, 236, 111, 8, 4, 236, 157, 8, + 4, 236, 117, 8, 4, 236, 139, 8, 4, 236, 151, 8, 4, 236, 150, 8, 4, 237, + 2, 8, 4, 236, 254, 8, 4, 198, 8, 4, 237, 28, 8, 4, 236, 43, 8, 4, 236, + 42, 8, 4, 236, 45, 8, 4, 236, 44, 8, 4, 236, 78, 8, 4, 236, 70, 8, 4, + 236, 103, 8, 4, 236, 82, 8, 4, 236, 193, 8, 4, 236, 235, 8, 4, 236, 27, + 8, 4, 236, 24, 8, 4, 236, 66, 8, 4, 236, 39, 8, 4, 236, 34, 8, 4, 236, + 37, 8, 4, 236, 7, 8, 4, 236, 6, 8, 4, 236, 11, 8, 4, 236, 9, 8, 4, 247, + 39, 8, 4, 247, 35, 8, 4, 247, 70, 8, 4, 247, 47, 8, 4, 247, 106, 8, 4, + 247, 100, 8, 4, 247, 129, 8, 4, 247, 108, 8, 4, 246, 236, 8, 4, 247, 7, + 8, 4, 246, 255, 8, 4, 246, 208, 8, 4, 246, 207, 8, 4, 246, 219, 8, 4, + 246, 213, 8, 4, 246, 211, 8, 4, 246, 212, 8, 4, 246, 198, 8, 4, 246, 197, + 8, 4, 246, 201, 8, 4, 246, 199, 8, 4, 224, 208, 8, 4, 224, 207, 8, 4, + 224, 228, 8, 4, 224, 217, 8, 4, 224, 223, 8, 4, 224, 221, 8, 4, 224, 225, + 8, 4, 224, 224, 8, 4, 225, 49, 8, 4, 225, 45, 8, 4, 225, 64, 8, 4, 225, + 59, 8, 4, 224, 196, 8, 4, 224, 192, 8, 4, 224, 206, 8, 4, 224, 197, 8, 4, + 224, 229, 8, 4, 225, 34, 8, 4, 224, 185, 8, 4, 224, 184, 8, 4, 224, 190, + 8, 4, 224, 188, 8, 4, 224, 186, 8, 4, 224, 187, 8, 4, 224, 178, 8, 4, + 224, 177, 8, 4, 224, 182, 8, 4, 224, 181, 8, 4, 224, 179, 8, 4, 224, 180, + 8, 4, 249, 190, 8, 4, 249, 178, 8, 4, 250, 4, 8, 4, 249, 207, 8, 4, 249, + 239, 8, 4, 249, 243, 8, 4, 249, 242, 8, 4, 250, 127, 8, 4, 250, 122, 8, + 4, 250, 189, 8, 4, 250, 146, 8, 4, 248, 91, 8, 4, 248, 92, 8, 4, 249, + 140, 8, 4, 248, 123, 8, 4, 249, 161, 8, 4, 249, 142, 8, 4, 250, 27, 8, 4, + 250, 77, 8, 4, 250, 39, 8, 4, 248, 84, 8, 4, 248, 82, 8, 4, 248, 107, 8, + 4, 248, 90, 8, 4, 248, 85, 8, 4, 248, 88, 8, 4, 226, 144, 8, 4, 226, 140, + 8, 4, 226, 175, 8, 4, 226, 150, 8, 4, 226, 168, 8, 4, 226, 170, 8, 4, + 226, 169, 8, 4, 227, 66, 8, 4, 227, 53, 8, 4, 227, 107, 8, 4, 227, 70, 8, + 4, 225, 240, 8, 4, 225, 239, 8, 4, 225, 242, 8, 4, 225, 241, 8, 4, 226, + 99, 8, 4, 226, 97, 8, 4, 96, 8, 4, 226, 105, 8, 4, 227, 0, 8, 4, 227, 44, + 8, 4, 227, 17, 8, 4, 225, 228, 8, 4, 225, 225, 8, 4, 225, 250, 8, 4, 225, + 238, 8, 4, 225, 229, 8, 4, 225, 236, 8, 4, 250, 94, 8, 4, 250, 93, 8, 4, + 250, 99, 8, 4, 250, 95, 8, 4, 250, 96, 8, 4, 250, 98, 8, 4, 250, 97, 8, + 4, 250, 110, 8, 4, 250, 109, 8, 4, 250, 117, 8, 4, 250, 111, 8, 4, 250, + 84, 8, 4, 250, 86, 8, 4, 250, 85, 8, 4, 250, 89, 8, 4, 250, 88, 8, 4, + 250, 92, 8, 4, 250, 90, 8, 4, 250, 102, 8, 4, 250, 105, 8, 4, 250, 103, + 8, 4, 250, 80, 8, 4, 250, 79, 8, 4, 250, 87, 8, 4, 250, 83, 8, 4, 250, + 81, 8, 4, 250, 82, 8, 4, 235, 177, 8, 4, 235, 176, 8, 4, 235, 181, 8, 4, + 235, 178, 8, 4, 235, 179, 8, 4, 235, 180, 8, 4, 235, 187, 8, 4, 235, 186, + 8, 4, 235, 189, 8, 4, 235, 188, 8, 4, 235, 171, 8, 4, 235, 170, 8, 4, + 235, 175, 8, 4, 235, 172, 8, 4, 235, 182, 8, 4, 235, 185, 8, 4, 235, 183, + 8, 4, 235, 165, 8, 4, 235, 164, 8, 4, 235, 169, 8, 4, 235, 168, 8, 4, + 235, 166, 8, 4, 235, 167, 8, 4, 244, 236, 8, 4, 244, 235, 8, 4, 244, 242, + 8, 4, 244, 237, 8, 4, 244, 239, 8, 4, 244, 238, 8, 4, 244, 241, 8, 4, + 244, 240, 8, 4, 244, 247, 8, 4, 244, 246, 8, 4, 244, 249, 8, 4, 244, 248, + 8, 4, 244, 230, 8, 4, 244, 231, 8, 4, 244, 233, 8, 4, 244, 232, 8, 4, + 244, 234, 8, 4, 244, 243, 8, 4, 244, 245, 8, 4, 244, 244, 8, 4, 244, 229, + 8, 4, 235, 52, 8, 4, 235, 51, 8, 4, 235, 89, 8, 4, 235, 55, 8, 4, 235, + 73, 8, 4, 235, 85, 8, 4, 235, 84, 8, 4, 235, 220, 8, 4, 236, 1, 8, 4, + 235, 231, 8, 4, 234, 187, 8, 4, 234, 189, 8, 4, 234, 188, 8, 4, 234, 242, + 8, 4, 234, 231, 8, 4, 235, 6, 8, 4, 234, 249, 8, 4, 235, 143, 8, 4, 235, + 162, 8, 4, 235, 151, 8, 4, 234, 183, 8, 4, 234, 180, 8, 4, 234, 206, 8, + 4, 234, 186, 8, 4, 234, 184, 8, 4, 234, 185, 8, 4, 245, 42, 8, 4, 245, + 41, 8, 4, 245, 47, 8, 4, 245, 43, 8, 4, 245, 44, 8, 4, 245, 46, 8, 4, + 245, 45, 8, 4, 245, 52, 8, 4, 245, 51, 8, 4, 245, 54, 8, 4, 245, 53, 8, + 4, 245, 34, 8, 4, 245, 36, 8, 4, 245, 35, 8, 4, 245, 38, 8, 4, 245, 40, + 8, 4, 245, 39, 8, 4, 245, 48, 8, 4, 245, 50, 8, 4, 245, 49, 8, 4, 245, + 30, 8, 4, 245, 29, 8, 4, 245, 37, 8, 4, 245, 33, 8, 4, 245, 31, 8, 4, + 245, 32, 8, 4, 245, 24, 8, 4, 245, 23, 8, 4, 245, 28, 8, 4, 245, 27, 8, + 4, 245, 25, 8, 4, 245, 26, 8, 4, 237, 157, 8, 4, 237, 153, 8, 4, 237, + 193, 8, 4, 237, 161, 8, 4, 237, 187, 8, 4, 237, 186, 8, 4, 237, 189, 8, + 4, 237, 188, 8, 4, 238, 4, 8, 4, 237, 252, 8, 4, 238, 43, 8, 4, 238, 10, + 8, 4, 237, 96, 8, 4, 237, 95, 8, 4, 237, 98, 8, 4, 237, 97, 8, 4, 237, + 120, 8, 4, 237, 115, 8, 4, 237, 143, 8, 4, 237, 122, 8, 4, 237, 208, 8, + 4, 237, 243, 8, 4, 237, 215, 8, 4, 237, 91, 8, 4, 237, 90, 8, 4, 237, + 110, 8, 4, 237, 94, 8, 4, 237, 92, 8, 4, 237, 93, 8, 4, 237, 73, 8, 4, + 237, 72, 8, 4, 237, 80, 8, 4, 237, 76, 8, 4, 237, 74, 8, 4, 237, 75, 8, + 4, 246, 23, 8, 4, 246, 22, 8, 4, 246, 46, 8, 4, 246, 32, 8, 4, 246, 39, + 8, 4, 246, 38, 8, 4, 246, 41, 8, 4, 246, 40, 8, 4, 246, 154, 8, 4, 246, + 149, 8, 4, 246, 193, 8, 4, 246, 163, 8, 4, 245, 201, 8, 4, 245, 200, 8, + 4, 245, 203, 8, 4, 245, 202, 8, 4, 245, 251, 8, 4, 245, 249, 8, 4, 246, + 11, 8, 4, 246, 3, 8, 4, 246, 105, 8, 4, 246, 103, 8, 4, 246, 131, 8, 4, + 246, 115, 8, 4, 245, 191, 8, 4, 245, 190, 8, 4, 245, 218, 8, 4, 245, 199, + 8, 4, 245, 192, 8, 4, 245, 198, 8, 4, 238, 176, 8, 4, 238, 175, 8, 4, + 238, 199, 8, 4, 238, 186, 8, 4, 238, 193, 8, 4, 238, 195, 8, 4, 238, 194, + 8, 4, 239, 20, 8, 4, 239, 11, 8, 4, 177, 8, 4, 239, 41, 8, 4, 238, 94, 8, + 4, 238, 96, 8, 4, 238, 95, 8, 4, 238, 130, 8, 4, 238, 127, 8, 4, 238, + 150, 8, 4, 238, 136, 8, 4, 238, 236, 8, 4, 238, 234, 8, 4, 239, 3, 8, 4, + 238, 238, 8, 4, 238, 84, 8, 4, 238, 82, 8, 4, 238, 107, 8, 4, 238, 93, 8, + 4, 238, 87, 8, 4, 238, 91, 8, 4, 246, 87, 8, 4, 246, 86, 8, 4, 246, 91, + 8, 4, 246, 88, 8, 4, 246, 90, 8, 4, 246, 89, 8, 4, 246, 98, 8, 4, 246, + 97, 8, 4, 246, 101, 8, 4, 246, 99, 8, 4, 246, 78, 8, 4, 246, 77, 8, 4, + 246, 80, 8, 4, 246, 79, 8, 4, 246, 83, 8, 4, 246, 82, 8, 4, 246, 85, 8, + 4, 246, 84, 8, 4, 246, 93, 8, 4, 246, 92, 8, 4, 246, 96, 8, 4, 246, 94, + 8, 4, 246, 73, 8, 4, 246, 72, 8, 4, 246, 81, 8, 4, 246, 76, 8, 4, 246, + 74, 8, 4, 246, 75, 8, 4, 236, 175, 8, 4, 236, 176, 8, 4, 236, 188, 8, 4, + 236, 187, 8, 4, 236, 190, 8, 4, 236, 189, 8, 4, 236, 166, 8, 4, 236, 168, + 8, 4, 236, 167, 8, 4, 236, 171, 8, 4, 236, 170, 8, 4, 236, 173, 8, 4, + 236, 172, 8, 4, 236, 177, 8, 4, 236, 179, 8, 4, 236, 178, 8, 4, 236, 162, + 8, 4, 236, 161, 8, 4, 236, 169, 8, 4, 236, 165, 8, 4, 236, 163, 8, 4, + 236, 164, 8, 4, 244, 107, 8, 4, 244, 106, 8, 4, 244, 113, 8, 4, 244, 108, + 8, 4, 244, 110, 8, 4, 244, 109, 8, 4, 244, 112, 8, 4, 244, 111, 8, 4, + 244, 118, 8, 4, 244, 117, 8, 4, 244, 120, 8, 4, 244, 119, 8, 4, 244, 99, + 8, 4, 244, 98, 8, 4, 244, 101, 8, 4, 244, 100, 8, 4, 244, 103, 8, 4, 244, + 102, 8, 4, 244, 105, 8, 4, 244, 104, 8, 4, 244, 114, 8, 4, 244, 116, 8, + 4, 244, 115, 8, 4, 235, 111, 8, 4, 235, 113, 8, 4, 235, 112, 8, 4, 235, + 130, 8, 4, 235, 129, 8, 4, 235, 137, 8, 4, 235, 132, 8, 4, 235, 96, 8, 4, + 235, 95, 8, 4, 235, 97, 8, 4, 235, 101, 8, 4, 235, 100, 8, 4, 235, 107, + 8, 4, 235, 102, 8, 4, 235, 124, 8, 4, 235, 128, 8, 4, 235, 125, 8, 4, + 245, 57, 8, 4, 245, 64, 8, 4, 245, 71, 8, 4, 245, 132, 8, 4, 245, 126, 8, + 4, 154, 8, 4, 245, 142, 8, 4, 244, 131, 8, 4, 244, 130, 8, 4, 244, 133, + 8, 4, 244, 132, 8, 4, 244, 157, 8, 4, 244, 152, 8, 4, 244, 227, 8, 4, + 244, 214, 8, 4, 245, 87, 8, 4, 245, 121, 8, 4, 245, 97, 8, 4, 224, 154, + 8, 4, 224, 143, 8, 4, 224, 173, 8, 4, 224, 162, 8, 4, 224, 78, 8, 4, 224, + 80, 8, 4, 224, 79, 8, 4, 224, 88, 8, 4, 224, 105, 8, 4, 224, 93, 8, 4, + 224, 128, 8, 4, 224, 141, 8, 4, 224, 132, 8, 4, 223, 34, 8, 4, 223, 33, + 8, 4, 223, 47, 8, 4, 223, 35, 8, 4, 223, 40, 8, 4, 223, 42, 8, 4, 223, + 41, 8, 4, 223, 104, 8, 4, 223, 101, 8, 4, 223, 117, 8, 4, 223, 107, 8, 4, + 223, 12, 8, 4, 223, 14, 8, 4, 223, 13, 8, 4, 223, 23, 8, 4, 223, 22, 8, + 4, 223, 27, 8, 4, 223, 24, 8, 4, 223, 87, 8, 4, 223, 97, 8, 4, 223, 91, + 8, 4, 223, 8, 8, 4, 223, 7, 8, 4, 223, 19, 8, 4, 223, 11, 8, 4, 223, 9, + 8, 4, 223, 10, 8, 4, 222, 255, 8, 4, 222, 254, 8, 4, 223, 4, 8, 4, 223, + 2, 8, 4, 223, 0, 8, 4, 223, 1, 8, 4, 251, 100, 8, 4, 251, 97, 8, 4, 251, + 118, 8, 4, 251, 108, 8, 4, 251, 115, 8, 4, 251, 111, 8, 4, 251, 117, 8, + 4, 251, 116, 8, 4, 252, 0, 8, 4, 251, 250, 8, 4, 252, 39, 8, 4, 252, 16, + 8, 4, 250, 227, 8, 4, 250, 229, 8, 4, 250, 228, 8, 4, 251, 3, 8, 4, 250, + 252, 8, 4, 251, 68, 8, 4, 251, 16, 8, 4, 251, 206, 8, 4, 251, 231, 8, 4, + 251, 209, 8, 4, 250, 212, 8, 4, 250, 211, 8, 4, 250, 235, 8, 4, 250, 226, + 8, 4, 250, 215, 8, 4, 250, 225, 8, 4, 250, 194, 8, 4, 250, 193, 8, 4, + 250, 202, 8, 4, 250, 199, 8, 4, 250, 195, 8, 4, 250, 197, 8, 4, 222, 238, + 8, 4, 222, 237, 8, 4, 222, 244, 8, 4, 222, 239, 8, 4, 222, 241, 8, 4, + 222, 240, 8, 4, 222, 243, 8, 4, 222, 242, 8, 4, 222, 250, 8, 4, 222, 249, + 8, 4, 222, 253, 8, 4, 222, 251, 8, 4, 222, 234, 8, 4, 222, 236, 8, 4, + 222, 235, 8, 4, 222, 245, 8, 4, 222, 248, 8, 4, 222, 246, 8, 4, 222, 229, + 8, 4, 222, 233, 8, 4, 222, 232, 8, 4, 222, 230, 8, 4, 222, 231, 8, 4, + 222, 224, 8, 4, 222, 223, 8, 4, 222, 228, 8, 4, 222, 227, 8, 4, 222, 225, + 8, 4, 222, 226, 8, 4, 234, 127, 8, 4, 234, 126, 8, 4, 234, 132, 8, 4, + 234, 128, 8, 4, 234, 129, 8, 4, 234, 131, 8, 4, 234, 130, 8, 4, 234, 136, + 8, 4, 234, 135, 8, 4, 234, 138, 8, 4, 234, 137, 8, 4, 234, 121, 8, 4, + 234, 122, 8, 4, 234, 124, 8, 4, 234, 125, 8, 4, 234, 133, 8, 4, 234, 134, + 8, 4, 234, 117, 8, 4, 234, 123, 8, 4, 234, 120, 8, 4, 234, 118, 8, 4, + 234, 119, 8, 4, 234, 112, 8, 4, 234, 111, 8, 4, 234, 116, 8, 4, 234, 115, + 8, 4, 234, 113, 8, 4, 234, 114, 8, 4, 228, 218, 8, 4, 183, 8, 4, 229, 15, + 8, 4, 228, 220, 8, 4, 229, 8, 8, 4, 229, 10, 8, 4, 229, 9, 8, 4, 230, + 240, 8, 4, 230, 236, 8, 4, 231, 31, 8, 4, 230, 246, 8, 4, 227, 223, 8, 4, + 227, 225, 8, 4, 227, 224, 8, 4, 228, 157, 8, 4, 228, 148, 8, 4, 228, 169, + 8, 4, 228, 158, 8, 4, 229, 157, 8, 4, 230, 213, 8, 4, 229, 175, 8, 4, + 227, 204, 8, 4, 227, 203, 8, 4, 228, 6, 8, 4, 227, 222, 8, 4, 227, 206, + 8, 4, 227, 213, 8, 4, 227, 123, 8, 4, 227, 122, 8, 4, 227, 185, 8, 4, + 227, 128, 8, 4, 227, 124, 8, 4, 227, 127, 8, 4, 228, 86, 8, 4, 228, 85, + 8, 4, 228, 91, 8, 4, 228, 87, 8, 4, 228, 88, 8, 4, 228, 90, 8, 4, 228, + 89, 8, 4, 228, 97, 8, 4, 228, 96, 8, 4, 228, 110, 8, 4, 228, 98, 8, 4, + 228, 82, 8, 4, 228, 81, 8, 4, 228, 84, 8, 4, 228, 83, 8, 4, 228, 92, 8, + 4, 228, 95, 8, 4, 228, 93, 8, 4, 228, 78, 8, 4, 228, 77, 8, 4, 228, 80, + 8, 4, 228, 79, 8, 4, 228, 72, 8, 4, 228, 71, 8, 4, 228, 76, 8, 4, 228, + 75, 8, 4, 228, 73, 8, 4, 228, 74, 8, 4, 223, 80, 8, 4, 223, 79, 8, 4, + 223, 85, 8, 4, 223, 82, 8, 4, 223, 62, 8, 4, 223, 64, 8, 4, 223, 63, 8, + 4, 223, 67, 8, 4, 223, 66, 8, 4, 223, 70, 8, 4, 223, 68, 8, 4, 223, 74, + 8, 4, 223, 73, 8, 4, 223, 77, 8, 4, 223, 75, 8, 4, 223, 58, 8, 4, 223, + 57, 8, 4, 223, 65, 8, 4, 223, 61, 8, 4, 223, 59, 8, 4, 223, 60, 8, 4, + 223, 50, 8, 4, 223, 49, 8, 4, 223, 54, 8, 4, 223, 53, 8, 4, 223, 51, 8, + 4, 223, 52, 8, 4, 251, 187, 8, 4, 251, 184, 8, 4, 251, 204, 8, 4, 251, + 193, 8, 4, 251, 132, 8, 4, 251, 131, 8, 4, 251, 134, 8, 4, 251, 133, 8, + 4, 251, 144, 8, 4, 251, 143, 8, 4, 251, 150, 8, 4, 251, 146, 8, 4, 251, + 174, 8, 4, 251, 172, 8, 4, 251, 182, 8, 4, 251, 176, 8, 4, 251, 126, 8, + 4, 251, 136, 8, 4, 251, 130, 8, 4, 251, 127, 8, 4, 251, 129, 8, 4, 251, + 120, 8, 4, 251, 119, 8, 4, 251, 124, 8, 4, 251, 123, 8, 4, 251, 121, 8, + 4, 251, 122, 8, 4, 231, 98, 8, 4, 231, 99, 8, 4, 231, 85, 8, 4, 231, 86, + 8, 4, 231, 89, 8, 4, 231, 88, 8, 4, 231, 91, 8, 4, 231, 90, 8, 4, 231, + 93, 8, 4, 231, 92, 8, 4, 231, 97, 8, 4, 231, 94, 8, 4, 231, 81, 8, 4, + 231, 80, 8, 4, 231, 87, 8, 4, 231, 84, 8, 4, 231, 82, 8, 4, 231, 83, 8, + 4, 231, 75, 8, 4, 231, 74, 8, 4, 231, 79, 8, 4, 231, 78, 8, 4, 231, 76, + 8, 4, 231, 77, 8, 4, 234, 228, 8, 4, 234, 227, 8, 4, 234, 230, 8, 4, 234, + 229, 8, 4, 234, 220, 8, 4, 234, 222, 8, 4, 234, 221, 8, 4, 234, 224, 8, + 4, 234, 223, 8, 4, 234, 226, 8, 4, 234, 225, 8, 4, 234, 215, 8, 4, 234, + 214, 8, 4, 234, 219, 8, 4, 234, 218, 8, 4, 234, 216, 8, 4, 234, 217, 8, + 4, 234, 209, 8, 4, 234, 208, 8, 4, 234, 213, 8, 4, 234, 212, 8, 4, 234, + 210, 8, 4, 234, 211, 8, 4, 229, 120, 8, 4, 229, 117, 8, 4, 229, 146, 8, + 4, 229, 129, 8, 4, 229, 36, 8, 4, 229, 38, 8, 4, 229, 37, 8, 4, 229, 49, + 8, 4, 229, 47, 8, 4, 229, 71, 8, 4, 229, 64, 8, 4, 229, 94, 8, 4, 229, + 92, 8, 4, 229, 114, 8, 4, 229, 101, 8, 4, 229, 32, 8, 4, 229, 31, 8, 4, + 229, 43, 8, 4, 229, 35, 8, 4, 229, 33, 8, 4, 229, 34, 8, 4, 229, 18, 8, + 4, 229, 17, 8, 4, 229, 23, 8, 4, 229, 21, 8, 4, 229, 19, 8, 4, 229, 20, + 8, 4, 231, 253, 8, 4, 231, 251, 8, 4, 208, 8, 4, 232, 1, 8, 4, 231, 56, + 8, 4, 231, 58, 8, 4, 231, 57, 8, 4, 231, 107, 8, 4, 231, 101, 8, 4, 231, + 122, 8, 4, 231, 110, 8, 4, 231, 188, 8, 4, 231, 244, 8, 4, 231, 215, 8, + 4, 231, 49, 8, 4, 231, 47, 8, 4, 231, 70, 8, 4, 231, 55, 8, 4, 231, 51, + 8, 4, 231, 52, 8, 4, 231, 38, 8, 4, 231, 37, 8, 4, 231, 43, 8, 4, 231, + 41, 8, 4, 231, 39, 8, 4, 231, 40, 8, 4, 239, 147, 8, 4, 239, 146, 8, 4, + 239, 156, 8, 4, 239, 148, 8, 4, 239, 152, 8, 4, 239, 151, 8, 4, 239, 154, + 8, 4, 239, 153, 8, 4, 239, 92, 8, 4, 239, 91, 8, 4, 239, 94, 8, 4, 239, + 93, 8, 4, 239, 105, 8, 4, 239, 104, 8, 4, 239, 117, 8, 4, 239, 107, 8, 4, + 239, 86, 8, 4, 239, 85, 8, 4, 239, 101, 8, 4, 239, 90, 8, 4, 239, 87, 8, + 4, 239, 88, 8, 4, 239, 79, 8, 4, 239, 78, 8, 4, 239, 83, 8, 4, 239, 82, + 8, 4, 239, 80, 8, 4, 239, 81, 8, 4, 232, 97, 8, 4, 232, 96, 8, 4, 232, + 104, 8, 4, 232, 98, 8, 4, 232, 101, 8, 4, 232, 100, 8, 4, 232, 103, 8, 4, + 232, 102, 8, 4, 232, 58, 8, 4, 232, 55, 8, 4, 232, 60, 8, 4, 232, 59, 8, + 4, 232, 87, 8, 4, 232, 86, 8, 4, 232, 95, 8, 4, 232, 89, 8, 4, 232, 50, + 8, 4, 232, 46, 8, 4, 232, 84, 8, 4, 232, 54, 8, 4, 232, 52, 8, 4, 232, + 53, 8, 4, 232, 30, 8, 4, 232, 28, 8, 4, 232, 40, 8, 4, 232, 33, 8, 4, + 232, 31, 8, 4, 232, 32, 8, 4, 239, 136, 8, 4, 239, 135, 8, 4, 239, 142, + 8, 4, 239, 137, 8, 4, 239, 139, 8, 4, 239, 138, 8, 4, 239, 141, 8, 4, + 239, 140, 8, 4, 239, 127, 8, 4, 239, 129, 8, 4, 239, 128, 8, 4, 239, 132, + 8, 4, 239, 131, 8, 4, 239, 134, 8, 4, 239, 133, 8, 4, 239, 123, 8, 4, + 239, 122, 8, 4, 239, 130, 8, 4, 239, 126, 8, 4, 239, 124, 8, 4, 239, 125, + 8, 4, 239, 119, 8, 4, 239, 118, 8, 4, 239, 121, 8, 4, 239, 120, 8, 4, + 235, 40, 8, 4, 235, 39, 8, 4, 235, 46, 8, 4, 235, 41, 8, 4, 235, 43, 8, + 4, 235, 42, 8, 4, 235, 45, 8, 4, 235, 44, 8, 4, 235, 31, 8, 4, 235, 32, + 8, 4, 235, 35, 8, 4, 235, 34, 8, 4, 235, 38, 8, 4, 235, 36, 8, 4, 235, + 27, 8, 4, 235, 33, 8, 4, 235, 30, 8, 4, 235, 28, 8, 4, 235, 29, 8, 4, + 235, 22, 8, 4, 235, 21, 8, 4, 235, 26, 8, 4, 235, 25, 8, 4, 235, 23, 8, + 4, 235, 24, 8, 4, 234, 155, 8, 4, 234, 154, 8, 4, 234, 163, 8, 4, 234, + 157, 8, 4, 234, 160, 8, 4, 234, 159, 8, 4, 234, 162, 8, 4, 234, 161, 8, + 4, 234, 143, 8, 4, 234, 145, 8, 4, 234, 144, 8, 4, 234, 148, 8, 4, 234, + 147, 8, 4, 234, 152, 8, 4, 234, 149, 8, 4, 234, 141, 8, 4, 234, 140, 8, + 4, 234, 146, 8, 4, 234, 142, 8, 4, 224, 57, 8, 4, 224, 56, 8, 4, 224, 64, + 8, 4, 224, 59, 8, 4, 224, 61, 8, 4, 224, 60, 8, 4, 224, 63, 8, 4, 224, + 62, 8, 4, 224, 46, 8, 4, 224, 47, 8, 4, 224, 51, 8, 4, 224, 50, 8, 4, + 224, 55, 8, 4, 224, 53, 8, 4, 224, 29, 8, 4, 224, 27, 8, 4, 224, 39, 8, + 4, 224, 32, 8, 4, 224, 30, 8, 4, 224, 31, 8, 4, 223, 189, 8, 4, 223, 187, + 8, 4, 223, 202, 8, 4, 223, 190, 8, 4, 223, 197, 8, 4, 223, 196, 8, 4, + 223, 199, 8, 4, 223, 198, 8, 4, 223, 145, 8, 4, 223, 144, 8, 4, 223, 147, + 8, 4, 223, 146, 8, 4, 223, 169, 8, 4, 223, 166, 8, 4, 223, 183, 8, 4, + 223, 171, 8, 4, 223, 138, 8, 4, 223, 136, 8, 4, 223, 158, 8, 4, 223, 143, + 8, 4, 223, 141, 8, 4, 223, 142, 8, 4, 223, 122, 8, 4, 223, 121, 8, 4, + 223, 127, 8, 4, 223, 125, 8, 4, 223, 123, 8, 4, 223, 124, 8, 29, 232, 87, + 8, 29, 237, 193, 8, 29, 238, 176, 8, 29, 234, 157, 8, 29, 250, 199, 8, + 29, 228, 91, 8, 29, 246, 84, 8, 29, 246, 115, 8, 29, 236, 157, 8, 29, + 244, 107, 8, 29, 237, 75, 8, 29, 252, 246, 8, 29, 236, 82, 8, 29, 223, + 183, 8, 29, 232, 160, 8, 29, 244, 101, 8, 29, 227, 66, 8, 29, 246, 193, + 8, 29, 223, 11, 8, 29, 250, 194, 8, 29, 250, 82, 8, 29, 252, 70, 8, 29, + 246, 80, 8, 29, 234, 149, 8, 29, 225, 250, 8, 29, 234, 45, 8, 29, 239, + 123, 8, 29, 223, 23, 8, 29, 232, 143, 8, 29, 245, 11, 8, 29, 223, 189, 8, + 29, 224, 187, 8, 29, 229, 23, 8, 29, 225, 34, 8, 29, 223, 117, 8, 29, + 239, 117, 8, 29, 234, 120, 8, 29, 239, 121, 8, 29, 245, 251, 8, 29, 239, + 141, 8, 29, 224, 105, 8, 29, 248, 107, 8, 29, 229, 34, 8, 29, 237, 189, + 8, 29, 250, 202, 8, 29, 250, 228, 8, 29, 251, 108, 8, 29, 244, 104, 8, + 29, 229, 120, 8, 29, 223, 10, 8, 29, 229, 64, 8, 29, 251, 182, 8, 29, + 222, 241, 8, 29, 235, 212, 8, 29, 239, 3, 34, 4, 248, 35, 34, 4, 248, 32, + 34, 4, 245, 109, 34, 4, 224, 138, 34, 4, 224, 137, 34, 4, 233, 144, 34, + 4, 252, 188, 34, 4, 252, 232, 34, 4, 236, 243, 34, 4, 238, 123, 34, 4, + 236, 184, 34, 4, 246, 141, 34, 4, 247, 92, 34, 4, 225, 38, 34, 4, 227, + 37, 34, 4, 226, 238, 34, 4, 250, 16, 34, 4, 250, 13, 34, 4, 237, 239, 34, + 4, 231, 229, 34, 4, 250, 67, 34, 4, 235, 184, 34, 4, 230, 203, 34, 4, + 229, 112, 34, 4, 223, 95, 34, 4, 223, 76, 34, 4, 251, 225, 34, 4, 239, + 169, 34, 4, 235, 47, 34, 4, 223, 225, 34, 4, 239, 2, 34, 4, 235, 120, 34, + 4, 246, 125, 34, 4, 236, 226, 34, 4, 235, 160, 34, 4, 234, 168, 34, 4, + 74, 34, 4, 240, 16, 34, 4, 245, 75, 34, 4, 245, 60, 34, 4, 224, 118, 34, + 4, 224, 112, 34, 4, 233, 69, 34, 4, 252, 186, 34, 4, 252, 181, 34, 4, + 236, 242, 34, 4, 238, 121, 34, 4, 236, 183, 34, 4, 246, 139, 34, 4, 247, + 70, 34, 4, 224, 228, 34, 4, 226, 175, 34, 4, 226, 220, 34, 4, 250, 8, 34, + 4, 250, 12, 34, 4, 237, 193, 34, 4, 231, 180, 34, 4, 250, 4, 34, 4, 235, + 181, 34, 4, 229, 15, 34, 4, 229, 90, 34, 4, 223, 47, 34, 4, 223, 72, 34, + 4, 251, 118, 34, 4, 239, 156, 34, 4, 235, 46, 34, 4, 223, 202, 34, 4, + 238, 199, 34, 4, 235, 118, 34, 4, 246, 46, 34, 4, 236, 157, 34, 4, 235, + 89, 34, 4, 234, 163, 34, 4, 57, 34, 4, 254, 190, 34, 4, 235, 133, 34, 4, + 154, 34, 4, 245, 148, 34, 4, 224, 173, 34, 4, 224, 164, 34, 4, 213, 34, + 4, 252, 190, 34, 4, 253, 70, 34, 4, 236, 245, 34, 4, 238, 126, 34, 4, + 238, 125, 34, 4, 236, 186, 34, 4, 246, 144, 34, 4, 247, 129, 34, 4, 225, + 64, 34, 4, 227, 107, 34, 4, 226, 251, 34, 4, 250, 22, 34, 4, 250, 15, 34, + 4, 238, 43, 34, 4, 208, 34, 4, 250, 189, 34, 4, 235, 189, 34, 4, 231, 31, + 34, 4, 229, 146, 34, 4, 223, 117, 34, 4, 223, 85, 34, 4, 252, 39, 34, 4, + 239, 179, 34, 4, 235, 49, 34, 4, 191, 34, 4, 177, 34, 4, 239, 46, 34, 4, + 235, 122, 34, 4, 246, 193, 34, 4, 198, 34, 4, 236, 1, 34, 4, 234, 173, + 34, 4, 234, 52, 34, 4, 234, 49, 34, 4, 244, 218, 34, 4, 224, 98, 34, 4, + 224, 94, 34, 4, 232, 244, 34, 4, 252, 184, 34, 4, 252, 131, 34, 4, 236, + 240, 34, 4, 238, 119, 34, 4, 236, 181, 34, 4, 246, 136, 34, 4, 247, 3, + 34, 4, 224, 198, 34, 4, 226, 108, 34, 4, 226, 198, 34, 4, 250, 6, 34, 4, + 250, 10, 34, 4, 237, 125, 34, 4, 231, 114, 34, 4, 249, 145, 34, 4, 235, + 173, 34, 4, 228, 159, 34, 4, 229, 66, 34, 4, 223, 25, 34, 4, 223, 69, 34, + 4, 251, 17, 34, 4, 239, 108, 34, 4, 235, 37, 34, 4, 223, 172, 34, 4, 238, + 139, 34, 4, 235, 116, 34, 4, 246, 4, 34, 4, 236, 86, 34, 4, 234, 253, 34, + 4, 234, 150, 34, 4, 66, 34, 4, 225, 138, 34, 4, 244, 145, 34, 4, 244, + 137, 34, 4, 224, 83, 34, 4, 224, 82, 34, 4, 232, 173, 34, 4, 252, 183, + 34, 4, 252, 90, 34, 4, 236, 239, 34, 4, 238, 118, 34, 4, 236, 180, 34, 4, + 246, 135, 34, 4, 246, 219, 34, 4, 224, 190, 34, 4, 225, 250, 34, 4, 226, + 186, 34, 4, 250, 5, 34, 4, 250, 9, 34, 4, 237, 110, 34, 4, 231, 70, 34, + 4, 248, 107, 34, 4, 235, 169, 34, 4, 228, 6, 34, 4, 229, 43, 34, 4, 223, + 19, 34, 4, 223, 65, 34, 4, 250, 235, 34, 4, 239, 101, 34, 4, 235, 33, 34, + 4, 223, 158, 34, 4, 238, 107, 34, 4, 235, 115, 34, 4, 245, 218, 34, 4, + 236, 66, 34, 4, 234, 206, 34, 4, 234, 146, 34, 4, 73, 34, 4, 234, 61, 34, + 4, 235, 104, 34, 4, 244, 227, 34, 4, 244, 219, 34, 4, 224, 105, 34, 4, + 224, 99, 34, 4, 233, 4, 34, 4, 252, 185, 34, 4, 252, 138, 34, 4, 236, + 241, 34, 4, 238, 120, 34, 4, 236, 182, 34, 4, 246, 138, 34, 4, 246, 137, + 34, 4, 247, 7, 34, 4, 224, 206, 34, 4, 96, 34, 4, 226, 201, 34, 4, 250, + 7, 34, 4, 250, 11, 34, 4, 237, 143, 34, 4, 231, 122, 34, 4, 249, 161, 34, + 4, 235, 175, 34, 4, 228, 169, 34, 4, 229, 71, 34, 4, 223, 27, 34, 4, 223, + 70, 34, 4, 251, 68, 34, 4, 239, 117, 34, 4, 235, 38, 34, 4, 223, 183, 34, + 4, 238, 150, 34, 4, 235, 117, 34, 4, 246, 11, 34, 4, 236, 103, 34, 4, + 235, 6, 34, 4, 234, 152, 34, 4, 72, 34, 4, 247, 239, 34, 4, 235, 126, 34, + 4, 245, 121, 34, 4, 245, 100, 34, 4, 224, 141, 34, 4, 224, 134, 34, 4, + 233, 151, 34, 4, 252, 189, 34, 4, 252, 238, 34, 4, 236, 244, 34, 4, 238, + 124, 34, 4, 238, 122, 34, 4, 236, 185, 34, 4, 246, 142, 34, 4, 246, 140, + 34, 4, 247, 97, 34, 4, 225, 42, 34, 4, 227, 44, 34, 4, 226, 239, 34, 4, + 250, 17, 34, 4, 250, 14, 34, 4, 237, 243, 34, 4, 231, 244, 34, 4, 250, + 77, 34, 4, 235, 185, 34, 4, 230, 213, 34, 4, 229, 114, 34, 4, 223, 97, + 34, 4, 223, 77, 34, 4, 251, 231, 34, 4, 239, 170, 34, 4, 235, 48, 34, 4, + 223, 228, 34, 4, 239, 3, 34, 4, 235, 121, 34, 4, 235, 119, 34, 4, 246, + 131, 34, 4, 246, 122, 34, 4, 236, 235, 34, 4, 235, 162, 34, 4, 234, 169, + 34, 4, 235, 139, 34, 4, 237, 218, 34, 251, 54, 34, 246, 218, 228, 38, 34, + 232, 69, 76, 34, 4, 235, 174, 247, 129, 34, 4, 235, 174, 177, 34, 4, 235, + 174, 228, 159, 34, 14, 247, 89, 34, 14, 239, 1, 34, 14, 226, 154, 34, 14, + 235, 68, 34, 14, 253, 40, 34, 14, 247, 128, 34, 14, 227, 104, 34, 14, + 250, 149, 34, 14, 249, 144, 34, 14, 238, 97, 34, 14, 226, 111, 34, 14, + 249, 160, 34, 14, 239, 109, 34, 21, 223, 89, 34, 21, 118, 34, 21, 113, + 34, 21, 166, 34, 21, 158, 34, 21, 173, 34, 21, 183, 34, 21, 194, 34, 21, + 187, 34, 21, 192, 34, 4, 235, 174, 198, 34, 4, 235, 174, 249, 161, 28, 6, + 1, 223, 93, 28, 3, 1, 223, 93, 28, 6, 1, 248, 67, 28, 3, 1, 248, 67, 28, + 6, 1, 200, 248, 69, 28, 3, 1, 200, 248, 69, 28, 6, 1, 239, 215, 28, 3, 1, + 239, 215, 28, 6, 1, 249, 175, 28, 3, 1, 249, 175, 28, 6, 1, 236, 90, 225, + 153, 28, 3, 1, 236, 90, 225, 153, 28, 6, 1, 252, 100, 234, 66, 28, 3, 1, + 252, 100, 234, 66, 28, 6, 1, 235, 145, 223, 217, 28, 3, 1, 235, 145, 223, + 217, 28, 6, 1, 223, 214, 2, 253, 67, 223, 217, 28, 3, 1, 223, 214, 2, + 253, 67, 223, 217, 28, 6, 1, 239, 213, 223, 239, 28, 3, 1, 239, 213, 223, + 239, 28, 6, 1, 200, 223, 158, 28, 3, 1, 200, 223, 158, 28, 6, 1, 239, + 213, 57, 28, 3, 1, 239, 213, 57, 28, 6, 1, 251, 82, 237, 155, 223, 139, + 28, 3, 1, 251, 82, 237, 155, 223, 139, 28, 6, 1, 252, 143, 223, 139, 28, + 3, 1, 252, 143, 223, 139, 28, 6, 1, 239, 213, 251, 82, 237, 155, 223, + 139, 28, 3, 1, 239, 213, 251, 82, 237, 155, 223, 139, 28, 6, 1, 223, 185, + 28, 3, 1, 223, 185, 28, 6, 1, 228, 165, 250, 77, 28, 3, 1, 228, 165, 250, + 77, 28, 6, 1, 228, 165, 248, 2, 28, 3, 1, 228, 165, 248, 2, 28, 6, 1, + 228, 165, 247, 247, 28, 3, 1, 228, 165, 247, 247, 28, 6, 1, 236, 94, 73, + 28, 3, 1, 236, 94, 73, 28, 6, 1, 252, 167, 73, 28, 3, 1, 252, 167, 73, + 28, 6, 1, 47, 236, 94, 73, 28, 3, 1, 47, 236, 94, 73, 28, 1, 236, 54, 73, + 36, 28, 224, 176, 36, 28, 227, 24, 236, 128, 53, 36, 28, 244, 136, 236, + 128, 53, 36, 28, 226, 195, 236, 128, 53, 228, 192, 254, 69, 36, 28, 239, + 12, 36, 28, 233, 156, 28, 239, 12, 28, 233, 156, 28, 6, 1, 248, 78, 28, + 3, 1, 248, 78, 28, 6, 1, 248, 60, 28, 3, 1, 248, 60, 28, 6, 1, 223, 55, + 28, 3, 1, 223, 55, 28, 6, 1, 251, 240, 28, 3, 1, 251, 240, 28, 6, 1, 248, + 59, 28, 3, 1, 248, 59, 28, 6, 1, 227, 45, 2, 236, 154, 88, 28, 3, 1, 227, + 45, 2, 236, 154, 88, 28, 6, 1, 225, 220, 28, 3, 1, 225, 220, 28, 6, 1, + 226, 23, 28, 3, 1, 226, 23, 28, 6, 1, 226, 27, 28, 3, 1, 226, 27, 28, 6, + 1, 227, 50, 28, 3, 1, 227, 50, 28, 6, 1, 244, 125, 28, 3, 1, 244, 125, + 28, 6, 1, 229, 28, 28, 3, 1, 229, 28, 52, 1, 251, 160, 206, 223, 193, + 233, 37, 52, 1, 251, 160, 206, 223, 249, 233, 37, 52, 1, 251, 160, 206, + 223, 193, 229, 130, 52, 1, 251, 160, 206, 223, 249, 229, 130, 52, 1, 251, + 160, 206, 223, 193, 232, 84, 52, 1, 251, 160, 206, 223, 249, 232, 84, 52, + 1, 251, 160, 206, 223, 193, 231, 70, 52, 1, 251, 160, 206, 223, 249, 231, + 70, 52, 1, 247, 140, 248, 138, 206, 125, 52, 1, 201, 248, 138, 206, 125, + 52, 1, 236, 155, 248, 138, 206, 125, 52, 1, 184, 248, 138, 206, 125, 52, + 1, 247, 139, 248, 138, 206, 125, 52, 1, 247, 140, 248, 138, 237, 232, + 206, 125, 52, 1, 201, 248, 138, 237, 232, 206, 125, 52, 1, 236, 155, 248, + 138, 237, 232, 206, 125, 52, 1, 184, 248, 138, 237, 232, 206, 125, 52, 1, + 247, 139, 248, 138, 237, 232, 206, 125, 52, 1, 247, 140, 237, 232, 206, + 125, 52, 1, 201, 237, 232, 206, 125, 52, 1, 236, 155, 237, 232, 206, 125, + 52, 1, 184, 237, 232, 206, 125, 52, 1, 247, 139, 237, 232, 206, 125, 52, + 1, 56, 61, 125, 52, 1, 56, 228, 194, 52, 1, 56, 169, 125, 52, 1, 203, 41, + 251, 11, 254, 181, 52, 1, 232, 8, 99, 58, 52, 1, 232, 8, 103, 58, 52, 1, + 232, 8, 247, 149, 76, 52, 1, 232, 8, 239, 223, 247, 149, 76, 52, 1, 184, + 239, 223, 247, 149, 76, 52, 1, 228, 27, 22, 201, 226, 118, 52, 1, 228, + 27, 22, 184, 226, 118, 7, 6, 1, 248, 26, 254, 227, 7, 3, 1, 248, 26, 254, + 227, 7, 6, 1, 248, 26, 254, 248, 7, 3, 1, 248, 26, 254, 248, 7, 6, 1, + 245, 98, 7, 3, 1, 245, 98, 7, 6, 1, 225, 187, 7, 3, 1, 225, 187, 7, 6, 1, + 226, 82, 7, 3, 1, 226, 82, 7, 6, 1, 250, 233, 7, 3, 1, 250, 233, 7, 6, 1, + 250, 234, 2, 251, 54, 7, 3, 1, 250, 234, 2, 251, 54, 7, 1, 3, 6, 247, + 130, 7, 1, 3, 6, 193, 7, 6, 1, 255, 63, 7, 3, 1, 255, 63, 7, 6, 1, 254, + 158, 7, 3, 1, 254, 158, 7, 6, 1, 254, 53, 7, 3, 1, 254, 53, 7, 6, 1, 254, + 41, 7, 3, 1, 254, 41, 7, 6, 1, 254, 42, 2, 169, 125, 7, 3, 1, 254, 42, 2, + 169, 125, 7, 6, 1, 254, 34, 7, 3, 1, 254, 34, 7, 6, 1, 200, 252, 45, 2, + 249, 140, 7, 3, 1, 200, 252, 45, 2, 249, 140, 7, 6, 1, 239, 77, 2, 82, 7, + 3, 1, 239, 77, 2, 82, 7, 6, 1, 239, 77, 2, 250, 1, 82, 7, 3, 1, 239, 77, + 2, 250, 1, 82, 7, 6, 1, 239, 77, 2, 195, 22, 250, 1, 82, 7, 3, 1, 239, + 77, 2, 195, 22, 250, 1, 82, 7, 6, 1, 252, 99, 149, 7, 3, 1, 252, 99, 149, + 7, 6, 1, 238, 47, 2, 201, 82, 7, 3, 1, 238, 47, 2, 201, 82, 7, 6, 1, 130, + 2, 182, 195, 234, 2, 7, 3, 1, 130, 2, 182, 195, 234, 2, 7, 6, 1, 130, 2, + 237, 124, 7, 3, 1, 130, 2, 237, 124, 7, 6, 1, 234, 52, 7, 3, 1, 234, 52, + 7, 6, 1, 233, 245, 2, 195, 226, 188, 250, 34, 7, 3, 1, 233, 245, 2, 195, + 226, 188, 250, 34, 7, 6, 1, 233, 245, 2, 247, 14, 7, 3, 1, 233, 245, 2, + 247, 14, 7, 6, 1, 233, 245, 2, 228, 114, 227, 89, 7, 3, 1, 233, 245, 2, + 228, 114, 227, 89, 7, 6, 1, 232, 140, 2, 195, 226, 188, 250, 34, 7, 3, 1, + 232, 140, 2, 195, 226, 188, 250, 34, 7, 6, 1, 232, 140, 2, 250, 1, 82, 7, + 3, 1, 232, 140, 2, 250, 1, 82, 7, 6, 1, 232, 27, 231, 105, 7, 3, 1, 232, + 27, 231, 105, 7, 6, 1, 231, 63, 231, 105, 7, 3, 1, 231, 63, 231, 105, 7, + 6, 1, 225, 65, 2, 250, 1, 82, 7, 3, 1, 225, 65, 2, 250, 1, 82, 7, 6, 1, + 224, 182, 7, 3, 1, 224, 182, 7, 6, 1, 224, 209, 223, 119, 7, 3, 1, 224, + 209, 223, 119, 7, 6, 1, 226, 197, 2, 82, 7, 3, 1, 226, 197, 2, 82, 7, 6, + 1, 226, 197, 2, 195, 226, 188, 250, 34, 7, 3, 1, 226, 197, 2, 195, 226, + 188, 250, 34, 7, 6, 1, 225, 35, 7, 3, 1, 225, 35, 7, 6, 1, 247, 173, 7, + 3, 1, 247, 173, 7, 6, 1, 239, 205, 7, 3, 1, 239, 205, 7, 6, 1, 251, 44, + 7, 3, 1, 251, 44, 52, 1, 225, 87, 7, 3, 1, 248, 98, 7, 3, 1, 237, 100, 7, + 3, 1, 236, 48, 7, 3, 1, 234, 199, 7, 3, 1, 231, 62, 7, 1, 3, 6, 231, 62, + 7, 3, 1, 225, 244, 7, 3, 1, 225, 145, 7, 6, 1, 239, 241, 222, 222, 7, 3, + 1, 239, 241, 222, 222, 7, 6, 1, 239, 241, 247, 130, 7, 3, 1, 239, 241, + 247, 130, 7, 6, 1, 239, 241, 214, 7, 6, 1, 209, 239, 241, 214, 7, 3, 1, + 209, 239, 241, 214, 7, 6, 1, 209, 149, 7, 3, 1, 209, 149, 7, 6, 1, 239, + 241, 146, 7, 3, 1, 239, 241, 146, 7, 6, 1, 239, 241, 193, 7, 3, 1, 239, + 241, 193, 7, 6, 1, 239, 241, 227, 109, 7, 3, 1, 239, 241, 227, 109, 52, + 1, 184, 251, 102, 255, 41, 52, 1, 251, 61, 52, 1, 229, 63, 247, 204, 53, + 7, 6, 1, 231, 6, 7, 3, 1, 231, 6, 7, 247, 208, 1, 200, 247, 130, 7, 247, + 208, 1, 200, 233, 244, 7, 247, 208, 1, 239, 223, 185, 7, 247, 208, 1, + 244, 81, 237, 126, 7, 247, 208, 1, 254, 120, 185, 227, 183, 235, 244, 1, + 57, 227, 183, 235, 244, 1, 74, 227, 183, 235, 244, 5, 248, 80, 227, 183, + 235, 244, 1, 66, 227, 183, 235, 244, 1, 72, 227, 183, 235, 244, 1, 73, + 227, 183, 235, 244, 5, 245, 134, 227, 183, 235, 244, 1, 238, 150, 227, + 183, 235, 244, 1, 238, 208, 227, 183, 235, 244, 1, 246, 11, 227, 183, + 235, 244, 1, 246, 54, 227, 183, 235, 244, 5, 254, 160, 227, 183, 235, + 244, 1, 251, 68, 227, 183, 235, 244, 1, 251, 150, 227, 183, 235, 244, 1, + 239, 117, 227, 183, 235, 244, 1, 239, 157, 227, 183, 235, 244, 1, 226, 5, + 227, 183, 235, 244, 1, 226, 7, 227, 183, 235, 244, 1, 250, 92, 227, 183, + 235, 244, 1, 250, 100, 227, 183, 235, 244, 1, 96, 227, 183, 235, 244, 1, + 226, 201, 227, 183, 235, 244, 1, 249, 161, 227, 183, 235, 244, 1, 250, 7, + 227, 183, 235, 244, 1, 235, 6, 227, 183, 235, 244, 1, 233, 4, 227, 183, + 235, 244, 1, 233, 79, 227, 183, 235, 244, 1, 252, 138, 227, 183, 235, + 244, 1, 252, 185, 227, 183, 235, 244, 1, 236, 103, 227, 183, 235, 244, 1, + 231, 122, 227, 183, 235, 244, 1, 237, 143, 227, 183, 235, 244, 1, 231, + 91, 227, 183, 235, 244, 1, 228, 169, 227, 183, 235, 244, 1, 244, 227, + 227, 183, 235, 244, 31, 5, 57, 227, 183, 235, 244, 31, 5, 74, 227, 183, + 235, 244, 31, 5, 66, 227, 183, 235, 244, 31, 5, 72, 227, 183, 235, 244, + 31, 5, 234, 52, 227, 183, 235, 244, 233, 0, 237, 17, 227, 183, 235, 244, + 233, 0, 237, 16, 227, 183, 235, 244, 233, 0, 237, 15, 227, 183, 235, 244, + 233, 0, 237, 14, 217, 1, 177, 217, 1, 238, 227, 217, 1, 246, 193, 217, 1, + 235, 137, 217, 1, 252, 39, 217, 1, 251, 204, 217, 1, 239, 179, 217, 1, + 234, 173, 217, 1, 227, 107, 217, 1, 226, 251, 217, 1, 250, 189, 217, 1, + 236, 1, 217, 1, 213, 217, 1, 233, 97, 217, 1, 253, 70, 217, 1, 198, 217, + 1, 226, 44, 217, 1, 226, 37, 217, 1, 248, 70, 217, 1, 224, 173, 217, 1, + 223, 85, 217, 1, 223, 117, 217, 1, 3, 57, 217, 1, 191, 217, 1, 208, 217, + 1, 238, 43, 217, 1, 229, 146, 217, 1, 231, 31, 217, 1, 154, 217, 1, 57, + 217, 1, 74, 217, 1, 66, 217, 1, 72, 217, 1, 73, 217, 1, 232, 138, 217, 1, + 224, 72, 217, 1, 247, 129, 217, 1, 246, 101, 217, 1, 248, 35, 217, 228, + 0, 1, 224, 173, 217, 228, 0, 1, 191, 217, 1, 226, 20, 217, 1, 226, 10, + 217, 1, 250, 117, 217, 1, 235, 18, 217, 1, 254, 203, 191, 217, 1, 224, + 203, 229, 146, 217, 1, 224, 204, 154, 217, 1, 254, 75, 247, 129, 217, + 228, 0, 1, 208, 217, 227, 221, 1, 208, 217, 1, 252, 19, 217, 228, 241, + 245, 119, 76, 217, 47, 245, 119, 76, 217, 165, 229, 139, 217, 165, 47, + 229, 139, 141, 5, 254, 160, 141, 5, 224, 211, 141, 1, 57, 141, 1, 255, + 63, 141, 1, 74, 141, 1, 240, 47, 141, 1, 66, 141, 1, 225, 76, 141, 1, + 153, 146, 141, 1, 153, 231, 100, 141, 1, 153, 149, 141, 1, 153, 237, 149, + 141, 1, 72, 141, 1, 248, 35, 141, 1, 254, 253, 141, 1, 73, 141, 1, 234, + 52, 141, 1, 254, 53, 141, 1, 177, 141, 1, 238, 227, 141, 1, 246, 193, + 141, 1, 246, 66, 141, 1, 235, 137, 141, 1, 252, 39, 141, 1, 251, 204, + 141, 1, 239, 179, 141, 1, 239, 160, 141, 1, 234, 173, 141, 1, 226, 20, + 141, 1, 226, 10, 141, 1, 250, 117, 141, 1, 250, 101, 141, 1, 235, 18, + 141, 1, 227, 107, 141, 1, 226, 251, 141, 1, 250, 189, 141, 1, 250, 22, + 141, 1, 236, 1, 141, 1, 213, 141, 1, 233, 97, 141, 1, 253, 70, 141, 1, + 252, 190, 141, 1, 198, 141, 1, 191, 141, 1, 208, 141, 1, 238, 43, 141, 1, + 225, 64, 141, 1, 229, 146, 141, 1, 228, 110, 141, 1, 231, 31, 141, 1, + 154, 141, 1, 237, 148, 141, 251, 33, 5, 245, 166, 141, 31, 5, 255, 63, + 141, 31, 5, 74, 141, 31, 5, 240, 47, 141, 31, 5, 66, 141, 31, 5, 225, 76, + 141, 31, 5, 153, 146, 141, 31, 5, 153, 231, 100, 141, 31, 5, 153, 149, + 141, 31, 5, 153, 237, 149, 141, 31, 5, 72, 141, 31, 5, 248, 35, 141, 31, + 5, 254, 253, 141, 31, 5, 73, 141, 31, 5, 234, 52, 141, 31, 5, 254, 53, + 141, 5, 224, 216, 141, 250, 151, 141, 47, 250, 151, 141, 21, 223, 89, + 141, 21, 118, 141, 21, 113, 141, 21, 166, 141, 21, 158, 141, 21, 173, + 141, 21, 183, 141, 21, 194, 141, 21, 187, 141, 21, 192, 239, 9, 237, 194, + 21, 223, 89, 239, 9, 237, 194, 21, 118, 239, 9, 237, 194, 21, 113, 239, + 9, 237, 194, 21, 166, 239, 9, 237, 194, 21, 158, 239, 9, 237, 194, 21, + 173, 239, 9, 237, 194, 21, 183, 239, 9, 237, 194, 21, 194, 239, 9, 237, + 194, 21, 187, 239, 9, 237, 194, 21, 192, 239, 9, 237, 194, 1, 177, 239, + 9, 237, 194, 1, 238, 227, 239, 9, 237, 194, 1, 246, 193, 239, 9, 237, + 194, 1, 235, 137, 239, 9, 237, 194, 1, 231, 31, 239, 9, 237, 194, 1, 229, + 146, 239, 9, 237, 194, 1, 223, 117, 239, 9, 237, 194, 1, 234, 173, 239, + 9, 237, 194, 1, 227, 107, 239, 9, 237, 194, 1, 244, 147, 239, 9, 237, + 194, 1, 236, 1, 239, 9, 237, 194, 1, 213, 239, 9, 237, 194, 1, 233, 97, + 239, 9, 237, 194, 1, 198, 239, 9, 237, 194, 1, 250, 189, 239, 9, 237, + 194, 1, 253, 70, 239, 9, 237, 194, 1, 208, 239, 9, 237, 194, 1, 191, 239, + 9, 237, 194, 1, 238, 43, 239, 9, 237, 194, 1, 224, 173, 239, 9, 237, 194, + 1, 226, 251, 239, 9, 237, 194, 1, 154, 239, 9, 237, 194, 1, 225, 64, 239, + 9, 237, 194, 1, 252, 39, 239, 9, 237, 194, 1, 57, 239, 9, 237, 194, 1, + 234, 88, 239, 9, 237, 194, 1, 74, 239, 9, 237, 194, 1, 234, 52, 239, 9, + 237, 194, 31, 225, 159, 239, 9, 237, 194, 31, 72, 239, 9, 237, 194, 31, + 66, 239, 9, 237, 194, 31, 248, 35, 239, 9, 237, 194, 31, 73, 239, 9, 237, + 194, 206, 233, 15, 239, 9, 237, 194, 206, 252, 29, 239, 9, 237, 194, 206, + 252, 30, 233, 15, 239, 9, 237, 194, 5, 250, 206, 239, 9, 237, 194, 5, + 229, 22, 231, 223, 1, 177, 231, 223, 1, 246, 193, 231, 223, 1, 235, 137, + 231, 223, 1, 227, 107, 231, 223, 1, 250, 189, 231, 223, 1, 236, 1, 231, + 223, 1, 213, 231, 223, 1, 253, 70, 231, 223, 1, 198, 231, 223, 1, 252, + 39, 231, 223, 1, 239, 179, 231, 223, 1, 234, 173, 231, 223, 1, 231, 31, + 231, 223, 1, 208, 231, 223, 1, 238, 43, 231, 223, 1, 191, 231, 223, 1, + 224, 173, 231, 223, 1, 154, 231, 223, 1, 236, 245, 231, 223, 1, 235, 122, + 231, 223, 1, 235, 189, 231, 223, 1, 234, 153, 231, 223, 1, 57, 231, 223, + 31, 5, 74, 231, 223, 31, 5, 66, 231, 223, 31, 5, 72, 231, 223, 31, 5, + 254, 253, 231, 223, 31, 5, 73, 231, 223, 31, 5, 254, 53, 231, 223, 31, 5, + 247, 165, 231, 223, 31, 5, 248, 56, 231, 223, 251, 33, 5, 235, 139, 231, + 223, 251, 33, 5, 199, 231, 223, 251, 33, 5, 146, 231, 223, 251, 33, 5, + 212, 231, 223, 224, 216, 231, 223, 230, 206, 76, 136, 1, 57, 136, 1, 74, + 136, 1, 66, 136, 1, 72, 136, 1, 254, 253, 136, 1, 73, 136, 1, 177, 136, + 1, 238, 227, 136, 1, 246, 193, 136, 1, 246, 66, 136, 1, 235, 98, 136, 1, + 235, 137, 136, 1, 251, 204, 136, 1, 251, 171, 136, 1, 239, 179, 136, 1, + 239, 160, 136, 1, 235, 91, 136, 1, 235, 93, 136, 1, 235, 92, 136, 1, 227, + 107, 136, 1, 226, 251, 136, 1, 250, 189, 136, 1, 250, 22, 136, 1, 234, + 203, 136, 1, 236, 1, 136, 1, 250, 117, 136, 1, 213, 136, 1, 232, 230, + 136, 1, 233, 97, 136, 1, 253, 70, 136, 1, 252, 190, 136, 1, 236, 61, 136, + 1, 198, 136, 1, 253, 16, 136, 1, 191, 136, 1, 208, 136, 1, 238, 43, 136, + 1, 225, 64, 136, 1, 228, 110, 136, 1, 231, 31, 136, 1, 154, 136, 31, 5, + 255, 63, 136, 31, 5, 74, 136, 31, 5, 240, 47, 136, 31, 5, 248, 22, 136, + 31, 5, 66, 136, 31, 5, 234, 88, 136, 31, 5, 73, 136, 31, 5, 254, 253, + 136, 31, 5, 254, 53, 136, 31, 5, 225, 159, 136, 251, 33, 5, 191, 136, + 251, 33, 5, 208, 136, 251, 33, 5, 238, 43, 136, 251, 33, 5, 224, 173, + 136, 1, 35, 239, 76, 136, 1, 35, 214, 136, 1, 35, 235, 139, 136, 251, 33, + 5, 35, 235, 139, 136, 1, 35, 251, 205, 136, 1, 35, 227, 109, 136, 1, 35, + 199, 136, 1, 35, 233, 244, 136, 1, 35, 224, 25, 136, 1, 35, 146, 136, 1, + 35, 149, 136, 1, 35, 228, 111, 136, 251, 33, 5, 35, 185, 136, 251, 33, 5, + 35, 212, 136, 21, 223, 89, 136, 21, 118, 136, 21, 113, 136, 21, 166, 136, + 21, 158, 136, 21, 173, 136, 21, 183, 136, 21, 194, 136, 21, 187, 136, 21, + 192, 136, 232, 171, 228, 134, 136, 232, 171, 250, 151, 136, 232, 171, 47, + 250, 151, 136, 232, 171, 226, 66, 250, 151, 9, 11, 242, 31, 9, 11, 242, + 30, 9, 11, 242, 29, 9, 11, 242, 28, 9, 11, 242, 27, 9, 11, 242, 26, 9, + 11, 242, 25, 9, 11, 242, 24, 9, 11, 242, 23, 9, 11, 242, 22, 9, 11, 242, + 21, 9, 11, 242, 20, 9, 11, 242, 19, 9, 11, 242, 18, 9, 11, 242, 17, 9, + 11, 242, 16, 9, 11, 242, 15, 9, 11, 242, 14, 9, 11, 242, 13, 9, 11, 242, + 12, 9, 11, 242, 11, 9, 11, 242, 10, 9, 11, 242, 9, 9, 11, 242, 8, 9, 11, + 242, 7, 9, 11, 242, 6, 9, 11, 242, 5, 9, 11, 242, 4, 9, 11, 242, 3, 9, + 11, 242, 2, 9, 11, 242, 1, 9, 11, 242, 0, 9, 11, 241, 255, 9, 11, 241, + 254, 9, 11, 241, 253, 9, 11, 241, 252, 9, 11, 241, 251, 9, 11, 241, 250, + 9, 11, 241, 249, 9, 11, 241, 248, 9, 11, 241, 247, 9, 11, 241, 246, 9, + 11, 241, 245, 9, 11, 241, 244, 9, 11, 241, 243, 9, 11, 241, 242, 9, 11, + 241, 241, 9, 11, 241, 240, 9, 11, 241, 239, 9, 11, 241, 238, 9, 11, 241, + 237, 9, 11, 241, 236, 9, 11, 241, 235, 9, 11, 241, 234, 9, 11, 241, 233, + 9, 11, 241, 232, 9, 11, 241, 231, 9, 11, 241, 230, 9, 11, 241, 229, 9, + 11, 241, 228, 9, 11, 241, 227, 9, 11, 241, 226, 9, 11, 241, 225, 9, 11, + 241, 224, 9, 11, 241, 223, 9, 11, 241, 222, 9, 11, 241, 221, 9, 11, 241, + 220, 9, 11, 241, 219, 9, 11, 241, 218, 9, 11, 241, 217, 9, 11, 241, 216, + 9, 11, 241, 215, 9, 11, 241, 214, 9, 11, 241, 213, 9, 11, 241, 212, 9, + 11, 241, 211, 9, 11, 241, 210, 9, 11, 241, 209, 9, 11, 241, 208, 9, 11, + 241, 207, 9, 11, 241, 206, 9, 11, 241, 205, 9, 11, 241, 204, 9, 11, 241, + 203, 9, 11, 241, 202, 9, 11, 241, 201, 9, 11, 241, 200, 9, 11, 241, 199, + 9, 11, 241, 198, 9, 11, 241, 197, 9, 11, 241, 196, 9, 11, 241, 195, 9, + 11, 241, 194, 9, 11, 241, 193, 9, 11, 241, 192, 9, 11, 241, 191, 9, 11, + 241, 190, 9, 11, 241, 189, 9, 11, 241, 188, 9, 11, 241, 187, 9, 11, 241, + 186, 9, 11, 241, 185, 9, 11, 241, 184, 9, 11, 241, 183, 9, 11, 241, 182, + 9, 11, 241, 181, 9, 11, 241, 180, 9, 11, 241, 179, 9, 11, 241, 178, 9, + 11, 241, 177, 9, 11, 241, 176, 9, 11, 241, 175, 9, 11, 241, 174, 9, 11, + 241, 173, 9, 11, 241, 172, 9, 11, 241, 171, 9, 11, 241, 170, 9, 11, 241, + 169, 9, 11, 241, 168, 9, 11, 241, 167, 9, 11, 241, 166, 9, 11, 241, 165, + 9, 11, 241, 164, 9, 11, 241, 163, 9, 11, 241, 162, 9, 11, 241, 161, 9, + 11, 241, 160, 9, 11, 241, 159, 9, 11, 241, 158, 9, 11, 241, 157, 9, 11, + 241, 156, 9, 11, 241, 155, 9, 11, 241, 154, 9, 11, 241, 153, 9, 11, 241, + 152, 9, 11, 241, 151, 9, 11, 241, 150, 9, 11, 241, 149, 9, 11, 241, 148, + 9, 11, 241, 147, 9, 11, 241, 146, 9, 11, 241, 145, 9, 11, 241, 144, 9, + 11, 241, 143, 9, 11, 241, 142, 9, 11, 241, 141, 9, 11, 241, 140, 9, 11, + 241, 139, 9, 11, 241, 138, 9, 11, 241, 137, 9, 11, 241, 136, 9, 11, 241, + 135, 9, 11, 241, 134, 9, 11, 241, 133, 9, 11, 241, 132, 9, 11, 241, 131, + 9, 11, 241, 130, 9, 11, 241, 129, 9, 11, 241, 128, 9, 11, 241, 127, 9, + 11, 241, 126, 9, 11, 241, 125, 9, 11, 241, 124, 9, 11, 241, 123, 9, 11, + 241, 122, 9, 11, 241, 121, 9, 11, 241, 120, 9, 11, 241, 119, 9, 11, 241, + 118, 9, 11, 241, 117, 9, 11, 241, 116, 9, 11, 241, 115, 9, 11, 241, 114, + 9, 11, 241, 113, 9, 11, 241, 112, 9, 11, 241, 111, 9, 11, 241, 110, 9, + 11, 241, 109, 9, 11, 241, 108, 9, 11, 241, 107, 9, 11, 241, 106, 9, 11, + 241, 105, 9, 11, 241, 104, 9, 11, 241, 103, 9, 11, 241, 102, 9, 11, 241, + 101, 9, 11, 241, 100, 9, 11, 241, 99, 9, 11, 241, 98, 9, 11, 241, 97, 9, + 11, 241, 96, 9, 11, 241, 95, 9, 11, 241, 94, 9, 11, 241, 93, 9, 11, 241, + 92, 9, 11, 241, 91, 9, 11, 241, 90, 9, 11, 241, 89, 9, 11, 241, 88, 9, + 11, 241, 87, 9, 11, 241, 86, 9, 11, 241, 85, 9, 11, 241, 84, 9, 11, 241, + 83, 9, 11, 241, 82, 9, 11, 241, 81, 9, 11, 241, 80, 9, 11, 241, 79, 9, + 11, 241, 78, 9, 11, 241, 77, 9, 11, 241, 76, 9, 11, 241, 75, 9, 11, 241, + 74, 9, 11, 241, 73, 9, 11, 241, 72, 9, 11, 241, 71, 9, 11, 241, 70, 9, + 11, 241, 69, 9, 11, 241, 68, 9, 11, 241, 67, 9, 11, 241, 66, 9, 11, 241, + 65, 9, 11, 241, 64, 9, 11, 241, 63, 9, 11, 241, 62, 9, 11, 241, 61, 9, + 11, 241, 60, 9, 11, 241, 59, 9, 11, 241, 58, 9, 11, 241, 57, 9, 11, 241, + 56, 9, 11, 241, 55, 9, 11, 241, 54, 9, 11, 241, 53, 9, 11, 241, 52, 9, + 11, 241, 51, 9, 11, 241, 50, 9, 11, 241, 49, 9, 11, 241, 48, 9, 11, 241, + 47, 9, 11, 241, 46, 9, 11, 241, 45, 9, 11, 241, 44, 9, 11, 241, 43, 9, + 11, 241, 42, 9, 11, 241, 41, 9, 11, 241, 40, 9, 11, 241, 39, 9, 11, 241, + 38, 9, 11, 241, 37, 9, 11, 241, 36, 9, 11, 241, 35, 9, 11, 241, 34, 9, + 11, 241, 33, 9, 11, 241, 32, 9, 11, 241, 31, 9, 11, 241, 30, 9, 11, 241, + 29, 9, 11, 241, 28, 9, 11, 241, 27, 9, 11, 241, 26, 9, 11, 241, 25, 9, + 11, 241, 24, 9, 11, 241, 23, 9, 11, 241, 22, 9, 11, 241, 21, 9, 11, 241, + 20, 9, 11, 241, 19, 9, 11, 241, 18, 9, 11, 241, 17, 9, 11, 241, 16, 9, + 11, 241, 15, 9, 11, 241, 14, 9, 11, 241, 13, 9, 11, 241, 12, 9, 11, 241, + 11, 9, 11, 241, 10, 9, 11, 241, 9, 9, 11, 241, 8, 9, 11, 241, 7, 9, 11, + 241, 6, 9, 11, 241, 5, 9, 11, 241, 4, 9, 11, 241, 3, 9, 11, 241, 2, 9, + 11, 241, 1, 9, 11, 241, 0, 9, 11, 240, 255, 9, 11, 240, 254, 9, 11, 240, + 253, 9, 11, 240, 252, 9, 11, 240, 251, 9, 11, 240, 250, 9, 11, 240, 249, + 9, 11, 240, 248, 9, 11, 240, 247, 9, 11, 240, 246, 9, 11, 240, 245, 9, + 11, 240, 244, 9, 11, 240, 243, 9, 11, 240, 242, 9, 11, 240, 241, 9, 11, + 240, 240, 9, 11, 240, 239, 9, 11, 240, 238, 9, 11, 240, 237, 9, 11, 240, + 236, 9, 11, 240, 235, 9, 11, 240, 234, 9, 11, 240, 233, 9, 11, 240, 232, + 9, 11, 240, 231, 9, 11, 240, 230, 9, 11, 240, 229, 9, 11, 240, 228, 9, + 11, 240, 227, 9, 11, 240, 226, 9, 11, 240, 225, 9, 11, 240, 224, 9, 11, + 240, 223, 9, 11, 240, 222, 9, 11, 240, 221, 9, 11, 240, 220, 9, 11, 240, + 219, 9, 11, 240, 218, 9, 11, 240, 217, 9, 11, 240, 216, 9, 11, 240, 215, + 9, 11, 240, 214, 9, 11, 240, 213, 9, 11, 240, 212, 9, 11, 240, 211, 9, + 11, 240, 210, 9, 11, 240, 209, 9, 11, 240, 208, 9, 11, 240, 207, 9, 11, + 240, 206, 9, 11, 240, 205, 9, 11, 240, 204, 9, 11, 240, 203, 9, 11, 240, + 202, 9, 11, 240, 201, 9, 11, 240, 200, 9, 11, 240, 199, 9, 11, 240, 198, + 9, 11, 240, 197, 9, 11, 240, 196, 9, 11, 240, 195, 9, 11, 240, 194, 9, + 11, 240, 193, 9, 11, 240, 192, 9, 11, 240, 191, 9, 11, 240, 190, 9, 11, + 240, 189, 9, 11, 240, 188, 9, 11, 240, 187, 9, 11, 240, 186, 9, 11, 240, + 185, 9, 11, 240, 184, 9, 11, 240, 183, 9, 11, 240, 182, 9, 11, 240, 181, + 9, 11, 240, 180, 9, 11, 240, 179, 9, 11, 240, 178, 9, 11, 240, 177, 9, + 11, 240, 176, 9, 11, 240, 175, 9, 11, 240, 174, 9, 11, 240, 173, 9, 11, + 240, 172, 9, 11, 240, 171, 9, 11, 240, 170, 9, 11, 240, 169, 9, 11, 240, + 168, 9, 11, 240, 167, 9, 11, 240, 166, 9, 11, 240, 165, 9, 11, 240, 164, + 9, 11, 240, 163, 9, 11, 240, 162, 9, 11, 240, 161, 9, 11, 240, 160, 9, + 11, 240, 159, 9, 11, 240, 158, 9, 11, 240, 157, 9, 11, 240, 156, 9, 11, + 240, 155, 9, 11, 240, 154, 9, 11, 240, 153, 9, 11, 240, 152, 9, 11, 240, + 151, 9, 11, 240, 150, 9, 11, 240, 149, 9, 11, 240, 148, 9, 11, 240, 147, + 9, 11, 240, 146, 9, 11, 240, 145, 9, 11, 240, 144, 9, 11, 240, 143, 9, + 11, 240, 142, 9, 11, 240, 141, 9, 11, 240, 140, 9, 11, 240, 139, 9, 11, + 240, 138, 9, 11, 240, 137, 9, 11, 240, 136, 9, 11, 240, 135, 9, 11, 240, + 134, 9, 11, 240, 133, 9, 11, 240, 132, 9, 11, 240, 131, 9, 11, 240, 130, + 9, 11, 240, 129, 9, 11, 240, 128, 9, 11, 240, 127, 9, 11, 240, 126, 9, + 11, 240, 125, 9, 11, 240, 124, 9, 11, 240, 123, 9, 11, 240, 122, 9, 11, + 240, 121, 9, 11, 240, 120, 9, 11, 240, 119, 9, 11, 240, 118, 9, 11, 240, + 117, 9, 11, 240, 116, 9, 11, 240, 115, 9, 11, 240, 114, 9, 11, 240, 113, + 9, 11, 240, 112, 9, 11, 240, 111, 9, 11, 240, 110, 9, 11, 240, 109, 9, + 11, 240, 108, 9, 11, 240, 107, 9, 11, 240, 106, 9, 11, 240, 105, 9, 11, + 240, 104, 9, 11, 240, 103, 9, 11, 240, 102, 9, 11, 240, 101, 9, 11, 240, + 100, 9, 11, 240, 99, 9, 11, 240, 98, 9, 11, 240, 97, 9, 11, 240, 96, 9, + 11, 240, 95, 9, 11, 240, 94, 9, 11, 240, 93, 9, 11, 240, 92, 9, 11, 240, + 91, 9, 11, 240, 90, 9, 11, 240, 89, 9, 11, 240, 88, 9, 11, 240, 87, 9, + 11, 240, 86, 9, 11, 240, 85, 9, 11, 240, 84, 9, 11, 240, 83, 9, 11, 240, + 82, 9, 11, 240, 81, 9, 11, 240, 80, 9, 11, 240, 79, 9, 11, 240, 78, 9, + 11, 240, 77, 7, 3, 20, 247, 74, 7, 3, 20, 247, 70, 7, 3, 20, 247, 33, 7, + 3, 20, 247, 73, 7, 3, 20, 247, 72, 7, 3, 20, 182, 231, 35, 227, 109, 7, + 3, 20, 228, 70, 120, 3, 20, 236, 211, 234, 232, 120, 3, 20, 236, 211, + 248, 39, 120, 3, 20, 236, 211, 239, 252, 120, 3, 20, 224, 231, 234, 232, + 120, 3, 20, 236, 211, 224, 67, 78, 1, 223, 176, 2, 245, 58, 78, 232, 255, + 239, 100, 225, 53, 78, 20, 223, 200, 223, 176, 223, 176, 233, 166, 78, 1, + 254, 201, 254, 29, 78, 1, 224, 117, 254, 227, 78, 1, 224, 117, 250, 160, + 78, 1, 224, 117, 245, 121, 78, 1, 224, 117, 239, 59, 78, 1, 224, 117, + 238, 12, 78, 1, 224, 117, 35, 236, 215, 78, 1, 224, 117, 231, 205, 78, 1, + 224, 117, 227, 58, 78, 1, 254, 201, 79, 53, 78, 1, 229, 79, 2, 229, 79, + 249, 140, 78, 1, 229, 79, 2, 228, 244, 249, 140, 78, 1, 229, 79, 2, 250, + 176, 22, 229, 79, 249, 140, 78, 1, 229, 79, 2, 250, 176, 22, 228, 244, + 249, 140, 78, 1, 92, 2, 233, 166, 78, 1, 92, 2, 232, 126, 78, 1, 92, 2, + 237, 27, 78, 1, 252, 201, 2, 250, 175, 78, 1, 246, 35, 2, 250, 175, 78, + 1, 250, 161, 2, 250, 175, 78, 1, 245, 122, 2, 237, 27, 78, 1, 225, 47, 2, + 250, 175, 78, 1, 223, 100, 2, 250, 175, 78, 1, 227, 11, 2, 250, 175, 78, + 1, 223, 176, 2, 250, 175, 78, 1, 35, 239, 60, 2, 250, 175, 78, 1, 239, + 60, 2, 250, 175, 78, 1, 238, 13, 2, 250, 175, 78, 1, 236, 216, 2, 250, + 175, 78, 1, 234, 195, 2, 250, 175, 78, 1, 231, 3, 2, 250, 175, 78, 1, 35, + 233, 152, 2, 250, 175, 78, 1, 233, 152, 2, 250, 175, 78, 1, 226, 42, 2, + 250, 175, 78, 1, 232, 93, 2, 250, 175, 78, 1, 231, 206, 2, 250, 175, 78, + 1, 229, 79, 2, 250, 175, 78, 1, 227, 59, 2, 250, 175, 78, 1, 225, 47, 2, + 244, 223, 78, 1, 252, 201, 2, 232, 14, 78, 1, 239, 60, 2, 232, 14, 78, 1, + 233, 152, 2, 232, 14, 78, 20, 92, 238, 12, 10, 1, 92, 224, 158, 44, 15, + 10, 1, 92, 224, 158, 35, 15, 10, 1, 252, 231, 44, 15, 10, 1, 252, 231, + 35, 15, 10, 1, 252, 231, 59, 15, 10, 1, 252, 231, 124, 15, 10, 1, 233, + 141, 44, 15, 10, 1, 233, 141, 35, 15, 10, 1, 233, 141, 59, 15, 10, 1, + 233, 141, 124, 15, 10, 1, 252, 222, 44, 15, 10, 1, 252, 222, 35, 15, 10, + 1, 252, 222, 59, 15, 10, 1, 252, 222, 124, 15, 10, 1, 226, 13, 44, 15, + 10, 1, 226, 13, 35, 15, 10, 1, 226, 13, 59, 15, 10, 1, 226, 13, 124, 15, + 10, 1, 227, 33, 44, 15, 10, 1, 227, 33, 35, 15, 10, 1, 227, 33, 59, 15, + 10, 1, 227, 33, 124, 15, 10, 1, 226, 15, 44, 15, 10, 1, 226, 15, 35, 15, + 10, 1, 226, 15, 59, 15, 10, 1, 226, 15, 124, 15, 10, 1, 225, 37, 44, 15, + 10, 1, 225, 37, 35, 15, 10, 1, 225, 37, 59, 15, 10, 1, 225, 37, 124, 15, + 10, 1, 233, 139, 44, 15, 10, 1, 233, 139, 35, 15, 10, 1, 233, 139, 59, + 15, 10, 1, 233, 139, 124, 15, 10, 1, 248, 76, 44, 15, 10, 1, 248, 76, 35, + 15, 10, 1, 248, 76, 59, 15, 10, 1, 248, 76, 124, 15, 10, 1, 234, 167, 44, + 15, 10, 1, 234, 167, 35, 15, 10, 1, 234, 167, 59, 15, 10, 1, 234, 167, + 124, 15, 10, 1, 227, 49, 44, 15, 10, 1, 227, 49, 35, 15, 10, 1, 227, 49, + 59, 15, 10, 1, 227, 49, 124, 15, 10, 1, 227, 47, 44, 15, 10, 1, 227, 47, + 35, 15, 10, 1, 227, 47, 59, 15, 10, 1, 227, 47, 124, 15, 10, 1, 250, 115, + 44, 15, 10, 1, 250, 115, 35, 15, 10, 1, 250, 172, 44, 15, 10, 1, 250, + 172, 35, 15, 10, 1, 248, 100, 44, 15, 10, 1, 248, 100, 35, 15, 10, 1, + 250, 113, 44, 15, 10, 1, 250, 113, 35, 15, 10, 1, 239, 166, 44, 15, 10, + 1, 239, 166, 35, 15, 10, 1, 231, 96, 44, 15, 10, 1, 231, 96, 35, 15, 10, + 1, 238, 252, 44, 15, 10, 1, 238, 252, 35, 15, 10, 1, 238, 252, 59, 15, + 10, 1, 238, 252, 124, 15, 10, 1, 246, 181, 44, 15, 10, 1, 246, 181, 35, + 15, 10, 1, 246, 181, 59, 15, 10, 1, 246, 181, 124, 15, 10, 1, 245, 211, + 44, 15, 10, 1, 245, 211, 35, 15, 10, 1, 245, 211, 59, 15, 10, 1, 245, + 211, 124, 15, 10, 1, 235, 106, 44, 15, 10, 1, 235, 106, 35, 15, 10, 1, + 235, 106, 59, 15, 10, 1, 235, 106, 124, 15, 10, 1, 234, 252, 246, 51, 44, + 15, 10, 1, 234, 252, 246, 51, 35, 15, 10, 1, 231, 126, 44, 15, 10, 1, + 231, 126, 35, 15, 10, 1, 231, 126, 59, 15, 10, 1, 231, 126, 124, 15, 10, + 1, 245, 108, 2, 62, 64, 44, 15, 10, 1, 245, 108, 2, 62, 64, 35, 15, 10, + 1, 245, 108, 246, 9, 44, 15, 10, 1, 245, 108, 246, 9, 35, 15, 10, 1, 245, + 108, 246, 9, 59, 15, 10, 1, 245, 108, 246, 9, 124, 15, 10, 1, 245, 108, + 249, 158, 44, 15, 10, 1, 245, 108, 249, 158, 35, 15, 10, 1, 245, 108, + 249, 158, 59, 15, 10, 1, 245, 108, 249, 158, 124, 15, 10, 1, 62, 253, 30, + 44, 15, 10, 1, 62, 253, 30, 35, 15, 10, 1, 62, 253, 30, 2, 164, 64, 44, + 15, 10, 1, 62, 253, 30, 2, 164, 64, 35, 15, 10, 1, 235, 140, 44, 15, 10, + 1, 235, 140, 35, 15, 10, 1, 235, 140, 59, 15, 10, 1, 235, 140, 124, 15, + 10, 1, 97, 44, 15, 10, 1, 97, 35, 15, 10, 1, 234, 89, 44, 15, 10, 1, 234, + 89, 35, 15, 10, 1, 223, 159, 44, 15, 10, 1, 223, 159, 35, 15, 10, 1, 97, + 2, 164, 64, 44, 15, 10, 1, 225, 43, 44, 15, 10, 1, 225, 43, 35, 15, 10, + 1, 238, 185, 234, 89, 44, 15, 10, 1, 238, 185, 234, 89, 35, 15, 10, 1, + 238, 185, 223, 159, 44, 15, 10, 1, 238, 185, 223, 159, 35, 15, 10, 1, + 161, 44, 15, 10, 1, 161, 35, 15, 10, 1, 161, 59, 15, 10, 1, 161, 124, 15, + 10, 1, 225, 155, 239, 7, 238, 185, 92, 175, 59, 15, 10, 1, 225, 155, 239, + 7, 238, 185, 92, 175, 124, 15, 10, 20, 62, 2, 164, 64, 2, 92, 44, 15, 10, + 20, 62, 2, 164, 64, 2, 92, 35, 15, 10, 20, 62, 2, 164, 64, 2, 255, 20, + 44, 15, 10, 20, 62, 2, 164, 64, 2, 255, 20, 35, 15, 10, 20, 62, 2, 164, + 64, 2, 224, 145, 44, 15, 10, 20, 62, 2, 164, 64, 2, 224, 145, 35, 15, 10, + 20, 62, 2, 164, 64, 2, 97, 44, 15, 10, 20, 62, 2, 164, 64, 2, 97, 35, 15, + 10, 20, 62, 2, 164, 64, 2, 234, 89, 44, 15, 10, 20, 62, 2, 164, 64, 2, + 234, 89, 35, 15, 10, 20, 62, 2, 164, 64, 2, 223, 159, 44, 15, 10, 20, 62, + 2, 164, 64, 2, 223, 159, 35, 15, 10, 20, 62, 2, 164, 64, 2, 161, 44, 15, + 10, 20, 62, 2, 164, 64, 2, 161, 35, 15, 10, 20, 62, 2, 164, 64, 2, 161, + 59, 15, 10, 20, 225, 155, 238, 185, 62, 2, 164, 64, 2, 92, 175, 44, 15, + 10, 20, 225, 155, 238, 185, 62, 2, 164, 64, 2, 92, 175, 35, 15, 10, 20, + 225, 155, 238, 185, 62, 2, 164, 64, 2, 92, 175, 59, 15, 10, 1, 247, 107, + 62, 44, 15, 10, 1, 247, 107, 62, 35, 15, 10, 1, 247, 107, 62, 59, 15, 10, + 1, 247, 107, 62, 124, 15, 10, 20, 62, 2, 164, 64, 2, 123, 44, 15, 10, 20, + 62, 2, 164, 64, 2, 101, 44, 15, 10, 20, 62, 2, 164, 64, 2, 55, 44, 15, + 10, 20, 62, 2, 164, 64, 2, 92, 175, 44, 15, 10, 20, 62, 2, 164, 64, 2, + 62, 44, 15, 10, 20, 252, 224, 2, 123, 44, 15, 10, 20, 252, 224, 2, 101, + 44, 15, 10, 20, 252, 224, 2, 202, 44, 15, 10, 20, 252, 224, 2, 55, 44, + 15, 10, 20, 252, 224, 2, 92, 175, 44, 15, 10, 20, 252, 224, 2, 62, 44, + 15, 10, 20, 227, 35, 2, 123, 44, 15, 10, 20, 227, 35, 2, 101, 44, 15, 10, + 20, 227, 35, 2, 202, 44, 15, 10, 20, 227, 35, 2, 55, 44, 15, 10, 20, 227, + 35, 2, 92, 175, 44, 15, 10, 20, 227, 35, 2, 62, 44, 15, 10, 20, 226, 237, + 2, 123, 44, 15, 10, 20, 226, 237, 2, 55, 44, 15, 10, 20, 226, 237, 2, 92, + 175, 44, 15, 10, 20, 226, 237, 2, 62, 44, 15, 10, 20, 123, 2, 101, 44, + 15, 10, 20, 123, 2, 55, 44, 15, 10, 20, 101, 2, 123, 44, 15, 10, 20, 101, + 2, 55, 44, 15, 10, 20, 202, 2, 123, 44, 15, 10, 20, 202, 2, 101, 44, 15, + 10, 20, 202, 2, 55, 44, 15, 10, 20, 230, 202, 2, 123, 44, 15, 10, 20, + 230, 202, 2, 101, 44, 15, 10, 20, 230, 202, 2, 202, 44, 15, 10, 20, 230, + 202, 2, 55, 44, 15, 10, 20, 231, 25, 2, 101, 44, 15, 10, 20, 231, 25, 2, + 55, 44, 15, 10, 20, 250, 185, 2, 123, 44, 15, 10, 20, 250, 185, 2, 101, + 44, 15, 10, 20, 250, 185, 2, 202, 44, 15, 10, 20, 250, 185, 2, 55, 44, + 15, 10, 20, 227, 92, 2, 101, 44, 15, 10, 20, 227, 92, 2, 55, 44, 15, 10, + 20, 223, 114, 2, 55, 44, 15, 10, 20, 254, 249, 2, 123, 44, 15, 10, 20, + 254, 249, 2, 55, 44, 15, 10, 20, 246, 64, 2, 123, 44, 15, 10, 20, 246, + 64, 2, 55, 44, 15, 10, 20, 247, 88, 2, 123, 44, 15, 10, 20, 247, 88, 2, + 101, 44, 15, 10, 20, 247, 88, 2, 202, 44, 15, 10, 20, 247, 88, 2, 55, 44, + 15, 10, 20, 247, 88, 2, 92, 175, 44, 15, 10, 20, 247, 88, 2, 62, 44, 15, + 10, 20, 232, 132, 2, 101, 44, 15, 10, 20, 232, 132, 2, 55, 44, 15, 10, + 20, 232, 132, 2, 92, 175, 44, 15, 10, 20, 232, 132, 2, 62, 44, 15, 10, + 20, 239, 60, 2, 92, 44, 15, 10, 20, 239, 60, 2, 123, 44, 15, 10, 20, 239, + 60, 2, 101, 44, 15, 10, 20, 239, 60, 2, 202, 44, 15, 10, 20, 239, 60, 2, + 216, 44, 15, 10, 20, 239, 60, 2, 55, 44, 15, 10, 20, 239, 60, 2, 92, 175, + 44, 15, 10, 20, 239, 60, 2, 62, 44, 15, 10, 20, 216, 2, 123, 44, 15, 10, + 20, 216, 2, 101, 44, 15, 10, 20, 216, 2, 202, 44, 15, 10, 20, 216, 2, 55, + 44, 15, 10, 20, 216, 2, 92, 175, 44, 15, 10, 20, 216, 2, 62, 44, 15, 10, + 20, 55, 2, 123, 44, 15, 10, 20, 55, 2, 101, 44, 15, 10, 20, 55, 2, 202, + 44, 15, 10, 20, 55, 2, 55, 44, 15, 10, 20, 55, 2, 92, 175, 44, 15, 10, + 20, 55, 2, 62, 44, 15, 10, 20, 234, 252, 2, 123, 44, 15, 10, 20, 234, + 252, 2, 101, 44, 15, 10, 20, 234, 252, 2, 202, 44, 15, 10, 20, 234, 252, + 2, 55, 44, 15, 10, 20, 234, 252, 2, 92, 175, 44, 15, 10, 20, 234, 252, 2, + 62, 44, 15, 10, 20, 245, 108, 2, 123, 44, 15, 10, 20, 245, 108, 2, 55, + 44, 15, 10, 20, 245, 108, 2, 92, 175, 44, 15, 10, 20, 245, 108, 2, 62, + 44, 15, 10, 20, 62, 2, 123, 44, 15, 10, 20, 62, 2, 101, 44, 15, 10, 20, + 62, 2, 202, 44, 15, 10, 20, 62, 2, 55, 44, 15, 10, 20, 62, 2, 92, 175, + 44, 15, 10, 20, 62, 2, 62, 44, 15, 10, 20, 226, 246, 2, 227, 219, 92, 44, + 15, 10, 20, 231, 226, 2, 227, 219, 92, 44, 15, 10, 20, 92, 175, 2, 227, + 219, 92, 44, 15, 10, 20, 229, 138, 2, 250, 155, 44, 15, 10, 20, 229, 138, + 2, 239, 22, 44, 15, 10, 20, 229, 138, 2, 247, 105, 44, 15, 10, 20, 229, + 138, 2, 250, 157, 44, 15, 10, 20, 229, 138, 2, 239, 24, 44, 15, 10, 20, + 229, 138, 2, 227, 219, 92, 44, 15, 10, 20, 62, 2, 164, 64, 2, 231, 226, + 35, 15, 10, 20, 62, 2, 164, 64, 2, 223, 111, 35, 15, 10, 20, 62, 2, 164, + 64, 2, 55, 35, 15, 10, 20, 62, 2, 164, 64, 2, 234, 252, 35, 15, 10, 20, + 62, 2, 164, 64, 2, 92, 175, 35, 15, 10, 20, 62, 2, 164, 64, 2, 62, 35, + 15, 10, 20, 252, 224, 2, 231, 226, 35, 15, 10, 20, 252, 224, 2, 223, 111, + 35, 15, 10, 20, 252, 224, 2, 55, 35, 15, 10, 20, 252, 224, 2, 234, 252, + 35, 15, 10, 20, 252, 224, 2, 92, 175, 35, 15, 10, 20, 252, 224, 2, 62, + 35, 15, 10, 20, 227, 35, 2, 231, 226, 35, 15, 10, 20, 227, 35, 2, 223, + 111, 35, 15, 10, 20, 227, 35, 2, 55, 35, 15, 10, 20, 227, 35, 2, 234, + 252, 35, 15, 10, 20, 227, 35, 2, 92, 175, 35, 15, 10, 20, 227, 35, 2, 62, + 35, 15, 10, 20, 226, 237, 2, 231, 226, 35, 15, 10, 20, 226, 237, 2, 223, + 111, 35, 15, 10, 20, 226, 237, 2, 55, 35, 15, 10, 20, 226, 237, 2, 234, + 252, 35, 15, 10, 20, 226, 237, 2, 92, 175, 35, 15, 10, 20, 226, 237, 2, + 62, 35, 15, 10, 20, 247, 88, 2, 92, 175, 35, 15, 10, 20, 247, 88, 2, 62, + 35, 15, 10, 20, 232, 132, 2, 92, 175, 35, 15, 10, 20, 232, 132, 2, 62, + 35, 15, 10, 20, 239, 60, 2, 92, 35, 15, 10, 20, 239, 60, 2, 216, 35, 15, + 10, 20, 239, 60, 2, 55, 35, 15, 10, 20, 239, 60, 2, 92, 175, 35, 15, 10, + 20, 239, 60, 2, 62, 35, 15, 10, 20, 216, 2, 55, 35, 15, 10, 20, 216, 2, + 92, 175, 35, 15, 10, 20, 216, 2, 62, 35, 15, 10, 20, 55, 2, 92, 35, 15, + 10, 20, 55, 2, 55, 35, 15, 10, 20, 234, 252, 2, 231, 226, 35, 15, 10, 20, + 234, 252, 2, 223, 111, 35, 15, 10, 20, 234, 252, 2, 55, 35, 15, 10, 20, + 234, 252, 2, 234, 252, 35, 15, 10, 20, 234, 252, 2, 92, 175, 35, 15, 10, + 20, 234, 252, 2, 62, 35, 15, 10, 20, 92, 175, 2, 227, 219, 92, 35, 15, + 10, 20, 62, 2, 231, 226, 35, 15, 10, 20, 62, 2, 223, 111, 35, 15, 10, 20, + 62, 2, 55, 35, 15, 10, 20, 62, 2, 234, 252, 35, 15, 10, 20, 62, 2, 92, + 175, 35, 15, 10, 20, 62, 2, 62, 35, 15, 10, 20, 62, 2, 164, 64, 2, 123, + 59, 15, 10, 20, 62, 2, 164, 64, 2, 101, 59, 15, 10, 20, 62, 2, 164, 64, + 2, 202, 59, 15, 10, 20, 62, 2, 164, 64, 2, 55, 59, 15, 10, 20, 62, 2, + 164, 64, 2, 245, 108, 59, 15, 10, 20, 252, 224, 2, 123, 59, 15, 10, 20, + 252, 224, 2, 101, 59, 15, 10, 20, 252, 224, 2, 202, 59, 15, 10, 20, 252, + 224, 2, 55, 59, 15, 10, 20, 252, 224, 2, 245, 108, 59, 15, 10, 20, 227, + 35, 2, 123, 59, 15, 10, 20, 227, 35, 2, 101, 59, 15, 10, 20, 227, 35, 2, + 202, 59, 15, 10, 20, 227, 35, 2, 55, 59, 15, 10, 20, 227, 35, 2, 245, + 108, 59, 15, 10, 20, 226, 237, 2, 55, 59, 15, 10, 20, 123, 2, 101, 59, + 15, 10, 20, 123, 2, 55, 59, 15, 10, 20, 101, 2, 123, 59, 15, 10, 20, 101, + 2, 55, 59, 15, 10, 20, 202, 2, 123, 59, 15, 10, 20, 202, 2, 55, 59, 15, + 10, 20, 230, 202, 2, 123, 59, 15, 10, 20, 230, 202, 2, 101, 59, 15, 10, + 20, 230, 202, 2, 202, 59, 15, 10, 20, 230, 202, 2, 55, 59, 15, 10, 20, + 231, 25, 2, 101, 59, 15, 10, 20, 231, 25, 2, 202, 59, 15, 10, 20, 231, + 25, 2, 55, 59, 15, 10, 20, 250, 185, 2, 123, 59, 15, 10, 20, 250, 185, 2, + 101, 59, 15, 10, 20, 250, 185, 2, 202, 59, 15, 10, 20, 250, 185, 2, 55, + 59, 15, 10, 20, 227, 92, 2, 101, 59, 15, 10, 20, 223, 114, 2, 55, 59, 15, + 10, 20, 254, 249, 2, 123, 59, 15, 10, 20, 254, 249, 2, 55, 59, 15, 10, + 20, 246, 64, 2, 123, 59, 15, 10, 20, 246, 64, 2, 55, 59, 15, 10, 20, 247, + 88, 2, 123, 59, 15, 10, 20, 247, 88, 2, 101, 59, 15, 10, 20, 247, 88, 2, + 202, 59, 15, 10, 20, 247, 88, 2, 55, 59, 15, 10, 20, 232, 132, 2, 101, + 59, 15, 10, 20, 232, 132, 2, 55, 59, 15, 10, 20, 239, 60, 2, 123, 59, 15, + 10, 20, 239, 60, 2, 101, 59, 15, 10, 20, 239, 60, 2, 202, 59, 15, 10, 20, + 239, 60, 2, 216, 59, 15, 10, 20, 239, 60, 2, 55, 59, 15, 10, 20, 216, 2, + 123, 59, 15, 10, 20, 216, 2, 101, 59, 15, 10, 20, 216, 2, 202, 59, 15, + 10, 20, 216, 2, 55, 59, 15, 10, 20, 216, 2, 245, 108, 59, 15, 10, 20, 55, + 2, 123, 59, 15, 10, 20, 55, 2, 101, 59, 15, 10, 20, 55, 2, 202, 59, 15, + 10, 20, 55, 2, 55, 59, 15, 10, 20, 234, 252, 2, 123, 59, 15, 10, 20, 234, + 252, 2, 101, 59, 15, 10, 20, 234, 252, 2, 202, 59, 15, 10, 20, 234, 252, + 2, 55, 59, 15, 10, 20, 234, 252, 2, 245, 108, 59, 15, 10, 20, 245, 108, + 2, 123, 59, 15, 10, 20, 245, 108, 2, 55, 59, 15, 10, 20, 245, 108, 2, + 227, 219, 92, 59, 15, 10, 20, 62, 2, 123, 59, 15, 10, 20, 62, 2, 101, 59, + 15, 10, 20, 62, 2, 202, 59, 15, 10, 20, 62, 2, 55, 59, 15, 10, 20, 62, 2, + 245, 108, 59, 15, 10, 20, 62, 2, 164, 64, 2, 55, 124, 15, 10, 20, 62, 2, + 164, 64, 2, 245, 108, 124, 15, 10, 20, 252, 224, 2, 55, 124, 15, 10, 20, + 252, 224, 2, 245, 108, 124, 15, 10, 20, 227, 35, 2, 55, 124, 15, 10, 20, + 227, 35, 2, 245, 108, 124, 15, 10, 20, 226, 237, 2, 55, 124, 15, 10, 20, + 226, 237, 2, 245, 108, 124, 15, 10, 20, 230, 202, 2, 55, 124, 15, 10, 20, + 230, 202, 2, 245, 108, 124, 15, 10, 20, 229, 111, 2, 55, 124, 15, 10, 20, + 229, 111, 2, 245, 108, 124, 15, 10, 20, 239, 60, 2, 216, 124, 15, 10, 20, + 239, 60, 2, 55, 124, 15, 10, 20, 216, 2, 55, 124, 15, 10, 20, 234, 252, + 2, 55, 124, 15, 10, 20, 234, 252, 2, 245, 108, 124, 15, 10, 20, 62, 2, + 55, 124, 15, 10, 20, 62, 2, 245, 108, 124, 15, 10, 20, 229, 138, 2, 247, + 105, 124, 15, 10, 20, 229, 138, 2, 250, 157, 124, 15, 10, 20, 229, 138, + 2, 239, 24, 124, 15, 10, 20, 227, 92, 2, 92, 175, 44, 15, 10, 20, 227, + 92, 2, 62, 44, 15, 10, 20, 254, 249, 2, 92, 175, 44, 15, 10, 20, 254, + 249, 2, 62, 44, 15, 10, 20, 246, 64, 2, 92, 175, 44, 15, 10, 20, 246, 64, + 2, 62, 44, 15, 10, 20, 230, 202, 2, 92, 175, 44, 15, 10, 20, 230, 202, 2, + 62, 44, 15, 10, 20, 229, 111, 2, 92, 175, 44, 15, 10, 20, 229, 111, 2, + 62, 44, 15, 10, 20, 101, 2, 92, 175, 44, 15, 10, 20, 101, 2, 62, 44, 15, + 10, 20, 123, 2, 92, 175, 44, 15, 10, 20, 123, 2, 62, 44, 15, 10, 20, 202, + 2, 92, 175, 44, 15, 10, 20, 202, 2, 62, 44, 15, 10, 20, 231, 25, 2, 92, + 175, 44, 15, 10, 20, 231, 25, 2, 62, 44, 15, 10, 20, 250, 185, 2, 92, + 175, 44, 15, 10, 20, 250, 185, 2, 62, 44, 15, 10, 20, 229, 111, 2, 123, + 44, 15, 10, 20, 229, 111, 2, 101, 44, 15, 10, 20, 229, 111, 2, 202, 44, + 15, 10, 20, 229, 111, 2, 55, 44, 15, 10, 20, 229, 111, 2, 231, 226, 44, + 15, 10, 20, 230, 202, 2, 231, 226, 44, 15, 10, 20, 231, 25, 2, 231, 226, + 44, 15, 10, 20, 250, 185, 2, 231, 226, 44, 15, 10, 20, 227, 92, 2, 92, + 175, 35, 15, 10, 20, 227, 92, 2, 62, 35, 15, 10, 20, 254, 249, 2, 92, + 175, 35, 15, 10, 20, 254, 249, 2, 62, 35, 15, 10, 20, 246, 64, 2, 92, + 175, 35, 15, 10, 20, 246, 64, 2, 62, 35, 15, 10, 20, 230, 202, 2, 92, + 175, 35, 15, 10, 20, 230, 202, 2, 62, 35, 15, 10, 20, 229, 111, 2, 92, + 175, 35, 15, 10, 20, 229, 111, 2, 62, 35, 15, 10, 20, 101, 2, 92, 175, + 35, 15, 10, 20, 101, 2, 62, 35, 15, 10, 20, 123, 2, 92, 175, 35, 15, 10, + 20, 123, 2, 62, 35, 15, 10, 20, 202, 2, 92, 175, 35, 15, 10, 20, 202, 2, + 62, 35, 15, 10, 20, 231, 25, 2, 92, 175, 35, 15, 10, 20, 231, 25, 2, 62, + 35, 15, 10, 20, 250, 185, 2, 92, 175, 35, 15, 10, 20, 250, 185, 2, 62, + 35, 15, 10, 20, 229, 111, 2, 123, 35, 15, 10, 20, 229, 111, 2, 101, 35, + 15, 10, 20, 229, 111, 2, 202, 35, 15, 10, 20, 229, 111, 2, 55, 35, 15, + 10, 20, 229, 111, 2, 231, 226, 35, 15, 10, 20, 230, 202, 2, 231, 226, 35, + 15, 10, 20, 231, 25, 2, 231, 226, 35, 15, 10, 20, 250, 185, 2, 231, 226, + 35, 15, 10, 20, 229, 111, 2, 123, 59, 15, 10, 20, 229, 111, 2, 101, 59, + 15, 10, 20, 229, 111, 2, 202, 59, 15, 10, 20, 229, 111, 2, 55, 59, 15, + 10, 20, 230, 202, 2, 245, 108, 59, 15, 10, 20, 229, 111, 2, 245, 108, 59, + 15, 10, 20, 227, 92, 2, 55, 59, 15, 10, 20, 230, 202, 2, 123, 124, 15, + 10, 20, 230, 202, 2, 101, 124, 15, 10, 20, 230, 202, 2, 202, 124, 15, 10, + 20, 229, 111, 2, 123, 124, 15, 10, 20, 229, 111, 2, 101, 124, 15, 10, 20, + 229, 111, 2, 202, 124, 15, 10, 20, 227, 92, 2, 55, 124, 15, 10, 20, 223, + 114, 2, 55, 124, 15, 10, 20, 92, 2, 247, 103, 35, 15, 10, 20, 92, 2, 247, + 103, 44, 15, 234, 24, 42, 233, 180, 234, 24, 41, 233, 180, 10, 20, 227, + 35, 2, 123, 2, 55, 59, 15, 10, 20, 227, 35, 2, 101, 2, 123, 35, 15, 10, + 20, 227, 35, 2, 101, 2, 123, 59, 15, 10, 20, 227, 35, 2, 101, 2, 55, 59, + 15, 10, 20, 227, 35, 2, 202, 2, 55, 59, 15, 10, 20, 227, 35, 2, 55, 2, + 123, 59, 15, 10, 20, 227, 35, 2, 55, 2, 101, 59, 15, 10, 20, 227, 35, 2, + 55, 2, 202, 59, 15, 10, 20, 123, 2, 55, 2, 101, 35, 15, 10, 20, 123, 2, + 55, 2, 101, 59, 15, 10, 20, 101, 2, 55, 2, 62, 35, 15, 10, 20, 101, 2, + 55, 2, 92, 175, 35, 15, 10, 20, 230, 202, 2, 101, 2, 123, 59, 15, 10, 20, + 230, 202, 2, 123, 2, 101, 59, 15, 10, 20, 230, 202, 2, 123, 2, 92, 175, + 35, 15, 10, 20, 230, 202, 2, 55, 2, 101, 35, 15, 10, 20, 230, 202, 2, 55, + 2, 101, 59, 15, 10, 20, 230, 202, 2, 55, 2, 123, 59, 15, 10, 20, 230, + 202, 2, 55, 2, 55, 35, 15, 10, 20, 230, 202, 2, 55, 2, 55, 59, 15, 10, + 20, 231, 25, 2, 101, 2, 101, 35, 15, 10, 20, 231, 25, 2, 101, 2, 101, 59, + 15, 10, 20, 231, 25, 2, 55, 2, 55, 35, 15, 10, 20, 229, 111, 2, 101, 2, + 55, 35, 15, 10, 20, 229, 111, 2, 101, 2, 55, 59, 15, 10, 20, 229, 111, 2, + 123, 2, 62, 35, 15, 10, 20, 229, 111, 2, 55, 2, 202, 35, 15, 10, 20, 229, + 111, 2, 55, 2, 202, 59, 15, 10, 20, 229, 111, 2, 55, 2, 55, 35, 15, 10, + 20, 229, 111, 2, 55, 2, 55, 59, 15, 10, 20, 250, 185, 2, 101, 2, 92, 175, + 35, 15, 10, 20, 250, 185, 2, 202, 2, 55, 35, 15, 10, 20, 250, 185, 2, + 202, 2, 55, 59, 15, 10, 20, 227, 92, 2, 55, 2, 101, 35, 15, 10, 20, 227, + 92, 2, 55, 2, 101, 59, 15, 10, 20, 227, 92, 2, 55, 2, 55, 59, 15, 10, 20, + 227, 92, 2, 55, 2, 62, 35, 15, 10, 20, 254, 249, 2, 123, 2, 55, 35, 15, + 10, 20, 254, 249, 2, 55, 2, 55, 35, 15, 10, 20, 254, 249, 2, 55, 2, 55, + 59, 15, 10, 20, 254, 249, 2, 55, 2, 92, 175, 35, 15, 10, 20, 246, 64, 2, + 55, 2, 55, 35, 15, 10, 20, 246, 64, 2, 55, 2, 62, 35, 15, 10, 20, 246, + 64, 2, 55, 2, 92, 175, 35, 15, 10, 20, 247, 88, 2, 202, 2, 55, 35, 15, + 10, 20, 247, 88, 2, 202, 2, 55, 59, 15, 10, 20, 232, 132, 2, 55, 2, 101, + 35, 15, 10, 20, 232, 132, 2, 55, 2, 55, 35, 15, 10, 20, 216, 2, 101, 2, + 55, 35, 15, 10, 20, 216, 2, 101, 2, 62, 35, 15, 10, 20, 216, 2, 101, 2, + 92, 175, 35, 15, 10, 20, 216, 2, 123, 2, 123, 59, 15, 10, 20, 216, 2, + 123, 2, 123, 35, 15, 10, 20, 216, 2, 202, 2, 55, 35, 15, 10, 20, 216, 2, + 202, 2, 55, 59, 15, 10, 20, 216, 2, 55, 2, 101, 35, 15, 10, 20, 216, 2, + 55, 2, 101, 59, 15, 10, 20, 55, 2, 101, 2, 123, 59, 15, 10, 20, 55, 2, + 101, 2, 55, 59, 15, 10, 20, 55, 2, 101, 2, 62, 35, 15, 10, 20, 55, 2, + 123, 2, 101, 59, 15, 10, 20, 55, 2, 123, 2, 55, 59, 15, 10, 20, 55, 2, + 202, 2, 123, 59, 15, 10, 20, 55, 2, 202, 2, 55, 59, 15, 10, 20, 55, 2, + 123, 2, 202, 59, 15, 10, 20, 245, 108, 2, 55, 2, 123, 59, 15, 10, 20, + 245, 108, 2, 55, 2, 55, 59, 15, 10, 20, 234, 252, 2, 101, 2, 55, 59, 15, + 10, 20, 234, 252, 2, 101, 2, 92, 175, 35, 15, 10, 20, 234, 252, 2, 123, + 2, 55, 35, 15, 10, 20, 234, 252, 2, 123, 2, 55, 59, 15, 10, 20, 234, 252, + 2, 123, 2, 92, 175, 35, 15, 10, 20, 234, 252, 2, 55, 2, 62, 35, 15, 10, + 20, 234, 252, 2, 55, 2, 92, 175, 35, 15, 10, 20, 62, 2, 55, 2, 55, 35, + 15, 10, 20, 62, 2, 55, 2, 55, 59, 15, 10, 20, 252, 224, 2, 202, 2, 62, + 35, 15, 10, 20, 227, 35, 2, 123, 2, 62, 35, 15, 10, 20, 227, 35, 2, 123, + 2, 92, 175, 35, 15, 10, 20, 227, 35, 2, 202, 2, 62, 35, 15, 10, 20, 227, + 35, 2, 202, 2, 92, 175, 35, 15, 10, 20, 227, 35, 2, 55, 2, 62, 35, 15, + 10, 20, 227, 35, 2, 55, 2, 92, 175, 35, 15, 10, 20, 123, 2, 55, 2, 62, + 35, 15, 10, 20, 123, 2, 101, 2, 92, 175, 35, 15, 10, 20, 123, 2, 55, 2, + 92, 175, 35, 15, 10, 20, 230, 202, 2, 202, 2, 92, 175, 35, 15, 10, 20, + 231, 25, 2, 101, 2, 62, 35, 15, 10, 20, 229, 111, 2, 101, 2, 62, 35, 15, + 10, 20, 250, 185, 2, 101, 2, 62, 35, 15, 10, 20, 216, 2, 123, 2, 62, 35, + 15, 10, 20, 216, 2, 55, 2, 62, 35, 15, 10, 20, 62, 2, 101, 2, 62, 35, 15, + 10, 20, 62, 2, 123, 2, 62, 35, 15, 10, 20, 62, 2, 55, 2, 62, 35, 15, 10, + 20, 55, 2, 55, 2, 62, 35, 15, 10, 20, 232, 132, 2, 55, 2, 62, 35, 15, 10, + 20, 234, 252, 2, 101, 2, 62, 35, 15, 10, 20, 232, 132, 2, 55, 2, 101, 59, + 15, 10, 20, 216, 2, 101, 2, 55, 59, 15, 10, 20, 254, 249, 2, 55, 2, 62, + 35, 15, 10, 20, 239, 60, 2, 55, 2, 62, 35, 15, 10, 20, 234, 252, 2, 123, + 2, 101, 59, 15, 10, 20, 55, 2, 202, 2, 62, 35, 15, 10, 20, 216, 2, 123, + 2, 55, 59, 15, 10, 20, 239, 60, 2, 55, 2, 55, 35, 15, 10, 20, 216, 2, + 123, 2, 55, 35, 15, 10, 20, 234, 252, 2, 123, 2, 101, 35, 15, 10, 20, + 123, 2, 101, 2, 62, 35, 15, 10, 20, 101, 2, 123, 2, 62, 35, 15, 10, 20, + 55, 2, 123, 2, 62, 35, 15, 10, 20, 247, 88, 2, 55, 2, 62, 35, 15, 10, 20, + 252, 224, 2, 101, 2, 62, 35, 15, 10, 20, 239, 60, 2, 55, 2, 55, 59, 15, + 10, 20, 254, 249, 2, 123, 2, 55, 59, 15, 10, 20, 231, 25, 2, 55, 2, 55, + 59, 15, 10, 20, 230, 202, 2, 202, 2, 62, 35, 15, 10, 20, 234, 252, 2, + 123, 2, 62, 35, 15, 10, 20, 231, 9, 225, 85, 254, 87, 238, 134, 228, 39, + 5, 44, 15, 10, 20, 232, 128, 225, 85, 254, 87, 238, 134, 228, 39, 5, 44, + 15, 10, 20, 254, 215, 44, 15, 10, 20, 254, 237, 44, 15, 10, 20, 236, 97, + 44, 15, 10, 20, 231, 10, 44, 15, 10, 20, 231, 254, 44, 15, 10, 20, 254, + 229, 44, 15, 10, 20, 224, 160, 44, 15, 10, 20, 231, 9, 44, 15, 10, 20, + 231, 8, 254, 229, 224, 159, 10, 20, 239, 176, 231, 179, 53, 10, 20, 252, + 158, 254, 132, 254, 133, 38, 230, 192, 38, 230, 81, 38, 230, 13, 38, 230, + 2, 38, 229, 247, 38, 229, 236, 38, 229, 225, 38, 229, 214, 38, 229, 203, + 38, 230, 191, 38, 230, 180, 38, 230, 169, 38, 230, 158, 38, 230, 147, 38, + 230, 136, 38, 230, 125, 232, 208, 211, 32, 61, 251, 54, 232, 208, 211, + 32, 61, 90, 251, 54, 232, 208, 211, 32, 61, 90, 246, 218, 228, 38, 232, + 208, 211, 32, 61, 251, 61, 232, 208, 211, 32, 61, 229, 186, 232, 208, + 211, 32, 61, 247, 149, 76, 232, 208, 211, 32, 61, 232, 69, 76, 232, 208, + 211, 32, 61, 42, 63, 237, 217, 104, 232, 208, 211, 32, 61, 41, 63, 237, + 217, 252, 114, 232, 208, 211, 32, 61, 169, 247, 249, 36, 20, 42, 245, + 151, 36, 20, 41, 245, 151, 36, 47, 226, 159, 42, 245, 151, 36, 47, 226, + 159, 41, 245, 151, 36, 237, 64, 42, 245, 151, 36, 237, 64, 41, 245, 151, + 36, 251, 37, 237, 63, 232, 208, 211, 32, 61, 135, 56, 237, 242, 232, 208, + 211, 32, 61, 247, 248, 250, 130, 232, 208, 211, 32, 61, 247, 240, 250, + 130, 232, 208, 211, 32, 61, 184, 237, 170, 232, 208, 211, 32, 61, 224, + 146, 184, 237, 170, 232, 208, 211, 32, 61, 42, 233, 180, 232, 208, 211, + 32, 61, 41, 233, 180, 232, 208, 211, 32, 61, 42, 250, 223, 104, 232, 208, + 211, 32, 61, 41, 250, 223, 104, 232, 208, 211, 32, 61, 42, 226, 100, 229, + 104, 104, 232, 208, 211, 32, 61, 41, 226, 100, 229, 104, 104, 232, 208, + 211, 32, 61, 42, 86, 237, 217, 104, 232, 208, 211, 32, 61, 41, 86, 237, + 217, 104, 232, 208, 211, 32, 61, 42, 47, 254, 182, 104, 232, 208, 211, + 32, 61, 41, 47, 254, 182, 104, 232, 208, 211, 32, 61, 42, 254, 182, 104, + 232, 208, 211, 32, 61, 41, 254, 182, 104, 232, 208, 211, 32, 61, 42, 251, + 11, 104, 232, 208, 211, 32, 61, 41, 251, 11, 104, 232, 208, 211, 32, 61, + 42, 63, 251, 11, 104, 232, 208, 211, 32, 61, 41, 63, 251, 11, 104, 229, + 168, 249, 140, 63, 229, 168, 249, 140, 232, 208, 211, 32, 61, 42, 37, + 104, 232, 208, 211, 32, 61, 41, 37, 104, 250, 129, 234, 1, 251, 216, 234, + 1, 224, 146, 234, 1, 47, 224, 146, 234, 1, 250, 129, 184, 237, 170, 251, + 216, 184, 237, 170, 224, 146, 184, 237, 170, 3, 251, 54, 3, 90, 251, 54, + 3, 246, 218, 228, 38, 3, 229, 186, 3, 251, 61, 3, 232, 69, 76, 3, 247, + 149, 76, 3, 247, 248, 250, 130, 3, 42, 233, 180, 3, 41, 233, 180, 3, 42, + 250, 223, 104, 3, 41, 250, 223, 104, 3, 42, 226, 100, 229, 104, 104, 3, + 41, 226, 100, 229, 104, 104, 3, 65, 53, 3, 254, 193, 3, 254, 69, 3, 79, + 53, 3, 244, 94, 3, 237, 213, 53, 3, 245, 231, 53, 3, 247, 204, 53, 3, + 231, 193, 228, 161, 3, 249, 150, 53, 3, 233, 123, 53, 3, 251, 53, 254, + 62, 10, 247, 103, 44, 15, 10, 227, 64, 2, 247, 103, 46, 10, 250, 155, 44, + 15, 10, 227, 90, 246, 234, 10, 239, 22, 44, 15, 10, 247, 105, 44, 15, 10, + 247, 105, 124, 15, 10, 250, 157, 44, 15, 10, 250, 157, 124, 15, 10, 239, + 24, 44, 15, 10, 239, 24, 124, 15, 10, 229, 138, 44, 15, 10, 229, 138, + 124, 15, 10, 227, 235, 44, 15, 10, 227, 235, 124, 15, 10, 1, 164, 44, 15, + 10, 1, 92, 2, 237, 59, 64, 44, 15, 10, 1, 92, 2, 237, 59, 64, 35, 15, 10, + 1, 92, 2, 164, 64, 44, 15, 10, 1, 92, 2, 164, 64, 35, 15, 10, 1, 224, + 145, 2, 164, 64, 44, 15, 10, 1, 224, 145, 2, 164, 64, 35, 15, 10, 1, 92, + 2, 164, 252, 214, 44, 15, 10, 1, 92, 2, 164, 252, 214, 35, 15, 10, 1, 62, + 2, 164, 64, 44, 15, 10, 1, 62, 2, 164, 64, 35, 15, 10, 1, 62, 2, 164, 64, + 59, 15, 10, 1, 62, 2, 164, 64, 124, 15, 10, 1, 92, 44, 15, 10, 1, 92, 35, + 15, 10, 1, 252, 224, 44, 15, 10, 1, 252, 224, 35, 15, 10, 1, 252, 224, + 59, 15, 10, 1, 252, 224, 124, 15, 10, 1, 227, 35, 237, 23, 44, 15, 10, 1, + 227, 35, 237, 23, 35, 15, 10, 1, 227, 35, 44, 15, 10, 1, 227, 35, 35, 15, + 10, 1, 227, 35, 59, 15, 10, 1, 227, 35, 124, 15, 10, 1, 226, 237, 44, 15, + 10, 1, 226, 237, 35, 15, 10, 1, 226, 237, 59, 15, 10, 1, 226, 237, 124, + 15, 10, 1, 123, 44, 15, 10, 1, 123, 35, 15, 10, 1, 123, 59, 15, 10, 1, + 123, 124, 15, 10, 1, 101, 44, 15, 10, 1, 101, 35, 15, 10, 1, 101, 59, 15, + 10, 1, 101, 124, 15, 10, 1, 202, 44, 15, 10, 1, 202, 35, 15, 10, 1, 202, + 59, 15, 10, 1, 202, 124, 15, 10, 1, 250, 166, 44, 15, 10, 1, 250, 166, + 35, 15, 10, 1, 226, 246, 44, 15, 10, 1, 226, 246, 35, 15, 10, 1, 231, + 226, 44, 15, 10, 1, 231, 226, 35, 15, 10, 1, 223, 111, 44, 15, 10, 1, + 223, 111, 35, 15, 10, 1, 230, 202, 44, 15, 10, 1, 230, 202, 35, 15, 10, + 1, 230, 202, 59, 15, 10, 1, 230, 202, 124, 15, 10, 1, 229, 111, 44, 15, + 10, 1, 229, 111, 35, 15, 10, 1, 229, 111, 59, 15, 10, 1, 229, 111, 124, + 15, 10, 1, 231, 25, 44, 15, 10, 1, 231, 25, 35, 15, 10, 1, 231, 25, 59, + 15, 10, 1, 231, 25, 124, 15, 10, 1, 250, 185, 44, 15, 10, 1, 250, 185, + 35, 15, 10, 1, 250, 185, 59, 15, 10, 1, 250, 185, 124, 15, 10, 1, 227, + 92, 44, 15, 10, 1, 227, 92, 35, 15, 10, 1, 227, 92, 59, 15, 10, 1, 227, + 92, 124, 15, 10, 1, 223, 114, 44, 15, 10, 1, 223, 114, 35, 15, 10, 1, + 223, 114, 59, 15, 10, 1, 223, 114, 124, 15, 10, 1, 254, 249, 44, 15, 10, + 1, 254, 249, 35, 15, 10, 1, 254, 249, 59, 15, 10, 1, 254, 249, 124, 15, + 10, 1, 246, 64, 44, 15, 10, 1, 246, 64, 35, 15, 10, 1, 246, 64, 59, 15, + 10, 1, 246, 64, 124, 15, 10, 1, 247, 88, 44, 15, 10, 1, 247, 88, 35, 15, + 10, 1, 247, 88, 59, 15, 10, 1, 247, 88, 124, 15, 10, 1, 232, 132, 44, 15, + 10, 1, 232, 132, 35, 15, 10, 1, 232, 132, 59, 15, 10, 1, 232, 132, 124, + 15, 10, 1, 239, 60, 44, 15, 10, 1, 239, 60, 35, 15, 10, 1, 239, 60, 59, + 15, 10, 1, 239, 60, 124, 15, 10, 1, 216, 44, 15, 10, 1, 216, 35, 15, 10, + 1, 216, 59, 15, 10, 1, 216, 124, 15, 10, 1, 55, 44, 15, 10, 1, 55, 35, + 15, 10, 1, 55, 59, 15, 10, 1, 55, 124, 15, 10, 1, 234, 252, 44, 15, 10, + 1, 234, 252, 35, 15, 10, 1, 234, 252, 59, 15, 10, 1, 234, 252, 124, 15, + 10, 1, 245, 108, 44, 15, 10, 1, 245, 108, 35, 15, 10, 1, 245, 108, 59, + 15, 10, 1, 245, 108, 124, 15, 10, 1, 224, 145, 44, 15, 10, 1, 224, 145, + 35, 15, 10, 1, 92, 175, 44, 15, 10, 1, 92, 175, 35, 15, 10, 1, 62, 44, + 15, 10, 1, 62, 35, 15, 10, 1, 62, 59, 15, 10, 1, 62, 124, 15, 10, 20, + 216, 2, 92, 2, 237, 59, 64, 44, 15, 10, 20, 216, 2, 92, 2, 237, 59, 64, + 35, 15, 10, 20, 216, 2, 92, 2, 164, 64, 44, 15, 10, 20, 216, 2, 92, 2, + 164, 64, 35, 15, 10, 20, 216, 2, 92, 2, 164, 252, 214, 44, 15, 10, 20, + 216, 2, 92, 2, 164, 252, 214, 35, 15, 10, 20, 216, 2, 92, 44, 15, 10, 20, + 216, 2, 92, 35, 15, 223, 90, 224, 115, 235, 5, 228, 145, 100, 247, 149, + 76, 100, 232, 57, 76, 100, 65, 53, 100, 249, 150, 53, 100, 233, 123, 53, + 100, 254, 193, 100, 254, 144, 100, 42, 233, 180, 100, 41, 233, 180, 100, + 254, 69, 100, 79, 53, 100, 251, 54, 100, 244, 94, 100, 246, 218, 228, 38, + 100, 228, 161, 100, 21, 223, 89, 100, 21, 118, 100, 21, 113, 100, 21, + 166, 100, 21, 158, 100, 21, 173, 100, 21, 183, 100, 21, 194, 100, 21, + 187, 100, 21, 192, 100, 251, 61, 100, 229, 186, 100, 237, 213, 53, 100, + 247, 204, 53, 100, 245, 231, 53, 100, 232, 69, 76, 100, 251, 53, 254, 62, + 100, 7, 6, 1, 57, 100, 7, 6, 1, 254, 27, 100, 7, 6, 1, 252, 44, 100, 7, + 6, 1, 222, 222, 100, 7, 6, 1, 72, 100, 7, 6, 1, 247, 130, 100, 7, 6, 1, + 214, 100, 7, 6, 1, 212, 100, 7, 6, 1, 74, 100, 7, 6, 1, 239, 182, 100, 7, + 6, 1, 239, 76, 100, 7, 6, 1, 149, 100, 7, 6, 1, 185, 100, 7, 6, 1, 199, + 100, 7, 6, 1, 73, 100, 7, 6, 1, 233, 244, 100, 7, 6, 1, 232, 139, 100, 7, + 6, 1, 146, 100, 7, 6, 1, 193, 100, 7, 6, 1, 227, 109, 100, 7, 6, 1, 66, + 100, 7, 6, 1, 196, 100, 7, 6, 1, 224, 174, 100, 7, 6, 1, 224, 73, 100, 7, + 6, 1, 224, 25, 100, 7, 6, 1, 223, 119, 100, 42, 37, 104, 100, 231, 193, + 228, 161, 100, 41, 37, 104, 100, 251, 102, 255, 41, 100, 184, 237, 170, + 100, 245, 237, 255, 41, 100, 7, 3, 1, 57, 100, 7, 3, 1, 254, 27, 100, 7, + 3, 1, 252, 44, 100, 7, 3, 1, 222, 222, 100, 7, 3, 1, 72, 100, 7, 3, 1, + 247, 130, 100, 7, 3, 1, 214, 100, 7, 3, 1, 212, 100, 7, 3, 1, 74, 100, 7, + 3, 1, 239, 182, 100, 7, 3, 1, 239, 76, 100, 7, 3, 1, 149, 100, 7, 3, 1, + 185, 100, 7, 3, 1, 199, 100, 7, 3, 1, 73, 100, 7, 3, 1, 233, 244, 100, 7, + 3, 1, 232, 139, 100, 7, 3, 1, 146, 100, 7, 3, 1, 193, 100, 7, 3, 1, 227, + 109, 100, 7, 3, 1, 66, 100, 7, 3, 1, 196, 100, 7, 3, 1, 224, 174, 100, 7, + 3, 1, 224, 73, 100, 7, 3, 1, 224, 25, 100, 7, 3, 1, 223, 119, 100, 42, + 250, 223, 104, 100, 61, 237, 170, 100, 41, 250, 223, 104, 100, 205, 100, + 42, 63, 233, 180, 100, 41, 63, 233, 180, 83, 90, 246, 218, 228, 38, 83, + 42, 251, 11, 104, 83, 41, 251, 11, 104, 83, 90, 251, 54, 83, 48, 236, + 154, 249, 140, 83, 48, 1, 224, 105, 83, 48, 1, 3, 57, 83, 48, 1, 3, 74, + 83, 48, 1, 3, 66, 83, 48, 1, 3, 72, 83, 48, 1, 3, 73, 83, 48, 1, 3, 191, + 83, 48, 1, 3, 223, 158, 83, 48, 1, 3, 223, 183, 83, 48, 1, 3, 225, 250, + 83, 239, 19, 232, 194, 228, 155, 76, 83, 48, 1, 57, 83, 48, 1, 74, 83, + 48, 1, 66, 83, 48, 1, 72, 83, 48, 1, 73, 83, 48, 1, 177, 83, 48, 1, 238, + 199, 83, 48, 1, 238, 107, 83, 48, 1, 239, 3, 83, 48, 1, 238, 150, 83, 48, + 1, 231, 31, 83, 48, 1, 229, 15, 83, 48, 1, 228, 6, 83, 48, 1, 230, 213, + 83, 48, 1, 228, 169, 83, 48, 1, 227, 107, 83, 48, 1, 226, 175, 83, 48, 1, + 225, 250, 83, 48, 1, 227, 44, 83, 48, 1, 96, 83, 48, 1, 236, 1, 83, 48, + 1, 235, 89, 83, 48, 1, 234, 206, 83, 48, 1, 235, 162, 83, 48, 1, 235, 6, + 83, 48, 1, 154, 83, 48, 1, 245, 75, 83, 48, 1, 244, 145, 83, 48, 1, 245, + 121, 83, 48, 1, 244, 227, 83, 48, 1, 198, 83, 48, 1, 236, 157, 83, 48, 1, + 236, 66, 83, 48, 1, 236, 235, 83, 48, 1, 236, 103, 83, 48, 1, 191, 83, + 48, 1, 223, 158, 83, 48, 1, 223, 183, 83, 48, 1, 208, 83, 48, 1, 231, + 180, 83, 48, 1, 231, 70, 83, 48, 1, 231, 244, 83, 48, 1, 231, 122, 83, + 48, 1, 224, 173, 83, 48, 1, 199, 83, 48, 224, 204, 228, 155, 76, 83, 48, + 229, 191, 228, 155, 76, 83, 26, 247, 52, 83, 26, 1, 238, 173, 83, 26, 1, + 228, 104, 83, 26, 1, 238, 171, 83, 26, 1, 235, 82, 83, 26, 1, 235, 81, + 83, 26, 1, 235, 80, 83, 26, 1, 226, 163, 83, 26, 1, 228, 99, 83, 26, 1, + 231, 174, 83, 26, 1, 231, 170, 83, 26, 1, 231, 168, 83, 26, 1, 231, 162, + 83, 26, 1, 231, 159, 83, 26, 1, 231, 157, 83, 26, 1, 231, 163, 83, 26, 1, + 231, 173, 83, 26, 1, 236, 148, 83, 26, 1, 233, 60, 83, 26, 1, 228, 102, + 83, 26, 1, 233, 52, 83, 26, 1, 228, 236, 83, 26, 1, 228, 100, 83, 26, 1, + 240, 68, 83, 26, 1, 251, 113, 83, 26, 1, 228, 107, 83, 26, 1, 251, 167, + 83, 26, 1, 238, 210, 83, 26, 1, 226, 218, 83, 26, 1, 233, 85, 83, 26, 1, + 245, 69, 83, 26, 1, 57, 83, 26, 1, 255, 19, 83, 26, 1, 191, 83, 26, 1, + 224, 10, 83, 26, 1, 247, 217, 83, 26, 1, 72, 83, 26, 1, 223, 221, 83, 26, + 1, 223, 228, 83, 26, 1, 73, 83, 26, 1, 224, 173, 83, 26, 1, 224, 170, 83, + 26, 1, 234, 88, 83, 26, 1, 223, 183, 83, 26, 1, 66, 83, 26, 1, 224, 133, + 83, 26, 1, 224, 141, 83, 26, 1, 224, 118, 83, 26, 1, 223, 158, 83, 26, 1, + 247, 165, 83, 26, 1, 223, 202, 83, 26, 1, 74, 100, 251, 220, 53, 100, + 232, 234, 53, 100, 190, 53, 100, 237, 63, 100, 252, 99, 125, 100, 223, + 222, 53, 100, 224, 100, 53, 83, 246, 248, 157, 225, 30, 83, 117, 58, 83, + 225, 106, 58, 83, 81, 58, 83, 248, 125, 58, 83, 86, 228, 120, 83, 63, + 251, 106, 239, 233, 254, 175, 254, 188, 239, 233, 254, 175, 229, 173, + 239, 233, 254, 175, 227, 16, 234, 98, 231, 209, 251, 191, 231, 209, 251, + 191, 50, 45, 4, 254, 19, 57, 50, 45, 4, 253, 246, 72, 50, 45, 4, 253, + 255, 74, 50, 45, 4, 253, 223, 73, 50, 45, 4, 254, 17, 66, 50, 45, 4, 254, + 26, 250, 189, 50, 45, 4, 253, 239, 250, 77, 50, 45, 4, 254, 20, 250, 4, + 50, 45, 4, 254, 13, 249, 161, 50, 45, 4, 253, 233, 248, 107, 50, 45, 4, + 253, 227, 239, 179, 50, 45, 4, 253, 238, 239, 170, 50, 45, 4, 253, 248, + 239, 117, 50, 45, 4, 253, 219, 239, 101, 50, 45, 4, 253, 207, 177, 50, + 45, 4, 253, 240, 239, 3, 50, 45, 4, 253, 217, 238, 199, 50, 45, 4, 253, + 214, 238, 150, 50, 45, 4, 253, 203, 238, 107, 50, 45, 4, 253, 204, 198, + 50, 45, 4, 254, 14, 236, 235, 50, 45, 4, 253, 211, 236, 157, 50, 45, 4, + 254, 12, 236, 103, 50, 45, 4, 254, 4, 236, 66, 50, 45, 4, 254, 21, 236, + 1, 50, 45, 4, 254, 3, 235, 162, 50, 45, 4, 253, 253, 235, 89, 50, 45, 4, + 253, 232, 235, 6, 50, 45, 4, 253, 229, 234, 206, 50, 45, 4, 254, 24, 213, + 50, 45, 4, 253, 212, 233, 151, 50, 45, 4, 253, 245, 233, 69, 50, 45, 4, + 254, 16, 233, 4, 50, 45, 4, 253, 234, 232, 173, 50, 45, 4, 254, 11, 232, + 138, 50, 45, 4, 253, 206, 232, 119, 50, 45, 4, 254, 6, 232, 104, 50, 45, + 4, 253, 251, 232, 95, 50, 45, 4, 253, 224, 208, 50, 45, 4, 254, 0, 231, + 244, 50, 45, 4, 253, 231, 231, 180, 50, 45, 4, 254, 25, 231, 122, 50, 45, + 4, 254, 1, 231, 70, 50, 45, 4, 253, 252, 231, 31, 50, 45, 4, 254, 18, + 230, 213, 50, 45, 4, 253, 243, 229, 15, 50, 45, 4, 254, 15, 228, 169, 50, + 45, 4, 253, 226, 228, 6, 50, 45, 4, 253, 225, 227, 107, 50, 45, 4, 254, + 23, 227, 44, 50, 45, 4, 253, 247, 226, 175, 50, 45, 4, 254, 22, 96, 50, + 45, 4, 253, 215, 225, 250, 50, 45, 4, 253, 230, 224, 173, 50, 45, 4, 253, + 209, 224, 141, 50, 45, 4, 253, 244, 224, 118, 50, 45, 4, 253, 242, 224, + 105, 50, 45, 4, 254, 10, 223, 117, 50, 45, 4, 253, 210, 223, 97, 50, 45, + 4, 254, 7, 223, 27, 50, 45, 4, 254, 2, 255, 65, 50, 45, 4, 253, 241, 255, + 64, 50, 45, 4, 253, 200, 254, 53, 50, 45, 4, 253, 213, 248, 78, 50, 45, + 4, 253, 196, 248, 77, 50, 45, 4, 253, 236, 234, 177, 50, 45, 4, 253, 254, + 232, 172, 50, 45, 4, 253, 222, 232, 175, 50, 45, 4, 253, 208, 232, 24, + 50, 45, 4, 253, 250, 232, 23, 50, 45, 4, 253, 216, 231, 121, 50, 45, 4, + 253, 218, 227, 105, 50, 45, 4, 253, 198, 225, 220, 50, 45, 4, 253, 195, + 113, 50, 45, 14, 254, 9, 50, 45, 14, 254, 8, 50, 45, 14, 254, 5, 50, 45, + 14, 253, 249, 50, 45, 14, 253, 237, 50, 45, 14, 253, 235, 50, 45, 14, + 253, 228, 50, 45, 14, 253, 221, 50, 45, 14, 253, 220, 50, 45, 14, 253, + 205, 50, 45, 14, 253, 202, 50, 45, 14, 253, 201, 50, 45, 14, 253, 199, + 50, 45, 14, 253, 197, 50, 45, 89, 253, 194, 237, 35, 50, 45, 89, 253, + 193, 224, 101, 50, 45, 89, 253, 192, 250, 65, 50, 45, 89, 253, 191, 247, + 201, 50, 45, 89, 253, 190, 237, 18, 50, 45, 89, 253, 189, 228, 64, 50, + 45, 89, 253, 188, 247, 154, 50, 45, 89, 253, 187, 232, 6, 50, 45, 89, + 253, 186, 229, 113, 50, 45, 89, 253, 185, 245, 120, 50, 45, 89, 253, 184, + 228, 150, 50, 45, 89, 253, 183, 252, 136, 50, 45, 89, 253, 182, 250, 253, + 50, 45, 89, 253, 181, 252, 85, 50, 45, 89, 253, 180, 224, 126, 50, 45, + 89, 253, 179, 253, 33, 50, 45, 89, 253, 178, 234, 70, 50, 45, 89, 253, + 177, 228, 136, 50, 45, 89, 253, 176, 250, 198, 50, 45, 236, 92, 253, 175, + 239, 37, 50, 45, 236, 92, 253, 174, 239, 44, 50, 45, 89, 253, 173, 234, + 79, 50, 45, 89, 253, 172, 224, 109, 50, 45, 89, 253, 171, 50, 45, 236, + 92, 253, 170, 254, 116, 50, 45, 236, 92, 253, 169, 236, 208, 50, 45, 89, + 253, 168, 252, 98, 50, 45, 89, 253, 167, 246, 6, 50, 45, 89, 253, 166, + 50, 45, 89, 253, 165, 224, 95, 50, 45, 89, 253, 164, 50, 45, 89, 253, + 163, 50, 45, 89, 253, 162, 244, 160, 50, 45, 89, 253, 161, 50, 45, 89, + 253, 160, 50, 45, 89, 253, 159, 50, 45, 236, 92, 253, 157, 225, 231, 50, + 45, 89, 253, 156, 50, 45, 89, 253, 155, 50, 45, 89, 253, 154, 251, 77, + 50, 45, 89, 253, 153, 50, 45, 89, 253, 152, 50, 45, 89, 253, 151, 246, + 158, 50, 45, 89, 253, 150, 254, 104, 50, 45, 89, 253, 149, 50, 45, 89, + 253, 148, 50, 45, 89, 253, 147, 50, 45, 89, 253, 146, 50, 45, 89, 253, + 145, 50, 45, 89, 253, 144, 50, 45, 89, 253, 143, 50, 45, 89, 253, 142, + 50, 45, 89, 253, 141, 50, 45, 89, 253, 140, 236, 87, 50, 45, 89, 253, + 139, 50, 45, 89, 253, 138, 226, 86, 50, 45, 89, 253, 137, 50, 45, 89, + 253, 136, 50, 45, 89, 253, 135, 50, 45, 89, 253, 134, 50, 45, 89, 253, + 133, 50, 45, 89, 253, 132, 50, 45, 89, 253, 131, 50, 45, 89, 253, 130, + 50, 45, 89, 253, 129, 50, 45, 89, 253, 128, 50, 45, 89, 253, 127, 50, 45, + 89, 253, 126, 245, 102, 50, 45, 89, 253, 105, 247, 0, 50, 45, 89, 253, + 102, 253, 19, 50, 45, 89, 253, 97, 228, 140, 50, 45, 89, 253, 96, 58, 50, + 45, 89, 253, 95, 50, 45, 89, 253, 94, 227, 189, 50, 45, 89, 253, 93, 50, + 45, 89, 253, 92, 50, 45, 89, 253, 91, 224, 122, 251, 188, 50, 45, 89, + 253, 90, 251, 188, 50, 45, 89, 253, 89, 251, 189, 246, 232, 50, 45, 89, + 253, 88, 224, 124, 50, 45, 89, 253, 87, 50, 45, 89, 253, 86, 50, 45, 236, + 92, 253, 85, 249, 202, 50, 45, 89, 253, 84, 50, 45, 89, 253, 83, 50, 45, + 89, 253, 81, 50, 45, 89, 253, 80, 50, 45, 89, 253, 79, 50, 45, 89, 253, + 78, 250, 133, 50, 45, 89, 253, 77, 50, 45, 89, 253, 76, 50, 45, 89, 253, + 75, 50, 45, 89, 253, 74, 50, 45, 89, 253, 73, 50, 45, 89, 224, 233, 253, + 158, 50, 45, 89, 224, 233, 253, 125, 50, 45, 89, 224, 233, 253, 124, 50, + 45, 89, 224, 233, 253, 123, 50, 45, 89, 224, 233, 253, 122, 50, 45, 89, + 224, 233, 253, 121, 50, 45, 89, 224, 233, 253, 120, 50, 45, 89, 224, 233, + 253, 119, 50, 45, 89, 224, 233, 253, 118, 50, 45, 89, 224, 233, 253, 117, + 50, 45, 89, 224, 233, 253, 116, 50, 45, 89, 224, 233, 253, 115, 50, 45, + 89, 224, 233, 253, 114, 50, 45, 89, 224, 233, 253, 113, 50, 45, 89, 224, + 233, 253, 112, 50, 45, 89, 224, 233, 253, 111, 50, 45, 89, 224, 233, 253, + 110, 50, 45, 89, 224, 233, 253, 109, 50, 45, 89, 224, 233, 253, 108, 50, + 45, 89, 224, 233, 253, 107, 50, 45, 89, 224, 233, 253, 106, 50, 45, 89, + 224, 233, 253, 104, 50, 45, 89, 224, 233, 253, 103, 50, 45, 89, 224, 233, + 253, 101, 50, 45, 89, 224, 233, 253, 100, 50, 45, 89, 224, 233, 253, 99, + 50, 45, 89, 224, 233, 253, 98, 50, 45, 89, 224, 233, 253, 82, 50, 45, 89, + 224, 233, 253, 72, 210, 224, 92, 229, 174, 237, 170, 210, 224, 92, 229, + 174, 249, 140, 210, 251, 181, 76, 210, 65, 118, 210, 65, 113, 210, 65, + 166, 210, 65, 158, 210, 65, 173, 210, 65, 183, 210, 65, 194, 210, 65, + 187, 210, 65, 192, 210, 65, 227, 23, 210, 65, 225, 216, 210, 65, 226, + 207, 210, 65, 246, 245, 210, 65, 247, 63, 210, 65, 228, 206, 210, 65, + 229, 159, 210, 65, 248, 12, 210, 65, 235, 57, 210, 65, 168, 244, 135, + 210, 65, 135, 244, 135, 210, 65, 152, 244, 135, 210, 65, 246, 243, 244, + 135, 210, 65, 247, 37, 244, 135, 210, 65, 228, 217, 244, 135, 210, 65, + 229, 163, 244, 135, 210, 65, 248, 20, 244, 135, 210, 65, 235, 61, 244, + 135, 210, 65, 168, 226, 194, 210, 65, 135, 226, 194, 210, 65, 152, 226, + 194, 210, 65, 246, 243, 226, 194, 210, 65, 247, 37, 226, 194, 210, 65, + 228, 217, 226, 194, 210, 65, 229, 163, 226, 194, 210, 65, 248, 20, 226, + 194, 210, 65, 235, 61, 226, 194, 210, 65, 227, 24, 226, 194, 210, 65, + 225, 217, 226, 194, 210, 65, 226, 208, 226, 194, 210, 65, 246, 246, 226, + 194, 210, 65, 247, 64, 226, 194, 210, 65, 228, 207, 226, 194, 210, 65, + 229, 160, 226, 194, 210, 65, 248, 13, 226, 194, 210, 65, 235, 58, 226, + 194, 210, 224, 136, 253, 25, 225, 125, 210, 224, 136, 247, 45, 227, 247, + 210, 224, 136, 230, 209, 227, 247, 210, 224, 136, 226, 214, 227, 247, + 210, 224, 136, 246, 237, 227, 247, 210, 248, 110, 236, 234, 247, 45, 227, + 247, 210, 237, 160, 236, 234, 247, 45, 227, 247, 210, 236, 234, 230, 209, + 227, 247, 210, 236, 234, 226, 214, 227, 247, 19, 255, 36, 254, 55, 168, + 232, 76, 19, 255, 36, 254, 55, 168, 245, 151, 19, 255, 36, 254, 55, 168, + 248, 121, 19, 255, 36, 254, 55, 173, 19, 255, 36, 254, 55, 247, 63, 19, + 255, 36, 254, 55, 247, 37, 244, 135, 19, 255, 36, 254, 55, 247, 37, 226, + 194, 19, 255, 36, 254, 55, 247, 64, 226, 194, 19, 255, 36, 254, 55, 247, + 37, 227, 80, 19, 255, 36, 254, 55, 227, 24, 227, 80, 19, 255, 36, 254, + 55, 247, 64, 227, 80, 19, 255, 36, 254, 55, 168, 244, 136, 227, 80, 19, + 255, 36, 254, 55, 247, 37, 244, 136, 227, 80, 19, 255, 36, 254, 55, 168, + 226, 195, 227, 80, 19, 255, 36, 254, 55, 247, 37, 226, 195, 227, 80, 19, + 255, 36, 254, 55, 247, 37, 228, 55, 19, 255, 36, 254, 55, 227, 24, 228, + 55, 19, 255, 36, 254, 55, 247, 64, 228, 55, 19, 255, 36, 254, 55, 168, + 244, 136, 228, 55, 19, 255, 36, 254, 55, 247, 37, 244, 136, 228, 55, 19, + 255, 36, 254, 55, 168, 226, 195, 228, 55, 19, 255, 36, 254, 55, 227, 24, + 226, 195, 228, 55, 19, 255, 36, 254, 55, 247, 64, 226, 195, 228, 55, 19, + 255, 36, 254, 55, 227, 24, 236, 106, 19, 255, 36, 245, 96, 168, 233, 16, + 19, 255, 36, 226, 225, 118, 19, 255, 36, 245, 94, 118, 19, 255, 36, 247, + 209, 113, 19, 255, 36, 226, 225, 113, 19, 255, 36, 250, 196, 135, 248, + 120, 19, 255, 36, 247, 209, 135, 248, 120, 19, 255, 36, 226, 59, 173, 19, + 255, 36, 226, 59, 227, 23, 19, 255, 36, 226, 59, 227, 24, 254, 203, 15, + 19, 255, 36, 245, 94, 227, 23, 19, 255, 36, 236, 201, 227, 23, 19, 255, + 36, 226, 225, 227, 23, 19, 255, 36, 226, 225, 226, 207, 19, 255, 36, 226, + 59, 247, 63, 19, 255, 36, 226, 59, 247, 64, 254, 203, 15, 19, 255, 36, + 245, 94, 247, 63, 19, 255, 36, 226, 225, 247, 63, 19, 255, 36, 226, 225, + 168, 244, 135, 19, 255, 36, 226, 225, 152, 244, 135, 19, 255, 36, 247, + 209, 247, 37, 244, 135, 19, 255, 36, 226, 59, 247, 37, 244, 135, 19, 255, + 36, 226, 225, 247, 37, 244, 135, 19, 255, 36, 252, 1, 247, 37, 244, 135, + 19, 255, 36, 235, 219, 247, 37, 244, 135, 19, 255, 36, 226, 225, 168, + 226, 194, 19, 255, 36, 226, 225, 247, 37, 226, 194, 19, 255, 36, 250, 50, + 247, 37, 236, 106, 19, 255, 36, 228, 29, 247, 64, 236, 106, 19, 168, 132, + 53, 19, 168, 132, 5, 254, 203, 15, 19, 135, 226, 212, 53, 19, 152, 232, + 75, 53, 19, 223, 226, 53, 19, 227, 81, 53, 19, 248, 122, 53, 19, 234, 95, + 53, 19, 135, 234, 94, 53, 19, 152, 234, 94, 53, 19, 246, 243, 234, 94, + 53, 19, 247, 37, 234, 94, 53, 19, 236, 196, 53, 19, 238, 55, 253, 25, 53, + 19, 237, 156, 53, 19, 234, 11, 53, 19, 224, 66, 53, 19, 254, 89, 53, 19, + 254, 100, 53, 19, 245, 242, 53, 19, 226, 47, 253, 25, 53, 19, 223, 90, + 53, 231, 115, 229, 156, 53, 231, 115, 225, 135, 53, 231, 115, 229, 178, + 53, 231, 115, 229, 154, 53, 231, 115, 249, 217, 229, 154, 53, 231, 115, + 228, 251, 53, 231, 115, 250, 46, 53, 231, 115, 232, 64, 53, 231, 115, + 229, 166, 53, 231, 115, 248, 89, 53, 231, 115, 254, 87, 53, 231, 115, + 251, 215, 53, 233, 94, 249, 198, 5, 233, 145, 233, 94, 249, 198, 5, 233, + 11, 245, 118, 233, 94, 249, 198, 5, 227, 65, 245, 118, 233, 94, 249, 198, + 5, 252, 12, 233, 94, 249, 198, 5, 251, 163, 233, 94, 249, 198, 5, 224, + 101, 233, 94, 249, 198, 5, 245, 102, 233, 94, 249, 198, 5, 246, 150, 233, + 94, 249, 198, 5, 226, 174, 233, 94, 249, 198, 5, 58, 233, 94, 249, 198, + 5, 252, 121, 233, 94, 249, 198, 5, 229, 87, 233, 94, 249, 198, 5, 251, + 73, 233, 94, 249, 198, 5, 237, 34, 233, 94, 249, 198, 5, 236, 255, 233, + 94, 249, 198, 5, 230, 237, 233, 94, 249, 198, 5, 237, 190, 233, 94, 249, + 198, 5, 252, 130, 233, 94, 249, 198, 5, 252, 4, 233, 18, 233, 94, 249, + 198, 5, 249, 151, 233, 94, 249, 198, 5, 251, 58, 233, 94, 249, 198, 5, + 228, 190, 233, 94, 249, 198, 5, 251, 59, 233, 94, 249, 198, 5, 252, 229, + 233, 94, 249, 198, 5, 229, 76, 233, 94, 249, 198, 5, 244, 160, 233, 94, + 249, 198, 5, 245, 74, 233, 94, 249, 198, 5, 252, 82, 237, 229, 233, 94, + 249, 198, 5, 252, 0, 233, 94, 249, 198, 5, 232, 6, 233, 94, 249, 198, 5, + 248, 53, 233, 94, 249, 198, 5, 248, 128, 233, 94, 249, 198, 5, 225, 243, + 233, 94, 249, 198, 5, 252, 232, 233, 94, 249, 198, 5, 233, 19, 226, 86, + 233, 94, 249, 198, 5, 224, 218, 233, 94, 249, 198, 5, 233, 195, 233, 94, + 249, 198, 5, 231, 109, 233, 94, 249, 198, 5, 237, 179, 233, 94, 249, 198, + 5, 233, 254, 253, 66, 233, 94, 249, 198, 5, 247, 11, 233, 94, 249, 198, + 5, 245, 238, 233, 94, 249, 198, 5, 228, 30, 233, 94, 249, 198, 5, 3, 254, + 35, 233, 94, 249, 198, 5, 224, 146, 253, 41, 233, 94, 249, 198, 5, 36, + 234, 97, 82, 237, 79, 1, 57, 237, 79, 1, 72, 237, 79, 1, 254, 27, 237, + 79, 1, 252, 191, 237, 79, 1, 214, 237, 79, 1, 222, 222, 237, 79, 1, 74, + 237, 79, 1, 224, 174, 237, 79, 1, 223, 119, 237, 79, 1, 226, 253, 237, + 79, 1, 239, 182, 237, 79, 1, 239, 76, 237, 79, 1, 232, 139, 237, 79, 1, + 149, 237, 79, 1, 185, 237, 79, 1, 199, 237, 79, 1, 236, 107, 237, 79, 1, + 235, 19, 237, 79, 1, 66, 237, 79, 1, 233, 244, 237, 79, 1, 238, 168, 237, + 79, 1, 146, 237, 79, 1, 193, 237, 79, 1, 227, 109, 237, 79, 1, 226, 22, + 237, 79, 1, 254, 190, 237, 79, 1, 247, 239, 237, 79, 1, 212, 237, 79, 1, + 224, 73, 252, 8, 1, 57, 252, 8, 1, 233, 243, 252, 8, 1, 222, 222, 252, 8, + 1, 149, 252, 8, 1, 225, 75, 252, 8, 1, 146, 252, 8, 1, 237, 247, 252, 8, + 1, 255, 65, 252, 8, 1, 232, 139, 252, 8, 1, 254, 27, 252, 8, 1, 185, 252, + 8, 1, 73, 252, 8, 1, 250, 191, 252, 8, 1, 227, 109, 252, 8, 1, 229, 148, + 252, 8, 1, 229, 147, 252, 8, 1, 193, 252, 8, 1, 252, 43, 252, 8, 1, 66, + 252, 8, 1, 235, 19, 252, 8, 1, 224, 73, 252, 8, 1, 199, 252, 8, 1, 226, + 21, 252, 8, 1, 233, 244, 252, 8, 1, 228, 111, 252, 8, 1, 74, 252, 8, 1, + 72, 252, 8, 1, 225, 72, 252, 8, 1, 239, 76, 252, 8, 1, 239, 75, 252, 8, + 1, 235, 190, 252, 8, 1, 225, 76, 252, 8, 1, 214, 252, 8, 1, 246, 195, + 252, 8, 1, 228, 70, 252, 8, 1, 228, 69, 252, 8, 1, 235, 139, 252, 8, 1, + 240, 47, 252, 8, 1, 252, 42, 252, 8, 1, 226, 22, 252, 8, 1, 225, 74, 252, + 8, 1, 231, 100, 252, 8, 1, 236, 249, 252, 8, 1, 236, 248, 252, 8, 1, 236, + 247, 252, 8, 1, 236, 246, 252, 8, 1, 237, 246, 252, 8, 1, 248, 57, 252, + 8, 1, 225, 73, 84, 27, 1, 57, 84, 27, 1, 252, 238, 84, 27, 1, 239, 3, 84, + 27, 1, 250, 77, 84, 27, 1, 72, 84, 27, 1, 225, 42, 84, 27, 1, 223, 97, + 84, 27, 1, 245, 121, 84, 27, 1, 226, 239, 84, 27, 1, 74, 84, 27, 1, 177, + 84, 27, 1, 248, 2, 84, 27, 1, 247, 247, 84, 27, 1, 247, 239, 84, 27, 1, + 247, 183, 84, 27, 1, 73, 84, 27, 1, 233, 151, 84, 27, 1, 229, 114, 84, + 27, 1, 238, 107, 84, 27, 1, 247, 198, 84, 27, 1, 247, 188, 84, 27, 1, + 227, 44, 84, 27, 1, 66, 84, 27, 1, 248, 5, 84, 27, 1, 233, 90, 84, 27, 1, + 238, 217, 84, 27, 1, 248, 29, 84, 27, 1, 247, 190, 84, 27, 1, 251, 182, + 84, 27, 1, 240, 47, 84, 27, 1, 225, 76, 84, 27, 207, 118, 84, 27, 207, + 173, 84, 27, 207, 227, 23, 84, 27, 207, 247, 63, 245, 250, 1, 255, 0, + 245, 250, 1, 253, 53, 245, 250, 1, 246, 43, 245, 250, 1, 250, 173, 245, + 250, 1, 254, 252, 245, 250, 1, 232, 129, 245, 250, 1, 239, 191, 245, 250, + 1, 245, 161, 245, 250, 1, 226, 203, 245, 250, 1, 248, 11, 245, 250, 1, + 238, 85, 245, 250, 1, 238, 27, 245, 250, 1, 237, 31, 245, 250, 1, 235, + 221, 245, 250, 1, 239, 164, 245, 250, 1, 225, 90, 245, 250, 1, 233, 231, + 245, 250, 1, 235, 57, 245, 250, 1, 232, 12, 245, 250, 1, 230, 238, 245, + 250, 1, 227, 31, 245, 250, 1, 224, 108, 245, 250, 1, 247, 115, 245, 250, + 1, 240, 51, 245, 250, 1, 244, 126, 245, 250, 1, 234, 18, 245, 250, 1, + 235, 61, 244, 135, 225, 156, 1, 254, 209, 225, 156, 1, 252, 198, 225, + 156, 1, 246, 170, 225, 156, 1, 238, 227, 225, 156, 1, 250, 47, 225, 156, + 1, 244, 227, 225, 156, 1, 224, 105, 225, 156, 1, 223, 88, 225, 156, 1, + 244, 156, 225, 156, 1, 227, 10, 225, 156, 1, 223, 175, 225, 156, 1, 239, + 59, 225, 156, 1, 229, 78, 225, 156, 1, 238, 16, 225, 156, 1, 236, 215, + 225, 156, 1, 250, 20, 225, 156, 1, 234, 194, 225, 156, 1, 223, 19, 225, + 156, 1, 231, 1, 225, 156, 1, 254, 248, 225, 156, 1, 232, 173, 225, 156, + 1, 231, 23, 225, 156, 1, 232, 88, 225, 156, 1, 231, 255, 225, 156, 1, + 226, 242, 225, 156, 1, 246, 63, 225, 156, 1, 96, 225, 156, 1, 74, 225, + 156, 1, 66, 225, 156, 1, 228, 80, 225, 156, 224, 92, 249, 184, 84, 233, + 113, 5, 57, 84, 233, 113, 5, 74, 84, 233, 113, 5, 66, 84, 233, 113, 5, + 177, 84, 233, 113, 5, 238, 107, 84, 233, 113, 5, 246, 193, 84, 233, 113, + 5, 245, 218, 84, 233, 113, 5, 224, 72, 84, 233, 113, 5, 252, 39, 84, 233, + 113, 5, 239, 179, 84, 233, 113, 5, 239, 156, 84, 233, 113, 5, 227, 107, + 84, 233, 113, 5, 225, 250, 84, 233, 113, 5, 250, 189, 84, 233, 113, 5, + 250, 4, 84, 233, 113, 5, 248, 107, 84, 233, 113, 5, 226, 251, 84, 233, + 113, 5, 213, 84, 233, 113, 5, 253, 70, 84, 233, 113, 5, 247, 129, 84, + 233, 113, 5, 236, 1, 84, 233, 113, 5, 234, 206, 84, 233, 113, 5, 198, 84, + 233, 113, 5, 236, 157, 84, 233, 113, 5, 236, 66, 84, 233, 113, 5, 191, + 84, 233, 113, 5, 225, 64, 84, 233, 113, 5, 224, 228, 84, 233, 113, 5, + 208, 84, 233, 113, 5, 231, 70, 84, 233, 113, 5, 238, 43, 84, 233, 113, 5, + 231, 31, 84, 233, 113, 5, 223, 117, 84, 233, 113, 5, 229, 146, 84, 233, + 113, 5, 228, 110, 84, 233, 113, 5, 154, 84, 233, 113, 5, 254, 48, 84, + 233, 113, 5, 254, 47, 84, 233, 113, 5, 254, 46, 84, 233, 113, 5, 224, 49, + 84, 233, 113, 5, 250, 170, 84, 233, 113, 5, 250, 169, 84, 233, 113, 5, + 253, 57, 84, 233, 113, 5, 252, 62, 84, 233, 113, 224, 92, 249, 184, 84, + 233, 113, 65, 118, 84, 233, 113, 65, 113, 84, 233, 113, 65, 227, 23, 84, + 233, 113, 65, 225, 216, 84, 233, 113, 65, 244, 135, 143, 6, 1, 182, 74, + 143, 6, 1, 182, 72, 143, 6, 1, 182, 57, 143, 6, 1, 182, 255, 3, 143, 6, + 1, 182, 73, 143, 6, 1, 182, 234, 52, 143, 6, 1, 229, 63, 74, 143, 6, 1, + 229, 63, 72, 143, 6, 1, 229, 63, 57, 143, 6, 1, 229, 63, 255, 3, 143, 6, + 1, 229, 63, 73, 143, 6, 1, 229, 63, 234, 52, 143, 6, 1, 254, 34, 143, 6, + 1, 233, 255, 143, 6, 1, 224, 83, 143, 6, 1, 223, 225, 143, 6, 1, 212, + 143, 6, 1, 233, 144, 143, 6, 1, 252, 232, 143, 6, 1, 227, 37, 143, 6, 1, + 250, 67, 143, 6, 1, 251, 179, 143, 6, 1, 239, 169, 143, 6, 1, 239, 10, + 143, 6, 1, 246, 148, 143, 6, 1, 248, 29, 143, 6, 1, 225, 38, 143, 6, 1, + 247, 168, 143, 6, 1, 226, 238, 143, 6, 1, 247, 188, 143, 6, 1, 223, 95, + 143, 6, 1, 247, 183, 143, 6, 1, 223, 76, 143, 6, 1, 247, 198, 143, 6, 1, + 248, 2, 143, 6, 1, 247, 247, 143, 6, 1, 247, 239, 143, 6, 1, 247, 228, + 143, 6, 1, 234, 80, 143, 6, 1, 247, 155, 143, 3, 1, 182, 74, 143, 3, 1, + 182, 72, 143, 3, 1, 182, 57, 143, 3, 1, 182, 255, 3, 143, 3, 1, 182, 73, + 143, 3, 1, 182, 234, 52, 143, 3, 1, 229, 63, 74, 143, 3, 1, 229, 63, 72, + 143, 3, 1, 229, 63, 57, 143, 3, 1, 229, 63, 255, 3, 143, 3, 1, 229, 63, + 73, 143, 3, 1, 229, 63, 234, 52, 143, 3, 1, 254, 34, 143, 3, 1, 233, 255, + 143, 3, 1, 224, 83, 143, 3, 1, 223, 225, 143, 3, 1, 212, 143, 3, 1, 233, + 144, 143, 3, 1, 252, 232, 143, 3, 1, 227, 37, 143, 3, 1, 250, 67, 143, 3, + 1, 251, 179, 143, 3, 1, 239, 169, 143, 3, 1, 239, 10, 143, 3, 1, 246, + 148, 143, 3, 1, 248, 29, 143, 3, 1, 225, 38, 143, 3, 1, 247, 168, 143, 3, + 1, 226, 238, 143, 3, 1, 247, 188, 143, 3, 1, 223, 95, 143, 3, 1, 247, + 183, 143, 3, 1, 223, 76, 143, 3, 1, 247, 198, 143, 3, 1, 248, 2, 143, 3, + 1, 247, 247, 143, 3, 1, 247, 239, 143, 3, 1, 247, 228, 143, 3, 1, 234, + 80, 143, 3, 1, 247, 155, 229, 119, 1, 233, 143, 229, 119, 1, 226, 99, + 229, 119, 1, 238, 198, 229, 119, 1, 247, 92, 229, 119, 1, 226, 217, 229, + 119, 1, 228, 169, 229, 119, 1, 227, 210, 229, 119, 1, 251, 128, 229, 119, + 1, 223, 227, 229, 119, 1, 244, 134, 229, 119, 1, 252, 180, 229, 119, 1, + 250, 76, 229, 119, 1, 246, 179, 229, 119, 1, 224, 194, 229, 119, 1, 226, + 221, 229, 119, 1, 223, 25, 229, 119, 1, 236, 233, 229, 119, 1, 239, 99, + 229, 119, 1, 224, 103, 229, 119, 1, 245, 169, 229, 119, 1, 237, 135, 229, + 119, 1, 236, 126, 229, 119, 1, 240, 54, 229, 119, 1, 248, 28, 229, 119, + 1, 254, 80, 229, 119, 1, 255, 22, 229, 119, 1, 234, 61, 229, 119, 1, 224, + 95, 229, 119, 1, 234, 10, 229, 119, 1, 255, 3, 229, 119, 1, 231, 119, + 229, 119, 1, 234, 194, 229, 119, 1, 248, 42, 229, 119, 1, 255, 6, 229, + 119, 1, 244, 69, 229, 119, 1, 225, 116, 229, 119, 1, 234, 103, 229, 119, + 1, 234, 46, 229, 119, 1, 234, 79, 229, 119, 1, 254, 37, 229, 119, 1, 254, + 117, 229, 119, 1, 234, 31, 229, 119, 1, 254, 245, 229, 119, 1, 247, 192, + 229, 119, 1, 254, 97, 229, 119, 1, 248, 51, 229, 119, 1, 244, 73, 229, + 119, 1, 223, 207, 234, 20, 1, 254, 227, 234, 20, 1, 253, 70, 234, 20, 1, + 227, 107, 234, 20, 1, 239, 179, 234, 20, 1, 224, 72, 234, 20, 1, 238, + 227, 234, 20, 1, 250, 66, 234, 20, 1, 208, 234, 20, 1, 231, 31, 234, 20, + 1, 229, 84, 234, 20, 1, 250, 22, 234, 20, 1, 251, 248, 234, 20, 1, 246, + 193, 234, 20, 1, 247, 129, 234, 20, 1, 232, 136, 234, 20, 1, 239, 71, + 234, 20, 1, 238, 39, 234, 20, 1, 236, 136, 234, 20, 1, 234, 181, 234, 20, + 1, 224, 144, 234, 20, 1, 154, 234, 20, 1, 191, 234, 20, 1, 57, 234, 20, + 1, 72, 234, 20, 1, 74, 234, 20, 1, 73, 234, 20, 1, 66, 234, 20, 1, 255, + 63, 234, 20, 1, 248, 35, 234, 20, 1, 234, 52, 234, 20, 21, 223, 89, 234, + 20, 21, 118, 234, 20, 21, 113, 234, 20, 21, 166, 234, 20, 21, 158, 234, + 20, 21, 173, 234, 20, 21, 183, 234, 20, 21, 194, 234, 20, 21, 187, 234, + 20, 21, 192, 218, 4, 57, 218, 4, 72, 218, 4, 74, 218, 4, 73, 218, 4, 66, + 218, 4, 239, 179, 218, 4, 239, 117, 218, 4, 177, 218, 4, 239, 3, 218, 4, + 238, 199, 218, 4, 238, 150, 218, 4, 238, 107, 218, 4, 238, 43, 218, 4, + 237, 243, 218, 4, 237, 193, 218, 4, 237, 143, 218, 4, 237, 110, 218, 4, + 198, 218, 4, 236, 235, 218, 4, 236, 157, 218, 4, 236, 103, 218, 4, 236, + 66, 218, 4, 236, 1, 218, 4, 235, 162, 218, 4, 235, 89, 218, 4, 235, 6, + 218, 4, 234, 206, 218, 4, 213, 218, 4, 233, 151, 218, 4, 233, 69, 218, 4, + 233, 4, 218, 4, 232, 173, 218, 4, 208, 218, 4, 231, 244, 218, 4, 231, + 180, 218, 4, 231, 122, 218, 4, 231, 70, 218, 4, 231, 31, 218, 4, 230, + 213, 218, 4, 229, 15, 218, 4, 228, 169, 218, 4, 228, 6, 218, 4, 227, 107, + 218, 4, 227, 44, 218, 4, 226, 175, 218, 4, 96, 218, 4, 225, 250, 218, 4, + 224, 173, 218, 4, 224, 141, 218, 4, 224, 118, 218, 4, 224, 105, 218, 4, + 224, 72, 218, 4, 224, 69, 218, 4, 223, 117, 218, 4, 223, 27, 233, 77, 1, + 254, 223, 233, 77, 1, 252, 200, 233, 77, 1, 246, 171, 233, 77, 1, 250, + 49, 233, 77, 1, 245, 121, 233, 77, 1, 224, 149, 233, 77, 1, 223, 112, + 233, 77, 1, 245, 90, 233, 77, 1, 227, 10, 233, 77, 1, 223, 175, 233, 77, + 1, 239, 59, 233, 77, 1, 238, 17, 233, 77, 1, 236, 215, 233, 77, 1, 234, + 194, 233, 77, 1, 229, 180, 233, 77, 1, 254, 248, 233, 77, 1, 233, 151, + 233, 77, 1, 231, 23, 233, 77, 1, 232, 92, 233, 77, 1, 231, 108, 233, 77, + 1, 229, 78, 233, 77, 1, 227, 61, 233, 77, 65, 118, 233, 77, 65, 227, 23, + 233, 77, 65, 225, 216, 233, 77, 65, 168, 244, 135, 233, 77, 224, 92, 229, + 173, 237, 78, 1, 57, 237, 78, 1, 254, 27, 237, 78, 1, 214, 237, 78, 1, + 222, 222, 237, 78, 1, 72, 237, 78, 1, 196, 237, 78, 1, 74, 237, 78, 1, + 224, 25, 237, 78, 1, 239, 76, 237, 78, 1, 149, 237, 78, 1, 185, 237, 78, + 1, 199, 237, 78, 1, 73, 237, 78, 1, 146, 237, 78, 1, 228, 111, 237, 78, + 1, 227, 109, 237, 78, 1, 66, 237, 78, 1, 247, 130, 237, 78, 1, 232, 139, + 237, 78, 1, 193, 237, 78, 1, 226, 22, 237, 78, 1, 254, 190, 237, 78, 1, + 247, 239, 237, 78, 1, 237, 80, 237, 78, 1, 235, 19, 237, 78, 1, 252, 44, + 237, 78, 226, 75, 76, 178, 1, 57, 178, 31, 5, 74, 178, 31, 5, 66, 178, + 31, 5, 153, 146, 178, 31, 5, 72, 178, 31, 5, 73, 178, 31, 237, 219, 76, + 178, 5, 47, 231, 140, 51, 178, 5, 254, 160, 178, 5, 224, 211, 178, 1, + 177, 178, 1, 238, 227, 178, 1, 246, 193, 178, 1, 246, 66, 178, 1, 252, + 39, 178, 1, 251, 204, 178, 1, 239, 179, 178, 1, 234, 173, 178, 1, 226, + 20, 178, 1, 226, 10, 178, 1, 250, 117, 178, 1, 250, 101, 178, 1, 235, 18, + 178, 1, 227, 107, 178, 1, 226, 251, 178, 1, 250, 189, 178, 1, 250, 22, + 178, 1, 236, 1, 178, 1, 213, 178, 1, 233, 97, 178, 1, 253, 70, 178, 1, + 252, 190, 178, 1, 198, 178, 1, 191, 178, 1, 208, 178, 1, 238, 43, 178, 1, + 225, 64, 178, 1, 229, 146, 178, 1, 228, 110, 178, 1, 231, 31, 178, 1, + 223, 117, 178, 1, 154, 178, 1, 238, 167, 178, 1, 225, 254, 178, 5, 253, + 36, 46, 178, 5, 251, 254, 178, 5, 56, 51, 178, 224, 216, 178, 21, 118, + 178, 21, 113, 178, 21, 166, 178, 21, 158, 178, 65, 227, 23, 178, 65, 225, + 216, 178, 65, 168, 244, 135, 178, 65, 168, 226, 194, 178, 232, 171, 249, + 140, 178, 232, 171, 3, 251, 106, 178, 232, 171, 251, 106, 178, 232, 171, + 250, 248, 125, 178, 232, 171, 237, 32, 178, 232, 171, 237, 119, 178, 232, + 171, 250, 151, 178, 232, 171, 47, 250, 151, 178, 232, 171, 237, 165, 13, + 5, 57, 13, 5, 102, 24, 57, 13, 5, 102, 24, 253, 61, 13, 5, 102, 24, 246, + 167, 227, 19, 13, 5, 102, 24, 154, 13, 5, 102, 24, 240, 49, 13, 5, 102, + 24, 238, 30, 245, 204, 13, 5, 102, 24, 236, 32, 13, 5, 102, 24, 231, 19, + 13, 5, 255, 65, 13, 5, 255, 52, 13, 5, 255, 53, 24, 254, 78, 13, 5, 255, + 53, 24, 248, 96, 245, 204, 13, 5, 255, 53, 24, 246, 177, 13, 5, 255, 53, + 24, 246, 167, 227, 19, 13, 5, 255, 53, 24, 154, 13, 5, 255, 53, 24, 240, + 50, 245, 204, 13, 5, 255, 53, 24, 240, 23, 13, 5, 255, 53, 24, 238, 31, + 13, 5, 255, 53, 24, 229, 99, 13, 5, 255, 53, 24, 97, 79, 97, 79, 66, 13, + 5, 255, 53, 245, 204, 13, 5, 255, 50, 13, 5, 255, 51, 24, 253, 50, 13, 5, + 255, 51, 24, 246, 167, 227, 19, 13, 5, 255, 51, 24, 236, 236, 79, 247, + 239, 13, 5, 255, 51, 24, 229, 144, 13, 5, 255, 51, 24, 227, 84, 13, 5, + 255, 29, 13, 5, 254, 240, 13, 5, 254, 241, 24, 247, 193, 13, 5, 254, 241, + 24, 229, 73, 79, 246, 24, 13, 5, 254, 233, 13, 5, 254, 234, 24, 254, 233, + 13, 5, 254, 234, 24, 249, 220, 13, 5, 254, 234, 24, 246, 24, 13, 5, 254, + 234, 24, 154, 13, 5, 254, 234, 24, 239, 64, 13, 5, 254, 234, 24, 238, + 199, 13, 5, 254, 234, 24, 229, 114, 13, 5, 254, 234, 24, 225, 83, 13, 5, + 254, 231, 13, 5, 254, 225, 13, 5, 254, 196, 13, 5, 254, 197, 24, 229, + 114, 13, 5, 254, 190, 13, 5, 254, 191, 107, 254, 190, 13, 5, 254, 191, + 152, 226, 156, 13, 5, 254, 191, 79, 235, 247, 234, 35, 254, 191, 79, 235, + 246, 13, 5, 254, 191, 79, 235, 247, 228, 118, 13, 5, 254, 170, 13, 5, + 254, 153, 13, 5, 254, 129, 13, 5, 254, 130, 24, 238, 91, 13, 5, 254, 108, + 13, 5, 254, 85, 13, 5, 254, 80, 13, 5, 254, 81, 223, 43, 227, 19, 13, 5, + 254, 81, 239, 67, 227, 19, 13, 5, 254, 81, 107, 254, 81, 225, 248, 107, + 225, 248, 225, 248, 107, 225, 248, 233, 197, 13, 5, 254, 81, 107, 254, + 81, 107, 254, 80, 13, 5, 254, 81, 107, 254, 81, 107, 254, 81, 250, 238, + 254, 81, 107, 254, 81, 107, 254, 80, 13, 5, 254, 78, 13, 5, 254, 76, 13, + 5, 253, 70, 13, 5, 253, 61, 13, 5, 253, 58, 13, 5, 253, 56, 13, 5, 253, + 51, 13, 5, 253, 52, 107, 253, 51, 13, 5, 253, 50, 13, 5, 125, 13, 5, 253, + 35, 13, 5, 252, 181, 13, 5, 252, 182, 24, 57, 13, 5, 252, 182, 24, 246, + 160, 13, 5, 252, 182, 24, 240, 50, 245, 204, 13, 5, 252, 90, 13, 5, 252, + 91, 107, 252, 91, 255, 52, 13, 5, 252, 91, 107, 252, 91, 225, 138, 13, 5, + 252, 91, 250, 238, 252, 90, 13, 5, 252, 79, 13, 5, 252, 80, 107, 252, 79, + 13, 5, 252, 70, 13, 5, 252, 69, 13, 5, 250, 189, 13, 5, 250, 180, 13, 5, + 250, 181, 238, 178, 24, 102, 79, 237, 7, 13, 5, 250, 181, 238, 178, 24, + 254, 196, 13, 5, 250, 181, 238, 178, 24, 253, 50, 13, 5, 250, 181, 238, + 178, 24, 252, 181, 13, 5, 250, 181, 238, 178, 24, 246, 193, 13, 5, 250, + 181, 238, 178, 24, 246, 194, 79, 237, 7, 13, 5, 250, 181, 238, 178, 24, + 246, 46, 13, 5, 250, 181, 238, 178, 24, 246, 30, 13, 5, 250, 181, 238, + 178, 24, 245, 212, 13, 5, 250, 181, 238, 178, 24, 154, 13, 5, 250, 181, + 238, 178, 24, 239, 210, 13, 5, 250, 181, 238, 178, 24, 239, 211, 79, 237, + 110, 13, 5, 250, 181, 238, 178, 24, 239, 53, 13, 5, 250, 181, 238, 178, + 24, 238, 43, 13, 5, 250, 181, 238, 178, 24, 237, 110, 13, 5, 250, 181, + 238, 178, 24, 237, 111, 79, 237, 6, 13, 5, 250, 181, 238, 178, 24, 237, + 100, 13, 5, 250, 181, 238, 178, 24, 235, 162, 13, 5, 250, 181, 238, 178, + 24, 233, 198, 79, 233, 197, 13, 5, 250, 181, 238, 178, 24, 229, 15, 13, + 5, 250, 181, 238, 178, 24, 227, 84, 13, 5, 250, 181, 238, 178, 24, 225, + 172, 79, 246, 30, 13, 5, 250, 181, 238, 178, 24, 225, 83, 13, 5, 250, + 159, 13, 5, 250, 140, 13, 5, 250, 139, 13, 5, 250, 138, 13, 5, 250, 4, + 13, 5, 249, 245, 13, 5, 249, 221, 13, 5, 249, 222, 24, 229, 114, 13, 5, + 249, 220, 13, 5, 249, 210, 13, 5, 249, 211, 239, 26, 97, 245, 205, 249, + 195, 13, 5, 249, 195, 13, 5, 248, 107, 13, 5, 248, 108, 107, 248, 107, + 13, 5, 248, 108, 245, 204, 13, 5, 248, 108, 229, 96, 13, 5, 248, 105, 13, + 5, 248, 106, 24, 247, 180, 13, 5, 248, 104, 13, 5, 248, 103, 13, 5, 248, + 102, 13, 5, 248, 101, 13, 5, 248, 97, 13, 5, 248, 95, 13, 5, 248, 96, + 245, 204, 13, 5, 248, 96, 245, 205, 245, 204, 13, 5, 248, 94, 13, 5, 248, + 87, 13, 5, 72, 13, 5, 161, 24, 233, 197, 13, 5, 161, 107, 161, 234, 195, + 107, 234, 194, 13, 5, 248, 57, 13, 5, 248, 58, 24, 102, 79, 245, 170, 79, + 250, 189, 13, 5, 248, 58, 24, 246, 160, 13, 5, 248, 58, 24, 236, 157, 13, + 5, 248, 58, 24, 231, 12, 13, 5, 248, 58, 24, 229, 114, 13, 5, 248, 58, + 24, 66, 13, 5, 248, 37, 13, 5, 248, 27, 13, 5, 248, 2, 13, 5, 247, 239, + 13, 5, 247, 240, 24, 246, 166, 13, 5, 247, 240, 24, 246, 167, 227, 19, + 13, 5, 247, 240, 24, 236, 235, 13, 5, 247, 240, 250, 238, 247, 239, 13, + 5, 247, 240, 234, 35, 247, 239, 13, 5, 247, 240, 228, 118, 13, 5, 247, + 195, 13, 5, 247, 193, 13, 5, 247, 180, 13, 5, 247, 134, 13, 5, 247, 135, + 24, 57, 13, 5, 247, 135, 24, 102, 79, 238, 21, 13, 5, 247, 135, 24, 102, + 79, 238, 22, 24, 238, 21, 13, 5, 247, 135, 24, 254, 190, 13, 5, 247, 135, + 24, 253, 61, 13, 5, 247, 135, 24, 248, 96, 245, 204, 13, 5, 247, 135, 24, + 248, 96, 245, 205, 245, 204, 13, 5, 247, 135, 24, 154, 13, 5, 247, 135, + 24, 245, 170, 245, 204, 13, 5, 247, 135, 24, 240, 50, 245, 204, 13, 5, + 247, 135, 24, 239, 25, 13, 5, 247, 135, 24, 239, 26, 228, 118, 13, 5, + 247, 135, 24, 238, 105, 13, 5, 247, 135, 24, 238, 43, 13, 5, 247, 135, + 24, 238, 22, 24, 238, 21, 13, 5, 247, 135, 24, 237, 193, 13, 5, 247, 135, + 24, 237, 110, 13, 5, 247, 135, 24, 225, 171, 13, 5, 247, 135, 24, 225, + 163, 13, 5, 246, 193, 13, 5, 246, 194, 245, 204, 13, 5, 246, 191, 13, 5, + 246, 192, 24, 102, 79, 250, 190, 79, 154, 13, 5, 246, 192, 24, 102, 79, + 154, 13, 5, 246, 192, 24, 102, 79, 240, 49, 13, 5, 246, 192, 24, 255, 51, + 227, 20, 79, 227, 100, 13, 5, 246, 192, 24, 254, 190, 13, 5, 246, 192, + 24, 254, 80, 13, 5, 246, 192, 24, 254, 79, 79, 246, 177, 13, 5, 246, 192, + 24, 253, 61, 13, 5, 246, 192, 24, 253, 36, 79, 208, 13, 5, 246, 192, 24, + 252, 70, 13, 5, 246, 192, 24, 252, 71, 79, 208, 13, 5, 246, 192, 24, 250, + 189, 13, 5, 246, 192, 24, 250, 4, 13, 5, 246, 192, 24, 249, 222, 24, 229, + 114, 13, 5, 246, 192, 24, 248, 105, 13, 5, 246, 192, 24, 248, 2, 13, 5, + 246, 192, 24, 248, 3, 79, 238, 43, 13, 5, 246, 192, 24, 247, 239, 13, 5, + 246, 192, 24, 247, 240, 24, 246, 167, 227, 19, 13, 5, 246, 192, 24, 246, + 167, 227, 19, 13, 5, 246, 192, 24, 246, 160, 13, 5, 246, 192, 24, 246, + 46, 13, 5, 246, 192, 24, 246, 44, 13, 5, 246, 192, 24, 246, 45, 79, 57, + 13, 5, 246, 192, 24, 246, 31, 79, 228, 6, 13, 5, 246, 192, 24, 245, 170, + 79, 237, 111, 79, 247, 180, 13, 5, 246, 192, 24, 245, 154, 13, 5, 246, + 192, 24, 245, 155, 79, 238, 43, 13, 5, 246, 192, 24, 245, 76, 79, 237, + 193, 13, 5, 246, 192, 24, 244, 142, 13, 5, 246, 192, 24, 240, 50, 245, + 204, 13, 5, 246, 192, 24, 239, 201, 79, 244, 146, 79, 254, 80, 13, 5, + 246, 192, 24, 239, 53, 13, 5, 246, 192, 24, 239, 25, 13, 5, 246, 192, 24, + 238, 196, 13, 5, 246, 192, 24, 238, 197, 79, 238, 21, 13, 5, 246, 192, + 24, 238, 106, 79, 254, 190, 13, 5, 246, 192, 24, 238, 43, 13, 5, 246, + 192, 24, 236, 236, 79, 247, 239, 13, 5, 246, 192, 24, 236, 157, 13, 5, + 246, 192, 24, 234, 194, 13, 5, 246, 192, 24, 234, 195, 107, 234, 194, 13, + 5, 246, 192, 24, 213, 13, 5, 246, 192, 24, 231, 12, 13, 5, 246, 192, 24, + 230, 244, 13, 5, 246, 192, 24, 229, 114, 13, 5, 246, 192, 24, 229, 115, + 79, 225, 236, 13, 5, 246, 192, 24, 229, 88, 13, 5, 246, 192, 24, 227, + 233, 13, 5, 246, 192, 24, 227, 84, 13, 5, 246, 192, 24, 66, 13, 5, 246, + 192, 24, 225, 163, 13, 5, 246, 192, 24, 225, 164, 79, 248, 107, 13, 5, + 246, 192, 107, 246, 191, 13, 5, 246, 186, 13, 5, 246, 187, 250, 238, 246, + 186, 13, 5, 246, 184, 13, 5, 246, 185, 107, 246, 185, 246, 161, 107, 246, + 160, 13, 5, 246, 177, 13, 5, 246, 178, 246, 185, 107, 246, 185, 246, 161, + 107, 246, 160, 13, 5, 246, 176, 13, 5, 246, 174, 13, 5, 246, 168, 13, 5, + 246, 166, 13, 5, 246, 167, 227, 19, 13, 5, 246, 167, 107, 246, 166, 13, + 5, 246, 167, 250, 238, 246, 166, 13, 5, 246, 160, 13, 5, 246, 159, 13, 5, + 246, 155, 13, 5, 246, 107, 13, 5, 246, 108, 24, 238, 91, 13, 5, 246, 46, + 13, 5, 246, 47, 24, 72, 13, 5, 246, 47, 24, 66, 13, 5, 246, 47, 250, 238, + 246, 46, 13, 5, 246, 44, 13, 5, 246, 45, 107, 246, 44, 13, 5, 246, 45, + 250, 238, 246, 44, 13, 5, 246, 42, 13, 5, 246, 30, 13, 5, 246, 31, 245, + 204, 13, 5, 246, 28, 13, 5, 246, 29, 24, 102, 79, 240, 49, 13, 5, 246, + 29, 24, 246, 167, 227, 19, 13, 5, 246, 29, 24, 240, 49, 13, 5, 246, 29, + 24, 237, 111, 79, 240, 49, 13, 5, 246, 29, 24, 213, 13, 5, 246, 26, 13, + 5, 246, 24, 13, 5, 246, 25, 250, 238, 246, 24, 13, 5, 246, 25, 24, 253, + 61, 13, 5, 246, 25, 24, 227, 84, 13, 5, 246, 25, 227, 19, 13, 5, 245, + 218, 13, 5, 245, 219, 250, 238, 245, 218, 13, 5, 245, 216, 13, 5, 245, + 217, 24, 239, 53, 13, 5, 245, 217, 24, 239, 54, 24, 240, 50, 245, 204, + 13, 5, 245, 217, 24, 234, 194, 13, 5, 245, 217, 24, 231, 13, 79, 225, + 247, 13, 5, 245, 217, 245, 204, 13, 5, 245, 212, 13, 5, 245, 213, 24, + 102, 79, 238, 91, 13, 5, 245, 213, 24, 238, 91, 13, 5, 245, 213, 107, + 245, 213, 237, 105, 13, 5, 245, 208, 13, 5, 245, 206, 13, 5, 245, 207, + 24, 229, 114, 13, 5, 245, 198, 13, 5, 245, 197, 13, 5, 245, 194, 13, 5, + 245, 193, 13, 5, 154, 13, 5, 245, 170, 227, 19, 13, 5, 245, 170, 245, + 204, 13, 5, 245, 154, 13, 5, 245, 75, 13, 5, 245, 76, 24, 254, 80, 13, 5, + 245, 76, 24, 254, 78, 13, 5, 245, 76, 24, 253, 61, 13, 5, 245, 76, 24, + 249, 195, 13, 5, 245, 76, 24, 246, 184, 13, 5, 245, 76, 24, 238, 190, 13, + 5, 245, 76, 24, 234, 194, 13, 5, 245, 76, 24, 229, 114, 13, 5, 245, 76, + 24, 66, 13, 5, 244, 145, 13, 5, 244, 142, 13, 5, 244, 143, 24, 254, 190, + 13, 5, 244, 143, 24, 245, 154, 13, 5, 244, 143, 24, 239, 25, 13, 5, 244, + 143, 24, 237, 158, 13, 5, 244, 143, 24, 225, 163, 13, 5, 244, 140, 13, 5, + 74, 13, 5, 244, 81, 57, 13, 5, 244, 71, 13, 5, 240, 75, 13, 5, 240, 76, + 107, 240, 76, 252, 70, 13, 5, 240, 76, 107, 240, 76, 228, 118, 13, 5, + 240, 52, 13, 5, 240, 49, 13, 5, 240, 50, 249, 245, 13, 5, 240, 50, 231, + 180, 13, 5, 240, 50, 107, 240, 50, 229, 75, 107, 229, 75, 225, 164, 107, + 225, 163, 13, 5, 240, 50, 245, 204, 13, 5, 240, 41, 13, 5, 240, 42, 24, + 246, 167, 227, 19, 13, 5, 240, 40, 13, 5, 240, 30, 13, 5, 240, 31, 24, + 227, 84, 13, 5, 240, 31, 250, 238, 240, 30, 13, 5, 240, 31, 234, 35, 240, + 30, 13, 5, 240, 31, 228, 118, 13, 5, 240, 23, 13, 5, 240, 16, 13, 5, 239, + 210, 13, 5, 239, 200, 13, 5, 177, 13, 5, 188, 24, 57, 13, 5, 188, 24, + 255, 29, 13, 5, 188, 24, 255, 30, 79, 238, 105, 13, 5, 188, 24, 254, 78, + 13, 5, 188, 24, 253, 61, 13, 5, 188, 24, 253, 50, 13, 5, 188, 24, 125, + 13, 5, 188, 24, 252, 181, 13, 5, 188, 24, 247, 193, 13, 5, 188, 24, 247, + 180, 13, 5, 188, 24, 246, 193, 13, 5, 188, 24, 246, 177, 13, 5, 188, 24, + 246, 167, 227, 19, 13, 5, 188, 24, 246, 160, 13, 5, 188, 24, 246, 161, + 79, 229, 145, 79, 57, 13, 5, 188, 24, 246, 46, 13, 5, 188, 24, 246, 30, + 13, 5, 188, 24, 246, 25, 79, 230, 244, 13, 5, 188, 24, 246, 25, 250, 238, + 246, 24, 13, 5, 188, 24, 245, 218, 13, 5, 188, 24, 245, 197, 13, 5, 188, + 24, 240, 49, 13, 5, 188, 24, 240, 30, 13, 5, 188, 24, 239, 53, 13, 5, + 188, 24, 238, 199, 13, 5, 188, 24, 238, 196, 13, 5, 188, 24, 237, 193, + 13, 5, 188, 24, 237, 110, 13, 5, 188, 24, 236, 235, 13, 5, 188, 24, 236, + 236, 79, 248, 107, 13, 5, 188, 24, 236, 236, 79, 246, 46, 13, 5, 188, 24, + 236, 236, 79, 227, 44, 13, 5, 188, 24, 236, 157, 13, 5, 188, 24, 236, + 158, 79, 234, 190, 13, 5, 188, 24, 235, 162, 13, 5, 188, 24, 234, 194, + 13, 5, 188, 24, 233, 69, 13, 5, 188, 24, 231, 70, 13, 5, 188, 24, 231, + 31, 13, 5, 188, 24, 230, 244, 13, 5, 188, 24, 229, 146, 13, 5, 188, 24, + 229, 114, 13, 5, 188, 24, 229, 88, 13, 5, 188, 24, 229, 43, 13, 5, 188, + 24, 229, 7, 13, 5, 188, 24, 227, 240, 13, 5, 188, 24, 227, 67, 13, 5, + 188, 24, 66, 13, 5, 188, 24, 225, 171, 13, 5, 188, 24, 225, 163, 13, 5, + 188, 24, 225, 141, 24, 213, 13, 5, 188, 24, 225, 83, 13, 5, 188, 24, 223, + 47, 13, 5, 239, 73, 13, 5, 239, 74, 250, 238, 239, 73, 13, 5, 239, 68, + 13, 5, 239, 66, 13, 5, 239, 64, 13, 5, 239, 63, 13, 5, 239, 61, 13, 5, + 239, 62, 107, 239, 61, 13, 5, 239, 53, 13, 5, 239, 54, 24, 240, 50, 245, + 204, 13, 5, 239, 49, 13, 5, 239, 50, 24, 253, 61, 13, 5, 239, 50, 250, + 238, 239, 49, 13, 5, 239, 48, 13, 5, 239, 47, 13, 5, 239, 25, 13, 5, 239, + 26, 215, 24, 97, 107, 215, 24, 66, 13, 5, 239, 26, 107, 239, 26, 215, 24, + 97, 107, 215, 24, 66, 13, 5, 238, 237, 13, 5, 238, 199, 13, 5, 238, 200, + 24, 253, 61, 13, 5, 238, 200, 24, 66, 13, 5, 238, 200, 24, 225, 163, 13, + 5, 238, 196, 13, 5, 238, 190, 13, 5, 238, 180, 13, 5, 238, 179, 13, 5, + 238, 177, 13, 5, 238, 178, 107, 238, 177, 13, 5, 238, 107, 13, 5, 238, + 108, 107, 245, 76, 24, 254, 79, 238, 108, 107, 245, 76, 24, 254, 78, 13, + 5, 238, 105, 13, 5, 238, 103, 13, 5, 238, 104, 225, 54, 15, 13, 5, 238, + 102, 13, 5, 238, 100, 13, 5, 238, 101, 245, 204, 13, 5, 238, 99, 13, 5, + 238, 91, 13, 5, 238, 92, 234, 35, 238, 91, 13, 5, 238, 86, 13, 5, 238, + 70, 13, 5, 238, 43, 13, 5, 238, 31, 13, 5, 215, 24, 57, 13, 5, 215, 24, + 102, 79, 250, 190, 79, 154, 13, 5, 215, 24, 102, 79, 246, 160, 13, 5, + 215, 24, 102, 79, 238, 21, 13, 5, 215, 24, 254, 233, 13, 5, 215, 24, 254, + 190, 13, 5, 215, 24, 254, 81, 223, 43, 227, 19, 13, 5, 215, 24, 253, 61, + 13, 5, 215, 24, 252, 181, 13, 5, 215, 24, 250, 140, 13, 5, 215, 24, 247, + 239, 13, 5, 215, 24, 246, 193, 13, 5, 215, 24, 246, 160, 13, 5, 215, 24, + 245, 212, 13, 5, 215, 24, 245, 213, 79, 245, 212, 13, 5, 215, 24, 154, + 13, 5, 215, 24, 245, 154, 13, 5, 215, 24, 245, 76, 24, 234, 194, 13, 5, + 215, 24, 240, 50, 245, 204, 13, 5, 215, 24, 240, 30, 13, 5, 215, 24, 240, + 31, 79, 154, 13, 5, 215, 24, 240, 31, 79, 237, 110, 13, 5, 215, 24, 238, + 199, 13, 5, 215, 24, 238, 190, 13, 5, 215, 24, 238, 105, 13, 5, 215, 24, + 238, 100, 13, 5, 215, 24, 238, 101, 79, 245, 76, 79, 57, 13, 5, 215, 24, + 238, 31, 13, 5, 215, 24, 237, 158, 13, 5, 215, 24, 237, 110, 13, 5, 215, + 24, 237, 102, 13, 5, 215, 24, 236, 235, 13, 5, 215, 24, 236, 236, 79, + 247, 239, 13, 5, 215, 24, 236, 32, 13, 5, 215, 24, 235, 162, 13, 5, 215, + 24, 229, 115, 79, 227, 233, 13, 5, 215, 24, 229, 73, 79, 246, 25, 79, + 247, 193, 13, 5, 215, 24, 229, 73, 79, 246, 25, 227, 19, 13, 5, 215, 24, + 229, 41, 13, 5, 215, 24, 229, 42, 79, 229, 41, 13, 5, 215, 24, 227, 233, + 13, 5, 215, 24, 227, 95, 13, 5, 215, 24, 227, 84, 13, 5, 215, 24, 227, + 45, 79, 102, 79, 228, 7, 79, 236, 1, 13, 5, 215, 24, 66, 13, 5, 215, 24, + 97, 79, 57, 13, 5, 215, 24, 97, 79, 97, 79, 66, 13, 5, 215, 24, 225, 172, + 79, 254, 80, 13, 5, 215, 24, 225, 163, 13, 5, 215, 24, 225, 83, 13, 5, + 215, 228, 118, 13, 5, 238, 29, 13, 5, 238, 30, 24, 229, 114, 13, 5, 238, + 30, 24, 229, 115, 79, 227, 233, 13, 5, 238, 30, 245, 204, 13, 5, 238, 30, + 245, 205, 107, 238, 30, 245, 205, 229, 114, 13, 5, 238, 26, 13, 5, 238, + 21, 13, 5, 238, 22, 24, 238, 21, 13, 5, 238, 20, 13, 5, 216, 24, 238, 91, + 13, 5, 216, 24, 238, 92, 79, 231, 70, 13, 5, 237, 193, 13, 5, 237, 181, + 13, 5, 237, 173, 13, 5, 237, 158, 13, 5, 237, 110, 13, 5, 237, 111, 24, + 253, 61, 13, 5, 237, 108, 13, 5, 237, 109, 24, 254, 233, 13, 5, 237, 109, + 24, 253, 61, 13, 5, 237, 109, 24, 247, 180, 13, 5, 237, 109, 24, 247, + 181, 227, 19, 13, 5, 237, 109, 24, 246, 167, 227, 19, 13, 5, 237, 109, + 24, 245, 76, 24, 253, 61, 13, 5, 237, 109, 24, 240, 30, 13, 5, 237, 109, + 24, 239, 66, 13, 5, 237, 109, 24, 239, 64, 13, 5, 237, 109, 24, 239, 65, + 79, 254, 80, 13, 5, 237, 109, 24, 238, 199, 13, 5, 237, 109, 24, 238, 44, + 79, 254, 80, 13, 5, 237, 109, 24, 238, 31, 13, 5, 237, 109, 24, 236, 236, + 79, 247, 239, 13, 5, 237, 109, 24, 235, 162, 13, 5, 237, 109, 24, 234, + 206, 13, 5, 237, 109, 24, 229, 16, 79, 254, 80, 13, 5, 237, 109, 24, 228, + 255, 79, 252, 90, 13, 5, 237, 109, 24, 225, 247, 13, 5, 237, 109, 227, + 19, 13, 5, 237, 109, 250, 238, 237, 108, 13, 5, 237, 109, 234, 35, 237, + 108, 13, 5, 237, 109, 228, 118, 13, 5, 237, 109, 229, 96, 13, 5, 237, + 107, 13, 5, 237, 105, 13, 5, 237, 106, 107, 237, 105, 13, 5, 237, 106, + 234, 35, 237, 105, 13, 5, 237, 106, 229, 96, 13, 5, 237, 104, 13, 5, 237, + 102, 13, 5, 237, 100, 13, 5, 237, 101, 107, 237, 100, 13, 5, 237, 101, + 107, 237, 101, 246, 161, 107, 246, 160, 13, 5, 198, 13, 5, 237, 68, 24, + 227, 84, 13, 5, 237, 68, 245, 204, 13, 5, 237, 67, 13, 5, 237, 55, 13, 5, + 237, 24, 13, 5, 237, 7, 13, 5, 237, 6, 13, 5, 236, 235, 13, 5, 236, 205, + 13, 5, 236, 157, 13, 5, 236, 125, 13, 5, 236, 66, 13, 5, 236, 67, 107, + 236, 66, 13, 5, 236, 59, 13, 5, 236, 60, 245, 204, 13, 5, 236, 46, 13, 5, + 236, 35, 13, 5, 236, 32, 13, 5, 236, 33, 24, 57, 13, 5, 236, 33, 24, 238, + 91, 13, 5, 236, 33, 24, 223, 117, 13, 5, 236, 33, 107, 236, 32, 13, 5, + 236, 33, 107, 236, 33, 24, 102, 79, 236, 1, 13, 5, 236, 33, 250, 238, + 236, 32, 13, 5, 236, 30, 13, 5, 236, 31, 24, 57, 13, 5, 236, 31, 24, 102, + 79, 250, 4, 13, 5, 236, 31, 24, 250, 4, 13, 5, 236, 31, 245, 204, 13, 5, + 236, 1, 13, 5, 236, 0, 13, 5, 235, 246, 13, 5, 235, 247, 239, 222, 13, 5, + 235, 247, 24, 229, 44, 227, 19, 13, 5, 235, 247, 234, 35, 235, 246, 13, + 5, 235, 245, 13, 5, 235, 241, 234, 182, 13, 5, 235, 240, 13, 5, 235, 239, + 13, 5, 235, 162, 13, 5, 235, 163, 24, 57, 13, 5, 235, 163, 24, 225, 163, + 13, 5, 235, 163, 229, 96, 13, 5, 235, 89, 13, 5, 235, 90, 24, 72, 13, 5, + 235, 88, 13, 5, 235, 64, 13, 5, 235, 65, 24, 246, 167, 227, 19, 13, 5, + 235, 65, 24, 246, 161, 79, 246, 167, 227, 19, 13, 5, 235, 62, 13, 5, 235, + 63, 24, 254, 190, 13, 5, 235, 63, 24, 254, 80, 13, 5, 235, 63, 24, 254, + 81, 79, 254, 80, 13, 5, 235, 63, 24, 245, 212, 13, 5, 235, 63, 24, 236, + 236, 79, 246, 167, 227, 19, 13, 5, 235, 63, 24, 235, 162, 13, 5, 235, 63, + 24, 234, 194, 13, 5, 235, 63, 24, 229, 114, 13, 5, 235, 63, 24, 229, 115, + 79, 102, 254, 190, 13, 5, 235, 63, 24, 229, 115, 79, 254, 80, 13, 5, 235, + 63, 24, 229, 115, 79, 254, 81, 79, 254, 80, 13, 5, 235, 63, 24, 225, 172, + 79, 254, 80, 13, 5, 235, 63, 24, 225, 83, 13, 5, 235, 53, 13, 5, 234, + 206, 13, 5, 234, 205, 13, 5, 234, 194, 13, 5, 234, 195, 238, 30, 24, 246, + 160, 13, 5, 234, 195, 238, 30, 24, 237, 7, 13, 5, 234, 195, 238, 30, 24, + 231, 12, 13, 5, 234, 195, 238, 30, 24, 231, 13, 107, 234, 195, 238, 30, + 24, 231, 12, 13, 5, 234, 195, 238, 30, 24, 225, 83, 13, 5, 234, 195, 227, + 19, 13, 5, 234, 195, 107, 234, 194, 13, 5, 234, 195, 250, 238, 234, 194, + 13, 5, 234, 195, 250, 238, 234, 195, 238, 30, 107, 238, 29, 13, 5, 234, + 190, 13, 5, 234, 191, 255, 51, 24, 254, 76, 13, 5, 234, 191, 255, 51, 24, + 252, 181, 13, 5, 234, 191, 255, 51, 24, 248, 103, 13, 5, 234, 191, 255, + 51, 24, 245, 212, 13, 5, 234, 191, 255, 51, 24, 240, 50, 245, 204, 13, 5, + 234, 191, 255, 51, 24, 239, 64, 13, 5, 234, 191, 255, 51, 24, 238, 43, + 13, 5, 234, 191, 255, 51, 24, 235, 162, 13, 5, 234, 191, 255, 51, 24, + 228, 252, 13, 5, 234, 191, 255, 51, 24, 225, 171, 13, 5, 234, 191, 238, + 178, 24, 252, 181, 13, 5, 234, 191, 238, 178, 24, 252, 182, 66, 13, 5, + 213, 13, 5, 233, 235, 13, 5, 233, 212, 13, 5, 233, 197, 13, 5, 233, 107, + 13, 5, 233, 69, 13, 5, 233, 70, 24, 57, 13, 5, 233, 70, 24, 255, 52, 13, + 5, 233, 70, 24, 252, 181, 13, 5, 233, 70, 24, 252, 90, 13, 5, 233, 70, + 24, 72, 13, 5, 233, 70, 24, 74, 13, 5, 233, 70, 24, 244, 71, 13, 5, 233, + 70, 24, 66, 13, 5, 233, 70, 24, 225, 171, 13, 5, 233, 70, 250, 238, 233, + 69, 13, 5, 233, 32, 13, 5, 233, 33, 24, 239, 49, 13, 5, 233, 33, 24, 225, + 163, 13, 5, 233, 33, 24, 223, 117, 13, 5, 233, 33, 234, 35, 233, 32, 13, + 5, 208, 13, 5, 232, 20, 13, 5, 231, 180, 13, 5, 231, 70, 13, 5, 231, 31, + 13, 5, 231, 20, 234, 182, 13, 5, 231, 19, 13, 5, 231, 20, 24, 57, 13, 5, + 231, 20, 24, 248, 107, 13, 5, 231, 20, 24, 248, 105, 13, 5, 231, 20, 24, + 154, 13, 5, 231, 20, 24, 239, 53, 13, 5, 231, 20, 24, 238, 91, 13, 5, + 231, 20, 24, 237, 100, 13, 5, 231, 20, 24, 236, 157, 13, 5, 231, 20, 24, + 234, 194, 13, 5, 231, 20, 24, 231, 12, 13, 5, 231, 20, 24, 229, 88, 13, + 5, 231, 20, 24, 227, 100, 13, 5, 231, 20, 24, 225, 171, 13, 5, 231, 20, + 24, 225, 168, 13, 5, 231, 20, 24, 225, 145, 13, 5, 231, 20, 24, 225, 103, + 13, 5, 231, 20, 24, 225, 83, 13, 5, 231, 20, 107, 231, 19, 13, 5, 231, + 20, 245, 204, 13, 5, 231, 12, 13, 5, 231, 13, 215, 24, 254, 78, 13, 5, + 230, 251, 13, 5, 230, 244, 13, 5, 229, 146, 13, 5, 229, 144, 13, 5, 229, + 145, 24, 57, 13, 5, 229, 145, 24, 253, 61, 13, 5, 229, 145, 24, 246, 24, + 13, 5, 229, 145, 24, 235, 162, 13, 5, 229, 145, 24, 229, 41, 13, 5, 229, + 145, 24, 225, 236, 13, 5, 229, 145, 24, 66, 13, 5, 229, 145, 24, 97, 79, + 57, 13, 5, 229, 143, 13, 5, 229, 141, 13, 5, 229, 125, 13, 5, 229, 114, + 13, 5, 229, 115, 244, 145, 13, 5, 229, 115, 107, 229, 115, 246, 185, 107, + 246, 185, 246, 161, 107, 246, 160, 13, 5, 229, 115, 107, 229, 115, 227, + 101, 107, 227, 101, 246, 161, 107, 246, 160, 13, 5, 229, 107, 13, 5, 229, + 102, 13, 5, 229, 99, 13, 5, 229, 98, 13, 5, 229, 95, 13, 5, 229, 88, 13, + 5, 229, 89, 24, 57, 13, 5, 229, 89, 24, 240, 30, 13, 5, 229, 82, 13, 5, + 229, 83, 24, 57, 13, 5, 229, 83, 24, 253, 51, 13, 5, 229, 83, 24, 252, + 79, 13, 5, 229, 83, 24, 249, 210, 13, 5, 229, 83, 24, 246, 160, 13, 5, + 229, 83, 24, 240, 49, 13, 5, 229, 83, 24, 240, 50, 245, 204, 13, 5, 229, + 83, 24, 238, 86, 13, 5, 229, 83, 24, 237, 102, 13, 5, 229, 83, 24, 236, + 59, 13, 5, 229, 83, 24, 231, 12, 13, 5, 229, 77, 13, 5, 229, 74, 13, 5, + 229, 75, 227, 19, 13, 5, 229, 75, 107, 229, 75, 252, 71, 107, 252, 70, + 13, 5, 229, 72, 13, 5, 229, 43, 13, 5, 229, 44, 107, 239, 223, 229, 43, + 13, 5, 229, 41, 13, 5, 229, 40, 13, 5, 229, 15, 13, 5, 229, 16, 245, 204, + 13, 5, 229, 7, 13, 5, 229, 5, 13, 5, 229, 6, 107, 229, 6, 229, 41, 13, 5, + 228, 254, 13, 5, 228, 252, 13, 5, 228, 6, 13, 5, 228, 7, 107, 228, 6, 13, + 5, 227, 242, 13, 5, 227, 241, 13, 5, 227, 240, 13, 5, 227, 233, 13, 5, + 227, 232, 13, 5, 227, 213, 13, 5, 227, 212, 13, 5, 227, 107, 13, 5, 227, + 108, 254, 69, 13, 5, 227, 108, 24, 245, 75, 13, 5, 227, 108, 24, 236, + 157, 13, 5, 227, 108, 245, 204, 13, 5, 227, 100, 13, 5, 227, 101, 107, + 227, 101, 235, 90, 107, 235, 90, 249, 196, 107, 249, 195, 13, 5, 227, + 101, 228, 118, 13, 5, 227, 95, 13, 5, 108, 24, 252, 181, 13, 5, 108, 24, + 245, 212, 13, 5, 108, 24, 229, 114, 13, 5, 108, 24, 229, 43, 13, 5, 108, + 24, 225, 247, 13, 5, 108, 24, 225, 163, 13, 5, 227, 84, 13, 5, 227, 67, + 13, 5, 227, 44, 13, 5, 227, 45, 245, 204, 13, 5, 226, 175, 13, 5, 226, + 176, 227, 19, 13, 5, 226, 160, 13, 5, 226, 146, 13, 5, 226, 147, 24, 227, + 84, 13, 5, 226, 147, 107, 226, 146, 13, 5, 226, 147, 107, 226, 147, 246, + 185, 107, 246, 185, 246, 161, 107, 246, 160, 13, 5, 225, 250, 13, 5, 225, + 247, 13, 5, 225, 245, 13, 5, 225, 244, 13, 5, 225, 236, 13, 5, 225, 237, + 107, 225, 237, 223, 118, 107, 223, 117, 13, 5, 66, 13, 5, 97, 245, 212, + 13, 5, 97, 97, 66, 13, 5, 97, 107, 97, 233, 242, 107, 233, 242, 246, 161, + 107, 246, 160, 13, 5, 97, 107, 97, 227, 214, 107, 227, 213, 13, 5, 97, + 107, 97, 97, 200, 107, 97, 231, 192, 13, 5, 225, 171, 13, 5, 225, 168, + 13, 5, 225, 163, 13, 5, 225, 164, 238, 86, 13, 5, 225, 164, 24, 253, 61, + 13, 5, 225, 164, 24, 236, 157, 13, 5, 225, 164, 24, 97, 79, 97, 79, 66, + 13, 5, 225, 164, 24, 97, 79, 97, 79, 97, 245, 204, 13, 5, 225, 164, 245, + 204, 13, 5, 225, 164, 229, 96, 13, 5, 225, 164, 229, 97, 24, 253, 61, 13, + 5, 225, 160, 13, 5, 225, 145, 13, 5, 225, 146, 24, 238, 31, 13, 5, 225, + 146, 24, 236, 236, 79, 250, 189, 13, 5, 225, 146, 24, 229, 144, 13, 5, + 225, 146, 24, 66, 13, 5, 225, 144, 13, 5, 225, 140, 13, 5, 225, 141, 24, + 239, 25, 13, 5, 225, 141, 24, 213, 13, 5, 225, 138, 13, 5, 225, 139, 245, + 204, 13, 5, 225, 103, 13, 5, 225, 104, 250, 238, 225, 103, 13, 5, 225, + 104, 229, 96, 13, 5, 225, 101, 13, 5, 225, 102, 24, 102, 79, 154, 13, 5, + 225, 102, 24, 102, 79, 236, 1, 13, 5, 225, 102, 24, 254, 233, 13, 5, 225, + 102, 24, 154, 13, 5, 225, 102, 24, 234, 194, 13, 5, 225, 102, 24, 225, + 171, 13, 5, 225, 102, 24, 225, 172, 79, 254, 80, 13, 5, 225, 102, 24, + 225, 172, 79, 252, 181, 13, 5, 225, 100, 13, 5, 225, 97, 13, 5, 225, 96, + 13, 5, 225, 93, 13, 5, 225, 94, 24, 57, 13, 5, 225, 94, 24, 254, 76, 13, + 5, 225, 94, 24, 125, 13, 5, 225, 94, 24, 248, 97, 13, 5, 225, 94, 24, + 246, 193, 13, 5, 225, 94, 24, 246, 177, 13, 5, 225, 94, 24, 246, 167, + 227, 19, 13, 5, 225, 94, 24, 246, 160, 13, 5, 225, 94, 24, 245, 218, 13, + 5, 225, 94, 24, 154, 13, 5, 225, 94, 24, 240, 49, 13, 5, 225, 94, 24, + 240, 30, 13, 5, 225, 94, 24, 239, 200, 13, 5, 225, 94, 24, 238, 199, 13, + 5, 225, 94, 24, 237, 100, 13, 5, 225, 94, 24, 236, 125, 13, 5, 225, 94, + 24, 213, 13, 5, 225, 94, 24, 229, 114, 13, 5, 225, 94, 24, 229, 5, 13, 5, + 225, 94, 24, 225, 250, 13, 5, 225, 94, 24, 97, 79, 245, 212, 13, 5, 225, + 94, 24, 225, 163, 13, 5, 225, 94, 24, 225, 91, 13, 5, 225, 91, 13, 5, + 225, 92, 24, 66, 13, 5, 225, 83, 13, 5, 225, 84, 24, 57, 13, 5, 225, 84, + 24, 238, 107, 13, 5, 225, 84, 24, 238, 91, 13, 5, 225, 84, 24, 227, 84, + 13, 5, 225, 80, 13, 5, 225, 82, 13, 5, 225, 81, 13, 5, 225, 77, 13, 5, + 225, 67, 13, 5, 225, 68, 24, 239, 25, 13, 5, 225, 66, 13, 5, 223, 117, + 13, 5, 223, 118, 227, 19, 13, 5, 223, 118, 228, 119, 24, 238, 91, 13, 5, + 223, 115, 13, 5, 223, 108, 13, 5, 223, 96, 13, 5, 223, 47, 13, 5, 223, + 48, 107, 223, 47, 13, 5, 223, 46, 13, 5, 223, 44, 13, 5, 223, 45, 239, + 67, 227, 19, 13, 5, 223, 39, 13, 5, 223, 32, 13, 5, 223, 19, 13, 5, 223, + 17, 13, 5, 223, 18, 24, 57, 13, 5, 223, 16, 13, 5, 223, 15, 13, 111, 5, + 135, 254, 80, 13, 111, 5, 152, 254, 80, 13, 111, 5, 246, 243, 254, 80, + 13, 111, 5, 247, 37, 254, 80, 13, 111, 5, 228, 217, 254, 80, 13, 111, 5, + 229, 163, 254, 80, 13, 111, 5, 248, 20, 254, 80, 13, 111, 5, 235, 61, + 254, 80, 13, 111, 5, 152, 249, 195, 13, 111, 5, 246, 243, 249, 195, 13, + 111, 5, 247, 37, 249, 195, 13, 111, 5, 228, 217, 249, 195, 13, 111, 5, + 229, 163, 249, 195, 13, 111, 5, 248, 20, 249, 195, 13, 111, 5, 235, 61, + 249, 195, 13, 111, 5, 246, 243, 66, 13, 111, 5, 247, 37, 66, 13, 111, 5, + 228, 217, 66, 13, 111, 5, 229, 163, 66, 13, 111, 5, 248, 20, 66, 13, 111, + 5, 235, 61, 66, 13, 111, 5, 168, 246, 109, 13, 111, 5, 135, 246, 109, 13, + 111, 5, 152, 246, 109, 13, 111, 5, 246, 243, 246, 109, 13, 111, 5, 247, + 37, 246, 109, 13, 111, 5, 228, 217, 246, 109, 13, 111, 5, 229, 163, 246, + 109, 13, 111, 5, 248, 20, 246, 109, 13, 111, 5, 235, 61, 246, 109, 13, + 111, 5, 168, 246, 106, 13, 111, 5, 135, 246, 106, 13, 111, 5, 152, 246, + 106, 13, 111, 5, 246, 243, 246, 106, 13, 111, 5, 247, 37, 246, 106, 13, + 111, 5, 135, 229, 125, 13, 111, 5, 152, 229, 125, 13, 111, 5, 152, 229, + 126, 225, 54, 15, 13, 111, 5, 246, 243, 229, 125, 13, 111, 5, 247, 37, + 229, 125, 13, 111, 5, 228, 217, 229, 125, 13, 111, 5, 229, 163, 229, 125, + 13, 111, 5, 248, 20, 229, 125, 13, 111, 5, 235, 61, 229, 125, 13, 111, 5, + 168, 229, 121, 13, 111, 5, 135, 229, 121, 13, 111, 5, 152, 229, 121, 13, + 111, 5, 152, 229, 122, 225, 54, 15, 13, 111, 5, 246, 243, 229, 121, 13, + 111, 5, 247, 37, 229, 121, 13, 111, 5, 229, 126, 24, 246, 178, 79, 249, + 195, 13, 111, 5, 229, 126, 24, 246, 178, 79, 236, 125, 13, 111, 5, 168, + 252, 67, 13, 111, 5, 135, 252, 67, 13, 111, 5, 152, 252, 67, 13, 111, 5, + 152, 252, 68, 225, 54, 15, 13, 111, 5, 246, 243, 252, 67, 13, 111, 5, + 247, 37, 252, 67, 13, 111, 5, 152, 225, 54, 211, 247, 182, 13, 111, 5, + 152, 225, 54, 211, 247, 179, 13, 111, 5, 246, 243, 225, 54, 211, 237, + 174, 13, 111, 5, 246, 243, 225, 54, 211, 237, 172, 13, 111, 5, 246, 243, + 225, 54, 211, 237, 175, 57, 13, 111, 5, 246, 243, 225, 54, 211, 237, 175, + 254, 27, 13, 111, 5, 228, 217, 225, 54, 211, 254, 77, 13, 111, 5, 229, + 163, 225, 54, 211, 240, 22, 13, 111, 5, 229, 163, 225, 54, 211, 240, 24, + 57, 13, 111, 5, 229, 163, 225, 54, 211, 240, 24, 254, 27, 13, 111, 5, + 248, 20, 225, 54, 211, 225, 79, 13, 111, 5, 248, 20, 225, 54, 211, 225, + 78, 13, 111, 5, 235, 61, 225, 54, 211, 240, 38, 13, 111, 5, 235, 61, 225, + 54, 211, 240, 37, 13, 111, 5, 235, 61, 225, 54, 211, 240, 36, 13, 111, 5, + 235, 61, 225, 54, 211, 240, 39, 57, 13, 111, 5, 135, 254, 81, 227, 19, + 13, 111, 5, 152, 254, 81, 227, 19, 13, 111, 5, 246, 243, 254, 81, 227, + 19, 13, 111, 5, 247, 37, 254, 81, 227, 19, 13, 111, 5, 228, 217, 254, 81, + 227, 19, 13, 111, 5, 168, 253, 42, 13, 111, 5, 135, 253, 42, 13, 111, 5, + 152, 253, 42, 13, 111, 5, 246, 243, 253, 42, 13, 111, 5, 246, 243, 253, + 43, 225, 54, 15, 13, 111, 5, 247, 37, 253, 42, 13, 111, 5, 247, 37, 253, + 43, 225, 54, 15, 13, 111, 5, 235, 69, 13, 111, 5, 235, 70, 13, 111, 5, + 168, 247, 178, 13, 111, 5, 135, 247, 178, 13, 111, 5, 168, 226, 214, 249, + 195, 13, 111, 5, 135, 226, 212, 249, 195, 13, 111, 5, 247, 37, 228, 209, + 249, 195, 13, 111, 5, 168, 226, 214, 225, 54, 211, 57, 13, 111, 5, 135, + 226, 212, 225, 54, 211, 57, 13, 111, 5, 168, 248, 17, 254, 80, 13, 111, + 5, 168, 232, 77, 254, 80, 13, 111, 5, 84, 254, 72, 168, 228, 210, 13, + 111, 5, 84, 254, 72, 168, 232, 76, 13, 232, 171, 5, 84, 254, 72, 224, 92, + 249, 184, 13, 232, 171, 5, 61, 251, 61, 13, 232, 171, 5, 250, 1, 251, 61, + 13, 232, 171, 5, 250, 1, 226, 74, 43, 23, 14, 232, 177, 43, 23, 14, 250, + 132, 43, 23, 14, 233, 117, 43, 23, 14, 233, 252, 248, 6, 43, 23, 14, 233, + 252, 249, 205, 43, 23, 14, 225, 58, 248, 6, 43, 23, 14, 225, 58, 249, + 205, 43, 23, 14, 239, 16, 43, 23, 14, 227, 125, 43, 23, 14, 233, 186, 43, + 23, 14, 223, 163, 43, 23, 14, 223, 164, 249, 205, 43, 23, 14, 238, 112, + 43, 23, 14, 254, 154, 248, 6, 43, 23, 14, 247, 144, 248, 6, 43, 23, 14, + 227, 30, 43, 23, 14, 238, 239, 43, 23, 14, 254, 145, 43, 23, 14, 254, + 146, 249, 205, 43, 23, 14, 227, 130, 43, 23, 14, 226, 204, 43, 23, 14, + 234, 71, 254, 118, 43, 23, 14, 246, 0, 254, 118, 43, 23, 14, 232, 176, + 43, 23, 14, 251, 198, 43, 23, 14, 225, 48, 43, 23, 14, 239, 199, 254, + 118, 43, 23, 14, 238, 241, 254, 118, 43, 23, 14, 238, 240, 254, 118, 43, + 23, 14, 230, 235, 43, 23, 14, 233, 177, 43, 23, 14, 228, 53, 254, 148, + 43, 23, 14, 233, 251, 254, 118, 43, 23, 14, 225, 57, 254, 118, 43, 23, + 14, 254, 149, 254, 118, 43, 23, 14, 254, 143, 43, 23, 14, 238, 158, 43, + 23, 14, 231, 190, 43, 23, 14, 233, 67, 254, 118, 43, 23, 14, 226, 155, + 43, 23, 14, 254, 189, 43, 23, 14, 230, 194, 43, 23, 14, 227, 133, 254, + 118, 43, 23, 14, 227, 133, 236, 200, 228, 51, 43, 23, 14, 233, 246, 254, + 118, 43, 23, 14, 226, 234, 43, 23, 14, 237, 222, 43, 23, 14, 248, 73, 43, + 23, 14, 226, 80, 43, 23, 14, 227, 12, 43, 23, 14, 238, 115, 43, 23, 14, + 254, 154, 247, 144, 235, 152, 43, 23, 14, 246, 220, 254, 118, 43, 23, 14, + 240, 26, 43, 23, 14, 226, 56, 254, 118, 43, 23, 14, 239, 18, 226, 55, 43, + 23, 14, 233, 135, 43, 23, 14, 232, 180, 43, 23, 14, 238, 140, 43, 23, 14, + 251, 145, 254, 118, 43, 23, 14, 232, 0, 43, 23, 14, 233, 189, 254, 118, + 43, 23, 14, 233, 187, 254, 118, 43, 23, 14, 244, 67, 43, 23, 14, 235, + 236, 43, 23, 14, 233, 103, 43, 23, 14, 238, 141, 254, 211, 43, 23, 14, + 226, 56, 254, 211, 43, 23, 14, 228, 34, 43, 23, 14, 245, 226, 43, 23, 14, + 239, 199, 235, 152, 43, 23, 14, 234, 71, 235, 152, 43, 23, 14, 233, 252, + 235, 152, 43, 23, 14, 233, 102, 43, 23, 14, 238, 128, 43, 23, 14, 233, + 101, 43, 23, 14, 238, 114, 43, 23, 14, 233, 136, 235, 152, 43, 23, 14, + 238, 240, 235, 153, 254, 172, 43, 23, 14, 238, 241, 235, 153, 254, 172, + 43, 23, 14, 223, 161, 43, 23, 14, 254, 146, 235, 152, 43, 23, 14, 254, + 147, 227, 131, 235, 152, 43, 23, 14, 223, 162, 43, 23, 14, 238, 113, 43, + 23, 14, 248, 1, 43, 23, 14, 251, 199, 43, 23, 14, 236, 134, 239, 198, 43, + 23, 14, 225, 58, 235, 152, 43, 23, 14, 233, 67, 235, 152, 43, 23, 14, + 232, 181, 235, 152, 43, 23, 14, 234, 68, 43, 23, 14, 254, 164, 43, 23, + 14, 237, 77, 43, 23, 14, 233, 187, 235, 152, 43, 23, 14, 233, 189, 235, + 152, 43, 23, 14, 247, 169, 233, 188, 43, 23, 14, 238, 51, 43, 23, 14, + 254, 165, 43, 23, 14, 226, 56, 235, 152, 43, 23, 14, 248, 4, 43, 23, 14, + 227, 133, 235, 152, 43, 23, 14, 227, 126, 43, 23, 14, 251, 145, 235, 152, + 43, 23, 14, 247, 210, 43, 23, 14, 230, 195, 235, 152, 43, 23, 14, 224, + 58, 238, 158, 43, 23, 14, 226, 53, 43, 23, 14, 232, 182, 43, 23, 14, 226, + 57, 43, 23, 14, 226, 54, 43, 23, 14, 232, 179, 43, 23, 14, 226, 52, 43, + 23, 14, 232, 178, 43, 23, 14, 245, 255, 43, 23, 14, 254, 113, 43, 23, 14, + 247, 169, 254, 113, 43, 23, 14, 233, 246, 235, 152, 43, 23, 14, 226, 233, + 247, 177, 43, 23, 14, 226, 233, 247, 143, 43, 23, 14, 226, 235, 254, 150, + 43, 23, 14, 226, 228, 239, 57, 254, 142, 43, 23, 14, 239, 17, 43, 23, 14, + 247, 229, 43, 23, 14, 223, 205, 239, 15, 43, 23, 14, 223, 205, 254, 172, + 43, 23, 14, 228, 52, 43, 23, 14, 238, 159, 254, 172, 43, 23, 14, 249, + 206, 254, 118, 43, 23, 14, 238, 116, 254, 118, 43, 23, 14, 238, 116, 254, + 211, 43, 23, 14, 238, 116, 235, 152, 43, 23, 14, 254, 149, 235, 152, 43, + 23, 14, 254, 151, 43, 23, 14, 249, 205, 43, 23, 14, 226, 65, 43, 23, 14, + 227, 4, 43, 23, 14, 238, 132, 43, 23, 14, 237, 225, 247, 225, 251, 138, + 43, 23, 14, 237, 225, 248, 74, 251, 139, 43, 23, 14, 237, 225, 226, 67, + 251, 139, 43, 23, 14, 237, 225, 227, 14, 251, 139, 43, 23, 14, 237, 225, + 240, 21, 251, 138, 43, 23, 14, 246, 0, 235, 153, 254, 172, 43, 23, 14, + 246, 0, 233, 178, 254, 109, 43, 23, 14, 246, 0, 233, 178, 250, 26, 43, + 23, 14, 249, 228, 43, 23, 14, 249, 229, 233, 178, 254, 110, 239, 15, 43, + 23, 14, 249, 229, 233, 178, 254, 110, 254, 172, 43, 23, 14, 249, 229, + 233, 178, 250, 26, 43, 23, 14, 226, 71, 43, 23, 14, 254, 114, 43, 23, 14, + 240, 28, 43, 23, 14, 249, 249, 43, 23, 14, 255, 4, 232, 246, 254, 115, + 43, 23, 14, 255, 4, 254, 112, 43, 23, 14, 255, 4, 254, 115, 43, 23, 14, + 255, 4, 236, 195, 43, 23, 14, 255, 4, 236, 203, 43, 23, 14, 255, 4, 246, + 1, 43, 23, 14, 255, 4, 245, 254, 43, 23, 14, 255, 4, 232, 246, 246, 1, + 43, 23, 14, 237, 10, 232, 187, 244, 65, 43, 23, 14, 237, 10, 254, 213, + 232, 187, 244, 65, 43, 23, 14, 237, 10, 250, 25, 244, 65, 43, 23, 14, + 237, 10, 254, 213, 250, 25, 244, 65, 43, 23, 14, 237, 10, 226, 60, 244, + 65, 43, 23, 14, 237, 10, 226, 72, 43, 23, 14, 237, 10, 227, 8, 244, 65, + 43, 23, 14, 237, 10, 227, 8, 237, 228, 244, 65, 43, 23, 14, 237, 10, 237, + 228, 244, 65, 43, 23, 14, 237, 10, 233, 22, 244, 65, 43, 23, 14, 239, + 203, 227, 26, 244, 66, 43, 23, 14, 254, 147, 227, 26, 244, 66, 43, 23, + 14, 247, 110, 227, 5, 43, 23, 14, 247, 110, 236, 93, 43, 23, 14, 247, + 110, 249, 233, 43, 23, 14, 237, 10, 225, 52, 244, 65, 43, 23, 14, 237, + 10, 232, 186, 244, 65, 43, 23, 14, 237, 10, 233, 22, 227, 8, 244, 65, 43, + 23, 14, 245, 252, 236, 5, 254, 150, 43, 23, 14, 245, 252, 236, 5, 249, + 204, 43, 23, 14, 247, 237, 239, 57, 246, 220, 224, 195, 43, 23, 14, 240, + 27, 43, 23, 14, 240, 25, 43, 23, 14, 246, 220, 254, 119, 250, 24, 244, + 64, 43, 23, 14, 246, 220, 249, 247, 213, 43, 23, 14, 246, 220, 249, 247, + 235, 236, 43, 23, 14, 246, 220, 235, 232, 244, 65, 43, 23, 14, 246, 220, + 249, 247, 250, 4, 43, 23, 14, 246, 220, 228, 200, 249, 246, 250, 4, 43, + 23, 14, 246, 220, 249, 247, 239, 3, 43, 23, 14, 246, 220, 249, 247, 223, + 27, 43, 23, 14, 246, 220, 249, 247, 235, 90, 239, 15, 43, 23, 14, 246, + 220, 249, 247, 235, 90, 254, 172, 43, 23, 14, 246, 220, 237, 40, 251, + 140, 249, 233, 43, 23, 14, 246, 220, 237, 40, 251, 140, 236, 93, 43, 23, + 14, 247, 71, 228, 200, 251, 140, 225, 51, 43, 23, 14, 246, 220, 228, 200, + 251, 140, 227, 134, 43, 23, 14, 246, 220, 235, 154, 43, 23, 14, 251, 141, + 223, 3, 43, 23, 14, 251, 141, 238, 157, 43, 23, 14, 251, 141, 228, 141, + 43, 23, 14, 246, 220, 244, 81, 223, 204, 227, 9, 43, 23, 14, 246, 220, + 247, 238, 254, 166, 43, 23, 14, 223, 204, 226, 61, 43, 23, 14, 249, 241, + 226, 61, 43, 23, 14, 249, 241, 227, 9, 43, 23, 14, 249, 241, 254, 152, + 248, 74, 249, 155, 43, 23, 14, 249, 241, 236, 91, 227, 13, 249, 155, 43, + 23, 14, 249, 241, 249, 225, 247, 153, 249, 155, 43, 23, 14, 249, 241, + 226, 69, 234, 75, 249, 155, 43, 23, 14, 223, 204, 254, 152, 248, 74, 249, + 155, 43, 23, 14, 223, 204, 236, 91, 227, 13, 249, 155, 43, 23, 14, 223, + 204, 249, 225, 247, 153, 249, 155, 43, 23, 14, 223, 204, 226, 69, 234, + 75, 249, 155, 43, 23, 14, 246, 120, 249, 240, 43, 23, 14, 246, 120, 223, + 203, 43, 23, 14, 249, 248, 254, 152, 236, 135, 43, 23, 14, 249, 248, 254, + 152, 236, 220, 43, 23, 14, 249, 248, 249, 205, 43, 23, 14, 249, 248, 226, + 226, 43, 23, 14, 228, 248, 226, 226, 43, 23, 14, 228, 248, 226, 227, 249, + 194, 43, 23, 14, 228, 248, 226, 227, 226, 62, 43, 23, 14, 228, 248, 226, + 227, 227, 2, 43, 23, 14, 228, 248, 254, 90, 43, 23, 14, 228, 248, 254, + 91, 249, 194, 43, 23, 14, 228, 248, 254, 91, 226, 62, 43, 23, 14, 228, + 248, 254, 91, 227, 2, 43, 23, 14, 249, 226, 246, 102, 43, 23, 14, 249, + 232, 234, 13, 43, 23, 14, 228, 46, 43, 23, 14, 254, 107, 213, 43, 23, 14, + 254, 107, 224, 195, 43, 23, 14, 254, 107, 246, 193, 43, 23, 14, 254, 107, + 250, 4, 43, 23, 14, 254, 107, 239, 3, 43, 23, 14, 254, 107, 223, 27, 43, + 23, 14, 254, 107, 235, 89, 43, 23, 14, 238, 240, 235, 153, 236, 202, 43, + 23, 14, 238, 241, 235, 153, 236, 202, 43, 23, 14, 238, 240, 235, 153, + 239, 15, 43, 23, 14, 238, 241, 235, 153, 239, 15, 43, 23, 14, 238, 159, + 239, 15, 43, 23, 14, 246, 0, 235, 153, 239, 15, 23, 14, 228, 241, 253, + 32, 23, 14, 47, 253, 32, 23, 14, 35, 253, 32, 23, 14, 231, 193, 35, 253, + 32, 23, 14, 250, 129, 253, 32, 23, 14, 229, 63, 253, 32, 23, 14, 42, 231, + 212, 53, 23, 14, 41, 231, 212, 53, 23, 14, 231, 212, 249, 138, 23, 14, + 250, 166, 230, 198, 23, 14, 250, 190, 252, 14, 23, 14, 230, 198, 23, 14, + 251, 66, 23, 14, 231, 210, 247, 60, 23, 14, 231, 210, 247, 59, 23, 14, + 231, 210, 247, 58, 23, 14, 247, 76, 23, 14, 247, 77, 51, 23, 14, 252, + 108, 76, 23, 14, 252, 34, 23, 14, 252, 116, 23, 14, 104, 23, 14, 234, 60, + 228, 65, 23, 14, 225, 202, 228, 65, 23, 14, 226, 190, 228, 65, 23, 14, + 246, 242, 228, 65, 23, 14, 247, 36, 228, 65, 23, 14, 228, 216, 228, 65, + 23, 14, 228, 214, 246, 228, 23, 14, 246, 240, 246, 228, 23, 14, 246, 196, + 251, 92, 23, 14, 246, 196, 251, 93, 234, 15, 254, 204, 23, 14, 246, 196, + 251, 93, 234, 15, 253, 22, 23, 14, 252, 45, 251, 92, 23, 14, 247, 131, + 251, 92, 23, 14, 247, 131, 251, 93, 234, 15, 254, 204, 23, 14, 247, 131, + 251, 93, 234, 15, 253, 22, 23, 14, 248, 112, 251, 91, 23, 14, 248, 112, + 251, 90, 23, 14, 236, 53, 236, 234, 231, 199, 23, 14, 47, 229, 123, 23, + 14, 47, 247, 24, 23, 14, 247, 25, 225, 116, 23, 14, 247, 25, 248, 127, + 23, 14, 235, 224, 225, 116, 23, 14, 235, 224, 248, 127, 23, 14, 229, 124, + 225, 116, 23, 14, 229, 124, 248, 127, 23, 14, 232, 77, 206, 229, 123, 23, + 14, 232, 77, 206, 247, 24, 23, 14, 251, 52, 226, 157, 23, 14, 250, 213, + 226, 157, 23, 14, 234, 15, 254, 204, 23, 14, 234, 15, 253, 22, 23, 14, + 232, 62, 254, 204, 23, 14, 232, 62, 253, 22, 23, 14, 236, 56, 231, 199, + 23, 14, 224, 119, 231, 199, 23, 14, 132, 231, 199, 23, 14, 232, 77, 231, + 199, 23, 14, 248, 17, 231, 199, 23, 14, 228, 211, 231, 199, 23, 14, 226, + 205, 231, 199, 23, 14, 228, 205, 231, 199, 23, 14, 168, 244, 136, 225, + 214, 231, 199, 23, 14, 224, 74, 234, 236, 23, 14, 79, 234, 236, 23, 14, + 251, 107, 224, 74, 234, 236, 23, 14, 37, 234, 237, 224, 121, 23, 14, 37, + 234, 237, 252, 150, 23, 14, 226, 79, 234, 237, 99, 224, 121, 23, 14, 226, + 79, 234, 237, 99, 252, 150, 23, 14, 226, 79, 234, 237, 42, 224, 121, 23, + 14, 226, 79, 234, 237, 42, 252, 150, 23, 14, 226, 79, 234, 237, 41, 224, + 121, 23, 14, 226, 79, 234, 237, 41, 252, 150, 23, 14, 226, 79, 234, 237, + 103, 224, 121, 23, 14, 226, 79, 234, 237, 103, 252, 150, 23, 14, 226, 79, + 234, 237, 99, 41, 224, 121, 23, 14, 226, 79, 234, 237, 99, 41, 252, 150, + 23, 14, 236, 85, 234, 237, 224, 121, 23, 14, 236, 85, 234, 237, 252, 150, + 23, 14, 226, 76, 234, 237, 103, 224, 121, 23, 14, 226, 76, 234, 237, 103, + 252, 150, 23, 14, 233, 181, 234, 236, 23, 14, 224, 201, 234, 236, 23, 14, + 234, 237, 252, 150, 23, 14, 234, 201, 234, 236, 23, 14, 251, 71, 234, + 237, 224, 121, 23, 14, 251, 71, 234, 237, 252, 150, 23, 14, 252, 106, 23, + 14, 224, 119, 234, 238, 23, 14, 132, 234, 238, 23, 14, 232, 77, 234, 238, + 23, 14, 248, 17, 234, 238, 23, 14, 228, 211, 234, 238, 23, 14, 226, 205, + 234, 238, 23, 14, 228, 205, 234, 238, 23, 14, 168, 244, 136, 225, 214, + 234, 238, 23, 14, 36, 228, 48, 23, 14, 36, 228, 126, 228, 48, 23, 14, 36, + 226, 85, 23, 14, 36, 226, 84, 23, 14, 36, 226, 83, 23, 14, 247, 50, 226, + 85, 23, 14, 247, 50, 226, 84, 23, 14, 247, 50, 226, 83, 23, 14, 36, 254, + 51, 249, 140, 23, 14, 36, 247, 30, 23, 14, 36, 247, 29, 23, 14, 36, 247, + 28, 23, 14, 36, 247, 27, 23, 14, 36, 247, 26, 23, 14, 252, 226, 252, 237, + 23, 14, 247, 233, 252, 237, 23, 14, 252, 226, 226, 170, 23, 14, 247, 233, + 226, 170, 23, 14, 252, 226, 228, 185, 23, 14, 247, 233, 228, 185, 23, 14, + 252, 226, 233, 76, 23, 14, 247, 233, 233, 76, 23, 14, 36, 255, 41, 23, + 14, 36, 228, 67, 23, 14, 36, 227, 18, 23, 14, 36, 228, 68, 23, 14, 36, + 237, 21, 23, 14, 36, 237, 20, 23, 14, 36, 255, 40, 23, 14, 36, 237, 118, + 23, 14, 254, 98, 225, 116, 23, 14, 254, 98, 248, 127, 23, 14, 36, 249, + 152, 23, 14, 36, 231, 138, 23, 14, 36, 247, 18, 23, 14, 36, 228, 181, 23, + 14, 36, 252, 209, 23, 14, 36, 47, 226, 110, 23, 14, 36, 226, 66, 226, + 110, 23, 14, 231, 141, 23, 14, 228, 2, 23, 14, 223, 119, 23, 14, 233, 68, + 23, 14, 236, 192, 23, 14, 246, 247, 23, 14, 250, 249, 23, 14, 250, 68, + 23, 14, 245, 247, 234, 239, 228, 194, 23, 14, 245, 247, 234, 239, 235, 7, + 228, 194, 23, 14, 226, 96, 23, 14, 225, 233, 23, 14, 239, 223, 225, 233, + 23, 14, 225, 234, 228, 194, 23, 14, 225, 234, 225, 116, 23, 14, 234, 26, + 228, 22, 23, 14, 234, 26, 228, 19, 23, 14, 234, 26, 228, 18, 23, 14, 234, + 26, 228, 17, 23, 14, 234, 26, 228, 16, 23, 14, 234, 26, 228, 15, 23, 14, + 234, 26, 228, 14, 23, 14, 234, 26, 228, 13, 23, 14, 234, 26, 228, 12, 23, + 14, 234, 26, 228, 21, 23, 14, 234, 26, 228, 20, 23, 14, 245, 128, 23, 14, + 235, 161, 23, 14, 247, 233, 106, 228, 42, 23, 14, 250, 62, 228, 194, 23, + 14, 36, 103, 252, 121, 23, 14, 36, 99, 252, 121, 23, 14, 36, 245, 137, + 23, 14, 36, 228, 175, 233, 25, 23, 14, 233, 148, 76, 23, 14, 233, 148, + 99, 76, 23, 14, 132, 233, 148, 76, 23, 14, 246, 17, 225, 116, 23, 14, + 246, 17, 248, 127, 23, 14, 2, 247, 49, 23, 14, 250, 152, 23, 14, 250, + 153, 254, 216, 23, 14, 236, 253, 23, 14, 237, 126, 23, 14, 252, 103, 23, + 14, 229, 190, 224, 121, 23, 14, 229, 190, 252, 150, 23, 14, 236, 123, 23, + 14, 236, 124, 252, 150, 23, 14, 229, 184, 224, 121, 23, 14, 229, 184, + 252, 150, 23, 14, 246, 210, 224, 121, 23, 14, 246, 210, 252, 150, 23, 14, + 237, 127, 233, 121, 231, 199, 23, 14, 237, 127, 240, 20, 231, 199, 23, + 14, 252, 104, 231, 199, 23, 14, 229, 190, 231, 199, 23, 14, 236, 124, + 231, 199, 23, 14, 229, 184, 231, 199, 23, 14, 227, 25, 233, 119, 250, + 230, 232, 195, 233, 120, 23, 14, 227, 25, 233, 119, 250, 230, 232, 195, + 240, 19, 23, 14, 227, 25, 233, 119, 250, 230, 232, 195, 233, 121, 249, + 215, 23, 14, 227, 25, 240, 18, 250, 230, 232, 195, 233, 120, 23, 14, 227, + 25, 240, 18, 250, 230, 232, 195, 240, 19, 23, 14, 227, 25, 240, 18, 250, + 230, 232, 195, 240, 20, 249, 215, 23, 14, 227, 25, 240, 18, 250, 230, + 232, 195, 240, 20, 249, 214, 23, 14, 227, 25, 240, 18, 250, 230, 232, + 195, 240, 20, 249, 213, 23, 14, 250, 246, 23, 14, 245, 227, 252, 45, 251, + 92, 23, 14, 245, 227, 247, 131, 251, 92, 23, 14, 37, 254, 27, 23, 14, + 224, 215, 23, 14, 233, 2, 23, 14, 251, 85, 23, 14, 230, 226, 23, 14, 251, + 87, 23, 14, 226, 101, 23, 14, 232, 240, 23, 14, 232, 241, 247, 20, 23, + 14, 230, 227, 247, 20, 23, 14, 226, 102, 231, 198, 23, 14, 233, 109, 227, + 254, 19, 224, 205, 150, 227, 182, 19, 224, 205, 150, 227, 171, 19, 224, + 205, 150, 227, 161, 19, 224, 205, 150, 227, 154, 19, 224, 205, 150, 227, + 146, 19, 224, 205, 150, 227, 140, 19, 224, 205, 150, 227, 139, 19, 224, + 205, 150, 227, 138, 19, 224, 205, 150, 227, 137, 19, 224, 205, 150, 227, + 181, 19, 224, 205, 150, 227, 180, 19, 224, 205, 150, 227, 179, 19, 224, + 205, 150, 227, 178, 19, 224, 205, 150, 227, 177, 19, 224, 205, 150, 227, + 176, 19, 224, 205, 150, 227, 175, 19, 224, 205, 150, 227, 174, 19, 224, + 205, 150, 227, 173, 19, 224, 205, 150, 227, 172, 19, 224, 205, 150, 227, + 170, 19, 224, 205, 150, 227, 169, 19, 224, 205, 150, 227, 168, 19, 224, + 205, 150, 227, 167, 19, 224, 205, 150, 227, 166, 19, 224, 205, 150, 227, + 145, 19, 224, 205, 150, 227, 144, 19, 224, 205, 150, 227, 143, 19, 224, + 205, 150, 227, 142, 19, 224, 205, 150, 227, 141, 19, 239, 242, 150, 227, + 182, 19, 239, 242, 150, 227, 171, 19, 239, 242, 150, 227, 154, 19, 239, + 242, 150, 227, 146, 19, 239, 242, 150, 227, 139, 19, 239, 242, 150, 227, + 138, 19, 239, 242, 150, 227, 180, 19, 239, 242, 150, 227, 179, 19, 239, + 242, 150, 227, 178, 19, 239, 242, 150, 227, 177, 19, 239, 242, 150, 227, + 174, 19, 239, 242, 150, 227, 173, 19, 239, 242, 150, 227, 172, 19, 239, + 242, 150, 227, 167, 19, 239, 242, 150, 227, 166, 19, 239, 242, 150, 227, + 165, 19, 239, 242, 150, 227, 164, 19, 239, 242, 150, 227, 163, 19, 239, + 242, 150, 227, 162, 19, 239, 242, 150, 227, 160, 19, 239, 242, 150, 227, + 159, 19, 239, 242, 150, 227, 158, 19, 239, 242, 150, 227, 157, 19, 239, + 242, 150, 227, 156, 19, 239, 242, 150, 227, 155, 19, 239, 242, 150, 227, + 153, 19, 239, 242, 150, 227, 152, 19, 239, 242, 150, 227, 151, 19, 239, + 242, 150, 227, 150, 19, 239, 242, 150, 227, 149, 19, 239, 242, 150, 227, + 148, 19, 239, 242, 150, 227, 147, 19, 239, 242, 150, 227, 145, 19, 239, + 242, 150, 227, 144, 19, 239, 242, 150, 227, 143, 19, 239, 242, 150, 227, + 142, 19, 239, 242, 150, 227, 141, 36, 19, 23, 226, 63, 36, 19, 23, 227, + 3, 36, 19, 23, 233, 128, 19, 23, 237, 224, 236, 92, 32, 248, 48, 249, + 227, 32, 245, 111, 248, 48, 249, 227, 32, 244, 139, 248, 48, 249, 227, + 32, 248, 47, 245, 112, 249, 227, 32, 248, 47, 244, 138, 249, 227, 32, + 248, 48, 142, 32, 251, 218, 142, 32, 246, 218, 251, 106, 142, 32, 236, + 116, 142, 32, 253, 27, 142, 32, 239, 0, 228, 184, 142, 32, 251, 19, 142, + 32, 254, 82, 142, 32, 234, 34, 142, 32, 252, 111, 234, 10, 142, 32, 250, + 64, 145, 249, 191, 142, 32, 249, 188, 142, 32, 223, 167, 142, 32, 240, + 12, 142, 32, 233, 133, 142, 32, 231, 243, 142, 32, 251, 29, 142, 32, 244, + 222, 253, 66, 142, 32, 224, 168, 142, 32, 247, 6, 142, 32, 255, 21, 142, + 32, 231, 219, 142, 32, 231, 203, 142, 32, 248, 46, 142, 32, 239, 103, + 142, 32, 251, 24, 142, 32, 247, 232, 142, 32, 248, 83, 142, 32, 251, 194, + 142, 32, 250, 70, 142, 32, 18, 231, 202, 142, 32, 233, 236, 142, 32, 237, + 227, 142, 32, 251, 80, 142, 32, 238, 188, 142, 32, 246, 151, 142, 32, + 228, 28, 142, 32, 232, 163, 142, 32, 246, 217, 142, 32, 231, 204, 142, + 32, 237, 253, 145, 236, 101, 142, 32, 231, 200, 142, 32, 246, 7, 180, + 236, 223, 142, 32, 247, 234, 142, 32, 228, 35, 142, 32, 245, 229, 142, + 32, 247, 227, 142, 32, 233, 162, 142, 32, 231, 132, 142, 32, 247, 19, + 142, 32, 225, 50, 145, 224, 155, 142, 32, 251, 32, 142, 32, 236, 233, + 142, 32, 247, 170, 142, 32, 225, 124, 142, 32, 249, 216, 142, 32, 251, + 82, 236, 72, 142, 32, 245, 214, 142, 32, 246, 152, 240, 16, 142, 32, 237, + 4, 142, 32, 255, 38, 142, 32, 247, 245, 142, 32, 248, 129, 142, 32, 224, + 153, 142, 32, 228, 238, 142, 32, 239, 248, 142, 32, 250, 37, 142, 32, + 250, 134, 142, 32, 249, 212, 142, 32, 247, 147, 142, 32, 229, 158, 142, + 32, 228, 37, 142, 32, 245, 139, 142, 32, 251, 48, 142, 32, 251, 78, 142, + 32, 247, 114, 142, 32, 255, 5, 142, 32, 251, 47, 142, 32, 234, 62, 226, + 240, 225, 33, 142, 32, 249, 235, 142, 32, 238, 36, 142, 32, 246, 244, + 250, 255, 231, 116, 225, 126, 21, 118, 250, 255, 231, 116, 225, 126, 21, + 113, 250, 255, 231, 116, 225, 126, 21, 166, 250, 255, 231, 116, 225, 126, + 21, 158, 250, 255, 231, 116, 225, 126, 21, 173, 250, 255, 231, 116, 225, + 126, 21, 183, 250, 255, 231, 116, 225, 126, 21, 194, 250, 255, 231, 116, + 225, 126, 21, 187, 250, 255, 231, 116, 225, 126, 21, 192, 250, 255, 231, + 116, 227, 22, 21, 118, 250, 255, 231, 116, 227, 22, 21, 113, 250, 255, + 231, 116, 227, 22, 21, 166, 250, 255, 231, 116, 227, 22, 21, 158, 250, + 255, 231, 116, 227, 22, 21, 173, 250, 255, 231, 116, 227, 22, 21, 183, + 250, 255, 231, 116, 227, 22, 21, 194, 250, 255, 231, 116, 227, 22, 21, + 187, 250, 255, 231, 116, 227, 22, 21, 192, 12, 18, 6, 57, 12, 18, 6, 254, + 27, 12, 18, 6, 252, 44, 12, 18, 6, 222, 222, 12, 18, 6, 72, 12, 18, 6, + 247, 130, 12, 18, 6, 214, 12, 18, 6, 212, 12, 18, 6, 74, 12, 18, 6, 239, + 182, 12, 18, 6, 239, 76, 12, 18, 6, 149, 12, 18, 6, 185, 12, 18, 6, 199, + 12, 18, 6, 73, 12, 18, 6, 233, 244, 12, 18, 6, 232, 139, 12, 18, 6, 146, + 12, 18, 6, 193, 12, 18, 6, 227, 109, 12, 18, 6, 66, 12, 18, 6, 196, 12, + 18, 6, 224, 174, 12, 18, 6, 224, 73, 12, 18, 6, 224, 25, 12, 18, 6, 223, + 119, 12, 18, 3, 57, 12, 18, 3, 254, 27, 12, 18, 3, 252, 44, 12, 18, 3, + 222, 222, 12, 18, 3, 72, 12, 18, 3, 247, 130, 12, 18, 3, 214, 12, 18, 3, + 212, 12, 18, 3, 74, 12, 18, 3, 239, 182, 12, 18, 3, 239, 76, 12, 18, 3, + 149, 12, 18, 3, 185, 12, 18, 3, 199, 12, 18, 3, 73, 12, 18, 3, 233, 244, + 12, 18, 3, 232, 139, 12, 18, 3, 146, 12, 18, 3, 193, 12, 18, 3, 227, 109, + 12, 18, 3, 66, 12, 18, 3, 196, 12, 18, 3, 224, 174, 12, 18, 3, 224, 73, + 12, 18, 3, 224, 25, 12, 18, 3, 223, 119, 12, 27, 6, 57, 12, 27, 6, 254, + 27, 12, 27, 6, 252, 44, 12, 27, 6, 222, 222, 12, 27, 6, 72, 12, 27, 6, + 247, 130, 12, 27, 6, 214, 12, 27, 6, 212, 12, 27, 6, 74, 12, 27, 6, 239, + 182, 12, 27, 6, 239, 76, 12, 27, 6, 149, 12, 27, 6, 185, 12, 27, 6, 199, + 12, 27, 6, 73, 12, 27, 6, 233, 244, 12, 27, 6, 232, 139, 12, 27, 6, 146, + 12, 27, 6, 193, 12, 27, 6, 227, 109, 12, 27, 6, 66, 12, 27, 6, 196, 12, + 27, 6, 224, 174, 12, 27, 6, 224, 73, 12, 27, 6, 224, 25, 12, 27, 6, 223, + 119, 12, 27, 3, 57, 12, 27, 3, 254, 27, 12, 27, 3, 252, 44, 12, 27, 3, + 222, 222, 12, 27, 3, 72, 12, 27, 3, 247, 130, 12, 27, 3, 214, 12, 27, 3, + 74, 12, 27, 3, 239, 182, 12, 27, 3, 239, 76, 12, 27, 3, 149, 12, 27, 3, + 185, 12, 27, 3, 199, 12, 27, 3, 73, 12, 27, 3, 233, 244, 12, 27, 3, 232, + 139, 12, 27, 3, 146, 12, 27, 3, 193, 12, 27, 3, 227, 109, 12, 27, 3, 66, + 12, 27, 3, 196, 12, 27, 3, 224, 174, 12, 27, 3, 224, 73, 12, 27, 3, 224, + 25, 12, 27, 3, 223, 119, 12, 18, 27, 6, 57, 12, 18, 27, 6, 254, 27, 12, + 18, 27, 6, 252, 44, 12, 18, 27, 6, 222, 222, 12, 18, 27, 6, 72, 12, 18, + 27, 6, 247, 130, 12, 18, 27, 6, 214, 12, 18, 27, 6, 212, 12, 18, 27, 6, + 74, 12, 18, 27, 6, 239, 182, 12, 18, 27, 6, 239, 76, 12, 18, 27, 6, 149, + 12, 18, 27, 6, 185, 12, 18, 27, 6, 199, 12, 18, 27, 6, 73, 12, 18, 27, 6, + 233, 244, 12, 18, 27, 6, 232, 139, 12, 18, 27, 6, 146, 12, 18, 27, 6, + 193, 12, 18, 27, 6, 227, 109, 12, 18, 27, 6, 66, 12, 18, 27, 6, 196, 12, + 18, 27, 6, 224, 174, 12, 18, 27, 6, 224, 73, 12, 18, 27, 6, 224, 25, 12, + 18, 27, 6, 223, 119, 12, 18, 27, 3, 57, 12, 18, 27, 3, 254, 27, 12, 18, + 27, 3, 252, 44, 12, 18, 27, 3, 222, 222, 12, 18, 27, 3, 72, 12, 18, 27, + 3, 247, 130, 12, 18, 27, 3, 214, 12, 18, 27, 3, 212, 12, 18, 27, 3, 74, + 12, 18, 27, 3, 239, 182, 12, 18, 27, 3, 239, 76, 12, 18, 27, 3, 149, 12, + 18, 27, 3, 185, 12, 18, 27, 3, 199, 12, 18, 27, 3, 73, 12, 18, 27, 3, + 233, 244, 12, 18, 27, 3, 232, 139, 12, 18, 27, 3, 146, 12, 18, 27, 3, + 193, 12, 18, 27, 3, 227, 109, 12, 18, 27, 3, 66, 12, 18, 27, 3, 196, 12, + 18, 27, 3, 224, 174, 12, 18, 27, 3, 224, 73, 12, 18, 27, 3, 224, 25, 12, + 18, 27, 3, 223, 119, 12, 95, 6, 57, 12, 95, 6, 252, 44, 12, 95, 6, 222, + 222, 12, 95, 6, 214, 12, 95, 6, 239, 182, 12, 95, 6, 239, 76, 12, 95, 6, + 199, 12, 95, 6, 73, 12, 95, 6, 233, 244, 12, 95, 6, 232, 139, 12, 95, 6, + 193, 12, 95, 6, 227, 109, 12, 95, 6, 66, 12, 95, 6, 196, 12, 95, 6, 224, + 174, 12, 95, 6, 224, 73, 12, 95, 6, 224, 25, 12, 95, 6, 223, 119, 12, 95, + 3, 57, 12, 95, 3, 254, 27, 12, 95, 3, 252, 44, 12, 95, 3, 222, 222, 12, + 95, 3, 247, 130, 12, 95, 3, 212, 12, 95, 3, 74, 12, 95, 3, 239, 182, 12, + 95, 3, 239, 76, 12, 95, 3, 149, 12, 95, 3, 185, 12, 95, 3, 199, 12, 95, + 3, 233, 244, 12, 95, 3, 232, 139, 12, 95, 3, 146, 12, 95, 3, 193, 12, 95, + 3, 227, 109, 12, 95, 3, 66, 12, 95, 3, 196, 12, 95, 3, 224, 174, 12, 95, + 3, 224, 73, 12, 95, 3, 224, 25, 12, 95, 3, 223, 119, 12, 18, 95, 6, 57, + 12, 18, 95, 6, 254, 27, 12, 18, 95, 6, 252, 44, 12, 18, 95, 6, 222, 222, + 12, 18, 95, 6, 72, 12, 18, 95, 6, 247, 130, 12, 18, 95, 6, 214, 12, 18, + 95, 6, 212, 12, 18, 95, 6, 74, 12, 18, 95, 6, 239, 182, 12, 18, 95, 6, + 239, 76, 12, 18, 95, 6, 149, 12, 18, 95, 6, 185, 12, 18, 95, 6, 199, 12, + 18, 95, 6, 73, 12, 18, 95, 6, 233, 244, 12, 18, 95, 6, 232, 139, 12, 18, + 95, 6, 146, 12, 18, 95, 6, 193, 12, 18, 95, 6, 227, 109, 12, 18, 95, 6, + 66, 12, 18, 95, 6, 196, 12, 18, 95, 6, 224, 174, 12, 18, 95, 6, 224, 73, + 12, 18, 95, 6, 224, 25, 12, 18, 95, 6, 223, 119, 12, 18, 95, 3, 57, 12, + 18, 95, 3, 254, 27, 12, 18, 95, 3, 252, 44, 12, 18, 95, 3, 222, 222, 12, + 18, 95, 3, 72, 12, 18, 95, 3, 247, 130, 12, 18, 95, 3, 214, 12, 18, 95, + 3, 212, 12, 18, 95, 3, 74, 12, 18, 95, 3, 239, 182, 12, 18, 95, 3, 239, + 76, 12, 18, 95, 3, 149, 12, 18, 95, 3, 185, 12, 18, 95, 3, 199, 12, 18, + 95, 3, 73, 12, 18, 95, 3, 233, 244, 12, 18, 95, 3, 232, 139, 12, 18, 95, + 3, 146, 12, 18, 95, 3, 193, 12, 18, 95, 3, 227, 109, 12, 18, 95, 3, 66, + 12, 18, 95, 3, 196, 12, 18, 95, 3, 224, 174, 12, 18, 95, 3, 224, 73, 12, + 18, 95, 3, 224, 25, 12, 18, 95, 3, 223, 119, 12, 110, 6, 57, 12, 110, 6, + 254, 27, 12, 110, 6, 222, 222, 12, 110, 6, 72, 12, 110, 6, 247, 130, 12, + 110, 6, 214, 12, 110, 6, 239, 182, 12, 110, 6, 239, 76, 12, 110, 6, 149, + 12, 110, 6, 185, 12, 110, 6, 199, 12, 110, 6, 73, 12, 110, 6, 233, 244, + 12, 110, 6, 232, 139, 12, 110, 6, 193, 12, 110, 6, 227, 109, 12, 110, 6, + 66, 12, 110, 6, 196, 12, 110, 6, 224, 174, 12, 110, 6, 224, 73, 12, 110, + 6, 224, 25, 12, 110, 3, 57, 12, 110, 3, 254, 27, 12, 110, 3, 252, 44, 12, + 110, 3, 222, 222, 12, 110, 3, 72, 12, 110, 3, 247, 130, 12, 110, 3, 214, + 12, 110, 3, 212, 12, 110, 3, 74, 12, 110, 3, 239, 182, 12, 110, 3, 239, + 76, 12, 110, 3, 149, 12, 110, 3, 185, 12, 110, 3, 199, 12, 110, 3, 73, + 12, 110, 3, 233, 244, 12, 110, 3, 232, 139, 12, 110, 3, 146, 12, 110, 3, + 193, 12, 110, 3, 227, 109, 12, 110, 3, 66, 12, 110, 3, 196, 12, 110, 3, + 224, 174, 12, 110, 3, 224, 73, 12, 110, 3, 224, 25, 12, 110, 3, 223, 119, + 12, 159, 6, 57, 12, 159, 6, 254, 27, 12, 159, 6, 222, 222, 12, 159, 6, + 72, 12, 159, 6, 247, 130, 12, 159, 6, 214, 12, 159, 6, 74, 12, 159, 6, + 239, 182, 12, 159, 6, 239, 76, 12, 159, 6, 149, 12, 159, 6, 185, 12, 159, + 6, 73, 12, 159, 6, 193, 12, 159, 6, 227, 109, 12, 159, 6, 66, 12, 159, 6, + 196, 12, 159, 6, 224, 174, 12, 159, 6, 224, 73, 12, 159, 6, 224, 25, 12, + 159, 3, 57, 12, 159, 3, 254, 27, 12, 159, 3, 252, 44, 12, 159, 3, 222, + 222, 12, 159, 3, 72, 12, 159, 3, 247, 130, 12, 159, 3, 214, 12, 159, 3, + 212, 12, 159, 3, 74, 12, 159, 3, 239, 182, 12, 159, 3, 239, 76, 12, 159, + 3, 149, 12, 159, 3, 185, 12, 159, 3, 199, 12, 159, 3, 73, 12, 159, 3, + 233, 244, 12, 159, 3, 232, 139, 12, 159, 3, 146, 12, 159, 3, 193, 12, + 159, 3, 227, 109, 12, 159, 3, 66, 12, 159, 3, 196, 12, 159, 3, 224, 174, + 12, 159, 3, 224, 73, 12, 159, 3, 224, 25, 12, 159, 3, 223, 119, 12, 18, + 110, 6, 57, 12, 18, 110, 6, 254, 27, 12, 18, 110, 6, 252, 44, 12, 18, + 110, 6, 222, 222, 12, 18, 110, 6, 72, 12, 18, 110, 6, 247, 130, 12, 18, + 110, 6, 214, 12, 18, 110, 6, 212, 12, 18, 110, 6, 74, 12, 18, 110, 6, + 239, 182, 12, 18, 110, 6, 239, 76, 12, 18, 110, 6, 149, 12, 18, 110, 6, + 185, 12, 18, 110, 6, 199, 12, 18, 110, 6, 73, 12, 18, 110, 6, 233, 244, + 12, 18, 110, 6, 232, 139, 12, 18, 110, 6, 146, 12, 18, 110, 6, 193, 12, + 18, 110, 6, 227, 109, 12, 18, 110, 6, 66, 12, 18, 110, 6, 196, 12, 18, + 110, 6, 224, 174, 12, 18, 110, 6, 224, 73, 12, 18, 110, 6, 224, 25, 12, + 18, 110, 6, 223, 119, 12, 18, 110, 3, 57, 12, 18, 110, 3, 254, 27, 12, + 18, 110, 3, 252, 44, 12, 18, 110, 3, 222, 222, 12, 18, 110, 3, 72, 12, + 18, 110, 3, 247, 130, 12, 18, 110, 3, 214, 12, 18, 110, 3, 212, 12, 18, + 110, 3, 74, 12, 18, 110, 3, 239, 182, 12, 18, 110, 3, 239, 76, 12, 18, + 110, 3, 149, 12, 18, 110, 3, 185, 12, 18, 110, 3, 199, 12, 18, 110, 3, + 73, 12, 18, 110, 3, 233, 244, 12, 18, 110, 3, 232, 139, 12, 18, 110, 3, + 146, 12, 18, 110, 3, 193, 12, 18, 110, 3, 227, 109, 12, 18, 110, 3, 66, + 12, 18, 110, 3, 196, 12, 18, 110, 3, 224, 174, 12, 18, 110, 3, 224, 73, + 12, 18, 110, 3, 224, 25, 12, 18, 110, 3, 223, 119, 12, 30, 6, 57, 12, 30, + 6, 254, 27, 12, 30, 6, 252, 44, 12, 30, 6, 222, 222, 12, 30, 6, 72, 12, + 30, 6, 247, 130, 12, 30, 6, 214, 12, 30, 6, 212, 12, 30, 6, 74, 12, 30, + 6, 239, 182, 12, 30, 6, 239, 76, 12, 30, 6, 149, 12, 30, 6, 185, 12, 30, + 6, 199, 12, 30, 6, 73, 12, 30, 6, 233, 244, 12, 30, 6, 232, 139, 12, 30, + 6, 146, 12, 30, 6, 193, 12, 30, 6, 227, 109, 12, 30, 6, 66, 12, 30, 6, + 196, 12, 30, 6, 224, 174, 12, 30, 6, 224, 73, 12, 30, 6, 224, 25, 12, 30, + 6, 223, 119, 12, 30, 3, 57, 12, 30, 3, 254, 27, 12, 30, 3, 252, 44, 12, + 30, 3, 222, 222, 12, 30, 3, 72, 12, 30, 3, 247, 130, 12, 30, 3, 214, 12, + 30, 3, 212, 12, 30, 3, 74, 12, 30, 3, 239, 182, 12, 30, 3, 239, 76, 12, + 30, 3, 149, 12, 30, 3, 185, 12, 30, 3, 199, 12, 30, 3, 73, 12, 30, 3, + 233, 244, 12, 30, 3, 232, 139, 12, 30, 3, 146, 12, 30, 3, 193, 12, 30, 3, + 227, 109, 12, 30, 3, 66, 12, 30, 3, 196, 12, 30, 3, 224, 174, 12, 30, 3, + 224, 73, 12, 30, 3, 224, 25, 12, 30, 3, 223, 119, 12, 30, 18, 6, 57, 12, + 30, 18, 6, 254, 27, 12, 30, 18, 6, 252, 44, 12, 30, 18, 6, 222, 222, 12, + 30, 18, 6, 72, 12, 30, 18, 6, 247, 130, 12, 30, 18, 6, 214, 12, 30, 18, + 6, 212, 12, 30, 18, 6, 74, 12, 30, 18, 6, 239, 182, 12, 30, 18, 6, 239, + 76, 12, 30, 18, 6, 149, 12, 30, 18, 6, 185, 12, 30, 18, 6, 199, 12, 30, + 18, 6, 73, 12, 30, 18, 6, 233, 244, 12, 30, 18, 6, 232, 139, 12, 30, 18, + 6, 146, 12, 30, 18, 6, 193, 12, 30, 18, 6, 227, 109, 12, 30, 18, 6, 66, + 12, 30, 18, 6, 196, 12, 30, 18, 6, 224, 174, 12, 30, 18, 6, 224, 73, 12, + 30, 18, 6, 224, 25, 12, 30, 18, 6, 223, 119, 12, 30, 18, 3, 57, 12, 30, + 18, 3, 254, 27, 12, 30, 18, 3, 252, 44, 12, 30, 18, 3, 222, 222, 12, 30, + 18, 3, 72, 12, 30, 18, 3, 247, 130, 12, 30, 18, 3, 214, 12, 30, 18, 3, + 212, 12, 30, 18, 3, 74, 12, 30, 18, 3, 239, 182, 12, 30, 18, 3, 239, 76, + 12, 30, 18, 3, 149, 12, 30, 18, 3, 185, 12, 30, 18, 3, 199, 12, 30, 18, + 3, 73, 12, 30, 18, 3, 233, 244, 12, 30, 18, 3, 232, 139, 12, 30, 18, 3, + 146, 12, 30, 18, 3, 193, 12, 30, 18, 3, 227, 109, 12, 30, 18, 3, 66, 12, + 30, 18, 3, 196, 12, 30, 18, 3, 224, 174, 12, 30, 18, 3, 224, 73, 12, 30, + 18, 3, 224, 25, 12, 30, 18, 3, 223, 119, 12, 30, 27, 6, 57, 12, 30, 27, + 6, 254, 27, 12, 30, 27, 6, 252, 44, 12, 30, 27, 6, 222, 222, 12, 30, 27, + 6, 72, 12, 30, 27, 6, 247, 130, 12, 30, 27, 6, 214, 12, 30, 27, 6, 212, + 12, 30, 27, 6, 74, 12, 30, 27, 6, 239, 182, 12, 30, 27, 6, 239, 76, 12, + 30, 27, 6, 149, 12, 30, 27, 6, 185, 12, 30, 27, 6, 199, 12, 30, 27, 6, + 73, 12, 30, 27, 6, 233, 244, 12, 30, 27, 6, 232, 139, 12, 30, 27, 6, 146, + 12, 30, 27, 6, 193, 12, 30, 27, 6, 227, 109, 12, 30, 27, 6, 66, 12, 30, + 27, 6, 196, 12, 30, 27, 6, 224, 174, 12, 30, 27, 6, 224, 73, 12, 30, 27, + 6, 224, 25, 12, 30, 27, 6, 223, 119, 12, 30, 27, 3, 57, 12, 30, 27, 3, + 254, 27, 12, 30, 27, 3, 252, 44, 12, 30, 27, 3, 222, 222, 12, 30, 27, 3, + 72, 12, 30, 27, 3, 247, 130, 12, 30, 27, 3, 214, 12, 30, 27, 3, 212, 12, + 30, 27, 3, 74, 12, 30, 27, 3, 239, 182, 12, 30, 27, 3, 239, 76, 12, 30, + 27, 3, 149, 12, 30, 27, 3, 185, 12, 30, 27, 3, 199, 12, 30, 27, 3, 73, + 12, 30, 27, 3, 233, 244, 12, 30, 27, 3, 232, 139, 12, 30, 27, 3, 146, 12, + 30, 27, 3, 193, 12, 30, 27, 3, 227, 109, 12, 30, 27, 3, 66, 12, 30, 27, + 3, 196, 12, 30, 27, 3, 224, 174, 12, 30, 27, 3, 224, 73, 12, 30, 27, 3, + 224, 25, 12, 30, 27, 3, 223, 119, 12, 30, 18, 27, 6, 57, 12, 30, 18, 27, + 6, 254, 27, 12, 30, 18, 27, 6, 252, 44, 12, 30, 18, 27, 6, 222, 222, 12, + 30, 18, 27, 6, 72, 12, 30, 18, 27, 6, 247, 130, 12, 30, 18, 27, 6, 214, + 12, 30, 18, 27, 6, 212, 12, 30, 18, 27, 6, 74, 12, 30, 18, 27, 6, 239, + 182, 12, 30, 18, 27, 6, 239, 76, 12, 30, 18, 27, 6, 149, 12, 30, 18, 27, + 6, 185, 12, 30, 18, 27, 6, 199, 12, 30, 18, 27, 6, 73, 12, 30, 18, 27, 6, + 233, 244, 12, 30, 18, 27, 6, 232, 139, 12, 30, 18, 27, 6, 146, 12, 30, + 18, 27, 6, 193, 12, 30, 18, 27, 6, 227, 109, 12, 30, 18, 27, 6, 66, 12, + 30, 18, 27, 6, 196, 12, 30, 18, 27, 6, 224, 174, 12, 30, 18, 27, 6, 224, + 73, 12, 30, 18, 27, 6, 224, 25, 12, 30, 18, 27, 6, 223, 119, 12, 30, 18, + 27, 3, 57, 12, 30, 18, 27, 3, 254, 27, 12, 30, 18, 27, 3, 252, 44, 12, + 30, 18, 27, 3, 222, 222, 12, 30, 18, 27, 3, 72, 12, 30, 18, 27, 3, 247, + 130, 12, 30, 18, 27, 3, 214, 12, 30, 18, 27, 3, 212, 12, 30, 18, 27, 3, + 74, 12, 30, 18, 27, 3, 239, 182, 12, 30, 18, 27, 3, 239, 76, 12, 30, 18, + 27, 3, 149, 12, 30, 18, 27, 3, 185, 12, 30, 18, 27, 3, 199, 12, 30, 18, + 27, 3, 73, 12, 30, 18, 27, 3, 233, 244, 12, 30, 18, 27, 3, 232, 139, 12, + 30, 18, 27, 3, 146, 12, 30, 18, 27, 3, 193, 12, 30, 18, 27, 3, 227, 109, + 12, 30, 18, 27, 3, 66, 12, 30, 18, 27, 3, 196, 12, 30, 18, 27, 3, 224, + 174, 12, 30, 18, 27, 3, 224, 73, 12, 30, 18, 27, 3, 224, 25, 12, 30, 18, + 27, 3, 223, 119, 12, 189, 6, 57, 12, 189, 6, 254, 27, 12, 189, 6, 252, + 44, 12, 189, 6, 222, 222, 12, 189, 6, 72, 12, 189, 6, 247, 130, 12, 189, + 6, 214, 12, 189, 6, 212, 12, 189, 6, 74, 12, 189, 6, 239, 182, 12, 189, + 6, 239, 76, 12, 189, 6, 149, 12, 189, 6, 185, 12, 189, 6, 199, 12, 189, + 6, 73, 12, 189, 6, 233, 244, 12, 189, 6, 232, 139, 12, 189, 6, 146, 12, + 189, 6, 193, 12, 189, 6, 227, 109, 12, 189, 6, 66, 12, 189, 6, 196, 12, + 189, 6, 224, 174, 12, 189, 6, 224, 73, 12, 189, 6, 224, 25, 12, 189, 6, + 223, 119, 12, 189, 3, 57, 12, 189, 3, 254, 27, 12, 189, 3, 252, 44, 12, + 189, 3, 222, 222, 12, 189, 3, 72, 12, 189, 3, 247, 130, 12, 189, 3, 214, + 12, 189, 3, 212, 12, 189, 3, 74, 12, 189, 3, 239, 182, 12, 189, 3, 239, + 76, 12, 189, 3, 149, 12, 189, 3, 185, 12, 189, 3, 199, 12, 189, 3, 73, + 12, 189, 3, 233, 244, 12, 189, 3, 232, 139, 12, 189, 3, 146, 12, 189, 3, + 193, 12, 189, 3, 227, 109, 12, 189, 3, 66, 12, 189, 3, 196, 12, 189, 3, + 224, 174, 12, 189, 3, 224, 73, 12, 189, 3, 224, 25, 12, 189, 3, 223, 119, + 12, 27, 3, 249, 139, 74, 12, 27, 3, 249, 139, 239, 182, 12, 18, 6, 254, + 205, 12, 18, 6, 252, 198, 12, 18, 6, 246, 169, 12, 18, 6, 250, 47, 12, + 18, 6, 247, 206, 12, 18, 6, 223, 88, 12, 18, 6, 247, 171, 12, 18, 6, 226, + 223, 12, 18, 6, 239, 215, 12, 18, 6, 239, 35, 12, 18, 6, 238, 16, 12, 18, + 6, 236, 66, 12, 18, 6, 234, 206, 12, 18, 6, 224, 64, 12, 18, 6, 234, 64, + 12, 18, 6, 233, 69, 12, 18, 6, 231, 182, 12, 18, 6, 226, 224, 98, 12, 18, + 6, 229, 2, 12, 18, 6, 227, 61, 12, 18, 6, 225, 110, 12, 18, 6, 233, 87, + 12, 18, 6, 251, 169, 12, 18, 6, 232, 183, 12, 18, 6, 234, 66, 12, 18, + 235, 250, 12, 18, 3, 254, 205, 12, 18, 3, 252, 198, 12, 18, 3, 246, 169, + 12, 18, 3, 250, 47, 12, 18, 3, 247, 206, 12, 18, 3, 223, 88, 12, 18, 3, + 247, 171, 12, 18, 3, 226, 223, 12, 18, 3, 239, 215, 12, 18, 3, 239, 35, + 12, 18, 3, 238, 16, 12, 18, 3, 236, 66, 12, 18, 3, 234, 206, 12, 18, 3, + 224, 64, 12, 18, 3, 234, 64, 12, 18, 3, 233, 69, 12, 18, 3, 231, 182, 12, + 18, 3, 35, 229, 2, 12, 18, 3, 229, 2, 12, 18, 3, 227, 61, 12, 18, 3, 225, + 110, 12, 18, 3, 233, 87, 12, 18, 3, 251, 169, 12, 18, 3, 232, 183, 12, + 18, 3, 234, 66, 12, 18, 233, 175, 249, 236, 12, 18, 247, 207, 98, 12, 18, + 226, 224, 98, 12, 18, 239, 36, 98, 12, 18, 233, 88, 98, 12, 18, 231, 183, + 98, 12, 18, 233, 70, 98, 12, 27, 6, 254, 205, 12, 27, 6, 252, 198, 12, + 27, 6, 246, 169, 12, 27, 6, 250, 47, 12, 27, 6, 247, 206, 12, 27, 6, 223, + 88, 12, 27, 6, 247, 171, 12, 27, 6, 226, 223, 12, 27, 6, 239, 215, 12, + 27, 6, 239, 35, 12, 27, 6, 238, 16, 12, 27, 6, 236, 66, 12, 27, 6, 234, + 206, 12, 27, 6, 224, 64, 12, 27, 6, 234, 64, 12, 27, 6, 233, 69, 12, 27, + 6, 231, 182, 12, 27, 6, 226, 224, 98, 12, 27, 6, 229, 2, 12, 27, 6, 227, + 61, 12, 27, 6, 225, 110, 12, 27, 6, 233, 87, 12, 27, 6, 251, 169, 12, 27, + 6, 232, 183, 12, 27, 6, 234, 66, 12, 27, 235, 250, 12, 27, 3, 254, 205, + 12, 27, 3, 252, 198, 12, 27, 3, 246, 169, 12, 27, 3, 250, 47, 12, 27, 3, + 247, 206, 12, 27, 3, 223, 88, 12, 27, 3, 247, 171, 12, 27, 3, 226, 223, + 12, 27, 3, 239, 215, 12, 27, 3, 239, 35, 12, 27, 3, 238, 16, 12, 27, 3, + 236, 66, 12, 27, 3, 234, 206, 12, 27, 3, 224, 64, 12, 27, 3, 234, 64, 12, + 27, 3, 233, 69, 12, 27, 3, 231, 182, 12, 27, 3, 35, 229, 2, 12, 27, 3, + 229, 2, 12, 27, 3, 227, 61, 12, 27, 3, 225, 110, 12, 27, 3, 233, 87, 12, + 27, 3, 251, 169, 12, 27, 3, 232, 183, 12, 27, 3, 234, 66, 12, 27, 233, + 175, 249, 236, 12, 27, 247, 207, 98, 12, 27, 226, 224, 98, 12, 27, 239, + 36, 98, 12, 27, 233, 88, 98, 12, 27, 231, 183, 98, 12, 27, 233, 70, 98, + 12, 18, 27, 6, 254, 205, 12, 18, 27, 6, 252, 198, 12, 18, 27, 6, 246, + 169, 12, 18, 27, 6, 250, 47, 12, 18, 27, 6, 247, 206, 12, 18, 27, 6, 223, + 88, 12, 18, 27, 6, 247, 171, 12, 18, 27, 6, 226, 223, 12, 18, 27, 6, 239, + 215, 12, 18, 27, 6, 239, 35, 12, 18, 27, 6, 238, 16, 12, 18, 27, 6, 236, + 66, 12, 18, 27, 6, 234, 206, 12, 18, 27, 6, 224, 64, 12, 18, 27, 6, 234, + 64, 12, 18, 27, 6, 233, 69, 12, 18, 27, 6, 231, 182, 12, 18, 27, 6, 226, + 224, 98, 12, 18, 27, 6, 229, 2, 12, 18, 27, 6, 227, 61, 12, 18, 27, 6, + 225, 110, 12, 18, 27, 6, 233, 87, 12, 18, 27, 6, 251, 169, 12, 18, 27, 6, + 232, 183, 12, 18, 27, 6, 234, 66, 12, 18, 27, 235, 250, 12, 18, 27, 3, + 254, 205, 12, 18, 27, 3, 252, 198, 12, 18, 27, 3, 246, 169, 12, 18, 27, + 3, 250, 47, 12, 18, 27, 3, 247, 206, 12, 18, 27, 3, 223, 88, 12, 18, 27, + 3, 247, 171, 12, 18, 27, 3, 226, 223, 12, 18, 27, 3, 239, 215, 12, 18, + 27, 3, 239, 35, 12, 18, 27, 3, 238, 16, 12, 18, 27, 3, 236, 66, 12, 18, + 27, 3, 234, 206, 12, 18, 27, 3, 224, 64, 12, 18, 27, 3, 234, 64, 12, 18, + 27, 3, 233, 69, 12, 18, 27, 3, 231, 182, 12, 18, 27, 3, 35, 229, 2, 12, + 18, 27, 3, 229, 2, 12, 18, 27, 3, 227, 61, 12, 18, 27, 3, 225, 110, 12, + 18, 27, 3, 233, 87, 12, 18, 27, 3, 251, 169, 12, 18, 27, 3, 232, 183, 12, + 18, 27, 3, 234, 66, 12, 18, 27, 233, 175, 249, 236, 12, 18, 27, 247, 207, + 98, 12, 18, 27, 226, 224, 98, 12, 18, 27, 239, 36, 98, 12, 18, 27, 233, + 88, 98, 12, 18, 27, 231, 183, 98, 12, 18, 27, 233, 70, 98, 12, 30, 18, 6, + 254, 205, 12, 30, 18, 6, 252, 198, 12, 30, 18, 6, 246, 169, 12, 30, 18, + 6, 250, 47, 12, 30, 18, 6, 247, 206, 12, 30, 18, 6, 223, 88, 12, 30, 18, + 6, 247, 171, 12, 30, 18, 6, 226, 223, 12, 30, 18, 6, 239, 215, 12, 30, + 18, 6, 239, 35, 12, 30, 18, 6, 238, 16, 12, 30, 18, 6, 236, 66, 12, 30, + 18, 6, 234, 206, 12, 30, 18, 6, 224, 64, 12, 30, 18, 6, 234, 64, 12, 30, + 18, 6, 233, 69, 12, 30, 18, 6, 231, 182, 12, 30, 18, 6, 226, 224, 98, 12, + 30, 18, 6, 229, 2, 12, 30, 18, 6, 227, 61, 12, 30, 18, 6, 225, 110, 12, + 30, 18, 6, 233, 87, 12, 30, 18, 6, 251, 169, 12, 30, 18, 6, 232, 183, 12, + 30, 18, 6, 234, 66, 12, 30, 18, 235, 250, 12, 30, 18, 3, 254, 205, 12, + 30, 18, 3, 252, 198, 12, 30, 18, 3, 246, 169, 12, 30, 18, 3, 250, 47, 12, + 30, 18, 3, 247, 206, 12, 30, 18, 3, 223, 88, 12, 30, 18, 3, 247, 171, 12, + 30, 18, 3, 226, 223, 12, 30, 18, 3, 239, 215, 12, 30, 18, 3, 239, 35, 12, + 30, 18, 3, 238, 16, 12, 30, 18, 3, 236, 66, 12, 30, 18, 3, 234, 206, 12, + 30, 18, 3, 224, 64, 12, 30, 18, 3, 234, 64, 12, 30, 18, 3, 233, 69, 12, + 30, 18, 3, 231, 182, 12, 30, 18, 3, 35, 229, 2, 12, 30, 18, 3, 229, 2, + 12, 30, 18, 3, 227, 61, 12, 30, 18, 3, 225, 110, 12, 30, 18, 3, 233, 87, + 12, 30, 18, 3, 251, 169, 12, 30, 18, 3, 232, 183, 12, 30, 18, 3, 234, 66, + 12, 30, 18, 233, 175, 249, 236, 12, 30, 18, 247, 207, 98, 12, 30, 18, + 226, 224, 98, 12, 30, 18, 239, 36, 98, 12, 30, 18, 233, 88, 98, 12, 30, + 18, 231, 183, 98, 12, 30, 18, 233, 70, 98, 12, 30, 18, 27, 6, 254, 205, + 12, 30, 18, 27, 6, 252, 198, 12, 30, 18, 27, 6, 246, 169, 12, 30, 18, 27, + 6, 250, 47, 12, 30, 18, 27, 6, 247, 206, 12, 30, 18, 27, 6, 223, 88, 12, + 30, 18, 27, 6, 247, 171, 12, 30, 18, 27, 6, 226, 223, 12, 30, 18, 27, 6, + 239, 215, 12, 30, 18, 27, 6, 239, 35, 12, 30, 18, 27, 6, 238, 16, 12, 30, + 18, 27, 6, 236, 66, 12, 30, 18, 27, 6, 234, 206, 12, 30, 18, 27, 6, 224, + 64, 12, 30, 18, 27, 6, 234, 64, 12, 30, 18, 27, 6, 233, 69, 12, 30, 18, + 27, 6, 231, 182, 12, 30, 18, 27, 6, 226, 224, 98, 12, 30, 18, 27, 6, 229, + 2, 12, 30, 18, 27, 6, 227, 61, 12, 30, 18, 27, 6, 225, 110, 12, 30, 18, + 27, 6, 233, 87, 12, 30, 18, 27, 6, 251, 169, 12, 30, 18, 27, 6, 232, 183, + 12, 30, 18, 27, 6, 234, 66, 12, 30, 18, 27, 235, 250, 12, 30, 18, 27, 3, + 254, 205, 12, 30, 18, 27, 3, 252, 198, 12, 30, 18, 27, 3, 246, 169, 12, + 30, 18, 27, 3, 250, 47, 12, 30, 18, 27, 3, 247, 206, 12, 30, 18, 27, 3, + 223, 88, 12, 30, 18, 27, 3, 247, 171, 12, 30, 18, 27, 3, 226, 223, 12, + 30, 18, 27, 3, 239, 215, 12, 30, 18, 27, 3, 239, 35, 12, 30, 18, 27, 3, + 238, 16, 12, 30, 18, 27, 3, 236, 66, 12, 30, 18, 27, 3, 234, 206, 12, 30, + 18, 27, 3, 224, 64, 12, 30, 18, 27, 3, 234, 64, 12, 30, 18, 27, 3, 233, + 69, 12, 30, 18, 27, 3, 231, 182, 12, 30, 18, 27, 3, 35, 229, 2, 12, 30, + 18, 27, 3, 229, 2, 12, 30, 18, 27, 3, 227, 61, 12, 30, 18, 27, 3, 225, + 110, 12, 30, 18, 27, 3, 233, 87, 12, 30, 18, 27, 3, 251, 169, 12, 30, 18, + 27, 3, 232, 183, 12, 30, 18, 27, 3, 234, 66, 12, 30, 18, 27, 233, 175, + 249, 236, 12, 30, 18, 27, 247, 207, 98, 12, 30, 18, 27, 226, 224, 98, 12, + 30, 18, 27, 239, 36, 98, 12, 30, 18, 27, 233, 88, 98, 12, 30, 18, 27, + 231, 183, 98, 12, 30, 18, 27, 233, 70, 98, 12, 18, 6, 249, 230, 12, 18, + 3, 249, 230, 12, 18, 21, 223, 89, 12, 18, 21, 118, 12, 18, 21, 113, 12, + 18, 21, 166, 12, 18, 21, 158, 12, 18, 21, 173, 12, 18, 21, 183, 12, 18, + 21, 194, 12, 18, 21, 187, 12, 18, 21, 192, 12, 159, 21, 223, 89, 12, 159, + 21, 118, 12, 159, 21, 113, 12, 159, 21, 166, 12, 159, 21, 158, 12, 159, + 21, 173, 12, 159, 21, 183, 12, 159, 21, 194, 12, 159, 21, 187, 12, 159, + 21, 192, 12, 30, 21, 223, 89, 12, 30, 21, 118, 12, 30, 21, 113, 12, 30, + 21, 166, 12, 30, 21, 158, 12, 30, 21, 173, 12, 30, 21, 183, 12, 30, 21, + 194, 12, 30, 21, 187, 12, 30, 21, 192, 12, 30, 18, 21, 223, 89, 12, 30, + 18, 21, 118, 12, 30, 18, 21, 113, 12, 30, 18, 21, 166, 12, 30, 18, 21, + 158, 12, 30, 18, 21, 173, 12, 30, 18, 21, 183, 12, 30, 18, 21, 194, 12, + 30, 18, 21, 187, 12, 30, 18, 21, 192, 12, 189, 21, 223, 89, 12, 189, 21, + 118, 12, 189, 21, 113, 12, 189, 21, 166, 12, 189, 21, 158, 12, 189, 21, + 173, 12, 189, 21, 183, 12, 189, 21, 194, 12, 189, 21, 187, 12, 189, 21, + 192, 237, 50, 75, 248, 45, 224, 111, 237, 50, 75, 228, 152, 224, 111, + 237, 50, 75, 224, 131, 224, 111, 237, 50, 75, 234, 245, 224, 111, 237, + 50, 75, 231, 231, 248, 118, 237, 50, 75, 245, 228, 248, 118, 237, 50, 75, + 63, 248, 118, 237, 50, 75, 168, 106, 251, 190, 237, 50, 75, 135, 106, + 251, 190, 237, 50, 75, 152, 106, 251, 190, 237, 50, 75, 246, 243, 106, + 251, 190, 237, 50, 75, 247, 37, 106, 251, 190, 237, 50, 75, 228, 217, + 106, 251, 190, 237, 50, 75, 229, 163, 106, 251, 190, 237, 50, 75, 248, + 20, 106, 251, 190, 237, 50, 75, 235, 61, 106, 251, 190, 237, 50, 75, 168, + 106, 253, 45, 237, 50, 75, 135, 106, 253, 45, 237, 50, 75, 152, 106, 253, + 45, 237, 50, 75, 246, 243, 106, 253, 45, 237, 50, 75, 247, 37, 106, 253, + 45, 237, 50, 75, 228, 217, 106, 253, 45, 237, 50, 75, 229, 163, 106, 253, + 45, 237, 50, 75, 248, 20, 106, 253, 45, 237, 50, 75, 235, 61, 106, 253, + 45, 237, 50, 75, 168, 106, 251, 105, 237, 50, 75, 135, 106, 251, 105, + 237, 50, 75, 152, 106, 251, 105, 237, 50, 75, 246, 243, 106, 251, 105, + 237, 50, 75, 247, 37, 106, 251, 105, 237, 50, 75, 228, 217, 106, 251, + 105, 237, 50, 75, 229, 163, 106, 251, 105, 237, 50, 75, 248, 20, 106, + 251, 105, 237, 50, 75, 235, 61, 106, 251, 105, 237, 50, 75, 233, 12, 237, + 50, 75, 234, 30, 237, 50, 75, 253, 46, 237, 50, 75, 251, 137, 237, 50, + 75, 228, 125, 237, 50, 75, 227, 229, 237, 50, 75, 254, 44, 237, 50, 75, + 224, 107, 237, 50, 75, 239, 111, 237, 50, 75, 253, 66, 109, 75, 169, 253, + 66, 109, 75, 244, 211, 109, 75, 244, 210, 109, 75, 244, 209, 109, 75, + 244, 208, 109, 75, 244, 207, 109, 75, 244, 206, 109, 75, 244, 205, 109, + 75, 244, 204, 109, 75, 244, 203, 109, 75, 244, 202, 109, 75, 244, 201, + 109, 75, 244, 200, 109, 75, 244, 199, 109, 75, 244, 198, 109, 75, 244, + 197, 109, 75, 244, 196, 109, 75, 244, 195, 109, 75, 244, 194, 109, 75, + 244, 193, 109, 75, 244, 192, 109, 75, 244, 191, 109, 75, 244, 190, 109, + 75, 244, 189, 109, 75, 244, 188, 109, 75, 244, 187, 109, 75, 244, 186, + 109, 75, 244, 185, 109, 75, 244, 184, 109, 75, 244, 183, 109, 75, 244, + 182, 109, 75, 244, 181, 109, 75, 244, 180, 109, 75, 244, 179, 109, 75, + 244, 178, 109, 75, 244, 177, 109, 75, 244, 176, 109, 75, 244, 175, 109, + 75, 244, 174, 109, 75, 244, 173, 109, 75, 244, 172, 109, 75, 244, 171, + 109, 75, 244, 170, 109, 75, 244, 169, 109, 75, 244, 168, 109, 75, 244, + 167, 109, 75, 244, 166, 109, 75, 244, 165, 109, 75, 244, 164, 109, 75, + 244, 163, 109, 75, 61, 253, 66, 109, 75, 225, 29, 109, 75, 225, 28, 109, + 75, 225, 27, 109, 75, 225, 26, 109, 75, 225, 25, 109, 75, 225, 24, 109, + 75, 225, 23, 109, 75, 225, 22, 109, 75, 225, 21, 109, 75, 225, 20, 109, + 75, 225, 19, 109, 75, 225, 18, 109, 75, 225, 17, 109, 75, 225, 16, 109, + 75, 225, 15, 109, 75, 225, 14, 109, 75, 225, 13, 109, 75, 225, 12, 109, + 75, 225, 11, 109, 75, 225, 10, 109, 75, 225, 9, 109, 75, 225, 8, 109, 75, + 225, 7, 109, 75, 225, 6, 109, 75, 225, 5, 109, 75, 225, 4, 109, 75, 225, + 3, 109, 75, 225, 2, 109, 75, 225, 1, 109, 75, 225, 0, 109, 75, 224, 255, + 109, 75, 224, 254, 109, 75, 224, 253, 109, 75, 224, 252, 109, 75, 224, + 251, 109, 75, 224, 250, 109, 75, 224, 249, 109, 75, 224, 248, 109, 75, + 224, 247, 109, 75, 224, 246, 109, 75, 224, 245, 109, 75, 224, 244, 109, + 75, 224, 243, 109, 75, 224, 242, 109, 75, 224, 241, 109, 75, 224, 240, + 109, 75, 224, 239, 109, 75, 224, 238, 109, 75, 224, 237, 9, 11, 244, 61, + 9, 11, 244, 60, 9, 11, 244, 59, 9, 11, 244, 58, 9, 11, 244, 57, 9, 11, + 244, 56, 9, 11, 244, 55, 9, 11, 244, 54, 9, 11, 244, 53, 9, 11, 244, 52, + 9, 11, 244, 51, 9, 11, 244, 50, 9, 11, 244, 49, 9, 11, 244, 48, 9, 11, + 244, 47, 9, 11, 244, 46, 9, 11, 244, 45, 9, 11, 244, 44, 9, 11, 244, 43, + 9, 11, 244, 42, 9, 11, 244, 41, 9, 11, 244, 40, 9, 11, 244, 39, 9, 11, + 244, 38, 9, 11, 244, 37, 9, 11, 244, 36, 9, 11, 244, 35, 9, 11, 244, 34, + 9, 11, 244, 33, 9, 11, 244, 32, 9, 11, 244, 31, 9, 11, 244, 30, 9, 11, + 244, 29, 9, 11, 244, 28, 9, 11, 244, 27, 9, 11, 244, 26, 9, 11, 244, 25, + 9, 11, 244, 24, 9, 11, 244, 23, 9, 11, 244, 22, 9, 11, 244, 21, 9, 11, + 244, 20, 9, 11, 244, 19, 9, 11, 244, 18, 9, 11, 244, 17, 9, 11, 244, 16, + 9, 11, 244, 15, 9, 11, 244, 14, 9, 11, 244, 13, 9, 11, 244, 12, 9, 11, + 244, 11, 9, 11, 244, 10, 9, 11, 244, 9, 9, 11, 244, 8, 9, 11, 244, 7, 9, + 11, 244, 6, 9, 11, 244, 5, 9, 11, 244, 4, 9, 11, 244, 3, 9, 11, 244, 2, + 9, 11, 244, 1, 9, 11, 244, 0, 9, 11, 243, 255, 9, 11, 243, 254, 9, 11, + 243, 253, 9, 11, 243, 252, 9, 11, 243, 251, 9, 11, 243, 250, 9, 11, 243, + 249, 9, 11, 243, 248, 9, 11, 243, 247, 9, 11, 243, 246, 9, 11, 243, 245, + 9, 11, 243, 244, 9, 11, 243, 243, 9, 11, 243, 242, 9, 11, 243, 241, 9, + 11, 243, 240, 9, 11, 243, 239, 9, 11, 243, 238, 9, 11, 243, 237, 9, 11, + 243, 236, 9, 11, 243, 235, 9, 11, 243, 234, 9, 11, 243, 233, 9, 11, 243, + 232, 9, 11, 243, 231, 9, 11, 243, 230, 9, 11, 243, 229, 9, 11, 243, 228, + 9, 11, 243, 227, 9, 11, 243, 226, 9, 11, 243, 225, 9, 11, 243, 224, 9, + 11, 243, 223, 9, 11, 243, 222, 9, 11, 243, 221, 9, 11, 243, 220, 9, 11, + 243, 219, 9, 11, 243, 218, 9, 11, 243, 217, 9, 11, 243, 216, 9, 11, 243, + 215, 9, 11, 243, 214, 9, 11, 243, 213, 9, 11, 243, 212, 9, 11, 243, 211, + 9, 11, 243, 210, 9, 11, 243, 209, 9, 11, 243, 208, 9, 11, 243, 207, 9, + 11, 243, 206, 9, 11, 243, 205, 9, 11, 243, 204, 9, 11, 243, 203, 9, 11, + 243, 202, 9, 11, 243, 201, 9, 11, 243, 200, 9, 11, 243, 199, 9, 11, 243, + 198, 9, 11, 243, 197, 9, 11, 243, 196, 9, 11, 243, 195, 9, 11, 243, 194, + 9, 11, 243, 193, 9, 11, 243, 192, 9, 11, 243, 191, 9, 11, 243, 190, 9, + 11, 243, 189, 9, 11, 243, 188, 9, 11, 243, 187, 9, 11, 243, 186, 9, 11, + 243, 185, 9, 11, 243, 184, 9, 11, 243, 183, 9, 11, 243, 182, 9, 11, 243, + 181, 9, 11, 243, 180, 9, 11, 243, 179, 9, 11, 243, 178, 9, 11, 243, 177, + 9, 11, 243, 176, 9, 11, 243, 175, 9, 11, 243, 174, 9, 11, 243, 173, 9, + 11, 243, 172, 9, 11, 243, 171, 9, 11, 243, 170, 9, 11, 243, 169, 9, 11, + 243, 168, 9, 11, 243, 167, 9, 11, 243, 166, 9, 11, 243, 165, 9, 11, 243, + 164, 9, 11, 243, 163, 9, 11, 243, 162, 9, 11, 243, 161, 9, 11, 243, 160, + 9, 11, 243, 159, 9, 11, 243, 158, 9, 11, 243, 157, 9, 11, 243, 156, 9, + 11, 243, 155, 9, 11, 243, 154, 9, 11, 243, 153, 9, 11, 243, 152, 9, 11, + 243, 151, 9, 11, 243, 150, 9, 11, 243, 149, 9, 11, 243, 148, 9, 11, 243, + 147, 9, 11, 243, 146, 9, 11, 243, 145, 9, 11, 243, 144, 9, 11, 243, 143, + 9, 11, 243, 142, 9, 11, 243, 141, 9, 11, 243, 140, 9, 11, 243, 139, 9, + 11, 243, 138, 9, 11, 243, 137, 9, 11, 243, 136, 9, 11, 243, 135, 9, 11, + 243, 134, 9, 11, 243, 133, 9, 11, 243, 132, 9, 11, 243, 131, 9, 11, 243, + 130, 9, 11, 243, 129, 9, 11, 243, 128, 9, 11, 243, 127, 9, 11, 243, 126, + 9, 11, 243, 125, 9, 11, 243, 124, 9, 11, 243, 123, 9, 11, 243, 122, 9, + 11, 243, 121, 9, 11, 243, 120, 9, 11, 243, 119, 9, 11, 243, 118, 9, 11, + 243, 117, 9, 11, 243, 116, 9, 11, 243, 115, 9, 11, 243, 114, 9, 11, 243, + 113, 9, 11, 243, 112, 9, 11, 243, 111, 9, 11, 243, 110, 9, 11, 243, 109, + 9, 11, 243, 108, 9, 11, 243, 107, 9, 11, 243, 106, 9, 11, 243, 105, 9, + 11, 243, 104, 9, 11, 243, 103, 9, 11, 243, 102, 9, 11, 243, 101, 9, 11, + 243, 100, 9, 11, 243, 99, 9, 11, 243, 98, 9, 11, 243, 97, 9, 11, 243, 96, + 9, 11, 243, 95, 9, 11, 243, 94, 9, 11, 243, 93, 9, 11, 243, 92, 9, 11, + 243, 91, 9, 11, 243, 90, 9, 11, 243, 89, 9, 11, 243, 88, 9, 11, 243, 87, + 9, 11, 243, 86, 9, 11, 243, 85, 9, 11, 243, 84, 9, 11, 243, 83, 9, 11, + 243, 82, 9, 11, 243, 81, 9, 11, 243, 80, 9, 11, 243, 79, 9, 11, 243, 78, + 9, 11, 243, 77, 9, 11, 243, 76, 9, 11, 243, 75, 9, 11, 243, 74, 9, 11, + 243, 73, 9, 11, 243, 72, 9, 11, 243, 71, 9, 11, 243, 70, 9, 11, 243, 69, + 9, 11, 243, 68, 9, 11, 243, 67, 9, 11, 243, 66, 9, 11, 243, 65, 9, 11, + 243, 64, 9, 11, 243, 63, 9, 11, 243, 62, 9, 11, 243, 61, 9, 11, 243, 60, + 9, 11, 243, 59, 9, 11, 243, 58, 9, 11, 243, 57, 9, 11, 243, 56, 9, 11, + 243, 55, 9, 11, 243, 54, 9, 11, 243, 53, 9, 11, 243, 52, 9, 11, 243, 51, + 9, 11, 243, 50, 9, 11, 243, 49, 9, 11, 243, 48, 9, 11, 243, 47, 9, 11, + 243, 46, 9, 11, 243, 45, 9, 11, 243, 44, 9, 11, 243, 43, 9, 11, 243, 42, + 9, 11, 243, 41, 9, 11, 243, 40, 9, 11, 243, 39, 9, 11, 243, 38, 9, 11, + 243, 37, 9, 11, 243, 36, 9, 11, 243, 35, 9, 11, 243, 34, 9, 11, 243, 33, + 9, 11, 243, 32, 9, 11, 243, 31, 9, 11, 243, 30, 9, 11, 243, 29, 9, 11, + 243, 28, 9, 11, 243, 27, 9, 11, 243, 26, 9, 11, 243, 25, 9, 11, 243, 24, + 9, 11, 243, 23, 9, 11, 243, 22, 9, 11, 243, 21, 9, 11, 243, 20, 9, 11, + 243, 19, 9, 11, 243, 18, 9, 11, 243, 17, 9, 11, 243, 16, 9, 11, 243, 15, + 9, 11, 243, 14, 9, 11, 243, 13, 9, 11, 243, 12, 9, 11, 243, 11, 9, 11, + 243, 10, 9, 11, 243, 9, 9, 11, 243, 8, 9, 11, 243, 7, 9, 11, 243, 6, 9, + 11, 243, 5, 9, 11, 243, 4, 9, 11, 243, 3, 9, 11, 243, 2, 9, 11, 243, 1, + 9, 11, 243, 0, 9, 11, 242, 255, 9, 11, 242, 254, 9, 11, 242, 253, 9, 11, + 242, 252, 9, 11, 242, 251, 9, 11, 242, 250, 9, 11, 242, 249, 9, 11, 242, + 248, 9, 11, 242, 247, 9, 11, 242, 246, 9, 11, 242, 245, 9, 11, 242, 244, + 9, 11, 242, 243, 9, 11, 242, 242, 9, 11, 242, 241, 9, 11, 242, 240, 9, + 11, 242, 239, 9, 11, 242, 238, 9, 11, 242, 237, 9, 11, 242, 236, 9, 11, + 242, 235, 9, 11, 242, 234, 9, 11, 242, 233, 9, 11, 242, 232, 9, 11, 242, + 231, 9, 11, 242, 230, 9, 11, 242, 229, 9, 11, 242, 228, 9, 11, 242, 227, + 9, 11, 242, 226, 9, 11, 242, 225, 9, 11, 242, 224, 9, 11, 242, 223, 9, + 11, 242, 222, 9, 11, 242, 221, 9, 11, 242, 220, 9, 11, 242, 219, 9, 11, + 242, 218, 9, 11, 242, 217, 9, 11, 242, 216, 9, 11, 242, 215, 9, 11, 242, + 214, 9, 11, 242, 213, 9, 11, 242, 212, 9, 11, 242, 211, 9, 11, 242, 210, + 9, 11, 242, 209, 9, 11, 242, 208, 9, 11, 242, 207, 9, 11, 242, 206, 9, + 11, 242, 205, 9, 11, 242, 204, 9, 11, 242, 203, 9, 11, 242, 202, 9, 11, + 242, 201, 9, 11, 242, 200, 9, 11, 242, 199, 9, 11, 242, 198, 9, 11, 242, + 197, 9, 11, 242, 196, 9, 11, 242, 195, 9, 11, 242, 194, 9, 11, 242, 193, + 9, 11, 242, 192, 9, 11, 242, 191, 9, 11, 242, 190, 9, 11, 242, 189, 9, + 11, 242, 188, 9, 11, 242, 187, 9, 11, 242, 186, 9, 11, 242, 185, 9, 11, + 242, 184, 9, 11, 242, 183, 9, 11, 242, 182, 9, 11, 242, 181, 9, 11, 242, + 180, 9, 11, 242, 179, 9, 11, 242, 178, 9, 11, 242, 177, 9, 11, 242, 176, + 9, 11, 242, 175, 9, 11, 242, 174, 9, 11, 242, 173, 9, 11, 242, 172, 9, + 11, 242, 171, 9, 11, 242, 170, 9, 11, 242, 169, 9, 11, 242, 168, 9, 11, + 242, 167, 9, 11, 242, 166, 9, 11, 242, 165, 9, 11, 242, 164, 9, 11, 242, + 163, 9, 11, 242, 162, 9, 11, 242, 161, 9, 11, 242, 160, 9, 11, 242, 159, + 9, 11, 242, 158, 9, 11, 242, 157, 9, 11, 242, 156, 9, 11, 242, 155, 9, + 11, 242, 154, 9, 11, 242, 153, 9, 11, 242, 152, 9, 11, 242, 151, 9, 11, + 242, 150, 9, 11, 242, 149, 9, 11, 242, 148, 9, 11, 242, 147, 9, 11, 242, + 146, 9, 11, 242, 145, 9, 11, 242, 144, 9, 11, 242, 143, 9, 11, 242, 142, + 9, 11, 242, 141, 9, 11, 242, 140, 9, 11, 242, 139, 9, 11, 242, 138, 9, + 11, 242, 137, 9, 11, 242, 136, 9, 11, 242, 135, 9, 11, 242, 134, 9, 11, + 242, 133, 9, 11, 242, 132, 9, 11, 242, 131, 9, 11, 242, 130, 9, 11, 242, + 129, 9, 11, 242, 128, 9, 11, 242, 127, 9, 11, 242, 126, 9, 11, 242, 125, + 9, 11, 242, 124, 9, 11, 242, 123, 9, 11, 242, 122, 9, 11, 242, 121, 9, + 11, 242, 120, 9, 11, 242, 119, 9, 11, 242, 118, 9, 11, 242, 117, 9, 11, + 242, 116, 9, 11, 242, 115, 9, 11, 242, 114, 9, 11, 242, 113, 9, 11, 242, + 112, 9, 11, 242, 111, 9, 11, 242, 110, 9, 11, 242, 109, 9, 11, 242, 108, + 9, 11, 242, 107, 9, 11, 242, 106, 9, 11, 242, 105, 9, 11, 242, 104, 9, + 11, 242, 103, 9, 11, 242, 102, 9, 11, 242, 101, 9, 11, 242, 100, 9, 11, + 242, 99, 9, 11, 242, 98, 9, 11, 242, 97, 9, 11, 242, 96, 9, 11, 242, 95, + 9, 11, 242, 94, 9, 11, 242, 93, 9, 11, 242, 92, 9, 11, 242, 91, 9, 11, + 242, 90, 9, 11, 242, 89, 9, 11, 242, 88, 9, 11, 242, 87, 9, 11, 242, 86, + 9, 11, 242, 85, 9, 11, 242, 84, 9, 11, 242, 83, 9, 11, 242, 82, 9, 11, + 242, 81, 9, 11, 242, 80, 9, 11, 242, 79, 9, 11, 242, 78, 9, 11, 242, 77, + 9, 11, 242, 76, 9, 11, 242, 75, 9, 11, 242, 74, 9, 11, 242, 73, 9, 11, + 242, 72, 9, 11, 242, 71, 9, 11, 242, 70, 9, 11, 242, 69, 9, 11, 242, 68, + 9, 11, 242, 67, 9, 11, 242, 66, 9, 11, 242, 65, 9, 11, 242, 64, 9, 11, + 242, 63, 9, 11, 242, 62, 9, 11, 242, 61, 9, 11, 242, 60, 9, 11, 242, 59, + 9, 11, 242, 58, 9, 11, 242, 57, 9, 11, 242, 56, 9, 11, 242, 55, 9, 11, + 242, 54, 9, 11, 242, 53, 9, 11, 242, 52, 9, 11, 242, 51, 9, 11, 242, 50, + 9, 11, 242, 49, 9, 11, 242, 48, 9, 11, 242, 47, 9, 11, 242, 46, 9, 11, + 242, 45, 9, 11, 242, 44, 9, 11, 242, 43, 9, 11, 242, 42, 9, 11, 242, 41, + 9, 11, 242, 40, 9, 11, 242, 39, 9, 11, 242, 38, 9, 11, 242, 37, 9, 11, + 242, 36, 9, 11, 242, 35, 9, 11, 242, 34, 9, 11, 242, 33, 9, 11, 242, 32, + 238, 11, 227, 95, 108, 228, 145, 108, 247, 149, 76, 108, 232, 57, 76, + 108, 65, 53, 108, 249, 150, 53, 108, 233, 123, 53, 108, 254, 193, 108, + 254, 144, 108, 42, 233, 180, 108, 41, 233, 180, 108, 254, 69, 108, 79, + 53, 108, 251, 54, 108, 244, 94, 108, 246, 218, 228, 38, 108, 228, 161, + 108, 21, 223, 89, 108, 21, 118, 108, 21, 113, 108, 21, 166, 108, 21, 158, + 108, 21, 173, 108, 21, 183, 108, 21, 194, 108, 21, 187, 108, 21, 192, + 108, 251, 61, 108, 229, 186, 108, 237, 213, 53, 108, 247, 204, 53, 108, + 245, 231, 53, 108, 232, 69, 76, 108, 251, 53, 254, 62, 108, 7, 6, 1, 57, + 108, 7, 6, 1, 254, 27, 108, 7, 6, 1, 252, 44, 108, 7, 6, 1, 222, 222, + 108, 7, 6, 1, 72, 108, 7, 6, 1, 247, 130, 108, 7, 6, 1, 214, 108, 7, 6, + 1, 212, 108, 7, 6, 1, 74, 108, 7, 6, 1, 239, 182, 108, 7, 6, 1, 239, 76, + 108, 7, 6, 1, 149, 108, 7, 6, 1, 185, 108, 7, 6, 1, 199, 108, 7, 6, 1, + 73, 108, 7, 6, 1, 233, 244, 108, 7, 6, 1, 232, 139, 108, 7, 6, 1, 146, + 108, 7, 6, 1, 193, 108, 7, 6, 1, 227, 109, 108, 7, 6, 1, 66, 108, 7, 6, + 1, 196, 108, 7, 6, 1, 224, 174, 108, 7, 6, 1, 224, 73, 108, 7, 6, 1, 224, + 25, 108, 7, 6, 1, 223, 119, 108, 42, 37, 104, 108, 231, 193, 228, 161, + 108, 41, 37, 104, 108, 251, 102, 255, 41, 108, 184, 237, 170, 108, 245, + 237, 255, 41, 108, 7, 3, 1, 57, 108, 7, 3, 1, 254, 27, 108, 7, 3, 1, 252, + 44, 108, 7, 3, 1, 222, 222, 108, 7, 3, 1, 72, 108, 7, 3, 1, 247, 130, + 108, 7, 3, 1, 214, 108, 7, 3, 1, 212, 108, 7, 3, 1, 74, 108, 7, 3, 1, + 239, 182, 108, 7, 3, 1, 239, 76, 108, 7, 3, 1, 149, 108, 7, 3, 1, 185, + 108, 7, 3, 1, 199, 108, 7, 3, 1, 73, 108, 7, 3, 1, 233, 244, 108, 7, 3, + 1, 232, 139, 108, 7, 3, 1, 146, 108, 7, 3, 1, 193, 108, 7, 3, 1, 227, + 109, 108, 7, 3, 1, 66, 108, 7, 3, 1, 196, 108, 7, 3, 1, 224, 174, 108, 7, + 3, 1, 224, 73, 108, 7, 3, 1, 224, 25, 108, 7, 3, 1, 223, 119, 108, 42, + 250, 223, 104, 108, 61, 237, 170, 108, 41, 250, 223, 104, 108, 205, 252, + 25, 227, 95, 38, 230, 114, 38, 230, 103, 38, 230, 92, 38, 230, 80, 38, + 230, 69, 38, 230, 58, 38, 230, 47, 38, 230, 36, 38, 230, 25, 38, 230, 17, + 38, 230, 16, 38, 230, 15, 38, 230, 14, 38, 230, 12, 38, 230, 11, 38, 230, + 10, 38, 230, 9, 38, 230, 8, 38, 230, 7, 38, 230, 6, 38, 230, 5, 38, 230, + 4, 38, 230, 3, 38, 230, 1, 38, 230, 0, 38, 229, 255, 38, 229, 254, 38, + 229, 253, 38, 229, 252, 38, 229, 251, 38, 229, 250, 38, 229, 249, 38, + 229, 248, 38, 229, 246, 38, 229, 245, 38, 229, 244, 38, 229, 243, 38, + 229, 242, 38, 229, 241, 38, 229, 240, 38, 229, 239, 38, 229, 238, 38, + 229, 237, 38, 229, 235, 38, 229, 234, 38, 229, 233, 38, 229, 232, 38, + 229, 231, 38, 229, 230, 38, 229, 229, 38, 229, 228, 38, 229, 227, 38, + 229, 226, 38, 229, 224, 38, 229, 223, 38, 229, 222, 38, 229, 221, 38, + 229, 220, 38, 229, 219, 38, 229, 218, 38, 229, 217, 38, 229, 216, 38, + 229, 215, 38, 229, 213, 38, 229, 212, 38, 229, 211, 38, 229, 210, 38, + 229, 209, 38, 229, 208, 38, 229, 207, 38, 229, 206, 38, 229, 205, 38, + 229, 204, 38, 229, 202, 38, 229, 201, 38, 229, 200, 38, 229, 199, 38, + 229, 198, 38, 229, 197, 38, 229, 196, 38, 229, 195, 38, 229, 194, 38, + 229, 193, 38, 230, 190, 38, 230, 189, 38, 230, 188, 38, 230, 187, 38, + 230, 186, 38, 230, 185, 38, 230, 184, 38, 230, 183, 38, 230, 182, 38, + 230, 181, 38, 230, 179, 38, 230, 178, 38, 230, 177, 38, 230, 176, 38, + 230, 175, 38, 230, 174, 38, 230, 173, 38, 230, 172, 38, 230, 171, 38, + 230, 170, 38, 230, 168, 38, 230, 167, 38, 230, 166, 38, 230, 165, 38, + 230, 164, 38, 230, 163, 38, 230, 162, 38, 230, 161, 38, 230, 160, 38, + 230, 159, 38, 230, 157, 38, 230, 156, 38, 230, 155, 38, 230, 154, 38, + 230, 153, 38, 230, 152, 38, 230, 151, 38, 230, 150, 38, 230, 149, 38, + 230, 148, 38, 230, 146, 38, 230, 145, 38, 230, 144, 38, 230, 143, 38, + 230, 142, 38, 230, 141, 38, 230, 140, 38, 230, 139, 38, 230, 138, 38, + 230, 137, 38, 230, 135, 38, 230, 134, 38, 230, 133, 38, 230, 132, 38, + 230, 131, 38, 230, 130, 38, 230, 129, 38, 230, 128, 38, 230, 127, 38, + 230, 126, 38, 230, 124, 38, 230, 123, 38, 230, 122, 38, 230, 121, 38, + 230, 120, 38, 230, 119, 38, 230, 118, 38, 230, 117, 38, 230, 116, 38, + 230, 115, 38, 230, 113, 38, 230, 112, 38, 230, 111, 38, 230, 110, 38, + 230, 109, 38, 230, 108, 38, 230, 107, 38, 230, 106, 38, 230, 105, 38, + 230, 104, 38, 230, 102, 38, 230, 101, 38, 230, 100, 38, 230, 99, 38, 230, + 98, 38, 230, 97, 38, 230, 96, 38, 230, 95, 38, 230, 94, 38, 230, 93, 38, + 230, 91, 38, 230, 90, 38, 230, 89, 38, 230, 88, 38, 230, 87, 38, 230, 86, + 38, 230, 85, 38, 230, 84, 38, 230, 83, 38, 230, 82, 38, 230, 79, 38, 230, + 78, 38, 230, 77, 38, 230, 76, 38, 230, 75, 38, 230, 74, 38, 230, 73, 38, + 230, 72, 38, 230, 71, 38, 230, 70, 38, 230, 68, 38, 230, 67, 38, 230, 66, + 38, 230, 65, 38, 230, 64, 38, 230, 63, 38, 230, 62, 38, 230, 61, 38, 230, + 60, 38, 230, 59, 38, 230, 57, 38, 230, 56, 38, 230, 55, 38, 230, 54, 38, + 230, 53, 38, 230, 52, 38, 230, 51, 38, 230, 50, 38, 230, 49, 38, 230, 48, + 38, 230, 46, 38, 230, 45, 38, 230, 44, 38, 230, 43, 38, 230, 42, 38, 230, + 41, 38, 230, 40, 38, 230, 39, 38, 230, 38, 38, 230, 37, 38, 230, 35, 38, + 230, 34, 38, 230, 33, 38, 230, 32, 38, 230, 31, 38, 230, 30, 38, 230, 29, + 38, 230, 28, 38, 230, 27, 38, 230, 26, 38, 230, 24, 38, 230, 23, 38, 230, + 22, 38, 230, 21, 38, 230, 20, 38, 230, 19, 38, 230, 18, }; 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, 17, 87, 88, 89, 90, 91, - 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 103, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 104, 105, 106, 107, 108, - 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, - 123, 124, 125, 17, 126, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 127, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 128, 129, - 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, - 144, 145, 17, 146, 147, 148, 149, 150, 17, 17, 17, 17, 17, 17, 151, 17, - 152, 17, 153, 17, 154, 17, 155, 17, 17, 17, 156, 17, 17, 17, 17, 157, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 158, 159, 160, 161, 162, 163, - 164, 17, 165, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 166, 167, 168, 169, 170, 171, 172, 173, - 174, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 175, 176, 177, 178, 179, 17, 180, 17, 181, 182, - 183, 184, 185, 186, 187, 188, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 189, 190, 191, 192, 193, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 194, 195, 196, 197, 198, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 199, 17, 200, 201, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 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, 16, 52, 53, 54, + 16, 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, 16, 84, 85, 86, 87, 88, + 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 100, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 101, 102, 103, 104, 105, 106, + 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 16, 120, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 121, 122, 123, 124, + 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 16, + 139, 140, 141, 142, 143, 16, 16, 16, 16, 16, 16, 144, 16, 145, 16, 146, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 147, 148, 149, 150, 151, 152, 153, 16, 154, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 155, 156, 157, 158, 159, 16, 160, 16, 161, 162, 163, 164, 165, 166, + 167, 168, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 169, 170, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 171, 172, 173, 174, 175, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 176, + 16, 177, 178, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, }; 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, - 146, 150, 155, 160, 164, 168, 173, 177, 182, 187, 192, 197, 202, 205, - 209, 212, 216, 219, 223, 227, 232, 237, 242, 246, 251, 256, 261, 265, - 270, 275, 279, 283, 287, 291, 296, 301, 305, 309, 314, 318, 323, 328, - 333, 338, 343, 347, 350, 354, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 356, 360, 365, - 368, 371, 374, 377, 380, 383, 385, 388, 394, 402, 404, 408, 411, 413, - 416, 419, 422, 425, 429, 432, 435, 439, 441, 444, 450, 458, 465, 472, - 479, 484, 491, 497, 504, 511, 518, 526, 531, 539, 546, 552, 559, 566, - 574, 581, 589, 597, 602, 610, 617, 623, 630, 637, 644, 647, 653, 660, - 666, 673, 680, 687, 692, 698, 705, 711, 718, 725, 732, 740, 745, 753, - 760, 766, 773, 780, 788, 795, 803, 811, 816, 824, 831, 837, 844, 851, - 858, 861, 867, 874, 880, 887, 894, 901, 906, 914, 921, 928, 935, 942, - 949, 956, 963, 970, 978, 986, 994, 1002, 1010, 1018, 1026, 1034, 1041, - 1048, 1055, 1062, 1069, 1076, 1083, 1090, 1097, 1104, 1111, 1118, 1126, - 1134, 1142, 1150, 1158, 1166, 1174, 1182, 1190, 1198, 1205, 1212, 1220, - 1228, 1236, 1244, 1252, 1260, 1268, 1276, 1284, 1290, 1295, 1300, 1308, - 1316, 1324, 1332, 1337, 1344, 1351, 1359, 1367, 1375, 1383, 1393, 1403, - 1410, 1417, 1424, 1431, 1439, 1447, 1455, 1463, 1474, 1479, 1484, 1491, - 1498, 1505, 1512, 1519, 1526, 1531, 1536, 1543, 1550, 1558, 1566, 1574, - 1582, 1589, 1596, 1604, 1612, 1620, 1628, 1636, 1644, 1652, 1660, 1668, - 1676, 1683, 1690, 1697, 1704, 1711, 1718, 1725, 1732, 1740, 1748, 1755, - 1762, 1769, 1776, 1784, 1792, 1800, 1808, 1816, 1823, 1830, 1838, 1846, - 1854, 1862, 1867, 1873, 1879, 1886, 1893, 1898, 1903, 1909, 1916, 1923, - 1930, 1937, 1945, 1953, 1959, 1964, 1969, 1975, 1982, 1989, 1996, 2001, - 2006, 2011, 2018, 2025, 2032, 2039, 2046, 2051, 2059, 2069, 2078, 2085, - 2092, 2097, 2102, 2109, 2116, 2120, 2125, 2130, 2135, 2142, 2151, 2158, - 2165, 2174, 2181, 2188, 2193, 2200, 2207, 2214, 2221, 2228, 2233, 2240, - 2247, 2255, 2260, 2265, 2270, 2280, 2284, 2290, 2296, 2302, 2308, 2316, - 2329, 2337, 2342, 2352, 2357, 2362, 2372, 2377, 2384, 2391, 2399, 2407, - 2414, 2421, 2428, 2435, 2445, 2455, 2464, 2473, 2483, 2493, 2503, 2513, - 2518, 2528, 2538, 2548, 2558, 2566, 2574, 2581, 2588, 2596, 2604, 2612, - 2620, 2627, 2634, 2644, 2654, 2662, 2670, 2678, 2683, 2693, 2698, 2705, - 2712, 2717, 2722, 2730, 2738, 2748, 2758, 2765, 2772, 2780, 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, 3354, 3360, 3366, 3373, - 3380, 3391, 3401, 3408, 3415, 3422, 3429, 3434, 3439, 3445, 3451, 3457, - 3465, 3473, 3480, 3485, 3490, 3497, 3503, 3510, 3519, 3528, 3537, 3544, - 3550, 3556, 3561, 3568, 3574, 3581, 3588, 3595, 3600, 3605, 3615, 3623, - 3632, 3637, 3642, 3652, 3659, 3667, 3676, 3681, 3687, 3693, 3700, 3705, - 3710, 3720, 3728, 3737, 3745, 3753, 3762, 3767, 3774, 3781, 3786, 3797, - 3805, 3813, 3819, 3828, 3833, 3838, 3845, 3851, 3857, 3863, 3869, 3878, - 3886, 3891, 3899, 3905, 3913, 3921, 3927, 3933, 3939, 3947, 3955, 3961, - 3969, 3975, 3980, 3987, 3995, 4004, 4011, 4018, 4028, 4035, 4042, 4052, - 4059, 4066, 4073, 4079, 4085, 4094, 4106, 4111, 4118, 4123, 4127, 4132, - 4140, 4147, 4152, 4157, 4161, 4166, 4171, 4175, 4180, 4186, 4192, 4198, - 4205, 4210, 4215, 4220, 4225, 4231, 4233, 4238, 4242, 4248, 4254, 4260, - 4265, 4272, 4279, 4285, 4292, 4300, 4308, 4313, 4318, 4322, 4327, 4329, - 4331, 4334, 4336, 4339, 4344, 4349, 4355, 4360, 4364, 4368, 4373, 4381, - 4387, 4392, 4398, 4403, 4409, 4417, 4425, 4429, 4433, 4438, 4444, 4450, - 4456, 4462, 4467, 4475, 4484, 4493, 4498, 4504, 4511, 4518, 4525, 4532, - 4536, 4542, 4547, 4552, 4557, 4562, 4565, 4568, 4571, 4574, 4577, 4580, - 4584, 4588, 4594, 4597, 4602, 4608, 4614, 4617, 4622, 4627, 4631, 4636, - 4642, 4648, 4654, 4659, 4664, 4669, 4672, 4678, 4683, 4688, 4692, 4697, - 4703, 4709, 4712, 4716, 4720, 4724, 4727, 4730, 4735, 4739, 4746, 4750, - 4756, 4760, 4766, 4770, 4774, 4778, 4783, 4788, 4794, 4799, 4806, 4812, - 4818, 4824, 4827, 4831, 4835, 4839, 4843, 4848, 4853, 4857, 4861, 4867, - 4871, 4875, 4880, 4886, 4891, 4896, 4900, 4906, 4911, 4916, 4921, 4926, - 4932, 4935, 4939, 4944, 4949, 4958, 4964, 4969, 4973, 4978, 4982, 4987, - 4991, 4995, 5000, 5004, 5010, 5015, 5020, 5025, 5030, 5035, 5040, 5046, - 5052, 5058, 5063, 5068, 5074, 5080, 5086, 5091, 5096, 5103, 5110, 5114, - 5120, 5127, 0, 0, 5134, 5137, 5145, 5154, 5164, 0, 0, 0, 0, 0, 5168, - 5171, 5176, 5184, 5189, 5197, 5205, 0, 5213, 0, 5221, 5229, 5237, 5248, - 5253, 5258, 5263, 5268, 5273, 5278, 5283, 5288, 5293, 5298, 5303, 5308, - 5313, 5318, 5323, 5328, 0, 5333, 5338, 5343, 5348, 5353, 5358, 5363, - 5368, 5376, 5384, 5392, 5400, 5408, 5416, 5427, 5432, 5437, 5442, 5447, - 5452, 5457, 5462, 5467, 5472, 5477, 5482, 5487, 5492, 5497, 5502, 5507, - 5512, 5518, 5523, 5528, 5533, 5538, 5543, 5548, 5553, 5561, 5569, 5577, - 5585, 5593, 5598, 5602, 5606, 5613, 5623, 5633, 5637, 5641, 5645, 5651, - 5658, 5662, 5667, 5671, 5676, 5680, 5685, 5689, 5694, 5699, 5704, 5709, - 5714, 5719, 5724, 5729, 5734, 5739, 5744, 5749, 5754, 5759, 5764, 5768, - 5772, 5778, 5782, 5787, 5793, 5800, 5805, 5810, 5817, 5822, 5827, 5833, - 5841, 5850, 5860, 5868, 5873, 5878, 5883, 5890, 5895, 5901, 5906, 5911, - 5916, 5921, 5926, 5931, 5939, 5945, 5950, 5954, 5959, 5964, 5969, 5974, - 5979, 5984, 5989, 5993, 5999, 6003, 6008, 6013, 6018, 6022, 6027, 6032, - 6037, 6042, 6046, 6051, 6055, 6060, 6065, 6070, 6075, 6081, 6086, 6092, - 6096, 6101, 6105, 6109, 6114, 6119, 6124, 6129, 6134, 6139, 6144, 6148, - 6154, 6158, 6163, 6168, 6173, 6177, 6182, 6187, 6192, 6197, 6201, 6206, - 6210, 6215, 6220, 6225, 6230, 6236, 6241, 6247, 6251, 6256, 6260, 6268, - 6273, 6278, 6283, 6290, 6295, 6301, 6306, 6311, 6316, 6321, 6326, 6331, - 6339, 6345, 6350, 6355, 6360, 6365, 6370, 6376, 6382, 6389, 6396, 6405, - 6414, 6421, 6428, 6437, 6446, 6451, 6456, 6461, 6466, 6471, 6476, 6481, - 6486, 6497, 6508, 6513, 6518, 6525, 6532, 6540, 6548, 6553, 6558, 6563, - 6568, 6572, 6576, 6580, 6585, 6590, 6594, 6601, 6606, 6616, 6626, 6632, - 6638, 6646, 6654, 6662, 6670, 6677, 6684, 6693, 6702, 6710, 6718, 6726, - 6734, 6741, 6748, 6755, 6762, 6768, 6774, 6780, 6786, 6794, 6802, 6809, - 6816, 6825, 6834, 6840, 6846, 6854, 6862, 6870, 6878, 6884, 6890, 6898, - 6906, 6914, 6922, 6929, 6936, 6944, 6952, 6960, 6968, 6973, 6978, 6985, - 6992, 7002, 7012, 7016, 7024, 7032, 7038, 7044, 7052, 7060, 7067, 7074, - 7082, 7090, 7097, 7104, 7112, 7120, 7125, 7132, 7139, 7146, 7153, 7159, - 7165, 7173, 7181, 7186, 7191, 7199, 7207, 7215, 7223, 7231, 7239, 7246, - 7253, 7261, 7269, 7277, 7285, 7292, 7299, 7305, 7311, 7320, 7329, 7336, - 7343, 7350, 7357, 7364, 7371, 7378, 7385, 7393, 7401, 7409, 7417, 7425, - 7433, 7442, 7451, 7458, 7465, 7472, 7479, 7486, 7493, 7500, 7507, 7514, - 7521, 7528, 7535, 7542, 7549, 7556, 7563, 7570, 7577, 7584, 7591, 7597, - 7603, 7610, 7617, 7622, 7627, 7632, 7637, 7642, 7647, 7652, 7657, 7662, - 7667, 7673, 7679, 7688, 7697, 7706, 7715, 7723, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 7731, 7736, 7741, 7746, 7751, 7756, 7761, 7766, 7771, 7775, - 7780, 7785, 7790, 7795, 7800, 7805, 7810, 7815, 7820, 7825, 7830, 7835, - 7840, 7845, 7850, 7855, 7860, 7865, 7869, 7874, 7879, 7884, 7889, 7894, - 7899, 7904, 7909, 7914, 0, 0, 7919, 7926, 7929, 7933, 7937, 7940, 7944, - 0, 7948, 7953, 7958, 7963, 7968, 7973, 7978, 7983, 7988, 7992, 7997, - 8002, 8007, 8012, 8017, 8022, 8027, 8032, 8037, 8042, 8047, 8052, 8057, - 8062, 8067, 8072, 8077, 8082, 8086, 8091, 8096, 8101, 8106, 8111, 8116, - 8121, 8126, 8131, 8136, 0, 8143, 8148, 0, 0, 0, 0, 0, 0, 8151, 8156, - 8161, 8166, 8173, 8180, 8185, 8190, 8195, 8200, 8205, 8210, 8215, 8222, - 8227, 8234, 8241, 8246, 8253, 8258, 8263, 8268, 8275, 8280, 8285, 8292, - 8301, 8306, 8311, 8316, 8321, 8327, 8332, 8339, 8346, 8353, 8358, 8363, - 8368, 8373, 8378, 8383, 8393, 8398, 8406, 8411, 8416, 8421, 8426, 8433, - 8440, 8447, 8453, 8459, 8466, 0, 0, 0, 0, 0, 0, 0, 0, 8473, 8477, 8481, - 8485, 8489, 8493, 8497, 8501, 8505, 8509, 8513, 8518, 8522, 8526, 8531, - 8535, 8540, 8544, 8548, 8552, 8557, 8561, 8566, 8570, 8574, 8578, 8582, - 0, 0, 0, 0, 0, 8586, 8593, 8601, 8608, 8613, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 8618, 8621, 8625, 8630, 0, 0, 8634, 8640, 8646, 8649, 8656, 8665, - 8668, 8671, 8676, 8682, 8686, 8694, 8700, 8706, 8714, 8718, 8723, 8734, - 8739, 8743, 8747, 8751, 0, 0, 8754, 8761, 0, 8765, 8769, 8776, 8782, - 8789, 8795, 8801, 8805, 8809, 8815, 8819, 8823, 8827, 8831, 8835, 8839, - 8843, 8847, 8851, 8855, 8859, 8863, 8867, 8871, 8875, 8879, 8883, 8891, - 8899, 8909, 8918, 8927, 8930, 8934, 8938, 8942, 8946, 8950, 8954, 8958, - 8962, 8967, 8971, 8974, 8977, 8980, 8983, 8986, 8989, 8992, 8995, 8999, - 9002, 9005, 9010, 9015, 9021, 9024, 9031, 9040, 9045, 9049, 0, 9056, - 9061, 9065, 9069, 9073, 9077, 9081, 9085, 9089, 9093, 9097, 9101, 9106, - 9111, 9118, 9124, 9130, 9136, 9141, 9149, 9157, 9162, 9168, 9174, 9180, - 9186, 9190, 9194, 9198, 9205, 9215, 9219, 9223, 9227, 9233, 9241, 9245, - 9249, 9256, 9260, 9264, 9268, 9275, 9282, 9294, 9298, 9302, 9306, 9316, - 9325, 9329, 9337, 9344, 9351, 9360, 9371, 9379, 9383, 9392, 9403, 9411, - 9424, 9432, 9440, 9448, 9456, 9462, 9471, 9478, 9482, 9490, 9494, 9501, - 9509, 9513, 9519, 9526, 9533, 9537, 9545, 9549, 9556, 9560, 9568, 9572, - 9580, 9588, 9595, 9603, 9611, 9618, 9624, 9628, 9635, 9643, 9649, 9656, - 9663, 9669, 9678, 9686, 9693, 9699, 9703, 9706, 9710, 9716, 9724, 9728, - 9734, 9740, 9747, 9754, 9757, 9764, 9769, 9777, 9782, 9786, 9799, 9812, - 9818, 9825, 9830, 9836, 9841, 9847, 9857, 9864, 9873, 9883, 9889, 9894, - 9899, 9903, 9907, 9912, 9917, 9923, 9931, 9939, 9950, 9955, 9964, 9973, - 9980, 9986, 9992, 9998, 10004, 10010, 10016, 10022, 10028, 10034, 10041, - 10048, 10055, 10061, 10069, 10078, 10084, 10091, 10098, 10103, 10108, - 10112, 10119, 10126, 10135, 10144, 10147, 10152, 10157, 0, 10162, 10166, - 10170, 10176, 10180, 10184, 10190, 10194, 10202, 10206, 10210, 10214, - 10218, 10222, 10228, 10232, 10238, 10242, 10246, 10250, 10254, 10258, - 10263, 10266, 10270, 10275, 10279, 10283, 10287, 10291, 10295, 10301, - 10307, 10313, 10317, 10321, 10326, 10330, 10334, 10339, 10343, 10347, - 10354, 10361, 10365, 10369, 10374, 10378, 10382, 10385, 10390, 10393, - 10396, 10401, 10406, 10410, 10414, 10420, 10426, 10429, 0, 0, 10432, - 10438, 10444, 10450, 10460, 10472, 10484, 10501, 10513, 10524, 10532, - 10539, 10550, 10565, 10576, 10582, 10591, 10599, 10611, 10621, 10629, - 10641, 10648, 10656, 10668, 10674, 10680, 10688, 10696, 10704, 10710, - 10720, 10727, 10737, 10747, 10760, 10774, 10788, 10798, 10809, 10820, - 10833, 10846, 10860, 10872, 10884, 10897, 10910, 10922, 10935, 10944, - 10952, 10957, 10962, 10967, 10972, 10977, 10982, 10987, 10992, 10997, - 11002, 11007, 11012, 11017, 11022, 11027, 11032, 11037, 11042, 11047, - 11052, 11057, 11062, 11067, 11072, 11077, 11082, 11087, 11092, 11097, - 11102, 11107, 11112, 11116, 11121, 11126, 11131, 11136, 11141, 11145, - 11149, 11153, 11157, 11161, 11165, 11169, 11173, 11177, 11181, 11185, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11190, 11195, 11199, 11203, 11207, - 11211, 11215, 11219, 11223, 11227, 11231, 11235, 11240, 11244, 11248, - 11252, 11257, 11261, 11266, 11270, 11275, 11279, 11284, 11289, 11294, - 11299, 11303, 11308, 11313, 11318, 11323, 11327, 11332, 11339, 11343, - 11348, 11352, 11356, 11361, 11365, 11372, 11379, 11386, 11392, 11400, - 11408, 11417, 11425, 11432, 11439, 11447, 11453, 11459, 11465, 11471, - 11478, 11483, 11487, 11492, 0, 0, 0, 0, 0, 11496, 11500, 11504, 11508, - 11512, 11516, 11520, 11524, 11528, 11532, 11536, 11540, 11544, 11548, - 11552, 11556, 11560, 11564, 11568, 11572, 11576, 11580, 11584, 11588, - 11592, 11596, 11600, 11607, 11613, 11618, 11622, 11629, 11635, 11640, - 11646, 11651, 11655, 11661, 11667, 11672, 11676, 11680, 11685, 11689, - 11693, 11698, 0, 0, 11702, 11707, 11712, 11717, 11722, 11727, 11732, - 11736, 11743, 11748, 11753, 11758, 11763, 11768, 11775, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11780, 11786, - 11790, 11794, 11798, 11803, 11806, 11810, 11813, 11817, 11820, 11824, - 11828, 11832, 11837, 11842, 11845, 11849, 11854, 11859, 11862, 11866, - 11869, 11873, 11877, 11881, 11885, 11889, 11893, 11897, 11901, 11905, - 11909, 11913, 11917, 11921, 11925, 11929, 11933, 11937, 11941, 11944, - 11948, 11951, 11955, 11959, 11963, 11966, 11969, 11972, 11976, 11980, - 11984, 11988, 11992, 11996, 12000, 12004, 0, 0, 12007, 12011, 12015, - 12020, 12024, 12029, 12033, 12038, 12043, 12049, 12055, 12061, 12065, - 12070, 12076, 12082, 12086, 12091, 12095, 0, 12101, 12104, 12110, 12116, - 12121, 12126, 0, 0, 12133, 12137, 12141, 12145, 12149, 12153, 12157, - 12161, 12165, 12170, 12175, 12180, 12186, 12189, 12193, 12197, 12200, - 12203, 12206, 12209, 12212, 12215, 12218, 12221, 12224, 12228, 12235, 0, - 0, 0, 0, 0, 0, 12240, 12244, 12248, 12252, 12256, 12262, 12266, 0, 12270, - 12274, 12278, 0, 12282, 12285, 12289, 12292, 12296, 12299, 12303, 12307, - 0, 0, 12311, 12314, 0, 0, 12318, 12321, 12325, 12328, 12332, 12336, - 12340, 12344, 12348, 12352, 12356, 12360, 12364, 12368, 12372, 12376, - 12380, 12384, 12388, 12392, 12396, 12400, 0, 12403, 12406, 12410, 12414, - 12418, 12421, 12424, 0, 12427, 0, 0, 0, 12431, 12435, 12439, 12443, 0, 0, - 12446, 12450, 12454, 12459, 12463, 12468, 12472, 12477, 12482, 0, 0, - 12488, 12492, 0, 0, 12497, 12501, 12506, 12510, 0, 0, 0, 0, 0, 0, 0, 0, - 12516, 0, 0, 0, 0, 12522, 12526, 0, 12530, 12534, 12539, 12544, 12549, 0, - 0, 12555, 12559, 12562, 12565, 12568, 12571, 12574, 12577, 12580, 12583, - 12586, 12595, 12604, 12608, 12612, 12618, 12624, 12630, 12636, 12650, - 12657, 12660, 0, 0, 0, 0, 0, 12664, 12670, 12674, 0, 12678, 12681, 12685, - 12688, 12692, 12695, 0, 0, 0, 0, 12699, 12703, 0, 0, 12707, 12711, 12715, - 12718, 12722, 12726, 12730, 12734, 12738, 12742, 12746, 12750, 12754, - 12758, 12762, 12766, 12770, 12774, 12778, 12782, 12786, 12790, 0, 12793, - 12796, 12800, 12804, 12808, 12811, 12814, 0, 12817, 12821, 0, 12825, - 12829, 0, 12833, 12837, 0, 0, 12840, 0, 12844, 12849, 12853, 12858, - 12862, 0, 0, 0, 0, 12867, 12872, 0, 0, 12877, 12882, 12887, 0, 0, 0, - 12891, 0, 0, 0, 0, 0, 0, 0, 12895, 12899, 12903, 12907, 0, 12911, 0, 0, - 0, 0, 0, 0, 0, 12915, 12919, 12922, 12925, 12928, 12931, 12934, 12937, - 12940, 12943, 12946, 12949, 12952, 12955, 12958, 12963, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 12967, 12971, 12975, 0, 12979, 12982, 12986, 12989, 12993, - 12996, 13000, 13004, 13008, 0, 13013, 13016, 13020, 0, 13025, 13028, - 13032, 13035, 13039, 13043, 13047, 13051, 13055, 13059, 13063, 13067, - 13071, 13075, 13079, 13083, 13087, 13091, 13095, 13099, 13103, 13107, 0, - 13110, 13113, 13117, 13121, 13125, 13128, 13131, 0, 13134, 13138, 0, - 13142, 13146, 13150, 13154, 13158, 0, 0, 13161, 13165, 13169, 13174, - 13178, 13183, 13187, 13192, 13197, 13203, 0, 13209, 13213, 13218, 0, - 13224, 13228, 13233, 0, 0, 13237, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 13240, 13245, 13250, 13255, 0, 0, 13261, 13265, 13268, 13271, - 13274, 13277, 13280, 13283, 13286, 13289, 0, 13292, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 13296, 13300, 13304, 0, 13308, 13311, 13315, - 13318, 13322, 13325, 13329, 13333, 0, 0, 13337, 13340, 0, 0, 13344, - 13347, 13351, 13354, 13358, 13362, 13366, 13370, 13374, 13378, 13382, - 13386, 13390, 13394, 13398, 13402, 13406, 13410, 13414, 13418, 13422, - 13426, 0, 13429, 13432, 13436, 13440, 13444, 13447, 13450, 0, 13453, - 13457, 0, 13461, 13465, 13469, 13473, 13477, 0, 0, 13480, 13484, 13488, - 13493, 13497, 13502, 13506, 13511, 13516, 0, 0, 13522, 13526, 0, 0, - 13531, 13535, 13540, 0, 0, 0, 0, 0, 0, 0, 0, 13544, 13550, 0, 0, 0, 0, - 13556, 13560, 0, 13564, 13568, 13573, 13578, 13583, 0, 0, 13589, 13593, - 13596, 13599, 13602, 13605, 13608, 13611, 13614, 13617, 13620, 13623, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13627, 13631, 0, 13635, - 13638, 13642, 13645, 13649, 13652, 0, 0, 0, 13656, 13659, 13663, 0, - 13667, 13670, 13674, 13678, 0, 0, 0, 13681, 13685, 0, 13689, 0, 13693, - 13697, 0, 0, 0, 13701, 13705, 0, 0, 0, 13709, 13712, 13716, 0, 0, 0, - 13719, 13722, 13725, 13728, 13732, 13736, 13740, 13744, 13748, 13752, - 13756, 13760, 0, 0, 0, 0, 13763, 13768, 13772, 13777, 13781, 0, 0, 0, - 13786, 13790, 13795, 0, 13800, 13804, 13809, 13814, 0, 0, 13818, 0, 0, 0, - 0, 0, 0, 13821, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13827, 13831, - 13834, 13837, 13840, 13843, 13846, 13849, 13852, 13855, 13858, 13862, - 13867, 13872, 13876, 13880, 13884, 13888, 13892, 13897, 13901, 0, 0, 0, - 0, 0, 0, 13904, 13908, 13912, 0, 13916, 13919, 13923, 13926, 13930, - 13933, 13937, 13941, 0, 13945, 13948, 13952, 0, 13956, 13959, 13963, - 13967, 13970, 13974, 13978, 13982, 13986, 13990, 13994, 13998, 14002, - 14006, 14010, 14014, 14018, 14022, 14026, 14030, 14034, 14038, 14042, 0, - 14045, 14048, 14052, 14056, 14060, 14063, 14066, 14069, 14073, 14077, 0, - 14081, 14085, 14089, 14093, 14097, 0, 0, 0, 14100, 14104, 14109, 14113, - 14118, 14122, 14127, 14132, 0, 14138, 14142, 14147, 0, 14152, 14156, - 14161, 14166, 0, 0, 0, 0, 0, 0, 0, 14170, 14174, 0, 14180, 14184, 0, 0, - 0, 0, 0, 0, 14188, 14193, 14198, 14203, 0, 0, 14209, 14213, 14216, 14219, - 14222, 14225, 14228, 14231, 14234, 14237, 0, 0, 0, 0, 0, 0, 0, 0, 14240, - 14253, 14265, 14277, 14289, 14301, 14313, 14325, 0, 0, 14329, 14333, 0, - 14337, 14340, 14344, 14347, 14351, 14354, 14358, 14362, 0, 14366, 14369, - 14373, 0, 14377, 14380, 14384, 14388, 14391, 14395, 14399, 14403, 14407, - 14411, 14415, 14419, 14423, 14427, 14431, 14435, 14439, 14443, 14447, - 14451, 14455, 14459, 14463, 0, 14466, 14469, 14473, 14477, 14481, 14484, - 14487, 14490, 14494, 14498, 0, 14502, 14506, 14510, 14514, 14518, 0, 0, - 14521, 14525, 14529, 14534, 14538, 14543, 14547, 14552, 14557, 0, 14563, - 14567, 14572, 0, 14577, 14581, 14586, 14591, 0, 0, 0, 0, 0, 0, 0, 14595, - 14599, 0, 0, 0, 0, 0, 0, 0, 14605, 0, 14609, 14614, 14619, 14624, 0, 0, - 14630, 14634, 14637, 14640, 14643, 14646, 14649, 14652, 14655, 14658, 0, - 14661, 14665, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 14669, 14673, - 0, 14677, 14680, 14684, 14687, 14691, 14694, 14698, 14702, 0, 14706, - 14709, 14713, 0, 14717, 14720, 14724, 14728, 14731, 14735, 14739, 14743, - 14747, 14751, 14755, 14759, 14763, 14767, 14771, 14775, 14779, 14783, - 14787, 14791, 14795, 14799, 14803, 0, 14806, 14809, 14813, 14817, 14821, - 14824, 14827, 14830, 14834, 14838, 14842, 14846, 14850, 14854, 14858, - 14862, 0, 0, 0, 14865, 14869, 14874, 14878, 14883, 14887, 14892, 14897, - 0, 14903, 14907, 14912, 0, 14917, 14921, 14926, 14931, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 14935, 0, 0, 0, 0, 0, 0, 0, 0, 14941, 14946, 14951, 14956, 0, 0, - 14962, 14966, 14969, 14972, 14975, 14978, 14981, 14984, 14987, 14990, - 14993, 14997, 15002, 15007, 15013, 15019, 0, 0, 0, 15025, 15029, 15035, - 15040, 15046, 15051, 15057, 0, 0, 15063, 15067, 0, 15071, 15075, 15079, - 15083, 15087, 15091, 15095, 15099, 15103, 15107, 15111, 15115, 15119, - 15123, 15127, 15131, 15135, 15139, 0, 0, 0, 15143, 15149, 15155, 15161, - 15167, 15173, 15179, 15185, 15191, 15197, 15203, 15209, 15217, 15223, - 15229, 15235, 15241, 15247, 15253, 15259, 15265, 15271, 15277, 15283, 0, - 15289, 15295, 15301, 15307, 15313, 15319, 15323, 15329, 15333, 0, 15337, - 0, 0, 15343, 15347, 15353, 15359, 15365, 15369, 15375, 0, 0, 0, 15379, 0, - 0, 0, 0, 15383, 15388, 15395, 15402, 15409, 15416, 0, 15423, 0, 15430, - 15435, 15440, 15447, 15454, 15463, 15474, 15483, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15488, 15495, 15502, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 15507, 15513, 15519, 15525, 15531, 15537, 15543, 15549, - 15555, 15561, 15567, 15573, 15579, 15585, 15591, 15596, 15602, 15608, - 15614, 15620, 15626, 15631, 15637, 15643, 15649, 15655, 15661, 15667, - 15673, 15679, 15685, 15691, 15697, 15702, 15708, 15714, 15718, 15724, - 15728, 15734, 15740, 15746, 15752, 15758, 15764, 15769, 15775, 15779, - 15784, 15790, 15796, 15802, 15807, 15813, 15819, 15825, 15830, 15836, 0, - 0, 0, 0, 15840, 15846, 15851, 15857, 15862, 15870, 15878, 15882, 15886, - 15890, 15896, 15902, 15908, 15914, 15918, 15922, 15926, 15930, 15934, - 15937, 15940, 15943, 15946, 15949, 15952, 15955, 15958, 15961, 15965, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15969, 15973, 0, 15979, 0, 0, 15985, - 15989, 0, 15993, 0, 0, 15999, 0, 0, 0, 0, 0, 0, 16003, 16007, 16010, - 16016, 0, 16022, 16026, 16030, 16034, 16040, 16046, 16052, 0, 16058, - 16062, 16066, 0, 16072, 0, 16078, 0, 0, 16082, 16088, 0, 16094, 16097, - 16103, 16106, 16110, 16117, 16122, 16127, 16131, 16136, 16141, 16146, - 16150, 0, 16155, 16162, 16168, 0, 0, 16174, 16178, 16183, 16187, 16192, - 0, 16197, 0, 16202, 16208, 16214, 16220, 16226, 16230, 0, 0, 16233, - 16237, 16240, 16243, 16246, 16249, 16252, 16255, 16258, 16261, 0, 0, - 16264, 16269, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16274, 16278, 16289, 16304, - 16319, 16329, 16340, 16353, 16364, 16370, 16378, 16388, 16394, 16402, - 16406, 16412, 16418, 16426, 16436, 16444, 16457, 16463, 16471, 16479, - 16491, 16498, 16506, 16514, 16522, 16530, 16538, 16546, 16556, 16560, - 16563, 16566, 16569, 16572, 16575, 16578, 16581, 16584, 16587, 16591, - 16595, 16599, 16603, 16607, 16611, 16615, 16619, 16623, 16628, 16634, - 16644, 16658, 16668, 16674, 16680, 16688, 16696, 16704, 16712, 16718, - 16724, 16727, 16731, 16735, 16739, 16743, 16747, 16751, 0, 16755, 16759, - 16763, 16767, 16771, 16775, 16779, 16783, 16787, 16791, 16795, 16798, - 16801, 16805, 16809, 16813, 16816, 16820, 16824, 16828, 16832, 16836, - 16840, 16844, 16848, 16851, 16854, 16858, 16862, 16866, 16870, 16873, - 16876, 16880, 16885, 16889, 0, 0, 0, 0, 16893, 16898, 16902, 16907, - 16911, 16916, 16921, 16927, 16932, 16938, 16942, 16947, 16951, 16956, - 16966, 16972, 16977, 16983, 16993, 16999, 17003, 17007, 17013, 17019, - 17027, 17033, 17041, 0, 0, 0, 0, 17049, 17054, 17060, 17066, 17072, - 17078, 17084, 17090, 0, 17096, 17102, 17108, 17114, 17120, 17126, 17132, - 17138, 17144, 17150, 17156, 17161, 17166, 17172, 17178, 17184, 17189, - 17195, 17201, 17207, 17213, 17219, 17225, 17231, 17237, 17242, 17247, - 17253, 17259, 17265, 17271, 17276, 17281, 17287, 17295, 17302, 0, 17309, - 17316, 17329, 17336, 17343, 17351, 17359, 17365, 17371, 17377, 17387, - 17392, 17398, 17408, 17418, 0, 17428, 17438, 17446, 17458, 17470, 17476, - 17490, 17505, 17510, 17515, 17523, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 17531, 17534, 17538, 17542, 17546, 17550, 17554, 17558, 17562, - 17566, 17570, 17574, 17578, 17582, 17586, 17590, 17594, 17598, 17602, - 17606, 17610, 17613, 17616, 17620, 17624, 17628, 17631, 17634, 17637, - 17641, 17645, 17649, 17652, 17656, 17659, 17664, 17667, 17671, 17674, - 17678, 17681, 17686, 17689, 17693, 17700, 17705, 17709, 17714, 17718, - 17723, 17727, 17732, 17739, 17745, 17750, 17754, 17758, 17762, 17766, - 17770, 17776, 17782, 17789, 17795, 17801, 17805, 17808, 17811, 17814, - 17817, 17820, 17823, 17826, 17829, 17832, 17838, 17842, 17846, 17850, - 17854, 17858, 17862, 17866, 17870, 17875, 17879, 17884, 17889, 17895, - 17900, 17906, 17912, 17918, 17924, 17930, 17938, 17946, 17955, 17963, - 17972, 17981, 17992, 18002, 18012, 18023, 18034, 18044, 18054, 18064, - 18074, 18084, 18094, 18104, 18114, 18122, 18129, 18135, 18142, 18147, - 18153, 18159, 18165, 18171, 18177, 18183, 18188, 18194, 18200, 18206, - 18212, 18217, 18226, 18233, 18239, 18246, 18254, 18260, 18266, 18272, - 18278, 18286, 18294, 18304, 18312, 18320, 18326, 18331, 18336, 18341, - 18346, 18351, 18356, 18361, 18366, 18371, 18377, 18383, 18389, 18396, - 18401, 18407, 18412, 18417, 18422, 18427, 18432, 18437, 18442, 18447, - 18452, 18457, 18462, 18467, 18472, 18477, 18482, 18487, 18492, 18497, - 18502, 18507, 18512, 18517, 18522, 18527, 18532, 18537, 18542, 18547, - 18552, 18557, 18562, 18567, 18572, 18577, 18582, 18587, 18592, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 18597, 18601, 18605, 18609, 18613, 18617, 18621, - 18625, 18629, 18633, 18637, 18641, 18645, 18649, 18653, 18657, 18661, - 18665, 18669, 18673, 18677, 18681, 18685, 18689, 18693, 18697, 18701, - 18705, 18709, 18713, 18717, 18721, 18725, 18729, 18733, 18737, 18741, - 18745, 18749, 18753, 18757, 18761, 18766, 18770, 18775, 0, 0, 0, 18780, - 18784, 18788, 18792, 18796, 18800, 18804, 18808, 18812, 18816, 18820, - 18824, 18828, 18832, 18836, 18840, 18844, 18848, 18852, 18856, 18860, - 18864, 18868, 18872, 18876, 18880, 18884, 18888, 18892, 18896, 18900, - 18904, 18908, 18912, 18916, 18920, 18924, 18928, 18932, 18936, 18940, - 18944, 18948, 18952, 18956, 18960, 18964, 18968, 18972, 18976, 18980, - 18984, 18988, 18992, 18996, 19000, 19004, 19008, 19012, 19016, 19020, - 19024, 19028, 19032, 19036, 19040, 19044, 19048, 19052, 19056, 19060, - 19064, 19068, 19072, 19076, 19080, 19084, 19088, 19092, 19096, 19100, - 19104, 19108, 19112, 19116, 19120, 19124, 19128, 19132, 19136, 19140, - 19144, 19148, 19152, 19156, 19160, 19164, 19168, 19171, 19175, 19178, - 19182, 19186, 19189, 19193, 19197, 19200, 19204, 19208, 19212, 19216, - 19219, 19223, 19227, 19231, 19235, 19239, 19243, 19246, 19250, 19254, + 75, 78, 82, 86, 91, 96, 101, 105, 110, 114, 118, 122, 127, 132, 136, 140, + 144, 148, 153, 158, 162, 166, 171, 175, 179, 184, 189, 194, 199, 202, + 206, 209, 213, 216, 220, 224, 229, 234, 239, 243, 248, 252, 256, 260, + 265, 270, 274, 278, 282, 286, 291, 296, 300, 304, 309, 313, 317, 322, + 327, 332, 337, 341, 344, 348, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 349, 353, 358, + 361, 364, 367, 370, 373, 376, 377, 380, 386, 394, 396, 400, 403, 405, + 408, 411, 414, 417, 421, 424, 427, 431, 433, 436, 442, 450, 457, 464, + 471, 476, 483, 489, 496, 502, 508, 516, 521, 529, 536, 542, 549, 555, + 563, 570, 578, 585, 590, 597, 604, 610, 617, 623, 629, 632, 638, 645, + 651, 658, 664, 671, 676, 682, 689, 695, 702, 708, 714, 722, 727, 735, + 742, 748, 755, 761, 769, 776, 784, 791, 796, 803, 810, 816, 823, 829, + 835, 838, 844, 851, 857, 864, 870, 877, 882, 889, 896, 903, 910, 917, + 924, 931, 938, 945, 953, 961, 969, 977, 985, 993, 1001, 1009, 1016, 1023, + 1030, 1037, 1044, 1051, 1058, 1065, 1072, 1079, 1086, 1093, 1101, 1109, + 1117, 1125, 1133, 1141, 1149, 1157, 1165, 1173, 1180, 1187, 1194, 1201, + 1209, 1217, 1225, 1233, 1241, 1249, 1257, 1263, 1268, 1273, 1281, 1289, + 1297, 1305, 1310, 1317, 1324, 1332, 1340, 1348, 1356, 1366, 1376, 1383, + 1390, 1397, 1404, 1412, 1420, 1428, 1436, 1447, 1452, 1457, 1464, 1471, + 1478, 1485, 1492, 1499, 1504, 1509, 1516, 1523, 1531, 1539, 1547, 1555, + 1562, 1569, 1577, 1585, 1593, 1601, 1609, 1617, 1625, 1633, 1641, 1649, + 1656, 1663, 1669, 1675, 1682, 1689, 1696, 1703, 1711, 1719, 1726, 1733, + 1740, 1747, 1755, 1763, 1771, 1779, 1786, 1793, 1800, 1808, 1816, 1824, + 1832, 1837, 1843, 1849, 1856, 1863, 1868, 1873, 1879, 1886, 1893, 1900, + 1907, 1915, 1923, 1929, 1934, 1939, 1945, 1952, 1959, 1966, 1971, 1976, + 1981, 1988, 1995, 2002, 2009, 2016, 2021, 2029, 2039, 2047, 2054, 2061, + 2066, 2071, 2078, 2085, 2089, 2094, 2099, 2104, 2111, 2120, 2127, 2134, + 2143, 2150, 2157, 2162, 2169, 2176, 2183, 2190, 2197, 2202, 2209, 2216, + 2224, 2229, 2234, 2239, 2249, 2253, 2259, 2265, 2271, 2277, 2285, 2298, + 2306, 2311, 2321, 2326, 2331, 2341, 2346, 2353, 2360, 2368, 2376, 2383, + 2390, 2397, 2404, 2414, 2424, 2433, 2442, 2452, 2462, 2472, 2482, 2487, + 2497, 2507, 2517, 2527, 2535, 2543, 2550, 2557, 2565, 2573, 2581, 2589, + 2596, 2603, 2613, 2623, 2631, 2639, 2647, 2652, 2662, 2667, 2674, 2681, + 2686, 2691, 2699, 2707, 2717, 2727, 2734, 2741, 2749, 2757, 2765, 2773, + 2782, 2791, 2799, 2807, 2816, 2825, 2834, 2843, 2853, 2863, 2871, 2879, + 2888, 2897, 2906, 2915, 2925, 2935, 2943, 2951, 2960, 2969, 2978, 2987, + 2996, 3005, 3010, 3015, 3023, 3031, 3041, 3049, 3054, 3059, 3066, 3073, + 3080, 3087, 3094, 3101, 3111, 3121, 3131, 3141, 3148, 3155, 3165, 3175, + 3183, 3191, 3199, 3207, 3215, 3222, 3229, 3236, 3242, 3249, 3256, 3263, + 3272, 3282, 3292, 3299, 3306, 3312, 3317, 3322, 3328, 3334, 3341, 3348, + 3359, 3369, 3376, 3383, 3390, 3397, 3402, 3407, 3413, 3419, 3425, 3433, + 3441, 3448, 3453, 3458, 3465, 3471, 3478, 3487, 3496, 3505, 3512, 3517, + 3522, 3527, 3534, 3539, 3546, 3553, 3560, 3565, 3570, 3579, 3587, 3596, + 3601, 3606, 3616, 3623, 3631, 3640, 3645, 3651, 3657, 3664, 3669, 3674, + 3684, 3692, 3701, 3709, 3717, 3726, 3731, 3738, 3745, 3750, 3761, 3769, + 3777, 3783, 3792, 3797, 3802, 3809, 3814, 3820, 3826, 3832, 3841, 3849, + 3854, 3862, 3868, 3876, 3884, 3890, 3896, 3902, 3910, 3918, 3923, 3931, + 3937, 3942, 3949, 3957, 3966, 3973, 3980, 3990, 3997, 4004, 4014, 4021, + 4028, 4035, 4041, 4047, 4056, 4068, 4072, 4079, 4084, 4088, 4093, 4101, + 4108, 4113, 4118, 4122, 4127, 4132, 4136, 4141, 4147, 4153, 4159, 4166, + 4171, 4176, 4181, 4186, 4192, 4194, 4199, 4203, 4209, 4215, 4221, 4226, + 4233, 4240, 4246, 4253, 4261, 4269, 4274, 4279, 4283, 4288, 4290, 4292, + 4295, 4297, 4299, 4304, 4309, 4315, 4320, 4324, 4328, 4333, 4341, 4347, + 4352, 4358, 4363, 4369, 4377, 4385, 4389, 4393, 4398, 4404, 4410, 4416, + 4422, 4427, 4435, 4444, 4453, 4457, 4463, 4470, 4477, 4484, 4491, 4495, + 4501, 4506, 4511, 4516, 4521, 4523, 4526, 4529, 4532, 4535, 4537, 4541, + 4545, 4551, 4554, 4559, 4565, 4571, 4574, 4579, 4584, 4588, 4593, 4599, + 4605, 4611, 4616, 4621, 4626, 4629, 4635, 4640, 4645, 4649, 4654, 4660, + 4666, 4669, 4673, 4677, 4681, 4684, 4687, 4692, 4696, 4703, 4707, 4713, + 4717, 4723, 4727, 4731, 4735, 4740, 4745, 4751, 4756, 4763, 4769, 4775, + 4781, 4784, 4788, 4792, 4795, 4799, 4804, 4809, 4813, 4817, 4823, 4827, + 4831, 4836, 4842, 4847, 4852, 4856, 4862, 4867, 4872, 4877, 4882, 4888, + 4891, 4895, 4900, 4905, 4914, 4920, 4925, 4929, 4934, 4938, 4943, 4947, + 4951, 4956, 4959, 4965, 4970, 4975, 4980, 4985, 4990, 4995, 5001, 5007, + 5012, 5017, 5022, 5028, 5033, 5039, 5044, 5049, 5056, 5063, 5066, 5070, + 5077, 0, 0, 5084, 5087, 5095, 5104, 5114, 0, 0, 0, 0, 0, 5118, 5121, + 5126, 5134, 5139, 5147, 5155, 0, 5163, 0, 5171, 5179, 5187, 5198, 5203, + 5208, 5213, 5218, 5223, 5228, 5233, 5238, 5243, 5248, 5253, 5258, 5263, + 5268, 5273, 5278, 0, 5283, 5288, 5293, 5298, 5303, 5308, 5313, 5318, + 5326, 5334, 5342, 5350, 5358, 5366, 5377, 5382, 5387, 5392, 5397, 5402, + 5407, 5412, 5417, 5422, 5427, 5432, 5437, 5442, 5447, 5452, 5457, 5462, + 5468, 5473, 5478, 5483, 5488, 5493, 5498, 5503, 5511, 5519, 5527, 5535, + 5543, 5548, 5552, 5556, 5563, 5573, 5583, 5587, 5591, 5595, 5601, 5608, + 5612, 5617, 5621, 5626, 5630, 5635, 5639, 5644, 5649, 5654, 5659, 5664, + 5669, 5674, 5679, 5684, 5689, 5694, 5699, 5704, 5709, 5714, 5718, 5722, + 5728, 5732, 5737, 5743, 5750, 5755, 5760, 5767, 5772, 5777, 5783, 5791, + 5800, 5810, 5818, 5823, 5828, 5833, 5840, 5845, 5851, 5856, 5861, 5866, + 5871, 5876, 5881, 5889, 5895, 5900, 5904, 5909, 5914, 5919, 5924, 5929, + 5934, 5939, 5943, 5949, 5953, 5958, 5963, 5968, 5972, 5977, 5982, 5987, + 5992, 5996, 6001, 6005, 6010, 6015, 6020, 6025, 6031, 6036, 6042, 6046, + 6051, 6055, 6059, 6064, 6069, 6074, 6079, 6084, 6089, 6094, 6098, 6104, + 6108, 6113, 6118, 6123, 6127, 6132, 6137, 6142, 6147, 6151, 6156, 6160, + 6165, 6170, 6175, 6180, 6186, 6191, 6197, 6201, 6206, 6210, 6218, 6223, + 6228, 6233, 6240, 6245, 6251, 6256, 6261, 6266, 6271, 6276, 6281, 6289, + 6295, 6300, 6305, 6310, 6315, 6320, 6326, 6332, 6339, 6346, 6355, 6364, + 6371, 6378, 6387, 6396, 6401, 6406, 6411, 6416, 6421, 6426, 6431, 6436, + 6447, 6458, 6463, 6468, 6475, 6482, 6490, 6498, 6503, 6508, 6513, 6518, + 6522, 6526, 6530, 6535, 6540, 6544, 6551, 6556, 6566, 6576, 6582, 6588, + 6596, 6604, 6612, 6620, 6627, 6634, 6643, 6652, 6660, 6668, 6676, 6684, + 6691, 6698, 6705, 6712, 6718, 6724, 6730, 6736, 6744, 6752, 6759, 6766, + 6775, 6784, 6790, 6796, 6804, 6812, 6820, 6828, 6834, 6840, 6848, 6856, + 6864, 6872, 6879, 6886, 6894, 6902, 6910, 6918, 6923, 6928, 6935, 6942, + 6952, 6962, 6966, 6974, 6982, 6988, 6994, 7002, 7010, 7017, 7024, 7032, + 7040, 7047, 7054, 7062, 7070, 7075, 7082, 7089, 7095, 7101, 7107, 7113, + 7121, 7129, 7134, 7139, 7146, 7153, 7160, 7167, 7174, 7181, 7188, 7195, + 7203, 7211, 7218, 7225, 7231, 7237, 7243, 7249, 7257, 7265, 7271, 7277, + 7284, 7291, 7297, 7303, 7310, 7317, 7324, 7331, 7339, 7347, 7354, 7361, + 7370, 7379, 7386, 7393, 7400, 7407, 7414, 7421, 7428, 7435, 7442, 7449, + 7456, 7463, 7470, 7477, 7484, 7491, 7498, 7505, 7512, 7519, 7525, 7531, + 7538, 7545, 7550, 7555, 7560, 7565, 7570, 7575, 7580, 7585, 7590, 7595, + 7601, 7607, 7616, 7625, 7634, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 7643, 7648, 7653, 7658, 7663, 7668, 7673, 7678, 7683, 7687, 7692, 7697, + 7702, 7707, 7712, 7717, 7722, 7727, 7732, 7737, 7742, 7747, 7752, 7757, + 7762, 7767, 7772, 7777, 7781, 7786, 7791, 7796, 7801, 7806, 7811, 7816, + 7821, 7826, 0, 0, 7831, 7838, 7841, 7845, 7849, 7852, 7856, 0, 7860, + 7865, 7870, 7875, 7880, 7885, 7890, 7895, 7900, 7904, 7909, 7914, 7919, + 7924, 7929, 7934, 7939, 7944, 7949, 7954, 7959, 7964, 7969, 7974, 7979, + 7984, 7989, 7994, 7998, 8003, 8008, 8013, 8018, 8023, 8028, 8033, 8038, + 8043, 8048, 0, 8055, 8060, 0, 0, 0, 0, 0, 0, 8063, 8068, 8073, 8078, + 8085, 8092, 8097, 8102, 8107, 8112, 8117, 8122, 8127, 8134, 8139, 8146, + 8153, 8158, 8165, 8170, 8175, 8180, 8187, 8192, 8197, 8204, 8213, 8218, + 8223, 8228, 8233, 8239, 8244, 8251, 8258, 8265, 8270, 8275, 8280, 8285, + 8290, 8295, 8305, 8310, 8318, 8323, 8328, 8333, 8338, 8345, 8352, 8359, + 8365, 8370, 8377, 0, 0, 0, 0, 0, 0, 0, 0, 8384, 8388, 8392, 8396, 8400, + 8404, 8408, 8412, 8416, 8420, 8424, 8429, 8433, 8437, 8442, 8446, 8451, + 8455, 8459, 8463, 8468, 8472, 8477, 8481, 8485, 8489, 8493, 0, 0, 0, 0, + 0, 8497, 8504, 8512, 8519, 8524, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8529, + 8532, 8536, 8541, 0, 0, 8545, 8551, 8557, 8560, 8567, 8576, 8579, 8582, + 8587, 8593, 8597, 8605, 8611, 8617, 8625, 8629, 8634, 8644, 8649, 8653, + 8657, 8661, 0, 0, 8664, 8671, 0, 8675, 8679, 8686, 8692, 8699, 8705, + 8711, 8715, 8719, 8725, 8729, 8733, 8737, 8741, 8745, 8749, 8753, 8757, + 8761, 8765, 8769, 8773, 8777, 8781, 8785, 8789, 8793, 8801, 8809, 8818, + 8827, 8836, 8839, 8843, 8847, 8851, 8855, 8859, 8863, 8867, 8871, 8876, + 8880, 8883, 8886, 8889, 8892, 8895, 8898, 8901, 8904, 8908, 8911, 8914, + 8919, 8924, 8930, 8933, 8940, 8949, 8954, 8958, 0, 8965, 8970, 8974, + 8978, 8982, 8986, 8990, 8994, 8998, 9002, 9006, 9010, 9015, 9020, 9027, + 9033, 9039, 9045, 9050, 9058, 9066, 9071, 9077, 9083, 9089, 9095, 9099, + 9103, 9107, 9114, 9124, 9128, 9132, 9136, 9142, 9150, 9154, 9158, 9165, + 9169, 9173, 9177, 9184, 9191, 9203, 9207, 9211, 9215, 9225, 9234, 9238, + 9245, 9252, 9259, 9268, 9279, 9287, 9291, 9300, 9311, 9319, 9332, 9340, + 9348, 9356, 9364, 9370, 9379, 9386, 9390, 9398, 9402, 9409, 9417, 9421, + 9427, 9434, 9441, 9445, 9453, 9457, 9464, 9468, 9476, 9480, 9488, 9494, + 9500, 9507, 9514, 9521, 9527, 9531, 9538, 9546, 9552, 9559, 9566, 9572, + 9581, 9589, 9596, 9602, 9606, 9609, 9613, 9619, 9627, 9631, 9637, 9643, + 9649, 9656, 9659, 9666, 9671, 9679, 9684, 9688, 9700, 9712, 9718, 9724, + 9729, 9735, 9740, 9746, 9756, 9763, 9772, 9782, 9788, 9793, 9798, 9802, + 9806, 9811, 9816, 9822, 9830, 9838, 9849, 9854, 9862, 9870, 9877, 9883, + 9889, 9895, 9901, 9907, 9913, 9919, 9925, 9931, 9938, 9945, 9952, 9958, + 9966, 9974, 9980, 9987, 9994, 9999, 10004, 10008, 10015, 10022, 10031, + 10040, 10043, 10048, 10053, 0, 10058, 10062, 10066, 10072, 10076, 10080, + 10086, 10090, 10098, 10102, 10106, 10110, 10114, 10118, 10124, 10128, + 10134, 10138, 10142, 10146, 10150, 10154, 10159, 10162, 10166, 10171, + 10175, 10179, 10183, 10187, 10191, 10197, 10203, 10209, 10213, 10217, + 10222, 10226, 10230, 10235, 10239, 10243, 10250, 10257, 10261, 10265, + 10270, 10274, 10278, 10281, 10286, 10289, 10292, 10297, 10302, 10306, + 10310, 10316, 10322, 10325, 0, 0, 10328, 10334, 10340, 10346, 10356, + 10368, 10380, 10397, 10409, 10420, 10427, 10434, 10445, 10460, 10471, + 10477, 10486, 10494, 10506, 10516, 10524, 10536, 10543, 10551, 10563, + 10569, 10575, 10583, 10591, 10598, 10603, 10613, 10620, 10630, 10640, + 10653, 10667, 10681, 10691, 10702, 10713, 10726, 10739, 10753, 10765, + 10777, 10790, 10803, 10815, 10828, 10836, 10844, 10849, 10854, 10859, + 10864, 10869, 10874, 10879, 10884, 10889, 10894, 10899, 10904, 10909, + 10914, 10919, 10924, 10929, 10934, 10939, 10944, 10949, 10954, 10959, + 10964, 10969, 10974, 10979, 10984, 10989, 10994, 10999, 11004, 11008, + 11013, 11018, 11023, 11028, 11033, 11037, 11041, 11045, 11049, 11053, + 11057, 11061, 11065, 11069, 11073, 11077, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 11082, 11086, 11089, 11092, 11095, 11098, 11101, 11104, + 11107, 11110, 11113, 11116, 11120, 11123, 11126, 11129, 11133, 11136, + 11140, 11143, 11147, 11150, 11154, 11158, 11162, 11166, 11169, 11173, + 11177, 11181, 11185, 11188, 11192, 11198, 11201, 11205, 11209, 11212, + 11216, 11219, 11225, 11231, 11237, 11242, 11249, 11256, 11264, 11271, + 11277, 11283, 11290, 11295, 11300, 11305, 11310, 11316, 11320, 11323, + 11327, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11330, 11334, 11338, + 11342, 11347, 11350, 11354, 11357, 11361, 11364, 11368, 11372, 11376, + 11381, 11386, 11389, 11393, 11398, 11403, 11406, 11410, 11413, 11417, + 11421, 11425, 11429, 11433, 11437, 11441, 11445, 11449, 11453, 11457, + 11461, 11465, 11469, 11473, 11477, 11481, 11485, 11489, 11493, 11496, + 11500, 11504, 11508, 11511, 11514, 11517, 11521, 11525, 11529, 11533, + 11537, 11541, 11545, 11549, 0, 0, 11552, 11556, 11560, 11565, 11569, + 11574, 11578, 11583, 11588, 11594, 11600, 11606, 11610, 11615, 11621, + 11627, 11631, 11636, 0, 0, 11640, 11643, 11649, 11655, 11660, 0, 0, 0, + 11665, 11669, 11673, 11677, 11681, 11685, 11689, 11693, 11697, 11702, + 11707, 11712, 11718, 11721, 11725, 11729, 11732, 11735, 11738, 11741, + 11744, 11747, 11750, 11753, 11756, 11760, 11767, 0, 0, 0, 0, 0, 0, 0, 0, + 11772, 11776, 11780, 11786, 11790, 0, 11794, 11798, 11802, 0, 11806, + 11809, 11813, 11816, 11820, 11823, 11827, 11831, 0, 0, 11835, 11838, 0, + 0, 11842, 11845, 11849, 11852, 11856, 11860, 11864, 11868, 11872, 11876, + 11880, 11884, 11888, 11892, 11896, 11900, 11904, 11908, 11912, 11916, + 11920, 11924, 0, 11928, 11931, 11935, 11939, 11943, 11946, 11949, 0, + 11952, 0, 0, 0, 11956, 11960, 11964, 11968, 0, 0, 11971, 11975, 11979, + 11984, 11988, 11993, 11997, 12002, 12007, 0, 0, 12013, 12017, 0, 0, + 12022, 12026, 12031, 12035, 0, 0, 0, 0, 0, 0, 0, 0, 12041, 0, 0, 0, 0, + 12047, 12051, 0, 12055, 12059, 12064, 12069, 12074, 0, 0, 12080, 12084, + 12087, 12090, 12093, 12096, 12099, 12102, 12105, 12108, 12111, 12120, + 12128, 12132, 12136, 12142, 12148, 12154, 12160, 12174, 12181, 0, 0, 0, + 0, 0, 0, 12184, 12190, 12194, 0, 12198, 12201, 12205, 12208, 12212, + 12215, 0, 0, 0, 0, 12219, 12223, 0, 0, 12227, 12231, 12235, 12238, 12242, + 12246, 12250, 12254, 12258, 12262, 12266, 12270, 12274, 12278, 12282, + 12286, 12290, 12294, 12298, 12302, 12306, 12310, 0, 12314, 12317, 12321, + 12325, 12329, 12332, 12335, 0, 12338, 12342, 0, 12346, 12350, 0, 12354, + 12358, 0, 0, 12361, 0, 12365, 12370, 12374, 12379, 12383, 0, 0, 0, 0, + 12388, 12393, 0, 0, 12398, 12403, 12408, 0, 0, 0, 12412, 0, 0, 0, 0, 0, + 0, 0, 12416, 12420, 12424, 12428, 0, 12432, 0, 0, 0, 0, 0, 0, 0, 12436, + 12440, 12443, 12446, 12449, 12452, 12455, 12458, 12461, 12464, 12467, + 12470, 12473, 12476, 12479, 12484, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 12488, 12492, 12496, 0, 12500, 12503, 12507, 12510, 12514, 12517, 12521, + 12525, 12529, 0, 12534, 12537, 12541, 0, 12546, 12549, 12553, 12556, + 12560, 12564, 12568, 12572, 12576, 12580, 12584, 12588, 12592, 12596, + 12600, 12604, 12608, 12612, 12616, 12620, 12624, 12628, 0, 12632, 12635, + 12639, 12643, 12647, 12650, 12653, 0, 12656, 12660, 0, 12664, 12668, + 12672, 12676, 12680, 0, 0, 12683, 12687, 12691, 12696, 12700, 12705, + 12709, 12714, 12719, 12725, 0, 12731, 12735, 12740, 0, 12746, 12750, + 12755, 0, 0, 12759, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12762, + 12767, 12772, 12777, 0, 0, 12783, 12787, 12790, 12793, 12796, 12799, + 12802, 12805, 12808, 12811, 0, 12814, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 12818, 12822, 12826, 0, 12830, 12833, 12837, 12840, 12844, + 12847, 12851, 12855, 0, 0, 12859, 12862, 0, 0, 12866, 12869, 12873, + 12876, 12880, 12884, 12888, 12892, 12896, 12900, 12904, 12908, 12912, + 12916, 12920, 12924, 12928, 12932, 12936, 12940, 12944, 12948, 0, 12952, + 12955, 12959, 12963, 12967, 12970, 12973, 0, 12976, 12980, 0, 12984, + 12988, 12992, 12996, 13000, 0, 0, 13003, 13007, 13011, 13016, 13020, + 13025, 13029, 13034, 13039, 0, 0, 13045, 13049, 0, 0, 13054, 13058, + 13063, 0, 0, 0, 0, 0, 0, 0, 0, 13067, 13073, 0, 0, 0, 0, 13079, 13083, 0, + 13087, 13091, 13096, 13101, 13106, 0, 0, 13112, 13116, 13119, 13122, + 13125, 13128, 13131, 13134, 13137, 13140, 13143, 13146, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13150, 13154, 0, 13158, 13161, 13165, + 13168, 13172, 13175, 0, 0, 0, 13179, 13182, 13186, 0, 13190, 13193, + 13197, 13201, 0, 0, 0, 13204, 13208, 0, 13212, 0, 13216, 13220, 0, 0, 0, + 13224, 13228, 0, 0, 0, 13232, 13236, 13240, 0, 0, 0, 13243, 13246, 13249, + 13252, 13256, 13260, 13264, 13268, 13272, 13276, 13280, 13284, 0, 0, 0, + 0, 13287, 13292, 13296, 13301, 13305, 0, 0, 0, 13310, 13314, 13319, 0, + 13324, 13328, 13333, 13338, 0, 0, 13342, 0, 0, 0, 0, 0, 0, 13345, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13351, 13355, 13358, 13361, 13364, + 13367, 13370, 13373, 13376, 13379, 13382, 13386, 13391, 13396, 13400, + 13404, 13408, 13412, 13416, 13421, 13425, 0, 0, 0, 0, 0, 0, 13428, 13432, + 13436, 0, 13440, 13443, 13447, 13450, 13454, 13457, 13461, 13465, 0, + 13469, 13472, 13476, 0, 13480, 13483, 13487, 13491, 13494, 13498, 13502, + 13506, 13510, 13514, 13518, 13522, 13526, 13530, 13534, 13538, 13542, + 13546, 13550, 13554, 13558, 13562, 13566, 0, 13570, 13573, 13577, 13581, + 13585, 13588, 13591, 13594, 13598, 13602, 0, 13606, 13610, 13614, 13618, + 13622, 0, 0, 0, 13625, 13629, 13634, 13638, 13643, 13647, 13652, 13657, + 0, 13663, 13667, 13672, 0, 13677, 13681, 13686, 13691, 0, 0, 0, 0, 0, 0, + 0, 13695, 13699, 0, 13705, 13709, 0, 0, 0, 0, 0, 0, 13713, 13718, 13723, + 13728, 0, 0, 13734, 13738, 13741, 13744, 13747, 13750, 13753, 13756, + 13759, 13762, 0, 0, 0, 0, 0, 0, 0, 0, 13765, 13778, 13790, 13802, 13814, + 13826, 13838, 13850, 0, 0, 13854, 13858, 0, 13862, 13865, 13869, 13872, + 13876, 13879, 13883, 13887, 0, 13891, 13894, 13898, 0, 13902, 13905, + 13909, 13913, 13916, 13920, 13924, 13928, 13932, 13936, 13940, 13944, + 13948, 13952, 13956, 13960, 13964, 13968, 13972, 13976, 13980, 13984, + 13988, 0, 13992, 13995, 13999, 14003, 14007, 14010, 14013, 14016, 14020, + 14024, 0, 14028, 14032, 14036, 14040, 14044, 0, 0, 14047, 14051, 14055, + 14060, 14064, 14069, 14073, 14078, 14083, 0, 14089, 14093, 14098, 0, + 14103, 14107, 14112, 14117, 0, 0, 0, 0, 0, 0, 0, 14121, 14125, 0, 0, 0, + 0, 0, 0, 0, 14131, 0, 14135, 14140, 14145, 14150, 0, 0, 14156, 14160, + 14163, 14166, 14169, 14172, 14175, 14178, 14181, 14184, 0, 14187, 14191, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 14195, 14199, 0, 14203, + 14206, 14210, 14213, 14217, 14220, 14224, 14228, 0, 14232, 14235, 14239, + 0, 14243, 14246, 14250, 14254, 14257, 14261, 14265, 14269, 14273, 14277, + 14281, 14285, 14289, 14293, 14297, 14301, 14305, 14309, 14313, 14317, + 14321, 14325, 14329, 0, 14333, 14336, 14340, 14344, 14348, 14351, 14354, + 14357, 14361, 14365, 14369, 14373, 14377, 14381, 14385, 14389, 0, 0, 0, + 14392, 14396, 14401, 14405, 14410, 14414, 14419, 14424, 0, 14430, 14434, + 14439, 0, 14444, 14448, 14453, 14458, 0, 0, 0, 0, 0, 0, 0, 0, 0, 14462, + 0, 0, 0, 0, 0, 0, 0, 0, 14468, 14473, 14478, 14483, 0, 0, 14489, 14493, + 14496, 14499, 14502, 14505, 14508, 14511, 14514, 14517, 14520, 14524, + 14529, 14534, 14540, 14546, 0, 0, 0, 14552, 14556, 14562, 14567, 14573, + 14578, 14584, 0, 0, 14590, 14594, 0, 14598, 14602, 14606, 14610, 14614, + 14618, 14622, 14626, 14630, 14634, 14638, 14642, 14646, 14650, 14654, + 14658, 14662, 14666, 0, 0, 0, 14670, 14676, 14682, 14688, 14694, 14700, + 14706, 14712, 14718, 14724, 14730, 14736, 14744, 14750, 14756, 14762, + 14768, 14774, 14780, 14786, 14792, 14798, 14804, 14810, 0, 14816, 14822, + 14828, 14834, 14840, 14846, 14850, 14856, 14860, 0, 14864, 0, 0, 14870, + 14874, 14880, 14886, 14892, 14896, 14902, 0, 0, 0, 14906, 0, 0, 0, 0, + 14910, 14915, 14922, 14929, 14936, 14943, 0, 14950, 0, 14957, 14962, + 14967, 14974, 14981, 14990, 15001, 15010, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 15015, 15022, 15029, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 15034, 15040, 15046, 15052, 15058, 15064, 15070, 15076, 15082, + 15088, 15094, 15100, 15106, 15112, 15118, 15123, 15129, 15135, 15141, + 15147, 15153, 15158, 15164, 15170, 15176, 15182, 15188, 15194, 15200, + 15206, 15212, 15218, 15224, 15229, 15235, 15241, 15245, 15251, 15255, + 15261, 15267, 15273, 15279, 15285, 15291, 15296, 15302, 15306, 15311, + 15317, 15323, 15329, 15334, 15340, 15346, 15352, 15357, 15363, 0, 0, 0, + 0, 15367, 15373, 15378, 15384, 15389, 15397, 15405, 15409, 15413, 15417, + 15423, 15429, 15435, 15441, 15445, 15449, 15453, 15457, 15461, 15464, + 15467, 15470, 15473, 15476, 15479, 15482, 15485, 15488, 15492, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15496, 15500, 0, 15506, 0, 0, 15512, 15516, + 0, 15520, 0, 0, 15526, 0, 0, 0, 0, 0, 0, 15530, 15534, 15537, 15543, 0, + 15549, 15553, 15557, 15561, 15567, 15573, 15579, 0, 15585, 15589, 15593, + 0, 15599, 0, 15605, 0, 0, 15609, 15615, 0, 15621, 15624, 15630, 15633, + 15637, 15644, 15649, 15654, 15658, 15663, 15668, 15673, 15677, 0, 15682, + 15689, 15695, 0, 0, 15701, 15705, 15710, 15714, 15719, 0, 15724, 0, + 15729, 15735, 15741, 15747, 15753, 15757, 0, 0, 15760, 15764, 15767, + 15770, 15773, 15776, 15779, 15782, 15785, 15788, 0, 0, 15791, 15796, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 15801, 15805, 15816, 15831, 15846, 15856, + 15867, 15880, 15891, 15897, 15905, 15915, 15921, 15929, 15933, 15939, + 15945, 15953, 15963, 15971, 15984, 15990, 15998, 16006, 16018, 16025, + 16033, 16041, 16049, 16057, 16065, 16073, 16083, 16087, 16090, 16093, + 16096, 16099, 16102, 16105, 16108, 16111, 16114, 16118, 16122, 16126, + 16130, 16134, 16138, 16142, 16146, 16150, 16155, 16161, 16171, 16185, + 16195, 16201, 16207, 16215, 16223, 16231, 16239, 16245, 16251, 16254, + 16258, 16262, 16266, 16270, 16274, 16278, 0, 16282, 16286, 16290, 16294, + 16298, 16302, 16306, 16310, 16314, 16318, 16322, 16326, 16329, 16333, + 16337, 16341, 16344, 16348, 16352, 16356, 16360, 16364, 16368, 16372, + 16376, 16379, 16382, 16386, 16390, 16394, 16398, 16401, 16404, 16408, + 16413, 16417, 0, 0, 0, 0, 16421, 16426, 16430, 16435, 16439, 16444, + 16449, 16455, 16460, 16466, 16470, 16475, 16479, 16484, 16494, 16500, + 16505, 16511, 16521, 16527, 16531, 16535, 16541, 16547, 16555, 16561, + 16569, 0, 0, 0, 0, 16577, 16582, 16588, 16594, 16600, 16606, 16612, + 16618, 0, 16624, 16630, 16636, 16642, 16648, 16654, 16660, 16666, 16672, + 16678, 16684, 16690, 16695, 16701, 16707, 16713, 16718, 16724, 16730, + 16736, 16742, 16748, 16754, 16760, 16766, 16771, 16776, 16782, 16788, + 16794, 16800, 16805, 16810, 16816, 16824, 16831, 0, 16838, 16845, 16858, + 16865, 16872, 16880, 16888, 16894, 16900, 16906, 16916, 16921, 16927, + 16937, 16947, 0, 16957, 16967, 16975, 16987, 16999, 17005, 17019, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17034, 17037, 17041, + 17045, 17049, 17053, 17057, 17061, 17065, 17069, 17073, 17077, 17081, + 17085, 17089, 17093, 17097, 17101, 17105, 17109, 17113, 17117, 17120, + 17124, 17128, 17132, 17135, 17138, 17141, 17145, 17149, 17153, 17156, + 17160, 17163, 17168, 17171, 17175, 17178, 17182, 17185, 17190, 17193, + 17197, 17204, 17209, 17213, 17218, 17222, 17227, 17231, 17236, 17243, + 17249, 17254, 17258, 17262, 17266, 17270, 17274, 17280, 17286, 17293, + 17299, 17305, 17309, 17312, 17315, 17318, 17321, 17324, 17327, 17330, + 17333, 17336, 17342, 17346, 17350, 17354, 17358, 17362, 17366, 17370, + 17374, 17379, 17383, 17388, 17393, 17399, 17404, 17410, 17416, 17422, + 17428, 17434, 17443, 17451, 17460, 17468, 17477, 17486, 17497, 17507, + 17517, 17528, 17539, 17549, 17559, 17569, 17579, 17589, 17599, 17609, + 17619, 17627, 17634, 17640, 17647, 17652, 17658, 17664, 17670, 17676, + 17682, 17688, 17694, 17700, 17706, 17712, 17718, 17723, 17732, 17739, + 17745, 17752, 17760, 17766, 17772, 17778, 17784, 17792, 17800, 17810, + 17818, 17826, 17832, 17837, 17842, 17847, 17852, 17857, 17862, 17867, + 17872, 0, 0, 0, 0, 17877, 17882, 17888, 17893, 17898, 17903, 17908, + 17913, 17918, 17923, 17928, 17933, 17938, 17943, 17948, 17953, 17958, + 17963, 17968, 17973, 17978, 17983, 17988, 17993, 17998, 18003, 18008, + 18013, 18018, 18023, 18028, 18033, 18038, 18043, 18048, 18053, 18058, + 18063, 18068, 18073, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 18078, 18082, 18086, + 18090, 18094, 18098, 18102, 18106, 18110, 18114, 18118, 18122, 18126, + 18130, 18134, 18138, 18142, 18146, 18150, 18154, 18158, 18162, 18166, + 18170, 18174, 18178, 18182, 18186, 18190, 18194, 18198, 18202, 18206, + 18210, 18214, 18218, 18222, 18226, 18230, 18234, 18238, 18242, 18247, + 18251, 18256, 0, 0, 0, 18261, 18265, 18269, 18273, 18277, 18281, 18285, + 18289, 18293, 18297, 18301, 18305, 18309, 18313, 18317, 18321, 18325, + 18329, 18333, 18337, 18341, 18345, 18349, 18353, 18357, 18361, 18365, + 18369, 18373, 18377, 18381, 18385, 18389, 18393, 18397, 18401, 18405, + 18409, 18413, 18417, 18421, 18425, 18429, 18433, 18437, 18441, 18445, + 18449, 18453, 18457, 18461, 18465, 18469, 18473, 18477, 18481, 18485, + 18489, 18493, 18497, 18501, 18505, 18509, 18513, 18517, 18521, 18525, + 18529, 18533, 18537, 18541, 18545, 18549, 18553, 18557, 18561, 18565, + 18569, 18573, 18577, 18581, 18585, 18589, 18593, 18597, 18601, 18605, + 18609, 18613, 18617, 0, 0, 0, 0, 0, 18621, 18625, 18629, 18632, 18636, + 18639, 18643, 18647, 18650, 18654, 18658, 18661, 18665, 18669, 18673, + 18677, 18680, 18684, 18688, 18692, 18696, 18700, 18704, 18707, 18711, + 18715, 18719, 18723, 18727, 18731, 18735, 18739, 18743, 18747, 18751, + 18755, 18759, 18763, 18767, 18771, 18775, 18779, 18783, 18787, 18791, + 18795, 18799, 18803, 18807, 18811, 18815, 18819, 18823, 18827, 18831, + 18835, 18839, 18843, 18847, 18851, 18855, 18859, 18863, 18867, 18871, + 18875, 18879, 18883, 0, 0, 0, 0, 0, 18887, 18891, 18895, 18899, 18903, + 18907, 18911, 18915, 18919, 18923, 18927, 18931, 18935, 18939, 18943, + 18947, 18951, 18955, 18959, 18963, 18967, 18971, 18975, 18979, 18983, + 18987, 18991, 18995, 18999, 19003, 19007, 19011, 19015, 19019, 19023, + 19027, 19031, 19035, 19039, 19043, 19047, 19051, 19055, 19059, 19063, + 19067, 19071, 19075, 19079, 19083, 19087, 19091, 19095, 19099, 19103, + 19107, 19111, 19115, 19119, 19123, 19127, 19131, 19135, 19139, 19143, + 19147, 19151, 19155, 19159, 19163, 19167, 19171, 19175, 19179, 19183, + 19187, 19191, 19195, 19199, 19203, 19207, 19211, 0, 0, 0, 0, 0, 0, 19215, + 19218, 19222, 19226, 19230, 19234, 19238, 19242, 19246, 19250, 19254, 19258, 19262, 19266, 19270, 19274, 19278, 19282, 19286, 19290, 19294, - 19298, 19302, 19306, 19310, 19314, 19318, 19322, 19326, 19330, 19334, - 19338, 19342, 19346, 19350, 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, 19522, 19526, 19530, 19534, - 19538, 19542, 19546, 19550, 19554, 19558, 19562, 19566, 19570, 19574, - 19578, 19582, 19586, 19590, 19594, 19598, 19602, 19606, 19610, 19614, - 19618, 19622, 19626, 19630, 19634, 19638, 19642, 19646, 19650, 19654, - 19658, 19662, 19666, 19670, 19674, 19678, 19682, 19686, 19690, 19694, - 19698, 19702, 19706, 19710, 19714, 19718, 19722, 19726, 19730, 19734, - 19738, 19742, 19746, 19750, 19754, 19758, 19762, 19766, 19770, 19774, - 19778, 19782, 19786, 19790, 19794, 19798, 19801, 19805, 19809, 19813, - 19817, 19821, 19825, 19829, 19833, 19837, 19841, 19845, 19849, 19853, - 19857, 19861, 19865, 19869, 19873, 19877, 19881, 19885, 19889, 19893, - 19896, 19900, 19904, 19908, 19912, 19916, 19920, 19924, 19928, 19932, - 19936, 19940, 19944, 19948, 19952, 19956, 19959, 19963, 19967, 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, 0, 20087, 20091, - 20095, 20099, 0, 0, 20103, 20107, 20111, 20115, 20119, 20123, 20127, 0, - 20131, 0, 20135, 20139, 20143, 20147, 0, 0, 20151, 20155, 20159, 20163, - 20167, 20171, 20175, 20179, 20183, 20187, 20191, 20195, 20199, 20203, - 20207, 20211, 20215, 20219, 20223, 20227, 20231, 20235, 20239, 20242, - 20246, 20250, 20254, 20258, 20262, 20266, 20270, 20274, 20278, 20282, - 20286, 20290, 20294, 20298, 20302, 20306, 20310, 0, 20314, 20318, 20322, - 20326, 0, 0, 20330, 20333, 20337, 20341, 20345, 20349, 20353, 20357, - 20361, 20365, 20369, 20373, 20377, 20381, 20385, 20389, 20393, 20398, - 20403, 20408, 20414, 20420, 20425, 20430, 20436, 20439, 20443, 20447, - 20451, 20455, 20459, 20463, 20467, 0, 20471, 20475, 20479, 20483, 0, 0, - 20487, 20491, 20495, 20499, 20503, 20507, 20511, 0, 20515, 0, 20519, - 20523, 20527, 20531, 0, 0, 20535, 20539, 20543, 20547, 20551, 20555, - 20559, 20563, 20567, 20572, 20577, 20582, 20588, 20594, 20599, 0, 20604, - 20608, 20612, 20616, 20620, 20624, 20628, 20632, 20636, 20640, 20644, - 20648, 20652, 20656, 20660, 20664, 20668, 20671, 20675, 20679, 20683, - 20687, 20691, 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, 0, 20831, 20835, 20839, 20843, - 0, 0, 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, 21074, 21078, - 21082, 21086, 21090, 21094, 21098, 21102, 21106, 21110, 0, 0, 0, 0, - 21114, 21119, 21123, 21126, 21131, 21134, 21137, 21140, 21145, 21149, - 21154, 21157, 21160, 21163, 21166, 21169, 21172, 21175, 21178, 21181, - 21185, 21189, 21193, 21197, 21201, 21205, 21209, 21213, 21217, 21221, 0, - 0, 0, 21227, 21233, 21237, 21241, 21245, 21251, 21255, 21259, 21263, - 21269, 21273, 21277, 21281, 21287, 21291, 21295, 21299, 21305, 21311, - 21317, 21325, 21331, 21337, 21343, 21349, 21355, 0, 0, 0, 0, 0, 0, 21361, - 21364, 21367, 21370, 21373, 21376, 21380, 21384, 21387, 21391, 21395, - 21399, 21403, 21407, 21410, 21414, 21418, 21422, 21426, 21430, 21434, - 21438, 21442, 21446, 21450, 21454, 21457, 21461, 21465, 21469, 21473, - 21476, 21480, 21484, 21488, 21492, 21496, 21500, 21504, 21508, 21512, - 21516, 21520, 21524, 21528, 21532, 21535, 21539, 21543, 21547, 21551, - 21555, 21559, 21563, 21567, 21571, 21575, 21579, 21583, 21587, 21591, - 21595, 21599, 21603, 21607, 21611, 21615, 21619, 21623, 21627, 21631, - 21635, 21639, 21643, 21647, 21651, 21655, 21659, 21663, 21667, 21670, - 21674, 21678, 21682, 21686, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 21690, - 21694, 21697, 21701, 21704, 21708, 21711, 21715, 21721, 21726, 21730, - 21733, 21737, 21741, 21746, 21750, 21755, 21759, 21764, 21768, 21773, - 21777, 21782, 21788, 21792, 21797, 21801, 21806, 21812, 21816, 21822, - 21828, 21832, 21837, 21845, 21853, 21860, 21865, 21870, 21879, 21886, - 21893, 21898, 21904, 21908, 21912, 21916, 21920, 21924, 21928, 21932, - 21936, 21940, 21944, 21950, 21955, 21960, 21963, 21967, 21971, 21976, - 21980, 21985, 21989, 21994, 21998, 22003, 22007, 22012, 22016, 22021, - 22025, 22030, 22036, 22040, 22045, 22050, 22054, 22058, 22062, 22066, - 22069, 22073, 22079, 22084, 22089, 22093, 22097, 22101, 22106, 22110, - 22115, 22119, 22124, 22127, 22131, 22135, 22140, 22144, 22149, 22153, - 22158, 22164, 22168, 22172, 22176, 22180, 22184, 22188, 22192, 22196, - 22200, 22204, 22208, 22214, 22217, 22221, 22225, 22230, 22234, 22239, - 22243, 22248, 22252, 22257, 22261, 22266, 22270, 22275, 22279, 22284, - 22290, 22294, 22298, 22304, 22310, 22316, 22322, 22326, 22330, 22334, - 22338, 22342, 22346, 22352, 22356, 22360, 22364, 22369, 22373, 22378, - 22382, 22387, 22391, 22396, 22400, 22405, 22409, 22414, 22418, 22423, - 22429, 22433, 22439, 22443, 22447, 22451, 22455, 22459, 22463, 22469, - 22472, 22476, 22480, 22485, 22489, 22494, 22498, 22503, 22507, 22512, - 22516, 22521, 22525, 22530, 22534, 22539, 22545, 22548, 22552, 22556, - 22561, 22566, 22570, 22574, 22578, 22582, 22586, 22590, 22596, 22599, - 22603, 22607, 22612, 22616, 22621, 22625, 22630, 22636, 22639, 22644, - 22648, 22652, 22656, 22660, 22664, 22668, 22672, 22678, 22682, 22686, - 22690, 22695, 22699, 22704, 22708, 22713, 22717, 22722, 22726, 22731, - 22735, 22740, 22744, 22749, 22752, 22756, 22760, 22764, 22768, 22772, - 22776, 22780, 22784, 22790, 22794, 22798, 22802, 22807, 22811, 22816, - 22820, 22825, 22829, 22834, 22838, 22843, 22847, 22852, 22856, 22861, - 22867, 22870, 22875, 22879, 22884, 22890, 22896, 22902, 22908, 22914, - 22920, 22926, 22930, 22934, 22938, 22942, 22946, 22950, 22954, 22958, - 22963, 22967, 22972, 22976, 22981, 22985, 22990, 22994, 22999, 23003, - 23008, 23012, 23017, 23021, 23025, 23029, 23033, 23037, 23041, 23045, - 23051, 23054, 23058, 23062, 23067, 23071, 23076, 23080, 23085, 23089, - 23094, 23098, 23103, 23107, 23112, 23116, 23121, 23127, 23131, 23137, - 23142, 23148, 23152, 23158, 23163, 23167, 23171, 23175, 23179, 23183, - 23188, 23191, 23195, 23200, 23204, 23209, 23212, 23216, 23220, 23224, - 23228, 23232, 23236, 23240, 23244, 23248, 23252, 23256, 23261, 23265, - 23269, 23275, 23279, 23285, 23289, 23295, 23299, 23303, 23307, 23311, - 23315, 23320, 23324, 23328, 23332, 23336, 23340, 23344, 23348, 23352, - 23356, 23360, 23366, 23372, 23378, 23384, 23390, 23395, 23401, 23407, - 23413, 23417, 23421, 23425, 23429, 23433, 23437, 23441, 23445, 23449, - 23453, 23457, 23461, 23465, 23470, 23475, 23480, 23484, 23488, 23492, - 23496, 23500, 23504, 23508, 23512, 23516, 23520, 23526, 23532, 23538, - 23544, 23550, 23556, 23562, 23568, 23574, 23578, 23582, 23586, 23590, - 23594, 23598, 23602, 23608, 23614, 23620, 23626, 23632, 23638, 23644, - 23650, 23656, 23661, 23666, 23671, 23676, 23682, 23688, 23694, 23700, - 23706, 23712, 23718, 23723, 23729, 23735, 23741, 23746, 23752, 23758, - 23764, 23769, 23774, 23779, 23784, 23789, 23794, 23799, 23804, 23809, - 23814, 23819, 23824, 23828, 23833, 23838, 23843, 23848, 23853, 23858, - 23863, 23868, 23873, 23878, 23883, 23888, 23893, 23898, 23903, 23908, - 23913, 23918, 23923, 23928, 23933, 23938, 23943, 23948, 23953, 23958, - 23963, 23968, 23973, 23977, 23982, 23987, 23992, 23997, 24002, 24007, - 24012, 24017, 24022, 24027, 24032, 24037, 24042, 24047, 24052, 24057, - 24062, 24067, 24072, 24077, 24082, 24087, 24092, 24097, 24102, 24106, - 24111, 24116, 24121, 24126, 24131, 24135, 24140, 24145, 24150, 24155, - 24160, 24164, 24169, 24175, 24180, 24185, 24190, 24195, 24201, 24206, - 24211, 24216, 24221, 24226, 24231, 24236, 24241, 24246, 24251, 24256, - 24261, 24266, 24271, 24276, 24281, 24286, 24291, 24296, 24301, 24306, - 24311, 24316, 24321, 24326, 24331, 24336, 24341, 24346, 24351, 24356, - 24361, 24366, 24371, 24376, 24381, 24386, 24391, 24396, 24401, 24406, - 24411, 24416, 24421, 24427, 24432, 24437, 24442, 24447, 24452, 24457, - 24462, 24467, 24472, 24477, 24482, 24487, 24492, 24497, 24502, 24507, - 24512, 24517, 24522, 24527, 24532, 24537, 24542, 24547, 24552, 24557, - 24562, 24567, 24572, 24577, 24582, 24587, 24592, 24597, 24602, 24607, - 24612, 24617, 24623, 24627, 24631, 24635, 24639, 24643, 24647, 24651, - 24655, 24661, 24667, 24673, 24679, 24685, 24691, 24697, 24704, 24710, - 24715, 24720, 24725, 24730, 24735, 24740, 24745, 24750, 24755, 24760, - 24765, 24770, 24775, 24780, 24785, 24790, 24795, 24800, 24805, 24810, - 24815, 24820, 24825, 24830, 24835, 24840, 24845, 24850, 0, 0, 0, 24856, - 24866, 24870, 24877, 24881, 24885, 24889, 24897, 24901, 24906, 24911, - 24916, 24920, 24925, 24930, 24933, 24937, 24941, 24950, 24954, 24958, - 24964, 24968, 24972, 24980, 24984, 24992, 24998, 25004, 25010, 25016, - 25025, 25030, 25034, 25043, 25046, 25052, 25056, 25062, 25067, 25073, - 25081, 25087, 25092, 25099, 25104, 25108, 25112, 25122, 25128, 25132, - 25142, 25148, 25152, 25156, 25163, 25170, 25175, 25180, 25189, 25193, - 25197, 25201, 25209, 25216, 25220, 25224, 25228, 25232, 25236, 25240, - 25244, 25248, 25252, 25256, 25260, 25265, 25270, 25275, 25279, 25283, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 25287, 25291, 25295, 25299, - 25303, 25308, 25313, 25318, 25323, 25327, 25331, 25336, 25340, 0, 25344, - 25349, 25354, 25359, 25363, 25368, 25373, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 25378, 25382, 25386, 25390, 25394, 25399, 25404, 25409, 25414, 25418, - 25422, 25427, 25431, 25435, 25439, 25444, 25449, 25454, 25458, 25463, - 25468, 25473, 25479, 0, 0, 0, 0, 0, 0, 0, 0, 0, 25484, 25488, 25492, - 25496, 25500, 25505, 25510, 25515, 25520, 25524, 25528, 25533, 25537, - 25541, 25545, 25550, 25555, 25560, 25564, 25569, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 25574, 25578, 25582, 25586, 25590, 25595, 25600, 25605, - 25610, 25614, 25618, 25623, 25627, 0, 25631, 25636, 25641, 0, 25646, - 25651, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 25656, 25659, 25663, 25667, - 25671, 25675, 25679, 25683, 25687, 25691, 25695, 25699, 25703, 25707, - 25711, 25715, 25719, 25723, 25726, 25730, 25734, 25738, 25742, 25746, - 25750, 25754, 25758, 25762, 25766, 25770, 25774, 25778, 25782, 25785, - 25789, 25793, 25799, 25805, 25811, 25817, 25823, 25829, 25835, 25841, - 25847, 25853, 25859, 25865, 25871, 25877, 25886, 25895, 25901, 25907, - 25913, 25918, 25922, 25927, 25932, 25937, 25941, 25946, 25951, 25956, - 25960, 25965, 25969, 25974, 25979, 25984, 25989, 25993, 25997, 26001, - 26005, 26009, 26013, 26017, 26021, 26025, 26029, 26035, 26039, 26043, - 26047, 26051, 26055, 26063, 26069, 26073, 26079, 26083, 26089, 26093, 0, - 0, 26097, 26101, 26104, 26107, 26110, 26113, 26116, 26119, 26122, 26125, - 0, 0, 0, 0, 0, 0, 26128, 26136, 26144, 26152, 26160, 26168, 26176, 26184, - 26192, 26200, 0, 0, 0, 0, 0, 0, 26208, 26211, 26214, 26217, 26222, 26225, - 26230, 26237, 26245, 26250, 26257, 26260, 26267, 26274, 26281, 0, 26285, - 26289, 26292, 26295, 26298, 26301, 26304, 26307, 26310, 26313, 0, 0, 0, - 0, 0, 0, 26316, 26319, 26322, 26325, 26328, 26331, 26335, 26339, 26343, - 26346, 26350, 26354, 26357, 26361, 26365, 26368, 26372, 26376, 26380, - 26384, 26388, 26392, 26396, 26399, 26402, 26406, 26410, 26413, 26417, - 26421, 26425, 26429, 26433, 26437, 26441, 26445, 26452, 26457, 26462, - 26467, 26472, 26478, 26484, 26490, 26496, 26501, 26507, 26513, 26518, - 26524, 26530, 26536, 26542, 26548, 26553, 26559, 26564, 26570, 26576, - 26582, 26588, 26594, 26599, 26604, 26610, 26616, 26621, 26627, 26632, - 26638, 26643, 26648, 26654, 26660, 26666, 26672, 26678, 26684, 26690, - 26696, 26702, 26708, 26714, 26720, 26725, 26730, 26735, 26741, 0, 0, 0, - 0, 0, 0, 0, 0, 26747, 26756, 26765, 26773, 26781, 26791, 26799, 26808, - 26815, 26822, 26829, 26837, 26845, 26853, 26861, 26869, 26877, 26885, - 26893, 26900, 26908, 26916, 26924, 26932, 26940, 26950, 26960, 26970, - 26980, 26990, 27000, 27010, 27020, 27030, 27040, 27050, 27060, 27070, - 27080, 27088, 27096, 27106, 27114, 0, 0, 0, 0, 0, 27124, 27128, 27132, - 27136, 27140, 27144, 27148, 27152, 27156, 27160, 27164, 27168, 27172, - 27176, 27180, 27184, 27188, 27192, 27196, 27200, 27204, 27208, 27212, - 27216, 27222, 27226, 27232, 27236, 27242, 27246, 27252, 27256, 27260, - 27264, 27268, 27272, 27276, 27282, 27288, 27294, 27300, 27305, 27310, - 27315, 27321, 27327, 27333, 27339, 27346, 27352, 27357, 27362, 27366, - 27370, 27374, 27378, 27382, 27386, 27390, 27396, 27402, 27408, 27413, - 27420, 27425, 27430, 27436, 27441, 27448, 27455, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 27461, 27466, 27469, 27473, 27477, 27481, 27485, 27489, 27493, - 27497, 27501, 27505, 27509, 27513, 27517, 27521, 27524, 27527, 27531, - 27535, 27539, 27542, 27545, 27548, 27552, 27556, 27560, 27564, 27568, 0, - 0, 0, 27571, 27575, 27579, 27583, 27588, 27593, 27598, 27603, 27607, - 27611, 27616, 27621, 0, 0, 0, 0, 27627, 27631, 27636, 27641, 27646, - 27650, 27654, 27658, 27662, 27667, 27671, 27675, 0, 0, 0, 0, 27679, 0, 0, - 0, 27683, 27687, 27691, 27695, 27698, 27701, 27704, 27707, 27710, 27713, - 27716, 27719, 27722, 27727, 27733, 27739, 27745, 27751, 27756, 27762, - 27768, 27774, 27779, 27785, 27790, 27796, 27802, 27807, 27813, 27819, - 27825, 27830, 27835, 27840, 27846, 27852, 27857, 27863, 27868, 27874, - 27879, 27885, 0, 0, 27891, 27897, 27903, 27909, 27915, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 27921, 27928, 27935, 27941, 27948, 27955, 27961, 27968, - 27975, 27982, 27989, 27995, 28002, 28009, 28015, 28022, 28029, 28035, - 28042, 28049, 28055, 28061, 28068, 28074, 28080, 28087, 28093, 28100, - 28107, 28114, 28121, 28128, 28135, 28141, 28148, 28155, 28161, 28168, - 28175, 28182, 28189, 28196, 28203, 28210, 0, 0, 0, 0, 28217, 28225, - 28232, 28239, 28245, 28252, 28258, 28265, 28271, 28278, 28285, 28292, - 28299, 28306, 28313, 28320, 28327, 28334, 28341, 28348, 28354, 28360, - 28367, 28374, 28381, 28387, 0, 0, 0, 0, 0, 0, 28393, 28399, 28404, 28409, - 28414, 28419, 28424, 28429, 28434, 28439, 28444, 0, 0, 0, 28450, 28456, - 28462, 28466, 28472, 28478, 28484, 28490, 28496, 28502, 28508, 28514, - 28520, 28526, 28532, 28538, 28544, 28550, 28556, 28560, 28566, 28572, - 28578, 28584, 28590, 28596, 28602, 28608, 28614, 28620, 28626, 28632, - 28638, 28644, 28650, 28654, 28659, 28664, 28669, 28673, 28678, 28682, - 28687, 28692, 28697, 28701, 28706, 28711, 28716, 28721, 28726, 28730, - 28734, 28739, 28744, 28749, 28753, 28757, 28762, 28767, 28772, 28777, 0, - 0, 28783, 28787, 28794, 28799, 28805, 28811, 28816, 28822, 28828, 28833, - 28839, 28845, 28851, 28857, 28863, 28868, 28873, 28879, 28884, 28890, - 28895, 28901, 28907, 28913, 28919, 28923, 28928, 28933, 28939, 28945, - 28950, 28956, 28962, 28966, 28971, 28976, 28980, 28985, 28990, 28995, - 29000, 29006, 29012, 29018, 29023, 29028, 29032, 29037, 29041, 29046, - 29050, 29055, 29060, 29065, 29070, 29077, 29084, 29092, 29103, 29112, - 29120, 29127, 29138, 29144, 29151, 0, 29158, 29163, 29168, 29176, 29182, - 29190, 29195, 29201, 29207, 29213, 29218, 29224, 29229, 29236, 29242, - 29247, 29253, 29259, 29265, 29272, 29279, 29286, 29291, 29296, 29303, - 29310, 29317, 29324, 29331, 0, 0, 29338, 29345, 29352, 29358, 29364, - 29370, 29376, 29382, 29388, 29394, 29400, 0, 0, 0, 0, 0, 0, 29406, 29412, - 29417, 29422, 29427, 29432, 29437, 29442, 29447, 29452, 0, 0, 0, 0, 0, 0, - 29457, 29462, 29467, 29472, 29477, 29482, 29487, 29495, 29502, 29507, - 29512, 29517, 29522, 29527, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 29532, 29538, - 29544, 29548, 29552, 29556, 29560, 29566, 29570, 29576, 29580, 29586, - 29592, 29600, 29606, 29614, 29618, 29622, 29626, 29632, 29635, 29640, - 29644, 29650, 29654, 29658, 29664, 29668, 29674, 29678, 29684, 29692, - 29700, 29708, 29714, 29718, 29724, 29728, 29734, 29737, 29740, 29746, - 29750, 29756, 29759, 29762, 29765, 29769, 29773, 29779, 29785, 29789, - 29792, 29796, 29801, 29806, 29813, 29818, 29825, 29832, 29841, 29848, - 29857, 29862, 29869, 29876, 29885, 29890, 29897, 29902, 29908, 29914, - 29920, 29926, 29932, 29938, 0, 0, 0, 0, 29944, 29948, 29951, 29954, - 29957, 29960, 29963, 29966, 29969, 29972, 29975, 29978, 29981, 29984, - 29989, 29994, 29999, 30002, 30007, 30012, 30017, 30022, 30029, 30034, - 30039, 30044, 30049, 30056, 30062, 30068, 30074, 30080, 30086, 30095, - 30104, 30110, 30116, 30125, 30134, 30143, 30152, 30161, 30170, 30179, - 30188, 0, 0, 0, 30197, 30202, 30207, 30212, 30216, 30220, 30224, 30229, - 30233, 30237, 30242, 30246, 30251, 30256, 30261, 30266, 30271, 30276, - 30281, 30286, 30291, 30295, 30299, 30304, 30309, 30314, 30318, 30322, - 30326, 30331, 30336, 30341, 30346, 30350, 30357, 30364, 30371, 30377, - 30383, 30389, 30395, 30401, 30407, 0, 0, 0, 30412, 30417, 30422, 30427, - 30431, 30435, 30439, 30443, 30447, 30451, 30455, 30459, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 30463, 30466, 30470, - 30474, 30478, 30482, 30486, 30490, 30494, 30498, 30502, 30506, 30510, - 30514, 30517, 30520, 30524, 30528, 30532, 30536, 30540, 30544, 30547, - 30551, 30555, 30559, 30563, 30566, 30569, 30573, 30576, 30580, 30584, - 30588, 30592, 30596, 30599, 30604, 30609, 30614, 30618, 30622, 30627, - 30631, 30636, 30640, 30646, 30651, 30656, 30661, 30667, 30672, 30678, - 30684, 30690, 30694, 0, 0, 0, 30698, 30703, 30712, 30717, 30724, 30729, - 30733, 30736, 30739, 30742, 30745, 30748, 30751, 30754, 30757, 0, 0, 0, - 30760, 30764, 30768, 30772, 30779, 30785, 30791, 30797, 30803, 30809, - 30815, 30821, 30827, 30833, 30840, 30847, 30854, 30861, 30868, 30875, - 30882, 30889, 30896, 30903, 30910, 30917, 30924, 30931, 30938, 30945, - 30952, 30959, 30966, 30973, 30980, 30987, 30994, 31001, 31008, 31015, - 31022, 31029, 31036, 31043, 31051, 31059, 31067, 31073, 31079, 31085, - 31093, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 31102, 31107, 31112, 31117, 31122, 31131, - 31142, 31151, 31162, 31168, 31181, 31187, 31194, 31201, 31206, 31212, - 31218, 31229, 31238, 31245, 31252, 31260, 31267, 31275, 31285, 31295, - 31302, 31309, 31316, 31326, 31331, 31339, 31345, 31353, 31362, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 31367, 31372, 31378, 31384, 31392, 31398, - 31404, 31410, 31415, 31422, 31427, 31433, 31439, 31447, 31452, 31458, - 31463, 31470, 31476, 31484, 31492, 31498, 31504, 31511, 31518, 31524, - 31530, 31536, 31542, 31547, 31553, 31561, 31568, 31574, 31580, 31586, - 31592, 31600, 31604, 31610, 31616, 31622, 31628, 31634, 31640, 31644, - 31649, 31654, 31661, 31666, 31670, 31675, 31680, 31685, 31689, 31694, - 31699, 31703, 31707, 31711, 31716, 31720, 31725, 31730, 31734, 31739, - 31743, 31748, 31752, 31757, 31762, 31768, 31773, 31778, 31782, 31787, - 31793, 31800, 31805, 31810, 31815, 31819, 31824, 31828, 31834, 31841, - 31848, 31853, 31858, 31862, 31868, 31873, 31878, 31883, 31888, 31894, - 31899, 31905, 31910, 31916, 31922, 31928, 31935, 31942, 31949, 31956, - 31963, 31970, 31975, 31984, 31994, 32004, 32014, 32024, 32034, 32044, - 32057, 32067, 32077, 32087, 32093, 32098, 32105, 32113, 32121, 32128, - 32135, 32142, 32149, 32157, 32166, 32175, 32184, 32193, 32202, 32211, - 32220, 32229, 32238, 32247, 32256, 32265, 32274, 32283, 32291, 32300, - 32311, 32319, 32329, 32340, 32349, 32358, 32368, 32377, 32385, 32394, - 32400, 32405, 32413, 32418, 32425, 32430, 32439, 32445, 32451, 32458, - 32463, 32468, 32476, 32484, 32493, 32502, 32507, 32514, 32524, 32532, - 32541, 32546, 32552, 32557, 32564, 32569, 32578, 32583, 32588, 32593, - 32600, 32606, 32611, 32620, 32628, 32633, 32638, 32645, 32652, 32656, - 32660, 32663, 32666, 32669, 32672, 32675, 32678, 32685, 32688, 32691, - 32696, 32700, 32704, 32708, 32712, 32716, 32726, 32732, 32738, 32744, - 32752, 32760, 32766, 32772, 32779, 32785, 32790, 32796, 32802, 32807, - 32813, 32819, 32827, 32832, 32838, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 32844, 32850, 32855, 32864, 32872, 32880, - 32887, 32894, 32901, 32908, 32916, 32924, 32934, 32944, 32952, 32960, - 32968, 32976, 32985, 32994, 33002, 33010, 33019, 33028, 33038, 33048, - 33057, 33066, 33074, 33082, 33090, 33098, 33108, 33118, 33126, 33134, - 33142, 33150, 33158, 33166, 33174, 33182, 33190, 33198, 33206, 33214, - 33223, 33232, 33241, 33250, 33260, 33270, 33277, 33284, 33292, 33300, - 33309, 33318, 33326, 33334, 33346, 33358, 33367, 33376, 33385, 33394, - 33401, 33408, 33416, 33424, 33432, 33440, 33448, 33456, 33464, 33472, - 33481, 33490, 33499, 33508, 33517, 33526, 33536, 33546, 33556, 33566, - 33575, 33584, 33591, 33598, 33606, 33614, 33622, 33630, 33638, 33646, - 33658, 33670, 33679, 33688, 33696, 33704, 33712, 33720, 33731, 33742, - 33753, 33764, 33776, 33788, 33796, 33804, 33812, 33820, 33829, 33838, - 33847, 33856, 33864, 33872, 33880, 33888, 33896, 33904, 33913, 33922, - 33932, 33942, 33950, 33958, 33966, 33974, 33982, 33990, 33997, 34004, - 34012, 34020, 34028, 34036, 34044, 34052, 34060, 34068, 34076, 34084, - 34092, 34100, 34108, 34116, 34124, 34132, 34141, 34150, 34159, 34167, - 34176, 34185, 34194, 34203, 34213, 34222, 34228, 34233, 34240, 34247, - 34255, 34263, 34272, 34281, 34291, 34301, 34312, 34323, 34333, 34343, - 34353, 34363, 34372, 34381, 34391, 34401, 34412, 34423, 34433, 34443, - 34453, 34463, 34470, 34477, 34485, 34493, 34500, 34507, 34516, 34525, - 34535, 34545, 34556, 34567, 34577, 34587, 34597, 34607, 34616, 34625, - 34633, 34641, 34648, 34655, 34663, 34671, 34680, 34689, 34699, 34709, - 34720, 34731, 34741, 34751, 34761, 34771, 34780, 34789, 34799, 34809, - 34820, 34831, 34841, 34851, 34861, 34871, 34878, 34885, 34893, 34901, - 34910, 34919, 34929, 34939, 34950, 34961, 34971, 34981, 34991, 35001, - 35009, 35017, 35025, 35033, 35042, 35051, 35059, 35067, 35074, 35081, - 35088, 35095, 35103, 35111, 35119, 35127, 35137, 35147, 35157, 35167, - 35177, 35187, 35195, 35203, 35213, 35223, 35233, 35243, 35253, 35263, - 35271, 35279, 35289, 35299, 35309, 0, 0, 35319, 35327, 35335, 35345, - 35355, 35365, 0, 0, 35375, 35383, 35391, 35401, 35411, 35421, 35431, - 35441, 35451, 35459, 35467, 35477, 35487, 35497, 35507, 35517, 35527, - 35535, 35543, 35553, 35563, 35573, 35583, 35593, 35603, 35611, 35619, - 35629, 35639, 35649, 35659, 35669, 35679, 35687, 35695, 35705, 35715, - 35725, 0, 0, 35735, 35743, 35751, 35761, 35771, 35781, 0, 0, 35791, - 35799, 35807, 35817, 35827, 35837, 35847, 35857, 0, 35867, 0, 35875, 0, - 35885, 0, 35895, 35905, 35913, 35921, 35931, 35941, 35951, 35961, 35971, - 35981, 35989, 35997, 36007, 36017, 36027, 36037, 36047, 36057, 36065, - 36073, 36081, 36089, 36097, 36105, 36113, 36121, 36129, 36137, 36145, - 36153, 36161, 0, 0, 36169, 36179, 36189, 36202, 36215, 36228, 36241, - 36254, 36267, 36277, 36287, 36300, 36313, 36326, 36339, 36352, 36365, - 36375, 36385, 36398, 36411, 36424, 36437, 36450, 36463, 36473, 36483, - 36496, 36509, 36522, 36535, 36548, 36561, 36571, 36581, 36594, 36607, - 36620, 36633, 36646, 36659, 36669, 36679, 36692, 36705, 36718, 36731, - 36744, 36757, 36765, 36773, 36784, 36792, 0, 36803, 36811, 36822, 36830, - 36838, 36846, 36854, 36862, 36865, 36868, 36871, 36874, 36880, 36891, - 36899, 0, 36910, 36918, 36929, 36937, 36945, 36953, 36961, 36969, 36974, - 36979, 36984, 36992, 37000, 37011, 0, 0, 37022, 37030, 37041, 37049, - 37057, 37065, 0, 37073, 37078, 37083, 37088, 37096, 37104, 37115, 37126, - 37134, 37142, 37150, 37161, 37169, 37177, 37185, 37193, 37201, 37207, - 37213, 0, 0, 37216, 37227, 37235, 0, 37246, 37254, 37265, 37273, 37281, - 37289, 37297, 37305, 37308, 0, 37311, 37315, 37319, 37323, 37327, 37331, - 37335, 37339, 37343, 37347, 37351, 37355, 37361, 37367, 37373, 37376, - 37379, 37381, 37385, 37389, 37393, 37397, 37399, 37403, 37407, 37413, - 37419, 37426, 37433, 37438, 37443, 37449, 37455, 37457, 37460, 37462, - 37466, 37470, 37474, 37477, 37481, 37485, 37489, 37493, 37497, 37503, - 37507, 37511, 37517, 37522, 37529, 37531, 37534, 37538, 37541, 37545, - 37550, 37552, 37561, 37570, 37573, 37577, 37579, 37581, 37583, 37586, - 37592, 37594, 37598, 37602, 37609, 37616, 37620, 37625, 37630, 37635, - 37639, 37643, 37647, 37650, 37653, 37657, 37664, 37669, 37673, 37677, - 37682, 37686, 37690, 37695, 37700, 37704, 37708, 37712, 37714, 37719, - 37724, 37728, 37732, 37736, 37740, 0, 0, 0, 0, 0, 37744, 37750, 37756, - 37763, 37770, 37775, 37780, 37784, 0, 0, 37790, 37793, 37796, 37799, - 37802, 37805, 37808, 37812, 37816, 37821, 37826, 37831, 37837, 37841, - 37844, 37847, 37850, 37853, 37856, 37859, 37862, 37865, 37868, 37872, - 37876, 37881, 37886, 0, 37891, 37897, 37903, 37909, 37916, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 37923, 37926, 37929, 37932, 37937, 37940, 37943, 37946, - 37949, 37952, 37955, 37959, 37962, 37965, 37968, 37971, 37974, 37979, - 37982, 37985, 37988, 37991, 37994, 37999, 38002, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 38005, 38010, 38015, 38022, - 38030, 38035, 38040, 38044, 38048, 38053, 38060, 38067, 38071, 38076, - 38081, 38086, 38091, 38098, 38103, 38108, 38113, 38122, 38129, 38135, - 38139, 38144, 38150, 38155, 38162, 38170, 38178, 38182, 38186, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 38190, 38194, 38201, 38205, 38209, - 38214, 38218, 38222, 38226, 38228, 38232, 38236, 38240, 38245, 38249, - 38253, 38261, 38264, 38268, 38271, 38274, 38280, 38283, 38286, 38292, - 38296, 38300, 38304, 38307, 38311, 38314, 38318, 38320, 38323, 38326, - 38330, 38332, 38336, 38339, 38342, 38347, 38352, 38358, 38361, 38364, - 38368, 38373, 38376, 38379, 38382, 38386, 38390, 38393, 38396, 38398, - 38401, 38404, 38407, 38411, 38416, 38419, 38423, 38427, 38431, 38435, - 38440, 38445, 38449, 38453, 38458, 38463, 38468, 38472, 38476, 38481, - 38485, 38488, 38491, 38493, 38497, 38502, 38509, 38516, 38523, 38530, - 38537, 38544, 38551, 38558, 38566, 38573, 38581, 38588, 38595, 38603, - 38611, 38616, 38621, 38626, 38631, 38636, 38641, 38646, 38651, 38656, - 38661, 38667, 38673, 38679, 38685, 38692, 38700, 38707, 38713, 38719, - 38725, 38731, 38737, 38743, 38749, 38755, 38761, 38768, 38775, 38782, - 38789, 38797, 38806, 38814, 38825, 38833, 38841, 38849, 38855, 38864, - 38873, 38881, 38890, 0, 0, 0, 0, 0, 0, 38898, 38900, 38903, 38905, 38908, - 38911, 38914, 38919, 38924, 38929, 38934, 38938, 38942, 38946, 38950, - 38955, 38961, 38966, 38972, 38977, 38982, 38987, 38993, 38998, 39004, - 39010, 39014, 39018, 39023, 39028, 39033, 39038, 39043, 39051, 39059, - 39067, 39075, 39082, 39090, 39097, 39104, 39112, 39122, 39129, 39136, - 39143, 39150, 39158, 39166, 39173, 39180, 39188, 39196, 39201, 39209, - 39214, 39219, 39225, 39230, 39236, 39243, 39250, 39255, 39261, 39266, - 39269, 39273, 39276, 39280, 39284, 39288, 39294, 39300, 39306, 39312, - 39316, 39320, 39324, 39328, 39334, 39340, 39344, 39349, 39353, 39358, - 39362, 39366, 39369, 39373, 39376, 39380, 39387, 39395, 39406, 39417, - 39422, 39431, 39438, 39446, 39454, 39458, 39464, 39472, 39476, 39481, - 39486, 39492, 39498, 39504, 39511, 39515, 39519, 39524, 39527, 39529, - 39533, 39537, 39544, 39548, 39550, 39552, 39556, 39563, 39568, 39574, - 39583, 39590, 39595, 39599, 39603, 39607, 39610, 39613, 39616, 39620, - 39624, 39628, 39632, 39636, 39639, 39643, 39647, 39650, 39652, 39655, - 39657, 39661, 39665, 39667, 39672, 39675, 39679, 39683, 39687, 39689, - 39691, 39693, 39696, 39700, 39704, 39708, 39712, 39716, 39722, 39728, - 39730, 39732, 39734, 39736, 39739, 39741, 39745, 39747, 39751, 39754, - 39759, 39763, 39767, 39770, 39774, 39778, 39783, 39787, 39796, 39806, - 39810, 39815, 39821, 39825, 39829, 39832, 39837, 39841, 39847, 39851, - 39862, 39870, 39874, 39878, 39884, 39888, 39891, 39893, 39896, 39900, - 39904, 39910, 39914, 39918, 39921, 39924, 39928, 39933, 39938, 39943, - 39948, 39953, 39960, 39967, 39971, 39975, 39977, 39981, 39984, 39987, - 39995, 40003, 40009, 40015, 40024, 40033, 40038, 40043, 40051, 40059, - 40061, 40063, 40068, 40073, 40079, 40085, 40090, 40095, 40099, 40103, - 40109, 40115, 40121, 40127, 40137, 40147, 40154, 40161, 40163, 40167, - 40171, 40176, 40181, 40188, 40195, 40198, 40201, 40204, 40207, 40210, - 40215, 40219, 40224, 40229, 40232, 40235, 40238, 40241, 40244, 40248, - 40251, 40254, 40257, 40260, 40262, 40264, 40266, 40268, 40276, 40284, - 40289, 40292, 40297, 40307, 40313, 40319, 40325, 40333, 40341, 40352, - 40356, 40360, 40362, 40368, 40370, 40372, 40374, 40376, 40382, 40385, - 40391, 40397, 40401, 40405, 40409, 40412, 40416, 40420, 40422, 40431, - 40440, 40445, 40450, 40455, 40461, 40467, 40470, 40473, 40476, 40479, - 40481, 40486, 40491, 40496, 40502, 40508, 40515, 40522, 40527, 40532, - 40537, 40542, 40550, 40558, 40566, 40574, 40582, 40590, 40598, 40606, - 40614, 40622, 40629, 40640, 40649, 40663, 40666, 40671, 40677, 40683, - 40690, 40704, 40719, 40725, 40731, 40738, 40744, 40752, 40758, 40771, - 40785, 40790, 40796, 40803, 40806, 40809, 40811, 40814, 40817, 40819, - 40821, 40825, 40828, 40831, 40834, 40837, 40842, 40847, 40852, 40857, - 40860, 40863, 40865, 40867, 40869, 40873, 40877, 40881, 40887, 40890, - 40892, 40894, 40899, 40904, 40909, 40914, 40919, 40924, 40926, 40928, - 40937, 40941, 40948, 40957, 40959, 40964, 40969, 40976, 40980, 40982, - 40986, 40988, 40992, 40996, 41000, 41002, 41004, 41006, 41011, 41018, - 41025, 41032, 41039, 41046, 41053, 41060, 41067, 41073, 41079, 41086, - 41093, 41100, 41107, 41113, 41119, 41126, 41133, 41140, 41148, 41155, - 41163, 41170, 41178, 41185, 41193, 41201, 41208, 41216, 41223, 41231, - 41238, 41246, 41253, 41260, 41267, 41274, 41281, 41289, 41296, 41303, - 41310, 41318, 41325, 41332, 41339, 41346, 41354, 41362, 41369, 41376, - 41382, 41389, 41394, 41401, 41408, 41416, 41423, 41431, 41439, 41444, - 41449, 41454, 41461, 41468, 41475, 41482, 41487, 41491, 41500, 41506, - 41509, 41517, 41520, 41525, 41530, 41533, 41536, 41544, 41547, 41552, - 41555, 41562, 41567, 41575, 41578, 41581, 41584, 41589, 41594, 41597, - 41600, 41608, 41611, 41616, 41623, 41627, 41631, 41636, 41641, 41647, - 41652, 41658, 41664, 41669, 41675, 41683, 41689, 41697, 41705, 41711, - 41719, 41727, 41736, 41744, 41750, 41758, 41767, 41775, 41779, 41784, - 41797, 41810, 41814, 41818, 41822, 41826, 41836, 41840, 41845, 41850, - 41855, 41860, 41865, 41870, 41880, 41890, 41898, 41908, 41918, 41926, - 41936, 41946, 41954, 41964, 41974, 41982, 41990, 42000, 42010, 42013, - 42016, 42019, 42024, 42028, 42034, 42041, 42048, 42056, 42063, 42067, - 42071, 42075, 42079, 42081, 42085, 42089, 42094, 42099, 42106, 42113, - 42116, 42123, 42125, 42127, 42131, 42135, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 42140, 42144, 42151, 42158, 42165, - 42172, 42176, 42180, 42184, 42188, 42193, 42199, 42204, 42210, 42216, - 42222, 42228, 42236, 42243, 42250, 42257, 42264, 42270, 42276, 42285, - 42289, 42296, 42300, 42304, 42310, 42316, 42322, 42328, 42332, 42336, - 42339, 42343, 42347, 42354, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 42361, 42364, 42368, 42372, 42378, 42384, - 42390, 42398, 42405, 42409, 42417, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 42422, 42425, 42428, 42431, 42434, 42437, 42440, - 42443, 42446, 42449, 42453, 42457, 42461, 42465, 42469, 42473, 42477, - 42481, 42485, 42489, 42493, 42496, 42499, 42502, 42505, 42508, 42511, - 42514, 42517, 42520, 42524, 42528, 42532, 42536, 42540, 42544, 42548, - 42552, 42556, 42560, 42564, 42570, 42576, 42582, 42589, 42596, 42603, - 42610, 42617, 42624, 42631, 42638, 42645, 42652, 42659, 42666, 42673, - 42680, 42687, 42694, 42701, 42706, 42712, 42718, 42724, 42729, 42735, - 42741, 42747, 42752, 42758, 42764, 42769, 42774, 42779, 42784, 42790, - 42796, 42801, 42806, 42812, 42817, 42823, 42829, 42835, 42841, 42847, - 42852, 42858, 42864, 42870, 42875, 42881, 42887, 42893, 42898, 42904, - 42910, 42915, 42920, 42925, 42930, 42936, 42942, 42947, 42952, 42958, - 42963, 42969, 42975, 42981, 42987, 42993, 42998, 43004, 43010, 43016, - 43021, 43027, 43033, 43039, 43044, 43050, 43056, 43061, 43066, 43071, - 43076, 43082, 43088, 43093, 43098, 43104, 43109, 43115, 43121, 43127, - 43133, 43139, 43143, 43149, 43155, 43161, 43167, 43173, 43179, 43185, - 43191, 43197, 43203, 43207, 43211, 43215, 43219, 43223, 43227, 43231, - 43235, 43239, 43244, 43250, 43255, 43260, 43265, 43270, 43279, 43288, - 43297, 43306, 43315, 43324, 43333, 43342, 43349, 43357, 43365, 43372, - 43379, 43387, 43395, 43402, 43409, 43417, 43425, 43432, 43439, 43447, - 43455, 43462, 43469, 43477, 43486, 43495, 43503, 43512, 43521, 43528, - 43535, 43543, 43552, 43561, 43569, 43578, 43587, 43594, 43601, 43610, - 43619, 43627, 43635, 43644, 43653, 43660, 43667, 43676, 43685, 43693, - 43701, 43710, 43719, 43726, 43733, 43742, 43751, 43759, 43768, 43777, - 43785, 43795, 43805, 43815, 43825, 43834, 43843, 43852, 43861, 43868, - 43876, 43884, 43892, 43900, 43905, 43910, 43919, 43927, 43934, 43943, - 43951, 43958, 43967, 43975, 43982, 43991, 43999, 44006, 44015, 44023, - 44030, 44039, 44047, 44054, 44063, 44071, 44078, 44087, 44095, 44102, - 44111, 44119, 44126, 44135, 44144, 44153, 44162, 44175, 44188, 44195, - 44200, 44205, 44210, 44215, 44220, 44225, 44230, 44235, 44243, 44251, - 44259, 44267, 44272, 44279, 44286, 44293, 44298, 44306, 44313, 44321, - 44325, 44332, 44338, 44345, 44349, 44355, 44361, 44367, 44371, 44374, - 44378, 44382, 44389, 44395, 44401, 44407, 44413, 44427, 44437, 44451, - 44465, 44471, 44481, 44495, 44498, 44501, 44508, 44516, 44521, 44526, - 44534, 44545, 44556, 44564, 44568, 44572, 44575, 44578, 44582, 44586, - 44589, 44592, 44597, 44602, 44608, 44614, 44619, 44624, 44630, 44636, - 44641, 44646, 44651, 44656, 44662, 44668, 44673, 44678, 44684, 44690, - 44695, 44700, 44703, 44706, 44715, 44717, 44719, 44722, 44726, 44732, - 44734, 44737, 44744, 44751, 44759, 44767, 44777, 44791, 44796, 44801, - 44805, 44810, 44818, 44826, 44835, 44844, 44853, 44862, 44867, 44872, - 44878, 44884, 44890, 44896, 44899, 44905, 44911, 44921, 44931, 44939, - 44947, 44956, 44965, 44969, 44977, 44985, 44993, 45001, 45010, 45019, - 45028, 45037, 45042, 45047, 45052, 45057, 45062, 45068, 45074, 45079, - 45085, 45087, 45089, 45091, 45093, 45096, 45099, 45101, 45103, 45105, - 45109, 45113, 45115, 45117, 45120, 45123, 45127, 45133, 45139, 45141, - 45148, 45152, 45157, 45162, 45164, 45173, 45179, 45185, 45191, 45197, - 45203, 45209, 45214, 45217, 45220, 45223, 45225, 45227, 45231, 45235, - 45240, 45245, 45250, 45253, 45257, 45262, 45265, 45269, 45274, 45279, - 45284, 45289, 45294, 45299, 45304, 45309, 45314, 45319, 45324, 45329, - 45335, 45341, 45347, 45349, 45352, 45354, 45357, 45359, 45361, 45363, - 45365, 45367, 45369, 45371, 45373, 45375, 45377, 45379, 45381, 45383, - 45385, 45387, 45389, 45391, 45396, 45401, 45406, 45411, 45416, 45421, - 45426, 45431, 45436, 45441, 45446, 45451, 45456, 45461, 45466, 45471, - 45476, 45481, 45486, 45491, 45495, 45499, 45503, 45509, 45515, 45520, - 45525, 45530, 45535, 45540, 45545, 45553, 45561, 45569, 45577, 45585, - 45593, 45601, 45609, 45615, 45620, 45625, 45630, 45633, 45637, 45641, - 45645, 45649, 45653, 45657, 45664, 45671, 45679, 45687, 45692, 45697, - 45704, 45711, 45718, 45725, 45728, 45731, 45736, 45738, 45742, 45747, - 45749, 45751, 45753, 45755, 45760, 45763, 45765, 45770, 45777, 45784, - 45787, 45791, 45796, 45801, 45809, 45815, 45820, 45831, 45837, 45843, - 45848, 45853, 45859, 45862, 45865, 45870, 45872, 45876, 45878, 45880, - 45882, 45884, 45886, 45888, 45893, 45895, 45897, 45899, 45901, 45905, - 45907, 45910, 45915, 45920, 45925, 45930, 45936, 45942, 45944, 45947, - 45954, 45960, 45966, 45973, 45977, 0, 45981, 45983, 45987, 45993, 45998, - 46000, 46004, 46013, 46021, 46029, 46035, 46041, 46046, 46052, 46057, - 46060, 46074, 46077, 46082, 0, 46087, 0, 0, 0, 0, 46096, 46103, 46107, - 46109, 46111, 46115, 46121, 46126, 46132, 46134, 46140, 46142, 46148, - 46150, 46152, 46157, 46159, 46163, 46168, 46170, 46175, 46180, 46184, - 46191, 0, 46201, 46207, 46210, 46216, 0, 46219, 46224, 46228, 46230, 0, - 0, 46232, 46236, 46240, 46245, 46247, 46252, 46255, 46258, 46261, 46265, - 46269, 46274, 46278, 46283, 46288, 46292, 46298, 46305, 46308, 46314, - 46319, 46323, 46328, 46334, 46340, 46347, 46353, 46360, 0, 46367, 46374, - 46378, 46385, 46391, 46396, 46402, 46406, 46411, 46414, 46420, 46426, - 46433, 46441, 46448, 46457, 46467, 46474, 46480, 46484, 46492, 46497, - 46506, 46509, 46512, 46521, 46532, 46539, 46541, 46547, 46552, 46554, - 46557, 46561, 46569, 0, 46578, 0, 46583, 46591, 46599, 46607, 0, 0, 0, - 46615, 46623, 46628, 46631, 46635, 46638, 46649, 46659, 46669, 0, 0, - 46678, 46687, 46693, 46701, 46705, 46713, 46717, 46725, 46732, 46739, - 46748, 46757, 46767, 46777, 46787, 46797, 46806, 46815, 46825, 46835, - 46844, 46853, 46860, 46867, 46874, 46881, 46888, 46895, 46902, 46909, - 46916, 46924, 46930, 46936, 46942, 46948, 46954, 46960, 46966, 46972, - 46978, 46985, 46993, 47001, 47009, 47017, 47025, 47033, 47041, 47049, - 47057, 47066, 0, 0, 0, 47071, 47077, 47080, 47086, 47092, 47097, 47101, - 47106, 47112, 47119, 47122, 47129, 47136, 47140, 47149, 47158, 47163, - 47169, 47174, 47179, 47186, 47193, 47201, 47209, 0, 47218, 47227, 47232, - 47236, 47243, 47247, 47254, 47262, 47267, 47275, 47279, 47284, 47288, - 47293, 0, 47297, 47302, 47311, 47313, 47317, 47321, 47328, 47335, 47340, - 47348, 47354, 0, 47360, 0, 0, 0, 47363, 47371, 47375, 47382, 47390, - 47398, 47403, 47408, 47414, 47419, 47424, 47430, 47435, 47438, 47442, - 47446, 47453, 47462, 47467, 47476, 47485, 47491, 47497, 47502, 47507, - 47512, 47517, 47523, 47529, 47537, 47545, 47551, 47557, 47562, 47567, - 47574, 47581, 47587, 47590, 47593, 47597, 47601, 47605, 47610, 47616, - 47622, 47629, 47636, 47641, 47645, 47649, 47653, 47657, 47661, 47665, - 47669, 47673, 47677, 47681, 47685, 47689, 47693, 47697, 47701, 47705, - 47709, 47713, 47717, 47721, 47725, 47729, 47733, 47737, 47741, 47745, - 47749, 47753, 47757, 47761, 47765, 47769, 47773, 47777, 47781, 47785, - 47789, 47793, 47797, 47801, 47805, 47809, 47813, 47817, 47821, 47825, - 47829, 47833, 47837, 47841, 47845, 47849, 47853, 47857, 47861, 47865, - 47869, 47873, 47877, 47881, 47885, 47889, 47893, 47897, 47901, 47905, - 47909, 47913, 47917, 47921, 47925, 47929, 47933, 47937, 47941, 47945, - 47949, 47953, 47957, 47961, 47965, 47969, 47973, 47977, 47981, 47985, - 47989, 47993, 47997, 48001, 48005, 48009, 48013, 48017, 48021, 48025, - 48029, 48033, 48037, 48041, 48045, 48049, 48053, 48057, 48061, 48065, - 48069, 48073, 48077, 48081, 48085, 48089, 48093, 48097, 48101, 48105, - 48109, 48113, 48117, 48121, 48125, 48129, 48133, 48137, 48141, 48145, - 48149, 48153, 48157, 48161, 48165, 48169, 48173, 48177, 48181, 48185, - 48189, 48193, 48197, 48201, 48205, 48209, 48213, 48217, 48221, 48225, - 48229, 48233, 48237, 48241, 48245, 48249, 48253, 48257, 48261, 48265, - 48269, 48273, 48277, 48281, 48285, 48289, 48293, 48297, 48301, 48305, - 48309, 48313, 48317, 48321, 48325, 48329, 48333, 48337, 48341, 48345, - 48349, 48353, 48357, 48361, 48365, 48369, 48373, 48377, 48381, 48385, - 48389, 48393, 48397, 48401, 48405, 48409, 48413, 48417, 48421, 48425, - 48429, 48433, 48437, 48441, 48445, 48449, 48453, 48457, 48461, 48465, - 48469, 48473, 48477, 48481, 48485, 48489, 48493, 48497, 48501, 48505, - 48509, 48513, 48517, 48521, 48525, 48529, 48533, 48537, 48541, 48545, - 48549, 48553, 48557, 48561, 48565, 48569, 48573, 48577, 48581, 48585, - 48589, 48593, 48597, 48601, 48605, 48609, 48613, 48617, 48621, 48625, - 48629, 48633, 48637, 48641, 48645, 48649, 48653, 48657, 48661, 48665, - 48672, 48680, 48686, 48692, 48699, 48706, 48712, 48718, 48724, 48730, - 48735, 48740, 48745, 48750, 48756, 48762, 48770, 48777, 48782, 48787, - 48795, 48804, 48811, 48821, 48832, 48835, 48838, 48842, 48846, 48852, - 48858, 48868, 48878, 48888, 48898, 48905, 48912, 48919, 48926, 48937, - 48948, 48959, 48970, 48980, 48990, 49002, 49014, 49025, 49036, 49048, - 49060, 49069, 49079, 49089, 49100, 49111, 49118, 49125, 49132, 49139, - 49149, 49159, 49167, 49175, 49182, 49189, 49196, 49203, 49210, 49215, - 49220, 49226, 49234, 49244, 49252, 49260, 49268, 49276, 49284, 49292, - 49300, 49308, 49316, 49324, 49333, 49342, 49350, 49358, 49367, 49376, - 49385, 49394, 49404, 49414, 49423, 49432, 49442, 49452, 49466, 49483, - 49497, 49514, 49528, 49542, 49556, 49570, 49580, 49591, 49601, 49612, - 49629, 49646, 49654, 49660, 49667, 49674, 49681, 49688, 49693, 49699, - 49704, 49709, 49715, 49720, 49725, 49730, 49735, 49740, 49747, 49752, - 49759, 49764, 49769, 49773, 49777, 49784, 49791, 49798, 49805, 49812, - 49819, 49832, 49845, 49858, 49871, 49879, 49887, 49893, 49899, 49906, - 49913, 49920, 49927, 49931, 49936, 49944, 49952, 49960, 49967, 49971, - 49979, 49987, 49990, 49993, 49998, 50004, 50012, 50020, 50040, 50060, - 50080, 50100, 50120, 50140, 50160, 50180, 50185, 50192, 50201, 50209, - 50217, 50222, 50225, 50228, 50233, 50236, 50255, 50262, 50268, 50274, - 50278, 50281, 50284, 50287, 50298, 50310, 50317, 50324, 50327, 50331, - 50334, 50339, 50344, 50349, 50355, 50364, 50371, 50378, 50386, 50393, - 50400, 50403, 50409, 50415, 50418, 50421, 50426, 50431, 50437, 50443, - 50447, 50452, 50459, 50463, 50469, 50473, 50477, 50485, 50497, 50505, - 50509, 50511, 50520, 50529, 50535, 50538, 50544, 50550, 50555, 50560, - 50565, 50570, 50575, 50580, 50582, 50588, 50593, 50600, 50604, 50610, - 50613, 50617, 50624, 50631, 50633, 50635, 50641, 50647, 50653, 50662, - 50671, 50678, 50685, 50691, 50697, 50702, 50707, 50712, 50718, 50724, - 50729, 50736, 50740, 50744, 50757, 50770, 50781, 50790, 50796, 50803, - 50808, 50813, 50818, 50823, 50828, 50830, 50837, 50844, 50851, 50858, - 50865, 50873, 50879, 50884, 50890, 50896, 50902, 50909, 50915, 50923, - 50931, 50939, 50947, 50954, 50960, 50966, 50975, 50979, 50988, 50997, - 51006, 51014, 51018, 51024, 51031, 51038, 51042, 51048, 51055, 51060, - 51065, 51071, 51076, 51081, 51088, 51095, 51100, 51105, 51113, 51121, - 51131, 51141, 51148, 51155, 51159, 51163, 51175, 51181, 51187, 51192, - 51197, 51204, 51211, 51217, 51223, 51232, 51240, 51248, 51255, 51262, - 51269, 51275, 51282, 51288, 51295, 51302, 51309, 51316, 51322, 51327, - 51336, 51346, 51353, 51362, 51368, 51373, 51378, 51387, 51393, 51399, - 51405, 51413, 51418, 51425, 51432, 51443, 51450, 51457, 51464, 51471, - 51478, 51485, 51492, 51503, 51514, 51524, 51534, 51546, 51558, 51563, - 51568, 51576, 51584, 51590, 51596, 51605, 51614, 51622, 51630, 51638, - 51646, 51656, 51666, 51680, 51694, 51701, 51708, 51719, 51730, 51737, - 51744, 51753, 51762, 51767, 51772, 51781, 51790, 51795, 51800, 51808, - 51814, 51820, 51828, 51836, 51849, 51862, 51866, 51870, 51877, 51884, - 51891, 51899, 51907, 51915, 51923, 51929, 51935, 51941, 51947, 51954, - 51961, 51969, 51977, 51980, 51983, 51988, 51993, 51999, 52005, 52012, - 52019, 52028, 52037, 52044, 52051, 52059, 52067, 52075, 52083, 52090, - 52097, 52104, 52111, 52115, 52119, 52126, 52133, 52138, 52143, 52148, - 52153, 52159, 52173, 52180, 52187, 52191, 52193, 52195, 52200, 52205, - 52210, 52214, 52222, 52229, 52236, 52244, 52256, 52264, 52272, 52283, - 52287, 52291, 52295, 52300, 52311, 52318, 52325, 52332, 52337, 52344, - 52353, 52361, 52367, 52373, 52379, 52388, 52397, 52405, 52414, 52419, - 52422, 52427, 52433, 52439, 52445, 52451, 52455, 52458, 52462, 52466, - 52472, 52478, 52484, 52490, 52494, 52498, 52505, 52512, 52519, 52526, - 52533, 52540, 52550, 52560, 52567, 52574, 52582, 52590, 52594, 52599, - 52604, 52610, 52616, 52619, 52622, 52625, 52628, 52632, 52637, 52642, - 52647, 52652, 52657, 52661, 52665, 52669, 52673, 52677, 52681, 52685, - 52691, 52695, 52701, 52706, 52713, 52721, 52728, 52736, 52743, 52751, - 52760, 52767, 52777, 52788, 52794, 52803, 52809, 52818, 52827, 52833, - 52839, 52843, 52847, 52856, 52865, 52872, 52879, 52888, 0, 0, 0, 52897, - 52902, 52906, 52910, 52915, 52920, 52925, 52933, 52941, 52944, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 52948, 52953, 52958, 52963, 52968, - 52973, 52978, 52983, 52988, 52993, 52998, 53004, 53008, 53013, 53018, - 53023, 53028, 53033, 53038, 53043, 53048, 53053, 53058, 53063, 53068, - 53073, 53078, 53083, 53088, 53093, 53098, 53103, 53108, 53113, 53118, - 53124, 53129, 53135, 53144, 53149, 53157, 53164, 53173, 53178, 53183, - 53188, 53194, 0, 53201, 53206, 53211, 53216, 53221, 53226, 53231, 53236, - 53241, 53246, 53251, 53257, 53261, 53266, 53271, 53276, 53281, 53286, - 53291, 53296, 53301, 53306, 53311, 53316, 53321, 53326, 53331, 53336, - 53341, 53346, 53351, 53356, 53361, 53366, 53371, 53377, 53382, 53388, - 53397, 53402, 53410, 53417, 53426, 53431, 53436, 53441, 53447, 0, 53454, - 53462, 53470, 53480, 53487, 53495, 53501, 53510, 53518, 53526, 53534, - 53542, 53550, 53558, 53563, 53570, 53575, 53581, 53589, 53596, 53603, - 53611, 53617, 53623, 53630, 53637, 53646, 53656, 53662, 53669, 53674, - 53684, 53694, 53699, 53704, 53709, 53714, 53719, 53724, 53729, 53734, - 53739, 53744, 53749, 53754, 53759, 53764, 53769, 53774, 53779, 53784, - 53789, 53794, 53799, 53804, 53809, 53814, 53819, 53824, 53829, 53834, - 53839, 53844, 53848, 53852, 53857, 53862, 53867, 53872, 53877, 53882, - 53887, 53892, 53897, 53902, 53907, 53912, 53917, 53922, 53927, 53932, - 53937, 53942, 53949, 53956, 53963, 53970, 53977, 53984, 53991, 53998, - 54005, 54012, 54019, 54026, 54033, 54040, 54045, 54050, 54057, 54064, - 54071, 54078, 54085, 54092, 54099, 54106, 54113, 54120, 54127, 54134, - 54140, 54146, 54152, 54158, 54165, 54172, 54179, 54186, 54193, 54200, - 54207, 54214, 54221, 54228, 54236, 54244, 54252, 54260, 54268, 54276, - 54284, 54292, 54296, 54302, 54308, 54312, 54318, 54324, 54330, 54337, - 54344, 54351, 54358, 54363, 54369, 0, 0, 0, 0, 0, 0, 0, 54375, 54383, - 54392, 54401, 54409, 54415, 54420, 54425, 54430, 54435, 54440, 54445, - 54450, 54455, 54460, 54465, 54470, 54475, 54480, 54485, 54490, 54495, - 54500, 54505, 54510, 54515, 54520, 54525, 54530, 54535, 54540, 54545, - 54550, 54555, 54560, 54565, 54570, 54575, 54580, 54585, 54590, 54595, - 54600, 54605, 54610, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 54615, 54619, 54624, - 54629, 54634, 54639, 54648, 54653, 54658, 54663, 54668, 54673, 54678, - 54683, 54688, 54695, 54700, 54705, 54714, 54721, 54726, 54731, 54736, - 54743, 54748, 54755, 54760, 54765, 54772, 54779, 54784, 54789, 54794, - 54801, 54808, 54813, 54818, 54823, 54828, 54833, 54840, 54847, 54852, - 54857, 54862, 54867, 54872, 54877, 54882, 54887, 54892, 54897, 54902, - 54909, 0, 0, 0, 0, 0, 0, 0, 0, 0, 54914, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 54921, 54925, 54929, 54933, 54937, 54941, 54945, 54949, - 54953, 54957, 54961, 54967, 54971, 54975, 54979, 54983, 54987, 54991, - 54995, 54999, 55003, 55007, 55011, 0, 0, 0, 0, 0, 0, 0, 0, 0, 55015, - 55019, 55023, 55027, 55031, 55035, 55039, 0, 55043, 55047, 55051, 55055, - 55059, 55063, 55067, 0, 55071, 55075, 55079, 55083, 55087, 55091, 55095, - 0, 55099, 55103, 55107, 55111, 55115, 55119, 55123, 0, 55127, 55131, - 55135, 55139, 55143, 55147, 55151, 0, 55155, 55159, 55163, 55167, 55171, - 55175, 55179, 0, 55183, 55187, 55191, 55195, 55199, 55203, 55207, 0, - 55211, 55215, 55219, 55223, 55227, 55231, 55235, 0, 55239, 55244, 55249, - 55254, 55259, 55264, 55269, 55273, 55278, 55283, 55288, 55292, 55297, - 55302, 55307, 55312, 55316, 55321, 55326, 55331, 55336, 55341, 55346, - 55350, 55355, 55360, 55367, 55372, 55377, 55383, 55390, 55397, 55406, - 55413, 55422, 55426, 55430, 55436, 55442, 55448, 55456, 55462, 55466, - 55470, 55474, 55480, 55486, 55490, 55492, 55496, 55501, 55503, 55507, - 55511, 55515, 55521, 55526, 55530, 55534, 55539, 55545, 55550, 55555, - 55560, 55565, 55572, 55579, 55584, 55589, 55594, 55599, 55604, 55609, - 55613, 55617, 55624, 55631, 55637, 55641, 55645, 55648, 55652, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 55660, 55664, 55668, 55673, 55678, 55683, 55687, 55691, 55695, - 55700, 55705, 55709, 55713, 55717, 55721, 55726, 55731, 55736, 55741, - 55745, 55749, 55754, 55759, 55764, 55769, 55773, 0, 55777, 55781, 55785, - 55789, 55793, 55797, 55801, 55806, 55811, 55815, 55820, 55825, 55834, - 55838, 55842, 55846, 55853, 55857, 55862, 55867, 55871, 55875, 55881, - 55886, 55891, 55896, 55901, 55905, 55909, 55913, 55917, 55921, 55926, - 55931, 55935, 55939, 55944, 55949, 55954, 55958, 55962, 55967, 55972, - 55978, 55984, 55988, 55994, 56000, 56004, 56010, 56016, 56021, 56026, - 56030, 56036, 56040, 56044, 56050, 56056, 56061, 56066, 56070, 56074, - 56082, 56088, 56094, 56100, 56105, 56110, 56115, 56121, 56125, 56131, - 56135, 56139, 56145, 56151, 56157, 56163, 56169, 56175, 56181, 56187, - 56193, 56199, 56205, 56211, 56215, 56221, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 56227, 56230, 56234, 56238, 56242, 56246, 56249, 56252, 56256, - 56260, 56264, 56268, 56271, 56276, 56280, 56284, 56288, 56294, 56298, - 56302, 56306, 56310, 56317, 56323, 56327, 56331, 56335, 56339, 56343, - 56347, 56351, 56355, 56359, 56363, 56367, 56373, 56377, 56381, 56385, - 56389, 56393, 56397, 56401, 56405, 56409, 56413, 56417, 56421, 56425, - 56429, 56433, 56437, 56443, 56449, 56454, 56459, 56463, 56467, 56471, - 56475, 56479, 56483, 56487, 56491, 56495, 56499, 56503, 56507, 56511, - 56515, 56519, 56523, 56527, 56531, 56535, 56539, 56543, 56547, 56551, - 56555, 56561, 56565, 56569, 56573, 56577, 56581, 56585, 56589, 56593, - 56598, 56605, 56609, 56613, 56617, 56621, 56625, 56629, 56633, 56637, - 56641, 56645, 56649, 56653, 56660, 56664, 56670, 56674, 56678, 56682, - 56686, 56690, 56693, 56697, 56701, 56705, 56709, 56713, 56717, 56721, - 56725, 56729, 56733, 56737, 56741, 56745, 56749, 56753, 56757, 56761, - 56765, 56769, 56773, 56777, 56781, 56785, 56789, 56793, 56797, 56801, - 56805, 56809, 56813, 56817, 56821, 56827, 56831, 56835, 56839, 56843, - 56847, 56851, 56855, 56859, 56863, 56867, 56871, 56875, 56879, 56883, - 56887, 56891, 56895, 56899, 56903, 56907, 56911, 56915, 56919, 56923, - 56927, 56931, 56935, 56943, 56947, 56951, 56955, 56959, 56963, 56969, - 56973, 56977, 56981, 56985, 56989, 56993, 56997, 57001, 57005, 57009, - 57013, 57017, 57021, 57027, 57031, 57035, 57039, 57043, 57047, 57051, - 57055, 57059, 57063, 57067, 57071, 57075, 57079, 57083, 57087, 57091, - 57095, 57099, 57103, 57107, 57111, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 57115, 57123, 57130, 57141, 57151, - 57159, 57168, 57177, 57187, 57199, 57211, 57223, 0, 0, 0, 0, 57229, - 57232, 57235, 57240, 57243, 57250, 57254, 57258, 57262, 57266, 57270, - 57275, 57280, 57284, 57288, 57293, 57298, 57303, 57308, 57311, 57314, - 57320, 57326, 57331, 57336, 57343, 57350, 57354, 57358, 57362, 57369, - 57375, 57382, 57387, 57392, 57397, 57402, 57407, 57412, 57417, 57422, - 57427, 57432, 57437, 57442, 57447, 57452, 57458, 57463, 57467, 57473, - 57484, 57494, 57509, 57519, 57523, 57532, 57538, 57544, 57550, 57555, - 57558, 57563, 57567, 0, 57573, 57577, 57580, 57584, 57587, 57591, 57594, - 57598, 57601, 57605, 57608, 57611, 57615, 57619, 57623, 57627, 57631, - 57635, 57639, 57643, 57647, 57651, 57655, 57659, 57663, 57667, 57671, - 57675, 57679, 57683, 57687, 57691, 57695, 57699, 57703, 57708, 57712, - 57716, 57720, 57724, 57727, 57731, 57734, 57738, 57742, 57746, 57750, - 57753, 57757, 57760, 57764, 57768, 57772, 57776, 57780, 57784, 57788, - 57792, 57796, 57800, 57804, 57808, 57811, 57815, 57819, 57823, 57827, - 57831, 57834, 57839, 57843, 57848, 57852, 57855, 57859, 57863, 57867, - 57871, 57876, 57880, 57884, 57888, 57892, 57895, 57899, 57903, 0, 0, - 57908, 57916, 57924, 57931, 57938, 57942, 57948, 57953, 57958, 57962, - 57965, 57969, 57972, 57976, 57979, 57983, 57986, 57990, 57993, 57996, - 58000, 58004, 58008, 58012, 58016, 58020, 58024, 58028, 58032, 58036, - 58040, 58044, 58048, 58052, 58056, 58060, 58064, 58068, 58072, 58076, - 58080, 58084, 58088, 58093, 58097, 58101, 58105, 58109, 58112, 58116, - 58119, 58123, 58127, 58131, 58135, 58138, 58142, 58145, 58149, 58153, - 58157, 58161, 58165, 58169, 58173, 58177, 58181, 58185, 58189, 58193, - 58196, 58200, 58204, 58208, 58212, 58216, 58219, 58224, 58228, 58233, - 58237, 58240, 58244, 58248, 58252, 58256, 58261, 58265, 58269, 58273, - 58277, 58280, 58284, 58288, 58293, 58297, 58301, 58305, 58309, 58314, - 58321, 58325, 58331, 0, 0, 0, 0, 0, 58336, 58340, 58344, 58347, 58351, - 58355, 58359, 58362, 58365, 58369, 58373, 58377, 58381, 58385, 58389, - 58393, 58397, 58401, 58404, 58408, 58412, 58415, 58418, 58421, 58424, - 58428, 58432, 58436, 58440, 58444, 58448, 58452, 58456, 58460, 58464, - 58467, 58470, 58474, 58478, 58482, 58486, 0, 0, 0, 58490, 58494, 58498, - 58502, 58506, 58510, 58514, 58518, 58522, 58526, 58530, 58534, 58538, - 58542, 58546, 58550, 58554, 58558, 58562, 58566, 58570, 58574, 58578, - 58582, 58586, 58590, 58594, 58598, 58602, 58606, 58610, 58613, 58617, - 58620, 58624, 58628, 58631, 58635, 58639, 58642, 58646, 58650, 58654, - 58658, 58661, 58665, 58669, 58673, 58677, 58681, 58685, 58688, 58691, - 58695, 58699, 58703, 58707, 58711, 58715, 58719, 58723, 58727, 58731, - 58735, 58739, 58743, 58747, 58751, 58755, 58759, 58763, 58767, 58771, - 58775, 58779, 58783, 58787, 58791, 58795, 58799, 58803, 58807, 58811, - 58815, 58819, 58823, 58827, 58831, 58835, 58839, 58843, 58847, 58851, - 58855, 0, 58859, 58865, 58871, 58876, 58881, 58886, 58892, 58898, 58904, - 58910, 58916, 58922, 58928, 58934, 58940, 58946, 58952, 58956, 58960, - 58964, 58968, 58972, 58976, 58980, 58984, 58988, 58992, 58996, 59000, - 59004, 59008, 59012, 59016, 59020, 59024, 59028, 59032, 59037, 59042, - 59047, 0, 0, 0, 0, 0, 0, 0, 0, 59052, 59056, 59060, 59064, 59068, 59072, - 59076, 59080, 59084, 59088, 59092, 59096, 59100, 59104, 59108, 59112, - 59115, 59119, 59122, 59126, 59130, 59134, 59138, 59142, 59146, 59150, - 59154, 59158, 59162, 59166, 59170, 59174, 59178, 59182, 59186, 59190, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 59194, 59199, 59204, 59209, 59213, - 59218, 59222, 59227, 59232, 59237, 59242, 59247, 59251, 59256, 59261, - 59266, 59271, 59275, 59279, 59283, 59287, 59291, 59295, 59299, 59303, - 59307, 59311, 59315, 59319, 59323, 59327, 59332, 59337, 59342, 59347, - 59352, 59357, 59362, 59367, 59372, 59377, 59382, 59387, 59392, 59397, - 59402, 59408, 0, 59415, 59418, 59421, 59424, 59427, 59430, 59433, 59436, - 59439, 59442, 59446, 59450, 59454, 59458, 59462, 59466, 59470, 59474, - 59478, 59482, 59486, 59490, 59494, 59498, 59502, 59506, 59510, 59514, - 59518, 59522, 59526, 59530, 59534, 59538, 59542, 59546, 59550, 59554, - 59558, 59562, 59566, 59575, 59584, 59593, 59602, 59611, 59620, 59629, - 59638, 59641, 59646, 59651, 59656, 59661, 59666, 59671, 59676, 59681, - 59686, 59690, 59695, 59700, 59705, 59710, 59715, 59719, 59723, 59727, - 59731, 59735, 59739, 59743, 59747, 59751, 59755, 59759, 59763, 59767, - 59771, 59776, 59781, 59786, 59791, 59796, 59801, 59806, 59811, 59816, - 59821, 59826, 59831, 59836, 59841, 59847, 59853, 59858, 59863, 59866, - 59869, 59872, 59875, 59878, 59881, 59884, 59887, 59890, 59894, 59898, - 59902, 59906, 59910, 59914, 59918, 59922, 59926, 59930, 59934, 59938, - 59942, 59946, 59950, 59954, 59958, 59962, 59966, 59970, 59974, 59978, - 59982, 59986, 59990, 59994, 59998, 60002, 60006, 60010, 60014, 60018, - 60022, 60026, 60030, 60034, 60038, 60042, 60046, 60050, 60055, 60060, - 60065, 60070, 60074, 60079, 60084, 60089, 60094, 60099, 60104, 60109, - 60114, 60119, 60123, 60129, 60135, 60141, 60147, 60153, 60159, 60165, - 60171, 60177, 60183, 60189, 60195, 60198, 60201, 60204, 60209, 60212, - 60215, 60218, 60221, 60224, 60227, 60231, 60235, 60239, 60243, 60247, - 60251, 60255, 60259, 60263, 60267, 60271, 60275, 60279, 60282, 60285, - 60289, 60293, 60297, 60301, 60304, 60308, 60312, 60316, 60320, 60323, - 60327, 60331, 60335, 60339, 60342, 60346, 60350, 60353, 60357, 60361, - 60365, 60369, 60373, 60377, 60381, 0, 60385, 60388, 60391, 60394, 60397, - 60400, 60403, 60406, 60409, 60412, 60415, 60418, 60421, 60424, 60427, - 60430, 60433, 60436, 60439, 60442, 60445, 60448, 60451, 60454, 60457, - 60460, 60463, 60466, 60469, 60472, 60475, 60478, 60481, 60484, 60487, - 60490, 60493, 60496, 60499, 60502, 60505, 60508, 60511, 60514, 60517, - 60520, 60523, 60526, 60529, 60532, 60535, 60538, 60541, 60544, 60547, - 60550, 60553, 60556, 60559, 60562, 60565, 60568, 60571, 60574, 60577, - 60580, 60583, 60586, 60589, 60592, 60595, 60598, 60601, 60604, 60607, - 60610, 60613, 60616, 60619, 60622, 60625, 60628, 60631, 60634, 60637, - 60640, 60643, 60646, 60649, 60657, 60664, 60671, 60678, 60685, 60692, - 60699, 60706, 60713, 60720, 60728, 60736, 60744, 60752, 60760, 60768, - 60776, 60784, 60792, 60800, 60808, 60816, 60824, 60832, 60840, 60843, - 60846, 60849, 60851, 60854, 60857, 60860, 60865, 60870, 60873, 60880, - 60887, 60894, 60901, 60904, 60909, 60911, 60915, 60917, 60919, 60922, - 60925, 60928, 60931, 60934, 60937, 60940, 60945, 60950, 60953, 60956, - 60959, 60962, 60965, 60968, 60971, 60975, 60978, 60981, 60984, 60987, - 60990, 60994, 60997, 61000, 61003, 61008, 61013, 61018, 61023, 61028, - 61033, 61038, 61043, 61048, 61056, 61058, 61061, 61064, 61067, 61070, - 61075, 61083, 61086, 61089, 61093, 61096, 61099, 61102, 61107, 61110, - 61113, 61118, 61121, 61124, 61129, 61132, 61135, 61140, 61145, 61150, - 61153, 61156, 61159, 61162, 61168, 61171, 61174, 61177, 61179, 61182, - 61185, 61188, 61193, 61196, 61199, 61202, 61205, 61208, 61213, 61216, - 61219, 61222, 61225, 61228, 61231, 61234, 61237, 61240, 61245, 61249, - 61256, 61263, 61270, 61277, 61284, 61291, 61298, 61305, 61312, 61320, - 61328, 61336, 61344, 61352, 61360, 61368, 61376, 61384, 61392, 61400, - 61408, 61416, 61424, 61432, 61440, 61448, 61456, 61464, 61472, 61480, - 61488, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 61491, 61499, - 61507, 61517, 61523, 61527, 61531, 61537, 61543, 61548, 61552, 61556, - 61560, 61564, 61570, 61574, 61578, 61582, 61592, 61596, 61600, 61606, - 61610, 61616, 61620, 61624, 61630, 61636, 61642, 61650, 61658, 61662, - 61666, 61670, 61676, 61680, 61689, 61695, 61699, 61703, 61707, 61711, - 61715, 61719, 61726, 61732, 61738, 61742, 61748, 61752, 61758, 61766, - 61776, 61780, 61788, 61792, 61798, 61806, 61814, 61818, 61822, 61828, - 61833, 61839, 61845, 61849, 61853, 61856, 61860, 61864, 61868, 61872, - 61876, 61880, 61884, 61887, 61891, 61895, 61899, 61903, 61907, 61911, - 61914, 61918, 61922, 61925, 61929, 61933, 61937, 61941, 61945, 61949, - 61953, 61957, 61961, 61965, 61969, 61973, 61977, 61981, 61985, 61989, - 61993, 61997, 62001, 62005, 62009, 62013, 62017, 62021, 62025, 62029, - 62033, 62037, 62041, 62045, 62049, 62053, 62057, 62061, 62065, 62069, - 62073, 62077, 62081, 62085, 62089, 62093, 62097, 62101, 62104, 62108, - 62112, 62116, 62120, 62124, 62128, 62132, 62136, 62140, 62144, 62148, - 62152, 62156, 62160, 62164, 62168, 62172, 62176, 62180, 62184, 62188, - 62192, 62196, 62200, 62204, 62208, 62212, 62216, 62220, 62224, 62228, - 62232, 62236, 62240, 62244, 62248, 62252, 62256, 62260, 62264, 62268, - 62272, 62276, 62280, 62284, 62288, 62292, 62296, 62300, 62304, 62308, - 62312, 62316, 62320, 62324, 62328, 62332, 62336, 62340, 62344, 62348, - 62352, 62356, 62360, 62364, 62368, 62372, 62376, 62380, 62384, 62388, - 62392, 62396, 62400, 62404, 62408, 62412, 62416, 62420, 62424, 62428, - 62432, 62436, 62440, 62444, 62448, 62452, 62456, 62460, 62464, 62468, - 62472, 62476, 62480, 62484, 62488, 62492, 62496, 62500, 62504, 62508, - 62512, 62516, 62520, 62524, 62528, 62532, 62536, 62540, 62544, 62548, - 62552, 62556, 62560, 62564, 62568, 62572, 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, 62731, 62735, 62739, 62743, 62747, - 62751, 62755, 62759, 62763, 62767, 62771, 62775, 62779, 62783, 62787, - 62791, 62795, 62799, 62803, 62807, 62811, 62815, 62819, 62823, 62827, - 62831, 62835, 62839, 62843, 62847, 62851, 62855, 62859, 62863, 62867, - 62871, 62875, 62879, 62883, 62887, 62891, 62895, 62899, 62903, 62907, - 62911, 62915, 62919, 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, 63038, 63042, 63046, 63050, 63054, 63058, 63062, 63066, - 63070, 63074, 63078, 63082, 63086, 63090, 63094, 63098, 63102, 63106, - 63110, 63114, 63118, 63122, 63126, 63130, 63134, 63138, 63142, 63146, - 63150, 63154, 63158, 63162, 63166, 63170, 63174, 63178, 63182, 63186, - 63190, 63194, 63198, 63202, 63206, 63210, 63214, 63218, 63222, 63226, - 63230, 63234, 63238, 63242, 63246, 63250, 63254, 63258, 63262, 63266, - 63270, 63274, 63278, 63282, 63286, 63290, 63294, 63298, 63302, 63306, - 63310, 63314, 63318, 63322, 63326, 63330, 63334, 63338, 63342, 63346, - 63350, 63354, 63358, 63362, 63366, 63370, 63374, 63378, 63382, 63386, - 63390, 63394, 63397, 63401, 63405, 63409, 63413, 63417, 63421, 63425, - 63429, 63433, 63437, 63441, 63445, 63449, 63453, 63457, 63461, 63465, - 63469, 63473, 63477, 63481, 63485, 63489, 63493, 63497, 63501, 63505, - 63509, 63513, 63517, 63521, 63525, 63529, 63533, 63537, 63541, 63545, - 63549, 63553, 63557, 63561, 63565, 63569, 63573, 63577, 63581, 63585, - 63589, 63593, 63597, 63601, 63605, 63609, 63613, 63617, 63621, 63625, - 63629, 63633, 63637, 63641, 63645, 63649, 63653, 63657, 63661, 63665, - 63669, 63673, 63677, 63681, 63685, 63689, 63693, 63697, 63701, 63705, - 63709, 63713, 63717, 63721, 63725, 63729, 63733, 63737, 63741, 63745, - 63749, 63753, 63757, 63761, 63765, 63769, 63773, 63777, 63781, 63785, - 63789, 63793, 63797, 63801, 63805, 63809, 63813, 63817, 63821, 63825, - 63829, 63833, 63837, 63841, 63845, 63849, 63853, 63857, 63861, 63865, - 63869, 63873, 63877, 63881, 63885, 63889, 63892, 63896, 63900, 63904, - 63908, 63912, 63916, 63920, 63924, 63928, 63932, 63936, 63940, 63944, - 63948, 63952, 63956, 63960, 63964, 63968, 63972, 63976, 63980, 63984, - 63988, 63992, 63996, 64000, 64004, 64008, 64012, 64016, 64020, 64024, - 64028, 64032, 64036, 64040, 64044, 64048, 64052, 64056, 64060, 64064, - 64068, 64072, 64076, 64080, 64084, 64088, 64092, 64096, 64100, 64104, - 64108, 64112, 64116, 64120, 64124, 64128, 64132, 64136, 64140, 64144, - 64148, 64152, 64156, 64160, 64164, 64168, 64172, 64176, 64180, 64184, - 64188, 64192, 64196, 64200, 64204, 64208, 64212, 64216, 64220, 64224, - 64228, 64232, 64236, 64240, 64244, 64248, 64252, 64256, 64260, 64264, - 64268, 64272, 64276, 64280, 64284, 64288, 64292, 64296, 64300, 64304, - 64308, 64312, 64316, 64320, 64324, 64328, 64332, 64336, 64340, 64344, - 64347, 64351, 64355, 64359, 64363, 64367, 64371, 64375, 64379, 64383, - 64387, 64391, 64395, 64399, 64403, 64407, 64411, 64415, 64419, 64423, - 64427, 64431, 64435, 64439, 64443, 64447, 64451, 64455, 64459, 64463, - 64467, 64471, 64475, 64479, 64483, 64487, 64491, 64495, 64499, 64503, - 64507, 64511, 64515, 64519, 64523, 64527, 64531, 64535, 64539, 64543, - 64547, 64551, 64555, 64559, 64563, 64567, 64571, 64575, 64579, 64583, - 64587, 64591, 64595, 64599, 64603, 64607, 64611, 64615, 64619, 64623, - 64627, 64631, 64635, 64639, 64643, 64647, 64651, 64655, 64659, 64663, - 64667, 64671, 64675, 64679, 64683, 64687, 64691, 64695, 64699, 64703, - 64707, 64711, 64715, 64719, 64723, 64727, 64731, 64735, 64739, 64743, - 64747, 64751, 64755, 64759, 64763, 64767, 64771, 64775, 64779, 64783, - 64787, 64791, 64795, 64799, 64803, 64807, 64811, 64815, 64819, 64823, - 64827, 64831, 64835, 64839, 64843, 64847, 64851, 64855, 64859, 64863, - 64867, 64871, 64875, 64879, 64883, 64887, 64891, 64895, 64899, 64903, - 64907, 64911, 64915, 64919, 64923, 64927, 64931, 64935, 64939, 64943, - 64947, 64950, 64954, 64958, 64962, 64966, 64970, 64974, 64978, 64982, - 64986, 64990, 64994, 64998, 65002, 65006, 65010, 65014, 65018, 65022, - 65026, 65030, 65034, 65038, 65042, 65046, 65050, 65054, 65058, 65062, - 65066, 65070, 65074, 65078, 65082, 65086, 65090, 65094, 65098, 65102, - 65106, 65110, 65114, 65118, 65122, 65126, 65130, 65134, 65138, 65142, - 65146, 65150, 65154, 65158, 65162, 65166, 65170, 65174, 65178, 65182, - 65186, 65190, 65194, 65198, 65202, 65206, 65210, 65214, 65218, 65222, - 65226, 65230, 65234, 65238, 65242, 65246, 65250, 65254, 65258, 65262, - 65266, 65270, 65274, 65278, 65282, 65286, 65290, 65294, 65298, 65302, - 65306, 65310, 65314, 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, 65678, 65682, 65686, 65690, 65694, 65698, 65702, - 65706, 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, 66173, 66177, 66181, - 66185, 66189, 66193, 66197, 66201, 66205, 66209, 66213, 66217, 66221, - 66225, 66229, 66233, 66237, 66241, 66245, 66249, 66253, 66257, 66261, - 66265, 66269, 66273, 66277, 66281, 66285, 66289, 66293, 66297, 66301, - 66305, 66309, 66313, 66317, 66321, 66325, 66329, 66333, 66337, 66341, - 66345, 66349, 66353, 66357, 66361, 66365, 66369, 66373, 66377, 66381, - 66385, 66389, 66393, 66397, 66401, 66405, 66409, 66413, 66417, 66421, - 66425, 66429, 66433, 66437, 66441, 66445, 66449, 66453, 66457, 66461, - 66465, 66469, 66473, 66477, 66481, 66485, 66489, 0, 0, 0, 66493, 66497, - 66501, 66505, 66509, 66513, 66517, 66521, 66525, 66529, 66533, 66537, - 66541, 66545, 66549, 66553, 66557, 66561, 66565, 66569, 66573, 66577, - 66581, 66585, 66589, 66593, 66597, 66601, 66605, 66609, 66613, 66617, - 66621, 66625, 66629, 66633, 66637, 66641, 66645, 66649, 66653, 66657, - 66661, 66665, 66669, 66673, 66677, 66681, 66685, 66689, 66693, 66697, - 66701, 66705, 66709, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66713, 66718, 66722, - 66727, 66732, 66737, 66742, 66747, 66751, 66756, 66761, 66766, 66771, - 66776, 66781, 66786, 66790, 66794, 66799, 66804, 66809, 66814, 66819, - 66823, 66828, 66833, 66838, 66843, 66848, 66852, 66857, 66861, 66866, - 66870, 66875, 66879, 66883, 66887, 66892, 66897, 66902, 66910, 66918, - 66926, 66934, 66941, 66949, 66955, 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, 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, 67238, 67242, 67246, 67250, 67254, 67257, - 67261, 67265, 67268, 67272, 67276, 67280, 67283, 67287, 67291, 67295, - 67299, 67303, 67307, 67311, 67315, 67319, 67323, 67327, 67331, 67335, - 67339, 67342, 67346, 67350, 67354, 67358, 67362, 67366, 67370, 67374, - 67378, 67381, 67384, 67388, 67392, 67396, 67399, 67402, 67406, 67410, - 67414, 67418, 67422, 67426, 67430, 67434, 67438, 67442, 67446, 67450, - 67454, 67458, 67462, 67466, 67470, 67474, 67478, 67482, 67486, 67490, - 67494, 67498, 67502, 67506, 67510, 67514, 67518, 67522, 67526, 67530, - 67534, 67538, 67542, 67546, 67550, 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, 67767, - 67771, 67775, 67779, 67783, 67787, 67791, 67795, 67799, 67803, 67807, - 67811, 67815, 67819, 67823, 67827, 67831, 67835, 67839, 67843, 67847, - 67851, 67854, 67858, 67862, 67866, 67870, 67874, 67878, 67882, 67886, - 67890, 67894, 67898, 67902, 67906, 67910, 67914, 67918, 67922, 67926, - 67930, 67934, 67938, 67942, 67946, 67950, 67954, 67958, 67962, 67966, - 67970, 67974, 67978, 67982, 67986, 67990, 67994, 67998, 68002, 68006, - 68010, 68014, 68018, 68022, 68026, 68029, 68034, 68038, 68044, 68049, - 68055, 68059, 68063, 68067, 68071, 68075, 68079, 68083, 68087, 68091, - 68095, 68099, 68103, 68107, 68111, 68114, 68117, 68120, 68123, 68126, - 68129, 68132, 68135, 68138, 68143, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 68149, 68154, 68159, 68164, 68169, 68175, 68181, - 68186, 68191, 68196, 68201, 68208, 68215, 68222, 68229, 68236, 68243, - 68253, 68263, 68270, 68277, 68283, 68289, 68295, 68301, 68310, 68319, - 68326, 68333, 68344, 68355, 68360, 0, 0, 68365, 68372, 68379, 68386, - 68393, 68400, 68407, 68413, 68419, 68425, 68431, 68438, 68445, 68450, - 68454, 68461, 68468, 68475, 0, 0, 0, 0, 0, 0, 0, 0, 68479, 68483, 68487, - 68490, 68493, 68498, 68503, 68508, 68513, 68518, 68523, 68528, 68533, - 68538, 68543, 68552, 68561, 68566, 68571, 68576, 68581, 68586, 68591, - 68596, 68601, 68606, 68611, 68616, 0, 0, 0, 0, 0, 0, 0, 0, 68621, 68624, - 68627, 68630, 68634, 68638, 68642, 68646, 68649, 68653, 68656, 68660, - 68663, 68667, 68671, 68675, 68679, 68683, 68687, 68691, 68694, 68698, - 68702, 68706, 68710, 68714, 68718, 68722, 68726, 68730, 68734, 68738, - 68742, 68746, 68750, 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, 68852, 68856, - 68860, 68864, 68868, 68872, 68876, 68880, 68883, 68887, 68891, 68895, - 68899, 68903, 68907, 68911, 68915, 68919, 68923, 68927, 68931, 68936, - 68941, 68944, 68949, 68952, 68955, 68958, 0, 0, 0, 0, 0, 0, 0, 0, 68962, - 68971, 68980, 68989, 68998, 69007, 69016, 69025, 69034, 69042, 69049, - 69057, 69064, 69072, 69082, 69091, 69101, 69110, 69120, 69128, 69135, - 69143, 69150, 69158, 69163, 69168, 69173, 69182, 69188, 69194, 69201, - 69210, 69218, 69226, 69234, 69241, 69248, 69255, 69262, 69267, 69272, - 69277, 69282, 69287, 69292, 69297, 69302, 69310, 69318, 69324, 69329, - 69334, 69339, 69344, 69349, 69354, 69359, 69364, 69369, 69377, 69385, - 69390, 69395, 69404, 69413, 69420, 69427, 69436, 69445, 69456, 69467, - 69473, 69479, 69487, 69495, 69504, 69513, 69520, 69527, 69532, 69537, - 69548, 69559, 69567, 69575, 69585, 69595, 69606, 69617, 69626, 69635, - 69642, 69649, 69656, 69663, 69672, 69681, 69686, 69691, 69698, 69705, - 69712, 69719, 69730, 69741, 69746, 69751, 69756, 69761, 69766, 69771, - 69776, 69781, 69785, 69790, 69795, 69800, 69805, 69810, 69816, 69821, - 69826, 69833, 69840, 69847, 69854, 69861, 69869, 69877, 69882, 69887, - 69893, 69899, 69905, 69911, 69918, 69925, 69932, 69936, 69943, 69948, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 69953, 69960, 69967, 69974, 69982, - 69989, 69995, 70001, 70008, 70014, 70020, 70026, 70033, 70040, 70047, - 70054, 70061, 70068, 70075, 70082, 70089, 70096, 70103, 70110, 70117, - 70124, 70130, 70137, 70144, 70151, 70158, 70165, 70172, 70179, 70186, - 70193, 70200, 70207, 70214, 70221, 70228, 70235, 70242, 70249, 70256, - 70264, 70272, 70280, 70288, 0, 0, 0, 0, 70296, 70305, 70314, 70323, - 70332, 70341, 70350, 70357, 70364, 70371, 0, 0, 0, 0, 0, 0, 70378, 70382, - 70387, 70392, 70397, 70402, 70407, 70412, 70417, 70422, 70427, 70432, - 70436, 70440, 70445, 70450, 70454, 70459, 70464, 70469, 70474, 70479, - 70484, 70489, 70493, 70497, 70502, 70507, 70512, 70516, 70520, 70524, - 70528, 70532, 70536, 70541, 70546, 70551, 70556, 70561, 70568, 70574, - 70579, 70584, 70589, 70594, 70600, 70607, 70613, 70620, 70626, 70632, - 70637, 70644, 70650, 70655, 0, 0, 0, 0, 0, 0, 0, 0, 70661, 70665, 70669, - 70672, 70676, 70679, 70683, 70686, 70690, 70694, 70699, 70703, 70708, - 70711, 70715, 70719, 70722, 70726, 70730, 70733, 70737, 70741, 70745, - 70749, 70753, 70757, 70761, 70765, 70769, 70773, 70777, 70781, 70785, - 70789, 70793, 70797, 70801, 70805, 70808, 70811, 70815, 70819, 70823, - 70826, 70829, 70832, 70836, 70840, 70844, 70848, 70852, 70855, 70859, - 70865, 70870, 70874, 70879, 70883, 70888, 70893, 70899, 70904, 70910, - 70914, 70919, 70924, 70928, 70933, 70938, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 70942, 70945, 70949, 70953, 70956, 70959, 70962, 70965, 70968, 70971, - 70974, 70977, 0, 0, 0, 0, 0, 0, 70980, 70985, 70989, 70993, 70997, 71001, - 71005, 71009, 71013, 71017, 71021, 71025, 71029, 71033, 71037, 71041, - 71045, 71050, 71055, 71061, 71067, 71074, 71079, 71084, 71090, 71094, - 71099, 71102, 0, 0, 0, 0, 71105, 71112, 71118, 71124, 71130, 71136, - 71142, 71148, 71154, 71160, 71166, 71172, 71179, 71186, 71193, 71200, - 71207, 71214, 71221, 71228, 71235, 71241, 71247, 71254, 71260, 71267, - 71274, 71280, 71286, 71293, 71300, 71307, 71313, 71320, 71327, 71333, - 71340, 71346, 71353, 71360, 71366, 71372, 71379, 71385, 71392, 71399, - 71408, 71415, 71422, 71426, 71431, 71436, 71441, 71446, 71450, 71454, - 71459, 71463, 71468, 71473, 71478, 71483, 71487, 71492, 71496, 71501, - 71505, 71510, 71515, 71520, 71525, 71529, 71534, 71539, 71544, 71550, - 71555, 71561, 71567, 71573, 71580, 71586, 71592, 71599, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 71603, 71608, 71612, 71616, 71620, 71624, 71628, 71632, - 71636, 71640, 71644, 71648, 71652, 71656, 71660, 71664, 71668, 71672, - 71676, 71680, 71684, 71688, 71692, 71696, 71700, 71704, 71708, 71712, - 71716, 71720, 0, 0, 0, 71724, 71728, 71732, 71736, 71740, 71743, 71749, - 71752, 71756, 71759, 71765, 71771, 71779, 71782, 71786, 71789, 71792, - 71797, 71802, 71806, 71812, 71816, 71820, 71826, 71830, 71836, 71842, - 71846, 71850, 71856, 71860, 71866, 71872, 71876, 71882, 71886, 71892, - 71895, 71898, 71904, 71908, 71914, 71917, 71920, 71923, 71929, 71933, - 71937, 71943, 71949, 71953, 71956, 71962, 71967, 71972, 71977, 71984, - 71989, 71996, 72001, 72008, 72013, 72019, 72025, 72031, 72034, 72038, - 72042, 72047, 72052, 72057, 72062, 72067, 72072, 72077, 72082, 72089, - 72094, 0, 72100, 72103, 72107, 72110, 72113, 72116, 72119, 72122, 72125, - 72128, 72131, 0, 0, 0, 0, 72134, 72141, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 72146, - 72149, 72152, 72155, 72158, 72162, 72165, 72168, 72172, 72176, 72180, - 72184, 72188, 72192, 72196, 72200, 72204, 72208, 72212, 72216, 72220, - 72224, 72228, 72232, 72236, 72239, 72243, 72246, 72250, 72254, 72258, - 72262, 72266, 72269, 72273, 72276, 72279, 72283, 72287, 72291, 72295, - 72298, 72303, 72307, 72312, 72317, 72321, 72326, 72330, 72335, 72340, - 72345, 72350, 72355, 72361, 0, 0, 0, 0, 0, 0, 0, 0, 0, 72367, 72372, - 72377, 72382, 72389, 72394, 72399, 72403, 72408, 72413, 72417, 72421, - 72426, 72432, 0, 0, 72439, 72443, 72446, 72449, 72452, 72455, 72458, - 72461, 72464, 72467, 0, 0, 72470, 72475, 72480, 72486, 72493, 72499, - 72505, 72511, 72517, 72523, 72529, 72535, 72541, 72547, 72553, 72559, - 72564, 72570, 72575, 72581, 72587, 72594, 72600, 72606, 72611, 72618, - 72625, 72632, 72638, 72643, 72648, 72653, 0, 0, 0, 0, 72661, 72667, - 72673, 72679, 72685, 72691, 72697, 72703, 72709, 72715, 72721, 72727, - 72733, 72739, 72745, 72751, 72757, 72763, 72769, 72775, 72781, 72786, - 72791, 72797, 72803, 72809, 72815, 72821, 72827, 72833, 72839, 72845, - 72851, 72857, 72863, 72869, 72875, 72881, 72887, 72893, 72899, 72905, - 72911, 72917, 72923, 72929, 72935, 72940, 72945, 72951, 72956, 72960, - 72965, 72969, 72973, 72977, 72983, 72988, 72993, 72998, 73003, 73008, - 73013, 73018, 73025, 73032, 73039, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 73046, 73051, 73056, 73061, 73068, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 73075, - 73082, 73089, 73096, 73103, 73109, 73115, 73122, 73129, 73136, 73143, - 73150, 73157, 73164, 73171, 73178, 73184, 73191, 73198, 73205, 73212, - 73219, 73226, 73233, 73240, 73247, 73254, 73261, 73270, 73279, 73288, - 73297, 73306, 73315, 73324, 73333, 73341, 73349, 73357, 73365, 73373, - 73381, 73389, 73397, 73403, 73411, 0, 0, 73419, 73426, 73432, 73438, - 73444, 73450, 73456, 73462, 73468, 73474, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 73480, 73484, - 73488, 73492, 73496, 73500, 73504, 73508, 73512, 73516, 73520, 73524, - 73528, 73532, 73536, 73540, 73544, 73548, 73552, 73556, 73560, 73564, - 73568, 0, 0, 0, 0, 73572, 73576, 73580, 73584, 73588, 73592, 73596, - 73600, 73604, 73608, 73612, 73616, 73620, 73624, 73628, 73632, 73636, - 73640, 73644, 73648, 73652, 73656, 73660, 73664, 73668, 73672, 73676, - 73680, 73684, 73688, 73692, 73696, 73700, 73704, 73708, 73712, 73716, - 73720, 73724, 73728, 73732, 73736, 73740, 73744, 73748, 73752, 73756, - 73760, 73764, 0, 0, 0, 0, 73768, 73772, 73776, 73780, 73784, 73788, - 73792, 73796, 73800, 73804, 73808, 73812, 73816, 73820, 73824, 73828, - 73832, 73836, 73840, 73844, 73848, 73852, 73856, 73860, 73864, 73868, - 73872, 73876, 73880, 73884, 73888, 73892, 73896, 73900, 73904, 73908, - 73912, 73916, 73920, 73924, 73928, 73932, 73936, 73940, 73944, 73948, - 73952, 73956, 73960, 73964, 73968, 73972, 73976, 73980, 73984, 73988, - 73992, 73996, 74000, 74004, 74008, 74012, 74016, 74020, 74024, 74028, - 74032, 74036, 74040, 74044, 74048, 74052, 74056, 74060, 74064, 74068, - 74072, 74076, 74080, 74084, 74088, 74092, 74096, 74100, 74104, 74108, - 74112, 74116, 74120, 74124, 74128, 74132, 74136, 74140, 74144, 74148, - 74152, 74156, 74160, 74164, 74168, 74172, 74176, 74180, 74184, 74188, - 74192, 74196, 74200, 74204, 74208, 74212, 74216, 74220, 74224, 74228, - 74232, 74236, 74240, 74244, 74248, 74252, 74256, 74260, 74264, 74268, - 74272, 74276, 74280, 74284, 74288, 74292, 74296, 74300, 74304, 74308, - 74312, 74316, 74320, 74324, 74328, 74332, 74336, 74340, 74344, 74348, - 74352, 74356, 74360, 74364, 74368, 74372, 74376, 74380, 74384, 74388, - 74392, 74396, 74400, 74404, 74408, 74412, 74416, 74420, 74424, 74428, - 74432, 74436, 74440, 74444, 74448, 74452, 74456, 74460, 74464, 74468, - 74472, 74476, 74480, 74484, 74488, 74492, 74496, 74500, 74504, 74508, - 74512, 74516, 74520, 74524, 74528, 74532, 74536, 74540, 74544, 74548, - 74552, 74556, 74560, 74564, 74568, 74572, 74576, 74580, 74584, 74588, - 74592, 74596, 74600, 74604, 74608, 74612, 74616, 74620, 74624, 74628, - 74632, 74636, 74640, 74644, 74648, 74652, 74656, 74660, 74664, 74668, - 74672, 74676, 74680, 74684, 74688, 74692, 74696, 74700, 74704, 74708, - 74712, 74716, 74720, 74724, 74728, 74732, 74736, 74740, 74744, 74748, - 74752, 74756, 74760, 74764, 74768, 74772, 74776, 74780, 74784, 74788, - 74792, 74796, 74800, 74804, 74808, 74812, 74816, 74820, 74824, 74828, - 74832, 74836, 74840, 74844, 74848, 74852, 74856, 74860, 74864, 74868, - 74872, 74876, 74880, 74884, 74888, 74892, 74896, 74900, 74904, 74908, - 74912, 74916, 74920, 74924, 74928, 74932, 74936, 74940, 74944, 74948, - 74952, 74956, 74960, 74964, 74968, 74972, 0, 0, 74976, 74980, 74984, - 74988, 74992, 74996, 75000, 75004, 75008, 75012, 75016, 75020, 75024, - 75028, 75032, 75036, 75040, 75044, 75048, 75052, 75056, 75060, 75064, - 75068, 75072, 75076, 75080, 75084, 75088, 75092, 75096, 75100, 75104, - 75108, 75112, 75116, 75120, 75124, 75128, 75132, 75136, 75140, 75144, - 75148, 75152, 75156, 75160, 75164, 75168, 75172, 75176, 75180, 75184, - 75188, 75192, 75196, 75200, 75204, 75208, 75212, 75216, 75220, 0, 0, - 75224, 75228, 75232, 75236, 75240, 75244, 75248, 75252, 75256, 75260, - 75264, 75268, 75272, 75276, 75280, 75284, 75288, 75292, 75296, 75300, - 75304, 75308, 75312, 75316, 75320, 75324, 75328, 75332, 75336, 75340, - 75344, 75348, 75352, 75356, 75360, 75364, 75368, 75372, 75376, 75380, - 75384, 75388, 75392, 75396, 75400, 75404, 75408, 75412, 75416, 75420, - 75424, 75428, 75432, 75436, 75440, 75444, 75448, 75452, 75456, 75460, - 75464, 75468, 75472, 75476, 75480, 75484, 75488, 75492, 75496, 75500, - 75504, 75508, 75512, 75516, 75520, 75524, 75528, 75532, 75536, 75540, - 75544, 75548, 75552, 75556, 75560, 75564, 75568, 75572, 75576, 75580, - 75584, 75588, 75592, 75596, 75600, 75604, 75608, 75612, 75616, 75620, - 75624, 75628, 75632, 75636, 75640, 75644, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 75648, 75653, 75658, 75663, 75668, 75673, 75681, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 75686, 75693, 75700, 75707, 75714, 0, 0, 0, 0, 0, - 75721, 75728, 75735, 75745, 75751, 75757, 75763, 75769, 75775, 75781, - 75788, 75794, 75800, 75806, 75815, 75824, 75836, 75848, 75854, 75860, - 75866, 75873, 75880, 75887, 75894, 75901, 0, 75908, 75915, 75922, 75930, - 75937, 0, 75944, 0, 75951, 75958, 0, 75965, 75973, 0, 75980, 75987, - 75994, 76001, 76008, 76015, 76022, 76029, 76036, 76043, 76048, 76055, - 76062, 76068, 76074, 76080, 76086, 76092, 76098, 76104, 76110, 76116, - 76122, 76128, 76134, 76140, 76146, 76152, 76158, 76164, 76170, 76176, - 76182, 76188, 76194, 76200, 76206, 76212, 76218, 76224, 76230, 76236, - 76242, 76248, 76254, 76260, 76266, 76272, 76278, 76284, 76290, 76296, - 76302, 76308, 76314, 76320, 76326, 76332, 76338, 76344, 76350, 76356, - 76362, 76368, 76374, 76380, 76386, 76392, 76398, 76404, 76410, 76416, - 76422, 76428, 76434, 76440, 76446, 76452, 76458, 76464, 76470, 76476, - 76482, 76488, 76494, 76500, 76506, 76512, 76518, 76526, 76534, 76540, - 76546, 76552, 76558, 76567, 76576, 76584, 76592, 76600, 76608, 76616, - 76624, 76632, 76640, 76647, 76654, 76664, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 76674, 76680, 76686, 76692, 76698, 76703, 76708, 76714, 76720, 76726, - 76732, 76740, 76746, 76752, 76760, 76768, 76776, 76784, 76789, 76794, - 76799, 76804, 76816, 76828, 76838, 76848, 76859, 76870, 76881, 76892, - 76902, 76912, 76923, 76934, 76945, 76956, 76966, 76976, 76986, 77001, - 77016, 77031, 77038, 77045, 77052, 77059, 77069, 77079, 77089, 77100, - 77110, 77118, 77126, 77135, 77143, 77152, 77160, 77168, 77176, 77185, - 77193, 77202, 77210, 77218, 77226, 77235, 77243, 77250, 77257, 77264, - 77271, 77279, 77287, 77295, 77303, 77311, 77320, 77328, 77336, 77344, - 77352, 77360, 77369, 77377, 77385, 77393, 77401, 77409, 77417, 77425, - 77433, 77441, 77449, 77458, 77466, 77475, 77483, 77491, 77499, 77508, - 77516, 77524, 77532, 77540, 77549, 77558, 77566, 77575, 77583, 77591, - 77599, 77608, 77616, 77625, 77633, 77640, 77647, 77655, 77662, 77670, - 77677, 77685, 77693, 77702, 77710, 77719, 77727, 77735, 77743, 77752, - 77760, 77767, 77774, 77782, 77789, 77797, 77804, 77814, 77824, 77834, - 77843, 77852, 77861, 77870, 77879, 77889, 77900, 77911, 77921, 77932, - 77943, 77953, 77962, 77971, 77979, 77988, 77997, 78005, 78014, 78023, - 78031, 78040, 78049, 78057, 78066, 78075, 78083, 78092, 78101, 78109, - 78118, 78126, 78135, 78143, 78151, 78160, 78168, 78177, 78185, 78193, - 78202, 78210, 78217, 78224, 78233, 78242, 78250, 78259, 78268, 78276, - 78286, 78294, 78302, 78309, 78317, 78325, 78332, 78342, 78352, 78363, - 78373, 78384, 78392, 78400, 78409, 78417, 78426, 78434, 78442, 78451, - 78459, 78468, 78476, 78483, 78490, 78497, 78504, 78512, 78520, 78528, - 78536, 78545, 78553, 78561, 78570, 78578, 78586, 78594, 78603, 78611, - 78619, 78627, 78635, 78643, 78651, 78659, 78667, 78675, 78684, 78692, - 78700, 78708, 78716, 78724, 78733, 78742, 78750, 78758, 78766, 78775, - 78783, 78792, 78799, 78806, 78814, 78821, 78829, 78837, 78846, 78854, - 78863, 78871, 78879, 78889, 78896, 78903, 78911, 78918, 78926, 78936, - 78947, 78955, 78964, 78972, 78981, 78989, 78998, 79006, 79015, 79023, - 79032, 79041, 79049, 79057, 79065, 79074, 79081, 79089, 79098, 79107, - 79116, 79125, 79133, 79142, 79150, 79159, 79167, 79176, 79184, 79193, - 79201, 79209, 79216, 79224, 79231, 79240, 79248, 79257, 79265, 79274, - 79282, 79290, 79298, 79307, 79315, 79324, 79333, 79342, 79351, 79360, - 79368, 79377, 79385, 79394, 79402, 79411, 79419, 79428, 79436, 79444, - 79451, 79459, 79466, 79475, 79483, 79492, 79500, 79509, 79517, 79525, - 79533, 79542, 79550, 79559, 79568, 79577, 79586, 79594, 79602, 79611, - 79619, 79628, 79637, 79645, 79653, 79661, 79670, 79678, 79686, 79695, - 79703, 79711, 79719, 79727, 79732, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 79737, 79747, 79757, 79767, 79777, 79788, 79798, 79808, 79819, - 79828, 79837, 79846, 79856, 79866, 79876, 79887, 79897, 79907, 79917, - 79927, 79937, 79947, 79957, 79967, 79977, 79987, 79997, 80008, 80019, - 80029, 80039, 80050, 80061, 80072, 80082, 80092, 80102, 80112, 80122, - 80132, 80142, 80153, 80163, 80173, 80184, 80195, 80206, 80216, 80226, - 80236, 80246, 80257, 80267, 80277, 80288, 80299, 80309, 80319, 80328, - 80337, 80346, 80355, 80364, 80374, 0, 0, 80384, 80394, 80404, 80414, - 80424, 80435, 80445, 80455, 80466, 80476, 80487, 80496, 80505, 80516, - 80526, 80537, 80548, 80560, 80570, 80581, 80590, 80600, 80610, 80622, - 80632, 80642, 80652, 80662, 80672, 80681, 80690, 80699, 80708, 80718, - 80728, 80738, 80748, 80758, 80768, 80778, 80788, 80798, 80808, 80818, - 80828, 80837, 80846, 80855, 80865, 80875, 80885, 80895, 80905, 80916, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 80926, 80941, 80956, 80962, - 80968, 80974, 80980, 80986, 80992, 80998, 81004, 81012, 81016, 81019, 0, - 0, 81027, 81030, 81033, 81036, 81039, 81042, 81045, 81048, 81051, 81054, - 81057, 81060, 81063, 81066, 81069, 81072, 81075, 81083, 81092, 81103, - 81111, 81119, 81128, 81137, 81148, 81160, 0, 0, 0, 0, 0, 0, 81169, 81174, - 81179, 81186, 81193, 81199, 81205, 0, 0, 0, 0, 0, 0, 0, 0, 0, 81210, - 81220, 81230, 81240, 81249, 81260, 81269, 81278, 81288, 81298, 81310, - 81322, 81333, 81344, 81355, 81366, 81376, 81386, 81396, 81406, 81417, - 81428, 81432, 81437, 81446, 81455, 81459, 81463, 81467, 81472, 81477, - 81482, 81487, 81490, 81494, 0, 81499, 81502, 81505, 81509, 81513, 81518, - 81522, 81526, 81531, 81536, 81543, 81550, 81553, 81556, 81559, 81562, - 81565, 81569, 81573, 0, 81577, 81582, 81586, 81590, 0, 0, 0, 0, 81595, - 81600, 81607, 81612, 81617, 0, 81622, 81627, 81632, 81637, 81642, 81647, - 81652, 81657, 81662, 81667, 81672, 81677, 81686, 81695, 81703, 81711, - 81720, 81729, 81738, 81747, 81755, 81763, 81771, 81779, 81784, 81789, - 81795, 81801, 81807, 81813, 81821, 81829, 81835, 81841, 81847, 81853, - 81859, 81865, 81871, 81877, 81882, 81887, 81892, 81897, 81902, 81907, - 81912, 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, 82115, 82121, 82127, 82133, 82139, 82145, - 82151, 82157, 82163, 82169, 82175, 82181, 82187, 82193, 82199, 82205, - 82211, 82217, 82223, 82229, 82235, 82241, 82247, 82253, 82259, 82265, - 82271, 82277, 82282, 82287, 82292, 82297, 82303, 82309, 82315, 82321, - 82327, 82333, 82339, 82345, 82351, 82357, 82363, 82369, 82374, 82379, - 82384, 82389, 82401, 82413, 82424, 82435, 82447, 82459, 82467, 0, 0, - 82475, 0, 82483, 82487, 82491, 82494, 82498, 82502, 82505, 82508, 82512, - 82516, 82519, 82522, 82525, 82528, 82533, 82536, 82540, 82543, 82546, - 82549, 82552, 82555, 82558, 82561, 82564, 82567, 82570, 82573, 82577, - 82581, 82585, 82589, 82594, 82599, 82605, 82611, 82617, 82622, 82628, - 82634, 82640, 82645, 82651, 82657, 82662, 82667, 82672, 82677, 82683, - 82689, 82694, 82699, 82705, 82710, 82716, 82722, 82728, 82734, 82740, - 82744, 82749, 82753, 82758, 82762, 82767, 82772, 82778, 82784, 82790, - 82795, 82801, 82807, 82813, 82818, 82824, 82830, 82835, 82840, 82845, - 82850, 82856, 82862, 82867, 82872, 82878, 82883, 82889, 82895, 82901, - 82907, 82913, 82918, 82922, 82927, 82930, 82935, 82940, 82946, 82951, - 82956, 82960, 82966, 82971, 82976, 82981, 82986, 82991, 82996, 83001, - 83007, 83013, 83019, 83027, 83031, 83035, 83039, 83043, 83047, 83051, - 83056, 83061, 83066, 83071, 83076, 83081, 83086, 83091, 83096, 83101, - 83106, 83111, 83116, 83120, 83124, 83129, 83134, 83139, 83144, 83148, - 83153, 83158, 83163, 83168, 83172, 83177, 83182, 83187, 83192, 83196, - 83201, 83206, 83210, 83215, 83220, 83225, 83230, 83235, 83239, 83246, - 83253, 83257, 83262, 83267, 83272, 83277, 83282, 83287, 83292, 83297, - 83302, 83307, 83312, 83317, 83322, 83327, 83332, 83337, 83342, 83347, - 83352, 83357, 83362, 83367, 83372, 83377, 83382, 83387, 83392, 83397, - 83402, 0, 0, 0, 83407, 83411, 83416, 83420, 83425, 83430, 0, 0, 83434, - 83439, 83444, 83448, 83453, 83458, 0, 0, 83463, 83468, 83472, 83477, - 83482, 83487, 0, 0, 83492, 83497, 83502, 0, 0, 0, 83506, 83510, 83514, - 83517, 83520, 83524, 83528, 0, 83532, 83538, 83541, 83545, 83548, 83552, - 83556, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 83560, 83566, 83572, 83578, 83584, - 0, 0, 83588, 83594, 83600, 83606, 83612, 83618, 83625, 83632, 83639, - 83646, 83653, 83660, 0, 83667, 83674, 83681, 83687, 83694, 83701, 83708, - 83715, 83721, 83728, 83735, 83742, 83749, 83755, 83762, 83769, 83776, - 83783, 83789, 83796, 83803, 83810, 83817, 83824, 83831, 83838, 0, 83845, - 83851, 83858, 83865, 83872, 83879, 83886, 83893, 83900, 83907, 83914, - 83921, 83928, 83935, 83941, 83948, 83955, 83962, 83969, 0, 83976, 83983, - 0, 83990, 83997, 84004, 84011, 84018, 84025, 84032, 84039, 84046, 84053, - 84060, 84067, 84074, 84081, 84088, 0, 0, 84094, 84099, 84104, 84109, - 84114, 84119, 84124, 84129, 84134, 84139, 84144, 84149, 84154, 84159, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 84164, 84171, 84178, 84185, 84192, 84199, - 84206, 84213, 84220, 84227, 84234, 84241, 84248, 84255, 84262, 84269, - 84276, 84283, 84290, 84297, 84305, 84313, 84320, 84327, 84332, 84340, - 84348, 84355, 84362, 84367, 84374, 84379, 84384, 84391, 84396, 84401, - 84406, 84414, 84419, 84424, 84431, 84436, 84441, 84448, 84455, 84460, - 84465, 84470, 84475, 84480, 84485, 84490, 84495, 84500, 84507, 84512, - 84519, 84524, 84529, 84534, 84539, 84544, 84549, 84554, 84559, 84564, - 84569, 84574, 84581, 84588, 84595, 84602, 84608, 84613, 84620, 84625, - 84630, 84639, 84646, 84655, 84662, 84667, 84672, 84680, 84685, 84690, - 84695, 84700, 84705, 84712, 84717, 84722, 84727, 84732, 84737, 84744, - 84751, 84758, 84765, 84772, 84779, 84786, 84793, 84800, 84807, 84814, - 84821, 84828, 84835, 84842, 84849, 84856, 84863, 84870, 84877, 84884, - 84891, 84898, 84905, 84912, 84919, 84926, 84933, 0, 0, 0, 0, 0, 84940, - 84948, 84956, 0, 0, 0, 0, 84961, 84965, 84969, 84973, 84977, 84981, - 84985, 84989, 84993, 84997, 85002, 85007, 85012, 85017, 85022, 85027, - 85032, 85037, 85042, 85048, 85054, 85060, 85067, 85074, 85081, 85088, - 85095, 85102, 85108, 85114, 85120, 85127, 85134, 85141, 85148, 85155, - 85162, 85169, 85176, 85183, 85190, 85197, 85204, 85211, 85218, 0, 0, 0, - 85225, 85233, 85241, 85249, 85257, 85265, 85275, 85285, 85293, 85301, - 85309, 85317, 85325, 85331, 85338, 85347, 85356, 85365, 85374, 85383, - 85392, 85402, 85413, 85423, 85434, 85443, 85452, 85461, 85471, 85482, - 85492, 85503, 85514, 85523, 85531, 85537, 85543, 85549, 85555, 85563, - 85571, 85577, 85584, 85594, 85601, 85608, 85615, 85622, 85629, 85639, - 85646, 85653, 85661, 85669, 85678, 85687, 85696, 85705, 85714, 85722, - 85731, 85740, 85749, 85753, 85760, 85765, 85770, 85774, 85778, 85782, - 85786, 85791, 85796, 85802, 85808, 85812, 85818, 85822, 85826, 85830, - 85834, 85838, 85842, 85848, 0, 0, 0, 0, 0, 85852, 85857, 85862, 85867, - 85872, 85879, 85884, 85889, 85894, 85899, 85904, 85909, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 85914, - 85921, 85930, 85939, 85946, 85953, 85960, 85967, 85974, 85981, 85987, - 85994, 86001, 86008, 86015, 86022, 86029, 86036, 86043, 86052, 86059, - 86066, 86073, 86080, 86087, 86094, 86101, 86108, 86117, 86124, 86131, - 86138, 86145, 86152, 86159, 86168, 86175, 86182, 86189, 86196, 86205, - 86212, 86219, 86226, 86234, 86243, 0, 0, 86252, 86256, 86260, 86265, - 86270, 86275, 86280, 86284, 86289, 86294, 86299, 86304, 86309, 86314, - 86318, 86322, 86326, 86331, 86336, 86340, 86345, 86350, 86354, 86358, - 86363, 86368, 86373, 86378, 86383, 0, 0, 0, 86388, 86392, 86397, 86402, - 86406, 86411, 86415, 86420, 86425, 86430, 86435, 86439, 86443, 86448, - 86453, 86458, 86463, 86467, 86472, 86476, 86481, 86486, 86490, 86495, - 86500, 86505, 86509, 86513, 86518, 86523, 86528, 86533, 86538, 86543, - 86548, 86553, 86558, 86563, 86568, 86573, 86578, 86583, 86588, 86593, - 86598, 86603, 86608, 86613, 86618, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 86623, 86627, 86632, 86637, 86642, 86646, - 86651, 86656, 86661, 86666, 86670, 86674, 86679, 86684, 86689, 86694, - 86698, 86703, 86708, 86713, 86718, 86723, 86728, 86732, 86737, 86742, - 86747, 86752, 86757, 86762, 86767, 0, 86772, 86777, 86782, 86788, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 86794, 86799, 86804, 86809, 86814, 86819, - 86824, 86829, 86834, 86839, 86844, 86849, 86854, 86859, 86864, 86869, - 86874, 86879, 86884, 86889, 86894, 86899, 86904, 86909, 86914, 86919, - 86924, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 86931, 86936, 86941, 86946, 86951, 86956, 86961, - 86966, 86971, 86976, 86981, 86986, 86991, 86996, 87001, 87006, 87011, - 87016, 87021, 87026, 87031, 87036, 87041, 87046, 87051, 87056, 87061, - 87065, 87069, 87073, 0, 87078, 87084, 87089, 87094, 87099, 87104, 87110, - 87116, 87122, 87128, 87134, 87140, 87146, 87152, 87158, 87164, 87170, - 87176, 87182, 87187, 87193, 87199, 87204, 87210, 87215, 87221, 87227, - 87232, 87238, 87244, 87249, 87255, 87261, 87267, 87273, 87279, 87285, 0, - 0, 0, 0, 87290, 87296, 87302, 87308, 87314, 87320, 87326, 87332, 87338, - 87345, 87350, 87355, 87361, 87367, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 87373, 87378, 87383, 87388, 87394, 87399, 87405, 87411, - 87417, 87423, 87430, 87436, 87443, 87448, 87453, 87458, 87463, 87468, - 87473, 87478, 87483, 87488, 87493, 87498, 87503, 87508, 87513, 87518, - 87523, 87528, 87533, 87538, 87543, 87548, 87553, 87558, 87563, 87568, - 87573, 87578, 87583, 87588, 87593, 87598, 87604, 87609, 87615, 87621, - 87627, 87633, 87640, 87646, 87653, 87658, 87663, 87668, 87673, 87678, - 87683, 87688, 87693, 87698, 87703, 87708, 87713, 87718, 87723, 87728, - 87733, 87738, 87743, 87748, 87753, 87758, 87763, 87768, 87773, 87778, - 87783, 87788, 87793, 87798, 87803, 87808, 87813, 87818, 87823, 87828, - 87833, 87838, 87843, 87848, 87853, 87858, 87863, 87868, 87873, 87878, - 87883, 87888, 87893, 87898, 87903, 87908, 87913, 87918, 87923, 87928, - 87933, 87938, 87943, 87948, 87953, 87958, 87963, 87968, 87973, 87978, - 87983, 87988, 87993, 87998, 88003, 88008, 88013, 88018, 88023, 88028, - 88033, 88038, 88043, 88048, 88053, 88058, 88063, 88068, 88072, 88077, - 88082, 88087, 88092, 88097, 88102, 88107, 88112, 88117, 88122, 88127, - 88132, 88136, 88140, 88144, 88148, 88152, 88156, 88160, 88165, 88170, 0, - 0, 88175, 88180, 88184, 88188, 88192, 88196, 88200, 88204, 88208, 88212, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 88216, 88220, 88224, 88228, - 88232, 88236, 0, 0, 88241, 0, 88246, 88250, 88255, 88260, 88265, 88270, - 88275, 88280, 88285, 88290, 88295, 88299, 88304, 88309, 88314, 88319, - 88323, 88328, 88333, 88338, 88343, 88347, 88352, 88357, 88362, 88367, - 88371, 88376, 88381, 88386, 88391, 88396, 88401, 88406, 88411, 88416, - 88421, 88426, 88431, 88435, 88440, 88445, 88450, 88455, 0, 88460, 88465, - 0, 0, 0, 88470, 0, 0, 88475, 88480, 88487, 88494, 88501, 88508, 88515, - 88522, 88529, 88536, 88543, 88550, 88557, 88564, 88571, 88578, 88585, - 88592, 88599, 88606, 88613, 88620, 88627, 0, 88634, 88641, 88647, 88653, - 88659, 88666, 88673, 88681, 88689, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 88698, 88703, - 88708, 88713, 88718, 88723, 88728, 88733, 88738, 88743, 88748, 88753, - 88758, 88763, 88768, 88773, 88778, 88783, 88788, 88793, 88798, 88803, - 88808, 88812, 88817, 88822, 88828, 88832, 0, 0, 0, 88836, 88842, 88846, - 88851, 88856, 88861, 88865, 88870, 88874, 88879, 88884, 88888, 88892, - 88896, 88900, 88904, 88909, 88914, 88918, 88923, 88928, 88932, 88937, - 88942, 88947, 88952, 88957, 0, 0, 0, 0, 0, 88962, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 88967, 88970, 88974, 88978, 0, 88983, 88987, 0, - 0, 0, 0, 0, 88991, 88996, 89002, 89006, 89010, 89013, 89017, 89021, 0, - 89025, 89029, 89033, 0, 89037, 89041, 89045, 89049, 89053, 89057, 89061, - 89065, 89069, 89073, 89077, 89080, 89083, 89087, 89091, 89095, 89098, - 89101, 89104, 89108, 89112, 89116, 89120, 89124, 89128, 89131, 89135, 0, - 0, 0, 0, 89139, 89144, 89148, 0, 0, 0, 0, 89152, 89155, 89158, 89161, - 89164, 89167, 89171, 89175, 89180, 0, 0, 0, 0, 0, 0, 0, 0, 89185, 89190, - 89196, 89201, 89207, 89212, 89217, 89222, 89228, 0, 0, 0, 0, 0, 0, 0, - 89233, 89241, 89249, 89257, 89265, 89273, 89281, 89289, 89297, 89305, - 89313, 89321, 89329, 89337, 89345, 89353, 89361, 89369, 89377, 89385, - 89393, 89401, 89409, 89417, 89425, 89433, 89441, 89449, 89457, 89465, - 89472, 89480, 89488, 89492, 89497, 89502, 89507, 89512, 89517, 89522, - 89527, 89531, 89536, 89540, 89545, 89549, 89554, 89558, 89563, 89568, - 89573, 89578, 89583, 89588, 89593, 89598, 89603, 89608, 89613, 89618, - 89623, 89628, 89633, 89638, 89643, 89648, 89653, 89658, 89663, 89668, - 89673, 89678, 89683, 89688, 89693, 89698, 89703, 89708, 89713, 89718, - 89723, 89728, 89733, 89738, 89743, 89748, 0, 0, 0, 89753, 89758, 89767, - 89775, 89784, 89793, 89804, 89815, 89822, 89829, 89836, 89843, 89850, - 89857, 89864, 89871, 89878, 89885, 89892, 89899, 89906, 89913, 89920, - 89927, 89934, 89941, 89948, 89955, 89962, 0, 0, 89969, 89975, 89981, - 89987, 89993, 90000, 90007, 90015, 90023, 90030, 90037, 90044, 90051, - 90058, 90065, 90072, 90079, 90086, 90093, 90100, 90107, 90114, 90121, - 90128, 90135, 90142, 90149, 0, 0, 0, 0, 0, 90156, 90162, 90168, 90174, - 90180, 90187, 90194, 90202, 90210, 90216, 90222, 90229, 90235, 90241, - 90247, 90253, 90260, 90267, 90274, 90281, 90288, 90295, 90302, 90309, - 90316, 90323, 90330, 90337, 90344, 90351, 90358, 90365, 90372, 90379, - 90386, 90393, 90400, 90407, 90414, 90421, 90428, 90435, 90442, 90449, - 90456, 90463, 90470, 90477, 90484, 90491, 90498, 90505, 90512, 90519, - 90526, 90533, 90540, 90547, 90554, 90561, 90568, 90575, 90582, 90589, - 90596, 90603, 90610, 90617, 90624, 90631, 90638, 90645, 90652, 90659, - 90666, 90673, 90680, 90687, 90694, 90701, 90708, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 19298, 19302, 19306, 19310, 19313, 19317, 19321, 19325, 19329, 19333, + 19337, 19341, 19345, 19349, 19353, 19357, 19361, 19365, 19369, 19373, + 19376, 19380, 19384, 19388, 19392, 19396, 19400, 19404, 19408, 19412, + 19416, 19420, 19424, 19428, 19432, 19436, 19440, 19444, 19448, 19452, + 19456, 19460, 19464, 19468, 19472, 19476, 19480, 19484, 19488, 19492, + 19496, 19500, 0, 19504, 19508, 19512, 19516, 0, 0, 19520, 19524, 19528, + 19532, 19536, 19540, 19544, 0, 19548, 0, 19552, 19556, 19560, 19564, 0, + 0, 19568, 19572, 19576, 19580, 19584, 19588, 19592, 19596, 19600, 19604, + 19608, 19612, 19616, 19620, 19624, 19628, 19632, 19636, 19640, 19644, + 19648, 19652, 19656, 19659, 19663, 19667, 19671, 19675, 19679, 19683, + 19687, 19691, 19695, 19699, 19703, 19707, 19711, 19715, 19719, 19723, + 19727, 0, 19731, 19735, 19739, 19743, 0, 0, 19747, 19751, 19755, 19759, + 19763, 19767, 19771, 19775, 19779, 19783, 19787, 19791, 19795, 19799, + 19803, 19807, 19811, 19816, 19821, 19826, 19832, 19838, 19843, 19848, + 19854, 19857, 19861, 19865, 19869, 19873, 19877, 19881, 19885, 0, 19889, + 19893, 19897, 19901, 0, 0, 19905, 19909, 19913, 19917, 19921, 19925, + 19929, 0, 19933, 0, 19937, 19941, 19945, 19949, 0, 0, 19953, 19957, + 19961, 19965, 19969, 19973, 19977, 19981, 19985, 19990, 19995, 20000, + 20006, 20012, 20017, 0, 20022, 20026, 20030, 20034, 20038, 20042, 20046, + 20050, 20054, 20058, 20062, 20066, 20070, 20074, 20078, 20082, 20086, + 20089, 20093, 20097, 20101, 20105, 20109, 20113, 20117, 20121, 20125, + 20129, 20133, 20137, 20141, 20145, 20149, 20153, 20157, 20161, 20165, + 20169, 20173, 20177, 20181, 20185, 20189, 20193, 20197, 20201, 20205, + 20209, 20213, 20217, 20221, 20225, 20229, 20233, 20237, 20241, 20245, 0, + 20249, 20253, 20257, 20261, 0, 0, 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, 20492, 20496, 20500, 20504, 20508, 20512, 20516, 20520, + 20524, 20528, 0, 0, 0, 0, 20532, 20537, 20541, 20544, 20549, 20552, + 20555, 20558, 20563, 20567, 20572, 20575, 20578, 20581, 20584, 20587, + 20590, 20593, 20596, 20599, 20603, 20607, 20611, 20615, 20619, 20623, + 20627, 20631, 20635, 20639, 0, 0, 0, 20645, 20651, 20655, 20659, 20663, + 20669, 20673, 20677, 20681, 20687, 20691, 20695, 20699, 20705, 20709, + 20713, 20717, 20723, 20729, 20735, 20743, 20749, 20755, 20761, 20767, + 20773, 0, 0, 0, 0, 0, 0, 20779, 20782, 20785, 20788, 20791, 20794, 20797, + 20801, 20804, 20808, 20812, 20816, 20820, 20824, 20827, 20831, 20835, + 20839, 20843, 20847, 20851, 20855, 20859, 20863, 20867, 20871, 20874, + 20878, 20882, 20886, 20890, 20894, 20898, 20902, 20906, 20910, 20914, + 20918, 20922, 20926, 20930, 20934, 20938, 20942, 20946, 20950, 20953, + 20957, 20961, 20965, 20969, 20973, 20977, 20981, 20985, 20989, 20993, + 20997, 21001, 21005, 21009, 21013, 21017, 21021, 21025, 21029, 21033, + 21037, 21041, 21045, 21049, 21053, 21057, 21061, 21065, 21069, 21073, + 21077, 21081, 21085, 21088, 21092, 21096, 21100, 21104, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 21108, 21111, 21115, 21118, 21122, 21125, 21129, 21135, + 21140, 21144, 21147, 21151, 21155, 21160, 21164, 21169, 21173, 21178, + 21182, 21187, 21191, 21196, 21202, 21206, 21211, 21215, 21220, 21226, + 21230, 21236, 21242, 21246, 21251, 21259, 21267, 21274, 21279, 21284, + 21293, 21300, 21307, 21312, 21318, 21322, 21326, 21330, 21334, 21338, + 21342, 21346, 21350, 21354, 21358, 21364, 21369, 21374, 21377, 21381, + 21385, 21390, 21394, 21399, 21403, 21408, 21412, 21417, 21421, 21426, + 21430, 21435, 21439, 21444, 21450, 21454, 21459, 21463, 21467, 21471, + 21475, 21479, 21482, 21486, 21492, 21497, 21502, 21506, 21510, 21514, + 21519, 21523, 21528, 21532, 21537, 21540, 21544, 21548, 21553, 21557, + 21562, 21566, 21571, 21577, 21581, 21585, 21589, 21593, 21597, 21601, + 21605, 21609, 21613, 21617, 21621, 21627, 21630, 21634, 21638, 21643, + 21647, 21652, 21656, 21661, 21665, 21670, 21674, 21679, 21683, 21688, + 21692, 21697, 21703, 21707, 21711, 21717, 21723, 21729, 21735, 21739, + 21743, 21747, 21751, 21755, 21759, 21765, 21769, 21773, 21777, 21782, + 21786, 21791, 21795, 21800, 21804, 21809, 21813, 21818, 21822, 21827, + 21831, 21836, 21842, 21846, 21852, 21856, 21860, 21864, 21868, 21872, + 21876, 21882, 21885, 21889, 21893, 21898, 21902, 21907, 21911, 21916, + 21920, 21925, 21929, 21934, 21938, 21943, 21947, 21952, 21958, 21961, + 21965, 21969, 21974, 21979, 21983, 21987, 21991, 21995, 21999, 22003, + 22009, 22013, 22017, 22021, 22026, 22030, 22035, 22039, 22044, 22050, + 22053, 22058, 22062, 22066, 22070, 22074, 22078, 22082, 22086, 22092, + 22096, 22100, 22104, 22109, 22113, 22118, 22122, 22127, 22131, 22136, + 22140, 22145, 22149, 22154, 22158, 22163, 22166, 22170, 22174, 22178, + 22182, 22186, 22190, 22194, 22198, 22204, 22208, 22212, 22216, 22221, + 22225, 22230, 22234, 22239, 22243, 22248, 22252, 22257, 22261, 22266, + 22270, 22275, 22281, 22284, 22289, 22293, 22298, 22304, 22310, 22316, + 22322, 22328, 22334, 22340, 22344, 22348, 22352, 22356, 22360, 22364, + 22368, 22372, 22377, 22381, 22386, 22390, 22395, 22399, 22404, 22408, + 22413, 22417, 22422, 22426, 22431, 22435, 22439, 22443, 22447, 22451, + 22455, 22459, 22465, 22468, 22472, 22476, 22481, 22485, 22490, 22494, + 22499, 22503, 22508, 22512, 22517, 22521, 22526, 22530, 22535, 22541, + 22545, 22551, 22556, 22562, 22566, 22572, 22577, 22581, 22585, 22589, + 22593, 22597, 22602, 22605, 22609, 22614, 22618, 22623, 22626, 22630, + 22634, 22638, 22642, 22646, 22650, 22654, 22658, 22662, 22666, 22670, + 22675, 22679, 22683, 22689, 22693, 22699, 22703, 22709, 22713, 22717, + 22721, 22725, 22729, 22734, 22738, 22742, 22746, 22750, 22754, 22758, + 22762, 22766, 22770, 22774, 22780, 22786, 22792, 22798, 22804, 22809, + 22815, 22820, 22825, 22829, 22833, 22837, 22841, 22845, 22849, 22853, + 22857, 22861, 22865, 22869, 22873, 22877, 22882, 22887, 22892, 22896, + 22900, 22904, 22908, 22912, 22916, 22920, 22924, 22928, 22932, 22938, + 22944, 22950, 22956, 22962, 22968, 22974, 22980, 22986, 22990, 22994, + 22998, 23002, 23006, 23010, 23014, 23020, 23026, 23032, 23038, 23044, + 23050, 23056, 23062, 23068, 23073, 23078, 23083, 23088, 23094, 23100, + 23106, 23112, 23118, 23124, 23130, 23136, 23142, 23148, 23154, 23159, + 23165, 23171, 23177, 23182, 23187, 23192, 23197, 23202, 23207, 23212, + 23217, 23222, 23227, 23232, 23237, 23241, 23246, 23251, 23256, 23261, + 23266, 23271, 23276, 23281, 23286, 23291, 23296, 23301, 23306, 23311, + 23316, 23321, 23326, 23331, 23336, 23341, 23346, 23351, 23356, 23361, + 23366, 23371, 23376, 23381, 23386, 23390, 23395, 23400, 23405, 23410, + 23415, 23420, 23425, 23430, 23435, 23440, 23445, 23450, 23455, 23460, + 23465, 23470, 23475, 23480, 23485, 23490, 23495, 23500, 23505, 23510, + 23515, 23520, 23525, 23530, 23535, 23540, 23545, 23549, 23554, 23559, + 23564, 23569, 23574, 23578, 23583, 23589, 23594, 23599, 23604, 23609, + 23615, 23620, 23625, 23630, 23635, 23640, 23645, 23650, 23655, 23660, + 23665, 23670, 23675, 23680, 23685, 23690, 23695, 23700, 23705, 23710, + 23715, 23720, 23725, 23730, 23735, 23740, 23745, 23750, 23755, 23760, + 23765, 23770, 23775, 23780, 23785, 23790, 23795, 23800, 23805, 23810, + 23815, 23820, 23825, 23830, 23835, 23841, 23846, 23851, 23856, 23861, + 23866, 23871, 23876, 23881, 23886, 23891, 23896, 23901, 23906, 23911, + 23916, 23921, 23926, 23931, 23936, 23941, 23946, 23951, 23956, 23961, + 23966, 23971, 23976, 23981, 23986, 23991, 23996, 24001, 24006, 24011, + 24016, 24021, 24026, 24031, 24037, 24041, 24045, 24049, 24053, 24057, + 24061, 24065, 0, 0, 0, 0, 0, 0, 0, 0, 0, 24069, 24074, 24079, 24084, + 24089, 24094, 24099, 24104, 24109, 24114, 24119, 24124, 24129, 24134, + 24139, 24144, 24149, 24154, 24159, 24164, 24169, 24174, 24179, 24184, + 24189, 24194, 24199, 24204, 24209, 0, 0, 0, 24215, 24225, 24228, 24235, + 24239, 24243, 24247, 24255, 24259, 24264, 24269, 24274, 24278, 24283, + 24288, 24291, 24295, 24299, 24308, 24312, 24316, 24322, 24325, 24329, + 24336, 24340, 24348, 24353, 24358, 24363, 24368, 24377, 24382, 24386, + 24395, 24398, 24404, 24408, 24414, 24419, 24425, 24433, 24439, 24444, + 24451, 24456, 24460, 24464, 24474, 24480, 24484, 24494, 24500, 24504, + 24508, 24515, 24522, 24527, 24532, 24541, 24545, 24549, 24553, 24561, + 24568, 24572, 24576, 24580, 24584, 24588, 24592, 24596, 24600, 24604, + 24608, 24612, 24617, 24622, 24627, 24631, 24635, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 24639, 24643, 24647, 24651, 24655, 24660, 24665, + 24670, 24675, 24680, 24684, 24689, 24693, 0, 24697, 24702, 24707, 24712, + 24716, 24721, 24726, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 24731, 24735, + 24739, 24743, 24747, 24752, 24757, 24762, 24767, 24772, 24776, 24781, + 24785, 24789, 24793, 24798, 24803, 24808, 24812, 24817, 24822, 24827, + 24833, 0, 0, 0, 0, 0, 0, 0, 0, 0, 24838, 24842, 24846, 24850, 24854, + 24859, 24864, 24869, 24874, 24879, 24883, 24888, 24892, 24896, 24900, + 24905, 24910, 24915, 24919, 24924, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 24929, 24933, 24937, 24941, 24945, 24950, 24955, 24960, 24965, 24970, + 24974, 24979, 24983, 0, 24987, 24992, 24997, 0, 25002, 25007, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 25012, 25015, 25019, 25023, 25027, 25031, 25035, + 25039, 25043, 25047, 25051, 25055, 25059, 25063, 25067, 25071, 25075, + 25079, 25082, 25086, 25090, 25094, 25098, 25102, 25106, 25110, 25114, + 25118, 25122, 25126, 25130, 25134, 25138, 25141, 25145, 25149, 25155, + 25161, 25167, 25173, 25179, 25185, 25191, 25197, 25203, 25209, 25215, + 25221, 25227, 25233, 25242, 25251, 25257, 25263, 25269, 25274, 25278, + 25283, 25288, 25293, 25297, 25302, 25307, 25312, 25316, 25321, 25325, + 25330, 25335, 25340, 25345, 25349, 25353, 25357, 25361, 25365, 25369, + 25373, 25377, 25381, 25385, 25391, 25395, 25399, 25403, 25407, 25411, + 25419, 25425, 25429, 25435, 25439, 25445, 25449, 0, 0, 25453, 25457, + 25460, 25463, 25466, 25469, 25472, 25475, 25478, 25481, 0, 0, 0, 0, 0, 0, + 25484, 25492, 25500, 25508, 25516, 25524, 25532, 25540, 25548, 25556, 0, + 0, 0, 0, 0, 0, 25564, 25567, 25570, 25573, 25578, 25581, 25586, 25593, + 25601, 25606, 25613, 25616, 25623, 25630, 25637, 0, 25641, 25645, 25648, + 25651, 25654, 25657, 25660, 25663, 25666, 25669, 0, 0, 0, 0, 0, 0, 25672, + 25675, 25678, 25681, 25684, 25687, 25691, 25695, 25699, 25703, 25707, + 25711, 25714, 25718, 25722, 25725, 25729, 25733, 25737, 25741, 25745, + 25749, 25753, 25756, 25759, 25763, 25767, 25770, 25774, 25778, 25782, + 25786, 25790, 25794, 25798, 25802, 25809, 25814, 25819, 25824, 25829, + 25835, 25841, 25847, 25853, 25858, 25864, 25870, 25875, 25881, 25887, + 25893, 25899, 25905, 25910, 25916, 25921, 25927, 25933, 25939, 25945, + 25951, 25956, 25961, 25967, 25973, 25978, 25984, 25989, 25995, 26000, + 26005, 26011, 26017, 26023, 26029, 26035, 26041, 26047, 26053, 26059, + 26065, 26071, 26077, 26082, 26087, 26092, 26098, 0, 0, 0, 0, 0, 0, 0, 0, + 26104, 26113, 26122, 26130, 26138, 26148, 26156, 26165, 26172, 26179, + 26186, 26194, 26202, 26210, 26218, 26226, 26234, 26242, 26250, 26257, + 26265, 26273, 26281, 26289, 26297, 26307, 26317, 26327, 26337, 26347, + 26357, 26367, 26377, 26387, 26397, 26407, 26417, 26427, 26437, 26445, + 26453, 26463, 26471, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 26481, 26486, + 26489, 26493, 26497, 26501, 26505, 26509, 26513, 26517, 26521, 26525, + 26529, 26533, 26537, 26541, 26545, 26548, 26552, 26556, 26560, 26563, + 26566, 26569, 26573, 26577, 26581, 26585, 26589, 0, 0, 0, 26592, 26596, + 26600, 26604, 26609, 26614, 26619, 26624, 26628, 26632, 26637, 26642, 0, + 0, 0, 0, 26648, 26652, 26657, 26662, 26667, 26672, 26676, 26680, 26684, + 26689, 26693, 26697, 0, 0, 0, 0, 26701, 0, 0, 0, 26705, 26709, 26713, + 26717, 26720, 26723, 26726, 26729, 26732, 26735, 26738, 26741, 26744, + 26749, 26755, 26761, 26767, 26773, 26778, 26784, 26790, 26796, 26801, + 26807, 26812, 26818, 26824, 26829, 26835, 26841, 26847, 26853, 26858, + 26863, 26869, 26875, 26880, 26886, 26891, 26897, 26902, 26908, 0, 0, + 26914, 26920, 26926, 26932, 26938, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 26944, 26951, 26958, 26964, 26971, 26978, 26984, 26991, 26998, 27005, + 27012, 27018, 27025, 27032, 27038, 27045, 27052, 27059, 27066, 27073, + 27080, 27086, 27093, 27099, 27105, 27112, 27118, 27125, 27132, 27139, + 27146, 27153, 27160, 27166, 27173, 27180, 27186, 27193, 27200, 27207, + 27214, 27221, 0, 0, 0, 0, 0, 0, 27228, 27236, 27243, 27250, 27256, 27263, + 27269, 27276, 27282, 27289, 27296, 27303, 27310, 27317, 27324, 27331, + 27338, 27345, 27351, 27358, 27364, 27370, 27377, 27384, 27391, 27397, 0, + 0, 0, 0, 0, 0, 27403, 27409, 27414, 27419, 27424, 27429, 27434, 27439, + 27444, 27449, 0, 0, 0, 0, 27454, 27460, 27466, 27470, 27476, 27482, + 27488, 27494, 27500, 27506, 27512, 27518, 27524, 27530, 27536, 27542, + 27548, 27554, 27560, 27564, 27570, 27576, 27582, 27588, 27594, 27600, + 27606, 27612, 27618, 27624, 27630, 27636, 27642, 27648, 27654, 27658, + 27663, 27668, 27673, 27677, 27682, 27686, 27691, 27696, 27701, 27706, + 27711, 27716, 27721, 27726, 27731, 27735, 27739, 27744, 27749, 27754, + 27758, 27762, 27767, 27772, 27777, 27782, 0, 0, 27788, 27792, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 27799, 27805, + 27811, 27815, 27819, 27823, 27827, 27833, 27837, 27843, 27847, 27853, + 27859, 27867, 27873, 27881, 27885, 27889, 27893, 27899, 27902, 27907, + 27911, 27917, 27921, 27925, 27931, 27935, 27941, 27945, 27951, 27959, + 27967, 27975, 27981, 27985, 27991, 27995, 28001, 28005, 28008, 28014, + 28018, 28024, 28027, 28030, 28033, 28037, 28041, 28047, 28053, 28057, + 28060, 28064, 28069, 28074, 28081, 28086, 28093, 28100, 28109, 28116, + 28125, 28130, 28137, 28144, 28153, 28158, 28165, 28170, 28176, 28182, + 28188, 28194, 28200, 28206, 0, 0, 0, 0, 28212, 28216, 28219, 28222, + 28225, 28228, 28231, 28234, 28237, 28240, 28243, 28246, 28249, 28252, + 28257, 28262, 28267, 28270, 28275, 28280, 28285, 28290, 28297, 28302, + 28307, 28312, 28317, 28324, 28330, 28336, 28342, 28348, 28354, 28363, + 28372, 28378, 28384, 28393, 28402, 28411, 28420, 28429, 28438, 28447, + 28456, 0, 0, 0, 28465, 28469, 28473, 28477, 28480, 28483, 28486, 28490, + 28493, 28496, 28500, 28503, 28507, 28511, 28515, 28519, 28523, 28527, + 28531, 28535, 28539, 28543, 28546, 28550, 28554, 28558, 28561, 28564, + 28567, 28571, 28575, 28579, 28583, 28586, 28592, 28598, 28604, 28609, + 28614, 28619, 28624, 28629, 28634, 0, 0, 0, 28638, 28642, 28646, 28650, + 28653, 28656, 28659, 28662, 28665, 28668, 28671, 28674, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 28677, 28680, 28684, + 28688, 28692, 28696, 28700, 28704, 28708, 28712, 28716, 28720, 28724, + 28728, 28732, 28735, 28739, 28743, 28747, 28751, 28755, 28759, 28762, + 28766, 28770, 28774, 28778, 28781, 28784, 28788, 28791, 28795, 28799, + 28803, 28807, 28811, 28814, 28819, 28824, 28829, 28833, 28837, 28842, + 28846, 28851, 28855, 28861, 28866, 28871, 28876, 28882, 28887, 28893, + 28899, 28905, 28909, 0, 0, 0, 28913, 28918, 28927, 28932, 28939, 28944, + 28948, 28951, 28954, 28957, 28960, 28963, 28966, 28969, 28972, 0, 0, 0, + 28975, 28979, 28983, 28987, 28994, 29000, 29006, 29012, 29018, 29024, + 29030, 29036, 29042, 29048, 29055, 29062, 29069, 29076, 29083, 29090, + 29097, 29104, 29111, 29118, 29125, 29132, 29139, 29146, 29153, 29160, + 29167, 29174, 29181, 29188, 29195, 29202, 29209, 29216, 29223, 29230, + 29237, 29244, 29251, 29258, 29266, 29274, 29282, 29288, 29294, 29300, + 29308, 29317, 29322, 29328, 29334, 29342, 29348, 29354, 29360, 29365, + 29372, 29377, 29383, 29389, 29397, 29402, 29408, 29413, 29420, 29426, + 29434, 29442, 29448, 29454, 29461, 29468, 29474, 29480, 29486, 29492, + 29497, 29503, 29511, 29518, 29523, 29529, 29535, 29541, 29549, 29553, + 29559, 29565, 29571, 29577, 29583, 29589, 29593, 29598, 29603, 29610, + 29615, 29619, 29624, 29628, 29632, 29636, 29641, 29646, 29650, 29654, + 29658, 29663, 29667, 29672, 29677, 29681, 29686, 29690, 29695, 29699, + 29704, 29709, 29715, 29720, 29725, 29729, 29734, 29740, 29747, 29751, + 29756, 29761, 29765, 29770, 29774, 29780, 29787, 29794, 29799, 29804, + 29808, 29814, 29819, 29823, 29828, 29833, 29839, 29844, 29850, 29855, + 29861, 29867, 29873, 29879, 29886, 29893, 29900, 29907, 29914, 29919, + 29927, 29936, 29945, 29954, 29963, 29972, 29981, 29993, 30002, 30011, + 30020, 30025, 30030, 30036, 30044, 30052, 30059, 30066, 30073, 30080, + 30088, 30097, 30106, 30115, 30124, 30133, 30142, 30151, 30160, 30169, + 30178, 30187, 30196, 30205, 30214, 30222, 30231, 30242, 30250, 30260, + 30271, 30280, 30289, 30299, 30308, 30316, 30325, 30331, 30336, 30344, + 30349, 30356, 30361, 30370, 30375, 30380, 30387, 30392, 30397, 30405, + 30413, 30422, 30431, 30436, 30443, 30453, 30461, 30470, 30475, 30481, + 30486, 30493, 30498, 30507, 30512, 30517, 30522, 30529, 30534, 30539, + 30548, 30556, 30561, 30566, 30573, 30580, 30584, 30588, 30591, 30594, + 30597, 30600, 30603, 30606, 30613, 30616, 30619, 30624, 30628, 30632, + 30636, 30640, 30644, 30654, 30660, 30666, 30672, 30680, 30688, 30694, + 30699, 30705, 30711, 30716, 30722, 30728, 30733, 30739, 30745, 30753, + 30758, 30764, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 30770, 30775, 30784, 30792, 30800, 30807, 30814, 30821, 30828, + 30836, 30844, 30854, 30864, 30872, 30880, 30888, 30896, 30905, 30914, + 30922, 30930, 30939, 30948, 30958, 30968, 30977, 30986, 30994, 31002, + 31010, 31018, 31028, 31038, 31046, 31054, 31062, 31070, 31078, 31086, + 31094, 31102, 31109, 31116, 31124, 31132, 31141, 31150, 31159, 31168, + 31178, 31188, 31195, 31202, 31210, 31218, 31227, 31236, 31244, 31252, + 31264, 31276, 31285, 31294, 31303, 31312, 31319, 31326, 31334, 31342, + 31350, 31358, 31366, 31374, 31382, 31390, 31399, 31408, 31417, 31426, + 31435, 31444, 31453, 31462, 31472, 31482, 31491, 31500, 31507, 31514, + 31522, 31530, 31538, 31546, 31554, 31562, 31574, 31586, 31595, 31604, + 31612, 31620, 31628, 31636, 31647, 31658, 31669, 31680, 31692, 31704, + 31712, 31720, 31728, 31736, 31745, 31754, 31763, 31772, 31780, 31788, + 31796, 31804, 31812, 31820, 31829, 31838, 31847, 31856, 31863, 31870, + 31878, 31886, 31894, 31902, 31909, 31916, 31923, 31930, 31938, 31946, + 31954, 31962, 31970, 31978, 31985, 31992, 32000, 32008, 32016, 32024, + 32032, 32040, 32049, 32058, 32067, 32074, 32083, 32092, 32101, 32110, + 32120, 32129, 32135, 32140, 32147, 32154, 32162, 32170, 32179, 32188, + 32198, 32208, 32219, 32230, 32239, 32248, 32258, 32268, 32277, 32286, + 32296, 32306, 32317, 32328, 32337, 32346, 32356, 32366, 32373, 32380, + 32388, 32396, 32402, 32408, 32417, 32426, 32436, 32446, 32457, 32468, + 32477, 32486, 32496, 32506, 32515, 32524, 32532, 32540, 32547, 32554, + 32562, 32570, 32579, 32588, 32598, 32608, 32619, 32630, 32639, 32648, + 32658, 32668, 32677, 32686, 32696, 32706, 32717, 32728, 32737, 32746, + 32756, 32766, 32773, 32780, 32788, 32796, 32805, 32814, 32824, 32834, + 32845, 32856, 32865, 32874, 32884, 32894, 32902, 32910, 32918, 32926, + 32935, 32944, 32951, 32958, 32965, 32972, 32978, 32984, 32992, 33000, + 33008, 33016, 33026, 33036, 33046, 33056, 33066, 33076, 33084, 33092, + 33102, 33112, 33122, 33132, 33142, 33152, 33160, 33168, 33178, 33188, + 33198, 0, 0, 33208, 33216, 33224, 33234, 33244, 33254, 0, 0, 33264, + 33272, 33280, 33290, 33300, 33310, 33320, 33330, 33340, 33348, 33356, + 33366, 33376, 33386, 33396, 33406, 33416, 33424, 33432, 33442, 33452, + 33462, 33472, 33482, 33492, 33500, 33508, 33518, 33528, 33538, 33548, + 33558, 33568, 33576, 33584, 33594, 33604, 33614, 0, 0, 33624, 33632, + 33640, 33650, 33660, 33670, 0, 0, 33680, 33688, 33696, 33706, 33716, + 33726, 33736, 33746, 0, 33756, 0, 33764, 0, 33774, 0, 33784, 33794, + 33802, 33810, 33820, 33830, 33840, 33850, 33860, 33870, 33878, 33886, + 33896, 33906, 33916, 33926, 33936, 33946, 33954, 33962, 33970, 33978, + 33986, 33994, 34002, 34010, 34018, 34026, 34034, 34042, 34050, 0, 0, + 34058, 34068, 34078, 34091, 34104, 34117, 34130, 34143, 34156, 34166, + 34176, 34189, 34202, 34215, 34228, 34241, 34254, 34264, 34274, 34287, + 34300, 34313, 34326, 34339, 34352, 34362, 34372, 34385, 34398, 34411, + 34424, 34437, 34450, 34460, 34470, 34483, 34496, 34509, 34522, 34535, + 34548, 34558, 34568, 34581, 34594, 34607, 34620, 34633, 34646, 34654, + 34662, 34673, 34681, 0, 34692, 34700, 34711, 34719, 34727, 34735, 34743, + 34751, 34754, 34757, 34760, 34763, 34769, 34780, 34788, 0, 34799, 34807, + 34818, 34826, 34834, 34842, 34850, 34858, 34863, 34868, 34873, 34881, + 34889, 34900, 0, 0, 34911, 34919, 34930, 34938, 34946, 34954, 0, 34962, + 34967, 34972, 34977, 34985, 34993, 35004, 35015, 35023, 35031, 35039, + 35050, 35058, 35066, 35074, 35082, 35090, 35096, 35102, 0, 0, 35105, + 35116, 35124, 0, 35135, 35143, 35154, 35162, 35170, 35178, 35186, 35194, + 35197, 0, 35200, 35204, 35208, 35212, 35216, 35220, 35224, 35228, 35232, + 35236, 35240, 35244, 35250, 35256, 35262, 35265, 35268, 35270, 35274, + 35278, 35282, 35286, 35288, 35292, 35296, 35302, 35308, 35315, 35322, + 35327, 35332, 35338, 35344, 35346, 35349, 35351, 35355, 35359, 35363, + 35366, 35370, 35374, 35378, 35382, 35386, 35392, 35396, 35400, 35406, + 35411, 35418, 35420, 35423, 35427, 35430, 35434, 35439, 35441, 35450, + 35459, 35462, 35466, 35468, 35470, 35472, 35475, 35481, 35483, 35487, + 35491, 35498, 35505, 35509, 35514, 35519, 35524, 35528, 35532, 35536, + 35539, 35542, 35546, 35553, 35558, 35562, 35566, 35571, 35575, 35579, + 35584, 35589, 35593, 35597, 35601, 35603, 35608, 35613, 35617, 35621, + 35625, 35629, 0, 0, 0, 0, 0, 35633, 35639, 35645, 35651, 35657, 35662, + 35667, 35671, 0, 0, 35677, 35680, 35683, 35686, 35689, 35692, 35695, + 35699, 35703, 35708, 35713, 35718, 35724, 35728, 35731, 35734, 35737, + 35740, 35743, 35746, 35749, 35752, 35755, 35759, 35763, 35768, 35773, 0, + 35778, 35784, 35790, 35796, 35803, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 35810, 35813, 35816, 35819, 35824, 35827, 35830, 35833, 35836, 35839, + 35842, 35846, 35849, 35852, 35855, 35858, 35861, 35866, 35869, 35872, + 35875, 35878, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 35881, 35886, 35891, 35898, 35906, 35911, 35916, 35920, + 35924, 35929, 35936, 35943, 35947, 35952, 35957, 35962, 35967, 35974, + 35979, 35984, 35989, 35998, 36005, 36011, 36015, 36020, 36026, 36031, + 36038, 36046, 36054, 36058, 36062, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 36066, 36070, 36077, 36081, 36085, 36090, 36094, 36098, 36102, + 36104, 36108, 36111, 36114, 36118, 36121, 36125, 36133, 36136, 36140, + 36143, 36146, 36152, 36155, 36158, 36164, 36168, 36172, 36176, 36179, + 36183, 36186, 36190, 36192, 36195, 36198, 36202, 36204, 36208, 36211, + 36214, 36219, 36224, 36230, 36233, 36236, 36240, 36245, 36248, 36251, + 36254, 36258, 36262, 36265, 36268, 36270, 36273, 36276, 36279, 36283, + 36288, 36291, 36295, 36299, 36303, 36307, 36312, 36316, 36320, 36324, + 36329, 36334, 36339, 36343, 36347, 36352, 36356, 36359, 36362, 36364, + 36368, 0, 0, 0, 36374, 36381, 36388, 36395, 36402, 36409, 36417, 36424, + 36432, 36439, 36446, 36454, 36462, 36467, 36471, 36475, 36479, 36483, + 36487, 36491, 36495, 36499, 36503, 36508, 36513, 36518, 36523, 36529, + 36536, 36542, 36547, 36552, 36557, 36562, 36567, 36572, 36577, 36582, + 36587, 36593, 36599, 36605, 36611, 36618, 36626, 36633, 36643, 36650, + 36657, 36664, 36670, 36678, 36686, 36693, 0, 0, 0, 0, 0, 0, 0, 36701, + 36703, 36706, 36708, 36711, 36714, 36717, 36722, 36727, 36732, 36737, + 36741, 36745, 36749, 36753, 36758, 36764, 36769, 36775, 36780, 36785, + 36790, 36796, 36801, 36807, 36813, 36817, 36821, 36826, 36831, 36836, + 36841, 36846, 36854, 36862, 36870, 36878, 36885, 36893, 36900, 36907, + 36915, 36925, 36932, 36939, 36946, 36953, 36961, 36969, 36976, 36983, + 36991, 36999, 37004, 37012, 37017, 37022, 37028, 37033, 37039, 37046, + 37053, 37058, 37064, 37069, 37072, 37076, 37079, 37083, 37087, 37091, + 37097, 37103, 37109, 37115, 37119, 37123, 37127, 37131, 37137, 37143, + 37147, 37152, 37156, 37161, 37165, 37169, 37172, 37176, 37179, 37183, + 37190, 37198, 37209, 37220, 37225, 37234, 37241, 37249, 37257, 37261, + 37267, 37275, 37279, 37284, 37289, 37295, 37301, 37307, 37314, 37318, + 37322, 37327, 37330, 37332, 37336, 37340, 37347, 37351, 37353, 37355, + 37359, 37366, 37371, 37377, 37386, 37393, 37398, 37402, 37406, 37410, + 37413, 37416, 37419, 37423, 37427, 37431, 37435, 37439, 37442, 37446, + 37450, 37453, 37455, 37458, 37460, 37464, 37468, 37470, 37475, 37478, + 37482, 37486, 37490, 37492, 37494, 37496, 37499, 37503, 37507, 37511, + 37515, 37519, 37525, 37531, 37533, 37535, 37537, 37539, 37542, 37544, + 37548, 37550, 37554, 37556, 37561, 37565, 37569, 37571, 37574, 37578, + 37583, 37587, 37596, 37606, 37610, 37615, 37621, 37624, 37628, 37631, + 37636, 37640, 37646, 37650, 37661, 37669, 37673, 37677, 37683, 37687, + 37690, 37692, 37695, 37699, 37703, 37709, 37713, 37717, 37720, 37723, + 37727, 37732, 37737, 37742, 37747, 37752, 37759, 37766, 37770, 37774, + 37776, 37780, 37783, 37786, 37794, 37802, 37808, 37814, 37823, 37832, + 37837, 37842, 37850, 37858, 37860, 37862, 37867, 37872, 37878, 37884, + 37889, 37894, 37898, 37902, 37908, 37914, 37920, 37926, 37936, 37946, + 37953, 37960, 37962, 37966, 37970, 37975, 37980, 37987, 37994, 37997, + 38000, 38003, 38006, 38009, 38014, 38018, 38023, 38028, 38031, 38034, + 38038, 38042, 38046, 38051, 38054, 38057, 38060, 38063, 38065, 38067, + 38069, 38071, 38079, 38087, 38092, 38095, 38100, 38110, 38116, 38122, + 38128, 38136, 38144, 38155, 38159, 38163, 38165, 38171, 38173, 38175, + 38177, 38179, 38185, 38188, 38194, 38200, 38204, 38208, 38212, 38215, + 38219, 38223, 38225, 38234, 38243, 38248, 38253, 38258, 38264, 38270, + 38273, 38276, 38279, 38282, 38284, 38289, 38294, 38299, 38305, 38311, + 38318, 38325, 38330, 38335, 38340, 38345, 38353, 38361, 38369, 38377, + 38385, 38393, 38401, 38409, 38417, 38425, 38432, 38443, 38452, 38466, + 38469, 38474, 38480, 38486, 38493, 38507, 38522, 38528, 38534, 38541, + 38547, 38555, 38561, 38574, 38588, 38593, 38599, 38606, 38609, 38612, + 38614, 38617, 38620, 38622, 38624, 38628, 38631, 38634, 38637, 38640, + 38645, 38650, 38655, 38660, 38663, 38666, 38668, 38670, 38672, 38676, + 38680, 38684, 38690, 38693, 38695, 38697, 38702, 38707, 38712, 38717, + 38722, 38727, 38729, 38731, 38740, 38744, 38751, 38760, 38762, 38767, + 38772, 38779, 38783, 38785, 38789, 38791, 38795, 38799, 38803, 38805, + 38807, 38809, 38814, 38821, 38828, 38835, 38842, 38849, 38856, 38863, + 38870, 38876, 38882, 38889, 38896, 38903, 38910, 38916, 38922, 38929, + 38936, 38943, 38951, 38958, 38966, 38973, 38981, 38988, 38996, 39004, + 39011, 39019, 39026, 39034, 39041, 39049, 39056, 39063, 39070, 39077, + 39084, 39092, 39099, 39106, 39113, 39120, 39126, 39132, 39138, 39144, + 39152, 39160, 39166, 39172, 39178, 39184, 39189, 39195, 39202, 39210, + 39217, 39224, 39231, 39236, 39241, 39246, 39253, 39260, 39267, 39274, + 39279, 39283, 39292, 39298, 39301, 39309, 39312, 39317, 39322, 39325, + 39328, 39336, 39339, 39344, 39347, 39354, 39359, 39367, 39370, 39373, + 39376, 39381, 39386, 39389, 39392, 39399, 39402, 39407, 39414, 39418, + 39422, 39427, 39432, 39438, 39443, 39448, 39454, 39459, 39464, 39472, + 39478, 39485, 39493, 39499, 39506, 39514, 39523, 39530, 39536, 39544, + 39553, 39560, 39564, 39569, 39581, 39593, 39597, 39601, 39605, 39609, + 39619, 39623, 39628, 39633, 39638, 39643, 39648, 39653, 39663, 39673, + 39681, 39691, 39701, 39709, 39719, 39729, 39737, 39747, 39757, 39765, + 39773, 39783, 39793, 39796, 39799, 39802, 39807, 39811, 39817, 39824, + 39831, 39839, 39846, 39850, 39854, 39858, 39862, 39864, 39868, 39872, + 39877, 39882, 39889, 39896, 39899, 39906, 39908, 39910, 39914, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 39918, + 39922, 39929, 39936, 39943, 39950, 39954, 39958, 39962, 39966, 39971, + 39977, 39982, 39987, 39993, 39999, 40005, 40013, 40020, 40027, 40034, + 40041, 40047, 40053, 40062, 40066, 40073, 40077, 40081, 40087, 40093, + 40099, 40105, 40109, 40113, 40116, 40120, 40124, 40130, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 40136, 40139, + 40143, 40147, 40153, 40159, 40165, 40173, 40180, 40184, 40192, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 40197, 40200, + 40203, 40206, 40209, 40212, 40215, 40218, 40221, 40224, 40228, 40232, + 40236, 40240, 40244, 40248, 40252, 40256, 40260, 40264, 40268, 40271, + 40274, 40277, 40280, 40283, 40286, 40289, 40292, 40295, 40299, 40303, + 40307, 40311, 40315, 40319, 40323, 40327, 40331, 40335, 40339, 40345, + 40351, 40357, 40364, 40371, 40378, 40385, 40392, 40399, 40406, 40413, + 40420, 40427, 40434, 40441, 40448, 40455, 40462, 40469, 40476, 40481, + 40487, 40493, 40499, 40504, 40510, 40515, 40520, 40525, 40531, 40537, + 40542, 40547, 40552, 40557, 40563, 40569, 40574, 40579, 40585, 40590, + 40595, 40601, 40607, 40613, 40619, 40624, 40630, 40636, 40642, 40647, + 40653, 40658, 40663, 40668, 40674, 40680, 40685, 40690, 40695, 40700, + 40706, 40712, 40717, 40722, 40728, 40733, 40738, 40744, 40750, 40756, + 40762, 40767, 40773, 40779, 40785, 40790, 40796, 40801, 40806, 40811, + 40817, 40823, 40828, 40833, 40838, 40843, 40849, 40855, 40860, 40865, + 40871, 40876, 40881, 40887, 40893, 40899, 40905, 40909, 40915, 40921, + 40927, 40933, 40939, 40945, 40951, 40957, 40963, 40969, 40973, 40977, + 40981, 40985, 40989, 40993, 40997, 41001, 41005, 41010, 41016, 41021, + 41026, 41031, 41036, 41045, 41054, 41063, 41072, 41081, 41090, 41099, + 41108, 41115, 41123, 41131, 41138, 41145, 41153, 41161, 41168, 41175, + 41183, 41191, 41198, 41205, 41213, 41221, 41228, 41235, 41243, 41252, + 41261, 41269, 41278, 41287, 41294, 41301, 41309, 41318, 41327, 41335, + 41344, 41353, 41360, 41367, 41376, 41385, 41393, 41401, 41410, 41419, + 41426, 41433, 41442, 41451, 41459, 41467, 41476, 41485, 41492, 41499, + 41508, 41517, 41525, 41534, 41543, 41551, 41561, 41571, 41581, 41591, + 41600, 41609, 41618, 41627, 41634, 41642, 41650, 41658, 41666, 41671, + 41676, 41685, 41693, 41700, 41709, 41717, 41724, 41733, 41741, 41748, + 41757, 41765, 41772, 41781, 41789, 41796, 41805, 41813, 41820, 41829, + 41837, 41844, 41853, 41861, 41868, 41877, 41885, 41892, 41901, 41910, + 41919, 41928, 41940, 41952, 41959, 41964, 41969, 41974, 41979, 41984, + 41989, 41994, 41999, 42007, 42015, 42023, 42031, 42036, 42042, 42048, + 42054, 42058, 42065, 42071, 42078, 42082, 42089, 42095, 42102, 42106, + 42112, 42118, 42124, 42128, 42131, 42135, 42139, 42146, 42152, 42157, + 42162, 42168, 42180, 42189, 42202, 42215, 42221, 42230, 42242, 42245, + 42248, 42255, 42263, 42268, 42273, 42281, 42291, 42301, 42309, 42313, + 42317, 42320, 42323, 42327, 42331, 42334, 42337, 42342, 42347, 42353, + 42359, 42364, 42369, 42375, 42381, 42386, 42391, 42396, 42401, 42407, + 42413, 42418, 42423, 42429, 42435, 42440, 42445, 42448, 42451, 42460, + 42462, 42464, 42467, 42471, 42477, 42479, 42482, 42489, 42496, 42503, + 42511, 42521, 42535, 42540, 42545, 42549, 42554, 42562, 42569, 42578, + 42587, 42595, 42603, 42608, 42612, 42617, 42622, 42628, 42634, 42637, + 42643, 42649, 42659, 42668, 42676, 42684, 42693, 42702, 42706, 42714, + 42721, 42728, 42736, 42745, 42753, 42761, 42770, 42775, 42780, 42784, + 42789, 42794, 42800, 42806, 42810, 42816, 42818, 42820, 42822, 42824, + 42827, 42830, 42832, 42834, 42836, 42840, 42844, 42846, 42848, 42851, + 42854, 42858, 42864, 42870, 42872, 42879, 42883, 42888, 42893, 42895, + 42904, 42910, 42916, 42922, 42928, 42934, 42940, 42945, 42948, 42951, + 42954, 42956, 42958, 42962, 42966, 42971, 42976, 42981, 42984, 42988, + 42993, 42996, 43000, 43005, 43010, 43015, 43020, 43025, 43030, 43035, + 43040, 43045, 43050, 43055, 43060, 43066, 43072, 43078, 43080, 43083, + 43085, 43088, 43090, 43092, 43094, 43096, 43098, 43100, 43102, 43104, + 43106, 43108, 43110, 43112, 43114, 43116, 43118, 43120, 43122, 43127, + 43132, 43137, 43142, 43147, 43152, 43157, 43162, 43167, 43172, 43177, + 43182, 43187, 43192, 43197, 43202, 43207, 43212, 43217, 43222, 43226, + 43230, 43234, 43240, 43246, 43251, 43256, 43261, 43266, 43271, 43276, + 43284, 43292, 43300, 43308, 43316, 43324, 43332, 43340, 43346, 43351, + 43356, 43361, 43364, 43368, 43372, 43376, 43380, 43384, 43388, 43395, + 43402, 43410, 43418, 43423, 43428, 43435, 43442, 43449, 43456, 43459, + 43462, 43467, 43469, 43473, 43478, 43480, 43482, 43484, 43486, 43491, + 43494, 43496, 0, 0, 43501, 43504, 43508, 43513, 43518, 43526, 43532, + 43537, 43548, 43554, 43560, 43565, 43570, 43576, 43579, 43582, 43587, + 43589, 43593, 43595, 43597, 43599, 43601, 43603, 43605, 43610, 43612, + 43614, 43616, 0, 0, 0, 43618, 43623, 43628, 43633, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 43638, 43644, 43647, 43652, 0, 43655, 43660, 43664, + 43666, 0, 0, 43668, 43672, 43676, 43680, 43682, 43687, 43690, 43693, + 43696, 43700, 43704, 43709, 43713, 43718, 43723, 43727, 43733, 43740, + 43743, 43749, 43754, 43758, 43763, 43769, 43775, 43782, 43788, 43795, 0, + 43802, 43809, 43813, 43820, 43826, 43831, 43837, 43841, 43846, 43849, + 43855, 43861, 43868, 43876, 43883, 43892, 43902, 43909, 43915, 43919, + 43927, 43932, 43941, 43944, 43947, 43956, 43967, 43974, 43976, 43982, + 43987, 43989, 43992, 43996, 44004, 0, 44013, 0, 44018, 44025, 44033, + 44040, 0, 0, 0, 44048, 0, 44056, 44059, 44063, 44066, 44077, 44087, + 44097, 0, 0, 44106, 44115, 44121, 44129, 44133, 44141, 44145, 44153, + 44160, 44167, 44176, 44185, 44195, 44205, 44215, 44225, 44234, 44243, + 44253, 44263, 44272, 44281, 44288, 44295, 44302, 44309, 44316, 44323, + 44330, 44337, 44344, 44352, 44358, 44364, 44370, 44376, 44382, 44388, + 44394, 44400, 44406, 44413, 44421, 44429, 44437, 44445, 44453, 44461, + 44469, 44477, 44485, 44494, 0, 0, 0, 44499, 44505, 44508, 44514, 44520, + 44525, 44529, 44534, 44540, 44547, 44550, 44557, 44564, 44568, 44577, + 44586, 44591, 44597, 44602, 44607, 44614, 44621, 44628, 44636, 0, 44644, + 44653, 44658, 44662, 44669, 44673, 44680, 44688, 44693, 44701, 44705, + 44710, 44714, 44719, 0, 44723, 44728, 44737, 44739, 44743, 44747, 44754, + 44761, 44766, 44774, 44780, 0, 44786, 0, 0, 0, 44789, 44797, 44801, + 44808, 44815, 44823, 44828, 44833, 44839, 44844, 44849, 44855, 44860, + 44863, 44867, 44871, 44878, 44887, 44892, 44901, 44910, 44916, 44922, + 44927, 44932, 44937, 44942, 44948, 44954, 44962, 44970, 44976, 44982, + 44987, 44992, 44999, 45006, 45012, 45015, 45018, 45022, 45026, 45030, + 45035, 45041, 45047, 45054, 45061, 45066, 45070, 45074, 45078, 45082, + 45086, 45090, 45094, 45098, 45102, 45106, 45110, 45114, 45118, 45122, + 45126, 45130, 45134, 45138, 45142, 45146, 45150, 45154, 45158, 45162, + 45166, 45170, 45174, 45178, 45182, 45186, 45190, 45194, 45198, 45202, + 45206, 45210, 45214, 45218, 45222, 45226, 45230, 45234, 45238, 45242, + 45246, 45250, 45254, 45258, 45262, 45266, 45270, 45274, 45278, 45282, + 45286, 45290, 45294, 45298, 45302, 45306, 45310, 45314, 45318, 45322, + 45326, 45330, 45334, 45338, 45342, 45346, 45350, 45354, 45358, 45362, + 45366, 45370, 45374, 45378, 45382, 45386, 45390, 45394, 45398, 45402, + 45406, 45410, 45414, 45418, 45422, 45426, 45430, 45434, 45438, 45442, + 45446, 45450, 45454, 45458, 45462, 45466, 45470, 45474, 45478, 45482, + 45486, 45490, 45494, 45498, 45502, 45506, 45510, 45514, 45518, 45522, + 45526, 45530, 45534, 45538, 45542, 45546, 45550, 45554, 45558, 45562, + 45566, 45570, 45574, 45578, 45582, 45586, 45590, 45594, 45598, 45602, + 45606, 45610, 45614, 45618, 45622, 45626, 45630, 45634, 45638, 45642, + 45646, 45650, 45654, 45658, 45662, 45666, 45670, 45674, 45678, 45682, + 45686, 45690, 45694, 45698, 45702, 45706, 45710, 45714, 45718, 45722, + 45726, 45730, 45734, 45738, 45742, 45746, 45750, 45754, 45758, 45762, + 45766, 45770, 45774, 45778, 45782, 45786, 45790, 45794, 45798, 45802, + 45806, 45810, 45814, 45818, 45822, 45826, 45830, 45834, 45838, 45842, + 45846, 45850, 45854, 45858, 45862, 45866, 45870, 45874, 45878, 45882, + 45886, 45890, 45894, 45898, 45902, 45906, 45910, 45914, 45918, 45922, + 45926, 45930, 45934, 45938, 45942, 45946, 45950, 45954, 45958, 45962, + 45966, 45970, 45974, 45978, 45982, 45986, 45990, 45994, 45998, 46002, + 46006, 46010, 46014, 46018, 46022, 46026, 46030, 46034, 46038, 46042, + 46046, 46050, 46054, 46058, 46062, 46066, 46070, 46074, 46078, 46082, + 46086, 46090, 46097, 46105, 46111, 46117, 46124, 46131, 46137, 46143, + 46149, 46155, 46160, 46165, 46170, 46175, 46181, 46187, 46195, 46202, + 46207, 46212, 46220, 46229, 46236, 46246, 46257, 46260, 46263, 46267, + 46271, 46277, 46283, 46293, 46303, 46313, 46323, 46330, 46337, 46344, + 46351, 46362, 46373, 46384, 46395, 46405, 46415, 46427, 46439, 46450, + 46461, 46473, 46485, 46494, 46504, 46514, 46525, 46536, 46543, 46550, + 46557, 46564, 46574, 46584, 46591, 46598, 46605, 46612, 46619, 46626, + 46633, 46638, 46643, 46649, 46657, 46667, 46675, 46683, 46691, 46699, + 46707, 46715, 46723, 46731, 46739, 46747, 46756, 46765, 46773, 46781, + 46790, 46799, 46808, 46817, 46827, 46837, 46846, 46855, 46865, 46875, + 46889, 46906, 46920, 46937, 46951, 46965, 46979, 46993, 47003, 47014, + 47024, 47035, 47052, 47069, 47077, 47083, 47090, 47097, 47104, 47111, + 47116, 47122, 47127, 47132, 47138, 47143, 47148, 47153, 47158, 47163, + 47170, 47175, 47182, 47187, 47192, 47196, 47200, 47207, 47214, 47221, + 47228, 47235, 47242, 47255, 47268, 47281, 47294, 47302, 47310, 47316, + 47322, 47329, 47336, 47343, 47350, 47354, 47359, 47367, 47375, 47383, + 47390, 47394, 47402, 47410, 47413, 47416, 47421, 47427, 47435, 47443, + 47463, 47483, 47503, 47523, 47543, 47563, 47583, 47603, 47608, 47615, + 47624, 47632, 47640, 47645, 47648, 47651, 47656, 47659, 47678, 47685, + 47691, 47697, 47701, 47704, 47707, 47710, 47721, 47733, 47741, 47749, + 47753, 47758, 47762, 47767, 47772, 47777, 47783, 47792, 47799, 47806, + 47814, 47821, 47828, 47831, 47837, 47843, 47846, 47849, 47854, 47859, + 47865, 47871, 47875, 47880, 47887, 47891, 47897, 47901, 47905, 47913, + 47925, 47933, 47937, 47939, 47948, 47957, 47963, 47966, 47972, 47978, + 47983, 47988, 47993, 47998, 48003, 48008, 48010, 48016, 48021, 48028, + 48032, 48038, 48041, 48045, 48052, 48059, 48061, 48063, 48069, 48075, + 48081, 48090, 48099, 48106, 48113, 48119, 48125, 48130, 48135, 48140, + 48146, 48152, 48157, 48164, 48168, 48172, 48185, 48198, 48209, 48218, + 48224, 48231, 48236, 48241, 48246, 48251, 48256, 48258, 48265, 48272, + 48279, 48286, 48293, 48301, 48307, 48312, 48318, 48324, 48330, 48337, + 48343, 48351, 48359, 48367, 48375, 48382, 48388, 48394, 48403, 48407, + 48416, 48425, 48434, 48442, 48446, 48452, 48459, 48466, 48470, 48476, + 48483, 48488, 48493, 48499, 48504, 48509, 48516, 48523, 48528, 48533, + 48541, 48549, 48559, 48569, 48576, 48583, 48587, 48591, 48603, 48609, + 48615, 48620, 48625, 48632, 48639, 48645, 48651, 48660, 48668, 48676, + 48683, 48690, 48697, 48703, 48710, 48716, 48723, 48730, 48737, 48744, + 48750, 48755, 48764, 48774, 48781, 48790, 48796, 48801, 48806, 48815, + 48821, 48827, 48833, 48841, 48846, 48853, 48860, 48871, 48878, 48885, + 48892, 48899, 48906, 48913, 48920, 48931, 48942, 48952, 48962, 48974, + 48986, 48991, 48996, 49004, 49012, 49018, 49024, 49033, 49042, 49050, + 49058, 49066, 49074, 49084, 49094, 49108, 49122, 49129, 49136, 49147, + 49158, 49165, 49172, 49181, 49190, 49195, 49200, 49209, 49218, 49223, + 49228, 49236, 49242, 49248, 49256, 49264, 49277, 49290, 49294, 49298, + 49305, 49312, 49319, 49327, 49335, 49343, 49351, 49357, 49363, 49369, + 49375, 49382, 49389, 49397, 49405, 49408, 49411, 49416, 49421, 49427, + 49433, 49440, 49447, 49456, 49465, 49472, 49479, 49487, 49495, 49503, + 49511, 49518, 49525, 49532, 49539, 49543, 49547, 49554, 49561, 49566, + 49571, 49576, 49581, 49587, 49601, 49608, 49615, 49619, 49621, 49623, + 49628, 49633, 49638, 49642, 49650, 49657, 49664, 49672, 49684, 49692, + 49700, 49711, 49715, 49719, 49723, 49728, 49739, 49746, 49753, 49760, + 49765, 49772, 49781, 49789, 49795, 49801, 49807, 49816, 49825, 49833, + 49842, 49847, 49850, 49855, 49861, 49867, 49873, 49879, 49883, 49886, + 49890, 49894, 49900, 49906, 49912, 49918, 49922, 49926, 49933, 49940, + 49947, 49954, 49961, 49968, 49978, 49987, 49994, 50001, 50009, 50017, + 50021, 50026, 50031, 50037, 50043, 50046, 50049, 50052, 50055, 50059, + 50064, 50069, 50074, 50079, 50084, 50088, 50092, 50096, 50100, 50104, + 50108, 50112, 50118, 50122, 50128, 50133, 50140, 50148, 50155, 50163, + 50170, 50178, 50187, 50194, 50204, 50215, 50221, 50230, 50236, 50245, + 50254, 50260, 50266, 50270, 50274, 50283, 50292, 50299, 50306, 50315, 0, + 0, 0, 50324, 50329, 50333, 50337, 50342, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 50347, 50352, 50357, 50362, 50367, 50372, 50377, + 50382, 50387, 50392, 50397, 50403, 50407, 50412, 50417, 50422, 50427, + 50432, 50437, 50442, 50447, 50452, 50457, 50462, 50467, 50472, 50477, + 50482, 50487, 50492, 50497, 50502, 50507, 50512, 50517, 50523, 50528, + 50534, 50543, 50548, 50556, 50563, 50572, 50577, 50582, 50587, 50593, 0, + 50600, 50605, 50610, 50615, 50620, 50625, 50630, 50635, 50640, 50645, + 50650, 50656, 50660, 50665, 50670, 50675, 50680, 50685, 50690, 50695, + 50700, 50705, 50710, 50715, 50720, 50725, 50730, 50735, 50740, 50745, + 50750, 50755, 50760, 50765, 50770, 50776, 50781, 50787, 50796, 50801, + 50809, 50816, 50825, 50830, 50835, 50840, 50846, 0, 50853, 50861, 50869, + 50878, 50885, 50893, 50899, 50908, 50916, 50924, 50932, 50940, 50948, + 50956, 50961, 50968, 0, 50973, 50981, 50988, 50995, 51003, 51008, 51013, + 51020, 51027, 51036, 51046, 51052, 51059, 0, 0, 51063, 51068, 51073, + 51078, 51083, 51088, 51093, 51098, 51103, 51108, 51113, 51118, 51123, + 51128, 51133, 51138, 51143, 51148, 51153, 51158, 51163, 51168, 51173, + 51178, 51183, 51188, 51193, 51198, 51203, 51208, 51213, 51217, 51221, + 51226, 51231, 51236, 51241, 51246, 51251, 51256, 51261, 51266, 51271, + 51276, 51281, 51286, 51291, 51296, 51301, 51306, 51311, 51318, 51325, + 51332, 51339, 51346, 51353, 51360, 51367, 51374, 51381, 51388, 51395, + 51402, 51409, 51414, 51419, 51426, 51433, 51440, 51447, 51454, 51461, + 51468, 51475, 51482, 51489, 51496, 51503, 51509, 51515, 51521, 51527, + 51534, 51541, 51548, 51555, 51562, 51569, 51576, 51583, 51590, 51597, + 51605, 51613, 51621, 51629, 51637, 51645, 51653, 51661, 51665, 51671, + 51677, 51681, 51687, 51693, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 51699, 51707, 51716, 51725, 51733, 51739, 51744, 51749, 51754, 51759, + 51764, 51769, 51774, 51779, 51784, 51789, 51794, 51799, 51804, 51809, + 51814, 51819, 51824, 51829, 51834, 51839, 51844, 51849, 51854, 51859, + 51864, 51869, 51874, 51879, 51884, 51889, 51894, 51899, 51904, 51909, + 51914, 51919, 51924, 51929, 51934, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 51939, + 51942, 51946, 51950, 51954, 51958, 51966, 51970, 51974, 51978, 51982, + 51986, 51990, 51994, 51998, 52004, 52008, 52012, 52020, 52026, 52030, + 52034, 52038, 52044, 52048, 52054, 52058, 52062, 52068, 52074, 52078, + 52082, 52086, 52092, 52098, 52102, 52106, 52110, 52114, 52118, 52124, + 52130, 52134, 52138, 52142, 52146, 52150, 52154, 52158, 52162, 52166, + 52170, 52174, 52180, 0, 0, 0, 0, 0, 0, 0, 0, 0, 52184, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 52190, 52194, 52198, 52202, 52206, 52210, + 52214, 52218, 52222, 52226, 52230, 52236, 52240, 52244, 52248, 52252, + 52256, 52260, 52264, 52268, 52272, 52276, 52280, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 52284, 52288, 52292, 52296, 52300, 52304, 52308, 0, 52312, 52316, + 52320, 52324, 52328, 52332, 52336, 0, 52340, 52344, 52348, 52352, 52356, + 52360, 52364, 0, 52368, 52372, 52376, 52380, 52384, 52388, 52392, 0, + 52396, 52400, 52404, 52408, 52412, 52416, 52420, 0, 52424, 52428, 52432, + 52436, 52440, 52444, 52448, 0, 52452, 52456, 52460, 52464, 52468, 52472, + 52476, 0, 52480, 52484, 52488, 52492, 52496, 52500, 52504, 0, 52508, + 52513, 52518, 52523, 52528, 52533, 52538, 52542, 52547, 52552, 52557, + 52561, 52566, 52571, 52576, 52581, 52585, 52590, 52595, 52600, 52605, + 52610, 52615, 52619, 52624, 52629, 52636, 52641, 52646, 52652, 52659, + 52666, 52675, 52682, 52691, 52695, 52699, 52705, 52711, 52717, 52725, + 52731, 52735, 52739, 52743, 52749, 52755, 52759, 52761, 52765, 52770, + 52772, 52776, 52780, 52784, 52790, 52795, 52799, 52803, 52807, 52813, + 52818, 52823, 52828, 52833, 52840, 52847, 52852, 52857, 52862, 52867, + 52872, 52877, 52881, 52885, 52892, 52899, 52906, 52910, 52914, 52916, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 52920, 52924, 52928, 52933, 52938, 52943, 52947, 52951, + 52955, 52960, 52965, 52969, 52973, 52977, 52981, 52986, 52991, 52996, + 53001, 53005, 53009, 53014, 53019, 53024, 53029, 53033, 0, 53037, 53041, + 53045, 53049, 53053, 53057, 53061, 53066, 53071, 53075, 53080, 53085, + 53094, 53098, 53102, 53106, 53113, 53117, 53122, 53127, 53131, 53135, + 53141, 53146, 53151, 53156, 53161, 53165, 53169, 53173, 53177, 53181, + 53186, 53191, 53195, 53199, 53204, 53209, 53214, 53218, 53222, 53227, + 53232, 53238, 53244, 53248, 53254, 53260, 53264, 53270, 53276, 53281, + 53286, 53290, 53296, 53300, 53304, 53310, 53316, 53321, 53326, 53330, + 53334, 53342, 53348, 53354, 53360, 53365, 53370, 53375, 53381, 53385, + 53391, 53395, 53399, 53405, 53411, 53417, 53423, 53429, 53435, 53441, + 53447, 53453, 53459, 53465, 53471, 53475, 53481, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 53487, 53490, 53494, 53498, 53502, 53506, 53509, 53512, + 53516, 53520, 53524, 53528, 53531, 53536, 53540, 53544, 53548, 53554, + 53558, 53562, 53566, 53570, 53577, 53583, 53587, 53591, 53595, 53599, + 53603, 53607, 53611, 53615, 53619, 53623, 53627, 53633, 53637, 53641, + 53645, 53649, 53653, 53657, 53661, 53665, 53669, 53673, 53677, 53681, + 53685, 53689, 53693, 53697, 53703, 53709, 53714, 53719, 53723, 53727, + 53731, 53735, 53739, 53743, 53747, 53751, 53755, 53759, 53763, 53767, + 53771, 53775, 53779, 53783, 53787, 53791, 53795, 53799, 53803, 53807, + 53811, 53815, 53821, 53825, 53829, 53833, 53837, 53841, 53845, 53849, + 53853, 53858, 53865, 53869, 53873, 53877, 53881, 53885, 53889, 53893, + 53897, 53901, 53905, 53909, 53913, 53920, 53924, 53930, 53934, 53938, + 53942, 53946, 53950, 53953, 53957, 53961, 53965, 53969, 53973, 53977, + 53981, 53985, 53989, 53993, 53997, 54001, 54005, 54009, 54013, 54017, + 54021, 54025, 54029, 54033, 54037, 54041, 54045, 54049, 54053, 54057, + 54061, 54065, 54069, 54073, 54077, 54081, 54087, 54091, 54095, 54099, + 54103, 54107, 54111, 54115, 54119, 54123, 54127, 54131, 54135, 54139, + 54143, 54147, 54151, 54155, 54159, 54163, 54167, 54171, 54175, 54179, + 54183, 54187, 54191, 54195, 54203, 54207, 54211, 54215, 54219, 54223, + 54229, 54233, 54237, 54241, 54245, 54249, 54253, 54257, 54261, 54265, + 54269, 54273, 54277, 54281, 54287, 54291, 54295, 54299, 54303, 54307, + 54311, 54315, 54319, 54323, 54327, 54331, 54335, 54339, 54343, 54347, + 54351, 54355, 54359, 54363, 54367, 54371, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 54375, 54383, 54390, + 54401, 54411, 54419, 54428, 54437, 54447, 54459, 54471, 54482, 0, 0, 0, + 0, 54488, 54491, 54494, 54499, 54502, 54509, 54513, 54517, 54521, 54525, + 54529, 54534, 54539, 54543, 54547, 54552, 54557, 54562, 54567, 54570, + 54573, 54579, 54585, 54590, 54595, 54602, 54609, 54613, 54617, 54621, + 54628, 54634, 54641, 54646, 54650, 54654, 54658, 54662, 54666, 54670, + 54674, 54678, 54682, 54687, 54692, 54697, 54702, 54708, 54713, 54717, + 54723, 54734, 54744, 54759, 54768, 54772, 54781, 54786, 54791, 54796, + 54801, 54804, 54809, 54813, 0, 54819, 54823, 54826, 54830, 54833, 54837, + 54840, 54844, 54847, 54851, 54854, 54857, 54861, 54865, 54869, 54873, + 54877, 54881, 54885, 54889, 54893, 54897, 54901, 54905, 54909, 54913, + 54917, 54921, 54925, 54929, 54933, 54937, 54941, 54945, 54949, 54954, + 54958, 54962, 54966, 54970, 54973, 54977, 54981, 54985, 54989, 54993, + 54997, 55000, 55004, 55007, 55011, 55015, 55019, 55023, 55027, 55031, + 55035, 55039, 55043, 55047, 55051, 55055, 55058, 55062, 55066, 55070, + 55074, 55078, 55081, 55086, 55090, 55095, 55099, 55102, 55106, 55110, + 55114, 55118, 55123, 55127, 55131, 55135, 55139, 55142, 55146, 55150, 0, + 0, 55155, 55163, 55171, 55178, 55185, 55189, 55195, 55200, 55205, 55209, + 55212, 55216, 55219, 55223, 55226, 55230, 55233, 55237, 55240, 55243, + 55247, 55251, 55255, 55259, 55263, 55267, 55271, 55275, 55279, 55283, + 55287, 55291, 55295, 55299, 55303, 55307, 55311, 55315, 55319, 55323, + 55327, 55331, 55335, 55340, 55344, 55348, 55352, 55356, 55359, 55363, + 55367, 55371, 55375, 55379, 55383, 55386, 55390, 55393, 55397, 55401, + 55405, 55409, 55413, 55417, 55421, 55425, 55429, 55433, 55437, 55441, + 55444, 55448, 55452, 55456, 55460, 55464, 55467, 55472, 55476, 55481, + 55485, 55488, 55492, 55496, 55500, 55504, 55509, 55513, 55517, 55521, + 55525, 55528, 55532, 55536, 55541, 55545, 55549, 55553, 55557, 55562, + 55569, 55573, 55579, 0, 0, 0, 0, 0, 55584, 55588, 55592, 55595, 55599, + 55603, 55607, 55610, 55613, 55616, 55620, 55623, 55627, 55631, 55635, + 55639, 55643, 55647, 55650, 55654, 55658, 55661, 55664, 55667, 55670, + 55674, 55678, 55682, 55686, 55690, 55694, 55698, 55702, 55706, 55710, + 55713, 55716, 55720, 55723, 55727, 55731, 0, 0, 0, 55735, 55739, 55743, + 55747, 55751, 55755, 55759, 55763, 55767, 55771, 55775, 55779, 55783, + 55787, 55791, 55795, 55799, 55803, 55807, 55811, 55815, 55819, 55823, + 55827, 55831, 55835, 55839, 55843, 55847, 55851, 55855, 55858, 55862, + 55865, 55869, 55873, 55876, 55880, 55884, 55887, 55891, 55895, 55899, + 55903, 55906, 55910, 55914, 55918, 55922, 55926, 55930, 55933, 55936, + 55940, 55944, 55948, 55952, 55956, 55960, 55964, 55968, 55972, 55976, + 55980, 55984, 55988, 55992, 55996, 56000, 56004, 56008, 56012, 56016, + 56020, 56024, 56028, 56032, 56036, 56040, 56044, 56048, 56052, 56056, + 56060, 56064, 56068, 56072, 56076, 56080, 56084, 56088, 56092, 56096, + 56100, 0, 56104, 56110, 56116, 56121, 56126, 56131, 56137, 56143, 56149, + 56155, 56161, 56167, 56173, 56179, 56185, 56191, 56197, 56201, 56205, + 56209, 56213, 56217, 56221, 56225, 56229, 56233, 56237, 56241, 56245, + 56249, 56253, 56257, 56261, 56265, 56269, 56273, 56277, 56282, 56287, + 56292, 0, 0, 0, 0, 0, 0, 0, 0, 56296, 56300, 56304, 56308, 56312, 56316, + 56320, 56324, 56328, 56332, 56336, 56340, 56344, 56348, 56352, 56356, + 56359, 56362, 56365, 56369, 56373, 56377, 56381, 56385, 56389, 56393, + 56397, 56401, 56405, 56409, 56413, 56417, 56421, 56425, 56429, 56433, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 56437, 56442, 56447, 56452, 56456, + 56461, 56465, 56470, 56475, 56480, 56485, 56490, 56494, 56499, 56504, + 56509, 56514, 56518, 56522, 56526, 56530, 56534, 56538, 56542, 56546, + 56550, 56554, 56558, 56562, 56566, 56570, 56575, 56580, 56585, 56590, + 56595, 56600, 56605, 56610, 56615, 56620, 56625, 56630, 56635, 56640, + 56645, 56651, 0, 56658, 56661, 56664, 56667, 56670, 56673, 56676, 56679, + 56682, 56685, 56689, 56693, 56697, 56701, 56705, 56709, 56713, 56717, + 56721, 56725, 56729, 56733, 56737, 56741, 56745, 56749, 56753, 56757, + 56761, 56765, 56769, 56773, 56777, 56781, 56785, 56789, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 56793, 56796, 56801, 56806, 56811, 56816, 56821, 56826, + 56831, 56836, 56841, 56845, 56850, 56855, 56860, 56865, 56870, 56874, + 56878, 56882, 56886, 56890, 56894, 56898, 56902, 56906, 56910, 56914, + 56918, 56922, 56926, 56931, 56936, 56941, 56946, 56951, 56956, 56961, + 56966, 56971, 56976, 56981, 56986, 56991, 56996, 57002, 57008, 57013, + 57018, 57021, 57024, 57027, 57030, 57033, 57036, 57039, 57042, 57045, + 57049, 57053, 57057, 57061, 57065, 57069, 57073, 57077, 57081, 57085, + 57089, 57093, 57097, 57101, 57105, 57109, 57113, 57117, 57121, 57125, + 57129, 57133, 57137, 57141, 57145, 57149, 57153, 57157, 57161, 57165, + 57169, 57173, 57177, 57181, 57185, 57189, 57193, 57197, 57201, 57205, + 57210, 57215, 57220, 57225, 57229, 57234, 57239, 57244, 57249, 57254, + 57259, 57264, 57269, 57274, 57278, 57284, 57290, 57296, 57302, 57308, + 57314, 57320, 57326, 57332, 57338, 57344, 57350, 57353, 57356, 57359, + 57364, 57367, 57370, 57373, 57376, 57379, 57382, 57386, 57390, 57394, + 57398, 57402, 57406, 57410, 57414, 57418, 57422, 57426, 57430, 57434, + 57437, 57441, 57445, 57449, 57453, 57457, 57460, 57464, 57468, 57472, + 57476, 57479, 57483, 57487, 57491, 57495, 57498, 57502, 57506, 57509, + 57513, 57517, 57521, 57525, 57529, 57533, 57537, 0, 57541, 57544, 57547, + 57550, 57553, 57556, 57559, 57562, 57565, 57568, 57571, 57574, 57577, + 57580, 57583, 57586, 57589, 57592, 57595, 57598, 57601, 57604, 57607, + 57610, 57613, 57616, 57619, 57622, 57625, 57628, 57631, 57634, 57637, + 57640, 57643, 57646, 57649, 57652, 57655, 57658, 57661, 57664, 57667, + 57670, 57673, 57676, 57679, 57682, 57685, 57688, 57691, 57694, 57697, + 57700, 57703, 57706, 57709, 57712, 57715, 57718, 57721, 57724, 57727, + 57730, 57733, 57736, 57739, 57742, 57745, 57748, 57751, 57754, 57757, + 57760, 57763, 57766, 57769, 57772, 57775, 57778, 57781, 57784, 57787, + 57790, 57793, 57796, 57799, 57802, 57805, 57813, 57820, 57827, 57834, + 57841, 57848, 57855, 57862, 57869, 57876, 57884, 57892, 57900, 57908, + 57916, 57924, 57932, 57940, 57948, 57956, 57964, 57972, 57980, 57988, + 57996, 57999, 58002, 58005, 58007, 58010, 58013, 58016, 58021, 58026, + 58029, 58036, 58043, 58050, 58057, 58060, 58065, 58068, 58072, 58074, + 58076, 58079, 58082, 58085, 58088, 58091, 58094, 58097, 58102, 58106, + 58109, 58112, 58115, 58118, 58121, 58124, 58127, 58131, 58134, 58137, + 58140, 58143, 58146, 58150, 58153, 58156, 58159, 58164, 58169, 58174, + 58179, 58184, 58189, 58194, 58199, 58204, 58212, 58214, 58217, 58220, + 58223, 58226, 58231, 58239, 58242, 58245, 58249, 58252, 58255, 58258, + 58262, 58265, 58268, 58273, 58276, 58279, 58284, 58287, 58290, 58295, + 58300, 58305, 58308, 58311, 58314, 58317, 58323, 58326, 58329, 58332, + 58334, 58337, 58340, 58343, 58348, 58351, 58354, 58357, 58360, 58363, + 58368, 58371, 58374, 58377, 58380, 58383, 58386, 58389, 58392, 58395, + 58400, 58404, 58411, 58418, 58425, 58432, 58439, 58446, 58453, 58460, + 58467, 58475, 58483, 58491, 58499, 58507, 58515, 58523, 58531, 58539, + 58547, 58555, 58563, 58571, 58579, 58587, 58595, 58603, 58611, 58619, + 58627, 58635, 58643, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 90715, 90719, 90723, 90727, 90731, 90735, 90739, 90743, 90747, 90751, - 90756, 90761, 90766, 90771, 90776, 90781, 90786, 90791, 90796, 90802, - 90808, 90814, 90821, 90828, 90835, 90842, 90849, 90856, 90863, 90870, - 90877, 0, 90884, 90888, 90892, 90896, 90899, 90903, 90906, 90910, 90913, - 90917, 90920, 90924, 90927, 90931, 90934, 90938, 90942, 90946, 90950, - 90954, 90958, 90962, 90966, 90970, 90974, 90978, 90982, 90986, 90990, - 90994, 90998, 91002, 91006, 91010, 91014, 91017, 91020, 91024, 91028, - 91032, 91035, 91038, 91041, 91045, 91049, 91053, 91057, 91061, 91064, - 91069, 91073, 91078, 91082, 91087, 91091, 91096, 91100, 91105, 91109, - 91113, 91117, 91121, 91124, 91128, 91133, 91136, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 91140, 91143, 91148, 91154, 91162, 91167, 91173, 91181, - 91187, 91193, 91197, 91201, 91208, 91217, 91224, 91233, 91239, 91248, - 91255, 91262, 91269, 91279, 91285, 91289, 91296, 91305, 91315, 91322, - 91329, 91333, 91337, 91344, 91354, 91358, 91365, 91372, 91379, 91385, - 91392, 91399, 91406, 91413, 91417, 91421, 91425, 91432, 91436, 91443, - 91450, 91464, 91473, 91477, 91481, 91485, 91492, 91496, 91500, 91504, - 91512, 91520, 91539, 91549, 91569, 91573, 91577, 91581, 91585, 91589, - 91593, 91597, 91604, 91608, 91611, 91615, 91619, 91625, 91632, 91641, - 91645, 91654, 91663, 91671, 91675, 91682, 91686, 91690, 91694, 91698, - 91709, 91718, 91727, 91736, 91745, 91757, 91766, 91775, 91784, 91792, - 91801, 91813, 91822, 91831, 91840, 91852, 91861, 91870, 91882, 91891, - 91900, 91912, 91921, 91925, 91929, 91933, 91937, 91941, 91945, 91949, - 91956, 91960, 91964, 91975, 91979, 91983, 91990, 91996, 92002, 92006, - 92013, 92017, 92021, 92025, 92029, 92033, 92037, 92043, 92051, 92055, - 92059, 92062, 92068, 92078, 92082, 92094, 92101, 92108, 92115, 92122, - 92128, 92132, 92136, 92140, 92144, 92151, 92160, 92167, 92175, 92183, - 92189, 92193, 92197, 92201, 92205, 92211, 92220, 92232, 92239, 92246, - 92255, 92266, 92272, 92281, 92290, 92297, 92306, 92313, 92320, 92330, - 92337, 92344, 92351, 92358, 92362, 92368, 92372, 92383, 92391, 92400, - 92412, 92419, 92426, 92436, 92443, 92452, 92459, 92468, 92475, 92482, - 92492, 92499, 92506, 92516, 92523, 92535, 92544, 92551, 92558, 92565, - 92574, 92584, 92597, 92604, 92614, 92624, 92631, 92640, 92653, 92660, - 92667, 92674, 92684, 92694, 92701, 92711, 92718, 92725, 92735, 92741, - 92748, 92755, 92762, 92772, 92779, 92786, 92793, 92799, 92806, 92816, - 92823, 92827, 92835, 92839, 92851, 92855, 92869, 92873, 92877, 92881, - 92885, 92891, 92898, 92906, 92910, 92914, 92918, 92922, 92929, 92933, - 92939, 92945, 92953, 92957, 92964, 92972, 92976, 92980, 92986, 92990, - 92999, 93008, 93015, 93025, 93031, 93035, 93039, 93047, 93054, 93061, - 93067, 93071, 93079, 93083, 93090, 93102, 93109, 93119, 93125, 93129, - 93138, 93145, 93154, 93158, 93162, 93169, 93173, 93177, 93181, 93185, - 93188, 93194, 93200, 93204, 93208, 93215, 93222, 93229, 93236, 93243, - 93250, 93257, 93264, 93270, 93274, 93278, 93285, 93292, 93299, 93306, - 93313, 93317, 93320, 93325, 93329, 93333, 93342, 93351, 93355, 93359, - 93365, 93371, 93388, 93394, 93398, 93407, 93411, 93415, 93422, 93430, - 93438, 93444, 93448, 93452, 93456, 93460, 93463, 93468, 93474, 93483, - 93489, 93495, 93501, 93506, 93512, 93518, 93524, 93530, 93536, 93544, - 93550, 93561, 93567, 93573, 93582, 93592, 93598, 93604, 93610, 93616, - 93622, 93628, 93634, 93640, 93646, 93652, 93661, 93670, 93679, 93685, - 93694, 93700, 93706, 93712, 93718, 93724, 93730, 93736, 93742, 93748, - 93754, 93760, 93766, 93772, 93777, 93783, 93789, 93797, 93803, 93809, - 93813, 93821, 93825, 93829, 93833, 93837, 93841, 93848, 93852, 93861, - 93865, 93872, 93880, 93884, 93888, 93892, 93905, 93921, 93925, 93929, - 93936, 93942, 93949, 93953, 93957, 93961, 93965, 93969, 93976, 93980, - 93998, 94002, 94006, 94013, 94017, 94021, 94027, 94031, 94035, 94043, - 94047, 94051, 94055, 94059, 94065, 94076, 94085, 94094, 94101, 94108, - 94119, 94126, 94133, 94140, 94147, 94154, 94161, 94168, 94178, 94184, - 94191, 94201, 94210, 94217, 94226, 94236, 94243, 94250, 94257, 94264, - 94276, 94283, 94290, 94297, 94304, 94311, 94321, 94328, 94335, 94345, - 94358, 94370, 94377, 94387, 94394, 94401, 94408, 94422, 94428, 94436, - 94446, 94456, 94463, 94470, 94476, 94480, 94487, 94497, 94503, 94516, - 94520, 94524, 94531, 94535, 94542, 94552, 94556, 94560, 94564, 94568, - 94572, 94579, 94583, 94590, 94597, 94604, 94613, 94622, 94632, 94639, - 94646, 94653, 94663, 94670, 94680, 94687, 94697, 94704, 94711, 94721, - 94731, 94738, 94744, 94752, 94760, 94766, 94772, 94776, 94780, 94787, - 94795, 94801, 94805, 94809, 94813, 94820, 94832, 94835, 94842, 94848, - 94852, 94856, 94860, 94864, 94868, 94872, 94876, 94880, 94884, 94888, - 94895, 94899, 94905, 94909, 94913, 94917, 94923, 94930, 94937, 94944, - 94955, 94963, 94967, 94973, 94982, 94989, 94995, 94998, 95002, 95006, - 95012, 95021, 95029, 95033, 95039, 95043, 95047, 95051, 95057, 95064, - 95070, 95074, 95080, 95084, 95088, 95097, 95109, 95113, 95120, 95127, - 95137, 95144, 95156, 95163, 95170, 95177, 95188, 95198, 95211, 95221, - 95228, 95232, 95236, 95240, 95244, 95253, 95262, 95271, 95288, 95297, - 95303, 95310, 95318, 95331, 95335, 95344, 95353, 95362, 95371, 95382, - 95391, 95400, 95409, 95418, 95427, 95436, 95446, 95449, 95453, 95457, - 95461, 95465, 95469, 95475, 95482, 95489, 95496, 95502, 95508, 95515, - 95521, 95528, 95536, 95540, 95547, 95554, 95561, 95569, 95572, 95576, - 95580, 95584, 95588, 95594, 95598, 95604, 95611, 95618, 95624, 95631, - 95638, 95645, 95652, 95659, 95666, 95673, 95680, 95687, 95694, 95701, - 95708, 95715, 95722, 95728, 95732, 95741, 95745, 95749, 95753, 95757, - 95763, 95770, 95777, 95784, 95791, 95798, 95804, 95812, 95816, 95820, - 95824, 95828, 95834, 95851, 95868, 95872, 95876, 95880, 95884, 95888, - 95892, 95898, 95905, 95909, 95915, 95922, 95929, 95936, 95943, 95950, - 95959, 95966, 95973, 95980, 95987, 95991, 95995, 96001, 96013, 96017, - 96021, 96030, 96034, 96038, 96042, 96048, 96052, 96056, 96065, 96069, - 96073, 96077, 96084, 96088, 96092, 96096, 96100, 96104, 96108, 96112, - 96116, 96122, 96129, 96136, 96142, 96146, 96163, 96169, 96173, 96179, - 96185, 96191, 96197, 96203, 96209, 96213, 96217, 96221, 96227, 96231, - 96237, 96241, 96245, 96252, 96259, 96276, 96280, 96284, 96288, 96292, - 96296, 96308, 96311, 96316, 96321, 96336, 96346, 96357, 96361, 96365, - 96369, 96375, 96382, 96389, 96399, 96411, 96417, 96423, 96432, 96436, - 96440, 96447, 96457, 96464, 96470, 96474, 96478, 96485, 96491, 96495, - 96501, 96505, 96513, 96519, 96523, 96531, 96539, 96546, 96552, 96559, - 96566, 96576, 96586, 96590, 96594, 96598, 96602, 96608, 96615, 96621, - 96628, 96635, 96642, 96651, 96658, 96665, 96671, 96678, 96685, 96692, - 96699, 96706, 96713, 96719, 96726, 96733, 96740, 96749, 96756, 96763, - 96767, 96773, 96777, 96783, 96790, 96797, 96804, 96808, 96812, 96816, - 96820, 96824, 96831, 96835, 96839, 96845, 96853, 96857, 96861, 96865, - 96869, 96876, 96880, 96884, 96892, 96896, 96900, 96904, 96908, 96914, - 96918, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 96922, 96928, - 96934, 96941, 96948, 96955, 96962, 96969, 96976, 96982, 96989, 96996, - 97003, 97010, 97017, 97024, 97030, 97036, 97042, 97048, 97054, 97060, - 97066, 97072, 97078, 97085, 97092, 97099, 97106, 97113, 97120, 97126, - 97132, 97138, 97145, 97152, 97158, 97164, 97173, 97180, 97187, 97194, - 97201, 97208, 97215, 97221, 97227, 97233, 97242, 97249, 97256, 97267, - 97278, 97284, 97290, 97296, 97305, 97312, 97319, 97329, 97339, 97350, - 97361, 97373, 97386, 97397, 97408, 97420, 97433, 97444, 97455, 97466, - 97477, 97488, 97500, 97508, 97516, 97525, 97534, 97543, 97549, 97555, - 97561, 97568, 97578, 97585, 97595, 97600, 97605, 97611, 97617, 97625, - 97633, 97642, 97653, 97664, 97672, 97680, 97689, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 97698, 97709, 97716, 97724, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 97732, 97736, 97740, 97744, 97748, 97752, 97756, 97760, 97764, - 97768, 97772, 97776, 97780, 97784, 97788, 97792, 97796, 97800, 97804, - 97808, 97812, 97816, 97820, 97824, 97828, 97832, 97836, 97840, 97844, - 97848, 97852, 97856, 97860, 97864, 97868, 97872, 97876, 97880, 97884, - 97888, 97892, 97896, 97900, 97904, 97908, 97912, 97916, 97920, 97924, - 97928, 97932, 97936, 97940, 97944, 97948, 97952, 97956, 97960, 97964, - 97968, 97972, 97976, 97980, 97984, 97988, 97992, 97996, 98000, 98004, - 98008, 98012, 98016, 98020, 98024, 98028, 98032, 98036, 98040, 98044, - 98048, 98052, 98056, 98060, 98064, 98068, 98072, 98076, 98080, 98084, - 98088, 98092, 98096, 98100, 98104, 98108, 98112, 98116, 98120, 98124, - 98128, 98132, 98136, 98140, 98144, 98148, 98152, 98156, 98160, 98164, - 98168, 98172, 98176, 98180, 98184, 98188, 98192, 98196, 98200, 98204, - 98208, 98212, 98216, 98220, 98224, 98228, 98232, 98236, 98240, 98244, - 98248, 98252, 98256, 98260, 98264, 98268, 98272, 98276, 98280, 98284, - 98288, 98292, 98296, 98300, 98304, 98308, 98312, 98316, 98320, 98324, - 98328, 98332, 98336, 98340, 98344, 98348, 98352, 98356, 98360, 98364, - 98368, 98372, 98376, 98380, 98384, 98388, 98392, 98396, 98400, 98404, - 98408, 98412, 98416, 98420, 98424, 98428, 98432, 98436, 98440, 98444, - 98448, 98452, 98456, 98460, 98464, 98468, 98472, 98476, 98480, 98484, - 98488, 98492, 98496, 98500, 98504, 98508, 98512, 98516, 98520, 98524, - 98528, 98532, 98536, 98540, 98544, 98548, 98552, 98556, 98560, 98564, - 98568, 98572, 98576, 98580, 98584, 98588, 98592, 98596, 98600, 98604, - 98608, 98612, 98616, 98620, 98624, 98628, 98632, 98636, 98640, 98644, - 98648, 98652, 98656, 98660, 98664, 98668, 98672, 98676, 98680, 98684, - 98688, 98692, 98696, 98700, 98704, 98708, 98712, 98716, 98720, 98724, - 98728, 98732, 98736, 98740, 98744, 98748, 98752, 98756, 98760, 98764, - 98768, 98772, 98776, 98780, 98784, 98788, 98792, 98796, 98800, 98804, - 98808, 98812, 98816, 98820, 98824, 98828, 98832, 98836, 98840, 98844, - 98848, 98852, 98856, 98860, 98864, 98868, 98872, 98876, 98880, 98884, - 98888, 98892, 98896, 98900, 98904, 98908, 98912, 98916, 98920, 98924, - 98928, 98932, 98936, 98940, 98944, 98948, 98952, 98956, 98960, 98964, - 98968, 98972, 98976, 98980, 98984, 98988, 98992, 98996, 99000, 99004, - 99008, 99012, 99016, 99020, 99024, 99028, 99032, 99036, 99040, 99044, - 99048, 99052, 99056, 99060, 99064, 99068, 99072, 99076, 99080, 99084, - 99088, 99092, 99096, 99100, 99104, 99108, 99112, 99116, 99120, 99124, - 99128, 99132, 99136, 99140, 99144, 99148, 99152, 99156, 99160, 99164, - 99168, 99172, 99176, 99180, 99184, 99188, 99192, 99196, 99200, 99204, - 99208, 99212, 99216, 99220, 99224, 99228, 99232, 99236, 99240, 99244, - 99248, 99252, 99256, 99260, 99264, 99268, 99272, 99276, 99280, 99284, - 99288, 99292, 99296, 99300, 99304, 99308, 99312, 99316, 99320, 99324, - 99328, 99332, 99336, 99340, 99344, 99348, 99352, 99356, 99360, 99364, - 99368, 99372, 99376, 99380, 99384, 99388, 99392, 99396, 99400, 99404, - 99408, 99412, 99416, 99420, 99424, 99428, 99432, 99436, 99440, 99444, - 99448, 99452, 99456, 99460, 99464, 99468, 99472, 99476, 99480, 99484, - 99488, 99492, 99496, 99500, 99504, 99508, 99512, 99516, 99520, 99524, - 99528, 99532, 99536, 99540, 99544, 99548, 99552, 99556, 99560, 99564, - 99568, 99572, 99576, 99580, 99584, 99588, 99592, 99596, 99600, 99604, - 99608, 99612, 99616, 99620, 99624, 99628, 99632, 99636, 99640, 99644, - 99648, 99652, 99656, 99660, 99664, 99668, 99672, 99676, 99680, 99684, - 99688, 99692, 99696, 99700, 99704, 99708, 99712, 99716, 99720, 99724, - 99728, 99732, 99736, 99740, 99744, 99748, 99752, 99756, 99760, 99764, - 99768, 99772, 99776, 99780, 99784, 99788, 99792, 99796, 99800, 99804, - 99808, 99812, 99816, 99820, 99824, 99828, 99832, 99836, 99840, 99844, - 99848, 99852, 99856, 99860, 99864, 99868, 99872, 99876, 99880, 99884, - 99888, 99892, 99896, 99900, 99904, 99908, 99912, 99916, 99920, 99924, - 99928, 99932, 99936, 99940, 99944, 99948, 99952, 99956, 99960, 99964, - 99968, 99972, 99976, 99980, 99984, 99988, 99992, 99996, 100000, 100004, - 100008, 100012, 100016, 100020, 100024, 100028, 100032, 100036, 100040, - 100044, 100048, 100052, 100056, 100060, 100064, 100068, 100072, 100076, - 100080, 100084, 100088, 100092, 100096, 100100, 100104, 100108, 100112, - 100116, 100120, 100124, 100128, 100132, 100136, 100140, 100144, 100148, - 100152, 100156, 100160, 100164, 100168, 100172, 100176, 100180, 100184, - 100188, 100192, 100196, 100200, 100204, 100208, 100212, 100216, 100220, - 100224, 100228, 100232, 100236, 100240, 100244, 100248, 100252, 100256, - 100260, 100264, 100268, 100272, 100276, 100280, 100284, 100288, 100292, - 100296, 100300, 100304, 100308, 100312, 100316, 100320, 100324, 100328, - 100332, 100336, 100340, 100344, 100348, 100352, 100356, 100360, 100364, - 100368, 100372, 100376, 100380, 100384, 100388, 100392, 100396, 100400, - 100404, 100408, 100412, 100416, 100420, 100424, 100428, 100432, 100436, - 100440, 100444, 100448, 100452, 100456, 100460, 100464, 100468, 100472, - 100476, 100480, 100484, 100488, 100492, 100496, 100500, 100504, 100508, - 100512, 100516, 100520, 100524, 100528, 100532, 100536, 100540, 100544, - 100548, 100552, 100556, 100560, 100564, 100568, 100572, 100576, 100580, - 100584, 100588, 100592, 100596, 100600, 100604, 100608, 100612, 100616, - 100620, 100624, 100628, 100632, 100636, 100640, 100644, 100648, 100652, - 100656, 100660, 100664, 100668, 100672, 100676, 100680, 100684, 100688, - 100692, 100696, 100700, 100704, 100708, 100712, 100716, 100720, 100724, - 100728, 100732, 100736, 100740, 100744, 100748, 100752, 100756, 100760, - 100764, 100768, 100772, 100776, 100780, 100784, 100788, 100792, 100796, - 100800, 100804, 100808, 100812, 100816, 100820, 100824, 100828, 100832, - 100836, 100840, 100844, 100848, 100852, 100856, 100860, 100864, 100868, - 100872, 100876, 100880, 100884, 100888, 100892, 100896, 100900, 100904, - 100908, 100912, 100916, 100920, 100924, 100928, 100932, 100936, 100940, - 100944, 100948, 100952, 100956, 100960, 100964, 100968, 100972, 100976, - 100980, 100984, 100988, 100992, 100996, 101000, 101004, 101008, 101012, - 101016, 101020, 101024, 101028, 101032, 101036, 101040, 101044, 101048, - 101052, 101056, 101060, 101064, 101068, 101072, 101076, 101080, 101084, - 101088, 101092, 101096, 101100, 101104, 101108, 101112, 101116, 101120, - 101124, 101128, 101132, 101136, 101140, 101144, 101148, 101152, 101156, - 101160, 101164, 101168, 101172, 101176, 101180, 101184, 101188, 101192, - 101196, 101200, 101204, 101208, 101212, 101216, 101220, 101224, 101228, - 101232, 101236, 101240, 101244, 101248, 101252, 101256, 101260, 101264, - 101268, 101272, 101276, 101280, 101284, 101288, 101292, 101296, 101300, - 101304, 101308, 101312, 101316, 101320, 101324, 101328, 101332, 101336, - 101340, 101344, 101348, 101352, 101356, 101360, 101364, 101368, 101372, - 101376, 101380, 101384, 101388, 101392, 101396, 101400, 101404, 101408, - 101412, 101416, 101420, 101424, 101428, 101432, 101436, 101440, 101444, - 101448, 101452, 101456, 101460, 101464, 101468, 101472, 101476, 101480, - 101484, 101488, 101492, 101496, 101500, 101504, 101508, 101512, 101516, - 101520, 101524, 101528, 101532, 101536, 101540, 101544, 101548, 101552, - 101556, 101560, 101564, 101568, 101572, 101576, 101580, 101584, 101588, - 101592, 101596, 101600, 101604, 101608, 101612, 101616, 101620, 101624, - 101628, 101632, 101636, 101640, 101644, 101648, 101652, 101656, 101660, - 101664, 101668, 101672, 101676, 101680, 101684, 101688, 101692, 101696, - 101700, 101704, 101708, 101712, 101716, 101720, 101724, 101728, 101732, - 101736, 101740, 101744, 101748, 101752, 101756, 101760, 101764, 101768, - 101772, 101776, 101780, 101784, 101788, 101792, 101796, 101800, 101804, - 101808, 101812, 101816, 101820, 101824, 101828, 101832, 101836, 101840, - 101844, 101848, 101852, 101856, 101860, 101864, 101868, 101872, 101876, - 101880, 101884, 101888, 101892, 101896, 101900, 101904, 101908, 101912, - 101916, 101920, 101924, 101928, 101932, 101936, 101940, 101944, 101948, - 101952, 101956, 101960, 101964, 101968, 101972, 101976, 101980, 101984, - 101988, 101992, 101996, 102000, 102004, 102008, 102012, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 102016, 102021, 102026, 102031, 102038, 102045, 102052, 102059, - 102064, 102069, 102074, 102079, 102086, 102091, 102098, 102105, 102110, - 102115, 102120, 102127, 102132, 102137, 102144, 102151, 102156, 102161, - 102166, 102173, 102180, 102187, 102192, 102197, 102204, 102211, 102218, - 102225, 102230, 102235, 102240, 102247, 102252, 102257, 102262, 102269, - 102278, 102285, 102290, 102295, 102300, 102305, 102310, 102315, 102324, - 102331, 102336, 102343, 102350, 102355, 102360, 102365, 102372, 102377, - 102384, 102391, 102396, 102401, 102406, 102413, 102420, 102425, 102430, - 102437, 102444, 102451, 102456, 102461, 102466, 102471, 102478, 102487, - 102496, 102501, 102508, 102517, 102522, 102527, 102532, 102537, 102544, - 102551, 102558, 102565, 102570, 102575, 102580, 102587, 102594, 102601, - 102606, 102611, 102618, 102623, 102630, 102635, 102642, 102647, 102654, - 102661, 102666, 102671, 102676, 102681, 102686, 102691, 102696, 102701, - 102706, 102713, 102720, 102727, 102734, 102741, 102750, 102755, 102760, - 102767, 102774, 102779, 102786, 102793, 102800, 102807, 102814, 102821, - 102826, 102831, 102836, 102841, 102846, 102855, 102864, 102873, 102882, - 102891, 102900, 102909, 102918, 102923, 102934, 102945, 102954, 102959, - 102964, 102969, 102974, 102983, 102990, 102997, 103004, 103011, 103018, - 103025, 103034, 103043, 103054, 103063, 103074, 103083, 103090, 103099, - 103110, 103119, 103128, 103137, 103146, 103153, 103160, 103167, 103176, - 103185, 103196, 103205, 103214, 103225, 103230, 103235, 103246, 103254, - 103263, 103272, 103281, 103292, 103301, 103310, 103321, 103332, 103343, - 103354, 103365, 103376, 103383, 103390, 103397, 103404, 103415, 103424, - 103431, 103438, 103445, 103456, 103467, 103478, 103489, 103500, 103511, - 103522, 103533, 103540, 103547, 103556, 103565, 103572, 103579, 103586, - 103595, 103604, 103613, 103620, 103629, 103638, 103647, 103654, 103661, - 103666, 103672, 103679, 103686, 103693, 103700, 103707, 103714, 103723, - 103732, 103741, 103750, 103757, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 103766, - 103772, 103777, 103782, 103789, 103795, 103801, 103807, 103813, 103819, - 103825, 103831, 103835, 103839, 103845, 103851, 103857, 103861, 103866, - 103871, 103875, 103879, 103882, 103888, 103894, 103900, 103906, 103912, - 103918, 103924, 103930, 103936, 103946, 103956, 103962, 103968, 103978, - 103988, 103994, 0, 0, 104000, 104008, 104013, 104018, 104024, 104030, - 104036, 104042, 104048, 104054, 104061, 104068, 104074, 104080, 104086, - 104092, 104098, 104104, 104110, 104116, 104121, 104127, 104133, 104139, - 104145, 104151, 104160, 104166, 104171, 104179, 104186, 104193, 104202, - 104211, 104220, 104229, 104238, 104247, 104256, 104265, 104275, 104285, - 104293, 104301, 104310, 104319, 104325, 104331, 104337, 104343, 104351, - 104359, 104363, 104369, 104374, 104380, 104386, 104392, 104398, 104404, - 104413, 104418, 104425, 104430, 104435, 104440, 104446, 104452, 104458, - 104465, 104470, 104475, 104480, 104485, 104490, 104496, 104502, 104508, - 104514, 104520, 104526, 104532, 104538, 104543, 104548, 104553, 104558, - 104563, 104568, 104573, 104578, 104584, 104590, 104595, 104600, 104605, - 104610, 104615, 104621, 104628, 104632, 104636, 104640, 104644, 104648, - 104652, 104656, 104660, 104668, 104678, 104682, 104686, 104692, 104698, - 104704, 104710, 104716, 104722, 104728, 104734, 104740, 104746, 104752, - 104758, 104764, 104770, 104774, 104778, 104785, 104791, 104797, 104803, - 104808, 104815, 104820, 104826, 104832, 104838, 104844, 104849, 104853, - 104859, 104863, 104867, 104871, 104877, 104883, 104887, 104893, 104899, - 104905, 104911, 104917, 104925, 104933, 104939, 104945, 104951, 104957, - 104969, 104981, 104995, 105007, 105019, 105033, 105047, 105061, 105065, - 105073, 105081, 105086, 105090, 105094, 105098, 105102, 105106, 105110, - 105114, 105120, 105126, 105132, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 105138, - 105144, 105150, 105156, 105162, 105168, 105174, 105180, 105186, 105192, - 105198, 105204, 105210, 105216, 105222, 105228, 105234, 105240, 105246, - 105252, 105258, 105264, 105270, 105276, 105282, 105288, 105294, 105300, - 105306, 105312, 105318, 105324, 105330, 105336, 105342, 105348, 105354, - 105360, 105366, 105372, 105378, 105384, 105390, 105396, 105402, 105408, - 105414, 105420, 105426, 105432, 105438, 105444, 105450, 105456, 105462, - 105468, 105474, 105480, 105486, 105492, 105498, 105504, 105510, 105516, - 105522, 105528, 105534, 105539, 105544, 105549, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 105553, 105558, 105565, 105572, 105579, 105586, 105591, 105595, - 105601, 105605, 105609, 105615, 105619, 105623, 105627, 105633, 105640, - 105644, 105648, 105652, 105656, 105660, 105664, 105670, 105674, 105678, - 105682, 105686, 105690, 105694, 105698, 105702, 105706, 105710, 105714, - 105718, 105723, 105727, 105731, 105735, 105739, 105743, 105747, 105751, - 105755, 105759, 105766, 105770, 105777, 105781, 105785, 105789, 105793, - 105797, 105801, 105805, 105812, 105816, 105820, 105824, 105828, 105832, - 105838, 105842, 105848, 105852, 105856, 105860, 105864, 105868, 105872, - 105876, 105880, 105884, 105888, 105892, 105896, 105900, 105904, 105908, - 105912, 105916, 105920, 105924, 105932, 105936, 105940, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 105944, 105952, 105960, 105968, 105976, 105984, 105992, 106000, - 106008, 106016, 106024, 106032, 106040, 106048, 106056, 106064, 106072, - 106080, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 106088, 106092, 106097, - 106102, 106107, 106111, 106116, 106121, 106126, 106130, 106135, 106140, - 106144, 106148, 106152, 106156, 106161, 106166, 106170, 106174, 106179, - 106183, 106188, 106193, 106198, 106203, 106208, 106212, 106217, 106222, - 106227, 106231, 106236, 106241, 106246, 106250, 106255, 106260, 106264, - 106268, 106272, 106276, 106281, 106286, 106290, 106294, 106299, 106303, - 106308, 106313, 106318, 106323, 106328, 106332, 106337, 106342, 106347, - 106351, 106356, 106361, 106366, 106370, 106375, 106380, 106384, 106388, - 106392, 106396, 106401, 106406, 106410, 106414, 106419, 106423, 106428, - 106433, 106438, 106443, 106448, 106452, 106457, 106462, 106467, 106471, - 106476, 0, 106481, 106485, 106490, 106495, 106499, 106503, 106507, - 106511, 106516, 106521, 106525, 106529, 106534, 106538, 106543, 106548, - 106553, 106558, 106563, 106568, 106574, 106580, 106586, 106591, 106597, - 106603, 106609, 106614, 106620, 106626, 106631, 106636, 106641, 106646, - 106652, 106658, 106663, 106668, 106674, 106679, 106685, 106691, 106697, - 106703, 106709, 106714, 106720, 106726, 106732, 106737, 106743, 106749, - 106755, 106760, 106766, 106772, 106777, 106782, 106787, 106792, 106798, - 106804, 106809, 106814, 106820, 106825, 106831, 106837, 106843, 106849, - 106855, 0, 106859, 106864, 0, 0, 106869, 0, 0, 106874, 106879, 0, 0, - 106884, 106888, 106892, 106897, 0, 106902, 106906, 106911, 106915, - 106920, 106925, 106930, 106935, 106940, 106944, 106949, 106954, 0, - 106959, 0, 106964, 106969, 106973, 106978, 106983, 106987, 106991, 0, - 106995, 107000, 107005, 107009, 107013, 107018, 107022, 107027, 107032, - 107037, 107042, 107047, 107052, 107058, 107064, 107070, 107075, 107081, - 107087, 107093, 107098, 107104, 107110, 107115, 107120, 107125, 107130, - 107136, 107142, 107147, 107152, 107158, 107163, 107169, 107175, 107181, - 107187, 107193, 107198, 107204, 107210, 107216, 107221, 107227, 107233, - 107239, 107244, 107250, 107256, 107261, 107266, 107271, 107276, 107282, - 107288, 107293, 107298, 107304, 107309, 107315, 107321, 107327, 107333, - 107339, 107343, 0, 107348, 107353, 107357, 107362, 0, 0, 107367, 107372, - 107377, 107381, 107385, 107389, 107393, 107398, 0, 107403, 107407, - 107412, 107416, 107421, 107426, 107431, 0, 107436, 107440, 107445, - 107450, 107455, 107459, 107464, 107469, 107474, 107478, 107483, 107488, - 107492, 107496, 107500, 107504, 107509, 107514, 107518, 107522, 107527, - 107531, 107536, 107541, 107546, 107551, 107556, 107560, 0, 107565, - 107570, 107574, 107579, 0, 107584, 107588, 107593, 107598, 107602, 0, - 107606, 0, 0, 0, 107610, 107614, 107619, 107623, 107628, 107633, 107638, - 0, 107643, 107647, 107652, 107657, 107662, 107666, 107671, 107676, - 107681, 107685, 107690, 107695, 107699, 107703, 107707, 107711, 107716, - 107721, 107725, 107729, 107734, 107738, 107743, 107748, 107753, 107758, - 107763, 107768, 107774, 107780, 107786, 107791, 107797, 107803, 107809, - 107814, 107820, 107826, 107831, 107836, 107841, 107846, 107852, 107858, - 107863, 107868, 107874, 107879, 107885, 107891, 107897, 107903, 107909, - 107914, 107920, 107926, 107932, 107937, 107943, 107949, 107955, 107960, - 107966, 107972, 107977, 107982, 107987, 107992, 107998, 108004, 108009, - 108014, 108020, 108025, 108031, 108037, 108043, 108049, 108055, 108059, - 108064, 108069, 108074, 108078, 108083, 108088, 108093, 108097, 108102, - 108107, 108111, 108115, 108119, 108123, 108128, 108133, 108137, 108141, - 108146, 108150, 108155, 108160, 108165, 108170, 108175, 108179, 108184, - 108189, 108194, 108198, 108203, 108208, 108213, 108217, 108222, 108227, - 108231, 108235, 108239, 108243, 108248, 108253, 108257, 108261, 108266, - 108270, 108275, 108280, 108285, 108290, 108295, 108300, 108306, 108312, - 108318, 108323, 108329, 108335, 108341, 108346, 108352, 108358, 108363, - 108368, 108373, 108378, 108384, 108390, 108395, 108400, 108406, 108411, - 108417, 108423, 108429, 108435, 108441, 108446, 108452, 108458, 108464, - 108469, 108475, 108481, 108487, 108492, 108498, 108504, 108509, 108514, - 108519, 108524, 108530, 108536, 108541, 108546, 108552, 108557, 108563, - 108569, 108575, 108581, 108587, 108592, 108598, 108604, 108610, 108615, - 108621, 108627, 108633, 108638, 108644, 108650, 108655, 108660, 108665, - 108670, 108676, 108682, 108687, 108692, 108698, 108703, 108709, 108715, - 108721, 108727, 108733, 108738, 108744, 108750, 108756, 108761, 108767, - 108773, 108779, 108784, 108790, 108796, 108801, 108806, 108811, 108816, - 108822, 108828, 108833, 108838, 108844, 108849, 108855, 108861, 108867, - 108873, 108879, 108885, 108892, 108899, 108906, 108912, 108919, 108926, - 108933, 108939, 108946, 108953, 108959, 108965, 108971, 108977, 108984, - 108991, 108997, 109003, 109010, 109016, 109023, 109030, 109037, 109044, - 109051, 109057, 109064, 109071, 109078, 109084, 109091, 109098, 109105, - 109111, 109118, 109125, 109131, 109137, 109143, 109149, 109156, 109163, - 109169, 109175, 109182, 109188, 109195, 109202, 109209, 109216, 109223, - 109227, 109232, 109237, 109242, 109246, 109251, 109256, 109261, 109265, - 109270, 109275, 109279, 109283, 109287, 109291, 109296, 109301, 109305, - 109309, 109314, 109318, 109323, 109328, 109333, 109338, 109343, 109347, - 109352, 109357, 109362, 109366, 109371, 109376, 109381, 109385, 109390, - 109395, 109399, 109403, 109407, 109411, 109416, 109421, 109425, 109429, - 109434, 109438, 109443, 109448, 109453, 109458, 109463, 109469, 0, 0, - 109476, 109481, 109486, 109491, 109496, 109501, 109506, 109511, 109516, - 109521, 109526, 109531, 109536, 109541, 109546, 109551, 109556, 109561, - 109567, 109572, 109577, 109582, 109587, 109592, 109597, 109602, 109606, - 109611, 109616, 109621, 109626, 109631, 109636, 109641, 109646, 109651, - 109656, 109661, 109666, 109671, 109676, 109681, 109686, 109691, 109697, - 109702, 109707, 109712, 109717, 109722, 109727, 109732, 109738, 109743, - 109748, 109753, 109758, 109763, 109768, 109773, 109778, 109783, 109788, - 109793, 109798, 109803, 109808, 109813, 109818, 109823, 109828, 109833, - 109838, 109843, 109848, 109853, 109859, 109864, 109869, 109874, 109879, - 109884, 109889, 109894, 109898, 109903, 109908, 109913, 109918, 109923, - 109928, 109933, 109938, 109943, 109948, 109953, 109958, 109963, 109968, - 109973, 109978, 109983, 109989, 109994, 109999, 110004, 110009, 110014, - 110019, 110024, 110030, 110035, 110040, 110045, 110050, 110055, 110060, - 110066, 110072, 110078, 110084, 110090, 110096, 110102, 110108, 110114, - 110120, 110126, 110132, 110138, 110144, 110150, 110156, 110162, 110169, - 110175, 110181, 110187, 110193, 110199, 110205, 110211, 110216, 110222, - 110228, 110234, 110240, 110246, 110252, 110258, 110264, 110270, 110276, - 110282, 110288, 110294, 110300, 110306, 110312, 110318, 110325, 110331, - 110337, 110343, 110349, 110355, 110361, 110367, 110374, 110380, 110386, - 110392, 110398, 110404, 110410, 110416, 110422, 110428, 110434, 110440, - 110446, 110452, 110458, 110464, 110470, 110476, 110482, 110488, 110494, - 110500, 110506, 110512, 110519, 110525, 110531, 110537, 110543, 110549, - 110555, 110561, 110566, 110572, 110578, 110584, 110590, 110596, 110602, - 110608, 110614, 110620, 110626, 110632, 110638, 110644, 110650, 110656, - 110662, 110668, 110675, 110681, 110687, 110693, 110699, 110705, 110711, - 110717, 110724, 110730, 110736, 110742, 110748, 110754, 110760, 110767, - 110774, 110781, 110788, 110795, 110802, 110809, 110816, 110823, 110830, - 110837, 110844, 110851, 110858, 110865, 110872, 110879, 110887, 110894, - 110901, 110908, 110915, 110922, 110929, 110936, 110942, 110949, 110956, - 110963, 110970, 110977, 110984, 110991, 110998, 111005, 111012, 111019, - 111026, 111033, 111040, 111047, 111054, 111061, 111069, 111076, 111083, - 111090, 111097, 111104, 111111, 111118, 111126, 111133, 111140, 111147, - 111154, 111161, 111168, 111173, 0, 0, 111178, 111183, 111187, 111191, - 111195, 111199, 111203, 111207, 111211, 111215, 111219, 111224, 111228, - 111232, 111236, 111240, 111244, 111248, 111252, 111256, 111260, 111265, - 111269, 111273, 111277, 111281, 111285, 111289, 111293, 111297, 111301, - 111307, 111312, 111317, 111322, 111327, 111332, 111337, 111342, 111347, - 111352, 111357, 111361, 111365, 111369, 111373, 111377, 111381, 111385, - 111389, 111393, 111400, 111407, 111414, 111421, 111428, 111435, 111441, - 111448, 111455, 111462, 111470, 111478, 111486, 111494, 111502, 111510, - 111517, 111524, 111531, 111539, 111547, 111555, 111563, 111571, 111579, - 111586, 111593, 111600, 111608, 111616, 111624, 111632, 111640, 111648, - 111653, 111658, 111663, 111668, 111673, 111678, 111683, 111688, 111693, - 0, 0, 0, 0, 111698, 111703, 111707, 111711, 111715, 111719, 111723, - 111727, 111731, 111735, 111739, 111743, 111747, 111751, 111755, 111759, - 111763, 111767, 111771, 111775, 111779, 111783, 111787, 111791, 111795, - 111799, 111803, 111807, 111811, 111815, 111819, 111823, 111827, 111831, - 111835, 111839, 111843, 111847, 111851, 111855, 111859, 111863, 111867, - 111871, 111875, 111879, 111883, 111887, 111891, 111895, 111899, 111904, - 111908, 111912, 111916, 111920, 111924, 111928, 111932, 111936, 111940, - 111944, 111948, 111952, 111956, 111960, 111964, 111968, 111972, 111976, - 111980, 111984, 111988, 111992, 111996, 112000, 112004, 112008, 112012, - 112016, 112020, 112024, 112028, 112032, 112036, 112040, 112044, 112048, - 112052, 112056, 112060, 112064, 112068, 112072, 112076, 112080, 112084, - 112088, 112092, 112096, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 112100, - 112107, 112112, 112116, 112120, 112124, 112129, 112134, 112139, 112144, - 112149, 0, 0, 0, 0, 0, 112154, 112159, 112165, 112171, 112177, 112182, - 112188, 112194, 112200, 112205, 112211, 112217, 112222, 112227, 112232, - 112237, 112243, 112249, 112254, 112259, 112265, 112270, 112276, 112282, - 112288, 112294, 112300, 112310, 112317, 112323, 112326, 0, 0, 112329, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 112335, 0, 112340, 0, 0, 112346, 0, 0, 0, - 112351, 0, 0, 0, 112357, 112360, 112363, 112366, 112369, 0, 0, 0, 0, 0, - 0, 0, 0, 112372, 0, 0, 0, 0, 0, 0, 0, 112380, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 112388, 0, 112396, - 112403, 0, 0, 112410, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 112418, 112428, - 112433, 112437, 0, 0, 112442, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 112445, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 112449, 112455, - 112461, 112467, 112471, 112477, 112483, 112489, 112495, 112501, 112507, - 112513, 112519, 112525, 112531, 112537, 112543, 112549, 112555, 112561, - 112567, 112573, 112579, 112585, 112591, 112597, 112603, 112609, 112615, - 112621, 112627, 112633, 112639, 112645, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 112651, 112662, 112673, 112684, 112695, 112706, 112717, 112728, - 112739, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 112750, 112754, 112758, 112762, 112766, - 112770, 112774, 112778, 112782, 112786, 112790, 112794, 112798, 112802, - 112806, 112810, 112814, 112818, 112822, 112826, 112830, 112834, 112838, - 112842, 112846, 112850, 112854, 112858, 112862, 112866, 112870, 112874, - 112878, 112882, 112886, 112890, 112894, 112898, 112902, 112906, 112910, - 112914, 112918, 112922, 112926, 112930, 112934, 112938, 112942, 112946, - 112950, 112954, 112958, 112962, 112966, 112970, 112974, 112978, 112982, - 112986, 112990, 112994, 112998, 113002, 113006, 113010, 113014, 113018, - 113022, 113026, 113030, 113034, 113038, 113042, 113046, 113050, 113054, - 113058, 113062, 113066, 113070, 113074, 113078, 113082, 113086, 113090, - 113094, 113098, 113102, 113106, 113110, 113114, 113118, 113122, 113126, - 113130, 113134, 113138, 113142, 113146, 113150, 113154, 113158, 113162, - 113166, 113170, 113174, 113178, 113182, 113186, 113190, 113194, 113198, - 113202, 113206, 113210, 113214, 113218, 113222, 113226, 113230, 113234, - 113238, 113242, 113246, 113250, 113254, 113258, 113262, 113266, 113270, - 113274, 113278, 113282, 113286, 113290, 113294, 113298, 113302, 113306, - 113310, 113314, 113318, 113322, 113326, 113330, 113334, 113338, 113342, - 113346, 113350, 113354, 113358, 113362, 113366, 113370, 113374, 113378, - 113382, 113386, 113390, 113394, 113398, 113402, 113406, 113410, 113414, - 113418, 113422, 113426, 113430, 113434, 113438, 113442, 113446, 113450, - 113454, 113458, 113462, 113466, 113470, 113474, 113478, 113482, 113486, - 113490, 113494, 113498, 113502, 113506, 113510, 113514, 113518, 113522, - 113526, 113530, 113534, 113538, 113542, 113546, 113550, 113554, 113558, - 113562, 113566, 113570, 113574, 113578, 113582, 113586, 113590, 113594, - 113598, 113602, 113606, 113610, 113614, 113618, 113622, 113626, 113630, - 113634, 113638, 113642, 113646, 113650, 113654, 113658, 113662, 113666, - 113670, 113674, 113678, 113682, 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, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 114918, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 114922, 114925, 114929, 114933, 114936, 114940, 114944, 114947, - 114950, 114954, 114958, 114961, 114964, 114967, 114970, 114975, 114978, - 114982, 114985, 114988, 114991, 114994, 114997, 115000, 115003, 115006, - 115009, 115012, 115015, 115019, 115023, 115027, 115031, 115036, 115041, - 115047, 115053, 115059, 115064, 115070, 115076, 115082, 115087, 115093, - 115099, 115104, 115109, 115114, 115119, 115125, 115131, 115136, 115141, - 115147, 115152, 115158, 115164, 115170, 115176, 115182, 115186, 115191, - 115195, 115200, 115204, 115209, 115214, 115220, 115226, 115232, 115237, - 115243, 115249, 115255, 115260, 115266, 115272, 115277, 115282, 115287, - 115292, 115298, 115304, 115309, 115314, 115320, 115325, 115331, 115337, - 115343, 115349, 115355, 115360, 115364, 115369, 115372, 115376, 115379, - 115382, 115385, 115388, 115391, 115394, 115397, 115400, 115403, 115406, - 115409, 115412, 115415, 115418, 115421, 115424, 115427, 115430, 115433, - 115436, 115439, 115442, 115445, 115448, 115451, 115454, 115457, 115460, - 115463, 115466, 115469, 115472, 115475, 115478, 115481, 115484, 115487, - 115490, 115493, 115496, 115499, 115502, 115505, 115508, 115511, 115514, - 115517, 115520, 115523, 115526, 115529, 115532, 115535, 115538, 115541, - 115544, 115547, 115550, 115553, 115556, 115559, 115562, 115565, 115568, - 115571, 115574, 115577, 115580, 115583, 115586, 115589, 115592, 115595, - 115598, 115601, 115604, 115607, 115610, 115613, 115616, 115619, 115622, - 115625, 115628, 115631, 115634, 115637, 115640, 115643, 115646, 115649, - 115652, 115655, 115658, 115661, 115664, 115667, 115670, 115673, 115676, - 115679, 115682, 115685, 115688, 115691, 115694, 115697, 115700, 115703, - 115706, 115709, 115712, 115715, 115718, 115721, 115724, 115727, 115730, - 115733, 115736, 115739, 115742, 115745, 115748, 115751, 115754, 115757, - 115760, 115763, 115766, 115769, 115772, 115775, 115778, 115781, 115784, - 115787, 115790, 115793, 115796, 115799, 115802, 115805, 115808, 115811, - 115814, 115817, 115820, 115823, 115826, 115829, 115832, 115835, 115838, - 115841, 115844, 115847, 115850, 115853, 115856, 115859, 115862, 115865, - 115868, 115871, 115874, 115877, 115880, 115883, 115886, 115889, 115892, - 115895, 115898, 115901, 115904, 115907, 115910, 115913, 115916, 115919, - 115922, 115925, 115928, 115931, 115934, 115937, 115940, 115943, 115946, - 115949, 115952, 115955, 115958, 115961, 115964, 115967, 115970, 115973, - 115976, 115979, 115982, 115985, 115988, 115991, 115994, 115997, 116000, - 116003, 116006, 116009, 116012, 116015, 116018, 116021, 116024, 116027, - 116030, 116033, 116036, 116039, 116042, 116045, 116048, 116051, 116054, - 116057, 116060, 116063, 116066, 116069, 116072, 116075, 116078, 116081, - 116084, 116087, 116090, 116093, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, + 58646, 58654, 58662, 58672, 58678, 58682, 58686, 58692, 58698, 58703, + 58707, 58711, 58715, 58719, 58725, 58729, 58733, 58737, 58747, 58751, + 58755, 58761, 58765, 58771, 58775, 58779, 58785, 58791, 58797, 58805, + 58813, 58817, 58821, 58825, 58831, 58835, 58844, 58850, 58854, 58858, + 58862, 58866, 58870, 58874, 58881, 58887, 58893, 58897, 58903, 58907, + 58913, 58921, 58931, 58935, 58943, 58947, 58953, 58961, 58969, 58973, + 58977, 58983, 58988, 58994, 59000, 59004, 59008, 59011, 59015, 59019, + 59023, 59027, 59031, 59035, 59039, 59042, 59046, 59050, 59054, 59058, + 59062, 59066, 59069, 59073, 59077, 59080, 59084, 59088, 59092, 59096, + 59100, 59104, 59108, 59112, 59116, 59120, 59124, 59128, 59132, 59136, + 59140, 59144, 59148, 59152, 59156, 59160, 59164, 59168, 59172, 59176, + 59180, 59184, 59188, 59192, 59196, 59200, 59204, 59208, 59212, 59216, + 59220, 59224, 59228, 59232, 59236, 59240, 59244, 59248, 59252, 59256, + 59259, 59263, 59267, 59271, 59275, 59279, 59283, 59287, 59291, 59295, + 59299, 59303, 59307, 59311, 59315, 59319, 59323, 59327, 59331, 59335, + 59339, 59343, 59347, 59351, 59355, 59359, 59363, 59367, 59371, 59375, + 59379, 59383, 59387, 59391, 59395, 59399, 59403, 59407, 59411, 59415, + 59419, 59423, 59427, 59431, 59435, 59439, 59443, 59447, 59451, 59455, + 59459, 59463, 59467, 59471, 59475, 59479, 59483, 59487, 59491, 59495, + 59499, 59503, 59507, 59511, 59515, 59519, 59523, 59527, 59531, 59535, + 59539, 59543, 59547, 59551, 59555, 59559, 59563, 59567, 59571, 59575, + 59579, 59583, 59587, 59591, 59595, 59599, 59603, 59607, 59611, 59615, + 59619, 59623, 59627, 59631, 59635, 59639, 59643, 59647, 59651, 59655, + 59659, 59663, 59667, 59671, 59675, 59679, 59683, 59687, 59691, 59695, + 59699, 59703, 59707, 59711, 59715, 59719, 59723, 59727, 59730, 59734, + 59738, 59742, 59746, 59750, 59754, 59758, 59762, 59766, 59770, 59774, + 59778, 59782, 59786, 59790, 59794, 59798, 59802, 59806, 59810, 59814, + 59818, 59822, 59826, 59830, 59834, 59838, 59842, 59846, 59850, 59854, + 59858, 59862, 59866, 59870, 59874, 59878, 59882, 59886, 59890, 59894, + 59898, 59902, 59906, 59910, 59914, 59918, 59922, 59926, 59930, 59934, + 59938, 59942, 59946, 59950, 59954, 59958, 59962, 59966, 59970, 59974, + 59978, 59982, 59986, 59990, 59994, 59998, 60002, 60006, 60010, 60014, + 60018, 60022, 60026, 60030, 60034, 60038, 60042, 60046, 60050, 60054, + 60058, 60062, 60066, 60070, 60074, 60078, 60082, 60086, 60090, 60094, + 60098, 60102, 60106, 60110, 60114, 60118, 60122, 60126, 60130, 60134, + 60138, 60142, 60146, 60150, 60154, 60158, 60162, 60166, 60170, 60174, + 60178, 60182, 60186, 60190, 60193, 60197, 60201, 60205, 60209, 60213, + 60217, 60221, 60225, 60229, 60233, 60237, 60241, 60245, 60249, 60253, + 60257, 60261, 60265, 60269, 60273, 60277, 60281, 60285, 60289, 60293, + 60297, 60301, 60305, 60309, 60313, 60317, 60321, 60325, 60329, 60333, + 60337, 60341, 60345, 60349, 60353, 60357, 60361, 60365, 60369, 60373, + 60377, 60381, 60385, 60389, 60393, 60397, 60401, 60405, 60409, 60413, + 60417, 60421, 60425, 60429, 60433, 60437, 60441, 60445, 60449, 60453, + 60457, 60461, 60465, 60469, 60473, 60477, 60481, 60485, 60489, 60493, + 60497, 60501, 60505, 60509, 60513, 60517, 60521, 60525, 60529, 60533, + 60537, 60541, 60545, 60549, 60553, 60557, 60561, 60565, 60569, 60573, + 60577, 60581, 60585, 60589, 60593, 60597, 60601, 60605, 60609, 60613, + 60617, 60621, 60625, 60629, 60633, 60637, 60641, 60645, 60649, 60653, + 60657, 60661, 60665, 60669, 60673, 60677, 60681, 60685, 60689, 60693, + 60697, 60701, 60705, 60709, 60713, 60717, 60721, 60725, 60729, 60733, + 60737, 60741, 60745, 60749, 60753, 60757, 60761, 60765, 60769, 60773, + 60777, 60781, 60785, 60789, 60793, 60797, 60801, 60805, 60809, 60813, + 60817, 60821, 60825, 60829, 60833, 60837, 60841, 60845, 60849, 60853, + 60857, 60861, 60865, 60869, 60873, 60877, 60881, 60885, 60889, 60893, + 60897, 60901, 60905, 60909, 60913, 60917, 60921, 60925, 60929, 60933, + 60937, 60941, 60945, 60949, 60953, 60957, 60961, 60965, 60969, 60973, + 60977, 60981, 60985, 60989, 60993, 60997, 61001, 61005, 61009, 61013, + 61017, 61021, 61025, 61029, 61033, 61037, 61041, 61045, 61048, 61052, + 61056, 61060, 61064, 61068, 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, 61204, 61208, 61212, + 61216, 61220, 61224, 61228, 61232, 61236, 61240, 61244, 61248, 61252, + 61256, 61260, 61264, 61268, 61272, 61276, 61280, 61284, 61288, 61292, + 61296, 61300, 61304, 61308, 61312, 61316, 61320, 61324, 61328, 61332, + 61336, 61340, 61344, 61348, 61352, 61356, 61360, 61364, 61368, 61372, + 61376, 61380, 61384, 61388, 61392, 61396, 61400, 61404, 61408, 61412, + 61416, 61420, 61424, 61428, 61432, 61436, 61440, 61444, 61448, 61452, + 61456, 61460, 61464, 61468, 61472, 61476, 61480, 61484, 61488, 61492, + 61496, 61500, 61503, 61507, 61511, 61515, 61519, 61523, 61527, 61531, + 61535, 61539, 61543, 61547, 61551, 61555, 61559, 61563, 61567, 61571, + 61575, 61579, 61583, 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, 61715, 61719, 61723, 61727, 61731, + 61735, 61739, 61743, 61747, 61751, 61755, 61759, 61763, 61767, 61771, + 61775, 61779, 61783, 61787, 61791, 61795, 61799, 61803, 61807, 61811, + 61815, 61819, 61823, 61827, 61831, 61835, 61839, 61843, 61847, 61851, + 61855, 61859, 61863, 61867, 61871, 61875, 61879, 61883, 61887, 61891, + 61895, 61899, 61903, 61907, 61911, 61915, 61919, 61923, 61927, 61931, + 61935, 61939, 61943, 61947, 61951, 61955, 61959, 61963, 61967, 61971, + 61975, 61979, 61983, 61987, 61991, 61995, 61999, 62003, 62007, 62011, + 62015, 62019, 62023, 62027, 62031, 62035, 62039, 62043, 62047, 62051, + 62055, 62059, 62063, 62067, 62071, 62075, 62079, 62083, 62087, 62091, + 62095, 62099, 62103, 62106, 62110, 62114, 62118, 62122, 62126, 62130, + 62134, 62138, 62142, 62146, 62150, 62154, 62158, 62162, 62166, 62170, + 62174, 62178, 62182, 62186, 62190, 62194, 62198, 62202, 62206, 62210, + 62214, 62218, 62222, 62226, 62230, 62234, 62238, 62242, 62246, 62250, + 62254, 62258, 62262, 62266, 62270, 62274, 62278, 62282, 62286, 62290, + 62294, 62298, 62302, 62306, 62310, 62314, 62318, 62322, 62326, 62330, + 62334, 62338, 62342, 62346, 62350, 62354, 62358, 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, 62486, 62490, + 62494, 62498, 62502, 62506, 62510, 62514, 62518, 62522, 62526, 62530, + 62534, 62538, 62542, 62546, 62550, 62554, 62558, 62562, 62566, 62570, + 62574, 62578, 62582, 62586, 62590, 62594, 62598, 62602, 62606, 62610, + 62614, 62618, 62622, 62626, 62630, 62634, 62638, 62642, 62646, 62650, + 62654, 62658, 62662, 62666, 62670, 62674, 62678, 62682, 62686, 62690, + 62694, 62698, 62702, 62706, 62710, 62714, 62718, 62722, 62726, 62730, + 62734, 62738, 62742, 62746, 62750, 62754, 62758, 62762, 62766, 62770, + 62774, 62778, 62782, 62786, 62790, 62794, 62798, 62802, 62806, 62810, + 62814, 62818, 62822, 62826, 62830, 62834, 62838, 62842, 62846, 62850, + 62854, 62858, 62862, 62865, 62869, 62873, 62877, 62881, 62885, 62889, + 62893, 62897, 62901, 62905, 62909, 62913, 62917, 62921, 62925, 62929, + 62933, 62937, 62941, 62945, 62949, 62953, 62957, 62961, 62965, 62969, + 62973, 62977, 62981, 62985, 62989, 62993, 62997, 63001, 63005, 63009, + 63013, 63017, 63021, 63025, 63029, 63033, 63037, 63041, 63045, 63049, + 63053, 63057, 63061, 63065, 63069, 63073, 63077, 63081, 63085, 63089, + 63093, 63097, 63101, 63105, 63109, 63113, 63117, 63121, 63125, 63129, + 63133, 63137, 63141, 63145, 63149, 63153, 63157, 63161, 63165, 63169, + 63173, 63177, 63181, 63185, 63189, 63193, 63197, 63201, 63205, 63209, + 63213, 63217, 63221, 63225, 63229, 63233, 63237, 63241, 63245, 63249, + 63253, 63257, 63261, 63265, 63269, 63273, 63277, 63281, 63285, 63289, + 63293, 63297, 63301, 63305, 63309, 63313, 63317, 63321, 63325, 63329, + 63333, 63337, 63341, 63345, 63349, 63353, 63357, 63361, 63365, 63369, + 63373, 63377, 63381, 63385, 63389, 63393, 63397, 63401, 63405, 63409, + 63413, 63417, 63421, 63425, 63429, 63433, 63437, 63441, 63445, 63449, + 63453, 63457, 63461, 63465, 63469, 63473, 63477, 63481, 63485, 63489, + 63493, 63497, 63501, 63505, 63509, 63513, 63517, 63521, 63525, 63529, + 63533, 63537, 63541, 63545, 63549, 63553, 63557, 63561, 63565, 63569, + 63573, 63577, 63581, 63585, 63589, 63593, 63597, 63601, 63605, 63609, + 63613, 63617, 63621, 63625, 63629, 63633, 63637, 63641, 63645, 0, 0, 0, + 63649, 63653, 63657, 63661, 63665, 63669, 63673, 63677, 63681, 63685, + 63689, 63693, 63697, 63701, 63705, 63709, 63713, 63717, 63721, 63725, + 63729, 63733, 63737, 63741, 63745, 63749, 63753, 63757, 63761, 63765, + 63769, 63773, 63777, 63781, 63785, 63789, 63793, 63797, 63801, 63805, + 63809, 63813, 63817, 63821, 63825, 63829, 63833, 63837, 63841, 63845, + 63849, 63853, 63857, 63861, 63865, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63869, 63873, + 63877, 63881, 63885, 63889, 63893, 63897, 63901, 63905, 63909, 63913, + 63917, 63921, 63925, 63929, 63933, 63937, 63941, 63945, 63949, 63953, + 63957, 63961, 63965, 63969, 63973, 63977, 63981, 63985, 63989, 63993, + 63997, 64001, 64005, 64009, 64013, 64016, 64020, 64024, 64028, 64032, + 64036, 64040, 64044, 64048, 64052, 64056, 64060, 64064, 64068, 64072, + 64076, 64080, 64084, 64088, 64092, 64096, 64100, 64104, 64108, 64112, + 64116, 64120, 64124, 64128, 64132, 64136, 64140, 64144, 64148, 64152, + 64156, 64160, 64163, 64167, 64171, 64174, 64178, 64182, 64186, 64189, + 64193, 64197, 64201, 64205, 64209, 64213, 64217, 64221, 64225, 64229, + 64233, 64237, 64241, 64245, 64248, 64252, 64256, 64260, 64264, 64268, + 64272, 64276, 64280, 64284, 64287, 64290, 64294, 64298, 64302, 64305, + 64309, 64313, 64317, 64321, 64325, 64329, 64333, 64337, 64341, 64345, + 64349, 64353, 64357, 64361, 64365, 64369, 64373, 64377, 64381, 64385, + 64389, 64393, 64397, 64401, 64405, 64409, 64413, 64417, 64421, 64425, + 64429, 64433, 64437, 64441, 64445, 64449, 64453, 64457, 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, 64607, 64611, 64615, 64619, 64623, + 64627, 64631, 64635, 64639, 64643, 64647, 64651, 64655, 64659, 64663, + 64667, 64671, 64674, 64678, 64682, 64686, 64690, 64694, 64698, 64702, + 64706, 64710, 64714, 64718, 64722, 64726, 64730, 64734, 64738, 64742, + 64746, 64750, 64754, 64758, 64761, 64765, 64769, 64773, 64777, 64781, + 64785, 64789, 64793, 64797, 64801, 64805, 64809, 64813, 64817, 64821, + 64825, 64829, 64833, 64837, 64841, 64845, 64849, 64853, 64857, 64861, + 64865, 64869, 64873, 64877, 64881, 64885, 64889, 64893, 64897, 64901, + 64905, 64909, 64913, 64917, 64921, 64925, 64929, 64933, 64936, 64941, + 64945, 64951, 64956, 64962, 64966, 64970, 64974, 64978, 64982, 64986, + 64990, 64994, 64998, 65002, 65006, 65010, 65014, 65018, 65021, 65024, + 65027, 65030, 65033, 65036, 65039, 65042, 65045, 65050, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 65056, 65061, 65066, 65071, + 65076, 65082, 65088, 65093, 65098, 65103, 65108, 65115, 65122, 65129, + 65136, 65143, 65150, 65160, 65170, 65177, 65184, 65190, 65196, 65202, + 65208, 65217, 65226, 65233, 65240, 65251, 65262, 65267, 0, 0, 65272, + 65279, 65286, 65293, 65300, 65307, 65314, 65320, 65326, 65332, 65338, + 65345, 65352, 65357, 65361, 65368, 65375, 65382, 0, 0, 0, 0, 0, 0, 0, 0, + 65386, 65390, 65394, 65397, 65400, 65405, 65410, 65415, 65420, 65425, + 65430, 65435, 65440, 65445, 65450, 65459, 65468, 65473, 65478, 65483, + 65488, 65493, 65498, 65503, 65508, 65513, 65518, 65523, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 65528, 65537, 65546, 65555, 65564, 65573, 65582, 65591, 65600, + 65608, 65615, 65623, 65630, 65638, 65648, 65657, 65667, 65676, 65686, + 65694, 65701, 65709, 65716, 65724, 65729, 65734, 65739, 65747, 65753, + 65759, 65766, 65775, 65783, 65791, 65799, 65806, 65813, 65820, 65827, + 65832, 65837, 65842, 65847, 65852, 65857, 65862, 65867, 65875, 65883, + 65889, 65894, 65899, 65904, 65909, 65914, 65919, 65924, 65929, 65934, + 65942, 65950, 65955, 65960, 65969, 65978, 65985, 65992, 66001, 66010, + 66021, 66032, 66038, 66044, 66052, 66060, 66069, 66078, 66085, 66092, + 66097, 66102, 66113, 66124, 66132, 66140, 66150, 66160, 66171, 66182, + 66191, 66200, 66207, 66214, 66221, 66228, 66237, 66246, 66251, 66256, + 66263, 66270, 66277, 66284, 66295, 66306, 66311, 66316, 66321, 66326, + 66331, 66336, 66341, 66346, 66350, 66355, 66360, 66365, 66370, 66375, + 66381, 66386, 66391, 66398, 66405, 66412, 66419, 66425, 66432, 66439, + 66444, 66449, 66455, 66461, 66467, 66473, 66480, 66487, 66494, 66498, + 66505, 66510, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66515, 66522, + 66529, 66536, 66544, 66551, 66557, 66563, 66570, 66576, 66582, 66588, + 66595, 66602, 66609, 66616, 66623, 66630, 66637, 66644, 66651, 66658, + 66665, 66672, 66679, 66686, 66692, 66699, 66706, 66713, 66720, 66727, + 66734, 66741, 66748, 66755, 66762, 66769, 66776, 66783, 66790, 66797, + 66804, 66811, 66818, 66826, 66834, 66842, 66850, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66858, 66861, 66865, 66869, 66873, + 66877, 66881, 66885, 66889, 66893, 66897, 66901, 66905, 66908, 66912, + 66916, 66919, 66923, 66927, 66931, 66935, 66939, 66943, 66947, 66950, + 66953, 66957, 66961, 66965, 66968, 66971, 66974, 66977, 66980, 66983, + 66987, 66991, 66995, 66999, 67003, 67009, 67014, 67018, 67022, 67026, + 67030, 67035, 67041, 67046, 67052, 67057, 67062, 67066, 67072, 67077, + 67081, 0, 0, 0, 0, 0, 0, 0, 0, 67086, 67090, 67094, 67097, 67101, 67104, + 67108, 67111, 67115, 67119, 67124, 67128, 67133, 67136, 67140, 67144, + 67147, 67151, 67155, 67158, 67162, 67166, 67170, 67174, 67178, 67182, + 67186, 67190, 67194, 67198, 67202, 67206, 67210, 67214, 67218, 67222, + 67226, 67230, 67234, 67237, 67241, 67245, 67249, 67252, 67255, 67258, + 67262, 67266, 67270, 67274, 67278, 67281, 67285, 67291, 67296, 67300, + 67305, 67309, 67314, 67319, 67325, 67330, 67336, 67340, 67345, 67350, + 67354, 67359, 67364, 0, 0, 0, 0, 0, 0, 0, 0, 0, 67368, 67371, 67375, + 67379, 67382, 67385, 67388, 67391, 67394, 67397, 67400, 67403, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 67406, 67413, 67419, 67425, 67431, + 67437, 67443, 67449, 67455, 67461, 67467, 67473, 67480, 67487, 67494, + 67501, 67508, 67515, 67522, 67529, 67536, 67543, 67549, 67556, 67562, + 67569, 67576, 67582, 67588, 67595, 67602, 67609, 67615, 67622, 67629, + 67635, 67642, 67648, 67655, 67662, 67668, 67674, 67681, 67687, 67694, + 67701, 67710, 67717, 67724, 67728, 67733, 67738, 67743, 67748, 67753, + 67757, 67762, 67766, 67771, 67776, 67781, 67786, 67790, 67795, 67799, + 67804, 67808, 67813, 67818, 67823, 67828, 67832, 67837, 67842, 67847, + 67853, 67858, 67864, 67870, 67876, 67883, 67889, 67895, 67901, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 67905, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 67910, 67913, + 67916, 67919, 67922, 67926, 67929, 67932, 67936, 67940, 67944, 67948, + 67952, 67956, 67960, 67964, 67968, 67972, 67976, 67980, 67984, 67988, + 67992, 67996, 68000, 68004, 68008, 68011, 68015, 68019, 68023, 68027, + 68031, 68034, 68038, 68041, 68044, 68048, 68052, 68056, 68060, 68063, + 68068, 68072, 68077, 68082, 68086, 68091, 68095, 68100, 68105, 68110, + 68115, 68120, 68126, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68132, 68137, 68141, + 68146, 68153, 68158, 68163, 68167, 68172, 68177, 68181, 68185, 68190, + 68196, 0, 0, 68202, 68206, 68209, 68212, 68215, 68218, 68221, 68224, + 68227, 68230, 0, 0, 68233, 68238, 68243, 68249, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 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, 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, 68992, 68996, 69000, 69004, 69008, 69012, + 69016, 69020, 69024, 69028, 69032, 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, 0, 0, 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, 0, 0, 0, 0, 0, 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, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 70124, 70129, 70134, 70139, 70144, + 70149, 70157, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 70162, 70169, 70176, + 70183, 70190, 0, 0, 0, 0, 0, 70197, 70204, 70211, 70221, 70227, 70233, + 70239, 70245, 70251, 70257, 70264, 70270, 70276, 70282, 70291, 70300, + 70312, 70324, 70330, 70336, 70342, 70349, 70356, 70363, 70370, 70377, 0, + 70384, 70391, 70398, 70406, 70413, 0, 70420, 0, 70427, 70434, 0, 70441, + 70449, 0, 70456, 70463, 70470, 70477, 70484, 70491, 70498, 70505, 70512, + 70519, 70524, 70531, 70538, 70544, 70550, 70556, 70562, 70568, 70574, + 70580, 70586, 70592, 70598, 70604, 70610, 70616, 70622, 70628, 70634, + 70640, 70646, 70652, 70658, 70664, 70670, 70676, 70682, 70688, 70694, + 70700, 70706, 70712, 70718, 70724, 70730, 70736, 70742, 70748, 70754, + 70760, 70766, 70772, 70778, 70784, 70790, 70796, 70802, 70808, 70814, + 70820, 70826, 70832, 70838, 70844, 70850, 70856, 70862, 70868, 70874, + 70880, 70886, 70892, 70898, 70904, 70910, 70916, 70922, 70928, 70934, + 70940, 70946, 70952, 70958, 70964, 70970, 70976, 70982, 70988, 70994, + 71002, 71010, 71016, 71022, 71028, 71034, 71043, 71052, 71060, 71068, + 71076, 71084, 71092, 71100, 71108, 71116, 71123, 71130, 71140, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 71150, 71156, 71162, 71168, 71174, 71179, 71184, 71190, + 71196, 71202, 71208, 71216, 71222, 71228, 71236, 71244, 71252, 71260, + 71265, 71270, 71275, 71280, 71292, 71304, 71314, 71324, 71335, 71346, + 71357, 71368, 71378, 71388, 71399, 71410, 71421, 71432, 71442, 71452, + 71462, 71477, 71492, 71507, 71514, 71521, 71528, 71535, 71545, 71555, + 71565, 71576, 71586, 71594, 71602, 71610, 71618, 71627, 71635, 71643, + 71651, 71659, 71667, 71676, 71684, 71692, 71700, 71709, 71717, 71724, + 71731, 71738, 71745, 71752, 71759, 71766, 71774, 71782, 71790, 71798, + 71806, 71814, 71822, 71830, 71838, 71846, 71854, 71862, 71870, 71878, + 71886, 71894, 71902, 71910, 71918, 71926, 71934, 71943, 71951, 71959, + 71967, 71976, 71984, 71992, 72000, 72008, 72016, 72024, 72032, 72041, + 72049, 72056, 72063, 72070, 72077, 72085, 72092, 72099, 72106, 72113, + 72120, 72128, 72135, 72143, 72151, 72159, 72167, 72176, 72184, 72192, + 72200, 72209, 72217, 72224, 72231, 72238, 72245, 72253, 72260, 72270, + 72280, 72290, 72299, 72308, 72317, 72326, 72335, 72345, 72356, 72367, + 72377, 72388, 72399, 72409, 72418, 72427, 72435, 72444, 72453, 72461, + 72470, 72479, 72487, 72496, 72505, 72513, 72522, 72531, 72539, 72548, + 72557, 72565, 72574, 72582, 72591, 72599, 72607, 72615, 72623, 72632, + 72640, 72647, 72655, 72662, 72669, 72676, 72685, 72694, 72702, 72711, + 72720, 72728, 72738, 72746, 72754, 72761, 72769, 72777, 72784, 72794, + 72804, 72814, 72824, 72835, 72843, 72851, 72859, 72867, 72876, 72884, + 72892, 72900, 72908, 72917, 72925, 72932, 72939, 72946, 72953, 72960, + 72967, 72975, 72983, 72991, 72999, 73007, 73015, 73023, 73031, 73039, + 73047, 73055, 73063, 73071, 73079, 73087, 73095, 73103, 73111, 73119, + 73127, 73135, 73143, 73151, 73159, 73167, 73175, 73183, 73191, 73198, + 73205, 73212, 73219, 73227, 73234, 73241, 73248, 73255, 73263, 73271, + 73279, 73287, 73296, 73304, 73312, 73322, 73329, 73336, 73343, 73350, + 73358, 73368, 73379, 73387, 73396, 73404, 73413, 73421, 73430, 73438, + 73447, 73455, 73464, 73472, 73480, 73487, 73495, 73504, 73511, 73519, + 73528, 73537, 73546, 73555, 73563, 73572, 73580, 73589, 73597, 73606, + 73614, 73623, 73631, 73639, 73646, 73654, 73661, 73669, 73676, 73685, + 73693, 73702, 73710, 73718, 73726, 73734, 73742, 73751, 73760, 73769, + 73778, 73787, 73795, 73804, 73812, 73821, 73829, 73838, 73846, 73855, + 73863, 73871, 73878, 73886, 73893, 73901, 73908, 73917, 73925, 73934, + 73942, 73950, 73958, 73966, 73974, 73983, 73992, 74001, 74010, 74018, + 74026, 74034, 74042, 74051, 74060, 74068, 74076, 74084, 74092, 74100, + 74108, 74116, 74124, 74132, 74140, 74148, 74153, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 74158, 74168, 74178, 74188, 74198, 74208, 74218, + 74228, 74238, 74247, 74256, 74265, 74275, 74285, 74295, 74306, 74316, + 74326, 74336, 74346, 74356, 74366, 74376, 74386, 74396, 74406, 74416, + 74426, 74436, 74446, 74456, 74467, 74477, 74487, 74497, 74507, 74517, + 74527, 74537, 74547, 74557, 74568, 74578, 74588, 74599, 74609, 74619, + 74629, 74639, 74648, 74657, 74667, 74676, 74685, 74694, 74703, 74712, + 74721, 74730, 74739, 74748, 74757, 74766, 74775, 0, 0, 74784, 74793, + 74803, 74813, 74823, 74834, 74844, 74854, 74865, 74875, 74886, 74895, + 74904, 74914, 74924, 74935, 74945, 74956, 74966, 74977, 74986, 74996, + 75006, 75017, 75027, 75037, 75047, 75056, 75065, 75074, 75083, 75092, + 75101, 75111, 75121, 75131, 75140, 75150, 75160, 75170, 75179, 75188, + 75198, 75207, 75217, 75226, 75235, 75244, 75254, 75264, 75274, 75284, + 75294, 75304, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 75314, 75329, + 75344, 75350, 75356, 75362, 75368, 75374, 75380, 75386, 75392, 75400, + 75404, 75407, 0, 0, 75415, 75418, 75421, 75424, 75427, 75430, 75433, + 75436, 75439, 75442, 75445, 75448, 75451, 75454, 75457, 75460, 75463, + 75470, 75478, 75488, 75495, 75502, 75510, 75518, 75528, 75539, 0, 0, 0, + 0, 0, 0, 75547, 75552, 75557, 75564, 75571, 75577, 75583, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 75588, 75597, 75606, 75615, 75623, 75633, 75641, 75649, + 75658, 75667, 75678, 75689, 75699, 75709, 75719, 75729, 75738, 75747, + 75756, 75765, 75775, 75785, 75789, 75794, 75802, 75810, 75814, 75818, + 75822, 75827, 75832, 75837, 75842, 75845, 75849, 0, 75854, 75857, 75860, + 75864, 75868, 75873, 75877, 75881, 75886, 75891, 75898, 75905, 75908, + 75911, 75914, 75917, 75920, 75924, 75928, 0, 75932, 75937, 75941, 75945, + 0, 0, 0, 0, 75950, 75955, 75962, 75967, 75972, 0, 75977, 75982, 75987, + 75992, 75997, 76002, 76007, 76012, 76017, 76022, 76027, 76032, 76041, + 76050, 76058, 76066, 76075, 76084, 76093, 76102, 76110, 76118, 76126, + 76134, 76139, 76144, 76150, 76156, 76162, 76168, 76176, 76184, 76190, + 76196, 76202, 76208, 76214, 76220, 76226, 76232, 76237, 76242, 76247, + 76252, 76257, 76262, 76267, 76272, 76277, 76282, 76287, 76292, 76298, + 76304, 76310, 76316, 76322, 76328, 76334, 76340, 76346, 76352, 76358, + 76364, 76370, 76376, 76382, 76388, 76394, 76400, 76406, 76412, 76418, + 76424, 76430, 76436, 76442, 76448, 76454, 76460, 76466, 76472, 76478, + 76484, 76490, 76496, 76502, 76508, 76514, 76520, 76526, 76532, 76538, + 76544, 76550, 76556, 76562, 76568, 76574, 76580, 76586, 76592, 76598, + 76604, 76609, 76614, 76619, 76624, 76629, 76634, 76639, 76644, 76650, + 76656, 76662, 76668, 76674, 76680, 76686, 76692, 76698, 76704, 76710, + 76716, 76721, 76726, 76731, 76736, 76747, 76758, 76768, 76778, 76789, + 76800, 76807, 0, 0, 76814, 0, 76822, 76826, 76830, 76833, 76837, 76841, + 76844, 76847, 76851, 76855, 76858, 76861, 76864, 76867, 76872, 76875, + 76879, 76882, 76885, 76888, 76891, 76894, 76897, 76900, 76903, 76906, + 76909, 76912, 76916, 76920, 76924, 76928, 76933, 76938, 76944, 76950, + 76956, 76961, 76967, 76972, 76977, 76982, 76988, 76994, 76999, 77004, + 77009, 77014, 77020, 77026, 77031, 77036, 77042, 77047, 77052, 77058, + 77064, 77070, 77076, 77080, 77085, 77089, 77094, 77098, 77103, 77108, + 77114, 77120, 77126, 77131, 77137, 77142, 77147, 77152, 77158, 77164, + 77169, 77174, 77179, 77184, 77190, 77196, 77201, 77206, 77212, 77217, + 77222, 77228, 77234, 77240, 77246, 77251, 77255, 77260, 77262, 77267, + 77272, 77278, 77283, 77288, 77292, 77298, 77303, 77308, 77313, 77318, + 77323, 77328, 77333, 77339, 77345, 77351, 77359, 77363, 77367, 77371, + 77375, 77379, 77383, 77388, 77393, 77398, 77403, 77408, 77413, 77418, + 77423, 77428, 77433, 77438, 77443, 77448, 77452, 77457, 77462, 77467, + 77472, 77477, 77481, 77486, 77491, 77496, 77501, 77505, 77510, 77515, + 77520, 77525, 77529, 77534, 77539, 77543, 77548, 77553, 77558, 77563, + 77568, 77572, 77579, 77586, 77590, 77595, 77600, 77605, 77610, 77615, + 77620, 77625, 77630, 77635, 77640, 77645, 77650, 77655, 77660, 77665, + 77670, 77675, 77680, 77685, 77690, 77695, 77700, 77705, 77710, 77715, + 77720, 77725, 77730, 77735, 0, 0, 0, 77740, 77744, 77749, 77753, 77758, + 77763, 0, 0, 77767, 77772, 77777, 77781, 77786, 77791, 0, 0, 77796, + 77801, 77805, 77810, 77815, 77820, 0, 0, 77825, 77830, 77835, 0, 0, 0, + 77839, 77843, 77847, 77850, 77853, 77857, 77861, 0, 77865, 77871, 77874, + 77878, 77881, 77885, 77889, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 77893, 77899, + 77905, 77911, 77917, 0, 0, 77921, 77927, 77933, 77939, 77945, 77951, + 77958, 77965, 77972, 77979, 77986, 77993, 0, 78000, 78007, 78014, 78020, + 78027, 78034, 78041, 78048, 78054, 78061, 78068, 78075, 78082, 78089, + 78096, 78103, 78110, 78117, 78123, 78130, 78137, 78144, 78151, 78158, + 78165, 78172, 0, 78179, 78185, 78192, 78199, 78206, 78213, 78220, 78227, + 78234, 78241, 78248, 78255, 78262, 78269, 78275, 78282, 78289, 78296, + 78303, 0, 78310, 78317, 0, 78324, 78331, 78338, 78345, 78352, 78359, + 78366, 78373, 78380, 78387, 78394, 78401, 78408, 78415, 78422, 0, 0, + 78428, 78433, 78438, 78443, 78448, 78453, 78458, 78463, 78468, 78473, + 78478, 78483, 78488, 78493, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 78498, 78505, + 78512, 78519, 78526, 78533, 78540, 78547, 78554, 78561, 78568, 78575, + 78582, 78589, 78596, 78603, 78610, 78617, 78624, 78631, 78639, 78647, + 78654, 78661, 78666, 78674, 78682, 78689, 78696, 78701, 78708, 78713, + 78718, 78725, 78730, 78735, 78740, 78748, 78753, 78758, 78765, 78770, + 78775, 78782, 78789, 78794, 78799, 78804, 78809, 78814, 78819, 78824, + 78829, 78834, 78841, 78846, 78853, 78858, 78863, 78868, 78873, 78878, + 78883, 78888, 78893, 78898, 78903, 78908, 78915, 78922, 78929, 78936, + 78942, 78947, 78954, 78959, 78964, 78973, 78980, 78989, 78996, 79001, + 79006, 79014, 79019, 79024, 79029, 79034, 79039, 79046, 79051, 79056, + 79061, 79066, 79071, 79078, 79085, 79092, 79099, 79106, 79113, 79120, + 79127, 79134, 79141, 79148, 79155, 79162, 79169, 79176, 79183, 79190, + 79197, 79204, 79211, 79218, 79225, 79232, 79239, 79246, 79253, 79260, + 79267, 0, 0, 0, 0, 0, 79274, 79281, 79288, 0, 0, 0, 0, 79292, 79295, + 79298, 79301, 79304, 79307, 79310, 79313, 79316, 79319, 79323, 79327, + 79331, 79335, 79339, 79343, 79347, 79351, 79355, 79360, 79365, 79370, + 79376, 79382, 79388, 79394, 79400, 79406, 79411, 79416, 79421, 79427, + 79433, 79439, 79445, 79451, 79457, 79463, 79469, 79475, 79481, 79487, + 79493, 79499, 79505, 0, 0, 0, 79511, 79518, 79525, 79532, 79539, 79546, + 79555, 79564, 79571, 79578, 79586, 79594, 79602, 79608, 79615, 79624, + 79633, 79642, 79651, 79660, 79669, 79679, 79690, 79700, 79711, 79720, + 79729, 79738, 79748, 79759, 79769, 79780, 79791, 79800, 79808, 79814, + 79820, 79826, 79832, 79840, 79848, 79854, 79861, 79871, 79878, 79885, + 79892, 79899, 79906, 79916, 79923, 79930, 79938, 79946, 79955, 79964, + 79973, 79982, 79991, 79999, 80008, 80017, 80026, 80030, 80037, 80042, + 80047, 80051, 80055, 80059, 80063, 80068, 80073, 80079, 80085, 80089, + 80095, 80099, 80103, 80107, 80111, 80115, 80119, 80125, 0, 0, 0, 0, 0, + 80129, 80134, 80139, 80144, 80149, 80156, 80161, 80166, 80171, 80176, + 80181, 80186, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 80191, 80198, 80207, 80216, 80223, 80230, 80237, + 80244, 80251, 80258, 80264, 80271, 80278, 80285, 80292, 80299, 80306, + 80313, 80320, 80329, 80336, 80343, 80350, 80357, 80364, 80371, 80378, + 80385, 80394, 80401, 80408, 80415, 80422, 80429, 80436, 80445, 80452, + 80459, 80466, 80473, 80482, 80489, 80496, 80503, 80511, 80520, 0, 0, + 80529, 80533, 80537, 80542, 80547, 80551, 80556, 80560, 80565, 80570, + 80575, 80580, 80585, 80590, 80594, 80598, 80602, 80607, 80612, 80616, + 80621, 80626, 80630, 80634, 80639, 80644, 80649, 80654, 80658, 0, 0, 0, + 80663, 80667, 80672, 80677, 80681, 80686, 80690, 80695, 80700, 80705, + 80710, 80714, 80718, 80723, 80728, 80733, 80738, 80742, 80747, 80751, + 80756, 80761, 80765, 80770, 80775, 80780, 80784, 80788, 80793, 80798, + 80803, 80808, 80813, 80817, 80822, 80827, 80832, 80837, 80842, 80847, + 80852, 80857, 80862, 80867, 80872, 80877, 80882, 80887, 80892, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 80897, 80901, + 80906, 80911, 80916, 80920, 80925, 80930, 80935, 80940, 80944, 80948, + 80953, 80958, 80963, 80968, 80972, 80977, 80982, 80987, 80992, 80997, + 81002, 81006, 81011, 81016, 81021, 81026, 81031, 81036, 81041, 0, 81046, + 81050, 81054, 81059, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 81064, 81069, + 81074, 81079, 81084, 81089, 81094, 81099, 81104, 81109, 81114, 81119, + 81124, 81129, 81134, 81139, 81144, 81149, 81154, 81159, 81164, 81169, + 81174, 81179, 81184, 81189, 81194, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 81201, 81206, 81211, + 81216, 81221, 81226, 81231, 81236, 81241, 81246, 81251, 81256, 81261, + 81266, 81271, 81276, 81281, 81286, 81291, 81296, 81301, 81306, 81311, + 81316, 81321, 81326, 81331, 81335, 81339, 81343, 0, 81348, 81354, 81359, + 81364, 81369, 81374, 81380, 81386, 81392, 81398, 81404, 81410, 81416, + 81422, 81428, 81434, 81440, 81446, 81452, 81457, 81463, 81469, 81475, + 81481, 81486, 81492, 81498, 81503, 81509, 81515, 81520, 81526, 81532, + 81538, 81544, 81550, 81556, 0, 0, 0, 0, 81561, 81567, 81573, 81579, + 81585, 81591, 81597, 81603, 81609, 81616, 81621, 81626, 81632, 81638, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 81644, 81649, 81654, + 81659, 81665, 81670, 81676, 81682, 81688, 81694, 81701, 81707, 81714, + 81719, 81724, 81729, 81734, 81738, 81743, 81748, 81753, 81758, 81763, + 81768, 81773, 81778, 81783, 81788, 81793, 81798, 81803, 81808, 81813, + 81818, 81823, 81828, 81833, 81838, 81843, 81848, 81853, 81858, 81863, + 81868, 81874, 81879, 81885, 81891, 81897, 81903, 81910, 81916, 81923, + 81928, 81933, 81938, 81943, 81947, 81952, 81957, 81962, 81967, 81972, + 81977, 81982, 81987, 81992, 81997, 82002, 82007, 82012, 82017, 82022, + 82027, 82032, 82037, 82042, 82047, 82052, 82057, 82062, 82067, 82072, + 82077, 82082, 82087, 82092, 82097, 82102, 82107, 82112, 82117, 82122, + 82127, 82132, 82137, 82142, 82147, 82152, 82157, 82162, 82167, 82172, + 82177, 82182, 82187, 82192, 82197, 82202, 82207, 82212, 82217, 82222, + 82227, 82232, 82237, 82242, 82247, 82252, 82257, 82262, 82267, 82272, + 82277, 82282, 82287, 82292, 82297, 82302, 82307, 82312, 82317, 82322, + 82327, 82332, 82337, 82341, 82346, 82351, 82356, 82361, 82366, 82371, + 82376, 82381, 82386, 82391, 82396, 82401, 82405, 82409, 82413, 82417, + 82421, 82425, 82429, 82434, 82439, 0, 0, 82444, 82449, 82453, 82457, + 82461, 82465, 82469, 82473, 82477, 82481, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 82485, 82488, 82491, 82494, 82497, 82500, 0, 0, 82504, 0, + 82508, 82511, 82515, 82519, 82523, 82527, 82531, 82535, 82539, 82543, + 82547, 82550, 82554, 82558, 82562, 82566, 82570, 82574, 82578, 82582, + 82586, 82589, 82593, 82597, 82601, 82605, 82608, 82612, 82616, 82620, + 82624, 82628, 82632, 82636, 82640, 82644, 82648, 82652, 82656, 82659, + 82663, 82667, 82671, 82675, 0, 82679, 82683, 0, 0, 0, 82687, 0, 0, 82691, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82695, 82700, 82705, + 82710, 82715, 82720, 82725, 82730, 82735, 82740, 82745, 82750, 82755, + 82760, 82765, 82770, 82775, 82780, 82785, 82790, 82795, 82800, 82805, + 82809, 82814, 82819, 0, 0, 0, 0, 0, 82825, 82831, 82835, 82840, 82844, + 82849, 82853, 82857, 82861, 82866, 82871, 82875, 82879, 82883, 82887, + 82891, 82896, 82901, 82905, 82910, 82915, 82919, 82924, 82929, 82934, + 82939, 82944, 0, 0, 0, 0, 0, 82949, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 82954, 82957, 82961, 82965, 0, 82970, 82974, 0, 0, 0, 0, 0, + 82978, 82983, 82989, 82993, 82997, 83000, 83004, 83008, 0, 83012, 83016, + 83020, 0, 83024, 83028, 83032, 83036, 83040, 83044, 83048, 83052, 83056, + 83060, 83064, 83068, 83071, 83075, 83079, 83083, 83086, 83089, 83092, + 83096, 83100, 83104, 83108, 83112, 83116, 83119, 83123, 0, 0, 0, 0, + 83127, 83132, 83136, 0, 0, 0, 0, 83140, 83143, 83146, 83149, 83152, + 83155, 83159, 83163, 83168, 0, 0, 0, 0, 0, 0, 0, 0, 83173, 83178, 83184, + 83189, 83195, 83200, 83205, 83210, 83216, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 83221, 83224, 83229, 83235, 83243, 83248, 83254, 83262, + 83268, 83274, 83278, 83282, 83289, 83298, 83305, 83314, 83320, 83329, + 83336, 83343, 83350, 83360, 83366, 83370, 83377, 83386, 83396, 83403, + 83410, 83414, 83418, 83425, 83435, 83439, 83446, 83453, 83460, 83466, + 83473, 83480, 83487, 83494, 83498, 83502, 83506, 83513, 83517, 83524, + 83531, 83545, 83554, 83558, 83562, 83566, 83573, 83577, 83581, 83585, + 83593, 83601, 83620, 83630, 83650, 83654, 83658, 83662, 83666, 83670, + 83674, 83678, 83685, 83689, 83692, 83696, 83700, 83706, 83713, 83722, + 83726, 83735, 83744, 83752, 83756, 83763, 83767, 83771, 83775, 83779, + 83790, 83799, 83808, 83817, 83826, 83838, 83847, 83856, 83865, 83873, + 83882, 83894, 83903, 83912, 83921, 83933, 83942, 83951, 83963, 83972, + 83981, 83993, 84002, 84006, 84010, 84014, 84018, 84022, 84026, 84030, + 84037, 84041, 84045, 84056, 84060, 84064, 84071, 84077, 84083, 84087, + 84094, 84098, 84102, 84106, 84110, 84114, 84118, 84124, 84132, 84136, + 84140, 84143, 84149, 84159, 84163, 84175, 84182, 84189, 84196, 84203, + 84209, 84213, 84217, 84221, 84225, 84232, 84241, 84248, 84256, 84264, + 84270, 84274, 84278, 84282, 84286, 84292, 84301, 84313, 84320, 84327, + 84336, 84347, 84353, 84362, 84371, 84378, 84387, 84394, 84401, 84411, + 84418, 84425, 84432, 84439, 84443, 84449, 84453, 84464, 84472, 84481, + 84493, 84500, 84507, 84517, 84524, 84533, 84540, 84549, 84556, 84563, + 84573, 84580, 84587, 84597, 84604, 84616, 84625, 84632, 84639, 84646, + 84655, 84665, 84678, 84685, 84695, 84705, 84712, 84721, 84734, 84741, + 84748, 84755, 84765, 84775, 84782, 84792, 84799, 84806, 84816, 84822, + 84829, 84836, 84843, 84853, 84860, 84867, 84874, 84880, 84887, 84897, + 84904, 84908, 84916, 84920, 84932, 84936, 84950, 84954, 84958, 84962, + 84966, 84972, 84979, 84987, 84991, 84995, 84999, 85003, 85010, 85014, + 85020, 85026, 85034, 85038, 85045, 85053, 85057, 85061, 85067, 85071, + 85080, 85089, 85096, 85106, 85112, 85116, 85120, 85128, 85135, 85142, + 85148, 85152, 85160, 85164, 85171, 85183, 85190, 85200, 85206, 85210, + 85219, 85226, 85235, 85239, 85243, 85250, 85254, 85258, 85262, 85266, + 85269, 85275, 85281, 85285, 85289, 85296, 85303, 85310, 85317, 85324, + 85331, 85338, 85345, 85351, 85355, 85359, 85366, 85373, 85380, 85387, + 85394, 85398, 85401, 85406, 85410, 85414, 85423, 85432, 85436, 85440, + 85446, 85452, 85469, 85475, 85479, 85488, 85492, 85496, 85503, 85511, + 85519, 85525, 85529, 85533, 85537, 85541, 85544, 85549, 85555, 85564, + 85570, 85576, 85582, 85587, 85593, 85599, 85605, 85611, 85617, 85625, + 85631, 85642, 85648, 85654, 85663, 85673, 85679, 85685, 85691, 85697, + 85703, 85709, 85715, 85721, 85727, 85733, 85742, 85751, 85760, 85766, + 85775, 85781, 85787, 85793, 85799, 85805, 85811, 85817, 85823, 85829, + 85835, 85841, 85847, 85853, 85858, 85864, 85870, 85878, 85884, 85890, + 85894, 85902, 85906, 85910, 85914, 85918, 85922, 85929, 85933, 85942, + 85946, 85953, 85961, 85965, 85969, 85973, 85984, 85998, 86002, 86006, + 86013, 86019, 86026, 86030, 86034, 86038, 86042, 86046, 86053, 86057, + 86075, 86079, 86083, 86090, 86094, 86098, 86104, 86108, 86112, 86120, + 86124, 86128, 86132, 86136, 86141, 86151, 86159, 86167, 86173, 86179, + 86189, 86195, 86201, 86207, 86213, 86219, 86225, 86231, 86240, 86245, + 86251, 86260, 86268, 86274, 86282, 86291, 86297, 86303, 86309, 86315, + 86326, 86332, 86338, 86344, 86350, 86356, 86365, 86371, 86377, 86386, + 86398, 86409, 86415, 86424, 86430, 86436, 86442, 86456, 86461, 86468, + 86477, 86486, 86492, 86498, 86503, 86507, 86514, 86524, 86530, 86543, + 86547, 86551, 86558, 86562, 86568, 86577, 86581, 86585, 86589, 86593, + 86597, 86604, 86608, 86615, 86622, 86629, 86638, 86647, 86657, 86664, + 86671, 86678, 86688, 86695, 86705, 86712, 86722, 86729, 86736, 86746, + 86756, 86763, 86769, 86777, 86785, 86791, 86797, 86801, 86805, 86812, + 86820, 86826, 86830, 86834, 86838, 86845, 86857, 86860, 86867, 86873, + 86877, 86881, 86885, 86889, 86893, 86897, 86901, 86905, 86909, 86913, + 86920, 86924, 86930, 86934, 86938, 86942, 86948, 86955, 86962, 86969, + 86981, 86989, 86993, 86999, 87008, 87015, 87021, 87025, 87029, 87033, + 87039, 87048, 87056, 87060, 87066, 87070, 87074, 87078, 87084, 87091, + 87097, 87101, 87107, 87111, 87115, 87124, 87136, 87140, 87147, 87154, + 87164, 87171, 87183, 87190, 87197, 87204, 87215, 87225, 87238, 87248, + 87255, 87259, 87263, 87267, 87271, 87280, 87289, 87298, 87315, 87324, + 87330, 87337, 87345, 87358, 87362, 87371, 87380, 87389, 87398, 87409, + 87418, 87427, 87436, 87445, 87454, 87463, 87473, 87476, 87480, 87484, + 87488, 87492, 87496, 87502, 87509, 87516, 87523, 87529, 87535, 87542, + 87548, 87555, 87563, 87567, 87574, 87581, 87588, 87596, 87599, 87603, + 87607, 87611, 87615, 87621, 87625, 87631, 87638, 87645, 87651, 87658, + 87665, 87672, 87679, 87686, 87693, 87700, 87707, 87714, 87721, 87728, + 87735, 87742, 87749, 87755, 87759, 87767, 87771, 87775, 87779, 87783, + 87789, 87796, 87803, 87810, 87817, 87824, 87830, 87838, 87842, 87846, + 87850, 87854, 87860, 87877, 87894, 87898, 87902, 87906, 87910, 87914, + 87918, 87924, 87931, 87935, 87941, 87948, 87955, 87962, 87969, 87976, + 87985, 87992, 87999, 88006, 88013, 88017, 88021, 88027, 88039, 88043, + 88047, 88056, 88060, 88064, 88068, 88074, 88078, 88082, 88091, 88095, + 88099, 88103, 88110, 88114, 88118, 88122, 88126, 88130, 88134, 88138, + 88142, 88148, 88155, 88162, 88168, 88172, 88189, 88195, 88199, 88205, + 88211, 88217, 88223, 88229, 88235, 88239, 88243, 88247, 88253, 88257, + 88263, 88267, 88271, 88278, 88285, 88302, 88306, 88310, 88314, 88318, + 88322, 88334, 88337, 88342, 88347, 88362, 88372, 88383, 88387, 88391, + 88395, 88401, 88408, 88415, 88425, 88437, 88443, 88449, 88458, 88462, + 88466, 88473, 88483, 88490, 88496, 88500, 88504, 88511, 88517, 88521, + 88527, 88531, 88539, 88545, 88549, 88557, 88566, 88573, 88579, 88586, + 88593, 88603, 88613, 88617, 88621, 88625, 88629, 88635, 88642, 88648, + 88655, 88662, 88669, 88678, 88685, 88692, 88698, 88705, 88712, 88719, + 88726, 88733, 88740, 88746, 88753, 88760, 88767, 88776, 88783, 88790, + 88794, 88800, 88804, 88810, 88817, 88824, 88831, 88835, 88839, 88843, + 88847, 88851, 88858, 88862, 88866, 88872, 88881, 88885, 88889, 88893, + 88897, 88904, 88908, 88912, 88920, 88924, 88928, 88932, 88936, 88942, + 88946, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 88950, 88956, + 88962, 88969, 88976, 88983, 88990, 88997, 89004, 89010, 89017, 89024, + 89031, 89038, 89045, 89052, 89058, 89064, 89070, 89076, 89082, 89088, + 89094, 89100, 89106, 89113, 89120, 89127, 89134, 89141, 89148, 89154, + 89160, 89166, 89173, 89180, 89186, 89192, 89201, 89208, 89215, 89222, + 89229, 89236, 89243, 89249, 89255, 89261, 89270, 89277, 89284, 89295, + 89306, 89312, 89318, 89324, 89333, 89340, 89347, 89356, 89365, 89375, + 89385, 89396, 89408, 89418, 89428, 89439, 89451, 89461, 89471, 89481, + 89491, 89501, 89512, 89520, 89528, 89537, 89546, 89555, 89561, 89567, + 89573, 89580, 89590, 89597, 89607, 89612, 89617, 89623, 89629, 89637, + 89645, 89654, 89664, 89674, 89682, 89690, 89699, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 89708, 89719, 89726, 89734, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 89742, 89747, 89752, 89757, 89764, 89771, 89778, 89785, 89790, + 89795, 89800, 89805, 89812, 89817, 89824, 89831, 89836, 89841, 89846, + 89853, 89858, 89863, 89870, 89877, 89882, 89887, 89892, 89899, 89906, + 89913, 89918, 89923, 89930, 89937, 89944, 89951, 89956, 89961, 89966, + 89973, 89978, 89983, 89988, 89995, 90004, 90011, 90016, 90021, 90026, + 90031, 90036, 90041, 90050, 90057, 90062, 90069, 90076, 90081, 90086, + 90091, 90098, 90103, 90110, 90117, 90122, 90127, 90132, 90139, 90146, + 90151, 90156, 90163, 90170, 90177, 90182, 90187, 90192, 90197, 90204, + 90213, 90222, 90227, 90234, 90243, 90248, 90253, 90258, 90263, 90270, + 90277, 90284, 90291, 90296, 90301, 90306, 90313, 90320, 90327, 90332, + 90337, 90344, 90349, 90356, 90361, 90368, 90373, 90380, 90387, 90392, + 90397, 90402, 90407, 90412, 90417, 90422, 90427, 90432, 90439, 90446, + 90453, 90460, 90467, 90476, 90481, 90486, 90493, 90500, 90505, 90512, + 90519, 90526, 90533, 90540, 90547, 90552, 90557, 90562, 90567, 90572, + 90581, 90590, 90599, 90608, 90617, 90626, 90635, 90644, 90649, 90660, + 90671, 90680, 90685, 90690, 90695, 90700, 90709, 90716, 90723, 90730, + 90737, 90744, 90751, 90760, 90769, 90780, 90789, 90800, 90809, 90816, + 90825, 90836, 90845, 90854, 90863, 90872, 90879, 90886, 90893, 90902, + 90911, 90922, 90931, 90940, 90951, 90956, 90961, 90972, 90980, 90989, + 90998, 91007, 91018, 91027, 91036, 91047, 91058, 91069, 91080, 91091, + 91102, 91109, 91116, 91123, 91130, 91141, 91150, 91157, 91164, 91171, + 91182, 91193, 91204, 91215, 91226, 91237, 91248, 91259, 91266, 91273, + 91282, 91291, 91298, 91305, 91312, 91321, 91330, 91339, 91346, 91355, + 91364, 91373, 91380, 91387, 91392, 91398, 91405, 91412, 91419, 91426, + 91433, 91440, 91449, 91458, 91467, 91476, 91483, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 91492, 91498, 91503, 91508, 91515, 91521, 91527, 91533, 91539, + 91545, 91551, 91557, 91561, 91565, 91571, 91577, 91583, 91587, 91592, + 91597, 91601, 91605, 91608, 91614, 91620, 91626, 91632, 91638, 91644, + 91650, 91656, 91662, 91672, 91682, 91688, 91694, 91704, 91714, 91720, 0, + 0, 91726, 91734, 91739, 91744, 91750, 91756, 91762, 91768, 91774, 91780, + 91787, 91794, 91800, 91806, 91812, 91818, 91824, 91830, 91836, 91842, + 91847, 91853, 91859, 91865, 91871, 91877, 91886, 91892, 91897, 91905, + 91912, 91919, 91928, 91937, 91946, 91955, 91964, 91973, 91982, 91991, + 92001, 92011, 92019, 92027, 92036, 92045, 92051, 92057, 92063, 92069, + 92077, 92085, 92089, 92095, 92100, 92106, 92112, 92118, 92124, 92130, + 92139, 92144, 92151, 92156, 92161, 92166, 92172, 92178, 92184, 92191, + 92196, 92201, 92206, 92211, 92216, 92222, 92228, 92234, 92240, 92246, + 92252, 92258, 92264, 92269, 92274, 92279, 92284, 92289, 92294, 92299, + 92304, 92310, 92316, 92321, 92326, 92331, 92336, 92341, 92347, 92354, + 92358, 92362, 92366, 92370, 92374, 92378, 92382, 92386, 92394, 92404, + 92408, 92412, 92418, 92424, 92430, 92436, 92442, 92448, 92454, 92460, + 92466, 92472, 92478, 92484, 92490, 92496, 92500, 92504, 92511, 92517, + 92523, 92529, 92534, 92541, 92546, 92552, 92558, 92564, 92570, 92575, + 92579, 92585, 92589, 92593, 92597, 92603, 92609, 92613, 92619, 92625, + 92631, 92637, 92643, 92651, 92659, 92665, 92671, 92677, 92683, 92695, + 92707, 92721, 92733, 92745, 92759, 92773, 92787, 92791, 92799, 92807, + 92812, 92816, 92820, 92824, 92828, 92832, 92836, 92840, 92846, 92852, + 92858, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 92864, 92870, 92876, 92882, 92888, + 92894, 92900, 92906, 92912, 92918, 92924, 92930, 92936, 92942, 92948, + 92954, 92960, 92966, 92972, 92978, 92984, 92990, 92996, 93002, 93008, + 93014, 93020, 93026, 93032, 93038, 93044, 93050, 93056, 93062, 93068, + 93074, 93080, 93086, 93092, 93098, 93104, 93110, 93116, 93122, 93128, + 93134, 93140, 93146, 93152, 93158, 93164, 93170, 93176, 93182, 93188, + 93194, 93200, 93206, 93212, 93218, 93224, 93230, 93236, 93242, 93248, + 93254, 93260, 93265, 93270, 93275, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 93279, + 93284, 93291, 93298, 93305, 93312, 93317, 93321, 93327, 93331, 93335, + 93341, 93345, 93349, 93353, 93359, 93366, 93370, 93374, 93378, 93382, + 93386, 93390, 93396, 93400, 93404, 93408, 93412, 93416, 93420, 93424, + 93428, 93432, 93436, 93440, 93444, 93449, 93453, 93457, 93461, 93465, + 93469, 93473, 93477, 93481, 93485, 93492, 93496, 93503, 93507, 93511, + 93515, 93519, 93523, 93527, 93531, 93538, 93542, 93546, 93550, 93554, + 93558, 93564, 93568, 93574, 93578, 93582, 93586, 93590, 93594, 93598, + 93602, 93606, 93610, 93614, 93618, 93622, 93626, 93630, 93634, 93638, + 93642, 93646, 93650, 93658, 93662, 93666, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 93670, 93678, 93686, 93694, 93702, 93710, 93718, 93726, 93734, 93742, + 93750, 93758, 93766, 93774, 93782, 93790, 93798, 93806, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 93814, 93818, 93823, 93828, 93833, 93837, 93842, + 93846, 93850, 93854, 93859, 93864, 93868, 93872, 93876, 93880, 93885, + 93890, 93894, 93898, 93903, 93907, 93911, 93916, 93921, 93926, 93931, + 93935, 93940, 93945, 93950, 93954, 93959, 93963, 93967, 93971, 93976, + 93981, 93985, 93989, 93993, 93997, 94002, 94007, 94011, 94015, 94020, + 94024, 94028, 94033, 94038, 94043, 94048, 94052, 94057, 94062, 94067, + 94071, 94076, 94080, 94084, 94088, 94093, 94098, 94102, 94106, 94110, + 94114, 94119, 94124, 94128, 94132, 94137, 94141, 94145, 94150, 94155, + 94160, 94165, 94169, 94174, 94179, 94184, 94188, 94193, 0, 94197, 94201, + 94206, 94211, 94215, 94219, 94223, 94227, 94232, 94237, 94241, 94245, + 94250, 94254, 94258, 94263, 94268, 94273, 94278, 94283, 94289, 94295, + 94301, 94306, 94312, 94317, 94322, 94327, 94333, 94339, 94344, 94349, + 94354, 94359, 94365, 94371, 94376, 94381, 94387, 94392, 94397, 94403, + 94409, 94415, 94421, 94426, 94432, 94438, 94444, 94449, 94455, 94460, + 94465, 94470, 94476, 94482, 94487, 94492, 94497, 94502, 94508, 94514, + 94519, 94524, 94530, 94535, 94540, 94546, 94552, 94558, 94564, 0, 94568, + 94573, 0, 0, 94578, 0, 0, 94582, 94587, 0, 0, 94592, 94596, 94600, 94605, + 0, 94610, 94614, 94619, 94623, 94627, 94632, 94637, 94642, 94647, 94651, + 94656, 94661, 0, 94666, 0, 94671, 94675, 94679, 94684, 94689, 94693, + 94697, 0, 94701, 94706, 94711, 94715, 94719, 94724, 94728, 94732, 94737, + 94742, 94747, 94752, 94757, 94763, 94769, 94775, 94780, 94786, 94791, + 94796, 94801, 94807, 94813, 94818, 94823, 94828, 94833, 94839, 94845, + 94850, 94855, 94861, 94866, 94871, 94877, 94883, 94889, 94895, 94900, + 94906, 94912, 94918, 94923, 94929, 94934, 94939, 94944, 94950, 94956, + 94961, 94966, 94971, 94976, 94982, 94988, 94993, 94998, 95004, 95009, + 95014, 95020, 95026, 95032, 95038, 95042, 0, 95047, 95052, 95056, 95061, + 0, 0, 95065, 95070, 95075, 95079, 95083, 95087, 95091, 95096, 0, 95101, + 95105, 95110, 95114, 95118, 95123, 95128, 0, 95133, 95137, 95142, 95147, + 95152, 95156, 95161, 95165, 95169, 95173, 95178, 95183, 95187, 95191, + 95195, 95199, 95204, 95209, 95213, 95217, 95222, 95226, 95230, 95235, + 95240, 95245, 95250, 95254, 0, 95259, 95264, 95268, 95273, 0, 95277, + 95281, 95286, 95291, 95295, 0, 95299, 0, 0, 0, 95303, 95307, 95312, + 95316, 95320, 95325, 95330, 0, 95335, 95339, 95344, 95349, 95354, 95358, + 95363, 95367, 95371, 95375, 95380, 95385, 95389, 95393, 95397, 95401, + 95406, 95411, 95415, 95419, 95424, 95428, 95432, 95437, 95442, 95447, + 95452, 95457, 95463, 95469, 95475, 95480, 95486, 95491, 95496, 95501, + 95507, 95513, 95518, 95523, 95528, 95533, 95539, 95545, 95550, 95555, + 95561, 95566, 95571, 95577, 95583, 95589, 95595, 95600, 95606, 95612, + 95618, 95623, 95629, 95634, 95639, 95644, 95650, 95656, 95661, 95666, + 95671, 95676, 95682, 95688, 95693, 95698, 95704, 95709, 95714, 95720, + 95726, 95732, 95738, 95742, 95747, 95752, 95757, 95761, 95766, 95770, + 95774, 95778, 95783, 95788, 95792, 95796, 95800, 95804, 95809, 95814, + 95818, 95822, 95827, 95831, 95835, 95840, 95845, 95850, 95855, 95859, + 95864, 95869, 95874, 95878, 95883, 95887, 95891, 95895, 95900, 95905, + 95909, 95913, 95917, 95921, 95926, 95931, 95935, 95939, 95944, 95948, + 95952, 95957, 95962, 95967, 95972, 95977, 95983, 95989, 95995, 96000, + 96006, 96011, 96016, 96021, 96027, 96033, 96038, 96043, 96048, 96053, + 96059, 96065, 96070, 96075, 96081, 96086, 96091, 96097, 96103, 96109, + 96115, 96120, 96126, 96132, 96138, 96143, 96149, 96154, 96159, 96164, + 96170, 96176, 96181, 96186, 96191, 96196, 96202, 96208, 96213, 96218, + 96224, 96229, 96234, 96240, 96246, 96252, 96258, 96263, 96269, 96275, + 96281, 96286, 96292, 96297, 96302, 96307, 96313, 96319, 96324, 96329, + 96334, 96339, 96345, 96351, 96356, 96361, 96367, 96372, 96377, 96383, + 96389, 96395, 96401, 96406, 96412, 96418, 96424, 96429, 96435, 96440, + 96445, 96450, 96456, 96462, 96467, 96472, 96477, 96482, 96488, 96494, + 96499, 96504, 96510, 96515, 96520, 96526, 96532, 96538, 96544, 96550, + 96557, 96564, 96571, 96577, 96584, 96590, 96596, 96602, 96609, 96616, + 96622, 96628, 96634, 96640, 96647, 96654, 96660, 96666, 96673, 96679, + 96685, 96692, 96699, 96706, 96713, 96719, 96726, 96733, 96740, 96746, + 96753, 96759, 96765, 96771, 96778, 96785, 96791, 96797, 96803, 96809, + 96816, 96823, 96829, 96835, 96842, 96848, 96854, 96861, 96868, 96875, + 96882, 96886, 96891, 96896, 96901, 96905, 96910, 96914, 96918, 96922, + 96927, 96932, 96936, 96940, 96944, 96948, 96953, 96958, 96962, 96966, + 96971, 96975, 96979, 96984, 96989, 96994, 96999, 97003, 97008, 97013, + 97018, 97022, 97027, 97031, 97035, 97039, 97044, 97049, 97053, 97057, + 97061, 97065, 97070, 97075, 97079, 97083, 97088, 97092, 97096, 97101, + 97106, 97111, 97116, 97122, 0, 0, 97129, 97134, 97139, 97144, 97149, + 97154, 97159, 97164, 97169, 97174, 97179, 97184, 97189, 97194, 97199, + 97204, 97209, 97214, 97220, 97225, 97230, 97235, 97240, 97245, 97250, + 97255, 97259, 97264, 97269, 97274, 97279, 97284, 97289, 97294, 97299, + 97304, 97309, 97314, 97319, 97324, 97329, 97334, 97339, 97344, 97350, + 97355, 97360, 97365, 97370, 97375, 97380, 97385, 97391, 97396, 97401, + 97406, 97411, 97416, 97421, 97426, 97431, 97436, 97441, 97446, 97451, + 97456, 97461, 97466, 97471, 97476, 97481, 97486, 97491, 97496, 97501, + 97506, 97512, 97517, 97522, 97527, 97532, 97537, 97542, 97547, 97551, + 97556, 97561, 97566, 97571, 97576, 97581, 97586, 97591, 97596, 97601, + 97606, 97611, 97616, 97621, 97626, 97631, 97636, 97642, 97647, 97652, + 97657, 97662, 97667, 97672, 97677, 97683, 97688, 97693, 97698, 97703, + 97708, 97713, 97719, 97725, 97731, 97737, 97743, 97749, 97755, 97761, + 97767, 97773, 97779, 97785, 97791, 97797, 97803, 97809, 97815, 97822, + 97828, 97834, 97840, 97846, 97852, 97858, 97864, 97869, 97875, 97881, + 97887, 97893, 97899, 97905, 97911, 97917, 97923, 97929, 97935, 97941, + 97947, 97953, 97959, 97965, 97971, 97978, 97984, 97990, 97996, 98002, + 98008, 98014, 98020, 98027, 98033, 98039, 98045, 98051, 98057, 98063, + 98069, 98075, 98081, 98087, 98093, 98099, 98105, 98111, 98117, 98123, + 98129, 98135, 98141, 98147, 98153, 98159, 98165, 98172, 98178, 98184, + 98190, 98196, 98202, 98208, 98214, 98219, 98225, 98231, 98237, 98243, + 98249, 98255, 98261, 98267, 98273, 98279, 98285, 98291, 98297, 98303, + 98309, 98315, 98321, 98328, 98334, 98340, 98346, 98352, 98358, 98364, + 98370, 98377, 98383, 98389, 98395, 98401, 98407, 98413, 98420, 98427, + 98434, 98441, 98448, 98455, 98462, 98469, 98476, 98483, 98490, 98497, + 98504, 98511, 98518, 98525, 98532, 98540, 98547, 98554, 98561, 98568, + 98575, 98582, 98589, 98595, 98602, 98609, 98616, 98623, 98630, 98637, + 98644, 98651, 98658, 98665, 98672, 98679, 98686, 98693, 98700, 98707, + 98714, 98722, 98729, 98736, 98743, 98750, 98757, 98764, 98771, 98779, + 98786, 98793, 98800, 98807, 98814, 98821, 98826, 0, 0, 98831, 98836, + 98840, 98844, 98848, 98852, 98856, 98860, 98864, 98868, 98872, 98877, + 98881, 98885, 98889, 98893, 98897, 98901, 98905, 98909, 98913, 98918, + 98922, 98926, 98930, 98934, 98938, 98942, 98946, 98950, 98954, 98960, + 98965, 98970, 98975, 98980, 98985, 98990, 98995, 99000, 99005, 99010, + 99014, 99018, 99022, 99026, 99030, 99034, 99038, 99042, 99046, 99053, + 99060, 99067, 99074, 99081, 99088, 99094, 99101, 99108, 99115, 99123, + 99131, 99139, 99147, 99155, 99163, 99170, 99177, 99184, 99192, 99200, + 99208, 99216, 99224, 99232, 99239, 99246, 99253, 99261, 99269, 99277, + 99285, 99293, 99301, 99306, 99311, 99316, 99321, 99326, 99331, 99336, + 99341, 99346, 0, 0, 0, 0, 99351, 99356, 99360, 99364, 99368, 99372, + 99376, 99380, 99384, 99388, 99392, 99396, 99400, 99404, 99408, 99412, + 99416, 99420, 99424, 99428, 99432, 99436, 99440, 99444, 99448, 99452, + 99456, 99460, 99464, 99468, 99472, 99476, 99480, 99484, 99488, 99492, + 99496, 99500, 99504, 99508, 99512, 99516, 99520, 99524, 99528, 99532, + 99536, 99540, 99544, 99548, 99552, 99557, 99561, 99565, 99569, 99573, + 99577, 99581, 99585, 99589, 99593, 99597, 99601, 99605, 99609, 99613, + 99617, 99621, 99625, 99629, 99633, 99637, 99641, 99645, 99649, 99653, + 99657, 99661, 99665, 99669, 99673, 99677, 99681, 99685, 99689, 99693, + 99697, 99701, 99705, 99709, 99713, 99717, 99721, 99725, 99729, 99733, + 99737, 99741, 99745, 99749, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 99753, + 99757, 99761, 99765, 99769, 99773, 99777, 99781, 99785, 99789, 99793, + 99797, 99801, 99805, 99809, 99813, 99817, 99821, 99825, 99829, 99833, + 99837, 99841, 99845, 99849, 99853, 99857, 99861, 99865, 99869, 99873, + 99877, 99881, 99885, 99889, 99893, 99897, 99901, 99905, 99909, 99913, + 99917, 99921, 99925, 99929, 99933, 99937, 99941, 99945, 99949, 99953, + 99957, 99961, 99965, 99969, 99973, 99977, 99981, 99985, 99989, 99993, + 99997, 100001, 100005, 100009, 100013, 100017, 100021, 100025, 100029, + 100033, 100037, 100041, 100045, 100049, 100053, 100057, 100061, 100065, + 100069, 100073, 100077, 100081, 100085, 100089, 100093, 100097, 100101, + 100105, 100109, 100113, 100117, 100121, 100125, 100129, 100133, 100137, + 100141, 100145, 100149, 100153, 100157, 100161, 100165, 100169, 100173, + 100177, 100181, 100185, 100189, 100193, 100197, 100201, 100205, 100209, + 100213, 100217, 100221, 100225, 100229, 100233, 100237, 100241, 100245, + 100249, 100253, 100257, 100261, 100265, 100269, 100273, 100277, 100281, + 100285, 100289, 100293, 100297, 100301, 100305, 100309, 100313, 100317, + 100321, 100325, 100329, 100333, 100337, 100341, 100345, 100349, 100353, + 100357, 100361, 100365, 100369, 100373, 100377, 100381, 100385, 100389, + 100393, 100397, 100401, 100405, 100409, 100413, 100417, 100421, 100425, + 100429, 100433, 100437, 100441, 100445, 100449, 100453, 100457, 100461, + 100465, 100469, 100473, 100477, 100481, 100485, 100489, 100493, 100497, + 100501, 100505, 100509, 100513, 100517, 100521, 100525, 100529, 100533, + 100537, 100541, 100545, 100549, 100553, 100557, 100561, 100565, 100569, + 100573, 100577, 100581, 100585, 100589, 100593, 100597, 100601, 100605, + 100609, 100613, 100617, 100621, 100625, 100629, 100633, 100637, 100641, + 100645, 100649, 100653, 100657, 100661, 100665, 100669, 100673, 100677, + 100681, 100685, 100689, 100693, 100697, 100701, 100705, 100709, 100713, + 100717, 100721, 100725, 100729, 100733, 100737, 100741, 100745, 100749, + 100753, 100757, 100761, 100765, 100769, 100773, 100777, 100781, 100785, + 100789, 100793, 100797, 100801, 100805, 100809, 100813, 100817, 100821, + 100825, 100829, 100833, 100837, 100841, 100845, 100849, 100853, 100857, + 100861, 100865, 100869, 100873, 100877, 100881, 100885, 100889, 100893, + 100897, 100901, 100905, 100909, 100913, 100917, 100921, 100925, 100929, + 100933, 100937, 100941, 100945, 100949, 100953, 100957, 100961, 100965, + 100969, 100973, 100977, 100981, 100985, 100989, 100993, 100997, 101001, + 101005, 101009, 101013, 101017, 101021, 101025, 101029, 101033, 101037, + 101041, 101045, 101049, 101053, 101057, 101061, 101065, 101069, 101073, + 101077, 101081, 101085, 101089, 101093, 101097, 101101, 101105, 101109, + 101113, 101117, 101121, 101125, 101129, 101133, 101137, 101141, 101145, + 101149, 101153, 101157, 101161, 101165, 101169, 101173, 101177, 101181, + 101185, 101189, 101193, 101197, 101201, 101205, 101209, 101213, 101217, + 101221, 101225, 101229, 101233, 101237, 101241, 101245, 101249, 101253, + 101257, 101261, 101265, 101269, 101273, 101277, 101281, 101285, 101289, + 101293, 101297, 101301, 101305, 101309, 101313, 101317, 101321, 101325, + 101329, 101333, 101337, 101341, 101345, 101349, 101353, 101357, 101361, + 101365, 101369, 101373, 101377, 101381, 101385, 101389, 101393, 101397, + 101401, 101405, 101409, 101413, 101417, 101421, 101425, 101429, 101433, + 101437, 101441, 101445, 101449, 101453, 101457, 101461, 101465, 101469, + 101473, 101477, 101481, 101485, 101489, 101493, 101497, 101501, 101505, + 101509, 101513, 101517, 101521, 101525, 101529, 101533, 101537, 101541, + 101545, 101549, 101553, 101557, 101561, 101565, 101569, 101573, 101577, + 101581, 101585, 101589, 101593, 101597, 101601, 101605, 101609, 101613, + 101617, 101621, 101625, 101629, 101633, 101637, 101641, 101645, 101649, + 101653, 101657, 101661, 101665, 101669, 101673, 101677, 101681, 101685, + 101689, 101693, 101697, 101701, 101705, 101709, 101713, 101717, 101721, + 101725, 101729, 101733, 101737, 101741, 101745, 101749, 101753, 101757, + 101761, 101765, 101769, 101773, 101777, 101781, 101785, 101789, 101793, + 101797, 101801, 101805, 101809, 101813, 101817, 101821, 101825, 101829, + 101833, 101837, 101841, 101845, 101849, 101853, 101857, 101861, 101865, + 101869, 101873, 101877, 101881, 101885, 101889, 101893, 101897, 101901, + 101905, 101909, 101913, 101917, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 101921, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 101925, + 101928, 101932, 101936, 101939, 101943, 101947, 101950, 101953, 101957, + 101961, 101964, 101967, 101970, 101973, 101978, 101981, 101985, 101988, + 101991, 101994, 101997, 102000, 102003, 102006, 102009, 102012, 102015, + 102018, 102022, 102026, 102030, 102034, 102039, 102044, 102050, 102056, + 102062, 102067, 102073, 102078, 102083, 102088, 102094, 102100, 102105, + 102110, 102115, 102120, 102126, 102132, 102137, 102142, 102148, 102153, + 102158, 102164, 102170, 102176, 102182, 102186, 102191, 102195, 102200, + 102204, 102209, 102214, 102220, 102226, 102232, 102237, 102243, 102248, + 102253, 102258, 102264, 102270, 102275, 102280, 102285, 102290, 102296, + 102302, 102307, 102312, 102318, 102323, 102328, 102334, 102340, 102346, + 102352, 102357, 102361, 102366, 102368, 102372, 102375, 102378, 102381, + 102384, 102387, 102390, 102393, 102396, 102399, 102402, 102405, 102408, + 102411, 102414, 102417, 102420, 102423, 102426, 102429, 102432, 102435, + 102438, 102441, 102444, 102447, 102450, 102453, 102456, 102459, 102462, + 102465, 102468, 102471, 102474, 102477, 102480, 102483, 102486, 102489, + 102492, 102495, 102498, 102501, 102504, 102507, 102510, 102513, 102516, + 102519, 102522, 102525, 102528, 102531, 102534, 102537, 102540, 102543, + 102546, 102549, 102552, 102555, 102558, 102561, 102564, 102567, 102570, + 102573, 102576, 102579, 102582, 102585, 102588, 102591, 102594, 102597, + 102600, 102603, 102606, 102609, 102612, 102615, 102618, 102621, 102624, + 102627, 102630, 102633, 102636, 102639, 102642, 102645, 102648, 102651, + 102654, 102657, 102660, 102663, 102666, 102669, 102672, 102675, 102678, + 102681, 102684, 102687, 102690, 102693, 102696, 102699, 102702, 102705, + 102708, 102711, 102714, 102717, 102720, 102723, 102726, 102729, 102732, + 102735, 102738, 102741, 102744, 102747, 102750, 102753, 102756, 102759, + 102762, 102765, 102768, 102771, 102774, 102777, 102780, 102783, 102786, + 102789, 102792, 102795, 102798, 102801, 102804, 102807, 102810, 102813, + 102816, 102819, 102822, 102825, 102828, 102831, 102834, 102837, 102840, + 102843, 102846, 102849, 102852, 102855, 102858, 102861, 102864, 102867, + 102870, 102873, 102876, 102879, 102882, 102885, 102888, 102891, 102894, + 102897, 102900, 102903, 102906, 102909, 102912, 102915, 102918, 102921, + 102924, 102927, 102930, 102933, 102936, 102939, 102942, 102945, 102948, + 102951, 102954, 102957, 102960, 102963, 102966, 102969, 102972, 102975, + 102978, 102981, 102984, 102987, 102990, 102993, 102996, 102999, 103002, + 103005, 103008, 103011, 103014, 103017, 103020, 103023, 103026, 103029, + 103032, 103035, 103038, 103041, 103044, 103047, 103050, 103053, 103056, + 103059, 103062, 103065, 103068, 103071, 103074, 103077, 103080, 103083, + 103086, 103089, 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, 0, 7929, 0, 194682, 0, 78500, 66480, 0, - 42833, 74529, 12064, 0, 596, 0, 0, 13192, 8651, 0, 0, 120218, 12995, - 64865, 1373, 0, 0, 5816, 119067, 64810, 4231, 6825, 0, 4233, 4234, 4232, - 917836, 74415, 120210, 6384, 917840, 78108, 8851, 0, 0, 0, 41601, 8874, - 0, 7748, 0, 0, 0, 0, 41603, 9784, 0, 9188, 41600, 0, 120618, 0, 1457, - 3535, 0, 0, 0, 0, 65240, 11951, 0, 3404, 0, 0, 0, 1759, 0, 41076, 68383, - 120572, 119205, 66577, 0, 0, 65859, 0, 7404, 0, 0, 0, 0, 65908, 9834, - 3055, 9852, 0, 65288, 0, 11398, 0, 0, 119255, 0, 0, 603, 74398, 43548, 0, - 0, 917824, 3350, 120817, 64318, 917828, 127089, 3390, 74483, 43265, - 120599, 917830, 78573, 0, 1919, 3400, 0, 917813, 0, 917540, 66446, 64141, - 8562, 64139, 64138, 4043, 8712, 64134, 64133, 11297, 0, 0, 11966, 64128, - 0, 0, 0, 64132, 10867, 64130, 64129, 0, 43374, 9779, 2764, 66002, 10167, - 9471, 0, 66021, 0, 0, 5457, 5440, 8857, 0, 65282, 2843, 5355, 0, 0, 0, - 5194, 11657, 43984, 0, 0, 0, 0, 0, 127027, 10717, 64570, 5630, 74350, - 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, 0, 0, 0, 0, 78214, 2750, 0, 556, 64158, 64157, 0, - 12213, 194678, 2760, 0, 0, 0, 0, 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, 0, 0, 7007, 7590, 65443, 9036, 0, 64122, - 74422, 66609, 0, 64117, 64116, 6287, 64114, 2725, 64120, 64119, 43981, - 42128, 0, 1177, 65601, 12322, 64106, 0, 127306, 64102, 7859, 1945, 64099, - 0, 10453, 64104, 7188, 7997, 0, 7389, 0, 8705, 64097, 64096, 9571, 528, - 917989, 44017, 11429, 0, 0, 0, 917990, 73841, 0, 0, 9056, 0, 6188, - 120019, 6155, 64068, 1823, 64066, 64065, 64072, 64071, 63, 7233, 120698, - 0, 41904, 6639, 64064, 0, 0, 0, 1176, 118959, 0, 8162, 0, 0, 0, 120519, - 66376, 66242, 11415, 4333, 9855, 64112, 64642, 0, 5388, 0, 0, 0, 7714, - 66222, 0, 7768, 0, 4199, 64708, 0, 0, 0, 8708, 9560, 64077, 64076, 8996, - 4992, 4471, 42622, 64079, 64078, 0, 0, 0, 0, 64615, 0, 0, 12075, 0, 0, - 5174, 0, 0, 127557, 3123, 0, 12685, 0, 8408, 64704, 0, 0, 9223, 0, 41616, - 0, 73797, 0, 1116, 0, 43049, 0, 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, 0, 9927, 41335, 4118, 1797, 0, 41334, 0, 46, 43448, - 0, 298, 0, 0, 0, 42627, 0, 32, 6187, 119052, 11495, 11459, 3665, 0, - 42871, 0, 19923, 74335, 0, 0, 66239, 0, 64403, 4412, 7240, 0, 0, 0, - 65758, 12750, 4181, 8544, 0, 120199, 917897, 120198, 120203, 6181, 65014, - 0, 0, 0, 3639, 119588, 0, 0, 0, 10073, 120206, 0, 0, 68409, 42844, 7498, - 1098, 0, 0, 0, 0, 10207, 8789, 0, 0, 0, 0, 9234, 0, 6182, 0, 65058, 0, 0, - 0, 0, 5471, 9461, 5573, 118936, 5473, 44, 0, 66244, 118907, 0, 66238, - 12844, 0, 1622, 7767, 1900, 41339, 11458, 0, 0, 6581, 5576, 0, 64405, - 41337, 0, 41631, 8947, 68390, 0, 41694, 0, 0, 7908, 0, 10408, 6579, 0, - 64618, 0, 120147, 0, 6583, 7761, 127010, 120504, 194828, 0, 5058, 41010, - 9992, 0, 5057, 0, 0, 74538, 5054, 118951, 194971, 78606, 0, 1437, 41617, - 658, 3497, 0, 7486, 5061, 5060, 4235, 0, 0, 0, 12113, 4236, 4727, 0, 0, - 7693, 10749, 0, 7488, 5773, 978, 0, 0, 41619, 10239, 68611, 0, 66209, 0, - 0, 9748, 0, 127524, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9341, 119596, - 2379, 11325, 0, 64668, 67854, 8125, 120545, 6743, 119175, 917940, 2369, - 0, 0, 0, 119235, 74092, 73936, 7008, 43660, 0, 0, 0, 2367, 0, 0, 264, - 2375, 8060, 6194, 119858, 1844, 119084, 0, 12858, 0, 0, 6961, 0, 118839, - 0, 8800, 0, 42862, 4463, 65581, 6192, 194676, 42771, 0, 0, 725, 65042, + 74224, 4851, 0, 0, 0, 0, 7929, 0, 194682, 0, 0, 66480, 0, 42833, 74529, + 12064, 0, 596, 0, 0, 65842, 8651, 0, 0, 120218, 12995, 64865, 1373, 0, 0, + 5816, 119067, 64810, 4231, 917833, 0, 4233, 4234, 4232, 917836, 0, + 120210, 917841, 917840, 0, 8851, 0, 0, 0, 41601, 8874, 0, 7748, 0, 0, 0, + 0, 41603, 9784, 0, 9188, 41600, 0, 0, 0, 1457, 3535, 0, 0, 0, 0, 65240, + 11951, 0, 3404, 0, 0, 0, 1759, 0, 194964, 0, 0, 0, 66577, 0, 0, 65859, 0, + 0, 0, 0, 0, 0, 65930, 9834, 3055, 9852, 0, 65288, 0, 11398, 0, 0, 119255, + 0, 0, 603, 0, 43548, 0, 0, 917824, 3350, 120817, 64318, 917828, 127089, + 3390, 74483, 43265, 120599, 917830, 917829, 0, 1919, 3400, 0, 917813, 0, + 917540, 66446, 64141, 8562, 64139, 64138, 4043, 8712, 64134, 64133, + 11297, 0, 0, 11966, 64128, 0, 0, 0, 64132, 10867, 64130, 64129, 0, 0, + 9779, 2764, 66002, 0, 9471, 0, 66021, 0, 0, 5457, 5440, 8857, 0, 65282, + 2843, 5355, 0, 0, 0, 5194, 11657, 0, 0, 0, 0, 0, 0, 127027, 10717, 64570, + 5630, 74350, 64143, 10682, 0, 10602, 800, 42499, 66186, 0, 0, 64930, + 11631, 64146, 64145, 64144, 762, 13172, 118859, 0, 0, 10906, 1353, 6960, + 0, 0, 5828, 8724, 917806, 8933, 1601, 42244, 858, 7080, 917808, 917807, + 8090, 0, 74401, 917811, 587, 0, 0, 0, 0, 0, 0, 2750, 0, 556, 64158, + 64157, 0, 12213, 0, 2760, 0, 0, 0, 0, 64156, 64155, 42496, 0, 64151, + 64150, 12679, 10053, 10421, 11787, 64153, 64152, 0, 0, 4839, 0, 0, 1874, + 120352, 0, 6577, 64125, 64124, 64123, 0, 0, 0, 7007, 7590, 65443, 9036, + 0, 64122, 74422, 66609, 0, 64117, 64116, 6287, 64114, 2725, 64120, 64119, + 64118, 42128, 0, 1177, 65601, 12322, 64106, 0, 0, 64102, 7859, 1945, + 64099, 0, 10453, 64104, 7188, 7997, 0, 0, 0, 8705, 64097, 64096, 9571, + 528, 917989, 0, 11429, 0, 0, 0, 0, 73841, 0, 0, 9056, 0, 6188, 120019, + 6155, 64068, 1823, 64066, 64065, 64072, 64071, 63, 7233, 0, 0, 41904, + 6639, 64064, 0, 0, 0, 1176, 118959, 0, 8162, 0, 0, 0, 120519, 66376, + 66242, 11415, 4333, 9855, 64112, 64642, 0, 5388, 0, 0, 0, 7714, 66222, 0, + 7768, 0, 4199, 64708, 0, 0, 0, 8708, 9560, 64077, 64076, 8996, 4992, + 4471, 42622, 64079, 64078, 0, 0, 0, 0, 64615, 0, 0, 12075, 0, 0, 5174, 0, + 0, 0, 3123, 0, 12685, 0, 8408, 64704, 0, 0, 9223, 0, 41616, 0, 73797, 0, + 1116, 0, 43049, 0, 43050, 8548, 0, 0, 119061, 0, 0, 13115, 64092, 64091, + 9322, 0, 120595, 64095, 64094, 8111, 66247, 42332, 64089, 64088, 6199, 0, + 0, 11434, 64083, 64082, 11329, 7737, 64087, 64086, 64085, 64084, 0, 0, + 41335, 4118, 1797, 0, 41334, 0, 46, 0, 0, 298, 0, 0, 0, 42627, 0, 32, + 6187, 119052, 11495, 11459, 3665, 0, 42871, 0, 19923, 74335, 0, 0, 66239, + 0, 64403, 4412, 7240, 0, 0, 0, 65758, 12750, 4181, 8544, 0, 120199, 0, + 120198, 120203, 6181, 65014, 0, 0, 0, 3639, 119588, 0, 0, 0, 10073, + 120206, 0, 0, 0, 42844, 7498, 1098, 0, 0, 0, 0, 10207, 8789, 0, 0, 0, 0, + 9234, 0, 6182, 0, 65058, 0, 0, 0, 0, 5471, 9461, 5573, 118936, 5473, 44, + 0, 66244, 118907, 0, 66238, 12844, 0, 1622, 7767, 1900, 41339, 11458, 0, + 0, 6581, 5576, 0, 64405, 41337, 0, 0, 8947, 0, 0, 41694, 0, 0, 7908, 0, + 10408, 6579, 0, 194829, 0, 0, 0, 6583, 7761, 127010, 120504, 194828, 0, + 5058, 41010, 9992, 0, 5057, 0, 0, 74538, 5054, 118951, 194971, 0, 0, + 1437, 41617, 658, 3497, 0, 7486, 5061, 5060, 4235, 0, 0, 0, 12113, 4236, + 4727, 0, 0, 7693, 10749, 0, 7488, 5773, 978, 0, 0, 41619, 10239, 0, 0, + 66209, 0, 0, 9748, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9341, + 119596, 2379, 11325, 0, 64668, 67854, 8125, 120545, 0, 119175, 917940, + 2369, 0, 0, 0, 119235, 74092, 73936, 7008, 0, 0, 0, 0, 2367, 0, 0, 264, + 2375, 8060, 6194, 119858, 1844, 119084, 0, 12858, 0, 0, 6961, 0, 0, 0, + 8800, 0, 42862, 4463, 65581, 6192, 194676, 42771, 0, 0, 725, 65042, 118797, 120800, 0, 12892, 0, 0, 0, 0, 0, 0, 0, 120707, 0, 0, 5074, 5073, - 0, 8983, 0, 74493, 0, 5072, 0, 6198, 11614, 0, 196, 0, 0, 0, 4929, + 0, 8983, 0, 917939, 0, 5072, 0, 6198, 11614, 0, 196, 0, 0, 0, 4929, 120342, 0, 0, 0, 0, 42847, 0, 0, 0, 4934, 0, 41323, 9758, 0, 120341, 0, 42584, 0, 4329, 41321, 4979, 3048, 7752, 41320, 0, 74418, 12819, 0, 5071, - 0, 3642, 0, 5070, 10042, 118835, 3987, 5068, 0, 8909, 78650, 78649, 0, - 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, 0, 120275, - 4933, 0, 0, 118985, 4928, 0, 0, 74770, 120194, 0, 722, 0, 19908, 12637, - 0, 119855, 8753, 1509, 0, 5468, 9511, 0, 0, 1672, 6205, 10864, 74586, 0, - 0, 0, 0, 0, 73863, 0, 0, 41607, 120115, 1679, 120116, 120180, 120113, 0, - 7005, 41609, 9580, 0, 401, 0, 120109, 6968, 5761, 342, 8553, 0, 8143, - 127115, 11983, 127113, 624, 74508, 0, 119630, 5078, 74258, 12478, 0, - 5076, 0, 194609, 0, 120097, 685, 9025, 1524, 12618, 0, 5539, 0, 120095, - 120102, 120094, 120552, 0, 194611, 78752, 0, 12520, 8058, 9732, 0, 5080, - 64775, 5036, 5035, 120590, 42604, 0, 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, 0, 0, 0, 66321, 0, 12814, 127248, 3432, 10218, 0, 6094, + 0, 3642, 0, 5070, 10042, 0, 3987, 5068, 0, 0, 120216, 0, 0, 10636, 73981, + 11806, 43167, 4531, 1245, 9105, 66463, 4921, 120219, 4926, 65544, 73884, + 194619, 0, 0, 64709, 0, 194620, 120790, 4922, 325, 992, 119568, 4925, 0, + 0, 9526, 4920, 0, 948, 0, 120208, 4930, 0, 0, 120275, 4933, 0, 0, 0, + 4928, 0, 0, 74770, 0, 0, 722, 0, 19908, 12637, 0, 119855, 8753, 1509, 0, + 5468, 9511, 0, 0, 1672, 6205, 10864, 74586, 0, 0, 0, 0, 0, 73863, 0, 0, + 41607, 120115, 1679, 120116, 194932, 120113, 0, 7005, 41609, 9580, 0, + 401, 0, 120109, 6968, 5761, 342, 8553, 0, 8143, 127115, 11983, 127113, + 624, 74508, 0, 119630, 5078, 74258, 12478, 0, 5076, 0, 194609, 0, 120097, + 685, 9025, 1524, 12618, 0, 5539, 0, 120095, 120102, 120094, 120552, 0, + 194611, 0, 0, 12520, 8058, 9732, 0, 5080, 64775, 5036, 5035, 120590, + 42604, 0, 0, 8074, 275, 13291, 1907, 0, 4432, 0, 5033, 0, 0, 4836, 3888, + 73792, 10729, 64546, 194600, 120681, 194937, 0, 67588, 119000, 0, 0, + 8858, 6409, 0, 120252, 0, 0, 0, 66321, 0, 12814, 0, 3432, 10218, 0, 6094, 7641, 42445, 0, 0, 42406, 1676, 74320, 194607, 0, 5030, 0, 0, 0, 0, 9622, - 0, 0, 6787, 0, 0, 0, 0, 10544, 12919, 0, 0, 0, 0, 0, 120789, 0, 947, - 119835, 194586, 194585, 10969, 119935, 7613, 119937, 119936, 4795, - 119930, 7018, 7376, 120181, 120192, 120268, 0, 43567, 74056, 917910, - 118963, 119919, 7216, 65232, 7217, 251, 7218, 7895, 4395, 43538, 119926, - 119929, 119928, 7213, 119922, 7214, 7215, 0, 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, 0, 0, - 73756, 5042, 5041, 42769, 12084, 0, 0, 0, 127319, 0, 917906, 0, 0, 12283, - 1616, 3795, 0, 8795, 66245, 0, 0, 0, 1138, 73905, 12677, 0, 0, 3239, 0, - 0, 0, 8431, 0, 42164, 0, 11778, 12620, 6826, 73773, 119073, 5040, 0, 0, - 0, 78420, 0, 5039, 0, 78418, 0, 5038, 0, 0, 13184, 74293, 0, 64648, 0, - 9359, 78416, 0, 0, 65157, 6662, 0, 0, 3863, 73909, 4835, 55266, 43432, 0, - 4309, 0, 194569, 0, 194568, 1301, 0, 42589, 569, 0, 73813, 711, 119085, - 0, 0, 73880, 11610, 11368, 0, 194571, 41331, 1006, 74240, 0, 1550, 8201, - 73737, 7627, 5499, 5031, 77908, 42738, 65784, 77907, 65267, 3758, 0, - 65781, 64734, 0, 2440, 65780, 77913, 8449, 0, 5008, 0, 8822, 0, 12121, - 8255, 5512, 73875, 119560, 0, 64313, 2641, 5906, 1119, 127068, 13038, 0, - 2455, 0, 118809, 0, 0, 0, 0, 8714, 0, 4211, 0, 0, 0, 0, 43713, 5052, - 66220, 5821, 6186, 65778, 65775, 5051, 65773, 1429, 42647, 5050, 302, - 388, 41115, 735, 6637, 5907, 120670, 0, 12726, 74594, 9117, 0, 195010, - 5513, 6666, 5053, 74230, 5510, 78451, 0, 78447, 2470, 78437, 0, 1925, 0, - 0, 74807, 0, 5048, 5047, 0, 0, 0, 194863, 0, 74497, 0, 8089, 6929, 639, - 0, 68179, 0, 0, 0, 4599, 41402, 6674, 43397, 43294, 1476, 648, 0, 65819, - 3233, 0, 41782, 6951, 0, 0, 3530, 9750, 0, 0, 6656, 194858, 0, 5046, - 8512, 65856, 74261, 8967, 0, 5045, 0, 1916, 7986, 5044, 120556, 9006, - 13128, 5043, 0, 7853, 74068, 74004, 9669, 12341, 12703, 8402, 0, 119070, - 0, 41750, 3586, 64508, 43148, 0, 0, 119606, 0, 13296, 517, 0, 0, 0, - 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, 0, 0, 66200, 0, 0, 0, 78423, 0, 0, 8711, 6183, 0, - 0, 0, 120448, 7623, 118925, 194853, 9235, 12760, 74176, 0, 66445, 43540, - 120437, 3743, 11514, 11078, 0, 12136, 0, 0, 120435, 0, 7726, 0, 19922, - 267, 3393, 42198, 1371, 194849, 69233, 2458, 0, 6201, 0, 41074, 4266, - 10652, 41612, 41077, 3402, 9050, 3398, 0, 0, 0, 3391, 41075, 2476, 0, - 917550, 0, 10625, 0, 12767, 13017, 78743, 64261, 64934, 127537, 13014, - 13013, 0, 6673, 0, 0, 0, 12438, 0, 0, 0, 0, 0, 9053, 13015, 74523, 0, - 704, 66215, 6195, 0, 6660, 78758, 917760, 917793, 42212, 12629, 11435, 0, - 55256, 65538, 0, 0, 0, 74547, 0, 65448, 78100, 12948, 119001, 195002, - 119238, 195004, 78099, 127085, 0, 0, 4287, 8276, 4902, 1131, 0, 78458, - 66728, 1816, 0, 42533, 168, 42845, 4898, 64298, 0, 0, 4901, 1821, 0, 578, + 0, 0, 0, 0, 0, 0, 0, 10544, 12919, 0, 0, 0, 0, 0, 0, 0, 947, 119835, + 194586, 194585, 10969, 119935, 7613, 119937, 119936, 4795, 119930, 7018, + 64914, 0, 120192, 120268, 0, 43567, 74056, 917910, 0, 119919, 7216, + 65232, 7217, 251, 7218, 7895, 4395, 43538, 119926, 119929, 119928, 7213, + 119922, 7214, 7215, 0, 74141, 8880, 7685, 0, 120173, 65540, 119618, 625, + 8187, 42861, 1113, 7236, 7915, 3630, 120176, 8179, 74264, 67886, 9316, + 10980, 2489, 65624, 8150, 1359, 0, 0, 0, 73756, 5042, 5041, 42769, 12084, + 0, 0, 0, 0, 0, 0, 0, 0, 12283, 1616, 3795, 0, 8795, 66245, 0, 0, 0, 1138, + 73905, 12677, 0, 0, 3239, 0, 0, 0, 8431, 0, 42164, 0, 11778, 12620, 0, + 73773, 119073, 5040, 0, 0, 0, 0, 0, 5039, 0, 0, 0, 5038, 0, 0, 13184, + 74293, 0, 64648, 0, 9359, 0, 0, 0, 65157, 6662, 0, 0, 3863, 73909, 4835, + 0, 0, 0, 4309, 0, 194569, 0, 194568, 1301, 0, 119595, 569, 0, 0, 711, + 119085, 0, 0, 73880, 11610, 11368, 0, 194571, 41331, 1006, 74240, 0, + 1550, 8201, 73737, 7627, 5499, 5031, 0, 0, 65784, 0, 65267, 3758, 0, + 65781, 64734, 0, 2440, 65780, 0, 8449, 0, 5008, 0, 8822, 0, 12121, 8255, + 5512, 73875, 119560, 0, 64313, 2641, 5906, 1119, 127068, 13038, 0, 2455, + 0, 118809, 0, 0, 0, 0, 8714, 0, 4211, 0, 0, 0, 0, 0, 5052, 66220, 5821, + 6186, 65778, 65775, 5051, 65773, 1429, 42647, 5050, 302, 388, 41115, 735, + 6637, 5907, 120670, 0, 12726, 74594, 9117, 0, 0, 5513, 6666, 5053, 74230, + 5510, 0, 0, 0, 2470, 0, 0, 1925, 0, 0, 0, 0, 5048, 5047, 0, 0, 0, 194863, + 0, 74497, 0, 8089, 6929, 639, 0, 68179, 0, 0, 0, 4599, 41402, 6674, + 120631, 43294, 1476, 648, 0, 65819, 3233, 0, 0, 10164, 0, 0, 3530, 9750, + 0, 0, 6656, 194858, 0, 5046, 8512, 65856, 74261, 8967, 0, 5045, 0, 1916, + 7986, 5044, 120556, 9006, 13128, 5043, 0, 7853, 74068, 74004, 9669, + 12341, 12703, 8402, 0, 119070, 0, 41750, 3586, 64508, 43148, 0, 0, + 119606, 0, 13296, 517, 0, 0, 0, 41528, 123, 65454, 0, 0, 74478, 10531, + 7784, 41526, 10829, 73991, 8057, 1126, 73895, 0, 194591, 0, 3925, 0, + 8069, 43142, 120439, 489, 0, 0, 120441, 120452, 43151, 0, 0, 66200, 0, 0, + 0, 0, 0, 0, 8711, 6183, 0, 0, 0, 120448, 7623, 118925, 194853, 9235, + 12760, 74176, 0, 66445, 43540, 120437, 3743, 11514, 11078, 0, 12136, 0, + 0, 120435, 0, 7726, 0, 19922, 267, 3393, 0, 1371, 194849, 0, 2458, 0, + 6201, 0, 41074, 4266, 10652, 41612, 41077, 3402, 9050, 3398, 0, 0, 0, + 3391, 41075, 2476, 0, 917550, 0, 10625, 0, 12767, 13017, 0, 64261, 64934, + 0, 13014, 13013, 0, 6673, 0, 0, 0, 12438, 0, 0, 0, 0, 0, 9053, 13015, + 74523, 0, 704, 66215, 6195, 0, 6660, 194941, 917760, 917793, 0, 12629, + 11435, 0, 0, 65538, 0, 0, 0, 74547, 0, 65448, 0, 12948, 195003, 195002, + 119238, 195004, 195007, 195006, 0, 0, 4287, 8276, 4902, 1131, 0, 0, + 66728, 1816, 0, 42533, 168, 0, 4898, 64298, 0, 0, 4901, 1821, 0, 578, 3653, 0, 791, 9162, 6977, 0, 119298, 74561, 0, 73731, 8354, 43590, 0, 0, 7557, 0, 119301, 8234, 7241, 0, 194994, 119167, 194996, 12811, 65925, - 3946, 78078, 10998, 78080, 673, 194867, 64397, 0, 74599, 78449, 8890, - 194977, 194976, 2448, 78085, 10267, 8424, 2452, 78083, 194864, 8729, - 78456, 0, 7845, 0, 78692, 4408, 4122, 6772, 11039, 8723, 194990, 194989, - 119302, 731, 119304, 119303, 2438, 64855, 119300, 119299, 1175, 0, 42135, - 373, 119172, 5396, 11457, 11521, 7723, 0, 0, 0, 41952, 0, 5273, 8248, - 5269, 6337, 5202, 2404, 5267, 42823, 11291, 19915, 5277, 12963, 0, 6189, - 4125, 1314, 12133, 0, 118873, 1271, 0, 0, 66024, 41482, 3864, 74539, 0, - 3879, 0, 12978, 4166, 4574, 0, 7567, 7459, 0, 41390, 5384, 41882, 67647, - 0, 5759, 0, 0, 41388, 0, 41392, 64288, 41387, 0, 8706, 5552, 0, 700, 0, - 5553, 0, 7088, 5356, 7499, 78110, 66596, 0, 0, 10263, 5554, 0, 12344, - 10311, 78113, 6665, 0, 0, 7618, 8517, 11455, 78440, 64632, 66017, 5555, - 78088, 78093, 78091, 0, 42803, 65033, 9143, 6668, 195067, 195066, 195069, - 656, 195071, 65037, 4577, 64624, 0, 0, 0, 0, 4269, 73885, 917775, 42846, - 917774, 950, 0, 0, 66580, 118895, 66683, 10554, 917778, 119121, 0, 5098, - 917770, 0, 119099, 5097, 4935, 9848, 10381, 0, 917560, 0, 3651, 0, 0, - 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, 195044, 9078, 8545, 66356, 195048, - 0, 9154, 9118, 0, 0, 2676, 7750, 0, 73812, 6190, 8599, 195053, 0, 10795, - 9857, 7014, 9856, 195033, 0, 12129, 0, 8481, 0, 6202, 195035, 10920, - 195037, 5203, 195039, 195038, 5108, 5107, 65818, 66019, 9762, 0, 5541, - 74772, 0, 12613, 5284, 6657, 207, 0, 4275, 74819, 854, 68147, 74381, 0, - 0, 5103, 0, 64348, 41368, 43974, 488, 69811, 0, 0, 10157, 0, 43034, - 11438, 0, 0, 0, 68431, 41771, 5106, 6669, 8504, 65154, 69813, 41367, - 5105, 195030, 69809, 6476, 5104, 0, 304, 3176, 0, 0, 932, 0, 6567, 238, - 74522, 195011, 194595, 19905, 120577, 195015, 120187, 41044, 67640, - 194902, 42055, 9912, 65939, 10670, 74093, 13273, 0, 12552, 195019, 8803, - 309, 6622, 8151, 10858, 194596, 67636, 0, 12568, 0, 12553, 0, 43275, - 6950, 9712, 68680, 43970, 0, 65165, 0, 0, 66466, 0, 0, 0, 66725, 6191, - 11351, 10437, 11316, 67634, 0, 0, 41754, 67635, 9370, 2720, 194975, - 68462, 8232, 118817, 0, 3222, 0, 0, 0, 66663, 0, 0, 10834, 0, 0, 65732, - 0, 917547, 119579, 67679, 195020, 0, 7781, 41383, 64568, 0, 120738, - 12077, 0, 64586, 917620, 42396, 55255, 3475, 0, 2479, 0, 3632, 120728, - 10698, 8376, 3648, 194960, 74844, 67639, 3636, 67894, 3650, 8837, 65229, - 1843, 42283, 43250, 41562, 9100, 74548, 0, 3640, 0, 42321, 7284, 194974, - 194973, 194950, 194949, 194952, 194951, 0, 194953, 42080, 2529, 0, 0, 0, - 42083, 120678, 68398, 194957, 67619, 66367, 194958, 9634, 0, 9988, 0, - 41068, 0, 0, 65264, 0, 0, 917923, 0, 785, 8236, 194942, 9027, 68160, - 67623, 64383, 0, 925, 0, 0, 41985, 41071, 9586, 0, 41984, 9217, 0, 0, 0, - 9186, 2067, 4016, 0, 0, 381, 0, 0, 42077, 0, 194946, 5184, 42078, 194947, - 10810, 0, 4585, 19943, 5860, 67633, 0, 0, 812, 3615, 0, 5178, 44000, - 120548, 78807, 5188, 74287, 67629, 3605, 10692, 1166, 64429, 42639, 924, - 0, 67631, 0, 0, 2442, 10703, 78789, 67632, 917924, 12771, 12736, 12753, - 0, 73933, 67626, 42401, 0, 0, 127373, 42288, 12751, 0, 8542, 13145, 0, - 2468, 66706, 41294, 3626, 3883, 64388, 42479, 0, 41117, 0, 0, 0, 0, - 67624, 0, 1290, 0, 65585, 2715, 806, 65208, 41884, 917883, 7027, 64731, - 0, 0, 0, 66325, 3465, 2405, 9240, 0, 12756, 65259, 0, 0, 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, 0, 10622, 0, 0, - 0, 6566, 78659, 0, 73780, 0, 64864, 0, 78660, 0, 8284, 0, 0, 3589, 0, - 4035, 6492, 118981, 4265, 6642, 3977, 74186, 41778, 836, 119216, 2488, 0, + 3946, 195000, 10998, 0, 673, 194867, 64397, 0, 74599, 0, 0, 194977, + 194976, 2448, 194978, 10267, 8424, 2452, 120760, 194864, 8729, 0, 0, + 7845, 0, 0, 4408, 4122, 0, 11039, 8723, 194990, 194989, 119302, 731, + 119304, 119303, 2438, 64855, 119300, 119299, 1175, 0, 42135, 373, 119172, + 5396, 11457, 11521, 7723, 0, 0, 0, 41952, 0, 5273, 8248, 5269, 0, 5202, + 2404, 5267, 42823, 11291, 19915, 5277, 12963, 0, 6189, 4125, 1314, 12133, + 0, 118873, 1271, 0, 0, 66024, 41482, 3864, 74539, 0, 3879, 0, 12978, + 4166, 4574, 0, 7567, 7459, 0, 41390, 5384, 41882, 67647, 0, 0, 0, 0, + 41388, 0, 41392, 64288, 41387, 0, 8706, 5552, 0, 700, 0, 5553, 0, 7088, + 5356, 7499, 0, 66596, 0, 0, 0, 5554, 0, 12344, 10311, 0, 6665, 0, 0, + 7618, 8517, 11455, 0, 64632, 66017, 5555, 0, 0, 0, 0, 119204, 65033, + 9143, 6668, 195067, 195066, 195069, 656, 195071, 65037, 4577, 64624, 0, + 0, 0, 0, 4269, 73885, 917775, 42846, 917774, 950, 0, 0, 66580, 118895, + 66683, 10554, 917778, 119121, 0, 5098, 917770, 0, 119099, 5097, 4935, + 9848, 10381, 0, 0, 0, 3651, 0, 0, 0, 5102, 5101, 10269, 12983, 8138, 0, + 1932, 5100, 1439, 12093, 1247, 10034, 195064, 5099, 0, 1441, 42087, 3063, + 650, 0, 7838, 0, 195041, 195040, 119142, 9031, 195045, 195044, 9078, + 8545, 66356, 195048, 0, 9154, 9118, 0, 0, 2676, 7750, 0, 73812, 6190, + 8599, 195053, 0, 10795, 9857, 7014, 9858, 195033, 0, 12129, 0, 8481, 0, + 6202, 195035, 10920, 195037, 5203, 195039, 195038, 5108, 5107, 65818, + 66019, 9762, 0, 5541, 74772, 0, 12613, 5284, 6657, 207, 0, 4275, 74819, + 854, 68147, 74381, 0, 0, 5103, 0, 64348, 41368, 0, 488, 0, 0, 0, 10157, + 0, 43034, 11438, 0, 0, 0, 118839, 41771, 5106, 6669, 8504, 65154, 195025, + 41367, 5105, 195030, 195029, 6476, 5104, 0, 304, 3176, 0, 0, 932, 0, + 6567, 238, 74522, 195011, 195010, 19905, 120577, 195015, 120187, 41044, + 67640, 0, 64814, 9912, 65939, 10670, 74093, 13273, 0, 12552, 195019, + 8803, 309, 6622, 8151, 10858, 194596, 67636, 0, 12568, 0, 12553, 0, + 43275, 6950, 9712, 0, 0, 0, 65165, 0, 0, 66466, 0, 0, 0, 66725, 6191, + 11351, 10437, 11316, 67634, 0, 0, 41754, 67635, 9370, 2720, 194975, 0, + 8232, 118817, 0, 3222, 0, 0, 0, 66663, 0, 0, 10834, 0, 0, 65732, 0, 0, + 119579, 0, 195020, 0, 7781, 41383, 64568, 0, 120738, 12077, 0, 0, 0, + 42396, 0, 3475, 0, 2479, 0, 3632, 0, 10698, 0, 3648, 194960, 74844, + 67639, 3636, 67894, 3650, 8837, 65229, 1843, 42283, 0, 41562, 0, 74548, + 0, 3640, 0, 42321, 7284, 194974, 194973, 194950, 194949, 194952, 194951, + 0, 194953, 42080, 2529, 0, 0, 0, 42083, 194955, 194606, 194957, 67619, + 66367, 194958, 9634, 0, 9988, 0, 41068, 0, 0, 65264, 0, 0, 917923, 0, + 785, 8236, 194942, 9027, 68160, 67623, 64383, 0, 925, 0, 0, 41985, 41071, + 9586, 0, 41984, 9217, 0, 0, 0, 9186, 64580, 4016, 0, 0, 381, 0, 0, 42077, + 0, 194946, 5184, 42078, 194947, 10810, 0, 4585, 19943, 5860, 67633, 0, 0, + 812, 3615, 0, 5178, 194929, 120548, 120506, 5188, 74287, 67629, 3605, + 10692, 1166, 64429, 42639, 924, 0, 67631, 0, 0, 2442, 10703, 194940, + 67632, 0, 12771, 12736, 12753, 0, 73933, 67626, 42401, 0, 0, 0, 42288, + 12751, 0, 8542, 13145, 0, 2468, 66706, 41294, 3626, 3883, 64388, 42479, + 0, 41117, 0, 0, 0, 0, 67624, 0, 1290, 0, 65585, 2715, 806, 0, 41884, 0, + 7027, 64731, 0, 0, 0, 66325, 3465, 2405, 9240, 0, 12756, 65259, 0, 0, + 12752, 5833, 1432, 0, 41883, 73912, 9799, 0, 41886, 2480, 0, 43219, 0, + 6494, 5537, 0, 0, 0, 0, 1211, 0, 0, 0, 118832, 12318, 0, 0, 0, 10622, 0, + 0, 0, 6566, 0, 0, 73780, 0, 64864, 0, 194588, 0, 8284, 0, 0, 3589, 0, + 4035, 6492, 0, 4265, 6642, 3977, 74186, 41778, 836, 119216, 2488, 0, 4582, 0, 0, 41777, 12926, 0, 7528, 10550, 0, 0, 0, 0, 0, 1374, 64878, - 119014, 0, 42389, 41374, 0, 0, 78492, 41377, 0, 0, 400, 12597, 120586, 0, - 0, 6661, 0, 64827, 0, 73817, 390, 0, 74755, 0, 3473, 7718, 0, 0, 0, - 55285, 0, 0, 0, 11969, 0, 0, 6365, 1887, 6763, 0, 8080, 7006, 0, 0, 6757, - 0, 1544, 0, 6766, 64677, 120716, 0, 6146, 0, 771, 0, 0, 12812, 13168, - 42272, 12200, 917927, 7904, 0, 953, 12917, 0, 12300, 0, 11491, 9724, - 10341, 0, 9524, 7490, 11389, 7489, 3379, 0, 7487, 0, 471, 7484, 7482, - 6753, 7480, 7479, 7478, 7477, 6501, 7475, 6918, 7473, 7472, 2474, 7470, - 7468, 10232, 10615, 10213, 0, 120222, 10049, 78884, 3544, 0, 6017, 65311, - 0, 120216, 13306, 10533, 7870, 73949, 7625, 0, 120544, 0, 0, 0, 0, 0, 0, - 19961, 2472, 42665, 120699, 0, 6019, 4256, 120776, 74380, 0, 42675, - 42658, 12845, 0, 0, 65138, 119355, 67862, 0, 65671, 120000, 120008, 8066, - 7678, 74865, 0, 0, 0, 0, 7186, 0, 120555, 0, 445, 120566, 0, 0, 0, 8330, - 0, 0, 42797, 0, 120215, 0, 3902, 0, 1770, 0, 0, 1560, 120209, 194972, - 4584, 73843, 0, 11712, 10866, 118928, 1118, 0, 0, 0, 1081, 7436, 68420, - 7252, 0, 5996, 0, 4903, 0, 41386, 5162, 119189, 1330, 0, 42848, 0, 12047, - 41384, 0, 0, 1848, 4334, 6324, 41975, 64777, 10674, 12308, 12186, 0, 0, - 0, 12715, 0, 0, 0, 2018, 66672, 41979, 66685, 119157, 0, 0, 0, 126984, 0, - 9334, 0, 127310, 0, 7975, 0, 77957, 0, 66621, 4884, 66597, 0, 0, 0, 6313, - 65513, 0, 0, 0, 0, 2345, 43697, 463, 0, 0, 119607, 3117, 5460, 0, 0, 0, - 0, 42279, 194577, 0, 78415, 0, 0, 0, 13248, 0, 0, 0, 0, 0, 0, 5663, 0, 0, - 0, 0, 2482, 1471, 0, 0, 42247, 12378, 73925, 127233, 0, 12374, 0, 0, 0, - 0, 2460, 0, 11944, 12376, 0, 64679, 0, 12380, 10557, 64473, 5870, 0, - 2024, 0, 0, 0, 539, 0, 0, 0, 3853, 65180, 0, 120796, 120245, 0, 0, 8659, - 0, 12474, 0, 9503, 194969, 2478, 0, 4162, 0, 4260, 12953, 0, 120089, - 12470, 0, 74189, 2742, 12476, 11798, 10946, 0, 5000, 0, 0, 0, 0, 8213, - 74017, 7771, 6161, 0, 6709, 0, 78885, 0, 194892, 120582, 78547, 0, 10301, - 10333, 10397, 0, 0, 73791, 0, 0, 0, 0, 0, 4014, 12842, 73952, 12015, 0, - 8275, 3893, 0, 0, 127555, 7221, 42147, 0, 74550, 74465, 64747, 118841, 0, - 12516, 4444, 0, 119017, 74537, 10892, 8231, 0, 6473, 41968, 78388, 41973, - 3591, 41969, 0, 2453, 0, 0, 64705, 0, 0, 10349, 10413, 43591, 41962, - 3202, 74353, 0, 8316, 0, 0, 0, 687, 0, 0, 0, 1840, 0, 68671, 119809, - 4883, 285, 4723, 77927, 0, 4459, 74577, 0, 41720, 11089, 240, 19906, 0, - 42323, 0, 9743, 120232, 13134, 0, 0, 0, 0, 0, 42634, 0, 43437, 3081, - 11463, 120230, 0, 0, 10445, 0, 0, 66717, 2614, 9125, 119023, 1729, 0, - 120236, 65221, 63883, 43334, 64852, 0, 120235, 66201, 0, 66578, 5001, - 41879, 74427, 4121, 5003, 884, 66700, 63879, 4943, 5150, 73889, 74182, 0, - 643, 3086, 0, 42448, 42299, 58, 0, 0, 120083, 63873, 8491, 0, 0, 0, 4530, - 42409, 0, 194575, 2721, 120074, 119096, 19929, 0, 194574, 0, 4242, 4264, - 120077, 0, 66179, 42412, 65941, 13114, 64522, 10740, 3094, 0, 9754, - 119102, 4437, 73948, 0, 0, 55280, 42174, 194925, 42430, 0, 0, 42355, - 66026, 4306, 41380, 68432, 0, 0, 66667, 127309, 0, 0, 42200, 42566, 0, 0, - 5088, 6948, 0, 8524, 0, 0, 12385, 0, 0, 0, 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, 0, 0, 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, 0, 13000, 1351, 0, 8698, 12665, 0, - 1930, 0, 78229, 12427, 66514, 0, 13031, 0, 63901, 0, 3657, 0, 65202, - 6000, 119206, 12426, 0, 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, 0, 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, 0, 0, 0, 9680, 0, 120623, 561, 12159, 195, 78508, - 41501, 0, 42031, 5719, 7172, 42687, 8368, 0, 41499, 0, 0, 42242, 41498, - 917794, 42025, 78567, 65805, 42463, 0, 2924, 0, 120510, 0, 0, 119213, - 73941, 0, 42330, 917784, 3969, 0, 0, 7169, 1992, 9652, 73977, 7246, - 42086, 917790, 917789, 0, 0, 0, 0, 0, 327, 0, 9042, 917777, 917776, - 65148, 12433, 917781, 127276, 917779, 12431, 8668, 12434, 0, 917782, - 5999, 0, 7712, 12432, 0, 43653, 1726, 1015, 0, 8212, 0, 0, 42423, 119066, - 0, 0, 66709, 0, 8811, 927, 0, 0, 12436, 0, 42021, 0, 0, 1299, 12240, - 42350, 65143, 0, 195016, 0, 78197, 11348, 0, 78037, 0, 0, 0, 19914, - 12179, 0, 9648, 194923, 63836, 63832, 917773, 10967, 63816, 2594, 3444, - 63817, 64651, 0, 41503, 0, 11265, 0, 0, 194922, 0, 5664, 3972, 0, 0, 0, - 917766, 12416, 917764, 119608, 10816, 917769, 917768, 12418, 74111, 3882, - 8532, 917771, 1573, 0, 119847, 4596, 66339, 12417, 66001, 65343, 194782, - 12414, 8287, 68219, 195017, 68108, 1143, 119169, 0, 12415, 6626, 42763, - 0, 118884, 9021, 120783, 0, 11724, 0, 0, 127104, 194794, 0, 0, 8027, - 10997, 9171, 12741, 11400, 74197, 194799, 0, 194798, 0, 0, 0, 127523, - 120190, 194773, 67608, 194772, 42368, 0, 7715, 3881, 41487, 12118, 42514, - 68651, 0, 0, 3009, 41476, 41489, 69825, 3007, 1448, 3018, 194809, 3889, + 119014, 0, 42389, 41374, 0, 0, 0, 41377, 0, 0, 400, 12597, 0, 0, 0, 6661, + 0, 64827, 0, 73817, 390, 0, 74755, 0, 3473, 7718, 0, 0, 0, 0, 0, 0, 0, + 11969, 0, 0, 8004, 1887, 0, 0, 8080, 7006, 0, 0, 0, 0, 1544, 0, 0, 64677, + 120716, 0, 6146, 0, 771, 0, 0, 12812, 13168, 42272, 12200, 917927, 7904, + 0, 953, 12917, 0, 12300, 0, 11491, 9724, 10341, 0, 9524, 7490, 11389, + 7489, 3379, 0, 7487, 0, 471, 7484, 7482, 7481, 7480, 7479, 7478, 7477, + 6501, 7475, 6918, 7473, 7472, 2474, 7470, 7468, 10232, 10615, 10213, 0, + 120222, 10049, 0, 3544, 0, 6017, 65311, 0, 0, 13306, 10533, 7870, 73949, + 7625, 0, 120544, 0, 0, 0, 0, 0, 0, 19961, 2472, 0, 120699, 0, 6019, 4256, + 120776, 74380, 0, 73847, 73844, 12845, 0, 0, 65138, 119355, 67862, 0, 0, + 120000, 120008, 8066, 7678, 74865, 0, 0, 0, 0, 7186, 0, 120555, 0, 445, + 120566, 0, 0, 0, 8330, 0, 0, 42797, 0, 120215, 0, 3902, 0, 1770, 0, 0, + 1560, 120209, 0, 4584, 73843, 0, 11712, 10866, 0, 1118, 0, 0, 0, 1081, + 7436, 0, 7252, 0, 5996, 0, 4903, 0, 41386, 5162, 119189, 1330, 0, 64530, + 0, 12047, 41384, 0, 0, 1848, 4334, 0, 41975, 64777, 10674, 12308, 0, 0, + 0, 0, 12715, 0, 0, 0, 2018, 66672, 41979, 66685, 119157, 0, 0, 0, 126984, + 0, 9334, 0, 0, 0, 7975, 0, 0, 0, 66621, 4884, 66597, 0, 0, 0, 6313, + 65513, 0, 0, 0, 0, 2345, 0, 463, 0, 0, 119607, 3117, 5460, 0, 0, 0, 0, + 42279, 194577, 0, 0, 0, 0, 0, 13248, 0, 0, 0, 0, 0, 0, 5663, 0, 0, 0, 0, + 2482, 1471, 0, 0, 42247, 12378, 73925, 0, 0, 12374, 0, 0, 0, 0, 2460, 0, + 11944, 12376, 0, 64679, 0, 12380, 10557, 64473, 5870, 0, 2024, 0, 0, 0, + 539, 0, 0, 0, 3853, 65180, 0, 120796, 120245, 0, 0, 8659, 0, 12474, 0, + 9503, 194969, 2478, 0, 4162, 0, 4260, 12953, 0, 120089, 12470, 0, 74189, + 2742, 12476, 11798, 10946, 0, 5000, 0, 0, 0, 0, 8213, 74017, 7771, 6161, + 0, 0, 0, 0, 0, 0, 120582, 0, 0, 10301, 10333, 10397, 0, 0, 73791, 0, 0, + 0, 0, 0, 4014, 12842, 73952, 12015, 0, 8275, 3893, 0, 0, 0, 7221, 42147, + 0, 74550, 74465, 64747, 118841, 0, 12516, 0, 0, 119017, 74537, 10892, + 8231, 0, 6473, 41968, 0, 41973, 3591, 41969, 0, 2453, 0, 0, 0, 0, 0, + 10349, 10413, 43591, 41962, 3202, 74353, 0, 8316, 0, 0, 0, 687, 0, 0, 0, + 1840, 0, 0, 119809, 4883, 285, 4723, 0, 0, 4459, 74577, 0, 41720, 11089, + 240, 19906, 0, 119248, 0, 9743, 120232, 13134, 0, 0, 0, 0, 0, 42634, 0, + 0, 3081, 11463, 120230, 0, 0, 10445, 0, 0, 66717, 2614, 9125, 119023, + 1729, 0, 120236, 65221, 63883, 43334, 64852, 0, 120235, 66201, 0, 66578, + 5001, 41879, 0, 4121, 5003, 884, 66700, 63879, 4943, 5150, 73889, 74182, + 0, 643, 3086, 0, 42448, 42299, 58, 0, 0, 120083, 63873, 8491, 0, 0, 0, + 4530, 42409, 0, 0, 2721, 120074, 119096, 19929, 0, 194574, 0, 4242, 4264, + 0, 0, 66179, 42412, 65941, 13114, 64522, 10740, 3094, 0, 9754, 119102, + 4437, 73948, 0, 0, 65179, 42174, 194925, 42430, 0, 0, 42355, 66026, 4306, + 41380, 0, 0, 0, 66667, 0, 0, 0, 120578, 42566, 0, 0, 5088, 6948, 0, 8524, + 0, 0, 12385, 0, 0, 0, 1386, 65034, 11480, 6116, 65039, 65038, 12392, + 65036, 8064, 0, 12101, 5822, 119004, 0, 710, 0, 11663, 1666, 42091, + 119657, 12383, 0, 42092, 0, 4289, 0, 63896, 12061, 42096, 0, 3362, 12377, + 0, 0, 0, 7461, 73901, 1244, 331, 73786, 12683, 10662, 0, 8112, 0, 65852, + 0, 12379, 0, 120818, 41964, 0, 63843, 12381, 41965, 0, 65866, 4327, 0, + 63840, 0, 41220, 13032, 0, 584, 12933, 43177, 12373, 0, 13000, 1351, 0, + 8698, 12665, 0, 1930, 0, 0, 12427, 0, 0, 13031, 0, 0, 0, 3657, 0, 65202, + 6000, 0, 12426, 0, 0, 41740, 12428, 41283, 41916, 119210, 0, 0, 12429, + 9695, 0, 7562, 0, 5170, 0, 41755, 676, 0, 0, 66664, 74427, 0, 3536, 0, + 9752, 0, 6162, 0, 0, 10113, 41829, 65886, 5159, 12422, 41832, 439, 43077, + 0, 120532, 74549, 11796, 40970, 41830, 0, 917799, 8308, 917797, 917796, + 0, 67864, 917801, 917800, 12336, 4135, 0, 341, 2727, 4129, 3539, 0, + 63861, 0, 7913, 0, 63859, 4131, 63868, 0, 63867, 4133, 11371, 210, 4600, + 0, 74560, 4137, 8082, 0, 119062, 0, 0, 4591, 0, 0, 0, 9680, 0, 120623, + 561, 12159, 195, 0, 41501, 0, 42031, 5719, 7172, 0, 8368, 0, 41499, 0, 0, + 42242, 41498, 917794, 42025, 0, 65805, 42463, 0, 2924, 0, 120510, 0, 0, + 119213, 73941, 0, 42330, 917784, 3969, 0, 0, 7169, 1992, 9652, 73977, + 7246, 42086, 917790, 917789, 0, 0, 0, 0, 0, 327, 0, 9042, 917777, 917776, + 65148, 12433, 917781, 917780, 917779, 12431, 8668, 12434, 0, 917782, + 5999, 0, 7712, 12432, 0, 0, 1726, 1015, 0, 8212, 0, 0, 42423, 119066, 0, + 0, 66709, 0, 8811, 927, 0, 0, 12436, 0, 42021, 0, 0, 1299, 12240, 42350, + 65143, 0, 195016, 0, 0, 11348, 0, 0, 0, 0, 0, 19914, 12179, 0, 9648, 0, + 63836, 63832, 917773, 10967, 63816, 2594, 3444, 63817, 64651, 0, 41503, + 0, 11265, 0, 0, 0, 0, 5664, 3972, 0, 0, 0, 917766, 12416, 917764, 119608, + 10816, 917769, 917768, 12418, 74111, 3882, 8532, 917771, 1573, 0, 119847, + 4596, 66339, 12417, 66001, 65343, 194782, 12414, 8287, 0, 0, 68108, 1143, + 119169, 0, 12415, 6626, 42763, 0, 118884, 9021, 120783, 0, 11724, 0, 0, + 127104, 194794, 0, 0, 8027, 10997, 9171, 12741, 11400, 74197, 194799, 0, + 0, 0, 0, 0, 0, 120190, 194773, 0, 194772, 42368, 0, 7715, 3881, 41487, + 12118, 42514, 0, 0, 0, 3009, 41476, 41489, 0, 3007, 1448, 3018, 0, 3889, 8521, 5083, 5082, 119859, 120184, 8519, 0, 3014, 5081, 65853, 0, 0, - 120183, 78219, 5079, 64802, 42210, 4597, 65532, 78444, 120185, 12371, 0, - 8407, 0, 10805, 8518, 10779, 120188, 0, 0, 12367, 42170, 0, 0, 629, 1924, - 0, 12037, 74366, 5987, 8462, 8005, 12365, 63933, 127370, 120815, 12369, - 10649, 0, 5077, 127108, 10880, 63927, 5075, 0, 0, 65075, 0, 11007, 0, - 66659, 0, 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, 0, 0, 55236, 0, 66461, 5177, 41324, 12055, - 8722, 0, 41327, 0, 66695, 4114, 409, 4383, 8900, 8948, 41325, 0, 721, - 10182, 9108, 0, 0, 119185, 42229, 194912, 0, 5998, 0, 42353, 74825, 0, - 12587, 0, 78571, 0, 0, 0, 41576, 42215, 78570, 119207, 0, 8578, 5995, - 7573, 41575, 74789, 74752, 63944, 63949, 64767, 2670, 4167, 0, 11723, 0, - 74120, 0, 65076, 938, 43414, 73854, 11737, 9721, 0, 0, 0, 11742, 0, 0, - 11493, 12334, 0, 4153, 12302, 10793, 5250, 12407, 11978, 4404, 9189, - 12401, 42007, 5775, 6759, 65806, 43997, 0, 42002, 12404, 0, 0, 4940, - 12410, 7683, 1167, 73729, 4983, 0, 861, 0, 0, 0, 0, 65577, 43370, 0, 0, - 11956, 0, 0, 0, 9616, 6631, 0, 12816, 74583, 42218, 12710, 68674, 12721, - 4101, 66185, 0, 5992, 7616, 0, 0, 12577, 0, 0, 853, 42693, 0, 0, 0, 5016, - 43535, 63893, 42835, 9491, 917913, 0, 917914, 0, 12712, 917919, 0, 65060, + 120183, 0, 5079, 64802, 65095, 4597, 65532, 0, 0, 12371, 0, 8407, 0, + 10805, 8518, 10779, 120188, 0, 0, 12367, 42170, 0, 0, 629, 1924, 0, + 12037, 74366, 5987, 8462, 8005, 12365, 66689, 0, 120815, 12369, 10649, 0, + 5077, 127108, 10880, 63927, 5075, 0, 0, 65075, 0, 11007, 0, 66659, 0, 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, 0, + 5276, 43021, 0, 0, 0, 0, 66461, 5177, 41324, 12055, 8722, 0, 41327, 0, + 66695, 4114, 409, 4383, 8900, 8948, 41325, 0, 721, 10182, 9108, 0, 0, + 119185, 0, 0, 0, 5998, 0, 42353, 74825, 0, 12587, 0, 0, 0, 0, 0, 41576, + 74121, 0, 119207, 0, 8578, 5995, 7573, 41575, 74789, 74752, 63944, 63949, + 0, 2670, 4167, 0, 11723, 0, 74120, 0, 65076, 938, 73857, 73854, 11737, + 9721, 0, 0, 0, 11742, 0, 0, 11493, 12334, 0, 4153, 12302, 10793, 5250, + 12407, 11978, 4404, 9189, 12401, 42007, 5775, 42005, 65806, 0, 0, 42002, + 12404, 0, 0, 4940, 12410, 7683, 1167, 0, 4983, 0, 861, 0, 0, 0, 0, 65577, + 0, 0, 0, 11956, 0, 0, 0, 9616, 6631, 0, 12816, 74583, 0, 12710, 0, 12721, + 4101, 66185, 0, 5992, 7616, 0, 0, 12577, 0, 0, 853, 0, 0, 0, 0, 5016, + 43535, 0, 42835, 9491, 917913, 0, 917914, 0, 12712, 917919, 0, 65060, 120797, 9900, 0, 0, 194919, 0, 0, 0, 64778, 12585, 10565, 0, 12177, 0, 0, - 0, 77824, 0, 4900, 0, 12878, 0, 8984, 4119, 74768, 8971, 78593, 43113, - 9702, 78594, 11025, 9245, 13048, 4927, 4138, 74185, 194921, 0, 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, 0, 5993, - 2819, 0, 12706, 77840, 1893, 7266, 63915, 7264, 7265, 0, 1363, 0, 63997, - 63910, 63996, 3077, 0, 0, 1512, 0, 12589, 41479, 0, 0, 43339, 0, 9836, - 120727, 0, 41481, 43335, 7832, 42343, 3090, 43337, 817, 1664, 1850, 0, - 3079, 11340, 42408, 42447, 194704, 120020, 42307, 12386, 42304, 0, 0, - 12389, 0, 194694, 41996, 11526, 63985, 5864, 1147, 63992, 42887, 1987, 0, - 5480, 7858, 11653, 4116, 12391, 66193, 0, 4939, 12384, 0, 0, 41686, - 63905, 119601, 194688, 0, 0, 12649, 0, 0, 8247, 507, 91, 2042, 120775, - 43643, 194689, 66028, 10036, 41844, 119813, 774, 119831, 0, 119815, 5994, - 12539, 0, 78375, 120597, 119833, 0, 119600, 0, 0, 7719, 6026, 2486, 0, - 119808, 162, 0, 65219, 41073, 9687, 41681, 6304, 119812, 66196, 0, 5262, - 0, 55233, 12681, 42379, 0, 7534, 12219, 0, 127528, 42810, 10492, 0, 0, 0, - 43119, 0, 120753, 12403, 2500, 195013, 0, 4899, 0, 0, 0, 74113, 2343, - 4103, 19946, 74112, 77851, 13112, 0, 0, 12859, 0, 120148, 66369, 5861, 0, - 11999, 12400, 0, 0, 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, 0, 0, - 10138, 0, 0, 8897, 0, 0, 8357, 4124, 77862, 65836, 120641, 0, 77859, 0, - 0, 1123, 963, 41553, 10120, 12405, 120150, 0, 398, 13278, 9723, 6366, - 120311, 7945, 0, 4402, 9970, 12402, 0, 42392, 1305, 12408, 0, 44007, 0, - 0, 41464, 12411, 12969, 120824, 41465, 0, 8528, 1575, 0, 63955, 165, - 3024, 41467, 119163, 0, 9093, 0, 9147, 0, 63958, 0, 9148, 9692, 4096, 53, - 73776, 6750, 195018, 0, 9594, 0, 0, 43527, 0, 727, 0, 0, 5805, 0, 6726, - 0, 42176, 12370, 11655, 119095, 10591, 12364, 0, 12372, 120642, 120307, - 0, 0, 0, 12366, 10963, 6066, 1329, 0, 3052, 9220, 0, 64478, 0, 10803, - 4132, 120306, 68474, 0, 0, 0, 74837, 0, 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, 120154, 9564, 0, - 0, 73866, 0, 0, 2487, 67614, 3121, 1804, 3311, 67615, 0, 78302, 12220, - 67616, 120598, 0, 0, 68200, 6675, 0, 0, 67592, 120685, 0, 64771, 1198, - 9132, 0, 64619, 510, 64663, 0, 0, 4561, 2101, 1398, 0, 0, 74034, 41569, - 0, 11406, 8167, 12127, 0, 840, 0, 0, 0, 6967, 0, 0, 9796, 0, 333, 0, 0, - 8144, 0, 0, 0, 12406, 0, 19931, 119089, 6678, 7769, 0, 12621, 0, 0, - 10227, 4764, 43101, 9981, 0, 40986, 4127, 66487, 0, 42202, 12754, 195022, - 0, 0, 0, 67594, 2048, 12944, 4050, 67595, 917967, 43102, 10581, 12985, - 4533, 195021, 74003, 6490, 0, 12038, 0, 0, 120704, 65461, 9798, 0, 0, - 1948, 119007, 0, 952, 0, 0, 0, 120802, 6449, 9494, 120313, 0, 43098, - 4843, 8142, 64160, 4098, 64170, 0, 0, 3436, 0, 0, 12817, 67597, 6676, - 3930, 66708, 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, 0, 63841, 9613, - 9001, 4526, 11274, 67601, 64520, 64210, 6664, 78704, 42056, 10228, 64957, - 11281, 0, 64213, 1469, 66640, 65381, 42197, 4988, 42372, 0, 9598, 904, - 352, 42225, 1451, 8061, 8453, 4134, 0, 74847, 66576, 0, 0, 10520, 8575, - 9960, 1201, 0, 12846, 0, 0, 11919, 64962, 0, 43739, 127281, 8511, 9460, - 823, 11587, 12305, 0, 64695, 0, 12387, 1253, 13183, 65766, 500, 42783, - 65765, 64208, 64369, 65760, 65761, 119585, 11606, 64784, 11702, 66498, - 9821, 0, 0, 5152, 11048, 7533, 68366, 64410, 0, 0, 4323, 120062, 0, 0, - 127052, 42587, 42214, 41394, 0, 4763, 4112, 118935, 0, 5260, 43143, 0, - 326, 120131, 68423, 0, 10771, 2876, 74074, 194835, 194924, 41398, 7382, - 9802, 127077, 127076, 453, 41396, 120524, 42720, 12140, 9572, 0, 7003, - 194883, 42334, 7704, 0, 0, 43144, 4123, 8494, 43146, 9977, 0, 0, 65759, - 10765, 64061, 4465, 9808, 64056, 65582, 4126, 0, 9521, 9589, 64755, 0, - 64020, 0, 10464, 0, 0, 194869, 64514, 11528, 64024, 0, 679, 64013, 0, - 5850, 758, 7536, 0, 0, 41441, 10693, 64006, 0, 64005, 10541, 119019, 0, - 64660, 0, 119050, 0, 0, 1139, 43298, 64027, 64029, 8970, 0, 64000, 0, - 10774, 0, 42201, 12421, 194876, 0, 1852, 3057, 0, 73744, 64034, 64039, 0, - 0, 0, 0, 0, 7645, 12854, 74338, 3496, 0, 0, 0, 9102, 627, 0, 6158, 8327, - 74553, 66632, 12419, 13309, 11570, 0, 19960, 11696, 0, 1018, 118970, - 194909, 0, 1682, 194896, 194911, 42756, 6765, 194906, 0, 0, 73814, 11412, - 6768, 10728, 194830, 119010, 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, 0, 42240, 0, 0, 42864, 0, 64667, 41868, 1184, 0, 815, - 11484, 127535, 67840, 0, 0, 0, 0, 10986, 64683, 0, 0, 0, 0, 0, 9879, 0, - 0, 4158, 0, 68166, 0, 0, 0, 0, 0, 332, 118808, 0, 5142, 2407, 0, 42199, - 0, 0, 74373, 0, 55217, 0, 63870, 43163, 0, 0, 119081, 42867, 1834, 0, 0, - 69817, 10940, 65249, 119040, 8662, 0, 0, 2652, 120527, 11539, 10784, - 195093, 67674, 0, 0, 0, 0, 74562, 917505, 1828, 74474, 120327, 78620, - 8531, 12499, 6280, 12324, 118854, 65238, 68374, 4832, 65573, 0, 6279, - 12508, 12904, 12502, 9161, 0, 1620, 0, 3601, 195094, 0, 0, 609, 11555, 0, - 12496, 0, 74181, 4343, 12505, 0, 0, 0, 11377, 239, 0, 637, 0, 0, 42671, - 0, 0, 0, 43565, 127082, 0, 12696, 0, 0, 0, 12929, 0, 712, 0, 4197, 0, - 42818, 0, 0, 120490, 0, 0, 1506, 43562, 0, 0, 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, 917837, 0, 0, - 0, 0, 0, 0, 3178, 0, 0, 0, 0, 9080, 127000, 120352, 0, 68209, 0, 11082, - 0, 5699, 195100, 66000, 9488, 65166, 119112, 0, 0, 0, 0, 0, 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, 0, 120811, 0, 12468, 8607, 1008, 0, - 10092, 0, 917842, 67855, 55257, 73771, 1766, 11282, 11996, 1820, 4547, 0, - 0, 0, 0, 13223, 0, 64595, 0, 0, 0, 4345, 12616, 0, 0, 0, 74467, 0, 0, 0, - 5382, 0, 0, 0, 119060, 64953, 5406, 19920, 0, 66510, 3590, 0, 1130, 0, 0, - 42016, 11823, 43023, 0, 118896, 7742, 0, 13280, 0, 9326, 73826, 5310, - 74812, 0, 119962, 8959, 43589, 6747, 66723, 0, 8568, 0, 120496, 73816, - 120803, 0, 42670, 0, 11621, 12460, 0, 120631, 0, 43063, 74519, 0, 0, 0, + 0, 0, 0, 4900, 0, 0, 0, 8984, 4119, 0, 8971, 0, 43113, 9702, 0, 11025, + 9245, 13048, 4927, 4138, 0, 194921, 0, 12397, 0, 0, 13054, 12394, 0, 0, + 0, 13053, 0, 3948, 10781, 1546, 0, 5010, 1680, 10507, 0, 0, 0, 0, 0, 0, + 7267, 0, 74833, 0, 5993, 2819, 0, 12706, 0, 1893, 7266, 63915, 7264, + 7265, 0, 1363, 0, 63997, 63910, 63996, 3077, 0, 0, 1512, 0, 12589, 41479, + 0, 0, 43339, 0, 9836, 120727, 0, 41481, 43335, 7832, 42343, 3090, 43337, + 817, 1664, 1850, 0, 3079, 11340, 42408, 42447, 0, 120020, 42307, 12386, + 42304, 0, 0, 12389, 0, 0, 41996, 11526, 63985, 5864, 1147, 66688, 42887, + 1987, 0, 5480, 7858, 11653, 4116, 12391, 66193, 0, 4939, 12384, 0, 0, + 41686, 63905, 119601, 0, 0, 0, 0, 0, 0, 8247, 507, 91, 2042, 120775, 0, + 0, 66028, 10036, 41844, 119830, 774, 119831, 0, 119815, 5994, 12539, 0, + 119817, 120597, 119833, 0, 0, 0, 0, 7719, 6026, 2486, 0, 0, 162, 0, + 65219, 41073, 9687, 41681, 6304, 119812, 66196, 0, 5262, 0, 66658, 12681, + 42379, 0, 7534, 12219, 0, 0, 42810, 10492, 0, 0, 0, 43119, 0, 120753, + 12403, 2500, 195013, 0, 4899, 0, 0, 0, 74113, 2343, 4103, 19946, 74112, + 0, 13112, 0, 0, 12859, 0, 0, 66369, 5861, 0, 11999, 12400, 0, 0, 12645, + 5146, 11320, 0, 67612, 65040, 0, 64184, 12974, 64183, 67613, 120645, + 5147, 0, 0, 74524, 0, 1928, 0, 0, 5991, 3445, 67609, 4976, 64176, 0, + 67610, 8241, 0, 0, 4206, 0, 0, 0, 0, 0, 10138, 0, 0, 8897, 0, 0, 8357, + 4124, 0, 65836, 120641, 0, 0, 0, 0, 1123, 963, 41553, 10120, 12405, 0, 0, + 398, 13278, 9723, 41551, 120311, 7945, 0, 4402, 10896, 12402, 0, 42392, + 1305, 12408, 0, 0, 0, 0, 41464, 12411, 12969, 120824, 41465, 0, 195017, + 1575, 0, 63955, 165, 3024, 41467, 119163, 0, 9093, 0, 9147, 0, 0, 0, + 9148, 9692, 4096, 53, 73776, 12368, 195018, 0, 9594, 0, 0, 43527, 0, 727, + 0, 0, 5805, 0, 0, 0, 42176, 12370, 11655, 119095, 10591, 12364, 0, 12372, + 120642, 0, 0, 0, 0, 12366, 10963, 6066, 1329, 0, 3052, 9220, 0, 64478, 0, + 10803, 4132, 0, 0, 0, 0, 0, 74837, 0, 1499, 0, 8055, 0, 63965, 0, 63962, + 74042, 8924, 43123, 5988, 3660, 63969, 11781, 63968, 8788, 1357, 64851, + 65743, 0, 8774, 0, 127086, 67618, 120172, 0, 1933, 0, 9564, 0, 0, 73866, + 0, 0, 2487, 67614, 3121, 1804, 3311, 67615, 0, 0, 12220, 67616, 120598, + 0, 0, 0, 6675, 0, 0, 67592, 120685, 0, 64771, 1198, 9132, 0, 64619, 510, + 64663, 0, 0, 4561, 7711, 1398, 0, 0, 74034, 41569, 0, 11406, 8167, 12127, + 0, 840, 0, 0, 0, 6967, 0, 0, 9796, 0, 333, 0, 0, 8144, 0, 0, 0, 12406, 0, + 0, 0, 6678, 7769, 0, 12621, 0, 0, 10227, 4764, 43101, 0, 0, 40986, 4127, + 66487, 0, 0, 12754, 195022, 0, 0, 0, 67594, 65609, 12944, 4050, 67595, 0, + 43102, 10581, 12985, 4533, 0, 0, 6490, 0, 12038, 0, 0, 120704, 65461, + 9798, 0, 0, 1948, 119007, 0, 952, 0, 0, 0, 120802, 6449, 9494, 0, 0, + 43098, 4843, 8142, 64160, 4098, 64170, 0, 0, 3436, 0, 0, 12817, 67597, + 6676, 3930, 66708, 0, 0, 67598, 0, 0, 0, 65591, 41581, 65916, 1453, 0, 0, + 0, 8500, 0, 120142, 73743, 120400, 4317, 120140, 0, 64676, 0, 0, 67606, + 119083, 0, 0, 13102, 0, 66003, 6672, 0, 0, 0, 0, 63841, 9613, 9001, 4526, + 11274, 67601, 64520, 64210, 6664, 0, 42056, 10228, 64957, 11281, 0, + 64213, 1469, 66640, 65381, 0, 4988, 42372, 0, 9598, 904, 352, 0, 1451, + 8061, 8453, 4134, 0, 74847, 67600, 0, 0, 10520, 8575, 0, 1201, 0, 12846, + 0, 0, 11919, 64962, 0, 74864, 0, 8511, 9460, 823, 11587, 12305, 0, 64695, + 0, 12387, 1253, 13183, 65766, 500, 42783, 65765, 64208, 64369, 65760, + 65761, 119585, 11606, 64784, 11702, 66498, 9821, 0, 0, 5152, 11048, 7533, + 120121, 64410, 0, 0, 4323, 120062, 0, 0, 0, 42587, 65339, 41394, 0, 4763, + 4112, 118935, 0, 5260, 43143, 0, 326, 120131, 0, 0, 10771, 2876, 194915, + 194835, 194924, 41398, 127079, 9802, 127077, 127076, 453, 41396, 120524, + 0, 12140, 9572, 0, 7003, 194883, 42334, 7704, 0, 0, 43144, 4123, 0, + 43146, 0, 0, 0, 65759, 10765, 64061, 4465, 9808, 64056, 65582, 4126, 0, + 9521, 9589, 64755, 0, 64020, 0, 10464, 0, 0, 194869, 64514, 11528, 64024, + 0, 679, 64013, 0, 5850, 758, 7536, 0, 0, 41441, 10693, 64006, 0, 64005, + 10541, 119019, 0, 64660, 0, 119050, 0, 0, 1139, 43298, 64027, 64029, + 8970, 0, 64000, 0, 10774, 0, 42522, 12421, 194876, 0, 1852, 3057, 0, + 73744, 64034, 64041, 0, 0, 0, 0, 0, 7645, 12854, 74338, 3496, 0, 0, 0, + 9102, 627, 0, 6158, 8327, 74553, 66632, 12419, 0, 11570, 0, 19960, 11696, + 0, 1018, 0, 194909, 0, 1682, 194896, 0, 42756, 12951, 194906, 0, 0, + 73814, 11412, 12563, 10728, 194830, 0, 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, 0, + 64483, 65693, 0, 0, 0, 0, 42240, 0, 0, 42864, 0, 64667, 41868, 1184, 0, + 815, 11484, 0, 67840, 0, 0, 0, 0, 0, 64683, 0, 0, 0, 0, 0, 9879, 0, 0, + 4158, 0, 68166, 0, 0, 0, 0, 0, 332, 118808, 0, 5142, 2407, 0, 0, 0, 0, + 74373, 0, 0, 0, 63870, 43163, 0, 0, 119081, 42867, 1834, 0, 0, 0, 10940, + 65249, 119040, 8662, 0, 0, 2652, 120527, 11539, 10784, 195093, 0, 0, 0, + 0, 0, 118858, 917505, 1828, 74474, 120327, 0, 8531, 12499, 6280, 12324, + 118854, 65238, 0, 4832, 65573, 0, 6279, 12508, 12904, 12502, 9161, 0, + 1620, 0, 3601, 0, 0, 0, 609, 11555, 0, 12496, 0, 74181, 4343, 12505, 0, + 0, 0, 11377, 239, 0, 637, 0, 0, 43029, 0, 0, 0, 43565, 127082, 0, 12696, + 0, 0, 0, 12929, 0, 712, 0, 4197, 0, 42818, 0, 0, 120490, 0, 0, 1506, + 43562, 0, 0, 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, 0, 42571, 0, 0, 0, 0, 0, 0, 0, 3178, 0, 0, 0, 0, 9080, + 127000, 0, 0, 0, 0, 11082, 0, 5699, 195100, 0, 9488, 65166, 119112, 0, 0, + 0, 0, 0, 0, 5265, 0, 0, 11487, 67858, 12464, 0, 43045, 0, 0, 43345, 0, + 10770, 118994, 43344, 465, 9829, 0, 74348, 0, 43346, 8116, 795, 0, 0, + 12462, 10930, 10831, 0, 118952, 64362, 0, 0, 120811, 0, 12468, 8607, + 1008, 0, 10092, 0, 917842, 67855, 0, 73771, 1766, 11282, 11996, 1820, + 4547, 0, 0, 0, 0, 13223, 0, 64595, 0, 0, 0, 4345, 12616, 0, 0, 0, 74467, + 0, 0, 0, 5382, 0, 0, 0, 119060, 64953, 5406, 19920, 0, 66510, 3590, 0, + 1130, 0, 0, 42016, 11823, 43023, 0, 118896, 7742, 0, 13280, 0, 9326, + 73826, 5310, 74812, 0, 119962, 8959, 43589, 74334, 66723, 0, 8568, 0, + 120496, 73816, 120803, 0, 0, 0, 11621, 12460, 0, 0, 0, 0, 74519, 0, 0, 0, 0, 0, 11689, 5410, 5783, 10468, 8403, 5400, 11594, 0, 0, 118990, 10491, 0, 64412, 0, 0, 5587, 42865, 64404, 8268, 4923, 65086, 8981, 12382, - 42133, 120755, 9706, 0, 0, 66610, 10461, 12103, 0, 8642, 0, 42766, 0, - 66566, 9983, 0, 119105, 0, 0, 0, 7398, 41515, 0, 11802, 8041, 1461, 910, - 119133, 0, 6749, 3658, 0, 120525, 0, 7617, 0, 12888, 0, 67668, 13143, 0, - 41514, 11097, 5703, 0, 41517, 41504, 41519, 10016, 64305, 0, 65864, 623, - 781, 670, 10660, 5769, 613, 7543, 120279, 477, 41083, 0, 0, 592, 1578, - 12459, 43449, 0, 0, 8225, 0, 654, 11345, 653, 652, 0, 647, 0, 633, - 120744, 0, 0, 12480, 43243, 0, 39, 12487, 0, 120529, 74199, 12482, 0, - 12489, 0, 3195, 5550, 0, 7897, 0, 1203, 74396, 1813, 64544, 41311, 12090, - 0, 2877, 0, 0, 1675, 0, 0, 0, 0, 10070, 10595, 0, 119077, 0, 0, 0, 0, 0, - 43244, 0, 0, 0, 119561, 0, 0, 0, 0, 0, 0, 0, 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, 64699, 2909, 68619, 44008, - 68627, 0, 11544, 10203, 9608, 0, 0, 11962, 0, 12507, 1196, 0, 0, 777, 0, - 4375, 65271, 67678, 0, 12198, 0, 64824, 0, 0, 9454, 63778, 8658, 42528, - 0, 2705, 917975, 41520, 0, 0, 11986, 7765, 42502, 8280, 0, 2701, 0, 0, - 5767, 0, 0, 9809, 8353, 63747, 66701, 63772, 0, 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, 0, 0, 0, 0, 74575, 0, 65719, 13083, 64574, 65012, 0, 1640, 12495, - 66691, 7624, 3138, 10996, 0, 1922, 0, 12498, 10987, 0, 0, 3894, 65543, 0, - 194842, 0, 493, 0, 43197, 1717, 4228, 479, 10303, 74020, 0, 917935, - 10335, 3520, 917932, 12490, 64315, 0, 127039, 12493, 6233, 42681, 1002, - 12491, 0, 64911, 127040, 2096, 65120, 0, 0, 0, 11611, 66228, 127041, - 66213, 63864, 66221, 66226, 66229, 13218, 66231, 66216, 8507, 66236, - 66211, 66218, 0, 66240, 78041, 66233, 8928, 0, 7909, 66234, 11605, 63759, - 0, 66208, 73999, 63799, 63803, 244, 11542, 12898, 12494, 73761, 12492, - 12669, 0, 0, 74153, 0, 0, 120680, 4882, 13040, 0, 8612, 4885, 74053, 0, - 13042, 4880, 64662, 2429, 1360, 248, 0, 63797, 0, 42358, 0, 7292, 0, - 63756, 42786, 66693, 0, 1870, 78040, 470, 78038, 78035, 78036, 0, 78034, - 4579, 0, 0, 12511, 74453, 12514, 0, 74579, 7239, 7001, 8623, 0, 0, 0, - 7378, 12512, 11615, 6104, 0, 0, 659, 6098, 0, 12234, 127307, 127067, - 8311, 12510, 41803, 13039, 127072, 12513, 10202, 12471, 0, 8747, 0, 0, 0, - 2323, 0, 2319, 77917, 12477, 77916, 2311, 0, 4415, 237, 6281, 0, 0, 0, - 2309, 1312, 8173, 0, 12469, 0, 78505, 64335, 10609, 0, 0, 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, - 0, 7948, 9236, 0, 0, 0, 10570, 43473, 6289, 10484, 0, 0, 11998, 12082, - 10924, 3147, 0, 120684, 12524, 0, 2310, 11818, 9381, 9382, 9379, 9380, + 42133, 120755, 9706, 0, 0, 66610, 10461, 12103, 0, 8642, 0, 42766, 0, 0, + 0, 0, 119105, 0, 0, 0, 8816, 41515, 0, 11802, 8041, 1461, 910, 119133, 0, + 0, 3658, 0, 120525, 0, 7617, 0, 12888, 0, 0, 13143, 0, 41514, 0, 5703, 0, + 41517, 41504, 41519, 10016, 64305, 0, 65864, 623, 781, 670, 10660, 5769, + 613, 7543, 120774, 477, 41083, 0, 0, 592, 1578, 12459, 0, 0, 0, 8225, 0, + 654, 11345, 653, 652, 0, 647, 0, 633, 120744, 0, 0, 12480, 74354, 0, 39, + 12487, 0, 120529, 74199, 12482, 0, 12489, 0, 3195, 5550, 0, 7897, 0, + 1203, 74396, 1813, 64544, 41311, 12090, 0, 2877, 0, 0, 1675, 0, 0, 0, 0, + 10070, 10595, 0, 119077, 0, 0, 0, 0, 0, 118827, 0, 0, 0, 119561, 0, 0, 0, + 0, 0, 0, 0, 120692, 0, 0, 270, 0, 10714, 0, 0, 0, 0, 0, 65372, 0, 74038, + 119558, 6273, 66679, 364, 9595, 0, 0, 0, 707, 0, 0, 9282, 66489, 224, 0, + 0, 9332, 4966, 0, 0, 0, 0, 3841, 0, 0, 10732, 0, 850, 4972, 0, 64699, + 2909, 0, 65309, 0, 0, 11544, 10203, 9608, 0, 0, 11962, 0, 12507, 1196, 0, + 0, 777, 0, 4375, 65271, 0, 0, 12198, 0, 64824, 0, 0, 9454, 63778, 8658, + 42528, 0, 2705, 917975, 41520, 0, 0, 11986, 7765, 42502, 8280, 0, 2701, + 0, 0, 5767, 0, 0, 9809, 8353, 63747, 66701, 63772, 0, 63745, 1748, 63770, + 0, 0, 0, 65542, 63766, 0, 3061, 0, 63764, 63789, 9067, 6096, 0, 7694, 0, + 7257, 63768, 3485, 12987, 0, 0, 0, 63807, 1591, 0, 0, 63783, 0, 0, 0, 0, + 0, 0, 74575, 0, 65719, 13083, 64574, 65012, 0, 1640, 12495, 66691, 7624, + 3138, 10996, 0, 1922, 0, 12498, 10987, 0, 0, 3894, 65543, 0, 194842, 0, + 493, 0, 43197, 1717, 4228, 479, 10303, 917934, 0, 917935, 10335, 3520, + 917932, 12490, 64315, 0, 127039, 12493, 6233, 64636, 1002, 12491, 0, + 64911, 127040, 0, 65120, 0, 0, 0, 11611, 66228, 127041, 66213, 63864, + 66221, 66226, 66229, 13218, 66231, 66216, 8507, 66236, 66211, 66218, 0, + 66240, 0, 66233, 8928, 0, 7909, 66234, 11605, 63759, 0, 66208, 73999, + 63799, 0, 244, 11542, 12898, 12494, 73761, 12492, 12669, 0, 0, 74153, 0, + 0, 120680, 4882, 13040, 0, 8612, 4885, 74053, 0, 13042, 4880, 64662, + 2429, 1360, 248, 0, 63797, 0, 63792, 0, 7292, 0, 63756, 42786, 66693, 0, + 1870, 917916, 470, 0, 0, 120306, 0, 0, 4579, 0, 0, 12511, 74453, 12514, + 0, 74579, 7239, 7001, 8623, 0, 0, 0, 0, 12512, 11615, 13041, 0, 0, 659, + 6098, 0, 12234, 0, 127067, 8311, 12510, 41803, 13039, 127072, 12513, + 10202, 12471, 0, 8747, 0, 0, 0, 2323, 0, 2319, 0, 12477, 0, 2311, 0, + 4415, 237, 6281, 0, 0, 0, 2309, 1312, 8173, 0, 12469, 0, 0, 64335, 10609, + 0, 0, 9397, 11524, 9395, 9396, 9393, 9394, 9391, 9392, 9389, 6209, 9387, + 9388, 4932, 9386, 9383, 9384, 0, 0, 65451, 8185, 0, 917832, 43024, 43336, + 74375, 2313, 0, 7948, 9236, 0, 0, 0, 10570, 0, 6289, 10484, 0, 0, 11998, + 12082, 10924, 3147, 0, 0, 12524, 0, 2310, 11818, 9381, 9382, 9379, 9380, 9377, 9378, 9375, 9376, 1683, 9374, 0, 9372, 12444, 0, 0, 13016, 8210, 0, - 42029, 11079, 12331, 43451, 42032, 8744, 726, 0, 0, 4155, 0, 0, 42030, - 5007, 12522, 43088, 0, 4951, 0, 127240, 0, 9922, 43309, 0, 12525, 0, - 12016, 65770, 9548, 67665, 403, 78230, 12503, 0, 0, 11030, 0, 0, 65691, - 63998, 1819, 10496, 0, 0, 119920, 0, 0, 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, 0, - 41052, 13084, 64766, 43217, 7803, 13222, 74165, 74782, 0, 8546, 11553, - 63995, 13177, 9043, 6303, 0, 498, 64471, 120324, 0, 12529, 8042, 0, 2344, - 12528, 8031, 2414, 0, 0, 3231, 0, 6422, 66512, 0, 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, 0, 119634, - 6503, 41110, 0, 1491, 0, 0, 0, 41061, 0, 0, 0, 65026, 41993, 41509, - 11045, 65028, 78602, 66476, 41108, 9738, 41995, 1075, 1958, 12535, 41992, - 41506, 0, 41687, 0, 120717, 0, 9940, 0, 7692, 0, 8008, 41131, 330, 8566, - 65083, 41133, 9816, 0, 12532, 78550, 78546, 3508, 127058, 43235, 0, - 127298, 69783, 78231, 6411, 12910, 78554, 66644, 13028, 6737, 12537, 0, - 0, 64136, 12536, 2350, 13029, 78233, 0, 0, 13030, 6702, 4527, 0, 12538, - 0, 0, 65599, 65717, 9966, 0, 4948, 12484, 4032, 0, 12623, 0, 6207, 0, - 6117, 65930, 8412, 0, 7438, 1296, 2325, 41511, 0, 10149, 74118, 0, 0, - 12481, 0, 12488, 0, 0, 41556, 64414, 118802, 2354, 0, 73766, 0, 6295, - 901, 41510, 7953, 0, 65032, 41513, 0, 11927, 66584, 78559, 78560, 78557, - 78558, 0, 78556, 848, 9868, 0, 6424, 78568, 119338, 78565, 74031, 78563, - 78564, 2352, 78572, 893, 64576, 11289, 1407, 0, 0, 13026, 6762, 78579, - 78580, 13023, 8903, 9777, 66715, 1871, 8099, 0, 0, 1343, 0, 0, 9325, - 6818, 6283, 11738, 0, 0, 0, 11741, 0, 0, 9216, 8263, 11279, 194752, 0, - 194754, 13021, 64494, 3136, 194758, 194757, 194760, 13022, 42737, 64588, - 0, 0, 74552, 10014, 0, 41260, 119340, 13020, 118993, 194764, 194767, - 74340, 0, 0, 64945, 8029, 0, 0, 0, 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, 78584, 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, - 194739, 12424, 68614, 73944, 13050, 9924, 194745, 6507, 0, 0, 0, 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, 194734, 41057, 0, 0, 0, 0, 0, 0, 127109, 0, 41496, 0, - 9165, 1572, 11911, 0, 118842, 2346, 13270, 8958, 0, 9646, 3773, 43183, - 6401, 5831, 0, 0, 13043, 8056, 0, 65681, 208, 0, 0, 0, 0, 0, 10699, 6408, - 0, 7825, 5661, 0, 120630, 3603, 41109, 2398, 3548, 0, 0, 119933, 0, 3115, - 9918, 0, 11321, 0, 0, 0, 194726, 4876, 74286, 0, 0, 43468, 0, 41558, - 41471, 73950, 8158, 9944, 41472, 0, 13051, 78689, 3143, 194674, 6701, - 41559, 1896, 66256, 13052, 194680, 5665, 0, 119071, 7025, 63974, 0, - 74352, 74161, 4154, 9863, 43550, 12310, 5662, 42382, 194686, 73924, 1121, - 194665, 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, 917808, 118830, 63978, 11044, 3229, - 6423, 42774, 0, 0, 0, 12823, 2331, 917810, 42026, 6137, 0, 7524, 0, - 917809, 119343, 0, 8338, 0, 65043, 0, 822, 0, 9903, 64721, 42722, 194656, - 194659, 78655, 78661, 194660, 78662, 41265, 5311, 1795, 965, 118791, - 10587, 78055, 11278, 78632, 194640, 0, 12946, 194641, 120705, 194643, - 6294, 3144, 194648, 194647, 65019, 194649, 73990, 0, 0, 748, 41067, 2330, - 535, 3148, 12375, 194652, 194629, 10556, 2475, 12388, 4889, 8968, 67863, - 3593, 0, 0, 2342, 0, 194634, 65206, 4894, 194635, 4890, 194637, 917804, - 581, 4893, 0, 6571, 65545, 4888, 4157, 78048, 78049, 78046, 78047, 0, - 10119, 6415, 0, 0, 0, 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, 0, 0, 66217, 0, 8334, - 119344, 0, 3449, 0, 0, 78414, 78413, 118950, 74011, 0, 0, 0, 0, 1908, - 120167, 4328, 10734, 127014, 0, 0, 7804, 78272, 10811, 6250, 11339, 4914, - 11367, 0, 78054, 4917, 74516, 74208, 64285, 4912, 5464, 0, 118893, 2361, - 7971, 78072, 78073, 55243, 78071, 0, 8086, 74317, 6707, 8319, 2312, - 40977, 10960, 40962, 8305, 12573, 0, 40980, 0, 13202, 0, 12582, 78282, 0, - 0, 42438, 55221, 6288, 78280, 0, 5653, 42400, 10891, 7698, 5658, 74045, - 0, 0, 0, 4913, 0, 0, 0, 42326, 0, 0, 0, 42478, 2327, 0, 12563, 42287, - 12705, 0, 0, 12588, 8821, 6153, 2867, 194708, 66312, 698, 194709, 194606, - 10356, 74075, 194713, 651, 12641, 0, 0, 0, 0, 41552, 65115, 78465, 78467, - 78463, 78464, 194695, 78461, 194697, 74356, 0, 4716, 43277, 0, 78474, - 12340, 120568, 0, 194700, 55264, 41211, 120676, 8703, 5462, 917629, 0, + 42029, 11079, 12331, 0, 42032, 8744, 726, 0, 0, 4155, 0, 0, 42030, 5007, + 12522, 43088, 0, 4951, 0, 0, 0, 9922, 43309, 0, 12525, 0, 12016, 65770, + 9548, 0, 403, 0, 12503, 0, 0, 11030, 0, 0, 65691, 63998, 1819, 10496, 0, + 0, 119920, 0, 0, 0, 12506, 0, 12231, 0, 12500, 67605, 12509, 64393, 0, + 3389, 10589, 6608, 41047, 120321, 0, 0, 74069, 0, 0, 3608, 8281, 917839, + 1107, 0, 9076, 8862, 0, 41052, 13084, 64766, 43217, 7803, 13222, 118963, + 74782, 0, 8546, 11553, 63995, 13177, 9043, 6303, 0, 498, 64471, 120324, + 0, 12529, 8042, 0, 2344, 12528, 8031, 2414, 0, 0, 3231, 0, 6422, 66512, + 0, 12530, 2537, 0, 41429, 12658, 13036, 65772, 0, 0, 41433, 4719, 469, 0, + 4363, 3313, 41428, 0, 2023, 1772, 0, 0, 65706, 10051, 64812, 0, 0, 9920, + 12215, 0, 4931, 1951, 12497, 119363, 9607, 0, 9663, 0, 119634, 6503, + 41110, 0, 1491, 0, 0, 0, 41061, 0, 0, 0, 65026, 41993, 41509, 11045, + 65028, 0, 66476, 41108, 9738, 41995, 1075, 1958, 12535, 41992, 41506, 0, + 41687, 0, 120717, 0, 917816, 0, 7692, 0, 8008, 0, 330, 8566, 65083, + 41133, 9816, 0, 12532, 127055, 127056, 3508, 127058, 127059, 0, 917542, + 917815, 0, 6411, 12910, 120505, 66644, 13028, 0, 12537, 0, 0, 64136, + 12536, 2350, 13029, 0, 0, 0, 13030, 0, 4527, 0, 12538, 0, 0, 65599, + 65717, 12607, 0, 4948, 12484, 4032, 0, 42803, 0, 6207, 0, 6117, 66000, + 8412, 0, 7438, 1296, 2325, 41511, 0, 10149, 74118, 0, 0, 12481, 0, 12488, + 0, 0, 41556, 64414, 118802, 2354, 0, 73766, 0, 6295, 901, 41510, 7953, 0, + 65032, 41513, 0, 11927, 66584, 0, 0, 119010, 0, 0, 0, 848, 9868, 0, 6424, + 0, 119338, 0, 74031, 0, 0, 2352, 0, 893, 64576, 11289, 1407, 0, 0, 13026, + 0, 0, 0, 13023, 8903, 9777, 66715, 1871, 8099, 0, 0, 1343, 0, 0, 9325, + 13025, 6283, 11738, 0, 0, 0, 11741, 0, 0, 9216, 8263, 11279, 194752, 0, + 194754, 13021, 64494, 3136, 194758, 194757, 194760, 13022, 0, 64588, 0, + 0, 74552, 10014, 0, 41260, 119340, 13020, 118993, 194764, 194767, 74340, + 0, 0, 64945, 8029, 0, 0, 0, 3335, 0, 0, 9776, 120526, 194748, 5215, + 42644, 3333, 1632, 194751, 64849, 3342, 0, 5363, 12957, 0, 4156, 0, 0, + 6421, 0, 1611, 0, 13018, 74257, 0, 0, 3337, 4537, 67895, 11736, 0, 0, + 6482, 4214, 73790, 11945, 0, 13046, 8838, 425, 4025, 10709, 0, 73927, + 2392, 13047, 0, 0, 10617, 13049, 6499, 194739, 12424, 194741, 73944, + 13050, 194742, 194745, 6507, 0, 0, 0, 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, 194734, + 41057, 0, 0, 0, 0, 0, 0, 0, 0, 41496, 0, 9165, 1572, 11911, 0, 118842, + 2346, 13270, 8958, 0, 9646, 3773, 43183, 6401, 42536, 0, 0, 13043, 8056, + 0, 65681, 208, 0, 0, 0, 0, 0, 10699, 6408, 0, 7825, 5661, 0, 120630, + 3603, 41109, 2398, 3548, 0, 0, 0, 0, 3115, 0, 0, 11321, 0, 0, 0, 194726, + 4876, 74286, 0, 0, 0, 0, 41558, 41471, 73950, 8158, 41561, 41472, 0, + 13051, 194672, 3143, 194674, 194673, 41559, 1896, 66256, 13052, 194680, + 5665, 0, 119071, 41986, 63974, 0, 74352, 74161, 4154, 9863, 43550, 12310, + 5662, 42382, 194686, 73924, 1121, 194665, 63959, 0, 74378, 13231, 0, + 64752, 4732, 194666, 11596, 194668, 65187, 1626, 63983, 10110, 194671, + 42024, 6420, 42028, 0, 10509, 2795, 4910, 194728, 0, 64753, 6275, 0, + 118830, 63978, 11044, 3229, 6423, 42774, 0, 0, 0, 12823, 2331, 917810, + 42026, 6137, 0, 7524, 0, 0, 119343, 0, 8338, 0, 65043, 0, 822, 0, 9903, + 64721, 194657, 194656, 194659, 194658, 194661, 194660, 0, 41265, 5311, + 1795, 965, 118791, 10587, 0, 11278, 0, 194640, 0, 12946, 194641, 120705, + 194643, 6294, 3144, 194648, 194647, 65019, 194649, 73990, 0, 0, 748, + 41067, 2330, 535, 3148, 12375, 194652, 194629, 10556, 2475, 12388, 4889, + 8968, 67863, 3593, 0, 0, 2342, 0, 194634, 65206, 4894, 194635, 4890, + 194637, 0, 581, 4893, 0, 0, 65545, 4888, 4157, 917805, 0, 0, 0, 0, 10119, + 6415, 0, 0, 0, 0, 0, 11375, 64746, 2332, 0, 412, 0, 64932, 42880, 43587, + 0, 0, 0, 0, 65197, 0, 12203, 0, 0, 8913, 65854, 4875, 65811, 120381, + 194624, 120397, 9344, 8826, 120386, 120395, 13104, 74781, 11997, 120393, + 0, 0, 3134, 0, 65696, 0, 0, 66217, 0, 8334, 119344, 0, 3449, 0, 0, 0, 0, + 118950, 74011, 0, 0, 0, 0, 1908, 0, 4328, 10734, 127014, 0, 0, 7804, 0, + 10811, 6250, 11339, 4914, 11367, 0, 118971, 4917, 74516, 0, 64285, 4912, + 5464, 0, 118893, 2361, 7971, 0, 0, 0, 118986, 0, 8086, 74317, 0, 8319, + 2312, 40977, 10960, 40962, 8305, 12573, 0, 40980, 0, 13202, 0, 12582, 0, + 0, 0, 42438, 0, 6288, 0, 0, 5653, 42400, 10891, 7698, 5658, 74045, 0, 0, + 0, 4913, 0, 0, 0, 42326, 0, 0, 0, 42478, 2327, 0, 12959, 42287, 12705, 0, + 0, 12588, 8821, 6153, 2867, 194708, 66312, 698, 194709, 194712, 10356, + 74075, 194713, 651, 12641, 0, 0, 0, 0, 41552, 65115, 194691, 194690, + 194693, 194692, 194695, 194694, 194697, 74356, 0, 4716, 43277, 0, 0, + 12340, 120568, 0, 194700, 194699, 194702, 120676, 8703, 5462, 917629, 0, 10101, 0, 0, 8479, 4151, 41933, 0, 0, 66254, 120821, 0, 0, 0, 0, 119194, 74050, 0, 0, 0, 0, 0, 0, 12278, 0, 0, 0, 2700, 12576, 7842, 12899, 0, 0, - 2699, 0, 73845, 2985, 119222, 0, 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, 78483, 4272, 0, 40967, 40964, 917825, 12704, - 78487, 43306, 0, 64497, 12138, 7930, 0, 43303, 68216, 0, 917826, 5244, - 4189, 127098, 67596, 0, 4188, 1879, 0, 968, 0, 43743, 0, 8873, 0, 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, 0, 66015, 0, 959, 8885, 12564, 66457, 78808, 9469, 9632, - 0, 74761, 64323, 0, 0, 0, 0, 310, 0, 41281, 10976, 0, 194768, 0, 74266, - 10054, 6497, 8574, 0, 9012, 19958, 74420, 65089, 13215, 65047, 65163, - 74044, 374, 43195, 816, 0, 0, 0, 41934, 7465, 0, 0, 0, 4715, 6101, 0, - 41936, 0, 4879, 0, 65446, 0, 307, 0, 9585, 5374, 0, 0, 0, 0, 0, 0, 0, - 65567, 120614, 1929, 0, 12142, 0, 12236, 41419, 194618, 194621, 12982, - 194623, 5378, 78791, 0, 41421, 0, 4462, 0, 0, 0, 821, 0, 2498, 5800, - 120157, 0, 1760, 0, 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, 194599, 194598, 194601, 42260, 5871, 119075, - 0, 74576, 44019, 0, 194602, 3967, 194604, 13137, 8775, 194605, 0, 2963, - 0, 8410, 4454, 723, 917600, 966, 4449, 0, 127060, 0, 7819, 2320, 194589, - 339, 4968, 194590, 120399, 8075, 55276, 0, 8047, 0, 78827, 12634, 41542, - 78780, 7466, 6705, 12174, 42610, 0, 74452, 0, 1584, 66645, 6045, 6729, - 120640, 65218, 78777, 0, 78062, 7537, 0, 11370, 0, 10330, 0, 10394, 0, + 2699, 0, 0, 2985, 119222, 0, 0, 12192, 119314, 0, 119312, 9827, 119310, + 119311, 119308, 119309, 119306, 11481, 41210, 119305, 0, 35, 0, 0, 66694, + 74357, 0, 0, 43596, 6090, 64257, 7812, 10534, 0, 0, 73848, 0, 4272, 0, + 40967, 40964, 917825, 12704, 0, 43306, 0, 64497, 12138, 7930, 0, 43303, + 0, 0, 917826, 5244, 4189, 127098, 67596, 0, 4188, 1879, 0, 968, 0, 0, 0, + 8873, 0, 0, 0, 65555, 12574, 0, 0, 0, 74490, 0, 0, 0, 0, 0, 0, 12578, + 12720, 0, 41227, 0, 12346, 0, 64848, 0, 0, 7251, 0, 0, 118850, 119141, 0, + 66015, 0, 959, 8885, 12564, 66457, 0, 9469, 9632, 0, 74761, 64323, 0, 0, + 0, 0, 310, 0, 41564, 10976, 0, 0, 0, 0, 10054, 6497, 8574, 0, 9012, + 19958, 74420, 65089, 13215, 65047, 65163, 74044, 374, 43195, 816, 0, 0, + 0, 41934, 7465, 0, 0, 0, 4715, 6101, 0, 41936, 0, 4879, 0, 65446, 0, 307, + 0, 9585, 5374, 0, 0, 0, 0, 0, 0, 0, 65567, 120614, 1929, 0, 12142, 0, + 12236, 41419, 194618, 194621, 12982, 194623, 5378, 0, 0, 41421, 0, 4462, + 0, 0, 0, 821, 0, 2498, 5800, 120157, 0, 1760, 0, 4469, 2324, 828, 3611, + 0, 757, 1185, 0, 0, 43597, 10628, 74808, 194572, 7999, 0, 0, 0, 10634, + 10942, 7713, 2348, 0, 64374, 4380, 194608, 119044, 194610, 64324, 41240, + 862, 65626, 194613, 1810, 3673, 5137, 194617, 0, 7277, 65622, 0, 7566, + 64688, 194593, 194592, 194595, 120812, 194597, 4748, 194599, 194598, + 194601, 42260, 5871, 119075, 0, 74576, 0, 0, 194602, 3967, 194604, 13137, + 8775, 194605, 0, 2963, 0, 8410, 4454, 723, 0, 966, 4449, 0, 127060, 0, + 7819, 2320, 194589, 339, 4968, 194590, 120399, 8075, 0, 0, 8047, 0, 0, + 12634, 41542, 0, 7466, 118822, 12174, 42610, 0, 74452, 0, 1584, 66645, + 6045, 0, 120640, 65218, 0, 0, 0, 7537, 0, 11370, 0, 10330, 0, 10394, 0, 194783, 0, 0, 9780, 0, 13092, 194576, 119605, 194578, 7074, 120396, 194579, 194582, 11414, 194584, 2531, 13034, 0, 0, 0, 1259, 7517, 0, 0, 194561, 40996, 13037, 7092, 641, 5219, 194567, 194566, 11064, 41129, 0, 42850, 13035, 9075, 0, 5466, 194570, 0, 64098, 65793, 4535, 194573, 4271, - 78417, 0, 6769, 41410, 0, 64262, 6767, 41407, 0, 0, 6755, 118864, 9046, - 0, 0, 0, 0, 0, 0, 67675, 0, 0, 0, 64338, 2563, 13033, 247, 118915, 0, - 12338, 4651, 0, 11270, 0, 0, 11933, 0, 0, 41903, 43447, 11001, 0, 42255, - 0, 0, 0, 41905, 0, 0, 10775, 9793, 5009, 0, 42269, 64587, 0, 42535, - 69812, 64529, 41408, 42853, 3877, 120795, 42674, 8147, 43566, 119021, 0, - 10236, 65918, 0, 0, 0, 64506, 0, 118921, 4747, 0, 0, 43200, 5832, 0, 0, - 5141, 42600, 0, 43203, 0, 0, 43286, 0, 0, 0, 0, 41305, 78776, 74137, - 11303, 65547, 0, 7031, 859, 0, 0, 0, 6059, 126985, 55235, 0, 8535, 0, - 65196, 194787, 66032, 11488, 0, 120786, 42233, 127488, 9946, 63885, 0, - 11822, 0, 43189, 0, 0, 1788, 1579, 120482, 917817, 0, 0, 0, 9028, 119571, - 69234, 0, 0, 1285, 64882, 41242, 0, 0, 12640, 0, 7401, 0, 12625, 68198, - 0, 0, 3940, 41597, 55260, 3396, 12642, 8665, 0, 0, 12630, 1653, 917815, + 194575, 0, 0, 41410, 0, 64262, 0, 41407, 0, 0, 41131, 118864, 9046, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 64338, 2563, 13033, 247, 917787, 0, 12338, 4651, + 0, 11270, 0, 0, 11933, 0, 0, 41903, 67892, 11001, 0, 42255, 0, 0, 0, + 41905, 0, 0, 10775, 9793, 5009, 0, 42269, 64587, 0, 42535, 0, 64529, + 41408, 42853, 3877, 0, 0, 8147, 43566, 119021, 0, 10236, 65918, 0, 0, 0, + 64506, 0, 118921, 4747, 0, 0, 43200, 5832, 0, 0, 5141, 42600, 0, 43203, + 0, 0, 43286, 0, 0, 0, 0, 0, 0, 74137, 11303, 65547, 0, 7031, 859, 0, 0, + 0, 6059, 126985, 0, 0, 8535, 0, 0, 194787, 66032, 11488, 0, 120786, 0, 0, + 10558, 63885, 0, 11822, 0, 43189, 0, 0, 1788, 1579, 120482, 917817, 0, 0, + 0, 9028, 119571, 0, 0, 0, 1285, 64882, 41242, 0, 0, 12640, 0, 66642, 0, + 12625, 0, 0, 0, 3940, 41597, 0, 3396, 12642, 8665, 0, 0, 12630, 1653, 0, 10153, 0, 6166, 120516, 120523, 0, 8815, 66673, 65046, 9285, 913, 42259, - 119317, 119318, 119315, 68454, 42485, 118837, 7878, 8211, 42293, 64377, - 0, 0, 0, 194673, 12032, 0, 9725, 0, 78431, 5263, 12818, 78430, 41939, - 10022, 65387, 78419, 42777, 10139, 980, 43698, 65386, 0, 0, 43701, 43198, - 7184, 120673, 194797, 917819, 10085, 119992, 0, 119993, 6634, 0, 0, - 119323, 8072, 119321, 43700, 0, 8872, 7783, 917992, 12398, 8237, 0, 0, - 12395, 0, 126977, 120565, 9914, 127011, 917854, 73975, 6367, 6351, 66688, - 0, 78107, 0, 64735, 41243, 0, 7808, 1829, 0, 41937, 4358, 43272, 6353, 0, - 0, 120422, 0, 1710, 0, 0, 65607, 0, 49, 6627, 0, 6258, 10683, 78672, - 9741, 78443, 5649, 78441, 43443, 64418, 1643, 65213, 8405, 3470, 0, - 13213, 42452, 78331, 0, 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, 0, 0, 66309, 0, 0, 1494, 0, 0, 0, 11693, 0, - 10494, 119230, 65872, 12363, 11386, 0, 0, 0, 0, 64582, 0, 73794, 0, 8022, - 0, 0, 74106, 12413, 194829, 917994, 0, 917995, 5570, 1881, 7210, 0, 1012, - 66630, 0, 120709, 7208, 66442, 5569, 0, 42339, 0, 6063, 0, 0, 119594, + 119317, 119318, 119315, 119316, 42485, 118837, 7878, 8211, 42293, 64377, + 0, 0, 0, 0, 12032, 0, 9725, 0, 0, 5263, 12818, 0, 41939, 10022, 65387, + 118831, 42777, 10139, 980, 0, 65386, 0, 0, 0, 43198, 7184, 0, 194797, + 917819, 10085, 119992, 0, 119999, 6634, 0, 0, 119323, 8072, 119321, + 119322, 0, 8872, 7783, 917992, 12398, 8237, 0, 0, 12395, 0, 0, 120565, + 9914, 127011, 917854, 73975, 74281, 0, 0, 0, 917853, 0, 64735, 41243, 0, + 7808, 1829, 0, 41937, 4358, 43272, 0, 0, 0, 0, 0, 1710, 0, 0, 0, 0, 49, + 6627, 0, 6258, 10683, 0, 9741, 120423, 5649, 917986, 0, 64418, 1643, + 74104, 8405, 3470, 0, 13213, 42452, 917987, 0, 120009, 0, 1072, 0, + 917990, 0, 6576, 41988, 41132, 65675, 1080, 120002, 74100, 0, 1101, + 120001, 12309, 0, 0, 12632, 1086, 1869, 0, 7680, 0, 65458, 120714, 12639, + 3380, 8123, 1091, 12638, 7977, 4501, 0, 0, 66309, 0, 0, 1494, 0, 0, 0, + 11693, 0, 10494, 119230, 65872, 12363, 11386, 0, 0, 0, 0, 64582, 0, + 73794, 0, 8022, 0, 0, 74106, 12413, 0, 0, 0, 0, 5570, 1881, 7210, 0, + 1012, 66630, 0, 120709, 7208, 66442, 5569, 0, 42339, 0, 6063, 0, 0, 0, 6053, 65602, 0, 0, 64727, 9160, 194827, 0, 0, 0, 10503, 118810, 6055, 3870, 4279, 8490, 120114, 4319, 64786, 8602, 120110, 11326, 0, 0, 0, - 120119, 78333, 120117, 120118, 120099, 120100, 65087, 5571, 3674, 9740, - 9121, 5568, 120107, 120108, 42085, 10107, 42159, 42870, 120101, 589, + 120119, 120413, 120117, 120118, 120099, 120100, 65087, 5571, 3674, 9740, + 9121, 5568, 120107, 120108, 42085, 10107, 64567, 42870, 120101, 589, 7050, 0, 43281, 10233, 41263, 66251, 65729, 66253, 0, 74099, 42645, 0, - 194815, 8583, 0, 5847, 6928, 0, 0, 0, 0, 0, 66592, 12204, 0, 19966, - 77856, 42561, 120626, 0, 0, 8120, 120701, 0, 0, 0, 41063, 0, 10664, 0, - 8369, 0, 4551, 0, 74759, 0, 0, 9673, 66334, 65580, 10478, 118960, 12517, - 557, 9457, 12034, 0, 6355, 12519, 41004, 0, 0, 74094, 0, 0, 77970, 0, 0, - 0, 12111, 3927, 0, 12515, 1474, 67893, 5492, 6923, 0, 10441, 73836, 0, - 43990, 5493, 0, 74319, 0, 66635, 12019, 0, 1618, 0, 120474, 9645, 10430, - 917959, 5853, 13063, 10363, 0, 12956, 0, 120729, 11314, 0, 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, 0, 0, 41918, 0, 0, 8687, 66009, 12178, - 7053, 0, 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, 0, 74600, 12700, 74836, 0, 12579, 0, 12575, 6416, 5656, 2891, - 13262, 65590, 5299, 0, 11473, 5449, 1252, 0, 78404, 41431, 74369, 65373, - 5295, 0, 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, 917553, 4257, 12104, 77942, 6220, 9004, 65561, 0, 77949, - 0, 68135, 917576, 77946, 0, 0, 0, 9890, 78561, 12971, 78453, 0, 73898, - 11979, 0, 118900, 917894, 0, 9635, 12600, 8871, 0, 0, 0, 6469, 74227, 0, + 194815, 8583, 0, 5847, 6928, 0, 0, 0, 0, 0, 66592, 12204, 0, 19966, 0, + 42561, 120626, 0, 0, 8120, 120701, 0, 0, 0, 41063, 0, 10664, 0, 8369, 0, + 4551, 0, 74759, 0, 0, 9673, 66334, 65580, 10478, 127002, 12517, 557, + 9457, 12034, 0, 41056, 12519, 41004, 0, 0, 74094, 0, 0, 119001, 0, 0, 0, + 12111, 3927, 0, 12515, 1474, 67893, 5492, 6923, 0, 10441, 73836, 0, 0, + 5493, 0, 74319, 0, 66635, 12019, 0, 1618, 0, 0, 9645, 10430, 0, 5853, + 13063, 10363, 0, 12956, 0, 0, 11314, 0, 12060, 0, 0, 12826, 0, 0, 10514, + 65517, 74395, 2707, 8309, 0, 127054, 0, 43570, 2697, 0, 0, 127057, 2695, + 42171, 0, 0, 0, 67617, 194814, 0, 2693, 12125, 12766, 0, 1164, 0, 0, + 41918, 0, 0, 8687, 66009, 12178, 7053, 0, 7469, 0, 5248, 12218, 120538, + 6427, 42884, 41123, 0, 0, 42873, 41126, 9991, 41128, 74371, 127031, 0, + 9873, 0, 42877, 7994, 64762, 6104, 42843, 6591, 9340, 0, 1589, 0, 296, + 74438, 0, 0, 67841, 74370, 0, 8922, 0, 74600, 74435, 74836, 0, 12579, 0, + 12575, 6416, 5656, 2891, 13262, 65590, 5299, 0, 11473, 5449, 1252, 0, 0, + 41431, 74369, 65373, 5295, 0, 74114, 1223, 1642, 174, 0, 883, 4161, + 12691, 42603, 41413, 3212, 127025, 3211, 74810, 41425, 127029, 0, 74450, + 9728, 3846, 8070, 6150, 6636, 4370, 0, 0, 74178, 74587, 74117, 0, 0, 0, + 4986, 12189, 0, 0, 120499, 917553, 4257, 12104, 119182, 6220, 9004, + 65561, 0, 0, 0, 68135, 917576, 0, 0, 0, 0, 9890, 0, 12971, 0, 0, 73898, + 11979, 0, 118900, 0, 0, 9635, 12600, 8871, 0, 0, 0, 6469, 74227, 0, 65304, 4679, 10230, 64300, 64867, 3427, 4240, 0, 0, 0, 0, 917952, 0, 0, - 0, 7282, 78728, 65733, 4445, 0, 0, 3494, 74606, 6555, 0, 77976, 0, 0, - 78566, 0, 0, 65898, 0, 65312, 5447, 0, 12895, 65593, 4010, 0, 41106, 0, - 65804, 0, 41105, 0, 65820, 6232, 0, 0, 0, 43608, 119091, 0, 6538, 4335, - 78364, 3941, 41122, 11061, 78363, 64892, 9113, 1954, 12155, 0, 42878, - 11500, 0, 0, 74578, 0, 65832, 0, 0, 0, 77975, 0, 4586, 0, 350, 10951, 0, - 509, 0, 0, 0, 0, 0, 5133, 0, 0, 9500, 0, 12162, 64741, 0, 9354, 0, 0, 0, - 2496, 11516, 944, 118851, 3890, 12168, 1438, 0, 0, 0, 41947, 1220, - 120828, 0, 0, 0, 1571, 42630, 41949, 42805, 8270, 943, 564, 0, 312, - 41980, 0, 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, 0, 0, 1985, 6296, 9582, 917895, 64287, 0, 78115, - 11428, 1730, 2457, 0, 19918, 10469, 0, 0, 7703, 8840, 8035, 0, 0, 0, 0, - 6129, 0, 0, 0, 0, 7874, 8681, 0, 0, 13136, 0, 0, 74278, 63886, 118881, - 9605, 73892, 13220, 0, 120274, 5514, 0, 9228, 0, 0, 0, 5240, 9811, 10012, - 3096, 0, 0, 0, 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, 0, 19935, 0, 0, 0, 0, 0, 0, 5275, 0, 0, 8637, 0, 0, 3789, 63880, - 11471, 43554, 65862, 11474, 66332, 66603, 0, 2426, 12042, 0, 0, 9537, - 3961, 12115, 0, 2605, 4500, 64561, 55224, 4981, 0, 0, 63876, 11667, - 42686, 77973, 42362, 64686, 4499, 41649, 7589, 0, 0, 3237, 0, 68215, 0, - 8541, 78298, 0, 41866, 0, 0, 0, 0, 0, 43555, 2823, 9559, 0, 41940, 8299, + 0, 7282, 0, 65733, 64618, 0, 0, 3494, 74606, 6555, 0, 0, 0, 0, 0, 0, 0, + 65898, 0, 65312, 5447, 0, 12895, 65593, 4010, 0, 41106, 0, 65804, 0, + 41105, 0, 65820, 6232, 0, 0, 0, 43608, 119091, 0, 6538, 4335, 0, 3941, + 41122, 11061, 0, 64892, 9113, 1954, 12155, 0, 42878, 0, 0, 0, 74578, 0, + 65832, 0, 0, 0, 0, 0, 4586, 0, 350, 10951, 0, 509, 0, 0, 0, 0, 0, 5133, + 0, 0, 9500, 0, 12162, 64741, 0, 9354, 0, 0, 0, 2496, 11516, 944, 118851, + 3890, 12168, 1438, 0, 0, 0, 41947, 1220, 120828, 0, 0, 0, 1571, 42630, + 41949, 42805, 8270, 943, 564, 0, 312, 41980, 0, 0, 0, 8877, 269, 4429, + 6272, 9617, 1460, 6954, 0, 41120, 65121, 10862, 6060, 41119, 41416, + 74355, 4173, 0, 0, 0, 1906, 0, 11532, 74073, 0, 0, 1985, 6296, 9582, + 917895, 64287, 0, 0, 11428, 1730, 2457, 0, 19918, 10469, 0, 0, 7703, + 8840, 8035, 0, 0, 0, 0, 6129, 0, 0, 0, 0, 7874, 8681, 0, 0, 13136, 0, 0, + 74278, 63886, 118881, 9605, 73892, 13220, 0, 0, 5514, 0, 9228, 0, 0, 0, + 5240, 9811, 10012, 3096, 0, 0, 0, 66676, 65873, 0, 0, 0, 9501, 0, 1272, + 64536, 65465, 64654, 7467, 0, 1467, 10158, 10040, 0, 9519, 0, 0, 0, + 118899, 12193, 0, 0, 0, 0, 0, 19935, 0, 0, 0, 0, 0, 0, 5275, 0, 0, 8637, + 0, 0, 3789, 63880, 11471, 43554, 65862, 11474, 66332, 66603, 0, 0, 12042, + 0, 0, 9537, 3961, 12115, 0, 2605, 4500, 64561, 0, 4981, 0, 0, 63876, + 11667, 0, 0, 42362, 64686, 4499, 41649, 7589, 0, 0, 3237, 0, 120194, 0, + 8541, 0, 0, 41866, 0, 0, 0, 0, 0, 43555, 2823, 9559, 0, 41940, 8299, 41945, 0, 41941, 3308, 7190, 64880, 8614, 65220, 41493, 0, 41699, 10762, 0, 12999, 0, 0, 8106, 4128, 0, 0, 4494, 0, 4012, 10395, 0, 119567, 65447, 0, 0, 11004, 695, 739, 696, 7611, 0, 42755, 74802, 9227, 7506, 7510, 0, 691, 738, 7511, 7512, 7515, 3868, 688, 41847, 690, 2548, 737, 974, 8003, - 7406, 0, 0, 0, 3985, 0, 65860, 63921, 7051, 69777, 4682, 917805, 12809, - 6406, 4685, 0, 10879, 10347, 4680, 6341, 0, 3851, 8132, 74325, 0, 917907, - 0, 41958, 119176, 917908, 0, 0, 42657, 0, 7643, 42373, 11714, 67587, - 43568, 0, 11717, 7650, 10594, 64951, 7647, 7649, 0, 7646, 0, 78082, 9651, - 0, 3891, 0, 0, 2337, 1735, 74324, 67860, 5452, 0, 0, 43561, 0, 0, 74146, - 1860, 7495, 7580, 5812, 7497, 7584, 0, 0, 0, 120347, 7727, 0, 8498, - 69818, 8949, 3065, 42719, 0, 1569, 0, 12534, 12124, 7690, 0, 12533, 0, - 6418, 4543, 78086, 6969, 0, 74800, 0, 0, 11980, 0, 0, 63894, 120760, - 12282, 66192, 0, 74592, 8850, 74275, 9238, 10617, 917545, 0, 0, 0, 12791, - 0, 0, 0, 4447, 73732, 12793, 12900, 0, 10950, 0, 78087, 12790, 41400, - 119128, 0, 12792, 42232, 0, 1744, 12789, 10366, 12317, 41310, 0, 41399, - 0, 0, 55258, 0, 12690, 0, 0, 43672, 0, 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, 0, 77829, 0, 0, 6413, - 6550, 0, 1940, 0, 43637, 220, 65193, 43551, 10678, 10044, 0, 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, 63845, 4182, 78171, 4676, - 120501, 0, 0, 2510, 0, 10208, 78168, 0, 11540, 43546, 6692, 0, 41060, 0, - 0, 9083, 0, 0, 78144, 1559, 63831, 9677, 120260, 0, 65256, 0, 74070, 0, - 0, 365, 12056, 43027, 120423, 41716, 0, 0, 120472, 5516, 2845, 7717, - 8036, 41717, 73827, 544, 12045, 6278, 0, 5515, 0, 0, 0, 65339, 43221, - 65194, 0, 5517, 0, 0, 74841, 67884, 0, 67890, 67885, 67880, 67881, 67882, - 67883, 0, 0, 67879, 0, 1902, 67887, 9638, 12976, 0, 12483, 12368, 41769, - 42726, 41765, 0, 6667, 67874, 7556, 67878, 74351, 11264, 989, 42677, - 67889, 0, 1311, 0, 4326, 11000, 63824, 13068, 10932, 0, 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, 0, 0, - 41834, 5279, 0, 10336, 8312, 0, 42701, 0, 0, 78165, 66036, 0, 0, 6428, - 42270, 0, 0, 43059, 42666, 5256, 1067, 255, 12131, 0, 9493, 0, 41014, - 11793, 0, 0, 74394, 43460, 10653, 42723, 0, 119632, 0, 6560, 7016, 74274, - 0, 43556, 3929, 0, 6614, 2768, 0, 9746, 5135, 11811, 12796, 11953, 0, - 69761, 5139, 346, 74303, 6305, 12795, 4675, 5168, 78552, 0, 74315, 74361, - 8253, 8817, 1136, 0, 43563, 0, 0, 194750, 7392, 8230, 9365, 0, 0, 0, 0, - 0, 4041, 0, 2357, 43240, 12786, 229, 119885, 119884, 44004, 43552, + 0, 0, 0, 0, 3985, 0, 65860, 63921, 7051, 74208, 4682, 0, 12809, 6406, + 4685, 0, 10879, 10347, 4680, 9055, 0, 3851, 8132, 74325, 0, 917907, 0, + 41958, 119176, 917908, 0, 0, 0, 0, 7643, 42373, 11714, 67587, 43568, 0, + 11717, 7650, 10594, 64951, 7647, 7649, 0, 7646, 0, 0, 9651, 0, 3891, 0, + 0, 2337, 1735, 74324, 67860, 5452, 0, 0, 43561, 0, 0, 74146, 1860, 7495, + 7580, 5812, 7497, 7584, 0, 0, 0, 0, 7727, 0, 8498, 0, 8949, 3065, 0, 0, + 1569, 0, 12534, 12124, 7690, 0, 12533, 0, 6418, 4543, 0, 6969, 0, 74800, + 0, 0, 11980, 0, 0, 63894, 0, 12282, 66192, 0, 0, 8850, 74275, 9238, 0, 0, + 0, 0, 0, 12791, 0, 0, 0, 0, 73732, 12793, 12900, 0, 10950, 0, 0, 12790, + 41400, 119128, 0, 12792, 0, 0, 1744, 12789, 10366, 12317, 41310, 0, + 41399, 0, 0, 0, 0, 12690, 0, 0, 0, 0, 41652, 2974, 0, 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, 0, 0, 0, 0, 6413, + 6550, 0, 1940, 0, 66223, 220, 65193, 43551, 10678, 10044, 0, 0, 0, 0, + 6403, 5707, 10393, 0, 0, 66614, 0, 0, 0, 10297, 0, 3742, 0, 3959, 0, 0, + 0, 2467, 0, 6003, 63844, 6663, 8040, 0, 63845, 4182, 0, 4676, 120501, 0, + 0, 2510, 0, 10208, 0, 0, 11540, 43546, 12186, 0, 41060, 0, 0, 9083, 0, 0, + 0, 1559, 63831, 9677, 120260, 0, 65256, 0, 74070, 0, 0, 365, 12056, + 43027, 0, 41716, 0, 0, 0, 5516, 2845, 7717, 8036, 41717, 73827, 544, + 12045, 6278, 0, 5515, 0, 0, 0, 0, 43221, 65194, 0, 5517, 0, 0, 0, 67884, + 0, 67890, 67885, 67880, 67881, 67882, 67883, 0, 0, 67879, 0, 1902, 67887, + 9638, 12976, 0, 12483, 67872, 41769, 0, 41765, 0, 6667, 67874, 7556, + 67878, 74351, 11264, 989, 67876, 67889, 0, 1311, 0, 4326, 11000, 63824, + 13068, 10932, 0, 6917, 0, 0, 949, 917595, 0, 6148, 8605, 42253, 917967, + 0, 0, 0, 0, 0, 0, 63871, 0, 41796, 1269, 6530, 0, 65057, 0, 5144, 12221, + 0, 0, 4431, 4331, 0, 0, 41834, 5279, 0, 10336, 8312, 0, 118861, 0, 0, + 119654, 66036, 0, 0, 6428, 42270, 0, 0, 118866, 0, 5256, 1067, 255, + 12131, 0, 9493, 0, 41014, 11793, 0, 0, 74394, 43594, 10653, 0, 0, 119632, + 0, 6560, 7016, 74274, 0, 43556, 3929, 0, 6614, 2768, 0, 9746, 5135, + 11811, 12796, 11953, 0, 0, 5139, 346, 74303, 6305, 12795, 4675, 5168, 0, + 0, 74315, 74361, 8253, 8817, 1136, 0, 43563, 0, 0, 0, 65285, 8230, 9365, + 0, 0, 0, 0, 0, 4041, 0, 2357, 0, 12786, 229, 119885, 119884, 0, 43552, 119881, 12350, 65554, 119882, 119877, 119876, 12785, 63863, 119873, 7770, - 10712, 64853, 12686, 118916, 42375, 0, 127238, 66352, 10470, 0, 11059, - 10791, 917944, 450, 0, 0, 10432, 12097, 5450, 64691, 1233, 0, 44009, - 78284, 66338, 0, 0, 1839, 118799, 0, 10927, 1701, 0, 2388, 41749, 41761, - 5453, 8361, 119865, 41758, 5444, 41763, 64889, 119860, 119863, 78677, 0, - 0, 78174, 66432, 8801, 3053, 4340, 0, 0, 65812, 917831, 0, 41824, 0, - 194801, 194800, 194803, 42700, 194805, 194804, 194807, 78676, 120413, - 194808, 0, 0, 4493, 4336, 0, 2314, 43602, 78826, 119325, 194811, 42439, - 64638, 42327, 43528, 4489, 194791, 0, 194793, 1912, 42385, 10306, 10370, - 0, 0, 8867, 10250, 10258, 2712, 1635, 78821, 1410, 0, 0, 118878, 0, 0, - 9919, 0, 559, 0, 41825, 0, 78188, 4892, 74016, 194781, 6542, 41957, 0, - 5777, 0, 759, 65749, 2079, 65248, 12788, 64487, 64552, 0, 10223, 42062, - 0, 0, 0, 3668, 65754, 43560, 12226, 0, 65149, 2340, 41959, 194786, - 194785, 194788, 43618, 65747, 10937, 2962, 0, 2321, 3587, 65745, 0, 8921, - 9952, 0, 0, 42714, 9951, 43409, 194770, 2949, 66012, 194775, 194774, - 2958, 68359, 41820, 43038, 2395, 0, 9976, 120043, 194778, 120058, 68220, - 194779, 42809, 42807, 0, 120046, 10198, 4150, 64371, 8318, 41790, 0, - 41898, 2360, 41794, 917942, 0, 0, 0, 0, 2418, 0, 2411, 11336, 799, 63823, - 10276, 10308, 10372, 917541, 41772, 42813, 2317, 10260, 118980, 55284, 0, - 0, 10384, 0, 0, 0, 7753, 2351, 6655, 64489, 0, 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, 0, 10264, 10280, - 9184, 10376, 7013, 4467, 0, 0, 0, 41887, 0, 4862, 9735, 6537, 120591, 0, - 3914, 119604, 0, 9065, 12961, 0, 0, 0, 0, 289, 0, 4694, 11420, 4690, 0, - 120514, 917978, 4693, 0, 42724, 0, 4688, 120454, 0, 0, 119629, 8238, - 3110, 120162, 0, 120163, 6528, 127553, 43035, 120161, 218, 0, 1520, 0, - 4786, 0, 43225, 4602, 0, 78167, 10088, 6548, 0, 120156, 43978, 8988, - 8888, 0, 0, 0, 0, 10666, 0, 73902, 0, 0, 0, 9975, 0, 119902, 4689, 8932, - 0, 65560, 119209, 74441, 78810, 0, 0, 0, 0, 0, 0, 0, 0, 10065, 8207, 0, - 120539, 0, 0, 662, 0, 9244, 0, 0, 119261, 0, 0, 0, 0, 41929, 0, 0, 66674, - 41926, 120408, 120443, 10513, 64637, 194862, 0, 52, 13118, 6475, 0, 0, - 12095, 10225, 4812, 0, 0, 0, 74085, 0, 3978, 0, 917945, 0, 11582, 120761, - 12281, 0, 6544, 13241, 0, 69782, 0, 194860, 11765, 65258, 10369, 0, 1585, + 10712, 64853, 12686, 118916, 42375, 0, 0, 66352, 10470, 0, 11059, 10791, + 0, 450, 0, 0, 10432, 12097, 5450, 64691, 1233, 0, 63856, 0, 66338, 0, 0, + 1839, 118799, 0, 10927, 1701, 0, 2388, 41749, 41761, 5453, 8361, 119865, + 41758, 5444, 41763, 64889, 119860, 119863, 119862, 0, 0, 0, 66432, 8801, + 3053, 4340, 0, 0, 65812, 0, 0, 41824, 0, 194801, 194800, 194803, 118997, + 194805, 194804, 194807, 194806, 194809, 194808, 0, 0, 4493, 4336, 0, + 2314, 43602, 0, 119325, 194811, 42439, 64638, 42327, 43528, 4489, 194791, + 0, 194793, 1912, 42385, 10306, 10370, 0, 0, 8867, 10250, 10258, 2712, + 1635, 194798, 1410, 0, 0, 118878, 0, 0, 0, 0, 559, 0, 41825, 0, 0, 4892, + 74016, 194781, 6542, 41957, 0, 5777, 0, 759, 65749, 65750, 65248, 12788, + 64487, 64552, 0, 10223, 42062, 0, 0, 0, 3668, 65754, 43560, 12226, 0, + 65149, 2340, 41959, 194786, 194785, 194788, 120154, 65747, 10937, 2962, + 0, 2321, 3587, 65745, 0, 8921, 66013, 0, 0, 194769, 194768, 194771, + 194770, 2949, 66012, 194775, 194774, 2958, 194776, 41820, 43038, 2395, 0, + 0, 120043, 194778, 120058, 194780, 194779, 42809, 42807, 0, 120047, + 10198, 4150, 64371, 8318, 41790, 0, 41898, 2360, 41794, 917942, 0, 0, 0, + 0, 2418, 0, 2411, 11336, 799, 63823, 10276, 10308, 10372, 917541, 41772, + 42813, 2317, 10260, 118980, 119576, 0, 0, 10384, 0, 0, 0, 7753, 2351, + 6655, 64489, 0, 0, 0, 0, 42779, 230, 0, 0, 43549, 4855, 42150, 65739, + 5441, 41896, 10288, 10320, 0, 855, 7046, 6109, 65045, 63839, 119116, 0, + 10098, 0, 74145, 0, 10264, 10280, 9184, 10376, 7013, 4467, 0, 0, 0, + 41887, 0, 4862, 9735, 6537, 120591, 0, 3914, 119604, 0, 9065, 12961, 0, + 0, 0, 0, 289, 0, 4694, 11420, 4690, 0, 120514, 0, 4693, 0, 73919, 0, + 4688, 120454, 0, 0, 119629, 8238, 3110, 120162, 0, 120163, 6528, 0, + 43035, 120161, 218, 0, 1520, 0, 4786, 0, 43225, 0, 0, 120158, 10088, + 6548, 0, 120156, 0, 8988, 8888, 0, 0, 0, 0, 10666, 0, 73902, 0, 0, 0, 0, + 0, 0, 4689, 8932, 0, 65560, 119209, 74441, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 10065, 8207, 0, 0, 0, 0, 662, 0, 9244, 0, 0, 119261, 0, 0, 0, 0, 41929, + 0, 0, 0, 41926, 0, 120443, 10513, 64637, 0, 0, 52, 13118, 6475, 0, 0, + 12095, 10225, 4812, 0, 0, 0, 74085, 0, 3978, 0, 0, 0, 11582, 120761, + 12281, 0, 6544, 13241, 0, 0, 0, 194860, 11765, 65258, 10369, 0, 1585, 7192, 10249, 422, 1500, 2036, 986, 194859, 64394, 5781, 5599, 64294, - 2494, 120450, 4861, 74021, 64334, 78203, 0, 0, 0, 65102, 8961, 65842, - 10243, 10245, 0, 120410, 0, 120453, 64821, 9478, 2508, 0, 0, 202, 0, - 74131, 1242, 65514, 0, 63940, 0, 64533, 120129, 0, 67842, 11990, 0, - 63939, 43375, 65440, 2504, 0, 78671, 64829, 0, 6943, 917934, 5859, 0, - 2858, 0, 74294, 0, 69239, 0, 119027, 12992, 2753, 1936, 74491, 0, 2751, - 12662, 2763, 8953, 64701, 10731, 12922, 7052, 917839, 0, 0, 0, 63920, - 74128, 2856, 119910, 47, 119911, 126986, 65858, 0, 0, 0, 7899, 0, 8417, - 65903, 7072, 0, 0, 4033, 0, 43992, 0, 0, 212, 64600, 1903, 12320, 0, 0, - 0, 0, 8915, 2759, 945, 6689, 0, 0, 0, 0, 1291, 74828, 0, 0, 9531, 13155, - 8505, 68379, 12062, 0, 0, 65487, 0, 41837, 120611, 120432, 0, 0, 0, - 120433, 0, 63935, 73962, 120806, 64787, 43524, 0, 64426, 0, 0, 0, 0, - 65664, 6693, 9843, 0, 8674, 0, 0, 0, 0, 12624, 0, 1673, 4811, 0, 5986, - 9338, 3046, 74480, 5985, 917928, 119598, 9820, 0, 12187, 0, 0, 5984, 0, - 43308, 4393, 0, 0, 0, 0, 0, 74826, 64733, 0, 0, 3491, 0, 0, 0, 3514, - 65485, 0, 7492, 0, 74605, 119134, 7514, 0, 0, 194731, 7502, 7587, 68353, - 0, 0, 63925, 0, 7610, 219, 0, 0, 692, 43588, 74433, 41635, 43241, 9688, - 0, 9535, 0, 0, 0, 64530, 0, 64610, 11804, 0, 0, 7453, 0, 8013, 0, 0, 0, - 8895, 5253, 0, 5458, 0, 2866, 0, 0, 65111, 68433, 6700, 120484, 0, 0, 0, - 8962, 77960, 9641, 43694, 7059, 0, 0, 9604, 78700, 7441, 63826, 0, - 118941, 64392, 0, 0, 2844, 0, 41974, 0, 12139, 0, 0, 0, 3358, 65295, 0, - 3104, 0, 0, 194765, 0, 5308, 0, 290, 0, 0, 2862, 2792, 195088, 0, 0, - 3268, 66591, 0, 6552, 42367, 7035, 120558, 0, 0, 1814, 0, 10240, 0, - 74305, 0, 74528, 0, 0, 42646, 7606, 2591, 2837, 4341, 77956, 64482, 0, - 8163, 65270, 0, 0, 0, 9112, 74431, 863, 9490, 119898, 0, 43323, 120513, - 119897, 9071, 0, 0, 3654, 7789, 9637, 0, 2535, 65504, 7653, 40993, - 119899, 66587, 195098, 0, 0, 0, 11006, 12927, 7807, 8073, 0, 10629, 0, - 74088, 3056, 10823, 0, 127327, 8762, 10508, 74506, 73770, 43969, 43193, - 10737, 3463, 0, 0, 66633, 8695, 4815, 11322, 5811, 12345, 7049, 0, 5195, - 0, 0, 66639, 0, 0, 0, 0, 0, 120561, 1262, 0, 6561, 19939, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 119907, 64612, 11991, 0, 0, 0, 1502, 0, 0, 9107, 0, 5702, - 3655, 67661, 8430, 0, 74132, 120758, 0, 74057, 9603, 0, 5254, 120742, - 7724, 74388, 68375, 10796, 5129, 0, 0, 590, 7579, 5614, 5893, 194744, - 11720, 0, 11721, 0, 4798, 0, 119316, 66038, 4793, 67851, 11726, 0, 74204, - 68610, 0, 68626, 894, 300, 0, 12306, 66235, 8004, 0, 0, 2562, 0, 0, - 42503, 0, 11652, 0, 0, 119241, 0, 0, 5096, 5095, 2863, 3424, 0, 10454, - 42530, 5094, 119638, 0, 13156, 0, 10832, 5093, 0, 0, 0, 5092, 10708, - 11327, 0, 5091, 176, 0, 9153, 4104, 78599, 78601, 1215, 42712, 5744, - 12272, 9832, 11777, 0, 127371, 42881, 0, 8980, 118988, 67861, 8844, 7209, - 0, 0, 4278, 0, 0, 0, 0, 9074, 4348, 0, 65558, 65946, 8113, 7087, 5255, - 1786, 661, 0, 0, 0, 74423, 0, 586, 74414, 64359, 1267, 0, 65468, 0, - 65731, 0, 0, 3621, 120473, 66666, 64211, 0, 6562, 12928, 0, 1228, 65490, - 11383, 0, 0, 0, 1714, 74406, 0, 0, 0, 0, 66225, 0, 0, 42660, 11436, 2070, - 64, 120694, 0, 10291, 10323, 2826, 0, 0, 0, 42008, 9708, 42710, 0, 42011, - 41999, 0, 12206, 5839, 1702, 1240, 74065, 6286, 0, 0, 65833, 77848, 0, - 1765, 0, 0, 65588, 0, 0, 0, 8401, 0, 42014, 0, 7030, 0, 10479, 64959, - 2852, 0, 0, 0, 0, 195061, 917951, 6963, 0, 12667, 64540, 74786, 10147, - 12935, 0, 0, 0, 0, 0, 78757, 0, 0, 0, 0, 64947, 12467, 2864, 64719, 1148, - 10435, 11462, 41675, 0, 2765, 0, 0, 0, 120719, 0, 0, 66662, 0, 78133, - 9364, 194685, 74416, 0, 0, 77988, 263, 10449, 41288, 0, 41839, 78387, 0, - 77986, 0, 6931, 0, 64355, 7177, 120530, 0, 0, 0, 4262, 10285, 10722, - 42020, 0, 6806, 6992, 42019, 0, 41290, 0, 750, 0, 0, 10163, 63913, 74066, - 7032, 5954, 64931, 4314, 0, 198, 68453, 730, 0, 63907, 77993, 78891, - 13165, 10814, 74171, 42804, 678, 8240, 78015, 0, 41378, 11008, 6938, 0, - 0, 2097, 66246, 120560, 0, 0, 0, 3892, 68632, 0, 6712, 66045, 41470, - 64805, 0, 0, 0, 64801, 0, 497, 12100, 5953, 0, 7796, 0, 43254, 73831, 0, - 10293, 5952, 1281, 0, 0, 0, 10677, 604, 41097, 9182, 1859, 0, 0, 3425, 0, - 0, 2836, 0, 0, 9707, 0, 43202, 0, 0, 65199, 1738, 917818, 0, 2832, 0, - 9670, 12937, 0, 66374, 0, 0, 2822, 0, 4436, 0, 0, 73752, 0, 64872, 0, - 1331, 0, 0, 0, 12708, 0, 5090, 5089, 0, 0, 119109, 0, 0, 319, 118931, - 43479, 9477, 0, 0, 5087, 0, 7640, 96, 5086, 0, 0, 0, 5085, 64286, 0, 0, - 41422, 0, 119901, 42356, 3772, 0, 0, 5011, 0, 0, 0, 0, 0, 127241, 6677, - 7601, 0, 591, 64419, 118953, 0, 0, 118923, 73734, 0, 10939, 6106, 6933, - 41271, 6760, 119903, 4534, 41270, 917962, 0, 65574, 0, 9224, 0, 3671, - 8976, 0, 0, 41275, 6372, 0, 55261, 7963, 6371, 0, 568, 0, 41273, 0, 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, + 2494, 120450, 4861, 74021, 64334, 0, 0, 0, 0, 65102, 8961, 0, 10243, + 10245, 0, 0, 0, 120453, 64821, 9478, 2508, 0, 0, 202, 0, 74131, 1242, 0, + 0, 63940, 0, 64533, 0, 0, 67842, 11990, 0, 63939, 0, 65440, 2504, 0, 0, + 64829, 0, 6943, 0, 5859, 0, 2858, 0, 74294, 0, 74305, 0, 119027, 12992, + 2753, 1936, 74491, 0, 2751, 12662, 2763, 8953, 64701, 10731, 12922, 0, 0, + 0, 0, 0, 0, 74128, 2856, 119910, 47, 119911, 126986, 65858, 0, 0, 0, + 7899, 0, 8417, 65903, 7072, 0, 0, 4033, 0, 66474, 0, 0, 212, 64600, 1903, + 12320, 0, 0, 0, 0, 8915, 2759, 945, 0, 0, 0, 0, 0, 1291, 74828, 0, 0, + 9531, 13155, 8505, 0, 12062, 0, 0, 65487, 0, 41837, 120611, 120432, 0, 0, + 0, 120433, 0, 63935, 73962, 0, 64787, 43524, 0, 64426, 0, 0, 0, 0, 65664, + 64785, 9843, 0, 8674, 0, 0, 0, 0, 12624, 0, 1673, 4811, 0, 5986, 9338, + 3046, 74480, 5985, 917928, 119598, 9820, 0, 12187, 0, 0, 5984, 0, 43308, + 4393, 0, 0, 0, 0, 0, 74826, 64733, 0, 0, 3491, 0, 0, 0, 3514, 65485, 0, + 7492, 0, 0, 0, 7514, 0, 0, 194731, 7502, 7587, 0, 0, 0, 63925, 0, 7610, + 219, 0, 0, 692, 43588, 74433, 41635, 0, 9688, 0, 9535, 0, 0, 0, 0, 0, + 64610, 11804, 0, 0, 7453, 0, 8013, 0, 0, 0, 8895, 5253, 0, 5458, 0, 2866, + 0, 0, 65111, 0, 12018, 120484, 0, 0, 0, 8962, 0, 9641, 66653, 7059, 0, 0, + 9604, 0, 7441, 63826, 0, 118941, 64392, 0, 0, 2844, 0, 41974, 0, 12139, + 0, 0, 0, 3358, 65295, 0, 3104, 0, 0, 0, 0, 5308, 0, 290, 0, 0, 2862, + 2792, 195088, 0, 0, 3268, 66591, 0, 6552, 42367, 7035, 120558, 0, 0, + 1814, 0, 10240, 0, 195092, 0, 119020, 0, 0, 42646, 7606, 2591, 2837, + 4341, 0, 64482, 0, 8163, 65270, 0, 0, 0, 9112, 74431, 863, 9490, 0, 0, + 43323, 120513, 0, 9071, 0, 0, 3654, 0, 9637, 0, 2535, 65504, 7653, 40993, + 0, 66587, 195098, 0, 0, 0, 11006, 12927, 7807, 8073, 0, 10629, 0, 74088, + 3056, 10823, 0, 0, 8762, 10508, 74506, 73770, 63994, 43193, 10737, 3463, + 0, 0, 66633, 8695, 4815, 11322, 5811, 12345, 7049, 0, 5195, 0, 0, 66639, + 0, 0, 0, 0, 0, 120561, 1262, 0, 6561, 19939, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 119907, 64612, 11991, 0, 0, 0, 1502, 0, 0, 9107, 0, 5702, 3655, 0, 8430, + 0, 74132, 0, 0, 74057, 9603, 0, 5254, 120742, 7724, 74388, 74838, 10796, + 5129, 0, 0, 590, 7579, 5614, 5893, 194744, 11720, 0, 11721, 0, 0, 0, + 120541, 66038, 4793, 67851, 11726, 0, 74204, 0, 0, 917600, 894, 300, 0, + 12306, 66235, 0, 0, 0, 2562, 0, 0, 42503, 0, 11652, 0, 0, 119241, 0, 0, + 5096, 5095, 2863, 3424, 0, 10454, 42530, 5094, 119638, 0, 13156, 0, + 10832, 5093, 0, 0, 0, 5092, 10708, 11327, 0, 5091, 176, 0, 9153, 4104, 0, + 0, 1215, 0, 5744, 12272, 9832, 11777, 0, 0, 42881, 0, 8980, 118988, + 67861, 8844, 7433, 0, 0, 4278, 0, 0, 0, 0, 9074, 4348, 0, 65558, 65946, + 8113, 7087, 5255, 1786, 661, 0, 0, 0, 74423, 0, 586, 74414, 64359, 1267, + 0, 0, 0, 65731, 0, 0, 3621, 0, 66666, 0, 0, 6562, 12928, 0, 1228, 65490, + 11383, 0, 0, 0, 1714, 74406, 0, 0, 0, 0, 66225, 0, 0, 0, 11436, 119615, + 64, 0, 0, 10291, 10323, 2826, 0, 0, 0, 42008, 9708, 0, 0, 42011, 41999, + 0, 12206, 5839, 1702, 1240, 74065, 6286, 0, 0, 65833, 0, 0, 1765, 0, 0, + 65588, 0, 0, 0, 8401, 0, 42014, 0, 7030, 0, 10479, 64959, 2852, 0, 0, 0, + 0, 0, 0, 6963, 0, 12667, 0, 74786, 10147, 12935, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 64947, 12467, 2864, 64719, 1148, 10435, 11462, 41675, 0, 2765, 0, + 0, 0, 0, 0, 0, 66662, 0, 0, 9364, 194685, 74416, 0, 0, 119244, 263, + 10449, 41288, 0, 41839, 0, 0, 0, 0, 6931, 0, 64355, 7177, 120530, 0, 0, + 0, 4262, 10285, 10722, 42020, 0, 0, 6992, 42019, 0, 41290, 0, 750, 0, 0, + 10163, 0, 74066, 7032, 5954, 64931, 4314, 0, 198, 0, 730, 0, 0, 0, 0, + 13165, 10814, 74171, 42804, 678, 8240, 118960, 0, 41378, 11008, 6938, 0, + 0, 42812, 66246, 120560, 0, 0, 0, 3892, 0, 0, 0, 66045, 41470, 64805, 0, + 0, 0, 118982, 0, 497, 12100, 5953, 0, 7796, 0, 0, 73831, 0, 10293, 5952, + 1281, 0, 0, 0, 10677, 604, 41097, 9182, 1859, 0, 0, 3425, 0, 0, 2836, 0, + 0, 9707, 0, 43202, 0, 0, 65199, 1738, 0, 0, 2832, 0, 9670, 12937, 0, 0, + 0, 0, 2822, 0, 4436, 0, 0, 73752, 0, 64872, 0, 1331, 0, 0, 0, 12708, 0, + 5090, 5089, 0, 0, 119109, 0, 0, 319, 118931, 0, 9477, 0, 0, 5087, 0, + 7640, 96, 5086, 0, 0, 0, 5085, 64286, 0, 0, 41422, 0, 119901, 42356, + 3772, 0, 0, 5011, 0, 0, 0, 0, 0, 0, 6677, 7601, 0, 591, 64419, 118953, 0, + 0, 118923, 0, 0, 10939, 6106, 6933, 41271, 0, 119903, 4534, 41270, 0, 0, + 65574, 0, 9224, 0, 3671, 8976, 0, 0, 41275, 0, 0, 0, 7963, 42013, 0, 568, + 0, 41273, 0, 0, 0, 0, 9715, 0, 8258, 11753, 74820, 0, 9602, 118919, 42, + 0, 0, 0, 0, 7458, 0, 0, 65385, 0, 0, 11958, 0, 0, 0, 6254, 0, 66336, 8045, 11550, 0, 0, 0, 42858, 11789, 65868, 5557, 917946, 9737, 13109, 0, - 9467, 5558, 8878, 0, 195036, 7451, 6706, 10146, 0, 9086, 64566, 0, 64584, - 7437, 7454, 12594, 0, 68362, 4546, 7731, 0, 119909, 74243, 0, 3805, 0, - 194565, 44001, 41008, 0, 6307, 19949, 0, 7544, 0, 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, 0, 0, 0, 5506, 0, - 1911, 66652, 0, 9961, 8845, 66698, 0, 10792, 8889, 0, 2098, 0, 64751, 0, - 66622, 0, 0, 74364, 0, 0, 0, 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, 0, 0, 0, 4357, 0, 0, 0, 74233, - 9967, 119852, 42860, 119838, 10941, 65721, 6962, 0, 0, 119324, 0, 11014, - 0, 8942, 12000, 69224, 0, 0, 11974, 0, 42772, 127518, 11650, 5013, 0, 0, - 66210, 118914, 6613, 0, 0, 0, 0, 0, 64714, 0, 0, 0, 12120, 43476, 0, - 11024, 74811, 0, 10563, 0, 0, 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, 0, - 3483, 119593, 1989, 0, 0, 9104, 3503, 65375, 0, 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, 0, - 1403, 0, 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, - 0, 12943, 65185, 41869, 12619, 0, 10154, 0, 74439, 2039, 0, 7446, 1684, - 63979, 10974, 458, 120620, 0, 69791, 0, 11916, 65016, 0, 78067, 42115, 0, - 12288, 78057, 0, 1493, 42111, 7553, 4097, 0, 13080, 0, 65808, 6610, 6030, - 8059, 7508, 13131, 0, 0, 0, 8794, 41278, 41629, 12154, 0, 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, 0, 195076, 0, 7405, 10105, 65810, 0, 41632, 7493, 0, 0, 41622, - 0, 0, 119556, 74584, 7632, 9716, 19954, 9805, 5990, 900, 0, 63957, 0, 0, - 3612, 0, 64376, 0, 5389, 0, 0, 65938, 2839, 9621, 582, 0, 74368, 3749, - 6949, 7569, 74061, 0, 0, 6956, 4403, 19962, 65559, 3299, 0, 0, 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, 0, 11963, 43620, 0, 78889, 0, 0, 0, 9881, 43115, 65757, 3415, - 0, 0, 8648, 0, 6741, 43047, 0, 13180, 0, 418, 0, 0, 10295, 10327, 10391, - 41752, 74339, 8641, 41449, 0, 74100, 0, 10911, 6942, 0, 1024, 42849, - 41751, 69776, 8941, 0, 4554, 0, 9023, 11685, 0, 9928, 78617, 0, 11437, - 43741, 0, 120700, 63967, 0, 41206, 120724, 9049, 41185, 43166, 0, 11680, - 0, 11686, 0, 65224, 4565, 4655, 119553, 0, 0, 64523, 10343, 10407, 0, - 66671, 11466, 0, 0, 42890, 0, 12050, 68201, 2860, 0, 0, 0, 42792, 5743, - 10424, 12065, 42872, 0, 0, 0, 8875, 0, 0, 917991, 7531, 12847, 2413, 0, - 78635, 962, 0, 12855, 41196, 42564, 0, 1582, 0, 5508, 0, 0, 0, 10801, 0, - 118798, 0, 7173, 496, 10439, 4313, 64607, 119557, 7860, 0, 906, 42793, - 2842, 6405, 64722, 13132, 798, 64694, 12801, 8406, 1153, 0, 64788, 0, - 8054, 9174, 194749, 917976, 9964, 0, 41611, 4642, 66574, 11556, 0, 0, - 78857, 42089, 78855, 9008, 0, 0, 195096, 42079, 917981, 77924, 42513, 0, - 42842, 73985, 65285, 118974, 127003, 0, 0, 0, 0, 11335, 64069, 42093, - 3920, 0, 0, 0, 0, 4580, 41967, 0, 64384, 0, 119158, 3021, 42004, 0, 0, - 42317, 41998, 0, 6946, 0, 0, 0, 0, 65204, 0, 68113, 42690, 9880, 42010, - 74824, 64589, 10111, 64875, 0, 68399, 43998, 11360, 0, 0, 0, 0, 42149, 0, - 0, 0, 64941, 77919, 0, 0, 0, 55247, 4110, 66005, 6959, 10929, 119110, 0, - 66703, 77921, 8617, 41982, 6025, 69242, 0, 0, 0, 0, 9597, 42099, 43172, - 0, 10117, 0, 0, 41636, 0, 0, 120681, 8301, 0, 0, 187, 0, 65669, 0, 4963, - 0, 127517, 0, 8964, 65676, 65785, 0, 41948, 0, 0, 0, 41942, 65449, 3160, - 10081, 13226, 42121, 42475, 42663, 0, 41766, 0, 65882, 78849, 41760, - 1189, 905, 480, 10985, 41733, 67859, 9629, 6742, 1745, 43625, 73835, - 7888, 0, 0, 0, 42656, 41507, 8806, 7023, 0, 74279, 9447, 78651, 7867, - 69218, 6236, 0, 0, 10505, 0, 12851, 118948, 348, 5474, 0, 3103, 0, 41753, - 0, 0, 0, 78844, 78845, 41739, 78843, 42515, 10931, 41756, 43347, 42560, - 5391, 41746, 119147, 0, 41259, 5561, 74360, 2691, 0, 65553, 7933, 5562, - 69800, 917851, 41262, 0, 64421, 74846, 41251, 0, 0, 3979, 0, 0, 74813, 0, - 0, 0, 0, 118847, 41266, 0, 0, 917630, 10585, 65741, 41737, 9574, 2666, 0, - 41738, 831, 419, 13126, 10716, 0, 42822, 0, 6434, 0, 6939, 7766, 6432, 0, - 0, 916, 769, 41742, 11968, 74805, 6433, 5563, 547, 1943, 6439, 5560, - 4994, 487, 0, 4497, 3754, 127056, 120424, 9039, 0, 41776, 0, 8716, 1595, - 41615, 0, 0, 74260, 0, 43267, 43219, 0, 0, 12185, 0, 0, 68355, 68357, 0, - 42856, 8634, 0, 0, 4209, 120702, 0, 65879, 41538, 65612, 0, 669, 5679, 0, - 69786, 118961, 0, 0, 5678, 11821, 0, 6711, 460, 0, 0, 0, 0, 120747, 0, 0, - 78050, 119022, 0, 0, 0, 7782, 9044, 4974, 11760, 78494, 7577, 65711, - 41912, 1216, 0, 0, 5792, 0, 0, 78501, 0, 42264, 12244, 0, 5683, 0, 0, - 78119, 1549, 0, 0, 120398, 5682, 6206, 8670, 10256, 5680, 917568, 10001, - 0, 69768, 1449, 10241, 78290, 0, 0, 10552, 64342, 41922, 0, 8584, 0, - 5567, 2717, 0, 0, 5564, 42886, 41908, 42882, 5565, 0, 0, 0, 65708, 65709, - 5566, 69803, 65704, 65705, 11904, 42875, 43373, 42539, 5942, 8468, 0, - 10361, 10425, 65697, 65698, 65699, 0, 66598, 0, 64664, 10647, 78702, - 78703, 78690, 457, 78502, 65701, 1934, 43006, 0, 8802, 78710, 65130, - 78706, 78709, 6087, 78705, 78716, 41757, 78711, 8043, 8950, 65694, 64485, - 43534, 10457, 0, 11961, 78725, 78722, 78723, 78720, 78721, 0, 65515, - 9499, 10035, 13069, 0, 0, 9889, 68184, 42806, 0, 7256, 0, 0, 1667, 42161, - 0, 42428, 0, 6934, 0, 10802, 64861, 6556, 78390, 0, 8101, 3610, 0, 41748, - 4995, 955, 65907, 119208, 5350, 64339, 78306, 64549, 10875, 917956, 5477, - 65692, 0, 0, 120397, 12896, 10456, 917954, 0, 3874, 0, 0, 0, 0, 0, 0, - 65603, 0, 65687, 0, 41038, 74009, 119570, 42239, 8536, 78740, 0, 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, - 0, 0, 6370, 0, 7827, 68441, 6965, 0, 0, 13201, 0, 0, 0, 74382, 73781, - 7918, 73988, 0, 0, 917884, 1728, 0, 120710, 178, 12972, 0, 0, 0, 120671, - 0, 0, 78327, 120405, 65690, 0, 0, 119054, 0, 9252, 917889, 4652, 68371, - 0, 0, 0, 13065, 9923, 10806, 0, 11763, 0, 120688, 6723, 78187, 0, 6993, - 0, 0, 8333, 0, 0, 11390, 0, 74464, 0, 0, 74080, 0, 0, 11910, 0, 8278, - 8963, 4034, 0, 0, 65344, 120517, 41747, 0, 0, 8677, 0, 12707, 9350, - 66037, 0, 8836, 12315, 12747, 8300, 0, 0, 7491, 8856, 0, 0, 43150, 0, - 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, 0, 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, 0, 11783, 335, 120227, 64689, - 438, 4510, 5765, 8721, 120233, 119227, 6092, 12840, 43112, 8876, 120231, - 8096, 10284, 0, 0, 0, 10380, 8733, 0, 0, 41602, 0, 0, 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, 0, 41257, 41900, 8675, 10700, 8805, 1742, 0, - 9333, 8202, 0, 0, 0, 0, 0, 73882, 499, 0, 43467, 0, 55290, 0, 1712, 5932, - 77845, 41762, 0, 0, 11967, 1775, 0, 0, 0, 0, 0, 9458, 0, 6470, 9180, - 120380, 43176, 0, 0, 42782, 0, 0, 0, 917912, 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, 194964, 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, 0, - 65310, 65562, 66599, 66722, 0, 8039, 3363, 66594, 43434, 0, 0, 12596, - 66595, 42258, 42570, 5593, 119148, 120711, 0, 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, 64093, 73970, 77930, 0, 0, 6020, 12716, 127112, 12744, 475, - 120394, 13266, 0, 127111, 0, 73926, 0, 10645, 1212, 6543, 0, 8134, 0, - 2913, 73870, 0, 1866, 0, 195095, 0, 8923, 1645, 12059, 66585, 78786, - 3196, 0, 0, 5935, 1250, 127066, 8174, 9787, 6733, 9859, 7916, 9861, 9860, - 5258, 1882, 1892, 6731, 10882, 405, 11454, 73911, 0, 0, 41169, 8939, - 41245, 0, 41170, 1454, 11369, 6477, 12157, 0, 0, 0, 41172, 7855, 0, 0, - 10480, 0, 0, 77936, 8264, 12610, 0, 645, 0, 7609, 40973, 0, 73833, 78249, - 5824, 984, 77918, 10688, 5851, 0, 7729, 73982, 120518, 0, 195086, 43369, - 0, 0, 68415, 0, 4538, 120406, 43141, 0, 0, 74214, 73886, 0, 0, 118902, - 43005, 78448, 9552, 0, 0, 0, 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, 0, 8455, 10082, 11575, 0, - 119566, 0, 12808, 12183, 6145, 0, 64929, 0, 0, 0, 43186, 42509, 0, 3922, - 9187, 0, 0, 0, 119057, 11752, 3353, 9358, 0, 917957, 66680, 120090, - 11747, 7931, 8558, 9795, 68380, 0, 0, 120082, 120081, 120084, 41027, - 120086, 0, 120088, 120087, 7019, 120073, 0, 11751, 120078, 78294, 64657, - 8657, 120048, 8594, 120068, 0, 0, 120069, 120072, 120071, 0, 0, 43154, - 41029, 0, 11332, 65380, 7728, 0, 11294, 0, 66665, 7851, 0, 8375, 8699, 0, - 42524, 0, 9085, 0, 7504, 9327, 6160, 0, 0, 0, 8088, 0, 74012, 0, 0, 4439, - 6926, 0, 12924, 0, 42369, 0, 65491, 65145, 9041, 43559, 64577, 10826, 0, - 11296, 0, 0, 0, 65825, 9577, 68199, 0, 64670, 0, 78056, 6793, 11295, 0, - 78053, 73872, 0, 0, 10902, 0, 0, 78070, 78068, 10472, 2995, 0, 0, 64682, - 2371, 78069, 120808, 259, 1009, 0, 2402, 2333, 6440, 0, 0, 65125, 41244, - 0, 13271, 9103, 41180, 0, 0, 0, 0, 10219, 0, 0, 0, 0, 43178, 127070, - 41261, 119362, 43640, 8613, 0, 118989, 6736, 195092, 41492, 12005, - 917982, 0, 1890, 120056, 0, 0, 0, 7293, 7991, 0, 10578, 0, 78076, 0, - 78077, 0, 0, 78800, 0, 120054, 42668, 6635, 0, 6164, 65170, 0, 0, 0, - 11664, 0, 0, 0, 0, 118812, 0, 0, 0, 9175, 11925, 78045, 9088, 0, 64545, - 1396, 0, 7546, 3847, 0, 0, 4985, 13288, 672, 8098, 43196, 194746, 0, 0, - 0, 74043, 65072, 1577, 11772, 13041, 5928, 4525, 10658, 65911, 1266, - 10180, 0, 0, 12622, 0, 0, 0, 194714, 0, 13310, 773, 19933, 1539, 0, - 126983, 42731, 0, 0, 0, 0, 3051, 5862, 7823, 0, 0, 120411, 3250, 43991, - 0, 66649, 9510, 66237, 0, 0, 41066, 64673, 917963, 917964, 0, 3505, 8707, - 917968, 6725, 917966, 917971, 917972, 3471, 917970, 5479, 882, 6686, - 119584, 11613, 120772, 42754, 0, 0, 0, 0, 0, 0, 0, 3225, 917996, 4433, - 41156, 43973, 43173, 1443, 4381, 0, 0, 10926, 11756, 11757, 64879, + 9467, 5558, 8878, 0, 195036, 7451, 7435, 10146, 0, 9086, 64566, 0, 64584, + 7437, 7454, 12594, 0, 0, 4546, 7731, 0, 917948, 74243, 0, 3805, 0, 0, 0, + 41008, 0, 6307, 19949, 0, 7544, 0, 43525, 0, 0, 10152, 64422, 65091, + 119113, 7602, 64729, 0, 43521, 0, 42302, 0, 43523, 41447, 5559, 0, 8704, + 2397, 5556, 0, 0, 0, 9011, 9630, 0, 0, 0, 5506, 0, 1911, 66652, 0, 12598, + 8845, 66698, 0, 10792, 8889, 0, 6951, 0, 64751, 0, 66622, 0, 0, 74364, 0, + 0, 0, 74365, 7552, 0, 0, 65384, 7223, 4559, 0, 1956, 43138, 7024, 65728, + 64501, 1210, 0, 65175, 10184, 43140, 65727, 0, 0, 0, 38, 8533, 66669, 0, + 0, 0, 0, 4357, 0, 0, 0, 74233, 119846, 119852, 42860, 119838, 10941, + 65721, 6962, 0, 0, 0, 0, 11014, 0, 8942, 12000, 0, 0, 0, 11974, 0, 42772, + 0, 11650, 5013, 0, 0, 66210, 118914, 6613, 0, 0, 0, 0, 0, 64714, 0, 0, 0, + 12120, 0, 0, 11024, 74811, 0, 10563, 0, 0, 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, 0, 0, 3483, 127122, 1989, 0, 0, 9104, 3503, 65375, 0, 0, 42633, 1864, + 0, 74306, 41446, 2540, 7736, 0, 74064, 0, 10521, 0, 42173, 9705, 74124, + 8604, 6955, 10916, 0, 6149, 3887, 19956, 1411, 2824, 0, 10106, 0, 1403, + 0, 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, 0, 0, 0, 0, + 74585, 41391, 0, 917903, 376, 6987, 9221, 0, 0, 8823, 0, 12943, 65185, + 41869, 12619, 0, 10154, 0, 74439, 2039, 0, 7446, 1684, 63979, 10974, 458, + 120620, 0, 0, 0, 11916, 65016, 0, 0, 42115, 0, 12288, 0, 0, 1493, 42111, + 7553, 4097, 0, 13080, 0, 65808, 6610, 6030, 8059, 7508, 41636, 0, 0, 0, + 8794, 41278, 41629, 12154, 0, 41277, 64658, 0, 64380, 6625, 0, 19904, 0, + 0, 0, 65371, 7078, 0, 833, 0, 74592, 0, 10979, 41953, 0, 41434, 6062, 0, + 0, 19916, 6913, 933, 1341, 9842, 0, 65744, 0, 0, 0, 0, 41615, 10105, + 65810, 0, 41632, 7493, 0, 0, 41622, 0, 0, 119556, 74584, 7632, 9716, + 19954, 9805, 5990, 900, 0, 63957, 0, 0, 3612, 0, 64376, 0, 5389, 0, 0, + 65938, 2839, 9621, 582, 0, 74368, 3749, 6949, 7569, 74061, 0, 0, 6956, + 4403, 19962, 65559, 3299, 0, 0, 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, 0, 41183, 12907, 10271, 10287, + 684, 74185, 0, 2854, 119586, 4592, 65755, 0, 0, 11963, 65753, 0, 0, 0, 0, + 0, 9881, 0, 65757, 3415, 0, 0, 8648, 0, 118886, 43047, 0, 13180, 0, 418, + 0, 0, 10295, 10327, 10391, 41752, 74339, 8641, 41449, 0, 0, 0, 10911, + 6942, 0, 1024, 42849, 41751, 0, 8941, 0, 4554, 0, 9023, 11685, 0, 0, 0, + 0, 11437, 0, 0, 120700, 63967, 0, 41206, 120724, 9049, 41185, 43166, 0, + 11680, 0, 11686, 0, 65224, 4565, 4655, 119553, 0, 0, 64523, 10343, 10407, + 0, 66671, 11466, 0, 0, 42890, 0, 12050, 194750, 2860, 0, 0, 0, 42792, + 5743, 10424, 12065, 42872, 0, 0, 0, 8875, 0, 0, 917991, 7531, 12847, + 2413, 0, 0, 962, 0, 12855, 41196, 42564, 0, 1582, 0, 5508, 0, 0, 0, + 10801, 0, 118798, 0, 7173, 496, 10439, 4313, 64607, 119557, 7860, 0, 906, + 42793, 2842, 6405, 64722, 13132, 798, 64694, 12801, 8406, 1153, 0, 64788, + 0, 8054, 9174, 194749, 917976, 0, 0, 41611, 4642, 66574, 11556, 0, 0, 0, + 42089, 0, 9008, 0, 0, 195096, 42079, 917981, 917996, 42513, 0, 42842, + 73985, 0, 118974, 127003, 0, 0, 0, 0, 11335, 64069, 42093, 3920, 0, 0, 0, + 0, 4580, 41967, 0, 64384, 0, 119158, 3021, 42004, 0, 0, 42317, 41998, 0, + 6946, 0, 0, 0, 0, 65204, 0, 68113, 65196, 9880, 42010, 0, 64589, 10111, + 64875, 0, 0, 0, 11360, 0, 0, 0, 0, 42149, 0, 0, 0, 64941, 0, 0, 0, 0, + 65671, 4110, 66005, 6959, 10929, 119110, 0, 66703, 0, 8617, 41982, 6025, + 0, 0, 0, 0, 0, 9597, 42099, 43172, 0, 10117, 0, 0, 41642, 0, 0, 0, 8301, + 0, 0, 187, 0, 65669, 0, 4963, 0, 0, 0, 8964, 65676, 65785, 0, 41948, 0, + 0, 0, 41942, 65449, 3160, 10081, 13226, 42121, 42475, 0, 0, 41766, 0, + 65882, 0, 41760, 1189, 905, 480, 10985, 41733, 67859, 9629, 42436, 1745, + 0, 73835, 7888, 0, 0, 0, 0, 41507, 8806, 7023, 0, 74279, 64540, 0, 7867, + 0, 6236, 0, 0, 10505, 0, 12851, 118948, 348, 5474, 0, 3103, 0, 41753, 0, + 0, 0, 0, 0, 41739, 0, 42515, 10931, 41756, 43347, 42560, 5391, 41746, + 119147, 0, 41259, 5561, 74360, 2691, 0, 65553, 7933, 5562, 0, 0, 41262, + 0, 64421, 74846, 41251, 0, 0, 3979, 0, 0, 74813, 0, 0, 0, 0, 118847, + 41266, 0, 0, 917630, 10585, 65741, 41737, 9574, 2666, 0, 41738, 831, 419, + 13126, 10716, 0, 42822, 0, 6434, 0, 6939, 7766, 6432, 0, 0, 916, 769, + 41742, 11968, 120557, 6433, 5563, 547, 1943, 6439, 5560, 4994, 487, 0, + 4497, 3754, 0, 120424, 9039, 0, 41776, 0, 8716, 1595, 119206, 0, 0, + 74260, 0, 43267, 0, 0, 0, 12185, 0, 0, 0, 0, 0, 42856, 8634, 0, 0, 4209, + 120702, 0, 65879, 41538, 65612, 0, 669, 5679, 0, 0, 118961, 0, 0, 5678, + 11821, 0, 0, 460, 0, 0, 0, 0, 120747, 0, 0, 0, 119022, 0, 0, 0, 7782, + 9044, 4974, 11760, 917547, 7577, 65711, 41912, 1216, 0, 0, 5792, 0, 0, 0, + 0, 42264, 12244, 0, 5683, 0, 0, 0, 1549, 0, 0, 120398, 5682, 6206, 8670, + 74520, 5680, 917568, 10001, 0, 0, 1449, 10241, 0, 0, 0, 10552, 64342, + 41922, 0, 8584, 0, 5567, 2717, 0, 0, 5564, 42886, 41908, 42882, 5565, 0, + 0, 0, 65708, 65709, 5566, 0, 65704, 65705, 11904, 42875, 0, 42539, 5942, + 8468, 0, 10361, 10425, 65697, 65698, 65699, 0, 66598, 0, 64664, 10647, 0, + 0, 0, 457, 0, 65701, 1934, 43006, 0, 8802, 0, 65130, 0, 0, 6087, 0, 0, + 41757, 0, 8043, 8950, 65694, 64485, 43534, 10457, 0, 11961, 119006, 0, 0, + 0, 0, 0, 65515, 9499, 10035, 13069, 0, 0, 9889, 68184, 42806, 0, 7256, 0, + 0, 1667, 42161, 0, 42428, 0, 6934, 0, 10802, 64861, 6556, 0, 0, 8101, + 3610, 0, 41748, 4995, 955, 65907, 119208, 5350, 64339, 0, 64549, 10875, + 917956, 5477, 65692, 0, 0, 0, 12896, 10456, 917954, 0, 3874, 0, 0, 0, 0, + 0, 0, 65603, 0, 65687, 0, 41038, 74009, 119570, 67857, 8536, 0, 0, 0, + 74432, 724, 0, 1455, 0, 7183, 64583, 119233, 0, 4175, 917962, 0, 0, 939, + 0, 43520, 0, 74569, 917958, 0, 917959, 917945, 194704, 10788, 6088, 0, 0, + 190, 0, 12593, 0, 8188, 64408, 0, 4417, 0, 0, 41744, 0, 7827, 0, 6965, 0, + 0, 13201, 0, 0, 0, 74382, 73781, 7918, 73988, 0, 0, 917884, 1728, 0, + 120710, 178, 12972, 0, 0, 0, 120671, 0, 0, 0, 120405, 65690, 0, 0, + 119054, 0, 9252, 917889, 4652, 74259, 0, 0, 0, 13065, 9923, 10806, 0, + 11763, 0, 120688, 0, 119098, 0, 6993, 0, 0, 8333, 0, 0, 0, 0, 74464, 0, + 0, 74080, 0, 0, 11910, 0, 8278, 8963, 4034, 0, 0, 65344, 120517, 41747, + 0, 0, 8677, 0, 12707, 9350, 66037, 0, 8836, 12315, 12747, 8300, 0, 0, + 7491, 8856, 0, 0, 43150, 0, 120404, 65389, 120402, 120403, 10813, 2592, + 12853, 43269, 7263, 120244, 6536, 120238, 120239, 65516, 12321, 120391, + 120388, 120389, 10007, 120246, 9588, 120248, 1596, 120383, 41994, 65801, + 0, 0, 66572, 0, 0, 10613, 8092, 12805, 41928, 40981, 0, 0, 5006, 64328, + 0, 65298, 0, 8825, 74555, 65940, 0, 0, 6107, 0, 119177, 0, 0, 0, 11783, + 335, 120227, 64689, 438, 4510, 5765, 8721, 120233, 119227, 6092, 12840, + 43112, 8876, 120231, 8096, 10284, 0, 0, 0, 10380, 8733, 0, 0, 41602, 0, + 0, 74831, 917901, 0, 73747, 65399, 0, 64591, 42405, 0, 917897, 843, + 11541, 0, 0, 0, 41935, 74496, 41902, 0, 0, 215, 41258, 0, 43159, 1953, + 9579, 41938, 1256, 3910, 9407, 6242, 0, 0, 41257, 41900, 8675, 10700, + 8805, 1742, 0, 9333, 8202, 0, 0, 0, 0, 0, 73882, 499, 0, 0, 0, 126983, 0, + 1712, 5932, 0, 41762, 0, 0, 11967, 1775, 0, 0, 0, 0, 0, 9458, 0, 6470, + 9180, 120380, 43176, 0, 0, 42782, 0, 0, 0, 917912, 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, 0, 917980, 7507, + 0, 43149, 0, 65031, 7961, 1636, 0, 65029, 65024, 0, 12473, 6534, 0, 99, + 98, 97, 120571, 67584, 4049, 0, 0, 7090, 0, 7892, 917969, 10777, 0, + 65310, 65562, 66599, 0, 0, 8039, 3363, 66594, 0, 0, 0, 12596, 66595, + 42258, 42570, 5593, 119148, 120711, 0, 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, 0, 1536, + 64093, 73970, 0, 0, 0, 6020, 12716, 127112, 12744, 475, 120394, 13266, 0, + 127111, 0, 73926, 0, 10645, 1212, 6543, 0, 8134, 0, 2913, 73870, 0, 1866, + 0, 195095, 0, 8923, 1645, 12059, 66585, 0, 3196, 0, 0, 5935, 1250, 0, + 8174, 9787, 9856, 9859, 7916, 9861, 9860, 5258, 1882, 1892, 0, 10882, + 405, 11454, 73911, 0, 0, 41169, 8939, 41245, 0, 41170, 1454, 11369, 6477, + 12157, 0, 0, 0, 41172, 7855, 0, 0, 10480, 0, 0, 0, 8264, 12610, 0, 645, + 0, 7609, 40973, 0, 0, 0, 5824, 984, 0, 10688, 5851, 0, 7729, 73982, + 120518, 0, 195086, 66722, 0, 0, 0, 0, 4538, 120406, 43141, 0, 0, 74214, + 0, 0, 0, 118902, 43005, 0, 9552, 0, 0, 0, 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, 0, 8455, 10082, 11575, + 0, 119566, 0, 12808, 12183, 6145, 0, 64929, 0, 0, 0, 43186, 42509, 0, + 3922, 9187, 0, 0, 0, 119057, 11752, 3353, 9358, 0, 0, 66680, 120090, + 11747, 7931, 8558, 9795, 0, 0, 0, 120082, 120081, 120084, 41027, 120086, + 0, 120088, 120087, 7019, 120073, 0, 11751, 120078, 120077, 64657, 8657, + 120048, 8594, 120068, 0, 0, 120069, 120072, 120071, 0, 0, 43154, 41029, + 0, 11332, 65380, 7728, 0, 11294, 0, 66665, 7851, 0, 0, 8699, 0, 42524, 0, + 9085, 0, 7504, 9327, 6160, 0, 0, 0, 8088, 0, 74012, 0, 0, 4439, 6926, 0, + 12924, 0, 42369, 0, 65491, 65145, 9041, 43559, 64577, 10826, 0, 11296, 0, + 0, 0, 65825, 9577, 120494, 0, 64670, 0, 0, 42159, 11295, 0, 0, 120779, 0, + 0, 10902, 0, 0, 0, 0, 10472, 2995, 0, 0, 0, 2371, 0, 120808, 259, 1009, + 0, 2402, 2333, 6440, 0, 0, 65125, 41244, 0, 13271, 9103, 41180, 0, 0, 0, + 0, 10219, 0, 0, 0, 0, 43178, 127070, 41261, 119362, 917974, 8613, 0, + 118989, 917978, 917979, 41492, 12005, 917982, 0, 1890, 120056, 0, 0, 0, + 7293, 7991, 0, 10578, 0, 118840, 0, 0, 0, 0, 0, 0, 120054, 118815, 6635, + 0, 6164, 65170, 0, 0, 0, 11664, 0, 0, 0, 0, 118812, 0, 0, 0, 9175, 11925, + 0, 9088, 0, 64545, 1396, 0, 7546, 3847, 0, 0, 4985, 13288, 672, 8098, + 43196, 194746, 0, 0, 0, 74043, 65072, 1577, 11772, 0, 5928, 4525, 10658, + 65911, 1266, 10180, 0, 0, 12622, 0, 0, 0, 194714, 0, 13310, 773, 19933, + 1539, 0, 0, 66374, 0, 0, 0, 0, 3051, 5862, 7823, 0, 0, 120411, 3250, + 74020, 0, 66649, 9510, 66237, 0, 0, 41066, 64673, 917963, 917964, 0, + 3505, 8707, 917968, 917965, 917966, 917971, 917972, 3471, 917970, 5479, + 882, 6686, 119584, 11613, 120772, 42754, 0, 0, 0, 0, 0, 0, 0, 3225, 0, + 4433, 41156, 73745, 43173, 1443, 4381, 0, 0, 10926, 11756, 11757, 64879, 917949, 917950, 917947, 13227, 0, 10021, 5160, 1387, 0, 917953, 41418, 0, - 65914, 6721, 217, 917955, 917960, 917961, 10443, 10789, 41158, 119257, - 4274, 0, 41483, 0, 41250, 0, 42179, 0, 5931, 11744, 69232, 0, 41252, - 66682, 0, 119637, 41249, 1366, 64635, 0, 12466, 0, 0, 4397, 0, 0, 41296, - 9545, 41291, 0, 0, 41485, 3511, 41282, 5923, 10400, 0, 0, 760, 0, 12088, - 5786, 0, 42256, 119869, 119861, 417, 41474, 119562, 41565, 0, 5934, - 119867, 66583, 119231, 64877, 0, 64481, 78614, 66013, 41956, 43455, - 126995, 0, 0, 0, 42273, 5819, 0, 917556, 0, 0, 0, 65910, 0, 10246, - 120816, 0, 1237, 10274, 4552, 0, 0, 0, 1375, 66705, 43573, 65260, 42063, - 0, 42811, 10312, 74192, 120794, 7840, 0, 43630, 10252, 0, 0, 43185, 0, - 4396, 0, 119880, 10769, 9676, 119041, 0, 9753, 0, 8944, 0, 0, 10473, 0, - 0, 6072, 43025, 10299, 0, 0, 120608, 66326, 0, 0, 0, 0, 9330, 0, 7222, - 10283, 10315, 10379, 4996, 0, 13281, 66517, 7865, 10087, 78343, 0, 78347, - 0, 0, 7565, 66363, 12952, 64806, 43180, 77928, 68096, 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, 917993, 0, 4315, 12644, 127516, - 77937, 43639, 43343, 0, 917998, 11501, 41177, 0, 0, 917792, 0, 0, 8715, - 0, 41179, 0, 43313, 0, 41176, 0, 994, 0, 8452, 127103, 73966, 0, 0, 5921, - 0, 2597, 0, 5922, 118903, 77943, 4186, 127107, 127106, 127105, 6718, 0, - 4406, 74601, 8480, 9192, 9747, 0, 4413, 0, 42268, 3198, 5924, 5920, 0, - 6921, 78081, 74007, 42869, 8418, 11681, 43169, 10176, 0, 742, 0, 2893, - 10772, 65276, 5937, 1914, 2553, 11682, 6756, 0, 0, 8363, 0, 2993, 7772, - 3916, 0, 120494, 1141, 42407, 8159, 718, 7572, 973, 0, 120718, 3235, - 2415, 43164, 0, 8018, 42333, 74756, 10675, 6937, 42486, 43381, 65390, 0, - 0, 1202, 0, 0, 127037, 0, 0, 0, 78182, 64542, 3260, 73829, 65388, 9945, - 8419, 78042, 6738, 0, 43681, 74193, 2059, 0, 0, 55237, 1431, 0, 66565, - 10821, 0, 12804, 0, 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, 0, 0, 41573, 0, 3931, 120295, 74143, - 0, 0, 0, 0, 11982, 0, 0, 0, 0, 64484, 0, 41167, 0, 41735, 0, 717, 10754, - 0, 0, 0, 0, 63767, 0, 1780, 6936, 0, 0, 819, 10611, 9694, 126978, 0, 0, - 0, 0, 0, 0, 12820, 0, 6578, 7009, 7523, 6922, 74218, 67848, 7525, 3346, - 8339, 0, 0, 575, 268, 78111, 8563, 5754, 120343, 41541, 65565, 8336, - 5936, 7290, 78117, 8337, 13081, 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, 0, 8595, 0, 0, 43703, 13097, 0, 64643, - 13283, 12697, 0, 12381, 3488, 5933, 10033, 73738, 66241, 65570, 0, 12297, - 119153, 1955, 0, 5349, 42538, 0, 0, 65308, 9462, 0, 0, 0, 0, 42736, 0, - 5756, 0, 7638, 41642, 42764, 0, 43109, 7637, 5752, 120600, 0, 73832, 0, - 120635, 0, 78334, 0, 7636, 65171, 9124, 0, 78892, 0, 291, 0, 0, 2027, - 66230, 78142, 78136, 10403, 0, 4640, 64713, 10224, 120429, 42512, 120431, - 120430, 0, 0, 0, 0, 0, 0, 0, 119094, 74213, 7824, 0, 0, 41274, 5778, - 6302, 0, 0, 12680, 119130, 1417, 77889, 194914, 9452, 0, 74393, 11552, 0, - 0, 0, 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, 0, 0, 64728, 0, 78673, - 78674, 1659, 919, 42784, 1671, 195089, 6069, 9219, 195090, 1661, 13120, - 63784, 69819, 10140, 9713, 119143, 0, 0, 0, 2306, 10485, 118943, 6068, - 10612, 195099, 0, 195101, 195078, 41462, 195080, 195079, 5422, 195081, 0, - 0, 0, 10229, 10635, 826, 195083, 195082, 195085, 195084, 195087, 6483, 0, - 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, 0, 77951, - 12066, 0, 385, 4152, 2585, 0, 119068, 3126, 0, 74136, 10957, 0, 43258, 0, - 0, 13157, 0, 0, 3570, 0, 7443, 0, 44006, 6997, 0, 0, 7879, 8739, 11075, - 0, 65216, 0, 69795, 2593, 8463, 7810, 917862, 7839, 119913, 78806, - 119912, 9691, 4411, 78802, 0, 0, 43442, 78799, 65254, 10066, 0, 0, 0, 0, - 13061, 8016, 78687, 19932, 64831, 0, 0, 12390, 119171, 1634, 68115, 0, + 65914, 917957, 217, 917955, 917960, 917961, 10443, 10789, 41158, 119257, + 4274, 0, 41483, 0, 41250, 0, 42179, 0, 5931, 11744, 0, 0, 41252, 66682, + 0, 119637, 41249, 1366, 64635, 0, 12466, 0, 0, 4397, 0, 0, 41296, 9545, + 41291, 0, 0, 41485, 3511, 41282, 5923, 10400, 0, 0, 760, 0, 12088, 5786, + 0, 42256, 119869, 119861, 417, 41474, 119562, 41565, 0, 5934, 119867, + 66583, 119231, 64877, 0, 64481, 0, 0, 41956, 0, 126995, 0, 0, 0, 42273, + 5819, 0, 917556, 0, 0, 0, 65910, 0, 10246, 0, 0, 1237, 10274, 4552, 0, 0, + 0, 1375, 66705, 43573, 65260, 42063, 0, 42811, 10312, 74192, 120794, + 7840, 0, 64890, 10252, 0, 0, 43185, 0, 4396, 0, 119880, 10769, 10331, + 119041, 0, 9753, 0, 8944, 0, 0, 10473, 0, 0, 6072, 43025, 10299, 0, 0, + 120608, 119874, 0, 0, 0, 0, 9330, 0, 7222, 10283, 10315, 10379, 4996, 0, + 13281, 66517, 7865, 10087, 0, 0, 119092, 0, 0, 7565, 66363, 12952, 64806, + 43180, 0, 68096, 0, 0, 74288, 622, 74023, 885, 64772, 1602, 0, 0, 852, 0, + 12160, 0, 10212, 65435, 0, 12071, 9609, 12156, 917983, 917984, 43586, + 11035, 10411, 917988, 10255, 10263, 10279, 4194, 10375, 917993, 0, 4315, + 12644, 917997, 917994, 917995, 43343, 0, 917998, 917999, 41177, 0, 0, + 917792, 0, 0, 8715, 0, 41179, 0, 43313, 0, 41176, 0, 994, 0, 8452, + 127103, 73966, 0, 0, 5921, 0, 2597, 0, 5922, 118903, 127109, 4186, + 127107, 127106, 127105, 73973, 0, 4406, 74601, 8480, 0, 9747, 0, 4413, 0, + 42268, 3198, 5924, 5920, 0, 6921, 0, 74007, 42869, 8418, 11681, 43169, + 10176, 0, 742, 0, 2893, 10772, 65276, 5937, 1914, 2553, 11682, 0, 0, 0, + 8363, 0, 2993, 7772, 3916, 0, 0, 1141, 42407, 8159, 718, 7572, 973, 0, + 120718, 3235, 2415, 43164, 0, 8018, 42333, 74756, 10675, 6937, 42486, 0, + 65390, 0, 0, 1202, 0, 0, 127037, 0, 0, 0, 0, 64542, 3260, 73829, 65388, + 0, 8419, 0, 127036, 0, 0, 74193, 0, 0, 0, 0, 1431, 0, 66565, 10821, 0, + 12804, 0, 8229, 1235, 3307, 11472, 0, 0, 4544, 0, 0, 0, 1740, 0, 8758, + 985, 12882, 64511, 0, 12068, 0, 0, 10141, 0, 63761, 8785, 4476, 0, 63763, + 12655, 8907, 0, 0, 0, 0, 0, 119572, 10665, 64616, 41572, 0, 0, 0, 41573, + 0, 3931, 0, 74143, 0, 0, 0, 0, 11982, 0, 0, 0, 0, 64484, 0, 41167, 0, + 41735, 0, 717, 10754, 0, 0, 0, 0, 63767, 0, 1780, 6936, 0, 0, 819, 10611, + 9694, 126978, 0, 0, 0, 0, 0, 0, 12820, 0, 6578, 7009, 7523, 6922, 74218, + 67848, 7525, 3346, 8339, 0, 0, 575, 268, 0, 8563, 0, 120343, 41541, + 65565, 8336, 5936, 7290, 0, 8337, 13081, 308, 11388, 7522, 120721, 0, + 65466, 11090, 6953, 0, 120346, 0, 120345, 5926, 0, 0, 0, 0, 0, 0, 9038, + 7887, 0, 7830, 11651, 13093, 64002, 0, 65742, 0, 119597, 11590, 0, 74048, + 0, 8595, 0, 0, 0, 13097, 0, 64643, 13283, 12697, 0, 120621, 3488, 5933, + 10033, 73738, 66241, 65570, 0, 12297, 119153, 1955, 0, 5349, 42538, 0, 0, + 65308, 9462, 0, 0, 0, 0, 0, 0, 5831, 0, 7638, 0, 42764, 0, 43109, 7637, + 11957, 120600, 0, 0, 0, 0, 0, 0, 0, 7636, 65171, 9124, 0, 120331, 0, 291, + 0, 0, 2027, 66230, 0, 0, 10403, 0, 4640, 64713, 10224, 120429, 42512, + 120431, 120430, 0, 0, 0, 0, 0, 0, 0, 119094, 74213, 7824, 0, 0, 41274, + 5778, 6302, 0, 0, 12680, 119130, 1417, 0, 194914, 9452, 0, 0, 11552, 0, + 0, 0, 65391, 0, 10172, 65453, 120408, 41264, 120410, 6426, 4641, 9179, + 64819, 64906, 41255, 42036, 41469, 41269, 120412, 41267, 4646, 120425, + 865, 42034, 120426, 120421, 4645, 42033, 120422, 0, 0, 64728, 0, 0, 0, + 1659, 919, 42784, 1671, 195089, 6069, 9219, 195090, 1661, 13120, 63784, + 195094, 10140, 9713, 119143, 0, 0, 0, 2306, 10485, 118943, 6068, 10612, + 195099, 0, 195101, 195078, 41462, 195080, 195079, 5422, 195081, 0, 0, 0, + 10229, 10635, 826, 195083, 195082, 195085, 195084, 195087, 6483, 0, 1808, + 7848, 0, 8100, 0, 0, 0, 13301, 0, 9667, 0, 0, 0, 11003, 9904, 0, 0, + 120690, 9144, 10921, 0, 0, 9840, 65131, 917560, 0, 10313, 0, 0, 64320, + 10265, 0, 10962, 118970, 43008, 8945, 0, 0, 41, 195072, 1792, 120515, + 195073, 8655, 195075, 0, 0, 12066, 0, 385, 4152, 2585, 0, 0, 3126, 0, + 74136, 10957, 0, 0, 0, 0, 13157, 0, 0, 3570, 0, 7443, 0, 0, 6997, 0, 0, + 7879, 8739, 11075, 0, 65216, 0, 0, 2593, 8463, 7810, 917862, 7839, + 119913, 0, 917860, 9691, 4411, 917847, 0, 0, 0, 0, 65254, 10066, 0, 0, 0, + 0, 13061, 8016, 0, 19932, 64831, 0, 0, 12390, 119171, 1634, 68115, 0, 11056, 0, 119925, 0, 41165, 11328, 12450, 0, 41166, 0, 12456, 119914, - 171, 5941, 12452, 917544, 12458, 12531, 78779, 43013, 63800, 74162, 0, - 120483, 9969, 0, 12454, 63806, 42132, 12063, 78425, 78424, 3230, 0, 0, 0, - 5209, 297, 5810, 8522, 8415, 0, 78429, 78428, 7077, 2497, 0, 960, 74156, - 6981, 0, 12938, 4292, 0, 74815, 10512, 0, 74814, 78875, 127505, 78876, - 2503, 73778, 1762, 69794, 2495, 78873, 5844, 78874, 118838, 0, 12654, - 4663, 1899, 78877, 2507, 64121, 8726, 65594, 0, 0, 0, 8892, 0, 0, 0, 0, - 5782, 420, 0, 0, 120462, 10797, 63794, 0, 0, 64814, 63796, 77965, 0, - 66581, 119204, 41608, 0, 0, 63792, 4659, 120788, 0, 43676, 0, 0, 0, 0, 0, - 329, 77968, 0, 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, 0, 1172, 69799, 6786, 43601, 120476, 74126, 5603, - 0, 4473, 0, 194823, 0, 65347, 65346, 65345, 0, 0, 5347, 69802, 0, 73868, - 118944, 10588, 0, 0, 63755, 0, 5343, 78422, 0, 4555, 5341, 0, 0, 0, 5351, - 0, 43104, 65244, 917892, 64541, 42519, 74472, 0, 0, 74765, 917888, 0, - 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, 0, 63856, 0, 0, 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, 0, 69780, 0, 0, 0, - 0, 9005, 1225, 6630, 0, 0, 0, 0, 8847, 0, 65876, 5535, 8329, 74590, 0, 0, - 0, 0, 3127, 2595, 65713, 42013, 0, 5607, 41089, 0, 0, 74256, 2665, 11304, - 0, 74200, 4970, 8764, 120459, 8934, 0, 41566, 4492, 0, 65011, 41090, 0, - 0, 1188, 7254, 1100, 0, 0, 41081, 2912, 11749, 69792, 0, 0, 3572, 10023, - 4959, 13079, 0, 0, 9729, 0, 0, 0, 43361, 0, 0, 11803, 7996, 9907, 41450, - 13304, 0, 127260, 41451, 0, 11095, 8273, 127533, 3451, 0, 972, 41453, 0, - 0, 73883, 0, 73945, 0, 3455, 19955, 9538, 0, 69807, 0, 0, 0, 0, 11396, 0, - 11019, 0, 0, 0, 120507, 41078, 0, 261, 5927, 7791, 0, 0, 0, 10696, 0, - 6073, 9838, 118920, 0, 6075, 0, 282, 0, 6437, 74078, 0, 65861, 0, 0, 0, - 0, 3474, 118787, 0, 120655, 6081, 0, 0, 74076, 78879, 0, 0, 0, 0, 0, - 8751, 11499, 120273, 7816, 12636, 4665, 12628, 4670, 120271, 120272, 0, - 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, 0, 120257, 120258, 120259, 12941, 42661, 120254, 120255, 120256, - 12301, 120266, 69820, 41102, 66604, 120262, 120263, 120264, 1017, 66600, - 523, 505, 1447, 74436, 0, 0, 0, 8608, 42789, 0, 0, 0, 119196, 11307, - 66707, 917871, 0, 11745, 7919, 0, 1641, 0, 0, 8966, 0, 0, 5908, 0, 0, - 6744, 0, 1699, 74191, 74843, 0, 0, 6306, 10169, 0, 119251, 118939, 3766, - 2389, 120456, 120455, 6611, 257, 43170, 13153, 0, 42386, 0, 9436, 2599, - 0, 6496, 9449, 5930, 11476, 11033, 11447, 0, 5622, 120436, 8477, 3760, - 1718, 9442, 66433, 3776, 0, 41435, 4352, 0, 2435, 120809, 5621, 0, 4201, - 3778, 4203, 4202, 4205, 4204, 120447, 3768, 68142, 765, 41440, 3764, - 8473, 6373, 8469, 120438, 12947, 4564, 0, 0, 74271, 73753, 8374, 0, 0, - 6829, 5225, 0, 0, 0, 0, 119615, 0, 74793, 5626, 73807, 11771, 0, 0, 0, 0, - 5353, 5625, 74179, 0, 0, 1010, 64572, 41780, 42623, 64277, 0, 6952, 0, - 120752, 78762, 2590, 5629, 65552, 7551, 10325, 5632, 10471, 120038, + 171, 5941, 12452, 917544, 12458, 12531, 0, 43013, 63800, 74162, 0, + 120483, 194920, 0, 12454, 63806, 42132, 12063, 195077, 0, 3230, 0, 0, 0, + 5209, 297, 5810, 8522, 8415, 0, 0, 0, 7077, 2497, 0, 960, 74156, 6981, 0, + 12938, 4292, 0, 74815, 10512, 0, 74814, 0, 0, 0, 2503, 73778, 1762, + 73833, 2495, 0, 5844, 119124, 118838, 0, 12654, 4663, 1899, 0, 2507, 0, + 8726, 65594, 0, 0, 0, 8892, 0, 0, 0, 0, 5782, 420, 0, 0, 120462, 10797, + 63794, 0, 0, 0, 63796, 118965, 0, 66581, 119205, 41608, 0, 0, 0, 4659, + 120788, 0, 0, 0, 0, 0, 0, 0, 329, 120472, 0, 917548, 0, 0, 41188, 13244, + 120466, 42167, 0, 0, 5380, 0, 0, 1155, 11365, 43126, 0, 0, 65684, 0, + 5601, 65192, 42765, 63752, 0, 7987, 0, 1172, 0, 0, 43601, 120476, 74126, + 5603, 0, 4473, 0, 194823, 0, 65347, 65346, 65345, 0, 0, 5347, 0, 0, + 73868, 118944, 10588, 0, 0, 63755, 0, 5343, 120473, 0, 4555, 5341, 0, 0, + 0, 5351, 0, 43104, 65244, 917892, 64541, 42519, 74472, 0, 0, 74765, + 917888, 0, 6638, 0, 65113, 271, 74180, 65370, 8835, 65368, 12653, 65366, + 42172, 41086, 65363, 65362, 65361, 11912, 65359, 11323, 65357, 11800, + 65355, 5345, 65353, 65352, 65351, 761, 65349, 19959, 0, 0, 0, 0, 0, + 64647, 0, 0, 4699, 0, 0, 0, 0, 64605, 0, 0, 0, 4916, 0, 380, 10958, + 66563, 917906, 0, 9773, 13167, 12918, 41096, 73980, 0, 917898, 917893, + 10684, 0, 917896, 0, 7946, 12541, 8182, 0, 0, 0, 0, 0, 0, 9005, 1225, + 6630, 0, 0, 0, 0, 8847, 0, 65876, 5535, 8329, 74590, 0, 0, 0, 0, 3127, + 2595, 65713, 0, 0, 5607, 41089, 0, 0, 74256, 2665, 11304, 0, 74200, 4970, + 8764, 120459, 8934, 0, 41566, 4492, 0, 65011, 41090, 0, 0, 1188, 7254, + 1100, 0, 0, 41081, 2912, 11749, 0, 0, 0, 3572, 10023, 4959, 13079, 0, 0, + 9729, 0, 0, 0, 0, 0, 0, 11803, 7996, 9907, 41450, 13304, 0, 0, 41451, 0, + 0, 8273, 0, 3451, 0, 972, 41453, 0, 0, 73883, 0, 73945, 0, 3455, 19955, + 9538, 0, 0, 0, 0, 0, 0, 11396, 0, 11019, 0, 0, 0, 120507, 41078, 0, 261, + 5927, 7791, 0, 0, 0, 10696, 0, 6073, 9838, 118920, 0, 6075, 0, 282, 0, + 6437, 74078, 0, 65861, 0, 0, 0, 0, 3474, 118787, 0, 120655, 6081, 0, 0, + 74076, 0, 0, 0, 0, 0, 0, 8751, 12623, 120273, 7816, 12636, 4665, 12628, + 4670, 120271, 120272, 0, 9642, 10912, 958, 0, 11387, 0, 4666, 0, 4915, 0, + 4669, 0, 68099, 13287, 4664, 10836, 120550, 0, 0, 0, 43595, 7450, 0, + 917875, 8664, 9697, 3606, 917873, 0, 0, 64815, 1063, 120250, 120251, + 9772, 7255, 8886, 1389, 0, 120257, 120258, 120259, 12941, 120253, 120254, + 120255, 120256, 12301, 120266, 120267, 41102, 66604, 120262, 120263, + 120264, 1017, 66600, 523, 505, 1447, 74436, 0, 0, 0, 8608, 42789, 0, 0, + 0, 119196, 11307, 66707, 917871, 0, 11745, 7919, 0, 1641, 0, 0, 8966, 0, + 0, 5908, 0, 0, 74562, 0, 1699, 74191, 74843, 0, 0, 6306, 10169, 0, + 119251, 0, 3766, 120457, 120456, 120455, 6611, 257, 43170, 13153, 0, + 42386, 0, 9436, 2599, 0, 6496, 9449, 5930, 11476, 11033, 11447, 0, 5622, + 120436, 8477, 3760, 1718, 9442, 66433, 3776, 0, 41435, 4352, 0, 2435, + 120809, 5621, 0, 4201, 3778, 4203, 4202, 4205, 4204, 120447, 3768, 68142, + 765, 41440, 3764, 8473, 120440, 8469, 120438, 12947, 4564, 0, 0, 74271, + 73753, 0, 0, 0, 0, 5225, 0, 0, 0, 0, 0, 0, 74793, 5626, 73807, 11771, 0, + 0, 0, 0, 5353, 5625, 74179, 0, 0, 1010, 64572, 0, 42623, 64277, 0, 6952, + 0, 120752, 119003, 2590, 5629, 65552, 7551, 10325, 5632, 10471, 120038, 120027, 120028, 120025, 5628, 120031, 970, 120029, 4772, 2400, 5627, - 120017, 120018, 120023, 64275, 120021, 10961, 0, 203, 0, 0, 0, 0, 78350, - 0, 64378, 42054, 0, 0, 554, 119649, 11358, 0, 12182, 42048, 11065, 0, - 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, 0, 1129, - 0, 0, 65900, 1986, 7846, 78804, 8661, 0, 65255, 0, 3845, 4490, 118969, - 6649, 74400, 1456, 7530, 11977, 7249, 8366, 0, 7756, 12342, 0, 51, 41516, - 0, 8570, 9568, 917863, 456, 7026, 8145, 1168, 9251, 9082, 0, 64055, - 42781, 3866, 12323, 41512, 73805, 68121, 0, 41494, 0, 4660, 0, 10405, 0, - 78803, 0, 0, 42040, 73918, 119627, 7944, 41454, 12605, 0, 42205, 41455, - 236, 64051, 78867, 8214, 0, 0, 0, 41457, 0, 119589, 1969, 2384, 8097, - 917864, 0, 0, 78029, 8766, 0, 78079, 5854, 0, 10583, 0, 119989, 0, 10416, - 917869, 3872, 917868, 0, 8429, 0, 0, 2838, 917867, 0, 0, 0, 0, 0, 0, 0, - 11096, 120813, 10553, 1662, 8483, 0, 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, 0, 78886, 0, - 0, 74229, 66593, 6438, 0, 9109, 78882, 1289, 64599, 0, 0, 0, 65507, 2447, - 0, 0, 0, 0, 0, 0, 6334, 0, 0, 19937, 0, 0, 0, 5675, 254, 0, 0, 0, 42425, - 8918, 64003, 5716, 42312, 0, 0, 6972, 42826, 0, 42464, 120567, 0, 0, - 74796, 64400, 64693, 0, 77861, 65429, 9515, 4435, 0, 42522, 0, 0, 11785, - 0, 64671, 41978, 1412, 4594, 1391, 10536, 8067, 9901, 7775, 0, 0, 74588, - 120748, 3140, 0, 7960, 43271, 0, 12518, 10909, 127508, 1428, 12472, 0, 0, - 7699, 12393, 0, 0, 0, 74518, 8223, 0, 4261, 0, 0, 0, 0, 0, 0, 0, 0, - 43419, 0, 64554, 10574, 3878, 0, 42352, 1752, 73785, 0, 42506, 0, 10199, - 0, 0, 0, 65919, 0, 6695, 720, 324, 0, 0, 43406, 0, 1464, 40985, 0, 7974, - 0, 43474, 0, 64488, 0, 0, 64041, 74787, 0, 78865, 0, 65597, 0, 78863, 0, - 1302, 0, 78861, 0, 0, 0, 5204, 74774, 43404, 43396, 0, 3995, 68360, - 65608, 3714, 0, 0, 0, 10999, 11750, 0, 43251, 68660, 43301, 0, 120557, - 8130, 8672, 10845, 11964, 0, 0, 0, 0, 68455, 42863, 73839, 0, 0, 0, 0, 0, - 0, 468, 612, 0, 64401, 66448, 68376, 0, 1674, 0, 5823, 0, 12280, 0, 540, + 120017, 120018, 120023, 64275, 120021, 10961, 0, 203, 0, 0, 0, 0, 0, 0, + 64378, 42054, 0, 0, 554, 119649, 11358, 0, 12182, 42048, 11065, 0, 73891, + 0, 0, 5694, 7689, 74528, 9323, 4325, 3047, 10317, 175, 0, 0, 74605, 0, 0, + 1243, 42154, 5431, 6652, 0, 0, 0, 0, 68118, 0, 1129, 0, 0, 65900, 1986, + 7846, 0, 8661, 0, 65255, 0, 3845, 4490, 0, 6649, 74400, 1456, 7530, + 11977, 7249, 8366, 0, 7756, 12342, 0, 51, 41516, 0, 8570, 9568, 0, 456, + 7026, 8145, 1168, 9251, 9082, 0, 64055, 42781, 3866, 12323, 41512, 73805, + 68121, 0, 41494, 0, 4660, 0, 10405, 0, 0, 0, 0, 42040, 73918, 119627, + 7944, 41454, 12605, 0, 0, 41455, 236, 0, 0, 8214, 0, 0, 0, 41457, 0, + 119589, 1969, 2384, 8097, 0, 0, 0, 0, 8766, 0, 917863, 5854, 0, 10583, 0, + 119989, 0, 10416, 917869, 3872, 0, 0, 8429, 0, 0, 2838, 917867, 0, 0, 0, + 0, 0, 0, 0, 917864, 120813, 10553, 1662, 8483, 0, 43605, 5892, 917868, 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, 0, 10357, 0, 8170, 1704, 8556, 0, + 9659, 0, 0, 0, 9556, 0, 4503, 11353, 9647, 0, 0, 0, 0, 0, 0, 0, 0, 74229, + 66593, 6438, 0, 9109, 119565, 1289, 64599, 0, 0, 0, 65507, 2447, 0, 0, 0, + 0, 0, 0, 73750, 0, 0, 19937, 0, 0, 0, 5675, 254, 0, 0, 0, 42425, 8918, + 64003, 5716, 42312, 0, 0, 6972, 42826, 0, 42464, 120567, 0, 0, 74796, + 64400, 64693, 0, 0, 65429, 9515, 4435, 0, 0, 0, 0, 11785, 0, 64671, + 41978, 1412, 4594, 1391, 10536, 8067, 9901, 7775, 0, 0, 74588, 120748, + 3140, 0, 7960, 43271, 0, 12518, 10909, 0, 1428, 12472, 0, 0, 7699, 12393, + 0, 0, 0, 74518, 9063, 0, 4261, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64554, + 10574, 3878, 0, 42352, 1752, 73785, 0, 42506, 0, 10199, 0, 0, 0, 65919, + 0, 0, 720, 324, 0, 0, 0, 0, 1464, 40985, 0, 7974, 0, 68123, 0, 64488, 0, + 0, 0, 74787, 0, 0, 0, 65597, 0, 0, 0, 1302, 0, 0, 0, 0, 0, 5204, 74774, + 0, 0, 0, 3995, 0, 65608, 3714, 0, 0, 0, 10999, 11750, 0, 127004, 0, 0, 0, + 0, 8130, 8672, 10845, 11964, 0, 0, 0, 0, 0, 42863, 73839, 0, 0, 0, 0, 0, + 0, 468, 612, 0, 64401, 66448, 0, 0, 1674, 0, 5823, 0, 12280, 0, 540, 74564, 0, 0, 8432, 0, 11073, 0, 64316, 0, 0, 820, 41741, 0, 120667, 0, 64684, 126992, 3359, 7800, 0, 65177, 6226, 353, 12396, 0, 119612, 64742, - 0, 120282, 0, 0, 12412, 19941, 0, 120277, 78847, 1884, 9481, 42418, 0, - 41157, 0, 1195, 64898, 7924, 0, 41151, 2010, 0, 41328, 42344, 0, 12409, - 0, 4360, 127009, 9739, 0, 74392, 73921, 0, 42521, 8539, 0, 0, 0, 0, 4788, - 0, 0, 65734, 0, 64353, 0, 13075, 74429, 0, 64569, 43532, 10837, 2492, 0, - 118901, 68637, 41136, 64351, 11813, 9649, 41154, 119617, 5128, 4038, - 41143, 65604, 64859, 41592, 6771, 1648, 5435, 0, 6734, 41343, 119848, - 65439, 12709, 6986, 119846, 0, 0, 41349, 0, 12581, 10374, 5175, 0, 73806, - 10254, 0, 10278, 10262, 77950, 41346, 0, 607, 0, 0, 0, 12923, 10314, - 10282, 65477, 10378, 120297, 40976, 8265, 0, 119834, 40975, 5840, 42838, - 0, 40978, 0, 119840, 0, 0, 0, 66444, 10538, 0, 2550, 119836, 6779, 0, 0, - 3525, 6824, 118886, 0, 0, 5619, 65822, 0, 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, 0, 1338, 120581, 0, 12739, 4603, 3084, 0, 0, 9858, 6037, 0, - 3974, 78213, 10290, 0, 3083, 10322, 0, 0, 0, 41036, 0, 0, 43321, 65606, - 0, 41032, 42388, 0, 64700, 10011, 1445, 40961, 0, 194893, 0, 40960, 0, - 194891, 0, 40963, 64952, 10402, 0, 0, 0, 10603, 0, 0, 0, 0, 6714, 10083, - 127069, 194895, 78367, 0, 0, 0, 9073, 42585, 64302, 10704, 65030, 4787, - 0, 74829, 0, 65423, 0, 0, 9570, 0, 9525, 2689, 917626, 65426, 0, 917624, - 43740, 0, 40966, 917623, 13286, 3998, 42598, 42596, 503, 0, 8735, 2690, - 66488, 42836, 194913, 41954, 917617, 1652, 772, 6688, 8310, 65428, 3487, - 43416, 3585, 10194, 43320, 119159, 0, 194874, 6468, 41976, 9720, 917606, - 11767, 41970, 0, 5836, 12358, 0, 4355, 9048, 12180, 65027, 64680, 65025, - 43699, 0, 41488, 0, 8527, 194917, 12362, 12435, 12360, 41053, 3266, 0, - 12356, 8616, 41466, 0, 0, 11450, 0, 3638, 12354, 0, 3216, 0, 2358, - 119069, 8633, 0, 0, 119182, 69244, 0, 0, 11759, 0, 6368, 74823, 0, 41423, - 8078, 10504, 0, 41698, 42237, 0, 7002, 0, 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, 0, 2041, 9178, 9672, 41427, 43541, - 43317, 0, 0, 0, 41424, 917598, 120546, 0, 0, 0, 41417, 1261, 0, 0, 12102, - 119662, 41401, 0, 0, 0, 0, 0, 42290, 3275, 0, 42329, 0, 0, 0, 0, 0, - 120725, 10989, 74234, 0, 10598, 7410, 2669, 903, 0, 2920, 0, 127232, - 74603, 64504, 19928, 0, 0, 3917, 0, 11732, 0, 0, 41448, 41461, 0, 0, - 917558, 0, 8819, 12663, 0, 41184, 74014, 232, 74835, 120646, 9168, 65786, - 0, 0, 0, 9094, 0, 11758, 68425, 0, 1064, 42467, 0, 10115, 19924, 0, 0, - 7862, 64551, 13224, 8516, 41862, 66650, 7561, 78618, 69793, 1878, 0, 0, - 2911, 0, 41178, 5427, 64823, 0, 0, 12617, 41174, 0, 41458, 0, 41463, - 42413, 11292, 2406, 775, 0, 65584, 0, 6074, 9618, 194903, 0, 43440, 0, - 194901, 41436, 3656, 0, 194899, 41456, 0, 1599, 11333, 0, 6703, 8513, 0, - 1613, 0, 68456, 12598, 0, 0, 78745, 74500, 41460, 10145, 10542, 9937, - 78746, 0, 9905, 0, 65730, 0, 120374, 8427, 120375, 55246, 120376, 0, - 11497, 64687, 74008, 120371, 3871, 0, 0, 9111, 5741, 0, 194846, 120366, - 119111, 120745, 0, 120368, 0, 11648, 0, 0, 120364, 41587, 120365, 0, - 74322, 42113, 0, 0, 12172, 0, 74530, 65298, 65723, 194840, 73871, 65724, - 7928, 120354, 0, 41595, 73730, 0, 42118, 73830, 66042, 10355, 0, 7875, 0, - 41598, 3993, 0, 1545, 40971, 536, 0, 43029, 0, 0, 65173, 65286, 0, 0, 0, - 0, 0, 0, 41375, 5402, 0, 0, 1687, 120503, 0, 0, 78194, 64326, 40969, - 10526, 78753, 8323, 40968, 1339, 11731, 78756, 0, 65460, 12242, 0, 8020, - 10843, 11554, 0, 0, 8266, 41006, 65722, 0, 10710, 0, 118942, 67667, - 64567, 119155, 195091, 0, 119636, 67857, 120687, 0, 0, 11755, 66305, 0, - 0, 10917, 120767, 0, 11272, 2040, 41247, 41326, 195060, 1741, 42370, - 1227, 0, 0, 11413, 0, 0, 5283, 1586, 4978, 0, 1984, 0, 0, 120651, 40984, - 0, 9373, 0, 12916, 6284, 0, 41663, 0, 0, 0, 9237, 9385, 41648, 0, 0, 0, - 41666, 1830, 73783, 2056, 41287, 0, 0, 0, 42219, 0, 0, 41987, 41676, 0, - 120823, 0, 41670, 0, 0, 2796, 55291, 11683, 9902, 74521, 0, 11451, 0, 0, - 42631, 2359, 0, 67844, 74164, 41238, 548, 11405, 13133, 64368, 0, 0, 0, - 397, 43622, 42139, 9547, 9590, 0, 1614, 43661, 64356, 66307, 6651, 1358, - 0, 428, 9620, 1466, 78112, 10982, 118831, 1333, 0, 407, 6425, 0, 74253, - 0, 0, 0, 5804, 11976, 8554, 0, 0, 0, 9057, 42294, 41218, 0, 0, 78137, - 1883, 10952, 8048, 0, 41225, 0, 118955, 0, 0, 0, 4407, 0, 65809, 119074, - 194821, 8448, 68122, 74183, 0, 12675, 12659, 0, 42363, 120624, 194824, - 55273, 10766, 12012, 2386, 64732, 9170, 917821, 9123, 64585, 120500, 0, - 43367, 42051, 0, 4164, 9081, 0, 120569, 42049, 42042, 8709, 0, 0, 120637, - 42419, 0, 42047, 0, 0, 8470, 11807, 65897, 577, 0, 0, 74300, 0, 127308, - 74840, 0, 0, 0, 0, 8736, 1414, 42643, 9683, 43486, 74344, 0, 2536, 0, - 66330, 0, 0, 0, 0, 0, 0, 0, 66317, 917612, 66315, 2106, 0, 11273, 0, - 43004, 7541, 0, 0, 961, 64307, 66324, 64906, 0, 3106, 65917, 41284, 1696, - 0, 891, 12105, 0, 42624, 12802, 3264, 8824, 13268, 43003, 10936, 0, 0, 0, - 0, 0, 0, 2322, 0, 0, 11449, 0, 42868, 41285, 3547, 0, 0, 0, 0, 43216, - 6089, 78682, 0, 120578, 4170, 1029, 0, 127036, 119224, 42374, 0, 744, 0, - 0, 0, 65823, 0, 0, 3551, 0, 0, 4623, 55268, 0, 4598, 0, 65136, 0, 0, 0, - 10851, 0, 6179, 0, 6180, 0, 11952, 120778, 78648, 11972, 78646, 78647, - 78644, 78645, 177, 78643, 6176, 120580, 0, 0, 6177, 9020, 78652, 78653, - 6178, 120249, 120242, 0, 67673, 7518, 8754, 0, 120237, 74551, 43081, 0, - 0, 9136, 120240, 4401, 41280, 0, 8974, 2308, 0, 74149, 0, 2318, 0, 66361, - 8198, 0, 64360, 12601, 42536, 65266, 120827, 74307, 0, 6970, 5404, 43332, - 3667, 7936, 12925, 126989, 6385, 0, 0, 118949, 10874, 65505, 0, 0, 42053, - 2075, 42057, 11083, 42052, 0, 0, 67651, 0, 9665, 0, 0, 13181, 0, 0, 0, 0, - 74148, 0, 0, 120225, 120229, 120224, 74172, 41145, 0, 0, 0, 41148, 8683, - 7594, 127519, 0, 119090, 10869, 43458, 41146, 0, 11441, 0, 3512, 119633, - 0, 8103, 0, 0, 65184, 11780, 41563, 42796, 0, 119106, 41544, 65146, 0, 0, - 0, 0, 19942, 0, 118908, 7988, 10436, 74273, 3271, 73804, 64711, 0, 0, 0, - 0, 3804, 13070, 11557, 42044, 0, 1095, 0, 3599, 0, 0, 0, 8514, 0, 0, 0, - 74346, 66697, 0, 11684, 0, 0, 0, 0, 42043, 43232, 66677, 0, 42046, 78241, - 4036, 0, 0, 0, 194861, 0, 11954, 0, 1450, 12986, 1340, 0, 65441, 0, 0, 0, - 0, 0, 917542, 0, 0, 6539, 0, 0, 0, 194856, 0, 120492, 41190, 3973, - 119365, 4575, 41193, 7982, 429, 0, 0, 0, 194854, 65792, 0, 118968, 6417, - 118918, 78178, 0, 194850, 0, 0, 4919, 10590, 0, 7755, 0, 0, 64548, - 120506, 1621, 10214, 65126, 0, 127004, 0, 12188, 0, 1617, 8050, 0, 5015, - 0, 119174, 42590, 194871, 1756, 78181, 0, 65768, 6352, 41892, 0, 7555, - 13103, 5408, 2817, 1214, 0, 0, 0, 0, 0, 0, 0, 7957, 8689, 64723, 1056, 0, - 74147, 0, 0, 55286, 7073, 65850, 12327, 0, 119028, 0, 0, 0, 2341, 8450, - 8484, 8474, 0, 0, 0, 8461, 0, 12153, 12799, 0, 43709, 43708, 9451, 7571, - 13073, 0, 0, 681, 0, 703, 0, 3272, 8781, 12894, 0, 11709, 0, 74446, 0, 0, - 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, 0, 0, 0, 0, 10039, 0, 0, 5623, 5717, 5776, 0, 0, 0, - 41591, 11036, 65252, 120488, 0, 0, 0, 0, 0, 0, 0, 8887, 0, 7295, 11031, - 0, 43157, 0, 8946, 10348, 10412, 8755, 0, 0, 5718, 13221, 0, 0, 78135, 0, - 0, 8810, 74499, 686, 0, 0, 4619, 118954, 6654, 73769, 74426, 0, 12040, - 65689, 10128, 65118, 0, 119151, 118891, 0, 0, 2401, 68144, 8792, 0, 0, - 65455, 0, 0, 0, 119129, 0, 12886, 0, 66624, 0, 43557, 10300, 10161, - 10396, 74135, 0, 118945, 78118, 73851, 3010, 6441, 78122, 1458, 41475, 0, - 0, 0, 11479, 0, 0, 6350, 12864, 0, 78114, 1061, 64780, 2001, 43111, - 55230, 0, 4052, 0, 7626, 0, 0, 1045, 0, 5631, 41113, 0, 0, 43707, 74127, - 0, 0, 8486, 0, 73758, 2335, 4362, 0, 0, 69221, 1025, 0, 42625, 0, 78084, - 41443, 0, 0, 0, 1774, 1523, 0, 0, 41445, 78236, 0, 8567, 41442, 3988, 0, - 78237, 118910, 0, 65274, 8564, 0, 78238, 127515, 0, 0, 43446, 0, 66513, - 6256, 0, 579, 55218, 10206, 0, 6375, 2673, 0, 11814, 0, 4488, 0, 0, - 68451, 10444, 118846, 0, 11799, 74407, 68466, 4487, 0, 42832, 1032, - 120267, 43450, 78257, 7203, 0, 614, 78191, 0, 120615, 0, 78262, 0, 0, 0, + 0, 0, 0, 0, 12412, 19941, 0, 120277, 0, 1884, 9481, 42418, 0, 41157, 0, + 1195, 64898, 7924, 0, 41151, 2010, 0, 41328, 42344, 0, 12409, 0, 4360, + 127009, 9739, 0, 74392, 73921, 0, 42521, 8539, 0, 0, 0, 0, 4788, 0, 0, + 65734, 0, 64353, 0, 13075, 74429, 0, 64569, 43532, 10837, 2492, 0, + 118901, 0, 41136, 64351, 11813, 9649, 41154, 119617, 5128, 4038, 41143, + 65604, 64859, 41592, 0, 1648, 5435, 0, 0, 41343, 119848, 65439, 12709, + 6986, 0, 0, 0, 41349, 0, 12581, 10374, 5175, 0, 73806, 10254, 0, 10278, + 10262, 120295, 41346, 0, 607, 0, 0, 0, 12923, 10314, 10282, 65477, 10378, + 120297, 40976, 8265, 0, 119834, 40975, 5840, 42838, 0, 40978, 0, 119840, + 0, 0, 0, 66444, 10538, 0, 2550, 119836, 0, 0, 0, 3525, 0, 0, 0, 0, 5619, + 65822, 0, 194882, 7455, 0, 5616, 11486, 9656, 0, 0, 10727, 5615, 0, + 120551, 42380, 64895, 0, 66451, 808, 5455, 11347, 0, 1026, 5620, 194887, + 0, 11350, 5617, 0, 9225, 64639, 127073, 9145, 0, 1338, 120581, 0, 12739, + 0, 3084, 0, 0, 41025, 6037, 0, 3974, 0, 10290, 0, 3083, 10322, 0, 0, 0, + 41036, 0, 0, 43321, 65606, 0, 41032, 42388, 0, 64700, 10011, 1445, 40961, + 0, 194893, 0, 40960, 0, 0, 0, 40963, 0, 10402, 0, 0, 0, 10603, 0, 0, 0, + 0, 194923, 10083, 127069, 0, 194922, 0, 0, 0, 9073, 42585, 64302, 10704, + 65030, 4787, 0, 74829, 0, 65423, 0, 0, 9570, 0, 9525, 2689, 917626, + 65426, 0, 917624, 0, 0, 40966, 917623, 13286, 3998, 42598, 42596, 503, 0, + 8735, 2690, 66488, 42836, 194913, 41954, 917617, 1652, 772, 194877, 8310, + 65428, 3487, 0, 3585, 10194, 43320, 119159, 0, 194874, 6468, 41976, 9720, + 917606, 11767, 41970, 0, 5836, 12358, 0, 4355, 9048, 12180, 65027, 64680, + 65025, 64757, 0, 41488, 0, 8527, 194917, 12362, 12435, 12360, 41053, + 3266, 0, 12356, 8616, 41466, 0, 0, 11450, 0, 3638, 12354, 0, 3216, 0, + 2358, 0, 8633, 0, 0, 0, 0, 0, 0, 11759, 0, 0, 74823, 0, 41423, 8078, + 10504, 0, 0, 0, 0, 7002, 0, 41430, 42267, 41051, 41484, 0, 0, 41050, + 41473, 10466, 13099, 0, 0, 0, 6435, 0, 11362, 0, 0, 65382, 0, 41420, 0, + 3625, 0, 41409, 0, 0, 2041, 9178, 9672, 41427, 43541, 43317, 0, 0, 0, + 41424, 917598, 120546, 0, 0, 0, 41417, 1261, 0, 0, 12102, 119662, 41401, + 0, 0, 0, 0, 0, 42290, 3275, 0, 42329, 0, 0, 0, 0, 0, 0, 10989, 74234, 0, + 10598, 0, 2669, 903, 0, 2920, 0, 0, 74603, 64504, 19928, 0, 0, 3917, 0, + 11732, 0, 0, 41448, 41461, 0, 0, 917558, 0, 8819, 12663, 0, 41184, 74014, + 232, 74835, 120646, 9168, 65786, 0, 0, 0, 9094, 0, 11758, 0, 0, 1064, + 42467, 0, 10115, 19924, 0, 0, 7862, 64551, 13224, 8516, 41862, 66650, + 7561, 0, 74018, 1878, 0, 0, 2911, 0, 41178, 5427, 64823, 0, 0, 12617, + 41174, 0, 41458, 0, 41463, 42413, 11292, 2406, 775, 0, 65584, 0, 6074, + 9618, 194903, 0, 0, 0, 194901, 41436, 3656, 0, 194899, 41456, 0, 1599, + 11333, 0, 8514, 8513, 0, 1613, 0, 0, 0, 0, 0, 0, 74500, 41460, 10145, + 10542, 0, 120379, 0, 9905, 0, 65730, 0, 120374, 8427, 120375, 0, 120376, + 0, 11497, 64687, 74008, 120371, 3871, 0, 0, 9111, 5741, 0, 194846, + 120366, 119111, 120745, 0, 120369, 0, 11648, 0, 0, 120364, 41587, 120365, + 0, 74322, 42113, 0, 0, 12172, 0, 74530, 0, 65723, 0, 73871, 65724, 7928, + 120354, 0, 41595, 73730, 0, 42118, 73830, 66042, 10355, 0, 7875, 0, + 41598, 3993, 0, 1545, 40971, 536, 0, 119959, 0, 0, 65173, 65286, 0, 0, 0, + 0, 0, 0, 41375, 5402, 0, 0, 1687, 120503, 0, 0, 0, 64326, 40969, 10526, + 0, 8323, 40968, 1339, 11731, 0, 0, 65460, 12242, 0, 8020, 10843, 11554, + 0, 0, 8266, 41006, 65722, 0, 10710, 0, 118942, 0, 0, 119155, 195091, 0, + 119636, 0, 120687, 0, 0, 11755, 66305, 0, 0, 10917, 120767, 0, 11272, + 2040, 41247, 41326, 0, 1741, 42370, 1227, 0, 0, 11413, 0, 0, 0, 1586, + 4978, 0, 1984, 0, 0, 120651, 40984, 0, 9373, 0, 12916, 6284, 0, 41663, 0, + 0, 0, 9237, 9385, 41648, 0, 0, 0, 41666, 1830, 73783, 41076, 41287, 0, 0, + 0, 0, 0, 0, 41987, 41676, 0, 120823, 0, 41670, 0, 0, 2796, 65167, 11683, + 9902, 74521, 0, 11451, 0, 0, 42631, 2359, 0, 67844, 74164, 41238, 548, + 11405, 13133, 64368, 0, 0, 0, 397, 64678, 42139, 9547, 9590, 0, 1614, 0, + 64356, 66307, 6651, 1358, 0, 428, 9620, 1466, 0, 10982, 0, 1333, 0, 407, + 6425, 0, 74253, 0, 0, 0, 5804, 11976, 8554, 0, 0, 0, 9057, 42294, 41218, + 0, 0, 0, 1883, 10952, 8048, 0, 41225, 0, 118955, 0, 0, 0, 4407, 0, 65809, + 119074, 194821, 8448, 68122, 74183, 0, 12675, 12659, 0, 42363, 120624, + 194824, 119058, 10766, 12012, 2386, 64732, 9170, 917821, 9123, 64585, + 120500, 0, 0, 42051, 0, 4164, 9081, 0, 120569, 42049, 42042, 8709, 0, 0, + 120637, 42419, 0, 42047, 0, 0, 8470, 11807, 65897, 577, 0, 0, 74300, 0, + 0, 74840, 0, 0, 0, 0, 8736, 1414, 42643, 9683, 0, 74344, 0, 2536, 0, + 66330, 0, 0, 0, 0, 0, 0, 0, 66317, 0, 66315, 66316, 0, 11273, 0, 43004, + 7541, 0, 0, 961, 64307, 66324, 0, 0, 3106, 65917, 41284, 1696, 0, 891, + 12105, 0, 42624, 12802, 3264, 8824, 13268, 43003, 10936, 0, 0, 0, 0, 0, + 0, 2322, 0, 0, 11449, 0, 42868, 41285, 3547, 0, 0, 0, 0, 43216, 6089, 0, + 0, 0, 4170, 1029, 0, 0, 119224, 42374, 0, 744, 0, 0, 0, 65823, 0, 0, + 3551, 0, 0, 4623, 0, 0, 4598, 0, 65136, 0, 0, 0, 10851, 0, 6179, 0, 6180, + 0, 11952, 120778, 0, 11972, 0, 0, 0, 0, 177, 0, 6176, 120580, 0, 0, 6177, + 9020, 0, 0, 6178, 120249, 120242, 0, 120243, 7518, 8754, 0, 120237, + 74551, 43081, 0, 0, 9136, 120240, 4401, 41280, 0, 8974, 2308, 0, 74149, + 0, 2318, 0, 66361, 8198, 0, 64360, 12601, 0, 65266, 120827, 74307, 0, + 6970, 5404, 43332, 3667, 7936, 12925, 126989, 42055, 0, 0, 118949, 10874, + 65505, 0, 0, 42053, 0, 42057, 11083, 42052, 0, 0, 73845, 0, 9665, 0, 0, + 13181, 0, 0, 0, 0, 74148, 0, 0, 120225, 120229, 120224, 74172, 41145, 0, + 0, 0, 41148, 8683, 7594, 0, 0, 119090, 10869, 0, 41146, 0, 11441, 0, + 3512, 917612, 0, 8103, 0, 0, 65184, 11780, 41563, 42796, 0, 119106, + 41544, 65146, 0, 0, 0, 0, 19942, 0, 118908, 7988, 10436, 74273, 3271, + 73804, 64711, 0, 0, 0, 0, 3804, 13070, 11557, 42044, 0, 1095, 0, 3599, 0, + 0, 0, 0, 0, 0, 0, 74346, 66697, 0, 11684, 0, 0, 0, 0, 42043, 0, 66677, 0, + 42046, 120751, 4036, 0, 0, 0, 194862, 0, 11954, 0, 1450, 12986, 1340, 0, + 65441, 0, 0, 0, 0, 0, 0, 0, 0, 6539, 0, 0, 0, 0, 0, 0, 41190, 3973, + 194852, 4575, 41193, 7982, 429, 0, 0, 0, 194854, 65792, 0, 118968, 6417, + 118918, 0, 0, 194850, 0, 0, 4919, 10590, 0, 7755, 0, 0, 64548, 0, 1621, + 10214, 65126, 0, 0, 0, 12188, 0, 1617, 8050, 0, 5015, 0, 119174, 42590, + 194871, 1756, 0, 0, 65768, 120694, 41892, 0, 7555, 13103, 5408, 2817, + 1214, 0, 0, 0, 0, 0, 0, 0, 7957, 8689, 64723, 1056, 0, 74147, 0, 0, 0, + 7073, 65850, 12327, 0, 119028, 0, 0, 0, 2341, 8450, 8484, 8474, 0, 0, 0, + 8461, 0, 12153, 12799, 0, 120654, 120684, 9451, 7571, 13073, 0, 0, 681, + 0, 703, 0, 3272, 8781, 12894, 0, 11709, 0, 74446, 0, 0, 0, 11338, 120768, + 3276, 0, 0, 65928, 0, 0, 65021, 64795, 74574, 0, 10047, 0, 3262, 0, 0, 0, + 0, 74329, 163, 576, 9895, 1655, 0, 74591, 0, 0, 0, 0, 0, 0, 10039, 0, 0, + 5623, 5717, 5776, 0, 0, 0, 41591, 120586, 65252, 120795, 0, 0, 0, 0, 0, + 0, 0, 8887, 0, 7295, 11031, 0, 43157, 0, 8946, 10348, 10412, 8755, 0, 0, + 5718, 13221, 0, 0, 0, 0, 0, 8810, 74499, 686, 0, 0, 4619, 118954, 6654, + 73769, 0, 0, 12040, 65689, 10128, 65118, 0, 119151, 118891, 0, 0, 2401, + 68144, 8792, 0, 0, 65455, 0, 0, 0, 119129, 0, 12886, 0, 66624, 0, 43557, + 10300, 10161, 10396, 74135, 0, 0, 0, 73851, 3010, 6441, 0, 1458, 41475, + 0, 0, 0, 11479, 0, 0, 9100, 12864, 0, 0, 1061, 64780, 2001, 43111, 0, 0, + 4052, 0, 7626, 0, 0, 1045, 0, 5631, 0, 0, 0, 0, 74127, 0, 0, 8486, 0, + 73758, 2335, 4362, 0, 0, 73867, 1025, 0, 42625, 0, 0, 41443, 0, 0, 0, + 1774, 1523, 0, 0, 41445, 0, 0, 8567, 41442, 3988, 0, 0, 118910, 0, 65274, + 8564, 0, 0, 0, 0, 0, 65908, 0, 66513, 6256, 0, 579, 0, 10206, 0, 0, 2673, + 0, 11814, 0, 4488, 0, 0, 0, 10444, 120820, 0, 11799, 74407, 0, 4487, 0, + 42832, 1032, 0, 120736, 0, 7203, 0, 614, 0, 0, 120615, 0, 0, 0, 0, 0, 43121, 0, 0, 0, 1050, 7549, 0, 0, 9314, 0, 0, 120616, 0, 10057, 0, 0, 0, - 66504, 0, 0, 2307, 0, 64333, 0, 0, 73873, 0, 0, 0, 0, 0, 0, 10360, 6746, - 0, 0, 440, 0, 13085, 9233, 74216, 0, 0, 68612, 0, 66447, 8046, 64963, - 65777, 10125, 74212, 42819, 10910, 0, 1521, 9896, 0, 10487, 0, 12527, 0, - 7970, 0, 0, 0, 65769, 5243, 9849, 5239, 65771, 0, 0, 5237, 0, 0, 10103, - 5247, 4769, 0, 118977, 12873, 5764, 0, 0, 3008, 4896, 0, 12087, 0, 55231, - 41103, 0, 64565, 4773, 0, 0, 0, 4770, 0, 917567, 8731, 65378, 0, 120619, - 9122, 0, 0, 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, 0, 0, 0, 10116, 9877, 0, 0, 0, 7095, 0, 0, - 6778, 0, 78090, 8243, 2427, 0, 7093, 0, 11585, 195003, 9962, 0, 12223, 0, - 0, 1434, 0, 5637, 11573, 0, 0, 0, 19951, 0, 78121, 0, 0, 55283, 0, 0, - 74437, 1156, 8740, 0, 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, 0, 0, 42257, 5696, - 120470, 120465, 3862, 9643, 0, 0, 7634, 65167, 9845, 0, 0, 5701, 9722, - 41490, 0, 1426, 68217, 0, 68447, 42204, 55270, 8571, 194991, 0, 0, 78818, - 0, 43182, 12184, 0, 42022, 0, 10281, 0, 5650, 43194, 64712, 10744, 0, - 990, 5647, 0, 7387, 78734, 41114, 11477, 5646, 12879, 11018, 0, 3945, 0, - 0, 0, 0, 0, 78212, 0, 1020, 73763, 0, 78731, 5648, 64748, 194910, 0, - 10205, 3545, 0, 6984, 0, 74051, 0, 43242, 120458, 2667, 0, 0, 0, 9911, 0, - 65020, 10097, 119166, 0, 0, 118836, 0, 78427, 1140, 78426, 0, 10159, 0, - 0, 8128, 0, 0, 917965, 1815, 19910, 890, 0, 3267, 0, 0, 10123, 0, 4410, - 1041, 10576, 6354, 0, 580, 74232, 0, 0, 0, 0, 0, 19938, 65906, 0, 0, 0, - 3298, 5375, 10142, 0, 8215, 0, 6134, 41246, 64402, 0, 0, 0, 0, 0, 41382, - 0, 0, 5173, 65348, 527, 0, 0, 0, 0, 78797, 11915, 0, 0, 10072, 0, 42695, - 2329, 42250, 0, 0, 0, 12245, 9939, 0, 0, 0, 0, 0, 74328, 119576, 74769, - 0, 119087, 9069, 6144, 0, 0, 73822, 0, 0, 64917, 41521, 118934, 494, - 13250, 0, 65098, 6364, 956, 0, 12830, 10462, 73740, 0, 0, 0, 0, 66449, - 13263, 74281, 69217, 13171, 0, 0, 0, 0, 0, 1044, 41276, 0, 0, 0, 42068, - 11795, 0, 0, 0, 0, 42450, 3907, 0, 64526, 0, 68197, 12295, 0, 11475, 0, - 3020, 11537, 0, 66441, 0, 0, 0, 0, 1057, 566, 42696, 0, 3016, 42274, - 43464, 66490, 12921, 66571, 78472, 0, 3006, 4620, 127237, 0, 0, 0, 64659, - 0, 0, 55253, 6357, 6362, 8626, 0, 0, 9090, 65377, 41596, 0, 0, 1698, 0, - 64477, 0, 0, 1053, 0, 78269, 0, 0, 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, 0, 0, 0, 6359, 0, 43471, 0, 0, 0, - 127274, 0, 6358, 6361, 1926, 6356, 0, 7898, 8110, 10935, 0, 43633, 5830, - 0, 43685, 0, 0, 0, 0, 8693, 78611, 119565, 0, 0, 0, 127257, 0, 0, 0, 0, - 0, 0, 0, 119187, 11439, 78868, 0, 0, 78869, 42313, 5579, 0, 0, 0, 0, 0, - 5578, 41774, 0, 42023, 6234, 5669, 0, 0, 0, 0, 127506, 68202, 5583, 0, 0, - 42426, 5580, 42276, 2923, 892, 5582, 42465, 41330, 194987, 5795, 65512, - 119006, 65702, 0, 120801, 65251, 0, 65710, 0, 0, 67672, 0, 5370, 0, - 194986, 1638, 10966, 10188, 65878, 118848, 0, 0, 0, 0, 8172, 42017, 0, - 10844, 0, 0, 0, 6374, 0, 0, 286, 78023, 1062, 0, 119999, 0, 7395, 0, - 1070, 64900, 0, 6095, 41865, 0, 3015, 0, 917763, 5211, 0, 6400, 0, - 194983, 0, 8189, 11276, 0, 0, 372, 0, 0, 118874, 42102, 41585, 0, 0, - 42101, 276, 78402, 0, 33, 74226, 0, 9007, 118796, 41588, 66033, 427, - 10763, 118819, 0, 0, 0, 1031, 6257, 0, 42104, 0, 0, 2328, 0, 1071, 0, 0, - 74848, 0, 0, 0, 1047, 0, 0, 64790, 0, 0, 10651, 0, 0, 0, 0, 0, 119181, - 5711, 41633, 12098, 65571, 9166, 0, 5710, 0, 6790, 65168, 13216, 0, 0, 0, - 0, 64611, 41623, 195001, 5715, 0, 0, 0, 5712, 2761, 41620, 68124, 3074, - 5722, 0, 8643, 73768, 0, 118906, 2757, 11067, 9718, 74498, 8910, 10689, - 6479, 0, 0, 0, 78607, 0, 0, 0, 0, 0, 0, 118911, 0, 0, 0, 0, 0, 120010, 0, - 8701, 68130, 119616, 120522, 0, 42477, 0, 12123, 4495, 43569, 0, 0, 0, - 64946, 10992, 0, 120009, 0, 0, 9318, 120661, 13249, 65679, 73808, 0, - 65457, 42249, 7639, 43995, 67845, 42641, 5454, 0, 0, 194997, 120005, 0, - 0, 5084, 0, 0, 118861, 0, 733, 917876, 78014, 78436, 78435, 41677, 0, - 9218, 1731, 0, 0, 0, 0, 0, 0, 0, 120001, 127018, 0, 5155, 0, 5358, 0, 0, - 917767, 64424, 0, 3840, 64314, 41432, 0, 0, 68430, 119116, 43253, 65943, - 0, 3371, 10988, 0, 8771, 1479, 0, 0, 1109, 11580, 0, 64601, 12205, 0, 0, - 64507, 8868, 399, 0, 74842, 0, 0, 12149, 13088, 551, 0, 10156, 12119, 0, - 0, 2544, 65074, 0, 0, 0, 78011, 351, 119149, 0, 0, 55229, 0, 74268, 0, 0, - 0, 42377, 0, 0, 0, 0, 0, 9013, 4054, 0, 0, 0, 0, 73960, 5585, 65881, - 2549, 74469, 0, 0, 5584, 8358, 0, 74411, 0, 10919, 0, 7980, 0, 0, 0, - 41800, 5589, 0, 2664, 41613, 5586, 118890, 0, 11356, 0, 0, 43452, 78609, - 0, 42573, 67856, 0, 78129, 0, 0, 0, 8135, 6450, 10055, 77996, 0, 0, 0, - 5657, 0, 9626, 0, 77994, 10179, 5654, 12939, 0, 120799, 0, 0, 5652, - 10945, 0, 66486, 0, 3661, 7863, 0, 0, 0, 74509, 0, 5659, 0, 0, 66729, - 5655, 0, 42168, 0, 1055, 917628, 0, 66310, 74030, 0, 12146, 73955, 73956, - 11618, 0, 126990, 0, 10272, 10304, 10368, 42518, 594, 10244, 10248, 7407, - 0, 64870, 0, 3467, 0, 0, 3331, 946, 10231, 1495, 8131, 74330, 0, 9562, - 69222, 65927, 0, 0, 120155, 69769, 64656, 0, 0, 194837, 0, 5666, 65227, - 5318, 63994, 0, 9091, 10798, 0, 917979, 10186, 0, 7732, 0, 64556, 0, 0, - 5668, 74445, 0, 0, 5670, 0, 0, 11820, 2992, 7826, 5667, 19952, 120807, 0, - 12749, 0, 0, 0, 66496, 4361, 119260, 1306, 9286, 1497, 0, 0, 0, 0, 3571, - 13247, 0, 7973, 66353, 68435, 78278, 67896, 43192, 0, 78265, 553, 120653, - 0, 0, 5829, 0, 4587, 78285, 65912, 0, 12746, 0, 0, 119924, 5633, 119927, - 0, 0, 0, 64905, 0, 9512, 0, 12742, 6443, 0, 0, 9135, 0, 41564, 0, 55219, - 0, 0, 0, 12148, 0, 78297, 0, 64256, 0, 11669, 0, 5634, 4524, 0, 127270, - 0, 118880, 2425, 65182, 0, 43636, 5221, 78410, 328, 0, 0, 69815, 5636, 0, - 5329, 0, 5638, 119918, 7940, 64938, 43223, 0, 5635, 3373, 2986, 78292, - 74223, 3437, 78291, 6203, 4247, 0, 11920, 8274, 0, 0, 1657, 41561, 78299, - 78295, 5639, 2954, 5660, 5640, 78303, 0, 78300, 42227, 0, 0, 41637, - 67872, 0, 78310, 41625, 43362, 78309, 120713, 11705, 5642, 0, 5486, 0, - 4356, 11710, 0, 12051, 0, 0, 5641, 8259, 0, 1058, 0, 67630, 0, 0, 1144, - 78750, 0, 42228, 0, 73890, 118972, 0, 65322, 0, 5645, 64964, 8652, 2547, - 66484, 43634, 0, 5608, 65890, 0, 0, 67621, 119934, 9000, 0, 0, 0, 1865, - 0, 5613, 74267, 0, 0, 5610, 0, 0, 65826, 2069, 0, 10787, 43999, 2997, 0, - 5609, 78316, 65319, 78313, 12316, 65376, 2412, 0, 8186, 9807, 74269, 0, - 13130, 65874, 0, 5807, 0, 10030, 5306, 12936, 0, 0, 11704, 0, 0, 10211, - 0, 0, 0, 0, 11706, 9710, 0, 0, 0, 413, 65623, 74237, 0, 9133, 74262, 0, - 1042, 0, 64779, 12171, 119240, 6185, 64776, 4984, 0, 708, 11391, 0, - 12241, 0, 0, 1308, 0, 2534, 810, 0, 0, 0, 0, 0, 1917, 3000, 0, 0, 120739, - 2364, 0, 74470, 66618, 65680, 0, 10027, 0, 0, 12337, 120722, 0, 0, 2980, - 755, 69774, 931, 13124, 68182, 6363, 2748, 0, 0, 65041, 0, 44011, 8730, - 0, 0, 78312, 7274, 119250, 0, 7275, 78304, 935, 0, 65840, 377, 42325, - 11649, 0, 65253, 64301, 0, 78308, 42341, 65284, 2417, 0, 12884, 19912, - 7907, 10768, 0, 194998, 0, 10673, 119217, 7248, 0, 0, 1781, 5496, 3627, - 62, 1649, 0, 964, 0, 0, 78226, 0, 127512, 0, 0, 0, 0, 43689, 0, 13142, - 78812, 42415, 66575, 4542, 74037, 43547, 0, 0, 7677, 2991, 4946, 42454, - 0, 7949, 0, 0, 11341, 42494, 3073, 65625, 9714, 11692, 4657, 0, 0, 6478, - 9898, 43673, 65237, 6241, 0, 4877, 0, 6238, 0, 10548, 127049, 4409, 0, 0, - 64798, 0, 5346, 0, 120528, 6237, 4874, 0, 9176, 0, 0, 65231, 65884, - 12678, 78748, 118912, 11378, 44018, 42785, 2408, 3251, 0, 0, 5685, 0, - 2461, 11052, 7091, 5342, 8317, 0, 68163, 5340, 0, 0, 43635, 73928, - 127529, 0, 0, 0, 0, 65482, 0, 9142, 0, 0, 0, 10938, 0, 118790, 1182, - 2542, 4826, 0, 0, 0, 529, 8580, 0, 0, 10586, 10790, 10839, 66023, 41593, - 41207, 0, 0, 41594, 225, 42828, 0, 0, 0, 11376, 74379, 10721, 67664, - 3438, 42097, 127267, 11084, 3194, 41870, 266, 78305, 0, 41873, 120575, - 11324, 0, 0, 8420, 64918, 0, 41871, 41338, 3734, 7734, 43683, 8750, - 66605, 66011, 0, 40965, 0, 0, 5161, 10572, 0, 0, 0, 64349, 7287, 42162, - 127552, 0, 0, 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, 0, 0, 0, 0, 78169, 66199, 0, - 3609, 68624, 0, 832, 120693, 120770, 78473, 66007, 78471, 65703, 0, 0, - 42732, 5180, 0, 41395, 41530, 11691, 64773, 0, 74002, 0, 0, 0, 6348, 243, - 13200, 0, 6024, 0, 9979, 10037, 41529, 10648, 8538, 43687, 0, 0, 4285, - 66195, 0, 4230, 0, 13307, 43256, 0, 7563, 42376, 0, 68442, 120512, 0, 0, - 214, 0, 0, 78466, 65893, 12208, 9973, 0, 66311, 65589, 0, 2603, 0, 0, 0, - 0, 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, 0, 0, - 74241, 0, 6791, 12457, 78268, 0, 0, 0, 78279, 0, 0, 0, 66637, 7995, 8759, - 43421, 78277, 12449, 0, 0, 0, 8752, 3197, 4720, 10165, 0, 119249, 0, - 11595, 64893, 0, 43435, 0, 0, 4993, 0, 6168, 10934, 1946, 741, 0, 5494, - 4639, 0, 1990, 66589, 4498, 78664, 119183, 0, 0, 0, 2960, 73779, 0, 8969, - 0, 43424, 127059, 0, 2950, 0, 6210, 65753, 370, 0, 0, 0, 4953, 0, 0, 0, - 0, 69230, 0, 0, 65688, 0, 5063, 3517, 2964, 43663, 917762, 6344, 74791, - 10566, 10144, 66333, 8252, 729, 66016, 78253, 0, 0, 64923, 0, 43669, - 9032, 78263, 78264, 0, 41215, 0, 65883, 0, 0, 120602, 3761, 0, 0, 0, 0, - 12912, 119012, 3850, 0, 0, 0, 0, 0, 908, 0, 8611, 0, 0, 0, 43691, 41197, - 0, 8978, 120540, 119135, 41586, 10527, 0, 917848, 3848, 78739, 194937, - 127536, 65241, 5336, 0, 0, 663, 0, 10780, 0, 0, 78767, 0, 0, 68193, 347, - 0, 0, 78775, 64675, 41582, 78774, 78744, 65579, 12980, 78769, 12143, - 73733, 78512, 0, 43441, 41804, 78523, 0, 78525, 0, 0, 41584, 10681, 0, 0, - 73938, 0, 0, 4800, 66661, 0, 66306, 64715, 78534, 9518, 6609, 10434, 0, - 11319, 1097, 0, 917850, 41730, 0, 0, 73847, 78761, 65172, 41728, 41721, - 0, 0, 0, 41203, 0, 13110, 41726, 0, 0, 1000, 0, 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, 0, 78796, - 78798, 78794, 78795, 68434, 78793, 66670, 0, 0, 12290, 0, 0, 0, 42142, - 9968, 8205, 0, 5131, 0, 9627, 78536, 78542, 78535, 0, 1944, 1248, 10148, - 0, 119990, 119991, 12701, 78376, 11308, 119995, 0, 119997, 119998, 65305, - 74263, 4031, 42794, 120003, 7075, 8154, 120006, 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, 0, 13012, 4571, 0, 0, 0, - 12078, 2970, 0, 10933, 0, 77870, 0, 0, 0, 41599, 0, 0, 0, 12950, 0, 3486, - 0, 0, 4239, 0, 0, 66511, 0, 2637, 64629, 8460, 127053, 8476, 0, 0, 0, 0, - 65673, 1019, 78495, 4148, 0, 12289, 0, 4316, 0, 13119, 0, 5412, 66243, - 9935, 0, 73864, 0, 41734, 8206, 74081, 9163, 3286, 9072, 5867, 13302, - 7622, 0, 41736, 0, 41731, 0, 7400, 5416, 68663, 118924, 10817, 0, 41539, - 0, 0, 73963, 41855, 41867, 65564, 11277, 65892, 11536, 10620, 0, 12210, - 66030, 73932, 5498, 73942, 41536, 0, 68204, 0, 3459, 8997, 0, 0, 0, 0, 0, - 0, 66377, 69781, 0, 0, 78511, 3161, 295, 120207, 0, 0, 0, 78742, 9016, - 43454, 63903, 63902, 43641, 0, 3971, 0, 73972, 2952, 78765, 11038, 10901, - 63900, 63899, 63898, 0, 667, 12332, 63887, 6086, 41722, 0, 5172, 0, 0, - 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, 0, 0, 42348, 0, 6752, 446, 41911, 0, 63851, 63850, - 41910, 0, 63846, 2972, 12932, 7262, 0, 63849, 63848, 63847, 0, 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, 0, 65099, 11531, - 5834, 0, 0, 0, 0, 42773, 0, 0, 0, 119220, 0, 3663, 0, 1112, 119122, 8686, - 0, 5334, 65081, 43249, 74778, 0, 11077, 0, 6509, 0, 5327, 0, 19907, - 63869, 3478, 7583, 7679, 2903, 0, 3001, 1158, 8745, 0, 73748, 63866, 0, - 1915, 4846, 0, 66371, 118984, 42105, 2990, 120128, 805, 69238, 120125, - 12070, 8760, 1117, 118987, 12212, 120123, 65174, 42357, 63835, 63834, 0, - 78240, 12225, 63838, 63837, 0, 0, 63833, 6042, 66360, 8083, 0, 0, 63821, - 63820, 63819, 63818, 0, 5227, 9047, 63822, 0, 6091, 0, 10691, 560, 5643, - 8226, 119578, 63812, 63811, 63810, 63809, 5542, 63815, 63814, 63813, - 6047, 1597, 120143, 780, 206, 77925, 4936, 65147, 8168, 63930, 2076, - 1093, 9882, 63934, 2082, 63932, 917554, 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, 0, 1092, 4754, 7273, 5252, - 44016, 43627, 0, 0, 7408, 11809, 0, 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, 120445, 6502, 0, 127118, 0, 63951, 12465, 0, 0, 0, 63946, 1707, - 63924, 12461, 63950, 63897, 63948, 63947, 63945, 6038, 63943, 63942, - 64685, 63895, 65838, 0, 7776, 0, 0, 0, 120444, 78172, 801, 43165, 1690, - 63919, 63918, 63917, 13277, 43659, 12951, 120638, 9906, 2054, 2334, - 78515, 63916, 5483, 63914, 120610, 63911, 5484, 63909, 63908, 2539, 0, - 43980, 5485, 0, 42697, 9061, 5534, 10672, 4502, 0, 253, 0, 68208, 0, - 42854, 78393, 0, 11530, 0, 68668, 0, 0, 0, 10474, 43426, 13257, 42354, 0, - 0, 0, 195065, 0, 8413, 0, 0, 5693, 7272, 0, 13209, 64470, 65831, 78460, - 195063, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66608, 3111, 41863, 8804, 66607, 0, - 7270, 0, 66606, 6628, 1076, 7433, 1436, 73844, 55226, 0, 63982, 7393, - 12807, 43413, 63906, 1598, 63904, 0, 0, 41729, 4423, 1307, 0, 10515, - 41589, 0, 0, 6218, 0, 1430, 0, 0, 120606, 78754, 5413, 7619, 3255, 3493, - 74032, 11549, 10735, 41743, 73937, 6801, 0, 4518, 10990, 65073, 5167, - 4481, 3771, 0, 2710, 0, 69243, 41724, 0, 43073, 41690, 12479, 0, 0, 0, 0, - 119659, 1628, 0, 0, 0, 65262, 6333, 10783, 42315, 0, 63855, 120683, 0, 0, - 5339, 74323, 0, 13004, 0, 4457, 0, 0, 0, 0, 5684, 8678, 10914, 0, 5689, - 65807, 0, 68464, 12633, 12870, 78521, 65183, 5688, 11926, 6033, 6310, - 5686, 0, 74251, 0, 120647, 0, 50, 10558, 9871, 0, 43655, 0, 0, 0, 66468, - 0, 13259, 4448, 0, 0, 0, 0, 67853, 0, 10640, 0, 1151, 0, 917607, 0, - 127079, 195050, 0, 0, 0, 0, 12501, 64604, 0, 11527, 118870, 8812, 0, - 11538, 8673, 12650, 11020, 0, 66467, 2105, 8087, 78163, 0, 9894, 0, 0, 0, - 4636, 55262, 78513, 4515, 2382, 0, 127055, 0, 120495, 0, 0, 12277, - 194627, 11995, 194626, 0, 12158, 0, 8741, 10197, 0, 0, 0, 6531, 0, 0, - 473, 43415, 0, 0, 1873, 1087, 0, 0, 0, 78527, 66439, 43218, 0, 194716, - 7237, 12504, 74282, 0, 0, 0, 9489, 0, 0, 4384, 74220, 195055, 2058, - 917561, 13295, 43191, 0, 0, 1154, 3857, 1205, 0, 0, 13100, 12958, 120706, - 74168, 0, 0, 4421, 10592, 0, 495, 0, 41712, 7983, 0, 120779, 0, 6347, 0, - 7654, 41710, 4196, 0, 437, 41709, 73772, 0, 0, 9465, 13290, 119180, 4997, - 64306, 0, 0, 4999, 194642, 0, 0, 4711, 120769, 0, 2739, 0, 8044, 74834, - 0, 41789, 0, 10809, 0, 0, 0, 1779, 6600, 6601, 41543, 5325, 642, 64187, - 13058, 120449, 12875, 0, 0, 13229, 0, 10575, 43399, 0, 0, 41791, 1104, 0, - 0, 10655, 0, 0, 0, 0, 1082, 195049, 8428, 6569, 0, 0, 0, 0, 6783, 0, - 12993, 8049, 41548, 44021, 6458, 0, 0, 4761, 63828, 4766, 64623, 1273, - 43407, 0, 118876, 195045, 6912, 1313, 6322, 10483, 0, 41545, 0, 0, 0, 0, - 0, 0, 78624, 3484, 74337, 0, 0, 8503, 5122, 41527, 0, 66320, 0, 0, 0, 0, - 41537, 0, 8303, 8282, 11817, 73857, 10003, 73859, 65904, 194663, 1686, 0, - 78406, 11467, 3664, 65921, 64299, 194664, 0, 0, 4324, 126, 42246, 119152, - 0, 74378, 65926, 7744, 194636, 74277, 74302, 78052, 0, 6966, 0, 8136, 0, - 65600, 1633, 0, 0, 4762, 1103, 0, 0, 4765, 0, 13078, 0, 4760, 63827, - 2050, 10871, 43199, 1102, 0, 42236, 0, 194667, 11546, 74794, 337, 0, - 42591, 8627, 12279, 1111, 0, 0, 4707, 68206, 10143, 7883, 127081, 7880, - 4522, 8645, 5704, 13010, 0, 8304, 0, 0, 119575, 0, 0, 66654, 0, 0, 0, - 13008, 0, 4385, 0, 13011, 0, 0, 119161, 13009, 160, 2677, 0, 0, 41793, - 65763, 74221, 120141, 41792, 42770, 0, 65762, 118829, 64573, 5709, 0, - 194638, 0, 0, 0, 1079, 3867, 5708, 0, 0, 0, 5706, 64768, 5705, 8791, - 4005, 0, 10237, 10991, 0, 43459, 9173, 917581, 917580, 13170, 65942, - 917577, 42605, 120765, 917570, 68647, 917572, 10058, 0, 74867, 194654, - 127078, 3339, 11448, 1106, 917591, 917590, 917593, 3340, 917587, 917586, - 917589, 917588, 120541, 10605, 1309, 63966, 120743, 1754, 127075, 13246, - 864, 0, 118926, 8972, 0, 7849, 120092, 0, 13240, 195068, 5192, 4338, 0, - 10948, 917601, 13199, 120169, 1236, 13208, 13261, 13189, 13188, 120164, - 0, 7440, 0, 120153, 9553, 1590, 63777, 63776, 13178, 63782, 63781, 63780, - 63779, 1583, 0, 13260, 4550, 0, 64205, 0, 0, 41522, 0, 0, 0, 0, 11354, 0, - 0, 42795, 0, 119195, 11394, 194646, 13236, 13272, 13194, 1334, 0, 4479, - 1178, 65586, 120663, 66681, 119193, 4601, 0, 0, 0, 0, 0, 194658, 0, 6809, + 66504, 0, 0, 2307, 0, 64333, 0, 0, 73873, 0, 0, 0, 0, 0, 0, 10360, 0, 0, + 0, 440, 0, 13085, 9233, 74216, 0, 0, 0, 0, 66447, 8046, 64963, 65777, + 10125, 74212, 42819, 10910, 0, 1521, 9896, 0, 10487, 0, 12527, 0, 7970, + 0, 0, 0, 65769, 5243, 9849, 5239, 65771, 0, 0, 5237, 0, 0, 10103, 5247, + 4769, 0, 118977, 0, 5764, 0, 0, 3008, 4896, 0, 12087, 0, 0, 41103, 0, + 64565, 4773, 0, 0, 0, 4770, 0, 917567, 8731, 65378, 0, 120619, 9122, 0, + 0, 4774, 3019, 9997, 12834, 0, 9456, 10215, 0, 0, 0, 0, 0, 74776, 4281, + 4768, 0, 41535, 4099, 9017, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 42814, 880, 0, + 0, 0, 0, 0, 10116, 9877, 0, 0, 0, 7095, 0, 0, 120632, 0, 0, 8243, 2427, + 0, 7093, 0, 11585, 0, 0, 0, 12223, 0, 0, 1434, 0, 5637, 11573, 0, 0, 0, + 19951, 0, 0, 0, 0, 64432, 0, 0, 118888, 1156, 8740, 0, 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, 0, 0, 42257, 5696, 120470, 120465, 3862, 9643, 0, 0, + 7634, 0, 9845, 0, 0, 5701, 9722, 41490, 0, 1426, 120474, 0, 0, 0, 74345, + 8571, 194991, 0, 0, 0, 0, 43182, 12184, 0, 42022, 0, 10281, 0, 5650, + 43194, 64712, 0, 0, 990, 5647, 0, 0, 0, 41114, 11477, 5646, 0, 11018, 0, + 3945, 0, 0, 0, 0, 0, 0, 0, 1020, 73763, 0, 0, 5648, 64748, 0, 0, 10205, + 3545, 0, 6984, 0, 74051, 0, 118868, 120458, 2667, 0, 0, 0, 9911, 0, + 65020, 10097, 119166, 0, 0, 118836, 0, 0, 1140, 0, 0, 10159, 0, 0, 8128, + 0, 0, 0, 1815, 19910, 890, 0, 3267, 0, 0, 10123, 0, 4410, 1041, 10576, + 8102, 0, 580, 74232, 0, 0, 0, 0, 0, 19938, 65906, 0, 0, 0, 3298, 5375, + 10142, 0, 8215, 0, 6134, 41246, 64402, 0, 0, 0, 0, 0, 41382, 0, 0, 5173, + 65348, 527, 0, 0, 0, 0, 0, 11915, 0, 0, 10072, 0, 66434, 2329, 42250, 0, + 0, 0, 12245, 119237, 0, 0, 0, 0, 0, 74328, 0, 74769, 0, 0, 9069, 6144, 0, + 0, 73822, 0, 0, 64917, 41521, 118934, 494, 13250, 0, 65098, 0, 956, 0, + 12830, 10462, 73740, 0, 0, 0, 0, 66449, 13263, 0, 0, 13171, 0, 0, 0, 0, + 0, 1044, 41276, 0, 0, 0, 42068, 11795, 0, 0, 0, 0, 42450, 3907, 0, 64526, + 0, 0, 12295, 0, 11475, 0, 3020, 11537, 0, 66441, 0, 0, 0, 0, 1057, 566, + 0, 0, 3016, 42274, 0, 66490, 12921, 66571, 0, 0, 3006, 4620, 0, 0, 0, 0, + 64659, 0, 0, 0, 43333, 68129, 8626, 0, 0, 9090, 65377, 41596, 0, 0, 1698, + 0, 64477, 0, 0, 1053, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 1926, 0, 0, 7898, 8110, 10935, 0, 0, 5830, 0, 64594, 0, 0, 0, 0, 8693, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 119187, 11439, 0, 0, 0, 0, 42313, + 5579, 0, 0, 0, 0, 0, 5578, 41774, 0, 42023, 6234, 5669, 0, 0, 0, 0, 0, 0, + 5583, 0, 0, 42426, 5580, 42276, 2923, 892, 5582, 42465, 41330, 0, 5795, + 65512, 0, 65702, 0, 120801, 65251, 0, 65710, 0, 0, 0, 0, 5370, 0, 0, + 1638, 10966, 10188, 65878, 118848, 0, 0, 0, 0, 8172, 42017, 0, 10844, 0, + 0, 0, 0, 0, 0, 286, 0, 1062, 0, 0, 0, 0, 0, 1070, 64900, 0, 6095, 41865, + 0, 3015, 0, 917763, 5211, 0, 6400, 0, 194983, 0, 8189, 11276, 0, 0, 372, + 0, 0, 118874, 42102, 41585, 0, 0, 42101, 276, 0, 0, 33, 74226, 0, 9007, + 118796, 41588, 66033, 427, 10763, 0, 0, 0, 0, 1031, 6257, 0, 42104, 0, 0, + 2328, 0, 1071, 0, 0, 74848, 0, 0, 0, 1047, 0, 0, 64790, 0, 0, 10651, 0, + 0, 0, 0, 0, 119181, 5711, 41633, 12098, 65571, 9166, 0, 5710, 0, 0, + 65213, 13216, 0, 0, 0, 0, 64611, 41623, 0, 5715, 0, 0, 0, 5712, 2761, + 41620, 68124, 3074, 5722, 0, 8643, 73768, 0, 118906, 2757, 11067, 9718, + 74498, 8910, 10689, 6479, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 118911, 0, 0, 0, + 0, 0, 120010, 0, 8701, 68130, 119616, 120522, 0, 42477, 0, 12123, 4495, + 43569, 0, 0, 0, 64946, 10992, 0, 0, 0, 0, 9318, 120661, 13249, 65679, + 73808, 0, 65457, 42249, 7639, 0, 67845, 42641, 5454, 0, 0, 194997, + 120005, 0, 0, 5084, 0, 0, 119173, 0, 733, 0, 0, 0, 0, 41677, 0, 9218, + 1731, 0, 0, 0, 0, 0, 0, 0, 0, 127018, 0, 5155, 0, 5358, 0, 0, 917767, + 64424, 0, 3840, 64314, 41432, 0, 0, 0, 0, 0, 65943, 0, 3371, 10988, 0, + 8771, 1479, 0, 0, 1109, 11580, 0, 64601, 12205, 0, 0, 64507, 8868, 399, + 0, 74842, 0, 0, 12149, 13088, 551, 0, 10156, 12119, 0, 0, 2544, 65074, 0, + 0, 0, 0, 351, 119149, 0, 0, 0, 0, 74268, 0, 0, 0, 42377, 0, 0, 0, 0, 0, + 9013, 5588, 0, 0, 0, 0, 73960, 5585, 65881, 2549, 74469, 0, 0, 5584, + 8358, 0, 74411, 0, 10919, 0, 7980, 0, 0, 0, 41800, 5589, 0, 2664, 41613, + 5586, 118890, 0, 11356, 0, 0, 0, 0, 0, 42573, 67856, 0, 0, 0, 0, 0, 8135, + 6450, 10055, 0, 0, 0, 0, 5657, 0, 9626, 0, 0, 10179, 5654, 12939, 0, + 120799, 0, 0, 5652, 10945, 0, 0, 0, 3661, 7863, 0, 0, 0, 0, 0, 5659, 0, + 0, 66729, 5655, 0, 42168, 0, 1055, 917628, 0, 66310, 74030, 0, 12146, + 73955, 73956, 11618, 0, 126990, 0, 10272, 10304, 10368, 42518, 594, + 10244, 10248, 10256, 0, 64870, 0, 3467, 0, 0, 3331, 946, 10231, 1495, + 8131, 74330, 0, 9562, 0, 65927, 0, 0, 120155, 0, 64656, 0, 0, 194837, 0, + 5666, 65227, 5318, 0, 0, 9091, 10798, 0, 0, 10186, 0, 7732, 0, 64556, 0, + 0, 5668, 74445, 0, 0, 5670, 0, 0, 11820, 2992, 7826, 5667, 19952, 120807, + 0, 12749, 0, 0, 0, 66496, 4361, 119260, 1306, 9286, 1497, 0, 0, 0, 0, + 3571, 13247, 0, 7973, 66353, 0, 0, 67896, 43192, 0, 0, 553, 120653, 0, 0, + 5829, 0, 4587, 0, 65912, 0, 12746, 0, 0, 119924, 5633, 119927, 0, 0, 0, + 64905, 0, 9512, 0, 12742, 6443, 0, 0, 9135, 0, 0, 0, 0, 0, 0, 0, 12148, + 0, 0, 0, 64256, 0, 11669, 0, 5634, 4524, 0, 0, 0, 118880, 74266, 65182, + 0, 0, 5221, 0, 328, 0, 0, 0, 5636, 0, 5329, 0, 5638, 119918, 7940, 64938, + 43223, 0, 5635, 3373, 2986, 0, 74223, 3437, 0, 6203, 4247, 0, 11920, + 8274, 0, 0, 1657, 119921, 0, 0, 5639, 2954, 5660, 5640, 0, 0, 0, 0, 0, 0, + 41637, 0, 0, 0, 41625, 0, 0, 120713, 11705, 5642, 0, 0, 0, 4356, 11710, + 0, 12051, 0, 0, 5641, 8259, 0, 1058, 0, 67630, 0, 0, 1144, 0, 0, 0, 0, + 73890, 118972, 0, 73734, 0, 5645, 64964, 8652, 2547, 66484, 0, 0, 5608, + 65890, 0, 0, 67621, 119934, 9000, 0, 0, 0, 1865, 0, 5613, 74267, 0, 0, + 5610, 0, 0, 65826, 5612, 0, 10787, 917551, 2997, 0, 5609, 0, 65319, + 119933, 12316, 65376, 2412, 0, 8186, 9807, 74269, 0, 13130, 65874, 0, + 5807, 0, 10030, 5306, 12936, 0, 0, 11704, 0, 0, 10211, 0, 0, 0, 0, 11706, + 9710, 0, 0, 0, 413, 65623, 74237, 0, 9133, 74262, 0, 1042, 0, 64779, + 12171, 119240, 6185, 64776, 4984, 0, 708, 0, 0, 12241, 0, 0, 1308, 0, + 2534, 810, 0, 0, 0, 0, 0, 1917, 3000, 0, 0, 120739, 2364, 0, 74470, + 66618, 65680, 0, 10027, 0, 0, 12337, 120722, 0, 0, 2980, 755, 0, 931, + 13124, 68182, 0, 2748, 0, 0, 65041, 0, 73998, 8730, 0, 0, 119009, 7274, + 119250, 0, 7275, 0, 935, 0, 65840, 377, 42325, 11649, 0, 65253, 64301, 0, + 0, 42341, 65284, 2417, 0, 12884, 19912, 7907, 10768, 0, 194998, 0, 10673, + 119217, 7248, 0, 0, 1781, 5496, 3627, 62, 1649, 0, 964, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 13142, 0, 42415, 66575, 4542, 74037, 43547, 0, 0, 0, 2991, + 4946, 42454, 0, 7949, 0, 0, 11341, 42494, 3073, 65625, 9714, 11692, 0, 0, + 0, 6478, 9898, 0, 65237, 6241, 0, 4877, 0, 6238, 0, 10548, 127049, 4409, + 0, 0, 64798, 0, 5346, 0, 120528, 6237, 5461, 0, 9176, 0, 0, 65231, 65884, + 12678, 0, 0, 11378, 0, 42785, 2408, 3251, 0, 0, 5685, 0, 2461, 11052, + 7091, 5342, 8317, 0, 68163, 5340, 0, 0, 0, 73928, 0, 0, 0, 0, 0, 65482, + 0, 9142, 0, 0, 0, 10938, 0, 118790, 1182, 2542, 4826, 0, 0, 0, 529, 8580, + 0, 0, 10586, 10790, 11987, 66023, 41593, 41207, 0, 0, 41594, 225, 42828, + 0, 0, 0, 64705, 74379, 10721, 0, 3438, 42097, 0, 11084, 3194, 41870, 266, + 0, 0, 41873, 120575, 11324, 0, 0, 8420, 64918, 0, 41871, 41338, 3734, + 7734, 0, 8750, 66605, 66011, 0, 40965, 0, 0, 5161, 10572, 0, 0, 0, 64349, + 7287, 42162, 0, 0, 0, 11948, 0, 12359, 66674, 41369, 1697, 12191, 0, 0, + 7286, 0, 0, 10031, 0, 9870, 0, 8620, 65824, 0, 11938, 0, 7285, 0, 119577, + 0, 0, 0, 41583, 0, 65799, 0, 0, 0, 0, 0, 66199, 0, 3609, 0, 0, 832, + 120693, 120770, 0, 66007, 0, 65703, 0, 0, 0, 5180, 0, 41395, 41530, + 11691, 64773, 0, 74002, 0, 0, 0, 11036, 243, 13200, 0, 6024, 0, 74398, + 10037, 41529, 10648, 8538, 0, 0, 0, 4285, 66195, 0, 4230, 0, 13307, 0, 0, + 7563, 42376, 0, 0, 120512, 0, 0, 214, 0, 0, 0, 65893, 12208, 120488, 0, + 66311, 65589, 0, 2603, 0, 0, 0, 0, 0, 6022, 0, 2884, 0, 11620, 0, 43, 0, + 66453, 1016, 41107, 0, 41121, 3885, 92, 65456, 64608, 0, 74801, 0, 12451, + 0, 0, 0, 12453, 0, 0, 74241, 0, 8890, 12457, 0, 0, 0, 0, 118819, 0, 0, 0, + 66637, 7995, 8759, 0, 0, 12449, 0, 0, 0, 8752, 3197, 4720, 10165, 0, + 119249, 0, 11595, 64893, 0, 120180, 0, 0, 4993, 0, 6168, 10934, 1946, + 741, 0, 5494, 4639, 0, 1990, 66589, 4498, 0, 0, 0, 0, 0, 2960, 73779, 0, + 8969, 0, 0, 0, 0, 2950, 0, 6210, 0, 370, 0, 0, 0, 4953, 0, 0, 0, 0, 0, 0, + 0, 65688, 0, 5063, 3517, 2964, 0, 0, 65094, 74791, 10566, 10144, 66333, + 8252, 729, 66016, 0, 0, 0, 64923, 0, 65208, 9032, 0, 0, 0, 41215, 0, + 65883, 0, 0, 120602, 3761, 0, 0, 0, 0, 12912, 119012, 3850, 0, 0, 0, 0, + 0, 908, 0, 8611, 0, 0, 0, 0, 0, 0, 8978, 120540, 119135, 41586, 10527, 0, + 917848, 3848, 0, 0, 0, 65241, 5336, 0, 0, 663, 0, 10780, 0, 0, 0, 0, 0, + 0, 347, 0, 0, 0, 64675, 41582, 119126, 0, 65579, 12980, 0, 12143, 73733, + 0, 0, 0, 41804, 0, 0, 0, 0, 0, 41584, 10681, 0, 0, 73938, 0, 0, 4800, + 66661, 0, 66306, 64715, 0, 9518, 6609, 10434, 0, 11319, 1097, 0, 917850, + 41730, 0, 0, 0, 0, 65172, 41728, 41721, 0, 0, 0, 41203, 0, 13110, 41726, + 0, 0, 1000, 0, 0, 41140, 1209, 0, 0, 0, 1073, 0, 0, 41138, 0, 0, 0, + 12167, 1115, 41605, 9794, 127062, 127063, 127064, 12237, 127066, 66314, + 6587, 9290, 0, 0, 9231, 0, 2959, 7926, 0, 0, 0, 64398, 0, 119970, 12311, + 0, 0, 118846, 0, 0, 0, 119973, 0, 0, 0, 12290, 0, 0, 0, 42142, 10151, + 8205, 0, 5131, 0, 9627, 0, 0, 0, 0, 1944, 1248, 10148, 0, 119990, 119991, + 12701, 119993, 11308, 119995, 0, 119997, 119998, 65305, 74263, 4031, + 42794, 120003, 7075, 8154, 120006, 120007, 41817, 73934, 42275, 120011, + 120012, 120013, 120014, 120015, 6041, 0, 41899, 0, 8002, 0, 4364, 0, 0, + 64332, 0, 7813, 9064, 119986, 10124, 7526, 8601, 7281, 0, 7279, 12041, + 1418, 10885, 12673, 0, 0, 9660, 0, 13012, 4571, 0, 0, 0, 12078, 2970, 0, + 10933, 0, 0, 0, 0, 0, 41599, 0, 0, 0, 12950, 0, 3486, 0, 0, 4239, 0, 0, + 66511, 0, 2637, 64629, 8460, 127053, 8476, 0, 0, 0, 0, 65673, 1019, 0, + 4148, 0, 12289, 0, 4316, 0, 13119, 0, 5412, 66243, 10744, 0, 73864, 0, + 41734, 8206, 74081, 9163, 3286, 9072, 5867, 13302, 7622, 0, 41736, 0, + 41731, 0, 9483, 5416, 0, 119593, 10817, 0, 41539, 0, 0, 73963, 41855, + 41867, 65564, 11277, 65892, 11536, 10620, 0, 12210, 0, 73932, 5498, + 73942, 41536, 0, 0, 0, 3459, 8997, 0, 0, 0, 0, 0, 0, 66377, 0, 0, 0, 0, + 3161, 295, 0, 0, 0, 0, 0, 9016, 0, 63903, 63902, 63901, 0, 3971, 0, + 73972, 2952, 0, 11038, 10901, 63900, 63899, 63898, 0, 667, 12332, 63887, + 6086, 41722, 0, 5172, 0, 0, 4159, 0, 0, 9815, 63884, 19934, 63882, 41198, + 8555, 63878, 63877, 42460, 6050, 0, 63881, 63872, 0, 42421, 0, 41723, + 63875, 63874, 11460, 7432, 1913, 41913, 63852, 0, 0, 42348, 0, 74841, + 446, 41911, 0, 63851, 63850, 41910, 0, 63846, 2972, 12932, 7262, 0, + 63849, 63848, 63847, 0, 0, 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, 0, 0, + 10785, 0, 119170, 4557, 0, 9159, 10171, 13125, 63860, 5540, 63858, 63865, + 281, 13242, 63862, 74154, 0, 5536, 65568, 63857, 1388, 74169, 0, 1077, 0, + 65099, 11531, 0, 0, 0, 0, 0, 42773, 0, 0, 0, 119220, 0, 3663, 0, 1112, + 119122, 8686, 0, 5334, 65081, 0, 74778, 0, 11077, 0, 6509, 0, 5327, 0, + 19907, 63869, 3478, 7583, 7679, 2903, 0, 3001, 1158, 8745, 0, 73748, + 63866, 0, 1915, 4846, 0, 66371, 118984, 42105, 2990, 120128, 805, 120130, + 120125, 12070, 8760, 1117, 118987, 12212, 120123, 65174, 42357, 63835, + 63834, 0, 0, 12225, 63838, 63837, 0, 0, 63833, 6042, 66360, 8083, 0, 0, + 63821, 63820, 63819, 63818, 0, 5227, 9047, 63822, 0, 6091, 0, 10691, 560, + 5643, 8226, 119578, 63812, 63811, 63810, 63809, 5542, 63815, 63814, + 63813, 6047, 1597, 120143, 780, 206, 0, 4936, 65147, 8168, 63930, 0, + 1093, 9882, 63934, 63933, 63932, 917554, 63929, 3546, 1605, 0, 9806, + 65566, 0, 8400, 11343, 63920, 0, 63926, 2984, 5968, 9287, 0, 4618, 0, 0, + 13169, 5290, 5283, 1695, 10743, 1088, 63825, 7268, 1084, 1085, 63829, + 1083, 10131, 7283, 0, 63970, 0, 1092, 4754, 7273, 5252, 0, 0, 0, 0, 0, + 11809, 0, 0, 0, 2965, 7258, 8808, 0, 1089, 4187, 63937, 42119, 42120, 0, + 940, 5787, 10099, 63938, 0, 74494, 12463, 2994, 0, 0, 0, 9664, 0, 0, 0, + 0, 74343, 0, 0, 660, 10127, 666, 9022, 5532, 0, 5533, 0, 0, 6118, 222, + 979, 3884, 0, 74151, 120445, 6502, 0, 127118, 0, 63951, 12465, 0, 0, 0, + 63946, 1707, 63924, 12461, 63950, 63897, 63948, 63947, 63945, 6038, + 63943, 63942, 64685, 63895, 65838, 0, 7776, 0, 0, 0, 120444, 0, 801, + 43165, 1690, 63919, 63918, 63917, 13277, 63893, 0, 120638, 9906, 5486, + 2334, 0, 63916, 5483, 63914, 120610, 63911, 5484, 63909, 63908, 2539, 0, + 63913, 5485, 0, 195060, 9061, 5534, 10672, 4502, 0, 253, 0, 0, 0, 42854, + 0, 0, 11530, 0, 0, 0, 0, 0, 10474, 0, 13257, 42354, 0, 0, 0, 195065, 0, + 8413, 0, 0, 5693, 7272, 0, 13209, 64470, 65831, 0, 195063, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 66608, 3111, 41863, 8804, 66607, 0, 7270, 0, 66606, 6628, + 1076, 41305, 1436, 0, 0, 0, 63982, 10221, 12807, 63907, 63906, 1598, + 63904, 0, 0, 41729, 4423, 1307, 0, 10515, 41589, 0, 0, 6218, 0, 1430, 0, + 0, 120606, 119365, 5413, 7619, 3255, 3493, 74032, 11549, 10735, 0, 73937, + 10517, 0, 0, 10990, 65073, 5167, 4481, 3771, 0, 2710, 0, 0, 41724, 0, + 43073, 41690, 12479, 0, 0, 0, 0, 119659, 1628, 0, 0, 0, 65262, 63854, + 10783, 42315, 0, 63855, 120683, 0, 0, 5339, 74323, 0, 13004, 0, 4457, 0, + 0, 0, 0, 5684, 8678, 10914, 0, 5689, 65807, 0, 120617, 12633, 0, 0, + 65183, 5688, 11926, 6033, 6310, 5686, 0, 0, 0, 120647, 0, 50, 0, 9871, 0, + 0, 0, 0, 0, 66468, 0, 13259, 4448, 0, 0, 0, 0, 67853, 0, 10640, 0, 1151, + 0, 0, 0, 0, 195050, 0, 0, 0, 0, 12501, 64604, 0, 11527, 118870, 8812, 0, + 11538, 8673, 12650, 11020, 0, 66467, 10839, 8087, 0, 0, 9894, 0, 0, 0, + 4636, 0, 118985, 8053, 0, 0, 0, 0, 120495, 0, 0, 12277, 194627, 11995, + 194626, 0, 12158, 0, 8741, 10197, 0, 0, 0, 6531, 0, 0, 473, 0, 0, 0, + 1873, 1087, 0, 0, 0, 0, 66439, 43218, 0, 194716, 7237, 12504, 74282, 0, + 0, 0, 9489, 0, 0, 4384, 74220, 195055, 0, 917561, 13295, 43191, 0, 0, + 1154, 3857, 1205, 0, 0, 13100, 12958, 120706, 74168, 0, 0, 4421, 10592, + 0, 495, 0, 41712, 7983, 0, 0, 0, 8494, 0, 7654, 41710, 4196, 0, 437, + 41709, 73772, 0, 0, 9465, 13290, 119180, 4997, 64306, 0, 0, 4999, 194642, + 0, 0, 4711, 120769, 0, 2739, 0, 8044, 74834, 0, 41789, 0, 10809, 0, 0, 0, + 1779, 6600, 6601, 41543, 5325, 642, 64187, 13058, 0, 0, 0, 0, 13229, 0, + 10575, 0, 0, 0, 41791, 1104, 0, 0, 10655, 0, 0, 0, 0, 1082, 195049, 8428, + 0, 0, 0, 0, 0, 10167, 0, 12993, 8049, 41548, 0, 6458, 0, 0, 4761, 63828, + 4766, 64623, 1273, 194653, 0, 118876, 0, 6912, 1313, 7033, 10483, 0, + 41545, 0, 0, 0, 0, 0, 0, 0, 3484, 74337, 0, 0, 8503, 5122, 41527, 0, + 66320, 0, 0, 0, 0, 41537, 0, 8303, 8282, 11817, 0, 10003, 73859, 65904, + 194663, 1686, 0, 0, 11467, 3664, 65921, 64299, 194664, 0, 0, 4324, 126, + 42246, 119152, 0, 0, 65926, 7744, 194636, 74277, 74302, 0, 0, 6966, 0, + 8136, 0, 65600, 1633, 0, 0, 4762, 1103, 0, 0, 4765, 0, 13078, 0, 4760, + 63827, 0, 10871, 43199, 1102, 0, 0, 0, 0, 11546, 74794, 337, 0, 42591, + 8627, 12279, 1111, 0, 0, 4707, 0, 10143, 7883, 127081, 7880, 4522, 8645, + 5704, 13010, 0, 8304, 0, 0, 119575, 0, 0, 66654, 0, 0, 0, 13008, 0, 4385, + 0, 13011, 0, 0, 119161, 13009, 160, 2677, 0, 0, 41793, 65763, 74221, + 120141, 41792, 42770, 0, 65762, 118829, 64573, 5709, 0, 194638, 0, 0, 0, + 1079, 3867, 5708, 0, 0, 0, 5706, 64768, 5705, 8791, 4005, 0, 10237, + 10991, 0, 917579, 9173, 917581, 917580, 13170, 65942, 917577, 42605, + 120765, 917570, 917573, 917572, 10058, 0, 74867, 194654, 127078, 3339, + 11448, 1106, 917591, 917590, 917593, 3340, 917587, 917586, 917589, + 917588, 917583, 10605, 1309, 63966, 120743, 1754, 127075, 13246, 864, 0, + 118926, 8972, 0, 7849, 120092, 0, 13240, 195068, 5192, 4338, 0, 10948, + 917601, 13199, 120169, 1236, 13208, 13261, 13189, 13188, 120164, 0, 7440, + 0, 120153, 9553, 1590, 63777, 63776, 13178, 63782, 63781, 63780, 63779, + 1583, 0, 13260, 4550, 0, 64205, 0, 0, 41522, 0, 0, 0, 0, 11354, 0, 0, + 42795, 0, 119195, 11394, 194646, 13236, 13272, 13194, 1334, 0, 4479, + 1178, 65586, 120663, 66681, 119193, 4601, 0, 0, 0, 0, 0, 0, 0, 63787, 63786, 6031, 0, 63791, 63790, 1145, 63788, 7910, 63785, 43153, 754, - 10192, 13105, 8183, 120741, 2037, 0, 0, 10747, 125, 0, 64890, 0, 0, 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, 119225, 63793, 11988, 3898, 0, 10201, 12238, 63795, - 42194, 10367, 12521, 10431, 42114, 41932, 1068, 0, 12523, 12945, 0, - 42203, 7950, 10804, 63771, 42787, 4386, 12224, 6973, 2793, 12475, 0, 0, - 63769, 9530, 0, 12232, 13135, 8596, 5681, 63762, 4595, 63760, 792, 0, - 64803, 0, 8742, 0, 11053, 0, 63744, 0, 0, 7588, 63748, 1693, 63746, - 43204, 5055, 68426, 917853, 1090, 120679, 0, 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, 0, 0, 0, 7386, 0, 68358, 0, - 0, 43603, 0, 65397, 288, 0, 0, 0, 10025, 917916, 2918, 0, 65300, 119871, - 9883, 64726, 2790, 65395, 3793, 0, 0, 65393, 0, 74138, 0, 0, 0, 74139, - 120613, 65394, 11548, 5270, 0, 65396, 0, 65813, 13256, 1282, 120771, 0, - 0, 10888, 0, 65242, 0, 3330, 0, 0, 0, 0, 0, 74259, 3304, 42753, 0, 0, 0, - 1627, 0, 0, 0, 5371, 13116, 0, 1826, 118794, 0, 43094, 0, 43650, 0, 0, - 9035, 0, 0, 0, 0, 0, 68125, 0, 164, 0, 0, 0, 6958, 0, 43116, 0, 0, 13245, - 0, 0, 127376, 0, 73893, 0, 12666, 13175, 13207, 120414, 66014, 120428, + 10192, 13105, 8183, 120741, 2037, 0, 0, 10747, 125, 0, 0, 0, 0, 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, 0, 41930, 63805, 63804, 63803, 63801, 41082, 8140, 63798, 6260, + 0, 0, 119225, 63793, 11988, 3898, 0, 10201, 12238, 63795, 42358, 10367, + 12521, 10431, 42114, 41932, 1068, 0, 12523, 12945, 0, 0, 7950, 10804, + 63771, 42787, 4386, 12224, 6973, 2793, 12475, 0, 0, 63769, 9530, 0, + 12232, 13135, 8596, 5681, 63762, 4595, 63760, 792, 0, 64803, 0, 8742, 0, + 11053, 0, 63744, 0, 0, 7588, 63748, 1693, 63746, 43204, 5055, 0, 0, 1090, + 120679, 0, 11665, 74133, 4558, 65685, 9523, 0, 0, 0, 11513, 0, 6157, + 63775, 63774, 63773, 13191, 12170, 3500, 3139, 0, 3170, 12485, 0, 10872, + 0, 13006, 64433, 0, 0, 941, 0, 0, 0, 65541, 11063, 0, 8228, 0, 42065, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 43603, 0, 65397, 288, 0, 0, 0, 10025, 0, 2918, + 0, 65300, 119871, 9883, 64726, 2790, 65395, 3793, 0, 0, 65393, 0, 74138, + 0, 0, 0, 74139, 120613, 65394, 11548, 5270, 0, 65396, 0, 65813, 13256, + 1282, 120771, 0, 0, 10888, 0, 65242, 0, 3330, 0, 0, 0, 0, 0, 0, 3304, + 42753, 0, 0, 0, 1627, 0, 0, 0, 5371, 13116, 0, 1826, 0, 0, 43094, 0, 0, + 0, 0, 9035, 0, 0, 0, 0, 0, 68125, 0, 164, 0, 0, 0, 6958, 0, 43116, 0, 0, + 13245, 0, 0, 0, 0, 73893, 0, 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, 0, 74428, 0, 78146, 0, 0, 0, 0, 10045, - 12882, 13275, 0, 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, 0, 369, 0, 41784, 0, 64163, 0, 0, 0, 65474, - 4796, 12292, 0, 65479, 0, 41781, 10486, 41480, 120511, 9899, 0, 0, 404, - 12821, 3741, 0, 5788, 8092, 68212, 41222, 1831, 66020, 0, 0, 4388, 0, - 746, 120784, 0, 0, 12018, 65294, 0, 0, 0, 0, 4422, 4708, 3799, 74292, - 119357, 0, 74430, 0, 11700, 4374, 0, 0, 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, 41171, 64172, - 13173, 4372, 119354, 0, 0, 0, 0, 0, 0, 12965, 384, 64512, 10404, 10340, - 119352, 1556, 5274, 13210, 0, 10017, 9733, 41787, 0, 126994, 41373, - 78039, 12303, 0, 13232, 13233, 349, 4863, 41371, 11656, 0, 120703, - 119883, 12861, 4398, 8543, 65618, 0, 1096, 0, 0, 42688, 12441, 12355, - 119348, 119347, 4318, 10452, 0, 8032, 13243, 13237, 12719, 0, 119101, 0, - 64884, 119872, 119345, 8597, 0, 0, 9864, 0, 120785, 119874, 0, 13195, - 41452, 64961, 7722, 0, 10459, 119878, 0, 119879, 66590, 0, 41533, 66337, - 0, 0, 0, 4965, 0, 917536, 73849, 0, 43638, 78537, 0, 6261, 119342, 43147, - 66570, 1957, 10420, 982, 2756, 13292, 13206, 0, 0, 2925, 73809, 13056, - 127559, 13212, 43238, 0, 13190, 13187, 0, 13198, 118793, 0, 5242, 119179, - 64476, 1694, 8216, 0, 6770, 43331, 0, 65620, 0, 43544, 0, 0, 41444, - 65621, 120325, 64799, 5246, 120326, 13185, 9709, 120323, 120322, 12314, - 65616, 5238, 119333, 0, 119337, 5236, 40979, 0, 74201, 8286, 0, 3936, - 119331, 11699, 41347, 127249, 13235, 8842, 41248, 0, 4379, 13239, 12692, - 7969, 127266, 7219, 127250, 0, 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, 0, 0, 42841, 13267, 0, 0, 41775, 0, 0, 41773, 0, 10663, 0, 0, 0, - 6151, 12110, 42673, 65572, 119602, 65250, 13265, 13264, 64518, 0, 6100, - 0, 0, 5808, 65922, 0, 12967, 66041, 5612, 4583, 0, 0, 68097, 64575, 0, - 11965, 0, 119211, 0, 69789, 0, 0, 68102, 9698, 7814, 74476, 119651, 0, 0, - 41921, 118858, 9756, 6985, 119258, 0, 74219, 0, 0, 118997, 8012, 5674, - 12353, 0, 12361, 5677, 5588, 0, 41925, 0, 41920, 5673, 120534, 5676, - 41923, 12694, 118978, 5672, 1294, 0, 78059, 0, 42511, 1727, 0, 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, + 971, 13062, 0, 0, 65195, 64767, 0, 74428, 0, 0, 0, 0, 0, 0, 10045, 64303, + 13275, 0, 11057, 0, 13276, 0, 41525, 0, 7271, 11444, 0, 0, 0, 12229, + 41523, 0, 0, 73751, 0, 64813, 0, 0, 10476, 3858, 0, 3932, 64958, 0, 0, + 73989, 0, 0, 0, 369, 0, 41784, 0, 64163, 0, 0, 0, 65474, 4796, 41782, 0, + 65479, 0, 41781, 10486, 41480, 120511, 9899, 0, 0, 404, 12821, 3741, 0, + 5788, 0, 0, 41222, 1831, 66020, 0, 0, 4388, 0, 746, 120784, 0, 0, 13131, + 65294, 0, 0, 0, 0, 4422, 4708, 3799, 74292, 119357, 0, 74430, 0, 11700, + 4374, 0, 0, 1364, 0, 8038, 0, 917597, 0, 0, 0, 0, 73979, 13174, 73968, + 13225, 0, 0, 65835, 0, 2365, 7841, 0, 42855, 118856, 42866, 0, 0, 0, + 66438, 41785, 41171, 64172, 13173, 4372, 119354, 0, 0, 0, 0, 0, 0, 12965, + 384, 64512, 10404, 10340, 119352, 1556, 5274, 13210, 0, 10017, 9733, + 41787, 0, 0, 41373, 0, 12303, 0, 13232, 13233, 349, 4863, 41371, 11656, + 0, 120703, 119883, 12861, 4398, 8543, 65618, 0, 1096, 0, 0, 0, 12441, + 12355, 119348, 119347, 4318, 10452, 0, 8032, 13243, 13237, 12719, 0, + 119101, 0, 64884, 119872, 119345, 8597, 0, 0, 9864, 0, 120785, 0, 0, + 13195, 41452, 64961, 7722, 0, 10459, 119878, 0, 119879, 66590, 0, 41533, + 66337, 0, 0, 0, 4965, 0, 917536, 73849, 0, 0, 0, 0, 6261, 119342, 43147, + 66570, 1957, 10420, 982, 2756, 13292, 13206, 0, 0, 2925, 73809, 13056, 0, + 13212, 65110, 0, 13190, 13187, 0, 13198, 118793, 0, 5242, 119179, 64476, + 1694, 8216, 0, 0, 43331, 0, 65620, 0, 43544, 0, 0, 41444, 65621, 120325, + 64799, 5246, 120326, 13185, 9709, 120323, 120322, 12314, 65616, 5238, + 119333, 0, 119337, 5236, 40979, 0, 74201, 8286, 0, 3936, 119331, 11699, + 41347, 0, 13235, 8842, 41248, 0, 4379, 13239, 12692, 7969, 0, 7219, 0, 0, + 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, 0, 0, 42841, 13267, 0, 0, + 41775, 0, 0, 41773, 0, 10663, 0, 0, 0, 6151, 12110, 0, 65572, 119602, + 65250, 13265, 13264, 64518, 0, 6100, 0, 0, 5808, 65922, 0, 12967, 66041, + 9676, 4583, 0, 0, 68097, 64575, 0, 11965, 0, 119211, 0, 0, 0, 0, 68102, + 9698, 7814, 74476, 119651, 0, 0, 41921, 0, 9756, 6985, 119258, 0, 74219, + 0, 0, 0, 8012, 5674, 12353, 0, 12361, 5677, 42323, 0, 41925, 0, 41920, + 5673, 120534, 5676, 41923, 12694, 118978, 5672, 1294, 0, 0, 0, 42511, + 1727, 0, 0, 0, 0, 0, 74222, 8718, 3550, 736, 10268, 4505, 10316, 74090, + 5826, 74270, 5813, 0, 120712, 5841, 5837, 0, 0, 3105, 12829, 5838, 5796, + 0, 119592, 5793, 0, 5866, 5797, 41011, 5865, 120091, 7956, 598, 0, 64649, 5806, 42398, 0, 9037, 5671, 120041, 0, 0, 0, 0, 0, 847, 0, 9529, 0, - 66657, 6980, 0, 120035, 78484, 0, 0, 120033, 78486, 0, 0, 120039, 42683, - 0, 0, 9624, 0, 0, 43190, 65463, 1554, 0, 42611, 42563, 0, 5651, 2929, - 6792, 43201, 0, 19963, 5698, 0, 0, 0, 0, 5644, 10292, 65546, 69821, - 68141, 8372, 0, 65116, 0, 120022, 0, 10388, 42799, 0, 41013, 10568, 0, 0, - 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, 0, 11661, 8122, 5818, 0, 0, 3861, 9540, 11028, 2554, 5158, 5714, - 127015, 0, 0, 807, 43079, 0, 78475, 976, 5511, 64553, 0, 42155, 0, 41356, - 74110, 118801, 0, 0, 8676, 0, 0, 11066, 451, 63941, 5798, 9349, 42018, 0, - 0, 0, 43609, 194703, 120553, 1440, 0, 194701, 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, 10377, 41656, 0, 0, 0, 5187, 0, 127277, 11286, 68620, 64217, 0, - 5232, 0, 41009, 0, 41005, 0, 0, 0, 8292, 195074, 4980, 8860, 73947, - 10028, 66478, 7076, 13182, 194705, 0, 0, 10631, 66031, 7972, 0, 78785, 0, - 7900, 0, 11309, 78319, 4198, 42725, 0, 67656, 78819, 0, 0, 0, 12931, 0, - 42684, 74285, 2088, 0, 64366, 65156, 8814, 42238, 74771, 0, 0, 12836, 0, - 0, 74342, 8593, 0, 0, 68445, 13255, 0, 0, 7464, 0, 65865, 0, 194650, 0, - 0, 9342, 120464, 0, 64516, 0, 78792, 10129, 41007, 74375, 0, 40995, - 12209, 41012, 119136, 0, 0, 120633, 40992, 0, 0, 68653, 43558, 5522, 0, - 61, 0, 74105, 3633, 0, 65162, 41234, 12089, 78281, 9771, 0, 13251, 0, 0, - 6262, 2784, 42743, 0, 8126, 66483, 0, 0, 441, 42621, 0, 0, 41002, 40999, - 119623, 43266, 0, 0, 10890, 74481, 65834, 8324, 119103, 64417, 74817, 0, - 64737, 0, 0, 8930, 66678, 74249, 1193, 10056, 1800, 13253, 13252, 7829, - 0, 0, 7743, 0, 0, 77904, 0, 77905, 9034, 6039, 0, 10075, 0, 41018, 65683, - 10338, 66469, 0, 0, 0, 42815, 0, 41966, 0, 0, 0, 11792, 43064, 41025, - 911, 7539, 0, 0, 120339, 65159, 64390, 0, 0, 5520, 11662, 0, 65330, - 42812, 0, 0, 12326, 0, 0, 42808, 0, 9348, 64901, 0, 0, 0, 0, 0, 0, - 917584, 43702, 0, 5857, 65342, 0, 119120, 120079, 8644, 0, 0, 0, 74296, - 41909, 0, 120332, 2791, 0, 1891, 69824, 0, 41907, 66647, 0, 8761, 12942, - 5748, 0, 10773, 0, 0, 8796, 78149, 6412, 2061, 8520, 13146, 0, 63931, 0, - 65902, 2882, 0, 0, 12843, 4520, 120345, 0, 0, 0, 0, 73860, 0, 0, 64345, - 0, 0, 0, 194940, 0, 0, 43679, 917585, 65117, 194939, 0, 10427, 0, 3844, - 0, 9755, 1110, 6612, 12222, 0, 194934, 0, 0, 783, 194935, 0, 0, 0, - 194720, 65056, 3620, 0, 68378, 4556, 0, 0, 194933, 74250, 0, 67657, - 10510, 4382, 66482, 0, 0, 0, 9177, 8902, 0, 9839, 0, 12891, 0, 0, 63999, - 2016, 41917, 9788, 63928, 0, 1862, 65800, 9155, 66623, 9786, 65082, - 41919, 8579, 41914, 7981, 0, 0, 4508, 64883, 0, 0, 0, 0, 64592, 74276, - 120080, 6784, 78788, 68181, 0, 0, 0, 127534, 12147, 9024, 66378, 66472, - 0, 64289, 65289, 78151, 66658, 194929, 64509, 78152, 0, 0, 11051, 0, 0, - 11355, 65885, 0, 0, 41214, 0, 12299, 0, 7500, 4506, 7773, 0, 0, 9963, - 68649, 0, 4040, 0, 6167, 0, 63922, 6594, 0, 0, 0, 3624, 43036, 0, 6387, - 63990, 19947, 63988, 41955, 0, 63993, 10440, 9611, 0, 6803, 0, 7738, - 63986, 11446, 63984, 120331, 3435, 78164, 0, 119108, 7029, 64258, 41292, - 118898, 12748, 42742, 9517, 11518, 0, 78790, 0, 194777, 63956, 42458, - 63954, 63953, 63960, 9591, 4516, 10217, 68370, 11469, 0, 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, 0, 415, 63964, 63963, 42345, 0, 5183, 1877, 42498, 0, 2927, - 0, 63961, 4472, 0, 0, 78159, 0, 917936, 42340, 4756, 0, 7081, 10730, - 7691, 10331, 63830, 119625, 194945, 42103, 8628, 9813, 0, 42453, 1604, - 9565, 10539, 0, 65764, 41415, 65767, 0, 8457, 42301, 11372, 64873, 11992, - 0, 0, 63980, 11801, 3622, 0, 64336, 12017, 10463, 63981, 4967, 64189, - 1966, 43628, 0, 0, 0, 0, 63971, 4347, 4416, 42098, 11009, 10694, 63973, - 402, 0, 13147, 0, 42100, 64646, 13228, 0, 41875, 3515, 74252, 11805, 0, - 11302, 6259, 43395, 0, 0, 194670, 0, 0, 0, 74425, 11299, 1561, 0, 0, - 64942, 0, 194733, 0, 194732, 0, 74301, 0, 11280, 0, 69784, 74060, 0, 0, - 119664, 5145, 12486, 65018, 66516, 5409, 0, 194669, 7402, 5399, 9685, - 74089, 7952, 5401, 0, 66616, 68421, 0, 0, 5405, 917555, 64866, 0, 0, 0, - 78784, 74248, 11330, 194723, 64690, 3254, 0, 0, 0, 42390, 43678, 194725, - 0, 65077, 0, 6388, 3355, 9508, 9867, 5723, 11520, 5611, 0, 3377, 0, 0, 0, - 0, 78228, 0, 0, 42691, 917886, 0, 74767, 0, 0, 1379, 246, 0, 0, 3788, 0, - 11041, 0, 66304, 0, 0, 8917, 42403, 301, 0, 0, 0, 0, 0, 0, 10656, 0, - 65214, 119242, 42567, 0, 13163, 0, 120831, 74597, 3182, 0, 0, 0, 65034, - 65889, 42169, 4755, 74244, 0, 11443, 0, 66319, 74598, 608, 600, 0, 1219, - 3934, 64206, 11483, 74510, 0, 74485, 42442, 65470, 0, 64202, 13160, 7759, - 42482, 485, 0, 0, 9828, 0, 0, 42280, 0, 9351, 7778, 64379, 7496, 42431, - 6916, 1208, 0, 119631, 11002, 42470, 0, 118946, 0, 0, 74041, 0, 0, 43539, - 5411, 42196, 0, 0, 0, 9150, 0, 42393, 13086, 1310, 194687, 9337, 12052, - 10643, 55271, 0, 194684, 2546, 194683, 213, 118852, 65611, 0, 0, 194756, - 74310, 6554, 0, 11914, 0, 0, 0, 0, 0, 0, 194681, 118826, 2713, 0, 9650, - 43330, 0, 194675, 1406, 0, 0, 0, 0, 68223, 4143, 194677, 0, 65748, 4141, - 9682, 65287, 1508, 194963, 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, 0, 12955, 10596, 2888, 0, 0, 0, 9657, - 9019, 194766, 0, 2878, 5390, 0, 194961, 0, 68679, 0, 7501, 6328, 0, - 10429, 10365, 0, 0, 41946, 7503, 5235, 803, 68381, 0, 0, 8986, 0, 10632, - 11934, 11452, 1332, 0, 0, 0, 0, 118887, 1791, 5191, 9288, 64822, 2892, 0, - 43394, 555, 0, 0, 66646, 0, 119002, 13151, 74512, 7289, 74055, 0, 8854, - 64162, 5858, 41927, 10582, 0, 1784, 1361, 195047, 0, 7905, 0, 64868, 0, - 13158, 0, 7211, 0, 9371, 73973, 0, 6828, 1625, 0, 0, 1342, 68440, 64171, - 0, 10903, 0, 0, 0, 0, 0, 4482, 41606, 0, 0, 0, 0, 64381, 0, 0, 0, 42245, - 0, 41972, 0, 444, 0, 9127, 66687, 66619, 0, 78025, 0, 11349, 40991, 0, 0, - 119599, 120830, 0, 1197, 0, 1149, 194970, 0, 0, 40990, 0, 0, 3492, 0, 0, - 0, 0, 0, 12838, 0, 19948, 0, 3099, 0, 0, 41087, 0, 0, 0, 119059, 12036, - 0, 0, 0, 8152, 0, 64428, 12227, 0, 0, 12828, 127511, 0, 0, 120708, 0, 0, - 10386, 119574, 0, 0, 0, 0, 68154, 0, 1743, 0, 0, 0, 65186, 0, 0, 9606, 0, - 0, 0, 0, 0, 0, 0, 0, 194967, 0, 0, 3395, 9362, 10878, 0, 0, 78362, 64830, - 0, 0, 41091, 3426, 1344, 8870, 0, 0, 4735, 0, 6119, 12822, 42699, 0, 0, - 74818, 0, 0, 42637, 41080, 0, 12039, 10559, 0, 118892, 0, 9472, 0, 11929, - 0, 7170, 9596, 6130, 0, 43629, 11579, 194741, 0, 194740, 0, 0, 66699, 0, - 1004, 0, 194737, 43234, 66008, 12627, 0, 68414, 0, 43619, 43382, 11300, - 43304, 9686, 5890, 11776, 7558, 0, 65627, 0, 10718, 13154, 3461, 9139, 0, - 0, 0, 0, 65365, 73877, 65628, 78019, 0, 0, 41708, 12860, 41703, 12069, - 10838, 5403, 10352, 73917, 10061, 43237, 0, 5140, 209, 0, 41704, 41056, - 43078, 0, 0, 0, 10899, 65469, 0, 0, 0, 2410, 993, 0, 120589, 120689, - 78693, 0, 0, 7232, 0, 119253, 0, 0, 74462, 2066, 10489, 42166, 43463, - 10659, 3600, 0, 4224, 1336, 41518, 0, 0, 0, 0, 41139, 64820, 0, 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, 0, 0, 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, 0, 11690, 5835, 0, 66625, - 10842, 41354, 42123, 43097, 11688, 66634, 1094, 194, 64692, 0, 8180, 0, - 0, 9972, 73865, 4519, 6114, 10898, 43072, 0, 0, 0, 0, 0, 10695, 0, 7540, - 0, 881, 7857, 6067, 65164, 0, 0, 0, 13311, 68403, 41857, 64321, 8359, 0, - 12689, 0, 194594, 0, 0, 0, 68183, 0, 0, 1287, 5436, 0, 0, 74142, 127013, - 74152, 119078, 6051, 10497, 0, 8985, 12109, 0, 0, 0, 0, 0, 3652, 10537, - 0, 1276, 120440, 6549, 279, 73745, 0, 0, 0, 1489, 0, 0, 0, 3899, 1007, - 42124, 0, 42122, 0, 0, 0, 11985, 1345, 78600, 0, 0, 8956, 43083, 119830, - 42138, 78610, 0, 12151, 78608, 78604, 78605, 6285, 78603, 78612, 78613, - 74194, 492, 8685, 0, 0, 0, 78622, 43712, 2582, 11470, 64538, 7444, 78615, - 78616, 41550, 0, 73837, 119823, 2527, 119824, 197, 2799, 0, 41944, - 120276, 9933, 0, 66515, 767, 5524, 7028, 0, 0, 119827, 119817, 119828, - 78633, 10896, 0, 1799, 120497, 6971, 74336, 0, 0, 65340, 118979, 41551, - 2434, 0, 0, 120579, 0, 4631, 0, 0, 6407, 0, 6338, 43214, 0, 7570, 0, - 3192, 0, 8414, 0, 0, 0, 0, 0, 9164, 66612, 0, 3171, 6623, 4961, 68396, - 886, 55216, 8654, 78832, 9993, 74390, 64603, 0, 69241, 9599, 78629, - 43084, 78627, 78628, 78625, 2399, 0, 8994, 10944, 41208, 0, 41168, 8178, - 0, 3367, 195008, 42510, 78641, 78636, 6804, 78634, 1947, 0, 0, 0, 42759, - 11068, 1705, 9331, 0, 74798, 9181, 65359, 0, 8017, 0, 65096, 66720, 0, - 43475, 0, 4909, 12126, 0, 120696, 4904, 0, 195012, 1365, 9253, 42757, - 43436, 7462, 0, 0, 0, 0, 119587, 64415, 0, 0, 5398, 0, 195014, 0, 0, 0, - 119015, 0, 0, 9476, 0, 0, 12763, 0, 3629, 0, 13005, 0, 3628, 0, 0, 0, - 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, 119814, 0, 12276, 0, 68372, 0, 0, 119244, 0, 0, 10467, 0, - 2443, 10918, 78217, 119825, 1001, 9241, 1927, 0, 0, 73987, 0, 0, 0, - 118828, 127504, 65678, 12867, 0, 8260, 77945, 7519, 11505, 12274, 8904, - 518, 65857, 0, 0, 13204, 4387, 857, 0, 65369, 0, 119583, 43125, 120592, - 0, 0, 0, 0, 5136, 1968, 0, 195023, 1337, 64967, 1629, 0, 796, 66506, 0, - 74123, 12877, 0, 42314, 43388, 0, 74403, 6120, 478, 65151, 68128, 0, - 43082, 6016, 0, 42284, 0, 4276, 1206, 3619, 41638, 0, 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, 127265, 4442, 10364, 0, 778, 41626, 42455, 7989, 74063, 3227, 0, - 127275, 73983, 2915, 11502, 41022, 41702, 10309, 127035, 78320, 0, 6975, - 0, 5415, 12176, 0, 0, 3462, 65215, 42629, 78691, 73784, 0, 0, 9759, 0, - 78324, 127254, 8114, 78698, 78697, 78696, 78695, 8710, 42495, 118956, 0, - 4051, 10460, 43364, 118917, 1356, 12161, 42713, 0, 127268, 1619, 9703, + 66657, 6980, 0, 120035, 0, 0, 0, 120033, 0, 0, 0, 120039, 0, 0, 0, 9624, + 0, 0, 43190, 65463, 1554, 0, 42611, 42563, 0, 5651, 2929, 0, 43201, 0, + 19963, 5698, 0, 0, 0, 0, 5644, 10292, 65546, 120492, 68141, 8372, 0, + 65116, 0, 120022, 0, 10388, 42799, 0, 41013, 10568, 0, 0, 2869, 0, 41015, + 0, 2785, 4366, 0, 10954, 41802, 0, 42608, 194688, 9884, 4759, 0, 0, + 10266, 41359, 1170, 127017, 0, 73908, 1609, 902, 0, 63936, 0, 11661, + 8122, 5818, 0, 0, 3861, 9540, 11028, 2554, 5158, 5714, 127015, 0, 0, 807, + 43079, 0, 0, 976, 5511, 64553, 0, 42155, 0, 41356, 74110, 118801, 0, 0, + 8676, 0, 0, 11066, 451, 63941, 5798, 9349, 42018, 0, 0, 0, 43609, 194703, + 120553, 1440, 0, 0, 120016, 74283, 11005, 0, 66656, 66044, 0, 194698, 0, + 0, 0, 10094, 0, 11529, 10857, 120643, 66436, 6546, 93, 0, 0, 74440, 0, 0, + 8171, 0, 119097, 127065, 917543, 383, 10377, 41656, 0, 0, 0, 5187, 0, 0, + 11286, 0, 64217, 0, 5232, 0, 41009, 0, 41005, 0, 0, 0, 8292, 195074, + 4980, 8860, 73947, 10028, 66478, 7076, 13182, 194705, 0, 0, 10631, 66031, + 7972, 0, 0, 0, 7900, 0, 11309, 194711, 4198, 64211, 0, 0, 0, 0, 0, 0, + 12931, 0, 0, 74285, 10185, 0, 64366, 65156, 8814, 0, 74771, 0, 0, 12836, + 0, 0, 74342, 8593, 0, 0, 0, 13255, 0, 0, 7464, 0, 65865, 0, 194650, 0, 0, + 9342, 120464, 0, 64516, 0, 0, 10129, 41007, 0, 0, 40995, 12209, 41012, + 119136, 0, 0, 120633, 40992, 0, 0, 0, 43558, 5522, 0, 61, 0, 74105, 3633, + 0, 65162, 41234, 12089, 0, 9771, 0, 13251, 0, 0, 6262, 2784, 0, 0, 8126, + 66483, 0, 0, 441, 42621, 0, 0, 41002, 40999, 119623, 43266, 0, 0, 10890, + 74481, 65834, 8324, 119103, 64417, 74817, 0, 64737, 0, 0, 8930, 0, 74249, + 1193, 10056, 1800, 13253, 13252, 7829, 0, 0, 7743, 0, 0, 0, 0, 0, 9034, + 6039, 0, 10075, 0, 41018, 65683, 10338, 66469, 0, 0, 0, 42815, 0, 41966, + 0, 0, 0, 11792, 0, 0, 911, 7539, 0, 0, 120339, 65159, 64390, 0, 0, 5520, + 11662, 0, 65330, 73886, 0, 0, 12326, 0, 0, 42808, 0, 9348, 64901, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 5857, 65342, 0, 119120, 0, 8644, 0, 0, 0, 74296, + 41909, 0, 120332, 2791, 0, 1891, 0, 0, 41907, 66647, 0, 8761, 12942, + 5748, 0, 10773, 0, 0, 8796, 0, 6412, 120347, 8520, 13146, 0, 63931, 0, + 65902, 2882, 0, 0, 12843, 4520, 0, 0, 0, 0, 0, 73860, 0, 0, 64345, 0, 0, + 0, 0, 0, 0, 0, 917585, 65117, 0, 0, 10427, 0, 3844, 0, 9755, 1110, 6612, + 12222, 0, 0, 0, 0, 783, 194935, 0, 0, 0, 0, 65056, 3620, 0, 118945, 4556, + 0, 0, 194933, 74250, 0, 0, 10510, 4382, 66482, 0, 0, 0, 9177, 8902, 0, + 9839, 0, 12891, 0, 0, 63999, 2016, 41917, 9788, 63928, 0, 1862, 65800, + 9155, 66623, 9786, 65082, 41919, 8579, 41914, 7981, 0, 0, 4508, 64883, 0, + 0, 0, 0, 64592, 74276, 120080, 41780, 120079, 68181, 0, 0, 0, 0, 12147, + 9024, 66378, 66472, 0, 64289, 65289, 0, 0, 0, 64509, 0, 0, 0, 11051, 0, + 0, 11355, 65885, 0, 0, 41214, 0, 12299, 0, 7500, 4506, 7773, 0, 0, + 118912, 0, 0, 4040, 0, 6167, 0, 63922, 6594, 0, 0, 0, 3624, 43036, 0, + 64655, 63990, 19947, 63988, 41955, 0, 63993, 63992, 9611, 0, 0, 0, 7738, + 63986, 11446, 63984, 0, 3435, 119652, 0, 119108, 7029, 64258, 41292, + 118898, 12748, 43115, 9517, 11518, 0, 0, 0, 194777, 63956, 42458, 63954, + 63953, 63960, 9591, 63958, 10217, 118845, 11469, 0, 42306, 2723, 118947, + 0, 0, 0, 0, 0, 11397, 2880, 0, 0, 2872, 0, 0, 3498, 4378, 917539, 4270, + 0, 65551, 118928, 6633, 0, 0, 5230, 0, 0, 0, 0, 0, 8161, 393, 12013, 0, + 0, 0, 415, 63964, 63963, 42345, 0, 5183, 1877, 42498, 0, 2927, 0, 63961, + 4472, 0, 0, 0, 0, 917936, 42340, 4756, 0, 7081, 10730, 7691, 0, 63830, + 119625, 194945, 42103, 8628, 9813, 0, 42453, 1604, 9565, 10539, 0, 65764, + 41415, 65767, 0, 8457, 42301, 11372, 64873, 11992, 0, 0, 63980, 11801, + 3622, 0, 64336, 12017, 10463, 63981, 4967, 64189, 1966, 63976, 0, 0, 0, + 0, 63971, 4347, 4416, 42098, 11009, 10694, 63973, 402, 0, 13147, 0, + 42100, 64646, 13228, 0, 41875, 3515, 74252, 11805, 0, 11302, 6259, 0, 0, + 0, 0, 0, 0, 0, 74425, 11299, 1561, 0, 0, 64942, 0, 194733, 0, 194732, 0, + 74301, 0, 11280, 0, 0, 74060, 0, 0, 119664, 5145, 12486, 65018, 66516, + 5409, 0, 194669, 64347, 5399, 9685, 74089, 7952, 5401, 0, 66616, 0, 0, 0, + 5405, 917555, 64866, 0, 0, 0, 0, 74248, 11330, 194723, 64690, 3254, 0, 0, + 0, 42390, 0, 194725, 0, 65077, 0, 0, 3355, 9508, 9867, 5723, 11520, 5611, + 0, 3377, 0, 0, 0, 0, 0, 0, 0, 119119, 0, 0, 119068, 0, 0, 1379, 246, 0, + 0, 3788, 0, 11041, 0, 66304, 0, 0, 8917, 42403, 301, 0, 0, 0, 0, 0, 0, + 10656, 0, 65214, 119242, 42567, 0, 13163, 0, 120831, 74597, 3182, 0, 0, + 0, 0, 65889, 42169, 4755, 74244, 0, 11443, 0, 66326, 74598, 608, 600, 0, + 1219, 3934, 64206, 11483, 74510, 0, 74485, 42442, 65470, 0, 64202, 13160, + 7759, 42482, 485, 0, 0, 9828, 0, 0, 42280, 0, 9351, 7778, 64379, 7496, + 42431, 6916, 1208, 0, 119631, 11002, 42470, 0, 0, 0, 0, 74041, 0, 0, + 43539, 5411, 0, 0, 0, 0, 9150, 0, 42393, 13086, 1310, 194687, 9337, + 12052, 10643, 64586, 0, 194684, 2546, 194683, 213, 118852, 65611, 0, 0, + 194756, 74310, 6554, 0, 11914, 0, 0, 0, 0, 0, 0, 194681, 118826, 2713, 0, + 9650, 43330, 0, 194675, 1406, 0, 0, 0, 0, 194678, 4143, 194677, 0, 65748, + 4141, 9682, 65287, 1508, 0, 8779, 10569, 8725, 13299, 66638, 0, 42263, + 4145, 0, 65751, 66613, 0, 65738, 73729, 9185, 9550, 0, 0, 0, 0, 0, 65736, + 41951, 64816, 65756, 0, 12955, 10596, 2888, 0, 0, 0, 9657, 9019, 194766, + 0, 2878, 5390, 0, 194961, 0, 0, 0, 7501, 13203, 0, 10429, 10365, 0, 0, + 41946, 7503, 5235, 803, 0, 0, 0, 8986, 0, 10632, 11934, 11452, 1332, 0, + 0, 0, 0, 917545, 1791, 5191, 9288, 64822, 2892, 0, 67849, 555, 0, 0, + 66646, 0, 119002, 13151, 74512, 7289, 74055, 0, 0, 64162, 5858, 41927, + 10582, 0, 1784, 1361, 195047, 0, 7905, 0, 64868, 0, 13158, 0, 7211, 0, + 9371, 0, 0, 0, 1625, 0, 0, 1342, 0, 64171, 0, 10903, 0, 0, 0, 0, 0, 4482, + 41606, 0, 0, 0, 0, 64381, 0, 0, 0, 42245, 0, 41972, 0, 444, 0, 9127, + 66687, 66619, 0, 194972, 0, 11349, 40991, 0, 0, 119599, 120830, 0, 1197, + 0, 1149, 194970, 0, 0, 40990, 0, 0, 3492, 0, 0, 0, 0, 0, 12838, 0, 19948, + 0, 3099, 0, 0, 41087, 0, 0, 0, 119059, 12036, 0, 0, 0, 8152, 0, 64428, + 12227, 0, 0, 12828, 0, 0, 0, 0, 0, 0, 10386, 119574, 0, 0, 0, 0, 68154, + 0, 1743, 0, 0, 0, 65186, 0, 0, 9606, 0, 0, 0, 0, 0, 0, 0, 0, 194967, 0, + 0, 3395, 9362, 10878, 0, 0, 0, 64830, 0, 0, 41091, 3426, 1344, 8870, 0, + 0, 4735, 0, 6119, 12822, 0, 0, 0, 74818, 0, 0, 42637, 41080, 0, 12039, + 10559, 0, 118892, 0, 9472, 0, 11929, 0, 7170, 9596, 6130, 0, 0, 11579, 0, + 0, 194740, 0, 0, 66699, 0, 1004, 0, 194737, 0, 66008, 12627, 0, 0, 0, 0, + 0, 11300, 43304, 9686, 5890, 11776, 7558, 0, 65627, 0, 10718, 13154, + 3461, 9139, 0, 0, 0, 0, 0, 73877, 65628, 0, 0, 0, 41708, 12860, 41703, + 12069, 10838, 5403, 10352, 73917, 10061, 0, 0, 5140, 209, 0, 41704, 0, + 43078, 0, 0, 0, 10899, 65469, 0, 0, 0, 2410, 993, 0, 120589, 120689, 0, + 0, 0, 7232, 0, 119253, 0, 0, 74462, 0, 10489, 42166, 0, 10659, 3600, 0, + 4224, 1336, 41518, 0, 0, 0, 0, 41139, 64820, 0, 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, 0, 0, 0, 0, 7209, 8223, 2409, 7799, 0, 74424, + 0, 0, 4731, 0, 66629, 0, 0, 1255, 4149, 9247, 0, 9913, 0, 0, 0, 0, 65101, + 0, 11694, 0, 11690, 5835, 0, 66625, 10842, 41354, 42123, 43097, 11688, + 66634, 1094, 194, 64692, 0, 8180, 0, 0, 73872, 73865, 0, 6114, 10898, + 43072, 0, 0, 0, 0, 0, 10695, 0, 7540, 0, 881, 7857, 6067, 65164, 0, 0, 0, + 13311, 0, 41857, 64321, 8359, 0, 12689, 0, 194594, 0, 0, 0, 68183, 0, 0, + 1287, 5436, 0, 0, 74142, 127013, 74152, 119078, 6051, 10497, 0, 8985, + 12109, 0, 0, 0, 0, 0, 3652, 10537, 0, 1276, 0, 6549, 279, 0, 0, 0, 0, + 1489, 0, 0, 0, 3899, 1007, 42124, 0, 42122, 0, 0, 0, 11985, 1345, 127006, + 0, 0, 8956, 43083, 0, 42138, 0, 0, 12151, 0, 0, 0, 6285, 0, 0, 0, 74194, + 492, 8685, 0, 0, 0, 0, 0, 2582, 11470, 64538, 7444, 0, 0, 41550, 0, + 73837, 0, 2527, 119824, 197, 2799, 0, 0, 120276, 0, 0, 66515, 767, 5524, + 7028, 0, 0, 119827, 0, 0, 0, 0, 0, 1799, 120497, 6971, 74336, 0, 0, + 65340, 118979, 0, 2434, 0, 0, 120579, 0, 4631, 0, 0, 6407, 0, 19931, + 43214, 0, 7570, 0, 3192, 0, 8414, 0, 0, 0, 0, 0, 9164, 66612, 0, 3171, + 6623, 4961, 0, 886, 0, 8654, 0, 9993, 74390, 64603, 0, 0, 9599, 0, 43084, + 0, 0, 0, 2399, 0, 8994, 10944, 41208, 0, 41168, 8178, 0, 3367, 195008, + 42510, 0, 0, 7789, 0, 1947, 0, 0, 0, 42759, 11068, 1705, 9331, 0, 74798, + 9181, 0, 0, 8017, 0, 65096, 66720, 0, 0, 0, 4909, 12126, 0, 120696, 4904, + 0, 195012, 1365, 9253, 42757, 0, 7462, 0, 0, 0, 0, 119587, 64415, 0, 0, + 5398, 0, 195014, 0, 0, 0, 0, 0, 0, 9476, 0, 0, 12763, 0, 3629, 0, 13005, + 0, 3628, 0, 0, 0, 3469, 42107, 42116, 917578, 64809, 2928, 4905, 9853, + 851, 9040, 0, 64665, 43086, 9114, 0, 42583, 9315, 4822, 4906, 3852, 2847, + 0, 3236, 11317, 1251, 7777, 41852, 11410, 10964, 0, 43222, 12646, 120269, + 10259, 9865, 65821, 0, 6018, 0, 0, 12276, 0, 0, 0, 0, 119613, 0, 0, + 10467, 0, 2443, 10918, 0, 0, 1001, 9241, 1927, 0, 0, 73987, 0, 0, 0, + 118828, 0, 65678, 12867, 0, 8260, 0, 7519, 118794, 12274, 8904, 518, + 65857, 0, 0, 13204, 4387, 857, 0, 65369, 0, 119583, 43125, 120592, 0, 0, + 0, 0, 5136, 1968, 0, 195023, 1337, 64967, 1629, 0, 796, 66506, 0, 74123, + 0, 0, 42314, 195021, 0, 74403, 6120, 478, 65151, 68128, 0, 43082, 6016, + 0, 42284, 0, 4276, 1206, 3619, 41638, 0, 3843, 12011, 8853, 3361, 0, 490, + 10715, 7578, 0, 0, 65350, 10530, 12348, 8653, 74314, 42435, 6154, 9551, + 65354, 0, 784, 42397, 334, 0, 42416, 65356, 65273, 0, 0, 7025, 10364, 0, + 778, 41626, 42455, 7989, 74063, 3227, 0, 0, 73983, 2915, 41698, 41022, + 41702, 10309, 127035, 0, 0, 6975, 0, 5415, 12176, 0, 0, 3462, 65215, + 42629, 0, 73784, 0, 0, 9759, 0, 0, 0, 8114, 0, 0, 0, 0, 8710, 42495, + 118956, 0, 4051, 10460, 74097, 118917, 1356, 12161, 0, 0, 0, 1619, 9703, 43152, 42489, 42112, 0, 1875, 10808, 42109, 120284, 41860, 64862, 13305, - 64907, 5289, 13144, 0, 0, 5575, 9675, 0, 5940, 226, 2649, 6336, 0, 0, - 43236, 3382, 42449, 6498, 1658, 11936, 78232, 0, 11269, 10151, 73759, - 43100, 74449, 65508, 0, 0, 0, 8935, 917985, 0, 0, 0, 616, 74753, 65178, - 4684, 78701, 119653, 0, 0, 0, 6048, 74460, 42110, 73965, 10870, 8557, - 11054, 68664, 119049, 9681, 4475, 0, 41142, 2100, 0, 120731, 6035, 0, - 7651, 10296, 0, 0, 0, 917987, 0, 118966, 74144, 40997, 0, 10392, 10328, - 40998, 43462, 74488, 0, 9800, 8979, 0, 119131, 41000, 0, 119239, 6487, - 10977, 0, 10344, 0, 65299, 5394, 43246, 78243, 10220, 66505, 41200, 0, - 4425, 0, 0, 0, 43074, 73799, 0, 78147, 0, 12173, 78545, 0, 0, 65338, 0, - 0, 119582, 4474, 0, 43093, 0, 1587, 0, 127372, 64475, 0, 1369, 0, 78251, - 7927, 0, 4560, 0, 0, 0, 0, 64948, 4430, 74347, 42601, 4514, 66434, 0, - 8194, 65462, 10626, 10965, 0, 8893, 0, 12542, 0, 65341, 0, 65829, 7925, - 119822, 10475, 0, 0, 1352, 11069, 7707, 127560, 0, 65279, 127102, 68207, - 127100, 65605, 6040, 127097, 10071, 0, 9336, 0, 0, 8899, 7798, 64474, - 64259, 0, 65188, 7820, 43018, 0, 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, 0, 8224, 0, - 8938, 6043, 12738, 0, 0, 5321, 0, 0, 0, 2589, 74332, 1689, 7802, 4683, - 74318, 42704, 120296, 11905, 0, 0, 0, 0, 74513, 6049, 0, 4027, 834, - 118962, 1803, 0, 1503, 0, 0, 0, 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, 0, 78519, - 0, 8572, 6021, 77896, 0, 77895, 43155, 0, 0, 3146, 10959, 9483, 0, 77893, - 10981, 166, 917841, 8635, 0, 10623, 408, 119058, 127507, 13298, 0, 7426, - 41641, 12717, 0, 7607, 10639, 66713, 0, 0, 41643, 74134, 0, 8713, 41640, - 10221, 41645, 66712, 6645, 646, 66726, 66711, 42129, 0, 77901, 3472, - 8697, 0, 0, 0, 0, 0, 0, 5809, 1950, 119356, 0, 74572, 0, 42136, 0, 0, 0, - 0, 3247, 119854, 65017, 0, 68428, 66668, 0, 0, 10983, 0, 0, 0, 41567, 0, - 0, 0, 194624, 0, 0, 0, 8285, 0, 4509, 0, 66471, 12216, 0, 40988, 0, 0, - 41727, 0, 0, 2396, 0, 0, 74018, 917538, 64940, 0, 3886, 0, 42457, 119008, - 0, 996, 68123, 917571, 4249, 0, 917594, 11707, 8222, 0, 7939, 0, 917574, - 917582, 917592, 917569, 8534, 0, 40983, 0, 0, 0, 7201, 12561, 0, 42371, - 12558, 0, 0, 10052, 40982, 0, 0, 1488, 0, 0, 0, 917559, 0, 0, 1563, 0, - 9619, 0, 0, 0, 0, 0, 5803, 7797, 6070, 10006, 0, 2922, 6082, 0, 65009, 0, - 12567, 0, 0, 41412, 0, 0, 3607, 65863, 10046, 9612, 42153, 8218, 9485, 0, - 2032, 78354, 0, 0, 0, 0, 0, 43085, 6057, 508, 0, 0, 120265, 0, 0, 0, 0, - 638, 6083, 119072, 0, 0, 2305, 78348, 0, 0, 6056, 6659, 0, 0, 6085, 0, 0, - 3915, 41634, 0, 41639, 63912, 11941, 0, 4028, 1787, 42180, 43096, 0, - 3249, 1768, 0, 12328, 501, 127074, 10601, 0, 583, 0, 41977, 0, 66004, - 119350, 6505, 74010, 0, 13064, 55267, 120810, 6500, 5526, 65049, 0, - 73764, 0, 0, 12745, 9678, 0, 120587, 9869, 0, 1771, 0, 8936, 0, 0, 4208, - 78341, 119115, 78342, 0, 0, 74101, 0, 11762, 0, 0, 77997, 0, 66475, 0, - 5027, 0, 0, 0, 5069, 73862, 5028, 9897, 0, 73739, 5026, 0, 68639, 6331, - 0, 8931, 0, 1415, 8866, 41901, 74790, 78138, 119361, 0, 43106, 5029, - 65309, 1580, 3598, 68424, 41070, 77903, 0, 3440, 78215, 1562, 0, 127236, - 119358, 1716, 0, 10600, 0, 620, 41001, 6028, 0, 42892, 0, 74822, 5024, - 120829, 41003, 0, 5025, 0, 0, 0, 119328, 0, 65557, 0, 74541, 0, 11599, 0, - 11602, 6243, 11574, 11581, 11597, 11598, 6253, 6105, 11584, 74195, 11569, - 65275, 8906, 127096, 5755, 2636, 0, 10815, 11619, 78717, 41540, 7815, - 11616, 6979, 12080, 7721, 11604, 7869, 1592, 0, 42152, 78498, 41048, 0, - 829, 0, 0, 19950, 0, 0, 6616, 0, 118875, 10953, 391, 0, 69785, 482, - 42296, 11588, 0, 43606, 0, 68397, 66370, 0, 42335, 0, 0, 0, 7538, 5315, - 0, 42491, 0, 42061, 0, 4576, 0, 68417, 120241, 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, 0, 0, 929, 6827, 42035, 42437, 1555, 0, 8691, - 66435, 0, 41662, 0, 0, 0, 0, 0, 4578, 64513, 41664, 0, 42578, 0, 41661, - 78715, 43305, 9356, 0, 0, 0, 1286, 10166, 0, 0, 64707, 0, 42476, 7730, 0, - 0, 42483, 0, 0, 42324, 42291, 10020, 43359, 0, 6641, 525, 41627, 0, 8763, - 0, 41628, 533, 11931, 65225, 8321, 42504, 42581, 0, 6915, 42310, 4377, - 8559, 0, 120234, 0, 13193, 64350, 11666, 8679, 41924, 1576, 7735, 0, 0, - 73840, 0, 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, - 0, 119329, 0, 10013, 0, 0, 127095, 9492, 11782, 64382, 12833, 118986, 0, - 1297, 41630, 630, 127094, 0, 120774, 120570, 1043, 43652, 66223, 10090, - 0, 0, 313, 917563, 41881, 0, 42311, 7445, 0, 5750, 10759, 9419, 55222, - 9405, 11268, 0, 9398, 8526, 9399, 9422, 0, 66495, 0, 0, 127239, 41718, - 10707, 1603, 0, 119003, 0, 631, 77952, 77953, 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, 0, 0, 8037, 917803, 11535, 0, 74845, 5185, 66696, 5521, - 10334, 2093, 77983, 10302, 0, 10104, 1027, 5181, 0, 0, 10523, 1446, - 42320, 41646, 991, 5189, 42472, 41647, 120105, 1722, 5581, 77979, 3405, - 0, 194644, 5523, 0, 42620, 0, 0, 9549, 0, 10549, 55282, 9661, 43682, 0, - 77910, 120026, 78708, 0, 77911, 0, 41991, 0, 0, 7630, 9846, 7684, 10350, - 0, 1174, 77981, 42733, 77978, 77980, 66485, 77977, 42277, 77974, 42456, - 65667, 0, 12330, 0, 0, 42417, 42383, 0, 41344, 6293, 0, 66252, 77984, - 74443, 0, 10209, 8313, 4195, 74435, 1316, 66690, 120032, 6332, 64894, 0, - 65871, 78060, 1736, 0, 3901, 12228, 120151, 65200, 3383, 10446, 78841, - 693, 9130, 314, 64149, 42420, 11949, 0, 120152, 11026, 0, 5332, 6940, - 64154, 12635, 127007, 42706, 1751, 273, 8165, 13166, 120763, 78840, 0, - 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, 0, 74095, 0, 41848, 2567, 66006, 0, 4044, 0, 0, 12233, 0, 1023, - 474, 0, 119818, 0, 0, 42487, 65556, 0, 0, 42295, 0, 0, 0, 0, 9835, 66499, - 0, 5417, 12275, 10895, 0, 274, 0, 1858, 0, 0, 55251, 10118, 3133, 0, - 73795, 0, 9610, 8068, 8197, 0, 699, 0, 41665, 5868, 0, 0, 42182, 7581, - 19940, 43668, 41667, 0, 0, 1923, 65583, 65802, 0, 64597, 43444, 119184, - 0, 0, 6464, 7036, 2996, 1937, 0, 0, 41835, 4047, 41842, 0, 64107, 0, 0, - 11017, 0, 0, 293, 77966, 0, 64791, 41827, 42466, 43422, 10579, 8560, 0, - 65413, 77963, 4803, 12964, 1739, 1941, 3900, 0, 1713, 77969, 0, 73957, + 64907, 5289, 13144, 0, 0, 5575, 9675, 0, 5940, 226, 2649, 74493, 0, 0, 0, + 3382, 42449, 6498, 1658, 11936, 0, 0, 11269, 0, 73759, 43100, 74449, + 65508, 0, 0, 0, 8935, 917985, 0, 0, 0, 616, 0, 65178, 4684, 0, 119653, 0, + 0, 0, 6048, 74460, 42110, 73965, 10870, 8557, 11054, 0, 0, 9681, 4475, 0, + 0, 0, 0, 120731, 6035, 0, 7651, 10296, 0, 0, 0, 0, 0, 118966, 74144, + 40997, 0, 10392, 10328, 40998, 0, 74488, 0, 9800, 8979, 0, 119131, 41000, + 0, 119239, 6487, 10977, 0, 10344, 0, 65299, 5394, 0, 0, 10220, 66505, + 41200, 0, 4425, 0, 0, 0, 43074, 73799, 0, 0, 0, 12173, 0, 0, 0, 65338, 0, + 0, 119582, 4474, 0, 43093, 0, 1587, 0, 0, 64475, 0, 1369, 0, 0, 0, 0, + 4560, 0, 0, 0, 0, 64948, 4430, 74347, 42601, 4514, 0, 0, 8194, 65462, + 10626, 10965, 0, 8893, 0, 12542, 0, 65341, 0, 65829, 7925, 0, 10475, 0, + 0, 1352, 11069, 7707, 0, 0, 65279, 127102, 127101, 127100, 65605, 6040, + 127097, 10440, 0, 9336, 0, 0, 8899, 7798, 64474, 64259, 0, 65188, 7820, + 43018, 0, 0, 7746, 1492, 0, 10884, 0, 0, 5127, 11285, 42501, 5495, 4273, + 43095, 41426, 10849, 5730, 2999, 0, 120720, 74304, 371, 64373, 6023, 169, + 5497, 11708, 0, 0, 0, 0, 8224, 0, 8938, 6043, 12738, 0, 0, 5321, 0, 0, 0, + 2589, 74332, 1689, 7802, 4683, 74318, 0, 120296, 66704, 0, 0, 0, 0, + 74513, 6049, 0, 4027, 834, 118962, 1803, 0, 1503, 0, 0, 0, 5731, 1381, + 2387, 0, 0, 8289, 64525, 65817, 2881, 65514, 0, 9601, 2879, 9668, 9766, + 0, 5729, 0, 74410, 6036, 64881, 4026, 9361, 127091, 2887, 0, 3526, 6298, + 0, 0, 0, 0, 0, 8572, 6021, 0, 0, 0, 43155, 0, 0, 3146, 10959, 0, 0, 0, + 10981, 166, 0, 8635, 0, 10623, 408, 0, 0, 13298, 0, 7426, 41641, 12717, + 0, 7607, 10639, 66713, 0, 0, 41643, 74134, 0, 8713, 41640, 0, 41645, + 66712, 6645, 646, 66726, 66711, 42129, 0, 0, 3472, 8697, 0, 0, 0, 0, 0, + 0, 5809, 1950, 119356, 0, 74572, 0, 42136, 0, 0, 0, 0, 3247, 119854, + 65017, 0, 0, 66668, 0, 0, 10983, 0, 0, 0, 41567, 0, 0, 0, 0, 0, 0, 0, + 8285, 0, 4509, 0, 66471, 12216, 0, 40988, 0, 0, 41727, 0, 0, 2396, 0, 0, + 0, 0, 64940, 0, 3886, 0, 42457, 0, 0, 996, 0, 917571, 4249, 0, 917594, + 11707, 8222, 0, 7939, 0, 917574, 917582, 917592, 917569, 8534, 0, 40983, + 0, 0, 0, 7201, 12561, 0, 42371, 12558, 0, 0, 10052, 40982, 0, 0, 1488, 0, + 0, 0, 917559, 0, 0, 1563, 0, 9619, 0, 0, 0, 0, 0, 5803, 7797, 6070, + 10006, 0, 2922, 6082, 0, 65009, 0, 12567, 0, 0, 0, 0, 0, 3607, 65863, + 10046, 9612, 42153, 8218, 9485, 0, 2032, 0, 0, 0, 0, 0, 0, 43085, 6057, + 508, 0, 0, 120265, 0, 0, 0, 0, 638, 6083, 119072, 0, 0, 2305, 0, 0, 0, + 6056, 6659, 0, 0, 6085, 0, 0, 3915, 41634, 0, 41639, 63912, 11941, 0, + 4028, 1787, 42180, 43096, 0, 3249, 1768, 0, 12328, 501, 127074, 10601, 0, + 583, 0, 41977, 0, 66004, 119350, 6505, 74010, 0, 13064, 0, 120810, 6500, + 5526, 65049, 0, 74531, 0, 0, 12745, 9678, 0, 120587, 9869, 0, 1771, 0, + 8936, 0, 0, 4208, 0, 119115, 0, 0, 0, 74101, 0, 11762, 0, 0, 0, 0, 66475, + 0, 5027, 0, 0, 0, 5069, 73862, 5028, 9897, 0, 73739, 5026, 0, 0, 0, 0, + 8931, 0, 1415, 8866, 41901, 74790, 0, 119361, 0, 43106, 5029, 119360, + 1580, 3598, 0, 41070, 0, 0, 3440, 119359, 1562, 0, 917827, 119358, 1716, + 0, 10600, 0, 620, 41001, 6028, 0, 42892, 0, 74822, 5024, 120829, 41003, + 0, 5025, 0, 0, 0, 119328, 0, 65557, 0, 0, 0, 11599, 0, 11602, 6243, + 11574, 11581, 11597, 11598, 6253, 6105, 11584, 74195, 11569, 65275, 8906, + 127096, 66491, 2636, 0, 10815, 11619, 0, 41540, 7815, 11616, 6979, 12080, + 7721, 11604, 7869, 1592, 0, 42152, 0, 41048, 0, 829, 0, 0, 19950, 0, 0, + 6616, 0, 118875, 10953, 391, 0, 0, 482, 42296, 11588, 0, 43606, 0, 0, + 66370, 0, 42335, 0, 0, 0, 7538, 5315, 0, 42491, 0, 42061, 0, 4576, 0, 0, + 120241, 4277, 0, 4039, 64472, 42338, 368, 42058, 3960, 11043, 11337, + 120247, 917820, 63989, 3958, 12132, 1849, 0, 9921, 42451, 917818, 41147, + 42064, 11959, 42404, 41160, 0, 3618, 0, 0, 43300, 5156, 0, 0, 929, 0, + 917822, 42437, 1555, 0, 8691, 66435, 0, 41662, 0, 0, 0, 0, 0, 4578, + 64513, 41664, 0, 42578, 0, 41661, 0, 43305, 9356, 0, 0, 0, 1286, 10166, + 0, 0, 64707, 0, 42476, 7730, 0, 0, 42483, 0, 0, 42324, 42291, 10020, + 43359, 0, 6641, 525, 41627, 0, 8763, 0, 41628, 533, 11931, 65225, 8321, + 42504, 42581, 0, 6915, 42310, 4377, 8559, 0, 120234, 0, 13193, 64350, + 11666, 8679, 41924, 1576, 7735, 0, 0, 73840, 0, 11374, 0, 10889, 917909, + 7757, 42462, 120226, 126994, 66493, 2718, 4168, 73842, 13308, 120112, 0, + 1179, 4440, 0, 0, 363, 11015, 0, 0, 64296, 127090, 66692, 120826, 0, + 66492, 6593, 64625, 41963, 0, 119329, 0, 10013, 0, 0, 127095, 9492, + 11782, 64382, 12833, 0, 0, 1297, 41630, 630, 127094, 0, 0, 0, 1043, 0, 0, + 10090, 0, 0, 313, 917563, 41881, 0, 42311, 7445, 0, 5750, 10759, 9419, 0, + 9405, 11268, 0, 9398, 8526, 9399, 9422, 0, 66495, 0, 0, 0, 41718, 10707, + 1603, 0, 0, 0, 631, 0, 0, 13161, 65272, 0, 10546, 74210, 0, 11600, 0, + 2797, 73821, 42427, 306, 714, 3058, 42381, 120036, 127080, 12351, 42395, + 0, 11607, 0, 42282, 0, 0, 9157, 73765, 66364, 42433, 0, 7603, 12803, 180, + 42141, 0, 120612, 66494, 12674, 8244, 362, 0, 0, 8037, 917804, 11535, 0, + 74845, 5185, 66696, 5521, 10334, 5519, 0, 10302, 0, 10104, 1027, 5181, 0, + 0, 10523, 1446, 42320, 41646, 991, 5189, 42472, 41647, 120105, 1722, + 5581, 0, 3405, 0, 194644, 5523, 0, 42620, 0, 0, 9549, 0, 10549, 0, 9661, + 66486, 0, 120537, 120026, 0, 0, 0, 0, 41991, 0, 0, 7630, 9846, 7684, + 10350, 0, 1174, 0, 0, 0, 0, 66485, 0, 42277, 0, 42456, 65667, 0, 12330, + 0, 0, 42417, 42383, 0, 41344, 6293, 0, 66252, 0, 74443, 0, 10209, 8313, + 4195, 0, 9010, 66690, 0, 0, 64894, 0, 65871, 0, 1736, 0, 3901, 12228, + 120151, 65200, 3383, 10446, 0, 693, 9130, 314, 64149, 42420, 11949, 0, 0, + 11026, 0, 5332, 6940, 64154, 12635, 127007, 120628, 1751, 273, 8165, + 13166, 120763, 0, 0, 12824, 0, 4528, 5320, 6301, 0, 6133, 9339, 9463, + 42346, 10922, 64560, 3757, 0, 0, 0, 65869, 73760, 2569, 0, 2326, 65740, + 2565, 42459, 7596, 7921, 0, 74095, 0, 41848, 2567, 66006, 0, 4044, 0, 0, + 12233, 0, 1023, 474, 0, 119818, 0, 0, 42487, 65556, 0, 0, 42295, 0, 0, 0, + 0, 9835, 66499, 0, 0, 12275, 10895, 0, 274, 0, 1858, 0, 0, 0, 10118, + 3133, 0, 73795, 0, 9610, 8068, 8197, 0, 699, 0, 41665, 5868, 0, 0, 42182, + 7581, 19940, 0, 41667, 0, 0, 1923, 65583, 65802, 0, 64597, 0, 119184, 0, + 0, 6464, 7036, 2996, 1937, 0, 0, 41835, 4047, 41842, 0, 65217, 0, 0, + 11017, 0, 0, 293, 0, 0, 64791, 41827, 42466, 65416, 10579, 8560, 0, + 65413, 118835, 4803, 12964, 1739, 1941, 3900, 0, 1713, 0, 0, 73957, 11407, 42441, 41971, 6297, 120098, 64105, 0, 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, 0, 6208, - 67849, 5746, 73749, 0, 64416, 42422, 0, 0, 7082, 73775, 338, 5059, - 194719, 0, 42328, 10767, 0, 8115, 0, 0, 0, 8227, 2073, 1218, 0, 0, 65848, - 0, 0, 0, 0, 126987, 4486, 0, 0, 0, 10925, 0, 0, 0, 0, 42309, 10257, 0, - 10273, 0, 10305, 42461, 0, 42349, 8832, 78051, 64127, 10644, 42662, - 78828, 42278, 74451, 126988, 917857, 7794, 0, 42429, 6377, 42316, 119026, - 3669, 3968, 42468, 0, 78544, 0, 65402, 119581, 0, 0, 64933, 0, 41960, - 6699, 0, 0, 0, 6823, 42391, 1588, 65400, 8409, 78223, 19967, 65398, 787, - 0, 917939, 0, 6115, 2078, 41654, 42480, 0, 0, 41655, 65401, 43975, 0, 0, - 0, 644, 65500, 41657, 10778, 3659, 9533, 184, 1553, 13107, 65484, 0, - 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, 0, 0, 118930, 64527, 0, 7877, 73803, 0, 0, - 120096, 74602, 9955, 0, 4055, 42817, 0, 65212, 11715, 12190, 12319, - 78630, 0, 78631, 9502, 65427, 0, 65424, 12607, 0, 9734, 65425, 0, 0, 0, - 78835, 0, 10112, 10827, 0, 9866, 74527, 66675, 0, 8625, 64346, 11290, - 10477, 0, 8636, 0, 8315, 65444, 0, 0, 74595, 6152, 0, 0, 6629, 0, 120171, - 0, 74589, 43993, 0, 69790, 0, 0, 43690, 11046, 11490, 42730, 4485, 0, 0, - 64926, 0, 0, 0, 5869, 12437, 42728, 0, 7040, 3588, 0, 12825, 0, 0, 12725, - 0, 0, 78642, 223, 0, 69806, 120166, 42444, 0, 64499, 65245, 0, 1171, 0, - 120165, 0, 1805, 8772, 0, 0, 9930, 65247, 78619, 120111, 2338, 0, 118853, - 0, 42676, 0, 64800, 65236, 67644, 68126, 1213, 0, 64075, 797, 64074, - 8734, 4212, 0, 64387, 4115, 0, 5005, 64070, 64073, 10679, 0, 77954, 0, - 64276, 426, 0, 0, 8251, 10136, 65436, 0, 65088, 43302, 1224, 0, 65576, - 120158, 10701, 1764, 3101, 0, 65291, 120159, 0, 11373, 6378, 0, 120103, - 8663, 9312, 41644, 4539, 3787, 0, 9222, 0, 0, 4259, 9092, 74567, 41961, - 0, 12724, 66357, 42331, 64935, 0, 0, 1293, 7947, 12003, 0, 74593, 120308, - 2454, 42717, 3613, 0, 0, 0, 65888, 8816, 10978, 10840, 0, 10668, 0, - 43087, 12595, 120304, 0, 118806, 0, 1157, 64903, 8638, 0, 0, 0, 0, - 120319, 8235, 120316, 4405, 10086, 120247, 0, 69216, 0, 65430, 74013, - 6079, 6817, 10764, 0, 64291, 0, 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, 0, - 66373, 0, 0, 64908, 0, 6311, 0, 12004, 119192, 12049, 43108, 0, 0, 41705, - 0, 6598, 0, 6599, 0, 0, 42148, 118825, 66027, 0, 6597, 9412, 8340, 11824, - 64745, 0, 0, 0, 1988, 5407, 67865, 2430, 41678, 0, 120243, 2336, 0, 0, - 78871, 120442, 0, 1921, 10947, 19927, 0, 65406, 0, 19913, 4284, 13217, 0, - 0, 12841, 9229, 10956, 42285, 41674, 19964, 41679, 65084, 3521, 0, 5774, - 8325, 0, 65403, 0, 1854, 10794, 0, 67660, 0, 0, 78359, 5280, 0, 4344, - 12905, 65433, 6076, 64793, 41610, 768, 12074, 442, 0, 68162, 64081, - 12934, 41682, 65432, 41693, 0, 6071, 65434, 0, 4804, 4053, 0, 0, 194653, - 41696, 467, 69823, 0, 69797, 0, 0, 8421, 0, 0, 43705, 502, 0, 65431, - 119056, 0, 12043, 1303, 316, 0, 2029, 65191, 119246, 11533, 64365, 43480, - 0, 4860, 194645, 0, 42488, 0, 9583, 0, 5546, 8019, 73856, 0, 0, 0, 5544, - 2355, 12150, 65725, 5543, 77989, 63751, 12137, 5548, 77985, 0, 65727, - 68388, 65726, 6077, 0, 65452, 0, 11301, 78013, 78008, 78010, 9874, 78007, - 0, 0, 3050, 65410, 0, 0, 78016, 78017, 42830, 43996, 66716, 0, 4691, 0, - 9345, 621, 0, 0, 0, 65411, 0, 41182, 73881, 65408, 73899, 78024, 9474, - 10545, 119118, 10887, 3786, 65409, 8894, 43179, 119611, 7923, 3716, + 74327, 7806, 0, 8914, 0, 0, 3183, 1435, 64876, 2969, 6046, 0, 6208, 0, + 5746, 73749, 0, 64416, 42422, 0, 0, 7082, 73775, 338, 5059, 194719, 0, + 42328, 10767, 0, 8115, 0, 0, 0, 8227, 0, 1218, 0, 0, 65848, 0, 0, 0, 0, + 126987, 4486, 0, 0, 0, 10925, 0, 0, 0, 0, 42309, 10257, 0, 10273, 0, + 10305, 42461, 0, 42349, 8832, 0, 64127, 10644, 0, 0, 42278, 74451, + 126988, 917857, 7794, 0, 42429, 11081, 42316, 119026, 3669, 3968, 42468, + 0, 0, 0, 65402, 119581, 0, 0, 64933, 0, 41960, 0, 0, 0, 0, 66678, 42391, + 1588, 65400, 8409, 0, 19967, 65398, 787, 0, 0, 0, 6115, 118940, 41654, + 42480, 0, 0, 41655, 65401, 0, 0, 0, 0, 644, 65500, 41657, 10778, 3659, + 9533, 184, 1553, 13107, 65484, 0, 10502, 74457, 0, 0, 41554, 0, 8220, 0, + 41557, 0, 0, 11070, 0, 5157, 4020, 73858, 41555, 9514, 64818, 65103, + 64641, 0, 119633, 7520, 0, 74377, 11029, 66651, 0, 0, 118930, 64527, 0, + 7877, 73803, 0, 0, 120096, 74602, 0, 0, 0, 42817, 0, 65212, 11715, 12190, + 12319, 0, 0, 0, 9502, 65427, 0, 65424, 0, 0, 9734, 65425, 0, 0, 0, 0, 0, + 10112, 10827, 0, 9866, 74527, 66675, 0, 8625, 64346, 11290, 10477, 0, + 8636, 0, 8315, 65444, 0, 0, 74595, 6152, 0, 0, 6629, 0, 120171, 0, 74589, + 0, 0, 0, 0, 0, 0, 11046, 11490, 43127, 4485, 0, 0, 64926, 0, 0, 0, 5869, + 12437, 0, 0, 7040, 3588, 0, 12825, 0, 0, 12725, 0, 0, 120167, 223, 0, 0, + 120166, 42444, 0, 64499, 65245, 0, 1171, 0, 120165, 0, 1805, 8772, 0, 0, + 65078, 65247, 0, 120111, 2338, 0, 118853, 0, 0, 0, 64800, 65236, 67644, + 68126, 1213, 0, 64075, 797, 64074, 8734, 4212, 0, 64387, 4115, 0, 5005, + 64070, 64073, 10679, 0, 0, 0, 64276, 426, 0, 0, 8251, 10136, 65436, 0, + 65088, 43302, 1224, 0, 65576, 0, 10701, 1764, 3101, 0, 65291, 120159, 0, + 11373, 74566, 0, 120103, 8663, 9312, 41644, 4539, 3787, 0, 9222, 0, 0, + 4259, 9092, 74567, 41961, 0, 12724, 66357, 42331, 64935, 0, 0, 1293, + 7947, 12003, 0, 74593, 120308, 2454, 74807, 3613, 0, 0, 0, 65888, 120307, + 10978, 10840, 0, 10668, 0, 43087, 12595, 120304, 0, 118806, 0, 1157, + 64903, 8638, 0, 0, 0, 0, 120319, 8235, 0, 4405, 10086, 0, 0, 0, 0, 65430, + 74013, 6079, 0, 10764, 0, 64291, 0, 998, 120312, 11062, 120313, 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, 0, 66373, 0, 0, 64908, 0, 6311, 0, 12004, 119192, 12049, + 43108, 0, 0, 41705, 0, 6598, 0, 6599, 0, 0, 42148, 118825, 66027, 0, + 6597, 9412, 8340, 11824, 64745, 0, 0, 0, 1988, 5407, 67865, 2430, 41678, + 0, 0, 2336, 0, 0, 0, 120442, 0, 1921, 10947, 19927, 0, 65406, 0, 19913, + 4284, 13217, 0, 0, 12841, 9229, 10956, 42285, 41674, 19964, 41679, 65084, + 3521, 0, 5774, 8325, 0, 65403, 0, 1854, 10794, 0, 0, 0, 0, 0, 5280, 0, + 4344, 12905, 65433, 6076, 64793, 41610, 768, 12074, 442, 0, 68162, 64081, + 12934, 41682, 65432, 41693, 0, 6071, 65434, 0, 4804, 6994, 0, 0, 0, + 41696, 467, 0, 0, 0, 0, 0, 8421, 0, 0, 64801, 502, 0, 65431, 0, 0, 12043, + 1303, 316, 0, 2029, 65191, 119246, 11533, 64365, 0, 0, 4860, 194645, 0, + 42488, 0, 9583, 0, 5546, 8019, 73856, 0, 0, 0, 5544, 2355, 12150, 65725, + 5543, 119245, 63751, 12137, 5548, 0, 0, 0, 0, 65726, 6077, 0, 65452, 0, + 11301, 0, 0, 0, 9874, 0, 0, 0, 3050, 65410, 0, 0, 0, 0, 42830, 0, 66716, + 0, 4691, 0, 9345, 621, 0, 0, 0, 65411, 0, 41182, 73881, 65408, 73899, 0, + 9474, 10545, 119118, 10887, 3786, 65409, 8894, 43179, 119611, 7923, 3716, 119341, 9996, 8508, 0, 7012, 8195, 0, 9566, 0, 3722, 0, 41707, 8493, 545, - 9575, 41379, 10050, 12718, 0, 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, 0, 4569, - 74130, 0, 43487, 194630, 611, 74129, 64871, 120379, 65629, 0, 0, 0, 0, 0, - 120543, 0, 0, 6291, 0, 78639, 41669, 7094, 917921, 0, 0, 74054, 0, - 195029, 0, 839, 0, 7695, 8769, 65246, 4829, 0, 4859, 64467, 0, 0, 118998, - 7206, 0, 6647, 43986, 0, 69766, 0, 64764, 4210, 0, 0, 804, 0, 0, 12298, - 0, 66653, 0, 64924, 10091, 73931, 9468, 74245, 0, 0, 74246, 0, 12839, - 64669, 0, 0, 1279, 1425, 6224, 119229, 11049, 0, 917549, 43239, 8482, 0, - 0, 5032, 77830, 11940, 67888, 664, 0, 5034, 0, 0, 127525, 42702, 73888, - 0, 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, 194668, 524, 0, - 74029, 788, 74027, 0, 0, 0, 1663, 10419, 74025, 42636, 0, 0, 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, 0, 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, + 9575, 41379, 10050, 12718, 0, 8859, 41459, 0, 0, 120740, 0, 0, 9119, + 2787, 7920, 118823, 4021, 2012, 7985, 0, 119663, 0, 0, 0, 0, 410, 120449, + 1802, 120789, 74107, 0, 41659, 41671, 1827, 0, 64396, 10126, 12116, + 41673, 120370, 11422, 120372, 120373, 3860, 120367, 120368, 41345, + 120362, 120363, 11748, 42158, 7941, 11076, 8749, 120361, 12698, 64858, + 361, 120357, 845, 0, 41560, 11970, 4562, 917920, 2926, 0, 4569, 74130, 0, + 119221, 194630, 611, 74129, 64871, 0, 65629, 0, 0, 0, 0, 0, 120543, 0, 0, + 6291, 0, 0, 41669, 7094, 917921, 0, 0, 74054, 0, 0, 0, 839, 0, 7695, + 8769, 65246, 4829, 0, 4859, 64467, 0, 0, 118998, 7206, 0, 6647, 0, 0, 0, + 0, 64764, 4210, 0, 0, 804, 0, 0, 12298, 0, 0, 0, 64924, 10091, 73931, + 9468, 74245, 0, 0, 74246, 0, 12839, 64669, 0, 0, 1279, 1425, 6224, + 119229, 11049, 0, 917549, 0, 8482, 0, 0, 5032, 0, 11940, 67888, 664, 0, + 5034, 0, 0, 0, 0, 73888, 0, 13294, 67873, 64869, 6032, 0, 9115, 7430, + 120377, 0, 120819, 0, 120168, 73913, 120170, 41161, 5518, 4174, 10993, + 41162, 120160, 64528, 1169, 434, 41437, 1905, 6034, 41164, 64744, 9528, + 118867, 0, 524, 0, 74029, 788, 74027, 0, 0, 0, 1663, 10419, 74025, 42636, + 0, 0, 0, 120656, 0, 0, 0, 0, 0, 67897, 74039, 0, 0, 11395, 0, 119107, + 43612, 64344, 0, 0, 10855, 5445, 9355, 0, 65198, 0, 8989, 221, 65686, 0, + 0, 8010, 7191, 4962, 0, 8855, 0, 0, 64469, 0, 10555, 0, 0, 0, 0, 120427, + 10451, 0, 120152, 7245, 12443, 74405, 120148, 120149, 120150, 3873, 8367, + 0, 120146, 120147, 0, 66507, 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, 0, 74052, 0, 0, 120549, 119082, 64295, 120418, 0, 64765, 73923, 120417, 120662, 120730, 0, 6216, 0, 10755, 9455, 0, 8124, - 127042, 9470, 6944, 0, 0, 0, 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, 0, 0, 0, 41199, - 10121, 2028, 0, 0, 0, 0, 3062, 0, 74447, 12608, 0, 66440, 7545, 9700, - 12580, 0, 120777, 120502, 41155, 0, 74071, 0, 0, 12713, 0, 0, 0, 78772, - 0, 1734, 0, 0, 0, 64594, 2456, 231, 0, 74167, 542, 0, 118786, 0, 0, 1230, - 0, 0, 3597, 4446, 10584, 74235, 0, 4037, 0, 8352, 0, 5687, 0, 64515, 0, - 0, 55265, 67846, 78434, 9704, 0, 0, 74284, 0, 0, 8660, 0, 0, 0, 78773, - 74482, 4483, 1709, 120617, 9909, 6080, 0, 0, 1746, 1315, 8667, 0, 0, - 13140, 65899, 10604, 0, 4480, 11266, 0, 1226, 6930, 0, 0, 6360, 10897, - 41230, 605, 0, 74785, 120356, 0, 0, 41500, 0, 311, 11453, 6221, 10608, - 64943, 74280, 10877, 118868, 64885, 74272, 0, 0, 0, 120736, 74312, 345, - 0, 74456, 64606, 9917, 0, 0, 5037, 0, 1776, 8422, 0, 118814, 41508, - 41201, 323, 43328, 0, 42698, 1295, 0, 4625, 0, 4630, 13117, 0, 0, 65123, - 11293, 2668, 11288, 0, 42640, 65666, 2519, 0, 65420, 0, 0, 4252, 5049, - 42659, 119011, 706, 7754, 10854, 8738, 0, 65419, 0, 0, 649, 65421, 0, + 0, 9470, 6944, 0, 0, 0, 2828, 0, 531, 42638, 0, 0, 0, 73764, 8204, 3614, + 2827, 9696, 0, 0, 8728, 4354, 10904, 120502, 19936, 7833, 120691, 0, + 42599, 42597, 0, 120409, 0, 0, 8537, 0, 0, 0, 0, 0, 41199, 10121, 2028, + 0, 0, 0, 0, 3062, 0, 74447, 12608, 0, 66440, 7545, 9700, 12580, 0, + 120777, 0, 41155, 0, 74071, 0, 0, 12713, 0, 0, 0, 0, 0, 1734, 0, 0, 0, 0, + 2456, 231, 0, 74167, 542, 0, 118786, 0, 0, 1230, 0, 0, 3597, 9761, 10584, + 74235, 0, 4037, 0, 8352, 0, 5687, 0, 64515, 0, 0, 0, 67846, 0, 9704, 0, + 0, 74284, 0, 0, 8660, 0, 0, 0, 0, 74482, 4483, 1709, 0, 9909, 6080, 0, 0, + 1746, 1315, 8667, 0, 0, 13140, 65899, 10604, 0, 4480, 11266, 0, 1226, + 6930, 0, 0, 0, 10897, 41230, 605, 0, 74785, 120356, 0, 0, 41500, 0, 311, + 11453, 6221, 10608, 64943, 74280, 10877, 0, 64885, 74272, 0, 0, 0, 0, + 74312, 345, 0, 74456, 64606, 42589, 0, 0, 5037, 0, 1776, 8422, 0, 118814, + 41508, 41201, 323, 43328, 0, 120698, 1295, 0, 4625, 0, 4630, 13117, 0, 0, + 65123, 11293, 2668, 11288, 0, 42640, 65666, 2519, 0, 65420, 0, 0, 917886, + 5049, 0, 119011, 706, 7754, 10854, 8738, 0, 65419, 0, 0, 649, 65421, 0, 66702, 0, 12670, 1013, 0, 64919, 705, 0, 65422, 0, 1183, 0, 7017, 42852, - 0, 8157, 9736, 64503, 65418, 0, 0, 74035, 0, 11913, 73874, 6696, 0, 8920, - 0, 0, 7962, 12211, 9837, 2051, 66227, 0, 4184, 0, 0, 10177, 73777, 1857, - 0, 4626, 8464, 8472, 0, 4629, 8499, 78321, 78322, 4624, 7818, 119173, 0, - 0, 7805, 0, 0, 6935, 0, 78325, 78326, 78323, 43327, 43989, 119046, 8492, - 8250, 8459, 0, 8497, 8496, 0, 0, 78336, 78339, 9543, 78335, 78332, 77832, - 65849, 77831, 0, 0, 12451, 0, 8684, 0, 6102, 0, 5298, 0, 5294, 0, 0, 0, - 195062, 9949, 119826, 43617, 119215, 0, 12073, 0, 0, 77863, 13108, 0, - 74397, 41468, 0, 0, 5292, 55272, 0, 1939, 5302, 3970, 0, 12455, 1793, 0, - 0, 0, 6643, 0, 65263, 0, 78330, 41293, 78328, 78329, 0, 13219, 9569, 0, - 74383, 0, 0, 0, 5500, 8813, 0, 0, 74566, 5322, 0, 78340, 43631, 5324, - 66443, 3784, 41614, 65269, 6230, 78349, 78345, 43324, 3360, 78344, 11523, - 0, 0, 9926, 7197, 0, 68429, 0, 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, 0, 6670, 77882, 0, 0, 43092, 43325, 0, 10168, 0, 9781, 194610, - 9190, 0, 9666, 8269, 65944, 74005, 13019, 11670, 0, 315, 12813, 0, 78432, - 78256, 78351, 78352, 0, 0, 0, 0, 1378, 9509, 0, 0, 74475, 3066, 0, 67847, - 0, 0, 0, 78365, 8787, 0, 194616, 41618, 194615, 78261, 194614, 0, 64652, - 0, 194612, 0, 78366, 42088, 0, 0, 7176, 0, 10137, 6121, 10995, 78259, - 74534, 8119, 64874, 917816, 0, 0, 0, 74525, 0, 0, 12930, 1394, 74514, 0, - 74515, 0, 118804, 2998, 9527, 120659, 65190, 12977, 42090, 119165, 0, - 119100, 41236, 0, 42005, 42003, 41237, 5848, 0, 0, 3670, 0, 194600, 0, 0, - 7890, 0, 11298, 43315, 0, 6229, 1593, 0, 0, 619, 4635, 65080, 0, 0, 4120, - 65337, 65336, 0, 11808, 119214, 74115, 9366, 42790, 42006, 0, 65327, - 65326, 65325, 10757, 1507, 42216, 65321, 65320, 65335, 65334, 65333, - 65332, 65331, 42059, 65329, 42689, 0, 9128, 118885, 42073, 6785, 64590, - 0, 4371, 7196, 65318, 2035, 65316, 4106, 65314, 65313, 42074, 0, 41228, - 0, 65609, 41241, 7903, 41239, 43533, 78459, 7189, 0, 0, 0, 12357, 42802, - 78450, 8487, 9131, 0, 4615, 12695, 0, 0, 12175, 0, 64535, 0, 7809, 0, 0, - 562, 12169, 6590, 69762, 66455, 64738, 3219, 68654, 0, 0, 1037, 0, 2025, - 0, 13098, 78442, 10637, 4568, 549, 1570, 0, 2835, 0, 10624, 43623, 11072, - 0, 0, 0, 12606, 78433, 2825, 0, 10825, 8079, 2821, 41046, 0, 0, 0, - 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, 0, 42628, 78575, 0, 0, 0, 3240, 0, 12194, 0, 11591, 41065, 5323, - 8166, 0, 0, 0, 74535, 1623, 65297, 0, 571, 0, 4918, 0, 5288, 127295, - 8916, 65048, 1909, 8864, 0, 0, 10736, 0, 11571, 7615, 0, 0, 4237, 0, - 1035, 65815, 0, 7881, 701, 65936, 3489, 0, 0, 120751, 11403, 0, 0, 0, - 3796, 6800, 0, 3994, 11421, 0, 0, 0, 0, 0, 0, 64857, 0, 2855, 0, 66308, - 41621, 68214, 0, 0, 10654, 0, 119226, 12164, 3246, 7906, 43972, 65847, - 7182, 0, 13024, 194822, 74270, 0, 0, 0, 0, 1496, 747, 0, 942, 2378, - 43136, 0, 8466, 0, 9320, 8001, 1232, 8139, 11617, 0, 0, 11409, 68373, - 6382, 0, 64634, 0, 0, 11612, 0, 67600, 2374, 0, 8475, 11609, 66313, 0, 0, - 5286, 119297, 0, 0, 64925, 0, 0, 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, 65100, 0, 1475, 0, 9938, 6084, 917546, 41064, 41062, - 0, 0, 3256, 0, 42076, 43252, 78823, 0, 8727, 0, 65875, 0, 0, 0, 10562, - 74215, 43065, 0, 0, 3248, 74297, 3261, 9015, 0, 0, 3635, 64337, 0, 0, 0, - 7195, 0, 2007, 64431, 0, 0, 0, 0, 635, 0, 0, 65613, 77909, 0, 73997, 0, - 0, 119218, 7984, 8600, 74434, 0, 4176, 0, 2034, 0, 120805, 65891, 127038, - 0, 318, 2038, 0, 78596, 0, 3649, 13149, 42145, 42798, 3634, 120291, - 118927, 67677, 120124, 7866, 0, 11402, 42146, 120134, 74238, 42664, 2849, - 127034, 0, 7938, 12960, 1761, 11812, 65379, 68386, 0, 1159, 0, 0, 0, 0, - 7178, 194632, 0, 41680, 0, 0, 11534, 1514, 11668, 67891, 9313, 7015, 0, - 67877, 0, 12989, 66474, 9368, 12848, 1624, 43270, 0, 194563, 10818, - 194562, 9953, 0, 78421, 1194, 3242, 9761, 9555, 8598, 120299, 6169, - 12871, 1551, 2798, 65176, 120298, 42752, 119025, 0, 67875, 120301, 3495, - 66648, 0, 0, 68364, 0, 4891, 0, 10641, 0, 73746, 0, 68352, 0, 73787, 0, - 194633, 7199, 64955, 0, 0, 0, 0, 0, 42685, 42679, 193, 0, 0, 0, 42667, 0, + 0, 8157, 9736, 64503, 65418, 0, 0, 74035, 0, 11913, 73874, 42848, 0, + 8920, 0, 0, 7962, 12211, 9837, 0, 66227, 0, 4184, 0, 0, 10177, 73777, + 1857, 0, 4626, 8464, 8472, 0, 4629, 8499, 0, 0, 4624, 7818, 194622, 0, 0, + 7805, 0, 0, 6935, 0, 0, 0, 0, 43327, 0, 119046, 8492, 8250, 8459, 0, + 8497, 8496, 0, 0, 0, 0, 9543, 0, 0, 0, 65849, 0, 0, 0, 0, 0, 8684, 0, + 6102, 0, 5298, 0, 5294, 0, 0, 0, 0, 0, 119826, 0, 119215, 0, 12073, 0, 0, + 0, 13108, 0, 74397, 41468, 0, 0, 5292, 0, 0, 1939, 5302, 3970, 0, 12455, + 1793, 0, 0, 0, 6643, 0, 65263, 0, 0, 41293, 0, 119125, 0, 13219, 9569, 0, + 74383, 0, 0, 0, 5500, 8813, 0, 0, 0, 5322, 0, 0, 0, 5324, 66443, 3784, + 41614, 65269, 6230, 0, 0, 43324, 3360, 0, 11523, 0, 0, 41732, 7197, 0, 0, + 0, 41821, 1249, 0, 0, 0, 118992, 0, 64899, 64763, 41149, 41807, 43162, + 41815, 41150, 0, 10571, 10096, 0, 0, 0, 6947, 41152, 887, 9249, 6565, 0, + 41990, 0, 41811, 74466, 0, 6670, 0, 0, 0, 43092, 43325, 0, 10168, 0, + 9781, 0, 9190, 0, 9666, 8269, 65944, 74005, 13019, 11670, 0, 315, 12813, + 0, 119648, 0, 0, 0, 0, 0, 0, 0, 1378, 9509, 0, 0, 74475, 3066, 0, 67847, + 0, 0, 0, 0, 8787, 0, 194616, 41618, 194615, 0, 194614, 0, 64652, 0, + 194612, 0, 0, 42088, 0, 0, 7176, 0, 10137, 6121, 10995, 0, 74534, 8119, + 64874, 0, 0, 0, 0, 74525, 0, 0, 12930, 1394, 74514, 0, 74515, 0, 118804, + 2998, 9527, 120659, 65190, 12977, 42090, 119165, 0, 119100, 41236, 0, + 65168, 42003, 41237, 5848, 0, 0, 3670, 0, 0, 0, 0, 7890, 0, 11298, 43315, + 0, 6229, 1593, 0, 0, 619, 4635, 65080, 0, 0, 4120, 65337, 65336, 0, + 11808, 119214, 74115, 9366, 42790, 42006, 0, 65327, 65326, 65325, 10757, + 1507, 65322, 65321, 65320, 65335, 65334, 65333, 65332, 65331, 42059, + 65329, 65328, 0, 9128, 118885, 42073, 41631, 64590, 0, 4371, 7196, 65318, + 2035, 65316, 4106, 65314, 65313, 42074, 0, 41228, 0, 119117, 41241, 7903, + 41239, 43533, 127099, 7189, 0, 0, 0, 12357, 42802, 0, 8487, 9131, 0, + 4615, 12695, 0, 0, 12175, 0, 64535, 0, 7809, 0, 0, 562, 12169, 6590, 0, + 66455, 64738, 3219, 0, 0, 0, 1037, 0, 2025, 0, 13098, 0, 10637, 4568, + 549, 1570, 0, 2835, 0, 10624, 194587, 11072, 0, 0, 0, 12606, 0, 2825, 0, + 10825, 8079, 2821, 41046, 0, 0, 0, 120593, 13071, 0, 452, 41049, 42840, + 43614, 2831, 0, 74596, 11465, 5212, 0, 64703, 119191, 42308, 7181, 0, + 41332, 0, 12333, 0, 1668, 0, 0, 0, 1187, 0, 42628, 0, 0, 0, 0, 3240, 0, + 12194, 0, 11591, 41065, 5323, 8166, 0, 0, 0, 74535, 1623, 65297, 0, 571, + 0, 4918, 0, 5288, 0, 8916, 65048, 1909, 8864, 0, 0, 10736, 0, 11571, + 7615, 0, 0, 4237, 0, 1035, 65815, 0, 7881, 701, 65936, 3489, 0, 0, 0, + 11403, 0, 0, 0, 3796, 0, 0, 3994, 11421, 0, 0, 0, 0, 0, 0, 64857, 0, + 2855, 0, 66308, 41621, 0, 0, 0, 10654, 0, 119226, 12164, 3246, 7906, 0, + 65847, 7182, 0, 13024, 194822, 119931, 0, 0, 0, 0, 1496, 747, 0, 942, + 2378, 43136, 0, 8466, 0, 9320, 8001, 1232, 8139, 11617, 0, 0, 11409, 0, + 0, 0, 66319, 0, 0, 11612, 0, 0, 2374, 0, 8475, 11609, 66313, 0, 0, 5286, + 119297, 0, 0, 64925, 0, 0, 0, 194583, 7705, 11942, 11305, 194581, 3309, + 0, 0, 0, 0, 11975, 0, 41653, 1280, 1241, 7168, 12096, 0, 0, 42565, 41651, + 0, 0, 0, 41650, 0, 66470, 0, 12914, 41491, 66010, 119552, 6078, 65100, 0, + 1475, 0, 0, 6084, 917546, 41064, 41062, 0, 0, 3256, 0, 42076, 0, 0, 0, + 8727, 0, 65875, 0, 0, 0, 10562, 74215, 67608, 0, 0, 3248, 74297, 3261, + 9015, 0, 0, 3635, 64337, 0, 0, 0, 7195, 0, 2007, 64431, 0, 0, 0, 0, 635, + 0, 0, 65613, 0, 0, 73997, 0, 0, 119218, 7984, 8600, 74434, 0, 4176, 0, + 2034, 0, 120805, 65891, 127038, 0, 318, 2038, 0, 0, 0, 3649, 13149, + 42145, 42798, 3634, 120291, 118927, 0, 120124, 7866, 0, 11402, 42146, + 120134, 74238, 120129, 2849, 127034, 0, 7938, 12960, 1761, 11812, 65379, + 74509, 0, 1159, 0, 0, 0, 0, 7178, 194632, 0, 41680, 0, 0, 11534, 1514, + 11668, 67891, 9313, 7015, 0, 67877, 0, 12989, 194560, 9368, 12848, 1624, + 43270, 0, 194563, 10818, 194562, 12649, 0, 0, 1194, 3242, 0, 9555, 8598, + 120299, 6169, 0, 1551, 2798, 65176, 120298, 42752, 119025, 0, 67875, + 120301, 3495, 66648, 0, 0, 0, 0, 4891, 0, 10641, 0, 73746, 0, 0, 0, + 73787, 0, 0, 7199, 64955, 0, 0, 0, 0, 0, 64952, 0, 193, 0, 0, 0, 0, 0, 5271, 0, 119661, 118882, 1362, 13297, 0, 0, 0, 0, 73789, 0, 6658, 4426, - 0, 0, 0, 119123, 7276, 42163, 5220, 0, 0, 0, 2416, 3310, 42703, 0, 379, - 0, 0, 0, 0, 3223, 65492, 1284, 194771, 4549, 0, 0, 0, 0, 10807, 9558, - 194613, 0, 8515, 8688, 12866, 0, 3294, 0, 8529, 0, 43385, 7564, 0, 43329, - 0, 0, 73757, 66456, 42359, 0, 2031, 0, 7202, 0, 12676, 42729, 0, 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, 0, 8502, 5762, 1967, 7483, 0, 0, 8104, 0, 7474, 0, 0, 0, 10414, 13001, - 8141, 0, 42537, 1557, 43594, 0, 6330, 6805, 8631, 2545, 120672, 0, 0, - 74190, 0, 0, 0, 42762, 0, 127017, 1650, 262, 1637, 0, 7901, 3238, 0, - 41861, 0, 0, 65158, 10860, 0, 43658, 7527, 0, 43319, 6419, 0, 45, 0, 0, - 0, 0, 119810, 7194, 5291, 0, 43666, 13129, 0, 9084, 0, 8737, 0, 12881, 0, - 12906, 9639, 7912, 2620, 0, 0, 0, 0, 179, 65896, 0, 64756, 2853, 0, - 118813, 0, 118996, 119009, 2850, 8084, 0, 73850, 2801, 119837, 42069, - 119839, 74754, 119841, 42072, 119843, 119842, 10398, 0, 0, 0, 0, 8245, - 68401, 3158, 119853, 4389, 43656, 923, 119857, 119856, 292, 13002, - 119845, 119844, 3221, 1763, 119849, 4612, 119851, 119850, 7253, 127110, - 68391, 0, 10782, 3637, 12996, 43542, 0, 64578, 0, 3228, 73869, 8783, 0, - 119614, 2731, 0, 0, 78585, 4102, 7696, 73878, 0, 0, 78586, 43316, 4177, - 11283, 9089, 0, 73996, 0, 64500, 43674, 0, 0, 1856, 0, 0, 6379, 0, 0, 0, - 3208, 12975, 0, 0, 0, 0, 74072, 55269, 0, 0, 0, 2033, 78577, 78576, - 195026, 55254, 7740, 0, 0, 0, 73964, 0, 0, 67612, 65674, 0, 0, 41689, 0, - 74006, 64909, 6646, 11790, 74019, 0, 0, 0, 8561, 4573, 0, 5326, 0, - 120605, 7230, 8257, 0, 8778, 41688, 0, 65776, 2071, 8314, 6459, 0, 7628, - 65092, 73903, 66721, 11342, 0, 0, 0, 0, 127001, 0, 11810, 13164, 10723, - 967, 0, 0, 11946, 0, 3257, 0, 12307, 1845, 0, 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, 0, 868, 873, 7642, 0, - 869, 874, 7644, 0, 875, 790, 0, 0, 0, 0, 66182, 0, 5429, 0, 66180, 0, - 66181, 68452, 0, 0, 42067, 0, 5433, 10657, 7911, 194622, 1547, 66176, - 42012, 120576, 5425, 4977, 9999, 5317, 5423, 4611, 0, 67637, 0, 9679, - 74122, 0, 0, 0, 0, 4418, 66184, 4628, 4245, 119648, 0, 0, 1851, 0, 0, - 11908, 0, 9360, 118897, 0, 42776, 66187, 12837, 8829, 7711, 0, 0, 119973, - 43318, 0, 8809, 119974, 0, 0, 120604, 0, 0, 0, 0, 0, 0, 7427, 0, 4588, - 43680, 0, 74484, 0, 2433, 0, 119622, 3352, 74363, 0, 0, 793, 74404, 0, - 305, 567, 67662, 842, 0, 8208, 0, 41695, 1647, 118877, 0, 7837, 917625, - 818, 5337, 917622, 917621, 41376, 119978, 917618, 120594, 74086, 917615, - 917614, 917613, 10973, 66359, 1372, 917609, 917608, 4969, 1254, 917605, - 917604, 917603, 917602, 65228, 78221, 0, 0, 2840, 0, 119982, 0, 0, 3245, - 9068, 68194, 64725, 0, 0, 12991, 0, 2651, 0, 0, 917611, 127026, 0, 0, 0, - 43648, 120812, 0, 43322, 0, 0, 0, 64372, 0, 3226, 655, 752, 7457, 7456, + 0, 0, 0, 119123, 7276, 42163, 5220, 0, 0, 0, 2416, 3310, 66030, 0, 379, + 0, 0, 0, 0, 3223, 65492, 1284, 0, 4549, 0, 0, 0, 0, 10807, 9558, 0, 0, + 8515, 8688, 12866, 0, 3294, 0, 0, 0, 0, 7564, 0, 43329, 0, 0, 73757, + 66456, 42359, 0, 2031, 0, 7202, 0, 12676, 66615, 0, 3215, 0, 7710, 1610, + 73801, 0, 0, 65682, 0, 0, 65924, 0, 228, 0, 1501, 0, 64395, 5179, 7200, + 6225, 0, 65794, 1725, 65533, 8196, 7476, 74399, 0, 0, 0, 8502, 5762, + 1967, 7483, 0, 0, 8104, 0, 7474, 0, 0, 0, 10414, 13001, 8141, 0, 42537, + 1557, 0, 0, 0, 0, 8631, 2545, 120672, 0, 0, 74190, 0, 0, 0, 42762, 0, 0, + 1650, 262, 1637, 0, 7901, 3238, 0, 41861, 0, 0, 65158, 10860, 0, 119134, + 7527, 0, 43319, 6419, 0, 45, 0, 0, 0, 0, 119810, 7194, 5291, 0, 0, 13129, + 0, 9084, 0, 8737, 0, 12881, 0, 12906, 9639, 7912, 2620, 0, 0, 0, 0, 179, + 65896, 0, 64756, 2853, 0, 118813, 0, 118996, 0, 2850, 8084, 0, 73850, + 2801, 119837, 42069, 119839, 74754, 119841, 42072, 119843, 119842, 74767, + 0, 0, 0, 0, 8245, 119313, 3158, 119853, 4389, 73813, 923, 119857, 119856, + 292, 13002, 119845, 119844, 3221, 1763, 119849, 4612, 119851, 119850, + 7253, 127110, 120618, 0, 10782, 3637, 12996, 43542, 0, 64578, 0, 3228, + 73869, 8783, 0, 119614, 2731, 0, 0, 118939, 4102, 7696, 73878, 0, 0, 0, + 43316, 4177, 11283, 9089, 0, 73996, 0, 64500, 68133, 0, 0, 1856, 0, 0, 0, + 0, 0, 0, 3208, 12975, 0, 0, 0, 0, 74072, 0, 0, 0, 0, 2033, 119008, 0, + 195026, 0, 7740, 0, 0, 0, 73964, 0, 0, 0, 65674, 0, 0, 41689, 0, 74006, + 64909, 6646, 11790, 74019, 0, 0, 0, 8561, 4573, 0, 5326, 0, 120605, 7230, + 8257, 0, 8778, 41688, 0, 65776, 0, 8314, 6459, 0, 7628, 65092, 73903, + 66721, 11342, 0, 0, 0, 0, 127001, 0, 11810, 13164, 10723, 967, 0, 0, + 11946, 0, 3257, 0, 12307, 1845, 0, 43526, 0, 0, 1886, 42342, 10089, 870, + 7648, 3499, 8609, 7652, 876, 871, 877, 0, 878, 42015, 879, 0, 4563, 0, 0, + 7591, 65887, 867, 9520, 872, 0, 868, 873, 7642, 0, 869, 874, 7644, 0, + 875, 790, 0, 0, 0, 0, 66182, 0, 5429, 0, 66180, 0, 66181, 0, 0, 0, 42067, + 0, 5433, 10657, 7911, 0, 1547, 66176, 42012, 0, 5425, 4977, 9999, 5317, + 5423, 4611, 0, 67637, 0, 9679, 74122, 0, 0, 0, 0, 4418, 66184, 4628, + 4245, 0, 0, 0, 1851, 0, 0, 11908, 0, 9360, 118897, 0, 42776, 66187, + 12837, 8829, 0, 0, 0, 0, 43318, 0, 8809, 119974, 0, 0, 120604, 0, 0, 0, + 0, 0, 0, 7427, 0, 4588, 0, 0, 74484, 0, 2433, 0, 119622, 3352, 74363, 0, + 0, 793, 74404, 0, 305, 567, 0, 842, 0, 8208, 0, 41695, 1647, 118877, 0, + 7837, 917625, 818, 5337, 917622, 917621, 41376, 119978, 917618, 120594, + 74086, 917615, 917614, 917613, 10973, 66359, 1372, 917609, 917608, 4969, + 1254, 917605, 917604, 917603, 917602, 65228, 0, 0, 0, 2840, 0, 119982, 0, + 0, 3245, 9068, 119069, 64725, 0, 0, 12991, 0, 2651, 0, 0, 917611, 0, 0, + 0, 0, 0, 0, 0, 43322, 0, 0, 0, 64372, 0, 3226, 655, 752, 7457, 7456, 7452, 3285, 0, 0, 119988, 65610, 0, 0, 0, 671, 250, 7434, 618, 668, 610, 42800, 7431, 1152, 42801, 640, 120666, 7448, 7439, 628, 3905, 73810, 0, - 0, 64749, 67850, 2107, 0, 0, 4605, 194873, 0, 43372, 65945, 0, 0, 119590, - 0, 0, 0, 987, 6927, 11572, 42261, 11464, 3365, 9971, 0, 0, 0, 0, 0, 0, 0, - 11334, 43326, 12609, 11519, 11503, 5530, 5210, 0, 4627, 0, 5208, 0, 0, - 10332, 5218, 7976, 9156, 0, 3244, 5529, 0, 73894, 0, 5432, 64965, 5527, - 74033, 10516, 7790, 5528, 0, 42140, 120281, 0, 0, 43545, 9887, 0, 4000, - 7429, 7428, 665, 7424, 3206, 120278, 7884, 0, 0, 0, 0, 211, 2509, 0, - 120573, 68672, 3220, 42235, 0, 10690, 8951, 5214, 42474, 8118, 0, 7048, - 4590, 127258, 5852, 0, 0, 127259, 1708, 0, 0, 2623, 11943, 0, 69226, 0, - 4698, 66509, 1066, 119921, 4701, 0, 120285, 74225, 119114, 8267, 0, 0, 0, - 7516, 0, 2625, 0, 8034, 74309, 0, 3631, 10955, 7850, 120293, 8416, 0, 0, - 0, 43384, 12660, 0, 0, 0, 74850, 41069, 0, 0, 12099, 4310, 10032, 6252, - 713, 7990, 0, 3990, 0, 0, 66368, 5017, 64956, 7071, 0, 119144, 1030, - 118800, 0, 9513, 41059, 9357, 0, 1773, 0, 120350, 0, 6339, 7745, 9844, 0, - 64650, 94, 1880, 74766, 0, 8908, 0, 0, 65913, 78470, 10752, 13003, 0, 0, - 41307, 8732, 120338, 0, 1757, 6964, 4696, 0, 0, 64785, 7394, 3641, 5419, - 0, 0, 0, 0, 120344, 43988, 0, 8610, 43062, 7592, 856, 74299, 936, 13289, - 127521, 43171, 1459, 0, 65243, 78638, 19953, 0, 1504, 0, 0, 12913, 74206, - 7529, 0, 0, 0, 120782, 4113, 0, 2372, 336, 0, 7509, 12152, 0, 682, 66458, - 41505, 0, 64743, 10593, 1703, 0, 0, 8033, 0, 0, 9810, 127269, 0, 12970, - 0, 42351, 10109, 0, 0, 194693, 0, 119247, 0, 0, 74291, 1965, 7069, 43312, - 0, 73887, 0, 2087, 64370, 6314, 41714, 8501, 0, 0, 74239, 41317, 0, 2091, - 0, 2090, 0, 9353, 77887, 2077, 77886, 0, 10498, 2083, 77888, 0, 0, - 119236, 634, 0, 0, 0, 69779, 4165, 8746, 0, 9654, 12856, 6924, 0, 7066, - 0, 0, 0, 41037, 42692, 7786, 12959, 41039, 0, 0, 680, 6274, 0, 1181, - 7056, 3174, 0, 0, 0, 65665, 0, 0, 6920, 0, 0, 0, 118965, 0, 64644, - 126981, 0, 0, 41028, 0, 6231, 2613, 65302, 40989, 0, 194696, 0, 42760, 0, - 0, 0, 40987, 4667, 0, 0, 8828, 0, 0, 1246, 4746, 0, 0, 11021, 4749, 0, 0, - 921, 4744, 0, 12702, 242, 0, 1566, 8217, 0, 64653, 78386, 0, 74036, - 74505, 43274, 5313, 951, 0, 0, 0, 7604, 0, 4009, 0, 0, 120562, 0, 0, - 64860, 119138, 119887, 0, 194702, 4048, 0, 0, 120596, 1646, 77890, 64534, - 73995, 0, 0, 119890, 2579, 119905, 3177, 11357, 9099, 4107, 3441, 119894, - 2975, 74442, 9822, 0, 55220, 10084, 73943, 118840, 0, 917562, 0, 3399, - 9851, 0, 11909, 9059, 0, 7687, 0, 6789, 0, 0, 0, 0, 0, 0, 1777, 9151, - 1137, 69767, 749, 42366, 0, 5385, 0, 0, 0, 0, 5989, 0, 0, 0, 0, 41685, - 69223, 0, 9769, 41684, 0, 519, 0, 11740, 5766, 0, 0, 2600, 8848, 120138, - 41297, 0, 3666, 74473, 41300, 74468, 65160, 0, 74542, 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, 0, 11730, 0, 9593, 5757, - 2403, 64808, 55275, 0, 11728, 65894, 0, 0, 7764, 0, 11094, 120825, 0, 0, - 4282, 8298, 0, 0, 0, 0, 0, 0, 0, 127509, 63854, 8456, 0, 74783, 65670, 0, - 78250, 0, 7774, 10607, 9792, 0, 0, 0, 0, 120764, 0, 10019, 74762, 0, - 3458, 4365, 0, 0, 3647, 0, 2602, 0, 0, 194707, 41135, 0, 0, 0, 64631, - 172, 4971, 41219, 41137, 1889, 7238, 6545, 0, 0, 7597, 10528, 0, 0, 3732, - 73910, 194588, 5344, 0, 43366, 43363, 9062, 119252, 0, 0, 0, 64479, 9232, - 0, 0, 0, 194712, 10900, 41531, 1263, 3720, 12048, 0, 64292, 41524, 7227, - 119635, 6099, 41534, 0, 0, 0, 299, 0, 8525, 0, 3524, 917565, 8831, 0, 0, - 3075, 67867, 0, 0, 66362, 0, 74758, 0, 0, 5845, 0, 0, 0, 2581, 8200, - 65114, 68460, 0, 43283, 5551, 0, 120735, 0, 6340, 118855, 0, 78134, 8680, - 7204, 0, 2588, 2914, 7011, 55281, 0, 2471, 0, 2883, 2749, 119563, 73774, - 10913, 0, 0, 8666, 675, 42493, 0, 43571, 0, 6219, 0, 9980, 41232, 10928, - 0, 41153, 41229, 118967, 0, 3738, 0, 0, 12711, 3181, 66212, 74289, 68472, - 42857, 8262, 0, 0, 0, 0, 42347, 12092, 9615, 7234, 74047, 0, 0, 64674, 0, - 0, 73846, 0, 12722, 0, 922, 43983, 74507, 0, 74461, 3218, 120471, 74290, - 120469, 64562, 120475, 8569, 11404, 11932, 73728, 3214, 120461, 120468, - 12128, 3207, 65486, 78729, 1901, 78727, 0, 120460, 7425, 3205, 0, 78737, - 78736, 78735, 43383, 78733, 65459, 2606, 78730, 73897, 0, 11496, 1173, 0, - 41272, 0, 0, 0, 0, 120737, 0, 0, 0, 378, 2610, 0, 65079, 0, 65695, 0, 37, - 7068, 0, 120480, 120479, 3209, 120477, 0, 10638, 9768, 120481, 0, 0, 0, - 0, 0, 0, 65510, 0, 0, 5233, 0, 64792, 0, 0, 0, 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, 0, - 8203, 78488, 0, 8458, 65211, 8495, 119904, 0, 917552, 779, 78314, 64367, - 2465, 0, 8193, 55279, 9730, 9280, 0, 7065, 74155, 4346, 0, 73798, 504, 0, - 120715, 8982, 0, 0, 0, 782, 0, 10883, 0, 194852, 732, 3737, 127253, 1548, - 68650, 0, 1832, 5604, 5735, 41141, 119020, 4376, 0, 11787, 3745, 0, 0, - 42888, 65712, 0, 3869, 11937, 5725, 0, 1783, 68648, 5728, 0, 0, 0, 11918, - 66567, 5724, 0, 5727, 0, 0, 0, 764, 0, 0, 43531, 0, 9033, 0, 42532, 6223, - 11042, 120749, 11423, 0, 0, 0, 43465, 0, 0, 6559, 64557, 0, 0, 120648, - 43019, 43477, 10238, 0, 0, 43377, 120675, 0, 1478, 9783, 11825, 2607, + 0, 64749, 67850, 0, 0, 0, 0, 194873, 0, 0, 65945, 0, 0, 119590, 0, 0, 0, + 987, 6927, 11572, 42261, 11464, 3365, 0, 0, 0, 0, 0, 0, 0, 0, 11334, + 43326, 12609, 11519, 0, 5530, 5210, 0, 4627, 0, 5208, 0, 0, 10332, 5218, + 7976, 9156, 0, 3244, 5529, 0, 73894, 0, 5432, 64965, 5527, 74033, 10516, + 7790, 5528, 0, 42140, 120281, 0, 0, 43545, 120282, 0, 4000, 7429, 7428, + 665, 7424, 3206, 120279, 7884, 0, 0, 0, 0, 211, 2509, 0, 120573, 0, 3220, + 0, 0, 10690, 8951, 5214, 42474, 8118, 0, 7048, 4590, 0, 5852, 0, 0, 0, + 1708, 0, 0, 2623, 0, 0, 0, 0, 4698, 66509, 1066, 0, 4701, 0, 120285, + 74225, 119114, 8267, 0, 0, 0, 7516, 0, 2625, 0, 8034, 74309, 0, 3631, + 10955, 7850, 120293, 8416, 0, 0, 0, 0, 12660, 0, 0, 0, 74850, 41069, 0, + 0, 12099, 4310, 10032, 6252, 713, 7990, 0, 3990, 0, 0, 66368, 5017, + 64956, 7071, 0, 0, 1030, 118800, 0, 9513, 41059, 9357, 0, 1773, 0, + 120350, 0, 0, 7745, 9844, 0, 64650, 94, 1880, 74766, 0, 8908, 0, 0, + 65913, 0, 10752, 13003, 0, 0, 41307, 8732, 120338, 0, 1757, 6964, 4696, + 0, 0, 120806, 10029, 3641, 5419, 0, 0, 0, 0, 120344, 0, 0, 8610, 65230, + 7592, 856, 74299, 936, 13289, 0, 43171, 1459, 0, 65243, 0, 19953, 0, + 1504, 0, 0, 0, 74206, 7529, 0, 0, 0, 120782, 4113, 0, 2372, 336, 0, 7509, + 12152, 0, 682, 66458, 41505, 0, 64743, 10593, 1703, 0, 0, 8033, 0, 0, + 9810, 0, 0, 12970, 0, 42351, 10109, 0, 0, 0, 0, 119247, 0, 0, 74291, + 1965, 7069, 43312, 0, 73887, 0, 0, 64370, 6314, 41714, 8501, 0, 0, 74239, + 41317, 0, 5417, 0, 0, 0, 9353, 0, 41315, 917616, 0, 0, 6569, 0, 0, 0, + 119236, 634, 0, 0, 0, 917610, 4165, 8746, 0, 9654, 12856, 6924, 0, 7066, + 0, 0, 0, 41037, 0, 7786, 917607, 41039, 0, 0, 680, 6274, 0, 1181, 7056, + 3174, 0, 0, 0, 65665, 0, 0, 6920, 0, 0, 0, 0, 0, 64644, 126981, 0, 0, + 41028, 0, 6231, 2613, 65302, 40989, 0, 0, 0, 42760, 0, 0, 0, 40987, 4667, + 0, 0, 8828, 0, 0, 1246, 4746, 0, 0, 11021, 4749, 0, 0, 921, 4744, 0, + 12702, 242, 0, 1566, 8217, 0, 64653, 0, 0, 74036, 74505, 43274, 5313, + 951, 0, 0, 0, 7604, 0, 4009, 0, 0, 120562, 0, 0, 64860, 119138, 119902, + 0, 0, 4048, 0, 0, 120596, 1646, 0, 64534, 73995, 0, 0, 119890, 2579, + 119905, 3177, 11357, 9099, 4107, 3441, 119894, 2975, 74442, 9822, 0, 0, + 10084, 73943, 0, 0, 917562, 0, 3399, 9851, 0, 11909, 9059, 0, 7687, 0, + 8854, 0, 0, 0, 0, 0, 0, 1777, 9151, 1137, 0, 749, 42366, 0, 5385, 0, 0, + 0, 0, 5989, 0, 0, 0, 0, 41685, 0, 0, 9769, 41684, 0, 519, 0, 11740, 5766, + 0, 0, 2600, 8848, 120138, 41297, 0, 3666, 74473, 41300, 74468, 65160, 0, + 74542, 0, 74479, 0, 6558, 0, 0, 0, 120750, 252, 0, 41302, 0, 0, 0, 0, 0, + 11729, 8719, 9060, 0, 120139, 10761, 0, 0, 0, 118792, 11734, 0, 11730, 0, + 9593, 119188, 2403, 64808, 0, 0, 11728, 65894, 0, 0, 7764, 0, 0, 120825, + 0, 0, 4282, 8298, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8456, 0, 74783, 65670, 0, 0, + 0, 7774, 10607, 9792, 0, 0, 0, 0, 120764, 0, 10019, 74762, 0, 3458, 4365, + 0, 0, 3647, 0, 2602, 0, 0, 194707, 41135, 0, 0, 0, 64631, 172, 4971, + 41219, 41137, 1889, 7238, 6545, 0, 0, 7597, 10528, 0, 0, 3732, 73910, 0, + 5344, 0, 0, 0, 9062, 119252, 0, 0, 0, 64479, 9232, 0, 0, 0, 0, 10900, + 41531, 1263, 3720, 12048, 0, 64292, 41524, 7227, 119635, 6099, 41534, 0, + 0, 0, 299, 0, 8525, 0, 3524, 0, 8831, 0, 0, 3075, 0, 0, 0, 66362, 0, + 74758, 0, 0, 5845, 0, 0, 0, 2581, 8200, 65114, 74393, 0, 43283, 5551, 0, + 127085, 0, 0, 118855, 0, 0, 8680, 7204, 0, 2588, 2914, 7011, 0, 0, 2471, + 0, 2883, 2749, 119563, 73774, 10913, 0, 0, 8666, 675, 42493, 0, 0, 0, + 6219, 0, 0, 41232, 10928, 0, 41153, 41229, 118967, 0, 3738, 0, 0, 12711, + 3181, 66212, 74289, 0, 42857, 8262, 0, 0, 0, 0, 42347, 12092, 9615, 7234, + 74047, 0, 0, 64674, 0, 0, 73846, 0, 12722, 0, 922, 74426, 74507, 0, 0, + 3218, 120471, 74290, 120469, 64562, 120475, 8569, 11404, 11932, 73728, + 3214, 120461, 120468, 12128, 3207, 65486, 0, 1901, 0, 0, 120460, 7425, + 3205, 0, 0, 0, 0, 0, 0, 65459, 2606, 0, 73897, 0, 11496, 1173, 0, 41272, + 0, 0, 0, 0, 120737, 0, 0, 0, 378, 2610, 0, 65079, 0, 65695, 0, 37, 7068, + 0, 120480, 120479, 3209, 120477, 0, 10638, 9768, 120481, 0, 0, 0, 0, 0, + 0, 65510, 0, 0, 5233, 0, 64792, 0, 0, 0, 0, 7060, 9847, 0, 1685, 595, 0, + 73971, 1292, 8940, 0, 11088, 0, 10004, 126997, 0, 6541, 0, 0, 0, 3243, + 9014, 5606, 0, 538, 64620, 5602, 8467, 74391, 6547, 0, 8203, 0, 0, 8458, + 65211, 8495, 0, 0, 917552, 779, 0, 64367, 2465, 0, 8193, 0, 9730, 9280, + 0, 7065, 74155, 4346, 0, 73798, 504, 0, 120715, 8982, 0, 0, 0, 782, 0, + 10883, 0, 917876, 732, 3737, 0, 1548, 0, 0, 1832, 5604, 5735, 41141, 0, + 4376, 0, 41142, 3745, 0, 0, 42888, 65712, 0, 3869, 11937, 5725, 0, 1783, + 0, 5728, 0, 0, 0, 11918, 66567, 5724, 0, 5727, 0, 0, 0, 764, 0, 0, 43531, + 0, 9033, 0, 42532, 6223, 11042, 0, 11423, 0, 0, 0, 0, 0, 0, 6559, 64557, + 0, 0, 120648, 43019, 0, 10238, 0, 0, 0, 120675, 0, 1478, 9783, 0, 2607, 64740, 0, 7739, 74543, 0, 0, 0, 6132, 0, 63765, 0, 0, 41144, 0, 0, 43537, - 6761, 10093, 4369, 917791, 0, 0, 8820, 3947, 0, 0, 11515, 526, 0, 41295, - 194603, 917785, 194932, 0, 7688, 917786, 7686, 8288, 11815, 0, 0, 0, - 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, 0, 41216, - 7844, 2616, 119190, 68461, 65234, 0, 13076, 3135, 0, 78143, 119139, 3142, - 194948, 0, 10819, 119580, 10183, 0, 2608, 1470, 73967, 0, 6227, 0, 0, - 74775, 0, 6163, 0, 0, 0, 0, 0, 8603, 0, 119866, 3306, 10876, 43392, - 119573, 0, 5751, 0, 6222, 0, 0, 12086, 7403, 1600, 64309, 64939, 0, - 64783, 0, 11310, 0, 8882, 0, 0, 2570, 7021, 0, 0, 43110, 0, 1234, 6540, - 6974, 0, 0, 0, 5002, 0, 41286, 0, 127019, 0, 43585, 0, 6551, 0, 0, 0, - 41289, 0, 0, 0, 8977, 602, 120814, 0, 0, 0, 0, 0, 41279, 0, 0, 0, 11081, - 43615, 0, 0, 0, 0, 12727, 0, 0, 78397, 9475, 0, 65105, 0, 9633, 10886, - 43592, 7831, 0, 0, 0, 73915, 8076, 43048, 8290, 8291, 43051, 0, 0, 2596, - 43584, 0, 13113, 0, 0, 2393, 7058, 9087, 74067, 68673, 41574, 78337, 0, - 74058, 6376, 0, 0, 0, 0, 9854, 0, 64696, 0, 0, 0, 6994, 0, 1720, 0, 0, 0, - 6529, 7063, 0, 3751, 9120, 0, 0, 1798, 709, 0, 1354, 1876, 13152, 6557, - 12430, 8137, 0, 0, 0, 0, 245, 0, 11456, 41233, 7070, 0, 0, 6136, 0, - 65677, 8682, 41235, 0, 42045, 9804, 0, 432, 3595, 0, 65437, 0, 74455, - 42399, 0, 0, 0, 0, 119658, 0, 0, 0, 77894, 8797, 0, 9052, 64888, 0, 2356, - 95, 74784, 10580, 0, 42286, 0, 64640, 0, 119104, 0, 0, 0, 10063, 12652, - 12199, 127030, 0, 2566, 11971, 0, 0, 1065, 0, 0, 43400, 2576, 0, 0, 0, - 43604, 0, 0, 74082, 514, 74502, 0, 2921, 43215, 64493, 5772, 12968, 0, - 194944, 74580, 43398, 2580, 0, 41341, 41223, 6564, 1463, 41342, 0, 5293, - 0, 0, 3733, 11346, 0, 12054, 0, 74098, 42827, 0, 13091, 0, 0, 0, 917915, - 0, 127025, 0, 74821, 0, 0, 119042, 0, 0, 13090, 66643, 0, 1270, 1132, - 42360, 0, 74096, 66655, 42569, 0, 0, 64761, 0, 41021, 8510, 42432, 0, 0, - 0, 0, 64496, 74109, 0, 9915, 0, 0, 7061, 41336, 3854, 0, 13141, 68413, - 43401, 42319, 13082, 0, 7067, 68221, 0, 0, 0, 0, 0, 0, 9029, 43543, 0, - 2353, 6308, 0, 74792, 2611, 119186, 0, 0, 0, 43664, 0, 66627, 0, 4484, - 8509, 118976, 78116, 65233, 0, 41224, 41017, 0, 3747, 10522, 0, 0, 1691, - 41226, 0, 12107, 44002, 10905, 65010, 0, 697, 66018, 9284, 4244, 0, 0, 0, - 13121, 120036, 0, 12010, 0, 0, 0, 0, 0, 0, 65816, 68111, 0, 0, 65668, 0, - 6618, 118784, 66365, 0, 42234, 12648, 0, 0, 0, 5785, 41309, 9764, 41316, - 65877, 7383, 13230, 41299, 0, 0, 68365, 0, 0, 0, 0, 13122, 0, 191, 74119, - 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, 0, 42680, 41360, 78154, 0, 4743, 0, 0, 74040, 74108, 8743, 1724, - 1433, 119322, 0, 3739, 6263, 0, 0, 3964, 6592, 0, 0, 66040, 0, 42568, 0, - 0, 1778, 3956, 0, 42070, 6563, 43075, 9018, 0, 0, 12067, 41312, 0, 5547, - 74531, 0, 0, 8175, 0, 284, 8108, 934, 0, 74001, 173, 66460, 7174, 917917, - 118822, 1750, 0, 4394, 68368, 1807, 0, 0, 0, 5889, 0, 7180, 0, 119145, 0, - 0, 42471, 6982, 1721, 44022, 7891, 42243, 42160, 2583, 4512, 119360, - 65230, 0, 0, 0, 3855, 0, 0, 0, 0, 74295, 0, 0, 119140, 3975, 0, 74087, 0, - 12672, 3798, 2703, 0, 0, 2109, 9774, 1275, 0, 0, 41095, 3962, 0, 7873, - 41101, 3954, 6457, 4513, 0, 0, 73994, 73992, 1468, 0, 0, 41851, 0, 41846, - 0, 55238, 7633, 41849, 68385, 4320, 3224, 0, 0, 0, 42531, 0, 1510, 0, - 8256, 0, 11393, 0, 8879, 0, 0, 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, 0, 0, 8184, 41486, 0, 7396, 0, 0, 69788, 0, 7185, - 7965, 0, 0, 0, 0, 41350, 9129, 0, 0, 0, 0, 0, 0, 10481, 0, 0, 7171, 0, - 340, 0, 0, 0, 0, 0, 0, 0, 6764, 0, 0, 0, 0, 0, 65203, 11392, 119098, - 119359, 0, 3210, 0, 0, 0, 0, 0, 0, 917619, 0, 0, 10043, 0, 1186, 41571, - 6999, 617, 9464, 0, 3675, 5207, 65062, 5213, 194769, 2617, 41348, 41568, - 0, 3253, 120535, 0, 8630, 0, 0, 5596, 5545, 7288, 2586, 64887, 0, 5217, - 0, 0, 0, 0, 64293, 68098, 2635, 0, 0, 0, 0, 0, 7835, 0, 0, 194988, 0, - 64558, 127122, 0, 127121, 0, 0, 0, 5784, 0, 0, 0, 0, 4011, 917616, 68101, - 0, 7864, 4254, 65095, 0, 5600, 3903, 127083, 10447, 5598, 1207, 120521, - 66689, 3501, 42582, 43600, 194780, 0, 1124, 5597, 0, 0, 9321, 0, 0, 0, 0, - 1719, 68356, 68354, 9671, 1125, 4399, 0, 917610, 0, 7631, 5488, 65223, - 120532, 0, 5491, 0, 8937, 43044, 2604, 74187, 5490, 43046, 5489, 7212, - 11768, 43043, 6300, 0, 194789, 0, 4390, 454, 41397, 0, 9875, 7593, - 194792, 0, 118913, 7207, 0, 65901, 2394, 2575, 0, 3746, 11016, 65752, - 120037, 0, 43423, 0, 11989, 0, 0, 0, 0, 0, 8249, 0, 0, 78531, 6640, - 74806, 2598, 513, 0, 6586, 8656, 0, 127002, 65008, 0, 194784, 0, 194795, - 0, 0, 68475, 0, 0, 0, 78637, 12647, 0, 194796, 0, 1036, 0, 0, 1723, 0, 0, - 0, 41579, 2444, 0, 10705, 73876, 0, 74486, 0, 740, 194985, 194978, - 194984, 0, 4238, 11071, 9459, 68437, 78140, 78139, 0, 8121, 10438, 74487, - 42574, 13285, 55263, 11907, 195000, 5690, 194999, 0, 0, 43181, 13095, 0, - 0, 64498, 0, 9506, 6978, 194993, 77992, 0, 0, 194992, 0, 0, 1122, 317, 0, - 0, 0, 0, 1920, 0, 10173, 827, 0, 0, 78378, 120126, 5223, 1304, 0, 119564, - 5226, 12602, 0, 0, 9329, 7758, 9239, 41173, 5224, 5487, 1222, 5692, - 41725, 69229, 9674, 5695, 41711, 64627, 19909, 0, 74604, 5691, 287, 866, - 233, 0, 0, 42816, 0, 65140, 74797, 0, 8830, 6568, 42300, 10524, 41175, 0, - 0, 0, 5296, 0, 42492, 43402, 0, 3302, 0, 0, 6516, 6515, 6514, 6513, 6512, - 0, 7856, 8690, 0, 0, 12122, 119628, 43976, 0, 1785, 0, 68622, 65153, - 194810, 5138, 0, 0, 0, 0, 4540, 41181, 0, 6200, 0, 5134, 0, 322, 4643, - 5132, 0, 6389, 0, 5143, 0, 8790, 0, 0, 194802, 0, 8869, 120601, 0, 42060, - 0, 0, 0, 0, 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, 0, 65268, 0, 0, 0, 11027, - 0, 10059, 10511, 42075, 9767, 789, 1749, 78890, 127071, 0, 320, 0, 8647, - 0, 3049, 0, 6471, 42071, 43156, 9925, 127356, 127355, 0, 4960, 5549, - 127359, 0, 8485, 4671, 5418, 0, 3351, 127006, 0, 10610, 5414, 3064, 6212, - 4286, 5421, 0, 9554, 0, 0, 0, 6653, 0, 0, 64510, 6213, 12885, 0, 119045, - 64720, 0, 120759, 73741, 12603, 78654, 11430, 4566, 7843, 9317, 3801, - 10342, 10406, 0, 119259, 42576, 0, 5200, 0, 917948, 0, 9183, 0, 74458, - 73825, 395, 5482, 5198, 8786, 10390, 74202, 5196, 43224, 6113, 42009, - 5205, 0, 43307, 0, 118973, 0, 12134, 0, 0, 118843, 9126, 435, 0, 12014, - 12893, 8093, 9079, 3203, 192, 65109, 3385, 0, 64430, 5383, 10294, 10326, - 0, 5738, 0, 3336, 78355, 5361, 3623, 41159, 0, 68112, 7872, 8581, 0, - 1260, 3149, 5359, 0, 0, 7914, 5357, 0, 0, 2624, 5364, 0, 11431, 120030, - 9101, 11058, 78288, 0, 78293, 42271, 78289, 65737, 120793, 0, 65566, - 6717, 10619, 43360, 78385, 78384, 78383, 78382, 78381, 78380, 78379, - 9319, 7097, 119055, 77906, 3232, 73824, 74581, 120632, 0, 0, 41889, 0, 0, - 1161, 41895, 74103, 9701, 8622, 0, 0, 73819, 120588, 5012, 77912, 41362, - 0, 78296, 11921, 0, 11769, 0, 68609, 41364, 0, 74228, 41352, 41361, 0, - 41366, 0, 3356, 0, 917, 68422, 119915, 119923, 8199, 78389, 119917, 677, - 119916, 0, 119932, 0, 0, 0, 0, 3349, 74125, 7022, 8927, 4739, 0, 5802, 0, - 8615, 0, 0, 491, 0, 0, 0, 65837, 0, 8426, 11092, 9891, 0, 42497, 0, 7586, - 42305, 10852, 0, 0, 4606, 68448, 9095, 7741, 12684, 41885, 1046, 0, 0, 0, - 5815, 5171, 65539, 0, 6932, 78315, 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, 9402, 9403, 9404, - 3507, 9406, 7629, 0, 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, 73900, 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, - 78311, 11788, 65587, 68129, 10415, 74102, 0, 205, 0, 10351, 119076, 0, - 9862, 6588, 43257, 64697, 73998, 41355, 5505, 119154, 5503, 8021, 0, - 119150, 9819, 41357, 8011, 42885, 5507, 12044, 0, 0, 10026, 5472, 65108, - 1191, 13106, 5470, 10329, 5476, 8991, 66322, 69778, 78267, 42874, 8550, - 42876, 5592, 2919, 0, 2675, 5595, 78411, 0, 4367, 0, 0, 5478, 5904, 5594, - 0, 74150, 7291, 5590, 77849, 13067, 118909, 120372, 0, 9731, 0, 64633, - 77857, 77854, 77855, 77852, 77853, 77850, 10750, 43714, 77858, 74545, 0, - 0, 12887, 10551, 194564, 77866, 77867, 77864, 77865, 9929, 5199, 9936, - 1120, 42387, 0, 1444, 9486, 7554, 65839, 55252, 0, 1442, 0, 5894, 0, 0, - 0, 0, 74313, 0, 13162, 0, 3334, 0, 118803, 77881, 66022, 0, 0, 1651, 0, - 8861, 0, 0, 1142, 0, 8271, 0, 0, 0, 12903, 0, 4002, 43626, 10442, 10676, - 3344, 0, 0, 12920, 194560, 0, 0, 66642, 1277, 0, 7871, 0, 0, 78853, 0, - 78854, 120360, 0, 11784, 0, 78012, 4700, 66366, 78858, 120359, 11012, 0, - 78856, 120358, 77879, 4973, 8784, 77877, 74804, 77874, 77869, 77871, - 42440, 0, 43118, 0, 42364, 6774, 6773, 0, 120369, 10346, 10410, 78859, - 9243, 2464, 0, 6108, 3372, 0, 6247, 43117, 74526, 0, 74166, 0, 120355, 0, - 0, 0, 0, 0, 0, 0, 74217, 3354, 0, 4192, 9289, 118999, 41191, 3876, 0, 0, - 120660, 43696, 43380, 0, 0, 0, 0, 11603, 0, 0, 6589, 0, 194679, 0, 0, 0, - 0, 0, 42572, 0, 10630, 74827, 1963, 118889, 0, 11654, 0, 7550, 10686, - 5903, 0, 78009, 41329, 9662, 917937, 64698, 3366, 10399, 0, 0, 11013, 0, - 917933, 0, 78621, 194672, 6925, 0, 0, 917929, 0, 11568, 0, 917931, 64579, - 917930, 7852, 0, 0, 6754, 6312, 0, 64672, 65296, 0, 118957, 0, 416, - 12296, 68457, 73834, 68177, 11050, 10984, 0, 0, 0, 0, 0, 0, 9532, 66355, - 0, 0, 917925, 64343, 195032, 0, 195031, 0, 0, 195057, 11445, 0, 195028, - 195056, 195027, 10185, 1021, 0, 9507, 10210, 74544, 8023, 1200, 12243, - 78001, 5282, 78003, 12540, 11545, 0, 120493, 3343, 4424, 11047, 1885, - 43268, 3896, 78626, 66497, 2947, 392, 7894, 4391, 68139, 0, 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, 0, 78301, 0, 74211, 41897, 68477, 0, 917583, 0, 0, 2493, 0, - 118811, 0, 0, 64354, 0, 8777, 0, 406, 8884, 2385, 0, 0, 0, 917573, 43030, - 42027, 12114, 0, 917579, 64936, 0, 0, 120629, 10561, 0, 8365, 0, 0, - 65841, 120787, 11601, 0, 74121, 0, 917575, 7834, 74159, 0, 0, 10298, - 6624, 4908, 917596, 1639, 0, 0, 74157, 6327, 6724, 0, 0, 0, 0, 4817, - 78446, 194759, 0, 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, + 0, 10093, 4369, 917791, 0, 0, 8820, 3947, 0, 0, 11515, 526, 0, 41295, + 194603, 917785, 0, 0, 7688, 917786, 7686, 8288, 11815, 0, 0, 0, 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, 7052, 0, 0, 12990, 1160, 42084, 119650, 41217, + 119660, 10018, 360, 0, 0, 68176, 5863, 3137, 0, 4147, 0, 41216, 7844, + 2616, 119190, 0, 65234, 0, 13076, 3135, 0, 0, 119139, 3142, 194948, 0, + 10819, 119580, 10183, 0, 2608, 1470, 73967, 0, 6227, 0, 0, 74775, 0, + 6163, 0, 0, 0, 0, 0, 8603, 0, 119866, 3306, 10876, 0, 119573, 0, 5834, 0, + 6222, 0, 0, 12086, 0, 1600, 64309, 64939, 0, 64783, 0, 11310, 0, 8882, 0, + 0, 2570, 7021, 0, 0, 43110, 0, 1234, 6540, 6974, 0, 0, 0, 5002, 0, 41286, + 0, 127019, 0, 43585, 0, 6551, 0, 0, 0, 41289, 0, 0, 0, 8977, 602, 120814, + 0, 0, 0, 0, 0, 41279, 0, 0, 0, 0, 43615, 0, 0, 0, 0, 12727, 0, 0, 0, + 9475, 0, 65105, 0, 9633, 10886, 43592, 7831, 0, 0, 0, 73915, 8076, 43048, + 8290, 8291, 43051, 0, 0, 2596, 43584, 0, 13113, 0, 0, 2393, 7058, 9087, + 74067, 0, 41574, 0, 0, 74058, 42035, 0, 0, 0, 0, 9854, 0, 64696, 0, 0, 0, + 74165, 0, 1720, 0, 0, 0, 6529, 7063, 0, 3751, 9120, 0, 0, 1798, 709, 0, + 1354, 1876, 13152, 6557, 12430, 8137, 0, 0, 0, 0, 245, 0, 11456, 41233, + 7070, 0, 0, 6136, 0, 65677, 8682, 41235, 0, 42045, 9804, 0, 432, 3595, 0, + 65437, 0, 74455, 42399, 0, 0, 0, 0, 119658, 0, 0, 0, 0, 8797, 0, 9052, + 64888, 0, 2356, 95, 74784, 10580, 0, 42286, 0, 64640, 0, 119104, 0, 0, 0, + 10063, 12652, 12199, 127030, 0, 2566, 11971, 0, 0, 1065, 0, 0, 0, 2576, + 0, 0, 0, 43604, 0, 0, 74082, 514, 74502, 0, 2921, 43215, 64493, 5772, + 12968, 0, 0, 74580, 917565, 2580, 0, 41341, 41223, 6564, 1463, 41342, 0, + 5293, 0, 0, 3733, 11346, 0, 12054, 0, 74098, 42827, 0, 13091, 0, 0, 0, + 917915, 0, 127026, 0, 74821, 0, 0, 119042, 0, 0, 13090, 66643, 0, 1270, + 1132, 42360, 0, 74096, 66655, 42569, 0, 0, 64761, 0, 41021, 8510, 42432, + 0, 0, 0, 0, 64496, 74109, 0, 9915, 0, 0, 7061, 41336, 3854, 0, 13141, + 917564, 0, 42319, 13082, 0, 7067, 0, 0, 0, 0, 0, 0, 0, 9029, 43543, 0, + 2353, 6308, 0, 74792, 2611, 119186, 0, 0, 0, 0, 0, 66627, 0, 4484, 8509, + 118976, 0, 65233, 0, 41224, 41017, 0, 3747, 10522, 0, 0, 1691, 41226, 0, + 12107, 0, 10905, 65010, 0, 697, 66018, 9284, 4244, 0, 0, 0, 13121, 0, 0, + 12010, 0, 0, 0, 0, 0, 0, 65816, 68111, 0, 0, 65668, 0, 0, 118784, 66365, + 0, 0, 12648, 0, 0, 0, 5785, 41309, 9764, 41316, 65877, 0, 13230, 41299, + 0, 0, 0, 0, 0, 0, 0, 13122, 0, 191, 74119, 0, 8000, 64411, 120652, 42889, + 64850, 41072, 41578, 0, 41577, 0, 10002, 0, 6533, 73802, 41570, 0, 683, + 396, 41580, 68146, 0, 12901, 0, 0, 343, 0, 0, 41360, 0, 0, 4743, 0, 0, + 74040, 74108, 8743, 1724, 1433, 119324, 0, 3739, 6263, 0, 0, 3964, 6592, + 0, 0, 66040, 0, 42568, 0, 0, 1778, 3956, 0, 42070, 6563, 43075, 9018, 0, + 0, 12067, 41312, 0, 5547, 0, 0, 0, 8175, 0, 284, 8108, 934, 0, 74001, + 173, 66460, 7174, 0, 0, 1750, 0, 4394, 0, 1807, 0, 0, 0, 5889, 0, 7180, + 0, 119145, 0, 0, 42471, 6982, 1721, 119144, 7891, 42243, 42160, 2583, + 4512, 0, 0, 0, 0, 0, 3855, 0, 0, 0, 0, 74295, 0, 0, 119140, 3975, 0, + 74087, 0, 12672, 3798, 2703, 0, 0, 0, 9774, 1275, 0, 0, 41095, 3962, 0, + 7873, 41101, 3954, 6457, 4513, 0, 0, 73994, 73992, 1468, 0, 0, 41851, 0, + 41846, 0, 0, 7633, 41849, 0, 4320, 3224, 0, 0, 0, 42531, 0, 1510, 0, + 8256, 0, 11393, 0, 8879, 0, 0, 8770, 0, 0, 127120, 1910, 8671, 0, 4283, + 0, 127117, 0, 0, 2654, 7893, 0, 0, 0, 0, 65106, 42761, 12857, 4581, 8411, + 119029, 127121, 0, 0, 0, 0, 0, 0, 1733, 4392, 2568, 10786, 0, 0, 8184, + 41486, 0, 0, 0, 0, 0, 0, 7185, 7965, 0, 0, 0, 0, 41350, 9129, 0, 0, 0, 0, + 0, 0, 10481, 0, 0, 7171, 0, 340, 0, 0, 0, 0, 0, 0, 0, 917620, 0, 0, 0, 0, + 0, 65203, 11392, 0, 0, 0, 3210, 0, 0, 0, 0, 0, 0, 917619, 0, 0, 10043, 0, + 1186, 41571, 6999, 617, 9464, 0, 3675, 5207, 65062, 5213, 0, 2617, 41348, + 41568, 0, 3253, 120535, 0, 8630, 0, 0, 5596, 5545, 7288, 2586, 64887, 0, + 5217, 0, 0, 0, 0, 64293, 68098, 2635, 0, 0, 0, 0, 0, 7835, 0, 0, 194988, + 0, 64558, 0, 0, 0, 0, 0, 0, 5784, 0, 0, 0, 0, 4011, 0, 68101, 0, 7864, + 4254, 118975, 0, 5600, 3903, 127083, 10447, 5598, 1207, 120521, 0, 3501, + 42582, 43600, 0, 0, 1124, 5597, 0, 0, 9321, 0, 0, 0, 0, 1719, 120576, 0, + 9671, 1125, 4399, 0, 0, 0, 7631, 5488, 65223, 0, 0, 5491, 0, 8937, 43044, + 2604, 74187, 5490, 43046, 5489, 7212, 11768, 43043, 6300, 0, 194789, 0, + 4390, 454, 41397, 0, 9875, 7593, 194792, 0, 118913, 7207, 0, 65901, 2394, + 2575, 0, 3746, 11016, 65752, 0, 0, 917944, 0, 11989, 0, 0, 0, 0, 0, 8249, + 0, 0, 0, 6640, 74806, 2598, 513, 0, 6586, 8656, 0, 0, 65008, 0, 194784, + 0, 194795, 0, 0, 194987, 0, 0, 0, 194986, 12647, 0, 194796, 0, 1036, 0, + 0, 1723, 0, 0, 0, 41579, 2444, 0, 10705, 73876, 0, 74486, 0, 740, 194985, + 0, 194984, 0, 4238, 11071, 9459, 917943, 0, 0, 0, 8121, 10438, 74487, + 42574, 13285, 195001, 11907, 0, 5690, 194999, 0, 0, 43181, 13095, 0, 0, + 64498, 0, 9506, 6978, 194993, 0, 0, 0, 194992, 0, 0, 1122, 317, 0, 0, 0, + 0, 1920, 0, 10173, 827, 0, 0, 0, 120126, 5223, 1304, 0, 119564, 5226, + 12602, 0, 0, 9329, 7758, 9239, 41173, 5224, 5487, 1222, 5692, 41725, 0, + 9674, 5695, 41711, 64627, 19909, 0, 74604, 5691, 287, 866, 233, 0, 0, + 42816, 0, 65140, 74797, 0, 8830, 6568, 42300, 10524, 41175, 0, 0, 0, + 5296, 0, 42492, 0, 0, 3302, 0, 0, 6516, 6515, 6514, 6513, 6512, 0, 7856, + 8690, 0, 0, 12122, 119628, 194813, 0, 1785, 0, 120635, 65153, 194810, + 5138, 0, 0, 0, 0, 4540, 41181, 0, 6200, 0, 5134, 0, 322, 4643, 5132, 0, + 0, 0, 5143, 0, 8790, 0, 0, 194802, 0, 8869, 120601, 0, 42060, 0, 0, 0, 0, + 10270, 10286, 10318, 10382, 43529, 66477, 0, 0, 74170, 0, 3234, 0, 0, + 74376, 43139, 118924, 127084, 120627, 8767, 0, 74489, 41281, 120746, + 5201, 0, 6215, 12714, 6214, 13101, 0, 0, 65268, 0, 0, 0, 11027, 0, 10059, + 10511, 42075, 9767, 789, 1749, 0, 127071, 0, 320, 0, 8647, 0, 3049, 0, + 6471, 42071, 43156, 0, 0, 0, 0, 4960, 5549, 0, 0, 8485, 4671, 5418, 0, + 3351, 0, 0, 10610, 5414, 3064, 6212, 4286, 5421, 0, 9554, 0, 0, 0, 6653, + 0, 0, 64510, 6213, 12885, 0, 119045, 64720, 0, 120759, 73741, 12603, 0, + 11430, 4566, 7843, 9317, 3801, 10342, 10406, 0, 119259, 42576, 0, 5200, + 0, 0, 0, 9183, 0, 74458, 73825, 395, 5482, 5198, 8786, 10390, 74202, + 5196, 43224, 6113, 42009, 5205, 0, 43307, 0, 118973, 0, 12134, 0, 0, + 118843, 9126, 435, 0, 12014, 12893, 8093, 9079, 3203, 192, 65109, 3385, + 0, 64430, 5383, 10294, 10326, 0, 5738, 0, 3336, 0, 5361, 3623, 41159, 0, + 68112, 7872, 8581, 0, 1260, 3149, 5359, 0, 0, 7914, 5357, 0, 0, 2624, + 5364, 0, 11431, 0, 9101, 11058, 0, 0, 0, 42271, 0, 65737, 120793, 0, 0, + 0, 10619, 0, 0, 0, 0, 0, 0, 0, 0, 9319, 7097, 119055, 0, 3232, 73824, + 74581, 0, 0, 0, 41889, 0, 0, 1161, 41895, 74103, 9701, 8622, 0, 0, 73819, + 120588, 5012, 119049, 41362, 0, 917762, 11921, 0, 11769, 0, 0, 41364, 0, + 74228, 41352, 41361, 0, 41366, 0, 3356, 0, 917, 0, 119915, 119923, 8199, + 119912, 119917, 677, 119916, 0, 119932, 0, 0, 0, 0, 3349, 74125, 7022, + 8927, 4739, 0, 5802, 0, 8615, 0, 0, 491, 0, 0, 0, 65837, 0, 8426, 11092, + 9891, 0, 42497, 0, 7586, 42305, 10852, 0, 0, 0, 0, 9095, 7741, 12684, + 41885, 1046, 0, 0, 0, 5815, 5171, 65539, 0, 6932, 0, 42394, 41878, 74849, + 917951, 0, 5169, 11935, 0, 0, 3175, 120822, 1537, 120804, 5176, 8905, + 4136, 4871, 0, 0, 9833, 0, 0, 1128, 65920, 0, 9711, 7057, 9408, 9409, + 9410, 9411, 3662, 9413, 3378, 9415, 9416, 9417, 9418, 8909, 9420, 9421, + 5897, 9423, 5165, 5126, 41385, 0, 41389, 917938, 8955, 3374, 9400, 9401, + 9402, 9403, 9404, 3507, 9406, 7629, 0, 19925, 0, 73832, 183, 0, 2631, 0, + 10627, 41130, 0, 3996, 0, 0, 0, 0, 119307, 0, 6580, 4332, 64825, 66329, + 10726, 66686, 41125, 5899, 41365, 917918, 12085, 0, 574, 917922, 0, + 73828, 5448, 41058, 5446, 73900, 41322, 74768, 5442, 4190, 0, 0, 5451, 0, + 3616, 0, 0, 0, 7708, 0, 10859, 65867, 10345, 10409, 4191, 0, 120719, + 73800, 42181, 0, 0, 4447, 0, 120708, 11788, 65587, 0, 10415, 74102, 0, + 205, 0, 10351, 119076, 0, 9862, 6588, 0, 64697, 0, 41355, 5505, 119154, + 5503, 8021, 0, 119150, 9819, 41357, 8011, 42885, 5507, 12044, 0, 0, + 10026, 5472, 65108, 1191, 13106, 5470, 10329, 5476, 8991, 66322, 0, 0, + 42874, 8550, 42876, 5592, 2919, 0, 2675, 5595, 0, 0, 4367, 0, 0, 5478, + 5904, 5594, 0, 74150, 7291, 5590, 0, 13067, 118909, 0, 0, 9731, 0, 64633, + 194565, 0, 0, 0, 0, 0, 10750, 0, 0, 74545, 0, 0, 12887, 10551, 194564, 0, + 0, 0, 120570, 0, 5199, 0, 1120, 42387, 0, 1444, 9486, 7554, 65839, 0, 0, + 1442, 0, 5894, 0, 0, 0, 0, 74313, 0, 13162, 0, 3334, 0, 118803, 0, 66022, + 0, 0, 1651, 0, 8861, 0, 0, 1142, 0, 8271, 0, 0, 0, 12903, 0, 4002, 0, + 10442, 10676, 3344, 0, 0, 12920, 0, 0, 0, 0, 1277, 0, 7871, 0, 0, 0, 0, + 119015, 120360, 0, 11784, 0, 0, 4700, 66366, 0, 120359, 11012, 0, 0, + 120358, 0, 4973, 8784, 0, 74804, 0, 0, 118981, 42440, 0, 43118, 0, 42364, + 0, 11543, 0, 0, 10346, 10410, 0, 9243, 2464, 0, 6108, 3372, 0, 6247, + 43117, 74526, 0, 74166, 0, 120355, 0, 0, 0, 0, 0, 0, 0, 74217, 3354, 0, + 4192, 9289, 118999, 41191, 3876, 0, 0, 120660, 0, 0, 0, 0, 0, 0, 11603, + 0, 0, 6589, 0, 194679, 0, 0, 0, 0, 0, 42572, 0, 10630, 74827, 1963, + 118889, 0, 11654, 0, 7550, 10686, 5903, 0, 0, 41329, 9662, 917937, 64698, + 3366, 10399, 0, 0, 11013, 0, 917933, 0, 0, 0, 6925, 0, 0, 917929, 0, + 11568, 0, 917931, 64579, 917930, 7852, 0, 0, 12292, 6312, 0, 64672, + 65296, 0, 118957, 0, 416, 12296, 74753, 73834, 0, 11050, 10984, 0, 0, 0, + 0, 0, 0, 9532, 66355, 0, 0, 917925, 64343, 195032, 0, 195031, 0, 0, + 195057, 11445, 0, 195028, 0, 195027, 0, 1021, 0, 9507, 10210, 74544, + 8023, 1200, 12243, 195062, 5282, 195061, 12540, 11545, 0, 120493, 3343, + 4424, 11047, 1885, 43268, 3896, 0, 66497, 2947, 392, 7894, 4391, 68139, + 0, 13059, 74816, 0, 3381, 7942, 0, 0, 0, 0, 0, 3913, 0, 0, 0, 7044, 1265, + 0, 6309, 7045, 7175, 7047, 0, 11791, 0, 0, 8221, 0, 41864, 0, 0, 0, 0, + 167, 0, 917584, 0, 74211, 41897, 0, 0, 0, 0, 0, 2493, 0, 118811, 0, 0, + 64354, 0, 8777, 0, 406, 8884, 2385, 0, 0, 0, 0, 43030, 42027, 12114, 0, + 0, 64936, 0, 0, 120629, 10561, 0, 8365, 0, 0, 65841, 120787, 11601, 0, 0, + 0, 917575, 7834, 74159, 0, 0, 10298, 6624, 4908, 917596, 1639, 0, 0, + 74157, 0, 0, 0, 0, 0, 0, 4817, 0, 194759, 0, 7043, 9600, 11022, 0, 0, 0, + 0, 0, 0, 7548, 64794, 42050, 12291, 0, 194761, 12343, 657, 195054, 64682, + 4461, 1134, 1838, 0, 0, 0, 4468, 0, 0, 0, 4456, 5206, 10720, 0, 42523, 0, + 0, 0, 0, 65550, 260, 4816, 74163, 10687, 0, 4821, 4466, 0, 195043, 4818, 0, 41403, 119977, 0, 0, 41406, 43273, 74160, 119983, 73939, 119985, 119984, 119979, 41404, 1165, 119980, 4451, 13087, 0, 11284, 119987, - 73855, 65155, 43014, 5439, 9363, 127558, 3375, 0, 5900, 0, 7889, 2722, - 42262, 0, 0, 0, 0, 0, 0, 0, 11401, 0, 0, 68459, 0, 0, 0, 0, 65438, 0, - 7280, 0, 0, 0, 4868, 119967, 119966, 0, 0, 0, 43161, 0, 119964, 0, 5182, - 0, 120542, 0, 0, 4226, 120798, 12135, 5732, 4464, 0, 0, 977, 4458, 0, 0, - 64770, 74838, 0, 344, 0, 194790, 1395, 64279, 0, 0, 0, 786, 0, 43174, - 64340, 0, 0, 0, 43026, 7612, 10132, 64413, 0, 0, 0, 0, 0, 0, 68444, 0, - 120734, 0, 119160, 10204, 0, 0, 0, 0, 1399, 0, 65217, 0, 8852, 0, 241, 0, - 4907, 0, 0, 7932, 9727, 0, 74255, 8748, 0, 0, 0, 0, 42780, 0, 0, 0, 4217, - 0, 8650, 0, 0, 0, 0, 118872, 43099, 3965, 119119, 6719, 0, 13300, 78439, - 0, 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, 0, 42825, - 41854, 5304, 0, 78516, 6919, 8619, 119655, 10038, 66454, 9592, 42851, - 126993, 1542, 0, 0, 0, 0, 0, 74311, 78497, 0, 10181, 0, 43624, 0, 7779, - 0, 10195, 9479, 6029, 0, 0, 9689, 0, 0, 8993, 66358, 0, 42378, 3368, 606, - 0, 7697, 69237, 69787, 2030, 0, 6027, 8370, 4322, 0, 65207, 0, 0, 0, 0, - 0, 2735, 42831, 77935, 127120, 74866, 8881, 119047, 0, 0, 73946, 0, 0, 0, - 68140, 0, 9576, 0, 3347, 4160, 5154, 55288, 3794, 66564, 8530, 127063, - 7709, 41112, 0, 66560, 42041, 4572, 12876, 66561, 0, 6758, 0, 1615, 5855, - 809, 0, 0, 0, 0, 5799, 0, 0, 0, 7260, 0, 43031, 64425, 65128, 127061, - 64386, 65257, 0, 68616, 120607, 9347, 0, 6532, 0, 0, 0, 0, 65828, 0, 283, - 68665, 78813, 532, 78663, 0, 0, 120609, 0, 3370, 0, 11361, 5443, 78778, - 8153, 73767, 0, 10741, 0, 0, 0, 0, 65495, 64706, 0, 43344, 0, 78870, - 9466, 78866, 9824, 0, 0, 0, 0, 915, 43425, 0, 0, 0, 0, 0, 43264, 0, 0, 0, - 0, 78864, 6730, 78862, 68161, 64550, 5186, 12890, 0, 0, 12108, 0, 65124, - 43127, 66043, 0, 6326, 43107, 77826, 0, 42562, 0, 0, 0, 0, 11485, 6103, - 127123, 0, 11718, 0, 12889, 0, 0, 0, 0, 0, 55245, 0, 1630, 0, 65483, 0, - 12565, 0, 65476, 120013, 0, 119554, 9283, 7700, 917537, 9690, 65499, 0, - 64593, 512, 3376, 68210, 0, 0, 77892, 632, 12940, 77891, 42529, 78587, 0, - 5957, 0, 8926, 0, 0, 0, 10745, 10174, 7379, 64581, 5386, 120686, 11713, - 10633, 120531, 5056, 0, 0, 0, 120773, 0, 9812, 0, 4460, 0, 0, 0, 0, 0, 0, - 0, 64278, 0, 43466, 0, 0, 64389, 2953, 73879, 1801, 12835, 119029, 0, - 73823, 0, 66375, 2085, 702, 42579, 77884, 77885, 13074, 77883, 0, 0, 0, - 12106, 0, 74207, 1755, 10482, 12863, 77898, 1163, 2951, 9522, 74079, - 78266, 120674, 0, 3384, 69227, 10702, 830, 77902, 77899, 77900, 8451, 0, - 0, 0, 120762, 0, 0, 0, 0, 2908, 0, 43386, 64902, 4243, 0, 12239, 0, 0, - 4441, 0, 0, 73940, 64352, 127513, 0, 411, 0, 0, 0, 4056, 118992, 41890, - 0, 2730, 41604, 0, 5428, 194743, 3364, 42265, 0, 0, 118816, 194742, 9684, - 216, 0, 1401, 0, 44012, 0, 0, 0, 9158, 77842, 120664, 5768, 0, 0, 0, 484, - 0, 0, 0, 65895, 0, 0, 3338, 73935, 572, 7041, 2736, 67605, 0, 0, 2794, - 8807, 64491, 77847, 5438, 5222, 5381, 43114, 0, 5193, 5125, 5456, 5509, - 77846, 194747, 9534, 0, 0, 0, 3430, 0, 0, 0, 0, 981, 0, 4330, 73929, - 120536, 1824, 10908, 0, 7034, 41683, 64617, 0, 73754, 3957, 64358, 64547, - 0, 674, 63991, 0, 2946, 5354, 5251, 5328, 5307, 3759, 11411, 8364, 5123, - 0, 5281, 5469, 5121, 119245, 0, 0, 5130, 0, 0, 77990, 0, 120726, 1221, - 2733, 11746, 77991, 5216, 0, 0, 0, 0, 3468, 7033, 9230, 5939, 0, 0, 0, - 120677, 68400, 7278, 10321, 10289, 64613, 10385, 41706, 0, 0, 0, 0, - 11739, 0, 41981, 0, 5938, 0, 0, 12448, 7576, 10401, 10337, 73852, 0, + 73855, 65155, 43014, 5439, 9363, 0, 3375, 0, 5900, 0, 7889, 2722, 42262, + 0, 0, 0, 0, 0, 0, 0, 11401, 0, 0, 0, 0, 0, 0, 0, 65438, 0, 7280, 0, 0, 0, + 4868, 119967, 119966, 0, 0, 0, 43161, 0, 119964, 0, 5182, 0, 120542, 0, + 0, 4226, 120798, 12135, 5732, 4464, 0, 0, 977, 4458, 0, 0, 64770, 0, 0, + 344, 0, 194790, 1395, 64279, 0, 0, 0, 786, 0, 43174, 64340, 0, 0, 0, + 43026, 7612, 10132, 64413, 0, 0, 0, 0, 0, 0, 120498, 0, 120734, 0, + 119160, 10204, 0, 0, 0, 0, 1399, 0, 0, 0, 8852, 0, 241, 0, 4907, 0, 0, + 7932, 9727, 0, 74255, 8748, 0, 0, 0, 0, 42780, 0, 0, 0, 4217, 0, 8650, 0, + 0, 0, 0, 118872, 43099, 3965, 0, 0, 0, 13300, 0, 0, 0, 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, 0, 42825, 41854, 5304, 0, 0, 6919, + 8619, 119655, 10038, 66454, 9592, 42851, 126993, 1542, 0, 0, 0, 0, 0, + 74311, 0, 0, 10181, 0, 0, 0, 7779, 0, 10195, 9479, 6029, 0, 0, 9689, 0, + 0, 8993, 66358, 0, 42378, 3368, 606, 0, 7697, 0, 0, 2030, 0, 6027, 8370, + 4322, 0, 65207, 0, 0, 0, 0, 0, 2735, 42831, 0, 0, 74866, 8881, 119047, 0, + 0, 73946, 0, 0, 0, 68140, 0, 9576, 0, 3347, 4160, 5154, 0, 3794, 66564, + 66514, 0, 7709, 41112, 0, 66560, 42041, 4572, 0, 66561, 0, 41113, 0, + 1615, 5855, 809, 0, 0, 0, 0, 5799, 0, 0, 0, 7260, 0, 43031, 64425, 65128, + 127061, 64386, 65257, 0, 0, 120607, 9347, 0, 6532, 0, 0, 0, 0, 65828, 0, + 283, 917917, 0, 532, 0, 0, 0, 120609, 0, 3370, 0, 11361, 5443, 0, 8153, + 73767, 0, 10741, 0, 0, 0, 0, 65495, 64706, 0, 0, 0, 0, 9466, 119600, + 9824, 0, 0, 0, 0, 915, 0, 0, 0, 0, 0, 0, 43264, 0, 0, 0, 0, 0, 0, 0, + 68161, 64550, 5186, 12890, 0, 0, 12108, 0, 65124, 0, 66043, 0, 0, 43107, + 0, 0, 42562, 0, 0, 0, 0, 11485, 6103, 127123, 0, 11718, 0, 12889, 0, 0, + 0, 0, 0, 0, 0, 1630, 0, 65483, 0, 12565, 0, 65476, 0, 0, 119554, 9283, + 7700, 917537, 9690, 65499, 0, 64593, 512, 3376, 118862, 0, 0, 0, 632, + 12940, 0, 42529, 0, 0, 5957, 0, 8926, 0, 0, 0, 10745, 10174, 0, 64581, + 5386, 120686, 11713, 10633, 120531, 5056, 0, 0, 0, 120773, 0, 9812, 0, + 4460, 0, 0, 0, 0, 0, 0, 0, 64278, 0, 0, 0, 0, 64389, 2953, 73879, 1801, + 12835, 917627, 0, 73823, 0, 66375, 0, 702, 42579, 0, 0, 13074, 0, 0, 0, + 0, 12106, 0, 74207, 1755, 10482, 12863, 0, 1163, 2951, 9522, 74079, + 195076, 120674, 0, 3384, 120728, 10702, 830, 0, 0, 0, 8451, 0, 0, 0, + 120762, 0, 0, 0, 0, 2908, 0, 0, 64902, 4243, 0, 12239, 0, 0, 4441, 0, 0, + 73940, 64352, 0, 0, 411, 0, 0, 0, 0, 0, 41890, 0, 2730, 41604, 0, 5428, + 194743, 3364, 42265, 0, 0, 118816, 0, 9684, 216, 0, 1401, 0, 0, 0, 0, 0, + 9158, 0, 120664, 5768, 0, 0, 0, 484, 0, 0, 0, 65895, 0, 0, 3338, 73935, + 572, 7041, 2736, 0, 0, 0, 2794, 8807, 64491, 0, 5438, 5222, 5381, 43114, + 0, 5193, 5125, 5456, 5509, 0, 194747, 9534, 0, 0, 0, 3430, 0, 0, 0, 0, + 981, 0, 4330, 120673, 120536, 1824, 10908, 0, 7034, 41683, 64617, 0, + 73754, 3957, 0, 64547, 0, 674, 63991, 0, 2946, 5354, 5251, 5328, 5307, + 3759, 11411, 8364, 5123, 0, 5281, 5469, 5121, 0, 0, 0, 5130, 0, 0, 0, 0, + 120726, 1221, 2733, 11746, 0, 5216, 0, 0, 0, 0, 3468, 0, 9230, 5939, 0, + 0, 0, 120677, 120729, 7278, 10321, 10289, 64613, 10385, 41706, 0, 0, 0, + 0, 11739, 0, 41981, 0, 5938, 0, 0, 12448, 7576, 10401, 10337, 73852, 0, 13057, 0, 126976, 0, 10009, 0, 64304, 0, 12165, 0, 0, 9885, 0, 8077, 0, - 0, 0, 0, 0, 0, 0, 4220, 10725, 10433, 0, 68395, 4987, 64519, 0, 0, 0, 0, - 0, 10970, 11733, 0, 120792, 0, 19944, 0, 9009, 8551, 0, 11468, 64636, - 7575, 0, 2724, 0, 0, 12313, 119949, 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, 0, 11593, 43007, 4478, 66178, 0, 0, - 2744, 0, 4477, 118964, 814, 42066, 66183, 66204, 66194, 119961, 66198, - 41880, 66188, 66197, 78148, 11955, 66190, 66191, 41111, 66189, 73788, - 7788, 4847, 0, 0, 0, 0, 0, 1581, 6535, 78161, 12954, 430, 78160, 55259, - 78158, 194938, 5278, 4945, 42883, 4950, 0, 68625, 0, 7269, 0, 5964, - 12908, 0, 0, 74764, 74477, 119146, 194936, 4949, 0, 443, 0, 4944, 5467, - 119603, 0, 65137, 6044, 65392, 0, 4213, 0, 41303, 0, 194931, 0, 41306, - 73984, 2698, 127531, 0, 12072, 3193, 0, 41304, 824, 0, 12091, 78893, - 78894, 119816, 4673, 64804, 4678, 119820, 119819, 65059, 0, 6739, 0, - 5481, 3490, 1199, 119811, 8356, 119829, 119832, 4677, 12688, 3102, 0, - 4672, 78173, 78175, 5531, 68367, 42575, 78170, 78166, 4674, 4548, 44005, - 0, 68658, 119946, 8025, 68630, 127024, 1855, 0, 68669, 0, 119942, 127554, - 0, 0, 119652, 2745, 11797, 0, 0, 68643, 4654, 0, 0, 68638, 73993, 10525, - 4649, 65209, 0, 0, 4648, 43080, 0, 0, 0, 6246, 64950, 7828, 4650, 6777, - 6776, 6775, 4653, 7822, 78005, 0, 43187, 8669, 0, 6821, 65093, 0, 78881, - 2716, 0, 0, 0, 0, 68369, 0, 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, 0, 0, 0, 64904, 9026, 10833, 74864, 7547, 4867, 0, - 10008, 10222, 3054, 194956, 9744, 78860, 7605, 4622, 119656, 0, 0, 0, 0, - 0, 9045, 78888, 4225, 19926, 78887, 12880, 65307, 4617, 78883, 0, 41732, - 4616, 10518, 10423, 10359, 0, 5958, 0, 0, 4215, 9789, 917941, 4321, 4621, - 0, 41313, 522, 5368, 0, 65803, 0, 5366, 12201, 5372, 0, 0, 0, 7720, 7390, - 2696, 0, 0, 4638, 0, 1790, 78242, 5965, 64363, 66569, 68646, 194968, - 5376, 1835, 5335, 194966, 0, 4633, 0, 68119, 1180, 4632, 0, 5387, 5333, - 0, 0, 42094, 5331, 4634, 11928, 0, 5338, 4637, 0, 5971, 42414, 0, 1268, - 65097, 42361, 0, 0, 73853, 1427, 0, 0, 5970, 3431, 0, 10358, 10422, 4758, - 0, 1608, 2738, 0, 10455, 4753, 74026, 11344, 4222, 6240, 5231, 74384, 0, - 68377, 6248, 0, 0, 0, 42318, 0, 5229, 4757, 0, 0, 2728, 4752, 64563, - 65235, 5234, 0, 0, 0, 10713, 0, 0, 2622, 7460, 0, 0, 0, 8954, 74760, - 65189, 2632, 0, 10108, 1011, 5574, 1853, 2709, 65139, 5577, 0, 0, 118871, - 68641, 8965, 7635, 42177, 5316, 0, 5314, 6451, 5572, 0, 5312, 0, 5525, - 5330, 5319, 0, 0, 194907, 44003, 0, 0, 0, 120498, 0, 195009, 0, 74022, 0, - 64609, 0, 120634, 0, 5721, 0, 5519, 8632, 66465, 11267, 73961, 0, 5720, - 0, 1692, 4219, 4610, 8696, 4305, 0, 4609, 43478, 4614, 541, 0, 5287, - 5309, 5285, 68389, 5961, 4647, 56, 4216, 10577, 41381, 601, 4613, 0, 0, - 0, 4608, 64260, 41124, 5190, 67628, 0, 68145, 7086, 0, 119243, 67620, 0, - 2734, 11074, 0, 67627, 43593, 0, 67625, 5960, 0, 8992, 65293, 0, 1782, - 67622, 68114, 119939, 0, 68180, 5501, 119952, 42508, 7442, 43665, 359, - 41253, 68392, 6239, 119956, 41256, 0, 68134, 0, 74209, 0, 9346, 118904, - 41254, 0, 43291, 3767, 5737, 0, 4865, 0, 5740, 917997, 5736, 4368, 0, - 7193, 68137, 0, 5739, 41024, 4866, 0, 73904, 0, 4869, 120563, 0, 4223, 0, - 6650, 0, 0, 0, 0, 4870, 0, 68661, 6716, 78176, 68667, 68382, 68676, 0, - 10122, 4864, 66568, 4144, 7937, 0, 6245, 68652, 2732, 42734, 745, 0, - 195097, 0, 4777, 7821, 0, 68631, 42775, 0, 194954, 0, 3097, 0, 5966, 0, - 4778, 0, 10863, 0, 4781, 0, 64407, 0, 0, 8577, 0, 68196, 43285, 10216, - 4782, 0, 0, 120757, 68618, 12325, 43056, 8717, 0, 0, 4776, 0, 11492, - 8700, 0, 13176, 68363, 10426, 0, 917599, 10362, 0, 1715, 4849, 8242, - 9561, 73922, 43278, 42635, 0, 0, 5963, 917926, 0, 0, 4850, 0, 1607, 466, - 4853, 118995, 4854, 0, 5164, 0, 1350, 5124, 64420, 1993, 5362, 8471, - 2708, 0, 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, 0, 303, 0, 0, 0, 2437, - 0, 4221, 4844, 118869, 0, 0, 0, 0, 0, 43292, 0, 2441, 10739, 65090, 0, - 119327, 0, 2451, 2714, 119326, 0, 43379, 4937, 43376, 753, 5849, 10597, - 43089, 11722, 9248, 0, 42879, 11725, 0, 0, 2726, 3107, 73958, 4941, - 64937, 119233, 9140, 1408, 5261, 4607, 0, 181, 0, 4942, 9539, 4938, 0, - 65201, 5259, 9369, 64185, 4142, 5257, 0, 0, 4964, 5264, 64178, 64177, - 12979, 41411, 64182, 64181, 64180, 64179, 9482, 4873, 41231, 1822, 42526, - 0, 12758, 3865, 0, 0, 10500, 0, 0, 78028, 0, 9830, 43642, 389, 10893, - 7521, 0, 4872, 5463, 0, 3125, 9567, 0, 4878, 5459, 4604, 0, 9557, 5465, - 68617, 0, 11494, 0, 9563, 10865, 74570, 43279, 64186, 0, 78714, 64191, - 64190, 8898, 64188, 0, 41030, 78836, 0, 917835, 78820, 917834, 0, 78805, - 41031, 78801, 11960, 6745, 3082, 0, 78539, 73919, 10573, 41744, 7079, - 5856, 127043, 5163, 78809, 0, 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, 0, 42156, 78688, 0, - 64193, 64192, 78000, 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, 0, 64169, 64168, 64949, 10972, - 10251, 10247, 42768, 715, 64161, 43299, 9453, 5348, 10943, 120378, 0, - 11352, 550, 9910, 0, 0, 66579, 11551, 0, 0, 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, - 78196, 78192, 68136, 78190, 43412, 5064, 2431, 0, 9450, 1809, 0, 78200, - 78201, 5062, 1264, 64817, 13254, 11697, 0, 9785, 64716, 0, 3933, 74559, - 4740, 7954, 0, 0, 42609, 0, 74175, 0, 127016, 0, 0, 42130, 0, 5151, - 917829, 917823, 0, 0, 0, 7620, 3800, 65122, 0, 0, 8355, 7854, 0, 954, - 64927, 4185, 41045, 0, 41438, 41439, 68666, 10711, 4593, 0, 120584, 0, - 64774, 8053, 10532, 66727, 0, 0, 0, 64759, 6381, 5166, 9888, 0, 5148, - 42834, 0, 78205, 78206, 64140, 78204, 64131, 3119, 917814, 0, 3060, - 64135, 9986, 0, 77876, 636, 11698, 0, 0, 9916, 11701, 7836, 42741, 64137, - 8320, 78640, 8863, 0, 119960, 1477, 43289, 0, 74358, 8618, 0, 9908, 0, 0, - 0, 3937, 12312, 0, 0, 0, 64781, 912, 6349, 4536, 119963, 74532, 0, 6244, - 0, 194580, 3935, 120665, 0, 0, 11950, 5392, 42248, 65129, 68656, 5397, 0, - 12046, 12599, 0, 0, 5395, 0, 5393, 354, 68615, 119948, 78503, 0, 0, - 42039, 0, 0, 64142, 626, 0, 5895, 0, 0, 5780, 0, 0, 0, 0, 0, 43297, 0, - 4311, 4644, 8818, 0, 0, 0, 73818, 3918, 66452, 3797, 1644, 119944, 9658, - 4140, 11385, 65947, 6455, 9030, 813, 119945, 68131, 4146, 119957, 5360, - 2466, 0, 67669, 0, 6249, 42117, 0, 0, 0, 0, 74046, 120583, 4911, 988, - 917807, 0, 0, 43061, 7054, 64147, 0, 64920, 68195, 6698, 118933, 120349, - 0, 0, 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, 917866, 73736, 0, 9825, 6448, 6715, 127008, 4831, 0, 0, 0, - 5300, 4741, 42108, 0, 64159, 4736, 64148, 0, 849, 0, 78491, 43288, 0, - 66620, 0, 194920, 65549, 9496, 64598, 118866, 0, 7876, 68132, 917872, - 3928, 917870, 43378, 10706, 7198, 0, 4842, 12053, 0, 0, 4841, 0, 4171, - 12008, 6251, 3923, 1490, 0, 119591, 0, 40972, 5245, 0, 10114, 42001, - 41888, 4845, 8332, 40974, 64347, 4840, 9077, 78346, 1747, 917849, 4825, - 69240, 917852, 68655, 0, 0, 0, 0, 68628, 0, 9850, 118937, 367, 1472, - 917859, 6687, 1274, 0, 5905, 12339, 8919, 73953, 10907, 65261, 11023, - 119559, 4830, 9134, 78666, 64126, 43011, 0, 0, 64101, 0, 0, 4824, 10614, - 120390, 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, 120385, 0, 0, 0, 119053, 0, 12765, 64118, 126998, 12962, - 0, 0, 4017, 12827, 5241, 120392, 0, 41118, 3924, 0, 11366, 917843, 0, 0, - 917846, 41116, 917844, 917564, 0, 11363, 12057, 11917, 1567, 74000, 4721, - 0, 66202, 8957, 4139, 0, 0, 0, 0, 0, 12740, 0, 4722, 6816, 0, 12759, - 4725, 0, 4726, 0, 0, 0, 917904, 917905, 0, 12755, 12762, 4015, 0, 8052, - 476, 0, 0, 0, 64212, 41020, 1382, 64209, 64216, 64215, 64214, 1656, - 41831, 0, 0, 41843, 8720, 3908, 1452, 13111, 0, 64067, 0, 8552, 64113, - 41845, 3849, 78732, 66232, 9778, 120066, 5891, 7064, 55, 9948, 917911, 0, - 0, 7935, 67586, 0, 1114, 0, 67585, 78675, 120053, 120050, 120051, 3938, - 120057, 65417, 64717, 120060, 120061, 65415, 120059, 6292, 65303, 7955, - 6452, 4713, 917887, 66249, 917885, 917890, 917891, 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, 0, 12006, 0, 0, 0, 0, 0, 65414, 6454, 1229, 0, 66437, 66025, 78699, - 0, 42500, 120508, 4809, 9623, 917874, 78694, 917880, 917877, 917878, - 65405, 68159, 917881, 917882, 5365, 4545, 8901, 917566, 119555, 4813, 0, - 0, 5925, 4808, 64330, 0, 65475, 118940, 0, 4814, 0, 4810, 0, 0, 64928, - 10543, 0, 3522, 0, 414, 65404, 0, 0, 6456, 73820, 0, 6691, 42193, 0, 0, - 0, 74495, 0, 0, 0, 118820, 9751, 65407, 0, 11770, 3919, 0, 0, 65061, 0, - 0, 0, 12235, 0, 0, 195025, 64092, 0, 64080, 0, 64090, 0, 0, 10162, 10310, - 0, 8454, 0, 42038, 387, 41363, 12737, 0, 4780, 43368, 0, 64310, 64621, - 6732, 0, 0, 0, 0, 0, 8896, 0, 375, 6976, 66582, 119005, 0, 0, 0, 119202, - 119203, 12526, 43120, 2315, 0, 1938, 119197, 0, 4529, 119200, 119201, - 119198, 119199, 0, 0, 0, 13150, 64492, 0, 0, 0, 12902, 0, 42891, 66327, - 74298, 0, 10799, 0, 2587, 66372, 0, 4193, 120334, 4241, 0, 7998, 0, 0, 0, - 0, 2316, 118821, 0, 0, 0, 64297, 74799, 0, 74140, 0, 5373, 0, 0, 3762, - 10015, 0, 119232, 0, 41590, 0, 0, 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, 0, 68138, 13072, 1894, 0, 0, 65478, 43310, 7231, 0, - 11773, 0, 0, 0, 0, 2551, 0, 6453, 10200, 6235, 0, 119237, 0, 0, 4470, - 119613, 0, 7780, 5369, 118958, 5249, 0, 5367, 8756, 0, 0, 5377, 120585, - 68143, 1688, 78245, 0, 0, 0, 0, 0, 44020, 6808, 41319, 1300, 10650, - 41692, 64505, 4668, 0, 119624, 1465, 10850, 3943, 0, 41205, 41315, 0, 0, - 0, 5352, 0, 0, 8839, 41314, 7384, 7785, 41204, 0, 41209, 0, 0, 43607, 0, - 0, 5420, 3897, 0, 0, 74417, 4018, 0, 68127, 0, 0, 0, 0, 127526, 2561, - 68621, 3542, 41915, 12076, 7951, 68152, 118857, 5303, 6276, 1706, 0, - 78751, 74116, 0, 65150, 41819, 0, 73951, 10847, 41822, 9985, 860, 0, - 10506, 0, 0, 10753, 10830, 0, 615, 64490, 7574, 0, 77922, 0, 12909, - 43016, 64559, 127028, 0, 0, 0, 2020, 0, 4022, 0, 0, 77923, 0, 41691, 0, - 0, 74329, 0, 64622, 9070, 0, 68411, 3911, 42829, 43122, 1033, 74440, 0, - 7000, 3904, 0, 0, 0, 0, 127012, 13123, 10846, 3450, 0, 7397, 118807, 0, - 42778, 10000, 41088, 449, 0, 3777, 68458, 0, 9636, 0, 10738, 0, 9367, - 593, 41085, 3999, 65226, 41713, 12764, 0, 64409, 3596, 0, 0, 9763, - 120280, 120283, 12347, 124, 12981, 41127, 2092, 0, 0, 0, 0, 10820, 43987, - 0, 0, 1769, 41715, 2463, 78489, 0, 12770, 0, 1538, 0, 43124, 0, 195058, - 7795, 120300, 0, 4828, 1258, 0, 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, 0, - 1511, 9324, 78211, 10519, 66331, 3454, 19930, 0, 41019, 0, 0, 65292, - 6822, 12862, 0, 0, 42143, 41828, 78207, 65531, 78208, 118879, 55223, 0, - 0, 41826, 8865, 6402, 0, 13279, 7917, 120340, 0, 7733, 0, 4998, 0, 0, - 41950, 0, 4268, 0, 0, 0, 4013, 0, 10881, 0, 0, 0, 74788, 2014, 0, 0, - 9765, 0, 0, 0, 195059, 78357, 65281, 0, 10949, 0, 0, 0, 2015, 0, 0, 0, - 66318, 43233, 0, 42517, 0, 0, 0, 12698, 8094, 43445, 65909, 6474, 794, 0, - 12656, 0, 119353, 0, 1665, 0, 4833, 0, 119351, 0, 0, 189, 12611, 0, 0, - 2859, 4838, 0, 4834, 65078, 0, 0, 4837, 0, 770, 0, 811, 0, 41042, 917551, - 41318, 64427, 0, 0, 78848, 3895, 0, 74341, 3976, 0, 42859, 10193, 3116, - 7747, 0, 0, 0, 0, 0, 43686, 78846, 41877, 0, 2871, 64614, 0, 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, 0, 0, 0, - 119248, 394, 3088, 0, 0, 0, 3991, 64391, 0, 0, 424, 66328, 1999, 0, - 73914, 0, 0, 0, 0, 42231, 8246, 0, 0, 0, 41840, 0, 2377, 1298, 64011, - 12572, 11318, 12557, 12559, 12570, 8488, 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, 0, 9655, 0, 2004, 9096, 9782, 0, 9172, 0, 19965, - 0, 5955, 67666, 1108, 0, 74773, 0, 0, 64782, 3926, 0, 65210, 8798, 0, 0, - 1392, 0, 0, 917557, 10606, 8065, 118805, 10353, 10417, 0, 0, 64524, 0, - 4019, 0, 0, 43280, 8219, 68402, 1812, 0, 0, 0, 0, 42410, 74448, 119132, - 6054, 10697, 3169, 42297, 42322, 10642, 3909, 9950, 0, 0, 0, 68678, 0, 0, - 1049, 0, 65707, 2304, 41806, 0, 42336, 3921, 0, 11775, 64760, 11766, - 1038, 42303, 9823, 127278, 69236, 4008, 64004, 8773, 10733, 36, 0, 5153, - 41805, 0, 73735, 763, 41808, 64910, 0, 2009, 0, 0, 0, 9640, 119951, 0, - 120695, 8621, 0, 12852, 3031, 0, 64361, 0, 182, 194718, 0, 0, 119950, 0, - 9058, 366, 0, 9892, 5969, 11754, 10848, 4570, 65301, 44013, 4255, 0, - 10102, 41189, 4003, 41026, 68109, 13293, 41192, 0, 0, 42251, 0, 42534, - 65179, 11287, 6128, 0, 11034, 10923, 64423, 0, 65506, 0, 0, 74083, 0, - 9932, 0, 0, 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, 127116, - 4705, 716, 78004, 0, 4704, 120040, 120270, 42241, 161, 43977, 74546, - 66214, 4706, 0, 0, 42672, 4709, 10680, 0, 43293, 0, 0, 119164, 120328, 0, - 0, 1700, 119223, 0, 0, 0, 4004, 0, 10968, 43296, 0, 8506, 0, 0, 126996, - 1005, 937, 78216, 4734, 2870, 0, 78218, 0, 7463, 4729, 0, 235, 1384, - 4728, 0, 120420, 120644, 120421, 8109, 43105, 0, 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, 0, 73976, - 120305, 43371, 6941, 119349, 13205, 13211, 5801, 12769, 65905, 41697, - 1283, 120302, 4779, 0, 3719, 4006, 0, 19957, 0, 2021, 119332, 0, 0, - 43028, 65493, 41838, 3875, 5962, 64341, 119339, 9814, 43457, 5827, 3314, - 7787, 78234, 65494, 68153, 0, 0, 120636, 64531, 120692, 0, 0, 0, 66316, - 65467, 5771, 41298, 0, 9742, 521, 0, 10800, 0, 8404, 194625, 483, 7096, - 7089, 66323, 928, 0, 0, 119018, 10599, 11586, 3989, 10971, 0, 65782, - 9841, 8843, 12145, 0, 10074, 78548, 0, 3769, 0, 0, 0, 0, 9573, 0, 65290, - 8849, 0, 65855, 65112, 1796, 120505, 0, 78555, 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, 0, 7595, 42588, 7600, 120121, - 66035, 0, 0, 65851, 42607, 0, 0, 3168, 0, 42134, 0, 2370, 2846, 0, 0, 0, - 120132, 0, 1836, 0, 0, 119137, 3740, 0, 6290, 65374, 120451, 65923, 3944, - 66628, 120434, 0, 6135, 3118, 74265, 119093, 120446, 0, 0, 8127, 8975, - 64739, 7943, 0, 0, 10618, 2584, 0, 0, 0, 9998, 0, 0, 0, 0, 0, 6204, 0, 0, - 8279, 8776, 64954, 4975, 74809, 120130, 4267, 0, 42206, 0, 0, 195046, - 65700, 66562, 0, 64645, 0, 0, 0, 12586, 0, 9242, 0, 0, 4523, 5842, 10495, - 3122, 0, 7793, 78275, 9328, 0, 0, 12604, 0, 6615, 67650, 0, 3986, 44025, - 0, 8912, 64555, 7409, 0, 0, 9541, 78276, 0, 11275, 8540, 11498, 0, 0, - 41040, 2459, 0, 13060, 41041, 74413, 0, 0, 0, 68427, 10450, 12551, 41043, - 7020, 120353, 3765, 0, 0, 1606, 120348, 120351, 3093, 68436, 0, 0, - 120649, 0, 0, 4312, 74091, 120337, 120336, 11923, 4023, 120333, 5763, - 120335, 4827, 10894, 12810, 64406, 118785, 4455, 74321, 433, 119620, - 66660, 2499, 0, 0, 0, 11973, 13089, 4293, 120329, 42224, 42758, 12196, - 42837, 42226, 119319, 0, 119126, 5817, 0, 55277, 3120, 9797, 0, 0, 0, - 10389, 0, 0, 4895, 65358, 0, 4359, 585, 0, 3509, 0, 486, 4290, 5758, 0, - 0, 0, 7004, 0, 65880, 0, 119048, 2380, 11380, 0, 0, 2376, 0, 917847, 0, - 5197, 127046, 127047, 127048, 2366, 127050, 127051, 120554, 120045, 0, 0, - 0, 0, 0, 0, 0, 74188, 0, 0, 0, 120047, 0, 0, 0, 120049, 0, 1847, 0, - 10339, 0, 42384, 0, 4227, 74158, 0, 0, 43032, 0, 42365, 0, 12671, 11384, - 0, 0, 0, 64797, 0, 5820, 0, 120052, 120065, 0, 120064, 120650, 42137, - 9893, 2754, 12664, 120063, 0, 7377, 0, 41799, 65530, 1711, 12984, 43039, - 3114, 6255, 0, 118938, 0, 10853, 926, 0, 74184, 0, 120055, 0, 43175, 0, - 43037, 41798, 41035, 11583, 0, 41801, 119088, 0, 520, 4200, 12699, 8331, - 0, 3091, 41034, 127353, 0, 8360, 0, 78044, 321, 4229, 64543, 0, 65563, 0, - 917974, 2861, 0, 10095, 0, 0, 0, 1861, 0, 0, 0, 0, 43041, 0, 0, 0, 3859, - 12181, 41660, 8209, 0, 73867, 12973, 0, 74757, 127514, 41658, 0, 0, 5760, - 0, 743, 4414, 120766, 0, 42632, 917973, 65161, 73896, 0, 0, 1405, 119063, - 43220, 43341, 0, 19919, 0, 64532, 65367, 43710, 0, 0, 3513, 0, 118883, - 43342, 119064, 65529, 65364, 0, 0, 6485, 1397, 0, 41986, 0, 0, 0, 74097, - 0, 7471, 12079, 0, 12682, 43287, 0, 0, 0, 0, 0, 0, 1099, 10490, 0, 10501, - 65181, 74463, 0, 464, 41624, 65283, 67663, 78222, 1346, 0, 917631, 64724, - 64897, 423, 1818, 65144, 0, 8272, 0, 19911, 4218, 3087, 64960, 127234, - 43564, 0, 0, 9584, 10465, 0, 74359, 12626, 9106, 0, 42642, 0, 64750, - 9390, 0, 41797, 0, 0, 265, 41795, 64666, 0, 43530, 2752, 0, 0, 0, 59, 0, - 0, 0, 0, 77873, 41810, 0, 7010, 0, 41809, 41495, 119364, 0, 42252, 42213, - 8009, 3305, 43033, 511, 119320, 66255, 13127, 120067, 0, 0, 0, 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, 0, 3452, 11906, - 9581, 1385, 3098, 0, 119013, 43340, 0, 41033, 6493, 42626, 0, 0, 11426, - 0, 1681, 118789, 1204, 3755, 64661, 7235, 10170, 3966, 8911, 0, 41841, - 43338, 0, 0, 5726, 64915, 42175, 0, 0, 41497, 65044, 0, 2851, 43017, 0, - 0, 4373, 78058, 0, 9587, 1789, 6671, 0, 3100, 0, 65360, 0, 127510, 0, - 64922, 0, 8190, 12083, 0, 0, 6506, 64312, 74374, 2368, 0, 4419, 0, - 119125, 3439, 1825, 1192, 120106, 8891, 3080, 120228, 2347, 5430, 0, - 8990, 2848, 0, 0, 0, 249, 0, 0, 0, 120658, 0, 0, 8883, 917802, 728, - 68178, 995, 0, 0, 64826, 0, 917798, 0, 0, 19945, 8091, 558, 0, 12273, - 194814, 0, 12112, 0, 0, 0, 74419, 12335, 120104, 917795, 3443, 3129, 0, - 2102, 65445, 78258, 64891, 0, 7725, 0, 78255, 0, 8624, 69246, 12446, - 43295, 0, 41894, 0, 6277, 41672, 41893, 10010, 0, 3540, 0, 835, 0, 69816, - 119868, 74408, 0, 73959, 5426, 4258, 0, 0, 5424, 0, 8283, 0, 5434, 0, 0, - 19917, 11408, 0, 11947, 0, 1404, 3095, 11432, 194813, 3464, 6486, 4819, - 0, 0, 570, 8095, 3672, 119864, 1498, 67866, 0, 0, 431, 0, 0, 0, 0, 68167, - 0, 13096, 0, 0, 43408, 9516, 0, 5268, 42230, 42220, 0, 4450, 120723, - 11547, 43417, 0, 356, 3477, 227, 10488, 68203, 382, 11418, 0, 0, 0, 0, 0, - 0, 6484, 2541, 66039, 0, 78718, 0, 3549, 0, 9110, 119665, 2743, 0, 43290, - 194812, 9097, 0, 43015, 8782, 0, 776, 2524, 42707, 8573, 0, 0, 0, 0, - 42694, 64944, 8952, 3856, 118818, 0, 5872, 6495, 0, 0, 0, 0, 0, 120733, - 12849, 3953, 1897, 0, 65094, 11994, 4339, 74556, 0, 67843, 0, 0, 0, - 68473, 74104, 5228, 0, 7868, 43184, 0, 0, 73986, 43438, 0, 43022, 0, - 1162, 0, 2671, 0, 0, 0, 0, 118865, 4553, 73811, 0, 195005, 0, 0, 19921, - 74331, 11424, 195006, 4567, 41891, 0, 0, 55249, 4820, 65239, 194662, 0, - 0, 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, 127092, 120697, 844, 5014, 0, 256, 0, 9990, 0, 42739, - 0, 7542, 65464, 9726, 0, 6489, 10048, 74326, 78719, 66573, 0, 78724, - 78712, 11761, 194655, 0, 41094, 0, 0, 0, 0, 0, 6196, 6945, 194628, - 194890, 194631, 120491, 11816, 194943, 5733, 0, 0, 0, 41098, 0, 41093, 0, - 66626, 588, 9760, 0, 194717, 1238, 200, 0, 1660, 73916, 0, 118905, 74362, - 0, 0, 194651, 0, 0, 3394, 194894, 120668, 0, 0, 0, 66219, 0, 43284, - 194657, 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, 78713, 65328, 0, 74367, 7614, 0, - 11819, 0, 12009, 12399, 0, 67852, 65537, 0, 10841, 43430, 5301, 0, 0, - 5734, 8960, 0, 127527, 65317, 77880, 0, 0, 0, 12304, 0, 0, 65315, 0, 0, - 0, 0, 0, 119621, 0, 74536, 12447, 64486, 0, 0, 0, 0, 0, 0, 42767, 10915, - 0, 12007, 43695, 120520, 11975, 194878, 0, 0, 2555, 8629, 0, 43168, - 41872, 43706, 4496, 194879, 0, 0, 0, 0, 0, 0, 64730, 0, 66714, 68222, 0, - 0, 65596, 0, 11416, 4280, 67655, 8765, 12784, 7792, 1393, 127242, 67871, - 74386, 0, 8233, 43572, 0, 6683, 0, 3442, 12144, 2841, 12543, 0, 1473, - 42820, 64329, 917772, 0, 68642, 6488, 357, 1048, 41100, 0, 41104, 0, - 41099, 1054, 119065, 1040, 65450, 0, 4434, 1069, 0, 118862, 74231, - 917765, 0, 0, 0, 9693, 41943, 0, 41931, 41759, 12757, 4353, 0, 1059, - 9790, 8995, 0, 0, 65937, 0, 41764, 10646, 0, 118833, 0, 0, 74830, 78569, - 12743, 0, 6480, 917761, 41779, 42580, 66601, 12207, 119619, 6335, 66602, - 11312, 64807, 0, 0, 41767, 0, 0, 43020, 0, 3955, 74254, 0, 0, 917861, 0, - 77926, 9770, 9246, 12230, 0, 0, 0, 10448, 41783, 41786, 127093, 12797, - 2755, 64571, 78578, 194927, 4857, 0, 4428, 12794, 73755, 0, 78574, 0, 0, - 0, 5747, 78825, 0, 7978, 41092, 74571, 0, 11924, 74205, 42144, 65015, 0, - 563, 0, 0, 12798, 11271, 57, 0, 0, 917860, 119043, 0, 0, 43137, 694, 0, - 9876, 0, 119168, 0, 78822, 64537, 0, 277, 74385, 7229, 12761, 0, 0, - 13025, 64811, 8757, 78824, 0, 1574, 7381, 0, 2525, 4852, 5749, 68465, - 13027, 42824, 120574, 1039, 9801, 10155, 5745, 188, 41858, 11592, 0, - 74015, 9055, 41853, 4858, 917780, 0, 436, 4771, 0, 2786, 0, 4856, 8051, - 0, 119609, 0, 9644, 0, 0, 0, 194916, 120732, 66710, 118834, 0, 73906, 0, - 127114, 0, 10234, 5843, 11939, 0, 42157, 0, 3157, 194918, 68393, 0, 3504, - 119178, 0, 10822, 5149, 66029, 10226, 65142, 0, 3594, 42424, 194959, 40, + 0, 0, 0, 0, 0, 0, 4220, 10725, 10433, 0, 0, 4987, 64519, 0, 0, 0, 0, 0, + 10970, 11733, 0, 120792, 0, 19944, 0, 9009, 8551, 0, 11468, 74003, 7575, + 0, 2724, 0, 0, 12313, 119949, 515, 119947, 42791, 63987, 119942, 119943, + 119940, 119941, 119938, 9775, 4046, 4589, 4521, 0, 9141, 0, 0, 2741, + 64399, 6197, 1370, 0, 0, 0, 0, 0, 0, 6184, 8606, 3303, 41372, 11786, + 9473, 66203, 66177, 0, 11593, 43007, 4478, 66178, 0, 0, 2744, 0, 4477, 0, + 814, 42066, 66183, 66204, 66194, 119961, 66198, 41880, 66188, 66197, + 119954, 11955, 66190, 66191, 41111, 66189, 73788, 7788, 4847, 0, 0, 0, 0, + 0, 1581, 6535, 0, 12954, 430, 194934, 194939, 0, 194938, 5278, 4945, + 42883, 4950, 0, 120547, 0, 7269, 0, 5964, 12908, 0, 0, 74764, 74477, + 119146, 194936, 4949, 0, 443, 0, 4944, 5467, 119603, 0, 65137, 6044, + 65392, 0, 4213, 0, 41303, 0, 194931, 0, 41306, 73984, 2698, 0, 0, 12072, + 3193, 0, 41304, 824, 0, 12091, 119814, 119813, 119816, 4673, 64804, 4678, + 119820, 119819, 65059, 0, 119808, 0, 5481, 3490, 1199, 119811, 8356, + 119829, 119832, 4677, 12688, 3102, 0, 4672, 119822, 119821, 5531, 119823, + 42575, 119825, 119828, 4674, 4548, 0, 0, 0, 119946, 8025, 0, 127024, + 1855, 0, 119945, 0, 120554, 0, 0, 0, 0, 2745, 11797, 0, 0, 119939, 4654, + 0, 0, 194959, 73993, 10525, 4649, 65209, 0, 0, 4648, 43080, 0, 0, 0, + 6246, 64950, 7828, 4650, 0, 0, 119086, 4653, 7822, 0, 0, 43187, 8669, 0, + 0, 65093, 0, 0, 2716, 0, 0, 0, 0, 0, 0, 11060, 8547, 2711, 42165, 0, + 119228, 7992, 0, 0, 4662, 0, 0, 9149, 9146, 599, 4657, 194963, 120754, + 194962, 4656, 10130, 0, 7811, 40994, 194965, 6414, 5967, 4658, 3725, + 5713, 5814, 4661, 42434, 0, 0, 0, 64904, 9026, 10833, 0, 7547, 4867, 0, + 10008, 10222, 3054, 194956, 9744, 0, 7605, 4622, 119656, 0, 0, 0, 0, 0, + 9045, 0, 4225, 19926, 0, 12880, 65307, 4617, 0, 0, 0, 4616, 10518, 10423, + 10359, 0, 5958, 0, 0, 4215, 9789, 917941, 4321, 4621, 0, 41313, 522, + 5368, 0, 65803, 0, 5366, 12201, 5372, 0, 0, 0, 7720, 0, 2696, 0, 0, 4638, + 0, 1790, 0, 5965, 64363, 66569, 0, 194968, 5376, 1835, 5335, 194966, 0, + 4633, 0, 68119, 1180, 4632, 0, 5387, 5333, 0, 0, 42094, 5331, 4634, + 11928, 0, 5338, 4637, 0, 5971, 42414, 0, 1268, 65097, 42361, 0, 0, 73853, + 1427, 0, 0, 5970, 3431, 0, 10358, 10422, 4758, 0, 1608, 2738, 0, 10455, + 4753, 74026, 11344, 4222, 6240, 5231, 74384, 0, 0, 6248, 0, 0, 0, 42318, + 0, 5229, 4757, 0, 0, 2728, 4752, 64563, 65235, 5234, 0, 0, 0, 10713, 0, + 0, 2622, 7460, 0, 0, 0, 8954, 74760, 65189, 2632, 0, 10108, 1011, 5574, + 1853, 2709, 65139, 5577, 0, 0, 118871, 0, 8965, 7635, 42177, 5316, 0, + 5314, 6451, 5572, 0, 5312, 0, 5525, 5330, 5319, 0, 0, 194907, 119016, 0, + 0, 0, 0, 0, 195009, 0, 74022, 0, 64609, 0, 0, 0, 5721, 0, 10398, 8632, + 66465, 11267, 73961, 0, 5720, 0, 1692, 4219, 4610, 8696, 4305, 0, 4609, + 0, 4614, 541, 0, 5287, 5309, 5285, 0, 5961, 4647, 56, 4216, 10577, 41381, + 601, 4613, 0, 0, 0, 4608, 64260, 41124, 5190, 67628, 0, 68145, 7086, 0, + 119243, 67620, 0, 2734, 11074, 0, 67627, 43593, 0, 67625, 5960, 0, 8992, + 65293, 0, 1782, 67622, 68114, 119950, 0, 68180, 5501, 119952, 42508, + 7442, 120749, 359, 41253, 119957, 6239, 119956, 41256, 0, 68134, 0, + 74209, 0, 9346, 118904, 41254, 0, 43291, 3767, 5737, 0, 4865, 0, 5740, 0, + 5736, 4368, 0, 7193, 68137, 0, 5739, 41024, 4866, 0, 73904, 0, 4869, + 120563, 0, 4223, 0, 6650, 0, 0, 0, 0, 4870, 0, 74805, 66566, 0, 120758, + 0, 0, 0, 10122, 4864, 66568, 4144, 7937, 0, 6245, 0, 2732, 66459, 745, 0, + 195097, 0, 4777, 7821, 0, 0, 42775, 0, 194954, 0, 3097, 0, 5966, 0, 4778, + 0, 10863, 0, 4781, 0, 64407, 0, 0, 8577, 0, 118964, 43285, 10216, 4782, + 0, 0, 120757, 917924, 12325, 0, 8717, 0, 0, 4776, 0, 11492, 8700, 0, + 13176, 0, 10426, 0, 917599, 10362, 0, 1715, 4849, 8242, 9561, 73922, + 43278, 42635, 0, 0, 5963, 917926, 0, 0, 4850, 0, 1607, 466, 4853, 118995, + 4854, 0, 5164, 0, 1350, 5124, 64420, 1993, 5362, 8471, 2708, 0, 12445, + 3785, 234, 3199, 0, 41268, 4848, 2530, 0, 4798, 1964, 0, 73762, 10458, 0, + 8576, 0, 0, 2704, 4794, 0, 0, 8322, 4797, 74074, 0, 2694, 4792, 0, 2439, + 65104, 0, 0, 303, 0, 0, 0, 2437, 0, 4221, 4844, 118869, 0, 0, 0, 0, 0, + 43292, 0, 2441, 10739, 65090, 0, 119327, 0, 2451, 2714, 119326, 0, 0, + 4937, 74541, 753, 5849, 10597, 43089, 11722, 9248, 0, 42879, 11725, 0, 0, + 2726, 3107, 73958, 4941, 64937, 917538, 9140, 1408, 5261, 41412, 0, 181, + 0, 4942, 9539, 4938, 0, 65201, 5259, 9369, 64185, 4142, 5257, 0, 0, 4964, + 5264, 64178, 64177, 12979, 0, 64182, 64181, 64180, 64179, 9482, 4873, + 41231, 1822, 42526, 0, 12758, 3865, 0, 0, 10500, 0, 0, 0, 0, 9830, 0, + 389, 10893, 7521, 0, 4872, 5463, 0, 3125, 9567, 0, 4878, 5459, 4874, 0, + 9557, 5465, 0, 0, 11494, 0, 9563, 10865, 74570, 43279, 64186, 0, 0, + 64191, 64190, 8898, 64188, 0, 41030, 0, 0, 917835, 0, 917834, 0, 917837, + 41031, 0, 11960, 0, 3082, 0, 0, 0, 10573, 0, 7079, 5856, 127043, 5163, + 127042, 0, 1817, 66724, 0, 0, 10564, 7763, 13077, 41813, 4400, 41745, + 64207, 10275, 8925, 10371, 10307, 41814, 4248, 0, 0, 4541, 6299, 64204, + 64203, 64201, 64200, 64199, 64198, 0, 42156, 0, 0, 64193, 64192, 0, 0, + 64197, 64196, 64195, 64194, 13282, 64175, 64174, 64173, 0, 846, 0, 0, 0, + 0, 0, 0, 2543, 12163, 3108, 9745, 64167, 64166, 64165, 64164, 41743, 0, + 64169, 64168, 64949, 10972, 10251, 10247, 42768, 715, 64161, 43299, 9453, + 5348, 10943, 120378, 0, 11352, 550, 9910, 0, 0, 66579, 11551, 0, 0, 9504, + 7187, 0, 10373, 0, 120791, 10261, 10253, 6404, 10277, 0, 11984, 1552, + 65222, 6998, 0, 0, 3128, 4789, 5067, 5066, 118849, 4784, 0, 8827, 1146, + 5065, 0, 0, 68136, 0, 0, 5064, 2431, 0, 9450, 1809, 0, 0, 0, 5062, 1264, + 64817, 13254, 11697, 0, 9785, 64716, 0, 3933, 74559, 4740, 7954, 0, 0, + 42609, 0, 74175, 0, 127016, 0, 0, 42130, 0, 5151, 917831, 917823, 0, 0, + 0, 7620, 3800, 65122, 0, 0, 8355, 7854, 0, 954, 64927, 4185, 41045, 0, + 41438, 41439, 73978, 10711, 4593, 0, 120584, 0, 64774, 13309, 10532, + 66727, 0, 0, 0, 64759, 0, 5166, 9888, 0, 5148, 42834, 0, 120634, 118946, + 64140, 0, 64131, 3119, 917814, 0, 3060, 64135, 9986, 0, 0, 636, 11698, 0, + 0, 9916, 11701, 7836, 0, 64137, 8320, 118969, 8863, 0, 119960, 1477, + 43289, 0, 74358, 8618, 0, 9908, 0, 0, 0, 3937, 12312, 0, 0, 0, 64781, + 912, 10498, 4536, 119963, 74532, 0, 6244, 0, 194580, 3935, 120665, 0, 0, + 11950, 5392, 42248, 65129, 0, 5397, 0, 12046, 12599, 0, 0, 5395, 0, 5393, + 354, 0, 119948, 0, 0, 0, 42039, 0, 0, 64142, 626, 0, 5895, 0, 0, 5780, 0, + 0, 0, 0, 0, 43297, 0, 4311, 4644, 8818, 0, 0, 0, 73818, 3918, 66452, + 3797, 1644, 119944, 9658, 4140, 11385, 65947, 6455, 9030, 813, 0, 68131, + 4146, 0, 5360, 2466, 0, 0, 0, 6249, 42117, 0, 0, 0, 0, 74046, 120583, + 4911, 988, 917809, 0, 0, 0, 7054, 64147, 0, 64920, 917812, 917803, + 118933, 120349, 0, 0, 11981, 12202, 0, 11032, 120725, 6093, 11608, 975, + 0, 65843, 170, 0, 0, 4169, 0, 41859, 6058, 120401, 0, 120657, 0, 0, 0, + 9818, 10178, 10324, 42106, 5898, 74540, 4738, 41856, 7062, 917865, 4737, + 11779, 4742, 120564, 917866, 73736, 0, 9825, 6448, 12700, 127008, 4831, + 0, 0, 0, 5300, 4741, 42108, 0, 64159, 4736, 64148, 0, 849, 0, 0, 43288, + 0, 66620, 0, 0, 65549, 9496, 64598, 0, 0, 7876, 68132, 917872, 3928, + 917870, 65283, 10706, 7198, 0, 4842, 12053, 0, 0, 4841, 0, 4171, 12008, + 6251, 3923, 1490, 0, 119591, 0, 40972, 5245, 0, 10114, 42001, 41888, + 4845, 8332, 40974, 0, 4840, 9077, 917851, 1747, 917849, 4825, 0, 917852, + 0, 0, 0, 0, 0, 0, 0, 9850, 118937, 367, 1472, 917859, 6687, 1274, 0, + 5905, 12339, 8919, 73953, 10907, 65261, 11023, 119559, 4830, 9134, 0, + 64126, 43011, 0, 0, 64101, 0, 0, 4824, 10614, 120390, 0, 1888, 1960, + 7861, 917856, 0, 41836, 43012, 6052, 6064, 54, 43009, 12214, 0, 6211, 0, + 358, 41997, 41833, 11442, 10758, 65774, 0, 120384, 64115, 120385, 0, 0, + 0, 119053, 0, 12765, 64121, 126998, 12962, 0, 0, 4017, 12827, 5241, + 120392, 0, 41118, 3924, 0, 11366, 917843, 0, 0, 917846, 41116, 917844, + 917845, 0, 11363, 12057, 11917, 1567, 74000, 4721, 0, 66202, 8957, 4139, + 0, 0, 0, 0, 0, 12740, 0, 4722, 12761, 0, 12759, 4725, 0, 4726, 0, 0, 0, + 917904, 917905, 0, 12755, 12762, 4015, 0, 8052, 476, 0, 0, 0, 64212, + 41020, 1382, 64209, 64216, 64215, 64214, 1656, 41831, 0, 0, 41843, 8720, + 3908, 1452, 13111, 0, 64067, 0, 8552, 64113, 41845, 3849, 0, 66232, 9778, + 120066, 5891, 7064, 55, 74437, 917911, 0, 0, 7935, 67586, 0, 1114, 0, + 67585, 120052, 120053, 120050, 120051, 3938, 120057, 65417, 64717, + 120060, 120061, 65415, 120059, 6292, 65303, 7955, 6452, 4713, 917887, + 66249, 917885, 917890, 917891, 65152, 719, 120044, 120045, 120042, 41944, + 4532, 65412, 120046, 10868, 4717, 2349, 5902, 66450, 4712, 917902, + 917899, 917900, 0, 8155, 4718, 3942, 4714, 9625, 0, 0, 0, 12006, 0, 0, 0, + 0, 0, 65414, 6454, 1229, 0, 66437, 66025, 917894, 0, 42500, 120508, 4809, + 9623, 917874, 917879, 917880, 917877, 917878, 65405, 68159, 917881, + 917882, 5365, 4545, 8901, 917566, 119555, 4813, 0, 0, 5925, 4808, 64330, + 0, 65475, 0, 0, 4814, 0, 4810, 0, 0, 64928, 10543, 0, 3522, 0, 414, + 65404, 0, 0, 6456, 73820, 0, 11905, 917883, 0, 0, 0, 74495, 0, 0, 0, + 118820, 9751, 65407, 0, 11770, 3919, 0, 0, 65061, 0, 0, 0, 12235, 0, 0, + 0, 66576, 0, 64080, 0, 64090, 0, 0, 10162, 10310, 0, 8454, 0, 42038, 387, + 41363, 12737, 0, 4780, 0, 0, 64310, 64621, 0, 0, 0, 0, 0, 0, 8896, 0, + 375, 6976, 0, 119005, 0, 0, 0, 119202, 119203, 12526, 43120, 2315, 0, + 1938, 119197, 0, 4529, 119200, 119201, 119198, 119199, 0, 0, 0, 13150, + 64492, 0, 0, 0, 12902, 0, 42891, 66327, 74298, 0, 10799, 0, 2587, 66372, + 0, 4193, 120334, 4241, 0, 7998, 0, 0, 0, 0, 2316, 118821, 0, 0, 0, 64297, + 74799, 0, 74140, 0, 5373, 0, 0, 3762, 10015, 0, 119232, 0, 41590, 0, 0, + 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, 0, 68138, + 13072, 1894, 0, 0, 65478, 43310, 7231, 0, 11773, 0, 0, 0, 0, 2551, 0, + 6453, 10200, 6235, 0, 0, 0, 0, 4470, 0, 0, 7780, 5369, 118958, 5249, 0, + 5367, 8756, 0, 0, 5377, 120585, 68143, 1688, 0, 0, 0, 0, 0, 0, 0, 41697, + 41319, 1300, 10650, 41692, 64505, 4668, 0, 119624, 1465, 10850, 3943, 0, + 41205, 0, 0, 0, 0, 5352, 0, 0, 8839, 41314, 0, 7785, 41204, 0, 41209, 0, + 0, 43607, 0, 0, 5420, 3897, 0, 0, 74417, 4018, 0, 68127, 0, 0, 0, 0, 0, + 2561, 0, 3542, 41915, 12076, 7951, 68152, 118857, 5303, 6276, 1706, 0, 0, + 74116, 0, 65150, 41819, 0, 73951, 10847, 41822, 9985, 860, 0, 10506, 0, + 0, 10753, 10830, 0, 615, 64490, 7574, 0, 0, 0, 12909, 43016, 64559, + 127028, 0, 0, 0, 2020, 0, 4022, 0, 0, 0, 0, 41691, 0, 0, 0, 0, 64622, + 9070, 0, 0, 3911, 42829, 43122, 1033, 0, 0, 7000, 3904, 0, 0, 0, 0, + 127012, 13123, 10846, 3450, 0, 0, 118807, 0, 42778, 10000, 41088, 449, 0, + 3777, 0, 0, 9636, 0, 10738, 0, 9367, 593, 41085, 3999, 65226, 41713, + 12764, 0, 64409, 3596, 0, 0, 9763, 120280, 120283, 12347, 124, 12981, + 41127, 120278, 0, 0, 0, 0, 10820, 0, 0, 0, 1769, 41715, 2463, 0, 0, + 12770, 0, 1538, 0, 43124, 0, 195058, 7795, 120300, 0, 4828, 1258, 0, + 2006, 0, 0, 9498, 127032, 127033, 120289, 120288, 3939, 120290, 8846, + 8943, 120287, 120286, 2650, 4491, 1961, 42602, 11525, 120292, 1959, + 120294, 0, 11774, 41016, 0, 0, 0, 1511, 9324, 0, 10519, 66331, 3454, + 19930, 0, 41019, 0, 0, 65292, 0, 12862, 0, 0, 42143, 41828, 0, 65531, 0, + 118879, 0, 0, 0, 41826, 8865, 6402, 0, 13279, 7917, 120340, 0, 7733, 0, + 4998, 0, 0, 41950, 0, 4268, 0, 0, 0, 4013, 0, 10881, 0, 0, 0, 74788, + 2014, 0, 0, 9765, 0, 0, 0, 195059, 0, 65281, 0, 10949, 0, 0, 0, 2015, 0, + 0, 0, 66318, 74824, 0, 42517, 0, 0, 0, 0, 8094, 64468, 65909, 6474, 794, + 0, 12656, 0, 119353, 0, 1665, 0, 4833, 0, 119351, 0, 0, 189, 12611, 0, 0, + 2859, 4838, 0, 4834, 0, 0, 0, 4837, 0, 770, 0, 811, 0, 41042, 0, 41318, + 64427, 0, 0, 0, 3895, 0, 74341, 3976, 0, 42859, 10193, 3116, 7747, 0, 0, + 0, 0, 0, 0, 0, 41877, 0, 2871, 64614, 0, 999, 0, 68177, 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, 0, 0, 0, 3078, 1402, 0, 0, 0, 0, 0, 394, 3088, 0, 0, 0, + 3991, 64391, 0, 0, 424, 66328, 1999, 0, 73914, 0, 0, 0, 0, 0, 8246, 0, 0, + 0, 41840, 0, 2377, 1298, 64011, 12572, 11318, 12557, 12559, 12570, 8488, + 1003, 2373, 9446, 9447, 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, 0, 9655, 0, 2004, + 9096, 9782, 0, 9172, 0, 19965, 0, 5955, 120485, 1108, 0, 74773, 0, 0, + 64782, 3926, 0, 65210, 8798, 0, 0, 1392, 0, 0, 917557, 10606, 8065, + 118805, 10353, 10417, 0, 0, 64524, 0, 4019, 0, 0, 43280, 8219, 0, 1812, + 0, 0, 0, 0, 42410, 74448, 119132, 6054, 10697, 3169, 42297, 42322, 10642, + 3909, 74461, 0, 0, 0, 0, 0, 0, 1049, 0, 65707, 11943, 41806, 0, 42336, + 3921, 0, 11775, 64760, 11766, 1038, 42303, 9823, 0, 0, 4008, 64004, 8773, + 10733, 36, 0, 5153, 41805, 0, 73735, 763, 41808, 64910, 0, 2009, 0, 0, 0, + 9640, 119951, 0, 120695, 8621, 0, 12852, 3031, 0, 64361, 0, 182, 194718, + 0, 0, 0, 0, 9058, 366, 0, 9892, 5969, 11754, 10848, 4570, 65301, 0, 4255, + 0, 10102, 41189, 4003, 41026, 68109, 13293, 41192, 0, 0, 42251, 0, 42534, + 0, 11287, 6128, 0, 11034, 10923, 64423, 0, 65506, 0, 0, 74083, 0, 66582, + 0, 0, 119955, 0, 9817, 0, 0, 0, 12117, 66586, 4183, 10540, 66250, 127044, + 127045, 0, 0, 0, 12897, 3792, 2011, 0, 6065, 43160, 0, 194715, 8692, + 41186, 41816, 41023, 41818, 41187, 11659, 7922, 12614, 2005, 8523, + 120144, 0, 7513, 1863, 4710, 0, 5956, 7621, 120274, 127116, 4705, 716, 0, + 0, 4704, 120040, 120270, 42241, 161, 0, 74546, 66214, 4706, 0, 0, 120037, + 4709, 10680, 0, 43293, 0, 0, 119164, 0, 0, 0, 1700, 119223, 0, 0, 0, + 4004, 0, 10968, 43296, 0, 8506, 0, 0, 126996, 1005, 937, 120030, 4734, + 2870, 0, 120032, 0, 7463, 4729, 0, 235, 1384, 4728, 0, 120420, 120644, 0, + 8109, 43105, 0, 4730, 447, 13186, 1513, 4733, 120415, 0, 0, 42527, 12911, + 0, 1383, 8565, 2469, 120024, 119089, 6156, 68117, 0, 7993, 4288, 120416, + 2674, 13238, 11922, 0, 120330, 3510, 13234, 0, 120407, 5605, 42095, + 11364, 0, 1380, 65617, 120320, 120261, 13196, 13197, 120309, 120682, + 9495, 119346, 0, 5959, 0, 73976, 120305, 0, 6941, 119349, 13205, 13211, + 5801, 12769, 65905, 120316, 1283, 120302, 4779, 0, 3719, 4006, 0, 19957, + 0, 2021, 119332, 0, 0, 43028, 65493, 41838, 3875, 5962, 64341, 119339, + 9814, 43571, 5827, 3314, 7787, 0, 65494, 68153, 0, 0, 120636, 64531, 0, + 0, 0, 0, 0, 65467, 5771, 41298, 0, 9742, 521, 0, 10800, 0, 8404, 194625, + 483, 7096, 7089, 66323, 928, 0, 0, 0, 10599, 11586, 3989, 10971, 0, + 65782, 9841, 8843, 12145, 0, 10074, 120816, 0, 3769, 0, 0, 0, 0, 9573, 0, + 65290, 8849, 0, 65855, 65112, 1796, 0, 0, 0, 8164, 41301, 3502, 0, 0, + 10621, 73838, 0, 5825, 13007, 68165, 0, 0, 12661, 7608, 10354, 10418, + 42411, 2022, 0, 1409, 12195, 4001, 3112, 10824, 120639, 1390, 0, 0, 421, + 43536, 5846, 120120, 4130, 0, 7595, 42588, 7600, 0, 66035, 0, 0, 65851, + 42607, 0, 0, 3168, 0, 42134, 0, 2370, 2846, 0, 0, 0, 120132, 0, 1836, 0, + 0, 119137, 3740, 0, 6290, 65374, 120451, 65923, 3944, 66628, 120434, 0, + 6135, 3118, 74265, 119093, 120446, 0, 0, 8127, 8975, 64739, 7943, 0, 0, + 10618, 2584, 0, 0, 0, 9998, 0, 0, 0, 0, 0, 6204, 0, 0, 8279, 8776, 64954, + 4975, 74809, 0, 4267, 0, 0, 0, 0, 195046, 65700, 66562, 0, 64645, 0, 0, + 0, 12586, 0, 9242, 0, 0, 4523, 5842, 10495, 3122, 0, 7793, 0, 9328, 0, 0, + 12604, 0, 6615, 0, 0, 3986, 0, 0, 8912, 64555, 0, 0, 0, 9541, 0, 0, + 11275, 8540, 11498, 0, 0, 41040, 2459, 0, 13060, 41041, 74413, 0, 0, 0, + 0, 10450, 12551, 41043, 7020, 120353, 3765, 0, 0, 1606, 120348, 120351, + 3093, 0, 0, 0, 120649, 0, 0, 4312, 74091, 120337, 120336, 11923, 4023, + 120333, 5763, 120335, 4827, 10894, 12810, 64406, 118785, 4455, 74321, + 433, 119620, 66660, 2499, 0, 0, 0, 11973, 13089, 4293, 120329, 120328, + 42758, 12196, 42837, 0, 119319, 0, 0, 5817, 0, 0, 3120, 9797, 0, 0, 0, + 10389, 0, 0, 4895, 65358, 0, 4359, 585, 0, 3509, 0, 486, 4290, 0, 0, 0, + 0, 7004, 0, 65880, 0, 119048, 2380, 11380, 0, 0, 2376, 0, 0, 0, 5197, + 127046, 127047, 127048, 2366, 127050, 127051, 127052, 0, 0, 0, 0, 0, 0, + 0, 0, 74188, 0, 0, 0, 0, 0, 0, 0, 120049, 0, 1847, 0, 10339, 0, 42384, 0, + 4227, 74158, 0, 0, 43032, 0, 42365, 0, 12671, 11384, 0, 0, 0, 64797, 0, + 5820, 0, 0, 120065, 0, 120064, 120650, 42137, 9893, 2754, 12664, 120063, + 0, 13192, 0, 41799, 65530, 1711, 12984, 43039, 3114, 6255, 0, 118938, 0, + 10853, 926, 0, 74184, 0, 120055, 0, 43175, 0, 43037, 41798, 41035, 11583, + 0, 41801, 119088, 0, 520, 4200, 12699, 8331, 0, 3091, 41034, 0, 0, 8360, + 0, 0, 321, 4229, 64543, 0, 65563, 0, 0, 2861, 0, 10095, 0, 0, 0, 1861, 0, + 0, 0, 0, 43041, 0, 0, 0, 3859, 12181, 41660, 8209, 0, 120678, 12973, 0, + 74757, 0, 41658, 0, 0, 5760, 0, 743, 4414, 120766, 0, 42632, 917973, + 65161, 73896, 0, 0, 1405, 119063, 43220, 43341, 0, 19919, 0, 64532, + 65367, 0, 0, 0, 3513, 0, 118883, 43342, 119064, 65529, 65364, 0, 0, 6485, + 1397, 0, 65365, 0, 0, 0, 0, 0, 7471, 12079, 0, 12682, 43287, 0, 0, 0, 0, + 0, 0, 1099, 10490, 0, 10501, 65181, 74463, 0, 464, 41624, 119594, 0, 0, + 1346, 0, 917631, 64724, 64897, 423, 1818, 65144, 0, 8272, 0, 0, 4218, + 3087, 64960, 0, 43564, 0, 0, 9584, 10465, 0, 74359, 12626, 9106, 0, + 42642, 0, 64750, 9390, 0, 41797, 0, 0, 265, 41795, 64666, 0, 43530, 2752, + 0, 0, 0, 59, 0, 0, 0, 0, 0, 41810, 0, 7010, 0, 41809, 41495, 119364, 0, + 42252, 0, 8009, 3305, 43033, 511, 119320, 66255, 13127, 120067, 0, 0, 0, + 917977, 65915, 1400, 41812, 10685, 194870, 41211, 10387, 4453, 43276, + 917783, 13159, 0, 6481, 41213, 0, 0, 0, 0, 41983, 74198, 6617, 9116, 0, + 0, 462, 68110, 10493, 0, 8129, 0, 0, 74471, 6644, 11658, 0, 0, 3452, + 11906, 9581, 1385, 3098, 0, 119013, 43340, 0, 41033, 6493, 42626, 0, 0, + 11426, 0, 1681, 118789, 1204, 3755, 64661, 7235, 10170, 3966, 8911, 0, + 41841, 43338, 0, 0, 5726, 64915, 42175, 0, 0, 41497, 65044, 0, 2851, + 43017, 0, 0, 4373, 0, 0, 9587, 1789, 6671, 0, 3100, 0, 65360, 0, 0, 0, + 64922, 0, 8190, 12083, 0, 0, 6506, 64312, 74374, 2368, 0, 4419, 0, 0, + 3439, 1825, 1192, 120106, 8891, 3080, 120228, 2347, 5430, 0, 8990, 2848, + 0, 0, 0, 249, 0, 0, 0, 120658, 0, 0, 8883, 917802, 728, 68178, 995, 0, 0, + 64826, 0, 917798, 0, 0, 19945, 8091, 558, 0, 12273, 0, 0, 12112, 0, 0, 0, + 74419, 12335, 120104, 917795, 3443, 3129, 0, 12913, 65445, 0, 64891, 0, + 7725, 0, 0, 0, 8624, 0, 12446, 43295, 0, 41894, 0, 6277, 41672, 41893, + 10010, 0, 3540, 0, 835, 0, 0, 119868, 74408, 0, 73959, 5426, 4258, 0, 0, + 5424, 0, 8283, 0, 5434, 0, 0, 19917, 11408, 0, 11947, 0, 1404, 3095, + 11432, 0, 3464, 6486, 4819, 0, 0, 570, 8095, 3672, 119864, 1498, 0, 0, 0, + 431, 0, 0, 0, 0, 68167, 0, 13096, 0, 0, 0, 9516, 0, 5268, 0, 0, 0, 4450, + 120723, 11547, 64358, 0, 356, 3477, 227, 10488, 0, 382, 11418, 0, 0, 0, + 0, 0, 0, 6484, 2541, 66039, 0, 0, 0, 3549, 0, 9110, 119665, 2743, 0, + 43290, 194812, 9097, 0, 43015, 8782, 0, 776, 2524, 0, 8573, 0, 0, 0, 0, + 120572, 64944, 8952, 3856, 118818, 0, 5872, 6495, 0, 0, 0, 0, 0, 120733, + 12849, 3953, 1897, 0, 0, 11994, 4339, 74556, 0, 67843, 0, 0, 0, 74251, 0, + 5228, 0, 7868, 43184, 0, 0, 73986, 0, 0, 43022, 0, 1162, 0, 2671, 0, 0, + 0, 0, 118865, 4553, 73811, 0, 195005, 0, 0, 19921, 74331, 11424, 0, 4567, + 41891, 0, 0, 119056, 4820, 65239, 194662, 0, 0, 43042, 119212, 1377, 0, + 4897, 42821, 9250, 0, 4438, 64385, 0, 1753, 11331, 6147, 0, 43282, 8833, + 0, 0, 6504, 194667, 126979, 10719, 0, 1898, 1413, 42443, 0, 802, 12141, + 0, 0, 6648, 10671, 2528, 0, 64789, 9169, 838, 127092, 120697, 844, 5014, + 0, 256, 0, 9990, 0, 43301, 0, 7542, 65464, 9726, 0, 6489, 10048, 74326, + 0, 66573, 0, 0, 0, 11761, 194655, 0, 41094, 0, 0, 0, 0, 0, 6196, 6945, + 194628, 194890, 194631, 120491, 11816, 194943, 5733, 0, 0, 0, 41098, 0, + 41093, 0, 66626, 588, 9760, 0, 194717, 1238, 200, 0, 1660, 73916, 0, + 118905, 74362, 0, 0, 194651, 0, 0, 3394, 0, 120668, 0, 0, 0, 66219, 0, + 43284, 0, 7817, 1841, 11055, 120533, 194979, 194982, 1669, 10776, 194981, + 7701, 194980, 0, 194995, 1732, 4030, 0, 3963, 66611, 0, 41768, 6491, 0, + 65324, 914, 65323, 8071, 3538, 0, 0, 0, 0, 74367, 7614, 0, 11819, 0, + 12009, 12399, 0, 67852, 65537, 0, 10841, 0, 5301, 0, 0, 5734, 8960, 0, 0, + 65317, 0, 0, 0, 0, 12304, 0, 0, 65315, 0, 0, 0, 0, 0, 119621, 0, 74536, + 12447, 64486, 0, 0, 0, 0, 0, 0, 42767, 10915, 0, 12007, 0, 120520, 0, + 194878, 0, 0, 0, 8629, 0, 43168, 41872, 0, 4496, 0, 0, 0, 0, 0, 0, 0, + 64730, 0, 66714, 0, 0, 0, 65596, 0, 11416, 4280, 119018, 8765, 12784, + 7792, 1393, 0, 67871, 74386, 0, 8233, 43572, 0, 6683, 0, 3442, 12144, + 2841, 12543, 0, 1473, 42820, 64329, 917772, 0, 0, 6488, 357, 1048, 41100, + 0, 41104, 0, 41099, 1054, 119065, 1040, 65450, 0, 4434, 1069, 0, 0, + 74231, 917765, 0, 0, 0, 9693, 41943, 0, 41931, 41759, 12757, 4353, 0, + 1059, 9790, 8995, 0, 0, 65937, 0, 41764, 10646, 0, 118833, 0, 0, 74830, + 0, 12743, 0, 6480, 917761, 41779, 42580, 66601, 12207, 119619, 10986, + 66602, 11312, 64807, 0, 0, 41767, 0, 0, 43020, 0, 3955, 74254, 0, 0, + 917861, 0, 120735, 9770, 9246, 12230, 0, 0, 0, 10448, 41783, 41786, + 127093, 12797, 2755, 64571, 194912, 194927, 4857, 0, 4428, 12794, 73755, + 0, 0, 0, 0, 0, 5747, 194720, 0, 7978, 41092, 74571, 0, 11924, 74205, + 42144, 65015, 0, 563, 0, 0, 12798, 11271, 57, 0, 0, 0, 119043, 0, 0, + 43137, 694, 0, 9876, 0, 119168, 0, 0, 64537, 0, 277, 74385, 7229, 74459, + 0, 0, 64634, 64811, 8757, 119087, 0, 1574, 194633, 0, 2525, 4852, 5749, + 0, 13027, 42824, 120574, 1039, 9801, 10155, 5745, 188, 41858, 11592, 0, + 74015, 0, 41853, 4858, 0, 0, 436, 4771, 0, 2786, 0, 4856, 8051, 0, + 119609, 0, 9644, 0, 0, 0, 194916, 120732, 66710, 118834, 0, 73906, 0, + 127114, 0, 10234, 5843, 11939, 0, 42157, 0, 3157, 194918, 0, 0, 3504, + 119178, 0, 10822, 5149, 66029, 10226, 65142, 0, 3594, 42424, 0, 40, 12657, 0, 0, 386, 0, 8834, 0, 12815, 43574, 0, 73907, 0, 74196, 7220, - 74504, 0, 74316, 0, 77932, 4304, 74503, 8160, 78707, 194753, 0, 0, 0, - 1348, 0, 78597, 0, 13303, 0, 0, 194755, 7599, 1278, 43616, 13269, 0, 0, - 74387, 78179, 78598, 74492, 6097, 7568, 8780, 4982, 0, 74501, 194763, - 78592, 194762, 2672, 3735, 194735, 13138, 42266, 9484, 10724, 41202, - 119024, 0, 43742, 0, 9487, 119959, 119117, 3842, 195034, 78668, 12442, - 6193, 9791, 0, 0, 42516, 7228, 7559, 74803, 78468, 194851, 11399, 119219, - 194691, 194855, 194690, 194857, 3604, 0, 119188, 0, 78540, 78541, 42507, - 1962, 78490, 78476, 42505, 11660, 0, 2072, 0, 6995, 74173, 5437, 74174, - 10669, 8702, 7964, 194706, 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, 0, 0, 195024, 10196, 7886, 0, 6585, - 0, 6680, 195042, 0, 195051, 6679, 74412, 0, 194866, 74421, 11382, 0, 0, - 0, 0, 194833, 194832, 6681, 194834, 12693, 194836, 42727, 194838, 194841, - 78195, 65442, 119610, 78199, 12166, 43248, 66248, 194816, 0, 194818, - 194817, 194820, 194819, 5297, 7042, 13284, 6112, 7968, 194825, 73927, - 194738, 194736, 65746, 0, 74409, 74389, 194826, 4342, 42839, 194831, - 1677, 0, 0, 194806, 917855, 11091, 11011, 2719, 0, 0, 119595, 64495, 0, - 0, 7585, 65169, 2052, 4308, 917858, 74177, 7505, 543, 64916, 64736, 0, 0, - 64655, 0, 118922, 2064, 0, 43158, 7902, 0, 65265, 194639, 0, 0, 0, 0, 0, + 74504, 0, 74316, 0, 0, 4304, 74503, 8160, 0, 194753, 0, 0, 0, 1348, 0, 0, + 0, 13303, 0, 0, 194755, 7599, 1278, 0, 13269, 0, 0, 74387, 0, 0, 74492, + 6097, 7568, 8780, 4982, 0, 74501, 194763, 0, 194762, 2672, 3735, 194735, + 13138, 42266, 9484, 10724, 41202, 119024, 0, 0, 0, 9487, 0, 194765, 3842, + 195034, 195056, 12442, 6193, 9791, 0, 0, 42516, 7228, 7559, 74803, + 194689, 194851, 11399, 119219, 194856, 194855, 0, 194857, 3604, 0, 0, 0, + 0, 0, 42507, 1962, 194861, 194696, 42505, 11660, 0, 0, 0, 6995, 74173, + 5437, 74174, 10669, 8702, 7964, 194706, 0, 199, 194843, 4105, 194845, + 194701, 194847, 194710, 119875, 13148, 7560, 0, 9226, 0, 195070, 6472, + 65814, 73954, 0, 4724, 0, 0, 9191, 0, 0, 0, 0, 195024, 10196, 7886, 0, + 6585, 0, 6680, 195042, 0, 195051, 6679, 74412, 0, 194866, 74421, 11382, + 0, 0, 0, 0, 194833, 194832, 6681, 194834, 12693, 194836, 194839, 194838, + 194841, 194840, 65442, 119610, 118887, 12166, 74415, 66248, 194816, 0, + 194818, 194817, 194820, 194819, 5297, 7042, 13284, 6112, 7968, 194825, + 73929, 194738, 194736, 65746, 0, 74409, 74389, 194826, 4342, 42839, + 194831, 1677, 0, 0, 0, 917855, 11091, 11011, 2719, 0, 0, 0, 64495, 0, 0, + 7585, 65169, 42845, 4308, 917858, 74177, 7505, 543, 64916, 64736, 0, 0, + 66670, 0, 118922, 19911, 0, 43158, 7902, 0, 65265, 194639, 0, 0, 0, 0, 0, 0, 12994, 0, 10828, 0, 6228, 4307, 3482, 0, 0, 0, 0, 506, 74573, 41194, - 65735, 2055, 43255, 41195, 0, 8169, 0, 8841, 0, 516, 0, 2063, 119051, 34, - 0, 120186, 11504, 1612, 74333, 120182, 74520, 74308, 12001, 120178, - 10242, 64564, 120179, 120174, 6584, 7749, 11037, 0, 1758, 0, 10667, - 10560, 120197, 120756, 1935, 11517, 120193, 120196, 120195, 1931, 120189, - 74839, 120191, 1217, 64702, 12643, 825, 0, 194905, 12294, 127261, 78834, - 9138, 78831, 78833, 12631, 78829, 11080, 74554, 0, 5591, 1239, 0, 11313, - 0, 3403, 0, 0, 64364, 0, 0, 74582, 8998, 12988, 0, 9152, 0, 0, 194898, - 67589, 41850, 64290, 3433, 0, 12615, 1594, 42192, 6914, 67603, 0, 119569, + 65735, 0, 0, 41195, 0, 8169, 0, 8841, 0, 516, 0, 41197, 119051, 34, 0, + 120186, 120185, 1612, 74333, 120182, 120181, 74308, 12001, 120178, 10242, + 64564, 120179, 120174, 6584, 7749, 11037, 0, 1758, 0, 10667, 10560, + 120197, 120756, 1935, 11517, 120193, 120196, 120195, 1931, 120189, 74839, + 120191, 1217, 64702, 12643, 825, 0, 194905, 12294, 0, 194908, 9138, + 194910, 194902, 12631, 194911, 11080, 74554, 0, 5591, 1239, 0, 11313, 0, + 3403, 0, 0, 64364, 0, 0, 74582, 8998, 12988, 0, 9152, 0, 0, 194898, + 67589, 41850, 64290, 3433, 0, 12615, 1594, 65607, 6914, 67603, 0, 119569, 74565, 41353, 67602, 67611, 4337, 0, 194897, 918, 65035, 41351, 7681, - 194900, 42577, 41393, 12668, 194904, 2477, 0, 0, 127302, 0, 67604, - 194880, 127235, 573, 194881, 194884, 11417, 194886, 194885, 194888, - 67599, 0, 194889, 67607, 11482, 0, 0, 3357, 0, 42223, 4207, 1288, 78842, - 78839, 68419, 78837, 11589, 42195, 194872, 917627, 127263, 64602, 67618, - 0, 0, 42788, 68416, 64480, 194875, 8423, 3348, 448, 68476, 9717, 0, 0, - 997, 0, 0, 0, 0, 11440, 11379, 42000, 13139, 42221, 65013, 126999, 0, - 73796, 0, 119228, 12035, 0, 2818, 0, 0, 73793, 0, 4172, 0, 0, 8373, - 10873, 12197, 0, 0, 0, 0, 0, 78210, 0, 0, 194865, 126982, 74563, 64828, - 11419, 194868, 766, 1257, 0, 118845, 11381, 3265, 66617, 3274, 0, 0, 0, - 0, 119092, 41989, 0, 0, 0, 3263, 0, 65672, 0, 3270, 64539, 11489, 0, 0, - 0, 0, 9505, 65518, 194776, 756, 195052, 0, 0, 0, 7261, 0, 186, 0, 119156, - 5770, 13179, 65830, 12612, 12949, 64856, 12800, 0, 74203, 64718, 0, 0, 0, - 118929, 0, 11578, 0, 119296, 0, 0, 0, 0, 74568, 9254, 0, 1794, 120217, - 64521, 5624, 120220, 120221, 119958, 120223, 3617, 66636, 64886, 120211, - 120212, 120213, 120214, 1872, 66508, 120467, 41079, 10748, 5502, 119330, - 4452, 0, 0, 917879, 4511, 0, 0, 64678, 11425, 0, 43245, 1231, 0, 0, 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, 66464, 10756, 0, 42606, 64045, 64044, 43979, 10076, 64040, - 43060, 0, 1034, 3392, 0, 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, + 194900, 42577, 41393, 12668, 194904, 2477, 0, 0, 0, 0, 67604, 194880, 0, + 573, 194881, 194884, 11417, 194886, 194885, 194888, 67599, 0, 194889, + 67607, 11482, 0, 0, 3357, 0, 194891, 4207, 1288, 194892, 194895, 194894, + 0, 11589, 66354, 194872, 0, 0, 64602, 194670, 0, 0, 42788, 0, 64480, + 194875, 8423, 3348, 448, 194879, 9717, 0, 0, 997, 0, 0, 0, 0, 11440, + 11379, 42000, 13139, 0, 65013, 126999, 0, 73796, 0, 0, 12035, 0, 2818, 0, + 0, 73793, 0, 4172, 0, 0, 8373, 10873, 12197, 0, 0, 0, 0, 0, 126977, 0, 0, + 194865, 126982, 74563, 64828, 11419, 194868, 766, 1257, 0, 0, 11381, + 3265, 66617, 3274, 0, 0, 0, 0, 0, 41989, 0, 0, 0, 3263, 0, 65672, 0, + 3270, 64539, 11489, 0, 0, 0, 0, 9505, 65518, 0, 756, 195052, 0, 0, 0, + 7261, 0, 186, 0, 119156, 5770, 13179, 65830, 12612, 12949, 64856, 12800, + 0, 74203, 64718, 0, 0, 0, 118929, 0, 11578, 0, 119296, 0, 0, 0, 0, 74568, + 9254, 0, 1794, 120217, 64521, 5624, 120220, 120221, 119958, 120223, 3617, + 66636, 64886, 120211, 120212, 120213, 120214, 1872, 66508, 120467, 41079, + 10748, 5502, 119330, 4452, 0, 0, 0, 4511, 0, 0, 0, 11425, 0, 0, 1231, 0, + 0, 0, 9003, 8192, 0, 5305, 9653, 10616, 8694, 9546, 0, 0, 120478, 120200, + 65205, 120202, 64063, 9878, 74780, 119626, 120207, 64058, 8799, 42131, 0, + 64062, 1028, 64060, 64059, 837, 10567, 0, 43103, 0, 0, 11427, 2902, + 64043, 64042, 66464, 10756, 0, 42606, 64045, 64044, 0, 10076, 64040, + 64039, 0, 1034, 3392, 0, 43091, 64033, 64032, 65468, 64038, 64037, 64036, + 64035, 4291, 194928, 64015, 64014, 64681, 194930, 0, 194944, 0, 43090, 0, + 3476, 8973, 64012, 42473, 64010, 64008, 64007, 2003, 7706, 64517, 119183, 2538, 64009, 204, 0, 4802, 4111, 8239, 9098, 4805, 64001, 64057, 7885, 7247, 64054, 0, 0, 4767, 9343, 64049, 64048, 120034, 1133, 64053, 64052, - 43453, 64050, 41340, 118975, 0, 10005, 12329, 41333, 0, 8489, 1942, 0, 0, - 42520, 0, 0, 0, 10760, 64023, 64022, 64021, 6582, 43670, 0, 64025, 9167, - 42151, 78244, 0, 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, 0, 68218, 55274, 2008, 64031, 64030, 294, - 41874, 0, 126991, 65929, 0, 0, 0, 0, 64028, 8146, 64026, 41788, 194844, - 0, 118795, 6343, 43247, 119888, 0, 119886, 119891, 119892, 119889, 11433, - 119895, 119896, 0, 7801, 65578, 194839, 12915, 43968, 3297, 9699, 194955, - 1135, 0, 0, 0, 1995, 6722, 0, 0, 2552, 41546, 60, 68394, 8649, 41549, - 78496, 0, 0, 6682, 0, 78679, 64710, 41547, 0, 2013, 0, 78530, 78532, - 78528, 78529, 12832, 78493, 8081, 8362, 3537, 119908, 9137, 119906, 8999, - 0, 78533, 3466, 0, 0, 1996, 0, 3453, 6282, 0, 2002, 2000, 120175, 537, 0, - 4179, 65119, 1998, 0, 1842, 0, 0, 9628, 68446, 12081, 9826, 64502, 1767, - 0, 0, 0, 120201, 0, 0, 0, 3059, 44024, 120204, 119953, 120205, 0, 0, 0, - 4100, 920, 1811, 1355, 0, 0, 3592, 10078, 0, 0, 0, 8592, 65870, 68164, 0, + 64051, 64050, 41340, 0, 0, 10005, 12329, 41333, 0, 8489, 1942, 0, 0, + 42520, 0, 0, 0, 10760, 64023, 64022, 64021, 6582, 0, 0, 64025, 9167, + 42151, 0, 0, 2026, 64019, 64018, 64017, 64016, 12768, 0, 7582, 0, 118915, + 0, 0, 0, 0, 120539, 0, 41411, 13094, 0, 7532, 41414, 0, 3179, 0, 64769, + 0, 0, 11461, 74454, 10751, 9051, 0, 0, 10535, 0, 0, 0, 2008, 64031, + 64030, 294, 41874, 0, 126991, 65929, 0, 0, 0, 0, 64028, 8146, 64026, + 41788, 194844, 0, 118795, 0, 119887, 119888, 0, 119886, 119891, 119892, + 119889, 11433, 119895, 119896, 0, 7801, 65578, 0, 12915, 0, 3297, 9699, + 0, 1135, 0, 0, 0, 1995, 7927, 0, 0, 2552, 41546, 60, 0, 8649, 41549, 0, + 0, 0, 6682, 0, 0, 64710, 41547, 0, 2013, 0, 119899, 119900, 119897, + 119898, 12832, 119904, 8081, 8362, 3537, 119908, 9137, 119906, 8999, 0, + 119909, 3466, 0, 0, 1996, 0, 3453, 6282, 0, 2002, 2000, 120175, 537, 0, + 4179, 65119, 1998, 0, 1842, 0, 0, 9628, 0, 12081, 9826, 64502, 1767, 0, + 0, 0, 120201, 0, 0, 0, 3059, 0, 120204, 119953, 120205, 0, 0, 0, 4100, + 920, 1811, 1355, 0, 0, 3592, 10078, 0, 0, 0, 8592, 65870, 68164, 0, 10742, 0, 0, 1994, 9281, 3296, 12865, 1997, 1895, }; Modified: python/branches/py3k/Objects/unicodetype_db.h ============================================================================== --- python/branches/py3k/Objects/unicodetype_db.h (original) +++ python/branches/py3k/Objects/unicodetype_db.h Fri Mar 19 02:17:46 2010 @@ -64,13 +64,11 @@ {0, 10795, 0, 0, 0, 1921}, {0, 65373, 0, 0, 0, 1921}, {0, 10792, 0, 0, 0, 1921}, - {10815, 0, 10815, 0, 0, 1801}, {0, 65341, 0, 0, 0, 1921}, {0, 69, 0, 0, 0, 1921}, {0, 71, 0, 0, 0, 1921}, {10783, 0, 10783, 0, 0, 1801}, {10780, 0, 10780, 0, 0, 1801}, - {10782, 0, 10782, 0, 0, 1801}, {65326, 0, 65326, 0, 0, 1801}, {65330, 0, 65330, 0, 0, 1801}, {65331, 0, 65331, 0, 0, 1801}, @@ -177,8 +175,6 @@ {0, 54756, 0, 0, 0, 1921}, {0, 54787, 0, 0, 0, 1921}, {0, 54753, 0, 0, 0, 1921}, - {0, 54754, 0, 0, 0, 1921}, - {0, 54721, 0, 0, 0, 1921}, {58272, 0, 58272, 0, 0, 1801}, {0, 0, 0, 0, 0, 5889}, {42877, 7545, 42877, 0, 0, 3969}, @@ -189,508 +185,508 @@ /* type indexes */ #define SHIFT 7 static unsigned char index1[] = { - 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, 34, 35, 36, 37, - 38, 39, 34, 34, 34, 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, 64, 64, 65, 66, 67, 64, - 64, 64, 68, 69, 70, 64, 64, 64, 64, 64, 64, 71, 17, 72, 73, 74, 75, 76, - 77, 64, 78, 79, 80, 81, 82, 83, 84, 64, 64, 85, 86, 34, 34, 34, 34, 34, - 34, 87, 34, 34, 34, 34, 34, 88, 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, 89, 90, 91, 92, 34, 34, 34, 93, 34, 34, - 34, 94, 95, 34, 34, 34, 34, 34, 96, 34, 34, 34, 97, 34, 34, 34, 34, 34, - 34, 34, 34, 34, 34, 98, 99, 100, 34, 34, 34, 34, 34, 34, 101, 102, 34, - 34, 34, 34, 34, 34, 34, 34, 103, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, - 34, 34, 34, 34, 104, 34, 34, 34, 34, 34, 34, 34, 34, 105, 34, 34, 34, 34, - 101, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, - 34, 34, 34, 104, 34, 34, 34, 34, 34, 34, 106, 34, 34, 34, 34, 34, 34, 34, - 34, 34, 34, 34, 34, 34, 34, 34, 34, 107, 108, 34, 34, 34, 34, 34, 34, 34, - 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 109, 110, 34, 34, 34, 34, 34, 34, - 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 111, 34, 34, 34, 34, 34, 34, - 34, 34, 34, 112, 34, 34, 113, 114, 115, 116, 117, 118, 119, 120, 121, - 122, 17, 123, 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, - 124, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 126, 127, 128, - 129, 130, 131, 132, 34, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, - 17, 143, 144, 145, 146, 147, 17, 17, 17, 17, 17, 17, 148, 17, 149, 17, - 150, 17, 151, 17, 152, 17, 17, 17, 153, 17, 17, 17, 17, 154, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 34, 34, 34, 34, 34, 34, 155, 17, 156, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 34, 34, 34, 34, 34, 34, 34, 34, 157, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 64, 158, 159, 160, 161, 17, 162, 17, 163, 164, 165, 166, 167, 168, - 169, 170, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 171, 172, 173, - 174, 175, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 176, 177, 178, 34, 34, 34, - 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 87, 179, 34, 180, 181, - 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, 182, 34, 34, 34, 34, 34, - 34, 34, 34, 34, 34, 34, 183, 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, 184, 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, 185, 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, 186, 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, 187, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 34, 182, 34, 34, 188, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 189, 17, 190, 191, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 192, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 192, + 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 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, 40, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 16, 50, 51, 52, + 16, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 63, 63, 64, 65, 66, 63, + 63, 63, 67, 68, 69, 63, 63, 63, 63, 63, 63, 70, 16, 71, 72, 73, 74, 75, + 76, 63, 77, 78, 79, 80, 81, 82, 83, 63, 63, 84, 85, 40, 40, 40, 40, 40, + 40, 86, 40, 40, 40, 40, 40, 87, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, + 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, + 40, 40, 40, 40, 40, 40, 40, 40, 88, 89, 90, 91, 40, 40, 40, 92, 40, 40, + 40, 93, 94, 40, 40, 40, 40, 40, 95, 40, 40, 40, 96, 40, 40, 40, 40, 40, + 40, 40, 40, 40, 40, 97, 98, 99, 40, 40, 40, 40, 40, 40, 100, 101, 40, 40, + 40, 40, 40, 40, 40, 40, 102, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, + 40, 40, 40, 103, 40, 40, 40, 40, 40, 40, 40, 40, 104, 40, 40, 40, 40, + 100, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, + 40, 40, 40, 103, 40, 40, 40, 40, 40, 40, 105, 40, 40, 40, 40, 40, 40, 40, + 40, 40, 40, 40, 40, 40, 40, 40, 40, 106, 107, 40, 40, 40, 40, 40, 40, 40, + 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 108, 109, 40, 40, 40, 40, 40, 40, + 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 110, 40, 40, 40, 40, 40, 40, + 40, 40, 40, 111, 40, 40, 112, 113, 114, 115, 116, 117, 118, 16, 119, 16, + 16, 16, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, + 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, + 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, + 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, + 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 120, + 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, + 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, + 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, + 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, 123, 124, 125, + 126, 127, 128, 40, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 16, + 139, 140, 141, 142, 143, 16, 16, 16, 16, 16, 16, 144, 16, 145, 16, 146, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 40, 40, 40, 40, 40, 40, 147, 16, 148, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 63, + 149, 150, 151, 152, 16, 153, 16, 154, 155, 156, 157, 158, 159, 160, 161, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 162, 163, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 164, 165, 166, 40, 40, 40, 40, 40, 40, + 40, 40, 40, 40, 40, 40, 40, 40, 40, 86, 167, 40, 168, 169, 40, 40, 40, + 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, + 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, + 40, 40, 40, 40, 40, 40, 40, 40, 40, 170, 40, 40, 40, 40, 40, 40, 40, 40, + 40, 40, 40, 171, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, + 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, + 40, 40, 172, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, + 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, + 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, + 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, + 40, 40, 40, 40, 40, 40, 40, 40, 173, 40, 40, 40, 40, 40, 40, 40, 40, 40, + 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, + 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, + 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, + 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, + 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, + 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, + 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, + 40, 174, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 40, 170, 40, 40, 175, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 176, 16, + 177, 178, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, + 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, + 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, + 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, + 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, + 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, + 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, + 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, + 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, + 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, + 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, + 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, + 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, + 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, + 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, + 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, + 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, + 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, + 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, + 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, + 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, + 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, + 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, + 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, + 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, + 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, + 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, + 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, + 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, + 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, + 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, + 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, + 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, + 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, + 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, + 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, + 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 179, 121, 121, + 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, + 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, + 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, + 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, + 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, + 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, + 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, + 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, + 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, + 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, + 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, + 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, + 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, + 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, + 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, + 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, + 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, + 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, + 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, + 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, + 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, + 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, + 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, + 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, + 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, + 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, + 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, + 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, + 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, + 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, + 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, + 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, + 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, + 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, + 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, + 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, + 121, 121, 121, 121, 121, 179, }; static unsigned char index2[] = { @@ -724,11 +720,11 @@ 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 58, 19, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 19, 19, 19, 19, 19, 19, 59, 26, - 27, 60, 61, 62, 62, 26, 27, 63, 64, 65, 26, 27, 26, 27, 26, 27, 26, 27, - 26, 27, 66, 67, 68, 69, 70, 19, 71, 71, 19, 72, 19, 73, 19, 19, 19, 19, - 71, 19, 19, 74, 19, 19, 19, 19, 75, 76, 19, 77, 19, 19, 19, 76, 19, 78, - 79, 19, 19, 80, 19, 19, 19, 19, 19, 19, 19, 81, 19, 19, 82, 19, 19, 82, - 19, 19, 19, 19, 82, 83, 84, 84, 85, 19, 19, 19, 19, 19, 86, 19, 50, 19, + 27, 60, 61, 19, 19, 26, 27, 62, 63, 64, 26, 27, 26, 27, 26, 27, 26, 27, + 26, 27, 65, 66, 19, 67, 68, 19, 69, 69, 19, 70, 19, 71, 19, 19, 19, 19, + 69, 19, 19, 72, 19, 19, 19, 19, 73, 74, 19, 75, 19, 19, 19, 74, 19, 76, + 77, 19, 19, 78, 19, 19, 19, 19, 19, 19, 19, 79, 19, 19, 80, 19, 19, 80, + 19, 19, 19, 19, 80, 81, 82, 82, 83, 19, 19, 19, 19, 19, 84, 19, 50, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 5, 5, 5, 5, 50, 50, 50, 50, 50, 50, 50, @@ -738,40 +734,40 @@ 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 87, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 85, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 26, 27, 26, 27, 50, 5, 26, 27, 0, 0, 88, - 45, 45, 45, 5, 0, 0, 0, 0, 0, 5, 5, 89, 17, 90, 90, 90, 0, 91, 0, 92, 92, + 17, 17, 17, 17, 17, 17, 17, 17, 26, 27, 26, 27, 50, 5, 26, 27, 0, 0, 86, + 45, 45, 45, 5, 0, 0, 0, 0, 0, 5, 5, 87, 17, 88, 88, 88, 0, 89, 0, 90, 90, 19, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 0, 16, 16, 16, 16, 16, 16, 16, 16, 16, 93, 94, 94, 94, 19, 18, 18, 18, - 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 95, 18, 18, 18, - 18, 18, 18, 18, 18, 18, 96, 97, 97, 98, 99, 100, 101, 101, 101, 102, 103, - 104, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, - 27, 26, 27, 26, 27, 26, 27, 105, 106, 107, 19, 108, 109, 5, 26, 27, 110, - 26, 27, 19, 58, 58, 58, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, - 111, 111, 111, 111, 111, 111, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 0, 16, 16, 16, 16, 16, 16, 16, 16, 16, 91, 92, 92, 92, 19, 18, 18, 18, + 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 93, 18, 18, 18, + 18, 18, 18, 18, 18, 18, 94, 95, 95, 96, 97, 98, 99, 99, 99, 100, 101, + 102, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, + 27, 26, 27, 26, 27, 26, 27, 103, 104, 105, 19, 106, 107, 5, 26, 27, 108, + 26, 27, 19, 58, 58, 58, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, + 109, 109, 109, 109, 109, 109, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, - 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 106, - 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, - 106, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, + 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 104, + 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, + 104, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 5, 17, 17, 17, 17, 17, 5, 5, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, - 26, 27, 26, 27, 26, 27, 112, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, - 27, 26, 27, 113, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, + 26, 27, 26, 27, 26, 27, 110, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, + 27, 26, 27, 111, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, - 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 114, 114, 114, 114, 114, 114, 114, 114, - 114, 114, 114, 114, 114, 114, 114, 114, 114, 114, 114, 114, 114, 114, - 114, 114, 114, 114, 114, 114, 114, 114, 114, 114, 114, 114, 114, 114, - 114, 114, 0, 0, 50, 5, 5, 5, 5, 5, 5, 0, 115, 115, 115, 115, 115, 115, - 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, - 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, - 115, 115, 115, 115, 19, 0, 5, 5, 0, 0, 0, 0, 0, 0, 17, 17, 17, 17, 17, + 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 112, 112, 112, 112, 112, 112, 112, 112, + 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, + 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, + 112, 112, 0, 0, 50, 5, 5, 5, 5, 5, 5, 0, 113, 113, 113, 113, 113, 113, + 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, + 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, + 113, 113, 113, 113, 19, 0, 5, 5, 0, 0, 0, 0, 0, 0, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 5, 17, 5, 17, 17, 5, 17, 17, 5, 17, 0, 0, 0, 0, 0, 0, 0, @@ -804,35 +800,29 @@ 0, 0, 0, 0, 0, 0, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 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, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 50, 50, 5, 5, 5, 5, 50, 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, 17, 17, 17, - 17, 50, 17, 17, 17, 17, 17, 17, 17, 17, 17, 50, 17, 17, 17, 50, 17, 17, - 17, 17, 17, 0, 0, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 0, 0, 0, + 17, 50, 50, 5, 5, 5, 5, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 17, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 17, 17, 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, 50, 50, 50, 50, 50, 50, 50, 0, 0, 17, 50, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 0, 50, 17, 17, 17, 17, 17, 0, 0, 50, 50, 50, 50, 50, 50, + 17, 17, 17, 0, 0, 50, 17, 17, 17, 17, 0, 0, 0, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 17, 17, 5, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 5, 50, - 50, 0, 0, 0, 0, 0, 0, 50, 50, 50, 50, 50, 50, 50, 0, 17, 17, 17, 0, 50, - 50, 50, 50, 50, 50, 50, 50, 0, 0, 50, 50, 0, 0, 50, 50, 50, 50, 50, 50, - 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 0, 50, - 50, 50, 50, 50, 50, 50, 0, 50, 0, 0, 0, 50, 50, 50, 50, 0, 0, 17, 50, 17, - 17, 17, 17, 17, 17, 17, 0, 0, 17, 17, 0, 0, 17, 17, 17, 50, 0, 0, 0, 0, - 0, 0, 0, 0, 17, 0, 0, 0, 0, 50, 50, 0, 50, 50, 50, 17, 17, 0, 0, 6, 7, 8, - 9, 10, 11, 12, 13, 14, 15, 50, 50, 5, 5, 24, 24, 24, 24, 24, 24, 5, 5, 0, - 0, 0, 0, 0, 17, 17, 17, 0, 50, 50, 50, 50, 50, 50, 0, 0, 0, 0, 50, 50, 0, - 0, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, - 50, 50, 50, 50, 50, 0, 50, 50, 50, 50, 50, 50, 50, 0, 50, 50, 0, 50, 50, - 0, 50, 50, 0, 0, 17, 0, 17, 17, 17, 17, 17, 0, 0, 0, 0, 17, 17, 0, 0, 17, + 50, 0, 0, 0, 0, 0, 0, 0, 0, 50, 50, 50, 50, 50, 0, 17, 17, 17, 0, 50, 50, + 50, 50, 50, 50, 50, 50, 0, 0, 50, 50, 0, 0, 50, 50, 50, 50, 50, 50, 50, + 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 0, 50, 50, + 50, 50, 50, 50, 50, 0, 50, 0, 0, 0, 50, 50, 50, 50, 0, 0, 17, 50, 17, 17, + 17, 17, 17, 17, 17, 0, 0, 17, 17, 0, 0, 17, 17, 17, 50, 0, 0, 0, 0, 0, 0, + 0, 0, 17, 0, 0, 0, 0, 50, 50, 0, 50, 50, 50, 17, 17, 0, 0, 6, 7, 8, 9, + 10, 11, 12, 13, 14, 15, 50, 50, 5, 5, 24, 24, 24, 24, 5, 24, 5, 0, 0, 0, + 0, 0, 0, 17, 17, 17, 0, 50, 50, 50, 50, 50, 50, 0, 0, 0, 0, 50, 50, 0, 0, + 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, + 50, 50, 50, 50, 0, 50, 50, 50, 50, 50, 50, 50, 0, 50, 50, 0, 50, 50, 0, + 50, 50, 0, 0, 17, 0, 17, 17, 17, 17, 17, 0, 0, 0, 0, 17, 17, 0, 0, 17, 17, 17, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0, 50, 50, 50, 50, 0, 50, 0, 0, 0, 0, 0, 0, 0, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 17, 17, 50, 50, 50, 17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 17, 17, 0, 50, 50, 50, 50, 50, 50, @@ -882,14 +872,14 @@ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 17, 5, 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, 50, 50, 50, 50, 50, 50, 50, 50, 17, 50, 116, + 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 17, 50, 114, 17, 17, 17, 17, 17, 17, 17, 0, 0, 0, 0, 5, 50, 50, 50, 50, 50, 50, 50, 17, 17, 17, 17, 17, 17, 17, 17, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 5, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 50, 0, 50, 0, 0, 50, 50, 0, 50, 0, 0, 50, 0, 0, 0, 0, 0, 0, 50, 50, 50, 50, 0, 50, 50, 50, 50, 50, 50, 50, 0, 50, 50, 50, 0, 50, 0, 50, 0, 0, 50, 50, 0, 50, 50, 50, 50, 17, - 50, 116, 17, 17, 17, 17, 17, 17, 0, 17, 17, 50, 0, 0, 50, 50, 50, 50, 50, + 50, 114, 17, 17, 17, 17, 17, 17, 0, 17, 17, 50, 0, 0, 50, 50, 50, 50, 50, 0, 50, 0, 17, 17, 17, 17, 17, 17, 0, 0, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 0, 0, 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, 50, 5, 5, 5, 5, 5, 5, 5, @@ -903,7 +893,7 @@ 17, 17, 17, 17, 17, 17, 17, 0, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 0, 5, 5, 5, 5, 5, 5, 5, 5, 17, 5, 5, 5, - 5, 5, 5, 0, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 5, 5, 5, 0, 5, 5, 5, 5, 5, 5, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -913,160 +903,160 @@ 17, 50, 50, 50, 50, 17, 17, 17, 50, 17, 17, 17, 50, 50, 17, 17, 17, 17, 17, 17, 17, 50, 50, 50, 17, 17, 17, 17, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 50, - 17, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 17, 17, 17, 17, 5, 5, 117, 117, - 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, - 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, - 117, 117, 117, 117, 117, 117, 117, 117, 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, + 17, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 0, 0, 0, 0, 5, 5, 115, 115, 115, + 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, + 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, + 115, 115, 115, 115, 115, 115, 115, 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, 5, 50, 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, 5, 50, 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, 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, 50, 50, 50, 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, 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, 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, 50, 50, 50, 50, 50, 50, 50, 0, 50, 50, 50, 50, 0, - 0, 50, 50, 50, 50, 50, 50, 50, 0, 50, 0, 50, 50, 50, 50, 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, 50, 0, 50, 50, 50, 50, 0, 0, 50, 50, 50, 50, 50, 50, 50, 50, 50, + 50, 50, 50, 50, 50, 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, 0, 50, 50, 50, 50, 0, 0, 50, 50, 50, 50, 50, 50, - 50, 0, 50, 0, 50, 50, 50, 50, 0, 0, 50, 50, 50, 50, 50, 50, 50, 50, 50, - 50, 50, 50, 50, 50, 50, 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, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 0, 50, 50, 50, 50, 0, 0, 50, 50, + 50, 50, 50, 50, 50, 0, 50, 0, 50, 50, 50, 50, 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, 50, + 0, 50, 50, 50, 50, 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, 50, 0, 0, 0, 0, 17, 5, 5, 5, 5, - 5, 5, 5, 5, 5, 118, 119, 120, 121, 122, 123, 124, 125, 126, 24, 24, 24, - 24, 24, 24, 24, 24, 24, 24, 24, 0, 0, 0, 50, 50, 50, 50, 50, 50, 50, 50, - 50, 50, 50, 50, 50, 50, 50, 50, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 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, 0, 50, 50, 50, 50, 0, 0, 50, 50, 50, 50, 50, 50, 50, 0, 50, + 0, 50, 50, 50, 50, 0, 0, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, + 50, 50, 50, 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, 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, 5, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, + 50, 50, 50, 50, 50, 50, 50, 0, 50, 50, 50, 50, 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, 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, 17, 5, 5, 5, 5, 5, 5, 5, 5, + 5, 116, 117, 118, 119, 120, 121, 122, 123, 124, 24, 24, 24, 24, 24, 24, + 24, 24, 24, 24, 24, 0, 0, 0, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, + 50, 50, 50, 50, 50, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 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, 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, 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, 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, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, - 50, 50, 50, 50, 50, 50, 5, 5, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, - 50, 50, 50, 50, 50, 50, 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, 5, 5, 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, 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, 5, 5, 5, 127, 127, 127, 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, 0, 50, - 50, 50, 50, 17, 17, 17, 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, 17, 17, 17, 5, 5, - 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, 17, 17, 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, 0, 50, 50, 50, 0, 17, - 17, 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, 50, 50, 50, 50, - 50, 50, 50, 50, 50, 50, 50, 50, 1, 1, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 5, 5, 5, 50, 5, 5, 5, 5, 50, 17, 0, 0, 6, 7, 8, 9, 10, 11, - 12, 13, 14, 15, 0, 0, 0, 0, 0, 0, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, - 0, 0, 0, 0, 0, 0, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 17, 17, 17, 2, 0, 6, - 7, 8, 9, 10, 11, 12, 13, 14, 15, 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, 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, 50, 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, 50, 17, 50, 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, 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, 50, 50, 50, + 50, 50, 50, 50, 50, 50, 50, 5, 5, 50, 50, 50, 50, 50, 50, 50, 50, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 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, 5, 5, 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, 0, 0, 0, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 0, 0, 0, 0, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 0, 0, 0, 0, 5, 0, 0, 0, 5, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 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, 50, 50, 50, 50, 50, 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, 50, 50, 50, 50, 0, 0, 0, 0, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 50, - 50, 50, 50, 50, 50, 50, 17, 17, 0, 0, 0, 0, 0, 0, 6, 7, 8, 9, 10, 11, 12, - 13, 14, 15, 7, 0, 0, 0, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, - 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, - 17, 17, 17, 17, 17, 0, 0, 5, 5, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, + 50, 50, 50, 5, 5, 5, 125, 125, 125, 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, 0, 50, 50, + 50, 50, 17, 17, 17, 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, 17, 17, 17, 5, 5, 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, 17, 17, 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, 0, 50, 50, 50, 0, 17, 17, + 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, 50, 50, 50, 50, 50, - 50, 50, 50, 50, 50, 50, 50, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 0, + 50, 50, 50, 50, 50, 50, 50, 1, 1, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 0, 0, 17, 6, 7, 8, 9, 10, 11, - 12, 13, 14, 15, 0, 0, 0, 0, 0, 0, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 0, - 0, 0, 0, 0, 0, 5, 5, 5, 5, 5, 5, 5, 50, 5, 5, 5, 5, 5, 5, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 17, 17, 5, 5, 5, 50, 5, 5, 5, 5, 50, 17, 0, 0, 6, 7, 8, 9, 10, 11, 12, + 13, 14, 15, 0, 0, 0, 0, 0, 0, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 0, + 0, 0, 0, 0, 0, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 17, 17, 17, 2, 0, 6, 7, + 8, 9, 10, 11, 12, 13, 14, 15, 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, 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, 50, 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, 50, 17, 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, 17, 17, 17, 17, 17, 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, 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, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 0, 0, 0, 0, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 0, 0, 0, 0, 5, 0, 0, 0, 5, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, - 50, 50, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 50, 50, 50, 50, 50, 50, 50, 0, 0, 0, 0, 6, 7, 8, 9, 10, 11, 12, 13, - 14, 15, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 5, 5, 5, 5, 5, 5, 5, 5, 5, 0, 0, 0, 17, 17, 17, + 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 0, 0, 50, 50, 50, 50, 50, 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, 50, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 0, 0, 0, 50, 50, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 0, + 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 0, 0, 0, 0, 0, 0, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 50, 50, + 50, 50, 50, 50, 50, 17, 17, 0, 0, 0, 0, 0, 0, 6, 7, 8, 9, 10, 11, 12, 13, + 14, 15, 0, 0, 0, 0, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 50, 50, 50, 50, 50, 50, + 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 17, + 17, 17, 17, 17, 0, 0, 5, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, 17, 17, 17, 17, 17, 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, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 0, 0, 0, 5, 5, 5, 5, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 0, 0, 0, 50, - 50, 50, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 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, 5, 5, 0, 0, 0, 0, 0, 0, 0, 0, - 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, 50, 50, 50, 50, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 50, 50, 50, 50, 50, 50, 50, 0, 0, 0, 0, 6, 7, 8, 9, 10, + 11, 12, 13, 14, 15, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 5, 5, 5, 5, 5, 5, 5, 5, 5, 0, 0, 0, + 17, 17, 17, 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, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 0, 0, 0, 50, 50, 6, 7, 8, 9, 10, 11, 12, 13, + 14, 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 17, 17, 17, 5, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 50, 50, 50, 50, 17, 50, 50, 50, 50, 17, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, - 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, - 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 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, 50, 50, 50, 50, 50, 50, 50, 19, 19, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 0, 0, 0, 5, 5, 5, 5, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 0, 0, + 0, 50, 50, 50, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 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, 5, 5, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, - 19, 19, 50, 128, 19, 19, 19, 129, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, - 19, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, + 19, 19, 19, 19, 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, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, + 50, 50, 50, 50, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, + 19, 19, 19, 19, 19, 19, 19, 19, 50, 126, 19, 19, 19, 127, 19, 19, 19, 19, + 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, + 19, 19, 19, 19, 19, 19, 19, 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, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 17, 17, 17, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 17, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, @@ -1074,50 +1064,49 @@ 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, - 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 19, 19, 19, 19, 19, 130, - 19, 19, 131, 19, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, + 19, 19, 19, 19, 19, 128, 19, 19, 129, 19, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, - 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 132, 132, 132, 132, 132, 132, - 132, 132, 133, 133, 133, 133, 133, 133, 133, 133, 132, 132, 132, 132, - 132, 132, 0, 0, 133, 133, 133, 133, 133, 133, 0, 0, 132, 132, 132, 132, - 132, 132, 132, 132, 133, 133, 133, 133, 133, 133, 133, 133, 132, 132, - 132, 132, 132, 132, 132, 132, 133, 133, 133, 133, 133, 133, 133, 133, - 132, 132, 132, 132, 132, 132, 0, 0, 133, 133, 133, 133, 133, 133, 0, 0, - 19, 132, 19, 132, 19, 132, 19, 132, 0, 133, 0, 133, 0, 133, 0, 133, 132, - 132, 132, 132, 132, 132, 132, 132, 133, 133, 133, 133, 133, 133, 133, - 133, 134, 134, 135, 135, 135, 135, 136, 136, 137, 137, 138, 138, 139, - 139, 0, 0, 132, 132, 132, 132, 132, 132, 132, 132, 140, 140, 140, 140, - 140, 140, 140, 140, 132, 132, 132, 132, 132, 132, 132, 132, 140, 140, - 140, 140, 140, 140, 140, 140, 132, 132, 132, 132, 132, 132, 132, 132, - 140, 140, 140, 140, 140, 140, 140, 140, 132, 132, 19, 141, 19, 0, 19, 19, - 133, 133, 142, 142, 143, 5, 144, 5, 5, 5, 19, 141, 19, 0, 19, 19, 145, - 145, 145, 145, 143, 5, 5, 5, 132, 132, 19, 19, 0, 0, 19, 19, 133, 133, - 146, 146, 0, 5, 5, 5, 132, 132, 19, 19, 19, 107, 19, 19, 133, 133, 147, - 147, 110, 5, 5, 5, 0, 0, 19, 141, 19, 0, 19, 19, 148, 148, 149, 149, 143, - 5, 5, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 5, 5, 5, 5, 5, - 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 3, 3, 1, 1, 1, - 1, 1, 2, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 17, 17, 5, 5, 5, 5, - 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 17, 5, 5, 5, 5, 5, 5, 5, 5, - 5, 5, 2, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 150, 50, 0, 0, - 151, 152, 153, 154, 155, 156, 5, 5, 5, 5, 5, 50, 150, 23, 20, 21, 151, - 152, 153, 154, 155, 156, 5, 5, 5, 5, 5, 0, 50, 50, 50, 50, 50, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, - 5, 5, 5, 5, 5, 5, 5, 5, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 5, 5, 5, 5, 17, 5, 5, 5, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 5, 101, 5, 5, 5, 5, - 101, 5, 5, 19, 101, 101, 101, 19, 19, 101, 101, 101, 19, 5, 101, 5, 5, - 157, 101, 101, 101, 101, 101, 5, 5, 5, 5, 5, 5, 101, 5, 158, 5, 101, 5, - 159, 160, 101, 101, 157, 19, 101, 101, 161, 101, 19, 50, 50, 50, 50, 19, - 5, 5, 19, 19, 101, 101, 5, 5, 5, 5, 5, 101, 19, 19, 19, 19, 5, 5, 5, 5, - 162, 5, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, - 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, - 163, 163, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, - 164, 164, 164, 164, 127, 127, 127, 26, 27, 127, 127, 127, 127, 24, 0, 0, - 0, 0, 0, 0, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, + 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, + 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 130, 130, + 130, 130, 130, 130, 130, 130, 131, 131, 131, 131, 131, 131, 131, 131, + 130, 130, 130, 130, 130, 130, 0, 0, 131, 131, 131, 131, 131, 131, 0, 0, + 130, 130, 130, 130, 130, 130, 130, 130, 131, 131, 131, 131, 131, 131, + 131, 131, 130, 130, 130, 130, 130, 130, 130, 130, 131, 131, 131, 131, + 131, 131, 131, 131, 130, 130, 130, 130, 130, 130, 0, 0, 131, 131, 131, + 131, 131, 131, 0, 0, 19, 130, 19, 130, 19, 130, 19, 130, 0, 131, 0, 131, + 0, 131, 0, 131, 130, 130, 130, 130, 130, 130, 130, 130, 131, 131, 131, + 131, 131, 131, 131, 131, 132, 132, 133, 133, 133, 133, 134, 134, 135, + 135, 136, 136, 137, 137, 0, 0, 130, 130, 130, 130, 130, 130, 130, 130, + 138, 138, 138, 138, 138, 138, 138, 138, 130, 130, 130, 130, 130, 130, + 130, 130, 138, 138, 138, 138, 138, 138, 138, 138, 130, 130, 130, 130, + 130, 130, 130, 130, 138, 138, 138, 138, 138, 138, 138, 138, 130, 130, 19, + 139, 19, 0, 19, 19, 131, 131, 140, 140, 141, 5, 142, 5, 5, 5, 19, 139, + 19, 0, 19, 19, 143, 143, 143, 143, 141, 5, 5, 5, 130, 130, 19, 19, 0, 0, + 19, 19, 131, 131, 144, 144, 0, 5, 5, 5, 130, 130, 19, 19, 19, 105, 19, + 19, 131, 131, 145, 145, 108, 5, 5, 5, 0, 0, 19, 139, 19, 0, 19, 19, 146, + 146, 147, 147, 141, 5, 5, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, + 1, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, + 5, 3, 3, 1, 1, 1, 1, 1, 2, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, + 17, 17, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 17, 5, + 5, 5, 5, 5, 5, 5, 5, 5, 5, 2, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 1, 1, 1, 1, + 1, 1, 148, 19, 0, 0, 149, 150, 151, 152, 153, 154, 5, 5, 5, 5, 5, 19, + 148, 23, 20, 21, 149, 150, 151, 152, 153, 154, 5, 5, 5, 5, 5, 0, 50, 50, + 50, 50, 50, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 5, 5, 5, 5, 5, 5, 5, 5, + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 5, 5, 5, 5, 17, 5, 5, 5, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, + 5, 99, 5, 5, 5, 5, 99, 5, 5, 19, 99, 99, 99, 19, 19, 99, 99, 99, 19, 5, + 99, 5, 5, 155, 99, 99, 99, 99, 99, 5, 5, 5, 5, 5, 5, 99, 5, 156, 5, 99, + 5, 157, 158, 99, 99, 155, 19, 99, 99, 159, 99, 19, 50, 50, 50, 50, 19, 5, + 5, 19, 19, 99, 99, 5, 5, 5, 5, 5, 99, 19, 19, 19, 19, 5, 5, 5, 5, 160, 5, + 0, 0, 0, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 161, 161, + 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, + 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, + 162, 162, 125, 125, 125, 26, 27, 125, 125, 125, 125, 0, 0, 0, 0, 0, 0, 0, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, @@ -1131,135 +1120,135 @@ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, - 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, - 5, 5, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 23, 20, 21, 151, 152, 153, 154, 155, - 156, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 23, 20, 21, 151, 152, - 153, 154, 155, 156, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 23, 20, - 21, 151, 152, 153, 154, 155, 156, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, - 24, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, - 5, 5, 5, 165, 165, 165, 165, 165, 165, 165, 165, 165, 165, 165, 165, 165, - 165, 165, 165, 165, 165, 165, 165, 165, 165, 165, 165, 165, 165, 166, - 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, - 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 150, 24, 24, 24, - 24, 24, 24, 24, 24, 24, 24, 23, 20, 21, 151, 152, 153, 154, 155, 156, 24, - 150, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, - 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, - 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, - 5, 5, 5, 5, 5, 5, 5, 0, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, - 5, 5, 5, 0, 5, 0, 0, 0, 0, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, - 5, 5, 5, 5, 5, 5, 5, 5, 5, 0, 5, 5, 5, 5, 0, 5, 5, 5, 5, 0, 0, 5, 5, 5, - 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, - 5, 0, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, - 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 0, 5, 0, 5, 5, 5, 5, 0, 0, 0, 5, - 5, 5, 5, 5, 5, 5, 5, 5, 0, 0, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, - 5, 5, 5, 5, 5, 5, 5, 23, 20, 21, 151, 152, 153, 154, 155, 156, 24, 23, - 20, 21, 151, 152, 153, 154, 155, 156, 24, 23, 20, 21, 151, 152, 153, 154, - 155, 156, 24, 5, 0, 0, 0, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, - 5, 5, 5, 5, 5, 5, 5, 5, 0, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 0, - 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 0, 5, 0, 0, 0, 5, 5, 5, 5, 5, 5, 5, 5, + 5, 5, 5, 5, 5, 5, 5, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 23, 20, 21, 149, 150, 151, 152, 153, 154, 24, 24, + 24, 24, 24, 24, 24, 24, 24, 24, 24, 23, 20, 21, 149, 150, 151, 152, 153, + 154, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 23, 20, 21, 149, 150, + 151, 152, 153, 154, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 5, 5, 5, + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 163, + 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, + 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 164, 164, 164, + 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, + 164, 164, 164, 164, 164, 164, 164, 164, 164, 148, 24, 24, 24, 24, 24, 24, + 24, 24, 24, 24, 23, 20, 21, 149, 150, 151, 152, 153, 154, 24, 148, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, + 5, 5, 5, 5, 0, 0, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 0, 0, 0, 5, 5, 5, 5, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 5, 5, 5, 5, 0, 5, 5, 5, 5, 0, 0, 5, 5, 5, 5, 5, 5, + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 0, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 0, 5, 0, 5, 5, 5, 5, 0, 0, 0, 5, 0, 5, 5, + 5, 5, 5, 5, 5, 0, 0, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, + 5, 5, 5, 5, 23, 20, 21, 149, 150, 151, 152, 153, 154, 24, 23, 20, 21, + 149, 150, 151, 152, 153, 154, 24, 23, 20, 21, 149, 150, 151, 152, 153, + 154, 24, 5, 0, 0, 0, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, + 5, 5, 5, 5, 5, 5, 5, 0, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 0, 5, + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 0, 5, 0, 0, 0, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, - 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 0, 0, 0, - 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 114, 114, 114, 114, 114, 114, 114, 114, 114, 114, 114, 114, 114, 114, - 114, 114, 114, 114, 114, 114, 114, 114, 114, 114, 114, 114, 114, 114, - 114, 114, 114, 114, 114, 114, 114, 114, 114, 114, 114, 114, 114, 114, - 114, 114, 114, 114, 114, 0, 115, 115, 115, 115, 115, 115, 115, 115, 115, - 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, - 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, - 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 0, 26, 27, 167, 168, - 169, 170, 171, 26, 27, 26, 27, 26, 27, 172, 173, 174, 175, 19, 26, 27, - 19, 26, 27, 19, 19, 19, 19, 19, 19, 50, 176, 176, 26, 27, 26, 27, 26, 27, - 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, - 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, - 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, - 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, - 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, - 26, 27, 26, 27, 19, 5, 5, 5, 5, 5, 5, 26, 27, 26, 27, 17, 17, 17, 0, 0, - 0, 0, 0, 0, 0, 5, 5, 5, 5, 24, 5, 5, 177, 177, 177, 177, 177, 177, 177, - 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, - 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, - 177, 177, 177, 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, + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 0, 0, 0, 5, + 5, 5, 5, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 112, + 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, + 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, + 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, + 112, 112, 112, 112, 0, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, + 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, + 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, + 113, 113, 113, 113, 113, 113, 113, 113, 113, 0, 26, 27, 165, 166, 167, + 168, 169, 26, 27, 26, 27, 26, 27, 170, 171, 172, 0, 19, 26, 27, 19, 26, + 27, 19, 19, 19, 19, 19, 19, 50, 0, 0, 26, 27, 26, 27, 26, 27, 26, 27, 26, + 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, + 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, + 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, + 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, + 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, + 27, 19, 5, 5, 5, 5, 5, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 5, + 5, 5, 24, 5, 5, 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, 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, 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, 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, 50, 50, 50, 50, 50, 50, 50, 0, 50, 50, 50, 50, - 50, 50, 50, 0, 50, 50, 50, 50, 50, 50, 50, 0, 50, 50, 50, 50, 50, 50, 50, + 50, 50, 50, 50, 50, 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, 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, 50, 50, 50, 50, 50, 50, 50, 0, 50, 50, 50, 50, 50, 50, 50, 0, 50, 50, - 50, 50, 50, 50, 50, 0, 50, 50, 50, 50, 50, 50, 50, 0, 17, 17, 17, 17, 17, + 50, 50, 50, 50, 50, 0, 50, 50, 50, 50, 50, 50, 50, 0, 50, 50, 50, 50, 50, + 50, 50, 0, 50, 50, 50, 50, 50, 50, 50, 0, 50, 50, 50, 50, 50, 50, 50, 0, + 50, 50, 50, 50, 50, 50, 50, 0, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, + 17, 17, 17, 17, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, - 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 88, 5, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 5, 5, 5, 5, 86, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 5, 5, 5, - 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 0, 5, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 0, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, - 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, + 5, 5, 5, 5, 5, 5, 5, 5, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, - 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 5, 5, 5, - 5, 5, 5, 5, 5, 5, 5, 5, 0, 0, 0, 0, 2, 5, 5, 5, 5, 50, 50, 127, 5, 5, 5, - 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 127, - 127, 127, 127, 127, 127, 127, 127, 127, 17, 17, 17, 17, 17, 17, 5, 50, - 50, 50, 50, 50, 5, 5, 127, 127, 127, 50, 50, 5, 5, 5, 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, + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, + 5, 0, 0, 0, 0, 2, 5, 5, 5, 5, 50, 50, 125, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 125, 125, 125, 125, 125, + 125, 125, 125, 125, 17, 17, 17, 17, 17, 17, 5, 50, 50, 50, 50, 50, 5, 5, + 125, 125, 125, 50, 50, 5, 5, 5, 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, 50, 50, 50, 50, 50, - 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 0, 0, 17, 17, 5, 5, 50, 50, 50, - 5, 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, 50, 50, 50, 50, 50, 50, + 50, 50, 50, 50, 50, 0, 0, 17, 17, 5, 5, 50, 50, 50, 5, 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, 5, 50, 50, 50, 50, 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, 50, 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, 5, 50, 50, 50, + 50, 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, 50, 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, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, - 50, 50, 0, 5, 5, 24, 24, 24, 24, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 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, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, + 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 0, 5, 5, + 24, 24, 24, 24, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 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, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 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, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, + 5, 5, 5, 5, 5, 5, 5, 5, 5, 0, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, - 5, 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, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, - 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 0, 24, 24, 24, 24, 24, + 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 24, 24, 24, 24, 24, 24, 24, 24, + 24, 24, 24, 24, 24, 24, 24, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, - 5, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, - 5, 5, 5, 5, 5, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, - 24, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, - 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, - 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 0, 50, 50, 50, 50, 50, - 178, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, + 5, 5, 5, 5, 5, 5, 5, 5, 0, 50, 50, 50, 50, 50, 174, 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, 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, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, - 178, 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, 174, 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, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, @@ -1268,7 +1257,7 @@ 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, 50, 50, 50, 50, 50, 50, 50, - 50, 50, 50, 50, 50, 178, 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, 174, 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, 50, 50, 50, 50, 50, 50, 50, @@ -1277,91 +1266,89 @@ 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, 50, 50, 50, 50, 50, 50, 50, - 50, 50, 50, 50, 50, 50, 178, 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, + 174, 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, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, - 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, + 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, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, - 5, 5, 5, 5, 5, 5, 178, 50, 50, 178, 50, 50, 50, 178, 50, 178, 50, 50, 50, + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 174, + 50, 50, 174, 50, 50, 50, 174, 50, 174, 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, 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, 178, 50, 50, 50, 50, 50, 50, 50, 50, 50, + 50, 50, 50, 174, 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, 174, 50, 50, 50, + 50, 50, 50, 50, 174, 50, 174, 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, 178, 50, 50, 50, 50, 50, 50, 50, 178, 50, 178, 50, 50, 50, 50, 50, + 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 174, 174, 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, 178, - 178, 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, 178, 50, 50, 50, 50, - 50, 50, 50, 50, 178, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, + 50, 50, 50, 50, 50, 50, 50, 174, 50, 50, 50, 50, 50, 50, 50, 50, 174, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, - 50, 50, 50, 50, 50, 178, 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, 174, 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, 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, 178, 50, 50, 50, - 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 178, 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, 174, 50, 50, 50, 50, 50, 50, 50, 50, 50, + 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 174, 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, 50, 50, 50, 50, 50, 50, 178, 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, 178, 50, 178, 50, 178, 50, 50, 50, + 50, 50, 50, 50, 174, 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, 174, 50, 174, 50, 174, 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, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, - 50, 50, 50, 50, 50, 50, 50, 50, 178, 50, 178, 178, 178, 50, 50, 50, 50, - 50, 50, 178, 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, 174, 50, 174, 174, 174, 50, 50, 50, 50, 50, 50, 174, 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, 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, 178, 178, 178, 178, 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, 174, 174, 174, 174, 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, 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, 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, 178, 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, 174, 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, 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, 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, 178, 50, 50, 50, 50, 50, 50, 50, - 178, 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, 50, 50, 50, 50, 50, 50, + 50, 50, 50, 50, 174, 50, 50, 50, 50, 50, 50, 50, 174, 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, 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, 178, 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, 50, 50, 50, + 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 174, 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, 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, 178, 178, 50, 50, 50, 50, 50, 50, 50, - 50, 50, 50, 50, 50, 178, 178, 178, 50, 178, 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, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, + 50, 50, 50, 174, 174, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, + 174, 174, 174, 50, 174, 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, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, @@ -1371,196 +1358,176 @@ 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, 50, 50, 50, 50, 50, 50, 50, - 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 178, 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, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, + 50, 50, 50, 50, 50, 50, 50, 50, 50, 174, 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, 178, 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, 50, 50, 50, 50, + 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 174, 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, 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, 178, 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, 50, 50, 50, 50, 178, 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, 174, 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, 50, + 50, 50, 50, 174, 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, 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, 178, 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, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, + 50, 50, 50, 174, 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, 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, 50, 50, 50, 50, 50, 50, 178, 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, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, + 50, 50, 50, 50, 50, 50, 50, 50, 50, 174, 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, 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, - 178, 50, 50, 50, 50, 178, 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, 50, + 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 174, 50, 50, 50, 50, + 174, 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, 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, 178, 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, 50, 174, 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, 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, 178, 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, 178, 50, 50, 50, 50, 50, 178, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, + 50, 50, 50, 50, 174, 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, 178, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, + 50, 50, 50, 50, 50, 174, 50, 50, 50, 50, 50, 174, 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, 174, 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, 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, 178, 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, + 50, 174, 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, 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, + 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, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 0, - 0, 0, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, + 0, 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, 0, 0, 0, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, - 5, 5, 5, 5, 5, 5, 5, 5, 5, 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, 50, - 50, 50, 50, 50, 50, 5, 5, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, - 50, 5, 5, 5, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, - 50, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 50, 50, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 26, 27, 26, 27, 26, 27, 26, 27, 26, - 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, - 27, 26, 27, 26, 27, 0, 0, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, - 50, 17, 5, 5, 5, 5, 0, 0, 0, 0, 0, 0, 0, 0, 17, 17, 5, 50, 26, 27, 26, + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, + 50, 50, 5, 5, 5, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, + 50, 50, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 50, 50, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 26, 27, 26, 27, 26, 27, 26, 27, + 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, + 26, 27, 26, 27, 26, 27, 0, 0, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, + 27, 50, 17, 5, 5, 5, 5, 0, 0, 0, 0, 0, 0, 0, 0, 17, 17, 5, 50, 26, 27, + 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, + 26, 27, 26, 27, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 50, 50, 50, 50, 50, 50, 50, 50, 50, + 5, 5, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 19, 19, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, - 27, 26, 27, 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, 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, 127, 127, 127, 127, 127, 127, 127, 127, 127, - 127, 17, 17, 5, 5, 5, 5, 5, 5, 0, 0, 0, 0, 0, 0, 0, 0, 5, 5, 5, 5, 5, 5, - 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 50, 50, 50, 50, 50, - 50, 50, 50, 50, 5, 5, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, - 27, 19, 19, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, - 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 50, 19, 19, 19, 19, 19, 19, - 19, 19, 26, 27, 26, 27, 179, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 50, - 5, 5, 26, 27, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 27, 26, 27, 26, 27, 26, 27, 50, 19, 19, 19, 19, 19, 19, 19, 19, 26, 27, + 26, 27, 175, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 50, 5, 5, 26, 27, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 50, 50, 50, 50, - 50, 50, 17, 50, 50, 50, 17, 50, 50, 50, 50, 17, 50, 50, 50, 50, 50, 50, - 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 17, - 17, 17, 17, 17, 5, 5, 5, 5, 0, 0, 0, 0, 24, 24, 24, 24, 24, 24, 5, 5, 5, - 5, 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, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 50, 50, 50, 50, 50, 50, 17, + 50, 50, 50, 17, 50, 50, 50, 50, 17, 50, 50, 50, 50, 50, 50, 50, 50, 50, + 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 17, 17, 17, 17, + 17, 5, 5, 5, 5, 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, 5, 5, 5, 5, 0, 0, 0, 0, 0, 0, 0, 0, 17, 17, 50, 50, 50, 50, + 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 5, 5, + 5, 5, 0, 0, 0, 0, 0, 0, 0, 0, 17, 17, 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, 50, 50, 50, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 5, 6, 7, 8, 9, 10, 11, 12, + 13, 14, 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 7, 8, 9, 10, 11, + 12, 13, 14, 15, 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, 17, 17, 17, 17, + 17, 17, 17, 17, 5, 5, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 5, 6, - 7, 8, 9, 10, 11, 12, 13, 14, 15, 0, 0, 0, 0, 0, 0, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 50, 50, 50, 50, 50, - 50, 5, 5, 5, 50, 0, 0, 0, 0, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 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, 17, 17, 17, 17, 17, 17, 17, 17, 5, 5, 50, - 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, - 50, 50, 50, 50, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 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, 17, 17, 17, 17, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, + 17, 17, 17, 17, 17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, + 0, 0, 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, 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, 50, 50, 50, 50, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 5, 5, 5, 5, 5, 5, 5, - 5, 5, 5, 5, 5, 5, 0, 50, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 0, 0, 0, 0, + 50, 50, 50, 50, 50, 50, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 50, 50, 50, 17, 50, 50, 50, 50, 50, + 50, 50, 50, 17, 17, 0, 0, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 0, 0, 5, 5, 5, 5, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 50, 50, 50, - 17, 50, 50, 50, 50, 50, 50, 50, 50, 17, 17, 0, 0, 6, 7, 8, 9, 10, 11, 12, - 13, 14, 15, 0, 0, 5, 5, 5, 5, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, - 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 5, 5, 5, 50, 17, 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, 50, 50, 50, 50, 50, 50, 50, 50, 17, 50, 17, 17, 17, - 50, 50, 17, 17, 50, 50, 50, 50, 50, 17, 17, 50, 17, 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, 50, 50, 50, 5, 5, + 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, 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, 17, - 17, 17, 17, 17, 17, 17, 17, 5, 17, 17, 0, 0, 6, 7, 8, 9, 10, 11, 12, 13, - 14, 15, 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, 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, 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, 50, 50, 50, 50, 50, 50, 50, 50, 50, - 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 0, 0, 0, 0, 0, 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, 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, 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, 50, 50, 50, 50, 50, 50, 50, 50, 50, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 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, 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, 50, 50, 50, 50, - 50, 50, 50, 50, 50, 50, 50, 50, 178, 50, 50, 50, 50, 50, 50, 50, 178, 50, - 50, 50, 50, 178, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, + 50, 50, 50, 50, 50, 50, 50, 50, 50, 174, 50, 50, 50, 50, 50, 50, 50, 174, + 50, 50, 50, 50, 174, 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, 50, 50, - 50, 50, 50, 50, 50, 50, 50, 178, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, + 50, 50, 50, 50, 50, 50, 50, 50, 174, 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, 178, 50, 178, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, + 50, 50, 50, 174, 50, 174, 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, 178, 50, 50, 50, 50, 50, 50, 50, + 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 174, 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, 0, 0, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, + 50, 50, 50, 50, 50, 50, 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, 50, 50, 50, 50, 50, 50, 50, - 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 0, 0, 50, 50, 50, + 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 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, 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, 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, + 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, 19, 19, 19, 19, 19, 19, 19, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 19, 19, 19, 19, 19, 0, 0, 0, 0, 0, 50, 17, 50, 50, 50, 50, + 0, 0, 0, 0, 0, 0, 0, 0, 19, 19, 19, 19, 19, 19, 19, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 19, 19, 19, 19, 19, 0, 0, 0, 0, 0, 50, 17, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 5, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 0, 50, 50, 50, 50, 50, 0, 50, 0, 50, 50, 0, 50, 50, 0, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, @@ -1577,8 +1544,8 @@ 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, 50, 50, 50, 50, 50, 50, 50, - 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 88, - 88, 88, 88, 88, 88, 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, 86, + 86, 86, 86, 86, 86, 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, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, @@ -1592,13 +1559,13 @@ 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, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 88, 88, 5, 5, + 0, 0, 0, 0, 0, 0, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 86, 86, 5, 5, 0, 0, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 0, 0, 0, 0, 0, 0, 17, 17, 17, 17, 17, 17, 17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 5, 5, 17, 17, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 17, 17, 17, 5, 5, 5, 0, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 0, 5, 5, 5, 5, 0, 0, - 0, 0, 88, 50, 88, 50, 88, 0, 88, 50, 88, 50, 88, 50, 88, 50, 88, 50, 50, + 0, 0, 86, 50, 86, 50, 86, 0, 86, 50, 86, 50, 86, 50, 86, 50, 86, 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, 50, 50, 50, 50, 50, 50, 50, 50, 50, @@ -1614,7 +1581,7 @@ 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, 50, 50, 50, 50, 50, 50, 50, - 50, 50, 116, 116, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, + 50, 50, 114, 114, 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, 50, 50, 50, 50, 50, 50, 0, 0, 50, 50, 50, 50, 50, 50, 0, 0, 50, 50, 50, 50, 50, 50, 0, 0, 50, 50, 50, 0, 0, 0, 5, 5, 5, 5, 5, 5, 5, 0, 5, 5, @@ -1635,11 +1602,11 @@ 50, 50, 50, 50, 0, 0, 0, 0, 0, 5, 5, 5, 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, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, - 24, 24, 24, 24, 0, 0, 0, 5, 5, 5, 5, 5, 5, 5, 5, 5, 127, 127, 127, 127, - 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, - 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, - 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, - 127, 127, 127, 127, 127, 127, 127, 24, 24, 24, 24, 5, 5, 5, 5, 5, 5, 5, + 24, 24, 24, 24, 0, 0, 0, 5, 5, 5, 5, 5, 5, 5, 5, 5, 125, 125, 125, 125, + 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, + 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, + 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, + 125, 125, 125, 125, 125, 125, 125, 24, 24, 24, 24, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 24, 0, 0, 0, 0, 0, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -1655,22 +1622,22 @@ 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, 24, 24, 24, 24, 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, 127, 50, 50, 50, 50, 50, 50, 50, 50, 127, 0, 0, 0, 0, 0, 0, + 50, 50, 50, 125, 50, 50, 50, 50, 50, 50, 50, 50, 125, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, 5, 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, 50, 50, 50, - 50, 50, 50, 50, 50, 5, 127, 127, 127, 127, 127, 0, 0, 0, 0, 0, 0, 0, 0, + 50, 50, 50, 50, 50, 5, 125, 125, 125, 125, 125, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 180, 180, 180, 180, 180, 180, 180, 180, - 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, - 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, - 180, 180, 180, 180, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, - 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, - 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, - 181, 181, 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, 176, 176, 176, 176, 176, 176, 176, 176, + 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, + 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, + 176, 176, 176, 176, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, + 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, + 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, + 177, 177, 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, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, @@ -1682,46 +1649,20 @@ 50, 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, 50, 50, 50, 50, 0, 50, 50, 0, 0, 0, 50, 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, 0, 5, 24, 24, 24, 24, 24, 24, 24, 24, 0, 0, 0, 0, 0, 0, - 0, 0, 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, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, - 50, 50, 50, 50, 50, 24, 24, 24, 24, 24, 24, 0, 0, 0, 5, 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, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 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, 17, 17, 17, 0, 17, 17, 0, 0, 0, 0, 0, 17, 17, 17, 17, 50, - 50, 50, 50, 0, 50, 50, 50, 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, 0, 0, 0, - 0, 17, 17, 17, 0, 0, 0, 0, 17, 23, 20, 21, 151, 24, 24, 24, 24, 0, 0, 0, - 0, 0, 0, 0, 0, 5, 5, 5, 5, 5, 5, 5, 5, 5, 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, 24, 24, 5, 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, 50, 50, 50, 50, 50, 50, 50, 0, 0, 0, 5, 5, 5, 5, 5, - 5, 5, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, - 50, 50, 50, 50, 50, 0, 0, 24, 24, 24, 24, 24, 24, 24, 24, 50, 50, 50, 50, - 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 0, 0, 0, 0, - 0, 24, 24, 24, 24, 24, 24, 24, 24, 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, 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, 50, 50, 50, 50, 50, 50, + 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 24, 24, + 24, 24, 0, 0, 0, 0, 0, 5, 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, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 23, 20, 21, - 151, 152, 153, 154, 155, 156, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, - 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 0, 17, 17, 17, 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, 50, 17, 17, 17, 0, 17, + 17, 0, 0, 0, 0, 0, 17, 17, 17, 17, 50, 50, 50, 50, 0, 50, 50, 50, 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, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 5, 5, - 1, 5, 5, 5, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 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, 50, 50, 50, 50, 50, 50, 50, 0, 0, 0, 0, 17, 17, 17, 0, 0, 0, 0, 17, + 23, 20, 21, 149, 24, 24, 24, 24, 0, 0, 0, 0, 0, 0, 0, 0, 5, 5, 5, 5, 5, + 5, 5, 5, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -1729,21 +1670,15 @@ 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, 50, 50, 50, 50, 50, 50, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 127, 127, 127, 127, 127, - 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, - 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, - 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, - 127, 127, 127, 157, 157, 127, 127, 127, 127, 127, 127, 127, 127, 127, - 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, - 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 157, 157, 127, - 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 5, 5, 5, 5, 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, 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, 5, 5, 5, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 125, 125, 125, 125, 125, + 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, + 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, + 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, + 125, 125, 125, 155, 155, 125, 125, 125, 125, 125, 125, 125, 125, 125, + 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, + 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 155, 155, 125, + 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 5, 5, 5, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, @@ -1771,119 +1706,96 @@ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 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, 19, + 0, 0, 0, 0, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, + 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, - 19, 19, 19, 19, 19, 19, 19, 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, 19, 19, 19, 19, 19, 19, 19, 0, 19, 19, 19, 19, 19, 19, 19, - 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 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, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, - 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 101, 0, 101, - 101, 0, 0, 101, 0, 0, 101, 101, 0, 0, 101, 101, 101, 101, 0, 101, 101, - 101, 101, 101, 101, 101, 101, 19, 19, 19, 19, 0, 19, 0, 19, 19, 19, 19, - 19, 19, 19, 0, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 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, 19, 19, 19, 19, 19, 19, 19, + 19, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, + 99, 99, 99, 99, 99, 99, 99, 99, 99, 19, 19, 19, 19, 19, 19, 19, 0, 19, + 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 99, + 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, + 99, 99, 99, 99, 99, 99, 99, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, + 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 99, 0, 99, + 99, 0, 0, 99, 0, 0, 99, 99, 0, 0, 99, 99, 99, 99, 0, 99, 99, 99, 99, 99, + 99, 99, 99, 19, 19, 19, 19, 0, 19, 0, 19, 19, 19, 19, 19, 19, 19, 0, 19, + 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 99, 99, 99, 99, 99, 99, 99, 99, + 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, - 19, 101, 101, 0, 101, 101, 101, 101, 0, 0, 101, 101, 101, 101, 101, 101, - 101, 101, 0, 101, 101, 101, 101, 101, 101, 101, 0, 19, 19, 19, 19, 19, + 19, 19, 19, 19, 19, 19, 19, 19, 99, 99, 0, 99, 99, 99, 99, 0, 0, 99, 99, + 99, 99, 99, 99, 99, 99, 0, 99, 99, 99, 99, 99, 99, 99, 0, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, - 19, 19, 19, 101, 101, 0, 101, 101, 101, 101, 0, 101, 101, 101, 101, 101, - 0, 101, 0, 0, 0, 101, 101, 101, 101, 101, 101, 101, 0, 19, 19, 19, 19, + 19, 19, 19, 19, 99, 99, 0, 99, 99, 99, 99, 0, 99, 99, 99, 99, 99, 0, 99, + 0, 0, 0, 99, 99, 99, 99, 99, 99, 99, 0, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, - 19, 19, 19, 19, 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, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, - 19, 19, 19, 19, 19, 19, 19, 19, 19, 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, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, - 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 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, 19, 19, 19, 19, 19, 19, 19, + 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, + 99, 99, 99, 99, 99, 99, 99, 99, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, + 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 99, 99, + 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, + 99, 99, 99, 99, 99, 99, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, + 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 99, 99, 99, 99, + 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, + 99, 99, 99, 99, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, + 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 99, 99, 99, 99, 99, 99, + 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, + 99, 99, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, + 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 99, 99, 99, 99, 99, 99, 99, 99, + 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, - 19, 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, 19, 19, 19, + 19, 19, 19, 19, 19, 19, 19, 19, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, + 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, - 19, 19, 19, 19, 19, 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, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, - 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 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, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, - 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 0, 0, - 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, 5, 19, 19, 19, 19, + 19, 19, 19, 19, 19, 19, 19, 19, 0, 0, 99, 99, 99, 99, 99, 99, 99, 99, 99, + 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 5, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, - 19, 19, 19, 5, 19, 19, 19, 19, 19, 19, 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, 5, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, - 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 5, 19, 19, 19, 19, - 19, 19, 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, 5, 19, 19, + 19, 19, 19, 19, 19, 19, 5, 19, 19, 19, 19, 19, 19, 99, 99, 99, 99, 99, + 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, + 99, 99, 5, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, + 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 5, 19, 19, 19, 19, 19, 19, 99, + 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, + 99, 99, 99, 99, 99, 99, 5, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, + 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 5, 19, 19, 19, + 19, 19, 19, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, + 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 5, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, - 19, 19, 19, 19, 19, 5, 19, 19, 19, 19, 19, 19, 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, 5, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, - 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 5, 19, 19, - 19, 19, 19, 19, 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, 5, + 5, 19, 19, 19, 19, 19, 19, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, + 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 5, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, - 19, 19, 19, 19, 19, 19, 19, 5, 19, 19, 19, 19, 19, 19, 101, 19, 0, 0, 6, - 7, 8, 9, 10, 11, 12, 13, 14, 15, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 6, - 7, 8, 9, 10, 11, 12, 13, 14, 15, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 6, - 7, 8, 9, 10, 11, 12, 13, 14, 15, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, + 19, 19, 19, 19, 5, 19, 19, 19, 19, 19, 19, 99, 19, 0, 0, 6, 7, 8, 9, 10, + 11, 12, 13, 14, 15, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 6, 7, 8, 9, 10, + 11, 12, 13, 14, 15, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 6, 7, 8, 9, 10, + 11, 12, 13, 14, 15, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, - 5, 5, 5, 5, 5, 5, 5, 0, 0, 0, 0, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, + 5, 5, 0, 0, 0, 0, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, - 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 150, 150, 23, 20, 21, 151, 152, 153, 154, 155, 156, 0, 0, 0, 0, - 0, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, - 5, 5, 5, 5, 5, 5, 5, 5, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 0, - 5, 0, 0, 5, 0, 0, 0, 5, 0, 0, 0, 5, 5, 5, 5, 5, 0, 0, 0, 0, 0, 0, 0, 0, - 5, 0, 0, 0, 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 0, 5, 5, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 5, 5, 5, 5, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 5, 5, 5, 5, 5, 5, - 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, - 5, 5, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 5, 5, 5, 5, 5, 5, - 5, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 178, 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, 50, + 174, 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, 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, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 178, + 50, 50, 50, 50, 50, 50, 50, 50, 50, 174, 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, 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, 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, 178, + 50, 50, 50, 50, 50, 50, 50, 50, 50, 174, 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, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, - 50, 50, 50, 50, 50, 50, 50, 50, 178, 50, 50, 50, 50, 50, 50, 50, 50, 50, + 174, 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, 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, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 178, 50, - 50, 50, 50, 50, 50, 50, 50, 178, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, - 50, 50, 50, 50, 50, 178, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, + 50, 50, 50, 50, 50, 50, 50, 50, 174, 50, 50, 50, 50, 50, 50, 50, 50, 174, + 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 174, 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, 50, 50, 50, 50, 50, 50, 50, 50, 50, @@ -1894,32 +1806,32 @@ 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, 50, 50, 50, 50, 50, 50, 50, - 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 178, 50, 50, 50, 50, - 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 178, 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, 178, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, + 50, 50, 50, 50, 50, 174, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, + 50, 50, 50, 50, 50, 50, 174, 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, 174, 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, 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, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 178, 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, 174, 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, 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, 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, 178, 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, 174, 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, 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, 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, 178, 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, 174, 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, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, @@ -1930,32 +1842,26 @@ 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, 50, 50, 50, 50, 50, 50, 50, - 50, 50, 50, 50, 50, 50, 50, 50, 178, 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, + 174, 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, 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, 50, 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, 0, 0, 0, 0, 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, 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, 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, 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, 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, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 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, 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, 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, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, @@ -1968,13 +1874,13 @@ 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, }; /* Returns the numeric value as double for Unicode characters @@ -2009,26 +1915,20 @@ case 0x1810: case 0x1946: case 0x19D0: - case 0x1A80: - case 0x1A90: case 0x1B50: case 0x1BB0: case 0x1C40: case 0x1C50: case 0x2070: case 0x2080: - case 0x2189: case 0x24EA: case 0x24FF: case 0x3007: case 0x96F6: case 0xA620: - case 0xA6EF: case 0xA8D0: case 0xA900: - case 0xA9D0: case 0xAA50: - case 0xABF0: case 0xF9B2: case 0xFF10: #ifdef Py_UNICODE_WIDE @@ -2039,8 +1939,6 @@ case 0x1D7E2: case 0x1D7EC: case 0x1D7F6: - case 0x1F100: - case 0x1F101: #endif return (double) 0.0; case 0x0031: @@ -2050,6 +1948,7 @@ case 0x07C1: case 0x0967: case 0x09E7: + case 0x09F4: case 0x0A67: case 0x0AE7: case 0x0B67: @@ -2070,9 +1969,6 @@ case 0x1811: case 0x1947: case 0x19D1: - case 0x19DA: - case 0x1A81: - case 0x1A91: case 0x1B51: case 0x1BB1: case 0x1C41: @@ -2098,12 +1994,9 @@ case 0x5E7A: case 0x5F0C: case 0xA621: - case 0xA6E6: case 0xA8D1: case 0xA901: - case 0xA9D1: case 0xAA51: - case 0xABF1: case 0xFF11: #ifdef Py_UNICODE_WIDE case 0x10107: @@ -2114,13 +2007,8 @@ case 0x10320: case 0x103D1: case 0x104A1: - case 0x10858: case 0x10916: case 0x10A40: - case 0x10A7D: - case 0x10B58: - case 0x10B78: - case 0x10E60: case 0x12415: case 0x1241E: case 0x1242C: @@ -2133,41 +2021,29 @@ case 0x1D7E3: case 0x1D7ED: case 0x1D7F7: - case 0x1F102: case 0x2092A: #endif return (double) 1.0; - case 0x2152: - return (double) 1.0/10.0; - case 0x09F4: - case 0xA833: - return (double) 1.0/16.0; case 0x00BD: case 0x0D74: case 0x0F2A: case 0x2CFD: - case 0xA831: #ifdef Py_UNICODE_WIDE case 0x10141: case 0x10175: case 0x10176: - case 0x10E7B: #endif return (double) 1.0/2.0; case 0x2153: #ifdef Py_UNICODE_WIDE - case 0x10E7D: case 0x1245A: case 0x1245D: #endif return (double) 1.0/3.0; case 0x00BC: - case 0x09F7: case 0x0D73: - case 0xA830: #ifdef Py_UNICODE_WIDE case 0x10140: - case 0x10E7C: case 0x12460: case 0x12462: #endif @@ -2179,17 +2055,11 @@ case 0x12461: #endif return (double) 1.0/6.0; - case 0x2150: - return (double) 1.0/7.0; - case 0x09F5: case 0x215B: - case 0xA834: #ifdef Py_UNICODE_WIDE case 0x1245F: #endif return (double) 1.0/8.0; - case 0x2151: - return (double) 1.0/9.0; case 0x0BF0: case 0x0D70: case 0x1372: @@ -2222,12 +2092,8 @@ case 0x10164: case 0x10322: case 0x103D3: - case 0x1085B: case 0x10917: case 0x10A44: - case 0x10B5C: - case 0x10B7C: - case 0x10E69: case 0x1D369: #endif return (double) 10.0; @@ -2245,12 +2111,8 @@ case 0x10152: case 0x1016A: case 0x103D5: - case 0x1085D: case 0x10919: case 0x10A46: - case 0x10B5E: - case 0x10B7E: - case 0x10E72: #endif return (double) 100.0; case 0x0BF2: @@ -2266,10 +2128,7 @@ case 0x1014D: case 0x10154: case 0x10171: - case 0x1085E: case 0x10A47: - case 0x10B5F: - case 0x10B7F: #endif return (double) 1000.0; case 0x137C: @@ -2279,7 +2138,6 @@ #ifdef Py_UNICODE_WIDE case 0x1012B: case 0x10155: - case 0x1085F: #endif return (double) 10000.0; case 0x2188: @@ -2357,6 +2215,7 @@ case 0x07C2: case 0x0968: case 0x09E8: + case 0x09F5: case 0x0A68: case 0x0AE8: case 0x0B68: @@ -2377,8 +2236,6 @@ case 0x1812: case 0x1948: case 0x19D2: - case 0x1A82: - case 0x1A92: case 0x1B52: case 0x1BB2: case 0x1C42: @@ -2406,12 +2263,9 @@ case 0x8CB3: case 0x8D30: case 0xA622: - case 0xA6E7: case 0xA8D2: case 0xA902: - case 0xA9D2: case 0xAA52: - case 0xABF2: case 0xF978: case 0xFF12: #ifdef Py_UNICODE_WIDE @@ -2422,12 +2276,7 @@ case 0x1015E: case 0x103D2: case 0x104A2: - case 0x10859: - case 0x1091A: case 0x10A41: - case 0x10B59: - case 0x10B79: - case 0x10E61: case 0x12400: case 0x12416: case 0x1241F: @@ -2443,14 +2292,12 @@ case 0x1D7E4: case 0x1D7EE: case 0x1D7F8: - case 0x1F103: case 0x22390: #endif return (double) 2.0; case 0x2154: #ifdef Py_UNICODE_WIDE case 0x10177: - case 0x10E7E: case 0x1245B: case 0x1245E: #endif @@ -2468,18 +2315,13 @@ #ifdef Py_UNICODE_WIDE case 0x10111: case 0x103D4: - case 0x1085C: case 0x10918: case 0x10A45: - case 0x10B5D: - case 0x10B7D: - case 0x10E6A: case 0x1D36A: #endif return (double) 20.0; #ifdef Py_UNICODE_WIDE case 0x1011A: - case 0x10E73: return (double) 200.0; #endif #ifdef Py_UNICODE_WIDE @@ -2515,6 +2357,7 @@ case 0x07C3: case 0x0969: case 0x09E9: + case 0x09F6: case 0x0A69: case 0x0AE9: case 0x0B69: @@ -2535,8 +2378,6 @@ case 0x1813: case 0x1949: case 0x19D3: - case 0x1A83: - case 0x1A93: case 0x1B53: case 0x1BB3: case 0x1C43: @@ -2563,23 +2404,15 @@ case 0x53C4: case 0x5F0E: case 0xA623: - case 0xA6E8: case 0xA8D3: case 0xA903: - case 0xA9D3: case 0xAA53: - case 0xABF3: case 0xF96B: case 0xFF13: #ifdef Py_UNICODE_WIDE case 0x10109: case 0x104A3: - case 0x1085A: - case 0x1091B: case 0x10A42: - case 0x10B5A: - case 0x10B7A: - case 0x10E62: case 0x12401: case 0x12408: case 0x12417: @@ -2600,22 +2433,16 @@ case 0x1D7E5: case 0x1D7EF: case 0x1D7F9: - case 0x1F104: case 0x20AFD: case 0x20B19: case 0x22998: case 0x23B1B: #endif return (double) 3.0; - case 0x09F6: - case 0xA835: - return (double) 3.0/16.0; case 0x0F2B: return (double) 3.0/2.0; case 0x00BE: - case 0x09F8: case 0x0D75: - case 0xA832: #ifdef Py_UNICODE_WIDE case 0x10178: #endif @@ -2631,7 +2458,6 @@ #ifdef Py_UNICODE_WIDE case 0x10112: case 0x10165: - case 0x10E6B: case 0x1D36B: case 0x20983: #endif @@ -2639,7 +2465,6 @@ #ifdef Py_UNICODE_WIDE case 0x1011B: case 0x1016B: - case 0x10E74: return (double) 300.0; #endif #ifdef Py_UNICODE_WIDE @@ -2674,6 +2499,7 @@ case 0x07C4: case 0x096A: case 0x09EA: + case 0x09F7: case 0x0A6A: case 0x0AEA: case 0x0B6A: @@ -2692,8 +2518,6 @@ case 0x1814: case 0x194A: case 0x19D4: - case 0x1A84: - case 0x1A94: case 0x1B54: case 0x1BB4: case 0x1C44: @@ -2717,20 +2541,14 @@ case 0x56DB: case 0x8086: case 0xA624: - case 0xA6E9: case 0xA8D4: case 0xA904: - case 0xA9D4: case 0xAA54: - case 0xABF4: case 0xFF14: #ifdef Py_UNICODE_WIDE case 0x1010A: case 0x104A4: case 0x10A43: - case 0x10B5B: - case 0x10B7B: - case 0x10E63: case 0x12402: case 0x12409: case 0x1240F: @@ -2752,7 +2570,6 @@ case 0x1D7E6: case 0x1D7F0: case 0x1D7FA: - case 0x1F105: case 0x20064: case 0x200E2: case 0x2626D: @@ -2765,7 +2582,6 @@ case 0x534C: #ifdef Py_UNICODE_WIDE case 0x10113: - case 0x10E6C: case 0x1D36C: case 0x2098C: case 0x2099C: @@ -2773,7 +2589,6 @@ return (double) 40.0; #ifdef Py_UNICODE_WIDE case 0x1011C: - case 0x10E75: return (double) 400.0; #endif #ifdef Py_UNICODE_WIDE @@ -2826,8 +2641,6 @@ case 0x1815: case 0x194B: case 0x19D5: - case 0x1A85: - case 0x1A95: case 0x1B55: case 0x1BB5: case 0x1C45: @@ -2851,12 +2664,9 @@ case 0x4E94: case 0x4F0D: case 0xA625: - case 0xA6EA: case 0xA8D5: case 0xA905: - case 0xA9D5: case 0xAA55: - case 0xABF5: case 0xFF15: #ifdef Py_UNICODE_WIDE case 0x1010B: @@ -2867,7 +2677,6 @@ case 0x10173: case 0x10321: case 0x104A5: - case 0x10E64: case 0x12403: case 0x1240A: case 0x12410: @@ -2885,7 +2694,6 @@ case 0x1D7E7: case 0x1D7F1: case 0x1D7FB: - case 0x1F106: case 0x20121: #endif return (double) 5.0; @@ -2914,8 +2722,6 @@ case 0x10169: case 0x10174: case 0x10323: - case 0x10A7E: - case 0x10E6D: case 0x1D36D: #endif return (double) 50.0; @@ -2931,7 +2737,6 @@ case 0x1016E: case 0x1016F: case 0x10170: - case 0x10E76: #endif return (double) 500.0; case 0x2181: @@ -2973,8 +2778,6 @@ case 0x1816: case 0x194C: case 0x19D6: - case 0x1A86: - case 0x1A96: case 0x1B56: case 0x1BB6: case 0x1C46: @@ -2998,19 +2801,15 @@ case 0x9646: case 0x9678: case 0xA626: - case 0xA6EB: case 0xA8D6: case 0xA906: - case 0xA9D6: case 0xAA56: - case 0xABF6: case 0xF9D1: case 0xF9D3: case 0xFF16: #ifdef Py_UNICODE_WIDE case 0x1010C: case 0x104A6: - case 0x10E65: case 0x12404: case 0x1240B: case 0x12411: @@ -3024,20 +2823,17 @@ case 0x1D7E8: case 0x1D7F2: case 0x1D7FC: - case 0x1F107: case 0x20AEA: #endif return (double) 6.0; case 0x1377: #ifdef Py_UNICODE_WIDE case 0x10115: - case 0x10E6E: case 0x1D36E: #endif return (double) 60.0; #ifdef Py_UNICODE_WIDE case 0x1011E: - case 0x10E77: return (double) 600.0; #endif #ifdef Py_UNICODE_WIDE @@ -3072,8 +2868,6 @@ case 0x1817: case 0x194D: case 0x19D7: - case 0x1A87: - case 0x1A97: case 0x1B57: case 0x1BB7: case 0x1C47: @@ -3097,17 +2891,13 @@ case 0x67D2: case 0x6F06: case 0xA627: - case 0xA6EC: case 0xA8D7: case 0xA907: - case 0xA9D7: case 0xAA57: - case 0xABF7: case 0xFF17: #ifdef Py_UNICODE_WIDE case 0x1010D: case 0x104A7: - case 0x10E66: case 0x12405: case 0x1240C: case 0x12412: @@ -3122,7 +2912,6 @@ case 0x1D7E9: case 0x1D7F3: case 0x1D7FD: - case 0x1F108: case 0x20001: #endif return (double) 7.0; @@ -3133,13 +2922,11 @@ case 0x1378: #ifdef Py_UNICODE_WIDE case 0x10116: - case 0x10E6F: case 0x1D36F: #endif return (double) 70.0; #ifdef Py_UNICODE_WIDE case 0x1011F: - case 0x10E78: return (double) 700.0; #endif #ifdef Py_UNICODE_WIDE @@ -3174,8 +2961,6 @@ case 0x1818: case 0x194E: case 0x19D8: - case 0x1A88: - case 0x1A98: case 0x1B58: case 0x1BB8: case 0x1C48: @@ -3197,17 +2982,13 @@ case 0x516B: case 0x634C: case 0xA628: - case 0xA6ED: case 0xA8D8: case 0xA908: - case 0xA9D8: case 0xAA58: - case 0xABF8: case 0xFF18: #ifdef Py_UNICODE_WIDE case 0x1010E: case 0x104A8: - case 0x10E67: case 0x12406: case 0x1240D: case 0x12413: @@ -3221,19 +3002,16 @@ case 0x1D7EA: case 0x1D7F4: case 0x1D7FE: - case 0x1F109: #endif return (double) 8.0; case 0x1379: #ifdef Py_UNICODE_WIDE case 0x10117: - case 0x10E70: case 0x1D370: #endif return (double) 80.0; #ifdef Py_UNICODE_WIDE case 0x10120: - case 0x10E79: return (double) 800.0; #endif #ifdef Py_UNICODE_WIDE @@ -3268,8 +3046,6 @@ case 0x1819: case 0x194F: case 0x19D9: - case 0x1A89: - case 0x1A99: case 0x1B59: case 0x1BB9: case 0x1C49: @@ -3292,17 +3068,13 @@ case 0x5EFE: case 0x7396: case 0xA629: - case 0xA6EE: case 0xA8D9: case 0xA909: - case 0xA9D9: case 0xAA59: - case 0xABF9: case 0xFF19: #ifdef Py_UNICODE_WIDE case 0x1010F: case 0x104A9: - case 0x10E68: case 0x12407: case 0x1240E: case 0x12414: @@ -3318,7 +3090,6 @@ case 0x1D7EB: case 0x1D7F5: case 0x1D7FF: - case 0x1F10A: case 0x2F890: #endif return (double) 9.0; @@ -3328,14 +3099,12 @@ #ifdef Py_UNICODE_WIDE case 0x10118: case 0x10341: - case 0x10E71: case 0x1D371: #endif return (double) 90.0; #ifdef Py_UNICODE_WIDE case 0x10121: case 0x1034A: - case 0x10E7A: return (double) 900.0; #endif #ifdef Py_UNICODE_WIDE Modified: python/branches/py3k/Tools/unicode/makeunicodedata.py ============================================================================== --- python/branches/py3k/Tools/unicode/makeunicodedata.py (original) +++ python/branches/py3k/Tools/unicode/makeunicodedata.py Fri Mar 19 02:17:46 2010 @@ -31,7 +31,7 @@ VERSION = "2.6" # The Unicode Database -UNIDATA_VERSION = "5.2.0" +UNIDATA_VERSION = "5.1.0" UNICODE_DATA = "UnicodeData%s.txt" COMPOSITION_EXCLUSIONS = "CompositionExclusions%s.txt" EASTASIAN_WIDTH = "EastAsianWidth%s.txt" From python-checkins at python.org Fri Mar 19 02:20:17 2010 From: python-checkins at python.org (florent.xicluna) Date: Fri, 19 Mar 2010 02:20:17 +0100 (CET) Subject: [Python-checkins] r79088 - svn:log Message-ID: <20100319012017.92784FB42@mail.python.org> Author: florent.xicluna Revision: 79088 Property Name: svn:log Action: modified Property diff: --- old property value +++ new property value @@ -1 +1 @@ -Revert Unicode UCD 5.2 upgrade in 3.x. It broke repr() for unicode objects, and gave failures in test_bigmem. +Revert Unicode UCD 5.2 upgrade in 3.x. It broke repr() for unicode objects, and gave failures in test_bigmem. Revert 79062, 79065 and 79083. From nnorwitz at gmail.com Fri Mar 19 03:00:09 2010 From: nnorwitz at gmail.com (Neal Norwitz) Date: Thu, 18 Mar 2010 21:00:09 -0500 Subject: [Python-checkins] Python Regression Test Failures refleak (2) Message-ID: <20100319020009.GA25240@kbk-i386-bb.psfb.org> More important issues: ---------------------- test_bz2 leaked [0, 0, 80] references, sum=80 test_bz2 leaked [-77, 0, 0] references, sum=-77 Less important issues: ---------------------- From nnorwitz at gmail.com Fri Mar 19 05:41:38 2010 From: nnorwitz at gmail.com (Neal Norwitz) Date: Thu, 18 Mar 2010 23:41:38 -0500 Subject: [Python-checkins] Python Regression Test Failures refleak (3) Message-ID: <20100319044138.GA20796@kbk-i386-bb.psfb.org> More important issues: ---------------------- test_bz2 leaked [0, 0, 80] references, sum=80 test_bz2 leaked [-77, 0, 0] references, sum=-77 test_warnings leaked [0, 0, 120] references, sum=120 Less important issues: ---------------------- From nnorwitz at gmail.com Fri Mar 19 13:34:59 2010 From: nnorwitz at gmail.com (Neal Norwitz) Date: Fri, 19 Mar 2010 07:34:59 -0500 Subject: [Python-checkins] Python Regression Test Failures refleak (1) Message-ID: <20100319123459.GA11417@kbk-i386-bb.psfb.org> More important issues: ---------------------- test_itertools leaked [0, 14, 0] references, sum=14 Less important issues: ---------------------- From python-checkins at python.org Fri Mar 19 13:38:04 2010 From: python-checkins at python.org (mark.dickinson) Date: Fri, 19 Mar 2010 13:38:04 +0100 (CET) Subject: [Python-checkins] r79092 - python/branches/py3k/Objects/longobject.c Message-ID: <20100319123804.0B537C607@mail.python.org> Author: mark.dickinson Date: Fri Mar 19 13:38:03 2010 New Revision: 79092 Log: Remove out-of-date comment about making ints and longs hash equal. Modified: python/branches/py3k/Objects/longobject.c Modified: python/branches/py3k/Objects/longobject.c ============================================================================== --- python/branches/py3k/Objects/longobject.c (original) +++ python/branches/py3k/Objects/longobject.c Fri Mar 19 13:38:03 2010 @@ -2560,9 +2560,6 @@ Py_ssize_t i; int sign; - /* This is designed so that Python ints and longs with the - same value hash to the same value, otherwise comparisons - of mapping keys will turn out weird */ i = Py_SIZE(v); switch(i) { case -1: return v->ob_digit[0]==1 ? -2 : -(sdigit)v->ob_digit[0]; From python-checkins at python.org Fri Mar 19 14:37:11 2010 From: python-checkins at python.org (florent.xicluna) Date: Fri, 19 Mar 2010 14:37:11 +0100 (CET) Subject: [Python-checkins] r79093 - in python/branches/py3k: Lib/test/test_bigmem.py Lib/test/test_unicodedata.py Misc/NEWS Modules/unicodedata_db.h Modules/unicodename_db.h Objects/unicodetype_db.h Tools/unicode/makeunicodedata.py Message-ID: <20100319133711.22A09C74D@mail.python.org> Author: florent.xicluna Date: Fri Mar 19 14:37:08 2010 New Revision: 79093 Log: Fixed a failure in test_bigmem. Merged revision 79059 via svnmerge from svn+ssh://pythondev at svn.python.org/python/trunk ........ r79059 | florent.xicluna | 2010-03-18 22:50:06 +0100 (jeu, 18 mar 2010) | 2 lines Issue #8024: Update the Unicode database to 5.2 ........ Modified: python/branches/py3k/Lib/test/test_bigmem.py python/branches/py3k/Lib/test/test_unicodedata.py python/branches/py3k/Misc/NEWS python/branches/py3k/Modules/unicodedata_db.h python/branches/py3k/Modules/unicodename_db.h python/branches/py3k/Objects/unicodetype_db.h python/branches/py3k/Tools/unicode/makeunicodedata.py Modified: python/branches/py3k/Lib/test/test_bigmem.py ============================================================================== --- python/branches/py3k/Lib/test/test_bigmem.py (original) +++ python/branches/py3k/Lib/test/test_bigmem.py Fri Mar 19 14:37:08 2010 @@ -618,7 +618,7 @@ @precisionbigmemtest(size=_4G // 5, memuse=character_size * (6 + 1)) def test_unicode_repr_overflow(self, size): try: - s = "\uAAAA"*size + s = "\uDCBA"*size r = repr(s) except MemoryError: pass # acceptable on 32-bit @@ -679,22 +679,24 @@ @bigmemtest(minsize=2**32 / 5, memuse=character_size * 7) def test_unicode_repr(self, size): - s = "\uAAAA" * size + # Use an assigned, but not printable code point. + # It is in the range of the low surrogates \uDC00-\uDFFF. + s = "\uDCBA" * size for f in (repr, ascii): r = f(s) self.assertTrue(len(r) > size) - self.assertTrue(r.endswith(r"\uaaaa'"), r[-10:]) + self.assertTrue(r.endswith(r"\udcba'"), r[-10:]) del r # The character takes 4 bytes even in UCS-2 builds because it will # be decomposed into surrogates. @bigmemtest(minsize=2**32 / 5, memuse=4 + character_size * 9) def test_unicode_repr_wide(self, size): - s = "\U0001AAAA" * size + s = "\U0001DCBA" * size for f in (repr, ascii): r = f(s) self.assertTrue(len(r) > size) - self.assertTrue(r.endswith(r"\U0001aaaa'"), r[-12:]) + self.assertTrue(r.endswith(r"\U0001dcba'"), r[-12:]) del r Modified: python/branches/py3k/Lib/test/test_unicodedata.py ============================================================================== --- python/branches/py3k/Lib/test/test_unicodedata.py (original) +++ python/branches/py3k/Lib/test/test_unicodedata.py Fri Mar 19 14:37:08 2010 @@ -21,7 +21,7 @@ class UnicodeMethodsTest(unittest.TestCase): # update this, if the database changes - expectedchecksum = '0b915116051f3ed029a98542c2b7df63c9646272' + expectedchecksum = '4504dffd035baea02c5b9de82bebc3d65e0e0baf' def test_method_checksum(self): h = hashlib.sha1() @@ -80,7 +80,7 @@ class UnicodeFunctionsTest(UnicodeDatabaseTest): # update this, if the database changes - expectedchecksum = 'd4169ccff998ebbd1ec007a0b3fbd66e5ccf0229' + expectedchecksum = '6ccf1b1a36460d2694f9b0b0f0324942fe70ede6' def test_function_checksum(self): data = [] Modified: python/branches/py3k/Misc/NEWS ============================================================================== --- python/branches/py3k/Misc/NEWS (original) +++ python/branches/py3k/Misc/NEWS Fri Mar 19 14:37:08 2010 @@ -285,6 +285,8 @@ Library ------- +- Issue #8024: Update the Unicode database to 5.2. + - Issue #8168: py_compile now handles files with utf-8 BOMS. - ``tokenize.detect_encoding`` now returns ``'utf-8-sig'`` when a UTF-8 BOM is Modified: python/branches/py3k/Modules/unicodedata_db.h ============================================================================== --- python/branches/py3k/Modules/unicodedata_db.h (original) +++ python/branches/py3k/Modules/unicodedata_db.h Fri Mar 19 14:37:08 2010 @@ -1,6 +1,6 @@ /* this file was generated by Tools/unicode/makeunicodedata.py 2.6 */ -#define UNIDATA_VERSION "5.1.0" +#define UNIDATA_VERSION "5.2.0" /* a list of unique database records */ const _PyUnicode_DatabaseRecord _PyUnicode_Database_Records[] = { {0, 0, 0, 0, 0, 0}, @@ -178,6 +178,7 @@ {8, 0, 1, 0, 5, 0}, {14, 0, 1, 0, 5, 0}, {5, 9, 1, 0, 5, 0}, + {4, 1, 14, 0, 5, 0}, {4, 234, 14, 0, 5, 0}, {4, 214, 14, 0, 5, 0}, {4, 202, 14, 0, 5, 0}, @@ -214,9 +215,9 @@ {27, 0, 19, 0, 5, 136}, {22, 0, 19, 1, 5, 136}, {23, 0, 19, 1, 5, 136}, + {18, 0, 1, 0, 4, 136}, {28, 0, 11, 0, 5, 136}, {28, 0, 11, 0, 1, 0}, - {4, 1, 14, 0, 5, 0}, {30, 0, 19, 0, 5, 136}, {30, 0, 19, 0, 4, 136}, {1, 0, 1, 0, 4, 170}, @@ -264,6 +265,7 @@ {30, 0, 1, 0, 2, 0}, {9, 0, 1, 0, 2, 136}, {30, 0, 1, 0, 2, 136}, + {30, 0, 1, 0, 4, 0}, {9, 0, 19, 0, 2, 136}, {29, 0, 1, 0, 5, 0}, {15, 0, 1, 0, 5, 0}, @@ -314,17 +316,18 @@ {14, 0, 19, 0, 5, 0}, {8, 0, 19, 0, 5, 0}, {9, 0, 4, 0, 5, 0}, + {9, 0, 12, 0, 5, 0}, {30, 0, 1, 0, 5, 170}, {5, 216, 1, 0, 5, 0}, {5, 226, 1, 0, 5, 0}, {27, 0, 1, 0, 5, 136}, - {27, 0, 1, 1, 5, 136}, {7, 0, 9, 0, 5, 136}, + {30, 0, 1, 0, 5, 136}, }; /* Reindexing of NFC first characters. */ -#define TOTAL_FIRST 367 -#define TOTAL_LAST 54 +#define TOTAL_FIRST 370 +#define TOTAL_LAST 55 struct reindex{int start;short count,index;}; static struct reindex nfc_first[] = { { 60, 2, 0}, @@ -530,6 +533,9 @@ { 12507, 0, 361}, { 12527, 3, 362}, { 12541, 0, 366}, + { 69785, 0, 367}, + { 69787, 0, 368}, + { 69797, 0, 369}, {0,0,0} }; @@ -565,6 +571,7 @@ { 4142, 0, 50}, { 6965, 0, 51}, { 12441, 1, 52}, + { 69818, 0, 54}, {0,0,0} }; @@ -658,1229 +665,1262 @@ /* index tables for the database records */ #define SHIFT 7 static unsigned char index1[] = { - 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 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, 40, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 16, 50, 51, 52, - 16, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, - 70, 71, 72, 73, 74, 75, 75, 76, 77, 78, 79, 80, 16, 81, 82, 83, 84, 85, - 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 97, 97, 97, 97, 97, 97, - 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, - 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, - 97, 97, 97, 97, 97, 97, 97, 97, 98, 97, 97, 97, 97, 97, 97, 97, 97, 97, - 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, - 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, - 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, - 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, - 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, - 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, - 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, - 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, - 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 99, 100, 97, 97, 97, 97, 97, 97, - 97, 97, 101, 40, 40, 102, 103, 104, 105, 106, 107, 108, 16, 109, 16, 16, - 16, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, - 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, - 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, - 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, - 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, - 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, - 110, 110, 110, 111, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, - 112, 112, 112, 112, 112, 112, 113, 113, 113, 113, 113, 113, 113, 113, - 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, - 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, - 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, - 114, 114, 115, 116, 117, 118, 119, 119, 120, 121, 122, 123, 124, 125, - 126, 127, 128, 129, 16, 130, 131, 132, 133, 134, 16, 16, 16, 16, 16, 16, - 135, 16, 136, 16, 137, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 40, 40, 40, 40, 40, - 40, 138, 16, 139, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 75, 140, 141, 142, 143, 16, 144, 16, 145, 146, 147, - 148, 149, 150, 151, 152, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 153, 154, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 97, 97, 97, 97, - 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, - 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, - 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, - 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, - 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, - 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, - 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, - 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, - 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, - 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, - 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, - 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, - 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, - 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, - 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, - 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, - 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, - 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, - 97, 97, 97, 97, 97, 155, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 114, 114, 114, 114, 156, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 157, 16, 158, 159, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 113, 113, 113, 113, 113, - 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, - 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, - 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, - 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, - 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, - 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, - 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, - 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, - 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, - 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, - 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, - 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, - 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, - 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, - 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, - 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, - 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, - 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, - 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, - 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, - 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, - 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, - 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, - 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, - 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, - 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, - 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, - 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, - 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, - 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, - 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, - 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, - 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, - 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, - 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, - 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, - 113, 113, 160, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, - 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, - 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, - 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, - 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, - 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, - 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, - 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, - 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, - 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, - 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, - 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, - 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, - 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, - 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, - 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, - 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, - 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, - 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, - 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, - 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, - 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, - 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, - 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, - 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, - 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, - 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, - 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, - 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, - 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, - 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, - 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, - 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, - 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, - 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, - 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, - 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 160, -}; - -static unsigned short index2[] = { - 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 3, 2, 4, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 3, 3, 3, 2, 5, 6, 6, 7, 8, 7, 6, 6, 9, 10, 6, 11, 12, 13, 12, - 12, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 12, 6, 15, 16, 15, 6, 6, 17, + 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, 41, 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, 78, 79, 80, 81, 82, 83, 17, 84, 85, 86, 87, 88, + 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 100, 100, 100, 100, 100, + 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, + 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, + 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, + 100, 100, 100, 101, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, + 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, + 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, + 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, + 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, + 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, + 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, + 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, + 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, + 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, + 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, + 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 102, + 103, 100, 100, 100, 100, 100, 100, 100, 100, 104, 41, 41, 105, 106, 107, + 108, 109, 110, 111, 112, 113, 114, 17, 115, 116, 116, 116, 116, 116, 116, + 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, + 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, + 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, + 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, + 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, + 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 117, 118, 118, + 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, + 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, + 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, + 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, + 119, 119, 119, 119, 119, 119, 119, 119, 120, 120, 121, 122, 123, 124, + 125, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 17, 136, 137, + 138, 139, 140, 17, 17, 17, 17, 17, 17, 141, 17, 142, 17, 143, 17, 144, + 17, 145, 17, 17, 17, 146, 17, 17, 17, 17, 147, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 9, 6, 10, 18, 19, 18, 20, 20, 20, 20, 20, 20, - 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, - 20, 20, 9, 16, 10, 16, 1, 1, 1, 1, 1, 1, 3, 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, 21, 22, 8, 8, 23, 8, 24, - 25, 26, 27, 28, 29, 16, 30, 25, 31, 32, 33, 34, 34, 26, 35, 25, 22, 26, - 34, 28, 36, 37, 37, 37, 22, 38, 38, 38, 38, 38, 38, 39, 38, 38, 38, 38, - 38, 38, 38, 38, 38, 39, 38, 38, 38, 38, 38, 38, 40, 39, 38, 38, 38, 38, - 38, 39, 41, 42, 42, 43, 43, 43, 43, 41, 43, 42, 42, 42, 43, 42, 42, 43, - 43, 41, 43, 42, 42, 43, 43, 43, 40, 41, 42, 42, 43, 42, 43, 41, 43, 38, - 42, 38, 43, 38, 43, 38, 43, 38, 43, 38, 43, 38, 43, 38, 43, 44, 41, 38, - 42, 38, 43, 38, 43, 38, 43, 38, 42, 38, 43, 38, 43, 38, 43, 38, 43, 38, - 43, 39, 41, 38, 43, 38, 42, 38, 43, 38, 43, 38, 41, 45, 28, 38, 43, 38, - 43, 41, 38, 43, 38, 43, 38, 43, 45, 28, 39, 41, 38, 42, 38, 43, 38, 42, - 28, 39, 41, 38, 42, 38, 43, 38, 43, 39, 41, 38, 43, 38, 43, 38, 43, 38, - 43, 38, 43, 38, 43, 38, 43, 38, 43, 38, 43, 39, 41, 38, 43, 38, 42, 38, - 43, 38, 43, 38, 43, 38, 43, 38, 43, 38, 43, 38, 38, 43, 38, 43, 38, 43, - 35, 46, 44, 44, 46, 44, 46, 44, 44, 46, 44, 44, 44, 46, 46, 44, 44, 44, - 44, 46, 44, 44, 46, 44, 44, 44, 46, 46, 46, 44, 44, 46, 44, 38, 43, 44, - 46, 44, 46, 44, 44, 46, 44, 46, 46, 44, 46, 44, 38, 43, 44, 44, 44, 46, - 44, 46, 44, 44, 46, 46, 47, 44, 46, 46, 46, 47, 47, 47, 47, 48, 49, 35, - 48, 49, 35, 48, 49, 35, 38, 42, 38, 42, 38, 42, 38, 42, 38, 42, 38, 42, - 38, 42, 38, 42, 46, 38, 43, 38, 43, 38, 43, 44, 46, 38, 43, 38, 43, 38, - 43, 38, 43, 38, 43, 43, 48, 49, 35, 38, 43, 44, 44, 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, 46, 38, 43, 44, - 46, 44, 46, 44, 46, 38, 43, 38, 43, 38, 43, 38, 43, 38, 43, 38, 43, 38, - 43, 46, 46, 46, 46, 46, 46, 44, 44, 46, 44, 44, 46, 46, 44, 46, 44, 44, - 44, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 46, 41, 46, 46, 46, 46, 46, - 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 41, 46, 46, 46, 46, 46, 46, 46, - 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, - 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, - 46, 46, 46, 46, 46, 46, 46, 47, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, - 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 50, - 50, 50, 50, 50, 50, 50, 50, 50, 51, 51, 52, 52, 52, 52, 52, 52, 52, 53, - 53, 54, 53, 51, 55, 51, 55, 55, 55, 51, 55, 51, 51, 56, 52, 53, 53, 53, - 53, 53, 53, 26, 26, 26, 26, 57, 26, 53, 54, 50, 50, 50, 50, 50, 53, 53, - 53, 53, 53, 53, 53, 51, 53, 52, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, - 53, 53, 53, 53, 53, 53, 53, 58, 58, 58, 58, 58, 59, 58, 58, 58, 58, 58, - 58, 58, 59, 59, 58, 59, 58, 59, 58, 58, 60, 61, 61, 61, 61, 60, 62, 61, - 61, 61, 61, 61, 63, 63, 64, 64, 64, 64, 65, 65, 61, 61, 61, 61, 64, 64, - 61, 64, 64, 61, 61, 66, 66, 66, 66, 67, 61, 61, 61, 61, 59, 59, 59, 68, - 68, 58, 68, 68, 69, 59, 61, 61, 61, 59, 59, 59, 61, 61, 70, 59, 59, 59, - 61, 61, 61, 61, 59, 60, 61, 61, 59, 71, 72, 72, 71, 72, 72, 71, 59, 59, - 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 44, 46, 44, 46, 73, 53, 44, - 46, 0, 0, 50, 46, 46, 46, 74, 0, 0, 0, 0, 0, 57, 75, 38, 74, 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, - 46, 41, 41, 41, 41, 41, 41, 41, 43, 43, 43, 43, 43, 44, 35, 35, 48, 76, - 76, 35, 35, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, - 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 35, 35, 35, 46, 48, 35, 77, 44, - 46, 48, 44, 46, 46, 44, 44, 44, 38, 78, 44, 38, 44, 44, 44, 38, 44, 44, - 44, 44, 38, 38, 38, 44, 39, 39, 39, 39, 39, 39, 39, 39, 39, 78, 39, 39, - 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, - 39, 39, 41, 41, 41, 41, 41, 41, 41, 41, 41, 42, 41, 41, 41, 41, 41, 41, - 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 43, 42, - 46, 43, 46, 46, 46, 43, 46, 46, 46, 46, 43, 43, 43, 46, 44, 46, 44, 46, - 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, - 38, 43, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 79, 80, 80, 80, 80, 80, - 81, 81, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, - 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, - 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, - 44, 46, 44, 38, 43, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 46, - 38, 43, 38, 43, 44, 46, 38, 43, 44, 46, 38, 43, 38, 43, 38, 43, 44, 46, - 38, 43, 38, 43, 38, 43, 44, 46, 38, 43, 38, 43, 38, 43, 38, 43, 38, 43, - 38, 43, 44, 46, 38, 43, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, - 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, - 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 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, 0, 0, 52, 82, 82, 82, 82, 82, 82, 0, 46, 46, 46, - 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, - 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 35, - 0, 82, 83, 0, 0, 0, 0, 0, 0, 84, 80, 80, 80, 80, 84, 80, 80, 80, 85, 84, - 80, 80, 80, 80, 80, 80, 84, 84, 84, 84, 84, 84, 80, 80, 84, 80, 80, 85, - 86, 80, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 96, 97, 98, 99, 100, 101, - 102, 103, 104, 102, 80, 84, 102, 95, 0, 0, 0, 0, 0, 0, 0, 0, 105, 105, - 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, - 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 0, 0, 0, 0, 0, - 105, 105, 105, 102, 102, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 106, 106, 106, - 106, 0, 0, 77, 77, 107, 108, 108, 109, 110, 111, 27, 27, 80, 80, 80, 80, - 80, 80, 80, 80, 112, 113, 114, 111, 0, 0, 111, 111, 0, 115, 116, 116, - 116, 116, 116, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, - 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, - 117, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 118, 119, 120, - 112, 113, 114, 121, 122, 123, 123, 124, 84, 80, 80, 80, 80, 80, 84, 80, - 80, 0, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 108, 126, 126, - 111, 115, 115, 127, 115, 115, 115, 115, 128, 128, 128, 128, 115, 115, - 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, - 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, - 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, - 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, - 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 116, - 115, 116, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, - 115, 115, 115, 115, 116, 111, 115, 80, 80, 80, 80, 80, 80, 80, 106, 81, - 80, 80, 80, 80, 84, 80, 117, 117, 80, 80, 27, 84, 80, 80, 84, 115, 115, - 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 115, 115, 115, 130, - 130, 115, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, - 111, 111, 0, 131, 115, 132, 115, 115, 115, 115, 115, 115, 115, 115, 115, - 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, - 115, 115, 115, 115, 115, 115, 115, 80, 84, 80, 80, 84, 80, 80, 84, 84, - 84, 80, 84, 84, 80, 84, 80, 80, 80, 84, 80, 84, 80, 84, 80, 84, 80, 80, - 0, 0, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, - 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, - 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, - 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, - 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, - 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, - 115, 115, 115, 115, 115, 115, 133, 133, 133, 133, 133, 133, 133, 133, - 133, 133, 133, 115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 134, 134, - 134, 134, 134, 134, 134, 134, 134, 134, 105, 105, 105, 105, 105, 105, - 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, - 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 80, 80, - 80, 80, 80, 80, 80, 84, 80, 135, 135, 27, 136, 136, 136, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 133, 133, 137, 47, 47, 47, 47, 47, 47, 47, - 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, - 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 138, 47, 47, 47, 47, 47, - 47, 47, 138, 47, 47, 138, 47, 47, 47, 47, 47, 0, 0, 139, 47, 137, 137, - 137, 133, 133, 133, 133, 133, 133, 133, 133, 137, 137, 137, 137, 140, 0, - 0, 47, 80, 84, 80, 80, 0, 0, 0, 141, 141, 141, 141, 141, 141, 141, 141, - 47, 47, 133, 133, 82, 82, 142, 142, 142, 142, 142, 142, 142, 142, 142, - 142, 82, 52, 47, 0, 0, 0, 0, 0, 0, 0, 0, 47, 47, 47, 47, 47, 0, 133, 137, - 137, 0, 47, 47, 47, 47, 47, 47, 47, 47, 0, 0, 47, 47, 0, 0, 47, 47, 47, - 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, - 47, 0, 47, 47, 47, 47, 47, 47, 47, 0, 47, 0, 0, 0, 47, 47, 47, 47, 0, 0, - 143, 47, 144, 137, 137, 133, 133, 133, 133, 0, 0, 137, 137, 0, 0, 145, - 145, 140, 47, 0, 0, 0, 0, 0, 0, 0, 0, 144, 0, 0, 0, 0, 141, 141, 0, 141, - 47, 47, 133, 133, 0, 0, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, - 47, 47, 146, 146, 147, 147, 147, 147, 147, 147, 79, 0, 0, 0, 0, 0, 0, - 133, 133, 137, 0, 47, 47, 47, 47, 47, 47, 0, 0, 0, 0, 47, 47, 0, 0, 47, - 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, - 47, 47, 47, 0, 47, 47, 47, 47, 47, 47, 47, 0, 47, 141, 0, 47, 141, 0, 47, - 47, 0, 0, 143, 0, 137, 137, 137, 133, 133, 0, 0, 0, 0, 133, 133, 0, 0, - 133, 133, 140, 0, 0, 0, 133, 0, 0, 0, 0, 0, 0, 0, 141, 141, 141, 47, 0, - 141, 0, 0, 0, 0, 0, 0, 0, 142, 142, 142, 142, 142, 142, 142, 142, 142, - 142, 133, 133, 47, 47, 47, 133, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 133, - 133, 137, 0, 47, 47, 47, 47, 47, 47, 47, 47, 47, 0, 47, 47, 47, 0, 47, - 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, - 47, 47, 47, 0, 47, 47, 47, 47, 47, 47, 47, 0, 47, 47, 0, 47, 47, 47, 47, - 47, 0, 0, 143, 47, 137, 137, 137, 133, 133, 133, 133, 133, 0, 133, 133, - 137, 0, 137, 137, 140, 0, 0, 47, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 47, 47, 133, 133, 0, 0, 142, 142, 142, 142, 142, 142, 142, 142, - 142, 142, 0, 146, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 133, 137, - 137, 0, 47, 47, 47, 47, 47, 47, 47, 47, 0, 0, 47, 47, 0, 0, 47, 47, 47, - 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, - 47, 0, 47, 47, 47, 47, 47, 47, 47, 0, 47, 47, 0, 47, 47, 47, 47, 47, 0, - 0, 143, 47, 144, 133, 137, 133, 133, 133, 133, 0, 0, 137, 145, 0, 0, 145, - 145, 140, 0, 0, 0, 0, 0, 0, 0, 0, 148, 144, 0, 0, 0, 0, 141, 141, 0, 47, - 47, 47, 133, 133, 0, 0, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, - 79, 47, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 133, 47, 0, 47, - 47, 47, 47, 47, 47, 0, 0, 0, 47, 47, 47, 0, 47, 47, 138, 47, 0, 0, 0, 47, - 47, 0, 47, 0, 47, 47, 0, 0, 0, 47, 47, 0, 0, 0, 47, 47, 47, 0, 0, 0, 47, - 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 0, 0, 0, 0, 144, 137, 133, - 137, 137, 0, 0, 0, 137, 137, 137, 0, 145, 145, 145, 140, 0, 0, 47, 0, 0, - 0, 0, 0, 0, 144, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 142, 142, 142, - 142, 142, 142, 142, 142, 142, 142, 147, 147, 147, 27, 27, 27, 27, 27, 27, - 146, 27, 0, 0, 0, 0, 0, 0, 137, 137, 137, 0, 47, 47, 47, 47, 47, 47, 47, - 47, 0, 47, 47, 47, 0, 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, 47, 47, 47, 47, 47, 47, - 47, 47, 47, 0, 47, 47, 47, 47, 47, 0, 0, 0, 47, 133, 133, 133, 137, 137, - 137, 137, 0, 133, 133, 149, 0, 133, 133, 133, 140, 0, 0, 0, 0, 0, 0, 0, - 150, 151, 0, 47, 47, 0, 0, 0, 0, 0, 0, 47, 47, 133, 133, 0, 0, 142, 142, - 142, 142, 142, 142, 142, 142, 142, 142, 0, 0, 0, 0, 0, 0, 0, 0, 152, 152, - 152, 152, 152, 152, 152, 79, 0, 0, 137, 137, 0, 47, 47, 47, 47, 47, 47, - 47, 47, 0, 47, 47, 47, 0, 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, 47, 47, 47, 47, 47, - 47, 47, 47, 47, 0, 47, 47, 47, 47, 47, 0, 0, 143, 47, 137, 153, 145, 137, - 144, 137, 137, 0, 153, 145, 145, 0, 145, 145, 133, 140, 0, 0, 0, 0, 0, 0, - 0, 144, 144, 0, 0, 0, 0, 0, 0, 0, 47, 0, 47, 47, 133, 133, 0, 0, 142, - 142, 142, 142, 142, 142, 142, 142, 142, 142, 0, 27, 27, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 137, 137, 0, 47, 47, 47, 47, 47, 47, 47, 47, - 0, 47, 47, 47, 0, 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, 47, 47, 47, 47, 47, 47, 47, - 47, 47, 47, 47, 47, 47, 47, 47, 0, 0, 0, 47, 144, 137, 137, 133, 133, - 133, 133, 0, 137, 137, 137, 0, 145, 145, 145, 140, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 144, 0, 0, 0, 0, 0, 0, 0, 0, 47, 47, 133, 133, 0, 0, 142, 142, 142, - 142, 142, 142, 142, 142, 142, 142, 147, 147, 147, 147, 147, 147, 0, 0, 0, - 79, 47, 47, 47, 47, 47, 47, 0, 0, 137, 137, 0, 47, 47, 47, 47, 47, 47, - 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 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, 0, 47, 47, 47, 47, 47, 47, 47, 47, 47, 0, 47, 0, 0, 47, 47, 47, - 47, 47, 47, 47, 0, 0, 0, 154, 0, 0, 0, 0, 144, 137, 137, 133, 133, 133, - 0, 133, 0, 137, 137, 145, 137, 145, 145, 145, 144, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 137, 137, 82, 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, 47, 47, 47, 47, 47, 47, 47, 47, 133, 47, 155, - 133, 133, 133, 133, 156, 156, 140, 0, 0, 0, 0, 146, 47, 47, 47, 47, 47, - 47, 52, 133, 157, 157, 157, 157, 133, 133, 133, 82, 142, 142, 142, 142, - 142, 142, 142, 142, 142, 142, 82, 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, 47, 47, 0, 47, 0, 0, 47, 47, 0, 47, 0, 0, 47, 0, 0, 0, 0, 0, 0, 47, - 47, 47, 47, 0, 47, 47, 47, 47, 47, 47, 47, 0, 47, 47, 47, 0, 47, 0, 47, - 0, 0, 47, 47, 0, 47, 47, 47, 47, 133, 47, 155, 133, 133, 133, 133, 158, - 158, 0, 133, 133, 47, 0, 0, 47, 47, 47, 47, 47, 0, 52, 0, 159, 159, 159, - 159, 133, 133, 0, 0, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 0, - 0, 155, 155, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 79, 79, 79, 82, 82, 82, 82, - 82, 82, 82, 82, 160, 82, 82, 82, 82, 82, 82, 79, 79, 79, 79, 79, 84, 84, - 79, 79, 79, 79, 79, 79, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, - 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 79, 84, 79, 84, 79, - 161, 162, 163, 162, 163, 137, 137, 47, 47, 47, 141, 47, 47, 47, 47, 0, - 47, 47, 47, 47, 141, 47, 47, 47, 47, 141, 47, 47, 47, 47, 141, 47, 47, - 47, 47, 141, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 141, 47, 47, - 47, 0, 0, 0, 0, 164, 165, 166, 167, 166, 166, 168, 166, 168, 165, 165, - 165, 165, 133, 137, 165, 166, 80, 80, 140, 82, 80, 80, 47, 47, 47, 47, 0, - 0, 0, 0, 133, 133, 133, 166, 133, 133, 133, 133, 0, 133, 133, 133, 133, - 166, 133, 133, 133, 133, 166, 133, 133, 133, 133, 166, 133, 133, 133, - 133, 166, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, - 166, 133, 133, 133, 0, 79, 79, 79, 79, 79, 79, 79, 79, 84, 79, 79, 79, - 79, 79, 79, 0, 79, 79, 82, 82, 82, 82, 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, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, - 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, - 47, 47, 47, 47, 47, 47, 47, 47, 47, 138, 47, 47, 47, 47, 137, 137, 133, - 148, 133, 133, 137, 133, 133, 133, 133, 133, 143, 137, 140, 140, 137, - 137, 133, 133, 47, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 82, - 82, 82, 82, 82, 82, 47, 47, 47, 47, 47, 47, 137, 137, 133, 133, 47, 47, - 47, 47, 133, 133, 133, 47, 137, 137, 137, 47, 47, 137, 137, 137, 137, - 137, 137, 137, 47, 47, 47, 133, 133, 133, 133, 47, 47, 47, 47, 47, 47, - 47, 47, 47, 47, 47, 47, 47, 133, 137, 137, 133, 133, 137, 137, 137, 137, - 137, 137, 84, 47, 137, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, - 0, 0, 0, 0, 79, 79, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, - 44, 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, 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, 82, 50, 0, 0, 0, 169, 169, 169, 169, 169, 169, 169, 169, 169, - 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, - 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, - 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, - 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, - 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, - 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 0, 0, 0, 0, 0, - 169, 47, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, - 170, 170, 170, 170, 170, 170, 170, 170, 47, 47, 47, 47, 47, 47, 47, 47, - 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 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, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, - 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, - 170, 170, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, - 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 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, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, - 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, - 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, - 47, 47, 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, 47, 47, 47, 0, 0, 47, 47, 47, 47, - 47, 47, 47, 0, 47, 0, 47, 47, 47, 47, 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, 0, 47, - 47, 47, 47, 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, 0, 47, 47, 47, 47, 0, 0, 47, 47, 47, 47, 47, 47, 47, 0, 47, 0, 47, - 47, 47, 47, 0, 0, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, - 47, 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, 0, 47, 47, 47, 47, 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, 0, 0, 0, 0, 80, 79, 82, 82, 82, 82, 82, 82, 82, - 82, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, - 147, 147, 147, 147, 147, 147, 0, 0, 0, 47, 47, 47, 47, 47, 47, 47, 47, - 47, 47, 47, 47, 47, 47, 47, 47, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, - 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, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 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, 47, 47, 47, 47, 47, 47, 47, - 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, - 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, - 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, - 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, - 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, - 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, - 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, - 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, - 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, - 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, - 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, - 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, - 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, - 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, - 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, - 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, - 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, - 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 82, 82, 47, 47, 47, 47, 47, - 47, 47, 47, 0, 0, 0, 0, 0, 0, 0, 0, 0, 171, 47, 47, 47, 47, 47, 47, 47, - 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, - 47, 162, 163, 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, 47, 82, 82, 82, 172, 172, 172, 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, 0, 47, 47, 47, 47, 133, 133, 140, 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, 133, 133, 140, 82, 82, 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, 133, 133, 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, 0, 47, 47, 47, 0, 133, 133, 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, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 173, 173, - 137, 133, 133, 133, 133, 133, 133, 133, 137, 137, 137, 137, 137, 137, - 137, 137, 133, 137, 137, 133, 133, 133, 133, 133, 133, 133, 133, 133, - 140, 133, 82, 82, 82, 52, 82, 82, 82, 146, 47, 80, 0, 0, 142, 142, 142, - 142, 142, 142, 142, 142, 142, 142, 0, 0, 0, 0, 0, 0, 152, 152, 152, 152, - 152, 152, 152, 152, 152, 152, 0, 0, 0, 0, 0, 0, 136, 136, 136, 136, 136, - 136, 83, 136, 136, 136, 136, 133, 133, 133, 171, 0, 142, 142, 142, 142, - 142, 142, 142, 142, 142, 142, 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, 52, 47, 47, 47, 47, 47, 47, - 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, - 47, 47, 47, 47, 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, 47, 47, - 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, - 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, - 47, 47, 47, 86, 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, 47, 47, 47, 47, - 47, 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, 133, 133, 133, 137, 137, 137, 137, - 133, 133, 137, 137, 137, 0, 0, 0, 0, 137, 137, 133, 137, 137, 137, 137, - 137, 137, 85, 80, 84, 0, 0, 0, 0, 27, 0, 0, 0, 136, 136, 142, 142, 142, - 142, 142, 142, 142, 142, 142, 142, 47, 47, 47, 47, 47, 47, 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, 47, 47, 47, 47, 47, 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, 47, 47, 0, 0, 0, 0, 0, 0, 137, 137, 137, 137, 137, 137, - 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 47, 47, 47, 47, - 47, 47, 47, 137, 137, 0, 0, 0, 0, 0, 0, 142, 142, 142, 142, 142, 142, - 142, 142, 142, 142, 0, 0, 0, 0, 136, 136, 27, 27, 27, 27, 27, 27, 27, 27, - 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, - 27, 27, 27, 27, 27, 27, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, - 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 80, 84, 137, 137, 137, 0, 0, - 82, 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, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 133, 133, 133, 133, 137, 47, 138, 47, 138, 47, 138, 47, 138, 47, - 138, 47, 47, 47, 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, 143, 144, 133, 133, 133, 133, 133, 145, 133, 145, 137, 137, 145, - 145, 133, 145, 174, 47, 47, 47, 47, 47, 47, 47, 0, 0, 0, 0, 142, 142, - 142, 142, 142, 142, 142, 142, 142, 142, 82, 82, 82, 82, 82, 82, 82, 79, - 79, 79, 79, 79, 79, 79, 79, 79, 79, 80, 84, 80, 80, 80, 80, 80, 80, 80, - 79, 79, 79, 79, 79, 79, 79, 79, 79, 0, 0, 0, 133, 133, 137, 47, 47, 47, - 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, - 47, 47, 47, 47, 47, 47, 47, 47, 47, 137, 133, 133, 133, 133, 137, 137, - 133, 133, 174, 0, 0, 0, 47, 47, 142, 142, 142, 142, 142, 142, 142, 142, - 142, 142, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 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, 137, 137, 137, 137, 137, 137, 137, 137, 133, 133, 133, 133, 133, 133, - 133, 133, 137, 137, 133, 143, 0, 0, 0, 82, 82, 82, 82, 82, 142, 142, 142, - 142, 142, 142, 142, 142, 142, 142, 0, 0, 0, 47, 47, 47, 142, 142, 142, - 142, 142, 142, 142, 142, 142, 142, 47, 47, 47, 47, 47, 47, 47, 47, 47, - 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, - 47, 47, 47, 52, 52, 52, 52, 52, 52, 82, 82, 46, 46, 46, 46, 46, 46, 46, - 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, - 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, - 46, 50, 50, 50, 52, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 52, 50, - 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 52, - 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, - 50, 35, 35, 35, 35, 35, 35, 35, 35, 35, 46, 46, 46, 46, 46, 46, 46, 46, - 46, 46, 46, 46, 46, 50, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, - 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, - 46, 46, 46, 46, 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, 80, 80, 84, 80, 80, 80, 80, 80, 80, 80, 84, 80, 80, - 175, 176, 84, 177, 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, 80, 84, 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, 178, 46, 46, 44, 46, 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, 46, 44, 46, 44, 46, 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, 179, 43, 179, - 43, 179, 43, 179, 43, 179, 43, 179, 43, 179, 0, 0, 43, 43, 43, 43, 43, - 43, 43, 43, 180, 180, 180, 180, 180, 180, 180, 180, 43, 43, 43, 43, 43, - 43, 43, 43, 180, 180, 180, 180, 180, 180, 180, 180, 43, 43, 43, 43, 43, - 43, 43, 43, 180, 180, 180, 180, 180, 180, 180, 180, 43, 43, 43, 43, 43, - 0, 43, 43, 38, 38, 38, 181, 180, 57, 179, 57, 57, 75, 43, 43, 43, 0, 43, - 43, 38, 181, 38, 181, 180, 75, 75, 75, 43, 43, 43, 179, 0, 0, 43, 43, 38, - 38, 38, 181, 0, 75, 75, 75, 43, 43, 43, 179, 43, 43, 43, 43, 38, 38, 38, - 181, 38, 75, 182, 182, 0, 0, 43, 43, 43, 0, 43, 43, 38, 181, 38, 181, - 180, 182, 57, 0, 183, 183, 184, 184, 184, 184, 184, 184, 184, 184, 184, - 131, 131, 131, 173, 185, 186, 187, 83, 186, 186, 186, 22, 188, 189, 190, - 191, 192, 189, 190, 191, 192, 22, 22, 22, 136, 193, 193, 193, 22, 194, - 195, 196, 197, 198, 199, 200, 21, 201, 108, 201, 202, 203, 22, 188, 188, - 136, 29, 36, 22, 188, 136, 193, 204, 204, 136, 136, 136, 205, 162, 163, - 188, 188, 188, 136, 136, 136, 136, 136, 136, 136, 136, 77, 136, 204, 136, - 136, 188, 136, 136, 136, 136, 136, 136, 136, 184, 131, 131, 131, 131, - 131, 0, 0, 0, 0, 0, 131, 131, 131, 131, 131, 131, 206, 35, 0, 0, 34, 206, - 206, 206, 206, 206, 207, 207, 208, 209, 210, 28, 206, 34, 34, 34, 34, - 206, 206, 206, 206, 206, 207, 207, 208, 209, 210, 0, 50, 50, 50, 50, 50, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 146, 146, 146, 146, 146, 146, 146, 146, - 211, 212, 146, 146, 23, 146, 146, 146, 146, 146, 146, 146, 146, 146, 0, - 0, 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, 213, 213, 80, 80, 80, 80, 213, 213, 213, 80, 80, 81, 81, 81, - 81, 80, 81, 81, 81, 213, 213, 80, 84, 80, 213, 213, 84, 84, 84, 84, 80, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 214, 214, 48, 215, 27, 215, - 214, 48, 27, 215, 35, 48, 48, 48, 35, 35, 48, 48, 48, 28, 27, 48, 215, - 27, 27, 48, 48, 48, 48, 48, 27, 27, 214, 215, 215, 27, 48, 27, 216, 27, - 48, 27, 181, 216, 48, 48, 217, 35, 48, 48, 44, 48, 35, 155, 155, 155, - 155, 35, 27, 214, 35, 35, 48, 48, 218, 77, 77, 77, 77, 48, 35, 35, 35, - 35, 27, 77, 27, 27, 46, 79, 0, 0, 0, 37, 37, 219, 219, 219, 219, 219, - 219, 37, 37, 37, 37, 219, 220, 220, 220, 220, 220, 220, 220, 220, 220, - 220, 220, 220, 221, 221, 221, 221, 220, 220, 220, 220, 220, 220, 220, - 220, 220, 220, 221, 221, 221, 221, 221, 221, 172, 172, 172, 44, 46, 172, - 172, 172, 172, 0, 0, 0, 0, 0, 0, 0, 40, 40, 40, 40, 40, 25, 25, 25, 25, - 25, 222, 222, 27, 27, 27, 27, 77, 27, 27, 77, 27, 27, 77, 27, 27, 27, 27, - 27, 27, 27, 222, 27, 27, 27, 27, 27, 27, 27, 27, 27, 25, 25, 27, 27, 27, - 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 223, 222, - 222, 27, 27, 40, 27, 40, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, - 27, 27, 27, 27, 27, 27, 25, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, - 27, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 40, 224, 225, 225, - 226, 77, 77, 40, 225, 226, 224, 225, 226, 224, 77, 40, 77, 225, 227, 228, - 77, 225, 224, 77, 77, 77, 225, 224, 224, 225, 40, 225, 225, 224, 224, 40, - 226, 40, 226, 40, 40, 40, 40, 225, 229, 218, 225, 218, 218, 224, 224, - 224, 40, 40, 40, 40, 77, 224, 77, 224, 225, 225, 224, 224, 224, 226, 224, - 224, 226, 224, 224, 226, 225, 226, 224, 224, 225, 77, 77, 77, 77, 77, - 225, 224, 224, 224, 77, 77, 77, 77, 77, 77, 77, 77, 77, 224, 230, 40, - 226, 77, 225, 225, 225, 225, 224, 224, 225, 225, 77, 222, 230, 230, 226, - 226, 224, 224, 226, 226, 224, 224, 226, 226, 224, 224, 224, 224, 224, - 224, 226, 226, 225, 225, 226, 226, 225, 225, 226, 226, 224, 224, 224, 77, - 77, 224, 224, 224, 224, 77, 77, 40, 77, 77, 224, 40, 77, 77, 77, 77, 77, - 77, 77, 77, 224, 224, 77, 40, 224, 224, 224, 224, 224, 224, 226, 226, - 226, 226, 224, 224, 224, 224, 224, 224, 224, 224, 224, 77, 77, 77, 77, - 77, 224, 225, 77, 77, 77, 77, 77, 77, 77, 77, 77, 224, 224, 224, 224, - 224, 77, 77, 224, 224, 77, 77, 77, 77, 224, 224, 224, 224, 224, 224, 224, - 224, 224, 224, 226, 226, 226, 226, 224, 224, 224, 224, 224, 224, 226, - 226, 226, 226, 77, 77, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, - 224, 224, 224, 224, 224, 224, 27, 27, 27, 27, 27, 27, 27, 27, 224, 224, - 224, 224, 27, 27, 27, 27, 27, 27, 25, 27, 27, 27, 27, 27, 27, 27, 27, 27, - 27, 27, 27, 27, 224, 224, 27, 27, 27, 27, 27, 27, 27, 231, 232, 27, 27, - 27, 27, 27, 27, 27, 27, 27, 27, 27, 79, 79, 79, 79, 79, 79, 79, 79, 79, - 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, - 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, - 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, - 79, 79, 79, 79, 79, 79, 27, 77, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, - 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 79, 27, 27, 27, - 27, 27, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, - 77, 77, 77, 77, 77, 77, 77, 77, 77, 27, 27, 27, 27, 27, 27, 27, 27, 27, - 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, - 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 77, 77, 77, 77, 77, - 77, 27, 27, 27, 27, 27, 27, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, - 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, - 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 27, 27, 27, 27, 27, 27, 27, 27, - 27, 27, 27, 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, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, - 34, 34, 34, 34, 34, 34, 34, 233, 233, 233, 233, 233, 233, 233, 233, 233, - 233, 233, 233, 233, 233, 233, 233, 233, 233, 233, 233, 233, 233, 233, - 233, 233, 233, 233, 233, 233, 233, 233, 233, 233, 233, 233, 233, 233, - 233, 233, 233, 233, 233, 233, 233, 233, 233, 233, 233, 233, 233, 233, - 233, 233, 233, 233, 233, 233, 233, 233, 233, 233, 233, 233, 233, 233, - 233, 233, 233, 233, 233, 233, 233, 233, 233, 233, 233, 233, 233, 219, - 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, - 234, 234, 234, 234, 234, 234, 234, 25, 25, 25, 25, 25, 25, 25, 25, 25, - 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, - 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, - 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, - 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 27, 27, 27, 27, 25, - 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, - 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 27, - 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 25, 25, 25, 25, 25, 25, 25, - 25, 25, 25, 25, 25, 25, 25, 25, 25, 27, 27, 25, 25, 25, 25, 27, 27, 27, - 27, 27, 27, 27, 27, 27, 27, 25, 25, 27, 25, 25, 25, 25, 25, 25, 25, 27, - 27, 27, 27, 27, 27, 27, 27, 25, 25, 27, 27, 25, 40, 27, 27, 27, 27, 25, - 25, 27, 27, 25, 40, 27, 27, 27, 27, 25, 25, 25, 27, 27, 25, 27, 27, 25, - 25, 25, 25, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, - 27, 25, 25, 25, 25, 27, 27, 27, 27, 27, 27, 27, 27, 27, 25, 27, 27, 27, - 27, 27, 27, 27, 27, 77, 77, 77, 77, 77, 77, 77, 77, 27, 27, 27, 27, 27, - 25, 25, 27, 27, 25, 27, 27, 27, 27, 25, 25, 27, 27, 27, 27, 25, 25, 27, - 27, 27, 27, 27, 27, 25, 27, 25, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, - 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, - 27, 27, 27, 27, 27, 25, 27, 25, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, - 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, - 27, 25, 25, 27, 25, 25, 25, 27, 25, 25, 25, 25, 27, 25, 25, 27, 40, 27, - 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, - 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, - 27, 27, 27, 27, 27, 27, 27, 27, 27, 0, 0, 27, 27, 27, 27, 27, 27, 27, 27, - 27, 27, 27, 27, 79, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, - 27, 27, 27, 0, 0, 0, 27, 27, 27, 27, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 27, 27, 27, 27, 0, 27, 27, 27, 27, 0, 0, 27, 27, 27, 27, 27, 27, 27, - 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, - 27, 27, 27, 0, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, - 27, 27, 27, 27, 27, 27, 25, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, - 27, 27, 27, 0, 27, 0, 27, 27, 27, 27, 0, 0, 0, 27, 0, 27, 27, 27, 27, 27, - 27, 27, 0, 0, 27, 27, 27, 27, 27, 27, 27, 162, 163, 162, 163, 162, 163, - 162, 163, 162, 163, 162, 163, 162, 163, 234, 234, 234, 234, 234, 234, - 234, 234, 234, 234, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, - 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 27, 0, 0, 0, 27, 27, - 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, - 27, 27, 27, 27, 0, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, - 27, 0, 224, 77, 77, 224, 224, 162, 163, 77, 224, 224, 77, 0, 224, 0, 0, - 0, 77, 77, 77, 224, 224, 224, 224, 77, 77, 77, 77, 77, 224, 224, 224, 77, - 77, 77, 224, 224, 224, 224, 9, 10, 9, 10, 9, 10, 9, 10, 162, 163, 77, 77, - 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 79, 79, 79, 79, - 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, - 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, - 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, - 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, - 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, - 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, - 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 77, 77, - 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, - 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, - 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, - 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, - 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, - 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, - 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, - 77, 77, 77, 162, 163, 9, 10, 162, 163, 162, 163, 162, 163, 162, 163, 162, - 163, 162, 163, 162, 163, 162, 163, 162, 163, 77, 77, 224, 224, 224, 224, - 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, - 224, 224, 224, 77, 77, 77, 77, 77, 77, 77, 77, 224, 77, 77, 77, 77, 77, - 77, 77, 224, 224, 224, 224, 224, 224, 77, 77, 77, 224, 77, 77, 77, 77, - 224, 224, 224, 224, 224, 77, 224, 224, 77, 77, 162, 163, 162, 163, 224, - 77, 77, 77, 77, 224, 77, 224, 224, 224, 77, 77, 224, 224, 77, 77, 77, 77, - 77, 77, 77, 77, 77, 77, 224, 224, 224, 224, 224, 224, 77, 77, 162, 163, - 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 224, 224, 218, 224, 224, - 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 77, - 224, 224, 224, 224, 77, 77, 224, 77, 224, 77, 77, 224, 77, 224, 224, 224, - 224, 77, 77, 77, 77, 77, 224, 224, 77, 77, 77, 77, 77, 77, 224, 224, 224, - 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, - 77, 77, 77, 77, 77, 77, 224, 224, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, - 77, 224, 224, 77, 77, 77, 77, 224, 224, 224, 224, 77, 224, 224, 77, 77, - 224, 218, 208, 208, 77, 77, 224, 224, 224, 224, 224, 224, 224, 224, 224, - 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, - 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, - 224, 224, 224, 224, 224, 224, 77, 77, 224, 224, 224, 224, 224, 224, 224, - 224, 77, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, - 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, - 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 77, 77, - 77, 77, 77, 235, 77, 224, 77, 77, 77, 224, 224, 224, 224, 224, 77, 77, - 77, 77, 77, 224, 224, 224, 77, 77, 77, 77, 224, 77, 77, 77, 224, 224, - 224, 224, 224, 77, 224, 77, 77, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, - 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, - 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, - 27, 27, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, - 77, 77, 77, 77, 77, 27, 27, 77, 77, 77, 77, 77, 77, 0, 0, 0, 27, 27, 27, - 27, 27, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, + 17, 17, 17, 17, 17, 17, 41, 41, 41, 41, 41, 41, 148, 17, 149, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 41, 41, 41, 41, 41, 41, 41, 41, 150, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 78, 151, + 152, 153, 154, 17, 155, 17, 156, 157, 158, 159, 160, 161, 162, 163, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 164, 165, 166, 167, 168, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 100, 100, 100, 100, 100, 100, 100, 100, + 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, + 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, + 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, + 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, + 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, + 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, + 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, + 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, + 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, + 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, + 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, + 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, + 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, + 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, + 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, + 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, + 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, + 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, + 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, + 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, + 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, + 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, + 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, + 100, 100, 100, 169, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, + 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, + 100, 100, 100, 100, 100, 100, 100, 100, 170, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 120, 120, 120, + 120, 171, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 172, 17, 173, 174, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, + 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, + 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, + 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, + 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, + 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, + 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, + 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, + 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, + 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, + 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, + 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, + 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, + 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, + 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, + 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, + 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, + 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, + 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, + 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, + 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, + 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, + 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, + 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, + 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, + 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, + 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, + 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, + 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, + 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, + 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, + 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, + 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, + 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, + 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, + 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, + 119, 119, 119, 119, 119, 119, 119, 119, 175, 119, 119, 119, 119, 119, + 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, + 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, + 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, + 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, + 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, + 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, + 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, + 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, + 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, + 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, + 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, + 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, + 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, + 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, + 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, + 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, + 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, + 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, + 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, + 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, + 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, + 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, + 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, + 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, + 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, + 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, + 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, + 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, + 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, + 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, + 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, + 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, + 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, + 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, + 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, + 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, + 119, 119, 175, +}; + +static unsigned short index2[] = { + 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 3, 2, 4, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 3, 3, 3, 2, 5, 6, 6, 7, 8, 7, 6, 6, 9, 10, 6, 11, 12, 13, 12, + 12, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 12, 6, 15, 16, 15, 6, 6, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 9, 6, 10, 18, 19, 18, 20, 20, 20, 20, 20, 20, + 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, + 20, 20, 9, 16, 10, 16, 1, 1, 1, 1, 1, 1, 3, 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, 21, 22, 8, 8, 23, 8, 24, + 25, 26, 27, 28, 29, 16, 30, 25, 31, 32, 33, 34, 34, 26, 35, 25, 22, 26, + 34, 28, 36, 37, 37, 37, 22, 38, 38, 38, 38, 38, 38, 39, 38, 38, 38, 38, + 38, 38, 38, 38, 38, 39, 38, 38, 38, 38, 38, 38, 40, 39, 38, 38, 38, 38, + 38, 39, 41, 42, 42, 43, 43, 43, 43, 41, 43, 42, 42, 42, 43, 42, 42, 43, + 43, 41, 43, 42, 42, 43, 43, 43, 40, 41, 42, 42, 43, 42, 43, 41, 43, 38, + 42, 38, 43, 38, 43, 38, 43, 38, 43, 38, 43, 38, 43, 38, 43, 44, 41, 38, + 42, 38, 43, 38, 43, 38, 43, 38, 42, 38, 43, 38, 43, 38, 43, 38, 43, 38, + 43, 39, 41, 38, 43, 38, 42, 38, 43, 38, 43, 38, 41, 45, 28, 38, 43, 38, + 43, 41, 38, 43, 38, 43, 38, 43, 45, 28, 39, 41, 38, 42, 38, 43, 38, 42, + 28, 39, 41, 38, 42, 38, 43, 38, 43, 39, 41, 38, 43, 38, 43, 38, 43, 38, + 43, 38, 43, 38, 43, 38, 43, 38, 43, 38, 43, 39, 41, 38, 43, 38, 42, 38, + 43, 38, 43, 38, 43, 38, 43, 38, 43, 38, 43, 38, 38, 43, 38, 43, 38, 43, + 35, 46, 44, 44, 46, 44, 46, 44, 44, 46, 44, 44, 44, 46, 46, 44, 44, 44, + 44, 46, 44, 44, 46, 44, 44, 44, 46, 46, 46, 44, 44, 46, 44, 38, 43, 44, + 46, 44, 46, 44, 44, 46, 44, 46, 46, 44, 46, 44, 38, 43, 44, 44, 44, 46, + 44, 46, 44, 44, 46, 46, 47, 44, 46, 46, 46, 47, 47, 47, 47, 48, 49, 35, + 48, 49, 35, 48, 49, 35, 38, 42, 38, 42, 38, 42, 38, 42, 38, 42, 38, 42, + 38, 42, 38, 42, 46, 38, 43, 38, 43, 38, 43, 44, 46, 38, 43, 38, 43, 38, + 43, 38, 43, 38, 43, 43, 48, 49, 35, 38, 43, 44, 44, 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, 46, 38, 43, 44, + 46, 44, 46, 44, 46, 38, 43, 38, 43, 38, 43, 38, 43, 38, 43, 38, 43, 38, + 43, 46, 46, 46, 46, 46, 46, 44, 44, 46, 44, 44, 46, 46, 44, 46, 44, 44, + 44, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 46, 41, 46, 46, 46, 46, 46, + 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 41, 46, 46, 46, 46, 46, 46, 46, + 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, + 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, + 46, 46, 46, 46, 46, 46, 46, 47, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, + 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 50, + 50, 50, 50, 50, 50, 50, 50, 50, 51, 51, 52, 52, 52, 52, 52, 52, 52, 53, + 53, 54, 53, 51, 55, 51, 55, 55, 55, 51, 55, 51, 51, 56, 52, 53, 53, 53, + 53, 53, 53, 26, 26, 26, 26, 57, 26, 53, 54, 50, 50, 50, 50, 50, 53, 53, + 53, 53, 53, 53, 53, 51, 53, 52, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, + 53, 53, 53, 53, 53, 53, 53, 58, 58, 58, 58, 58, 59, 58, 58, 58, 58, 58, + 58, 58, 59, 59, 58, 59, 58, 59, 58, 58, 60, 61, 61, 61, 61, 60, 62, 61, + 61, 61, 61, 61, 63, 63, 64, 64, 64, 64, 65, 65, 61, 61, 61, 61, 64, 64, + 61, 64, 64, 61, 61, 66, 66, 66, 66, 67, 61, 61, 61, 61, 59, 59, 59, 68, + 68, 58, 68, 68, 69, 59, 61, 61, 61, 59, 59, 59, 61, 61, 70, 59, 59, 59, + 61, 61, 61, 61, 59, 60, 61, 61, 59, 71, 72, 72, 71, 72, 72, 71, 59, 59, + 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 44, 46, 44, 46, 73, 53, 44, + 46, 0, 0, 50, 46, 46, 46, 74, 0, 0, 0, 0, 0, 57, 75, 38, 74, 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, + 46, 41, 41, 41, 41, 41, 41, 41, 43, 43, 43, 43, 43, 44, 35, 35, 48, 76, + 76, 35, 35, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, + 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 35, 35, 35, 46, 48, 35, 77, 44, + 46, 48, 44, 46, 46, 44, 44, 44, 38, 78, 44, 38, 44, 44, 44, 38, 44, 44, + 44, 44, 38, 38, 38, 44, 39, 39, 39, 39, 39, 39, 39, 39, 39, 78, 39, 39, + 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, + 39, 39, 41, 41, 41, 41, 41, 41, 41, 41, 41, 42, 41, 41, 41, 41, 41, 41, + 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 43, 42, + 46, 43, 46, 46, 46, 43, 46, 46, 46, 46, 43, 43, 43, 46, 44, 46, 44, 46, + 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, + 38, 43, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 79, 80, 80, 80, 80, 80, + 81, 81, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, + 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, + 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, + 44, 46, 44, 38, 43, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 46, + 38, 43, 38, 43, 44, 46, 38, 43, 44, 46, 38, 43, 38, 43, 38, 43, 44, 46, + 38, 43, 38, 43, 38, 43, 44, 46, 38, 43, 38, 43, 38, 43, 38, 43, 38, 43, + 38, 43, 44, 46, 38, 43, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, + 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, + 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 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, 0, 0, 52, 82, 82, 82, 82, 82, 82, 0, 46, 46, 46, + 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, + 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 35, + 0, 82, 83, 0, 0, 0, 0, 0, 0, 84, 80, 80, 80, 80, 84, 80, 80, 80, 85, 84, + 80, 80, 80, 80, 80, 80, 84, 84, 84, 84, 84, 84, 80, 80, 84, 80, 80, 85, + 86, 80, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 96, 97, 98, 99, 100, 101, + 102, 103, 104, 102, 80, 84, 102, 95, 0, 0, 0, 0, 0, 0, 0, 0, 105, 105, + 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, + 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 0, 0, 0, 0, 0, + 105, 105, 105, 102, 102, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 106, 106, 106, + 106, 0, 0, 77, 77, 107, 108, 108, 109, 110, 111, 27, 27, 80, 80, 80, 80, + 80, 80, 80, 80, 112, 113, 114, 111, 0, 0, 111, 111, 0, 115, 116, 116, + 116, 116, 116, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, + 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, + 117, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 118, 119, 120, + 112, 113, 114, 121, 122, 123, 123, 124, 84, 80, 80, 80, 80, 80, 84, 80, + 80, 0, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 108, 126, 126, + 111, 115, 115, 127, 115, 115, 115, 115, 128, 128, 128, 128, 115, 115, + 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, + 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, + 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, + 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, + 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 116, + 115, 116, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, + 115, 115, 115, 115, 116, 111, 115, 80, 80, 80, 80, 80, 80, 80, 106, 81, + 80, 80, 80, 80, 84, 80, 117, 117, 80, 80, 27, 84, 80, 80, 84, 115, 115, + 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 115, 115, 115, 130, + 130, 115, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, + 111, 111, 0, 131, 115, 132, 115, 115, 115, 115, 115, 115, 115, 115, 115, + 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, + 115, 115, 115, 115, 115, 115, 115, 80, 84, 80, 80, 84, 80, 80, 84, 84, + 84, 80, 84, 84, 80, 84, 80, 80, 80, 84, 80, 84, 80, 84, 80, 84, 80, 80, + 0, 0, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, + 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, + 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, + 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, + 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, + 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, + 115, 115, 115, 115, 115, 115, 133, 133, 133, 133, 133, 133, 133, 133, + 133, 133, 133, 115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 134, 134, + 134, 134, 134, 134, 134, 134, 134, 134, 105, 105, 105, 105, 105, 105, + 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, + 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 80, 80, + 80, 80, 80, 80, 80, 84, 80, 135, 135, 27, 136, 136, 136, 135, 0, 0, 0, 0, + 0, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, + 105, 105, 105, 105, 105, 105, 105, 105, 80, 80, 80, 80, 135, 80, 80, 80, + 80, 80, 80, 80, 80, 80, 135, 80, 80, 80, 135, 80, 80, 80, 80, 80, 0, 0, + 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, + 102, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 133, 133, 133, 137, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, + 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, + 47, 47, 47, 47, 47, 47, 47, 138, 47, 47, 47, 47, 47, 47, 47, 138, 47, 47, + 138, 47, 47, 47, 47, 47, 0, 0, 139, 47, 137, 137, 137, 133, 133, 133, + 133, 133, 133, 133, 133, 137, 137, 137, 137, 140, 137, 0, 47, 80, 84, 80, + 80, 133, 0, 0, 141, 141, 141, 141, 141, 141, 141, 141, 47, 47, 133, 133, + 82, 82, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 82, 52, 47, 0, + 0, 0, 0, 0, 0, 47, 47, 47, 47, 47, 47, 47, 0, 133, 137, 137, 0, 47, 47, + 47, 47, 47, 47, 47, 47, 0, 0, 47, 47, 0, 0, 47, 47, 47, 47, 47, 47, 47, + 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 0, 47, 47, + 47, 47, 47, 47, 47, 0, 47, 0, 0, 0, 47, 47, 47, 47, 0, 0, 143, 47, 144, + 137, 137, 133, 133, 133, 133, 0, 0, 137, 137, 0, 0, 145, 145, 140, 47, 0, + 0, 0, 0, 0, 0, 0, 0, 144, 0, 0, 0, 0, 141, 141, 0, 141, 47, 47, 133, 133, + 0, 0, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 47, 47, 146, 146, + 147, 147, 147, 147, 147, 147, 79, 146, 0, 0, 0, 0, 0, 133, 133, 137, 0, + 47, 47, 47, 47, 47, 47, 0, 0, 0, 0, 47, 47, 0, 0, 47, 47, 47, 47, 47, 47, + 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 0, 47, + 47, 47, 47, 47, 47, 47, 0, 47, 141, 0, 47, 141, 0, 47, 47, 0, 0, 143, 0, + 137, 137, 137, 133, 133, 0, 0, 0, 0, 133, 133, 0, 0, 133, 133, 140, 0, 0, + 0, 133, 0, 0, 0, 0, 0, 0, 0, 141, 141, 141, 47, 0, 141, 0, 0, 0, 0, 0, 0, + 0, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 133, 133, 47, 47, + 47, 133, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 133, 133, 137, 0, 47, 47, 47, + 47, 47, 47, 47, 47, 47, 0, 47, 47, 47, 0, 47, 47, 47, 47, 47, 47, 47, 47, + 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 0, 47, 47, 47, + 47, 47, 47, 47, 0, 47, 47, 0, 47, 47, 47, 47, 47, 0, 0, 143, 47, 137, + 137, 137, 133, 133, 133, 133, 133, 0, 133, 133, 137, 0, 137, 137, 140, 0, + 0, 47, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 47, 47, 133, 133, 0, + 0, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 0, 146, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 133, 137, 137, 0, 47, 47, 47, 47, 47, + 47, 47, 47, 0, 0, 47, 47, 0, 0, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, + 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 0, 47, 47, 47, 47, 47, + 47, 47, 0, 47, 47, 0, 47, 47, 47, 47, 47, 0, 0, 143, 47, 144, 133, 137, + 133, 133, 133, 133, 0, 0, 137, 145, 0, 0, 145, 145, 140, 0, 0, 0, 0, 0, + 0, 0, 0, 148, 144, 0, 0, 0, 0, 141, 141, 0, 47, 47, 47, 133, 133, 0, 0, + 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 79, 47, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 133, 47, 0, 47, 47, 47, 47, 47, 47, 0, + 0, 0, 47, 47, 47, 0, 47, 47, 138, 47, 0, 0, 0, 47, 47, 0, 47, 0, 47, 47, + 0, 0, 0, 47, 47, 0, 0, 0, 47, 47, 47, 0, 0, 0, 47, 47, 47, 47, 47, 47, + 47, 47, 47, 47, 47, 47, 0, 0, 0, 0, 144, 137, 133, 137, 137, 0, 0, 0, + 137, 137, 137, 0, 145, 145, 145, 140, 0, 0, 47, 0, 0, 0, 0, 0, 0, 144, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 142, 142, 142, 142, 142, 142, 142, + 142, 142, 142, 147, 147, 147, 27, 27, 27, 27, 27, 27, 146, 27, 0, 0, 0, + 0, 0, 0, 137, 137, 137, 0, 47, 47, 47, 47, 47, 47, 47, 47, 0, 47, 47, 47, + 0, 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, 47, 47, 47, 47, 47, 47, 47, 47, 47, 0, 47, + 47, 47, 47, 47, 0, 0, 0, 47, 133, 133, 133, 137, 137, 137, 137, 0, 133, + 133, 149, 0, 133, 133, 133, 140, 0, 0, 0, 0, 0, 0, 0, 150, 151, 0, 47, + 47, 0, 0, 0, 0, 0, 0, 47, 47, 133, 133, 0, 0, 142, 142, 142, 142, 142, + 142, 142, 142, 142, 142, 0, 0, 0, 0, 0, 0, 0, 0, 152, 152, 152, 152, 152, + 152, 152, 79, 0, 0, 137, 137, 0, 47, 47, 47, 47, 47, 47, 47, 47, 0, 47, + 47, 47, 0, 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, 47, 47, 47, 47, 47, 47, 47, 47, + 47, 0, 47, 47, 47, 47, 47, 0, 0, 143, 47, 137, 153, 145, 137, 144, 137, + 137, 0, 153, 145, 145, 0, 145, 145, 133, 140, 0, 0, 0, 0, 0, 0, 0, 144, + 144, 0, 0, 0, 0, 0, 0, 0, 47, 0, 47, 47, 133, 133, 0, 0, 142, 142, 142, + 142, 142, 142, 142, 142, 142, 142, 0, 27, 27, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 137, 137, 0, 47, 47, 47, 47, 47, 47, 47, 47, 0, 47, 47, + 47, 0, 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, 47, 47, 47, 47, 47, 47, 47, 47, 47, + 47, 47, 47, 47, 47, 47, 0, 0, 0, 47, 144, 137, 137, 133, 133, 133, 133, + 0, 137, 137, 137, 0, 145, 145, 145, 140, 0, 0, 0, 0, 0, 0, 0, 0, 0, 144, + 0, 0, 0, 0, 0, 0, 0, 0, 47, 47, 133, 133, 0, 0, 142, 142, 142, 142, 142, + 142, 142, 142, 142, 142, 147, 147, 147, 147, 147, 147, 0, 0, 0, 79, 47, + 47, 47, 47, 47, 47, 0, 0, 137, 137, 0, 47, 47, 47, 47, 47, 47, 47, 47, + 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 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, + 0, 47, 47, 47, 47, 47, 47, 47, 47, 47, 0, 47, 0, 0, 47, 47, 47, 47, 47, + 47, 47, 0, 0, 0, 154, 0, 0, 0, 0, 144, 137, 137, 133, 133, 133, 0, 133, + 0, 137, 137, 145, 137, 145, 145, 145, 144, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 137, 137, 82, 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, 47, 47, 47, 47, 47, 47, 47, 47, 133, 47, 155, 133, 133, + 133, 133, 156, 156, 140, 0, 0, 0, 0, 146, 47, 47, 47, 47, 47, 47, 52, + 133, 157, 157, 157, 157, 133, 133, 133, 82, 142, 142, 142, 142, 142, 142, + 142, 142, 142, 142, 82, 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, 47, 47, + 0, 47, 0, 0, 47, 47, 0, 47, 0, 0, 47, 0, 0, 0, 0, 0, 0, 47, 47, 47, 47, + 0, 47, 47, 47, 47, 47, 47, 47, 0, 47, 47, 47, 0, 47, 0, 47, 0, 0, 47, 47, + 0, 47, 47, 47, 47, 133, 47, 155, 133, 133, 133, 133, 158, 158, 0, 133, + 133, 47, 0, 0, 47, 47, 47, 47, 47, 0, 52, 0, 159, 159, 159, 159, 133, + 133, 0, 0, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 0, 0, 155, + 155, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 79, 79, 79, 82, 82, 82, 82, 82, 82, + 82, 82, 160, 82, 82, 82, 82, 82, 82, 79, 79, 79, 79, 79, 84, 84, 79, 79, + 79, 79, 79, 79, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 147, + 147, 147, 147, 147, 147, 147, 147, 147, 147, 79, 84, 79, 84, 79, 161, + 162, 163, 162, 163, 137, 137, 47, 47, 47, 141, 47, 47, 47, 47, 0, 47, 47, + 47, 47, 141, 47, 47, 47, 47, 141, 47, 47, 47, 47, 141, 47, 47, 47, 47, + 141, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 141, 47, 47, 47, 0, + 0, 0, 0, 164, 165, 166, 167, 166, 166, 168, 166, 168, 165, 165, 165, 165, + 133, 137, 165, 166, 80, 80, 140, 82, 80, 80, 47, 47, 47, 47, 0, 0, 0, 0, + 133, 133, 133, 166, 133, 133, 133, 133, 0, 133, 133, 133, 133, 166, 133, + 133, 133, 133, 166, 133, 133, 133, 133, 166, 133, 133, 133, 133, 166, + 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 166, 133, + 133, 133, 0, 79, 79, 79, 79, 79, 79, 79, 79, 84, 79, 79, 79, 79, 79, 79, + 0, 79, 79, 82, 82, 82, 82, 82, 79, 79, 79, 79, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 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, 138, 47, 47, 47, 47, 137, 137, 133, 148, 133, + 133, 137, 133, 133, 133, 133, 133, 143, 137, 140, 140, 137, 137, 133, + 133, 47, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 82, 82, 82, + 82, 82, 82, 47, 47, 47, 47, 47, 47, 137, 137, 133, 133, 47, 47, 47, 47, + 133, 133, 133, 47, 137, 137, 137, 47, 47, 137, 137, 137, 137, 137, 137, + 137, 47, 47, 47, 133, 133, 133, 133, 47, 47, 47, 47, 47, 47, 47, 47, 47, + 47, 47, 47, 47, 133, 137, 137, 133, 133, 137, 137, 137, 137, 137, 137, + 84, 47, 137, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 137, 137, + 137, 133, 79, 79, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 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, 46, 46, 46, 46, 46, 46, 46, 46, + 44, 44, 44, 44, 44, 44, 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, 82, 50, 0, 0, 0, 169, 169, 169, 169, 169, 169, 169, 169, 169, + 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, + 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, + 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, + 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, + 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, + 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, + 169, 169, 169, 47, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, + 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 47, 47, 47, 47, 47, 47, + 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, + 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, + 47, 47, 47, 169, 169, 169, 169, 169, 170, 170, 170, 170, 170, 170, 170, + 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, + 170, 170, 170, 170, 170, 170, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, + 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, + 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, + 47, 47, 47, 47, 47, 47, 47, 47, 169, 169, 169, 169, 169, 169, 47, 47, 47, + 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, + 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, + 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 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, + 47, 47, 47, 0, 0, 47, 47, 47, 47, 47, 47, 47, 0, 47, 0, 47, 47, 47, 47, + 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, 0, 47, 47, 47, 47, 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, 0, 47, 47, 47, 47, 0, 0, 47, 47, 47, + 47, 47, 47, 47, 0, 47, 0, 47, 47, 47, 47, 0, 0, 47, 47, 47, 47, 47, 47, + 47, 47, 47, 47, 47, 47, 47, 47, 47, 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, 0, 47, 47, 47, 47, 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, 0, 0, 0, 0, 80, + 79, 82, 82, 82, 82, 82, 82, 82, 82, 147, 147, 147, 147, 147, 147, 147, + 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 0, 0, 0, + 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 27, 27, + 27, 27, 27, 27, 27, 27, 27, 27, 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, 47, 47, 47, 47, + 47, 47, 47, 47, 47, 47, 47, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 83, 47, 47, + 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, + 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, + 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, + 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, + 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, + 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, + 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, + 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, + 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, + 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, + 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, + 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, + 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, + 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, + 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, + 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, + 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, + 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, + 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, + 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, + 47, 47, 82, 82, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, + 47, 47, 47, 171, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, + 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 162, 163, 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, 47, 82, 82, 82, 172, 172, 172, 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, 0, 47, 47, 47, + 47, 133, 133, 140, 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, 133, 133, 140, 82, + 82, 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, 133, 133, 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, 0, 47, 47, 47, + 0, 133, 133, 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, 47, 47, + 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 173, 173, 137, 133, 133, 133, + 133, 133, 133, 133, 137, 137, 137, 137, 137, 137, 137, 137, 133, 137, + 137, 133, 133, 133, 133, 133, 133, 133, 133, 133, 140, 133, 82, 82, 82, + 52, 82, 82, 82, 146, 47, 80, 0, 0, 142, 142, 142, 142, 142, 142, 142, + 142, 142, 142, 0, 0, 0, 0, 0, 0, 152, 152, 152, 152, 152, 152, 152, 152, + 152, 152, 0, 0, 0, 0, 0, 0, 136, 136, 136, 136, 136, 136, 83, 136, 136, + 136, 136, 133, 133, 133, 171, 0, 142, 142, 142, 142, 142, 142, 142, 142, + 142, 142, 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, 52, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, + 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 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, 47, 47, 47, 47, 47, 47, 47, + 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, + 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 86, 47, + 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, 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, 0, 0, 0, 133, 133, 133, 137, 137, 137, 137, 133, 133, 137, 137, + 137, 0, 0, 0, 0, 137, 137, 133, 137, 137, 137, 137, 137, 137, 85, 80, 84, + 0, 0, 0, 0, 27, 0, 0, 0, 136, 136, 142, 142, 142, 142, 142, 142, 142, + 142, 142, 142, 47, 47, 47, 47, 47, 47, 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, 47, + 47, 47, 47, 47, 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, 47, 47, + 47, 47, 0, 0, 0, 0, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, + 137, 137, 137, 137, 137, 137, 137, 47, 47, 47, 47, 47, 47, 47, 137, 137, + 0, 0, 0, 0, 0, 0, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, + 0, 0, 0, 136, 136, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, + 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, + 27, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, + 47, 47, 47, 47, 47, 47, 80, 84, 137, 137, 137, 0, 0, 82, 82, 47, 47, 47, + 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, + 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, + 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 137, 133, 137, + 133, 133, 133, 133, 133, 133, 133, 0, 140, 137, 133, 137, 137, 133, 133, + 133, 133, 133, 133, 133, 133, 137, 137, 137, 137, 137, 137, 133, 133, 80, + 80, 80, 80, 80, 80, 80, 80, 0, 0, 84, 142, 142, 142, 142, 142, 142, 142, + 142, 142, 142, 0, 0, 0, 0, 0, 0, 142, 142, 142, 142, 142, 142, 142, 142, + 142, 142, 0, 0, 0, 0, 0, 0, 82, 82, 82, 82, 82, 82, 82, 52, 82, 82, 82, + 82, 82, 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, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 133, 133, 133, 133, 137, 47, + 138, 47, 138, 47, 138, 47, 138, 47, 138, 47, 47, 47, 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, 143, 144, 133, 133, 133, 133, + 133, 145, 133, 145, 137, 137, 145, 145, 133, 145, 174, 47, 47, 47, 47, + 47, 47, 47, 0, 0, 0, 0, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, + 82, 82, 82, 82, 82, 82, 82, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 80, + 84, 80, 80, 80, 80, 80, 80, 80, 79, 79, 79, 79, 79, 79, 79, 79, 79, 0, 0, + 0, 133, 133, 137, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, + 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 137, 133, + 133, 133, 133, 137, 137, 133, 133, 174, 0, 0, 0, 47, 47, 142, 142, 142, + 142, 142, 142, 142, 142, 142, 142, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 137, 137, 137, 137, 137, 137, 137, 137, 133, + 133, 133, 133, 133, 133, 133, 133, 137, 137, 133, 143, 0, 0, 0, 82, 82, + 82, 82, 82, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 0, 0, 0, + 47, 47, 47, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 47, 47, 47, + 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, + 47, 47, 47, 47, 47, 47, 47, 47, 47, 52, 52, 52, 52, 52, 52, 82, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 80, 80, 80, 82, 175, 84, 84, 84, 84, 84, 80, 80, 84, + 84, 84, 84, 80, 137, 175, 175, 175, 175, 175, 175, 175, 47, 47, 47, 47, + 84, 47, 47, 47, 47, 137, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, - 46, 46, 46, 0, 44, 46, 44, 44, 44, 46, 46, 44, 46, 44, 46, 44, 46, 44, - 44, 44, 0, 46, 44, 46, 46, 44, 46, 46, 46, 46, 46, 46, 35, 50, 0, 0, 44, - 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, - 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, - 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, - 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, - 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, - 46, 44, 46, 44, 46, 44, 46, 44, 46, 46, 27, 27, 27, 27, 27, 27, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 136, 136, 136, 136, 152, 136, 136, 46, + 46, 46, 46, 46, 46, 46, 50, 50, 50, 52, 50, 50, 50, 50, 50, 50, 50, 50, + 50, 50, 50, 52, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, + 50, 50, 50, 50, 52, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, + 50, 50, 50, 50, 50, 50, 35, 35, 35, 35, 35, 35, 35, 35, 35, 46, 46, 46, + 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 50, 46, 46, 46, 46, 46, 46, 46, + 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, + 46, 46, 46, 46, 46, 46, 46, 46, 46, 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, 80, 80, 84, 80, 80, 80, 80, 80, + 80, 80, 84, 80, 80, 176, 177, 84, 178, 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, 84, 80, 84, 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, 179, 46, 46, 44, 46, 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, 46, 44, 46, 44, + 46, 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, 180, 43, 180, 43, 180, 43, 180, 43, 180, 43, 180, 43, 180, 0, 0, + 43, 43, 43, 43, 43, 43, 43, 43, 181, 181, 181, 181, 181, 181, 181, 181, + 43, 43, 43, 43, 43, 43, 43, 43, 181, 181, 181, 181, 181, 181, 181, 181, + 43, 43, 43, 43, 43, 43, 43, 43, 181, 181, 181, 181, 181, 181, 181, 181, + 43, 43, 43, 43, 43, 0, 43, 43, 38, 38, 38, 182, 181, 57, 180, 57, 57, 75, + 43, 43, 43, 0, 43, 43, 38, 182, 38, 182, 181, 75, 75, 75, 43, 43, 43, + 180, 0, 0, 43, 43, 38, 38, 38, 182, 0, 75, 75, 75, 43, 43, 43, 180, 43, + 43, 43, 43, 38, 38, 38, 182, 38, 75, 183, 183, 0, 0, 43, 43, 43, 0, 43, + 43, 38, 182, 38, 182, 181, 183, 57, 0, 184, 184, 185, 185, 185, 185, 185, + 185, 185, 185, 185, 131, 131, 131, 173, 186, 187, 188, 83, 187, 187, 187, + 22, 189, 190, 191, 192, 193, 190, 191, 192, 193, 22, 22, 22, 136, 194, + 194, 194, 22, 195, 196, 197, 198, 199, 200, 201, 21, 202, 108, 202, 203, + 204, 22, 189, 189, 136, 29, 36, 22, 189, 136, 194, 205, 205, 136, 136, + 136, 206, 162, 163, 189, 189, 189, 136, 136, 136, 136, 136, 136, 136, + 136, 77, 136, 205, 136, 136, 189, 136, 136, 136, 136, 136, 136, 136, 185, + 131, 131, 131, 131, 131, 0, 0, 0, 0, 0, 131, 131, 131, 131, 131, 131, + 207, 50, 0, 0, 34, 207, 207, 207, 207, 207, 208, 208, 209, 210, 211, 212, + 207, 34, 34, 34, 34, 207, 207, 207, 207, 207, 208, 208, 209, 210, 211, 0, + 50, 50, 50, 50, 50, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 146, 146, 146, 146, + 146, 146, 146, 146, 213, 214, 146, 146, 23, 146, 146, 146, 146, 146, 146, + 146, 146, 146, 146, 146, 146, 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, 175, 175, 80, 80, 80, 80, 175, 175, + 175, 80, 80, 81, 81, 81, 81, 80, 81, 81, 81, 175, 175, 80, 84, 80, 175, + 175, 84, 84, 84, 84, 80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 215, 215, 48, 216, 27, 216, 215, 48, 27, 216, 35, 48, 48, 48, 35, 35, 48, + 48, 48, 28, 27, 48, 216, 27, 27, 48, 48, 48, 48, 48, 27, 27, 215, 216, + 216, 27, 48, 27, 217, 27, 48, 27, 182, 217, 48, 48, 218, 35, 48, 48, 44, + 48, 35, 155, 155, 155, 155, 35, 27, 215, 35, 35, 48, 48, 219, 77, 77, 77, + 77, 48, 35, 35, 35, 35, 27, 77, 27, 27, 46, 79, 220, 220, 220, 37, 37, + 220, 220, 220, 220, 220, 220, 37, 37, 37, 37, 220, 221, 221, 221, 221, + 221, 221, 221, 221, 221, 221, 221, 221, 222, 222, 222, 222, 221, 221, + 221, 221, 221, 221, 221, 221, 221, 221, 222, 222, 222, 222, 222, 222, + 172, 172, 172, 44, 46, 172, 172, 172, 172, 37, 0, 0, 0, 0, 0, 0, 40, 40, + 40, 40, 40, 25, 25, 25, 25, 25, 223, 223, 27, 27, 27, 27, 77, 27, 27, 77, + 27, 27, 77, 27, 27, 27, 27, 27, 27, 27, 223, 27, 27, 27, 27, 27, 27, 27, + 27, 27, 25, 25, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, + 27, 27, 27, 27, 27, 224, 223, 223, 27, 27, 40, 27, 40, 27, 27, 27, 27, + 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 25, 27, 27, 27, + 27, 27, 27, 27, 27, 27, 27, 27, 27, 77, 77, 77, 77, 77, 77, 77, 77, 77, + 77, 77, 77, 40, 225, 226, 226, 227, 77, 77, 40, 226, 227, 225, 226, 227, + 225, 77, 40, 77, 226, 228, 229, 77, 226, 225, 77, 77, 77, 226, 225, 225, + 226, 40, 226, 226, 225, 225, 40, 227, 40, 227, 40, 40, 40, 40, 226, 230, + 219, 226, 219, 219, 225, 225, 225, 40, 40, 40, 40, 77, 225, 77, 225, 226, + 226, 225, 225, 225, 227, 225, 225, 227, 225, 225, 227, 226, 227, 225, + 225, 226, 77, 77, 77, 77, 77, 226, 225, 225, 225, 77, 77, 77, 77, 77, 77, + 77, 77, 77, 225, 231, 40, 227, 77, 226, 226, 226, 226, 225, 225, 226, + 226, 77, 223, 231, 231, 227, 227, 225, 225, 227, 227, 225, 225, 227, 227, + 225, 225, 225, 225, 225, 225, 227, 227, 226, 226, 227, 227, 226, 226, + 227, 227, 225, 225, 225, 77, 77, 225, 225, 225, 225, 77, 77, 40, 77, 77, + 225, 40, 77, 77, 77, 77, 77, 77, 77, 77, 225, 225, 77, 40, 225, 225, 225, + 225, 225, 225, 227, 227, 227, 227, 225, 225, 225, 225, 225, 225, 225, + 225, 225, 77, 77, 77, 77, 77, 225, 226, 77, 77, 77, 77, 77, 77, 77, 77, + 77, 225, 225, 225, 225, 225, 77, 77, 225, 225, 77, 77, 77, 77, 225, 225, + 225, 225, 225, 225, 225, 225, 225, 225, 227, 227, 227, 227, 225, 225, + 225, 225, 225, 225, 227, 227, 227, 227, 77, 77, 225, 225, 225, 225, 225, + 225, 225, 225, 225, 225, 225, 225, 225, 225, 225, 225, 27, 27, 27, 27, + 27, 27, 27, 27, 225, 225, 225, 225, 27, 27, 27, 27, 27, 27, 25, 27, 27, + 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 225, 225, 27, 27, 27, 27, 27, + 27, 27, 232, 233, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 79, 79, 79, + 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, + 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, + 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, + 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 27, 77, 27, 27, 27, 27, + 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, + 27, 27, 79, 27, 27, 27, 27, 27, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, + 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 27, 27, 27, + 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, + 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, + 27, 77, 77, 77, 77, 77, 77, 27, 27, 27, 27, 27, 27, 27, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 27, 27, 27, 27, 27, + 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, + 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 27, 27, + 27, 27, 27, 27, 27, 27, 27, 27, 27, 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, 34, 34, 34, 34, 34, 34, 34, + 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 234, 234, 234, 234, + 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, + 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, + 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, + 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, + 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, + 234, 234, 234, 234, 220, 235, 235, 235, 235, 235, 235, 235, 235, 235, + 235, 235, 235, 235, 235, 235, 235, 235, 235, 235, 235, 235, 25, 25, 25, + 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, + 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, + 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, + 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, + 25, 27, 27, 27, 27, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, + 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, + 25, 25, 25, 25, 25, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 25, + 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 27, 27, 25, + 25, 25, 25, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 25, 25, 27, 25, 25, + 25, 25, 25, 25, 25, 27, 27, 27, 27, 27, 27, 27, 27, 25, 25, 27, 27, 25, + 40, 27, 27, 27, 27, 25, 25, 27, 27, 25, 40, 27, 27, 27, 27, 25, 25, 25, + 27, 27, 25, 27, 27, 25, 25, 25, 25, 27, 27, 27, 27, 27, 27, 27, 27, 27, + 27, 27, 27, 27, 27, 27, 27, 25, 25, 25, 25, 27, 27, 27, 27, 27, 27, 27, + 27, 27, 25, 27, 27, 27, 27, 27, 27, 27, 27, 77, 77, 77, 77, 77, 77, 77, + 77, 27, 27, 27, 27, 27, 25, 25, 27, 27, 25, 27, 27, 27, 27, 25, 25, 27, + 27, 27, 27, 25, 25, 27, 27, 27, 27, 27, 27, 25, 27, 25, 27, 27, 27, 27, + 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, + 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 25, 27, 25, 27, 27, 27, 27, + 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, + 27, 27, 27, 27, 27, 27, 27, 25, 25, 27, 25, 25, 25, 27, 25, 25, 25, 25, + 27, 25, 25, 27, 40, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, + 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, + 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 25, 25, 27, + 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 79, 27, 27, 27, 27, 27, 27, + 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 25, 25, 27, 27, 27, 27, 25, + 25, 25, 25, 25, 25, 25, 25, 25, 25, 0, 25, 25, 25, 25, 25, 25, 25, 25, + 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 0, 25, 0, 0, 0, 0, 25, 25, + 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, + 25, 25, 25, 25, 0, 27, 27, 27, 27, 0, 27, 27, 27, 27, 0, 0, 27, 27, 27, + 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, + 27, 27, 27, 27, 27, 27, 27, 0, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, + 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 25, 27, 27, 27, 27, 27, 27, 27, + 27, 27, 27, 27, 27, 27, 27, 0, 27, 0, 27, 27, 27, 27, 0, 0, 0, 27, 25, + 27, 27, 27, 27, 27, 27, 27, 0, 0, 27, 27, 27, 27, 27, 27, 27, 162, 163, + 162, 163, 162, 163, 162, 163, 162, 163, 162, 163, 162, 163, 235, 235, + 235, 235, 235, 235, 235, 235, 235, 235, 152, 152, 152, 152, 152, 152, + 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 27, + 0, 0, 0, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, + 27, 27, 27, 27, 27, 27, 27, 27, 0, 27, 27, 27, 27, 27, 27, 27, 27, 27, + 27, 27, 27, 27, 27, 0, 225, 77, 77, 225, 225, 162, 163, 77, 225, 225, 77, + 0, 225, 0, 0, 0, 77, 77, 77, 225, 225, 225, 225, 77, 77, 77, 77, 77, 225, + 225, 225, 77, 77, 77, 225, 225, 225, 225, 9, 10, 9, 10, 9, 10, 9, 10, + 162, 163, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, + 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, + 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, + 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, + 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, + 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, + 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, + 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, + 79, 79, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, + 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, + 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, + 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, + 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, + 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, + 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, + 77, 77, 77, 77, 77, 77, 77, 162, 163, 9, 10, 162, 163, 162, 163, 162, + 163, 162, 163, 162, 163, 162, 163, 162, 163, 162, 163, 162, 163, 77, 77, + 225, 225, 225, 225, 225, 225, 225, 225, 225, 225, 225, 225, 225, 225, + 225, 225, 225, 225, 225, 225, 225, 77, 77, 77, 77, 77, 77, 77, 77, 225, + 77, 77, 77, 77, 77, 77, 77, 225, 225, 225, 225, 225, 225, 77, 77, 77, + 225, 77, 77, 77, 77, 225, 225, 225, 225, 225, 77, 225, 225, 77, 77, 162, + 163, 162, 163, 225, 77, 77, 77, 77, 225, 77, 225, 225, 225, 77, 77, 225, + 225, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 225, 225, 225, 225, 225, + 225, 77, 77, 162, 163, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, + 225, 225, 219, 225, 225, 225, 225, 225, 225, 225, 225, 225, 225, 225, + 225, 225, 225, 225, 225, 77, 225, 225, 225, 225, 77, 77, 225, 77, 225, + 77, 77, 225, 77, 225, 225, 225, 225, 77, 77, 77, 77, 77, 225, 225, 77, + 77, 77, 77, 77, 77, 225, 225, 225, 77, 77, 77, 77, 77, 77, 77, 77, 77, + 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 225, 225, 77, + 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 225, 225, 77, 77, 77, 77, 225, + 225, 225, 225, 77, 225, 225, 77, 77, 225, 219, 209, 209, 77, 77, 225, + 225, 225, 225, 225, 225, 225, 225, 225, 225, 225, 225, 225, 225, 225, + 225, 225, 225, 225, 225, 225, 225, 225, 225, 225, 225, 225, 225, 225, + 225, 225, 225, 225, 225, 225, 225, 225, 225, 225, 225, 225, 225, 225, 77, + 77, 225, 225, 225, 225, 225, 225, 225, 225, 77, 225, 225, 225, 225, 225, + 225, 225, 225, 225, 225, 225, 225, 225, 225, 225, 225, 225, 225, 225, + 225, 225, 225, 225, 225, 225, 225, 225, 225, 225, 225, 225, 225, 225, + 225, 225, 225, 225, 225, 225, 225, 77, 77, 77, 77, 77, 236, 77, 225, 77, + 77, 77, 225, 225, 225, 225, 225, 77, 77, 77, 77, 77, 225, 225, 225, 77, + 77, 77, 77, 225, 77, 77, 77, 225, 225, 225, 225, 225, 77, 225, 77, 77, + 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, + 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, + 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 77, 77, 77, 77, 77, 77, + 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 27, 27, 77, + 77, 77, 77, 77, 77, 0, 0, 0, 27, 27, 27, 27, 27, 25, 25, 25, 25, 25, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, + 44, 44, 44, 0, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, + 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 0, 44, 46, + 44, 44, 44, 46, 46, 44, 46, 44, 46, 44, 46, 44, 44, 44, 44, 46, 44, 46, + 46, 44, 46, 46, 46, 46, 46, 46, 35, 50, 44, 44, 44, 46, 44, 46, 44, 46, + 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, + 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, + 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, + 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, + 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, + 44, 46, 44, 46, 46, 27, 27, 27, 27, 27, 27, 44, 46, 44, 46, 80, 80, 80, + 0, 0, 0, 0, 0, 0, 0, 136, 136, 136, 136, 152, 136, 136, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, - 46, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, + 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 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, 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, 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, 47, 47, 47, 47, 47, 47, 47, 0, 47, 47, 47, 47, 47, 47, 47, + 47, 47, 47, 47, 47, 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, 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, 47, 47, 47, 47, 47, 47, 47, 0, 47, 47, 47, 47, 47, 47, 47, 0, 47, 47, 47, 47, 47, 47, 47, 0, 47, 47, 47, 47, 47, 47, 47, 0, 47, 47, 47, 47, 47, - 47, 47, 0, 47, 47, 47, 47, 47, 47, 47, 0, 80, 80, 80, 80, 80, 80, 80, 80, + 47, 47, 0, 47, 47, 47, 47, 47, 47, 47, 0, 47, 47, 47, 47, 47, 47, 47, 0, + 47, 47, 47, 47, 47, 47, 47, 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, 136, 136, 29, 36, 29, 36, 136, 136, 136, 29, 36, - 136, 29, 36, 136, 136, 136, 136, 136, 136, 136, 136, 136, 83, 136, 136, - 83, 136, 29, 36, 136, 136, 29, 36, 162, 163, 162, 163, 162, 163, 162, - 163, 136, 136, 136, 136, 136, 51, 136, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 236, 236, - 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, - 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 0, 236, 236, 236, 236, - 237, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, - 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, - 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, - 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, - 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, - 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, - 237, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 237, 237, 237, 237, 237, 237, - 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, - 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, - 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, - 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, - 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, - 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, + 80, 80, 80, 80, 136, 136, 29, 36, 29, 36, 136, 136, 136, 29, 36, 136, 29, + 36, 136, 136, 136, 136, 136, 136, 136, 136, 136, 83, 136, 136, 83, 136, + 29, 36, 136, 136, 29, 36, 162, 163, 162, 163, 162, 163, 162, 163, 136, + 136, 136, 136, 136, 51, 136, 136, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, + 237, 237, 237, 237, 237, 237, 237, 237, 0, 237, 237, 237, 237, 238, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, + 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 238, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 238, 238, 238, 238, 238, 238, 238, 238, 238, + 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, + 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, + 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, + 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, + 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, + 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, + 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, + 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, + 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, + 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, + 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, + 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, + 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, + 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, + 238, 238, 238, 238, 238, 238, 238, 238, 238, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 237, 237, 237, 237, + 237, 237, 237, 237, 237, 237, 237, 237, 0, 0, 0, 0, 239, 240, 240, 240, + 237, 241, 169, 242, 243, 244, 243, 244, 243, 244, 243, 244, 243, 244, + 237, 237, 243, 244, 243, 244, 243, 244, 243, 244, 245, 246, 247, 247, + 237, 242, 242, 242, 242, 242, 242, 242, 242, 242, 248, 249, 250, 251, + 252, 252, 245, 241, 241, 241, 241, 241, 238, 237, 253, 253, 253, 241, + 169, 240, 237, 27, 0, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, + 169, 254, 169, 254, 169, 254, 169, 254, 169, 254, 169, 254, 169, 254, + 169, 254, 169, 254, 169, 254, 169, 254, 169, 254, 169, 169, 254, 169, + 254, 169, 254, 169, 169, 169, 169, 169, 169, 254, 254, 169, 254, 254, + 169, 254, 254, 169, 254, 254, 169, 254, 254, 169, 169, 169, 169, 169, + 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, + 169, 169, 169, 254, 169, 169, 0, 0, 255, 255, 256, 256, 241, 257, 258, + 245, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 254, 169, + 254, 169, 254, 169, 254, 169, 254, 169, 254, 169, 254, 169, 254, 169, + 254, 169, 254, 169, 254, 169, 254, 169, 169, 254, 169, 254, 169, 254, + 169, 169, 169, 169, 169, 169, 254, 254, 169, 254, 254, 169, 254, 254, + 169, 254, 254, 169, 254, 254, 169, 169, 169, 169, 169, 169, 169, 169, + 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, + 254, 169, 169, 254, 254, 254, 254, 240, 241, 241, 257, 258, 0, 0, 0, 0, + 0, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, + 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, + 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 0, 0, 0, + 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, + 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, + 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, + 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, + 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, + 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, + 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 0, 259, 259, 260, 260, + 260, 260, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 169, 169, + 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, + 169, 169, 169, 169, 169, 169, 169, 169, 0, 0, 0, 0, 0, 0, 0, 0, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, - 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 236, - 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 0, 0, 0, 0, 238, - 239, 239, 239, 236, 240, 169, 241, 242, 243, 242, 243, 242, 243, 242, - 243, 242, 243, 236, 236, 242, 243, 242, 243, 242, 243, 242, 243, 244, - 245, 246, 246, 236, 241, 241, 241, 241, 241, 241, 241, 241, 241, 247, - 248, 249, 250, 251, 251, 244, 240, 240, 240, 240, 240, 237, 236, 252, - 252, 252, 240, 169, 239, 236, 27, 0, 169, 169, 169, 169, 169, 169, 169, - 169, 169, 169, 169, 253, 169, 253, 169, 253, 169, 253, 169, 253, 169, - 253, 169, 253, 169, 253, 169, 253, 169, 253, 169, 253, 169, 253, 169, - 169, 253, 169, 253, 169, 253, 169, 169, 169, 169, 169, 169, 253, 253, - 169, 253, 253, 169, 253, 253, 169, 253, 253, 169, 253, 253, 169, 169, - 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, - 169, 169, 169, 169, 169, 169, 253, 169, 169, 0, 0, 254, 254, 255, 255, - 240, 256, 257, 244, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, - 169, 253, 169, 253, 169, 253, 169, 253, 169, 253, 169, 253, 169, 253, - 169, 253, 169, 253, 169, 253, 169, 253, 169, 253, 169, 169, 253, 169, - 253, 169, 253, 169, 169, 169, 169, 169, 169, 253, 253, 169, 253, 253, - 169, 253, 253, 169, 253, 253, 169, 253, 253, 169, 169, 169, 169, 169, - 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, - 169, 169, 169, 253, 169, 169, 253, 253, 253, 253, 239, 240, 240, 256, - 257, 0, 0, 0, 0, 0, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, - 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, - 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, - 169, 169, 169, 0, 0, 0, 257, 257, 257, 257, 257, 257, 257, 257, 257, 257, - 257, 257, 257, 257, 257, 257, 257, 257, 257, 257, 257, 257, 257, 257, - 257, 257, 257, 257, 257, 257, 257, 257, 257, 257, 257, 257, 257, 257, - 257, 257, 257, 257, 257, 257, 257, 257, 257, 257, 257, 257, 257, 257, - 257, 257, 257, 257, 257, 257, 257, 257, 257, 257, 257, 257, 257, 257, - 257, 257, 257, 257, 257, 257, 257, 257, 257, 257, 257, 257, 257, 257, - 257, 257, 257, 257, 257, 257, 257, 257, 257, 257, 257, 257, 257, 257, 0, - 258, 258, 259, 259, 259, 259, 260, 260, 260, 260, 260, 260, 260, 260, - 260, 260, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, - 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 0, 0, 0, 0, - 0, 0, 0, 0, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, - 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, - 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, - 169, 169, 169, 169, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, - 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, - 260, 260, 260, 260, 260, 237, 237, 0, 259, 259, 259, 259, 259, 259, 259, - 259, 259, 259, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, - 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, - 260, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 237, 261, 261, 261, 261, 261, - 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 260, 260, 260, 260, - 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, - 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 237, 237, 237, 258, - 259, 259, 259, 259, 259, 259, 259, 259, 259, 259, 260, 260, 260, 260, - 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, - 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, - 260, 260, 260, 260, 260, 260, 260, 261, 261, 261, 261, 261, 261, 261, - 261, 261, 261, 261, 261, 261, 261, 261, 260, 260, 260, 260, 260, 260, - 260, 260, 260, 260, 260, 260, 237, 237, 237, 237, 260, 260, 260, 260, - 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, - 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, - 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, - 260, 0, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, - 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, - 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, - 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, - 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, - 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, - 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, - 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, - 260, 260, 260, 260, 260, 260, 260, 260, 237, 237, 237, 237, 260, 260, - 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, - 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, - 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, - 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, - 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, - 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, - 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 237, - 237, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, - 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, - 260, 260, 260, 260, 237, 169, 169, 169, 169, 169, 169, 169, 169, 169, + 237, 237, 237, 237, 237, 237, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, + 169, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, + 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, + 261, 261, 238, 238, 0, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, + 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, + 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, + 261, 261, 262, 262, 262, 262, 262, 262, 262, 262, 238, 263, 263, 263, + 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, 261, 261, + 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, + 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 238, 238, + 238, 259, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 261, 261, + 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, + 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, + 261, 261, 261, 261, 261, 261, 261, 261, 261, 263, 263, 263, 263, 263, + 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, 261, 261, 261, 261, + 261, 261, 261, 261, 261, 261, 261, 261, 238, 238, 238, 238, 261, 261, + 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, + 261, 261, 261, 261, 261, 261, 261, 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, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, + 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, + 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, + 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, + 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, + 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, + 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, + 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, + 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 238, 238, 238, 238, + 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, + 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, + 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, + 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, + 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, + 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, + 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, + 261, 238, 238, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, + 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, + 261, 261, 261, 261, 261, 261, 238, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, @@ -1892,20 +1932,21 @@ 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, - 169, 169, 169, 169, 169, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 27, 27, 27, 27, + 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, + 169, 169, 169, 169, 169, 169, 169, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, - 27, 27, 27, 27, 27, 27, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, + 27, 27, 27, 27, 27, 27, 27, 27, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, - 169, 169, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, - 169, 169, 240, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, + 169, 169, 169, 169, 169, 169, 169, 241, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, @@ -1913,139 +1954,165 @@ 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, - 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 0, 0, 0, 236, 236, 236, - 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, - 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, - 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, - 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 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, 52, 136, 136, 136, 47, - 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 142, 142, - 142, 142, 142, 142, 142, 142, 142, 142, 47, 47, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 44, 46, 44, 46, 44, 46, 44, 46, 44, + 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, + 169, 0, 0, 0, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, + 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, + 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, + 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, + 237, 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, 52, 52, 52, 52, 52, 52, + 82, 82, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 52, 136, 136, + 136, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 142, + 142, 142, 142, 142, 142, 142, 142, 142, 142, 47, 47, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 44, 46, 44, 46, 44, 46, 44, 46, + 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, + 44, 46, 44, 46, 44, 46, 0, 0, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, + 46, 47, 80, 81, 81, 81, 136, 0, 0, 0, 0, 0, 0, 0, 0, 80, 80, 136, 51, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, - 46, 44, 46, 44, 46, 0, 0, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, - 47, 80, 81, 81, 81, 136, 0, 0, 0, 0, 0, 0, 0, 0, 80, 80, 136, 51, 44, 46, + 46, 44, 46, 44, 46, 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, 172, 172, 172, 172, 172, 172, 172, + 172, 172, 172, 80, 80, 82, 82, 82, 82, 82, 82, 0, 0, 0, 0, 0, 0, 0, 0, + 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, + 53, 53, 53, 53, 53, 51, 51, 51, 51, 51, 51, 51, 51, 51, 53, 53, 44, 46, + 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 46, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, - 44, 46, 44, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 53, 53, 53, 53, 53, 53, 53, 53, - 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 51, 51, 51, - 51, 51, 51, 51, 51, 51, 53, 53, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, - 44, 46, 44, 46, 46, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, - 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 50, 46, 46, 46, - 46, 46, 46, 46, 46, 44, 46, 44, 46, 44, 44, 46, 44, 46, 44, 46, 44, 46, - 44, 46, 51, 262, 262, 44, 46, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 44, 46, 44, 46, 50, 46, 46, 46, 46, 46, 46, 46, 46, 44, 46, 44, 46, 44, + 44, 46, 44, 46, 44, 46, 44, 46, 44, 46, 51, 264, 264, 44, 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, 0, 0, 0, 0, 0, 0, 0, 0, - 47, 47, 47, 47, 47, 47, 47, 133, 47, 47, 47, 140, 47, 47, 47, 47, 133, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 47, 47, 47, 47, 47, 47, 47, 133, 47, 47, + 47, 140, 47, 47, 47, 47, 133, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, + 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 137, 137, 133, 133, 137, + 27, 27, 27, 27, 0, 0, 0, 0, 147, 147, 147, 147, 147, 147, 79, 79, 146, + 218, 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, 137, 137, 133, 133, 137, 27, 27, 27, 27, 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, 136, 136, 136, 136, 0, 0, 0, 0, 0, 0, 0, 0, 137, 137, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, - 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 136, 136, 136, 136, 0, 0, 0, 0, - 0, 0, 0, 0, 137, 137, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, + 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 137, 137, 137, 137, + 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 140, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 82, 82, 142, 142, 142, 142, 142, 142, 142, 142, 142, + 142, 0, 0, 0, 0, 0, 0, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, + 80, 80, 80, 80, 80, 80, 47, 47, 47, 47, 47, 47, 82, 82, 82, 47, 0, 0, 0, + 0, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, - 47, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, - 137, 137, 140, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 82, 142, 142, 142, 142, - 142, 142, 142, 142, 142, 142, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 47, 47, 47, 47, 47, 47, + 47, 47, 47, 47, 47, 133, 133, 133, 133, 133, 84, 84, 84, 82, 82, 47, 47, + 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, + 47, 47, 47, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 137, + 174, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 169, 169, 169, 169, 169, 169, + 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, + 169, 169, 169, 169, 169, 169, 169, 169, 169, 0, 0, 0, 133, 133, 133, 137, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, - 47, 47, 47, 47, 133, 133, 133, 133, 133, 84, 84, 84, 82, 82, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, - 47, 47, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 137, 174, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 47, 47, 47, + 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 143, 137, 137, 133, 133, 133, + 133, 137, 137, 133, 137, 137, 137, 174, 82, 82, 82, 82, 82, 82, 82, 82, + 82, 82, 82, 82, 82, 0, 52, 142, 142, 142, 142, 142, 142, 142, 142, 142, + 142, 0, 0, 0, 0, 82, 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, 47, 47, 47, 47, 47, 47, + 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, + 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 133, + 133, 133, 133, 133, 133, 137, 137, 133, 133, 137, 137, 133, 133, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 47, 47, 47, 133, 47, 47, 47, 47, 47, 47, 47, 47, 133, + 137, 0, 0, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 0, 0, 82, + 82, 82, 82, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, + 47, 52, 47, 47, 47, 47, 47, 47, 79, 79, 79, 47, 137, 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, 133, 133, 133, 133, 133, 133, 137, 137, 133, 133, 137, 137, 133, - 133, 0, 0, 0, 0, 0, 0, 0, 0, 0, 47, 47, 47, 133, 47, 47, 47, 47, 47, 47, - 47, 47, 133, 137, 0, 0, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, - 0, 0, 82, 82, 82, 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, 253, 253, 253, 253, 253, - 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, - 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, - 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, - 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, - 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, - 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, - 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, - 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, - 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, - 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, - 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, - 253, 253, 253, 253, 253, 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, 80, 47, 80, 80, 84, 47, 47, 80, + 80, 47, 47, 47, 47, 47, 80, 80, 47, 80, 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, 47, 47, 52, 82, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, - 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, - 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, - 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, - 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, - 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, - 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, - 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, - 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, - 264, 264, 264, 264, 264, 264, 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, 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, 169, 169, 265, 169, 265, 169, - 169, 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, 169, 265, 169, - 265, 169, 169, 265, 265, 169, 169, 169, 265, 265, 265, 265, 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, + 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, 137, 137, 133, + 137, 137, 133, 137, 137, 82, 137, 140, 0, 0, 142, 142, 142, 142, 142, + 142, 142, 142, 142, 142, 0, 0, 0, 0, 0, 0, 254, 254, 254, 254, 254, 254, + 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, + 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, + 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, + 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, + 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, + 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, + 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, + 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, + 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, + 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, + 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, + 254, 254, 254, 254, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 169, 169, 169, + 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, + 169, 169, 169, 169, 169, 169, 0, 0, 0, 0, 169, 169, 169, 169, 169, 169, + 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, + 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, + 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, + 169, 0, 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, 0, 0, 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, 265, 265, 265, 265, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 266, 267, 266, - 268, 268, 268, 268, 268, 268, 268, 268, 268, 207, 266, 266, 266, 266, - 266, 266, 266, 266, 266, 266, 266, 266, 266, 0, 266, 266, 266, 266, 266, - 0, 266, 0, 266, 266, 0, 266, 266, 0, 266, 266, 266, 266, 266, 266, 266, - 266, 266, 268, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, + 265, 265, 265, 265, 265, 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, 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, 267, 267, 267, 267, 267, 267, 267, + 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, + 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, + 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, + 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, + 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, + 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, + 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, + 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, + 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, + 267, 267, 267, 267, 267, 267, 267, 267, 267, 169, 169, 267, 169, 267, + 169, 169, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 169, 267, + 169, 267, 169, 169, 267, 267, 169, 169, 169, 267, 267, 267, 267, 0, 0, + 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, + 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, + 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, + 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, + 267, 267, 267, 267, 267, 267, 0, 0, 267, 267, 267, 267, 267, 267, 267, + 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, + 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, + 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, + 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, + 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, + 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, + 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, + 267, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, + 268, 269, 268, 270, 270, 270, 270, 270, 270, 270, 270, 270, 208, 268, + 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, 0, 268, 268, + 268, 268, 268, 0, 268, 0, 268, 268, 0, 268, 268, 0, 268, 268, 268, 268, + 268, 268, 268, 268, 268, 270, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, - 128, 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 128, 128, 128, + 128, 128, 128, 128, 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, @@ -2062,26 +2129,26 @@ 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, - 128, 128, 128, 128, 128, 191, 269, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 128, 128, 128, 128, 128, 128, 192, 271, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, - 128, 128, 128, 128, 128, 128, 128, 128, 128, 0, 0, 128, 128, 128, 128, + 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 0, 0, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, - 128, 128, 128, 128, 128, 128, 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, - 128, 270, 27, 0, 0, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, - 70, 70, 70, 271, 271, 271, 271, 271, 271, 271, 272, 273, 271, 0, 0, 0, 0, - 0, 0, 80, 80, 80, 80, 80, 80, 80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 271, 274, - 274, 275, 275, 272, 273, 272, 273, 272, 273, 272, 273, 272, 273, 272, - 273, 272, 273, 272, 273, 239, 239, 272, 273, 271, 271, 271, 271, 275, - 275, 275, 276, 271, 276, 0, 271, 276, 271, 271, 274, 277, 278, 277, 278, - 277, 278, 279, 271, 271, 280, 281, 282, 282, 283, 0, 271, 284, 279, 271, - 0, 0, 0, 0, 128, 128, 128, 115, 128, 0, 128, 128, 128, 128, 128, 128, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 128, 128, 272, 27, 0, 0, 70, 70, 70, 70, 70, 70, 70, 70, 70, + 70, 70, 70, 70, 70, 70, 70, 273, 273, 273, 273, 273, 273, 273, 274, 275, + 273, 0, 0, 0, 0, 0, 0, 80, 80, 80, 80, 80, 80, 80, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 273, 276, 276, 277, 277, 274, 275, 274, 275, 274, 275, 274, 275, + 274, 275, 274, 275, 274, 275, 274, 275, 240, 240, 274, 275, 273, 273, + 273, 273, 277, 277, 277, 278, 273, 278, 0, 273, 278, 273, 273, 276, 279, + 280, 279, 280, 279, 280, 281, 273, 273, 282, 283, 284, 284, 285, 0, 273, + 286, 281, 273, 0, 0, 0, 0, 128, 128, 128, 115, 128, 0, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, @@ -2091,173 +2158,210 @@ 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, - 128, 128, 128, 0, 0, 131, 0, 285, 285, 286, 287, 286, 285, 285, 288, 289, - 285, 290, 291, 292, 291, 291, 293, 293, 293, 293, 293, 293, 293, 293, - 293, 293, 291, 285, 294, 295, 294, 285, 285, 296, 296, 296, 296, 296, - 296, 296, 296, 296, 296, 296, 296, 296, 296, 296, 296, 296, 296, 296, - 296, 296, 296, 296, 296, 296, 296, 288, 285, 289, 297, 298, 297, 299, - 299, 299, 299, 299, 299, 299, 299, 299, 299, 299, 299, 299, 299, 299, - 299, 299, 299, 299, 299, 299, 299, 299, 299, 299, 299, 288, 295, 289, - 295, 288, 289, 300, 301, 302, 300, 300, 303, 303, 303, 303, 303, 303, - 303, 303, 303, 303, 304, 303, 303, 303, 303, 303, 303, 303, 303, 303, - 303, 303, 303, 303, 303, 303, 303, 303, 303, 303, 303, 303, 303, 303, - 303, 303, 303, 303, 303, 303, 303, 303, 303, 303, 303, 303, 303, 303, - 303, 303, 303, 303, 303, 303, 303, 303, 304, 304, 303, 303, 303, 303, - 303, 303, 303, 303, 303, 303, 303, 303, 303, 303, 303, 303, 303, 303, - 303, 303, 303, 303, 303, 303, 303, 303, 303, 303, 303, 303, 303, 0, 0, 0, - 303, 303, 303, 303, 303, 303, 0, 0, 303, 303, 303, 303, 303, 303, 0, 0, - 303, 303, 303, 303, 303, 303, 0, 0, 303, 303, 303, 0, 0, 0, 287, 287, - 295, 297, 305, 287, 287, 0, 306, 307, 307, 307, 307, 306, 306, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 308, 308, 308, 27, 25, 0, 0, 47, 47, 47, 47, 47, 47, - 47, 47, 47, 47, 47, 47, 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, 0, 47, 47, - 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 0, - 47, 47, 0, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 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, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, + 128, 128, 128, 128, 128, 128, 0, 0, 131, 0, 287, 287, 288, 289, 288, 287, + 287, 290, 291, 287, 292, 293, 294, 293, 293, 295, 295, 295, 295, 295, + 295, 295, 295, 295, 295, 293, 287, 296, 297, 296, 287, 287, 298, 298, + 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, + 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, 290, 287, 291, 299, + 300, 299, 301, 301, 301, 301, 301, 301, 301, 301, 301, 301, 301, 301, + 301, 301, 301, 301, 301, 301, 301, 301, 301, 301, 301, 301, 301, 301, + 290, 297, 291, 297, 290, 291, 302, 303, 304, 302, 302, 305, 305, 305, + 305, 305, 305, 305, 305, 305, 305, 306, 305, 305, 305, 305, 305, 305, + 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, + 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, + 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 306, 306, 305, + 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, + 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, + 305, 305, 0, 0, 0, 305, 305, 305, 305, 305, 305, 0, 0, 305, 305, 305, + 305, 305, 305, 0, 0, 305, 305, 305, 305, 305, 305, 0, 0, 305, 305, 305, + 0, 0, 0, 289, 289, 297, 299, 307, 289, 289, 0, 308, 309, 309, 309, 309, + 308, 308, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 310, 310, 310, 27, 25, 0, 0, 47, + 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 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, 0, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, + 47, 47, 47, 47, 0, 47, 47, 0, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, + 47, 47, 47, 47, 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, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 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, 82, 136, 79, 0, 0, 0, 0, 147, 147, 147, 147, 147, 147, + 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, 82, 136, 79, 0, 0, 0, 0, 147, 147, + 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, - 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 0, 0, 0, 79, 79, - 79, 79, 79, 79, 79, 79, 79, 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, 309, 309, 309, - 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, - 309, 309, 152, 152, 152, 152, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, - 27, 27, 27, 27, 27, 27, 152, 0, 0, 0, 0, 0, 27, 27, 27, 27, 27, 27, 27, - 27, 27, 27, 27, 27, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 147, 0, 0, 0, 79, 79, 79, 79, 79, 79, 79, 79, 79, 311, 311, 311, 311, + 311, 311, 311, 311, 311, 311, 311, 311, 311, 311, 311, 311, 311, 311, + 311, 311, 311, 311, 311, 311, 311, 311, 311, 311, 311, 311, 311, 311, + 311, 311, 311, 311, 311, 311, 311, 311, 311, 311, 311, 311, 311, 311, + 311, 311, 311, 311, 311, 311, 311, 152, 152, 152, 152, 27, 27, 27, 27, + 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 152, 0, 0, 0, 0, 0, + 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, - 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 84, 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, 0, 0, 0, 47, 47, 47, 47, 47, + 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, + 79, 79, 79, 79, 79, 79, 84, 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, 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, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, + 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, 0, 147, 147, 147, 147, 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, 172, 47, - 47, 47, 47, 47, 47, 47, 47, 172, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 0, 147, 147, 147, 147, 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, 172, 47, 47, 47, 47, 47, 47, 47, 47, 172, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 82, 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, 47, 47, 47, 47, 47, 47, 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, 82, 47, 47, 47, 47, 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, 47, 47, 47, 47, 47, 47, 47, - 47, 82, 172, 172, 172, 172, 172, 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, 0, 0, 0, + 0, 47, 47, 47, 47, 47, 47, 47, 47, 82, 172, 172, 172, 172, 172, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, + 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, - 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 47, 47, 47, 47, 47, 47, - 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, + 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, + 46, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 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, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 0, 0, 0, 0, 0, 0, - 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, 0, 0, 142, 142, 142, 142, 142, 142, 142, 142, + 142, 142, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 105, 105, 105, 105, 105, 105, 0, 0, 105, 0, 105, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 105, 105, 105, 105, + 105, 105, 0, 0, 105, 0, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, + 105, 105, 105, 105, 105, 105, 0, 105, 105, 0, 0, 0, 105, 0, 0, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, - 105, 0, 105, 105, 0, 0, 0, 105, 0, 0, 105, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 105, 105, 105, 105, 105, 105, 105, 0, 102, 312, 312, 312, 312, 312, 312, + 312, 312, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 105, 105, 105, 105, 105, 105, 105, 105, + 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, + 312, 312, 312, 312, 312, 312, 0, 0, 0, 136, 105, 105, 105, 105, 105, 105, + 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, + 105, 105, 105, 105, 105, 105, 0, 0, 0, 0, 0, 102, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, - 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 310, 310, 310, - 310, 0, 0, 0, 0, 0, 136, 105, 105, 105, 105, 105, 105, 105, 105, 105, + 0, 0, 0, 0, 0, 0, 0, 0, 105, 133, 133, 133, 0, 133, 133, 0, 0, 0, 0, 0, + 133, 84, 133, 80, 105, 105, 105, 105, 0, 105, 105, 105, 0, 105, 105, 105, + 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, + 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 0, 0, 0, 0, 80, 175, + 84, 0, 0, 0, 0, 140, 312, 312, 312, 312, 312, 312, 312, 312, 0, 0, 0, 0, + 0, 0, 0, 0, 102, 102, 102, 102, 102, 102, 102, 102, 102, 0, 0, 0, 0, 0, + 0, 0, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, + 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, + 105, 105, 312, 312, 102, 105, 105, 105, 105, 105, 105, 105, 105, 105, + 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, + 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, + 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, + 105, 105, 105, 0, 0, 0, 136, 136, 136, 136, 136, 136, 136, 105, 105, 105, + 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, + 105, 105, 105, 105, 105, 0, 0, 312, 312, 312, 312, 312, 312, 312, 312, + 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, + 105, 105, 105, 105, 105, 0, 0, 0, 0, 0, 312, 312, 312, 312, 312, 312, + 312, 312, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, + 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, + 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, + 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, - 105, 105, 105, 0, 0, 0, 0, 0, 102, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 105, 105, 105, 105, 105, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 105, 133, 133, 133, 0, 133, 133, 0, 0, 0, 0, 0, 133, 84, 133, - 80, 105, 105, 105, 105, 0, 105, 105, 105, 0, 105, 105, 105, 105, 105, - 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, - 105, 105, 105, 105, 105, 105, 105, 105, 0, 0, 0, 0, 80, 213, 84, 0, 0, 0, - 0, 140, 310, 310, 310, 310, 310, 310, 310, 310, 0, 0, 0, 0, 0, 0, 0, 0, - 102, 102, 102, 102, 102, 102, 102, 102, 102, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 133, 133, + 137, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, + 47, 47, 47, 47, 47, 47, 138, 47, 138, 47, 47, 47, 47, 47, 47, 47, 47, 47, + 47, 47, 47, 47, 47, 138, 47, 47, 47, 47, 137, 137, 137, 133, 133, 133, + 133, 137, 137, 140, 139, 82, 82, 173, 82, 82, 82, 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, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 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, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, + 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, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, - 172, 172, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 82, 82, 82, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, + 172, 172, 172, 172, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 82, 82, + 82, 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, 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, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, - 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, - 79, 79, 79, 79, 79, 79, 79, 79, 79, 0, 0, 79, 79, 79, 79, 79, 79, 79, 79, + 79, 79, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, + 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 0, 0, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, - 79, 79, 79, 79, 79, 79, 79, 79, 79, 311, 311, 311, 311, 311, 311, 311, - 312, 312, 213, 213, 213, 79, 79, 79, 313, 312, 312, 312, 312, 312, 131, - 131, 131, 131, 131, 131, 131, 131, 84, 84, 84, 84, 84, 84, 84, 84, 79, - 79, 80, 80, 80, 80, 80, 84, 84, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, - 79, 79, 80, 80, 80, 80, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, - 79, 311, 311, 311, 311, 311, 311, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, + 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 314, 314, 314, 314, 314, + 314, 314, 315, 315, 175, 175, 175, 79, 79, 79, 316, 315, 315, 315, 315, + 315, 131, 131, 131, 131, 131, 131, 131, 131, 84, 84, 84, 84, 84, 84, 84, + 84, 79, 79, 80, 80, 80, 80, 80, 84, 84, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, - 79, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, + 79, 79, 79, 79, 80, 80, 80, 80, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, + 79, 79, 79, 314, 314, 314, 314, 314, 314, 79, 79, 79, 79, 79, 79, 79, 79, + 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, + 79, 79, 79, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, - 27, 27, 80, 80, 80, 27, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 27, 27, 27, 27, 80, 80, 80, 27, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 27, 27, 27, 27, 27, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, - 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 0, 0, 0, 0, 0, 0, 0, 0, 0, 147, - 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, - 147, 147, 147, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, 48, 48, 48, + 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, + 147, 147, 147, 147, 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, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, - 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, + 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, - 48, 48, 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, 48, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 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, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, + 48, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, + 35, 35, 35, 35, 35, 35, 35, 35, 35, 48, 0, 48, 48, 0, 0, 48, 0, 0, 48, + 48, 0, 0, 48, 48, 48, 48, 0, 48, 48, 48, 48, 48, 48, 48, 48, 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, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, - 35, 35, 35, 35, 35, 35, 35, 35, 48, 0, 48, 48, 0, 0, 48, 0, 0, 48, 48, 0, - 0, 48, 48, 48, 48, 0, 48, 48, 48, 48, 48, 48, 48, 48, 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, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, - 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 35, 35, 35, 35, 35, 35, 35, 35, - 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, - 48, 48, 0, 48, 48, 48, 48, 0, 0, 48, 48, 48, 48, 48, 48, 48, 48, 0, 48, - 48, 48, 48, 48, 48, 48, 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, 48, 48, 0, - 48, 48, 48, 48, 0, 48, 48, 48, 48, 48, 0, 48, 0, 0, 0, 48, 48, 48, 48, + 35, 35, 48, 48, 0, 48, 48, 48, 48, 0, 0, 48, 48, 48, 48, 48, 48, 48, 48, + 0, 48, 48, 48, 48, 48, 48, 48, 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, 48, 48, + 0, 48, 48, 48, 48, 0, 48, 48, 48, 48, 48, 0, 48, 0, 0, 0, 48, 48, 48, 48, 48, 48, 48, 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, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, @@ -2278,25 +2382,25 @@ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 35, 35, 35, 35, 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, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, - 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 314, 35, 35, 35, 35, 35, 35, 35, + 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 317, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, - 315, 35, 35, 35, 35, 35, 35, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, - 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 314, 35, 35, 35, + 219, 35, 35, 35, 35, 35, 35, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 317, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, - 35, 35, 35, 35, 315, 35, 35, 35, 35, 35, 35, 48, 48, 48, 48, 48, 48, 48, + 35, 35, 35, 35, 219, 35, 35, 35, 35, 35, 35, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, - 314, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, - 35, 35, 35, 35, 35, 35, 35, 35, 315, 35, 35, 35, 35, 35, 35, 48, 48, 48, + 317, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, + 35, 35, 35, 35, 35, 35, 35, 35, 219, 35, 35, 35, 35, 35, 35, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, - 48, 48, 48, 48, 314, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, - 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 315, 35, 35, 35, 35, 35, + 48, 48, 48, 48, 317, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, + 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 219, 35, 35, 35, 35, 35, 35, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, - 48, 48, 48, 48, 48, 48, 48, 48, 314, 35, 35, 35, 35, 35, 35, 35, 35, 35, - 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 315, 35, - 35, 35, 35, 35, 35, 48, 35, 0, 0, 316, 316, 316, 316, 316, 316, 316, 316, - 316, 316, 316, 316, 316, 316, 316, 316, 316, 316, 316, 316, 316, 316, - 316, 316, 316, 316, 316, 316, 316, 316, 316, 316, 316, 316, 316, 316, - 316, 316, 316, 316, 316, 316, 316, 316, 316, 316, 316, 316, 316, 316, 27, + 48, 48, 48, 48, 48, 48, 48, 48, 317, 35, 35, 35, 35, 35, 35, 35, 35, 35, + 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 219, 35, + 35, 35, 35, 35, 35, 48, 35, 0, 0, 318, 318, 318, 318, 318, 318, 318, 318, + 318, 318, 318, 318, 318, 318, 318, 318, 318, 318, 318, 318, 318, 318, + 318, 318, 318, 318, 318, 318, 318, 318, 318, 318, 318, 318, 318, 318, + 318, 318, 318, 318, 318, 318, 318, 318, 318, 318, 318, 318, 318, 318, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 0, 0, 0, 0, 27, 27, 27, 27, 27, 27, 27, 27, @@ -2309,29 +2413,55 @@ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 169, 169, 169, 169, 169, 169, + 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, 234, 234, 234, 234, 234, 234, 234, 234, 234, + 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, + 234, 234, 234, 234, 234, 234, 234, 319, 0, 0, 234, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 234, 0, 234, 0, 0, 234, 0, 0, 0, 234, 0, 0, 0, 234, 234, 234, + 234, 234, 0, 0, 0, 0, 0, 0, 0, 0, 262, 0, 0, 0, 0, 0, 0, 0, 262, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 262, 0, + 262, 262, 0, 0, 262, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 262, 262, 262, 262, 0, + 0, 234, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 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, 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, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 261, 261, 261, 261, 261, 261, 261, 261, 261, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, - 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 0, 0, 0, 0, 0, 0, + 169, 169, 169, 169, 169, 169, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, + 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, + 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, + 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 267, + 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, + 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, + 267, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 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, + 0, 0, 0, 0, 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, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, - 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 70, 70, 70, 70, + 131, 131, 131, 131, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, @@ -2344,17 +2474,17 @@ 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, - 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, - 70, 70, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 264, 264, 264, - 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, - 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, - 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, - 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, - 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, - 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, - 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, - 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, - 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, 0, 0, + 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 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, 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, 0, }; /* decomposition data */ @@ -2591,552 +2721,555 @@ 69, 262, 70, 262, 77, 262, 111, 258, 1488, 258, 1489, 258, 1490, 258, 1491, 262, 105, 770, 70, 65, 88, 262, 960, 262, 947, 262, 915, 262, 928, 262, 8721, 262, 68, 262, 100, 262, 101, 262, 105, 262, 106, 772, 49, - 8260, 51, 772, 50, 8260, 51, 772, 49, 8260, 53, 772, 50, 8260, 53, 772, - 51, 8260, 53, 772, 52, 8260, 53, 772, 49, 8260, 54, 772, 53, 8260, 54, - 772, 49, 8260, 56, 772, 51, 8260, 56, 772, 53, 8260, 56, 772, 55, 8260, - 56, 516, 49, 8260, 258, 73, 514, 73, 73, 770, 73, 73, 73, 514, 73, 86, - 258, 86, 514, 86, 73, 770, 86, 73, 73, 1026, 86, 73, 73, 73, 514, 73, 88, - 258, 88, 514, 88, 73, 770, 88, 73, 73, 258, 76, 258, 67, 258, 68, 258, - 77, 258, 105, 514, 105, 105, 770, 105, 105, 105, 514, 105, 118, 258, 118, - 514, 118, 105, 770, 118, 105, 105, 1026, 118, 105, 105, 105, 514, 105, - 120, 258, 120, 514, 120, 105, 770, 120, 105, 105, 258, 108, 258, 99, 258, - 100, 258, 109, 512, 8592, 824, 512, 8594, 824, 512, 8596, 824, 512, 8656, - 824, 512, 8660, 824, 512, 8658, 824, 512, 8707, 824, 512, 8712, 824, 512, - 8715, 824, 512, 8739, 824, 512, 8741, 824, 514, 8747, 8747, 770, 8747, - 8747, 8747, 514, 8750, 8750, 770, 8750, 8750, 8750, 512, 8764, 824, 512, - 8771, 824, 512, 8773, 824, 512, 8776, 824, 512, 61, 824, 512, 8801, 824, - 512, 8781, 824, 512, 60, 824, 512, 62, 824, 512, 8804, 824, 512, 8805, - 824, 512, 8818, 824, 512, 8819, 824, 512, 8822, 824, 512, 8823, 824, 512, - 8826, 824, 512, 8827, 824, 512, 8834, 824, 512, 8835, 824, 512, 8838, - 824, 512, 8839, 824, 512, 8866, 824, 512, 8872, 824, 512, 8873, 824, 512, - 8875, 824, 512, 8828, 824, 512, 8829, 824, 512, 8849, 824, 512, 8850, - 824, 512, 8882, 824, 512, 8883, 824, 512, 8884, 824, 512, 8885, 824, 256, - 12296, 256, 12297, 263, 49, 263, 50, 263, 51, 263, 52, 263, 53, 263, 54, - 263, 55, 263, 56, 263, 57, 519, 49, 48, 519, 49, 49, 519, 49, 50, 519, - 49, 51, 519, 49, 52, 519, 49, 53, 519, 49, 54, 519, 49, 55, 519, 49, 56, - 519, 49, 57, 519, 50, 48, 770, 40, 49, 41, 770, 40, 50, 41, 770, 40, 51, - 41, 770, 40, 52, 41, 770, 40, 53, 41, 770, 40, 54, 41, 770, 40, 55, 41, - 770, 40, 56, 41, 770, 40, 57, 41, 1026, 40, 49, 48, 41, 1026, 40, 49, 49, - 41, 1026, 40, 49, 50, 41, 1026, 40, 49, 51, 41, 1026, 40, 49, 52, 41, - 1026, 40, 49, 53, 41, 1026, 40, 49, 54, 41, 1026, 40, 49, 55, 41, 1026, - 40, 49, 56, 41, 1026, 40, 49, 57, 41, 1026, 40, 50, 48, 41, 514, 49, 46, - 514, 50, 46, 514, 51, 46, 514, 52, 46, 514, 53, 46, 514, 54, 46, 514, 55, - 46, 514, 56, 46, 514, 57, 46, 770, 49, 48, 46, 770, 49, 49, 46, 770, 49, - 50, 46, 770, 49, 51, 46, 770, 49, 52, 46, 770, 49, 53, 46, 770, 49, 54, - 46, 770, 49, 55, 46, 770, 49, 56, 46, 770, 49, 57, 46, 770, 50, 48, 46, - 770, 40, 97, 41, 770, 40, 98, 41, 770, 40, 99, 41, 770, 40, 100, 41, 770, - 40, 101, 41, 770, 40, 102, 41, 770, 40, 103, 41, 770, 40, 104, 41, 770, - 40, 105, 41, 770, 40, 106, 41, 770, 40, 107, 41, 770, 40, 108, 41, 770, - 40, 109, 41, 770, 40, 110, 41, 770, 40, 111, 41, 770, 40, 112, 41, 770, - 40, 113, 41, 770, 40, 114, 41, 770, 40, 115, 41, 770, 40, 116, 41, 770, - 40, 117, 41, 770, 40, 118, 41, 770, 40, 119, 41, 770, 40, 120, 41, 770, - 40, 121, 41, 770, 40, 122, 41, 263, 65, 263, 66, 263, 67, 263, 68, 263, - 69, 263, 70, 263, 71, 263, 72, 263, 73, 263, 74, 263, 75, 263, 76, 263, - 77, 263, 78, 263, 79, 263, 80, 263, 81, 263, 82, 263, 83, 263, 84, 263, - 85, 263, 86, 263, 87, 263, 88, 263, 89, 263, 90, 263, 97, 263, 98, 263, - 99, 263, 100, 263, 101, 263, 102, 263, 103, 263, 104, 263, 105, 263, 106, - 263, 107, 263, 108, 263, 109, 263, 110, 263, 111, 263, 112, 263, 113, - 263, 114, 263, 115, 263, 116, 263, 117, 263, 118, 263, 119, 263, 120, - 263, 121, 263, 122, 263, 48, 1026, 8747, 8747, 8747, 8747, 770, 58, 58, - 61, 514, 61, 61, 770, 61, 61, 61, 512, 10973, 824, 261, 106, 259, 86, - 259, 11617, 258, 27597, 258, 40863, 258, 19968, 258, 20008, 258, 20022, - 258, 20031, 258, 20057, 258, 20101, 258, 20108, 258, 20128, 258, 20154, - 258, 20799, 258, 20837, 258, 20843, 258, 20866, 258, 20886, 258, 20907, - 258, 20960, 258, 20981, 258, 20992, 258, 21147, 258, 21241, 258, 21269, - 258, 21274, 258, 21304, 258, 21313, 258, 21340, 258, 21353, 258, 21378, - 258, 21430, 258, 21448, 258, 21475, 258, 22231, 258, 22303, 258, 22763, - 258, 22786, 258, 22794, 258, 22805, 258, 22823, 258, 22899, 258, 23376, - 258, 23424, 258, 23544, 258, 23567, 258, 23586, 258, 23608, 258, 23662, - 258, 23665, 258, 24027, 258, 24037, 258, 24049, 258, 24062, 258, 24178, - 258, 24186, 258, 24191, 258, 24308, 258, 24318, 258, 24331, 258, 24339, - 258, 24400, 258, 24417, 258, 24435, 258, 24515, 258, 25096, 258, 25142, - 258, 25163, 258, 25903, 258, 25908, 258, 25991, 258, 26007, 258, 26020, - 258, 26041, 258, 26080, 258, 26085, 258, 26352, 258, 26376, 258, 26408, - 258, 27424, 258, 27490, 258, 27513, 258, 27571, 258, 27595, 258, 27604, - 258, 27611, 258, 27663, 258, 27668, 258, 27700, 258, 28779, 258, 29226, - 258, 29238, 258, 29243, 258, 29247, 258, 29255, 258, 29273, 258, 29275, - 258, 29356, 258, 29572, 258, 29577, 258, 29916, 258, 29926, 258, 29976, - 258, 29983, 258, 29992, 258, 30000, 258, 30091, 258, 30098, 258, 30326, - 258, 30333, 258, 30382, 258, 30399, 258, 30446, 258, 30683, 258, 30690, - 258, 30707, 258, 31034, 258, 31160, 258, 31166, 258, 31348, 258, 31435, - 258, 31481, 258, 31859, 258, 31992, 258, 32566, 258, 32593, 258, 32650, - 258, 32701, 258, 32769, 258, 32780, 258, 32786, 258, 32819, 258, 32895, - 258, 32905, 258, 33251, 258, 33258, 258, 33267, 258, 33276, 258, 33292, - 258, 33307, 258, 33311, 258, 33390, 258, 33394, 258, 33400, 258, 34381, - 258, 34411, 258, 34880, 258, 34892, 258, 34915, 258, 35198, 258, 35211, - 258, 35282, 258, 35328, 258, 35895, 258, 35910, 258, 35925, 258, 35960, - 258, 35997, 258, 36196, 258, 36208, 258, 36275, 258, 36523, 258, 36554, - 258, 36763, 258, 36784, 258, 36789, 258, 37009, 258, 37193, 258, 37318, - 258, 37324, 258, 37329, 258, 38263, 258, 38272, 258, 38428, 258, 38582, - 258, 38585, 258, 38632, 258, 38737, 258, 38750, 258, 38754, 258, 38761, - 258, 38859, 258, 38893, 258, 38899, 258, 38913, 258, 39080, 258, 39131, - 258, 39135, 258, 39318, 258, 39321, 258, 39340, 258, 39592, 258, 39640, - 258, 39647, 258, 39717, 258, 39727, 258, 39730, 258, 39740, 258, 39770, - 258, 40165, 258, 40565, 258, 40575, 258, 40613, 258, 40635, 258, 40643, - 258, 40653, 258, 40657, 258, 40697, 258, 40701, 258, 40718, 258, 40723, - 258, 40736, 258, 40763, 258, 40778, 258, 40786, 258, 40845, 258, 40860, - 258, 40864, 264, 32, 258, 12306, 258, 21313, 258, 21316, 258, 21317, 512, - 12363, 12441, 512, 12365, 12441, 512, 12367, 12441, 512, 12369, 12441, - 512, 12371, 12441, 512, 12373, 12441, 512, 12375, 12441, 512, 12377, - 12441, 512, 12379, 12441, 512, 12381, 12441, 512, 12383, 12441, 512, - 12385, 12441, 512, 12388, 12441, 512, 12390, 12441, 512, 12392, 12441, - 512, 12399, 12441, 512, 12399, 12442, 512, 12402, 12441, 512, 12402, - 12442, 512, 12405, 12441, 512, 12405, 12442, 512, 12408, 12441, 512, - 12408, 12442, 512, 12411, 12441, 512, 12411, 12442, 512, 12358, 12441, - 514, 32, 12441, 514, 32, 12442, 512, 12445, 12441, 521, 12424, 12426, - 512, 12459, 12441, 512, 12461, 12441, 512, 12463, 12441, 512, 12465, - 12441, 512, 12467, 12441, 512, 12469, 12441, 512, 12471, 12441, 512, - 12473, 12441, 512, 12475, 12441, 512, 12477, 12441, 512, 12479, 12441, - 512, 12481, 12441, 512, 12484, 12441, 512, 12486, 12441, 512, 12488, - 12441, 512, 12495, 12441, 512, 12495, 12442, 512, 12498, 12441, 512, - 12498, 12442, 512, 12501, 12441, 512, 12501, 12442, 512, 12504, 12441, - 512, 12504, 12442, 512, 12507, 12441, 512, 12507, 12442, 512, 12454, - 12441, 512, 12527, 12441, 512, 12528, 12441, 512, 12529, 12441, 512, - 12530, 12441, 512, 12541, 12441, 521, 12467, 12488, 258, 4352, 258, 4353, - 258, 4522, 258, 4354, 258, 4524, 258, 4525, 258, 4355, 258, 4356, 258, - 4357, 258, 4528, 258, 4529, 258, 4530, 258, 4531, 258, 4532, 258, 4533, - 258, 4378, 258, 4358, 258, 4359, 258, 4360, 258, 4385, 258, 4361, 258, - 4362, 258, 4363, 258, 4364, 258, 4365, 258, 4366, 258, 4367, 258, 4368, - 258, 4369, 258, 4370, 258, 4449, 258, 4450, 258, 4451, 258, 4452, 258, - 4453, 258, 4454, 258, 4455, 258, 4456, 258, 4457, 258, 4458, 258, 4459, - 258, 4460, 258, 4461, 258, 4462, 258, 4463, 258, 4464, 258, 4465, 258, - 4466, 258, 4467, 258, 4468, 258, 4469, 258, 4448, 258, 4372, 258, 4373, - 258, 4551, 258, 4552, 258, 4556, 258, 4558, 258, 4563, 258, 4567, 258, - 4569, 258, 4380, 258, 4573, 258, 4575, 258, 4381, 258, 4382, 258, 4384, - 258, 4386, 258, 4387, 258, 4391, 258, 4393, 258, 4395, 258, 4396, 258, - 4397, 258, 4398, 258, 4399, 258, 4402, 258, 4406, 258, 4416, 258, 4423, - 258, 4428, 258, 4593, 258, 4594, 258, 4439, 258, 4440, 258, 4441, 258, - 4484, 258, 4485, 258, 4488, 258, 4497, 258, 4498, 258, 4500, 258, 4510, - 258, 4513, 259, 19968, 259, 20108, 259, 19977, 259, 22235, 259, 19978, - 259, 20013, 259, 19979, 259, 30002, 259, 20057, 259, 19993, 259, 19969, - 259, 22825, 259, 22320, 259, 20154, 770, 40, 4352, 41, 770, 40, 4354, 41, - 770, 40, 4355, 41, 770, 40, 4357, 41, 770, 40, 4358, 41, 770, 40, 4359, - 41, 770, 40, 4361, 41, 770, 40, 4363, 41, 770, 40, 4364, 41, 770, 40, - 4366, 41, 770, 40, 4367, 41, 770, 40, 4368, 41, 770, 40, 4369, 41, 770, - 40, 4370, 41, 1026, 40, 4352, 4449, 41, 1026, 40, 4354, 4449, 41, 1026, - 40, 4355, 4449, 41, 1026, 40, 4357, 4449, 41, 1026, 40, 4358, 4449, 41, - 1026, 40, 4359, 4449, 41, 1026, 40, 4361, 4449, 41, 1026, 40, 4363, 4449, - 41, 1026, 40, 4364, 4449, 41, 1026, 40, 4366, 4449, 41, 1026, 40, 4367, - 4449, 41, 1026, 40, 4368, 4449, 41, 1026, 40, 4369, 4449, 41, 1026, 40, - 4370, 4449, 41, 1026, 40, 4364, 4462, 41, 1794, 40, 4363, 4457, 4364, - 4453, 4523, 41, 1538, 40, 4363, 4457, 4370, 4462, 41, 770, 40, 19968, 41, - 770, 40, 20108, 41, 770, 40, 19977, 41, 770, 40, 22235, 41, 770, 40, - 20116, 41, 770, 40, 20845, 41, 770, 40, 19971, 41, 770, 40, 20843, 41, - 770, 40, 20061, 41, 770, 40, 21313, 41, 770, 40, 26376, 41, 770, 40, - 28779, 41, 770, 40, 27700, 41, 770, 40, 26408, 41, 770, 40, 37329, 41, - 770, 40, 22303, 41, 770, 40, 26085, 41, 770, 40, 26666, 41, 770, 40, - 26377, 41, 770, 40, 31038, 41, 770, 40, 21517, 41, 770, 40, 29305, 41, - 770, 40, 36001, 41, 770, 40, 31069, 41, 770, 40, 21172, 41, 770, 40, - 20195, 41, 770, 40, 21628, 41, 770, 40, 23398, 41, 770, 40, 30435, 41, - 770, 40, 20225, 41, 770, 40, 36039, 41, 770, 40, 21332, 41, 770, 40, - 31085, 41, 770, 40, 20241, 41, 770, 40, 33258, 41, 770, 40, 33267, 41, - 778, 80, 84, 69, 519, 50, 49, 519, 50, 50, 519, 50, 51, 519, 50, 52, 519, - 50, 53, 519, 50, 54, 519, 50, 55, 519, 50, 56, 519, 50, 57, 519, 51, 48, - 519, 51, 49, 519, 51, 50, 519, 51, 51, 519, 51, 52, 519, 51, 53, 263, - 4352, 263, 4354, 263, 4355, 263, 4357, 263, 4358, 263, 4359, 263, 4361, - 263, 4363, 263, 4364, 263, 4366, 263, 4367, 263, 4368, 263, 4369, 263, - 4370, 519, 4352, 4449, 519, 4354, 4449, 519, 4355, 4449, 519, 4357, 4449, - 519, 4358, 4449, 519, 4359, 4449, 519, 4361, 4449, 519, 4363, 4449, 519, - 4364, 4449, 519, 4366, 4449, 519, 4367, 4449, 519, 4368, 4449, 519, 4369, - 4449, 519, 4370, 4449, 1287, 4366, 4449, 4535, 4352, 4457, 1031, 4364, - 4462, 4363, 4468, 519, 4363, 4462, 263, 19968, 263, 20108, 263, 19977, - 263, 22235, 263, 20116, 263, 20845, 263, 19971, 263, 20843, 263, 20061, - 263, 21313, 263, 26376, 263, 28779, 263, 27700, 263, 26408, 263, 37329, - 263, 22303, 263, 26085, 263, 26666, 263, 26377, 263, 31038, 263, 21517, - 263, 29305, 263, 36001, 263, 31069, 263, 21172, 263, 31192, 263, 30007, - 263, 22899, 263, 36969, 263, 20778, 263, 21360, 263, 27880, 263, 38917, - 263, 20241, 263, 20889, 263, 27491, 263, 19978, 263, 20013, 263, 19979, - 263, 24038, 263, 21491, 263, 21307, 263, 23447, 263, 23398, 263, 30435, - 263, 20225, 263, 36039, 263, 21332, 263, 22812, 519, 51, 54, 519, 51, 55, - 519, 51, 56, 519, 51, 57, 519, 52, 48, 519, 52, 49, 519, 52, 50, 519, 52, - 51, 519, 52, 52, 519, 52, 53, 519, 52, 54, 519, 52, 55, 519, 52, 56, 519, - 52, 57, 519, 53, 48, 514, 49, 26376, 514, 50, 26376, 514, 51, 26376, 514, - 52, 26376, 514, 53, 26376, 514, 54, 26376, 514, 55, 26376, 514, 56, - 26376, 514, 57, 26376, 770, 49, 48, 26376, 770, 49, 49, 26376, 770, 49, - 50, 26376, 522, 72, 103, 778, 101, 114, 103, 522, 101, 86, 778, 76, 84, - 68, 263, 12450, 263, 12452, 263, 12454, 263, 12456, 263, 12458, 263, - 12459, 263, 12461, 263, 12463, 263, 12465, 263, 12467, 263, 12469, 263, - 12471, 263, 12473, 263, 12475, 263, 12477, 263, 12479, 263, 12481, 263, - 12484, 263, 12486, 263, 12488, 263, 12490, 263, 12491, 263, 12492, 263, - 12493, 263, 12494, 263, 12495, 263, 12498, 263, 12501, 263, 12504, 263, - 12507, 263, 12510, 263, 12511, 263, 12512, 263, 12513, 263, 12514, 263, - 12516, 263, 12518, 263, 12520, 263, 12521, 263, 12522, 263, 12523, 263, - 12524, 263, 12525, 263, 12527, 263, 12528, 263, 12529, 263, 12530, 1034, - 12450, 12497, 12540, 12488, 1034, 12450, 12523, 12501, 12449, 1034, - 12450, 12531, 12506, 12450, 778, 12450, 12540, 12523, 1034, 12452, 12491, - 12531, 12464, 778, 12452, 12531, 12481, 778, 12454, 12457, 12531, 1290, - 12456, 12473, 12463, 12540, 12489, 1034, 12456, 12540, 12459, 12540, 778, - 12458, 12531, 12473, 778, 12458, 12540, 12512, 778, 12459, 12452, 12522, - 1034, 12459, 12521, 12483, 12488, 1034, 12459, 12525, 12522, 12540, 778, - 12460, 12525, 12531, 778, 12460, 12531, 12510, 522, 12462, 12460, 778, - 12462, 12491, 12540, 1034, 12461, 12517, 12522, 12540, 1034, 12462, - 12523, 12480, 12540, 522, 12461, 12525, 1290, 12461, 12525, 12464, 12521, - 12512, 1546, 12461, 12525, 12513, 12540, 12488, 12523, 1290, 12461, - 12525, 12527, 12483, 12488, 778, 12464, 12521, 12512, 1290, 12464, 12521, - 12512, 12488, 12531, 1290, 12463, 12523, 12476, 12452, 12525, 1034, - 12463, 12525, 12540, 12493, 778, 12465, 12540, 12473, 778, 12467, 12523, - 12490, 778, 12467, 12540, 12509, 1034, 12469, 12452, 12463, 12523, 1290, - 12469, 12531, 12481, 12540, 12512, 1034, 12471, 12522, 12531, 12464, 778, - 12475, 12531, 12481, 778, 12475, 12531, 12488, 778, 12480, 12540, 12473, - 522, 12487, 12471, 522, 12489, 12523, 522, 12488, 12531, 522, 12490, - 12494, 778, 12494, 12483, 12488, 778, 12495, 12452, 12484, 1290, 12497, - 12540, 12475, 12531, 12488, 778, 12497, 12540, 12484, 1034, 12496, 12540, - 12524, 12523, 1290, 12500, 12450, 12473, 12488, 12523, 778, 12500, 12463, - 12523, 522, 12500, 12467, 522, 12499, 12523, 1290, 12501, 12449, 12521, - 12483, 12489, 1034, 12501, 12451, 12540, 12488, 1290, 12502, 12483, - 12471, 12455, 12523, 778, 12501, 12521, 12531, 1290, 12504, 12463, 12479, - 12540, 12523, 522, 12506, 12477, 778, 12506, 12491, 12498, 778, 12504, - 12523, 12484, 778, 12506, 12531, 12473, 778, 12506, 12540, 12472, 778, - 12505, 12540, 12479, 1034, 12509, 12452, 12531, 12488, 778, 12508, 12523, - 12488, 522, 12507, 12531, 778, 12509, 12531, 12489, 778, 12507, 12540, - 12523, 778, 12507, 12540, 12531, 1034, 12510, 12452, 12463, 12525, 778, - 12510, 12452, 12523, 778, 12510, 12483, 12495, 778, 12510, 12523, 12463, - 1290, 12510, 12531, 12471, 12519, 12531, 1034, 12511, 12463, 12525, - 12531, 522, 12511, 12522, 1290, 12511, 12522, 12496, 12540, 12523, 522, - 12513, 12460, 1034, 12513, 12460, 12488, 12531, 1034, 12513, 12540, - 12488, 12523, 778, 12516, 12540, 12489, 778, 12516, 12540, 12523, 778, - 12518, 12450, 12531, 1034, 12522, 12483, 12488, 12523, 522, 12522, 12521, - 778, 12523, 12500, 12540, 1034, 12523, 12540, 12502, 12523, 522, 12524, - 12512, 1290, 12524, 12531, 12488, 12466, 12531, 778, 12527, 12483, 12488, - 514, 48, 28857, 514, 49, 28857, 514, 50, 28857, 514, 51, 28857, 514, 52, - 28857, 514, 53, 28857, 514, 54, 28857, 514, 55, 28857, 514, 56, 28857, - 514, 57, 28857, 770, 49, 48, 28857, 770, 49, 49, 28857, 770, 49, 50, - 28857, 770, 49, 51, 28857, 770, 49, 52, 28857, 770, 49, 53, 28857, 770, - 49, 54, 28857, 770, 49, 55, 28857, 770, 49, 56, 28857, 770, 49, 57, - 28857, 770, 50, 48, 28857, 770, 50, 49, 28857, 770, 50, 50, 28857, 770, - 50, 51, 28857, 770, 50, 52, 28857, 778, 104, 80, 97, 522, 100, 97, 522, - 65, 85, 778, 98, 97, 114, 522, 111, 86, 522, 112, 99, 522, 100, 109, 778, - 100, 109, 178, 778, 100, 109, 179, 522, 73, 85, 522, 24179, 25104, 522, - 26157, 21644, 522, 22823, 27491, 522, 26126, 27835, 1034, 26666, 24335, - 20250, 31038, 522, 112, 65, 522, 110, 65, 522, 956, 65, 522, 109, 65, - 522, 107, 65, 522, 75, 66, 522, 77, 66, 522, 71, 66, 778, 99, 97, 108, - 1034, 107, 99, 97, 108, 522, 112, 70, 522, 110, 70, 522, 956, 70, 522, - 956, 103, 522, 109, 103, 522, 107, 103, 522, 72, 122, 778, 107, 72, 122, - 778, 77, 72, 122, 778, 71, 72, 122, 778, 84, 72, 122, 522, 956, 8467, - 522, 109, 8467, 522, 100, 8467, 522, 107, 8467, 522, 102, 109, 522, 110, - 109, 522, 956, 109, 522, 109, 109, 522, 99, 109, 522, 107, 109, 778, 109, - 109, 178, 778, 99, 109, 178, 522, 109, 178, 778, 107, 109, 178, 778, 109, - 109, 179, 778, 99, 109, 179, 522, 109, 179, 778, 107, 109, 179, 778, 109, - 8725, 115, 1034, 109, 8725, 115, 178, 522, 80, 97, 778, 107, 80, 97, 778, - 77, 80, 97, 778, 71, 80, 97, 778, 114, 97, 100, 1290, 114, 97, 100, 8725, - 115, 1546, 114, 97, 100, 8725, 115, 178, 522, 112, 115, 522, 110, 115, - 522, 956, 115, 522, 109, 115, 522, 112, 86, 522, 110, 86, 522, 956, 86, - 522, 109, 86, 522, 107, 86, 522, 77, 86, 522, 112, 87, 522, 110, 87, 522, - 956, 87, 522, 109, 87, 522, 107, 87, 522, 77, 87, 522, 107, 937, 522, 77, - 937, 1034, 97, 46, 109, 46, 522, 66, 113, 522, 99, 99, 522, 99, 100, - 1034, 67, 8725, 107, 103, 778, 67, 111, 46, 522, 100, 66, 522, 71, 121, - 522, 104, 97, 522, 72, 80, 522, 105, 110, 522, 75, 75, 522, 75, 77, 522, - 107, 116, 522, 108, 109, 522, 108, 110, 778, 108, 111, 103, 522, 108, - 120, 522, 109, 98, 778, 109, 105, 108, 778, 109, 111, 108, 522, 80, 72, - 1034, 112, 46, 109, 46, 778, 80, 80, 77, 522, 80, 82, 522, 115, 114, 522, - 83, 118, 522, 87, 98, 778, 86, 8725, 109, 778, 65, 8725, 109, 514, 49, - 26085, 514, 50, 26085, 514, 51, 26085, 514, 52, 26085, 514, 53, 26085, - 514, 54, 26085, 514, 55, 26085, 514, 56, 26085, 514, 57, 26085, 770, 49, - 48, 26085, 770, 49, 49, 26085, 770, 49, 50, 26085, 770, 49, 51, 26085, - 770, 49, 52, 26085, 770, 49, 53, 26085, 770, 49, 54, 26085, 770, 49, 55, - 26085, 770, 49, 56, 26085, 770, 49, 57, 26085, 770, 50, 48, 26085, 770, - 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, 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, 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, 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, 119127, 119141, 512, 119128, 119141, 512, 119135, + 8260, 55, 772, 49, 8260, 57, 1028, 49, 8260, 49, 48, 772, 49, 8260, 51, + 772, 50, 8260, 51, 772, 49, 8260, 53, 772, 50, 8260, 53, 772, 51, 8260, + 53, 772, 52, 8260, 53, 772, 49, 8260, 54, 772, 53, 8260, 54, 772, 49, + 8260, 56, 772, 51, 8260, 56, 772, 53, 8260, 56, 772, 55, 8260, 56, 516, + 49, 8260, 258, 73, 514, 73, 73, 770, 73, 73, 73, 514, 73, 86, 258, 86, + 514, 86, 73, 770, 86, 73, 73, 1026, 86, 73, 73, 73, 514, 73, 88, 258, 88, + 514, 88, 73, 770, 88, 73, 73, 258, 76, 258, 67, 258, 68, 258, 77, 258, + 105, 514, 105, 105, 770, 105, 105, 105, 514, 105, 118, 258, 118, 514, + 118, 105, 770, 118, 105, 105, 1026, 118, 105, 105, 105, 514, 105, 120, + 258, 120, 514, 120, 105, 770, 120, 105, 105, 258, 108, 258, 99, 258, 100, + 258, 109, 772, 48, 8260, 51, 512, 8592, 824, 512, 8594, 824, 512, 8596, + 824, 512, 8656, 824, 512, 8660, 824, 512, 8658, 824, 512, 8707, 824, 512, + 8712, 824, 512, 8715, 824, 512, 8739, 824, 512, 8741, 824, 514, 8747, + 8747, 770, 8747, 8747, 8747, 514, 8750, 8750, 770, 8750, 8750, 8750, 512, + 8764, 824, 512, 8771, 824, 512, 8773, 824, 512, 8776, 824, 512, 61, 824, + 512, 8801, 824, 512, 8781, 824, 512, 60, 824, 512, 62, 824, 512, 8804, + 824, 512, 8805, 824, 512, 8818, 824, 512, 8819, 824, 512, 8822, 824, 512, + 8823, 824, 512, 8826, 824, 512, 8827, 824, 512, 8834, 824, 512, 8835, + 824, 512, 8838, 824, 512, 8839, 824, 512, 8866, 824, 512, 8872, 824, 512, + 8873, 824, 512, 8875, 824, 512, 8828, 824, 512, 8829, 824, 512, 8849, + 824, 512, 8850, 824, 512, 8882, 824, 512, 8883, 824, 512, 8884, 824, 512, + 8885, 824, 256, 12296, 256, 12297, 263, 49, 263, 50, 263, 51, 263, 52, + 263, 53, 263, 54, 263, 55, 263, 56, 263, 57, 519, 49, 48, 519, 49, 49, + 519, 49, 50, 519, 49, 51, 519, 49, 52, 519, 49, 53, 519, 49, 54, 519, 49, + 55, 519, 49, 56, 519, 49, 57, 519, 50, 48, 770, 40, 49, 41, 770, 40, 50, + 41, 770, 40, 51, 41, 770, 40, 52, 41, 770, 40, 53, 41, 770, 40, 54, 41, + 770, 40, 55, 41, 770, 40, 56, 41, 770, 40, 57, 41, 1026, 40, 49, 48, 41, + 1026, 40, 49, 49, 41, 1026, 40, 49, 50, 41, 1026, 40, 49, 51, 41, 1026, + 40, 49, 52, 41, 1026, 40, 49, 53, 41, 1026, 40, 49, 54, 41, 1026, 40, 49, + 55, 41, 1026, 40, 49, 56, 41, 1026, 40, 49, 57, 41, 1026, 40, 50, 48, 41, + 514, 49, 46, 514, 50, 46, 514, 51, 46, 514, 52, 46, 514, 53, 46, 514, 54, + 46, 514, 55, 46, 514, 56, 46, 514, 57, 46, 770, 49, 48, 46, 770, 49, 49, + 46, 770, 49, 50, 46, 770, 49, 51, 46, 770, 49, 52, 46, 770, 49, 53, 46, + 770, 49, 54, 46, 770, 49, 55, 46, 770, 49, 56, 46, 770, 49, 57, 46, 770, + 50, 48, 46, 770, 40, 97, 41, 770, 40, 98, 41, 770, 40, 99, 41, 770, 40, + 100, 41, 770, 40, 101, 41, 770, 40, 102, 41, 770, 40, 103, 41, 770, 40, + 104, 41, 770, 40, 105, 41, 770, 40, 106, 41, 770, 40, 107, 41, 770, 40, + 108, 41, 770, 40, 109, 41, 770, 40, 110, 41, 770, 40, 111, 41, 770, 40, + 112, 41, 770, 40, 113, 41, 770, 40, 114, 41, 770, 40, 115, 41, 770, 40, + 116, 41, 770, 40, 117, 41, 770, 40, 118, 41, 770, 40, 119, 41, 770, 40, + 120, 41, 770, 40, 121, 41, 770, 40, 122, 41, 263, 65, 263, 66, 263, 67, + 263, 68, 263, 69, 263, 70, 263, 71, 263, 72, 263, 73, 263, 74, 263, 75, + 263, 76, 263, 77, 263, 78, 263, 79, 263, 80, 263, 81, 263, 82, 263, 83, + 263, 84, 263, 85, 263, 86, 263, 87, 263, 88, 263, 89, 263, 90, 263, 97, + 263, 98, 263, 99, 263, 100, 263, 101, 263, 102, 263, 103, 263, 104, 263, + 105, 263, 106, 263, 107, 263, 108, 263, 109, 263, 110, 263, 111, 263, + 112, 263, 113, 263, 114, 263, 115, 263, 116, 263, 117, 263, 118, 263, + 119, 263, 120, 263, 121, 263, 122, 263, 48, 1026, 8747, 8747, 8747, 8747, + 770, 58, 58, 61, 514, 61, 61, 770, 61, 61, 61, 512, 10973, 824, 261, 106, + 259, 86, 259, 11617, 258, 27597, 258, 40863, 258, 19968, 258, 20008, 258, + 20022, 258, 20031, 258, 20057, 258, 20101, 258, 20108, 258, 20128, 258, + 20154, 258, 20799, 258, 20837, 258, 20843, 258, 20866, 258, 20886, 258, + 20907, 258, 20960, 258, 20981, 258, 20992, 258, 21147, 258, 21241, 258, + 21269, 258, 21274, 258, 21304, 258, 21313, 258, 21340, 258, 21353, 258, + 21378, 258, 21430, 258, 21448, 258, 21475, 258, 22231, 258, 22303, 258, + 22763, 258, 22786, 258, 22794, 258, 22805, 258, 22823, 258, 22899, 258, + 23376, 258, 23424, 258, 23544, 258, 23567, 258, 23586, 258, 23608, 258, + 23662, 258, 23665, 258, 24027, 258, 24037, 258, 24049, 258, 24062, 258, + 24178, 258, 24186, 258, 24191, 258, 24308, 258, 24318, 258, 24331, 258, + 24339, 258, 24400, 258, 24417, 258, 24435, 258, 24515, 258, 25096, 258, + 25142, 258, 25163, 258, 25903, 258, 25908, 258, 25991, 258, 26007, 258, + 26020, 258, 26041, 258, 26080, 258, 26085, 258, 26352, 258, 26376, 258, + 26408, 258, 27424, 258, 27490, 258, 27513, 258, 27571, 258, 27595, 258, + 27604, 258, 27611, 258, 27663, 258, 27668, 258, 27700, 258, 28779, 258, + 29226, 258, 29238, 258, 29243, 258, 29247, 258, 29255, 258, 29273, 258, + 29275, 258, 29356, 258, 29572, 258, 29577, 258, 29916, 258, 29926, 258, + 29976, 258, 29983, 258, 29992, 258, 30000, 258, 30091, 258, 30098, 258, + 30326, 258, 30333, 258, 30382, 258, 30399, 258, 30446, 258, 30683, 258, + 30690, 258, 30707, 258, 31034, 258, 31160, 258, 31166, 258, 31348, 258, + 31435, 258, 31481, 258, 31859, 258, 31992, 258, 32566, 258, 32593, 258, + 32650, 258, 32701, 258, 32769, 258, 32780, 258, 32786, 258, 32819, 258, + 32895, 258, 32905, 258, 33251, 258, 33258, 258, 33267, 258, 33276, 258, + 33292, 258, 33307, 258, 33311, 258, 33390, 258, 33394, 258, 33400, 258, + 34381, 258, 34411, 258, 34880, 258, 34892, 258, 34915, 258, 35198, 258, + 35211, 258, 35282, 258, 35328, 258, 35895, 258, 35910, 258, 35925, 258, + 35960, 258, 35997, 258, 36196, 258, 36208, 258, 36275, 258, 36523, 258, + 36554, 258, 36763, 258, 36784, 258, 36789, 258, 37009, 258, 37193, 258, + 37318, 258, 37324, 258, 37329, 258, 38263, 258, 38272, 258, 38428, 258, + 38582, 258, 38585, 258, 38632, 258, 38737, 258, 38750, 258, 38754, 258, + 38761, 258, 38859, 258, 38893, 258, 38899, 258, 38913, 258, 39080, 258, + 39131, 258, 39135, 258, 39318, 258, 39321, 258, 39340, 258, 39592, 258, + 39640, 258, 39647, 258, 39717, 258, 39727, 258, 39730, 258, 39740, 258, + 39770, 258, 40165, 258, 40565, 258, 40575, 258, 40613, 258, 40635, 258, + 40643, 258, 40653, 258, 40657, 258, 40697, 258, 40701, 258, 40718, 258, + 40723, 258, 40736, 258, 40763, 258, 40778, 258, 40786, 258, 40845, 258, + 40860, 258, 40864, 264, 32, 258, 12306, 258, 21313, 258, 21316, 258, + 21317, 512, 12363, 12441, 512, 12365, 12441, 512, 12367, 12441, 512, + 12369, 12441, 512, 12371, 12441, 512, 12373, 12441, 512, 12375, 12441, + 512, 12377, 12441, 512, 12379, 12441, 512, 12381, 12441, 512, 12383, + 12441, 512, 12385, 12441, 512, 12388, 12441, 512, 12390, 12441, 512, + 12392, 12441, 512, 12399, 12441, 512, 12399, 12442, 512, 12402, 12441, + 512, 12402, 12442, 512, 12405, 12441, 512, 12405, 12442, 512, 12408, + 12441, 512, 12408, 12442, 512, 12411, 12441, 512, 12411, 12442, 512, + 12358, 12441, 514, 32, 12441, 514, 32, 12442, 512, 12445, 12441, 521, + 12424, 12426, 512, 12459, 12441, 512, 12461, 12441, 512, 12463, 12441, + 512, 12465, 12441, 512, 12467, 12441, 512, 12469, 12441, 512, 12471, + 12441, 512, 12473, 12441, 512, 12475, 12441, 512, 12477, 12441, 512, + 12479, 12441, 512, 12481, 12441, 512, 12484, 12441, 512, 12486, 12441, + 512, 12488, 12441, 512, 12495, 12441, 512, 12495, 12442, 512, 12498, + 12441, 512, 12498, 12442, 512, 12501, 12441, 512, 12501, 12442, 512, + 12504, 12441, 512, 12504, 12442, 512, 12507, 12441, 512, 12507, 12442, + 512, 12454, 12441, 512, 12527, 12441, 512, 12528, 12441, 512, 12529, + 12441, 512, 12530, 12441, 512, 12541, 12441, 521, 12467, 12488, 258, + 4352, 258, 4353, 258, 4522, 258, 4354, 258, 4524, 258, 4525, 258, 4355, + 258, 4356, 258, 4357, 258, 4528, 258, 4529, 258, 4530, 258, 4531, 258, + 4532, 258, 4533, 258, 4378, 258, 4358, 258, 4359, 258, 4360, 258, 4385, + 258, 4361, 258, 4362, 258, 4363, 258, 4364, 258, 4365, 258, 4366, 258, + 4367, 258, 4368, 258, 4369, 258, 4370, 258, 4449, 258, 4450, 258, 4451, + 258, 4452, 258, 4453, 258, 4454, 258, 4455, 258, 4456, 258, 4457, 258, + 4458, 258, 4459, 258, 4460, 258, 4461, 258, 4462, 258, 4463, 258, 4464, + 258, 4465, 258, 4466, 258, 4467, 258, 4468, 258, 4469, 258, 4448, 258, + 4372, 258, 4373, 258, 4551, 258, 4552, 258, 4556, 258, 4558, 258, 4563, + 258, 4567, 258, 4569, 258, 4380, 258, 4573, 258, 4575, 258, 4381, 258, + 4382, 258, 4384, 258, 4386, 258, 4387, 258, 4391, 258, 4393, 258, 4395, + 258, 4396, 258, 4397, 258, 4398, 258, 4399, 258, 4402, 258, 4406, 258, + 4416, 258, 4423, 258, 4428, 258, 4593, 258, 4594, 258, 4439, 258, 4440, + 258, 4441, 258, 4484, 258, 4485, 258, 4488, 258, 4497, 258, 4498, 258, + 4500, 258, 4510, 258, 4513, 259, 19968, 259, 20108, 259, 19977, 259, + 22235, 259, 19978, 259, 20013, 259, 19979, 259, 30002, 259, 20057, 259, + 19993, 259, 19969, 259, 22825, 259, 22320, 259, 20154, 770, 40, 4352, 41, + 770, 40, 4354, 41, 770, 40, 4355, 41, 770, 40, 4357, 41, 770, 40, 4358, + 41, 770, 40, 4359, 41, 770, 40, 4361, 41, 770, 40, 4363, 41, 770, 40, + 4364, 41, 770, 40, 4366, 41, 770, 40, 4367, 41, 770, 40, 4368, 41, 770, + 40, 4369, 41, 770, 40, 4370, 41, 1026, 40, 4352, 4449, 41, 1026, 40, + 4354, 4449, 41, 1026, 40, 4355, 4449, 41, 1026, 40, 4357, 4449, 41, 1026, + 40, 4358, 4449, 41, 1026, 40, 4359, 4449, 41, 1026, 40, 4361, 4449, 41, + 1026, 40, 4363, 4449, 41, 1026, 40, 4364, 4449, 41, 1026, 40, 4366, 4449, + 41, 1026, 40, 4367, 4449, 41, 1026, 40, 4368, 4449, 41, 1026, 40, 4369, + 4449, 41, 1026, 40, 4370, 4449, 41, 1026, 40, 4364, 4462, 41, 1794, 40, + 4363, 4457, 4364, 4453, 4523, 41, 1538, 40, 4363, 4457, 4370, 4462, 41, + 770, 40, 19968, 41, 770, 40, 20108, 41, 770, 40, 19977, 41, 770, 40, + 22235, 41, 770, 40, 20116, 41, 770, 40, 20845, 41, 770, 40, 19971, 41, + 770, 40, 20843, 41, 770, 40, 20061, 41, 770, 40, 21313, 41, 770, 40, + 26376, 41, 770, 40, 28779, 41, 770, 40, 27700, 41, 770, 40, 26408, 41, + 770, 40, 37329, 41, 770, 40, 22303, 41, 770, 40, 26085, 41, 770, 40, + 26666, 41, 770, 40, 26377, 41, 770, 40, 31038, 41, 770, 40, 21517, 41, + 770, 40, 29305, 41, 770, 40, 36001, 41, 770, 40, 31069, 41, 770, 40, + 21172, 41, 770, 40, 20195, 41, 770, 40, 21628, 41, 770, 40, 23398, 41, + 770, 40, 30435, 41, 770, 40, 20225, 41, 770, 40, 36039, 41, 770, 40, + 21332, 41, 770, 40, 31085, 41, 770, 40, 20241, 41, 770, 40, 33258, 41, + 770, 40, 33267, 41, 263, 21839, 263, 24188, 263, 25991, 263, 31631, 778, + 80, 84, 69, 519, 50, 49, 519, 50, 50, 519, 50, 51, 519, 50, 52, 519, 50, + 53, 519, 50, 54, 519, 50, 55, 519, 50, 56, 519, 50, 57, 519, 51, 48, 519, + 51, 49, 519, 51, 50, 519, 51, 51, 519, 51, 52, 519, 51, 53, 263, 4352, + 263, 4354, 263, 4355, 263, 4357, 263, 4358, 263, 4359, 263, 4361, 263, + 4363, 263, 4364, 263, 4366, 263, 4367, 263, 4368, 263, 4369, 263, 4370, + 519, 4352, 4449, 519, 4354, 4449, 519, 4355, 4449, 519, 4357, 4449, 519, + 4358, 4449, 519, 4359, 4449, 519, 4361, 4449, 519, 4363, 4449, 519, 4364, + 4449, 519, 4366, 4449, 519, 4367, 4449, 519, 4368, 4449, 519, 4369, 4449, + 519, 4370, 4449, 1287, 4366, 4449, 4535, 4352, 4457, 1031, 4364, 4462, + 4363, 4468, 519, 4363, 4462, 263, 19968, 263, 20108, 263, 19977, 263, + 22235, 263, 20116, 263, 20845, 263, 19971, 263, 20843, 263, 20061, 263, + 21313, 263, 26376, 263, 28779, 263, 27700, 263, 26408, 263, 37329, 263, + 22303, 263, 26085, 263, 26666, 263, 26377, 263, 31038, 263, 21517, 263, + 29305, 263, 36001, 263, 31069, 263, 21172, 263, 31192, 263, 30007, 263, + 22899, 263, 36969, 263, 20778, 263, 21360, 263, 27880, 263, 38917, 263, + 20241, 263, 20889, 263, 27491, 263, 19978, 263, 20013, 263, 19979, 263, + 24038, 263, 21491, 263, 21307, 263, 23447, 263, 23398, 263, 30435, 263, + 20225, 263, 36039, 263, 21332, 263, 22812, 519, 51, 54, 519, 51, 55, 519, + 51, 56, 519, 51, 57, 519, 52, 48, 519, 52, 49, 519, 52, 50, 519, 52, 51, + 519, 52, 52, 519, 52, 53, 519, 52, 54, 519, 52, 55, 519, 52, 56, 519, 52, + 57, 519, 53, 48, 514, 49, 26376, 514, 50, 26376, 514, 51, 26376, 514, 52, + 26376, 514, 53, 26376, 514, 54, 26376, 514, 55, 26376, 514, 56, 26376, + 514, 57, 26376, 770, 49, 48, 26376, 770, 49, 49, 26376, 770, 49, 50, + 26376, 522, 72, 103, 778, 101, 114, 103, 522, 101, 86, 778, 76, 84, 68, + 263, 12450, 263, 12452, 263, 12454, 263, 12456, 263, 12458, 263, 12459, + 263, 12461, 263, 12463, 263, 12465, 263, 12467, 263, 12469, 263, 12471, + 263, 12473, 263, 12475, 263, 12477, 263, 12479, 263, 12481, 263, 12484, + 263, 12486, 263, 12488, 263, 12490, 263, 12491, 263, 12492, 263, 12493, + 263, 12494, 263, 12495, 263, 12498, 263, 12501, 263, 12504, 263, 12507, + 263, 12510, 263, 12511, 263, 12512, 263, 12513, 263, 12514, 263, 12516, + 263, 12518, 263, 12520, 263, 12521, 263, 12522, 263, 12523, 263, 12524, + 263, 12525, 263, 12527, 263, 12528, 263, 12529, 263, 12530, 1034, 12450, + 12497, 12540, 12488, 1034, 12450, 12523, 12501, 12449, 1034, 12450, + 12531, 12506, 12450, 778, 12450, 12540, 12523, 1034, 12452, 12491, 12531, + 12464, 778, 12452, 12531, 12481, 778, 12454, 12457, 12531, 1290, 12456, + 12473, 12463, 12540, 12489, 1034, 12456, 12540, 12459, 12540, 778, 12458, + 12531, 12473, 778, 12458, 12540, 12512, 778, 12459, 12452, 12522, 1034, + 12459, 12521, 12483, 12488, 1034, 12459, 12525, 12522, 12540, 778, 12460, + 12525, 12531, 778, 12460, 12531, 12510, 522, 12462, 12460, 778, 12462, + 12491, 12540, 1034, 12461, 12517, 12522, 12540, 1034, 12462, 12523, + 12480, 12540, 522, 12461, 12525, 1290, 12461, 12525, 12464, 12521, 12512, + 1546, 12461, 12525, 12513, 12540, 12488, 12523, 1290, 12461, 12525, + 12527, 12483, 12488, 778, 12464, 12521, 12512, 1290, 12464, 12521, 12512, + 12488, 12531, 1290, 12463, 12523, 12476, 12452, 12525, 1034, 12463, + 12525, 12540, 12493, 778, 12465, 12540, 12473, 778, 12467, 12523, 12490, + 778, 12467, 12540, 12509, 1034, 12469, 12452, 12463, 12523, 1290, 12469, + 12531, 12481, 12540, 12512, 1034, 12471, 12522, 12531, 12464, 778, 12475, + 12531, 12481, 778, 12475, 12531, 12488, 778, 12480, 12540, 12473, 522, + 12487, 12471, 522, 12489, 12523, 522, 12488, 12531, 522, 12490, 12494, + 778, 12494, 12483, 12488, 778, 12495, 12452, 12484, 1290, 12497, 12540, + 12475, 12531, 12488, 778, 12497, 12540, 12484, 1034, 12496, 12540, 12524, + 12523, 1290, 12500, 12450, 12473, 12488, 12523, 778, 12500, 12463, 12523, + 522, 12500, 12467, 522, 12499, 12523, 1290, 12501, 12449, 12521, 12483, + 12489, 1034, 12501, 12451, 12540, 12488, 1290, 12502, 12483, 12471, + 12455, 12523, 778, 12501, 12521, 12531, 1290, 12504, 12463, 12479, 12540, + 12523, 522, 12506, 12477, 778, 12506, 12491, 12498, 778, 12504, 12523, + 12484, 778, 12506, 12531, 12473, 778, 12506, 12540, 12472, 778, 12505, + 12540, 12479, 1034, 12509, 12452, 12531, 12488, 778, 12508, 12523, 12488, + 522, 12507, 12531, 778, 12509, 12531, 12489, 778, 12507, 12540, 12523, + 778, 12507, 12540, 12531, 1034, 12510, 12452, 12463, 12525, 778, 12510, + 12452, 12523, 778, 12510, 12483, 12495, 778, 12510, 12523, 12463, 1290, + 12510, 12531, 12471, 12519, 12531, 1034, 12511, 12463, 12525, 12531, 522, + 12511, 12522, 1290, 12511, 12522, 12496, 12540, 12523, 522, 12513, 12460, + 1034, 12513, 12460, 12488, 12531, 1034, 12513, 12540, 12488, 12523, 778, + 12516, 12540, 12489, 778, 12516, 12540, 12523, 778, 12518, 12450, 12531, + 1034, 12522, 12483, 12488, 12523, 522, 12522, 12521, 778, 12523, 12500, + 12540, 1034, 12523, 12540, 12502, 12523, 522, 12524, 12512, 1290, 12524, + 12531, 12488, 12466, 12531, 778, 12527, 12483, 12488, 514, 48, 28857, + 514, 49, 28857, 514, 50, 28857, 514, 51, 28857, 514, 52, 28857, 514, 53, + 28857, 514, 54, 28857, 514, 55, 28857, 514, 56, 28857, 514, 57, 28857, + 770, 49, 48, 28857, 770, 49, 49, 28857, 770, 49, 50, 28857, 770, 49, 51, + 28857, 770, 49, 52, 28857, 770, 49, 53, 28857, 770, 49, 54, 28857, 770, + 49, 55, 28857, 770, 49, 56, 28857, 770, 49, 57, 28857, 770, 50, 48, + 28857, 770, 50, 49, 28857, 770, 50, 50, 28857, 770, 50, 51, 28857, 770, + 50, 52, 28857, 778, 104, 80, 97, 522, 100, 97, 522, 65, 85, 778, 98, 97, + 114, 522, 111, 86, 522, 112, 99, 522, 100, 109, 778, 100, 109, 178, 778, + 100, 109, 179, 522, 73, 85, 522, 24179, 25104, 522, 26157, 21644, 522, + 22823, 27491, 522, 26126, 27835, 1034, 26666, 24335, 20250, 31038, 522, + 112, 65, 522, 110, 65, 522, 956, 65, 522, 109, 65, 522, 107, 65, 522, 75, + 66, 522, 77, 66, 522, 71, 66, 778, 99, 97, 108, 1034, 107, 99, 97, 108, + 522, 112, 70, 522, 110, 70, 522, 956, 70, 522, 956, 103, 522, 109, 103, + 522, 107, 103, 522, 72, 122, 778, 107, 72, 122, 778, 77, 72, 122, 778, + 71, 72, 122, 778, 84, 72, 122, 522, 956, 8467, 522, 109, 8467, 522, 100, + 8467, 522, 107, 8467, 522, 102, 109, 522, 110, 109, 522, 956, 109, 522, + 109, 109, 522, 99, 109, 522, 107, 109, 778, 109, 109, 178, 778, 99, 109, + 178, 522, 109, 178, 778, 107, 109, 178, 778, 109, 109, 179, 778, 99, 109, + 179, 522, 109, 179, 778, 107, 109, 179, 778, 109, 8725, 115, 1034, 109, + 8725, 115, 178, 522, 80, 97, 778, 107, 80, 97, 778, 77, 80, 97, 778, 71, + 80, 97, 778, 114, 97, 100, 1290, 114, 97, 100, 8725, 115, 1546, 114, 97, + 100, 8725, 115, 178, 522, 112, 115, 522, 110, 115, 522, 956, 115, 522, + 109, 115, 522, 112, 86, 522, 110, 86, 522, 956, 86, 522, 109, 86, 522, + 107, 86, 522, 77, 86, 522, 112, 87, 522, 110, 87, 522, 956, 87, 522, 109, + 87, 522, 107, 87, 522, 77, 87, 522, 107, 937, 522, 77, 937, 1034, 97, 46, + 109, 46, 522, 66, 113, 522, 99, 99, 522, 99, 100, 1034, 67, 8725, 107, + 103, 778, 67, 111, 46, 522, 100, 66, 522, 71, 121, 522, 104, 97, 522, 72, + 80, 522, 105, 110, 522, 75, 75, 522, 75, 77, 522, 107, 116, 522, 108, + 109, 522, 108, 110, 778, 108, 111, 103, 522, 108, 120, 522, 109, 98, 778, + 109, 105, 108, 778, 109, 111, 108, 522, 80, 72, 1034, 112, 46, 109, 46, + 778, 80, 80, 77, 522, 80, 82, 522, 115, 114, 522, 83, 118, 522, 87, 98, + 778, 86, 8725, 109, 778, 65, 8725, 109, 514, 49, 26085, 514, 50, 26085, + 514, 51, 26085, 514, 52, 26085, 514, 53, 26085, 514, 54, 26085, 514, 55, + 26085, 514, 56, 26085, 514, 57, 26085, 770, 49, 48, 26085, 770, 49, 49, + 26085, 770, 49, 50, 26085, 770, 49, 51, 26085, 770, 49, 52, 26085, 770, + 49, 53, 26085, 770, 49, 54, 26085, 770, 49, 55, 26085, 770, 49, 56, + 26085, 770, 49, 57, 26085, 770, 50, 48, 26085, 770, 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, 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, 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, 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, @@ -3274,71 +3407,91 @@ 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, 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, + 262, 53, 262, 54, 262, 55, 262, 56, 262, 57, 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, 66, 266, 78, 266, 80, + 266, 83, 266, 87, 522, 72, 86, 522, 77, 86, 522, 83, 68, 522, 83, 83, + 778, 80, 80, 86, 522, 68, 74, 522, 12411, 12363, 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, 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, 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, @@ -3382,17 +3535,17 @@ 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 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, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 41, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 42, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 42, 7, 7, 43, 44, - 45, 46, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 43, 7, 7, 44, 45, + 46, 47, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 48, 49, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, @@ -3403,7 +3556,7 @@ 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 47, 48, 49, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 50, 51, 52, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, @@ -3828,30 +3981,74 @@ 0, 3271, 0, 3273, 0, 3275, 0, 3277, 3279, 3281, 3283, 0, 3285, 3287, 3289, 0, 3291, 3293, 3295, 3297, 3299, 3301, 3303, 0, 3305, 3309, 3311, 3313, 3315, 3317, 0, 0, 0, 0, 3319, 3321, 3323, 3325, 3327, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 3329, 3333, 3337, 3341, 3345, 3349, 3353, 3357, 3361, - 3365, 3369, 3373, 3377, 3380, 3382, 3385, 3389, 3392, 3394, 3397, 3401, - 3406, 3409, 3411, 3414, 3418, 3420, 3422, 3424, 3426, 3428, 3431, 3435, - 3438, 3440, 3443, 3447, 3452, 3455, 3457, 3460, 3464, 3466, 3468, 3470, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 3472, 3475, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 3478, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 3481, 3484, 3487, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3490, 0, 0, 0, 0, - 3493, 0, 0, 3496, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 3499, 0, 3502, 0, 0, 0, 0, 0, 3505, 3508, 0, 3512, 3515, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3519, 0, 0, 3522, 0, 0, - 3525, 0, 3528, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 3531, 0, 3534, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3537, 3540, 3543, - 3546, 3549, 0, 0, 3552, 3555, 0, 0, 3558, 3561, 0, 0, 0, 0, 0, 0, 3564, - 3567, 0, 0, 3570, 3573, 0, 0, 3576, 3579, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 3582, 3585, 3588, 3591, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 3594, 3597, 3600, 3603, 0, 0, 0, 0, 0, 0, 3606, - 3609, 3612, 3615, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3618, 3620, 0, 0, 0, + 0, 0, 3329, 3333, 3337, 3342, 3346, 3350, 3354, 3358, 3362, 3366, 3370, + 3374, 3378, 3382, 3386, 3390, 3393, 3395, 3398, 3402, 3405, 3407, 3410, + 3414, 3419, 3422, 3424, 3427, 3431, 3433, 3435, 3437, 3439, 3441, 3444, + 3448, 3451, 3453, 3456, 3460, 3465, 3468, 3470, 3473, 3477, 3479, 3481, + 3483, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3485, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 3489, 3492, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 3495, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3498, 3501, 3504, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3507, 0, + 0, 0, 0, 3510, 0, 0, 3513, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 3516, 0, 3519, 0, 0, 0, 0, 0, 3522, 3525, 0, + 3529, 3532, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3536, 0, 0, + 3539, 0, 0, 3542, 0, 3545, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 3548, 0, 3551, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3554, + 3557, 3560, 3563, 3566, 0, 0, 3569, 3572, 0, 0, 3575, 3578, 0, 0, 0, 0, + 0, 0, 3581, 3584, 0, 0, 3587, 3590, 0, 0, 3593, 3596, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 3599, 3602, 3605, 3608, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3611, 3614, 3617, 3620, 0, 0, 0, 0, + 0, 0, 3623, 3626, 3629, 3632, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3635, + 3637, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 3639, 3641, 3643, 3645, 3647, 3649, 3651, 3653, 3655, 3657, 3660, 3663, + 3666, 3669, 3672, 3675, 3678, 3681, 3684, 3687, 3690, 3694, 3698, 3702, + 3706, 3710, 3714, 3718, 3722, 3726, 3731, 3736, 3741, 3746, 3751, 3756, + 3761, 3766, 3771, 3776, 3781, 3784, 3787, 3790, 3793, 3796, 3799, 3802, + 3805, 3808, 3812, 3816, 3820, 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, 3958, 3960, 3962, 3964, 3966, 3968, 3970, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 4062, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 4067, 4071, 4074, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4081, 4083, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -3859,41 +4056,12 @@ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4085, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3622, 3624, 3626, - 3628, 3630, 3632, 3634, 3636, 3638, 3640, 3643, 3646, 3649, 3652, 3655, - 3658, 3661, 3664, 3667, 3670, 3673, 3677, 3681, 3685, 3689, 3693, 3697, - 3701, 3705, 3709, 3714, 3719, 3724, 3729, 3734, 3739, 3744, 3749, 3754, - 3759, 3764, 3767, 3770, 3773, 3776, 3779, 3782, 3785, 3788, 3791, 3795, - 3799, 3803, 3807, 3811, 3815, 3819, 3823, 3827, 3831, 3835, 3839, 3843, - 3847, 3851, 3855, 3859, 3863, 3867, 3871, 3875, 3879, 3883, 3887, 3891, - 3895, 3899, 3903, 3907, 3911, 3915, 3919, 3923, 3927, 3931, 3935, 3939, - 3941, 3943, 3945, 3947, 3949, 3951, 3953, 3955, 3957, 3959, 3961, 3963, - 3965, 3967, 3969, 3971, 3973, 3975, 3977, 3979, 3981, 3983, 3985, 3987, - 3989, 3991, 3993, 3995, 3997, 3999, 4001, 4003, 4005, 4007, 4009, 4011, - 4013, 4015, 4017, 4019, 4021, 4023, 4025, 4027, 4029, 4031, 4033, 4035, - 4037, 4039, 4041, 4043, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4045, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 4050, 4054, 4057, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4061, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 4064, 4066, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -3901,435 +4069,458 @@ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4087, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4068, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 4089, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4091, 4093, 4095, 4097, 4099, + 4101, 4103, 4105, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 4519, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4521, 0, 4523, 4525, 4527, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4529, 0, 4532, 0, 4535, 0, 4538, + 0, 4541, 0, 4544, 0, 4547, 0, 4550, 0, 4553, 0, 4556, 0, 4559, 0, 4562, + 0, 0, 4565, 0, 4568, 0, 4571, 0, 0, 0, 0, 0, 0, 4574, 4577, 0, 4580, + 4583, 0, 4586, 4589, 0, 4592, 4595, 0, 4598, 4601, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4604, 0, 0, 0, 0, 0, 0, + 4607, 4610, 0, 4613, 4616, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4619, 0, + 4622, 0, 4625, 0, 4628, 0, 4631, 0, 4634, 0, 4637, 0, 4640, 0, 4643, 0, + 4646, 0, 4649, 0, 4652, 0, 0, 4655, 0, 4658, 0, 4661, 0, 0, 0, 0, 0, 0, + 4664, 4667, 0, 4670, 4673, 0, 4676, 4679, 0, 4682, 4685, 0, 4688, 4691, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4694, + 0, 0, 4697, 4700, 4703, 4706, 0, 0, 0, 4709, 4712, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4715, 4717, 4719, + 4721, 4723, 4725, 4727, 4729, 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, 0, 0, 0, 4903, 4905, 4907, + 4909, 4911, 4913, 4915, 4917, 4919, 4921, 4923, 4925, 4927, 4929, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4931, + 4935, 4939, 4943, 4947, 4951, 4955, 4959, 4963, 4967, 4971, 4975, 4979, + 4983, 4987, 4992, 4997, 5002, 5007, 5012, 5017, 5022, 5027, 5032, 5037, + 5042, 5047, 5052, 5057, 5062, 5070, 0, 5077, 5081, 5085, 5089, 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, 5223, 5225, 5227, 0, 0, + 0, 0, 0, 0, 0, 0, 5229, 5233, 5236, 5239, 5242, 5245, 5248, 5251, 5254, + 5257, 5260, 5263, 5266, 5269, 5272, 5275, 5278, 5280, 5282, 5284, 5286, + 5288, 5290, 5292, 5294, 5296, 5298, 5300, 5302, 5304, 5306, 5309, 5312, + 5315, 5318, 5321, 5324, 5327, 5330, 5333, 5336, 5339, 5342, 5345, 5348, + 5354, 5359, 0, 5362, 5364, 5366, 5368, 5370, 5372, 5374, 5376, 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, 5463, 5466, 5469, 5472, 5475, 5478, 5481, + 5484, 5487, 5490, 5493, 5496, 5499, 5502, 5505, 5508, 5511, 5514, 5517, + 5520, 5523, 5526, 5529, 5532, 5536, 5540, 5544, 5547, 5551, 5554, 5558, + 5560, 5562, 5564, 5566, 5568, 5570, 5572, 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, 0, 5652, + 5657, 5662, 5667, 5671, 5676, 5680, 5684, 5690, 5695, 5699, 5703, 5707, + 5712, 5717, 5721, 5725, 5728, 5732, 5737, 5742, 5745, 5751, 5758, 5764, + 5768, 5774, 5780, 5785, 5789, 5793, 5797, 5802, 5808, 5813, 5817, 5821, + 5825, 5828, 5831, 5834, 5837, 5841, 5845, 5851, 5855, 5860, 5866, 5870, + 5873, 5876, 5882, 5887, 5893, 5897, 5903, 5906, 5910, 5914, 5918, 5922, + 5926, 5931, 5935, 5938, 5942, 5946, 5950, 5955, 5959, 5963, 5967, 5973, + 5978, 5981, 5987, 5990, 5995, 6000, 6004, 6008, 6012, 6017, 6020, 6024, + 6029, 6032, 6038, 6042, 6045, 6048, 6051, 6054, 6057, 6060, 6063, 6066, + 6069, 6072, 6076, 6080, 6084, 6088, 6092, 6096, 6100, 6104, 6108, 6112, + 6116, 6120, 6124, 6128, 6132, 6136, 6139, 6142, 6146, 6149, 6152, 6155, + 6159, 6163, 6166, 6169, 6172, 6175, 6178, 6183, 6186, 6189, 6192, 6195, + 6198, 6201, 6204, 6207, 6211, 6216, 6219, 6222, 6225, 6228, 6231, 6234, + 6237, 6241, 6245, 6249, 6253, 6256, 6259, 6262, 6265, 6268, 6271, 6274, + 6277, 6280, 6283, 6287, 6291, 6294, 6298, 6302, 6306, 6309, 6313, 6317, + 6322, 6325, 6329, 6333, 6337, 6341, 6347, 6354, 6357, 6360, 6363, 6366, + 6369, 6372, 6375, 6378, 6381, 6384, 6387, 6390, 6393, 6396, 6399, 6402, + 6405, 6408, 6413, 6416, 6419, 6422, 6427, 6431, 6434, 6437, 6440, 6443, + 6446, 6449, 6452, 6455, 6458, 6461, 6465, 6468, 6471, 6475, 6479, 6482, + 6487, 6491, 6494, 6497, 6500, 6503, 6507, 6511, 6514, 6517, 6520, 6523, + 6526, 6529, 6532, 6535, 6538, 6542, 6546, 6550, 6554, 6558, 6562, 6566, + 6570, 6574, 6578, 6582, 6586, 6590, 6594, 6598, 6602, 6606, 6610, 6614, + 6618, 6622, 6626, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6630, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 4070, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4072, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 4074, 4076, 4078, 4080, 4082, 4084, 4086, 4088, - 4090, 4092, 4094, 4096, 4098, 4100, 4102, 4104, 4106, 4108, 4110, 4112, - 4114, 4116, 4118, 4120, 4122, 4124, 4126, 4128, 4130, 4132, 4134, 4136, - 4138, 4140, 4142, 4144, 4146, 4148, 4150, 4152, 4154, 4156, 4158, 4160, - 4162, 4164, 4166, 4168, 4170, 4172, 4174, 4176, 4178, 4180, 4182, 4184, - 4186, 4188, 4190, 4192, 4194, 4196, 4198, 4200, 4202, 4204, 4206, 4208, - 4210, 4212, 4214, 4216, 4218, 4220, 4222, 4224, 4226, 4228, 4230, 4232, - 4234, 4236, 4238, 4240, 4242, 4244, 4246, 4248, 4250, 4252, 4254, 4256, - 4258, 4260, 4262, 4264, 4266, 4268, 4270, 4272, 4274, 4276, 4278, 4280, - 4282, 4284, 4286, 4288, 4290, 4292, 4294, 4296, 4298, 4300, 4302, 4304, - 4306, 4308, 4310, 4312, 4314, 4316, 4318, 4320, 4322, 4324, 4326, 4328, - 4330, 4332, 4334, 4336, 4338, 4340, 4342, 4344, 4346, 4348, 4350, 4352, - 4354, 4356, 4358, 4360, 4362, 4364, 4366, 4368, 4370, 4372, 4374, 4376, - 4378, 4380, 4382, 4384, 4386, 4388, 4390, 4392, 4394, 4396, 4398, 4400, - 4402, 4404, 4406, 4408, 4410, 4412, 4414, 4416, 4418, 4420, 4422, 4424, - 4426, 4428, 4430, 4432, 4434, 4436, 4438, 4440, 4442, 4444, 4446, 4448, - 4450, 4452, 4454, 4456, 4458, 4460, 4462, 4464, 4466, 4468, 4470, 4472, - 4474, 4476, 4478, 4480, 4482, 4484, 4486, 4488, 4490, 4492, 4494, 4496, - 4498, 4500, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4502, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 4504, 0, 4506, 4508, 4510, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 4512, 0, 4515, 0, 4518, 0, 4521, 0, 4524, 0, 4527, - 0, 4530, 0, 4533, 0, 4536, 0, 4539, 0, 4542, 0, 4545, 0, 0, 4548, 0, - 4551, 0, 4554, 0, 0, 0, 0, 0, 0, 4557, 4560, 0, 4563, 4566, 0, 4569, - 4572, 0, 4575, 4578, 0, 4581, 4584, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4587, 0, 0, 0, 0, 0, 0, 4590, 4593, 0, - 4596, 4599, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4602, 0, 4605, 0, 4608, - 0, 4611, 0, 4614, 0, 4617, 0, 4620, 0, 4623, 0, 4626, 0, 4629, 0, 4632, - 0, 4635, 0, 0, 4638, 0, 4641, 0, 4644, 0, 0, 0, 0, 0, 0, 4647, 4650, 0, - 4653, 4656, 0, 4659, 4662, 0, 4665, 4668, 0, 4671, 4674, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4677, 0, 0, 4680, - 4683, 4686, 4689, 0, 0, 0, 4692, 4695, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4698, 4700, 4702, 4704, 4706, - 4708, 4710, 4712, 4714, 4716, 4718, 4720, 4722, 4724, 4726, 4728, 4730, - 4732, 4734, 4736, 4738, 4740, 4742, 4744, 4746, 4748, 4750, 4752, 4754, - 4756, 4758, 4760, 4762, 4764, 4766, 4768, 4770, 4772, 4774, 4776, 4778, - 4780, 4782, 4784, 4786, 4788, 4790, 4792, 4794, 4796, 4798, 4800, 4802, - 4804, 4806, 4808, 4810, 4812, 4814, 4816, 4818, 4820, 4822, 4824, 4826, - 4828, 4830, 4832, 4834, 4836, 4838, 4840, 4842, 4844, 4846, 4848, 4850, - 4852, 4854, 4856, 4858, 4860, 4862, 4864, 4866, 4868, 4870, 4872, 4874, - 4876, 4878, 4880, 4882, 4884, 0, 0, 0, 4886, 4888, 4890, 4892, 4894, - 4896, 4898, 4900, 4902, 4904, 4906, 4908, 4910, 4912, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4914, 4918, 4922, - 4926, 4930, 4934, 4938, 4942, 4946, 4950, 4954, 4958, 4962, 4966, 4970, - 4975, 4980, 4985, 4990, 4995, 5000, 5005, 5010, 5015, 5020, 5025, 5030, - 5035, 5040, 5045, 5053, 0, 5060, 5064, 5068, 5072, 5076, 5080, 5084, - 5088, 5092, 5096, 5100, 5104, 5108, 5112, 5116, 5120, 5124, 5128, 5132, - 5136, 5140, 5144, 5148, 5152, 5156, 5160, 5164, 5168, 5172, 5176, 5180, - 5184, 5188, 5192, 5196, 5200, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5204, - 5208, 5211, 5214, 5217, 5220, 5223, 5226, 5229, 5232, 5235, 5238, 5241, - 5244, 5247, 5250, 5253, 5255, 5257, 5259, 5261, 5263, 5265, 5267, 5269, - 5271, 5273, 5275, 5277, 5279, 5281, 5284, 5287, 5290, 5293, 5296, 5299, - 5302, 5305, 5308, 5311, 5314, 5317, 5320, 5323, 5329, 5334, 0, 5337, - 5339, 5341, 5343, 5345, 5347, 5349, 5351, 5353, 5355, 5357, 5359, 5361, - 5363, 5365, 5367, 5369, 5371, 5373, 5375, 5377, 5379, 5381, 5383, 5385, - 5387, 5389, 5391, 5393, 5395, 5397, 5399, 5401, 5403, 5405, 5407, 5409, - 5411, 5413, 5415, 5417, 5419, 5421, 5423, 5425, 5427, 5429, 5431, 5433, - 5435, 5438, 5441, 5444, 5447, 5450, 5453, 5456, 5459, 5462, 5465, 5468, - 5471, 5474, 5477, 5480, 5483, 5486, 5489, 5492, 5495, 5498, 5501, 5504, - 5507, 5511, 5515, 5519, 5522, 5526, 5529, 5533, 5535, 5537, 5539, 5541, - 5543, 5545, 5547, 5549, 5551, 5553, 5555, 5557, 5559, 5561, 5563, 5565, - 5567, 5569, 5571, 5573, 5575, 5577, 5579, 5581, 5583, 5585, 5587, 5589, - 5591, 5593, 5595, 5597, 5599, 5601, 5603, 5605, 5607, 5609, 5611, 5613, - 5615, 5617, 5619, 5621, 5623, 5625, 0, 5627, 5632, 5637, 5642, 5646, - 5651, 5655, 5659, 5665, 5670, 5674, 5678, 5682, 5687, 5692, 5696, 5700, - 5703, 5707, 5712, 5717, 5720, 5726, 5733, 5739, 5743, 5749, 5755, 5760, - 5764, 5768, 5772, 5777, 5783, 5788, 5792, 5796, 5800, 5803, 5806, 5809, - 5812, 5816, 5820, 5826, 5830, 5835, 5841, 5845, 5848, 5851, 5857, 5862, - 5868, 5872, 5878, 5881, 5885, 5889, 5893, 5897, 5901, 5906, 5910, 5913, - 5917, 5921, 5925, 5930, 5934, 5938, 5942, 5948, 5953, 5956, 5962, 5965, - 5970, 5975, 5979, 5983, 5987, 5992, 5995, 5999, 6004, 6007, 6013, 6017, - 6020, 6023, 6026, 6029, 6032, 6035, 6038, 6041, 6044, 6047, 6051, 6055, - 6059, 6063, 6067, 6071, 6075, 6079, 6083, 6087, 6091, 6095, 6099, 6103, - 6107, 6111, 6114, 6117, 6121, 6124, 6127, 6130, 6134, 6138, 6141, 6144, - 6147, 6150, 6153, 6158, 6161, 6164, 6167, 6170, 6173, 6176, 6179, 6182, - 6186, 6191, 6194, 6197, 6200, 6203, 6206, 6209, 6212, 6216, 6220, 6224, - 6228, 6231, 6234, 6237, 6240, 6243, 6246, 6249, 6252, 6255, 6258, 6262, - 6266, 6269, 6273, 6277, 6281, 6284, 6288, 6292, 6297, 6300, 6304, 6308, - 6312, 6316, 6322, 6329, 6332, 6335, 6338, 6341, 6344, 6347, 6350, 6353, - 6356, 6359, 6362, 6365, 6368, 6371, 6374, 6377, 6380, 6383, 6388, 6391, - 6394, 6397, 6402, 6406, 6409, 6412, 6415, 6418, 6421, 6424, 6427, 6430, - 6433, 6436, 6440, 6443, 6446, 6450, 6454, 6457, 6462, 6466, 6469, 6472, - 6475, 6478, 6482, 6486, 6489, 6492, 6495, 6498, 6501, 6504, 6507, 6510, - 6513, 6517, 6521, 6525, 6529, 6533, 6537, 6541, 6545, 6549, 6553, 6557, - 6561, 6565, 6569, 6573, 6577, 6581, 6585, 6589, 6593, 6597, 6601, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6605, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6607, 6609, 6611, 6613, - 6615, 6617, 6619, 6621, 6623, 6625, 6627, 6629, 6631, 6633, 6635, 6637, - 6639, 6641, 6643, 6645, 6647, 6649, 6651, 6653, 6655, 6657, 6659, 6661, - 6663, 6665, 6667, 6669, 6671, 6673, 6675, 6677, 6679, 6681, 6683, 6685, - 6687, 6689, 6691, 6693, 6695, 6697, 6699, 6701, 6703, 6705, 6707, 6709, - 6711, 6713, 6715, 6717, 6719, 6721, 6723, 6725, 6727, 6729, 6731, 6733, - 6735, 6737, 6739, 6741, 6743, 6745, 6747, 6749, 6751, 6753, 6755, 6757, - 6759, 6761, 6763, 6765, 6767, 6769, 6771, 6773, 6775, 6777, 6779, 6781, - 6783, 6785, 6787, 6789, 6791, 6793, 6795, 6797, 6799, 6801, 6803, 6805, - 6807, 6809, 6811, 6813, 6815, 6817, 6819, 6821, 6823, 6825, 6827, 6829, - 6831, 6833, 6835, 6837, 6839, 6841, 6843, 6845, 6847, 6849, 6851, 6853, - 6855, 6857, 6859, 6861, 6863, 6865, 6867, 6869, 6871, 6873, 6875, 6877, - 6879, 6881, 6883, 6885, 6887, 6889, 6891, 6893, 6895, 6897, 6899, 6901, - 6903, 6905, 6907, 6909, 6911, 6913, 6915, 6917, 6919, 6921, 6923, 6925, - 6927, 6929, 6931, 6933, 6935, 6937, 6939, 6941, 6943, 6945, 6947, 6949, - 6951, 6953, 6955, 6957, 6959, 6961, 6963, 6965, 6967, 6969, 6971, 6973, - 6975, 6977, 6979, 6981, 6983, 6985, 6987, 6989, 6991, 6993, 6995, 6997, - 6999, 7001, 7003, 7005, 7007, 7009, 7011, 7013, 7015, 7017, 7019, 7021, - 7023, 7025, 7027, 7029, 7031, 7033, 7035, 7037, 7039, 7041, 7043, 7045, - 7047, 7049, 7051, 7053, 7055, 7057, 7059, 7061, 7063, 7065, 7067, 7069, - 7071, 7073, 7075, 7077, 7079, 7081, 7083, 7085, 7087, 7089, 7091, 7093, - 7095, 7097, 7099, 7101, 7103, 7105, 7107, 7109, 7111, 7113, 7115, 7117, - 7119, 7121, 7123, 7125, 7127, 7129, 7131, 7133, 7135, 7137, 7139, 7141, - 7143, 7145, 0, 0, 7147, 0, 7149, 0, 0, 7151, 7153, 7155, 7157, 7159, - 7161, 7163, 7165, 7167, 7169, 0, 7171, 0, 7173, 0, 0, 7175, 7177, 0, 0, - 0, 7179, 7181, 7183, 7185, 0, 0, 7187, 7189, 7191, 7193, 7195, 7197, - 7199, 7201, 7203, 7205, 7207, 7209, 7211, 7213, 7215, 7217, 7219, 7221, - 7223, 7225, 7227, 7229, 7231, 7233, 7235, 7237, 7239, 7241, 7243, 7245, - 7247, 7249, 7251, 7253, 7255, 7257, 7259, 7261, 7263, 7265, 7267, 7269, - 7271, 7273, 7275, 7277, 7279, 7281, 7283, 7285, 7287, 7289, 7291, 7293, - 7295, 7297, 7299, 7301, 7303, 0, 0, 0, 0, 0, 7305, 7307, 7309, 7311, - 7313, 7315, 7317, 7319, 7321, 7323, 7325, 7327, 7329, 7331, 7333, 7335, - 7337, 7339, 7341, 7343, 7345, 7347, 7349, 7351, 7353, 7355, 7357, 7359, - 7361, 7363, 7365, 7367, 7369, 7371, 7373, 7375, 7377, 7379, 7381, 7383, - 7385, 7387, 7389, 7391, 7393, 7395, 7397, 7399, 7401, 7403, 7405, 7407, - 7409, 7411, 7413, 7415, 7417, 7419, 7421, 7423, 7425, 7427, 7429, 7431, - 7433, 7435, 7437, 7439, 7441, 7443, 7445, 7447, 7449, 7451, 7453, 7455, - 7457, 7459, 7461, 7463, 7465, 7467, 7469, 7471, 7473, 7475, 7477, 7479, - 7481, 7483, 7485, 7487, 7489, 7491, 7493, 7495, 7497, 7499, 7501, 7503, - 7505, 7507, 7509, 7511, 7513, 7515, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 7517, 7520, 7523, 7526, 7530, 7534, 7537, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 7540, 7543, 7546, 7549, 7552, 0, 0, 0, 0, 0, 7555, 0, 7558, - 7561, 7563, 7565, 7567, 7569, 7571, 7573, 7575, 7577, 7579, 7581, 7584, - 7587, 7590, 7593, 7596, 7599, 7602, 7605, 7608, 7611, 7614, 7617, 0, - 7620, 7623, 7626, 7629, 7632, 0, 7635, 0, 7638, 7641, 0, 7644, 7647, 0, - 7650, 7653, 7656, 7659, 7662, 7665, 7668, 7671, 7674, 7677, 7680, 7682, - 7684, 7686, 7688, 7690, 7692, 7694, 7696, 7698, 7700, 7702, 7704, 7706, - 7708, 7710, 7712, 7714, 7716, 7718, 7720, 7722, 7724, 7726, 7728, 7730, - 7732, 7734, 7736, 7738, 7740, 7742, 7744, 7746, 7748, 7750, 7752, 7754, - 7756, 7758, 7760, 7762, 7764, 7766, 7768, 7770, 7772, 7774, 7776, 7778, - 7780, 7782, 7784, 7786, 7788, 7790, 7792, 7794, 7796, 7798, 7800, 7802, - 7804, 7806, 7808, 7810, 7812, 7814, 7816, 7818, 7820, 7822, 7824, 7826, - 7828, 7830, 7832, 7834, 7836, 7838, 7840, 7842, 7844, 7846, 7848, 7850, - 7852, 7854, 7856, 7858, 7860, 7862, 7864, 7866, 7868, 7870, 7872, 7874, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 7876, 7878, 7880, 7882, 7884, 7886, 7888, - 7890, 7892, 7894, 7896, 7898, 7900, 7902, 7904, 7906, 7908, 7910, 7912, - 7914, 7916, 7918, 7920, 7922, 7925, 7928, 7931, 7934, 7937, 7940, 7943, - 7946, 7949, 7952, 7955, 7958, 7961, 7964, 7967, 7970, 7973, 7976, 7978, - 7980, 7982, 7984, 7987, 7990, 7993, 7996, 7999, 8002, 8005, 8008, 8011, - 8014, 8017, 8020, 8023, 8026, 8029, 8032, 8035, 8038, 8041, 8044, 8047, - 8050, 8053, 8056, 8059, 8062, 8065, 8068, 8071, 8074, 8077, 8080, 8083, - 8086, 8089, 8092, 8095, 8098, 8101, 8104, 8107, 8110, 8113, 8116, 8119, - 8122, 8125, 8128, 8131, 8134, 8137, 8140, 8143, 8146, 8149, 8152, 8155, - 8158, 8161, 8164, 8167, 8170, 8173, 8176, 8179, 8182, 8185, 8188, 8191, - 8194, 8197, 8200, 8203, 8206, 8209, 8212, 8215, 8218, 8221, 8224, 8227, - 8230, 8233, 8236, 8239, 8242, 8245, 8248, 8251, 8254, 8257, 8260, 8263, - 8266, 8270, 8274, 8278, 8282, 8286, 8290, 8293, 8296, 8299, 8302, 8305, - 8308, 8311, 8314, 8317, 8320, 8323, 8326, 8329, 8332, 8335, 8338, 8341, - 8344, 8347, 8350, 8353, 8356, 8359, 8362, 8365, 8368, 8371, 8374, 8377, - 8380, 8383, 8386, 8389, 8392, 8395, 8398, 8401, 8404, 8407, 8410, 8413, - 8416, 8419, 8422, 8425, 8428, 8431, 8434, 8437, 8440, 8443, 8446, 8449, - 8452, 8455, 8458, 8461, 8464, 8467, 8470, 8473, 8476, 8479, 8482, 8485, - 8488, 8491, 8494, 8497, 8500, 8503, 8506, 8509, 8512, 8515, 8518, 8521, - 8524, 8527, 8530, 8533, 8536, 8539, 8542, 8545, 8548, 8551, 8554, 8557, - 8560, 8563, 8566, 8569, 8572, 8575, 8578, 8581, 8584, 8587, 8590, 8593, - 8596, 8599, 8602, 8605, 8608, 8611, 8614, 8617, 8620, 8623, 8626, 8629, - 8632, 8635, 8638, 8641, 8644, 8647, 8650, 8653, 8656, 8659, 8662, 8665, - 8668, 8671, 8674, 8677, 8680, 8683, 8686, 8689, 8692, 8695, 8698, 8701, - 8704, 8707, 8710, 8713, 8716, 8720, 8724, 8728, 8731, 8734, 8737, 8740, - 8743, 8746, 8749, 8752, 8755, 8758, 8761, 8764, 8767, 8770, 8773, 8776, - 8779, 8782, 8785, 8788, 8791, 8794, 8797, 8800, 8803, 8806, 8809, 8812, - 8815, 8818, 8821, 8824, 8827, 8830, 8833, 8836, 8839, 8842, 8845, 8848, - 8851, 8854, 8857, 8860, 8863, 8866, 8869, 8872, 8875, 8878, 8881, 8884, - 8887, 8890, 8893, 8896, 8899, 8902, 8905, 8908, 8911, 8914, 8917, 8920, - 8923, 8926, 8929, 8932, 8935, 8938, 8941, 8944, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8947, 8951, 8955, 8959, 8963, 8967, 8971, - 8975, 8979, 8983, 8987, 8991, 8995, 8999, 9003, 9007, 9011, 9015, 9019, - 9023, 9027, 9031, 9035, 9039, 9043, 9047, 9051, 9055, 9059, 9063, 9067, - 9071, 9075, 9079, 9083, 9087, 9091, 9095, 9099, 9103, 9107, 9111, 9115, - 9119, 9123, 9127, 9131, 9135, 9139, 9143, 9147, 9151, 9155, 9159, 9163, - 9167, 9171, 9175, 9179, 9183, 9187, 9191, 9195, 9199, 0, 0, 9203, 9207, - 9211, 9215, 9219, 9223, 9227, 9231, 9235, 9239, 9243, 9247, 9251, 9255, - 9259, 9263, 9267, 9271, 9275, 9279, 9283, 9287, 9291, 9295, 9299, 9303, - 9307, 9311, 9315, 9319, 9323, 9327, 9331, 9335, 9339, 9343, 9347, 9351, - 9355, 9359, 9363, 9367, 9371, 9375, 9379, 9383, 9387, 9391, 9395, 9399, - 9403, 9407, 9411, 9415, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 9419, 9423, 9427, 9432, 9437, 9442, 9447, 9452, 9457, 9462, 9466, 9485, - 9494, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9499, - 9501, 9503, 9505, 9507, 9509, 9511, 9513, 9515, 9517, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9519, 9521, 9523, 9525, - 9527, 9529, 9531, 9533, 9535, 9537, 9539, 9541, 9543, 9545, 9547, 9549, - 9551, 9553, 9555, 9557, 9559, 0, 0, 9561, 9563, 9565, 9567, 9569, 9571, - 9573, 9575, 9577, 9579, 9581, 9583, 0, 9585, 9587, 9589, 9591, 9593, - 9595, 9597, 9599, 9601, 9603, 9605, 9607, 9609, 9611, 9613, 9615, 9617, - 9619, 9621, 0, 9623, 9625, 9627, 9629, 0, 0, 0, 0, 9631, 9634, 9637, 0, - 9640, 0, 9643, 9646, 9649, 9652, 9655, 9658, 9661, 9664, 9667, 9670, - 9673, 9675, 9677, 9679, 9681, 9683, 9685, 9687, 9689, 9691, 9693, 9695, - 9697, 9699, 9701, 9703, 9705, 9707, 9709, 9711, 9713, 9715, 9717, 9719, - 9721, 9723, 9725, 9727, 9729, 9731, 9733, 9735, 9737, 9739, 9741, 9743, - 9745, 9747, 9749, 9751, 9753, 9755, 9757, 9759, 9761, 9763, 9765, 9767, - 9769, 9771, 9773, 9775, 9777, 9779, 9781, 9783, 9785, 9787, 9789, 9791, - 9793, 9795, 9797, 9799, 9801, 9803, 9805, 9807, 9809, 9811, 9813, 9815, - 9817, 9819, 9821, 9823, 9825, 9827, 9829, 9831, 9833, 9835, 9837, 9839, - 9841, 9843, 9845, 9847, 9849, 9851, 9853, 9855, 9857, 9859, 9861, 9863, - 9865, 9867, 9869, 9871, 9873, 9875, 9877, 9879, 9881, 9883, 9885, 9887, - 9889, 9891, 9893, 9895, 9897, 9899, 9901, 9903, 9905, 9907, 9910, 9913, - 9916, 9919, 9922, 9925, 9928, 0, 0, 0, 0, 9931, 9933, 9935, 9937, 9939, - 9941, 9943, 9945, 9947, 9949, 9951, 9953, 9955, 9957, 9959, 9961, 9963, - 9965, 9967, 9969, 9971, 9973, 9975, 9977, 9979, 9981, 9983, 9985, 9987, - 9989, 9991, 9993, 9995, 9997, 9999, 10001, 10003, 10005, 10007, 10009, - 10011, 10013, 10015, 10017, 10019, 10021, 10023, 10025, 10027, 10029, - 10031, 10033, 10035, 10037, 10039, 10041, 10043, 10045, 10047, 10049, - 10051, 10053, 10055, 10057, 10059, 10061, 10063, 10065, 10067, 10069, - 10071, 10073, 10075, 10077, 10079, 10081, 10083, 10085, 10087, 10089, - 10091, 10093, 10095, 10097, 10099, 10101, 10103, 10105, 10107, 10109, - 10111, 10113, 10115, 10117, 10119, 10121, 10123, 10125, 10127, 10129, - 10131, 10133, 10135, 10137, 10139, 10141, 10143, 10145, 10147, 10149, - 10151, 10153, 10155, 10157, 10159, 10161, 10163, 10165, 10167, 10169, - 10171, 10173, 10175, 10177, 10179, 10181, 10183, 10185, 10187, 10189, - 10191, 10193, 10195, 10197, 10199, 10201, 10203, 10205, 10207, 10209, - 10211, 10213, 10215, 10217, 10219, 10221, 10223, 10225, 10227, 10229, - 10231, 10233, 10235, 10237, 10239, 10241, 10243, 10245, 10247, 10249, - 10251, 10253, 10255, 10257, 10259, 10261, 10263, 10265, 10267, 10269, - 10271, 10273, 10275, 10277, 10279, 10281, 10283, 10285, 10287, 10289, - 10291, 10293, 10295, 10297, 10299, 10301, 10303, 10305, 10307, 10309, 0, - 0, 0, 10311, 10313, 10315, 10317, 10319, 10321, 0, 0, 10323, 10325, - 10327, 10329, 10331, 10333, 0, 0, 10335, 10337, 10339, 10341, 10343, - 10345, 0, 0, 10347, 10349, 10351, 0, 0, 0, 10353, 10355, 10357, 10359, - 10361, 10363, 10365, 0, 10367, 10369, 10371, 10373, 10375, 10377, 10379, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10381, 10384, 10387, 10390, - 10393, 10396, 10399, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10402, - 10405, 10408, 10411, 10414, 10417, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 10420, 10422, 10424, 10426, 10428, 10430, 10432, 10434, 10436, - 10438, 10440, 10442, 10444, 10446, 10448, 10450, 10452, 10454, 10456, - 10458, 10460, 10462, 10464, 10466, 10468, 10470, 10472, 10474, 10476, - 10478, 10480, 10482, 10484, 10486, 10488, 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, 0, 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, 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, 0, 10732, 10734, 0, 0, - 10736, 0, 0, 10738, 10740, 0, 0, 10742, 10744, 10746, 10748, 0, 10750, - 10752, 10754, 10756, 10758, 10760, 10762, 10764, 10766, 10768, 10770, - 10772, 0, 10774, 0, 10776, 10778, 10780, 10782, 10784, 10786, 10788, 0, - 10790, 10792, 10794, 10796, 10798, 10800, 10802, 10804, 10806, 10808, - 10810, 10812, 10814, 10816, 10818, 10820, 10822, 10824, 10826, 10828, - 10830, 10832, 10834, 10836, 10838, 10840, 10842, 10844, 10846, 10848, - 10850, 10852, 10854, 10856, 10858, 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, 0, 10920, 10922, 10924, 10926, 0, 0, - 10928, 10930, 10932, 10934, 10936, 10938, 10940, 10942, 0, 10944, 10946, - 10948, 10950, 10952, 10954, 10956, 0, 10958, 10960, 10962, 10964, 10966, - 10968, 10970, 10972, 10974, 10976, 10978, 10980, 10982, 10984, 10986, - 10988, 10990, 10992, 10994, 10996, 10998, 11000, 11002, 11004, 11006, - 11008, 11010, 11012, 0, 11014, 11016, 11018, 11020, 0, 11022, 11024, - 11026, 11028, 11030, 0, 11032, 0, 0, 0, 11034, 11036, 11038, 11040, - 11042, 11044, 11046, 0, 11048, 11050, 11052, 11054, 11056, 11058, 11060, - 11062, 11064, 11066, 11068, 11070, 11072, 11074, 11076, 11078, 11080, - 11082, 11084, 11086, 11088, 11090, 11092, 11094, 11096, 11098, 11100, - 11102, 11104, 11106, 11108, 11110, 11112, 11114, 11116, 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, 0, 0, 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, 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, 0, 0, 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, 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, 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, 12544, 12546, 12548, 12550, 12552, 12554, 12556, - 12558, 12560, 12562, 12564, 12566, 12568, 12570, 12572, 12574, 12576, - 12578, 12580, 12582, 12584, 12586, 12588, 12590, 12592, 12594, 12596, - 12598, 12600, 12602, 12604, 12606, 12608, 12610, 12612, 12614, 12616, - 12618, 12620, 12622, 12624, 12626, 12628, 12630, 12632, 12634, 12636, - 12638, 12640, 12642, 12644, 12646, 12648, 12650, 12652, 12654, 12656, - 12658, 12660, 12662, 12664, 12666, 12668, 12670, 12672, 12674, 12676, - 12678, 12680, 12682, 12684, 12686, 12688, 12690, 12692, 12694, 12696, - 12698, 12700, 12702, 12704, 12706, 12708, 12710, 12712, 12714, 12716, - 12718, 12720, 12722, 12724, 12726, 12728, 12730, 12732, 12734, 12736, - 12738, 12740, 12742, 12744, 12746, 12748, 12750, 12752, 12754, 12756, - 12758, 12760, 12762, 12764, 12766, 12768, 12770, 12772, 12774, 12776, - 12778, 12780, 12782, 12784, 12786, 12788, 12790, 12792, 12794, 12796, - 12798, 12800, 12802, 12804, 12806, 12808, 12810, 12812, 12814, 12816, - 12818, 12820, 12822, 12824, 12826, 12828, 12830, 12832, 12834, 12836, - 12838, 12840, 12842, 12844, 12846, 12848, 12850, 12852, 12854, 12856, - 12858, 12860, 12862, 12864, 12866, 12868, 12870, 12872, 12874, 12876, - 12878, 12880, 12882, 12884, 12886, 12888, 12890, 12892, 12894, 12896, - 12898, 12900, 12902, 12904, 12906, 12908, 12910, 12912, 12914, 12916, - 12918, 12920, 12922, 12924, 12926, 12928, 12930, 12932, 12934, 12936, - 12938, 12940, 12942, 12944, 12946, 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, 13002, 13004, 13006, 13008, 13010, 13012, 13014, 13016, - 13018, 13020, 13022, 13024, 13026, 13028, 13030, 13032, 13034, 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, 13122, 13124, 13126, 13128, 13130, 13132, 13134, 13136, - 13138, 13140, 13142, 13144, 13146, 13148, 13150, 13152, 13154, 13156, - 13158, 13160, 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, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 6632, 6634, 6636, 6638, 6640, 6642, 6644, 6646, 6648, 6650, 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, 0, 0, 7172, 0, 7174, 0, 0, 7176, + 7178, 7180, 7182, 7184, 7186, 7188, 7190, 7192, 7194, 0, 7196, 0, 7198, + 0, 0, 7200, 7202, 0, 0, 0, 7204, 7206, 7208, 7210, 0, 0, 7212, 7214, + 7216, 7218, 7220, 7222, 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, + 0, 0, 7336, 7338, 7340, 7342, 7344, 7346, 7348, 7350, 7352, 7354, 7356, + 7358, 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, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7548, 7551, 7554, 7557, 7561, 7565, + 7568, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7571, 7574, 7577, 7580, 7583, + 0, 0, 0, 0, 0, 7586, 0, 7589, 7592, 7594, 7596, 7598, 7600, 7602, 7604, + 7606, 7608, 7610, 7612, 7615, 7618, 7621, 7624, 7627, 7630, 7633, 7636, + 7639, 7642, 7645, 7648, 0, 7651, 7654, 7657, 7660, 7663, 0, 7666, 0, + 7669, 7672, 0, 7675, 7678, 0, 7681, 7684, 7687, 7690, 7693, 7696, 7699, + 7702, 7705, 7708, 7711, 7713, 7715, 7717, 7719, 7721, 7723, 7725, 7727, + 7729, 7731, 7733, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7907, 7909, + 7911, 7913, 7915, 7917, 7919, 7921, 7923, 7925, 7927, 7929, 7931, 7933, + 7935, 7937, 7939, 7941, 7943, 7945, 7947, 7949, 7951, 7953, 7956, 7959, + 7962, 7965, 7968, 7971, 7974, 7977, 7980, 7983, 7986, 7989, 7992, 7995, + 7998, 8001, 8004, 8007, 8009, 8011, 8013, 8015, 8018, 8021, 8024, 8027, + 8030, 8033, 8036, 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, 8301, 8305, 8309, 8313, 8317, 8321, + 8324, 8327, 8330, 8333, 8336, 8339, 8342, 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, 8751, 8755, + 8759, 8762, 8765, 8768, 8771, 8774, 8777, 8780, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8978, 8982, + 8986, 8990, 8994, 8998, 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, 0, 0, 9234, 9238, 9242, 9246, 9250, 9254, 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, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9450, 9454, 9458, 9463, 9468, 9473, 9478, + 9483, 9488, 9493, 9497, 9516, 9525, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 9530, 9532, 9534, 9536, 9538, 9540, 9542, 9544, + 9546, 9548, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 9550, 9552, 9554, 9556, 9558, 9560, 9562, 9564, 9566, 9568, 9570, + 9572, 9574, 9576, 9578, 9580, 9582, 9584, 9586, 9588, 9590, 0, 0, 9592, + 9594, 9596, 9598, 9600, 9602, 9604, 9606, 9608, 9610, 9612, 9614, 0, + 9616, 9618, 9620, 9622, 9624, 9626, 9628, 9630, 9632, 9634, 9636, 9638, + 9640, 9642, 9644, 9646, 9648, 9650, 9652, 0, 9654, 9656, 9658, 9660, 0, + 0, 0, 0, 9662, 9665, 9668, 0, 9671, 0, 9674, 9677, 9680, 9683, 9686, + 9689, 9692, 9695, 9698, 9701, 9704, 9706, 9708, 9710, 9712, 9714, 9716, + 9718, 9720, 9722, 9724, 9726, 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, 9941, 9944, 9947, 9950, 9953, 9956, 9959, 0, 0, 0, 0, + 9962, 9964, 9966, 9968, 9970, 9972, 9974, 9976, 9978, 9980, 9982, 9984, + 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, 0, 0, 0, 10342, 10344, + 10346, 10348, 10350, 10352, 0, 0, 10354, 10356, 10358, 10360, 10362, + 10364, 0, 0, 10366, 10368, 10370, 10372, 10374, 10376, 0, 0, 10378, + 10380, 10382, 0, 0, 0, 10384, 10386, 10388, 10390, 10392, 10394, 10396, + 0, 10398, 10400, 10402, 10404, 10406, 10408, 10410, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10412, 0, + 10415, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10418, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 10421, 10424, 10427, 10430, 10433, 10436, 10439, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10442, 10445, 10448, 10451, 10454, 10457, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10460, 10462, 10464, 10466, + 10468, 10470, 10472, 10474, 10476, 10478, 10480, 10482, 10484, 10486, + 10488, 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, 0, 10630, 10632, 10634, 10636, 10638, 10640, 10642, 10644, 10646, + 10648, 10650, 10652, 10654, 10656, 10658, 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, 0, 10772, 10774, 0, 0, 10776, 0, 0, 10778, 10780, 0, 0, + 10782, 10784, 10786, 10788, 0, 10790, 10792, 10794, 10796, 10798, 10800, + 10802, 10804, 10806, 10808, 10810, 10812, 0, 10814, 0, 10816, 10818, + 10820, 10822, 10824, 10826, 10828, 0, 10830, 10832, 10834, 10836, 10838, + 10840, 10842, 10844, 10846, 10848, 10850, 10852, 10854, 10856, 10858, + 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, 0, + 10960, 10962, 10964, 10966, 0, 0, 10968, 10970, 10972, 10974, 10976, + 10978, 10980, 10982, 0, 10984, 10986, 10988, 10990, 10992, 10994, 10996, + 0, 10998, 11000, 11002, 11004, 11006, 11008, 11010, 11012, 11014, 11016, + 11018, 11020, 11022, 11024, 11026, 11028, 11030, 11032, 11034, 11036, + 11038, 11040, 11042, 11044, 11046, 11048, 11050, 11052, 0, 11054, 11056, + 11058, 11060, 0, 11062, 11064, 11066, 11068, 11070, 0, 11072, 0, 0, 0, + 11074, 11076, 11078, 11080, 11082, 11084, 11086, 0, 11088, 11090, 11092, + 11094, 11096, 11098, 11100, 11102, 11104, 11106, 11108, 11110, 11112, + 11114, 11116, 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, 0, 0, 11768, 11770, + 11772, 11774, 11776, 11778, 11780, 11782, 11784, 11786, 11788, 11790, + 11792, 11794, 11796, 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, 0, + 0, 12352, 12354, 12356, 12358, 12360, 12362, 12364, 12366, 12368, 12370, + 12372, 12374, 12376, 12378, 12380, 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, 12455, 12458, 12461, 12464, 12467, 12470, 12473, 12476, 12479, + 12482, 0, 0, 0, 0, 0, 12485, 12489, 12493, 12497, 12501, 12505, 12509, + 12513, 12517, 12521, 12525, 12529, 12533, 12537, 12541, 12545, 12549, + 12553, 12557, 12561, 12565, 12569, 12573, 12577, 12581, 12585, 12589, + 12593, 12595, 12597, 12600, 0, 0, 12603, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 12605, 0, 12607, 0, 0, 12609, 0, 0, 0, 12611, 0, 0, 0, 12613, 12616, + 12619, 12622, 12625, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 12629, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12632, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12635, 12637, 12639, 12641, 12643, 12645, + 12647, 12649, 12651, 12653, 12655, 12657, 12659, 12661, 12663, 12665, + 12667, 12669, 12671, 12673, 12675, 12677, 12679, 12681, 12683, 12685, + 12687, 12689, 12691, 12693, 12695, 12697, 12699, 12701, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 12703, 12707, 12711, 12715, 12719, 12723, 12727, + 12731, 12735, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12739, 12741, + 12743, 12745, 12747, 12749, 12751, 12753, 12755, 12757, 12759, 12761, + 12763, 12765, 12767, 12769, 12771, 12773, 12775, 12777, 12779, 12781, + 12783, 12785, 12787, 12789, 12791, 12793, 12795, 12797, 12799, 12801, + 12803, 12805, 12807, 12809, 12811, 12813, 12815, 12817, 12819, 12821, + 12823, 12825, 12827, 12829, 12831, 12833, 12835, 12837, 12839, 12841, + 12843, 12845, 12847, 12849, 12851, 12853, 12855, 12857, 12859, 12861, + 12863, 12865, 12867, 12869, 12871, 12873, 12875, 12877, 12879, 12881, + 12883, 12885, 12887, 12889, 12891, 12893, 12895, 12897, 12899, 12901, + 12903, 12905, 12907, 12909, 12911, 12913, 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, 12969, 12971, 12973, 12975, 12977, 12979, 12981, + 12983, 12985, 12987, 12989, 12991, 12993, 12995, 12997, 12999, 13001, + 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, 13089, 13091, 13093, 13095, 13097, 13099, 13101, + 13103, 13105, 13107, 13109, 13111, 13113, 13115, 13117, 13119, 13121, + 13123, 13125, 13127, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -4339,352 +4530,390 @@ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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 3 +#define COMP_SHIFT 2 static unsigned short comp_index[] = { - 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 3, 0, 0, 0, 4, 5, 6, 7, - 0, 0, 0, 8, 0, 9, 10, 0, 0, 11, 12, 13, 14, 0, 0, 0, 0, 15, 16, 17, 0, 0, - 0, 18, 19, 20, 21, 0, 0, 0, 22, 0, 0, 0, 0, 0, 23, 24, 25, 26, 0, 0, 0, - 27, 28, 29, 30, 0, 0, 0, 31, 32, 33, 34, 0, 0, 0, 35, 0, 0, 0, 0, 0, 36, - 0, 37, 38, 39, 0, 0, 40, 41, 42, 43, 0, 0, 0, 44, 45, 46, 0, 0, 0, 0, 47, - 48, 49, 50, 0, 0, 51, 52, 53, 54, 0, 0, 0, 55, 56, 0, 0, 0, 0, 0, 57, 58, - 59, 60, 0, 0, 0, 61, 62, 63, 0, 0, 0, 0, 64, 65, 66, 67, 0, 0, 68, 69, - 70, 71, 0, 0, 0, 72, 0, 73, 0, 0, 0, 0, 74, 0, 75, 0, 0, 0, 0, 76, 0, 0, - 0, 0, 0, 77, 78, 79, 0, 0, 0, 0, 80, 81, 82, 83, 0, 0, 0, 84, 85, 86, 0, - 0, 0, 0, 87, 88, 0, 89, 0, 0, 90, 91, 0, 92, 0, 0, 0, 0, 93, 94, 95, 0, - 0, 0, 96, 97, 98, 99, 0, 0, 0, 100, 0, 0, 0, 0, 0, 101, 102, 0, 103, 0, - 0, 0, 104, 105, 106, 107, 0, 0, 0, 108, 109, 110, 111, 0, 0, 0, 112, 113, - 0, 0, 0, 0, 114, 115, 116, 117, 0, 0, 0, 118, 119, 120, 121, 0, 0, 0, - 122, 0, 123, 0, 0, 0, 124, 125, 126, 127, 128, 0, 0, 129, 130, 131, 132, - 0, 0, 0, 133, 134, 0, 0, 0, 0, 0, 135, 136, 137, 138, 0, 0, 139, 140, - 141, 142, 0, 0, 0, 0, 143, 144, 145, 0, 0, 0, 146, 147, 148, 149, 0, 0, - 0, 150, 0, 151, 0, 0, 0, 152, 153, 154, 0, 0, 0, 0, 0, 155, 0, 0, 0, 0, - 0, 156, 157, 158, 0, 0, 0, 0, 159, 160, 161, 162, 0, 0, 163, 0, 0, 0, - 164, 0, 0, 165, 166, 0, 0, 0, 0, 0, 167, 0, 0, 0, 0, 0, 0, 168, 0, 0, 0, - 0, 0, 169, 170, 0, 0, 0, 0, 0, 171, 0, 0, 0, 0, 0, 0, 172, 173, 0, 0, 0, - 0, 0, 174, 0, 0, 0, 0, 0, 175, 176, 0, 0, 0, 0, 0, 177, 178, 0, 0, 0, 0, - 0, 179, 0, 0, 0, 0, 0, 0, 180, 0, 0, 0, 0, 0, 181, 182, 183, 0, 0, 0, 0, - 184, 185, 0, 0, 0, 0, 0, 186, 0, 0, 0, 0, 0, 0, 187, 0, 0, 0, 0, 0, 188, - 189, 0, 0, 0, 0, 0, 190, 0, 0, 0, 0, 0, 0, 191, 192, 0, 0, 0, 0, 0, 193, - 0, 0, 0, 0, 0, 194, 195, 0, 0, 0, 0, 0, 196, 197, 0, 0, 0, 0, 0, 198, 0, - 0, 0, 0, 0, 0, 199, 0, 0, 0, 0, 0, 200, 201, 202, 0, 0, 0, 0, 203, 204, - 0, 0, 0, 0, 0, 205, 206, 0, 0, 0, 0, 0, 207, 0, 0, 0, 0, 0, 208, 0, 0, 0, - 0, 0, 0, 209, 0, 0, 0, 0, 0, 0, 210, 0, 0, 0, 0, 0, 0, 211, 0, 0, 0, 0, - 0, 0, 212, 0, 0, 0, 0, 0, 0, 213, 0, 0, 0, 0, 0, 0, 214, 0, 0, 0, 0, 0, - 215, 0, 0, 0, 0, 0, 216, 0, 0, 0, 0, 0, 0, 0, 217, 0, 0, 0, 0, 0, 0, 218, - 0, 0, 0, 0, 0, 219, 0, 0, 0, 0, 0, 220, 221, 222, 0, 0, 0, 0, 223, 224, - 225, 0, 0, 0, 0, 226, 227, 228, 0, 0, 0, 0, 229, 230, 231, 0, 0, 0, 0, 0, - 232, 0, 0, 0, 0, 0, 233, 0, 0, 0, 0, 0, 234, 0, 0, 0, 0, 0, 0, 235, 0, 0, - 0, 0, 0, 0, 236, 0, 0, 0, 0, 0, 0, 237, 0, 0, 0, 0, 0, 238, 0, 0, 0, 0, - 0, 0, 239, 0, 0, 0, 0, 0, 0, 240, 0, 0, 0, 0, 0, 0, 241, 0, 0, 0, 0, 0, - 242, 0, 243, 244, 0, 0, 0, 245, 246, 0, 0, 0, 0, 247, 0, 248, 0, 249, 0, - 0, 250, 251, 252, 0, 0, 0, 0, 253, 0, 254, 0, 0, 0, 0, 0, 255, 0, 0, 0, - 0, 256, 257, 258, 0, 0, 0, 0, 259, 0, 260, 0, 261, 0, 0, 0, 0, 0, 262, 0, - 0, 0, 0, 0, 0, 263, 0, 0, 264, 265, 266, 0, 267, 0, 0, 268, 0, 269, 0, 0, - 0, 0, 270, 0, 271, 272, 0, 0, 0, 273, 274, 0, 275, 0, 0, 276, 0, 277, 0, - 0, 0, 0, 0, 0, 278, 0, 0, 0, 0, 279, 280, 281, 282, 0, 0, 0, 283, 284, 0, - 285, 0, 0, 286, 0, 0, 0, 287, 0, 0, 288, 0, 0, 0, 289, 0, 0, 0, 0, 0, - 290, 0, 0, 0, 291, 0, 0, 0, 0, 0, 0, 292, 0, 0, 0, 0, 0, 0, 293, 0, 0, 0, - 0, 0, 294, 0, 0, 0, 0, 0, 0, 295, 0, 0, 0, 0, 0, 0, 296, 0, 0, 0, 0, 0, - 0, 297, 0, 0, 0, 0, 0, 298, 299, 0, 0, 0, 0, 0, 300, 0, 0, 0, 0, 0, 0, - 301, 0, 0, 0, 0, 0, 0, 302, 0, 0, 0, 0, 0, 0, 303, 0, 0, 0, 0, 0, 304, 0, - 0, 0, 0, 0, 0, 305, 0, 0, 0, 0, 0, 0, 306, 0, 0, 0, 0, 0, 307, 0, 0, 0, - 0, 0, 0, 308, 0, 0, 0, 0, 0, 0, 309, 0, 0, 0, 0, 0, 0, 310, 0, 0, 0, 0, - 0, 311, 312, 0, 0, 0, 0, 0, 313, 0, 0, 0, 0, 0, 0, 314, 0, 0, 0, 0, 0, 0, - 315, 0, 0, 0, 0, 0, 0, 316, 0, 0, 0, 0, 0, 317, 0, 0, 0, 0, 0, 0, 318, 0, - 0, 0, 0, 0, 0, 319, 0, 0, 0, 0, 0, 0, 320, 0, 0, 0, 0, 0, 0, 321, 0, 0, - 0, 0, 0, 322, 0, 0, 0, 0, 0, 0, 323, 0, 0, 0, 0, 0, 0, 324, 0, 0, 0, 0, - 0, 325, 0, 0, 0, 0, 0, 0, 0, 0, 0, 326, 0, 0, 0, 0, 0, 0, 327, 0, 0, 0, - 0, 0, 0, 328, 0, 0, 0, 0, 0, 329, 0, 0, 0, 0, 0, 0, 330, 0, 0, 0, 0, 0, - 0, 331, 0, 0, 0, 0, 0, 0, 332, 0, 0, 0, 0, 0, 0, 333, 0, 0, 0, 0, 0, 334, - 0, 0, 0, 0, 0, 0, 335, 0, 0, 0, 0, 0, 0, 336, 337, 0, 0, 0, 0, 0, 0, 338, - 0, 0, 0, 0, 0, 339, 0, 0, 0, 0, 0, 0, 340, 0, 0, 0, 0, 0, 0, 341, 0, 0, - 0, 0, 0, 0, 342, 0, 0, 0, 0, 0, 0, 343, 0, 0, 0, 0, 0, 344, 0, 0, 0, 0, - 0, 0, 345, 346, 0, 0, 0, 0, 0, 347, 0, 0, 0, 0, 0, 0, 348, 0, 0, 0, 0, 0, - 0, 349, 0, 0, 0, 0, 0, 0, 350, 0, 0, 0, 0, 0, 0, 351, 0, 0, 0, 0, 0, 0, - 352, 0, 0, 0, 0, 0, 353, 0, 0, 0, 0, 0, 0, 354, 0, 0, 0, 0, 0, 0, 355, 0, - 0, 0, 0, 0, 0, 356, 0, 0, 0, 0, 0, 357, 0, 0, 0, 0, 0, 0, 358, 0, 0, 0, - 0, 0, 0, 359, 0, 0, 0, 0, 0, 0, 360, 0, 0, 0, 0, 0, 361, 362, 0, 0, 0, 0, - 0, 0, 363, 0, 0, 0, 0, 0, 0, 364, 0, 0, 0, 0, 0, 0, 365, 0, 0, 0, 0, 0, - 0, 366, 0, 0, 0, 0, 0, 367, 0, 0, 0, 0, 0, 0, 368, 0, 0, 0, 0, 0, 369, - 370, 0, 0, 0, 0, 0, 371, 0, 0, 0, 0, 0, 0, 372, 0, 0, 0, 0, 0, 0, 373, 0, - 0, 0, 0, 0, 374, 0, 0, 0, 0, 0, 0, 375, 0, 0, 376, 0, 0, 0, 377, 0, 0, - 378, 0, 0, 0, 0, 0, 0, 379, 0, 0, 0, 0, 0, 0, 380, 0, 0, 0, 0, 0, 381, 0, - 0, 0, 0, 0, 0, 382, 0, 0, 0, 0, 0, 0, 383, 0, 0, 0, 0, 0, 0, 384, 0, 0, - 385, 0, 0, 386, 0, 0, 0, 387, 0, 0, 388, 0, 0, 0, 0, 0, 0, 389, 0, 0, 0, - 0, 0, 0, 390, 0, 0, 0, 0, 0, 391, 0, 0, 0, 0, 0, 0, 392, 0, 0, 0, 0, 0, - 0, 393, 0, 0, 0, 0, 0, 0, 394, 0, 0, 395, 0, 0, 0, 0, 0, 0, 396, 0, 0, 0, - 0, 0, 397, 0, 0, 0, 0, 0, 0, 398, 0, 0, 0, 0, 0, 0, 399, 0, 0, 400, 0, 0, - 0, 401, 0, 0, 402, 0, 0, 0, 0, 0, 0, 403, 0, 0, 0, 0, 0, 0, 404, 0, 0, 0, - 0, 0, 405, 0, 0, 0, 0, 0, 0, 406, 0, 0, 0, 0, 0, 0, 407, 0, 0, 0, 0, 0, - 0, 408, 0, 0, 409, 0, 0, 410, 0, 0, 0, 411, 0, 0, 412, 0, 0, 0, 0, 0, 0, - 413, 0, 0, 0, 0, 0, 0, 414, 0, 0, 0, 0, 0, 415, 0, 0, 0, 0, 0, 0, 416, 0, - 0, 0, 0, 0, 0, 417, 0, 0, 0, 0, 0, 0, 418, 0, 0, 419, 0, 0, 420, 0, 0, 0, - 421, 0, 0, 422, 0, 0, 423, 0, 0, 0, 424, 0, 0, 425, 0, 0, 0, 426, 0, 0, - 427, 0, 0, 0, 0, 0, 0, 428, 0, 0, 0, 0, 0, 429, 0, 0, 0, 0, 0, 0, 430, 0, - 0, 0, 0, 0, 0, 431, 0, 0, 432, 0, 0, 0, 433, 0, 0, 434, 0, 0, 435, 0, 0, - 0, 436, 0, 0, 437, 0, 0, 0, 438, 0, 0, 439, 0, 0, 440, 0, 0, 0, 0, 0, 0, - 441, 0, 0, 0, 0, 0, 0, 442, 0, 0, 0, 0, 0, 0, 443, 0, 0, 0, 0, 0, 444, 0, - 0, 0, 0, 0, 0, 445, 0, 0, 0, 0, 0, 0, 446, 0, 0, 447, 0, 0, 0, 448, 0, 0, - 449, 0, 0, 450, 0, 0, 0, 0, 0, 0, 451, 0, 0, 0, 0, 0, 0, 452, 0, 0, 0, 0, - 0, 0, 453, 0, 0, 0, 0, 0, 454, 0, 0, 0, 0, 0, 0, 455, 0, 0, 0, 0, 0, 0, - 456, 0, 0, 0, 0, 0, 0, 457, 0, 0, 0, 0, 0, 458, 0, 0, 0, 0, 0, 0, 459, 0, - 0, 0, 0, 0, 0, 460, 0, 0, 461, 0, 0, 0, 462, 0, 0, 0, 0, 0, 463, 0, 0, 0, - 0, 0, 0, 464, 0, 0, 465, 0, 0, 0, 466, 0, 0, 0, 0, 0, 467, 0, 0, 0, 0, 0, - 0, 468, 0, 0, 0, 0, 0, 0, 469, 0, 0, 0, 0, 0, 0, 470, 0, 0, 0, 0, 0, 471, - 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, 475, 0, 0, 0, 0, 0, 0, 476, 0, 0, 0, 0, 0, 0, 477, 0, 0, 0, - 0, 0, 0, 478, 0, 0, 0, 0, 0, 479, 0, 0, 0, 0, 0, 0, 480, 0, 0, 0, 0, 0, - 0, 481, 0, 0, 0, 0, 0, 0, 482, 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, 486, 0, 0, 0, 0, 0, 487, 0, 0, - 0, 0, 0, 0, 488, 0, 0, 0, 0, 0, 0, 489, 0, 0, 0, 0, 0, 0, 490, 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, 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, 499, 0, 0, 0, 0, 0, 0, 500, 0, 0, - 0, 0, 0, 0, 501, 0, 0, 0, 0, 0, 0, 502, 0, 0, 0, 0, 0, 503, 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, - 507, 0, 0, 0, 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, 512, 0, 0, 0, 0, 0, 0, - 513, 0, 0, 0, 0, 0, 0, 514, 0, 0, 0, 0, 0, 0, 515, 0, 0, 0, 0, 0, 516, 0, - 0, 0, 0, 0, 0, 517, 0, 0, 0, 0, 0, 0, 518, 0, 0, 0, 0, 0, 0, 519, 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, 524, 0, 0, 0, 0, 0, 0, 525, 0, 0, 0, 0, 0, 0, - 526, 0, 0, 0, 0, 0, 0, 527, 0, 0, 0, 0, 0, 528, 0, 0, 0, 0, 0, 0, 529, 0, - 0, 0, 0, 0, 0, 530, 0, 0, 0, 0, 0, 0, 531, 0, 0, 0, 0, 0, 532, 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, 536, 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, 540, 0, 0, 0, 0, 0, 0, 541, 0, 0, 0, 0, 0, 0, 542, 0, - 0, 0, 0, 0, 0, 543, 0, 0, 0, 0, 0, 544, 0, 0, 0, 0, 0, 0, 545, 0, 0, 0, - 0, 0, 0, 546, 0, 0, 0, 0, 0, 0, 547, 0, 0, 0, 0, 0, 548, 0, 0, 0, 0, 0, - 0, 549, 0, 0, 0, 0, 0, 0, 550, 0, 0, 0, 0, 0, 0, 551, 0, 0, 0, 0, 0, 552, - 0, 0, 0, 0, 0, 0, 553, 0, 0, 0, 0, 0, 0, 554, 0, 0, 0, 0, 0, 0, 555, + 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, 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, 19, 20, 21, 22, 0, 0, 0, + 0, 0, 0, 23, 24, 25, 26, 27, 28, 29, 0, 0, 0, 0, 0, 0, 0, 0, 30, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 31, 32, 33, 0, 0, 34, 0, 0, 0, 0, 0, 0, 0, 0, + 35, 36, 37, 38, 39, 40, 0, 0, 0, 0, 0, 0, 0, 41, 42, 43, 44, 45, 46, 47, + 0, 0, 0, 0, 0, 0, 0, 48, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 49, 0, + 50, 0, 51, 52, 53, 0, 0, 0, 0, 0, 0, 54, 0, 0, 55, 56, 57, 58, 59, 0, 0, + 0, 0, 0, 0, 60, 61, 0, 0, 62, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 64, 65, 0, + 66, 67, 68, 0, 0, 0, 0, 0, 0, 69, 70, 71, 72, 73, 74, 75, 0, 0, 0, 0, 0, + 0, 0, 76, 0, 77, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 78, 79, 0, 80, 81, 82, + 83, 0, 0, 0, 0, 0, 0, 0, 84, 85, 86, 0, 87, 88, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 89, 90, 0, 91, 92, 93, 0, 0, 0, 0, 0, 0, 94, 95, 96, 97, 98, 99, 100, + 0, 0, 0, 0, 0, 0, 0, 0, 101, 0, 0, 102, 0, 0, 0, 0, 0, 0, 0, 0, 0, 103, + 104, 0, 0, 105, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 106, 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, 111, 112, + 0, 113, 114, 0, 115, 0, 0, 0, 0, 0, 0, 0, 116, 117, 118, 119, 120, 121, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 122, 0, 0, 123, 0, 124, 0, 0, 0, 0, 0, 0, 125, + 126, 127, 128, 0, 129, 0, 0, 0, 0, 0, 0, 0, 0, 0, 130, 0, 131, 132, 133, + 134, 0, 0, 0, 0, 0, 0, 0, 135, 136, 137, 138, 139, 140, 141, 0, 0, 0, 0, + 0, 0, 0, 0, 142, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 143, 144, 145, 146, 0, + 147, 0, 0, 0, 0, 0, 0, 0, 0, 148, 149, 150, 151, 152, 153, 154, 0, 0, 0, + 0, 0, 0, 0, 155, 156, 157, 158, 159, 160, 161, 0, 0, 0, 0, 0, 0, 0, 162, + 0, 163, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 164, 0, 0, 165, 166, 167, 0, 168, + 0, 0, 0, 0, 0, 0, 169, 0, 0, 170, 171, 172, 173, 0, 0, 0, 0, 0, 0, 0, + 174, 175, 0, 0, 176, 0, 0, 0, 0, 0, 0, 0, 0, 177, 178, 179, 180, 0, 181, + 182, 183, 0, 0, 0, 0, 0, 0, 184, 185, 186, 187, 188, 0, 189, 0, 0, 0, 0, + 0, 0, 0, 190, 191, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 192, 193, 194, + 195, 196, 197, 198, 0, 0, 0, 0, 0, 0, 0, 199, 200, 201, 0, 202, 203, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 204, 205, 206, 207, 208, 209, 0, 0, 0, 0, 0, 0, + 210, 211, 212, 213, 214, 215, 216, 0, 0, 0, 0, 0, 0, 0, 217, 0, 0, 0, + 218, 0, 0, 0, 0, 0, 0, 0, 0, 219, 220, 221, 222, 0, 223, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 224, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 225, 226, 227, 0, + 228, 0, 0, 0, 0, 0, 0, 0, 0, 0, 229, 230, 231, 0, 232, 0, 233, 0, 0, 0, + 0, 0, 0, 234, 235, 0, 0, 0, 0, 0, 236, 0, 0, 0, 0, 0, 0, 237, 238, 239, + 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, 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, 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, 251, 252, 253, 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, 255, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 256, 257, 0, 258, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 259, 260, 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, 263, 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, 265, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 266, 267, 268, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 269, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 270, 271, 272, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 273, 274, 275, 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, 277, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 278, 279, + 0, 280, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 281, 282, 283, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 284, 285, 286, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 287, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 288, 289, 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, 291, 0, 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, 293, 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, + 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, 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, + 300, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 301, 302, 303, 0, 0, 304, 0, 0, 0, + 0, 0, 0, 0, 0, 305, 306, 307, 0, 308, 0, 0, 0, 0, 0, 0, 0, 0, 0, 309, + 310, 311, 0, 312, 0, 0, 0, 0, 0, 0, 0, 0, 0, 313, 0, 314, 0, 315, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 316, 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, 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, 0, 0, 320, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 321, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 322, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 323, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 324, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 325, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 326, 327, 0, 328, 329, 0, 0, 330, 0, 0, 0, 0, 0, 0, 331, 0, + 0, 332, 0, 0, 0, 0, 0, 0, 0, 0, 0, 333, 334, 0, 0, 335, 0, 0, 0, 336, 0, + 0, 0, 0, 0, 337, 338, 339, 0, 340, 0, 0, 0, 0, 0, 0, 0, 0, 0, 341, 0, 0, + 342, 343, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 344, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 345, 346, 347, 0, 348, 0, 0, 0, 0, 0, 0, 0, 0, 0, 349, 0, 0, 0, + 350, 0, 0, 351, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 352, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 353, 0, 0, 0, 0, 0, 354, 355, 356, 0, 357, 0, + 0, 358, 359, 0, 0, 0, 0, 0, 360, 0, 0, 0, 361, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 362, 0, 0, 363, 364, 0, 0, 365, 0, 0, 0, 0, 0, 0, 366, 367, 0, 368, 0, 0, + 0, 369, 0, 0, 0, 0, 0, 370, 371, 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, 374, 375, 376, 377, 378, 0, 0, + 379, 0, 0, 0, 0, 0, 0, 380, 0, 0, 381, 0, 0, 0, 382, 0, 0, 0, 0, 0, 383, + 384, 0, 0, 0, 0, 0, 385, 0, 0, 0, 0, 0, 0, 386, 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, 389, 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, + 0, 392, 393, 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, 396, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 397, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 398, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 399, 400, 401, 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, 404, + 405, 406, 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, 408, 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, 410, 411, 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, 414, 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, 416, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 417, 418, 419, 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, 422, 423, 424, 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, 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, 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, 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, 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, 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, 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, 0, 440, 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, 442, 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, 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, 0, 446, 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, 0, 0, 0, 0, 0, 0, 0, 449, 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, 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, 456, 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, 458, 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, 460, 0, 0, 0, 0, 0, 0, 0, 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, 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, 467, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 468, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 469, 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, 472, 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, 474, 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, 476, 477, 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, 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, 0, 0, 0, 0, 0, 0, 0, 482, 0, 0, 0, 0, 0, 0, 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, 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, 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, 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, 0, 0, 0, 0, 0, 0, 0, 497, 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, 499, 0, 0, 0, 0, 0, 0, + 0, 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, 502, 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, 0, 0, 0, 0, 0, 0, 505, + 506, 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, 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, 0, 0, 0, 0, 0, 0, 0, 512, 0, 0, 0, 0, 0, + 0, 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, 517, 0, 0, 0, 0, 0, 0, + 518, 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, 0, 0, 0, 0, 0, 0, 0, 522, 0, 0, 0, 0, 0, 0, 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, 527, 0, 0, 0, 0, 0, 0, 528, 0, 0, 0, 0, + 0, 0, 529, 0, 0, 0, 0, 0, 0, 530, 0, 0, 0, 0, 0, 0, 531, 0, 0, 0, 0, 0, + 532, 533, 0, 0, 0, 0, 0, 534, 0, 0, 0, 0, 0, 0, 535, 0, 0, 0, 0, 0, 0, + 536, 0, 0, 0, 0, 0, 0, 537, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 538, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 539, 540, 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, 543, 0, 0, 0, 0, 0, 0, 544, 0, 0, 0, 0, 0, 0, 545, 0, 0, 0, 0, 0, 546, + 547, 0, 0, 0, 0, 0, 548, 0, 0, 0, 0, 0, 0, 549, 0, 0, 0, 0, 0, 0, 550, 0, + 0, 0, 0, 0, 0, 551, 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, 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, 559, 0, 0, 0, 0, 0, 0, 560, 0, 0, 0, 0, 0, 0, + 561, 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, 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, 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, 573, 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, 577, 578, 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, 581, 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, 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, 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, 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, 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, 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, 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, + 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, 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, 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, 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, + 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, 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, 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, 0, 0, 0, 0, 0, 0, 0, 634, 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, 636, 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, + 638, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 639, 640, 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, 642, 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, + 644, 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, 646, 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, 648, 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, 650, 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, 652, 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, + 654, 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, 656, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 657, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 658, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 659, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 660, 661, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 662, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 663, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 664, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 665, 666, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 667, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 668, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 669, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 670, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 671, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 672, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 673, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 674, }; -static unsigned short comp_data[] = { - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8814, 0, 0, 0, 0, 0, 8800, 0, 0, 0, 0, - 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 7682, 0, 0, 7684, 0, 0, 0, 0, 0, 0, - 0, 0, 7686, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 262, 264, 0, 0, 0, 266, - 0, 0, 0, 0, 268, 0, 0, 0, 0, 0, 0, 0, 0, 0, 199, 0, 0, 0, 0, 0, 0, 7690, - 0, 0, 0, 0, 270, 0, 0, 0, 0, 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, 0, 0, 0, 0, - 0, 0, 0, 0, 7710, 0, 0, 0, 0, 0, 0, 0, 0, 500, 284, 0, 7712, 286, 288, 0, - 0, 0, 0, 486, 0, 0, 0, 0, 0, 0, 0, 0, 0, 290, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 292, 0, 0, 0, 7714, 7718, 0, 0, 0, 542, 0, 0, 0, 0, 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, 0, 0, 0, 0, 302, 0, 0, 7724, 0, - 0, 0, 0, 0, 0, 308, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7728, 0, 488, 0, - 0, 0, 0, 0, 7730, 0, 0, 0, 310, 0, 0, 0, 0, 7732, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 313, 0, 0, 0, 0, 0, 0, 0, 0, 0, 317, 0, 0, 0, 0, 0, 7734, 0, - 0, 0, 315, 0, 7740, 0, 0, 7738, 0, 0, 0, 0, 7742, 0, 0, 0, 0, 7744, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 7746, 0, 0, 0, 0, 504, 323, 0, 209, 0, 0, 7748, - 0, 0, 0, 0, 327, 0, 0, 0, 0, 0, 7750, 0, 0, 0, 325, 0, 7754, 0, 0, 7752, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, - 0, 0, 0, 0, 0, 7764, 0, 0, 0, 0, 7766, 0, 0, 0, 0, 0, 0, 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, 0, 0, 346, 348, 0, 0, 0, 7776, 0, 0, 0, 0, 352, 0, 0, - 0, 0, 0, 7778, 0, 0, 536, 350, 0, 0, 0, 0, 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, 0, 0, - 0, 0, 0, 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, 0, 0, 0, 0, 7804, 0, 0, 0, 0, 0, 7806, 0, 0, 0, 0, 7808, 7810, 372, 0, - 0, 0, 7814, 7812, 0, 7816, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7818, 7820, 0, - 0, 0, 0, 0, 0, 7922, 221, 374, 7928, 562, 0, 7822, 376, 7926, 0, 0, 0, 0, - 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, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 7683, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 7685, 7687, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 263, 265, 0, 0, 0, - 267, 0, 0, 0, 0, 269, 0, 231, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 7711, 0, - 0, 0, 0, 0, 0, 0, 0, 501, 285, 0, 7713, 287, 289, 0, 0, 0, 0, 487, 0, - 291, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 309, 0, 0, 0, 0, 0, - 0, 0, 0, 496, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7729, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 489, 0, 0, 0, 0, 0, 7731, 0, 0, 0, 311, 0, 0, 0, 0, 7733, 0, 0, 0, - 0, 314, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 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, 0, - 0, 0, 0, 7765, 0, 0, 0, 0, 7767, 0, 0, 0, 0, 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, 0, 0, 0, 0, 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, 0, 0, 0, 0, 7787, - 7831, 0, 0, 0, 357, 0, 0, 0, 0, 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, 0, - 0, 0, 0, 7805, 0, 0, 0, 0, 0, 7807, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 7809, 7811, 373, 0, 0, 0, 7815, 7813, 0, 7832, 0, 0, 0, 0, 0, 0, 0, 7817, - 0, 0, 7819, 7821, 0, 0, 0, 0, 0, 0, 7923, 253, 375, 7929, 563, 0, 7823, - 255, 7927, 7833, 0, 0, 0, 0, 0, 0, 0, 7925, 0, 0, 0, 0, 0, 378, 7825, 0, - 0, 0, 380, 0, 0, 0, 0, 382, 0, 0, 0, 0, 0, 7827, 0, 0, 0, 0, 0, 0, 0, 0, - 7829, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8173, 901, 0, 0, 8129, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 7846, 7844, 0, 7850, 0, 0, 0, 0, 7848, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 478, 0, 0, 506, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 508, 0, - 0, 482, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7688, 0, 0, 0, 0, 7872, 7870, 0, - 7876, 0, 0, 0, 0, 7874, 0, 0, 0, 0, 0, 0, 7726, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 7890, 7888, 0, 7894, 0, 0, 0, 0, 7892, 0, 0, 0, 0, 0, 0, - 7756, 0, 0, 556, 0, 0, 7758, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 554, 0, 0, - 510, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 475, 471, 0, 0, 469, 0, 0, 0, 0, - 0, 0, 473, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7847, 7845, 0, 7851, 0, 0, 0, 0, - 7849, 0, 0, 0, 0, 0, 0, 0, 0, 0, 479, 0, 0, 507, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 509, 0, 0, 483, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7689, 0, 0, - 0, 0, 7873, 7871, 0, 7877, 0, 0, 0, 0, 7875, 0, 0, 0, 0, 0, 0, 7727, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7891, 7889, 0, 7895, 0, 0, 0, 0, 7893, - 0, 0, 0, 0, 0, 0, 7757, 0, 0, 557, 0, 0, 7759, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 555, 0, 0, 511, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 476, 472, 0, 0, - 470, 0, 0, 0, 0, 0, 0, 474, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7856, 7854, 0, - 7860, 0, 0, 0, 0, 7858, 0, 0, 0, 0, 0, 7857, 7855, 0, 7861, 0, 0, 0, 0, - 7859, 0, 0, 0, 0, 0, 7700, 7702, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 7701, 7703, 0, 0, 0, 0, 7760, 7762, 0, 0, 0, 0, 7761, 7763, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 7780, 0, 0, 0, 0, 0, 7781, 0, 0, 0, 0, 0, 7782, 0, 0, - 0, 0, 0, 7783, 0, 0, 0, 0, 0, 0, 0, 0, 7800, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 7801, 0, 0, 0, 7802, 0, 0, 0, 0, 0, 7803, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 7835, 0, 0, 0, 0, 0, 0, 0, 7900, 7898, 0, 7904, 0, 0, - 0, 0, 7902, 0, 0, 0, 0, 0, 0, 0, 0, 7906, 0, 0, 0, 0, 7901, 7899, 0, - 7905, 0, 0, 0, 0, 7903, 0, 0, 0, 0, 0, 0, 0, 0, 7907, 0, 0, 0, 0, 7914, - 7912, 0, 7918, 0, 0, 0, 0, 7916, 0, 0, 0, 0, 0, 0, 0, 0, 7920, 0, 0, 0, - 0, 7915, 7913, 0, 7919, 0, 0, 0, 0, 7917, 0, 0, 0, 0, 0, 0, 0, 0, 7921, - 0, 0, 0, 0, 0, 0, 0, 494, 0, 0, 0, 0, 0, 0, 492, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 493, 0, 0, 0, 0, 0, 480, 0, 0, 0, 0, 0, 481, 0, 0, 0, 0, - 0, 0, 7708, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7709, 0, 0, 0, 0, 560, - 0, 0, 0, 0, 0, 561, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 495, 0, 0, 8122, - 902, 0, 0, 8121, 8120, 7944, 7945, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 8124, 8136, 904, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7960, 7961, 0, 0, 0, - 0, 0, 0, 8138, 905, 0, 0, 0, 0, 7976, 7977, 0, 0, 0, 0, 0, 8140, 0, 0, 0, - 0, 0, 0, 0, 0, 8154, 906, 0, 0, 8153, 8152, 0, 938, 0, 0, 0, 0, 0, 0, - 7992, 7993, 0, 0, 0, 0, 0, 0, 8184, 908, 0, 0, 0, 0, 8008, 8009, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8172, 0, 0, 0, 0, 0, 0, 8170, 910, 0, 0, - 8169, 8168, 0, 939, 0, 0, 0, 0, 0, 0, 0, 8025, 0, 0, 0, 0, 0, 0, 8186, - 911, 0, 0, 0, 0, 8040, 8041, 0, 0, 0, 0, 0, 8188, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 8116, 0, 0, 0, 0, 0, 8132, 0, 0, 0, 0, 0, 0, 0, 0, 8048, - 940, 0, 0, 8113, 8112, 0, 0, 0, 0, 0, 0, 0, 0, 7936, 7937, 0, 0, 0, 0, - 8118, 8115, 0, 0, 0, 0, 0, 0, 0, 0, 8050, 941, 0, 0, 0, 0, 7952, 7953, 0, - 0, 0, 0, 0, 0, 8052, 942, 0, 0, 0, 0, 7968, 7969, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 8134, 8131, 8054, 943, 0, 0, 8145, 8144, 0, 970, 0, 0, 0, 0, - 0, 0, 7984, 7985, 0, 0, 0, 0, 8150, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8056, 972, - 0, 0, 0, 0, 8000, 8001, 0, 0, 0, 0, 8164, 8165, 0, 0, 0, 0, 0, 0, 8058, - 973, 0, 0, 8161, 8160, 0, 971, 0, 0, 0, 0, 0, 0, 8016, 8017, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 8166, 0, 8060, 974, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 8032, 8033, 0, 0, 0, 0, 8182, 8179, 0, 0, 0, 0, 0, 0, 0, 0, 8146, - 912, 0, 0, 8151, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8162, 944, 0, 0, 8167, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8180, 0, 979, 0, 0, 0, 0, 0, 980, 0, - 0, 0, 0, 0, 1031, 0, 0, 0, 1232, 0, 1234, 0, 0, 0, 0, 0, 0, 0, 1027, 0, - 0, 0, 0, 1024, 0, 0, 0, 0, 1238, 0, 1025, 0, 0, 0, 1217, 0, 1244, 0, 0, - 0, 0, 0, 1246, 0, 0, 0, 0, 0, 0, 1037, 0, 0, 0, 1250, 1049, 0, 1252, 0, - 0, 0, 0, 0, 0, 0, 1036, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1254, 0, 0, - 1262, 1038, 0, 1264, 0, 0, 1266, 0, 0, 1268, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 1272, 0, 0, 0, 0, 0, 1260, 0, 0, 0, 1233, 0, 1235, 0, 0, 0, - 0, 0, 0, 0, 1107, 0, 0, 0, 0, 1104, 0, 0, 0, 0, 1239, 0, 1105, 0, 0, 0, - 1218, 0, 1245, 0, 0, 0, 0, 0, 1247, 0, 0, 0, 0, 0, 0, 1117, 0, 0, 0, - 1251, 1081, 0, 1253, 0, 0, 0, 0, 0, 0, 0, 1116, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 1255, 0, 0, 1263, 1118, 0, 1265, 0, 0, 1267, 0, 0, 1269, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1273, 0, 0, 0, 0, 0, 1261, 0, 0, 0, 0, - 0, 1111, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1142, 0, 0, 0, 0, 0, 1143, 0, 0, - 0, 0, 0, 0, 0, 0, 1242, 0, 0, 0, 0, 0, 1243, 0, 0, 0, 0, 0, 1258, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1259, 0, 0, 0, 0, 1570, 1571, 1573, 0, - 0, 0, 0, 1572, 0, 0, 0, 0, 0, 1574, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1730, 0, 0, 0, 0, 0, 1747, 0, 0, 0, 0, 0, 1728, 0, 0, 0, 0, 0, 0, 0, - 2345, 0, 0, 0, 0, 0, 2353, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2356, - 0, 0, 0, 0, 0, 0, 2507, 2508, 0, 0, 0, 0, 0, 0, 2891, 2888, 2892, 0, 0, - 0, 0, 0, 0, 0, 2964, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3018, 3020, 0, - 0, 0, 0, 3019, 0, 0, 0, 0, 0, 0, 0, 3144, 0, 0, 0, 0, 0, 0, 0, 3264, 0, - 0, 0, 0, 3274, 3271, 3272, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3275, 0, - 0, 0, 0, 0, 0, 0, 3402, 3404, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3403, - 0, 0, 0, 0, 0, 0, 0, 3546, 3548, 3550, 0, 0, 0, 3549, 0, 0, 0, 0, 0, 0, - 0, 0, 4134, 0, 0, 0, 0, 0, 0, 6918, 0, 0, 0, 0, 0, 6920, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 6922, 0, 0, 0, 0, 0, 6924, 0, 0, 0, 0, 0, 6926, - 0, 0, 0, 0, 0, 6930, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6971, 0, 0, - 0, 0, 0, 6973, 0, 0, 0, 0, 0, 6976, 0, 0, 0, 0, 0, 6977, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 6979, 0, 0, 0, 0, 0, 0, 7736, 0, 0, 0, 0, 0, - 7737, 0, 0, 0, 0, 0, 7772, 0, 0, 0, 0, 0, 7773, 0, 0, 0, 0, 0, 0, 0, - 7784, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7785, 0, 7852, 0, 0, 7862, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7853, 0, 0, 7863, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 7878, 0, 0, 0, 0, 0, 7879, 0, 0, 0, 0, 0, 7896, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 7897, 0, 0, 0, 7938, 7940, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 7942, 8064, 7939, 7941, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7943, 8065, - 0, 0, 0, 0, 0, 8066, 0, 0, 0, 0, 0, 8067, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 8068, 0, 0, 0, 0, 0, 8069, 0, 0, 0, 0, 0, 8070, 0, 0, 0, 0, 0, - 8071, 0, 0, 0, 0, 0, 0, 0, 0, 7946, 7948, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 7950, 8072, 7947, 7949, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7951, 8073, 0, 0, - 0, 0, 0, 8074, 0, 0, 0, 0, 0, 8075, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 8076, 0, 0, 0, 0, 0, 8077, 0, 0, 0, 0, 0, 8078, 0, 0, 0, 0, 0, 8079, - 0, 0, 0, 0, 0, 0, 0, 0, 7954, 7956, 0, 0, 0, 0, 7955, 7957, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 7962, 7964, 0, 0, 0, 0, 7963, 7965, 0, 0, 0, 0, - 7970, 7972, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7974, 8080, 7971, 7973, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 7975, 8081, 0, 0, 0, 0, 0, 8082, 0, 0, 0, 0, 0, - 8083, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8084, 0, 0, 0, 0, 0, 8085, - 0, 0, 0, 0, 0, 8086, 0, 0, 0, 0, 0, 8087, 0, 0, 0, 0, 0, 0, 0, 0, 7978, - 7980, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7982, 8088, 7979, 7981, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 7983, 8089, 0, 0, 0, 0, 0, 8090, 0, 0, 0, 0, 0, 8091, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8092, 0, 0, 0, 0, 0, 8093, 0, 0, - 0, 0, 0, 8094, 0, 0, 0, 0, 0, 8095, 0, 0, 0, 0, 0, 0, 0, 0, 7986, 7988, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7990, 0, 7987, 7989, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 7991, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7994, 7996, 0, 0, 7998, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 7995, 7997, 0, 0, 7999, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 8002, 8004, 0, 0, 0, 0, 8003, 8005, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 8010, 8012, 0, 0, 0, 0, 8011, 8013, 0, 0, 0, 0, 8018, 8020, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 8022, 0, 8019, 8021, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 8023, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8027, 8029, 0, 0, 8031, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 8034, 8036, 0, 0, 8038, 8096, 0, 0, 0, 0, 0, 0, 0, 0, 8035, - 8037, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8039, 8097, 0, 0, 0, 0, 0, 8098, 0, - 0, 0, 0, 0, 8099, 0, 0, 0, 0, 0, 8100, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 8101, 0, 0, 0, 0, 0, 8102, 0, 0, 0, 0, 0, 8103, 0, 0, 0, 0, 0, 0, - 0, 0, 8042, 8044, 0, 0, 8046, 8104, 0, 0, 0, 0, 0, 0, 0, 0, 8043, 8045, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8047, 8105, 0, 0, 0, 0, 0, 8106, 0, 0, 0, - 0, 0, 8107, 0, 0, 0, 0, 0, 8108, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 8109, 0, 0, 0, 0, 0, 8110, 0, 0, 0, 0, 0, 8111, 0, 0, 0, 0, 0, 8114, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8130, 0, 0, 0, 0, 0, 8178, 0, 0, 0, - 0, 0, 8119, 0, 0, 0, 0, 0, 0, 0, 0, 8141, 8142, 0, 0, 8143, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8135, 0, 0, 0, 0, 0, 8183, 0, 0, 0, 0, 0, - 0, 0, 0, 8157, 8158, 0, 0, 8159, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 8602, 0, 0, 0, 0, 0, 8603, 0, 0, 0, 0, 0, 8622, 0, 0, 0, 0, 0, 8653, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8655, 0, 0, 0, 0, 0, 8654, 0, 0, 0, - 0, 0, 8708, 0, 0, 0, 0, 0, 8713, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 8716, 0, 0, 0, 0, 0, 8740, 0, 0, 0, 0, 0, 8742, 0, 0, 0, 0, 0, 8769, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8772, 0, 0, 0, 0, 0, 8775, 0, 0, 0, - 0, 0, 8777, 0, 0, 0, 0, 0, 8813, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 8802, 0, 0, 0, 0, 0, 8816, 0, 0, 0, 0, 0, 8817, 0, 0, 0, 0, 0, 8820, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8821, 0, 0, 0, 0, 0, 8824, 0, 0, 0, - 0, 0, 8825, 0, 0, 0, 0, 0, 8832, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 8833, 0, 0, 0, 0, 0, 8928, 0, 0, 0, 0, 0, 8929, 0, 0, 0, 0, 0, 8836, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8837, 0, 0, 0, 0, 0, 8840, 0, 0, 0, - 0, 0, 8841, 0, 0, 0, 0, 0, 8930, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 8931, 0, 0, 0, 0, 0, 8876, 0, 0, 0, 0, 0, 8877, 0, 0, 0, 0, 0, 8878, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8879, 0, 0, 0, 0, 0, 8938, 0, 0, 0, - 0, 0, 8939, 0, 0, 0, 0, 0, 8940, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 8941, 0, 0, 0, 0, 0, 0, 12436, 0, 0, 0, 0, 0, 12364, 0, 0, 0, 0, 0, - 12366, 0, 0, 0, 0, 0, 12368, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 12370, 0, 0, 0, 0, 0, 12372, 0, 0, 0, 0, 0, 12374, 0, 0, 0, 0, 0, 12376, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12378, 0, 0, 0, 0, 0, 12380, 0, 0, - 0, 0, 0, 12382, 0, 0, 0, 0, 0, 12384, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 12386, 0, 0, 0, 0, 0, 12389, 0, 0, 0, 0, 0, 12391, 0, 0, 0, 0, 0, - 12393, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12400, 12401, 0, 0, 0, 0, - 12403, 12404, 0, 0, 0, 0, 12406, 12407, 0, 0, 0, 0, 12409, 12410, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12412, 12413, 0, 0, 0, 0, 12446, 0, 0, 0, - 0, 0, 12532, 0, 0, 0, 0, 0, 12460, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 12462, 0, 0, 0, 0, 0, 12464, 0, 0, 0, 0, 0, 12466, 0, 0, 0, 0, 0, 12468, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12470, 0, 0, 0, 0, 0, 12472, 0, 0, - 0, 0, 0, 12474, 0, 0, 0, 0, 0, 12476, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 12478, 0, 0, 0, 0, 0, 12480, 0, 0, 0, 0, 0, 12482, 0, 0, 0, 0, 0, - 12485, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12487, 0, 0, 0, 0, 0, - 12489, 0, 0, 0, 0, 0, 12496, 12497, 0, 0, 0, 0, 12499, 12500, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 12502, 12503, 0, 0, 0, 0, 12505, 12506, 0, 0, 0, - 0, 12508, 12509, 0, 0, 0, 0, 12535, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 12536, 0, 0, 0, 0, 0, 12537, 0, 0, 0, 0, 0, 12538, 0, 0, 0, 0, 0, - 12542, 0, +static unsigned int comp_data[] = { + 0, 0, 0, 0, 0, 0, 0, 8814, 0, 0, 8800, 0, 0, 8815, 0, 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, 7682, 0, 0, 7684, 0, 0, 0, 0, 7686, 0, 262, + 264, 0, 0, 0, 266, 0, 0, 0, 0, 268, 0, 199, 0, 0, 0, 7690, 0, 0, 0, 0, + 270, 0, 0, 0, 0, 0, 7692, 0, 0, 0, 7696, 0, 7698, 0, 0, 7694, 0, 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, 0, 7710, 0, 500, 284, 0, + 7712, 286, 288, 0, 0, 0, 0, 486, 0, 290, 0, 0, 0, 292, 0, 0, 0, 7714, + 7718, 0, 0, 0, 542, 0, 0, 0, 0, 0, 7716, 0, 0, 0, 7720, 0, 0, 7722, 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, 308, 0, 7728, 0, 0, 0, 0, + 0, 488, 0, 7730, 0, 0, 0, 310, 0, 0, 0, 0, 7732, 0, 0, 0, 0, 0, 313, 0, + 317, 0, 0, 0, 0, 0, 7734, 0, 0, 0, 315, 0, 7740, 0, 0, 7738, 0, 0, 0, 0, + 0, 7742, 0, 0, 0, 0, 7744, 0, 0, 7746, 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, 0, 0, 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, 0, 0, 0, 7764, 7766, 0, 0, 0, 0, 0, + 340, 0, 0, 0, 0, 7768, 344, 528, 530, 0, 0, 0, 7770, 0, 0, 0, 342, 0, 0, + 0, 0, 7774, 0, 346, 348, 0, 0, 0, 7776, 0, 0, 0, 0, 352, 0, 7778, 0, 0, + 536, 350, 0, 0, 0, 7786, 0, 0, 0, 0, 356, 0, 7788, 0, 0, 538, 354, 0, + 7792, 0, 0, 7790, 0, 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, 7804, 0, 0, 0, 0, 0, 7806, 0, 7808, 7810, 372, 0, 0, 0, 7814, 7812, + 0, 7816, 0, 0, 0, 7818, 7820, 0, 0, 0, 7922, 221, 374, 7928, 562, 0, + 7822, 376, 7926, 0, 0, 0, 0, 7924, 0, 0, 377, 7824, 0, 0, 0, 379, 381, 0, + 0, 0, 0, 0, 7826, 0, 0, 0, 0, 7828, 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, 7683, 0, 0, 7685, 0, 0, 0, 0, 7687, 0, 0, 0, 0, 0, 263, 265, 0, 0, 0, + 267, 0, 0, 0, 0, 269, 0, 0, 0, 0, 0, 231, 0, 0, 0, 7691, 271, 0, 0, 0, 0, + 0, 7693, 0, 0, 0, 7697, 0, 7699, 0, 0, 7695, 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, 7711, 0, 0, 0, 0, 0, 501, 285, 0, 7713, 287, + 289, 0, 0, 0, 0, 487, 0, 0, 0, 0, 0, 291, 0, 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, 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, 309, 0, 0, 0, 0, 496, + 0, 0, 0, 0, 7729, 0, 489, 0, 0, 0, 0, 0, 7731, 0, 0, 0, 311, 7733, 0, 0, + 0, 0, 0, 314, 0, 318, 0, 0, 0, 0, 0, 7735, 0, 0, 0, 316, 0, 7741, 0, 0, + 7739, 0, 7743, 0, 0, 0, 0, 7745, 0, 0, 7747, 0, 0, 0, 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, 0, 0, 0, 242, 243, 244, 245, 333, 335, 559, 246, 7887, 0, 337, + 466, 525, 527, 0, 0, 417, 7885, 491, 0, 0, 0, 0, 0, 7765, 0, 0, 0, 0, + 7767, 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, 347, 349, 0, 0, 0, 7777, 0, 0, 0, 0, + 353, 0, 7779, 0, 0, 537, 351, 0, 0, 0, 7787, 7831, 0, 0, 0, 357, 0, 0, 0, + 0, 0, 7789, 0, 0, 539, 355, 0, 7793, 0, 0, 7791, 0, 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, 0, 7805, 0, 7807, 0, 0, + 0, 0, 0, 7809, 7811, 373, 0, 0, 0, 7815, 7813, 0, 7832, 0, 0, 0, 7817, 0, + 0, 0, 7819, 7821, 0, 0, 0, 7923, 253, 375, 7929, 563, 0, 7823, 255, 7927, + 7833, 0, 0, 0, 7925, 0, 0, 378, 7825, 0, 0, 0, 380, 0, 0, 0, 0, 382, 0, + 7827, 0, 0, 0, 0, 7829, 0, 0, 0, 0, 8173, 901, 0, 0, 0, 0, 0, 0, 8129, 0, + 0, 7846, 7844, 0, 7850, 0, 0, 0, 0, 7848, 0, 0, 478, 0, 0, 0, 506, 0, 0, + 508, 0, 0, 482, 0, 0, 0, 7688, 0, 7872, 7870, 0, 7876, 0, 0, 0, 0, 7874, + 0, 0, 0, 7726, 0, 0, 0, 0, 0, 7890, 7888, 0, 7894, 0, 0, 0, 0, 7892, 0, + 0, 0, 7756, 0, 0, 556, 0, 0, 7758, 0, 0, 0, 554, 0, 0, 0, 510, 0, 0, 0, + 0, 0, 475, 471, 0, 0, 469, 0, 0, 473, 0, 0, 0, 7847, 7845, 0, 7851, 0, 0, + 0, 0, 7849, 0, 0, 479, 0, 0, 0, 507, 0, 0, 509, 0, 0, 483, 0, 0, 0, 7689, + 0, 7873, 7871, 0, 7877, 0, 0, 0, 0, 7875, 0, 0, 0, 7727, 0, 0, 0, 0, 0, + 7891, 7889, 0, 7895, 0, 0, 0, 0, 7893, 0, 0, 0, 7757, 0, 0, 557, 0, 0, + 7759, 0, 0, 0, 555, 0, 0, 0, 511, 0, 0, 0, 0, 0, 476, 472, 0, 0, 470, 0, + 0, 474, 0, 0, 0, 7856, 7854, 0, 7860, 0, 0, 0, 0, 7858, 0, 0, 7857, 7855, + 0, 7861, 0, 0, 0, 0, 7859, 0, 0, 7700, 7702, 0, 0, 0, 0, 0, 7701, 7703, + 0, 0, 0, 0, 0, 7760, 7762, 0, 7761, 7763, 0, 0, 0, 7780, 0, 0, 7781, 0, + 0, 7782, 0, 0, 0, 0, 0, 0, 7783, 0, 7800, 0, 0, 7801, 0, 0, 0, 0, 7802, + 0, 0, 7803, 0, 0, 0, 0, 0, 7835, 0, 0, 0, 0, 7900, 7898, 0, 7904, 0, 0, + 0, 0, 7902, 7906, 0, 0, 0, 0, 0, 7901, 7899, 0, 7905, 0, 0, 0, 0, 7903, + 0, 0, 0, 0, 7907, 0, 7914, 7912, 0, 7918, 0, 0, 0, 0, 7916, 0, 0, 0, 0, + 7920, 0, 7915, 7913, 0, 7919, 7917, 0, 0, 0, 0, 7921, 0, 0, 0, 0, 494, 0, + 0, 0, 492, 0, 0, 493, 0, 0, 480, 0, 0, 0, 0, 0, 0, 481, 0, 0, 0, 7708, 0, + 0, 7709, 0, 560, 0, 0, 0, 0, 0, 0, 561, 0, 495, 0, 0, 0, 8122, 902, 0, 0, + 8121, 8120, 0, 0, 0, 0, 7944, 7945, 0, 0, 0, 0, 0, 8124, 0, 8136, 904, 0, + 0, 0, 0, 7960, 7961, 0, 0, 0, 8138, 905, 0, 0, 0, 0, 7976, 7977, 0, 8140, + 0, 0, 0, 0, 0, 8154, 906, 0, 0, 8153, 8152, 0, 938, 0, 0, 7992, 7993, 0, + 0, 0, 8184, 908, 0, 0, 0, 0, 8008, 8009, 0, 0, 0, 0, 0, 0, 8172, 0, 0, 0, + 8170, 910, 0, 0, 8169, 8168, 0, 939, 0, 0, 0, 8025, 0, 0, 0, 8186, 911, + 8040, 8041, 0, 0, 0, 0, 0, 8188, 0, 0, 8116, 0, 0, 8132, 0, 0, 0, 0, 0, + 8048, 940, 0, 0, 8113, 8112, 0, 0, 0, 0, 7936, 7937, 0, 0, 0, 0, 8118, + 8115, 0, 0, 0, 0, 0, 8050, 941, 7952, 7953, 0, 0, 0, 8052, 942, 0, 0, 0, + 0, 7968, 7969, 0, 0, 0, 0, 8134, 8131, 0, 8054, 943, 0, 0, 8145, 8144, 0, + 970, 0, 0, 7984, 7985, 8150, 0, 0, 0, 0, 0, 0, 8056, 972, 0, 0, 0, 0, + 8000, 8001, 0, 8164, 8165, 0, 0, 0, 8058, 973, 0, 0, 8161, 8160, 0, 971, + 0, 0, 0, 0, 0, 0, 8016, 8017, 0, 0, 0, 0, 8166, 0, 0, 8060, 974, 0, 0, 0, + 0, 8032, 8033, 8182, 8179, 0, 0, 0, 0, 0, 8146, 912, 0, 0, 0, 0, 0, 0, + 8151, 0, 0, 8162, 944, 0, 0, 8167, 0, 0, 0, 8180, 0, 0, 979, 0, 0, 0, 0, + 0, 980, 0, 0, 1031, 0, 0, 0, 0, 1232, 0, 1234, 0, 0, 0, 0, 1027, 0, 1024, + 0, 0, 0, 0, 1238, 0, 1025, 1217, 0, 1244, 0, 0, 1246, 0, 0, 0, 1037, 0, + 0, 0, 1250, 1049, 0, 1252, 0, 0, 0, 0, 1036, 0, 0, 0, 0, 1254, 0, 0, 0, + 1262, 1038, 0, 1264, 0, 0, 1266, 0, 0, 0, 1268, 0, 0, 0, 0, 0, 0, 1272, + 0, 0, 1260, 0, 0, 0, 0, 1233, 0, 1235, 0, 0, 0, 0, 1107, 0, 1104, 0, 0, + 0, 0, 1239, 0, 1105, 1218, 0, 1245, 0, 0, 1247, 0, 0, 0, 1117, 0, 0, 0, + 1251, 1081, 0, 1253, 0, 0, 0, 0, 1116, 0, 0, 0, 0, 1255, 0, 0, 0, 1263, + 1118, 0, 1265, 0, 0, 1267, 0, 0, 0, 1269, 0, 0, 0, 0, 0, 0, 1273, 0, 0, + 1261, 0, 0, 1111, 0, 0, 0, 1142, 0, 0, 1143, 0, 0, 0, 0, 0, 1242, 0, 0, + 1243, 0, 0, 1258, 0, 0, 0, 0, 0, 0, 1259, 0, 1570, 1571, 1573, 0, 1572, + 0, 0, 1574, 0, 0, 0, 0, 0, 0, 1730, 0, 0, 1747, 0, 0, 1728, 0, 0, 0, 0, + 2345, 0, 0, 2353, 0, 0, 2356, 0, 0, 0, 2507, 2508, 0, 0, 0, 2891, 2888, + 2892, 2964, 0, 0, 0, 0, 0, 3018, 3020, 0, 3019, 0, 0, 0, 0, 3144, 0, 0, + 0, 0, 3264, 0, 3274, 3271, 3272, 0, 3275, 0, 0, 0, 0, 3402, 3404, 0, + 3403, 0, 0, 0, 0, 3546, 3548, 3550, 0, 0, 0, 0, 3549, 0, 0, 0, 0, 0, + 4134, 0, 0, 0, 6918, 0, 0, 6920, 0, 0, 6922, 0, 0, 6924, 0, 0, 0, 0, 0, + 0, 6926, 0, 0, 6930, 0, 0, 6971, 0, 0, 6973, 0, 0, 0, 0, 0, 0, 6976, 0, + 0, 6977, 0, 0, 6979, 0, 0, 0, 7736, 0, 0, 7737, 0, 0, 0, 0, 0, 0, 7772, + 0, 0, 7773, 0, 0, 0, 0, 7784, 0, 0, 7785, 0, 0, 7852, 0, 0, 7862, 0, 0, + 0, 7853, 0, 0, 7863, 0, 0, 0, 7878, 0, 0, 7879, 0, 0, 7896, 0, 0, 7897, + 0, 0, 0, 0, 7938, 7940, 0, 0, 7942, 8064, 0, 7939, 7941, 0, 0, 7943, + 8065, 0, 0, 8066, 0, 0, 0, 0, 0, 0, 8067, 0, 0, 8068, 0, 0, 8069, 0, 0, + 8070, 0, 0, 0, 0, 0, 0, 8071, 0, 7946, 7948, 0, 0, 7950, 8072, 0, 7947, + 7949, 0, 0, 7951, 8073, 0, 0, 8074, 0, 0, 0, 0, 0, 0, 8075, 0, 0, 8076, + 0, 0, 8077, 0, 0, 8078, 0, 0, 0, 0, 0, 0, 8079, 0, 7954, 7956, 0, 7955, + 7957, 0, 0, 0, 0, 0, 7962, 7964, 0, 0, 0, 0, 0, 7963, 7965, 0, 7970, + 7972, 0, 0, 7974, 8080, 0, 7971, 7973, 0, 0, 7975, 8081, 0, 0, 8082, 0, + 0, 0, 0, 0, 0, 8083, 0, 0, 8084, 0, 0, 8085, 0, 0, 8086, 0, 0, 0, 0, 0, + 0, 8087, 0, 7978, 7980, 0, 0, 7982, 8088, 0, 7979, 7981, 0, 0, 7983, + 8089, 0, 0, 8090, 0, 0, 0, 0, 0, 0, 8091, 0, 0, 8092, 0, 0, 8093, 0, 0, + 8094, 0, 0, 0, 0, 0, 0, 8095, 0, 7986, 7988, 0, 0, 7990, 0, 0, 7987, + 7989, 0, 0, 7991, 0, 0, 0, 0, 0, 0, 7994, 7996, 0, 0, 0, 0, 0, 0, 7998, + 0, 0, 7995, 7997, 0, 0, 7999, 0, 0, 8002, 8004, 0, 8003, 8005, 0, 0, 0, + 0, 0, 8010, 8012, 0, 0, 0, 0, 0, 8011, 8013, 0, 8018, 8020, 0, 0, 8022, + 0, 0, 8019, 8021, 0, 0, 8023, 0, 0, 0, 0, 0, 0, 8027, 8029, 0, 0, 0, 0, + 0, 0, 8031, 0, 0, 8034, 8036, 0, 0, 8038, 8096, 0, 8035, 8037, 0, 0, + 8039, 8097, 0, 0, 8098, 0, 0, 8099, 0, 0, 0, 0, 0, 0, 8100, 0, 0, 8101, + 0, 0, 8102, 0, 0, 8103, 0, 0, 0, 0, 0, 8042, 8044, 0, 0, 8046, 8104, 0, + 8043, 8045, 0, 0, 8047, 8105, 0, 0, 8106, 0, 0, 8107, 0, 0, 0, 0, 0, 0, + 8108, 0, 0, 8109, 0, 0, 8110, 0, 0, 8111, 0, 0, 0, 0, 0, 0, 8114, 0, 0, + 8130, 0, 0, 8178, 0, 0, 8119, 0, 0, 0, 0, 0, 8141, 8142, 0, 0, 8143, 0, + 0, 0, 8135, 0, 0, 8183, 0, 0, 0, 0, 0, 8157, 8158, 0, 0, 0, 0, 0, 0, + 8159, 0, 8602, 0, 0, 8603, 0, 0, 0, 0, 0, 0, 8622, 0, 0, 8653, 0, 0, + 8655, 0, 0, 8654, 0, 0, 0, 0, 0, 0, 8708, 0, 0, 8713, 0, 0, 8716, 0, 0, + 8740, 0, 0, 0, 0, 0, 0, 8742, 0, 0, 8769, 0, 0, 8772, 0, 0, 8775, 0, 0, + 0, 0, 0, 0, 8777, 0, 0, 8813, 0, 0, 8802, 0, 0, 8816, 0, 0, 0, 0, 0, 0, + 8817, 0, 0, 8820, 0, 0, 8821, 0, 0, 8824, 0, 0, 0, 0, 0, 0, 8825, 0, 0, + 8832, 0, 0, 8833, 0, 0, 8928, 0, 0, 0, 0, 0, 0, 8929, 0, 0, 8836, 0, 0, + 8837, 0, 0, 8840, 0, 0, 0, 0, 0, 0, 8841, 0, 0, 8930, 0, 0, 8931, 0, 0, + 8876, 0, 0, 0, 0, 0, 0, 8877, 0, 0, 8878, 0, 0, 8879, 0, 0, 8938, 0, 0, + 0, 0, 0, 0, 8939, 0, 0, 8940, 0, 0, 8941, 0, 0, 0, 12436, 0, 0, 12364, 0, + 0, 0, 0, 0, 0, 12366, 0, 0, 12368, 0, 0, 12370, 0, 0, 12372, 0, 0, 0, 0, + 0, 0, 12374, 0, 0, 12376, 0, 0, 12378, 0, 0, 12380, 0, 0, 0, 0, 0, 0, + 12382, 0, 0, 12384, 0, 0, 12386, 0, 0, 12389, 0, 0, 0, 0, 0, 0, 12391, 0, + 0, 12393, 0, 0, 12400, 12401, 0, 12403, 12404, 0, 0, 0, 0, 0, 12406, + 12407, 0, 0, 0, 0, 0, 12409, 12410, 0, 12412, 12413, 0, 12446, 0, 0, 0, + 0, 0, 0, 12532, 0, 0, 12460, 0, 0, 12462, 0, 0, 12464, 0, 0, 0, 0, 0, 0, + 12466, 0, 0, 12468, 0, 0, 12470, 0, 0, 12472, 0, 0, 0, 0, 0, 0, 12474, 0, + 0, 12476, 0, 0, 12478, 0, 0, 12480, 0, 0, 0, 0, 0, 0, 12482, 0, 0, 12485, + 0, 0, 12487, 0, 0, 12489, 0, 0, 0, 0, 0, 0, 12496, 12497, 0, 0, 0, 0, 0, + 12499, 12500, 0, 12502, 12503, 0, 12505, 12506, 0, 0, 0, 0, 0, 12508, + 12509, 0, 0, 0, 0, 0, 12535, 0, 0, 12536, 0, 0, 12537, 0, 0, 0, 0, 0, 0, + 12538, 0, 0, 12542, 0, 0, 0, 0, 69786, 0, 0, 69788, 0, 0, 69803, }; static const change_record change_records_3_2_0[] = { @@ -4700,6 +4929,11 @@ { 255, 29, 255, 255, 0 }, { 255, 26, 255, 255, 0 }, { 5, 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 }, @@ -4729,42 +4963,42 @@ { 255, 23, 255, 255, 0 }, { 9, 255, 255, 255, 0 }, { 255, 20, 255, 255, 0 }, - { 255, 255, 255, 255, -1 }, { 255, 255, 255, 255, 1e+16 }, { 255, 255, 255, 255, 1e+20 }, { 255, 19, 255, 255, 0 }, { 15, 255, 255, 255, 0 }, { 255, 19, 255, 255, -1 }, + { 1, 255, 255, 0, 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, 2, 2, 14, 15, 16, 17, - 18, 19, 20, 21, 22, 2, 2, 2, 23, 24, 25, 26, 2, 2, 27, 28, 29, 30, 2, 2, - 2, 2, 2, 31, 2, 32, 33, 34, 35, 36, 37, 2, 38, 39, 40, 2, 41, 42, 2, 43, - 2, 2, 44, 45, 46, 47, 48, 2, 2, 49, 50, 51, 2, 2, 52, 53, 2, 54, 55, 55, - 2, 2, 2, 2, 56, 2, 57, 58, 59, 60, 61, 2, 2, 2, 2, 62, 63, 64, 65, 66, - 67, 68, 69, 70, 2, 2, 2, 2, 2, 2, 71, 2, 2, 2, 2, 2, 72, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 73, 2, 74, 2, 2, 2, 2, 2, 2, 2, 2, 75, 76, 2, 2, 2, - 2, 2, 2, 2, 77, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 78, 79, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 80, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 0, 1, 2, 2, 3, 4, 5, 6, 2, 7, 8, 9, 10, 11, 12, 13, 14, 2, 15, 16, 17, + 18, 19, 20, 21, 22, 23, 2, 2, 2, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, + 34, 2, 2, 2, 35, 36, 2, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, + 49, 2, 50, 2, 2, 51, 52, 53, 54, 55, 2, 2, 56, 57, 58, 2, 2, 59, 60, 61, + 62, 63, 63, 2, 2, 2, 2, 64, 2, 65, 66, 67, 68, 69, 2, 2, 2, 2, 70, 71, + 72, 73, 74, 75, 76, 77, 78, 2, 2, 2, 2, 2, 2, 79, 2, 2, 2, 2, 2, 80, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 81, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 82, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 83, 84, 2, 2, 2, 2, 2, 2, 2, 2, 2, 41, 41, 85, 86, 41, 87, - 88, 89, 90, 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, 2, 2, 81, 2, 82, 2, 2, 2, 2, 2, 2, 2, 2, 83, + 84, 2, 2, 2, 2, 2, 2, 2, 85, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 86, 87, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 88, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 89, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 90, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 91, 92, 2, 2, 2, 2, 2, 2, 2, 2, 93, 48, 48, + 94, 95, 48, 96, 97, 98, 99, 100, 101, 102, 2, 103, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 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, 93, 94, 95, - 96, 2, 2, 2, 2, 97, 98, 2, 99, 100, 101, 102, 103, 104, 2, 105, 106, 107, - 108, 109, 2, 2, 2, 2, 2, 2, 110, 2, 111, 2, 112, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 104, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 41, 41, 41, 41, 41, 41, 113, 2, 114, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 105, 106, 107, 108, 109, 2, 2, 2, 2, 110, 111, 2, 112, 113, 114, + 115, 116, 117, 2, 118, 119, 120, 121, 122, 2, 2, 2, 2, 2, 2, 123, 2, 124, + 2, 125, 2, 126, 2, 127, 2, 2, 2, 128, 2, 2, 2, 2, 129, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 48, 48, 48, 48, 48, 48, 130, 2, 131, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 48, 48, 48, 48, 48, 48, 48, 48, 132, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, @@ -4777,33 +5011,33 @@ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 115, 2, 116, 2, 117, 2, 2, 118, 2, 2, 2, 119, - 120, 121, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 122, 123, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 124, 125, 82, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 71, 126, 2, 127, 128, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 133, 2, 134, 2, 135, 2, 2, 136, 2, 2, 2, 137, 138, 139, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 129, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 130, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 131, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 132, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 140, 141, 142, 143, + 144, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 145, 146, 90, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 79, 147, 2, 148, 149, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 150, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 151, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 152, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 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, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, + 48, 154, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 129, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 150, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, @@ -5037,8 +5271,9 @@ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 41, 133, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 48, + 155, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, @@ -5101,7 +5336,7 @@ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 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[] = { @@ -5149,7 +5384,7 @@ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 0, 0, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -5179,263 +5414,305 @@ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 7, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 0, 0, 0, 0, 0, + 0, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 12, 13, 14, 15, 16, 0, 0, 7, 0, 0, 0, 0, 0, 7, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, + 0, 0, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 0, 0, 0, 0, 0, + 0, 0, 0, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 0, + 17, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 0, 0, 0, 7, 7, 7, 7, 7, 7, + 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 18, 18, 18, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, + 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 7, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, + 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 0, 12, 0, 0, 0, 0, 0, 0, 12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 0, 0, 0, 0, 0, + 0, 0, 0, 7, 7, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, - 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 7, 7, 7, 7, 7, 7, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 13, 13, 13, 13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, + 7, 7, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 7, 0, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, - 0, 7, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 0, 0, 0, 0, 7, 7, 7, 7, 7, - 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 7, - 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 0, 7, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 0, 0, 0, 0, 0, + 0, 0, 0, 19, 20, 21, 22, 23, 24, 25, 26, 27, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 0, 0, 0, 0, 0, 0, - 0, 0, 14, 15, 16, 17, 18, 19, 20, 21, 22, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 18, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 23, 23, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 24, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 28, 28, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 29, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, + 0, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 7, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, - 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, - 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 0, 0, 0, 0, 7, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 7, 7, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, + 7, 7, 7, 0, 0, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, + 0, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, - 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, + 0, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 7, - 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, 0, 0, 0, 0, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 27, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, 0, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, - 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 28, 0, 0, 0, 29, 30, 31, 32, 33, 34, - 1, 1, 0, 0, 0, 0, 28, 6, 4, 5, 29, 30, 31, 32, 33, 34, 1, 1, 0, 0, 0, 0, - 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, + 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 7, 7, 7, 7, 7, + 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, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, 0, 7, 7, 7, + 7, 7, 7, 7, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 33, 8, 0, + 0, 34, 35, 36, 37, 38, 39, 1, 1, 0, 0, 0, 8, 33, 6, 4, 5, 34, 35, 36, 37, + 38, 39, 1, 1, 0, 0, 0, 0, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, - 0, 0, 0, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, + 0, 0, 0, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 36, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 40, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 41, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, 37, 38, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 43, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, - 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, - 39, 39, 39, 39, 39, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 44, 44, 44, 44, 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, 39, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 7, 7, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 7, 7, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 0, 0, 0, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 7, 7, 7, 7, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 0, 7, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, - 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, - 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, - 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, - 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, - 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, - 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, - 27, 27, 27, 27, 27, 27, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 7, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 32, + 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, + 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, + 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, + 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, + 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, + 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, + 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 7, 7, 7, 7, 7, 0, 0, 0, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, + 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, + 7, 7, 7, 7, 7, 7, 7, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 0, 7, 7, 7, 7, 7, 7, 7, 0, 7, 7, 7, 7, 7, 7, 7, 0, 7, 7, 7, 7, 7, 7, 7, 0, 7, 7, 7, 7, 7, 7, 7, 0, 7, 7, 7, 7, 7, 7, 7, 0, 7, 7, 7, 7, 7, 7, 7, 0, - 7, 7, 7, 7, 7, 7, 7, 0, 7, 7, 7, 7, 7, 7, 7, 0, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -5443,83 +5720,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, 40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 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, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, - 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 41, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 41, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 41, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 41, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 41, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 41, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 41, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 46, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 41, 0, 0, 0, 0, 0, 0, 0, 41, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 41, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -5528,50 +5805,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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 41, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 41, 0, 0, 0, 0, 0, 0, 0, 41, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, + 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 41, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 41, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -5579,50 +5862,70 @@ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 41, 0, 0, 0, 0, - 0, 0, 0, 41, 0, 0, 0, 0, 41, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 41, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 41, 0, 41, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 41, 0, 0, + 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 0, + 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, @@ -5630,158 +5933,202 @@ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 13, 13, 13, 13, 13, 13, 0, 0, 0, 1, 1, 13, 13, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 18, 18, 18, 18, 18, 18, 0, 0, 0, 1, 1, 18, + 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, 40, + 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 49, 49, 49, 0, 0, 0, 0, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 0, 7, 7, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, + 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 7, - 7, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 7, 7, 7, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, - 0, 0, 0, 7, 7, 7, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, - 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 7, 7, 7, 7, 7, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, - 0, 0, 0, 0, 0, 41, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 7, 7, 7, 7, 7, 7, + 0, 0, 0, 0, 0, 50, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 7, 7, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, + 7, 7, 0, 0, 7, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, + 7, 7, 0, 7, 7, 0, 0, 0, 7, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 0, 0, 7, 0, 7, 7, 7, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, 0, 7, 7, 0, 0, 0, 0, 0, + 7, 7, 7, 7, 7, 7, 7, 7, 0, 7, 7, 7, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 7, 7, 7, 0, + 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 7, 7, 0, 0, 0, 7, - 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, - 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 7, 7, 7, 7, 0, 7, 7, 0, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 0, - 7, 7, 7, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 7, 7, 7, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, 7, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, - 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 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, 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, 13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 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, 13, 0, - 0, 0, 0, 0, 0, 7, 7, 0, 0, 0, 0, 0, 0, 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, 51, + 0, 0, 0, 0, 0, 0, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 41, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 7, 0, 0, 7, 0, + 0, 0, 7, 0, 0, 0, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, + 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 7, 0, 7, 7, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, + 7, 7, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 41, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 41, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 41, 0, - 0, 0, 0, 0, 0, 0, 0, 41, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 41, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, + 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -5789,25 +6136,25 @@ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 41, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 41, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 41, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 41, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 41, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 41, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -5816,13 +6163,18 @@ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 41, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 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) Modified: python/branches/py3k/Modules/unicodename_db.h ============================================================================== --- python/branches/py3k/Modules/unicodename_db.h (original) +++ python/branches/py3k/Modules/unicodename_db.h Fri Mar 19 14:37:08 2010 @@ -6,498 +6,614 @@ static unsigned char lexicon[] = { 76, 69, 84, 84, 69, 210, 87, 73, 84, 200, 83, 77, 65, 76, 204, 83, 89, 76, 76, 65, 66, 76, 197, 83, 73, 71, 206, 67, 65, 80, 73, 84, 65, 204, - 76, 65, 84, 73, 206, 89, 201, 67, 74, 203, 65, 82, 65, 66, 73, 195, 67, - 79, 77, 80, 65, 84, 73, 66, 73, 76, 73, 84, 217, 77, 65, 84, 72, 69, 77, - 65, 84, 73, 67, 65, 204, 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, 79, 76, 196, 71, 82, 69, 69, 203, - 76, 73, 71, 65, 84, 85, 82, 197, 68, 73, 71, 73, 212, 65, 78, 196, 77, - 85, 83, 73, 67, 65, 204, 84, 73, 77, 69, 211, 69, 84, 72, 73, 79, 80, 73, - 195, 72, 65, 78, 71, 85, 204, 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, 86, 79, 87, 69, 204, 70, 79, 210, 67, 73, 82, 67, 76, 69, - 196, 86, 65, 201, 70, 73, 78, 65, 204, 67, 79, 77, 66, 73, 78, 73, 78, - 199, 83, 81, 85, 65, 82, 197, 86, 65, 82, 73, 65, 84, 73, 79, 206, 66, - 82, 65, 73, 76, 76, 197, 80, 65, 84, 84, 69, 82, 206, 82, 73, 71, 72, - 212, 76, 69, 70, 212, 66, 89, 90, 65, 78, 84, 73, 78, 197, 73, 83, 79, - 76, 65, 84, 69, 196, 194, 65, 66, 79, 86, 69, 128, 68, 79, 85, 66, 76, - 197, 75, 65, 84, 65, 75, 65, 78, 193, 75, 65, 78, 71, 88, 201, 76, 73, - 78, 69, 65, 210, 66, 69, 76, 79, 87, 128, 77, 79, 68, 73, 70, 73, 69, - 210, 83, 73, 71, 78, 128, 84, 73, 66, 69, 84, 65, 206, 77, 69, 69, 205, - 68, 79, 212, 65, 128, 65, 82, 82, 79, 87, 128, 73, 78, 73, 84, 73, 65, - 204, 67, 65, 82, 82, 73, 69, 210, 86, 69, 82, 84, 73, 67, 65, 204, 89, - 69, 200, 87, 72, 73, 84, 197, 65, 66, 79, 86, 197, 78, 85, 77, 66, 69, - 210, 85, 128, 65, 82, 82, 79, 215, 77, 79, 78, 71, 79, 76, 73, 65, 206, - 77, 89, 65, 78, 77, 65, 210, 67, 79, 80, 84, 73, 195, 75, 72, 77, 69, - 210, 79, 128, 73, 128, 84, 73, 76, 197, 77, 65, 82, 75, 128, 66, 79, 216, - 72, 69, 66, 82, 69, 215, 80, 76, 85, 211, 68, 82, 65, 87, 73, 78, 71, - 211, 82, 73, 71, 72, 84, 87, 65, 82, 68, 211, 83, 84, 82, 79, 75, 69, + 76, 65, 84, 73, 206, 89, 201, 67, 74, 203, 69, 71, 89, 80, 84, 73, 65, + 206, 72, 73, 69, 82, 79, 71, 76, 89, 80, 200, 65, 82, 65, 66, 73, 195, + 67, 79, 77, 80, 65, 84, 73, 66, 73, 76, 73, 84, 217, 77, 65, 84, 72, 69, + 77, 65, 84, 73, 67, 65, 204, 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, 68, 73, 71, 73, 212, 66, 79, 76, + 196, 72, 65, 78, 71, 85, 204, 71, 82, 69, 69, 203, 76, 73, 71, 65, 84, + 85, 82, 197, 65, 78, 196, 77, 85, 83, 73, 67, 65, 204, 84, 73, 77, 69, + 211, 69, 84, 72, 73, 79, 80, 73, 195, 86, 79, 87, 69, 204, 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, 67, 73, 82, 67, 76, 69, + 196, 70, 79, 210, 67, 79, 77, 66, 73, 78, 73, 78, 199, 84, 65, 201, 86, + 65, 201, 70, 73, 78, 65, 204, 83, 81, 85, 65, 82, 197, 86, 65, 82, 73, + 65, 84, 73, 79, 206, 76, 69, 70, 212, 66, 82, 65, 73, 76, 76, 197, 80, + 65, 84, 84, 69, 82, 206, 82, 73, 71, 72, 212, 66, 89, 90, 65, 78, 84, 73, + 78, 197, 73, 83, 79, 76, 65, 84, 69, 196, 194, 65, 66, 79, 86, 69, 128, + 68, 79, 85, 66, 76, 197, 75, 65, 84, 65, 75, 65, 78, 193, 75, 65, 78, 71, + 88, 201, 78, 85, 77, 66, 69, 210, 83, 73, 71, 78, 128, 66, 69, 76, 79, + 87, 128, 76, 73, 78, 69, 65, 210, 77, 79, 68, 73, 70, 73, 69, 210, 84, + 73, 66, 69, 84, 65, 206, 65, 128, 68, 79, 212, 77, 69, 69, 205, 77, 89, + 65, 78, 77, 65, 210, 67, 65, 82, 82, 73, 69, 210, 65, 82, 82, 79, 87, + 128, 73, 78, 73, 84, 73, 65, 204, 87, 72, 73, 84, 197, 85, 128, 86, 69, + 82, 84, 73, 67, 65, 204, 89, 69, 200, 65, 66, 79, 86, 197, 73, 128, 79, + 128, 67, 79, 80, 84, 73, 195, 65, 82, 82, 79, 215, 77, 79, 78, 71, 79, + 76, 73, 65, 206, 77, 65, 82, 75, 128, 75, 72, 77, 69, 210, 68, 69, 86, + 65, 78, 65, 71, 65, 82, 201, 84, 73, 76, 197, 80, 65, 82, 69, 78, 84, 72, + 69, 83, 73, 90, 69, 196, 84, 72, 65, 205, 66, 76, 65, 67, 203, 74, 79, + 78, 71, 83, 69, 79, 78, 199, 66, 79, 216, 72, 69, 66, 82, 69, 215, 80, + 76, 85, 211, 68, 82, 65, 87, 73, 78, 71, 211, 82, 73, 71, 72, 84, 87, 65, + 82, 68, 211, 67, 72, 79, 83, 69, 79, 78, 199, 83, 84, 82, 79, 75, 69, 128, 72, 65, 76, 70, 87, 73, 68, 84, 200, 66, 65, 76, 73, 78, 69, 83, - 197, 66, 76, 65, 67, 203, 71, 69, 79, 82, 71, 73, 65, 206, 72, 79, 79, - 75, 128, 73, 68, 69, 79, 71, 82, 65, 205, 73, 68, 69, 79, 71, 82, 65, 80, - 72, 73, 195, 84, 65, 201, 65, 76, 69, 198, 80, 65, 82, 69, 78, 84, 72, - 69, 83, 73, 90, 69, 196, 68, 69, 86, 65, 78, 65, 71, 65, 82, 201, 83, 67, - 82, 73, 80, 212, 84, 79, 128, 213, 83, 89, 77, 66, 79, 76, 128, 85, 208, - 70, 85, 76, 76, 87, 73, 68, 84, 200, 72, 65, 200, 68, 79, 87, 206, 66, - 82, 65, 67, 75, 69, 84, 128, 69, 81, 85, 65, 204, 79, 198, 79, 86, 69, - 210, 84, 65, 199, 68, 79, 77, 73, 78, 207, 70, 82, 65, 75, 84, 85, 210, - 78, 85, 77, 69, 82, 73, 195, 72, 69, 65, 86, 217, 84, 87, 79, 128, 77, - 65, 76, 65, 89, 65, 76, 65, 205, 71, 76, 65, 71, 79, 76, 73, 84, 73, 195, - 67, 72, 65, 82, 65, 67, 84, 69, 210, 76, 69, 70, 84, 87, 65, 82, 68, 211, - 79, 78, 69, 128, 84, 69, 76, 85, 71, 213, 65, 82, 77, 69, 78, 73, 65, - 206, 66, 69, 78, 71, 65, 76, 201, 67, 72, 79, 83, 69, 79, 78, 199, 74, - 69, 69, 205, 77, 69, 68, 73, 65, 204, 66, 65, 82, 128, 72, 73, 82, 65, - 71, 65, 78, 193, 87, 69, 83, 84, 45, 67, 82, 69, 197, 84, 72, 65, 201, - 75, 65, 78, 78, 65, 68, 193, 67, 72, 69, 82, 79, 75, 69, 197, 72, 65, 76, - 198, 73, 68, 69, 79, 71, 82, 65, 80, 200, 79, 82, 73, 89, 193, 84, 87, - 207, 67, 72, 65, 205, 71, 85, 74, 65, 82, 65, 84, 201, 74, 79, 78, 71, - 83, 69, 79, 78, 199, 78, 69, 215, 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, 76, 85, 197, 83, 73, 78, 72, 65, 76, 193, 71, 85, 82, - 77, 85, 75, 72, 201, 78, 79, 84, 65, 84, 73, 79, 206, 83, 89, 82, 73, 65, - 195, 84, 72, 82, 69, 197, 86, 79, 67, 65, 76, 73, 195, 72, 65, 128, 65, - 67, 85, 84, 69, 128, 76, 69, 80, 67, 72, 193, 76, 73, 71, 72, 212, 70, - 79, 85, 82, 128, 68, 79, 85, 66, 76, 69, 45, 83, 84, 82, 85, 67, 203, 84, - 65, 77, 73, 204, 65, 80, 204, 70, 85, 78, 67, 84, 73, 79, 78, 65, 204, - 72, 65, 77, 90, 193, 77, 65, 82, 203, 84, 72, 82, 69, 69, 128, 84, 69, - 76, 69, 71, 82, 65, 80, 200, 79, 78, 197, 72, 79, 82, 73, 90, 79, 78, 84, - 65, 204, 74, 85, 78, 71, 83, 69, 79, 78, 199, 66, 65, 82, 194, 68, 65, - 83, 73, 193, 70, 73, 86, 69, 128, 76, 73, 77, 66, 213, 77, 65, 75, 83, - 85, 82, 193, 66, 79, 80, 79, 77, 79, 70, 207, 75, 65, 128, 75, 72, 65, - 82, 79, 83, 72, 84, 72, 201, 76, 65, 207, 84, 207, 72, 69, 88, 65, 71, - 82, 65, 205, 76, 79, 78, 199, 83, 73, 88, 128, 76, 79, 215, 80, 83, 73, - 76, 201, 69, 73, 71, 72, 84, 128, 75, 193, 77, 79, 78, 79, 83, 80, 65, - 67, 197, 78, 79, 212, 89, 65, 128, 78, 73, 78, 69, 128, 83, 128, 83, 69, - 86, 69, 78, 128, 83, 84, 82, 79, 75, 197, 86, 128, 68, 79, 84, 211, 77, - 65, 128, 82, 69, 86, 69, 82, 83, 69, 196, 72, 73, 71, 200, 75, 72, 65, - 200, 76, 79, 87, 69, 210, 78, 75, 207, 84, 73, 76, 68, 69, 128, 84, 79, - 78, 197, 78, 85, 77, 69, 82, 65, 204, 82, 65, 128, 84, 85, 82, 78, 69, - 196, 65, 69, 71, 69, 65, 206, 72, 128, 80, 65, 128, 71, 128, 76, 65, 71, - 65, 194, 80, 72, 65, 71, 83, 45, 80, 193, 67, 89, 80, 82, 73, 79, 212, - 68, 73, 65, 69, 82, 69, 83, 73, 83, 128, 83, 85, 78, 68, 65, 78, 69, 83, - 197, 84, 73, 70, 73, 78, 65, 71, 200, 68, 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, 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, - 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, 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, 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, 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, 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, - 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, 65, 128, 89, 89, 128, 89, 87, 79, 79, + 197, 71, 69, 79, 82, 71, 73, 65, 206, 72, 79, 79, 75, 128, 73, 68, 69, + 79, 71, 82, 65, 205, 73, 68, 69, 79, 71, 82, 65, 80, 72, 73, 195, 65, 76, + 69, 198, 83, 89, 77, 66, 79, 76, 128, 84, 79, 128, 83, 67, 82, 73, 80, + 212, 84, 87, 79, 128, 79, 86, 69, 210, 213, 72, 69, 65, 86, 217, 79, 78, + 69, 128, 85, 208, 76, 79, 215, 70, 85, 76, 76, 87, 73, 68, 84, 200, 72, + 65, 200, 68, 79, 87, 206, 69, 81, 85, 65, 204, 66, 82, 65, 67, 75, 69, + 84, 128, 72, 73, 71, 200, 79, 198, 84, 65, 199, 68, 79, 77, 73, 78, 207, + 78, 85, 77, 69, 82, 73, 195, 70, 82, 65, 75, 84, 85, 210, 74, 85, 78, 71, + 83, 69, 79, 78, 199, 77, 65, 76, 65, 89, 65, 76, 65, 205, 84, 87, 207, + 71, 76, 65, 71, 79, 76, 73, 84, 73, 195, 67, 72, 65, 82, 65, 67, 84, 69, + 210, 76, 69, 70, 84, 87, 65, 82, 68, 211, 77, 69, 68, 73, 65, 204, 84, + 69, 76, 85, 71, 213, 66, 69, 78, 71, 65, 76, 201, 79, 78, 197, 65, 82, + 77, 69, 78, 73, 65, 206, 74, 65, 86, 65, 78, 69, 83, 197, 74, 69, 69, + 205, 66, 65, 82, 128, 72, 73, 82, 65, 71, 65, 78, 193, 87, 69, 83, 84, + 45, 67, 82, 69, 197, 73, 68, 69, 79, 71, 82, 65, 80, 200, 66, 65, 77, 85, + 205, 84, 72, 65, 201, 75, 65, 78, 78, 65, 68, 193, 67, 72, 69, 82, 79, + 75, 69, 197, 72, 65, 76, 198, 84, 79, 78, 197, 78, 69, 215, 79, 82, 73, + 89, 193, 84, 72, 82, 69, 197, 67, 72, 65, 205, 71, 85, 74, 65, 82, 65, + 84, 201, 76, 85, 197, 70, 79, 85, 82, 128, 72, 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, 84, 72, 82, 69, 69, 128, 68, 69, 83, 69, 82, 69, 212, 83, 73, + 78, 72, 65, 76, 193, 71, 85, 82, 77, 85, 75, 72, 201, 77, 65, 82, 203, + 78, 79, 84, 65, 84, 73, 79, 206, 83, 89, 82, 73, 65, 195, 86, 79, 67, 65, + 76, 73, 195, 65, 67, 85, 84, 69, 128, 76, 69, 80, 67, 72, 193, 76, 73, + 71, 72, 212, 76, 79, 78, 199, 84, 85, 82, 75, 73, 195, 68, 79, 85, 66, + 76, 69, 45, 83, 84, 82, 85, 67, 203, 70, 73, 86, 69, 128, 75, 65, 128, + 84, 65, 77, 73, 204, 86, 73, 69, 212, 65, 80, 204, 70, 85, 78, 67, 84, + 73, 79, 78, 65, 204, 72, 65, 77, 90, 193, 83, 73, 88, 128, 84, 69, 76, + 69, 71, 82, 65, 80, 200, 89, 65, 128, 69, 73, 71, 72, 84, 128, 72, 79, + 82, 73, 90, 79, 78, 84, 65, 204, 80, 65, 128, 68, 79, 84, 211, 78, 73, + 78, 69, 128, 83, 69, 86, 69, 78, 128, 66, 65, 82, 194, 68, 65, 83, 73, + 193, 75, 65, 73, 84, 72, 201, 76, 73, 77, 66, 213, 77, 65, 128, 77, 65, + 75, 83, 85, 82, 193, 83, 128, 84, 207, 66, 79, 80, 79, 77, 79, 70, 207, + 75, 72, 65, 82, 79, 83, 72, 84, 72, 201, 76, 65, 207, 82, 65, 128, 83, + 81, 85, 65, 82, 69, 196, 72, 69, 88, 65, 71, 82, 65, 205, 75, 193, 78, + 65, 128, 80, 83, 73, 76, 201, 82, 69, 86, 69, 82, 83, 69, 196, 77, 79, + 78, 79, 83, 80, 65, 67, 197, 78, 79, 212, 83, 65, 77, 65, 82, 73, 84, 65, + 206, 83, 84, 82, 79, 75, 197, 84, 85, 82, 78, 69, 196, 86, 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, 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, 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, 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, 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, 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, 85, 75, 65, 76, 69, 65, 80, 73, 78, 84, 85, 128, 89, 85, 84, 128, 89, 85, 83, 128, 89, 85, 211, 89, 85, 82, 88, 128, 89, 85, 82, 128, 89, - 85, 80, 128, 89, 85, 79, 88, 128, 89, 85, 79, 84, 128, 89, 85, 79, 80, - 128, 89, 85, 79, 128, 89, 85, 68, 72, 128, 89, 85, 68, 200, 89, 85, 65, - 78, 128, 89, 85, 45, 89, 69, 79, 128, 89, 85, 45, 89, 69, 128, 89, 85, - 45, 85, 128, 89, 85, 45, 73, 128, 89, 85, 45, 69, 79, 128, 89, 85, 45, - 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, 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, 80, 128, 89, 79, 79, 128, 89, 79, 77, - 79, 128, 89, 79, 71, 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, 128, - 89, 207, 89, 78, 128, 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, 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, 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, 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, - 85, 128, 89, 69, 79, 45, 79, 128, 89, 69, 206, 89, 69, 76, 76, 79, 87, - 128, 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, 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, 71, 128, 89, 65, 78, 199, 89, 65, 78, 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, 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, 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, 65, 128, 89, 65, 45, 89, 79, 128, 89, - 65, 45, 79, 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, 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, 87, 89, 78, 78, 128, 87, 89, 78, 206, 87, 86, 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, 128, 87, 82, 79, 78, 71, 128, 87, 82, 73, 84, - 73, 78, 199, 87, 82, 69, 65, 84, 200, 87, 82, 65, 80, 128, 87, 79, 88, - 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, 65, 78, 128, 87, 79, 76, - 79, 83, 79, 128, 87, 79, 69, 128, 87, 79, 65, 128, 87, 73, 78, 84, 69, - 82, 128, 87, 73, 78, 74, 65, 128, 87, 73, 78, 69, 128, 87, 73, 78, 68, - 85, 128, 87, 73, 78, 68, 128, 87, 73, 78, 128, 87, 73, 71, 71, 76, 217, - 87, 73, 68, 69, 45, 72, 69, 65, 68, 69, 196, 87, 73, 68, 197, 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, 71, 128, 87, 69, 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, 69, 78, 128, 87, 69, 68, 71, 69, 45, 84, 65, 73, 76, 69, 196, 87, 69, - 65, 80, 79, 78, 128, 87, 66, 128, 87, 65, 88, 128, 87, 65, 87, 128, 87, - 65, 215, 87, 65, 86, 217, 87, 65, 86, 69, 128, 87, 65, 86, 197, 87, 65, - 85, 128, 87, 65, 84, 84, 79, 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, 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, 69, 78, 128, 87, 65, 69, 128, 87, 65, 65, 86, 85, 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, 84, 128, 86, 85, 82, 88, 128, 86, 85, 82, 128, 86, - 85, 80, 128, 86, 85, 76, 71, 65, 210, 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, 76, 85, 77, 197, 86, 79, 76, 84, 65, 71, 197, 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, 204, 86, 79, 128, 86, 73, - 88, 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, 78, 69, 128, 86, 73, 78, 128, 86, 73, 76, 76, 65, 71, 69, - 128, 86, 73, 69, 88, 128, 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, 65, 128, 86, - 73, 67, 84, 79, 82, 217, 86, 73, 128, 86, 69, 88, 128, 86, 69, 87, 128, - 86, 69, 215, 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, 80, 128, - 86, 69, 78, 68, 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, - 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, - 128, 86, 65, 78, 69, 128, 86, 65, 76, 76, 69, 89, 128, 86, 65, 65, 86, - 85, 128, 86, 65, 65, 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, - 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, 50, 128, 85, - 83, 72, 128, 85, 83, 200, 85, 83, 69, 196, 85, 83, 69, 128, 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, 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, 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, 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, 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, 76, 85, 128, 85, 76, 213, 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, 69, 128, 85, 69, - 128, 85, 68, 85, 71, 128, 85, 68, 65, 84, 84, 65, 128, 85, 68, 65, 65, - 84, 128, 85, 68, 128, 85, 196, 85, 67, 128, 85, 66, 85, 70, 73, 76, 73, - 128, 85, 66, 65, 68, 65, 77, 65, 128, 85, 66, 128, 85, 65, 84, 72, 128, - 85, 65, 128, 85, 178, 85, 45, 69, 79, 45, 69, 85, 128, 85, 45, 65, 69, - 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, 76, 73, - 78, 197, 84, 87, 79, 45, 72, 69, 65, 68, 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, - 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, 84, 69, 89, 65, - 83, 65, 84, 128, 84, 85, 84, 128, 84, 85, 82, 88, 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, 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, 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, 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, - 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, 73, 128, 84, - 84, 72, 79, 128, 84, 84, 72, 73, 128, 84, 84, 72, 69, 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, 69, 128, 84, 84, - 65, 89, 65, 78, 78, 65, 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, 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, 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, 69, 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, 75, 85, 84, 65, 83, 84, 201, 84, 82, 79, 69, 90, 69, 78, 73, 65, 206, - 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, 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, 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, - 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, 83, 83, 73, 79, 78, 128, 84, 82, 65, 78, 83, 77, 73, 83, 83, 73, - 79, 206, 84, 82, 65, 68, 197, 84, 82, 65, 67, 75, 128, 84, 82, 128, 84, - 79, 88, 128, 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, 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, 128, 84, 79, 78, 79, 83, 128, 84, 79, 78, 71, 85, 69, 128, 84, 79, - 78, 71, 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, 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, 85, 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, 76, 79, 128, 84, 73, 84, 128, - 84, 73, 82, 79, 78, 73, 65, 206, 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, 78, 69, 128, 84, 73, 78, 65, 71, - 77, 65, 128, 84, 73, 77, 69, 83, 128, 84, 73, 77, 69, 128, 84, 73, 76, - 68, 197, 84, 73, 76, 128, 84, 73, 75, 69, 85, 84, 45, 82, 73, 69, 85, 76, - 128, 84, 73, 75, 69, 85, 84, 45, 75, 73, 89, 69, 79, 75, 128, 84, 73, 75, - 69, 85, 84, 128, 84, 73, 75, 69, 85, 212, 84, 73, 73, 128, 84, 73, 71, - 72, 212, 84, 73, 71, 69, 82, 128, 84, 73, 69, 88, 128, 84, 73, 69, 80, - 128, 84, 73, 197, 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, 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, 128, 84, 72, - 82, 79, 85, 71, 72, 128, 84, 72, 82, 79, 85, 71, 200, 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, 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, 82, 78, 128, 84, 72, 79, 82, 206, 84, 72, 79, - 79, 128, 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, 89, 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, 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, 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, 69, 69, 128, 84, 72, 197, 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, 65, 65, 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, 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, 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, 128, 84, 69, - 78, 211, 84, 69, 78, 128, 84, 69, 206, 84, 69, 77, 80, 85, 211, 84, 69, - 76, 79, 85, 211, 84, 69, 76, 73, 83, 72, 193, 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, 73, 87, 83, 128, 84, 69, 71, 69, 72, 128, 84, 69, 197, 84, - 69, 68, 85, 78, 71, 128, 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, - 45, 85, 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, 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, - 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, - 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, 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, 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, 67, - 75, 128, 84, 65, 67, 203, 84, 65, 66, 85, 76, 65, 84, 73, 79, 78, 128, - 84, 65, 66, 76, 69, 128, 84, 65, 66, 128, 84, 65, 194, 84, 65, 65, 76, - 85, 74, 193, 84, 65, 65, 73, 128, 84, 65, 50, 128, 84, 65, 45, 82, 79, - 76, 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, 82, 88, 128, 83, 89, 82, 77, 65, 84, - 73, 75, 73, 128, 83, 89, 82, 77, 65, 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, - 77, 77, 69, 84, 82, 89, 128, 83, 89, 77, 77, 69, 84, 82, 73, 195, 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, 65, 128, 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, 73, 128, 83, 87, 73, - 128, 83, 87, 71, 128, 83, 87, 69, 69, 84, 128, 83, 87, 65, 83, 200, 83, - 87, 65, 80, 80, 73, 78, 71, 128, 83, 87, 65, 65, 128, 83, 87, 128, 83, - 85, 88, 128, 83, 85, 84, 128, 83, 85, 83, 80, 69, 78, 83, 73, 79, 206, - 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, 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, 128, 83, 85, 79, 88, 128, 83, 85, 79, 80, 128, 83, 85, 79, - 128, 83, 85, 78, 71, 128, 83, 85, 78, 128, 83, 85, 206, 83, 85, 77, 77, + 85, 81, 128, 89, 85, 80, 128, 89, 85, 79, 88, 128, 89, 85, 79, 84, 128, + 89, 85, 79, 80, 128, 89, 85, 79, 128, 89, 85, 68, 72, 128, 89, 85, 68, + 200, 89, 85, 65, 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, 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, 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, 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, 206, 89, + 69, 76, 76, 79, 87, 128, 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, 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, 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, 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, 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, 65, 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, 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, 128, 87, 82, 79, 78, 71, 128, + 87, 82, 73, 84, 73, 78, 199, 87, 82, 69, 65, 84, 200, 87, 82, 65, 80, + 128, 87, 79, 88, 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, 65, + 78, 128, 87, 79, 76, 79, 83, 79, 128, 87, 79, 69, 128, 87, 79, 65, 128, + 87, 73, 84, 72, 79, 85, 212, 87, 73, 78, 84, 69, 82, 128, 87, 73, 78, 74, + 65, 128, 87, 73, 78, 69, 128, 87, 73, 78, 68, 85, 128, 87, 73, 78, 68, + 128, 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, 71, 128, 87, 69, 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, 69, 78, 128, 87, 69, 68, 71, 69, 45, 84, 65, 73, 76, 69, 196, 87, + 69, 65, 80, 79, 78, 128, 87, 66, 128, 87, 65, 89, 128, 87, 65, 217, 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, 69, 128, 87, 65, + 86, 197, 87, 65, 85, 128, 87, 65, 84, 84, 79, 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, 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, 84, 128, 86, 85, 82, 88, 128, 86, + 85, 82, 128, 86, 85, 80, 128, 86, 85, 76, 71, 65, 210, 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, 76, 85, 77, 197, 86, 79, 76, 84, 65, 71, + 197, 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, 204, 86, + 79, 128, 86, 73, 88, 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, 78, 69, 128, 86, 73, 78, 128, 86, 73, 76, + 76, 65, 71, 69, 128, 86, 73, 69, 88, 128, 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, 65, 128, 86, 73, 67, 84, 79, 82, 217, 86, 73, 128, 86, 69, 88, 128, + 86, 69, 87, 128, 86, 69, 215, 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, 80, 128, 86, 69, 78, 68, 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, 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, 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, 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, 50, 128, 85, 83, 72, 128, 85, 83, 200, + 85, 83, 69, 196, 85, 83, 69, 128, 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, 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, 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, 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, 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, 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, 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, 76, 73, 78, 197, 84, 87, 79, 45, 72, 69, 65, 68, 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, 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, + 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, 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, 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, + 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, 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, 73, 128, 84, 84, 72, 87, 69, 128, 84, 84, + 72, 79, 79, 128, 84, 84, 72, 79, 128, 84, 84, 72, 73, 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, 69, 128, 84, 84, 65, 89, 65, 78, 78, 65, + 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, 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, 69, 128, 84, 82, 85, 67, 75, 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, 75, 85, 84, 65, 83, 84, 201, 84, 82, + 79, 69, 90, 69, 78, 73, 65, 206, 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, 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, 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, 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, 83, 83, 73, 79, 78, 128, 84, 82, + 65, 78, 83, 77, 73, 83, 83, 73, 79, 206, 84, 82, 65, 70, 70, 73, 67, 128, + 84, 82, 65, 68, 197, 84, 82, 65, 67, 75, 128, 84, 82, 128, 84, 79, 88, + 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, 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, 128, 84, 79, 78, 79, 83, 128, 84, + 79, 78, 71, 85, 69, 128, 84, 79, 78, 71, 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, 76, 79, 78, 71, + 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, 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, 76, 79, 128, 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, 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, 65, 71, 77, 65, 128, 84, 73, 77, 69, 83, + 128, 84, 73, 77, 69, 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, 73, 128, 84, 73, 71, 72, 212, 84, 73, 71, 69, 82, + 128, 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, 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, 128, + 84, 72, 82, 79, 85, 71, 72, 128, 84, 72, 82, 79, 85, 71, 200, 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, 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, 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, 89, 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, 69, 69, 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, 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, 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, + 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, 71, + 197, 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, 73, 83, 72, 193, 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, 73, 87, 83, 128, 84, 69, 71, 69, 72, + 128, 84, 69, 197, 84, 69, 68, 85, 78, 71, 128, 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, 45, 85, 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, 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, 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, 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, 199, 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, 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, 128, 84, 65, 67, 75, 128, 84, 65, 67, 203, 84, 65, 66, 85, 76, + 65, 84, 73, 79, 78, 128, 84, 65, 66, 76, 69, 128, 84, 65, 66, 128, 84, + 65, 194, 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, 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, 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, 82, 88, 128, 83, 89, 82, 77, 65, + 84, 73, 75, 73, 128, 83, 89, 82, 77, 65, 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, 77, 77, 69, 84, 82, 89, 128, 83, 89, 77, 77, 69, 84, 82, 73, 195, 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, 65, 128, 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, 73, 128, 83, 87, + 73, 128, 83, 87, 71, 128, 83, 87, 69, 69, 84, 128, 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, 82, 88, 128, 83, 85, 82, 82, 79, + 85, 78, 68, 128, 83, 85, 82, 82, 79, 85, 78, 196, 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, 128, 83, 85, 79, 88, 128, + 83, 85, 79, 80, 128, 83, 85, 79, 128, 83, 85, 78, 71, 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, 75, 85, 78, 128, 83, 85, 75, 85, 206, 83, 85, 75, 85, 128, 83, 85, 75, @@ -519,463 +635,529 @@ 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, 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, 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, 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, - 205, 83, 84, 69, 65, 77, 128, 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, 69, 82, 83, 128, 83, 84, 65, 82, 212, 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, 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, 128, - 83, 83, 73, 88, 128, 83, 83, 73, 84, 128, 83, 83, 73, 80, 128, 83, 83, - 73, 69, 88, 128, 83, 83, 73, 69, 80, 128, 83, 83, 73, 69, 128, 83, 83, - 73, 128, 83, 83, 69, 88, 128, 83, 83, 69, 80, 128, 83, 83, 69, 69, 128, - 83, 83, 65, 88, 128, 83, 83, 65, 84, 128, 83, 83, 65, 80, 128, 83, 83, - 65, 78, 71, 84, 73, 75, 69, 85, 84, 128, 83, 83, 65, 78, 71, 83, 73, 79, - 83, 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, 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, 128, 83, 83, 65, 78, 71, 65, 82, 65, 69, 65, - 128, 83, 83, 65, 65, 128, 83, 83, 65, 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, 196, 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, 84, 128, 83, - 80, 79, 79, 78, 128, 83, 80, 76, 73, 84, 84, 73, 78, 199, 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, 68, 69, 82, 217, 83, 80, 73, 67, - 69, 128, 83, 80, 72, 69, 82, 73, 67, 65, 204, 83, 80, 69, 69, 67, 72, - 128, 83, 80, 69, 67, 73, 65, 76, 128, 83, 80, 69, 65, 82, 128, 83, 80, - 65, 84, 72, 73, 128, 83, 80, 65, 82, 75, 76, 69, 128, 83, 80, 65, 68, - 197, 83, 80, 65, 67, 73, 78, 199, 83, 80, 128, 83, 79, 87, 73, 76, 207, - 83, 79, 87, 128, 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, 128, 83, 79, 79, 128, 83, 79, 78, 128, 83, - 79, 76, 73, 68, 85, 83, 128, 83, 79, 76, 73, 68, 85, 211, 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, 212, 83, 79, 198, 83, 79, 67, 73, 69, 84, 89, 128, - 83, 79, 65, 128, 83, 207, 83, 78, 79, 87, 77, 65, 78, 128, 83, 78, 79, - 87, 70, 76, 65, 75, 69, 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, 193, 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, 86, 79, 128, 83, 76, 79, 80, 73, 78, 199, 83, 76, 79, 80, 69, - 128, 83, 76, 73, 78, 71, 128, 83, 76, 73, 67, 69, 128, 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, 204, 83, 75, 76, 73, 82, 79, 206, 83, 75, - 73, 78, 128, 83, 75, 69, 87, 69, 196, 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, 200, 83, 73, 88, - 84, 69, 69, 78, 128, 83, 73, 88, 84, 69, 69, 206, 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, 82, 73, 78, 71, 85, 128, 83, 73, - 79, 83, 45, 84, 73, 75, 69, 85, 84, 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, 73, 69, 85, 80, 128, 83, 73, 79, 83, 45, 80, 72, 73, 69, 85, 80, 72, - 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, 73, 89, 69, 79, 75, 128, 83, - 73, 79, 83, 45, 75, 72, 73, 69, 85, 75, 72, 128, 83, 73, 79, 83, 45, 73, + 83, 84, 82, 73, 80, 69, 128, 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, 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, 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, 205, 83, 84, 69, 65, 77, 128, 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, 69, 82, 83, + 128, 83, 84, 65, 82, 212, 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, 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, 128, 83, 83, 73, 88, 128, 83, 83, 73, 84, 128, 83, + 83, 73, 80, 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, 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, 65, + 128, 83, 83, 65, 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, 84, 128, 83, 80, 79, 79, 78, 128, 83, 80, 76, 73, 84, 84, 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, 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, 67, 72, 128, 83, 80, 69, 67, 73, 65, 76, 128, 83, 80, 69, 65, 82, + 128, 83, 80, 65, 84, 72, 73, 128, 83, 80, 65, 82, 75, 76, 69, 128, 83, + 80, 65, 68, 197, 83, 80, 65, 67, 73, 78, 199, 83, 80, 128, 83, 79, 89, + 128, 83, 79, 87, 73, 76, 207, 83, 79, 87, 128, 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, 79, 128, 83, 79, 78, 71, 128, 83, 79, + 78, 128, 83, 79, 76, 73, 68, 85, 83, 128, 83, 79, 76, 73, 68, 85, 211, + 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, 212, 83, 79, 198, 83, 79, 67, 73, + 69, 84, 89, 128, 83, 79, 67, 67, 69, 210, 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, 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, 193, 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, + 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, 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, 204, 83, 75, 76, 73, 82, 79, 206, 83, 75, 73, + 78, 128, 83, 75, 73, 69, 82, 128, 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, 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, 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, 76, 73, 78, 197, 83, 73, 78, 71, 76, 69, 128, 83, - 73, 78, 71, 76, 197, 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, 128, 83, 73, 76, 75, 128, 83, 73, 76, 73, 81, 85, 193, 83, - 73, 76, 65, 51, 128, 83, 73, 75, 73, 128, 83, 73, 75, 50, 128, 83, 73, - 75, 178, 83, 73, 73, 128, 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, 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, 65, 128, - 83, 72, 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, 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, 70, 70, 76, 197, 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, 79, 88, 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, 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, 80, 128, 83, 72, 79, 79, 84, 128, 83, 72, 79, 79, 128, - 83, 72, 79, 71, 201, 83, 72, 79, 199, 83, 72, 79, 197, 83, 72, 79, 65, - 128, 83, 72, 79, 128, 83, 72, 73, 84, 65, 128, 83, 72, 73, 84, 193, 83, - 72, 73, 82, 128, 83, 72, 73, 210, 83, 72, 73, 80, 128, 83, 72, 73, 78, - 73, 71, 128, 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, 73, 128, - 83, 72, 72, 65, 128, 83, 72, 69, 88, 128, 83, 72, 69, 86, 65, 128, 83, - 72, 69, 84, 128, 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, 88, 128, - 83, 72, 65, 86, 73, 89, 65, 78, 73, 128, 83, 72, 65, 86, 73, 65, 206, 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, 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, 128, 83, 72, 65, 78, 71, 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, 68, 79, 87, 69, 196, 83, - 72, 65, 68, 69, 128, 83, 72, 65, 68, 68, 65, 128, 83, 72, 65, 68, 68, + 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, 128, 83, 73, 76, 75, 128, + 83, 73, 76, 73, 81, 85, 193, 83, 73, 76, 65, 51, 128, 83, 73, 75, 73, + 128, 83, 73, 75, 50, 128, 83, 73, 75, 178, 83, 73, 73, 128, 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, + 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, + 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, 70, 70, 76, 197, 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, 79, 89, 128, 83, 72, 79, 88, 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, + 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, + 80, 128, 83, 72, 79, 79, 84, 128, 83, 72, 79, 79, 128, 83, 72, 79, 71, + 201, 83, 72, 79, 199, 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, 128, 83, 72, 73, 210, 83, 72, + 73, 80, 128, 83, 72, 73, 78, 84, 207, 83, 72, 73, 78, 73, 71, 128, 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, 73, 128, 83, 72, 72, 65, + 128, 83, 72, 69, 88, 128, 83, 72, 69, 86, 65, 128, 83, 72, 69, 85, 88, + 128, 83, 72, 69, 84, 128, 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, 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, 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, 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, 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, 69, 69, 78, 128, 83, 69, 86, 69, 78, 84, 69, 69, 206, - 83, 69, 86, 69, 206, 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, 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, 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, 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, 76, 128, 83, 69, 65, 71, 85, 76, 204, 83, 68, 79, 78, 199, - 83, 67, 87, 65, 128, 83, 67, 82, 85, 80, 76, 69, 128, 83, 67, 82, 73, 80, - 84, 128, 83, 67, 82, 69, 69, 78, 128, 83, 67, 82, 69, 69, 206, 83, 67, - 79, 82, 80, 73, 85, 83, 128, 83, 67, 73, 83, 83, 79, 82, 83, 128, 83, 67, - 72, 87, 65, 128, 83, 67, 72, 87, 193, 83, 67, 72, 79, 76, 65, 82, 128, - 83, 67, 72, 69, 77, 193, 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, 73, 77, 65, 84, - 65, 128, 83, 65, 87, 128, 83, 65, 85, 73, 76, 128, 83, 65, 84, 85, 82, - 78, 128, 83, 65, 83, 65, 75, 128, 83, 65, 82, 73, 128, 83, 65, 82, 193, - 83, 65, 82, 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, 65, 72, - 128, 83, 65, 78, 128, 83, 65, 77, 89, 79, 203, 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, 65, 82, 73, 84, 65, - 206, 83, 65, 76, 84, 73, 82, 69, 128, 83, 65, 76, 84, 73, 76, 76, 79, - 128, 83, 65, 76, 84, 128, 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, 128, 83, 65, 74, 68, 65, 72, 128, 83, 65, 73, 76, 128, 83, 65, 73, - 75, 85, 82, 85, 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, 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, 89, - 65, 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, 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, 128, 82, 85, 77, 65, 201, 82, 85, 77, 128, 82, 85, 205, 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, 194, 82, 85, 65, - 128, 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, 89, 128, 82, 82, 85, 88, 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, 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, 128, 82, 82, 65, 88, 128, 82, - 82, 65, 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, 79, - 84, 128, 82, 79, 79, 75, 128, 82, 79, 79, 70, 128, 82, 79, 79, 128, 82, - 79, 77, 65, 206, 82, 79, 196, 82, 79, 67, 128, 82, 79, 66, 65, 84, 128, - 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, 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, 70, 79, 82, 90, 65, 78, 68, 79, 128, 82, 73, - 206, 82, 73, 75, 82, 73, 75, 128, 82, 73, 73, 128, 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, 196, 82, 73, - 71, 72, 84, 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, 83, 73, 79, 83, 128, 82, 73, 69, 85, 76, 45, - 83, 73, 79, 83, 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, 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, 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, 128, 82, 73, 69, 85, 76, 45, 75, 72, 73, - 69, 85, 75, 72, 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, 204, 82, 73, 69, 76, 128, 82, 73, 67, 69, 77, 128, - 82, 73, 67, 69, 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, 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, 197, 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, 83, 85, 80, 73, 78, 85, 83, - 128, 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, 72, 128, 82, 69, 83, 200, 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, 69, 65, 84, 69, 196, 82, 69, 80, 69, - 65, 84, 128, 82, 69, 80, 69, 65, 212, 82, 69, 80, 65, 128, 82, 69, 80, - 193, 82, 69, 78, 84, 79, 71, 69, 78, 128, 82, 69, 77, 85, 128, 82, 69, - 76, 73, 71, 73, 79, 78, 128, 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, - 73, 83, 84, 69, 82, 69, 196, 82, 69, 70, 69, 82, 69, 78, 67, 197, 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, 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, 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, 89, 128, 82, 65, 84, 73, 79, 128, 82, 65, - 84, 128, 82, 65, 83, 79, 85, 204, 82, 65, 83, 72, 65, 128, 82, 65, 80, - 73, 83, 77, 65, 128, 82, 65, 78, 71, 197, 82, 65, 78, 128, 82, 65, 77, - 211, 82, 65, 77, 66, 65, 84, 128, 82, 65, 77, 128, 82, 65, 75, 72, 65, - 78, 71, 128, 82, 65, 73, 83, 69, 196, 82, 65, 73, 78, 128, 82, 65, 73, - 206, 82, 65, 73, 68, 207, 82, 65, 73, 68, 65, 128, 82, 65, 72, 77, 65, - 84, 85, 76, 76, 65, 200, 82, 65, 70, 69, 128, 82, 65, 69, 128, 82, 65, - 68, 73, 79, 65, 67, 84, 73, 86, 197, 82, 65, 68, 201, 82, 65, 68, 128, - 82, 65, 196, 82, 65, 66, 128, 82, 65, 65, 73, 128, 82, 65, 65, 128, 82, - 65, 51, 128, 82, 65, 50, 128, 82, 45, 67, 82, 69, 197, 81, 89, 88, 128, + 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, 206, 83, 69, 85, 88, + 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, 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, 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, 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, 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, + 73, 80, 84, 128, 83, 67, 82, 69, 69, 78, 128, 83, 67, 82, 69, 69, 206, + 83, 67, 79, 82, 80, 73, 85, 83, 128, 83, 67, 73, 83, 83, 79, 82, 83, 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, 76, 65, 82, + 128, 83, 67, 72, 69, 77, 193, 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, 73, 77, 65, + 84, 65, 128, 83, 65, 87, 65, 78, 128, 83, 65, 87, 128, 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, 83, 65, 75, 128, 83, + 65, 82, 73, 128, 83, 65, 82, 193, 83, 65, 82, 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, 65, 72, 128, 83, 65, 78, 128, 83, 65, 77, 89, 79, + 203, 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, 128, 83, 65, 76, 84, 73, 82, 69, + 128, 83, 65, 76, 84, 73, 76, 76, 79, 128, 83, 65, 76, 84, 128, 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, 128, 83, 65, 75, 79, 84, 128, 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, 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, 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, 89, 65, 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, 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, 128, 82, 85, 77, 201, 82, 85, 77, 65, 201, 82, 85, + 77, 128, 82, 85, 205, 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, 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, 89, 128, 82, 82, 85, 88, 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, 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, 128, 82, 82, 65, 88, 128, 82, 82, 65, + 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, 79, 84, + 128, 82, 79, 79, 75, 128, 82, 79, 79, 70, 128, 82, 79, 79, 128, 82, 79, + 77, 65, 206, 82, 79, 196, 82, 79, 67, 128, 82, 79, 66, 65, 84, 128, 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, 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, 75, 82, 73, 75, 128, 82, 73, 73, 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, 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, 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, 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, 197, 82, 69, 85, 88, 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, 83, 85, 80, 73, 78, 85, + 83, 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, 69, 65, 84, 69, 196, 82, 69, 80, 69, 65, 84, + 128, 82, 69, 80, 69, 65, 212, 82, 69, 80, 65, 128, 82, 69, 80, 193, 82, + 69, 78, 84, 79, 71, 69, 78, 128, 82, 69, 78, 128, 82, 69, 77, 85, 128, + 82, 69, 76, 73, 71, 73, 79, 78, 128, 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, 73, 83, 84, 69, 82, 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, 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, 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, 89, 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, 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, 77, 128, 82, 65, 75, 72, 65, 78, 71, 128, 82, 65, 73, 83, 69, + 196, 82, 65, 73, 78, 128, 82, 65, 73, 206, 82, 65, 73, 68, 207, 82, 65, + 73, 68, 65, 128, 82, 65, 73, 128, 82, 65, 72, 77, 65, 84, 85, 76, 76, 65, + 200, 82, 65, 70, 69, 128, 82, 65, 69, 128, 82, 65, 68, 73, 79, 65, 67, + 84, 73, 86, 197, 82, 65, 68, 201, 82, 65, 68, 128, 82, 65, 196, 82, 65, + 66, 128, 82, 65, 65, 73, 128, 82, 65, 65, 128, 82, 65, 51, 128, 82, 65, + 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, @@ -987,37 +1169,42 @@ 85, 79, 84, 128, 81, 85, 79, 80, 128, 81, 85, 79, 128, 81, 85, 75, 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, 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, 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, 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, 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, - 73, 88, 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, 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, 65, 65, 128, 209, 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, 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, 84, 128, 80, 85, 83, 72, 73, 78, 199, 80, 85, 82, 88, 128, - 80, 85, 82, 73, 84, 89, 128, 80, 85, 82, 128, 80, 85, 80, 128, 80, 85, - 79, 88, 128, 80, 85, 79, 80, 128, 80, 85, 79, 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, 50, 128, 80, 85, 128, 80, 84, 72, 65, 72, + 128, 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, 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, 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, 209, 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, 84, 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, 73, 84, 89, 128, 80, 85, 82, 128, 80, 85, 80, + 128, 80, 85, 79, 88, 128, 80, 85, 79, 80, 128, 80, 85, 79, 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, 69, 128, + 80, 85, 65, 69, 128, 80, 85, 50, 128, 80, 85, 128, 80, 84, 72, 65, 72, 193, 80, 84, 69, 128, 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, @@ -1031,247 +1218,318 @@ 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, 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, 78, 84, 128, 80, 82, 73, 78, 212, 80, - 82, 73, 77, 69, 128, 80, 82, 73, 77, 197, 80, 82, 69, 86, 73, 79, 85, - 211, 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, 70, 65, 67, 197, 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, 77, 128, 80, 80, 65, 128, 80, 79, 88, 128, 80, 79, 87, - 69, 82, 211, 80, 79, 87, 69, 82, 128, 80, 79, 85, 78, 196, 80, 79, 83, - 84, 80, 79, 83, 73, 84, 73, 79, 206, 80, 79, 83, 84, 65, 204, 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, 128, 80, 79, 208, 80, - 79, 79, 128, 80, 79, 78, 68, 79, 128, 80, 79, 76, 201, 80, 79, 76, 69, - 128, 80, 79, 75, 82, 89, 84, 73, 69, 128, 80, 79, 75, 79, 74, 73, 128, - 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, 77, 69, 196, 80, 76, 85, 77, 128, - 80, 76, 85, 75, 128, 80, 76, 79, 87, 128, 80, 76, 79, 80, 72, 85, 128, - 80, 76, 69, 84, 72, 82, 79, 78, 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, 197, - 80, 76, 65, 128, 80, 73, 90, 90, 73, 67, 65, 84, 79, 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, 67, 69, 83, - 128, 80, 73, 82, 73, 71, 128, 80, 73, 82, 73, 199, 80, 73, 80, 73, 78, - 71, 128, 80, 73, 80, 128, 80, 73, 78, 87, 72, 69, 69, 204, 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, 69, 88, 128, 80, 73, 69, 85, 80, 45, 84, 73, 75, 69, - 85, 84, 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, 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, 128, 80, 73, 69, 85, 80, 45, 80, 72, 73, 69, 85, - 80, 72, 128, 80, 73, 69, 85, 80, 45, 78, 73, 69, 85, 78, 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, 80, 128, 80, 73, - 69, 67, 69, 128, 80, 73, 69, 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, 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, 73, 80, 80, 73, 78, 197, 80, 72, 73, 69, 85, 80, 72, - 45, 80, 73, 69, 85, 80, 128, 80, 72, 73, 69, 85, 80, 200, 80, 72, 73, + 86, 65, 84, 69, 128, 80, 82, 73, 83, 72, 84, 72, 65, 77, 65, 84, 82, 193, + 80, 82, 73, 78, 84, 128, 80, 82, 73, 78, 212, 80, 82, 73, 77, 69, 128, + 80, 82, 73, 77, 197, 80, 82, 69, 86, 73, 79, 85, 211, 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, 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, 85, 78, 196, 80, 79, 83, 84, 80, 79, 83, 73, 84, 73, 79, + 206, 80, 79, 83, 84, 65, 204, 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, 128, 80, 79, 208, 80, 79, 79, 128, 80, 79, 78, 68, + 79, 128, 80, 79, 76, 201, 80, 79, 76, 69, 128, 80, 79, 75, 82, 89, 84, + 73, 69, 128, 80, 79, 75, 79, 74, 73, 128, 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, 77, 69, 196, 80, 76, 85, 77, 128, 80, 76, 85, 75, 128, 80, 76, + 79, 87, 128, 80, 76, 79, 80, 72, 85, 128, 80, 76, 69, 84, 72, 82, 79, 78, + 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, 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, + 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, 80, 73, 78, 71, 128, 80, 73, 80, 128, + 80, 73, 78, 87, 72, 69, 69, 204, 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, 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, 80, 128, 80, 73, 69, 67, 69, 128, 80, + 73, 69, 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, 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, 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, 82, 89, 78, 71, 69, 65, 204, 80, 72, 65, 82, 128, 80, 72, 65, 78, 128, 80, - 72, 65, 73, 83, 84, 79, 211, 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, 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, + 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, 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, 128, 80, 69, - 82, 83, 73, 65, 206, 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, - 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, 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, 78, 84, 65, 83, 69, 77, 69, 128, 80, 69, 78, 84, 65, 71, 79, - 78, 128, 80, 69, 78, 83, 85, 128, 80, 69, 78, 78, 217, 80, 69, 78, 73, - 72, 73, 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, 80, 128, 80, 69, 69, 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, 69, 128, 80, 69, 65, 67, 197, - 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, 88, 128, 80, 65, - 87, 78, 128, 80, 65, 215, 80, 65, 86, 73, 89, 65, 78, 73, 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, 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, 69, 81, 128, 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, 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, 210, 80, 65, 80, 128, 80, 65, 208, 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, 75, 82, 65, 128, 80, 65, 78, 84, 73, 128, 80, 65, 78, 79, - 76, 79, 78, 71, 128, 80, 65, 78, 71, 87, 73, 83, 65, 68, 128, 80, 65, 78, - 71, 76, 65, 89, 65, 82, 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, 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, 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, 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, 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, 68, 77, 193, 80, 65, 68, 128, 80, 65, 67, 75, - 73, 78, 71, 128, 80, 65, 65, 84, 85, 128, 80, 65, 65, 83, 69, 78, 84, 79, - 128, 80, 65, 65, 73, 128, 80, 65, 65, 45, 80, 73, 76, 76, 65, 128, 80, - 65, 65, 128, 80, 50, 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, 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, 128, 79, 85, 84, 76, 73, - 78, 69, 196, 79, 85, 84, 76, 73, 78, 69, 128, 79, 85, 84, 69, 210, 79, - 85, 78, 75, 73, 193, 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, 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, - 73, 71, 73, 78, 65, 204, 79, 82, 73, 71, 73, 78, 128, 79, 82, 68, 73, 78, - 65, 204, 79, 82, 67, 72, 73, 68, 128, 79, 80, 84, 73, 79, 206, 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, 69, 82, 65, 84, 79, 82, 128, 79, 80, 69, 82, 65, 84, 79, 210, 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, 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, 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, - 76, 73, 78, 197, 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, 77, 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, 69, 79, 78, 128, 79, - 73, 76, 128, 79, 72, 77, 128, 79, 72, 205, 79, 72, 128, 79, 71, 79, 78, - 69, 75, 128, 79, 71, 79, 78, 69, 203, 79, 71, 72, 65, 205, 79, 68, 196, - 79, 67, 84, 79, 66, 69, 82, 128, 79, 67, 210, 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, 45, 89, 69, 128, 79, 45, 69, 79, 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, 80, 128, 78, - 90, 85, 79, 88, 128, 78, 90, 85, 79, 128, 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, - 128, 78, 90, 65, 88, 128, 78, 90, 65, 84, 128, 78, 90, 65, 80, 128, 78, - 90, 65, 128, 78, 89, 87, 65, 128, 78, 89, 85, 88, 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, 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, 211, 78, 89, 73, 80, 128, 78, 89, 73, 78, 45, - 68, 79, 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, 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, 65, 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, 84, 73, 76, 76, - 85, 128, 78, 85, 84, 128, 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, 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, 66, 69, 82, - 128, 78, 85, 77, 128, 78, 85, 76, 76, 128, 78, 85, 76, 204, 78, 85, 75, - 84, 65, 128, 78, 85, 69, 128, 78, 85, 66, 73, 65, 206, 78, 85, 49, 49, - 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, 88, 128, 78, 79, - 87, 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, 128, 78, 79, 84, 197, 78, 79, 84, - 67, 72, 69, 196, 78, 79, 84, 67, 72, 128, 78, 79, 84, 128, 78, 79, 83, - 69, 128, 78, 79, 82, 84, 72, 87, 69, 83, 212, 78, 79, 82, 84, 200, 78, - 79, 82, 77, 65, 204, 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, 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, 79, 128, 78, 78, 78, 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, 77, 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, 80, 128, 78, - 74, 85, 79, 88, 128, 78, 74, 85, 79, 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, 128, 78, 74, 73, 128, 78, 74, 69, 69, 128, - 78, 74, 69, 128, 78, 74, 128, 78, 73, 88, 128, 78, 73, 83, 65, 71, 128, - 78, 73, 82, 85, 71, 85, 128, 78, 73, 80, 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, 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, 73, - 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, 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, 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, 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, 65, 128, 78, 72, 128, 78, 71, 85, 79, 88, 128, 78, 71, 85, - 79, 84, 128, 78, 71, 85, 79, 128, 78, 71, 79, 88, 128, 78, 71, 79, 84, - 128, 78, 71, 79, 80, 128, 78, 71, 79, 78, 128, 78, 71, 79, 69, 72, 128, - 78, 71, 79, 69, 200, 78, 71, 207, 78, 71, 75, 65, 128, 78, 71, 73, 69, - 88, 128, 78, 71, 73, 69, 80, 128, 78, 71, 73, 69, 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, 78, 128, 78, 71, 71, 69, 69, 128, 78, 71, 71, 69, 128, - 78, 71, 71, 65, 128, 78, 71, 71, 128, 78, 71, 69, 88, 128, 78, 71, 69, - 80, 128, 78, 71, 69, 78, 128, 78, 71, 69, 65, 68, 65, 76, 128, 78, 71, - 69, 128, 78, 71, 65, 88, 128, 78, 71, 65, 84, 128, 78, 71, 65, 211, 78, - 71, 65, 80, 128, 78, 71, 65, 78, 128, 78, 71, 65, 73, 128, 78, 71, 65, - 65, 73, 128, 78, 71, 193, 78, 70, 128, 78, 69, 88, 212, 78, 69, 88, 128, - 78, 69, 87, 76, 73, 78, 69, 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, + 82, 83, 79, 206, 80, 69, 82, 83, 73, 65, 206, 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, 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, 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, 78, 84, 65, 83, 69, 77, 69, 128, 80, 69, + 78, 84, 65, 71, 79, 78, 128, 80, 69, 78, 83, 85, 128, 80, 69, 78, 78, + 217, 80, 69, 78, 73, 72, 73, 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, 80, 128, + 80, 69, 69, 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, 69, 128, 80, 69, 65, 67, 197, 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, 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, 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, 69, 81, 128, 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, 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, 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, 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, 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, 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, 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, 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, 72, 76, 65, 86, 201, 80, 65, 68, 77, 193, 80, 65, + 68, 193, 80, 65, 68, 128, 80, 65, 67, 75, 73, 78, 71, 128, 80, 65, 65, + 84, 85, 128, 80, 65, 65, 83, 69, 78, 84, 79, 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, 78, 75, 73, 193, 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, 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, 68, 73, 78, 65, 204, 79, 82, 67, 72, 73, 68, + 128, 79, 80, 84, 73, 79, 206, 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, 69, 82, 65, 84, 79, 82, + 128, 79, 80, 69, 82, 65, 84, 79, 210, 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, 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, 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, + 76, 73, 78, 197, 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, 77, + 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, 72, 128, 79, 71, 79, 78, 69, 75, 128, 79, 71, + 79, 78, 69, 203, 79, 71, 72, 65, 205, 79, 69, 75, 128, 79, 68, 196, 79, + 67, 84, 79, 66, 69, 82, 128, 79, 67, 210, 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, 80, + 128, 78, 90, 85, 79, 88, 128, 78, 90, 85, 79, 128, 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, 128, 78, 90, 65, 88, 128, 78, 90, 65, 84, 128, 78, 90, 65, 80, + 128, 78, 90, 65, 128, 78, 89, 87, 65, 128, 78, 89, 85, 88, 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, 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, 211, 78, 89, 73, 80, 128, 78, 89, 73, + 78, 45, 68, 79, 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, 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, + 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, 84, + 73, 76, 76, 85, 128, 78, 85, 84, 128, 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, 128, + 78, 85, 77, 128, 78, 85, 76, 76, 128, 78, 85, 76, 204, 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, 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, 69, 69, 128, 78, 83, 72, 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, 128, 78, 79, 84, 197, 78, 79, 84, 67, 72, 69, 196, + 78, 79, 84, 67, 72, 128, 78, 79, 84, 128, 78, 79, 83, 69, 128, 78, 79, + 82, 84, 72, 87, 69, 83, 212, 78, 79, 82, 84, 200, 78, 79, 82, 77, 65, + 204, 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, 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, 79, 128, + 78, 78, 78, 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, 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, 75, 207, 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, 80, 128, 78, 74, 85, 79, 88, 128, + 78, 74, 85, 79, 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, 128, 78, 74, 73, 128, 78, 74, 69, 69, + 128, 78, 74, 69, 128, 78, 74, 65, 69, 77, 76, 73, 128, 78, 74, 65, 69, + 77, 128, 78, 74, 128, 78, 73, 88, 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, 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, 73, 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, 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, 65, 128, 78, 72, 128, 78, 71, 89, 69, 128, 78, + 71, 86, 69, 128, 78, 71, 85, 79, 88, 128, 78, 71, 85, 79, 84, 128, 78, + 71, 85, 79, 128, 78, 71, 79, 88, 128, 78, 71, 79, 85, 128, 78, 71, 79, + 213, 78, 71, 79, 84, 128, 78, 71, 79, 80, 128, 78, 71, 79, 78, 128, 78, + 71, 79, 69, 72, 128, 78, 71, 79, 69, 200, 78, 71, 207, 78, 71, 75, 87, + 65, 69, 78, 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, 71, 85, 128, 78, 71, 71, + 79, 79, 128, 78, 71, 71, 79, 128, 78, 71, 71, 73, 128, 78, 71, 71, 69, + 78, 128, 78, 71, 71, 69, 69, 128, 78, 71, 71, 69, 128, 78, 71, 71, 128, + 78, 71, 69, 88, 128, 78, 71, 69, 80, 128, 78, 71, 69, 78, 128, 78, 71, + 69, 65, 68, 65, 76, 128, 78, 71, 69, 128, 78, 71, 65, 88, 128, 78, 71, + 65, 84, 128, 78, 71, 65, 211, 78, 71, 65, 80, 128, 78, 71, 65, 78, 128, + 78, 71, 65, 73, 128, 78, 71, 65, 65, 73, 128, 78, 71, 193, 78, 70, 128, + 78, 69, 88, 212, 78, 69, 88, 128, 78, 69, 87, 76, 73, 78, 69, 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, 73, 84, 72, 69, 210, 78, 69, 71, 65, 84, 73, 86, 197, 78, 69, 71, 65, 84, 73, 79, @@ -1283,1367 +1541,1488 @@ 78, 68, 73, 80, 128, 78, 68, 73, 69, 88, 128, 78, 68, 73, 69, 128, 78, 68, 73, 128, 78, 68, 69, 88, 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, 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, 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, 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, 206, 78, 65, 82, 82, 79, 215, 78, 65, 82, 128, 78, 65, 80, 128, 78, - 65, 79, 211, 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, 73, 82, 193, 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, 66, 76, 65, 128, 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, 65, 128, 78, 65, 193, 78, 65, 50, 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, 128, 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, 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, 84, 128, 77, 85, 83, 73, 67, 128, 77, 85, 83, - 73, 195, 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, 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, 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, 128, 77, 85, 199, 77, 85, 69, 128, - 77, 85, 67, 200, 77, 85, 67, 65, 65, 68, 128, 77, 85, 65, 78, 128, 77, - 85, 45, 71, 65, 65, 72, 76, 65, 193, 77, 213, 77, 83, 128, 77, 80, 65, - 128, 77, 79, 88, 128, 77, 79, 86, 69, 196, 77, 79, 85, 84, 72, 128, 77, - 79, 85, 84, 200, 77, 79, 85, 78, 84, 65, 73, 78, 128, 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, 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, 128, 77, 79, 78, 84, 72, 128, 77, 79, 78, 84, 200, 77, 79, 78, - 79, 83, 84, 65, 66, 76, 197, 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, 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, 65, 128, 77, 207, 77, 78, 89, - 65, 205, 77, 78, 65, 83, 128, 77, 77, 128, 77, 205, 77, 76, 65, 128, 77, - 76, 128, 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, 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, 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, 83, 83, 65, 78, 71, 83, 73, 79, 83, 128, 77, 73, - 69, 85, 77, 45, 82, 73, 69, 85, 76, 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, 72, 73, 69, 85, 72, 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, 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, 196, 77, - 73, 67, 82, 207, 77, 73, 128, 77, 201, 77, 72, 90, 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, 128, 77, 71, 66, 73, 128, 77, 71, 66, 69, 69, - 128, 77, 71, 66, 69, 128, 77, 71, 66, 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, - 69, 90, 90, 79, 128, 77, 69, 88, 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, 71, 128, 77, 69, 84, 65, 76, - 128, 77, 69, 84, 193, 77, 69, 83, 83, 69, 78, 73, 65, 206, 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, 128, 77, 69, 82, 67, - 85, 82, 89, 128, 77, 69, 78, 128, 77, 69, 206, 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, 128, 77, 69, 205, 77, 69, 76, 79, 78, 128, 77, 69, 73, - 90, 73, 128, 77, 69, 71, 65, 84, 79, 78, 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, 128, 77, 69, 68, 73, 85, + 65, 80, 128, 78, 68, 65, 65, 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, 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, 206, 78, 65, 82, 82, 79, + 215, 78, 65, 82, 128, 78, 65, 79, 211, 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, 73, + 82, 193, 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, 66, 76, 65, + 128, 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, 65, 128, 78, 65, + 193, 78, 65, 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, 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, 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, 84, 128, 77, + 85, 83, 73, 67, 128, 77, 85, 83, 73, 195, 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, 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, 128, 77, 85, 199, 77, 85, 69, + 128, 77, 85, 67, 200, 77, 85, 67, 65, 65, 68, 128, 77, 85, 65, 78, 128, + 77, 85, 45, 71, 65, 65, 72, 76, 65, 193, 77, 213, 77, 83, 128, 77, 80, + 65, 128, 77, 79, 88, 128, 77, 79, 86, 69, 196, 77, 79, 85, 84, 72, 128, + 77, 79, 85, 84, 200, 77, 79, 85, 78, 84, 65, 73, 78, 128, 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, 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, 128, 77, 79, 78, 84, 72, 128, 77, 79, 78, 84, 200, 77, 79, + 78, 79, 83, 84, 65, 66, 76, 197, 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, 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, 65, 128, 77, 207, 77, 78, + 89, 65, 205, 77, 78, 65, 83, 128, 77, 77, 128, 77, 205, 77, 76, 65, 128, + 77, 76, 128, 77, 73, 88, 128, 77, 73, 84, 128, 77, 73, 212, 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, + 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, + 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, 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, 196, 77, 73, 67, 82, 207, 77, 73, 128, 77, 72, 90, + 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, 128, 77, 71, 66, 73, 128, + 77, 71, 66, 69, 69, 128, 77, 71, 66, 69, 128, 77, 71, 66, 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, 69, 90, 90, 79, 128, 77, 69, 88, 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, 71, + 128, 77, 69, 84, 65, 76, 128, 77, 69, 84, 193, 77, 69, 83, 83, 69, 78, + 73, 65, 206, 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, 128, 77, 69, 82, 71, 69, 128, 77, 69, 82, 67, 85, 82, 89, 128, 77, + 69, 78, 68, 85, 84, 128, 77, 69, 78, 128, 77, 69, 206, 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, 78, 128, 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, 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, 69, 69, 128, 77, 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, 65, 84, 128, 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, 67, 72, 213, 77, 66, 85, 128, 77, 66, 79, 79, 128, 77, 66, 79, 128, 77, 66, 73, - 128, 77, 66, 69, 69, 128, 77, 66, 69, 128, 77, 66, 65, 128, 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, 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, 79, 82, 193, 77, - 65, 83, 72, 50, 128, 77, 65, 83, 67, 85, 76, 73, 78, 197, 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, 66, 85, 84, 65, - 128, 77, 65, 82, 66, 85, 84, 193, 77, 65, 82, 128, 77, 65, 81, 65, 70, - 128, 77, 65, 80, 73, 81, 128, 77, 65, 78, 83, 89, 79, 78, 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, 67, 72, 213, 77, 65, 78, 65, 67, 76, 69, 83, 128, 77, - 65, 76, 84, 69, 83, 197, 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, 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, 75, 85, 82, 79, 128, 77, 65, 73, 68, 69, 78, 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, 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, 65, - 73, 128, 77, 65, 65, 128, 77, 65, 50, 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, 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, 65, 84, 197, 76, 85, 205, 76, 85, 76, 128, 76, 85, 73, 83, - 128, 76, 85, 72, 128, 76, 85, 71, 65, 76, 128, 76, 85, 71, 65, 204, 76, - 85, 51, 128, 76, 85, 50, 128, 76, 85, 178, 76, 79, 90, 69, 78, 71, 69, - 128, 76, 79, 90, 69, 78, 71, 197, 76, 79, 88, 128, 76, 79, 87, 45, 185, - 76, 79, 85, 82, 69, 128, 76, 79, 84, 85, 83, 128, 76, 79, 84, 128, 76, - 79, 82, 82, 65, 73, 78, 69, 128, 76, 79, 80, 128, 76, 79, 79, 84, 128, - 76, 79, 79, 80, 128, 76, 79, 79, 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, 76, 76, 128, 76, 79, 71, 210, 76, 79, - 71, 79, 84, 89, 80, 197, 76, 79, 71, 128, 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, - 77, 128, 76, 76, 76, 65, 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, 84, - 84, 76, 197, 76, 73, 84, 82, 193, 76, 73, 84, 128, 76, 73, 83, 72, 128, - 76, 73, 82, 193, 76, 73, 81, 85, 73, 196, 76, 73, 80, 128, 76, 73, 78, - 75, 73, 78, 199, 76, 73, 78, 203, 76, 73, 78, 69, 83, 128, 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, 76, 89, 128, 76, 73, 76, 73, 84, 72, 128, - 76, 73, 76, 128, 76, 73, 73, 128, 76, 73, 71, 72, 84, 78, 73, 78, 71, - 128, 76, 73, 71, 72, 84, 128, 76, 73, 70, 69, 128, 76, 73, 69, 88, 128, - 76, 73, 69, 84, 128, 76, 73, 69, 80, 128, 76, 73, 69, 128, 76, 73, 68, - 128, 76, 73, 66, 82, 65, 128, 76, 73, 65, 66, 73, 76, 73, 84, 217, 76, - 72, 79, 79, 128, 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, 84, 84, 69, 82, 128, - 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, 128, 76, 69, - 78, 84, 73, 67, 85, 76, 65, 210, 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, 73, 128, 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, 69, 70, 84, 45, 72, 65, 78, 196, 76, 69, 70, - 84, 128, 76, 69, 69, 75, 128, 76, 69, 65, 84, 72, 69, 82, 128, 76, 69, - 65, 70, 128, 76, 69, 65, 68, 69, 82, 128, 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, 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, 84, 128, 76, - 65, 83, 212, 76, 65, 82, 89, 78, 71, 69, 65, 204, 76, 65, 82, 71, 69, - 210, 76, 65, 82, 71, 197, 76, 65, 80, 128, 76, 65, 78, 71, 85, 65, 71, - 197, 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, 72, 83, 72, 85, 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, 69, 86, 128, 76, 65, 69, 128, 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, 65, 78, 128, 76, 65, 65, 77, 85, 128, 76, 65, 65, 73, 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, 69, 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, 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, 80, 128, 75, 85, 79, 88, 128, 75, - 85, 79, 80, 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, 55, - 128, 75, 85, 52, 128, 75, 85, 180, 75, 85, 51, 128, 75, 85, 179, 75, 84, - 128, 75, 83, 83, 65, 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, 79, 128, 75, 80, 79, 128, 75, 80, 73, 128, 75, 80, 69, - 78, 128, 75, 80, 69, 69, 128, 75, 80, 69, 128, 75, 80, 65, 78, 128, 75, - 80, 65, 128, 75, 79, 88, 128, 75, 79, 84, 79, 128, 75, 79, 84, 128, 75, + 128, 77, 66, 69, 78, 128, 77, 66, 69, 69, 128, 77, 66, 69, 128, 77, 66, + 65, 65, 128, 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, 65, 128, 77, 65, 88, 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, 79, 82, 193, 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, 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, 66, 85, + 84, 65, 128, 77, 65, 82, 66, 85, 84, 193, 77, 65, 82, 128, 77, 65, 81, + 65, 70, 128, 77, 65, 80, 73, 81, 128, 77, 65, 208, 77, 65, 78, 83, 89, + 79, 78, 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, 67, 72, 213, 77, 65, 78, 65, 67, + 76, 69, 83, 128, 77, 65, 76, 84, 69, 83, 197, 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, 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, 75, 85, 82, 79, 128, 77, 65, + 73, 68, 69, 78, 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, 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, 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, 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, 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, 65, 76, 128, 76, 85, 71, + 65, 204, 76, 85, 69, 128, 76, 85, 51, 128, 76, 85, 50, 128, 76, 85, 178, + 76, 79, 90, 69, 78, 71, 69, 128, 76, 79, 90, 69, 78, 71, 197, 76, 79, 88, + 128, 76, 79, 87, 69, 210, 76, 79, 87, 45, 185, 76, 79, 85, 82, 69, 128, + 76, 79, 84, 85, 83, 128, 76, 79, 84, 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, 128, 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, 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, 67, 65, 84, 73, 86, 69, 128, 76, 79, 67, 65, 84, + 73, 79, 206, 76, 79, 65, 128, 76, 78, 128, 76, 77, 128, 76, 76, 76, 65, + 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, 82, 193, 76, 73, 84, 128, 76, 73, 83, 213, 76, 73, + 83, 72, 128, 76, 73, 82, 193, 76, 73, 81, 85, 73, 196, 76, 73, 80, 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, 76, 89, 128, 76, 73, 76, 73, 84, 72, 128, 76, 73, 76, + 128, 76, 73, 73, 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, 128, 76, 73, 69, 84, 128, 76, 73, 69, 80, 128, + 76, 73, 69, 128, 76, 73, 68, 128, 76, 73, 66, 82, 65, 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, 84, 84, 69, + 82, 128, 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, + 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, 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, 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, 75, 128, 76, 69, 69, 69, 69, 128, 76, 69, 65, 84, 72, 69, 82, 128, + 76, 69, 65, 70, 128, 76, 69, 65, 68, 69, 82, 128, 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, 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, + 84, 128, 76, 65, 83, 212, 76, 65, 82, 89, 78, 71, 69, 65, 204, 76, 65, + 82, 71, 69, 210, 76, 65, 82, 71, 197, 76, 65, 80, 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, + 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, 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, 65, 84, 128, 76, 65, 65, + 78, 128, 76, 65, 65, 77, 85, 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, 69, 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, 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, 80, 128, 75, 85, 79, 88, 128, 75, 85, 79, 80, + 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, 55, 128, 75, 85, + 52, 128, 75, 85, 180, 75, 85, 51, 128, 75, 85, 179, 75, 84, 128, 75, 83, + 83, 65, 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, 79, 128, 75, 80, 79, 128, 75, 80, 73, 128, 75, 80, 69, 78, 128, + 75, 80, 69, 69, 128, 75, 80, 69, 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, 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, 72, 128, 75, 79, 69, 84, - 128, 75, 79, 65, 128, 75, 78, 73, 71, 72, 84, 128, 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, 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, 203, 75, 73, 88, 128, 75, 73, 84, 128, 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, 80, 128, 75, 73, - 208, 75, 73, 78, 83, 72, 73, 80, 128, 75, 73, 73, 128, 75, 73, 72, 128, - 75, 73, 69, 88, 128, 75, 73, 69, 80, 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, 65, 84, 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, 73, - 69, 85, 75, 200, 75, 72, 73, 128, 75, 72, 72, 65, 128, 75, 72, 69, 73, - 128, 75, 72, 69, 69, 128, 75, 72, 69, 128, 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, 75, 65, 83, 83, 73, 65, 206, 75, 72, 65, 73, - 128, 75, 72, 65, 72, 128, 75, 72, 65, 65, 128, 75, 71, 128, 75, 69, 89, - 67, 65, 80, 128, 75, 69, 89, 66, 79, 65, 82, 68, 128, 75, 69, 89, 128, - 75, 69, 217, 75, 69, 88, 128, 75, 69, 84, 84, 201, 75, 69, 83, 72, 50, - 128, 75, 69, 80, 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, 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, 86, 89, 75, 65, 128, 75, 65, - 85, 78, 65, 128, 75, 65, 85, 206, 75, 65, 84, 79, 128, 75, 65, 84, 72, - 73, 83, 84, 73, 128, 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, 84, 128, 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, 82, 79, 82, - 73, 73, 128, 75, 65, 82, 69, 206, 75, 65, 82, 65, 84, 84, 79, 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, 80, 128, 75, 65, 78, 84, 65, 74, 193, 75, - 65, 78, 71, 128, 75, 65, 78, 65, 75, 79, 128, 75, 65, 77, 52, 128, 75, - 65, 77, 50, 128, 75, 65, 75, 79, 128, 75, 65, 75, 65, 66, 65, 84, 128, - 75, 65, 75, 128, 75, 65, 203, 75, 65, 73, 82, 73, 128, 75, 65, 73, 128, - 75, 65, 201, 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, 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, 65, - 178, 74, 87, 65, 128, 74, 85, 84, 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, - 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, 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, 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, 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, 65, 89, 65, 78, 78, 65, 128, 74, - 65, 86, 73, 89, 65, 78, 73, 128, 74, 65, 82, 128, 74, 65, 80, 65, 78, 69, - 83, 197, 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, 68, 69, 128, 74, 65, 65, 128, - 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, 89, - 65, 78, 78, 65, 128, 73, 89, 128, 73, 85, 74, 65, 128, 73, 85, 128, 73, - 84, 69, 82, 65, 84, 73, 79, 206, 73, 84, 69, 77, 128, 73, 83, 83, 72, 65, - 82, 128, 73, 83, 211, 73, 83, 79, 78, 128, 73, 83, 79, 206, 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, 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, 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, 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, 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, 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, - 76, 85, 68, 73, 78, 199, 73, 78, 67, 72, 128, 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, 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, - 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, 77, 73, 69, 85, 77, 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, 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, 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, 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, 45, 89, 65, 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, 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, 65, 82, 65, 68, 68, 79, 128, - 72, 82, 89, 86, 78, 73, 193, 72, 80, 87, 71, 128, 72, 80, 65, 128, 72, - 80, 128, 72, 79, 85, 83, 69, 128, 72, 79, 85, 82, 71, 76, 65, 83, 83, - 128, 72, 79, 85, 210, 72, 79, 84, 65, 128, 72, 79, 82, 83, 69, 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, 79, 82, - 85, 128, 72, 79, 79, 78, 128, 72, 79, 77, 79, 84, 72, 69, 84, 73, 67, - 128, 72, 79, 77, 79, 84, 72, 69, 84, 73, 195, 72, 79, 76, 68, 73, 78, - 199, 72, 79, 76, 65, 77, 128, 72, 79, 76, 65, 205, 72, 79, 69, 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, 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, 82, 73, 81, 128, - 72, 73, 71, 72, 45, 82, 69, 86, 69, 82, 83, 69, 68, 45, 185, 72, 73, 69, - 88, 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, 128, 72, 73, 68, 73, 78, 199, 72, 73, 68, 69, 84, 128, - 72, 73, 68, 69, 128, 72, 72, 87, 65, 128, 72, 72, 85, 128, 72, 72, 79, - 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, 65, 71, 79, 78, 128, 72, 69, 84, 72, - 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, 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, 205, 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, 128, - 72, 69, 65, 82, 212, 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, 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, 78, 85, 78, 79, 207, 72, 65, 78, 71, 90, - 72, 79, 213, 72, 65, 78, 68, 83, 128, 72, 65, 78, 68, 128, 72, 65, 78, + 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, 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, 128, + 75, 78, 73, 71, 72, 84, 128, 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, 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, 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, 73, + 128, 75, 73, 72, 128, 75, 73, 69, 88, 128, 75, 73, 69, 80, 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, 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, 73, 84, 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, 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, 66, 79, 65, 82, 68, 128, 75, 69, 89, 128, 75, + 69, 217, 75, 69, 88, 128, 75, 69, 85, 88, 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, 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, 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, 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, 80, 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, + 75, 79, 128, 75, 65, 75, 65, 66, 65, 84, 128, 75, 65, 75, 128, 75, 65, + 203, 75, 65, 73, 82, 73, 128, 75, 65, 73, 128, 75, 65, 201, 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, + 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, 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, 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, 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, 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, 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, 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, 65, 89, 65, 78, 78, 65, 128, 74, 65, 86, 73, 89, 65, + 78, 73, 128, 74, 65, 82, 128, 74, 65, 80, 65, 78, 69, 83, 197, 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, 68, 69, 128, 74, 65, 65, 128, 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, 89, 69, 75, 128, + 73, 89, 65, 78, 78, 65, 128, 73, 85, 74, 65, 128, 73, 85, 128, 73, 84, + 69, 82, 65, 84, 73, 79, 206, 73, 84, 69, 77, 128, 73, 83, 83, 72, 65, 82, + 128, 73, 83, 211, 73, 83, 79, 78, 128, 73, 83, 79, 206, 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, 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, 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, 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, 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, 195, 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, 76, 85, 68, 73, 78, 199, 73, + 78, 67, 72, 128, 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, 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, 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, 54, 68, 55, 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, 55, 50, 67, 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, 52, 51, 57, 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, 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, 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, 82, 89, 86, 78, 73, 193, 72, 80, 87, 71, 128, 72, 80, + 65, 128, 72, 80, 128, 72, 79, 85, 82, 71, 76, 65, 83, 83, 128, 72, 79, + 85, 210, 72, 79, 84, 65, 128, 72, 79, 82, 83, 69, 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, 78, 128, 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, 72, 79, 76, 65, 77, 128, 72, 79, 76, 65, + 205, 72, 79, 75, 65, 128, 72, 79, 73, 128, 72, 79, 69, 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, 82, 69, 86, + 69, 82, 83, 69, 68, 45, 185, 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, 128, 72, 73, 68, 73, 78, 199, 72, 73, 68, + 69, 84, 128, 72, 73, 68, 69, 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, + 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, 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, 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, 128, 72, 69, 65, 82, 212, 72, 69, 65, 68, 83, + 84, 82, 79, 75, 69, 128, 72, 69, 65, 68, 83, 84, 79, 78, 197, 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, 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, 78, + 85, 78, 79, 207, 72, 65, 78, 71, 90, 72, 79, 213, 72, 65, 78, 68, 83, + 128, 72, 65, 78, 68, 76, 69, 83, 128, 72, 65, 78, 68, 128, 72, 65, 78, 45, 65, 75, 65, 84, 128, 72, 65, 77, 90, 65, 128, 72, 65, 77, 77, 69, 210, 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, 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, 69, 128, - 72, 65, 65, 82, 85, 128, 72, 65, 193, 72, 65, 45, 72, 65, 128, 72, 45, + 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, 69, 128, - 71, 89, 65, 83, 128, 71, 89, 65, 65, 128, 71, 89, 65, 128, 71, 89, 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, @@ -2656,462 +3035,558 @@ 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, 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, 77, 77, 193, - 71, 82, 65, 73, 78, 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, 78, 71, 128, 71, 79, 76, 68, 128, - 71, 79, 73, 78, 199, 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, 84, 84, 65, 204, 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, 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, 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, 83, 84, - 128, 71, 72, 79, 128, 71, 72, 73, 128, 71, 72, 72, 65, 128, 71, 72, 69, - 69, 128, 71, 72, 69, 128, 71, 72, 197, 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, 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, 80, 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, 80, 128, 71, 71, 65, 65, 128, 71, 69, 84, - 193, 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, 68, 79, 76, 65, 128, 71, 69, 68, 69, 128, 71, 69, 66, 207, - 71, 69, 66, 193, 71, 69, 65, 82, 128, 71, 68, 65, 78, 128, 71, 67, 73, - 71, 128, 71, 67, 65, 206, 71, 66, 79, 78, 128, 71, 66, 69, 78, 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, 51, 128, 71, - 65, 80, 80, 69, 196, 71, 65, 78, 77, 65, 128, 71, 65, 78, 71, 73, 65, - 128, 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, 65, 76, 128, 71, - 65, 77, 65, 204, 71, 65, 77, 128, 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, 70, 89, 88, 128, 70, 89, - 84, 128, 70, 89, 80, 128, 70, 89, 65, 128, 70, 89, 128, 70, 87, 73, 128, - 70, 87, 69, 69, 128, 70, 87, 69, 128, 70, 87, 65, 65, 128, 70, 87, 65, - 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, 82, 128, 70, 85, 80, 128, 70, 85, 78, - 69, 82, 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, 84, 72, 79, 82, 193, 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, 205, 70, 82, 79, 71, 128, 70, 82, 73, - 84, 85, 128, 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, 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, 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, 83, 84, 69, 82, 73, 78, 71, 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, 78, 79, 84, - 197, 70, 79, 79, 84, 128, 70, 79, 79, 128, 70, 79, 78, 71, 77, 65, 78, - 128, 70, 79, 76, 76, 89, 128, 70, 79, 76, 76, 79, 87, 73, 78, 71, 128, - 70, 79, 128, 70, 77, 128, 70, 76, 89, 128, 70, 76, 85, 84, 69, 128, 70, - 76, 79, 87, 69, 82, 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, 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, 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, - 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, 128, 70, 76, 128, 70, 73, 88, 69, 68, 45, 70, 79, 82, - 205, 70, 73, 88, 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, 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, 69, 128, 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, - 83, 84, 73, 86, 65, 76, 128, 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, 65, 89, 65, 78, 78, 65, - 128, 70, 65, 88, 128, 70, 65, 84, 72, 69, 82, 128, 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, - 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, 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, 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, 73, 128, - 70, 65, 65, 70, 85, 128, 70, 65, 65, 128, 69, 90, 200, 69, 90, 69, 78, - 128, 69, 90, 69, 206, 69, 89, 66, 69, 89, 70, 73, 76, 73, 128, 69, 89, - 65, 78, 78, 65, 128, 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, 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, 69, 83, 83, 128, 69, 88, 67, 69, - 76, 76, 69, 78, 84, 128, 69, 87, 69, 128, 69, 86, 69, 78, 73, 78, 71, - 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, 69, 85, 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, 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, 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, 206, 69, 80, 73, 71, 82, 65, 80, 72, 73, 195, 69, - 80, 73, 68, 65, 85, 82, 69, 65, 206, 69, 80, 69, 71, 69, 82, 77, 65, 128, - 69, 79, 76, 72, 88, 128, 69, 79, 72, 128, 69, 78, 86, 69, 76, 79, 80, 69, - 128, 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, 79, - 211, 69, 78, 78, 128, 69, 78, 76, 65, 82, 71, 69, 77, 69, 78, 84, 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, 196, - 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, 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, 69, 76, 76, 73, 83, 72, 77, - 69, 78, 84, 128, 69, 77, 66, 69, 68, 68, 73, 78, 71, 128, 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, 128, 69, 76, 69, 86, 69, 206, 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, 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, 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, 200, 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, 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, - 68, 90, 90, 69, 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, 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, 128, 68, - 85, 84, 73, 69, 83, 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, 78, 128, 68, 85, 77, 128, 68, 85, 76, 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, 213, 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, 45, 83, 72, 65, - 68, 79, 87, 69, 196, 68, 82, 73, 86, 69, 128, 68, 82, 73, 204, 68, 82, - 65, 85, 71, 72, 84, 211, 68, 82, 65, 71, 79, 78, 128, 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, 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, 55, 128, 68, 79, 84, 83, 45, 50, 53, 54, 56, 128, - 68, 79, 84, 83, 45, 50, 53, 54, 55, 56, 128, 68, 79, 84, 83, 45, 50, 53, - 54, 55, 128, 68, 79, 84, 83, 45, 50, 53, 54, 128, 68, 79, 84, 83, 45, 50, - 53, 128, 68, 79, 84, 83, 45, 50, 52, 56, 128, 68, 79, 84, 83, 45, 50, 52, - 55, 56, 128, 68, 79, 84, 83, 45, 50, 52, 55, 128, 68, 79, 84, 83, 45, 50, - 52, 54, 56, 128, 68, 79, 84, 83, 45, 50, 52, 54, 55, 56, 128, 68, 79, 84, - 83, 45, 50, 52, 54, 55, 128, 68, 79, 84, 83, 45, 50, 52, 54, 128, 68, 79, - 84, 83, 45, 50, 52, 53, 56, 128, 68, 79, 84, 83, 45, 50, 52, 53, 55, 56, - 128, 68, 79, 84, 83, 45, 50, 52, 53, 55, 128, 68, 79, 84, 83, 45, 50, 52, - 53, 54, 56, 128, 68, 79, 84, 83, 45, 50, 52, 53, 54, 55, 56, 128, 68, 79, - 84, 83, 45, 50, 52, 53, 54, 55, 128, 68, 79, 84, 83, 45, 50, 52, 53, 54, - 128, 68, 79, 84, 83, 45, 50, 52, 53, 128, 68, 79, 84, 83, 45, 50, 52, - 128, 68, 79, 84, 83, 45, 50, 51, 56, 128, 68, 79, 84, 83, 45, 50, 51, 55, - 56, 128, 68, 79, 84, 83, 45, 50, 51, 55, 128, 68, 79, 84, 83, 45, 50, 51, - 54, 56, 128, 68, 79, 84, 83, 45, 50, 51, 54, 55, 56, 128, 68, 79, 84, 83, - 45, 50, 51, 54, 55, 128, 68, 79, 84, 83, 45, 50, 51, 54, 128, 68, 79, 84, - 83, 45, 50, 51, 53, 56, 128, 68, 79, 84, 83, 45, 50, 51, 53, 55, 56, 128, - 68, 79, 84, 83, 45, 50, 51, 53, 55, 128, 68, 79, 84, 83, 45, 50, 51, 53, - 54, 56, 128, 68, 79, 84, 83, 45, 50, 51, 53, 54, 55, 56, 128, 68, 79, 84, - 83, 45, 50, 51, 53, 54, 55, 128, 68, 79, 84, 83, 45, 50, 51, 53, 54, 128, - 68, 79, 84, 83, 45, 50, 51, 53, 128, 68, 79, 84, 83, 45, 50, 51, 52, 56, - 128, 68, 79, 84, 83, 45, 50, 51, 52, 55, 56, 128, 68, 79, 84, 83, 45, 50, - 51, 52, 55, 128, 68, 79, 84, 83, 45, 50, 51, 52, 54, 56, 128, 68, 79, 84, - 83, 45, 50, 51, 52, 54, 55, 56, 128, 68, 79, 84, 83, 45, 50, 51, 52, 54, - 55, 128, 68, 79, 84, 83, 45, 50, 51, 52, 54, 128, 68, 79, 84, 83, 45, 50, - 51, 52, 53, 56, 128, 68, 79, 84, 83, 45, 50, 51, 52, 53, 55, 56, 128, 68, - 79, 84, 83, 45, 50, 51, 52, 53, 55, 128, 68, 79, 84, 83, 45, 50, 51, 52, - 53, 54, 56, 128, 68, 79, 84, 83, 45, 50, 51, 52, 53, 54, 55, 56, 128, 68, - 79, 84, 83, 45, 50, 51, 52, 53, 54, 55, 128, 68, 79, 84, 83, 45, 50, 51, - 52, 53, 54, 128, 68, 79, 84, 83, 45, 50, 51, 52, 53, 128, 68, 79, 84, 83, - 45, 50, 51, 52, 128, 68, 79, 84, 83, 45, 50, 51, 128, 68, 79, 84, 83, 45, - 50, 128, 68, 79, 84, 83, 45, 49, 56, 128, 68, 79, 84, 83, 45, 49, 55, 56, - 128, 68, 79, 84, 83, 45, 49, 55, 128, 68, 79, 84, 83, 45, 49, 54, 56, - 128, 68, 79, 84, 83, 45, 49, 54, 55, 56, 128, 68, 79, 84, 83, 45, 49, 54, - 55, 128, 68, 79, 84, 83, 45, 49, 54, 128, 68, 79, 84, 83, 45, 49, 53, 56, - 128, 68, 79, 84, 83, 45, 49, 53, 55, 56, 128, 68, 79, 84, 83, 45, 49, 53, - 55, 128, 68, 79, 84, 83, 45, 49, 53, 54, 56, 128, 68, 79, 84, 83, 45, 49, - 53, 54, 55, 56, 128, 68, 79, 84, 83, 45, 49, 53, 54, 55, 128, 68, 79, 84, - 83, 45, 49, 53, 54, 128, 68, 79, 84, 83, 45, 49, 53, 128, 68, 79, 84, 83, - 45, 49, 52, 56, 128, 68, 79, 84, 83, 45, 49, 52, 55, 56, 128, 68, 79, 84, - 83, 45, 49, 52, 55, 128, 68, 79, 84, 83, 45, 49, 52, 54, 56, 128, 68, 79, - 84, 83, 45, 49, 52, 54, 55, 56, 128, 68, 79, 84, 83, 45, 49, 52, 54, 55, - 128, 68, 79, 84, 83, 45, 49, 52, 54, 128, 68, 79, 84, 83, 45, 49, 52, 53, - 56, 128, 68, 79, 84, 83, 45, 49, 52, 53, 55, 56, 128, 68, 79, 84, 83, 45, - 49, 52, 53, 55, 128, 68, 79, 84, 83, 45, 49, 52, 53, 54, 56, 128, 68, 79, - 84, 83, 45, 49, 52, 53, 54, 55, 56, 128, 68, 79, 84, 83, 45, 49, 52, 53, - 54, 55, 128, 68, 79, 84, 83, 45, 49, 52, 53, 54, 128, 68, 79, 84, 83, 45, - 49, 52, 53, 128, 68, 79, 84, 83, 45, 49, 52, 128, 68, 79, 84, 83, 45, 49, - 51, 56, 128, 68, 79, 84, 83, 45, 49, 51, 55, 56, 128, 68, 79, 84, 83, 45, - 49, 51, 55, 128, 68, 79, 84, 83, 45, 49, 51, 54, 56, 128, 68, 79, 84, 83, - 45, 49, 51, 54, 55, 56, 128, 68, 79, 84, 83, 45, 49, 51, 54, 55, 128, 68, - 79, 84, 83, 45, 49, 51, 54, 128, 68, 79, 84, 83, 45, 49, 51, 53, 56, 128, - 68, 79, 84, 83, 45, 49, 51, 53, 55, 56, 128, 68, 79, 84, 83, 45, 49, 51, - 53, 55, 128, 68, 79, 84, 83, 45, 49, 51, 53, 54, 56, 128, 68, 79, 84, 83, - 45, 49, 51, 53, 54, 55, 56, 128, 68, 79, 84, 83, 45, 49, 51, 53, 54, 55, - 128, 68, 79, 84, 83, 45, 49, 51, 53, 54, 128, 68, 79, 84, 83, 45, 49, 51, - 53, 128, 68, 79, 84, 83, 45, 49, 51, 52, 56, 128, 68, 79, 84, 83, 45, 49, - 51, 52, 55, 56, 128, 68, 79, 84, 83, 45, 49, 51, 52, 55, 128, 68, 79, 84, - 83, 45, 49, 51, 52, 54, 56, 128, 68, 79, 84, 83, 45, 49, 51, 52, 54, 55, - 56, 128, 68, 79, 84, 83, 45, 49, 51, 52, 54, 55, 128, 68, 79, 84, 83, 45, - 49, 51, 52, 54, 128, 68, 79, 84, 83, 45, 49, 51, 52, 53, 56, 128, 68, 79, - 84, 83, 45, 49, 51, 52, 53, 55, 56, 128, 68, 79, 84, 83, 45, 49, 51, 52, - 53, 55, 128, 68, 79, 84, 83, 45, 49, 51, 52, 53, 54, 56, 128, 68, 79, 84, - 83, 45, 49, 51, 52, 53, 54, 55, 56, 128, 68, 79, 84, 83, 45, 49, 51, 52, - 53, 54, 55, 128, 68, 79, 84, 83, 45, 49, 51, 52, 53, 54, 128, 68, 79, 84, - 83, 45, 49, 51, 52, 53, 128, 68, 79, 84, 83, 45, 49, 51, 52, 128, 68, 79, - 84, 83, 45, 49, 51, 128, 68, 79, 84, 83, 45, 49, 50, 56, 128, 68, 79, 84, - 83, 45, 49, 50, 55, 56, 128, 68, 79, 84, 83, 45, 49, 50, 55, 128, 68, 79, - 84, 83, 45, 49, 50, 54, 56, 128, 68, 79, 84, 83, 45, 49, 50, 54, 55, 56, - 128, 68, 79, 84, 83, 45, 49, 50, 54, 55, 128, 68, 79, 84, 83, 45, 49, 50, - 54, 128, 68, 79, 84, 83, 45, 49, 50, 53, 56, 128, 68, 79, 84, 83, 45, 49, - 50, 53, 55, 56, 128, 68, 79, 84, 83, 45, 49, 50, 53, 55, 128, 68, 79, 84, - 83, 45, 49, 50, 53, 54, 56, 128, 68, 79, 84, 83, 45, 49, 50, 53, 54, 55, - 56, 128, 68, 79, 84, 83, 45, 49, 50, 53, 54, 55, 128, 68, 79, 84, 83, 45, - 49, 50, 53, 54, 128, 68, 79, 84, 83, 45, 49, 50, 53, 128, 68, 79, 84, 83, - 45, 49, 50, 52, 56, 128, 68, 79, 84, 83, 45, 49, 50, 52, 55, 56, 128, 68, - 79, 84, 83, 45, 49, 50, 52, 55, 128, 68, 79, 84, 83, 45, 49, 50, 52, 54, - 56, 128, 68, 79, 84, 83, 45, 49, 50, 52, 54, 55, 56, 128, 68, 79, 84, 83, - 45, 49, 50, 52, 54, 55, 128, 68, 79, 84, 83, 45, 49, 50, 52, 54, 128, 68, - 79, 84, 83, 45, 49, 50, 52, 53, 56, 128, 68, 79, 84, 83, 45, 49, 50, 52, - 53, 55, 56, 128, 68, 79, 84, 83, 45, 49, 50, 52, 53, 55, 128, 68, 79, 84, - 83, 45, 49, 50, 52, 53, 54, 56, 128, 68, 79, 84, 83, 45, 49, 50, 52, 53, - 54, 55, 56, 128, 68, 79, 84, 83, 45, 49, 50, 52, 53, 54, 55, 128, 68, 79, - 84, 83, 45, 49, 50, 52, 53, 54, 128, 68, 79, 84, 83, 45, 49, 50, 52, 53, - 128, 68, 79, 84, 83, 45, 49, 50, 52, 128, 68, 79, 84, 83, 45, 49, 50, 51, - 56, 128, 68, 79, 84, 83, 45, 49, 50, 51, 55, 56, 128, 68, 79, 84, 83, 45, - 49, 50, 51, 55, 128, 68, 79, 84, 83, 45, 49, 50, 51, 54, 56, 128, 68, 79, - 84, 83, 45, 49, 50, 51, 54, 55, 56, 128, 68, 79, 84, 83, 45, 49, 50, 51, - 54, 55, 128, 68, 79, 84, 83, 45, 49, 50, 51, 54, 128, 68, 79, 84, 83, 45, - 49, 50, 51, 53, 56, 128, 68, 79, 84, 83, 45, 49, 50, 51, 53, 55, 56, 128, - 68, 79, 84, 83, 45, 49, 50, 51, 53, 55, 128, 68, 79, 84, 83, 45, 49, 50, - 51, 53, 54, 56, 128, 68, 79, 84, 83, 45, 49, 50, 51, 53, 54, 55, 56, 128, - 68, 79, 84, 83, 45, 49, 50, 51, 53, 54, 55, 128, 68, 79, 84, 83, 45, 49, - 50, 51, 53, 54, 128, 68, 79, 84, 83, 45, 49, 50, 51, 53, 128, 68, 79, 84, - 83, 45, 49, 50, 51, 52, 56, 128, 68, 79, 84, 83, 45, 49, 50, 51, 52, 55, - 56, 128, 68, 79, 84, 83, 45, 49, 50, 51, 52, 55, 128, 68, 79, 84, 83, 45, - 49, 50, 51, 52, 54, 56, 128, 68, 79, 84, 83, 45, 49, 50, 51, 52, 54, 55, - 56, 128, 68, 79, 84, 83, 45, 49, 50, 51, 52, 54, 55, 128, 68, 79, 84, 83, - 45, 49, 50, 51, 52, 54, 128, 68, 79, 84, 83, 45, 49, 50, 51, 52, 53, 56, - 128, 68, 79, 84, 83, 45, 49, 50, 51, 52, 53, 55, 56, 128, 68, 79, 84, 83, - 45, 49, 50, 51, 52, 53, 55, 128, 68, 79, 84, 83, 45, 49, 50, 51, 52, 53, - 54, 56, 128, 68, 79, 84, 83, 45, 49, 50, 51, 52, 53, 54, 55, 56, 128, 68, - 79, 84, 83, 45, 49, 50, 51, 52, 53, 54, 55, 128, 68, 79, 84, 83, 45, 49, - 50, 51, 52, 53, 54, 128, 68, 79, 84, 83, 45, 49, 50, 51, 52, 53, 128, 68, - 79, 84, 83, 45, 49, 50, 51, 52, 128, 68, 79, 84, 83, 45, 49, 50, 51, 128, - 68, 79, 84, 83, 45, 49, 50, 128, 68, 79, 84, 83, 45, 49, 128, 68, 79, 84, - 83, 128, 68, 79, 84, 76, 69, 83, 211, 68, 79, 82, 85, 128, 68, 79, 79, - 82, 128, 68, 79, 79, 78, 71, 128, 68, 79, 78, 71, 128, 68, 79, 78, 128, - 68, 79, 77, 65, 73, 206, 68, 79, 76, 76, 65, 210, 68, 79, 76, 73, 85, 77, - 128, 68, 79, 73, 84, 128, 68, 79, 71, 128, 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, 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, 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, 80, 69, 82, 83, 73, 79, 78, 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, 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, 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, - 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, 211, 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, 65, 84, 72, 128, 68, 72, 65, 76, 128, - 68, 72, 65, 65, 76, 85, 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, 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, + 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, 77, 77, 193, 71, 82, 65, 73, 78, 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, 78, 71, 128, 71, 79, 76, 68, 128, 71, 79, 75, 128, 71, 79, 73, + 78, 199, 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, 84, + 84, 65, 204, 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, 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, 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, 69, 128, 71, 72, 69, 128, 71, 72, 197, 71, 72, 65, 89, 78, 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, 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, 80, 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, 80, 128, 71, + 71, 65, 65, 128, 71, 69, 84, 193, 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, 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, 69, 78, 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, 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, + 65, 78, 128, 71, 65, 77, 65, 76, 128, 71, 65, 77, 65, 204, 71, 65, 77, + 128, 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, 89, 128, 70, 87, 73, + 128, 70, 87, 69, 69, 128, 70, 87, 69, 128, 70, 87, 65, 65, 128, 70, 87, + 65, 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, 82, 128, 70, 85, 80, 128, 70, 85, + 78, 69, 82, 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, 69, 204, 70, 84, 72, 79, + 82, 193, 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, 205, 70, 82, 79, + 71, 128, 70, 82, 73, 84, 85, 128, 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, 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, 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, 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, 78, 79, 84, 197, 70, 79, 79, 84, + 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, + 128, 70, 77, 128, 70, 76, 89, 128, 70, 76, 85, 84, 69, 128, 70, 76, 79, + 87, 69, 82, 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, 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, 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, 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, 76, 73, 78, 197, + 70, 73, 86, 197, 70, 73, 84, 65, 128, 70, 73, 84, 128, 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, 69, 128, 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, 83, 84, 73, 86, 65, 76, 128, 70, 69, 82, 82, 89, 128, 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, 65, 89, 65, 78, 78, 65, 128, 70, 65, 88, 128, 70, 65, 84, 72, + 69, 82, 128, 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, 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, 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, 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, 65, 65, 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, 66, 69, 89, 70, 73, 76, 73, 128, 69, 89, 65, 78, 78, 65, + 128, 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, 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, 69, 83, 83, 128, + 69, 88, 67, 69, 76, 76, 69, 78, 84, 128, 69, 87, 69, 128, 69, 86, 69, 78, + 73, 78, 71, 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, 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, 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, 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, 206, 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, 76, 72, 88, 128, 69, 79, 72, 128, 69, 78, 89, 128, 69, + 78, 86, 69, 76, 79, 80, 69, 128, 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, 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, 79, 211, 69, 78, 78, 128, 69, 78, 76, 65, 82, 71, 69, 77, + 69, 78, 84, 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, 196, 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, 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, 83, 73, 83, + 128, 69, 76, 76, 73, 80, 83, 69, 128, 69, 76, 73, 70, 73, 128, 69, 76, + 69, 86, 69, 78, 128, 69, 76, 69, 86, 69, 206, 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, + 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, 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, 200, 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, 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, 68, 90, 90, 69, 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, 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, 128, 68, 85, 84, 73, 69, 83, 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, 78, 128, 68, 85, 77, 128, 68, 85, 76, 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, 213, 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, 45, 83, 72, 65, 68, 79, 87, 69, 196, 68, 82, 73, 86, 69, 128, 68, 82, + 73, 86, 197, 68, 82, 73, 204, 68, 82, 65, 85, 71, 72, 84, 211, 68, 82, + 65, 71, 79, 78, 128, 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, 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, + 55, 128, 68, 79, 84, 83, 45, 50, 53, 54, 56, 128, 68, 79, 84, 83, 45, 50, + 53, 54, 55, 56, 128, 68, 79, 84, 83, 45, 50, 53, 54, 55, 128, 68, 79, 84, + 83, 45, 50, 53, 54, 128, 68, 79, 84, 83, 45, 50, 53, 128, 68, 79, 84, 83, + 45, 50, 52, 56, 128, 68, 79, 84, 83, 45, 50, 52, 55, 56, 128, 68, 79, 84, + 83, 45, 50, 52, 55, 128, 68, 79, 84, 83, 45, 50, 52, 54, 56, 128, 68, 79, + 84, 83, 45, 50, 52, 54, 55, 56, 128, 68, 79, 84, 83, 45, 50, 52, 54, 55, + 128, 68, 79, 84, 83, 45, 50, 52, 54, 128, 68, 79, 84, 83, 45, 50, 52, 53, + 56, 128, 68, 79, 84, 83, 45, 50, 52, 53, 55, 56, 128, 68, 79, 84, 83, 45, + 50, 52, 53, 55, 128, 68, 79, 84, 83, 45, 50, 52, 53, 54, 56, 128, 68, 79, + 84, 83, 45, 50, 52, 53, 54, 55, 56, 128, 68, 79, 84, 83, 45, 50, 52, 53, + 54, 55, 128, 68, 79, 84, 83, 45, 50, 52, 53, 54, 128, 68, 79, 84, 83, 45, + 50, 52, 53, 128, 68, 79, 84, 83, 45, 50, 52, 128, 68, 79, 84, 83, 45, 50, + 51, 56, 128, 68, 79, 84, 83, 45, 50, 51, 55, 56, 128, 68, 79, 84, 83, 45, + 50, 51, 55, 128, 68, 79, 84, 83, 45, 50, 51, 54, 56, 128, 68, 79, 84, 83, + 45, 50, 51, 54, 55, 56, 128, 68, 79, 84, 83, 45, 50, 51, 54, 55, 128, 68, + 79, 84, 83, 45, 50, 51, 54, 128, 68, 79, 84, 83, 45, 50, 51, 53, 56, 128, + 68, 79, 84, 83, 45, 50, 51, 53, 55, 56, 128, 68, 79, 84, 83, 45, 50, 51, + 53, 55, 128, 68, 79, 84, 83, 45, 50, 51, 53, 54, 56, 128, 68, 79, 84, 83, + 45, 50, 51, 53, 54, 55, 56, 128, 68, 79, 84, 83, 45, 50, 51, 53, 54, 55, + 128, 68, 79, 84, 83, 45, 50, 51, 53, 54, 128, 68, 79, 84, 83, 45, 50, 51, + 53, 128, 68, 79, 84, 83, 45, 50, 51, 52, 56, 128, 68, 79, 84, 83, 45, 50, + 51, 52, 55, 56, 128, 68, 79, 84, 83, 45, 50, 51, 52, 55, 128, 68, 79, 84, + 83, 45, 50, 51, 52, 54, 56, 128, 68, 79, 84, 83, 45, 50, 51, 52, 54, 55, + 56, 128, 68, 79, 84, 83, 45, 50, 51, 52, 54, 55, 128, 68, 79, 84, 83, 45, + 50, 51, 52, 54, 128, 68, 79, 84, 83, 45, 50, 51, 52, 53, 56, 128, 68, 79, + 84, 83, 45, 50, 51, 52, 53, 55, 56, 128, 68, 79, 84, 83, 45, 50, 51, 52, + 53, 55, 128, 68, 79, 84, 83, 45, 50, 51, 52, 53, 54, 56, 128, 68, 79, 84, + 83, 45, 50, 51, 52, 53, 54, 55, 56, 128, 68, 79, 84, 83, 45, 50, 51, 52, + 53, 54, 55, 128, 68, 79, 84, 83, 45, 50, 51, 52, 53, 54, 128, 68, 79, 84, + 83, 45, 50, 51, 52, 53, 128, 68, 79, 84, 83, 45, 50, 51, 52, 128, 68, 79, + 84, 83, 45, 50, 51, 128, 68, 79, 84, 83, 45, 50, 128, 68, 79, 84, 83, 45, + 49, 56, 128, 68, 79, 84, 83, 45, 49, 55, 56, 128, 68, 79, 84, 83, 45, 49, + 55, 128, 68, 79, 84, 83, 45, 49, 54, 56, 128, 68, 79, 84, 83, 45, 49, 54, + 55, 56, 128, 68, 79, 84, 83, 45, 49, 54, 55, 128, 68, 79, 84, 83, 45, 49, + 54, 128, 68, 79, 84, 83, 45, 49, 53, 56, 128, 68, 79, 84, 83, 45, 49, 53, + 55, 56, 128, 68, 79, 84, 83, 45, 49, 53, 55, 128, 68, 79, 84, 83, 45, 49, + 53, 54, 56, 128, 68, 79, 84, 83, 45, 49, 53, 54, 55, 56, 128, 68, 79, 84, + 83, 45, 49, 53, 54, 55, 128, 68, 79, 84, 83, 45, 49, 53, 54, 128, 68, 79, + 84, 83, 45, 49, 53, 128, 68, 79, 84, 83, 45, 49, 52, 56, 128, 68, 79, 84, + 83, 45, 49, 52, 55, 56, 128, 68, 79, 84, 83, 45, 49, 52, 55, 128, 68, 79, + 84, 83, 45, 49, 52, 54, 56, 128, 68, 79, 84, 83, 45, 49, 52, 54, 55, 56, + 128, 68, 79, 84, 83, 45, 49, 52, 54, 55, 128, 68, 79, 84, 83, 45, 49, 52, + 54, 128, 68, 79, 84, 83, 45, 49, 52, 53, 56, 128, 68, 79, 84, 83, 45, 49, + 52, 53, 55, 56, 128, 68, 79, 84, 83, 45, 49, 52, 53, 55, 128, 68, 79, 84, + 83, 45, 49, 52, 53, 54, 56, 128, 68, 79, 84, 83, 45, 49, 52, 53, 54, 55, + 56, 128, 68, 79, 84, 83, 45, 49, 52, 53, 54, 55, 128, 68, 79, 84, 83, 45, + 49, 52, 53, 54, 128, 68, 79, 84, 83, 45, 49, 52, 53, 128, 68, 79, 84, 83, + 45, 49, 52, 128, 68, 79, 84, 83, 45, 49, 51, 56, 128, 68, 79, 84, 83, 45, + 49, 51, 55, 56, 128, 68, 79, 84, 83, 45, 49, 51, 55, 128, 68, 79, 84, 83, + 45, 49, 51, 54, 56, 128, 68, 79, 84, 83, 45, 49, 51, 54, 55, 56, 128, 68, + 79, 84, 83, 45, 49, 51, 54, 55, 128, 68, 79, 84, 83, 45, 49, 51, 54, 128, + 68, 79, 84, 83, 45, 49, 51, 53, 56, 128, 68, 79, 84, 83, 45, 49, 51, 53, + 55, 56, 128, 68, 79, 84, 83, 45, 49, 51, 53, 55, 128, 68, 79, 84, 83, 45, + 49, 51, 53, 54, 56, 128, 68, 79, 84, 83, 45, 49, 51, 53, 54, 55, 56, 128, + 68, 79, 84, 83, 45, 49, 51, 53, 54, 55, 128, 68, 79, 84, 83, 45, 49, 51, + 53, 54, 128, 68, 79, 84, 83, 45, 49, 51, 53, 128, 68, 79, 84, 83, 45, 49, + 51, 52, 56, 128, 68, 79, 84, 83, 45, 49, 51, 52, 55, 56, 128, 68, 79, 84, + 83, 45, 49, 51, 52, 55, 128, 68, 79, 84, 83, 45, 49, 51, 52, 54, 56, 128, + 68, 79, 84, 83, 45, 49, 51, 52, 54, 55, 56, 128, 68, 79, 84, 83, 45, 49, + 51, 52, 54, 55, 128, 68, 79, 84, 83, 45, 49, 51, 52, 54, 128, 68, 79, 84, + 83, 45, 49, 51, 52, 53, 56, 128, 68, 79, 84, 83, 45, 49, 51, 52, 53, 55, + 56, 128, 68, 79, 84, 83, 45, 49, 51, 52, 53, 55, 128, 68, 79, 84, 83, 45, + 49, 51, 52, 53, 54, 56, 128, 68, 79, 84, 83, 45, 49, 51, 52, 53, 54, 55, + 56, 128, 68, 79, 84, 83, 45, 49, 51, 52, 53, 54, 55, 128, 68, 79, 84, 83, + 45, 49, 51, 52, 53, 54, 128, 68, 79, 84, 83, 45, 49, 51, 52, 53, 128, 68, + 79, 84, 83, 45, 49, 51, 52, 128, 68, 79, 84, 83, 45, 49, 51, 128, 68, 79, + 84, 83, 45, 49, 50, 56, 128, 68, 79, 84, 83, 45, 49, 50, 55, 56, 128, 68, + 79, 84, 83, 45, 49, 50, 55, 128, 68, 79, 84, 83, 45, 49, 50, 54, 56, 128, + 68, 79, 84, 83, 45, 49, 50, 54, 55, 56, 128, 68, 79, 84, 83, 45, 49, 50, + 54, 55, 128, 68, 79, 84, 83, 45, 49, 50, 54, 128, 68, 79, 84, 83, 45, 49, + 50, 53, 56, 128, 68, 79, 84, 83, 45, 49, 50, 53, 55, 56, 128, 68, 79, 84, + 83, 45, 49, 50, 53, 55, 128, 68, 79, 84, 83, 45, 49, 50, 53, 54, 56, 128, + 68, 79, 84, 83, 45, 49, 50, 53, 54, 55, 56, 128, 68, 79, 84, 83, 45, 49, + 50, 53, 54, 55, 128, 68, 79, 84, 83, 45, 49, 50, 53, 54, 128, 68, 79, 84, + 83, 45, 49, 50, 53, 128, 68, 79, 84, 83, 45, 49, 50, 52, 56, 128, 68, 79, + 84, 83, 45, 49, 50, 52, 55, 56, 128, 68, 79, 84, 83, 45, 49, 50, 52, 55, + 128, 68, 79, 84, 83, 45, 49, 50, 52, 54, 56, 128, 68, 79, 84, 83, 45, 49, + 50, 52, 54, 55, 56, 128, 68, 79, 84, 83, 45, 49, 50, 52, 54, 55, 128, 68, + 79, 84, 83, 45, 49, 50, 52, 54, 128, 68, 79, 84, 83, 45, 49, 50, 52, 53, + 56, 128, 68, 79, 84, 83, 45, 49, 50, 52, 53, 55, 56, 128, 68, 79, 84, 83, + 45, 49, 50, 52, 53, 55, 128, 68, 79, 84, 83, 45, 49, 50, 52, 53, 54, 56, + 128, 68, 79, 84, 83, 45, 49, 50, 52, 53, 54, 55, 56, 128, 68, 79, 84, 83, + 45, 49, 50, 52, 53, 54, 55, 128, 68, 79, 84, 83, 45, 49, 50, 52, 53, 54, + 128, 68, 79, 84, 83, 45, 49, 50, 52, 53, 128, 68, 79, 84, 83, 45, 49, 50, + 52, 128, 68, 79, 84, 83, 45, 49, 50, 51, 56, 128, 68, 79, 84, 83, 45, 49, + 50, 51, 55, 56, 128, 68, 79, 84, 83, 45, 49, 50, 51, 55, 128, 68, 79, 84, + 83, 45, 49, 50, 51, 54, 56, 128, 68, 79, 84, 83, 45, 49, 50, 51, 54, 55, + 56, 128, 68, 79, 84, 83, 45, 49, 50, 51, 54, 55, 128, 68, 79, 84, 83, 45, + 49, 50, 51, 54, 128, 68, 79, 84, 83, 45, 49, 50, 51, 53, 56, 128, 68, 79, + 84, 83, 45, 49, 50, 51, 53, 55, 56, 128, 68, 79, 84, 83, 45, 49, 50, 51, + 53, 55, 128, 68, 79, 84, 83, 45, 49, 50, 51, 53, 54, 56, 128, 68, 79, 84, + 83, 45, 49, 50, 51, 53, 54, 55, 56, 128, 68, 79, 84, 83, 45, 49, 50, 51, + 53, 54, 55, 128, 68, 79, 84, 83, 45, 49, 50, 51, 53, 54, 128, 68, 79, 84, + 83, 45, 49, 50, 51, 53, 128, 68, 79, 84, 83, 45, 49, 50, 51, 52, 56, 128, + 68, 79, 84, 83, 45, 49, 50, 51, 52, 55, 56, 128, 68, 79, 84, 83, 45, 49, + 50, 51, 52, 55, 128, 68, 79, 84, 83, 45, 49, 50, 51, 52, 54, 56, 128, 68, + 79, 84, 83, 45, 49, 50, 51, 52, 54, 55, 56, 128, 68, 79, 84, 83, 45, 49, + 50, 51, 52, 54, 55, 128, 68, 79, 84, 83, 45, 49, 50, 51, 52, 54, 128, 68, + 79, 84, 83, 45, 49, 50, 51, 52, 53, 56, 128, 68, 79, 84, 83, 45, 49, 50, + 51, 52, 53, 55, 56, 128, 68, 79, 84, 83, 45, 49, 50, 51, 52, 53, 55, 128, + 68, 79, 84, 83, 45, 49, 50, 51, 52, 53, 54, 56, 128, 68, 79, 84, 83, 45, + 49, 50, 51, 52, 53, 54, 55, 56, 128, 68, 79, 84, 83, 45, 49, 50, 51, 52, + 53, 54, 55, 128, 68, 79, 84, 83, 45, 49, 50, 51, 52, 53, 54, 128, 68, 79, + 84, 83, 45, 49, 50, 51, 52, 53, 128, 68, 79, 84, 83, 45, 49, 50, 51, 52, + 128, 68, 79, 84, 83, 45, 49, 50, 51, 128, 68, 79, 84, 83, 45, 49, 50, + 128, 68, 79, 84, 83, 45, 49, 128, 68, 79, 84, 83, 128, 68, 79, 84, 76, + 69, 83, 211, 68, 79, 82, 85, 128, 68, 79, 79, 82, 128, 68, 79, 79, 78, + 71, 128, 68, 79, 78, 71, 128, 68, 79, 77, 65, 73, 206, 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, 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, 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, 74, 128, + 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, 80, 69, 82, 83, 73, 79, 78, 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, 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, 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, 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, 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, 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, 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, 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, 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, 69, 70, 69, 67, 84, - 73, 86, 69, 78, 69, 83, 211, 68, 69, 69, 82, 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, 73, 83, 73, 86, 69, 78, 69, 83, 83, 128, 68, 69, - 67, 73, 77, 65, 204, 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, 79, 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, 194, - 68, 65, 217, 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, 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, 128, 68, 65, - 78, 199, 68, 65, 78, 68, 65, 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, 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, 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, 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, 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, 69, 82, 85, 83, 128, 67, 89, 80, 128, 67, 89, 76, 73, 78, 68, 82, 73, - 67, 73, 84, 89, 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, 84, 128, 67, 85, 212, 67, 85, 83, 84, 79, 77, 69, 210, 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, 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, 82, 89, 80, 84, 79, 71, 82, 65, 77, 77, 73, + 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, 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, 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, 69, + 70, 69, 67, 84, 73, 86, 69, 78, 69, 83, 211, 68, 69, 69, 82, 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, 73, 83, 73, 86, 69, 78, 69, 83, 83, + 128, 68, 69, 67, 73, 77, 65, 204, 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, 79, 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, 194, 68, 65, 217, 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, + 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, 128, + 68, 65, 78, 199, 68, 65, 78, 68, 65, 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, 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, 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, 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, 84, 128, + 67, 85, 212, 67, 85, 83, 84, 79, 77, 69, 210, 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, 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, 208, 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, 82, 89, 80, 84, 79, 71, 82, 65, 77, 77, 73, 195, 67, 82, 85, 90, 69, 73, 82, 207, 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, @@ -3128,32 +3603,33 @@ 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, 128, 67, 79, 79, 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, 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, 79, 78, 65, 78, 212, 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, 76, - 73, 67, 84, 128, 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, 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, 128, 67, 79, 77, 77, 193, 67, 79, 77, 73, 78, - 199, 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, 128, 67, 79, 70, 70, - 73, 78, 128, 67, 79, 69, 78, 71, 128, 67, 79, 68, 65, 128, 67, 79, 65, - 128, 67, 79, 128, 67, 77, 128, 67, 205, 67, 76, 85, 83, 84, 69, 210, 67, - 76, 85, 66, 45, 83, 80, 79, 75, 69, 196, 67, 76, 85, 66, 128, 67, 76, 85, - 194, 67, 76, 79, 85, 68, 128, 67, 76, 79, 84, 72, 69, 83, 128, 67, 76, + 86, 69, 82, 71, 73, 78, 199, 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, 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, + 79, 78, 65, 78, 212, 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, 76, 73, 67, 84, 128, 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, 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, + 128, 67, 79, 77, 77, 193, 67, 79, 77, 73, 78, 199, 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, 128, 67, 79, 70, 70, 73, 78, 128, 67, 79, 69, + 78, 71, 128, 67, 79, 68, 65, 128, 67, 79, 65, 128, 67, 79, 128, 67, 77, + 128, 67, 205, 67, 76, 85, 83, 84, 69, 210, 67, 76, 85, 66, 45, 83, 80, + 79, 75, 69, 196, 67, 76, 85, 66, 128, 67, 76, 85, 194, 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, 78, 69, 83, 83, 128, 67, 76, 79, 83, 69, 68, 128, 67, 76, 79, 83, 69, 196, 67, 76, 79, 83, 197, 67, 76, 79, 67, 75, 87, 73, 83, 197, 67, 76, 73, 86, 73, 83, 128, 67, 76, 73, 78, 71, @@ -3165,31 +3641,34 @@ 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, 73, 128, 67, 73, 69, 88, 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, 73, 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, 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, 65, - 128, 67, 72, 79, 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, 76, - 76, 213, 67, 72, 73, 76, 68, 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, 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, 73, 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, 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, 65, 128, 67, 72, 79, 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, 76, 76, 213, 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, 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, 211, 67, 72, 69, - 80, 128, 67, 72, 69, 206, 67, 72, 69, 69, 128, 67, 72, 69, 67, 75, 128, + 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, 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, 73, 79, 84, 128, 67, 72, 65, 82, 73, 79, 212, @@ -3197,41 +3676,53 @@ 69, 82, 128, 67, 72, 65, 82, 128, 67, 72, 65, 80, 128, 67, 72, 65, 78, 71, 69, 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, 73, 82, 128, 67, 72, 65, 68, 65, 128, 67, 72, - 65, 196, 67, 72, 65, 65, 128, 67, 69, 88, 128, 67, 69, 82, 69, 83, 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, 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, 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, 69, 69, 128, 67, 67, 72, 69, 128, 67, 67, - 72, 65, 65, 128, 67, 67, 72, 65, 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, 84, 65, 87, 65, 128, 67, 65, 84, 128, 67, 65, 82, 89, - 83, 84, 73, 65, 206, 67, 65, 82, 84, 128, 67, 65, 82, 82, 73, 65, 71, - 197, 67, 65, 82, 80, 69, 78, 84, 82, 217, 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, 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, 82, 65, 66, 73, 78, 68, 85, - 128, 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, 76, 89, 65, 128, 67, 65, 76, 89, 193, 67, 65, - 76, 76, 128, 67, 65, 76, 67, 128, 67, 65, 69, 83, 85, 82, 65, 128, 67, - 65, 68, 85, 67, 69, 85, 83, 128, 67, 65, 68, 193, 67, 65, 65, 73, 128, - 67, 193, 67, 45, 83, 73, 77, 80, 76, 73, 70, 73, 69, 196, 67, 45, 51, 57, + 76, 73, 128, 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, 69, 88, + 128, 67, 69, 82, 69, 83, 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, 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, 69, 69, 128, + 67, 67, 72, 69, 128, 67, 67, 72, 65, 65, 128, 67, 67, 72, 65, 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, 84, 65, 87, 65, 128, 67, + 65, 84, 128, 67, 65, 83, 84, 76, 69, 128, 67, 65, 82, 89, 83, 84, 73, 65, + 206, 67, 65, 82, 84, 128, 67, 65, 82, 82, 73, 65, 71, 197, 67, 65, 82, + 80, 69, 78, 84, 82, 217, 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, 128, 67, 65, 210, 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, 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, 76, 89, 65, 128, 67, 65, 76, 89, 193, 67, 65, 76, 76, 128, 67, + 65, 76, 67, 128, 67, 65, 75, 82, 65, 128, 67, 65, 69, 83, 85, 82, 65, + 128, 67, 65, 68, 85, 67, 69, 85, 83, 128, 67, 65, 68, 193, 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, 69, 76, 79, 82, 85, 83, 83, 73, 65, 78, 45, 85, 75, 82, 65, 73, 78, 73, 65, 206, 66, 217, 66, 88, 71, 128, 66, 87, 73, 128, 66, 87, 69, 69, 128, @@ -3250,167 +3741,178 @@ 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, 128, 66, 82, 65, - 78, 67, 200, 66, 82, 65, 75, 67, 69, 84, 128, 66, 82, 65, 67, 75, 69, - 212, 66, 82, 65, 67, 69, 128, 66, 81, 128, 66, 79, 87, 84, 73, 69, 128, - 66, 79, 87, 84, 73, 197, 66, 79, 87, 128, 66, 79, 215, 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, 82, 85, 84, - 79, 128, 66, 79, 79, 77, 69, 82, 65, 78, 71, 128, 66, 79, 78, 69, 128, - 66, 79, 76, 212, 66, 79, 68, 89, 128, 66, 79, 65, 84, 128, 66, 79, 65, - 82, 128, 66, 79, 65, 128, 66, 76, 85, 69, 128, 66, 76, 79, 79, 68, 128, - 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, 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, 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, - 65, 66, 73, 65, 204, 66, 73, 71, 128, 66, 73, 199, 66, 73, 69, 84, 128, - 66, 73, 68, 69, 78, 84, 65, 204, 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, 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, 84, 128, 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, - 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, 73, 84, 72, 128, 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, 206, 66, 69, 70, 79, 82, - 197, 66, 69, 69, 84, 65, 128, 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, 84, 128, 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, 84, 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, 128, 66, 66, 65, 88, 128, 66, - 66, 65, 84, 128, 66, 66, 65, 80, 128, 66, 66, 65, 128, 66, 65, 89, 65, - 78, 78, 65, 128, 66, 65, 84, 72, 84, 85, 66, 128, 66, 65, 84, 72, 65, 77, - 65, 83, 65, 84, 128, 66, 65, 83, 83, 65, 128, 66, 65, 83, 72, 75, 73, - 210, 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, 65, 50, 128, 66, 65, 210, 66, 65, 78, 84, 79, 67, 128, 66, - 65, 78, 203, 66, 65, 78, 68, 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, 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, 65, 82, 50, 128, 66, 65, 71, 65, 128, - 66, 65, 71, 51, 128, 66, 65, 199, 66, 65, 68, 71, 69, 82, 128, 66, 65, - 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, 45, - 84, 73, 76, 84, 69, 196, 66, 65, 67, 75, 128, 66, 65, 67, 203, 66, 65, - 65, 82, 69, 82, 85, 128, 66, 65, 65, 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, 185, 66, 48, 48, 184, 66, 48, 48, 183, 66, 48, 48, 182, 66, - 48, 48, 181, 66, 48, 48, 180, 66, 48, 48, 179, 66, 48, 48, 178, 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, 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, 83, 84, 82, 65, 204, 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, 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, 72, 65, 80, 65, 83, 67, 65, 206, 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, 76, 79, 71, 73, 67, 65, 204, 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, 69, 196, 65, 83, 72, 71, - 65, 66, 128, 65, 83, 72, 57, 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, 65, 66, 197, 65, 82, 83, 69, 79, - 83, 128, 65, 82, 83, 69, 79, 211, 65, 82, 82, 79, 87, 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, 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, + 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, 79, 87, 84, 73, 69, 128, 66, 79, 87, 84, 73, 197, 66, 79, 87, + 128, 66, 79, 215, 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, 82, 85, 84, 79, 128, 66, 79, 79, 77, 69, 82, 65, + 78, 71, 128, 66, 79, 78, 69, 128, 66, 79, 76, 212, 66, 79, 68, 89, 128, + 66, 79, 65, 82, 128, 66, 79, 65, 128, 66, 76, 85, 69, 128, 66, 76, 79, + 79, 68, 128, 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, 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, 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, 65, 66, 73, 65, 204, 66, 73, 71, 128, 66, 73, 199, 66, + 73, 69, 84, 128, 66, 73, 68, 69, 78, 84, 65, 204, 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, 77, 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, 84, + 128, 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, 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, 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, 206, 66, 69, 70, 79, 82, 197, + 66, 69, 69, 84, 65, 128, 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, 128, 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, 84, 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, 128, 66, 66, + 65, 88, 128, 66, 66, 65, 84, 128, 66, 66, 65, 80, 128, 66, 66, 65, 128, + 66, 65, 89, 65, 78, 78, 65, 128, 66, 65, 85, 128, 66, 65, 84, 72, 84, 85, + 66, 128, 66, 65, 84, 72, 65, 77, 65, 83, 65, 84, 128, 66, 65, 83, 83, 65, + 128, 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, 65, 50, 128, 66, 65, 210, 66, 65, 78, + 84, 79, 67, 128, 66, 65, 78, 203, 66, 65, 78, 68, 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, 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, 71, 65, + 128, 66, 65, 71, 51, 128, 66, 65, 199, 66, 65, 68, 71, 69, 82, 128, 66, + 65, 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, + 45, 84, 73, 76, 84, 69, 196, 66, 65, 67, 75, 128, 66, 65, 67, 203, 66, + 65, 65, 82, 69, 82, 85, 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, 83, 84, 82, 65, 204, 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, 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, 65, 82, 86, 65, 86, 69, 68, 73, 195, + 65, 84, 72, 65, 80, 65, 83, 67, 65, 206, 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, 76, + 79, 71, 73, 67, 65, 204, 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, 69, 196, 65, 83, 80, 69, 82, 128, 65, 83, 72, 71, 65, + 66, 128, 65, 83, 72, 57, 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, 65, 66, 197, 65, 82, 83, 69, 79, 83, + 128, 65, 82, 83, 69, 79, 211, 65, 82, 82, 79, 87, 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, 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, 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, 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, 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, 68, - 128, 65, 82, 65, 196, 65, 82, 65, 66, 73, 67, 45, 73, 78, 68, 73, 195, - 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, 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, 79, 84, 72, 69, 83, 128, 65, 80, 79, 84, 72, 69, 77, 65, + 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, 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, 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, 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, @@ -3418,45 +3920,52 @@ 65, 80, 73, 78, 128, 65, 80, 69, 83, 207, 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, 84, 73, 82, 69, 83, 84, 82, 73, 67, - 84, 73, 79, 78, 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, 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, 75, 72, 128, 65, 78, 72, 85, 128, - 65, 78, 71, 85, 76, 65, 82, 128, 65, 78, 71, 83, 84, 82, 79, 205, 65, 78, - 71, 75, 72, 65, 78, 75, 72, 85, 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, 77, 80, 83, 128, 65, 77, 80, 69, 82, 83, 65, 78, 68, 128, 65, 77, 79, - 85, 78, 212, 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, 76, 86, 69, 79, 76, 65, - 210, 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, 76, 79, 128, 65, 76, 76, 73, - 65, 78, 67, 69, 128, 65, 76, 76, 201, 65, 76, 76, 65, 200, 65, 76, 73, - 71, 78, 69, 196, 65, 76, 73, 70, 85, 128, 65, 76, 71, 73, 218, 65, 76, - 70, 65, 128, 65, 76, 69, 85, 212, 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, 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, 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, 82, 80, 76, 65, 78, 69, 128, 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, - 71, 71, 65, 210, 65, 72, 65, 68, 128, 65, 71, 79, 71, 201, 65, 71, 71, - 82, 65, 86, 65, 84, 73, 79, 78, 128, 65, 71, 65, 73, 78, 128, 65, 70, 84, - 69, 210, 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, 69, 89, 65, 78, - 78, 65, 128, 65, 69, 83, 67, 85, 76, 65, 80, 73, 85, 83, 128, 65, 69, 83, - 67, 128, 65, 69, 76, 65, 45, 80, 73, 76, 76, 65, 128, 65, 69, 69, 89, 65, - 78, 78, 65, 128, 65, 69, 68, 65, 45, 80, 73, 76, 76, 65, 128, 65, 197, - 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, 65, 75, 128, 65, 68, 65, + 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, 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, 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, 72, 85, 128, 65, 78, 71, 85, 76, 65, 82, 128, + 65, 78, 71, 83, 84, 82, 79, 205, 65, 78, 71, 75, 72, 65, 78, 75, 72, 85, + 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, 66, + 193, 65, 77, 65, 82, 128, 65, 77, 65, 210, 65, 77, 65, 76, 71, 65, 77, + 65, 84, 73, 79, 206, 65, 76, 86, 69, 79, 76, 65, 210, 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, 76, 79, 128, 65, 76, 76, 73, 65, 78, 67, 69, 128, 65, + 76, 76, 201, 65, 76, 76, 65, 200, 65, 76, 73, 71, 78, 69, 196, 65, 76, + 73, 70, 85, 128, 65, 76, 71, 73, 218, 65, 76, 70, 65, 128, 65, 76, 69, + 85, 212, 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, 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, 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, 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, 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, + 69, 89, 65, 78, 78, 65, 128, 65, 69, 89, 128, 65, 69, 84, 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, 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, 197, 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, 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, @@ -3468,11856 +3977,13280 @@ 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, 77, 128, 65, 65, 75, 128, 65, 65, 74, 128, 65, 65, 66, 65, - 65, 70, 73, 76, 73, 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, 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, }; -static unsigned short lexicon_offset[] = { - 0, 0, 6, 10, 15, 23, 27, 34, 39, 41, 44, 50, 63, 75, 84, 90, 95, 103, - 112, 116, 121, 129, 134, 137, 144, 149, 157, 163, 169, 177, 184, 194, - 199, 202, 209, 212, 217, 226, 232, 241, 248, 255, 260, 264, 273, 281, - 282, 288, 294, 302, 308, 314, 320, 328, 333, 340, 344, 347, 349, 355, - 362, 369, 377, 380, 385, 390, 396, 398, 403, 412, 419, 425, 286, 430, - 432, 434, 438, 443, 446, 452, 456, 464, 474, 481, 113, 490, 498, 503, - 511, 516, 524, 535, 538, 542, 555, 565, 571, 574, 575, 582, 584, 593, - 301, 596, 600, 608, 613, 615, 619, 622, 628, 635, 642, 647, 651, 660, - 670, 679, 688, 692, 698, 706, 713, 721, 725, 731, 735, 743, 752, 756, - 627, 763, 771, 775, 784, 789, 792, 796, 804, 813, 816, 821, 831, 840, - 847, 200, 733, 850, 857, 580, 865, 873, 879, 884, 891, 894, 900, 906, - 911, 916, 929, 22, 934, 937, 947, 952, 956, 962, 971, 974, 984, 993, 997, - 1002, 1007, 1012, 1019, 1027, 1030, 1040, 1043, 1045, 1053, 1057, 1061, - 93, 1064, 1069, 1075, 1077, 1086, 1089, 1092, 1097, 1099, 1105, 1111, - 1113, 1117, 331, 1120, 1128, 1132, 1136, 1141, 1144, 1150, 1154, 1161, - 1164, 1170, 80, 1176, 1178, 1181, 1183, 657, 1188, 1196, 1203, 1213, - 1222, 1230, 1232, 1237, 1242, 1248, 1253, 1258, 1262, 1267, 1273, 1278, - 1283, 1287, 1292, 1297, 1301, 1306, 1311, 1316, 1322, 1328, 1334, 1339, - 1343, 1348, 1353, 1358, 1362, 1367, 1372, 1377, 1382, 1233, 1238, 1243, - 1249, 1254, 1386, 1259, 1392, 1401, 1263, 1405, 1268, 1274, 1279, 1409, - 1414, 1419, 1423, 1427, 1433, 1437, 1284, 1440, 1444, 1288, 1450, 1293, - 1454, 1458, 1298, 1462, 1467, 1471, 1474, 1478, 1302, 1307, 1312, 1483, - 1489, 1495, 1501, 1317, 1329, 1335, 1505, 1509, 1513, 1516, 1340, 1520, - 1522, 1527, 1532, 1538, 1543, 1548, 1552, 1557, 1562, 1567, 1572, 1578, - 1583, 1588, 1594, 1600, 1605, 1609, 1614, 1619, 1624, 1629, 1633, 1641, - 1645, 1650, 1655, 1660, 1665, 1669, 1672, 1677, 1682, 1687, 1692, 1698, - 1703, 1707, 1344, 1710, 1715, 1720, 1349, 1724, 1728, 1735, 1354, 1742, - 1359, 1746, 1748, 1754, 1363, 1759, 1768, 1368, 1773, 1779, 1373, 1784, - 1789, 1792, 1797, 1801, 1805, 1809, 1812, 1378, 1383, 950, 1816, 1818, - 1819, 1823, 1827, 1832, 1836, 1840, 1844, 1847, 1852, 1856, 1861, 1865, - 1869, 1874, 1878, 1881, 1885, 1899, 1903, 1907, 1910, 1915, 1919, 1923, - 1928, 1933, 1938, 1942, 1947, 1951, 1956, 1963, 1969, 1974, 1979, 1985, - 1990, 1995, 1998, 1250, 2000, 2007, 2015, 2025, 2034, 2048, 2052, 2065, - 2073, 2077, 2082, 2086, 2090, 2095, 2100, 2104, 2107, 2111, 2118, 2125, - 2131, 2136, 2141, 2144, 2146, 2149, 2155, 2159, 2164, 2168, 2172, 1750, - 1756, 2177, 2181, 2184, 2189, 2194, 2199, 2203, 2210, 2215, 2218, 2225, - 2231, 2235, 2239, 2243, 2249, 2255, 2269, 2286, 2295, 2300, 2304, 2309, - 2314, 2318, 2330, 2336, 1959, 2342, 2345, 2352, 2356, 2360, 2364, 1966, - 2368, 2373, 2378, 2382, 2390, 2394, 2398, 2402, 2407, 2412, 2417, 2421, - 2426, 2431, 2435, 2440, 2444, 2447, 2451, 2455, 2460, 2464, 2468, 2477, - 2481, 2485, 2491, 2496, 2503, 2507, 2511, 2516, 2520, 2525, 2531, 2536, - 2540, 2121, 2544, 2549, 2555, 2560, 2564, 2569, 2574, 2578, 2584, 2589, - 2595, 2599, 2605, 2610, 1260, 62, 2616, 2620, 2624, 2628, 2633, 2637, - 2641, 2645, 2649, 2654, 2658, 2663, 2667, 2670, 2674, 2679, 2683, 2688, - 2692, 2696, 2701, 2705, 2708, 2721, 2725, 2729, 2733, 2737, 2741, 2744, - 2748, 2752, 2757, 2761, 2766, 2771, 2776, 2780, 2783, 2786, 2792, 2796, - 2800, 2803, 2807, 2811, 1059, 445, 2814, 2819, 2823, 2826, 2831, 2836, - 2840, 2845, 2849, 2852, 2858, 2865, 2871, 2876, 2880, 2885, 2889, 2899, - 2903, 2907, 2912, 2917, 2927, 1848, 2932, 2936, 2939, 2945, 2952, 2956, - 648, 790, 2960, 2967, 2973, 2978, 2984, 2989, 1857, 2993, 485, 2999, - 3010, 1862, 3014, 3019, 3034, 3040, 3047, 3057, 3063, 3068, 3074, 3077, - 3081, 3088, 3093, 3097, 3101, 3105, 3109, 3114, 3120, 2675, 3125, 3137, - 1554, 3144, 3147, 3151, 3155, 3158, 3162, 3167, 3171, 3175, 3181, 3187, - 3192, 3198, 3202, 3210, 3220, 3226, 3231, 3240, 3248, 3255, 3259, 3268, - 3272, 3277, 3282, 3286, 3294, 3299, 3303, 1870, 1402, 318, 402, 3309, - 3315, 3319, 3323, 3328, 3332, 3336, 3339, 3343, 3347, 3351, 3356, 3360, - 3364, 3306, 3370, 3377, 3381, 3394, 3398, 3402, 3406, 3410, 3414, 3420, - 3427, 3431, 3439, 3448, 3454, 3459, 3462, 3466, 3470, 3480, 3490, 3498, - 3505, 3512, 3518, 3524, 3531, 3535, 3540, 3544, 3552, 3557, 3565, 3570, - 3575, 3579, 3584, 3591, 3594, 3598, 3602, 3605, 3611, 3617, 3621, 3632, - 3642, 3657, 3672, 3687, 3702, 3717, 3732, 3747, 3762, 3777, 3792, 3807, - 3822, 3837, 3852, 3867, 3882, 3897, 3912, 3927, 3942, 3957, 3972, 3987, - 4002, 4017, 4032, 4047, 4062, 4077, 4092, 4107, 4122, 4137, 4152, 4167, - 4182, 4197, 4212, 4227, 4242, 4257, 4272, 4287, 4302, 4317, 4332, 4347, - 4362, 4377, 4386, 4395, 4400, 4406, 4410, 4415, 4419, 4422, 4426, 4429, - 4434, 285, 388, 4440, 4448, 4452, 4456, 4459, 4465, 4469, 4477, 4483, - 4488, 4495, 4502, 4508, 4513, 4520, 4526, 4530, 4535, 4542, 4548, 2693, - 4458, 4552, 4556, 4560, 4563, 4570, 4573, 4581, 4586, 4591, 4582, 4583, - 4596, 4602, 4608, 4613, 4618, 4625, 4630, 4634, 4637, 4641, 1904, 454, - 4645, 4649, 4654, 4660, 4665, 4669, 4672, 4676, 4681, 4685, 4692, 4696, - 4700, 4704, 913, 633, 4707, 4715, 4722, 4729, 4735, 4742, 4750, 4757, - 4764, 4769, 4781, 1280, 1410, 1415, 4792, 1420, 4796, 4800, 4809, 4818, - 4824, 4829, 4833, 4839, 4844, 4848, 4857, 4866, 4875, 4884, 4889, 4894, - 4906, 2846, 4910, 4912, 4917, 4921, 4930, 4938, 1424, 4919, 4944, 4948, - 4951, 4955, 4964, 4970, 4975, 4978, 4987, 4993, 5001, 5005, 5009, 5012, - 5017, 5024, 5030, 5033, 5035, 5038, 5046, 5054, 5057, 5062, 4593, 5065, - 1964, 1970, 5067, 5075, 1991, 5080, 5084, 5089, 5093, 5097, 5101, 5106, - 5110, 5115, 5119, 5122, 5125, 5131, 5137, 5143, 5149, 5155, 5161, 5167, - 5171, 5175, 5179, 5183, 5187, 5192, 5200, 5210, 5215, 5219, 5230, 5243, - 5254, 5267, 5278, 5290, 5302, 5314, 5327, 5340, 5347, 5353, 5360, 5366, - 5370, 5375, 5379, 5386, 5394, 5398, 5404, 5414, 5418, 5423, 5430, 5436, - 4737, 5446, 5450, 5457, 632, 5461, 5465, 5470, 5475, 5480, 5484, 5490, - 5494, 5498, 5504, 5509, 5513, 1896, 5519, 5527, 5536, 5540, 5546, 5551, - 5556, 5561, 5567, 5572, 3177, 5577, 5581, 5586, 5591, 5541, 5596, 5600, - 5607, 5613, 5618, 5622, 5627, 5631, 5640, 5020, 5645, 2404, 5649, 5654, - 5659, 5547, 5663, 5552, 5557, 5668, 5675, 5682, 5688, 5694, 5700, 5705, - 5710, 5715, 5562, 5568, 5721, 5727, 5732, 5573, 5737, 1115, 5740, 5748, - 5754, 5760, 5769, 5774, 5789, 5806, 5825, 5834, 5842, 5857, 5867, 5877, - 5883, 5895, 5904, 5912, 5919, 5926, 5932, 5937, 5945, 5955, 5962, 5972, - 5982, 5992, 6001, 6011, 6025, 6040, 6049, 6057, 6062, 6066, 6075, 6085, - 6095, 6105, 6110, 6114, 6123, 6133, 6144, 6157, 6170, 6182, 6187, 6193, - 6196, 6200, 6205, 6209, 6217, 6226, 6234, 6241, 6252, 6256, 6259, 6265, - 6269, 6275, 6282, 6287, 6294, 6301, 6308, 6315, 6322, 6329, 6334, 5802, - 6339, 6348, 6352, 6364, 6368, 6371, 6375, 6379, 6383, 6387, 6392, 6397, - 6402, 6408, 6413, 6418, 5426, 6423, 6427, 6431, 6435, 6440, 6445, 6451, - 6455, 6463, 6467, 6470, 6476, 6483, 6487, 6490, 6495, 3205, 6501, 6509, - 6515, 5441, 6520, 6525, 6529, 6542, 6556, 6563, 6569, 6573, 6578, 6584, - 6589, 4853, 6594, 6597, 6602, 6606, 2409, 802, 6612, 6616, 6622, 6628, - 6633, 6638, 6646, 6652, 6665, 6673, 6677, 6685, 6692, 6704, 6714, 6721, - 6728, 6737, 6746, 6754, 6760, 6765, 6770, 6776, 5582, 6781, 6784, 6791, - 6797, 6810, 6821, 6828, 6834, 6843, 6851, 6858, 6864, 6870, 6875, 6879, - 6884, 6890, 6898, 5587, 6905, 6910, 6917, 6923, 6928, 6936, 6944, 6951, - 6955, 6969, 6979, 6984, 6988, 6999, 7005, 7010, 7015, 7019, 5592, 7024, - 7027, 7039, 7046, 7051, 7055, 7060, 7064, 7071, 7077, 7084, 5542, 7089, - 2414, 8, 7096, 7101, 7105, 7111, 7122, 7132, 7141, 7153, 7158, 7162, - 7170, 7184, 7188, 7191, 7199, 7206, 7214, 7218, 7229, 7233, 7240, 7245, - 7249, 7254, 7258, 7262, 7265, 7271, 7277, 7284, 7294, 7303, 7310, 5601, - 5608, 5614, 5619, 7316, 5623, 7322, 7325, 7332, 7347, 7363, 7378, 897, - 383, 7383, 7391, 7398, 7404, 7409, 7414, 5632, 7416, 7420, 7430, 7435, - 7439, 7448, 7452, 7455, 7462, 7466, 7469, 7477, 7484, 7492, 7496, 7500, - 7506, 7510, 7514, 7518, 7524, 7528, 7535, 7539, 7544, 7548, 7555, 7561, - 7569, 7575, 7585, 7590, 7595, 7599, 7607, 3131, 7615, 7620, 7624, 7628, - 7631, 7639, 7646, 7650, 7655, 7659, 7670, 7676, 7680, 7683, 7690, 5641, - 7695, 7699, 1712, 3563, 606, 133, 7706, 7710, 7715, 7720, 7724, 7728, - 7732, 7737, 7741, 7746, 7750, 7753, 7757, 7761, 7766, 7776, 7782, 7786, - 7790, 7797, 7805, 7814, 7825, 7832, 7839, 7848, 7857, 7866, 7875, 7884, - 7893, 7903, 7913, 7923, 7933, 7943, 7952, 7962, 7972, 7982, 7992, 8002, - 8012, 8022, 8031, 8041, 8051, 8061, 8071, 8081, 8091, 8100, 8110, 8120, - 8130, 8140, 8150, 8160, 8170, 8180, 8190, 8199, 8209, 8219, 8229, 8239, - 8249, 8259, 8269, 8279, 8289, 8299, 8308, 8314, 8318, 8321, 8325, 8330, - 8337, 8343, 8348, 8352, 8357, 8361, 8365, 5650, 8371, 8376, 8385, 5655, - 8390, 5660, 8393, 8397, 8401, 8411, 8416, 8425, 8433, 8440, 8445, 8452, - 8457, 8461, 8464, 8475, 8485, 8494, 8502, 8513, 8525, 8535, 8539, 8544, - 8549, 8553, 8558, 8562, 8565, 8572, 8582, 8591, 8598, 8602, 8608, 8613, - 8618, 8622, 8631, 8636, 8642, 8647, 8651, 8660, 8668, 8676, 8683, 8691, - 8703, 8714, 8724, 8731, 8737, 8746, 8757, 8766, 8775, 8783, 8790, 8799, - 8807, 4610, 8811, 8813, 8818, 8824, 8832, 8839, 8848, 8857, 8866, 8875, - 8884, 8893, 8902, 8911, 8921, 8931, 8940, 8954, 8961, 8969, 8978, 8984, - 8993, 9001, 9010, 9023, 9031, 9038, 9051, 9057, 9066, 9075, 9080, 9084, - 9090, 9096, 9103, 5440, 9108, 9113, 9120, 9125, 9130, 9134, 9140, 9148, - 9156, 9163, 9171, 9179, 9184, 9190, 9195, 9199, 9210, 9218, 9224, 9229, - 9238, 9244, 9249, 9258, 9272, 3090, 9276, 9281, 9286, 9292, 9297, 9302, - 9306, 9311, 9316, 4609, 9321, 9326, 9331, 9336, 9340, 9345, 9350, 9355, - 9361, 9367, 9372, 9376, 9381, 9386, 5664, 9391, 9396, 9401, 9406, 9418, - 9428, 9439, 9450, 9461, 9473, 9484, 9495, 9506, 9517, 9522, 2062, 9526, - 9529, 9535, 9543, 9551, 9556, 9564, 9572, 9579, 9586, 9591, 9597, 9604, - 9612, 9619, 9631, 9636, 7341, 9642, 9651, 9658, 9664, 9672, 9679, 9686, - 9692, 9701, 9708, 9716, 9722, 9729, 9737, 9742, 2893, 1081, 9749, 9322, - 9752, 9758, 9762, 9774, 9779, 9786, 9792, 9797, 9327, 9332, 9801, 9805, - 9809, 9817, 9824, 9831, 9848, 9852, 9855, 9863, 2949, 9867, 9869, 9877, - 9887, 9893, 9898, 9902, 9908, 9913, 9916, 9923, 9929, 9935, 9940, 9947, - 9953, 9958, 9965, 9971, 9978, 9984, 9990, 9996, 10004, 10010, 10016, - 10021, 10028, 10033, 10037, 10042, 10049, 10054, 10060, 10063, 10067, - 10079, 10085, 10090, 10097, 10103, 10109, 10118, 10126, 10133, 10143, - 10153, 10161, 9346, 10164, 9351, 10172, 10184, 10197, 10212, 10223, - 10241, 10252, 10265, 10276, 10287, 10299, 10312, 10323, 10334, 10345, - 2264, 10358, 10362, 10370, 10381, 10388, 10394, 10398, 10404, 10407, - 10417, 10425, 10432, 10440, 10445, 10450, 10457, 10463, 10468, 10473, - 10477, 10481, 10487, 10493, 10498, 10503, 10508, 10512, 9356, 9362, 9368, - 10516, 10524, 10533, 10540, 5558, 10544, 10546, 10551, 10556, 10562, - 10567, 10572, 10577, 10581, 10587, 10592, 10598, 10603, 10608, 10614, - 10619, 10624, 10629, 10635, 10640, 10645, 10651, 10657, 10662, 10669, - 10676, 10681, 10685, 10689, 10692, 10700, 10705, 10710, 10720, 10725, - 10732, 10738, 10748, 10762, 10776, 10790, 10804, 10819, 10834, 10851, - 10869, 10882, 10888, 10893, 10898, 10904, 10909, 10914, 10918, 10922, - 10927, 10931, 10937, 10942, 10947, 10951, 10956, 10963, 10968, 10972, - 10978, 10983, 10988, 10992, 10998, 11003, 11008, 11015, 11020, 11024, - 11028, 11033, 11038, 11044, 11049, 11058, 11066, 11073, 11080, 11086, - 11092, 11097, 11102, 11108, 11113, 11119, 11124, 11130, 11136, 11143, - 11149, 11154, 11159, 5706, 11168, 11171, 11177, 11182, 11192, 11199, - 11204, 11210, 11215, 11221, 11226, 11232, 11237, 11245, 11252, 11257, - 11263, 11267, 11276, 11287, 11294, 11302, 11308, 11315, 11321, 11326, - 11330, 11336, 11341, 11346, 11351, 5711, 4626, 2428, 11355, 11359, 11363, - 11367, 11371, 11374, 11381, 11389, 9377, 11396, 11406, 11414, 11421, - 11431, 11440, 8490, 8499, 11445, 11455, 11470, 11476, 11483, 11490, - 11496, 11506, 11516, 9382, 11525, 11531, 11537, 11545, 11553, 11558, - 11567, 11575, 11587, 11597, 11607, 11617, 11626, 11638, 11648, 11658, - 11669, 11674, 11686, 11698, 11710, 11722, 11734, 11746, 11758, 11770, - 11782, 11794, 11805, 11817, 11829, 11841, 11853, 11865, 11877, 11889, - 11901, 11913, 11925, 11936, 11948, 11960, 11972, 11984, 11996, 12008, - 12020, 12032, 12044, 12056, 12067, 12079, 12091, 12103, 12115, 12127, - 12139, 12151, 12163, 12175, 12187, 12198, 12210, 12222, 12234, 12246, - 12258, 12270, 12282, 12294, 12306, 12318, 12329, 12341, 12353, 12365, - 12377, 12389, 12401, 12413, 12425, 12437, 12449, 12460, 12472, 12484, - 12496, 12508, 12520, 12532, 12544, 12556, 12568, 12580, 12591, 12603, - 12615, 12627, 12639, 12652, 12665, 12678, 12691, 12704, 12717, 12730, - 12742, 12755, 12768, 12781, 12794, 12807, 12820, 12833, 12846, 12859, - 12872, 12884, 12897, 12910, 12923, 12936, 12949, 12962, 12975, 12988, - 13001, 13014, 13026, 13039, 13052, 13065, 13078, 13091, 13104, 13117, - 13130, 13143, 13156, 13168, 13181, 13194, 13207, 13220, 13233, 13246, - 13259, 13272, 13285, 13298, 13310, 13323, 13336, 13349, 13362, 13375, - 13388, 13401, 13414, 13427, 13440, 13452, 13463, 13476, 13489, 13502, - 13515, 13528, 13541, 13554, 13567, 13580, 13593, 13605, 13618, 13631, - 13644, 13657, 13670, 13683, 13696, 13709, 13722, 13735, 13747, 13760, - 13773, 13786, 13799, 13812, 13825, 13838, 13851, 13864, 13877, 13889, - 13902, 13915, 13928, 13941, 13954, 13967, 13980, 13993, 14006, 14019, - 14031, 14044, 14057, 14070, 14083, 14096, 14109, 14122, 14135, 14148, - 14161, 14173, 14186, 14199, 14212, 14225, 14238, 14251, 14264, 14277, - 14290, 14303, 14315, 14328, 14341, 14354, 14367, 14380, 14393, 14406, - 14419, 14432, 14445, 14457, 14470, 14483, 14496, 14509, 14522, 14535, - 14548, 14561, 14574, 14587, 14599, 14612, 14625, 14638, 14651, 14664, - 14677, 14690, 14703, 14716, 14729, 14741, 14754, 14767, 14780, 14793, - 14806, 14819, 14832, 14845, 14858, 14871, 14883, 14894, 14902, 14909, - 14915, 14919, 14925, 14931, 14939, 14945, 14950, 5563, 14954, 14961, - 14969, 14976, 14983, 6804, 14990, 14999, 15004, 4642, 15011, 15016, - 15021, 15029, 15036, 15043, 15049, 15058, 15067, 15073, 15078, 15086, - 15092, 15102, 15111, 15115, 15122, 15126, 15131, 15137, 15145, 15149, - 9392, 15158, 15162, 15168, 5410, 15175, 15181, 15186, 15190, 15194, 5941, - 15199, 15207, 15214, 15223, 15230, 15237, 15243, 15247, 15253, 15259, - 15267, 15273, 15280, 15286, 15295, 15303, 15312, 15317, 15328, 15333, - 15338, 15343, 4815, 15347, 15354, 15359, 15367, 15379, 15384, 15388, - 15391, 15397, 15403, 15408, 15412, 15415, 15426, 15431, 5733, 15438, - 5574, 5738, 15443, 15447, 111, 15455, 15459, 15463, 15467, 15472, 15476, - 15480, 7845, 15484, 15490, 15495, 15499, 15503, 15511, 15515, 15520, - 15525, 15529, 15535, 15540, 15544, 15549, 15554, 15558, 15565, 15569, - 15574, 15578, 15581, 15594, 15599, 15608, 15613, 15616, 2297, 2302, - 15620, 15626, 15631, 15636, 15641, 15647, 15652, 15657, 15661, 15666, - 15671, 15677, 15682, 15687, 15693, 15698, 15702, 15707, 15712, 15717, - 15721, 15726, 15731, 15736, 15741, 15745, 15749, 15754, 2437, 15703, - 15758, 15765, 6020, 15777, 15785, 15708, 15792, 15797, 15713, 15805, - 15810, 15815, 15820, 15824, 15829, 15832, 15836, 15842, 15847, 5432, - 1717, 1722, 15851, 15857, 15863, 15868, 15872, 15876, 15880, 15883, - 15889, 15896, 15904, 15910, 15916, 15921, 15926, 9614, 10139, 15930, - 15942, 15945, 15952, 15956, 15967, 15976, 15989, 15999, 16013, 16025, - 16039, 16049, 16055, 16073, 16092, 16105, 16119, 16135, 16146, 16163, - 16181, 16193, 16207, 16221, 16233, 16250, 16269, 16281, 16299, 16312, - 16326, 16346, 6536, 16358, 16363, 16368, 16374, 16379, 2079, 16383, - 16389, 16393, 16396, 16400, 16408, 16414, 15722, 16418, 16429, 16435, - 16441, 16450, 16457, 16464, 16470, 16479, 16487, 16497, 16502, 16511, - 16520, 16531, 16542, 16552, 16557, 16561, 16569, 16579, 16590, 16598, - 16605, 16611, 16616, 15732, 16620, 16629, 16634, 16643, 16651, 16661, - 16670, 16676, 16682, 15737, 15742, 16686, 16696, 958, 9568, 3031, 16705, - 16714, 16722, 16733, 16744, 16754, 16763, 16772, 16781, 16787, 16796, - 16804, 5718, 16810, 16813, 16817, 16822, 16827, 16835, 15750, 16839, - 16845, 16849, 16855, 16861, 2872, 16869, 16874, 16878, 16882, 16889, - 16893, 16901, 16907, 16912, 16916, 16921, 16927, 16938, 16943, 16947, - 16958, 16962, 16966, 16969, 16973, 16978, 16982, 16986, 829, 16990, 5, - 16996, 17000, 17004, 17008, 17013, 17017, 17021, 17025, 17029, 17034, - 17038, 17043, 17047, 17050, 17054, 17059, 17063, 17068, 17072, 17076, - 17080, 17085, 17089, 17093, 17103, 17108, 17112, 17116, 17121, 17126, - 17135, 17140, 17145, 17149, 17153, 17165, 17174, 17183, 17189, 17193, - 17203, 17212, 17220, 17226, 17230, 17237, 17247, 17256, 17264, 17272, - 17279, 17288, 17297, 17305, 17310, 17314, 17318, 17321, 17323, 17327, - 17331, 17336, 17340, 17344, 17347, 17351, 17354, 17358, 17361, 17365, - 17369, 17373, 17377, 17382, 17387, 17392, 17396, 17399, 17404, 17410, - 17415, 17421, 17426, 17430, 17434, 17438, 17443, 17447, 17452, 17456, - 17463, 17467, 17470, 17474, 17480, 17486, 17490, 17494, 17499, 17506, - 17512, 17516, 17525, 17529, 17533, 17536, 17542, 17547, 17553, 17558, - 1776, 2449, 17562, 17563, 17566, 17570, 17574, 17579, 17583, 17587, - 17590, 17595, 17599, 17602, 17607, 17611, 17616, 17620, 9587, 17625, - 17628, 17631, 17635, 17639, 17646, 17651, 17658, 17662, 17666, 17671, - 17676, 17680, 17685, 17697, 17708, 17712, 17715, 17721, 4743, 2001, - 17725, 17741, 5796, 17761, 17770, 17786, 17790, 17793, 17799, 17809, - 17815, 17830, 17842, 17853, 17861, 17870, 17876, 17885, 17895, 17906, - 17917, 17926, 17935, 17943, 17950, 17958, 17964, 17969, 17975, 17980, - 17988, 18000, 18012, 18026, 18033, 18042, 18051, 18059, 18067, 18075, - 18082, 18091, 18099, 18109, 18118, 18128, 18137, 18146, 18154, 18159, - 18163, 18166, 18170, 18174, 18178, 18184, 18190, 9632, 18195, 18207, - 18213, 6149, 18224, 18234, 18243, 18247, 18250, 18254, 18260, 18264, - 18269, 18278, 18285, 4784, 18292, 18300, 18307, 18313, 18318, 18324, - 18330, 18338, 18342, 18345, 18347, 18167, 18356, 18362, 18372, 18377, - 18383, 18388, 18393, 18398, 18405, 18414, 18423, 18429, 18434, 18440, - 18445, 18452, 18457, 18461, 18471, 18475, 18480, 18490, 18499, 18503, - 18510, 18516, 18521, 18528, 18532, 8380, 18540, 18547, 18554, 15531, - 18096, 18559, 18563, 18568, 18581, 18595, 18611, 18629, 18646, 18664, - 16152, 18681, 18693, 18707, 10228, 16169, 18719, 18731, 9444, 18745, - 18750, 18755, 18761, 18765, 18770, 18780, 18786, 6473, 18792, 18794, - 18799, 18807, 18811, 18401, 18817, 18824, 18834, 18839, 18843, 18846, - 18852, 18860, 18870, 10257, 18884, 18891, 18895, 18898, 18903, 18907, - 18917, 18922, 18927, 18935, 18944, 18949, 10262, 18953, 18956, 18959, - 18975, 18983, 18991, 18999, 19004, 19008, 19014, 19020, 19023, 19029, - 19041, 19048, 19055, 19069, 19082, 19091, 19103, 19114, 19123, 19132, - 19140, 19151, 4766, 19158, 19164, 19169, 19175, 19185, 19194, 19200, - 19205, 19212, 19224, 19231, 19240, 19248, 19254, 19260, 19265, 19269, - 19272, 19278, 19283, 19287, 19298, 19307, 19315, 19320, 19326, 9981, - 5169, 19331, 19334, 19337, 19343, 19351, 19359, 19363, 19368, 19371, - 19380, 19388, 19399, 19403, 19409, 19415, 19419, 19425, 19447, 19471, - 19478, 19484, 19495, 19513, 19520, 19524, 19533, 19546, 19554, 19566, - 19577, 19587, 19601, 19610, 19618, 19630, 5813, 19641, 19652, 19664, - 19674, 19683, 19688, 19692, 19700, 19705, 19709, 19712, 19720, 19728, - 19737, 19746, 2278, 19752, 19761, 19771, 19781, 19790, 19795, 19806, - 19817, 19821, 19831, 19840, 19850, 19860, 19868, 19877, 19884, 19892, - 19899, 19908, 19912, 19920, 19927, 19934, 19945, 19960, 19967, 19977, - 19986, 9070, 19992, 19997, 20001, 20009, 20015, 20024, 20029, 20039, - 1194, 20043, 1256, 583, 20046, 20055, 18106, 20062, 20067, 20071, 20077, - 1289, 444, 317, 20082, 20091, 20100, 20108, 20119, 20128, 20136, 20139, - 20147, 20155, 9600, 20160, 20166, 3399, 20171, 20175, 20181, 20185, - 20192, 1451, 20198, 5881, 20205, 20215, 20223, 20229, 20238, 20246, - 20254, 20261, 20268, 1486, 20275, 20281, 20292, 20303, 20311, 20318, - 20327, 20335, 20342, 20349, 20362, 20373, 20392, 1294, 20396, 20401, - 20409, 2908, 20413, 20418, 1455, 17345, 20428, 20432, 20437, 20441, 2854, - 20447, 20455, 2909, 239, 20463, 20471, 20479, 20486, 20492, 20497, 20504, - 20507, 20513, 18265, 20519, 88, 20523, 20527, 20533, 20538, 20544, 2012, - 20548, 20552, 20555, 20558, 20565, 20571, 15817, 2953, 10920, 20576, - 20579, 20587, 20590, 20602, 20607, 20611, 20619, 20626, 20632, 20639, - 20646, 20649, 20653, 20657, 1459, 20667, 2332, 2132, 20672, 20677, 20681, - 20686, 20691, 20697, 20702, 20707, 20711, 20716, 20722, 20727, 20732, - 20738, 20743, 20747, 20752, 20757, 20762, 20767, 20772, 20778, 20784, - 20789, 20793, 20798, 20802, 20807, 20812, 20817, 20821, 20826, 20831, - 20836, 20841, 20847, 20853, 20858, 20862, 20867, 20872, 20877, 20882, - 20887, 20891, 20896, 20901, 20906, 20910, 20915, 20923, 20929, 20935, - 20941, 20946, 20950, 20953, 20957, 20962, 20966, 20971, 20975, 20978, - 20983, 15226, 20202, 20988, 20992, 20997, 21001, 21004, 21007, 21011, - 21016, 21024, 21028, 21033, 21037, 21041, 21046, 21051, 21055, 21061, - 21066, 21073, 21080, 21084, 21087, 21093, 21102, 21109, 21113, 21118, - 21122, 21128, 21132, 21138, 7242, 10484, 21143, 21148, 21153, 21159, - 21164, 21169, 21173, 21178, 21183, 21189, 21194, 21199, 21203, 21208, - 21213, 21217, 21222, 21227, 21232, 21236, 21241, 21246, 21251, 21255, - 21259, 21263, 21272, 21278, 21284, 21293, 21301, 21306, 21310, 21317, - 21323, 21327, 21332, 21341, 21346, 1485, 21352, 21355, 21359, 15858, - 15864, 21365, 21369, 21380, 21391, 21403, 21410, 21417, 21422, 21426, - 14928, 626, 15225, 21434, 21438, 21443, 21449, 21454, 21460, 21465, - 21471, 21476, 2386, 2816, 21480, 21483, 21488, 21493, 21499, 21504, - 21509, 21513, 21518, 21524, 21529, 21534, 21540, 21545, 21549, 21554, - 21559, 21564, 21569, 21573, 21578, 21583, 21588, 21594, 21600, 21606, - 21611, 21615, 21620, 2969, 21624, 21627, 4825, 21631, 21637, 21644, 4834, - 21648, 21655, 21661, 21670, 21678, 21682, 21689, 21695, 21699, 21702, - 21711, 21719, 21723, 21733, 21743, 21749, 21759, 21764, 21777, 21791, - 21802, 21814, 21828, 21841, 21853, 9455, 21865, 21870, 21875, 21879, - 21883, 21887, 1765, 19112, 21891, 21896, 21901, 21905, 21908, 21914, - 21920, 6277, 10168, 21925, 21930, 21935, 21444, 21940, 21945, 21951, - 21450, 21956, 21959, 21455, 21964, 21970, 21976, 21461, 21981, 21986, - 21992, 21997, 22002, 22008, 22014, 22019, 22024, 22028, 22033, 22038, - 22043, 22051, 22055, 22060, 22065, 22069, 22074, 22079, 22084, 21466, - 21472, 22090, 2174, 224, 22093, 22096, 22100, 22104, 22112, 22119, 22126, - 22130, 22133, 22139, 22147, 22151, 22155, 22158, 22165, 22169, 22176, - 22184, 22192, 22199, 22203, 689, 271, 22215, 22220, 22225, 22231, 22236, - 2980, 22241, 22246, 22251, 22256, 22261, 15938, 22266, 22271, 22276, - 22281, 22287, 22292, 22296, 22301, 22306, 22311, 22315, 22320, 22325, - 15781, 2986, 22330, 22335, 22340, 22346, 22351, 22356, 22360, 22365, - 22370, 22376, 22381, 22386, 22390, 22395, 22400, 22405, 22409, 22414, - 22419, 22424, 22430, 22436, 22441, 22445, 22450, 22455, 22460, 22464, - 22472, 22478, 22482, 22489, 10815, 22495, 22502, 22510, 22517, 22523, - 22535, 22541, 22545, 22549, 22160, 22553, 22564, 22569, 22574, 22579, - 22583, 22588, 15869, 22592, 15239, 22597, 22602, 22608, 22613, 22617, - 22621, 22624, 22630, 22641, 22653, 22658, 22662, 22665, 2387, 300, 22669, - 22675, 26, 22680, 22684, 22688, 22696, 22700, 22704, 22707, 22712, 22716, - 22721, 22725, 22730, 22734, 22739, 22743, 22746, 22748, 22751, 22753, - 22757, 22769, 22778, 22782, 22788, 22793, 22799, 22804, 22809, 22813, - 22818, 22825, 22830, 22834, 22841, 18104, 18114, 22845, 22850, 22855, - 22860, 22864, 22871, 4913, 22877, 22886, 22894, 22909, 22923, 22931, - 22942, 22951, 22956, 22966, 22971, 22975, 22978, 22982, 22986, 22993, - 22998, 5401, 23008, 23010, 23013, 23017, 23021, 23026, 23032, 23037, - 23046, 23052, 23057, 23064, 23068, 23075, 23088, 23096, 23100, 23110, - 23115, 23119, 23123, 23129, 23134, 23144, 23153, 23164, 23172, 23183, - 23192, 23195, 23199, 23207, 23213, 23221, 23228, 23234, 2092, 23238, - 23240, 23245, 23250, 23253, 23255, 23259, 23262, 23266, 23270, 23276, - 23286, 23291, 23297, 23301, 23306, 23319, 18367, 23325, 23334, 11591, - 21729, 23341, 23346, 23350, 23358, 23365, 23370, 23374, 23378, 23386, - 23392, 23398, 23403, 23407, 23410, 23415, 16239, 23431, 23443, 23455, - 16256, 23469, 23481, 10281, 23495, 23500, 23505, 23509, 23516, 23528, - 23534, 23537, 23542, 23545, 23547, 23551, 23554, 23559, 23564, 23570, - 23575, 23580, 23586, 23592, 23597, 23601, 23606, 23611, 23616, 23620, - 23623, 23629, 23634, 23639, 23644, 23648, 23653, 23659, 23664, 23669, - 23675, 23680, 23685, 23690, 23695, 23700, 23704, 23707, 23713, 23717, - 23725, 23732, 23740, 23750, 23756, 23762, 23766, 23775, 23780, 23785, - 6511, 23790, 23797, 23803, 23808, 23816, 23820, 23823, 23834, 23841, - 23847, 23851, 23854, 23860, 23866, 23874, 20487, 23881, 23889, 23894, - 23900, 23905, 23909, 23916, 23922, 18380, 23931, 23936, 23944, 23952, - 5909, 3418, 23959, 23963, 23967, 23971, 23976, 23980, 23984, 23989, - 23993, 23997, 24001, 24005, 24009, 24012, 24014, 24022, 24026, 24033, - 24037, 24045, 24052, 24062, 24066, 24070, 24078, 24084, 8593, 24090, - 24099, 24106, 24114, 24122, 24130, 24137, 24144, 24151, 24158, 24165, - 24170, 24176, 24193, 24201, 24209, 24216, 416, 24220, 24226, 22947, - 24232, 24240, 24246, 24252, 24261, 24267, 2941, 15826, 24276, 24283, - 24288, 24292, 24299, 24307, 24316, 24326, 24332, 24340, 24349, 24357, - 15571, 24364, 24371, 24377, 24387, 24396, 24407, 24411, 24416, 24422, - 24428, 24433, 24446, 24459, 24472, 24479, 24485, 24490, 24494, 1465, 83, - 24498, 24500, 24504, 24508, 24512, 24517, 24521, 5849, 24525, 24531, - 3629, 24537, 24540, 24545, 24549, 24554, 24558, 24562, 24567, 6372, - 24571, 24575, 24579, 9954, 24584, 24588, 24593, 24598, 24603, 24607, - 18384, 24613, 24616, 24620, 24625, 24629, 24635, 24640, 24644, 24648, - 4945, 4949, 20605, 24651, 24659, 24666, 24670, 316, 24675, 24681, 24687, - 24691, 24700, 24704, 24709, 24714, 24718, 24724, 24729, 24744, 24759, - 24774, 24790, 24808, 19756, 24822, 24827, 24831, 23081, 24839, 24843, - 24852, 24860, 6072, 9756, 24864, 24867, 24870, 4926, 3111, 24875, 24883, - 24887, 24890, 24894, 24899, 24905, 24910, 24914, 24919, 24923, 24929, - 24933, 24940, 7550, 24944, 24950, 24957, 24964, 24971, 20095, 4862, - 24978, 24985, 24992, 24998, 25003, 25010, 25021, 25027, 25032, 25039, - 25043, 25047, 25057, 25063, 25068, 25073, 25078, 25083, 25087, 25091, - 25097, 2004, 711, 6388, 25106, 6393, 25111, 6398, 6403, 6409, 25116, - 25126, 25130, 6414, 25135, 25138, 25143, 25147, 25152, 25159, 25165, - 25175, 3444, 25184, 25188, 25192, 25202, 25213, 25219, 25225, 25230, - 25236, 25239, 25246, 25252, 25257, 25264, 25271, 25275, 25285, 25298, - 25307, 25316, 25327, 25340, 25349, 25354, 6419, 25359, 25367, 25372, - 4392, 21, 25379, 25384, 11012, 25388, 25391, 25394, 25398, 25406, 25410, - 25413, 25419, 25425, 25433, 25439, 25446, 25450, 25454, 19923, 25458, - 25467, 25473, 25478, 25482, 25490, 25496, 25501, 25506, 25510, 25516, - 25521, 25527, 3216, 25534, 25538, 25541, 9882, 25553, 25564, 25571, - 25577, 25581, 25587, 25592, 25598, 25603, 25607, 25612, 25617, 25627, - 25633, 25646, 25651, 25657, 16672, 1468, 855, 25662, 25668, 14, 25676, - 25683, 25687, 25691, 25699, 25703, 25708, 25712, 25719, 25724, 25728, - 25733, 25739, 25744, 25750, 25755, 25759, 25763, 25767, 25772, 25776, - 25781, 25785, 25792, 25797, 25801, 25806, 25810, 25815, 25819, 10029, - 10034, 25824, 25828, 25831, 25835, 25840, 25844, 25850, 25857, 25862, - 25872, 25877, 25885, 25889, 25892, 25896, 25901, 25906, 25910, 25915, - 8604, 25926, 25930, 25933, 25937, 25941, 25944, 25948, 4952, 8620, 25951, - 25954, 25959, 25963, 25972, 25988, 26004, 26014, 19742, 26021, 26025, - 26030, 26034, 26038, 26043, 26048, 26052, 26057, 26061, 18966, 26065, - 26070, 26074, 26081, 26089, 26095, 26102, 26108, 26112, 26118, 26126, - 26130, 26139, 5830, 26147, 26151, 26159, 26166, 26171, 26175, 26180, - 18556, 1142, 26184, 26191, 26197, 26202, 26205, 26207, 26214, 26221, - 26227, 26231, 26234, 26238, 26242, 26246, 26251, 26255, 26259, 26262, - 26266, 16287, 26285, 6549, 26298, 26304, 26308, 26312, 26319, 26325, - 26330, 26336, 26346, 26358, 26369, 26374, 26381, 26385, 26388, 10365, - 10050, 26396, 26400, 26404, 26409, 26414, 26418, 26422, 26425, 4599, - 19639, 26430, 26434, 26440, 24322, 26446, 26450, 26455, 26462, 26466, - 10304, 26469, 26476, 862, 26480, 26485, 26490, 26495, 26499, 26504, - 26510, 26515, 26521, 26526, 26536, 26541, 26546, 15604, 23800, 26551, - 26554, 26561, 26570, 26574, 26577, 26581, 604, 26586, 26592, 26596, - 26606, 26615, 26622, 26628, 26632, 26639, 26645, 26652, 26658, 26668, - 26676, 26682, 26688, 26693, 26697, 26704, 26710, 26717, 26247, 478, 1109, - 26723, 26728, 26731, 26737, 26745, 1397, 26750, 26754, 26761, 26767, - 26771, 26776, 26785, 26795, 26801, 26818, 26822, 26831, 26839, 26845, - 26850, 26857, 26863, 26871, 26876, 26884, 26903, 16332, 26917, 26933, - 26947, 26953, 26958, 26963, 26968, 26974, 26979, 26983, 26990, 26995, - 298, 2473, 27002, 27007, 19856, 26860, 27012, 27017, 27025, 27029, 27032, - 27038, 27042, 19827, 27045, 27049, 27052, 27057, 27061, 27066, 27071, - 27075, 27080, 27084, 27088, 27093, 27099, 18940, 27104, 27108, 10470, - 441, 43, 21484, 21489, 21494, 21500, 21505, 21510, 27111, 21514, 27115, - 21519, 21525, 27119, 21530, 21535, 27127, 27132, 21541, 27137, 27142, - 27147, 27152, 27158, 27164, 21546, 27177, 27183, 21550, 21555, 27187, - 21560, 21565, 27190, 27195, 27199, 21384, 27205, 8769, 27212, 27217, - 21570, 27221, 27226, 27231, 27236, 27240, 27245, 27250, 27256, 27261, - 27266, 27272, 27278, 27283, 27287, 27292, 27297, 27302, 27306, 27311, - 27316, 27321, 27327, 27333, 27339, 27344, 27348, 27353, 27357, 21574, - 21579, 21584, 27361, 27365, 21589, 21595, 21601, 21607, 27377, 18282, - 27381, 27385, 27390, 27395, 27399, 27409, 27414, 27419, 27423, 27427, - 27430, 27438, 21616, 1475, 27443, 27451, 27460, 27464, 27472, 27480, - 27496, 27501, 1739, 7688, 27505, 2509, 27517, 27518, 27526, 27533, 27538, - 27545, 1058, 6441, 27548, 27553, 27556, 27565, 1308, 27570, 27577, 27580, - 27585, 15917, 2207, 6642, 27589, 27595, 1210, 2032, 27604, 27613, 23287, - 6464, 3055, 1313, 27623, 27631, 27638, 27643, 27647, 27651, 16842, 6491, - 27659, 27668, 27677, 27685, 27692, 27697, 27710, 27723, 27735, 27747, - 27759, 27772, 27783, 27794, 27802, 27810, 27822, 27834, 27845, 27854, - 27862, 27869, 27881, 27888, 27897, 27904, 27914, 27919, 27925, 27930, - 27934, 27941, 27945, 27952, 27960, 2173, 27967, 27978, 27988, 27997, - 28005, 28015, 28023, 28033, 28039, 28050, 28060, 28069, 28078, 28088, - 28097, 1695, 37, 28102, 28113, 28124, 28134, 28141, 28147, 28152, 28156, - 28167, 28177, 28186, 28197, 10985, 10990, 28202, 28211, 28216, 28226, - 28231, 28239, 28247, 28254, 28260, 6526, 932, 28264, 28270, 28275, 28278, - 1858, 26401, 28286, 28290, 28293, 1502, 28299, 9035, 1318, 28304, 28317, - 28331, 2258, 28349, 28361, 2272, 28375, 28387, 28400, 28414, 28426, 2289, - 28440, 1324, 1330, 1336, 6595, 28445, 28450, 28455, 28459, 28474, 28489, - 28504, 28519, 28534, 28549, 28564, 28579, 28594, 28609, 28624, 28639, - 28654, 28669, 28684, 28699, 28714, 28729, 28744, 28759, 28774, 28789, - 28804, 28819, 28834, 28849, 28864, 28879, 28894, 28909, 28924, 28939, - 28954, 28969, 28984, 28999, 29014, 29029, 29044, 29059, 29074, 29089, - 29104, 29119, 29134, 29149, 29164, 29179, 29194, 29209, 29224, 29239, - 29254, 29269, 29284, 29299, 29314, 29329, 29344, 29359, 29374, 29389, - 29404, 29419, 29434, 29449, 29464, 29479, 29494, 29509, 29524, 29539, - 29554, 29569, 29584, 29599, 29614, 29629, 29644, 29659, 29674, 29689, - 29704, 29719, 29734, 29749, 29764, 29779, 29794, 29809, 29824, 29839, - 29854, 29869, 29884, 29899, 29914, 29929, 29944, 29959, 29974, 29989, - 30004, 30019, 30034, 30049, 30064, 30079, 30094, 30109, 30124, 30139, - 30154, 30169, 30184, 30199, 30214, 30229, 30244, 30259, 30274, 30289, - 30304, 30319, 30334, 30349, 30364, 30379, 30394, 30409, 30424, 30439, - 30454, 30469, 30484, 30499, 30514, 30529, 30544, 30559, 30574, 30589, - 30604, 30619, 30634, 30649, 30664, 30679, 30694, 30709, 30724, 30739, - 30754, 30769, 30784, 30799, 30814, 30829, 30844, 30859, 30874, 30889, - 30904, 30919, 30934, 30949, 30964, 30979, 30994, 31009, 31024, 31039, - 31054, 31069, 31084, 31099, 31114, 31129, 31144, 31159, 31174, 31189, - 31204, 31219, 31234, 31249, 31264, 31279, 31294, 31309, 31324, 31339, - 31354, 31369, 31384, 31399, 31414, 31429, 31444, 31459, 31474, 31489, - 31504, 31519, 31534, 31549, 31564, 31579, 31594, 31609, 31624, 31639, - 31654, 31669, 31684, 31699, 31714, 31729, 31744, 31759, 31774, 31789, - 31804, 31819, 31834, 31849, 31864, 31879, 31894, 31909, 31924, 31939, - 31954, 31969, 31984, 31999, 32014, 32029, 32044, 32059, 32074, 32089, - 32104, 32119, 32134, 32149, 32164, 32179, 32194, 32209, 32224, 32239, - 32254, 32269, 32284, 32299, 32314, 32329, 32344, 32359, 32374, 32389, - 32404, 32419, 32434, 32449, 32464, 32479, 32494, 32509, 32524, 32539, - 32554, 32569, 32584, 32599, 32614, 32629, 32644, 32659, 32674, 32689, - 32704, 32719, 32734, 32749, 32764, 32779, 32794, 32809, 32824, 32839, - 32854, 32869, 32884, 32899, 32914, 32929, 32944, 32959, 32974, 32989, - 33004, 33019, 33034, 33049, 33064, 33079, 33094, 33109, 33124, 33139, - 33154, 33169, 33184, 33199, 33214, 33229, 33244, 33259, 33274, 33289, - 33304, 33319, 33334, 33349, 33364, 33379, 33394, 33409, 33424, 33439, - 33454, 33469, 33484, 33499, 33514, 33529, 33544, 33559, 33574, 33589, - 33604, 33619, 33634, 33649, 33664, 33679, 33694, 33709, 33724, 33739, - 33754, 33769, 33784, 33799, 33814, 33829, 33844, 33859, 33874, 33889, - 33904, 33919, 33934, 33949, 33964, 33979, 33994, 34009, 34024, 34039, - 34054, 34069, 34084, 34099, 34114, 34129, 34144, 34159, 34174, 34189, - 34204, 34219, 34234, 34249, 34264, 34279, 34294, 34309, 34324, 34339, - 34354, 34369, 34384, 34399, 34414, 34429, 34444, 34459, 34474, 34489, - 34504, 34519, 34534, 34549, 34564, 34579, 34594, 34609, 34624, 34639, - 34654, 34669, 34684, 34699, 34714, 34729, 34744, 34759, 34774, 34789, - 34804, 34819, 34834, 34849, 34864, 34879, 34894, 34909, 34924, 34939, - 34954, 34969, 34984, 34999, 35014, 35029, 35044, 35059, 35074, 35089, - 35104, 35119, 35134, 35149, 35164, 35179, 35194, 35209, 35224, 35239, - 35254, 35269, 35284, 35299, 35314, 35329, 35344, 35359, 35374, 35389, - 35404, 35419, 35434, 35449, 35464, 35480, 35496, 35512, 35528, 35544, - 35560, 35576, 35592, 35608, 35624, 35640, 35656, 35672, 35688, 35704, - 35720, 35736, 35752, 35768, 35784, 35800, 35816, 35832, 35848, 35864, - 35880, 35896, 35912, 35928, 35944, 35960, 35976, 35992, 36008, 36024, - 36040, 36056, 36072, 36088, 36104, 36120, 36136, 36152, 36168, 36184, - 36200, 36216, 36232, 36248, 36264, 36280, 36296, 36312, 36328, 36344, - 36360, 36376, 36392, 36408, 36424, 36440, 36456, 36472, 36488, 36504, - 36520, 36536, 36552, 36568, 36584, 36600, 36616, 36632, 36648, 36664, - 36680, 36696, 36712, 36728, 36744, 36760, 36776, 36792, 36808, 36824, - 36840, 36856, 36872, 36888, 36904, 36920, 36936, 36952, 36968, 36984, - 37000, 37016, 37032, 37048, 37064, 37080, 37096, 37112, 37128, 37144, - 37160, 37176, 37192, 37208, 37224, 37240, 37256, 37272, 37288, 37304, - 37320, 37336, 37352, 37368, 37384, 37400, 37416, 37432, 37448, 37464, - 37480, 37496, 37512, 37528, 37544, 37560, 37576, 37592, 37608, 37624, - 37640, 37656, 37672, 37688, 37704, 37720, 37736, 37752, 37768, 37784, - 37800, 37816, 37832, 37848, 37864, 37880, 37896, 37912, 37928, 37944, - 37960, 37976, 37992, 38008, 38024, 38040, 38056, 38072, 38088, 38104, - 38120, 38136, 38152, 38168, 38184, 38200, 38216, 38232, 38248, 38264, - 38280, 38296, 38312, 38328, 38344, 38360, 38376, 38392, 38408, 38424, - 38440, 38456, 38472, 38488, 38504, 38520, 38536, 38552, 38568, 38584, - 38600, 38616, 38632, 38648, 38664, 38680, 38696, 38712, 38728, 38744, - 38760, 38776, 38792, 38808, 38824, 38840, 38856, 38872, 38888, 38904, - 38920, 38936, 38952, 38968, 38984, 39000, 39016, 39032, 39048, 39064, - 39080, 39096, 39112, 39128, 39144, 39160, 39176, 39192, 39208, 39224, - 39240, 39256, 39272, 39288, 39304, 39320, 39336, 39352, 39368, 39384, - 39400, 39416, 39432, 39448, 39464, 39480, 39496, 39512, 39528, 39544, - 39560, 39576, 39592, 39608, 39624, 39640, 39656, 39672, 39688, 39704, - 39720, 39736, 39752, 39768, 39784, 39800, 39816, 39832, 39848, 39864, - 39880, 39896, 39912, 39928, 39944, 39960, 39976, 39992, 40008, 40024, - 40040, 40056, 40072, 40088, 40104, 40120, 40136, 40152, 40168, 40184, - 40200, 40216, 40232, 40248, 40264, 40280, 40296, 40312, 40328, 40344, - 40360, 40376, 40392, 40408, 40424, 40440, 40456, 40472, 40488, 40504, - 40520, 40536, 40552, 40568, 40584, 40600, 40616, 40632, 40648, 40664, - 40680, 40696, 40712, 40728, 40744, 40760, 40776, 40792, 40808, 40824, - 40840, 40856, 40872, 40888, 40904, 40920, 40936, 40952, 40968, 40984, - 41000, 41016, 41032, 41048, 41064, 41080, 41096, 41112, 41128, 41144, - 41160, 41176, 41192, 41208, 41224, 41240, 41256, 41272, 41288, 41304, - 41320, 41336, 41352, 41368, 41384, 41400, 41416, 41432, 41448, 41464, - 41480, 41496, 41512, 41528, 41544, 41560, 41576, 41592, 41608, 41624, - 41640, 41656, 41672, 41688, 41704, 41720, 41736, 41752, 41768, 41784, - 41800, 41816, 41832, 41848, 41864, 41880, 41896, 41912, 41928, 41944, - 41960, 41976, 41992, 42008, 42024, 42040, 42056, 42072, 42088, 42104, - 42120, 42136, 42152, 42168, 42184, 42200, 42216, 42232, 42248, 42264, - 42280, 42296, 42312, 42328, 42344, 42360, 42376, 42392, 42408, 42424, - 42440, 42456, 42472, 42488, 42504, 42520, 42536, 42552, 42568, 42584, - 42600, 42616, 42632, 42648, 42664, 42680, 42696, 42712, 42728, 42744, - 42760, 42776, 42792, 42808, 42824, 42840, 42856, 42872, 42888, 42904, - 42920, 42936, 42952, 42968, 42984, 43000, 43016, 43032, 43048, 43064, - 43080, 43096, 43112, 43128, 43144, 43160, 43176, 43192, 43208, 43224, - 43240, 43256, 43272, 43288, 43304, 43320, 43336, 43352, 43368, 43384, - 43400, 43416, 43432, 43448, 43464, 43480, 43496, 43512, 43528, 43544, - 43560, 43576, 43592, 43608, 43624, 43640, 43656, 43672, 43688, 43704, - 43720, 43736, 43752, 43768, 43784, 43800, 43816, 43832, 43848, 43864, - 43880, 43896, 43912, 43928, 43944, 43960, 43976, 43992, 44008, 44024, - 44040, 44056, 44072, 44088, 44104, 44120, 44136, 44151, 44160, 44166, - 44172, 44182, 44190, 9688, 44203, 1510, 44211, 19294, 44217, 2211, 44222, - 44226, 44231, 44238, 44246, 40, 44250, 44256, 44261, 44266, 44270, 44275, - 44279, 44283, 6613, 44287, 44297, 44310, 44321, 44334, 44341, 44347, - 44352, 44358, 44364, 44370, 44375, 44380, 44385, 44390, 44394, 44399, - 44404, 44409, 44415, 44421, 44427, 44432, 44436, 44441, 44446, 44450, - 44455, 44460, 44465, 44469, 10588, 10599, 17405, 1553, 44473, 1558, - 44479, 44482, 1589, 44488, 1595, 1601, 6647, 44493, 44501, 44508, 44512, - 44518, 44523, 44528, 44535, 44540, 44544, 1606, 10690, 10701, 44553, - 44560, 44565, 44569, 1610, 44572, 44578, 44588, 44592, 1615, 26447, - 44597, 6755, 6761, 44603, 44615, 44632, 44649, 44666, 44683, 44700, - 44717, 44734, 44751, 44768, 44785, 44802, 44819, 44836, 44853, 44870, - 44887, 44904, 44921, 44938, 44955, 44972, 44989, 45006, 45023, 45040, - 45057, 45074, 45091, 45108, 45125, 45142, 45159, 45176, 45193, 45210, - 45227, 45244, 45261, 45278, 45295, 45312, 45329, 45346, 45363, 45380, - 45397, 45414, 45431, 45448, 45459, 1620, 45464, 45470, 5684, 1625, 19529, - 45475, 45486, 45496, 45503, 45509, 45514, 6777, 1630, 6782, 45518, 45523, - 45529, 45534, 45539, 45544, 45549, 45554, 45559, 45564, 45570, 45576, - 45582, 45587, 45591, 45596, 45601, 45605, 45610, 45615, 45620, 45624, - 45629, 45635, 45640, 45645, 45649, 45654, 45659, 45665, 45670, 45675, - 45681, 45687, 45692, 45696, 45701, 45706, 45711, 45715, 45720, 45725, - 45730, 45736, 45742, 45747, 45751, 45756, 45761, 45766, 45770, 45775, - 45780, 45786, 45791, 45796, 45800, 45805, 45810, 45816, 45821, 45826, - 45832, 45838, 45843, 45847, 45852, 45857, 45861, 45866, 45871, 45876, - 45882, 45888, 45893, 45897, 45902, 45907, 45911, 45916, 45921, 45926, - 45930, 45933, 21707, 45938, 10952, 10964, 6880, 45944, 6885, 45959, - 45964, 45976, 45988, 46000, 2324, 46012, 46017, 46021, 46027, 46033, - 1642, 863, 46038, 46043, 46047, 46051, 46055, 46060, 46064, 11029, 46069, - 46072, 1646, 46080, 6918, 1651, 46085, 46092, 46097, 46106, 46116, 46123, - 1656, 46130, 46135, 11098, 46139, 46144, 46151, 46155, 46165, 11120, - 5603, 5610, 1661, 46172, 46178, 46186, 46193, 46199, 46205, 46210, 3004, - 21288, 21297, 11160, 1666, 1670, 46218, 46229, 46234, 1673, 46242, 46247, - 46259, 46265, 46270, 1678, 46275, 46280, 46288, 46296, 46303, 46312, - 46320, 46329, 1683, 1688, 46333, 46340, 46348, 46354, 46359, 7047, 46368, - 46374, 46380, 46385, 46393, 7056, 7061, 46401, 46407, 3053, 26542, 46412, - 46418, 46423, 46431, 46438, 46443, 46447, 1699, 46453, 46456, 904, 46462, - 9, 46468, 46472, 46477, 46481, 46485, 46489, 46494, 46498, 46503, 46508, - 46512, 46515, 46519, 46524, 46528, 46533, 46537, 23555, 23560, 23565, - 46540, 46547, 46553, 26362, 46563, 23571, 23576, 21909, 21915, 23587, - 21921, 46568, 46573, 46577, 46581, 46584, 46588, 46591, 46596, 46600, - 46604, 46607, 46619, 22821, 46626, 10169, 696, 46629, 46633, 46638, - 46642, 8802, 46645, 46652, 46665, 46674, 46679, 46689, 46702, 46714, - 46721, 46726, 46739, 24440, 46757, 46762, 46769, 46775, 46780, 46788, - 19596, 520, 46794, 46800, 46806, 46811, 21926, 3474, 21931, 46815, 46825, - 46830, 46840, 46855, 46861, 46867, 21936, 21445, 46872, 46877, 46882, - 46887, 46892, 46896, 3515, 21957, 46900, 46906, 330, 46916, 46923, 46932, - 46938, 46946, 46950, 46954, 46958, 46962, 46967, 46971, 46977, 46985, - 46990, 46994, 46999, 47003, 47007, 47013, 47019, 47024, 47028, 21965, - 47033, 21971, 21977, 47038, 47044, 47049, 47053, 21462, 10912, 47056, - 47060, 47065, 47072, 47078, 47082, 47088, 47092, 47096, 47101, 47106, - 47110, 47113, 47118, 47125, 47132, 47138, 47143, 47148, 47152, 47157, - 47163, 47168, 47174, 47179, 47184, 47189, 47195, 47200, 47205, 47211, - 47217, 47223, 21982, 47228, 47233, 47238, 21993, 47243, 47248, 47253, - 47259, 47265, 21998, 47270, 47275, 47280, 22009, 22015, 47285, 47290, - 47295, 47300, 22020, 22025, 22029, 47305, 47276, 47309, 47315, 47323, - 47330, 47336, 47346, 47352, 47359, 6580, 22034, 47365, 47378, 47387, - 47393, 47402, 47408, 16625, 47415, 47422, 22010, 47432, 47439, 47444, - 47448, 47452, 3549, 47457, 47462, 47467, 23649, 23654, 47471, 23660, - 23665, 47476, 23670, 23676, 47481, 23681, 47492, 47495, 47507, 47515, - 22056, 47519, 47528, 47538, 47547, 22061, 47552, 47559, 47568, 47574, - 47582, 22604, 3367, 47587, 22070, 47593, 47599, 47606, 47611, 22075, - 47615, 47621, 47627, 47632, 47638, 47643, 709, 24255, 24631, 24637, - 47647, 47651, 47655, 47658, 47671, 47677, 47681, 47684, 47689, 23001, - 47693, 21467, 15233, 47699, 3495, 3503, 5506, 225, 47702, 47706, 47710, - 47714, 47718, 47721, 47725, 47730, 47734, 47739, 47743, 47747, 47751, - 47756, 47760, 47765, 47769, 47773, 47780, 9840, 47789, 47798, 17550, - 47802, 47808, 47816, 47822, 47834, 47838, 47843, 47849, 47859, 47869, - 47875, 47879, 47884, 47890, 47899, 47908, 47916, 10073, 47920, 47929, - 47937, 47948, 47959, 47968, 47972, 47982, 47988, 47993, 47999, 48004, - 21372, 48015, 18485, 48021, 48028, 48034, 48038, 48048, 48056, 48061, - 48065, 48073, 48079, 48089, 1025, 48092, 48095, 48099, 48105, 48112, - 48118, 48127, 48136, 48142, 48148, 48153, 48160, 48167, 48180, 48189, - 48198, 48203, 48207, 48214, 48221, 48228, 48235, 48242, 48247, 48251, - 48254, 48264, 48268, 48277, 48281, 48286, 48290, 48299, 48307, 48315, - 48320, 48324, 48329, 48334, 48338, 48344, 48356, 48364, 48374, 48381, - 48387, 48392, 48396, 48400, 48404, 48413, 48422, 48431, 48437, 48443, - 48449, 48454, 48461, 48467, 48475, 48482, 7836, 48488, 48494, 48498, - 9241, 48502, 48511, 48519, 48526, 48530, 48534, 48540, 48548, 48555, - 48561, 48572, 48576, 48580, 48584, 48587, 48593, 48598, 48602, 48606, - 48615, 48623, 48630, 16940, 26200, 48636, 48644, 48648, 48655, 48664, - 48672, 48678, 48683, 48687, 48692, 48696, 48701, 48710, 48714, 48721, - 48728, 48736, 48742, 48753, 48759, 48768, 48775, 48782, 48789, 48796, - 48803, 28634, 48810, 48815, 48821, 31711, 2542, 193, 25139, 48825, 48828, - 48833, 48311, 48837, 48847, 48854, 48863, 48873, 48883, 48891, 48895, - 48898, 48905, 48911, 48922, 48934, 48945, 48952, 1319, 16477, 48962, - 2240, 48966, 1100, 11441, 25600, 48974, 48987, 48991, 48996, 49001, 5072, - 49007, 49015, 7154, 49020, 49026, 1711, 6925, 605, 49035, 49044, 49054, - 19000, 49063, 49069, 11075, 49075, 49079, 11082, 7215, 49085, 46224, - 49092, 5691, 147, 9175, 49098, 49110, 49114, 49120, 19549, 49124, 7203, - 2315, 4, 49129, 49139, 49145, 49156, 49163, 49169, 49175, 49183, 49190, - 49200, 49210, 1331, 49219, 49225, 2331, 2337, 5069, 1960, 49229, 49238, - 49249, 49260, 49268, 49274, 49279, 49287, 49291, 49295, 19813, 49307, - 49317, 49323, 49329, 49339, 49342, 49353, 49363, 49372, 49379, 1102, - 2233, 49389, 49394, 49402, 49410, 49421, 49435, 9127, 342, 49445, 49454, - 49462, 49468, 49475, 49481, 49488, 49498, 49506, 3060, 197, 49514, 49525, - 49529, 49541, 19734, 119, 49547, 49552, 49556, 49563, 49569, 49577, - 49584, 5321, 49591, 49600, 3115, 49608, 11121, 49612, 2353, 378, 49617, - 49630, 49635, 31876, 540, 49639, 3121, 49647, 49653, 959, 49663, 49672, - 49677, 9704, 49681, 49684, 3070, 16608, 49692, 49699, 16646, 49703, - 49710, 49716, 49721, 9718, 49726, 49738, 49744, 49752, 2365, 1743, 49760, - 49762, 49767, 49772, 49776, 49780, 49785, 49789, 49794, 49799, 49805, - 49810, 49814, 49818, 49821, 49823, 49827, 49830, 49835, 49839, 49843, - 49847, 49851, 49860, 22216, 49863, 22221, 22226, 49870, 49879, 22232, - 49884, 22237, 49893, 49898, 7327, 49902, 49907, 49912, 49916, 49920, - 49924, 49928, 49931, 49935, 5013, 49941, 49946, 49950, 2981, 49953, - 49955, 49959, 49962, 49967, 49971, 49977, 49990, 49996, 50000, 50008, - 50015, 50023, 50032, 50040, 22242, 50047, 50057, 50066, 50079, 50084, - 50089, 50095, 50102, 50113, 50125, 50132, 50141, 50150, 50159, 50166, - 50172, 50179, 50187, 50194, 50202, 50211, 50219, 50226, 50234, 50243, - 50251, 50260, 50270, 50279, 50287, 50294, 50302, 50311, 50319, 50328, - 50338, 50347, 50355, 50364, 50374, 50383, 50393, 50404, 50414, 50423, - 50431, 50438, 50446, 50455, 50463, 50472, 50482, 50491, 50499, 50508, - 50518, 50527, 50537, 50548, 50558, 50567, 50575, 50584, 50594, 50603, - 50613, 50624, 50634, 50643, 50653, 50664, 50674, 50685, 50697, 50708, - 50718, 50727, 50735, 50742, 50750, 50759, 50767, 50776, 50786, 50795, - 50803, 50812, 50822, 50831, 50841, 50852, 50862, 50871, 50879, 50888, - 50898, 50907, 50917, 50928, 50938, 50947, 50957, 50968, 50978, 50989, - 51001, 51012, 51022, 51031, 51039, 51048, 51058, 51067, 51077, 51088, - 51098, 51107, 51117, 51128, 51138, 51149, 51161, 51172, 51182, 51191, - 51201, 51212, 51222, 51233, 51245, 51256, 51266, 51277, 51289, 51300, - 51312, 51325, 51337, 51348, 51358, 51367, 51375, 51382, 51390, 51399, - 51407, 51416, 51426, 51435, 51443, 51452, 51462, 51471, 51481, 51492, - 51502, 51511, 51519, 51528, 51538, 51547, 51557, 51568, 51578, 51587, - 51597, 51608, 51618, 51629, 51641, 51652, 51662, 51671, 51679, 51688, - 51698, 51707, 51717, 51728, 51738, 51747, 51757, 51768, 51778, 51789, - 51801, 51812, 51822, 51831, 51841, 51852, 51862, 51873, 51885, 51896, - 51906, 51917, 51929, 51940, 51952, 51965, 51977, 51988, 51998, 52007, - 52015, 52024, 52034, 52043, 52053, 52064, 52074, 52083, 52093, 52104, - 52114, 52125, 52137, 52148, 52158, 52167, 52177, 52188, 52198, 52209, - 52221, 52232, 52242, 52253, 52265, 52276, 52288, 52301, 52313, 52324, - 52334, 52343, 52353, 52364, 52374, 52385, 52397, 52408, 52418, 52429, - 52441, 52452, 52464, 52477, 52489, 52500, 52510, 52521, 52533, 52544, - 52556, 52569, 52581, 52592, 52604, 52617, 52629, 52642, 52656, 52669, - 52681, 52692, 52702, 52711, 52719, 52726, 52731, 4871, 52738, 22252, - 52743, 52748, 22257, 52754, 15012, 52759, 52763, 52769, 52775, 52782, - 52787, 52791, 52795, 52804, 52810, 52822, 52833, 52837, 2592, 4846, - 52842, 52845, 52847, 52851, 52855, 52859, 28446, 52864, 52868, 52871, - 52876, 52880, 52887, 52893, 52897, 22267, 52901, 52908, 52917, 52925, - 52936, 52944, 52952, 52959, 52966, 52972, 52983, 22272, 52988, 52999, - 53011, 53022, 53030, 2206, 53035, 53048, 53052, 53060, 11601, 53071, - 53077, 53084, 53092, 53098, 22277, 53103, 6118, 44186, 53110, 53113, - 53121, 53134, 53147, 53160, 53173, 53180, 53191, 53200, 28451, 28456, - 53205, 53213, 53220, 53229, 53237, 53243, 53252, 53260, 53268, 53272, - 53281, 53290, 53300, 53313, 53326, 53336, 22282, 53342, 53349, 53355, - 22288, 53360, 53363, 53367, 53375, 53384, 28189, 53392, 53400, 53407, - 53415, 53425, 53434, 53443, 53452, 53460, 53471, 5724, 15434, 53480, - 53485, 53489, 53493, 53498, 53504, 53509, 53514, 53520, 53525, 53530, - 15399, 53535, 53542, 53550, 53555, 53562, 53566, 53570, 53578, 53586, - 22297, 53592, 53598, 53610, 53616, 53621, 53632, 53642, 53652, 53664, - 53670, 53680, 22302, 53689, 53698, 53704, 53716, 53727, 53734, 53739, - 53747, 53753, 53758, 53763, 53770, 53782, 53792, 53801, 53808, 23230, - 16814, 53814, 53819, 53823, 53827, 53832, 53838, 53849, 53862, 53867, - 22307, 53872, 53884, 53893, 53906, 53913, 53922, 53930, 53935, 53941, - 1147, 53946, 53951, 53956, 53961, 53967, 53972, 53977, 53983, 53989, - 53994, 53998, 54003, 54008, 54013, 44549, 54018, 54023, 54028, 54033, - 54039, 54045, 54050, 54054, 54059, 54064, 54069, 54074, 54079, 54083, - 54089, 54094, 54103, 54108, 54113, 54118, 54123, 54127, 54134, 54140, - 11311, 32176, 54145, 54095, 54147, 22316, 54150, 54159, 54165, 3561, - 22321, 54169, 54175, 54181, 54186, 54190, 54197, 54202, 54212, 54221, - 54225, 54231, 54237, 54243, 54247, 54255, 54262, 54270, 54278, 22326, - 54285, 54288, 54295, 54300, 54304, 54310, 54315, 54319, 54328, 54336, - 54342, 54347, 22837, 54354, 54360, 54365, 54371, 54378, 22047, 19317, - 54384, 54389, 54395, 54407, 54128, 54135, 54417, 54422, 54429, 54436, - 54442, 54453, 54458, 5523, 54466, 54469, 54475, 54479, 54483, 54486, - 54492, 46981, 3581, 761, 8644, 115, 54499, 54503, 54507, 54512, 54520, - 54524, 54532, 54536, 54549, 54553, 54556, 54561, 54565, 54570, 54574, - 54582, 54586, 15017, 54591, 54595, 54599, 54602, 54610, 54615, 54622, - 54628, 54634, 54639, 54647, 48979, 54654, 54659, 54664, 54668, 54672, - 54677, 54682, 54686, 54689, 54695, 54699, 54709, 54718, 54721, 54734, - 54742, 54750, 54760, 54773, 54780, 54791, 54797, 54802, 54807, 54813, - 54822, 53874, 54830, 54836, 54844, 54848, 54852, 54858, 54866, 54878, - 54890, 54897, 54901, 54912, 54920, 54927, 54939, 54947, 54955, 54962, - 54968, 54978, 54987, 54992, 55002, 55006, 55010, 55017, 55029, 55041, - 55050, 53038, 55057, 55068, 55082, 55090, 55100, 55107, 55115, 55124, - 55132, 55142, 55151, 55162, 55174, 55183, 55193, 55200, 55209, 55224, - 55233, 55246, 55261, 55265, 55277, 55288, 55299, 55310, 55320, 55331, - 55339, 55345, 55355, 55361, 55366, 55372, 55378, 55383, 55390, 5995, - 11621, 55396, 55401, 55408, 55414, 55419, 55423, 55426, 55429, 55431, - 55438, 55449, 55454, 55458, 55464, 55472, 49355, 49365, 55478, 55488, - 55495, 55501, 55506, 55515, 55522, 55530, 55539, 55545, 55551, 55558, - 55565, 55570, 55574, 55579, 55584, 55589, 55593, 54544, 55602, 55606, - 55617, 55627, 11630, 55638, 55646, 11642, 55653, 19227, 55657, 55661, - 55666, 9500, 55678, 55683, 55688, 55693, 55697, 55700, 55705, 55710, - 55716, 55721, 3373, 15068, 55726, 55731, 55737, 55744, 55749, 55754, - 55760, 55766, 55772, 55777, 55783, 55787, 55801, 55809, 55817, 55823, - 55828, 55835, 55840, 55845, 55853, 55858, 55864, 55869, 55874, 55878, - 55881, 55899, 55918, 55931, 55945, 55961, 55968, 55975, 55981, 55988, - 55993, 55999, 56005, 56010, 56026, 10350, 56040, 56047, 56051, 56054, - 56059, 56064, 56071, 56076, 56081, 56086, 7399, 56090, 56095, 56101, - 7410, 56106, 56109, 56114, 56124, 56133, 56138, 56146, 56153, 56164, - 56174, 56179, 56184, 56191, 56197, 56202, 56209, 56218, 56226, 56232, - 56238, 56242, 11173, 2566, 56247, 56251, 56257, 56264, 56268, 56289, - 56311, 56327, 56344, 56363, 56372, 56382, 56389, 56396, 19154, 56402, - 56406, 56414, 56420, 56428, 56432, 56440, 56447, 56451, 56457, 2896, - 28651, 56463, 56467, 56471, 56475, 56480, 56485, 56490, 56496, 56501, - 56507, 56512, 56517, 56521, 56526, 28666, 56530, 56535, 56543, 56547, - 56552, 56559, 56568, 56574, 56581, 56585, 56594, 56599, 56607, 56616, - 56622, 56627, 56632, 56638, 56644, 56649, 56653, 56661, 56671, 56676, - 26557, 56684, 56696, 56700, 56712, 56719, 56725, 56732, 56744, 56751, - 56757, 15112, 56761, 56767, 56773, 56778, 56783, 4382, 56788, 56796, - 56805, 56809, 56522, 20980, 56814, 56816, 56828, 56833, 5036, 49, 56838, - 56843, 22331, 22336, 22341, 22347, 22352, 56847, 22357, 56869, 56871, - 56875, 56879, 56884, 56888, 22361, 56892, 22366, 56900, 56903, 22371, - 15506, 56912, 56916, 1429, 56921, 22382, 56924, 56929, 18123, 18133, - 56934, 56938, 56943, 56949, 56954, 56963, 56968, 56975, 56981, 56986, - 56991, 56996, 57004, 22387, 1010, 57011, 57017, 57022, 57027, 57032, - 57038, 57043, 57050, 57056, 57061, 57069, 57075, 11652, 57082, 24453, - 57095, 57100, 57106, 57119, 57123, 57132, 57139, 57145, 57153, 57160, - 57166, 22391, 57169, 57176, 57182, 57186, 57189, 57197, 57211, 57218, - 22396, 57224, 22401, 57231, 23655, 57241, 57246, 57250, 57255, 57260, - 57265, 22406, 47446, 57269, 57274, 57280, 57286, 57293, 57299, 57304, - 57309, 57318, 57330, 57345, 22626, 57351, 10862, 22410, 57355, 57362, - 22415, 57368, 57377, 57384, 57393, 57399, 57404, 57410, 22420, 57415, - 57424, 57433, 57440, 57446, 57452, 57460, 57464, 22425, 57467, 22431, - 22437, 57472, 57480, 57490, 22442, 57494, 57496, 57500, 57505, 57509, - 57513, 57519, 57524, 57528, 2571, 57532, 57539, 57543, 57552, 57560, - 57567, 57572, 57577, 57581, 57585, 57588, 57594, 57602, 57608, 57612, - 57617, 57624, 57630, 47477, 57635, 57638, 57643, 57647, 57652, 57657, - 57661, 57669, 18142, 18151, 57675, 57681, 57686, 57690, 57693, 57703, - 57708, 57714, 57720, 57728, 57733, 23671, 57737, 57745, 57750, 57755, - 44233, 23677, 57761, 57766, 57770, 57775, 57780, 57785, 57789, 57794, - 57799, 57805, 57810, 57815, 57821, 57827, 57832, 57836, 57841, 57846, - 57851, 57855, 57860, 57865, 57870, 57876, 57882, 57888, 57893, 57897, - 57902, 57907, 57911, 57916, 57921, 57926, 57930, 22446, 57938, 57946, - 15838, 57957, 57963, 57970, 57975, 57979, 57984, 57992, 58000, 58007, - 49104, 58013, 58021, 58028, 58039, 58045, 22456, 58048, 58055, 26671, - 58059, 58064, 58069, 5453, 58073, 58081, 58088, 58095, 58101, 58115, - 58121, 58125, 58128, 58136, 58143, 58148, 58155, 58160, 58165, 58168, - 58175, 58179, 58189, 58199, 58208, 58219, 58224, 58228, 58236, 22461, - 27082, 58240, 58245, 58250, 58255, 58260, 58265, 58270, 58274, 58279, - 58284, 58289, 58294, 58299, 58304, 58308, 58313, 58318, 58322, 58326, - 58330, 58334, 58339, 58344, 58348, 58353, 58357, 58361, 58366, 58371, - 58376, 58381, 58385, 58390, 58395, 58399, 58404, 58409, 58414, 58419, - 58424, 58429, 58434, 58439, 58444, 58449, 58454, 58459, 58464, 58469, - 58474, 58479, 58484, 58489, 58494, 58499, 58503, 58508, 58513, 58518, - 58523, 58528, 58533, 58538, 58543, 58548, 58553, 58558, 58562, 58567, - 58571, 58576, 58581, 58586, 58591, 58596, 58601, 58606, 58611, 58616, - 58620, 58624, 58629, 58634, 58638, 58643, 58648, 58652, 58657, 58662, - 58667, 58672, 58676, 58681, 58686, 58690, 58695, 58699, 58703, 58707, - 58711, 58716, 58720, 58724, 58728, 58732, 58736, 58740, 58744, 58748, - 58752, 58757, 58762, 58767, 58772, 58777, 58782, 58787, 58792, 58797, - 58802, 58806, 58810, 58814, 58818, 58822, 58826, 58831, 58835, 58840, - 58844, 58849, 58854, 58858, 58862, 58867, 58871, 58875, 58879, 58883, - 58887, 58891, 58895, 58899, 58903, 58907, 58911, 58915, 58919, 58923, - 58928, 58933, 58937, 58941, 58945, 58949, 58953, 58957, 58962, 58966, - 58970, 58974, 58978, 58982, 58986, 58991, 58995, 59000, 59004, 59008, - 59012, 59016, 59020, 59024, 59028, 59032, 59036, 59040, 59044, 59049, - 59053, 59057, 59061, 59065, 59069, 59073, 59077, 59081, 59085, 59089, - 59093, 59098, 59102, 59106, 59111, 59116, 59120, 59124, 59128, 59132, - 59136, 59140, 59144, 59148, 59152, 59156, 59160, 59164, 59168, 59172, - 59176, 59180, 1511, 59184, 1749, 59188, 59192, 2383, 59196, 1398, 59201, - 1364, 59205, 59209, 59216, 59230, 2399, 4457, 59239, 59247, 59254, 59261, - 59274, 59287, 59298, 59303, 59310, 59322, 3172, 7467, 59326, 59331, - 59340, 59350, 59355, 59359, 59364, 1369, 9554, 59374, 59380, 59394, - 59406, 59415, 59424, 59433, 59441, 59452, 59460, 3211, 59470, 59479, - 59486, 24085, 59491, 2427, 8373, 59495, 59502, 5409, 59511, 2432, 22067, - 59517, 59524, 59530, 59537, 59543, 59550, 59560, 59569, 59580, 59587, - 59593, 59603, 59611, 59617, 59632, 59638, 59643, 59650, 59653, 59659, - 59666, 59672, 59681, 59689, 59695, 59704, 28191, 59718, 59723, 9582, - 59729, 59738, 59746, 59753, 59757, 59761, 59764, 59771, 59779, 59787, - 9511, 59796, 59801, 59805, 59817, 59826, 59836, 2448, 59845, 59851, - 59864, 59876, 59886, 59895, 59907, 59915, 59924, 59935, 59946, 59956, - 59966, 59975, 59983, 7136, 59990, 59994, 59999, 60004, 60010, 1374, 7515, - 60017, 60028, 60037, 60045, 60054, 60070, 60081, 60097, 60107, 60128, - 60141, 60146, 60152, 18788, 60158, 60161, 60168, 4983, 60178, 60183, - 60188, 60196, 6043, 6052, 60204, 2456, 2461, 6742, 60215, 60222, 60229, - 1953, 101, 60242, 60247, 60257, 60263, 60267, 60272, 60276, 2478, 60288, - 60296, 60307, 60318, 60327, 60332, 60338, 60343, 60353, 60363, 60368, - 60374, 60379, 60388, 15321, 60392, 3273, 12, 60397, 60404, 710, 60410, - 60415, 46381, 60420, 60425, 60431, 60439, 60444, 60451, 60457, 25559, - 60463, 2482, 32, 60473, 60486, 60494, 60499, 60505, 2504, 21432, 60510, - 60518, 60525, 44475, 47127, 60534, 1694, 1798, 60539, 60544, 60551, 1802, - 210, 60558, 60564, 60569, 60576, 1806, 60581, 60586, 3548, 60598, 1813, - 60604, 60609, 60616, 60631, 60638, 60646, 60658, 60663, 60674, 60683, - 2122, 60694, 60696, 2591, 5729, 60704, 60709, 60713, 60722, 60728, 2561, - 11328, 60732, 60745, 60763, 60768, 60776, 60784, 60794, 60806, 60819, - 60826, 60842, 60849, 60855, 877, 60862, 60869, 60879, 60888, 60900, - 29055, 60908, 2575, 1186, 60911, 60919, 60923, 2579, 60927, 60931, 60935, - 2585, 60939, 1379, 10460, 7696, 59775, 2606, 60949, 60952, 60958, 60964, - 60971, 60976, 60981, 1992, +static unsigned int lexicon_offset[] = { + 0, 0, 6, 10, 15, 23, 27, 34, 39, 41, 44, 52, 62, 68, 81, 93, 102, 108, + 113, 121, 130, 135, 139, 145, 150, 158, 161, 168, 173, 181, 186, 192, + 200, 207, 217, 224, 227, 236, 239, 242, 247, 253, 262, 266, 273, 280, + 285, 294, 136, 302, 303, 309, 315, 323, 329, 335, 340, 346, 352, 360, + 367, 369, 372, 376, 383, 390, 396, 403, 408, 410, 418, 421, 426, 307, + 428, 430, 436, 441, 450, 455, 460, 470, 474, 487, 491, 496, 505, 508, + 514, 518, 526, 536, 544, 551, 560, 568, 576, 581, 589, 600, 604, 611, + 614, 620, 624, 628, 629, 634, 638, 640, 643, 652, 322, 655, 659, 664, + 672, 676, 678, 681, 687, 694, 701, 710, 719, 722, 732, 741, 750, 756, + 762, 769, 772, 780, 788, 792, 796, 804, 813, 822, 827, 831, 686, 838, + 846, 850, 854, 857, 862, 867, 871, 879, 794, 609, 882, 887, 225, 890, + 895, 905, 914, 920, 927, 934, 942, 946, 954, 960, 967, 973, 979, 984, + 988, 994, 1007, 1012, 1015, 1020, 22, 1024, 1027, 1037, 1042, 1046, 1055, + 1058, 1064, 1074, 1077, 111, 1081, 1086, 1092, 1096, 1101, 1107, 1112, + 1115, 1122, 1124, 1126, 1134, 1144, 1147, 1150, 1157, 1165, 338, 1167, + 1170, 1175, 1183, 1192, 1195, 1204, 1210, 1216, 1218, 1223, 1228, 1234, + 1239, 1244, 1248, 1253, 1259, 1264, 1269, 1273, 1278, 1283, 1287, 1292, + 1297, 1302, 1308, 1314, 1320, 1325, 1329, 1334, 1339, 1344, 1348, 1353, + 1358, 1363, 1368, 1219, 1224, 1229, 1235, 1240, 1372, 1245, 1378, 1387, + 1249, 1391, 1254, 1260, 1265, 1395, 1400, 1405, 1409, 1413, 1419, 1423, + 1270, 1426, 1430, 1274, 1436, 1279, 1440, 1444, 1284, 1448, 1453, 1457, + 1460, 1464, 1288, 1293, 1469, 1298, 1475, 1481, 1487, 1493, 1303, 1315, + 1321, 1497, 1501, 1505, 1508, 1326, 1512, 1514, 1519, 1524, 1530, 1535, + 1540, 1544, 1549, 1554, 1559, 1564, 1570, 1575, 1580, 1586, 1592, 1597, + 1601, 1606, 1611, 1616, 1621, 1625, 1633, 1637, 1642, 1647, 1652, 1657, + 1661, 1664, 1669, 1674, 1679, 1684, 1690, 1695, 1699, 1330, 1702, 1707, + 1712, 1335, 1716, 1720, 1727, 1340, 1734, 1345, 1738, 1740, 1745, 1751, + 1349, 1756, 1765, 1354, 1770, 1776, 1359, 1781, 1786, 1789, 1794, 1798, + 1802, 1806, 1809, 1813, 1364, 1369, 1040, 1818, 1824, 1830, 1836, 1842, + 1848, 1854, 1860, 1866, 1871, 1877, 1883, 1889, 1895, 1901, 1907, 1913, + 1919, 1925, 1930, 1935, 1940, 1945, 1950, 1955, 1960, 1965, 1970, 1975, + 1981, 1986, 1992, 1997, 2003, 2009, 2014, 2020, 2026, 2032, 2038, 2043, + 2048, 2050, 2051, 2055, 2059, 2064, 2068, 2072, 2076, 2080, 2083, 2088, + 2092, 2097, 2101, 2105, 2110, 2114, 2117, 2121, 2135, 2139, 2143, 2146, + 2151, 2155, 2159, 2163, 2168, 2173, 2178, 2182, 2187, 2191, 2196, 2203, + 2209, 2214, 2219, 2224, 2230, 2235, 2241, 2246, 2249, 1236, 2251, 2258, + 2266, 2276, 2285, 2299, 2303, 2307, 2320, 2328, 2332, 2337, 2341, 2345, + 2349, 2354, 2359, 2364, 2368, 2371, 2375, 2382, 2389, 2395, 2400, 2405, + 2411, 2417, 2422, 2425, 1742, 2427, 2433, 2437, 2442, 2446, 2450, 1747, + 1753, 2455, 2459, 2462, 2467, 2472, 2477, 2481, 2488, 2493, 2496, 2503, + 2509, 2513, 2517, 2521, 2527, 2533, 2547, 2564, 2579, 2594, 2603, 2608, + 2612, 2617, 2622, 2626, 2638, 2645, 2651, 2199, 2657, 2664, 2670, 2673, + 2680, 2684, 2688, 2692, 2073, 2696, 2701, 2706, 2710, 2718, 2722, 2726, + 2730, 2735, 2740, 2745, 2749, 2754, 2759, 2763, 2768, 2772, 2775, 2779, + 2783, 2788, 2792, 2796, 2802, 2811, 2815, 2819, 2825, 2830, 2837, 2841, + 2851, 2855, 2860, 2864, 2869, 2875, 2880, 2884, 2385, 2888, 2893, 2899, + 2904, 2908, 2913, 2918, 2922, 2928, 2933, 2939, 2943, 2949, 2954, 2959, + 2964, 2969, 2974, 2979, 2984, 2989, 2994, 3000, 3005, 1246, 80, 3011, + 3015, 3019, 3023, 3028, 3032, 3036, 3040, 3044, 3049, 3053, 3058, 3062, + 3065, 3069, 3074, 3078, 3083, 3087, 3091, 3095, 3100, 3104, 3107, 3120, + 3124, 3128, 3132, 3136, 3140, 3143, 3147, 3151, 3156, 3160, 3165, 3170, + 3175, 3179, 3182, 3185, 3191, 3195, 3199, 3202, 3206, 3210, 3213, 3219, + 3224, 3229, 3235, 3240, 3245, 3251, 3257, 3262, 3267, 3272, 1044, 507, + 3277, 3280, 3285, 3289, 3292, 3297, 3302, 3306, 3311, 3315, 3320, 3324, + 3328, 3331, 3337, 3344, 3350, 3355, 3359, 3364, 3368, 3378, 3382, 3386, + 3391, 3396, 3406, 2084, 3411, 3415, 3418, 3424, 3431, 3435, 621, 720, + 3439, 3446, 3453, 3459, 3464, 3470, 3475, 2093, 3479, 3487, 555, 3493, + 3504, 3508, 3518, 2098, 3524, 3529, 3544, 3550, 3557, 3567, 3573, 3578, + 3584, 3587, 3591, 3598, 3603, 3607, 3611, 3615, 3619, 3624, 3630, 3070, + 3635, 3647, 1546, 3654, 3657, 3661, 3664, 3668, 3682, 3686, 3689, 3693, + 3698, 3702, 3706, 3712, 3718, 3723, 3729, 3733, 3741, 3751, 3757, 3762, + 3771, 3779, 3786, 3790, 3799, 3803, 3808, 3813, 3817, 3825, 3829, 3834, + 3838, 2106, 1388, 3844, 3849, 3855, 3860, 3865, 3870, 3875, 3880, 3885, + 3891, 3896, 3902, 3907, 3912, 3917, 3923, 3928, 3933, 3938, 3943, 3949, + 3954, 3960, 3965, 3970, 3975, 3980, 3985, 3990, 3996, 4001, 4006, 344, + 440, 4011, 4017, 4021, 4025, 4030, 4034, 4038, 4041, 4045, 4049, 4053, + 4058, 4062, 4066, 3841, 4072, 4079, 4083, 4096, 4100, 4104, 4108, 4112, + 4116, 4122, 4129, 4133, 4141, 4150, 4156, 4161, 4164, 4168, 4172, 4182, + 4192, 4200, 4207, 4214, 4220, 4226, 4233, 4237, 4242, 4246, 4254, 4259, + 4267, 4272, 4277, 4281, 4286, 4293, 4296, 4300, 4304, 4307, 4313, 4319, + 4323, 4334, 4344, 4359, 4374, 4389, 4404, 4419, 4434, 4449, 4464, 4479, + 4494, 4509, 4524, 4539, 4554, 4569, 4584, 4599, 4614, 4629, 4644, 4659, + 4674, 4689, 4704, 4719, 4734, 4749, 4764, 4779, 4794, 4809, 4824, 4839, + 4854, 4869, 4884, 4899, 4914, 4929, 4944, 4959, 4974, 4989, 5004, 5019, + 5034, 5049, 5064, 5079, 5088, 5097, 5102, 5108, 5112, 5117, 5121, 5124, + 5128, 2846, 5131, 5136, 306, 424, 5142, 5150, 5154, 5158, 5161, 5167, + 5171, 5179, 5185, 5190, 5197, 5204, 5210, 5215, 5222, 5228, 5232, 5237, + 5249, 5260, 5267, 5273, 3092, 5277, 5283, 5288, 5293, 5298, 5304, 5309, + 5314, 5319, 5324, 5330, 5335, 5340, 5346, 5351, 5357, 5362, 5368, 5373, + 5379, 5384, 5389, 5394, 5399, 5404, 5410, 5415, 5420, 5425, 5431, 5437, + 5443, 5449, 5455, 5461, 5467, 5473, 5479, 5485, 5491, 5497, 5502, 5507, + 5512, 5517, 5522, 5527, 5532, 5537, 5543, 5549, 5554, 5560, 5566, 5572, + 5577, 5582, 5587, 5592, 5598, 5604, 5609, 5614, 5619, 5624, 5629, 5635, + 5640, 5646, 5652, 5658, 5664, 5670, 5676, 5682, 5688, 5694, 5160, 5699, + 5703, 5707, 5710, 5717, 5720, 5728, 5733, 5738, 5729, 5743, 5730, 5747, + 5753, 5759, 5764, 5769, 5776, 5781, 5785, 5788, 5792, 2140, 516, 5796, + 5800, 5805, 5811, 5816, 5820, 5823, 5827, 5832, 5836, 5843, 5847, 5851, + 5855, 884, 699, 5858, 5866, 5873, 5880, 5886, 5893, 5901, 5908, 5915, + 5920, 5932, 1266, 1396, 1401, 5943, 1406, 5947, 5951, 5960, 5969, 5975, + 5980, 5984, 5990, 5995, 6002, 6006, 6015, 6024, 6033, 6042, 6047, 6052, + 6064, 6069, 3312, 6073, 6075, 6080, 6084, 6093, 6101, 1410, 825, 3316, + 3321, 6107, 6111, 6120, 6126, 6131, 6134, 6143, 2591, 6149, 6157, 6161, + 6165, 3325, 6169, 6174, 6181, 6187, 6193, 6196, 6198, 6201, 6209, 6217, + 6225, 6228, 6233, 5740, 6236, 6238, 6243, 6248, 6253, 6258, 6263, 6268, + 6273, 6278, 6283, 6288, 6294, 6299, 6304, 6309, 6315, 6320, 6325, 6330, + 6335, 6340, 6345, 6351, 6356, 6361, 6366, 6371, 6376, 6381, 6386, 6391, + 6396, 6401, 6406, 6411, 6416, 6421, 6426, 6431, 6436, 6442, 6448, 6453, + 6458, 6463, 6468, 6473, 2197, 2204, 2210, 6478, 6484, 2236, 2242, 6492, + 6496, 6501, 6505, 6509, 6513, 6518, 6522, 6527, 6531, 6534, 6537, 6543, + 6549, 6555, 6561, 6567, 6573, 6579, 6583, 6587, 6591, 6595, 6599, 6604, + 6611, 6619, 6629, 6634, 6638, 6649, 6662, 6673, 6686, 6697, 6709, 6721, + 6733, 6746, 6759, 6766, 6772, 6779, 6785, 6789, 6794, 6798, 6805, 6813, + 6817, 6823, 6833, 6837, 6842, 6847, 6854, 6860, 5888, 6870, 6874, 6881, + 698, 6885, 6889, 6894, 6899, 6904, 6908, 6914, 6922, 6926, 6936, 6940, + 6946, 6951, 6955, 2132, 6961, 6969, 6978, 6982, 6988, 6993, 6998, 7003, + 7009, 7014, 3708, 7019, 7023, 7029, 7035, 7040, 7045, 7050, 6983, 7056, + 7060, 7067, 7073, 7078, 7082, 7087, 7091, 7100, 6177, 6184, 7105, 2732, + 7109, 7114, 7119, 6989, 7123, 6994, 6999, 7128, 7135, 7142, 7148, 7154, + 7160, 7165, 7170, 7175, 7004, 7010, 7181, 7187, 7192, 7200, 7015, 7205, + 1079, 7208, 7216, 7222, 7228, 7237, 7242, 7248, 7263, 7280, 7299, 7308, + 7316, 7331, 7341, 7351, 7357, 7369, 7378, 7386, 7393, 7400, 7406, 7411, + 7419, 7429, 7436, 7446, 7456, 7466, 7475, 7485, 7499, 7514, 7523, 7531, + 7536, 7540, 7549, 7559, 7569, 7579, 7584, 7588, 7597, 7607, 7618, 7631, + 7644, 7656, 7664, 7669, 7675, 7678, 7682, 7690, 7695, 7699, 7707, 7716, + 7724, 7731, 7742, 7746, 7749, 7755, 7759, 7765, 7772, 7777, 7784, 7791, + 7798, 7805, 7812, 7819, 7824, 7276, 7829, 7836, 7845, 7849, 7861, 7865, + 7868, 7872, 7876, 7880, 7884, 7890, 7895, 7901, 7906, 7911, 7917, 7922, + 7927, 6850, 7932, 7936, 7940, 7944, 7949, 7954, 7960, 7964, 7971, 7976, + 7984, 7988, 7991, 7997, 8004, 8008, 8011, 8016, 8020, 3736, 8026, 8034, + 8040, 6865, 8045, 8051, 8056, 8060, 8063, 8078, 8097, 8109, 8122, 8135, + 8148, 8162, 8175, 8190, 8197, 8203, 8207, 8212, 8218, 8226, 8231, 6011, + 8236, 8239, 8244, 8248, 2737, 877, 8254, 8258, 8264, 8270, 8275, 8281, + 8286, 7024, 8292, 8298, 8303, 8308, 8316, 8322, 8335, 8343, 8350, 8354, + 8362, 8369, 8381, 8391, 8398, 8405, 8414, 8423, 8431, 8436, 8442, 7030, + 8447, 8453, 7036, 8458, 8461, 8468, 8474, 8487, 8498, 8505, 8511, 8520, + 8528, 8535, 8541, 8547, 8552, 8556, 8561, 8070, 8567, 7041, 8574, 8579, + 8586, 8592, 8598, 8603, 8611, 8619, 8626, 8630, 8644, 8654, 8659, 8663, + 8674, 8680, 8685, 8690, 8694, 7046, 8699, 8702, 8707, 8719, 8726, 8731, + 8735, 8740, 8744, 8751, 8757, 7051, 6984, 8764, 2742, 8, 8771, 8776, + 8780, 8786, 8797, 8807, 8816, 8828, 8833, 8837, 8845, 8859, 8863, 8866, + 8874, 8881, 8889, 8893, 8904, 8908, 8915, 8920, 8924, 8930, 8935, 8939, + 8944, 8948, 8951, 8957, 8962, 8968, 8975, 8985, 8994, 9001, 7061, 7068, + 7074, 7079, 9007, 7083, 9013, 9016, 9023, 9038, 9054, 9069, 970, 406, + 9074, 9082, 9089, 9095, 9100, 9105, 7092, 9107, 9111, 9115, 9125, 9130, + 9134, 9143, 9147, 9150, 9157, 9161, 9164, 9172, 9179, 9187, 9191, 9198, + 9202, 9208, 9212, 9216, 9220, 9226, 9230, 9234, 9241, 9245, 9250, 9254, + 9261, 9267, 9275, 9281, 9291, 9296, 9301, 9305, 9313, 3641, 9321, 9326, + 9330, 9334, 9337, 9345, 9352, 9356, 9360, 9365, 9369, 9380, 9386, 9390, + 9393, 9400, 9405, 7101, 9410, 9414, 1704, 4265, 9421, 9426, 9431, 9436, + 9442, 9447, 9453, 9458, 9463, 9468, 9473, 9478, 9483, 9488, 9493, 9498, + 9503, 9508, 9513, 9518, 9523, 9528, 9533, 9539, 9544, 9549, 9554, 9559, + 9564, 9570, 9575, 9580, 9586, 9591, 9597, 9602, 9608, 9613, 9618, 9623, + 9628, 9634, 9639, 9644, 670, 134, 9649, 9653, 9658, 9663, 9667, 9671, + 9675, 9680, 9684, 9689, 9693, 9696, 9700, 9704, 9709, 9719, 9725, 9729, + 9733, 9740, 9748, 9757, 9768, 9775, 9782, 9791, 9800, 9809, 9818, 9827, + 9836, 9846, 9856, 9866, 9876, 9886, 9895, 9905, 9915, 9925, 9935, 9945, + 9955, 9965, 9974, 9984, 9994, 10004, 10014, 10024, 10034, 10043, 10053, + 10063, 10073, 10083, 10093, 10103, 10113, 10123, 10133, 10142, 10152, + 10162, 10172, 10182, 10192, 10202, 10212, 10222, 10232, 10242, 10251, + 10257, 10261, 10264, 10268, 10273, 10280, 10286, 10291, 10295, 10300, + 10304, 10308, 7110, 10314, 10319, 10328, 7115, 10333, 10336, 10342, + 10350, 7120, 10357, 10361, 10365, 10369, 10379, 10384, 10393, 10401, + 10408, 10413, 10420, 10425, 10429, 10432, 10443, 10453, 10462, 10470, + 10481, 10493, 10503, 10507, 10512, 10517, 10521, 10526, 10535, 10539, + 10542, 10549, 10559, 10568, 10575, 10579, 10585, 10590, 10595, 10599, + 10608, 10613, 10619, 10624, 10628, 10637, 10645, 10653, 10660, 10668, + 10680, 10691, 10701, 10708, 10714, 10723, 10734, 10743, 10752, 10760, + 10767, 10776, 10784, 5761, 10788, 10790, 10795, 10801, 10809, 10816, + 10825, 10834, 10843, 10852, 10861, 10870, 10879, 10888, 10898, 10908, + 10917, 10924, 10938, 10945, 10953, 10962, 10968, 10977, 10985, 10994, + 11007, 11015, 11022, 11035, 11041, 11050, 11059, 11064, 11068, 11074, + 11080, 11087, 6864, 11092, 11097, 11104, 11109, 11114, 11118, 11124, + 11132, 11140, 11147, 11155, 11163, 11168, 11174, 11179, 11183, 11194, + 11202, 11208, 11213, 11222, 11228, 11233, 11242, 11256, 3600, 11260, + 11265, 11270, 11276, 11281, 11286, 11290, 11295, 11300, 5760, 11305, + 11310, 11315, 11320, 11324, 11329, 11334, 11339, 11345, 11351, 11356, + 11360, 11365, 11370, 11375, 7124, 11380, 11385, 11390, 11395, 11412, + 11430, 11442, 11455, 11472, 11488, 11505, 11515, 11534, 11545, 11556, + 11567, 11578, 11590, 11601, 11612, 11629, 11640, 11651, 11656, 2317, + 11660, 11663, 11669, 11677, 11685, 11690, 11698, 11706, 11713, 11718, + 11724, 11731, 11739, 11746, 11758, 11763, 9032, 11769, 11778, 11786, + 11793, 11799, 11807, 11814, 11821, 11827, 11836, 11844, 11851, 11859, + 11865, 11872, 11880, 11885, 3372, 1187, 11892, 11895, 11306, 11899, + 11905, 11909, 11921, 11926, 11933, 11939, 11944, 11951, 11311, 11316, + 11955, 11959, 11964, 11968, 11976, 11983, 11990, 12007, 12011, 12014, + 12022, 12028, 3428, 12032, 12034, 12042, 12049, 12059, 12064, 12070, + 12075, 12079, 12085, 12090, 12093, 12100, 12106, 12112, 12117, 12124, + 12130, 12135, 12142, 12146, 12152, 12159, 12165, 12171, 12179, 12185, + 12193, 12199, 12205, 12210, 12217, 12222, 12226, 12231, 12238, 12243, + 12249, 12255, 12261, 12264, 12268, 12280, 12286, 12291, 12298, 12304, + 12310, 12321, 12331, 12340, 12348, 12355, 12365, 12375, 12383, 12386, + 11330, 12391, 11335, 11460, 12399, 12412, 12427, 12438, 11477, 12456, + 12469, 12482, 12493, 8085, 12504, 12517, 12536, 12547, 12558, 12569, + 2542, 12582, 12586, 12594, 12605, 12612, 12618, 12626, 12630, 12636, + 12639, 12649, 12657, 12664, 12672, 12677, 12682, 12689, 12695, 12700, + 12705, 12709, 12713, 12719, 12725, 12730, 12735, 12740, 12744, 11340, + 11346, 11352, 12748, 12756, 12765, 12772, 7000, 12776, 12778, 12783, + 12788, 12794, 12799, 12804, 12809, 12814, 12818, 12824, 12830, 12835, + 12841, 12846, 12851, 12857, 12862, 12867, 12872, 12878, 12883, 12888, + 12894, 12900, 12905, 12912, 12919, 12924, 12928, 12932, 12935, 12943, + 12948, 12955, 12960, 12965, 12975, 12980, 12987, 12993, 13003, 13017, + 13031, 13045, 13059, 13074, 13089, 13106, 13124, 13137, 13143, 13148, + 13153, 13159, 13164, 13169, 13173, 13177, 13182, 13186, 13197, 13203, + 13208, 13213, 13217, 13222, 13228, 13235, 13240, 13244, 13250, 13255, + 13260, 13264, 13270, 13275, 13280, 13287, 13292, 13296, 13300, 13305, + 13310, 13316, 13322, 13327, 13336, 13344, 13351, 13358, 13364, 13370, + 13375, 13380, 13386, 13391, 13397, 13402, 13408, 13414, 13421, 13427, + 13432, 13437, 7166, 13446, 13449, 13455, 13460, 13465, 13475, 13482, + 13487, 13493, 13498, 13504, 13509, 13515, 13521, 13526, 13534, 13541, + 13546, 13552, 13557, 13561, 13570, 13581, 13588, 13596, 13602, 13609, + 13615, 13620, 13624, 13630, 13635, 13640, 13645, 7171, 5777, 2756, 13649, + 13653, 13657, 13661, 13665, 13668, 13675, 13683, 11366, 13690, 13700, + 13708, 13715, 13723, 13733, 13742, 13747, 10458, 10467, 13752, 13762, + 13777, 13783, 13790, 13797, 13803, 13813, 13823, 11371, 13832, 13838, + 13844, 13852, 13860, 13865, 13874, 13882, 13894, 13904, 13914, 13924, + 13933, 13945, 13955, 13965, 13976, 13981, 13993, 14005, 14017, 14029, + 14041, 14053, 14065, 14077, 14089, 14101, 14112, 14124, 14136, 14148, + 14160, 14172, 14184, 14196, 14208, 14220, 14232, 14243, 14255, 14267, + 14279, 14291, 14303, 14315, 14327, 14339, 14351, 14363, 14374, 14386, + 14398, 14410, 14422, 14434, 14446, 14458, 14470, 14482, 14494, 14505, + 14517, 14529, 14541, 14553, 14565, 14577, 14589, 14601, 14613, 14625, + 14636, 14648, 14660, 14672, 14684, 14696, 14708, 14720, 14732, 14744, + 14756, 14767, 14779, 14791, 14803, 14815, 14827, 14839, 14851, 14863, + 14875, 14887, 14898, 14910, 14922, 14934, 14946, 14959, 14972, 14985, + 14998, 15011, 15024, 15037, 15049, 15062, 15075, 15088, 15101, 15114, + 15127, 15140, 15153, 15166, 15179, 15191, 15204, 15217, 15230, 15243, + 15256, 15269, 15282, 15295, 15308, 15321, 15333, 15346, 15359, 15372, + 15385, 15398, 15411, 15424, 15437, 15450, 15463, 15475, 15488, 15501, + 15514, 15527, 15540, 15553, 15566, 15579, 15592, 15605, 15617, 15630, + 15643, 15656, 15669, 15682, 15695, 15708, 15721, 15734, 15747, 15759, + 15770, 15783, 15796, 15809, 15822, 15835, 15848, 15861, 15874, 15887, + 15900, 15912, 15925, 15938, 15951, 15964, 15977, 15990, 16003, 16016, + 16029, 16042, 16054, 16067, 16080, 16093, 16106, 16119, 16132, 16145, + 16158, 16171, 16184, 16196, 16209, 16222, 16235, 16248, 16261, 16274, + 16287, 16300, 16313, 16326, 16338, 16351, 16364, 16377, 16390, 16403, + 16416, 16429, 16442, 16455, 16468, 16480, 16493, 16506, 16519, 16532, + 16545, 16558, 16571, 16584, 16597, 16610, 16622, 16635, 16648, 16661, + 16674, 16687, 16700, 16713, 16726, 16739, 16752, 16764, 16777, 16790, + 16803, 16816, 16829, 16842, 16855, 16868, 16881, 16894, 16906, 16919, + 16932, 16945, 16958, 16971, 16984, 16997, 17010, 17023, 17036, 17048, + 17061, 17074, 17087, 17100, 17113, 17126, 17139, 17152, 17165, 17178, + 17190, 17201, 17209, 17216, 17222, 17226, 17232, 17238, 17246, 17252, + 17257, 7005, 17261, 17268, 17276, 17283, 17290, 8481, 17297, 17306, + 17311, 5793, 17318, 17323, 17326, 17331, 17339, 17346, 17353, 17359, + 17368, 17377, 17383, 17388, 17398, 17405, 17413, 17419, 17429, 17438, + 17442, 17449, 17453, 17458, 17464, 17472, 17476, 11381, 17485, 17491, + 17495, 17501, 17508, 17519, 6829, 17527, 17533, 17538, 17542, 17546, + 7415, 17551, 17559, 17566, 17575, 17582, 17589, 17595, 17599, 17605, + 17611, 17619, 17625, 17632, 17638, 17644, 17648, 17656, 17665, 17670, + 17681, 17686, 17691, 17696, 5966, 17700, 17706, 17713, 17722, 17727, + 17735, 17747, 17752, 17756, 17759, 17765, 17771, 17776, 17780, 17783, + 17794, 17799, 7201, 17806, 7016, 7206, 17811, 17816, 17821, 17826, 17831, + 17836, 17841, 17846, 17851, 17856, 17861, 17866, 17872, 17877, 17882, + 17887, 17892, 17897, 17902, 17907, 17912, 17917, 17923, 17929, 17934, + 17939, 17944, 17949, 17954, 17959, 17964, 17969, 17974, 17980, 17985, + 17990, 17995, 18001, 18007, 18012, 18017, 18022, 18027, 18032, 18037, + 18042, 18047, 18053, 18058, 18063, 18068, 18073, 18079, 18084, 18089, + 18093, 129, 18101, 18105, 18109, 18113, 18118, 18122, 18126, 9788, 18130, + 18135, 18139, 18144, 18148, 18153, 18157, 18163, 18168, 18172, 18176, + 18184, 18188, 18193, 18198, 18202, 18208, 18213, 18217, 18222, 18227, + 18231, 18238, 18242, 18246, 18251, 18255, 18258, 18271, 18276, 18285, + 7238, 18290, 18293, 2605, 2610, 18297, 18303, 18309, 18314, 18319, 18324, + 18330, 18335, 18340, 18344, 18349, 18354, 18360, 18365, 18370, 18376, + 18381, 18385, 18390, 18395, 18400, 18404, 18409, 18414, 18419, 18424, + 18428, 18432, 18437, 2765, 18386, 18441, 18448, 7494, 18460, 18468, + 18391, 18475, 18480, 18396, 18488, 18493, 18498, 18503, 18507, 18512, + 18515, 18519, 18525, 18530, 6856, 1709, 1714, 18534, 18540, 18546, 18551, + 18555, 18559, 18563, 18566, 18572, 18579, 18587, 18593, 18599, 18604, + 18609, 18613, 11741, 12361, 18618, 18630, 18633, 18640, 18644, 18652, + 18663, 18672, 18685, 18695, 18709, 18721, 18735, 18745, 18757, 18763, + 18778, 18802, 18820, 18839, 18852, 18866, 18884, 18900, 18917, 18935, + 18946, 18965, 18982, 19002, 19020, 19032, 19046, 19060, 19072, 19089, + 19108, 19126, 19138, 19156, 19175, 11520, 19188, 19208, 19220, 8116, + 19232, 19237, 19242, 19247, 19253, 19258, 2334, 19262, 19268, 19272, + 19275, 19279, 19287, 19293, 18405, 19297, 19308, 19314, 19320, 19329, + 19336, 19341, 19348, 19354, 19363, 19371, 19381, 19391, 19396, 19405, + 19414, 19425, 19436, 3677, 19446, 19450, 19460, 19468, 19478, 19489, + 19497, 19504, 19510, 19515, 18415, 19519, 19528, 19532, 19537, 19546, + 19554, 19564, 19573, 19579, 19585, 18420, 18425, 19589, 19599, 916, + 19608, 11702, 1154, 19622, 19631, 19639, 19650, 19661, 19671, 19680, + 19689, 19698, 19704, 19713, 19721, 7178, 19727, 19730, 19734, 19739, + 19744, 19752, 18433, 19756, 19762, 19768, 19773, 19778, 19782, 19790, + 19796, 19802, 3351, 19810, 19815, 19820, 19824, 19828, 19835, 19839, + 19847, 19853, 19858, 19862, 19867, 19873, 19877, 19888, 19893, 19897, + 19908, 19912, 19916, 19919, 19923, 19928, 19932, 19936, 903, 19940, + 19945, 19950, 19955, 19960, 19965, 19970, 19975, 19980, 19985, 19990, + 19995, 20000, 20005, 20011, 20016, 20021, 20026, 20031, 20036, 20041, + 20047, 20052, 20057, 20062, 20067, 20072, 20077, 20082, 20088, 20094, + 20099, 20105, 20110, 20115, 5, 20121, 20125, 20129, 20133, 20138, 20142, + 20146, 20150, 20154, 20159, 20163, 20168, 20172, 20175, 20179, 20184, + 20188, 20193, 20197, 20201, 20205, 20210, 20214, 20218, 20228, 20233, + 20237, 20241, 20246, 20251, 20260, 20265, 20270, 20274, 20278, 20290, + 20299, 20308, 20314, 20318, 20322, 20332, 20341, 20349, 20355, 20359, + 20366, 20376, 20385, 20393, 20401, 20408, 20416, 20425, 20434, 20442, + 20447, 20451, 20455, 20458, 20460, 20464, 20468, 20473, 20478, 20482, + 20486, 20489, 20493, 20496, 20500, 20503, 20506, 20510, 20516, 20520, + 20524, 20528, 20533, 20538, 20543, 20547, 20550, 20555, 20561, 20566, + 20572, 20577, 20581, 20585, 20589, 20594, 20598, 20603, 20607, 20614, + 20618, 20621, 20625, 20631, 20637, 20641, 20645, 20650, 20657, 20663, + 20667, 20676, 20680, 20684, 20687, 20693, 20698, 20704, 1471, 1773, + 20709, 20714, 20719, 20724, 20729, 20734, 20739, 2157, 20744, 20745, + 20748, 20752, 20756, 20761, 20765, 20769, 20772, 20777, 20782, 20786, + 20789, 20794, 20798, 20803, 20807, 11714, 20812, 20815, 20818, 20822, + 20826, 20835, 20842, 20847, 20854, 20858, 20862, 20867, 20872, 20876, + 20881, 20893, 20904, 20909, 20913, 20918, 20922, 20925, 20931, 5894, + 2252, 20935, 20951, 7270, 20971, 20980, 20996, 21000, 21003, 21009, + 21019, 21025, 21040, 21052, 21063, 21071, 21080, 21086, 21095, 21105, + 21116, 21127, 21136, 21145, 21153, 21160, 21168, 21181, 21187, 21192, + 21198, 21203, 21211, 21223, 21235, 21249, 21257, 21264, 21273, 21282, + 21290, 21298, 21306, 21313, 21322, 21330, 21340, 21349, 21359, 21368, + 21377, 21385, 21390, 21394, 21397, 21401, 21405, 21409, 21413, 21417, + 21423, 21429, 11759, 21434, 21446, 21452, 7623, 21463, 21473, 21482, + 21486, 21489, 21493, 21499, 21503, 21508, 21517, 21524, 5935, 21531, + 21539, 21546, 21552, 21557, 21563, 21569, 21577, 21581, 21584, 21586, + 21402, 21595, 21601, 21611, 21616, 21622, 21627, 21632, 21637, 21644, + 21653, 21662, 21668, 21673, 21679, 21684, 21691, 21702, 21707, 21711, + 21721, 21725, 21730, 21740, 21749, 21753, 21761, 21768, 21774, 21779, + 21786, 21790, 10323, 21798, 21805, 21812, 18204, 21327, 21817, 21821, + 18952, 21826, 21840, 21856, 21874, 21893, 21910, 21928, 18971, 21945, + 21965, 18988, 21977, 21989, 12443, 22001, 19008, 22015, 22027, 8129, + 22041, 22046, 22051, 22057, 22061, 22066, 22076, 22082, 7994, 22088, + 22090, 22095, 22103, 22107, 21640, 22113, 22120, 22130, 22135, 22139, + 22142, 22148, 22156, 22166, 22182, 22195, 22209, 12461, 22223, 22230, + 22234, 22237, 22242, 22246, 22256, 22261, 22266, 22271, 22279, 22287, + 22296, 22301, 12466, 22305, 22308, 22311, 22316, 22332, 22340, 22348, + 22356, 22361, 22365, 22371, 22377, 22380, 22386, 22398, 22405, 22411, + 22418, 22432, 22445, 22454, 22466, 22477, 22486, 22495, 22503, 22514, + 5917, 22521, 22527, 22532, 22538, 22548, 22557, 22563, 22568, 22575, + 22583, 22595, 22602, 22611, 22619, 22625, 22631, 22636, 22640, 22643, + 22649, 22654, 22658, 22669, 22678, 22686, 22691, 22697, 10921, 6581, + 22702, 22705, 22708, 22714, 22722, 22730, 22734, 22738, 22743, 22746, + 22755, 22763, 22774, 22778, 22784, 22790, 22794, 22800, 22822, 22846, + 22853, 22859, 22870, 22888, 22895, 22903, 22907, 22916, 22929, 22937, + 22949, 22960, 22970, 22984, 22993, 23001, 23013, 7287, 23024, 23035, + 23047, 23057, 23066, 23071, 23075, 23083, 23088, 23092, 23095, 23098, + 23106, 23114, 23123, 23133, 23142, 23148, 23162, 2556, 23184, 23193, + 23203, 23215, 23225, 23233, 23241, 23250, 23255, 23266, 23277, 23281, + 23291, 23300, 23310, 23320, 23328, 23337, 23344, 23352, 23359, 23368, + 23372, 23380, 23387, 23394, 23405, 23420, 23427, 23437, 23446, 23452, + 11054, 23459, 23464, 23468, 23472, 23480, 23486, 23495, 23500, 23510, + 19517, 23514, 23517, 23522, 23527, 23532, 23537, 23542, 23547, 23552, + 23557, 23563, 23568, 23573, 23579, 1242, 639, 23584, 23593, 2300, 23600, + 23605, 23609, 23615, 1275, 506, 343, 23620, 23629, 23637, 23646, 23654, + 23665, 23674, 23682, 23686, 23689, 23697, 23705, 11727, 23710, 23716, + 4101, 23721, 23725, 23731, 23735, 23742, 1437, 23748, 7355, 23755, 23765, + 23773, 23779, 23788, 23796, 23802, 23810, 23817, 23824, 1478, 2338, + 23831, 23837, 23848, 23859, 23867, 23874, 23883, 23891, 23898, 23905, + 23918, 23929, 23948, 1280, 23952, 23957, 23965, 3387, 23969, 23974, 1441, + 20487, 23984, 23988, 23993, 23997, 3333, 24003, 24011, 24018, 24026, + 3388, 260, 24031, 24039, 24047, 24054, 24060, 24065, 24072, 24075, 24081, + 21504, 24087, 106, 24091, 24095, 24101, 24106, 24113, 24119, 2263, 24123, + 24127, 24130, 24133, 24140, 24146, 18500, 24151, 3432, 13175, 24155, + 24158, 24166, 24169, 24179, 24191, 24196, 24200, 24208, 24215, 24221, + 24228, 24235, 24238, 24242, 24246, 1445, 24256, 24258, 24263, 24269, + 24275, 24280, 24285, 24290, 24295, 24300, 24305, 24310, 24315, 24320, + 24325, 24330, 24335, 24340, 24345, 24351, 24357, 24363, 24369, 24374, + 24379, 24384, 24390, 24395, 24400, 24405, 24411, 24416, 24422, 24427, + 24432, 24437, 24442, 24448, 24453, 24459, 24464, 24469, 24474, 24479, + 24485, 24490, 24496, 24501, 24506, 24511, 24516, 24521, 24526, 24531, + 24536, 24541, 24547, 24553, 24559, 24564, 24569, 24574, 24579, 24585, + 24591, 24597, 24603, 24609, 24615, 24620, 24626, 24631, 24636, 24641, + 24646, 24652, 2376, 24657, 2383, 2390, 2647, 24662, 2396, 2406, 24668, + 24672, 24677, 24682, 24688, 24693, 24698, 24702, 24707, 24713, 24718, + 24723, 24729, 24734, 24738, 24743, 24748, 24753, 24758, 24763, 24769, + 24775, 24780, 24784, 24789, 24793, 24798, 24803, 24808, 24812, 24817, + 24822, 24827, 24832, 24838, 24844, 24849, 24853, 24858, 24863, 24868, + 24873, 24878, 24882, 24887, 24892, 24897, 24901, 24906, 24914, 24920, + 24926, 24932, 24937, 24941, 24944, 24948, 24953, 24957, 24962, 24966, + 24969, 24974, 17578, 23752, 24979, 24984, 24988, 24993, 24997, 25001, + 25006, 25010, 25013, 25016, 25020, 25025, 25033, 25037, 25042, 25046, + 25050, 25055, 25060, 25064, 25070, 25075, 25080, 25087, 25094, 25098, + 25101, 25107, 25116, 25123, 25130, 25134, 25139, 25143, 25149, 25155, + 25159, 25165, 25170, 25175, 25182, 25188, 25194, 25200, 25206, 25213, + 25219, 25225, 25231, 25237, 25243, 25249, 25255, 25262, 25268, 25275, + 25281, 25287, 25293, 25299, 25305, 25311, 25317, 25323, 25329, 8917, + 25335, 25340, 25345, 12716, 25350, 25355, 25360, 25366, 25371, 25376, + 25380, 25385, 25390, 25396, 25401, 25406, 25410, 25415, 25420, 25424, + 25429, 25434, 25439, 25443, 25448, 25453, 25458, 25462, 25466, 12060, + 25470, 25479, 25485, 25491, 25500, 25508, 25513, 25517, 25524, 25530, + 25534, 25539, 25548, 25553, 1477, 25559, 25562, 25566, 18541, 18547, + 25572, 25576, 25587, 25598, 25610, 25617, 25624, 25629, 25633, 17235, + 685, 17577, 25641, 25645, 25650, 25656, 25661, 25667, 25672, 25678, + 25683, 8022, 2714, 3282, 25687, 25690, 25696, 25702, 25708, 25715, 25721, + 25727, 25733, 25739, 25745, 25751, 25757, 25763, 25769, 25775, 25781, + 25787, 25794, 25800, 25806, 25812, 25818, 25824, 25827, 25832, 25837, + 25843, 25848, 25853, 25857, 25862, 25868, 25873, 25878, 25884, 25889, + 25895, 25899, 25904, 25909, 25914, 25919, 25923, 25928, 25933, 25938, + 25944, 25950, 25956, 25961, 25965, 25970, 25974, 25982, 3455, 25988, + 25991, 5976, 25995, 26001, 26008, 5985, 26012, 26018, 26025, 26031, + 26040, 26048, 26052, 26059, 26065, 26069, 26072, 26081, 26089, 26093, + 26103, 26113, 26123, 26129, 26139, 26144, 26157, 26171, 26182, 26194, + 26206, 26220, 26233, 26245, 26257, 11561, 26271, 26276, 26281, 26285, + 26289, 26293, 1762, 22475, 26297, 26302, 26307, 26311, 26314, 26319, + 26324, 26330, 26336, 7767, 12395, 26341, 26346, 26351, 26355, 26360, + 25651, 26365, 26370, 26376, 25657, 26381, 26384, 26392, 25662, 26397, + 26403, 26409, 25668, 26414, 26419, 26425, 26430, 26435, 26441, 26447, + 23128, 26452, 26456, 26461, 26466, 26471, 26479, 26483, 26488, 26493, + 26497, 26502, 26507, 26512, 25673, 25679, 26518, 2452, 234, 26521, 26524, + 26528, 26532, 26540, 26547, 26554, 26558, 26561, 26567, 26575, 26583, + 26587, 26591, 26594, 26601, 26605, 26612, 26620, 26628, 26635, 26639, + 635, 292, 26651, 26656, 26661, 26667, 26672, 3466, 26677, 26682, 26687, + 26692, 26697, 18626, 26702, 26707, 26712, 26717, 26723, 26728, 26732, + 26737, 26742, 26747, 26751, 26756, 26761, 26766, 18464, 3472, 26771, + 26776, 26781, 26787, 26792, 26797, 26801, 26806, 26811, 26817, 26822, + 26827, 26831, 26836, 26841, 26846, 26850, 26855, 26860, 26865, 26871, + 26877, 26882, 26886, 26891, 26896, 26901, 26905, 26913, 26917, 26923, + 26927, 26934, 13070, 26940, 26947, 26955, 26962, 26968, 26980, 26986, + 2666, 26990, 26596, 26994, 27005, 27010, 27015, 27020, 27024, 27029, + 18552, 27033, 17591, 27038, 27043, 27049, 27054, 27058, 27062, 27065, + 27071, 27082, 27094, 27099, 27103, 27106, 321, 27110, 27115, 27120, + 27125, 27130, 27135, 27141, 27146, 27151, 27157, 27162, 27168, 27173, + 27179, 27184, 27189, 27194, 27199, 27204, 27209, 27214, 27219, 27225, + 27230, 27235, 27240, 27245, 27250, 27255, 27260, 27266, 27272, 27277, + 27282, 27287, 27292, 27297, 27302, 27307, 27312, 27317, 27322, 27327, + 27332, 27337, 27342, 27347, 27352, 27357, 27362, 27368, 26, 27373, 27377, + 27381, 27389, 27393, 27397, 27400, 27403, 27408, 27412, 27417, 27421, + 27426, 27430, 27435, 27439, 27442, 27444, 27447, 27449, 27453, 27465, + 27474, 27478, 27484, 27489, 27495, 27500, 27505, 27509, 27514, 27521, + 27526, 27532, 27537, 27541, 27548, 21335, 21345, 27552, 27557, 27562, + 27567, 27571, 27578, 6076, 27584, 27593, 27601, 27616, 27630, 27638, + 27649, 27658, 27663, 5243, 27673, 27678, 27682, 27685, 27689, 27693, + 27700, 27705, 6820, 27715, 27717, 27720, 27724, 27728, 27733, 27739, + 27744, 27753, 27759, 27764, 27771, 27775, 27782, 27795, 27803, 27807, + 27817, 27822, 27826, 27830, 27836, 27841, 27851, 27860, 27871, 27879, + 27890, 27899, 27902, 27906, 27914, 27920, 27928, 27935, 27941, 2351, + 27945, 27947, 27952, 27957, 27960, 27962, 27966, 27969, 27973, 27977, + 27980, 27986, 27996, 28001, 28007, 28011, 28016, 28029, 21606, 28035, + 28044, 13898, 26109, 28051, 28056, 28060, 28068, 28075, 28080, 28084, + 28088, 28096, 28102, 28108, 28113, 28117, 28120, 28125, 28138, 28154, + 19078, 28171, 28183, 28200, 28212, 28226, 19095, 19114, 28238, 28250, + 2573, 28264, 28269, 28274, 28278, 28285, 28297, 28303, 28306, 28311, + 18244, 28314, 28318, 28321, 28326, 28331, 28337, 28342, 28347, 28353, + 28359, 28364, 28368, 28373, 28378, 28383, 28387, 28390, 28396, 28401, + 28406, 28411, 28415, 28420, 28426, 28431, 28436, 28442, 28447, 28452, + 28457, 28462, 28467, 28471, 28474, 28480, 28484, 28492, 28499, 28507, + 28517, 28523, 28529, 28533, 28542, 28547, 28552, 8036, 28557, 28564, + 28570, 28575, 28581, 28589, 28596, 28600, 28603, 28614, 28621, 28627, + 28636, 28640, 28643, 28649, 28656, 28662, 28668, 28676, 24055, 28683, + 28691, 28697, 28702, 28708, 28713, 28719, 28723, 28730, 28736, 21619, + 28745, 28750, 28758, 28766, 7383, 4120, 28773, 28777, 28781, 28785, + 28790, 28794, 28798, 28803, 28808, 28812, 17640, 28817, 28821, 28825, + 28829, 28832, 28834, 28839, 28847, 28851, 28858, 28862, 28870, 28877, + 28887, 28891, 28895, 28903, 28909, 28918, 10570, 28924, 28933, 28940, + 28948, 28956, 28964, 28971, 28978, 28985, 28992, 28999, 29004, 29010, + 29027, 29035, 29043, 29050, 380, 29054, 29060, 27654, 29066, 29069, + 29077, 29083, 29089, 29098, 29104, 3420, 12046, 29113, 29120, 29125, + 29129, 29136, 29144, 29153, 29163, 29169, 29177, 29186, 29194, 18248, + 29201, 29208, 29214, 29224, 29233, 29244, 29248, 29254, 29259, 29265, + 29271, 29276, 29289, 29302, 29315, 29322, 29328, 29333, 29337, 1451, + 29341, 29346, 29351, 29356, 29361, 29367, 29372, 29377, 29382, 29387, + 29392, 29397, 29402, 29408, 29414, 29419, 29424, 29430, 29435, 29440, + 29445, 29451, 29456, 29461, 29466, 29471, 29477, 29482, 29487, 29493, + 29498, 29503, 29508, 29513, 29518, 29524, 29529, 29535, 29540, 29546, + 29551, 29556, 29561, 29567, 29573, 29579, 29585, 29591, 29597, 29603, + 29609, 29614, 29619, 29625, 29630, 29635, 29640, 29645, 29650, 29655, + 29660, 29666, 29671, 29676, 29682, 29688, 101, 29693, 29695, 29699, + 29703, 29707, 29712, 29716, 7323, 29720, 29726, 4331, 29732, 29735, + 29740, 29744, 29749, 29753, 29757, 29762, 7869, 29766, 29770, 29774, + 12131, 29779, 29783, 29788, 29793, 29798, 29802, 29809, 21623, 29815, + 29818, 29822, 29827, 29833, 29837, 29843, 29848, 29852, 29856, 29860, + 3317, 3322, 24194, 29863, 29871, 29878, 29882, 29887, 342, 29892, 29898, + 29904, 29908, 29917, 29921, 29925, 29930, 29935, 29939, 29946, 29952, + 29957, 29972, 29987, 30002, 30018, 30036, 7831, 30050, 30055, 30059, + 30067, 27788, 30075, 30079, 30088, 30096, 7546, 11842, 30100, 30103, + 30106, 6089, 3621, 30111, 30119, 30123, 30126, 30130, 30135, 30140, + 30146, 30151, 30155, 30159, 30164, 30168, 30174, 30178, 30185, 30189, + 9256, 30196, 30202, 30207, 30214, 30221, 30228, 23641, 6020, 30235, + 30242, 30249, 30255, 30260, 30267, 30278, 30284, 30289, 30296, 30300, + 30304, 30314, 30325, 30331, 30336, 30341, 30346, 30351, 30355, 30359, + 30365, 2255, 767, 7891, 7896, 7902, 30374, 7907, 7912, 7918, 30379, + 30389, 30393, 7923, 30398, 30401, 30406, 30410, 30415, 30422, 30428, + 30438, 4146, 30447, 30451, 30455, 30465, 30471, 30482, 30488, 30494, + 30499, 30505, 30511, 30516, 30519, 30526, 30532, 30537, 30544, 30551, + 30555, 30565, 30578, 30587, 30596, 30607, 30620, 30629, 30640, 30645, + 30650, 7928, 30656, 30664, 30669, 5094, 21, 30676, 30681, 13284, 30685, + 30688, 30691, 23219, 30695, 23650, 30703, 30707, 30710, 30716, 30722, + 30730, 30736, 30743, 30747, 30751, 23383, 30755, 30764, 30770, 30775, + 30779, 30787, 21669, 30793, 30800, 30806, 30811, 30816, 30820, 30826, + 30831, 30837, 3747, 716, 30844, 30848, 30851, 12054, 30863, 29182, 30874, + 30877, 30884, 30890, 30894, 30900, 30905, 30911, 30916, 30921, 30925, + 30930, 30935, 30945, 30951, 30964, 30970, 30975, 30981, 13193, 1454, 932, + 25770, 25776, 30986, 25782, 25795, 25801, 25807, 30992, 25813, 25819, + 30998, 31004, 14, 31012, 31019, 31023, 31027, 31035, 31039, 31044, 31048, + 31055, 31060, 31064, 31069, 31075, 31080, 31086, 31091, 31095, 31099, + 31103, 31108, 31112, 31117, 31121, 31128, 31133, 31137, 31142, 31146, + 31151, 31155, 31160, 12218, 12223, 31165, 31169, 31172, 31176, 31181, + 31185, 31191, 31198, 31203, 31213, 31218, 31226, 31230, 31233, 31237, + 31242, 31247, 31251, 31256, 10581, 31267, 31271, 31274, 31278, 31282, + 31285, 31289, 6108, 10597, 31292, 31295, 31300, 31304, 31313, 31329, + 31345, 31355, 23138, 31362, 31366, 31371, 31375, 31379, 31384, 31389, + 31393, 31398, 31402, 31406, 22323, 31412, 17702, 31417, 31424, 31432, + 31438, 31445, 31453, 31459, 31463, 31469, 31477, 31481, 31490, 7304, + 31498, 31502, 31510, 31517, 31522, 31526, 31529, 31533, 31536, 31540, + 31547, 31552, 21814, 25825, 31556, 31563, 31569, 31574, 31577, 31579, + 31586, 31593, 31599, 31603, 31606, 31610, 31614, 31618, 31623, 31627, + 31631, 31634, 31638, 31652, 19144, 31671, 31684, 31697, 31710, 19162, + 31725, 8090, 31740, 31746, 31750, 31754, 31761, 31767, 31772, 31778, + 31788, 31800, 31811, 31816, 31823, 31827, 31830, 12589, 31838, 12239, + 31851, 31855, 31859, 31864, 31869, 31873, 31877, 31880, 5750, 23022, + 31885, 31889, 31895, 31904, 31909, 29159, 31915, 31920, 31924, 31929, + 31936, 31940, 31943, 11526, 31948, 31955, 939, 31959, 31964, 31969, + 31975, 31980, 31985, 31989, 31994, 32000, 32005, 32011, 32016, 32022, + 32032, 32037, 32042, 32046, 5245, 5257, 32051, 32054, 32061, 32070, + 32074, 32077, 32081, 32086, 668, 32091, 32097, 23211, 32103, 32108, + 32118, 32127, 32134, 32140, 32144, 32151, 32157, 32164, 32170, 32180, + 32188, 32194, 32200, 32205, 32209, 32216, 32222, 32229, 31619, 548, 1208, + 32235, 32240, 32243, 32249, 32257, 1383, 32262, 32266, 32271, 32278, + 32284, 32288, 32293, 32302, 32309, 32319, 32325, 23237, 32342, 32351, + 32359, 32365, 32370, 32377, 32383, 32391, 32400, 32408, 32413, 32421, + 32427, 32446, 12522, 32460, 32476, 32490, 32496, 32501, 32506, 32511, + 32517, 32522, 32526, 32533, 32538, 32542, 319, 2807, 32549, 32554, 22579, + 32380, 32559, 32564, 32572, 32576, 32579, 32585, 32589, 23287, 32592, + 32596, 32599, 32604, 32608, 32613, 32618, 32622, 32627, 32631, 17511, + 17522, 32635, 32640, 32646, 22292, 32651, 32655, 12702, 32658, 32663, + 32668, 32673, 32678, 32683, 32688, 32693, 453, 43, 25828, 25833, 25838, + 25844, 25849, 25854, 32698, 25858, 32702, 32706, 25863, 25869, 32710, + 25874, 25879, 32718, 32723, 25885, 32728, 32733, 32738, 32743, 32749, + 32755, 25896, 32768, 32774, 25900, 25905, 32778, 25910, 25915, 32781, + 32786, 32790, 25591, 32796, 10746, 32803, 32808, 25920, 32812, 32817, + 32822, 32827, 32831, 32836, 32841, 32847, 32852, 32857, 32863, 32869, + 32874, 32878, 32883, 32888, 32893, 32897, 32902, 32907, 32912, 32918, + 32924, 32930, 32935, 32939, 32944, 32948, 25924, 25929, 25934, 32952, + 32956, 25939, 25945, 25951, 25957, 32968, 21521, 32972, 32976, 32981, + 32986, 32991, 32995, 32999, 33009, 33014, 33019, 33023, 33027, 33030, + 33038, 25966, 1461, 33043, 33051, 33060, 33064, 33072, 33080, 33096, + 33101, 1731, 9398, 33105, 2853, 33117, 33118, 33126, 33133, 33138, 33143, + 7197, 1043, 7950, 33150, 33155, 33158, 33167, 1294, 33172, 33179, 33182, + 33187, 18600, 2485, 33191, 8312, 33201, 33207, 2273, 2283, 33216, 33225, + 27997, 7985, 3565, 29063, 1299, 33235, 33243, 33250, 33255, 33259, 33263, + 19759, 8012, 33271, 33280, 33289, 33297, 33304, 33309, 33322, 33335, + 33347, 33359, 33371, 33384, 33395, 33406, 33414, 33422, 33434, 33446, + 33457, 33466, 33474, 33481, 33493, 33500, 33509, 33516, 33529, 33539, + 33544, 33550, 33555, 33559, 33566, 33570, 33577, 33585, 2451, 33592, + 33603, 33613, 33622, 33630, 33640, 33648, 33658, 33663, 33669, 33680, + 33690, 33699, 33708, 33718, 33727, 33732, 33737, 1687, 37, 33745, 33753, + 33764, 33775, 33785, 33792, 33798, 33803, 33807, 33818, 33828, 33837, + 33848, 13257, 13262, 33853, 33862, 33867, 33877, 33882, 33890, 33898, + 33905, 33911, 8057, 1018, 33915, 33921, 33926, 33929, 2094, 31856, 33937, + 33941, 33944, 1494, 33950, 11019, 1304, 33955, 33968, 33982, 2536, 34000, + 34012, 34024, 2550, 2567, 34038, 34051, 2582, 34065, 34077, 2597, 34091, + 1310, 1316, 1322, 8237, 34096, 34101, 34106, 34110, 34125, 34140, 34155, + 34170, 34185, 34200, 34215, 34230, 34245, 34260, 34275, 34290, 34305, + 34320, 34335, 34350, 34365, 34380, 34395, 34410, 34425, 34440, 34455, + 34470, 34485, 34500, 34515, 34530, 34545, 34560, 34575, 34590, 34605, + 34620, 34635, 34650, 34665, 34680, 34695, 34710, 34725, 34740, 34755, + 34770, 34785, 34800, 34815, 34830, 34845, 34860, 34875, 34890, 34905, + 34920, 34935, 34950, 34965, 34980, 34995, 35010, 35025, 35040, 35055, + 35070, 35085, 35100, 35115, 35130, 35145, 35160, 35175, 35190, 35205, + 35220, 35235, 35250, 35265, 35280, 35295, 35310, 35325, 35340, 35355, + 35370, 35385, 35400, 35415, 35430, 35445, 35460, 35475, 35490, 35505, + 35520, 35535, 35550, 35565, 35580, 35595, 35610, 35625, 35640, 35655, + 35670, 35685, 35700, 35715, 35730, 35745, 35760, 35775, 35790, 35805, + 35820, 35835, 35850, 35865, 35880, 35895, 35910, 35925, 35940, 35955, + 35970, 35985, 36000, 36015, 36030, 36045, 36060, 36075, 36090, 36105, + 36120, 36135, 36150, 36165, 36180, 36195, 36210, 36225, 36240, 36255, + 36270, 36285, 36300, 36315, 36330, 36345, 36360, 36375, 36390, 36405, + 36420, 36435, 36450, 36465, 36480, 36495, 36510, 36525, 36540, 36555, + 36570, 36585, 36600, 36615, 36630, 36645, 36660, 36675, 36690, 36705, + 36720, 36735, 36750, 36765, 36780, 36795, 36810, 36825, 36840, 36855, + 36870, 36885, 36900, 36915, 36930, 36945, 36960, 36975, 36990, 37005, + 37020, 37035, 37050, 37065, 37080, 37095, 37110, 37125, 37140, 37155, + 37170, 37185, 37200, 37215, 37230, 37245, 37260, 37275, 37290, 37305, + 37320, 37335, 37350, 37365, 37380, 37395, 37410, 37425, 37440, 37455, + 37470, 37485, 37500, 37515, 37530, 37545, 37560, 37575, 37590, 37605, + 37620, 37635, 37650, 37665, 37680, 37695, 37710, 37725, 37740, 37755, + 37770, 37785, 37800, 37815, 37830, 37845, 37860, 37875, 37890, 37905, + 37920, 37935, 37950, 37965, 37980, 37995, 38010, 38025, 38040, 38055, + 38070, 38085, 38100, 38115, 38130, 38145, 38160, 38175, 38190, 38205, + 38220, 38235, 38250, 38265, 38280, 38295, 38310, 38325, 38340, 38355, + 38370, 38385, 38400, 38415, 38430, 38445, 38460, 38475, 38490, 38505, + 38520, 38535, 38550, 38565, 38580, 38595, 38610, 38625, 38640, 38655, + 38670, 38685, 38700, 38715, 38730, 38745, 38760, 38775, 38790, 38805, + 38820, 38835, 38850, 38865, 38880, 38895, 38910, 38925, 38940, 38955, + 38970, 38985, 39000, 39015, 39030, 39045, 39060, 39075, 39090, 39105, + 39120, 39135, 39150, 39165, 39180, 39195, 39210, 39225, 39240, 39255, + 39270, 39285, 39300, 39315, 39330, 39345, 39360, 39375, 39390, 39405, + 39420, 39435, 39450, 39465, 39480, 39495, 39510, 39525, 39540, 39555, + 39570, 39585, 39600, 39615, 39630, 39645, 39660, 39675, 39690, 39705, + 39720, 39735, 39750, 39765, 39780, 39795, 39810, 39825, 39840, 39855, + 39870, 39885, 39900, 39915, 39930, 39945, 39960, 39975, 39990, 40005, + 40020, 40035, 40050, 40065, 40080, 40095, 40110, 40125, 40140, 40155, + 40170, 40185, 40200, 40215, 40230, 40245, 40260, 40275, 40290, 40305, + 40320, 40335, 40350, 40365, 40380, 40395, 40410, 40425, 40440, 40455, + 40470, 40485, 40500, 40515, 40530, 40545, 40560, 40575, 40590, 40605, + 40620, 40635, 40650, 40665, 40680, 40695, 40710, 40725, 40740, 40755, + 40770, 40785, 40800, 40815, 40830, 40845, 40860, 40875, 40890, 40905, + 40920, 40935, 40950, 40965, 40980, 40995, 41010, 41025, 41040, 41055, + 41070, 41085, 41100, 41115, 41130, 41145, 41160, 41175, 41190, 41205, + 41220, 41235, 41250, 41265, 41280, 41295, 41310, 41325, 41340, 41355, + 41370, 41385, 41400, 41415, 41430, 41445, 41460, 41475, 41490, 41505, + 41520, 41535, 41550, 41565, 41580, 41595, 41610, 41625, 41640, 41655, + 41670, 41685, 41700, 41715, 41730, 41745, 41761, 41777, 41793, 41809, + 41825, 41841, 41857, 41873, 41889, 41905, 41921, 41937, 41953, 41969, + 41985, 42001, 42017, 42033, 42049, 42065, 42081, 42097, 42113, 42129, + 42145, 42161, 42177, 42193, 42209, 42225, 42241, 42257, 42273, 42289, + 42305, 42321, 42337, 42353, 42369, 42385, 42401, 42417, 42433, 42449, + 42465, 42481, 42497, 42513, 42529, 42545, 42561, 42577, 42593, 42609, + 42625, 42641, 42657, 42673, 42689, 42705, 42721, 42737, 42753, 42769, + 42785, 42801, 42817, 42833, 42849, 42865, 42881, 42897, 42913, 42929, + 42945, 42961, 42977, 42993, 43009, 43025, 43041, 43057, 43073, 43089, + 43105, 43121, 43137, 43153, 43169, 43185, 43201, 43217, 43233, 43249, + 43265, 43281, 43297, 43313, 43329, 43345, 43361, 43377, 43393, 43409, + 43425, 43441, 43457, 43473, 43489, 43505, 43521, 43537, 43553, 43569, + 43585, 43601, 43617, 43633, 43649, 43665, 43681, 43697, 43713, 43729, + 43745, 43761, 43777, 43793, 43809, 43825, 43841, 43857, 43873, 43889, + 43905, 43921, 43937, 43953, 43969, 43985, 44001, 44017, 44033, 44049, + 44065, 44081, 44097, 44113, 44129, 44145, 44161, 44177, 44193, 44209, + 44225, 44241, 44257, 44273, 44289, 44305, 44321, 44337, 44353, 44369, + 44385, 44401, 44417, 44433, 44449, 44465, 44481, 44497, 44513, 44529, + 44545, 44561, 44577, 44593, 44609, 44625, 44641, 44657, 44673, 44689, + 44705, 44721, 44737, 44753, 44769, 44785, 44801, 44817, 44833, 44849, + 44865, 44881, 44897, 44913, 44929, 44945, 44961, 44977, 44993, 45009, + 45025, 45041, 45057, 45073, 45089, 45105, 45121, 45137, 45153, 45169, + 45185, 45201, 45217, 45233, 45249, 45265, 45281, 45297, 45313, 45329, + 45345, 45361, 45377, 45393, 45409, 45425, 45441, 45457, 45473, 45489, + 45505, 45521, 45537, 45553, 45569, 45585, 45601, 45617, 45633, 45649, + 45665, 45681, 45697, 45713, 45729, 45745, 45761, 45777, 45793, 45809, + 45825, 45841, 45857, 45873, 45889, 45905, 45921, 45937, 45953, 45969, + 45985, 46001, 46017, 46033, 46049, 46065, 46081, 46097, 46113, 46129, + 46145, 46161, 46177, 46193, 46209, 46225, 46241, 46257, 46273, 46289, + 46305, 46321, 46337, 46353, 46369, 46385, 46401, 46417, 46433, 46449, + 46465, 46481, 46497, 46513, 46529, 46545, 46561, 46577, 46593, 46609, + 46625, 46641, 46657, 46673, 46689, 46705, 46721, 46737, 46753, 46769, + 46785, 46801, 46817, 46833, 46849, 46865, 46881, 46897, 46913, 46929, + 46945, 46961, 46977, 46993, 47009, 47025, 47041, 47057, 47073, 47089, + 47105, 47121, 47137, 47153, 47169, 47185, 47201, 47217, 47233, 47249, + 47265, 47281, 47297, 47313, 47329, 47345, 47361, 47377, 47393, 47409, + 47425, 47441, 47457, 47473, 47489, 47505, 47521, 47537, 47553, 47569, + 47585, 47601, 47617, 47633, 47649, 47665, 47681, 47697, 47713, 47729, + 47745, 47761, 47777, 47793, 47809, 47825, 47841, 47857, 47873, 47889, + 47905, 47921, 47937, 47953, 47969, 47985, 48001, 48017, 48033, 48049, + 48065, 48081, 48097, 48113, 48129, 48145, 48161, 48177, 48193, 48209, + 48225, 48241, 48257, 48273, 48289, 48305, 48321, 48337, 48353, 48369, + 48385, 48401, 48417, 48433, 48449, 48465, 48481, 48497, 48513, 48529, + 48545, 48561, 48577, 48593, 48609, 48625, 48641, 48657, 48673, 48689, + 48705, 48721, 48737, 48753, 48769, 48785, 48801, 48817, 48833, 48849, + 48865, 48881, 48897, 48913, 48929, 48945, 48961, 48977, 48993, 49009, + 49025, 49041, 49057, 49073, 49089, 49105, 49121, 49137, 49153, 49169, + 49185, 49201, 49217, 49233, 49249, 49265, 49281, 49297, 49313, 49329, + 49345, 49361, 49377, 49393, 49409, 49425, 49441, 49457, 49473, 49489, + 49505, 49521, 49537, 49553, 49569, 49585, 49601, 49617, 49633, 49649, + 49665, 49681, 49697, 49713, 49729, 49745, 49761, 49777, 49793, 49809, + 49825, 49841, 49857, 49873, 49889, 49905, 49921, 49937, 49953, 49969, + 49985, 50001, 50017, 50033, 50049, 50065, 50081, 50097, 50113, 50129, + 50145, 50161, 50177, 50193, 50209, 50225, 50241, 50257, 50273, 50289, + 50305, 50321, 50337, 50353, 50369, 50385, 50401, 50417, 50432, 50441, + 50447, 50453, 50463, 50471, 11823, 13787, 7661, 50484, 1502, 50492, + 22665, 5207, 50498, 50503, 50508, 50513, 50518, 50524, 50529, 50535, + 50540, 50546, 50551, 50556, 50561, 50566, 50572, 50577, 50582, 50587, + 50592, 50597, 50602, 50607, 50613, 50618, 50624, 50631, 2489, 50636, + 50642, 6480, 50646, 50651, 50658, 50666, 40, 50670, 50676, 50681, 50686, + 50690, 50695, 50699, 50703, 8255, 50707, 50717, 50730, 50741, 50754, + 50761, 50767, 50772, 50778, 50784, 50790, 50795, 50800, 50805, 50810, + 50814, 50819, 50824, 50829, 50835, 50841, 50847, 50852, 50856, 50861, + 50866, 50870, 50875, 50880, 50885, 50889, 8271, 8282, 8287, 1545, 50893, + 1550, 50899, 50902, 1581, 50908, 1587, 1593, 8317, 50913, 50921, 50928, + 50932, 50938, 50943, 25620, 50948, 50955, 50960, 50964, 50968, 1598, + 12933, 12944, 50977, 50984, 50989, 50993, 12956, 1602, 30319, 50996, + 51006, 51010, 1607, 31921, 51015, 8437, 8443, 51021, 51033, 51050, 51067, + 51084, 51101, 51118, 51135, 51152, 51169, 51186, 51203, 51220, 51237, + 51254, 51271, 51288, 51305, 51322, 51339, 51356, 51373, 51390, 51407, + 51424, 51441, 51458, 51475, 51492, 51509, 51526, 51543, 51560, 51577, + 51594, 51611, 51628, 51645, 51662, 51679, 51696, 51713, 51730, 51747, + 51764, 51781, 51798, 51815, 51832, 51849, 51866, 51877, 51882, 1612, + 51886, 51892, 7144, 1617, 22912, 51897, 51908, 51918, 51923, 51930, + 51936, 51941, 51946, 51950, 8454, 1622, 8459, 51954, 51959, 51965, 51970, + 51975, 51980, 51985, 51990, 51995, 52000, 52006, 52012, 52018, 52023, + 52027, 52032, 52037, 52041, 52046, 52051, 52056, 52060, 52065, 52071, + 52076, 52081, 52085, 52090, 52095, 52101, 52106, 52111, 52117, 52123, + 52128, 52132, 52137, 52142, 52147, 52151, 52156, 52161, 52166, 52172, + 52178, 52183, 52187, 52191, 52196, 52201, 52206, 24124, 52210, 52215, + 52220, 52226, 52231, 52236, 52240, 52245, 52250, 52256, 52261, 52266, + 52272, 52278, 52283, 52287, 52292, 52297, 52301, 52306, 52311, 52316, + 52322, 52328, 52333, 52337, 52342, 52347, 52351, 52356, 52361, 52366, + 52370, 52373, 26077, 52378, 52386, 13218, 13236, 8557, 52392, 8562, + 52407, 52412, 52423, 52435, 52447, 52459, 2588, 52471, 52476, 52480, + 52486, 52492, 1634, 940, 52497, 52502, 31960, 52506, 52510, 52515, 52519, + 13301, 52524, 52527, 52535, 1638, 8587, 8593, 1643, 52543, 52550, 52555, + 52564, 52574, 52581, 1648, 52588, 52593, 13376, 52597, 52602, 52609, + 52615, 52619, 52629, 13398, 7063, 7070, 1653, 52636, 52642, 52650, 52657, + 52663, 52669, 52674, 52685, 52694, 3498, 25495, 25504, 13438, 1658, 1662, + 52702, 52713, 52718, 1665, 52726, 52731, 52743, 52749, 52754, 1670, + 52759, 52764, 52772, 52780, 52787, 52796, 52804, 52813, 1675, 1680, + 52817, 52824, 13547, 52832, 52838, 52846, 52851, 8727, 52860, 52866, + 52872, 52877, 52885, 8736, 8741, 52893, 52899, 3563, 32038, 52904, 52910, + 52915, 52923, 52930, 52935, 52939, 52945, 1691, 52950, 52953, 977, 52959, + 52964, 52969, 52975, 52980, 52985, 52990, 52995, 53000, 53005, 1700, 9, + 53011, 53015, 53020, 53024, 53028, 53032, 26315, 53037, 53042, 53047, + 53051, 53054, 53058, 53062, 53067, 53071, 53076, 53080, 28322, 28327, + 28332, 53083, 53090, 53096, 31804, 53106, 28338, 28343, 26325, 26331, + 28354, 26337, 53111, 53116, 53120, 53124, 53127, 53131, 53134, 53139, + 53143, 53147, 53150, 53162, 27517, 53169, 12396, 760, 53172, 53176, + 53181, 53185, 10779, 53188, 53195, 53208, 53217, 53222, 53232, 53245, + 53257, 53264, 53269, 53278, 53291, 29283, 53309, 53314, 53321, 53327, + 53332, 53340, 22979, 585, 53346, 53352, 53358, 53363, 26342, 4176, 26356, + 53367, 53377, 53382, 53392, 53407, 53413, 53419, 26361, 25652, 53424, + 53429, 53434, 53438, 53443, 53448, 53452, 4217, 26382, 53456, 53462, 337, + 53472, 53479, 53488, 53494, 53502, 53506, 53510, 53514, 53518, 53523, + 53527, 53533, 53541, 53546, 53550, 53555, 53559, 53563, 53569, 53575, + 53580, 53584, 26398, 53589, 26404, 26410, 53594, 53600, 53605, 53609, + 25669, 13167, 53612, 53616, 53621, 53628, 53634, 53638, 53643, 53649, + 53653, 53657, 53662, 53667, 53671, 53674, 53680, 53685, 53692, 53699, + 53705, 53710, 53715, 53719, 53724, 53730, 53735, 53741, 53746, 53751, + 53756, 53762, 53767, 53772, 53778, 53784, 53790, 26415, 53795, 53800, + 53805, 26426, 53810, 53815, 53820, 53826, 53832, 26431, 53837, 53842, + 53847, 26442, 26448, 53852, 53857, 53862, 53867, 23129, 26453, 26457, + 53872, 53843, 53876, 53882, 53890, 53897, 53903, 53913, 53919, 53926, + 8214, 26462, 53932, 53945, 53954, 53960, 53969, 53975, 19524, 53982, + 53989, 26443, 53999, 54006, 54011, 54015, 54019, 54024, 4251, 54028, + 54033, 54038, 28416, 28421, 54042, 28427, 28432, 54047, 28437, 28443, + 54052, 28448, 54063, 54066, 54078, 54086, 26484, 54090, 54099, 54109, + 54118, 26489, 54123, 54130, 54139, 54145, 54153, 27045, 4069, 54158, + 26498, 54164, 54167, 54173, 54180, 54185, 54190, 19456, 54194, 54200, + 54206, 54211, 54217, 54223, 54228, 765, 29092, 29839, 29845, 54232, + 54236, 54240, 54243, 54256, 54262, 54266, 54269, 54274, 27708, 54278, + 25674, 17585, 54284, 4197, 4205, 6948, 54287, 54292, 54297, 54302, 54307, + 54312, 54317, 54322, 54327, 54332, 54338, 54343, 54348, 54354, 54359, + 54364, 54369, 54374, 54379, 54384, 54390, 54395, 54401, 54406, 54411, + 54416, 54421, 54426, 54431, 54436, 54441, 54446, 54451, 54457, 54462, + 54467, 54472, 54477, 54482, 54487, 54493, 54498, 54503, 54508, 54513, + 54518, 54523, 54528, 54533, 54538, 54544, 54549, 54554, 54559, 54564, + 54570, 54576, 54581, 54587, 54592, 54597, 54602, 54607, 54612, 1495, 235, + 54617, 54621, 54625, 54629, 54633, 54636, 54640, 54645, 54649, 54654, + 54658, 54662, 54666, 54671, 54675, 54680, 54684, 54688, 54695, 11999, + 54704, 54713, 54717, 20701, 54721, 54727, 54735, 54741, 54753, 54757, + 54762, 54768, 54778, 54788, 54794, 54798, 54803, 54809, 54818, 54827, + 54835, 12274, 54839, 54848, 54856, 54867, 54878, 54887, 54891, 54900, + 54910, 54916, 54921, 54927, 54932, 98, 25579, 54943, 21735, 54949, 54956, + 54962, 54966, 54976, 54984, 54989, 54993, 55001, 55005, 55011, 55021, + 1132, 55024, 55027, 55031, 55037, 55044, 55050, 55059, 55068, 55074, + 55080, 55085, 55092, 55099, 55112, 55121, 55130, 55135, 55139, 55146, + 55153, 55160, 55167, 55174, 55179, 55183, 55187, 55190, 55200, 55204, + 55213, 55217, 55222, 55226, 55235, 55243, 55251, 55256, 55260, 55265, + 55270, 55274, 55280, 55292, 55300, 55310, 55317, 55323, 55328, 55332, + 55336, 55340, 55349, 55358, 55367, 55373, 55379, 55385, 55390, 55397, + 55403, 55411, 55418, 9779, 55424, 55430, 55434, 11225, 55438, 55447, + 55453, 55461, 55468, 55472, 55476, 55482, 55490, 55497, 55503, 55514, + 55518, 55522, 55526, 55529, 55535, 55540, 55544, 55548, 55557, 55565, + 55572, 19890, 31572, 55578, 55586, 55590, 55597, 55606, 55614, 55620, + 55625, 55629, 55634, 55638, 55643, 55652, 55656, 55663, 55670, 55678, + 55684, 55695, 55701, 55710, 55717, 55724, 55731, 55738, 55745, 34285, + 55752, 55759, 55764, 55770, 37407, 55774, 55779, 55784, 55790, 55796, + 55802, 55807, 55812, 55817, 55822, 55828, 55833, 55839, 55844, 55850, + 55855, 55860, 55865, 55870, 55875, 55880, 55885, 55891, 55896, 55902, + 55907, 55912, 55917, 55922, 55927, 55932, 55938, 55943, 55948, 55953, + 55958, 55963, 55968, 55973, 55978, 55983, 55988, 55994, 55999, 56004, + 56009, 56014, 56019, 56024, 56029, 56034, 56040, 56045, 56050, 56055, + 56060, 56065, 56070, 56075, 56080, 56085, 56090, 56095, 56100, 56106, + 1816, 216, 30402, 56111, 56114, 56119, 56123, 55247, 56126, 56136, 56143, + 56152, 56162, 56172, 56180, 56188, 56192, 56195, 56202, 56208, 56219, + 56231, 56242, 56249, 1305, 19361, 56259, 2518, 56263, 1087, 13743, 30918, + 56271, 56284, 56288, 56293, 56298, 56303, 56309, 56315, 56320, 6489, + 56325, 56333, 8588, 56338, 56344, 1703, 8600, 669, 56353, 56362, 56372, + 22357, 56381, 56387, 13353, 56393, 56397, 3678, 8890, 56403, 52708, + 56410, 6919, 171, 11159, 56416, 56428, 56432, 56438, 22932, 56442, 8878, + 2623, 4, 56447, 56457, 56463, 56474, 56481, 56487, 56493, 56501, 56508, + 56518, 56528, 56538, 1317, 56547, 56553, 2646, 2652, 6486, 2200, 56557, + 56561, 56570, 56581, 56589, 56597, 56603, 56614, 56625, 56633, 56639, + 8931, 56644, 56652, 56656, 56660, 23273, 56672, 56682, 56688, 56694, + 56704, 56707, 56718, 56728, 56737, 56741, 56748, 1089, 2511, 56758, + 56763, 56771, 56779, 56790, 56804, 11111, 374, 56814, 56818, 56827, + 56835, 56841, 56848, 56854, 56861, 56871, 56879, 3570, 184, 56887, 56898, + 56902, 56914, 23120, 148, 56920, 56925, 56929, 56936, 56942, 56950, + 56957, 6740, 56964, 56973, 3625, 56981, 13399, 56985, 2681, 419, 56990, + 57003, 57008, 1815, 602, 57012, 3631, 57020, 57026, 917, 57036, 57045, + 57050, 11847, 57054, 37617, 57057, 3580, 19507, 57065, 57072, 19549, + 57076, 57083, 57089, 57094, 11861, 57099, 57111, 57117, 57125, 2693, + 1735, 57133, 57135, 57140, 57145, 57150, 57156, 57161, 57166, 57171, + 57176, 57181, 57186, 57192, 57197, 57202, 57207, 57212, 57217, 57222, + 57227, 57232, 57238, 57243, 57248, 57253, 57259, 57264, 57270, 57275, + 57280, 57285, 57290, 57295, 57300, 57305, 57311, 57316, 57322, 57327, + 57332, 57337, 57342, 57347, 57352, 57357, 57362, 57367, 57372, 57376, + 57380, 57385, 57389, 57394, 57399, 57405, 57410, 57414, 57418, 57421, + 57423, 57427, 57430, 57435, 57439, 57443, 57447, 57451, 57460, 26652, + 57463, 26657, 26662, 57470, 57479, 26668, 57484, 26673, 57493, 57498, + 9018, 57502, 57507, 57512, 57516, 57520, 57524, 57528, 57531, 57535, + 6170, 57541, 57546, 57550, 3467, 57553, 57555, 57559, 57562, 57567, + 57571, 57577, 57590, 57596, 57601, 57605, 57613, 57620, 57628, 57637, + 57645, 26678, 57652, 57662, 57671, 57684, 57689, 57694, 57700, 57707, + 57718, 57730, 57737, 57746, 57755, 57764, 57771, 57777, 57784, 57792, + 57799, 57807, 57816, 57824, 57831, 57839, 57848, 57856, 57865, 57875, + 57884, 57892, 57899, 57907, 57916, 57924, 57933, 57943, 57952, 57960, + 57969, 57979, 57988, 57998, 58009, 58019, 58028, 58036, 58043, 58051, + 58060, 58068, 58077, 58087, 58096, 58104, 58113, 58123, 58132, 58142, + 58153, 58163, 58172, 58180, 58189, 58199, 58208, 58218, 58229, 58239, + 58248, 58258, 58269, 58279, 58290, 58302, 58313, 58323, 58332, 58340, + 58347, 58355, 58364, 58372, 58381, 58391, 58400, 58408, 58417, 58427, + 58436, 58446, 58457, 58467, 58476, 58484, 58493, 58503, 58512, 58522, + 58533, 58543, 58552, 58562, 58573, 58583, 58594, 58606, 58617, 58627, + 58636, 58644, 58653, 58663, 58672, 58682, 58693, 58703, 58712, 58722, + 58733, 58743, 58754, 58766, 58777, 58787, 58796, 58806, 58817, 58827, + 58838, 58850, 58861, 58871, 58882, 58894, 58905, 58917, 58930, 58942, + 58953, 58963, 58972, 58980, 58987, 58995, 59004, 59012, 59021, 59031, + 59040, 59048, 59057, 59067, 59076, 59086, 59097, 59107, 59116, 59124, + 59133, 59143, 59152, 59162, 59173, 59183, 59192, 59202, 59213, 59223, + 59234, 59246, 59257, 59267, 59276, 59284, 59293, 59303, 59312, 59322, + 59333, 59343, 59352, 59362, 59373, 59383, 59394, 59406, 59417, 59427, + 59436, 59446, 59457, 59467, 59478, 59490, 59501, 59511, 59522, 59534, + 59545, 59557, 59570, 59582, 59593, 59603, 59612, 59620, 59629, 59639, + 59648, 59658, 59669, 59679, 59688, 59698, 59709, 59719, 59730, 59742, + 59753, 59763, 59772, 59782, 59793, 59803, 59814, 59826, 59837, 59847, + 59858, 59870, 59881, 59893, 59906, 59918, 59929, 59939, 59948, 59958, + 59969, 59979, 59990, 60002, 60013, 60023, 60034, 60046, 60057, 60069, + 60082, 60094, 60105, 60115, 60126, 60138, 60149, 60161, 60174, 60186, + 60197, 60209, 60222, 60234, 60247, 60261, 60274, 60286, 60297, 60307, + 60316, 60324, 60331, 60336, 6029, 60343, 26688, 60348, 60353, 26693, + 60359, 17319, 31449, 60364, 60370, 60376, 60383, 60390, 60395, 60399, + 60403, 60412, 60418, 60430, 60441, 60445, 2936, 6004, 60450, 60453, + 60455, 60459, 60463, 60467, 34097, 60472, 60476, 60479, 60484, 60488, + 60495, 60501, 60505, 60509, 26703, 60512, 60519, 60528, 60536, 60547, + 60555, 60563, 60570, 60577, 60583, 60594, 26708, 60599, 60610, 60622, + 60633, 60641, 2484, 60646, 60659, 60663, 60671, 60676, 60684, 13908, + 60695, 60701, 60708, 60716, 60722, 26713, 60727, 7592, 50467, 60734, + 60737, 60745, 60758, 60771, 60784, 60797, 60804, 60815, 60824, 34102, + 34107, 60829, 60833, 60841, 60848, 60857, 60865, 60871, 60880, 60888, + 60896, 60900, 60909, 60918, 60928, 60941, 60954, 60964, 26718, 60970, + 60977, 60983, 26724, 60988, 60991, 60995, 61003, 61012, 33840, 61020, + 61028, 61035, 61043, 61053, 61062, 61071, 61080, 61088, 61099, 61109, + 7184, 17802, 61118, 61123, 61128, 61132, 61136, 61141, 61147, 61152, + 61157, 61163, 61168, 61173, 17767, 61178, 61185, 61193, 61201, 61206, + 61213, 61220, 61224, 61228, 61236, 61244, 26733, 61250, 61256, 61268, + 61274, 61279, 61290, 61300, 61310, 61322, 61328, 61338, 26738, 61347, + 61356, 61362, 61374, 61385, 61392, 61397, 61401, 61409, 61415, 61420, + 61425, 61432, 61444, 61454, 61463, 61470, 27937, 19731, 61476, 61481, + 61485, 61489, 61494, 61500, 61511, 61524, 61529, 26743, 61534, 61546, + 61555, 61568, 61575, 61584, 61592, 61597, 61603, 1484, 61608, 61613, + 61618, 61623, 61629, 61634, 61639, 61645, 61651, 61656, 61660, 61665, + 61670, 61675, 50973, 61680, 61685, 61690, 61695, 61701, 61707, 61712, + 61716, 61721, 61726, 61731, 61736, 61741, 61745, 61751, 61756, 61765, + 61770, 61775, 61780, 61785, 61789, 61796, 61802, 13605, 13612, 37872, + 61807, 61757, 61809, 26752, 61812, 61821, 61827, 4263, 26757, 61831, + 61837, 61843, 61848, 61852, 61859, 61864, 61874, 61883, 61887, 61893, + 61899, 61905, 61909, 61917, 61924, 61932, 61940, 26762, 61947, 61950, + 61957, 61962, 61966, 61972, 61977, 61981, 61990, 61998, 62004, 62009, + 27544, 62016, 62023, 62029, 62034, 62040, 62047, 62053, 26475, 22688, + 62059, 62064, 62070, 62082, 61790, 61797, 62092, 62097, 62104, 62111, + 62117, 62128, 62133, 6965, 62141, 62144, 62150, 62154, 62158, 62161, + 62167, 26571, 4283, 836, 10621, 62174, 62180, 62186, 62192, 62198, 62204, + 62210, 62216, 62222, 62227, 62232, 62237, 62242, 62247, 62252, 62257, + 62262, 62267, 62272, 62277, 62282, 62287, 62293, 62298, 62303, 62309, + 62314, 62319, 62325, 62331, 62337, 62343, 62349, 62355, 62361, 62367, + 62373, 62378, 62383, 62389, 62394, 62399, 62405, 62410, 62415, 62420, + 62425, 62430, 62435, 62440, 62445, 62450, 62455, 62460, 62465, 62471, + 62476, 62481, 62486, 62492, 62497, 62502, 62507, 62512, 62518, 62523, + 62528, 62533, 62538, 62543, 62548, 62553, 62558, 62563, 62568, 62573, + 62578, 62583, 62588, 62593, 62598, 62603, 62608, 62613, 62619, 62624, + 62629, 62634, 62639, 62644, 62649, 62654, 1846, 138, 62659, 62663, 62667, + 62672, 62680, 62684, 62691, 62699, 62703, 62716, 62720, 62723, 62728, + 62732, 62737, 62741, 62749, 62753, 17327, 62758, 62762, 62766, 62769, + 62777, 62782, 62789, 62795, 62801, 62806, 62814, 56276, 62821, 62826, + 62831, 62835, 62839, 62842, 62847, 62852, 62856, 62859, 62865, 62869, + 62879, 62888, 62891, 62904, 62912, 62920, 62930, 62943, 62950, 62961, + 62967, 62972, 62977, 62983, 62992, 61536, 63000, 63006, 63014, 63018, + 63022, 63028, 63036, 63048, 63060, 63067, 63071, 63082, 63090, 63097, + 63109, 63117, 63125, 63132, 63138, 63148, 63157, 63162, 63172, 63176, + 63180, 63190, 63197, 63209, 63221, 63230, 60649, 63237, 63248, 63262, + 63270, 63280, 63287, 63295, 63304, 63312, 63322, 63331, 63342, 63354, + 63363, 63373, 63380, 63389, 63404, 63413, 63426, 63441, 63445, 63457, + 63468, 63479, 63490, 63500, 63511, 63519, 63525, 63535, 63541, 63546, + 63552, 63558, 63563, 63570, 7469, 13928, 63576, 63581, 63588, 63594, + 63599, 63603, 63606, 63609, 63611, 63618, 63629, 63634, 63638, 63644, + 63649, 63657, 56720, 56730, 63663, 63673, 63680, 63686, 63691, 63700, + 63707, 63715, 63724, 63730, 63736, 63743, 63750, 63755, 63759, 63764, + 63769, 63774, 63778, 62711, 63787, 63791, 63802, 63812, 13937, 63823, + 63831, 13949, 63838, 22598, 63842, 63846, 63851, 63868, 63880, 8169, + 63892, 63897, 63902, 63907, 63911, 63914, 63919, 63924, 63930, 63935, + 4075, 17378, 63940, 63945, 63951, 63958, 63963, 63968, 63974, 63980, + 63986, 63991, 63997, 64001, 64015, 64023, 64031, 64037, 64042, 64049, + 64054, 64059, 64067, 64072, 64078, 64083, 64088, 64092, 64095, 64113, + 64132, 64145, 64159, 64175, 64182, 64189, 64195, 64202, 64207, 64213, + 64219, 64224, 64229, 64245, 8182, 64259, 64266, 64270, 64273, 64278, + 64283, 64290, 64295, 64300, 64305, 64309, 64317, 9090, 64326, 64331, + 64337, 9101, 64342, 64345, 64350, 64360, 64369, 64374, 64382, 64389, + 64400, 64410, 64415, 64420, 64427, 64433, 64438, 64445, 64454, 64462, + 64468, 64475, 64481, 64485, 13451, 2910, 64490, 64494, 64500, 64506, + 64513, 64517, 64538, 64560, 64576, 64593, 64612, 64621, 64631, 64638, + 64645, 22517, 64651, 64655, 64663, 64669, 64677, 64681, 64689, 64696, + 64700, 64706, 64712, 64717, 3375, 34302, 64723, 64727, 64731, 64735, + 64740, 64745, 64750, 64756, 64761, 64767, 64772, 64777, 64781, 64786, + 34317, 64790, 64795, 64803, 64807, 64812, 64819, 64828, 64834, 64841, + 64845, 64852, 64861, 64866, 64874, 64883, 64889, 64894, 64899, 64905, + 64911, 64916, 64920, 64924, 64927, 64935, 64945, 64950, 32057, 64958, + 64970, 64974, 64986, 64997, 65004, 65010, 65017, 65029, 65036, 65042, + 17439, 65046, 65052, 65058, 65063, 65068, 5084, 65073, 65079, 65087, + 65096, 65100, 65106, 64782, 24971, 65111, 65113, 65118, 65123, 65128, + 65133, 65138, 65143, 65148, 65153, 65158, 65163, 65168, 65173, 65178, + 65183, 65189, 65194, 65199, 65204, 65209, 65214, 65219, 65224, 65229, + 65235, 65241, 65247, 65252, 65257, 65269, 65274, 1852, 67, 65279, 65284, + 26772, 26777, 26782, 26788, 26793, 65288, 26798, 65310, 65312, 65316, + 65320, 65325, 65329, 26802, 65333, 26807, 65341, 65344, 26812, 18179, + 65353, 65357, 1415, 65362, 26823, 65365, 65370, 21354, 21364, 65375, + 65379, 65384, 65390, 65395, 65404, 65409, 65416, 65422, 65427, 65432, + 65437, 65445, 26828, 1110, 65452, 65458, 65463, 65468, 65473, 65479, + 65484, 65491, 65497, 65502, 65510, 65516, 13959, 65523, 29296, 65536, + 65541, 65547, 65560, 65564, 65573, 65580, 65586, 65594, 65603, 65610, + 65616, 26832, 65619, 65626, 65632, 65636, 65639, 65647, 65661, 65668, + 26837, 65674, 26842, 65681, 28422, 65691, 65696, 65700, 17717, 65705, + 65710, 26847, 54013, 65714, 65719, 65725, 65731, 65738, 65744, 65749, + 65754, 65763, 65775, 65790, 27067, 65796, 13117, 26851, 65800, 65807, + 26856, 65813, 65822, 65829, 65838, 65844, 65849, 65855, 26861, 65860, + 65869, 65878, 65885, 65891, 65897, 65905, 65909, 26866, 65912, 26872, + 26878, 65917, 65925, 65935, 26883, 65939, 65941, 65945, 65950, 65954, + 65958, 65964, 65969, 65973, 65978, 2915, 65982, 65989, 65993, 66002, + 66010, 66017, 66022, 66027, 66031, 66035, 66038, 66044, 66052, 66058, + 66062, 66067, 66074, 66080, 28799, 66085, 66088, 66093, 66097, 66102, + 66107, 66111, 66119, 21373, 21382, 66125, 66131, 66137, 66142, 66146, + 66149, 66159, 66164, 66170, 66176, 66184, 66189, 28438, 66193, 66201, + 66207, 66212, 66217, 50653, 28444, 66223, 66228, 66232, 66237, 66242, + 66247, 66251, 66256, 66261, 66267, 66272, 66277, 66283, 66289, 66294, + 66298, 66303, 66308, 66313, 66317, 66322, 66327, 66332, 66338, 66344, + 66350, 66355, 66359, 66364, 66369, 66373, 66378, 66383, 66388, 66392, + 26887, 66400, 66404, 66412, 18521, 66423, 66429, 66436, 66441, 66450, + 66455, 66459, 66464, 66472, 66480, 66487, 56422, 66493, 66501, 66508, + 66519, 66525, 26897, 66528, 66535, 32183, 66539, 66544, 66549, 6877, + 66553, 66561, 66568, 66575, 66581, 66445, 66595, 66601, 66605, 66608, + 66616, 66623, 66628, 66641, 66648, 66653, 66658, 66661, 66668, 66672, + 66682, 66692, 66701, 66712, 66717, 66721, 28813, 17641, 32629, 66729, + 66734, 66739, 66744, 66749, 66754, 66759, 66763, 66768, 66773, 66778, + 66783, 66788, 66793, 66797, 66802, 66807, 66811, 66815, 66819, 66823, + 66828, 66833, 66837, 66842, 66846, 66850, 66855, 66860, 66865, 66870, + 66874, 66879, 66884, 66888, 66893, 66898, 66903, 66908, 66913, 66918, + 66923, 66928, 66933, 66938, 66943, 66948, 66953, 66958, 66963, 66968, + 66973, 66978, 66983, 66988, 66992, 66997, 67002, 67007, 67012, 67017, + 67022, 67027, 67032, 67037, 67042, 67047, 67051, 67056, 67060, 67065, + 67070, 67075, 67080, 67085, 67090, 67095, 67100, 67105, 67109, 67113, + 67118, 67123, 67127, 67132, 67137, 67141, 67146, 67151, 67156, 67161, + 67165, 67170, 67175, 67179, 67184, 67188, 67192, 67196, 67200, 67205, + 67209, 67213, 67217, 67221, 67225, 67229, 67233, 67237, 67241, 67246, + 67251, 67256, 67261, 67266, 67271, 67276, 67281, 67286, 67291, 67295, + 67299, 67303, 67307, 67311, 67315, 67320, 67324, 67329, 67333, 67338, + 67343, 67347, 67351, 67356, 67360, 67364, 67368, 67372, 67376, 67380, + 67384, 67388, 67392, 67396, 67400, 67404, 67408, 67412, 67417, 67422, + 67426, 67430, 67434, 67438, 67442, 67446, 67451, 67455, 67459, 67463, + 67467, 67471, 67475, 67480, 67484, 67489, 67493, 67497, 67501, 67505, + 67509, 67513, 67517, 67521, 67525, 67529, 67533, 67538, 67542, 67546, + 67550, 67554, 67558, 67562, 67566, 67570, 67574, 67578, 67582, 67587, + 67591, 67595, 67600, 67605, 67609, 67613, 67617, 67621, 67625, 67629, + 67633, 67637, 67642, 67646, 67651, 67655, 67660, 67664, 67669, 67673, + 67679, 67684, 67688, 67693, 67697, 67702, 67706, 67711, 67715, 67720, + 1503, 67724, 1741, 1746, 67728, 67732, 2711, 67736, 1384, 67741, 1350, + 67745, 67749, 67756, 67763, 67777, 2727, 5159, 67786, 67794, 67801, + 67808, 67821, 67834, 67845, 67850, 67857, 67869, 3703, 9162, 67873, + 67878, 67887, 67897, 67902, 67906, 67911, 67918, 67924, 67936, 1355, + 11688, 67946, 67952, 67966, 67978, 67987, 67996, 68005, 68013, 68024, + 68032, 3742, 68042, 68051, 68057, 68064, 28919, 68069, 2755, 10316, + 68073, 68080, 6828, 68089, 2760, 26495, 68095, 68102, 68108, 68115, + 68121, 68128, 68138, 68147, 68158, 68165, 68171, 68181, 68189, 68195, + 68210, 68216, 68221, 68228, 68231, 68237, 68244, 68250, 68258, 68267, + 68275, 68281, 68290, 33842, 68304, 68309, 11709, 68315, 68328, 68337, + 68345, 68352, 68356, 68360, 68363, 68370, 68377, 68385, 68393, 68402, + 68410, 11645, 68418, 68423, 68427, 68439, 68446, 68455, 793, 68465, 2776, + 68474, 68478, 68484, 68497, 68509, 68519, 68528, 68540, 68548, 68557, + 68568, 68579, 68589, 68599, 68608, 68616, 8811, 68623, 68627, 68632, + 68637, 68643, 1360, 9217, 68650, 68661, 68670, 68678, 68687, 68695, + 68711, 68722, 68738, 68748, 68769, 68782, 68795, 68800, 68806, 22084, + 68812, 68815, 68822, 68832, 6139, 68839, 68844, 68849, 68857, 7517, 7526, + 68865, 68876, 2784, 2789, 68882, 8419, 68888, 68895, 68902, 68915, 2193, + 50, 68920, 68925, 68935, 68941, 68945, 68950, 68954, 2812, 68966, 68974, + 68985, 68996, 69005, 69010, 69016, 69021, 69031, 69041, 69046, 69052, + 69057, 69066, 17674, 69070, 3804, 12, 69075, 69082, 766, 69088, 69093, + 52873, 69098, 69103, 69109, 69117, 69122, 69129, 69135, 30869, 33740, + 69141, 2816, 32, 69151, 69164, 69172, 69177, 69183, 2838, 25639, 69188, + 69196, 69203, 69208, 50895, 53694, 69217, 1686, 1795, 69222, 69227, + 69234, 1799, 237, 69241, 69247, 69252, 69259, 1803, 69264, 69270, 69275, + 69287, 4250, 69297, 1810, 69303, 69308, 69315, 69322, 69337, 69344, + 69352, 69356, 69360, 69372, 69377, 69381, 23272, 3830, 69385, 69396, + 69400, 69404, 69410, 69414, 69423, 69427, 69438, 69442, 2238, 69446, + 69448, 2935, 7189, 69456, 69461, 69465, 69474, 69480, 2905, 13622, 69484, + 69497, 69515, 69520, 69528, 69536, 69546, 69558, 69571, 69578, 69594, + 69601, 69607, 958, 69614, 69621, 69631, 69640, 69652, 34706, 69660, 2919, + 9391, 69663, 69671, 69675, 2923, 69679, 17523, 52946, 3514, 69683, 2929, + 69687, 69697, 69703, 69709, 69715, 69721, 69727, 69733, 69739, 69745, + 69751, 69757, 69763, 69769, 69775, 69781, 69787, 69793, 69799, 69805, + 69811, 69817, 69823, 69829, 69835, 69841, 69847, 69854, 69861, 69867, + 69873, 69879, 69885, 69891, 69897, 1365, 12692, 9411, 69903, 69908, + 69913, 69918, 69923, 69928, 69933, 69938, 69943, 69948, 69953, 69958, + 69963, 69968, 69973, 69978, 69983, 69988, 69993, 69998, 70003, 70008, + 70013, 70018, 70023, 70028, 70034, 70039, 70044, 70050, 70055, 70061, + 70066, 70071, 70077, 70082, 70087, 70092, 70097, 70102, 70107, 70112, + 70117, 69698, 69704, 69710, 69716, 69722, 69728, 69734, 69740, 69746, + 69752, 69758, 69764, 69770, 69776, 69782, 70123, 69788, 69794, 69800, + 70129, 69806, 69812, 69818, 69824, 69830, 69836, 69842, 69862, 70135, + 70141, 69868, 70147, 69874, 69880, 69886, 69892, 69898, 2950, 2955, + 70153, 70158, 70161, 70167, 70173, 70180, 70185, 70190, 2243, }; /* code->name phrasebook */ #define phrasebook_shift 7 -#define phrasebook_short 222 +#define phrasebook_short 216 static unsigned char phrasebook[] = { - 0, 228, 145, 247, 149, 76, 232, 57, 76, 65, 53, 249, 150, 53, 233, 123, - 53, 254, 193, 254, 144, 42, 233, 180, 41, 233, 180, 254, 69, 79, 53, 251, - 54, 244, 94, 246, 218, 228, 38, 228, 161, 21, 223, 89, 21, 118, 21, 113, - 21, 166, 21, 158, 21, 173, 21, 183, 21, 194, 21, 187, 21, 192, 251, 61, - 229, 186, 237, 213, 53, 247, 204, 53, 245, 231, 53, 232, 69, 76, 251, 53, - 254, 62, 7, 6, 1, 57, 7, 6, 1, 254, 27, 7, 6, 1, 252, 44, 7, 6, 1, 222, - 222, 7, 6, 1, 72, 7, 6, 1, 247, 130, 7, 6, 1, 214, 7, 6, 1, 212, 7, 6, 1, - 74, 7, 6, 1, 239, 182, 7, 6, 1, 239, 76, 7, 6, 1, 149, 7, 6, 1, 185, 7, - 6, 1, 199, 7, 6, 1, 73, 7, 6, 1, 233, 244, 7, 6, 1, 232, 139, 7, 6, 1, - 146, 7, 6, 1, 193, 7, 6, 1, 227, 109, 7, 6, 1, 66, 7, 6, 1, 196, 7, 6, 1, - 224, 174, 7, 6, 1, 224, 73, 7, 6, 1, 224, 25, 7, 6, 1, 223, 119, 42, 37, - 104, 231, 193, 228, 161, 41, 37, 104, 251, 102, 255, 41, 184, 237, 170, - 245, 237, 255, 41, 7, 3, 1, 57, 7, 3, 1, 254, 27, 7, 3, 1, 252, 44, 7, 3, - 1, 222, 222, 7, 3, 1, 72, 7, 3, 1, 247, 130, 7, 3, 1, 214, 7, 3, 1, 212, - 7, 3, 1, 74, 7, 3, 1, 239, 182, 7, 3, 1, 239, 76, 7, 3, 1, 149, 7, 3, 1, - 185, 7, 3, 1, 199, 7, 3, 1, 73, 7, 3, 1, 233, 244, 7, 3, 1, 232, 139, 7, - 3, 1, 146, 7, 3, 1, 193, 7, 3, 1, 227, 109, 7, 3, 1, 66, 7, 3, 1, 196, 7, - 3, 1, 224, 174, 7, 3, 1, 224, 73, 7, 3, 1, 224, 25, 7, 3, 1, 223, 119, - 42, 250, 223, 104, 61, 237, 170, 41, 250, 223, 104, 205, 235, 5, 228, - 145, 239, 223, 247, 149, 76, 251, 220, 53, 232, 234, 53, 250, 222, 53, - 223, 222, 53, 252, 99, 125, 230, 206, 53, 219, 251, 13, 53, 247, 81, 234, - 29, 240, 7, 237, 235, 47, 254, 182, 232, 57, 76, 190, 53, 228, 165, 244, - 95, 231, 227, 53, 237, 63, 250, 62, 53, 233, 9, 53, 227, 219, 113, 227, - 219, 166, 255, 33, 255, 41, 236, 156, 53, 233, 38, 53, 236, 154, 249, - 140, 251, 226, 227, 219, 118, 237, 8, 234, 29, 240, 7, 231, 151, 47, 254, - 182, 232, 57, 76, 224, 189, 246, 235, 168, 232, 76, 224, 189, 246, 235, - 168, 245, 151, 224, 189, 246, 235, 152, 232, 74, 239, 223, 232, 69, 76, - 7, 6, 1, 102, 2, 245, 236, 7, 6, 1, 102, 2, 155, 7, 6, 1, 102, 2, 251, - 101, 7, 6, 1, 102, 2, 205, 7, 6, 1, 102, 2, 219, 7, 6, 1, 102, 2, 231, - 140, 46, 7, 6, 1, 255, 19, 7, 6, 1, 252, 45, 2, 251, 226, 7, 6, 1, 161, - 2, 245, 236, 7, 6, 1, 161, 2, 155, 7, 6, 1, 161, 2, 251, 101, 7, 6, 1, - 161, 2, 219, 7, 6, 1, 244, 81, 2, 245, 236, 7, 6, 1, 244, 81, 2, 155, 7, - 6, 1, 244, 81, 2, 251, 101, 7, 6, 1, 244, 81, 2, 219, 7, 6, 1, 247, 168, - 7, 6, 1, 236, 5, 2, 205, 7, 6, 1, 130, 2, 245, 236, 7, 6, 1, 130, 2, 155, - 7, 6, 1, 130, 2, 251, 101, 7, 6, 1, 130, 2, 205, 7, 6, 1, 130, 2, 219, - 236, 52, 53, 7, 6, 1, 130, 2, 82, 7, 6, 1, 97, 2, 245, 236, 7, 6, 1, 97, - 2, 155, 7, 6, 1, 97, 2, 251, 101, 7, 6, 1, 97, 2, 219, 7, 6, 1, 224, 26, - 2, 155, 7, 6, 1, 226, 196, 7, 3, 1, 229, 124, 193, 7, 3, 1, 102, 2, 245, - 236, 7, 3, 1, 102, 2, 155, 7, 3, 1, 102, 2, 251, 101, 7, 3, 1, 102, 2, - 205, 7, 3, 1, 102, 2, 219, 7, 3, 1, 102, 2, 231, 140, 46, 7, 3, 1, 255, - 19, 7, 3, 1, 252, 45, 2, 251, 226, 7, 3, 1, 161, 2, 245, 236, 7, 3, 1, - 161, 2, 155, 7, 3, 1, 161, 2, 251, 101, 7, 3, 1, 161, 2, 219, 7, 3, 1, - 244, 81, 2, 245, 236, 7, 3, 1, 244, 81, 2, 155, 7, 3, 1, 244, 81, 2, 251, - 101, 7, 3, 1, 244, 81, 2, 219, 7, 3, 1, 247, 168, 7, 3, 1, 236, 5, 2, - 205, 7, 3, 1, 130, 2, 245, 236, 7, 3, 1, 130, 2, 155, 7, 3, 1, 130, 2, - 251, 101, 7, 3, 1, 130, 2, 205, 7, 3, 1, 130, 2, 219, 249, 181, 53, 7, 3, - 1, 130, 2, 82, 7, 3, 1, 97, 2, 245, 236, 7, 3, 1, 97, 2, 155, 7, 3, 1, - 97, 2, 251, 101, 7, 3, 1, 97, 2, 219, 7, 3, 1, 224, 26, 2, 155, 7, 3, 1, - 226, 196, 7, 3, 1, 224, 26, 2, 219, 7, 6, 1, 102, 2, 237, 63, 7, 3, 1, - 102, 2, 237, 63, 7, 6, 1, 102, 2, 252, 106, 7, 3, 1, 102, 2, 252, 106, 7, - 6, 1, 102, 2, 234, 84, 7, 3, 1, 102, 2, 234, 84, 7, 6, 1, 252, 45, 2, - 155, 7, 3, 1, 252, 45, 2, 155, 7, 6, 1, 252, 45, 2, 251, 101, 7, 3, 1, - 252, 45, 2, 251, 101, 7, 6, 1, 252, 45, 2, 56, 46, 7, 3, 1, 252, 45, 2, - 56, 46, 7, 6, 1, 252, 45, 2, 252, 5, 7, 3, 1, 252, 45, 2, 252, 5, 7, 6, - 1, 250, 192, 2, 252, 5, 7, 3, 1, 250, 192, 2, 252, 5, 7, 6, 1, 250, 192, - 2, 82, 7, 3, 1, 250, 192, 2, 82, 7, 6, 1, 161, 2, 237, 63, 7, 3, 1, 161, - 2, 237, 63, 7, 6, 1, 161, 2, 252, 106, 7, 3, 1, 161, 2, 252, 106, 7, 6, - 1, 161, 2, 56, 46, 7, 3, 1, 161, 2, 56, 46, 7, 6, 1, 161, 2, 234, 84, 7, - 3, 1, 161, 2, 234, 84, 7, 6, 1, 161, 2, 252, 5, 7, 3, 1, 161, 2, 252, 5, - 7, 6, 1, 246, 196, 2, 251, 101, 7, 3, 1, 246, 196, 2, 251, 101, 7, 6, 1, - 246, 196, 2, 252, 106, 7, 3, 1, 246, 196, 2, 252, 106, 7, 6, 1, 246, 196, - 2, 56, 46, 7, 3, 1, 246, 196, 2, 56, 46, 7, 6, 1, 246, 196, 2, 251, 226, - 7, 3, 1, 246, 196, 2, 251, 226, 7, 6, 1, 245, 172, 2, 251, 101, 7, 3, 1, - 245, 172, 2, 251, 101, 7, 6, 1, 245, 172, 2, 82, 7, 3, 1, 245, 172, 2, - 82, 7, 6, 1, 244, 81, 2, 205, 7, 3, 1, 244, 81, 2, 205, 7, 6, 1, 244, 81, - 2, 237, 63, 7, 3, 1, 244, 81, 2, 237, 63, 7, 6, 1, 244, 81, 2, 252, 106, - 7, 3, 1, 244, 81, 2, 252, 106, 7, 6, 1, 244, 81, 2, 234, 84, 7, 3, 1, - 244, 81, 2, 234, 84, 7, 6, 1, 244, 81, 2, 56, 46, 7, 3, 1, 249, 139, 74, - 7, 6, 20, 240, 45, 7, 3, 20, 240, 45, 7, 6, 1, 239, 183, 2, 251, 101, 7, - 3, 1, 239, 183, 2, 251, 101, 7, 6, 1, 239, 77, 2, 251, 226, 7, 3, 1, 239, - 77, 2, 251, 226, 7, 3, 1, 238, 117, 7, 6, 1, 238, 47, 2, 155, 7, 3, 1, - 238, 47, 2, 155, 7, 6, 1, 238, 47, 2, 251, 226, 7, 3, 1, 238, 47, 2, 251, - 226, 7, 6, 1, 238, 47, 2, 252, 5, 7, 3, 1, 238, 47, 2, 252, 5, 7, 6, 1, - 238, 47, 2, 236, 154, 249, 140, 7, 3, 1, 238, 47, 2, 236, 154, 249, 140, - 7, 6, 1, 238, 47, 2, 82, 7, 3, 1, 238, 47, 2, 82, 7, 6, 1, 236, 5, 2, - 155, 7, 3, 1, 236, 5, 2, 155, 7, 6, 1, 236, 5, 2, 251, 226, 7, 3, 1, 236, - 5, 2, 251, 226, 7, 6, 1, 236, 5, 2, 252, 5, 7, 3, 1, 236, 5, 2, 252, 5, - 7, 3, 1, 236, 5, 232, 215, 252, 55, 254, 144, 7, 6, 1, 247, 228, 7, 3, 1, - 247, 228, 7, 6, 1, 130, 2, 237, 63, 7, 3, 1, 130, 2, 237, 63, 7, 6, 1, - 130, 2, 252, 106, 7, 3, 1, 130, 2, 252, 106, 7, 6, 1, 130, 2, 47, 155, 7, - 3, 1, 130, 2, 47, 155, 7, 6, 20, 234, 88, 7, 3, 20, 234, 88, 7, 6, 1, - 232, 27, 2, 155, 7, 3, 1, 232, 27, 2, 155, 7, 6, 1, 232, 27, 2, 251, 226, - 7, 3, 1, 232, 27, 2, 251, 226, 7, 6, 1, 232, 27, 2, 252, 5, 7, 3, 1, 232, - 27, 2, 252, 5, 7, 6, 1, 231, 35, 2, 155, 7, 3, 1, 231, 35, 2, 155, 7, 6, - 1, 231, 35, 2, 251, 101, 7, 3, 1, 231, 35, 2, 251, 101, 7, 6, 1, 231, 35, - 2, 251, 226, 7, 3, 1, 231, 35, 2, 251, 226, 7, 6, 1, 231, 35, 2, 252, 5, - 7, 3, 1, 231, 35, 2, 252, 5, 7, 6, 1, 227, 110, 2, 251, 226, 7, 3, 1, - 227, 110, 2, 251, 226, 7, 6, 1, 227, 110, 2, 252, 5, 7, 3, 1, 227, 110, - 2, 252, 5, 7, 6, 1, 227, 110, 2, 82, 7, 3, 1, 227, 110, 2, 82, 7, 6, 1, - 97, 2, 205, 7, 3, 1, 97, 2, 205, 7, 6, 1, 97, 2, 237, 63, 7, 3, 1, 97, 2, - 237, 63, 7, 6, 1, 97, 2, 252, 106, 7, 3, 1, 97, 2, 252, 106, 7, 6, 1, 97, - 2, 231, 140, 46, 7, 3, 1, 97, 2, 231, 140, 46, 7, 6, 1, 97, 2, 47, 155, - 7, 3, 1, 97, 2, 47, 155, 7, 6, 1, 97, 2, 234, 84, 7, 3, 1, 97, 2, 234, - 84, 7, 6, 1, 224, 175, 2, 251, 101, 7, 3, 1, 224, 175, 2, 251, 101, 7, 6, - 1, 224, 26, 2, 251, 101, 7, 3, 1, 224, 26, 2, 251, 101, 7, 6, 1, 224, 26, - 2, 219, 7, 6, 1, 223, 120, 2, 155, 7, 3, 1, 223, 120, 2, 155, 7, 6, 1, - 223, 120, 2, 56, 46, 7, 3, 1, 223, 120, 2, 56, 46, 7, 6, 1, 223, 120, 2, - 252, 5, 7, 3, 1, 223, 120, 2, 252, 5, 7, 3, 1, 182, 193, 7, 3, 1, 45, 2, - 82, 7, 6, 1, 45, 2, 88, 7, 6, 1, 45, 2, 226, 103, 7, 3, 1, 45, 2, 226, - 103, 7, 6, 1, 206, 183, 7, 3, 1, 206, 183, 7, 6, 1, 234, 44, 73, 7, 6, 1, - 252, 45, 2, 88, 7, 3, 1, 252, 45, 2, 88, 7, 6, 1, 255, 10, 222, 222, 7, - 6, 1, 250, 192, 2, 88, 7, 6, 1, 250, 192, 2, 226, 103, 7, 3, 1, 250, 192, - 2, 226, 103, 7, 3, 1, 209, 250, 47, 7, 6, 1, 200, 72, 7, 6, 1, 230, 222, - 7, 6, 1, 234, 44, 72, 7, 6, 1, 247, 131, 2, 88, 7, 3, 1, 247, 131, 2, 88, - 7, 6, 1, 246, 196, 2, 88, 7, 6, 1, 246, 169, 7, 3, 1, 244, 128, 7, 6, 1, - 239, 215, 7, 6, 1, 244, 81, 2, 82, 7, 6, 1, 239, 77, 2, 88, 7, 3, 1, 239, - 77, 2, 88, 7, 3, 1, 238, 47, 2, 125, 7, 3, 1, 238, 18, 2, 82, 7, 6, 1, - 209, 185, 7, 6, 1, 236, 5, 2, 42, 88, 7, 3, 1, 236, 5, 2, 182, 41, 237, - 229, 7, 6, 1, 130, 2, 236, 154, 205, 7, 6, 1, 130, 2, 244, 160, 7, 3, 1, - 130, 2, 244, 160, 7, 6, 1, 234, 80, 7, 3, 1, 234, 80, 7, 6, 1, 233, 245, - 2, 88, 7, 3, 1, 233, 245, 2, 88, 7, 1, 223, 160, 7, 6, 1, 206, 113, 7, 3, - 1, 206, 113, 7, 6, 1, 247, 183, 7, 1, 200, 247, 184, 237, 124, 7, 3, 1, - 227, 110, 2, 233, 229, 88, 7, 6, 1, 227, 110, 2, 88, 7, 3, 1, 227, 110, - 2, 88, 7, 6, 1, 227, 110, 2, 231, 196, 88, 7, 6, 1, 97, 2, 244, 160, 7, - 3, 1, 97, 2, 244, 160, 7, 6, 1, 225, 110, 7, 6, 1, 225, 65, 2, 88, 7, 6, - 1, 224, 26, 2, 88, 7, 3, 1, 224, 26, 2, 88, 7, 6, 1, 223, 120, 2, 82, 7, - 3, 1, 223, 120, 2, 82, 7, 6, 1, 247, 132, 7, 6, 1, 247, 133, 231, 192, 7, - 3, 1, 247, 133, 231, 192, 7, 3, 1, 247, 133, 2, 227, 89, 7, 1, 135, 2, - 82, 7, 6, 1, 206, 173, 7, 3, 1, 206, 173, 7, 1, 239, 223, 246, 16, 228, - 39, 2, 82, 7, 1, 224, 75, 7, 1, 250, 41, 251, 89, 7, 1, 238, 2, 251, 89, - 7, 1, 254, 200, 251, 89, 7, 1, 231, 196, 251, 89, 7, 6, 1, 248, 72, 2, - 252, 5, 7, 6, 1, 250, 192, 2, 3, 1, 223, 120, 2, 252, 5, 7, 3, 1, 248, - 72, 2, 252, 5, 7, 6, 1, 237, 152, 7, 6, 1, 238, 47, 2, 3, 1, 239, 182, 7, - 3, 1, 237, 152, 7, 6, 1, 235, 50, 7, 6, 1, 236, 5, 2, 3, 1, 239, 182, 7, - 3, 1, 235, 50, 7, 6, 1, 102, 2, 252, 5, 7, 3, 1, 102, 2, 252, 5, 7, 6, 1, - 244, 81, 2, 252, 5, 7, 3, 1, 244, 81, 2, 252, 5, 7, 6, 1, 130, 2, 252, 5, - 7, 3, 1, 130, 2, 252, 5, 7, 6, 1, 97, 2, 252, 5, 7, 3, 1, 97, 2, 252, 5, - 7, 6, 1, 97, 2, 250, 3, 22, 237, 63, 7, 3, 1, 97, 2, 250, 3, 22, 237, 63, - 7, 6, 1, 97, 2, 250, 3, 22, 155, 7, 3, 1, 97, 2, 250, 3, 22, 155, 7, 6, - 1, 97, 2, 250, 3, 22, 252, 5, 7, 3, 1, 97, 2, 250, 3, 22, 252, 5, 7, 6, - 1, 97, 2, 250, 3, 22, 245, 236, 7, 3, 1, 97, 2, 250, 3, 22, 245, 236, 7, - 3, 1, 209, 72, 7, 6, 1, 102, 2, 250, 3, 22, 237, 63, 7, 3, 1, 102, 2, - 250, 3, 22, 237, 63, 7, 6, 1, 102, 2, 56, 64, 22, 237, 63, 7, 3, 1, 102, - 2, 56, 64, 22, 237, 63, 7, 6, 1, 255, 20, 2, 237, 63, 7, 3, 1, 255, 20, - 2, 237, 63, 7, 6, 1, 246, 196, 2, 82, 7, 3, 1, 246, 196, 2, 82, 7, 6, 1, - 246, 196, 2, 252, 5, 7, 3, 1, 246, 196, 2, 252, 5, 7, 6, 1, 239, 77, 2, - 252, 5, 7, 3, 1, 239, 77, 2, 252, 5, 7, 6, 1, 130, 2, 234, 84, 7, 3, 1, - 130, 2, 234, 84, 7, 6, 1, 130, 2, 234, 85, 22, 237, 63, 7, 3, 1, 130, 2, - 234, 85, 22, 237, 63, 7, 6, 1, 247, 133, 2, 252, 5, 7, 3, 1, 247, 133, 2, - 252, 5, 7, 3, 1, 239, 183, 2, 252, 5, 7, 6, 1, 248, 71, 7, 6, 1, 250, - 192, 2, 3, 1, 223, 119, 7, 3, 1, 248, 71, 7, 6, 1, 246, 196, 2, 155, 7, - 3, 1, 246, 196, 2, 155, 7, 6, 1, 244, 126, 7, 6, 1, 224, 75, 7, 6, 1, - 236, 5, 2, 245, 236, 7, 3, 1, 236, 5, 2, 245, 236, 7, 6, 1, 102, 2, 231, - 140, 64, 22, 155, 7, 3, 1, 102, 2, 231, 140, 64, 22, 155, 7, 6, 1, 255, - 20, 2, 155, 7, 3, 1, 255, 20, 2, 155, 7, 6, 1, 130, 2, 195, 22, 155, 7, - 3, 1, 130, 2, 195, 22, 155, 7, 6, 1, 102, 2, 47, 245, 236, 7, 3, 1, 102, - 2, 47, 245, 236, 7, 6, 1, 102, 2, 239, 223, 252, 106, 7, 3, 1, 102, 2, - 239, 223, 252, 106, 7, 6, 1, 161, 2, 47, 245, 236, 7, 3, 1, 161, 2, 47, - 245, 236, 7, 6, 1, 161, 2, 239, 223, 252, 106, 7, 3, 1, 161, 2, 239, 223, - 252, 106, 7, 6, 1, 244, 81, 2, 47, 245, 236, 7, 3, 1, 244, 81, 2, 47, - 245, 236, 7, 6, 1, 244, 81, 2, 239, 223, 252, 106, 7, 3, 1, 244, 81, 2, - 239, 223, 252, 106, 7, 6, 1, 130, 2, 47, 245, 236, 7, 3, 1, 130, 2, 47, - 245, 236, 7, 6, 1, 130, 2, 239, 223, 252, 106, 7, 3, 1, 130, 2, 239, 223, - 252, 106, 7, 6, 1, 232, 27, 2, 47, 245, 236, 7, 3, 1, 232, 27, 2, 47, - 245, 236, 7, 6, 1, 232, 27, 2, 239, 223, 252, 106, 7, 3, 1, 232, 27, 2, - 239, 223, 252, 106, 7, 6, 1, 97, 2, 47, 245, 236, 7, 3, 1, 97, 2, 47, - 245, 236, 7, 6, 1, 97, 2, 239, 223, 252, 106, 7, 3, 1, 97, 2, 239, 223, - 252, 106, 7, 6, 1, 231, 35, 2, 251, 55, 51, 7, 3, 1, 231, 35, 2, 251, 55, - 51, 7, 6, 1, 227, 110, 2, 251, 55, 51, 7, 3, 1, 227, 110, 2, 251, 55, 51, - 7, 6, 1, 223, 174, 7, 3, 1, 223, 174, 7, 6, 1, 245, 172, 2, 252, 5, 7, 3, - 1, 245, 172, 2, 252, 5, 7, 6, 1, 236, 5, 2, 182, 41, 237, 229, 7, 3, 1, - 250, 192, 2, 250, 224, 7, 6, 1, 234, 13, 7, 3, 1, 234, 13, 7, 6, 1, 223, - 120, 2, 88, 7, 3, 1, 223, 120, 2, 88, 7, 6, 1, 102, 2, 56, 46, 7, 3, 1, - 102, 2, 56, 46, 7, 6, 1, 161, 2, 251, 226, 7, 3, 1, 161, 2, 251, 226, 7, - 6, 1, 130, 2, 250, 3, 22, 237, 63, 7, 3, 1, 130, 2, 250, 3, 22, 237, 63, - 7, 6, 1, 130, 2, 226, 159, 22, 237, 63, 7, 3, 1, 130, 2, 226, 159, 22, - 237, 63, 7, 6, 1, 130, 2, 56, 46, 7, 3, 1, 130, 2, 56, 46, 7, 6, 1, 130, - 2, 56, 64, 22, 237, 63, 7, 3, 1, 130, 2, 56, 64, 22, 237, 63, 7, 6, 1, - 224, 26, 2, 237, 63, 7, 3, 1, 224, 26, 2, 237, 63, 7, 3, 1, 238, 47, 2, - 250, 224, 7, 3, 1, 236, 5, 2, 250, 224, 7, 3, 1, 227, 110, 2, 250, 224, - 7, 3, 1, 249, 139, 239, 182, 7, 3, 1, 250, 119, 249, 223, 7, 3, 1, 232, - 85, 249, 223, 7, 6, 1, 102, 2, 82, 7, 6, 1, 252, 45, 2, 82, 7, 3, 1, 252, - 45, 2, 82, 7, 6, 1, 238, 47, 2, 125, 7, 6, 1, 227, 110, 2, 250, 1, 82, 7, - 3, 1, 231, 35, 2, 227, 197, 227, 89, 7, 3, 1, 223, 120, 2, 227, 197, 227, - 89, 7, 6, 1, 246, 16, 228, 38, 7, 3, 1, 246, 16, 228, 38, 7, 6, 1, 45, 2, - 82, 7, 6, 1, 97, 125, 7, 6, 1, 209, 196, 7, 6, 1, 161, 2, 82, 7, 3, 1, - 161, 2, 82, 7, 6, 1, 239, 183, 2, 82, 7, 3, 1, 239, 183, 2, 82, 7, 6, 1, - 3, 232, 140, 2, 244, 217, 227, 89, 7, 3, 1, 232, 140, 2, 244, 217, 227, - 89, 7, 6, 1, 232, 27, 2, 82, 7, 3, 1, 232, 27, 2, 82, 7, 6, 1, 224, 26, - 2, 82, 7, 3, 1, 224, 26, 2, 82, 7, 3, 1, 209, 57, 7, 3, 1, 254, 205, 7, - 3, 1, 209, 254, 205, 7, 3, 1, 45, 2, 88, 7, 3, 1, 234, 44, 73, 7, 3, 1, - 252, 45, 2, 250, 224, 7, 3, 1, 250, 192, 2, 227, 89, 7, 3, 1, 250, 192, - 2, 88, 7, 3, 1, 200, 72, 7, 3, 1, 230, 222, 7, 3, 1, 230, 223, 2, 88, 7, - 3, 1, 234, 44, 72, 7, 3, 1, 200, 234, 44, 72, 7, 3, 1, 200, 234, 44, 161, - 2, 88, 7, 3, 1, 251, 82, 200, 234, 44, 72, 7, 3, 1, 249, 139, 239, 183, - 2, 82, 7, 3, 1, 246, 196, 2, 88, 7, 3, 1, 95, 214, 7, 1, 3, 6, 214, 7, 3, - 1, 246, 169, 7, 3, 1, 232, 4, 244, 160, 7, 3, 1, 209, 212, 7, 3, 1, 245, - 172, 2, 88, 7, 3, 1, 245, 99, 2, 88, 7, 3, 1, 244, 81, 2, 82, 7, 3, 1, - 239, 215, 7, 1, 3, 6, 74, 7, 3, 1, 238, 47, 2, 236, 154, 205, 7, 3, 1, - 238, 47, 2, 252, 212, 7, 3, 1, 238, 47, 2, 231, 196, 88, 7, 3, 1, 237, - 207, 7, 3, 1, 209, 185, 7, 3, 1, 209, 237, 69, 2, 182, 237, 229, 7, 3, 1, - 237, 69, 2, 88, 7, 3, 1, 236, 5, 2, 42, 88, 7, 3, 1, 236, 5, 2, 231, 196, - 88, 7, 1, 3, 6, 199, 7, 3, 1, 253, 31, 73, 7, 1, 3, 6, 234, 88, 7, 3, 1, - 251, 82, 234, 66, 7, 3, 1, 233, 87, 7, 3, 1, 209, 146, 7, 3, 1, 209, 232, - 27, 2, 182, 237, 229, 7, 3, 1, 209, 232, 27, 2, 88, 7, 3, 1, 232, 27, 2, - 182, 237, 229, 7, 3, 1, 232, 27, 2, 227, 89, 7, 3, 1, 232, 27, 2, 247, - 40, 7, 3, 1, 200, 232, 27, 2, 247, 40, 7, 1, 3, 6, 146, 7, 1, 3, 6, 239, - 223, 146, 7, 3, 1, 231, 35, 2, 88, 7, 3, 1, 247, 183, 7, 3, 1, 249, 139, - 239, 183, 2, 195, 22, 88, 7, 3, 1, 228, 116, 200, 247, 183, 7, 3, 1, 247, - 184, 2, 250, 224, 7, 3, 1, 209, 227, 109, 7, 3, 1, 227, 110, 2, 231, 196, - 88, 7, 3, 1, 97, 125, 7, 3, 1, 225, 110, 7, 3, 1, 225, 65, 2, 88, 7, 3, - 1, 209, 196, 7, 3, 1, 209, 224, 174, 7, 3, 1, 209, 224, 25, 7, 1, 3, 6, - 224, 25, 7, 3, 1, 223, 120, 2, 231, 196, 88, 7, 3, 1, 223, 120, 2, 250, - 224, 7, 3, 1, 247, 132, 7, 3, 1, 247, 133, 2, 250, 224, 7, 1, 246, 16, - 228, 38, 7, 1, 233, 91, 224, 204, 246, 227, 7, 1, 239, 223, 246, 16, 228, - 38, 7, 1, 228, 26, 252, 44, 7, 1, 252, 171, 251, 89, 7, 1, 3, 6, 254, 27, - 7, 3, 1, 251, 82, 234, 44, 72, 7, 1, 3, 6, 246, 196, 2, 88, 7, 1, 3, 6, - 212, 7, 3, 1, 239, 183, 2, 250, 240, 7, 3, 1, 209, 239, 76, 7, 1, 3, 6, - 149, 7, 3, 1, 232, 140, 2, 88, 7, 1, 246, 16, 228, 39, 2, 82, 7, 1, 200, - 246, 16, 228, 39, 2, 82, 7, 3, 1, 248, 72, 249, 223, 7, 3, 1, 250, 23, - 249, 223, 7, 3, 1, 248, 72, 249, 224, 2, 250, 224, 7, 3, 1, 226, 46, 249, - 223, 7, 3, 1, 227, 15, 249, 223, 7, 3, 1, 227, 51, 249, 224, 2, 250, 224, - 7, 3, 1, 247, 79, 249, 223, 7, 3, 1, 237, 112, 249, 223, 7, 3, 1, 237, - 70, 249, 223, 7, 1, 252, 171, 233, 122, 7, 1, 252, 178, 233, 122, 7, 3, - 1, 209, 245, 172, 2, 247, 40, 7, 3, 1, 209, 245, 172, 2, 247, 41, 22, - 227, 89, 52, 1, 3, 212, 52, 1, 3, 245, 172, 2, 88, 52, 1, 3, 239, 182, - 52, 1, 3, 146, 52, 1, 3, 209, 146, 52, 1, 3, 209, 232, 27, 2, 88, 52, 1, - 3, 6, 239, 223, 146, 52, 1, 3, 224, 174, 52, 1, 3, 224, 25, 52, 1, 232, - 205, 52, 1, 47, 232, 205, 52, 1, 209, 251, 54, 52, 1, 254, 144, 52, 1, - 200, 251, 54, 52, 1, 41, 132, 231, 139, 52, 1, 42, 132, 231, 139, 52, 1, - 246, 16, 228, 38, 52, 1, 200, 246, 16, 228, 38, 52, 1, 42, 254, 93, 52, - 1, 41, 254, 93, 52, 1, 99, 254, 93, 52, 1, 103, 254, 93, 52, 1, 251, 102, - 255, 41, 252, 5, 52, 1, 61, 237, 170, 52, 1, 237, 63, 52, 1, 255, 33, - 255, 41, 52, 1, 245, 237, 255, 41, 52, 1, 184, 61, 237, 170, 52, 1, 184, - 237, 63, 52, 1, 184, 245, 237, 255, 41, 52, 1, 184, 255, 33, 255, 41, 52, - 1, 226, 75, 251, 61, 52, 1, 132, 226, 75, 251, 61, 52, 1, 251, 217, 41, - 132, 231, 139, 52, 1, 251, 217, 42, 132, 231, 139, 52, 1, 99, 227, 96, - 52, 1, 103, 227, 96, 52, 1, 79, 53, 52, 1, 236, 121, 53, 252, 106, 56, - 46, 231, 140, 46, 234, 84, 3, 205, 47, 255, 33, 255, 41, 52, 1, 231, 181, - 88, 52, 1, 250, 244, 255, 41, 52, 1, 3, 246, 169, 52, 1, 3, 149, 52, 1, - 3, 193, 52, 1, 3, 224, 73, 52, 1, 3, 200, 246, 16, 228, 38, 52, 1, 247, - 140, 206, 125, 52, 1, 201, 206, 125, 52, 1, 236, 155, 206, 125, 52, 1, - 184, 206, 125, 52, 1, 247, 139, 206, 125, 52, 1, 223, 193, 250, 38, 206, - 76, 52, 1, 223, 249, 250, 38, 206, 76, 52, 1, 224, 202, 52, 1, 225, 136, - 52, 1, 47, 254, 144, 52, 1, 184, 103, 254, 93, 52, 1, 184, 99, 254, 93, - 52, 1, 184, 42, 254, 93, 52, 1, 184, 41, 254, 93, 52, 1, 184, 231, 139, - 52, 1, 236, 154, 245, 237, 255, 41, 52, 1, 236, 154, 47, 245, 237, 255, - 41, 52, 1, 236, 154, 47, 255, 33, 255, 41, 52, 1, 184, 205, 52, 1, 232, - 8, 251, 61, 52, 1, 252, 226, 201, 226, 118, 52, 1, 247, 233, 201, 226, - 118, 52, 1, 252, 226, 184, 226, 118, 52, 1, 247, 233, 184, 226, 118, 52, - 1, 229, 105, 52, 1, 234, 44, 229, 105, 52, 1, 184, 42, 58, 36, 245, 237, - 255, 41, 36, 255, 33, 255, 41, 36, 251, 102, 255, 41, 36, 205, 36, 237, - 63, 36, 234, 1, 36, 252, 106, 36, 56, 46, 36, 219, 36, 244, 217, 46, 36, - 231, 140, 46, 36, 47, 255, 33, 255, 41, 36, 252, 5, 36, 61, 237, 171, 46, - 36, 47, 61, 237, 171, 46, 36, 47, 245, 237, 255, 41, 36, 252, 19, 36, - 239, 223, 252, 106, 36, 209, 251, 55, 46, 36, 251, 55, 46, 36, 200, 251, - 55, 46, 36, 251, 55, 64, 231, 153, 36, 245, 237, 255, 42, 51, 36, 255, - 33, 255, 42, 51, 36, 42, 227, 97, 51, 36, 41, 227, 97, 51, 36, 42, 254, - 182, 46, 36, 244, 160, 36, 42, 132, 231, 140, 51, 36, 99, 227, 97, 51, - 36, 103, 227, 97, 51, 36, 79, 5, 51, 36, 236, 121, 5, 51, 36, 233, 227, - 244, 217, 51, 36, 231, 196, 244, 217, 51, 36, 56, 51, 36, 250, 3, 51, 36, - 231, 140, 51, 36, 251, 55, 51, 36, 251, 226, 36, 234, 84, 36, 61, 237, - 171, 51, 36, 252, 102, 51, 36, 239, 223, 47, 254, 121, 51, 36, 252, 6, - 51, 36, 251, 102, 255, 42, 51, 36, 252, 107, 51, 36, 239, 223, 252, 107, - 51, 36, 226, 159, 51, 36, 237, 64, 51, 36, 184, 237, 170, 36, 47, 184, - 237, 170, 36, 226, 159, 234, 2, 36, 229, 63, 195, 234, 2, 36, 182, 195, - 234, 2, 36, 229, 63, 228, 162, 234, 2, 36, 182, 228, 162, 234, 2, 36, 41, - 132, 231, 140, 51, 36, 239, 223, 252, 102, 51, 36, 37, 51, 36, 230, 212, - 51, 36, 224, 74, 46, 36, 61, 205, 36, 47, 234, 1, 36, 245, 237, 206, 76, - 36, 255, 33, 206, 76, 36, 19, 233, 117, 36, 19, 238, 132, 36, 19, 249, - 254, 226, 109, 36, 19, 223, 165, 36, 252, 102, 46, 36, 247, 204, 5, 51, - 36, 47, 61, 237, 171, 51, 36, 42, 254, 182, 51, 36, 190, 226, 159, 46, - 36, 244, 221, 46, 36, 254, 210, 105, 180, 46, 36, 42, 41, 67, 51, 36, - 225, 106, 67, 51, 36, 245, 241, 239, 112, 36, 41, 254, 94, 46, 36, 42, - 132, 231, 140, 46, 36, 247, 76, 36, 224, 74, 51, 36, 42, 254, 94, 51, 36, - 41, 254, 94, 51, 36, 41, 254, 94, 22, 99, 254, 94, 51, 36, 41, 132, 231, - 140, 46, 36, 56, 64, 231, 153, 36, 254, 70, 51, 36, 47, 231, 140, 51, 36, - 223, 38, 46, 36, 47, 252, 107, 51, 36, 47, 252, 106, 36, 47, 237, 63, 36, - 47, 237, 64, 51, 36, 47, 205, 36, 47, 239, 223, 252, 106, 36, 47, 81, 67, - 51, 36, 7, 3, 1, 57, 36, 7, 3, 1, 72, 36, 7, 3, 1, 74, 36, 7, 3, 1, 73, - 36, 7, 3, 1, 66, 36, 7, 3, 1, 252, 44, 36, 7, 3, 1, 222, 222, 36, 7, 3, - 1, 212, 36, 7, 3, 1, 185, 36, 7, 3, 1, 146, 36, 7, 3, 1, 227, 109, 36, 7, - 3, 1, 196, 36, 7, 3, 1, 224, 73, 19, 6, 1, 245, 89, 19, 3, 1, 245, 89, - 19, 6, 1, 254, 120, 230, 255, 19, 3, 1, 254, 120, 230, 255, 19, 207, 53, - 19, 203, 207, 53, 19, 6, 1, 233, 215, 249, 230, 19, 3, 1, 233, 215, 249, - 230, 19, 223, 165, 19, 3, 200, 237, 99, 229, 3, 98, 19, 3, 248, 138, 237, - 99, 229, 3, 98, 19, 3, 200, 248, 138, 237, 99, 229, 3, 98, 19, 232, 69, - 76, 19, 226, 109, 19, 249, 254, 226, 109, 19, 6, 1, 254, 206, 2, 226, - 109, 19, 254, 173, 227, 30, 19, 6, 1, 247, 207, 2, 226, 109, 19, 6, 1, - 247, 172, 2, 226, 109, 19, 6, 1, 239, 216, 2, 226, 109, 19, 6, 1, 234, - 65, 2, 226, 109, 19, 6, 1, 225, 111, 2, 226, 109, 19, 6, 1, 234, 67, 2, - 226, 109, 19, 3, 1, 239, 216, 2, 249, 254, 22, 226, 109, 19, 6, 1, 254, - 205, 19, 6, 1, 252, 198, 19, 6, 1, 246, 169, 19, 6, 1, 250, 47, 19, 6, 1, - 247, 206, 19, 6, 1, 223, 88, 19, 6, 1, 247, 171, 19, 6, 1, 226, 223, 19, - 6, 1, 239, 215, 19, 6, 1, 239, 35, 19, 6, 1, 238, 16, 19, 6, 1, 236, 66, - 19, 6, 1, 234, 206, 19, 6, 1, 224, 64, 19, 6, 1, 234, 64, 19, 6, 1, 233, - 69, 19, 6, 1, 231, 182, 19, 6, 1, 229, 2, 19, 6, 1, 227, 61, 19, 6, 1, - 225, 110, 19, 6, 1, 233, 87, 19, 6, 1, 251, 169, 19, 6, 1, 232, 183, 19, - 6, 1, 234, 66, 19, 6, 1, 239, 216, 2, 249, 253, 19, 6, 1, 225, 111, 2, - 249, 253, 19, 3, 1, 254, 206, 2, 226, 109, 19, 3, 1, 247, 207, 2, 226, - 109, 19, 3, 1, 247, 172, 2, 226, 109, 19, 3, 1, 239, 216, 2, 226, 109, - 19, 3, 1, 225, 111, 2, 249, 254, 22, 226, 109, 19, 3, 1, 254, 205, 19, 3, - 1, 252, 198, 19, 3, 1, 246, 169, 19, 3, 1, 250, 47, 19, 3, 1, 247, 206, - 19, 3, 1, 223, 88, 19, 3, 1, 247, 171, 19, 3, 1, 226, 223, 19, 3, 1, 239, - 215, 19, 3, 1, 239, 35, 19, 3, 1, 238, 16, 19, 3, 1, 236, 66, 19, 3, 1, - 234, 206, 19, 3, 1, 224, 64, 19, 3, 1, 234, 64, 19, 3, 1, 233, 69, 19, 3, - 1, 231, 182, 19, 3, 1, 35, 229, 2, 19, 3, 1, 229, 2, 19, 3, 1, 227, 61, - 19, 3, 1, 225, 110, 19, 3, 1, 233, 87, 19, 3, 1, 251, 169, 19, 3, 1, 232, - 183, 19, 3, 1, 234, 66, 19, 3, 1, 239, 216, 2, 249, 253, 19, 3, 1, 225, - 111, 2, 249, 253, 19, 3, 1, 234, 65, 2, 226, 109, 19, 3, 1, 225, 111, 2, - 226, 109, 19, 3, 1, 234, 67, 2, 226, 109, 19, 6, 239, 57, 98, 19, 252, - 199, 98, 19, 226, 224, 98, 19, 225, 111, 2, 244, 217, 98, 19, 225, 111, - 2, 255, 33, 22, 244, 217, 98, 19, 225, 111, 2, 250, 3, 22, 244, 217, 98, - 19, 233, 88, 98, 19, 233, 70, 98, 19, 239, 57, 98, 19, 1, 254, 120, 238, - 135, 19, 3, 1, 254, 120, 238, 135, 19, 1, 228, 46, 19, 3, 1, 228, 46, 19, - 1, 249, 230, 19, 3, 1, 249, 230, 19, 1, 238, 135, 19, 3, 1, 238, 135, 19, - 1, 230, 255, 19, 3, 1, 230, 255, 70, 6, 1, 229, 106, 70, 3, 1, 229, 106, - 70, 6, 1, 247, 85, 70, 3, 1, 247, 85, 70, 6, 1, 238, 215, 70, 3, 1, 238, - 215, 70, 6, 1, 244, 213, 70, 3, 1, 244, 213, 70, 6, 1, 246, 165, 70, 3, - 1, 246, 165, 70, 6, 1, 229, 80, 70, 3, 1, 229, 80, 70, 6, 1, 250, 60, 70, - 3, 1, 250, 60, 19, 239, 36, 98, 19, 231, 183, 98, 19, 237, 99, 229, 3, - 98, 19, 1, 223, 169, 19, 6, 226, 224, 98, 19, 237, 99, 247, 207, 98, 19, - 200, 237, 99, 247, 207, 98, 19, 6, 1, 229, 71, 19, 3, 1, 229, 71, 19, 6, - 237, 99, 229, 3, 98, 19, 6, 1, 230, 253, 19, 3, 1, 230, 253, 19, 231, - 183, 2, 195, 98, 19, 6, 200, 237, 99, 229, 3, 98, 19, 6, 248, 138, 237, - 99, 229, 3, 98, 19, 6, 200, 248, 138, 237, 99, 229, 3, 98, 28, 6, 1, 240, - 73, 2, 245, 236, 28, 6, 1, 239, 219, 28, 6, 1, 249, 176, 28, 6, 1, 246, - 21, 28, 6, 1, 225, 150, 240, 72, 28, 6, 1, 248, 69, 28, 6, 1, 252, 53, - 74, 28, 6, 1, 223, 202, 28, 6, 1, 239, 170, 28, 6, 1, 237, 151, 28, 6, 1, - 235, 48, 28, 6, 1, 226, 36, 28, 6, 1, 238, 169, 28, 6, 1, 244, 81, 2, - 245, 236, 28, 6, 1, 229, 63, 66, 28, 6, 1, 248, 65, 28, 6, 1, 57, 28, 6, - 1, 252, 238, 28, 6, 1, 225, 42, 28, 6, 1, 246, 58, 28, 6, 1, 250, 77, 28, - 6, 1, 240, 72, 28, 6, 1, 223, 77, 28, 6, 1, 223, 97, 28, 6, 1, 74, 28, 6, - 1, 229, 63, 74, 28, 6, 1, 177, 28, 6, 1, 248, 2, 28, 6, 1, 247, 247, 28, - 6, 1, 247, 239, 28, 6, 1, 73, 28, 6, 1, 233, 151, 28, 6, 1, 247, 198, 28, - 6, 1, 247, 188, 28, 6, 1, 227, 44, 28, 6, 1, 66, 28, 6, 1, 248, 29, 28, - 6, 1, 154, 28, 6, 1, 226, 40, 28, 6, 1, 251, 182, 28, 6, 1, 229, 146, 28, - 6, 1, 229, 116, 28, 6, 1, 245, 140, 53, 28, 6, 1, 223, 213, 28, 6, 1, - 228, 165, 53, 28, 6, 1, 72, 28, 6, 1, 223, 158, 28, 6, 1, 191, 28, 3, 1, - 57, 28, 3, 1, 252, 238, 28, 3, 1, 225, 42, 28, 3, 1, 246, 58, 28, 3, 1, - 250, 77, 28, 3, 1, 240, 72, 28, 3, 1, 223, 77, 28, 3, 1, 223, 97, 28, 3, - 1, 74, 28, 3, 1, 229, 63, 74, 28, 3, 1, 177, 28, 3, 1, 248, 2, 28, 3, 1, - 247, 247, 28, 3, 1, 247, 239, 28, 3, 1, 73, 28, 3, 1, 233, 151, 28, 3, 1, - 247, 198, 28, 3, 1, 247, 188, 28, 3, 1, 227, 44, 28, 3, 1, 66, 28, 3, 1, - 248, 29, 28, 3, 1, 154, 28, 3, 1, 226, 40, 28, 3, 1, 251, 182, 28, 3, 1, - 229, 146, 28, 3, 1, 229, 116, 28, 3, 1, 245, 140, 53, 28, 3, 1, 223, 213, - 28, 3, 1, 228, 165, 53, 28, 3, 1, 72, 28, 3, 1, 223, 158, 28, 3, 1, 191, - 28, 3, 1, 240, 73, 2, 245, 236, 28, 3, 1, 239, 219, 28, 3, 1, 249, 176, - 28, 3, 1, 246, 21, 28, 3, 1, 225, 150, 240, 72, 28, 3, 1, 248, 69, 28, 3, - 1, 252, 53, 74, 28, 3, 1, 223, 202, 28, 3, 1, 239, 170, 28, 3, 1, 237, - 151, 28, 3, 1, 235, 48, 28, 3, 1, 226, 36, 28, 3, 1, 238, 169, 28, 3, 1, - 244, 81, 2, 245, 236, 28, 3, 1, 229, 63, 66, 28, 3, 1, 248, 65, 28, 6, 1, - 234, 66, 28, 3, 1, 234, 66, 28, 6, 1, 223, 239, 28, 3, 1, 223, 239, 28, - 6, 1, 239, 213, 72, 28, 3, 1, 239, 213, 72, 28, 6, 1, 237, 155, 223, 139, - 28, 3, 1, 237, 155, 223, 139, 28, 6, 1, 239, 213, 237, 155, 223, 139, 28, - 3, 1, 239, 213, 237, 155, 223, 139, 28, 6, 1, 252, 173, 223, 139, 28, 3, - 1, 252, 173, 223, 139, 28, 6, 1, 239, 213, 252, 173, 223, 139, 28, 3, 1, - 239, 213, 252, 173, 223, 139, 28, 6, 1, 238, 111, 28, 3, 1, 238, 111, 28, - 6, 1, 232, 183, 28, 3, 1, 232, 183, 28, 6, 1, 247, 38, 28, 3, 1, 247, 38, - 28, 6, 1, 239, 184, 28, 3, 1, 239, 184, 28, 6, 1, 239, 185, 2, 47, 245, - 237, 255, 41, 28, 3, 1, 239, 185, 2, 47, 245, 237, 255, 41, 28, 6, 1, - 225, 153, 28, 3, 1, 225, 153, 28, 6, 1, 231, 104, 234, 66, 28, 3, 1, 231, - 104, 234, 66, 28, 6, 1, 234, 67, 2, 226, 143, 28, 3, 1, 234, 67, 2, 226, - 143, 28, 6, 1, 234, 19, 28, 3, 1, 234, 19, 28, 6, 1, 238, 135, 28, 3, 1, - 238, 135, 28, 226, 193, 53, 36, 28, 226, 143, 36, 28, 233, 228, 36, 28, - 172, 233, 6, 36, 28, 186, 233, 6, 36, 28, 232, 248, 36, 28, 244, 136, - 226, 193, 53, 36, 28, 236, 128, 53, 28, 6, 1, 229, 63, 244, 81, 2, 227, - 89, 28, 3, 1, 229, 63, 244, 81, 2, 227, 89, 28, 6, 1, 229, 182, 53, 28, - 3, 1, 229, 182, 53, 28, 6, 1, 247, 199, 2, 226, 172, 28, 3, 1, 247, 199, - 2, 226, 172, 28, 6, 1, 246, 59, 2, 225, 109, 28, 3, 1, 246, 59, 2, 225, - 109, 28, 6, 1, 246, 59, 2, 82, 28, 3, 1, 246, 59, 2, 82, 28, 6, 1, 246, - 59, 2, 236, 154, 88, 28, 3, 1, 246, 59, 2, 236, 154, 88, 28, 6, 1, 223, - 78, 2, 250, 34, 28, 3, 1, 223, 78, 2, 250, 34, 28, 6, 1, 223, 98, 2, 250, - 34, 28, 3, 1, 223, 98, 2, 250, 34, 28, 6, 1, 188, 2, 250, 34, 28, 3, 1, - 188, 2, 250, 34, 28, 6, 1, 188, 2, 61, 82, 28, 3, 1, 188, 2, 61, 82, 28, - 6, 1, 188, 2, 82, 28, 3, 1, 188, 2, 82, 28, 6, 1, 253, 23, 177, 28, 3, 1, - 253, 23, 177, 28, 6, 1, 247, 240, 2, 250, 34, 28, 3, 1, 247, 240, 2, 250, - 34, 28, 6, 20, 247, 240, 246, 58, 28, 3, 20, 247, 240, 246, 58, 28, 6, 1, - 233, 152, 2, 236, 154, 88, 28, 3, 1, 233, 152, 2, 236, 154, 88, 28, 6, 1, - 255, 47, 154, 28, 3, 1, 255, 47, 154, 28, 6, 1, 247, 189, 2, 250, 34, 28, - 3, 1, 247, 189, 2, 250, 34, 28, 6, 1, 227, 45, 2, 250, 34, 28, 3, 1, 227, - 45, 2, 250, 34, 28, 6, 1, 228, 32, 66, 28, 3, 1, 228, 32, 66, 28, 6, 1, - 228, 32, 97, 2, 82, 28, 3, 1, 228, 32, 97, 2, 82, 28, 6, 1, 245, 170, 2, - 250, 34, 28, 3, 1, 245, 170, 2, 250, 34, 28, 6, 20, 227, 45, 226, 40, 28, - 3, 20, 227, 45, 226, 40, 28, 6, 1, 251, 183, 2, 250, 34, 28, 3, 1, 251, - 183, 2, 250, 34, 28, 6, 1, 251, 183, 2, 61, 82, 28, 3, 1, 251, 183, 2, - 61, 82, 28, 6, 1, 229, 91, 28, 3, 1, 229, 91, 28, 6, 1, 255, 47, 251, - 182, 28, 3, 1, 255, 47, 251, 182, 28, 6, 1, 255, 47, 251, 183, 2, 250, - 34, 28, 3, 1, 255, 47, 251, 183, 2, 250, 34, 28, 1, 233, 222, 28, 6, 1, - 223, 78, 2, 252, 106, 28, 3, 1, 223, 78, 2, 252, 106, 28, 6, 1, 188, 2, - 88, 28, 3, 1, 188, 2, 88, 28, 6, 1, 248, 3, 2, 227, 89, 28, 3, 1, 248, 3, - 2, 227, 89, 28, 6, 1, 247, 240, 2, 88, 28, 3, 1, 247, 240, 2, 88, 28, 6, - 1, 247, 240, 2, 227, 89, 28, 3, 1, 247, 240, 2, 227, 89, 28, 6, 1, 238, - 223, 251, 182, 28, 3, 1, 238, 223, 251, 182, 28, 6, 1, 247, 248, 2, 227, - 89, 28, 3, 1, 247, 248, 2, 227, 89, 28, 3, 1, 233, 222, 28, 6, 1, 102, 2, - 252, 106, 28, 3, 1, 102, 2, 252, 106, 28, 6, 1, 102, 2, 219, 28, 3, 1, - 102, 2, 219, 28, 6, 20, 102, 240, 72, 28, 3, 20, 102, 240, 72, 28, 6, 1, - 240, 73, 2, 252, 106, 28, 3, 1, 240, 73, 2, 252, 106, 28, 6, 1, 230, 222, - 28, 3, 1, 230, 222, 28, 6, 1, 230, 223, 2, 219, 28, 3, 1, 230, 223, 2, - 219, 28, 6, 1, 223, 78, 2, 219, 28, 3, 1, 223, 78, 2, 219, 28, 6, 1, 223, - 98, 2, 219, 28, 3, 1, 223, 98, 2, 219, 28, 6, 1, 255, 47, 248, 69, 28, 3, - 1, 255, 47, 248, 69, 28, 6, 1, 244, 81, 2, 237, 63, 28, 3, 1, 244, 81, 2, - 237, 63, 28, 6, 1, 244, 81, 2, 219, 28, 3, 1, 244, 81, 2, 219, 28, 6, 1, - 130, 2, 219, 28, 3, 1, 130, 2, 219, 28, 6, 1, 253, 31, 73, 28, 3, 1, 253, - 31, 73, 28, 6, 1, 253, 31, 130, 2, 219, 28, 3, 1, 253, 31, 130, 2, 219, - 28, 6, 1, 161, 2, 219, 28, 3, 1, 161, 2, 219, 28, 6, 1, 97, 2, 237, 63, - 28, 3, 1, 97, 2, 237, 63, 28, 6, 1, 97, 2, 219, 28, 3, 1, 97, 2, 219, 28, - 6, 1, 97, 2, 47, 155, 28, 3, 1, 97, 2, 47, 155, 28, 6, 1, 251, 183, 2, - 219, 28, 3, 1, 251, 183, 2, 219, 28, 6, 1, 246, 59, 2, 250, 34, 28, 3, 1, - 246, 59, 2, 250, 34, 28, 6, 1, 223, 214, 2, 219, 28, 3, 1, 223, 214, 2, - 219, 28, 6, 1, 246, 59, 2, 195, 22, 88, 28, 3, 1, 246, 59, 2, 195, 22, - 88, 28, 6, 1, 245, 170, 2, 88, 28, 3, 1, 245, 170, 2, 88, 28, 6, 1, 245, - 170, 2, 82, 28, 3, 1, 245, 170, 2, 82, 28, 6, 1, 238, 143, 250, 77, 28, - 3, 1, 238, 143, 250, 77, 28, 6, 1, 238, 143, 249, 176, 28, 3, 1, 238, - 143, 249, 176, 28, 6, 1, 238, 143, 223, 31, 28, 3, 1, 238, 143, 223, 31, - 28, 6, 1, 238, 143, 248, 63, 28, 3, 1, 238, 143, 248, 63, 28, 6, 1, 238, - 143, 237, 151, 28, 3, 1, 238, 143, 237, 151, 28, 6, 1, 238, 143, 235, 48, - 28, 3, 1, 238, 143, 235, 48, 28, 6, 1, 238, 143, 228, 204, 28, 3, 1, 238, - 143, 228, 204, 28, 6, 1, 238, 143, 226, 139, 28, 3, 1, 238, 143, 226, - 139, 28, 6, 1, 200, 223, 97, 28, 3, 1, 200, 223, 97, 28, 6, 1, 248, 3, 2, - 88, 28, 3, 1, 248, 3, 2, 88, 28, 6, 1, 237, 205, 28, 3, 1, 237, 205, 28, - 6, 1, 231, 184, 28, 3, 1, 231, 184, 28, 6, 1, 224, 10, 28, 3, 1, 224, 10, - 28, 6, 1, 232, 138, 28, 3, 1, 232, 138, 28, 6, 1, 224, 141, 28, 3, 1, - 224, 141, 28, 6, 1, 254, 224, 177, 28, 3, 1, 254, 224, 177, 28, 6, 1, - 248, 3, 2, 236, 154, 88, 28, 3, 1, 248, 3, 2, 236, 154, 88, 28, 6, 1, - 247, 240, 2, 236, 154, 88, 28, 3, 1, 247, 240, 2, 236, 154, 88, 120, 6, - 1, 254, 31, 120, 6, 1, 252, 210, 120, 6, 1, 246, 36, 120, 6, 1, 250, 189, - 120, 6, 1, 248, 39, 120, 6, 1, 223, 117, 120, 6, 1, 248, 24, 120, 6, 1, - 247, 173, 120, 6, 1, 96, 120, 6, 1, 223, 77, 120, 6, 1, 239, 252, 120, 6, - 1, 237, 154, 120, 6, 1, 224, 67, 120, 6, 1, 252, 39, 120, 6, 1, 238, 243, - 120, 6, 1, 244, 227, 120, 6, 1, 239, 179, 120, 6, 1, 246, 65, 120, 6, 1, - 251, 178, 120, 6, 1, 236, 210, 120, 6, 1, 223, 202, 120, 6, 1, 234, 232, - 120, 6, 1, 229, 146, 120, 6, 1, 224, 206, 120, 6, 1, 251, 204, 120, 6, 1, - 233, 140, 120, 6, 1, 239, 158, 120, 6, 1, 208, 120, 6, 1, 230, 196, 120, - 6, 1, 224, 230, 120, 6, 1, 226, 141, 120, 6, 1, 231, 225, 120, 6, 1, 251, - 68, 120, 6, 1, 223, 188, 120, 6, 1, 233, 27, 120, 6, 1, 238, 253, 120, 6, - 1, 234, 83, 120, 6, 1, 247, 87, 120, 52, 1, 42, 132, 231, 139, 120, 254, - 144, 120, 247, 243, 76, 120, 247, 149, 76, 120, 251, 54, 120, 232, 69, - 76, 120, 255, 48, 76, 120, 3, 1, 254, 31, 120, 3, 1, 252, 210, 120, 3, 1, - 246, 36, 120, 3, 1, 250, 189, 120, 3, 1, 248, 39, 120, 3, 1, 223, 117, - 120, 3, 1, 248, 24, 120, 3, 1, 247, 173, 120, 3, 1, 96, 120, 3, 1, 223, - 77, 120, 3, 1, 239, 252, 120, 3, 1, 237, 154, 120, 3, 1, 224, 67, 120, 3, - 1, 252, 39, 120, 3, 1, 238, 243, 120, 3, 1, 244, 227, 120, 3, 1, 239, - 179, 120, 3, 1, 246, 65, 120, 3, 1, 251, 178, 120, 3, 1, 236, 210, 120, - 3, 1, 223, 202, 120, 3, 1, 234, 232, 120, 3, 1, 229, 146, 120, 3, 1, 224, - 206, 120, 3, 1, 251, 204, 120, 3, 1, 233, 140, 120, 3, 1, 239, 158, 120, - 3, 1, 208, 120, 3, 1, 230, 196, 120, 3, 1, 224, 230, 120, 3, 1, 226, 141, - 120, 3, 1, 231, 225, 120, 3, 1, 251, 68, 120, 3, 1, 223, 188, 120, 3, 1, - 233, 27, 120, 3, 1, 238, 253, 120, 3, 1, 234, 83, 120, 3, 1, 247, 87, - 120, 3, 20, 248, 40, 223, 188, 120, 246, 218, 228, 38, 120, 244, 95, 78, - 255, 42, 247, 166, 78, 255, 42, 230, 197, 78, 255, 42, 229, 133, 78, 255, - 42, 223, 106, 232, 121, 78, 255, 42, 223, 106, 246, 183, 78, 255, 42, - 226, 149, 78, 255, 42, 231, 191, 78, 255, 42, 223, 105, 78, 255, 42, 233, - 171, 78, 255, 42, 223, 208, 78, 255, 42, 227, 1, 78, 255, 42, 246, 112, - 78, 255, 42, 246, 113, 236, 38, 78, 255, 42, 246, 110, 78, 255, 42, 232, - 122, 233, 193, 78, 255, 42, 227, 27, 246, 126, 78, 255, 42, 233, 155, 78, - 255, 42, 254, 60, 245, 163, 78, 255, 42, 236, 47, 78, 255, 42, 237, 53, - 78, 255, 42, 236, 206, 78, 255, 42, 236, 207, 238, 254, 78, 255, 42, 250, - 137, 78, 255, 42, 232, 133, 78, 255, 42, 227, 27, 232, 117, 78, 255, 42, - 223, 216, 252, 211, 223, 173, 78, 255, 42, 234, 72, 78, 255, 42, 240, 33, - 78, 255, 42, 250, 61, 78, 255, 42, 223, 36, 78, 165, 237, 5, 251, 106, - 78, 232, 255, 229, 93, 78, 232, 255, 245, 131, 230, 197, 78, 232, 255, - 245, 131, 233, 166, 78, 232, 255, 245, 131, 232, 126, 78, 232, 255, 245, - 58, 78, 232, 255, 226, 38, 78, 232, 255, 230, 197, 78, 232, 255, 233, - 166, 78, 232, 255, 232, 126, 78, 232, 255, 244, 223, 78, 232, 255, 244, - 224, 245, 133, 32, 225, 46, 78, 232, 255, 232, 72, 78, 232, 255, 250, - 176, 145, 237, 27, 78, 232, 255, 236, 198, 78, 232, 171, 237, 26, 78, - 232, 255, 232, 14, 78, 232, 171, 233, 172, 78, 232, 255, 229, 79, 249, - 140, 78, 232, 255, 228, 244, 249, 140, 78, 232, 171, 228, 166, 233, 168, - 78, 165, 225, 113, 249, 140, 78, 165, 203, 249, 140, 78, 232, 171, 234, - 195, 245, 162, 78, 232, 255, 232, 127, 232, 121, 78, 1, 254, 227, 78, 1, - 252, 200, 78, 1, 246, 34, 78, 1, 250, 160, 78, 1, 245, 121, 78, 1, 225, - 46, 78, 1, 223, 99, 78, 1, 245, 90, 78, 1, 227, 10, 78, 1, 223, 175, 78, - 1, 35, 239, 59, 78, 1, 239, 59, 78, 1, 238, 12, 78, 1, 35, 236, 215, 78, - 1, 236, 215, 78, 1, 35, 234, 194, 78, 1, 234, 194, 78, 1, 231, 2, 78, 1, - 254, 29, 78, 1, 35, 233, 151, 78, 1, 233, 151, 78, 1, 35, 226, 41, 78, 1, - 226, 41, 78, 1, 232, 92, 78, 1, 231, 205, 78, 1, 229, 78, 78, 1, 227, 58, - 78, 20, 223, 200, 47, 225, 46, 78, 20, 223, 200, 225, 47, 223, 175, 78, - 20, 223, 200, 47, 223, 175, 78, 232, 171, 246, 112, 78, 232, 171, 246, - 110, 10, 65, 53, 10, 5, 230, 252, 10, 247, 1, 237, 13, 10, 5, 231, 21, - 254, 131, 250, 232, 231, 111, 254, 131, 246, 237, 231, 111, 10, 231, 250, - 254, 131, 233, 124, 236, 130, 53, 254, 131, 233, 124, 227, 24, 226, 195, - 53, 255, 12, 53, 10, 251, 54, 10, 250, 125, 229, 173, 10, 233, 1, 225, - 32, 53, 10, 5, 236, 113, 10, 5, 231, 8, 254, 229, 224, 156, 10, 5, 254, - 229, 254, 74, 10, 5, 232, 13, 254, 228, 10, 5, 232, 17, 254, 214, 254, - 178, 10, 5, 227, 82, 10, 3, 201, 227, 91, 10, 3, 201, 20, 92, 2, 216, 2, - 223, 224, 10, 3, 201, 223, 110, 10, 3, 247, 104, 10, 3, 250, 156, 10, 3, - 239, 23, 10, 229, 186, 10, 226, 66, 56, 232, 171, 76, 10, 232, 69, 76, - 10, 1, 245, 149, 10, 1, 92, 2, 237, 59, 46, 10, 1, 92, 2, 164, 46, 10, 1, - 224, 145, 2, 164, 46, 10, 1, 92, 2, 164, 51, 10, 1, 62, 2, 164, 46, 10, - 1, 254, 227, 10, 1, 252, 223, 10, 1, 227, 35, 237, 22, 10, 1, 227, 34, - 10, 1, 226, 236, 10, 1, 239, 168, 10, 1, 245, 159, 10, 1, 238, 225, 10, - 1, 250, 165, 10, 1, 226, 245, 10, 1, 231, 225, 10, 1, 223, 110, 10, 1, - 230, 201, 10, 1, 229, 110, 10, 1, 231, 24, 10, 1, 250, 184, 10, 1, 227, - 91, 10, 1, 223, 113, 10, 1, 254, 248, 10, 1, 246, 63, 10, 1, 238, 252, 2, - 135, 197, 46, 10, 1, 238, 252, 2, 152, 197, 51, 10, 1, 247, 107, 62, 2, - 239, 223, 196, 10, 1, 247, 107, 62, 2, 135, 197, 46, 10, 1, 247, 107, 62, - 2, 152, 197, 46, 10, 227, 63, 10, 1, 247, 87, 10, 1, 232, 131, 10, 1, - 239, 59, 10, 1, 238, 20, 10, 1, 236, 225, 10, 1, 234, 251, 10, 1, 245, - 107, 10, 1, 224, 144, 10, 1, 92, 237, 41, 10, 1, 223, 224, 10, 247, 102, - 10, 250, 154, 10, 239, 21, 10, 247, 104, 10, 250, 156, 10, 239, 23, 10, - 229, 137, 10, 227, 234, 10, 237, 57, 46, 10, 164, 46, 10, 164, 51, 10, - 227, 253, 254, 227, 10, 239, 223, 250, 156, 10, 165, 234, 252, 246, 50, - 10, 223, 5, 10, 31, 5, 3, 225, 65, 46, 10, 31, 5, 239, 223, 3, 225, 65, - 46, 10, 31, 5, 56, 51, 10, 200, 250, 156, 10, 247, 105, 2, 135, 249, 138, - 254, 131, 21, 223, 89, 254, 131, 21, 118, 254, 131, 21, 113, 254, 131, - 21, 166, 254, 131, 21, 158, 254, 131, 21, 173, 254, 131, 21, 183, 254, - 131, 21, 194, 254, 131, 21, 187, 254, 131, 21, 192, 10, 233, 123, 53, 10, - 250, 71, 229, 173, 10, 226, 193, 229, 173, 10, 247, 37, 232, 253, 228, - 58, 10, 1, 249, 139, 252, 223, 10, 1, 249, 139, 232, 131, 10, 1, 227, - 219, 254, 227, 10, 1, 92, 224, 157, 10, 1, 92, 2, 224, 146, 164, 46, 10, - 1, 92, 2, 224, 146, 164, 51, 10, 1, 201, 245, 149, 10, 1, 201, 164, 254, - 227, 10, 1, 201, 164, 224, 144, 10, 1, 97, 2, 164, 46, 10, 1, 201, 164, - 223, 224, 10, 1, 226, 14, 10, 1, 226, 12, 10, 1, 252, 230, 10, 1, 227, - 35, 2, 231, 139, 10, 1, 227, 35, 2, 152, 197, 64, 248, 124, 10, 1, 233, - 140, 10, 1, 227, 32, 10, 1, 252, 221, 10, 1, 101, 2, 164, 46, 10, 1, 101, - 2, 135, 197, 61, 46, 10, 1, 234, 166, 10, 1, 248, 75, 10, 1, 101, 2, 152, - 197, 46, 10, 1, 227, 48, 10, 1, 227, 46, 10, 1, 250, 112, 10, 1, 250, - 166, 2, 231, 139, 10, 1, 250, 166, 2, 56, 51, 10, 1, 250, 166, 2, 56, - 252, 214, 22, 3, 227, 91, 10, 1, 250, 171, 10, 1, 250, 114, 10, 1, 248, - 99, 10, 1, 250, 166, 2, 152, 197, 64, 248, 124, 10, 1, 250, 166, 2, 246, - 243, 197, 46, 10, 1, 231, 95, 10, 1, 231, 226, 2, 3, 196, 10, 1, 231, - 226, 2, 231, 139, 10, 1, 231, 226, 2, 56, 51, 10, 1, 231, 226, 2, 3, 225, - 65, 51, 10, 1, 231, 226, 2, 56, 252, 214, 22, 56, 46, 10, 1, 231, 226, 2, - 135, 197, 46, 10, 1, 239, 165, 10, 1, 231, 226, 2, 246, 243, 197, 46, 10, - 1, 230, 202, 2, 56, 252, 214, 22, 56, 46, 10, 1, 230, 202, 2, 152, 197, - 51, 10, 1, 230, 202, 2, 152, 197, 252, 214, 22, 152, 197, 46, 10, 1, 231, - 25, 2, 135, 197, 51, 10, 1, 231, 25, 2, 152, 197, 46, 10, 1, 227, 92, 2, - 152, 197, 46, 10, 1, 254, 249, 2, 152, 197, 46, 10, 1, 249, 139, 247, 87, - 10, 1, 247, 88, 2, 56, 236, 71, 51, 10, 1, 247, 88, 2, 56, 51, 10, 1, - 225, 36, 10, 1, 247, 88, 2, 152, 197, 51, 10, 1, 233, 138, 10, 1, 232, - 132, 2, 56, 46, 10, 1, 232, 132, 2, 152, 197, 46, 10, 1, 238, 251, 10, 1, - 227, 197, 239, 59, 10, 1, 239, 60, 2, 231, 139, 10, 1, 239, 60, 2, 56, - 46, 10, 1, 235, 139, 10, 1, 239, 60, 2, 152, 197, 51, 10, 1, 246, 180, - 10, 1, 246, 181, 2, 231, 139, 10, 1, 235, 105, 10, 1, 246, 181, 2, 135, - 197, 51, 10, 1, 245, 210, 10, 1, 246, 181, 2, 152, 197, 46, 10, 1, 216, - 2, 3, 196, 10, 1, 216, 2, 56, 46, 10, 1, 216, 2, 152, 197, 46, 10, 1, - 216, 2, 152, 197, 51, 10, 1, 234, 252, 2, 56, 51, 10, 1, 234, 252, 246, - 50, 10, 1, 231, 125, 10, 1, 234, 252, 2, 231, 139, 10, 1, 234, 252, 2, - 152, 197, 46, 10, 1, 245, 108, 249, 157, 10, 1, 227, 49, 2, 56, 46, 10, - 1, 245, 108, 2, 62, 46, 10, 1, 245, 108, 246, 8, 10, 1, 245, 108, 246, 9, - 2, 164, 46, 10, 1, 227, 35, 237, 23, 246, 8, 10, 1, 224, 145, 2, 231, - 139, 10, 1, 238, 185, 234, 88, 10, 1, 234, 88, 10, 1, 66, 10, 1, 223, - 158, 10, 1, 238, 185, 223, 158, 10, 1, 224, 145, 2, 135, 197, 46, 10, 1, - 225, 42, 10, 1, 247, 107, 223, 224, 10, 1, 62, 2, 227, 89, 10, 1, 62, 2, - 3, 196, 10, 1, 224, 145, 2, 56, 46, 10, 1, 72, 10, 1, 62, 2, 152, 197, - 51, 10, 1, 62, 253, 29, 10, 1, 62, 253, 30, 2, 164, 46, 10, 246, 218, - 228, 38, 10, 1, 255, 19, 10, 3, 201, 20, 231, 25, 2, 216, 2, 92, 237, 41, - 10, 3, 201, 20, 232, 132, 2, 216, 2, 92, 237, 41, 10, 3, 201, 55, 59, 15, - 10, 3, 201, 216, 254, 227, 10, 3, 201, 239, 168, 10, 3, 201, 152, 249, - 138, 10, 3, 201, 230, 201, 10, 247, 233, 106, 254, 33, 10, 228, 56, 106, - 231, 68, 248, 3, 245, 56, 10, 3, 201, 231, 102, 223, 89, 10, 3, 201, 225, - 112, 231, 235, 223, 89, 10, 3, 201, 249, 139, 245, 119, 106, 238, 225, - 10, 3, 201, 55, 44, 15, 10, 3, 184, 230, 201, 10, 3, 201, 237, 58, 10, 3, - 224, 144, 10, 3, 223, 224, 10, 3, 201, 223, 224, 10, 3, 201, 234, 251, - 10, 233, 23, 106, 231, 14, 10, 247, 241, 251, 219, 184, 228, 38, 10, 247, - 241, 251, 219, 201, 228, 38, 10, 231, 102, 201, 228, 39, 2, 247, 53, 251, - 218, 10, 3, 184, 236, 225, 10, 1, 250, 166, 2, 239, 223, 196, 10, 1, 231, - 226, 2, 239, 223, 196, 247, 142, 254, 131, 21, 223, 89, 247, 142, 254, - 131, 21, 118, 247, 142, 254, 131, 21, 113, 247, 142, 254, 131, 21, 166, - 247, 142, 254, 131, 21, 158, 247, 142, 254, 131, 21, 173, 247, 142, 254, - 131, 21, 183, 247, 142, 254, 131, 21, 194, 247, 142, 254, 131, 21, 187, - 247, 142, 254, 131, 21, 192, 10, 1, 229, 111, 2, 56, 51, 10, 1, 250, 185, - 2, 56, 51, 10, 1, 246, 64, 2, 56, 51, 10, 5, 228, 243, 254, 193, 10, 5, - 228, 243, 232, 236, 236, 210, 10, 1, 245, 108, 2, 239, 223, 196, 151, - 247, 233, 106, 233, 191, 151, 227, 215, 246, 218, 228, 38, 151, 227, 255, - 246, 218, 228, 38, 151, 227, 215, 251, 61, 151, 227, 255, 251, 61, 151, - 169, 251, 61, 151, 251, 62, 228, 202, 237, 237, 151, 251, 62, 228, 202, - 231, 153, 151, 227, 215, 251, 62, 228, 202, 237, 237, 151, 227, 255, 251, - 62, 228, 202, 231, 153, 151, 251, 20, 151, 245, 138, 234, 99, 151, 245, - 138, 236, 197, 151, 245, 138, 254, 71, 151, 255, 48, 76, 151, 1, 254, - 230, 151, 1, 227, 219, 254, 230, 151, 1, 252, 197, 151, 1, 246, 172, 151, - 1, 246, 173, 246, 156, 151, 1, 250, 163, 151, 1, 249, 139, 250, 164, 231, - 136, 151, 1, 245, 121, 151, 1, 224, 144, 151, 1, 223, 110, 151, 1, 245, - 88, 151, 1, 227, 6, 151, 1, 227, 7, 246, 156, 151, 1, 223, 148, 151, 1, - 223, 149, 245, 121, 151, 1, 239, 38, 151, 1, 238, 19, 151, 1, 236, 127, - 151, 1, 234, 194, 151, 1, 229, 179, 151, 1, 35, 229, 179, 151, 1, 72, - 151, 1, 233, 151, 151, 1, 200, 233, 151, 151, 1, 231, 22, 151, 1, 232, - 125, 151, 1, 231, 136, 151, 1, 229, 78, 151, 1, 227, 56, 151, 1, 233, - 113, 252, 187, 151, 1, 233, 113, 246, 61, 151, 1, 233, 113, 250, 19, 151, - 232, 174, 46, 151, 232, 174, 51, 151, 232, 174, 248, 137, 151, 223, 21, - 46, 151, 223, 21, 51, 151, 223, 21, 248, 137, 151, 231, 247, 46, 151, - 231, 247, 51, 151, 248, 138, 223, 28, 244, 212, 151, 248, 138, 223, 28, - 254, 179, 151, 245, 124, 46, 151, 245, 124, 51, 151, 245, 123, 248, 137, - 151, 247, 186, 46, 151, 247, 186, 51, 151, 231, 44, 151, 247, 81, 249, - 140, 151, 232, 51, 151, 231, 66, 151, 135, 61, 197, 46, 151, 135, 61, - 197, 51, 151, 152, 197, 46, 151, 152, 197, 51, 151, 234, 97, 237, 171, - 46, 151, 234, 97, 237, 171, 51, 151, 236, 28, 151, 253, 28, 151, 1, 228, - 163, 223, 83, 151, 1, 228, 163, 238, 219, 151, 1, 228, 163, 247, 97, 10, - 1, 252, 224, 2, 152, 197, 244, 162, 51, 10, 1, 252, 224, 2, 56, 252, 214, - 22, 152, 197, 46, 10, 1, 252, 224, 2, 152, 197, 232, 251, 225, 106, 51, - 10, 1, 252, 224, 2, 152, 197, 232, 251, 225, 106, 252, 214, 22, 135, 197, - 46, 10, 1, 252, 224, 2, 135, 197, 252, 214, 22, 56, 46, 10, 1, 252, 224, - 2, 239, 223, 3, 225, 65, 51, 10, 1, 252, 224, 2, 3, 196, 10, 1, 101, 2, - 135, 197, 46, 10, 1, 101, 2, 152, 197, 232, 251, 225, 106, 51, 10, 1, - 250, 166, 2, 135, 197, 224, 236, 252, 214, 22, 3, 227, 91, 10, 1, 250, - 166, 2, 239, 223, 3, 225, 65, 51, 10, 1, 231, 226, 2, 82, 10, 1, 230, - 202, 2, 246, 243, 197, 46, 10, 1, 254, 249, 2, 135, 197, 46, 10, 1, 254, - 249, 2, 152, 197, 232, 251, 248, 125, 46, 10, 1, 254, 249, 2, 135, 197, - 224, 236, 46, 10, 1, 247, 88, 2, 135, 197, 51, 10, 1, 247, 88, 2, 152, - 197, 232, 251, 225, 106, 51, 10, 1, 238, 252, 2, 56, 46, 10, 1, 238, 252, - 2, 152, 197, 46, 10, 1, 238, 252, 2, 152, 197, 232, 251, 225, 106, 51, - 10, 1, 55, 2, 56, 46, 10, 1, 55, 2, 56, 51, 10, 1, 234, 252, 2, 135, 197, - 51, 10, 1, 234, 252, 2, 3, 227, 91, 10, 1, 234, 252, 2, 3, 196, 10, 1, - 216, 2, 125, 10, 1, 231, 226, 2, 135, 197, 224, 236, 46, 10, 1, 231, 226, - 2, 164, 46, 10, 1, 230, 202, 2, 135, 197, 224, 236, 46, 10, 1, 101, 2, 3, - 10, 1, 227, 92, 51, 10, 1, 101, 2, 3, 10, 1, 227, 92, 22, 135, 249, 138, - 10, 1, 230, 202, 2, 3, 10, 1, 227, 92, 22, 135, 249, 138, 10, 1, 231, - 226, 2, 3, 10, 1, 227, 92, 22, 135, 249, 138, 10, 1, 101, 2, 3, 10, 1, - 227, 92, 46, 10, 1, 92, 2, 247, 142, 254, 131, 21, 135, 46, 10, 1, 92, 2, - 247, 142, 254, 131, 21, 152, 46, 10, 1, 247, 107, 62, 2, 247, 142, 254, - 131, 21, 135, 46, 10, 1, 247, 107, 62, 2, 247, 142, 254, 131, 21, 152, - 46, 10, 1, 247, 107, 62, 2, 247, 142, 254, 131, 21, 246, 243, 51, 10, 1, - 224, 145, 2, 247, 142, 254, 131, 21, 135, 46, 10, 1, 224, 145, 2, 247, - 142, 254, 131, 21, 152, 46, 10, 1, 62, 253, 30, 2, 247, 142, 254, 131, - 21, 135, 46, 10, 1, 62, 253, 30, 2, 247, 142, 254, 131, 21, 152, 46, 10, - 1, 101, 2, 247, 142, 254, 131, 21, 246, 243, 51, 10, 1, 230, 202, 2, 247, - 142, 254, 131, 21, 246, 243, 46, 10, 1, 230, 202, 2, 239, 223, 196, 10, - 1, 239, 60, 2, 135, 197, 46, 226, 248, 1, 245, 167, 226, 248, 1, 229, - 118, 226, 248, 1, 234, 250, 226, 248, 1, 232, 22, 226, 248, 1, 253, 69, - 226, 248, 1, 237, 202, 226, 248, 1, 239, 70, 226, 248, 1, 254, 219, 226, - 248, 1, 225, 62, 226, 248, 1, 236, 224, 226, 248, 1, 247, 127, 226, 248, - 1, 250, 21, 226, 248, 1, 226, 250, 226, 248, 1, 238, 40, 226, 248, 1, - 246, 189, 226, 248, 1, 246, 14, 226, 248, 1, 230, 200, 226, 248, 1, 250, - 123, 226, 248, 1, 223, 102, 226, 248, 1, 227, 57, 226, 248, 1, 224, 21, - 226, 248, 1, 233, 161, 226, 248, 1, 239, 172, 226, 248, 1, 251, 185, 226, - 248, 1, 226, 19, 226, 248, 1, 245, 83, 226, 248, 1, 238, 226, 226, 248, - 1, 226, 249, 226, 248, 1, 223, 116, 226, 248, 1, 229, 109, 226, 248, 1, - 231, 28, 226, 248, 1, 250, 187, 226, 248, 1, 96, 226, 248, 1, 223, 27, - 226, 248, 1, 254, 246, 226, 248, 1, 246, 62, 226, 248, 1, 232, 135, 226, - 248, 1, 224, 171, 226, 248, 255, 49, 226, 248, 255, 62, 226, 248, 244, - 70, 226, 248, 248, 34, 226, 248, 225, 166, 226, 248, 234, 51, 226, 248, - 248, 41, 226, 248, 247, 137, 226, 248, 234, 96, 226, 248, 234, 104, 226, - 248, 227, 234, 226, 248, 1, 235, 254, 204, 21, 223, 89, 204, 21, 118, - 204, 21, 113, 204, 21, 166, 204, 21, 158, 204, 21, 173, 204, 21, 183, - 204, 21, 194, 204, 21, 187, 204, 21, 192, 204, 1, 57, 204, 1, 248, 35, - 204, 1, 74, 204, 1, 72, 204, 1, 66, 204, 1, 234, 52, 204, 1, 73, 204, 1, - 250, 177, 204, 1, 199, 204, 1, 253, 70, 204, 1, 213, 204, 1, 227, 107, - 204, 1, 239, 179, 204, 1, 251, 204, 204, 1, 250, 189, 204, 1, 208, 204, - 1, 231, 99, 204, 1, 231, 31, 204, 1, 246, 144, 204, 1, 247, 129, 204, 1, - 177, 204, 1, 238, 43, 204, 1, 236, 2, 224, 102, 204, 1, 198, 204, 1, 234, - 173, 204, 1, 236, 1, 204, 1, 154, 204, 1, 224, 173, 204, 1, 191, 204, 1, - 234, 174, 224, 102, 204, 1, 239, 110, 239, 179, 204, 1, 239, 110, 251, - 204, 204, 1, 239, 110, 208, 204, 36, 229, 63, 201, 226, 118, 204, 36, - 229, 63, 184, 226, 118, 204, 36, 229, 63, 231, 135, 226, 118, 204, 36, - 182, 250, 33, 226, 118, 204, 36, 182, 201, 226, 118, 204, 36, 182, 184, - 226, 118, 204, 36, 182, 231, 135, 226, 118, 204, 36, 235, 228, 76, 204, - 36, 47, 56, 46, 204, 201, 206, 254, 144, 204, 184, 206, 254, 144, 204, - 14, 234, 53, 250, 44, 204, 14, 246, 143, 204, 251, 54, 204, 247, 149, 76, - 204, 238, 25, 94, 5, 252, 19, 94, 5, 254, 160, 94, 5, 224, 211, 94, 1, - 229, 63, 57, 94, 1, 57, 94, 1, 255, 63, 94, 1, 74, 94, 1, 240, 47, 94, 1, - 66, 94, 1, 225, 76, 94, 1, 153, 146, 94, 1, 153, 149, 94, 1, 252, 21, 72, - 94, 1, 229, 63, 72, 94, 1, 72, 94, 1, 254, 253, 94, 1, 252, 21, 73, 94, - 1, 229, 63, 73, 94, 1, 73, 94, 1, 254, 53, 94, 1, 177, 94, 1, 238, 227, - 94, 1, 246, 193, 94, 1, 246, 66, 94, 1, 235, 137, 94, 1, 252, 39, 94, 1, - 251, 204, 94, 1, 239, 179, 94, 1, 239, 160, 94, 1, 234, 173, 94, 1, 226, - 20, 94, 1, 226, 10, 94, 1, 250, 117, 94, 1, 250, 101, 94, 1, 235, 18, 94, - 1, 227, 107, 94, 1, 226, 251, 94, 1, 250, 189, 94, 1, 250, 22, 94, 1, - 236, 1, 94, 1, 235, 10, 94, 1, 213, 94, 1, 233, 97, 94, 1, 253, 70, 94, - 1, 252, 190, 94, 1, 198, 94, 1, 191, 94, 1, 208, 94, 1, 231, 99, 94, 1, - 238, 43, 94, 1, 237, 148, 94, 1, 237, 147, 94, 1, 225, 64, 94, 1, 229, - 146, 94, 1, 228, 110, 94, 1, 231, 31, 94, 1, 154, 94, 5, 234, 202, 94, 5, - 254, 40, 94, 31, 5, 255, 63, 94, 31, 5, 74, 94, 31, 5, 240, 47, 94, 31, - 5, 66, 94, 31, 5, 225, 76, 94, 31, 5, 153, 146, 94, 31, 5, 153, 231, 100, - 94, 31, 5, 252, 21, 72, 94, 31, 5, 229, 63, 72, 94, 31, 5, 72, 94, 31, 5, - 254, 253, 94, 31, 5, 252, 21, 73, 94, 31, 5, 229, 63, 73, 94, 31, 5, 73, - 94, 31, 5, 254, 53, 94, 5, 224, 216, 94, 234, 69, 94, 228, 27, 5, 225, - 161, 94, 228, 27, 5, 254, 162, 94, 245, 237, 255, 41, 94, 255, 33, 255, - 41, 94, 1, 232, 138, 94, 1, 238, 214, 94, 1, 246, 56, 94, 1, 223, 117, - 94, 1, 250, 106, 94, 1, 231, 184, 94, 1, 247, 129, 94, 1, 223, 126, 94, - 1, 153, 231, 100, 94, 1, 153, 237, 149, 94, 31, 5, 153, 149, 94, 31, 5, - 153, 237, 149, 94, 250, 151, 94, 47, 250, 151, 94, 21, 223, 89, 94, 21, - 118, 94, 21, 113, 94, 21, 166, 94, 21, 158, 94, 21, 173, 94, 21, 183, 94, - 21, 194, 94, 21, 187, 94, 21, 192, 94, 255, 48, 53, 94, 5, 201, 228, 144, - 249, 140, 94, 1, 252, 21, 57, 94, 1, 246, 101, 94, 1, 239, 145, 94, 1, - 246, 16, 228, 38, 94, 1, 250, 107, 94, 1, 253, 16, 121, 5, 252, 19, 121, - 5, 254, 160, 121, 5, 224, 211, 121, 1, 57, 121, 1, 255, 63, 121, 1, 74, - 121, 1, 240, 47, 121, 1, 66, 121, 1, 225, 76, 121, 1, 153, 146, 121, 1, - 153, 149, 121, 1, 72, 121, 1, 254, 253, 121, 1, 73, 121, 1, 254, 53, 121, - 1, 177, 121, 1, 238, 227, 121, 1, 246, 193, 121, 1, 246, 66, 121, 1, 235, - 137, 121, 1, 252, 39, 121, 1, 251, 204, 121, 1, 239, 179, 121, 1, 239, - 160, 121, 1, 234, 173, 121, 1, 226, 20, 121, 1, 226, 10, 121, 1, 250, - 117, 121, 1, 250, 101, 121, 1, 235, 18, 121, 1, 227, 107, 121, 1, 226, - 251, 121, 1, 250, 189, 121, 1, 250, 22, 121, 1, 236, 1, 121, 1, 213, 121, - 1, 233, 97, 121, 1, 253, 70, 121, 1, 252, 190, 121, 1, 198, 121, 1, 191, - 121, 1, 208, 121, 1, 238, 43, 121, 1, 229, 146, 121, 1, 228, 110, 121, 1, - 231, 31, 121, 1, 154, 121, 5, 234, 202, 121, 5, 254, 40, 121, 31, 5, 255, - 63, 121, 31, 5, 74, 121, 31, 5, 240, 47, 121, 31, 5, 66, 121, 31, 5, 225, - 76, 121, 31, 5, 153, 146, 121, 31, 5, 153, 231, 100, 121, 31, 5, 72, 121, - 31, 5, 254, 253, 121, 31, 5, 73, 121, 31, 5, 254, 53, 121, 5, 224, 216, - 121, 1, 238, 221, 227, 107, 121, 254, 54, 237, 219, 76, 121, 1, 231, 99, - 121, 1, 231, 184, 121, 1, 223, 126, 121, 1, 153, 231, 100, 121, 1, 153, - 237, 149, 121, 31, 5, 153, 149, 121, 31, 5, 153, 237, 149, 121, 21, 223, - 89, 121, 21, 118, 121, 21, 113, 121, 21, 166, 121, 21, 158, 121, 21, 173, - 121, 21, 183, 121, 21, 194, 121, 21, 187, 121, 21, 192, 121, 1, 232, 25, - 2, 236, 154, 250, 0, 121, 1, 232, 25, 2, 203, 250, 0, 121, 231, 54, 76, - 121, 231, 54, 53, 121, 250, 222, 234, 197, 118, 121, 250, 222, 234, 197, - 113, 121, 250, 222, 234, 197, 166, 121, 250, 222, 234, 197, 158, 121, - 250, 222, 234, 197, 168, 237, 214, 226, 244, 226, 240, 250, 42, 121, 250, - 222, 250, 43, 228, 212, 121, 239, 196, 148, 5, 255, 28, 252, 169, 148, 5, - 252, 169, 148, 5, 224, 211, 148, 1, 57, 148, 1, 255, 63, 148, 1, 74, 148, - 1, 240, 47, 148, 1, 66, 148, 1, 225, 76, 148, 1, 248, 35, 148, 1, 254, - 253, 148, 1, 234, 52, 148, 1, 254, 53, 148, 1, 177, 148, 1, 238, 227, - 148, 1, 246, 193, 148, 1, 246, 66, 148, 1, 235, 137, 148, 1, 252, 39, - 148, 1, 251, 204, 148, 1, 239, 179, 148, 1, 239, 160, 148, 1, 234, 173, - 148, 1, 226, 20, 148, 1, 226, 10, 148, 1, 250, 117, 148, 1, 250, 101, - 148, 1, 235, 18, 148, 1, 227, 107, 148, 1, 226, 251, 148, 1, 250, 189, - 148, 1, 250, 22, 148, 1, 236, 1, 148, 1, 213, 148, 1, 233, 97, 148, 1, - 253, 70, 148, 1, 252, 190, 148, 1, 198, 148, 1, 191, 148, 1, 208, 148, 1, - 238, 43, 148, 1, 237, 148, 148, 1, 225, 64, 148, 1, 229, 146, 148, 1, - 231, 31, 148, 1, 154, 148, 5, 234, 202, 148, 31, 5, 255, 63, 148, 31, 5, - 74, 148, 31, 5, 240, 47, 148, 31, 5, 66, 148, 31, 5, 225, 76, 148, 31, 5, - 248, 35, 148, 31, 5, 254, 253, 148, 31, 5, 234, 52, 148, 31, 5, 254, 53, - 148, 5, 224, 216, 148, 5, 225, 162, 148, 1, 238, 214, 148, 1, 246, 56, - 148, 1, 223, 117, 148, 1, 231, 99, 148, 1, 247, 129, 148, 21, 223, 89, - 148, 21, 118, 148, 21, 113, 148, 21, 166, 148, 21, 158, 148, 21, 173, - 148, 21, 183, 148, 21, 194, 148, 21, 187, 148, 21, 192, 148, 226, 148, - 148, 255, 27, 148, 239, 209, 148, 225, 99, 148, 248, 9, 234, 57, 148, 5, - 224, 0, 137, 5, 252, 19, 137, 5, 254, 160, 137, 5, 224, 211, 137, 1, 57, - 137, 1, 255, 63, 137, 1, 74, 137, 1, 240, 47, 137, 1, 66, 137, 1, 225, - 76, 137, 1, 153, 146, 137, 1, 153, 149, 137, 31, 252, 21, 72, 137, 1, 72, - 137, 1, 254, 253, 137, 31, 252, 21, 73, 137, 1, 73, 137, 1, 254, 53, 137, - 1, 177, 137, 1, 238, 227, 137, 1, 246, 193, 137, 1, 246, 66, 137, 1, 235, - 137, 137, 1, 252, 39, 137, 1, 251, 204, 137, 1, 239, 179, 137, 1, 239, - 160, 137, 1, 234, 173, 137, 1, 226, 20, 137, 1, 226, 10, 137, 1, 250, - 117, 137, 1, 250, 101, 137, 1, 235, 18, 137, 1, 227, 107, 137, 1, 226, - 251, 137, 1, 250, 189, 137, 1, 250, 22, 137, 1, 236, 1, 137, 1, 213, 137, - 1, 233, 97, 137, 1, 253, 70, 137, 1, 252, 190, 137, 1, 198, 137, 1, 191, - 137, 1, 208, 137, 1, 238, 43, 137, 1, 237, 148, 137, 1, 225, 64, 137, 1, - 229, 146, 137, 1, 228, 110, 137, 1, 231, 31, 137, 1, 154, 137, 5, 234, - 202, 137, 5, 254, 40, 137, 31, 5, 255, 63, 137, 31, 5, 74, 137, 31, 5, - 240, 47, 137, 31, 5, 66, 137, 31, 5, 225, 76, 137, 31, 5, 153, 146, 137, - 31, 5, 153, 231, 100, 137, 31, 5, 252, 21, 72, 137, 31, 5, 72, 137, 31, - 5, 254, 253, 137, 31, 5, 252, 21, 73, 137, 31, 5, 73, 137, 31, 5, 254, - 53, 137, 5, 224, 216, 137, 234, 69, 137, 1, 153, 231, 100, 137, 1, 153, - 237, 149, 137, 31, 5, 153, 149, 137, 31, 5, 153, 237, 149, 137, 21, 223, - 89, 137, 21, 118, 137, 21, 113, 137, 21, 166, 137, 21, 158, 137, 21, 173, - 137, 21, 183, 137, 21, 194, 137, 21, 187, 137, 21, 192, 137, 231, 54, 53, - 134, 5, 252, 19, 134, 5, 254, 160, 134, 5, 224, 211, 134, 1, 57, 134, 1, - 255, 63, 134, 1, 74, 134, 1, 240, 47, 134, 1, 66, 134, 1, 225, 76, 134, - 1, 153, 146, 134, 1, 153, 149, 134, 1, 72, 134, 1, 254, 253, 134, 1, 73, - 134, 1, 254, 53, 134, 1, 177, 134, 1, 238, 227, 134, 1, 246, 193, 134, 1, - 246, 66, 134, 1, 235, 137, 134, 1, 252, 39, 134, 1, 251, 204, 134, 1, - 239, 179, 134, 1, 239, 160, 134, 1, 234, 173, 134, 1, 226, 20, 134, 1, - 226, 10, 134, 1, 250, 117, 134, 1, 250, 101, 134, 1, 235, 18, 134, 1, - 227, 107, 134, 1, 226, 251, 134, 1, 250, 189, 134, 1, 250, 22, 134, 1, - 236, 1, 134, 1, 213, 134, 1, 233, 97, 134, 1, 253, 70, 134, 1, 252, 190, - 134, 1, 198, 134, 1, 191, 134, 1, 208, 134, 1, 238, 43, 134, 1, 237, 148, - 134, 1, 225, 64, 134, 1, 229, 146, 134, 1, 228, 110, 134, 1, 231, 31, - 134, 1, 154, 134, 5, 234, 202, 134, 5, 254, 40, 134, 31, 5, 255, 63, 134, - 31, 5, 74, 134, 31, 5, 240, 47, 134, 31, 5, 66, 134, 31, 5, 225, 76, 134, - 31, 5, 153, 146, 134, 31, 5, 153, 231, 100, 134, 31, 5, 72, 134, 31, 5, - 254, 253, 134, 31, 5, 73, 134, 31, 5, 254, 53, 134, 5, 224, 216, 134, - 254, 254, 237, 219, 76, 134, 254, 54, 237, 219, 76, 134, 1, 231, 99, 134, - 1, 231, 184, 134, 1, 223, 126, 134, 1, 153, 231, 100, 134, 1, 153, 237, - 149, 134, 31, 5, 153, 149, 134, 31, 5, 153, 237, 149, 134, 21, 223, 89, - 134, 21, 118, 134, 21, 113, 134, 21, 166, 134, 21, 158, 134, 21, 173, - 134, 21, 183, 134, 21, 194, 134, 21, 187, 134, 21, 192, 134, 239, 196, - 134, 1, 224, 173, 160, 5, 254, 160, 160, 5, 224, 211, 160, 1, 57, 160, 1, - 255, 63, 160, 1, 74, 160, 1, 240, 47, 160, 1, 66, 160, 1, 225, 76, 160, - 1, 72, 160, 1, 248, 35, 160, 1, 254, 253, 160, 1, 73, 160, 1, 234, 52, - 160, 1, 254, 53, 160, 1, 177, 160, 1, 235, 137, 160, 1, 252, 39, 160, 1, - 239, 179, 160, 1, 234, 173, 160, 1, 226, 20, 160, 1, 235, 18, 160, 1, - 227, 107, 160, 1, 236, 1, 160, 1, 235, 10, 160, 1, 213, 160, 1, 198, 160, - 1, 191, 160, 1, 208, 160, 1, 231, 99, 160, 1, 238, 43, 160, 1, 237, 148, - 160, 1, 237, 147, 160, 1, 225, 64, 160, 1, 229, 146, 160, 1, 228, 110, - 160, 1, 231, 31, 160, 1, 154, 160, 31, 5, 255, 63, 160, 31, 5, 74, 160, - 31, 5, 240, 47, 160, 31, 5, 66, 160, 31, 5, 225, 76, 160, 31, 5, 72, 160, - 31, 5, 248, 35, 160, 31, 5, 254, 253, 160, 31, 5, 73, 160, 31, 5, 234, - 52, 160, 31, 5, 254, 53, 160, 5, 224, 216, 160, 234, 69, 160, 254, 54, - 237, 219, 76, 160, 21, 223, 89, 160, 21, 118, 160, 21, 113, 160, 21, 166, - 160, 21, 158, 160, 21, 173, 160, 21, 183, 160, 21, 194, 160, 21, 187, - 160, 21, 192, 160, 65, 227, 23, 160, 65, 168, 244, 135, 160, 65, 168, - 226, 194, 160, 250, 121, 53, 160, 236, 88, 53, 160, 223, 226, 53, 160, - 250, 74, 53, 160, 250, 250, 53, 160, 254, 87, 64, 53, 160, 231, 54, 53, - 160, 65, 53, 119, 5, 252, 19, 119, 5, 254, 160, 119, 5, 224, 211, 119, 1, - 57, 119, 1, 255, 63, 119, 1, 74, 119, 1, 240, 47, 119, 1, 66, 119, 1, - 225, 76, 119, 1, 153, 146, 119, 1, 153, 149, 119, 1, 72, 119, 1, 248, 35, - 119, 1, 254, 253, 119, 1, 73, 119, 1, 234, 52, 119, 1, 254, 53, 119, 1, - 177, 119, 1, 238, 227, 119, 1, 246, 193, 119, 1, 246, 66, 119, 1, 235, - 137, 119, 1, 252, 39, 119, 1, 251, 204, 119, 1, 239, 179, 119, 1, 239, - 160, 119, 1, 234, 173, 119, 1, 226, 20, 119, 1, 226, 10, 119, 1, 250, - 117, 119, 1, 250, 101, 119, 1, 235, 18, 119, 1, 227, 107, 119, 1, 226, - 251, 119, 1, 250, 189, 119, 1, 250, 22, 119, 1, 236, 1, 119, 1, 213, 119, - 1, 233, 97, 119, 1, 253, 70, 119, 1, 252, 190, 119, 1, 198, 119, 1, 191, - 119, 1, 208, 119, 1, 231, 99, 119, 1, 238, 43, 119, 1, 237, 148, 119, 1, - 225, 64, 119, 1, 229, 146, 119, 1, 228, 110, 119, 1, 231, 31, 119, 1, - 154, 119, 5, 254, 40, 119, 31, 5, 255, 63, 119, 31, 5, 74, 119, 31, 5, - 240, 47, 119, 31, 5, 66, 119, 31, 5, 225, 76, 119, 31, 5, 153, 146, 119, - 31, 5, 153, 231, 100, 119, 31, 5, 72, 119, 31, 5, 248, 35, 119, 31, 5, - 254, 253, 119, 31, 5, 73, 119, 31, 5, 234, 52, 119, 31, 5, 254, 53, 119, - 5, 224, 216, 119, 237, 219, 76, 119, 254, 254, 237, 219, 76, 119, 1, 226, - 44, 119, 1, 248, 70, 119, 1, 153, 231, 100, 119, 1, 153, 237, 149, 119, - 31, 5, 153, 149, 119, 31, 5, 153, 237, 149, 119, 21, 223, 89, 119, 21, - 118, 119, 21, 113, 119, 21, 166, 119, 21, 158, 119, 21, 173, 119, 21, - 183, 119, 21, 194, 119, 21, 187, 119, 21, 192, 119, 246, 235, 21, 223, - 90, 32, 234, 90, 232, 232, 106, 158, 119, 246, 235, 21, 168, 32, 234, 90, - 232, 232, 106, 158, 119, 246, 235, 21, 135, 32, 234, 90, 232, 232, 106, - 158, 119, 246, 235, 21, 152, 32, 234, 90, 232, 232, 106, 158, 119, 246, - 235, 21, 168, 32, 247, 158, 232, 232, 106, 158, 119, 246, 235, 21, 135, - 32, 247, 158, 232, 232, 106, 158, 119, 246, 235, 21, 152, 32, 247, 158, - 232, 232, 106, 158, 119, 5, 225, 226, 129, 5, 254, 160, 129, 5, 224, 211, - 129, 1, 57, 129, 1, 255, 63, 129, 1, 74, 129, 1, 240, 47, 129, 1, 66, - 129, 1, 225, 76, 129, 1, 153, 146, 129, 1, 153, 149, 129, 1, 72, 129, 1, - 248, 35, 129, 1, 254, 253, 129, 1, 73, 129, 1, 234, 52, 129, 1, 254, 53, - 129, 1, 177, 129, 1, 238, 227, 129, 1, 246, 193, 129, 1, 246, 66, 129, 1, - 235, 137, 129, 1, 252, 39, 129, 1, 251, 204, 129, 1, 239, 179, 129, 1, - 239, 160, 129, 1, 234, 173, 129, 1, 226, 20, 129, 1, 226, 10, 129, 1, - 250, 117, 129, 1, 250, 101, 129, 1, 235, 18, 129, 1, 227, 107, 129, 1, - 226, 251, 129, 1, 250, 189, 129, 1, 250, 22, 129, 1, 236, 1, 129, 1, 213, - 129, 1, 233, 97, 129, 1, 253, 70, 129, 1, 252, 190, 129, 1, 198, 129, 1, - 191, 129, 1, 208, 129, 1, 231, 99, 129, 1, 238, 43, 129, 1, 237, 148, - 129, 1, 225, 64, 129, 1, 229, 146, 129, 1, 228, 110, 129, 1, 231, 31, - 129, 1, 154, 129, 5, 234, 202, 129, 5, 254, 40, 129, 31, 5, 255, 63, 129, - 31, 5, 74, 129, 31, 5, 240, 47, 129, 31, 5, 66, 129, 31, 5, 225, 76, 129, - 31, 5, 153, 146, 129, 31, 5, 153, 231, 100, 129, 31, 5, 72, 129, 31, 5, - 248, 35, 129, 31, 5, 254, 253, 129, 31, 5, 73, 129, 31, 5, 234, 52, 129, - 31, 5, 254, 53, 129, 5, 224, 216, 129, 237, 219, 76, 129, 254, 254, 237, - 219, 76, 129, 1, 247, 129, 129, 1, 153, 231, 100, 129, 1, 153, 237, 149, - 129, 31, 5, 153, 149, 129, 31, 5, 153, 237, 149, 129, 21, 223, 89, 129, - 21, 118, 129, 21, 113, 129, 21, 166, 129, 21, 158, 129, 21, 173, 129, 21, - 183, 129, 21, 194, 129, 21, 187, 129, 21, 192, 129, 5, 239, 150, 129, 5, - 225, 114, 114, 5, 254, 160, 114, 5, 224, 211, 114, 1, 57, 114, 1, 255, - 63, 114, 1, 74, 114, 1, 240, 47, 114, 1, 66, 114, 1, 225, 76, 114, 1, - 153, 146, 114, 1, 153, 149, 114, 1, 72, 114, 1, 248, 35, 114, 1, 254, - 253, 114, 1, 73, 114, 1, 234, 52, 114, 1, 254, 53, 114, 1, 177, 114, 1, - 238, 227, 114, 1, 246, 193, 114, 1, 246, 66, 114, 1, 235, 137, 114, 1, - 252, 39, 114, 1, 251, 204, 114, 1, 239, 179, 114, 1, 239, 160, 114, 1, - 234, 173, 114, 1, 226, 20, 114, 1, 226, 10, 114, 1, 250, 117, 114, 1, - 250, 101, 114, 1, 235, 18, 114, 1, 227, 107, 114, 1, 226, 251, 114, 1, - 250, 189, 114, 1, 250, 22, 114, 1, 236, 1, 114, 1, 213, 114, 1, 233, 97, - 114, 1, 253, 70, 114, 1, 252, 190, 114, 1, 198, 114, 1, 191, 114, 1, 208, - 114, 1, 231, 99, 114, 1, 238, 43, 114, 1, 237, 148, 114, 1, 237, 147, - 114, 1, 225, 64, 114, 1, 229, 146, 114, 1, 228, 110, 114, 1, 231, 31, - 114, 1, 154, 114, 5, 254, 40, 114, 31, 5, 255, 63, 114, 31, 5, 74, 114, - 31, 5, 240, 47, 114, 31, 5, 66, 114, 31, 5, 225, 76, 114, 31, 5, 153, - 146, 114, 31, 5, 153, 231, 100, 114, 31, 5, 72, 114, 31, 5, 248, 35, 114, - 31, 5, 254, 253, 114, 31, 5, 73, 114, 31, 5, 234, 52, 114, 31, 5, 254, - 53, 114, 5, 224, 216, 114, 254, 54, 237, 219, 76, 114, 1, 153, 231, 100, - 114, 1, 153, 237, 149, 114, 31, 5, 153, 149, 114, 31, 5, 153, 237, 149, - 114, 21, 223, 89, 114, 21, 118, 114, 21, 113, 114, 21, 166, 114, 21, 158, - 114, 21, 173, 114, 21, 183, 114, 21, 194, 114, 21, 187, 114, 21, 192, - 114, 65, 227, 23, 114, 65, 168, 244, 135, 114, 65, 168, 226, 194, 114, - 246, 235, 168, 232, 76, 114, 246, 235, 168, 245, 151, 114, 246, 235, 152, - 232, 74, 114, 250, 125, 76, 114, 1, 251, 162, 235, 19, 114, 1, 251, 162, - 199, 114, 1, 251, 162, 231, 100, 114, 1, 251, 162, 149, 114, 1, 251, 162, - 237, 149, 114, 1, 251, 162, 239, 76, 147, 5, 254, 159, 147, 5, 224, 210, - 147, 1, 254, 32, 147, 1, 255, 54, 147, 1, 255, 13, 147, 1, 255, 17, 147, - 1, 239, 187, 147, 1, 240, 46, 147, 1, 225, 69, 147, 1, 225, 71, 147, 1, - 239, 207, 147, 1, 239, 208, 147, 1, 240, 32, 147, 1, 240, 34, 147, 1, - 247, 138, 147, 1, 248, 31, 147, 1, 254, 242, 147, 1, 233, 247, 147, 1, - 234, 47, 147, 1, 254, 43, 147, 1, 254, 208, 239, 8, 147, 1, 237, 54, 239, - 8, 147, 1, 254, 208, 246, 147, 147, 1, 237, 54, 246, 147, 147, 1, 239, - 42, 235, 251, 147, 1, 230, 248, 246, 147, 147, 1, 254, 208, 251, 249, - 147, 1, 237, 54, 251, 249, 147, 1, 254, 208, 239, 171, 147, 1, 237, 54, - 239, 171, 147, 1, 227, 102, 235, 251, 147, 1, 227, 102, 230, 247, 235, - 252, 147, 1, 230, 248, 239, 171, 147, 1, 254, 208, 226, 18, 147, 1, 237, - 54, 226, 18, 147, 1, 254, 208, 250, 108, 147, 1, 237, 54, 250, 108, 147, - 1, 236, 26, 235, 218, 147, 1, 230, 248, 250, 108, 147, 1, 254, 208, 227, - 52, 147, 1, 237, 54, 227, 52, 147, 1, 254, 208, 250, 120, 147, 1, 237, - 54, 250, 120, 147, 1, 250, 148, 235, 218, 147, 1, 230, 248, 250, 120, - 147, 1, 254, 208, 233, 157, 147, 1, 237, 54, 233, 157, 147, 1, 254, 208, - 253, 17, 147, 1, 237, 54, 253, 17, 147, 1, 236, 251, 147, 1, 254, 195, - 253, 17, 147, 1, 223, 232, 147, 1, 231, 249, 147, 1, 250, 148, 237, 251, - 147, 1, 225, 44, 147, 1, 227, 102, 230, 233, 147, 1, 236, 26, 230, 233, - 147, 1, 250, 148, 230, 233, 147, 1, 245, 125, 147, 1, 236, 26, 237, 251, - 147, 1, 247, 99, 147, 5, 254, 232, 147, 31, 5, 255, 16, 147, 31, 5, 238, - 235, 255, 18, 147, 31, 5, 249, 231, 255, 18, 147, 31, 5, 238, 235, 239, - 204, 147, 31, 5, 249, 231, 239, 204, 147, 31, 5, 238, 235, 233, 240, 147, - 31, 5, 249, 231, 233, 240, 147, 31, 5, 246, 182, 147, 31, 5, 238, 144, - 147, 31, 5, 249, 231, 238, 144, 147, 31, 5, 238, 146, 250, 58, 147, 31, - 5, 238, 145, 245, 168, 255, 16, 147, 31, 5, 238, 145, 245, 168, 249, 231, - 255, 16, 147, 31, 5, 238, 145, 245, 168, 246, 146, 147, 31, 5, 246, 146, - 147, 31, 5, 249, 231, 246, 182, 147, 31, 5, 249, 231, 246, 146, 147, 232, - 171, 238, 98, 128, 116, 238, 151, 239, 56, 128, 116, 238, 209, 238, 224, - 128, 116, 238, 209, 238, 203, 128, 116, 238, 209, 238, 202, 128, 116, - 238, 209, 238, 206, 128, 116, 238, 209, 232, 7, 128, 116, 235, 108, 235, - 99, 128, 116, 251, 151, 251, 196, 128, 116, 251, 151, 251, 159, 128, 116, - 251, 151, 251, 195, 128, 116, 228, 170, 228, 169, 128, 116, 251, 151, - 251, 148, 128, 116, 223, 184, 223, 191, 128, 116, 249, 162, 251, 201, - 128, 116, 180, 233, 165, 128, 116, 226, 202, 226, 243, 128, 116, 226, - 202, 235, 234, 128, 116, 226, 202, 233, 72, 128, 116, 235, 7, 235, 155, - 128, 116, 249, 162, 250, 59, 128, 116, 180, 227, 71, 128, 116, 226, 202, - 226, 183, 128, 116, 226, 202, 226, 247, 128, 116, 226, 202, 226, 199, - 128, 116, 235, 7, 234, 206, 128, 116, 252, 139, 253, 54, 128, 116, 233, - 5, 233, 24, 128, 116, 233, 80, 233, 74, 128, 116, 247, 8, 247, 129, 128, - 116, 233, 80, 233, 93, 128, 116, 247, 8, 247, 111, 128, 116, 233, 80, - 231, 0, 128, 116, 236, 104, 198, 128, 116, 223, 184, 224, 1, 128, 116, - 231, 123, 231, 69, 128, 116, 231, 70, 128, 116, 237, 144, 237, 164, 128, - 116, 237, 110, 128, 116, 224, 106, 224, 169, 128, 116, 228, 170, 231, 11, - 128, 116, 228, 170, 231, 50, 128, 116, 228, 170, 228, 5, 128, 116, 244, - 228, 245, 59, 128, 116, 237, 144, 251, 135, 128, 116, 130, 254, 184, 128, - 116, 244, 228, 235, 2, 128, 116, 233, 230, 128, 116, 230, 243, 57, 128, - 116, 237, 49, 245, 147, 128, 116, 230, 243, 255, 63, 128, 116, 230, 243, - 254, 199, 128, 116, 230, 243, 74, 128, 116, 230, 243, 240, 47, 128, 116, - 230, 243, 225, 159, 128, 116, 230, 243, 225, 158, 128, 116, 230, 243, 66, - 128, 116, 230, 243, 225, 76, 128, 116, 233, 82, 128, 250, 222, 14, 253, - 55, 128, 116, 230, 243, 72, 128, 116, 230, 243, 255, 19, 128, 116, 230, - 243, 73, 128, 116, 230, 243, 254, 254, 237, 45, 128, 116, 230, 243, 254, - 254, 237, 46, 128, 116, 238, 23, 128, 116, 237, 42, 128, 116, 237, 43, - 128, 116, 237, 49, 248, 8, 128, 116, 237, 49, 226, 201, 128, 116, 237, - 49, 226, 81, 128, 116, 237, 49, 251, 186, 128, 116, 226, 241, 128, 116, - 235, 66, 128, 116, 223, 251, 128, 116, 247, 4, 128, 21, 223, 89, 128, 21, - 118, 128, 21, 113, 128, 21, 166, 128, 21, 158, 128, 21, 173, 128, 21, - 183, 128, 21, 194, 128, 21, 187, 128, 21, 192, 128, 116, 254, 183, 128, - 116, 238, 207, 179, 1, 238, 150, 179, 1, 238, 209, 227, 226, 179, 1, 238, - 209, 227, 75, 179, 1, 235, 107, 179, 1, 251, 68, 179, 1, 228, 170, 227, - 75, 179, 1, 234, 152, 179, 1, 249, 161, 179, 1, 96, 179, 1, 226, 202, - 227, 226, 179, 1, 226, 202, 227, 75, 179, 1, 235, 6, 179, 1, 252, 138, - 179, 1, 233, 4, 179, 1, 233, 80, 227, 226, 179, 1, 247, 8, 227, 75, 179, - 1, 233, 80, 227, 75, 179, 1, 247, 8, 227, 226, 179, 1, 236, 103, 179, 1, - 223, 183, 179, 1, 237, 144, 237, 164, 179, 1, 237, 144, 237, 123, 179, 1, - 224, 105, 179, 1, 228, 170, 227, 226, 179, 1, 244, 228, 227, 226, 179, 1, - 73, 179, 1, 244, 228, 227, 75, 179, 247, 249, 179, 31, 5, 57, 179, 31, 5, - 237, 49, 239, 46, 179, 31, 5, 255, 63, 179, 31, 5, 254, 199, 179, 31, 5, - 74, 179, 31, 5, 240, 47, 179, 31, 5, 224, 25, 179, 31, 5, 223, 127, 179, - 31, 5, 66, 179, 31, 5, 225, 76, 179, 31, 5, 237, 49, 238, 142, 179, 229, - 181, 5, 237, 143, 179, 229, 181, 5, 234, 152, 179, 31, 5, 72, 179, 31, 5, - 248, 22, 179, 31, 5, 73, 179, 31, 5, 254, 34, 179, 31, 5, 254, 253, 179, - 238, 151, 238, 43, 179, 206, 237, 49, 248, 8, 179, 206, 237, 49, 226, - 201, 179, 206, 237, 49, 226, 175, 179, 206, 237, 49, 251, 255, 179, 252, - 23, 76, 179, 235, 72, 179, 21, 223, 89, 179, 21, 118, 179, 21, 113, 179, - 21, 166, 179, 21, 158, 179, 21, 173, 179, 21, 183, 179, 21, 194, 179, 21, - 187, 179, 21, 192, 179, 244, 228, 235, 6, 179, 244, 228, 236, 103, 54, 4, - 234, 69, 54, 165, 245, 220, 223, 195, 236, 174, 226, 50, 57, 54, 165, - 245, 220, 223, 195, 236, 174, 255, 68, 231, 127, 252, 240, 198, 54, 165, - 245, 220, 223, 195, 236, 174, 255, 68, 245, 220, 226, 35, 198, 54, 165, - 59, 223, 195, 236, 174, 236, 237, 198, 54, 165, 251, 79, 223, 195, 236, - 174, 229, 152, 198, 54, 165, 252, 10, 223, 195, 236, 174, 233, 73, 229, - 140, 198, 54, 165, 223, 195, 236, 174, 226, 35, 229, 140, 198, 54, 165, - 230, 231, 229, 139, 54, 165, 252, 93, 223, 195, 236, 173, 54, 165, 252, - 152, 229, 68, 223, 195, 236, 173, 54, 165, 239, 226, 226, 34, 54, 165, - 250, 53, 226, 35, 252, 92, 54, 165, 229, 139, 54, 165, 234, 156, 229, - 139, 54, 165, 226, 35, 229, 139, 54, 165, 234, 156, 226, 35, 229, 139, - 54, 165, 231, 142, 251, 177, 228, 122, 229, 139, 54, 165, 231, 187, 245, - 244, 229, 139, 54, 165, 252, 10, 255, 72, 231, 73, 236, 236, 182, 252, - 26, 54, 165, 245, 220, 226, 34, 54, 237, 137, 5, 251, 202, 231, 72, 54, - 237, 137, 5, 237, 203, 231, 72, 54, 254, 66, 5, 229, 149, 246, 134, 255, - 73, 231, 72, 54, 254, 66, 5, 255, 70, 213, 54, 254, 66, 5, 230, 214, 226, - 30, 54, 5, 231, 246, 249, 173, 246, 133, 54, 5, 231, 246, 249, 173, 246, - 13, 54, 5, 231, 246, 249, 173, 245, 221, 54, 5, 231, 246, 235, 249, 246, - 133, 54, 5, 231, 246, 235, 249, 246, 13, 54, 5, 231, 246, 249, 173, 231, - 246, 235, 248, 54, 21, 223, 89, 54, 21, 118, 54, 21, 113, 54, 21, 166, - 54, 21, 158, 54, 21, 173, 54, 21, 183, 54, 21, 194, 54, 21, 187, 54, 21, - 192, 54, 21, 132, 118, 54, 21, 132, 113, 54, 21, 132, 166, 54, 21, 132, - 158, 54, 21, 132, 173, 54, 21, 132, 183, 54, 21, 132, 194, 54, 21, 132, - 187, 54, 21, 132, 192, 54, 21, 132, 223, 89, 54, 165, 252, 95, 231, 72, - 54, 165, 235, 131, 252, 46, 234, 164, 223, 29, 54, 165, 252, 10, 255, 72, - 231, 73, 252, 47, 236, 138, 252, 26, 54, 165, 235, 131, 252, 46, 229, - 150, 231, 72, 54, 165, 251, 183, 236, 173, 54, 165, 226, 45, 255, 69, 54, - 165, 245, 209, 231, 73, 245, 174, 54, 165, 245, 209, 231, 73, 245, 180, - 54, 165, 254, 185, 238, 220, 245, 174, 54, 165, 254, 185, 238, 220, 245, - 180, 54, 5, 223, 245, 226, 33, 54, 5, 237, 25, 226, 33, 54, 1, 177, 54, - 1, 238, 227, 54, 1, 246, 193, 54, 1, 246, 66, 54, 1, 235, 137, 54, 1, - 252, 39, 54, 1, 251, 204, 54, 1, 239, 179, 54, 1, 234, 173, 54, 1, 226, - 20, 54, 1, 226, 10, 54, 1, 250, 117, 54, 1, 250, 101, 54, 1, 235, 18, 54, - 1, 227, 107, 54, 1, 226, 251, 54, 1, 250, 189, 54, 1, 250, 22, 54, 1, - 236, 1, 54, 1, 213, 54, 1, 233, 97, 54, 1, 253, 70, 54, 1, 252, 190, 54, - 1, 198, 54, 1, 226, 44, 54, 1, 226, 37, 54, 1, 248, 70, 54, 1, 248, 66, - 54, 1, 224, 173, 54, 1, 223, 85, 54, 1, 223, 117, 54, 1, 255, 75, 54, 1, - 191, 54, 1, 208, 54, 1, 238, 43, 54, 1, 229, 146, 54, 1, 228, 110, 54, 1, - 231, 31, 54, 1, 154, 54, 1, 57, 54, 1, 238, 110, 54, 1, 247, 34, 208, 54, - 1, 238, 167, 54, 1, 231, 99, 54, 31, 5, 255, 63, 54, 31, 5, 74, 54, 31, - 5, 240, 47, 54, 31, 5, 66, 54, 31, 5, 225, 76, 54, 31, 5, 153, 146, 54, - 31, 5, 153, 231, 100, 54, 31, 5, 153, 149, 54, 31, 5, 153, 237, 149, 54, - 31, 5, 72, 54, 31, 5, 248, 35, 54, 31, 5, 73, 54, 31, 5, 234, 52, 54, 5, - 231, 128, 228, 7, 235, 138, 231, 122, 54, 5, 231, 127, 252, 239, 54, 31, - 5, 200, 74, 54, 31, 5, 200, 240, 47, 54, 5, 234, 164, 223, 30, 235, 255, - 250, 189, 54, 5, 228, 178, 237, 245, 54, 165, 245, 153, 54, 165, 233, - 221, 54, 5, 237, 248, 231, 72, 54, 5, 223, 249, 231, 72, 54, 5, 237, 249, - 226, 45, 252, 26, 54, 5, 236, 238, 252, 26, 54, 5, 245, 223, 252, 27, - 231, 185, 54, 5, 245, 223, 236, 230, 231, 185, 54, 228, 0, 1, 177, 54, - 228, 0, 1, 238, 227, 54, 228, 0, 1, 246, 193, 54, 228, 0, 1, 246, 66, 54, - 228, 0, 1, 235, 137, 54, 228, 0, 1, 252, 39, 54, 228, 0, 1, 251, 204, 54, - 228, 0, 1, 239, 179, 54, 228, 0, 1, 234, 173, 54, 228, 0, 1, 226, 20, 54, - 228, 0, 1, 226, 10, 54, 228, 0, 1, 250, 117, 54, 228, 0, 1, 250, 101, 54, - 228, 0, 1, 235, 18, 54, 228, 0, 1, 227, 107, 54, 228, 0, 1, 226, 251, 54, - 228, 0, 1, 250, 189, 54, 228, 0, 1, 250, 22, 54, 228, 0, 1, 236, 1, 54, - 228, 0, 1, 213, 54, 228, 0, 1, 233, 97, 54, 228, 0, 1, 253, 70, 54, 228, - 0, 1, 252, 190, 54, 228, 0, 1, 198, 54, 228, 0, 1, 226, 44, 54, 228, 0, - 1, 226, 37, 54, 228, 0, 1, 248, 70, 54, 228, 0, 1, 248, 66, 54, 228, 0, - 1, 224, 173, 54, 228, 0, 1, 223, 85, 54, 228, 0, 1, 223, 117, 54, 228, 0, - 1, 255, 75, 54, 228, 0, 1, 191, 54, 228, 0, 1, 208, 54, 228, 0, 1, 238, - 43, 54, 228, 0, 1, 229, 146, 54, 228, 0, 1, 228, 110, 54, 228, 0, 1, 231, - 31, 54, 228, 0, 1, 154, 54, 228, 0, 1, 57, 54, 228, 0, 1, 238, 110, 54, - 228, 0, 1, 247, 34, 224, 173, 54, 228, 0, 1, 247, 34, 191, 54, 228, 0, 1, - 247, 34, 208, 54, 238, 108, 231, 71, 238, 227, 54, 238, 108, 231, 71, - 238, 228, 252, 47, 236, 138, 252, 26, 54, 252, 17, 5, 112, 252, 234, 54, - 252, 17, 5, 157, 252, 234, 54, 252, 17, 5, 252, 18, 227, 43, 54, 252, 17, - 5, 230, 230, 255, 74, 54, 14, 248, 116, 252, 90, 54, 14, 231, 245, 231, - 129, 54, 14, 233, 234, 246, 132, 54, 14, 231, 245, 231, 130, 231, 187, - 245, 243, 54, 14, 233, 73, 213, 54, 14, 234, 248, 252, 90, 54, 14, 234, - 248, 252, 91, 234, 156, 255, 71, 54, 14, 234, 248, 252, 91, 245, 222, - 255, 71, 54, 14, 234, 248, 252, 91, 252, 47, 255, 71, 54, 5, 231, 246, - 235, 249, 231, 246, 249, 172, 54, 5, 231, 246, 235, 249, 245, 221, 54, - 165, 252, 94, 229, 68, 246, 47, 236, 174, 231, 186, 54, 165, 236, 105, - 223, 195, 246, 47, 236, 174, 231, 186, 54, 165, 234, 156, 226, 34, 54, - 165, 59, 252, 110, 231, 124, 223, 195, 236, 174, 236, 237, 198, 54, 165, - 251, 79, 252, 110, 231, 124, 223, 195, 236, 174, 229, 152, 198, 69, 1, - 177, 69, 1, 238, 227, 69, 1, 246, 193, 69, 1, 246, 66, 69, 1, 235, 137, - 69, 1, 252, 39, 69, 1, 251, 204, 69, 1, 239, 179, 69, 1, 239, 160, 69, 1, - 234, 173, 69, 1, 235, 8, 69, 1, 226, 20, 69, 1, 226, 10, 69, 1, 250, 117, - 69, 1, 250, 101, 69, 1, 235, 18, 69, 1, 227, 107, 69, 1, 226, 251, 69, 1, - 250, 189, 69, 1, 250, 22, 69, 1, 236, 1, 69, 1, 213, 69, 1, 233, 97, 69, - 1, 253, 70, 69, 1, 252, 190, 69, 1, 198, 69, 1, 191, 69, 1, 208, 69, 1, - 238, 43, 69, 1, 224, 173, 69, 1, 231, 31, 69, 1, 154, 69, 1, 237, 148, - 69, 1, 57, 69, 1, 229, 131, 57, 69, 1, 74, 69, 1, 240, 47, 69, 1, 66, 69, - 1, 225, 76, 69, 1, 72, 69, 1, 236, 95, 72, 69, 1, 73, 69, 1, 254, 53, 69, - 31, 5, 227, 77, 255, 63, 69, 31, 5, 255, 63, 69, 31, 5, 74, 69, 31, 5, - 240, 47, 69, 31, 5, 66, 69, 31, 5, 225, 76, 69, 31, 5, 72, 69, 31, 5, - 254, 253, 69, 31, 5, 236, 95, 240, 47, 69, 31, 5, 236, 95, 73, 69, 31, 5, - 161, 46, 69, 5, 254, 160, 69, 5, 56, 51, 69, 5, 224, 211, 69, 5, 224, - 216, 69, 5, 254, 84, 69, 251, 33, 5, 124, 191, 69, 251, 33, 5, 124, 208, - 69, 251, 33, 5, 124, 224, 173, 69, 251, 33, 5, 124, 154, 69, 1, 245, 233, - 231, 31, 69, 21, 223, 89, 69, 21, 118, 69, 21, 113, 69, 21, 166, 69, 21, - 158, 69, 21, 173, 69, 21, 183, 69, 21, 194, 69, 21, 187, 69, 21, 192, 69, - 5, 237, 155, 230, 205, 69, 5, 230, 205, 69, 14, 237, 140, 69, 14, 251, - 49, 69, 14, 255, 11, 69, 14, 246, 119, 69, 1, 229, 146, 69, 1, 228, 110, - 69, 1, 153, 146, 69, 1, 153, 231, 100, 69, 1, 153, 149, 69, 1, 153, 237, - 149, 69, 31, 5, 153, 146, 69, 31, 5, 153, 231, 100, 69, 31, 5, 153, 149, - 69, 31, 5, 153, 237, 149, 69, 1, 236, 95, 235, 137, 69, 1, 236, 95, 239, - 160, 69, 1, 236, 95, 253, 16, 69, 1, 236, 95, 253, 12, 69, 251, 33, 5, - 236, 95, 124, 236, 1, 69, 251, 33, 5, 236, 95, 124, 198, 69, 251, 33, 5, - 236, 95, 124, 238, 43, 69, 1, 229, 151, 239, 28, 229, 146, 69, 31, 5, - 229, 151, 239, 28, 247, 165, 69, 206, 165, 229, 151, 239, 28, 245, 129, - 69, 206, 165, 229, 151, 239, 28, 239, 4, 233, 79, 69, 1, 224, 129, 232, - 150, 239, 28, 226, 251, 69, 1, 224, 129, 232, 150, 239, 28, 232, 156, 69, - 31, 5, 224, 129, 232, 150, 239, 28, 247, 165, 69, 31, 5, 224, 129, 232, - 150, 239, 28, 225, 159, 69, 5, 224, 129, 232, 150, 239, 28, 226, 117, 69, - 5, 224, 129, 232, 150, 239, 28, 226, 116, 69, 5, 224, 129, 232, 150, 239, - 28, 226, 115, 69, 5, 224, 129, 232, 150, 239, 28, 226, 114, 69, 5, 224, - 129, 232, 150, 239, 28, 226, 113, 69, 1, 248, 44, 232, 150, 239, 28, 235, - 18, 69, 1, 248, 44, 232, 150, 239, 28, 223, 134, 69, 1, 248, 44, 232, - 150, 239, 28, 246, 49, 69, 31, 5, 246, 129, 239, 28, 74, 69, 31, 5, 239, - 9, 234, 88, 69, 31, 5, 239, 9, 66, 69, 31, 5, 239, 9, 248, 35, 69, 1, - 229, 131, 177, 69, 1, 229, 131, 238, 227, 69, 1, 229, 131, 246, 193, 69, - 1, 229, 131, 252, 39, 69, 1, 229, 131, 223, 117, 69, 1, 229, 131, 234, - 173, 69, 1, 229, 131, 250, 189, 69, 1, 229, 131, 236, 1, 69, 1, 229, 131, - 233, 97, 69, 1, 229, 131, 247, 129, 69, 1, 229, 131, 253, 70, 69, 1, 229, - 131, 226, 251, 69, 1, 229, 131, 154, 69, 251, 33, 5, 229, 131, 124, 224, - 173, 69, 31, 5, 229, 131, 255, 63, 69, 31, 5, 229, 131, 72, 69, 31, 5, - 229, 131, 161, 46, 69, 31, 5, 229, 131, 35, 224, 25, 69, 5, 229, 131, - 226, 116, 69, 5, 229, 131, 226, 115, 69, 5, 229, 131, 226, 113, 69, 5, - 229, 131, 226, 112, 69, 5, 229, 131, 251, 2, 226, 116, 69, 5, 229, 131, - 251, 2, 226, 115, 69, 5, 229, 131, 251, 2, 247, 242, 226, 118, 69, 1, - 231, 61, 233, 226, 247, 129, 69, 5, 231, 61, 233, 226, 226, 113, 69, 229, - 131, 21, 223, 89, 69, 229, 131, 21, 118, 69, 229, 131, 21, 113, 69, 229, - 131, 21, 166, 69, 229, 131, 21, 158, 69, 229, 131, 21, 173, 69, 229, 131, - 21, 183, 69, 229, 131, 21, 194, 69, 229, 131, 21, 187, 69, 229, 131, 21, - 192, 69, 14, 229, 131, 118, 69, 14, 229, 131, 247, 148, 87, 6, 1, 254, - 190, 87, 6, 1, 253, 44, 87, 6, 1, 246, 168, 87, 6, 1, 249, 148, 87, 6, 1, - 247, 239, 87, 6, 1, 224, 219, 87, 6, 1, 223, 92, 87, 6, 1, 227, 73, 87, - 6, 1, 240, 16, 87, 6, 1, 239, 46, 87, 6, 1, 238, 6, 87, 6, 1, 237, 35, - 87, 6, 1, 235, 230, 87, 6, 1, 234, 61, 87, 6, 1, 233, 194, 87, 6, 1, 223, - 81, 87, 6, 1, 232, 15, 87, 6, 1, 230, 253, 87, 6, 1, 227, 67, 87, 6, 1, - 225, 138, 87, 6, 1, 233, 92, 87, 6, 1, 238, 218, 87, 6, 1, 246, 60, 87, - 6, 1, 232, 123, 87, 6, 1, 229, 78, 87, 6, 1, 251, 161, 87, 6, 1, 252, 26, - 87, 6, 1, 239, 149, 87, 6, 1, 251, 109, 87, 6, 1, 251, 192, 87, 6, 1, - 224, 70, 87, 6, 1, 239, 159, 87, 6, 1, 245, 165, 87, 6, 1, 245, 121, 87, - 6, 1, 245, 71, 87, 6, 1, 224, 141, 87, 6, 1, 245, 141, 87, 6, 1, 244, - 225, 87, 1, 254, 190, 87, 1, 253, 44, 87, 1, 246, 168, 87, 1, 249, 148, - 87, 1, 247, 239, 87, 1, 224, 219, 87, 1, 223, 92, 87, 1, 227, 73, 87, 1, - 240, 16, 87, 1, 239, 46, 87, 1, 238, 6, 87, 1, 237, 35, 87, 1, 235, 230, - 87, 1, 234, 61, 87, 1, 233, 194, 87, 1, 223, 81, 87, 1, 232, 15, 87, 1, - 230, 253, 87, 1, 227, 67, 87, 1, 225, 138, 87, 1, 233, 92, 87, 1, 238, - 218, 87, 1, 246, 60, 87, 1, 232, 123, 87, 1, 229, 78, 87, 1, 251, 161, - 87, 1, 252, 26, 87, 1, 239, 149, 87, 1, 251, 109, 87, 1, 251, 192, 87, 1, - 224, 70, 87, 1, 239, 159, 87, 1, 245, 165, 87, 1, 245, 121, 87, 1, 245, - 71, 87, 1, 224, 141, 87, 1, 245, 141, 87, 1, 244, 225, 87, 1, 247, 70, - 87, 1, 223, 185, 87, 1, 247, 251, 87, 1, 209, 246, 168, 87, 1, 254, 248, - 87, 233, 192, 229, 173, 52, 1, 87, 235, 230, 26, 122, 238, 173, 26, 122, - 228, 104, 26, 122, 235, 82, 26, 122, 226, 163, 26, 122, 228, 99, 26, 122, - 231, 174, 26, 122, 236, 148, 26, 122, 233, 60, 26, 122, 228, 102, 26, - 122, 228, 236, 26, 122, 228, 100, 26, 122, 240, 68, 26, 122, 251, 113, - 26, 122, 228, 107, 26, 122, 251, 167, 26, 122, 238, 210, 26, 122, 226, - 218, 26, 122, 233, 85, 26, 122, 245, 69, 26, 122, 235, 79, 26, 122, 228, - 103, 26, 122, 235, 74, 26, 122, 235, 77, 26, 122, 226, 162, 26, 122, 231, - 165, 26, 122, 228, 101, 26, 122, 231, 173, 26, 122, 239, 31, 26, 122, - 236, 143, 26, 122, 239, 34, 26, 122, 233, 56, 26, 122, 233, 55, 26, 122, - 233, 45, 26, 122, 233, 52, 26, 122, 233, 50, 26, 122, 233, 48, 26, 122, - 233, 49, 26, 122, 233, 47, 26, 122, 233, 51, 26, 122, 233, 58, 26, 122, - 233, 59, 26, 122, 233, 46, 26, 122, 233, 54, 26, 122, 239, 32, 26, 122, - 239, 30, 26, 122, 228, 230, 26, 122, 228, 228, 26, 122, 228, 221, 26, - 122, 228, 224, 26, 122, 228, 229, 26, 122, 228, 226, 26, 122, 228, 225, - 26, 122, 228, 223, 26, 122, 228, 232, 26, 122, 228, 234, 26, 122, 228, - 235, 26, 122, 228, 231, 26, 122, 228, 222, 26, 122, 228, 227, 26, 122, - 228, 233, 26, 122, 251, 154, 26, 122, 251, 152, 26, 122, 251, 212, 26, - 122, 251, 210, 26, 122, 233, 204, 26, 122, 240, 64, 26, 122, 240, 56, 26, - 122, 240, 63, 26, 122, 240, 60, 26, 122, 240, 59, 26, 122, 240, 62, 26, - 122, 228, 105, 26, 122, 240, 66, 26, 122, 240, 67, 26, 122, 240, 57, 26, - 122, 240, 61, 26, 122, 223, 212, 26, 122, 251, 112, 26, 122, 251, 155, - 26, 122, 251, 153, 26, 122, 251, 213, 26, 122, 251, 211, 26, 122, 251, - 165, 26, 122, 251, 166, 26, 122, 251, 156, 26, 122, 251, 214, 26, 122, - 233, 84, 26, 122, 239, 33, 26, 122, 228, 106, 26, 122, 223, 218, 26, 122, - 247, 52, 26, 170, 247, 52, 26, 170, 57, 26, 170, 255, 19, 26, 170, 191, - 26, 170, 224, 10, 26, 170, 247, 217, 26, 170, 72, 26, 170, 223, 221, 26, - 170, 223, 228, 26, 170, 73, 26, 170, 224, 173, 26, 170, 224, 170, 26, - 170, 234, 88, 26, 170, 223, 183, 26, 170, 66, 26, 170, 224, 133, 26, 170, - 224, 141, 26, 170, 224, 118, 26, 170, 223, 158, 26, 170, 247, 165, 26, - 170, 223, 202, 26, 170, 74, 26, 170, 255, 67, 26, 170, 255, 66, 26, 170, - 224, 23, 26, 170, 224, 22, 26, 170, 247, 215, 26, 170, 247, 214, 26, 170, - 247, 216, 26, 170, 223, 220, 26, 170, 223, 219, 26, 170, 234, 109, 26, - 170, 234, 110, 26, 170, 234, 106, 26, 170, 234, 108, 26, 170, 234, 107, - 26, 170, 223, 180, 26, 170, 223, 179, 26, 170, 223, 178, 26, 170, 223, - 181, 26, 170, 223, 182, 26, 170, 225, 177, 26, 170, 225, 176, 26, 170, - 225, 175, 26, 170, 225, 173, 26, 170, 225, 174, 26, 170, 223, 157, 26, - 170, 223, 155, 26, 170, 223, 156, 26, 170, 223, 151, 26, 170, 223, 152, - 26, 170, 223, 153, 26, 170, 223, 154, 26, 170, 247, 163, 26, 170, 247, - 164, 26, 170, 223, 201, 26, 170, 244, 80, 26, 170, 244, 74, 26, 170, 244, - 76, 26, 170, 244, 75, 26, 170, 244, 77, 26, 170, 244, 79, 26, 170, 254, - 128, 26, 170, 254, 127, 26, 170, 254, 125, 26, 170, 254, 126, 26, 170, - 228, 108, 26, 138, 238, 173, 26, 138, 228, 104, 26, 138, 238, 171, 26, - 138, 235, 82, 26, 138, 235, 81, 26, 138, 235, 80, 26, 138, 226, 163, 26, - 138, 231, 174, 26, 138, 231, 170, 26, 138, 231, 168, 26, 138, 231, 162, - 26, 138, 231, 159, 26, 138, 231, 157, 26, 138, 231, 163, 26, 138, 231, - 173, 26, 138, 236, 148, 26, 138, 233, 60, 26, 138, 233, 52, 26, 138, 228, - 236, 26, 138, 228, 100, 26, 138, 240, 68, 26, 138, 251, 113, 26, 138, - 251, 167, 26, 138, 238, 210, 26, 138, 226, 218, 26, 138, 233, 85, 26, - 138, 245, 69, 26, 138, 238, 172, 26, 138, 238, 170, 26, 138, 235, 79, 26, - 138, 235, 74, 26, 138, 235, 76, 26, 138, 235, 78, 26, 138, 235, 75, 26, - 138, 226, 162, 26, 138, 226, 161, 26, 138, 231, 169, 26, 138, 231, 165, - 26, 138, 231, 156, 26, 138, 231, 155, 26, 138, 228, 101, 26, 138, 231, - 167, 26, 138, 231, 166, 26, 138, 231, 160, 26, 138, 231, 161, 26, 138, - 231, 172, 26, 138, 231, 158, 26, 138, 231, 164, 26, 138, 231, 171, 26, - 138, 231, 154, 26, 138, 236, 145, 26, 138, 236, 142, 26, 138, 236, 143, - 26, 138, 236, 141, 26, 138, 236, 140, 26, 138, 236, 144, 26, 138, 236, - 147, 26, 138, 236, 146, 26, 138, 239, 34, 26, 138, 233, 53, 26, 138, 233, - 54, 26, 138, 233, 57, 26, 138, 239, 32, 26, 138, 228, 230, 26, 138, 228, - 221, 26, 138, 228, 224, 26, 138, 228, 226, 26, 138, 233, 204, 26, 138, - 240, 64, 26, 138, 240, 58, 26, 138, 228, 105, 26, 138, 240, 65, 26, 138, - 223, 212, 26, 138, 223, 210, 26, 138, 223, 211, 26, 138, 233, 84, 26, - 138, 239, 33, 26, 138, 245, 67, 26, 138, 245, 65, 26, 138, 245, 68, 26, - 138, 245, 66, 26, 138, 223, 218, 25, 4, 154, 25, 4, 244, 145, 25, 4, 245, - 75, 25, 4, 245, 167, 25, 4, 245, 109, 25, 4, 245, 121, 25, 4, 244, 227, - 25, 4, 244, 226, 25, 4, 238, 43, 25, 4, 237, 110, 25, 4, 237, 193, 25, 4, - 238, 42, 25, 4, 237, 239, 25, 4, 237, 243, 25, 4, 237, 143, 25, 4, 237, - 88, 25, 4, 245, 84, 25, 4, 245, 78, 25, 4, 245, 80, 25, 4, 245, 83, 25, - 4, 245, 81, 25, 4, 245, 82, 25, 4, 245, 79, 25, 4, 245, 77, 25, 4, 198, - 25, 4, 236, 66, 25, 4, 236, 157, 25, 4, 237, 66, 25, 4, 236, 226, 25, 4, - 236, 235, 25, 4, 236, 103, 25, 4, 236, 19, 25, 4, 227, 120, 25, 4, 227, - 114, 25, 4, 227, 116, 25, 4, 227, 119, 25, 4, 227, 117, 25, 4, 227, 118, - 25, 4, 227, 115, 25, 4, 227, 113, 25, 4, 208, 25, 4, 231, 70, 25, 4, 231, - 180, 25, 4, 232, 22, 25, 4, 231, 229, 25, 4, 231, 244, 25, 4, 231, 122, - 25, 4, 231, 46, 25, 4, 231, 31, 25, 4, 228, 6, 25, 4, 229, 15, 25, 4, - 231, 29, 25, 4, 230, 203, 25, 4, 230, 213, 25, 4, 228, 169, 25, 4, 227, - 200, 25, 4, 229, 146, 25, 4, 229, 43, 25, 4, 229, 90, 25, 4, 229, 142, - 25, 4, 229, 112, 25, 4, 229, 114, 25, 4, 229, 71, 25, 4, 229, 30, 25, 4, - 232, 138, 25, 4, 232, 84, 25, 4, 232, 104, 25, 4, 232, 137, 25, 4, 232, - 118, 25, 4, 232, 119, 25, 4, 232, 95, 25, 4, 232, 94, 25, 4, 232, 45, 25, - 4, 232, 41, 25, 4, 232, 44, 25, 4, 232, 42, 25, 4, 232, 43, 25, 4, 232, - 116, 25, 4, 232, 110, 25, 4, 232, 112, 25, 4, 232, 115, 25, 4, 232, 113, - 25, 4, 232, 114, 25, 4, 232, 111, 25, 4, 232, 109, 25, 4, 232, 105, 25, - 4, 232, 108, 25, 4, 232, 106, 25, 4, 232, 107, 25, 4, 253, 70, 25, 4, - 252, 90, 25, 4, 252, 181, 25, 4, 253, 69, 25, 4, 252, 232, 25, 4, 252, - 238, 25, 4, 252, 138, 25, 4, 252, 60, 25, 4, 225, 64, 25, 4, 224, 190, - 25, 4, 224, 228, 25, 4, 225, 63, 25, 4, 225, 38, 25, 4, 225, 42, 25, 4, - 224, 206, 25, 4, 224, 183, 25, 4, 227, 107, 25, 4, 225, 250, 25, 4, 226, - 175, 25, 4, 227, 104, 25, 4, 227, 37, 25, 4, 227, 44, 25, 4, 96, 25, 4, - 225, 222, 25, 4, 252, 39, 25, 4, 250, 235, 25, 4, 251, 118, 25, 4, 252, - 38, 25, 4, 251, 225, 25, 4, 251, 231, 25, 4, 251, 68, 25, 4, 250, 210, - 25, 4, 224, 72, 25, 4, 224, 48, 25, 4, 224, 64, 25, 4, 224, 71, 25, 4, - 224, 68, 25, 4, 224, 69, 25, 4, 224, 55, 25, 4, 224, 54, 25, 4, 224, 44, - 25, 4, 224, 40, 25, 4, 224, 43, 25, 4, 224, 41, 25, 4, 224, 42, 25, 4, - 236, 1, 25, 4, 234, 206, 25, 4, 235, 89, 25, 4, 235, 254, 25, 4, 235, - 160, 25, 4, 235, 162, 25, 4, 235, 6, 25, 4, 234, 177, 25, 4, 234, 173, - 25, 4, 234, 146, 25, 4, 234, 163, 25, 4, 234, 172, 25, 4, 234, 168, 25, - 4, 234, 169, 25, 4, 234, 152, 25, 4, 234, 139, 25, 4, 246, 16, 57, 25, 4, - 246, 16, 66, 25, 4, 246, 16, 74, 25, 4, 246, 16, 255, 63, 25, 4, 246, 16, - 248, 35, 25, 4, 246, 16, 72, 25, 4, 246, 16, 73, 25, 4, 246, 16, 224, - 173, 25, 4, 177, 25, 4, 238, 107, 25, 4, 238, 199, 25, 4, 239, 72, 25, 4, - 239, 2, 25, 4, 239, 3, 25, 4, 238, 150, 25, 4, 238, 149, 25, 4, 238, 78, - 25, 4, 238, 74, 25, 4, 238, 77, 25, 4, 238, 75, 25, 4, 238, 76, 25, 4, - 238, 69, 25, 4, 238, 63, 25, 4, 238, 65, 25, 4, 238, 68, 25, 4, 238, 66, - 25, 4, 238, 67, 25, 4, 238, 64, 25, 4, 238, 62, 25, 4, 238, 58, 25, 4, - 238, 61, 25, 4, 238, 59, 25, 4, 238, 60, 25, 4, 224, 173, 25, 4, 224, 83, - 25, 4, 224, 118, 25, 4, 224, 172, 25, 4, 224, 138, 25, 4, 224, 141, 25, - 4, 224, 105, 25, 4, 224, 104, 25, 4, 233, 91, 57, 25, 4, 233, 91, 66, 25, - 4, 233, 91, 74, 25, 4, 233, 91, 255, 63, 25, 4, 233, 91, 248, 35, 25, 4, - 233, 91, 72, 25, 4, 233, 91, 73, 25, 4, 223, 117, 25, 4, 223, 19, 25, 4, - 223, 47, 25, 4, 223, 116, 25, 4, 223, 95, 25, 4, 223, 97, 25, 4, 223, 27, - 25, 4, 223, 6, 25, 4, 223, 85, 25, 4, 223, 65, 25, 4, 223, 72, 25, 4, - 223, 84, 25, 4, 223, 76, 25, 4, 223, 77, 25, 4, 223, 70, 25, 4, 223, 56, - 25, 4, 191, 25, 4, 223, 158, 25, 4, 223, 202, 25, 4, 224, 21, 25, 4, 223, - 225, 25, 4, 223, 228, 25, 4, 223, 183, 25, 4, 223, 177, 25, 4, 250, 189, - 25, 4, 248, 107, 25, 4, 250, 4, 25, 4, 250, 188, 25, 4, 250, 67, 25, 4, - 250, 77, 25, 4, 249, 161, 25, 4, 248, 79, 25, 4, 250, 117, 25, 4, 250, - 87, 25, 4, 250, 99, 25, 4, 250, 116, 25, 4, 250, 104, 25, 4, 250, 105, - 25, 4, 250, 92, 25, 4, 250, 78, 25, 4, 239, 179, 25, 4, 239, 101, 25, 4, - 239, 156, 25, 4, 239, 178, 25, 4, 239, 169, 25, 4, 239, 170, 25, 4, 239, - 117, 25, 4, 239, 84, 25, 4, 246, 193, 25, 4, 245, 218, 25, 4, 246, 46, - 25, 4, 246, 190, 25, 4, 246, 125, 25, 4, 246, 131, 25, 4, 246, 11, 25, 4, - 246, 10, 25, 4, 245, 188, 25, 4, 245, 184, 25, 4, 245, 187, 25, 4, 245, - 185, 25, 4, 245, 186, 25, 4, 246, 101, 25, 4, 246, 81, 25, 4, 246, 91, - 25, 4, 246, 100, 25, 4, 246, 95, 25, 4, 246, 96, 25, 4, 246, 85, 25, 4, - 246, 70, 25, 4, 226, 251, 25, 4, 226, 186, 25, 4, 226, 220, 25, 4, 226, - 250, 25, 4, 226, 238, 25, 4, 226, 239, 25, 4, 226, 201, 25, 4, 226, 180, - 25, 4, 251, 204, 25, 4, 251, 136, 25, 4, 251, 169, 25, 4, 251, 203, 25, - 4, 251, 179, 25, 4, 251, 182, 25, 4, 251, 150, 25, 4, 251, 125, 25, 4, - 233, 97, 25, 4, 233, 75, 25, 4, 233, 87, 25, 4, 233, 96, 25, 4, 233, 89, - 25, 4, 233, 90, 25, 4, 233, 79, 25, 4, 233, 71, 25, 4, 226, 44, 25, 4, - 226, 26, 25, 4, 226, 29, 25, 4, 226, 43, 25, 4, 226, 39, 25, 4, 226, 40, - 25, 4, 226, 28, 25, 4, 226, 24, 25, 4, 225, 186, 25, 4, 225, 178, 25, 4, - 225, 182, 25, 4, 225, 185, 25, 4, 225, 183, 25, 4, 225, 184, 25, 4, 225, - 180, 25, 4, 225, 179, 25, 4, 247, 129, 25, 4, 246, 219, 25, 4, 247, 70, - 25, 4, 247, 128, 25, 4, 247, 92, 25, 4, 247, 97, 25, 4, 247, 7, 25, 4, - 246, 206, 25, 4, 213, 25, 4, 232, 173, 25, 4, 233, 69, 25, 4, 233, 241, - 25, 4, 233, 144, 25, 4, 233, 151, 25, 4, 233, 4, 25, 4, 232, 156, 25, 4, - 231, 42, 25, 4, 236, 10, 25, 4, 246, 200, 25, 36, 246, 124, 76, 25, 230, - 206, 76, 25, 224, 91, 25, 246, 218, 228, 38, 25, 251, 54, 25, 229, 186, - 25, 251, 61, 25, 232, 211, 251, 61, 25, 232, 69, 76, 25, 233, 192, 229, - 173, 25, 21, 118, 25, 21, 113, 25, 21, 166, 25, 21, 158, 25, 21, 173, 25, - 21, 183, 25, 21, 194, 25, 21, 187, 25, 21, 192, 25, 65, 227, 23, 25, 65, - 225, 216, 25, 65, 226, 207, 25, 65, 246, 245, 25, 65, 247, 63, 25, 65, - 228, 206, 25, 65, 229, 159, 25, 65, 248, 12, 25, 65, 235, 57, 25, 65, - 244, 135, 25, 65, 227, 24, 226, 194, 25, 4, 230, 210, 236, 19, 25, 4, - 236, 15, 25, 4, 236, 16, 25, 4, 236, 17, 25, 4, 230, 210, 252, 60, 25, 4, - 252, 57, 25, 4, 252, 58, 25, 4, 252, 59, 25, 4, 230, 210, 246, 206, 25, - 4, 246, 202, 25, 4, 246, 203, 25, 4, 246, 204, 25, 4, 230, 210, 232, 156, - 25, 4, 232, 152, 25, 4, 232, 153, 25, 4, 232, 154, 25, 226, 119, 165, - 223, 186, 25, 226, 119, 165, 250, 36, 25, 226, 119, 165, 231, 143, 25, - 226, 119, 165, 229, 63, 231, 143, 25, 226, 119, 165, 249, 238, 25, 226, - 119, 165, 238, 242, 25, 226, 119, 165, 251, 158, 25, 226, 119, 165, 245, - 73, 25, 226, 119, 165, 250, 35, 25, 226, 119, 165, 238, 89, 131, 1, 57, - 131, 1, 72, 131, 1, 74, 131, 1, 73, 131, 1, 66, 131, 1, 196, 131, 1, 246, - 193, 131, 1, 177, 131, 1, 246, 131, 131, 1, 246, 46, 131, 1, 246, 11, - 131, 1, 245, 218, 131, 1, 245, 189, 131, 1, 154, 131, 1, 245, 121, 131, - 1, 245, 75, 131, 1, 244, 227, 131, 1, 244, 145, 131, 1, 244, 128, 131, 1, - 238, 43, 131, 1, 237, 243, 131, 1, 237, 193, 131, 1, 237, 143, 131, 1, - 237, 110, 131, 1, 237, 89, 131, 1, 198, 131, 1, 236, 235, 131, 1, 236, - 157, 131, 1, 236, 103, 131, 1, 236, 66, 131, 1, 236, 1, 131, 1, 244, 249, - 131, 1, 235, 243, 131, 1, 235, 162, 131, 1, 235, 89, 131, 1, 235, 6, 131, - 1, 234, 206, 131, 1, 234, 179, 131, 1, 232, 83, 131, 1, 232, 71, 131, 1, - 232, 66, 131, 1, 232, 60, 131, 1, 232, 49, 131, 1, 232, 47, 131, 1, 231, - 31, 131, 1, 193, 131, 1, 230, 213, 131, 1, 229, 15, 131, 1, 228, 169, - 131, 1, 228, 6, 131, 1, 227, 202, 131, 1, 250, 189, 131, 1, 227, 107, - 131, 1, 250, 77, 131, 1, 227, 44, 131, 1, 250, 4, 131, 1, 226, 175, 131, - 1, 249, 161, 131, 1, 248, 107, 131, 1, 248, 81, 131, 1, 249, 170, 131, 1, - 226, 138, 131, 1, 226, 137, 131, 1, 226, 129, 131, 1, 226, 128, 131, 1, - 226, 127, 131, 1, 226, 126, 131, 1, 226, 44, 131, 1, 226, 40, 131, 1, - 226, 29, 131, 1, 226, 28, 131, 1, 226, 26, 131, 1, 226, 25, 131, 1, 224, - 173, 131, 1, 224, 141, 131, 1, 224, 118, 131, 1, 224, 105, 131, 1, 224, - 83, 131, 1, 224, 77, 131, 1, 191, 131, 1, 223, 228, 131, 1, 223, 202, - 131, 1, 223, 183, 131, 1, 223, 158, 131, 1, 223, 135, 16, 17, 72, 16, 17, - 255, 61, 16, 17, 74, 16, 17, 240, 47, 16, 17, 73, 16, 17, 234, 52, 16, - 17, 224, 24, 234, 52, 16, 17, 60, 248, 35, 16, 17, 60, 74, 16, 17, 57, - 16, 17, 255, 63, 16, 17, 224, 141, 16, 17, 127, 224, 141, 16, 17, 224, - 118, 16, 17, 127, 224, 118, 16, 17, 224, 113, 16, 17, 127, 224, 113, 16, - 17, 224, 105, 16, 17, 127, 224, 105, 16, 17, 224, 98, 16, 17, 127, 224, - 98, 16, 17, 235, 226, 224, 98, 16, 17, 224, 173, 16, 17, 127, 224, 173, - 16, 17, 224, 172, 16, 17, 127, 224, 172, 16, 17, 235, 226, 224, 172, 16, - 17, 254, 253, 16, 17, 224, 24, 224, 174, 16, 17, 246, 16, 228, 38, 16, - 17, 35, 155, 16, 17, 35, 245, 236, 16, 17, 35, 252, 126, 132, 231, 139, - 16, 17, 35, 226, 106, 132, 231, 139, 16, 17, 35, 41, 132, 231, 139, 16, - 17, 35, 231, 139, 16, 17, 35, 47, 155, 16, 17, 35, 47, 229, 63, 61, 228, - 10, 16, 17, 35, 236, 154, 249, 140, 16, 17, 35, 229, 63, 169, 82, 16, 17, - 35, 233, 10, 16, 17, 35, 103, 227, 96, 16, 17, 247, 239, 16, 17, 240, 16, - 16, 17, 234, 61, 16, 17, 254, 190, 16, 17, 233, 151, 16, 17, 233, 239, - 16, 17, 233, 69, 16, 17, 233, 41, 16, 17, 233, 4, 16, 17, 232, 244, 16, - 17, 224, 24, 232, 244, 16, 17, 60, 245, 109, 16, 17, 60, 245, 75, 16, 17, - 213, 16, 17, 233, 241, 16, 17, 232, 154, 16, 17, 127, 232, 154, 16, 17, - 232, 152, 16, 17, 127, 232, 152, 16, 17, 232, 151, 16, 17, 127, 232, 151, - 16, 17, 232, 149, 16, 17, 127, 232, 149, 16, 17, 232, 148, 16, 17, 127, - 232, 148, 16, 17, 232, 156, 16, 17, 127, 232, 156, 16, 17, 232, 155, 16, - 17, 127, 232, 155, 16, 17, 224, 24, 232, 155, 16, 17, 233, 244, 16, 17, - 127, 233, 244, 16, 17, 60, 212, 16, 17, 227, 44, 16, 17, 227, 103, 16, - 17, 226, 175, 16, 17, 226, 165, 16, 17, 96, 16, 17, 226, 108, 16, 17, - 224, 24, 226, 108, 16, 17, 60, 250, 67, 16, 17, 60, 250, 4, 16, 17, 227, - 107, 16, 17, 227, 104, 16, 17, 225, 220, 16, 17, 127, 225, 220, 16, 17, - 225, 205, 16, 17, 127, 225, 205, 16, 17, 225, 204, 16, 17, 127, 225, 204, - 16, 17, 113, 16, 17, 127, 113, 16, 17, 225, 201, 16, 17, 127, 225, 201, - 16, 17, 225, 222, 16, 17, 127, 225, 222, 16, 17, 225, 221, 16, 17, 127, - 225, 221, 16, 17, 235, 226, 225, 221, 16, 17, 227, 109, 16, 17, 226, 17, - 16, 17, 226, 6, 16, 17, 226, 5, 16, 17, 226, 20, 16, 17, 239, 3, 16, 17, - 239, 69, 16, 17, 238, 199, 16, 17, 238, 191, 16, 17, 238, 150, 16, 17, - 238, 139, 16, 17, 224, 24, 238, 139, 16, 17, 177, 16, 17, 239, 72, 16, - 17, 238, 76, 16, 17, 127, 238, 76, 16, 17, 238, 74, 16, 17, 127, 238, 74, - 16, 17, 238, 73, 16, 17, 127, 238, 73, 16, 17, 238, 72, 16, 17, 127, 238, - 72, 16, 17, 238, 71, 16, 17, 127, 238, 71, 16, 17, 238, 78, 16, 17, 127, - 238, 78, 16, 17, 238, 77, 16, 17, 127, 238, 77, 16, 17, 235, 226, 238, - 77, 16, 17, 239, 76, 16, 17, 238, 79, 16, 17, 228, 151, 238, 253, 16, 17, - 228, 151, 238, 192, 16, 17, 228, 151, 238, 147, 16, 17, 228, 151, 239, - 58, 16, 17, 251, 231, 16, 17, 252, 37, 16, 17, 251, 118, 16, 17, 251, - 110, 16, 17, 251, 68, 16, 17, 251, 17, 16, 17, 224, 24, 251, 17, 16, 17, - 252, 39, 16, 17, 252, 38, 16, 17, 250, 208, 16, 17, 127, 250, 208, 16, - 17, 250, 206, 16, 17, 127, 250, 206, 16, 17, 250, 205, 16, 17, 127, 250, - 205, 16, 17, 250, 204, 16, 17, 127, 250, 204, 16, 17, 250, 203, 16, 17, - 127, 250, 203, 16, 17, 250, 210, 16, 17, 127, 250, 210, 16, 17, 250, 209, - 16, 17, 127, 250, 209, 16, 17, 235, 226, 250, 209, 16, 17, 252, 44, 16, - 17, 230, 232, 226, 253, 16, 17, 236, 235, 16, 17, 237, 65, 16, 17, 236, - 157, 16, 17, 236, 137, 16, 17, 236, 103, 16, 17, 236, 86, 16, 17, 224, - 24, 236, 86, 16, 17, 198, 16, 17, 237, 66, 16, 17, 236, 17, 16, 17, 127, - 236, 17, 16, 17, 236, 15, 16, 17, 127, 236, 15, 16, 17, 236, 14, 16, 17, - 127, 236, 14, 16, 17, 236, 13, 16, 17, 127, 236, 13, 16, 17, 236, 12, 16, - 17, 127, 236, 12, 16, 17, 236, 19, 16, 17, 127, 236, 19, 16, 17, 236, 18, - 16, 17, 127, 236, 18, 16, 17, 235, 226, 236, 18, 16, 17, 185, 16, 17, - 127, 185, 16, 17, 236, 160, 16, 17, 254, 61, 185, 16, 17, 230, 232, 185, - 16, 17, 235, 162, 16, 17, 235, 253, 16, 17, 235, 89, 16, 17, 235, 68, 16, - 17, 235, 6, 16, 17, 234, 253, 16, 17, 224, 24, 234, 253, 16, 17, 236, 1, - 16, 17, 235, 254, 16, 17, 234, 175, 16, 17, 127, 234, 175, 16, 17, 234, - 177, 16, 17, 127, 234, 177, 16, 17, 234, 176, 16, 17, 127, 234, 176, 16, - 17, 235, 226, 234, 176, 16, 17, 199, 16, 17, 60, 235, 139, 16, 17, 235, - 94, 16, 17, 237, 243, 16, 17, 238, 41, 16, 17, 237, 193, 16, 17, 237, - 182, 16, 17, 237, 143, 16, 17, 237, 125, 16, 17, 224, 24, 237, 125, 16, - 17, 238, 43, 16, 17, 238, 42, 16, 17, 237, 86, 16, 17, 127, 237, 86, 16, - 17, 237, 85, 16, 17, 127, 237, 85, 16, 17, 237, 84, 16, 17, 127, 237, 84, - 16, 17, 237, 83, 16, 17, 127, 237, 83, 16, 17, 237, 82, 16, 17, 127, 237, - 82, 16, 17, 237, 88, 16, 17, 127, 237, 88, 16, 17, 237, 87, 16, 17, 127, - 237, 87, 16, 17, 149, 16, 17, 127, 149, 16, 17, 124, 149, 16, 17, 230, - 213, 16, 17, 231, 27, 16, 17, 229, 15, 16, 17, 229, 0, 16, 17, 228, 169, - 16, 17, 228, 159, 16, 17, 224, 24, 228, 159, 16, 17, 231, 31, 16, 17, - 231, 29, 16, 17, 227, 196, 16, 17, 127, 227, 196, 16, 17, 227, 193, 16, - 17, 127, 227, 193, 16, 17, 227, 192, 16, 17, 127, 227, 192, 16, 17, 227, - 191, 16, 17, 127, 227, 191, 16, 17, 227, 190, 16, 17, 127, 227, 190, 16, - 17, 227, 200, 16, 17, 127, 227, 200, 16, 17, 227, 199, 16, 17, 127, 227, - 199, 16, 17, 235, 226, 227, 199, 16, 17, 193, 16, 17, 254, 61, 193, 16, - 17, 227, 201, 16, 17, 252, 147, 193, 16, 17, 236, 83, 228, 203, 16, 17, - 235, 226, 228, 198, 16, 17, 235, 226, 231, 33, 16, 17, 235, 226, 228, - 121, 16, 17, 235, 226, 228, 8, 16, 17, 235, 226, 228, 197, 16, 17, 235, - 226, 230, 215, 16, 17, 229, 114, 16, 17, 229, 90, 16, 17, 229, 85, 16, - 17, 229, 71, 16, 17, 229, 66, 16, 17, 229, 146, 16, 17, 229, 142, 16, 17, - 229, 28, 16, 17, 127, 229, 28, 16, 17, 229, 27, 16, 17, 127, 229, 27, 16, - 17, 229, 26, 16, 17, 127, 229, 26, 16, 17, 229, 25, 16, 17, 127, 229, 25, - 16, 17, 229, 24, 16, 17, 127, 229, 24, 16, 17, 229, 30, 16, 17, 127, 229, - 30, 16, 17, 229, 29, 16, 17, 127, 229, 29, 16, 17, 229, 148, 16, 17, 223, - 228, 16, 17, 224, 19, 16, 17, 223, 202, 16, 17, 223, 194, 16, 17, 223, - 183, 16, 17, 223, 172, 16, 17, 224, 24, 223, 172, 16, 17, 191, 16, 17, - 224, 21, 16, 17, 223, 132, 16, 17, 127, 223, 132, 16, 17, 223, 131, 16, - 17, 127, 223, 131, 16, 17, 223, 130, 16, 17, 127, 223, 130, 16, 17, 223, - 129, 16, 17, 127, 223, 129, 16, 17, 223, 128, 16, 17, 127, 223, 128, 16, - 17, 223, 134, 16, 17, 127, 223, 134, 16, 17, 223, 133, 16, 17, 127, 223, - 133, 16, 17, 235, 226, 223, 133, 16, 17, 224, 25, 16, 17, 252, 179, 224, - 25, 16, 17, 127, 224, 25, 16, 17, 230, 232, 223, 202, 16, 17, 231, 244, - 16, 17, 232, 26, 231, 244, 16, 17, 127, 237, 243, 16, 17, 232, 21, 16, - 17, 231, 180, 16, 17, 231, 144, 16, 17, 231, 122, 16, 17, 231, 114, 16, - 17, 127, 237, 143, 16, 17, 208, 16, 17, 232, 22, 16, 17, 127, 238, 43, - 16, 17, 231, 45, 16, 17, 127, 231, 45, 16, 17, 146, 16, 17, 127, 146, 16, - 17, 124, 146, 16, 17, 247, 97, 16, 17, 247, 126, 16, 17, 247, 70, 16, 17, - 247, 57, 16, 17, 247, 7, 16, 17, 247, 3, 16, 17, 247, 129, 16, 17, 247, - 128, 16, 17, 246, 205, 16, 17, 127, 246, 205, 16, 17, 247, 130, 16, 17, - 226, 239, 16, 17, 236, 3, 226, 239, 16, 17, 226, 220, 16, 17, 236, 3, - 226, 220, 16, 17, 226, 216, 16, 17, 236, 3, 226, 216, 16, 17, 226, 201, - 16, 17, 226, 198, 16, 17, 226, 251, 16, 17, 226, 250, 16, 17, 226, 179, - 16, 17, 127, 226, 179, 16, 17, 226, 253, 16, 17, 226, 9, 16, 17, 226, 8, - 16, 17, 226, 7, 16, 17, 226, 10, 16, 17, 226, 11, 16, 17, 225, 199, 16, - 17, 225, 198, 16, 17, 225, 197, 16, 17, 225, 200, 16, 17, 234, 193, 245, - 121, 16, 17, 234, 193, 245, 75, 16, 17, 234, 193, 245, 61, 16, 17, 234, - 193, 244, 227, 16, 17, 234, 193, 244, 218, 16, 17, 234, 193, 154, 16, 17, - 234, 193, 245, 167, 16, 17, 234, 193, 212, 16, 17, 234, 192, 212, 16, 17, - 245, 55, 16, 17, 232, 134, 16, 17, 232, 104, 16, 17, 232, 99, 16, 17, - 232, 95, 16, 17, 232, 90, 16, 17, 232, 138, 16, 17, 232, 137, 16, 17, - 232, 139, 16, 17, 226, 134, 16, 17, 226, 132, 16, 17, 226, 131, 16, 17, - 226, 135, 16, 17, 127, 231, 244, 16, 17, 127, 231, 180, 16, 17, 127, 231, - 122, 16, 17, 127, 208, 16, 17, 235, 135, 16, 17, 235, 114, 16, 17, 235, - 110, 16, 17, 235, 107, 16, 17, 235, 103, 16, 17, 235, 137, 16, 17, 235, - 136, 16, 17, 235, 139, 16, 17, 235, 17, 16, 17, 230, 232, 229, 114, 16, - 17, 230, 232, 229, 90, 16, 17, 230, 232, 229, 71, 16, 17, 230, 232, 229, - 146, 16, 17, 224, 96, 226, 239, 16, 17, 224, 96, 226, 220, 16, 17, 224, - 96, 226, 201, 16, 17, 224, 96, 226, 251, 16, 17, 224, 96, 226, 253, 16, - 17, 237, 199, 16, 17, 237, 198, 16, 17, 237, 197, 16, 17, 237, 196, 16, - 17, 237, 205, 16, 17, 237, 204, 16, 17, 237, 206, 16, 17, 226, 252, 226, - 239, 16, 17, 226, 252, 226, 220, 16, 17, 226, 252, 226, 216, 16, 17, 226, - 252, 226, 201, 16, 17, 226, 252, 226, 198, 16, 17, 226, 252, 226, 251, - 16, 17, 226, 252, 226, 250, 16, 17, 226, 252, 226, 253, 16, 17, 254, 243, - 254, 27, 16, 17, 252, 147, 72, 16, 17, 252, 147, 74, 16, 17, 252, 147, - 73, 16, 17, 252, 147, 57, 16, 17, 252, 147, 224, 141, 16, 17, 252, 147, - 224, 118, 16, 17, 252, 147, 224, 105, 16, 17, 252, 147, 224, 173, 16, 17, - 252, 147, 235, 162, 16, 17, 252, 147, 235, 89, 16, 17, 252, 147, 235, 6, - 16, 17, 252, 147, 236, 1, 16, 17, 252, 147, 239, 3, 16, 17, 252, 147, - 238, 199, 16, 17, 252, 147, 238, 150, 16, 17, 252, 147, 177, 16, 17, 230, - 232, 245, 121, 16, 17, 230, 232, 245, 75, 16, 17, 230, 232, 244, 227, 16, - 17, 230, 232, 154, 16, 17, 60, 246, 52, 16, 17, 60, 246, 54, 16, 17, 60, - 246, 58, 16, 17, 60, 246, 57, 16, 17, 60, 246, 55, 16, 17, 60, 246, 66, - 16, 17, 60, 231, 70, 16, 17, 60, 231, 122, 16, 17, 60, 231, 244, 16, 17, - 60, 231, 229, 16, 17, 60, 231, 180, 16, 17, 60, 208, 16, 17, 60, 224, 83, - 16, 17, 60, 224, 105, 16, 17, 60, 224, 141, 16, 17, 60, 224, 138, 16, 17, - 60, 224, 118, 16, 17, 60, 224, 173, 16, 17, 60, 244, 121, 16, 17, 60, - 244, 122, 16, 17, 60, 244, 125, 16, 17, 60, 244, 124, 16, 17, 60, 244, - 123, 16, 17, 60, 244, 127, 16, 17, 60, 226, 186, 16, 17, 60, 226, 201, - 16, 17, 60, 226, 239, 16, 17, 60, 226, 238, 16, 17, 60, 226, 220, 16, 17, - 60, 226, 251, 16, 17, 60, 225, 253, 16, 17, 60, 226, 5, 16, 17, 60, 226, - 17, 16, 17, 60, 226, 16, 16, 17, 60, 226, 6, 16, 17, 60, 226, 20, 16, 17, - 60, 232, 173, 16, 17, 60, 233, 4, 16, 17, 60, 233, 151, 16, 17, 60, 233, - 144, 16, 17, 60, 233, 69, 16, 17, 60, 213, 16, 17, 60, 233, 244, 16, 17, - 60, 245, 218, 16, 17, 60, 246, 11, 16, 17, 60, 246, 131, 16, 17, 60, 246, - 125, 16, 17, 60, 246, 46, 16, 17, 60, 246, 193, 16, 17, 60, 238, 204, 16, - 17, 60, 238, 208, 16, 17, 60, 238, 217, 16, 17, 60, 238, 216, 16, 17, 60, - 238, 212, 16, 17, 60, 238, 227, 16, 17, 60, 238, 162, 16, 17, 60, 238, - 163, 16, 17, 60, 238, 166, 16, 17, 60, 238, 165, 16, 17, 60, 238, 164, - 16, 17, 60, 238, 167, 16, 17, 60, 238, 168, 16, 17, 60, 234, 206, 16, 17, - 60, 235, 6, 16, 17, 60, 235, 162, 16, 17, 60, 235, 160, 16, 17, 60, 235, - 89, 16, 17, 60, 236, 1, 16, 17, 60, 236, 66, 16, 17, 60, 236, 103, 16, - 17, 60, 236, 235, 16, 17, 60, 236, 226, 16, 17, 60, 236, 157, 16, 17, 60, - 198, 16, 17, 60, 223, 158, 16, 17, 60, 223, 183, 16, 17, 60, 223, 228, - 16, 17, 60, 223, 225, 16, 17, 60, 223, 202, 16, 17, 60, 191, 16, 17, 60, - 239, 101, 16, 17, 230, 232, 239, 101, 16, 17, 60, 239, 117, 16, 17, 60, - 239, 170, 16, 17, 60, 239, 169, 16, 17, 60, 239, 156, 16, 17, 230, 232, - 239, 156, 16, 17, 60, 239, 179, 16, 17, 60, 239, 130, 16, 17, 60, 239, - 134, 16, 17, 60, 239, 144, 16, 17, 60, 239, 143, 16, 17, 60, 239, 142, - 16, 17, 60, 239, 145, 16, 17, 60, 237, 110, 16, 17, 60, 237, 143, 16, 17, - 60, 237, 243, 16, 17, 60, 237, 239, 16, 17, 60, 237, 193, 16, 17, 60, - 238, 43, 16, 17, 60, 249, 165, 16, 17, 60, 249, 166, 16, 17, 60, 249, - 169, 16, 17, 60, 249, 168, 16, 17, 60, 249, 167, 16, 17, 60, 249, 170, - 16, 17, 60, 237, 195, 16, 17, 60, 237, 197, 16, 17, 60, 237, 201, 16, 17, - 60, 237, 200, 16, 17, 60, 237, 199, 16, 17, 60, 237, 205, 16, 17, 60, - 226, 130, 16, 17, 60, 226, 131, 16, 17, 60, 226, 134, 16, 17, 60, 226, - 133, 16, 17, 60, 226, 132, 16, 17, 60, 226, 135, 16, 17, 60, 226, 127, - 16, 17, 60, 226, 128, 16, 17, 60, 226, 137, 16, 17, 60, 226, 136, 16, 17, - 60, 226, 129, 16, 17, 60, 226, 138, 16, 17, 60, 223, 19, 16, 17, 60, 223, - 27, 16, 17, 60, 223, 97, 16, 17, 60, 223, 95, 16, 17, 60, 223, 47, 16, - 17, 60, 223, 117, 16, 17, 60, 223, 119, 16, 17, 60, 59, 223, 119, 16, 17, - 60, 248, 61, 16, 17, 60, 248, 62, 16, 17, 60, 248, 69, 16, 17, 60, 248, - 68, 16, 17, 60, 248, 64, 16, 17, 60, 248, 70, 16, 17, 60, 228, 6, 16, 17, - 60, 228, 169, 16, 17, 60, 230, 213, 16, 17, 60, 230, 203, 16, 17, 60, - 229, 15, 16, 17, 60, 231, 31, 16, 17, 60, 229, 43, 16, 17, 60, 229, 71, - 16, 17, 60, 229, 114, 16, 17, 60, 229, 112, 16, 17, 60, 229, 90, 16, 17, - 60, 229, 146, 16, 17, 60, 229, 148, 16, 17, 60, 226, 26, 16, 17, 60, 226, - 28, 16, 17, 60, 226, 40, 16, 17, 60, 226, 39, 16, 17, 60, 226, 29, 16, - 17, 60, 226, 44, 16, 17, 60, 251, 136, 16, 17, 60, 251, 150, 16, 17, 60, - 251, 182, 16, 17, 60, 251, 179, 16, 17, 60, 251, 169, 16, 17, 60, 251, - 204, 16, 17, 60, 225, 255, 16, 17, 60, 226, 0, 16, 17, 60, 226, 3, 16, - 17, 60, 226, 2, 16, 17, 60, 226, 1, 16, 17, 60, 226, 4, 16, 17, 251, 170, - 53, 16, 17, 246, 218, 228, 38, 16, 17, 232, 130, 16, 17, 235, 134, 16, - 17, 235, 14, 16, 17, 235, 13, 16, 17, 235, 12, 16, 17, 235, 11, 16, 17, - 235, 16, 16, 17, 235, 15, 234, 86, 228, 146, 76, 234, 86, 1, 252, 218, - 234, 86, 1, 237, 103, 234, 86, 1, 247, 96, 234, 86, 1, 231, 15, 234, 86, - 1, 235, 56, 234, 86, 1, 225, 169, 234, 86, 1, 250, 167, 234, 86, 1, 226, - 153, 234, 86, 1, 251, 63, 234, 86, 1, 251, 223, 234, 86, 1, 236, 58, 234, - 86, 1, 245, 253, 234, 86, 1, 235, 127, 234, 86, 1, 228, 33, 234, 86, 1, - 231, 67, 234, 86, 1, 254, 250, 234, 86, 1, 234, 56, 234, 86, 1, 225, 103, - 234, 86, 1, 248, 54, 234, 86, 1, 239, 218, 234, 86, 1, 248, 55, 234, 86, - 1, 234, 31, 234, 86, 1, 225, 154, 234, 86, 1, 240, 53, 234, 86, 1, 248, - 52, 234, 86, 1, 233, 137, 234, 86, 247, 95, 76, 234, 86, 200, 247, 95, - 76, 140, 1, 247, 86, 247, 78, 247, 98, 247, 130, 140, 1, 196, 140, 1, - 225, 89, 225, 104, 66, 140, 1, 223, 160, 140, 1, 224, 25, 140, 1, 224, - 174, 140, 1, 226, 182, 226, 181, 226, 196, 140, 1, 247, 168, 140, 1, 254, - 169, 57, 140, 1, 234, 21, 73, 140, 1, 255, 44, 57, 140, 1, 255, 15, 140, - 1, 237, 130, 73, 140, 1, 229, 56, 73, 140, 1, 73, 140, 1, 234, 88, 140, - 1, 234, 61, 140, 1, 232, 11, 232, 19, 231, 224, 146, 140, 1, 239, 13, - 140, 1, 251, 221, 140, 1, 239, 14, 239, 76, 140, 1, 214, 140, 1, 247, - 228, 140, 1, 246, 128, 245, 177, 214, 140, 1, 246, 160, 140, 1, 224, 81, - 224, 76, 224, 174, 140, 1, 245, 160, 212, 140, 1, 245, 164, 212, 140, 1, - 237, 132, 212, 140, 1, 229, 59, 212, 140, 1, 235, 222, 234, 170, 235, - 223, 199, 140, 1, 229, 57, 199, 140, 1, 248, 135, 140, 1, 239, 202, 239, - 206, 239, 197, 74, 140, 1, 72, 140, 1, 239, 162, 239, 182, 140, 1, 246, - 114, 140, 1, 237, 133, 255, 19, 140, 1, 229, 61, 57, 140, 1, 239, 190, - 247, 213, 140, 1, 233, 110, 233, 127, 233, 244, 140, 1, 254, 221, 247, - 212, 140, 1, 228, 149, 193, 140, 1, 229, 4, 237, 129, 193, 140, 1, 229, - 55, 193, 140, 1, 252, 44, 140, 1, 223, 119, 140, 1, 226, 142, 226, 147, - 225, 188, 227, 109, 140, 1, 229, 54, 227, 109, 140, 1, 222, 222, 140, 1, - 252, 203, 252, 206, 252, 153, 254, 27, 140, 1, 229, 60, 254, 27, 140, 1, - 248, 134, 140, 1, 234, 40, 140, 1, 248, 23, 248, 25, 72, 140, 1, 237, 30, - 237, 36, 185, 140, 1, 237, 131, 185, 140, 1, 229, 58, 185, 140, 1, 237, - 255, 238, 28, 237, 136, 149, 140, 1, 248, 136, 140, 1, 239, 255, 140, 1, - 240, 0, 140, 1, 250, 178, 250, 183, 222, 222, 140, 1, 234, 17, 247, 167, - 73, 140, 1, 248, 51, 140, 1, 239, 217, 140, 1, 250, 207, 140, 1, 252, 32, - 140, 1, 251, 230, 140, 1, 228, 63, 140, 1, 237, 128, 140, 1, 229, 53, - 140, 1, 244, 68, 140, 1, 232, 139, 140, 1, 224, 73, 140, 228, 241, 232, - 170, 140, 236, 53, 232, 170, 140, 250, 244, 232, 170, 140, 254, 106, 98, - 140, 225, 224, 98, 140, 252, 217, 98, 227, 94, 1, 57, 227, 94, 1, 74, - 227, 94, 1, 66, 227, 94, 1, 177, 227, 94, 1, 246, 193, 227, 94, 1, 235, - 137, 227, 94, 1, 227, 107, 227, 94, 1, 250, 189, 227, 94, 1, 236, 1, 227, - 94, 1, 213, 227, 94, 1, 253, 70, 227, 94, 1, 198, 227, 94, 1, 191, 227, - 94, 1, 238, 43, 227, 94, 1, 224, 173, 227, 94, 1, 231, 31, 227, 94, 1, - 154, 227, 94, 31, 5, 74, 227, 94, 31, 5, 66, 227, 94, 5, 224, 216, 245, - 143, 1, 57, 245, 143, 1, 74, 245, 143, 1, 66, 245, 143, 1, 177, 245, 143, - 1, 246, 193, 245, 143, 1, 235, 137, 245, 143, 1, 227, 107, 245, 143, 1, - 250, 189, 245, 143, 1, 236, 1, 245, 143, 1, 213, 245, 143, 1, 253, 70, - 245, 143, 1, 198, 245, 143, 1, 191, 245, 143, 1, 208, 245, 143, 1, 238, - 43, 245, 143, 1, 224, 173, 245, 143, 1, 231, 31, 245, 143, 1, 154, 245, - 143, 31, 5, 74, 245, 143, 31, 5, 66, 245, 143, 5, 233, 214, 233, 83, 228, - 241, 232, 170, 233, 83, 47, 232, 170, 252, 87, 1, 57, 252, 87, 1, 74, - 252, 87, 1, 66, 252, 87, 1, 177, 252, 87, 1, 246, 193, 252, 87, 1, 235, - 137, 252, 87, 1, 227, 107, 252, 87, 1, 250, 189, 252, 87, 1, 236, 1, 252, - 87, 1, 213, 252, 87, 1, 253, 70, 252, 87, 1, 198, 252, 87, 1, 191, 252, - 87, 1, 208, 252, 87, 1, 238, 43, 252, 87, 1, 224, 173, 252, 87, 1, 231, - 31, 252, 87, 1, 154, 252, 87, 31, 5, 74, 252, 87, 31, 5, 66, 227, 93, 1, - 57, 227, 93, 1, 74, 227, 93, 1, 66, 227, 93, 1, 177, 227, 93, 1, 246, - 193, 227, 93, 1, 235, 137, 227, 93, 1, 227, 107, 227, 93, 1, 250, 189, - 227, 93, 1, 236, 1, 227, 93, 1, 213, 227, 93, 1, 253, 70, 227, 93, 1, - 198, 227, 93, 1, 191, 227, 93, 1, 238, 43, 227, 93, 1, 224, 173, 227, 93, - 1, 231, 31, 227, 93, 31, 5, 74, 227, 93, 31, 5, 66, 71, 1, 177, 71, 1, - 238, 227, 71, 1, 238, 150, 71, 1, 238, 208, 71, 1, 235, 107, 71, 1, 252, - 39, 71, 1, 251, 204, 71, 1, 251, 68, 71, 1, 251, 150, 71, 1, 234, 152, - 71, 1, 250, 189, 71, 1, 226, 10, 71, 1, 249, 161, 71, 1, 226, 7, 71, 1, - 235, 9, 71, 1, 227, 107, 71, 1, 226, 251, 71, 1, 96, 71, 1, 226, 201, 71, - 1, 235, 6, 71, 1, 253, 70, 71, 1, 233, 97, 71, 1, 233, 4, 71, 1, 233, 79, - 71, 1, 236, 103, 71, 1, 223, 183, 71, 1, 231, 122, 71, 1, 237, 143, 71, - 1, 224, 206, 71, 1, 229, 146, 71, 1, 228, 84, 71, 1, 231, 31, 71, 1, 154, - 71, 1, 238, 43, 71, 1, 232, 138, 71, 240, 9, 31, 232, 124, 71, 240, 9, - 31, 232, 137, 71, 240, 9, 31, 232, 104, 71, 240, 9, 31, 232, 99, 71, 240, - 9, 31, 232, 84, 71, 240, 9, 31, 232, 61, 71, 240, 9, 31, 232, 49, 71, - 240, 9, 31, 232, 48, 71, 240, 9, 31, 231, 43, 71, 240, 9, 31, 231, 36, - 71, 240, 9, 31, 237, 80, 71, 240, 9, 31, 237, 71, 71, 240, 9, 31, 232, - 119, 71, 240, 9, 31, 232, 130, 71, 240, 9, 31, 232, 91, 225, 196, 118, - 71, 240, 9, 31, 232, 91, 225, 196, 113, 71, 240, 9, 31, 232, 120, 71, 31, - 239, 254, 254, 135, 71, 31, 239, 254, 255, 63, 71, 31, 5, 255, 63, 71, - 31, 5, 74, 71, 31, 5, 240, 47, 71, 31, 5, 224, 25, 71, 31, 5, 223, 127, - 71, 31, 5, 66, 71, 31, 5, 225, 76, 71, 31, 5, 225, 170, 71, 31, 5, 234, - 88, 71, 31, 5, 191, 71, 31, 5, 240, 72, 71, 31, 5, 72, 71, 31, 5, 255, - 19, 71, 31, 5, 254, 253, 71, 31, 5, 234, 52, 71, 31, 5, 254, 53, 71, 5, - 235, 67, 71, 5, 231, 242, 71, 5, 223, 137, 71, 5, 236, 25, 71, 5, 226, - 68, 71, 5, 253, 38, 71, 5, 231, 118, 71, 5, 226, 123, 71, 5, 239, 52, 71, - 5, 254, 255, 71, 5, 230, 254, 230, 250, 71, 5, 224, 213, 71, 5, 251, 65, - 71, 5, 253, 20, 71, 5, 238, 222, 71, 5, 253, 34, 71, 5, 252, 28, 233, 42, - 238, 83, 71, 5, 237, 223, 226, 108, 71, 5, 252, 192, 71, 5, 233, 81, 236, - 64, 71, 5, 238, 138, 71, 250, 222, 14, 231, 176, 71, 5, 254, 39, 71, 5, - 254, 56, 71, 21, 223, 89, 71, 21, 118, 71, 21, 113, 71, 21, 166, 71, 21, - 158, 71, 21, 173, 71, 21, 183, 71, 21, 194, 71, 21, 187, 71, 21, 192, 71, - 14, 237, 223, 254, 58, 228, 160, 71, 14, 237, 223, 254, 58, 236, 40, 71, - 14, 237, 223, 254, 58, 233, 41, 71, 14, 237, 223, 254, 58, 252, 219, 71, - 14, 237, 223, 254, 58, 252, 75, 71, 14, 237, 223, 254, 58, 232, 226, 71, - 14, 237, 223, 254, 58, 232, 220, 71, 14, 237, 223, 254, 58, 232, 218, 71, - 14, 237, 223, 254, 58, 232, 224, 71, 14, 237, 223, 254, 58, 232, 222, 68, - 252, 163, 68, 247, 249, 68, 251, 54, 68, 246, 218, 228, 38, 68, 251, 61, - 68, 246, 243, 249, 138, 68, 226, 122, 228, 165, 244, 95, 68, 229, 14, 4, - 252, 123, 237, 13, 68, 237, 33, 251, 54, 68, 237, 33, 246, 218, 228, 38, - 68, 235, 54, 68, 246, 230, 38, 230, 193, 118, 68, 246, 230, 38, 230, 193, - 113, 68, 246, 230, 38, 230, 193, 166, 68, 31, 229, 173, 68, 21, 223, 89, - 68, 21, 118, 68, 21, 113, 68, 21, 166, 68, 21, 158, 68, 21, 173, 68, 21, - 183, 68, 21, 194, 68, 21, 187, 68, 21, 192, 68, 1, 57, 68, 1, 72, 68, 1, - 74, 68, 1, 73, 68, 1, 66, 68, 1, 234, 88, 68, 1, 225, 159, 68, 1, 248, - 35, 68, 1, 236, 1, 68, 1, 254, 184, 68, 1, 253, 70, 68, 1, 213, 68, 1, - 232, 138, 68, 1, 246, 193, 68, 1, 198, 68, 1, 238, 43, 68, 1, 231, 31, - 68, 1, 229, 146, 68, 1, 227, 107, 68, 1, 250, 189, 68, 1, 251, 204, 68, - 1, 239, 179, 68, 1, 191, 68, 1, 208, 68, 1, 224, 173, 68, 1, 247, 129, - 68, 1, 177, 68, 1, 238, 227, 68, 1, 226, 44, 68, 1, 223, 117, 68, 1, 245, - 167, 68, 1, 223, 20, 68, 1, 237, 205, 68, 1, 223, 72, 68, 1, 251, 169, - 68, 1, 226, 122, 182, 31, 53, 68, 1, 226, 122, 72, 68, 1, 226, 122, 74, - 68, 1, 226, 122, 73, 68, 1, 226, 122, 66, 68, 1, 226, 122, 234, 88, 68, - 1, 226, 122, 225, 159, 68, 1, 226, 122, 254, 184, 68, 1, 226, 122, 253, - 70, 68, 1, 226, 122, 213, 68, 1, 226, 122, 232, 138, 68, 1, 226, 122, - 246, 193, 68, 1, 226, 122, 198, 68, 1, 226, 122, 227, 107, 68, 1, 226, - 122, 250, 189, 68, 1, 226, 122, 251, 204, 68, 1, 226, 122, 239, 179, 68, - 1, 226, 122, 226, 44, 68, 1, 226, 122, 191, 68, 1, 226, 122, 224, 173, - 68, 1, 226, 122, 177, 68, 1, 226, 122, 246, 190, 68, 1, 226, 122, 245, - 167, 68, 1, 226, 122, 239, 155, 68, 1, 226, 122, 235, 87, 68, 1, 226, - 122, 248, 70, 68, 1, 229, 14, 72, 68, 1, 229, 14, 74, 68, 1, 229, 14, - 239, 188, 68, 1, 229, 14, 225, 159, 68, 1, 229, 14, 66, 68, 1, 229, 14, - 254, 184, 68, 1, 229, 14, 177, 68, 1, 229, 14, 246, 193, 68, 1, 229, 14, - 154, 68, 1, 229, 14, 213, 68, 1, 229, 14, 229, 146, 68, 1, 229, 14, 227, - 107, 68, 1, 229, 14, 250, 189, 68, 1, 229, 14, 239, 179, 68, 1, 229, 14, - 247, 129, 68, 1, 229, 14, 246, 190, 68, 1, 229, 14, 245, 167, 68, 1, 229, - 14, 226, 44, 68, 1, 229, 14, 223, 117, 68, 1, 229, 14, 232, 22, 68, 1, - 229, 14, 251, 204, 68, 1, 229, 14, 223, 85, 68, 1, 237, 33, 74, 68, 1, - 237, 33, 177, 68, 1, 237, 33, 208, 68, 1, 237, 33, 247, 129, 68, 1, 237, - 33, 223, 85, 68, 1, 254, 220, 246, 175, 254, 161, 118, 68, 1, 254, 220, - 246, 175, 224, 212, 118, 68, 1, 254, 220, 246, 175, 250, 158, 68, 1, 254, - 220, 246, 175, 225, 167, 68, 1, 254, 220, 246, 175, 239, 223, 225, 167, - 68, 1, 254, 220, 246, 175, 253, 47, 68, 1, 254, 220, 246, 175, 152, 253, - 47, 68, 1, 254, 220, 246, 175, 57, 68, 1, 254, 220, 246, 175, 74, 68, 1, - 254, 220, 246, 175, 177, 68, 1, 254, 220, 246, 175, 235, 137, 68, 1, 254, - 220, 246, 175, 252, 39, 68, 1, 254, 220, 246, 175, 226, 20, 68, 1, 254, - 220, 246, 175, 226, 10, 68, 1, 254, 220, 246, 175, 250, 117, 68, 1, 254, - 220, 246, 175, 235, 18, 68, 1, 254, 220, 246, 175, 227, 107, 68, 1, 254, - 220, 246, 175, 250, 189, 68, 1, 254, 220, 246, 175, 213, 68, 1, 254, 220, - 246, 175, 233, 97, 68, 1, 254, 220, 246, 175, 228, 110, 68, 1, 254, 220, - 246, 175, 223, 85, 68, 1, 254, 220, 246, 175, 223, 117, 68, 1, 254, 220, - 246, 175, 255, 3, 68, 1, 226, 122, 254, 220, 246, 175, 227, 107, 68, 1, - 226, 122, 254, 220, 246, 175, 223, 85, 68, 1, 237, 33, 254, 220, 246, - 175, 246, 66, 68, 1, 237, 33, 254, 220, 246, 175, 235, 137, 68, 1, 237, - 33, 254, 220, 246, 175, 252, 39, 68, 1, 237, 33, 254, 220, 246, 175, 239, - 160, 68, 1, 237, 33, 254, 220, 246, 175, 226, 20, 68, 1, 237, 33, 254, - 220, 246, 175, 250, 101, 68, 1, 237, 33, 254, 220, 246, 175, 227, 107, - 68, 1, 237, 33, 254, 220, 246, 175, 250, 22, 68, 1, 237, 33, 254, 220, - 246, 175, 228, 110, 68, 1, 237, 33, 254, 220, 246, 175, 250, 201, 68, 1, - 237, 33, 254, 220, 246, 175, 223, 85, 68, 1, 237, 33, 254, 220, 246, 175, - 223, 117, 68, 1, 254, 220, 246, 175, 132, 66, 68, 1, 254, 220, 246, 175, - 132, 191, 68, 1, 237, 33, 254, 220, 246, 175, 252, 190, 68, 1, 254, 220, - 246, 175, 250, 179, 68, 1, 237, 33, 254, 220, 246, 175, 237, 205, 174, - 224, 193, 237, 210, 174, 1, 177, 174, 1, 238, 227, 174, 1, 246, 193, 174, - 1, 246, 66, 174, 1, 235, 137, 174, 1, 252, 39, 174, 1, 251, 204, 174, 1, - 239, 179, 174, 1, 239, 160, 174, 1, 223, 250, 174, 1, 227, 107, 174, 1, - 226, 251, 174, 1, 250, 189, 174, 1, 250, 22, 174, 1, 236, 1, 174, 1, 213, - 174, 1, 233, 97, 174, 1, 253, 70, 174, 1, 252, 190, 174, 1, 198, 174, 1, - 191, 174, 1, 208, 174, 1, 238, 43, 174, 1, 224, 173, 174, 1, 229, 146, - 174, 1, 228, 110, 174, 1, 231, 31, 174, 1, 154, 174, 31, 5, 57, 174, 31, - 5, 74, 174, 31, 5, 66, 174, 31, 5, 248, 35, 174, 31, 5, 254, 253, 174, - 31, 5, 234, 52, 174, 31, 5, 254, 53, 174, 31, 5, 72, 174, 31, 5, 73, 174, - 228, 0, 1, 191, 174, 228, 0, 1, 208, 174, 228, 0, 1, 224, 173, 174, 3, 1, - 177, 174, 3, 1, 235, 137, 174, 3, 1, 254, 160, 174, 3, 1, 227, 107, 174, - 3, 1, 236, 1, 174, 3, 1, 213, 174, 3, 1, 198, 174, 3, 1, 208, 174, 3, 1, - 238, 43, 174, 5, 236, 57, 174, 5, 238, 248, 174, 5, 231, 30, 174, 5, 237, - 125, 174, 247, 149, 76, 174, 232, 69, 76, 174, 21, 223, 89, 174, 21, 118, - 174, 21, 113, 174, 21, 166, 174, 21, 158, 174, 21, 173, 174, 21, 183, - 174, 21, 194, 174, 21, 187, 174, 21, 192, 91, 237, 244, 1, 177, 91, 237, - 244, 1, 224, 72, 91, 237, 244, 1, 235, 137, 91, 237, 244, 1, 226, 44, 91, - 237, 244, 1, 231, 31, 91, 237, 244, 1, 191, 91, 237, 244, 1, 227, 107, - 91, 237, 244, 1, 226, 251, 91, 237, 244, 1, 238, 43, 91, 237, 244, 1, - 213, 91, 237, 244, 1, 233, 97, 91, 237, 244, 1, 198, 91, 237, 244, 1, - 247, 129, 91, 237, 244, 1, 225, 64, 91, 237, 244, 1, 154, 91, 237, 244, - 1, 232, 138, 91, 237, 244, 1, 238, 227, 91, 237, 244, 1, 226, 37, 91, - 237, 244, 1, 236, 1, 91, 237, 244, 1, 57, 91, 237, 244, 1, 74, 91, 237, - 244, 1, 248, 35, 91, 237, 244, 1, 248, 24, 91, 237, 244, 1, 66, 91, 237, - 244, 1, 234, 52, 91, 237, 244, 1, 73, 91, 237, 244, 1, 225, 159, 91, 237, - 244, 1, 72, 91, 237, 244, 1, 254, 52, 91, 237, 244, 1, 254, 253, 91, 237, - 244, 1, 226, 116, 91, 237, 244, 1, 226, 115, 91, 237, 244, 1, 226, 114, - 91, 237, 244, 1, 226, 113, 91, 237, 244, 1, 226, 112, 139, 91, 144, 1, - 201, 232, 138, 139, 91, 144, 1, 184, 232, 138, 139, 91, 144, 1, 201, 177, - 139, 91, 144, 1, 201, 224, 72, 139, 91, 144, 1, 201, 235, 137, 139, 91, - 144, 1, 184, 177, 139, 91, 144, 1, 184, 224, 72, 139, 91, 144, 1, 184, - 235, 137, 139, 91, 144, 1, 201, 226, 44, 139, 91, 144, 1, 201, 231, 31, - 139, 91, 144, 1, 201, 191, 139, 91, 144, 1, 184, 226, 44, 139, 91, 144, - 1, 184, 231, 31, 139, 91, 144, 1, 184, 191, 139, 91, 144, 1, 201, 227, - 107, 139, 91, 144, 1, 201, 226, 251, 139, 91, 144, 1, 201, 236, 1, 139, - 91, 144, 1, 184, 227, 107, 139, 91, 144, 1, 184, 226, 251, 139, 91, 144, - 1, 184, 236, 1, 139, 91, 144, 1, 201, 213, 139, 91, 144, 1, 201, 233, 97, - 139, 91, 144, 1, 201, 198, 139, 91, 144, 1, 184, 213, 139, 91, 144, 1, - 184, 233, 97, 139, 91, 144, 1, 184, 198, 139, 91, 144, 1, 201, 247, 129, - 139, 91, 144, 1, 201, 225, 64, 139, 91, 144, 1, 201, 238, 43, 139, 91, - 144, 1, 184, 247, 129, 139, 91, 144, 1, 184, 225, 64, 139, 91, 144, 1, - 184, 238, 43, 139, 91, 144, 1, 201, 154, 139, 91, 144, 1, 201, 250, 189, - 139, 91, 144, 1, 201, 253, 70, 139, 91, 144, 1, 184, 154, 139, 91, 144, - 1, 184, 250, 189, 139, 91, 144, 1, 184, 253, 70, 139, 91, 144, 1, 201, - 238, 80, 139, 91, 144, 1, 201, 224, 45, 139, 91, 144, 1, 184, 238, 80, - 139, 91, 144, 1, 184, 224, 45, 139, 91, 144, 31, 5, 31, 229, 52, 139, 91, - 144, 31, 5, 255, 63, 139, 91, 144, 31, 5, 240, 47, 139, 91, 144, 31, 5, - 66, 139, 91, 144, 31, 5, 225, 76, 139, 91, 144, 31, 5, 72, 139, 91, 144, - 31, 5, 255, 19, 139, 91, 144, 31, 5, 73, 139, 91, 144, 31, 5, 234, 105, - 139, 91, 144, 31, 5, 225, 159, 139, 91, 144, 31, 5, 254, 34, 139, 91, - 144, 31, 5, 255, 55, 139, 91, 144, 31, 5, 225, 70, 139, 91, 144, 31, 5, - 233, 248, 139, 91, 144, 31, 5, 234, 102, 139, 91, 144, 31, 5, 225, 157, - 139, 91, 144, 31, 5, 239, 188, 139, 91, 144, 1, 35, 196, 139, 91, 144, 1, - 35, 235, 139, 139, 91, 144, 1, 35, 199, 139, 91, 144, 1, 35, 185, 139, - 91, 144, 1, 35, 239, 76, 139, 91, 144, 1, 35, 222, 222, 139, 91, 144, 1, - 35, 254, 27, 139, 91, 144, 206, 237, 17, 139, 91, 144, 206, 237, 16, 139, - 91, 144, 21, 223, 89, 139, 91, 144, 21, 118, 139, 91, 144, 21, 113, 139, - 91, 144, 21, 166, 139, 91, 144, 21, 158, 139, 91, 144, 21, 173, 139, 91, - 144, 21, 183, 139, 91, 144, 21, 194, 139, 91, 144, 21, 187, 139, 91, 144, - 21, 192, 139, 91, 144, 5, 238, 33, 139, 91, 144, 5, 238, 32, 71, 14, 233, - 163, 71, 14, 236, 41, 238, 148, 71, 14, 233, 42, 238, 148, 71, 14, 252, - 220, 238, 148, 71, 14, 252, 76, 238, 148, 71, 14, 232, 227, 238, 148, 71, - 14, 232, 221, 238, 148, 71, 14, 232, 219, 238, 148, 71, 14, 232, 225, - 238, 148, 71, 14, 232, 223, 238, 148, 71, 14, 250, 147, 238, 148, 71, 14, - 250, 143, 238, 148, 71, 14, 250, 142, 238, 148, 71, 14, 250, 145, 238, - 148, 71, 14, 250, 144, 238, 148, 71, 14, 250, 141, 238, 148, 71, 14, 225, - 227, 71, 14, 236, 41, 231, 117, 71, 14, 233, 42, 231, 117, 71, 14, 252, - 220, 231, 117, 71, 14, 252, 76, 231, 117, 71, 14, 232, 227, 231, 117, 71, - 14, 232, 221, 231, 117, 71, 14, 232, 219, 231, 117, 71, 14, 232, 225, - 231, 117, 71, 14, 232, 223, 231, 117, 71, 14, 250, 147, 231, 117, 71, 14, - 250, 143, 231, 117, 71, 14, 250, 142, 231, 117, 71, 14, 250, 145, 231, - 117, 71, 14, 250, 144, 231, 117, 71, 14, 250, 141, 231, 117, 252, 88, 1, - 177, 252, 88, 1, 246, 193, 252, 88, 1, 235, 137, 252, 88, 1, 235, 109, - 252, 88, 1, 213, 252, 88, 1, 253, 70, 252, 88, 1, 198, 252, 88, 1, 236, - 69, 252, 88, 1, 227, 107, 252, 88, 1, 250, 189, 252, 88, 1, 236, 1, 252, - 88, 1, 234, 230, 252, 88, 1, 252, 39, 252, 88, 1, 239, 179, 252, 88, 1, - 234, 173, 252, 88, 1, 234, 171, 252, 88, 1, 191, 252, 88, 1, 208, 252, - 88, 1, 238, 43, 252, 88, 1, 225, 64, 252, 88, 1, 231, 31, 252, 88, 1, 57, - 252, 88, 1, 154, 252, 88, 31, 5, 74, 252, 88, 31, 5, 66, 252, 88, 31, 5, - 72, 252, 88, 31, 5, 73, 252, 88, 31, 5, 255, 19, 252, 88, 233, 224, 252, - 88, 247, 233, 106, 230, 205, 85, 5, 225, 148, 231, 177, 85, 5, 225, 148, - 252, 20, 85, 5, 251, 229, 85, 5, 227, 211, 85, 5, 252, 161, 85, 1, 254, - 238, 85, 1, 254, 239, 227, 39, 85, 1, 240, 43, 85, 1, 240, 44, 227, 39, - 85, 1, 225, 151, 85, 1, 225, 152, 227, 39, 85, 1, 232, 25, 231, 213, 85, - 1, 232, 25, 231, 214, 227, 39, 85, 1, 238, 44, 237, 220, 85, 1, 238, 44, - 237, 221, 227, 39, 85, 1, 248, 7, 85, 1, 254, 251, 85, 1, 234, 76, 85, 1, - 234, 77, 227, 39, 85, 1, 177, 85, 1, 188, 237, 52, 85, 1, 246, 193, 85, - 1, 246, 194, 246, 2, 85, 1, 235, 137, 85, 1, 252, 39, 85, 1, 252, 40, - 238, 35, 85, 1, 239, 179, 85, 1, 239, 180, 239, 163, 85, 1, 234, 173, 85, - 1, 227, 108, 238, 1, 85, 1, 227, 108, 236, 36, 237, 52, 85, 1, 250, 190, - 236, 36, 254, 207, 85, 1, 250, 190, 236, 36, 237, 52, 85, 1, 236, 2, 232, - 5, 85, 1, 227, 107, 85, 1, 227, 108, 227, 55, 85, 1, 250, 189, 85, 1, - 250, 190, 237, 56, 85, 1, 236, 1, 85, 1, 213, 85, 1, 233, 242, 239, 39, - 85, 1, 253, 70, 85, 1, 253, 71, 238, 249, 85, 1, 198, 85, 1, 191, 85, 1, - 208, 85, 1, 238, 43, 85, 1, 224, 173, 85, 1, 231, 32, 231, 18, 85, 1, - 231, 32, 230, 245, 85, 1, 231, 31, 85, 1, 154, 85, 5, 231, 207, 85, 31, - 5, 227, 39, 85, 31, 5, 225, 147, 85, 31, 5, 225, 148, 230, 242, 85, 31, - 5, 227, 236, 85, 31, 5, 227, 237, 240, 35, 85, 31, 5, 232, 25, 231, 213, - 85, 31, 5, 232, 25, 231, 214, 227, 39, 85, 31, 5, 238, 44, 237, 220, 85, - 31, 5, 238, 44, 237, 221, 227, 39, 85, 31, 5, 227, 78, 85, 31, 5, 227, - 79, 231, 213, 85, 31, 5, 227, 79, 227, 39, 85, 31, 5, 227, 79, 231, 214, - 227, 39, 85, 31, 5, 233, 125, 85, 31, 5, 233, 126, 227, 39, 85, 255, 25, - 255, 24, 85, 1, 239, 60, 230, 241, 85, 1, 238, 205, 230, 241, 85, 1, 225, - 181, 230, 241, 85, 1, 248, 30, 230, 241, 85, 1, 225, 43, 230, 241, 85, 1, - 223, 109, 230, 241, 85, 1, 254, 64, 230, 241, 85, 21, 223, 89, 85, 21, - 118, 85, 21, 113, 85, 21, 166, 85, 21, 158, 85, 21, 173, 85, 21, 183, 85, - 21, 194, 85, 21, 187, 85, 21, 192, 85, 233, 203, 85, 233, 219, 85, 224, - 110, 85, 252, 7, 233, 213, 85, 252, 7, 228, 253, 85, 252, 7, 233, 179, - 85, 233, 218, 85, 23, 14, 249, 146, 85, 23, 14, 250, 45, 85, 23, 14, 248, - 93, 85, 23, 14, 250, 149, 85, 23, 14, 250, 150, 227, 211, 85, 23, 14, - 249, 209, 85, 23, 14, 250, 182, 85, 23, 14, 250, 30, 85, 23, 14, 250, - 168, 85, 23, 14, 250, 150, 246, 127, 85, 23, 14, 36, 227, 36, 85, 23, 14, - 36, 247, 231, 85, 23, 14, 36, 238, 244, 85, 23, 14, 36, 238, 246, 85, 23, - 14, 36, 239, 167, 85, 23, 14, 36, 238, 245, 2, 239, 167, 85, 23, 14, 36, - 238, 247, 2, 239, 167, 85, 23, 14, 36, 252, 208, 85, 23, 14, 36, 246, 5, - 85, 23, 14, 231, 152, 234, 44, 248, 103, 85, 23, 14, 231, 152, 234, 44, - 250, 180, 85, 23, 14, 231, 152, 251, 82, 225, 245, 85, 23, 14, 231, 152, - 251, 82, 227, 85, 85, 23, 14, 237, 236, 234, 44, 233, 209, 85, 23, 14, - 237, 236, 234, 44, 232, 169, 85, 23, 14, 237, 236, 251, 82, 233, 21, 85, - 23, 14, 237, 236, 251, 82, 233, 13, 85, 23, 14, 237, 236, 234, 44, 233, - 37, 220, 5, 233, 201, 220, 5, 233, 207, 220, 5, 233, 206, 220, 1, 57, - 220, 1, 74, 220, 1, 66, 220, 1, 255, 19, 220, 1, 73, 220, 1, 72, 220, 1, - 247, 165, 220, 1, 177, 220, 1, 232, 138, 220, 1, 246, 193, 220, 1, 235, - 137, 220, 1, 252, 39, 220, 1, 239, 179, 220, 1, 223, 117, 220, 1, 234, - 173, 220, 1, 227, 107, 220, 1, 250, 189, 220, 1, 236, 1, 220, 1, 213, - 220, 1, 247, 129, 220, 1, 225, 64, 220, 1, 253, 70, 220, 1, 198, 220, 1, - 191, 220, 1, 208, 220, 1, 238, 43, 220, 1, 224, 173, 220, 1, 231, 31, - 220, 1, 224, 72, 220, 1, 154, 220, 251, 33, 5, 233, 216, 220, 251, 33, 5, - 233, 202, 220, 251, 33, 5, 233, 200, 220, 31, 5, 233, 208, 220, 31, 5, - 233, 199, 220, 31, 5, 233, 211, 220, 31, 5, 233, 205, 220, 31, 5, 233, - 217, 220, 31, 5, 233, 210, 220, 5, 233, 220, 220, 1, 238, 227, 220, 1, - 227, 184, 220, 21, 223, 89, 220, 21, 118, 220, 21, 113, 220, 21, 166, - 220, 21, 158, 220, 21, 173, 220, 21, 183, 220, 21, 194, 220, 21, 187, - 220, 21, 192, 156, 1, 177, 156, 1, 238, 160, 156, 1, 238, 227, 156, 1, - 246, 193, 156, 1, 246, 20, 156, 1, 235, 137, 156, 1, 252, 39, 156, 1, - 251, 204, 156, 1, 239, 179, 156, 1, 234, 173, 156, 1, 227, 107, 156, 1, - 226, 251, 156, 1, 250, 189, 156, 1, 236, 1, 156, 1, 213, 156, 1, 233, 24, - 156, 1, 233, 97, 156, 1, 247, 129, 156, 1, 247, 32, 156, 1, 253, 70, 156, - 1, 252, 151, 156, 1, 198, 156, 1, 236, 109, 156, 1, 226, 44, 156, 1, 226, - 37, 156, 1, 248, 70, 156, 1, 191, 156, 1, 208, 156, 1, 238, 43, 156, 1, - 154, 156, 1, 245, 54, 156, 1, 225, 64, 156, 1, 231, 31, 156, 1, 229, 146, - 156, 1, 224, 173, 156, 1, 57, 156, 228, 0, 1, 191, 156, 228, 0, 1, 208, - 156, 31, 5, 255, 63, 156, 31, 5, 74, 156, 31, 5, 73, 156, 31, 5, 234, 52, - 156, 31, 5, 66, 156, 31, 5, 225, 76, 156, 31, 5, 72, 156, 251, 33, 5, - 239, 76, 156, 251, 33, 5, 185, 156, 251, 33, 5, 149, 156, 251, 33, 5, - 199, 156, 251, 33, 5, 233, 244, 156, 251, 33, 5, 146, 156, 251, 33, 5, - 227, 109, 156, 251, 33, 5, 234, 158, 156, 251, 33, 5, 239, 43, 156, 5, - 232, 3, 156, 5, 234, 202, 156, 232, 171, 227, 106, 156, 232, 171, 234, - 165, 226, 178, 227, 106, 156, 232, 171, 251, 208, 156, 232, 171, 226, 32, - 251, 208, 156, 232, 171, 226, 31, 156, 21, 223, 89, 156, 21, 118, 156, - 21, 113, 156, 21, 166, 156, 21, 158, 156, 21, 173, 156, 21, 183, 156, 21, - 194, 156, 21, 187, 156, 21, 192, 156, 1, 226, 20, 156, 1, 226, 10, 156, - 1, 250, 117, 234, 74, 251, 164, 21, 223, 89, 234, 74, 251, 164, 21, 118, - 234, 74, 251, 164, 21, 113, 234, 74, 251, 164, 21, 166, 234, 74, 251, - 164, 21, 158, 234, 74, 251, 164, 21, 173, 234, 74, 251, 164, 21, 183, - 234, 74, 251, 164, 21, 194, 234, 74, 251, 164, 21, 187, 234, 74, 251, - 164, 21, 192, 234, 74, 251, 164, 1, 238, 43, 234, 74, 251, 164, 1, 254, - 62, 234, 74, 251, 164, 1, 255, 8, 234, 74, 251, 164, 1, 254, 184, 234, - 74, 251, 164, 1, 254, 233, 234, 74, 251, 164, 1, 238, 42, 234, 74, 251, - 164, 1, 255, 59, 234, 74, 251, 164, 1, 255, 60, 234, 74, 251, 164, 1, - 255, 58, 234, 74, 251, 164, 1, 255, 56, 234, 74, 251, 164, 1, 237, 193, - 234, 74, 251, 164, 1, 239, 205, 234, 74, 251, 164, 1, 240, 48, 234, 74, - 251, 164, 1, 239, 220, 234, 74, 251, 164, 1, 239, 210, 234, 74, 251, 164, - 1, 237, 110, 234, 74, 251, 164, 1, 225, 165, 234, 74, 251, 164, 1, 225, - 163, 234, 74, 251, 164, 1, 225, 121, 234, 74, 251, 164, 1, 225, 70, 234, - 74, 251, 164, 1, 237, 243, 234, 74, 251, 164, 1, 247, 211, 234, 74, 251, - 164, 1, 248, 38, 234, 74, 251, 164, 1, 247, 239, 234, 74, 251, 164, 1, - 247, 192, 234, 74, 251, 164, 1, 237, 143, 234, 74, 251, 164, 1, 234, 16, - 234, 74, 251, 164, 1, 234, 101, 234, 74, 251, 164, 1, 234, 6, 234, 74, - 251, 164, 1, 234, 83, 234, 74, 251, 164, 236, 67, 225, 251, 234, 74, 251, - 164, 246, 188, 225, 252, 234, 74, 251, 164, 236, 65, 225, 252, 234, 74, - 251, 164, 231, 222, 234, 74, 251, 164, 233, 95, 234, 74, 251, 164, 255, - 2, 234, 74, 251, 164, 232, 171, 236, 63, 234, 74, 251, 164, 232, 171, 47, - 236, 63, 7, 1, 3, 6, 57, 7, 1, 3, 6, 255, 19, 7, 3, 1, 209, 255, 19, 7, - 1, 3, 6, 253, 31, 254, 27, 7, 1, 3, 6, 252, 44, 7, 1, 3, 6, 222, 222, 7, - 1, 3, 6, 247, 168, 7, 1, 3, 6, 72, 7, 3, 1, 209, 234, 44, 72, 7, 3, 1, - 209, 74, 7, 1, 3, 6, 239, 182, 7, 1, 3, 6, 239, 76, 7, 1, 3, 6, 238, 47, - 2, 82, 7, 1, 3, 6, 185, 7, 1, 3, 6, 200, 199, 7, 1, 3, 6, 73, 7, 1, 3, 6, - 234, 44, 73, 7, 3, 1, 229, 11, 73, 7, 3, 1, 229, 11, 234, 44, 73, 7, 3, - 1, 229, 11, 130, 2, 82, 7, 3, 1, 209, 234, 88, 7, 1, 3, 6, 234, 13, 7, 3, - 1, 226, 106, 132, 73, 7, 3, 1, 252, 126, 132, 73, 7, 1, 3, 6, 233, 244, - 7, 1, 3, 6, 200, 146, 7, 1, 3, 6, 209, 146, 7, 1, 3, 6, 227, 109, 7, 1, - 3, 6, 66, 7, 3, 1, 229, 11, 66, 7, 3, 1, 229, 11, 250, 2, 66, 7, 3, 1, - 229, 11, 209, 185, 7, 1, 3, 6, 196, 7, 1, 3, 6, 224, 174, 7, 1, 3, 6, - 223, 119, 7, 1, 3, 6, 247, 132, 7, 1, 224, 204, 238, 7, 228, 133, 7, 1, - 254, 248, 19, 1, 3, 6, 246, 169, 19, 1, 3, 6, 238, 16, 19, 1, 3, 6, 233, - 69, 19, 1, 3, 6, 231, 182, 19, 1, 3, 6, 232, 183, 28, 1, 3, 6, 248, 2, - 52, 1, 6, 57, 52, 1, 6, 255, 19, 52, 1, 6, 254, 27, 52, 1, 6, 253, 31, - 254, 27, 52, 1, 6, 222, 222, 52, 1, 6, 72, 52, 1, 6, 200, 72, 52, 1, 6, - 214, 52, 1, 6, 212, 52, 1, 6, 74, 52, 1, 6, 239, 182, 52, 1, 6, 239, 76, - 52, 1, 6, 149, 52, 1, 6, 185, 52, 1, 6, 199, 52, 1, 6, 200, 199, 52, 1, - 6, 73, 52, 1, 6, 234, 13, 52, 1, 6, 233, 244, 52, 1, 6, 146, 52, 1, 6, - 227, 109, 52, 1, 6, 66, 52, 1, 6, 224, 174, 52, 1, 3, 57, 52, 1, 3, 209, - 57, 52, 1, 3, 254, 205, 52, 1, 3, 209, 255, 19, 52, 1, 3, 254, 27, 52, 1, - 3, 222, 222, 52, 1, 3, 72, 52, 1, 3, 230, 222, 52, 1, 3, 234, 44, 72, 52, - 1, 3, 209, 234, 44, 72, 52, 1, 3, 214, 52, 1, 3, 209, 74, 52, 1, 3, 239, - 76, 52, 1, 3, 185, 52, 1, 3, 247, 228, 52, 1, 3, 73, 52, 1, 3, 234, 44, - 73, 52, 1, 3, 226, 106, 132, 73, 52, 1, 3, 252, 126, 132, 73, 52, 1, 3, - 233, 244, 52, 1, 3, 227, 109, 52, 1, 3, 66, 52, 1, 3, 229, 11, 66, 52, 1, - 3, 209, 185, 52, 1, 3, 196, 52, 1, 3, 254, 248, 52, 1, 3, 252, 198, 52, - 1, 3, 19, 246, 169, 52, 1, 3, 250, 47, 52, 1, 3, 19, 233, 87, 52, 1, 3, - 251, 169, 7, 227, 253, 3, 1, 74, 7, 227, 253, 3, 1, 146, 7, 227, 253, 3, - 1, 66, 7, 227, 253, 3, 1, 196, 19, 227, 253, 3, 1, 252, 198, 19, 227, - 253, 3, 1, 246, 169, 19, 227, 253, 3, 1, 231, 182, 19, 227, 253, 3, 1, - 233, 87, 19, 227, 253, 3, 1, 251, 169, 7, 3, 1, 225, 159, 7, 3, 1, 45, 2, - 236, 154, 205, 7, 3, 1, 250, 192, 2, 236, 154, 205, 7, 3, 1, 247, 131, 2, - 236, 154, 205, 7, 3, 1, 237, 69, 2, 236, 154, 205, 7, 3, 1, 236, 5, 2, - 236, 154, 205, 7, 3, 1, 233, 245, 2, 236, 154, 205, 7, 3, 1, 232, 27, 2, - 236, 154, 205, 7, 3, 1, 232, 27, 2, 247, 41, 22, 236, 154, 205, 7, 3, 1, - 231, 35, 2, 236, 154, 205, 7, 3, 1, 227, 110, 2, 236, 154, 205, 7, 3, 1, - 223, 120, 2, 236, 154, 205, 7, 3, 1, 209, 214, 52, 1, 28, 247, 239, 7, 3, - 1, 239, 241, 214, 7, 3, 1, 226, 254, 2, 228, 23, 7, 3, 6, 1, 244, 81, 2, - 82, 7, 3, 1, 239, 216, 2, 82, 7, 3, 1, 233, 245, 2, 82, 7, 3, 6, 1, 97, - 2, 82, 7, 3, 1, 225, 111, 2, 82, 7, 3, 1, 45, 2, 233, 229, 88, 7, 3, 1, - 250, 192, 2, 233, 229, 88, 7, 3, 1, 247, 131, 2, 233, 229, 88, 7, 3, 1, - 246, 196, 2, 233, 229, 88, 7, 3, 1, 239, 77, 2, 233, 229, 88, 7, 3, 1, - 238, 47, 2, 233, 229, 88, 7, 3, 1, 237, 69, 2, 233, 229, 88, 7, 3, 1, - 236, 5, 2, 233, 229, 88, 7, 3, 1, 233, 245, 2, 233, 229, 88, 7, 3, 1, - 232, 27, 2, 233, 229, 88, 7, 3, 1, 231, 35, 2, 233, 229, 88, 7, 3, 1, - 247, 184, 2, 233, 229, 88, 7, 3, 1, 225, 65, 2, 233, 229, 88, 7, 3, 1, - 224, 74, 2, 233, 229, 88, 7, 3, 1, 223, 120, 2, 233, 229, 88, 7, 3, 1, - 102, 2, 231, 196, 88, 7, 3, 1, 254, 206, 2, 231, 196, 88, 7, 3, 1, 250, - 192, 2, 244, 217, 22, 227, 89, 7, 3, 1, 161, 2, 231, 196, 88, 7, 3, 1, - 234, 44, 161, 2, 231, 196, 88, 7, 3, 1, 200, 234, 44, 161, 2, 231, 196, - 88, 7, 3, 1, 230, 223, 2, 231, 196, 88, 7, 3, 1, 244, 81, 2, 231, 196, - 88, 7, 3, 1, 234, 44, 130, 2, 231, 196, 88, 7, 3, 1, 247, 184, 2, 231, - 196, 88, 7, 3, 1, 97, 2, 231, 196, 88, 7, 3, 1, 247, 133, 2, 231, 196, - 88, 52, 1, 3, 209, 254, 205, 52, 1, 3, 252, 44, 52, 1, 3, 252, 45, 2, - 250, 224, 52, 1, 3, 247, 168, 52, 1, 3, 200, 234, 44, 72, 52, 1, 3, 247, - 130, 52, 1, 3, 249, 139, 239, 183, 2, 82, 52, 1, 3, 95, 214, 52, 1, 3, - 209, 212, 52, 1, 3, 244, 81, 2, 82, 52, 1, 3, 239, 215, 52, 1, 3, 6, 74, - 52, 1, 3, 6, 244, 81, 2, 82, 52, 1, 3, 239, 183, 2, 250, 240, 52, 1, 3, - 238, 47, 2, 231, 196, 88, 52, 1, 3, 238, 47, 2, 233, 229, 88, 52, 1, 3, - 6, 149, 52, 1, 3, 237, 69, 2, 88, 52, 1, 3, 209, 237, 69, 2, 182, 237, - 229, 52, 1, 3, 236, 5, 2, 42, 88, 52, 1, 3, 236, 5, 2, 231, 196, 88, 52, - 1, 3, 6, 199, 52, 1, 3, 253, 31, 73, 52, 1, 3, 233, 87, 52, 1, 3, 231, - 35, 2, 88, 52, 1, 3, 247, 183, 52, 1, 3, 227, 110, 2, 233, 229, 88, 52, - 1, 3, 97, 125, 52, 1, 3, 225, 110, 52, 1, 3, 6, 66, 52, 1, 3, 225, 65, 2, - 88, 52, 1, 3, 209, 196, 52, 1, 3, 223, 119, 52, 1, 3, 223, 120, 2, 231, - 196, 88, 52, 1, 3, 223, 120, 2, 250, 224, 52, 1, 3, 247, 132, 52, 1, 3, - 226, 223, 36, 248, 138, 245, 237, 255, 41, 36, 248, 138, 255, 33, 255, - 41, 36, 228, 177, 51, 36, 227, 205, 76, 36, 237, 62, 36, 245, 234, 36, - 237, 60, 36, 255, 31, 36, 245, 235, 36, 255, 32, 36, 7, 3, 1, 232, 27, - 51, 36, 252, 105, 36, 237, 61, 36, 47, 251, 102, 46, 36, 234, 85, 46, 36, - 223, 38, 51, 36, 239, 206, 51, 36, 225, 104, 46, 36, 225, 88, 46, 36, 7, - 3, 1, 247, 22, 234, 44, 102, 46, 36, 7, 3, 1, 255, 19, 36, 7, 3, 1, 254, - 158, 36, 7, 3, 1, 254, 41, 36, 7, 3, 1, 252, 45, 251, 226, 36, 7, 3, 1, - 239, 241, 222, 222, 36, 7, 3, 1, 247, 168, 36, 7, 3, 1, 214, 36, 7, 1, 3, - 6, 214, 36, 7, 3, 1, 239, 76, 36, 7, 3, 1, 149, 36, 7, 1, 3, 6, 149, 36, - 7, 1, 3, 6, 185, 36, 7, 3, 1, 199, 36, 7, 1, 3, 6, 199, 36, 7, 1, 3, 6, - 146, 36, 7, 3, 1, 232, 27, 231, 105, 36, 7, 3, 1, 193, 36, 7, 3, 1, 182, - 193, 36, 7, 3, 1, 223, 119, 36, 42, 254, 94, 46, 36, 41, 254, 94, 22, - 103, 254, 94, 51, 7, 6, 1, 102, 2, 231, 140, 51, 7, 3, 1, 102, 2, 231, - 140, 51, 7, 6, 1, 45, 2, 56, 46, 7, 3, 1, 45, 2, 56, 46, 7, 6, 1, 45, 2, - 56, 51, 7, 3, 1, 45, 2, 56, 51, 7, 6, 1, 45, 2, 237, 171, 51, 7, 3, 1, - 45, 2, 237, 171, 51, 7, 6, 1, 252, 45, 2, 251, 227, 22, 155, 7, 3, 1, - 252, 45, 2, 251, 227, 22, 155, 7, 6, 1, 250, 192, 2, 56, 46, 7, 3, 1, - 250, 192, 2, 56, 46, 7, 6, 1, 250, 192, 2, 56, 51, 7, 3, 1, 250, 192, 2, - 56, 51, 7, 6, 1, 250, 192, 2, 237, 171, 51, 7, 3, 1, 250, 192, 2, 237, - 171, 51, 7, 6, 1, 250, 192, 2, 251, 226, 7, 3, 1, 250, 192, 2, 251, 226, - 7, 6, 1, 250, 192, 2, 251, 102, 51, 7, 3, 1, 250, 192, 2, 251, 102, 51, - 7, 6, 1, 161, 2, 237, 64, 22, 245, 236, 7, 3, 1, 161, 2, 237, 64, 22, - 245, 236, 7, 6, 1, 161, 2, 237, 64, 22, 155, 7, 3, 1, 161, 2, 237, 64, - 22, 155, 7, 6, 1, 161, 2, 251, 102, 51, 7, 3, 1, 161, 2, 251, 102, 51, 7, - 6, 1, 161, 2, 226, 159, 51, 7, 3, 1, 161, 2, 226, 159, 51, 7, 6, 1, 161, - 2, 251, 227, 22, 252, 106, 7, 3, 1, 161, 2, 251, 227, 22, 252, 106, 7, 6, - 1, 247, 131, 2, 56, 46, 7, 3, 1, 247, 131, 2, 56, 46, 7, 6, 1, 246, 196, - 2, 237, 63, 7, 3, 1, 246, 196, 2, 237, 63, 7, 6, 1, 245, 172, 2, 56, 46, - 7, 3, 1, 245, 172, 2, 56, 46, 7, 6, 1, 245, 172, 2, 56, 51, 7, 3, 1, 245, - 172, 2, 56, 51, 7, 6, 1, 245, 172, 2, 219, 7, 3, 1, 245, 172, 2, 219, 7, - 6, 1, 245, 172, 2, 251, 226, 7, 3, 1, 245, 172, 2, 251, 226, 7, 6, 1, - 245, 172, 2, 252, 107, 51, 7, 3, 1, 245, 172, 2, 252, 107, 51, 7, 6, 1, - 244, 81, 2, 226, 159, 51, 7, 3, 1, 244, 81, 2, 226, 159, 51, 7, 6, 1, - 244, 81, 2, 250, 3, 22, 155, 7, 3, 1, 244, 81, 2, 250, 3, 22, 155, 7, 6, - 1, 239, 77, 2, 155, 7, 3, 1, 239, 77, 2, 155, 7, 6, 1, 239, 77, 2, 56, - 51, 7, 3, 1, 239, 77, 2, 56, 51, 7, 6, 1, 239, 77, 2, 237, 171, 51, 7, 3, - 1, 239, 77, 2, 237, 171, 51, 7, 6, 1, 238, 47, 2, 56, 51, 7, 3, 1, 238, - 47, 2, 56, 51, 7, 6, 1, 238, 47, 2, 56, 252, 214, 22, 237, 63, 7, 3, 1, - 238, 47, 2, 56, 252, 214, 22, 237, 63, 7, 6, 1, 238, 47, 2, 237, 171, 51, - 7, 3, 1, 238, 47, 2, 237, 171, 51, 7, 6, 1, 238, 47, 2, 251, 102, 51, 7, - 3, 1, 238, 47, 2, 251, 102, 51, 7, 6, 1, 237, 69, 2, 155, 7, 3, 1, 237, - 69, 2, 155, 7, 6, 1, 237, 69, 2, 56, 46, 7, 3, 1, 237, 69, 2, 56, 46, 7, - 6, 1, 237, 69, 2, 56, 51, 7, 3, 1, 237, 69, 2, 56, 51, 7, 6, 1, 236, 5, - 2, 56, 46, 7, 3, 1, 236, 5, 2, 56, 46, 7, 6, 1, 236, 5, 2, 56, 51, 7, 3, - 1, 236, 5, 2, 56, 51, 7, 6, 1, 236, 5, 2, 237, 171, 51, 7, 3, 1, 236, 5, - 2, 237, 171, 51, 7, 6, 1, 236, 5, 2, 251, 102, 51, 7, 3, 1, 236, 5, 2, - 251, 102, 51, 7, 6, 1, 130, 2, 226, 159, 22, 155, 7, 3, 1, 130, 2, 226, - 159, 22, 155, 7, 6, 1, 130, 2, 226, 159, 22, 219, 7, 3, 1, 130, 2, 226, - 159, 22, 219, 7, 6, 1, 130, 2, 237, 64, 22, 245, 236, 7, 3, 1, 130, 2, - 237, 64, 22, 245, 236, 7, 6, 1, 130, 2, 237, 64, 22, 155, 7, 3, 1, 130, - 2, 237, 64, 22, 155, 7, 6, 1, 233, 245, 2, 155, 7, 3, 1, 233, 245, 2, - 155, 7, 6, 1, 233, 245, 2, 56, 46, 7, 3, 1, 233, 245, 2, 56, 46, 7, 6, 1, - 232, 27, 2, 56, 46, 7, 3, 1, 232, 27, 2, 56, 46, 7, 6, 1, 232, 27, 2, 56, - 51, 7, 3, 1, 232, 27, 2, 56, 51, 7, 6, 1, 232, 27, 2, 56, 252, 214, 22, - 237, 63, 7, 3, 1, 232, 27, 2, 56, 252, 214, 22, 237, 63, 7, 6, 1, 232, - 27, 2, 237, 171, 51, 7, 3, 1, 232, 27, 2, 237, 171, 51, 7, 6, 1, 231, 35, - 2, 56, 46, 7, 3, 1, 231, 35, 2, 56, 46, 7, 6, 1, 231, 35, 2, 56, 51, 7, - 3, 1, 231, 35, 2, 56, 51, 7, 6, 1, 231, 35, 2, 255, 33, 22, 56, 46, 7, 3, - 1, 231, 35, 2, 255, 33, 22, 56, 46, 7, 6, 1, 231, 35, 2, 252, 6, 22, 56, - 46, 7, 3, 1, 231, 35, 2, 252, 6, 22, 56, 46, 7, 6, 1, 231, 35, 2, 56, - 252, 214, 22, 56, 46, 7, 3, 1, 231, 35, 2, 56, 252, 214, 22, 56, 46, 7, - 6, 1, 227, 110, 2, 56, 46, 7, 3, 1, 227, 110, 2, 56, 46, 7, 6, 1, 227, - 110, 2, 56, 51, 7, 3, 1, 227, 110, 2, 56, 51, 7, 6, 1, 227, 110, 2, 237, - 171, 51, 7, 3, 1, 227, 110, 2, 237, 171, 51, 7, 6, 1, 227, 110, 2, 251, - 102, 51, 7, 3, 1, 227, 110, 2, 251, 102, 51, 7, 6, 1, 97, 2, 250, 3, 51, - 7, 3, 1, 97, 2, 250, 3, 51, 7, 6, 1, 97, 2, 226, 159, 51, 7, 3, 1, 97, 2, - 226, 159, 51, 7, 6, 1, 97, 2, 251, 102, 51, 7, 3, 1, 97, 2, 251, 102, 51, - 7, 6, 1, 97, 2, 226, 159, 22, 155, 7, 3, 1, 97, 2, 226, 159, 22, 155, 7, - 6, 1, 97, 2, 237, 64, 22, 219, 7, 3, 1, 97, 2, 237, 64, 22, 219, 7, 6, 1, - 225, 65, 2, 205, 7, 3, 1, 225, 65, 2, 205, 7, 6, 1, 225, 65, 2, 56, 51, - 7, 3, 1, 225, 65, 2, 56, 51, 7, 6, 1, 224, 175, 2, 245, 236, 7, 3, 1, - 224, 175, 2, 245, 236, 7, 6, 1, 224, 175, 2, 155, 7, 3, 1, 224, 175, 2, - 155, 7, 6, 1, 224, 175, 2, 219, 7, 3, 1, 224, 175, 2, 219, 7, 6, 1, 224, - 175, 2, 56, 46, 7, 3, 1, 224, 175, 2, 56, 46, 7, 6, 1, 224, 175, 2, 56, - 51, 7, 3, 1, 224, 175, 2, 56, 51, 7, 6, 1, 224, 74, 2, 56, 46, 7, 3, 1, - 224, 74, 2, 56, 46, 7, 6, 1, 224, 74, 2, 219, 7, 3, 1, 224, 74, 2, 219, - 7, 6, 1, 224, 26, 2, 56, 46, 7, 3, 1, 224, 26, 2, 56, 46, 7, 6, 1, 223, - 120, 2, 251, 101, 7, 3, 1, 223, 120, 2, 251, 101, 7, 6, 1, 223, 120, 2, - 56, 51, 7, 3, 1, 223, 120, 2, 56, 51, 7, 6, 1, 223, 120, 2, 237, 171, 51, - 7, 3, 1, 223, 120, 2, 237, 171, 51, 7, 3, 1, 245, 172, 2, 237, 171, 51, - 7, 3, 1, 227, 110, 2, 219, 7, 3, 1, 224, 175, 2, 231, 140, 46, 7, 3, 1, - 224, 26, 2, 231, 140, 46, 7, 3, 1, 102, 2, 41, 132, 231, 139, 7, 3, 1, - 182, 231, 35, 2, 56, 46, 7, 3, 1, 182, 231, 35, 2, 250, 1, 82, 7, 3, 1, - 182, 231, 35, 2, 201, 82, 7, 6, 1, 229, 124, 193, 7, 3, 1, 250, 47, 7, 6, - 1, 102, 2, 56, 51, 7, 3, 1, 102, 2, 56, 51, 7, 6, 1, 102, 2, 244, 217, - 46, 7, 3, 1, 102, 2, 244, 217, 46, 7, 6, 1, 102, 2, 251, 102, 22, 155, 7, - 3, 1, 102, 2, 251, 102, 22, 155, 7, 6, 1, 102, 2, 251, 102, 22, 245, 236, - 7, 3, 1, 102, 2, 251, 102, 22, 245, 236, 7, 6, 1, 102, 2, 251, 102, 22, - 244, 217, 46, 7, 3, 1, 102, 2, 251, 102, 22, 244, 217, 46, 7, 6, 1, 102, - 2, 251, 102, 22, 205, 7, 3, 1, 102, 2, 251, 102, 22, 205, 7, 6, 1, 102, - 2, 251, 102, 22, 56, 51, 7, 3, 1, 102, 2, 251, 102, 22, 56, 51, 7, 6, 1, - 102, 2, 252, 107, 22, 155, 7, 3, 1, 102, 2, 252, 107, 22, 155, 7, 6, 1, - 102, 2, 252, 107, 22, 245, 236, 7, 3, 1, 102, 2, 252, 107, 22, 245, 236, - 7, 6, 1, 102, 2, 252, 107, 22, 244, 217, 46, 7, 3, 1, 102, 2, 252, 107, - 22, 244, 217, 46, 7, 6, 1, 102, 2, 252, 107, 22, 205, 7, 3, 1, 102, 2, - 252, 107, 22, 205, 7, 6, 1, 102, 2, 252, 107, 22, 56, 51, 7, 3, 1, 102, - 2, 252, 107, 22, 56, 51, 7, 6, 1, 161, 2, 56, 51, 7, 3, 1, 161, 2, 56, - 51, 7, 6, 1, 161, 2, 244, 217, 46, 7, 3, 1, 161, 2, 244, 217, 46, 7, 6, - 1, 161, 2, 205, 7, 3, 1, 161, 2, 205, 7, 6, 1, 161, 2, 251, 102, 22, 155, - 7, 3, 1, 161, 2, 251, 102, 22, 155, 7, 6, 1, 161, 2, 251, 102, 22, 245, - 236, 7, 3, 1, 161, 2, 251, 102, 22, 245, 236, 7, 6, 1, 161, 2, 251, 102, - 22, 244, 217, 46, 7, 3, 1, 161, 2, 251, 102, 22, 244, 217, 46, 7, 6, 1, - 161, 2, 251, 102, 22, 205, 7, 3, 1, 161, 2, 251, 102, 22, 205, 7, 6, 1, - 161, 2, 251, 102, 22, 56, 51, 7, 3, 1, 161, 2, 251, 102, 22, 56, 51, 7, - 6, 1, 244, 81, 2, 244, 217, 46, 7, 3, 1, 244, 81, 2, 244, 217, 46, 7, 6, - 1, 244, 81, 2, 56, 51, 7, 3, 1, 244, 81, 2, 56, 51, 7, 6, 1, 130, 2, 56, - 51, 7, 3, 1, 130, 2, 56, 51, 7, 6, 1, 130, 2, 244, 217, 46, 7, 3, 1, 130, - 2, 244, 217, 46, 7, 6, 1, 130, 2, 251, 102, 22, 155, 7, 3, 1, 130, 2, - 251, 102, 22, 155, 7, 6, 1, 130, 2, 251, 102, 22, 245, 236, 7, 3, 1, 130, - 2, 251, 102, 22, 245, 236, 7, 6, 1, 130, 2, 251, 102, 22, 244, 217, 46, - 7, 3, 1, 130, 2, 251, 102, 22, 244, 217, 46, 7, 6, 1, 130, 2, 251, 102, - 22, 205, 7, 3, 1, 130, 2, 251, 102, 22, 205, 7, 6, 1, 130, 2, 251, 102, - 22, 56, 51, 7, 3, 1, 130, 2, 251, 102, 22, 56, 51, 7, 6, 1, 130, 2, 244, - 161, 22, 155, 7, 3, 1, 130, 2, 244, 161, 22, 155, 7, 6, 1, 130, 2, 244, - 161, 22, 245, 236, 7, 3, 1, 130, 2, 244, 161, 22, 245, 236, 7, 6, 1, 130, - 2, 244, 161, 22, 244, 217, 46, 7, 3, 1, 130, 2, 244, 161, 22, 244, 217, - 46, 7, 6, 1, 130, 2, 244, 161, 22, 205, 7, 3, 1, 130, 2, 244, 161, 22, - 205, 7, 6, 1, 130, 2, 244, 161, 22, 56, 51, 7, 3, 1, 130, 2, 244, 161, - 22, 56, 51, 7, 6, 1, 97, 2, 56, 51, 7, 3, 1, 97, 2, 56, 51, 7, 6, 1, 97, - 2, 244, 217, 46, 7, 3, 1, 97, 2, 244, 217, 46, 7, 6, 1, 97, 2, 244, 161, - 22, 155, 7, 3, 1, 97, 2, 244, 161, 22, 155, 7, 6, 1, 97, 2, 244, 161, 22, - 245, 236, 7, 3, 1, 97, 2, 244, 161, 22, 245, 236, 7, 6, 1, 97, 2, 244, - 161, 22, 244, 217, 46, 7, 3, 1, 97, 2, 244, 161, 22, 244, 217, 46, 7, 6, - 1, 97, 2, 244, 161, 22, 205, 7, 3, 1, 97, 2, 244, 161, 22, 205, 7, 6, 1, - 97, 2, 244, 161, 22, 56, 51, 7, 3, 1, 97, 2, 244, 161, 22, 56, 51, 7, 6, - 1, 224, 26, 2, 245, 236, 7, 3, 1, 224, 26, 2, 245, 236, 7, 6, 1, 224, 26, - 2, 56, 51, 7, 3, 1, 224, 26, 2, 56, 51, 7, 6, 1, 224, 26, 2, 244, 217, - 46, 7, 3, 1, 224, 26, 2, 244, 217, 46, 7, 6, 1, 224, 26, 2, 205, 7, 3, 1, - 224, 26, 2, 205, 7, 6, 1, 236, 153, 237, 149, 7, 3, 1, 236, 153, 237, - 149, 7, 6, 1, 236, 153, 196, 7, 3, 1, 236, 153, 196, 7, 6, 1, 224, 26, 2, - 237, 124, 7, 3, 1, 224, 26, 2, 237, 124, 19, 3, 1, 254, 206, 2, 232, 177, - 19, 3, 1, 254, 206, 2, 250, 128, 19, 3, 1, 254, 206, 2, 186, 22, 225, 55, - 19, 3, 1, 254, 206, 2, 172, 22, 225, 55, 19, 3, 1, 254, 206, 2, 186, 22, - 233, 249, 19, 3, 1, 254, 206, 2, 172, 22, 233, 249, 19, 3, 1, 254, 206, - 2, 186, 22, 233, 117, 19, 3, 1, 254, 206, 2, 172, 22, 233, 117, 19, 6, 1, - 254, 206, 2, 232, 177, 19, 6, 1, 254, 206, 2, 250, 128, 19, 6, 1, 254, - 206, 2, 186, 22, 225, 55, 19, 6, 1, 254, 206, 2, 172, 22, 225, 55, 19, 6, - 1, 254, 206, 2, 186, 22, 233, 249, 19, 6, 1, 254, 206, 2, 172, 22, 233, - 249, 19, 6, 1, 254, 206, 2, 186, 22, 233, 117, 19, 6, 1, 254, 206, 2, - 172, 22, 233, 117, 19, 3, 1, 247, 207, 2, 232, 177, 19, 3, 1, 247, 207, - 2, 250, 128, 19, 3, 1, 247, 207, 2, 186, 22, 225, 55, 19, 3, 1, 247, 207, - 2, 172, 22, 225, 55, 19, 3, 1, 247, 207, 2, 186, 22, 233, 249, 19, 3, 1, - 247, 207, 2, 172, 22, 233, 249, 19, 6, 1, 247, 207, 2, 232, 177, 19, 6, - 1, 247, 207, 2, 250, 128, 19, 6, 1, 247, 207, 2, 186, 22, 225, 55, 19, 6, - 1, 247, 207, 2, 172, 22, 225, 55, 19, 6, 1, 247, 207, 2, 186, 22, 233, - 249, 19, 6, 1, 247, 207, 2, 172, 22, 233, 249, 19, 3, 1, 247, 172, 2, - 232, 177, 19, 3, 1, 247, 172, 2, 250, 128, 19, 3, 1, 247, 172, 2, 186, - 22, 225, 55, 19, 3, 1, 247, 172, 2, 172, 22, 225, 55, 19, 3, 1, 247, 172, - 2, 186, 22, 233, 249, 19, 3, 1, 247, 172, 2, 172, 22, 233, 249, 19, 3, 1, - 247, 172, 2, 186, 22, 233, 117, 19, 3, 1, 247, 172, 2, 172, 22, 233, 117, - 19, 6, 1, 247, 172, 2, 232, 177, 19, 6, 1, 247, 172, 2, 250, 128, 19, 6, - 1, 247, 172, 2, 186, 22, 225, 55, 19, 6, 1, 247, 172, 2, 172, 22, 225, - 55, 19, 6, 1, 247, 172, 2, 186, 22, 233, 249, 19, 6, 1, 247, 172, 2, 172, - 22, 233, 249, 19, 6, 1, 247, 172, 2, 186, 22, 233, 117, 19, 6, 1, 247, - 172, 2, 172, 22, 233, 117, 19, 3, 1, 239, 216, 2, 232, 177, 19, 3, 1, - 239, 216, 2, 250, 128, 19, 3, 1, 239, 216, 2, 186, 22, 225, 55, 19, 3, 1, - 239, 216, 2, 172, 22, 225, 55, 19, 3, 1, 239, 216, 2, 186, 22, 233, 249, - 19, 3, 1, 239, 216, 2, 172, 22, 233, 249, 19, 3, 1, 239, 216, 2, 186, 22, - 233, 117, 19, 3, 1, 239, 216, 2, 172, 22, 233, 117, 19, 6, 1, 239, 216, - 2, 232, 177, 19, 6, 1, 239, 216, 2, 250, 128, 19, 6, 1, 239, 216, 2, 186, - 22, 225, 55, 19, 6, 1, 239, 216, 2, 172, 22, 225, 55, 19, 6, 1, 239, 216, - 2, 186, 22, 233, 249, 19, 6, 1, 239, 216, 2, 172, 22, 233, 249, 19, 6, 1, - 239, 216, 2, 186, 22, 233, 117, 19, 6, 1, 239, 216, 2, 172, 22, 233, 117, - 19, 3, 1, 234, 65, 2, 232, 177, 19, 3, 1, 234, 65, 2, 250, 128, 19, 3, 1, - 234, 65, 2, 186, 22, 225, 55, 19, 3, 1, 234, 65, 2, 172, 22, 225, 55, 19, - 3, 1, 234, 65, 2, 186, 22, 233, 249, 19, 3, 1, 234, 65, 2, 172, 22, 233, - 249, 19, 6, 1, 234, 65, 2, 232, 177, 19, 6, 1, 234, 65, 2, 250, 128, 19, - 6, 1, 234, 65, 2, 186, 22, 225, 55, 19, 6, 1, 234, 65, 2, 172, 22, 225, - 55, 19, 6, 1, 234, 65, 2, 186, 22, 233, 249, 19, 6, 1, 234, 65, 2, 172, - 22, 233, 249, 19, 3, 1, 225, 111, 2, 232, 177, 19, 3, 1, 225, 111, 2, - 250, 128, 19, 3, 1, 225, 111, 2, 186, 22, 225, 55, 19, 3, 1, 225, 111, 2, - 172, 22, 225, 55, 19, 3, 1, 225, 111, 2, 186, 22, 233, 249, 19, 3, 1, - 225, 111, 2, 172, 22, 233, 249, 19, 3, 1, 225, 111, 2, 186, 22, 233, 117, - 19, 3, 1, 225, 111, 2, 172, 22, 233, 117, 19, 6, 1, 225, 111, 2, 250, - 128, 19, 6, 1, 225, 111, 2, 172, 22, 225, 55, 19, 6, 1, 225, 111, 2, 172, - 22, 233, 249, 19, 6, 1, 225, 111, 2, 172, 22, 233, 117, 19, 3, 1, 234, - 67, 2, 232, 177, 19, 3, 1, 234, 67, 2, 250, 128, 19, 3, 1, 234, 67, 2, - 186, 22, 225, 55, 19, 3, 1, 234, 67, 2, 172, 22, 225, 55, 19, 3, 1, 234, - 67, 2, 186, 22, 233, 249, 19, 3, 1, 234, 67, 2, 172, 22, 233, 249, 19, 3, - 1, 234, 67, 2, 186, 22, 233, 117, 19, 3, 1, 234, 67, 2, 172, 22, 233, - 117, 19, 6, 1, 234, 67, 2, 232, 177, 19, 6, 1, 234, 67, 2, 250, 128, 19, - 6, 1, 234, 67, 2, 186, 22, 225, 55, 19, 6, 1, 234, 67, 2, 172, 22, 225, - 55, 19, 6, 1, 234, 67, 2, 186, 22, 233, 249, 19, 6, 1, 234, 67, 2, 172, - 22, 233, 249, 19, 6, 1, 234, 67, 2, 186, 22, 233, 117, 19, 6, 1, 234, 67, - 2, 172, 22, 233, 117, 19, 3, 1, 254, 206, 2, 225, 55, 19, 3, 1, 254, 206, - 2, 233, 249, 19, 3, 1, 247, 207, 2, 225, 55, 19, 3, 1, 247, 207, 2, 233, - 249, 19, 3, 1, 247, 172, 2, 225, 55, 19, 3, 1, 247, 172, 2, 233, 249, 19, - 3, 1, 239, 216, 2, 225, 55, 19, 3, 1, 239, 216, 2, 233, 249, 19, 3, 1, - 234, 65, 2, 225, 55, 19, 3, 1, 234, 65, 2, 233, 249, 19, 3, 1, 225, 111, - 2, 225, 55, 19, 3, 1, 225, 111, 2, 233, 249, 19, 3, 1, 234, 67, 2, 225, - 55, 19, 3, 1, 234, 67, 2, 233, 249, 19, 3, 1, 254, 206, 2, 186, 22, 223, - 165, 19, 3, 1, 254, 206, 2, 172, 22, 223, 165, 19, 3, 1, 254, 206, 2, - 186, 22, 225, 56, 22, 223, 165, 19, 3, 1, 254, 206, 2, 172, 22, 225, 56, - 22, 223, 165, 19, 3, 1, 254, 206, 2, 186, 22, 233, 250, 22, 223, 165, 19, - 3, 1, 254, 206, 2, 172, 22, 233, 250, 22, 223, 165, 19, 3, 1, 254, 206, - 2, 186, 22, 233, 118, 22, 223, 165, 19, 3, 1, 254, 206, 2, 172, 22, 233, - 118, 22, 223, 165, 19, 6, 1, 254, 206, 2, 186, 22, 232, 188, 19, 6, 1, - 254, 206, 2, 172, 22, 232, 188, 19, 6, 1, 254, 206, 2, 186, 22, 225, 56, - 22, 232, 188, 19, 6, 1, 254, 206, 2, 172, 22, 225, 56, 22, 232, 188, 19, - 6, 1, 254, 206, 2, 186, 22, 233, 250, 22, 232, 188, 19, 6, 1, 254, 206, - 2, 172, 22, 233, 250, 22, 232, 188, 19, 6, 1, 254, 206, 2, 186, 22, 233, - 118, 22, 232, 188, 19, 6, 1, 254, 206, 2, 172, 22, 233, 118, 22, 232, - 188, 19, 3, 1, 247, 172, 2, 186, 22, 223, 165, 19, 3, 1, 247, 172, 2, - 172, 22, 223, 165, 19, 3, 1, 247, 172, 2, 186, 22, 225, 56, 22, 223, 165, - 19, 3, 1, 247, 172, 2, 172, 22, 225, 56, 22, 223, 165, 19, 3, 1, 247, - 172, 2, 186, 22, 233, 250, 22, 223, 165, 19, 3, 1, 247, 172, 2, 172, 22, - 233, 250, 22, 223, 165, 19, 3, 1, 247, 172, 2, 186, 22, 233, 118, 22, - 223, 165, 19, 3, 1, 247, 172, 2, 172, 22, 233, 118, 22, 223, 165, 19, 6, - 1, 247, 172, 2, 186, 22, 232, 188, 19, 6, 1, 247, 172, 2, 172, 22, 232, - 188, 19, 6, 1, 247, 172, 2, 186, 22, 225, 56, 22, 232, 188, 19, 6, 1, - 247, 172, 2, 172, 22, 225, 56, 22, 232, 188, 19, 6, 1, 247, 172, 2, 186, - 22, 233, 250, 22, 232, 188, 19, 6, 1, 247, 172, 2, 172, 22, 233, 250, 22, - 232, 188, 19, 6, 1, 247, 172, 2, 186, 22, 233, 118, 22, 232, 188, 19, 6, - 1, 247, 172, 2, 172, 22, 233, 118, 22, 232, 188, 19, 3, 1, 234, 67, 2, - 186, 22, 223, 165, 19, 3, 1, 234, 67, 2, 172, 22, 223, 165, 19, 3, 1, - 234, 67, 2, 186, 22, 225, 56, 22, 223, 165, 19, 3, 1, 234, 67, 2, 172, - 22, 225, 56, 22, 223, 165, 19, 3, 1, 234, 67, 2, 186, 22, 233, 250, 22, - 223, 165, 19, 3, 1, 234, 67, 2, 172, 22, 233, 250, 22, 223, 165, 19, 3, - 1, 234, 67, 2, 186, 22, 233, 118, 22, 223, 165, 19, 3, 1, 234, 67, 2, - 172, 22, 233, 118, 22, 223, 165, 19, 6, 1, 234, 67, 2, 186, 22, 232, 188, - 19, 6, 1, 234, 67, 2, 172, 22, 232, 188, 19, 6, 1, 234, 67, 2, 186, 22, - 225, 56, 22, 232, 188, 19, 6, 1, 234, 67, 2, 172, 22, 225, 56, 22, 232, - 188, 19, 6, 1, 234, 67, 2, 186, 22, 233, 250, 22, 232, 188, 19, 6, 1, - 234, 67, 2, 172, 22, 233, 250, 22, 232, 188, 19, 6, 1, 234, 67, 2, 186, - 22, 233, 118, 22, 232, 188, 19, 6, 1, 234, 67, 2, 172, 22, 233, 118, 22, - 232, 188, 19, 3, 1, 254, 206, 2, 224, 191, 19, 3, 1, 254, 206, 2, 237, - 63, 19, 3, 1, 254, 206, 2, 225, 56, 22, 223, 165, 19, 3, 1, 254, 206, 2, - 223, 165, 19, 3, 1, 254, 206, 2, 233, 250, 22, 223, 165, 19, 3, 1, 254, - 206, 2, 233, 117, 19, 3, 1, 254, 206, 2, 233, 118, 22, 223, 165, 19, 6, - 1, 254, 206, 2, 224, 191, 19, 6, 1, 254, 206, 2, 237, 63, 19, 6, 1, 254, - 206, 2, 225, 55, 19, 6, 1, 254, 206, 2, 233, 249, 19, 6, 1, 254, 206, 2, - 232, 188, 19, 238, 132, 19, 232, 188, 19, 232, 177, 19, 233, 117, 19, - 249, 254, 22, 233, 117, 19, 3, 1, 247, 172, 2, 225, 56, 22, 223, 165, 19, - 3, 1, 247, 172, 2, 223, 165, 19, 3, 1, 247, 172, 2, 233, 250, 22, 223, - 165, 19, 3, 1, 247, 172, 2, 233, 117, 19, 3, 1, 247, 172, 2, 233, 118, - 22, 223, 165, 19, 6, 1, 247, 207, 2, 225, 55, 19, 6, 1, 247, 207, 2, 233, - 249, 19, 6, 1, 247, 172, 2, 225, 55, 19, 6, 1, 247, 172, 2, 233, 249, 19, - 6, 1, 247, 172, 2, 232, 188, 19, 186, 22, 225, 55, 19, 186, 22, 233, 249, - 19, 186, 22, 233, 117, 19, 3, 1, 239, 216, 2, 224, 191, 19, 3, 1, 239, - 216, 2, 237, 63, 19, 3, 1, 239, 216, 2, 249, 254, 22, 225, 55, 19, 3, 1, - 239, 216, 2, 249, 254, 22, 233, 249, 19, 3, 1, 239, 216, 2, 233, 117, 19, - 3, 1, 239, 216, 2, 249, 254, 22, 233, 117, 19, 6, 1, 239, 216, 2, 224, - 191, 19, 6, 1, 239, 216, 2, 237, 63, 19, 6, 1, 239, 216, 2, 225, 55, 19, - 6, 1, 239, 216, 2, 233, 249, 19, 172, 22, 225, 55, 19, 172, 22, 233, 249, - 19, 172, 22, 233, 117, 19, 3, 1, 225, 111, 2, 224, 191, 19, 3, 1, 225, - 111, 2, 237, 63, 19, 3, 1, 225, 111, 2, 249, 254, 22, 225, 55, 19, 3, 1, - 225, 111, 2, 249, 254, 22, 233, 249, 19, 3, 1, 231, 183, 2, 232, 177, 19, - 3, 1, 231, 183, 2, 250, 128, 19, 3, 1, 225, 111, 2, 233, 117, 19, 3, 1, - 225, 111, 2, 249, 254, 22, 233, 117, 19, 6, 1, 225, 111, 2, 224, 191, 19, - 6, 1, 225, 111, 2, 237, 63, 19, 6, 1, 225, 111, 2, 225, 55, 19, 6, 1, - 225, 111, 2, 233, 249, 19, 6, 1, 231, 183, 2, 250, 128, 19, 249, 254, 22, - 225, 55, 19, 249, 254, 22, 233, 249, 19, 225, 55, 19, 3, 1, 234, 67, 2, - 225, 56, 22, 223, 165, 19, 3, 1, 234, 67, 2, 223, 165, 19, 3, 1, 234, 67, - 2, 233, 250, 22, 223, 165, 19, 3, 1, 234, 67, 2, 233, 117, 19, 3, 1, 234, - 67, 2, 233, 118, 22, 223, 165, 19, 6, 1, 234, 65, 2, 225, 55, 19, 6, 1, - 234, 65, 2, 233, 249, 19, 6, 1, 234, 67, 2, 225, 55, 19, 6, 1, 234, 67, - 2, 233, 249, 19, 6, 1, 234, 67, 2, 232, 188, 19, 233, 249, 19, 250, 128, - 247, 240, 232, 81, 247, 248, 232, 81, 247, 240, 228, 145, 247, 248, 228, - 145, 226, 189, 228, 145, 246, 241, 228, 145, 228, 215, 228, 145, 247, 61, - 228, 145, 232, 171, 228, 145, 226, 215, 228, 145, 245, 158, 228, 145, - 223, 90, 224, 115, 228, 145, 223, 90, 224, 115, 234, 255, 223, 90, 224, - 115, 239, 112, 237, 231, 76, 231, 147, 76, 244, 95, 235, 0, 244, 95, 247, - 61, 250, 130, 247, 240, 250, 130, 247, 248, 250, 130, 169, 125, 47, 61, - 237, 170, 47, 184, 237, 170, 42, 228, 241, 232, 57, 76, 41, 228, 241, - 232, 57, 76, 228, 241, 237, 116, 232, 57, 76, 228, 241, 245, 62, 232, 57, - 76, 42, 47, 232, 57, 76, 41, 47, 232, 57, 76, 47, 237, 116, 232, 57, 76, - 47, 245, 62, 232, 57, 76, 250, 174, 47, 250, 174, 252, 83, 226, 75, 252, - 83, 168, 56, 237, 242, 135, 56, 237, 242, 169, 247, 249, 244, 93, 232, - 254, 237, 171, 229, 173, 233, 192, 229, 173, 237, 231, 247, 246, 231, - 147, 247, 246, 232, 243, 249, 200, 246, 249, 237, 231, 234, 0, 231, 147, - 234, 0, 235, 229, 235, 5, 228, 145, 233, 124, 236, 130, 53, 233, 124, - 227, 24, 226, 195, 53, 232, 205, 47, 232, 205, 226, 66, 232, 205, 200, - 232, 205, 200, 47, 232, 205, 200, 226, 66, 232, 205, 252, 9, 228, 241, - 237, 235, 254, 182, 232, 57, 76, 228, 241, 231, 151, 254, 182, 232, 57, - 76, 231, 228, 76, 47, 247, 149, 76, 239, 230, 234, 1, 225, 130, 116, 226, - 170, 252, 10, 239, 244, 232, 254, 254, 67, 244, 96, 252, 83, 246, 235, - 228, 194, 42, 37, 252, 115, 2, 232, 65, 41, 37, 252, 115, 2, 232, 65, 47, - 232, 69, 76, 232, 69, 247, 149, 76, 247, 149, 232, 69, 76, 226, 145, 5, - 247, 173, 200, 233, 38, 53, 86, 117, 252, 83, 86, 81, 252, 83, 184, 254, - 69, 200, 229, 186, 251, 83, 225, 116, 135, 254, 68, 254, 218, 224, 235, - 251, 53, 236, 121, 53, 227, 187, 250, 130, 239, 223, 225, 130, 247, 13, - 232, 171, 76, 152, 56, 232, 170, 232, 78, 232, 205, 246, 243, 56, 232, - 170, 247, 37, 56, 232, 170, 135, 56, 232, 170, 246, 243, 56, 76, 248, - 138, 250, 243, 226, 74, 61, 246, 243, 249, 138, 236, 228, 12, 228, 145, - 224, 92, 239, 112, 246, 216, 254, 141, 239, 221, 226, 156, 239, 221, 229, - 173, 239, 221, 233, 10, 239, 253, 227, 136, 227, 198, 255, 35, 227, 136, - 227, 198, 239, 253, 10, 211, 229, 127, 255, 35, 10, 211, 229, 127, 235, - 225, 21, 229, 128, 235, 1, 21, 229, 128, 227, 219, 223, 89, 227, 219, 7, - 3, 1, 74, 227, 219, 158, 227, 219, 173, 227, 219, 183, 227, 219, 194, - 227, 219, 187, 227, 219, 192, 227, 219, 79, 53, 227, 219, 236, 120, 227, - 219, 247, 204, 53, 227, 219, 42, 233, 180, 227, 219, 41, 233, 180, 227, - 219, 7, 3, 1, 199, 227, 253, 223, 89, 227, 253, 118, 227, 253, 113, 227, - 253, 166, 227, 253, 158, 227, 253, 173, 227, 253, 183, 227, 253, 194, - 227, 253, 187, 227, 253, 192, 227, 253, 79, 53, 227, 253, 236, 120, 227, - 253, 247, 204, 53, 227, 253, 42, 233, 180, 227, 253, 41, 233, 180, 7, - 227, 253, 3, 1, 57, 7, 227, 253, 3, 1, 72, 7, 227, 253, 3, 1, 73, 7, 227, - 253, 3, 1, 224, 73, 7, 227, 253, 3, 1, 230, 222, 247, 160, 53, 251, 62, - 53, 250, 237, 53, 246, 229, 246, 231, 53, 237, 159, 53, 236, 131, 53, - 235, 242, 53, 233, 108, 53, 231, 54, 53, 224, 100, 53, 139, 229, 100, 53, - 249, 147, 53, 247, 161, 53, 238, 187, 53, 225, 246, 53, 248, 122, 53, - 246, 111, 233, 131, 53, 233, 106, 53, 245, 215, 53, 254, 45, 53, 244, - 148, 53, 251, 228, 53, 36, 42, 245, 136, 46, 36, 41, 245, 136, 46, 36, - 182, 61, 237, 171, 234, 2, 36, 229, 63, 61, 237, 171, 234, 2, 36, 254, - 168, 67, 46, 36, 251, 84, 67, 46, 36, 42, 67, 46, 36, 41, 67, 46, 36, - 231, 140, 234, 2, 36, 251, 84, 231, 140, 234, 2, 36, 254, 168, 231, 140, - 234, 2, 36, 152, 197, 46, 36, 246, 243, 197, 46, 36, 247, 236, 251, 106, - 36, 247, 236, 228, 120, 36, 247, 236, 249, 250, 36, 247, 236, 251, 107, - 253, 63, 36, 42, 41, 67, 46, 36, 247, 236, 230, 218, 36, 247, 236, 238, - 230, 36, 247, 236, 225, 108, 232, 251, 226, 78, 36, 231, 193, 228, 162, - 234, 2, 36, 47, 61, 195, 234, 2, 36, 254, 174, 98, 36, 226, 66, 225, 132, - 36, 224, 117, 252, 102, 46, 36, 117, 67, 234, 2, 36, 182, 47, 228, 162, - 234, 2, 36, 81, 245, 136, 2, 171, 248, 124, 36, 117, 245, 136, 2, 171, - 248, 124, 36, 42, 67, 51, 36, 41, 67, 51, 36, 254, 70, 46, 255, 39, 234, - 87, 255, 26, 180, 226, 240, 228, 1, 159, 6, 252, 44, 250, 62, 251, 222, - 251, 219, 237, 171, 98, 252, 11, 234, 87, 252, 36, 225, 137, 247, 162, - 251, 30, 230, 216, 250, 62, 247, 116, 95, 3, 214, 95, 6, 212, 252, 148, - 6, 212, 159, 6, 212, 233, 20, 251, 30, 233, 20, 251, 31, 107, 135, 233, - 69, 95, 6, 74, 252, 148, 6, 74, 95, 6, 149, 95, 3, 149, 238, 47, 45, 253, - 36, 98, 159, 6, 199, 234, 196, 53, 228, 155, 231, 238, 251, 12, 95, 6, - 233, 244, 159, 6, 233, 244, 159, 6, 232, 139, 95, 6, 146, 252, 148, 6, - 146, 159, 6, 146, 232, 209, 227, 83, 231, 200, 229, 169, 76, 227, 29, 53, - 226, 94, 165, 53, 225, 31, 159, 6, 223, 119, 234, 12, 53, 234, 82, 53, - 239, 223, 234, 82, 53, 252, 148, 6, 223, 119, 209, 19, 3, 1, 239, 215, - 238, 250, 53, 254, 180, 53, 95, 6, 254, 27, 252, 148, 6, 252, 44, 247, - 176, 98, 95, 3, 72, 95, 6, 72, 95, 6, 247, 130, 209, 6, 247, 130, 95, 6, - 185, 95, 3, 73, 92, 98, 252, 201, 98, 246, 35, 98, 250, 161, 98, 240, 1, - 228, 153, 231, 106, 6, 232, 139, 247, 118, 53, 159, 3, 233, 69, 159, 3, - 246, 169, 159, 6, 246, 169, 159, 6, 233, 69, 159, 236, 4, 227, 230, 209, - 30, 6, 214, 209, 30, 6, 149, 200, 30, 6, 149, 209, 30, 6, 224, 25, 159, - 27, 6, 222, 222, 159, 27, 3, 222, 222, 159, 27, 3, 72, 159, 27, 3, 74, - 159, 27, 3, 239, 182, 232, 191, 237, 170, 209, 254, 193, 233, 124, 53, - 254, 235, 209, 3, 247, 130, 14, 32, 231, 4, 228, 153, 224, 189, 246, 235, - 168, 226, 213, 224, 189, 246, 235, 135, 226, 211, 224, 189, 246, 235, - 168, 247, 66, 224, 189, 246, 235, 135, 247, 65, 224, 189, 246, 235, 152, - 247, 65, 224, 189, 246, 235, 246, 243, 247, 65, 224, 189, 246, 235, 168, - 228, 210, 224, 189, 246, 235, 247, 37, 228, 208, 224, 189, 246, 235, 168, - 248, 16, 224, 189, 246, 235, 152, 248, 14, 224, 189, 246, 235, 247, 37, - 248, 14, 224, 189, 246, 235, 229, 163, 248, 14, 246, 235, 234, 197, 118, - 231, 115, 207, 118, 231, 115, 207, 113, 231, 115, 207, 166, 231, 115, - 207, 158, 231, 115, 207, 173, 231, 115, 207, 183, 231, 115, 207, 194, - 231, 115, 207, 187, 231, 115, 207, 192, 231, 115, 207, 227, 23, 231, 115, - 207, 247, 252, 231, 115, 207, 225, 218, 231, 115, 207, 247, 63, 231, 115, - 207, 168, 244, 135, 231, 115, 207, 247, 37, 244, 135, 231, 115, 207, 168, - 226, 194, 3, 231, 115, 207, 118, 3, 231, 115, 207, 113, 3, 231, 115, 207, - 166, 3, 231, 115, 207, 158, 3, 231, 115, 207, 173, 3, 231, 115, 207, 183, - 3, 231, 115, 207, 194, 3, 231, 115, 207, 187, 3, 231, 115, 207, 192, 3, - 231, 115, 207, 227, 23, 3, 231, 115, 207, 247, 252, 3, 231, 115, 207, - 225, 218, 3, 231, 115, 207, 247, 63, 3, 231, 115, 207, 168, 244, 135, 3, - 231, 115, 207, 247, 37, 244, 135, 3, 231, 115, 207, 168, 226, 194, 231, - 115, 207, 168, 226, 195, 252, 45, 222, 222, 231, 115, 207, 247, 37, 226, - 194, 231, 115, 207, 227, 24, 226, 194, 231, 115, 207, 200, 168, 244, 135, - 7, 3, 1, 200, 252, 44, 231, 115, 207, 228, 217, 238, 3, 15, 231, 115, - 207, 247, 64, 248, 50, 15, 231, 115, 207, 247, 64, 226, 194, 231, 115, - 207, 168, 244, 136, 226, 194, 117, 58, 225, 106, 58, 81, 58, 248, 125, - 58, 42, 41, 58, 99, 103, 58, 234, 245, 224, 131, 58, 234, 245, 248, 45, - 58, 228, 152, 248, 45, 58, 228, 152, 224, 131, 58, 117, 67, 2, 82, 81, - 67, 2, 82, 117, 224, 148, 58, 81, 224, 148, 58, 117, 135, 245, 117, 58, - 225, 106, 135, 245, 117, 58, 81, 135, 245, 117, 58, 248, 125, 135, 245, - 117, 58, 117, 67, 2, 227, 89, 81, 67, 2, 227, 89, 117, 67, 246, 224, 125, - 225, 106, 67, 246, 224, 125, 81, 67, 246, 224, 125, 248, 125, 67, 246, - 224, 125, 99, 103, 67, 2, 253, 24, 117, 67, 2, 88, 81, 67, 2, 88, 117, - 67, 2, 237, 124, 81, 67, 2, 237, 124, 42, 41, 224, 148, 58, 42, 41, 67, - 2, 82, 248, 125, 223, 38, 58, 225, 106, 67, 2, 226, 151, 237, 230, 225, - 106, 67, 2, 226, 151, 231, 145, 248, 125, 67, 2, 226, 151, 237, 230, 248, - 125, 67, 2, 226, 151, 231, 145, 81, 67, 2, 251, 11, 248, 124, 248, 125, - 67, 2, 251, 11, 237, 230, 254, 168, 226, 106, 229, 189, 58, 251, 84, 226, - 106, 229, 189, 58, 234, 245, 224, 131, 67, 180, 182, 125, 117, 67, 180, - 253, 36, 107, 81, 67, 180, 125, 254, 168, 234, 44, 251, 107, 58, 251, 84, - 234, 44, 251, 107, 58, 117, 245, 136, 2, 171, 225, 105, 117, 245, 136, 2, - 171, 248, 124, 225, 106, 245, 136, 2, 171, 231, 145, 225, 106, 245, 136, - 2, 171, 237, 230, 81, 245, 136, 2, 171, 225, 105, 81, 245, 136, 2, 171, - 248, 124, 248, 125, 245, 136, 2, 171, 231, 145, 248, 125, 245, 136, 2, - 171, 237, 230, 81, 67, 107, 117, 58, 225, 106, 67, 117, 106, 248, 125, - 58, 117, 67, 107, 81, 58, 117, 233, 232, 254, 92, 225, 106, 233, 232, - 254, 92, 81, 233, 232, 254, 92, 248, 125, 233, 232, 254, 92, 117, 245, - 136, 107, 81, 245, 135, 81, 245, 136, 107, 117, 245, 135, 117, 47, 67, 2, - 82, 42, 41, 47, 67, 2, 82, 81, 47, 67, 2, 82, 117, 47, 58, 225, 106, 47, - 58, 81, 47, 58, 248, 125, 47, 58, 42, 41, 47, 58, 99, 103, 47, 58, 234, - 245, 224, 131, 47, 58, 234, 245, 248, 45, 47, 58, 228, 152, 248, 45, 47, - 58, 228, 152, 224, 131, 47, 58, 117, 226, 66, 58, 81, 226, 66, 58, 117, - 228, 115, 58, 81, 228, 115, 58, 225, 106, 67, 2, 47, 82, 248, 125, 67, 2, - 47, 82, 117, 250, 129, 58, 225, 106, 250, 129, 58, 81, 250, 129, 58, 248, - 125, 250, 129, 58, 117, 67, 180, 125, 81, 67, 180, 125, 117, 63, 58, 225, - 106, 63, 58, 81, 63, 58, 248, 125, 63, 58, 225, 106, 63, 67, 246, 224, - 125, 225, 106, 63, 67, 234, 62, 233, 146, 225, 106, 63, 67, 234, 62, 233, - 147, 2, 169, 125, 225, 106, 63, 67, 234, 62, 233, 147, 2, 61, 125, 225, - 106, 63, 47, 58, 225, 106, 63, 47, 67, 234, 62, 233, 146, 81, 63, 67, - 246, 224, 224, 165, 234, 245, 224, 131, 67, 180, 251, 10, 228, 152, 248, - 45, 67, 180, 251, 10, 99, 103, 63, 58, 41, 67, 2, 3, 251, 106, 248, 125, - 67, 117, 106, 225, 106, 58, 152, 81, 254, 92, 117, 67, 2, 61, 82, 81, 67, - 2, 61, 82, 42, 41, 67, 2, 61, 82, 117, 67, 2, 47, 61, 82, 81, 67, 2, 47, - 61, 82, 42, 41, 67, 2, 47, 61, 82, 117, 234, 42, 58, 81, 234, 42, 58, 42, - 41, 234, 42, 58, 32, 254, 216, 251, 50, 233, 175, 249, 236, 226, 231, - 247, 145, 226, 231, 249, 154, 190, 247, 146, 247, 241, 229, 164, 240, 10, - 235, 250, 247, 254, 234, 87, 190, 254, 191, 247, 254, 234, 87, 3, 247, - 254, 234, 87, 251, 26, 254, 87, 236, 213, 249, 154, 190, 251, 28, 254, - 87, 236, 213, 3, 251, 26, 254, 87, 236, 213, 247, 233, 106, 232, 193, - 236, 4, 232, 200, 236, 4, 251, 15, 236, 4, 227, 230, 236, 121, 53, 236, - 119, 53, 56, 233, 10, 249, 181, 228, 194, 229, 165, 236, 120, 254, 70, - 234, 37, 231, 140, 234, 37, 252, 84, 234, 37, 37, 231, 111, 250, 232, - 231, 111, 246, 237, 231, 111, 232, 189, 96, 240, 3, 41, 254, 181, 254, - 181, 236, 232, 254, 181, 228, 137, 254, 181, 249, 183, 249, 154, 190, - 249, 186, 233, 185, 96, 190, 233, 185, 96, 237, 138, 254, 186, 237, 138, - 234, 31, 239, 227, 225, 127, 239, 239, 47, 239, 239, 226, 66, 239, 239, - 251, 22, 239, 239, 227, 209, 239, 239, 224, 199, 239, 239, 251, 84, 239, - 239, 251, 84, 251, 22, 239, 239, 254, 168, 251, 22, 239, 239, 226, 230, - 252, 233, 231, 252, 232, 190, 56, 236, 120, 247, 150, 246, 117, 232, 190, - 244, 220, 226, 159, 234, 37, 200, 205, 239, 223, 237, 250, 193, 228, 242, - 224, 147, 224, 86, 232, 200, 190, 205, 236, 121, 205, 254, 65, 105, 96, - 190, 254, 65, 105, 96, 254, 137, 105, 96, 254, 137, 252, 64, 190, 255, - 34, 105, 96, 235, 156, 254, 137, 234, 248, 255, 34, 105, 96, 254, 210, - 105, 96, 190, 254, 210, 105, 96, 254, 210, 105, 145, 105, 96, 226, 66, - 205, 254, 217, 105, 96, 247, 200, 96, 246, 116, 247, 200, 96, 249, 237, - 252, 195, 254, 139, 226, 240, 237, 178, 246, 116, 105, 96, 254, 137, 105, - 180, 145, 226, 240, 240, 29, 234, 87, 240, 29, 106, 145, 254, 137, 105, - 96, 251, 62, 247, 203, 247, 204, 251, 61, 231, 140, 240, 17, 105, 96, - 231, 140, 105, 96, 251, 4, 96, 247, 175, 247, 202, 96, 228, 59, 247, 203, - 250, 48, 105, 96, 105, 180, 252, 55, 250, 63, 236, 232, 252, 54, 232, 67, - 105, 96, 190, 105, 96, 244, 63, 96, 190, 244, 63, 96, 228, 25, 247, 200, - 96, 237, 213, 145, 105, 96, 245, 231, 145, 105, 96, 237, 213, 107, 105, - 96, 245, 231, 107, 105, 96, 237, 213, 252, 64, 190, 105, 96, 245, 231, - 252, 64, 190, 105, 96, 236, 62, 237, 212, 236, 62, 245, 230, 252, 195, - 190, 247, 200, 96, 190, 237, 212, 190, 245, 230, 235, 156, 237, 213, 234, - 248, 105, 96, 235, 156, 245, 231, 234, 248, 105, 96, 237, 213, 145, 247, - 200, 96, 245, 231, 145, 247, 200, 96, 235, 156, 237, 213, 234, 248, 247, - 200, 96, 235, 156, 245, 231, 234, 248, 247, 200, 96, 237, 213, 145, 245, - 230, 245, 231, 145, 237, 212, 235, 156, 237, 213, 234, 248, 245, 230, - 235, 156, 245, 231, 234, 248, 237, 212, 232, 213, 227, 243, 232, 214, - 145, 105, 96, 227, 244, 145, 105, 96, 232, 214, 145, 247, 200, 96, 227, - 244, 145, 247, 200, 96, 249, 154, 190, 232, 216, 249, 154, 190, 227, 245, - 227, 252, 234, 87, 227, 218, 234, 87, 190, 102, 227, 252, 234, 87, 190, - 102, 227, 218, 234, 87, 227, 252, 106, 145, 105, 96, 227, 218, 106, 145, - 105, 96, 235, 156, 102, 227, 252, 106, 234, 248, 105, 96, 235, 156, 102, - 227, 218, 106, 234, 248, 105, 96, 227, 252, 106, 2, 190, 105, 96, 227, - 218, 106, 2, 190, 105, 96, 236, 49, 236, 50, 236, 51, 236, 50, 225, 127, - 37, 240, 29, 234, 87, 37, 234, 27, 234, 87, 37, 240, 29, 106, 145, 105, - 96, 37, 234, 27, 106, 145, 105, 96, 37, 252, 16, 37, 250, 226, 33, 233, - 10, 33, 236, 120, 33, 226, 156, 33, 249, 181, 228, 194, 33, 56, 234, 37, - 33, 231, 140, 234, 37, 33, 254, 70, 234, 37, 33, 247, 203, 33, 250, 130, - 228, 119, 233, 10, 228, 119, 236, 120, 228, 119, 226, 156, 228, 119, 56, - 234, 37, 41, 227, 96, 42, 227, 96, 103, 227, 96, 99, 227, 96, 254, 73, - 236, 100, 226, 51, 246, 253, 226, 66, 61, 253, 36, 41, 225, 232, 47, 61, - 253, 36, 47, 41, 225, 232, 249, 154, 190, 232, 185, 190, 226, 51, 249, - 154, 190, 246, 254, 235, 159, 47, 61, 253, 36, 47, 41, 225, 232, 232, - 214, 225, 134, 231, 221, 227, 244, 225, 134, 231, 221, 234, 246, 228, 4, - 234, 87, 251, 26, 254, 87, 234, 246, 228, 3, 234, 246, 228, 4, 106, 145, - 105, 96, 251, 26, 254, 87, 234, 246, 228, 4, 145, 105, 96, 234, 27, 234, - 87, 240, 29, 234, 87, 236, 55, 245, 93, 251, 36, 237, 0, 239, 236, 224, - 52, 235, 235, 234, 247, 41, 254, 182, 2, 254, 122, 41, 226, 78, 236, 4, - 237, 138, 254, 186, 236, 4, 237, 138, 234, 31, 236, 4, 239, 227, 236, 4, - 225, 127, 249, 251, 234, 37, 56, 234, 37, 228, 59, 234, 37, 249, 181, - 226, 156, 252, 119, 42, 234, 246, 247, 117, 229, 185, 232, 200, 41, 234, - 246, 247, 117, 229, 185, 232, 200, 42, 229, 185, 232, 200, 41, 229, 185, - 232, 200, 200, 226, 159, 247, 203, 250, 223, 237, 138, 234, 31, 250, 223, - 237, 138, 254, 186, 47, 227, 251, 47, 227, 217, 47, 239, 227, 47, 225, - 127, 233, 28, 105, 22, 233, 185, 96, 237, 213, 2, 249, 140, 245, 231, 2, - 249, 140, 224, 234, 236, 62, 237, 212, 224, 234, 236, 62, 245, 230, 237, - 213, 105, 180, 145, 245, 230, 245, 231, 105, 180, 145, 237, 212, 105, - 180, 145, 237, 212, 105, 180, 145, 245, 230, 105, 180, 145, 232, 213, - 105, 180, 145, 227, 243, 249, 154, 190, 232, 217, 145, 247, 205, 249, - 154, 190, 227, 246, 145, 247, 205, 190, 37, 240, 29, 106, 145, 105, 96, - 190, 37, 234, 27, 106, 145, 105, 96, 37, 240, 29, 106, 145, 190, 105, 96, - 37, 234, 27, 106, 145, 190, 105, 96, 237, 213, 252, 64, 190, 247, 200, - 96, 245, 231, 252, 64, 190, 247, 200, 96, 232, 214, 252, 64, 190, 247, - 200, 96, 227, 244, 252, 64, 190, 247, 200, 96, 190, 234, 246, 228, 4, - 234, 87, 249, 154, 190, 251, 28, 254, 87, 234, 246, 228, 3, 190, 234, - 246, 228, 4, 106, 145, 105, 96, 249, 154, 190, 251, 28, 254, 87, 234, - 246, 228, 4, 145, 247, 205, 61, 247, 249, 236, 152, 169, 247, 249, 99, - 41, 250, 1, 247, 249, 103, 41, 250, 1, 247, 249, 247, 254, 106, 2, 182, - 169, 82, 247, 254, 106, 2, 61, 253, 36, 254, 63, 247, 233, 106, 169, 82, - 3, 247, 254, 106, 2, 61, 253, 36, 254, 63, 247, 233, 106, 169, 82, 247, - 254, 106, 2, 56, 46, 247, 254, 106, 2, 234, 5, 3, 247, 254, 106, 2, 234, - 5, 247, 254, 106, 2, 225, 133, 247, 254, 106, 2, 135, 169, 228, 10, 251, - 26, 2, 182, 169, 82, 251, 26, 2, 61, 253, 36, 254, 63, 247, 233, 106, - 169, 82, 3, 251, 26, 2, 61, 253, 36, 254, 63, 247, 233, 106, 169, 82, - 251, 26, 2, 234, 5, 3, 251, 26, 2, 234, 5, 223, 120, 150, 253, 59, 236, - 212, 249, 252, 53, 248, 0, 58, 244, 153, 99, 254, 93, 103, 254, 93, 232, - 196, 233, 111, 224, 146, 237, 170, 42, 251, 224, 41, 251, 224, 42, 247, - 17, 41, 247, 17, 252, 126, 41, 250, 245, 252, 126, 42, 250, 245, 226, - 106, 41, 250, 245, 226, 106, 42, 250, 245, 200, 190, 53, 37, 237, 113, - 254, 122, 230, 199, 230, 204, 227, 29, 231, 239, 232, 239, 240, 7, 224, - 222, 228, 120, 233, 23, 106, 239, 235, 53, 209, 190, 53, 224, 153, 244, - 154, 226, 106, 42, 251, 10, 226, 106, 41, 251, 10, 252, 126, 42, 251, 10, - 252, 126, 41, 251, 10, 226, 106, 132, 239, 239, 252, 126, 132, 239, 239, - 246, 222, 228, 180, 99, 254, 94, 252, 196, 135, 169, 253, 26, 234, 32, - 238, 232, 247, 196, 180, 226, 240, 231, 153, 224, 74, 240, 17, 102, 231, - 237, 252, 118, 238, 231, 237, 235, 254, 182, 104, 231, 151, 254, 182, - 104, 247, 196, 180, 226, 240, 237, 237, 252, 207, 231, 139, 250, 200, - 254, 217, 254, 101, 227, 135, 226, 98, 231, 59, 249, 219, 234, 28, 251, - 38, 227, 68, 228, 189, 251, 1, 251, 0, 162, 163, 14, 244, 78, 162, 163, - 14, 228, 113, 232, 81, 162, 163, 14, 232, 82, 247, 205, 162, 163, 14, - 232, 82, 249, 186, 162, 163, 14, 232, 82, 249, 250, 162, 163, 14, 232, - 82, 239, 105, 162, 163, 14, 232, 82, 251, 106, 162, 163, 14, 251, 107, - 228, 44, 162, 163, 14, 251, 107, 239, 105, 162, 163, 14, 228, 195, 125, - 162, 163, 14, 253, 64, 125, 162, 163, 14, 232, 82, 228, 194, 162, 163, - 14, 232, 82, 253, 63, 162, 163, 14, 232, 82, 237, 212, 162, 163, 14, 232, - 82, 245, 230, 162, 163, 14, 117, 225, 60, 162, 163, 14, 81, 225, 60, 162, - 163, 14, 232, 82, 117, 58, 162, 163, 14, 232, 82, 81, 58, 162, 163, 14, - 251, 107, 253, 63, 162, 163, 14, 103, 227, 97, 225, 133, 162, 163, 14, - 250, 48, 228, 44, 162, 163, 14, 232, 82, 103, 252, 9, 162, 163, 14, 232, - 82, 250, 47, 162, 163, 14, 103, 227, 97, 239, 105, 162, 163, 14, 225, - 106, 225, 60, 162, 163, 14, 232, 82, 225, 106, 58, 162, 163, 14, 99, 227, - 97, 234, 5, 162, 163, 14, 250, 57, 228, 44, 162, 163, 14, 232, 82, 99, - 252, 9, 162, 163, 14, 232, 82, 250, 56, 162, 163, 14, 99, 227, 97, 239, - 105, 162, 163, 14, 248, 125, 225, 60, 162, 163, 14, 232, 82, 248, 125, - 58, 162, 163, 14, 232, 56, 225, 133, 162, 163, 14, 250, 48, 225, 133, - 162, 163, 14, 249, 251, 225, 133, 162, 163, 14, 239, 106, 225, 133, 162, - 163, 14, 251, 107, 225, 133, 162, 163, 14, 99, 229, 69, 239, 105, 162, - 163, 14, 232, 56, 232, 81, 162, 163, 14, 251, 107, 228, 58, 162, 163, 14, - 232, 82, 251, 61, 162, 163, 14, 99, 227, 97, 219, 162, 163, 14, 250, 57, - 219, 162, 163, 14, 228, 59, 219, 162, 163, 14, 239, 106, 219, 162, 163, - 14, 251, 107, 219, 162, 163, 14, 103, 229, 69, 228, 44, 162, 163, 14, 42, - 229, 69, 228, 44, 162, 163, 14, 226, 159, 219, 162, 163, 14, 245, 231, - 219, 162, 163, 14, 251, 55, 125, 162, 163, 14, 250, 57, 205, 162, 163, - 14, 223, 37, 162, 163, 14, 228, 45, 205, 162, 163, 14, 229, 187, 225, - 133, 162, 163, 14, 232, 82, 190, 247, 205, 162, 163, 14, 232, 82, 232, - 68, 162, 163, 14, 103, 252, 10, 205, 162, 163, 14, 99, 252, 10, 205, 162, - 163, 14, 239, 215, 162, 163, 14, 231, 182, 162, 163, 14, 234, 66, 162, - 163, 14, 254, 206, 225, 133, 162, 163, 14, 247, 207, 225, 133, 162, 163, - 14, 239, 216, 225, 133, 162, 163, 14, 234, 67, 225, 133, 162, 163, 14, - 254, 205, 190, 251, 181, 76, 41, 254, 182, 2, 248, 125, 223, 38, 58, 229, - 48, 234, 44, 252, 118, 252, 216, 98, 61, 237, 171, 2, 236, 154, 249, 140, - 239, 244, 98, 251, 23, 225, 131, 98, 249, 197, 225, 131, 98, 247, 243, - 98, 251, 46, 98, 63, 37, 2, 251, 219, 61, 237, 170, 247, 223, 98, 254, - 201, 238, 233, 98, 245, 103, 98, 33, 169, 253, 36, 2, 234, 241, 33, 226, - 79, 248, 127, 252, 99, 251, 107, 2, 234, 244, 58, 225, 129, 98, 236, 89, - 98, 244, 91, 98, 234, 43, 245, 171, 98, 234, 43, 238, 45, 98, 233, 170, - 98, 233, 169, 98, 249, 201, 250, 221, 14, 211, 113, 228, 164, 98, 162, - 163, 14, 232, 81, 250, 71, 229, 174, 238, 233, 98, 232, 207, 233, 233, - 235, 142, 233, 233, 232, 204, 230, 219, 98, 251, 94, 230, 219, 98, 42, - 233, 181, 225, 113, 88, 42, 233, 181, 247, 141, 42, 233, 181, 203, 88, - 41, 233, 181, 225, 113, 88, 41, 233, 181, 247, 141, 41, 233, 181, 203, - 88, 42, 37, 252, 115, 225, 113, 251, 10, 42, 37, 252, 115, 247, 141, 42, - 37, 252, 115, 203, 251, 10, 41, 37, 252, 115, 225, 113, 251, 10, 41, 37, - 252, 115, 247, 141, 41, 37, 252, 115, 203, 251, 10, 42, 250, 223, 252, - 115, 225, 113, 88, 42, 250, 223, 252, 115, 236, 154, 233, 63, 42, 250, - 223, 252, 115, 203, 88, 250, 223, 252, 115, 247, 141, 41, 250, 223, 252, - 115, 225, 113, 88, 41, 250, 223, 252, 115, 236, 154, 233, 63, 41, 250, - 223, 252, 115, 203, 88, 239, 240, 247, 141, 169, 237, 171, 247, 141, 225, - 113, 42, 145, 203, 41, 250, 223, 252, 115, 230, 205, 225, 113, 41, 145, - 203, 42, 250, 223, 252, 115, 230, 205, 227, 231, 226, 105, 227, 231, 252, - 125, 226, 106, 37, 104, 252, 126, 37, 104, 252, 126, 37, 252, 115, 107, - 226, 106, 37, 104, 29, 14, 252, 125, 42, 61, 77, 237, 170, 41, 61, 77, - 237, 170, 169, 230, 228, 237, 169, 169, 230, 228, 237, 168, 169, 230, - 228, 237, 167, 169, 230, 228, 237, 166, 250, 40, 14, 157, 61, 22, 226, - 106, 231, 153, 250, 40, 14, 157, 61, 22, 252, 126, 231, 153, 250, 40, 14, - 157, 61, 2, 251, 106, 250, 40, 14, 157, 103, 22, 169, 2, 251, 106, 250, - 40, 14, 157, 99, 22, 169, 2, 251, 106, 250, 40, 14, 157, 61, 2, 226, 78, - 250, 40, 14, 157, 103, 22, 169, 2, 226, 78, 250, 40, 14, 157, 99, 22, - 169, 2, 226, 78, 250, 40, 14, 157, 61, 22, 224, 147, 250, 40, 14, 157, - 103, 22, 169, 2, 224, 147, 250, 40, 14, 157, 99, 22, 169, 2, 224, 147, - 250, 40, 14, 157, 103, 22, 244, 212, 250, 40, 14, 157, 99, 22, 244, 212, - 250, 40, 14, 157, 61, 22, 226, 106, 237, 237, 250, 40, 14, 157, 61, 22, - 252, 126, 237, 237, 37, 247, 2, 231, 195, 98, 248, 10, 98, 61, 237, 171, - 247, 141, 236, 194, 252, 106, 236, 194, 182, 107, 229, 62, 236, 194, 229, - 63, 107, 237, 134, 236, 194, 182, 107, 135, 229, 50, 236, 194, 135, 229, - 51, 107, 237, 134, 236, 194, 135, 229, 51, 239, 113, 236, 194, 226, 63, - 236, 194, 227, 3, 236, 194, 233, 128, 248, 49, 245, 225, 246, 209, 226, - 106, 233, 180, 252, 126, 233, 180, 226, 106, 250, 223, 104, 252, 126, - 250, 223, 104, 226, 106, 226, 100, 229, 104, 104, 252, 126, 226, 100, - 229, 104, 104, 63, 226, 89, 252, 207, 231, 140, 2, 251, 106, 228, 31, - 247, 23, 255, 44, 250, 220, 247, 255, 239, 227, 14, 32, 234, 200, 14, 32, - 228, 56, 106, 245, 116, 14, 32, 228, 56, 106, 226, 255, 14, 32, 247, 233, - 106, 226, 255, 14, 32, 247, 233, 106, 226, 92, 14, 32, 247, 224, 14, 32, - 255, 37, 14, 32, 252, 215, 14, 32, 253, 62, 14, 32, 169, 227, 98, 14, 32, - 237, 171, 247, 90, 14, 32, 61, 227, 98, 14, 32, 211, 247, 90, 14, 32, - 252, 3, 231, 194, 14, 32, 229, 86, 234, 10, 14, 32, 229, 86, 240, 16, 14, - 32, 250, 126, 237, 163, 247, 185, 14, 32, 250, 28, 251, 18, 118, 14, 32, - 250, 28, 251, 18, 113, 14, 32, 250, 28, 251, 18, 166, 14, 32, 250, 28, - 251, 18, 158, 14, 32, 235, 157, 255, 37, 14, 32, 227, 132, 240, 74, 14, - 32, 247, 233, 106, 226, 93, 252, 142, 14, 32, 252, 24, 14, 32, 247, 233, - 106, 236, 227, 14, 32, 227, 249, 14, 32, 247, 185, 14, 32, 247, 56, 229, - 173, 14, 32, 245, 224, 229, 173, 14, 32, 231, 240, 229, 173, 14, 32, 225, - 126, 229, 173, 14, 32, 228, 145, 14, 32, 250, 54, 252, 145, 98, 234, 44, - 252, 118, 14, 32, 235, 144, 14, 32, 250, 55, 211, 113, 14, 32, 227, 250, - 211, 113, 234, 92, 88, 234, 92, 251, 200, 234, 92, 246, 252, 234, 92, - 239, 223, 246, 252, 234, 92, 252, 213, 252, 89, 234, 92, 252, 122, 226, - 170, 234, 92, 252, 113, 253, 39, 244, 62, 234, 92, 254, 194, 106, 251, - 180, 234, 92, 250, 130, 234, 92, 250, 214, 255, 39, 234, 198, 234, 92, - 47, 253, 63, 33, 21, 118, 33, 21, 113, 33, 21, 166, 33, 21, 158, 33, 21, - 173, 33, 21, 183, 33, 21, 194, 33, 21, 187, 33, 21, 192, 33, 65, 227, 23, - 33, 65, 247, 252, 33, 65, 225, 218, 33, 65, 226, 209, 33, 65, 246, 238, - 33, 65, 247, 67, 33, 65, 228, 212, 33, 65, 229, 161, 33, 65, 248, 18, 33, - 65, 235, 59, 33, 65, 225, 216, 93, 21, 118, 93, 21, 113, 93, 21, 166, 93, - 21, 158, 93, 21, 173, 93, 21, 183, 93, 21, 194, 93, 21, 187, 93, 21, 192, - 93, 65, 227, 23, 93, 65, 247, 252, 93, 65, 225, 218, 93, 65, 226, 209, - 93, 65, 246, 238, 93, 65, 247, 67, 93, 65, 228, 212, 93, 65, 229, 161, - 93, 65, 248, 18, 93, 65, 235, 59, 93, 65, 225, 216, 21, 168, 246, 218, - 228, 38, 21, 135, 246, 218, 228, 38, 21, 152, 246, 218, 228, 38, 21, 246, - 243, 246, 218, 228, 38, 21, 247, 37, 246, 218, 228, 38, 21, 228, 217, - 246, 218, 228, 38, 21, 229, 163, 246, 218, 228, 38, 21, 248, 20, 246, - 218, 228, 38, 21, 235, 61, 246, 218, 228, 38, 65, 227, 24, 246, 218, 228, - 38, 65, 247, 253, 246, 218, 228, 38, 65, 225, 219, 246, 218, 228, 38, 65, - 226, 210, 246, 218, 228, 38, 65, 246, 239, 246, 218, 228, 38, 65, 247, - 68, 246, 218, 228, 38, 65, 228, 213, 246, 218, 228, 38, 65, 229, 162, - 246, 218, 228, 38, 65, 248, 19, 246, 218, 228, 38, 65, 235, 60, 246, 218, - 228, 38, 65, 225, 217, 246, 218, 228, 38, 93, 7, 3, 1, 57, 93, 7, 3, 1, - 254, 27, 93, 7, 3, 1, 252, 44, 93, 7, 3, 1, 222, 222, 93, 7, 3, 1, 72, - 93, 7, 3, 1, 247, 130, 93, 7, 3, 1, 214, 93, 7, 3, 1, 212, 93, 7, 3, 1, - 74, 93, 7, 3, 1, 239, 182, 93, 7, 3, 1, 239, 76, 93, 7, 3, 1, 149, 93, 7, - 3, 1, 185, 93, 7, 3, 1, 199, 93, 7, 3, 1, 73, 93, 7, 3, 1, 233, 244, 93, - 7, 3, 1, 232, 139, 93, 7, 3, 1, 146, 93, 7, 3, 1, 193, 93, 7, 3, 1, 227, - 109, 93, 7, 3, 1, 66, 93, 7, 3, 1, 196, 93, 7, 3, 1, 224, 174, 93, 7, 3, - 1, 224, 73, 93, 7, 3, 1, 224, 25, 93, 7, 3, 1, 223, 119, 33, 7, 6, 1, 57, - 33, 7, 6, 1, 254, 27, 33, 7, 6, 1, 252, 44, 33, 7, 6, 1, 222, 222, 33, 7, - 6, 1, 72, 33, 7, 6, 1, 247, 130, 33, 7, 6, 1, 214, 33, 7, 6, 1, 212, 33, - 7, 6, 1, 74, 33, 7, 6, 1, 239, 182, 33, 7, 6, 1, 239, 76, 33, 7, 6, 1, - 149, 33, 7, 6, 1, 185, 33, 7, 6, 1, 199, 33, 7, 6, 1, 73, 33, 7, 6, 1, - 233, 244, 33, 7, 6, 1, 232, 139, 33, 7, 6, 1, 146, 33, 7, 6, 1, 193, 33, - 7, 6, 1, 227, 109, 33, 7, 6, 1, 66, 33, 7, 6, 1, 196, 33, 7, 6, 1, 224, - 174, 33, 7, 6, 1, 224, 73, 33, 7, 6, 1, 224, 25, 33, 7, 6, 1, 223, 119, - 33, 7, 3, 1, 57, 33, 7, 3, 1, 254, 27, 33, 7, 3, 1, 252, 44, 33, 7, 3, 1, - 222, 222, 33, 7, 3, 1, 72, 33, 7, 3, 1, 247, 130, 33, 7, 3, 1, 214, 33, - 7, 3, 1, 212, 33, 7, 3, 1, 74, 33, 7, 3, 1, 239, 182, 33, 7, 3, 1, 239, - 76, 33, 7, 3, 1, 149, 33, 7, 3, 1, 185, 33, 7, 3, 1, 199, 33, 7, 3, 1, - 73, 33, 7, 3, 1, 233, 244, 33, 7, 3, 1, 232, 139, 33, 7, 3, 1, 146, 33, - 7, 3, 1, 193, 33, 7, 3, 1, 227, 109, 33, 7, 3, 1, 66, 33, 7, 3, 1, 196, - 33, 7, 3, 1, 224, 174, 33, 7, 3, 1, 224, 73, 33, 7, 3, 1, 224, 25, 33, 7, - 3, 1, 223, 119, 33, 21, 223, 89, 235, 157, 33, 65, 247, 252, 235, 157, - 33, 65, 225, 218, 235, 157, 33, 65, 226, 209, 235, 157, 33, 65, 246, 238, - 235, 157, 33, 65, 247, 67, 235, 157, 33, 65, 228, 212, 235, 157, 33, 65, - 229, 161, 235, 157, 33, 65, 248, 18, 235, 157, 33, 65, 235, 59, 235, 157, - 33, 65, 225, 216, 47, 33, 21, 118, 47, 33, 21, 113, 47, 33, 21, 166, 47, - 33, 21, 158, 47, 33, 21, 173, 47, 33, 21, 183, 47, 33, 21, 194, 47, 33, - 21, 187, 47, 33, 21, 192, 47, 33, 65, 227, 23, 235, 157, 33, 21, 223, 89, - 77, 80, 157, 244, 212, 77, 80, 112, 244, 212, 77, 80, 157, 225, 30, 77, - 80, 112, 225, 30, 77, 80, 157, 226, 66, 250, 131, 244, 212, 77, 80, 112, - 226, 66, 250, 131, 244, 212, 77, 80, 157, 226, 66, 250, 131, 225, 30, 77, - 80, 112, 226, 66, 250, 131, 225, 30, 77, 80, 157, 232, 78, 250, 131, 244, - 212, 77, 80, 112, 232, 78, 250, 131, 244, 212, 77, 80, 157, 232, 78, 250, - 131, 225, 30, 77, 80, 112, 232, 78, 250, 131, 225, 30, 77, 80, 157, 103, - 22, 231, 153, 77, 80, 103, 157, 22, 41, 245, 110, 77, 80, 103, 112, 22, - 41, 237, 184, 77, 80, 112, 103, 22, 231, 153, 77, 80, 157, 103, 22, 237, - 237, 77, 80, 103, 157, 22, 42, 245, 110, 77, 80, 103, 112, 22, 42, 237, - 184, 77, 80, 112, 103, 22, 237, 237, 77, 80, 157, 99, 22, 231, 153, 77, - 80, 99, 157, 22, 41, 245, 110, 77, 80, 99, 112, 22, 41, 237, 184, 77, 80, - 112, 99, 22, 231, 153, 77, 80, 157, 99, 22, 237, 237, 77, 80, 99, 157, - 22, 42, 245, 110, 77, 80, 99, 112, 22, 42, 237, 184, 77, 80, 112, 99, 22, - 237, 237, 77, 80, 157, 61, 22, 231, 153, 77, 80, 61, 157, 22, 41, 245, - 110, 77, 80, 99, 112, 22, 41, 103, 237, 184, 77, 80, 103, 112, 22, 41, - 99, 237, 184, 77, 80, 61, 112, 22, 41, 237, 184, 77, 80, 103, 157, 22, - 41, 99, 245, 110, 77, 80, 99, 157, 22, 41, 103, 245, 110, 77, 80, 112, - 61, 22, 231, 153, 77, 80, 157, 61, 22, 237, 237, 77, 80, 61, 157, 22, 42, - 245, 110, 77, 80, 99, 112, 22, 42, 103, 237, 184, 77, 80, 103, 112, 22, - 42, 99, 237, 184, 77, 80, 61, 112, 22, 42, 237, 184, 77, 80, 103, 157, - 22, 42, 99, 245, 110, 77, 80, 99, 157, 22, 42, 103, 245, 110, 77, 80, - 112, 61, 22, 237, 237, 77, 80, 157, 103, 22, 244, 212, 77, 80, 42, 112, - 22, 41, 103, 237, 184, 77, 80, 41, 112, 22, 42, 103, 237, 184, 77, 80, - 103, 157, 22, 169, 245, 110, 77, 80, 103, 112, 22, 169, 237, 184, 77, 80, - 41, 157, 22, 42, 103, 245, 110, 77, 80, 42, 157, 22, 41, 103, 245, 110, - 77, 80, 112, 103, 22, 244, 212, 77, 80, 157, 99, 22, 244, 212, 77, 80, - 42, 112, 22, 41, 99, 237, 184, 77, 80, 41, 112, 22, 42, 99, 237, 184, 77, - 80, 99, 157, 22, 169, 245, 110, 77, 80, 99, 112, 22, 169, 237, 184, 77, - 80, 41, 157, 22, 42, 99, 245, 110, 77, 80, 42, 157, 22, 41, 99, 245, 110, - 77, 80, 112, 99, 22, 244, 212, 77, 80, 157, 61, 22, 244, 212, 77, 80, 42, - 112, 22, 41, 61, 237, 184, 77, 80, 41, 112, 22, 42, 61, 237, 184, 77, 80, - 61, 157, 22, 169, 245, 110, 77, 80, 99, 112, 22, 103, 169, 237, 184, 77, - 80, 103, 112, 22, 99, 169, 237, 184, 77, 80, 61, 112, 22, 169, 237, 184, - 77, 80, 42, 99, 112, 22, 41, 103, 237, 184, 77, 80, 41, 99, 112, 22, 42, - 103, 237, 184, 77, 80, 42, 103, 112, 22, 41, 99, 237, 184, 77, 80, 41, - 103, 112, 22, 42, 99, 237, 184, 77, 80, 103, 157, 22, 99, 169, 245, 110, - 77, 80, 99, 157, 22, 103, 169, 245, 110, 77, 80, 41, 157, 22, 42, 61, - 245, 110, 77, 80, 42, 157, 22, 41, 61, 245, 110, 77, 80, 112, 61, 22, - 244, 212, 77, 80, 157, 47, 250, 131, 244, 212, 77, 80, 112, 47, 250, 131, - 244, 212, 77, 80, 157, 47, 250, 131, 225, 30, 77, 80, 112, 47, 250, 131, - 225, 30, 77, 80, 47, 244, 212, 77, 80, 47, 225, 30, 77, 80, 103, 228, - 241, 22, 41, 248, 133, 77, 80, 103, 47, 22, 41, 228, 240, 77, 80, 47, - 103, 22, 231, 153, 77, 80, 103, 228, 241, 22, 42, 248, 133, 77, 80, 103, - 47, 22, 42, 228, 240, 77, 80, 47, 103, 22, 237, 237, 77, 80, 99, 228, - 241, 22, 41, 248, 133, 77, 80, 99, 47, 22, 41, 228, 240, 77, 80, 47, 99, - 22, 231, 153, 77, 80, 99, 228, 241, 22, 42, 248, 133, 77, 80, 99, 47, 22, - 42, 228, 240, 77, 80, 47, 99, 22, 237, 237, 77, 80, 61, 228, 241, 22, 41, - 248, 133, 77, 80, 61, 47, 22, 41, 228, 240, 77, 80, 47, 61, 22, 231, 153, - 77, 80, 61, 228, 241, 22, 42, 248, 133, 77, 80, 61, 47, 22, 42, 228, 240, - 77, 80, 47, 61, 22, 237, 237, 77, 80, 103, 228, 241, 22, 169, 248, 133, - 77, 80, 103, 47, 22, 169, 228, 240, 77, 80, 47, 103, 22, 244, 212, 77, - 80, 99, 228, 241, 22, 169, 248, 133, 77, 80, 99, 47, 22, 169, 228, 240, - 77, 80, 47, 99, 22, 244, 212, 77, 80, 61, 228, 241, 22, 169, 248, 133, - 77, 80, 61, 47, 22, 169, 228, 240, 77, 80, 47, 61, 22, 244, 212, 77, 80, - 157, 254, 123, 103, 22, 231, 153, 77, 80, 157, 254, 123, 103, 22, 237, - 237, 77, 80, 157, 254, 123, 99, 22, 237, 237, 77, 80, 157, 254, 123, 99, - 22, 231, 153, 77, 80, 157, 250, 1, 225, 113, 41, 180, 203, 237, 237, 77, - 80, 157, 250, 1, 225, 113, 42, 180, 203, 231, 153, 77, 80, 157, 250, 1, - 250, 243, 77, 80, 157, 237, 237, 77, 80, 157, 225, 116, 77, 80, 157, 231, - 153, 77, 80, 157, 248, 127, 77, 80, 112, 237, 237, 77, 80, 112, 225, 116, - 77, 80, 112, 231, 153, 77, 80, 112, 248, 127, 77, 80, 157, 42, 22, 112, - 231, 153, 77, 80, 157, 99, 22, 112, 248, 127, 77, 80, 112, 42, 22, 157, - 231, 153, 77, 80, 112, 99, 22, 157, 248, 127, 225, 113, 132, 252, 142, - 203, 168, 248, 17, 252, 142, 203, 168, 232, 77, 252, 142, 203, 152, 248, - 15, 252, 142, 203, 132, 252, 142, 203, 247, 37, 248, 15, 252, 142, 203, - 152, 232, 75, 252, 142, 203, 229, 163, 248, 15, 252, 142, 246, 218, 252, - 142, 42, 229, 163, 248, 15, 252, 142, 42, 152, 232, 75, 252, 142, 42, - 247, 37, 248, 15, 252, 142, 42, 132, 252, 142, 42, 152, 248, 15, 252, - 142, 42, 168, 232, 77, 252, 142, 42, 168, 248, 17, 252, 142, 41, 132, - 252, 142, 157, 229, 136, 236, 228, 229, 136, 250, 136, 229, 136, 225, - 113, 168, 248, 17, 252, 142, 41, 168, 248, 17, 252, 142, 232, 80, 203, - 237, 237, 232, 80, 203, 231, 153, 232, 80, 225, 113, 237, 237, 232, 80, - 225, 113, 42, 22, 203, 42, 22, 203, 231, 153, 232, 80, 225, 113, 42, 22, - 203, 231, 153, 232, 80, 225, 113, 42, 22, 225, 113, 41, 22, 203, 237, - 237, 232, 80, 225, 113, 42, 22, 225, 113, 41, 22, 203, 231, 153, 232, 80, - 225, 113, 231, 153, 232, 80, 225, 113, 41, 22, 203, 237, 237, 232, 80, - 225, 113, 41, 22, 203, 42, 22, 203, 231, 153, 86, 228, 120, 63, 228, 120, - 63, 37, 2, 231, 102, 251, 9, 63, 37, 251, 27, 86, 3, 228, 120, 37, 2, - 169, 247, 54, 37, 2, 61, 247, 54, 37, 2, 234, 22, 250, 239, 247, 54, 37, - 2, 225, 113, 42, 180, 203, 41, 247, 54, 37, 2, 225, 113, 41, 180, 203, - 42, 247, 54, 37, 2, 250, 1, 250, 239, 247, 54, 86, 3, 228, 120, 63, 3, - 228, 120, 86, 231, 236, 63, 231, 236, 86, 61, 231, 236, 63, 61, 231, 236, - 86, 233, 183, 63, 233, 183, 86, 225, 115, 226, 78, 63, 225, 115, 226, 78, - 86, 225, 115, 3, 226, 78, 63, 225, 115, 3, 226, 78, 86, 231, 151, 226, - 78, 63, 231, 151, 226, 78, 86, 231, 151, 3, 226, 78, 63, 231, 151, 3, - 226, 78, 86, 231, 151, 232, 252, 63, 231, 151, 232, 252, 86, 248, 126, - 226, 78, 63, 248, 126, 226, 78, 86, 248, 126, 3, 226, 78, 63, 248, 126, - 3, 226, 78, 86, 237, 235, 226, 78, 63, 237, 235, 226, 78, 86, 237, 235, - 3, 226, 78, 63, 237, 235, 3, 226, 78, 86, 237, 235, 232, 252, 63, 237, - 235, 232, 252, 86, 249, 250, 63, 249, 250, 63, 249, 251, 251, 27, 86, 3, - 249, 250, 247, 42, 237, 113, 63, 251, 106, 248, 138, 251, 106, 251, 107, - 2, 61, 247, 54, 252, 81, 86, 251, 106, 251, 107, 2, 42, 132, 252, 150, - 251, 107, 2, 41, 132, 252, 150, 251, 107, 2, 203, 132, 252, 150, 251, - 107, 2, 225, 113, 132, 252, 150, 251, 107, 2, 225, 113, 41, 232, 80, 252, - 150, 251, 107, 2, 254, 217, 252, 64, 225, 113, 42, 232, 80, 252, 150, 42, - 132, 86, 251, 106, 41, 132, 86, 251, 106, 239, 224, 252, 83, 239, 224, - 63, 251, 106, 225, 113, 132, 239, 224, 63, 251, 106, 203, 132, 239, 224, - 63, 251, 106, 225, 113, 42, 232, 80, 251, 104, 254, 122, 225, 113, 41, - 232, 80, 251, 104, 254, 122, 203, 41, 232, 80, 251, 104, 254, 122, 203, - 42, 232, 80, 251, 104, 254, 122, 225, 113, 132, 251, 106, 203, 132, 251, - 106, 86, 203, 41, 226, 78, 86, 203, 42, 226, 78, 86, 225, 113, 42, 226, - 78, 86, 225, 113, 41, 226, 78, 63, 252, 83, 37, 2, 42, 132, 252, 150, 37, - 2, 41, 132, 252, 150, 37, 2, 225, 113, 42, 250, 1, 132, 252, 150, 37, 2, - 203, 41, 250, 1, 132, 252, 150, 63, 37, 2, 61, 252, 160, 237, 170, 63, - 225, 115, 226, 79, 2, 249, 140, 225, 115, 226, 79, 2, 42, 132, 252, 150, - 225, 115, 226, 79, 2, 41, 132, 252, 150, 238, 9, 251, 106, 63, 37, 2, - 225, 113, 42, 232, 79, 63, 37, 2, 203, 42, 232, 79, 63, 37, 2, 203, 41, - 232, 79, 63, 37, 2, 225, 113, 41, 232, 79, 63, 251, 107, 2, 225, 113, 42, - 232, 79, 63, 251, 107, 2, 203, 42, 232, 79, 63, 251, 107, 2, 203, 41, - 232, 79, 63, 251, 107, 2, 225, 113, 41, 232, 79, 225, 113, 42, 226, 78, - 225, 113, 41, 226, 78, 203, 42, 226, 78, 63, 236, 228, 228, 120, 86, 236, - 228, 228, 120, 63, 236, 228, 3, 228, 120, 86, 236, 228, 3, 228, 120, 203, - 41, 226, 78, 86, 227, 228, 2, 231, 248, 251, 75, 225, 142, 228, 171, 251, - 57, 86, 228, 58, 63, 228, 58, 237, 183, 226, 184, 227, 227, 254, 83, 235, - 3, 250, 33, 235, 3, 251, 35, 234, 34, 86, 227, 28, 63, 227, 28, 253, 48, - 252, 118, 253, 48, 77, 2, 251, 180, 253, 48, 77, 2, 224, 73, 231, 5, 225, - 143, 2, 232, 10, 248, 113, 244, 158, 252, 194, 63, 229, 67, 233, 63, 86, - 229, 67, 233, 63, 229, 132, 200, 231, 106, 247, 16, 245, 115, 252, 83, - 86, 42, 232, 251, 240, 8, 86, 41, 232, 251, 240, 8, 63, 42, 232, 251, - 240, 8, 63, 99, 232, 251, 240, 8, 63, 41, 232, 251, 240, 8, 63, 103, 232, - 251, 240, 8, 228, 199, 22, 250, 242, 251, 252, 53, 232, 16, 53, 252, 166, - 53, 252, 35, 254, 177, 234, 23, 250, 243, 251, 170, 231, 182, 250, 244, - 106, 237, 121, 250, 244, 106, 239, 161, 228, 59, 22, 250, 247, 247, 107, - 98, 255, 23, 229, 134, 245, 150, 22, 229, 13, 233, 150, 98, 223, 193, - 223, 248, 226, 70, 32, 245, 112, 226, 70, 32, 238, 24, 226, 70, 32, 247, - 46, 226, 70, 32, 226, 185, 226, 70, 32, 224, 111, 226, 70, 32, 224, 151, - 226, 70, 32, 236, 74, 226, 70, 32, 248, 48, 224, 125, 106, 250, 18, 63, - 246, 221, 247, 125, 63, 228, 179, 247, 125, 86, 228, 179, 247, 125, 63, - 227, 228, 2, 231, 248, 247, 45, 232, 77, 236, 84, 238, 5, 232, 77, 236, - 84, 236, 209, 247, 83, 53, 248, 48, 237, 39, 53, 239, 89, 230, 239, 225, - 98, 235, 150, 233, 8, 254, 111, 227, 60, 246, 123, 252, 22, 237, 216, - 224, 214, 237, 191, 230, 220, 231, 17, 252, 13, 254, 134, 233, 31, 63, - 251, 175, 238, 189, 63, 251, 175, 232, 70, 63, 251, 175, 231, 112, 63, - 251, 175, 252, 159, 63, 251, 175, 238, 152, 63, 251, 175, 233, 159, 86, - 251, 175, 238, 189, 86, 251, 175, 232, 70, 86, 251, 175, 231, 112, 86, - 251, 175, 252, 159, 86, 251, 175, 238, 152, 86, 251, 175, 233, 159, 86, - 228, 143, 227, 239, 63, 245, 115, 227, 239, 63, 249, 251, 227, 239, 86, - 251, 74, 227, 239, 63, 228, 143, 227, 239, 86, 245, 115, 227, 239, 86, - 249, 251, 227, 239, 63, 251, 74, 227, 239, 244, 158, 228, 124, 232, 77, - 234, 238, 248, 17, 234, 238, 252, 236, 248, 17, 234, 235, 252, 236, 228, - 211, 234, 235, 236, 29, 247, 25, 53, 236, 29, 235, 224, 53, 236, 29, 229, - 124, 53, 224, 131, 151, 250, 243, 248, 45, 151, 250, 243, 225, 123, 231, - 232, 98, 231, 232, 14, 32, 225, 195, 233, 17, 231, 232, 14, 32, 225, 194, - 233, 17, 231, 232, 14, 32, 225, 193, 233, 17, 231, 232, 14, 32, 225, 192, - 233, 17, 231, 232, 14, 32, 225, 191, 233, 17, 231, 232, 14, 32, 225, 190, - 233, 17, 231, 232, 14, 32, 225, 189, 233, 17, 231, 232, 14, 32, 246, 121, - 237, 1, 86, 225, 123, 231, 232, 98, 231, 233, 233, 196, 98, 233, 174, - 233, 196, 98, 233, 116, 233, 196, 53, 224, 123, 98, 249, 244, 247, 124, - 249, 244, 247, 123, 249, 244, 247, 122, 249, 244, 247, 121, 249, 244, - 247, 120, 249, 244, 247, 119, 63, 251, 107, 2, 56, 231, 153, 63, 251, - 107, 2, 135, 249, 138, 86, 251, 107, 2, 63, 56, 231, 153, 86, 251, 107, - 2, 135, 63, 249, 138, 236, 92, 32, 223, 248, 236, 92, 32, 223, 192, 249, - 227, 32, 245, 232, 223, 248, 249, 227, 32, 237, 211, 223, 192, 249, 227, - 32, 237, 211, 223, 248, 249, 227, 32, 245, 232, 223, 192, 63, 247, 31, - 86, 247, 31, 245, 150, 22, 233, 65, 254, 188, 250, 241, 227, 188, 228, - 66, 106, 255, 14, 230, 229, 254, 226, 247, 12, 246, 130, 228, 66, 106, - 245, 95, 254, 59, 98, 247, 21, 234, 7, 63, 228, 58, 224, 161, 53, 201, - 224, 200, 53, 248, 130, 247, 83, 53, 248, 130, 237, 39, 53, 239, 232, - 247, 83, 22, 237, 39, 53, 237, 39, 22, 247, 83, 53, 237, 39, 2, 195, 53, - 237, 39, 2, 195, 22, 237, 39, 22, 247, 83, 53, 61, 237, 39, 2, 195, 53, - 169, 237, 39, 2, 195, 53, 236, 228, 63, 251, 106, 236, 228, 86, 251, 106, - 236, 228, 3, 63, 251, 106, 237, 12, 98, 249, 179, 98, 225, 122, 233, 173, - 98, 251, 64, 246, 214, 225, 95, 235, 146, 251, 207, 233, 225, 239, 95, - 224, 232, 251, 157, 86, 236, 85, 237, 180, 229, 155, 229, 183, 232, 63, - 229, 167, 63, 248, 117, 237, 35, 63, 248, 117, 238, 189, 86, 248, 117, - 237, 35, 86, 248, 117, 238, 189, 225, 113, 252, 146, 230, 221, 86, 230, - 221, 203, 252, 146, 230, 221, 63, 230, 221, 227, 29, 237, 141, 53, 227, - 69, 248, 115, 254, 244, 247, 218, 224, 227, 245, 146, 224, 85, 245, 146, - 203, 41, 233, 134, 233, 134, 225, 113, 41, 233, 134, 63, 235, 86, 86, - 235, 86, 251, 181, 76, 112, 251, 181, 76, 236, 52, 224, 73, 112, 236, 52, - 224, 73, 253, 48, 224, 73, 112, 253, 48, 224, 73, 234, 7, 19, 250, 243, - 112, 19, 250, 243, 234, 44, 251, 219, 250, 243, 112, 234, 44, 251, 219, - 250, 243, 7, 250, 243, 229, 135, 63, 7, 250, 243, 234, 7, 7, 250, 243, - 237, 37, 250, 243, 228, 59, 106, 250, 124, 246, 243, 227, 40, 254, 69, - 246, 243, 253, 49, 254, 69, 112, 246, 243, 253, 49, 254, 69, 246, 243, - 251, 72, 254, 69, 86, 246, 243, 232, 253, 228, 58, 63, 246, 243, 232, - 253, 228, 58, 228, 27, 234, 7, 63, 228, 58, 33, 63, 228, 58, 234, 44, - 251, 219, 86, 228, 58, 86, 251, 219, 63, 228, 58, 234, 7, 86, 228, 58, - 112, 234, 7, 86, 228, 58, 233, 36, 228, 58, 229, 135, 63, 228, 58, 112, - 254, 69, 234, 44, 251, 219, 254, 69, 248, 20, 228, 129, 254, 69, 248, 20, - 232, 253, 86, 228, 58, 248, 20, 232, 253, 233, 36, 228, 58, 228, 217, - 232, 253, 86, 228, 58, 248, 20, 232, 253, 231, 234, 86, 228, 58, 112, - 248, 20, 232, 253, 231, 234, 86, 228, 58, 225, 219, 232, 253, 86, 228, - 58, 228, 213, 232, 253, 254, 69, 227, 40, 254, 69, 234, 44, 251, 219, - 227, 40, 254, 69, 112, 227, 40, 254, 69, 228, 217, 233, 104, 86, 22, 63, - 247, 15, 86, 247, 15, 63, 247, 15, 248, 20, 233, 104, 234, 7, 86, 247, - 15, 33, 234, 44, 251, 219, 248, 20, 232, 253, 228, 58, 112, 227, 40, 233, - 36, 254, 69, 228, 172, 226, 166, 226, 73, 228, 172, 112, 251, 173, 228, - 172, 228, 142, 112, 228, 142, 253, 49, 254, 69, 248, 20, 227, 40, 232, - 192, 254, 69, 112, 248, 20, 227, 40, 232, 192, 254, 69, 229, 135, 63, - 251, 106, 203, 41, 248, 114, 63, 228, 120, 225, 113, 41, 248, 114, 63, - 228, 120, 203, 41, 229, 135, 63, 228, 120, 225, 113, 41, 229, 135, 63, - 228, 120, 86, 249, 251, 236, 121, 63, 224, 73, 157, 61, 125, 236, 228, - 61, 125, 112, 61, 125, 112, 228, 241, 209, 251, 55, 232, 57, 165, 234, - 25, 112, 228, 241, 251, 55, 232, 57, 165, 234, 25, 112, 47, 209, 251, 55, - 232, 57, 165, 234, 25, 112, 47, 251, 55, 232, 57, 165, 234, 25, 250, 217, - 228, 49, 233, 192, 5, 234, 25, 112, 247, 149, 165, 234, 25, 112, 245, - 115, 247, 149, 165, 234, 25, 112, 86, 245, 114, 231, 106, 112, 86, 245, - 115, 252, 83, 247, 16, 245, 114, 231, 106, 247, 16, 245, 115, 252, 83, - 236, 228, 42, 233, 181, 234, 25, 236, 228, 41, 233, 181, 234, 25, 236, - 228, 247, 22, 42, 233, 181, 234, 25, 236, 228, 247, 22, 41, 233, 181, - 234, 25, 236, 228, 237, 235, 254, 182, 252, 115, 234, 25, 236, 228, 231, - 151, 254, 182, 252, 115, 234, 25, 112, 237, 235, 254, 182, 232, 57, 165, - 234, 25, 112, 231, 151, 254, 182, 232, 57, 165, 234, 25, 112, 237, 235, - 254, 182, 252, 115, 234, 25, 112, 231, 151, 254, 182, 252, 115, 234, 25, - 157, 42, 226, 100, 229, 104, 252, 115, 234, 25, 157, 41, 226, 100, 229, - 104, 252, 115, 234, 25, 236, 228, 42, 250, 223, 252, 115, 234, 25, 236, - 228, 41, 250, 223, 252, 115, 234, 25, 249, 208, 235, 157, 33, 21, 118, - 249, 208, 235, 157, 33, 21, 113, 249, 208, 235, 157, 33, 21, 166, 249, - 208, 235, 157, 33, 21, 158, 249, 208, 235, 157, 33, 21, 173, 249, 208, - 235, 157, 33, 21, 183, 249, 208, 235, 157, 33, 21, 194, 249, 208, 235, - 157, 33, 21, 187, 249, 208, 235, 157, 33, 21, 192, 249, 208, 235, 157, - 33, 65, 227, 23, 249, 208, 33, 30, 21, 118, 249, 208, 33, 30, 21, 113, - 249, 208, 33, 30, 21, 166, 249, 208, 33, 30, 21, 158, 249, 208, 33, 30, - 21, 173, 249, 208, 33, 30, 21, 183, 249, 208, 33, 30, 21, 194, 249, 208, - 33, 30, 21, 187, 249, 208, 33, 30, 21, 192, 249, 208, 33, 30, 65, 227, - 23, 249, 208, 235, 157, 33, 30, 21, 118, 249, 208, 235, 157, 33, 30, 21, - 113, 249, 208, 235, 157, 33, 30, 21, 166, 249, 208, 235, 157, 33, 30, 21, - 158, 249, 208, 235, 157, 33, 30, 21, 173, 249, 208, 235, 157, 33, 30, 21, - 183, 249, 208, 235, 157, 33, 30, 21, 194, 249, 208, 235, 157, 33, 30, 21, - 187, 249, 208, 235, 157, 33, 30, 21, 192, 249, 208, 235, 157, 33, 30, 65, - 227, 23, 112, 224, 116, 81, 58, 112, 228, 152, 248, 45, 58, 112, 81, 58, - 112, 234, 245, 248, 45, 58, 248, 119, 232, 255, 81, 58, 112, 231, 103, - 81, 58, 226, 77, 81, 58, 112, 226, 77, 81, 58, 250, 129, 226, 77, 81, 58, - 112, 250, 129, 226, 77, 81, 58, 86, 81, 58, 226, 191, 226, 104, 81, 254, - 93, 226, 191, 252, 124, 81, 254, 93, 86, 81, 254, 93, 112, 86, 250, 217, - 248, 125, 22, 81, 58, 112, 86, 250, 217, 225, 106, 22, 81, 58, 228, 116, - 86, 81, 58, 112, 251, 43, 86, 81, 58, 231, 150, 63, 81, 58, 237, 234, 63, - 81, 58, 253, 65, 229, 135, 63, 81, 58, 246, 223, 229, 135, 63, 81, 58, - 112, 203, 231, 149, 63, 81, 58, 112, 225, 113, 231, 149, 63, 81, 58, 234, - 240, 203, 231, 149, 63, 81, 58, 234, 240, 225, 113, 231, 149, 63, 81, 58, - 33, 112, 63, 81, 58, 224, 120, 81, 58, 252, 149, 228, 152, 248, 45, 58, - 252, 149, 81, 58, 252, 149, 234, 245, 248, 45, 58, 112, 252, 149, 228, - 152, 248, 45, 58, 112, 252, 149, 81, 58, 112, 252, 149, 234, 245, 248, - 45, 58, 227, 42, 81, 58, 112, 227, 41, 81, 58, 224, 139, 81, 58, 112, - 224, 139, 81, 58, 234, 41, 81, 58, 152, 249, 218, 254, 181, 63, 226, 79, - 251, 27, 3, 63, 226, 78, 233, 114, 234, 44, 227, 251, 234, 44, 227, 217, - 42, 231, 34, 253, 59, 250, 52, 41, 231, 34, 253, 59, 250, 52, 145, 2, 56, - 239, 243, 231, 193, 228, 162, 232, 212, 227, 251, 227, 218, 232, 212, - 228, 161, 61, 253, 36, 2, 169, 82, 182, 249, 180, 63, 249, 251, 2, 251, - 217, 249, 140, 22, 2, 249, 140, 247, 254, 106, 234, 39, 225, 105, 203, - 41, 251, 11, 2, 249, 140, 225, 113, 42, 251, 11, 2, 249, 140, 42, 234, 9, - 239, 115, 41, 234, 9, 239, 115, 246, 218, 234, 9, 239, 115, 238, 9, 99, - 227, 96, 238, 9, 103, 227, 96, 42, 22, 41, 47, 225, 232, 42, 22, 41, 227, - 96, 42, 236, 55, 182, 41, 227, 96, 182, 42, 227, 96, 99, 227, 97, 2, 251, - 107, 46, 237, 114, 249, 185, 252, 55, 169, 231, 65, 63, 251, 42, 249, - 250, 63, 251, 42, 249, 251, 2, 117, 226, 172, 63, 251, 42, 249, 251, 2, - 81, 226, 172, 63, 37, 2, 117, 226, 172, 63, 37, 2, 81, 226, 172, 12, 42, - 63, 37, 104, 12, 41, 63, 37, 104, 12, 42, 254, 182, 104, 12, 41, 254, - 182, 104, 12, 42, 47, 254, 182, 104, 12, 41, 47, 254, 182, 104, 12, 42, - 63, 226, 100, 229, 104, 104, 12, 41, 63, 226, 100, 229, 104, 104, 12, 42, - 247, 22, 233, 180, 12, 41, 247, 22, 233, 180, 225, 106, 232, 78, 58, 248, - 125, 232, 78, 58, 254, 168, 246, 162, 251, 107, 58, 251, 84, 246, 162, - 251, 107, 58, 41, 67, 2, 33, 233, 10, 182, 117, 58, 182, 81, 58, 182, 42, - 41, 58, 182, 117, 47, 58, 182, 81, 47, 58, 182, 42, 41, 47, 58, 182, 117, - 67, 246, 224, 125, 182, 81, 67, 246, 224, 125, 182, 117, 47, 67, 246, - 224, 125, 182, 81, 47, 67, 246, 224, 125, 182, 81, 228, 115, 58, 39, 40, - 252, 144, 39, 40, 249, 137, 39, 40, 249, 9, 39, 40, 249, 136, 39, 40, - 248, 201, 39, 40, 249, 72, 39, 40, 249, 8, 39, 40, 249, 135, 39, 40, 248, - 169, 39, 40, 249, 40, 39, 40, 248, 232, 39, 40, 249, 103, 39, 40, 248, - 200, 39, 40, 249, 71, 39, 40, 249, 7, 39, 40, 249, 134, 39, 40, 248, 153, - 39, 40, 249, 24, 39, 40, 248, 216, 39, 40, 249, 87, 39, 40, 248, 184, 39, - 40, 249, 55, 39, 40, 248, 247, 39, 40, 249, 118, 39, 40, 248, 168, 39, - 40, 249, 39, 39, 40, 248, 231, 39, 40, 249, 102, 39, 40, 248, 199, 39, - 40, 249, 70, 39, 40, 249, 6, 39, 40, 249, 133, 39, 40, 248, 145, 39, 40, - 249, 16, 39, 40, 248, 208, 39, 40, 249, 79, 39, 40, 248, 176, 39, 40, - 249, 47, 39, 40, 248, 239, 39, 40, 249, 110, 39, 40, 248, 160, 39, 40, - 249, 31, 39, 40, 248, 223, 39, 40, 249, 94, 39, 40, 248, 191, 39, 40, - 249, 62, 39, 40, 248, 254, 39, 40, 249, 125, 39, 40, 248, 152, 39, 40, - 249, 23, 39, 40, 248, 215, 39, 40, 249, 86, 39, 40, 248, 183, 39, 40, - 249, 54, 39, 40, 248, 246, 39, 40, 249, 117, 39, 40, 248, 167, 39, 40, - 249, 38, 39, 40, 248, 230, 39, 40, 249, 101, 39, 40, 248, 198, 39, 40, - 249, 69, 39, 40, 249, 5, 39, 40, 249, 132, 39, 40, 248, 141, 39, 40, 249, - 12, 39, 40, 248, 204, 39, 40, 249, 75, 39, 40, 248, 172, 39, 40, 249, 43, - 39, 40, 248, 235, 39, 40, 249, 106, 39, 40, 248, 156, 39, 40, 249, 27, - 39, 40, 248, 219, 39, 40, 249, 90, 39, 40, 248, 187, 39, 40, 249, 58, 39, - 40, 248, 250, 39, 40, 249, 121, 39, 40, 248, 148, 39, 40, 249, 19, 39, - 40, 248, 211, 39, 40, 249, 82, 39, 40, 248, 179, 39, 40, 249, 50, 39, 40, - 248, 242, 39, 40, 249, 113, 39, 40, 248, 163, 39, 40, 249, 34, 39, 40, - 248, 226, 39, 40, 249, 97, 39, 40, 248, 194, 39, 40, 249, 65, 39, 40, - 249, 1, 39, 40, 249, 128, 39, 40, 248, 144, 39, 40, 249, 15, 39, 40, 248, - 207, 39, 40, 249, 78, 39, 40, 248, 175, 39, 40, 249, 46, 39, 40, 248, - 238, 39, 40, 249, 109, 39, 40, 248, 159, 39, 40, 249, 30, 39, 40, 248, - 222, 39, 40, 249, 93, 39, 40, 248, 190, 39, 40, 249, 61, 39, 40, 248, - 253, 39, 40, 249, 124, 39, 40, 248, 151, 39, 40, 249, 22, 39, 40, 248, - 214, 39, 40, 249, 85, 39, 40, 248, 182, 39, 40, 249, 53, 39, 40, 248, - 245, 39, 40, 249, 116, 39, 40, 248, 166, 39, 40, 249, 37, 39, 40, 248, - 229, 39, 40, 249, 100, 39, 40, 248, 197, 39, 40, 249, 68, 39, 40, 249, 4, - 39, 40, 249, 131, 39, 40, 248, 139, 39, 40, 249, 10, 39, 40, 248, 202, - 39, 40, 249, 73, 39, 40, 248, 170, 39, 40, 249, 41, 39, 40, 248, 233, 39, - 40, 249, 104, 39, 40, 248, 154, 39, 40, 249, 25, 39, 40, 248, 217, 39, - 40, 249, 88, 39, 40, 248, 185, 39, 40, 249, 56, 39, 40, 248, 248, 39, 40, - 249, 119, 39, 40, 248, 146, 39, 40, 249, 17, 39, 40, 248, 209, 39, 40, - 249, 80, 39, 40, 248, 177, 39, 40, 249, 48, 39, 40, 248, 240, 39, 40, - 249, 111, 39, 40, 248, 161, 39, 40, 249, 32, 39, 40, 248, 224, 39, 40, - 249, 95, 39, 40, 248, 192, 39, 40, 249, 63, 39, 40, 248, 255, 39, 40, - 249, 126, 39, 40, 248, 142, 39, 40, 249, 13, 39, 40, 248, 205, 39, 40, - 249, 76, 39, 40, 248, 173, 39, 40, 249, 44, 39, 40, 248, 236, 39, 40, - 249, 107, 39, 40, 248, 157, 39, 40, 249, 28, 39, 40, 248, 220, 39, 40, - 249, 91, 39, 40, 248, 188, 39, 40, 249, 59, 39, 40, 248, 251, 39, 40, - 249, 122, 39, 40, 248, 149, 39, 40, 249, 20, 39, 40, 248, 212, 39, 40, - 249, 83, 39, 40, 248, 180, 39, 40, 249, 51, 39, 40, 248, 243, 39, 40, - 249, 114, 39, 40, 248, 164, 39, 40, 249, 35, 39, 40, 248, 227, 39, 40, - 249, 98, 39, 40, 248, 195, 39, 40, 249, 66, 39, 40, 249, 2, 39, 40, 249, - 129, 39, 40, 248, 140, 39, 40, 249, 11, 39, 40, 248, 203, 39, 40, 249, - 74, 39, 40, 248, 171, 39, 40, 249, 42, 39, 40, 248, 234, 39, 40, 249, - 105, 39, 40, 248, 155, 39, 40, 249, 26, 39, 40, 248, 218, 39, 40, 249, - 89, 39, 40, 248, 186, 39, 40, 249, 57, 39, 40, 248, 249, 39, 40, 249, - 120, 39, 40, 248, 147, 39, 40, 249, 18, 39, 40, 248, 210, 39, 40, 249, - 81, 39, 40, 248, 178, 39, 40, 249, 49, 39, 40, 248, 241, 39, 40, 249, - 112, 39, 40, 248, 162, 39, 40, 249, 33, 39, 40, 248, 225, 39, 40, 249, - 96, 39, 40, 248, 193, 39, 40, 249, 64, 39, 40, 249, 0, 39, 40, 249, 127, - 39, 40, 248, 143, 39, 40, 249, 14, 39, 40, 248, 206, 39, 40, 249, 77, 39, - 40, 248, 174, 39, 40, 249, 45, 39, 40, 248, 237, 39, 40, 249, 108, 39, - 40, 248, 158, 39, 40, 249, 29, 39, 40, 248, 221, 39, 40, 249, 92, 39, 40, - 248, 189, 39, 40, 249, 60, 39, 40, 248, 252, 39, 40, 249, 123, 39, 40, - 248, 150, 39, 40, 249, 21, 39, 40, 248, 213, 39, 40, 249, 84, 39, 40, - 248, 181, 39, 40, 249, 52, 39, 40, 248, 244, 39, 40, 249, 115, 39, 40, - 248, 165, 39, 40, 249, 36, 39, 40, 248, 228, 39, 40, 249, 99, 39, 40, - 248, 196, 39, 40, 249, 67, 39, 40, 249, 3, 39, 40, 249, 130, 81, 225, - 203, 67, 2, 61, 82, 81, 225, 203, 67, 2, 47, 61, 82, 117, 47, 67, 2, 61, - 82, 81, 47, 67, 2, 61, 82, 42, 41, 47, 67, 2, 61, 82, 81, 225, 203, 67, - 246, 224, 125, 117, 47, 67, 246, 224, 125, 81, 47, 67, 246, 224, 125, - 248, 125, 67, 2, 169, 82, 225, 106, 67, 2, 169, 82, 225, 106, 226, 66, - 58, 248, 125, 226, 66, 58, 117, 47, 250, 131, 58, 81, 47, 250, 131, 58, - 117, 226, 66, 250, 131, 58, 81, 226, 66, 250, 131, 58, 81, 225, 203, 226, - 66, 250, 131, 58, 81, 67, 2, 248, 138, 228, 48, 225, 106, 67, 180, 125, - 248, 125, 67, 180, 125, 81, 67, 2, 227, 90, 2, 61, 82, 81, 67, 2, 227, - 90, 2, 47, 61, 82, 81, 225, 203, 67, 2, 227, 89, 81, 225, 203, 67, 2, - 227, 90, 2, 61, 82, 81, 225, 203, 67, 2, 227, 90, 2, 47, 61, 82, 117, - 254, 95, 81, 254, 95, 117, 47, 254, 95, 81, 47, 254, 95, 117, 67, 180, - 86, 249, 250, 81, 67, 180, 86, 249, 250, 117, 67, 246, 224, 253, 36, 180, - 86, 249, 250, 81, 67, 246, 224, 253, 36, 180, 86, 249, 250, 234, 245, - 224, 131, 22, 228, 152, 248, 45, 58, 234, 245, 248, 45, 22, 228, 152, - 224, 131, 58, 234, 245, 224, 131, 67, 2, 88, 234, 245, 248, 45, 67, 2, - 88, 228, 152, 248, 45, 67, 2, 88, 228, 152, 224, 131, 67, 2, 88, 234, - 245, 224, 131, 67, 22, 234, 245, 248, 45, 58, 234, 245, 248, 45, 67, 22, - 228, 152, 248, 45, 58, 228, 152, 248, 45, 67, 22, 228, 152, 224, 131, 58, - 228, 152, 224, 131, 67, 22, 234, 245, 224, 131, 58, 231, 135, 250, 1, - 250, 238, 247, 113, 250, 0, 247, 113, 250, 1, 250, 238, 231, 135, 250, 0, - 228, 152, 248, 45, 67, 250, 238, 234, 245, 248, 45, 58, 234, 245, 248, - 45, 67, 250, 238, 228, 152, 248, 45, 58, 247, 113, 250, 1, 250, 238, 234, - 245, 248, 45, 58, 231, 135, 250, 1, 250, 238, 228, 152, 248, 45, 58, 234, - 245, 248, 45, 67, 250, 238, 234, 245, 224, 131, 58, 234, 245, 224, 131, - 67, 250, 238, 234, 245, 248, 45, 58, 224, 148, 67, 232, 251, 249, 199, - 231, 153, 67, 232, 251, 81, 226, 232, 250, 216, 225, 105, 67, 232, 251, - 81, 226, 232, 250, 216, 248, 124, 67, 232, 251, 248, 125, 226, 232, 250, - 216, 237, 230, 67, 232, 251, 248, 125, 226, 232, 250, 216, 231, 145, 231, - 148, 254, 123, 251, 84, 58, 237, 233, 254, 123, 254, 168, 58, 226, 106, - 254, 123, 254, 168, 58, 252, 126, 254, 123, 254, 168, 58, 226, 106, 254, - 123, 251, 84, 67, 2, 236, 120, 226, 106, 254, 123, 254, 168, 67, 2, 233, - 10, 203, 41, 229, 188, 251, 84, 58, 203, 42, 229, 188, 254, 168, 58, 254, - 168, 251, 82, 251, 107, 58, 251, 84, 251, 82, 251, 107, 58, 81, 67, 64, - 229, 63, 117, 58, 117, 67, 64, 229, 63, 81, 58, 229, 63, 81, 67, 64, 117, - 58, 81, 67, 2, 79, 51, 117, 67, 2, 79, 51, 81, 67, 226, 188, 224, 73, 42, - 41, 67, 226, 188, 3, 251, 106, 225, 106, 225, 203, 67, 246, 224, 3, 251, - 106, 42, 171, 99, 41, 171, 103, 245, 135, 42, 171, 103, 41, 171, 99, 245, - 135, 99, 171, 41, 103, 171, 42, 245, 135, 99, 171, 42, 103, 171, 41, 245, - 135, 42, 171, 99, 41, 171, 99, 245, 135, 99, 171, 41, 103, 171, 41, 245, - 135, 42, 171, 103, 41, 171, 103, 245, 135, 99, 171, 42, 103, 171, 42, - 245, 135, 117, 245, 136, 2, 171, 99, 180, 125, 81, 245, 136, 2, 171, 99, - 180, 125, 225, 106, 245, 136, 2, 171, 41, 180, 125, 248, 125, 245, 136, - 2, 171, 41, 180, 125, 117, 245, 136, 2, 171, 103, 180, 125, 81, 245, 136, - 2, 171, 103, 180, 125, 225, 106, 245, 136, 2, 171, 42, 180, 125, 248, - 125, 245, 136, 2, 171, 42, 180, 125, 117, 245, 136, 2, 171, 99, 246, 224, - 125, 81, 245, 136, 2, 171, 99, 246, 224, 125, 225, 106, 245, 136, 2, 171, - 41, 246, 224, 125, 248, 125, 245, 136, 2, 171, 41, 246, 224, 125, 117, - 245, 136, 2, 171, 103, 246, 224, 125, 81, 245, 136, 2, 171, 103, 246, - 224, 125, 225, 106, 245, 136, 2, 171, 42, 246, 224, 125, 248, 125, 245, - 136, 2, 171, 42, 246, 224, 125, 117, 245, 136, 2, 171, 99, 64, 117, 245, - 136, 2, 171, 248, 127, 225, 106, 245, 136, 2, 171, 42, 252, 202, 225, - 106, 245, 136, 2, 171, 231, 153, 81, 245, 136, 2, 171, 99, 64, 81, 245, - 136, 2, 171, 248, 127, 248, 125, 245, 136, 2, 171, 42, 252, 202, 248, - 125, 245, 136, 2, 171, 231, 153, 117, 245, 136, 2, 171, 99, 64, 81, 245, - 136, 2, 171, 225, 116, 117, 245, 136, 2, 171, 103, 64, 81, 245, 136, 2, - 171, 248, 127, 81, 245, 136, 2, 171, 99, 64, 117, 245, 136, 2, 171, 225, - 116, 81, 245, 136, 2, 171, 103, 64, 117, 245, 136, 2, 171, 248, 127, 117, - 245, 136, 2, 171, 99, 64, 182, 250, 130, 117, 245, 136, 2, 171, 103, 252, - 214, 182, 250, 130, 81, 245, 136, 2, 171, 99, 64, 182, 250, 130, 81, 245, - 136, 2, 171, 103, 252, 214, 182, 250, 130, 225, 106, 245, 136, 2, 171, - 42, 252, 202, 248, 125, 245, 136, 2, 171, 231, 153, 248, 125, 245, 136, - 2, 171, 42, 252, 202, 225, 106, 245, 136, 2, 171, 231, 153, 41, 47, 67, - 2, 231, 102, 245, 118, 247, 204, 5, 64, 81, 58, 226, 159, 234, 38, 64, - 81, 58, 117, 67, 64, 226, 159, 234, 37, 81, 67, 64, 226, 159, 234, 37, - 81, 67, 64, 254, 210, 105, 96, 237, 213, 64, 117, 58, 117, 67, 226, 188, - 237, 212, 245, 231, 64, 81, 58, 227, 252, 64, 81, 58, 117, 67, 226, 188, - 227, 251, 227, 218, 64, 117, 58, 42, 247, 44, 227, 89, 41, 247, 44, 227, - 89, 99, 247, 44, 227, 89, 103, 247, 44, 227, 89, 226, 66, 61, 253, 36, - 250, 52, 223, 120, 150, 228, 127, 223, 120, 150, 225, 196, 251, 61, 42, - 63, 250, 223, 104, 41, 63, 250, 223, 104, 42, 63, 233, 180, 41, 63, 233, - 180, 223, 120, 150, 42, 240, 29, 104, 223, 120, 150, 41, 240, 29, 104, - 223, 120, 150, 42, 252, 168, 104, 223, 120, 150, 41, 252, 168, 104, 42, - 37, 252, 115, 2, 225, 133, 41, 37, 252, 115, 2, 225, 133, 42, 37, 252, - 115, 2, 226, 173, 240, 17, 226, 106, 251, 10, 41, 37, 252, 115, 2, 226, - 173, 240, 17, 252, 126, 251, 10, 42, 37, 252, 115, 2, 226, 173, 240, 17, - 252, 126, 251, 10, 41, 37, 252, 115, 2, 226, 173, 240, 17, 226, 106, 251, - 10, 42, 254, 182, 252, 115, 2, 249, 140, 41, 254, 182, 252, 115, 2, 249, - 140, 42, 254, 123, 237, 213, 104, 41, 254, 123, 245, 231, 104, 47, 42, - 254, 123, 245, 231, 104, 47, 41, 254, 123, 237, 213, 104, 42, 86, 226, - 100, 229, 104, 104, 41, 86, 226, 100, 229, 104, 104, 248, 138, 247, 80, - 61, 223, 38, 237, 170, 236, 232, 254, 182, 234, 39, 237, 237, 41, 254, - 182, 225, 54, 2, 228, 120, 236, 232, 41, 254, 182, 2, 249, 140, 254, 182, - 2, 231, 35, 239, 243, 255, 33, 254, 181, 228, 137, 254, 182, 234, 39, - 237, 237, 228, 137, 254, 182, 234, 39, 225, 116, 209, 254, 181, 200, 254, - 181, 254, 182, 2, 225, 133, 200, 254, 182, 2, 225, 133, 234, 97, 254, - 182, 234, 39, 225, 116, 234, 97, 254, 182, 234, 39, 248, 127, 236, 232, - 254, 182, 2, 234, 44, 254, 105, 247, 230, 240, 17, 67, 232, 251, 99, 22, - 231, 153, 236, 232, 254, 182, 2, 234, 44, 254, 105, 247, 230, 240, 17, - 67, 232, 251, 99, 22, 237, 237, 236, 232, 254, 182, 2, 234, 44, 254, 105, - 247, 230, 240, 17, 67, 232, 251, 103, 22, 231, 153, 236, 232, 254, 182, - 2, 234, 44, 254, 105, 247, 230, 240, 17, 67, 232, 251, 103, 22, 237, 237, - 236, 232, 254, 182, 2, 234, 44, 254, 105, 247, 230, 240, 17, 67, 232, - 251, 41, 22, 225, 116, 236, 232, 254, 182, 2, 234, 44, 254, 105, 247, - 230, 240, 17, 67, 232, 251, 42, 22, 225, 116, 236, 232, 254, 182, 2, 234, - 44, 254, 105, 247, 230, 240, 17, 67, 232, 251, 41, 22, 248, 127, 236, - 232, 254, 182, 2, 234, 44, 254, 105, 247, 230, 240, 17, 67, 232, 251, 42, - 22, 248, 127, 200, 247, 241, 229, 164, 247, 241, 229, 165, 2, 234, 5, - 247, 241, 229, 165, 2, 3, 251, 107, 46, 247, 241, 229, 165, 2, 41, 67, - 46, 247, 241, 229, 165, 2, 42, 67, 46, 251, 107, 2, 169, 125, 33, 61, - 125, 33, 233, 184, 33, 231, 193, 228, 161, 33, 233, 114, 251, 107, 249, - 185, 252, 55, 169, 253, 36, 22, 226, 106, 132, 249, 185, 252, 55, 61, - 125, 251, 107, 2, 227, 220, 224, 73, 33, 254, 167, 249, 181, 53, 99, 67, - 226, 188, 251, 106, 33, 63, 252, 83, 33, 252, 83, 33, 237, 212, 33, 245, - 230, 251, 107, 2, 3, 251, 107, 180, 226, 240, 231, 153, 251, 107, 2, 135, - 169, 228, 11, 180, 226, 240, 231, 153, 228, 119, 231, 135, 250, 1, 228, - 194, 228, 119, 247, 113, 250, 1, 228, 194, 228, 119, 254, 69, 228, 119, - 3, 251, 106, 228, 119, 228, 120, 135, 239, 114, 228, 117, 226, 79, 2, 56, - 46, 226, 79, 2, 225, 133, 231, 35, 240, 17, 226, 78, 226, 79, 2, 229, - 171, 254, 63, 252, 125, 41, 226, 79, 64, 42, 226, 78, 42, 226, 79, 252, - 202, 61, 125, 61, 253, 36, 252, 202, 41, 226, 78, 252, 120, 2, 42, 132, - 252, 150, 252, 120, 2, 41, 132, 252, 150, 86, 252, 119, 24, 2, 42, 132, - 252, 150, 24, 2, 41, 132, 252, 150, 63, 244, 154, 86, 244, 154, 42, 224, - 114, 247, 80, 41, 224, 114, 247, 80, 42, 47, 224, 114, 247, 80, 41, 47, - 224, 114, 247, 80, 240, 13, 240, 3, 226, 171, 107, 240, 3, 240, 4, 235, - 159, 2, 61, 125, 248, 132, 236, 55, 37, 2, 251, 21, 234, 8, 240, 11, 254, - 86, 229, 39, 232, 200, 247, 204, 5, 22, 228, 196, 233, 184, 247, 204, 5, - 22, 228, 196, 233, 185, 2, 226, 159, 46, 244, 63, 180, 22, 228, 196, 233, - 184, 246, 18, 228, 57, 226, 229, 248, 126, 226, 79, 2, 42, 132, 252, 150, - 248, 126, 226, 79, 2, 41, 132, 252, 150, 86, 249, 251, 2, 103, 58, 86, - 237, 113, 63, 251, 107, 2, 103, 58, 86, 251, 107, 2, 103, 58, 247, 191, - 63, 228, 120, 247, 191, 86, 228, 120, 247, 191, 63, 249, 250, 247, 191, - 86, 249, 250, 247, 191, 63, 251, 106, 247, 191, 86, 251, 106, 231, 64, - 231, 193, 228, 162, 234, 37, 228, 162, 2, 234, 5, 231, 193, 228, 162, 2, - 169, 82, 252, 173, 228, 161, 252, 173, 231, 193, 228, 161, 47, 233, 10, - 226, 66, 233, 10, 237, 235, 250, 217, 254, 182, 104, 231, 151, 250, 217, - 254, 182, 104, 226, 152, 236, 118, 236, 4, 33, 56, 234, 37, 236, 4, 33, - 79, 234, 37, 236, 4, 33, 24, 234, 37, 236, 4, 225, 128, 234, 38, 2, 249, - 140, 236, 4, 225, 128, 234, 38, 2, 233, 10, 236, 4, 37, 239, 228, 234, - 37, 236, 4, 37, 225, 128, 234, 37, 135, 237, 138, 22, 234, 37, 135, 237, - 138, 145, 234, 37, 236, 4, 24, 234, 37, 236, 98, 135, 227, 233, 227, 231, - 2, 239, 239, 232, 78, 239, 240, 234, 37, 247, 48, 233, 176, 239, 239, - 239, 240, 2, 47, 82, 239, 240, 254, 38, 2, 228, 194, 251, 103, 246, 215, - 254, 168, 239, 237, 237, 171, 239, 238, 2, 231, 235, 233, 164, 254, 102, - 232, 247, 237, 171, 239, 238, 2, 229, 188, 233, 164, 254, 102, 232, 247, - 237, 171, 239, 238, 190, 240, 14, 226, 240, 232, 247, 239, 240, 254, 102, - 102, 232, 255, 234, 37, 232, 73, 239, 240, 234, 37, 239, 240, 2, 117, 67, - 2, 88, 239, 240, 2, 24, 53, 239, 240, 2, 239, 227, 239, 240, 2, 225, 127, - 239, 240, 2, 234, 5, 239, 240, 2, 225, 133, 239, 115, 238, 9, 42, 226, - 79, 234, 37, 223, 120, 150, 230, 225, 251, 45, 223, 120, 150, 230, 225, - 233, 34, 223, 120, 150, 230, 225, 232, 197, 79, 5, 2, 3, 251, 107, 46, - 79, 5, 2, 251, 102, 255, 42, 46, 79, 5, 2, 226, 159, 46, 79, 5, 2, 56, - 51, 79, 5, 2, 226, 159, 51, 79, 5, 2, 227, 253, 113, 79, 5, 2, 86, 226, - 78, 236, 121, 5, 2, 251, 55, 46, 236, 121, 5, 2, 56, 51, 236, 121, 5, 2, - 247, 113, 249, 138, 236, 121, 5, 2, 231, 135, 249, 138, 79, 5, 240, 17, - 42, 132, 251, 106, 79, 5, 240, 17, 41, 132, 251, 106, 225, 41, 145, 250, - 244, 232, 200, 236, 52, 5, 2, 56, 46, 236, 52, 5, 2, 225, 133, 229, 185, - 232, 201, 2, 252, 126, 251, 81, 228, 182, 232, 200, 236, 52, 5, 240, 17, - 42, 132, 251, 106, 236, 52, 5, 240, 17, 41, 132, 251, 106, 33, 236, 52, - 5, 2, 251, 102, 255, 41, 236, 52, 5, 240, 17, 47, 251, 106, 33, 249, 181, - 53, 79, 5, 240, 17, 226, 78, 236, 121, 5, 240, 17, 226, 78, 236, 52, 5, - 240, 17, 226, 78, 239, 234, 232, 200, 231, 146, 239, 234, 232, 200, 223, - 120, 150, 231, 220, 251, 45, 254, 198, 145, 251, 15, 239, 228, 2, 249, - 140, 225, 128, 2, 236, 121, 53, 225, 128, 2, 234, 5, 239, 228, 2, 234, 5, - 239, 228, 2, 237, 138, 254, 186, 225, 128, 2, 237, 138, 234, 31, 225, - 128, 64, 239, 227, 239, 228, 64, 225, 127, 225, 128, 64, 253, 36, 64, - 239, 227, 239, 228, 64, 253, 36, 64, 225, 127, 225, 128, 252, 202, 22, - 239, 114, 2, 225, 127, 239, 228, 252, 202, 22, 239, 114, 2, 239, 227, - 251, 82, 225, 128, 2, 229, 170, 251, 82, 239, 228, 2, 229, 170, 47, 37, - 239, 227, 47, 37, 225, 127, 251, 82, 225, 128, 2, 229, 171, 22, 228, 182, - 232, 200, 237, 138, 22, 2, 56, 46, 237, 138, 145, 2, 56, 46, 47, 237, - 138, 254, 186, 47, 237, 138, 234, 31, 135, 239, 229, 237, 138, 254, 186, - 135, 239, 229, 237, 138, 234, 31, 228, 188, 238, 9, 234, 31, 228, 188, - 238, 9, 254, 186, 237, 138, 145, 234, 3, 237, 138, 254, 186, 237, 138, - 22, 2, 236, 154, 228, 48, 237, 138, 145, 2, 236, 154, 228, 48, 237, 138, - 22, 2, 169, 250, 130, 237, 138, 145, 2, 169, 250, 130, 237, 138, 22, 2, - 47, 234, 5, 237, 138, 22, 2, 225, 133, 237, 138, 22, 2, 47, 225, 133, 3, - 225, 39, 2, 225, 133, 237, 138, 145, 2, 47, 234, 5, 237, 138, 145, 2, 47, - 225, 133, 223, 120, 150, 249, 149, 254, 163, 223, 120, 150, 232, 2, 254, - 163, 247, 204, 5, 2, 56, 51, 244, 63, 2, 56, 46, 226, 66, 169, 253, 36, - 2, 47, 61, 82, 226, 66, 169, 253, 36, 2, 226, 66, 61, 82, 226, 159, 234, - 38, 2, 56, 46, 226, 159, 234, 38, 2, 231, 135, 249, 138, 228, 247, 236, - 121, 228, 246, 251, 39, 2, 56, 46, 247, 204, 2, 254, 69, 254, 210, 105, - 180, 2, 251, 102, 255, 41, 254, 137, 105, 145, 105, 96, 247, 204, 5, 64, - 79, 53, 79, 5, 64, 247, 204, 53, 247, 204, 5, 64, 226, 159, 234, 37, 47, - 251, 62, 247, 205, 135, 251, 34, 247, 204, 229, 1, 152, 251, 34, 247, - 204, 229, 1, 247, 204, 5, 2, 135, 197, 64, 22, 135, 197, 51, 247, 200, 2, - 246, 243, 197, 46, 237, 213, 2, 251, 107, 239, 243, 245, 231, 2, 251, - 107, 239, 243, 237, 213, 2, 232, 69, 165, 46, 245, 231, 2, 232, 69, 165, - 46, 237, 213, 145, 228, 196, 105, 96, 245, 231, 145, 228, 196, 105, 96, - 237, 213, 145, 228, 196, 105, 180, 2, 56, 239, 243, 245, 231, 145, 228, - 196, 105, 180, 2, 56, 239, 243, 237, 213, 145, 228, 196, 105, 180, 2, 56, - 46, 245, 231, 145, 228, 196, 105, 180, 2, 56, 46, 237, 213, 145, 228, - 196, 105, 180, 2, 56, 64, 231, 153, 245, 231, 145, 228, 196, 105, 180, 2, - 56, 64, 237, 237, 237, 213, 145, 254, 138, 245, 231, 145, 254, 138, 237, - 213, 22, 228, 239, 190, 105, 96, 245, 231, 22, 228, 239, 190, 105, 96, - 237, 213, 22, 190, 254, 138, 245, 231, 22, 190, 254, 138, 237, 213, 64, - 248, 131, 105, 64, 245, 230, 245, 231, 64, 248, 131, 105, 64, 237, 212, - 237, 213, 64, 228, 247, 145, 247, 205, 245, 231, 64, 228, 247, 145, 247, - 205, 237, 213, 64, 228, 247, 64, 245, 230, 245, 231, 64, 228, 247, 64, - 237, 212, 237, 213, 64, 245, 231, 64, 248, 131, 247, 205, 245, 231, 64, - 237, 213, 64, 248, 131, 247, 205, 237, 213, 64, 228, 196, 105, 64, 245, - 231, 64, 228, 196, 247, 205, 245, 231, 64, 228, 196, 105, 64, 237, 213, - 64, 228, 196, 247, 205, 228, 196, 105, 180, 145, 237, 212, 228, 196, 105, - 180, 145, 245, 230, 228, 196, 105, 180, 145, 237, 213, 2, 56, 239, 243, - 228, 196, 105, 180, 145, 245, 231, 2, 56, 239, 243, 248, 131, 105, 180, - 145, 237, 212, 248, 131, 105, 180, 145, 245, 230, 248, 131, 228, 196, - 105, 180, 145, 237, 212, 248, 131, 228, 196, 105, 180, 145, 245, 230, - 228, 247, 145, 237, 212, 228, 247, 145, 245, 230, 228, 247, 64, 237, 213, - 64, 247, 204, 53, 228, 247, 64, 245, 231, 64, 247, 204, 53, 47, 235, 149, - 237, 212, 47, 235, 149, 245, 230, 47, 235, 149, 237, 213, 2, 225, 133, - 245, 231, 234, 3, 237, 212, 245, 231, 252, 202, 237, 212, 237, 213, 251, - 82, 252, 55, 250, 218, 245, 231, 251, 82, 252, 55, 250, 218, 237, 213, - 251, 82, 252, 55, 250, 219, 64, 228, 196, 247, 205, 245, 231, 251, 82, - 252, 55, 250, 219, 64, 228, 196, 247, 205, 228, 183, 226, 243, 238, 8, - 226, 243, 228, 183, 226, 244, 145, 105, 96, 238, 8, 226, 244, 145, 105, - 96, 247, 204, 5, 2, 252, 78, 46, 232, 214, 64, 228, 239, 247, 204, 53, - 227, 244, 64, 228, 239, 247, 204, 53, 232, 214, 64, 228, 239, 190, 105, - 96, 227, 244, 64, 228, 239, 190, 105, 96, 232, 214, 64, 247, 204, 53, - 227, 244, 64, 247, 204, 53, 232, 214, 64, 190, 105, 96, 227, 244, 64, - 190, 105, 96, 232, 214, 64, 254, 210, 105, 96, 227, 244, 64, 254, 210, - 105, 96, 232, 214, 64, 190, 254, 210, 105, 96, 227, 244, 64, 190, 254, - 210, 105, 96, 47, 232, 213, 47, 227, 243, 227, 252, 2, 249, 140, 227, - 218, 2, 249, 140, 227, 252, 2, 79, 5, 51, 227, 218, 2, 79, 5, 51, 227, - 252, 2, 236, 52, 5, 51, 227, 218, 2, 236, 52, 5, 51, 227, 252, 106, 145, - 105, 180, 2, 56, 46, 227, 218, 106, 145, 105, 180, 2, 56, 46, 227, 252, - 106, 64, 247, 204, 53, 227, 218, 106, 64, 247, 204, 53, 227, 252, 106, - 64, 226, 159, 234, 37, 227, 218, 106, 64, 226, 159, 234, 37, 227, 252, - 106, 64, 254, 210, 105, 96, 227, 218, 106, 64, 254, 210, 105, 96, 227, - 252, 106, 64, 190, 105, 96, 227, 218, 106, 64, 190, 105, 96, 37, 42, 234, - 44, 77, 234, 37, 37, 41, 234, 44, 77, 234, 37, 251, 82, 227, 251, 251, - 82, 227, 217, 251, 82, 227, 252, 145, 105, 96, 251, 82, 227, 218, 145, - 105, 96, 227, 252, 64, 227, 217, 227, 218, 64, 227, 251, 227, 252, 64, - 227, 251, 227, 218, 64, 227, 217, 227, 218, 252, 202, 227, 251, 227, 218, - 252, 202, 22, 239, 114, 252, 55, 250, 131, 2, 227, 251, 247, 254, 106, - 234, 39, 248, 124, 233, 29, 2, 227, 38, 226, 105, 226, 90, 239, 227, 246, - 250, 234, 254, 229, 63, 42, 227, 96, 229, 63, 103, 227, 96, 229, 63, 99, - 227, 96, 233, 115, 2, 193, 61, 253, 36, 226, 66, 41, 225, 232, 47, 61, - 253, 36, 42, 225, 232, 61, 253, 36, 47, 42, 225, 232, 47, 61, 253, 36, - 47, 42, 225, 232, 182, 250, 131, 246, 224, 42, 236, 214, 106, 47, 225, - 30, 229, 63, 103, 227, 97, 2, 234, 5, 229, 63, 99, 227, 97, 2, 225, 133, - 229, 63, 99, 227, 97, 64, 229, 63, 103, 227, 96, 47, 103, 227, 96, 47, - 99, 227, 96, 47, 195, 190, 53, 200, 47, 195, 190, 53, 249, 154, 190, 249, - 187, 2, 200, 235, 158, 228, 194, 61, 237, 171, 2, 251, 107, 46, 61, 237, - 171, 2, 251, 107, 51, 103, 227, 97, 2, 251, 107, 51, 233, 185, 2, 169, - 82, 233, 185, 2, 226, 159, 234, 37, 226, 66, 61, 253, 36, 252, 170, 231, - 221, 226, 66, 61, 253, 36, 2, 169, 82, 226, 66, 251, 62, 234, 37, 226, - 66, 235, 149, 237, 212, 226, 66, 235, 149, 245, 230, 248, 131, 228, 196, - 237, 213, 145, 105, 96, 248, 131, 228, 196, 245, 231, 145, 105, 96, 226, - 66, 228, 162, 252, 170, 231, 221, 238, 9, 226, 66, 61, 253, 36, 234, 37, - 47, 228, 162, 234, 37, 63, 61, 125, 236, 4, 63, 61, 125, 234, 245, 248, - 45, 63, 58, 234, 245, 224, 131, 63, 58, 228, 152, 248, 45, 63, 58, 228, - 152, 224, 131, 63, 58, 42, 41, 63, 58, 117, 86, 58, 225, 106, 86, 58, - 248, 125, 86, 58, 234, 245, 248, 45, 86, 58, 234, 245, 224, 131, 86, 58, - 228, 152, 248, 45, 86, 58, 228, 152, 224, 131, 86, 58, 42, 41, 86, 58, - 99, 103, 86, 58, 81, 67, 2, 226, 151, 248, 124, 81, 67, 2, 226, 151, 225, - 105, 117, 67, 2, 226, 151, 248, 124, 117, 67, 2, 226, 151, 225, 105, 37, - 2, 226, 106, 132, 252, 150, 37, 2, 252, 126, 132, 252, 150, 37, 2, 225, - 113, 41, 250, 1, 132, 252, 150, 37, 2, 203, 42, 250, 1, 132, 252, 150, - 249, 251, 2, 42, 132, 252, 150, 249, 251, 2, 41, 132, 252, 150, 249, 251, - 2, 226, 106, 132, 252, 150, 249, 251, 2, 252, 126, 132, 252, 150, 248, - 138, 228, 120, 86, 238, 9, 228, 120, 63, 238, 9, 228, 120, 86, 224, 234, - 3, 228, 120, 63, 224, 234, 3, 228, 120, 86, 233, 129, 63, 233, 129, 63, - 245, 86, 86, 245, 86, 169, 86, 245, 86, 86, 238, 9, 251, 106, 86, 236, - 228, 249, 250, 63, 236, 228, 249, 250, 86, 236, 228, 237, 113, 63, 236, - 228, 237, 113, 86, 3, 249, 250, 86, 3, 237, 113, 63, 3, 237, 113, 86, - 169, 247, 250, 63, 169, 247, 250, 86, 61, 247, 250, 63, 61, 247, 250, 42, - 67, 2, 3, 251, 106, 152, 117, 254, 92, 42, 67, 2, 33, 233, 10, 182, 117, - 228, 115, 58, 117, 225, 203, 67, 2, 61, 82, 117, 225, 203, 67, 2, 47, 61, - 82, 117, 225, 203, 67, 246, 224, 125, 117, 225, 203, 226, 66, 250, 131, - 58, 117, 67, 2, 248, 138, 228, 48, 117, 67, 2, 227, 90, 2, 61, 82, 117, - 67, 2, 227, 90, 2, 47, 61, 82, 117, 225, 203, 67, 2, 227, 89, 117, 225, - 203, 67, 2, 227, 90, 2, 61, 82, 117, 225, 203, 67, 2, 227, 90, 2, 47, 61, - 82, 117, 67, 226, 188, 224, 73, 224, 148, 67, 232, 251, 249, 199, 237, - 237, 247, 204, 5, 64, 117, 58, 231, 193, 226, 159, 234, 38, 64, 117, 58, - 117, 67, 64, 231, 193, 254, 210, 105, 96, 81, 67, 226, 188, 245, 230, 81, - 67, 226, 188, 227, 217, 117, 232, 78, 58, 81, 232, 78, 58, 231, 193, 226, - 159, 234, 38, 64, 81, 58, 81, 67, 64, 231, 193, 254, 210, 105, 96, 226, - 159, 234, 38, 64, 117, 58, 117, 67, 64, 254, 210, 105, 96, 117, 67, 64, - 231, 193, 226, 159, 234, 37, 81, 67, 64, 231, 193, 226, 159, 234, 37, 63, - 236, 228, 228, 58, 86, 3, 228, 58, 63, 3, 228, 58, 86, 231, 151, 233, - 129, 63, 231, 151, 233, 129, 115, 6, 1, 254, 28, 115, 6, 1, 252, 86, 115, - 6, 1, 225, 40, 115, 6, 1, 246, 19, 115, 6, 1, 249, 156, 115, 6, 1, 223, - 209, 115, 6, 1, 223, 71, 115, 6, 1, 248, 67, 115, 6, 1, 223, 94, 115, 6, - 1, 239, 186, 115, 6, 1, 59, 239, 186, 115, 6, 1, 74, 115, 6, 1, 249, 174, - 115, 6, 1, 239, 51, 115, 6, 1, 237, 150, 115, 6, 1, 236, 8, 115, 6, 1, - 235, 227, 115, 6, 1, 234, 54, 115, 6, 1, 232, 249, 115, 6, 1, 231, 134, - 115, 6, 1, 228, 187, 115, 6, 1, 225, 223, 115, 6, 1, 225, 149, 115, 6, 1, - 246, 226, 115, 6, 1, 245, 92, 115, 6, 1, 234, 14, 115, 6, 1, 233, 151, - 115, 6, 1, 229, 46, 115, 6, 1, 226, 29, 115, 6, 1, 251, 142, 115, 6, 1, - 229, 146, 115, 6, 1, 223, 213, 115, 6, 1, 223, 215, 115, 6, 1, 223, 237, - 115, 6, 1, 228, 135, 154, 115, 6, 1, 223, 158, 115, 6, 1, 3, 223, 139, - 115, 6, 1, 3, 223, 140, 2, 227, 89, 115, 6, 1, 223, 183, 115, 6, 1, 239, - 214, 3, 223, 139, 115, 6, 1, 252, 173, 223, 139, 115, 6, 1, 239, 214, - 252, 173, 223, 139, 115, 6, 1, 247, 38, 115, 6, 1, 239, 184, 115, 6, 1, - 229, 45, 115, 6, 1, 226, 58, 57, 115, 6, 1, 238, 0, 236, 8, 115, 3, 1, - 254, 28, 115, 3, 1, 252, 86, 115, 3, 1, 225, 40, 115, 3, 1, 246, 19, 115, - 3, 1, 249, 156, 115, 3, 1, 223, 209, 115, 3, 1, 223, 71, 115, 3, 1, 248, - 67, 115, 3, 1, 223, 94, 115, 3, 1, 239, 186, 115, 3, 1, 59, 239, 186, - 115, 3, 1, 74, 115, 3, 1, 249, 174, 115, 3, 1, 239, 51, 115, 3, 1, 237, - 150, 115, 3, 1, 236, 8, 115, 3, 1, 235, 227, 115, 3, 1, 234, 54, 115, 3, - 1, 232, 249, 115, 3, 1, 231, 134, 115, 3, 1, 228, 187, 115, 3, 1, 225, - 223, 115, 3, 1, 225, 149, 115, 3, 1, 246, 226, 115, 3, 1, 245, 92, 115, - 3, 1, 234, 14, 115, 3, 1, 233, 151, 115, 3, 1, 229, 46, 115, 3, 1, 226, - 29, 115, 3, 1, 251, 142, 115, 3, 1, 229, 146, 115, 3, 1, 223, 213, 115, - 3, 1, 223, 215, 115, 3, 1, 223, 237, 115, 3, 1, 228, 135, 154, 115, 3, 1, - 223, 158, 115, 3, 1, 3, 223, 139, 115, 3, 1, 3, 223, 140, 2, 227, 89, - 115, 3, 1, 223, 183, 115, 3, 1, 239, 214, 3, 223, 139, 115, 3, 1, 252, - 173, 223, 139, 115, 3, 1, 239, 214, 252, 173, 223, 139, 115, 3, 1, 247, - 38, 115, 3, 1, 239, 184, 115, 3, 1, 229, 45, 115, 3, 1, 226, 58, 57, 115, - 3, 1, 238, 0, 236, 8, 7, 6, 1, 238, 47, 2, 47, 125, 7, 3, 1, 238, 47, 2, - 47, 125, 7, 6, 1, 238, 47, 2, 236, 154, 205, 7, 6, 1, 233, 245, 2, 82, 7, - 6, 1, 232, 27, 2, 227, 89, 7, 3, 1, 102, 2, 82, 7, 3, 1, 227, 110, 2, - 250, 1, 82, 7, 6, 1, 245, 172, 2, 250, 34, 7, 3, 1, 245, 172, 2, 250, 34, - 7, 6, 1, 239, 77, 2, 250, 34, 7, 3, 1, 239, 77, 2, 250, 34, 7, 6, 1, 223, - 120, 2, 250, 34, 7, 3, 1, 223, 120, 2, 250, 34, 7, 6, 1, 254, 205, 7, 6, - 1, 237, 69, 2, 88, 7, 6, 1, 209, 57, 7, 3, 1, 225, 65, 2, 41, 88, 7, 6, - 1, 224, 175, 2, 88, 7, 3, 1, 224, 175, 2, 88, 7, 3, 1, 225, 65, 2, 250, - 224, 7, 6, 1, 132, 212, 7, 3, 1, 132, 212, 7, 3, 1, 227, 87, 233, 87, 7, - 3, 1, 161, 2, 234, 241, 7, 3, 1, 209, 232, 27, 2, 227, 89, 7, 3, 1, 130, - 2, 184, 231, 140, 239, 243, 7, 1, 3, 6, 209, 72, 7, 227, 253, 3, 1, 239, - 182, 52, 1, 6, 196, 70, 6, 1, 254, 222, 70, 3, 1, 254, 222, 70, 6, 1, - 224, 226, 70, 3, 1, 224, 226, 70, 6, 1, 246, 169, 70, 3, 1, 246, 169, 70, - 6, 1, 250, 162, 70, 3, 1, 250, 162, 70, 6, 1, 248, 21, 70, 3, 1, 248, 21, - 70, 6, 1, 228, 156, 70, 3, 1, 228, 156, 70, 6, 1, 223, 103, 70, 3, 1, - 223, 103, 70, 6, 1, 245, 130, 70, 3, 1, 245, 130, 70, 6, 1, 226, 222, 70, - 3, 1, 226, 222, 70, 6, 1, 244, 72, 70, 3, 1, 244, 72, 70, 6, 1, 239, 40, - 70, 3, 1, 239, 40, 70, 6, 1, 237, 254, 70, 3, 1, 237, 254, 70, 6, 1, 236, - 157, 70, 3, 1, 236, 157, 70, 6, 1, 235, 89, 70, 3, 1, 235, 89, 70, 6, 1, - 238, 111, 70, 3, 1, 238, 111, 70, 6, 1, 73, 70, 3, 1, 73, 70, 6, 1, 233, - 69, 70, 3, 1, 233, 69, 70, 6, 1, 231, 122, 70, 3, 1, 231, 122, 70, 6, 1, - 228, 249, 70, 3, 1, 228, 249, 70, 6, 1, 227, 61, 70, 3, 1, 227, 61, 70, - 6, 1, 225, 170, 70, 3, 1, 225, 170, 70, 6, 1, 247, 70, 70, 3, 1, 247, 70, - 70, 6, 1, 238, 212, 70, 3, 1, 238, 212, 70, 6, 1, 232, 183, 70, 3, 1, - 232, 183, 70, 6, 1, 234, 48, 70, 3, 1, 234, 48, 70, 6, 1, 249, 255, 254, - 227, 70, 3, 1, 249, 255, 254, 227, 70, 6, 1, 84, 70, 254, 248, 70, 3, 1, - 84, 70, 254, 248, 70, 6, 1, 250, 236, 248, 21, 70, 3, 1, 250, 236, 248, - 21, 70, 6, 1, 249, 255, 239, 40, 70, 3, 1, 249, 255, 239, 40, 70, 6, 1, - 249, 255, 235, 89, 70, 3, 1, 249, 255, 235, 89, 70, 6, 1, 250, 236, 235, - 89, 70, 3, 1, 250, 236, 235, 89, 70, 6, 1, 84, 70, 234, 48, 70, 3, 1, 84, - 70, 234, 48, 70, 6, 1, 230, 255, 70, 3, 1, 230, 255, 70, 6, 1, 250, 241, - 229, 106, 70, 3, 1, 250, 241, 229, 106, 70, 6, 1, 84, 70, 229, 106, 70, - 3, 1, 84, 70, 229, 106, 70, 6, 1, 84, 70, 247, 183, 70, 3, 1, 84, 70, - 247, 183, 70, 6, 1, 254, 236, 238, 215, 70, 3, 1, 254, 236, 238, 215, 70, - 6, 1, 249, 255, 244, 213, 70, 3, 1, 249, 255, 244, 213, 70, 6, 1, 84, 70, - 244, 213, 70, 3, 1, 84, 70, 244, 213, 70, 6, 1, 84, 70, 154, 70, 3, 1, - 84, 70, 154, 70, 6, 1, 238, 46, 154, 70, 3, 1, 238, 46, 154, 70, 6, 1, - 84, 70, 245, 106, 70, 3, 1, 84, 70, 245, 106, 70, 6, 1, 84, 70, 245, 132, - 70, 3, 1, 84, 70, 245, 132, 70, 6, 1, 84, 70, 246, 165, 70, 3, 1, 84, 70, - 246, 165, 70, 6, 1, 84, 70, 249, 177, 70, 3, 1, 84, 70, 249, 177, 70, 6, - 1, 84, 70, 229, 80, 70, 3, 1, 84, 70, 229, 80, 70, 6, 1, 84, 234, 204, - 229, 80, 70, 3, 1, 84, 234, 204, 229, 80, 70, 6, 1, 84, 234, 204, 235, - 114, 70, 3, 1, 84, 234, 204, 235, 114, 70, 6, 1, 84, 234, 204, 234, 163, - 70, 3, 1, 84, 234, 204, 234, 163, 70, 6, 1, 84, 234, 204, 224, 149, 70, - 3, 1, 84, 234, 204, 224, 149, 70, 14, 239, 56, 70, 14, 236, 158, 231, - 122, 70, 14, 233, 70, 231, 122, 70, 14, 228, 54, 70, 14, 227, 62, 231, - 122, 70, 14, 238, 213, 231, 122, 70, 14, 229, 81, 228, 249, 70, 84, 234, - 204, 246, 218, 228, 38, 70, 84, 234, 204, 249, 201, 232, 69, 76, 70, 84, - 234, 204, 240, 6, 232, 69, 76, 70, 84, 234, 204, 225, 32, 249, 184, 70, - 246, 235, 168, 245, 151, 70, 246, 218, 228, 38, 70, 236, 80, 249, 184, - 87, 3, 1, 254, 190, 87, 3, 1, 253, 44, 87, 3, 1, 246, 168, 87, 3, 1, 249, - 148, 87, 3, 1, 247, 239, 87, 3, 1, 224, 219, 87, 3, 1, 223, 92, 87, 3, 1, - 227, 73, 87, 3, 1, 240, 16, 87, 3, 1, 239, 46, 87, 3, 1, 238, 6, 87, 3, - 1, 237, 35, 87, 3, 1, 235, 230, 87, 3, 1, 234, 61, 87, 3, 1, 233, 194, - 87, 3, 1, 223, 81, 87, 3, 1, 232, 15, 87, 3, 1, 230, 253, 87, 3, 1, 227, - 67, 87, 3, 1, 225, 138, 87, 3, 1, 233, 92, 87, 3, 1, 238, 218, 87, 3, 1, - 246, 60, 87, 3, 1, 232, 123, 87, 3, 1, 229, 78, 87, 3, 1, 251, 161, 87, - 3, 1, 252, 26, 87, 3, 1, 239, 149, 87, 3, 1, 251, 109, 87, 3, 1, 251, - 192, 87, 3, 1, 224, 70, 87, 3, 1, 239, 159, 87, 3, 1, 245, 165, 87, 3, 1, - 245, 121, 87, 3, 1, 245, 71, 87, 3, 1, 224, 141, 87, 3, 1, 245, 141, 87, - 3, 1, 244, 225, 221, 1, 191, 221, 1, 224, 17, 221, 1, 224, 16, 221, 1, - 224, 8, 221, 1, 224, 6, 221, 1, 252, 204, 255, 43, 224, 2, 221, 1, 224, - 2, 221, 1, 224, 14, 221, 1, 224, 11, 221, 1, 224, 13, 221, 1, 224, 12, - 221, 1, 223, 206, 221, 1, 224, 9, 221, 1, 224, 1, 221, 1, 225, 249, 224, - 1, 221, 1, 223, 254, 221, 1, 224, 4, 221, 1, 252, 204, 255, 43, 224, 4, - 221, 1, 225, 249, 224, 4, 221, 1, 224, 3, 221, 1, 224, 21, 221, 1, 223, - 255, 221, 1, 225, 249, 223, 255, 221, 1, 223, 246, 221, 1, 225, 249, 223, - 246, 221, 1, 223, 202, 221, 1, 223, 230, 221, 1, 255, 1, 223, 230, 221, - 1, 225, 249, 223, 230, 221, 1, 223, 253, 221, 1, 223, 252, 221, 1, 223, - 250, 221, 1, 225, 249, 224, 5, 221, 1, 225, 249, 223, 248, 221, 1, 223, - 247, 221, 1, 223, 158, 221, 1, 223, 244, 221, 1, 223, 243, 221, 1, 224, - 7, 221, 1, 225, 249, 224, 7, 221, 1, 254, 30, 224, 7, 221, 1, 223, 242, - 221, 1, 223, 240, 221, 1, 223, 241, 221, 1, 223, 239, 221, 1, 223, 238, - 221, 1, 224, 15, 221, 1, 223, 236, 221, 1, 223, 235, 221, 1, 223, 234, - 221, 1, 223, 233, 221, 1, 223, 231, 221, 1, 227, 54, 223, 231, 221, 1, - 223, 229, 221, 52, 1, 238, 38, 76, 25, 4, 237, 142, 25, 4, 236, 102, 25, - 4, 231, 120, 25, 4, 228, 168, 25, 4, 229, 70, 25, 4, 252, 137, 25, 4, - 226, 124, 25, 4, 251, 67, 25, 4, 235, 4, 25, 4, 234, 151, 25, 4, 246, 16, - 234, 105, 25, 4, 223, 26, 25, 4, 249, 159, 25, 4, 250, 91, 25, 4, 239, - 116, 25, 4, 226, 200, 25, 4, 251, 149, 25, 4, 233, 78, 25, 4, 233, 3, 25, - 4, 246, 71, 25, 4, 246, 67, 25, 4, 246, 68, 25, 4, 246, 69, 25, 4, 228, - 110, 25, 4, 228, 80, 25, 4, 228, 91, 25, 4, 228, 109, 25, 4, 228, 94, 25, - 4, 228, 95, 25, 4, 228, 84, 25, 4, 251, 246, 25, 4, 251, 233, 25, 4, 251, - 235, 25, 4, 251, 245, 25, 4, 251, 243, 25, 4, 251, 244, 25, 4, 251, 234, - 25, 4, 222, 253, 25, 4, 222, 233, 25, 4, 222, 244, 25, 4, 222, 252, 25, - 4, 222, 247, 25, 4, 222, 248, 25, 4, 222, 236, 25, 4, 251, 242, 25, 4, - 251, 236, 25, 4, 251, 238, 25, 4, 251, 241, 25, 4, 251, 239, 25, 4, 251, - 240, 25, 4, 251, 237, 25, 4, 232, 39, 25, 4, 232, 29, 25, 4, 232, 35, 25, - 4, 232, 38, 25, 4, 232, 36, 25, 4, 232, 37, 25, 4, 232, 34, 25, 4, 238, - 57, 25, 4, 238, 49, 25, 4, 238, 52, 25, 4, 238, 56, 25, 4, 238, 53, 25, - 4, 238, 54, 25, 4, 238, 50, 25, 4, 224, 38, 25, 4, 224, 28, 25, 4, 224, - 34, 25, 4, 224, 37, 25, 4, 224, 35, 25, 4, 224, 36, 25, 4, 224, 33, 25, - 4, 245, 182, 25, 4, 245, 173, 25, 4, 245, 176, 25, 4, 245, 181, 25, 4, - 245, 178, 25, 4, 245, 179, 25, 4, 245, 175, 36, 28, 1, 252, 238, 36, 28, - 1, 225, 42, 36, 28, 1, 246, 58, 36, 28, 1, 250, 77, 36, 28, 1, 223, 77, - 36, 28, 1, 223, 97, 36, 28, 1, 177, 36, 28, 1, 248, 2, 36, 28, 1, 247, - 247, 36, 28, 1, 247, 239, 36, 28, 1, 73, 36, 28, 1, 233, 151, 36, 28, 1, - 247, 198, 36, 28, 1, 247, 188, 36, 28, 1, 227, 44, 36, 28, 1, 154, 36, - 28, 1, 226, 40, 36, 28, 1, 251, 182, 36, 28, 1, 229, 146, 36, 28, 1, 229, - 116, 36, 28, 1, 247, 38, 36, 28, 1, 247, 187, 36, 28, 1, 57, 36, 28, 1, - 240, 72, 36, 28, 1, 249, 175, 36, 28, 1, 236, 90, 225, 153, 36, 28, 1, - 223, 239, 36, 28, 1, 223, 158, 36, 28, 1, 239, 213, 57, 36, 28, 1, 237, - 155, 223, 139, 36, 28, 1, 252, 173, 223, 139, 36, 28, 1, 239, 213, 252, - 173, 223, 139, 41, 254, 182, 227, 248, 237, 13, 41, 254, 182, 248, 138, - 227, 248, 237, 13, 42, 227, 248, 104, 41, 227, 248, 104, 42, 248, 138, - 227, 248, 104, 41, 248, 138, 227, 248, 104, 232, 8, 239, 231, 237, 13, - 232, 8, 248, 138, 239, 231, 237, 13, 248, 138, 226, 91, 237, 13, 42, 226, - 91, 104, 41, 226, 91, 104, 232, 8, 228, 120, 42, 232, 8, 234, 63, 104, - 41, 232, 8, 234, 63, 104, 248, 36, 251, 8, 233, 190, 246, 251, 233, 190, - 200, 246, 251, 233, 190, 244, 92, 248, 138, 234, 100, 248, 125, 254, 187, - 225, 106, 254, 187, 248, 138, 231, 151, 254, 181, 47, 234, 97, 244, 95, - 239, 223, 239, 230, 233, 223, 252, 112, 244, 96, 2, 219, 226, 159, 2, - 231, 140, 46, 42, 184, 233, 182, 104, 41, 184, 233, 182, 104, 226, 159, - 2, 56, 46, 226, 159, 2, 56, 51, 42, 61, 253, 36, 2, 232, 65, 41, 61, 253, - 36, 2, 232, 65, 226, 106, 42, 132, 104, 226, 106, 41, 132, 104, 252, 126, - 42, 132, 104, 252, 126, 41, 132, 104, 42, 229, 11, 97, 104, 41, 229, 11, - 97, 104, 42, 47, 233, 180, 41, 47, 233, 180, 135, 197, 107, 168, 56, 232, - 170, 168, 56, 107, 135, 197, 232, 170, 228, 119, 246, 243, 56, 232, 170, - 247, 37, 56, 76, 200, 232, 69, 76, 61, 205, 231, 140, 232, 254, 9, 29, - 231, 211, 9, 29, 251, 88, 9, 29, 230, 209, 118, 9, 29, 230, 209, 113, 9, - 29, 230, 209, 166, 9, 29, 233, 112, 9, 29, 252, 118, 9, 29, 227, 99, 9, - 29, 238, 154, 118, 9, 29, 238, 154, 113, 9, 29, 249, 182, 9, 29, 230, - 211, 9, 29, 3, 118, 9, 29, 3, 113, 9, 29, 238, 15, 118, 9, 29, 238, 15, - 113, 9, 29, 238, 15, 166, 9, 29, 238, 15, 158, 9, 29, 228, 176, 9, 29, - 226, 192, 9, 29, 228, 174, 118, 9, 29, 228, 174, 113, 9, 29, 245, 115, - 118, 9, 29, 245, 115, 113, 9, 29, 245, 146, 9, 29, 232, 1, 9, 29, 251, - 147, 9, 29, 227, 227, 9, 29, 236, 84, 9, 29, 250, 75, 9, 29, 236, 77, 9, - 29, 251, 98, 9, 29, 224, 152, 118, 9, 29, 224, 152, 113, 9, 29, 247, 46, - 9, 29, 233, 160, 118, 9, 29, 233, 160, 113, 9, 29, 228, 245, 132, 226, - 87, 226, 49, 9, 29, 250, 253, 9, 29, 249, 153, 9, 29, 239, 177, 9, 29, - 252, 133, 106, 251, 77, 9, 29, 247, 136, 9, 29, 228, 132, 118, 9, 29, - 228, 132, 113, 9, 29, 253, 46, 9, 29, 228, 250, 9, 29, 252, 41, 228, 250, - 9, 29, 235, 148, 118, 9, 29, 235, 148, 113, 9, 29, 235, 148, 166, 9, 29, - 235, 148, 158, 9, 29, 236, 204, 9, 29, 229, 108, 9, 29, 232, 6, 9, 29, - 247, 154, 9, 29, 234, 73, 9, 29, 252, 97, 118, 9, 29, 252, 97, 113, 9, - 29, 236, 231, 9, 29, 236, 79, 9, 29, 245, 240, 118, 9, 29, 245, 240, 113, - 9, 29, 245, 240, 166, 9, 29, 226, 167, 9, 29, 251, 76, 9, 29, 224, 131, - 118, 9, 29, 224, 131, 113, 9, 29, 252, 41, 230, 203, 9, 29, 228, 245, - 244, 160, 9, 29, 244, 160, 9, 29, 252, 41, 228, 138, 9, 29, 252, 41, 229, - 103, 9, 29, 247, 2, 9, 29, 252, 41, 252, 2, 9, 29, 228, 245, 224, 166, 9, - 29, 224, 167, 118, 9, 29, 224, 167, 113, 9, 29, 251, 99, 9, 29, 252, 41, - 246, 6, 9, 29, 182, 118, 9, 29, 182, 113, 9, 29, 252, 41, 237, 134, 9, - 29, 252, 41, 246, 153, 9, 29, 236, 76, 118, 9, 29, 236, 76, 113, 9, 29, - 232, 9, 9, 29, 252, 140, 9, 29, 252, 41, 227, 72, 237, 240, 9, 29, 252, - 41, 237, 241, 9, 29, 252, 41, 224, 111, 9, 29, 252, 41, 247, 10, 9, 29, - 248, 43, 118, 9, 29, 248, 43, 113, 9, 29, 248, 43, 166, 9, 29, 252, 41, - 248, 42, 9, 29, 245, 118, 9, 29, 252, 41, 244, 159, 9, 29, 252, 132, 9, - 29, 246, 53, 9, 29, 252, 41, 247, 43, 9, 29, 252, 41, 252, 164, 9, 29, - 252, 41, 231, 7, 9, 29, 228, 245, 224, 126, 9, 29, 228, 245, 223, 223, 9, - 29, 252, 41, 246, 225, 9, 29, 239, 181, 247, 157, 9, 29, 252, 41, 247, - 157, 9, 29, 239, 181, 226, 107, 9, 29, 252, 41, 226, 107, 9, 29, 239, - 181, 248, 118, 9, 29, 252, 41, 248, 118, 9, 29, 225, 230, 9, 29, 239, - 181, 225, 230, 9, 29, 252, 41, 225, 230, 49, 29, 118, 49, 29, 237, 170, - 49, 29, 249, 140, 49, 29, 228, 194, 49, 29, 230, 208, 49, 29, 88, 49, 29, - 113, 49, 29, 237, 190, 49, 29, 237, 35, 49, 29, 237, 226, 49, 29, 247, - 222, 49, 29, 187, 49, 29, 103, 252, 118, 49, 29, 250, 254, 49, 29, 244, - 69, 49, 29, 227, 99, 49, 29, 234, 44, 252, 118, 49, 29, 238, 153, 49, 29, - 232, 233, 49, 29, 224, 87, 49, 29, 228, 128, 49, 29, 41, 234, 44, 252, - 118, 49, 29, 245, 72, 247, 235, 49, 29, 227, 23, 49, 29, 249, 182, 49, - 29, 230, 211, 49, 29, 251, 88, 49, 29, 232, 202, 49, 29, 255, 7, 49, 29, - 236, 72, 49, 29, 247, 235, 49, 29, 248, 48, 49, 29, 230, 224, 49, 29, - 246, 11, 49, 29, 246, 12, 228, 186, 49, 29, 247, 156, 49, 29, 252, 172, - 49, 29, 224, 101, 49, 29, 251, 163, 49, 29, 231, 113, 49, 29, 240, 15, - 49, 29, 228, 184, 49, 29, 238, 14, 49, 29, 251, 6, 49, 29, 228, 123, 49, - 29, 236, 74, 49, 29, 231, 131, 49, 29, 224, 89, 49, 29, 234, 59, 49, 29, - 225, 235, 49, 29, 248, 109, 49, 29, 229, 63, 226, 192, 49, 29, 248, 138, - 251, 88, 49, 29, 182, 228, 24, 49, 29, 135, 245, 145, 49, 29, 229, 65, - 49, 29, 252, 121, 49, 29, 228, 173, 49, 29, 252, 101, 49, 29, 228, 47, - 49, 29, 245, 114, 49, 29, 245, 152, 49, 29, 249, 143, 49, 29, 245, 146, - 49, 29, 252, 112, 49, 29, 232, 1, 49, 29, 230, 217, 49, 29, 249, 203, 49, - 29, 254, 35, 49, 29, 228, 120, 49, 29, 234, 242, 49, 29, 227, 227, 49, - 29, 230, 234, 49, 29, 236, 84, 49, 29, 226, 86, 49, 29, 238, 34, 49, 29, - 228, 38, 49, 29, 250, 75, 49, 29, 224, 140, 49, 29, 249, 162, 234, 242, - 49, 29, 251, 51, 49, 29, 246, 212, 49, 29, 251, 96, 49, 29, 228, 50, 49, - 29, 224, 151, 49, 29, 247, 46, 49, 29, 251, 95, 49, 29, 247, 101, 49, 29, - 47, 224, 73, 49, 29, 132, 226, 87, 226, 49, 49, 29, 228, 191, 49, 29, - 247, 109, 49, 29, 250, 253, 49, 29, 249, 153, 49, 29, 232, 199, 49, 29, - 239, 177, 49, 29, 236, 217, 49, 29, 226, 158, 49, 29, 227, 195, 49, 29, - 237, 185, 49, 29, 225, 86, 49, 29, 247, 69, 49, 29, 252, 133, 106, 251, - 77, 49, 29, 229, 12, 49, 29, 248, 138, 227, 21, 49, 29, 224, 121, 49, 29, - 228, 201, 49, 29, 249, 195, 49, 29, 247, 136, 49, 29, 228, 140, 49, 29, - 58, 49, 29, 228, 40, 49, 29, 228, 131, 49, 29, 226, 95, 49, 29, 245, 245, - 49, 29, 251, 251, 49, 29, 228, 62, 49, 29, 253, 46, 49, 29, 231, 178, 49, - 29, 228, 250, 49, 29, 239, 173, 49, 29, 235, 147, 49, 29, 229, 108, 49, - 29, 247, 94, 49, 29, 234, 73, 49, 29, 254, 186, 49, 29, 233, 14, 49, 29, - 248, 51, 49, 29, 252, 96, 49, 29, 236, 231, 49, 29, 236, 122, 49, 29, - 229, 192, 49, 29, 254, 96, 49, 29, 236, 79, 49, 29, 226, 110, 49, 29, - 234, 36, 49, 29, 252, 135, 49, 29, 228, 36, 49, 29, 251, 60, 49, 29, 245, - 239, 49, 29, 226, 167, 49, 29, 239, 245, 49, 29, 252, 141, 49, 29, 224, - 167, 247, 235, 49, 29, 251, 76, 49, 29, 224, 130, 49, 29, 230, 203, 49, - 29, 244, 160, 49, 29, 228, 138, 49, 29, 225, 61, 49, 29, 252, 235, 49, - 29, 233, 43, 49, 29, 253, 60, 49, 29, 229, 103, 49, 29, 231, 230, 49, 29, - 231, 60, 49, 29, 247, 2, 49, 29, 252, 134, 49, 29, 252, 2, 49, 29, 252, - 155, 49, 29, 236, 81, 49, 29, 224, 166, 49, 29, 251, 99, 49, 29, 224, - 109, 49, 29, 249, 192, 49, 29, 224, 220, 49, 29, 246, 6, 49, 29, 237, - 134, 49, 29, 246, 153, 49, 29, 236, 75, 49, 29, 228, 193, 49, 29, 229, - 63, 227, 88, 252, 164, 49, 29, 232, 9, 49, 29, 252, 140, 49, 29, 224, 84, - 49, 29, 247, 125, 49, 29, 237, 240, 49, 29, 227, 72, 237, 240, 49, 29, - 237, 238, 49, 29, 228, 154, 49, 29, 237, 241, 49, 29, 224, 111, 49, 29, - 247, 10, 49, 29, 248, 42, 49, 29, 245, 118, 49, 29, 246, 233, 49, 29, - 244, 159, 49, 29, 252, 132, 49, 29, 227, 76, 49, 29, 245, 157, 49, 29, - 247, 62, 49, 29, 231, 26, 224, 109, 49, 29, 251, 253, 49, 29, 246, 53, - 49, 29, 247, 43, 49, 29, 252, 164, 49, 29, 231, 7, 49, 29, 250, 65, 49, - 29, 224, 126, 49, 29, 245, 101, 49, 29, 223, 223, 49, 29, 236, 129, 49, - 29, 252, 150, 49, 29, 247, 244, 49, 29, 246, 225, 49, 29, 226, 64, 49, - 29, 248, 111, 49, 29, 231, 253, 49, 29, 234, 243, 49, 29, 247, 157, 49, - 29, 226, 107, 49, 29, 248, 118, 49, 29, 225, 230, 49, 29, 247, 11, 90, - 250, 32, 116, 42, 180, 231, 153, 90, 250, 32, 116, 64, 180, 51, 90, 250, - 32, 116, 42, 180, 236, 154, 22, 231, 153, 90, 250, 32, 116, 64, 180, 236, - 154, 22, 51, 90, 250, 32, 116, 246, 218, 227, 207, 90, 250, 32, 116, 227, - 208, 246, 224, 46, 90, 250, 32, 116, 227, 208, 246, 224, 51, 90, 250, 32, - 116, 227, 208, 246, 224, 237, 237, 90, 250, 32, 116, 227, 208, 246, 224, - 225, 113, 237, 237, 90, 250, 32, 116, 227, 208, 246, 224, 225, 113, 231, - 153, 90, 250, 32, 116, 227, 208, 246, 224, 203, 237, 237, 90, 250, 32, - 116, 234, 4, 90, 228, 145, 90, 251, 54, 90, 246, 218, 228, 38, 249, 189, - 76, 239, 174, 240, 5, 228, 61, 98, 90, 239, 193, 76, 90, 251, 79, 76, 90, - 65, 223, 89, 42, 254, 182, 104, 41, 254, 182, 104, 42, 47, 254, 182, 104, - 41, 47, 254, 182, 104, 42, 251, 11, 104, 41, 251, 11, 104, 42, 63, 251, - 11, 104, 41, 63, 251, 11, 104, 42, 86, 237, 217, 104, 41, 86, 237, 217, - 104, 232, 237, 76, 246, 104, 76, 42, 226, 100, 229, 104, 104, 41, 226, - 100, 229, 104, 104, 42, 63, 237, 217, 104, 41, 63, 237, 217, 104, 42, 63, - 226, 100, 229, 104, 104, 41, 63, 226, 100, 229, 104, 104, 42, 63, 37, - 104, 41, 63, 37, 104, 224, 148, 250, 130, 200, 47, 232, 206, 232, 57, 76, - 47, 232, 206, 232, 57, 76, 184, 47, 232, 206, 232, 57, 76, 232, 237, 165, - 247, 125, 245, 144, 207, 118, 245, 144, 207, 113, 245, 144, 207, 166, - 245, 144, 207, 158, 245, 144, 207, 173, 245, 144, 207, 183, 245, 144, - 207, 194, 245, 144, 207, 187, 245, 144, 207, 192, 90, 237, 209, 206, 76, - 90, 231, 135, 206, 76, 90, 250, 38, 206, 76, 90, 247, 221, 206, 76, 26, - 228, 241, 56, 206, 76, 26, 47, 56, 206, 76, 224, 146, 250, 130, 61, 239, - 45, 231, 212, 76, 61, 239, 45, 231, 212, 2, 224, 204, 228, 155, 76, 61, - 239, 45, 231, 212, 165, 225, 113, 245, 151, 61, 239, 45, 231, 212, 2, - 224, 204, 228, 155, 165, 225, 113, 245, 151, 61, 239, 45, 231, 212, 165, - 203, 245, 151, 33, 232, 237, 76, 90, 167, 237, 171, 247, 91, 229, 174, - 98, 245, 144, 207, 227, 23, 245, 144, 207, 225, 216, 245, 144, 207, 226, - 207, 61, 90, 239, 193, 76, 237, 3, 76, 233, 176, 254, 202, 76, 90, 38, - 240, 7, 90, 132, 247, 55, 228, 145, 126, 1, 3, 57, 126, 1, 57, 126, 1, 3, - 74, 126, 1, 74, 126, 1, 3, 66, 126, 1, 66, 126, 1, 3, 72, 126, 1, 72, - 126, 1, 3, 73, 126, 1, 73, 126, 1, 177, 126, 1, 246, 193, 126, 1, 238, - 199, 126, 1, 246, 46, 126, 1, 238, 107, 126, 1, 245, 218, 126, 1, 239, 3, - 126, 1, 246, 131, 126, 1, 238, 150, 126, 1, 246, 11, 126, 1, 231, 31, - 126, 1, 223, 117, 126, 1, 229, 15, 126, 1, 223, 47, 126, 1, 228, 6, 126, - 1, 223, 19, 126, 1, 230, 213, 126, 1, 223, 97, 126, 1, 228, 169, 126, 1, - 223, 27, 126, 1, 227, 107, 126, 1, 250, 189, 126, 1, 226, 175, 126, 1, - 250, 4, 126, 1, 3, 225, 250, 126, 1, 225, 250, 126, 1, 248, 107, 126, 1, - 227, 44, 126, 1, 250, 77, 126, 1, 96, 126, 1, 249, 161, 126, 1, 236, 1, - 126, 1, 235, 89, 126, 1, 234, 206, 126, 1, 235, 162, 126, 1, 235, 6, 126, - 1, 154, 126, 1, 253, 70, 126, 1, 213, 126, 1, 245, 75, 126, 1, 252, 181, - 126, 1, 233, 69, 126, 1, 244, 145, 126, 1, 252, 90, 126, 1, 232, 173, - 126, 1, 245, 121, 126, 1, 252, 238, 126, 1, 233, 151, 126, 1, 244, 227, - 126, 1, 252, 138, 126, 1, 233, 4, 126, 1, 198, 126, 1, 236, 157, 126, 1, - 236, 66, 126, 1, 236, 235, 126, 1, 236, 103, 126, 1, 3, 191, 126, 1, 191, - 126, 1, 3, 223, 158, 126, 1, 223, 158, 126, 1, 3, 223, 183, 126, 1, 223, - 183, 126, 1, 208, 126, 1, 231, 180, 126, 1, 231, 70, 126, 1, 231, 244, - 126, 1, 231, 122, 126, 1, 3, 224, 173, 126, 1, 224, 173, 126, 1, 224, - 118, 126, 1, 224, 141, 126, 1, 224, 105, 126, 1, 199, 126, 1, 224, 190, - 126, 1, 3, 177, 126, 1, 3, 239, 3, 36, 239, 19, 224, 204, 228, 155, 76, - 36, 239, 19, 229, 191, 228, 155, 76, 239, 19, 224, 204, 228, 155, 76, - 239, 19, 229, 191, 228, 155, 76, 126, 239, 193, 76, 126, 224, 204, 239, - 193, 76, 126, 249, 224, 223, 170, 239, 19, 47, 244, 95, 48, 1, 3, 57, 48, - 1, 57, 48, 1, 3, 74, 48, 1, 74, 48, 1, 3, 66, 48, 1, 66, 48, 1, 3, 72, - 48, 1, 72, 48, 1, 3, 73, 48, 1, 73, 48, 1, 177, 48, 1, 246, 193, 48, 1, - 238, 199, 48, 1, 246, 46, 48, 1, 238, 107, 48, 1, 245, 218, 48, 1, 239, - 3, 48, 1, 246, 131, 48, 1, 238, 150, 48, 1, 246, 11, 48, 1, 231, 31, 48, - 1, 223, 117, 48, 1, 229, 15, 48, 1, 223, 47, 48, 1, 228, 6, 48, 1, 223, - 19, 48, 1, 230, 213, 48, 1, 223, 97, 48, 1, 228, 169, 48, 1, 223, 27, 48, - 1, 227, 107, 48, 1, 250, 189, 48, 1, 226, 175, 48, 1, 250, 4, 48, 1, 3, - 225, 250, 48, 1, 225, 250, 48, 1, 248, 107, 48, 1, 227, 44, 48, 1, 250, - 77, 48, 1, 96, 48, 1, 249, 161, 48, 1, 236, 1, 48, 1, 235, 89, 48, 1, - 234, 206, 48, 1, 235, 162, 48, 1, 235, 6, 48, 1, 154, 48, 1, 253, 70, 48, - 1, 213, 48, 1, 245, 75, 48, 1, 252, 181, 48, 1, 233, 69, 48, 1, 244, 145, - 48, 1, 252, 90, 48, 1, 232, 173, 48, 1, 245, 121, 48, 1, 252, 238, 48, 1, - 233, 151, 48, 1, 244, 227, 48, 1, 252, 138, 48, 1, 233, 4, 48, 1, 198, - 48, 1, 236, 157, 48, 1, 236, 66, 48, 1, 236, 235, 48, 1, 236, 103, 48, 1, - 3, 191, 48, 1, 191, 48, 1, 3, 223, 158, 48, 1, 223, 158, 48, 1, 3, 223, - 183, 48, 1, 223, 183, 48, 1, 208, 48, 1, 231, 180, 48, 1, 231, 70, 48, 1, - 231, 244, 48, 1, 231, 122, 48, 1, 3, 224, 173, 48, 1, 224, 173, 48, 1, - 224, 118, 48, 1, 224, 141, 48, 1, 224, 105, 48, 1, 199, 48, 1, 224, 190, - 48, 1, 3, 177, 48, 1, 3, 239, 3, 48, 1, 225, 64, 48, 1, 224, 228, 48, 1, - 225, 42, 48, 1, 224, 206, 48, 236, 154, 249, 140, 239, 19, 232, 194, 228, - 155, 76, 48, 239, 193, 76, 48, 224, 204, 239, 193, 76, 48, 249, 224, 238, - 129, 176, 1, 254, 27, 176, 1, 233, 244, 176, 1, 185, 176, 1, 247, 130, - 176, 1, 222, 222, 176, 1, 227, 109, 176, 1, 199, 176, 1, 149, 176, 1, - 214, 176, 1, 239, 76, 176, 1, 212, 176, 1, 239, 182, 176, 1, 232, 139, - 176, 1, 224, 73, 176, 1, 223, 86, 176, 1, 251, 205, 176, 1, 229, 148, - 176, 1, 146, 176, 1, 223, 119, 176, 1, 252, 44, 176, 1, 193, 176, 1, 57, - 176, 1, 73, 176, 1, 72, 176, 1, 248, 24, 176, 1, 254, 253, 176, 1, 248, - 22, 176, 1, 254, 53, 176, 1, 234, 13, 176, 1, 254, 190, 176, 1, 247, 239, - 176, 1, 254, 184, 176, 1, 247, 228, 176, 1, 247, 198, 176, 1, 74, 176, 1, - 66, 176, 1, 239, 192, 176, 1, 196, 176, 1, 235, 139, 176, 1, 246, 15, - 176, 1, 240, 48, 26, 1, 238, 173, 26, 1, 228, 104, 26, 1, 238, 171, 26, - 1, 235, 82, 26, 1, 235, 81, 26, 1, 235, 80, 26, 1, 226, 163, 26, 1, 228, - 99, 26, 1, 231, 174, 26, 1, 231, 170, 26, 1, 231, 168, 26, 1, 231, 162, - 26, 1, 231, 159, 26, 1, 231, 157, 26, 1, 231, 163, 26, 1, 231, 173, 26, - 1, 236, 148, 26, 1, 233, 60, 26, 1, 228, 102, 26, 1, 233, 52, 26, 1, 228, - 236, 26, 1, 228, 100, 26, 1, 240, 68, 26, 1, 251, 113, 26, 1, 228, 107, - 26, 1, 251, 167, 26, 1, 238, 210, 26, 1, 226, 218, 26, 1, 233, 85, 26, 1, - 245, 69, 26, 1, 57, 26, 1, 255, 19, 26, 1, 191, 26, 1, 224, 10, 26, 1, - 247, 217, 26, 1, 72, 26, 1, 223, 221, 26, 1, 223, 228, 26, 1, 73, 26, 1, - 224, 173, 26, 1, 224, 170, 26, 1, 234, 88, 26, 1, 223, 183, 26, 1, 66, - 26, 1, 224, 133, 26, 1, 224, 141, 26, 1, 224, 118, 26, 1, 223, 158, 26, - 1, 247, 165, 26, 1, 223, 202, 26, 1, 74, 26, 247, 52, 26, 1, 228, 103, - 26, 1, 235, 74, 26, 1, 235, 76, 26, 1, 235, 78, 26, 1, 231, 169, 26, 1, - 231, 156, 26, 1, 231, 160, 26, 1, 231, 164, 26, 1, 231, 154, 26, 1, 236, - 143, 26, 1, 236, 141, 26, 1, 236, 144, 26, 1, 239, 34, 26, 1, 233, 56, - 26, 1, 233, 45, 26, 1, 233, 50, 26, 1, 233, 48, 26, 1, 233, 58, 26, 1, - 233, 46, 26, 1, 239, 32, 26, 1, 239, 30, 26, 1, 228, 230, 26, 1, 228, - 228, 26, 1, 228, 221, 26, 1, 228, 226, 26, 1, 228, 234, 26, 1, 233, 204, - 26, 1, 228, 105, 26, 1, 223, 212, 26, 1, 223, 210, 26, 1, 223, 211, 26, - 1, 239, 33, 26, 1, 228, 106, 26, 1, 223, 218, 26, 1, 223, 180, 26, 1, - 223, 179, 26, 1, 223, 182, 26, 1, 223, 151, 26, 1, 223, 152, 26, 1, 223, - 154, 26, 1, 254, 128, 26, 1, 254, 124, 90, 254, 175, 237, 162, 76, 90, - 254, 175, 231, 193, 76, 90, 254, 175, 168, 76, 90, 254, 175, 135, 76, 90, - 254, 175, 152, 76, 90, 254, 175, 246, 243, 76, 90, 254, 175, 226, 106, - 76, 90, 254, 175, 236, 154, 76, 90, 254, 175, 252, 126, 76, 90, 254, 175, - 247, 45, 76, 90, 254, 175, 230, 209, 76, 90, 254, 175, 226, 214, 76, 90, - 254, 175, 246, 237, 76, 90, 254, 175, 245, 113, 76, 90, 254, 175, 248, - 49, 76, 90, 254, 175, 237, 36, 76, 176, 1, 252, 90, 176, 1, 223, 47, 176, - 1, 239, 156, 176, 1, 245, 218, 176, 1, 248, 35, 176, 1, 247, 226, 176, 1, - 234, 52, 176, 1, 234, 56, 176, 1, 239, 210, 176, 1, 254, 176, 176, 1, - 239, 250, 176, 1, 225, 121, 176, 1, 240, 30, 176, 1, 235, 123, 176, 1, - 254, 247, 176, 1, 254, 49, 176, 1, 254, 199, 176, 1, 234, 69, 176, 1, - 234, 58, 176, 1, 239, 247, 176, 35, 1, 233, 244, 176, 35, 1, 227, 109, - 176, 35, 1, 239, 76, 176, 35, 1, 212, 9, 195, 227, 109, 9, 195, 224, 127, - 9, 195, 224, 65, 9, 195, 252, 56, 9, 195, 227, 201, 9, 195, 244, 85, 9, - 195, 244, 89, 9, 195, 244, 151, 9, 195, 244, 86, 9, 195, 227, 112, 9, - 195, 244, 88, 9, 195, 244, 84, 9, 195, 244, 149, 9, 195, 244, 87, 9, 195, - 244, 83, 9, 195, 199, 9, 195, 212, 9, 195, 193, 9, 195, 233, 244, 9, 195, - 228, 147, 9, 195, 222, 222, 9, 195, 244, 90, 9, 195, 245, 85, 9, 195, - 227, 121, 9, 195, 227, 186, 9, 195, 228, 70, 9, 195, 229, 153, 9, 195, - 233, 153, 9, 195, 232, 141, 9, 195, 226, 125, 9, 195, 227, 111, 9, 195, - 227, 194, 9, 195, 244, 97, 9, 195, 244, 82, 9, 195, 233, 99, 9, 195, 232, - 139, 48, 1, 3, 238, 107, 48, 1, 3, 229, 15, 48, 1, 3, 228, 6, 48, 1, 3, - 96, 48, 1, 3, 234, 206, 48, 1, 3, 154, 48, 1, 3, 245, 75, 48, 1, 3, 244, - 145, 48, 1, 3, 245, 121, 48, 1, 3, 244, 227, 48, 1, 3, 236, 66, 48, 1, 3, - 208, 48, 1, 3, 231, 180, 48, 1, 3, 231, 70, 48, 1, 3, 231, 244, 48, 1, 3, - 231, 122, 93, 26, 238, 173, 93, 26, 235, 82, 93, 26, 226, 163, 93, 26, - 231, 174, 93, 26, 236, 148, 93, 26, 233, 60, 93, 26, 228, 236, 93, 26, - 240, 68, 93, 26, 251, 113, 93, 26, 251, 167, 93, 26, 238, 210, 93, 26, - 226, 218, 93, 26, 233, 85, 93, 26, 245, 69, 93, 26, 238, 174, 57, 93, 26, - 235, 83, 57, 93, 26, 226, 164, 57, 93, 26, 231, 175, 57, 93, 26, 236, - 149, 57, 93, 26, 233, 61, 57, 93, 26, 228, 237, 57, 93, 26, 240, 69, 57, - 93, 26, 251, 114, 57, 93, 26, 251, 168, 57, 93, 26, 238, 211, 57, 93, 26, - 226, 219, 57, 93, 26, 233, 86, 57, 93, 26, 245, 70, 57, 93, 26, 251, 114, - 66, 93, 238, 133, 116, 234, 78, 93, 238, 133, 116, 130, 244, 145, 93, - 133, 118, 93, 133, 113, 93, 133, 166, 93, 133, 158, 93, 133, 173, 93, - 133, 183, 93, 133, 194, 93, 133, 187, 93, 133, 192, 93, 133, 227, 23, 93, - 133, 236, 84, 93, 133, 247, 46, 93, 133, 224, 151, 93, 133, 224, 97, 93, - 133, 236, 199, 93, 133, 248, 48, 93, 133, 227, 227, 93, 133, 228, 41, 93, - 133, 245, 127, 93, 133, 228, 167, 93, 133, 235, 237, 93, 133, 228, 139, - 93, 133, 247, 51, 93, 133, 251, 40, 93, 133, 238, 37, 93, 133, 231, 208, - 93, 133, 252, 31, 93, 133, 228, 9, 93, 133, 227, 216, 93, 133, 247, 220, - 93, 133, 231, 201, 93, 133, 254, 212, 93, 133, 247, 75, 93, 133, 231, - 199, 93, 133, 229, 192, 93, 133, 231, 243, 233, 173, 53, 33, 65, 225, - 217, 118, 33, 65, 225, 217, 113, 33, 65, 225, 217, 166, 33, 65, 225, 217, - 158, 33, 65, 225, 217, 173, 33, 65, 225, 217, 183, 33, 65, 225, 217, 194, - 33, 65, 225, 217, 187, 33, 65, 225, 217, 192, 33, 65, 226, 207, 33, 65, - 226, 208, 118, 33, 65, 226, 208, 113, 33, 65, 226, 208, 166, 33, 65, 226, - 208, 158, 33, 65, 226, 208, 173, 33, 26, 238, 173, 33, 26, 235, 82, 33, - 26, 226, 163, 33, 26, 231, 174, 33, 26, 236, 148, 33, 26, 233, 60, 33, - 26, 228, 236, 33, 26, 240, 68, 33, 26, 251, 113, 33, 26, 251, 167, 33, - 26, 238, 210, 33, 26, 226, 218, 33, 26, 233, 85, 33, 26, 245, 69, 33, 26, - 238, 174, 57, 33, 26, 235, 83, 57, 33, 26, 226, 164, 57, 33, 26, 231, - 175, 57, 33, 26, 236, 149, 57, 33, 26, 233, 61, 57, 33, 26, 228, 237, 57, - 33, 26, 240, 69, 57, 33, 26, 251, 114, 57, 33, 26, 251, 168, 57, 33, 26, - 238, 211, 57, 33, 26, 226, 219, 57, 33, 26, 233, 86, 57, 33, 26, 245, 70, - 57, 33, 238, 133, 116, 251, 197, 33, 238, 133, 116, 239, 98, 33, 26, 240, - 69, 66, 238, 133, 228, 61, 98, 33, 133, 118, 33, 133, 113, 33, 133, 166, - 33, 133, 158, 33, 133, 173, 33, 133, 183, 33, 133, 194, 33, 133, 187, 33, - 133, 192, 33, 133, 227, 23, 33, 133, 236, 84, 33, 133, 247, 46, 33, 133, - 224, 151, 33, 133, 224, 97, 33, 133, 236, 199, 33, 133, 248, 48, 33, 133, - 227, 227, 33, 133, 228, 41, 33, 133, 245, 127, 33, 133, 228, 167, 33, - 133, 235, 237, 33, 133, 228, 139, 33, 133, 247, 51, 33, 133, 251, 40, 33, - 133, 238, 37, 33, 133, 230, 207, 33, 133, 237, 38, 33, 133, 247, 82, 33, - 133, 227, 238, 33, 133, 247, 151, 33, 133, 232, 203, 33, 133, 254, 57, - 33, 133, 239, 194, 33, 133, 231, 199, 33, 133, 251, 14, 33, 133, 251, 5, - 33, 133, 245, 63, 33, 133, 251, 218, 33, 133, 237, 117, 33, 133, 237, - 237, 33, 133, 231, 153, 33, 133, 236, 229, 33, 133, 231, 218, 33, 133, - 228, 9, 33, 133, 227, 216, 33, 133, 247, 220, 33, 133, 231, 201, 33, 133, - 254, 212, 33, 133, 235, 71, 33, 65, 226, 208, 183, 33, 65, 226, 208, 194, - 33, 65, 226, 208, 187, 33, 65, 226, 208, 192, 33, 65, 246, 245, 33, 65, - 246, 246, 118, 33, 65, 246, 246, 113, 33, 65, 246, 246, 166, 33, 65, 246, - 246, 158, 33, 65, 246, 246, 173, 33, 65, 246, 246, 183, 33, 65, 246, 246, - 194, 33, 65, 246, 246, 187, 33, 65, 246, 246, 192, 33, 65, 247, 63, 90, - 167, 14, 32, 239, 175, 90, 167, 14, 32, 247, 93, 90, 167, 14, 32, 237, - 19, 90, 167, 14, 32, 254, 136, 90, 167, 14, 32, 236, 252, 90, 167, 14, - 32, 239, 96, 90, 167, 14, 32, 239, 97, 90, 167, 14, 32, 254, 50, 90, 167, - 14, 32, 229, 172, 90, 167, 14, 32, 234, 91, 90, 167, 14, 32, 234, 233, - 90, 167, 14, 32, 250, 72, 37, 245, 85, 37, 247, 194, 37, 247, 159, 237, - 176, 237, 192, 53, 33, 48, 57, 33, 48, 74, 33, 48, 66, 33, 48, 72, 33, - 48, 73, 33, 48, 177, 33, 48, 238, 199, 33, 48, 238, 107, 33, 48, 239, 3, - 33, 48, 238, 150, 33, 48, 231, 31, 33, 48, 229, 15, 33, 48, 228, 6, 33, - 48, 230, 213, 33, 48, 228, 169, 33, 48, 227, 107, 33, 48, 226, 175, 33, - 48, 225, 250, 33, 48, 227, 44, 33, 48, 96, 33, 48, 236, 1, 33, 48, 235, - 89, 33, 48, 234, 206, 33, 48, 235, 162, 33, 48, 235, 6, 33, 48, 154, 33, - 48, 245, 75, 33, 48, 244, 145, 33, 48, 245, 121, 33, 48, 244, 227, 33, - 48, 198, 33, 48, 236, 157, 33, 48, 236, 66, 33, 48, 236, 235, 33, 48, - 236, 103, 33, 48, 191, 33, 48, 223, 158, 33, 48, 223, 183, 33, 48, 208, - 33, 48, 231, 180, 33, 48, 231, 70, 33, 48, 231, 244, 33, 48, 231, 122, - 33, 48, 224, 173, 33, 48, 224, 118, 33, 48, 224, 141, 33, 48, 224, 105, - 37, 254, 156, 37, 254, 88, 37, 254, 171, 37, 255, 57, 37, 239, 251, 37, - 239, 225, 37, 225, 119, 37, 247, 174, 37, 248, 33, 37, 234, 55, 37, 234, - 50, 37, 239, 55, 37, 239, 29, 37, 239, 27, 37, 246, 157, 37, 246, 164, - 37, 246, 37, 37, 246, 33, 37, 238, 48, 37, 246, 27, 37, 238, 184, 37, - 238, 183, 37, 238, 182, 37, 238, 181, 37, 245, 196, 37, 245, 195, 37, - 238, 88, 37, 238, 90, 37, 238, 255, 37, 238, 131, 37, 238, 137, 37, 231, - 16, 37, 230, 249, 37, 228, 219, 37, 229, 177, 37, 229, 176, 37, 250, 186, - 37, 250, 31, 37, 249, 141, 37, 226, 120, 37, 235, 233, 37, 234, 234, 37, - 245, 156, 37, 233, 238, 37, 233, 237, 37, 253, 68, 37, 233, 66, 37, 233, - 39, 37, 233, 40, 37, 252, 162, 37, 244, 144, 37, 244, 141, 37, 252, 65, - 37, 244, 129, 37, 245, 104, 37, 233, 105, 37, 233, 132, 37, 245, 91, 37, - 233, 130, 37, 233, 142, 37, 252, 228, 37, 232, 250, 37, 252, 128, 37, - 244, 219, 37, 232, 245, 37, 244, 215, 37, 244, 216, 37, 237, 47, 37, 237, - 44, 37, 237, 51, 37, 237, 9, 37, 237, 29, 37, 236, 133, 37, 236, 115, 37, - 236, 114, 37, 236, 221, 37, 236, 219, 37, 236, 222, 37, 224, 20, 37, 224, - 18, 37, 223, 150, 37, 231, 133, 37, 231, 137, 37, 231, 53, 37, 231, 48, - 37, 231, 217, 37, 231, 216, 37, 224, 150, 90, 167, 14, 32, 244, 155, 223, - 89, 90, 167, 14, 32, 244, 155, 118, 90, 167, 14, 32, 244, 155, 113, 90, - 167, 14, 32, 244, 155, 166, 90, 167, 14, 32, 244, 155, 158, 90, 167, 14, - 32, 244, 155, 173, 90, 167, 14, 32, 244, 155, 183, 90, 167, 14, 32, 244, - 155, 194, 90, 167, 14, 32, 244, 155, 187, 90, 167, 14, 32, 244, 155, 192, - 90, 167, 14, 32, 244, 155, 227, 23, 90, 167, 14, 32, 244, 155, 247, 252, - 90, 167, 14, 32, 244, 155, 225, 218, 90, 167, 14, 32, 244, 155, 226, 209, - 90, 167, 14, 32, 244, 155, 246, 238, 90, 167, 14, 32, 244, 155, 247, 67, - 90, 167, 14, 32, 244, 155, 228, 212, 90, 167, 14, 32, 244, 155, 229, 161, - 90, 167, 14, 32, 244, 155, 248, 18, 90, 167, 14, 32, 244, 155, 235, 59, - 90, 167, 14, 32, 244, 155, 225, 216, 90, 167, 14, 32, 244, 155, 225, 210, - 90, 167, 14, 32, 244, 155, 225, 206, 90, 167, 14, 32, 244, 155, 225, 207, - 90, 167, 14, 32, 244, 155, 225, 212, 37, 244, 150, 37, 250, 189, 37, 254, - 53, 37, 125, 37, 234, 6, 37, 233, 154, 37, 249, 163, 37, 249, 164, 228, - 118, 37, 249, 164, 250, 231, 37, 239, 192, 37, 247, 197, 235, 238, 245, - 105, 37, 247, 197, 235, 238, 227, 129, 37, 247, 197, 235, 238, 227, 86, - 37, 247, 197, 235, 238, 236, 218, 37, 251, 7, 37, 233, 242, 254, 192, 37, - 236, 1, 37, 236, 67, 57, 37, 198, 37, 177, 37, 239, 6, 37, 236, 249, 37, - 246, 145, 37, 252, 33, 37, 239, 5, 37, 233, 100, 37, 235, 141, 37, 236, - 67, 247, 130, 37, 236, 67, 214, 37, 236, 191, 37, 238, 229, 37, 244, 90, - 37, 238, 201, 37, 236, 159, 37, 246, 48, 37, 226, 177, 37, 236, 67, 149, - 37, 236, 110, 37, 249, 171, 37, 238, 161, 37, 247, 9, 37, 235, 20, 37, - 236, 67, 185, 37, 236, 107, 37, 251, 69, 37, 238, 155, 37, 236, 108, 228, - 118, 37, 251, 70, 228, 118, 37, 237, 69, 228, 118, 37, 238, 156, 228, - 118, 37, 236, 108, 250, 231, 37, 251, 70, 250, 231, 37, 237, 69, 250, - 231, 37, 238, 156, 250, 231, 37, 237, 69, 107, 193, 37, 237, 69, 107, - 231, 35, 228, 118, 37, 213, 37, 238, 126, 37, 236, 69, 37, 245, 248, 37, - 232, 18, 37, 232, 19, 107, 193, 37, 232, 19, 107, 231, 35, 228, 118, 37, - 232, 184, 37, 234, 207, 37, 236, 67, 193, 37, 236, 68, 37, 232, 158, 37, - 234, 179, 37, 236, 67, 196, 37, 236, 22, 37, 238, 81, 37, 236, 23, 236, - 221, 37, 232, 157, 37, 234, 178, 37, 236, 67, 224, 174, 37, 236, 20, 37, - 238, 79, 37, 236, 21, 236, 221, 37, 239, 77, 234, 81, 37, 237, 69, 234, - 81, 37, 254, 199, 37, 252, 117, 37, 251, 247, 37, 251, 232, 37, 252, 45, - 107, 238, 229, 37, 251, 68, 37, 250, 118, 37, 245, 183, 37, 154, 37, 244, - 151, 37, 240, 16, 37, 238, 168, 37, 238, 156, 252, 15, 37, 238, 109, 37, - 237, 146, 37, 237, 145, 37, 237, 139, 37, 237, 81, 37, 236, 250, 228, - 184, 37, 236, 132, 37, 236, 96, 37, 233, 98, 37, 233, 7, 37, 232, 229, - 37, 232, 228, 37, 228, 112, 37, 227, 202, 37, 224, 142, 37, 225, 65, 107, - 185, 37, 102, 107, 185, 90, 167, 14, 32, 250, 121, 118, 90, 167, 14, 32, - 250, 121, 113, 90, 167, 14, 32, 250, 121, 166, 90, 167, 14, 32, 250, 121, - 158, 90, 167, 14, 32, 250, 121, 173, 90, 167, 14, 32, 250, 121, 183, 90, - 167, 14, 32, 250, 121, 194, 90, 167, 14, 32, 250, 121, 187, 90, 167, 14, - 32, 250, 121, 192, 90, 167, 14, 32, 250, 121, 227, 23, 90, 167, 14, 32, - 250, 121, 247, 252, 90, 167, 14, 32, 250, 121, 225, 218, 90, 167, 14, 32, - 250, 121, 226, 209, 90, 167, 14, 32, 250, 121, 246, 238, 90, 167, 14, 32, - 250, 121, 247, 67, 90, 167, 14, 32, 250, 121, 228, 212, 90, 167, 14, 32, - 250, 121, 229, 161, 90, 167, 14, 32, 250, 121, 248, 18, 90, 167, 14, 32, - 250, 121, 235, 59, 90, 167, 14, 32, 250, 121, 225, 216, 90, 167, 14, 32, - 250, 121, 225, 210, 90, 167, 14, 32, 250, 121, 225, 206, 90, 167, 14, 32, - 250, 121, 225, 207, 90, 167, 14, 32, 250, 121, 225, 212, 90, 167, 14, 32, - 250, 121, 225, 213, 90, 167, 14, 32, 250, 121, 225, 208, 90, 167, 14, 32, - 250, 121, 225, 209, 90, 167, 14, 32, 250, 121, 225, 215, 90, 167, 14, 32, - 250, 121, 225, 211, 90, 167, 14, 32, 250, 121, 226, 207, 90, 167, 14, 32, - 250, 121, 226, 206, 37, 246, 177, 181, 32, 226, 240, 250, 251, 245, 112, - 181, 32, 226, 240, 231, 241, 248, 48, 181, 32, 249, 234, 254, 63, 226, - 240, 252, 225, 181, 32, 223, 168, 247, 5, 181, 32, 224, 168, 181, 32, - 251, 41, 181, 32, 226, 240, 254, 103, 181, 32, 244, 222, 226, 121, 181, - 32, 3, 227, 74, 181, 32, 226, 88, 181, 32, 233, 149, 181, 32, 228, 60, - 181, 32, 247, 84, 181, 32, 245, 233, 232, 238, 181, 32, 236, 99, 181, 32, - 247, 219, 181, 32, 247, 6, 181, 32, 224, 90, 234, 62, 226, 240, 250, 73, - 181, 32, 254, 140, 181, 32, 251, 25, 181, 32, 252, 156, 226, 187, 181, - 32, 245, 246, 181, 32, 228, 130, 254, 155, 181, 32, 231, 194, 181, 32, - 239, 246, 181, 32, 245, 233, 227, 74, 181, 32, 236, 73, 251, 9, 181, 32, - 245, 233, 232, 210, 181, 32, 226, 240, 255, 45, 224, 151, 181, 32, 226, - 240, 251, 86, 247, 46, 181, 32, 240, 2, 181, 32, 248, 86, 181, 32, 231, - 197, 181, 32, 245, 233, 232, 233, 181, 32, 232, 198, 181, 32, 250, 135, - 106, 226, 240, 237, 184, 181, 32, 226, 240, 247, 112, 181, 32, 234, 34, - 181, 32, 234, 93, 181, 32, 250, 51, 181, 32, 250, 69, 181, 32, 240, 12, - 181, 32, 252, 109, 181, 32, 251, 56, 180, 236, 223, 181, 32, 246, 152, - 226, 121, 181, 32, 232, 161, 225, 107, 181, 32, 234, 33, 181, 32, 226, - 240, 224, 135, 181, 32, 231, 189, 181, 32, 226, 240, 251, 253, 181, 32, - 226, 240, 254, 99, 226, 185, 181, 32, 226, 240, 239, 0, 228, 43, 236, 74, - 181, 32, 250, 29, 181, 32, 226, 240, 237, 11, 237, 48, 181, 32, 255, 46, - 181, 32, 226, 240, 224, 163, 181, 32, 226, 240, 246, 118, 224, 111, 181, - 32, 226, 240, 239, 102, 238, 24, 181, 32, 249, 193, 181, 32, 237, 177, - 181, 32, 239, 249, 226, 48, 181, 32, 3, 232, 210, 181, 32, 255, 9, 251, - 48, 181, 32, 252, 227, 251, 48, 8, 4, 239, 195, 8, 4, 239, 189, 8, 4, 74, - 8, 4, 239, 212, 8, 4, 240, 70, 8, 4, 240, 55, 8, 4, 240, 72, 8, 4, 240, - 71, 8, 4, 254, 62, 8, 4, 254, 36, 8, 4, 57, 8, 4, 254, 157, 8, 4, 225, - 117, 8, 4, 225, 120, 8, 4, 225, 118, 8, 4, 234, 19, 8, 4, 233, 253, 8, 4, - 73, 8, 4, 234, 45, 8, 4, 247, 152, 8, 4, 72, 8, 4, 224, 83, 8, 4, 252, - 157, 8, 4, 252, 154, 8, 4, 252, 181, 8, 4, 252, 165, 8, 4, 252, 175, 8, - 4, 252, 174, 8, 4, 252, 177, 8, 4, 252, 176, 8, 4, 253, 21, 8, 4, 253, - 18, 8, 4, 253, 70, 8, 4, 253, 37, 8, 4, 252, 73, 8, 4, 252, 77, 8, 4, - 252, 74, 8, 4, 252, 127, 8, 4, 252, 118, 8, 4, 252, 138, 8, 4, 252, 129, - 8, 4, 252, 193, 8, 4, 252, 238, 8, 4, 252, 205, 8, 4, 252, 63, 8, 4, 252, - 61, 8, 4, 252, 90, 8, 4, 252, 72, 8, 4, 252, 66, 8, 4, 252, 70, 8, 4, - 252, 49, 8, 4, 252, 48, 8, 4, 252, 54, 8, 4, 252, 52, 8, 4, 252, 50, 8, - 4, 252, 51, 8, 4, 233, 30, 8, 4, 233, 26, 8, 4, 233, 69, 8, 4, 233, 35, - 8, 4, 233, 44, 8, 4, 233, 64, 8, 4, 233, 62, 8, 4, 233, 167, 8, 4, 233, - 158, 8, 4, 213, 8, 4, 233, 197, 8, 4, 232, 166, 8, 4, 232, 168, 8, 4, - 232, 167, 8, 4, 232, 235, 8, 4, 232, 231, 8, 4, 233, 4, 8, 4, 232, 242, - 8, 4, 232, 160, 8, 4, 232, 159, 8, 4, 232, 173, 8, 4, 232, 165, 8, 4, - 232, 162, 8, 4, 232, 164, 8, 4, 232, 143, 8, 4, 232, 142, 8, 4, 232, 147, - 8, 4, 232, 146, 8, 4, 232, 144, 8, 4, 232, 145, 8, 4, 253, 3, 8, 4, 253, - 2, 8, 4, 253, 9, 8, 4, 253, 4, 8, 4, 253, 6, 8, 4, 253, 5, 8, 4, 253, 8, - 8, 4, 253, 7, 8, 4, 253, 14, 8, 4, 253, 13, 8, 4, 253, 16, 8, 4, 253, 15, - 8, 4, 252, 250, 8, 4, 252, 252, 8, 4, 252, 251, 8, 4, 252, 255, 8, 4, - 252, 254, 8, 4, 253, 1, 8, 4, 253, 0, 8, 4, 253, 10, 8, 4, 253, 12, 8, 4, - 253, 11, 8, 4, 252, 246, 8, 4, 252, 245, 8, 4, 252, 253, 8, 4, 252, 249, - 8, 4, 252, 247, 8, 4, 252, 248, 8, 4, 252, 242, 8, 4, 252, 241, 8, 4, - 252, 244, 8, 4, 252, 243, 8, 4, 235, 208, 8, 4, 235, 207, 8, 4, 235, 213, - 8, 4, 235, 209, 8, 4, 235, 210, 8, 4, 235, 212, 8, 4, 235, 211, 8, 4, - 235, 215, 8, 4, 235, 214, 8, 4, 235, 217, 8, 4, 235, 216, 8, 4, 235, 204, - 8, 4, 235, 203, 8, 4, 235, 206, 8, 4, 235, 205, 8, 4, 235, 198, 8, 4, - 235, 197, 8, 4, 235, 202, 8, 4, 235, 201, 8, 4, 235, 199, 8, 4, 235, 200, - 8, 4, 235, 192, 8, 4, 235, 191, 8, 4, 235, 196, 8, 4, 235, 195, 8, 4, - 235, 193, 8, 4, 235, 194, 8, 4, 245, 13, 8, 4, 245, 12, 8, 4, 245, 18, 8, - 4, 245, 14, 8, 4, 245, 15, 8, 4, 245, 17, 8, 4, 245, 16, 8, 4, 245, 20, - 8, 4, 245, 19, 8, 4, 245, 22, 8, 4, 245, 21, 8, 4, 245, 4, 8, 4, 245, 6, - 8, 4, 245, 5, 8, 4, 245, 9, 8, 4, 245, 8, 8, 4, 245, 11, 8, 4, 245, 10, - 8, 4, 245, 0, 8, 4, 244, 255, 8, 4, 245, 7, 8, 4, 245, 3, 8, 4, 245, 1, - 8, 4, 245, 2, 8, 4, 244, 250, 8, 4, 244, 254, 8, 4, 244, 253, 8, 4, 244, - 251, 8, 4, 244, 252, 8, 4, 236, 112, 8, 4, 236, 111, 8, 4, 236, 157, 8, - 4, 236, 117, 8, 4, 236, 139, 8, 4, 236, 151, 8, 4, 236, 150, 8, 4, 237, - 2, 8, 4, 236, 254, 8, 4, 198, 8, 4, 237, 28, 8, 4, 236, 43, 8, 4, 236, - 42, 8, 4, 236, 45, 8, 4, 236, 44, 8, 4, 236, 78, 8, 4, 236, 70, 8, 4, - 236, 103, 8, 4, 236, 82, 8, 4, 236, 193, 8, 4, 236, 235, 8, 4, 236, 27, - 8, 4, 236, 24, 8, 4, 236, 66, 8, 4, 236, 39, 8, 4, 236, 34, 8, 4, 236, - 37, 8, 4, 236, 7, 8, 4, 236, 6, 8, 4, 236, 11, 8, 4, 236, 9, 8, 4, 247, - 39, 8, 4, 247, 35, 8, 4, 247, 70, 8, 4, 247, 47, 8, 4, 247, 106, 8, 4, - 247, 100, 8, 4, 247, 129, 8, 4, 247, 108, 8, 4, 246, 236, 8, 4, 247, 7, - 8, 4, 246, 255, 8, 4, 246, 208, 8, 4, 246, 207, 8, 4, 246, 219, 8, 4, - 246, 213, 8, 4, 246, 211, 8, 4, 246, 212, 8, 4, 246, 198, 8, 4, 246, 197, - 8, 4, 246, 201, 8, 4, 246, 199, 8, 4, 224, 208, 8, 4, 224, 207, 8, 4, - 224, 228, 8, 4, 224, 217, 8, 4, 224, 223, 8, 4, 224, 221, 8, 4, 224, 225, - 8, 4, 224, 224, 8, 4, 225, 49, 8, 4, 225, 45, 8, 4, 225, 64, 8, 4, 225, - 59, 8, 4, 224, 196, 8, 4, 224, 192, 8, 4, 224, 206, 8, 4, 224, 197, 8, 4, - 224, 229, 8, 4, 225, 34, 8, 4, 224, 185, 8, 4, 224, 184, 8, 4, 224, 190, - 8, 4, 224, 188, 8, 4, 224, 186, 8, 4, 224, 187, 8, 4, 224, 178, 8, 4, - 224, 177, 8, 4, 224, 182, 8, 4, 224, 181, 8, 4, 224, 179, 8, 4, 224, 180, - 8, 4, 249, 190, 8, 4, 249, 178, 8, 4, 250, 4, 8, 4, 249, 207, 8, 4, 249, - 239, 8, 4, 249, 243, 8, 4, 249, 242, 8, 4, 250, 127, 8, 4, 250, 122, 8, - 4, 250, 189, 8, 4, 250, 146, 8, 4, 248, 91, 8, 4, 248, 92, 8, 4, 249, - 140, 8, 4, 248, 123, 8, 4, 249, 161, 8, 4, 249, 142, 8, 4, 250, 27, 8, 4, - 250, 77, 8, 4, 250, 39, 8, 4, 248, 84, 8, 4, 248, 82, 8, 4, 248, 107, 8, - 4, 248, 90, 8, 4, 248, 85, 8, 4, 248, 88, 8, 4, 226, 144, 8, 4, 226, 140, - 8, 4, 226, 175, 8, 4, 226, 150, 8, 4, 226, 168, 8, 4, 226, 170, 8, 4, - 226, 169, 8, 4, 227, 66, 8, 4, 227, 53, 8, 4, 227, 107, 8, 4, 227, 70, 8, - 4, 225, 240, 8, 4, 225, 239, 8, 4, 225, 242, 8, 4, 225, 241, 8, 4, 226, - 99, 8, 4, 226, 97, 8, 4, 96, 8, 4, 226, 105, 8, 4, 227, 0, 8, 4, 227, 44, - 8, 4, 227, 17, 8, 4, 225, 228, 8, 4, 225, 225, 8, 4, 225, 250, 8, 4, 225, - 238, 8, 4, 225, 229, 8, 4, 225, 236, 8, 4, 250, 94, 8, 4, 250, 93, 8, 4, - 250, 99, 8, 4, 250, 95, 8, 4, 250, 96, 8, 4, 250, 98, 8, 4, 250, 97, 8, - 4, 250, 110, 8, 4, 250, 109, 8, 4, 250, 117, 8, 4, 250, 111, 8, 4, 250, - 84, 8, 4, 250, 86, 8, 4, 250, 85, 8, 4, 250, 89, 8, 4, 250, 88, 8, 4, - 250, 92, 8, 4, 250, 90, 8, 4, 250, 102, 8, 4, 250, 105, 8, 4, 250, 103, - 8, 4, 250, 80, 8, 4, 250, 79, 8, 4, 250, 87, 8, 4, 250, 83, 8, 4, 250, - 81, 8, 4, 250, 82, 8, 4, 235, 177, 8, 4, 235, 176, 8, 4, 235, 181, 8, 4, - 235, 178, 8, 4, 235, 179, 8, 4, 235, 180, 8, 4, 235, 187, 8, 4, 235, 186, - 8, 4, 235, 189, 8, 4, 235, 188, 8, 4, 235, 171, 8, 4, 235, 170, 8, 4, - 235, 175, 8, 4, 235, 172, 8, 4, 235, 182, 8, 4, 235, 185, 8, 4, 235, 183, - 8, 4, 235, 165, 8, 4, 235, 164, 8, 4, 235, 169, 8, 4, 235, 168, 8, 4, - 235, 166, 8, 4, 235, 167, 8, 4, 244, 236, 8, 4, 244, 235, 8, 4, 244, 242, - 8, 4, 244, 237, 8, 4, 244, 239, 8, 4, 244, 238, 8, 4, 244, 241, 8, 4, - 244, 240, 8, 4, 244, 247, 8, 4, 244, 246, 8, 4, 244, 249, 8, 4, 244, 248, - 8, 4, 244, 230, 8, 4, 244, 231, 8, 4, 244, 233, 8, 4, 244, 232, 8, 4, - 244, 234, 8, 4, 244, 243, 8, 4, 244, 245, 8, 4, 244, 244, 8, 4, 244, 229, - 8, 4, 235, 52, 8, 4, 235, 51, 8, 4, 235, 89, 8, 4, 235, 55, 8, 4, 235, - 73, 8, 4, 235, 85, 8, 4, 235, 84, 8, 4, 235, 220, 8, 4, 236, 1, 8, 4, - 235, 231, 8, 4, 234, 187, 8, 4, 234, 189, 8, 4, 234, 188, 8, 4, 234, 242, - 8, 4, 234, 231, 8, 4, 235, 6, 8, 4, 234, 249, 8, 4, 235, 143, 8, 4, 235, - 162, 8, 4, 235, 151, 8, 4, 234, 183, 8, 4, 234, 180, 8, 4, 234, 206, 8, - 4, 234, 186, 8, 4, 234, 184, 8, 4, 234, 185, 8, 4, 245, 42, 8, 4, 245, - 41, 8, 4, 245, 47, 8, 4, 245, 43, 8, 4, 245, 44, 8, 4, 245, 46, 8, 4, - 245, 45, 8, 4, 245, 52, 8, 4, 245, 51, 8, 4, 245, 54, 8, 4, 245, 53, 8, - 4, 245, 34, 8, 4, 245, 36, 8, 4, 245, 35, 8, 4, 245, 38, 8, 4, 245, 40, - 8, 4, 245, 39, 8, 4, 245, 48, 8, 4, 245, 50, 8, 4, 245, 49, 8, 4, 245, - 30, 8, 4, 245, 29, 8, 4, 245, 37, 8, 4, 245, 33, 8, 4, 245, 31, 8, 4, - 245, 32, 8, 4, 245, 24, 8, 4, 245, 23, 8, 4, 245, 28, 8, 4, 245, 27, 8, - 4, 245, 25, 8, 4, 245, 26, 8, 4, 237, 157, 8, 4, 237, 153, 8, 4, 237, - 193, 8, 4, 237, 161, 8, 4, 237, 187, 8, 4, 237, 186, 8, 4, 237, 189, 8, - 4, 237, 188, 8, 4, 238, 4, 8, 4, 237, 252, 8, 4, 238, 43, 8, 4, 238, 10, - 8, 4, 237, 96, 8, 4, 237, 95, 8, 4, 237, 98, 8, 4, 237, 97, 8, 4, 237, - 120, 8, 4, 237, 115, 8, 4, 237, 143, 8, 4, 237, 122, 8, 4, 237, 208, 8, - 4, 237, 243, 8, 4, 237, 215, 8, 4, 237, 91, 8, 4, 237, 90, 8, 4, 237, - 110, 8, 4, 237, 94, 8, 4, 237, 92, 8, 4, 237, 93, 8, 4, 237, 73, 8, 4, - 237, 72, 8, 4, 237, 80, 8, 4, 237, 76, 8, 4, 237, 74, 8, 4, 237, 75, 8, - 4, 246, 23, 8, 4, 246, 22, 8, 4, 246, 46, 8, 4, 246, 32, 8, 4, 246, 39, - 8, 4, 246, 38, 8, 4, 246, 41, 8, 4, 246, 40, 8, 4, 246, 154, 8, 4, 246, - 149, 8, 4, 246, 193, 8, 4, 246, 163, 8, 4, 245, 201, 8, 4, 245, 200, 8, - 4, 245, 203, 8, 4, 245, 202, 8, 4, 245, 251, 8, 4, 245, 249, 8, 4, 246, - 11, 8, 4, 246, 3, 8, 4, 246, 105, 8, 4, 246, 103, 8, 4, 246, 131, 8, 4, - 246, 115, 8, 4, 245, 191, 8, 4, 245, 190, 8, 4, 245, 218, 8, 4, 245, 199, - 8, 4, 245, 192, 8, 4, 245, 198, 8, 4, 238, 176, 8, 4, 238, 175, 8, 4, - 238, 199, 8, 4, 238, 186, 8, 4, 238, 193, 8, 4, 238, 195, 8, 4, 238, 194, - 8, 4, 239, 20, 8, 4, 239, 11, 8, 4, 177, 8, 4, 239, 41, 8, 4, 238, 94, 8, - 4, 238, 96, 8, 4, 238, 95, 8, 4, 238, 130, 8, 4, 238, 127, 8, 4, 238, - 150, 8, 4, 238, 136, 8, 4, 238, 236, 8, 4, 238, 234, 8, 4, 239, 3, 8, 4, - 238, 238, 8, 4, 238, 84, 8, 4, 238, 82, 8, 4, 238, 107, 8, 4, 238, 93, 8, - 4, 238, 87, 8, 4, 238, 91, 8, 4, 246, 87, 8, 4, 246, 86, 8, 4, 246, 91, - 8, 4, 246, 88, 8, 4, 246, 90, 8, 4, 246, 89, 8, 4, 246, 98, 8, 4, 246, - 97, 8, 4, 246, 101, 8, 4, 246, 99, 8, 4, 246, 78, 8, 4, 246, 77, 8, 4, - 246, 80, 8, 4, 246, 79, 8, 4, 246, 83, 8, 4, 246, 82, 8, 4, 246, 85, 8, - 4, 246, 84, 8, 4, 246, 93, 8, 4, 246, 92, 8, 4, 246, 96, 8, 4, 246, 94, - 8, 4, 246, 73, 8, 4, 246, 72, 8, 4, 246, 81, 8, 4, 246, 76, 8, 4, 246, - 74, 8, 4, 246, 75, 8, 4, 236, 175, 8, 4, 236, 176, 8, 4, 236, 188, 8, 4, - 236, 187, 8, 4, 236, 190, 8, 4, 236, 189, 8, 4, 236, 166, 8, 4, 236, 168, - 8, 4, 236, 167, 8, 4, 236, 171, 8, 4, 236, 170, 8, 4, 236, 173, 8, 4, - 236, 172, 8, 4, 236, 177, 8, 4, 236, 179, 8, 4, 236, 178, 8, 4, 236, 162, - 8, 4, 236, 161, 8, 4, 236, 169, 8, 4, 236, 165, 8, 4, 236, 163, 8, 4, - 236, 164, 8, 4, 244, 107, 8, 4, 244, 106, 8, 4, 244, 113, 8, 4, 244, 108, - 8, 4, 244, 110, 8, 4, 244, 109, 8, 4, 244, 112, 8, 4, 244, 111, 8, 4, - 244, 118, 8, 4, 244, 117, 8, 4, 244, 120, 8, 4, 244, 119, 8, 4, 244, 99, - 8, 4, 244, 98, 8, 4, 244, 101, 8, 4, 244, 100, 8, 4, 244, 103, 8, 4, 244, - 102, 8, 4, 244, 105, 8, 4, 244, 104, 8, 4, 244, 114, 8, 4, 244, 116, 8, - 4, 244, 115, 8, 4, 235, 111, 8, 4, 235, 113, 8, 4, 235, 112, 8, 4, 235, - 130, 8, 4, 235, 129, 8, 4, 235, 137, 8, 4, 235, 132, 8, 4, 235, 96, 8, 4, - 235, 95, 8, 4, 235, 97, 8, 4, 235, 101, 8, 4, 235, 100, 8, 4, 235, 107, - 8, 4, 235, 102, 8, 4, 235, 124, 8, 4, 235, 128, 8, 4, 235, 125, 8, 4, - 245, 57, 8, 4, 245, 64, 8, 4, 245, 71, 8, 4, 245, 132, 8, 4, 245, 126, 8, - 4, 154, 8, 4, 245, 142, 8, 4, 244, 131, 8, 4, 244, 130, 8, 4, 244, 133, - 8, 4, 244, 132, 8, 4, 244, 157, 8, 4, 244, 152, 8, 4, 244, 227, 8, 4, - 244, 214, 8, 4, 245, 87, 8, 4, 245, 121, 8, 4, 245, 97, 8, 4, 224, 154, - 8, 4, 224, 143, 8, 4, 224, 173, 8, 4, 224, 162, 8, 4, 224, 78, 8, 4, 224, - 80, 8, 4, 224, 79, 8, 4, 224, 88, 8, 4, 224, 105, 8, 4, 224, 93, 8, 4, - 224, 128, 8, 4, 224, 141, 8, 4, 224, 132, 8, 4, 223, 34, 8, 4, 223, 33, - 8, 4, 223, 47, 8, 4, 223, 35, 8, 4, 223, 40, 8, 4, 223, 42, 8, 4, 223, - 41, 8, 4, 223, 104, 8, 4, 223, 101, 8, 4, 223, 117, 8, 4, 223, 107, 8, 4, - 223, 12, 8, 4, 223, 14, 8, 4, 223, 13, 8, 4, 223, 23, 8, 4, 223, 22, 8, - 4, 223, 27, 8, 4, 223, 24, 8, 4, 223, 87, 8, 4, 223, 97, 8, 4, 223, 91, - 8, 4, 223, 8, 8, 4, 223, 7, 8, 4, 223, 19, 8, 4, 223, 11, 8, 4, 223, 9, - 8, 4, 223, 10, 8, 4, 222, 255, 8, 4, 222, 254, 8, 4, 223, 4, 8, 4, 223, - 2, 8, 4, 223, 0, 8, 4, 223, 1, 8, 4, 251, 100, 8, 4, 251, 97, 8, 4, 251, - 118, 8, 4, 251, 108, 8, 4, 251, 115, 8, 4, 251, 111, 8, 4, 251, 117, 8, - 4, 251, 116, 8, 4, 252, 0, 8, 4, 251, 250, 8, 4, 252, 39, 8, 4, 252, 16, - 8, 4, 250, 227, 8, 4, 250, 229, 8, 4, 250, 228, 8, 4, 251, 3, 8, 4, 250, - 252, 8, 4, 251, 68, 8, 4, 251, 16, 8, 4, 251, 206, 8, 4, 251, 231, 8, 4, - 251, 209, 8, 4, 250, 212, 8, 4, 250, 211, 8, 4, 250, 235, 8, 4, 250, 226, - 8, 4, 250, 215, 8, 4, 250, 225, 8, 4, 250, 194, 8, 4, 250, 193, 8, 4, - 250, 202, 8, 4, 250, 199, 8, 4, 250, 195, 8, 4, 250, 197, 8, 4, 222, 238, - 8, 4, 222, 237, 8, 4, 222, 244, 8, 4, 222, 239, 8, 4, 222, 241, 8, 4, - 222, 240, 8, 4, 222, 243, 8, 4, 222, 242, 8, 4, 222, 250, 8, 4, 222, 249, - 8, 4, 222, 253, 8, 4, 222, 251, 8, 4, 222, 234, 8, 4, 222, 236, 8, 4, - 222, 235, 8, 4, 222, 245, 8, 4, 222, 248, 8, 4, 222, 246, 8, 4, 222, 229, - 8, 4, 222, 233, 8, 4, 222, 232, 8, 4, 222, 230, 8, 4, 222, 231, 8, 4, - 222, 224, 8, 4, 222, 223, 8, 4, 222, 228, 8, 4, 222, 227, 8, 4, 222, 225, - 8, 4, 222, 226, 8, 4, 234, 127, 8, 4, 234, 126, 8, 4, 234, 132, 8, 4, - 234, 128, 8, 4, 234, 129, 8, 4, 234, 131, 8, 4, 234, 130, 8, 4, 234, 136, - 8, 4, 234, 135, 8, 4, 234, 138, 8, 4, 234, 137, 8, 4, 234, 121, 8, 4, - 234, 122, 8, 4, 234, 124, 8, 4, 234, 125, 8, 4, 234, 133, 8, 4, 234, 134, - 8, 4, 234, 117, 8, 4, 234, 123, 8, 4, 234, 120, 8, 4, 234, 118, 8, 4, - 234, 119, 8, 4, 234, 112, 8, 4, 234, 111, 8, 4, 234, 116, 8, 4, 234, 115, - 8, 4, 234, 113, 8, 4, 234, 114, 8, 4, 228, 218, 8, 4, 183, 8, 4, 229, 15, - 8, 4, 228, 220, 8, 4, 229, 8, 8, 4, 229, 10, 8, 4, 229, 9, 8, 4, 230, - 240, 8, 4, 230, 236, 8, 4, 231, 31, 8, 4, 230, 246, 8, 4, 227, 223, 8, 4, - 227, 225, 8, 4, 227, 224, 8, 4, 228, 157, 8, 4, 228, 148, 8, 4, 228, 169, - 8, 4, 228, 158, 8, 4, 229, 157, 8, 4, 230, 213, 8, 4, 229, 175, 8, 4, - 227, 204, 8, 4, 227, 203, 8, 4, 228, 6, 8, 4, 227, 222, 8, 4, 227, 206, - 8, 4, 227, 213, 8, 4, 227, 123, 8, 4, 227, 122, 8, 4, 227, 185, 8, 4, - 227, 128, 8, 4, 227, 124, 8, 4, 227, 127, 8, 4, 228, 86, 8, 4, 228, 85, - 8, 4, 228, 91, 8, 4, 228, 87, 8, 4, 228, 88, 8, 4, 228, 90, 8, 4, 228, - 89, 8, 4, 228, 97, 8, 4, 228, 96, 8, 4, 228, 110, 8, 4, 228, 98, 8, 4, - 228, 82, 8, 4, 228, 81, 8, 4, 228, 84, 8, 4, 228, 83, 8, 4, 228, 92, 8, - 4, 228, 95, 8, 4, 228, 93, 8, 4, 228, 78, 8, 4, 228, 77, 8, 4, 228, 80, - 8, 4, 228, 79, 8, 4, 228, 72, 8, 4, 228, 71, 8, 4, 228, 76, 8, 4, 228, - 75, 8, 4, 228, 73, 8, 4, 228, 74, 8, 4, 223, 80, 8, 4, 223, 79, 8, 4, - 223, 85, 8, 4, 223, 82, 8, 4, 223, 62, 8, 4, 223, 64, 8, 4, 223, 63, 8, - 4, 223, 67, 8, 4, 223, 66, 8, 4, 223, 70, 8, 4, 223, 68, 8, 4, 223, 74, - 8, 4, 223, 73, 8, 4, 223, 77, 8, 4, 223, 75, 8, 4, 223, 58, 8, 4, 223, - 57, 8, 4, 223, 65, 8, 4, 223, 61, 8, 4, 223, 59, 8, 4, 223, 60, 8, 4, - 223, 50, 8, 4, 223, 49, 8, 4, 223, 54, 8, 4, 223, 53, 8, 4, 223, 51, 8, - 4, 223, 52, 8, 4, 251, 187, 8, 4, 251, 184, 8, 4, 251, 204, 8, 4, 251, - 193, 8, 4, 251, 132, 8, 4, 251, 131, 8, 4, 251, 134, 8, 4, 251, 133, 8, - 4, 251, 144, 8, 4, 251, 143, 8, 4, 251, 150, 8, 4, 251, 146, 8, 4, 251, - 174, 8, 4, 251, 172, 8, 4, 251, 182, 8, 4, 251, 176, 8, 4, 251, 126, 8, - 4, 251, 136, 8, 4, 251, 130, 8, 4, 251, 127, 8, 4, 251, 129, 8, 4, 251, - 120, 8, 4, 251, 119, 8, 4, 251, 124, 8, 4, 251, 123, 8, 4, 251, 121, 8, - 4, 251, 122, 8, 4, 231, 98, 8, 4, 231, 99, 8, 4, 231, 85, 8, 4, 231, 86, - 8, 4, 231, 89, 8, 4, 231, 88, 8, 4, 231, 91, 8, 4, 231, 90, 8, 4, 231, - 93, 8, 4, 231, 92, 8, 4, 231, 97, 8, 4, 231, 94, 8, 4, 231, 81, 8, 4, - 231, 80, 8, 4, 231, 87, 8, 4, 231, 84, 8, 4, 231, 82, 8, 4, 231, 83, 8, - 4, 231, 75, 8, 4, 231, 74, 8, 4, 231, 79, 8, 4, 231, 78, 8, 4, 231, 76, - 8, 4, 231, 77, 8, 4, 234, 228, 8, 4, 234, 227, 8, 4, 234, 230, 8, 4, 234, - 229, 8, 4, 234, 220, 8, 4, 234, 222, 8, 4, 234, 221, 8, 4, 234, 224, 8, - 4, 234, 223, 8, 4, 234, 226, 8, 4, 234, 225, 8, 4, 234, 215, 8, 4, 234, - 214, 8, 4, 234, 219, 8, 4, 234, 218, 8, 4, 234, 216, 8, 4, 234, 217, 8, - 4, 234, 209, 8, 4, 234, 208, 8, 4, 234, 213, 8, 4, 234, 212, 8, 4, 234, - 210, 8, 4, 234, 211, 8, 4, 229, 120, 8, 4, 229, 117, 8, 4, 229, 146, 8, - 4, 229, 129, 8, 4, 229, 36, 8, 4, 229, 38, 8, 4, 229, 37, 8, 4, 229, 49, - 8, 4, 229, 47, 8, 4, 229, 71, 8, 4, 229, 64, 8, 4, 229, 94, 8, 4, 229, - 92, 8, 4, 229, 114, 8, 4, 229, 101, 8, 4, 229, 32, 8, 4, 229, 31, 8, 4, - 229, 43, 8, 4, 229, 35, 8, 4, 229, 33, 8, 4, 229, 34, 8, 4, 229, 18, 8, - 4, 229, 17, 8, 4, 229, 23, 8, 4, 229, 21, 8, 4, 229, 19, 8, 4, 229, 20, - 8, 4, 231, 253, 8, 4, 231, 251, 8, 4, 208, 8, 4, 232, 1, 8, 4, 231, 56, - 8, 4, 231, 58, 8, 4, 231, 57, 8, 4, 231, 107, 8, 4, 231, 101, 8, 4, 231, - 122, 8, 4, 231, 110, 8, 4, 231, 188, 8, 4, 231, 244, 8, 4, 231, 215, 8, - 4, 231, 49, 8, 4, 231, 47, 8, 4, 231, 70, 8, 4, 231, 55, 8, 4, 231, 51, - 8, 4, 231, 52, 8, 4, 231, 38, 8, 4, 231, 37, 8, 4, 231, 43, 8, 4, 231, - 41, 8, 4, 231, 39, 8, 4, 231, 40, 8, 4, 239, 147, 8, 4, 239, 146, 8, 4, - 239, 156, 8, 4, 239, 148, 8, 4, 239, 152, 8, 4, 239, 151, 8, 4, 239, 154, - 8, 4, 239, 153, 8, 4, 239, 92, 8, 4, 239, 91, 8, 4, 239, 94, 8, 4, 239, - 93, 8, 4, 239, 105, 8, 4, 239, 104, 8, 4, 239, 117, 8, 4, 239, 107, 8, 4, - 239, 86, 8, 4, 239, 85, 8, 4, 239, 101, 8, 4, 239, 90, 8, 4, 239, 87, 8, - 4, 239, 88, 8, 4, 239, 79, 8, 4, 239, 78, 8, 4, 239, 83, 8, 4, 239, 82, - 8, 4, 239, 80, 8, 4, 239, 81, 8, 4, 232, 97, 8, 4, 232, 96, 8, 4, 232, - 104, 8, 4, 232, 98, 8, 4, 232, 101, 8, 4, 232, 100, 8, 4, 232, 103, 8, 4, - 232, 102, 8, 4, 232, 58, 8, 4, 232, 55, 8, 4, 232, 60, 8, 4, 232, 59, 8, - 4, 232, 87, 8, 4, 232, 86, 8, 4, 232, 95, 8, 4, 232, 89, 8, 4, 232, 50, - 8, 4, 232, 46, 8, 4, 232, 84, 8, 4, 232, 54, 8, 4, 232, 52, 8, 4, 232, - 53, 8, 4, 232, 30, 8, 4, 232, 28, 8, 4, 232, 40, 8, 4, 232, 33, 8, 4, - 232, 31, 8, 4, 232, 32, 8, 4, 239, 136, 8, 4, 239, 135, 8, 4, 239, 142, - 8, 4, 239, 137, 8, 4, 239, 139, 8, 4, 239, 138, 8, 4, 239, 141, 8, 4, - 239, 140, 8, 4, 239, 127, 8, 4, 239, 129, 8, 4, 239, 128, 8, 4, 239, 132, - 8, 4, 239, 131, 8, 4, 239, 134, 8, 4, 239, 133, 8, 4, 239, 123, 8, 4, - 239, 122, 8, 4, 239, 130, 8, 4, 239, 126, 8, 4, 239, 124, 8, 4, 239, 125, - 8, 4, 239, 119, 8, 4, 239, 118, 8, 4, 239, 121, 8, 4, 239, 120, 8, 4, - 235, 40, 8, 4, 235, 39, 8, 4, 235, 46, 8, 4, 235, 41, 8, 4, 235, 43, 8, - 4, 235, 42, 8, 4, 235, 45, 8, 4, 235, 44, 8, 4, 235, 31, 8, 4, 235, 32, - 8, 4, 235, 35, 8, 4, 235, 34, 8, 4, 235, 38, 8, 4, 235, 36, 8, 4, 235, - 27, 8, 4, 235, 33, 8, 4, 235, 30, 8, 4, 235, 28, 8, 4, 235, 29, 8, 4, - 235, 22, 8, 4, 235, 21, 8, 4, 235, 26, 8, 4, 235, 25, 8, 4, 235, 23, 8, - 4, 235, 24, 8, 4, 234, 155, 8, 4, 234, 154, 8, 4, 234, 163, 8, 4, 234, - 157, 8, 4, 234, 160, 8, 4, 234, 159, 8, 4, 234, 162, 8, 4, 234, 161, 8, - 4, 234, 143, 8, 4, 234, 145, 8, 4, 234, 144, 8, 4, 234, 148, 8, 4, 234, - 147, 8, 4, 234, 152, 8, 4, 234, 149, 8, 4, 234, 141, 8, 4, 234, 140, 8, - 4, 234, 146, 8, 4, 234, 142, 8, 4, 224, 57, 8, 4, 224, 56, 8, 4, 224, 64, - 8, 4, 224, 59, 8, 4, 224, 61, 8, 4, 224, 60, 8, 4, 224, 63, 8, 4, 224, - 62, 8, 4, 224, 46, 8, 4, 224, 47, 8, 4, 224, 51, 8, 4, 224, 50, 8, 4, - 224, 55, 8, 4, 224, 53, 8, 4, 224, 29, 8, 4, 224, 27, 8, 4, 224, 39, 8, - 4, 224, 32, 8, 4, 224, 30, 8, 4, 224, 31, 8, 4, 223, 189, 8, 4, 223, 187, - 8, 4, 223, 202, 8, 4, 223, 190, 8, 4, 223, 197, 8, 4, 223, 196, 8, 4, - 223, 199, 8, 4, 223, 198, 8, 4, 223, 145, 8, 4, 223, 144, 8, 4, 223, 147, - 8, 4, 223, 146, 8, 4, 223, 169, 8, 4, 223, 166, 8, 4, 223, 183, 8, 4, - 223, 171, 8, 4, 223, 138, 8, 4, 223, 136, 8, 4, 223, 158, 8, 4, 223, 143, - 8, 4, 223, 141, 8, 4, 223, 142, 8, 4, 223, 122, 8, 4, 223, 121, 8, 4, - 223, 127, 8, 4, 223, 125, 8, 4, 223, 123, 8, 4, 223, 124, 8, 29, 232, 87, - 8, 29, 237, 193, 8, 29, 238, 176, 8, 29, 234, 157, 8, 29, 250, 199, 8, - 29, 228, 91, 8, 29, 246, 84, 8, 29, 246, 115, 8, 29, 236, 157, 8, 29, - 244, 107, 8, 29, 237, 75, 8, 29, 252, 246, 8, 29, 236, 82, 8, 29, 223, - 183, 8, 29, 232, 160, 8, 29, 244, 101, 8, 29, 227, 66, 8, 29, 246, 193, - 8, 29, 223, 11, 8, 29, 250, 194, 8, 29, 250, 82, 8, 29, 252, 70, 8, 29, - 246, 80, 8, 29, 234, 149, 8, 29, 225, 250, 8, 29, 234, 45, 8, 29, 239, - 123, 8, 29, 223, 23, 8, 29, 232, 143, 8, 29, 245, 11, 8, 29, 223, 189, 8, - 29, 224, 187, 8, 29, 229, 23, 8, 29, 225, 34, 8, 29, 223, 117, 8, 29, - 239, 117, 8, 29, 234, 120, 8, 29, 239, 121, 8, 29, 245, 251, 8, 29, 239, - 141, 8, 29, 224, 105, 8, 29, 248, 107, 8, 29, 229, 34, 8, 29, 237, 189, - 8, 29, 250, 202, 8, 29, 250, 228, 8, 29, 251, 108, 8, 29, 244, 104, 8, - 29, 229, 120, 8, 29, 223, 10, 8, 29, 229, 64, 8, 29, 251, 182, 8, 29, - 222, 241, 8, 29, 235, 212, 8, 29, 239, 3, 34, 4, 248, 35, 34, 4, 248, 32, - 34, 4, 245, 109, 34, 4, 224, 138, 34, 4, 224, 137, 34, 4, 233, 144, 34, - 4, 252, 188, 34, 4, 252, 232, 34, 4, 236, 243, 34, 4, 238, 123, 34, 4, - 236, 184, 34, 4, 246, 141, 34, 4, 247, 92, 34, 4, 225, 38, 34, 4, 227, - 37, 34, 4, 226, 238, 34, 4, 250, 16, 34, 4, 250, 13, 34, 4, 237, 239, 34, - 4, 231, 229, 34, 4, 250, 67, 34, 4, 235, 184, 34, 4, 230, 203, 34, 4, - 229, 112, 34, 4, 223, 95, 34, 4, 223, 76, 34, 4, 251, 225, 34, 4, 239, - 169, 34, 4, 235, 47, 34, 4, 223, 225, 34, 4, 239, 2, 34, 4, 235, 120, 34, - 4, 246, 125, 34, 4, 236, 226, 34, 4, 235, 160, 34, 4, 234, 168, 34, 4, - 74, 34, 4, 240, 16, 34, 4, 245, 75, 34, 4, 245, 60, 34, 4, 224, 118, 34, - 4, 224, 112, 34, 4, 233, 69, 34, 4, 252, 186, 34, 4, 252, 181, 34, 4, - 236, 242, 34, 4, 238, 121, 34, 4, 236, 183, 34, 4, 246, 139, 34, 4, 247, - 70, 34, 4, 224, 228, 34, 4, 226, 175, 34, 4, 226, 220, 34, 4, 250, 8, 34, - 4, 250, 12, 34, 4, 237, 193, 34, 4, 231, 180, 34, 4, 250, 4, 34, 4, 235, - 181, 34, 4, 229, 15, 34, 4, 229, 90, 34, 4, 223, 47, 34, 4, 223, 72, 34, - 4, 251, 118, 34, 4, 239, 156, 34, 4, 235, 46, 34, 4, 223, 202, 34, 4, - 238, 199, 34, 4, 235, 118, 34, 4, 246, 46, 34, 4, 236, 157, 34, 4, 235, - 89, 34, 4, 234, 163, 34, 4, 57, 34, 4, 254, 190, 34, 4, 235, 133, 34, 4, - 154, 34, 4, 245, 148, 34, 4, 224, 173, 34, 4, 224, 164, 34, 4, 213, 34, - 4, 252, 190, 34, 4, 253, 70, 34, 4, 236, 245, 34, 4, 238, 126, 34, 4, - 238, 125, 34, 4, 236, 186, 34, 4, 246, 144, 34, 4, 247, 129, 34, 4, 225, - 64, 34, 4, 227, 107, 34, 4, 226, 251, 34, 4, 250, 22, 34, 4, 250, 15, 34, - 4, 238, 43, 34, 4, 208, 34, 4, 250, 189, 34, 4, 235, 189, 34, 4, 231, 31, - 34, 4, 229, 146, 34, 4, 223, 117, 34, 4, 223, 85, 34, 4, 252, 39, 34, 4, - 239, 179, 34, 4, 235, 49, 34, 4, 191, 34, 4, 177, 34, 4, 239, 46, 34, 4, - 235, 122, 34, 4, 246, 193, 34, 4, 198, 34, 4, 236, 1, 34, 4, 234, 173, - 34, 4, 234, 52, 34, 4, 234, 49, 34, 4, 244, 218, 34, 4, 224, 98, 34, 4, - 224, 94, 34, 4, 232, 244, 34, 4, 252, 184, 34, 4, 252, 131, 34, 4, 236, - 240, 34, 4, 238, 119, 34, 4, 236, 181, 34, 4, 246, 136, 34, 4, 247, 3, - 34, 4, 224, 198, 34, 4, 226, 108, 34, 4, 226, 198, 34, 4, 250, 6, 34, 4, - 250, 10, 34, 4, 237, 125, 34, 4, 231, 114, 34, 4, 249, 145, 34, 4, 235, - 173, 34, 4, 228, 159, 34, 4, 229, 66, 34, 4, 223, 25, 34, 4, 223, 69, 34, - 4, 251, 17, 34, 4, 239, 108, 34, 4, 235, 37, 34, 4, 223, 172, 34, 4, 238, - 139, 34, 4, 235, 116, 34, 4, 246, 4, 34, 4, 236, 86, 34, 4, 234, 253, 34, - 4, 234, 150, 34, 4, 66, 34, 4, 225, 138, 34, 4, 244, 145, 34, 4, 244, - 137, 34, 4, 224, 83, 34, 4, 224, 82, 34, 4, 232, 173, 34, 4, 252, 183, - 34, 4, 252, 90, 34, 4, 236, 239, 34, 4, 238, 118, 34, 4, 236, 180, 34, 4, - 246, 135, 34, 4, 246, 219, 34, 4, 224, 190, 34, 4, 225, 250, 34, 4, 226, - 186, 34, 4, 250, 5, 34, 4, 250, 9, 34, 4, 237, 110, 34, 4, 231, 70, 34, - 4, 248, 107, 34, 4, 235, 169, 34, 4, 228, 6, 34, 4, 229, 43, 34, 4, 223, - 19, 34, 4, 223, 65, 34, 4, 250, 235, 34, 4, 239, 101, 34, 4, 235, 33, 34, - 4, 223, 158, 34, 4, 238, 107, 34, 4, 235, 115, 34, 4, 245, 218, 34, 4, - 236, 66, 34, 4, 234, 206, 34, 4, 234, 146, 34, 4, 73, 34, 4, 234, 61, 34, - 4, 235, 104, 34, 4, 244, 227, 34, 4, 244, 219, 34, 4, 224, 105, 34, 4, - 224, 99, 34, 4, 233, 4, 34, 4, 252, 185, 34, 4, 252, 138, 34, 4, 236, - 241, 34, 4, 238, 120, 34, 4, 236, 182, 34, 4, 246, 138, 34, 4, 246, 137, - 34, 4, 247, 7, 34, 4, 224, 206, 34, 4, 96, 34, 4, 226, 201, 34, 4, 250, - 7, 34, 4, 250, 11, 34, 4, 237, 143, 34, 4, 231, 122, 34, 4, 249, 161, 34, - 4, 235, 175, 34, 4, 228, 169, 34, 4, 229, 71, 34, 4, 223, 27, 34, 4, 223, - 70, 34, 4, 251, 68, 34, 4, 239, 117, 34, 4, 235, 38, 34, 4, 223, 183, 34, - 4, 238, 150, 34, 4, 235, 117, 34, 4, 246, 11, 34, 4, 236, 103, 34, 4, - 235, 6, 34, 4, 234, 152, 34, 4, 72, 34, 4, 247, 239, 34, 4, 235, 126, 34, - 4, 245, 121, 34, 4, 245, 100, 34, 4, 224, 141, 34, 4, 224, 134, 34, 4, - 233, 151, 34, 4, 252, 189, 34, 4, 252, 238, 34, 4, 236, 244, 34, 4, 238, - 124, 34, 4, 238, 122, 34, 4, 236, 185, 34, 4, 246, 142, 34, 4, 246, 140, - 34, 4, 247, 97, 34, 4, 225, 42, 34, 4, 227, 44, 34, 4, 226, 239, 34, 4, - 250, 17, 34, 4, 250, 14, 34, 4, 237, 243, 34, 4, 231, 244, 34, 4, 250, - 77, 34, 4, 235, 185, 34, 4, 230, 213, 34, 4, 229, 114, 34, 4, 223, 97, - 34, 4, 223, 77, 34, 4, 251, 231, 34, 4, 239, 170, 34, 4, 235, 48, 34, 4, - 223, 228, 34, 4, 239, 3, 34, 4, 235, 121, 34, 4, 235, 119, 34, 4, 246, - 131, 34, 4, 246, 122, 34, 4, 236, 235, 34, 4, 235, 162, 34, 4, 234, 169, - 34, 4, 235, 139, 34, 4, 237, 218, 34, 251, 54, 34, 246, 218, 228, 38, 34, - 232, 69, 76, 34, 4, 235, 174, 247, 129, 34, 4, 235, 174, 177, 34, 4, 235, - 174, 228, 159, 34, 14, 247, 89, 34, 14, 239, 1, 34, 14, 226, 154, 34, 14, - 235, 68, 34, 14, 253, 40, 34, 14, 247, 128, 34, 14, 227, 104, 34, 14, - 250, 149, 34, 14, 249, 144, 34, 14, 238, 97, 34, 14, 226, 111, 34, 14, - 249, 160, 34, 14, 239, 109, 34, 21, 223, 89, 34, 21, 118, 34, 21, 113, - 34, 21, 166, 34, 21, 158, 34, 21, 173, 34, 21, 183, 34, 21, 194, 34, 21, - 187, 34, 21, 192, 34, 4, 235, 174, 198, 34, 4, 235, 174, 249, 161, 28, 6, - 1, 223, 93, 28, 3, 1, 223, 93, 28, 6, 1, 248, 67, 28, 3, 1, 248, 67, 28, - 6, 1, 200, 248, 69, 28, 3, 1, 200, 248, 69, 28, 6, 1, 239, 215, 28, 3, 1, - 239, 215, 28, 6, 1, 249, 175, 28, 3, 1, 249, 175, 28, 6, 1, 236, 90, 225, - 153, 28, 3, 1, 236, 90, 225, 153, 28, 6, 1, 252, 100, 234, 66, 28, 3, 1, - 252, 100, 234, 66, 28, 6, 1, 235, 145, 223, 217, 28, 3, 1, 235, 145, 223, - 217, 28, 6, 1, 223, 214, 2, 253, 67, 223, 217, 28, 3, 1, 223, 214, 2, - 253, 67, 223, 217, 28, 6, 1, 239, 213, 223, 239, 28, 3, 1, 239, 213, 223, - 239, 28, 6, 1, 200, 223, 158, 28, 3, 1, 200, 223, 158, 28, 6, 1, 239, - 213, 57, 28, 3, 1, 239, 213, 57, 28, 6, 1, 251, 82, 237, 155, 223, 139, - 28, 3, 1, 251, 82, 237, 155, 223, 139, 28, 6, 1, 252, 143, 223, 139, 28, - 3, 1, 252, 143, 223, 139, 28, 6, 1, 239, 213, 251, 82, 237, 155, 223, - 139, 28, 3, 1, 239, 213, 251, 82, 237, 155, 223, 139, 28, 6, 1, 223, 185, - 28, 3, 1, 223, 185, 28, 6, 1, 228, 165, 250, 77, 28, 3, 1, 228, 165, 250, - 77, 28, 6, 1, 228, 165, 248, 2, 28, 3, 1, 228, 165, 248, 2, 28, 6, 1, - 228, 165, 247, 247, 28, 3, 1, 228, 165, 247, 247, 28, 6, 1, 236, 94, 73, - 28, 3, 1, 236, 94, 73, 28, 6, 1, 252, 167, 73, 28, 3, 1, 252, 167, 73, - 28, 6, 1, 47, 236, 94, 73, 28, 3, 1, 47, 236, 94, 73, 28, 1, 236, 54, 73, - 36, 28, 224, 176, 36, 28, 227, 24, 236, 128, 53, 36, 28, 244, 136, 236, - 128, 53, 36, 28, 226, 195, 236, 128, 53, 228, 192, 254, 69, 36, 28, 239, - 12, 36, 28, 233, 156, 28, 239, 12, 28, 233, 156, 28, 6, 1, 248, 78, 28, - 3, 1, 248, 78, 28, 6, 1, 248, 60, 28, 3, 1, 248, 60, 28, 6, 1, 223, 55, - 28, 3, 1, 223, 55, 28, 6, 1, 251, 240, 28, 3, 1, 251, 240, 28, 6, 1, 248, - 59, 28, 3, 1, 248, 59, 28, 6, 1, 227, 45, 2, 236, 154, 88, 28, 3, 1, 227, - 45, 2, 236, 154, 88, 28, 6, 1, 225, 220, 28, 3, 1, 225, 220, 28, 6, 1, - 226, 23, 28, 3, 1, 226, 23, 28, 6, 1, 226, 27, 28, 3, 1, 226, 27, 28, 6, - 1, 227, 50, 28, 3, 1, 227, 50, 28, 6, 1, 244, 125, 28, 3, 1, 244, 125, - 28, 6, 1, 229, 28, 28, 3, 1, 229, 28, 52, 1, 251, 160, 206, 223, 193, - 233, 37, 52, 1, 251, 160, 206, 223, 249, 233, 37, 52, 1, 251, 160, 206, - 223, 193, 229, 130, 52, 1, 251, 160, 206, 223, 249, 229, 130, 52, 1, 251, - 160, 206, 223, 193, 232, 84, 52, 1, 251, 160, 206, 223, 249, 232, 84, 52, - 1, 251, 160, 206, 223, 193, 231, 70, 52, 1, 251, 160, 206, 223, 249, 231, - 70, 52, 1, 247, 140, 248, 138, 206, 125, 52, 1, 201, 248, 138, 206, 125, - 52, 1, 236, 155, 248, 138, 206, 125, 52, 1, 184, 248, 138, 206, 125, 52, - 1, 247, 139, 248, 138, 206, 125, 52, 1, 247, 140, 248, 138, 237, 232, - 206, 125, 52, 1, 201, 248, 138, 237, 232, 206, 125, 52, 1, 236, 155, 248, - 138, 237, 232, 206, 125, 52, 1, 184, 248, 138, 237, 232, 206, 125, 52, 1, - 247, 139, 248, 138, 237, 232, 206, 125, 52, 1, 247, 140, 237, 232, 206, - 125, 52, 1, 201, 237, 232, 206, 125, 52, 1, 236, 155, 237, 232, 206, 125, - 52, 1, 184, 237, 232, 206, 125, 52, 1, 247, 139, 237, 232, 206, 125, 52, - 1, 56, 61, 125, 52, 1, 56, 228, 194, 52, 1, 56, 169, 125, 52, 1, 203, 41, - 251, 11, 254, 181, 52, 1, 232, 8, 99, 58, 52, 1, 232, 8, 103, 58, 52, 1, - 232, 8, 247, 149, 76, 52, 1, 232, 8, 239, 223, 247, 149, 76, 52, 1, 184, - 239, 223, 247, 149, 76, 52, 1, 228, 27, 22, 201, 226, 118, 52, 1, 228, - 27, 22, 184, 226, 118, 7, 6, 1, 248, 26, 254, 227, 7, 3, 1, 248, 26, 254, - 227, 7, 6, 1, 248, 26, 254, 248, 7, 3, 1, 248, 26, 254, 248, 7, 6, 1, - 245, 98, 7, 3, 1, 245, 98, 7, 6, 1, 225, 187, 7, 3, 1, 225, 187, 7, 6, 1, - 226, 82, 7, 3, 1, 226, 82, 7, 6, 1, 250, 233, 7, 3, 1, 250, 233, 7, 6, 1, - 250, 234, 2, 251, 54, 7, 3, 1, 250, 234, 2, 251, 54, 7, 1, 3, 6, 247, - 130, 7, 1, 3, 6, 193, 7, 6, 1, 255, 63, 7, 3, 1, 255, 63, 7, 6, 1, 254, - 158, 7, 3, 1, 254, 158, 7, 6, 1, 254, 53, 7, 3, 1, 254, 53, 7, 6, 1, 254, - 41, 7, 3, 1, 254, 41, 7, 6, 1, 254, 42, 2, 169, 125, 7, 3, 1, 254, 42, 2, - 169, 125, 7, 6, 1, 254, 34, 7, 3, 1, 254, 34, 7, 6, 1, 200, 252, 45, 2, - 249, 140, 7, 3, 1, 200, 252, 45, 2, 249, 140, 7, 6, 1, 239, 77, 2, 82, 7, - 3, 1, 239, 77, 2, 82, 7, 6, 1, 239, 77, 2, 250, 1, 82, 7, 3, 1, 239, 77, - 2, 250, 1, 82, 7, 6, 1, 239, 77, 2, 195, 22, 250, 1, 82, 7, 3, 1, 239, - 77, 2, 195, 22, 250, 1, 82, 7, 6, 1, 252, 99, 149, 7, 3, 1, 252, 99, 149, - 7, 6, 1, 238, 47, 2, 201, 82, 7, 3, 1, 238, 47, 2, 201, 82, 7, 6, 1, 130, - 2, 182, 195, 234, 2, 7, 3, 1, 130, 2, 182, 195, 234, 2, 7, 6, 1, 130, 2, - 237, 124, 7, 3, 1, 130, 2, 237, 124, 7, 6, 1, 234, 52, 7, 3, 1, 234, 52, - 7, 6, 1, 233, 245, 2, 195, 226, 188, 250, 34, 7, 3, 1, 233, 245, 2, 195, - 226, 188, 250, 34, 7, 6, 1, 233, 245, 2, 247, 14, 7, 3, 1, 233, 245, 2, - 247, 14, 7, 6, 1, 233, 245, 2, 228, 114, 227, 89, 7, 3, 1, 233, 245, 2, - 228, 114, 227, 89, 7, 6, 1, 232, 140, 2, 195, 226, 188, 250, 34, 7, 3, 1, - 232, 140, 2, 195, 226, 188, 250, 34, 7, 6, 1, 232, 140, 2, 250, 1, 82, 7, - 3, 1, 232, 140, 2, 250, 1, 82, 7, 6, 1, 232, 27, 231, 105, 7, 3, 1, 232, - 27, 231, 105, 7, 6, 1, 231, 63, 231, 105, 7, 3, 1, 231, 63, 231, 105, 7, - 6, 1, 225, 65, 2, 250, 1, 82, 7, 3, 1, 225, 65, 2, 250, 1, 82, 7, 6, 1, - 224, 182, 7, 3, 1, 224, 182, 7, 6, 1, 224, 209, 223, 119, 7, 3, 1, 224, - 209, 223, 119, 7, 6, 1, 226, 197, 2, 82, 7, 3, 1, 226, 197, 2, 82, 7, 6, - 1, 226, 197, 2, 195, 226, 188, 250, 34, 7, 3, 1, 226, 197, 2, 195, 226, - 188, 250, 34, 7, 6, 1, 225, 35, 7, 3, 1, 225, 35, 7, 6, 1, 247, 173, 7, - 3, 1, 247, 173, 7, 6, 1, 239, 205, 7, 3, 1, 239, 205, 7, 6, 1, 251, 44, - 7, 3, 1, 251, 44, 52, 1, 225, 87, 7, 3, 1, 248, 98, 7, 3, 1, 237, 100, 7, - 3, 1, 236, 48, 7, 3, 1, 234, 199, 7, 3, 1, 231, 62, 7, 1, 3, 6, 231, 62, - 7, 3, 1, 225, 244, 7, 3, 1, 225, 145, 7, 6, 1, 239, 241, 222, 222, 7, 3, - 1, 239, 241, 222, 222, 7, 6, 1, 239, 241, 247, 130, 7, 3, 1, 239, 241, - 247, 130, 7, 6, 1, 239, 241, 214, 7, 6, 1, 209, 239, 241, 214, 7, 3, 1, - 209, 239, 241, 214, 7, 6, 1, 209, 149, 7, 3, 1, 209, 149, 7, 6, 1, 239, - 241, 146, 7, 3, 1, 239, 241, 146, 7, 6, 1, 239, 241, 193, 7, 3, 1, 239, - 241, 193, 7, 6, 1, 239, 241, 227, 109, 7, 3, 1, 239, 241, 227, 109, 52, - 1, 184, 251, 102, 255, 41, 52, 1, 251, 61, 52, 1, 229, 63, 247, 204, 53, - 7, 6, 1, 231, 6, 7, 3, 1, 231, 6, 7, 247, 208, 1, 200, 247, 130, 7, 247, - 208, 1, 200, 233, 244, 7, 247, 208, 1, 239, 223, 185, 7, 247, 208, 1, - 244, 81, 237, 126, 7, 247, 208, 1, 254, 120, 185, 227, 183, 235, 244, 1, - 57, 227, 183, 235, 244, 1, 74, 227, 183, 235, 244, 5, 248, 80, 227, 183, - 235, 244, 1, 66, 227, 183, 235, 244, 1, 72, 227, 183, 235, 244, 1, 73, - 227, 183, 235, 244, 5, 245, 134, 227, 183, 235, 244, 1, 238, 150, 227, - 183, 235, 244, 1, 238, 208, 227, 183, 235, 244, 1, 246, 11, 227, 183, - 235, 244, 1, 246, 54, 227, 183, 235, 244, 5, 254, 160, 227, 183, 235, - 244, 1, 251, 68, 227, 183, 235, 244, 1, 251, 150, 227, 183, 235, 244, 1, - 239, 117, 227, 183, 235, 244, 1, 239, 157, 227, 183, 235, 244, 1, 226, 5, - 227, 183, 235, 244, 1, 226, 7, 227, 183, 235, 244, 1, 250, 92, 227, 183, - 235, 244, 1, 250, 100, 227, 183, 235, 244, 1, 96, 227, 183, 235, 244, 1, - 226, 201, 227, 183, 235, 244, 1, 249, 161, 227, 183, 235, 244, 1, 250, 7, - 227, 183, 235, 244, 1, 235, 6, 227, 183, 235, 244, 1, 233, 4, 227, 183, - 235, 244, 1, 233, 79, 227, 183, 235, 244, 1, 252, 138, 227, 183, 235, - 244, 1, 252, 185, 227, 183, 235, 244, 1, 236, 103, 227, 183, 235, 244, 1, - 231, 122, 227, 183, 235, 244, 1, 237, 143, 227, 183, 235, 244, 1, 231, - 91, 227, 183, 235, 244, 1, 228, 169, 227, 183, 235, 244, 1, 244, 227, - 227, 183, 235, 244, 31, 5, 57, 227, 183, 235, 244, 31, 5, 74, 227, 183, - 235, 244, 31, 5, 66, 227, 183, 235, 244, 31, 5, 72, 227, 183, 235, 244, - 31, 5, 234, 52, 227, 183, 235, 244, 233, 0, 237, 17, 227, 183, 235, 244, - 233, 0, 237, 16, 227, 183, 235, 244, 233, 0, 237, 15, 227, 183, 235, 244, - 233, 0, 237, 14, 217, 1, 177, 217, 1, 238, 227, 217, 1, 246, 193, 217, 1, - 235, 137, 217, 1, 252, 39, 217, 1, 251, 204, 217, 1, 239, 179, 217, 1, - 234, 173, 217, 1, 227, 107, 217, 1, 226, 251, 217, 1, 250, 189, 217, 1, - 236, 1, 217, 1, 213, 217, 1, 233, 97, 217, 1, 253, 70, 217, 1, 198, 217, - 1, 226, 44, 217, 1, 226, 37, 217, 1, 248, 70, 217, 1, 224, 173, 217, 1, - 223, 85, 217, 1, 223, 117, 217, 1, 3, 57, 217, 1, 191, 217, 1, 208, 217, - 1, 238, 43, 217, 1, 229, 146, 217, 1, 231, 31, 217, 1, 154, 217, 1, 57, - 217, 1, 74, 217, 1, 66, 217, 1, 72, 217, 1, 73, 217, 1, 232, 138, 217, 1, - 224, 72, 217, 1, 247, 129, 217, 1, 246, 101, 217, 1, 248, 35, 217, 228, - 0, 1, 224, 173, 217, 228, 0, 1, 191, 217, 1, 226, 20, 217, 1, 226, 10, - 217, 1, 250, 117, 217, 1, 235, 18, 217, 1, 254, 203, 191, 217, 1, 224, - 203, 229, 146, 217, 1, 224, 204, 154, 217, 1, 254, 75, 247, 129, 217, - 228, 0, 1, 208, 217, 227, 221, 1, 208, 217, 1, 252, 19, 217, 228, 241, - 245, 119, 76, 217, 47, 245, 119, 76, 217, 165, 229, 139, 217, 165, 47, - 229, 139, 141, 5, 254, 160, 141, 5, 224, 211, 141, 1, 57, 141, 1, 255, - 63, 141, 1, 74, 141, 1, 240, 47, 141, 1, 66, 141, 1, 225, 76, 141, 1, - 153, 146, 141, 1, 153, 231, 100, 141, 1, 153, 149, 141, 1, 153, 237, 149, - 141, 1, 72, 141, 1, 248, 35, 141, 1, 254, 253, 141, 1, 73, 141, 1, 234, - 52, 141, 1, 254, 53, 141, 1, 177, 141, 1, 238, 227, 141, 1, 246, 193, - 141, 1, 246, 66, 141, 1, 235, 137, 141, 1, 252, 39, 141, 1, 251, 204, - 141, 1, 239, 179, 141, 1, 239, 160, 141, 1, 234, 173, 141, 1, 226, 20, - 141, 1, 226, 10, 141, 1, 250, 117, 141, 1, 250, 101, 141, 1, 235, 18, - 141, 1, 227, 107, 141, 1, 226, 251, 141, 1, 250, 189, 141, 1, 250, 22, - 141, 1, 236, 1, 141, 1, 213, 141, 1, 233, 97, 141, 1, 253, 70, 141, 1, - 252, 190, 141, 1, 198, 141, 1, 191, 141, 1, 208, 141, 1, 238, 43, 141, 1, - 225, 64, 141, 1, 229, 146, 141, 1, 228, 110, 141, 1, 231, 31, 141, 1, - 154, 141, 1, 237, 148, 141, 251, 33, 5, 245, 166, 141, 31, 5, 255, 63, - 141, 31, 5, 74, 141, 31, 5, 240, 47, 141, 31, 5, 66, 141, 31, 5, 225, 76, - 141, 31, 5, 153, 146, 141, 31, 5, 153, 231, 100, 141, 31, 5, 153, 149, - 141, 31, 5, 153, 237, 149, 141, 31, 5, 72, 141, 31, 5, 248, 35, 141, 31, - 5, 254, 253, 141, 31, 5, 73, 141, 31, 5, 234, 52, 141, 31, 5, 254, 53, - 141, 5, 224, 216, 141, 250, 151, 141, 47, 250, 151, 141, 21, 223, 89, - 141, 21, 118, 141, 21, 113, 141, 21, 166, 141, 21, 158, 141, 21, 173, - 141, 21, 183, 141, 21, 194, 141, 21, 187, 141, 21, 192, 239, 9, 237, 194, - 21, 223, 89, 239, 9, 237, 194, 21, 118, 239, 9, 237, 194, 21, 113, 239, - 9, 237, 194, 21, 166, 239, 9, 237, 194, 21, 158, 239, 9, 237, 194, 21, - 173, 239, 9, 237, 194, 21, 183, 239, 9, 237, 194, 21, 194, 239, 9, 237, - 194, 21, 187, 239, 9, 237, 194, 21, 192, 239, 9, 237, 194, 1, 177, 239, - 9, 237, 194, 1, 238, 227, 239, 9, 237, 194, 1, 246, 193, 239, 9, 237, - 194, 1, 235, 137, 239, 9, 237, 194, 1, 231, 31, 239, 9, 237, 194, 1, 229, - 146, 239, 9, 237, 194, 1, 223, 117, 239, 9, 237, 194, 1, 234, 173, 239, - 9, 237, 194, 1, 227, 107, 239, 9, 237, 194, 1, 244, 147, 239, 9, 237, - 194, 1, 236, 1, 239, 9, 237, 194, 1, 213, 239, 9, 237, 194, 1, 233, 97, - 239, 9, 237, 194, 1, 198, 239, 9, 237, 194, 1, 250, 189, 239, 9, 237, - 194, 1, 253, 70, 239, 9, 237, 194, 1, 208, 239, 9, 237, 194, 1, 191, 239, - 9, 237, 194, 1, 238, 43, 239, 9, 237, 194, 1, 224, 173, 239, 9, 237, 194, - 1, 226, 251, 239, 9, 237, 194, 1, 154, 239, 9, 237, 194, 1, 225, 64, 239, - 9, 237, 194, 1, 252, 39, 239, 9, 237, 194, 1, 57, 239, 9, 237, 194, 1, - 234, 88, 239, 9, 237, 194, 1, 74, 239, 9, 237, 194, 1, 234, 52, 239, 9, - 237, 194, 31, 225, 159, 239, 9, 237, 194, 31, 72, 239, 9, 237, 194, 31, - 66, 239, 9, 237, 194, 31, 248, 35, 239, 9, 237, 194, 31, 73, 239, 9, 237, - 194, 206, 233, 15, 239, 9, 237, 194, 206, 252, 29, 239, 9, 237, 194, 206, - 252, 30, 233, 15, 239, 9, 237, 194, 5, 250, 206, 239, 9, 237, 194, 5, - 229, 22, 231, 223, 1, 177, 231, 223, 1, 246, 193, 231, 223, 1, 235, 137, - 231, 223, 1, 227, 107, 231, 223, 1, 250, 189, 231, 223, 1, 236, 1, 231, - 223, 1, 213, 231, 223, 1, 253, 70, 231, 223, 1, 198, 231, 223, 1, 252, - 39, 231, 223, 1, 239, 179, 231, 223, 1, 234, 173, 231, 223, 1, 231, 31, - 231, 223, 1, 208, 231, 223, 1, 238, 43, 231, 223, 1, 191, 231, 223, 1, - 224, 173, 231, 223, 1, 154, 231, 223, 1, 236, 245, 231, 223, 1, 235, 122, - 231, 223, 1, 235, 189, 231, 223, 1, 234, 153, 231, 223, 1, 57, 231, 223, - 31, 5, 74, 231, 223, 31, 5, 66, 231, 223, 31, 5, 72, 231, 223, 31, 5, - 254, 253, 231, 223, 31, 5, 73, 231, 223, 31, 5, 254, 53, 231, 223, 31, 5, - 247, 165, 231, 223, 31, 5, 248, 56, 231, 223, 251, 33, 5, 235, 139, 231, - 223, 251, 33, 5, 199, 231, 223, 251, 33, 5, 146, 231, 223, 251, 33, 5, - 212, 231, 223, 224, 216, 231, 223, 230, 206, 76, 136, 1, 57, 136, 1, 74, - 136, 1, 66, 136, 1, 72, 136, 1, 254, 253, 136, 1, 73, 136, 1, 177, 136, - 1, 238, 227, 136, 1, 246, 193, 136, 1, 246, 66, 136, 1, 235, 98, 136, 1, - 235, 137, 136, 1, 251, 204, 136, 1, 251, 171, 136, 1, 239, 179, 136, 1, - 239, 160, 136, 1, 235, 91, 136, 1, 235, 93, 136, 1, 235, 92, 136, 1, 227, - 107, 136, 1, 226, 251, 136, 1, 250, 189, 136, 1, 250, 22, 136, 1, 234, - 203, 136, 1, 236, 1, 136, 1, 250, 117, 136, 1, 213, 136, 1, 232, 230, - 136, 1, 233, 97, 136, 1, 253, 70, 136, 1, 252, 190, 136, 1, 236, 61, 136, - 1, 198, 136, 1, 253, 16, 136, 1, 191, 136, 1, 208, 136, 1, 238, 43, 136, - 1, 225, 64, 136, 1, 228, 110, 136, 1, 231, 31, 136, 1, 154, 136, 31, 5, - 255, 63, 136, 31, 5, 74, 136, 31, 5, 240, 47, 136, 31, 5, 248, 22, 136, - 31, 5, 66, 136, 31, 5, 234, 88, 136, 31, 5, 73, 136, 31, 5, 254, 253, - 136, 31, 5, 254, 53, 136, 31, 5, 225, 159, 136, 251, 33, 5, 191, 136, - 251, 33, 5, 208, 136, 251, 33, 5, 238, 43, 136, 251, 33, 5, 224, 173, - 136, 1, 35, 239, 76, 136, 1, 35, 214, 136, 1, 35, 235, 139, 136, 251, 33, - 5, 35, 235, 139, 136, 1, 35, 251, 205, 136, 1, 35, 227, 109, 136, 1, 35, - 199, 136, 1, 35, 233, 244, 136, 1, 35, 224, 25, 136, 1, 35, 146, 136, 1, - 35, 149, 136, 1, 35, 228, 111, 136, 251, 33, 5, 35, 185, 136, 251, 33, 5, - 35, 212, 136, 21, 223, 89, 136, 21, 118, 136, 21, 113, 136, 21, 166, 136, - 21, 158, 136, 21, 173, 136, 21, 183, 136, 21, 194, 136, 21, 187, 136, 21, - 192, 136, 232, 171, 228, 134, 136, 232, 171, 250, 151, 136, 232, 171, 47, - 250, 151, 136, 232, 171, 226, 66, 250, 151, 9, 11, 242, 31, 9, 11, 242, - 30, 9, 11, 242, 29, 9, 11, 242, 28, 9, 11, 242, 27, 9, 11, 242, 26, 9, - 11, 242, 25, 9, 11, 242, 24, 9, 11, 242, 23, 9, 11, 242, 22, 9, 11, 242, - 21, 9, 11, 242, 20, 9, 11, 242, 19, 9, 11, 242, 18, 9, 11, 242, 17, 9, - 11, 242, 16, 9, 11, 242, 15, 9, 11, 242, 14, 9, 11, 242, 13, 9, 11, 242, - 12, 9, 11, 242, 11, 9, 11, 242, 10, 9, 11, 242, 9, 9, 11, 242, 8, 9, 11, - 242, 7, 9, 11, 242, 6, 9, 11, 242, 5, 9, 11, 242, 4, 9, 11, 242, 3, 9, - 11, 242, 2, 9, 11, 242, 1, 9, 11, 242, 0, 9, 11, 241, 255, 9, 11, 241, - 254, 9, 11, 241, 253, 9, 11, 241, 252, 9, 11, 241, 251, 9, 11, 241, 250, - 9, 11, 241, 249, 9, 11, 241, 248, 9, 11, 241, 247, 9, 11, 241, 246, 9, - 11, 241, 245, 9, 11, 241, 244, 9, 11, 241, 243, 9, 11, 241, 242, 9, 11, - 241, 241, 9, 11, 241, 240, 9, 11, 241, 239, 9, 11, 241, 238, 9, 11, 241, - 237, 9, 11, 241, 236, 9, 11, 241, 235, 9, 11, 241, 234, 9, 11, 241, 233, - 9, 11, 241, 232, 9, 11, 241, 231, 9, 11, 241, 230, 9, 11, 241, 229, 9, - 11, 241, 228, 9, 11, 241, 227, 9, 11, 241, 226, 9, 11, 241, 225, 9, 11, - 241, 224, 9, 11, 241, 223, 9, 11, 241, 222, 9, 11, 241, 221, 9, 11, 241, - 220, 9, 11, 241, 219, 9, 11, 241, 218, 9, 11, 241, 217, 9, 11, 241, 216, - 9, 11, 241, 215, 9, 11, 241, 214, 9, 11, 241, 213, 9, 11, 241, 212, 9, - 11, 241, 211, 9, 11, 241, 210, 9, 11, 241, 209, 9, 11, 241, 208, 9, 11, - 241, 207, 9, 11, 241, 206, 9, 11, 241, 205, 9, 11, 241, 204, 9, 11, 241, - 203, 9, 11, 241, 202, 9, 11, 241, 201, 9, 11, 241, 200, 9, 11, 241, 199, - 9, 11, 241, 198, 9, 11, 241, 197, 9, 11, 241, 196, 9, 11, 241, 195, 9, - 11, 241, 194, 9, 11, 241, 193, 9, 11, 241, 192, 9, 11, 241, 191, 9, 11, - 241, 190, 9, 11, 241, 189, 9, 11, 241, 188, 9, 11, 241, 187, 9, 11, 241, - 186, 9, 11, 241, 185, 9, 11, 241, 184, 9, 11, 241, 183, 9, 11, 241, 182, - 9, 11, 241, 181, 9, 11, 241, 180, 9, 11, 241, 179, 9, 11, 241, 178, 9, - 11, 241, 177, 9, 11, 241, 176, 9, 11, 241, 175, 9, 11, 241, 174, 9, 11, - 241, 173, 9, 11, 241, 172, 9, 11, 241, 171, 9, 11, 241, 170, 9, 11, 241, - 169, 9, 11, 241, 168, 9, 11, 241, 167, 9, 11, 241, 166, 9, 11, 241, 165, - 9, 11, 241, 164, 9, 11, 241, 163, 9, 11, 241, 162, 9, 11, 241, 161, 9, - 11, 241, 160, 9, 11, 241, 159, 9, 11, 241, 158, 9, 11, 241, 157, 9, 11, - 241, 156, 9, 11, 241, 155, 9, 11, 241, 154, 9, 11, 241, 153, 9, 11, 241, - 152, 9, 11, 241, 151, 9, 11, 241, 150, 9, 11, 241, 149, 9, 11, 241, 148, - 9, 11, 241, 147, 9, 11, 241, 146, 9, 11, 241, 145, 9, 11, 241, 144, 9, - 11, 241, 143, 9, 11, 241, 142, 9, 11, 241, 141, 9, 11, 241, 140, 9, 11, - 241, 139, 9, 11, 241, 138, 9, 11, 241, 137, 9, 11, 241, 136, 9, 11, 241, - 135, 9, 11, 241, 134, 9, 11, 241, 133, 9, 11, 241, 132, 9, 11, 241, 131, - 9, 11, 241, 130, 9, 11, 241, 129, 9, 11, 241, 128, 9, 11, 241, 127, 9, - 11, 241, 126, 9, 11, 241, 125, 9, 11, 241, 124, 9, 11, 241, 123, 9, 11, - 241, 122, 9, 11, 241, 121, 9, 11, 241, 120, 9, 11, 241, 119, 9, 11, 241, - 118, 9, 11, 241, 117, 9, 11, 241, 116, 9, 11, 241, 115, 9, 11, 241, 114, - 9, 11, 241, 113, 9, 11, 241, 112, 9, 11, 241, 111, 9, 11, 241, 110, 9, - 11, 241, 109, 9, 11, 241, 108, 9, 11, 241, 107, 9, 11, 241, 106, 9, 11, - 241, 105, 9, 11, 241, 104, 9, 11, 241, 103, 9, 11, 241, 102, 9, 11, 241, - 101, 9, 11, 241, 100, 9, 11, 241, 99, 9, 11, 241, 98, 9, 11, 241, 97, 9, - 11, 241, 96, 9, 11, 241, 95, 9, 11, 241, 94, 9, 11, 241, 93, 9, 11, 241, - 92, 9, 11, 241, 91, 9, 11, 241, 90, 9, 11, 241, 89, 9, 11, 241, 88, 9, - 11, 241, 87, 9, 11, 241, 86, 9, 11, 241, 85, 9, 11, 241, 84, 9, 11, 241, - 83, 9, 11, 241, 82, 9, 11, 241, 81, 9, 11, 241, 80, 9, 11, 241, 79, 9, - 11, 241, 78, 9, 11, 241, 77, 9, 11, 241, 76, 9, 11, 241, 75, 9, 11, 241, - 74, 9, 11, 241, 73, 9, 11, 241, 72, 9, 11, 241, 71, 9, 11, 241, 70, 9, - 11, 241, 69, 9, 11, 241, 68, 9, 11, 241, 67, 9, 11, 241, 66, 9, 11, 241, - 65, 9, 11, 241, 64, 9, 11, 241, 63, 9, 11, 241, 62, 9, 11, 241, 61, 9, - 11, 241, 60, 9, 11, 241, 59, 9, 11, 241, 58, 9, 11, 241, 57, 9, 11, 241, - 56, 9, 11, 241, 55, 9, 11, 241, 54, 9, 11, 241, 53, 9, 11, 241, 52, 9, - 11, 241, 51, 9, 11, 241, 50, 9, 11, 241, 49, 9, 11, 241, 48, 9, 11, 241, - 47, 9, 11, 241, 46, 9, 11, 241, 45, 9, 11, 241, 44, 9, 11, 241, 43, 9, - 11, 241, 42, 9, 11, 241, 41, 9, 11, 241, 40, 9, 11, 241, 39, 9, 11, 241, - 38, 9, 11, 241, 37, 9, 11, 241, 36, 9, 11, 241, 35, 9, 11, 241, 34, 9, - 11, 241, 33, 9, 11, 241, 32, 9, 11, 241, 31, 9, 11, 241, 30, 9, 11, 241, - 29, 9, 11, 241, 28, 9, 11, 241, 27, 9, 11, 241, 26, 9, 11, 241, 25, 9, - 11, 241, 24, 9, 11, 241, 23, 9, 11, 241, 22, 9, 11, 241, 21, 9, 11, 241, - 20, 9, 11, 241, 19, 9, 11, 241, 18, 9, 11, 241, 17, 9, 11, 241, 16, 9, - 11, 241, 15, 9, 11, 241, 14, 9, 11, 241, 13, 9, 11, 241, 12, 9, 11, 241, - 11, 9, 11, 241, 10, 9, 11, 241, 9, 9, 11, 241, 8, 9, 11, 241, 7, 9, 11, - 241, 6, 9, 11, 241, 5, 9, 11, 241, 4, 9, 11, 241, 3, 9, 11, 241, 2, 9, - 11, 241, 1, 9, 11, 241, 0, 9, 11, 240, 255, 9, 11, 240, 254, 9, 11, 240, - 253, 9, 11, 240, 252, 9, 11, 240, 251, 9, 11, 240, 250, 9, 11, 240, 249, - 9, 11, 240, 248, 9, 11, 240, 247, 9, 11, 240, 246, 9, 11, 240, 245, 9, - 11, 240, 244, 9, 11, 240, 243, 9, 11, 240, 242, 9, 11, 240, 241, 9, 11, - 240, 240, 9, 11, 240, 239, 9, 11, 240, 238, 9, 11, 240, 237, 9, 11, 240, - 236, 9, 11, 240, 235, 9, 11, 240, 234, 9, 11, 240, 233, 9, 11, 240, 232, - 9, 11, 240, 231, 9, 11, 240, 230, 9, 11, 240, 229, 9, 11, 240, 228, 9, - 11, 240, 227, 9, 11, 240, 226, 9, 11, 240, 225, 9, 11, 240, 224, 9, 11, - 240, 223, 9, 11, 240, 222, 9, 11, 240, 221, 9, 11, 240, 220, 9, 11, 240, - 219, 9, 11, 240, 218, 9, 11, 240, 217, 9, 11, 240, 216, 9, 11, 240, 215, - 9, 11, 240, 214, 9, 11, 240, 213, 9, 11, 240, 212, 9, 11, 240, 211, 9, - 11, 240, 210, 9, 11, 240, 209, 9, 11, 240, 208, 9, 11, 240, 207, 9, 11, - 240, 206, 9, 11, 240, 205, 9, 11, 240, 204, 9, 11, 240, 203, 9, 11, 240, - 202, 9, 11, 240, 201, 9, 11, 240, 200, 9, 11, 240, 199, 9, 11, 240, 198, - 9, 11, 240, 197, 9, 11, 240, 196, 9, 11, 240, 195, 9, 11, 240, 194, 9, - 11, 240, 193, 9, 11, 240, 192, 9, 11, 240, 191, 9, 11, 240, 190, 9, 11, - 240, 189, 9, 11, 240, 188, 9, 11, 240, 187, 9, 11, 240, 186, 9, 11, 240, - 185, 9, 11, 240, 184, 9, 11, 240, 183, 9, 11, 240, 182, 9, 11, 240, 181, - 9, 11, 240, 180, 9, 11, 240, 179, 9, 11, 240, 178, 9, 11, 240, 177, 9, - 11, 240, 176, 9, 11, 240, 175, 9, 11, 240, 174, 9, 11, 240, 173, 9, 11, - 240, 172, 9, 11, 240, 171, 9, 11, 240, 170, 9, 11, 240, 169, 9, 11, 240, - 168, 9, 11, 240, 167, 9, 11, 240, 166, 9, 11, 240, 165, 9, 11, 240, 164, - 9, 11, 240, 163, 9, 11, 240, 162, 9, 11, 240, 161, 9, 11, 240, 160, 9, - 11, 240, 159, 9, 11, 240, 158, 9, 11, 240, 157, 9, 11, 240, 156, 9, 11, - 240, 155, 9, 11, 240, 154, 9, 11, 240, 153, 9, 11, 240, 152, 9, 11, 240, - 151, 9, 11, 240, 150, 9, 11, 240, 149, 9, 11, 240, 148, 9, 11, 240, 147, - 9, 11, 240, 146, 9, 11, 240, 145, 9, 11, 240, 144, 9, 11, 240, 143, 9, - 11, 240, 142, 9, 11, 240, 141, 9, 11, 240, 140, 9, 11, 240, 139, 9, 11, - 240, 138, 9, 11, 240, 137, 9, 11, 240, 136, 9, 11, 240, 135, 9, 11, 240, - 134, 9, 11, 240, 133, 9, 11, 240, 132, 9, 11, 240, 131, 9, 11, 240, 130, - 9, 11, 240, 129, 9, 11, 240, 128, 9, 11, 240, 127, 9, 11, 240, 126, 9, - 11, 240, 125, 9, 11, 240, 124, 9, 11, 240, 123, 9, 11, 240, 122, 9, 11, - 240, 121, 9, 11, 240, 120, 9, 11, 240, 119, 9, 11, 240, 118, 9, 11, 240, - 117, 9, 11, 240, 116, 9, 11, 240, 115, 9, 11, 240, 114, 9, 11, 240, 113, - 9, 11, 240, 112, 9, 11, 240, 111, 9, 11, 240, 110, 9, 11, 240, 109, 9, - 11, 240, 108, 9, 11, 240, 107, 9, 11, 240, 106, 9, 11, 240, 105, 9, 11, - 240, 104, 9, 11, 240, 103, 9, 11, 240, 102, 9, 11, 240, 101, 9, 11, 240, - 100, 9, 11, 240, 99, 9, 11, 240, 98, 9, 11, 240, 97, 9, 11, 240, 96, 9, - 11, 240, 95, 9, 11, 240, 94, 9, 11, 240, 93, 9, 11, 240, 92, 9, 11, 240, - 91, 9, 11, 240, 90, 9, 11, 240, 89, 9, 11, 240, 88, 9, 11, 240, 87, 9, - 11, 240, 86, 9, 11, 240, 85, 9, 11, 240, 84, 9, 11, 240, 83, 9, 11, 240, - 82, 9, 11, 240, 81, 9, 11, 240, 80, 9, 11, 240, 79, 9, 11, 240, 78, 9, - 11, 240, 77, 7, 3, 20, 247, 74, 7, 3, 20, 247, 70, 7, 3, 20, 247, 33, 7, - 3, 20, 247, 73, 7, 3, 20, 247, 72, 7, 3, 20, 182, 231, 35, 227, 109, 7, - 3, 20, 228, 70, 120, 3, 20, 236, 211, 234, 232, 120, 3, 20, 236, 211, - 248, 39, 120, 3, 20, 236, 211, 239, 252, 120, 3, 20, 224, 231, 234, 232, - 120, 3, 20, 236, 211, 224, 67, 78, 1, 223, 176, 2, 245, 58, 78, 232, 255, - 239, 100, 225, 53, 78, 20, 223, 200, 223, 176, 223, 176, 233, 166, 78, 1, - 254, 201, 254, 29, 78, 1, 224, 117, 254, 227, 78, 1, 224, 117, 250, 160, - 78, 1, 224, 117, 245, 121, 78, 1, 224, 117, 239, 59, 78, 1, 224, 117, - 238, 12, 78, 1, 224, 117, 35, 236, 215, 78, 1, 224, 117, 231, 205, 78, 1, - 224, 117, 227, 58, 78, 1, 254, 201, 79, 53, 78, 1, 229, 79, 2, 229, 79, - 249, 140, 78, 1, 229, 79, 2, 228, 244, 249, 140, 78, 1, 229, 79, 2, 250, - 176, 22, 229, 79, 249, 140, 78, 1, 229, 79, 2, 250, 176, 22, 228, 244, - 249, 140, 78, 1, 92, 2, 233, 166, 78, 1, 92, 2, 232, 126, 78, 1, 92, 2, - 237, 27, 78, 1, 252, 201, 2, 250, 175, 78, 1, 246, 35, 2, 250, 175, 78, - 1, 250, 161, 2, 250, 175, 78, 1, 245, 122, 2, 237, 27, 78, 1, 225, 47, 2, - 250, 175, 78, 1, 223, 100, 2, 250, 175, 78, 1, 227, 11, 2, 250, 175, 78, - 1, 223, 176, 2, 250, 175, 78, 1, 35, 239, 60, 2, 250, 175, 78, 1, 239, - 60, 2, 250, 175, 78, 1, 238, 13, 2, 250, 175, 78, 1, 236, 216, 2, 250, - 175, 78, 1, 234, 195, 2, 250, 175, 78, 1, 231, 3, 2, 250, 175, 78, 1, 35, - 233, 152, 2, 250, 175, 78, 1, 233, 152, 2, 250, 175, 78, 1, 226, 42, 2, - 250, 175, 78, 1, 232, 93, 2, 250, 175, 78, 1, 231, 206, 2, 250, 175, 78, - 1, 229, 79, 2, 250, 175, 78, 1, 227, 59, 2, 250, 175, 78, 1, 225, 47, 2, - 244, 223, 78, 1, 252, 201, 2, 232, 14, 78, 1, 239, 60, 2, 232, 14, 78, 1, - 233, 152, 2, 232, 14, 78, 20, 92, 238, 12, 10, 1, 92, 224, 158, 44, 15, - 10, 1, 92, 224, 158, 35, 15, 10, 1, 252, 231, 44, 15, 10, 1, 252, 231, - 35, 15, 10, 1, 252, 231, 59, 15, 10, 1, 252, 231, 124, 15, 10, 1, 233, - 141, 44, 15, 10, 1, 233, 141, 35, 15, 10, 1, 233, 141, 59, 15, 10, 1, - 233, 141, 124, 15, 10, 1, 252, 222, 44, 15, 10, 1, 252, 222, 35, 15, 10, - 1, 252, 222, 59, 15, 10, 1, 252, 222, 124, 15, 10, 1, 226, 13, 44, 15, - 10, 1, 226, 13, 35, 15, 10, 1, 226, 13, 59, 15, 10, 1, 226, 13, 124, 15, - 10, 1, 227, 33, 44, 15, 10, 1, 227, 33, 35, 15, 10, 1, 227, 33, 59, 15, - 10, 1, 227, 33, 124, 15, 10, 1, 226, 15, 44, 15, 10, 1, 226, 15, 35, 15, - 10, 1, 226, 15, 59, 15, 10, 1, 226, 15, 124, 15, 10, 1, 225, 37, 44, 15, - 10, 1, 225, 37, 35, 15, 10, 1, 225, 37, 59, 15, 10, 1, 225, 37, 124, 15, - 10, 1, 233, 139, 44, 15, 10, 1, 233, 139, 35, 15, 10, 1, 233, 139, 59, - 15, 10, 1, 233, 139, 124, 15, 10, 1, 248, 76, 44, 15, 10, 1, 248, 76, 35, - 15, 10, 1, 248, 76, 59, 15, 10, 1, 248, 76, 124, 15, 10, 1, 234, 167, 44, - 15, 10, 1, 234, 167, 35, 15, 10, 1, 234, 167, 59, 15, 10, 1, 234, 167, - 124, 15, 10, 1, 227, 49, 44, 15, 10, 1, 227, 49, 35, 15, 10, 1, 227, 49, - 59, 15, 10, 1, 227, 49, 124, 15, 10, 1, 227, 47, 44, 15, 10, 1, 227, 47, - 35, 15, 10, 1, 227, 47, 59, 15, 10, 1, 227, 47, 124, 15, 10, 1, 250, 115, - 44, 15, 10, 1, 250, 115, 35, 15, 10, 1, 250, 172, 44, 15, 10, 1, 250, - 172, 35, 15, 10, 1, 248, 100, 44, 15, 10, 1, 248, 100, 35, 15, 10, 1, - 250, 113, 44, 15, 10, 1, 250, 113, 35, 15, 10, 1, 239, 166, 44, 15, 10, - 1, 239, 166, 35, 15, 10, 1, 231, 96, 44, 15, 10, 1, 231, 96, 35, 15, 10, - 1, 238, 252, 44, 15, 10, 1, 238, 252, 35, 15, 10, 1, 238, 252, 59, 15, - 10, 1, 238, 252, 124, 15, 10, 1, 246, 181, 44, 15, 10, 1, 246, 181, 35, - 15, 10, 1, 246, 181, 59, 15, 10, 1, 246, 181, 124, 15, 10, 1, 245, 211, - 44, 15, 10, 1, 245, 211, 35, 15, 10, 1, 245, 211, 59, 15, 10, 1, 245, - 211, 124, 15, 10, 1, 235, 106, 44, 15, 10, 1, 235, 106, 35, 15, 10, 1, - 235, 106, 59, 15, 10, 1, 235, 106, 124, 15, 10, 1, 234, 252, 246, 51, 44, - 15, 10, 1, 234, 252, 246, 51, 35, 15, 10, 1, 231, 126, 44, 15, 10, 1, - 231, 126, 35, 15, 10, 1, 231, 126, 59, 15, 10, 1, 231, 126, 124, 15, 10, - 1, 245, 108, 2, 62, 64, 44, 15, 10, 1, 245, 108, 2, 62, 64, 35, 15, 10, - 1, 245, 108, 246, 9, 44, 15, 10, 1, 245, 108, 246, 9, 35, 15, 10, 1, 245, - 108, 246, 9, 59, 15, 10, 1, 245, 108, 246, 9, 124, 15, 10, 1, 245, 108, - 249, 158, 44, 15, 10, 1, 245, 108, 249, 158, 35, 15, 10, 1, 245, 108, - 249, 158, 59, 15, 10, 1, 245, 108, 249, 158, 124, 15, 10, 1, 62, 253, 30, - 44, 15, 10, 1, 62, 253, 30, 35, 15, 10, 1, 62, 253, 30, 2, 164, 64, 44, - 15, 10, 1, 62, 253, 30, 2, 164, 64, 35, 15, 10, 1, 235, 140, 44, 15, 10, - 1, 235, 140, 35, 15, 10, 1, 235, 140, 59, 15, 10, 1, 235, 140, 124, 15, - 10, 1, 97, 44, 15, 10, 1, 97, 35, 15, 10, 1, 234, 89, 44, 15, 10, 1, 234, - 89, 35, 15, 10, 1, 223, 159, 44, 15, 10, 1, 223, 159, 35, 15, 10, 1, 97, - 2, 164, 64, 44, 15, 10, 1, 225, 43, 44, 15, 10, 1, 225, 43, 35, 15, 10, - 1, 238, 185, 234, 89, 44, 15, 10, 1, 238, 185, 234, 89, 35, 15, 10, 1, - 238, 185, 223, 159, 44, 15, 10, 1, 238, 185, 223, 159, 35, 15, 10, 1, - 161, 44, 15, 10, 1, 161, 35, 15, 10, 1, 161, 59, 15, 10, 1, 161, 124, 15, - 10, 1, 225, 155, 239, 7, 238, 185, 92, 175, 59, 15, 10, 1, 225, 155, 239, - 7, 238, 185, 92, 175, 124, 15, 10, 20, 62, 2, 164, 64, 2, 92, 44, 15, 10, - 20, 62, 2, 164, 64, 2, 92, 35, 15, 10, 20, 62, 2, 164, 64, 2, 255, 20, - 44, 15, 10, 20, 62, 2, 164, 64, 2, 255, 20, 35, 15, 10, 20, 62, 2, 164, - 64, 2, 224, 145, 44, 15, 10, 20, 62, 2, 164, 64, 2, 224, 145, 35, 15, 10, - 20, 62, 2, 164, 64, 2, 97, 44, 15, 10, 20, 62, 2, 164, 64, 2, 97, 35, 15, - 10, 20, 62, 2, 164, 64, 2, 234, 89, 44, 15, 10, 20, 62, 2, 164, 64, 2, - 234, 89, 35, 15, 10, 20, 62, 2, 164, 64, 2, 223, 159, 44, 15, 10, 20, 62, - 2, 164, 64, 2, 223, 159, 35, 15, 10, 20, 62, 2, 164, 64, 2, 161, 44, 15, - 10, 20, 62, 2, 164, 64, 2, 161, 35, 15, 10, 20, 62, 2, 164, 64, 2, 161, - 59, 15, 10, 20, 225, 155, 238, 185, 62, 2, 164, 64, 2, 92, 175, 44, 15, - 10, 20, 225, 155, 238, 185, 62, 2, 164, 64, 2, 92, 175, 35, 15, 10, 20, - 225, 155, 238, 185, 62, 2, 164, 64, 2, 92, 175, 59, 15, 10, 1, 247, 107, - 62, 44, 15, 10, 1, 247, 107, 62, 35, 15, 10, 1, 247, 107, 62, 59, 15, 10, - 1, 247, 107, 62, 124, 15, 10, 20, 62, 2, 164, 64, 2, 123, 44, 15, 10, 20, - 62, 2, 164, 64, 2, 101, 44, 15, 10, 20, 62, 2, 164, 64, 2, 55, 44, 15, - 10, 20, 62, 2, 164, 64, 2, 92, 175, 44, 15, 10, 20, 62, 2, 164, 64, 2, - 62, 44, 15, 10, 20, 252, 224, 2, 123, 44, 15, 10, 20, 252, 224, 2, 101, - 44, 15, 10, 20, 252, 224, 2, 202, 44, 15, 10, 20, 252, 224, 2, 55, 44, - 15, 10, 20, 252, 224, 2, 92, 175, 44, 15, 10, 20, 252, 224, 2, 62, 44, - 15, 10, 20, 227, 35, 2, 123, 44, 15, 10, 20, 227, 35, 2, 101, 44, 15, 10, - 20, 227, 35, 2, 202, 44, 15, 10, 20, 227, 35, 2, 55, 44, 15, 10, 20, 227, - 35, 2, 92, 175, 44, 15, 10, 20, 227, 35, 2, 62, 44, 15, 10, 20, 226, 237, - 2, 123, 44, 15, 10, 20, 226, 237, 2, 55, 44, 15, 10, 20, 226, 237, 2, 92, - 175, 44, 15, 10, 20, 226, 237, 2, 62, 44, 15, 10, 20, 123, 2, 101, 44, - 15, 10, 20, 123, 2, 55, 44, 15, 10, 20, 101, 2, 123, 44, 15, 10, 20, 101, - 2, 55, 44, 15, 10, 20, 202, 2, 123, 44, 15, 10, 20, 202, 2, 101, 44, 15, - 10, 20, 202, 2, 55, 44, 15, 10, 20, 230, 202, 2, 123, 44, 15, 10, 20, - 230, 202, 2, 101, 44, 15, 10, 20, 230, 202, 2, 202, 44, 15, 10, 20, 230, - 202, 2, 55, 44, 15, 10, 20, 231, 25, 2, 101, 44, 15, 10, 20, 231, 25, 2, - 55, 44, 15, 10, 20, 250, 185, 2, 123, 44, 15, 10, 20, 250, 185, 2, 101, - 44, 15, 10, 20, 250, 185, 2, 202, 44, 15, 10, 20, 250, 185, 2, 55, 44, - 15, 10, 20, 227, 92, 2, 101, 44, 15, 10, 20, 227, 92, 2, 55, 44, 15, 10, - 20, 223, 114, 2, 55, 44, 15, 10, 20, 254, 249, 2, 123, 44, 15, 10, 20, - 254, 249, 2, 55, 44, 15, 10, 20, 246, 64, 2, 123, 44, 15, 10, 20, 246, - 64, 2, 55, 44, 15, 10, 20, 247, 88, 2, 123, 44, 15, 10, 20, 247, 88, 2, - 101, 44, 15, 10, 20, 247, 88, 2, 202, 44, 15, 10, 20, 247, 88, 2, 55, 44, - 15, 10, 20, 247, 88, 2, 92, 175, 44, 15, 10, 20, 247, 88, 2, 62, 44, 15, - 10, 20, 232, 132, 2, 101, 44, 15, 10, 20, 232, 132, 2, 55, 44, 15, 10, - 20, 232, 132, 2, 92, 175, 44, 15, 10, 20, 232, 132, 2, 62, 44, 15, 10, - 20, 239, 60, 2, 92, 44, 15, 10, 20, 239, 60, 2, 123, 44, 15, 10, 20, 239, - 60, 2, 101, 44, 15, 10, 20, 239, 60, 2, 202, 44, 15, 10, 20, 239, 60, 2, - 216, 44, 15, 10, 20, 239, 60, 2, 55, 44, 15, 10, 20, 239, 60, 2, 92, 175, - 44, 15, 10, 20, 239, 60, 2, 62, 44, 15, 10, 20, 216, 2, 123, 44, 15, 10, - 20, 216, 2, 101, 44, 15, 10, 20, 216, 2, 202, 44, 15, 10, 20, 216, 2, 55, - 44, 15, 10, 20, 216, 2, 92, 175, 44, 15, 10, 20, 216, 2, 62, 44, 15, 10, - 20, 55, 2, 123, 44, 15, 10, 20, 55, 2, 101, 44, 15, 10, 20, 55, 2, 202, - 44, 15, 10, 20, 55, 2, 55, 44, 15, 10, 20, 55, 2, 92, 175, 44, 15, 10, - 20, 55, 2, 62, 44, 15, 10, 20, 234, 252, 2, 123, 44, 15, 10, 20, 234, - 252, 2, 101, 44, 15, 10, 20, 234, 252, 2, 202, 44, 15, 10, 20, 234, 252, - 2, 55, 44, 15, 10, 20, 234, 252, 2, 92, 175, 44, 15, 10, 20, 234, 252, 2, - 62, 44, 15, 10, 20, 245, 108, 2, 123, 44, 15, 10, 20, 245, 108, 2, 55, - 44, 15, 10, 20, 245, 108, 2, 92, 175, 44, 15, 10, 20, 245, 108, 2, 62, - 44, 15, 10, 20, 62, 2, 123, 44, 15, 10, 20, 62, 2, 101, 44, 15, 10, 20, - 62, 2, 202, 44, 15, 10, 20, 62, 2, 55, 44, 15, 10, 20, 62, 2, 92, 175, - 44, 15, 10, 20, 62, 2, 62, 44, 15, 10, 20, 226, 246, 2, 227, 219, 92, 44, - 15, 10, 20, 231, 226, 2, 227, 219, 92, 44, 15, 10, 20, 92, 175, 2, 227, - 219, 92, 44, 15, 10, 20, 229, 138, 2, 250, 155, 44, 15, 10, 20, 229, 138, - 2, 239, 22, 44, 15, 10, 20, 229, 138, 2, 247, 105, 44, 15, 10, 20, 229, - 138, 2, 250, 157, 44, 15, 10, 20, 229, 138, 2, 239, 24, 44, 15, 10, 20, - 229, 138, 2, 227, 219, 92, 44, 15, 10, 20, 62, 2, 164, 64, 2, 231, 226, - 35, 15, 10, 20, 62, 2, 164, 64, 2, 223, 111, 35, 15, 10, 20, 62, 2, 164, - 64, 2, 55, 35, 15, 10, 20, 62, 2, 164, 64, 2, 234, 252, 35, 15, 10, 20, - 62, 2, 164, 64, 2, 92, 175, 35, 15, 10, 20, 62, 2, 164, 64, 2, 62, 35, - 15, 10, 20, 252, 224, 2, 231, 226, 35, 15, 10, 20, 252, 224, 2, 223, 111, - 35, 15, 10, 20, 252, 224, 2, 55, 35, 15, 10, 20, 252, 224, 2, 234, 252, - 35, 15, 10, 20, 252, 224, 2, 92, 175, 35, 15, 10, 20, 252, 224, 2, 62, - 35, 15, 10, 20, 227, 35, 2, 231, 226, 35, 15, 10, 20, 227, 35, 2, 223, - 111, 35, 15, 10, 20, 227, 35, 2, 55, 35, 15, 10, 20, 227, 35, 2, 234, - 252, 35, 15, 10, 20, 227, 35, 2, 92, 175, 35, 15, 10, 20, 227, 35, 2, 62, - 35, 15, 10, 20, 226, 237, 2, 231, 226, 35, 15, 10, 20, 226, 237, 2, 223, - 111, 35, 15, 10, 20, 226, 237, 2, 55, 35, 15, 10, 20, 226, 237, 2, 234, - 252, 35, 15, 10, 20, 226, 237, 2, 92, 175, 35, 15, 10, 20, 226, 237, 2, - 62, 35, 15, 10, 20, 247, 88, 2, 92, 175, 35, 15, 10, 20, 247, 88, 2, 62, - 35, 15, 10, 20, 232, 132, 2, 92, 175, 35, 15, 10, 20, 232, 132, 2, 62, - 35, 15, 10, 20, 239, 60, 2, 92, 35, 15, 10, 20, 239, 60, 2, 216, 35, 15, - 10, 20, 239, 60, 2, 55, 35, 15, 10, 20, 239, 60, 2, 92, 175, 35, 15, 10, - 20, 239, 60, 2, 62, 35, 15, 10, 20, 216, 2, 55, 35, 15, 10, 20, 216, 2, - 92, 175, 35, 15, 10, 20, 216, 2, 62, 35, 15, 10, 20, 55, 2, 92, 35, 15, - 10, 20, 55, 2, 55, 35, 15, 10, 20, 234, 252, 2, 231, 226, 35, 15, 10, 20, - 234, 252, 2, 223, 111, 35, 15, 10, 20, 234, 252, 2, 55, 35, 15, 10, 20, - 234, 252, 2, 234, 252, 35, 15, 10, 20, 234, 252, 2, 92, 175, 35, 15, 10, - 20, 234, 252, 2, 62, 35, 15, 10, 20, 92, 175, 2, 227, 219, 92, 35, 15, - 10, 20, 62, 2, 231, 226, 35, 15, 10, 20, 62, 2, 223, 111, 35, 15, 10, 20, - 62, 2, 55, 35, 15, 10, 20, 62, 2, 234, 252, 35, 15, 10, 20, 62, 2, 92, - 175, 35, 15, 10, 20, 62, 2, 62, 35, 15, 10, 20, 62, 2, 164, 64, 2, 123, - 59, 15, 10, 20, 62, 2, 164, 64, 2, 101, 59, 15, 10, 20, 62, 2, 164, 64, - 2, 202, 59, 15, 10, 20, 62, 2, 164, 64, 2, 55, 59, 15, 10, 20, 62, 2, - 164, 64, 2, 245, 108, 59, 15, 10, 20, 252, 224, 2, 123, 59, 15, 10, 20, - 252, 224, 2, 101, 59, 15, 10, 20, 252, 224, 2, 202, 59, 15, 10, 20, 252, - 224, 2, 55, 59, 15, 10, 20, 252, 224, 2, 245, 108, 59, 15, 10, 20, 227, - 35, 2, 123, 59, 15, 10, 20, 227, 35, 2, 101, 59, 15, 10, 20, 227, 35, 2, - 202, 59, 15, 10, 20, 227, 35, 2, 55, 59, 15, 10, 20, 227, 35, 2, 245, - 108, 59, 15, 10, 20, 226, 237, 2, 55, 59, 15, 10, 20, 123, 2, 101, 59, - 15, 10, 20, 123, 2, 55, 59, 15, 10, 20, 101, 2, 123, 59, 15, 10, 20, 101, - 2, 55, 59, 15, 10, 20, 202, 2, 123, 59, 15, 10, 20, 202, 2, 55, 59, 15, - 10, 20, 230, 202, 2, 123, 59, 15, 10, 20, 230, 202, 2, 101, 59, 15, 10, - 20, 230, 202, 2, 202, 59, 15, 10, 20, 230, 202, 2, 55, 59, 15, 10, 20, - 231, 25, 2, 101, 59, 15, 10, 20, 231, 25, 2, 202, 59, 15, 10, 20, 231, - 25, 2, 55, 59, 15, 10, 20, 250, 185, 2, 123, 59, 15, 10, 20, 250, 185, 2, - 101, 59, 15, 10, 20, 250, 185, 2, 202, 59, 15, 10, 20, 250, 185, 2, 55, - 59, 15, 10, 20, 227, 92, 2, 101, 59, 15, 10, 20, 223, 114, 2, 55, 59, 15, - 10, 20, 254, 249, 2, 123, 59, 15, 10, 20, 254, 249, 2, 55, 59, 15, 10, - 20, 246, 64, 2, 123, 59, 15, 10, 20, 246, 64, 2, 55, 59, 15, 10, 20, 247, - 88, 2, 123, 59, 15, 10, 20, 247, 88, 2, 101, 59, 15, 10, 20, 247, 88, 2, - 202, 59, 15, 10, 20, 247, 88, 2, 55, 59, 15, 10, 20, 232, 132, 2, 101, - 59, 15, 10, 20, 232, 132, 2, 55, 59, 15, 10, 20, 239, 60, 2, 123, 59, 15, - 10, 20, 239, 60, 2, 101, 59, 15, 10, 20, 239, 60, 2, 202, 59, 15, 10, 20, - 239, 60, 2, 216, 59, 15, 10, 20, 239, 60, 2, 55, 59, 15, 10, 20, 216, 2, - 123, 59, 15, 10, 20, 216, 2, 101, 59, 15, 10, 20, 216, 2, 202, 59, 15, - 10, 20, 216, 2, 55, 59, 15, 10, 20, 216, 2, 245, 108, 59, 15, 10, 20, 55, - 2, 123, 59, 15, 10, 20, 55, 2, 101, 59, 15, 10, 20, 55, 2, 202, 59, 15, - 10, 20, 55, 2, 55, 59, 15, 10, 20, 234, 252, 2, 123, 59, 15, 10, 20, 234, - 252, 2, 101, 59, 15, 10, 20, 234, 252, 2, 202, 59, 15, 10, 20, 234, 252, - 2, 55, 59, 15, 10, 20, 234, 252, 2, 245, 108, 59, 15, 10, 20, 245, 108, - 2, 123, 59, 15, 10, 20, 245, 108, 2, 55, 59, 15, 10, 20, 245, 108, 2, - 227, 219, 92, 59, 15, 10, 20, 62, 2, 123, 59, 15, 10, 20, 62, 2, 101, 59, - 15, 10, 20, 62, 2, 202, 59, 15, 10, 20, 62, 2, 55, 59, 15, 10, 20, 62, 2, - 245, 108, 59, 15, 10, 20, 62, 2, 164, 64, 2, 55, 124, 15, 10, 20, 62, 2, - 164, 64, 2, 245, 108, 124, 15, 10, 20, 252, 224, 2, 55, 124, 15, 10, 20, - 252, 224, 2, 245, 108, 124, 15, 10, 20, 227, 35, 2, 55, 124, 15, 10, 20, - 227, 35, 2, 245, 108, 124, 15, 10, 20, 226, 237, 2, 55, 124, 15, 10, 20, - 226, 237, 2, 245, 108, 124, 15, 10, 20, 230, 202, 2, 55, 124, 15, 10, 20, - 230, 202, 2, 245, 108, 124, 15, 10, 20, 229, 111, 2, 55, 124, 15, 10, 20, - 229, 111, 2, 245, 108, 124, 15, 10, 20, 239, 60, 2, 216, 124, 15, 10, 20, - 239, 60, 2, 55, 124, 15, 10, 20, 216, 2, 55, 124, 15, 10, 20, 234, 252, - 2, 55, 124, 15, 10, 20, 234, 252, 2, 245, 108, 124, 15, 10, 20, 62, 2, - 55, 124, 15, 10, 20, 62, 2, 245, 108, 124, 15, 10, 20, 229, 138, 2, 247, - 105, 124, 15, 10, 20, 229, 138, 2, 250, 157, 124, 15, 10, 20, 229, 138, - 2, 239, 24, 124, 15, 10, 20, 227, 92, 2, 92, 175, 44, 15, 10, 20, 227, - 92, 2, 62, 44, 15, 10, 20, 254, 249, 2, 92, 175, 44, 15, 10, 20, 254, - 249, 2, 62, 44, 15, 10, 20, 246, 64, 2, 92, 175, 44, 15, 10, 20, 246, 64, - 2, 62, 44, 15, 10, 20, 230, 202, 2, 92, 175, 44, 15, 10, 20, 230, 202, 2, - 62, 44, 15, 10, 20, 229, 111, 2, 92, 175, 44, 15, 10, 20, 229, 111, 2, - 62, 44, 15, 10, 20, 101, 2, 92, 175, 44, 15, 10, 20, 101, 2, 62, 44, 15, - 10, 20, 123, 2, 92, 175, 44, 15, 10, 20, 123, 2, 62, 44, 15, 10, 20, 202, - 2, 92, 175, 44, 15, 10, 20, 202, 2, 62, 44, 15, 10, 20, 231, 25, 2, 92, - 175, 44, 15, 10, 20, 231, 25, 2, 62, 44, 15, 10, 20, 250, 185, 2, 92, - 175, 44, 15, 10, 20, 250, 185, 2, 62, 44, 15, 10, 20, 229, 111, 2, 123, - 44, 15, 10, 20, 229, 111, 2, 101, 44, 15, 10, 20, 229, 111, 2, 202, 44, - 15, 10, 20, 229, 111, 2, 55, 44, 15, 10, 20, 229, 111, 2, 231, 226, 44, - 15, 10, 20, 230, 202, 2, 231, 226, 44, 15, 10, 20, 231, 25, 2, 231, 226, - 44, 15, 10, 20, 250, 185, 2, 231, 226, 44, 15, 10, 20, 227, 92, 2, 92, - 175, 35, 15, 10, 20, 227, 92, 2, 62, 35, 15, 10, 20, 254, 249, 2, 92, - 175, 35, 15, 10, 20, 254, 249, 2, 62, 35, 15, 10, 20, 246, 64, 2, 92, - 175, 35, 15, 10, 20, 246, 64, 2, 62, 35, 15, 10, 20, 230, 202, 2, 92, - 175, 35, 15, 10, 20, 230, 202, 2, 62, 35, 15, 10, 20, 229, 111, 2, 92, - 175, 35, 15, 10, 20, 229, 111, 2, 62, 35, 15, 10, 20, 101, 2, 92, 175, - 35, 15, 10, 20, 101, 2, 62, 35, 15, 10, 20, 123, 2, 92, 175, 35, 15, 10, - 20, 123, 2, 62, 35, 15, 10, 20, 202, 2, 92, 175, 35, 15, 10, 20, 202, 2, - 62, 35, 15, 10, 20, 231, 25, 2, 92, 175, 35, 15, 10, 20, 231, 25, 2, 62, - 35, 15, 10, 20, 250, 185, 2, 92, 175, 35, 15, 10, 20, 250, 185, 2, 62, - 35, 15, 10, 20, 229, 111, 2, 123, 35, 15, 10, 20, 229, 111, 2, 101, 35, - 15, 10, 20, 229, 111, 2, 202, 35, 15, 10, 20, 229, 111, 2, 55, 35, 15, - 10, 20, 229, 111, 2, 231, 226, 35, 15, 10, 20, 230, 202, 2, 231, 226, 35, - 15, 10, 20, 231, 25, 2, 231, 226, 35, 15, 10, 20, 250, 185, 2, 231, 226, - 35, 15, 10, 20, 229, 111, 2, 123, 59, 15, 10, 20, 229, 111, 2, 101, 59, - 15, 10, 20, 229, 111, 2, 202, 59, 15, 10, 20, 229, 111, 2, 55, 59, 15, - 10, 20, 230, 202, 2, 245, 108, 59, 15, 10, 20, 229, 111, 2, 245, 108, 59, - 15, 10, 20, 227, 92, 2, 55, 59, 15, 10, 20, 230, 202, 2, 123, 124, 15, - 10, 20, 230, 202, 2, 101, 124, 15, 10, 20, 230, 202, 2, 202, 124, 15, 10, - 20, 229, 111, 2, 123, 124, 15, 10, 20, 229, 111, 2, 101, 124, 15, 10, 20, - 229, 111, 2, 202, 124, 15, 10, 20, 227, 92, 2, 55, 124, 15, 10, 20, 223, - 114, 2, 55, 124, 15, 10, 20, 92, 2, 247, 103, 35, 15, 10, 20, 92, 2, 247, - 103, 44, 15, 234, 24, 42, 233, 180, 234, 24, 41, 233, 180, 10, 20, 227, - 35, 2, 123, 2, 55, 59, 15, 10, 20, 227, 35, 2, 101, 2, 123, 35, 15, 10, - 20, 227, 35, 2, 101, 2, 123, 59, 15, 10, 20, 227, 35, 2, 101, 2, 55, 59, - 15, 10, 20, 227, 35, 2, 202, 2, 55, 59, 15, 10, 20, 227, 35, 2, 55, 2, - 123, 59, 15, 10, 20, 227, 35, 2, 55, 2, 101, 59, 15, 10, 20, 227, 35, 2, - 55, 2, 202, 59, 15, 10, 20, 123, 2, 55, 2, 101, 35, 15, 10, 20, 123, 2, - 55, 2, 101, 59, 15, 10, 20, 101, 2, 55, 2, 62, 35, 15, 10, 20, 101, 2, - 55, 2, 92, 175, 35, 15, 10, 20, 230, 202, 2, 101, 2, 123, 59, 15, 10, 20, - 230, 202, 2, 123, 2, 101, 59, 15, 10, 20, 230, 202, 2, 123, 2, 92, 175, - 35, 15, 10, 20, 230, 202, 2, 55, 2, 101, 35, 15, 10, 20, 230, 202, 2, 55, - 2, 101, 59, 15, 10, 20, 230, 202, 2, 55, 2, 123, 59, 15, 10, 20, 230, - 202, 2, 55, 2, 55, 35, 15, 10, 20, 230, 202, 2, 55, 2, 55, 59, 15, 10, - 20, 231, 25, 2, 101, 2, 101, 35, 15, 10, 20, 231, 25, 2, 101, 2, 101, 59, - 15, 10, 20, 231, 25, 2, 55, 2, 55, 35, 15, 10, 20, 229, 111, 2, 101, 2, - 55, 35, 15, 10, 20, 229, 111, 2, 101, 2, 55, 59, 15, 10, 20, 229, 111, 2, - 123, 2, 62, 35, 15, 10, 20, 229, 111, 2, 55, 2, 202, 35, 15, 10, 20, 229, - 111, 2, 55, 2, 202, 59, 15, 10, 20, 229, 111, 2, 55, 2, 55, 35, 15, 10, - 20, 229, 111, 2, 55, 2, 55, 59, 15, 10, 20, 250, 185, 2, 101, 2, 92, 175, - 35, 15, 10, 20, 250, 185, 2, 202, 2, 55, 35, 15, 10, 20, 250, 185, 2, - 202, 2, 55, 59, 15, 10, 20, 227, 92, 2, 55, 2, 101, 35, 15, 10, 20, 227, - 92, 2, 55, 2, 101, 59, 15, 10, 20, 227, 92, 2, 55, 2, 55, 59, 15, 10, 20, - 227, 92, 2, 55, 2, 62, 35, 15, 10, 20, 254, 249, 2, 123, 2, 55, 35, 15, - 10, 20, 254, 249, 2, 55, 2, 55, 35, 15, 10, 20, 254, 249, 2, 55, 2, 55, - 59, 15, 10, 20, 254, 249, 2, 55, 2, 92, 175, 35, 15, 10, 20, 246, 64, 2, - 55, 2, 55, 35, 15, 10, 20, 246, 64, 2, 55, 2, 62, 35, 15, 10, 20, 246, - 64, 2, 55, 2, 92, 175, 35, 15, 10, 20, 247, 88, 2, 202, 2, 55, 35, 15, - 10, 20, 247, 88, 2, 202, 2, 55, 59, 15, 10, 20, 232, 132, 2, 55, 2, 101, - 35, 15, 10, 20, 232, 132, 2, 55, 2, 55, 35, 15, 10, 20, 216, 2, 101, 2, - 55, 35, 15, 10, 20, 216, 2, 101, 2, 62, 35, 15, 10, 20, 216, 2, 101, 2, - 92, 175, 35, 15, 10, 20, 216, 2, 123, 2, 123, 59, 15, 10, 20, 216, 2, - 123, 2, 123, 35, 15, 10, 20, 216, 2, 202, 2, 55, 35, 15, 10, 20, 216, 2, - 202, 2, 55, 59, 15, 10, 20, 216, 2, 55, 2, 101, 35, 15, 10, 20, 216, 2, - 55, 2, 101, 59, 15, 10, 20, 55, 2, 101, 2, 123, 59, 15, 10, 20, 55, 2, - 101, 2, 55, 59, 15, 10, 20, 55, 2, 101, 2, 62, 35, 15, 10, 20, 55, 2, - 123, 2, 101, 59, 15, 10, 20, 55, 2, 123, 2, 55, 59, 15, 10, 20, 55, 2, - 202, 2, 123, 59, 15, 10, 20, 55, 2, 202, 2, 55, 59, 15, 10, 20, 55, 2, - 123, 2, 202, 59, 15, 10, 20, 245, 108, 2, 55, 2, 123, 59, 15, 10, 20, - 245, 108, 2, 55, 2, 55, 59, 15, 10, 20, 234, 252, 2, 101, 2, 55, 59, 15, - 10, 20, 234, 252, 2, 101, 2, 92, 175, 35, 15, 10, 20, 234, 252, 2, 123, - 2, 55, 35, 15, 10, 20, 234, 252, 2, 123, 2, 55, 59, 15, 10, 20, 234, 252, - 2, 123, 2, 92, 175, 35, 15, 10, 20, 234, 252, 2, 55, 2, 62, 35, 15, 10, - 20, 234, 252, 2, 55, 2, 92, 175, 35, 15, 10, 20, 62, 2, 55, 2, 55, 35, - 15, 10, 20, 62, 2, 55, 2, 55, 59, 15, 10, 20, 252, 224, 2, 202, 2, 62, - 35, 15, 10, 20, 227, 35, 2, 123, 2, 62, 35, 15, 10, 20, 227, 35, 2, 123, - 2, 92, 175, 35, 15, 10, 20, 227, 35, 2, 202, 2, 62, 35, 15, 10, 20, 227, - 35, 2, 202, 2, 92, 175, 35, 15, 10, 20, 227, 35, 2, 55, 2, 62, 35, 15, - 10, 20, 227, 35, 2, 55, 2, 92, 175, 35, 15, 10, 20, 123, 2, 55, 2, 62, - 35, 15, 10, 20, 123, 2, 101, 2, 92, 175, 35, 15, 10, 20, 123, 2, 55, 2, - 92, 175, 35, 15, 10, 20, 230, 202, 2, 202, 2, 92, 175, 35, 15, 10, 20, - 231, 25, 2, 101, 2, 62, 35, 15, 10, 20, 229, 111, 2, 101, 2, 62, 35, 15, - 10, 20, 250, 185, 2, 101, 2, 62, 35, 15, 10, 20, 216, 2, 123, 2, 62, 35, - 15, 10, 20, 216, 2, 55, 2, 62, 35, 15, 10, 20, 62, 2, 101, 2, 62, 35, 15, - 10, 20, 62, 2, 123, 2, 62, 35, 15, 10, 20, 62, 2, 55, 2, 62, 35, 15, 10, - 20, 55, 2, 55, 2, 62, 35, 15, 10, 20, 232, 132, 2, 55, 2, 62, 35, 15, 10, - 20, 234, 252, 2, 101, 2, 62, 35, 15, 10, 20, 232, 132, 2, 55, 2, 101, 59, - 15, 10, 20, 216, 2, 101, 2, 55, 59, 15, 10, 20, 254, 249, 2, 55, 2, 62, - 35, 15, 10, 20, 239, 60, 2, 55, 2, 62, 35, 15, 10, 20, 234, 252, 2, 123, - 2, 101, 59, 15, 10, 20, 55, 2, 202, 2, 62, 35, 15, 10, 20, 216, 2, 123, - 2, 55, 59, 15, 10, 20, 239, 60, 2, 55, 2, 55, 35, 15, 10, 20, 216, 2, - 123, 2, 55, 35, 15, 10, 20, 234, 252, 2, 123, 2, 101, 35, 15, 10, 20, - 123, 2, 101, 2, 62, 35, 15, 10, 20, 101, 2, 123, 2, 62, 35, 15, 10, 20, - 55, 2, 123, 2, 62, 35, 15, 10, 20, 247, 88, 2, 55, 2, 62, 35, 15, 10, 20, - 252, 224, 2, 101, 2, 62, 35, 15, 10, 20, 239, 60, 2, 55, 2, 55, 59, 15, - 10, 20, 254, 249, 2, 123, 2, 55, 59, 15, 10, 20, 231, 25, 2, 55, 2, 55, - 59, 15, 10, 20, 230, 202, 2, 202, 2, 62, 35, 15, 10, 20, 234, 252, 2, - 123, 2, 62, 35, 15, 10, 20, 231, 9, 225, 85, 254, 87, 238, 134, 228, 39, - 5, 44, 15, 10, 20, 232, 128, 225, 85, 254, 87, 238, 134, 228, 39, 5, 44, - 15, 10, 20, 254, 215, 44, 15, 10, 20, 254, 237, 44, 15, 10, 20, 236, 97, - 44, 15, 10, 20, 231, 10, 44, 15, 10, 20, 231, 254, 44, 15, 10, 20, 254, - 229, 44, 15, 10, 20, 224, 160, 44, 15, 10, 20, 231, 9, 44, 15, 10, 20, - 231, 8, 254, 229, 224, 159, 10, 20, 239, 176, 231, 179, 53, 10, 20, 252, - 158, 254, 132, 254, 133, 38, 230, 192, 38, 230, 81, 38, 230, 13, 38, 230, - 2, 38, 229, 247, 38, 229, 236, 38, 229, 225, 38, 229, 214, 38, 229, 203, - 38, 230, 191, 38, 230, 180, 38, 230, 169, 38, 230, 158, 38, 230, 147, 38, - 230, 136, 38, 230, 125, 232, 208, 211, 32, 61, 251, 54, 232, 208, 211, - 32, 61, 90, 251, 54, 232, 208, 211, 32, 61, 90, 246, 218, 228, 38, 232, - 208, 211, 32, 61, 251, 61, 232, 208, 211, 32, 61, 229, 186, 232, 208, - 211, 32, 61, 247, 149, 76, 232, 208, 211, 32, 61, 232, 69, 76, 232, 208, - 211, 32, 61, 42, 63, 237, 217, 104, 232, 208, 211, 32, 61, 41, 63, 237, - 217, 252, 114, 232, 208, 211, 32, 61, 169, 247, 249, 36, 20, 42, 245, - 151, 36, 20, 41, 245, 151, 36, 47, 226, 159, 42, 245, 151, 36, 47, 226, - 159, 41, 245, 151, 36, 237, 64, 42, 245, 151, 36, 237, 64, 41, 245, 151, - 36, 251, 37, 237, 63, 232, 208, 211, 32, 61, 135, 56, 237, 242, 232, 208, - 211, 32, 61, 247, 248, 250, 130, 232, 208, 211, 32, 61, 247, 240, 250, - 130, 232, 208, 211, 32, 61, 184, 237, 170, 232, 208, 211, 32, 61, 224, - 146, 184, 237, 170, 232, 208, 211, 32, 61, 42, 233, 180, 232, 208, 211, - 32, 61, 41, 233, 180, 232, 208, 211, 32, 61, 42, 250, 223, 104, 232, 208, - 211, 32, 61, 41, 250, 223, 104, 232, 208, 211, 32, 61, 42, 226, 100, 229, - 104, 104, 232, 208, 211, 32, 61, 41, 226, 100, 229, 104, 104, 232, 208, - 211, 32, 61, 42, 86, 237, 217, 104, 232, 208, 211, 32, 61, 41, 86, 237, - 217, 104, 232, 208, 211, 32, 61, 42, 47, 254, 182, 104, 232, 208, 211, - 32, 61, 41, 47, 254, 182, 104, 232, 208, 211, 32, 61, 42, 254, 182, 104, - 232, 208, 211, 32, 61, 41, 254, 182, 104, 232, 208, 211, 32, 61, 42, 251, - 11, 104, 232, 208, 211, 32, 61, 41, 251, 11, 104, 232, 208, 211, 32, 61, - 42, 63, 251, 11, 104, 232, 208, 211, 32, 61, 41, 63, 251, 11, 104, 229, - 168, 249, 140, 63, 229, 168, 249, 140, 232, 208, 211, 32, 61, 42, 37, - 104, 232, 208, 211, 32, 61, 41, 37, 104, 250, 129, 234, 1, 251, 216, 234, - 1, 224, 146, 234, 1, 47, 224, 146, 234, 1, 250, 129, 184, 237, 170, 251, - 216, 184, 237, 170, 224, 146, 184, 237, 170, 3, 251, 54, 3, 90, 251, 54, - 3, 246, 218, 228, 38, 3, 229, 186, 3, 251, 61, 3, 232, 69, 76, 3, 247, - 149, 76, 3, 247, 248, 250, 130, 3, 42, 233, 180, 3, 41, 233, 180, 3, 42, - 250, 223, 104, 3, 41, 250, 223, 104, 3, 42, 226, 100, 229, 104, 104, 3, - 41, 226, 100, 229, 104, 104, 3, 65, 53, 3, 254, 193, 3, 254, 69, 3, 79, - 53, 3, 244, 94, 3, 237, 213, 53, 3, 245, 231, 53, 3, 247, 204, 53, 3, - 231, 193, 228, 161, 3, 249, 150, 53, 3, 233, 123, 53, 3, 251, 53, 254, - 62, 10, 247, 103, 44, 15, 10, 227, 64, 2, 247, 103, 46, 10, 250, 155, 44, - 15, 10, 227, 90, 246, 234, 10, 239, 22, 44, 15, 10, 247, 105, 44, 15, 10, - 247, 105, 124, 15, 10, 250, 157, 44, 15, 10, 250, 157, 124, 15, 10, 239, - 24, 44, 15, 10, 239, 24, 124, 15, 10, 229, 138, 44, 15, 10, 229, 138, - 124, 15, 10, 227, 235, 44, 15, 10, 227, 235, 124, 15, 10, 1, 164, 44, 15, - 10, 1, 92, 2, 237, 59, 64, 44, 15, 10, 1, 92, 2, 237, 59, 64, 35, 15, 10, - 1, 92, 2, 164, 64, 44, 15, 10, 1, 92, 2, 164, 64, 35, 15, 10, 1, 224, - 145, 2, 164, 64, 44, 15, 10, 1, 224, 145, 2, 164, 64, 35, 15, 10, 1, 92, - 2, 164, 252, 214, 44, 15, 10, 1, 92, 2, 164, 252, 214, 35, 15, 10, 1, 62, - 2, 164, 64, 44, 15, 10, 1, 62, 2, 164, 64, 35, 15, 10, 1, 62, 2, 164, 64, - 59, 15, 10, 1, 62, 2, 164, 64, 124, 15, 10, 1, 92, 44, 15, 10, 1, 92, 35, - 15, 10, 1, 252, 224, 44, 15, 10, 1, 252, 224, 35, 15, 10, 1, 252, 224, - 59, 15, 10, 1, 252, 224, 124, 15, 10, 1, 227, 35, 237, 23, 44, 15, 10, 1, - 227, 35, 237, 23, 35, 15, 10, 1, 227, 35, 44, 15, 10, 1, 227, 35, 35, 15, - 10, 1, 227, 35, 59, 15, 10, 1, 227, 35, 124, 15, 10, 1, 226, 237, 44, 15, - 10, 1, 226, 237, 35, 15, 10, 1, 226, 237, 59, 15, 10, 1, 226, 237, 124, - 15, 10, 1, 123, 44, 15, 10, 1, 123, 35, 15, 10, 1, 123, 59, 15, 10, 1, - 123, 124, 15, 10, 1, 101, 44, 15, 10, 1, 101, 35, 15, 10, 1, 101, 59, 15, - 10, 1, 101, 124, 15, 10, 1, 202, 44, 15, 10, 1, 202, 35, 15, 10, 1, 202, - 59, 15, 10, 1, 202, 124, 15, 10, 1, 250, 166, 44, 15, 10, 1, 250, 166, - 35, 15, 10, 1, 226, 246, 44, 15, 10, 1, 226, 246, 35, 15, 10, 1, 231, - 226, 44, 15, 10, 1, 231, 226, 35, 15, 10, 1, 223, 111, 44, 15, 10, 1, - 223, 111, 35, 15, 10, 1, 230, 202, 44, 15, 10, 1, 230, 202, 35, 15, 10, - 1, 230, 202, 59, 15, 10, 1, 230, 202, 124, 15, 10, 1, 229, 111, 44, 15, - 10, 1, 229, 111, 35, 15, 10, 1, 229, 111, 59, 15, 10, 1, 229, 111, 124, - 15, 10, 1, 231, 25, 44, 15, 10, 1, 231, 25, 35, 15, 10, 1, 231, 25, 59, - 15, 10, 1, 231, 25, 124, 15, 10, 1, 250, 185, 44, 15, 10, 1, 250, 185, - 35, 15, 10, 1, 250, 185, 59, 15, 10, 1, 250, 185, 124, 15, 10, 1, 227, - 92, 44, 15, 10, 1, 227, 92, 35, 15, 10, 1, 227, 92, 59, 15, 10, 1, 227, - 92, 124, 15, 10, 1, 223, 114, 44, 15, 10, 1, 223, 114, 35, 15, 10, 1, - 223, 114, 59, 15, 10, 1, 223, 114, 124, 15, 10, 1, 254, 249, 44, 15, 10, - 1, 254, 249, 35, 15, 10, 1, 254, 249, 59, 15, 10, 1, 254, 249, 124, 15, - 10, 1, 246, 64, 44, 15, 10, 1, 246, 64, 35, 15, 10, 1, 246, 64, 59, 15, - 10, 1, 246, 64, 124, 15, 10, 1, 247, 88, 44, 15, 10, 1, 247, 88, 35, 15, - 10, 1, 247, 88, 59, 15, 10, 1, 247, 88, 124, 15, 10, 1, 232, 132, 44, 15, - 10, 1, 232, 132, 35, 15, 10, 1, 232, 132, 59, 15, 10, 1, 232, 132, 124, - 15, 10, 1, 239, 60, 44, 15, 10, 1, 239, 60, 35, 15, 10, 1, 239, 60, 59, - 15, 10, 1, 239, 60, 124, 15, 10, 1, 216, 44, 15, 10, 1, 216, 35, 15, 10, - 1, 216, 59, 15, 10, 1, 216, 124, 15, 10, 1, 55, 44, 15, 10, 1, 55, 35, - 15, 10, 1, 55, 59, 15, 10, 1, 55, 124, 15, 10, 1, 234, 252, 44, 15, 10, - 1, 234, 252, 35, 15, 10, 1, 234, 252, 59, 15, 10, 1, 234, 252, 124, 15, - 10, 1, 245, 108, 44, 15, 10, 1, 245, 108, 35, 15, 10, 1, 245, 108, 59, - 15, 10, 1, 245, 108, 124, 15, 10, 1, 224, 145, 44, 15, 10, 1, 224, 145, - 35, 15, 10, 1, 92, 175, 44, 15, 10, 1, 92, 175, 35, 15, 10, 1, 62, 44, - 15, 10, 1, 62, 35, 15, 10, 1, 62, 59, 15, 10, 1, 62, 124, 15, 10, 20, - 216, 2, 92, 2, 237, 59, 64, 44, 15, 10, 20, 216, 2, 92, 2, 237, 59, 64, - 35, 15, 10, 20, 216, 2, 92, 2, 164, 64, 44, 15, 10, 20, 216, 2, 92, 2, - 164, 64, 35, 15, 10, 20, 216, 2, 92, 2, 164, 252, 214, 44, 15, 10, 20, - 216, 2, 92, 2, 164, 252, 214, 35, 15, 10, 20, 216, 2, 92, 44, 15, 10, 20, - 216, 2, 92, 35, 15, 223, 90, 224, 115, 235, 5, 228, 145, 100, 247, 149, - 76, 100, 232, 57, 76, 100, 65, 53, 100, 249, 150, 53, 100, 233, 123, 53, - 100, 254, 193, 100, 254, 144, 100, 42, 233, 180, 100, 41, 233, 180, 100, - 254, 69, 100, 79, 53, 100, 251, 54, 100, 244, 94, 100, 246, 218, 228, 38, - 100, 228, 161, 100, 21, 223, 89, 100, 21, 118, 100, 21, 113, 100, 21, - 166, 100, 21, 158, 100, 21, 173, 100, 21, 183, 100, 21, 194, 100, 21, - 187, 100, 21, 192, 100, 251, 61, 100, 229, 186, 100, 237, 213, 53, 100, - 247, 204, 53, 100, 245, 231, 53, 100, 232, 69, 76, 100, 251, 53, 254, 62, - 100, 7, 6, 1, 57, 100, 7, 6, 1, 254, 27, 100, 7, 6, 1, 252, 44, 100, 7, - 6, 1, 222, 222, 100, 7, 6, 1, 72, 100, 7, 6, 1, 247, 130, 100, 7, 6, 1, - 214, 100, 7, 6, 1, 212, 100, 7, 6, 1, 74, 100, 7, 6, 1, 239, 182, 100, 7, - 6, 1, 239, 76, 100, 7, 6, 1, 149, 100, 7, 6, 1, 185, 100, 7, 6, 1, 199, - 100, 7, 6, 1, 73, 100, 7, 6, 1, 233, 244, 100, 7, 6, 1, 232, 139, 100, 7, - 6, 1, 146, 100, 7, 6, 1, 193, 100, 7, 6, 1, 227, 109, 100, 7, 6, 1, 66, - 100, 7, 6, 1, 196, 100, 7, 6, 1, 224, 174, 100, 7, 6, 1, 224, 73, 100, 7, - 6, 1, 224, 25, 100, 7, 6, 1, 223, 119, 100, 42, 37, 104, 100, 231, 193, - 228, 161, 100, 41, 37, 104, 100, 251, 102, 255, 41, 100, 184, 237, 170, - 100, 245, 237, 255, 41, 100, 7, 3, 1, 57, 100, 7, 3, 1, 254, 27, 100, 7, - 3, 1, 252, 44, 100, 7, 3, 1, 222, 222, 100, 7, 3, 1, 72, 100, 7, 3, 1, - 247, 130, 100, 7, 3, 1, 214, 100, 7, 3, 1, 212, 100, 7, 3, 1, 74, 100, 7, - 3, 1, 239, 182, 100, 7, 3, 1, 239, 76, 100, 7, 3, 1, 149, 100, 7, 3, 1, - 185, 100, 7, 3, 1, 199, 100, 7, 3, 1, 73, 100, 7, 3, 1, 233, 244, 100, 7, - 3, 1, 232, 139, 100, 7, 3, 1, 146, 100, 7, 3, 1, 193, 100, 7, 3, 1, 227, - 109, 100, 7, 3, 1, 66, 100, 7, 3, 1, 196, 100, 7, 3, 1, 224, 174, 100, 7, - 3, 1, 224, 73, 100, 7, 3, 1, 224, 25, 100, 7, 3, 1, 223, 119, 100, 42, - 250, 223, 104, 100, 61, 237, 170, 100, 41, 250, 223, 104, 100, 205, 100, - 42, 63, 233, 180, 100, 41, 63, 233, 180, 83, 90, 246, 218, 228, 38, 83, - 42, 251, 11, 104, 83, 41, 251, 11, 104, 83, 90, 251, 54, 83, 48, 236, - 154, 249, 140, 83, 48, 1, 224, 105, 83, 48, 1, 3, 57, 83, 48, 1, 3, 74, - 83, 48, 1, 3, 66, 83, 48, 1, 3, 72, 83, 48, 1, 3, 73, 83, 48, 1, 3, 191, - 83, 48, 1, 3, 223, 158, 83, 48, 1, 3, 223, 183, 83, 48, 1, 3, 225, 250, - 83, 239, 19, 232, 194, 228, 155, 76, 83, 48, 1, 57, 83, 48, 1, 74, 83, - 48, 1, 66, 83, 48, 1, 72, 83, 48, 1, 73, 83, 48, 1, 177, 83, 48, 1, 238, - 199, 83, 48, 1, 238, 107, 83, 48, 1, 239, 3, 83, 48, 1, 238, 150, 83, 48, - 1, 231, 31, 83, 48, 1, 229, 15, 83, 48, 1, 228, 6, 83, 48, 1, 230, 213, - 83, 48, 1, 228, 169, 83, 48, 1, 227, 107, 83, 48, 1, 226, 175, 83, 48, 1, - 225, 250, 83, 48, 1, 227, 44, 83, 48, 1, 96, 83, 48, 1, 236, 1, 83, 48, - 1, 235, 89, 83, 48, 1, 234, 206, 83, 48, 1, 235, 162, 83, 48, 1, 235, 6, - 83, 48, 1, 154, 83, 48, 1, 245, 75, 83, 48, 1, 244, 145, 83, 48, 1, 245, - 121, 83, 48, 1, 244, 227, 83, 48, 1, 198, 83, 48, 1, 236, 157, 83, 48, 1, - 236, 66, 83, 48, 1, 236, 235, 83, 48, 1, 236, 103, 83, 48, 1, 191, 83, - 48, 1, 223, 158, 83, 48, 1, 223, 183, 83, 48, 1, 208, 83, 48, 1, 231, - 180, 83, 48, 1, 231, 70, 83, 48, 1, 231, 244, 83, 48, 1, 231, 122, 83, - 48, 1, 224, 173, 83, 48, 1, 199, 83, 48, 224, 204, 228, 155, 76, 83, 48, - 229, 191, 228, 155, 76, 83, 26, 247, 52, 83, 26, 1, 238, 173, 83, 26, 1, - 228, 104, 83, 26, 1, 238, 171, 83, 26, 1, 235, 82, 83, 26, 1, 235, 81, - 83, 26, 1, 235, 80, 83, 26, 1, 226, 163, 83, 26, 1, 228, 99, 83, 26, 1, - 231, 174, 83, 26, 1, 231, 170, 83, 26, 1, 231, 168, 83, 26, 1, 231, 162, - 83, 26, 1, 231, 159, 83, 26, 1, 231, 157, 83, 26, 1, 231, 163, 83, 26, 1, - 231, 173, 83, 26, 1, 236, 148, 83, 26, 1, 233, 60, 83, 26, 1, 228, 102, - 83, 26, 1, 233, 52, 83, 26, 1, 228, 236, 83, 26, 1, 228, 100, 83, 26, 1, - 240, 68, 83, 26, 1, 251, 113, 83, 26, 1, 228, 107, 83, 26, 1, 251, 167, - 83, 26, 1, 238, 210, 83, 26, 1, 226, 218, 83, 26, 1, 233, 85, 83, 26, 1, - 245, 69, 83, 26, 1, 57, 83, 26, 1, 255, 19, 83, 26, 1, 191, 83, 26, 1, - 224, 10, 83, 26, 1, 247, 217, 83, 26, 1, 72, 83, 26, 1, 223, 221, 83, 26, - 1, 223, 228, 83, 26, 1, 73, 83, 26, 1, 224, 173, 83, 26, 1, 224, 170, 83, - 26, 1, 234, 88, 83, 26, 1, 223, 183, 83, 26, 1, 66, 83, 26, 1, 224, 133, - 83, 26, 1, 224, 141, 83, 26, 1, 224, 118, 83, 26, 1, 223, 158, 83, 26, 1, - 247, 165, 83, 26, 1, 223, 202, 83, 26, 1, 74, 100, 251, 220, 53, 100, - 232, 234, 53, 100, 190, 53, 100, 237, 63, 100, 252, 99, 125, 100, 223, - 222, 53, 100, 224, 100, 53, 83, 246, 248, 157, 225, 30, 83, 117, 58, 83, - 225, 106, 58, 83, 81, 58, 83, 248, 125, 58, 83, 86, 228, 120, 83, 63, - 251, 106, 239, 233, 254, 175, 254, 188, 239, 233, 254, 175, 229, 173, - 239, 233, 254, 175, 227, 16, 234, 98, 231, 209, 251, 191, 231, 209, 251, - 191, 50, 45, 4, 254, 19, 57, 50, 45, 4, 253, 246, 72, 50, 45, 4, 253, - 255, 74, 50, 45, 4, 253, 223, 73, 50, 45, 4, 254, 17, 66, 50, 45, 4, 254, - 26, 250, 189, 50, 45, 4, 253, 239, 250, 77, 50, 45, 4, 254, 20, 250, 4, - 50, 45, 4, 254, 13, 249, 161, 50, 45, 4, 253, 233, 248, 107, 50, 45, 4, - 253, 227, 239, 179, 50, 45, 4, 253, 238, 239, 170, 50, 45, 4, 253, 248, - 239, 117, 50, 45, 4, 253, 219, 239, 101, 50, 45, 4, 253, 207, 177, 50, - 45, 4, 253, 240, 239, 3, 50, 45, 4, 253, 217, 238, 199, 50, 45, 4, 253, - 214, 238, 150, 50, 45, 4, 253, 203, 238, 107, 50, 45, 4, 253, 204, 198, - 50, 45, 4, 254, 14, 236, 235, 50, 45, 4, 253, 211, 236, 157, 50, 45, 4, - 254, 12, 236, 103, 50, 45, 4, 254, 4, 236, 66, 50, 45, 4, 254, 21, 236, - 1, 50, 45, 4, 254, 3, 235, 162, 50, 45, 4, 253, 253, 235, 89, 50, 45, 4, - 253, 232, 235, 6, 50, 45, 4, 253, 229, 234, 206, 50, 45, 4, 254, 24, 213, - 50, 45, 4, 253, 212, 233, 151, 50, 45, 4, 253, 245, 233, 69, 50, 45, 4, - 254, 16, 233, 4, 50, 45, 4, 253, 234, 232, 173, 50, 45, 4, 254, 11, 232, - 138, 50, 45, 4, 253, 206, 232, 119, 50, 45, 4, 254, 6, 232, 104, 50, 45, - 4, 253, 251, 232, 95, 50, 45, 4, 253, 224, 208, 50, 45, 4, 254, 0, 231, - 244, 50, 45, 4, 253, 231, 231, 180, 50, 45, 4, 254, 25, 231, 122, 50, 45, - 4, 254, 1, 231, 70, 50, 45, 4, 253, 252, 231, 31, 50, 45, 4, 254, 18, - 230, 213, 50, 45, 4, 253, 243, 229, 15, 50, 45, 4, 254, 15, 228, 169, 50, - 45, 4, 253, 226, 228, 6, 50, 45, 4, 253, 225, 227, 107, 50, 45, 4, 254, - 23, 227, 44, 50, 45, 4, 253, 247, 226, 175, 50, 45, 4, 254, 22, 96, 50, - 45, 4, 253, 215, 225, 250, 50, 45, 4, 253, 230, 224, 173, 50, 45, 4, 253, - 209, 224, 141, 50, 45, 4, 253, 244, 224, 118, 50, 45, 4, 253, 242, 224, - 105, 50, 45, 4, 254, 10, 223, 117, 50, 45, 4, 253, 210, 223, 97, 50, 45, - 4, 254, 7, 223, 27, 50, 45, 4, 254, 2, 255, 65, 50, 45, 4, 253, 241, 255, - 64, 50, 45, 4, 253, 200, 254, 53, 50, 45, 4, 253, 213, 248, 78, 50, 45, - 4, 253, 196, 248, 77, 50, 45, 4, 253, 236, 234, 177, 50, 45, 4, 253, 254, - 232, 172, 50, 45, 4, 253, 222, 232, 175, 50, 45, 4, 253, 208, 232, 24, - 50, 45, 4, 253, 250, 232, 23, 50, 45, 4, 253, 216, 231, 121, 50, 45, 4, - 253, 218, 227, 105, 50, 45, 4, 253, 198, 225, 220, 50, 45, 4, 253, 195, - 113, 50, 45, 14, 254, 9, 50, 45, 14, 254, 8, 50, 45, 14, 254, 5, 50, 45, - 14, 253, 249, 50, 45, 14, 253, 237, 50, 45, 14, 253, 235, 50, 45, 14, - 253, 228, 50, 45, 14, 253, 221, 50, 45, 14, 253, 220, 50, 45, 14, 253, - 205, 50, 45, 14, 253, 202, 50, 45, 14, 253, 201, 50, 45, 14, 253, 199, - 50, 45, 14, 253, 197, 50, 45, 89, 253, 194, 237, 35, 50, 45, 89, 253, - 193, 224, 101, 50, 45, 89, 253, 192, 250, 65, 50, 45, 89, 253, 191, 247, - 201, 50, 45, 89, 253, 190, 237, 18, 50, 45, 89, 253, 189, 228, 64, 50, - 45, 89, 253, 188, 247, 154, 50, 45, 89, 253, 187, 232, 6, 50, 45, 89, - 253, 186, 229, 113, 50, 45, 89, 253, 185, 245, 120, 50, 45, 89, 253, 184, - 228, 150, 50, 45, 89, 253, 183, 252, 136, 50, 45, 89, 253, 182, 250, 253, - 50, 45, 89, 253, 181, 252, 85, 50, 45, 89, 253, 180, 224, 126, 50, 45, - 89, 253, 179, 253, 33, 50, 45, 89, 253, 178, 234, 70, 50, 45, 89, 253, - 177, 228, 136, 50, 45, 89, 253, 176, 250, 198, 50, 45, 236, 92, 253, 175, - 239, 37, 50, 45, 236, 92, 253, 174, 239, 44, 50, 45, 89, 253, 173, 234, - 79, 50, 45, 89, 253, 172, 224, 109, 50, 45, 89, 253, 171, 50, 45, 236, - 92, 253, 170, 254, 116, 50, 45, 236, 92, 253, 169, 236, 208, 50, 45, 89, - 253, 168, 252, 98, 50, 45, 89, 253, 167, 246, 6, 50, 45, 89, 253, 166, - 50, 45, 89, 253, 165, 224, 95, 50, 45, 89, 253, 164, 50, 45, 89, 253, - 163, 50, 45, 89, 253, 162, 244, 160, 50, 45, 89, 253, 161, 50, 45, 89, - 253, 160, 50, 45, 89, 253, 159, 50, 45, 236, 92, 253, 157, 225, 231, 50, - 45, 89, 253, 156, 50, 45, 89, 253, 155, 50, 45, 89, 253, 154, 251, 77, - 50, 45, 89, 253, 153, 50, 45, 89, 253, 152, 50, 45, 89, 253, 151, 246, - 158, 50, 45, 89, 253, 150, 254, 104, 50, 45, 89, 253, 149, 50, 45, 89, - 253, 148, 50, 45, 89, 253, 147, 50, 45, 89, 253, 146, 50, 45, 89, 253, - 145, 50, 45, 89, 253, 144, 50, 45, 89, 253, 143, 50, 45, 89, 253, 142, - 50, 45, 89, 253, 141, 50, 45, 89, 253, 140, 236, 87, 50, 45, 89, 253, - 139, 50, 45, 89, 253, 138, 226, 86, 50, 45, 89, 253, 137, 50, 45, 89, - 253, 136, 50, 45, 89, 253, 135, 50, 45, 89, 253, 134, 50, 45, 89, 253, - 133, 50, 45, 89, 253, 132, 50, 45, 89, 253, 131, 50, 45, 89, 253, 130, - 50, 45, 89, 253, 129, 50, 45, 89, 253, 128, 50, 45, 89, 253, 127, 50, 45, - 89, 253, 126, 245, 102, 50, 45, 89, 253, 105, 247, 0, 50, 45, 89, 253, - 102, 253, 19, 50, 45, 89, 253, 97, 228, 140, 50, 45, 89, 253, 96, 58, 50, - 45, 89, 253, 95, 50, 45, 89, 253, 94, 227, 189, 50, 45, 89, 253, 93, 50, - 45, 89, 253, 92, 50, 45, 89, 253, 91, 224, 122, 251, 188, 50, 45, 89, - 253, 90, 251, 188, 50, 45, 89, 253, 89, 251, 189, 246, 232, 50, 45, 89, - 253, 88, 224, 124, 50, 45, 89, 253, 87, 50, 45, 89, 253, 86, 50, 45, 236, - 92, 253, 85, 249, 202, 50, 45, 89, 253, 84, 50, 45, 89, 253, 83, 50, 45, - 89, 253, 81, 50, 45, 89, 253, 80, 50, 45, 89, 253, 79, 50, 45, 89, 253, - 78, 250, 133, 50, 45, 89, 253, 77, 50, 45, 89, 253, 76, 50, 45, 89, 253, - 75, 50, 45, 89, 253, 74, 50, 45, 89, 253, 73, 50, 45, 89, 224, 233, 253, - 158, 50, 45, 89, 224, 233, 253, 125, 50, 45, 89, 224, 233, 253, 124, 50, - 45, 89, 224, 233, 253, 123, 50, 45, 89, 224, 233, 253, 122, 50, 45, 89, - 224, 233, 253, 121, 50, 45, 89, 224, 233, 253, 120, 50, 45, 89, 224, 233, - 253, 119, 50, 45, 89, 224, 233, 253, 118, 50, 45, 89, 224, 233, 253, 117, - 50, 45, 89, 224, 233, 253, 116, 50, 45, 89, 224, 233, 253, 115, 50, 45, - 89, 224, 233, 253, 114, 50, 45, 89, 224, 233, 253, 113, 50, 45, 89, 224, - 233, 253, 112, 50, 45, 89, 224, 233, 253, 111, 50, 45, 89, 224, 233, 253, - 110, 50, 45, 89, 224, 233, 253, 109, 50, 45, 89, 224, 233, 253, 108, 50, - 45, 89, 224, 233, 253, 107, 50, 45, 89, 224, 233, 253, 106, 50, 45, 89, - 224, 233, 253, 104, 50, 45, 89, 224, 233, 253, 103, 50, 45, 89, 224, 233, - 253, 101, 50, 45, 89, 224, 233, 253, 100, 50, 45, 89, 224, 233, 253, 99, - 50, 45, 89, 224, 233, 253, 98, 50, 45, 89, 224, 233, 253, 82, 50, 45, 89, - 224, 233, 253, 72, 210, 224, 92, 229, 174, 237, 170, 210, 224, 92, 229, - 174, 249, 140, 210, 251, 181, 76, 210, 65, 118, 210, 65, 113, 210, 65, - 166, 210, 65, 158, 210, 65, 173, 210, 65, 183, 210, 65, 194, 210, 65, - 187, 210, 65, 192, 210, 65, 227, 23, 210, 65, 225, 216, 210, 65, 226, - 207, 210, 65, 246, 245, 210, 65, 247, 63, 210, 65, 228, 206, 210, 65, - 229, 159, 210, 65, 248, 12, 210, 65, 235, 57, 210, 65, 168, 244, 135, - 210, 65, 135, 244, 135, 210, 65, 152, 244, 135, 210, 65, 246, 243, 244, - 135, 210, 65, 247, 37, 244, 135, 210, 65, 228, 217, 244, 135, 210, 65, - 229, 163, 244, 135, 210, 65, 248, 20, 244, 135, 210, 65, 235, 61, 244, - 135, 210, 65, 168, 226, 194, 210, 65, 135, 226, 194, 210, 65, 152, 226, - 194, 210, 65, 246, 243, 226, 194, 210, 65, 247, 37, 226, 194, 210, 65, - 228, 217, 226, 194, 210, 65, 229, 163, 226, 194, 210, 65, 248, 20, 226, - 194, 210, 65, 235, 61, 226, 194, 210, 65, 227, 24, 226, 194, 210, 65, - 225, 217, 226, 194, 210, 65, 226, 208, 226, 194, 210, 65, 246, 246, 226, - 194, 210, 65, 247, 64, 226, 194, 210, 65, 228, 207, 226, 194, 210, 65, - 229, 160, 226, 194, 210, 65, 248, 13, 226, 194, 210, 65, 235, 58, 226, - 194, 210, 224, 136, 253, 25, 225, 125, 210, 224, 136, 247, 45, 227, 247, - 210, 224, 136, 230, 209, 227, 247, 210, 224, 136, 226, 214, 227, 247, - 210, 224, 136, 246, 237, 227, 247, 210, 248, 110, 236, 234, 247, 45, 227, - 247, 210, 237, 160, 236, 234, 247, 45, 227, 247, 210, 236, 234, 230, 209, - 227, 247, 210, 236, 234, 226, 214, 227, 247, 19, 255, 36, 254, 55, 168, - 232, 76, 19, 255, 36, 254, 55, 168, 245, 151, 19, 255, 36, 254, 55, 168, - 248, 121, 19, 255, 36, 254, 55, 173, 19, 255, 36, 254, 55, 247, 63, 19, - 255, 36, 254, 55, 247, 37, 244, 135, 19, 255, 36, 254, 55, 247, 37, 226, - 194, 19, 255, 36, 254, 55, 247, 64, 226, 194, 19, 255, 36, 254, 55, 247, - 37, 227, 80, 19, 255, 36, 254, 55, 227, 24, 227, 80, 19, 255, 36, 254, - 55, 247, 64, 227, 80, 19, 255, 36, 254, 55, 168, 244, 136, 227, 80, 19, - 255, 36, 254, 55, 247, 37, 244, 136, 227, 80, 19, 255, 36, 254, 55, 168, - 226, 195, 227, 80, 19, 255, 36, 254, 55, 247, 37, 226, 195, 227, 80, 19, - 255, 36, 254, 55, 247, 37, 228, 55, 19, 255, 36, 254, 55, 227, 24, 228, - 55, 19, 255, 36, 254, 55, 247, 64, 228, 55, 19, 255, 36, 254, 55, 168, - 244, 136, 228, 55, 19, 255, 36, 254, 55, 247, 37, 244, 136, 228, 55, 19, - 255, 36, 254, 55, 168, 226, 195, 228, 55, 19, 255, 36, 254, 55, 227, 24, - 226, 195, 228, 55, 19, 255, 36, 254, 55, 247, 64, 226, 195, 228, 55, 19, - 255, 36, 254, 55, 227, 24, 236, 106, 19, 255, 36, 245, 96, 168, 233, 16, - 19, 255, 36, 226, 225, 118, 19, 255, 36, 245, 94, 118, 19, 255, 36, 247, - 209, 113, 19, 255, 36, 226, 225, 113, 19, 255, 36, 250, 196, 135, 248, - 120, 19, 255, 36, 247, 209, 135, 248, 120, 19, 255, 36, 226, 59, 173, 19, - 255, 36, 226, 59, 227, 23, 19, 255, 36, 226, 59, 227, 24, 254, 203, 15, - 19, 255, 36, 245, 94, 227, 23, 19, 255, 36, 236, 201, 227, 23, 19, 255, - 36, 226, 225, 227, 23, 19, 255, 36, 226, 225, 226, 207, 19, 255, 36, 226, - 59, 247, 63, 19, 255, 36, 226, 59, 247, 64, 254, 203, 15, 19, 255, 36, - 245, 94, 247, 63, 19, 255, 36, 226, 225, 247, 63, 19, 255, 36, 226, 225, - 168, 244, 135, 19, 255, 36, 226, 225, 152, 244, 135, 19, 255, 36, 247, - 209, 247, 37, 244, 135, 19, 255, 36, 226, 59, 247, 37, 244, 135, 19, 255, - 36, 226, 225, 247, 37, 244, 135, 19, 255, 36, 252, 1, 247, 37, 244, 135, - 19, 255, 36, 235, 219, 247, 37, 244, 135, 19, 255, 36, 226, 225, 168, - 226, 194, 19, 255, 36, 226, 225, 247, 37, 226, 194, 19, 255, 36, 250, 50, - 247, 37, 236, 106, 19, 255, 36, 228, 29, 247, 64, 236, 106, 19, 168, 132, - 53, 19, 168, 132, 5, 254, 203, 15, 19, 135, 226, 212, 53, 19, 152, 232, - 75, 53, 19, 223, 226, 53, 19, 227, 81, 53, 19, 248, 122, 53, 19, 234, 95, - 53, 19, 135, 234, 94, 53, 19, 152, 234, 94, 53, 19, 246, 243, 234, 94, - 53, 19, 247, 37, 234, 94, 53, 19, 236, 196, 53, 19, 238, 55, 253, 25, 53, - 19, 237, 156, 53, 19, 234, 11, 53, 19, 224, 66, 53, 19, 254, 89, 53, 19, - 254, 100, 53, 19, 245, 242, 53, 19, 226, 47, 253, 25, 53, 19, 223, 90, - 53, 231, 115, 229, 156, 53, 231, 115, 225, 135, 53, 231, 115, 229, 178, - 53, 231, 115, 229, 154, 53, 231, 115, 249, 217, 229, 154, 53, 231, 115, - 228, 251, 53, 231, 115, 250, 46, 53, 231, 115, 232, 64, 53, 231, 115, - 229, 166, 53, 231, 115, 248, 89, 53, 231, 115, 254, 87, 53, 231, 115, - 251, 215, 53, 233, 94, 249, 198, 5, 233, 145, 233, 94, 249, 198, 5, 233, - 11, 245, 118, 233, 94, 249, 198, 5, 227, 65, 245, 118, 233, 94, 249, 198, - 5, 252, 12, 233, 94, 249, 198, 5, 251, 163, 233, 94, 249, 198, 5, 224, - 101, 233, 94, 249, 198, 5, 245, 102, 233, 94, 249, 198, 5, 246, 150, 233, - 94, 249, 198, 5, 226, 174, 233, 94, 249, 198, 5, 58, 233, 94, 249, 198, - 5, 252, 121, 233, 94, 249, 198, 5, 229, 87, 233, 94, 249, 198, 5, 251, - 73, 233, 94, 249, 198, 5, 237, 34, 233, 94, 249, 198, 5, 236, 255, 233, - 94, 249, 198, 5, 230, 237, 233, 94, 249, 198, 5, 237, 190, 233, 94, 249, - 198, 5, 252, 130, 233, 94, 249, 198, 5, 252, 4, 233, 18, 233, 94, 249, - 198, 5, 249, 151, 233, 94, 249, 198, 5, 251, 58, 233, 94, 249, 198, 5, - 228, 190, 233, 94, 249, 198, 5, 251, 59, 233, 94, 249, 198, 5, 252, 229, - 233, 94, 249, 198, 5, 229, 76, 233, 94, 249, 198, 5, 244, 160, 233, 94, - 249, 198, 5, 245, 74, 233, 94, 249, 198, 5, 252, 82, 237, 229, 233, 94, - 249, 198, 5, 252, 0, 233, 94, 249, 198, 5, 232, 6, 233, 94, 249, 198, 5, - 248, 53, 233, 94, 249, 198, 5, 248, 128, 233, 94, 249, 198, 5, 225, 243, - 233, 94, 249, 198, 5, 252, 232, 233, 94, 249, 198, 5, 233, 19, 226, 86, - 233, 94, 249, 198, 5, 224, 218, 233, 94, 249, 198, 5, 233, 195, 233, 94, - 249, 198, 5, 231, 109, 233, 94, 249, 198, 5, 237, 179, 233, 94, 249, 198, - 5, 233, 254, 253, 66, 233, 94, 249, 198, 5, 247, 11, 233, 94, 249, 198, - 5, 245, 238, 233, 94, 249, 198, 5, 228, 30, 233, 94, 249, 198, 5, 3, 254, - 35, 233, 94, 249, 198, 5, 224, 146, 253, 41, 233, 94, 249, 198, 5, 36, - 234, 97, 82, 237, 79, 1, 57, 237, 79, 1, 72, 237, 79, 1, 254, 27, 237, - 79, 1, 252, 191, 237, 79, 1, 214, 237, 79, 1, 222, 222, 237, 79, 1, 74, - 237, 79, 1, 224, 174, 237, 79, 1, 223, 119, 237, 79, 1, 226, 253, 237, - 79, 1, 239, 182, 237, 79, 1, 239, 76, 237, 79, 1, 232, 139, 237, 79, 1, - 149, 237, 79, 1, 185, 237, 79, 1, 199, 237, 79, 1, 236, 107, 237, 79, 1, - 235, 19, 237, 79, 1, 66, 237, 79, 1, 233, 244, 237, 79, 1, 238, 168, 237, - 79, 1, 146, 237, 79, 1, 193, 237, 79, 1, 227, 109, 237, 79, 1, 226, 22, - 237, 79, 1, 254, 190, 237, 79, 1, 247, 239, 237, 79, 1, 212, 237, 79, 1, - 224, 73, 252, 8, 1, 57, 252, 8, 1, 233, 243, 252, 8, 1, 222, 222, 252, 8, - 1, 149, 252, 8, 1, 225, 75, 252, 8, 1, 146, 252, 8, 1, 237, 247, 252, 8, - 1, 255, 65, 252, 8, 1, 232, 139, 252, 8, 1, 254, 27, 252, 8, 1, 185, 252, - 8, 1, 73, 252, 8, 1, 250, 191, 252, 8, 1, 227, 109, 252, 8, 1, 229, 148, - 252, 8, 1, 229, 147, 252, 8, 1, 193, 252, 8, 1, 252, 43, 252, 8, 1, 66, - 252, 8, 1, 235, 19, 252, 8, 1, 224, 73, 252, 8, 1, 199, 252, 8, 1, 226, - 21, 252, 8, 1, 233, 244, 252, 8, 1, 228, 111, 252, 8, 1, 74, 252, 8, 1, - 72, 252, 8, 1, 225, 72, 252, 8, 1, 239, 76, 252, 8, 1, 239, 75, 252, 8, - 1, 235, 190, 252, 8, 1, 225, 76, 252, 8, 1, 214, 252, 8, 1, 246, 195, - 252, 8, 1, 228, 70, 252, 8, 1, 228, 69, 252, 8, 1, 235, 139, 252, 8, 1, - 240, 47, 252, 8, 1, 252, 42, 252, 8, 1, 226, 22, 252, 8, 1, 225, 74, 252, - 8, 1, 231, 100, 252, 8, 1, 236, 249, 252, 8, 1, 236, 248, 252, 8, 1, 236, - 247, 252, 8, 1, 236, 246, 252, 8, 1, 237, 246, 252, 8, 1, 248, 57, 252, - 8, 1, 225, 73, 84, 27, 1, 57, 84, 27, 1, 252, 238, 84, 27, 1, 239, 3, 84, - 27, 1, 250, 77, 84, 27, 1, 72, 84, 27, 1, 225, 42, 84, 27, 1, 223, 97, - 84, 27, 1, 245, 121, 84, 27, 1, 226, 239, 84, 27, 1, 74, 84, 27, 1, 177, - 84, 27, 1, 248, 2, 84, 27, 1, 247, 247, 84, 27, 1, 247, 239, 84, 27, 1, - 247, 183, 84, 27, 1, 73, 84, 27, 1, 233, 151, 84, 27, 1, 229, 114, 84, - 27, 1, 238, 107, 84, 27, 1, 247, 198, 84, 27, 1, 247, 188, 84, 27, 1, - 227, 44, 84, 27, 1, 66, 84, 27, 1, 248, 5, 84, 27, 1, 233, 90, 84, 27, 1, - 238, 217, 84, 27, 1, 248, 29, 84, 27, 1, 247, 190, 84, 27, 1, 251, 182, - 84, 27, 1, 240, 47, 84, 27, 1, 225, 76, 84, 27, 207, 118, 84, 27, 207, - 173, 84, 27, 207, 227, 23, 84, 27, 207, 247, 63, 245, 250, 1, 255, 0, - 245, 250, 1, 253, 53, 245, 250, 1, 246, 43, 245, 250, 1, 250, 173, 245, - 250, 1, 254, 252, 245, 250, 1, 232, 129, 245, 250, 1, 239, 191, 245, 250, - 1, 245, 161, 245, 250, 1, 226, 203, 245, 250, 1, 248, 11, 245, 250, 1, - 238, 85, 245, 250, 1, 238, 27, 245, 250, 1, 237, 31, 245, 250, 1, 235, - 221, 245, 250, 1, 239, 164, 245, 250, 1, 225, 90, 245, 250, 1, 233, 231, - 245, 250, 1, 235, 57, 245, 250, 1, 232, 12, 245, 250, 1, 230, 238, 245, - 250, 1, 227, 31, 245, 250, 1, 224, 108, 245, 250, 1, 247, 115, 245, 250, - 1, 240, 51, 245, 250, 1, 244, 126, 245, 250, 1, 234, 18, 245, 250, 1, - 235, 61, 244, 135, 225, 156, 1, 254, 209, 225, 156, 1, 252, 198, 225, - 156, 1, 246, 170, 225, 156, 1, 238, 227, 225, 156, 1, 250, 47, 225, 156, - 1, 244, 227, 225, 156, 1, 224, 105, 225, 156, 1, 223, 88, 225, 156, 1, - 244, 156, 225, 156, 1, 227, 10, 225, 156, 1, 223, 175, 225, 156, 1, 239, - 59, 225, 156, 1, 229, 78, 225, 156, 1, 238, 16, 225, 156, 1, 236, 215, - 225, 156, 1, 250, 20, 225, 156, 1, 234, 194, 225, 156, 1, 223, 19, 225, - 156, 1, 231, 1, 225, 156, 1, 254, 248, 225, 156, 1, 232, 173, 225, 156, - 1, 231, 23, 225, 156, 1, 232, 88, 225, 156, 1, 231, 255, 225, 156, 1, - 226, 242, 225, 156, 1, 246, 63, 225, 156, 1, 96, 225, 156, 1, 74, 225, - 156, 1, 66, 225, 156, 1, 228, 80, 225, 156, 224, 92, 249, 184, 84, 233, - 113, 5, 57, 84, 233, 113, 5, 74, 84, 233, 113, 5, 66, 84, 233, 113, 5, - 177, 84, 233, 113, 5, 238, 107, 84, 233, 113, 5, 246, 193, 84, 233, 113, - 5, 245, 218, 84, 233, 113, 5, 224, 72, 84, 233, 113, 5, 252, 39, 84, 233, - 113, 5, 239, 179, 84, 233, 113, 5, 239, 156, 84, 233, 113, 5, 227, 107, - 84, 233, 113, 5, 225, 250, 84, 233, 113, 5, 250, 189, 84, 233, 113, 5, - 250, 4, 84, 233, 113, 5, 248, 107, 84, 233, 113, 5, 226, 251, 84, 233, - 113, 5, 213, 84, 233, 113, 5, 253, 70, 84, 233, 113, 5, 247, 129, 84, - 233, 113, 5, 236, 1, 84, 233, 113, 5, 234, 206, 84, 233, 113, 5, 198, 84, - 233, 113, 5, 236, 157, 84, 233, 113, 5, 236, 66, 84, 233, 113, 5, 191, - 84, 233, 113, 5, 225, 64, 84, 233, 113, 5, 224, 228, 84, 233, 113, 5, - 208, 84, 233, 113, 5, 231, 70, 84, 233, 113, 5, 238, 43, 84, 233, 113, 5, - 231, 31, 84, 233, 113, 5, 223, 117, 84, 233, 113, 5, 229, 146, 84, 233, - 113, 5, 228, 110, 84, 233, 113, 5, 154, 84, 233, 113, 5, 254, 48, 84, - 233, 113, 5, 254, 47, 84, 233, 113, 5, 254, 46, 84, 233, 113, 5, 224, 49, - 84, 233, 113, 5, 250, 170, 84, 233, 113, 5, 250, 169, 84, 233, 113, 5, - 253, 57, 84, 233, 113, 5, 252, 62, 84, 233, 113, 224, 92, 249, 184, 84, - 233, 113, 65, 118, 84, 233, 113, 65, 113, 84, 233, 113, 65, 227, 23, 84, - 233, 113, 65, 225, 216, 84, 233, 113, 65, 244, 135, 143, 6, 1, 182, 74, - 143, 6, 1, 182, 72, 143, 6, 1, 182, 57, 143, 6, 1, 182, 255, 3, 143, 6, - 1, 182, 73, 143, 6, 1, 182, 234, 52, 143, 6, 1, 229, 63, 74, 143, 6, 1, - 229, 63, 72, 143, 6, 1, 229, 63, 57, 143, 6, 1, 229, 63, 255, 3, 143, 6, - 1, 229, 63, 73, 143, 6, 1, 229, 63, 234, 52, 143, 6, 1, 254, 34, 143, 6, - 1, 233, 255, 143, 6, 1, 224, 83, 143, 6, 1, 223, 225, 143, 6, 1, 212, - 143, 6, 1, 233, 144, 143, 6, 1, 252, 232, 143, 6, 1, 227, 37, 143, 6, 1, - 250, 67, 143, 6, 1, 251, 179, 143, 6, 1, 239, 169, 143, 6, 1, 239, 10, - 143, 6, 1, 246, 148, 143, 6, 1, 248, 29, 143, 6, 1, 225, 38, 143, 6, 1, - 247, 168, 143, 6, 1, 226, 238, 143, 6, 1, 247, 188, 143, 6, 1, 223, 95, - 143, 6, 1, 247, 183, 143, 6, 1, 223, 76, 143, 6, 1, 247, 198, 143, 6, 1, - 248, 2, 143, 6, 1, 247, 247, 143, 6, 1, 247, 239, 143, 6, 1, 247, 228, - 143, 6, 1, 234, 80, 143, 6, 1, 247, 155, 143, 3, 1, 182, 74, 143, 3, 1, - 182, 72, 143, 3, 1, 182, 57, 143, 3, 1, 182, 255, 3, 143, 3, 1, 182, 73, - 143, 3, 1, 182, 234, 52, 143, 3, 1, 229, 63, 74, 143, 3, 1, 229, 63, 72, - 143, 3, 1, 229, 63, 57, 143, 3, 1, 229, 63, 255, 3, 143, 3, 1, 229, 63, - 73, 143, 3, 1, 229, 63, 234, 52, 143, 3, 1, 254, 34, 143, 3, 1, 233, 255, - 143, 3, 1, 224, 83, 143, 3, 1, 223, 225, 143, 3, 1, 212, 143, 3, 1, 233, - 144, 143, 3, 1, 252, 232, 143, 3, 1, 227, 37, 143, 3, 1, 250, 67, 143, 3, - 1, 251, 179, 143, 3, 1, 239, 169, 143, 3, 1, 239, 10, 143, 3, 1, 246, - 148, 143, 3, 1, 248, 29, 143, 3, 1, 225, 38, 143, 3, 1, 247, 168, 143, 3, - 1, 226, 238, 143, 3, 1, 247, 188, 143, 3, 1, 223, 95, 143, 3, 1, 247, - 183, 143, 3, 1, 223, 76, 143, 3, 1, 247, 198, 143, 3, 1, 248, 2, 143, 3, - 1, 247, 247, 143, 3, 1, 247, 239, 143, 3, 1, 247, 228, 143, 3, 1, 234, - 80, 143, 3, 1, 247, 155, 229, 119, 1, 233, 143, 229, 119, 1, 226, 99, - 229, 119, 1, 238, 198, 229, 119, 1, 247, 92, 229, 119, 1, 226, 217, 229, - 119, 1, 228, 169, 229, 119, 1, 227, 210, 229, 119, 1, 251, 128, 229, 119, - 1, 223, 227, 229, 119, 1, 244, 134, 229, 119, 1, 252, 180, 229, 119, 1, - 250, 76, 229, 119, 1, 246, 179, 229, 119, 1, 224, 194, 229, 119, 1, 226, - 221, 229, 119, 1, 223, 25, 229, 119, 1, 236, 233, 229, 119, 1, 239, 99, - 229, 119, 1, 224, 103, 229, 119, 1, 245, 169, 229, 119, 1, 237, 135, 229, - 119, 1, 236, 126, 229, 119, 1, 240, 54, 229, 119, 1, 248, 28, 229, 119, - 1, 254, 80, 229, 119, 1, 255, 22, 229, 119, 1, 234, 61, 229, 119, 1, 224, - 95, 229, 119, 1, 234, 10, 229, 119, 1, 255, 3, 229, 119, 1, 231, 119, - 229, 119, 1, 234, 194, 229, 119, 1, 248, 42, 229, 119, 1, 255, 6, 229, - 119, 1, 244, 69, 229, 119, 1, 225, 116, 229, 119, 1, 234, 103, 229, 119, - 1, 234, 46, 229, 119, 1, 234, 79, 229, 119, 1, 254, 37, 229, 119, 1, 254, - 117, 229, 119, 1, 234, 31, 229, 119, 1, 254, 245, 229, 119, 1, 247, 192, - 229, 119, 1, 254, 97, 229, 119, 1, 248, 51, 229, 119, 1, 244, 73, 229, - 119, 1, 223, 207, 234, 20, 1, 254, 227, 234, 20, 1, 253, 70, 234, 20, 1, - 227, 107, 234, 20, 1, 239, 179, 234, 20, 1, 224, 72, 234, 20, 1, 238, - 227, 234, 20, 1, 250, 66, 234, 20, 1, 208, 234, 20, 1, 231, 31, 234, 20, - 1, 229, 84, 234, 20, 1, 250, 22, 234, 20, 1, 251, 248, 234, 20, 1, 246, - 193, 234, 20, 1, 247, 129, 234, 20, 1, 232, 136, 234, 20, 1, 239, 71, - 234, 20, 1, 238, 39, 234, 20, 1, 236, 136, 234, 20, 1, 234, 181, 234, 20, - 1, 224, 144, 234, 20, 1, 154, 234, 20, 1, 191, 234, 20, 1, 57, 234, 20, - 1, 72, 234, 20, 1, 74, 234, 20, 1, 73, 234, 20, 1, 66, 234, 20, 1, 255, - 63, 234, 20, 1, 248, 35, 234, 20, 1, 234, 52, 234, 20, 21, 223, 89, 234, - 20, 21, 118, 234, 20, 21, 113, 234, 20, 21, 166, 234, 20, 21, 158, 234, - 20, 21, 173, 234, 20, 21, 183, 234, 20, 21, 194, 234, 20, 21, 187, 234, - 20, 21, 192, 218, 4, 57, 218, 4, 72, 218, 4, 74, 218, 4, 73, 218, 4, 66, - 218, 4, 239, 179, 218, 4, 239, 117, 218, 4, 177, 218, 4, 239, 3, 218, 4, - 238, 199, 218, 4, 238, 150, 218, 4, 238, 107, 218, 4, 238, 43, 218, 4, - 237, 243, 218, 4, 237, 193, 218, 4, 237, 143, 218, 4, 237, 110, 218, 4, - 198, 218, 4, 236, 235, 218, 4, 236, 157, 218, 4, 236, 103, 218, 4, 236, - 66, 218, 4, 236, 1, 218, 4, 235, 162, 218, 4, 235, 89, 218, 4, 235, 6, - 218, 4, 234, 206, 218, 4, 213, 218, 4, 233, 151, 218, 4, 233, 69, 218, 4, - 233, 4, 218, 4, 232, 173, 218, 4, 208, 218, 4, 231, 244, 218, 4, 231, - 180, 218, 4, 231, 122, 218, 4, 231, 70, 218, 4, 231, 31, 218, 4, 230, - 213, 218, 4, 229, 15, 218, 4, 228, 169, 218, 4, 228, 6, 218, 4, 227, 107, - 218, 4, 227, 44, 218, 4, 226, 175, 218, 4, 96, 218, 4, 225, 250, 218, 4, - 224, 173, 218, 4, 224, 141, 218, 4, 224, 118, 218, 4, 224, 105, 218, 4, - 224, 72, 218, 4, 224, 69, 218, 4, 223, 117, 218, 4, 223, 27, 233, 77, 1, - 254, 223, 233, 77, 1, 252, 200, 233, 77, 1, 246, 171, 233, 77, 1, 250, - 49, 233, 77, 1, 245, 121, 233, 77, 1, 224, 149, 233, 77, 1, 223, 112, - 233, 77, 1, 245, 90, 233, 77, 1, 227, 10, 233, 77, 1, 223, 175, 233, 77, - 1, 239, 59, 233, 77, 1, 238, 17, 233, 77, 1, 236, 215, 233, 77, 1, 234, - 194, 233, 77, 1, 229, 180, 233, 77, 1, 254, 248, 233, 77, 1, 233, 151, - 233, 77, 1, 231, 23, 233, 77, 1, 232, 92, 233, 77, 1, 231, 108, 233, 77, - 1, 229, 78, 233, 77, 1, 227, 61, 233, 77, 65, 118, 233, 77, 65, 227, 23, - 233, 77, 65, 225, 216, 233, 77, 65, 168, 244, 135, 233, 77, 224, 92, 229, - 173, 237, 78, 1, 57, 237, 78, 1, 254, 27, 237, 78, 1, 214, 237, 78, 1, - 222, 222, 237, 78, 1, 72, 237, 78, 1, 196, 237, 78, 1, 74, 237, 78, 1, - 224, 25, 237, 78, 1, 239, 76, 237, 78, 1, 149, 237, 78, 1, 185, 237, 78, - 1, 199, 237, 78, 1, 73, 237, 78, 1, 146, 237, 78, 1, 228, 111, 237, 78, - 1, 227, 109, 237, 78, 1, 66, 237, 78, 1, 247, 130, 237, 78, 1, 232, 139, - 237, 78, 1, 193, 237, 78, 1, 226, 22, 237, 78, 1, 254, 190, 237, 78, 1, - 247, 239, 237, 78, 1, 237, 80, 237, 78, 1, 235, 19, 237, 78, 1, 252, 44, - 237, 78, 226, 75, 76, 178, 1, 57, 178, 31, 5, 74, 178, 31, 5, 66, 178, - 31, 5, 153, 146, 178, 31, 5, 72, 178, 31, 5, 73, 178, 31, 237, 219, 76, - 178, 5, 47, 231, 140, 51, 178, 5, 254, 160, 178, 5, 224, 211, 178, 1, - 177, 178, 1, 238, 227, 178, 1, 246, 193, 178, 1, 246, 66, 178, 1, 252, - 39, 178, 1, 251, 204, 178, 1, 239, 179, 178, 1, 234, 173, 178, 1, 226, - 20, 178, 1, 226, 10, 178, 1, 250, 117, 178, 1, 250, 101, 178, 1, 235, 18, - 178, 1, 227, 107, 178, 1, 226, 251, 178, 1, 250, 189, 178, 1, 250, 22, - 178, 1, 236, 1, 178, 1, 213, 178, 1, 233, 97, 178, 1, 253, 70, 178, 1, - 252, 190, 178, 1, 198, 178, 1, 191, 178, 1, 208, 178, 1, 238, 43, 178, 1, - 225, 64, 178, 1, 229, 146, 178, 1, 228, 110, 178, 1, 231, 31, 178, 1, - 223, 117, 178, 1, 154, 178, 1, 238, 167, 178, 1, 225, 254, 178, 5, 253, - 36, 46, 178, 5, 251, 254, 178, 5, 56, 51, 178, 224, 216, 178, 21, 118, - 178, 21, 113, 178, 21, 166, 178, 21, 158, 178, 65, 227, 23, 178, 65, 225, - 216, 178, 65, 168, 244, 135, 178, 65, 168, 226, 194, 178, 232, 171, 249, - 140, 178, 232, 171, 3, 251, 106, 178, 232, 171, 251, 106, 178, 232, 171, - 250, 248, 125, 178, 232, 171, 237, 32, 178, 232, 171, 237, 119, 178, 232, - 171, 250, 151, 178, 232, 171, 47, 250, 151, 178, 232, 171, 237, 165, 13, - 5, 57, 13, 5, 102, 24, 57, 13, 5, 102, 24, 253, 61, 13, 5, 102, 24, 246, - 167, 227, 19, 13, 5, 102, 24, 154, 13, 5, 102, 24, 240, 49, 13, 5, 102, - 24, 238, 30, 245, 204, 13, 5, 102, 24, 236, 32, 13, 5, 102, 24, 231, 19, - 13, 5, 255, 65, 13, 5, 255, 52, 13, 5, 255, 53, 24, 254, 78, 13, 5, 255, - 53, 24, 248, 96, 245, 204, 13, 5, 255, 53, 24, 246, 177, 13, 5, 255, 53, - 24, 246, 167, 227, 19, 13, 5, 255, 53, 24, 154, 13, 5, 255, 53, 24, 240, - 50, 245, 204, 13, 5, 255, 53, 24, 240, 23, 13, 5, 255, 53, 24, 238, 31, - 13, 5, 255, 53, 24, 229, 99, 13, 5, 255, 53, 24, 97, 79, 97, 79, 66, 13, - 5, 255, 53, 245, 204, 13, 5, 255, 50, 13, 5, 255, 51, 24, 253, 50, 13, 5, - 255, 51, 24, 246, 167, 227, 19, 13, 5, 255, 51, 24, 236, 236, 79, 247, - 239, 13, 5, 255, 51, 24, 229, 144, 13, 5, 255, 51, 24, 227, 84, 13, 5, - 255, 29, 13, 5, 254, 240, 13, 5, 254, 241, 24, 247, 193, 13, 5, 254, 241, - 24, 229, 73, 79, 246, 24, 13, 5, 254, 233, 13, 5, 254, 234, 24, 254, 233, - 13, 5, 254, 234, 24, 249, 220, 13, 5, 254, 234, 24, 246, 24, 13, 5, 254, - 234, 24, 154, 13, 5, 254, 234, 24, 239, 64, 13, 5, 254, 234, 24, 238, - 199, 13, 5, 254, 234, 24, 229, 114, 13, 5, 254, 234, 24, 225, 83, 13, 5, - 254, 231, 13, 5, 254, 225, 13, 5, 254, 196, 13, 5, 254, 197, 24, 229, - 114, 13, 5, 254, 190, 13, 5, 254, 191, 107, 254, 190, 13, 5, 254, 191, - 152, 226, 156, 13, 5, 254, 191, 79, 235, 247, 234, 35, 254, 191, 79, 235, - 246, 13, 5, 254, 191, 79, 235, 247, 228, 118, 13, 5, 254, 170, 13, 5, - 254, 153, 13, 5, 254, 129, 13, 5, 254, 130, 24, 238, 91, 13, 5, 254, 108, - 13, 5, 254, 85, 13, 5, 254, 80, 13, 5, 254, 81, 223, 43, 227, 19, 13, 5, - 254, 81, 239, 67, 227, 19, 13, 5, 254, 81, 107, 254, 81, 225, 248, 107, - 225, 248, 225, 248, 107, 225, 248, 233, 197, 13, 5, 254, 81, 107, 254, - 81, 107, 254, 80, 13, 5, 254, 81, 107, 254, 81, 107, 254, 81, 250, 238, - 254, 81, 107, 254, 81, 107, 254, 80, 13, 5, 254, 78, 13, 5, 254, 76, 13, - 5, 253, 70, 13, 5, 253, 61, 13, 5, 253, 58, 13, 5, 253, 56, 13, 5, 253, - 51, 13, 5, 253, 52, 107, 253, 51, 13, 5, 253, 50, 13, 5, 125, 13, 5, 253, - 35, 13, 5, 252, 181, 13, 5, 252, 182, 24, 57, 13, 5, 252, 182, 24, 246, - 160, 13, 5, 252, 182, 24, 240, 50, 245, 204, 13, 5, 252, 90, 13, 5, 252, - 91, 107, 252, 91, 255, 52, 13, 5, 252, 91, 107, 252, 91, 225, 138, 13, 5, - 252, 91, 250, 238, 252, 90, 13, 5, 252, 79, 13, 5, 252, 80, 107, 252, 79, - 13, 5, 252, 70, 13, 5, 252, 69, 13, 5, 250, 189, 13, 5, 250, 180, 13, 5, - 250, 181, 238, 178, 24, 102, 79, 237, 7, 13, 5, 250, 181, 238, 178, 24, - 254, 196, 13, 5, 250, 181, 238, 178, 24, 253, 50, 13, 5, 250, 181, 238, - 178, 24, 252, 181, 13, 5, 250, 181, 238, 178, 24, 246, 193, 13, 5, 250, - 181, 238, 178, 24, 246, 194, 79, 237, 7, 13, 5, 250, 181, 238, 178, 24, - 246, 46, 13, 5, 250, 181, 238, 178, 24, 246, 30, 13, 5, 250, 181, 238, - 178, 24, 245, 212, 13, 5, 250, 181, 238, 178, 24, 154, 13, 5, 250, 181, - 238, 178, 24, 239, 210, 13, 5, 250, 181, 238, 178, 24, 239, 211, 79, 237, - 110, 13, 5, 250, 181, 238, 178, 24, 239, 53, 13, 5, 250, 181, 238, 178, - 24, 238, 43, 13, 5, 250, 181, 238, 178, 24, 237, 110, 13, 5, 250, 181, - 238, 178, 24, 237, 111, 79, 237, 6, 13, 5, 250, 181, 238, 178, 24, 237, - 100, 13, 5, 250, 181, 238, 178, 24, 235, 162, 13, 5, 250, 181, 238, 178, - 24, 233, 198, 79, 233, 197, 13, 5, 250, 181, 238, 178, 24, 229, 15, 13, - 5, 250, 181, 238, 178, 24, 227, 84, 13, 5, 250, 181, 238, 178, 24, 225, - 172, 79, 246, 30, 13, 5, 250, 181, 238, 178, 24, 225, 83, 13, 5, 250, - 159, 13, 5, 250, 140, 13, 5, 250, 139, 13, 5, 250, 138, 13, 5, 250, 4, - 13, 5, 249, 245, 13, 5, 249, 221, 13, 5, 249, 222, 24, 229, 114, 13, 5, - 249, 220, 13, 5, 249, 210, 13, 5, 249, 211, 239, 26, 97, 245, 205, 249, - 195, 13, 5, 249, 195, 13, 5, 248, 107, 13, 5, 248, 108, 107, 248, 107, - 13, 5, 248, 108, 245, 204, 13, 5, 248, 108, 229, 96, 13, 5, 248, 105, 13, - 5, 248, 106, 24, 247, 180, 13, 5, 248, 104, 13, 5, 248, 103, 13, 5, 248, - 102, 13, 5, 248, 101, 13, 5, 248, 97, 13, 5, 248, 95, 13, 5, 248, 96, - 245, 204, 13, 5, 248, 96, 245, 205, 245, 204, 13, 5, 248, 94, 13, 5, 248, - 87, 13, 5, 72, 13, 5, 161, 24, 233, 197, 13, 5, 161, 107, 161, 234, 195, - 107, 234, 194, 13, 5, 248, 57, 13, 5, 248, 58, 24, 102, 79, 245, 170, 79, - 250, 189, 13, 5, 248, 58, 24, 246, 160, 13, 5, 248, 58, 24, 236, 157, 13, - 5, 248, 58, 24, 231, 12, 13, 5, 248, 58, 24, 229, 114, 13, 5, 248, 58, - 24, 66, 13, 5, 248, 37, 13, 5, 248, 27, 13, 5, 248, 2, 13, 5, 247, 239, - 13, 5, 247, 240, 24, 246, 166, 13, 5, 247, 240, 24, 246, 167, 227, 19, - 13, 5, 247, 240, 24, 236, 235, 13, 5, 247, 240, 250, 238, 247, 239, 13, - 5, 247, 240, 234, 35, 247, 239, 13, 5, 247, 240, 228, 118, 13, 5, 247, - 195, 13, 5, 247, 193, 13, 5, 247, 180, 13, 5, 247, 134, 13, 5, 247, 135, - 24, 57, 13, 5, 247, 135, 24, 102, 79, 238, 21, 13, 5, 247, 135, 24, 102, - 79, 238, 22, 24, 238, 21, 13, 5, 247, 135, 24, 254, 190, 13, 5, 247, 135, - 24, 253, 61, 13, 5, 247, 135, 24, 248, 96, 245, 204, 13, 5, 247, 135, 24, - 248, 96, 245, 205, 245, 204, 13, 5, 247, 135, 24, 154, 13, 5, 247, 135, - 24, 245, 170, 245, 204, 13, 5, 247, 135, 24, 240, 50, 245, 204, 13, 5, - 247, 135, 24, 239, 25, 13, 5, 247, 135, 24, 239, 26, 228, 118, 13, 5, - 247, 135, 24, 238, 105, 13, 5, 247, 135, 24, 238, 43, 13, 5, 247, 135, - 24, 238, 22, 24, 238, 21, 13, 5, 247, 135, 24, 237, 193, 13, 5, 247, 135, - 24, 237, 110, 13, 5, 247, 135, 24, 225, 171, 13, 5, 247, 135, 24, 225, - 163, 13, 5, 246, 193, 13, 5, 246, 194, 245, 204, 13, 5, 246, 191, 13, 5, - 246, 192, 24, 102, 79, 250, 190, 79, 154, 13, 5, 246, 192, 24, 102, 79, - 154, 13, 5, 246, 192, 24, 102, 79, 240, 49, 13, 5, 246, 192, 24, 255, 51, - 227, 20, 79, 227, 100, 13, 5, 246, 192, 24, 254, 190, 13, 5, 246, 192, - 24, 254, 80, 13, 5, 246, 192, 24, 254, 79, 79, 246, 177, 13, 5, 246, 192, - 24, 253, 61, 13, 5, 246, 192, 24, 253, 36, 79, 208, 13, 5, 246, 192, 24, - 252, 70, 13, 5, 246, 192, 24, 252, 71, 79, 208, 13, 5, 246, 192, 24, 250, - 189, 13, 5, 246, 192, 24, 250, 4, 13, 5, 246, 192, 24, 249, 222, 24, 229, - 114, 13, 5, 246, 192, 24, 248, 105, 13, 5, 246, 192, 24, 248, 2, 13, 5, - 246, 192, 24, 248, 3, 79, 238, 43, 13, 5, 246, 192, 24, 247, 239, 13, 5, - 246, 192, 24, 247, 240, 24, 246, 167, 227, 19, 13, 5, 246, 192, 24, 246, - 167, 227, 19, 13, 5, 246, 192, 24, 246, 160, 13, 5, 246, 192, 24, 246, - 46, 13, 5, 246, 192, 24, 246, 44, 13, 5, 246, 192, 24, 246, 45, 79, 57, - 13, 5, 246, 192, 24, 246, 31, 79, 228, 6, 13, 5, 246, 192, 24, 245, 170, - 79, 237, 111, 79, 247, 180, 13, 5, 246, 192, 24, 245, 154, 13, 5, 246, - 192, 24, 245, 155, 79, 238, 43, 13, 5, 246, 192, 24, 245, 76, 79, 237, - 193, 13, 5, 246, 192, 24, 244, 142, 13, 5, 246, 192, 24, 240, 50, 245, - 204, 13, 5, 246, 192, 24, 239, 201, 79, 244, 146, 79, 254, 80, 13, 5, - 246, 192, 24, 239, 53, 13, 5, 246, 192, 24, 239, 25, 13, 5, 246, 192, 24, - 238, 196, 13, 5, 246, 192, 24, 238, 197, 79, 238, 21, 13, 5, 246, 192, - 24, 238, 106, 79, 254, 190, 13, 5, 246, 192, 24, 238, 43, 13, 5, 246, - 192, 24, 236, 236, 79, 247, 239, 13, 5, 246, 192, 24, 236, 157, 13, 5, - 246, 192, 24, 234, 194, 13, 5, 246, 192, 24, 234, 195, 107, 234, 194, 13, - 5, 246, 192, 24, 213, 13, 5, 246, 192, 24, 231, 12, 13, 5, 246, 192, 24, - 230, 244, 13, 5, 246, 192, 24, 229, 114, 13, 5, 246, 192, 24, 229, 115, - 79, 225, 236, 13, 5, 246, 192, 24, 229, 88, 13, 5, 246, 192, 24, 227, - 233, 13, 5, 246, 192, 24, 227, 84, 13, 5, 246, 192, 24, 66, 13, 5, 246, - 192, 24, 225, 163, 13, 5, 246, 192, 24, 225, 164, 79, 248, 107, 13, 5, - 246, 192, 107, 246, 191, 13, 5, 246, 186, 13, 5, 246, 187, 250, 238, 246, - 186, 13, 5, 246, 184, 13, 5, 246, 185, 107, 246, 185, 246, 161, 107, 246, - 160, 13, 5, 246, 177, 13, 5, 246, 178, 246, 185, 107, 246, 185, 246, 161, - 107, 246, 160, 13, 5, 246, 176, 13, 5, 246, 174, 13, 5, 246, 168, 13, 5, - 246, 166, 13, 5, 246, 167, 227, 19, 13, 5, 246, 167, 107, 246, 166, 13, - 5, 246, 167, 250, 238, 246, 166, 13, 5, 246, 160, 13, 5, 246, 159, 13, 5, - 246, 155, 13, 5, 246, 107, 13, 5, 246, 108, 24, 238, 91, 13, 5, 246, 46, - 13, 5, 246, 47, 24, 72, 13, 5, 246, 47, 24, 66, 13, 5, 246, 47, 250, 238, - 246, 46, 13, 5, 246, 44, 13, 5, 246, 45, 107, 246, 44, 13, 5, 246, 45, - 250, 238, 246, 44, 13, 5, 246, 42, 13, 5, 246, 30, 13, 5, 246, 31, 245, - 204, 13, 5, 246, 28, 13, 5, 246, 29, 24, 102, 79, 240, 49, 13, 5, 246, - 29, 24, 246, 167, 227, 19, 13, 5, 246, 29, 24, 240, 49, 13, 5, 246, 29, - 24, 237, 111, 79, 240, 49, 13, 5, 246, 29, 24, 213, 13, 5, 246, 26, 13, - 5, 246, 24, 13, 5, 246, 25, 250, 238, 246, 24, 13, 5, 246, 25, 24, 253, - 61, 13, 5, 246, 25, 24, 227, 84, 13, 5, 246, 25, 227, 19, 13, 5, 245, - 218, 13, 5, 245, 219, 250, 238, 245, 218, 13, 5, 245, 216, 13, 5, 245, - 217, 24, 239, 53, 13, 5, 245, 217, 24, 239, 54, 24, 240, 50, 245, 204, - 13, 5, 245, 217, 24, 234, 194, 13, 5, 245, 217, 24, 231, 13, 79, 225, - 247, 13, 5, 245, 217, 245, 204, 13, 5, 245, 212, 13, 5, 245, 213, 24, - 102, 79, 238, 91, 13, 5, 245, 213, 24, 238, 91, 13, 5, 245, 213, 107, - 245, 213, 237, 105, 13, 5, 245, 208, 13, 5, 245, 206, 13, 5, 245, 207, - 24, 229, 114, 13, 5, 245, 198, 13, 5, 245, 197, 13, 5, 245, 194, 13, 5, - 245, 193, 13, 5, 154, 13, 5, 245, 170, 227, 19, 13, 5, 245, 170, 245, - 204, 13, 5, 245, 154, 13, 5, 245, 75, 13, 5, 245, 76, 24, 254, 80, 13, 5, - 245, 76, 24, 254, 78, 13, 5, 245, 76, 24, 253, 61, 13, 5, 245, 76, 24, - 249, 195, 13, 5, 245, 76, 24, 246, 184, 13, 5, 245, 76, 24, 238, 190, 13, - 5, 245, 76, 24, 234, 194, 13, 5, 245, 76, 24, 229, 114, 13, 5, 245, 76, - 24, 66, 13, 5, 244, 145, 13, 5, 244, 142, 13, 5, 244, 143, 24, 254, 190, - 13, 5, 244, 143, 24, 245, 154, 13, 5, 244, 143, 24, 239, 25, 13, 5, 244, - 143, 24, 237, 158, 13, 5, 244, 143, 24, 225, 163, 13, 5, 244, 140, 13, 5, - 74, 13, 5, 244, 81, 57, 13, 5, 244, 71, 13, 5, 240, 75, 13, 5, 240, 76, - 107, 240, 76, 252, 70, 13, 5, 240, 76, 107, 240, 76, 228, 118, 13, 5, - 240, 52, 13, 5, 240, 49, 13, 5, 240, 50, 249, 245, 13, 5, 240, 50, 231, - 180, 13, 5, 240, 50, 107, 240, 50, 229, 75, 107, 229, 75, 225, 164, 107, - 225, 163, 13, 5, 240, 50, 245, 204, 13, 5, 240, 41, 13, 5, 240, 42, 24, - 246, 167, 227, 19, 13, 5, 240, 40, 13, 5, 240, 30, 13, 5, 240, 31, 24, - 227, 84, 13, 5, 240, 31, 250, 238, 240, 30, 13, 5, 240, 31, 234, 35, 240, - 30, 13, 5, 240, 31, 228, 118, 13, 5, 240, 23, 13, 5, 240, 16, 13, 5, 239, - 210, 13, 5, 239, 200, 13, 5, 177, 13, 5, 188, 24, 57, 13, 5, 188, 24, - 255, 29, 13, 5, 188, 24, 255, 30, 79, 238, 105, 13, 5, 188, 24, 254, 78, - 13, 5, 188, 24, 253, 61, 13, 5, 188, 24, 253, 50, 13, 5, 188, 24, 125, - 13, 5, 188, 24, 252, 181, 13, 5, 188, 24, 247, 193, 13, 5, 188, 24, 247, - 180, 13, 5, 188, 24, 246, 193, 13, 5, 188, 24, 246, 177, 13, 5, 188, 24, - 246, 167, 227, 19, 13, 5, 188, 24, 246, 160, 13, 5, 188, 24, 246, 161, - 79, 229, 145, 79, 57, 13, 5, 188, 24, 246, 46, 13, 5, 188, 24, 246, 30, - 13, 5, 188, 24, 246, 25, 79, 230, 244, 13, 5, 188, 24, 246, 25, 250, 238, - 246, 24, 13, 5, 188, 24, 245, 218, 13, 5, 188, 24, 245, 197, 13, 5, 188, - 24, 240, 49, 13, 5, 188, 24, 240, 30, 13, 5, 188, 24, 239, 53, 13, 5, - 188, 24, 238, 199, 13, 5, 188, 24, 238, 196, 13, 5, 188, 24, 237, 193, - 13, 5, 188, 24, 237, 110, 13, 5, 188, 24, 236, 235, 13, 5, 188, 24, 236, - 236, 79, 248, 107, 13, 5, 188, 24, 236, 236, 79, 246, 46, 13, 5, 188, 24, - 236, 236, 79, 227, 44, 13, 5, 188, 24, 236, 157, 13, 5, 188, 24, 236, - 158, 79, 234, 190, 13, 5, 188, 24, 235, 162, 13, 5, 188, 24, 234, 194, - 13, 5, 188, 24, 233, 69, 13, 5, 188, 24, 231, 70, 13, 5, 188, 24, 231, - 31, 13, 5, 188, 24, 230, 244, 13, 5, 188, 24, 229, 146, 13, 5, 188, 24, - 229, 114, 13, 5, 188, 24, 229, 88, 13, 5, 188, 24, 229, 43, 13, 5, 188, - 24, 229, 7, 13, 5, 188, 24, 227, 240, 13, 5, 188, 24, 227, 67, 13, 5, - 188, 24, 66, 13, 5, 188, 24, 225, 171, 13, 5, 188, 24, 225, 163, 13, 5, - 188, 24, 225, 141, 24, 213, 13, 5, 188, 24, 225, 83, 13, 5, 188, 24, 223, - 47, 13, 5, 239, 73, 13, 5, 239, 74, 250, 238, 239, 73, 13, 5, 239, 68, - 13, 5, 239, 66, 13, 5, 239, 64, 13, 5, 239, 63, 13, 5, 239, 61, 13, 5, - 239, 62, 107, 239, 61, 13, 5, 239, 53, 13, 5, 239, 54, 24, 240, 50, 245, - 204, 13, 5, 239, 49, 13, 5, 239, 50, 24, 253, 61, 13, 5, 239, 50, 250, - 238, 239, 49, 13, 5, 239, 48, 13, 5, 239, 47, 13, 5, 239, 25, 13, 5, 239, - 26, 215, 24, 97, 107, 215, 24, 66, 13, 5, 239, 26, 107, 239, 26, 215, 24, - 97, 107, 215, 24, 66, 13, 5, 238, 237, 13, 5, 238, 199, 13, 5, 238, 200, - 24, 253, 61, 13, 5, 238, 200, 24, 66, 13, 5, 238, 200, 24, 225, 163, 13, - 5, 238, 196, 13, 5, 238, 190, 13, 5, 238, 180, 13, 5, 238, 179, 13, 5, - 238, 177, 13, 5, 238, 178, 107, 238, 177, 13, 5, 238, 107, 13, 5, 238, - 108, 107, 245, 76, 24, 254, 79, 238, 108, 107, 245, 76, 24, 254, 78, 13, - 5, 238, 105, 13, 5, 238, 103, 13, 5, 238, 104, 225, 54, 15, 13, 5, 238, - 102, 13, 5, 238, 100, 13, 5, 238, 101, 245, 204, 13, 5, 238, 99, 13, 5, - 238, 91, 13, 5, 238, 92, 234, 35, 238, 91, 13, 5, 238, 86, 13, 5, 238, - 70, 13, 5, 238, 43, 13, 5, 238, 31, 13, 5, 215, 24, 57, 13, 5, 215, 24, - 102, 79, 250, 190, 79, 154, 13, 5, 215, 24, 102, 79, 246, 160, 13, 5, - 215, 24, 102, 79, 238, 21, 13, 5, 215, 24, 254, 233, 13, 5, 215, 24, 254, - 190, 13, 5, 215, 24, 254, 81, 223, 43, 227, 19, 13, 5, 215, 24, 253, 61, - 13, 5, 215, 24, 252, 181, 13, 5, 215, 24, 250, 140, 13, 5, 215, 24, 247, - 239, 13, 5, 215, 24, 246, 193, 13, 5, 215, 24, 246, 160, 13, 5, 215, 24, - 245, 212, 13, 5, 215, 24, 245, 213, 79, 245, 212, 13, 5, 215, 24, 154, - 13, 5, 215, 24, 245, 154, 13, 5, 215, 24, 245, 76, 24, 234, 194, 13, 5, - 215, 24, 240, 50, 245, 204, 13, 5, 215, 24, 240, 30, 13, 5, 215, 24, 240, - 31, 79, 154, 13, 5, 215, 24, 240, 31, 79, 237, 110, 13, 5, 215, 24, 238, - 199, 13, 5, 215, 24, 238, 190, 13, 5, 215, 24, 238, 105, 13, 5, 215, 24, - 238, 100, 13, 5, 215, 24, 238, 101, 79, 245, 76, 79, 57, 13, 5, 215, 24, - 238, 31, 13, 5, 215, 24, 237, 158, 13, 5, 215, 24, 237, 110, 13, 5, 215, - 24, 237, 102, 13, 5, 215, 24, 236, 235, 13, 5, 215, 24, 236, 236, 79, - 247, 239, 13, 5, 215, 24, 236, 32, 13, 5, 215, 24, 235, 162, 13, 5, 215, - 24, 229, 115, 79, 227, 233, 13, 5, 215, 24, 229, 73, 79, 246, 25, 79, - 247, 193, 13, 5, 215, 24, 229, 73, 79, 246, 25, 227, 19, 13, 5, 215, 24, - 229, 41, 13, 5, 215, 24, 229, 42, 79, 229, 41, 13, 5, 215, 24, 227, 233, - 13, 5, 215, 24, 227, 95, 13, 5, 215, 24, 227, 84, 13, 5, 215, 24, 227, - 45, 79, 102, 79, 228, 7, 79, 236, 1, 13, 5, 215, 24, 66, 13, 5, 215, 24, - 97, 79, 57, 13, 5, 215, 24, 97, 79, 97, 79, 66, 13, 5, 215, 24, 225, 172, - 79, 254, 80, 13, 5, 215, 24, 225, 163, 13, 5, 215, 24, 225, 83, 13, 5, - 215, 228, 118, 13, 5, 238, 29, 13, 5, 238, 30, 24, 229, 114, 13, 5, 238, - 30, 24, 229, 115, 79, 227, 233, 13, 5, 238, 30, 245, 204, 13, 5, 238, 30, - 245, 205, 107, 238, 30, 245, 205, 229, 114, 13, 5, 238, 26, 13, 5, 238, - 21, 13, 5, 238, 22, 24, 238, 21, 13, 5, 238, 20, 13, 5, 216, 24, 238, 91, - 13, 5, 216, 24, 238, 92, 79, 231, 70, 13, 5, 237, 193, 13, 5, 237, 181, - 13, 5, 237, 173, 13, 5, 237, 158, 13, 5, 237, 110, 13, 5, 237, 111, 24, - 253, 61, 13, 5, 237, 108, 13, 5, 237, 109, 24, 254, 233, 13, 5, 237, 109, - 24, 253, 61, 13, 5, 237, 109, 24, 247, 180, 13, 5, 237, 109, 24, 247, - 181, 227, 19, 13, 5, 237, 109, 24, 246, 167, 227, 19, 13, 5, 237, 109, - 24, 245, 76, 24, 253, 61, 13, 5, 237, 109, 24, 240, 30, 13, 5, 237, 109, - 24, 239, 66, 13, 5, 237, 109, 24, 239, 64, 13, 5, 237, 109, 24, 239, 65, - 79, 254, 80, 13, 5, 237, 109, 24, 238, 199, 13, 5, 237, 109, 24, 238, 44, - 79, 254, 80, 13, 5, 237, 109, 24, 238, 31, 13, 5, 237, 109, 24, 236, 236, - 79, 247, 239, 13, 5, 237, 109, 24, 235, 162, 13, 5, 237, 109, 24, 234, - 206, 13, 5, 237, 109, 24, 229, 16, 79, 254, 80, 13, 5, 237, 109, 24, 228, - 255, 79, 252, 90, 13, 5, 237, 109, 24, 225, 247, 13, 5, 237, 109, 227, - 19, 13, 5, 237, 109, 250, 238, 237, 108, 13, 5, 237, 109, 234, 35, 237, - 108, 13, 5, 237, 109, 228, 118, 13, 5, 237, 109, 229, 96, 13, 5, 237, - 107, 13, 5, 237, 105, 13, 5, 237, 106, 107, 237, 105, 13, 5, 237, 106, - 234, 35, 237, 105, 13, 5, 237, 106, 229, 96, 13, 5, 237, 104, 13, 5, 237, - 102, 13, 5, 237, 100, 13, 5, 237, 101, 107, 237, 100, 13, 5, 237, 101, - 107, 237, 101, 246, 161, 107, 246, 160, 13, 5, 198, 13, 5, 237, 68, 24, - 227, 84, 13, 5, 237, 68, 245, 204, 13, 5, 237, 67, 13, 5, 237, 55, 13, 5, - 237, 24, 13, 5, 237, 7, 13, 5, 237, 6, 13, 5, 236, 235, 13, 5, 236, 205, - 13, 5, 236, 157, 13, 5, 236, 125, 13, 5, 236, 66, 13, 5, 236, 67, 107, - 236, 66, 13, 5, 236, 59, 13, 5, 236, 60, 245, 204, 13, 5, 236, 46, 13, 5, - 236, 35, 13, 5, 236, 32, 13, 5, 236, 33, 24, 57, 13, 5, 236, 33, 24, 238, - 91, 13, 5, 236, 33, 24, 223, 117, 13, 5, 236, 33, 107, 236, 32, 13, 5, - 236, 33, 107, 236, 33, 24, 102, 79, 236, 1, 13, 5, 236, 33, 250, 238, - 236, 32, 13, 5, 236, 30, 13, 5, 236, 31, 24, 57, 13, 5, 236, 31, 24, 102, - 79, 250, 4, 13, 5, 236, 31, 24, 250, 4, 13, 5, 236, 31, 245, 204, 13, 5, - 236, 1, 13, 5, 236, 0, 13, 5, 235, 246, 13, 5, 235, 247, 239, 222, 13, 5, - 235, 247, 24, 229, 44, 227, 19, 13, 5, 235, 247, 234, 35, 235, 246, 13, - 5, 235, 245, 13, 5, 235, 241, 234, 182, 13, 5, 235, 240, 13, 5, 235, 239, - 13, 5, 235, 162, 13, 5, 235, 163, 24, 57, 13, 5, 235, 163, 24, 225, 163, - 13, 5, 235, 163, 229, 96, 13, 5, 235, 89, 13, 5, 235, 90, 24, 72, 13, 5, - 235, 88, 13, 5, 235, 64, 13, 5, 235, 65, 24, 246, 167, 227, 19, 13, 5, - 235, 65, 24, 246, 161, 79, 246, 167, 227, 19, 13, 5, 235, 62, 13, 5, 235, - 63, 24, 254, 190, 13, 5, 235, 63, 24, 254, 80, 13, 5, 235, 63, 24, 254, - 81, 79, 254, 80, 13, 5, 235, 63, 24, 245, 212, 13, 5, 235, 63, 24, 236, - 236, 79, 246, 167, 227, 19, 13, 5, 235, 63, 24, 235, 162, 13, 5, 235, 63, - 24, 234, 194, 13, 5, 235, 63, 24, 229, 114, 13, 5, 235, 63, 24, 229, 115, - 79, 102, 254, 190, 13, 5, 235, 63, 24, 229, 115, 79, 254, 80, 13, 5, 235, - 63, 24, 229, 115, 79, 254, 81, 79, 254, 80, 13, 5, 235, 63, 24, 225, 172, - 79, 254, 80, 13, 5, 235, 63, 24, 225, 83, 13, 5, 235, 53, 13, 5, 234, - 206, 13, 5, 234, 205, 13, 5, 234, 194, 13, 5, 234, 195, 238, 30, 24, 246, - 160, 13, 5, 234, 195, 238, 30, 24, 237, 7, 13, 5, 234, 195, 238, 30, 24, - 231, 12, 13, 5, 234, 195, 238, 30, 24, 231, 13, 107, 234, 195, 238, 30, - 24, 231, 12, 13, 5, 234, 195, 238, 30, 24, 225, 83, 13, 5, 234, 195, 227, - 19, 13, 5, 234, 195, 107, 234, 194, 13, 5, 234, 195, 250, 238, 234, 194, - 13, 5, 234, 195, 250, 238, 234, 195, 238, 30, 107, 238, 29, 13, 5, 234, - 190, 13, 5, 234, 191, 255, 51, 24, 254, 76, 13, 5, 234, 191, 255, 51, 24, - 252, 181, 13, 5, 234, 191, 255, 51, 24, 248, 103, 13, 5, 234, 191, 255, - 51, 24, 245, 212, 13, 5, 234, 191, 255, 51, 24, 240, 50, 245, 204, 13, 5, - 234, 191, 255, 51, 24, 239, 64, 13, 5, 234, 191, 255, 51, 24, 238, 43, - 13, 5, 234, 191, 255, 51, 24, 235, 162, 13, 5, 234, 191, 255, 51, 24, - 228, 252, 13, 5, 234, 191, 255, 51, 24, 225, 171, 13, 5, 234, 191, 238, - 178, 24, 252, 181, 13, 5, 234, 191, 238, 178, 24, 252, 182, 66, 13, 5, - 213, 13, 5, 233, 235, 13, 5, 233, 212, 13, 5, 233, 197, 13, 5, 233, 107, - 13, 5, 233, 69, 13, 5, 233, 70, 24, 57, 13, 5, 233, 70, 24, 255, 52, 13, - 5, 233, 70, 24, 252, 181, 13, 5, 233, 70, 24, 252, 90, 13, 5, 233, 70, - 24, 72, 13, 5, 233, 70, 24, 74, 13, 5, 233, 70, 24, 244, 71, 13, 5, 233, - 70, 24, 66, 13, 5, 233, 70, 24, 225, 171, 13, 5, 233, 70, 250, 238, 233, - 69, 13, 5, 233, 32, 13, 5, 233, 33, 24, 239, 49, 13, 5, 233, 33, 24, 225, - 163, 13, 5, 233, 33, 24, 223, 117, 13, 5, 233, 33, 234, 35, 233, 32, 13, - 5, 208, 13, 5, 232, 20, 13, 5, 231, 180, 13, 5, 231, 70, 13, 5, 231, 31, - 13, 5, 231, 20, 234, 182, 13, 5, 231, 19, 13, 5, 231, 20, 24, 57, 13, 5, - 231, 20, 24, 248, 107, 13, 5, 231, 20, 24, 248, 105, 13, 5, 231, 20, 24, - 154, 13, 5, 231, 20, 24, 239, 53, 13, 5, 231, 20, 24, 238, 91, 13, 5, - 231, 20, 24, 237, 100, 13, 5, 231, 20, 24, 236, 157, 13, 5, 231, 20, 24, - 234, 194, 13, 5, 231, 20, 24, 231, 12, 13, 5, 231, 20, 24, 229, 88, 13, - 5, 231, 20, 24, 227, 100, 13, 5, 231, 20, 24, 225, 171, 13, 5, 231, 20, - 24, 225, 168, 13, 5, 231, 20, 24, 225, 145, 13, 5, 231, 20, 24, 225, 103, - 13, 5, 231, 20, 24, 225, 83, 13, 5, 231, 20, 107, 231, 19, 13, 5, 231, - 20, 245, 204, 13, 5, 231, 12, 13, 5, 231, 13, 215, 24, 254, 78, 13, 5, - 230, 251, 13, 5, 230, 244, 13, 5, 229, 146, 13, 5, 229, 144, 13, 5, 229, - 145, 24, 57, 13, 5, 229, 145, 24, 253, 61, 13, 5, 229, 145, 24, 246, 24, - 13, 5, 229, 145, 24, 235, 162, 13, 5, 229, 145, 24, 229, 41, 13, 5, 229, - 145, 24, 225, 236, 13, 5, 229, 145, 24, 66, 13, 5, 229, 145, 24, 97, 79, - 57, 13, 5, 229, 143, 13, 5, 229, 141, 13, 5, 229, 125, 13, 5, 229, 114, - 13, 5, 229, 115, 244, 145, 13, 5, 229, 115, 107, 229, 115, 246, 185, 107, - 246, 185, 246, 161, 107, 246, 160, 13, 5, 229, 115, 107, 229, 115, 227, - 101, 107, 227, 101, 246, 161, 107, 246, 160, 13, 5, 229, 107, 13, 5, 229, - 102, 13, 5, 229, 99, 13, 5, 229, 98, 13, 5, 229, 95, 13, 5, 229, 88, 13, - 5, 229, 89, 24, 57, 13, 5, 229, 89, 24, 240, 30, 13, 5, 229, 82, 13, 5, - 229, 83, 24, 57, 13, 5, 229, 83, 24, 253, 51, 13, 5, 229, 83, 24, 252, - 79, 13, 5, 229, 83, 24, 249, 210, 13, 5, 229, 83, 24, 246, 160, 13, 5, - 229, 83, 24, 240, 49, 13, 5, 229, 83, 24, 240, 50, 245, 204, 13, 5, 229, - 83, 24, 238, 86, 13, 5, 229, 83, 24, 237, 102, 13, 5, 229, 83, 24, 236, - 59, 13, 5, 229, 83, 24, 231, 12, 13, 5, 229, 77, 13, 5, 229, 74, 13, 5, - 229, 75, 227, 19, 13, 5, 229, 75, 107, 229, 75, 252, 71, 107, 252, 70, - 13, 5, 229, 72, 13, 5, 229, 43, 13, 5, 229, 44, 107, 239, 223, 229, 43, - 13, 5, 229, 41, 13, 5, 229, 40, 13, 5, 229, 15, 13, 5, 229, 16, 245, 204, - 13, 5, 229, 7, 13, 5, 229, 5, 13, 5, 229, 6, 107, 229, 6, 229, 41, 13, 5, - 228, 254, 13, 5, 228, 252, 13, 5, 228, 6, 13, 5, 228, 7, 107, 228, 6, 13, - 5, 227, 242, 13, 5, 227, 241, 13, 5, 227, 240, 13, 5, 227, 233, 13, 5, - 227, 232, 13, 5, 227, 213, 13, 5, 227, 212, 13, 5, 227, 107, 13, 5, 227, - 108, 254, 69, 13, 5, 227, 108, 24, 245, 75, 13, 5, 227, 108, 24, 236, - 157, 13, 5, 227, 108, 245, 204, 13, 5, 227, 100, 13, 5, 227, 101, 107, - 227, 101, 235, 90, 107, 235, 90, 249, 196, 107, 249, 195, 13, 5, 227, - 101, 228, 118, 13, 5, 227, 95, 13, 5, 108, 24, 252, 181, 13, 5, 108, 24, - 245, 212, 13, 5, 108, 24, 229, 114, 13, 5, 108, 24, 229, 43, 13, 5, 108, - 24, 225, 247, 13, 5, 108, 24, 225, 163, 13, 5, 227, 84, 13, 5, 227, 67, - 13, 5, 227, 44, 13, 5, 227, 45, 245, 204, 13, 5, 226, 175, 13, 5, 226, - 176, 227, 19, 13, 5, 226, 160, 13, 5, 226, 146, 13, 5, 226, 147, 24, 227, - 84, 13, 5, 226, 147, 107, 226, 146, 13, 5, 226, 147, 107, 226, 147, 246, - 185, 107, 246, 185, 246, 161, 107, 246, 160, 13, 5, 225, 250, 13, 5, 225, - 247, 13, 5, 225, 245, 13, 5, 225, 244, 13, 5, 225, 236, 13, 5, 225, 237, - 107, 225, 237, 223, 118, 107, 223, 117, 13, 5, 66, 13, 5, 97, 245, 212, - 13, 5, 97, 97, 66, 13, 5, 97, 107, 97, 233, 242, 107, 233, 242, 246, 161, - 107, 246, 160, 13, 5, 97, 107, 97, 227, 214, 107, 227, 213, 13, 5, 97, - 107, 97, 97, 200, 107, 97, 231, 192, 13, 5, 225, 171, 13, 5, 225, 168, - 13, 5, 225, 163, 13, 5, 225, 164, 238, 86, 13, 5, 225, 164, 24, 253, 61, - 13, 5, 225, 164, 24, 236, 157, 13, 5, 225, 164, 24, 97, 79, 97, 79, 66, - 13, 5, 225, 164, 24, 97, 79, 97, 79, 97, 245, 204, 13, 5, 225, 164, 245, - 204, 13, 5, 225, 164, 229, 96, 13, 5, 225, 164, 229, 97, 24, 253, 61, 13, - 5, 225, 160, 13, 5, 225, 145, 13, 5, 225, 146, 24, 238, 31, 13, 5, 225, - 146, 24, 236, 236, 79, 250, 189, 13, 5, 225, 146, 24, 229, 144, 13, 5, - 225, 146, 24, 66, 13, 5, 225, 144, 13, 5, 225, 140, 13, 5, 225, 141, 24, - 239, 25, 13, 5, 225, 141, 24, 213, 13, 5, 225, 138, 13, 5, 225, 139, 245, - 204, 13, 5, 225, 103, 13, 5, 225, 104, 250, 238, 225, 103, 13, 5, 225, - 104, 229, 96, 13, 5, 225, 101, 13, 5, 225, 102, 24, 102, 79, 154, 13, 5, - 225, 102, 24, 102, 79, 236, 1, 13, 5, 225, 102, 24, 254, 233, 13, 5, 225, - 102, 24, 154, 13, 5, 225, 102, 24, 234, 194, 13, 5, 225, 102, 24, 225, - 171, 13, 5, 225, 102, 24, 225, 172, 79, 254, 80, 13, 5, 225, 102, 24, - 225, 172, 79, 252, 181, 13, 5, 225, 100, 13, 5, 225, 97, 13, 5, 225, 96, - 13, 5, 225, 93, 13, 5, 225, 94, 24, 57, 13, 5, 225, 94, 24, 254, 76, 13, - 5, 225, 94, 24, 125, 13, 5, 225, 94, 24, 248, 97, 13, 5, 225, 94, 24, - 246, 193, 13, 5, 225, 94, 24, 246, 177, 13, 5, 225, 94, 24, 246, 167, - 227, 19, 13, 5, 225, 94, 24, 246, 160, 13, 5, 225, 94, 24, 245, 218, 13, - 5, 225, 94, 24, 154, 13, 5, 225, 94, 24, 240, 49, 13, 5, 225, 94, 24, - 240, 30, 13, 5, 225, 94, 24, 239, 200, 13, 5, 225, 94, 24, 238, 199, 13, - 5, 225, 94, 24, 237, 100, 13, 5, 225, 94, 24, 236, 125, 13, 5, 225, 94, - 24, 213, 13, 5, 225, 94, 24, 229, 114, 13, 5, 225, 94, 24, 229, 5, 13, 5, - 225, 94, 24, 225, 250, 13, 5, 225, 94, 24, 97, 79, 245, 212, 13, 5, 225, - 94, 24, 225, 163, 13, 5, 225, 94, 24, 225, 91, 13, 5, 225, 91, 13, 5, - 225, 92, 24, 66, 13, 5, 225, 83, 13, 5, 225, 84, 24, 57, 13, 5, 225, 84, - 24, 238, 107, 13, 5, 225, 84, 24, 238, 91, 13, 5, 225, 84, 24, 227, 84, - 13, 5, 225, 80, 13, 5, 225, 82, 13, 5, 225, 81, 13, 5, 225, 77, 13, 5, - 225, 67, 13, 5, 225, 68, 24, 239, 25, 13, 5, 225, 66, 13, 5, 223, 117, - 13, 5, 223, 118, 227, 19, 13, 5, 223, 118, 228, 119, 24, 238, 91, 13, 5, - 223, 115, 13, 5, 223, 108, 13, 5, 223, 96, 13, 5, 223, 47, 13, 5, 223, - 48, 107, 223, 47, 13, 5, 223, 46, 13, 5, 223, 44, 13, 5, 223, 45, 239, - 67, 227, 19, 13, 5, 223, 39, 13, 5, 223, 32, 13, 5, 223, 19, 13, 5, 223, - 17, 13, 5, 223, 18, 24, 57, 13, 5, 223, 16, 13, 5, 223, 15, 13, 111, 5, - 135, 254, 80, 13, 111, 5, 152, 254, 80, 13, 111, 5, 246, 243, 254, 80, - 13, 111, 5, 247, 37, 254, 80, 13, 111, 5, 228, 217, 254, 80, 13, 111, 5, - 229, 163, 254, 80, 13, 111, 5, 248, 20, 254, 80, 13, 111, 5, 235, 61, - 254, 80, 13, 111, 5, 152, 249, 195, 13, 111, 5, 246, 243, 249, 195, 13, - 111, 5, 247, 37, 249, 195, 13, 111, 5, 228, 217, 249, 195, 13, 111, 5, - 229, 163, 249, 195, 13, 111, 5, 248, 20, 249, 195, 13, 111, 5, 235, 61, - 249, 195, 13, 111, 5, 246, 243, 66, 13, 111, 5, 247, 37, 66, 13, 111, 5, - 228, 217, 66, 13, 111, 5, 229, 163, 66, 13, 111, 5, 248, 20, 66, 13, 111, - 5, 235, 61, 66, 13, 111, 5, 168, 246, 109, 13, 111, 5, 135, 246, 109, 13, - 111, 5, 152, 246, 109, 13, 111, 5, 246, 243, 246, 109, 13, 111, 5, 247, - 37, 246, 109, 13, 111, 5, 228, 217, 246, 109, 13, 111, 5, 229, 163, 246, - 109, 13, 111, 5, 248, 20, 246, 109, 13, 111, 5, 235, 61, 246, 109, 13, - 111, 5, 168, 246, 106, 13, 111, 5, 135, 246, 106, 13, 111, 5, 152, 246, - 106, 13, 111, 5, 246, 243, 246, 106, 13, 111, 5, 247, 37, 246, 106, 13, - 111, 5, 135, 229, 125, 13, 111, 5, 152, 229, 125, 13, 111, 5, 152, 229, - 126, 225, 54, 15, 13, 111, 5, 246, 243, 229, 125, 13, 111, 5, 247, 37, - 229, 125, 13, 111, 5, 228, 217, 229, 125, 13, 111, 5, 229, 163, 229, 125, - 13, 111, 5, 248, 20, 229, 125, 13, 111, 5, 235, 61, 229, 125, 13, 111, 5, - 168, 229, 121, 13, 111, 5, 135, 229, 121, 13, 111, 5, 152, 229, 121, 13, - 111, 5, 152, 229, 122, 225, 54, 15, 13, 111, 5, 246, 243, 229, 121, 13, - 111, 5, 247, 37, 229, 121, 13, 111, 5, 229, 126, 24, 246, 178, 79, 249, - 195, 13, 111, 5, 229, 126, 24, 246, 178, 79, 236, 125, 13, 111, 5, 168, - 252, 67, 13, 111, 5, 135, 252, 67, 13, 111, 5, 152, 252, 67, 13, 111, 5, - 152, 252, 68, 225, 54, 15, 13, 111, 5, 246, 243, 252, 67, 13, 111, 5, - 247, 37, 252, 67, 13, 111, 5, 152, 225, 54, 211, 247, 182, 13, 111, 5, - 152, 225, 54, 211, 247, 179, 13, 111, 5, 246, 243, 225, 54, 211, 237, - 174, 13, 111, 5, 246, 243, 225, 54, 211, 237, 172, 13, 111, 5, 246, 243, - 225, 54, 211, 237, 175, 57, 13, 111, 5, 246, 243, 225, 54, 211, 237, 175, - 254, 27, 13, 111, 5, 228, 217, 225, 54, 211, 254, 77, 13, 111, 5, 229, - 163, 225, 54, 211, 240, 22, 13, 111, 5, 229, 163, 225, 54, 211, 240, 24, - 57, 13, 111, 5, 229, 163, 225, 54, 211, 240, 24, 254, 27, 13, 111, 5, - 248, 20, 225, 54, 211, 225, 79, 13, 111, 5, 248, 20, 225, 54, 211, 225, - 78, 13, 111, 5, 235, 61, 225, 54, 211, 240, 38, 13, 111, 5, 235, 61, 225, - 54, 211, 240, 37, 13, 111, 5, 235, 61, 225, 54, 211, 240, 36, 13, 111, 5, - 235, 61, 225, 54, 211, 240, 39, 57, 13, 111, 5, 135, 254, 81, 227, 19, - 13, 111, 5, 152, 254, 81, 227, 19, 13, 111, 5, 246, 243, 254, 81, 227, - 19, 13, 111, 5, 247, 37, 254, 81, 227, 19, 13, 111, 5, 228, 217, 254, 81, - 227, 19, 13, 111, 5, 168, 253, 42, 13, 111, 5, 135, 253, 42, 13, 111, 5, - 152, 253, 42, 13, 111, 5, 246, 243, 253, 42, 13, 111, 5, 246, 243, 253, - 43, 225, 54, 15, 13, 111, 5, 247, 37, 253, 42, 13, 111, 5, 247, 37, 253, - 43, 225, 54, 15, 13, 111, 5, 235, 69, 13, 111, 5, 235, 70, 13, 111, 5, - 168, 247, 178, 13, 111, 5, 135, 247, 178, 13, 111, 5, 168, 226, 214, 249, - 195, 13, 111, 5, 135, 226, 212, 249, 195, 13, 111, 5, 247, 37, 228, 209, - 249, 195, 13, 111, 5, 168, 226, 214, 225, 54, 211, 57, 13, 111, 5, 135, - 226, 212, 225, 54, 211, 57, 13, 111, 5, 168, 248, 17, 254, 80, 13, 111, - 5, 168, 232, 77, 254, 80, 13, 111, 5, 84, 254, 72, 168, 228, 210, 13, - 111, 5, 84, 254, 72, 168, 232, 76, 13, 232, 171, 5, 84, 254, 72, 224, 92, - 249, 184, 13, 232, 171, 5, 61, 251, 61, 13, 232, 171, 5, 250, 1, 251, 61, - 13, 232, 171, 5, 250, 1, 226, 74, 43, 23, 14, 232, 177, 43, 23, 14, 250, - 132, 43, 23, 14, 233, 117, 43, 23, 14, 233, 252, 248, 6, 43, 23, 14, 233, - 252, 249, 205, 43, 23, 14, 225, 58, 248, 6, 43, 23, 14, 225, 58, 249, - 205, 43, 23, 14, 239, 16, 43, 23, 14, 227, 125, 43, 23, 14, 233, 186, 43, - 23, 14, 223, 163, 43, 23, 14, 223, 164, 249, 205, 43, 23, 14, 238, 112, - 43, 23, 14, 254, 154, 248, 6, 43, 23, 14, 247, 144, 248, 6, 43, 23, 14, - 227, 30, 43, 23, 14, 238, 239, 43, 23, 14, 254, 145, 43, 23, 14, 254, - 146, 249, 205, 43, 23, 14, 227, 130, 43, 23, 14, 226, 204, 43, 23, 14, - 234, 71, 254, 118, 43, 23, 14, 246, 0, 254, 118, 43, 23, 14, 232, 176, - 43, 23, 14, 251, 198, 43, 23, 14, 225, 48, 43, 23, 14, 239, 199, 254, - 118, 43, 23, 14, 238, 241, 254, 118, 43, 23, 14, 238, 240, 254, 118, 43, - 23, 14, 230, 235, 43, 23, 14, 233, 177, 43, 23, 14, 228, 53, 254, 148, - 43, 23, 14, 233, 251, 254, 118, 43, 23, 14, 225, 57, 254, 118, 43, 23, - 14, 254, 149, 254, 118, 43, 23, 14, 254, 143, 43, 23, 14, 238, 158, 43, - 23, 14, 231, 190, 43, 23, 14, 233, 67, 254, 118, 43, 23, 14, 226, 155, - 43, 23, 14, 254, 189, 43, 23, 14, 230, 194, 43, 23, 14, 227, 133, 254, - 118, 43, 23, 14, 227, 133, 236, 200, 228, 51, 43, 23, 14, 233, 246, 254, - 118, 43, 23, 14, 226, 234, 43, 23, 14, 237, 222, 43, 23, 14, 248, 73, 43, - 23, 14, 226, 80, 43, 23, 14, 227, 12, 43, 23, 14, 238, 115, 43, 23, 14, - 254, 154, 247, 144, 235, 152, 43, 23, 14, 246, 220, 254, 118, 43, 23, 14, - 240, 26, 43, 23, 14, 226, 56, 254, 118, 43, 23, 14, 239, 18, 226, 55, 43, - 23, 14, 233, 135, 43, 23, 14, 232, 180, 43, 23, 14, 238, 140, 43, 23, 14, - 251, 145, 254, 118, 43, 23, 14, 232, 0, 43, 23, 14, 233, 189, 254, 118, - 43, 23, 14, 233, 187, 254, 118, 43, 23, 14, 244, 67, 43, 23, 14, 235, - 236, 43, 23, 14, 233, 103, 43, 23, 14, 238, 141, 254, 211, 43, 23, 14, - 226, 56, 254, 211, 43, 23, 14, 228, 34, 43, 23, 14, 245, 226, 43, 23, 14, - 239, 199, 235, 152, 43, 23, 14, 234, 71, 235, 152, 43, 23, 14, 233, 252, - 235, 152, 43, 23, 14, 233, 102, 43, 23, 14, 238, 128, 43, 23, 14, 233, - 101, 43, 23, 14, 238, 114, 43, 23, 14, 233, 136, 235, 152, 43, 23, 14, - 238, 240, 235, 153, 254, 172, 43, 23, 14, 238, 241, 235, 153, 254, 172, - 43, 23, 14, 223, 161, 43, 23, 14, 254, 146, 235, 152, 43, 23, 14, 254, - 147, 227, 131, 235, 152, 43, 23, 14, 223, 162, 43, 23, 14, 238, 113, 43, - 23, 14, 248, 1, 43, 23, 14, 251, 199, 43, 23, 14, 236, 134, 239, 198, 43, - 23, 14, 225, 58, 235, 152, 43, 23, 14, 233, 67, 235, 152, 43, 23, 14, - 232, 181, 235, 152, 43, 23, 14, 234, 68, 43, 23, 14, 254, 164, 43, 23, - 14, 237, 77, 43, 23, 14, 233, 187, 235, 152, 43, 23, 14, 233, 189, 235, - 152, 43, 23, 14, 247, 169, 233, 188, 43, 23, 14, 238, 51, 43, 23, 14, - 254, 165, 43, 23, 14, 226, 56, 235, 152, 43, 23, 14, 248, 4, 43, 23, 14, - 227, 133, 235, 152, 43, 23, 14, 227, 126, 43, 23, 14, 251, 145, 235, 152, - 43, 23, 14, 247, 210, 43, 23, 14, 230, 195, 235, 152, 43, 23, 14, 224, - 58, 238, 158, 43, 23, 14, 226, 53, 43, 23, 14, 232, 182, 43, 23, 14, 226, - 57, 43, 23, 14, 226, 54, 43, 23, 14, 232, 179, 43, 23, 14, 226, 52, 43, - 23, 14, 232, 178, 43, 23, 14, 245, 255, 43, 23, 14, 254, 113, 43, 23, 14, - 247, 169, 254, 113, 43, 23, 14, 233, 246, 235, 152, 43, 23, 14, 226, 233, - 247, 177, 43, 23, 14, 226, 233, 247, 143, 43, 23, 14, 226, 235, 254, 150, - 43, 23, 14, 226, 228, 239, 57, 254, 142, 43, 23, 14, 239, 17, 43, 23, 14, - 247, 229, 43, 23, 14, 223, 205, 239, 15, 43, 23, 14, 223, 205, 254, 172, - 43, 23, 14, 228, 52, 43, 23, 14, 238, 159, 254, 172, 43, 23, 14, 249, - 206, 254, 118, 43, 23, 14, 238, 116, 254, 118, 43, 23, 14, 238, 116, 254, - 211, 43, 23, 14, 238, 116, 235, 152, 43, 23, 14, 254, 149, 235, 152, 43, - 23, 14, 254, 151, 43, 23, 14, 249, 205, 43, 23, 14, 226, 65, 43, 23, 14, - 227, 4, 43, 23, 14, 238, 132, 43, 23, 14, 237, 225, 247, 225, 251, 138, - 43, 23, 14, 237, 225, 248, 74, 251, 139, 43, 23, 14, 237, 225, 226, 67, - 251, 139, 43, 23, 14, 237, 225, 227, 14, 251, 139, 43, 23, 14, 237, 225, - 240, 21, 251, 138, 43, 23, 14, 246, 0, 235, 153, 254, 172, 43, 23, 14, - 246, 0, 233, 178, 254, 109, 43, 23, 14, 246, 0, 233, 178, 250, 26, 43, - 23, 14, 249, 228, 43, 23, 14, 249, 229, 233, 178, 254, 110, 239, 15, 43, - 23, 14, 249, 229, 233, 178, 254, 110, 254, 172, 43, 23, 14, 249, 229, - 233, 178, 250, 26, 43, 23, 14, 226, 71, 43, 23, 14, 254, 114, 43, 23, 14, - 240, 28, 43, 23, 14, 249, 249, 43, 23, 14, 255, 4, 232, 246, 254, 115, - 43, 23, 14, 255, 4, 254, 112, 43, 23, 14, 255, 4, 254, 115, 43, 23, 14, - 255, 4, 236, 195, 43, 23, 14, 255, 4, 236, 203, 43, 23, 14, 255, 4, 246, - 1, 43, 23, 14, 255, 4, 245, 254, 43, 23, 14, 255, 4, 232, 246, 246, 1, - 43, 23, 14, 237, 10, 232, 187, 244, 65, 43, 23, 14, 237, 10, 254, 213, - 232, 187, 244, 65, 43, 23, 14, 237, 10, 250, 25, 244, 65, 43, 23, 14, - 237, 10, 254, 213, 250, 25, 244, 65, 43, 23, 14, 237, 10, 226, 60, 244, - 65, 43, 23, 14, 237, 10, 226, 72, 43, 23, 14, 237, 10, 227, 8, 244, 65, - 43, 23, 14, 237, 10, 227, 8, 237, 228, 244, 65, 43, 23, 14, 237, 10, 237, - 228, 244, 65, 43, 23, 14, 237, 10, 233, 22, 244, 65, 43, 23, 14, 239, - 203, 227, 26, 244, 66, 43, 23, 14, 254, 147, 227, 26, 244, 66, 43, 23, - 14, 247, 110, 227, 5, 43, 23, 14, 247, 110, 236, 93, 43, 23, 14, 247, - 110, 249, 233, 43, 23, 14, 237, 10, 225, 52, 244, 65, 43, 23, 14, 237, - 10, 232, 186, 244, 65, 43, 23, 14, 237, 10, 233, 22, 227, 8, 244, 65, 43, - 23, 14, 245, 252, 236, 5, 254, 150, 43, 23, 14, 245, 252, 236, 5, 249, - 204, 43, 23, 14, 247, 237, 239, 57, 246, 220, 224, 195, 43, 23, 14, 240, - 27, 43, 23, 14, 240, 25, 43, 23, 14, 246, 220, 254, 119, 250, 24, 244, - 64, 43, 23, 14, 246, 220, 249, 247, 213, 43, 23, 14, 246, 220, 249, 247, - 235, 236, 43, 23, 14, 246, 220, 235, 232, 244, 65, 43, 23, 14, 246, 220, - 249, 247, 250, 4, 43, 23, 14, 246, 220, 228, 200, 249, 246, 250, 4, 43, - 23, 14, 246, 220, 249, 247, 239, 3, 43, 23, 14, 246, 220, 249, 247, 223, - 27, 43, 23, 14, 246, 220, 249, 247, 235, 90, 239, 15, 43, 23, 14, 246, - 220, 249, 247, 235, 90, 254, 172, 43, 23, 14, 246, 220, 237, 40, 251, - 140, 249, 233, 43, 23, 14, 246, 220, 237, 40, 251, 140, 236, 93, 43, 23, - 14, 247, 71, 228, 200, 251, 140, 225, 51, 43, 23, 14, 246, 220, 228, 200, - 251, 140, 227, 134, 43, 23, 14, 246, 220, 235, 154, 43, 23, 14, 251, 141, - 223, 3, 43, 23, 14, 251, 141, 238, 157, 43, 23, 14, 251, 141, 228, 141, - 43, 23, 14, 246, 220, 244, 81, 223, 204, 227, 9, 43, 23, 14, 246, 220, - 247, 238, 254, 166, 43, 23, 14, 223, 204, 226, 61, 43, 23, 14, 249, 241, - 226, 61, 43, 23, 14, 249, 241, 227, 9, 43, 23, 14, 249, 241, 254, 152, - 248, 74, 249, 155, 43, 23, 14, 249, 241, 236, 91, 227, 13, 249, 155, 43, - 23, 14, 249, 241, 249, 225, 247, 153, 249, 155, 43, 23, 14, 249, 241, - 226, 69, 234, 75, 249, 155, 43, 23, 14, 223, 204, 254, 152, 248, 74, 249, - 155, 43, 23, 14, 223, 204, 236, 91, 227, 13, 249, 155, 43, 23, 14, 223, - 204, 249, 225, 247, 153, 249, 155, 43, 23, 14, 223, 204, 226, 69, 234, - 75, 249, 155, 43, 23, 14, 246, 120, 249, 240, 43, 23, 14, 246, 120, 223, - 203, 43, 23, 14, 249, 248, 254, 152, 236, 135, 43, 23, 14, 249, 248, 254, - 152, 236, 220, 43, 23, 14, 249, 248, 249, 205, 43, 23, 14, 249, 248, 226, - 226, 43, 23, 14, 228, 248, 226, 226, 43, 23, 14, 228, 248, 226, 227, 249, - 194, 43, 23, 14, 228, 248, 226, 227, 226, 62, 43, 23, 14, 228, 248, 226, - 227, 227, 2, 43, 23, 14, 228, 248, 254, 90, 43, 23, 14, 228, 248, 254, - 91, 249, 194, 43, 23, 14, 228, 248, 254, 91, 226, 62, 43, 23, 14, 228, - 248, 254, 91, 227, 2, 43, 23, 14, 249, 226, 246, 102, 43, 23, 14, 249, - 232, 234, 13, 43, 23, 14, 228, 46, 43, 23, 14, 254, 107, 213, 43, 23, 14, - 254, 107, 224, 195, 43, 23, 14, 254, 107, 246, 193, 43, 23, 14, 254, 107, - 250, 4, 43, 23, 14, 254, 107, 239, 3, 43, 23, 14, 254, 107, 223, 27, 43, - 23, 14, 254, 107, 235, 89, 43, 23, 14, 238, 240, 235, 153, 236, 202, 43, - 23, 14, 238, 241, 235, 153, 236, 202, 43, 23, 14, 238, 240, 235, 153, - 239, 15, 43, 23, 14, 238, 241, 235, 153, 239, 15, 43, 23, 14, 238, 159, - 239, 15, 43, 23, 14, 246, 0, 235, 153, 239, 15, 23, 14, 228, 241, 253, - 32, 23, 14, 47, 253, 32, 23, 14, 35, 253, 32, 23, 14, 231, 193, 35, 253, - 32, 23, 14, 250, 129, 253, 32, 23, 14, 229, 63, 253, 32, 23, 14, 42, 231, - 212, 53, 23, 14, 41, 231, 212, 53, 23, 14, 231, 212, 249, 138, 23, 14, - 250, 166, 230, 198, 23, 14, 250, 190, 252, 14, 23, 14, 230, 198, 23, 14, - 251, 66, 23, 14, 231, 210, 247, 60, 23, 14, 231, 210, 247, 59, 23, 14, - 231, 210, 247, 58, 23, 14, 247, 76, 23, 14, 247, 77, 51, 23, 14, 252, - 108, 76, 23, 14, 252, 34, 23, 14, 252, 116, 23, 14, 104, 23, 14, 234, 60, - 228, 65, 23, 14, 225, 202, 228, 65, 23, 14, 226, 190, 228, 65, 23, 14, - 246, 242, 228, 65, 23, 14, 247, 36, 228, 65, 23, 14, 228, 216, 228, 65, - 23, 14, 228, 214, 246, 228, 23, 14, 246, 240, 246, 228, 23, 14, 246, 196, - 251, 92, 23, 14, 246, 196, 251, 93, 234, 15, 254, 204, 23, 14, 246, 196, - 251, 93, 234, 15, 253, 22, 23, 14, 252, 45, 251, 92, 23, 14, 247, 131, - 251, 92, 23, 14, 247, 131, 251, 93, 234, 15, 254, 204, 23, 14, 247, 131, - 251, 93, 234, 15, 253, 22, 23, 14, 248, 112, 251, 91, 23, 14, 248, 112, - 251, 90, 23, 14, 236, 53, 236, 234, 231, 199, 23, 14, 47, 229, 123, 23, - 14, 47, 247, 24, 23, 14, 247, 25, 225, 116, 23, 14, 247, 25, 248, 127, - 23, 14, 235, 224, 225, 116, 23, 14, 235, 224, 248, 127, 23, 14, 229, 124, - 225, 116, 23, 14, 229, 124, 248, 127, 23, 14, 232, 77, 206, 229, 123, 23, - 14, 232, 77, 206, 247, 24, 23, 14, 251, 52, 226, 157, 23, 14, 250, 213, - 226, 157, 23, 14, 234, 15, 254, 204, 23, 14, 234, 15, 253, 22, 23, 14, - 232, 62, 254, 204, 23, 14, 232, 62, 253, 22, 23, 14, 236, 56, 231, 199, - 23, 14, 224, 119, 231, 199, 23, 14, 132, 231, 199, 23, 14, 232, 77, 231, - 199, 23, 14, 248, 17, 231, 199, 23, 14, 228, 211, 231, 199, 23, 14, 226, - 205, 231, 199, 23, 14, 228, 205, 231, 199, 23, 14, 168, 244, 136, 225, - 214, 231, 199, 23, 14, 224, 74, 234, 236, 23, 14, 79, 234, 236, 23, 14, - 251, 107, 224, 74, 234, 236, 23, 14, 37, 234, 237, 224, 121, 23, 14, 37, - 234, 237, 252, 150, 23, 14, 226, 79, 234, 237, 99, 224, 121, 23, 14, 226, - 79, 234, 237, 99, 252, 150, 23, 14, 226, 79, 234, 237, 42, 224, 121, 23, - 14, 226, 79, 234, 237, 42, 252, 150, 23, 14, 226, 79, 234, 237, 41, 224, - 121, 23, 14, 226, 79, 234, 237, 41, 252, 150, 23, 14, 226, 79, 234, 237, - 103, 224, 121, 23, 14, 226, 79, 234, 237, 103, 252, 150, 23, 14, 226, 79, - 234, 237, 99, 41, 224, 121, 23, 14, 226, 79, 234, 237, 99, 41, 252, 150, - 23, 14, 236, 85, 234, 237, 224, 121, 23, 14, 236, 85, 234, 237, 252, 150, - 23, 14, 226, 76, 234, 237, 103, 224, 121, 23, 14, 226, 76, 234, 237, 103, - 252, 150, 23, 14, 233, 181, 234, 236, 23, 14, 224, 201, 234, 236, 23, 14, - 234, 237, 252, 150, 23, 14, 234, 201, 234, 236, 23, 14, 251, 71, 234, - 237, 224, 121, 23, 14, 251, 71, 234, 237, 252, 150, 23, 14, 252, 106, 23, - 14, 224, 119, 234, 238, 23, 14, 132, 234, 238, 23, 14, 232, 77, 234, 238, - 23, 14, 248, 17, 234, 238, 23, 14, 228, 211, 234, 238, 23, 14, 226, 205, - 234, 238, 23, 14, 228, 205, 234, 238, 23, 14, 168, 244, 136, 225, 214, - 234, 238, 23, 14, 36, 228, 48, 23, 14, 36, 228, 126, 228, 48, 23, 14, 36, - 226, 85, 23, 14, 36, 226, 84, 23, 14, 36, 226, 83, 23, 14, 247, 50, 226, - 85, 23, 14, 247, 50, 226, 84, 23, 14, 247, 50, 226, 83, 23, 14, 36, 254, - 51, 249, 140, 23, 14, 36, 247, 30, 23, 14, 36, 247, 29, 23, 14, 36, 247, - 28, 23, 14, 36, 247, 27, 23, 14, 36, 247, 26, 23, 14, 252, 226, 252, 237, - 23, 14, 247, 233, 252, 237, 23, 14, 252, 226, 226, 170, 23, 14, 247, 233, - 226, 170, 23, 14, 252, 226, 228, 185, 23, 14, 247, 233, 228, 185, 23, 14, - 252, 226, 233, 76, 23, 14, 247, 233, 233, 76, 23, 14, 36, 255, 41, 23, - 14, 36, 228, 67, 23, 14, 36, 227, 18, 23, 14, 36, 228, 68, 23, 14, 36, - 237, 21, 23, 14, 36, 237, 20, 23, 14, 36, 255, 40, 23, 14, 36, 237, 118, - 23, 14, 254, 98, 225, 116, 23, 14, 254, 98, 248, 127, 23, 14, 36, 249, - 152, 23, 14, 36, 231, 138, 23, 14, 36, 247, 18, 23, 14, 36, 228, 181, 23, - 14, 36, 252, 209, 23, 14, 36, 47, 226, 110, 23, 14, 36, 226, 66, 226, - 110, 23, 14, 231, 141, 23, 14, 228, 2, 23, 14, 223, 119, 23, 14, 233, 68, - 23, 14, 236, 192, 23, 14, 246, 247, 23, 14, 250, 249, 23, 14, 250, 68, - 23, 14, 245, 247, 234, 239, 228, 194, 23, 14, 245, 247, 234, 239, 235, 7, - 228, 194, 23, 14, 226, 96, 23, 14, 225, 233, 23, 14, 239, 223, 225, 233, - 23, 14, 225, 234, 228, 194, 23, 14, 225, 234, 225, 116, 23, 14, 234, 26, - 228, 22, 23, 14, 234, 26, 228, 19, 23, 14, 234, 26, 228, 18, 23, 14, 234, - 26, 228, 17, 23, 14, 234, 26, 228, 16, 23, 14, 234, 26, 228, 15, 23, 14, - 234, 26, 228, 14, 23, 14, 234, 26, 228, 13, 23, 14, 234, 26, 228, 12, 23, - 14, 234, 26, 228, 21, 23, 14, 234, 26, 228, 20, 23, 14, 245, 128, 23, 14, - 235, 161, 23, 14, 247, 233, 106, 228, 42, 23, 14, 250, 62, 228, 194, 23, - 14, 36, 103, 252, 121, 23, 14, 36, 99, 252, 121, 23, 14, 36, 245, 137, - 23, 14, 36, 228, 175, 233, 25, 23, 14, 233, 148, 76, 23, 14, 233, 148, - 99, 76, 23, 14, 132, 233, 148, 76, 23, 14, 246, 17, 225, 116, 23, 14, - 246, 17, 248, 127, 23, 14, 2, 247, 49, 23, 14, 250, 152, 23, 14, 250, - 153, 254, 216, 23, 14, 236, 253, 23, 14, 237, 126, 23, 14, 252, 103, 23, - 14, 229, 190, 224, 121, 23, 14, 229, 190, 252, 150, 23, 14, 236, 123, 23, - 14, 236, 124, 252, 150, 23, 14, 229, 184, 224, 121, 23, 14, 229, 184, - 252, 150, 23, 14, 246, 210, 224, 121, 23, 14, 246, 210, 252, 150, 23, 14, - 237, 127, 233, 121, 231, 199, 23, 14, 237, 127, 240, 20, 231, 199, 23, - 14, 252, 104, 231, 199, 23, 14, 229, 190, 231, 199, 23, 14, 236, 124, - 231, 199, 23, 14, 229, 184, 231, 199, 23, 14, 227, 25, 233, 119, 250, - 230, 232, 195, 233, 120, 23, 14, 227, 25, 233, 119, 250, 230, 232, 195, - 240, 19, 23, 14, 227, 25, 233, 119, 250, 230, 232, 195, 233, 121, 249, - 215, 23, 14, 227, 25, 240, 18, 250, 230, 232, 195, 233, 120, 23, 14, 227, - 25, 240, 18, 250, 230, 232, 195, 240, 19, 23, 14, 227, 25, 240, 18, 250, - 230, 232, 195, 240, 20, 249, 215, 23, 14, 227, 25, 240, 18, 250, 230, - 232, 195, 240, 20, 249, 214, 23, 14, 227, 25, 240, 18, 250, 230, 232, - 195, 240, 20, 249, 213, 23, 14, 250, 246, 23, 14, 245, 227, 252, 45, 251, - 92, 23, 14, 245, 227, 247, 131, 251, 92, 23, 14, 37, 254, 27, 23, 14, - 224, 215, 23, 14, 233, 2, 23, 14, 251, 85, 23, 14, 230, 226, 23, 14, 251, - 87, 23, 14, 226, 101, 23, 14, 232, 240, 23, 14, 232, 241, 247, 20, 23, - 14, 230, 227, 247, 20, 23, 14, 226, 102, 231, 198, 23, 14, 233, 109, 227, - 254, 19, 224, 205, 150, 227, 182, 19, 224, 205, 150, 227, 171, 19, 224, - 205, 150, 227, 161, 19, 224, 205, 150, 227, 154, 19, 224, 205, 150, 227, - 146, 19, 224, 205, 150, 227, 140, 19, 224, 205, 150, 227, 139, 19, 224, - 205, 150, 227, 138, 19, 224, 205, 150, 227, 137, 19, 224, 205, 150, 227, - 181, 19, 224, 205, 150, 227, 180, 19, 224, 205, 150, 227, 179, 19, 224, - 205, 150, 227, 178, 19, 224, 205, 150, 227, 177, 19, 224, 205, 150, 227, - 176, 19, 224, 205, 150, 227, 175, 19, 224, 205, 150, 227, 174, 19, 224, - 205, 150, 227, 173, 19, 224, 205, 150, 227, 172, 19, 224, 205, 150, 227, - 170, 19, 224, 205, 150, 227, 169, 19, 224, 205, 150, 227, 168, 19, 224, - 205, 150, 227, 167, 19, 224, 205, 150, 227, 166, 19, 224, 205, 150, 227, - 145, 19, 224, 205, 150, 227, 144, 19, 224, 205, 150, 227, 143, 19, 224, - 205, 150, 227, 142, 19, 224, 205, 150, 227, 141, 19, 239, 242, 150, 227, - 182, 19, 239, 242, 150, 227, 171, 19, 239, 242, 150, 227, 154, 19, 239, - 242, 150, 227, 146, 19, 239, 242, 150, 227, 139, 19, 239, 242, 150, 227, - 138, 19, 239, 242, 150, 227, 180, 19, 239, 242, 150, 227, 179, 19, 239, - 242, 150, 227, 178, 19, 239, 242, 150, 227, 177, 19, 239, 242, 150, 227, - 174, 19, 239, 242, 150, 227, 173, 19, 239, 242, 150, 227, 172, 19, 239, - 242, 150, 227, 167, 19, 239, 242, 150, 227, 166, 19, 239, 242, 150, 227, - 165, 19, 239, 242, 150, 227, 164, 19, 239, 242, 150, 227, 163, 19, 239, - 242, 150, 227, 162, 19, 239, 242, 150, 227, 160, 19, 239, 242, 150, 227, - 159, 19, 239, 242, 150, 227, 158, 19, 239, 242, 150, 227, 157, 19, 239, - 242, 150, 227, 156, 19, 239, 242, 150, 227, 155, 19, 239, 242, 150, 227, - 153, 19, 239, 242, 150, 227, 152, 19, 239, 242, 150, 227, 151, 19, 239, - 242, 150, 227, 150, 19, 239, 242, 150, 227, 149, 19, 239, 242, 150, 227, - 148, 19, 239, 242, 150, 227, 147, 19, 239, 242, 150, 227, 145, 19, 239, - 242, 150, 227, 144, 19, 239, 242, 150, 227, 143, 19, 239, 242, 150, 227, - 142, 19, 239, 242, 150, 227, 141, 36, 19, 23, 226, 63, 36, 19, 23, 227, - 3, 36, 19, 23, 233, 128, 19, 23, 237, 224, 236, 92, 32, 248, 48, 249, - 227, 32, 245, 111, 248, 48, 249, 227, 32, 244, 139, 248, 48, 249, 227, - 32, 248, 47, 245, 112, 249, 227, 32, 248, 47, 244, 138, 249, 227, 32, - 248, 48, 142, 32, 251, 218, 142, 32, 246, 218, 251, 106, 142, 32, 236, - 116, 142, 32, 253, 27, 142, 32, 239, 0, 228, 184, 142, 32, 251, 19, 142, - 32, 254, 82, 142, 32, 234, 34, 142, 32, 252, 111, 234, 10, 142, 32, 250, - 64, 145, 249, 191, 142, 32, 249, 188, 142, 32, 223, 167, 142, 32, 240, - 12, 142, 32, 233, 133, 142, 32, 231, 243, 142, 32, 251, 29, 142, 32, 244, - 222, 253, 66, 142, 32, 224, 168, 142, 32, 247, 6, 142, 32, 255, 21, 142, - 32, 231, 219, 142, 32, 231, 203, 142, 32, 248, 46, 142, 32, 239, 103, - 142, 32, 251, 24, 142, 32, 247, 232, 142, 32, 248, 83, 142, 32, 251, 194, - 142, 32, 250, 70, 142, 32, 18, 231, 202, 142, 32, 233, 236, 142, 32, 237, - 227, 142, 32, 251, 80, 142, 32, 238, 188, 142, 32, 246, 151, 142, 32, - 228, 28, 142, 32, 232, 163, 142, 32, 246, 217, 142, 32, 231, 204, 142, - 32, 237, 253, 145, 236, 101, 142, 32, 231, 200, 142, 32, 246, 7, 180, - 236, 223, 142, 32, 247, 234, 142, 32, 228, 35, 142, 32, 245, 229, 142, - 32, 247, 227, 142, 32, 233, 162, 142, 32, 231, 132, 142, 32, 247, 19, - 142, 32, 225, 50, 145, 224, 155, 142, 32, 251, 32, 142, 32, 236, 233, - 142, 32, 247, 170, 142, 32, 225, 124, 142, 32, 249, 216, 142, 32, 251, - 82, 236, 72, 142, 32, 245, 214, 142, 32, 246, 152, 240, 16, 142, 32, 237, - 4, 142, 32, 255, 38, 142, 32, 247, 245, 142, 32, 248, 129, 142, 32, 224, - 153, 142, 32, 228, 238, 142, 32, 239, 248, 142, 32, 250, 37, 142, 32, - 250, 134, 142, 32, 249, 212, 142, 32, 247, 147, 142, 32, 229, 158, 142, - 32, 228, 37, 142, 32, 245, 139, 142, 32, 251, 48, 142, 32, 251, 78, 142, - 32, 247, 114, 142, 32, 255, 5, 142, 32, 251, 47, 142, 32, 234, 62, 226, - 240, 225, 33, 142, 32, 249, 235, 142, 32, 238, 36, 142, 32, 246, 244, - 250, 255, 231, 116, 225, 126, 21, 118, 250, 255, 231, 116, 225, 126, 21, - 113, 250, 255, 231, 116, 225, 126, 21, 166, 250, 255, 231, 116, 225, 126, - 21, 158, 250, 255, 231, 116, 225, 126, 21, 173, 250, 255, 231, 116, 225, - 126, 21, 183, 250, 255, 231, 116, 225, 126, 21, 194, 250, 255, 231, 116, - 225, 126, 21, 187, 250, 255, 231, 116, 225, 126, 21, 192, 250, 255, 231, - 116, 227, 22, 21, 118, 250, 255, 231, 116, 227, 22, 21, 113, 250, 255, - 231, 116, 227, 22, 21, 166, 250, 255, 231, 116, 227, 22, 21, 158, 250, - 255, 231, 116, 227, 22, 21, 173, 250, 255, 231, 116, 227, 22, 21, 183, - 250, 255, 231, 116, 227, 22, 21, 194, 250, 255, 231, 116, 227, 22, 21, - 187, 250, 255, 231, 116, 227, 22, 21, 192, 12, 18, 6, 57, 12, 18, 6, 254, - 27, 12, 18, 6, 252, 44, 12, 18, 6, 222, 222, 12, 18, 6, 72, 12, 18, 6, - 247, 130, 12, 18, 6, 214, 12, 18, 6, 212, 12, 18, 6, 74, 12, 18, 6, 239, - 182, 12, 18, 6, 239, 76, 12, 18, 6, 149, 12, 18, 6, 185, 12, 18, 6, 199, - 12, 18, 6, 73, 12, 18, 6, 233, 244, 12, 18, 6, 232, 139, 12, 18, 6, 146, - 12, 18, 6, 193, 12, 18, 6, 227, 109, 12, 18, 6, 66, 12, 18, 6, 196, 12, - 18, 6, 224, 174, 12, 18, 6, 224, 73, 12, 18, 6, 224, 25, 12, 18, 6, 223, - 119, 12, 18, 3, 57, 12, 18, 3, 254, 27, 12, 18, 3, 252, 44, 12, 18, 3, - 222, 222, 12, 18, 3, 72, 12, 18, 3, 247, 130, 12, 18, 3, 214, 12, 18, 3, - 212, 12, 18, 3, 74, 12, 18, 3, 239, 182, 12, 18, 3, 239, 76, 12, 18, 3, - 149, 12, 18, 3, 185, 12, 18, 3, 199, 12, 18, 3, 73, 12, 18, 3, 233, 244, - 12, 18, 3, 232, 139, 12, 18, 3, 146, 12, 18, 3, 193, 12, 18, 3, 227, 109, - 12, 18, 3, 66, 12, 18, 3, 196, 12, 18, 3, 224, 174, 12, 18, 3, 224, 73, - 12, 18, 3, 224, 25, 12, 18, 3, 223, 119, 12, 27, 6, 57, 12, 27, 6, 254, - 27, 12, 27, 6, 252, 44, 12, 27, 6, 222, 222, 12, 27, 6, 72, 12, 27, 6, - 247, 130, 12, 27, 6, 214, 12, 27, 6, 212, 12, 27, 6, 74, 12, 27, 6, 239, - 182, 12, 27, 6, 239, 76, 12, 27, 6, 149, 12, 27, 6, 185, 12, 27, 6, 199, - 12, 27, 6, 73, 12, 27, 6, 233, 244, 12, 27, 6, 232, 139, 12, 27, 6, 146, - 12, 27, 6, 193, 12, 27, 6, 227, 109, 12, 27, 6, 66, 12, 27, 6, 196, 12, - 27, 6, 224, 174, 12, 27, 6, 224, 73, 12, 27, 6, 224, 25, 12, 27, 6, 223, - 119, 12, 27, 3, 57, 12, 27, 3, 254, 27, 12, 27, 3, 252, 44, 12, 27, 3, - 222, 222, 12, 27, 3, 72, 12, 27, 3, 247, 130, 12, 27, 3, 214, 12, 27, 3, - 74, 12, 27, 3, 239, 182, 12, 27, 3, 239, 76, 12, 27, 3, 149, 12, 27, 3, - 185, 12, 27, 3, 199, 12, 27, 3, 73, 12, 27, 3, 233, 244, 12, 27, 3, 232, - 139, 12, 27, 3, 146, 12, 27, 3, 193, 12, 27, 3, 227, 109, 12, 27, 3, 66, - 12, 27, 3, 196, 12, 27, 3, 224, 174, 12, 27, 3, 224, 73, 12, 27, 3, 224, - 25, 12, 27, 3, 223, 119, 12, 18, 27, 6, 57, 12, 18, 27, 6, 254, 27, 12, - 18, 27, 6, 252, 44, 12, 18, 27, 6, 222, 222, 12, 18, 27, 6, 72, 12, 18, - 27, 6, 247, 130, 12, 18, 27, 6, 214, 12, 18, 27, 6, 212, 12, 18, 27, 6, - 74, 12, 18, 27, 6, 239, 182, 12, 18, 27, 6, 239, 76, 12, 18, 27, 6, 149, - 12, 18, 27, 6, 185, 12, 18, 27, 6, 199, 12, 18, 27, 6, 73, 12, 18, 27, 6, - 233, 244, 12, 18, 27, 6, 232, 139, 12, 18, 27, 6, 146, 12, 18, 27, 6, - 193, 12, 18, 27, 6, 227, 109, 12, 18, 27, 6, 66, 12, 18, 27, 6, 196, 12, - 18, 27, 6, 224, 174, 12, 18, 27, 6, 224, 73, 12, 18, 27, 6, 224, 25, 12, - 18, 27, 6, 223, 119, 12, 18, 27, 3, 57, 12, 18, 27, 3, 254, 27, 12, 18, - 27, 3, 252, 44, 12, 18, 27, 3, 222, 222, 12, 18, 27, 3, 72, 12, 18, 27, - 3, 247, 130, 12, 18, 27, 3, 214, 12, 18, 27, 3, 212, 12, 18, 27, 3, 74, - 12, 18, 27, 3, 239, 182, 12, 18, 27, 3, 239, 76, 12, 18, 27, 3, 149, 12, - 18, 27, 3, 185, 12, 18, 27, 3, 199, 12, 18, 27, 3, 73, 12, 18, 27, 3, - 233, 244, 12, 18, 27, 3, 232, 139, 12, 18, 27, 3, 146, 12, 18, 27, 3, - 193, 12, 18, 27, 3, 227, 109, 12, 18, 27, 3, 66, 12, 18, 27, 3, 196, 12, - 18, 27, 3, 224, 174, 12, 18, 27, 3, 224, 73, 12, 18, 27, 3, 224, 25, 12, - 18, 27, 3, 223, 119, 12, 95, 6, 57, 12, 95, 6, 252, 44, 12, 95, 6, 222, - 222, 12, 95, 6, 214, 12, 95, 6, 239, 182, 12, 95, 6, 239, 76, 12, 95, 6, - 199, 12, 95, 6, 73, 12, 95, 6, 233, 244, 12, 95, 6, 232, 139, 12, 95, 6, - 193, 12, 95, 6, 227, 109, 12, 95, 6, 66, 12, 95, 6, 196, 12, 95, 6, 224, - 174, 12, 95, 6, 224, 73, 12, 95, 6, 224, 25, 12, 95, 6, 223, 119, 12, 95, - 3, 57, 12, 95, 3, 254, 27, 12, 95, 3, 252, 44, 12, 95, 3, 222, 222, 12, - 95, 3, 247, 130, 12, 95, 3, 212, 12, 95, 3, 74, 12, 95, 3, 239, 182, 12, - 95, 3, 239, 76, 12, 95, 3, 149, 12, 95, 3, 185, 12, 95, 3, 199, 12, 95, - 3, 233, 244, 12, 95, 3, 232, 139, 12, 95, 3, 146, 12, 95, 3, 193, 12, 95, - 3, 227, 109, 12, 95, 3, 66, 12, 95, 3, 196, 12, 95, 3, 224, 174, 12, 95, - 3, 224, 73, 12, 95, 3, 224, 25, 12, 95, 3, 223, 119, 12, 18, 95, 6, 57, - 12, 18, 95, 6, 254, 27, 12, 18, 95, 6, 252, 44, 12, 18, 95, 6, 222, 222, - 12, 18, 95, 6, 72, 12, 18, 95, 6, 247, 130, 12, 18, 95, 6, 214, 12, 18, - 95, 6, 212, 12, 18, 95, 6, 74, 12, 18, 95, 6, 239, 182, 12, 18, 95, 6, - 239, 76, 12, 18, 95, 6, 149, 12, 18, 95, 6, 185, 12, 18, 95, 6, 199, 12, - 18, 95, 6, 73, 12, 18, 95, 6, 233, 244, 12, 18, 95, 6, 232, 139, 12, 18, - 95, 6, 146, 12, 18, 95, 6, 193, 12, 18, 95, 6, 227, 109, 12, 18, 95, 6, - 66, 12, 18, 95, 6, 196, 12, 18, 95, 6, 224, 174, 12, 18, 95, 6, 224, 73, - 12, 18, 95, 6, 224, 25, 12, 18, 95, 6, 223, 119, 12, 18, 95, 3, 57, 12, - 18, 95, 3, 254, 27, 12, 18, 95, 3, 252, 44, 12, 18, 95, 3, 222, 222, 12, - 18, 95, 3, 72, 12, 18, 95, 3, 247, 130, 12, 18, 95, 3, 214, 12, 18, 95, - 3, 212, 12, 18, 95, 3, 74, 12, 18, 95, 3, 239, 182, 12, 18, 95, 3, 239, - 76, 12, 18, 95, 3, 149, 12, 18, 95, 3, 185, 12, 18, 95, 3, 199, 12, 18, - 95, 3, 73, 12, 18, 95, 3, 233, 244, 12, 18, 95, 3, 232, 139, 12, 18, 95, - 3, 146, 12, 18, 95, 3, 193, 12, 18, 95, 3, 227, 109, 12, 18, 95, 3, 66, - 12, 18, 95, 3, 196, 12, 18, 95, 3, 224, 174, 12, 18, 95, 3, 224, 73, 12, - 18, 95, 3, 224, 25, 12, 18, 95, 3, 223, 119, 12, 110, 6, 57, 12, 110, 6, - 254, 27, 12, 110, 6, 222, 222, 12, 110, 6, 72, 12, 110, 6, 247, 130, 12, - 110, 6, 214, 12, 110, 6, 239, 182, 12, 110, 6, 239, 76, 12, 110, 6, 149, - 12, 110, 6, 185, 12, 110, 6, 199, 12, 110, 6, 73, 12, 110, 6, 233, 244, - 12, 110, 6, 232, 139, 12, 110, 6, 193, 12, 110, 6, 227, 109, 12, 110, 6, - 66, 12, 110, 6, 196, 12, 110, 6, 224, 174, 12, 110, 6, 224, 73, 12, 110, - 6, 224, 25, 12, 110, 3, 57, 12, 110, 3, 254, 27, 12, 110, 3, 252, 44, 12, - 110, 3, 222, 222, 12, 110, 3, 72, 12, 110, 3, 247, 130, 12, 110, 3, 214, - 12, 110, 3, 212, 12, 110, 3, 74, 12, 110, 3, 239, 182, 12, 110, 3, 239, - 76, 12, 110, 3, 149, 12, 110, 3, 185, 12, 110, 3, 199, 12, 110, 3, 73, - 12, 110, 3, 233, 244, 12, 110, 3, 232, 139, 12, 110, 3, 146, 12, 110, 3, - 193, 12, 110, 3, 227, 109, 12, 110, 3, 66, 12, 110, 3, 196, 12, 110, 3, - 224, 174, 12, 110, 3, 224, 73, 12, 110, 3, 224, 25, 12, 110, 3, 223, 119, - 12, 159, 6, 57, 12, 159, 6, 254, 27, 12, 159, 6, 222, 222, 12, 159, 6, - 72, 12, 159, 6, 247, 130, 12, 159, 6, 214, 12, 159, 6, 74, 12, 159, 6, - 239, 182, 12, 159, 6, 239, 76, 12, 159, 6, 149, 12, 159, 6, 185, 12, 159, - 6, 73, 12, 159, 6, 193, 12, 159, 6, 227, 109, 12, 159, 6, 66, 12, 159, 6, - 196, 12, 159, 6, 224, 174, 12, 159, 6, 224, 73, 12, 159, 6, 224, 25, 12, - 159, 3, 57, 12, 159, 3, 254, 27, 12, 159, 3, 252, 44, 12, 159, 3, 222, - 222, 12, 159, 3, 72, 12, 159, 3, 247, 130, 12, 159, 3, 214, 12, 159, 3, - 212, 12, 159, 3, 74, 12, 159, 3, 239, 182, 12, 159, 3, 239, 76, 12, 159, - 3, 149, 12, 159, 3, 185, 12, 159, 3, 199, 12, 159, 3, 73, 12, 159, 3, - 233, 244, 12, 159, 3, 232, 139, 12, 159, 3, 146, 12, 159, 3, 193, 12, - 159, 3, 227, 109, 12, 159, 3, 66, 12, 159, 3, 196, 12, 159, 3, 224, 174, - 12, 159, 3, 224, 73, 12, 159, 3, 224, 25, 12, 159, 3, 223, 119, 12, 18, - 110, 6, 57, 12, 18, 110, 6, 254, 27, 12, 18, 110, 6, 252, 44, 12, 18, - 110, 6, 222, 222, 12, 18, 110, 6, 72, 12, 18, 110, 6, 247, 130, 12, 18, - 110, 6, 214, 12, 18, 110, 6, 212, 12, 18, 110, 6, 74, 12, 18, 110, 6, - 239, 182, 12, 18, 110, 6, 239, 76, 12, 18, 110, 6, 149, 12, 18, 110, 6, - 185, 12, 18, 110, 6, 199, 12, 18, 110, 6, 73, 12, 18, 110, 6, 233, 244, - 12, 18, 110, 6, 232, 139, 12, 18, 110, 6, 146, 12, 18, 110, 6, 193, 12, - 18, 110, 6, 227, 109, 12, 18, 110, 6, 66, 12, 18, 110, 6, 196, 12, 18, - 110, 6, 224, 174, 12, 18, 110, 6, 224, 73, 12, 18, 110, 6, 224, 25, 12, - 18, 110, 6, 223, 119, 12, 18, 110, 3, 57, 12, 18, 110, 3, 254, 27, 12, - 18, 110, 3, 252, 44, 12, 18, 110, 3, 222, 222, 12, 18, 110, 3, 72, 12, - 18, 110, 3, 247, 130, 12, 18, 110, 3, 214, 12, 18, 110, 3, 212, 12, 18, - 110, 3, 74, 12, 18, 110, 3, 239, 182, 12, 18, 110, 3, 239, 76, 12, 18, - 110, 3, 149, 12, 18, 110, 3, 185, 12, 18, 110, 3, 199, 12, 18, 110, 3, - 73, 12, 18, 110, 3, 233, 244, 12, 18, 110, 3, 232, 139, 12, 18, 110, 3, - 146, 12, 18, 110, 3, 193, 12, 18, 110, 3, 227, 109, 12, 18, 110, 3, 66, - 12, 18, 110, 3, 196, 12, 18, 110, 3, 224, 174, 12, 18, 110, 3, 224, 73, - 12, 18, 110, 3, 224, 25, 12, 18, 110, 3, 223, 119, 12, 30, 6, 57, 12, 30, - 6, 254, 27, 12, 30, 6, 252, 44, 12, 30, 6, 222, 222, 12, 30, 6, 72, 12, - 30, 6, 247, 130, 12, 30, 6, 214, 12, 30, 6, 212, 12, 30, 6, 74, 12, 30, - 6, 239, 182, 12, 30, 6, 239, 76, 12, 30, 6, 149, 12, 30, 6, 185, 12, 30, - 6, 199, 12, 30, 6, 73, 12, 30, 6, 233, 244, 12, 30, 6, 232, 139, 12, 30, - 6, 146, 12, 30, 6, 193, 12, 30, 6, 227, 109, 12, 30, 6, 66, 12, 30, 6, - 196, 12, 30, 6, 224, 174, 12, 30, 6, 224, 73, 12, 30, 6, 224, 25, 12, 30, - 6, 223, 119, 12, 30, 3, 57, 12, 30, 3, 254, 27, 12, 30, 3, 252, 44, 12, - 30, 3, 222, 222, 12, 30, 3, 72, 12, 30, 3, 247, 130, 12, 30, 3, 214, 12, - 30, 3, 212, 12, 30, 3, 74, 12, 30, 3, 239, 182, 12, 30, 3, 239, 76, 12, - 30, 3, 149, 12, 30, 3, 185, 12, 30, 3, 199, 12, 30, 3, 73, 12, 30, 3, - 233, 244, 12, 30, 3, 232, 139, 12, 30, 3, 146, 12, 30, 3, 193, 12, 30, 3, - 227, 109, 12, 30, 3, 66, 12, 30, 3, 196, 12, 30, 3, 224, 174, 12, 30, 3, - 224, 73, 12, 30, 3, 224, 25, 12, 30, 3, 223, 119, 12, 30, 18, 6, 57, 12, - 30, 18, 6, 254, 27, 12, 30, 18, 6, 252, 44, 12, 30, 18, 6, 222, 222, 12, - 30, 18, 6, 72, 12, 30, 18, 6, 247, 130, 12, 30, 18, 6, 214, 12, 30, 18, - 6, 212, 12, 30, 18, 6, 74, 12, 30, 18, 6, 239, 182, 12, 30, 18, 6, 239, - 76, 12, 30, 18, 6, 149, 12, 30, 18, 6, 185, 12, 30, 18, 6, 199, 12, 30, - 18, 6, 73, 12, 30, 18, 6, 233, 244, 12, 30, 18, 6, 232, 139, 12, 30, 18, - 6, 146, 12, 30, 18, 6, 193, 12, 30, 18, 6, 227, 109, 12, 30, 18, 6, 66, - 12, 30, 18, 6, 196, 12, 30, 18, 6, 224, 174, 12, 30, 18, 6, 224, 73, 12, - 30, 18, 6, 224, 25, 12, 30, 18, 6, 223, 119, 12, 30, 18, 3, 57, 12, 30, - 18, 3, 254, 27, 12, 30, 18, 3, 252, 44, 12, 30, 18, 3, 222, 222, 12, 30, - 18, 3, 72, 12, 30, 18, 3, 247, 130, 12, 30, 18, 3, 214, 12, 30, 18, 3, - 212, 12, 30, 18, 3, 74, 12, 30, 18, 3, 239, 182, 12, 30, 18, 3, 239, 76, - 12, 30, 18, 3, 149, 12, 30, 18, 3, 185, 12, 30, 18, 3, 199, 12, 30, 18, - 3, 73, 12, 30, 18, 3, 233, 244, 12, 30, 18, 3, 232, 139, 12, 30, 18, 3, - 146, 12, 30, 18, 3, 193, 12, 30, 18, 3, 227, 109, 12, 30, 18, 3, 66, 12, - 30, 18, 3, 196, 12, 30, 18, 3, 224, 174, 12, 30, 18, 3, 224, 73, 12, 30, - 18, 3, 224, 25, 12, 30, 18, 3, 223, 119, 12, 30, 27, 6, 57, 12, 30, 27, - 6, 254, 27, 12, 30, 27, 6, 252, 44, 12, 30, 27, 6, 222, 222, 12, 30, 27, - 6, 72, 12, 30, 27, 6, 247, 130, 12, 30, 27, 6, 214, 12, 30, 27, 6, 212, - 12, 30, 27, 6, 74, 12, 30, 27, 6, 239, 182, 12, 30, 27, 6, 239, 76, 12, - 30, 27, 6, 149, 12, 30, 27, 6, 185, 12, 30, 27, 6, 199, 12, 30, 27, 6, - 73, 12, 30, 27, 6, 233, 244, 12, 30, 27, 6, 232, 139, 12, 30, 27, 6, 146, - 12, 30, 27, 6, 193, 12, 30, 27, 6, 227, 109, 12, 30, 27, 6, 66, 12, 30, - 27, 6, 196, 12, 30, 27, 6, 224, 174, 12, 30, 27, 6, 224, 73, 12, 30, 27, - 6, 224, 25, 12, 30, 27, 6, 223, 119, 12, 30, 27, 3, 57, 12, 30, 27, 3, - 254, 27, 12, 30, 27, 3, 252, 44, 12, 30, 27, 3, 222, 222, 12, 30, 27, 3, - 72, 12, 30, 27, 3, 247, 130, 12, 30, 27, 3, 214, 12, 30, 27, 3, 212, 12, - 30, 27, 3, 74, 12, 30, 27, 3, 239, 182, 12, 30, 27, 3, 239, 76, 12, 30, - 27, 3, 149, 12, 30, 27, 3, 185, 12, 30, 27, 3, 199, 12, 30, 27, 3, 73, - 12, 30, 27, 3, 233, 244, 12, 30, 27, 3, 232, 139, 12, 30, 27, 3, 146, 12, - 30, 27, 3, 193, 12, 30, 27, 3, 227, 109, 12, 30, 27, 3, 66, 12, 30, 27, - 3, 196, 12, 30, 27, 3, 224, 174, 12, 30, 27, 3, 224, 73, 12, 30, 27, 3, - 224, 25, 12, 30, 27, 3, 223, 119, 12, 30, 18, 27, 6, 57, 12, 30, 18, 27, - 6, 254, 27, 12, 30, 18, 27, 6, 252, 44, 12, 30, 18, 27, 6, 222, 222, 12, - 30, 18, 27, 6, 72, 12, 30, 18, 27, 6, 247, 130, 12, 30, 18, 27, 6, 214, - 12, 30, 18, 27, 6, 212, 12, 30, 18, 27, 6, 74, 12, 30, 18, 27, 6, 239, - 182, 12, 30, 18, 27, 6, 239, 76, 12, 30, 18, 27, 6, 149, 12, 30, 18, 27, - 6, 185, 12, 30, 18, 27, 6, 199, 12, 30, 18, 27, 6, 73, 12, 30, 18, 27, 6, - 233, 244, 12, 30, 18, 27, 6, 232, 139, 12, 30, 18, 27, 6, 146, 12, 30, - 18, 27, 6, 193, 12, 30, 18, 27, 6, 227, 109, 12, 30, 18, 27, 6, 66, 12, - 30, 18, 27, 6, 196, 12, 30, 18, 27, 6, 224, 174, 12, 30, 18, 27, 6, 224, - 73, 12, 30, 18, 27, 6, 224, 25, 12, 30, 18, 27, 6, 223, 119, 12, 30, 18, - 27, 3, 57, 12, 30, 18, 27, 3, 254, 27, 12, 30, 18, 27, 3, 252, 44, 12, - 30, 18, 27, 3, 222, 222, 12, 30, 18, 27, 3, 72, 12, 30, 18, 27, 3, 247, - 130, 12, 30, 18, 27, 3, 214, 12, 30, 18, 27, 3, 212, 12, 30, 18, 27, 3, - 74, 12, 30, 18, 27, 3, 239, 182, 12, 30, 18, 27, 3, 239, 76, 12, 30, 18, - 27, 3, 149, 12, 30, 18, 27, 3, 185, 12, 30, 18, 27, 3, 199, 12, 30, 18, - 27, 3, 73, 12, 30, 18, 27, 3, 233, 244, 12, 30, 18, 27, 3, 232, 139, 12, - 30, 18, 27, 3, 146, 12, 30, 18, 27, 3, 193, 12, 30, 18, 27, 3, 227, 109, - 12, 30, 18, 27, 3, 66, 12, 30, 18, 27, 3, 196, 12, 30, 18, 27, 3, 224, - 174, 12, 30, 18, 27, 3, 224, 73, 12, 30, 18, 27, 3, 224, 25, 12, 30, 18, - 27, 3, 223, 119, 12, 189, 6, 57, 12, 189, 6, 254, 27, 12, 189, 6, 252, - 44, 12, 189, 6, 222, 222, 12, 189, 6, 72, 12, 189, 6, 247, 130, 12, 189, - 6, 214, 12, 189, 6, 212, 12, 189, 6, 74, 12, 189, 6, 239, 182, 12, 189, - 6, 239, 76, 12, 189, 6, 149, 12, 189, 6, 185, 12, 189, 6, 199, 12, 189, - 6, 73, 12, 189, 6, 233, 244, 12, 189, 6, 232, 139, 12, 189, 6, 146, 12, - 189, 6, 193, 12, 189, 6, 227, 109, 12, 189, 6, 66, 12, 189, 6, 196, 12, - 189, 6, 224, 174, 12, 189, 6, 224, 73, 12, 189, 6, 224, 25, 12, 189, 6, - 223, 119, 12, 189, 3, 57, 12, 189, 3, 254, 27, 12, 189, 3, 252, 44, 12, - 189, 3, 222, 222, 12, 189, 3, 72, 12, 189, 3, 247, 130, 12, 189, 3, 214, - 12, 189, 3, 212, 12, 189, 3, 74, 12, 189, 3, 239, 182, 12, 189, 3, 239, - 76, 12, 189, 3, 149, 12, 189, 3, 185, 12, 189, 3, 199, 12, 189, 3, 73, - 12, 189, 3, 233, 244, 12, 189, 3, 232, 139, 12, 189, 3, 146, 12, 189, 3, - 193, 12, 189, 3, 227, 109, 12, 189, 3, 66, 12, 189, 3, 196, 12, 189, 3, - 224, 174, 12, 189, 3, 224, 73, 12, 189, 3, 224, 25, 12, 189, 3, 223, 119, - 12, 27, 3, 249, 139, 74, 12, 27, 3, 249, 139, 239, 182, 12, 18, 6, 254, - 205, 12, 18, 6, 252, 198, 12, 18, 6, 246, 169, 12, 18, 6, 250, 47, 12, - 18, 6, 247, 206, 12, 18, 6, 223, 88, 12, 18, 6, 247, 171, 12, 18, 6, 226, - 223, 12, 18, 6, 239, 215, 12, 18, 6, 239, 35, 12, 18, 6, 238, 16, 12, 18, - 6, 236, 66, 12, 18, 6, 234, 206, 12, 18, 6, 224, 64, 12, 18, 6, 234, 64, - 12, 18, 6, 233, 69, 12, 18, 6, 231, 182, 12, 18, 6, 226, 224, 98, 12, 18, - 6, 229, 2, 12, 18, 6, 227, 61, 12, 18, 6, 225, 110, 12, 18, 6, 233, 87, - 12, 18, 6, 251, 169, 12, 18, 6, 232, 183, 12, 18, 6, 234, 66, 12, 18, - 235, 250, 12, 18, 3, 254, 205, 12, 18, 3, 252, 198, 12, 18, 3, 246, 169, - 12, 18, 3, 250, 47, 12, 18, 3, 247, 206, 12, 18, 3, 223, 88, 12, 18, 3, - 247, 171, 12, 18, 3, 226, 223, 12, 18, 3, 239, 215, 12, 18, 3, 239, 35, - 12, 18, 3, 238, 16, 12, 18, 3, 236, 66, 12, 18, 3, 234, 206, 12, 18, 3, - 224, 64, 12, 18, 3, 234, 64, 12, 18, 3, 233, 69, 12, 18, 3, 231, 182, 12, - 18, 3, 35, 229, 2, 12, 18, 3, 229, 2, 12, 18, 3, 227, 61, 12, 18, 3, 225, - 110, 12, 18, 3, 233, 87, 12, 18, 3, 251, 169, 12, 18, 3, 232, 183, 12, - 18, 3, 234, 66, 12, 18, 233, 175, 249, 236, 12, 18, 247, 207, 98, 12, 18, - 226, 224, 98, 12, 18, 239, 36, 98, 12, 18, 233, 88, 98, 12, 18, 231, 183, - 98, 12, 18, 233, 70, 98, 12, 27, 6, 254, 205, 12, 27, 6, 252, 198, 12, - 27, 6, 246, 169, 12, 27, 6, 250, 47, 12, 27, 6, 247, 206, 12, 27, 6, 223, - 88, 12, 27, 6, 247, 171, 12, 27, 6, 226, 223, 12, 27, 6, 239, 215, 12, - 27, 6, 239, 35, 12, 27, 6, 238, 16, 12, 27, 6, 236, 66, 12, 27, 6, 234, - 206, 12, 27, 6, 224, 64, 12, 27, 6, 234, 64, 12, 27, 6, 233, 69, 12, 27, - 6, 231, 182, 12, 27, 6, 226, 224, 98, 12, 27, 6, 229, 2, 12, 27, 6, 227, - 61, 12, 27, 6, 225, 110, 12, 27, 6, 233, 87, 12, 27, 6, 251, 169, 12, 27, - 6, 232, 183, 12, 27, 6, 234, 66, 12, 27, 235, 250, 12, 27, 3, 254, 205, - 12, 27, 3, 252, 198, 12, 27, 3, 246, 169, 12, 27, 3, 250, 47, 12, 27, 3, - 247, 206, 12, 27, 3, 223, 88, 12, 27, 3, 247, 171, 12, 27, 3, 226, 223, - 12, 27, 3, 239, 215, 12, 27, 3, 239, 35, 12, 27, 3, 238, 16, 12, 27, 3, - 236, 66, 12, 27, 3, 234, 206, 12, 27, 3, 224, 64, 12, 27, 3, 234, 64, 12, - 27, 3, 233, 69, 12, 27, 3, 231, 182, 12, 27, 3, 35, 229, 2, 12, 27, 3, - 229, 2, 12, 27, 3, 227, 61, 12, 27, 3, 225, 110, 12, 27, 3, 233, 87, 12, - 27, 3, 251, 169, 12, 27, 3, 232, 183, 12, 27, 3, 234, 66, 12, 27, 233, - 175, 249, 236, 12, 27, 247, 207, 98, 12, 27, 226, 224, 98, 12, 27, 239, - 36, 98, 12, 27, 233, 88, 98, 12, 27, 231, 183, 98, 12, 27, 233, 70, 98, - 12, 18, 27, 6, 254, 205, 12, 18, 27, 6, 252, 198, 12, 18, 27, 6, 246, - 169, 12, 18, 27, 6, 250, 47, 12, 18, 27, 6, 247, 206, 12, 18, 27, 6, 223, - 88, 12, 18, 27, 6, 247, 171, 12, 18, 27, 6, 226, 223, 12, 18, 27, 6, 239, - 215, 12, 18, 27, 6, 239, 35, 12, 18, 27, 6, 238, 16, 12, 18, 27, 6, 236, - 66, 12, 18, 27, 6, 234, 206, 12, 18, 27, 6, 224, 64, 12, 18, 27, 6, 234, - 64, 12, 18, 27, 6, 233, 69, 12, 18, 27, 6, 231, 182, 12, 18, 27, 6, 226, - 224, 98, 12, 18, 27, 6, 229, 2, 12, 18, 27, 6, 227, 61, 12, 18, 27, 6, - 225, 110, 12, 18, 27, 6, 233, 87, 12, 18, 27, 6, 251, 169, 12, 18, 27, 6, - 232, 183, 12, 18, 27, 6, 234, 66, 12, 18, 27, 235, 250, 12, 18, 27, 3, - 254, 205, 12, 18, 27, 3, 252, 198, 12, 18, 27, 3, 246, 169, 12, 18, 27, - 3, 250, 47, 12, 18, 27, 3, 247, 206, 12, 18, 27, 3, 223, 88, 12, 18, 27, - 3, 247, 171, 12, 18, 27, 3, 226, 223, 12, 18, 27, 3, 239, 215, 12, 18, - 27, 3, 239, 35, 12, 18, 27, 3, 238, 16, 12, 18, 27, 3, 236, 66, 12, 18, - 27, 3, 234, 206, 12, 18, 27, 3, 224, 64, 12, 18, 27, 3, 234, 64, 12, 18, - 27, 3, 233, 69, 12, 18, 27, 3, 231, 182, 12, 18, 27, 3, 35, 229, 2, 12, - 18, 27, 3, 229, 2, 12, 18, 27, 3, 227, 61, 12, 18, 27, 3, 225, 110, 12, - 18, 27, 3, 233, 87, 12, 18, 27, 3, 251, 169, 12, 18, 27, 3, 232, 183, 12, - 18, 27, 3, 234, 66, 12, 18, 27, 233, 175, 249, 236, 12, 18, 27, 247, 207, - 98, 12, 18, 27, 226, 224, 98, 12, 18, 27, 239, 36, 98, 12, 18, 27, 233, - 88, 98, 12, 18, 27, 231, 183, 98, 12, 18, 27, 233, 70, 98, 12, 30, 18, 6, - 254, 205, 12, 30, 18, 6, 252, 198, 12, 30, 18, 6, 246, 169, 12, 30, 18, - 6, 250, 47, 12, 30, 18, 6, 247, 206, 12, 30, 18, 6, 223, 88, 12, 30, 18, - 6, 247, 171, 12, 30, 18, 6, 226, 223, 12, 30, 18, 6, 239, 215, 12, 30, - 18, 6, 239, 35, 12, 30, 18, 6, 238, 16, 12, 30, 18, 6, 236, 66, 12, 30, - 18, 6, 234, 206, 12, 30, 18, 6, 224, 64, 12, 30, 18, 6, 234, 64, 12, 30, - 18, 6, 233, 69, 12, 30, 18, 6, 231, 182, 12, 30, 18, 6, 226, 224, 98, 12, - 30, 18, 6, 229, 2, 12, 30, 18, 6, 227, 61, 12, 30, 18, 6, 225, 110, 12, - 30, 18, 6, 233, 87, 12, 30, 18, 6, 251, 169, 12, 30, 18, 6, 232, 183, 12, - 30, 18, 6, 234, 66, 12, 30, 18, 235, 250, 12, 30, 18, 3, 254, 205, 12, - 30, 18, 3, 252, 198, 12, 30, 18, 3, 246, 169, 12, 30, 18, 3, 250, 47, 12, - 30, 18, 3, 247, 206, 12, 30, 18, 3, 223, 88, 12, 30, 18, 3, 247, 171, 12, - 30, 18, 3, 226, 223, 12, 30, 18, 3, 239, 215, 12, 30, 18, 3, 239, 35, 12, - 30, 18, 3, 238, 16, 12, 30, 18, 3, 236, 66, 12, 30, 18, 3, 234, 206, 12, - 30, 18, 3, 224, 64, 12, 30, 18, 3, 234, 64, 12, 30, 18, 3, 233, 69, 12, - 30, 18, 3, 231, 182, 12, 30, 18, 3, 35, 229, 2, 12, 30, 18, 3, 229, 2, - 12, 30, 18, 3, 227, 61, 12, 30, 18, 3, 225, 110, 12, 30, 18, 3, 233, 87, - 12, 30, 18, 3, 251, 169, 12, 30, 18, 3, 232, 183, 12, 30, 18, 3, 234, 66, - 12, 30, 18, 233, 175, 249, 236, 12, 30, 18, 247, 207, 98, 12, 30, 18, - 226, 224, 98, 12, 30, 18, 239, 36, 98, 12, 30, 18, 233, 88, 98, 12, 30, - 18, 231, 183, 98, 12, 30, 18, 233, 70, 98, 12, 30, 18, 27, 6, 254, 205, - 12, 30, 18, 27, 6, 252, 198, 12, 30, 18, 27, 6, 246, 169, 12, 30, 18, 27, - 6, 250, 47, 12, 30, 18, 27, 6, 247, 206, 12, 30, 18, 27, 6, 223, 88, 12, - 30, 18, 27, 6, 247, 171, 12, 30, 18, 27, 6, 226, 223, 12, 30, 18, 27, 6, - 239, 215, 12, 30, 18, 27, 6, 239, 35, 12, 30, 18, 27, 6, 238, 16, 12, 30, - 18, 27, 6, 236, 66, 12, 30, 18, 27, 6, 234, 206, 12, 30, 18, 27, 6, 224, - 64, 12, 30, 18, 27, 6, 234, 64, 12, 30, 18, 27, 6, 233, 69, 12, 30, 18, - 27, 6, 231, 182, 12, 30, 18, 27, 6, 226, 224, 98, 12, 30, 18, 27, 6, 229, - 2, 12, 30, 18, 27, 6, 227, 61, 12, 30, 18, 27, 6, 225, 110, 12, 30, 18, - 27, 6, 233, 87, 12, 30, 18, 27, 6, 251, 169, 12, 30, 18, 27, 6, 232, 183, - 12, 30, 18, 27, 6, 234, 66, 12, 30, 18, 27, 235, 250, 12, 30, 18, 27, 3, - 254, 205, 12, 30, 18, 27, 3, 252, 198, 12, 30, 18, 27, 3, 246, 169, 12, - 30, 18, 27, 3, 250, 47, 12, 30, 18, 27, 3, 247, 206, 12, 30, 18, 27, 3, - 223, 88, 12, 30, 18, 27, 3, 247, 171, 12, 30, 18, 27, 3, 226, 223, 12, - 30, 18, 27, 3, 239, 215, 12, 30, 18, 27, 3, 239, 35, 12, 30, 18, 27, 3, - 238, 16, 12, 30, 18, 27, 3, 236, 66, 12, 30, 18, 27, 3, 234, 206, 12, 30, - 18, 27, 3, 224, 64, 12, 30, 18, 27, 3, 234, 64, 12, 30, 18, 27, 3, 233, - 69, 12, 30, 18, 27, 3, 231, 182, 12, 30, 18, 27, 3, 35, 229, 2, 12, 30, - 18, 27, 3, 229, 2, 12, 30, 18, 27, 3, 227, 61, 12, 30, 18, 27, 3, 225, - 110, 12, 30, 18, 27, 3, 233, 87, 12, 30, 18, 27, 3, 251, 169, 12, 30, 18, - 27, 3, 232, 183, 12, 30, 18, 27, 3, 234, 66, 12, 30, 18, 27, 233, 175, - 249, 236, 12, 30, 18, 27, 247, 207, 98, 12, 30, 18, 27, 226, 224, 98, 12, - 30, 18, 27, 239, 36, 98, 12, 30, 18, 27, 233, 88, 98, 12, 30, 18, 27, - 231, 183, 98, 12, 30, 18, 27, 233, 70, 98, 12, 18, 6, 249, 230, 12, 18, - 3, 249, 230, 12, 18, 21, 223, 89, 12, 18, 21, 118, 12, 18, 21, 113, 12, - 18, 21, 166, 12, 18, 21, 158, 12, 18, 21, 173, 12, 18, 21, 183, 12, 18, - 21, 194, 12, 18, 21, 187, 12, 18, 21, 192, 12, 159, 21, 223, 89, 12, 159, - 21, 118, 12, 159, 21, 113, 12, 159, 21, 166, 12, 159, 21, 158, 12, 159, - 21, 173, 12, 159, 21, 183, 12, 159, 21, 194, 12, 159, 21, 187, 12, 159, - 21, 192, 12, 30, 21, 223, 89, 12, 30, 21, 118, 12, 30, 21, 113, 12, 30, - 21, 166, 12, 30, 21, 158, 12, 30, 21, 173, 12, 30, 21, 183, 12, 30, 21, - 194, 12, 30, 21, 187, 12, 30, 21, 192, 12, 30, 18, 21, 223, 89, 12, 30, - 18, 21, 118, 12, 30, 18, 21, 113, 12, 30, 18, 21, 166, 12, 30, 18, 21, - 158, 12, 30, 18, 21, 173, 12, 30, 18, 21, 183, 12, 30, 18, 21, 194, 12, - 30, 18, 21, 187, 12, 30, 18, 21, 192, 12, 189, 21, 223, 89, 12, 189, 21, - 118, 12, 189, 21, 113, 12, 189, 21, 166, 12, 189, 21, 158, 12, 189, 21, - 173, 12, 189, 21, 183, 12, 189, 21, 194, 12, 189, 21, 187, 12, 189, 21, - 192, 237, 50, 75, 248, 45, 224, 111, 237, 50, 75, 228, 152, 224, 111, - 237, 50, 75, 224, 131, 224, 111, 237, 50, 75, 234, 245, 224, 111, 237, - 50, 75, 231, 231, 248, 118, 237, 50, 75, 245, 228, 248, 118, 237, 50, 75, - 63, 248, 118, 237, 50, 75, 168, 106, 251, 190, 237, 50, 75, 135, 106, - 251, 190, 237, 50, 75, 152, 106, 251, 190, 237, 50, 75, 246, 243, 106, - 251, 190, 237, 50, 75, 247, 37, 106, 251, 190, 237, 50, 75, 228, 217, - 106, 251, 190, 237, 50, 75, 229, 163, 106, 251, 190, 237, 50, 75, 248, - 20, 106, 251, 190, 237, 50, 75, 235, 61, 106, 251, 190, 237, 50, 75, 168, - 106, 253, 45, 237, 50, 75, 135, 106, 253, 45, 237, 50, 75, 152, 106, 253, - 45, 237, 50, 75, 246, 243, 106, 253, 45, 237, 50, 75, 247, 37, 106, 253, - 45, 237, 50, 75, 228, 217, 106, 253, 45, 237, 50, 75, 229, 163, 106, 253, - 45, 237, 50, 75, 248, 20, 106, 253, 45, 237, 50, 75, 235, 61, 106, 253, - 45, 237, 50, 75, 168, 106, 251, 105, 237, 50, 75, 135, 106, 251, 105, - 237, 50, 75, 152, 106, 251, 105, 237, 50, 75, 246, 243, 106, 251, 105, - 237, 50, 75, 247, 37, 106, 251, 105, 237, 50, 75, 228, 217, 106, 251, - 105, 237, 50, 75, 229, 163, 106, 251, 105, 237, 50, 75, 248, 20, 106, - 251, 105, 237, 50, 75, 235, 61, 106, 251, 105, 237, 50, 75, 233, 12, 237, - 50, 75, 234, 30, 237, 50, 75, 253, 46, 237, 50, 75, 251, 137, 237, 50, - 75, 228, 125, 237, 50, 75, 227, 229, 237, 50, 75, 254, 44, 237, 50, 75, - 224, 107, 237, 50, 75, 239, 111, 237, 50, 75, 253, 66, 109, 75, 169, 253, - 66, 109, 75, 244, 211, 109, 75, 244, 210, 109, 75, 244, 209, 109, 75, - 244, 208, 109, 75, 244, 207, 109, 75, 244, 206, 109, 75, 244, 205, 109, - 75, 244, 204, 109, 75, 244, 203, 109, 75, 244, 202, 109, 75, 244, 201, - 109, 75, 244, 200, 109, 75, 244, 199, 109, 75, 244, 198, 109, 75, 244, - 197, 109, 75, 244, 196, 109, 75, 244, 195, 109, 75, 244, 194, 109, 75, - 244, 193, 109, 75, 244, 192, 109, 75, 244, 191, 109, 75, 244, 190, 109, - 75, 244, 189, 109, 75, 244, 188, 109, 75, 244, 187, 109, 75, 244, 186, - 109, 75, 244, 185, 109, 75, 244, 184, 109, 75, 244, 183, 109, 75, 244, - 182, 109, 75, 244, 181, 109, 75, 244, 180, 109, 75, 244, 179, 109, 75, - 244, 178, 109, 75, 244, 177, 109, 75, 244, 176, 109, 75, 244, 175, 109, - 75, 244, 174, 109, 75, 244, 173, 109, 75, 244, 172, 109, 75, 244, 171, - 109, 75, 244, 170, 109, 75, 244, 169, 109, 75, 244, 168, 109, 75, 244, - 167, 109, 75, 244, 166, 109, 75, 244, 165, 109, 75, 244, 164, 109, 75, - 244, 163, 109, 75, 61, 253, 66, 109, 75, 225, 29, 109, 75, 225, 28, 109, - 75, 225, 27, 109, 75, 225, 26, 109, 75, 225, 25, 109, 75, 225, 24, 109, - 75, 225, 23, 109, 75, 225, 22, 109, 75, 225, 21, 109, 75, 225, 20, 109, - 75, 225, 19, 109, 75, 225, 18, 109, 75, 225, 17, 109, 75, 225, 16, 109, - 75, 225, 15, 109, 75, 225, 14, 109, 75, 225, 13, 109, 75, 225, 12, 109, - 75, 225, 11, 109, 75, 225, 10, 109, 75, 225, 9, 109, 75, 225, 8, 109, 75, - 225, 7, 109, 75, 225, 6, 109, 75, 225, 5, 109, 75, 225, 4, 109, 75, 225, - 3, 109, 75, 225, 2, 109, 75, 225, 1, 109, 75, 225, 0, 109, 75, 224, 255, - 109, 75, 224, 254, 109, 75, 224, 253, 109, 75, 224, 252, 109, 75, 224, - 251, 109, 75, 224, 250, 109, 75, 224, 249, 109, 75, 224, 248, 109, 75, - 224, 247, 109, 75, 224, 246, 109, 75, 224, 245, 109, 75, 224, 244, 109, - 75, 224, 243, 109, 75, 224, 242, 109, 75, 224, 241, 109, 75, 224, 240, - 109, 75, 224, 239, 109, 75, 224, 238, 109, 75, 224, 237, 9, 11, 244, 61, - 9, 11, 244, 60, 9, 11, 244, 59, 9, 11, 244, 58, 9, 11, 244, 57, 9, 11, - 244, 56, 9, 11, 244, 55, 9, 11, 244, 54, 9, 11, 244, 53, 9, 11, 244, 52, - 9, 11, 244, 51, 9, 11, 244, 50, 9, 11, 244, 49, 9, 11, 244, 48, 9, 11, - 244, 47, 9, 11, 244, 46, 9, 11, 244, 45, 9, 11, 244, 44, 9, 11, 244, 43, - 9, 11, 244, 42, 9, 11, 244, 41, 9, 11, 244, 40, 9, 11, 244, 39, 9, 11, - 244, 38, 9, 11, 244, 37, 9, 11, 244, 36, 9, 11, 244, 35, 9, 11, 244, 34, - 9, 11, 244, 33, 9, 11, 244, 32, 9, 11, 244, 31, 9, 11, 244, 30, 9, 11, - 244, 29, 9, 11, 244, 28, 9, 11, 244, 27, 9, 11, 244, 26, 9, 11, 244, 25, - 9, 11, 244, 24, 9, 11, 244, 23, 9, 11, 244, 22, 9, 11, 244, 21, 9, 11, - 244, 20, 9, 11, 244, 19, 9, 11, 244, 18, 9, 11, 244, 17, 9, 11, 244, 16, - 9, 11, 244, 15, 9, 11, 244, 14, 9, 11, 244, 13, 9, 11, 244, 12, 9, 11, - 244, 11, 9, 11, 244, 10, 9, 11, 244, 9, 9, 11, 244, 8, 9, 11, 244, 7, 9, - 11, 244, 6, 9, 11, 244, 5, 9, 11, 244, 4, 9, 11, 244, 3, 9, 11, 244, 2, - 9, 11, 244, 1, 9, 11, 244, 0, 9, 11, 243, 255, 9, 11, 243, 254, 9, 11, - 243, 253, 9, 11, 243, 252, 9, 11, 243, 251, 9, 11, 243, 250, 9, 11, 243, - 249, 9, 11, 243, 248, 9, 11, 243, 247, 9, 11, 243, 246, 9, 11, 243, 245, - 9, 11, 243, 244, 9, 11, 243, 243, 9, 11, 243, 242, 9, 11, 243, 241, 9, - 11, 243, 240, 9, 11, 243, 239, 9, 11, 243, 238, 9, 11, 243, 237, 9, 11, - 243, 236, 9, 11, 243, 235, 9, 11, 243, 234, 9, 11, 243, 233, 9, 11, 243, - 232, 9, 11, 243, 231, 9, 11, 243, 230, 9, 11, 243, 229, 9, 11, 243, 228, - 9, 11, 243, 227, 9, 11, 243, 226, 9, 11, 243, 225, 9, 11, 243, 224, 9, - 11, 243, 223, 9, 11, 243, 222, 9, 11, 243, 221, 9, 11, 243, 220, 9, 11, - 243, 219, 9, 11, 243, 218, 9, 11, 243, 217, 9, 11, 243, 216, 9, 11, 243, - 215, 9, 11, 243, 214, 9, 11, 243, 213, 9, 11, 243, 212, 9, 11, 243, 211, - 9, 11, 243, 210, 9, 11, 243, 209, 9, 11, 243, 208, 9, 11, 243, 207, 9, - 11, 243, 206, 9, 11, 243, 205, 9, 11, 243, 204, 9, 11, 243, 203, 9, 11, - 243, 202, 9, 11, 243, 201, 9, 11, 243, 200, 9, 11, 243, 199, 9, 11, 243, - 198, 9, 11, 243, 197, 9, 11, 243, 196, 9, 11, 243, 195, 9, 11, 243, 194, - 9, 11, 243, 193, 9, 11, 243, 192, 9, 11, 243, 191, 9, 11, 243, 190, 9, - 11, 243, 189, 9, 11, 243, 188, 9, 11, 243, 187, 9, 11, 243, 186, 9, 11, - 243, 185, 9, 11, 243, 184, 9, 11, 243, 183, 9, 11, 243, 182, 9, 11, 243, - 181, 9, 11, 243, 180, 9, 11, 243, 179, 9, 11, 243, 178, 9, 11, 243, 177, - 9, 11, 243, 176, 9, 11, 243, 175, 9, 11, 243, 174, 9, 11, 243, 173, 9, - 11, 243, 172, 9, 11, 243, 171, 9, 11, 243, 170, 9, 11, 243, 169, 9, 11, - 243, 168, 9, 11, 243, 167, 9, 11, 243, 166, 9, 11, 243, 165, 9, 11, 243, - 164, 9, 11, 243, 163, 9, 11, 243, 162, 9, 11, 243, 161, 9, 11, 243, 160, - 9, 11, 243, 159, 9, 11, 243, 158, 9, 11, 243, 157, 9, 11, 243, 156, 9, - 11, 243, 155, 9, 11, 243, 154, 9, 11, 243, 153, 9, 11, 243, 152, 9, 11, - 243, 151, 9, 11, 243, 150, 9, 11, 243, 149, 9, 11, 243, 148, 9, 11, 243, - 147, 9, 11, 243, 146, 9, 11, 243, 145, 9, 11, 243, 144, 9, 11, 243, 143, - 9, 11, 243, 142, 9, 11, 243, 141, 9, 11, 243, 140, 9, 11, 243, 139, 9, - 11, 243, 138, 9, 11, 243, 137, 9, 11, 243, 136, 9, 11, 243, 135, 9, 11, - 243, 134, 9, 11, 243, 133, 9, 11, 243, 132, 9, 11, 243, 131, 9, 11, 243, - 130, 9, 11, 243, 129, 9, 11, 243, 128, 9, 11, 243, 127, 9, 11, 243, 126, - 9, 11, 243, 125, 9, 11, 243, 124, 9, 11, 243, 123, 9, 11, 243, 122, 9, - 11, 243, 121, 9, 11, 243, 120, 9, 11, 243, 119, 9, 11, 243, 118, 9, 11, - 243, 117, 9, 11, 243, 116, 9, 11, 243, 115, 9, 11, 243, 114, 9, 11, 243, - 113, 9, 11, 243, 112, 9, 11, 243, 111, 9, 11, 243, 110, 9, 11, 243, 109, - 9, 11, 243, 108, 9, 11, 243, 107, 9, 11, 243, 106, 9, 11, 243, 105, 9, - 11, 243, 104, 9, 11, 243, 103, 9, 11, 243, 102, 9, 11, 243, 101, 9, 11, - 243, 100, 9, 11, 243, 99, 9, 11, 243, 98, 9, 11, 243, 97, 9, 11, 243, 96, - 9, 11, 243, 95, 9, 11, 243, 94, 9, 11, 243, 93, 9, 11, 243, 92, 9, 11, - 243, 91, 9, 11, 243, 90, 9, 11, 243, 89, 9, 11, 243, 88, 9, 11, 243, 87, - 9, 11, 243, 86, 9, 11, 243, 85, 9, 11, 243, 84, 9, 11, 243, 83, 9, 11, - 243, 82, 9, 11, 243, 81, 9, 11, 243, 80, 9, 11, 243, 79, 9, 11, 243, 78, - 9, 11, 243, 77, 9, 11, 243, 76, 9, 11, 243, 75, 9, 11, 243, 74, 9, 11, - 243, 73, 9, 11, 243, 72, 9, 11, 243, 71, 9, 11, 243, 70, 9, 11, 243, 69, - 9, 11, 243, 68, 9, 11, 243, 67, 9, 11, 243, 66, 9, 11, 243, 65, 9, 11, - 243, 64, 9, 11, 243, 63, 9, 11, 243, 62, 9, 11, 243, 61, 9, 11, 243, 60, - 9, 11, 243, 59, 9, 11, 243, 58, 9, 11, 243, 57, 9, 11, 243, 56, 9, 11, - 243, 55, 9, 11, 243, 54, 9, 11, 243, 53, 9, 11, 243, 52, 9, 11, 243, 51, - 9, 11, 243, 50, 9, 11, 243, 49, 9, 11, 243, 48, 9, 11, 243, 47, 9, 11, - 243, 46, 9, 11, 243, 45, 9, 11, 243, 44, 9, 11, 243, 43, 9, 11, 243, 42, - 9, 11, 243, 41, 9, 11, 243, 40, 9, 11, 243, 39, 9, 11, 243, 38, 9, 11, - 243, 37, 9, 11, 243, 36, 9, 11, 243, 35, 9, 11, 243, 34, 9, 11, 243, 33, - 9, 11, 243, 32, 9, 11, 243, 31, 9, 11, 243, 30, 9, 11, 243, 29, 9, 11, - 243, 28, 9, 11, 243, 27, 9, 11, 243, 26, 9, 11, 243, 25, 9, 11, 243, 24, - 9, 11, 243, 23, 9, 11, 243, 22, 9, 11, 243, 21, 9, 11, 243, 20, 9, 11, - 243, 19, 9, 11, 243, 18, 9, 11, 243, 17, 9, 11, 243, 16, 9, 11, 243, 15, - 9, 11, 243, 14, 9, 11, 243, 13, 9, 11, 243, 12, 9, 11, 243, 11, 9, 11, - 243, 10, 9, 11, 243, 9, 9, 11, 243, 8, 9, 11, 243, 7, 9, 11, 243, 6, 9, - 11, 243, 5, 9, 11, 243, 4, 9, 11, 243, 3, 9, 11, 243, 2, 9, 11, 243, 1, - 9, 11, 243, 0, 9, 11, 242, 255, 9, 11, 242, 254, 9, 11, 242, 253, 9, 11, - 242, 252, 9, 11, 242, 251, 9, 11, 242, 250, 9, 11, 242, 249, 9, 11, 242, - 248, 9, 11, 242, 247, 9, 11, 242, 246, 9, 11, 242, 245, 9, 11, 242, 244, - 9, 11, 242, 243, 9, 11, 242, 242, 9, 11, 242, 241, 9, 11, 242, 240, 9, - 11, 242, 239, 9, 11, 242, 238, 9, 11, 242, 237, 9, 11, 242, 236, 9, 11, - 242, 235, 9, 11, 242, 234, 9, 11, 242, 233, 9, 11, 242, 232, 9, 11, 242, - 231, 9, 11, 242, 230, 9, 11, 242, 229, 9, 11, 242, 228, 9, 11, 242, 227, - 9, 11, 242, 226, 9, 11, 242, 225, 9, 11, 242, 224, 9, 11, 242, 223, 9, - 11, 242, 222, 9, 11, 242, 221, 9, 11, 242, 220, 9, 11, 242, 219, 9, 11, - 242, 218, 9, 11, 242, 217, 9, 11, 242, 216, 9, 11, 242, 215, 9, 11, 242, - 214, 9, 11, 242, 213, 9, 11, 242, 212, 9, 11, 242, 211, 9, 11, 242, 210, - 9, 11, 242, 209, 9, 11, 242, 208, 9, 11, 242, 207, 9, 11, 242, 206, 9, - 11, 242, 205, 9, 11, 242, 204, 9, 11, 242, 203, 9, 11, 242, 202, 9, 11, - 242, 201, 9, 11, 242, 200, 9, 11, 242, 199, 9, 11, 242, 198, 9, 11, 242, - 197, 9, 11, 242, 196, 9, 11, 242, 195, 9, 11, 242, 194, 9, 11, 242, 193, - 9, 11, 242, 192, 9, 11, 242, 191, 9, 11, 242, 190, 9, 11, 242, 189, 9, - 11, 242, 188, 9, 11, 242, 187, 9, 11, 242, 186, 9, 11, 242, 185, 9, 11, - 242, 184, 9, 11, 242, 183, 9, 11, 242, 182, 9, 11, 242, 181, 9, 11, 242, - 180, 9, 11, 242, 179, 9, 11, 242, 178, 9, 11, 242, 177, 9, 11, 242, 176, - 9, 11, 242, 175, 9, 11, 242, 174, 9, 11, 242, 173, 9, 11, 242, 172, 9, - 11, 242, 171, 9, 11, 242, 170, 9, 11, 242, 169, 9, 11, 242, 168, 9, 11, - 242, 167, 9, 11, 242, 166, 9, 11, 242, 165, 9, 11, 242, 164, 9, 11, 242, - 163, 9, 11, 242, 162, 9, 11, 242, 161, 9, 11, 242, 160, 9, 11, 242, 159, - 9, 11, 242, 158, 9, 11, 242, 157, 9, 11, 242, 156, 9, 11, 242, 155, 9, - 11, 242, 154, 9, 11, 242, 153, 9, 11, 242, 152, 9, 11, 242, 151, 9, 11, - 242, 150, 9, 11, 242, 149, 9, 11, 242, 148, 9, 11, 242, 147, 9, 11, 242, - 146, 9, 11, 242, 145, 9, 11, 242, 144, 9, 11, 242, 143, 9, 11, 242, 142, - 9, 11, 242, 141, 9, 11, 242, 140, 9, 11, 242, 139, 9, 11, 242, 138, 9, - 11, 242, 137, 9, 11, 242, 136, 9, 11, 242, 135, 9, 11, 242, 134, 9, 11, - 242, 133, 9, 11, 242, 132, 9, 11, 242, 131, 9, 11, 242, 130, 9, 11, 242, - 129, 9, 11, 242, 128, 9, 11, 242, 127, 9, 11, 242, 126, 9, 11, 242, 125, - 9, 11, 242, 124, 9, 11, 242, 123, 9, 11, 242, 122, 9, 11, 242, 121, 9, - 11, 242, 120, 9, 11, 242, 119, 9, 11, 242, 118, 9, 11, 242, 117, 9, 11, - 242, 116, 9, 11, 242, 115, 9, 11, 242, 114, 9, 11, 242, 113, 9, 11, 242, - 112, 9, 11, 242, 111, 9, 11, 242, 110, 9, 11, 242, 109, 9, 11, 242, 108, - 9, 11, 242, 107, 9, 11, 242, 106, 9, 11, 242, 105, 9, 11, 242, 104, 9, - 11, 242, 103, 9, 11, 242, 102, 9, 11, 242, 101, 9, 11, 242, 100, 9, 11, - 242, 99, 9, 11, 242, 98, 9, 11, 242, 97, 9, 11, 242, 96, 9, 11, 242, 95, - 9, 11, 242, 94, 9, 11, 242, 93, 9, 11, 242, 92, 9, 11, 242, 91, 9, 11, - 242, 90, 9, 11, 242, 89, 9, 11, 242, 88, 9, 11, 242, 87, 9, 11, 242, 86, - 9, 11, 242, 85, 9, 11, 242, 84, 9, 11, 242, 83, 9, 11, 242, 82, 9, 11, - 242, 81, 9, 11, 242, 80, 9, 11, 242, 79, 9, 11, 242, 78, 9, 11, 242, 77, - 9, 11, 242, 76, 9, 11, 242, 75, 9, 11, 242, 74, 9, 11, 242, 73, 9, 11, - 242, 72, 9, 11, 242, 71, 9, 11, 242, 70, 9, 11, 242, 69, 9, 11, 242, 68, - 9, 11, 242, 67, 9, 11, 242, 66, 9, 11, 242, 65, 9, 11, 242, 64, 9, 11, - 242, 63, 9, 11, 242, 62, 9, 11, 242, 61, 9, 11, 242, 60, 9, 11, 242, 59, - 9, 11, 242, 58, 9, 11, 242, 57, 9, 11, 242, 56, 9, 11, 242, 55, 9, 11, - 242, 54, 9, 11, 242, 53, 9, 11, 242, 52, 9, 11, 242, 51, 9, 11, 242, 50, - 9, 11, 242, 49, 9, 11, 242, 48, 9, 11, 242, 47, 9, 11, 242, 46, 9, 11, - 242, 45, 9, 11, 242, 44, 9, 11, 242, 43, 9, 11, 242, 42, 9, 11, 242, 41, - 9, 11, 242, 40, 9, 11, 242, 39, 9, 11, 242, 38, 9, 11, 242, 37, 9, 11, - 242, 36, 9, 11, 242, 35, 9, 11, 242, 34, 9, 11, 242, 33, 9, 11, 242, 32, - 238, 11, 227, 95, 108, 228, 145, 108, 247, 149, 76, 108, 232, 57, 76, - 108, 65, 53, 108, 249, 150, 53, 108, 233, 123, 53, 108, 254, 193, 108, - 254, 144, 108, 42, 233, 180, 108, 41, 233, 180, 108, 254, 69, 108, 79, - 53, 108, 251, 54, 108, 244, 94, 108, 246, 218, 228, 38, 108, 228, 161, - 108, 21, 223, 89, 108, 21, 118, 108, 21, 113, 108, 21, 166, 108, 21, 158, - 108, 21, 173, 108, 21, 183, 108, 21, 194, 108, 21, 187, 108, 21, 192, - 108, 251, 61, 108, 229, 186, 108, 237, 213, 53, 108, 247, 204, 53, 108, - 245, 231, 53, 108, 232, 69, 76, 108, 251, 53, 254, 62, 108, 7, 6, 1, 57, - 108, 7, 6, 1, 254, 27, 108, 7, 6, 1, 252, 44, 108, 7, 6, 1, 222, 222, - 108, 7, 6, 1, 72, 108, 7, 6, 1, 247, 130, 108, 7, 6, 1, 214, 108, 7, 6, - 1, 212, 108, 7, 6, 1, 74, 108, 7, 6, 1, 239, 182, 108, 7, 6, 1, 239, 76, - 108, 7, 6, 1, 149, 108, 7, 6, 1, 185, 108, 7, 6, 1, 199, 108, 7, 6, 1, - 73, 108, 7, 6, 1, 233, 244, 108, 7, 6, 1, 232, 139, 108, 7, 6, 1, 146, - 108, 7, 6, 1, 193, 108, 7, 6, 1, 227, 109, 108, 7, 6, 1, 66, 108, 7, 6, - 1, 196, 108, 7, 6, 1, 224, 174, 108, 7, 6, 1, 224, 73, 108, 7, 6, 1, 224, - 25, 108, 7, 6, 1, 223, 119, 108, 42, 37, 104, 108, 231, 193, 228, 161, - 108, 41, 37, 104, 108, 251, 102, 255, 41, 108, 184, 237, 170, 108, 245, - 237, 255, 41, 108, 7, 3, 1, 57, 108, 7, 3, 1, 254, 27, 108, 7, 3, 1, 252, - 44, 108, 7, 3, 1, 222, 222, 108, 7, 3, 1, 72, 108, 7, 3, 1, 247, 130, - 108, 7, 3, 1, 214, 108, 7, 3, 1, 212, 108, 7, 3, 1, 74, 108, 7, 3, 1, - 239, 182, 108, 7, 3, 1, 239, 76, 108, 7, 3, 1, 149, 108, 7, 3, 1, 185, - 108, 7, 3, 1, 199, 108, 7, 3, 1, 73, 108, 7, 3, 1, 233, 244, 108, 7, 3, - 1, 232, 139, 108, 7, 3, 1, 146, 108, 7, 3, 1, 193, 108, 7, 3, 1, 227, - 109, 108, 7, 3, 1, 66, 108, 7, 3, 1, 196, 108, 7, 3, 1, 224, 174, 108, 7, - 3, 1, 224, 73, 108, 7, 3, 1, 224, 25, 108, 7, 3, 1, 223, 119, 108, 42, - 250, 223, 104, 108, 61, 237, 170, 108, 41, 250, 223, 104, 108, 205, 252, - 25, 227, 95, 38, 230, 114, 38, 230, 103, 38, 230, 92, 38, 230, 80, 38, - 230, 69, 38, 230, 58, 38, 230, 47, 38, 230, 36, 38, 230, 25, 38, 230, 17, - 38, 230, 16, 38, 230, 15, 38, 230, 14, 38, 230, 12, 38, 230, 11, 38, 230, - 10, 38, 230, 9, 38, 230, 8, 38, 230, 7, 38, 230, 6, 38, 230, 5, 38, 230, - 4, 38, 230, 3, 38, 230, 1, 38, 230, 0, 38, 229, 255, 38, 229, 254, 38, - 229, 253, 38, 229, 252, 38, 229, 251, 38, 229, 250, 38, 229, 249, 38, - 229, 248, 38, 229, 246, 38, 229, 245, 38, 229, 244, 38, 229, 243, 38, - 229, 242, 38, 229, 241, 38, 229, 240, 38, 229, 239, 38, 229, 238, 38, - 229, 237, 38, 229, 235, 38, 229, 234, 38, 229, 233, 38, 229, 232, 38, - 229, 231, 38, 229, 230, 38, 229, 229, 38, 229, 228, 38, 229, 227, 38, - 229, 226, 38, 229, 224, 38, 229, 223, 38, 229, 222, 38, 229, 221, 38, - 229, 220, 38, 229, 219, 38, 229, 218, 38, 229, 217, 38, 229, 216, 38, - 229, 215, 38, 229, 213, 38, 229, 212, 38, 229, 211, 38, 229, 210, 38, - 229, 209, 38, 229, 208, 38, 229, 207, 38, 229, 206, 38, 229, 205, 38, - 229, 204, 38, 229, 202, 38, 229, 201, 38, 229, 200, 38, 229, 199, 38, - 229, 198, 38, 229, 197, 38, 229, 196, 38, 229, 195, 38, 229, 194, 38, - 229, 193, 38, 230, 190, 38, 230, 189, 38, 230, 188, 38, 230, 187, 38, - 230, 186, 38, 230, 185, 38, 230, 184, 38, 230, 183, 38, 230, 182, 38, - 230, 181, 38, 230, 179, 38, 230, 178, 38, 230, 177, 38, 230, 176, 38, - 230, 175, 38, 230, 174, 38, 230, 173, 38, 230, 172, 38, 230, 171, 38, - 230, 170, 38, 230, 168, 38, 230, 167, 38, 230, 166, 38, 230, 165, 38, - 230, 164, 38, 230, 163, 38, 230, 162, 38, 230, 161, 38, 230, 160, 38, - 230, 159, 38, 230, 157, 38, 230, 156, 38, 230, 155, 38, 230, 154, 38, - 230, 153, 38, 230, 152, 38, 230, 151, 38, 230, 150, 38, 230, 149, 38, - 230, 148, 38, 230, 146, 38, 230, 145, 38, 230, 144, 38, 230, 143, 38, - 230, 142, 38, 230, 141, 38, 230, 140, 38, 230, 139, 38, 230, 138, 38, - 230, 137, 38, 230, 135, 38, 230, 134, 38, 230, 133, 38, 230, 132, 38, - 230, 131, 38, 230, 130, 38, 230, 129, 38, 230, 128, 38, 230, 127, 38, - 230, 126, 38, 230, 124, 38, 230, 123, 38, 230, 122, 38, 230, 121, 38, - 230, 120, 38, 230, 119, 38, 230, 118, 38, 230, 117, 38, 230, 116, 38, - 230, 115, 38, 230, 113, 38, 230, 112, 38, 230, 111, 38, 230, 110, 38, - 230, 109, 38, 230, 108, 38, 230, 107, 38, 230, 106, 38, 230, 105, 38, - 230, 104, 38, 230, 102, 38, 230, 101, 38, 230, 100, 38, 230, 99, 38, 230, - 98, 38, 230, 97, 38, 230, 96, 38, 230, 95, 38, 230, 94, 38, 230, 93, 38, - 230, 91, 38, 230, 90, 38, 230, 89, 38, 230, 88, 38, 230, 87, 38, 230, 86, - 38, 230, 85, 38, 230, 84, 38, 230, 83, 38, 230, 82, 38, 230, 79, 38, 230, - 78, 38, 230, 77, 38, 230, 76, 38, 230, 75, 38, 230, 74, 38, 230, 73, 38, - 230, 72, 38, 230, 71, 38, 230, 70, 38, 230, 68, 38, 230, 67, 38, 230, 66, - 38, 230, 65, 38, 230, 64, 38, 230, 63, 38, 230, 62, 38, 230, 61, 38, 230, - 60, 38, 230, 59, 38, 230, 57, 38, 230, 56, 38, 230, 55, 38, 230, 54, 38, - 230, 53, 38, 230, 52, 38, 230, 51, 38, 230, 50, 38, 230, 49, 38, 230, 48, - 38, 230, 46, 38, 230, 45, 38, 230, 44, 38, 230, 43, 38, 230, 42, 38, 230, - 41, 38, 230, 40, 38, 230, 39, 38, 230, 38, 38, 230, 37, 38, 230, 35, 38, - 230, 34, 38, 230, 33, 38, 230, 32, 38, 230, 31, 38, 230, 30, 38, 230, 29, - 38, 230, 28, 38, 230, 27, 38, 230, 26, 38, 230, 24, 38, 230, 23, 38, 230, - 22, 38, 230, 21, 38, 230, 20, 38, 230, 19, 38, 230, 18, + 0, 223, 254, 246, 95, 78, 228, 69, 78, 54, 55, 248, 155, 55, 229, 169, + 55, 254, 134, 254, 79, 42, 229, 229, 45, 229, 229, 253, 251, 88, 55, 250, + 168, 242, 120, 245, 90, 223, 136, 224, 17, 20, 217, 84, 20, 107, 20, 103, + 20, 160, 20, 154, 20, 174, 20, 182, 20, 191, 20, 185, 20, 190, 250, 175, + 225, 67, 235, 87, 55, 246, 154, 55, 244, 30, 55, 228, 82, 78, 250, 167, + 253, 244, 7, 6, 1, 60, 7, 6, 1, 253, 204, 7, 6, 1, 251, 202, 7, 6, 1, + 250, 46, 7, 6, 1, 73, 7, 6, 1, 246, 74, 7, 6, 1, 245, 67, 7, 6, 1, 243, + 225, 7, 6, 1, 72, 7, 6, 1, 237, 126, 7, 6, 1, 237, 17, 7, 6, 1, 153, 7, + 6, 1, 189, 7, 6, 1, 207, 7, 6, 1, 74, 7, 6, 1, 230, 59, 7, 6, 1, 228, + 163, 7, 6, 1, 152, 7, 6, 1, 198, 7, 6, 1, 222, 201, 7, 6, 1, 68, 7, 6, 1, + 216, 216, 7, 6, 1, 219, 40, 7, 6, 1, 218, 151, 7, 6, 1, 218, 90, 7, 6, 1, + 217, 157, 42, 40, 115, 227, 160, 224, 17, 45, 40, 115, 250, 217, 255, 0, + 109, 235, 43, 244, 37, 255, 0, 7, 3, 1, 60, 7, 3, 1, 253, 204, 7, 3, 1, + 251, 202, 7, 3, 1, 250, 46, 7, 3, 1, 73, 7, 3, 1, 246, 74, 7, 3, 1, 245, + 67, 7, 3, 1, 243, 225, 7, 3, 1, 72, 7, 3, 1, 237, 126, 7, 3, 1, 237, 17, + 7, 3, 1, 153, 7, 3, 1, 189, 7, 3, 1, 207, 7, 3, 1, 74, 7, 3, 1, 230, 59, + 7, 3, 1, 228, 163, 7, 3, 1, 152, 7, 3, 1, 198, 7, 3, 1, 222, 201, 7, 3, + 1, 68, 7, 3, 1, 216, 216, 7, 3, 1, 219, 40, 7, 3, 1, 218, 151, 7, 3, 1, + 218, 90, 7, 3, 1, 217, 157, 42, 250, 79, 115, 69, 235, 43, 45, 250, 79, + 115, 221, 179, 231, 203, 223, 254, 237, 170, 246, 95, 78, 251, 86, 55, + 229, 11, 55, 250, 78, 55, 218, 19, 55, 252, 1, 135, 226, 87, 55, 249, 13, + 250, 126, 55, 245, 215, 230, 103, 237, 211, 235, 112, 51, 254, 120, 228, + 69, 78, 212, 55, 224, 21, 242, 121, 227, 198, 55, 234, 115, 249, 77, 55, + 229, 42, 55, 223, 59, 103, 223, 59, 160, 254, 248, 255, 0, 233, 195, 55, + 229, 73, 55, 233, 193, 248, 145, 251, 92, 223, 59, 107, 234, 58, 230, + 103, 237, 211, 227, 106, 51, 254, 120, 228, 69, 78, 219, 55, 245, 108, + 131, 228, 89, 219, 55, 245, 108, 131, 243, 194, 219, 55, 245, 108, 148, + 228, 87, 237, 170, 228, 82, 78, 7, 6, 1, 112, 2, 244, 36, 7, 6, 1, 112, + 2, 168, 7, 6, 1, 112, 2, 250, 216, 7, 6, 1, 112, 2, 221, 179, 7, 6, 1, + 112, 2, 249, 13, 7, 6, 1, 112, 2, 227, 94, 50, 7, 6, 1, 254, 234, 7, 6, + 1, 251, 203, 2, 251, 92, 7, 6, 1, 178, 2, 244, 36, 7, 6, 1, 178, 2, 168, + 7, 6, 1, 178, 2, 250, 216, 7, 6, 1, 178, 2, 249, 13, 7, 6, 1, 242, 107, + 2, 244, 36, 7, 6, 1, 242, 107, 2, 168, 7, 6, 1, 242, 107, 2, 250, 216, 7, + 6, 1, 242, 107, 2, 249, 13, 7, 6, 1, 246, 118, 7, 6, 1, 233, 34, 2, 221, + 179, 7, 6, 1, 142, 2, 244, 36, 7, 6, 1, 142, 2, 168, 7, 6, 1, 142, 2, + 250, 216, 7, 6, 1, 142, 2, 221, 179, 7, 6, 1, 142, 2, 249, 13, 233, 84, + 55, 7, 6, 1, 142, 2, 92, 7, 6, 1, 105, 2, 244, 36, 7, 6, 1, 105, 2, 168, + 7, 6, 1, 105, 2, 250, 216, 7, 6, 1, 105, 2, 249, 13, 7, 6, 1, 218, 91, 2, + 168, 7, 6, 1, 221, 234, 7, 3, 1, 225, 1, 198, 7, 3, 1, 112, 2, 244, 36, + 7, 3, 1, 112, 2, 168, 7, 3, 1, 112, 2, 250, 216, 7, 3, 1, 112, 2, 221, + 179, 7, 3, 1, 112, 2, 249, 13, 7, 3, 1, 112, 2, 227, 94, 50, 7, 3, 1, + 254, 234, 7, 3, 1, 251, 203, 2, 251, 92, 7, 3, 1, 178, 2, 244, 36, 7, 3, + 1, 178, 2, 168, 7, 3, 1, 178, 2, 250, 216, 7, 3, 1, 178, 2, 249, 13, 7, + 3, 1, 242, 107, 2, 244, 36, 7, 3, 1, 242, 107, 2, 168, 7, 3, 1, 242, 107, + 2, 250, 216, 7, 3, 1, 242, 107, 2, 249, 13, 7, 3, 1, 246, 118, 7, 3, 1, + 233, 34, 2, 221, 179, 7, 3, 1, 142, 2, 244, 36, 7, 3, 1, 142, 2, 168, 7, + 3, 1, 142, 2, 250, 216, 7, 3, 1, 142, 2, 221, 179, 7, 3, 1, 142, 2, 249, + 13, 248, 188, 55, 7, 3, 1, 142, 2, 92, 7, 3, 1, 105, 2, 244, 36, 7, 3, 1, + 105, 2, 168, 7, 3, 1, 105, 2, 250, 216, 7, 3, 1, 105, 2, 249, 13, 7, 3, + 1, 218, 91, 2, 168, 7, 3, 1, 221, 234, 7, 3, 1, 218, 91, 2, 249, 13, 7, + 6, 1, 112, 2, 234, 115, 7, 3, 1, 112, 2, 234, 115, 7, 6, 1, 112, 2, 252, + 8, 7, 3, 1, 112, 2, 252, 8, 7, 6, 1, 112, 2, 230, 162, 7, 3, 1, 112, 2, + 230, 162, 7, 6, 1, 251, 203, 2, 168, 7, 3, 1, 251, 203, 2, 168, 7, 6, 1, + 251, 203, 2, 250, 216, 7, 3, 1, 251, 203, 2, 250, 216, 7, 6, 1, 251, 203, + 2, 61, 50, 7, 3, 1, 251, 203, 2, 61, 50, 7, 6, 1, 251, 203, 2, 251, 130, + 7, 3, 1, 251, 203, 2, 251, 130, 7, 6, 1, 250, 47, 2, 251, 130, 7, 3, 1, + 250, 47, 2, 251, 130, 7, 6, 1, 250, 47, 2, 92, 7, 3, 1, 250, 47, 2, 92, + 7, 6, 1, 178, 2, 234, 115, 7, 3, 1, 178, 2, 234, 115, 7, 6, 1, 178, 2, + 252, 8, 7, 3, 1, 178, 2, 252, 8, 7, 6, 1, 178, 2, 61, 50, 7, 3, 1, 178, + 2, 61, 50, 7, 6, 1, 178, 2, 230, 162, 7, 3, 1, 178, 2, 230, 162, 7, 6, 1, + 178, 2, 251, 130, 7, 3, 1, 178, 2, 251, 130, 7, 6, 1, 245, 68, 2, 250, + 216, 7, 3, 1, 245, 68, 2, 250, 216, 7, 6, 1, 245, 68, 2, 252, 8, 7, 3, 1, + 245, 68, 2, 252, 8, 7, 6, 1, 245, 68, 2, 61, 50, 7, 3, 1, 245, 68, 2, 61, + 50, 7, 6, 1, 245, 68, 2, 251, 92, 7, 3, 1, 245, 68, 2, 251, 92, 7, 6, 1, + 243, 226, 2, 250, 216, 7, 3, 1, 243, 226, 2, 250, 216, 7, 6, 1, 243, 226, + 2, 92, 7, 3, 1, 243, 226, 2, 92, 7, 6, 1, 242, 107, 2, 221, 179, 7, 3, 1, + 242, 107, 2, 221, 179, 7, 6, 1, 242, 107, 2, 234, 115, 7, 3, 1, 242, 107, + 2, 234, 115, 7, 6, 1, 242, 107, 2, 252, 8, 7, 3, 1, 242, 107, 2, 252, 8, + 7, 6, 1, 242, 107, 2, 230, 162, 7, 3, 1, 242, 107, 2, 230, 162, 7, 6, 1, + 242, 107, 2, 61, 50, 7, 3, 1, 248, 144, 72, 7, 6, 24, 237, 253, 7, 3, 24, + 237, 253, 7, 6, 1, 237, 127, 2, 250, 216, 7, 3, 1, 237, 127, 2, 250, 216, + 7, 6, 1, 237, 18, 2, 251, 92, 7, 3, 1, 237, 18, 2, 251, 92, 7, 3, 1, 236, + 17, 7, 6, 1, 235, 202, 2, 168, 7, 3, 1, 235, 202, 2, 168, 7, 6, 1, 235, + 202, 2, 251, 92, 7, 3, 1, 235, 202, 2, 251, 92, 7, 6, 1, 235, 202, 2, + 251, 130, 7, 3, 1, 235, 202, 2, 251, 130, 7, 6, 1, 235, 202, 2, 233, 193, + 248, 145, 7, 3, 1, 235, 202, 2, 233, 193, 248, 145, 7, 6, 1, 235, 202, 2, + 92, 7, 3, 1, 235, 202, 2, 92, 7, 6, 1, 233, 34, 2, 168, 7, 3, 1, 233, 34, + 2, 168, 7, 6, 1, 233, 34, 2, 251, 92, 7, 3, 1, 233, 34, 2, 251, 92, 7, 6, + 1, 233, 34, 2, 251, 130, 7, 3, 1, 233, 34, 2, 251, 130, 7, 3, 1, 233, 34, + 228, 246, 251, 213, 254, 79, 7, 6, 1, 246, 185, 7, 3, 1, 246, 185, 7, 6, + 1, 142, 2, 234, 115, 7, 3, 1, 142, 2, 234, 115, 7, 6, 1, 142, 2, 252, 8, + 7, 3, 1, 142, 2, 252, 8, 7, 6, 1, 142, 2, 51, 168, 7, 3, 1, 142, 2, 51, + 168, 7, 6, 24, 230, 167, 7, 3, 24, 230, 167, 7, 6, 1, 228, 39, 2, 168, 7, + 3, 1, 228, 39, 2, 168, 7, 6, 1, 228, 39, 2, 251, 92, 7, 3, 1, 228, 39, 2, + 251, 92, 7, 6, 1, 228, 39, 2, 251, 130, 7, 3, 1, 228, 39, 2, 251, 130, 7, + 6, 1, 226, 235, 2, 168, 7, 3, 1, 226, 235, 2, 168, 7, 6, 1, 226, 235, 2, + 250, 216, 7, 3, 1, 226, 235, 2, 250, 216, 7, 6, 1, 226, 235, 2, 251, 92, + 7, 3, 1, 226, 235, 2, 251, 92, 7, 6, 1, 226, 235, 2, 251, 130, 7, 3, 1, + 226, 235, 2, 251, 130, 7, 6, 1, 222, 202, 2, 251, 92, 7, 3, 1, 222, 202, + 2, 251, 92, 7, 6, 1, 222, 202, 2, 251, 130, 7, 3, 1, 222, 202, 2, 251, + 130, 7, 6, 1, 222, 202, 2, 92, 7, 3, 1, 222, 202, 2, 92, 7, 6, 1, 105, 2, + 221, 179, 7, 3, 1, 105, 2, 221, 179, 7, 6, 1, 105, 2, 234, 115, 7, 3, 1, + 105, 2, 234, 115, 7, 6, 1, 105, 2, 252, 8, 7, 3, 1, 105, 2, 252, 8, 7, 6, + 1, 105, 2, 227, 94, 50, 7, 3, 1, 105, 2, 227, 94, 50, 7, 6, 1, 105, 2, + 51, 168, 7, 3, 1, 105, 2, 51, 168, 7, 6, 1, 105, 2, 230, 162, 7, 3, 1, + 105, 2, 230, 162, 7, 6, 1, 219, 41, 2, 250, 216, 7, 3, 1, 219, 41, 2, + 250, 216, 7, 6, 1, 218, 91, 2, 250, 216, 7, 3, 1, 218, 91, 2, 250, 216, + 7, 6, 1, 218, 91, 2, 249, 13, 7, 6, 1, 217, 158, 2, 168, 7, 3, 1, 217, + 158, 2, 168, 7, 6, 1, 217, 158, 2, 61, 50, 7, 3, 1, 217, 158, 2, 61, 50, + 7, 6, 1, 217, 158, 2, 251, 130, 7, 3, 1, 217, 158, 2, 251, 130, 7, 3, 1, + 171, 198, 7, 3, 1, 49, 2, 92, 7, 6, 1, 49, 2, 96, 7, 6, 1, 49, 2, 221, + 117, 7, 3, 1, 49, 2, 221, 117, 7, 6, 1, 145, 182, 7, 3, 1, 145, 182, 7, + 6, 1, 230, 119, 74, 7, 6, 1, 251, 203, 2, 96, 7, 3, 1, 251, 203, 2, 96, + 7, 6, 1, 254, 212, 250, 46, 7, 6, 1, 250, 47, 2, 96, 7, 6, 1, 250, 47, 2, + 221, 117, 7, 3, 1, 250, 47, 2, 221, 117, 7, 3, 1, 215, 249, 62, 7, 6, 1, + 210, 73, 7, 6, 1, 226, 104, 7, 6, 1, 230, 119, 73, 7, 6, 1, 246, 75, 2, + 96, 7, 3, 1, 246, 75, 2, 96, 7, 6, 1, 245, 68, 2, 96, 7, 6, 1, 244, 231, + 7, 3, 1, 242, 154, 7, 6, 1, 237, 162, 7, 6, 1, 242, 107, 2, 92, 7, 6, 1, + 237, 18, 2, 96, 7, 3, 1, 237, 18, 2, 96, 7, 3, 1, 235, 202, 2, 135, 7, 3, + 1, 235, 158, 2, 92, 7, 6, 1, 215, 189, 7, 6, 1, 233, 34, 2, 42, 96, 7, 3, + 1, 233, 34, 2, 171, 45, 235, 106, 7, 6, 1, 142, 2, 233, 193, 221, 179, 7, + 6, 1, 142, 2, 242, 189, 7, 3, 1, 142, 2, 242, 189, 7, 6, 1, 230, 158, 7, + 3, 1, 230, 158, 7, 6, 1, 230, 60, 2, 96, 7, 3, 1, 230, 60, 2, 96, 7, 1, + 217, 202, 7, 6, 1, 145, 103, 7, 3, 1, 145, 103, 7, 6, 1, 246, 133, 7, 1, + 210, 246, 134, 234, 247, 7, 3, 1, 222, 202, 2, 230, 29, 96, 7, 6, 1, 222, + 202, 2, 96, 7, 3, 1, 222, 202, 2, 96, 7, 6, 1, 222, 202, 2, 227, 164, 96, + 7, 6, 1, 105, 2, 242, 189, 7, 3, 1, 105, 2, 242, 189, 7, 6, 1, 220, 57, + 7, 6, 1, 220, 11, 2, 96, 7, 6, 1, 218, 91, 2, 96, 7, 3, 1, 218, 91, 2, + 96, 7, 6, 1, 217, 158, 2, 92, 7, 3, 1, 217, 158, 2, 92, 7, 6, 1, 246, 76, + 7, 6, 1, 246, 77, 227, 159, 7, 3, 1, 246, 77, 227, 159, 7, 3, 1, 246, 77, + 2, 222, 135, 7, 1, 124, 2, 92, 7, 6, 1, 145, 174, 7, 3, 1, 145, 174, 7, + 1, 237, 170, 244, 73, 223, 137, 2, 92, 7, 1, 218, 154, 7, 1, 249, 55, + 250, 204, 7, 1, 235, 139, 250, 204, 7, 1, 254, 141, 250, 204, 7, 1, 227, + 164, 250, 204, 7, 6, 1, 247, 76, 2, 251, 130, 7, 6, 1, 250, 47, 2, 3, 1, + 217, 158, 2, 251, 130, 7, 3, 1, 247, 76, 2, 251, 130, 7, 6, 1, 235, 21, + 7, 6, 1, 235, 202, 2, 3, 1, 237, 126, 7, 3, 1, 235, 21, 7, 6, 1, 232, 19, + 7, 6, 1, 233, 34, 2, 3, 1, 237, 126, 7, 3, 1, 232, 19, 7, 6, 1, 112, 2, + 251, 130, 7, 3, 1, 112, 2, 251, 130, 7, 6, 1, 242, 107, 2, 251, 130, 7, + 3, 1, 242, 107, 2, 251, 130, 7, 6, 1, 142, 2, 251, 130, 7, 3, 1, 142, 2, + 251, 130, 7, 6, 1, 105, 2, 251, 130, 7, 3, 1, 105, 2, 251, 130, 7, 6, 1, + 105, 2, 249, 14, 25, 234, 115, 7, 3, 1, 105, 2, 249, 14, 25, 234, 115, 7, + 6, 1, 105, 2, 249, 14, 25, 168, 7, 3, 1, 105, 2, 249, 14, 25, 168, 7, 6, + 1, 105, 2, 249, 14, 25, 251, 130, 7, 3, 1, 105, 2, 249, 14, 25, 251, 130, + 7, 6, 1, 105, 2, 249, 14, 25, 244, 36, 7, 3, 1, 105, 2, 249, 14, 25, 244, + 36, 7, 3, 1, 215, 73, 7, 6, 1, 112, 2, 249, 14, 25, 234, 115, 7, 3, 1, + 112, 2, 249, 14, 25, 234, 115, 7, 6, 1, 112, 2, 61, 71, 25, 234, 115, 7, + 3, 1, 112, 2, 61, 71, 25, 234, 115, 7, 6, 1, 254, 235, 2, 234, 115, 7, 3, + 1, 254, 235, 2, 234, 115, 7, 6, 1, 245, 68, 2, 92, 7, 3, 1, 245, 68, 2, + 92, 7, 6, 1, 245, 68, 2, 251, 130, 7, 3, 1, 245, 68, 2, 251, 130, 7, 6, + 1, 237, 18, 2, 251, 130, 7, 3, 1, 237, 18, 2, 251, 130, 7, 6, 1, 142, 2, + 230, 162, 7, 3, 1, 142, 2, 230, 162, 7, 6, 1, 142, 2, 230, 163, 25, 234, + 115, 7, 3, 1, 142, 2, 230, 163, 25, 234, 115, 7, 6, 1, 246, 77, 2, 251, + 130, 7, 3, 1, 246, 77, 2, 251, 130, 7, 3, 1, 237, 127, 2, 251, 130, 7, 6, + 1, 247, 75, 7, 6, 1, 250, 47, 2, 3, 1, 217, 157, 7, 3, 1, 247, 75, 7, 6, + 1, 245, 68, 2, 168, 7, 3, 1, 245, 68, 2, 168, 7, 6, 1, 242, 152, 7, 6, 1, + 218, 154, 7, 6, 1, 233, 34, 2, 244, 36, 7, 3, 1, 233, 34, 2, 244, 36, 7, + 6, 1, 112, 2, 227, 94, 71, 25, 168, 7, 3, 1, 112, 2, 227, 94, 71, 25, + 168, 7, 6, 1, 254, 235, 2, 168, 7, 3, 1, 254, 235, 2, 168, 7, 6, 1, 142, + 2, 214, 25, 168, 7, 3, 1, 142, 2, 214, 25, 168, 7, 6, 1, 112, 2, 51, 244, + 36, 7, 3, 1, 112, 2, 51, 244, 36, 7, 6, 1, 112, 2, 237, 170, 252, 8, 7, + 3, 1, 112, 2, 237, 170, 252, 8, 7, 6, 1, 178, 2, 51, 244, 36, 7, 3, 1, + 178, 2, 51, 244, 36, 7, 6, 1, 178, 2, 237, 170, 252, 8, 7, 3, 1, 178, 2, + 237, 170, 252, 8, 7, 6, 1, 242, 107, 2, 51, 244, 36, 7, 3, 1, 242, 107, + 2, 51, 244, 36, 7, 6, 1, 242, 107, 2, 237, 170, 252, 8, 7, 3, 1, 242, + 107, 2, 237, 170, 252, 8, 7, 6, 1, 142, 2, 51, 244, 36, 7, 3, 1, 142, 2, + 51, 244, 36, 7, 6, 1, 142, 2, 237, 170, 252, 8, 7, 3, 1, 142, 2, 237, + 170, 252, 8, 7, 6, 1, 228, 39, 2, 51, 244, 36, 7, 3, 1, 228, 39, 2, 51, + 244, 36, 7, 6, 1, 228, 39, 2, 237, 170, 252, 8, 7, 3, 1, 228, 39, 2, 237, + 170, 252, 8, 7, 6, 1, 105, 2, 51, 244, 36, 7, 3, 1, 105, 2, 51, 244, 36, + 7, 6, 1, 105, 2, 237, 170, 252, 8, 7, 3, 1, 105, 2, 237, 170, 252, 8, 7, + 6, 1, 226, 235, 2, 250, 169, 56, 7, 3, 1, 226, 235, 2, 250, 169, 56, 7, + 6, 1, 222, 202, 2, 250, 169, 56, 7, 3, 1, 222, 202, 2, 250, 169, 56, 7, + 6, 1, 217, 218, 7, 3, 1, 217, 218, 7, 6, 1, 243, 226, 2, 251, 130, 7, 3, + 1, 243, 226, 2, 251, 130, 7, 6, 1, 233, 34, 2, 171, 45, 235, 106, 7, 3, + 1, 250, 47, 2, 250, 80, 7, 6, 1, 230, 86, 7, 3, 1, 230, 86, 7, 6, 1, 217, + 158, 2, 96, 7, 3, 1, 217, 158, 2, 96, 7, 6, 1, 112, 2, 61, 50, 7, 3, 1, + 112, 2, 61, 50, 7, 6, 1, 178, 2, 251, 92, 7, 3, 1, 178, 2, 251, 92, 7, 6, + 1, 142, 2, 249, 14, 25, 234, 115, 7, 3, 1, 142, 2, 249, 14, 25, 234, 115, + 7, 6, 1, 142, 2, 221, 180, 25, 234, 115, 7, 3, 1, 142, 2, 221, 180, 25, + 234, 115, 7, 6, 1, 142, 2, 61, 50, 7, 3, 1, 142, 2, 61, 50, 7, 6, 1, 142, + 2, 61, 71, 25, 234, 115, 7, 3, 1, 142, 2, 61, 71, 25, 234, 115, 7, 6, 1, + 218, 91, 2, 234, 115, 7, 3, 1, 218, 91, 2, 234, 115, 7, 3, 1, 235, 202, + 2, 250, 80, 7, 3, 1, 233, 34, 2, 250, 80, 7, 3, 1, 222, 202, 2, 250, 80, + 7, 3, 1, 248, 144, 237, 126, 7, 3, 1, 249, 135, 248, 233, 7, 3, 1, 228, + 99, 248, 233, 7, 6, 1, 112, 2, 92, 7, 6, 1, 251, 203, 2, 92, 7, 3, 1, + 251, 203, 2, 92, 7, 6, 1, 235, 202, 2, 135, 7, 6, 1, 222, 202, 2, 249, + 11, 92, 7, 3, 1, 226, 235, 2, 223, 33, 222, 135, 7, 3, 1, 217, 158, 2, + 223, 33, 222, 135, 7, 6, 1, 244, 73, 223, 136, 7, 3, 1, 244, 73, 223, + 136, 7, 6, 1, 49, 2, 92, 7, 6, 1, 105, 135, 7, 6, 1, 215, 216, 216, 7, 6, + 1, 178, 2, 92, 7, 3, 1, 178, 2, 92, 7, 6, 1, 237, 127, 2, 92, 7, 3, 1, + 237, 127, 2, 92, 7, 6, 1, 3, 228, 164, 2, 242, 247, 222, 135, 7, 3, 1, + 228, 164, 2, 242, 247, 222, 135, 7, 6, 1, 228, 39, 2, 92, 7, 3, 1, 228, + 39, 2, 92, 7, 6, 1, 218, 91, 2, 92, 7, 3, 1, 218, 91, 2, 92, 7, 3, 1, + 215, 60, 7, 3, 1, 254, 146, 7, 3, 1, 215, 254, 146, 7, 3, 1, 49, 2, 96, + 7, 3, 1, 230, 119, 74, 7, 3, 1, 251, 203, 2, 250, 80, 7, 3, 1, 250, 47, + 2, 222, 135, 7, 3, 1, 250, 47, 2, 96, 7, 3, 1, 210, 73, 7, 3, 1, 226, + 104, 7, 3, 1, 226, 105, 2, 96, 7, 3, 1, 230, 119, 73, 7, 3, 1, 210, 230, + 119, 73, 7, 3, 1, 210, 230, 119, 178, 2, 96, 7, 3, 1, 250, 197, 210, 230, + 119, 73, 7, 3, 1, 248, 144, 237, 127, 2, 92, 7, 3, 1, 245, 68, 2, 96, 7, + 3, 1, 102, 245, 67, 7, 1, 3, 6, 245, 67, 7, 3, 1, 244, 231, 7, 3, 1, 227, + 237, 242, 189, 7, 3, 1, 215, 243, 225, 7, 3, 1, 243, 226, 2, 96, 7, 3, 1, + 243, 137, 2, 96, 7, 3, 1, 242, 107, 2, 92, 7, 3, 1, 237, 162, 7, 1, 3, 6, + 72, 7, 3, 1, 235, 202, 2, 233, 193, 221, 179, 7, 3, 1, 235, 202, 2, 252, + 116, 7, 3, 1, 235, 202, 2, 227, 164, 96, 7, 3, 1, 235, 81, 7, 3, 1, 215, + 189, 7, 3, 1, 215, 234, 187, 2, 171, 235, 106, 7, 3, 1, 234, 187, 2, 96, + 7, 3, 1, 233, 34, 2, 42, 96, 7, 3, 1, 233, 34, 2, 227, 164, 96, 7, 1, 3, + 6, 207, 7, 3, 1, 252, 196, 74, 7, 1, 3, 6, 230, 167, 7, 3, 1, 250, 197, + 230, 143, 7, 3, 1, 229, 129, 7, 3, 1, 215, 152, 7, 3, 1, 215, 228, 39, 2, + 171, 235, 106, 7, 3, 1, 215, 228, 39, 2, 96, 7, 3, 1, 228, 39, 2, 171, + 235, 106, 7, 3, 1, 228, 39, 2, 222, 135, 7, 3, 1, 228, 39, 2, 245, 173, + 7, 3, 1, 210, 228, 39, 2, 245, 173, 7, 1, 3, 6, 152, 7, 1, 3, 6, 237, + 170, 152, 7, 3, 1, 226, 235, 2, 96, 7, 3, 1, 246, 133, 7, 3, 1, 248, 144, + 237, 127, 2, 214, 25, 96, 7, 3, 1, 223, 224, 210, 246, 133, 7, 3, 1, 246, + 134, 2, 250, 80, 7, 3, 1, 215, 222, 201, 7, 3, 1, 222, 202, 2, 227, 164, + 96, 7, 3, 1, 105, 135, 7, 3, 1, 220, 57, 7, 3, 1, 220, 11, 2, 96, 7, 3, + 1, 215, 216, 216, 7, 3, 1, 215, 219, 40, 7, 3, 1, 215, 218, 90, 7, 1, 3, + 6, 218, 90, 7, 3, 1, 217, 158, 2, 227, 164, 96, 7, 3, 1, 217, 158, 2, + 250, 80, 7, 3, 1, 246, 76, 7, 3, 1, 246, 77, 2, 250, 80, 7, 1, 244, 73, + 223, 136, 7, 1, 229, 133, 219, 70, 245, 100, 7, 1, 237, 170, 244, 73, + 223, 136, 7, 1, 223, 124, 251, 202, 7, 1, 252, 74, 250, 204, 7, 1, 3, 6, + 253, 204, 7, 3, 1, 250, 197, 230, 119, 73, 7, 1, 3, 6, 245, 68, 2, 96, 7, + 1, 3, 6, 243, 225, 7, 3, 1, 237, 127, 2, 250, 97, 7, 3, 1, 215, 237, 17, + 7, 1, 3, 6, 153, 7, 3, 1, 228, 164, 2, 96, 7, 1, 244, 73, 223, 137, 2, + 92, 7, 1, 210, 244, 73, 223, 137, 2, 92, 7, 3, 1, 247, 76, 248, 233, 7, + 3, 1, 249, 37, 248, 233, 7, 3, 1, 247, 76, 248, 234, 2, 250, 80, 7, 3, 1, + 221, 57, 248, 233, 7, 3, 1, 222, 55, 248, 233, 7, 3, 1, 222, 94, 248, + 234, 2, 250, 80, 7, 3, 1, 245, 213, 248, 233, 7, 3, 1, 234, 233, 248, + 233, 7, 3, 1, 234, 188, 248, 233, 7, 1, 252, 74, 229, 168, 7, 1, 252, 81, + 229, 168, 7, 3, 1, 215, 243, 226, 2, 245, 173, 7, 3, 1, 215, 243, 226, 2, + 245, 174, 25, 222, 135, 58, 1, 3, 243, 225, 58, 1, 3, 243, 226, 2, 96, + 58, 1, 3, 237, 126, 58, 1, 3, 152, 58, 1, 3, 215, 152, 58, 1, 3, 215, + 228, 39, 2, 96, 58, 1, 3, 6, 237, 170, 152, 58, 1, 3, 219, 40, 58, 1, 3, + 218, 90, 58, 1, 228, 235, 58, 1, 51, 228, 235, 58, 1, 215, 250, 168, 58, + 1, 254, 79, 58, 1, 210, 250, 168, 58, 1, 45, 144, 227, 93, 58, 1, 42, + 144, 227, 93, 58, 1, 244, 73, 223, 136, 58, 1, 210, 244, 73, 223, 136, + 58, 1, 42, 254, 20, 58, 1, 45, 254, 20, 58, 1, 108, 254, 20, 58, 1, 113, + 254, 20, 58, 1, 250, 217, 255, 0, 251, 130, 58, 1, 69, 235, 43, 58, 1, + 234, 115, 58, 1, 254, 248, 255, 0, 58, 1, 244, 37, 255, 0, 58, 1, 109, + 69, 235, 43, 58, 1, 109, 234, 115, 58, 1, 109, 244, 37, 255, 0, 58, 1, + 109, 254, 248, 255, 0, 58, 1, 221, 87, 250, 175, 58, 1, 144, 221, 87, + 250, 175, 58, 1, 251, 83, 45, 144, 227, 93, 58, 1, 251, 83, 42, 144, 227, + 93, 58, 1, 108, 222, 143, 58, 1, 113, 222, 143, 58, 1, 88, 55, 58, 1, + 233, 155, 55, 252, 8, 61, 50, 227, 94, 50, 230, 162, 3, 221, 179, 51, + 254, 248, 255, 0, 58, 1, 227, 148, 96, 58, 1, 250, 101, 255, 0, 58, 1, 3, + 244, 231, 58, 1, 3, 153, 58, 1, 3, 198, 58, 1, 3, 218, 151, 58, 1, 3, + 210, 244, 73, 223, 136, 58, 1, 246, 85, 145, 135, 58, 1, 116, 145, 135, + 58, 1, 233, 194, 145, 135, 58, 1, 109, 145, 135, 58, 1, 246, 84, 145, + 135, 58, 1, 217, 241, 249, 52, 145, 78, 58, 1, 218, 46, 249, 52, 145, 78, + 58, 1, 219, 68, 58, 1, 220, 84, 58, 1, 51, 254, 79, 58, 1, 109, 113, 254, + 20, 58, 1, 109, 108, 254, 20, 58, 1, 109, 42, 254, 20, 58, 1, 109, 45, + 254, 20, 58, 1, 109, 227, 93, 58, 1, 233, 193, 244, 37, 255, 0, 58, 1, + 233, 193, 51, 244, 37, 255, 0, 58, 1, 233, 193, 51, 254, 248, 255, 0, 58, + 1, 109, 221, 179, 58, 1, 227, 241, 250, 175, 58, 1, 252, 131, 116, 221, + 132, 58, 1, 246, 190, 116, 221, 132, 58, 1, 252, 131, 109, 221, 132, 58, + 1, 246, 190, 109, 221, 132, 58, 1, 224, 237, 58, 1, 230, 119, 224, 237, + 58, 1, 109, 42, 65, 36, 244, 37, 255, 0, 36, 254, 248, 255, 0, 36, 250, + 217, 255, 0, 36, 221, 179, 36, 234, 115, 36, 230, 73, 36, 252, 8, 36, 61, + 50, 36, 249, 13, 36, 242, 247, 50, 36, 227, 94, 50, 36, 51, 254, 248, + 255, 0, 36, 251, 130, 36, 69, 235, 44, 50, 36, 51, 69, 235, 44, 50, 36, + 51, 244, 37, 255, 0, 36, 251, 146, 36, 237, 170, 252, 8, 36, 215, 250, + 169, 50, 36, 250, 169, 50, 36, 210, 250, 169, 50, 36, 250, 169, 71, 227, + 109, 36, 244, 37, 255, 1, 56, 36, 254, 248, 255, 1, 56, 36, 42, 222, 144, + 56, 36, 45, 222, 144, 56, 36, 42, 254, 120, 50, 36, 242, 189, 36, 42, + 144, 227, 94, 56, 36, 108, 222, 144, 56, 36, 113, 222, 144, 56, 36, 88, + 5, 56, 36, 233, 155, 5, 56, 36, 230, 27, 242, 247, 56, 36, 227, 164, 242, + 247, 56, 36, 61, 56, 36, 249, 14, 56, 36, 227, 94, 56, 36, 250, 169, 56, + 36, 251, 92, 36, 230, 162, 36, 69, 235, 44, 56, 36, 252, 4, 56, 36, 237, + 170, 51, 254, 50, 56, 36, 251, 131, 56, 36, 250, 217, 255, 1, 56, 36, + 252, 9, 56, 36, 237, 170, 252, 9, 56, 36, 221, 180, 56, 36, 234, 116, 56, + 36, 109, 235, 43, 36, 51, 109, 235, 43, 36, 221, 180, 230, 74, 36, 224, + 192, 214, 230, 74, 36, 171, 214, 230, 74, 36, 224, 192, 224, 18, 230, 74, + 36, 171, 224, 18, 230, 74, 36, 45, 144, 227, 94, 56, 36, 237, 170, 252, + 4, 56, 36, 40, 56, 36, 226, 93, 56, 36, 218, 152, 50, 36, 69, 221, 179, + 36, 51, 230, 73, 36, 244, 37, 145, 78, 36, 254, 248, 145, 78, 36, 23, + 229, 163, 36, 23, 236, 33, 36, 23, 249, 8, 221, 123, 36, 23, 217, 207, + 36, 252, 4, 50, 36, 246, 154, 5, 56, 36, 51, 69, 235, 44, 56, 36, 42, + 254, 120, 56, 36, 212, 221, 180, 50, 36, 242, 251, 50, 36, 254, 151, 114, + 199, 50, 36, 42, 45, 76, 56, 36, 220, 53, 76, 56, 36, 244, 41, 237, 54, + 36, 45, 254, 21, 50, 36, 42, 144, 227, 94, 50, 36, 245, 210, 36, 218, + 152, 56, 36, 42, 254, 21, 56, 36, 45, 254, 21, 56, 36, 45, 254, 21, 25, + 108, 254, 21, 56, 36, 45, 144, 227, 94, 50, 36, 61, 71, 227, 109, 36, + 253, 252, 56, 36, 51, 227, 94, 56, 36, 217, 33, 50, 36, 51, 252, 9, 56, + 36, 51, 252, 8, 36, 51, 234, 115, 36, 51, 234, 116, 56, 36, 51, 221, 179, + 36, 51, 237, 170, 252, 8, 36, 51, 90, 76, 56, 36, 7, 3, 1, 60, 36, 7, 3, + 1, 73, 36, 7, 3, 1, 72, 36, 7, 3, 1, 74, 36, 7, 3, 1, 68, 36, 7, 3, 1, + 251, 202, 36, 7, 3, 1, 250, 46, 36, 7, 3, 1, 243, 225, 36, 7, 3, 1, 189, + 36, 7, 3, 1, 152, 36, 7, 3, 1, 222, 201, 36, 7, 3, 1, 216, 216, 36, 7, 3, + 1, 218, 151, 23, 6, 1, 243, 127, 23, 3, 1, 243, 127, 23, 6, 1, 254, 49, + 226, 142, 23, 3, 1, 254, 49, 226, 142, 23, 231, 107, 55, 23, 234, 237, + 231, 107, 55, 23, 6, 1, 230, 15, 248, 240, 23, 3, 1, 230, 15, 248, 240, + 23, 217, 207, 23, 3, 210, 234, 218, 224, 128, 100, 23, 3, 247, 143, 234, + 218, 224, 128, 100, 23, 3, 210, 247, 143, 234, 218, 224, 128, 100, 23, + 228, 82, 78, 23, 221, 123, 23, 249, 8, 221, 123, 23, 6, 1, 254, 147, 2, + 221, 123, 23, 254, 110, 222, 73, 23, 6, 1, 246, 157, 2, 221, 123, 23, 6, + 1, 246, 122, 2, 221, 123, 23, 6, 1, 237, 163, 2, 221, 123, 23, 6, 1, 230, + 142, 2, 221, 123, 23, 6, 1, 220, 58, 2, 221, 123, 23, 6, 1, 230, 144, 2, + 221, 123, 23, 3, 1, 237, 163, 2, 249, 8, 25, 221, 123, 23, 6, 1, 254, + 146, 23, 6, 1, 252, 102, 23, 6, 1, 244, 231, 23, 6, 1, 249, 62, 23, 6, 1, + 246, 156, 23, 6, 1, 217, 83, 23, 6, 1, 246, 121, 23, 6, 1, 222, 6, 23, 6, + 1, 237, 162, 23, 6, 1, 236, 221, 23, 6, 1, 235, 156, 23, 6, 1, 233, 99, + 23, 6, 1, 231, 144, 23, 6, 1, 218, 130, 23, 6, 1, 230, 141, 23, 6, 1, + 229, 108, 23, 6, 1, 227, 149, 23, 6, 1, 224, 127, 23, 6, 1, 222, 105, 23, + 6, 1, 220, 57, 23, 6, 1, 229, 129, 23, 6, 1, 251, 31, 23, 6, 1, 228, 212, + 23, 6, 1, 230, 143, 23, 6, 1, 237, 163, 2, 249, 7, 23, 6, 1, 220, 58, 2, + 249, 7, 23, 3, 1, 254, 147, 2, 221, 123, 23, 3, 1, 246, 157, 2, 221, 123, + 23, 3, 1, 246, 122, 2, 221, 123, 23, 3, 1, 237, 163, 2, 221, 123, 23, 3, + 1, 220, 58, 2, 249, 8, 25, 221, 123, 23, 3, 1, 254, 146, 23, 3, 1, 252, + 102, 23, 3, 1, 244, 231, 23, 3, 1, 249, 62, 23, 3, 1, 246, 156, 23, 3, 1, + 217, 83, 23, 3, 1, 246, 121, 23, 3, 1, 222, 6, 23, 3, 1, 237, 162, 23, 3, + 1, 236, 221, 23, 3, 1, 235, 156, 23, 3, 1, 233, 99, 23, 3, 1, 231, 144, + 23, 3, 1, 218, 130, 23, 3, 1, 230, 141, 23, 3, 1, 229, 108, 23, 3, 1, + 227, 149, 23, 3, 1, 39, 224, 127, 23, 3, 1, 224, 127, 23, 3, 1, 222, 105, + 23, 3, 1, 220, 57, 23, 3, 1, 229, 129, 23, 3, 1, 251, 31, 23, 3, 1, 228, + 212, 23, 3, 1, 230, 143, 23, 3, 1, 237, 163, 2, 249, 7, 23, 3, 1, 220, + 58, 2, 249, 7, 23, 3, 1, 230, 142, 2, 221, 123, 23, 3, 1, 220, 58, 2, + 221, 123, 23, 3, 1, 230, 144, 2, 221, 123, 23, 6, 236, 244, 100, 23, 252, + 103, 100, 23, 222, 7, 100, 23, 220, 58, 2, 242, 247, 100, 23, 220, 58, 2, + 254, 248, 25, 242, 247, 100, 23, 220, 58, 2, 249, 14, 25, 242, 247, 100, + 23, 229, 130, 100, 23, 229, 109, 100, 23, 236, 244, 100, 23, 1, 254, 49, + 236, 37, 23, 3, 1, 254, 49, 236, 37, 23, 1, 223, 144, 23, 3, 1, 223, 144, + 23, 1, 248, 240, 23, 3, 1, 248, 240, 23, 1, 236, 37, 23, 3, 1, 236, 37, + 23, 1, 226, 142, 23, 3, 1, 226, 142, 75, 6, 1, 224, 238, 75, 3, 1, 224, + 238, 75, 6, 1, 245, 219, 75, 3, 1, 245, 219, 75, 6, 1, 236, 135, 75, 3, + 1, 236, 135, 75, 6, 1, 242, 242, 75, 3, 1, 242, 242, 75, 6, 1, 244, 226, + 75, 3, 1, 244, 226, 75, 6, 1, 224, 211, 75, 3, 1, 224, 211, 75, 6, 1, + 249, 75, 75, 3, 1, 249, 75, 23, 236, 222, 100, 23, 227, 150, 100, 23, + 234, 218, 224, 128, 100, 23, 1, 217, 212, 23, 6, 222, 7, 100, 23, 234, + 218, 246, 157, 100, 23, 210, 234, 218, 246, 157, 100, 23, 6, 1, 224, 200, + 23, 3, 1, 224, 200, 23, 6, 234, 218, 224, 128, 100, 23, 6, 1, 226, 140, + 23, 3, 1, 226, 140, 23, 227, 150, 2, 214, 100, 23, 6, 210, 234, 218, 224, + 128, 100, 23, 6, 247, 143, 234, 218, 224, 128, 100, 23, 6, 210, 247, 143, + 234, 218, 224, 128, 100, 31, 6, 1, 238, 27, 2, 244, 36, 31, 6, 1, 237, + 166, 31, 6, 1, 248, 182, 31, 6, 1, 244, 78, 31, 6, 1, 220, 99, 238, 26, + 31, 6, 1, 247, 73, 31, 6, 1, 251, 211, 72, 31, 6, 1, 217, 250, 31, 6, 1, + 237, 114, 31, 6, 1, 235, 20, 31, 6, 1, 232, 15, 31, 6, 1, 221, 46, 31, 6, + 1, 236, 76, 31, 6, 1, 242, 107, 2, 244, 36, 31, 6, 1, 224, 192, 68, 31, + 6, 1, 247, 69, 31, 6, 1, 60, 31, 6, 1, 252, 144, 31, 6, 1, 219, 165, 31, + 6, 1, 244, 116, 31, 6, 1, 249, 92, 31, 6, 1, 238, 26, 31, 6, 1, 217, 72, + 31, 6, 1, 217, 92, 31, 6, 1, 72, 31, 6, 1, 224, 192, 72, 31, 6, 1, 175, + 31, 6, 1, 246, 217, 31, 6, 1, 246, 205, 31, 6, 1, 246, 197, 31, 6, 1, 74, + 31, 6, 1, 229, 198, 31, 6, 1, 246, 148, 31, 6, 1, 246, 138, 31, 6, 1, + 222, 87, 31, 6, 1, 68, 31, 6, 1, 246, 244, 31, 6, 1, 155, 31, 6, 1, 221, + 50, 31, 6, 1, 251, 46, 31, 6, 1, 225, 25, 31, 6, 1, 224, 248, 31, 6, 1, + 243, 181, 55, 31, 6, 1, 218, 7, 31, 6, 1, 224, 21, 55, 31, 6, 1, 73, 31, + 6, 1, 217, 200, 31, 6, 1, 184, 31, 3, 1, 60, 31, 3, 1, 252, 144, 31, 3, + 1, 219, 165, 31, 3, 1, 244, 116, 31, 3, 1, 249, 92, 31, 3, 1, 238, 26, + 31, 3, 1, 217, 72, 31, 3, 1, 217, 92, 31, 3, 1, 72, 31, 3, 1, 224, 192, + 72, 31, 3, 1, 175, 31, 3, 1, 246, 217, 31, 3, 1, 246, 205, 31, 3, 1, 246, + 197, 31, 3, 1, 74, 31, 3, 1, 229, 198, 31, 3, 1, 246, 148, 31, 3, 1, 246, + 138, 31, 3, 1, 222, 87, 31, 3, 1, 68, 31, 3, 1, 246, 244, 31, 3, 1, 155, + 31, 3, 1, 221, 50, 31, 3, 1, 251, 46, 31, 3, 1, 225, 25, 31, 3, 1, 224, + 248, 31, 3, 1, 243, 181, 55, 31, 3, 1, 218, 7, 31, 3, 1, 224, 21, 55, 31, + 3, 1, 73, 31, 3, 1, 217, 200, 31, 3, 1, 184, 31, 3, 1, 238, 27, 2, 244, + 36, 31, 3, 1, 237, 166, 31, 3, 1, 248, 182, 31, 3, 1, 244, 78, 31, 3, 1, + 220, 99, 238, 26, 31, 3, 1, 247, 73, 31, 3, 1, 251, 211, 72, 31, 3, 1, + 217, 250, 31, 3, 1, 237, 114, 31, 3, 1, 235, 20, 31, 3, 1, 232, 15, 31, + 3, 1, 221, 46, 31, 3, 1, 236, 76, 31, 3, 1, 242, 107, 2, 244, 36, 31, 3, + 1, 224, 192, 68, 31, 3, 1, 247, 69, 31, 6, 1, 230, 143, 31, 3, 1, 230, + 143, 31, 6, 1, 218, 36, 31, 3, 1, 218, 36, 31, 6, 1, 237, 160, 73, 31, 3, + 1, 237, 160, 73, 31, 6, 1, 235, 25, 217, 178, 31, 3, 1, 235, 25, 217, + 178, 31, 6, 1, 237, 160, 235, 25, 217, 178, 31, 3, 1, 237, 160, 235, 25, + 217, 178, 31, 6, 1, 252, 76, 217, 178, 31, 3, 1, 252, 76, 217, 178, 31, + 6, 1, 237, 160, 252, 76, 217, 178, 31, 3, 1, 237, 160, 252, 76, 217, 178, + 31, 6, 1, 236, 11, 31, 3, 1, 236, 11, 31, 6, 1, 228, 212, 31, 3, 1, 228, + 212, 31, 6, 1, 245, 171, 31, 3, 1, 245, 171, 31, 6, 1, 237, 128, 31, 3, + 1, 237, 128, 31, 6, 1, 237, 129, 2, 51, 244, 37, 255, 0, 31, 3, 1, 237, + 129, 2, 51, 244, 37, 255, 0, 31, 6, 1, 220, 102, 31, 3, 1, 220, 102, 31, + 6, 1, 227, 57, 230, 143, 31, 3, 1, 227, 57, 230, 143, 31, 6, 1, 230, 144, + 2, 221, 160, 31, 3, 1, 230, 144, 2, 221, 160, 31, 6, 1, 230, 92, 31, 3, + 1, 230, 92, 31, 6, 1, 236, 37, 31, 3, 1, 236, 37, 31, 221, 230, 55, 36, + 31, 221, 160, 36, 31, 230, 28, 36, 31, 193, 229, 39, 36, 31, 209, 229, + 39, 36, 31, 229, 25, 36, 31, 242, 162, 221, 230, 55, 36, 31, 233, 162, + 55, 31, 6, 1, 224, 192, 242, 107, 2, 222, 135, 31, 3, 1, 224, 192, 242, + 107, 2, 222, 135, 31, 6, 1, 225, 63, 55, 31, 3, 1, 225, 63, 55, 31, 6, 1, + 246, 149, 2, 221, 202, 31, 3, 1, 246, 149, 2, 221, 202, 31, 6, 1, 244, + 117, 2, 220, 56, 31, 3, 1, 244, 117, 2, 220, 56, 31, 6, 1, 244, 117, 2, + 92, 31, 3, 1, 244, 117, 2, 92, 31, 6, 1, 244, 117, 2, 233, 193, 96, 31, + 3, 1, 244, 117, 2, 233, 193, 96, 31, 6, 1, 217, 73, 2, 249, 48, 31, 3, 1, + 217, 73, 2, 249, 48, 31, 6, 1, 217, 93, 2, 249, 48, 31, 3, 1, 217, 93, 2, + 249, 48, 31, 6, 1, 206, 2, 249, 48, 31, 3, 1, 206, 2, 249, 48, 31, 6, 1, + 206, 2, 69, 92, 31, 3, 1, 206, 2, 69, 92, 31, 6, 1, 206, 2, 92, 31, 3, 1, + 206, 2, 92, 31, 6, 1, 252, 186, 175, 31, 3, 1, 252, 186, 175, 31, 6, 1, + 246, 198, 2, 249, 48, 31, 3, 1, 246, 198, 2, 249, 48, 31, 6, 24, 246, + 198, 244, 116, 31, 3, 24, 246, 198, 244, 116, 31, 6, 1, 229, 199, 2, 233, + 193, 96, 31, 3, 1, 229, 199, 2, 233, 193, 96, 31, 6, 1, 255, 6, 155, 31, + 3, 1, 255, 6, 155, 31, 6, 1, 246, 139, 2, 249, 48, 31, 3, 1, 246, 139, 2, + 249, 48, 31, 6, 1, 222, 88, 2, 249, 48, 31, 3, 1, 222, 88, 2, 249, 48, + 31, 6, 1, 223, 130, 68, 31, 3, 1, 223, 130, 68, 31, 6, 1, 223, 130, 105, + 2, 92, 31, 3, 1, 223, 130, 105, 2, 92, 31, 6, 1, 243, 214, 2, 249, 48, + 31, 3, 1, 243, 214, 2, 249, 48, 31, 6, 24, 222, 88, 221, 50, 31, 3, 24, + 222, 88, 221, 50, 31, 6, 1, 251, 47, 2, 249, 48, 31, 3, 1, 251, 47, 2, + 249, 48, 31, 6, 1, 251, 47, 2, 69, 92, 31, 3, 1, 251, 47, 2, 69, 92, 31, + 6, 1, 224, 222, 31, 3, 1, 224, 222, 31, 6, 1, 255, 6, 251, 46, 31, 3, 1, + 255, 6, 251, 46, 31, 6, 1, 255, 6, 251, 47, 2, 249, 48, 31, 3, 1, 255, 6, + 251, 47, 2, 249, 48, 31, 1, 230, 22, 31, 6, 1, 217, 73, 2, 252, 8, 31, 3, + 1, 217, 73, 2, 252, 8, 31, 6, 1, 206, 2, 96, 31, 3, 1, 206, 2, 96, 31, 6, + 1, 246, 218, 2, 222, 135, 31, 3, 1, 246, 218, 2, 222, 135, 31, 6, 1, 246, + 198, 2, 96, 31, 3, 1, 246, 198, 2, 96, 31, 6, 1, 246, 198, 2, 222, 135, + 31, 3, 1, 246, 198, 2, 222, 135, 31, 6, 1, 236, 144, 251, 46, 31, 3, 1, + 236, 144, 251, 46, 31, 6, 1, 246, 206, 2, 222, 135, 31, 3, 1, 246, 206, + 2, 222, 135, 31, 3, 1, 230, 22, 31, 6, 1, 112, 2, 252, 8, 31, 3, 1, 112, + 2, 252, 8, 31, 6, 1, 112, 2, 249, 13, 31, 3, 1, 112, 2, 249, 13, 31, 6, + 24, 112, 238, 26, 31, 3, 24, 112, 238, 26, 31, 6, 1, 238, 27, 2, 252, 8, + 31, 3, 1, 238, 27, 2, 252, 8, 31, 6, 1, 226, 104, 31, 3, 1, 226, 104, 31, + 6, 1, 226, 105, 2, 249, 13, 31, 3, 1, 226, 105, 2, 249, 13, 31, 6, 1, + 217, 73, 2, 249, 13, 31, 3, 1, 217, 73, 2, 249, 13, 31, 6, 1, 217, 93, 2, + 249, 13, 31, 3, 1, 217, 93, 2, 249, 13, 31, 6, 1, 255, 6, 247, 73, 31, 3, + 1, 255, 6, 247, 73, 31, 6, 1, 242, 107, 2, 234, 115, 31, 3, 1, 242, 107, + 2, 234, 115, 31, 6, 1, 242, 107, 2, 249, 13, 31, 3, 1, 242, 107, 2, 249, + 13, 31, 6, 1, 142, 2, 249, 13, 31, 3, 1, 142, 2, 249, 13, 31, 6, 1, 252, + 196, 74, 31, 3, 1, 252, 196, 74, 31, 6, 1, 252, 196, 142, 2, 249, 13, 31, + 3, 1, 252, 196, 142, 2, 249, 13, 31, 6, 1, 178, 2, 249, 13, 31, 3, 1, + 178, 2, 249, 13, 31, 6, 1, 105, 2, 234, 115, 31, 3, 1, 105, 2, 234, 115, + 31, 6, 1, 105, 2, 249, 13, 31, 3, 1, 105, 2, 249, 13, 31, 6, 1, 105, 2, + 51, 168, 31, 3, 1, 105, 2, 51, 168, 31, 6, 1, 251, 47, 2, 249, 13, 31, 3, + 1, 251, 47, 2, 249, 13, 31, 6, 1, 244, 117, 2, 249, 48, 31, 3, 1, 244, + 117, 2, 249, 48, 31, 6, 1, 218, 8, 2, 249, 13, 31, 3, 1, 218, 8, 2, 249, + 13, 31, 6, 1, 244, 117, 2, 214, 25, 96, 31, 3, 1, 244, 117, 2, 214, 25, + 96, 31, 6, 1, 243, 214, 2, 96, 31, 3, 1, 243, 214, 2, 96, 31, 6, 1, 243, + 214, 2, 92, 31, 3, 1, 243, 214, 2, 92, 31, 6, 1, 236, 45, 249, 92, 31, 3, + 1, 236, 45, 249, 92, 31, 6, 1, 236, 45, 248, 182, 31, 3, 1, 236, 45, 248, + 182, 31, 6, 1, 236, 45, 217, 25, 31, 3, 1, 236, 45, 217, 25, 31, 6, 1, + 236, 45, 247, 67, 31, 3, 1, 236, 45, 247, 67, 31, 6, 1, 236, 45, 235, 20, + 31, 3, 1, 236, 45, 235, 20, 31, 6, 1, 236, 45, 232, 15, 31, 3, 1, 236, + 45, 232, 15, 31, 6, 1, 236, 45, 224, 67, 31, 3, 1, 236, 45, 224, 67, 31, + 6, 1, 236, 45, 221, 156, 31, 3, 1, 236, 45, 221, 156, 31, 6, 1, 210, 217, + 92, 31, 3, 1, 210, 217, 92, 31, 6, 1, 246, 218, 2, 96, 31, 3, 1, 246, + 218, 2, 96, 31, 6, 1, 235, 79, 31, 3, 1, 235, 79, 31, 6, 1, 227, 151, 31, + 3, 1, 227, 151, 31, 6, 1, 218, 65, 31, 3, 1, 218, 65, 31, 6, 1, 228, 155, + 31, 3, 1, 228, 155, 31, 6, 1, 218, 227, 31, 3, 1, 218, 227, 31, 6, 1, + 254, 165, 175, 31, 3, 1, 254, 165, 175, 31, 6, 1, 246, 218, 2, 233, 193, + 96, 31, 3, 1, 246, 218, 2, 233, 193, 96, 31, 6, 1, 246, 198, 2, 233, 193, + 96, 31, 3, 1, 246, 198, 2, 233, 193, 96, 31, 6, 1, 229, 199, 2, 249, 48, + 31, 3, 1, 229, 199, 2, 249, 48, 132, 6, 1, 253, 209, 132, 6, 1, 252, 114, + 132, 6, 1, 244, 93, 132, 6, 1, 249, 207, 132, 6, 1, 246, 254, 132, 6, 1, + 217, 114, 132, 6, 1, 246, 239, 132, 6, 1, 246, 123, 132, 6, 1, 101, 132, + 6, 1, 217, 72, 132, 6, 1, 237, 200, 132, 6, 1, 235, 23, 132, 6, 1, 218, + 133, 132, 6, 1, 251, 169, 132, 6, 1, 236, 168, 132, 6, 1, 243, 4, 132, 6, + 1, 237, 123, 132, 6, 1, 244, 124, 132, 6, 1, 251, 42, 132, 6, 1, 233, + 251, 132, 6, 1, 217, 250, 132, 6, 1, 231, 174, 132, 6, 1, 225, 25, 132, + 6, 1, 219, 72, 132, 6, 1, 251, 69, 132, 6, 1, 229, 187, 132, 6, 1, 237, + 100, 132, 6, 1, 203, 132, 6, 1, 226, 77, 132, 6, 1, 219, 96, 132, 6, 1, + 221, 158, 132, 6, 1, 227, 196, 132, 6, 1, 250, 182, 132, 6, 1, 217, 236, + 132, 6, 1, 229, 61, 132, 6, 1, 236, 178, 132, 6, 1, 230, 161, 132, 6, 1, + 245, 221, 132, 58, 1, 42, 144, 227, 93, 132, 254, 79, 132, 246, 201, 78, + 132, 246, 95, 78, 132, 250, 168, 132, 228, 82, 78, 132, 255, 7, 78, 132, + 3, 1, 253, 209, 132, 3, 1, 252, 114, 132, 3, 1, 244, 93, 132, 3, 1, 249, + 207, 132, 3, 1, 246, 254, 132, 3, 1, 217, 114, 132, 3, 1, 246, 239, 132, + 3, 1, 246, 123, 132, 3, 1, 101, 132, 3, 1, 217, 72, 132, 3, 1, 237, 200, + 132, 3, 1, 235, 23, 132, 3, 1, 218, 133, 132, 3, 1, 251, 169, 132, 3, 1, + 236, 168, 132, 3, 1, 243, 4, 132, 3, 1, 237, 123, 132, 3, 1, 244, 124, + 132, 3, 1, 251, 42, 132, 3, 1, 233, 251, 132, 3, 1, 217, 250, 132, 3, 1, + 231, 174, 132, 3, 1, 225, 25, 132, 3, 1, 219, 72, 132, 3, 1, 251, 69, + 132, 3, 1, 229, 187, 132, 3, 1, 237, 100, 132, 3, 1, 203, 132, 3, 1, 226, + 77, 132, 3, 1, 219, 96, 132, 3, 1, 221, 158, 132, 3, 1, 227, 196, 132, 3, + 1, 250, 182, 132, 3, 1, 217, 236, 132, 3, 1, 229, 61, 132, 3, 1, 236, + 178, 132, 3, 1, 230, 161, 132, 3, 1, 245, 221, 132, 3, 24, 246, 255, 217, + 236, 132, 245, 90, 223, 136, 132, 242, 121, 87, 255, 1, 246, 116, 87, + 255, 1, 226, 78, 87, 255, 1, 225, 12, 87, 255, 1, 217, 102, 228, 138, 87, + 255, 1, 217, 102, 244, 246, 87, 255, 1, 221, 168, 87, 255, 1, 227, 158, + 87, 255, 1, 217, 101, 87, 255, 1, 229, 219, 87, 255, 1, 218, 0, 87, 255, + 1, 222, 41, 87, 255, 1, 244, 171, 87, 255, 1, 244, 172, 233, 70, 87, 255, + 1, 244, 169, 87, 255, 1, 228, 139, 229, 242, 87, 255, 1, 222, 70, 244, + 185, 87, 255, 1, 229, 202, 87, 255, 1, 253, 239, 243, 206, 87, 255, 1, + 233, 79, 87, 255, 1, 234, 104, 87, 255, 1, 233, 245, 87, 255, 1, 233, + 246, 236, 179, 87, 255, 1, 249, 153, 87, 255, 1, 228, 150, 87, 255, 1, + 222, 70, 228, 134, 87, 255, 1, 218, 10, 252, 115, 217, 217, 87, 255, 1, + 230, 149, 87, 255, 1, 237, 241, 87, 255, 1, 249, 76, 87, 255, 1, 217, 31, + 87, 164, 234, 54, 250, 221, 87, 229, 32, 224, 224, 87, 229, 32, 243, 172, + 226, 78, 87, 229, 32, 243, 172, 229, 214, 87, 229, 32, 243, 172, 228, + 143, 87, 229, 32, 243, 94, 87, 229, 32, 221, 48, 87, 229, 32, 226, 78, + 87, 229, 32, 229, 214, 87, 229, 32, 228, 143, 87, 229, 32, 242, 254, 87, + 229, 32, 242, 255, 243, 174, 35, 219, 169, 87, 229, 32, 228, 85, 87, 229, + 32, 249, 194, 156, 234, 77, 87, 229, 32, 233, 237, 87, 228, 197, 234, 76, + 87, 229, 32, 227, 248, 87, 228, 197, 229, 220, 87, 229, 32, 224, 210, + 248, 145, 87, 229, 32, 224, 113, 248, 145, 87, 228, 197, 224, 22, 229, + 216, 87, 164, 220, 60, 248, 145, 87, 164, 234, 237, 248, 145, 87, 228, + 197, 231, 104, 243, 205, 87, 229, 32, 228, 144, 228, 138, 87, 1, 254, + 168, 87, 1, 252, 104, 87, 1, 244, 91, 87, 1, 249, 177, 87, 1, 243, 162, + 87, 1, 219, 169, 87, 1, 217, 95, 87, 1, 243, 128, 87, 1, 222, 50, 87, 1, + 217, 220, 87, 1, 39, 236, 246, 87, 1, 236, 246, 87, 1, 235, 152, 87, 1, + 39, 234, 1, 87, 1, 234, 1, 87, 1, 39, 231, 103, 87, 1, 231, 103, 87, 1, + 226, 145, 87, 1, 253, 207, 87, 1, 39, 229, 198, 87, 1, 229, 198, 87, 1, + 39, 221, 51, 87, 1, 221, 51, 87, 1, 228, 107, 87, 1, 227, 174, 87, 1, + 224, 209, 87, 1, 222, 102, 87, 24, 217, 248, 51, 219, 169, 87, 24, 217, + 248, 219, 170, 217, 220, 87, 24, 217, 248, 51, 217, 220, 87, 228, 197, + 244, 171, 87, 228, 197, 244, 169, 12, 54, 55, 12, 5, 226, 139, 12, 245, + 132, 234, 63, 12, 5, 226, 167, 254, 63, 250, 89, 227, 64, 254, 63, 245, + 110, 227, 64, 12, 227, 222, 254, 63, 229, 170, 233, 164, 55, 254, 63, + 229, 170, 222, 66, 221, 232, 55, 254, 214, 55, 12, 250, 168, 12, 249, + 141, 225, 54, 12, 229, 34, 219, 154, 55, 12, 5, 233, 147, 12, 5, 226, + 152, 254, 170, 218, 245, 12, 5, 254, 170, 254, 0, 12, 5, 227, 247, 254, + 169, 12, 5, 227, 251, 254, 155, 254, 116, 12, 5, 222, 128, 12, 3, 116, + 222, 137, 12, 3, 116, 24, 99, 2, 235, 161, 2, 218, 21, 12, 3, 116, 217, + 106, 12, 3, 245, 238, 12, 3, 249, 172, 12, 3, 236, 206, 12, 225, 67, 12, + 221, 78, 61, 228, 197, 78, 12, 228, 82, 78, 12, 1, 243, 192, 12, 1, 99, + 2, 234, 111, 50, 12, 1, 99, 2, 181, 50, 12, 1, 218, 234, 2, 181, 50, 12, + 1, 99, 2, 181, 56, 12, 1, 70, 2, 181, 50, 12, 1, 254, 168, 12, 1, 252, + 128, 12, 1, 222, 78, 234, 72, 12, 1, 222, 77, 12, 1, 222, 19, 12, 1, 237, + 112, 12, 1, 243, 202, 12, 1, 236, 146, 12, 1, 249, 183, 12, 1, 222, 29, + 12, 1, 227, 196, 12, 1, 217, 106, 12, 1, 226, 82, 12, 1, 224, 242, 12, 1, + 226, 170, 12, 1, 249, 202, 12, 1, 222, 137, 12, 1, 217, 109, 12, 1, 254, + 191, 12, 1, 244, 122, 12, 1, 236, 177, 2, 124, 188, 50, 12, 1, 236, 177, + 2, 148, 188, 56, 12, 1, 245, 241, 70, 2, 237, 170, 216, 216, 12, 1, 245, + 241, 70, 2, 124, 188, 50, 12, 1, 245, 241, 70, 2, 148, 188, 50, 12, 222, + 107, 12, 1, 245, 221, 12, 1, 228, 148, 12, 1, 236, 246, 12, 1, 235, 160, + 12, 1, 234, 14, 12, 1, 231, 193, 12, 1, 243, 146, 12, 1, 218, 233, 12, 1, + 99, 234, 92, 12, 1, 218, 21, 12, 245, 236, 12, 249, 170, 12, 236, 204, + 12, 245, 238, 12, 249, 172, 12, 236, 206, 12, 225, 16, 12, 223, 75, 12, + 234, 109, 50, 12, 181, 50, 12, 181, 56, 12, 223, 94, 254, 168, 12, 237, + 170, 249, 172, 12, 164, 231, 194, 244, 107, 12, 216, 255, 12, 29, 5, 3, + 220, 11, 50, 12, 29, 5, 237, 170, 3, 220, 11, 50, 12, 29, 5, 61, 56, 12, + 210, 249, 172, 12, 245, 239, 2, 124, 248, 143, 254, 63, 20, 217, 84, 254, + 63, 20, 107, 254, 63, 20, 103, 254, 63, 20, 160, 254, 63, 20, 154, 254, + 63, 20, 174, 254, 63, 20, 182, 254, 63, 20, 191, 254, 63, 20, 185, 254, + 63, 20, 190, 12, 229, 169, 55, 12, 249, 86, 225, 54, 12, 221, 230, 225, + 54, 12, 245, 170, 229, 30, 223, 156, 12, 1, 248, 144, 252, 128, 12, 1, + 248, 144, 228, 148, 12, 1, 223, 59, 254, 168, 12, 1, 99, 218, 246, 12, 1, + 99, 2, 218, 235, 181, 50, 12, 1, 99, 2, 218, 235, 181, 56, 12, 1, 116, + 243, 192, 12, 1, 116, 181, 254, 168, 12, 1, 116, 181, 218, 233, 12, 1, + 105, 2, 181, 50, 12, 1, 116, 181, 218, 21, 12, 1, 221, 23, 12, 1, 221, + 21, 12, 1, 252, 135, 12, 1, 222, 78, 2, 227, 93, 12, 1, 222, 78, 2, 148, + 188, 71, 247, 129, 12, 1, 229, 187, 12, 1, 222, 75, 12, 1, 252, 126, 12, + 1, 111, 2, 181, 50, 12, 1, 111, 2, 124, 188, 69, 50, 12, 1, 231, 70, 12, + 1, 247, 79, 12, 1, 111, 2, 148, 188, 50, 12, 1, 222, 91, 12, 1, 222, 89, + 12, 1, 249, 127, 12, 1, 249, 184, 2, 227, 93, 12, 1, 249, 184, 2, 61, 56, + 12, 1, 249, 184, 2, 61, 252, 118, 25, 3, 222, 137, 12, 1, 249, 189, 12, + 1, 249, 129, 12, 1, 247, 103, 12, 1, 249, 184, 2, 148, 188, 71, 247, 129, + 12, 1, 249, 184, 2, 245, 116, 188, 50, 12, 1, 227, 48, 12, 1, 227, 197, + 2, 3, 216, 216, 12, 1, 227, 197, 2, 227, 93, 12, 1, 227, 197, 2, 61, 56, + 12, 1, 227, 197, 2, 3, 220, 11, 56, 12, 1, 227, 197, 2, 61, 252, 118, 25, + 61, 50, 12, 1, 227, 197, 2, 124, 188, 50, 12, 1, 237, 109, 12, 1, 227, + 197, 2, 245, 116, 188, 50, 12, 1, 226, 83, 2, 61, 252, 118, 25, 61, 50, + 12, 1, 226, 83, 2, 148, 188, 56, 12, 1, 226, 83, 2, 148, 188, 252, 118, + 25, 148, 188, 50, 12, 1, 226, 171, 2, 124, 188, 56, 12, 1, 226, 171, 2, + 148, 188, 50, 12, 1, 222, 138, 2, 148, 188, 50, 12, 1, 254, 192, 2, 148, + 188, 50, 12, 1, 248, 144, 245, 221, 12, 1, 245, 222, 2, 61, 233, 104, 56, + 12, 1, 245, 222, 2, 61, 56, 12, 1, 219, 158, 12, 1, 245, 222, 2, 148, + 188, 56, 12, 1, 229, 185, 12, 1, 228, 149, 2, 61, 50, 12, 1, 228, 149, 2, + 148, 188, 50, 12, 1, 236, 176, 12, 1, 223, 33, 236, 246, 12, 1, 236, 247, + 2, 227, 93, 12, 1, 236, 247, 2, 61, 50, 12, 1, 232, 117, 12, 1, 236, 247, + 2, 148, 188, 56, 12, 1, 244, 243, 12, 1, 244, 244, 2, 227, 93, 12, 1, + 232, 82, 12, 1, 244, 244, 2, 124, 188, 56, 12, 1, 244, 9, 12, 1, 244, + 244, 2, 148, 188, 50, 12, 1, 235, 161, 2, 3, 216, 216, 12, 1, 235, 161, + 2, 61, 50, 12, 1, 235, 161, 2, 148, 188, 50, 12, 1, 235, 161, 2, 148, + 188, 56, 12, 1, 231, 194, 2, 61, 56, 12, 1, 231, 194, 244, 107, 12, 1, + 227, 78, 12, 1, 231, 194, 2, 227, 93, 12, 1, 231, 194, 2, 148, 188, 50, + 12, 1, 243, 147, 248, 163, 12, 1, 222, 92, 2, 61, 50, 12, 1, 243, 147, 2, + 70, 50, 12, 1, 243, 147, 244, 65, 12, 1, 243, 147, 244, 66, 2, 181, 50, + 12, 1, 222, 78, 234, 73, 244, 65, 12, 1, 218, 234, 2, 227, 93, 12, 1, + 236, 98, 230, 167, 12, 1, 230, 167, 12, 1, 68, 12, 1, 217, 200, 12, 1, + 236, 98, 217, 200, 12, 1, 218, 234, 2, 124, 188, 50, 12, 1, 219, 165, 12, + 1, 245, 241, 218, 21, 12, 1, 70, 2, 222, 135, 12, 1, 70, 2, 3, 216, 216, + 12, 1, 218, 234, 2, 61, 50, 12, 1, 73, 12, 1, 70, 2, 148, 188, 56, 12, 1, + 70, 252, 194, 12, 1, 70, 252, 195, 2, 181, 50, 12, 245, 90, 223, 136, 12, + 1, 254, 234, 12, 3, 116, 24, 226, 171, 2, 235, 161, 2, 99, 234, 92, 12, + 3, 116, 24, 228, 149, 2, 235, 161, 2, 99, 234, 92, 12, 3, 116, 62, 66, + 17, 12, 3, 116, 235, 161, 254, 168, 12, 3, 116, 237, 112, 12, 3, 116, + 148, 248, 143, 12, 3, 116, 226, 82, 12, 246, 190, 117, 253, 211, 12, 223, + 154, 117, 227, 20, 246, 218, 243, 91, 12, 3, 116, 227, 55, 217, 84, 12, + 3, 116, 220, 59, 227, 207, 217, 84, 12, 3, 116, 248, 144, 243, 160, 117, + 236, 146, 12, 3, 116, 62, 47, 17, 12, 3, 109, 226, 82, 12, 3, 116, 234, + 110, 12, 3, 218, 233, 12, 3, 218, 21, 12, 3, 116, 218, 21, 12, 3, 116, + 231, 193, 12, 229, 57, 117, 226, 159, 12, 246, 199, 251, 85, 109, 223, + 136, 12, 246, 199, 251, 85, 116, 223, 136, 12, 227, 55, 116, 223, 137, 2, + 245, 186, 251, 84, 12, 3, 109, 234, 14, 12, 1, 249, 184, 2, 237, 170, + 216, 216, 12, 1, 227, 197, 2, 237, 170, 216, 216, 246, 87, 254, 63, 20, + 217, 84, 246, 87, 254, 63, 20, 107, 246, 87, 254, 63, 20, 103, 246, 87, + 254, 63, 20, 160, 246, 87, 254, 63, 20, 154, 246, 87, 254, 63, 20, 174, + 246, 87, 254, 63, 20, 182, 246, 87, 254, 63, 20, 191, 246, 87, 254, 63, + 20, 185, 246, 87, 254, 63, 20, 190, 12, 1, 224, 243, 2, 61, 56, 12, 1, + 249, 203, 2, 61, 56, 12, 1, 244, 123, 2, 61, 56, 12, 5, 224, 112, 254, + 134, 12, 5, 224, 112, 229, 13, 233, 251, 12, 1, 243, 147, 2, 237, 170, + 216, 216, 166, 246, 190, 117, 229, 240, 166, 223, 55, 245, 90, 223, 136, + 166, 223, 96, 245, 90, 223, 136, 166, 223, 55, 250, 175, 166, 223, 96, + 250, 175, 166, 186, 250, 175, 166, 250, 176, 224, 64, 235, 115, 166, 250, + 176, 224, 64, 227, 109, 166, 223, 55, 250, 176, 224, 64, 235, 115, 166, + 223, 96, 250, 176, 224, 64, 227, 109, 166, 250, 134, 166, 243, 179, 230, + 179, 166, 243, 179, 233, 236, 166, 243, 179, 253, 253, 166, 255, 7, 78, + 166, 1, 254, 171, 166, 1, 223, 59, 254, 171, 166, 1, 252, 101, 166, 1, + 244, 235, 166, 1, 244, 236, 244, 216, 166, 1, 249, 180, 166, 1, 248, 144, + 249, 181, 227, 89, 166, 1, 243, 162, 166, 1, 218, 233, 166, 1, 217, 106, + 166, 1, 243, 126, 166, 1, 222, 46, 166, 1, 222, 47, 244, 216, 166, 1, + 217, 188, 166, 1, 217, 189, 243, 162, 166, 1, 236, 224, 166, 1, 235, 159, + 166, 1, 233, 161, 166, 1, 231, 103, 166, 1, 225, 60, 166, 1, 39, 225, 60, + 166, 1, 73, 166, 1, 229, 198, 166, 1, 210, 229, 198, 166, 1, 226, 168, + 166, 1, 228, 142, 166, 1, 227, 89, 166, 1, 224, 209, 166, 1, 222, 100, + 166, 1, 229, 159, 252, 90, 166, 1, 229, 159, 244, 120, 166, 1, 229, 159, + 249, 32, 166, 228, 203, 50, 166, 228, 203, 56, 166, 228, 203, 247, 142, + 166, 217, 15, 50, 166, 217, 15, 56, 166, 217, 15, 247, 142, 166, 227, + 219, 50, 166, 227, 219, 56, 166, 247, 143, 217, 22, 242, 241, 166, 247, + 143, 217, 22, 254, 117, 166, 243, 165, 50, 166, 243, 165, 56, 166, 243, + 164, 247, 142, 166, 246, 136, 50, 166, 246, 136, 56, 166, 226, 250, 166, + 245, 215, 248, 145, 166, 228, 63, 166, 227, 17, 166, 124, 69, 188, 50, + 166, 124, 69, 188, 56, 166, 148, 188, 50, 166, 148, 188, 56, 166, 230, + 177, 235, 44, 50, 166, 230, 177, 235, 44, 56, 166, 233, 58, 166, 252, + 193, 166, 1, 224, 19, 217, 78, 166, 1, 224, 19, 236, 139, 166, 1, 224, + 19, 245, 231, 12, 1, 252, 129, 2, 148, 188, 242, 191, 56, 12, 1, 252, + 129, 2, 61, 252, 118, 25, 148, 188, 50, 12, 1, 252, 129, 2, 148, 188, + 229, 28, 220, 53, 56, 12, 1, 252, 129, 2, 148, 188, 229, 28, 220, 53, + 252, 118, 25, 124, 188, 50, 12, 1, 252, 129, 2, 124, 188, 252, 118, 25, + 61, 50, 12, 1, 252, 129, 2, 237, 170, 3, 220, 11, 56, 12, 1, 252, 129, 2, + 3, 216, 216, 12, 1, 111, 2, 124, 188, 50, 12, 1, 111, 2, 148, 188, 229, + 28, 220, 53, 56, 12, 1, 249, 184, 2, 124, 188, 219, 102, 252, 118, 25, 3, + 222, 137, 12, 1, 249, 184, 2, 237, 170, 3, 220, 11, 56, 12, 1, 227, 197, + 2, 92, 12, 1, 226, 83, 2, 245, 116, 188, 50, 12, 1, 254, 192, 2, 124, + 188, 50, 12, 1, 254, 192, 2, 148, 188, 229, 28, 247, 130, 50, 12, 1, 254, + 192, 2, 124, 188, 219, 102, 50, 12, 1, 245, 222, 2, 124, 188, 56, 12, 1, + 245, 222, 2, 148, 188, 229, 28, 220, 53, 56, 12, 1, 236, 177, 2, 61, 50, + 12, 1, 236, 177, 2, 148, 188, 50, 12, 1, 236, 177, 2, 148, 188, 229, 28, + 220, 53, 56, 12, 1, 62, 2, 61, 50, 12, 1, 62, 2, 61, 56, 12, 1, 231, 194, + 2, 124, 188, 56, 12, 1, 231, 194, 2, 3, 222, 137, 12, 1, 231, 194, 2, 3, + 216, 216, 12, 1, 235, 161, 2, 135, 12, 1, 227, 197, 2, 124, 188, 219, + 102, 50, 12, 1, 227, 197, 2, 181, 50, 12, 1, 226, 83, 2, 124, 188, 219, + 102, 50, 12, 1, 111, 2, 3, 12, 1, 222, 138, 56, 12, 1, 111, 2, 3, 12, 1, + 222, 138, 25, 124, 248, 143, 12, 1, 226, 83, 2, 3, 12, 1, 222, 138, 25, + 124, 248, 143, 12, 1, 227, 197, 2, 3, 12, 1, 222, 138, 25, 124, 248, 143, + 12, 1, 111, 2, 3, 12, 1, 222, 138, 50, 12, 1, 99, 2, 246, 87, 254, 63, + 20, 124, 50, 12, 1, 99, 2, 246, 87, 254, 63, 20, 148, 50, 12, 1, 245, + 241, 70, 2, 246, 87, 254, 63, 20, 124, 50, 12, 1, 245, 241, 70, 2, 246, + 87, 254, 63, 20, 148, 50, 12, 1, 245, 241, 70, 2, 246, 87, 254, 63, 20, + 245, 116, 56, 12, 1, 218, 234, 2, 246, 87, 254, 63, 20, 124, 50, 12, 1, + 218, 234, 2, 246, 87, 254, 63, 20, 148, 50, 12, 1, 70, 252, 195, 2, 246, + 87, 254, 63, 20, 124, 50, 12, 1, 70, 252, 195, 2, 246, 87, 254, 63, 20, + 148, 50, 12, 1, 111, 2, 246, 87, 254, 63, 20, 245, 116, 56, 12, 1, 226, + 83, 2, 246, 87, 254, 63, 20, 245, 116, 50, 12, 1, 226, 83, 2, 237, 170, + 216, 216, 12, 1, 236, 247, 2, 124, 188, 50, 222, 32, 1, 243, 211, 222, + 32, 1, 224, 251, 222, 32, 1, 231, 192, 222, 32, 1, 228, 0, 222, 32, 1, + 252, 236, 222, 32, 1, 235, 76, 222, 32, 1, 237, 3, 222, 32, 1, 254, 160, + 222, 32, 1, 219, 187, 222, 32, 1, 234, 13, 222, 32, 1, 246, 6, 222, 32, + 1, 249, 35, 222, 32, 1, 222, 34, 222, 32, 1, 235, 185, 222, 32, 1, 244, + 252, 222, 32, 1, 244, 71, 222, 32, 1, 226, 81, 222, 32, 1, 249, 139, 222, + 32, 1, 217, 98, 222, 32, 1, 222, 101, 222, 32, 1, 218, 76, 222, 32, 1, + 229, 209, 222, 32, 1, 237, 116, 222, 32, 1, 251, 49, 222, 32, 1, 221, 28, + 222, 32, 1, 243, 120, 222, 32, 1, 236, 148, 222, 32, 1, 222, 33, 222, 32, + 1, 217, 113, 222, 32, 1, 224, 241, 222, 32, 1, 226, 174, 222, 32, 1, 249, + 205, 222, 32, 1, 101, 222, 32, 1, 217, 21, 222, 32, 1, 254, 189, 222, 32, + 1, 244, 121, 222, 32, 1, 228, 152, 222, 32, 1, 219, 5, 222, 32, 255, 8, + 222, 32, 255, 23, 222, 32, 242, 68, 222, 32, 246, 249, 222, 32, 220, 118, + 222, 32, 230, 126, 222, 32, 247, 1, 222, 32, 246, 82, 222, 32, 230, 176, + 222, 32, 230, 184, 222, 32, 223, 75, 222, 32, 1, 232, 235, 231, 242, 20, + 217, 84, 231, 242, 20, 107, 231, 242, 20, 103, 231, 242, 20, 160, 231, + 242, 20, 154, 231, 242, 20, 174, 231, 242, 20, 182, 231, 242, 20, 191, + 231, 242, 20, 185, 231, 242, 20, 190, 231, 242, 1, 60, 231, 242, 1, 246, + 250, 231, 242, 1, 72, 231, 242, 1, 73, 231, 242, 1, 68, 231, 242, 1, 230, + 127, 231, 242, 1, 74, 231, 242, 1, 249, 195, 231, 242, 1, 207, 231, 242, + 1, 252, 237, 231, 242, 1, 187, 231, 242, 1, 222, 155, 231, 242, 1, 237, + 123, 231, 242, 1, 251, 69, 231, 242, 1, 249, 207, 231, 242, 1, 203, 231, + 242, 1, 227, 52, 231, 242, 1, 226, 177, 231, 242, 1, 244, 204, 231, 242, + 1, 246, 8, 231, 242, 1, 175, 231, 242, 1, 235, 188, 231, 242, 1, 232, + 238, 218, 184, 231, 242, 1, 196, 231, 242, 1, 231, 77, 231, 242, 1, 208, + 231, 242, 1, 155, 231, 242, 1, 219, 7, 231, 242, 1, 184, 231, 242, 1, + 231, 78, 218, 184, 231, 242, 1, 237, 52, 237, 123, 231, 242, 1, 237, 52, + 251, 69, 231, 242, 1, 237, 52, 203, 231, 242, 36, 224, 192, 116, 221, + 132, 231, 242, 36, 224, 192, 109, 221, 132, 231, 242, 36, 224, 192, 227, + 88, 221, 132, 231, 242, 36, 171, 249, 47, 221, 132, 231, 242, 36, 171, + 116, 221, 132, 231, 242, 36, 171, 109, 221, 132, 231, 242, 36, 171, 227, + 88, 221, 132, 231, 242, 36, 232, 209, 78, 231, 242, 36, 51, 61, 50, 231, + 242, 116, 145, 254, 79, 231, 242, 109, 145, 254, 79, 231, 242, 16, 230, + 128, 249, 58, 231, 242, 16, 244, 203, 231, 242, 250, 168, 231, 242, 246, + 95, 78, 231, 242, 235, 166, 213, 1, 254, 173, 213, 1, 252, 60, 213, 1, + 244, 234, 213, 1, 249, 182, 213, 1, 237, 133, 213, 1, 252, 236, 213, 1, + 217, 87, 213, 1, 237, 140, 213, 1, 221, 161, 213, 1, 217, 177, 213, 1, + 237, 4, 213, 1, 235, 183, 213, 1, 233, 161, 213, 1, 231, 103, 213, 1, + 224, 110, 213, 1, 237, 223, 213, 1, 245, 203, 213, 1, 221, 53, 213, 1, + 228, 79, 213, 1, 227, 89, 213, 1, 225, 9, 213, 1, 222, 151, 213, 164, + 237, 223, 213, 164, 237, 222, 213, 164, 230, 172, 213, 164, 249, 193, + 213, 58, 1, 246, 160, 217, 177, 213, 164, 246, 160, 217, 177, 213, 29, 5, + 171, 73, 213, 29, 5, 73, 213, 29, 5, 230, 72, 255, 58, 213, 29, 5, 171, + 255, 58, 213, 29, 5, 255, 58, 213, 29, 5, 230, 72, 60, 213, 29, 5, 171, + 60, 213, 29, 5, 60, 213, 58, 1, 224, 192, 60, 213, 29, 5, 224, 192, 60, + 213, 29, 5, 171, 68, 213, 29, 5, 68, 213, 58, 1, 72, 213, 29, 5, 171, 72, + 213, 29, 5, 72, 213, 29, 5, 74, 213, 29, 5, 223, 75, 213, 164, 232, 128, + 213, 228, 197, 232, 128, 213, 228, 197, 254, 211, 213, 228, 197, 254, + 122, 213, 228, 197, 252, 181, 213, 228, 197, 253, 240, 213, 228, 197, + 224, 201, 213, 255, 7, 78, 213, 228, 197, 234, 4, 228, 113, 213, 228, + 197, 217, 29, 213, 228, 197, 228, 113, 213, 228, 197, 217, 112, 213, 228, + 197, 220, 233, 213, 228, 197, 254, 36, 213, 228, 197, 224, 22, 234, 55, + 213, 228, 197, 254, 113, 80, 5, 237, 170, 251, 146, 80, 5, 251, 146, 80, + 5, 254, 95, 80, 5, 219, 77, 80, 1, 224, 192, 60, 80, 1, 60, 80, 1, 255, + 58, 80, 1, 72, 80, 1, 237, 255, 80, 1, 68, 80, 1, 220, 23, 80, 1, 167, + 152, 80, 1, 167, 153, 80, 1, 251, 149, 73, 80, 1, 224, 192, 73, 80, 1, + 73, 80, 1, 254, 196, 80, 1, 251, 149, 74, 80, 1, 224, 192, 74, 80, 1, 74, + 80, 1, 253, 232, 80, 1, 175, 80, 1, 236, 149, 80, 1, 245, 0, 80, 1, 244, + 125, 80, 1, 232, 115, 80, 1, 251, 169, 80, 1, 251, 69, 80, 1, 237, 123, + 80, 1, 237, 103, 80, 1, 231, 77, 80, 1, 221, 29, 80, 1, 221, 19, 80, 1, + 249, 132, 80, 1, 249, 116, 80, 1, 231, 217, 80, 1, 222, 155, 80, 1, 222, + 35, 80, 1, 249, 207, 80, 1, 249, 36, 80, 1, 208, 80, 1, 231, 208, 80, 1, + 187, 80, 1, 229, 141, 80, 1, 252, 237, 80, 1, 252, 94, 80, 1, 196, 80, 1, + 184, 80, 1, 203, 80, 1, 227, 52, 80, 1, 235, 188, 80, 1, 235, 17, 80, 1, + 235, 16, 80, 1, 219, 189, 80, 1, 225, 25, 80, 1, 223, 218, 80, 1, 226, + 177, 80, 1, 155, 80, 5, 231, 112, 80, 5, 253, 219, 80, 29, 5, 255, 58, + 80, 29, 5, 72, 80, 29, 5, 237, 255, 80, 29, 5, 68, 80, 29, 5, 220, 23, + 80, 29, 5, 167, 152, 80, 29, 5, 167, 227, 53, 80, 29, 5, 251, 149, 73, + 80, 29, 5, 224, 192, 73, 80, 29, 5, 73, 80, 29, 5, 254, 196, 80, 29, 5, + 251, 149, 74, 80, 29, 5, 224, 192, 74, 80, 29, 5, 74, 80, 29, 5, 253, + 232, 80, 5, 219, 82, 80, 29, 5, 228, 232, 73, 80, 230, 146, 80, 223, 125, + 5, 220, 112, 80, 223, 125, 5, 254, 97, 80, 244, 37, 255, 0, 80, 254, 248, + 255, 0, 80, 29, 5, 251, 149, 171, 73, 80, 1, 228, 155, 80, 1, 236, 133, + 80, 1, 244, 114, 80, 1, 217, 114, 80, 1, 249, 121, 80, 1, 227, 151, 80, + 1, 246, 8, 80, 1, 217, 165, 80, 1, 167, 227, 53, 80, 1, 167, 235, 18, 80, + 29, 5, 167, 153, 80, 29, 5, 167, 235, 18, 80, 249, 167, 80, 51, 249, 167, + 80, 20, 217, 84, 80, 20, 107, 80, 20, 103, 80, 20, 160, 80, 20, 154, 80, + 20, 174, 80, 20, 182, 80, 20, 191, 80, 20, 185, 80, 20, 190, 80, 255, 7, + 55, 80, 5, 116, 223, 253, 248, 145, 80, 1, 251, 149, 60, 80, 1, 217, 80, + 80, 1, 106, 184, 80, 1, 244, 160, 80, 1, 237, 87, 80, 1, 244, 73, 223, + 136, 80, 1, 249, 122, 80, 1, 252, 178, 130, 5, 251, 146, 130, 5, 254, 95, + 130, 5, 219, 77, 130, 1, 60, 130, 1, 255, 58, 130, 1, 72, 130, 1, 237, + 255, 130, 1, 68, 130, 1, 220, 23, 130, 1, 167, 152, 130, 1, 167, 153, + 130, 1, 73, 130, 1, 254, 196, 130, 1, 74, 130, 1, 253, 232, 130, 1, 175, + 130, 1, 236, 149, 130, 1, 245, 0, 130, 1, 244, 125, 130, 1, 232, 115, + 130, 1, 251, 169, 130, 1, 251, 69, 130, 1, 237, 123, 130, 1, 237, 103, + 130, 1, 231, 77, 130, 1, 221, 29, 130, 1, 221, 19, 130, 1, 249, 132, 130, + 1, 249, 116, 130, 1, 231, 217, 130, 1, 222, 155, 130, 1, 222, 35, 130, 1, + 249, 207, 130, 1, 249, 36, 130, 1, 208, 130, 1, 187, 130, 1, 229, 141, + 130, 1, 252, 237, 130, 1, 252, 94, 130, 1, 196, 130, 1, 184, 130, 1, 203, + 130, 1, 235, 188, 130, 1, 225, 25, 130, 1, 223, 218, 130, 1, 226, 177, + 130, 1, 155, 130, 5, 231, 112, 130, 5, 253, 219, 130, 29, 5, 255, 58, + 130, 29, 5, 72, 130, 29, 5, 237, 255, 130, 29, 5, 68, 130, 29, 5, 220, + 23, 130, 29, 5, 167, 152, 130, 29, 5, 167, 227, 53, 130, 29, 5, 73, 130, + 29, 5, 254, 196, 130, 29, 5, 74, 130, 29, 5, 253, 232, 130, 5, 219, 82, + 130, 1, 236, 141, 222, 155, 130, 253, 233, 235, 94, 78, 130, 1, 227, 52, + 130, 1, 227, 151, 130, 1, 217, 165, 130, 1, 167, 227, 53, 130, 1, 167, + 235, 18, 130, 29, 5, 167, 153, 130, 29, 5, 167, 235, 18, 130, 20, 217, + 84, 130, 20, 107, 130, 20, 103, 130, 20, 160, 130, 20, 154, 130, 20, 174, + 130, 20, 182, 130, 20, 191, 130, 20, 185, 130, 20, 190, 130, 1, 228, 3, + 2, 233, 193, 249, 10, 130, 1, 228, 3, 2, 234, 237, 249, 10, 130, 227, 4, + 78, 130, 227, 4, 55, 130, 250, 78, 231, 106, 107, 130, 250, 78, 231, 106, + 103, 130, 250, 78, 231, 106, 160, 130, 250, 78, 231, 106, 154, 130, 250, + 78, 231, 106, 131, 235, 88, 222, 28, 222, 23, 249, 56, 130, 250, 78, 249, + 57, 224, 77, 130, 237, 141, 130, 244, 227, 78, 163, 5, 254, 243, 252, 72, + 163, 5, 252, 72, 163, 5, 219, 77, 163, 1, 60, 163, 1, 255, 58, 163, 1, + 72, 163, 1, 237, 255, 163, 1, 68, 163, 1, 220, 23, 163, 1, 246, 250, 163, + 1, 254, 196, 163, 1, 230, 127, 163, 1, 253, 232, 163, 1, 175, 163, 1, + 236, 149, 163, 1, 245, 0, 163, 1, 244, 125, 163, 1, 232, 115, 163, 1, + 251, 169, 163, 1, 251, 69, 163, 1, 237, 123, 163, 1, 237, 103, 163, 1, + 231, 77, 163, 1, 221, 29, 163, 1, 221, 19, 163, 1, 249, 132, 163, 1, 249, + 116, 163, 1, 231, 217, 163, 1, 222, 155, 163, 1, 222, 35, 163, 1, 249, + 207, 163, 1, 249, 36, 163, 1, 208, 163, 1, 187, 163, 1, 229, 141, 163, 1, + 252, 237, 163, 1, 252, 94, 163, 1, 196, 163, 1, 184, 163, 1, 203, 163, 1, + 235, 188, 163, 1, 235, 17, 163, 1, 219, 189, 163, 1, 225, 25, 163, 1, + 226, 177, 163, 1, 155, 163, 5, 231, 112, 163, 29, 5, 255, 58, 163, 29, 5, + 72, 163, 29, 5, 237, 255, 163, 29, 5, 68, 163, 29, 5, 220, 23, 163, 29, + 5, 246, 250, 163, 29, 5, 254, 196, 163, 29, 5, 230, 127, 163, 29, 5, 253, + 232, 163, 5, 219, 82, 163, 5, 220, 114, 163, 1, 236, 133, 163, 1, 244, + 114, 163, 1, 217, 114, 163, 1, 227, 52, 163, 1, 246, 8, 163, 20, 217, 84, + 163, 20, 107, 163, 20, 103, 163, 20, 160, 163, 20, 154, 163, 20, 174, + 163, 20, 182, 163, 20, 191, 163, 20, 185, 163, 20, 190, 163, 221, 167, + 163, 254, 242, 163, 237, 155, 163, 220, 46, 163, 246, 224, 230, 132, 163, + 5, 218, 54, 150, 5, 251, 146, 150, 5, 254, 95, 150, 5, 219, 77, 150, 1, + 60, 150, 1, 255, 58, 150, 1, 72, 150, 1, 237, 255, 150, 1, 68, 150, 1, + 220, 23, 150, 1, 167, 152, 150, 1, 167, 153, 150, 29, 251, 149, 73, 150, + 1, 73, 150, 1, 254, 196, 150, 29, 251, 149, 74, 150, 1, 74, 150, 1, 253, + 232, 150, 1, 175, 150, 1, 236, 149, 150, 1, 245, 0, 150, 1, 244, 125, + 150, 1, 232, 115, 150, 1, 251, 169, 150, 1, 251, 69, 150, 1, 237, 123, + 150, 1, 237, 103, 150, 1, 231, 77, 150, 1, 221, 29, 150, 1, 221, 19, 150, + 1, 249, 132, 150, 1, 249, 116, 150, 1, 231, 217, 150, 1, 222, 155, 150, + 1, 222, 35, 150, 1, 249, 207, 150, 1, 249, 36, 150, 1, 208, 150, 1, 187, + 150, 1, 229, 141, 150, 1, 252, 237, 150, 1, 252, 94, 150, 1, 196, 150, 1, + 184, 150, 1, 203, 150, 1, 235, 188, 150, 1, 235, 17, 150, 1, 219, 189, + 150, 1, 225, 25, 150, 1, 223, 218, 150, 1, 226, 177, 150, 1, 155, 150, 5, + 231, 112, 150, 5, 253, 219, 150, 29, 5, 255, 58, 150, 29, 5, 72, 150, 29, + 5, 237, 255, 150, 29, 5, 68, 150, 29, 5, 220, 23, 150, 29, 5, 167, 152, + 150, 29, 5, 167, 227, 53, 150, 29, 5, 251, 149, 73, 150, 29, 5, 73, 150, + 29, 5, 254, 196, 150, 29, 5, 251, 149, 74, 150, 29, 5, 74, 150, 29, 5, + 253, 232, 150, 5, 219, 82, 150, 230, 146, 150, 1, 167, 227, 53, 150, 1, + 167, 235, 18, 150, 29, 5, 167, 153, 150, 29, 5, 167, 235, 18, 150, 20, + 217, 84, 150, 20, 107, 150, 20, 103, 150, 20, 160, 150, 20, 154, 150, 20, + 174, 150, 20, 182, 150, 20, 191, 150, 20, 185, 150, 20, 190, 150, 227, 4, + 55, 147, 5, 251, 146, 147, 5, 254, 95, 147, 5, 219, 77, 147, 1, 60, 147, + 1, 255, 58, 147, 1, 72, 147, 1, 237, 255, 147, 1, 68, 147, 1, 220, 23, + 147, 1, 167, 152, 147, 1, 167, 153, 147, 1, 73, 147, 1, 254, 196, 147, 1, + 74, 147, 1, 253, 232, 147, 1, 175, 147, 1, 236, 149, 147, 1, 245, 0, 147, + 1, 244, 125, 147, 1, 232, 115, 147, 1, 251, 169, 147, 1, 251, 69, 147, 1, + 237, 123, 147, 1, 237, 103, 147, 1, 231, 77, 147, 1, 221, 29, 147, 1, + 221, 19, 147, 1, 249, 132, 147, 1, 249, 116, 147, 1, 231, 217, 147, 1, + 222, 155, 147, 1, 222, 35, 147, 1, 249, 207, 147, 1, 249, 36, 147, 1, + 208, 147, 1, 187, 147, 1, 229, 141, 147, 1, 252, 237, 147, 1, 252, 94, + 147, 1, 196, 147, 1, 184, 147, 1, 203, 147, 1, 235, 188, 147, 1, 235, 17, + 147, 1, 219, 189, 147, 1, 225, 25, 147, 1, 223, 218, 147, 1, 226, 177, + 147, 1, 155, 147, 5, 231, 112, 147, 5, 253, 219, 147, 29, 5, 255, 58, + 147, 29, 5, 72, 147, 29, 5, 237, 255, 147, 29, 5, 68, 147, 29, 5, 220, + 23, 147, 29, 5, 167, 152, 147, 29, 5, 167, 227, 53, 147, 29, 5, 73, 147, + 29, 5, 254, 196, 147, 29, 5, 74, 147, 29, 5, 253, 232, 147, 5, 219, 82, + 147, 254, 197, 235, 94, 78, 147, 253, 233, 235, 94, 78, 147, 1, 227, 52, + 147, 1, 227, 151, 147, 1, 217, 165, 147, 1, 167, 227, 53, 147, 1, 167, + 235, 18, 147, 29, 5, 167, 153, 147, 29, 5, 167, 235, 18, 147, 20, 217, + 84, 147, 20, 107, 147, 20, 103, 147, 20, 160, 147, 20, 154, 147, 20, 174, + 147, 20, 182, 147, 20, 191, 147, 20, 185, 147, 20, 190, 147, 237, 141, + 147, 1, 219, 7, 176, 5, 254, 95, 176, 5, 219, 77, 176, 1, 60, 176, 1, + 255, 58, 176, 1, 72, 176, 1, 237, 255, 176, 1, 68, 176, 1, 220, 23, 176, + 1, 73, 176, 1, 246, 250, 176, 1, 254, 196, 176, 1, 74, 176, 1, 230, 127, + 176, 1, 253, 232, 176, 1, 175, 176, 1, 232, 115, 176, 1, 251, 169, 176, + 1, 237, 123, 176, 1, 231, 77, 176, 1, 221, 29, 176, 1, 231, 217, 176, 1, + 222, 155, 176, 1, 208, 176, 1, 231, 208, 176, 1, 187, 176, 1, 196, 176, + 1, 184, 176, 1, 203, 176, 1, 227, 52, 176, 1, 235, 188, 176, 1, 235, 17, + 176, 1, 235, 16, 176, 1, 219, 189, 176, 1, 225, 25, 176, 1, 223, 218, + 176, 1, 226, 177, 176, 1, 155, 176, 29, 5, 255, 58, 176, 29, 5, 72, 176, + 29, 5, 237, 255, 176, 29, 5, 68, 176, 29, 5, 220, 23, 176, 29, 5, 73, + 176, 29, 5, 246, 250, 176, 29, 5, 254, 196, 176, 29, 5, 74, 176, 29, 5, + 230, 127, 176, 29, 5, 253, 232, 176, 5, 219, 82, 176, 230, 146, 176, 253, + 233, 235, 94, 78, 176, 20, 217, 84, 176, 20, 107, 176, 20, 103, 176, 20, + 160, 176, 20, 154, 176, 20, 174, 176, 20, 182, 176, 20, 191, 176, 20, + 185, 176, 20, 190, 176, 54, 222, 65, 176, 54, 131, 242, 161, 176, 54, + 131, 221, 231, 176, 249, 137, 55, 176, 233, 121, 55, 176, 218, 23, 55, + 176, 249, 89, 55, 176, 250, 107, 55, 176, 254, 14, 71, 55, 176, 227, 4, + 55, 176, 54, 55, 129, 5, 251, 146, 129, 5, 254, 95, 129, 5, 219, 77, 129, + 1, 60, 129, 1, 255, 58, 129, 1, 72, 129, 1, 237, 255, 129, 1, 68, 129, 1, + 220, 23, 129, 1, 167, 152, 129, 1, 167, 153, 129, 1, 73, 129, 1, 246, + 250, 129, 1, 254, 196, 129, 1, 74, 129, 1, 230, 127, 129, 1, 253, 232, + 129, 1, 175, 129, 1, 236, 149, 129, 1, 245, 0, 129, 1, 244, 125, 129, 1, + 232, 115, 129, 1, 251, 169, 129, 1, 251, 69, 129, 1, 237, 123, 129, 1, + 237, 103, 129, 1, 231, 77, 129, 1, 221, 29, 129, 1, 221, 19, 129, 1, 249, + 132, 129, 1, 249, 116, 129, 1, 231, 217, 129, 1, 222, 155, 129, 1, 222, + 35, 129, 1, 249, 207, 129, 1, 249, 36, 129, 1, 208, 129, 1, 187, 129, 1, + 229, 141, 129, 1, 252, 237, 129, 1, 252, 94, 129, 1, 196, 129, 1, 184, + 129, 1, 203, 129, 1, 227, 52, 129, 1, 235, 188, 129, 1, 235, 17, 129, 1, + 219, 189, 129, 1, 225, 25, 129, 1, 223, 218, 129, 1, 226, 177, 129, 1, + 155, 129, 5, 253, 219, 129, 29, 5, 255, 58, 129, 29, 5, 72, 129, 29, 5, + 237, 255, 129, 29, 5, 68, 129, 29, 5, 220, 23, 129, 29, 5, 167, 152, 129, + 29, 5, 167, 227, 53, 129, 29, 5, 73, 129, 29, 5, 246, 250, 129, 29, 5, + 254, 196, 129, 29, 5, 74, 129, 29, 5, 230, 127, 129, 29, 5, 253, 232, + 129, 5, 219, 82, 129, 235, 94, 78, 129, 254, 197, 235, 94, 78, 129, 1, + 221, 55, 129, 1, 247, 74, 129, 1, 167, 227, 53, 129, 1, 167, 235, 18, + 129, 29, 5, 167, 153, 129, 29, 5, 167, 235, 18, 129, 20, 217, 84, 129, + 20, 107, 129, 20, 103, 129, 20, 160, 129, 20, 154, 129, 20, 174, 129, 20, + 182, 129, 20, 191, 129, 20, 185, 129, 20, 190, 129, 245, 108, 20, 217, + 85, 35, 230, 169, 229, 9, 117, 154, 129, 245, 108, 20, 131, 35, 230, 169, + 229, 9, 117, 154, 129, 245, 108, 20, 124, 35, 230, 169, 229, 9, 117, 154, + 129, 245, 108, 20, 148, 35, 230, 169, 229, 9, 117, 154, 129, 245, 108, + 20, 131, 35, 246, 104, 229, 9, 117, 154, 129, 245, 108, 20, 124, 35, 246, + 104, 229, 9, 117, 154, 129, 245, 108, 20, 148, 35, 246, 104, 229, 9, 117, + 154, 129, 5, 220, 229, 141, 5, 254, 95, 141, 5, 219, 77, 141, 1, 60, 141, + 1, 255, 58, 141, 1, 72, 141, 1, 237, 255, 141, 1, 68, 141, 1, 220, 23, + 141, 1, 167, 152, 141, 1, 167, 153, 141, 1, 73, 141, 1, 246, 250, 141, 1, + 254, 196, 141, 1, 74, 141, 1, 230, 127, 141, 1, 253, 232, 141, 1, 175, + 141, 1, 236, 149, 141, 1, 245, 0, 141, 1, 244, 125, 141, 1, 232, 115, + 141, 1, 251, 169, 141, 1, 251, 69, 141, 1, 237, 123, 141, 1, 237, 103, + 141, 1, 231, 77, 141, 1, 221, 29, 141, 1, 221, 19, 141, 1, 249, 132, 141, + 1, 249, 116, 141, 1, 231, 217, 141, 1, 222, 155, 141, 1, 222, 35, 141, 1, + 249, 207, 141, 1, 249, 36, 141, 1, 208, 141, 1, 187, 141, 1, 229, 141, + 141, 1, 252, 237, 141, 1, 252, 94, 141, 1, 196, 141, 1, 184, 141, 1, 203, + 141, 1, 227, 52, 141, 1, 235, 188, 141, 1, 235, 17, 141, 1, 219, 189, + 141, 1, 225, 25, 141, 1, 223, 218, 141, 1, 226, 177, 141, 1, 155, 141, 5, + 231, 112, 141, 5, 253, 219, 141, 29, 5, 255, 58, 141, 29, 5, 72, 141, 29, + 5, 237, 255, 141, 29, 5, 68, 141, 29, 5, 220, 23, 141, 29, 5, 167, 152, + 141, 29, 5, 167, 227, 53, 141, 29, 5, 73, 141, 29, 5, 246, 250, 141, 29, + 5, 254, 196, 141, 29, 5, 74, 141, 29, 5, 230, 127, 141, 29, 5, 253, 232, + 141, 5, 219, 82, 141, 235, 94, 78, 141, 254, 197, 235, 94, 78, 141, 1, + 246, 8, 141, 1, 167, 227, 53, 141, 1, 167, 235, 18, 141, 29, 5, 167, 153, + 141, 29, 5, 167, 235, 18, 141, 20, 217, 84, 141, 20, 107, 141, 20, 103, + 141, 20, 160, 141, 20, 154, 141, 20, 174, 141, 20, 182, 141, 20, 191, + 141, 20, 185, 141, 20, 190, 141, 5, 237, 92, 141, 5, 220, 61, 123, 5, + 254, 95, 123, 5, 219, 77, 123, 1, 60, 123, 1, 255, 58, 123, 1, 72, 123, + 1, 237, 255, 123, 1, 68, 123, 1, 220, 23, 123, 1, 167, 152, 123, 1, 167, + 153, 123, 1, 73, 123, 1, 246, 250, 123, 1, 254, 196, 123, 1, 74, 123, 1, + 230, 127, 123, 1, 253, 232, 123, 1, 175, 123, 1, 236, 149, 123, 1, 245, + 0, 123, 1, 244, 125, 123, 1, 232, 115, 123, 1, 251, 169, 123, 1, 251, 69, + 123, 1, 237, 123, 123, 1, 237, 103, 123, 1, 231, 77, 123, 1, 221, 29, + 123, 1, 221, 19, 123, 1, 249, 132, 123, 1, 249, 116, 123, 1, 231, 217, + 123, 1, 222, 155, 123, 1, 222, 35, 123, 1, 249, 207, 123, 1, 249, 36, + 123, 1, 208, 123, 1, 187, 123, 1, 229, 141, 123, 1, 252, 237, 123, 1, + 252, 94, 123, 1, 196, 123, 1, 184, 123, 1, 203, 123, 1, 227, 52, 123, 1, + 235, 188, 123, 1, 235, 17, 123, 1, 235, 16, 123, 1, 219, 189, 123, 1, + 225, 25, 123, 1, 223, 218, 123, 1, 226, 177, 123, 1, 155, 123, 5, 253, + 219, 123, 29, 5, 255, 58, 123, 29, 5, 72, 123, 29, 5, 237, 255, 123, 29, + 5, 68, 123, 29, 5, 220, 23, 123, 29, 5, 167, 152, 123, 29, 5, 167, 227, + 53, 123, 29, 5, 73, 123, 29, 5, 246, 250, 123, 29, 5, 254, 196, 123, 29, + 5, 74, 123, 29, 5, 230, 127, 123, 29, 5, 253, 232, 123, 5, 219, 82, 123, + 253, 233, 235, 94, 78, 123, 1, 167, 227, 53, 123, 1, 167, 235, 18, 123, + 29, 5, 167, 153, 123, 29, 5, 167, 235, 18, 123, 20, 217, 84, 123, 20, + 107, 123, 20, 103, 123, 20, 160, 123, 20, 154, 123, 20, 174, 123, 20, + 182, 123, 20, 191, 123, 20, 185, 123, 20, 190, 123, 54, 222, 65, 123, 54, + 131, 242, 161, 123, 54, 131, 221, 231, 123, 245, 108, 131, 228, 89, 123, + 245, 108, 131, 243, 194, 123, 245, 108, 148, 228, 87, 123, 249, 141, 78, + 123, 1, 251, 23, 231, 218, 123, 1, 251, 23, 207, 123, 1, 251, 23, 227, + 53, 123, 1, 251, 23, 153, 123, 1, 251, 23, 235, 18, 123, 1, 251, 23, 237, + 17, 162, 5, 254, 94, 162, 5, 219, 76, 162, 1, 253, 210, 162, 1, 255, 13, + 162, 1, 254, 215, 162, 1, 254, 229, 162, 1, 237, 132, 162, 1, 237, 254, + 162, 1, 220, 15, 162, 1, 220, 17, 162, 1, 237, 153, 162, 1, 237, 154, + 162, 1, 237, 240, 162, 1, 237, 242, 162, 1, 246, 83, 162, 1, 246, 246, + 162, 1, 254, 184, 162, 1, 230, 62, 162, 1, 230, 122, 162, 1, 253, 222, + 162, 1, 254, 149, 236, 189, 162, 1, 234, 105, 236, 189, 162, 1, 254, 149, + 244, 207, 162, 1, 234, 105, 244, 207, 162, 1, 236, 228, 232, 232, 162, 1, + 226, 135, 244, 207, 162, 1, 254, 149, 251, 117, 162, 1, 234, 105, 251, + 117, 162, 1, 254, 149, 237, 115, 162, 1, 234, 105, 237, 115, 162, 1, 222, + 149, 232, 232, 162, 1, 222, 149, 226, 134, 232, 233, 162, 1, 226, 135, + 237, 115, 162, 1, 254, 149, 221, 27, 162, 1, 234, 105, 221, 27, 162, 1, + 254, 149, 249, 123, 162, 1, 234, 105, 249, 123, 162, 1, 233, 56, 232, + 198, 162, 1, 226, 135, 249, 123, 162, 1, 254, 149, 222, 95, 162, 1, 234, + 105, 222, 95, 162, 1, 254, 149, 249, 136, 162, 1, 234, 105, 249, 136, + 162, 1, 249, 164, 232, 198, 162, 1, 226, 135, 249, 136, 162, 1, 254, 149, + 229, 204, 162, 1, 234, 105, 229, 204, 162, 1, 254, 149, 252, 179, 162, 1, + 234, 105, 252, 179, 162, 1, 234, 44, 162, 1, 254, 136, 252, 179, 162, 1, + 218, 29, 162, 1, 227, 221, 162, 1, 249, 164, 235, 131, 162, 1, 219, 167, + 162, 1, 222, 149, 226, 117, 162, 1, 233, 56, 226, 117, 162, 1, 249, 164, + 226, 117, 162, 1, 243, 166, 162, 1, 233, 56, 235, 131, 162, 1, 245, 233, + 162, 5, 254, 174, 162, 29, 5, 254, 224, 162, 29, 5, 236, 158, 254, 231, + 162, 29, 5, 248, 241, 254, 231, 162, 29, 5, 236, 158, 237, 150, 162, 29, + 5, 248, 241, 237, 150, 162, 29, 5, 236, 158, 230, 42, 162, 29, 5, 248, + 241, 230, 42, 162, 29, 5, 244, 245, 162, 29, 5, 236, 46, 162, 29, 5, 248, + 241, 236, 46, 162, 29, 5, 236, 48, 249, 73, 162, 29, 5, 236, 47, 243, + 212, 254, 224, 162, 29, 5, 236, 47, 243, 212, 248, 241, 254, 224, 162, + 29, 5, 236, 47, 243, 212, 244, 206, 162, 29, 5, 244, 206, 162, 29, 5, + 248, 241, 244, 245, 162, 29, 5, 248, 241, 244, 206, 162, 228, 197, 235, + 254, 140, 126, 236, 58, 236, 243, 140, 126, 236, 126, 236, 145, 140, 126, + 236, 126, 236, 119, 140, 126, 236, 126, 236, 116, 140, 126, 236, 126, + 236, 123, 140, 126, 236, 126, 227, 240, 140, 126, 232, 85, 232, 74, 140, + 126, 251, 12, 251, 60, 140, 126, 251, 12, 251, 20, 140, 126, 251, 12, + 251, 59, 140, 126, 224, 27, 224, 26, 140, 126, 251, 12, 251, 9, 140, 126, + 217, 232, 217, 239, 140, 126, 248, 168, 251, 66, 140, 126, 199, 229, 213, + 140, 126, 221, 240, 222, 27, 140, 126, 221, 240, 232, 215, 140, 126, 221, + 240, 229, 111, 140, 126, 231, 205, 232, 134, 140, 126, 248, 168, 249, 74, + 140, 126, 199, 222, 116, 140, 126, 221, 240, 221, 219, 140, 126, 221, + 240, 222, 31, 140, 126, 221, 240, 221, 237, 140, 126, 231, 205, 231, 144, + 140, 126, 252, 42, 252, 220, 140, 126, 229, 38, 229, 58, 140, 126, 229, + 119, 229, 113, 140, 126, 245, 140, 246, 8, 140, 126, 229, 119, 229, 135, + 140, 126, 245, 140, 245, 245, 140, 126, 229, 119, 226, 143, 140, 126, + 233, 137, 196, 140, 126, 217, 232, 218, 55, 140, 126, 227, 76, 227, 21, + 140, 126, 227, 22, 140, 126, 235, 13, 235, 36, 140, 126, 234, 231, 140, + 126, 218, 188, 219, 3, 140, 126, 224, 27, 226, 155, 140, 126, 224, 27, + 227, 0, 140, 126, 224, 27, 223, 102, 140, 126, 243, 5, 243, 95, 140, 126, + 235, 13, 250, 252, 140, 126, 142, 254, 123, 140, 126, 243, 5, 231, 200, + 140, 126, 230, 30, 140, 126, 226, 130, 60, 140, 126, 234, 100, 243, 190, + 140, 126, 226, 130, 255, 58, 140, 126, 226, 130, 254, 140, 140, 126, 226, + 130, 72, 140, 126, 226, 130, 237, 255, 140, 126, 226, 130, 220, 110, 140, + 126, 226, 130, 220, 108, 140, 126, 226, 130, 68, 140, 126, 226, 130, 220, + 23, 140, 126, 229, 121, 140, 250, 78, 16, 252, 221, 140, 126, 226, 130, + 73, 140, 126, 226, 130, 254, 234, 140, 126, 226, 130, 74, 140, 126, 226, + 130, 254, 197, 234, 96, 140, 126, 226, 130, 254, 197, 234, 97, 140, 126, + 235, 164, 140, 126, 234, 93, 140, 126, 234, 94, 140, 126, 234, 100, 246, + 223, 140, 126, 234, 100, 221, 239, 140, 126, 234, 100, 221, 93, 140, 126, + 234, 100, 251, 50, 140, 126, 222, 25, 140, 126, 232, 36, 140, 126, 218, + 49, 140, 126, 245, 135, 140, 20, 217, 84, 140, 20, 107, 140, 20, 103, + 140, 20, 160, 140, 20, 154, 140, 20, 174, 140, 20, 182, 140, 20, 191, + 140, 20, 185, 140, 20, 190, 140, 126, 254, 121, 140, 126, 236, 124, 202, + 1, 236, 57, 202, 1, 236, 126, 223, 66, 202, 1, 236, 126, 222, 121, 202, + 1, 232, 84, 202, 1, 250, 182, 202, 1, 224, 27, 222, 121, 202, 1, 231, 56, + 202, 1, 248, 167, 202, 1, 101, 202, 1, 221, 240, 223, 66, 202, 1, 221, + 240, 222, 121, 202, 1, 231, 204, 202, 1, 252, 41, 202, 1, 229, 37, 202, + 1, 229, 119, 223, 66, 202, 1, 245, 140, 222, 121, 202, 1, 229, 119, 222, + 121, 202, 1, 245, 140, 223, 66, 202, 1, 233, 136, 202, 1, 217, 231, 202, + 1, 235, 13, 235, 36, 202, 1, 235, 13, 234, 246, 202, 1, 218, 187, 202, 1, + 224, 27, 223, 66, 202, 1, 243, 5, 223, 66, 202, 1, 74, 202, 1, 243, 5, + 222, 121, 202, 246, 208, 202, 29, 5, 60, 202, 29, 5, 234, 100, 236, 233, + 202, 29, 5, 255, 58, 202, 29, 5, 254, 140, 202, 29, 5, 72, 202, 29, 5, + 237, 255, 202, 29, 5, 218, 90, 202, 29, 5, 217, 166, 202, 29, 5, 68, 202, + 29, 5, 220, 23, 202, 29, 5, 234, 100, 236, 44, 202, 225, 62, 5, 235, 12, + 202, 225, 62, 5, 231, 56, 202, 29, 5, 73, 202, 29, 5, 246, 237, 202, 29, + 5, 74, 202, 29, 5, 253, 212, 202, 29, 5, 254, 196, 202, 236, 58, 235, + 188, 202, 145, 234, 100, 246, 223, 202, 145, 234, 100, 221, 239, 202, + 145, 234, 100, 221, 205, 202, 145, 234, 100, 251, 123, 202, 251, 151, 78, + 202, 232, 43, 202, 20, 217, 84, 202, 20, 107, 202, 20, 103, 202, 20, 160, + 202, 20, 154, 202, 20, 174, 202, 20, 182, 202, 20, 191, 202, 20, 185, + 202, 20, 190, 202, 243, 5, 231, 204, 202, 243, 5, 233, 136, 59, 4, 230, + 146, 59, 164, 244, 19, 217, 243, 233, 213, 221, 61, 60, 59, 164, 244, 19, + 217, 243, 233, 213, 255, 144, 227, 80, 252, 146, 196, 59, 164, 244, 19, + 217, 243, 233, 213, 255, 144, 244, 19, 221, 45, 196, 59, 164, 66, 217, + 243, 233, 213, 234, 27, 196, 59, 164, 250, 194, 217, 243, 233, 213, 225, + 31, 196, 59, 164, 251, 135, 217, 243, 233, 213, 229, 112, 225, 19, 196, + 59, 164, 217, 243, 233, 213, 221, 45, 225, 19, 196, 59, 164, 226, 115, + 225, 18, 59, 164, 251, 251, 217, 243, 233, 212, 59, 164, 252, 55, 224, + 197, 217, 243, 233, 212, 59, 164, 237, 173, 221, 44, 59, 164, 249, 68, + 221, 45, 251, 250, 59, 164, 225, 18, 59, 164, 231, 60, 225, 18, 59, 164, + 221, 45, 225, 18, 59, 164, 231, 60, 221, 45, 225, 18, 59, 164, 227, 96, + 251, 39, 223, 229, 225, 18, 59, 164, 227, 154, 244, 44, 225, 18, 59, 164, + 251, 135, 255, 148, 227, 26, 234, 26, 171, 251, 154, 59, 164, 244, 19, + 221, 44, 59, 235, 5, 5, 251, 67, 227, 25, 59, 235, 5, 5, 235, 77, 227, + 25, 59, 253, 248, 5, 225, 28, 244, 194, 255, 149, 227, 25, 59, 253, 248, + 5, 255, 146, 187, 59, 253, 248, 5, 226, 95, 221, 40, 59, 5, 227, 218, + 248, 179, 244, 193, 59, 5, 227, 218, 248, 179, 244, 70, 59, 5, 227, 218, + 248, 179, 244, 20, 59, 5, 227, 218, 232, 230, 244, 193, 59, 5, 227, 218, + 232, 230, 244, 70, 59, 5, 227, 218, 248, 179, 227, 218, 232, 229, 59, 20, + 217, 84, 59, 20, 107, 59, 20, 103, 59, 20, 160, 59, 20, 154, 59, 20, 174, + 59, 20, 182, 59, 20, 191, 59, 20, 185, 59, 20, 190, 59, 20, 144, 107, 59, + 20, 144, 103, 59, 20, 144, 160, 59, 20, 144, 154, 59, 20, 144, 174, 59, + 20, 144, 182, 59, 20, 144, 191, 59, 20, 144, 185, 59, 20, 144, 190, 59, + 20, 144, 217, 84, 59, 164, 251, 253, 227, 25, 59, 164, 232, 109, 251, + 204, 231, 68, 217, 23, 59, 164, 251, 135, 255, 148, 227, 26, 251, 205, + 233, 172, 251, 154, 59, 164, 232, 109, 251, 204, 225, 29, 227, 25, 59, + 164, 251, 47, 233, 212, 59, 164, 221, 56, 255, 145, 59, 164, 244, 8, 227, + 26, 243, 228, 59, 164, 244, 8, 227, 26, 243, 234, 59, 164, 254, 124, 236, + 140, 243, 228, 59, 164, 254, 124, 236, 140, 243, 234, 59, 5, 218, 42, + 221, 43, 59, 5, 234, 75, 221, 43, 59, 1, 175, 59, 1, 236, 149, 59, 1, + 245, 0, 59, 1, 244, 125, 59, 1, 232, 115, 59, 1, 251, 169, 59, 1, 251, + 69, 59, 1, 237, 123, 59, 1, 231, 77, 59, 1, 221, 29, 59, 1, 221, 19, 59, + 1, 249, 132, 59, 1, 249, 116, 59, 1, 231, 217, 59, 1, 222, 155, 59, 1, + 222, 35, 59, 1, 249, 207, 59, 1, 249, 36, 59, 1, 208, 59, 1, 187, 59, 1, + 229, 141, 59, 1, 252, 237, 59, 1, 252, 94, 59, 1, 196, 59, 1, 221, 55, + 59, 1, 221, 47, 59, 1, 247, 74, 59, 1, 247, 70, 59, 1, 219, 7, 59, 1, + 217, 80, 59, 1, 217, 114, 59, 1, 255, 151, 59, 1, 184, 59, 1, 203, 59, 1, + 235, 188, 59, 1, 225, 25, 59, 1, 223, 218, 59, 1, 226, 177, 59, 1, 155, + 59, 1, 60, 59, 1, 236, 10, 59, 1, 245, 167, 203, 59, 1, 236, 74, 59, 1, + 227, 52, 59, 29, 5, 255, 58, 59, 29, 5, 72, 59, 29, 5, 237, 255, 59, 29, + 5, 68, 59, 29, 5, 220, 23, 59, 29, 5, 167, 152, 59, 29, 5, 167, 227, 53, + 59, 29, 5, 167, 153, 59, 29, 5, 167, 235, 18, 59, 29, 5, 73, 59, 29, 5, + 246, 250, 59, 29, 5, 74, 59, 29, 5, 230, 127, 59, 5, 227, 81, 223, 104, + 232, 116, 227, 75, 59, 5, 227, 80, 252, 145, 59, 29, 5, 210, 72, 59, 29, + 5, 210, 237, 255, 59, 5, 231, 68, 217, 24, 232, 236, 249, 207, 59, 5, + 224, 37, 235, 124, 59, 164, 243, 196, 59, 164, 230, 21, 59, 5, 235, 127, + 227, 25, 59, 5, 218, 46, 227, 25, 59, 5, 235, 128, 221, 56, 251, 154, 59, + 5, 234, 28, 251, 154, 59, 5, 244, 22, 251, 155, 227, 152, 59, 5, 244, 22, + 234, 20, 227, 152, 59, 223, 97, 1, 175, 59, 223, 97, 1, 236, 149, 59, + 223, 97, 1, 245, 0, 59, 223, 97, 1, 244, 125, 59, 223, 97, 1, 232, 115, + 59, 223, 97, 1, 251, 169, 59, 223, 97, 1, 251, 69, 59, 223, 97, 1, 237, + 123, 59, 223, 97, 1, 231, 77, 59, 223, 97, 1, 221, 29, 59, 223, 97, 1, + 221, 19, 59, 223, 97, 1, 249, 132, 59, 223, 97, 1, 249, 116, 59, 223, 97, + 1, 231, 217, 59, 223, 97, 1, 222, 155, 59, 223, 97, 1, 222, 35, 59, 223, + 97, 1, 249, 207, 59, 223, 97, 1, 249, 36, 59, 223, 97, 1, 208, 59, 223, + 97, 1, 187, 59, 223, 97, 1, 229, 141, 59, 223, 97, 1, 252, 237, 59, 223, + 97, 1, 252, 94, 59, 223, 97, 1, 196, 59, 223, 97, 1, 221, 55, 59, 223, + 97, 1, 221, 47, 59, 223, 97, 1, 247, 74, 59, 223, 97, 1, 247, 70, 59, + 223, 97, 1, 219, 7, 59, 223, 97, 1, 217, 80, 59, 223, 97, 1, 217, 114, + 59, 223, 97, 1, 255, 151, 59, 223, 97, 1, 184, 59, 223, 97, 1, 203, 59, + 223, 97, 1, 235, 188, 59, 223, 97, 1, 225, 25, 59, 223, 97, 1, 223, 218, + 59, 223, 97, 1, 226, 177, 59, 223, 97, 1, 155, 59, 223, 97, 1, 60, 59, + 223, 97, 1, 236, 10, 59, 223, 97, 1, 245, 167, 219, 7, 59, 223, 97, 1, + 245, 167, 184, 59, 223, 97, 1, 245, 167, 203, 59, 236, 8, 227, 23, 236, + 149, 59, 236, 8, 227, 23, 236, 150, 251, 205, 233, 172, 251, 154, 59, + 251, 144, 5, 106, 252, 140, 59, 251, 144, 5, 170, 252, 140, 59, 251, 144, + 5, 251, 145, 222, 86, 59, 251, 144, 5, 226, 114, 255, 150, 59, 16, 247, + 121, 251, 248, 59, 16, 227, 217, 227, 82, 59, 16, 230, 35, 244, 192, 59, + 16, 227, 217, 227, 83, 227, 154, 244, 43, 59, 16, 229, 112, 187, 59, 16, + 231, 190, 251, 248, 59, 16, 231, 190, 251, 249, 231, 60, 255, 147, 59, + 16, 231, 190, 251, 249, 244, 21, 255, 147, 59, 16, 231, 190, 251, 249, + 251, 205, 255, 147, 59, 5, 227, 218, 232, 230, 227, 218, 248, 178, 59, 5, + 227, 218, 232, 230, 244, 20, 59, 164, 251, 252, 224, 197, 244, 104, 233, + 213, 227, 153, 59, 164, 233, 138, 217, 243, 244, 104, 233, 213, 227, 153, + 59, 164, 231, 60, 221, 44, 59, 164, 66, 252, 12, 227, 77, 217, 243, 233, + 213, 234, 27, 196, 59, 164, 250, 194, 252, 12, 227, 77, 217, 243, 233, + 213, 225, 31, 196, 227, 108, 223, 38, 55, 235, 114, 223, 38, 55, 227, + 108, 223, 38, 5, 2, 248, 143, 235, 114, 223, 38, 5, 2, 248, 143, 63, 1, + 175, 63, 1, 236, 149, 63, 1, 245, 0, 63, 1, 244, 125, 63, 1, 232, 115, + 63, 1, 251, 169, 63, 1, 251, 69, 63, 1, 237, 123, 63, 1, 237, 103, 63, 1, + 231, 77, 63, 1, 231, 206, 63, 1, 221, 29, 63, 1, 221, 19, 63, 1, 249, + 132, 63, 1, 249, 116, 63, 1, 231, 217, 63, 1, 222, 155, 63, 1, 222, 35, + 63, 1, 249, 207, 63, 1, 249, 36, 63, 1, 208, 63, 1, 187, 63, 1, 229, 141, + 63, 1, 252, 237, 63, 1, 252, 94, 63, 1, 196, 63, 1, 184, 63, 1, 203, 63, + 1, 235, 188, 63, 1, 219, 7, 63, 1, 226, 177, 63, 1, 155, 63, 1, 235, 17, + 63, 1, 60, 63, 1, 225, 10, 60, 63, 1, 72, 63, 1, 237, 255, 63, 1, 68, 63, + 1, 220, 23, 63, 1, 73, 63, 1, 233, 128, 73, 63, 1, 74, 63, 1, 253, 232, + 63, 29, 5, 222, 123, 255, 58, 63, 29, 5, 255, 58, 63, 29, 5, 72, 63, 29, + 5, 237, 255, 63, 29, 5, 68, 63, 29, 5, 220, 23, 63, 29, 5, 73, 63, 29, 5, + 254, 196, 63, 29, 5, 233, 128, 237, 255, 63, 29, 5, 233, 128, 74, 63, 29, + 5, 178, 50, 63, 5, 254, 95, 63, 5, 61, 56, 63, 5, 219, 77, 63, 5, 219, + 82, 63, 5, 254, 11, 63, 250, 147, 5, 128, 184, 63, 250, 147, 5, 128, 203, + 63, 250, 147, 5, 128, 219, 7, 63, 250, 147, 5, 128, 155, 63, 1, 244, 32, + 226, 177, 63, 20, 217, 84, 63, 20, 107, 63, 20, 103, 63, 20, 160, 63, 20, + 154, 63, 20, 174, 63, 20, 182, 63, 20, 191, 63, 20, 185, 63, 20, 190, 63, + 5, 235, 25, 226, 86, 63, 5, 226, 86, 63, 16, 235, 9, 63, 16, 250, 163, + 63, 16, 254, 213, 63, 16, 244, 178, 63, 1, 225, 25, 63, 1, 223, 218, 63, + 1, 167, 152, 63, 1, 167, 227, 53, 63, 1, 167, 153, 63, 1, 167, 235, 18, + 63, 29, 5, 167, 152, 63, 29, 5, 167, 227, 53, 63, 29, 5, 167, 153, 63, + 29, 5, 167, 235, 18, 63, 1, 233, 128, 232, 115, 63, 1, 233, 128, 237, + 103, 63, 1, 233, 128, 252, 178, 63, 1, 233, 128, 252, 174, 63, 250, 147, + 5, 233, 128, 128, 208, 63, 250, 147, 5, 233, 128, 128, 196, 63, 250, 147, + 5, 233, 128, 128, 235, 188, 63, 1, 225, 30, 236, 213, 225, 25, 63, 29, 5, + 225, 30, 236, 213, 246, 115, 63, 145, 164, 225, 30, 236, 213, 243, 170, + 63, 145, 164, 225, 30, 236, 213, 236, 185, 229, 118, 63, 1, 218, 215, + 228, 175, 236, 213, 222, 35, 63, 1, 218, 215, 228, 175, 236, 213, 228, + 181, 63, 29, 5, 218, 215, 228, 175, 236, 213, 246, 115, 63, 29, 5, 218, + 215, 228, 175, 236, 213, 220, 110, 63, 5, 218, 215, 228, 175, 236, 213, + 221, 131, 63, 5, 218, 215, 228, 175, 236, 213, 221, 130, 63, 5, 218, 215, + 228, 175, 236, 213, 221, 129, 63, 5, 218, 215, 228, 175, 236, 213, 221, + 128, 63, 5, 218, 215, 228, 175, 236, 213, 221, 127, 63, 1, 247, 4, 228, + 175, 236, 213, 231, 217, 63, 1, 247, 4, 228, 175, 236, 213, 217, 173, 63, + 1, 247, 4, 228, 175, 236, 213, 244, 106, 63, 29, 5, 244, 188, 236, 213, + 72, 63, 29, 5, 236, 190, 230, 167, 63, 29, 5, 236, 190, 68, 63, 29, 5, + 236, 190, 246, 250, 63, 1, 225, 10, 175, 63, 1, 225, 10, 236, 149, 63, 1, + 225, 10, 245, 0, 63, 1, 225, 10, 251, 169, 63, 1, 225, 10, 217, 114, 63, + 1, 225, 10, 231, 77, 63, 1, 225, 10, 249, 207, 63, 1, 225, 10, 208, 63, + 1, 225, 10, 229, 141, 63, 1, 225, 10, 246, 8, 63, 1, 225, 10, 252, 237, + 63, 1, 225, 10, 222, 35, 63, 1, 225, 10, 155, 63, 250, 147, 5, 225, 10, + 128, 219, 7, 63, 29, 5, 225, 10, 255, 58, 63, 29, 5, 225, 10, 73, 63, 29, + 5, 225, 10, 178, 50, 63, 29, 5, 225, 10, 39, 218, 90, 63, 5, 225, 10, + 221, 130, 63, 5, 225, 10, 221, 129, 63, 5, 225, 10, 221, 127, 63, 5, 225, + 10, 221, 126, 63, 5, 225, 10, 250, 115, 221, 130, 63, 5, 225, 10, 250, + 115, 221, 129, 63, 5, 225, 10, 250, 115, 246, 200, 221, 132, 63, 1, 227, + 12, 230, 26, 246, 8, 63, 5, 227, 12, 230, 26, 221, 127, 63, 225, 10, 20, + 217, 84, 63, 225, 10, 20, 107, 63, 225, 10, 20, 103, 63, 225, 10, 20, + 160, 63, 225, 10, 20, 154, 63, 225, 10, 20, 174, 63, 225, 10, 20, 182, + 63, 225, 10, 20, 191, 63, 225, 10, 20, 185, 63, 225, 10, 20, 190, 63, 5, + 236, 143, 221, 131, 63, 5, 236, 143, 221, 129, 63, 29, 5, 254, 186, 60, + 63, 29, 5, 254, 186, 254, 196, 63, 16, 225, 10, 107, 63, 16, 225, 10, + 246, 94, 95, 6, 1, 254, 131, 95, 6, 1, 252, 209, 95, 6, 1, 244, 230, 95, + 6, 1, 248, 153, 95, 6, 1, 246, 197, 95, 6, 1, 219, 85, 95, 6, 1, 217, 87, + 95, 6, 1, 222, 119, 95, 6, 1, 237, 223, 95, 6, 1, 236, 233, 95, 6, 1, + 235, 143, 95, 6, 1, 234, 86, 95, 6, 1, 232, 211, 95, 6, 1, 230, 138, 95, + 6, 1, 229, 243, 95, 6, 1, 217, 76, 95, 6, 1, 227, 249, 95, 6, 1, 226, + 140, 95, 6, 1, 222, 112, 95, 6, 1, 220, 87, 95, 6, 1, 229, 134, 95, 6, 1, + 236, 138, 95, 6, 1, 244, 119, 95, 6, 1, 228, 140, 95, 6, 1, 224, 209, 95, + 6, 1, 251, 22, 95, 6, 1, 251, 154, 95, 6, 1, 237, 91, 95, 6, 1, 250, 224, + 95, 6, 1, 251, 56, 95, 6, 1, 218, 136, 95, 6, 1, 237, 101, 95, 6, 1, 243, + 208, 95, 6, 1, 243, 162, 95, 6, 1, 243, 108, 95, 6, 1, 218, 227, 95, 6, + 1, 243, 182, 95, 6, 1, 243, 2, 95, 1, 254, 131, 95, 1, 252, 209, 95, 1, + 244, 230, 95, 1, 248, 153, 95, 1, 246, 197, 95, 1, 219, 85, 95, 1, 217, + 87, 95, 1, 222, 119, 95, 1, 237, 223, 95, 1, 236, 233, 95, 1, 235, 143, + 95, 1, 234, 86, 95, 1, 232, 211, 95, 1, 230, 138, 95, 1, 229, 243, 95, 1, + 217, 76, 95, 1, 227, 249, 95, 1, 226, 140, 95, 1, 222, 112, 95, 1, 220, + 87, 95, 1, 229, 134, 95, 1, 236, 138, 95, 1, 244, 119, 95, 1, 228, 140, + 95, 1, 224, 209, 95, 1, 251, 22, 95, 1, 251, 154, 95, 1, 237, 91, 95, 1, + 250, 224, 95, 1, 251, 56, 95, 1, 218, 136, 95, 1, 237, 101, 95, 1, 243, + 208, 95, 1, 243, 162, 95, 1, 243, 108, 95, 1, 218, 227, 95, 1, 243, 182, + 95, 1, 243, 2, 95, 1, 245, 203, 95, 1, 217, 233, 95, 1, 246, 210, 95, 1, + 215, 244, 230, 95, 1, 254, 191, 95, 229, 241, 225, 54, 58, 1, 95, 232, + 211, 22, 91, 236, 86, 22, 91, 223, 211, 22, 91, 232, 55, 22, 91, 221, + 192, 22, 91, 223, 200, 22, 91, 227, 140, 22, 91, 233, 187, 22, 91, 229, + 99, 22, 91, 223, 208, 22, 91, 224, 104, 22, 91, 223, 205, 22, 91, 238, + 22, 22, 91, 250, 230, 22, 91, 223, 215, 22, 91, 251, 29, 22, 91, 236, + 128, 22, 91, 222, 0, 22, 91, 229, 127, 22, 91, 243, 106, 22, 91, 232, 51, + 22, 91, 223, 209, 22, 91, 232, 45, 22, 91, 232, 49, 22, 91, 221, 189, 22, + 91, 227, 128, 22, 91, 223, 207, 22, 91, 227, 138, 22, 91, 236, 217, 22, + 91, 233, 180, 22, 91, 236, 220, 22, 91, 229, 94, 22, 91, 229, 92, 22, 91, + 229, 80, 22, 91, 229, 88, 22, 91, 229, 86, 22, 91, 229, 83, 22, 91, 229, + 85, 22, 91, 229, 82, 22, 91, 229, 87, 22, 91, 229, 97, 22, 91, 229, 98, + 22, 91, 229, 81, 22, 91, 229, 91, 22, 91, 236, 218, 22, 91, 236, 216, 22, + 91, 224, 97, 22, 91, 224, 95, 22, 91, 224, 87, 22, 91, 224, 90, 22, 91, + 224, 96, 22, 91, 224, 92, 22, 91, 224, 91, 22, 91, 224, 89, 22, 91, 224, + 100, 22, 91, 224, 102, 22, 91, 224, 103, 22, 91, 224, 98, 22, 91, 224, + 88, 22, 91, 224, 93, 22, 91, 224, 101, 22, 91, 251, 15, 22, 91, 251, 13, + 22, 91, 251, 78, 22, 91, 251, 76, 22, 91, 230, 1, 22, 91, 238, 17, 22, + 91, 238, 8, 22, 91, 238, 16, 22, 91, 238, 13, 22, 91, 238, 11, 22, 91, + 238, 15, 22, 91, 223, 212, 22, 91, 238, 20, 22, 91, 238, 21, 22, 91, 238, + 9, 22, 91, 238, 14, 22, 91, 218, 6, 22, 91, 250, 229, 22, 91, 251, 16, + 22, 91, 251, 14, 22, 91, 251, 79, 22, 91, 251, 77, 22, 91, 251, 27, 22, + 91, 251, 28, 22, 91, 251, 17, 22, 91, 251, 80, 22, 91, 229, 125, 22, 91, + 236, 219, 22, 91, 223, 213, 22, 91, 218, 12, 22, 91, 236, 77, 22, 91, + 232, 47, 22, 91, 232, 53, 22, 91, 232, 52, 22, 91, 221, 186, 22, 91, 245, + 185, 22, 122, 245, 185, 22, 122, 60, 22, 122, 254, 234, 22, 122, 184, 22, + 122, 218, 65, 22, 122, 246, 168, 22, 122, 73, 22, 122, 218, 16, 22, 122, + 218, 25, 22, 122, 74, 22, 122, 219, 7, 22, 122, 219, 4, 22, 122, 230, + 167, 22, 122, 217, 231, 22, 122, 68, 22, 122, 218, 219, 22, 122, 218, + 227, 22, 122, 218, 204, 22, 122, 217, 200, 22, 122, 246, 115, 22, 122, + 217, 250, 22, 122, 72, 22, 122, 255, 142, 22, 122, 255, 141, 22, 122, + 218, 79, 22, 122, 218, 77, 22, 122, 246, 166, 22, 122, 246, 165, 22, 122, + 246, 167, 22, 122, 218, 15, 22, 122, 218, 14, 22, 122, 231, 13, 22, 122, + 231, 14, 22, 122, 231, 7, 22, 122, 231, 12, 22, 122, 231, 10, 22, 122, + 217, 225, 22, 122, 217, 224, 22, 122, 217, 223, 22, 122, 217, 226, 22, + 122, 217, 227, 22, 122, 220, 179, 22, 122, 220, 178, 22, 122, 220, 177, + 22, 122, 220, 174, 22, 122, 220, 175, 22, 122, 217, 199, 22, 122, 217, + 196, 22, 122, 217, 197, 22, 122, 217, 191, 22, 122, 217, 192, 22, 122, + 217, 193, 22, 122, 217, 195, 22, 122, 246, 109, 22, 122, 246, 111, 22, + 122, 217, 249, 22, 122, 242, 106, 22, 122, 242, 98, 22, 122, 242, 101, + 22, 122, 242, 99, 22, 122, 242, 103, 22, 122, 242, 105, 22, 122, 254, 60, + 22, 122, 254, 57, 22, 122, 254, 55, 22, 122, 254, 56, 22, 122, 223, 216, + 22, 122, 255, 143, 22, 122, 218, 78, 22, 122, 218, 13, 22, 122, 231, 9, + 22, 122, 231, 8, 22, 85, 236, 86, 22, 85, 223, 211, 22, 85, 236, 79, 22, + 85, 232, 55, 22, 85, 232, 53, 22, 85, 232, 52, 22, 85, 221, 192, 22, 85, + 227, 140, 22, 85, 227, 135, 22, 85, 227, 132, 22, 85, 227, 125, 22, 85, + 227, 120, 22, 85, 227, 115, 22, 85, 227, 126, 22, 85, 227, 138, 22, 85, + 233, 187, 22, 85, 229, 99, 22, 85, 229, 88, 22, 85, 224, 104, 22, 85, + 223, 205, 22, 85, 238, 22, 22, 85, 250, 230, 22, 85, 251, 29, 22, 85, + 236, 128, 22, 85, 222, 0, 22, 85, 229, 127, 22, 85, 243, 106, 22, 85, + 236, 80, 22, 85, 236, 78, 22, 85, 232, 51, 22, 85, 232, 45, 22, 85, 232, + 47, 22, 85, 232, 50, 22, 85, 232, 46, 22, 85, 221, 189, 22, 85, 221, 186, + 22, 85, 227, 133, 22, 85, 227, 128, 22, 85, 227, 114, 22, 85, 227, 113, + 22, 85, 223, 207, 22, 85, 227, 130, 22, 85, 227, 129, 22, 85, 227, 122, + 22, 85, 227, 124, 22, 85, 227, 137, 22, 85, 227, 117, 22, 85, 227, 127, + 22, 85, 227, 136, 22, 85, 227, 112, 22, 85, 233, 183, 22, 85, 233, 178, + 22, 85, 233, 180, 22, 85, 233, 177, 22, 85, 233, 175, 22, 85, 233, 181, + 22, 85, 233, 186, 22, 85, 233, 184, 22, 85, 236, 220, 22, 85, 229, 90, + 22, 85, 229, 91, 22, 85, 229, 96, 22, 85, 236, 218, 22, 85, 224, 97, 22, + 85, 224, 87, 22, 85, 224, 90, 22, 85, 224, 92, 22, 85, 230, 1, 22, 85, + 238, 17, 22, 85, 238, 10, 22, 85, 223, 212, 22, 85, 238, 18, 22, 85, 218, + 6, 22, 85, 218, 2, 22, 85, 218, 3, 22, 85, 229, 125, 22, 85, 236, 219, + 22, 85, 243, 104, 22, 85, 243, 102, 22, 85, 243, 105, 22, 85, 243, 103, + 22, 85, 218, 12, 22, 85, 236, 82, 22, 85, 236, 81, 22, 85, 236, 85, 22, + 85, 236, 83, 22, 85, 236, 84, 22, 85, 223, 209, 28, 4, 155, 28, 4, 242, + 173, 28, 4, 243, 112, 28, 4, 243, 211, 28, 4, 243, 148, 28, 4, 243, 162, + 28, 4, 243, 4, 28, 4, 243, 3, 28, 4, 235, 188, 28, 4, 234, 231, 28, 4, + 235, 67, 28, 4, 235, 187, 28, 4, 235, 118, 28, 4, 235, 122, 28, 4, 235, + 12, 28, 4, 234, 206, 28, 4, 243, 121, 28, 4, 243, 115, 28, 4, 243, 117, + 28, 4, 243, 120, 28, 4, 243, 118, 28, 4, 243, 119, 28, 4, 243, 116, 28, + 4, 243, 114, 28, 4, 196, 28, 4, 233, 99, 28, 4, 233, 196, 28, 4, 234, + 118, 28, 4, 234, 16, 28, 4, 234, 25, 28, 4, 233, 136, 28, 4, 233, 49, 28, + 4, 222, 212, 28, 4, 222, 206, 28, 4, 222, 208, 28, 4, 222, 211, 28, 4, + 222, 209, 28, 4, 222, 210, 28, 4, 222, 207, 28, 4, 222, 205, 28, 4, 203, + 28, 4, 227, 22, 28, 4, 227, 147, 28, 4, 228, 0, 28, 4, 227, 200, 28, 4, + 227, 216, 28, 4, 227, 75, 28, 4, 226, 252, 28, 4, 226, 177, 28, 4, 223, + 103, 28, 4, 224, 140, 28, 4, 226, 175, 28, 4, 226, 84, 28, 4, 226, 94, + 28, 4, 224, 26, 28, 4, 223, 36, 28, 4, 225, 25, 28, 4, 224, 170, 28, 4, + 224, 221, 28, 4, 225, 21, 28, 4, 224, 244, 28, 4, 224, 246, 28, 4, 224, + 200, 28, 4, 224, 157, 28, 4, 228, 155, 28, 4, 228, 98, 28, 4, 228, 121, + 28, 4, 228, 154, 28, 4, 228, 135, 28, 4, 228, 136, 28, 4, 228, 110, 28, + 4, 228, 109, 28, 4, 228, 57, 28, 4, 228, 53, 28, 4, 228, 56, 28, 4, 228, + 54, 28, 4, 228, 55, 28, 4, 228, 133, 28, 4, 228, 127, 28, 4, 228, 129, + 28, 4, 228, 132, 28, 4, 228, 130, 28, 4, 228, 131, 28, 4, 228, 128, 28, + 4, 228, 126, 28, 4, 228, 122, 28, 4, 228, 125, 28, 4, 228, 123, 28, 4, + 228, 124, 28, 4, 252, 237, 28, 4, 251, 248, 28, 4, 252, 84, 28, 4, 252, + 236, 28, 4, 252, 137, 28, 4, 252, 144, 28, 4, 252, 41, 28, 4, 251, 218, + 28, 4, 219, 189, 28, 4, 219, 56, 28, 4, 219, 94, 28, 4, 219, 188, 28, 4, + 219, 160, 28, 4, 219, 165, 28, 4, 219, 72, 28, 4, 219, 49, 28, 4, 222, + 155, 28, 4, 221, 0, 28, 4, 221, 205, 28, 4, 222, 152, 28, 4, 222, 80, 28, + 4, 222, 87, 28, 4, 101, 28, 4, 220, 225, 28, 4, 251, 169, 28, 4, 250, 92, + 28, 4, 250, 235, 28, 4, 251, 168, 28, 4, 251, 91, 28, 4, 251, 99, 28, 4, + 250, 182, 28, 4, 250, 66, 28, 4, 218, 138, 28, 4, 218, 114, 28, 4, 218, + 130, 28, 4, 218, 137, 28, 4, 218, 134, 28, 4, 218, 135, 28, 4, 218, 121, + 28, 4, 218, 120, 28, 4, 218, 109, 28, 4, 218, 105, 28, 4, 218, 108, 28, + 4, 218, 106, 28, 4, 218, 107, 28, 4, 208, 28, 4, 231, 144, 28, 4, 232, + 62, 28, 4, 232, 235, 28, 4, 232, 139, 28, 4, 232, 141, 28, 4, 231, 204, + 28, 4, 231, 85, 28, 4, 231, 77, 28, 4, 231, 50, 28, 4, 231, 67, 28, 4, + 231, 76, 28, 4, 231, 72, 28, 4, 231, 73, 28, 4, 231, 56, 28, 4, 231, 43, + 28, 4, 244, 73, 60, 28, 4, 244, 73, 68, 28, 4, 244, 73, 72, 28, 4, 244, + 73, 255, 58, 28, 4, 244, 73, 246, 250, 28, 4, 244, 73, 73, 28, 4, 244, + 73, 74, 28, 4, 244, 73, 219, 7, 28, 4, 175, 28, 4, 236, 7, 28, 4, 236, + 113, 28, 4, 237, 5, 28, 4, 236, 183, 28, 4, 236, 184, 28, 4, 236, 57, 28, + 4, 236, 56, 28, 4, 235, 234, 28, 4, 235, 229, 28, 4, 235, 233, 28, 4, + 235, 230, 28, 4, 235, 231, 28, 4, 235, 224, 28, 4, 235, 218, 28, 4, 235, + 220, 28, 4, 235, 223, 28, 4, 235, 221, 28, 4, 235, 222, 28, 4, 235, 219, + 28, 4, 235, 217, 28, 4, 235, 213, 28, 4, 235, 216, 28, 4, 235, 214, 28, + 4, 235, 215, 28, 4, 219, 7, 28, 4, 218, 165, 28, 4, 218, 204, 28, 4, 219, + 6, 28, 4, 218, 224, 28, 4, 218, 227, 28, 4, 218, 187, 28, 4, 218, 186, + 28, 4, 229, 133, 60, 28, 4, 229, 133, 68, 28, 4, 229, 133, 72, 28, 4, + 229, 133, 255, 58, 28, 4, 229, 133, 246, 250, 28, 4, 229, 133, 73, 28, 4, + 229, 133, 74, 28, 4, 217, 114, 28, 4, 217, 13, 28, 4, 217, 42, 28, 4, + 217, 113, 28, 4, 217, 90, 28, 4, 217, 92, 28, 4, 217, 21, 28, 4, 217, 0, + 28, 4, 217, 80, 28, 4, 217, 60, 28, 4, 217, 67, 28, 4, 217, 79, 28, 4, + 217, 71, 28, 4, 217, 72, 28, 4, 217, 65, 28, 4, 217, 51, 28, 4, 184, 28, + 4, 217, 200, 28, 4, 217, 250, 28, 4, 218, 76, 28, 4, 218, 22, 28, 4, 218, + 25, 28, 4, 217, 231, 28, 4, 217, 222, 28, 4, 249, 207, 28, 4, 247, 111, + 28, 4, 249, 15, 28, 4, 249, 206, 28, 4, 249, 82, 28, 4, 249, 92, 28, 4, + 248, 167, 28, 4, 247, 83, 28, 4, 249, 132, 28, 4, 249, 102, 28, 4, 249, + 114, 28, 4, 249, 131, 28, 4, 249, 119, 28, 4, 249, 120, 28, 4, 249, 107, + 28, 4, 249, 93, 28, 4, 237, 123, 28, 4, 237, 43, 28, 4, 237, 98, 28, 4, + 237, 122, 28, 4, 237, 113, 28, 4, 237, 114, 28, 4, 237, 59, 28, 4, 237, + 25, 28, 4, 245, 0, 28, 4, 244, 17, 28, 4, 244, 103, 28, 4, 244, 253, 28, + 4, 244, 184, 28, 4, 244, 191, 28, 4, 244, 68, 28, 4, 244, 67, 28, 4, 243, + 243, 28, 4, 243, 239, 28, 4, 243, 242, 28, 4, 243, 240, 28, 4, 243, 241, + 28, 4, 244, 160, 28, 4, 244, 140, 28, 4, 244, 150, 28, 4, 244, 159, 28, + 4, 244, 154, 28, 4, 244, 155, 28, 4, 244, 144, 28, 4, 244, 129, 28, 4, + 222, 35, 28, 4, 221, 223, 28, 4, 222, 2, 28, 4, 222, 34, 28, 4, 222, 21, + 28, 4, 222, 22, 28, 4, 221, 239, 28, 4, 221, 216, 28, 4, 251, 69, 28, 4, + 250, 253, 28, 4, 251, 31, 28, 4, 251, 68, 28, 4, 251, 43, 28, 4, 251, 46, + 28, 4, 251, 11, 28, 4, 250, 242, 28, 4, 229, 141, 28, 4, 229, 114, 28, 4, + 229, 129, 28, 4, 229, 140, 28, 4, 229, 131, 28, 4, 229, 132, 28, 4, 229, + 118, 28, 4, 229, 110, 28, 4, 221, 55, 28, 4, 221, 36, 28, 4, 221, 39, 28, + 4, 221, 54, 28, 4, 221, 49, 28, 4, 221, 50, 28, 4, 221, 38, 28, 4, 221, + 34, 28, 4, 220, 188, 28, 4, 220, 180, 28, 4, 220, 184, 28, 4, 220, 187, + 28, 4, 220, 185, 28, 4, 220, 186, 28, 4, 220, 182, 28, 4, 220, 181, 28, + 4, 246, 8, 28, 4, 245, 92, 28, 4, 245, 203, 28, 4, 246, 7, 28, 4, 245, + 226, 28, 4, 245, 231, 28, 4, 245, 139, 28, 4, 245, 78, 28, 4, 187, 28, 4, + 228, 202, 28, 4, 229, 108, 28, 4, 230, 43, 28, 4, 229, 191, 28, 4, 229, + 198, 28, 4, 229, 37, 28, 4, 228, 181, 28, 4, 226, 242, 28, 4, 233, 39, + 28, 4, 245, 72, 28, 36, 244, 183, 78, 28, 226, 87, 78, 28, 218, 173, 28, + 245, 90, 223, 136, 28, 250, 168, 28, 225, 67, 28, 250, 175, 28, 228, 242, + 250, 175, 28, 228, 82, 78, 28, 229, 241, 225, 54, 28, 20, 107, 28, 20, + 103, 28, 20, 160, 28, 20, 154, 28, 20, 174, 28, 20, 182, 28, 20, 191, 28, + 20, 185, 28, 20, 190, 28, 54, 222, 65, 28, 54, 220, 219, 28, 54, 221, + 245, 28, 54, 245, 119, 28, 54, 245, 196, 28, 54, 224, 69, 28, 54, 225, + 38, 28, 54, 246, 227, 28, 54, 232, 27, 28, 54, 242, 161, 28, 54, 222, 66, + 221, 231, 28, 4, 226, 91, 233, 49, 28, 4, 233, 45, 28, 4, 233, 46, 28, 4, + 233, 47, 28, 4, 226, 91, 251, 218, 28, 4, 251, 215, 28, 4, 251, 216, 28, + 4, 251, 217, 28, 4, 226, 91, 245, 78, 28, 4, 245, 74, 28, 4, 245, 75, 28, + 4, 245, 76, 28, 4, 226, 91, 228, 181, 28, 4, 228, 177, 28, 4, 228, 178, + 28, 4, 228, 179, 28, 221, 133, 164, 217, 234, 28, 221, 133, 164, 249, 50, + 28, 221, 133, 164, 227, 97, 28, 221, 133, 164, 224, 192, 227, 97, 28, + 221, 133, 164, 248, 248, 28, 221, 133, 164, 236, 167, 28, 221, 133, 164, + 251, 19, 28, 221, 133, 164, 243, 110, 28, 221, 133, 164, 249, 49, 28, + 221, 133, 164, 235, 245, 143, 1, 60, 143, 1, 73, 143, 1, 72, 143, 1, 74, + 143, 1, 68, 143, 1, 216, 216, 143, 1, 245, 0, 143, 1, 175, 143, 1, 244, + 191, 143, 1, 244, 103, 143, 1, 244, 68, 143, 1, 244, 17, 143, 1, 243, + 244, 143, 1, 155, 143, 1, 243, 162, 143, 1, 243, 112, 143, 1, 243, 4, + 143, 1, 242, 173, 143, 1, 242, 154, 143, 1, 235, 188, 143, 1, 235, 122, + 143, 1, 235, 67, 143, 1, 235, 12, 143, 1, 234, 231, 143, 1, 234, 207, + 143, 1, 196, 143, 1, 234, 25, 143, 1, 233, 196, 143, 1, 233, 136, 143, 1, + 233, 99, 143, 1, 208, 143, 1, 243, 26, 143, 1, 232, 224, 143, 1, 232, + 141, 143, 1, 232, 62, 143, 1, 231, 204, 143, 1, 231, 144, 143, 1, 231, + 87, 143, 1, 228, 97, 143, 1, 228, 84, 143, 1, 228, 78, 143, 1, 228, 72, + 143, 1, 228, 61, 143, 1, 228, 59, 143, 1, 226, 177, 143, 1, 198, 143, 1, + 226, 94, 143, 1, 224, 140, 143, 1, 224, 26, 143, 1, 223, 103, 143, 1, + 223, 41, 143, 1, 249, 207, 143, 1, 222, 155, 143, 1, 249, 92, 143, 1, + 222, 87, 143, 1, 249, 15, 143, 1, 221, 205, 143, 1, 248, 167, 143, 1, + 247, 111, 143, 1, 247, 85, 143, 1, 248, 176, 143, 1, 221, 155, 143, 1, + 221, 154, 143, 1, 221, 144, 143, 1, 221, 143, 143, 1, 221, 142, 143, 1, + 221, 141, 143, 1, 221, 55, 143, 1, 221, 50, 143, 1, 221, 39, 143, 1, 221, + 38, 143, 1, 221, 36, 143, 1, 221, 35, 143, 1, 219, 7, 143, 1, 218, 227, + 143, 1, 218, 204, 143, 1, 218, 187, 143, 1, 218, 165, 143, 1, 218, 156, + 143, 1, 184, 143, 1, 218, 25, 143, 1, 217, 250, 143, 1, 217, 231, 143, 1, + 217, 200, 143, 1, 217, 174, 18, 19, 242, 121, 18, 19, 73, 18, 19, 255, + 22, 18, 19, 72, 18, 19, 237, 255, 18, 19, 74, 18, 19, 230, 127, 18, 19, + 218, 89, 230, 127, 18, 19, 64, 246, 250, 18, 19, 64, 72, 18, 19, 60, 18, + 19, 255, 58, 18, 19, 218, 227, 18, 19, 137, 218, 227, 18, 19, 218, 204, + 18, 19, 137, 218, 204, 18, 19, 218, 196, 18, 19, 137, 218, 196, 18, 19, + 218, 187, 18, 19, 137, 218, 187, 18, 19, 218, 180, 18, 19, 137, 218, 180, + 18, 19, 232, 207, 218, 180, 18, 19, 219, 7, 18, 19, 137, 219, 7, 18, 19, + 219, 6, 18, 19, 137, 219, 6, 18, 19, 232, 207, 219, 6, 18, 19, 254, 196, + 18, 19, 218, 89, 219, 40, 18, 19, 244, 73, 223, 136, 18, 19, 39, 168, 18, + 19, 39, 244, 36, 18, 19, 39, 252, 29, 144, 227, 93, 18, 19, 39, 221, 120, + 144, 227, 93, 18, 19, 39, 45, 144, 227, 93, 18, 19, 39, 227, 93, 18, 19, + 39, 51, 168, 18, 19, 39, 51, 224, 192, 69, 223, 107, 18, 19, 39, 233, + 193, 248, 145, 18, 19, 39, 224, 192, 186, 92, 18, 19, 39, 229, 43, 18, + 19, 39, 113, 222, 143, 18, 19, 246, 197, 18, 19, 237, 223, 18, 19, 230, + 138, 18, 19, 254, 131, 18, 19, 229, 198, 18, 19, 230, 41, 18, 19, 229, + 108, 18, 19, 229, 76, 18, 19, 229, 37, 18, 19, 229, 21, 18, 19, 218, 89, + 229, 21, 18, 19, 64, 243, 148, 18, 19, 64, 243, 112, 18, 19, 187, 18, 19, + 230, 43, 18, 19, 228, 179, 18, 19, 137, 228, 179, 18, 19, 228, 177, 18, + 19, 137, 228, 177, 18, 19, 228, 176, 18, 19, 137, 228, 176, 18, 19, 228, + 174, 18, 19, 137, 228, 174, 18, 19, 228, 173, 18, 19, 137, 228, 173, 18, + 19, 228, 181, 18, 19, 137, 228, 181, 18, 19, 228, 180, 18, 19, 137, 228, + 180, 18, 19, 218, 89, 228, 180, 18, 19, 230, 59, 18, 19, 137, 230, 59, + 18, 19, 64, 243, 225, 18, 19, 222, 87, 18, 19, 222, 150, 18, 19, 221, + 205, 18, 19, 221, 194, 18, 19, 101, 18, 19, 221, 122, 18, 19, 218, 89, + 221, 122, 18, 19, 64, 249, 82, 18, 19, 64, 249, 15, 18, 19, 222, 155, 18, + 19, 222, 152, 18, 19, 220, 223, 18, 19, 137, 220, 223, 18, 19, 220, 208, + 18, 19, 137, 220, 208, 18, 19, 220, 207, 18, 19, 137, 220, 207, 18, 19, + 103, 18, 19, 137, 103, 18, 19, 220, 203, 18, 19, 137, 220, 203, 18, 19, + 220, 225, 18, 19, 137, 220, 225, 18, 19, 220, 224, 18, 19, 137, 220, 224, + 18, 19, 232, 207, 220, 224, 18, 19, 222, 201, 18, 19, 221, 26, 18, 19, + 221, 12, 18, 19, 221, 11, 18, 19, 221, 29, 18, 19, 236, 184, 18, 19, 237, + 2, 18, 19, 236, 113, 18, 19, 236, 105, 18, 19, 236, 57, 18, 19, 236, 41, + 18, 19, 218, 89, 236, 41, 18, 19, 175, 18, 19, 237, 5, 18, 19, 235, 231, + 18, 19, 137, 235, 231, 18, 19, 235, 229, 18, 19, 137, 235, 229, 18, 19, + 235, 228, 18, 19, 137, 235, 228, 18, 19, 235, 227, 18, 19, 137, 235, 227, + 18, 19, 235, 226, 18, 19, 137, 235, 226, 18, 19, 235, 234, 18, 19, 137, + 235, 234, 18, 19, 235, 233, 18, 19, 137, 235, 233, 18, 19, 232, 207, 235, + 233, 18, 19, 237, 17, 18, 19, 235, 235, 18, 19, 224, 5, 236, 178, 18, 19, + 224, 5, 236, 106, 18, 19, 224, 5, 236, 53, 18, 19, 224, 5, 236, 245, 18, + 19, 251, 99, 18, 19, 251, 167, 18, 19, 250, 235, 18, 19, 250, 225, 18, + 19, 250, 182, 18, 19, 250, 130, 18, 19, 218, 89, 250, 130, 18, 19, 251, + 169, 18, 19, 251, 168, 18, 19, 250, 64, 18, 19, 137, 250, 64, 18, 19, + 250, 62, 18, 19, 137, 250, 62, 18, 19, 250, 61, 18, 19, 137, 250, 61, 18, + 19, 250, 60, 18, 19, 137, 250, 60, 18, 19, 250, 59, 18, 19, 137, 250, 59, + 18, 19, 250, 66, 18, 19, 137, 250, 66, 18, 19, 250, 65, 18, 19, 137, 250, + 65, 18, 19, 232, 207, 250, 65, 18, 19, 251, 202, 18, 19, 226, 116, 222, + 37, 18, 19, 234, 25, 18, 19, 234, 117, 18, 19, 233, 196, 18, 19, 233, + 171, 18, 19, 233, 136, 18, 19, 233, 119, 18, 19, 218, 89, 233, 119, 18, + 19, 196, 18, 19, 234, 118, 18, 19, 233, 47, 18, 19, 137, 233, 47, 18, 19, + 233, 45, 18, 19, 137, 233, 45, 18, 19, 233, 44, 18, 19, 137, 233, 44, 18, + 19, 233, 43, 18, 19, 137, 233, 43, 18, 19, 233, 42, 18, 19, 137, 233, 42, + 18, 19, 233, 49, 18, 19, 137, 233, 49, 18, 19, 233, 48, 18, 19, 137, 233, + 48, 18, 19, 232, 207, 233, 48, 18, 19, 189, 18, 19, 137, 189, 18, 19, + 233, 199, 18, 19, 253, 243, 189, 18, 19, 226, 116, 189, 18, 19, 232, 141, + 18, 19, 232, 234, 18, 19, 232, 62, 18, 19, 232, 38, 18, 19, 231, 204, 18, + 19, 231, 195, 18, 19, 218, 89, 231, 195, 18, 19, 208, 18, 19, 232, 235, + 18, 19, 231, 83, 18, 19, 137, 231, 83, 18, 19, 231, 85, 18, 19, 137, 231, + 85, 18, 19, 231, 84, 18, 19, 137, 231, 84, 18, 19, 232, 207, 231, 84, 18, + 19, 207, 18, 19, 64, 232, 117, 18, 19, 232, 67, 18, 19, 235, 122, 18, 19, + 235, 186, 18, 19, 235, 67, 18, 19, 235, 55, 18, 19, 235, 12, 18, 19, 234, + 248, 18, 19, 218, 89, 234, 248, 18, 19, 235, 188, 18, 19, 235, 187, 18, + 19, 234, 204, 18, 19, 137, 234, 204, 18, 19, 234, 203, 18, 19, 137, 234, + 203, 18, 19, 234, 202, 18, 19, 137, 234, 202, 18, 19, 234, 201, 18, 19, + 137, 234, 201, 18, 19, 234, 200, 18, 19, 137, 234, 200, 18, 19, 234, 206, + 18, 19, 137, 234, 206, 18, 19, 234, 205, 18, 19, 137, 234, 205, 18, 19, + 153, 18, 19, 137, 153, 18, 19, 128, 153, 18, 19, 226, 94, 18, 19, 226, + 173, 18, 19, 224, 140, 18, 19, 224, 125, 18, 19, 224, 26, 18, 19, 224, + 14, 18, 19, 218, 89, 224, 14, 18, 19, 226, 177, 18, 19, 226, 175, 18, 19, + 223, 32, 18, 19, 137, 223, 32, 18, 19, 223, 29, 18, 19, 137, 223, 29, 18, + 19, 223, 28, 18, 19, 137, 223, 28, 18, 19, 223, 27, 18, 19, 137, 223, 27, + 18, 19, 223, 26, 18, 19, 137, 223, 26, 18, 19, 223, 36, 18, 19, 137, 223, + 36, 18, 19, 223, 35, 18, 19, 137, 223, 35, 18, 19, 232, 207, 223, 35, 18, + 19, 198, 18, 19, 253, 243, 198, 18, 19, 223, 37, 18, 19, 252, 50, 198, + 18, 19, 233, 116, 224, 66, 18, 19, 232, 207, 224, 59, 18, 19, 232, 207, + 226, 233, 18, 19, 232, 207, 223, 228, 18, 19, 232, 207, 223, 105, 18, 19, + 232, 207, 224, 58, 18, 19, 232, 207, 226, 97, 18, 19, 224, 246, 18, 19, + 224, 221, 18, 19, 224, 216, 18, 19, 224, 200, 18, 19, 224, 195, 18, 19, + 225, 25, 18, 19, 225, 21, 18, 19, 224, 155, 18, 19, 137, 224, 155, 18, + 19, 224, 154, 18, 19, 137, 224, 154, 18, 19, 224, 153, 18, 19, 137, 224, + 153, 18, 19, 224, 152, 18, 19, 137, 224, 152, 18, 19, 224, 151, 18, 19, + 137, 224, 151, 18, 19, 224, 157, 18, 19, 137, 224, 157, 18, 19, 224, 156, + 18, 19, 137, 224, 156, 18, 19, 225, 27, 18, 19, 218, 25, 18, 19, 218, 74, + 18, 19, 217, 250, 18, 19, 217, 242, 18, 19, 217, 231, 18, 19, 217, 216, + 18, 19, 218, 89, 217, 216, 18, 19, 184, 18, 19, 218, 76, 18, 19, 217, + 171, 18, 19, 137, 217, 171, 18, 19, 217, 170, 18, 19, 137, 217, 170, 18, + 19, 217, 169, 18, 19, 137, 217, 169, 18, 19, 217, 168, 18, 19, 137, 217, + 168, 18, 19, 217, 167, 18, 19, 137, 217, 167, 18, 19, 217, 173, 18, 19, + 137, 217, 173, 18, 19, 217, 172, 18, 19, 137, 217, 172, 18, 19, 232, 207, + 217, 172, 18, 19, 218, 90, 18, 19, 252, 82, 218, 90, 18, 19, 137, 218, + 90, 18, 19, 226, 116, 217, 250, 18, 19, 227, 216, 18, 19, 228, 38, 227, + 216, 18, 19, 137, 235, 122, 18, 19, 227, 255, 18, 19, 227, 147, 18, 19, + 227, 98, 18, 19, 227, 75, 18, 19, 227, 67, 18, 19, 137, 235, 12, 18, 19, + 203, 18, 19, 228, 0, 18, 19, 137, 235, 188, 18, 19, 226, 251, 18, 19, + 137, 226, 251, 18, 19, 152, 18, 19, 137, 152, 18, 19, 128, 152, 18, 19, + 245, 231, 18, 19, 246, 5, 18, 19, 245, 203, 18, 19, 245, 190, 18, 19, + 245, 139, 18, 19, 245, 134, 18, 19, 246, 8, 18, 19, 246, 7, 18, 19, 245, + 77, 18, 19, 137, 245, 77, 18, 19, 246, 74, 18, 19, 222, 22, 18, 19, 233, + 32, 222, 22, 18, 19, 222, 2, 18, 19, 233, 32, 222, 2, 18, 19, 221, 254, + 18, 19, 233, 32, 221, 254, 18, 19, 221, 239, 18, 19, 221, 236, 18, 19, + 222, 35, 18, 19, 222, 34, 18, 19, 221, 215, 18, 19, 137, 221, 215, 18, + 19, 222, 37, 18, 19, 221, 17, 18, 19, 221, 16, 18, 19, 221, 15, 18, 19, + 221, 19, 18, 19, 221, 20, 18, 19, 220, 201, 18, 19, 220, 200, 18, 19, + 220, 199, 18, 19, 220, 202, 18, 19, 231, 102, 243, 162, 18, 19, 231, 102, + 243, 112, 18, 19, 231, 102, 243, 97, 18, 19, 231, 102, 243, 4, 18, 19, + 231, 102, 242, 248, 18, 19, 231, 102, 155, 18, 19, 231, 102, 243, 211, + 18, 19, 231, 102, 243, 225, 18, 19, 231, 101, 243, 225, 18, 19, 243, 90, + 18, 19, 228, 151, 18, 19, 228, 121, 18, 19, 228, 116, 18, 19, 228, 110, + 18, 19, 228, 105, 18, 19, 228, 155, 18, 19, 228, 154, 18, 19, 228, 163, + 18, 19, 221, 151, 18, 19, 221, 149, 18, 19, 221, 148, 18, 19, 221, 152, + 18, 19, 137, 227, 216, 18, 19, 137, 227, 147, 18, 19, 137, 227, 75, 18, + 19, 137, 203, 18, 19, 232, 113, 18, 19, 232, 92, 18, 19, 232, 88, 18, 19, + 232, 84, 18, 19, 232, 80, 18, 19, 232, 115, 18, 19, 232, 114, 18, 19, + 232, 117, 18, 19, 231, 215, 18, 19, 226, 116, 224, 246, 18, 19, 226, 116, + 224, 221, 18, 19, 226, 116, 224, 200, 18, 19, 226, 116, 225, 25, 18, 19, + 218, 178, 222, 22, 18, 19, 218, 178, 222, 2, 18, 19, 218, 178, 221, 239, + 18, 19, 218, 178, 222, 35, 18, 19, 218, 178, 222, 37, 18, 19, 235, 73, + 18, 19, 235, 72, 18, 19, 235, 71, 18, 19, 235, 70, 18, 19, 235, 79, 18, + 19, 235, 78, 18, 19, 235, 80, 18, 19, 222, 36, 222, 22, 18, 19, 222, 36, + 222, 2, 18, 19, 222, 36, 221, 254, 18, 19, 222, 36, 221, 239, 18, 19, + 222, 36, 221, 236, 18, 19, 222, 36, 222, 35, 18, 19, 222, 36, 222, 34, + 18, 19, 222, 36, 222, 37, 18, 19, 254, 185, 253, 204, 18, 19, 252, 50, + 73, 18, 19, 252, 50, 72, 18, 19, 252, 50, 74, 18, 19, 252, 50, 60, 18, + 19, 252, 50, 218, 227, 18, 19, 252, 50, 218, 204, 18, 19, 252, 50, 218, + 187, 18, 19, 252, 50, 219, 7, 18, 19, 252, 50, 232, 141, 18, 19, 252, 50, + 232, 62, 18, 19, 252, 50, 231, 204, 18, 19, 252, 50, 208, 18, 19, 252, + 50, 236, 184, 18, 19, 252, 50, 236, 113, 18, 19, 252, 50, 236, 57, 18, + 19, 252, 50, 175, 18, 19, 226, 116, 243, 162, 18, 19, 226, 116, 243, 112, + 18, 19, 226, 116, 243, 4, 18, 19, 226, 116, 155, 18, 19, 64, 244, 109, + 18, 19, 64, 244, 112, 18, 19, 64, 244, 116, 18, 19, 64, 244, 115, 18, 19, + 64, 244, 113, 18, 19, 64, 244, 125, 18, 19, 64, 227, 22, 18, 19, 64, 227, + 75, 18, 19, 64, 227, 216, 18, 19, 64, 227, 200, 18, 19, 64, 227, 147, 18, + 19, 64, 203, 18, 19, 64, 218, 165, 18, 19, 64, 218, 187, 18, 19, 64, 218, + 227, 18, 19, 64, 218, 224, 18, 19, 64, 218, 204, 18, 19, 64, 219, 7, 18, + 19, 64, 242, 147, 18, 19, 64, 242, 148, 18, 19, 64, 242, 151, 18, 19, 64, + 242, 150, 18, 19, 64, 242, 149, 18, 19, 64, 242, 153, 18, 19, 64, 221, + 223, 18, 19, 64, 221, 239, 18, 19, 64, 222, 22, 18, 19, 64, 222, 21, 18, + 19, 64, 222, 2, 18, 19, 64, 222, 35, 18, 19, 64, 221, 3, 18, 19, 64, 221, + 11, 18, 19, 64, 221, 26, 18, 19, 64, 221, 25, 18, 19, 64, 221, 12, 18, + 19, 64, 221, 29, 18, 19, 64, 228, 202, 18, 19, 64, 229, 37, 18, 19, 64, + 229, 198, 18, 19, 64, 229, 191, 18, 19, 64, 229, 108, 18, 19, 64, 187, + 18, 19, 64, 230, 59, 18, 19, 64, 244, 17, 18, 19, 64, 244, 68, 18, 19, + 64, 244, 191, 18, 19, 64, 244, 184, 18, 19, 64, 244, 103, 18, 19, 64, + 245, 0, 18, 19, 64, 236, 120, 18, 19, 64, 236, 125, 18, 19, 64, 236, 137, + 18, 19, 64, 236, 136, 18, 19, 64, 236, 130, 18, 19, 64, 236, 149, 18, 19, + 64, 236, 69, 18, 19, 64, 236, 70, 18, 19, 64, 236, 73, 18, 19, 64, 236, + 72, 18, 19, 64, 236, 71, 18, 19, 64, 236, 74, 18, 19, 64, 236, 75, 18, + 19, 64, 231, 144, 18, 19, 64, 231, 204, 18, 19, 64, 232, 141, 18, 19, 64, + 232, 139, 18, 19, 64, 232, 62, 18, 19, 64, 208, 18, 19, 64, 233, 99, 18, + 19, 64, 233, 136, 18, 19, 64, 234, 25, 18, 19, 64, 234, 16, 18, 19, 64, + 233, 196, 18, 19, 64, 196, 18, 19, 64, 217, 200, 18, 19, 64, 217, 231, + 18, 19, 64, 218, 25, 18, 19, 64, 218, 22, 18, 19, 64, 217, 250, 18, 19, + 64, 184, 18, 19, 64, 237, 43, 18, 19, 226, 116, 237, 43, 18, 19, 64, 237, + 59, 18, 19, 64, 237, 114, 18, 19, 64, 237, 113, 18, 19, 64, 237, 98, 18, + 19, 226, 116, 237, 98, 18, 19, 64, 237, 123, 18, 19, 64, 237, 72, 18, 19, + 64, 237, 76, 18, 19, 64, 237, 86, 18, 19, 64, 237, 85, 18, 19, 64, 237, + 84, 18, 19, 64, 237, 87, 18, 19, 64, 234, 231, 18, 19, 64, 235, 12, 18, + 19, 64, 235, 122, 18, 19, 64, 235, 118, 18, 19, 64, 235, 67, 18, 19, 64, + 235, 188, 18, 19, 64, 248, 171, 18, 19, 64, 248, 172, 18, 19, 64, 248, + 175, 18, 19, 64, 248, 174, 18, 19, 64, 248, 173, 18, 19, 64, 248, 176, + 18, 19, 64, 235, 69, 18, 19, 64, 235, 71, 18, 19, 64, 235, 75, 18, 19, + 64, 235, 74, 18, 19, 64, 235, 73, 18, 19, 64, 235, 79, 18, 19, 64, 221, + 146, 18, 19, 64, 221, 148, 18, 19, 64, 221, 151, 18, 19, 64, 221, 150, + 18, 19, 64, 221, 149, 18, 19, 64, 221, 152, 18, 19, 64, 221, 142, 18, 19, + 64, 221, 143, 18, 19, 64, 221, 154, 18, 19, 64, 221, 153, 18, 19, 64, + 221, 144, 18, 19, 64, 221, 155, 18, 19, 64, 217, 13, 18, 19, 64, 217, 21, + 18, 19, 64, 217, 92, 18, 19, 64, 217, 90, 18, 19, 64, 217, 42, 18, 19, + 64, 217, 114, 18, 19, 64, 217, 157, 18, 19, 64, 66, 217, 157, 18, 19, 64, + 247, 65, 18, 19, 64, 247, 66, 18, 19, 64, 247, 73, 18, 19, 64, 247, 72, + 18, 19, 64, 247, 68, 18, 19, 64, 247, 74, 18, 19, 64, 223, 103, 18, 19, + 64, 224, 26, 18, 19, 64, 226, 94, 18, 19, 64, 226, 84, 18, 19, 64, 224, + 140, 18, 19, 64, 226, 177, 18, 19, 64, 224, 170, 18, 19, 64, 224, 200, + 18, 19, 64, 224, 246, 18, 19, 64, 224, 244, 18, 19, 64, 224, 221, 18, 19, + 64, 225, 25, 18, 19, 64, 225, 27, 18, 19, 64, 221, 36, 18, 19, 64, 221, + 38, 18, 19, 64, 221, 50, 18, 19, 64, 221, 49, 18, 19, 64, 221, 39, 18, + 19, 64, 221, 55, 18, 19, 64, 250, 253, 18, 19, 64, 251, 11, 18, 19, 64, + 251, 46, 18, 19, 64, 251, 43, 18, 19, 64, 251, 31, 18, 19, 64, 251, 69, + 18, 19, 64, 221, 5, 18, 19, 64, 221, 6, 18, 19, 64, 221, 9, 18, 19, 64, + 221, 8, 18, 19, 64, 221, 7, 18, 19, 64, 221, 10, 18, 19, 251, 32, 55, 18, + 19, 245, 90, 223, 136, 18, 19, 228, 147, 18, 19, 232, 112, 18, 19, 231, + 212, 18, 19, 231, 211, 18, 19, 231, 210, 18, 19, 231, 209, 18, 19, 231, + 214, 18, 19, 231, 213, 18, 19, 218, 178, 221, 213, 18, 19, 218, 178, 221, + 212, 18, 19, 218, 178, 221, 211, 18, 19, 218, 178, 221, 210, 18, 19, 218, + 178, 221, 209, 18, 19, 218, 178, 221, 216, 18, 19, 218, 178, 221, 215, + 18, 19, 218, 178, 39, 222, 37, 18, 19, 252, 50, 219, 40, 230, 164, 223, + 255, 78, 230, 164, 1, 252, 122, 230, 164, 1, 234, 222, 230, 164, 1, 245, + 230, 230, 164, 1, 226, 161, 230, 164, 1, 232, 25, 230, 164, 1, 220, 122, + 230, 164, 1, 249, 185, 230, 164, 1, 221, 173, 230, 164, 1, 250, 177, 230, + 164, 1, 251, 89, 230, 164, 1, 233, 91, 230, 164, 1, 244, 53, 230, 164, 1, + 232, 105, 230, 164, 1, 223, 131, 230, 164, 1, 227, 18, 230, 164, 1, 254, + 193, 230, 164, 1, 230, 131, 230, 164, 1, 220, 50, 230, 164, 1, 247, 14, + 230, 164, 1, 237, 165, 230, 164, 1, 247, 15, 230, 164, 1, 230, 105, 230, + 164, 1, 220, 103, 230, 164, 1, 238, 5, 230, 164, 1, 247, 12, 230, 164, 1, + 229, 184, 230, 164, 245, 229, 78, 230, 164, 210, 245, 229, 78, 157, 1, + 245, 220, 245, 212, 245, 232, 246, 74, 157, 1, 216, 216, 157, 1, 220, 36, + 220, 51, 68, 157, 1, 217, 202, 157, 1, 218, 90, 157, 1, 219, 40, 157, 1, + 221, 218, 221, 217, 221, 234, 157, 1, 246, 118, 157, 1, 254, 106, 60, + 157, 1, 230, 94, 74, 157, 1, 255, 3, 60, 157, 1, 254, 219, 157, 1, 234, + 254, 74, 157, 1, 224, 185, 74, 157, 1, 74, 157, 1, 230, 167, 157, 1, 230, + 138, 157, 1, 227, 244, 227, 253, 227, 195, 152, 157, 1, 236, 195, 157, 1, + 251, 87, 157, 1, 236, 196, 237, 17, 157, 1, 245, 67, 157, 1, 246, 185, + 157, 1, 244, 187, 243, 231, 245, 67, 157, 1, 244, 220, 157, 1, 218, 160, + 218, 155, 219, 40, 157, 1, 243, 203, 243, 225, 157, 1, 243, 207, 243, + 225, 157, 1, 235, 0, 243, 225, 157, 1, 224, 188, 243, 225, 157, 1, 232, + 203, 231, 74, 232, 204, 207, 157, 1, 224, 186, 207, 157, 1, 247, 140, + 157, 1, 237, 148, 237, 152, 237, 142, 72, 157, 1, 73, 157, 1, 237, 106, + 237, 126, 157, 1, 244, 173, 157, 1, 235, 1, 254, 234, 157, 1, 224, 190, + 60, 157, 1, 237, 135, 246, 164, 157, 1, 229, 155, 229, 173, 230, 59, 157, + 1, 254, 162, 246, 163, 157, 1, 224, 3, 198, 157, 1, 224, 129, 234, 253, + 198, 157, 1, 224, 184, 198, 157, 1, 251, 202, 157, 1, 217, 157, 157, 1, + 221, 159, 221, 166, 220, 190, 222, 201, 157, 1, 224, 183, 222, 201, 157, + 1, 250, 46, 157, 1, 252, 107, 252, 110, 252, 56, 253, 204, 157, 1, 224, + 189, 253, 204, 157, 1, 247, 139, 157, 1, 230, 115, 157, 1, 246, 238, 246, + 240, 73, 157, 1, 234, 81, 234, 87, 189, 157, 1, 234, 255, 189, 157, 1, + 224, 187, 189, 157, 1, 235, 136, 235, 171, 235, 4, 153, 157, 1, 247, 141, + 157, 1, 237, 203, 157, 1, 237, 204, 157, 1, 249, 196, 249, 201, 250, 46, + 157, 1, 230, 90, 246, 117, 74, 157, 1, 247, 11, 157, 1, 237, 164, 157, 1, + 250, 63, 157, 1, 251, 160, 157, 1, 251, 98, 157, 1, 223, 161, 157, 1, + 234, 252, 157, 1, 224, 182, 157, 1, 242, 64, 157, 1, 228, 163, 157, 1, + 218, 151, 157, 224, 109, 228, 196, 157, 233, 85, 228, 196, 157, 250, 101, + 228, 196, 157, 254, 33, 100, 157, 220, 227, 100, 157, 252, 121, 100, 222, + 140, 1, 60, 222, 140, 1, 72, 222, 140, 1, 68, 222, 140, 1, 175, 222, 140, + 1, 245, 0, 222, 140, 1, 232, 115, 222, 140, 1, 222, 155, 222, 140, 1, + 249, 207, 222, 140, 1, 208, 222, 140, 1, 187, 222, 140, 1, 252, 237, 222, + 140, 1, 196, 222, 140, 1, 184, 222, 140, 1, 235, 188, 222, 140, 1, 219, + 7, 222, 140, 1, 226, 177, 222, 140, 1, 155, 222, 140, 29, 5, 72, 222, + 140, 29, 5, 68, 222, 140, 5, 219, 82, 243, 184, 1, 60, 243, 184, 1, 72, + 243, 184, 1, 68, 243, 184, 1, 175, 243, 184, 1, 245, 0, 243, 184, 1, 232, + 115, 243, 184, 1, 222, 155, 243, 184, 1, 249, 207, 243, 184, 1, 208, 243, + 184, 1, 187, 243, 184, 1, 252, 237, 243, 184, 1, 196, 243, 184, 1, 184, + 243, 184, 1, 203, 243, 184, 1, 235, 188, 243, 184, 1, 219, 7, 243, 184, + 1, 226, 177, 243, 184, 1, 155, 243, 184, 29, 5, 72, 243, 184, 29, 5, 68, + 243, 184, 5, 230, 14, 229, 122, 224, 109, 228, 196, 229, 122, 51, 228, + 196, 251, 245, 1, 60, 251, 245, 1, 72, 251, 245, 1, 68, 251, 245, 1, 175, + 251, 245, 1, 245, 0, 251, 245, 1, 232, 115, 251, 245, 1, 222, 155, 251, + 245, 1, 249, 207, 251, 245, 1, 208, 251, 245, 1, 187, 251, 245, 1, 252, + 237, 251, 245, 1, 196, 251, 245, 1, 184, 251, 245, 1, 203, 251, 245, 1, + 235, 188, 251, 245, 1, 219, 7, 251, 245, 1, 226, 177, 251, 245, 1, 155, + 251, 245, 29, 5, 72, 251, 245, 29, 5, 68, 222, 139, 1, 60, 222, 139, 1, + 72, 222, 139, 1, 68, 222, 139, 1, 175, 222, 139, 1, 245, 0, 222, 139, 1, + 232, 115, 222, 139, 1, 222, 155, 222, 139, 1, 249, 207, 222, 139, 1, 208, + 222, 139, 1, 187, 222, 139, 1, 252, 237, 222, 139, 1, 196, 222, 139, 1, + 184, 222, 139, 1, 235, 188, 222, 139, 1, 219, 7, 222, 139, 1, 226, 177, + 222, 139, 29, 5, 72, 222, 139, 29, 5, 68, 79, 1, 175, 79, 1, 236, 149, + 79, 1, 236, 57, 79, 1, 236, 125, 79, 1, 232, 84, 79, 1, 251, 169, 79, 1, + 251, 69, 79, 1, 250, 182, 79, 1, 251, 11, 79, 1, 231, 56, 79, 1, 249, + 207, 79, 1, 221, 19, 79, 1, 248, 167, 79, 1, 221, 15, 79, 1, 231, 207, + 79, 1, 222, 155, 79, 1, 222, 35, 79, 1, 101, 79, 1, 221, 239, 79, 1, 231, + 204, 79, 1, 252, 237, 79, 1, 229, 141, 79, 1, 229, 37, 79, 1, 229, 118, + 79, 1, 233, 136, 79, 1, 217, 231, 79, 1, 227, 75, 79, 1, 235, 12, 79, 1, + 219, 72, 79, 1, 225, 25, 79, 1, 223, 182, 79, 1, 226, 177, 79, 1, 155, + 79, 1, 235, 188, 79, 1, 228, 155, 79, 237, 214, 29, 228, 141, 79, 237, + 214, 29, 228, 154, 79, 237, 214, 29, 228, 121, 79, 237, 214, 29, 228, + 116, 79, 237, 214, 29, 228, 98, 79, 237, 214, 29, 228, 73, 79, 237, 214, + 29, 228, 61, 79, 237, 214, 29, 228, 60, 79, 237, 214, 29, 226, 243, 79, + 237, 214, 29, 226, 236, 79, 237, 214, 29, 234, 198, 79, 237, 214, 29, + 234, 189, 79, 237, 214, 29, 228, 136, 79, 237, 214, 29, 228, 147, 79, + 237, 214, 29, 228, 106, 220, 198, 107, 79, 237, 214, 29, 228, 106, 220, + 198, 103, 79, 237, 214, 29, 228, 137, 79, 29, 237, 202, 254, 69, 79, 29, + 237, 202, 255, 58, 79, 29, 5, 255, 58, 79, 29, 5, 72, 79, 29, 5, 237, + 255, 79, 29, 5, 218, 90, 79, 29, 5, 217, 166, 79, 29, 5, 68, 79, 29, 5, + 220, 23, 79, 29, 5, 220, 123, 79, 29, 5, 230, 167, 79, 29, 5, 184, 79, + 29, 5, 238, 26, 79, 29, 5, 73, 79, 29, 5, 254, 234, 79, 29, 5, 254, 196, + 79, 29, 5, 230, 127, 79, 29, 5, 253, 232, 79, 5, 232, 37, 79, 5, 227, + 214, 79, 5, 217, 176, 79, 5, 233, 55, 79, 5, 221, 80, 79, 5, 252, 203, + 79, 5, 227, 71, 79, 5, 221, 138, 79, 5, 236, 239, 79, 5, 254, 198, 79, 5, + 226, 141, 226, 137, 79, 5, 219, 79, 79, 5, 250, 179, 79, 5, 252, 183, 79, + 5, 236, 142, 79, 5, 252, 199, 79, 5, 251, 156, 229, 77, 235, 239, 79, 5, + 235, 100, 221, 122, 79, 5, 252, 96, 79, 5, 229, 120, 233, 97, 79, 5, 236, + 40, 79, 250, 78, 16, 227, 142, 79, 5, 253, 218, 79, 5, 253, 235, 79, 20, + 217, 84, 79, 20, 107, 79, 20, 103, 79, 20, 160, 79, 20, 154, 79, 20, 174, + 79, 20, 182, 79, 20, 191, 79, 20, 185, 79, 20, 190, 79, 16, 235, 100, + 253, 237, 224, 16, 79, 16, 235, 100, 253, 237, 233, 72, 79, 16, 235, 100, + 253, 237, 229, 76, 79, 16, 235, 100, 253, 237, 252, 123, 79, 16, 235, + 100, 253, 237, 251, 233, 79, 16, 235, 100, 253, 237, 229, 1, 79, 16, 235, + 100, 253, 237, 228, 251, 79, 16, 235, 100, 253, 237, 228, 249, 79, 16, + 235, 100, 253, 237, 228, 255, 79, 16, 235, 100, 253, 237, 228, 253, 77, + 252, 66, 77, 246, 208, 77, 250, 168, 77, 245, 90, 223, 136, 77, 250, 175, + 77, 245, 116, 248, 143, 77, 221, 137, 224, 21, 242, 121, 77, 224, 139, 4, + 252, 26, 234, 63, 77, 234, 84, 250, 168, 77, 234, 84, 245, 90, 223, 136, + 77, 232, 23, 77, 245, 103, 41, 226, 74, 107, 77, 245, 103, 41, 226, 74, + 103, 77, 245, 103, 41, 226, 74, 160, 77, 29, 225, 54, 77, 20, 217, 84, + 77, 20, 107, 77, 20, 103, 77, 20, 160, 77, 20, 154, 77, 20, 174, 77, 20, + 182, 77, 20, 191, 77, 20, 185, 77, 20, 190, 77, 1, 60, 77, 1, 73, 77, 1, + 72, 77, 1, 74, 77, 1, 68, 77, 1, 230, 167, 77, 1, 220, 110, 77, 1, 246, + 250, 77, 1, 208, 77, 1, 254, 123, 77, 1, 252, 237, 77, 1, 187, 77, 1, + 228, 155, 77, 1, 245, 0, 77, 1, 196, 77, 1, 235, 188, 77, 1, 226, 177, + 77, 1, 225, 25, 77, 1, 222, 155, 77, 1, 249, 207, 77, 1, 251, 69, 77, 1, + 237, 123, 77, 1, 184, 77, 1, 203, 77, 1, 219, 7, 77, 1, 246, 8, 77, 1, + 175, 77, 1, 236, 149, 77, 1, 221, 55, 77, 1, 217, 114, 77, 1, 243, 211, + 77, 1, 217, 14, 77, 1, 235, 79, 77, 1, 217, 67, 77, 1, 251, 31, 77, 1, + 221, 137, 171, 29, 55, 77, 1, 221, 137, 73, 77, 1, 221, 137, 72, 77, 1, + 221, 137, 74, 77, 1, 221, 137, 68, 77, 1, 221, 137, 230, 167, 77, 1, 221, + 137, 220, 110, 77, 1, 221, 137, 254, 123, 77, 1, 221, 137, 252, 237, 77, + 1, 221, 137, 187, 77, 1, 221, 137, 228, 155, 77, 1, 221, 137, 245, 0, 77, + 1, 221, 137, 196, 77, 1, 221, 137, 222, 155, 77, 1, 221, 137, 249, 207, + 77, 1, 221, 137, 251, 69, 77, 1, 221, 137, 237, 123, 77, 1, 221, 137, + 221, 55, 77, 1, 221, 137, 184, 77, 1, 221, 137, 219, 7, 77, 1, 221, 137, + 175, 77, 1, 221, 137, 244, 253, 77, 1, 221, 137, 243, 211, 77, 1, 221, + 137, 237, 97, 77, 1, 221, 137, 232, 60, 77, 1, 221, 137, 247, 74, 77, 1, + 224, 139, 73, 77, 1, 224, 139, 72, 77, 1, 224, 139, 237, 133, 77, 1, 224, + 139, 220, 110, 77, 1, 224, 139, 68, 77, 1, 224, 139, 254, 123, 77, 1, + 224, 139, 175, 77, 1, 224, 139, 245, 0, 77, 1, 224, 139, 155, 77, 1, 224, + 139, 187, 77, 1, 224, 139, 225, 25, 77, 1, 224, 139, 222, 155, 77, 1, + 224, 139, 249, 207, 77, 1, 224, 139, 237, 123, 77, 1, 224, 139, 246, 8, + 77, 1, 224, 139, 244, 253, 77, 1, 224, 139, 243, 211, 77, 1, 224, 139, + 221, 55, 77, 1, 224, 139, 217, 114, 77, 1, 224, 139, 228, 0, 77, 1, 224, + 139, 251, 69, 77, 1, 224, 139, 217, 80, 77, 1, 234, 84, 72, 77, 1, 234, + 84, 175, 77, 1, 234, 84, 203, 77, 1, 234, 84, 246, 8, 77, 1, 234, 84, + 217, 80, 77, 1, 254, 161, 244, 238, 254, 96, 107, 77, 1, 254, 161, 244, + 238, 219, 78, 107, 77, 1, 254, 161, 244, 238, 249, 174, 77, 1, 254, 161, + 244, 238, 220, 120, 77, 1, 254, 161, 244, 238, 237, 170, 220, 120, 77, 1, + 254, 161, 244, 238, 252, 212, 77, 1, 254, 161, 244, 238, 148, 252, 212, + 77, 1, 254, 161, 244, 238, 60, 77, 1, 254, 161, 244, 238, 72, 77, 1, 254, + 161, 244, 238, 175, 77, 1, 254, 161, 244, 238, 232, 115, 77, 1, 254, 161, + 244, 238, 251, 169, 77, 1, 254, 161, 244, 238, 221, 29, 77, 1, 254, 161, + 244, 238, 221, 19, 77, 1, 254, 161, 244, 238, 249, 132, 77, 1, 254, 161, + 244, 238, 231, 217, 77, 1, 254, 161, 244, 238, 222, 155, 77, 1, 254, 161, + 244, 238, 249, 207, 77, 1, 254, 161, 244, 238, 187, 77, 1, 254, 161, 244, + 238, 229, 141, 77, 1, 254, 161, 244, 238, 223, 218, 77, 1, 254, 161, 244, + 238, 217, 80, 77, 1, 254, 161, 244, 238, 217, 114, 77, 1, 254, 161, 244, + 238, 254, 202, 77, 1, 221, 137, 254, 161, 244, 238, 222, 155, 77, 1, 221, + 137, 254, 161, 244, 238, 217, 80, 77, 1, 234, 84, 254, 161, 244, 238, + 244, 125, 77, 1, 234, 84, 254, 161, 244, 238, 232, 115, 77, 1, 234, 84, + 254, 161, 244, 238, 251, 169, 77, 1, 234, 84, 254, 161, 244, 238, 237, + 103, 77, 1, 234, 84, 254, 161, 244, 238, 221, 29, 77, 1, 234, 84, 254, + 161, 244, 238, 249, 116, 77, 1, 234, 84, 254, 161, 244, 238, 222, 155, + 77, 1, 234, 84, 254, 161, 244, 238, 249, 36, 77, 1, 234, 84, 254, 161, + 244, 238, 223, 218, 77, 1, 234, 84, 254, 161, 244, 238, 250, 57, 77, 1, + 234, 84, 254, 161, 244, 238, 217, 80, 77, 1, 234, 84, 254, 161, 244, 238, + 217, 114, 77, 1, 254, 161, 244, 238, 144, 68, 77, 1, 254, 161, 244, 238, + 144, 184, 77, 1, 234, 84, 254, 161, 244, 238, 252, 94, 77, 1, 254, 161, + 244, 238, 249, 197, 77, 1, 234, 84, 254, 161, 244, 238, 235, 79, 18, 19, + 230, 63, 18, 19, 253, 212, 18, 19, 255, 14, 18, 19, 218, 229, 18, 19, + 229, 7, 18, 19, 229, 205, 18, 19, 228, 172, 18, 19, 222, 96, 18, 19, 236, + 191, 18, 19, 235, 232, 18, 19, 234, 45, 18, 19, 231, 172, 18, 19, 232, + 199, 18, 19, 235, 132, 18, 19, 224, 1, 18, 19, 226, 118, 18, 19, 224, + 175, 18, 19, 224, 249, 18, 19, 224, 150, 18, 19, 217, 208, 18, 19, 218, + 30, 18, 19, 227, 222, 18, 19, 231, 82, 18, 19, 230, 155, 231, 82, 18, 19, + 231, 81, 18, 19, 230, 155, 231, 81, 18, 19, 231, 80, 18, 19, 230, 155, + 231, 80, 18, 19, 231, 79, 18, 19, 230, 155, 231, 79, 18, 19, 226, 248, + 18, 19, 226, 247, 18, 19, 226, 246, 18, 19, 226, 245, 18, 19, 226, 244, + 18, 19, 226, 252, 18, 19, 230, 155, 230, 59, 18, 19, 230, 155, 222, 201, + 18, 19, 230, 155, 237, 17, 18, 19, 230, 155, 251, 202, 18, 19, 230, 155, + 189, 18, 19, 230, 155, 207, 18, 19, 230, 155, 198, 18, 19, 230, 155, 225, + 27, 18, 19, 247, 4, 219, 40, 18, 19, 218, 215, 219, 40, 18, 19, 39, 3, + 227, 93, 18, 19, 39, 227, 241, 248, 145, 18, 19, 228, 38, 226, 249, 18, + 19, 137, 234, 248, 18, 19, 137, 235, 187, 18, 19, 221, 214, 18, 19, 221, + 216, 18, 19, 221, 13, 18, 19, 221, 14, 18, 19, 221, 18, 18, 19, 221, 145, + 18, 19, 221, 147, 18, 19, 226, 116, 224, 155, 18, 19, 226, 116, 224, 195, + 18, 19, 226, 116, 242, 248, 18, 19, 64, 243, 238, 18, 19, 64, 249, 60, + 244, 184, 18, 19, 64, 244, 253, 18, 19, 64, 243, 243, 18, 19, 226, 116, + 237, 27, 18, 19, 64, 237, 25, 18, 19, 252, 139, 249, 60, 153, 18, 19, + 252, 139, 249, 60, 152, 18, 19, 64, 249, 55, 198, 195, 219, 59, 235, 84, + 195, 1, 175, 195, 1, 236, 149, 195, 1, 245, 0, 195, 1, 244, 125, 195, 1, + 232, 115, 195, 1, 251, 169, 195, 1, 251, 69, 195, 1, 237, 123, 195, 1, + 237, 103, 195, 1, 218, 47, 195, 1, 222, 155, 195, 1, 222, 35, 195, 1, + 249, 207, 195, 1, 249, 36, 195, 1, 208, 195, 1, 187, 195, 1, 229, 141, + 195, 1, 252, 237, 195, 1, 252, 94, 195, 1, 196, 195, 1, 184, 195, 1, 203, + 195, 1, 235, 188, 195, 1, 219, 7, 195, 1, 225, 25, 195, 1, 223, 218, 195, + 1, 226, 177, 195, 1, 155, 195, 29, 5, 60, 195, 29, 5, 72, 195, 29, 5, 68, + 195, 29, 5, 246, 250, 195, 29, 5, 254, 196, 195, 29, 5, 230, 127, 195, + 29, 5, 253, 232, 195, 29, 5, 73, 195, 29, 5, 74, 195, 223, 97, 1, 184, + 195, 223, 97, 1, 203, 195, 223, 97, 1, 219, 7, 195, 3, 1, 175, 195, 3, 1, + 232, 115, 195, 3, 1, 254, 95, 195, 3, 1, 222, 155, 195, 3, 1, 208, 195, + 3, 1, 187, 195, 3, 1, 196, 195, 3, 1, 203, 195, 3, 1, 235, 188, 195, 5, + 233, 89, 195, 5, 236, 173, 195, 5, 226, 176, 195, 5, 234, 248, 195, 246, + 95, 78, 195, 228, 82, 78, 195, 20, 217, 84, 195, 20, 107, 195, 20, 103, + 195, 20, 160, 195, 20, 154, 195, 20, 174, 195, 20, 182, 195, 20, 191, + 195, 20, 185, 195, 20, 190, 37, 235, 123, 1, 175, 37, 235, 123, 1, 218, + 138, 37, 235, 123, 1, 232, 115, 37, 235, 123, 1, 221, 55, 37, 235, 123, + 1, 226, 177, 37, 235, 123, 1, 184, 37, 235, 123, 1, 222, 155, 37, 235, + 123, 1, 222, 35, 37, 235, 123, 1, 235, 188, 37, 235, 123, 1, 187, 37, + 235, 123, 1, 229, 141, 37, 235, 123, 1, 196, 37, 235, 123, 1, 246, 8, 37, + 235, 123, 1, 219, 189, 37, 235, 123, 1, 155, 37, 235, 123, 1, 228, 155, + 37, 235, 123, 1, 236, 149, 37, 235, 123, 1, 221, 47, 37, 235, 123, 1, + 208, 37, 235, 123, 1, 60, 37, 235, 123, 1, 72, 37, 235, 123, 1, 246, 250, + 37, 235, 123, 1, 246, 239, 37, 235, 123, 1, 68, 37, 235, 123, 1, 230, + 127, 37, 235, 123, 1, 74, 37, 235, 123, 1, 220, 110, 37, 235, 123, 1, 73, + 37, 235, 123, 1, 253, 231, 37, 235, 123, 1, 254, 196, 37, 235, 123, 1, + 221, 130, 37, 235, 123, 1, 221, 129, 37, 235, 123, 1, 221, 128, 37, 235, + 123, 1, 221, 127, 37, 235, 123, 1, 221, 126, 146, 37, 151, 1, 116, 228, + 155, 146, 37, 151, 1, 109, 228, 155, 146, 37, 151, 1, 116, 175, 146, 37, + 151, 1, 116, 218, 138, 146, 37, 151, 1, 116, 232, 115, 146, 37, 151, 1, + 109, 175, 146, 37, 151, 1, 109, 218, 138, 146, 37, 151, 1, 109, 232, 115, + 146, 37, 151, 1, 116, 221, 55, 146, 37, 151, 1, 116, 226, 177, 146, 37, + 151, 1, 116, 184, 146, 37, 151, 1, 109, 221, 55, 146, 37, 151, 1, 109, + 226, 177, 146, 37, 151, 1, 109, 184, 146, 37, 151, 1, 116, 222, 155, 146, + 37, 151, 1, 116, 222, 35, 146, 37, 151, 1, 116, 208, 146, 37, 151, 1, + 109, 222, 155, 146, 37, 151, 1, 109, 222, 35, 146, 37, 151, 1, 109, 208, + 146, 37, 151, 1, 116, 187, 146, 37, 151, 1, 116, 229, 141, 146, 37, 151, + 1, 116, 196, 146, 37, 151, 1, 109, 187, 146, 37, 151, 1, 109, 229, 141, + 146, 37, 151, 1, 109, 196, 146, 37, 151, 1, 116, 246, 8, 146, 37, 151, 1, + 116, 219, 189, 146, 37, 151, 1, 116, 235, 188, 146, 37, 151, 1, 109, 246, + 8, 146, 37, 151, 1, 109, 219, 189, 146, 37, 151, 1, 109, 235, 188, 146, + 37, 151, 1, 116, 155, 146, 37, 151, 1, 116, 249, 207, 146, 37, 151, 1, + 116, 252, 237, 146, 37, 151, 1, 109, 155, 146, 37, 151, 1, 109, 249, 207, + 146, 37, 151, 1, 109, 252, 237, 146, 37, 151, 1, 116, 235, 236, 146, 37, + 151, 1, 116, 218, 111, 146, 37, 151, 1, 109, 235, 236, 146, 37, 151, 1, + 109, 218, 111, 146, 37, 151, 1, 116, 223, 102, 146, 37, 151, 1, 109, 223, + 102, 146, 37, 151, 29, 5, 29, 224, 181, 146, 37, 151, 29, 5, 255, 58, + 146, 37, 151, 29, 5, 237, 255, 146, 37, 151, 29, 5, 68, 146, 37, 151, 29, + 5, 220, 23, 146, 37, 151, 29, 5, 73, 146, 37, 151, 29, 5, 254, 234, 146, + 37, 151, 29, 5, 74, 146, 37, 151, 29, 5, 230, 185, 146, 37, 151, 29, 5, + 220, 110, 146, 37, 151, 29, 5, 253, 212, 146, 37, 151, 29, 5, 255, 14, + 146, 37, 151, 29, 5, 220, 16, 146, 37, 151, 29, 5, 230, 63, 146, 37, 151, + 29, 5, 230, 182, 146, 37, 151, 29, 5, 220, 107, 146, 37, 151, 29, 5, 237, + 133, 146, 37, 151, 1, 39, 216, 216, 146, 37, 151, 1, 39, 232, 117, 146, + 37, 151, 1, 39, 207, 146, 37, 151, 1, 39, 189, 146, 37, 151, 1, 39, 237, + 17, 146, 37, 151, 1, 39, 250, 46, 146, 37, 151, 1, 39, 253, 204, 146, 37, + 151, 145, 234, 67, 146, 37, 151, 145, 234, 66, 146, 37, 151, 20, 217, 84, + 146, 37, 151, 20, 107, 146, 37, 151, 20, 103, 146, 37, 151, 20, 160, 146, + 37, 151, 20, 154, 146, 37, 151, 20, 174, 146, 37, 151, 20, 182, 146, 37, + 151, 20, 191, 146, 37, 151, 20, 185, 146, 37, 151, 20, 190, 146, 37, 151, + 83, 20, 107, 146, 37, 151, 5, 235, 177, 146, 37, 151, 5, 235, 176, 79, + 16, 229, 211, 79, 16, 233, 73, 236, 55, 79, 16, 229, 77, 236, 55, 79, 16, + 252, 124, 236, 55, 79, 16, 251, 234, 236, 55, 79, 16, 229, 2, 236, 55, + 79, 16, 228, 252, 236, 55, 79, 16, 228, 250, 236, 55, 79, 16, 229, 0, + 236, 55, 79, 16, 228, 254, 236, 55, 79, 16, 249, 163, 236, 55, 79, 16, + 249, 159, 236, 55, 79, 16, 249, 158, 236, 55, 79, 16, 249, 161, 236, 55, + 79, 16, 249, 160, 236, 55, 79, 16, 249, 157, 236, 55, 79, 16, 220, 230, + 79, 16, 233, 73, 227, 70, 79, 16, 229, 77, 227, 70, 79, 16, 252, 124, + 227, 70, 79, 16, 251, 234, 227, 70, 79, 16, 229, 2, 227, 70, 79, 16, 228, + 252, 227, 70, 79, 16, 228, 250, 227, 70, 79, 16, 229, 0, 227, 70, 79, 16, + 228, 254, 227, 70, 79, 16, 249, 163, 227, 70, 79, 16, 249, 159, 227, 70, + 79, 16, 249, 158, 227, 70, 79, 16, 249, 161, 227, 70, 79, 16, 249, 160, + 227, 70, 79, 16, 249, 157, 227, 70, 251, 246, 1, 175, 251, 246, 1, 245, + 0, 251, 246, 1, 232, 115, 251, 246, 1, 232, 87, 251, 246, 1, 187, 251, + 246, 1, 252, 237, 251, 246, 1, 196, 251, 246, 1, 233, 102, 251, 246, 1, + 222, 155, 251, 246, 1, 249, 207, 251, 246, 1, 208, 251, 246, 1, 231, 171, + 251, 246, 1, 251, 169, 251, 246, 1, 237, 123, 251, 246, 1, 231, 77, 251, + 246, 1, 231, 75, 251, 246, 1, 184, 251, 246, 1, 203, 251, 246, 1, 235, + 188, 251, 246, 1, 219, 189, 251, 246, 1, 226, 177, 251, 246, 1, 60, 251, + 246, 1, 155, 251, 246, 29, 5, 72, 251, 246, 29, 5, 68, 251, 246, 29, 5, + 73, 251, 246, 29, 5, 74, 251, 246, 29, 5, 254, 234, 251, 246, 230, 24, + 251, 246, 246, 190, 117, 226, 86, 37, 83, 1, 116, 175, 37, 83, 1, 116, + 236, 149, 37, 83, 1, 116, 235, 224, 37, 83, 1, 109, 175, 37, 83, 1, 109, + 235, 224, 37, 83, 1, 109, 236, 149, 37, 83, 1, 232, 115, 37, 83, 1, 116, + 251, 169, 37, 83, 1, 116, 251, 69, 37, 83, 1, 109, 251, 169, 37, 83, 1, + 109, 226, 177, 37, 83, 1, 109, 251, 69, 37, 83, 1, 231, 77, 37, 83, 1, + 227, 227, 37, 83, 1, 116, 227, 225, 37, 83, 1, 249, 207, 37, 83, 1, 109, + 227, 225, 37, 83, 1, 227, 235, 37, 83, 1, 116, 222, 155, 37, 83, 1, 116, + 222, 35, 37, 83, 1, 109, 222, 155, 37, 83, 1, 109, 222, 35, 37, 83, 1, + 208, 37, 83, 1, 252, 237, 37, 83, 1, 116, 187, 37, 83, 1, 116, 229, 141, + 37, 83, 1, 116, 246, 8, 37, 83, 1, 109, 187, 37, 83, 1, 109, 246, 8, 37, + 83, 1, 109, 229, 141, 37, 83, 1, 196, 37, 83, 1, 109, 184, 37, 83, 1, + 116, 184, 37, 83, 1, 203, 37, 83, 1, 227, 19, 37, 83, 1, 235, 188, 37, + 83, 1, 234, 227, 37, 83, 1, 219, 7, 37, 83, 1, 116, 225, 25, 37, 83, 1, + 116, 223, 218, 37, 83, 1, 116, 226, 177, 37, 83, 1, 116, 155, 37, 83, 1, + 235, 17, 37, 83, 1, 60, 37, 83, 1, 109, 155, 37, 83, 1, 72, 37, 83, 1, + 237, 255, 37, 83, 1, 68, 37, 83, 1, 220, 23, 37, 83, 1, 246, 250, 37, 83, + 1, 230, 127, 37, 83, 1, 235, 177, 37, 83, 1, 244, 32, 226, 177, 37, 83, + 250, 147, 5, 128, 203, 37, 83, 250, 147, 5, 128, 235, 188, 37, 83, 250, + 147, 5, 235, 189, 222, 118, 235, 167, 37, 83, 5, 234, 100, 236, 230, 235, + 167, 37, 83, 250, 147, 5, 39, 232, 115, 37, 83, 250, 147, 5, 109, 187, + 37, 83, 250, 147, 5, 116, 227, 226, 156, 109, 187, 37, 83, 250, 147, 5, + 196, 37, 83, 250, 147, 5, 252, 237, 37, 83, 250, 147, 5, 226, 177, 37, + 83, 5, 226, 158, 37, 83, 29, 5, 60, 37, 83, 29, 5, 234, 100, 226, 127, + 37, 83, 29, 5, 255, 58, 37, 83, 29, 5, 222, 123, 255, 58, 37, 83, 29, 5, + 72, 37, 83, 29, 5, 237, 255, 37, 83, 29, 5, 220, 110, 37, 83, 29, 5, 220, + 22, 37, 83, 29, 5, 68, 37, 83, 29, 5, 220, 23, 37, 83, 29, 5, 74, 37, 83, + 29, 5, 230, 186, 56, 37, 83, 29, 5, 230, 63, 37, 83, 29, 5, 73, 37, 83, + 29, 5, 254, 234, 37, 83, 29, 5, 230, 127, 37, 83, 29, 5, 254, 196, 37, + 83, 29, 5, 83, 254, 196, 37, 83, 29, 5, 230, 186, 50, 37, 83, 5, 234, + 100, 236, 229, 37, 83, 5, 221, 131, 37, 83, 5, 221, 130, 37, 83, 5, 236, + 118, 221, 129, 37, 83, 5, 236, 118, 221, 128, 37, 83, 5, 236, 118, 221, + 127, 37, 83, 5, 228, 3, 243, 210, 37, 83, 5, 234, 100, 226, 148, 37, 83, + 5, 236, 117, 236, 215, 37, 83, 36, 250, 93, 248, 145, 37, 83, 242, 243, + 20, 217, 84, 37, 83, 242, 243, 20, 107, 37, 83, 242, 243, 20, 103, 37, + 83, 242, 243, 20, 160, 37, 83, 242, 243, 20, 154, 37, 83, 242, 243, 20, + 174, 37, 83, 242, 243, 20, 182, 37, 83, 242, 243, 20, 191, 37, 83, 242, + 243, 20, 185, 37, 83, 242, 243, 20, 190, 37, 83, 83, 20, 217, 84, 37, 83, + 83, 20, 107, 37, 83, 83, 20, 103, 37, 83, 83, 20, 160, 37, 83, 83, 20, + 154, 37, 83, 83, 20, 174, 37, 83, 83, 20, 182, 37, 83, 83, 20, 191, 37, + 83, 83, 20, 185, 37, 83, 83, 20, 190, 37, 83, 5, 218, 203, 37, 83, 5, + 218, 202, 37, 83, 5, 226, 121, 37, 83, 5, 236, 163, 37, 83, 5, 242, 180, + 37, 83, 5, 248, 157, 37, 83, 5, 210, 227, 59, 227, 235, 37, 83, 5, 234, + 100, 218, 48, 37, 83, 5, 237, 1, 37, 83, 5, 237, 0, 37, 83, 5, 226, 126, + 37, 83, 5, 226, 125, 37, 83, 5, 243, 186, 37, 83, 5, 251, 166, 94, 5, + 220, 97, 227, 144, 94, 5, 220, 97, 251, 148, 94, 5, 251, 95, 94, 5, 223, + 51, 94, 5, 252, 64, 94, 1, 254, 180, 94, 1, 254, 181, 222, 82, 94, 1, + 237, 251, 94, 1, 237, 252, 222, 82, 94, 1, 220, 100, 94, 1, 220, 101, + 222, 82, 94, 1, 228, 3, 227, 183, 94, 1, 228, 3, 227, 184, 222, 82, 94, + 1, 235, 189, 235, 95, 94, 1, 235, 189, 235, 96, 222, 82, 94, 1, 246, 222, + 94, 1, 254, 194, 94, 1, 230, 153, 94, 1, 230, 154, 222, 82, 94, 1, 175, + 94, 1, 206, 234, 103, 94, 1, 245, 0, 94, 1, 245, 1, 244, 58, 94, 1, 232, + 115, 94, 1, 251, 169, 94, 1, 251, 170, 235, 179, 94, 1, 237, 123, 94, 1, + 237, 124, 237, 107, 94, 1, 231, 77, 94, 1, 222, 156, 235, 138, 94, 1, + 222, 156, 233, 68, 234, 103, 94, 1, 249, 208, 233, 68, 254, 148, 94, 1, + 249, 208, 233, 68, 234, 103, 94, 1, 232, 238, 227, 238, 94, 1, 222, 155, + 94, 1, 222, 156, 222, 99, 94, 1, 249, 207, 94, 1, 249, 208, 234, 108, 94, + 1, 208, 94, 1, 187, 94, 1, 230, 44, 236, 225, 94, 1, 252, 237, 94, 1, + 252, 238, 236, 174, 94, 1, 196, 94, 1, 184, 94, 1, 203, 94, 1, 235, 188, + 94, 1, 219, 7, 94, 1, 226, 178, 226, 164, 94, 1, 226, 178, 226, 132, 94, + 1, 226, 177, 94, 1, 155, 94, 5, 227, 177, 94, 29, 5, 222, 82, 94, 29, 5, + 220, 96, 94, 29, 5, 220, 97, 226, 129, 94, 29, 5, 223, 77, 94, 29, 5, + 223, 78, 237, 243, 94, 29, 5, 228, 3, 227, 183, 94, 29, 5, 228, 3, 227, + 184, 222, 82, 94, 29, 5, 235, 189, 235, 95, 94, 29, 5, 235, 189, 235, 96, + 222, 82, 94, 29, 5, 222, 124, 94, 29, 5, 222, 125, 227, 183, 94, 29, 5, + 222, 125, 222, 82, 94, 29, 5, 222, 125, 227, 184, 222, 82, 94, 29, 5, + 229, 171, 94, 29, 5, 229, 172, 222, 82, 94, 254, 240, 254, 239, 94, 1, + 236, 247, 226, 128, 94, 1, 236, 122, 226, 128, 94, 1, 220, 183, 226, 128, + 94, 1, 246, 245, 226, 128, 94, 1, 219, 166, 226, 128, 94, 1, 217, 105, + 226, 128, 94, 1, 253, 246, 226, 128, 94, 20, 217, 84, 94, 20, 107, 94, + 20, 103, 94, 20, 160, 94, 20, 154, 94, 20, 174, 94, 20, 182, 94, 20, 191, + 94, 20, 185, 94, 20, 190, 94, 229, 254, 94, 230, 19, 94, 218, 193, 94, + 251, 132, 230, 13, 94, 251, 132, 224, 122, 94, 251, 132, 229, 228, 94, + 230, 18, 94, 26, 16, 248, 151, 94, 26, 16, 249, 59, 94, 26, 16, 247, 97, + 94, 26, 16, 249, 165, 94, 26, 16, 249, 166, 223, 51, 94, 26, 16, 248, + 218, 94, 26, 16, 249, 200, 94, 26, 16, 249, 44, 94, 26, 16, 249, 186, 94, + 26, 16, 249, 166, 244, 186, 94, 26, 16, 36, 222, 79, 94, 26, 16, 36, 246, + 188, 94, 26, 16, 36, 236, 169, 94, 26, 16, 36, 236, 171, 94, 26, 16, 36, + 237, 111, 94, 26, 16, 36, 236, 170, 2, 237, 111, 94, 26, 16, 36, 236, + 172, 2, 237, 111, 94, 26, 16, 36, 252, 112, 94, 26, 16, 36, 244, 61, 94, + 26, 16, 227, 107, 230, 119, 247, 107, 94, 26, 16, 227, 107, 230, 119, + 249, 198, 94, 26, 16, 227, 107, 250, 197, 220, 251, 94, 26, 16, 227, 107, + 250, 197, 222, 131, 94, 26, 16, 235, 113, 230, 119, 230, 9, 94, 26, 16, + 235, 113, 230, 119, 228, 195, 94, 26, 16, 235, 113, 250, 197, 229, 54, + 94, 26, 16, 235, 113, 250, 197, 229, 46, 94, 26, 16, 235, 113, 230, 119, + 229, 72, 223, 67, 5, 229, 251, 223, 67, 5, 230, 5, 223, 67, 5, 230, 3, + 223, 67, 1, 60, 223, 67, 1, 72, 223, 67, 1, 68, 223, 67, 1, 254, 234, + 223, 67, 1, 74, 223, 67, 1, 73, 223, 67, 1, 246, 115, 223, 67, 1, 175, + 223, 67, 1, 228, 155, 223, 67, 1, 245, 0, 223, 67, 1, 232, 115, 223, 67, + 1, 251, 169, 223, 67, 1, 237, 123, 223, 67, 1, 217, 114, 223, 67, 1, 231, + 77, 223, 67, 1, 222, 155, 223, 67, 1, 249, 207, 223, 67, 1, 208, 223, 67, + 1, 187, 223, 67, 1, 246, 8, 223, 67, 1, 219, 189, 223, 67, 1, 252, 237, + 223, 67, 1, 196, 223, 67, 1, 184, 223, 67, 1, 203, 223, 67, 1, 235, 188, + 223, 67, 1, 219, 7, 223, 67, 1, 226, 177, 223, 67, 1, 218, 138, 223, 67, + 1, 155, 223, 67, 250, 147, 5, 230, 16, 223, 67, 250, 147, 5, 229, 253, + 223, 67, 250, 147, 5, 229, 250, 223, 67, 29, 5, 230, 8, 223, 67, 29, 5, + 229, 249, 223, 67, 29, 5, 230, 11, 223, 67, 29, 5, 230, 2, 223, 67, 29, + 5, 230, 17, 223, 67, 29, 5, 230, 10, 223, 67, 5, 230, 20, 223, 67, 1, + 236, 149, 223, 67, 1, 223, 20, 223, 67, 20, 217, 84, 223, 67, 20, 107, + 223, 67, 20, 103, 223, 67, 20, 160, 223, 67, 20, 154, 223, 67, 20, 174, + 223, 67, 20, 182, 223, 67, 20, 191, 223, 67, 20, 185, 223, 67, 20, 190, + 169, 1, 175, 169, 1, 236, 67, 169, 1, 236, 149, 169, 1, 245, 0, 169, 1, + 244, 77, 169, 1, 232, 115, 169, 1, 251, 169, 169, 1, 251, 69, 169, 1, + 237, 123, 169, 1, 231, 77, 169, 1, 222, 155, 169, 1, 222, 35, 169, 1, + 249, 207, 169, 1, 208, 169, 1, 187, 169, 1, 229, 58, 169, 1, 229, 141, + 169, 1, 246, 8, 169, 1, 245, 165, 169, 1, 252, 237, 169, 1, 252, 54, 169, + 1, 196, 169, 1, 233, 142, 169, 1, 221, 55, 169, 1, 221, 47, 169, 1, 247, + 74, 169, 1, 184, 169, 1, 203, 169, 1, 235, 188, 169, 1, 155, 169, 1, 243, + 89, 169, 1, 219, 189, 169, 1, 226, 177, 169, 1, 225, 25, 169, 1, 219, 7, + 169, 1, 60, 169, 223, 97, 1, 184, 169, 223, 97, 1, 203, 169, 29, 5, 255, + 58, 169, 29, 5, 72, 169, 29, 5, 74, 169, 29, 5, 230, 127, 169, 29, 5, 68, + 169, 29, 5, 220, 23, 169, 29, 5, 73, 169, 250, 147, 5, 237, 17, 169, 250, + 147, 5, 189, 169, 250, 147, 5, 153, 169, 250, 147, 5, 207, 169, 250, 147, + 5, 230, 59, 169, 250, 147, 5, 152, 169, 250, 147, 5, 222, 201, 169, 250, + 147, 5, 231, 62, 169, 250, 147, 5, 236, 229, 169, 5, 227, 236, 169, 5, + 231, 112, 169, 228, 197, 222, 154, 169, 228, 197, 231, 69, 221, 208, 222, + 154, 169, 228, 197, 251, 74, 169, 228, 197, 221, 42, 251, 74, 169, 228, + 197, 221, 41, 169, 20, 217, 84, 169, 20, 107, 169, 20, 103, 169, 20, 160, + 169, 20, 154, 169, 20, 174, 169, 20, 182, 169, 20, 191, 169, 20, 185, + 169, 20, 190, 169, 1, 221, 29, 169, 1, 221, 19, 169, 1, 249, 132, 230, + 151, 251, 26, 20, 217, 84, 230, 151, 251, 26, 20, 107, 230, 151, 251, 26, + 20, 103, 230, 151, 251, 26, 20, 160, 230, 151, 251, 26, 20, 154, 230, + 151, 251, 26, 20, 174, 230, 151, 251, 26, 20, 182, 230, 151, 251, 26, 20, + 191, 230, 151, 251, 26, 20, 185, 230, 151, 251, 26, 20, 190, 230, 151, + 251, 26, 1, 235, 188, 230, 151, 251, 26, 1, 253, 244, 230, 151, 251, 26, + 1, 254, 209, 230, 151, 251, 26, 1, 254, 123, 230, 151, 251, 26, 1, 254, + 175, 230, 151, 251, 26, 1, 235, 187, 230, 151, 251, 26, 1, 255, 20, 230, + 151, 251, 26, 1, 255, 21, 230, 151, 251, 26, 1, 255, 19, 230, 151, 251, + 26, 1, 255, 15, 230, 151, 251, 26, 1, 235, 67, 230, 151, 251, 26, 1, 237, + 151, 230, 151, 251, 26, 1, 238, 0, 230, 151, 251, 26, 1, 237, 167, 230, + 151, 251, 26, 1, 237, 156, 230, 151, 251, 26, 1, 234, 231, 230, 151, 251, + 26, 1, 220, 117, 230, 151, 251, 26, 1, 220, 115, 230, 151, 251, 26, 1, + 220, 68, 230, 151, 251, 26, 1, 220, 16, 230, 151, 251, 26, 1, 235, 122, + 230, 151, 251, 26, 1, 246, 162, 230, 151, 251, 26, 1, 246, 253, 230, 151, + 251, 26, 1, 246, 197, 230, 151, 251, 26, 1, 246, 142, 230, 151, 251, 26, + 1, 235, 12, 230, 151, 251, 26, 1, 230, 89, 230, 151, 251, 26, 1, 230, + 181, 230, 151, 251, 26, 1, 230, 79, 230, 151, 251, 26, 1, 230, 161, 230, + 151, 251, 26, 233, 100, 221, 1, 230, 151, 251, 26, 244, 251, 221, 2, 230, + 151, 251, 26, 233, 98, 221, 2, 230, 151, 251, 26, 227, 193, 230, 151, + 251, 26, 229, 139, 230, 151, 251, 26, 254, 201, 230, 151, 251, 26, 228, + 197, 233, 96, 230, 151, 251, 26, 228, 197, 51, 233, 96, 219, 162, 145, + 236, 211, 219, 162, 145, 225, 2, 219, 162, 145, 228, 241, 219, 162, 5, + 232, 39, 219, 162, 5, 218, 56, 233, 191, 223, 39, 219, 162, 145, 218, 56, + 254, 206, 237, 214, 223, 39, 219, 162, 145, 218, 56, 237, 214, 223, 39, + 219, 162, 145, 218, 56, 236, 199, 237, 214, 223, 39, 219, 162, 145, 251, + 149, 56, 219, 162, 145, 218, 56, 236, 199, 237, 214, 223, 40, 226, 106, + 219, 162, 145, 51, 223, 39, 219, 162, 145, 221, 78, 223, 39, 219, 162, + 145, 236, 199, 254, 97, 219, 162, 145, 61, 56, 219, 162, 145, 124, 188, + 56, 219, 162, 145, 148, 188, 56, 219, 162, 145, 227, 99, 236, 210, 237, + 214, 223, 39, 219, 162, 145, 253, 242, 237, 214, 223, 39, 219, 162, 5, + 219, 78, 223, 39, 219, 162, 5, 219, 78, 220, 112, 219, 162, 5, 210, 219, + 78, 220, 112, 219, 162, 5, 219, 78, 254, 97, 219, 162, 5, 210, 219, 78, + 254, 97, 219, 162, 5, 219, 78, 220, 113, 2, 222, 135, 219, 162, 5, 219, + 78, 254, 98, 2, 222, 135, 219, 162, 5, 254, 96, 254, 105, 219, 162, 5, + 254, 96, 252, 222, 219, 162, 5, 254, 96, 219, 184, 219, 162, 5, 254, 96, + 219, 185, 2, 222, 135, 219, 162, 5, 221, 162, 219, 162, 5, 243, 123, 171, + 254, 95, 219, 162, 5, 171, 254, 95, 219, 162, 5, 227, 24, 171, 254, 95, + 219, 162, 5, 254, 96, 220, 119, 233, 90, 219, 162, 5, 254, 46, 7, 1, 3, + 6, 60, 7, 1, 3, 6, 254, 234, 7, 3, 1, 215, 254, 234, 7, 1, 3, 6, 252, + 196, 253, 204, 7, 1, 3, 6, 251, 202, 7, 1, 3, 6, 250, 46, 7, 1, 3, 6, + 246, 118, 7, 1, 3, 6, 73, 7, 3, 1, 215, 230, 119, 73, 7, 3, 1, 215, 72, + 7, 1, 3, 6, 237, 126, 7, 1, 3, 6, 237, 17, 7, 1, 3, 6, 235, 202, 2, 92, + 7, 1, 3, 6, 189, 7, 1, 3, 6, 210, 207, 7, 1, 3, 6, 74, 7, 1, 3, 6, 230, + 119, 74, 7, 3, 1, 224, 136, 74, 7, 3, 1, 224, 136, 230, 119, 74, 7, 3, 1, + 224, 136, 142, 2, 92, 7, 3, 1, 215, 230, 167, 7, 1, 3, 6, 230, 86, 7, 3, + 1, 221, 120, 144, 74, 7, 3, 1, 252, 29, 144, 74, 7, 1, 3, 6, 230, 59, 7, + 1, 3, 6, 210, 152, 7, 1, 3, 6, 215, 152, 7, 1, 3, 6, 222, 201, 7, 1, 3, + 6, 68, 7, 3, 1, 224, 136, 68, 7, 3, 1, 224, 136, 249, 12, 68, 7, 3, 1, + 224, 136, 215, 189, 7, 1, 3, 6, 216, 216, 7, 1, 3, 6, 219, 40, 7, 1, 3, + 6, 217, 157, 7, 1, 3, 6, 246, 76, 7, 1, 219, 70, 235, 144, 223, 241, 7, + 1, 254, 191, 23, 1, 3, 6, 244, 231, 23, 1, 3, 6, 235, 156, 23, 1, 3, 6, + 229, 108, 23, 1, 3, 6, 227, 149, 23, 1, 3, 6, 228, 212, 31, 1, 3, 6, 246, + 217, 58, 1, 6, 60, 58, 1, 6, 254, 234, 58, 1, 6, 253, 204, 58, 1, 6, 252, + 196, 253, 204, 58, 1, 6, 250, 46, 58, 1, 6, 73, 58, 1, 6, 210, 73, 58, 1, + 6, 245, 67, 58, 1, 6, 243, 225, 58, 1, 6, 72, 58, 1, 6, 237, 126, 58, 1, + 6, 237, 17, 58, 1, 6, 153, 58, 1, 6, 189, 58, 1, 6, 207, 58, 1, 6, 210, + 207, 58, 1, 6, 74, 58, 1, 6, 230, 86, 58, 1, 6, 230, 59, 58, 1, 6, 152, + 58, 1, 6, 222, 201, 58, 1, 6, 68, 58, 1, 6, 219, 40, 58, 1, 3, 60, 58, 1, + 3, 215, 60, 58, 1, 3, 254, 146, 58, 1, 3, 215, 254, 234, 58, 1, 3, 253, + 204, 58, 1, 3, 250, 46, 58, 1, 3, 73, 58, 1, 3, 226, 104, 58, 1, 3, 230, + 119, 73, 58, 1, 3, 215, 230, 119, 73, 58, 1, 3, 245, 67, 58, 1, 3, 215, + 72, 58, 1, 3, 237, 17, 58, 1, 3, 189, 58, 1, 3, 246, 185, 58, 1, 3, 74, + 58, 1, 3, 230, 119, 74, 58, 1, 3, 221, 120, 144, 74, 58, 1, 3, 252, 29, + 144, 74, 58, 1, 3, 230, 59, 58, 1, 3, 222, 201, 58, 1, 3, 68, 58, 1, 3, + 224, 136, 68, 58, 1, 3, 215, 189, 58, 1, 3, 216, 216, 58, 1, 3, 254, 191, + 58, 1, 3, 252, 102, 58, 1, 3, 23, 244, 231, 58, 1, 3, 249, 62, 58, 1, 3, + 23, 229, 129, 58, 1, 3, 251, 31, 7, 223, 94, 3, 1, 72, 7, 223, 94, 3, 1, + 152, 7, 223, 94, 3, 1, 68, 7, 223, 94, 3, 1, 216, 216, 23, 223, 94, 3, 1, + 252, 102, 23, 223, 94, 3, 1, 244, 231, 23, 223, 94, 3, 1, 227, 149, 23, + 223, 94, 3, 1, 229, 129, 23, 223, 94, 3, 1, 251, 31, 7, 3, 1, 220, 110, + 7, 3, 1, 49, 2, 233, 193, 221, 179, 7, 3, 1, 250, 47, 2, 233, 193, 221, + 179, 7, 3, 1, 246, 75, 2, 233, 193, 221, 179, 7, 3, 1, 234, 187, 2, 233, + 193, 221, 179, 7, 3, 1, 233, 34, 2, 233, 193, 221, 179, 7, 3, 1, 230, 60, + 2, 233, 193, 221, 179, 7, 3, 1, 228, 39, 2, 233, 193, 221, 179, 7, 3, 1, + 228, 39, 2, 245, 174, 25, 233, 193, 221, 179, 7, 3, 1, 226, 235, 2, 233, + 193, 221, 179, 7, 3, 1, 222, 202, 2, 233, 193, 221, 179, 7, 3, 1, 217, + 158, 2, 233, 193, 221, 179, 7, 3, 1, 215, 245, 67, 58, 1, 31, 246, 197, + 7, 3, 1, 237, 188, 245, 67, 7, 3, 1, 222, 38, 2, 223, 121, 7, 3, 6, 1, + 242, 107, 2, 92, 7, 3, 1, 237, 163, 2, 92, 7, 3, 1, 230, 60, 2, 92, 7, 3, + 6, 1, 105, 2, 92, 7, 3, 1, 220, 58, 2, 92, 7, 3, 1, 49, 2, 230, 29, 96, + 7, 3, 1, 250, 47, 2, 230, 29, 96, 7, 3, 1, 246, 75, 2, 230, 29, 96, 7, 3, + 1, 245, 68, 2, 230, 29, 96, 7, 3, 1, 237, 18, 2, 230, 29, 96, 7, 3, 1, + 235, 202, 2, 230, 29, 96, 7, 3, 1, 234, 187, 2, 230, 29, 96, 7, 3, 1, + 233, 34, 2, 230, 29, 96, 7, 3, 1, 230, 60, 2, 230, 29, 96, 7, 3, 1, 228, + 39, 2, 230, 29, 96, 7, 3, 1, 226, 235, 2, 230, 29, 96, 7, 3, 1, 246, 134, + 2, 230, 29, 96, 7, 3, 1, 220, 11, 2, 230, 29, 96, 7, 3, 1, 218, 152, 2, + 230, 29, 96, 7, 3, 1, 217, 158, 2, 230, 29, 96, 7, 3, 1, 112, 2, 227, + 164, 96, 7, 3, 1, 254, 147, 2, 227, 164, 96, 7, 3, 1, 250, 47, 2, 242, + 247, 25, 222, 135, 7, 3, 1, 178, 2, 227, 164, 96, 7, 3, 1, 230, 119, 178, + 2, 227, 164, 96, 7, 3, 1, 210, 230, 119, 178, 2, 227, 164, 96, 7, 3, 1, + 226, 105, 2, 227, 164, 96, 7, 3, 1, 242, 107, 2, 227, 164, 96, 7, 3, 1, + 230, 119, 142, 2, 227, 164, 96, 7, 3, 1, 246, 134, 2, 227, 164, 96, 7, 3, + 1, 105, 2, 227, 164, 96, 7, 3, 1, 246, 77, 2, 227, 164, 96, 58, 1, 3, + 215, 254, 146, 58, 1, 3, 251, 202, 58, 1, 3, 251, 203, 2, 250, 80, 58, 1, + 3, 246, 118, 58, 1, 3, 210, 230, 119, 73, 58, 1, 3, 246, 74, 58, 1, 3, + 248, 144, 237, 127, 2, 92, 58, 1, 3, 102, 245, 67, 58, 1, 3, 215, 243, + 225, 58, 1, 3, 242, 107, 2, 92, 58, 1, 3, 237, 162, 58, 1, 3, 6, 72, 58, + 1, 3, 6, 242, 107, 2, 92, 58, 1, 3, 237, 127, 2, 250, 97, 58, 1, 3, 235, + 202, 2, 227, 164, 96, 58, 1, 3, 235, 202, 2, 230, 29, 96, 58, 1, 3, 6, + 153, 58, 1, 3, 234, 187, 2, 96, 58, 1, 3, 215, 234, 187, 2, 171, 235, + 106, 58, 1, 3, 233, 34, 2, 42, 96, 58, 1, 3, 233, 34, 2, 227, 164, 96, + 58, 1, 3, 6, 207, 58, 1, 3, 252, 196, 74, 58, 1, 3, 229, 129, 58, 1, 3, + 226, 235, 2, 96, 58, 1, 3, 246, 133, 58, 1, 3, 222, 202, 2, 230, 29, 96, + 58, 1, 3, 105, 135, 58, 1, 3, 220, 57, 58, 1, 3, 6, 68, 58, 1, 3, 220, + 11, 2, 96, 58, 1, 3, 215, 216, 216, 58, 1, 3, 217, 157, 58, 1, 3, 217, + 158, 2, 227, 164, 96, 58, 1, 3, 217, 158, 2, 250, 80, 58, 1, 3, 246, 76, + 58, 1, 3, 222, 6, 36, 247, 143, 244, 37, 255, 0, 36, 247, 143, 254, 248, + 255, 0, 36, 224, 36, 56, 36, 223, 45, 78, 36, 234, 114, 36, 244, 34, 36, + 234, 112, 36, 254, 246, 36, 244, 35, 36, 254, 247, 36, 7, 3, 1, 228, 39, + 56, 36, 252, 7, 36, 234, 113, 36, 51, 250, 217, 50, 36, 230, 163, 50, 36, + 217, 33, 56, 36, 237, 152, 56, 36, 220, 51, 50, 36, 220, 35, 50, 36, 7, + 3, 1, 245, 154, 230, 119, 112, 50, 36, 7, 3, 1, 254, 234, 36, 7, 3, 1, + 254, 93, 36, 7, 3, 1, 253, 220, 36, 7, 3, 1, 251, 203, 251, 92, 36, 7, 3, + 1, 237, 188, 250, 46, 36, 7, 3, 1, 246, 118, 36, 7, 3, 1, 245, 67, 36, 7, + 1, 3, 6, 245, 67, 36, 7, 3, 1, 237, 17, 36, 7, 3, 1, 153, 36, 7, 1, 3, 6, + 153, 36, 7, 1, 3, 6, 189, 36, 7, 3, 1, 207, 36, 7, 1, 3, 6, 207, 36, 7, + 1, 3, 6, 152, 36, 7, 3, 1, 228, 39, 227, 58, 36, 7, 3, 1, 198, 36, 7, 3, + 1, 171, 198, 36, 7, 3, 1, 217, 157, 36, 254, 151, 114, 199, 56, 36, 42, + 254, 21, 50, 36, 45, 254, 21, 25, 113, 254, 21, 56, 7, 6, 1, 112, 2, 227, + 94, 56, 7, 3, 1, 112, 2, 227, 94, 56, 7, 6, 1, 49, 2, 61, 50, 7, 3, 1, + 49, 2, 61, 50, 7, 6, 1, 49, 2, 61, 56, 7, 3, 1, 49, 2, 61, 56, 7, 6, 1, + 49, 2, 235, 44, 56, 7, 3, 1, 49, 2, 235, 44, 56, 7, 6, 1, 251, 203, 2, + 251, 93, 25, 168, 7, 3, 1, 251, 203, 2, 251, 93, 25, 168, 7, 6, 1, 250, + 47, 2, 61, 50, 7, 3, 1, 250, 47, 2, 61, 50, 7, 6, 1, 250, 47, 2, 61, 56, + 7, 3, 1, 250, 47, 2, 61, 56, 7, 6, 1, 250, 47, 2, 235, 44, 56, 7, 3, 1, + 250, 47, 2, 235, 44, 56, 7, 6, 1, 250, 47, 2, 251, 92, 7, 3, 1, 250, 47, + 2, 251, 92, 7, 6, 1, 250, 47, 2, 250, 217, 56, 7, 3, 1, 250, 47, 2, 250, + 217, 56, 7, 6, 1, 178, 2, 234, 116, 25, 244, 36, 7, 3, 1, 178, 2, 234, + 116, 25, 244, 36, 7, 6, 1, 178, 2, 234, 116, 25, 168, 7, 3, 1, 178, 2, + 234, 116, 25, 168, 7, 6, 1, 178, 2, 250, 217, 56, 7, 3, 1, 178, 2, 250, + 217, 56, 7, 6, 1, 178, 2, 221, 180, 56, 7, 3, 1, 178, 2, 221, 180, 56, 7, + 6, 1, 178, 2, 251, 93, 25, 252, 8, 7, 3, 1, 178, 2, 251, 93, 25, 252, 8, + 7, 6, 1, 246, 75, 2, 61, 50, 7, 3, 1, 246, 75, 2, 61, 50, 7, 6, 1, 245, + 68, 2, 234, 115, 7, 3, 1, 245, 68, 2, 234, 115, 7, 6, 1, 243, 226, 2, 61, + 50, 7, 3, 1, 243, 226, 2, 61, 50, 7, 6, 1, 243, 226, 2, 61, 56, 7, 3, 1, + 243, 226, 2, 61, 56, 7, 6, 1, 243, 226, 2, 249, 13, 7, 3, 1, 243, 226, 2, + 249, 13, 7, 6, 1, 243, 226, 2, 251, 92, 7, 3, 1, 243, 226, 2, 251, 92, 7, + 6, 1, 243, 226, 2, 252, 9, 56, 7, 3, 1, 243, 226, 2, 252, 9, 56, 7, 6, 1, + 242, 107, 2, 221, 180, 56, 7, 3, 1, 242, 107, 2, 221, 180, 56, 7, 6, 1, + 242, 107, 2, 249, 14, 25, 168, 7, 3, 1, 242, 107, 2, 249, 14, 25, 168, 7, + 6, 1, 237, 18, 2, 168, 7, 3, 1, 237, 18, 2, 168, 7, 6, 1, 237, 18, 2, 61, + 56, 7, 3, 1, 237, 18, 2, 61, 56, 7, 6, 1, 237, 18, 2, 235, 44, 56, 7, 3, + 1, 237, 18, 2, 235, 44, 56, 7, 6, 1, 235, 202, 2, 61, 56, 7, 3, 1, 235, + 202, 2, 61, 56, 7, 6, 1, 235, 202, 2, 61, 252, 118, 25, 234, 115, 7, 3, + 1, 235, 202, 2, 61, 252, 118, 25, 234, 115, 7, 6, 1, 235, 202, 2, 235, + 44, 56, 7, 3, 1, 235, 202, 2, 235, 44, 56, 7, 6, 1, 235, 202, 2, 250, + 217, 56, 7, 3, 1, 235, 202, 2, 250, 217, 56, 7, 6, 1, 234, 187, 2, 168, + 7, 3, 1, 234, 187, 2, 168, 7, 6, 1, 234, 187, 2, 61, 50, 7, 3, 1, 234, + 187, 2, 61, 50, 7, 6, 1, 234, 187, 2, 61, 56, 7, 3, 1, 234, 187, 2, 61, + 56, 7, 6, 1, 233, 34, 2, 61, 50, 7, 3, 1, 233, 34, 2, 61, 50, 7, 6, 1, + 233, 34, 2, 61, 56, 7, 3, 1, 233, 34, 2, 61, 56, 7, 6, 1, 233, 34, 2, + 235, 44, 56, 7, 3, 1, 233, 34, 2, 235, 44, 56, 7, 6, 1, 233, 34, 2, 250, + 217, 56, 7, 3, 1, 233, 34, 2, 250, 217, 56, 7, 6, 1, 142, 2, 221, 180, + 25, 168, 7, 3, 1, 142, 2, 221, 180, 25, 168, 7, 6, 1, 142, 2, 221, 180, + 25, 249, 13, 7, 3, 1, 142, 2, 221, 180, 25, 249, 13, 7, 6, 1, 142, 2, + 234, 116, 25, 244, 36, 7, 3, 1, 142, 2, 234, 116, 25, 244, 36, 7, 6, 1, + 142, 2, 234, 116, 25, 168, 7, 3, 1, 142, 2, 234, 116, 25, 168, 7, 6, 1, + 230, 60, 2, 168, 7, 3, 1, 230, 60, 2, 168, 7, 6, 1, 230, 60, 2, 61, 50, + 7, 3, 1, 230, 60, 2, 61, 50, 7, 6, 1, 228, 39, 2, 61, 50, 7, 3, 1, 228, + 39, 2, 61, 50, 7, 6, 1, 228, 39, 2, 61, 56, 7, 3, 1, 228, 39, 2, 61, 56, + 7, 6, 1, 228, 39, 2, 61, 252, 118, 25, 234, 115, 7, 3, 1, 228, 39, 2, 61, + 252, 118, 25, 234, 115, 7, 6, 1, 228, 39, 2, 235, 44, 56, 7, 3, 1, 228, + 39, 2, 235, 44, 56, 7, 6, 1, 226, 235, 2, 61, 50, 7, 3, 1, 226, 235, 2, + 61, 50, 7, 6, 1, 226, 235, 2, 61, 56, 7, 3, 1, 226, 235, 2, 61, 56, 7, 6, + 1, 226, 235, 2, 254, 248, 25, 61, 50, 7, 3, 1, 226, 235, 2, 254, 248, 25, + 61, 50, 7, 6, 1, 226, 235, 2, 251, 131, 25, 61, 50, 7, 3, 1, 226, 235, 2, + 251, 131, 25, 61, 50, 7, 6, 1, 226, 235, 2, 61, 252, 118, 25, 61, 50, 7, + 3, 1, 226, 235, 2, 61, 252, 118, 25, 61, 50, 7, 6, 1, 222, 202, 2, 61, + 50, 7, 3, 1, 222, 202, 2, 61, 50, 7, 6, 1, 222, 202, 2, 61, 56, 7, 3, 1, + 222, 202, 2, 61, 56, 7, 6, 1, 222, 202, 2, 235, 44, 56, 7, 3, 1, 222, + 202, 2, 235, 44, 56, 7, 6, 1, 222, 202, 2, 250, 217, 56, 7, 3, 1, 222, + 202, 2, 250, 217, 56, 7, 6, 1, 105, 2, 249, 14, 56, 7, 3, 1, 105, 2, 249, + 14, 56, 7, 6, 1, 105, 2, 221, 180, 56, 7, 3, 1, 105, 2, 221, 180, 56, 7, + 6, 1, 105, 2, 250, 217, 56, 7, 3, 1, 105, 2, 250, 217, 56, 7, 6, 1, 105, + 2, 221, 180, 25, 168, 7, 3, 1, 105, 2, 221, 180, 25, 168, 7, 6, 1, 105, + 2, 234, 116, 25, 249, 13, 7, 3, 1, 105, 2, 234, 116, 25, 249, 13, 7, 6, + 1, 220, 11, 2, 221, 179, 7, 3, 1, 220, 11, 2, 221, 179, 7, 6, 1, 220, 11, + 2, 61, 56, 7, 3, 1, 220, 11, 2, 61, 56, 7, 6, 1, 219, 41, 2, 244, 36, 7, + 3, 1, 219, 41, 2, 244, 36, 7, 6, 1, 219, 41, 2, 168, 7, 3, 1, 219, 41, 2, + 168, 7, 6, 1, 219, 41, 2, 249, 13, 7, 3, 1, 219, 41, 2, 249, 13, 7, 6, 1, + 219, 41, 2, 61, 50, 7, 3, 1, 219, 41, 2, 61, 50, 7, 6, 1, 219, 41, 2, 61, + 56, 7, 3, 1, 219, 41, 2, 61, 56, 7, 6, 1, 218, 152, 2, 61, 50, 7, 3, 1, + 218, 152, 2, 61, 50, 7, 6, 1, 218, 152, 2, 249, 13, 7, 3, 1, 218, 152, 2, + 249, 13, 7, 6, 1, 218, 91, 2, 61, 50, 7, 3, 1, 218, 91, 2, 61, 50, 7, 6, + 1, 217, 158, 2, 250, 216, 7, 3, 1, 217, 158, 2, 250, 216, 7, 6, 1, 217, + 158, 2, 61, 56, 7, 3, 1, 217, 158, 2, 61, 56, 7, 6, 1, 217, 158, 2, 235, + 44, 56, 7, 3, 1, 217, 158, 2, 235, 44, 56, 7, 3, 1, 243, 226, 2, 235, 44, + 56, 7, 3, 1, 222, 202, 2, 249, 13, 7, 3, 1, 219, 41, 2, 227, 94, 50, 7, + 3, 1, 218, 91, 2, 227, 94, 50, 7, 3, 1, 112, 2, 45, 144, 227, 93, 7, 3, + 1, 171, 226, 235, 2, 61, 50, 7, 3, 1, 171, 226, 235, 2, 249, 11, 92, 7, + 3, 1, 171, 226, 235, 2, 116, 92, 7, 6, 1, 225, 1, 198, 7, 3, 1, 249, 62, + 7, 6, 1, 112, 2, 61, 56, 7, 3, 1, 112, 2, 61, 56, 7, 6, 1, 112, 2, 242, + 247, 50, 7, 3, 1, 112, 2, 242, 247, 50, 7, 6, 1, 112, 2, 250, 217, 25, + 168, 7, 3, 1, 112, 2, 250, 217, 25, 168, 7, 6, 1, 112, 2, 250, 217, 25, + 244, 36, 7, 3, 1, 112, 2, 250, 217, 25, 244, 36, 7, 6, 1, 112, 2, 250, + 217, 25, 242, 247, 50, 7, 3, 1, 112, 2, 250, 217, 25, 242, 247, 50, 7, 6, + 1, 112, 2, 250, 217, 25, 221, 179, 7, 3, 1, 112, 2, 250, 217, 25, 221, + 179, 7, 6, 1, 112, 2, 250, 217, 25, 61, 56, 7, 3, 1, 112, 2, 250, 217, + 25, 61, 56, 7, 6, 1, 112, 2, 252, 9, 25, 168, 7, 3, 1, 112, 2, 252, 9, + 25, 168, 7, 6, 1, 112, 2, 252, 9, 25, 244, 36, 7, 3, 1, 112, 2, 252, 9, + 25, 244, 36, 7, 6, 1, 112, 2, 252, 9, 25, 242, 247, 50, 7, 3, 1, 112, 2, + 252, 9, 25, 242, 247, 50, 7, 6, 1, 112, 2, 252, 9, 25, 221, 179, 7, 3, 1, + 112, 2, 252, 9, 25, 221, 179, 7, 6, 1, 112, 2, 252, 9, 25, 61, 56, 7, 3, + 1, 112, 2, 252, 9, 25, 61, 56, 7, 6, 1, 178, 2, 61, 56, 7, 3, 1, 178, 2, + 61, 56, 7, 6, 1, 178, 2, 242, 247, 50, 7, 3, 1, 178, 2, 242, 247, 50, 7, + 6, 1, 178, 2, 221, 179, 7, 3, 1, 178, 2, 221, 179, 7, 6, 1, 178, 2, 250, + 217, 25, 168, 7, 3, 1, 178, 2, 250, 217, 25, 168, 7, 6, 1, 178, 2, 250, + 217, 25, 244, 36, 7, 3, 1, 178, 2, 250, 217, 25, 244, 36, 7, 6, 1, 178, + 2, 250, 217, 25, 242, 247, 50, 7, 3, 1, 178, 2, 250, 217, 25, 242, 247, + 50, 7, 6, 1, 178, 2, 250, 217, 25, 221, 179, 7, 3, 1, 178, 2, 250, 217, + 25, 221, 179, 7, 6, 1, 178, 2, 250, 217, 25, 61, 56, 7, 3, 1, 178, 2, + 250, 217, 25, 61, 56, 7, 6, 1, 242, 107, 2, 242, 247, 50, 7, 3, 1, 242, + 107, 2, 242, 247, 50, 7, 6, 1, 242, 107, 2, 61, 56, 7, 3, 1, 242, 107, 2, + 61, 56, 7, 6, 1, 142, 2, 61, 56, 7, 3, 1, 142, 2, 61, 56, 7, 6, 1, 142, + 2, 242, 247, 50, 7, 3, 1, 142, 2, 242, 247, 50, 7, 6, 1, 142, 2, 250, + 217, 25, 168, 7, 3, 1, 142, 2, 250, 217, 25, 168, 7, 6, 1, 142, 2, 250, + 217, 25, 244, 36, 7, 3, 1, 142, 2, 250, 217, 25, 244, 36, 7, 6, 1, 142, + 2, 250, 217, 25, 242, 247, 50, 7, 3, 1, 142, 2, 250, 217, 25, 242, 247, + 50, 7, 6, 1, 142, 2, 250, 217, 25, 221, 179, 7, 3, 1, 142, 2, 250, 217, + 25, 221, 179, 7, 6, 1, 142, 2, 250, 217, 25, 61, 56, 7, 3, 1, 142, 2, + 250, 217, 25, 61, 56, 7, 6, 1, 142, 2, 242, 190, 25, 168, 7, 3, 1, 142, + 2, 242, 190, 25, 168, 7, 6, 1, 142, 2, 242, 190, 25, 244, 36, 7, 3, 1, + 142, 2, 242, 190, 25, 244, 36, 7, 6, 1, 142, 2, 242, 190, 25, 242, 247, + 50, 7, 3, 1, 142, 2, 242, 190, 25, 242, 247, 50, 7, 6, 1, 142, 2, 242, + 190, 25, 221, 179, 7, 3, 1, 142, 2, 242, 190, 25, 221, 179, 7, 6, 1, 142, + 2, 242, 190, 25, 61, 56, 7, 3, 1, 142, 2, 242, 190, 25, 61, 56, 7, 6, 1, + 105, 2, 61, 56, 7, 3, 1, 105, 2, 61, 56, 7, 6, 1, 105, 2, 242, 247, 50, + 7, 3, 1, 105, 2, 242, 247, 50, 7, 6, 1, 105, 2, 242, 190, 25, 168, 7, 3, + 1, 105, 2, 242, 190, 25, 168, 7, 6, 1, 105, 2, 242, 190, 25, 244, 36, 7, + 3, 1, 105, 2, 242, 190, 25, 244, 36, 7, 6, 1, 105, 2, 242, 190, 25, 242, + 247, 50, 7, 3, 1, 105, 2, 242, 190, 25, 242, 247, 50, 7, 6, 1, 105, 2, + 242, 190, 25, 221, 179, 7, 3, 1, 105, 2, 242, 190, 25, 221, 179, 7, 6, 1, + 105, 2, 242, 190, 25, 61, 56, 7, 3, 1, 105, 2, 242, 190, 25, 61, 56, 7, + 6, 1, 218, 91, 2, 244, 36, 7, 3, 1, 218, 91, 2, 244, 36, 7, 6, 1, 218, + 91, 2, 61, 56, 7, 3, 1, 218, 91, 2, 61, 56, 7, 6, 1, 218, 91, 2, 242, + 247, 50, 7, 3, 1, 218, 91, 2, 242, 247, 50, 7, 6, 1, 218, 91, 2, 221, + 179, 7, 3, 1, 218, 91, 2, 221, 179, 7, 6, 1, 233, 192, 235, 18, 7, 3, 1, + 233, 192, 235, 18, 7, 6, 1, 233, 192, 216, 216, 7, 3, 1, 233, 192, 216, + 216, 7, 6, 1, 218, 91, 2, 234, 247, 7, 3, 1, 218, 91, 2, 234, 247, 23, 3, + 1, 254, 147, 2, 228, 206, 23, 3, 1, 254, 147, 2, 249, 144, 23, 3, 1, 254, + 147, 2, 209, 25, 219, 178, 23, 3, 1, 254, 147, 2, 193, 25, 219, 178, 23, + 3, 1, 254, 147, 2, 209, 25, 230, 64, 23, 3, 1, 254, 147, 2, 193, 25, 230, + 64, 23, 3, 1, 254, 147, 2, 209, 25, 229, 163, 23, 3, 1, 254, 147, 2, 193, + 25, 229, 163, 23, 6, 1, 254, 147, 2, 228, 206, 23, 6, 1, 254, 147, 2, + 249, 144, 23, 6, 1, 254, 147, 2, 209, 25, 219, 178, 23, 6, 1, 254, 147, + 2, 193, 25, 219, 178, 23, 6, 1, 254, 147, 2, 209, 25, 230, 64, 23, 6, 1, + 254, 147, 2, 193, 25, 230, 64, 23, 6, 1, 254, 147, 2, 209, 25, 229, 163, + 23, 6, 1, 254, 147, 2, 193, 25, 229, 163, 23, 3, 1, 246, 157, 2, 228, + 206, 23, 3, 1, 246, 157, 2, 249, 144, 23, 3, 1, 246, 157, 2, 209, 25, + 219, 178, 23, 3, 1, 246, 157, 2, 193, 25, 219, 178, 23, 3, 1, 246, 157, + 2, 209, 25, 230, 64, 23, 3, 1, 246, 157, 2, 193, 25, 230, 64, 23, 6, 1, + 246, 157, 2, 228, 206, 23, 6, 1, 246, 157, 2, 249, 144, 23, 6, 1, 246, + 157, 2, 209, 25, 219, 178, 23, 6, 1, 246, 157, 2, 193, 25, 219, 178, 23, + 6, 1, 246, 157, 2, 209, 25, 230, 64, 23, 6, 1, 246, 157, 2, 193, 25, 230, + 64, 23, 3, 1, 246, 122, 2, 228, 206, 23, 3, 1, 246, 122, 2, 249, 144, 23, + 3, 1, 246, 122, 2, 209, 25, 219, 178, 23, 3, 1, 246, 122, 2, 193, 25, + 219, 178, 23, 3, 1, 246, 122, 2, 209, 25, 230, 64, 23, 3, 1, 246, 122, 2, + 193, 25, 230, 64, 23, 3, 1, 246, 122, 2, 209, 25, 229, 163, 23, 3, 1, + 246, 122, 2, 193, 25, 229, 163, 23, 6, 1, 246, 122, 2, 228, 206, 23, 6, + 1, 246, 122, 2, 249, 144, 23, 6, 1, 246, 122, 2, 209, 25, 219, 178, 23, + 6, 1, 246, 122, 2, 193, 25, 219, 178, 23, 6, 1, 246, 122, 2, 209, 25, + 230, 64, 23, 6, 1, 246, 122, 2, 193, 25, 230, 64, 23, 6, 1, 246, 122, 2, + 209, 25, 229, 163, 23, 6, 1, 246, 122, 2, 193, 25, 229, 163, 23, 3, 1, + 237, 163, 2, 228, 206, 23, 3, 1, 237, 163, 2, 249, 144, 23, 3, 1, 237, + 163, 2, 209, 25, 219, 178, 23, 3, 1, 237, 163, 2, 193, 25, 219, 178, 23, + 3, 1, 237, 163, 2, 209, 25, 230, 64, 23, 3, 1, 237, 163, 2, 193, 25, 230, + 64, 23, 3, 1, 237, 163, 2, 209, 25, 229, 163, 23, 3, 1, 237, 163, 2, 193, + 25, 229, 163, 23, 6, 1, 237, 163, 2, 228, 206, 23, 6, 1, 237, 163, 2, + 249, 144, 23, 6, 1, 237, 163, 2, 209, 25, 219, 178, 23, 6, 1, 237, 163, + 2, 193, 25, 219, 178, 23, 6, 1, 237, 163, 2, 209, 25, 230, 64, 23, 6, 1, + 237, 163, 2, 193, 25, 230, 64, 23, 6, 1, 237, 163, 2, 209, 25, 229, 163, + 23, 6, 1, 237, 163, 2, 193, 25, 229, 163, 23, 3, 1, 230, 142, 2, 228, + 206, 23, 3, 1, 230, 142, 2, 249, 144, 23, 3, 1, 230, 142, 2, 209, 25, + 219, 178, 23, 3, 1, 230, 142, 2, 193, 25, 219, 178, 23, 3, 1, 230, 142, + 2, 209, 25, 230, 64, 23, 3, 1, 230, 142, 2, 193, 25, 230, 64, 23, 6, 1, + 230, 142, 2, 228, 206, 23, 6, 1, 230, 142, 2, 249, 144, 23, 6, 1, 230, + 142, 2, 209, 25, 219, 178, 23, 6, 1, 230, 142, 2, 193, 25, 219, 178, 23, + 6, 1, 230, 142, 2, 209, 25, 230, 64, 23, 6, 1, 230, 142, 2, 193, 25, 230, + 64, 23, 3, 1, 220, 58, 2, 228, 206, 23, 3, 1, 220, 58, 2, 249, 144, 23, + 3, 1, 220, 58, 2, 209, 25, 219, 178, 23, 3, 1, 220, 58, 2, 193, 25, 219, + 178, 23, 3, 1, 220, 58, 2, 209, 25, 230, 64, 23, 3, 1, 220, 58, 2, 193, + 25, 230, 64, 23, 3, 1, 220, 58, 2, 209, 25, 229, 163, 23, 3, 1, 220, 58, + 2, 193, 25, 229, 163, 23, 6, 1, 220, 58, 2, 249, 144, 23, 6, 1, 220, 58, + 2, 193, 25, 219, 178, 23, 6, 1, 220, 58, 2, 193, 25, 230, 64, 23, 6, 1, + 220, 58, 2, 193, 25, 229, 163, 23, 3, 1, 230, 144, 2, 228, 206, 23, 3, 1, + 230, 144, 2, 249, 144, 23, 3, 1, 230, 144, 2, 209, 25, 219, 178, 23, 3, + 1, 230, 144, 2, 193, 25, 219, 178, 23, 3, 1, 230, 144, 2, 209, 25, 230, + 64, 23, 3, 1, 230, 144, 2, 193, 25, 230, 64, 23, 3, 1, 230, 144, 2, 209, + 25, 229, 163, 23, 3, 1, 230, 144, 2, 193, 25, 229, 163, 23, 6, 1, 230, + 144, 2, 228, 206, 23, 6, 1, 230, 144, 2, 249, 144, 23, 6, 1, 230, 144, 2, + 209, 25, 219, 178, 23, 6, 1, 230, 144, 2, 193, 25, 219, 178, 23, 6, 1, + 230, 144, 2, 209, 25, 230, 64, 23, 6, 1, 230, 144, 2, 193, 25, 230, 64, + 23, 6, 1, 230, 144, 2, 209, 25, 229, 163, 23, 6, 1, 230, 144, 2, 193, 25, + 229, 163, 23, 3, 1, 254, 147, 2, 219, 178, 23, 3, 1, 254, 147, 2, 230, + 64, 23, 3, 1, 246, 157, 2, 219, 178, 23, 3, 1, 246, 157, 2, 230, 64, 23, + 3, 1, 246, 122, 2, 219, 178, 23, 3, 1, 246, 122, 2, 230, 64, 23, 3, 1, + 237, 163, 2, 219, 178, 23, 3, 1, 237, 163, 2, 230, 64, 23, 3, 1, 230, + 142, 2, 219, 178, 23, 3, 1, 230, 142, 2, 230, 64, 23, 3, 1, 220, 58, 2, + 219, 178, 23, 3, 1, 220, 58, 2, 230, 64, 23, 3, 1, 230, 144, 2, 219, 178, + 23, 3, 1, 230, 144, 2, 230, 64, 23, 3, 1, 254, 147, 2, 209, 25, 217, 207, + 23, 3, 1, 254, 147, 2, 193, 25, 217, 207, 23, 3, 1, 254, 147, 2, 209, 25, + 219, 179, 25, 217, 207, 23, 3, 1, 254, 147, 2, 193, 25, 219, 179, 25, + 217, 207, 23, 3, 1, 254, 147, 2, 209, 25, 230, 65, 25, 217, 207, 23, 3, + 1, 254, 147, 2, 193, 25, 230, 65, 25, 217, 207, 23, 3, 1, 254, 147, 2, + 209, 25, 229, 164, 25, 217, 207, 23, 3, 1, 254, 147, 2, 193, 25, 229, + 164, 25, 217, 207, 23, 6, 1, 254, 147, 2, 209, 25, 228, 217, 23, 6, 1, + 254, 147, 2, 193, 25, 228, 217, 23, 6, 1, 254, 147, 2, 209, 25, 219, 179, + 25, 228, 217, 23, 6, 1, 254, 147, 2, 193, 25, 219, 179, 25, 228, 217, 23, + 6, 1, 254, 147, 2, 209, 25, 230, 65, 25, 228, 217, 23, 6, 1, 254, 147, 2, + 193, 25, 230, 65, 25, 228, 217, 23, 6, 1, 254, 147, 2, 209, 25, 229, 164, + 25, 228, 217, 23, 6, 1, 254, 147, 2, 193, 25, 229, 164, 25, 228, 217, 23, + 3, 1, 246, 122, 2, 209, 25, 217, 207, 23, 3, 1, 246, 122, 2, 193, 25, + 217, 207, 23, 3, 1, 246, 122, 2, 209, 25, 219, 179, 25, 217, 207, 23, 3, + 1, 246, 122, 2, 193, 25, 219, 179, 25, 217, 207, 23, 3, 1, 246, 122, 2, + 209, 25, 230, 65, 25, 217, 207, 23, 3, 1, 246, 122, 2, 193, 25, 230, 65, + 25, 217, 207, 23, 3, 1, 246, 122, 2, 209, 25, 229, 164, 25, 217, 207, 23, + 3, 1, 246, 122, 2, 193, 25, 229, 164, 25, 217, 207, 23, 6, 1, 246, 122, + 2, 209, 25, 228, 217, 23, 6, 1, 246, 122, 2, 193, 25, 228, 217, 23, 6, 1, + 246, 122, 2, 209, 25, 219, 179, 25, 228, 217, 23, 6, 1, 246, 122, 2, 193, + 25, 219, 179, 25, 228, 217, 23, 6, 1, 246, 122, 2, 209, 25, 230, 65, 25, + 228, 217, 23, 6, 1, 246, 122, 2, 193, 25, 230, 65, 25, 228, 217, 23, 6, + 1, 246, 122, 2, 209, 25, 229, 164, 25, 228, 217, 23, 6, 1, 246, 122, 2, + 193, 25, 229, 164, 25, 228, 217, 23, 3, 1, 230, 144, 2, 209, 25, 217, + 207, 23, 3, 1, 230, 144, 2, 193, 25, 217, 207, 23, 3, 1, 230, 144, 2, + 209, 25, 219, 179, 25, 217, 207, 23, 3, 1, 230, 144, 2, 193, 25, 219, + 179, 25, 217, 207, 23, 3, 1, 230, 144, 2, 209, 25, 230, 65, 25, 217, 207, + 23, 3, 1, 230, 144, 2, 193, 25, 230, 65, 25, 217, 207, 23, 3, 1, 230, + 144, 2, 209, 25, 229, 164, 25, 217, 207, 23, 3, 1, 230, 144, 2, 193, 25, + 229, 164, 25, 217, 207, 23, 6, 1, 230, 144, 2, 209, 25, 228, 217, 23, 6, + 1, 230, 144, 2, 193, 25, 228, 217, 23, 6, 1, 230, 144, 2, 209, 25, 219, + 179, 25, 228, 217, 23, 6, 1, 230, 144, 2, 193, 25, 219, 179, 25, 228, + 217, 23, 6, 1, 230, 144, 2, 209, 25, 230, 65, 25, 228, 217, 23, 6, 1, + 230, 144, 2, 193, 25, 230, 65, 25, 228, 217, 23, 6, 1, 230, 144, 2, 209, + 25, 229, 164, 25, 228, 217, 23, 6, 1, 230, 144, 2, 193, 25, 229, 164, 25, + 228, 217, 23, 3, 1, 254, 147, 2, 219, 57, 23, 3, 1, 254, 147, 2, 234, + 115, 23, 3, 1, 254, 147, 2, 219, 179, 25, 217, 207, 23, 3, 1, 254, 147, + 2, 217, 207, 23, 3, 1, 254, 147, 2, 230, 65, 25, 217, 207, 23, 3, 1, 254, + 147, 2, 229, 163, 23, 3, 1, 254, 147, 2, 229, 164, 25, 217, 207, 23, 6, + 1, 254, 147, 2, 219, 57, 23, 6, 1, 254, 147, 2, 234, 115, 23, 6, 1, 254, + 147, 2, 219, 178, 23, 6, 1, 254, 147, 2, 230, 64, 23, 6, 1, 254, 147, 2, + 228, 217, 23, 236, 33, 23, 228, 217, 23, 228, 206, 23, 229, 163, 23, 249, + 8, 25, 229, 163, 23, 3, 1, 246, 122, 2, 219, 179, 25, 217, 207, 23, 3, 1, + 246, 122, 2, 217, 207, 23, 3, 1, 246, 122, 2, 230, 65, 25, 217, 207, 23, + 3, 1, 246, 122, 2, 229, 163, 23, 3, 1, 246, 122, 2, 229, 164, 25, 217, + 207, 23, 6, 1, 246, 157, 2, 219, 178, 23, 6, 1, 246, 157, 2, 230, 64, 23, + 6, 1, 246, 122, 2, 219, 178, 23, 6, 1, 246, 122, 2, 230, 64, 23, 6, 1, + 246, 122, 2, 228, 217, 23, 209, 25, 219, 178, 23, 209, 25, 230, 64, 23, + 209, 25, 229, 163, 23, 3, 1, 237, 163, 2, 219, 57, 23, 3, 1, 237, 163, 2, + 234, 115, 23, 3, 1, 237, 163, 2, 249, 8, 25, 219, 178, 23, 3, 1, 237, + 163, 2, 249, 8, 25, 230, 64, 23, 3, 1, 237, 163, 2, 229, 163, 23, 3, 1, + 237, 163, 2, 249, 8, 25, 229, 163, 23, 6, 1, 237, 163, 2, 219, 57, 23, 6, + 1, 237, 163, 2, 234, 115, 23, 6, 1, 237, 163, 2, 219, 178, 23, 6, 1, 237, + 163, 2, 230, 64, 23, 193, 25, 219, 178, 23, 193, 25, 230, 64, 23, 193, + 25, 229, 163, 23, 3, 1, 220, 58, 2, 219, 57, 23, 3, 1, 220, 58, 2, 234, + 115, 23, 3, 1, 220, 58, 2, 249, 8, 25, 219, 178, 23, 3, 1, 220, 58, 2, + 249, 8, 25, 230, 64, 23, 3, 1, 227, 150, 2, 228, 206, 23, 3, 1, 227, 150, + 2, 249, 144, 23, 3, 1, 220, 58, 2, 229, 163, 23, 3, 1, 220, 58, 2, 249, + 8, 25, 229, 163, 23, 6, 1, 220, 58, 2, 219, 57, 23, 6, 1, 220, 58, 2, + 234, 115, 23, 6, 1, 220, 58, 2, 219, 178, 23, 6, 1, 220, 58, 2, 230, 64, + 23, 6, 1, 227, 150, 2, 249, 144, 23, 249, 8, 25, 219, 178, 23, 249, 8, + 25, 230, 64, 23, 219, 178, 23, 3, 1, 230, 144, 2, 219, 179, 25, 217, 207, + 23, 3, 1, 230, 144, 2, 217, 207, 23, 3, 1, 230, 144, 2, 230, 65, 25, 217, + 207, 23, 3, 1, 230, 144, 2, 229, 163, 23, 3, 1, 230, 144, 2, 229, 164, + 25, 217, 207, 23, 6, 1, 230, 142, 2, 219, 178, 23, 6, 1, 230, 142, 2, + 230, 64, 23, 6, 1, 230, 144, 2, 219, 178, 23, 6, 1, 230, 144, 2, 230, 64, + 23, 6, 1, 230, 144, 2, 228, 217, 23, 230, 64, 23, 249, 144, 246, 198, + 228, 95, 246, 206, 228, 95, 246, 198, 223, 254, 246, 206, 223, 254, 221, + 226, 223, 254, 245, 114, 223, 254, 224, 80, 223, 254, 245, 194, 223, 254, + 228, 197, 223, 254, 221, 253, 223, 254, 243, 201, 223, 254, 217, 85, 218, + 199, 223, 254, 217, 85, 218, 199, 231, 197, 217, 85, 218, 199, 237, 54, + 235, 108, 78, 227, 102, 78, 242, 121, 231, 198, 242, 121, 245, 194, 249, + 146, 246, 198, 249, 146, 246, 206, 249, 146, 186, 135, 51, 69, 235, 43, + 51, 109, 235, 43, 42, 224, 109, 228, 69, 78, 45, 224, 109, 228, 69, 78, + 224, 109, 234, 238, 228, 69, 78, 224, 109, 243, 98, 228, 69, 78, 42, 51, + 228, 69, 78, 45, 51, 228, 69, 78, 51, 234, 238, 228, 69, 78, 51, 243, 98, + 228, 69, 78, 249, 192, 51, 249, 192, 251, 241, 221, 87, 251, 241, 131, + 61, 235, 121, 124, 61, 235, 121, 186, 246, 208, 242, 119, 229, 31, 235, + 44, 225, 54, 229, 241, 225, 54, 235, 108, 246, 204, 227, 102, 246, 204, + 229, 20, 248, 209, 245, 123, 235, 108, 230, 71, 227, 102, 230, 71, 232, + 210, 231, 203, 223, 254, 229, 170, 233, 164, 55, 229, 170, 222, 66, 221, + 232, 55, 228, 235, 51, 228, 235, 221, 78, 228, 235, 210, 228, 235, 210, + 51, 228, 235, 210, 221, 78, 228, 235, 251, 134, 224, 109, 235, 112, 254, + 120, 228, 69, 78, 224, 109, 227, 106, 254, 120, 228, 69, 78, 227, 199, + 78, 51, 246, 95, 78, 237, 177, 230, 73, 220, 78, 126, 221, 200, 251, 135, + 237, 191, 229, 31, 253, 249, 242, 122, 251, 241, 245, 108, 224, 55, 42, + 40, 252, 18, 2, 228, 77, 45, 40, 252, 18, 2, 228, 77, 51, 228, 82, 78, + 228, 82, 246, 95, 78, 246, 95, 228, 82, 78, 221, 164, 5, 246, 123, 210, + 229, 73, 55, 84, 127, 251, 241, 84, 90, 251, 241, 109, 253, 251, 210, + 225, 67, 250, 198, 220, 63, 124, 253, 250, 254, 159, 219, 101, 250, 167, + 233, 155, 55, 223, 23, 249, 146, 237, 170, 220, 78, 245, 145, 228, 197, + 78, 148, 61, 228, 196, 228, 92, 228, 235, 245, 116, 61, 228, 196, 245, + 170, 61, 228, 196, 124, 61, 228, 196, 245, 116, 61, 78, 247, 143, 250, + 100, 221, 86, 69, 245, 116, 248, 143, 234, 18, 14, 223, 254, 218, 174, + 237, 54, 245, 88, 254, 76, 237, 168, 221, 176, 237, 168, 225, 54, 237, + 168, 229, 43, 237, 201, 222, 228, 223, 34, 254, 250, 222, 228, 223, 34, + 237, 201, 12, 245, 124, 225, 5, 254, 250, 12, 245, 124, 225, 5, 232, 206, + 20, 225, 6, 231, 199, 20, 225, 6, 223, 59, 217, 84, 223, 59, 7, 3, 1, 72, + 223, 59, 154, 223, 59, 174, 223, 59, 182, 223, 59, 191, 223, 59, 185, + 223, 59, 190, 223, 59, 88, 55, 223, 59, 233, 154, 223, 59, 246, 154, 55, + 223, 59, 42, 229, 229, 223, 59, 45, 229, 229, 223, 59, 7, 3, 1, 207, 223, + 94, 217, 84, 223, 94, 107, 223, 94, 103, 223, 94, 160, 223, 94, 154, 223, + 94, 174, 223, 94, 182, 223, 94, 191, 223, 94, 185, 223, 94, 190, 223, 94, + 88, 55, 223, 94, 233, 154, 223, 94, 246, 154, 55, 223, 94, 42, 229, 229, + 223, 94, 45, 229, 229, 7, 223, 94, 3, 1, 60, 7, 223, 94, 3, 1, 73, 7, + 223, 94, 3, 1, 74, 7, 223, 94, 3, 1, 218, 151, 7, 223, 94, 3, 1, 226, + 104, 246, 106, 55, 250, 176, 55, 250, 94, 55, 245, 102, 245, 104, 55, + 235, 30, 55, 233, 165, 55, 232, 223, 55, 229, 153, 55, 227, 4, 55, 218, + 182, 55, 146, 224, 232, 55, 248, 152, 55, 246, 107, 55, 236, 100, 55, + 220, 252, 55, 247, 127, 55, 244, 170, 229, 177, 55, 229, 151, 55, 244, + 14, 55, 253, 224, 55, 242, 176, 55, 251, 94, 55, 235, 24, 221, 111, 55, + 223, 246, 55, 222, 64, 55, 36, 42, 243, 177, 50, 36, 45, 243, 177, 50, + 36, 171, 69, 235, 44, 230, 74, 36, 224, 192, 69, 235, 44, 230, 74, 36, + 254, 104, 76, 50, 36, 250, 199, 76, 50, 36, 42, 76, 50, 36, 45, 76, 50, + 36, 227, 94, 230, 74, 36, 250, 199, 227, 94, 230, 74, 36, 254, 104, 227, + 94, 230, 74, 36, 148, 188, 50, 36, 245, 116, 188, 50, 36, 246, 193, 250, + 221, 36, 246, 193, 223, 227, 36, 246, 193, 249, 4, 36, 246, 193, 250, + 222, 252, 230, 36, 42, 45, 76, 50, 36, 246, 193, 226, 100, 36, 246, 193, + 236, 152, 36, 246, 193, 220, 55, 229, 28, 221, 90, 36, 227, 160, 224, 18, + 230, 74, 36, 51, 69, 214, 230, 74, 36, 254, 111, 100, 36, 221, 78, 220, + 80, 36, 218, 201, 252, 4, 50, 36, 127, 76, 230, 74, 36, 171, 51, 224, 18, + 230, 74, 36, 90, 243, 177, 2, 192, 247, 129, 36, 127, 243, 177, 2, 192, + 247, 129, 36, 42, 76, 56, 36, 45, 76, 56, 36, 253, 252, 50, 254, 254, + 230, 165, 254, 241, 199, 222, 23, 223, 98, 173, 6, 251, 202, 249, 77, + 251, 88, 251, 85, 235, 44, 100, 251, 136, 230, 165, 251, 165, 220, 86, + 246, 108, 250, 144, 226, 98, 249, 77, 245, 250, 102, 3, 245, 67, 102, 6, + 243, 225, 252, 51, 6, 243, 225, 173, 6, 243, 225, 229, 53, 250, 144, 229, + 53, 250, 145, 104, 124, 229, 108, 102, 6, 72, 252, 51, 6, 72, 102, 6, + 153, 102, 3, 153, 235, 202, 49, 252, 201, 100, 173, 6, 207, 231, 105, 55, + 224, 9, 227, 210, 250, 125, 102, 6, 230, 59, 173, 6, 230, 59, 173, 6, + 228, 163, 102, 6, 152, 252, 51, 6, 152, 173, 6, 152, 228, 239, 222, 129, + 227, 169, 225, 50, 78, 222, 72, 55, 221, 107, 164, 55, 219, 153, 173, 6, + 217, 157, 230, 85, 55, 230, 160, 55, 237, 170, 230, 160, 55, 252, 51, 6, + 217, 157, 215, 23, 3, 1, 237, 162, 236, 175, 55, 254, 118, 55, 102, 6, + 253, 204, 252, 51, 6, 251, 202, 246, 126, 100, 102, 3, 73, 102, 6, 73, + 102, 6, 246, 74, 215, 6, 246, 74, 102, 6, 189, 102, 3, 74, 99, 100, 252, + 105, 100, 244, 92, 100, 249, 178, 100, 237, 205, 224, 7, 227, 59, 6, 228, + 163, 245, 252, 55, 173, 3, 229, 108, 173, 3, 244, 231, 173, 6, 244, 231, + 173, 6, 229, 108, 173, 233, 33, 223, 71, 215, 33, 6, 245, 67, 215, 33, 6, + 153, 210, 33, 6, 153, 215, 33, 6, 218, 90, 173, 30, 6, 250, 46, 173, 30, + 3, 250, 46, 173, 30, 3, 73, 173, 30, 3, 72, 173, 30, 3, 237, 126, 228, + 220, 235, 43, 215, 254, 134, 229, 170, 55, 254, 177, 215, 3, 246, 74, 16, + 35, 213, 224, 7, 219, 55, 245, 108, 131, 225, 40, 219, 55, 245, 108, 131, + 232, 26, 219, 55, 245, 108, 131, 222, 61, 219, 55, 245, 108, 131, 221, + 251, 219, 55, 245, 108, 124, 221, 249, 219, 55, 245, 108, 131, 245, 199, + 219, 55, 245, 108, 124, 245, 198, 219, 55, 245, 108, 148, 245, 198, 219, + 55, 245, 108, 245, 116, 245, 198, 219, 55, 245, 108, 131, 224, 73, 219, + 55, 245, 108, 245, 170, 224, 71, 219, 55, 245, 108, 131, 246, 231, 219, + 55, 245, 108, 148, 246, 229, 219, 55, 245, 108, 245, 170, 246, 229, 219, + 55, 245, 108, 225, 43, 246, 229, 245, 108, 231, 106, 107, 227, 68, 231, + 107, 107, 227, 68, 231, 107, 103, 227, 68, 231, 107, 160, 227, 68, 231, + 107, 154, 227, 68, 231, 107, 174, 227, 68, 231, 107, 182, 227, 68, 231, + 107, 191, 227, 68, 231, 107, 185, 227, 68, 231, 107, 190, 227, 68, 231, + 107, 222, 65, 227, 68, 231, 107, 246, 211, 227, 68, 231, 107, 220, 221, + 227, 68, 231, 107, 245, 196, 227, 68, 231, 107, 131, 242, 161, 227, 68, + 231, 107, 245, 170, 242, 161, 227, 68, 231, 107, 131, 221, 231, 3, 227, + 68, 231, 107, 107, 3, 227, 68, 231, 107, 103, 3, 227, 68, 231, 107, 160, + 3, 227, 68, 231, 107, 154, 3, 227, 68, 231, 107, 174, 3, 227, 68, 231, + 107, 182, 3, 227, 68, 231, 107, 191, 3, 227, 68, 231, 107, 185, 3, 227, + 68, 231, 107, 190, 3, 227, 68, 231, 107, 222, 65, 3, 227, 68, 231, 107, + 246, 211, 3, 227, 68, 231, 107, 220, 221, 3, 227, 68, 231, 107, 245, 196, + 3, 227, 68, 231, 107, 131, 242, 161, 3, 227, 68, 231, 107, 245, 170, 242, + 161, 3, 227, 68, 231, 107, 131, 221, 231, 227, 68, 231, 107, 131, 221, + 232, 251, 203, 250, 46, 227, 68, 231, 107, 245, 170, 221, 231, 227, 68, + 231, 107, 222, 66, 221, 231, 227, 68, 231, 107, 210, 131, 242, 161, 7, 3, + 1, 210, 251, 202, 227, 68, 231, 107, 224, 82, 235, 140, 17, 227, 68, 231, + 107, 245, 197, 247, 10, 17, 227, 68, 231, 107, 245, 197, 221, 231, 227, + 68, 231, 107, 131, 242, 162, 221, 231, 219, 55, 245, 108, 217, 85, 221, + 249, 127, 65, 220, 53, 65, 90, 65, 247, 130, 65, 42, 45, 65, 108, 113, + 65, 231, 187, 218, 217, 65, 231, 187, 247, 5, 65, 224, 6, 247, 5, 65, + 224, 6, 218, 217, 65, 127, 76, 2, 92, 90, 76, 2, 92, 127, 218, 237, 65, + 90, 218, 237, 65, 127, 124, 243, 158, 65, 220, 53, 124, 243, 158, 65, 90, + 124, 243, 158, 65, 247, 130, 124, 243, 158, 65, 127, 76, 2, 222, 135, 90, + 76, 2, 222, 135, 127, 76, 245, 97, 135, 220, 53, 76, 245, 97, 135, 90, + 76, 245, 97, 135, 247, 130, 76, 245, 97, 135, 108, 113, 76, 2, 252, 189, + 127, 76, 2, 96, 90, 76, 2, 96, 127, 76, 2, 234, 247, 90, 76, 2, 234, 247, + 42, 45, 218, 237, 65, 42, 45, 76, 2, 92, 247, 130, 217, 33, 65, 220, 53, + 76, 2, 221, 170, 235, 107, 220, 53, 76, 2, 221, 170, 227, 100, 247, 130, + 76, 2, 221, 170, 235, 107, 247, 130, 76, 2, 221, 170, 227, 100, 90, 76, + 2, 250, 124, 247, 129, 247, 130, 76, 2, 250, 124, 235, 107, 254, 104, + 221, 120, 225, 70, 65, 250, 199, 221, 120, 225, 70, 65, 231, 187, 218, + 217, 76, 199, 171, 135, 127, 76, 199, 252, 201, 104, 90, 76, 199, 135, + 254, 104, 230, 119, 250, 222, 65, 250, 199, 230, 119, 250, 222, 65, 127, + 243, 177, 2, 192, 220, 52, 127, 243, 177, 2, 192, 247, 129, 220, 53, 243, + 177, 2, 192, 227, 100, 220, 53, 243, 177, 2, 192, 235, 107, 90, 243, 177, + 2, 192, 220, 52, 90, 243, 177, 2, 192, 247, 129, 247, 130, 243, 177, 2, + 192, 227, 100, 247, 130, 243, 177, 2, 192, 235, 107, 90, 76, 104, 127, + 65, 220, 53, 76, 127, 117, 247, 130, 65, 127, 76, 104, 90, 65, 127, 230, + 32, 254, 19, 220, 53, 230, 32, 254, 19, 90, 230, 32, 254, 19, 247, 130, + 230, 32, 254, 19, 127, 243, 177, 104, 90, 243, 176, 90, 243, 177, 104, + 127, 243, 176, 127, 51, 76, 2, 92, 42, 45, 51, 76, 2, 92, 90, 51, 76, 2, + 92, 127, 51, 65, 220, 53, 51, 65, 90, 51, 65, 247, 130, 51, 65, 42, 45, + 51, 65, 108, 113, 51, 65, 231, 187, 218, 217, 51, 65, 231, 187, 247, 5, + 51, 65, 224, 6, 247, 5, 51, 65, 224, 6, 218, 217, 51, 65, 127, 221, 78, + 65, 90, 221, 78, 65, 127, 223, 223, 65, 90, 223, 223, 65, 220, 53, 76, 2, + 51, 92, 247, 130, 76, 2, 51, 92, 127, 249, 145, 65, 220, 53, 249, 145, + 65, 90, 249, 145, 65, 247, 130, 249, 145, 65, 127, 76, 199, 135, 90, 76, + 199, 135, 127, 67, 65, 220, 53, 67, 65, 90, 67, 65, 247, 130, 67, 65, + 220, 53, 67, 76, 245, 97, 135, 220, 53, 67, 76, 230, 139, 229, 193, 220, + 53, 67, 76, 230, 139, 229, 194, 2, 186, 135, 220, 53, 67, 76, 230, 139, + 229, 194, 2, 69, 135, 220, 53, 67, 51, 65, 220, 53, 67, 51, 76, 230, 139, + 229, 193, 90, 67, 76, 245, 97, 218, 254, 231, 187, 218, 217, 76, 199, + 250, 123, 224, 6, 247, 5, 76, 199, 250, 123, 108, 113, 67, 65, 45, 76, 2, + 3, 250, 221, 247, 130, 76, 127, 117, 220, 53, 65, 148, 90, 254, 19, 127, + 76, 2, 69, 92, 90, 76, 2, 69, 92, 42, 45, 76, 2, 69, 92, 127, 76, 2, 51, + 69, 92, 90, 76, 2, 51, 69, 92, 42, 45, 76, 2, 51, 69, 92, 127, 230, 117, + 65, 90, 230, 117, 65, 42, 45, 230, 117, 65, 35, 254, 157, 250, 164, 229, + 223, 248, 246, 222, 14, 246, 91, 222, 14, 248, 160, 212, 246, 92, 246, + 199, 225, 45, 237, 215, 232, 231, 246, 213, 230, 165, 212, 254, 132, 246, + 213, 230, 165, 3, 246, 213, 230, 165, 250, 140, 254, 14, 233, 254, 248, + 160, 212, 250, 142, 254, 14, 233, 254, 3, 250, 140, 254, 14, 233, 254, + 246, 190, 117, 228, 222, 233, 33, 228, 229, 233, 33, 250, 128, 233, 33, + 223, 71, 233, 155, 55, 233, 153, 55, 61, 229, 43, 248, 188, 224, 55, 225, + 46, 233, 154, 253, 252, 230, 112, 227, 94, 230, 112, 251, 242, 230, 112, + 40, 227, 64, 250, 89, 227, 64, 245, 110, 227, 64, 228, 218, 101, 237, + 207, 45, 254, 119, 254, 119, 234, 22, 254, 119, 223, 245, 254, 119, 248, + 190, 248, 160, 212, 248, 193, 229, 234, 101, 212, 229, 234, 101, 235, 7, + 254, 126, 235, 7, 230, 105, 237, 174, 220, 74, 237, 186, 51, 237, 186, + 221, 78, 237, 186, 250, 136, 237, 186, 223, 49, 237, 186, 219, 65, 237, + 186, 250, 199, 237, 186, 250, 199, 250, 136, 237, 186, 254, 104, 250, + 136, 237, 186, 222, 13, 252, 138, 227, 224, 228, 219, 61, 233, 154, 246, + 96, 244, 176, 228, 219, 242, 250, 221, 180, 230, 112, 210, 221, 179, 237, + 170, 235, 129, 198, 224, 111, 218, 236, 218, 168, 228, 229, 212, 221, + 179, 233, 155, 221, 179, 253, 247, 114, 101, 212, 253, 247, 114, 101, + 254, 72, 114, 101, 254, 72, 251, 222, 212, 254, 249, 114, 101, 232, 135, + 254, 72, 231, 190, 254, 249, 114, 101, 254, 151, 114, 101, 212, 254, 151, + 114, 101, 254, 151, 114, 156, 114, 101, 221, 78, 221, 179, 254, 158, 114, + 101, 246, 150, 101, 244, 175, 246, 150, 101, 248, 247, 252, 99, 254, 74, + 222, 23, 235, 51, 244, 175, 114, 101, 254, 72, 114, 199, 156, 222, 23, + 237, 237, 230, 165, 237, 237, 117, 156, 254, 72, 114, 101, 250, 176, 246, + 153, 246, 154, 250, 175, 227, 94, 237, 224, 114, 101, 227, 94, 114, 101, + 250, 117, 101, 246, 125, 246, 152, 101, 223, 157, 246, 153, 249, 63, 114, + 101, 114, 199, 251, 213, 249, 78, 234, 22, 251, 212, 228, 80, 114, 101, + 212, 114, 101, 242, 59, 101, 212, 242, 59, 101, 223, 123, 246, 150, 101, + 235, 87, 156, 114, 101, 244, 30, 156, 114, 101, 235, 87, 104, 114, 101, + 244, 30, 104, 114, 101, 235, 87, 251, 222, 212, 114, 101, 244, 30, 251, + 222, 212, 114, 101, 233, 95, 235, 86, 233, 95, 244, 29, 252, 99, 212, + 246, 150, 101, 212, 235, 86, 212, 244, 29, 232, 135, 235, 87, 231, 190, + 114, 101, 232, 135, 244, 30, 231, 190, 114, 101, 235, 87, 156, 246, 150, + 101, 244, 30, 156, 246, 150, 101, 232, 135, 235, 87, 231, 190, 246, 150, + 101, 232, 135, 244, 30, 231, 190, 246, 150, 101, 235, 87, 156, 244, 29, + 244, 30, 156, 235, 86, 232, 135, 235, 87, 231, 190, 244, 29, 232, 135, + 244, 30, 231, 190, 235, 86, 228, 244, 223, 84, 228, 245, 156, 114, 101, + 223, 85, 156, 114, 101, 228, 245, 156, 246, 150, 101, 223, 85, 156, 246, + 150, 101, 248, 160, 212, 228, 247, 248, 160, 212, 223, 86, 223, 93, 230, + 165, 223, 58, 230, 165, 212, 112, 223, 93, 230, 165, 212, 112, 223, 58, + 230, 165, 223, 93, 117, 156, 114, 101, 223, 58, 117, 156, 114, 101, 232, + 135, 112, 223, 93, 117, 231, 190, 114, 101, 232, 135, 112, 223, 58, 117, + 231, 190, 114, 101, 223, 93, 117, 2, 212, 114, 101, 223, 58, 117, 2, 212, + 114, 101, 233, 81, 233, 82, 233, 83, 233, 82, 220, 74, 40, 237, 237, 230, + 165, 40, 230, 101, 230, 165, 40, 237, 237, 117, 156, 114, 101, 40, 230, + 101, 117, 156, 114, 101, 40, 251, 143, 40, 250, 82, 34, 229, 43, 34, 233, + 154, 34, 221, 176, 34, 248, 188, 224, 55, 34, 61, 230, 112, 34, 227, 94, + 230, 112, 34, 253, 252, 230, 112, 34, 246, 153, 34, 249, 146, 204, 229, + 43, 204, 233, 154, 204, 221, 176, 204, 61, 230, 112, 45, 222, 143, 42, + 222, 143, 113, 222, 143, 108, 222, 143, 253, 255, 233, 133, 221, 62, 245, + 128, 221, 78, 69, 252, 201, 45, 220, 236, 51, 69, 252, 201, 51, 45, 220, + 236, 248, 160, 212, 228, 214, 212, 221, 62, 248, 160, 212, 245, 129, 232, + 138, 51, 69, 252, 201, 51, 45, 220, 236, 228, 245, 220, 82, 227, 192, + 223, 85, 220, 82, 227, 192, 231, 188, 223, 101, 230, 165, 250, 140, 254, + 14, 231, 188, 223, 100, 231, 188, 223, 101, 117, 156, 114, 101, 250, 140, + 254, 14, 231, 188, 223, 101, 156, 114, 101, 230, 101, 230, 165, 237, 237, + 230, 165, 233, 87, 243, 131, 250, 150, 234, 49, 237, 183, 218, 118, 232, + 216, 231, 189, 45, 254, 120, 2, 254, 51, 45, 221, 90, 233, 33, 235, 7, + 254, 126, 233, 33, 235, 7, 230, 105, 233, 33, 237, 174, 233, 33, 220, 74, + 249, 5, 230, 112, 61, 230, 112, 223, 157, 230, 112, 248, 188, 221, 176, + 252, 22, 42, 231, 188, 245, 251, 225, 66, 228, 229, 45, 231, 188, 245, + 251, 225, 66, 228, 229, 42, 225, 66, 228, 229, 45, 225, 66, 228, 229, + 210, 221, 180, 246, 153, 250, 79, 235, 7, 230, 105, 250, 79, 235, 7, 254, + 126, 51, 223, 92, 51, 223, 57, 51, 237, 174, 51, 220, 74, 229, 62, 114, + 25, 229, 234, 101, 235, 87, 2, 248, 145, 244, 30, 2, 248, 145, 219, 100, + 233, 95, 235, 86, 219, 100, 233, 95, 244, 29, 235, 87, 114, 199, 156, + 244, 29, 244, 30, 114, 199, 156, 235, 86, 114, 199, 156, 235, 86, 114, + 199, 156, 244, 29, 114, 199, 156, 228, 244, 114, 199, 156, 223, 84, 248, + 160, 212, 228, 248, 156, 246, 155, 248, 160, 212, 223, 87, 156, 246, 155, + 212, 40, 237, 237, 117, 156, 114, 101, 212, 40, 230, 101, 117, 156, 114, + 101, 40, 237, 237, 117, 156, 212, 114, 101, 40, 230, 101, 117, 156, 212, + 114, 101, 235, 87, 251, 222, 212, 246, 150, 101, 244, 30, 251, 222, 212, + 246, 150, 101, 228, 245, 251, 222, 212, 246, 150, 101, 223, 85, 251, 222, + 212, 246, 150, 101, 212, 231, 188, 223, 101, 230, 165, 248, 160, 212, + 250, 142, 254, 14, 231, 188, 223, 100, 212, 231, 188, 223, 101, 117, 156, + 114, 101, 248, 160, 212, 250, 142, 254, 14, 231, 188, 223, 101, 156, 246, + 155, 69, 246, 208, 233, 191, 186, 246, 208, 108, 45, 249, 11, 246, 208, + 113, 45, 249, 11, 246, 208, 246, 213, 117, 2, 171, 186, 92, 246, 213, + 117, 2, 69, 252, 201, 253, 245, 246, 190, 117, 186, 92, 3, 246, 213, 117, + 2, 69, 252, 201, 253, 245, 246, 190, 117, 186, 92, 246, 213, 117, 2, 61, + 50, 246, 213, 117, 2, 230, 77, 3, 246, 213, 117, 2, 230, 77, 246, 213, + 117, 2, 220, 81, 246, 213, 117, 2, 124, 186, 223, 107, 250, 140, 2, 171, + 186, 92, 250, 140, 2, 69, 252, 201, 253, 245, 246, 190, 117, 186, 92, 3, + 250, 140, 2, 69, 252, 201, 253, 245, 246, 190, 117, 186, 92, 250, 140, 2, + 230, 77, 3, 250, 140, 2, 230, 77, 217, 158, 165, 252, 226, 233, 253, 249, + 6, 55, 246, 215, 65, 242, 182, 108, 254, 20, 113, 254, 20, 228, 225, 229, + 156, 218, 235, 235, 43, 42, 251, 90, 45, 251, 90, 42, 245, 149, 45, 245, + 149, 252, 29, 45, 250, 102, 252, 29, 42, 250, 102, 221, 120, 45, 250, + 102, 221, 120, 42, 250, 102, 210, 212, 55, 40, 234, 234, 254, 51, 226, + 80, 226, 85, 222, 72, 227, 211, 229, 16, 237, 211, 219, 88, 223, 227, + 229, 57, 117, 237, 182, 55, 215, 212, 55, 218, 242, 242, 183, 221, 120, + 42, 250, 123, 221, 120, 45, 250, 123, 252, 29, 42, 250, 123, 252, 29, 45, + 250, 123, 221, 120, 144, 237, 186, 252, 29, 144, 237, 186, 245, 95, 224, + 39, 108, 254, 21, 252, 100, 124, 186, 252, 191, 230, 107, 236, 154, 246, + 146, 199, 222, 23, 227, 109, 218, 152, 237, 224, 112, 227, 209, 252, 21, + 236, 153, 235, 112, 254, 120, 115, 227, 106, 254, 120, 115, 246, 146, + 199, 222, 23, 235, 115, 252, 111, 227, 93, 250, 56, 254, 158, 254, 28, + 222, 227, 221, 112, 227, 9, 248, 228, 230, 102, 250, 152, 222, 113, 224, + 49, 250, 114, 250, 113, 179, 180, 16, 242, 104, 179, 180, 16, 223, 221, + 228, 95, 179, 180, 16, 228, 96, 246, 155, 179, 180, 16, 228, 96, 248, + 193, 179, 180, 16, 228, 96, 249, 4, 179, 180, 16, 228, 96, 237, 47, 179, + 180, 16, 228, 96, 250, 221, 179, 180, 16, 250, 222, 223, 142, 179, 180, + 16, 250, 222, 237, 47, 179, 180, 16, 224, 56, 135, 179, 180, 16, 252, + 231, 135, 179, 180, 16, 228, 96, 224, 55, 179, 180, 16, 228, 96, 252, + 230, 179, 180, 16, 228, 96, 235, 86, 179, 180, 16, 228, 96, 244, 29, 179, + 180, 16, 127, 219, 183, 179, 180, 16, 90, 219, 183, 179, 180, 16, 228, + 96, 127, 65, 179, 180, 16, 228, 96, 90, 65, 179, 180, 16, 250, 222, 252, + 230, 179, 180, 16, 113, 222, 144, 220, 81, 179, 180, 16, 249, 63, 223, + 142, 179, 180, 16, 228, 96, 113, 251, 134, 179, 180, 16, 228, 96, 249, + 62, 179, 180, 16, 113, 222, 144, 237, 47, 179, 180, 16, 220, 53, 219, + 183, 179, 180, 16, 228, 96, 220, 53, 65, 179, 180, 16, 108, 222, 144, + 230, 77, 179, 180, 16, 249, 72, 223, 142, 179, 180, 16, 228, 96, 108, + 251, 134, 179, 180, 16, 228, 96, 249, 71, 179, 180, 16, 108, 222, 144, + 237, 47, 179, 180, 16, 247, 130, 219, 183, 179, 180, 16, 228, 96, 247, + 130, 65, 179, 180, 16, 228, 68, 220, 81, 179, 180, 16, 249, 63, 220, 81, + 179, 180, 16, 249, 5, 220, 81, 179, 180, 16, 237, 48, 220, 81, 179, 180, + 16, 250, 222, 220, 81, 179, 180, 16, 108, 224, 198, 237, 47, 179, 180, + 16, 228, 68, 228, 95, 179, 180, 16, 250, 222, 223, 156, 179, 180, 16, + 228, 96, 250, 175, 179, 180, 16, 108, 222, 144, 249, 13, 179, 180, 16, + 249, 72, 249, 13, 179, 180, 16, 223, 157, 249, 13, 179, 180, 16, 237, 48, + 249, 13, 179, 180, 16, 250, 222, 249, 13, 179, 180, 16, 113, 224, 198, + 223, 142, 179, 180, 16, 42, 224, 198, 223, 142, 179, 180, 16, 221, 180, + 249, 13, 179, 180, 16, 244, 30, 249, 13, 179, 180, 16, 250, 169, 135, + 179, 180, 16, 249, 72, 221, 179, 179, 180, 16, 217, 32, 179, 180, 16, + 223, 143, 221, 179, 179, 180, 16, 225, 68, 220, 81, 179, 180, 16, 228, + 96, 212, 246, 155, 179, 180, 16, 228, 96, 228, 81, 179, 180, 16, 113, + 251, 135, 221, 179, 179, 180, 16, 108, 251, 135, 221, 179, 179, 180, 16, + 237, 162, 179, 180, 16, 227, 149, 179, 180, 16, 230, 143, 179, 180, 16, + 254, 147, 220, 81, 179, 180, 16, 246, 157, 220, 81, 179, 180, 16, 237, + 163, 220, 81, 179, 180, 16, 230, 144, 220, 81, 179, 180, 16, 254, 146, + 212, 251, 45, 78, 45, 254, 120, 2, 247, 130, 217, 33, 65, 224, 177, 230, + 119, 252, 21, 252, 120, 100, 69, 235, 44, 2, 233, 193, 248, 145, 237, + 191, 100, 250, 137, 220, 79, 100, 248, 204, 220, 79, 100, 246, 201, 100, + 250, 160, 100, 67, 40, 2, 251, 85, 69, 235, 43, 246, 179, 100, 254, 142, + 236, 155, 100, 243, 142, 100, 34, 186, 252, 201, 2, 231, 183, 34, 221, + 91, 247, 132, 252, 1, 250, 222, 2, 231, 186, 65, 220, 77, 100, 233, 122, + 100, 242, 117, 100, 230, 118, 243, 224, 100, 230, 118, 235, 200, 100, + 229, 218, 100, 229, 217, 100, 248, 210, 250, 77, 16, 245, 124, 103, 224, + 20, 100, 179, 180, 16, 228, 95, 249, 86, 225, 55, 236, 155, 100, 228, + 237, 230, 34, 232, 120, 230, 34, 228, 234, 226, 101, 100, 250, 209, 226, + 101, 100, 42, 229, 230, 220, 60, 96, 42, 229, 230, 246, 86, 42, 229, 230, + 234, 237, 96, 45, 229, 230, 220, 60, 96, 45, 229, 230, 246, 86, 45, 229, + 230, 234, 237, 96, 42, 40, 252, 18, 220, 60, 250, 123, 42, 40, 252, 18, + 246, 86, 42, 40, 252, 18, 234, 237, 250, 123, 45, 40, 252, 18, 220, 60, + 250, 123, 45, 40, 252, 18, 246, 86, 45, 40, 252, 18, 234, 237, 250, 123, + 42, 250, 79, 252, 18, 220, 60, 96, 42, 250, 79, 252, 18, 233, 193, 229, + 102, 42, 250, 79, 252, 18, 234, 237, 96, 250, 79, 252, 18, 246, 86, 45, + 250, 79, 252, 18, 220, 60, 96, 45, 250, 79, 252, 18, 233, 193, 229, 102, + 45, 250, 79, 252, 18, 234, 237, 96, 237, 187, 246, 86, 186, 235, 44, 246, + 86, 220, 60, 42, 156, 234, 237, 45, 250, 79, 252, 18, 226, 86, 220, 60, + 45, 156, 234, 237, 42, 250, 79, 252, 18, 226, 86, 223, 72, 221, 119, 223, + 72, 252, 28, 221, 120, 40, 115, 252, 29, 40, 115, 252, 29, 40, 252, 18, + 104, 221, 120, 40, 115, 32, 16, 252, 28, 42, 69, 86, 235, 43, 45, 69, 86, + 235, 43, 186, 226, 112, 235, 42, 186, 226, 112, 235, 41, 186, 226, 112, + 235, 40, 186, 226, 112, 235, 39, 249, 54, 16, 170, 69, 25, 221, 120, 227, + 109, 249, 54, 16, 170, 69, 25, 252, 29, 227, 109, 249, 54, 16, 170, 69, + 2, 250, 221, 249, 54, 16, 170, 113, 25, 186, 2, 250, 221, 249, 54, 16, + 170, 108, 25, 186, 2, 250, 221, 249, 54, 16, 170, 69, 2, 221, 90, 249, + 54, 16, 170, 113, 25, 186, 2, 221, 90, 249, 54, 16, 170, 108, 25, 186, 2, + 221, 90, 249, 54, 16, 170, 69, 25, 218, 236, 249, 54, 16, 170, 113, 25, + 186, 2, 218, 236, 249, 54, 16, 170, 108, 25, 186, 2, 218, 236, 249, 54, + 16, 170, 113, 25, 242, 241, 249, 54, 16, 170, 108, 25, 242, 241, 249, 54, + 16, 170, 69, 25, 221, 120, 235, 115, 249, 54, 16, 170, 69, 25, 252, 29, + 235, 115, 40, 245, 133, 227, 163, 100, 246, 225, 100, 69, 235, 44, 246, + 86, 233, 233, 252, 8, 233, 233, 171, 104, 224, 191, 233, 233, 224, 192, + 104, 235, 2, 233, 233, 171, 104, 124, 224, 179, 233, 233, 124, 224, 180, + 104, 235, 2, 233, 233, 124, 224, 180, 237, 55, 233, 233, 221, 75, 233, + 233, 222, 43, 233, 233, 229, 174, 247, 9, 244, 24, 245, 81, 221, 120, + 229, 229, 252, 29, 229, 229, 221, 120, 250, 79, 115, 252, 29, 250, 79, + 115, 221, 120, 221, 114, 224, 236, 115, 252, 29, 221, 114, 224, 236, 115, + 67, 221, 101, 252, 111, 227, 94, 2, 250, 221, 223, 129, 245, 155, 255, 3, + 250, 76, 246, 214, 237, 174, 249, 86, 246, 88, 100, 16, 35, 231, 110, 16, + 35, 223, 154, 117, 243, 157, 16, 35, 223, 154, 117, 222, 39, 16, 35, 246, + 190, 117, 222, 39, 16, 35, 246, 190, 117, 221, 104, 16, 35, 246, 181, 16, + 35, 254, 252, 16, 35, 252, 119, 16, 35, 252, 229, 16, 35, 186, 222, 145, + 16, 35, 235, 44, 245, 224, 16, 35, 69, 222, 145, 16, 35, 245, 124, 245, + 224, 16, 35, 251, 128, 227, 162, 16, 35, 224, 217, 230, 83, 16, 35, 224, + 217, 237, 223, 16, 35, 249, 142, 235, 34, 246, 135, 16, 35, 249, 42, 250, + 132, 107, 16, 35, 249, 42, 250, 132, 103, 16, 35, 249, 42, 250, 132, 160, + 16, 35, 249, 42, 250, 132, 154, 16, 35, 232, 136, 254, 252, 16, 35, 222, + 224, 238, 28, 16, 35, 246, 190, 117, 221, 105, 252, 45, 16, 35, 251, 152, + 16, 35, 246, 190, 117, 234, 17, 16, 35, 223, 90, 16, 35, 246, 135, 16, + 35, 245, 189, 225, 54, 16, 35, 244, 23, 225, 54, 16, 35, 227, 212, 225, + 54, 16, 35, 220, 73, 225, 54, 16, 35, 223, 254, 16, 35, 249, 69, 252, 48, + 100, 230, 119, 252, 21, 16, 35, 232, 122, 16, 35, 249, 70, 245, 124, 103, + 16, 35, 223, 91, 245, 124, 103, 230, 171, 96, 230, 171, 251, 64, 230, + 171, 245, 127, 230, 171, 237, 170, 245, 127, 230, 171, 252, 117, 251, + 247, 230, 171, 252, 25, 221, 200, 230, 171, 252, 15, 252, 204, 242, 58, + 230, 171, 254, 135, 117, 251, 44, 230, 171, 249, 146, 230, 171, 250, 70, + 254, 254, 231, 108, 230, 171, 51, 252, 230, 34, 20, 107, 34, 20, 103, 34, + 20, 160, 34, 20, 154, 34, 20, 174, 34, 20, 182, 34, 20, 191, 34, 20, 185, + 34, 20, 190, 34, 54, 222, 65, 34, 54, 246, 211, 34, 54, 220, 221, 34, 54, + 221, 247, 34, 54, 245, 111, 34, 54, 245, 200, 34, 54, 224, 77, 34, 54, + 225, 41, 34, 54, 246, 233, 34, 54, 232, 29, 34, 54, 220, 219, 82, 20, + 107, 82, 20, 103, 82, 20, 160, 82, 20, 154, 82, 20, 174, 82, 20, 182, 82, + 20, 191, 82, 20, 185, 82, 20, 190, 82, 54, 222, 65, 82, 54, 246, 211, 82, + 54, 220, 221, 82, 54, 221, 247, 82, 54, 245, 111, 82, 54, 245, 200, 82, + 54, 224, 77, 82, 54, 225, 41, 82, 54, 246, 233, 82, 54, 232, 29, 82, 54, + 220, 219, 20, 131, 245, 90, 223, 136, 20, 124, 245, 90, 223, 136, 20, + 148, 245, 90, 223, 136, 20, 245, 116, 245, 90, 223, 136, 20, 245, 170, + 245, 90, 223, 136, 20, 224, 82, 245, 90, 223, 136, 20, 225, 43, 245, 90, + 223, 136, 20, 246, 235, 245, 90, 223, 136, 20, 232, 31, 245, 90, 223, + 136, 54, 222, 66, 245, 90, 223, 136, 54, 246, 212, 245, 90, 223, 136, 54, + 220, 222, 245, 90, 223, 136, 54, 221, 248, 245, 90, 223, 136, 54, 245, + 112, 245, 90, 223, 136, 54, 245, 201, 245, 90, 223, 136, 54, 224, 78, + 245, 90, 223, 136, 54, 225, 42, 245, 90, 223, 136, 54, 246, 234, 245, 90, + 223, 136, 54, 232, 30, 245, 90, 223, 136, 54, 220, 220, 245, 90, 223, + 136, 82, 7, 3, 1, 60, 82, 7, 3, 1, 253, 204, 82, 7, 3, 1, 251, 202, 82, + 7, 3, 1, 250, 46, 82, 7, 3, 1, 73, 82, 7, 3, 1, 246, 74, 82, 7, 3, 1, + 245, 67, 82, 7, 3, 1, 243, 225, 82, 7, 3, 1, 72, 82, 7, 3, 1, 237, 126, + 82, 7, 3, 1, 237, 17, 82, 7, 3, 1, 153, 82, 7, 3, 1, 189, 82, 7, 3, 1, + 207, 82, 7, 3, 1, 74, 82, 7, 3, 1, 230, 59, 82, 7, 3, 1, 228, 163, 82, 7, + 3, 1, 152, 82, 7, 3, 1, 198, 82, 7, 3, 1, 222, 201, 82, 7, 3, 1, 68, 82, + 7, 3, 1, 216, 216, 82, 7, 3, 1, 219, 40, 82, 7, 3, 1, 218, 151, 82, 7, 3, + 1, 218, 90, 82, 7, 3, 1, 217, 157, 34, 7, 6, 1, 60, 34, 7, 6, 1, 253, + 204, 34, 7, 6, 1, 251, 202, 34, 7, 6, 1, 250, 46, 34, 7, 6, 1, 73, 34, 7, + 6, 1, 246, 74, 34, 7, 6, 1, 245, 67, 34, 7, 6, 1, 243, 225, 34, 7, 6, 1, + 72, 34, 7, 6, 1, 237, 126, 34, 7, 6, 1, 237, 17, 34, 7, 6, 1, 153, 34, 7, + 6, 1, 189, 34, 7, 6, 1, 207, 34, 7, 6, 1, 74, 34, 7, 6, 1, 230, 59, 34, + 7, 6, 1, 228, 163, 34, 7, 6, 1, 152, 34, 7, 6, 1, 198, 34, 7, 6, 1, 222, + 201, 34, 7, 6, 1, 68, 34, 7, 6, 1, 216, 216, 34, 7, 6, 1, 219, 40, 34, 7, + 6, 1, 218, 151, 34, 7, 6, 1, 218, 90, 34, 7, 6, 1, 217, 157, 34, 7, 3, 1, + 60, 34, 7, 3, 1, 253, 204, 34, 7, 3, 1, 251, 202, 34, 7, 3, 1, 250, 46, + 34, 7, 3, 1, 73, 34, 7, 3, 1, 246, 74, 34, 7, 3, 1, 245, 67, 34, 7, 3, 1, + 243, 225, 34, 7, 3, 1, 72, 34, 7, 3, 1, 237, 126, 34, 7, 3, 1, 237, 17, + 34, 7, 3, 1, 153, 34, 7, 3, 1, 189, 34, 7, 3, 1, 207, 34, 7, 3, 1, 74, + 34, 7, 3, 1, 230, 59, 34, 7, 3, 1, 228, 163, 34, 7, 3, 1, 152, 34, 7, 3, + 1, 198, 34, 7, 3, 1, 222, 201, 34, 7, 3, 1, 68, 34, 7, 3, 1, 216, 216, + 34, 7, 3, 1, 219, 40, 34, 7, 3, 1, 218, 151, 34, 7, 3, 1, 218, 90, 34, 7, + 3, 1, 217, 157, 34, 20, 217, 84, 232, 136, 34, 54, 246, 211, 232, 136, + 34, 54, 220, 221, 232, 136, 34, 54, 221, 247, 232, 136, 34, 54, 245, 111, + 232, 136, 34, 54, 245, 200, 232, 136, 34, 54, 224, 77, 232, 136, 34, 54, + 225, 41, 232, 136, 34, 54, 246, 233, 232, 136, 34, 54, 232, 29, 232, 136, + 34, 54, 220, 219, 51, 34, 20, 107, 51, 34, 20, 103, 51, 34, 20, 160, 51, + 34, 20, 154, 51, 34, 20, 174, 51, 34, 20, 182, 51, 34, 20, 191, 51, 34, + 20, 185, 51, 34, 20, 190, 51, 34, 54, 222, 65, 232, 136, 34, 20, 217, 84, + 86, 89, 170, 242, 241, 86, 89, 106, 242, 241, 86, 89, 170, 219, 152, 86, + 89, 106, 219, 152, 86, 89, 170, 221, 78, 249, 147, 242, 241, 86, 89, 106, + 221, 78, 249, 147, 242, 241, 86, 89, 170, 221, 78, 249, 147, 219, 152, + 86, 89, 106, 221, 78, 249, 147, 219, 152, 86, 89, 170, 228, 92, 249, 147, + 242, 241, 86, 89, 106, 228, 92, 249, 147, 242, 241, 86, 89, 170, 228, 92, + 249, 147, 219, 152, 86, 89, 106, 228, 92, 249, 147, 219, 152, 86, 89, + 170, 113, 25, 227, 109, 86, 89, 113, 170, 25, 45, 243, 149, 86, 89, 113, + 106, 25, 45, 235, 58, 86, 89, 106, 113, 25, 227, 109, 86, 89, 170, 113, + 25, 235, 115, 86, 89, 113, 170, 25, 42, 243, 149, 86, 89, 113, 106, 25, + 42, 235, 58, 86, 89, 106, 113, 25, 235, 115, 86, 89, 170, 108, 25, 227, + 109, 86, 89, 108, 170, 25, 45, 243, 149, 86, 89, 108, 106, 25, 45, 235, + 58, 86, 89, 106, 108, 25, 227, 109, 86, 89, 170, 108, 25, 235, 115, 86, + 89, 108, 170, 25, 42, 243, 149, 86, 89, 108, 106, 25, 42, 235, 58, 86, + 89, 106, 108, 25, 235, 115, 86, 89, 170, 69, 25, 227, 109, 86, 89, 69, + 170, 25, 45, 243, 149, 86, 89, 108, 106, 25, 45, 113, 235, 58, 86, 89, + 113, 106, 25, 45, 108, 235, 58, 86, 89, 69, 106, 25, 45, 235, 58, 86, 89, + 113, 170, 25, 45, 108, 243, 149, 86, 89, 108, 170, 25, 45, 113, 243, 149, + 86, 89, 106, 69, 25, 227, 109, 86, 89, 170, 69, 25, 235, 115, 86, 89, 69, + 170, 25, 42, 243, 149, 86, 89, 108, 106, 25, 42, 113, 235, 58, 86, 89, + 113, 106, 25, 42, 108, 235, 58, 86, 89, 69, 106, 25, 42, 235, 58, 86, 89, + 113, 170, 25, 42, 108, 243, 149, 86, 89, 108, 170, 25, 42, 113, 243, 149, + 86, 89, 106, 69, 25, 235, 115, 86, 89, 170, 113, 25, 242, 241, 86, 89, + 42, 106, 25, 45, 113, 235, 58, 86, 89, 45, 106, 25, 42, 113, 235, 58, 86, + 89, 113, 170, 25, 186, 243, 149, 86, 89, 113, 106, 25, 186, 235, 58, 86, + 89, 45, 170, 25, 42, 113, 243, 149, 86, 89, 42, 170, 25, 45, 113, 243, + 149, 86, 89, 106, 113, 25, 242, 241, 86, 89, 170, 108, 25, 242, 241, 86, + 89, 42, 106, 25, 45, 108, 235, 58, 86, 89, 45, 106, 25, 42, 108, 235, 58, + 86, 89, 108, 170, 25, 186, 243, 149, 86, 89, 108, 106, 25, 186, 235, 58, + 86, 89, 45, 170, 25, 42, 108, 243, 149, 86, 89, 42, 170, 25, 45, 108, + 243, 149, 86, 89, 106, 108, 25, 242, 241, 86, 89, 170, 69, 25, 242, 241, + 86, 89, 42, 106, 25, 45, 69, 235, 58, 86, 89, 45, 106, 25, 42, 69, 235, + 58, 86, 89, 69, 170, 25, 186, 243, 149, 86, 89, 108, 106, 25, 113, 186, + 235, 58, 86, 89, 113, 106, 25, 108, 186, 235, 58, 86, 89, 69, 106, 25, + 186, 235, 58, 86, 89, 42, 108, 106, 25, 45, 113, 235, 58, 86, 89, 45, + 108, 106, 25, 42, 113, 235, 58, 86, 89, 42, 113, 106, 25, 45, 108, 235, + 58, 86, 89, 45, 113, 106, 25, 42, 108, 235, 58, 86, 89, 113, 170, 25, + 108, 186, 243, 149, 86, 89, 108, 170, 25, 113, 186, 243, 149, 86, 89, 45, + 170, 25, 42, 69, 243, 149, 86, 89, 42, 170, 25, 45, 69, 243, 149, 86, 89, + 106, 69, 25, 242, 241, 86, 89, 170, 51, 249, 147, 242, 241, 86, 89, 106, + 51, 249, 147, 242, 241, 86, 89, 170, 51, 249, 147, 219, 152, 86, 89, 106, + 51, 249, 147, 219, 152, 86, 89, 51, 242, 241, 86, 89, 51, 219, 152, 86, + 89, 113, 224, 109, 25, 45, 247, 138, 86, 89, 113, 51, 25, 45, 224, 108, + 86, 89, 51, 113, 25, 227, 109, 86, 89, 113, 224, 109, 25, 42, 247, 138, + 86, 89, 113, 51, 25, 42, 224, 108, 86, 89, 51, 113, 25, 235, 115, 86, 89, + 108, 224, 109, 25, 45, 247, 138, 86, 89, 108, 51, 25, 45, 224, 108, 86, + 89, 51, 108, 25, 227, 109, 86, 89, 108, 224, 109, 25, 42, 247, 138, 86, + 89, 108, 51, 25, 42, 224, 108, 86, 89, 51, 108, 25, 235, 115, 86, 89, 69, + 224, 109, 25, 45, 247, 138, 86, 89, 69, 51, 25, 45, 224, 108, 86, 89, 51, + 69, 25, 227, 109, 86, 89, 69, 224, 109, 25, 42, 247, 138, 86, 89, 69, 51, + 25, 42, 224, 108, 86, 89, 51, 69, 25, 235, 115, 86, 89, 113, 224, 109, + 25, 186, 247, 138, 86, 89, 113, 51, 25, 186, 224, 108, 86, 89, 51, 113, + 25, 242, 241, 86, 89, 108, 224, 109, 25, 186, 247, 138, 86, 89, 108, 51, + 25, 186, 224, 108, 86, 89, 51, 108, 25, 242, 241, 86, 89, 69, 224, 109, + 25, 186, 247, 138, 86, 89, 69, 51, 25, 186, 224, 108, 86, 89, 51, 69, 25, + 242, 241, 86, 89, 170, 254, 52, 113, 25, 227, 109, 86, 89, 170, 254, 52, + 113, 25, 235, 115, 86, 89, 170, 254, 52, 108, 25, 235, 115, 86, 89, 170, + 254, 52, 108, 25, 227, 109, 86, 89, 170, 249, 11, 220, 60, 45, 199, 234, + 237, 235, 115, 86, 89, 170, 249, 11, 220, 60, 42, 199, 234, 237, 227, + 109, 86, 89, 170, 249, 11, 250, 100, 86, 89, 170, 235, 115, 86, 89, 170, + 220, 63, 86, 89, 170, 227, 109, 86, 89, 170, 247, 132, 86, 89, 106, 235, + 115, 86, 89, 106, 220, 63, 86, 89, 106, 227, 109, 86, 89, 106, 247, 132, + 86, 89, 170, 42, 25, 106, 227, 109, 86, 89, 170, 108, 25, 106, 247, 132, + 86, 89, 106, 42, 25, 170, 227, 109, 86, 89, 106, 108, 25, 170, 247, 132, + 220, 60, 144, 252, 45, 234, 237, 131, 246, 232, 252, 45, 234, 237, 131, + 228, 90, 252, 45, 234, 237, 148, 246, 230, 252, 45, 234, 237, 144, 252, + 45, 234, 237, 245, 170, 246, 230, 252, 45, 234, 237, 148, 228, 88, 252, + 45, 234, 237, 225, 43, 246, 230, 252, 45, 245, 90, 252, 45, 42, 225, 43, + 246, 230, 252, 45, 42, 148, 228, 88, 252, 45, 42, 245, 170, 246, 230, + 252, 45, 42, 144, 252, 45, 42, 148, 246, 230, 252, 45, 42, 131, 228, 90, + 252, 45, 42, 131, 246, 232, 252, 45, 45, 144, 252, 45, 170, 225, 15, 234, + 18, 225, 15, 249, 152, 225, 15, 220, 60, 131, 246, 232, 252, 45, 45, 131, + 246, 232, 252, 45, 228, 94, 234, 237, 235, 115, 228, 94, 234, 237, 227, + 109, 228, 94, 220, 60, 235, 115, 228, 94, 220, 60, 42, 25, 234, 237, 42, + 25, 234, 237, 227, 109, 228, 94, 220, 60, 42, 25, 234, 237, 227, 109, + 228, 94, 220, 60, 42, 25, 220, 60, 45, 25, 234, 237, 235, 115, 228, 94, + 220, 60, 42, 25, 220, 60, 45, 25, 234, 237, 227, 109, 228, 94, 220, 60, + 227, 109, 228, 94, 220, 60, 45, 25, 234, 237, 235, 115, 228, 94, 220, 60, + 45, 25, 234, 237, 42, 25, 234, 237, 227, 109, 84, 223, 227, 67, 223, 227, + 67, 40, 2, 227, 55, 250, 122, 67, 40, 250, 141, 84, 3, 223, 227, 40, 2, + 186, 245, 187, 40, 2, 69, 245, 187, 40, 2, 230, 95, 250, 96, 245, 187, + 40, 2, 220, 60, 42, 199, 234, 237, 45, 245, 187, 40, 2, 220, 60, 45, 199, + 234, 237, 42, 245, 187, 40, 2, 249, 11, 250, 96, 245, 187, 84, 3, 223, + 227, 67, 3, 223, 227, 84, 227, 208, 67, 227, 208, 84, 69, 227, 208, 67, + 69, 227, 208, 84, 229, 232, 67, 229, 232, 84, 220, 62, 221, 90, 67, 220, + 62, 221, 90, 84, 220, 62, 3, 221, 90, 67, 220, 62, 3, 221, 90, 84, 227, + 106, 221, 90, 67, 227, 106, 221, 90, 84, 227, 106, 3, 221, 90, 67, 227, + 106, 3, 221, 90, 84, 227, 106, 229, 29, 67, 227, 106, 229, 29, 84, 247, + 131, 221, 90, 67, 247, 131, 221, 90, 84, 247, 131, 3, 221, 90, 67, 247, + 131, 3, 221, 90, 84, 235, 112, 221, 90, 67, 235, 112, 221, 90, 84, 235, + 112, 3, 221, 90, 67, 235, 112, 3, 221, 90, 84, 235, 112, 229, 29, 67, + 235, 112, 229, 29, 84, 249, 4, 67, 249, 4, 67, 249, 5, 250, 141, 84, 3, + 249, 4, 245, 175, 234, 234, 67, 250, 221, 247, 143, 250, 221, 250, 222, + 2, 69, 245, 187, 251, 239, 84, 250, 221, 250, 222, 2, 42, 144, 252, 53, + 250, 222, 2, 45, 144, 252, 53, 250, 222, 2, 234, 237, 144, 252, 53, 250, + 222, 2, 220, 60, 144, 252, 53, 250, 222, 2, 220, 60, 45, 228, 94, 252, + 53, 250, 222, 2, 254, 158, 251, 222, 220, 60, 42, 228, 94, 252, 53, 42, + 144, 84, 250, 221, 45, 144, 84, 250, 221, 237, 171, 251, 241, 237, 171, + 67, 250, 221, 220, 60, 144, 237, 171, 67, 250, 221, 234, 237, 144, 237, + 171, 67, 250, 221, 220, 60, 42, 228, 94, 250, 219, 254, 51, 220, 60, 45, + 228, 94, 250, 219, 254, 51, 234, 237, 45, 228, 94, 250, 219, 254, 51, + 234, 237, 42, 228, 94, 250, 219, 254, 51, 220, 60, 144, 250, 221, 234, + 237, 144, 250, 221, 84, 234, 237, 45, 221, 90, 84, 234, 237, 42, 221, 90, + 84, 220, 60, 42, 221, 90, 84, 220, 60, 45, 221, 90, 67, 251, 241, 40, 2, + 42, 144, 252, 53, 40, 2, 45, 144, 252, 53, 40, 2, 220, 60, 42, 249, 11, + 144, 252, 53, 40, 2, 234, 237, 45, 249, 11, 144, 252, 53, 67, 40, 2, 69, + 252, 63, 235, 43, 67, 220, 62, 221, 91, 2, 248, 145, 220, 62, 221, 91, 2, + 42, 144, 252, 53, 220, 62, 221, 91, 2, 45, 144, 252, 53, 235, 146, 250, + 221, 67, 40, 2, 220, 60, 42, 228, 93, 67, 40, 2, 234, 237, 42, 228, 93, + 67, 40, 2, 234, 237, 45, 228, 93, 67, 40, 2, 220, 60, 45, 228, 93, 67, + 250, 222, 2, 220, 60, 42, 228, 93, 67, 250, 222, 2, 234, 237, 42, 228, + 93, 67, 250, 222, 2, 234, 237, 45, 228, 93, 67, 250, 222, 2, 220, 60, 45, + 228, 93, 220, 60, 42, 221, 90, 220, 60, 45, 221, 90, 234, 237, 42, 221, + 90, 67, 234, 18, 223, 227, 84, 234, 18, 223, 227, 67, 234, 18, 3, 223, + 227, 84, 234, 18, 3, 223, 227, 234, 237, 45, 221, 90, 84, 223, 69, 2, + 227, 220, 250, 189, 220, 91, 224, 28, 250, 171, 84, 223, 156, 67, 223, + 156, 235, 56, 221, 220, 223, 68, 254, 10, 231, 201, 249, 47, 231, 201, + 250, 149, 230, 109, 84, 222, 71, 67, 222, 71, 252, 213, 252, 21, 252, + 213, 86, 2, 251, 44, 252, 213, 86, 2, 218, 151, 226, 149, 220, 92, 2, + 227, 243, 247, 117, 242, 187, 252, 98, 67, 224, 196, 229, 102, 84, 224, + 196, 229, 102, 225, 11, 210, 227, 59, 245, 148, 243, 154, 251, 241, 84, + 42, 229, 28, 237, 213, 84, 45, 229, 28, 237, 213, 67, 42, 229, 28, 237, + 213, 67, 108, 229, 28, 237, 213, 67, 45, 229, 28, 237, 213, 67, 113, 229, + 28, 237, 213, 224, 60, 25, 250, 99, 251, 120, 55, 227, 250, 55, 252, 69, + 55, 251, 164, 254, 115, 230, 96, 250, 100, 251, 32, 227, 149, 250, 101, + 117, 234, 243, 250, 101, 117, 237, 105, 223, 157, 25, 250, 104, 245, 241, + 100, 254, 238, 225, 13, 243, 193, 25, 224, 138, 229, 197, 100, 217, 241, + 218, 45, 221, 82, 35, 243, 151, 221, 82, 35, 235, 165, 221, 82, 35, 245, + 179, 221, 82, 35, 221, 221, 221, 82, 35, 218, 194, 221, 82, 35, 218, 240, + 221, 82, 35, 233, 107, 221, 82, 35, 247, 8, 218, 211, 117, 249, 30, 67, + 245, 94, 246, 3, 67, 224, 38, 246, 3, 84, 224, 38, 246, 3, 67, 223, 69, + 2, 227, 220, 245, 178, 228, 90, 233, 117, 235, 142, 228, 90, 233, 117, + 233, 249, 245, 217, 55, 247, 8, 234, 90, 55, 237, 31, 226, 124, 220, 45, + 232, 129, 229, 41, 254, 39, 222, 104, 244, 182, 251, 150, 235, 90, 219, + 80, 235, 65, 226, 102, 226, 163, 251, 140, 254, 68, 229, 66, 67, 251, 37, + 236, 102, 67, 251, 37, 228, 83, 67, 251, 37, 227, 65, 67, 251, 37, 252, + 62, 67, 251, 37, 236, 59, 67, 251, 37, 229, 207, 84, 251, 37, 236, 102, + 84, 251, 37, 228, 83, 84, 251, 37, 227, 65, 84, 251, 37, 252, 62, 84, + 251, 37, 236, 59, 84, 251, 37, 229, 207, 84, 223, 252, 223, 80, 67, 243, + 154, 223, 80, 67, 249, 5, 223, 80, 84, 250, 188, 223, 80, 67, 223, 252, + 223, 80, 84, 243, 154, 223, 80, 84, 249, 5, 223, 80, 67, 250, 188, 223, + 80, 242, 187, 223, 231, 228, 90, 231, 180, 246, 232, 231, 180, 252, 142, + 246, 232, 231, 177, 252, 142, 224, 76, 231, 177, 233, 59, 245, 157, 55, + 233, 59, 232, 205, 55, 233, 59, 225, 1, 55, 218, 217, 166, 250, 100, 247, + 5, 166, 250, 100, 220, 70, 227, 204, 100, 227, 204, 16, 35, 220, 197, + 229, 50, 227, 204, 16, 35, 220, 196, 229, 50, 227, 204, 16, 35, 220, 195, + 229, 50, 227, 204, 16, 35, 220, 194, 229, 50, 227, 204, 16, 35, 220, 193, + 229, 50, 227, 204, 16, 35, 220, 192, 229, 50, 227, 204, 16, 35, 220, 191, + 229, 50, 227, 204, 16, 35, 244, 180, 234, 50, 84, 220, 70, 227, 204, 100, + 227, 205, 229, 245, 100, 229, 222, 229, 245, 100, 229, 162, 229, 245, 55, + 218, 209, 100, 248, 254, 246, 2, 248, 254, 246, 1, 248, 254, 246, 0, 248, + 254, 245, 255, 248, 254, 245, 254, 248, 254, 245, 253, 67, 250, 222, 2, + 61, 227, 109, 67, 250, 222, 2, 124, 248, 143, 84, 250, 222, 2, 67, 61, + 227, 109, 84, 250, 222, 2, 124, 67, 248, 143, 233, 125, 35, 218, 45, 233, + 125, 35, 217, 240, 248, 237, 35, 244, 31, 218, 45, 248, 237, 35, 235, 85, + 217, 240, 248, 237, 35, 235, 85, 218, 45, 248, 237, 35, 244, 31, 217, + 240, 67, 245, 163, 84, 245, 163, 243, 193, 25, 229, 104, 254, 128, 250, + 98, 223, 24, 223, 164, 117, 254, 218, 226, 113, 254, 167, 245, 144, 244, + 189, 223, 164, 117, 243, 133, 253, 238, 100, 245, 153, 230, 80, 67, 223, + 156, 148, 235, 38, 250, 131, 227, 109, 148, 235, 38, 250, 131, 235, 115, + 218, 250, 55, 116, 219, 66, 55, 247, 135, 245, 217, 55, 247, 135, 234, + 90, 55, 237, 179, 245, 217, 25, 234, 90, 55, 234, 90, 25, 245, 217, 55, + 234, 90, 2, 214, 55, 234, 90, 2, 214, 25, 234, 90, 25, 245, 217, 55, 69, + 234, 90, 2, 214, 55, 186, 234, 90, 2, 214, 55, 234, 18, 67, 250, 221, + 234, 18, 84, 250, 221, 234, 18, 3, 67, 250, 221, 234, 62, 100, 248, 186, + 100, 220, 69, 229, 221, 100, 250, 178, 245, 86, 220, 42, 232, 124, 251, + 72, 230, 25, 237, 37, 219, 98, 251, 18, 84, 233, 118, 235, 53, 225, 34, + 225, 64, 228, 75, 225, 48, 224, 24, 252, 215, 252, 188, 204, 236, 154, + 67, 247, 122, 234, 86, 67, 247, 122, 236, 102, 84, 247, 122, 234, 86, 84, + 247, 122, 236, 102, 224, 29, 218, 189, 224, 31, 223, 69, 252, 125, 250, + 189, 227, 242, 84, 224, 28, 221, 222, 250, 190, 25, 227, 242, 215, 67, + 224, 196, 229, 102, 215, 84, 224, 196, 229, 102, 67, 249, 5, 237, 224, + 223, 227, 250, 95, 235, 149, 248, 206, 251, 137, 229, 104, 251, 138, 224, + 51, 243, 141, 2, 67, 250, 100, 34, 250, 95, 235, 149, 251, 65, 231, 205, + 246, 174, 254, 144, 230, 135, 42, 218, 230, 221, 106, 84, 220, 204, 42, + 218, 230, 221, 106, 67, 220, 204, 42, 218, 230, 221, 106, 84, 42, 235, + 150, 233, 248, 67, 42, 235, 150, 233, 248, 247, 120, 224, 46, 55, 106, + 67, 247, 131, 221, 90, 42, 250, 197, 246, 174, 204, 226, 149, 245, 247, + 249, 11, 237, 224, 67, 250, 222, 237, 224, 84, 223, 227, 84, 221, 63, + 227, 167, 42, 246, 173, 227, 167, 42, 246, 172, 106, 250, 222, 2, 214, + 25, 124, 188, 50, 84, 250, 101, 230, 139, 224, 218, 224, 207, 224, 174, + 250, 245, 251, 125, 243, 93, 224, 83, 244, 190, 218, 189, 242, 171, 244, + 190, 2, 243, 188, 234, 79, 16, 35, 235, 57, 233, 107, 220, 92, 230, 139, + 244, 24, 245, 117, 245, 164, 237, 224, 242, 252, 245, 209, 226, 160, 40, + 245, 116, 250, 122, 224, 63, 242, 66, 224, 65, 229, 158, 2, 252, 215, + 222, 62, 237, 118, 252, 204, 100, 243, 156, 244, 33, 100, 245, 91, 228, + 198, 250, 83, 230, 139, 84, 223, 227, 67, 245, 164, 2, 186, 233, 193, 84, + 223, 120, 220, 60, 252, 49, 226, 103, 84, 226, 103, 234, 237, 252, 49, + 226, 103, 67, 226, 103, 222, 72, 235, 10, 55, 222, 114, 247, 119, 254, + 187, 246, 170, 219, 93, 243, 189, 218, 167, 243, 189, 234, 237, 45, 229, + 181, 229, 181, 220, 60, 45, 229, 181, 67, 232, 59, 84, 232, 59, 251, 45, + 78, 106, 251, 45, 78, 233, 84, 218, 151, 106, 233, 84, 218, 151, 252, + 213, 218, 151, 106, 252, 213, 218, 151, 230, 80, 23, 250, 100, 106, 23, + 250, 100, 230, 119, 251, 85, 250, 100, 106, 230, 119, 251, 85, 250, 100, + 7, 250, 100, 225, 14, 67, 7, 250, 100, 230, 80, 7, 250, 100, 234, 88, + 250, 100, 223, 157, 117, 249, 140, 245, 116, 222, 83, 253, 251, 245, 116, + 252, 214, 253, 251, 106, 245, 116, 252, 214, 253, 251, 245, 116, 250, + 186, 253, 251, 84, 245, 116, 229, 30, 223, 156, 67, 245, 116, 229, 30, + 223, 156, 223, 125, 230, 80, 67, 223, 156, 34, 67, 223, 156, 230, 119, + 251, 85, 84, 223, 156, 84, 251, 85, 67, 223, 156, 230, 80, 84, 223, 156, + 106, 230, 80, 84, 223, 156, 229, 71, 223, 156, 225, 14, 67, 223, 156, + 106, 253, 251, 230, 119, 251, 85, 253, 251, 246, 235, 223, 236, 253, 251, + 246, 235, 229, 30, 84, 223, 156, 246, 235, 229, 30, 229, 71, 223, 156, + 224, 82, 229, 30, 84, 223, 156, 246, 235, 229, 30, 227, 206, 84, 223, + 156, 106, 246, 235, 229, 30, 227, 206, 84, 223, 156, 220, 222, 229, 30, + 84, 223, 156, 224, 78, 229, 30, 253, 251, 222, 83, 253, 251, 230, 119, + 251, 85, 222, 83, 253, 251, 106, 222, 83, 253, 251, 224, 82, 229, 149, + 84, 25, 67, 245, 147, 84, 245, 147, 67, 245, 147, 246, 235, 229, 149, + 230, 80, 84, 245, 147, 34, 230, 119, 251, 85, 246, 235, 229, 30, 223, + 156, 106, 222, 83, 229, 71, 253, 251, 224, 30, 221, 195, 221, 85, 224, + 30, 106, 251, 35, 224, 30, 223, 251, 106, 223, 251, 252, 214, 253, 251, + 246, 235, 222, 83, 228, 221, 253, 251, 106, 246, 235, 222, 83, 228, 221, + 253, 251, 225, 14, 67, 250, 221, 234, 237, 45, 247, 118, 67, 223, 227, + 220, 60, 45, 247, 118, 67, 223, 227, 234, 237, 45, 225, 14, 67, 223, 227, + 220, 60, 45, 225, 14, 67, 223, 227, 84, 249, 5, 233, 155, 67, 218, 151, + 106, 246, 95, 164, 100, 170, 69, 135, 234, 18, 69, 135, 106, 69, 135, + 106, 224, 109, 215, 250, 169, 228, 69, 164, 230, 98, 106, 224, 109, 250, + 169, 228, 69, 164, 230, 98, 106, 51, 215, 250, 169, 228, 69, 164, 230, + 98, 106, 51, 250, 169, 228, 69, 164, 230, 98, 250, 73, 223, 147, 229, + 241, 5, 230, 98, 106, 246, 95, 164, 230, 98, 106, 243, 154, 246, 95, 164, + 230, 98, 106, 84, 243, 153, 227, 59, 106, 84, 243, 154, 251, 241, 245, + 148, 243, 153, 227, 59, 245, 148, 243, 154, 251, 241, 234, 18, 42, 229, + 230, 230, 98, 234, 18, 45, 229, 230, 230, 98, 234, 18, 245, 154, 42, 229, + 230, 230, 98, 234, 18, 245, 154, 45, 229, 230, 230, 98, 234, 18, 235, + 112, 254, 120, 252, 18, 230, 98, 234, 18, 227, 106, 254, 120, 252, 18, + 230, 98, 106, 235, 112, 254, 120, 228, 69, 164, 230, 98, 106, 227, 106, + 254, 120, 228, 69, 164, 230, 98, 106, 235, 112, 254, 120, 252, 18, 230, + 98, 106, 227, 106, 254, 120, 252, 18, 230, 98, 170, 42, 221, 114, 224, + 236, 252, 18, 230, 98, 170, 45, 221, 114, 224, 236, 252, 18, 230, 98, + 234, 18, 42, 250, 79, 252, 18, 230, 98, 234, 18, 45, 250, 79, 252, 18, + 230, 98, 248, 217, 232, 136, 34, 20, 107, 248, 217, 232, 136, 34, 20, + 103, 248, 217, 232, 136, 34, 20, 160, 248, 217, 232, 136, 34, 20, 154, + 248, 217, 232, 136, 34, 20, 174, 248, 217, 232, 136, 34, 20, 182, 248, + 217, 232, 136, 34, 20, 191, 248, 217, 232, 136, 34, 20, 185, 248, 217, + 232, 136, 34, 20, 190, 248, 217, 232, 136, 34, 54, 222, 65, 248, 217, 34, + 33, 20, 107, 248, 217, 34, 33, 20, 103, 248, 217, 34, 33, 20, 160, 248, + 217, 34, 33, 20, 154, 248, 217, 34, 33, 20, 174, 248, 217, 34, 33, 20, + 182, 248, 217, 34, 33, 20, 191, 248, 217, 34, 33, 20, 185, 248, 217, 34, + 33, 20, 190, 248, 217, 34, 33, 54, 222, 65, 248, 217, 232, 136, 34, 33, + 20, 107, 248, 217, 232, 136, 34, 33, 20, 103, 248, 217, 232, 136, 34, 33, + 20, 160, 248, 217, 232, 136, 34, 33, 20, 154, 248, 217, 232, 136, 34, 33, + 20, 174, 248, 217, 232, 136, 34, 33, 20, 182, 248, 217, 232, 136, 34, 33, + 20, 191, 248, 217, 232, 136, 34, 33, 20, 185, 248, 217, 232, 136, 34, 33, + 20, 190, 248, 217, 232, 136, 34, 33, 54, 222, 65, 106, 218, 200, 90, 65, + 106, 224, 6, 247, 5, 65, 106, 90, 65, 106, 231, 187, 247, 5, 65, 247, + 124, 229, 32, 90, 65, 106, 227, 56, 90, 65, 221, 89, 90, 65, 106, 221, + 89, 90, 65, 249, 145, 221, 89, 90, 65, 106, 249, 145, 221, 89, 90, 65, + 84, 90, 65, 221, 228, 221, 118, 90, 254, 20, 221, 228, 252, 27, 90, 254, + 20, 84, 90, 254, 20, 106, 84, 250, 73, 247, 130, 25, 90, 65, 106, 84, + 250, 73, 220, 53, 25, 90, 65, 223, 224, 84, 90, 65, 106, 250, 157, 84, + 90, 65, 227, 105, 67, 90, 65, 235, 111, 67, 90, 65, 252, 232, 225, 14, + 67, 90, 65, 245, 96, 225, 14, 67, 90, 65, 106, 234, 237, 227, 104, 67, + 90, 65, 106, 220, 60, 227, 104, 67, 90, 65, 231, 182, 234, 237, 227, 104, + 67, 90, 65, 231, 182, 220, 60, 227, 104, 67, 90, 65, 34, 106, 67, 90, 65, + 218, 206, 90, 65, 252, 52, 224, 6, 247, 5, 65, 252, 52, 90, 65, 252, 52, + 231, 187, 247, 5, 65, 106, 252, 52, 224, 6, 247, 5, 65, 106, 252, 52, 90, + 65, 106, 252, 52, 231, 187, 247, 5, 65, 222, 85, 90, 65, 106, 222, 84, + 90, 65, 218, 225, 90, 65, 106, 218, 225, 90, 65, 230, 116, 90, 65, 148, + 248, 227, 254, 119, 67, 221, 91, 250, 141, 3, 67, 221, 90, 229, 160, 230, + 119, 223, 92, 230, 119, 223, 57, 42, 226, 234, 252, 226, 249, 67, 45, + 226, 234, 252, 226, 249, 67, 156, 2, 61, 237, 190, 227, 160, 224, 18, + 228, 243, 223, 92, 223, 58, 228, 243, 224, 17, 69, 252, 201, 2, 186, 92, + 171, 248, 187, 67, 249, 5, 2, 251, 83, 248, 145, 25, 2, 248, 145, 246, + 213, 117, 230, 114, 220, 52, 234, 237, 45, 250, 124, 2, 248, 145, 220, + 60, 42, 250, 124, 2, 248, 145, 42, 230, 82, 237, 57, 45, 230, 82, 237, + 57, 245, 90, 230, 82, 237, 57, 235, 146, 108, 222, 143, 235, 146, 113, + 222, 143, 42, 25, 45, 51, 220, 236, 42, 25, 45, 222, 143, 42, 233, 87, + 171, 45, 222, 143, 171, 42, 222, 143, 108, 222, 144, 2, 250, 222, 50, + 234, 235, 248, 192, 251, 213, 186, 227, 16, 67, 250, 156, 249, 4, 67, + 250, 156, 249, 5, 2, 127, 221, 202, 67, 250, 156, 249, 5, 2, 90, 221, + 202, 67, 40, 2, 127, 221, 202, 67, 40, 2, 90, 221, 202, 14, 42, 67, 40, + 115, 14, 45, 67, 40, 115, 14, 42, 254, 120, 115, 14, 45, 254, 120, 115, + 14, 42, 51, 254, 120, 115, 14, 45, 51, 254, 120, 115, 14, 42, 67, 221, + 114, 224, 236, 115, 14, 45, 67, 221, 114, 224, 236, 115, 14, 42, 245, + 154, 229, 229, 14, 45, 245, 154, 229, 229, 220, 53, 228, 92, 65, 247, + 130, 228, 92, 65, 254, 104, 244, 222, 250, 222, 65, 250, 199, 244, 222, + 250, 222, 65, 45, 76, 2, 34, 229, 43, 171, 127, 65, 171, 90, 65, 171, 42, + 45, 65, 171, 127, 51, 65, 171, 90, 51, 65, 171, 42, 45, 51, 65, 171, 127, + 76, 245, 97, 135, 171, 90, 76, 245, 97, 135, 171, 127, 51, 76, 245, 97, + 135, 171, 90, 51, 76, 245, 97, 135, 171, 90, 223, 223, 65, 43, 44, 252, + 47, 43, 44, 248, 142, 43, 44, 248, 14, 43, 44, 248, 141, 43, 44, 247, + 206, 43, 44, 248, 77, 43, 44, 248, 13, 43, 44, 248, 140, 43, 44, 247, + 174, 43, 44, 248, 45, 43, 44, 247, 237, 43, 44, 248, 108, 43, 44, 247, + 205, 43, 44, 248, 76, 43, 44, 248, 12, 43, 44, 248, 139, 43, 44, 247, + 158, 43, 44, 248, 29, 43, 44, 247, 221, 43, 44, 248, 92, 43, 44, 247, + 189, 43, 44, 248, 60, 43, 44, 247, 252, 43, 44, 248, 123, 43, 44, 247, + 173, 43, 44, 248, 44, 43, 44, 247, 236, 43, 44, 248, 107, 43, 44, 247, + 204, 43, 44, 248, 75, 43, 44, 248, 11, 43, 44, 248, 138, 43, 44, 247, + 150, 43, 44, 248, 21, 43, 44, 247, 213, 43, 44, 248, 84, 43, 44, 247, + 181, 43, 44, 248, 52, 43, 44, 247, 244, 43, 44, 248, 115, 43, 44, 247, + 165, 43, 44, 248, 36, 43, 44, 247, 228, 43, 44, 248, 99, 43, 44, 247, + 196, 43, 44, 248, 67, 43, 44, 248, 3, 43, 44, 248, 130, 43, 44, 247, 157, + 43, 44, 248, 28, 43, 44, 247, 220, 43, 44, 248, 91, 43, 44, 247, 188, 43, + 44, 248, 59, 43, 44, 247, 251, 43, 44, 248, 122, 43, 44, 247, 172, 43, + 44, 248, 43, 43, 44, 247, 235, 43, 44, 248, 106, 43, 44, 247, 203, 43, + 44, 248, 74, 43, 44, 248, 10, 43, 44, 248, 137, 43, 44, 247, 146, 43, 44, + 248, 17, 43, 44, 247, 209, 43, 44, 248, 80, 43, 44, 247, 177, 43, 44, + 248, 48, 43, 44, 247, 240, 43, 44, 248, 111, 43, 44, 247, 161, 43, 44, + 248, 32, 43, 44, 247, 224, 43, 44, 248, 95, 43, 44, 247, 192, 43, 44, + 248, 63, 43, 44, 247, 255, 43, 44, 248, 126, 43, 44, 247, 153, 43, 44, + 248, 24, 43, 44, 247, 216, 43, 44, 248, 87, 43, 44, 247, 184, 43, 44, + 248, 55, 43, 44, 247, 247, 43, 44, 248, 118, 43, 44, 247, 168, 43, 44, + 248, 39, 43, 44, 247, 231, 43, 44, 248, 102, 43, 44, 247, 199, 43, 44, + 248, 70, 43, 44, 248, 6, 43, 44, 248, 133, 43, 44, 247, 149, 43, 44, 248, + 20, 43, 44, 247, 212, 43, 44, 248, 83, 43, 44, 247, 180, 43, 44, 248, 51, + 43, 44, 247, 243, 43, 44, 248, 114, 43, 44, 247, 164, 43, 44, 248, 35, + 43, 44, 247, 227, 43, 44, 248, 98, 43, 44, 247, 195, 43, 44, 248, 66, 43, + 44, 248, 2, 43, 44, 248, 129, 43, 44, 247, 156, 43, 44, 248, 27, 43, 44, + 247, 219, 43, 44, 248, 90, 43, 44, 247, 187, 43, 44, 248, 58, 43, 44, + 247, 250, 43, 44, 248, 121, 43, 44, 247, 171, 43, 44, 248, 42, 43, 44, + 247, 234, 43, 44, 248, 105, 43, 44, 247, 202, 43, 44, 248, 73, 43, 44, + 248, 9, 43, 44, 248, 136, 43, 44, 247, 144, 43, 44, 248, 15, 43, 44, 247, + 207, 43, 44, 248, 78, 43, 44, 247, 175, 43, 44, 248, 46, 43, 44, 247, + 238, 43, 44, 248, 109, 43, 44, 247, 159, 43, 44, 248, 30, 43, 44, 247, + 222, 43, 44, 248, 93, 43, 44, 247, 190, 43, 44, 248, 61, 43, 44, 247, + 253, 43, 44, 248, 124, 43, 44, 247, 151, 43, 44, 248, 22, 43, 44, 247, + 214, 43, 44, 248, 85, 43, 44, 247, 182, 43, 44, 248, 53, 43, 44, 247, + 245, 43, 44, 248, 116, 43, 44, 247, 166, 43, 44, 248, 37, 43, 44, 247, + 229, 43, 44, 248, 100, 43, 44, 247, 197, 43, 44, 248, 68, 43, 44, 248, 4, + 43, 44, 248, 131, 43, 44, 247, 147, 43, 44, 248, 18, 43, 44, 247, 210, + 43, 44, 248, 81, 43, 44, 247, 178, 43, 44, 248, 49, 43, 44, 247, 241, 43, + 44, 248, 112, 43, 44, 247, 162, 43, 44, 248, 33, 43, 44, 247, 225, 43, + 44, 248, 96, 43, 44, 247, 193, 43, 44, 248, 64, 43, 44, 248, 0, 43, 44, + 248, 127, 43, 44, 247, 154, 43, 44, 248, 25, 43, 44, 247, 217, 43, 44, + 248, 88, 43, 44, 247, 185, 43, 44, 248, 56, 43, 44, 247, 248, 43, 44, + 248, 119, 43, 44, 247, 169, 43, 44, 248, 40, 43, 44, 247, 232, 43, 44, + 248, 103, 43, 44, 247, 200, 43, 44, 248, 71, 43, 44, 248, 7, 43, 44, 248, + 134, 43, 44, 247, 145, 43, 44, 248, 16, 43, 44, 247, 208, 43, 44, 248, + 79, 43, 44, 247, 176, 43, 44, 248, 47, 43, 44, 247, 239, 43, 44, 248, + 110, 43, 44, 247, 160, 43, 44, 248, 31, 43, 44, 247, 223, 43, 44, 248, + 94, 43, 44, 247, 191, 43, 44, 248, 62, 43, 44, 247, 254, 43, 44, 248, + 125, 43, 44, 247, 152, 43, 44, 248, 23, 43, 44, 247, 215, 43, 44, 248, + 86, 43, 44, 247, 183, 43, 44, 248, 54, 43, 44, 247, 246, 43, 44, 248, + 117, 43, 44, 247, 167, 43, 44, 248, 38, 43, 44, 247, 230, 43, 44, 248, + 101, 43, 44, 247, 198, 43, 44, 248, 69, 43, 44, 248, 5, 43, 44, 248, 132, + 43, 44, 247, 148, 43, 44, 248, 19, 43, 44, 247, 211, 43, 44, 248, 82, 43, + 44, 247, 179, 43, 44, 248, 50, 43, 44, 247, 242, 43, 44, 248, 113, 43, + 44, 247, 163, 43, 44, 248, 34, 43, 44, 247, 226, 43, 44, 248, 97, 43, 44, + 247, 194, 43, 44, 248, 65, 43, 44, 248, 1, 43, 44, 248, 128, 43, 44, 247, + 155, 43, 44, 248, 26, 43, 44, 247, 218, 43, 44, 248, 89, 43, 44, 247, + 186, 43, 44, 248, 57, 43, 44, 247, 249, 43, 44, 248, 120, 43, 44, 247, + 170, 43, 44, 248, 41, 43, 44, 247, 233, 43, 44, 248, 104, 43, 44, 247, + 201, 43, 44, 248, 72, 43, 44, 248, 8, 43, 44, 248, 135, 90, 220, 206, 76, + 2, 69, 92, 90, 220, 206, 76, 2, 51, 69, 92, 127, 51, 76, 2, 69, 92, 90, + 51, 76, 2, 69, 92, 42, 45, 51, 76, 2, 69, 92, 90, 220, 206, 76, 245, 97, + 135, 127, 51, 76, 245, 97, 135, 90, 51, 76, 245, 97, 135, 247, 130, 76, + 2, 186, 92, 220, 53, 76, 2, 186, 92, 220, 53, 221, 78, 65, 247, 130, 221, + 78, 65, 127, 51, 249, 147, 65, 90, 51, 249, 147, 65, 127, 221, 78, 249, + 147, 65, 90, 221, 78, 249, 147, 65, 90, 220, 206, 221, 78, 249, 147, 65, + 90, 76, 2, 247, 143, 223, 146, 220, 53, 76, 199, 135, 247, 130, 76, 199, + 135, 90, 76, 2, 222, 136, 2, 69, 92, 90, 76, 2, 222, 136, 2, 51, 69, 92, + 90, 220, 206, 76, 2, 222, 135, 90, 220, 206, 76, 2, 222, 136, 2, 69, 92, + 90, 220, 206, 76, 2, 222, 136, 2, 51, 69, 92, 127, 254, 22, 90, 254, 22, + 127, 51, 254, 22, 90, 51, 254, 22, 127, 76, 199, 84, 249, 4, 90, 76, 199, + 84, 249, 4, 127, 76, 245, 97, 252, 201, 199, 84, 249, 4, 90, 76, 245, 97, + 252, 201, 199, 84, 249, 4, 231, 187, 218, 217, 25, 224, 6, 247, 5, 65, + 231, 187, 247, 5, 25, 224, 6, 218, 217, 65, 231, 187, 218, 217, 76, 2, + 96, 231, 187, 247, 5, 76, 2, 96, 224, 6, 247, 5, 76, 2, 96, 224, 6, 218, + 217, 76, 2, 96, 231, 187, 218, 217, 76, 25, 231, 187, 247, 5, 65, 231, + 187, 247, 5, 76, 25, 224, 6, 247, 5, 65, 224, 6, 247, 5, 76, 25, 224, 6, + 218, 217, 65, 224, 6, 218, 217, 76, 25, 231, 187, 218, 217, 65, 227, 88, + 249, 11, 250, 95, 245, 247, 249, 10, 245, 247, 249, 11, 250, 95, 227, 88, + 249, 10, 224, 6, 247, 5, 76, 250, 95, 231, 187, 247, 5, 65, 231, 187, + 247, 5, 76, 250, 95, 224, 6, 247, 5, 65, 245, 247, 249, 11, 250, 95, 231, + 187, 247, 5, 65, 227, 88, 249, 11, 250, 95, 224, 6, 247, 5, 65, 231, 187, + 247, 5, 76, 250, 95, 231, 187, 218, 217, 65, 231, 187, 218, 217, 76, 250, + 95, 231, 187, 247, 5, 65, 218, 237, 76, 229, 28, 248, 208, 227, 109, 76, + 229, 28, 90, 222, 15, 250, 72, 220, 52, 76, 229, 28, 90, 222, 15, 250, + 72, 247, 129, 76, 229, 28, 247, 130, 222, 15, 250, 72, 235, 107, 76, 229, + 28, 247, 130, 222, 15, 250, 72, 227, 100, 227, 103, 254, 52, 250, 199, + 65, 235, 110, 254, 52, 254, 104, 65, 221, 120, 254, 52, 254, 104, 65, + 252, 29, 254, 52, 254, 104, 65, 221, 120, 254, 52, 250, 199, 76, 2, 233, + 154, 221, 120, 254, 52, 254, 104, 76, 2, 229, 43, 234, 237, 45, 225, 69, + 250, 199, 65, 234, 237, 42, 225, 69, 254, 104, 65, 254, 104, 250, 197, + 250, 222, 65, 250, 199, 250, 197, 250, 222, 65, 90, 76, 71, 224, 192, + 127, 65, 127, 76, 71, 224, 192, 90, 65, 224, 192, 90, 76, 71, 127, 65, + 90, 76, 2, 88, 56, 127, 76, 2, 88, 56, 90, 76, 221, 225, 218, 151, 42, + 45, 76, 221, 225, 3, 250, 221, 220, 53, 220, 206, 76, 245, 97, 3, 250, + 221, 42, 192, 108, 45, 192, 113, 243, 176, 42, 192, 113, 45, 192, 108, + 243, 176, 108, 192, 45, 113, 192, 42, 243, 176, 108, 192, 42, 113, 192, + 45, 243, 176, 42, 192, 108, 45, 192, 108, 243, 176, 108, 192, 45, 113, + 192, 45, 243, 176, 42, 192, 113, 45, 192, 113, 243, 176, 108, 192, 42, + 113, 192, 42, 243, 176, 127, 243, 177, 2, 192, 108, 199, 135, 90, 243, + 177, 2, 192, 108, 199, 135, 220, 53, 243, 177, 2, 192, 45, 199, 135, 247, + 130, 243, 177, 2, 192, 45, 199, 135, 127, 243, 177, 2, 192, 113, 199, + 135, 90, 243, 177, 2, 192, 113, 199, 135, 220, 53, 243, 177, 2, 192, 42, + 199, 135, 247, 130, 243, 177, 2, 192, 42, 199, 135, 127, 243, 177, 2, + 192, 108, 245, 97, 135, 90, 243, 177, 2, 192, 108, 245, 97, 135, 220, 53, + 243, 177, 2, 192, 45, 245, 97, 135, 247, 130, 243, 177, 2, 192, 45, 245, + 97, 135, 127, 243, 177, 2, 192, 113, 245, 97, 135, 90, 243, 177, 2, 192, + 113, 245, 97, 135, 220, 53, 243, 177, 2, 192, 42, 245, 97, 135, 247, 130, + 243, 177, 2, 192, 42, 245, 97, 135, 127, 243, 177, 2, 192, 108, 71, 127, + 243, 177, 2, 192, 247, 132, 220, 53, 243, 177, 2, 192, 42, 252, 106, 220, + 53, 243, 177, 2, 192, 227, 109, 90, 243, 177, 2, 192, 108, 71, 90, 243, + 177, 2, 192, 247, 132, 247, 130, 243, 177, 2, 192, 42, 252, 106, 247, + 130, 243, 177, 2, 192, 227, 109, 127, 243, 177, 2, 192, 108, 71, 90, 243, + 177, 2, 192, 220, 63, 127, 243, 177, 2, 192, 113, 71, 90, 243, 177, 2, + 192, 247, 132, 90, 243, 177, 2, 192, 108, 71, 127, 243, 177, 2, 192, 220, + 63, 90, 243, 177, 2, 192, 113, 71, 127, 243, 177, 2, 192, 247, 132, 127, + 243, 177, 2, 192, 108, 71, 171, 249, 146, 127, 243, 177, 2, 192, 113, + 252, 118, 171, 249, 146, 90, 243, 177, 2, 192, 108, 71, 171, 249, 146, + 90, 243, 177, 2, 192, 113, 252, 118, 171, 249, 146, 220, 53, 243, 177, 2, + 192, 42, 252, 106, 247, 130, 243, 177, 2, 192, 227, 109, 247, 130, 243, + 177, 2, 192, 42, 252, 106, 220, 53, 243, 177, 2, 192, 227, 109, 45, 51, + 76, 2, 227, 55, 243, 159, 246, 154, 5, 71, 90, 65, 221, 180, 230, 113, + 71, 90, 65, 127, 76, 71, 221, 180, 230, 112, 90, 76, 71, 221, 180, 230, + 112, 90, 76, 71, 254, 151, 114, 101, 235, 87, 71, 127, 65, 127, 76, 221, + 225, 235, 86, 244, 30, 71, 90, 65, 223, 93, 71, 90, 65, 127, 76, 221, + 225, 223, 92, 223, 58, 71, 127, 65, 42, 245, 177, 222, 135, 45, 245, 177, + 222, 135, 108, 245, 177, 222, 135, 113, 245, 177, 222, 135, 221, 78, 69, + 252, 201, 249, 67, 217, 158, 165, 223, 234, 217, 158, 165, 220, 198, 250, + 175, 42, 67, 250, 79, 115, 45, 67, 250, 79, 115, 42, 67, 229, 229, 45, + 67, 229, 229, 217, 158, 165, 42, 237, 237, 115, 217, 158, 165, 45, 237, + 237, 115, 217, 158, 165, 42, 252, 71, 115, 217, 158, 165, 45, 252, 71, + 115, 42, 40, 252, 18, 2, 220, 81, 45, 40, 252, 18, 2, 220, 81, 42, 40, + 252, 18, 2, 221, 203, 237, 224, 221, 120, 250, 123, 45, 40, 252, 18, 2, + 221, 203, 237, 224, 252, 29, 250, 123, 42, 40, 252, 18, 2, 221, 203, 237, + 224, 252, 29, 250, 123, 45, 40, 252, 18, 2, 221, 203, 237, 224, 221, 120, + 250, 123, 42, 254, 120, 252, 18, 2, 248, 145, 45, 254, 120, 252, 18, 2, + 248, 145, 42, 254, 52, 235, 87, 115, 45, 254, 52, 244, 30, 115, 51, 42, + 254, 52, 244, 30, 115, 51, 45, 254, 52, 235, 87, 115, 42, 84, 221, 114, + 224, 236, 115, 45, 84, 221, 114, 224, 236, 115, 247, 143, 245, 214, 69, + 217, 33, 235, 43, 234, 22, 254, 120, 230, 114, 235, 115, 45, 254, 120, + 219, 177, 2, 223, 227, 234, 22, 45, 254, 120, 2, 248, 145, 254, 120, 2, + 226, 235, 237, 190, 254, 248, 254, 119, 223, 245, 254, 120, 230, 114, + 235, 115, 223, 245, 254, 120, 230, 114, 220, 63, 215, 254, 119, 210, 254, + 119, 254, 120, 2, 220, 81, 210, 254, 120, 2, 220, 81, 230, 177, 254, 120, + 230, 114, 220, 63, 230, 177, 254, 120, 230, 114, 247, 132, 234, 22, 254, + 120, 2, 230, 119, 254, 32, 246, 187, 237, 224, 76, 229, 28, 108, 25, 227, + 109, 234, 22, 254, 120, 2, 230, 119, 254, 32, 246, 187, 237, 224, 76, + 229, 28, 108, 25, 235, 115, 234, 22, 254, 120, 2, 230, 119, 254, 32, 246, + 187, 237, 224, 76, 229, 28, 113, 25, 227, 109, 234, 22, 254, 120, 2, 230, + 119, 254, 32, 246, 187, 237, 224, 76, 229, 28, 113, 25, 235, 115, 234, + 22, 254, 120, 2, 230, 119, 254, 32, 246, 187, 237, 224, 76, 229, 28, 45, + 25, 220, 63, 234, 22, 254, 120, 2, 230, 119, 254, 32, 246, 187, 237, 224, + 76, 229, 28, 42, 25, 220, 63, 234, 22, 254, 120, 2, 230, 119, 254, 32, + 246, 187, 237, 224, 76, 229, 28, 45, 25, 247, 132, 234, 22, 254, 120, 2, + 230, 119, 254, 32, 246, 187, 237, 224, 76, 229, 28, 42, 25, 247, 132, + 210, 246, 199, 225, 45, 246, 199, 225, 46, 2, 230, 77, 246, 199, 225, 46, + 2, 3, 250, 222, 50, 246, 199, 225, 46, 2, 45, 76, 50, 246, 199, 225, 46, + 2, 42, 76, 50, 250, 222, 2, 186, 135, 34, 69, 135, 34, 229, 233, 34, 227, + 160, 224, 17, 34, 229, 160, 250, 222, 248, 192, 251, 213, 186, 252, 201, + 25, 221, 120, 144, 248, 192, 251, 213, 69, 135, 250, 222, 2, 223, 60, + 218, 151, 34, 254, 103, 248, 188, 55, 108, 76, 221, 225, 250, 221, 34, + 67, 251, 241, 34, 251, 241, 34, 235, 86, 34, 244, 29, 250, 222, 2, 3, + 250, 222, 199, 222, 23, 227, 109, 250, 222, 2, 124, 186, 223, 108, 199, + 222, 23, 227, 109, 204, 227, 88, 249, 11, 224, 55, 204, 245, 247, 249, + 11, 224, 55, 204, 253, 251, 204, 3, 250, 221, 204, 223, 227, 124, 237, + 56, 223, 225, 221, 91, 2, 61, 50, 221, 91, 2, 220, 81, 226, 235, 237, + 224, 221, 90, 221, 91, 2, 225, 52, 253, 245, 252, 28, 45, 221, 91, 71, + 42, 221, 90, 42, 221, 91, 252, 106, 69, 135, 69, 252, 201, 252, 106, 45, + 221, 90, 252, 23, 2, 42, 144, 252, 53, 252, 23, 2, 45, 144, 252, 53, 84, + 252, 22, 27, 2, 42, 144, 252, 53, 27, 2, 45, 144, 252, 53, 67, 242, 183, + 84, 242, 183, 42, 218, 198, 245, 214, 45, 218, 198, 245, 214, 42, 51, + 218, 198, 245, 214, 45, 51, 218, 198, 245, 214, 237, 218, 237, 207, 221, + 201, 104, 237, 207, 237, 208, 232, 138, 2, 69, 135, 247, 137, 233, 87, + 40, 2, 250, 135, 230, 81, 237, 216, 254, 13, 224, 166, 228, 229, 246, + 154, 5, 25, 224, 57, 229, 233, 246, 154, 5, 25, 224, 57, 229, 234, 2, + 221, 180, 50, 242, 59, 199, 25, 224, 57, 229, 233, 244, 75, 223, 155, + 222, 12, 247, 131, 221, 91, 2, 42, 144, 252, 53, 247, 131, 221, 91, 2, + 45, 144, 252, 53, 84, 249, 5, 2, 113, 65, 84, 234, 234, 67, 250, 222, 2, + 113, 65, 84, 250, 222, 2, 113, 65, 246, 141, 67, 223, 227, 246, 141, 84, + 223, 227, 246, 141, 67, 249, 4, 246, 141, 84, 249, 4, 246, 141, 67, 250, + 221, 246, 141, 84, 250, 221, 227, 15, 227, 160, 224, 18, 230, 112, 224, + 18, 2, 230, 77, 227, 160, 224, 18, 2, 186, 92, 252, 76, 224, 17, 252, 76, + 227, 160, 224, 17, 51, 229, 43, 221, 78, 229, 43, 235, 112, 250, 73, 254, + 120, 115, 227, 106, 250, 73, 254, 120, 115, 221, 171, 233, 152, 233, 33, + 34, 61, 230, 112, 233, 33, 34, 88, 230, 112, 233, 33, 34, 27, 230, 112, + 233, 33, 220, 75, 230, 113, 2, 248, 145, 233, 33, 220, 75, 230, 113, 2, + 229, 43, 233, 33, 40, 237, 175, 230, 112, 233, 33, 40, 220, 75, 230, 112, + 124, 235, 7, 25, 230, 112, 124, 235, 7, 156, 230, 112, 233, 33, 27, 230, + 112, 233, 131, 124, 223, 74, 223, 72, 2, 237, 186, 228, 92, 237, 187, + 230, 112, 245, 181, 229, 225, 237, 186, 237, 187, 2, 51, 92, 237, 187, + 253, 217, 2, 224, 55, 250, 218, 245, 87, 254, 104, 237, 184, 235, 44, + 237, 185, 2, 227, 207, 229, 212, 254, 29, 229, 24, 235, 44, 237, 185, 2, + 225, 69, 229, 212, 254, 29, 229, 24, 235, 44, 237, 185, 212, 237, 219, + 222, 23, 229, 24, 237, 187, 254, 29, 112, 229, 32, 230, 112, 228, 86, + 237, 187, 230, 112, 237, 187, 2, 127, 76, 2, 96, 237, 187, 2, 27, 55, + 237, 187, 2, 237, 174, 237, 187, 2, 220, 74, 237, 187, 2, 230, 77, 237, + 187, 2, 220, 81, 237, 57, 235, 146, 42, 221, 91, 230, 112, 217, 158, 165, + 226, 109, 250, 159, 217, 158, 165, 226, 109, 229, 69, 217, 158, 165, 226, + 109, 228, 226, 88, 5, 2, 3, 250, 222, 50, 88, 5, 2, 250, 217, 255, 1, 50, + 88, 5, 2, 221, 180, 50, 88, 5, 2, 61, 56, 88, 5, 2, 221, 180, 56, 88, 5, + 2, 223, 94, 103, 88, 5, 2, 84, 221, 90, 233, 155, 5, 2, 250, 169, 50, + 233, 155, 5, 2, 61, 56, 233, 155, 5, 2, 245, 247, 248, 143, 233, 155, 5, + 2, 227, 88, 248, 143, 88, 5, 237, 224, 42, 144, 250, 221, 88, 5, 237, + 224, 45, 144, 250, 221, 219, 164, 156, 250, 101, 228, 229, 233, 84, 5, 2, + 61, 50, 233, 84, 5, 2, 220, 81, 225, 66, 228, 230, 2, 252, 29, 250, 196, + 224, 41, 228, 229, 233, 84, 5, 237, 224, 42, 144, 250, 221, 233, 84, 5, + 237, 224, 45, 144, 250, 221, 34, 233, 84, 5, 2, 250, 217, 255, 0, 233, + 84, 5, 237, 224, 51, 250, 221, 34, 248, 188, 55, 88, 5, 237, 224, 221, + 90, 233, 155, 5, 237, 224, 221, 90, 233, 84, 5, 237, 224, 221, 90, 237, + 181, 228, 229, 227, 101, 237, 181, 228, 229, 217, 158, 165, 227, 191, + 250, 159, 254, 139, 156, 250, 128, 237, 175, 2, 248, 145, 220, 75, 2, + 233, 155, 55, 220, 75, 2, 230, 77, 237, 175, 2, 230, 77, 237, 175, 2, + 235, 7, 254, 126, 220, 75, 2, 235, 7, 230, 105, 220, 75, 71, 237, 174, + 237, 175, 71, 220, 74, 220, 75, 71, 252, 201, 71, 237, 174, 237, 175, 71, + 252, 201, 71, 220, 74, 220, 75, 252, 106, 25, 237, 56, 2, 220, 74, 237, + 175, 252, 106, 25, 237, 56, 2, 237, 174, 250, 197, 220, 75, 2, 225, 51, + 250, 197, 237, 175, 2, 225, 51, 51, 40, 237, 174, 51, 40, 220, 74, 250, + 197, 220, 75, 2, 225, 52, 25, 224, 41, 228, 229, 235, 7, 25, 2, 61, 50, + 235, 7, 156, 2, 61, 50, 51, 235, 7, 254, 126, 51, 235, 7, 230, 105, 124, + 237, 176, 235, 7, 254, 126, 124, 237, 176, 235, 7, 230, 105, 224, 48, + 235, 146, 230, 105, 224, 48, 235, 146, 254, 126, 235, 7, 156, 230, 75, + 235, 7, 254, 126, 235, 7, 25, 2, 233, 193, 223, 146, 235, 7, 156, 2, 233, + 193, 223, 146, 235, 7, 25, 2, 186, 249, 146, 235, 7, 156, 2, 186, 249, + 146, 235, 7, 25, 2, 51, 230, 77, 235, 7, 25, 2, 220, 81, 235, 7, 25, 2, + 51, 220, 81, 3, 219, 161, 2, 220, 81, 235, 7, 156, 2, 51, 230, 77, 235, + 7, 156, 2, 51, 220, 81, 217, 158, 165, 248, 154, 254, 99, 217, 158, 165, + 227, 234, 254, 99, 246, 154, 5, 2, 61, 56, 242, 59, 2, 61, 50, 221, 78, + 186, 252, 201, 2, 51, 69, 92, 221, 78, 186, 252, 201, 2, 221, 78, 69, 92, + 221, 180, 230, 113, 2, 61, 50, 221, 180, 230, 113, 2, 227, 88, 248, 143, + 224, 116, 233, 155, 224, 115, 250, 153, 2, 61, 50, 246, 154, 2, 253, 251, + 254, 151, 114, 199, 2, 250, 217, 255, 0, 254, 72, 114, 156, 114, 101, + 246, 154, 5, 71, 88, 55, 88, 5, 71, 246, 154, 55, 246, 154, 5, 71, 221, + 180, 230, 112, 51, 250, 176, 246, 155, 124, 250, 148, 246, 154, 224, 126, + 148, 250, 148, 246, 154, 224, 126, 246, 154, 5, 2, 124, 188, 71, 25, 124, + 188, 56, 246, 150, 2, 245, 116, 188, 50, 235, 87, 2, 250, 222, 237, 190, + 244, 30, 2, 250, 222, 237, 190, 235, 87, 2, 228, 82, 164, 50, 244, 30, 2, + 228, 82, 164, 50, 235, 87, 156, 224, 57, 114, 101, 244, 30, 156, 224, 57, + 114, 101, 235, 87, 156, 224, 57, 114, 199, 2, 61, 237, 190, 244, 30, 156, + 224, 57, 114, 199, 2, 61, 237, 190, 235, 87, 156, 224, 57, 114, 199, 2, + 61, 50, 244, 30, 156, 224, 57, 114, 199, 2, 61, 50, 235, 87, 156, 224, + 57, 114, 199, 2, 61, 71, 227, 109, 244, 30, 156, 224, 57, 114, 199, 2, + 61, 71, 235, 115, 235, 87, 156, 254, 73, 244, 30, 156, 254, 73, 235, 87, + 25, 224, 107, 212, 114, 101, 244, 30, 25, 224, 107, 212, 114, 101, 235, + 87, 25, 212, 254, 73, 244, 30, 25, 212, 254, 73, 235, 87, 71, 247, 136, + 114, 71, 244, 29, 244, 30, 71, 247, 136, 114, 71, 235, 86, 235, 87, 71, + 224, 116, 156, 246, 155, 244, 30, 71, 224, 116, 156, 246, 155, 235, 87, + 71, 224, 116, 71, 244, 29, 244, 30, 71, 224, 116, 71, 235, 86, 235, 87, + 71, 244, 30, 71, 247, 136, 246, 155, 244, 30, 71, 235, 87, 71, 247, 136, + 246, 155, 235, 87, 71, 224, 57, 114, 71, 244, 30, 71, 224, 57, 246, 155, + 244, 30, 71, 224, 57, 114, 71, 235, 87, 71, 224, 57, 246, 155, 224, 57, + 114, 199, 156, 235, 86, 224, 57, 114, 199, 156, 244, 29, 224, 57, 114, + 199, 156, 235, 87, 2, 61, 237, 190, 224, 57, 114, 199, 156, 244, 30, 2, + 61, 237, 190, 247, 136, 114, 199, 156, 235, 86, 247, 136, 114, 199, 156, + 244, 29, 247, 136, 224, 57, 114, 199, 156, 235, 86, 247, 136, 224, 57, + 114, 199, 156, 244, 29, 224, 116, 156, 235, 86, 224, 116, 156, 244, 29, + 224, 116, 71, 235, 87, 71, 246, 154, 55, 224, 116, 71, 244, 30, 71, 246, + 154, 55, 51, 232, 127, 235, 86, 51, 232, 127, 244, 29, 51, 232, 127, 235, + 87, 2, 220, 81, 244, 30, 230, 75, 235, 86, 244, 30, 252, 106, 235, 86, + 235, 87, 250, 197, 251, 213, 250, 74, 244, 30, 250, 197, 251, 213, 250, + 74, 235, 87, 250, 197, 251, 213, 250, 75, 71, 224, 57, 246, 155, 244, 30, + 250, 197, 251, 213, 250, 75, 71, 224, 57, 246, 155, 224, 42, 222, 27, + 235, 145, 222, 27, 224, 42, 222, 28, 156, 114, 101, 235, 145, 222, 28, + 156, 114, 101, 246, 154, 5, 2, 251, 236, 50, 228, 245, 71, 224, 107, 246, + 154, 55, 223, 85, 71, 224, 107, 246, 154, 55, 228, 245, 71, 224, 107, + 212, 114, 101, 223, 85, 71, 224, 107, 212, 114, 101, 228, 245, 71, 246, + 154, 55, 223, 85, 71, 246, 154, 55, 228, 245, 71, 212, 114, 101, 223, 85, + 71, 212, 114, 101, 228, 245, 71, 254, 151, 114, 101, 223, 85, 71, 254, + 151, 114, 101, 228, 245, 71, 212, 254, 151, 114, 101, 223, 85, 71, 212, + 254, 151, 114, 101, 51, 228, 244, 51, 223, 84, 223, 93, 2, 248, 145, 223, + 58, 2, 248, 145, 223, 93, 2, 88, 5, 56, 223, 58, 2, 88, 5, 56, 223, 93, + 2, 233, 84, 5, 56, 223, 58, 2, 233, 84, 5, 56, 223, 93, 117, 156, 114, + 199, 2, 61, 50, 223, 58, 117, 156, 114, 199, 2, 61, 50, 223, 93, 117, 71, + 246, 154, 55, 223, 58, 117, 71, 246, 154, 55, 223, 93, 117, 71, 221, 180, + 230, 112, 223, 58, 117, 71, 221, 180, 230, 112, 223, 93, 117, 71, 254, + 151, 114, 101, 223, 58, 117, 71, 254, 151, 114, 101, 223, 93, 117, 71, + 212, 114, 101, 223, 58, 117, 71, 212, 114, 101, 40, 42, 230, 119, 86, + 230, 112, 40, 45, 230, 119, 86, 230, 112, 250, 197, 223, 92, 250, 197, + 223, 57, 250, 197, 223, 93, 156, 114, 101, 250, 197, 223, 58, 156, 114, + 101, 223, 93, 71, 223, 57, 223, 58, 71, 223, 92, 223, 93, 71, 223, 92, + 223, 58, 71, 223, 57, 223, 58, 252, 106, 223, 92, 223, 58, 252, 106, 25, + 237, 56, 251, 213, 249, 147, 2, 223, 92, 246, 213, 117, 230, 114, 247, + 129, 229, 63, 2, 222, 81, 221, 119, 221, 102, 237, 174, 245, 125, 231, + 196, 224, 192, 42, 222, 143, 224, 192, 113, 222, 143, 224, 192, 108, 222, + 143, 229, 161, 2, 198, 69, 252, 201, 221, 78, 45, 220, 236, 51, 69, 252, + 201, 42, 220, 236, 69, 252, 201, 51, 42, 220, 236, 51, 69, 252, 201, 51, + 42, 220, 236, 171, 249, 147, 245, 97, 42, 233, 255, 117, 51, 219, 152, + 224, 192, 113, 222, 144, 2, 230, 77, 224, 192, 108, 222, 144, 2, 220, 81, + 224, 192, 108, 222, 144, 71, 224, 192, 113, 222, 143, 51, 113, 222, 143, + 51, 108, 222, 143, 51, 214, 212, 55, 210, 51, 214, 212, 55, 248, 160, + 212, 248, 194, 2, 210, 232, 137, 224, 55, 69, 235, 44, 2, 250, 222, 50, + 69, 235, 44, 2, 250, 222, 56, 113, 222, 144, 2, 250, 222, 56, 229, 234, + 2, 186, 92, 229, 234, 2, 221, 180, 230, 112, 221, 78, 69, 252, 201, 252, + 73, 227, 192, 221, 78, 69, 252, 201, 2, 186, 92, 221, 78, 250, 176, 230, + 112, 221, 78, 232, 127, 235, 86, 221, 78, 232, 127, 244, 29, 247, 136, + 224, 57, 235, 87, 156, 114, 101, 247, 136, 224, 57, 244, 30, 156, 114, + 101, 221, 78, 224, 18, 252, 73, 227, 192, 235, 146, 221, 78, 69, 252, + 201, 230, 112, 51, 224, 18, 230, 112, 67, 69, 135, 233, 33, 67, 69, 135, + 231, 187, 247, 5, 67, 65, 231, 187, 218, 217, 67, 65, 224, 6, 247, 5, 67, + 65, 224, 6, 218, 217, 67, 65, 42, 45, 67, 65, 127, 84, 65, 220, 53, 84, + 65, 247, 130, 84, 65, 231, 187, 247, 5, 84, 65, 231, 187, 218, 217, 84, + 65, 224, 6, 247, 5, 84, 65, 224, 6, 218, 217, 84, 65, 42, 45, 84, 65, + 108, 113, 84, 65, 90, 76, 2, 221, 170, 247, 129, 90, 76, 2, 221, 170, + 220, 52, 127, 76, 2, 221, 170, 247, 129, 127, 76, 2, 221, 170, 220, 52, + 40, 2, 221, 120, 144, 252, 53, 40, 2, 252, 29, 144, 252, 53, 40, 2, 220, + 60, 45, 249, 11, 144, 252, 53, 40, 2, 234, 237, 42, 249, 11, 144, 252, + 53, 249, 5, 2, 42, 144, 252, 53, 249, 5, 2, 45, 144, 252, 53, 249, 5, 2, + 221, 120, 144, 252, 53, 249, 5, 2, 252, 29, 144, 252, 53, 247, 143, 223, + 227, 84, 235, 146, 223, 227, 67, 235, 146, 223, 227, 84, 219, 100, 3, + 223, 227, 67, 219, 100, 3, 223, 227, 84, 229, 175, 67, 229, 175, 67, 243, + 124, 84, 243, 124, 186, 84, 243, 124, 84, 235, 146, 250, 221, 84, 234, + 18, 249, 4, 67, 234, 18, 249, 4, 84, 234, 18, 234, 234, 67, 234, 18, 234, + 234, 84, 3, 249, 4, 84, 3, 234, 234, 67, 3, 234, 234, 84, 186, 246, 209, + 67, 186, 246, 209, 84, 69, 246, 209, 67, 69, 246, 209, 42, 76, 2, 3, 250, + 221, 148, 127, 254, 19, 42, 76, 2, 34, 229, 43, 171, 127, 223, 223, 65, + 127, 220, 206, 76, 2, 69, 92, 127, 220, 206, 76, 2, 51, 69, 92, 127, 220, + 206, 76, 245, 97, 135, 127, 220, 206, 221, 78, 249, 147, 65, 127, 76, 2, + 247, 143, 223, 146, 127, 76, 2, 222, 136, 2, 69, 92, 127, 76, 2, 222, + 136, 2, 51, 69, 92, 127, 220, 206, 76, 2, 222, 135, 127, 220, 206, 76, 2, + 222, 136, 2, 69, 92, 127, 220, 206, 76, 2, 222, 136, 2, 51, 69, 92, 127, + 76, 221, 225, 218, 151, 218, 237, 76, 229, 28, 248, 208, 235, 115, 246, + 154, 5, 71, 127, 65, 227, 160, 221, 180, 230, 113, 71, 127, 65, 127, 76, + 71, 227, 160, 254, 151, 114, 101, 90, 76, 221, 225, 244, 29, 90, 76, 221, + 225, 223, 57, 127, 228, 92, 65, 90, 228, 92, 65, 227, 160, 221, 180, 230, + 113, 71, 90, 65, 90, 76, 71, 227, 160, 254, 151, 114, 101, 221, 180, 230, + 113, 71, 127, 65, 127, 76, 71, 254, 151, 114, 101, 127, 76, 71, 227, 160, + 221, 180, 230, 112, 90, 76, 71, 227, 160, 221, 180, 230, 112, 67, 234, + 18, 223, 156, 84, 3, 223, 156, 67, 3, 223, 156, 84, 227, 106, 229, 175, + 67, 227, 106, 229, 175, 106, 235, 146, 250, 221, 106, 230, 78, 2, 230, + 78, 237, 190, 106, 250, 222, 2, 250, 222, 237, 190, 106, 250, 221, 106, + 34, 226, 149, 125, 6, 1, 253, 205, 125, 6, 1, 251, 244, 125, 6, 1, 219, + 163, 125, 6, 1, 244, 76, 125, 6, 1, 248, 162, 125, 6, 1, 218, 1, 125, 6, + 1, 217, 66, 125, 6, 1, 247, 71, 125, 6, 1, 217, 89, 125, 6, 1, 237, 130, + 125, 6, 1, 66, 237, 130, 125, 6, 1, 72, 125, 6, 1, 248, 180, 125, 6, 1, + 236, 238, 125, 6, 1, 235, 19, 125, 6, 1, 233, 37, 125, 6, 1, 232, 208, + 125, 6, 1, 230, 129, 125, 6, 1, 229, 26, 125, 6, 1, 227, 87, 125, 6, 1, + 224, 47, 125, 6, 1, 220, 226, 125, 6, 1, 220, 98, 125, 6, 1, 245, 99, + 125, 6, 1, 243, 130, 125, 6, 1, 230, 87, 125, 6, 1, 229, 198, 125, 6, 1, + 224, 173, 125, 6, 1, 221, 39, 125, 6, 1, 251, 3, 125, 6, 1, 225, 25, 125, + 6, 1, 218, 7, 125, 6, 1, 218, 9, 125, 6, 1, 218, 34, 125, 6, 1, 223, 243, + 155, 125, 6, 1, 217, 200, 125, 6, 1, 3, 217, 178, 125, 6, 1, 3, 217, 179, + 2, 222, 135, 125, 6, 1, 217, 231, 125, 6, 1, 237, 161, 3, 217, 178, 125, + 6, 1, 252, 76, 217, 178, 125, 6, 1, 237, 161, 252, 76, 217, 178, 125, 6, + 1, 245, 171, 125, 6, 1, 237, 128, 125, 6, 1, 224, 172, 125, 6, 1, 221, + 70, 60, 125, 6, 1, 235, 137, 233, 37, 125, 3, 1, 253, 205, 125, 3, 1, + 251, 244, 125, 3, 1, 219, 163, 125, 3, 1, 244, 76, 125, 3, 1, 248, 162, + 125, 3, 1, 218, 1, 125, 3, 1, 217, 66, 125, 3, 1, 247, 71, 125, 3, 1, + 217, 89, 125, 3, 1, 237, 130, 125, 3, 1, 66, 237, 130, 125, 3, 1, 72, + 125, 3, 1, 248, 180, 125, 3, 1, 236, 238, 125, 3, 1, 235, 19, 125, 3, 1, + 233, 37, 125, 3, 1, 232, 208, 125, 3, 1, 230, 129, 125, 3, 1, 229, 26, + 125, 3, 1, 227, 87, 125, 3, 1, 224, 47, 125, 3, 1, 220, 226, 125, 3, 1, + 220, 98, 125, 3, 1, 245, 99, 125, 3, 1, 243, 130, 125, 3, 1, 230, 87, + 125, 3, 1, 229, 198, 125, 3, 1, 224, 173, 125, 3, 1, 221, 39, 125, 3, 1, + 251, 3, 125, 3, 1, 225, 25, 125, 3, 1, 218, 7, 125, 3, 1, 218, 9, 125, 3, + 1, 218, 34, 125, 3, 1, 223, 243, 155, 125, 3, 1, 217, 200, 125, 3, 1, 3, + 217, 178, 125, 3, 1, 3, 217, 179, 2, 222, 135, 125, 3, 1, 217, 231, 125, + 3, 1, 237, 161, 3, 217, 178, 125, 3, 1, 252, 76, 217, 178, 125, 3, 1, + 237, 161, 252, 76, 217, 178, 125, 3, 1, 245, 171, 125, 3, 1, 237, 128, + 125, 3, 1, 224, 172, 125, 3, 1, 221, 70, 60, 125, 3, 1, 235, 137, 233, + 37, 7, 6, 1, 235, 202, 2, 51, 135, 7, 3, 1, 235, 202, 2, 51, 135, 7, 6, + 1, 235, 202, 2, 233, 193, 221, 179, 7, 6, 1, 230, 60, 2, 92, 7, 6, 1, + 228, 39, 2, 222, 135, 7, 3, 1, 112, 2, 92, 7, 3, 1, 222, 202, 2, 249, 11, + 92, 7, 6, 1, 243, 226, 2, 249, 48, 7, 3, 1, 243, 226, 2, 249, 48, 7, 6, + 1, 237, 18, 2, 249, 48, 7, 3, 1, 237, 18, 2, 249, 48, 7, 6, 1, 217, 158, + 2, 249, 48, 7, 3, 1, 217, 158, 2, 249, 48, 7, 6, 1, 254, 146, 7, 6, 1, + 234, 187, 2, 96, 7, 6, 1, 215, 60, 7, 6, 1, 215, 254, 146, 7, 3, 1, 220, + 11, 2, 45, 96, 7, 6, 1, 219, 41, 2, 96, 7, 3, 1, 219, 41, 2, 96, 7, 3, 1, + 220, 11, 2, 250, 80, 7, 6, 1, 144, 243, 225, 7, 3, 1, 144, 243, 225, 7, + 3, 1, 222, 133, 229, 129, 7, 3, 1, 178, 2, 231, 183, 7, 3, 1, 215, 228, + 39, 2, 222, 135, 7, 3, 1, 142, 2, 109, 227, 94, 237, 190, 7, 1, 3, 6, + 215, 73, 7, 223, 94, 3, 1, 237, 126, 58, 1, 6, 216, 216, 7, 6, 1, 226, + 235, 2, 223, 33, 222, 135, 7, 6, 1, 217, 158, 2, 223, 33, 222, 135, 75, + 6, 1, 254, 163, 75, 3, 1, 254, 163, 75, 6, 1, 219, 92, 75, 3, 1, 219, 92, + 75, 6, 1, 244, 231, 75, 3, 1, 244, 231, 75, 6, 1, 249, 179, 75, 3, 1, + 249, 179, 75, 6, 1, 246, 236, 75, 3, 1, 246, 236, 75, 6, 1, 224, 11, 75, + 3, 1, 224, 11, 75, 6, 1, 217, 99, 75, 3, 1, 217, 99, 75, 6, 1, 243, 171, + 75, 3, 1, 243, 171, 75, 6, 1, 222, 4, 75, 3, 1, 222, 4, 75, 6, 1, 242, + 70, 75, 3, 1, 242, 70, 75, 6, 1, 236, 226, 75, 3, 1, 236, 226, 75, 6, 1, + 235, 135, 75, 3, 1, 235, 135, 75, 6, 1, 233, 196, 75, 3, 1, 233, 196, 75, + 6, 1, 232, 62, 75, 3, 1, 232, 62, 75, 6, 1, 236, 11, 75, 3, 1, 236, 11, + 75, 6, 1, 74, 75, 3, 1, 74, 75, 6, 1, 229, 108, 75, 3, 1, 229, 108, 75, + 6, 1, 227, 75, 75, 3, 1, 227, 75, 75, 6, 1, 224, 118, 75, 3, 1, 224, 118, + 75, 6, 1, 222, 105, 75, 3, 1, 222, 105, 75, 6, 1, 220, 123, 75, 3, 1, + 220, 123, 75, 6, 1, 245, 203, 75, 3, 1, 245, 203, 75, 6, 1, 236, 130, 75, + 3, 1, 236, 130, 75, 6, 1, 228, 212, 75, 3, 1, 228, 212, 75, 6, 1, 230, + 123, 75, 3, 1, 230, 123, 75, 6, 1, 249, 9, 254, 168, 75, 3, 1, 249, 9, + 254, 168, 75, 6, 1, 48, 75, 254, 191, 75, 3, 1, 48, 75, 254, 191, 75, 6, + 1, 250, 93, 246, 236, 75, 3, 1, 250, 93, 246, 236, 75, 6, 1, 249, 9, 236, + 226, 75, 3, 1, 249, 9, 236, 226, 75, 6, 1, 249, 9, 232, 62, 75, 3, 1, + 249, 9, 232, 62, 75, 6, 1, 250, 93, 232, 62, 75, 3, 1, 250, 93, 232, 62, + 75, 6, 1, 48, 75, 230, 123, 75, 3, 1, 48, 75, 230, 123, 75, 6, 1, 226, + 142, 75, 3, 1, 226, 142, 75, 6, 1, 250, 98, 224, 238, 75, 3, 1, 250, 98, + 224, 238, 75, 6, 1, 48, 75, 224, 238, 75, 3, 1, 48, 75, 224, 238, 75, 6, + 1, 48, 75, 246, 133, 75, 3, 1, 48, 75, 246, 133, 75, 6, 1, 254, 178, 236, + 135, 75, 3, 1, 254, 178, 236, 135, 75, 6, 1, 249, 9, 242, 242, 75, 3, 1, + 249, 9, 242, 242, 75, 6, 1, 48, 75, 242, 242, 75, 3, 1, 48, 75, 242, 242, + 75, 6, 1, 48, 75, 155, 75, 3, 1, 48, 75, 155, 75, 6, 1, 235, 201, 155, + 75, 3, 1, 235, 201, 155, 75, 6, 1, 48, 75, 243, 145, 75, 3, 1, 48, 75, + 243, 145, 75, 6, 1, 48, 75, 243, 173, 75, 3, 1, 48, 75, 243, 173, 75, 6, + 1, 48, 75, 244, 226, 75, 3, 1, 48, 75, 244, 226, 75, 6, 1, 48, 75, 248, + 183, 75, 3, 1, 48, 75, 248, 183, 75, 6, 1, 48, 75, 224, 211, 75, 3, 1, + 48, 75, 224, 211, 75, 6, 1, 48, 231, 115, 224, 211, 75, 3, 1, 48, 231, + 115, 224, 211, 75, 6, 1, 48, 231, 115, 232, 92, 75, 3, 1, 48, 231, 115, + 232, 92, 75, 6, 1, 48, 231, 115, 231, 67, 75, 3, 1, 48, 231, 115, 231, + 67, 75, 6, 1, 48, 231, 115, 218, 238, 75, 3, 1, 48, 231, 115, 218, 238, + 75, 16, 236, 243, 75, 16, 233, 197, 227, 75, 75, 16, 229, 109, 227, 75, + 75, 16, 223, 152, 75, 16, 222, 106, 227, 75, 75, 16, 236, 131, 227, 75, + 75, 16, 224, 212, 224, 118, 75, 6, 1, 250, 93, 224, 238, 75, 3, 1, 250, + 93, 224, 238, 75, 6, 1, 250, 93, 244, 226, 75, 3, 1, 250, 93, 244, 226, + 75, 36, 232, 63, 50, 75, 36, 223, 238, 254, 2, 75, 36, 223, 238, 235, 92, + 75, 48, 231, 115, 245, 90, 223, 136, 75, 48, 231, 115, 248, 210, 228, 82, + 78, 75, 48, 231, 115, 237, 210, 228, 82, 78, 75, 48, 231, 115, 219, 154, + 248, 191, 75, 245, 108, 131, 243, 194, 75, 245, 90, 223, 136, 75, 233, + 113, 248, 191, 95, 3, 1, 254, 131, 95, 3, 1, 252, 209, 95, 3, 1, 244, + 230, 95, 3, 1, 248, 153, 95, 3, 1, 246, 197, 95, 3, 1, 219, 85, 95, 3, 1, + 217, 87, 95, 3, 1, 222, 119, 95, 3, 1, 237, 223, 95, 3, 1, 236, 233, 95, + 3, 1, 235, 143, 95, 3, 1, 234, 86, 95, 3, 1, 232, 211, 95, 3, 1, 230, + 138, 95, 3, 1, 229, 243, 95, 3, 1, 217, 76, 95, 3, 1, 227, 249, 95, 3, 1, + 226, 140, 95, 3, 1, 222, 112, 95, 3, 1, 220, 87, 95, 3, 1, 229, 134, 95, + 3, 1, 236, 138, 95, 3, 1, 244, 119, 95, 3, 1, 228, 140, 95, 3, 1, 224, + 209, 95, 3, 1, 251, 22, 95, 3, 1, 251, 154, 95, 3, 1, 237, 91, 95, 3, 1, + 250, 224, 95, 3, 1, 251, 56, 95, 3, 1, 218, 136, 95, 3, 1, 237, 101, 95, + 3, 1, 243, 208, 95, 3, 1, 243, 162, 95, 3, 1, 243, 108, 95, 3, 1, 218, + 227, 95, 3, 1, 243, 182, 95, 3, 1, 243, 2, 221, 197, 1, 184, 221, 197, 1, + 218, 72, 221, 197, 1, 218, 71, 221, 197, 1, 218, 63, 221, 197, 1, 218, + 61, 221, 197, 1, 252, 108, 255, 2, 218, 57, 221, 197, 1, 218, 57, 221, + 197, 1, 218, 69, 221, 197, 1, 218, 66, 221, 197, 1, 218, 68, 221, 197, 1, + 218, 67, 221, 197, 1, 217, 254, 221, 197, 1, 218, 64, 221, 197, 1, 218, + 55, 221, 197, 1, 220, 255, 218, 55, 221, 197, 1, 218, 52, 221, 197, 1, + 218, 59, 221, 197, 1, 252, 108, 255, 2, 218, 59, 221, 197, 1, 220, 255, + 218, 59, 221, 197, 1, 218, 58, 221, 197, 1, 218, 76, 221, 197, 1, 218, + 53, 221, 197, 1, 220, 255, 218, 53, 221, 197, 1, 218, 43, 221, 197, 1, + 220, 255, 218, 43, 221, 197, 1, 217, 250, 221, 197, 1, 218, 27, 221, 197, + 1, 254, 200, 218, 27, 221, 197, 1, 220, 255, 218, 27, 221, 197, 1, 218, + 51, 221, 197, 1, 218, 50, 221, 197, 1, 218, 47, 221, 197, 1, 220, 255, + 218, 60, 221, 197, 1, 220, 255, 218, 45, 221, 197, 1, 218, 44, 221, 197, + 1, 217, 200, 221, 197, 1, 218, 41, 221, 197, 1, 218, 40, 221, 197, 1, + 218, 62, 221, 197, 1, 220, 255, 218, 62, 221, 197, 1, 253, 208, 218, 62, + 221, 197, 1, 218, 39, 221, 197, 1, 218, 37, 221, 197, 1, 218, 38, 221, + 197, 1, 218, 36, 221, 197, 1, 218, 35, 221, 197, 1, 218, 70, 221, 197, 1, + 218, 33, 221, 197, 1, 218, 32, 221, 197, 1, 218, 31, 221, 197, 1, 218, + 30, 221, 197, 1, 218, 28, 221, 197, 1, 222, 98, 218, 28, 221, 197, 1, + 218, 26, 221, 197, 58, 1, 235, 182, 78, 28, 4, 235, 11, 28, 4, 233, 135, + 28, 4, 227, 73, 28, 4, 224, 25, 28, 4, 224, 199, 28, 4, 252, 40, 28, 4, + 221, 139, 28, 4, 250, 181, 28, 4, 231, 202, 28, 4, 231, 55, 28, 4, 244, + 73, 230, 185, 28, 4, 217, 20, 28, 4, 248, 165, 28, 4, 249, 106, 28, 4, + 237, 58, 28, 4, 221, 238, 28, 4, 251, 10, 28, 4, 229, 117, 28, 4, 229, + 36, 28, 4, 244, 130, 28, 4, 244, 126, 28, 4, 244, 127, 28, 4, 244, 128, + 28, 4, 223, 218, 28, 4, 223, 178, 28, 4, 223, 189, 28, 4, 223, 217, 28, + 4, 223, 193, 28, 4, 223, 194, 28, 4, 223, 182, 28, 4, 251, 114, 28, 4, + 251, 101, 28, 4, 251, 103, 28, 4, 251, 113, 28, 4, 251, 111, 28, 4, 251, + 112, 28, 4, 251, 102, 28, 4, 216, 247, 28, 4, 216, 227, 28, 4, 216, 238, + 28, 4, 216, 246, 28, 4, 216, 241, 28, 4, 216, 242, 28, 4, 216, 230, 28, + 4, 251, 110, 28, 4, 251, 104, 28, 4, 251, 106, 28, 4, 251, 109, 28, 4, + 251, 107, 28, 4, 251, 108, 28, 4, 251, 105, 28, 4, 228, 51, 28, 4, 228, + 41, 28, 4, 228, 47, 28, 4, 228, 50, 28, 4, 228, 48, 28, 4, 228, 49, 28, + 4, 228, 46, 28, 4, 235, 212, 28, 4, 235, 204, 28, 4, 235, 207, 28, 4, + 235, 211, 28, 4, 235, 208, 28, 4, 235, 209, 28, 4, 235, 205, 28, 4, 218, + 103, 28, 4, 218, 93, 28, 4, 218, 99, 28, 4, 218, 102, 28, 4, 218, 100, + 28, 4, 218, 101, 28, 4, 218, 98, 28, 4, 243, 236, 28, 4, 243, 227, 28, 4, + 243, 230, 28, 4, 243, 235, 28, 4, 243, 232, 28, 4, 243, 233, 28, 4, 243, + 229, 36, 31, 1, 252, 144, 36, 31, 1, 219, 165, 36, 31, 1, 244, 116, 36, + 31, 1, 249, 92, 36, 31, 1, 217, 72, 36, 31, 1, 217, 92, 36, 31, 1, 175, + 36, 31, 1, 246, 217, 36, 31, 1, 246, 205, 36, 31, 1, 246, 197, 36, 31, 1, + 74, 36, 31, 1, 229, 198, 36, 31, 1, 246, 148, 36, 31, 1, 246, 138, 36, + 31, 1, 222, 87, 36, 31, 1, 155, 36, 31, 1, 221, 50, 36, 31, 1, 251, 46, + 36, 31, 1, 225, 25, 36, 31, 1, 224, 248, 36, 31, 1, 245, 171, 36, 31, 1, + 246, 137, 36, 31, 1, 60, 36, 31, 1, 238, 26, 36, 31, 1, 248, 181, 36, 31, + 1, 233, 123, 220, 102, 36, 31, 1, 218, 36, 36, 31, 1, 217, 200, 36, 31, + 1, 237, 160, 60, 36, 31, 1, 235, 25, 217, 178, 36, 31, 1, 252, 76, 217, + 178, 36, 31, 1, 237, 160, 252, 76, 217, 178, 45, 254, 120, 223, 89, 234, + 63, 45, 254, 120, 247, 143, 223, 89, 234, 63, 42, 223, 89, 115, 45, 223, + 89, 115, 42, 247, 143, 223, 89, 115, 45, 247, 143, 223, 89, 115, 227, + 241, 237, 178, 234, 63, 227, 241, 247, 143, 237, 178, 234, 63, 247, 143, + 221, 103, 234, 63, 42, 221, 103, 115, 45, 221, 103, 115, 227, 241, 223, + 227, 42, 227, 241, 230, 140, 115, 45, 227, 241, 230, 140, 115, 246, 251, + 250, 121, 229, 239, 245, 126, 229, 239, 210, 245, 126, 229, 239, 242, + 118, 247, 143, 230, 180, 247, 130, 254, 127, 220, 53, 254, 127, 247, 143, + 227, 106, 254, 119, 51, 230, 177, 242, 121, 237, 170, 237, 177, 230, 23, + 252, 14, 242, 122, 2, 249, 13, 221, 180, 2, 227, 94, 50, 42, 109, 229, + 231, 115, 45, 109, 229, 231, 115, 221, 180, 2, 61, 50, 221, 180, 2, 61, + 56, 42, 69, 252, 201, 2, 228, 77, 45, 69, 252, 201, 2, 228, 77, 221, 120, + 42, 144, 115, 221, 120, 45, 144, 115, 252, 29, 42, 144, 115, 252, 29, 45, + 144, 115, 42, 224, 136, 105, 115, 45, 224, 136, 105, 115, 42, 51, 229, + 229, 45, 51, 229, 229, 124, 188, 104, 131, 61, 228, 196, 131, 61, 104, + 124, 188, 228, 196, 204, 245, 116, 61, 228, 196, 245, 170, 61, 78, 210, + 228, 82, 78, 69, 221, 179, 227, 94, 229, 31, 218, 174, 225, 55, 233, 193, + 248, 145, 9, 32, 227, 181, 9, 32, 250, 203, 9, 32, 226, 90, 107, 9, 32, + 226, 90, 103, 9, 32, 226, 90, 160, 9, 32, 229, 157, 9, 32, 252, 21, 9, + 32, 222, 146, 9, 32, 236, 61, 107, 9, 32, 236, 61, 103, 9, 32, 248, 189, + 9, 32, 226, 92, 9, 32, 3, 107, 9, 32, 3, 103, 9, 32, 235, 155, 107, 9, + 32, 235, 155, 103, 9, 32, 235, 155, 160, 9, 32, 235, 155, 154, 9, 32, + 224, 35, 9, 32, 221, 229, 9, 32, 224, 33, 107, 9, 32, 224, 33, 103, 9, + 32, 243, 154, 107, 9, 32, 243, 154, 103, 9, 32, 243, 189, 9, 32, 227, + 233, 9, 32, 251, 8, 9, 32, 223, 68, 9, 32, 233, 117, 9, 32, 249, 90, 9, + 32, 233, 110, 9, 32, 250, 213, 9, 32, 218, 241, 107, 9, 32, 218, 241, + 103, 9, 32, 245, 179, 9, 32, 229, 208, 107, 9, 32, 229, 208, 103, 9, 32, + 224, 114, 144, 221, 99, 221, 60, 9, 32, 250, 110, 9, 32, 248, 159, 9, 32, + 237, 121, 9, 32, 252, 36, 117, 250, 192, 9, 32, 246, 81, 9, 32, 223, 240, + 107, 9, 32, 223, 240, 103, 9, 32, 252, 211, 9, 32, 224, 119, 9, 32, 251, + 199, 224, 119, 9, 32, 232, 126, 107, 9, 32, 232, 126, 103, 9, 32, 232, + 126, 160, 9, 32, 232, 126, 154, 9, 32, 233, 243, 9, 32, 224, 240, 9, 32, + 227, 239, 9, 32, 246, 100, 9, 32, 230, 150, 9, 32, 251, 255, 107, 9, 32, + 251, 255, 103, 9, 32, 234, 21, 9, 32, 233, 112, 9, 32, 244, 40, 107, 9, + 32, 244, 40, 103, 9, 32, 244, 40, 160, 9, 32, 221, 196, 9, 32, 250, 191, + 9, 32, 218, 217, 107, 9, 32, 218, 217, 103, 9, 32, 251, 199, 226, 84, 9, + 32, 224, 114, 242, 189, 9, 32, 242, 189, 9, 32, 251, 199, 223, 247, 9, + 32, 251, 199, 224, 235, 9, 32, 245, 133, 9, 32, 251, 199, 251, 127, 9, + 32, 224, 114, 218, 255, 9, 32, 219, 0, 107, 9, 32, 219, 0, 103, 9, 32, + 250, 214, 9, 32, 251, 199, 244, 62, 9, 32, 171, 107, 9, 32, 171, 103, 9, + 32, 251, 199, 235, 2, 9, 32, 251, 199, 244, 213, 9, 32, 233, 109, 107, 9, + 32, 233, 109, 103, 9, 32, 227, 242, 9, 32, 252, 43, 9, 32, 251, 199, 222, + 117, 235, 119, 9, 32, 251, 199, 235, 120, 9, 32, 251, 199, 218, 194, 9, + 32, 251, 199, 245, 142, 9, 32, 247, 3, 107, 9, 32, 247, 3, 103, 9, 32, + 247, 3, 160, 9, 32, 251, 199, 247, 2, 9, 32, 243, 159, 9, 32, 251, 199, + 242, 188, 9, 32, 252, 35, 9, 32, 244, 111, 9, 32, 251, 199, 245, 176, 9, + 32, 251, 199, 252, 67, 9, 32, 251, 199, 226, 151, 9, 32, 224, 114, 218, + 212, 9, 32, 224, 114, 218, 20, 9, 32, 251, 199, 245, 98, 9, 32, 237, 125, + 246, 103, 9, 32, 251, 199, 246, 103, 9, 32, 237, 125, 221, 121, 9, 32, + 251, 199, 221, 121, 9, 32, 237, 125, 247, 123, 9, 32, 251, 199, 247, 123, + 9, 32, 220, 234, 9, 32, 237, 125, 220, 234, 9, 32, 251, 199, 220, 234, + 53, 32, 107, 53, 32, 235, 43, 53, 32, 248, 145, 53, 32, 224, 55, 53, 32, + 226, 89, 53, 32, 96, 53, 32, 103, 53, 32, 235, 64, 53, 32, 234, 86, 53, + 32, 235, 103, 53, 32, 246, 178, 53, 32, 185, 53, 32, 113, 252, 21, 53, + 32, 250, 111, 53, 32, 242, 65, 53, 32, 222, 146, 53, 32, 230, 119, 252, + 21, 53, 32, 236, 60, 53, 32, 229, 10, 53, 32, 218, 169, 53, 32, 223, 235, + 53, 32, 45, 230, 119, 252, 21, 53, 32, 243, 109, 246, 192, 53, 32, 222, + 65, 53, 32, 248, 189, 53, 32, 226, 92, 53, 32, 250, 203, 53, 32, 228, + 231, 53, 32, 254, 208, 53, 32, 233, 105, 53, 32, 246, 192, 53, 32, 247, + 8, 53, 32, 226, 108, 53, 32, 244, 68, 53, 32, 244, 69, 224, 45, 53, 32, + 246, 102, 53, 32, 252, 75, 53, 32, 218, 183, 53, 32, 251, 24, 53, 32, + 227, 66, 53, 32, 237, 220, 53, 32, 224, 43, 53, 32, 235, 154, 53, 32, + 250, 119, 53, 32, 223, 230, 53, 32, 233, 107, 53, 32, 227, 84, 53, 32, + 218, 171, 53, 32, 230, 134, 53, 32, 220, 239, 53, 32, 247, 113, 53, 32, + 224, 192, 221, 229, 53, 32, 247, 143, 250, 203, 53, 32, 171, 223, 122, + 53, 32, 124, 243, 187, 53, 32, 224, 194, 53, 32, 252, 24, 53, 32, 224, + 32, 53, 32, 252, 3, 53, 32, 223, 145, 53, 32, 243, 153, 53, 32, 243, 195, + 53, 32, 248, 148, 53, 32, 243, 189, 53, 32, 252, 14, 53, 32, 227, 233, + 53, 32, 226, 99, 53, 32, 248, 212, 53, 32, 253, 213, 53, 32, 223, 227, + 53, 32, 231, 184, 53, 32, 223, 68, 53, 32, 226, 118, 53, 32, 233, 117, + 53, 32, 221, 98, 53, 32, 235, 178, 53, 32, 223, 136, 53, 32, 249, 90, 53, + 32, 218, 226, 53, 32, 248, 168, 231, 184, 53, 32, 250, 165, 53, 32, 245, + 84, 53, 32, 250, 211, 53, 32, 223, 148, 53, 32, 218, 240, 53, 32, 245, + 179, 53, 32, 250, 210, 53, 32, 245, 235, 53, 32, 51, 218, 151, 53, 32, + 144, 221, 99, 221, 60, 53, 32, 224, 52, 53, 32, 245, 243, 53, 32, 250, + 110, 53, 32, 248, 159, 53, 32, 228, 228, 53, 32, 237, 121, 53, 32, 234, + 3, 53, 32, 221, 178, 53, 32, 223, 31, 53, 32, 235, 59, 53, 32, 220, 33, + 53, 32, 245, 202, 53, 32, 252, 36, 117, 250, 192, 53, 32, 224, 137, 53, + 32, 247, 143, 222, 62, 53, 32, 218, 207, 53, 32, 224, 62, 53, 32, 248, + 202, 53, 32, 246, 81, 53, 32, 223, 249, 53, 32, 65, 53, 32, 223, 138, 53, + 32, 223, 239, 53, 32, 221, 108, 53, 32, 244, 45, 53, 32, 251, 119, 53, + 32, 223, 160, 53, 32, 252, 211, 53, 32, 227, 145, 53, 32, 224, 119, 53, + 32, 237, 117, 53, 32, 232, 125, 53, 32, 224, 240, 53, 32, 245, 228, 53, + 32, 230, 150, 53, 32, 254, 126, 53, 32, 229, 47, 53, 32, 247, 11, 53, 32, + 251, 254, 53, 32, 234, 21, 53, 32, 233, 156, 53, 32, 225, 73, 53, 32, + 254, 23, 53, 32, 233, 112, 53, 32, 221, 124, 53, 32, 230, 111, 53, 32, + 252, 38, 53, 32, 223, 134, 53, 32, 250, 174, 53, 32, 244, 39, 53, 32, + 221, 196, 53, 32, 237, 192, 53, 32, 252, 44, 53, 32, 219, 0, 246, 192, + 53, 32, 250, 191, 53, 32, 218, 216, 53, 32, 226, 84, 53, 32, 242, 189, + 53, 32, 223, 247, 53, 32, 219, 186, 53, 32, 252, 141, 53, 32, 229, 78, + 53, 32, 252, 227, 53, 32, 224, 235, 53, 32, 227, 202, 53, 32, 227, 10, + 53, 32, 245, 133, 53, 32, 252, 37, 53, 32, 251, 127, 53, 32, 252, 58, 53, + 32, 233, 114, 53, 32, 218, 255, 53, 32, 250, 214, 53, 32, 218, 192, 53, + 32, 248, 199, 53, 32, 219, 86, 53, 32, 244, 62, 53, 32, 235, 2, 53, 32, + 244, 213, 53, 32, 233, 108, 53, 32, 224, 54, 53, 32, 224, 192, 222, 134, + 252, 67, 53, 32, 227, 242, 53, 32, 252, 43, 53, 32, 218, 166, 53, 32, + 246, 3, 53, 32, 235, 119, 53, 32, 222, 117, 235, 119, 53, 32, 235, 116, + 53, 32, 224, 8, 53, 32, 235, 120, 53, 32, 218, 194, 53, 32, 245, 142, 53, + 32, 247, 2, 53, 32, 243, 159, 53, 32, 245, 106, 53, 32, 242, 188, 53, 32, + 252, 35, 53, 32, 222, 122, 53, 32, 243, 200, 53, 32, 245, 195, 53, 32, + 226, 172, 218, 192, 53, 32, 251, 121, 53, 32, 244, 111, 53, 32, 245, 176, + 53, 32, 252, 67, 53, 32, 226, 151, 53, 32, 249, 80, 53, 32, 218, 212, 53, + 32, 243, 139, 53, 32, 218, 20, 53, 32, 233, 163, 53, 32, 252, 53, 53, 32, + 246, 202, 53, 32, 245, 98, 53, 32, 221, 76, 53, 32, 247, 115, 53, 32, + 227, 228, 53, 32, 231, 185, 53, 32, 246, 103, 53, 32, 221, 121, 53, 32, + 247, 123, 53, 32, 220, 234, 53, 32, 245, 143, 98, 249, 46, 126, 42, 199, + 227, 109, 98, 249, 46, 126, 71, 199, 56, 98, 249, 46, 126, 42, 199, 233, + 193, 25, 227, 109, 98, 249, 46, 126, 71, 199, 233, 193, 25, 56, 98, 249, + 46, 126, 245, 90, 223, 47, 98, 249, 46, 126, 223, 48, 245, 97, 50, 98, + 249, 46, 126, 223, 48, 245, 97, 56, 98, 249, 46, 126, 223, 48, 245, 97, + 235, 115, 98, 249, 46, 126, 223, 48, 245, 97, 220, 60, 235, 115, 98, 249, + 46, 126, 223, 48, 245, 97, 220, 60, 227, 109, 98, 249, 46, 126, 223, 48, + 245, 97, 234, 237, 235, 115, 98, 249, 46, 126, 230, 76, 98, 223, 254, 98, + 250, 168, 98, 245, 90, 223, 136, 248, 196, 78, 237, 118, 237, 209, 223, + 159, 100, 98, 237, 138, 78, 98, 250, 194, 78, 98, 54, 217, 84, 42, 254, + 120, 115, 45, 254, 120, 115, 42, 51, 254, 120, 115, 45, 51, 254, 120, + 115, 42, 250, 124, 115, 45, 250, 124, 115, 42, 67, 250, 124, 115, 45, 67, + 250, 124, 115, 42, 84, 235, 91, 115, 45, 84, 235, 91, 115, 229, 14, 78, + 244, 163, 78, 42, 221, 114, 224, 236, 115, 45, 221, 114, 224, 236, 115, + 42, 67, 235, 91, 115, 45, 67, 235, 91, 115, 42, 67, 221, 114, 224, 236, + 115, 45, 67, 221, 114, 224, 236, 115, 42, 67, 40, 115, 45, 67, 40, 115, + 218, 237, 249, 146, 210, 51, 228, 236, 228, 69, 78, 51, 228, 236, 228, + 69, 78, 109, 51, 228, 236, 228, 69, 78, 229, 14, 164, 246, 3, 243, 185, + 231, 107, 107, 243, 185, 231, 107, 103, 243, 185, 231, 107, 160, 243, + 185, 231, 107, 154, 243, 185, 231, 107, 174, 243, 185, 231, 107, 182, + 243, 185, 231, 107, 191, 243, 185, 231, 107, 185, 243, 185, 231, 107, + 190, 98, 235, 83, 145, 78, 98, 227, 88, 145, 78, 98, 249, 52, 145, 78, + 98, 246, 177, 145, 78, 22, 224, 109, 61, 145, 78, 22, 51, 61, 145, 78, + 218, 235, 249, 146, 69, 236, 232, 227, 182, 78, 69, 236, 232, 227, 182, + 2, 219, 70, 224, 9, 78, 69, 236, 232, 227, 182, 164, 220, 60, 243, 194, + 69, 236, 232, 227, 182, 2, 219, 70, 224, 9, 164, 220, 60, 243, 194, 69, + 236, 232, 227, 182, 164, 234, 237, 243, 194, 34, 229, 14, 78, 98, 183, + 235, 44, 245, 225, 225, 55, 100, 243, 185, 231, 107, 222, 65, 243, 185, + 231, 107, 220, 219, 243, 185, 231, 107, 221, 245, 69, 98, 237, 138, 78, + 234, 52, 78, 229, 225, 254, 143, 78, 98, 41, 237, 211, 98, 144, 245, 188, + 223, 254, 136, 1, 3, 60, 136, 1, 60, 136, 1, 3, 72, 136, 1, 72, 136, 1, + 3, 68, 136, 1, 68, 136, 1, 3, 73, 136, 1, 73, 136, 1, 3, 74, 136, 1, 74, + 136, 1, 175, 136, 1, 245, 0, 136, 1, 236, 113, 136, 1, 244, 103, 136, 1, + 236, 7, 136, 1, 244, 17, 136, 1, 236, 184, 136, 1, 244, 191, 136, 1, 236, + 57, 136, 1, 244, 68, 136, 1, 226, 177, 136, 1, 217, 114, 136, 1, 224, + 140, 136, 1, 217, 42, 136, 1, 223, 103, 136, 1, 217, 13, 136, 1, 226, 94, + 136, 1, 217, 92, 136, 1, 224, 26, 136, 1, 217, 21, 136, 1, 222, 155, 136, + 1, 249, 207, 136, 1, 221, 205, 136, 1, 249, 15, 136, 1, 3, 221, 0, 136, + 1, 221, 0, 136, 1, 247, 111, 136, 1, 222, 87, 136, 1, 249, 92, 136, 1, + 101, 136, 1, 248, 167, 136, 1, 208, 136, 1, 232, 62, 136, 1, 231, 144, + 136, 1, 232, 141, 136, 1, 231, 204, 136, 1, 155, 136, 1, 252, 237, 136, + 1, 187, 136, 1, 243, 112, 136, 1, 252, 84, 136, 1, 229, 108, 136, 1, 242, + 173, 136, 1, 251, 248, 136, 1, 228, 202, 136, 1, 243, 162, 136, 1, 252, + 144, 136, 1, 229, 198, 136, 1, 243, 4, 136, 1, 252, 41, 136, 1, 229, 37, + 136, 1, 196, 136, 1, 233, 196, 136, 1, 233, 99, 136, 1, 234, 25, 136, 1, + 233, 136, 136, 1, 3, 184, 136, 1, 184, 136, 1, 3, 217, 200, 136, 1, 217, + 200, 136, 1, 3, 217, 231, 136, 1, 217, 231, 136, 1, 203, 136, 1, 227, + 147, 136, 1, 227, 22, 136, 1, 227, 216, 136, 1, 227, 75, 136, 1, 3, 219, + 7, 136, 1, 219, 7, 136, 1, 218, 204, 136, 1, 218, 227, 136, 1, 218, 187, + 136, 1, 207, 136, 1, 219, 56, 136, 1, 3, 175, 136, 1, 3, 236, 184, 36, + 236, 202, 219, 70, 224, 9, 78, 36, 236, 202, 225, 72, 224, 9, 78, 236, + 202, 219, 70, 224, 9, 78, 236, 202, 225, 72, 224, 9, 78, 136, 237, 138, + 78, 136, 219, 70, 237, 138, 78, 136, 248, 234, 217, 213, 236, 202, 51, + 242, 121, 52, 1, 3, 60, 52, 1, 60, 52, 1, 3, 72, 52, 1, 72, 52, 1, 3, 68, + 52, 1, 68, 52, 1, 3, 73, 52, 1, 73, 52, 1, 3, 74, 52, 1, 74, 52, 1, 175, + 52, 1, 245, 0, 52, 1, 236, 113, 52, 1, 244, 103, 52, 1, 236, 7, 52, 1, + 244, 17, 52, 1, 236, 184, 52, 1, 244, 191, 52, 1, 236, 57, 52, 1, 244, + 68, 52, 1, 226, 177, 52, 1, 217, 114, 52, 1, 224, 140, 52, 1, 217, 42, + 52, 1, 223, 103, 52, 1, 217, 13, 52, 1, 226, 94, 52, 1, 217, 92, 52, 1, + 224, 26, 52, 1, 217, 21, 52, 1, 222, 155, 52, 1, 249, 207, 52, 1, 221, + 205, 52, 1, 249, 15, 52, 1, 3, 221, 0, 52, 1, 221, 0, 52, 1, 247, 111, + 52, 1, 222, 87, 52, 1, 249, 92, 52, 1, 101, 52, 1, 248, 167, 52, 1, 208, + 52, 1, 232, 62, 52, 1, 231, 144, 52, 1, 232, 141, 52, 1, 231, 204, 52, 1, + 155, 52, 1, 252, 237, 52, 1, 187, 52, 1, 243, 112, 52, 1, 252, 84, 52, 1, + 229, 108, 52, 1, 242, 173, 52, 1, 251, 248, 52, 1, 228, 202, 52, 1, 243, + 162, 52, 1, 252, 144, 52, 1, 229, 198, 52, 1, 243, 4, 52, 1, 252, 41, 52, + 1, 229, 37, 52, 1, 196, 52, 1, 233, 196, 52, 1, 233, 99, 52, 1, 234, 25, + 52, 1, 233, 136, 52, 1, 3, 184, 52, 1, 184, 52, 1, 3, 217, 200, 52, 1, + 217, 200, 52, 1, 3, 217, 231, 52, 1, 217, 231, 52, 1, 203, 52, 1, 227, + 147, 52, 1, 227, 22, 52, 1, 227, 216, 52, 1, 227, 75, 52, 1, 3, 219, 7, + 52, 1, 219, 7, 52, 1, 218, 204, 52, 1, 218, 227, 52, 1, 218, 187, 52, 1, + 207, 52, 1, 219, 56, 52, 1, 3, 175, 52, 1, 3, 236, 184, 52, 1, 219, 189, + 52, 1, 219, 94, 52, 1, 219, 165, 52, 1, 219, 72, 52, 233, 193, 248, 145, + 236, 202, 228, 223, 224, 9, 78, 52, 237, 138, 78, 52, 219, 70, 237, 138, + 78, 52, 248, 234, 236, 30, 200, 1, 253, 204, 200, 1, 230, 59, 200, 1, + 189, 200, 1, 246, 74, 200, 1, 250, 46, 200, 1, 222, 201, 200, 1, 207, + 200, 1, 153, 200, 1, 245, 67, 200, 1, 237, 17, 200, 1, 243, 225, 200, 1, + 237, 126, 200, 1, 228, 163, 200, 1, 218, 151, 200, 1, 217, 81, 200, 1, + 251, 70, 200, 1, 225, 27, 200, 1, 152, 200, 1, 217, 157, 200, 1, 251, + 202, 200, 1, 198, 200, 1, 60, 200, 1, 74, 200, 1, 73, 200, 1, 246, 239, + 200, 1, 254, 196, 200, 1, 246, 237, 200, 1, 253, 232, 200, 1, 230, 86, + 200, 1, 254, 131, 200, 1, 246, 197, 200, 1, 254, 123, 200, 1, 246, 185, + 200, 1, 246, 148, 200, 1, 72, 200, 1, 68, 200, 1, 237, 137, 200, 1, 216, + 216, 200, 1, 232, 117, 200, 1, 244, 72, 200, 1, 238, 0, 22, 1, 236, 86, + 22, 1, 223, 211, 22, 1, 236, 79, 22, 1, 232, 55, 22, 1, 232, 53, 22, 1, + 232, 52, 22, 1, 221, 192, 22, 1, 223, 200, 22, 1, 227, 140, 22, 1, 227, + 135, 22, 1, 227, 132, 22, 1, 227, 125, 22, 1, 227, 120, 22, 1, 227, 115, + 22, 1, 227, 126, 22, 1, 227, 138, 22, 1, 233, 187, 22, 1, 229, 99, 22, 1, + 223, 208, 22, 1, 229, 88, 22, 1, 224, 104, 22, 1, 223, 205, 22, 1, 238, + 22, 22, 1, 250, 230, 22, 1, 223, 215, 22, 1, 251, 29, 22, 1, 236, 128, + 22, 1, 222, 0, 22, 1, 229, 127, 22, 1, 243, 106, 22, 1, 60, 22, 1, 254, + 234, 22, 1, 184, 22, 1, 218, 65, 22, 1, 246, 168, 22, 1, 73, 22, 1, 218, + 16, 22, 1, 218, 25, 22, 1, 74, 22, 1, 219, 7, 22, 1, 219, 4, 22, 1, 230, + 167, 22, 1, 217, 231, 22, 1, 68, 22, 1, 218, 219, 22, 1, 218, 227, 22, 1, + 218, 204, 22, 1, 217, 200, 22, 1, 246, 115, 22, 1, 217, 250, 22, 1, 72, + 22, 245, 185, 22, 1, 223, 209, 22, 1, 232, 45, 22, 1, 232, 47, 22, 1, + 232, 50, 22, 1, 227, 133, 22, 1, 227, 114, 22, 1, 227, 122, 22, 1, 227, + 127, 22, 1, 227, 112, 22, 1, 233, 180, 22, 1, 233, 177, 22, 1, 233, 181, + 22, 1, 236, 220, 22, 1, 229, 94, 22, 1, 229, 80, 22, 1, 229, 86, 22, 1, + 229, 83, 22, 1, 229, 97, 22, 1, 229, 81, 22, 1, 236, 218, 22, 1, 236, + 216, 22, 1, 224, 97, 22, 1, 224, 95, 22, 1, 224, 87, 22, 1, 224, 92, 22, + 1, 224, 102, 22, 1, 230, 1, 22, 1, 223, 212, 22, 1, 218, 6, 22, 1, 218, + 2, 22, 1, 218, 3, 22, 1, 236, 219, 22, 1, 223, 213, 22, 1, 218, 12, 22, + 1, 217, 225, 22, 1, 217, 224, 22, 1, 217, 227, 22, 1, 217, 191, 22, 1, + 217, 192, 22, 1, 217, 195, 22, 1, 254, 60, 22, 1, 254, 54, 98, 254, 112, + 235, 33, 78, 98, 254, 112, 227, 160, 78, 98, 254, 112, 131, 78, 98, 254, + 112, 124, 78, 98, 254, 112, 148, 78, 98, 254, 112, 245, 116, 78, 98, 254, + 112, 221, 120, 78, 98, 254, 112, 233, 193, 78, 98, 254, 112, 252, 29, 78, + 98, 254, 112, 245, 178, 78, 98, 254, 112, 226, 90, 78, 98, 254, 112, 221, + 252, 78, 98, 254, 112, 245, 110, 78, 98, 254, 112, 243, 152, 78, 98, 254, + 112, 247, 9, 78, 98, 254, 112, 234, 87, 78, 200, 1, 251, 248, 200, 1, + 217, 42, 200, 1, 237, 98, 200, 1, 244, 17, 200, 1, 246, 250, 200, 1, 246, + 183, 200, 1, 230, 127, 200, 1, 230, 131, 200, 1, 237, 156, 200, 1, 254, + 114, 200, 1, 237, 198, 200, 1, 220, 68, 200, 1, 237, 238, 200, 1, 232, + 101, 200, 1, 254, 190, 200, 1, 253, 228, 200, 1, 254, 140, 200, 1, 230, + 146, 200, 1, 230, 133, 200, 1, 237, 195, 200, 39, 1, 230, 59, 200, 39, 1, + 222, 201, 200, 39, 1, 237, 17, 200, 39, 1, 243, 225, 9, 214, 222, 201, 9, + 214, 218, 213, 9, 214, 218, 131, 9, 214, 251, 214, 9, 214, 223, 37, 9, + 214, 242, 111, 9, 214, 242, 115, 9, 214, 242, 179, 9, 214, 242, 112, 9, + 214, 222, 204, 9, 214, 242, 114, 9, 214, 242, 110, 9, 214, 242, 177, 9, + 214, 242, 113, 9, 214, 242, 109, 9, 214, 207, 9, 214, 243, 225, 9, 214, + 198, 9, 214, 230, 59, 9, 214, 224, 0, 9, 214, 250, 46, 9, 214, 242, 116, + 9, 214, 243, 122, 9, 214, 222, 213, 9, 214, 223, 22, 9, 214, 223, 168, 9, + 214, 225, 32, 9, 214, 229, 200, 9, 214, 228, 165, 9, 214, 221, 140, 9, + 214, 222, 203, 9, 214, 223, 30, 9, 214, 242, 123, 9, 214, 242, 108, 9, + 214, 229, 143, 9, 214, 228, 163, 52, 1, 3, 236, 7, 52, 1, 3, 224, 140, + 52, 1, 3, 223, 103, 52, 1, 3, 101, 52, 1, 3, 231, 144, 52, 1, 3, 155, 52, + 1, 3, 243, 112, 52, 1, 3, 242, 173, 52, 1, 3, 243, 162, 52, 1, 3, 243, 4, + 52, 1, 3, 233, 99, 52, 1, 3, 203, 52, 1, 3, 227, 147, 52, 1, 3, 227, 22, + 52, 1, 3, 227, 216, 52, 1, 3, 227, 75, 82, 22, 236, 86, 82, 22, 232, 55, + 82, 22, 221, 192, 82, 22, 227, 140, 82, 22, 233, 187, 82, 22, 229, 99, + 82, 22, 224, 104, 82, 22, 238, 22, 82, 22, 250, 230, 82, 22, 251, 29, 82, + 22, 236, 128, 82, 22, 222, 0, 82, 22, 229, 127, 82, 22, 243, 106, 82, 22, + 236, 87, 60, 82, 22, 232, 56, 60, 82, 22, 221, 193, 60, 82, 22, 227, 141, + 60, 82, 22, 233, 188, 60, 82, 22, 229, 100, 60, 82, 22, 224, 105, 60, 82, + 22, 238, 23, 60, 82, 22, 250, 231, 60, 82, 22, 251, 30, 60, 82, 22, 236, + 129, 60, 82, 22, 222, 1, 60, 82, 22, 229, 128, 60, 82, 22, 243, 107, 60, + 82, 22, 250, 231, 68, 82, 236, 34, 126, 230, 156, 82, 236, 34, 126, 142, + 242, 173, 82, 138, 107, 82, 138, 103, 82, 138, 160, 82, 138, 154, 82, + 138, 174, 82, 138, 182, 82, 138, 191, 82, 138, 185, 82, 138, 190, 82, + 138, 222, 65, 82, 138, 233, 117, 82, 138, 245, 179, 82, 138, 218, 240, + 82, 138, 218, 179, 82, 138, 233, 238, 82, 138, 247, 8, 82, 138, 223, 68, + 82, 138, 223, 139, 82, 138, 243, 168, 82, 138, 224, 23, 82, 138, 232, + 218, 82, 138, 223, 248, 82, 138, 245, 184, 82, 138, 250, 154, 82, 138, + 235, 181, 82, 138, 227, 178, 82, 138, 251, 159, 82, 138, 223, 106, 82, + 138, 223, 56, 82, 138, 246, 176, 82, 138, 227, 170, 82, 138, 254, 153, + 82, 138, 245, 208, 82, 138, 227, 168, 82, 138, 225, 73, 82, 138, 227, + 215, 34, 138, 228, 81, 34, 138, 236, 103, 34, 138, 226, 107, 34, 138, + 236, 30, 34, 54, 222, 66, 230, 139, 84, 223, 227, 34, 54, 220, 220, 230, + 139, 84, 223, 227, 34, 54, 221, 246, 230, 139, 84, 223, 227, 34, 54, 245, + 120, 230, 139, 84, 223, 227, 34, 54, 245, 197, 230, 139, 84, 223, 227, + 34, 54, 224, 70, 230, 139, 84, 223, 227, 34, 54, 225, 39, 230, 139, 84, + 223, 227, 34, 54, 246, 228, 230, 139, 84, 223, 227, 229, 221, 55, 34, 54, + 220, 220, 107, 34, 54, 220, 220, 103, 34, 54, 220, 220, 160, 34, 54, 220, + 220, 154, 34, 54, 220, 220, 174, 34, 54, 220, 220, 182, 34, 54, 220, 220, + 191, 34, 54, 220, 220, 185, 34, 54, 220, 220, 190, 34, 54, 221, 245, 34, + 54, 221, 246, 107, 34, 54, 221, 246, 103, 34, 54, 221, 246, 160, 34, 54, + 221, 246, 154, 34, 54, 221, 246, 174, 34, 22, 236, 86, 34, 22, 232, 55, + 34, 22, 221, 192, 34, 22, 227, 140, 34, 22, 233, 187, 34, 22, 229, 99, + 34, 22, 224, 104, 34, 22, 238, 22, 34, 22, 250, 230, 34, 22, 251, 29, 34, + 22, 236, 128, 34, 22, 222, 0, 34, 22, 229, 127, 34, 22, 243, 106, 34, 22, + 236, 87, 60, 34, 22, 232, 56, 60, 34, 22, 221, 193, 60, 34, 22, 227, 141, + 60, 34, 22, 233, 188, 60, 34, 22, 229, 100, 60, 34, 22, 224, 105, 60, 34, + 22, 238, 23, 60, 34, 22, 250, 231, 60, 34, 22, 251, 30, 60, 34, 22, 236, + 129, 60, 34, 22, 222, 1, 60, 34, 22, 229, 128, 60, 34, 22, 243, 107, 60, + 34, 236, 34, 126, 251, 61, 34, 236, 34, 126, 237, 40, 34, 22, 238, 23, + 68, 236, 34, 223, 159, 100, 34, 138, 107, 34, 138, 103, 34, 138, 160, 34, + 138, 154, 34, 138, 174, 34, 138, 182, 34, 138, 191, 34, 138, 185, 34, + 138, 190, 34, 138, 222, 65, 34, 138, 233, 117, 34, 138, 245, 179, 34, + 138, 218, 240, 34, 138, 218, 179, 34, 138, 233, 238, 34, 138, 247, 8, 34, + 138, 223, 68, 34, 138, 223, 139, 34, 138, 243, 168, 34, 138, 224, 23, 34, + 138, 232, 218, 34, 138, 223, 248, 34, 138, 245, 184, 34, 138, 250, 154, + 34, 138, 235, 181, 34, 138, 226, 88, 34, 138, 234, 89, 34, 138, 245, 216, + 34, 138, 223, 79, 34, 138, 246, 97, 34, 138, 228, 233, 34, 138, 253, 236, + 34, 138, 237, 139, 34, 138, 227, 168, 34, 138, 250, 127, 34, 138, 250, + 118, 34, 138, 243, 99, 34, 138, 251, 84, 34, 138, 234, 239, 34, 138, 235, + 115, 34, 138, 227, 109, 34, 138, 234, 19, 34, 138, 227, 189, 34, 138, + 223, 106, 34, 138, 223, 56, 34, 138, 246, 176, 34, 138, 227, 170, 34, + 138, 254, 153, 34, 138, 232, 42, 34, 54, 221, 246, 182, 34, 54, 221, 246, + 191, 34, 54, 221, 246, 185, 34, 54, 221, 246, 190, 34, 54, 245, 119, 34, + 54, 245, 120, 107, 34, 54, 245, 120, 103, 34, 54, 245, 120, 160, 34, 54, + 245, 120, 154, 34, 54, 245, 120, 174, 34, 54, 245, 120, 182, 34, 54, 245, + 120, 191, 34, 54, 245, 120, 185, 34, 54, 245, 120, 190, 34, 54, 245, 196, + 98, 183, 16, 35, 237, 119, 98, 183, 16, 35, 245, 227, 98, 183, 16, 35, + 234, 69, 98, 183, 16, 35, 254, 71, 98, 183, 16, 35, 234, 45, 98, 183, 16, + 35, 237, 38, 98, 183, 16, 35, 237, 39, 98, 183, 16, 35, 253, 229, 98, + 183, 16, 35, 225, 53, 98, 183, 16, 35, 230, 170, 98, 183, 16, 35, 231, + 175, 98, 183, 16, 35, 249, 87, 40, 243, 122, 40, 246, 144, 40, 246, 105, + 235, 49, 235, 66, 55, 34, 52, 60, 34, 52, 72, 34, 52, 68, 34, 52, 73, 34, + 52, 74, 34, 52, 175, 34, 52, 236, 113, 34, 52, 236, 7, 34, 52, 236, 184, + 34, 52, 236, 57, 34, 52, 226, 177, 34, 52, 224, 140, 34, 52, 223, 103, + 34, 52, 226, 94, 34, 52, 224, 26, 34, 52, 222, 155, 34, 52, 221, 205, 34, + 52, 221, 0, 34, 52, 222, 87, 34, 52, 101, 34, 52, 208, 34, 52, 232, 62, + 34, 52, 231, 144, 34, 52, 232, 141, 34, 52, 231, 204, 34, 52, 155, 34, + 52, 243, 112, 34, 52, 242, 173, 34, 52, 243, 162, 34, 52, 243, 4, 34, 52, + 196, 34, 52, 233, 196, 34, 52, 233, 99, 34, 52, 234, 25, 34, 52, 233, + 136, 34, 52, 184, 34, 52, 217, 200, 34, 52, 217, 231, 34, 52, 203, 34, + 52, 227, 147, 34, 52, 227, 22, 34, 52, 227, 216, 34, 52, 227, 75, 34, 52, + 219, 7, 34, 52, 218, 204, 34, 52, 218, 227, 34, 52, 218, 187, 40, 254, + 91, 40, 254, 15, 40, 254, 108, 40, 255, 16, 40, 237, 199, 40, 237, 172, + 40, 220, 66, 40, 246, 124, 40, 246, 248, 40, 230, 130, 40, 230, 125, 40, + 236, 242, 40, 236, 214, 40, 236, 212, 40, 244, 217, 40, 244, 225, 40, + 244, 94, 40, 244, 90, 40, 235, 203, 40, 244, 84, 40, 236, 97, 40, 236, + 96, 40, 236, 95, 40, 236, 94, 40, 243, 251, 40, 243, 250, 40, 235, 244, + 40, 235, 246, 40, 236, 180, 40, 236, 32, 40, 236, 39, 40, 226, 162, 40, + 226, 136, 40, 224, 85, 40, 225, 58, 40, 225, 57, 40, 249, 204, 40, 249, + 45, 40, 248, 146, 40, 221, 134, 40, 232, 214, 40, 231, 176, 40, 243, 199, + 40, 230, 40, 40, 230, 39, 40, 252, 235, 40, 229, 105, 40, 229, 74, 40, + 229, 75, 40, 252, 65, 40, 242, 172, 40, 242, 168, 40, 251, 223, 40, 242, + 155, 40, 243, 143, 40, 229, 150, 40, 229, 178, 40, 243, 129, 40, 229, + 176, 40, 229, 189, 40, 252, 133, 40, 229, 27, 40, 252, 31, 40, 242, 249, + 40, 229, 22, 40, 242, 245, 40, 242, 246, 40, 234, 98, 40, 234, 95, 40, + 234, 102, 40, 234, 59, 40, 234, 80, 40, 233, 167, 40, 233, 149, 40, 233, + 148, 40, 234, 9, 40, 234, 7, 40, 234, 10, 40, 218, 75, 40, 218, 73, 40, + 217, 190, 40, 227, 86, 40, 227, 90, 40, 227, 3, 40, 226, 254, 40, 227, + 188, 40, 227, 186, 40, 218, 239, 98, 183, 16, 35, 242, 184, 217, 84, 98, + 183, 16, 35, 242, 184, 107, 98, 183, 16, 35, 242, 184, 103, 98, 183, 16, + 35, 242, 184, 160, 98, 183, 16, 35, 242, 184, 154, 98, 183, 16, 35, 242, + 184, 174, 98, 183, 16, 35, 242, 184, 182, 98, 183, 16, 35, 242, 184, 191, + 98, 183, 16, 35, 242, 184, 185, 98, 183, 16, 35, 242, 184, 190, 98, 183, + 16, 35, 242, 184, 222, 65, 98, 183, 16, 35, 242, 184, 246, 211, 98, 183, + 16, 35, 242, 184, 220, 221, 98, 183, 16, 35, 242, 184, 221, 247, 98, 183, + 16, 35, 242, 184, 245, 111, 98, 183, 16, 35, 242, 184, 245, 200, 98, 183, + 16, 35, 242, 184, 224, 77, 98, 183, 16, 35, 242, 184, 225, 41, 98, 183, + 16, 35, 242, 184, 246, 233, 98, 183, 16, 35, 242, 184, 232, 29, 98, 183, + 16, 35, 242, 184, 220, 219, 98, 183, 16, 35, 242, 184, 220, 213, 98, 183, + 16, 35, 242, 184, 220, 209, 98, 183, 16, 35, 242, 184, 220, 210, 98, 183, + 16, 35, 242, 184, 220, 215, 40, 242, 178, 40, 249, 207, 40, 253, 232, 40, + 135, 40, 230, 79, 40, 229, 201, 40, 248, 169, 40, 248, 170, 223, 226, 40, + 248, 170, 250, 88, 40, 237, 137, 40, 246, 147, 232, 219, 243, 144, 40, + 246, 147, 232, 219, 222, 221, 40, 246, 147, 232, 219, 222, 132, 40, 246, + 147, 232, 219, 234, 6, 40, 250, 120, 40, 230, 44, 254, 133, 40, 208, 40, + 233, 100, 60, 40, 196, 40, 175, 40, 236, 187, 40, 234, 41, 40, 244, 205, + 40, 251, 161, 40, 236, 186, 40, 229, 144, 40, 232, 119, 40, 233, 100, + 246, 74, 40, 233, 100, 245, 67, 40, 233, 230, 40, 236, 151, 40, 242, 116, + 40, 236, 115, 40, 233, 198, 40, 244, 105, 40, 221, 207, 40, 233, 100, + 153, 40, 233, 143, 40, 248, 177, 40, 236, 68, 40, 245, 141, 40, 231, 219, + 40, 233, 100, 189, 40, 233, 140, 40, 250, 183, 40, 236, 62, 40, 233, 141, + 223, 226, 40, 250, 184, 223, 226, 40, 234, 187, 223, 226, 40, 236, 63, + 223, 226, 40, 233, 141, 250, 88, 40, 250, 184, 250, 88, 40, 234, 187, + 250, 88, 40, 236, 63, 250, 88, 40, 234, 187, 104, 198, 40, 234, 187, 104, + 226, 235, 223, 226, 40, 187, 40, 236, 26, 40, 233, 102, 40, 244, 48, 40, + 227, 252, 40, 227, 253, 104, 198, 40, 227, 253, 104, 226, 235, 223, 226, + 40, 228, 213, 40, 231, 148, 40, 233, 100, 198, 40, 233, 101, 40, 228, + 183, 40, 231, 87, 40, 233, 100, 216, 216, 40, 233, 52, 40, 235, 237, 40, + 233, 53, 234, 9, 40, 228, 182, 40, 231, 86, 40, 233, 100, 219, 40, 40, + 233, 50, 40, 235, 235, 40, 233, 51, 234, 9, 40, 237, 18, 230, 159, 40, + 234, 187, 230, 159, 40, 254, 140, 40, 252, 20, 40, 251, 115, 40, 251, + 100, 40, 251, 203, 104, 236, 151, 40, 250, 182, 40, 249, 134, 40, 243, + 237, 40, 155, 40, 242, 179, 40, 237, 223, 40, 236, 75, 40, 236, 63, 251, + 142, 40, 236, 9, 40, 235, 15, 40, 235, 14, 40, 235, 8, 40, 234, 199, 40, + 234, 42, 224, 43, 40, 233, 166, 40, 233, 129, 40, 229, 142, 40, 229, 40, + 40, 229, 5, 40, 229, 3, 40, 223, 220, 40, 223, 41, 40, 218, 228, 40, 220, + 11, 104, 189, 40, 112, 104, 189, 98, 183, 16, 35, 249, 137, 107, 98, 183, + 16, 35, 249, 137, 103, 98, 183, 16, 35, 249, 137, 160, 98, 183, 16, 35, + 249, 137, 154, 98, 183, 16, 35, 249, 137, 174, 98, 183, 16, 35, 249, 137, + 182, 98, 183, 16, 35, 249, 137, 191, 98, 183, 16, 35, 249, 137, 185, 98, + 183, 16, 35, 249, 137, 190, 98, 183, 16, 35, 249, 137, 222, 65, 98, 183, + 16, 35, 249, 137, 246, 211, 98, 183, 16, 35, 249, 137, 220, 221, 98, 183, + 16, 35, 249, 137, 221, 247, 98, 183, 16, 35, 249, 137, 245, 111, 98, 183, + 16, 35, 249, 137, 245, 200, 98, 183, 16, 35, 249, 137, 224, 77, 98, 183, + 16, 35, 249, 137, 225, 41, 98, 183, 16, 35, 249, 137, 246, 233, 98, 183, + 16, 35, 249, 137, 232, 29, 98, 183, 16, 35, 249, 137, 220, 219, 98, 183, + 16, 35, 249, 137, 220, 213, 98, 183, 16, 35, 249, 137, 220, 209, 98, 183, + 16, 35, 249, 137, 220, 210, 98, 183, 16, 35, 249, 137, 220, 215, 98, 183, + 16, 35, 249, 137, 220, 216, 98, 183, 16, 35, 249, 137, 220, 211, 98, 183, + 16, 35, 249, 137, 220, 212, 98, 183, 16, 35, 249, 137, 220, 218, 98, 183, + 16, 35, 249, 137, 220, 214, 98, 183, 16, 35, 249, 137, 221, 245, 98, 183, + 16, 35, 249, 137, 221, 244, 40, 244, 240, 205, 35, 222, 23, 250, 108, + 243, 151, 205, 35, 222, 23, 227, 213, 247, 8, 205, 35, 248, 244, 253, + 245, 222, 23, 252, 130, 205, 35, 217, 211, 245, 137, 205, 35, 219, 1, + 205, 35, 250, 155, 205, 35, 222, 23, 254, 30, 205, 35, 242, 253, 221, + 136, 205, 35, 3, 222, 120, 205, 35, 221, 100, 205, 35, 229, 196, 205, 35, + 223, 158, 205, 35, 245, 218, 205, 35, 244, 32, 229, 15, 205, 35, 233, + 132, 205, 35, 246, 175, 205, 35, 245, 138, 205, 35, 218, 172, 230, 139, + 222, 23, 249, 88, 205, 35, 254, 75, 205, 35, 250, 139, 205, 35, 252, 59, + 221, 224, 205, 35, 244, 46, 205, 35, 223, 237, 254, 90, 205, 35, 227, + 162, 205, 35, 237, 194, 205, 35, 244, 32, 222, 120, 205, 35, 233, 106, + 250, 122, 205, 35, 244, 32, 228, 240, 205, 35, 222, 23, 255, 4, 218, 240, + 205, 35, 222, 23, 250, 201, 245, 179, 205, 35, 237, 206, 205, 35, 247, + 90, 205, 35, 227, 165, 205, 35, 244, 32, 229, 10, 205, 35, 228, 227, 205, + 35, 249, 151, 117, 222, 23, 235, 58, 205, 35, 222, 23, 245, 246, 205, 35, + 230, 109, 205, 35, 230, 173, 205, 35, 249, 66, 205, 35, 249, 84, 205, 35, + 237, 217, 205, 35, 252, 11, 205, 35, 250, 170, 199, 234, 12, 205, 35, + 244, 212, 221, 136, 205, 35, 228, 187, 220, 54, 205, 35, 230, 108, 205, + 35, 222, 23, 218, 221, 205, 35, 227, 156, 205, 35, 222, 23, 251, 121, + 205, 35, 222, 23, 254, 26, 221, 221, 205, 35, 222, 23, 236, 181, 223, + 141, 233, 107, 205, 35, 249, 43, 205, 35, 222, 23, 234, 61, 234, 99, 205, + 35, 255, 5, 205, 35, 222, 23, 218, 252, 205, 35, 222, 23, 244, 177, 218, + 194, 205, 35, 222, 23, 237, 44, 235, 165, 205, 35, 248, 200, 205, 35, + 235, 50, 205, 35, 237, 197, 221, 59, 205, 35, 3, 228, 240, 205, 35, 254, + 210, 250, 162, 205, 35, 252, 132, 250, 162, 8, 4, 237, 140, 8, 4, 237, + 134, 8, 4, 72, 8, 4, 237, 159, 8, 4, 238, 24, 8, 4, 238, 7, 8, 4, 238, + 26, 8, 4, 238, 25, 8, 4, 253, 244, 8, 4, 253, 214, 8, 4, 60, 8, 4, 254, + 92, 8, 4, 220, 64, 8, 4, 220, 67, 8, 4, 220, 65, 8, 4, 230, 92, 8, 4, + 230, 68, 8, 4, 74, 8, 4, 230, 120, 8, 4, 246, 98, 8, 4, 73, 8, 4, 218, + 165, 8, 4, 252, 60, 8, 4, 252, 57, 8, 4, 252, 84, 8, 4, 252, 68, 8, 4, + 252, 78, 8, 4, 252, 77, 8, 4, 252, 80, 8, 4, 252, 79, 8, 4, 252, 184, 8, + 4, 252, 180, 8, 4, 252, 237, 8, 4, 252, 202, 8, 4, 251, 231, 8, 4, 251, + 235, 8, 4, 251, 232, 8, 4, 252, 30, 8, 4, 252, 21, 8, 4, 252, 41, 8, 4, + 252, 32, 8, 4, 252, 97, 8, 4, 252, 144, 8, 4, 252, 109, 8, 4, 251, 221, + 8, 4, 251, 219, 8, 4, 251, 248, 8, 4, 251, 230, 8, 4, 251, 224, 8, 4, + 251, 228, 8, 4, 251, 207, 8, 4, 251, 206, 8, 4, 251, 212, 8, 4, 251, 210, + 8, 4, 251, 208, 8, 4, 251, 209, 8, 4, 229, 64, 8, 4, 229, 60, 8, 4, 229, + 108, 8, 4, 229, 70, 8, 4, 229, 79, 8, 4, 229, 103, 8, 4, 229, 101, 8, 4, + 229, 215, 8, 4, 229, 206, 8, 4, 187, 8, 4, 229, 246, 8, 4, 228, 192, 8, + 4, 228, 194, 8, 4, 228, 193, 8, 4, 229, 12, 8, 4, 229, 8, 8, 4, 229, 37, + 8, 4, 229, 19, 8, 4, 228, 185, 8, 4, 228, 184, 8, 4, 228, 202, 8, 4, 228, + 191, 8, 4, 228, 188, 8, 4, 228, 190, 8, 4, 228, 167, 8, 4, 228, 166, 8, + 4, 228, 171, 8, 4, 228, 170, 8, 4, 228, 168, 8, 4, 228, 169, 8, 4, 252, + 165, 8, 4, 252, 164, 8, 4, 252, 171, 8, 4, 252, 166, 8, 4, 252, 168, 8, + 4, 252, 167, 8, 4, 252, 170, 8, 4, 252, 169, 8, 4, 252, 176, 8, 4, 252, + 175, 8, 4, 252, 178, 8, 4, 252, 177, 8, 4, 252, 156, 8, 4, 252, 158, 8, + 4, 252, 157, 8, 4, 252, 161, 8, 4, 252, 160, 8, 4, 252, 163, 8, 4, 252, + 162, 8, 4, 252, 172, 8, 4, 252, 174, 8, 4, 252, 173, 8, 4, 252, 152, 8, + 4, 252, 151, 8, 4, 252, 159, 8, 4, 252, 155, 8, 4, 252, 153, 8, 4, 252, + 154, 8, 4, 252, 148, 8, 4, 252, 147, 8, 4, 252, 150, 8, 4, 252, 149, 8, + 4, 232, 188, 8, 4, 232, 187, 8, 4, 232, 193, 8, 4, 232, 189, 8, 4, 232, + 190, 8, 4, 232, 192, 8, 4, 232, 191, 8, 4, 232, 195, 8, 4, 232, 194, 8, + 4, 232, 197, 8, 4, 232, 196, 8, 4, 232, 184, 8, 4, 232, 183, 8, 4, 232, + 186, 8, 4, 232, 185, 8, 4, 232, 178, 8, 4, 232, 177, 8, 4, 232, 182, 8, + 4, 232, 181, 8, 4, 232, 179, 8, 4, 232, 180, 8, 4, 232, 172, 8, 4, 232, + 171, 8, 4, 232, 176, 8, 4, 232, 175, 8, 4, 232, 173, 8, 4, 232, 174, 8, + 4, 243, 46, 8, 4, 243, 45, 8, 4, 243, 51, 8, 4, 243, 47, 8, 4, 243, 48, + 8, 4, 243, 50, 8, 4, 243, 49, 8, 4, 243, 54, 8, 4, 243, 53, 8, 4, 243, + 56, 8, 4, 243, 55, 8, 4, 243, 37, 8, 4, 243, 39, 8, 4, 243, 38, 8, 4, + 243, 42, 8, 4, 243, 41, 8, 4, 243, 44, 8, 4, 243, 43, 8, 4, 243, 33, 8, + 4, 243, 32, 8, 4, 243, 40, 8, 4, 243, 36, 8, 4, 243, 34, 8, 4, 243, 35, + 8, 4, 243, 27, 8, 4, 243, 31, 8, 4, 243, 30, 8, 4, 243, 28, 8, 4, 243, + 29, 8, 4, 233, 145, 8, 4, 233, 144, 8, 4, 233, 196, 8, 4, 233, 151, 8, 4, + 233, 173, 8, 4, 233, 190, 8, 4, 233, 189, 8, 4, 234, 51, 8, 4, 234, 47, + 8, 4, 196, 8, 4, 234, 78, 8, 4, 233, 75, 8, 4, 233, 74, 8, 4, 233, 77, 8, + 4, 233, 76, 8, 4, 233, 111, 8, 4, 233, 103, 8, 4, 233, 136, 8, 4, 233, + 115, 8, 4, 233, 232, 8, 4, 234, 25, 8, 4, 233, 57, 8, 4, 233, 54, 8, 4, + 233, 99, 8, 4, 233, 71, 8, 4, 233, 64, 8, 4, 233, 69, 8, 4, 233, 36, 8, + 4, 233, 35, 8, 4, 233, 41, 8, 4, 233, 38, 8, 4, 245, 172, 8, 4, 245, 168, + 8, 4, 245, 203, 8, 4, 245, 180, 8, 4, 245, 240, 8, 4, 245, 234, 8, 4, + 246, 8, 8, 4, 245, 242, 8, 4, 245, 109, 8, 4, 245, 139, 8, 4, 245, 130, + 8, 4, 245, 80, 8, 4, 245, 79, 8, 4, 245, 92, 8, 4, 245, 85, 8, 4, 245, + 83, 8, 4, 245, 84, 8, 4, 245, 70, 8, 4, 245, 69, 8, 4, 245, 73, 8, 4, + 245, 71, 8, 4, 219, 74, 8, 4, 219, 73, 8, 4, 219, 94, 8, 4, 219, 83, 8, + 4, 219, 89, 8, 4, 219, 87, 8, 4, 219, 91, 8, 4, 219, 90, 8, 4, 219, 172, + 8, 4, 219, 168, 8, 4, 219, 189, 8, 4, 219, 182, 8, 4, 219, 62, 8, 4, 219, + 58, 8, 4, 219, 72, 8, 4, 219, 63, 8, 4, 219, 95, 8, 4, 219, 156, 8, 4, + 219, 51, 8, 4, 219, 50, 8, 4, 219, 56, 8, 4, 219, 54, 8, 4, 219, 52, 8, + 4, 219, 53, 8, 4, 219, 44, 8, 4, 219, 43, 8, 4, 219, 48, 8, 4, 219, 47, + 8, 4, 219, 45, 8, 4, 219, 46, 8, 4, 248, 197, 8, 4, 248, 185, 8, 4, 249, + 15, 8, 4, 248, 216, 8, 4, 248, 249, 8, 4, 248, 253, 8, 4, 248, 252, 8, 4, + 249, 143, 8, 4, 249, 138, 8, 4, 249, 207, 8, 4, 249, 162, 8, 4, 247, 95, + 8, 4, 247, 96, 8, 4, 248, 145, 8, 4, 247, 128, 8, 4, 248, 167, 8, 4, 248, + 147, 8, 4, 249, 41, 8, 4, 249, 92, 8, 4, 249, 53, 8, 4, 247, 88, 8, 4, + 247, 86, 8, 4, 247, 111, 8, 4, 247, 94, 8, 4, 247, 89, 8, 4, 247, 92, 8, + 4, 221, 161, 8, 4, 221, 157, 8, 4, 221, 205, 8, 4, 221, 169, 8, 4, 221, + 198, 8, 4, 221, 200, 8, 4, 221, 199, 8, 4, 222, 110, 8, 4, 222, 97, 8, 4, + 222, 155, 8, 4, 222, 115, 8, 4, 220, 244, 8, 4, 220, 243, 8, 4, 220, 246, + 8, 4, 220, 245, 8, 4, 221, 113, 8, 4, 221, 110, 8, 4, 101, 8, 4, 221, + 119, 8, 4, 222, 40, 8, 4, 222, 87, 8, 4, 222, 57, 8, 4, 220, 231, 8, 4, + 220, 228, 8, 4, 221, 0, 8, 4, 220, 242, 8, 4, 220, 232, 8, 4, 220, 240, + 8, 4, 249, 109, 8, 4, 249, 108, 8, 4, 249, 114, 8, 4, 249, 110, 8, 4, + 249, 111, 8, 4, 249, 113, 8, 4, 249, 112, 8, 4, 249, 125, 8, 4, 249, 124, + 8, 4, 249, 132, 8, 4, 249, 126, 8, 4, 249, 99, 8, 4, 249, 101, 8, 4, 249, + 100, 8, 4, 249, 104, 8, 4, 249, 103, 8, 4, 249, 107, 8, 4, 249, 105, 8, + 4, 249, 117, 8, 4, 249, 120, 8, 4, 249, 118, 8, 4, 249, 95, 8, 4, 249, + 94, 8, 4, 249, 102, 8, 4, 249, 98, 8, 4, 249, 96, 8, 4, 249, 97, 8, 4, + 232, 156, 8, 4, 232, 155, 8, 4, 232, 160, 8, 4, 232, 157, 8, 4, 232, 158, + 8, 4, 232, 159, 8, 4, 232, 166, 8, 4, 232, 165, 8, 4, 232, 169, 8, 4, + 232, 167, 8, 4, 232, 150, 8, 4, 232, 149, 8, 4, 232, 154, 8, 4, 232, 151, + 8, 4, 232, 161, 8, 4, 232, 164, 8, 4, 232, 162, 8, 4, 232, 144, 8, 4, + 232, 143, 8, 4, 232, 148, 8, 4, 232, 147, 8, 4, 232, 145, 8, 4, 232, 146, + 8, 4, 243, 13, 8, 4, 243, 12, 8, 4, 243, 19, 8, 4, 243, 14, 8, 4, 243, + 16, 8, 4, 243, 15, 8, 4, 243, 18, 8, 4, 243, 17, 8, 4, 243, 24, 8, 4, + 243, 23, 8, 4, 243, 26, 8, 4, 243, 25, 8, 4, 243, 7, 8, 4, 243, 8, 8, 4, + 243, 10, 8, 4, 243, 9, 8, 4, 243, 11, 8, 4, 243, 20, 8, 4, 243, 22, 8, 4, + 243, 21, 8, 4, 243, 6, 8, 4, 232, 21, 8, 4, 232, 20, 8, 4, 232, 62, 8, 4, + 232, 24, 8, 4, 232, 44, 8, 4, 232, 58, 8, 4, 232, 57, 8, 4, 232, 201, 8, + 4, 208, 8, 4, 232, 212, 8, 4, 231, 95, 8, 4, 231, 97, 8, 4, 231, 96, 8, + 4, 231, 184, 8, 4, 231, 173, 8, 4, 231, 204, 8, 4, 231, 191, 8, 4, 232, + 121, 8, 4, 232, 141, 8, 4, 232, 130, 8, 4, 231, 91, 8, 4, 231, 88, 8, 4, + 231, 144, 8, 4, 231, 94, 8, 4, 231, 92, 8, 4, 231, 93, 8, 4, 243, 77, 8, + 4, 243, 76, 8, 4, 243, 82, 8, 4, 243, 78, 8, 4, 243, 79, 8, 4, 243, 81, + 8, 4, 243, 80, 8, 4, 243, 87, 8, 4, 243, 86, 8, 4, 243, 89, 8, 4, 243, + 88, 8, 4, 243, 69, 8, 4, 243, 71, 8, 4, 243, 70, 8, 4, 243, 73, 8, 4, + 243, 75, 8, 4, 243, 74, 8, 4, 243, 83, 8, 4, 243, 85, 8, 4, 243, 84, 8, + 4, 243, 65, 8, 4, 243, 64, 8, 4, 243, 72, 8, 4, 243, 68, 8, 4, 243, 66, + 8, 4, 243, 67, 8, 4, 243, 59, 8, 4, 243, 58, 8, 4, 243, 63, 8, 4, 243, + 62, 8, 4, 243, 60, 8, 4, 243, 61, 8, 4, 235, 27, 8, 4, 235, 22, 8, 4, + 235, 67, 8, 4, 235, 32, 8, 4, 235, 61, 8, 4, 235, 60, 8, 4, 235, 63, 8, + 4, 235, 62, 8, 4, 235, 141, 8, 4, 235, 133, 8, 4, 235, 188, 8, 4, 235, + 147, 8, 4, 234, 214, 8, 4, 234, 213, 8, 4, 234, 216, 8, 4, 234, 215, 8, + 4, 234, 242, 8, 4, 234, 236, 8, 4, 235, 12, 8, 4, 234, 245, 8, 4, 235, + 82, 8, 4, 235, 122, 8, 4, 235, 89, 8, 4, 234, 209, 8, 4, 234, 208, 8, 4, + 234, 231, 8, 4, 234, 212, 8, 4, 234, 210, 8, 4, 234, 211, 8, 4, 234, 191, + 8, 4, 234, 190, 8, 4, 234, 198, 8, 4, 234, 194, 8, 4, 234, 192, 8, 4, + 234, 193, 8, 4, 244, 80, 8, 4, 244, 79, 8, 4, 244, 103, 8, 4, 244, 89, 8, + 4, 244, 96, 8, 4, 244, 95, 8, 4, 244, 98, 8, 4, 244, 97, 8, 4, 244, 214, + 8, 4, 244, 209, 8, 4, 245, 0, 8, 4, 244, 223, 8, 4, 244, 0, 8, 4, 243, + 255, 8, 4, 244, 2, 8, 4, 244, 1, 8, 4, 244, 51, 8, 4, 244, 49, 8, 4, 244, + 68, 8, 4, 244, 59, 8, 4, 244, 164, 8, 4, 244, 162, 8, 4, 244, 191, 8, 4, + 244, 174, 8, 4, 243, 246, 8, 4, 243, 245, 8, 4, 244, 17, 8, 4, 243, 254, + 8, 4, 243, 247, 8, 4, 243, 253, 8, 4, 236, 89, 8, 4, 236, 88, 8, 4, 236, + 113, 8, 4, 236, 99, 8, 4, 236, 107, 8, 4, 236, 109, 8, 4, 236, 108, 8, 4, + 236, 203, 8, 4, 236, 192, 8, 4, 175, 8, 4, 236, 227, 8, 4, 235, 250, 8, + 4, 235, 252, 8, 4, 235, 251, 8, 4, 236, 31, 8, 4, 236, 27, 8, 4, 236, 57, + 8, 4, 236, 38, 8, 4, 236, 159, 8, 4, 236, 156, 8, 4, 236, 184, 8, 4, 236, + 162, 8, 4, 235, 240, 8, 4, 235, 238, 8, 4, 236, 7, 8, 4, 235, 249, 8, 4, + 235, 243, 8, 4, 235, 247, 8, 4, 244, 146, 8, 4, 244, 145, 8, 4, 244, 150, + 8, 4, 244, 147, 8, 4, 244, 149, 8, 4, 244, 148, 8, 4, 244, 157, 8, 4, + 244, 156, 8, 4, 244, 160, 8, 4, 244, 158, 8, 4, 244, 137, 8, 4, 244, 136, + 8, 4, 244, 139, 8, 4, 244, 138, 8, 4, 244, 142, 8, 4, 244, 141, 8, 4, + 244, 144, 8, 4, 244, 143, 8, 4, 244, 152, 8, 4, 244, 151, 8, 4, 244, 155, + 8, 4, 244, 153, 8, 4, 244, 132, 8, 4, 244, 131, 8, 4, 244, 140, 8, 4, + 244, 135, 8, 4, 244, 133, 8, 4, 244, 134, 8, 4, 233, 214, 8, 4, 233, 215, + 8, 4, 233, 227, 8, 4, 233, 226, 8, 4, 233, 229, 8, 4, 233, 228, 8, 4, + 233, 205, 8, 4, 233, 207, 8, 4, 233, 206, 8, 4, 233, 210, 8, 4, 233, 209, + 8, 4, 233, 212, 8, 4, 233, 211, 8, 4, 233, 216, 8, 4, 233, 218, 8, 4, + 233, 217, 8, 4, 233, 201, 8, 4, 233, 200, 8, 4, 233, 208, 8, 4, 233, 204, + 8, 4, 233, 202, 8, 4, 233, 203, 8, 4, 242, 133, 8, 4, 242, 132, 8, 4, + 242, 139, 8, 4, 242, 134, 8, 4, 242, 136, 8, 4, 242, 135, 8, 4, 242, 138, + 8, 4, 242, 137, 8, 4, 242, 144, 8, 4, 242, 143, 8, 4, 242, 146, 8, 4, + 242, 145, 8, 4, 242, 125, 8, 4, 242, 124, 8, 4, 242, 127, 8, 4, 242, 126, + 8, 4, 242, 129, 8, 4, 242, 128, 8, 4, 242, 131, 8, 4, 242, 130, 8, 4, + 242, 140, 8, 4, 242, 142, 8, 4, 242, 141, 8, 4, 232, 89, 8, 4, 232, 91, + 8, 4, 232, 90, 8, 4, 232, 108, 8, 4, 232, 107, 8, 4, 232, 115, 8, 4, 232, + 110, 8, 4, 232, 71, 8, 4, 232, 70, 8, 4, 232, 72, 8, 4, 232, 78, 8, 4, + 232, 75, 8, 4, 232, 84, 8, 4, 232, 79, 8, 4, 232, 102, 8, 4, 232, 106, 8, + 4, 232, 103, 8, 4, 243, 92, 8, 4, 243, 100, 8, 4, 243, 108, 8, 4, 243, + 173, 8, 4, 243, 167, 8, 4, 155, 8, 4, 243, 183, 8, 4, 242, 157, 8, 4, + 242, 156, 8, 4, 242, 159, 8, 4, 242, 158, 8, 4, 242, 186, 8, 4, 242, 181, + 8, 4, 243, 4, 8, 4, 242, 244, 8, 4, 243, 125, 8, 4, 243, 162, 8, 4, 243, + 135, 8, 4, 218, 243, 8, 4, 218, 231, 8, 4, 219, 7, 8, 4, 218, 251, 8, 4, + 218, 157, 8, 4, 218, 159, 8, 4, 218, 158, 8, 4, 218, 170, 8, 4, 218, 187, + 8, 4, 218, 175, 8, 4, 218, 214, 8, 4, 218, 227, 8, 4, 218, 218, 8, 4, + 217, 28, 8, 4, 217, 27, 8, 4, 217, 42, 8, 4, 217, 30, 8, 4, 217, 35, 8, + 4, 217, 37, 8, 4, 217, 36, 8, 4, 217, 100, 8, 4, 217, 97, 8, 4, 217, 114, + 8, 4, 217, 103, 8, 4, 217, 6, 8, 4, 217, 8, 8, 4, 217, 7, 8, 4, 217, 17, + 8, 4, 217, 16, 8, 4, 217, 21, 8, 4, 217, 18, 8, 4, 217, 82, 8, 4, 217, + 92, 8, 4, 217, 86, 8, 4, 217, 2, 8, 4, 217, 1, 8, 4, 217, 13, 8, 4, 217, + 5, 8, 4, 217, 3, 8, 4, 217, 4, 8, 4, 216, 249, 8, 4, 216, 248, 8, 4, 216, + 254, 8, 4, 216, 252, 8, 4, 216, 250, 8, 4, 216, 251, 8, 4, 250, 215, 8, + 4, 250, 212, 8, 4, 250, 235, 8, 4, 250, 223, 8, 4, 250, 232, 8, 4, 250, + 226, 8, 4, 250, 234, 8, 4, 250, 233, 8, 4, 251, 124, 8, 4, 251, 118, 8, + 4, 251, 169, 8, 4, 251, 143, 8, 4, 250, 84, 8, 4, 250, 86, 8, 4, 250, 85, + 8, 4, 250, 116, 8, 4, 250, 109, 8, 4, 250, 182, 8, 4, 250, 129, 8, 4, + 251, 71, 8, 4, 251, 99, 8, 4, 251, 75, 8, 4, 250, 68, 8, 4, 250, 67, 8, + 4, 250, 92, 8, 4, 250, 82, 8, 4, 250, 71, 8, 4, 250, 81, 8, 4, 250, 49, + 8, 4, 250, 48, 8, 4, 250, 58, 8, 4, 250, 55, 8, 4, 250, 50, 8, 4, 250, + 52, 8, 4, 216, 232, 8, 4, 216, 231, 8, 4, 216, 238, 8, 4, 216, 233, 8, 4, + 216, 235, 8, 4, 216, 234, 8, 4, 216, 237, 8, 4, 216, 236, 8, 4, 216, 244, + 8, 4, 216, 243, 8, 4, 216, 247, 8, 4, 216, 245, 8, 4, 216, 228, 8, 4, + 216, 230, 8, 4, 216, 229, 8, 4, 216, 239, 8, 4, 216, 242, 8, 4, 216, 240, + 8, 4, 216, 223, 8, 4, 216, 227, 8, 4, 216, 226, 8, 4, 216, 224, 8, 4, + 216, 225, 8, 4, 216, 218, 8, 4, 216, 217, 8, 4, 216, 222, 8, 4, 216, 221, + 8, 4, 216, 219, 8, 4, 216, 220, 8, 4, 231, 31, 8, 4, 231, 30, 8, 4, 231, + 36, 8, 4, 231, 32, 8, 4, 231, 33, 8, 4, 231, 35, 8, 4, 231, 34, 8, 4, + 231, 40, 8, 4, 231, 39, 8, 4, 231, 42, 8, 4, 231, 41, 8, 4, 231, 25, 8, + 4, 231, 26, 8, 4, 231, 28, 8, 4, 231, 29, 8, 4, 231, 37, 8, 4, 231, 38, + 8, 4, 231, 21, 8, 4, 231, 27, 8, 4, 231, 24, 8, 4, 231, 22, 8, 4, 231, + 23, 8, 4, 231, 16, 8, 4, 231, 15, 8, 4, 231, 20, 8, 4, 231, 19, 8, 4, + 231, 17, 8, 4, 231, 18, 8, 4, 224, 84, 8, 4, 182, 8, 4, 224, 140, 8, 4, + 224, 86, 8, 4, 224, 133, 8, 4, 224, 135, 8, 4, 224, 134, 8, 4, 226, 127, + 8, 4, 226, 120, 8, 4, 226, 177, 8, 4, 226, 133, 8, 4, 223, 63, 8, 4, 223, + 65, 8, 4, 223, 64, 8, 4, 224, 12, 8, 4, 224, 2, 8, 4, 224, 26, 8, 4, 224, + 13, 8, 4, 225, 36, 8, 4, 226, 94, 8, 4, 225, 56, 8, 4, 223, 44, 8, 4, + 223, 42, 8, 4, 223, 103, 8, 4, 223, 62, 8, 4, 223, 46, 8, 4, 223, 53, 8, + 4, 222, 215, 8, 4, 222, 214, 8, 4, 223, 21, 8, 4, 222, 220, 8, 4, 222, + 216, 8, 4, 222, 219, 8, 4, 223, 184, 8, 4, 223, 183, 8, 4, 223, 189, 8, + 4, 223, 185, 8, 4, 223, 186, 8, 4, 223, 188, 8, 4, 223, 187, 8, 4, 223, + 196, 8, 4, 223, 195, 8, 4, 223, 218, 8, 4, 223, 197, 8, 4, 223, 180, 8, + 4, 223, 179, 8, 4, 223, 182, 8, 4, 223, 181, 8, 4, 223, 191, 8, 4, 223, + 194, 8, 4, 223, 192, 8, 4, 223, 176, 8, 4, 223, 175, 8, 4, 223, 178, 8, + 4, 223, 177, 8, 4, 223, 170, 8, 4, 223, 169, 8, 4, 223, 174, 8, 4, 223, + 173, 8, 4, 223, 171, 8, 4, 223, 172, 8, 4, 217, 75, 8, 4, 217, 74, 8, 4, + 217, 80, 8, 4, 217, 77, 8, 4, 217, 57, 8, 4, 217, 59, 8, 4, 217, 58, 8, + 4, 217, 62, 8, 4, 217, 61, 8, 4, 217, 65, 8, 4, 217, 63, 8, 4, 217, 69, + 8, 4, 217, 68, 8, 4, 217, 72, 8, 4, 217, 70, 8, 4, 217, 53, 8, 4, 217, + 52, 8, 4, 217, 60, 8, 4, 217, 56, 8, 4, 217, 54, 8, 4, 217, 55, 8, 4, + 217, 45, 8, 4, 217, 44, 8, 4, 217, 49, 8, 4, 217, 48, 8, 4, 217, 46, 8, + 4, 217, 47, 8, 4, 251, 51, 8, 4, 251, 48, 8, 4, 251, 69, 8, 4, 251, 57, + 8, 4, 250, 249, 8, 4, 250, 248, 8, 4, 250, 251, 8, 4, 250, 250, 8, 4, + 251, 5, 8, 4, 251, 4, 8, 4, 251, 11, 8, 4, 251, 7, 8, 4, 251, 36, 8, 4, + 251, 34, 8, 4, 251, 46, 8, 4, 251, 38, 8, 4, 250, 243, 8, 4, 250, 253, 8, + 4, 250, 247, 8, 4, 250, 244, 8, 4, 250, 246, 8, 4, 250, 237, 8, 4, 250, + 236, 8, 4, 250, 241, 8, 4, 250, 240, 8, 4, 250, 238, 8, 4, 250, 239, 8, + 4, 227, 51, 8, 4, 227, 52, 8, 4, 227, 38, 8, 4, 227, 39, 8, 4, 227, 42, + 8, 4, 227, 41, 8, 4, 227, 44, 8, 4, 227, 43, 8, 4, 227, 46, 8, 4, 227, + 45, 8, 4, 227, 50, 8, 4, 227, 47, 8, 4, 227, 34, 8, 4, 227, 33, 8, 4, + 227, 40, 8, 4, 227, 37, 8, 4, 227, 35, 8, 4, 227, 36, 8, 4, 227, 28, 8, + 4, 227, 27, 8, 4, 227, 32, 8, 4, 227, 31, 8, 4, 227, 29, 8, 4, 227, 30, + 8, 4, 231, 169, 8, 4, 231, 168, 8, 4, 231, 171, 8, 4, 231, 170, 8, 4, + 231, 161, 8, 4, 231, 163, 8, 4, 231, 162, 8, 4, 231, 165, 8, 4, 231, 164, + 8, 4, 231, 167, 8, 4, 231, 166, 8, 4, 231, 156, 8, 4, 231, 155, 8, 4, + 231, 160, 8, 4, 231, 159, 8, 4, 231, 157, 8, 4, 231, 158, 8, 4, 231, 150, + 8, 4, 231, 149, 8, 4, 231, 154, 8, 4, 231, 153, 8, 4, 231, 151, 8, 4, + 231, 152, 8, 4, 224, 253, 8, 4, 224, 250, 8, 4, 225, 25, 8, 4, 225, 7, 8, + 4, 224, 163, 8, 4, 224, 165, 8, 4, 224, 164, 8, 4, 224, 178, 8, 4, 224, + 176, 8, 4, 224, 200, 8, 4, 224, 193, 8, 4, 224, 226, 8, 4, 224, 223, 8, + 4, 224, 246, 8, 4, 224, 233, 8, 4, 224, 159, 8, 4, 224, 158, 8, 4, 224, + 170, 8, 4, 224, 162, 8, 4, 224, 160, 8, 4, 224, 161, 8, 4, 224, 143, 8, + 4, 224, 142, 8, 4, 224, 149, 8, 4, 224, 146, 8, 4, 224, 144, 8, 4, 224, + 145, 8, 4, 227, 228, 8, 4, 227, 223, 8, 4, 203, 8, 4, 227, 233, 8, 4, + 227, 6, 8, 4, 227, 8, 8, 4, 227, 7, 8, 4, 227, 60, 8, 4, 227, 54, 8, 4, + 227, 75, 8, 4, 227, 63, 8, 4, 227, 155, 8, 4, 227, 216, 8, 4, 227, 185, + 8, 4, 226, 255, 8, 4, 226, 253, 8, 4, 227, 22, 8, 4, 227, 5, 8, 4, 227, + 1, 8, 4, 227, 2, 8, 4, 226, 238, 8, 4, 226, 237, 8, 4, 226, 243, 8, 4, + 226, 241, 8, 4, 226, 239, 8, 4, 226, 240, 8, 4, 237, 89, 8, 4, 237, 88, + 8, 4, 237, 98, 8, 4, 237, 90, 8, 4, 237, 94, 8, 4, 237, 93, 8, 4, 237, + 96, 8, 4, 237, 95, 8, 4, 237, 34, 8, 4, 237, 33, 8, 4, 237, 36, 8, 4, + 237, 35, 8, 4, 237, 47, 8, 4, 237, 46, 8, 4, 237, 59, 8, 4, 237, 49, 8, + 4, 237, 28, 8, 4, 237, 26, 8, 4, 237, 43, 8, 4, 237, 32, 8, 4, 237, 29, + 8, 4, 237, 30, 8, 4, 237, 20, 8, 4, 237, 19, 8, 4, 237, 24, 8, 4, 237, + 23, 8, 4, 237, 21, 8, 4, 237, 22, 8, 4, 228, 114, 8, 4, 228, 112, 8, 4, + 228, 121, 8, 4, 228, 115, 8, 4, 228, 118, 8, 4, 228, 117, 8, 4, 228, 120, + 8, 4, 228, 119, 8, 4, 228, 70, 8, 4, 228, 67, 8, 4, 228, 72, 8, 4, 228, + 71, 8, 4, 228, 101, 8, 4, 228, 100, 8, 4, 228, 110, 8, 4, 228, 104, 8, 4, + 228, 62, 8, 4, 228, 58, 8, 4, 228, 98, 8, 4, 228, 66, 8, 4, 228, 64, 8, + 4, 228, 65, 8, 4, 228, 42, 8, 4, 228, 40, 8, 4, 228, 52, 8, 4, 228, 45, + 8, 4, 228, 43, 8, 4, 228, 44, 8, 4, 237, 78, 8, 4, 237, 77, 8, 4, 237, + 84, 8, 4, 237, 79, 8, 4, 237, 81, 8, 4, 237, 80, 8, 4, 237, 83, 8, 4, + 237, 82, 8, 4, 237, 69, 8, 4, 237, 71, 8, 4, 237, 70, 8, 4, 237, 74, 8, + 4, 237, 73, 8, 4, 237, 76, 8, 4, 237, 75, 8, 4, 237, 65, 8, 4, 237, 64, + 8, 4, 237, 72, 8, 4, 237, 68, 8, 4, 237, 66, 8, 4, 237, 67, 8, 4, 237, + 61, 8, 4, 237, 60, 8, 4, 237, 63, 8, 4, 237, 62, 8, 4, 232, 7, 8, 4, 232, + 6, 8, 4, 232, 13, 8, 4, 232, 8, 8, 4, 232, 10, 8, 4, 232, 9, 8, 4, 232, + 12, 8, 4, 232, 11, 8, 4, 231, 253, 8, 4, 231, 254, 8, 4, 232, 2, 8, 4, + 232, 1, 8, 4, 232, 5, 8, 4, 232, 3, 8, 4, 231, 249, 8, 4, 232, 0, 8, 4, + 231, 252, 8, 4, 231, 250, 8, 4, 231, 251, 8, 4, 231, 244, 8, 4, 231, 243, + 8, 4, 231, 248, 8, 4, 231, 247, 8, 4, 231, 245, 8, 4, 231, 246, 8, 4, + 231, 59, 8, 4, 231, 58, 8, 4, 231, 67, 8, 4, 231, 61, 8, 4, 231, 64, 8, + 4, 231, 63, 8, 4, 231, 66, 8, 4, 231, 65, 8, 4, 231, 47, 8, 4, 231, 49, + 8, 4, 231, 48, 8, 4, 231, 52, 8, 4, 231, 51, 8, 4, 231, 56, 8, 4, 231, + 53, 8, 4, 231, 45, 8, 4, 231, 44, 8, 4, 231, 50, 8, 4, 231, 46, 8, 4, + 218, 123, 8, 4, 218, 122, 8, 4, 218, 130, 8, 4, 218, 125, 8, 4, 218, 127, + 8, 4, 218, 126, 8, 4, 218, 129, 8, 4, 218, 128, 8, 4, 218, 112, 8, 4, + 218, 113, 8, 4, 218, 117, 8, 4, 218, 116, 8, 4, 218, 121, 8, 4, 218, 119, + 8, 4, 218, 94, 8, 4, 218, 92, 8, 4, 218, 104, 8, 4, 218, 97, 8, 4, 218, + 95, 8, 4, 218, 96, 8, 4, 217, 237, 8, 4, 217, 235, 8, 4, 217, 250, 8, 4, + 217, 238, 8, 4, 217, 245, 8, 4, 217, 244, 8, 4, 217, 247, 8, 4, 217, 246, + 8, 4, 217, 185, 8, 4, 217, 184, 8, 4, 217, 187, 8, 4, 217, 186, 8, 4, + 217, 212, 8, 4, 217, 209, 8, 4, 217, 231, 8, 4, 217, 215, 8, 4, 217, 177, + 8, 4, 217, 175, 8, 4, 217, 200, 8, 4, 217, 183, 8, 4, 217, 180, 8, 4, + 217, 181, 8, 4, 217, 160, 8, 4, 217, 159, 8, 4, 217, 166, 8, 4, 217, 163, + 8, 4, 217, 161, 8, 4, 217, 162, 8, 32, 228, 101, 8, 32, 235, 67, 8, 32, + 236, 89, 8, 32, 231, 61, 8, 32, 250, 55, 8, 32, 223, 189, 8, 32, 244, + 143, 8, 32, 244, 174, 8, 32, 233, 196, 8, 32, 242, 133, 8, 32, 234, 193, + 8, 32, 252, 152, 8, 32, 233, 115, 8, 32, 217, 231, 8, 32, 228, 185, 8, + 32, 242, 127, 8, 32, 222, 110, 8, 32, 245, 0, 8, 32, 217, 5, 8, 32, 250, + 49, 8, 32, 249, 97, 8, 32, 251, 228, 8, 32, 244, 139, 8, 32, 231, 53, 8, + 32, 221, 0, 8, 32, 230, 120, 8, 32, 237, 65, 8, 32, 217, 17, 8, 32, 228, + 167, 8, 32, 243, 44, 8, 32, 217, 237, 8, 32, 219, 53, 8, 32, 224, 149, 8, + 32, 219, 156, 8, 32, 217, 114, 8, 32, 237, 59, 8, 32, 231, 24, 8, 32, + 237, 63, 8, 32, 244, 51, 8, 32, 237, 83, 8, 32, 218, 187, 8, 32, 247, + 111, 8, 32, 224, 161, 8, 32, 235, 63, 8, 32, 250, 58, 8, 32, 250, 85, 8, + 32, 250, 223, 8, 32, 242, 130, 8, 32, 224, 253, 8, 32, 217, 4, 8, 32, + 224, 193, 8, 32, 251, 46, 8, 32, 216, 235, 8, 32, 232, 192, 8, 32, 236, + 184, 235, 28, 1, 252, 237, 235, 28, 1, 187, 235, 28, 1, 229, 141, 235, + 28, 1, 249, 207, 235, 28, 1, 222, 155, 235, 28, 1, 222, 35, 235, 28, 1, + 245, 0, 235, 28, 1, 175, 235, 28, 1, 236, 149, 235, 28, 1, 237, 123, 235, + 28, 1, 251, 169, 235, 28, 1, 251, 69, 235, 28, 1, 247, 74, 235, 28, 1, + 221, 55, 235, 28, 1, 221, 47, 235, 28, 1, 196, 235, 28, 1, 208, 235, 28, + 1, 235, 188, 235, 28, 1, 226, 177, 235, 28, 1, 217, 80, 235, 28, 1, 217, + 114, 235, 28, 1, 232, 115, 235, 28, 1, 155, 235, 28, 1, 218, 138, 235, + 28, 1, 243, 121, 235, 28, 1, 246, 8, 235, 28, 1, 219, 7, 235, 28, 1, 225, + 25, 235, 28, 1, 184, 235, 28, 1, 244, 125, 235, 28, 1, 60, 235, 28, 1, + 254, 234, 235, 28, 1, 73, 235, 28, 1, 246, 115, 235, 28, 1, 72, 235, 28, + 1, 74, 235, 28, 1, 68, 235, 28, 1, 220, 110, 235, 28, 1, 220, 105, 235, + 28, 1, 230, 167, 235, 28, 1, 145, 233, 40, 221, 205, 235, 28, 1, 145, + 232, 238, 229, 37, 235, 28, 1, 145, 233, 40, 250, 57, 235, 28, 1, 145, + 233, 40, 252, 41, 235, 28, 1, 145, 233, 40, 208, 235, 28, 1, 145, 233, + 40, 237, 104, 235, 28, 228, 197, 250, 168, 235, 28, 228, 197, 245, 90, + 223, 136, 38, 4, 246, 250, 38, 4, 246, 247, 38, 4, 243, 148, 38, 4, 218, + 224, 38, 4, 218, 223, 38, 4, 229, 191, 38, 4, 252, 91, 38, 4, 252, 137, + 38, 4, 234, 34, 38, 4, 236, 23, 38, 4, 233, 223, 38, 4, 244, 201, 38, 4, + 245, 226, 38, 4, 219, 160, 38, 4, 222, 80, 38, 4, 222, 21, 38, 4, 249, + 28, 38, 4, 249, 25, 38, 4, 235, 118, 38, 4, 227, 200, 38, 4, 249, 82, 38, + 4, 232, 163, 38, 4, 226, 84, 38, 4, 224, 244, 38, 4, 217, 90, 38, 4, 217, + 71, 38, 4, 251, 91, 38, 4, 237, 113, 38, 4, 232, 14, 38, 4, 218, 22, 38, + 4, 236, 183, 38, 4, 232, 98, 38, 4, 244, 184, 38, 4, 234, 16, 38, 4, 232, + 139, 38, 4, 231, 72, 38, 4, 72, 38, 4, 237, 223, 38, 4, 243, 112, 38, 4, + 243, 96, 38, 4, 218, 204, 38, 4, 218, 195, 38, 4, 229, 108, 38, 4, 252, + 89, 38, 4, 252, 84, 38, 4, 234, 32, 38, 4, 236, 21, 38, 4, 233, 222, 38, + 4, 244, 199, 38, 4, 245, 203, 38, 4, 219, 94, 38, 4, 221, 205, 38, 4, + 222, 2, 38, 4, 249, 20, 38, 4, 249, 24, 38, 4, 235, 67, 38, 4, 227, 147, + 38, 4, 249, 15, 38, 4, 232, 160, 38, 4, 224, 140, 38, 4, 224, 221, 38, 4, + 217, 42, 38, 4, 217, 67, 38, 4, 250, 235, 38, 4, 237, 98, 38, 4, 232, 13, + 38, 4, 217, 250, 38, 4, 236, 113, 38, 4, 232, 96, 38, 4, 244, 103, 38, 4, + 233, 196, 38, 4, 232, 62, 38, 4, 231, 67, 38, 4, 60, 38, 4, 254, 131, 38, + 4, 232, 111, 38, 4, 155, 38, 4, 243, 191, 38, 4, 219, 7, 38, 4, 218, 253, + 38, 4, 187, 38, 4, 252, 94, 38, 4, 252, 237, 38, 4, 234, 37, 38, 4, 236, + 26, 38, 4, 236, 25, 38, 4, 233, 225, 38, 4, 244, 204, 38, 4, 246, 8, 38, + 4, 219, 189, 38, 4, 222, 155, 38, 4, 222, 35, 38, 4, 249, 36, 38, 4, 249, + 27, 38, 4, 235, 188, 38, 4, 203, 38, 4, 249, 207, 38, 4, 232, 169, 38, 4, + 226, 177, 38, 4, 225, 25, 38, 4, 217, 114, 38, 4, 217, 80, 38, 4, 251, + 169, 38, 4, 237, 123, 38, 4, 232, 18, 38, 4, 184, 38, 4, 175, 38, 4, 236, + 233, 38, 4, 232, 100, 38, 4, 245, 0, 38, 4, 196, 38, 4, 208, 38, 4, 231, + 77, 38, 4, 230, 127, 38, 4, 230, 124, 38, 4, 242, 248, 38, 4, 218, 180, + 38, 4, 218, 176, 38, 4, 229, 21, 38, 4, 252, 87, 38, 4, 252, 34, 38, 4, + 234, 30, 38, 4, 236, 19, 38, 4, 233, 220, 38, 4, 244, 196, 38, 4, 245, + 134, 38, 4, 219, 64, 38, 4, 221, 122, 38, 4, 221, 236, 38, 4, 249, 18, + 38, 4, 249, 22, 38, 4, 234, 248, 38, 4, 227, 67, 38, 4, 248, 150, 38, 4, + 232, 152, 38, 4, 224, 14, 38, 4, 224, 195, 38, 4, 217, 19, 38, 4, 217, + 64, 38, 4, 250, 130, 38, 4, 237, 50, 38, 4, 232, 4, 38, 4, 217, 216, 38, + 4, 236, 41, 38, 4, 232, 94, 38, 4, 244, 60, 38, 4, 233, 119, 38, 4, 231, + 195, 38, 4, 231, 54, 38, 4, 68, 38, 4, 220, 87, 38, 4, 242, 173, 38, 4, + 242, 163, 38, 4, 218, 165, 38, 4, 218, 161, 38, 4, 228, 202, 38, 4, 252, + 86, 38, 4, 251, 248, 38, 4, 234, 29, 38, 4, 236, 18, 38, 4, 233, 219, 38, + 4, 244, 195, 38, 4, 245, 92, 38, 4, 219, 56, 38, 4, 221, 0, 38, 4, 221, + 223, 38, 4, 249, 16, 38, 4, 249, 21, 38, 4, 234, 231, 38, 4, 227, 22, 38, + 4, 247, 111, 38, 4, 232, 148, 38, 4, 223, 103, 38, 4, 224, 170, 38, 4, + 217, 13, 38, 4, 217, 60, 38, 4, 250, 92, 38, 4, 237, 43, 38, 4, 232, 0, + 38, 4, 217, 200, 38, 4, 236, 7, 38, 4, 232, 93, 38, 4, 244, 17, 38, 4, + 233, 99, 38, 4, 231, 144, 38, 4, 231, 50, 38, 4, 74, 38, 4, 230, 138, 38, + 4, 232, 81, 38, 4, 243, 4, 38, 4, 242, 249, 38, 4, 218, 187, 38, 4, 218, + 181, 38, 4, 229, 37, 38, 4, 252, 88, 38, 4, 252, 41, 38, 4, 234, 31, 38, + 4, 236, 20, 38, 4, 233, 221, 38, 4, 244, 198, 38, 4, 244, 197, 38, 4, + 245, 139, 38, 4, 219, 72, 38, 4, 101, 38, 4, 221, 239, 38, 4, 249, 19, + 38, 4, 249, 23, 38, 4, 235, 12, 38, 4, 227, 75, 38, 4, 248, 167, 38, 4, + 232, 154, 38, 4, 224, 26, 38, 4, 224, 200, 38, 4, 217, 21, 38, 4, 217, + 65, 38, 4, 250, 182, 38, 4, 237, 59, 38, 4, 232, 5, 38, 4, 217, 231, 38, + 4, 236, 57, 38, 4, 232, 95, 38, 4, 244, 68, 38, 4, 233, 136, 38, 4, 231, + 204, 38, 4, 231, 56, 38, 4, 73, 38, 4, 246, 197, 38, 4, 232, 104, 38, 4, + 243, 162, 38, 4, 243, 138, 38, 4, 218, 227, 38, 4, 218, 220, 38, 4, 229, + 198, 38, 4, 252, 92, 38, 4, 252, 144, 38, 4, 234, 35, 38, 4, 236, 24, 38, + 4, 236, 22, 38, 4, 233, 224, 38, 4, 244, 202, 38, 4, 244, 200, 38, 4, + 245, 231, 38, 4, 219, 165, 38, 4, 222, 87, 38, 4, 222, 22, 38, 4, 249, + 29, 38, 4, 249, 26, 38, 4, 235, 122, 38, 4, 227, 216, 38, 4, 249, 92, 38, + 4, 232, 164, 38, 4, 226, 94, 38, 4, 224, 246, 38, 4, 217, 92, 38, 4, 217, + 72, 38, 4, 251, 99, 38, 4, 237, 114, 38, 4, 232, 15, 38, 4, 218, 25, 38, + 4, 236, 184, 38, 4, 232, 99, 38, 4, 232, 97, 38, 4, 244, 191, 38, 4, 244, + 181, 38, 4, 234, 25, 38, 4, 232, 141, 38, 4, 231, 73, 38, 4, 232, 117, + 38, 4, 235, 93, 38, 250, 168, 38, 245, 90, 223, 136, 38, 228, 82, 78, 38, + 4, 232, 153, 246, 8, 38, 4, 232, 153, 175, 38, 4, 232, 153, 224, 14, 38, + 16, 245, 223, 38, 16, 236, 182, 38, 16, 221, 174, 38, 16, 232, 38, 38, + 16, 252, 205, 38, 16, 246, 7, 38, 16, 222, 152, 38, 16, 249, 165, 38, 16, + 248, 149, 38, 16, 235, 253, 38, 16, 221, 125, 38, 16, 248, 166, 38, 16, + 237, 51, 38, 20, 217, 84, 38, 20, 107, 38, 20, 103, 38, 20, 160, 38, 20, + 154, 38, 20, 174, 38, 20, 182, 38, 20, 191, 38, 20, 185, 38, 20, 190, 38, + 4, 232, 153, 196, 38, 4, 232, 153, 248, 167, 31, 6, 1, 217, 88, 31, 3, 1, + 217, 88, 31, 6, 1, 247, 71, 31, 3, 1, 247, 71, 31, 6, 1, 210, 247, 73, + 31, 3, 1, 210, 247, 73, 31, 6, 1, 237, 162, 31, 3, 1, 237, 162, 31, 6, 1, + 248, 181, 31, 3, 1, 248, 181, 31, 6, 1, 233, 123, 220, 102, 31, 3, 1, + 233, 123, 220, 102, 31, 6, 1, 252, 2, 230, 143, 31, 3, 1, 252, 2, 230, + 143, 31, 6, 1, 232, 123, 218, 11, 31, 3, 1, 232, 123, 218, 11, 31, 6, 1, + 218, 8, 2, 252, 234, 218, 11, 31, 3, 1, 218, 8, 2, 252, 234, 218, 11, 31, + 6, 1, 237, 160, 218, 36, 31, 3, 1, 237, 160, 218, 36, 31, 6, 1, 210, 217, + 200, 31, 3, 1, 210, 217, 200, 31, 6, 1, 237, 160, 60, 31, 3, 1, 237, 160, + 60, 31, 6, 1, 250, 197, 235, 25, 217, 178, 31, 3, 1, 250, 197, 235, 25, + 217, 178, 31, 6, 1, 252, 46, 217, 178, 31, 3, 1, 252, 46, 217, 178, 31, + 6, 1, 237, 160, 250, 197, 235, 25, 217, 178, 31, 3, 1, 237, 160, 250, + 197, 235, 25, 217, 178, 31, 6, 1, 217, 233, 31, 3, 1, 217, 233, 31, 6, 1, + 224, 21, 249, 92, 31, 3, 1, 224, 21, 249, 92, 31, 6, 1, 224, 21, 246, + 217, 31, 3, 1, 224, 21, 246, 217, 31, 6, 1, 224, 21, 246, 205, 31, 3, 1, + 224, 21, 246, 205, 31, 6, 1, 233, 127, 74, 31, 3, 1, 233, 127, 74, 31, 6, + 1, 252, 70, 74, 31, 3, 1, 252, 70, 74, 31, 6, 1, 51, 233, 127, 74, 31, 3, + 1, 51, 233, 127, 74, 31, 1, 233, 86, 74, 36, 31, 219, 42, 36, 31, 222, + 66, 233, 162, 55, 36, 31, 242, 162, 233, 162, 55, 36, 31, 221, 232, 233, + 162, 55, 224, 53, 253, 251, 36, 31, 236, 194, 36, 31, 229, 203, 31, 236, + 194, 31, 229, 203, 31, 6, 1, 247, 82, 31, 3, 1, 247, 82, 31, 6, 1, 247, + 64, 31, 3, 1, 247, 64, 31, 6, 1, 217, 50, 31, 3, 1, 217, 50, 31, 6, 1, + 251, 108, 31, 3, 1, 251, 108, 31, 6, 1, 247, 63, 31, 3, 1, 247, 63, 31, + 6, 1, 222, 88, 2, 233, 193, 96, 31, 3, 1, 222, 88, 2, 233, 193, 96, 31, + 6, 1, 220, 223, 31, 3, 1, 220, 223, 31, 6, 1, 221, 33, 31, 3, 1, 221, 33, + 31, 6, 1, 221, 37, 31, 3, 1, 221, 37, 31, 6, 1, 222, 93, 31, 3, 1, 222, + 93, 31, 6, 1, 242, 151, 31, 3, 1, 242, 151, 31, 6, 1, 224, 155, 31, 3, 1, + 224, 155, 139, 1, 60, 139, 1, 175, 139, 1, 68, 139, 1, 236, 7, 139, 1, + 246, 250, 139, 1, 227, 200, 139, 1, 222, 142, 139, 1, 74, 139, 1, 231, + 67, 139, 1, 72, 139, 1, 235, 188, 139, 1, 187, 139, 1, 227, 98, 139, 1, + 227, 143, 139, 1, 235, 117, 139, 1, 234, 15, 139, 1, 222, 152, 139, 1, + 232, 168, 139, 1, 232, 17, 139, 1, 189, 139, 1, 223, 43, 139, 1, 233, 99, + 139, 1, 224, 216, 139, 1, 224, 140, 139, 1, 224, 225, 139, 1, 225, 44, + 139, 1, 235, 208, 139, 1, 236, 159, 139, 1, 231, 116, 139, 1, 231, 144, + 139, 1, 231, 255, 139, 1, 217, 214, 139, 1, 224, 170, 139, 1, 217, 182, + 139, 1, 184, 139, 1, 231, 147, 139, 1, 236, 157, 139, 1, 229, 145, 139, + 1, 232, 14, 139, 1, 231, 146, 139, 1, 228, 199, 139, 1, 218, 164, 139, 1, + 229, 191, 139, 1, 245, 226, 139, 1, 227, 22, 139, 1, 234, 231, 139, 1, + 233, 196, 139, 1, 232, 62, 139, 1, 227, 161, 139, 1, 227, 249, 139, 1, + 236, 168, 139, 1, 232, 86, 139, 1, 232, 100, 139, 1, 232, 115, 139, 1, + 224, 200, 139, 1, 228, 200, 139, 1, 245, 92, 139, 1, 245, 136, 139, 1, + 219, 7, 139, 1, 208, 139, 1, 235, 67, 139, 1, 229, 108, 139, 1, 234, 244, + 139, 1, 236, 57, 139, 1, 234, 33, 139, 1, 227, 187, 139, 1, 233, 251, + 139, 1, 196, 139, 1, 221, 205, 139, 1, 236, 113, 139, 1, 233, 136, 139, + 1, 234, 36, 139, 1, 222, 50, 139, 1, 236, 26, 139, 1, 222, 65, 139, 1, + 231, 145, 139, 1, 226, 147, 139, 1, 246, 4, 139, 1, 236, 28, 139, 1, 236, + 54, 139, 36, 164, 236, 36, 139, 36, 164, 220, 250, 139, 232, 16, 139, + 245, 90, 223, 136, 139, 250, 175, 139, 250, 168, 139, 225, 67, 139, 228, + 82, 78, 58, 1, 251, 21, 145, 217, 241, 229, 72, 58, 1, 251, 21, 145, 218, + 46, 229, 72, 58, 1, 251, 21, 145, 217, 241, 225, 8, 58, 1, 251, 21, 145, + 218, 46, 225, 8, 58, 1, 251, 21, 145, 217, 241, 228, 98, 58, 1, 251, 21, + 145, 218, 46, 228, 98, 58, 1, 251, 21, 145, 217, 241, 227, 22, 58, 1, + 251, 21, 145, 218, 46, 227, 22, 58, 1, 246, 85, 247, 143, 145, 135, 58, + 1, 116, 247, 143, 145, 135, 58, 1, 233, 194, 247, 143, 145, 135, 58, 1, + 109, 247, 143, 145, 135, 58, 1, 246, 84, 247, 143, 145, 135, 58, 1, 246, + 85, 247, 143, 235, 109, 145, 135, 58, 1, 116, 247, 143, 235, 109, 145, + 135, 58, 1, 233, 194, 247, 143, 235, 109, 145, 135, 58, 1, 109, 247, 143, + 235, 109, 145, 135, 58, 1, 246, 84, 247, 143, 235, 109, 145, 135, 58, 1, + 246, 85, 235, 109, 145, 135, 58, 1, 116, 235, 109, 145, 135, 58, 1, 233, + 194, 235, 109, 145, 135, 58, 1, 109, 235, 109, 145, 135, 58, 1, 246, 84, + 235, 109, 145, 135, 58, 1, 61, 69, 135, 58, 1, 61, 224, 55, 58, 1, 61, + 186, 135, 58, 1, 234, 237, 45, 250, 124, 254, 119, 58, 1, 227, 241, 108, + 65, 58, 1, 227, 241, 113, 65, 58, 1, 227, 241, 246, 95, 78, 58, 1, 227, + 241, 237, 170, 246, 95, 78, 58, 1, 109, 237, 170, 246, 95, 78, 58, 1, + 223, 125, 25, 116, 221, 132, 58, 1, 223, 125, 25, 109, 221, 132, 7, 6, 1, + 246, 241, 254, 168, 7, 3, 1, 246, 241, 254, 168, 7, 6, 1, 246, 241, 254, + 191, 7, 3, 1, 246, 241, 254, 191, 7, 6, 1, 243, 136, 7, 3, 1, 243, 136, + 7, 6, 1, 220, 189, 7, 3, 1, 220, 189, 7, 6, 1, 221, 94, 7, 3, 1, 221, 94, + 7, 6, 1, 250, 90, 7, 3, 1, 250, 90, 7, 6, 1, 250, 91, 2, 250, 168, 7, 3, + 1, 250, 91, 2, 250, 168, 7, 1, 3, 6, 246, 74, 7, 1, 3, 6, 198, 7, 6, 1, + 255, 58, 7, 3, 1, 255, 58, 7, 6, 1, 254, 93, 7, 3, 1, 254, 93, 7, 6, 1, + 253, 232, 7, 3, 1, 253, 232, 7, 6, 1, 253, 220, 7, 3, 1, 253, 220, 7, 6, + 1, 253, 221, 2, 186, 135, 7, 3, 1, 253, 221, 2, 186, 135, 7, 6, 1, 253, + 212, 7, 3, 1, 253, 212, 7, 6, 1, 210, 251, 203, 2, 248, 145, 7, 3, 1, + 210, 251, 203, 2, 248, 145, 7, 6, 1, 237, 18, 2, 92, 7, 3, 1, 237, 18, 2, + 92, 7, 6, 1, 237, 18, 2, 249, 11, 92, 7, 3, 1, 237, 18, 2, 249, 11, 92, + 7, 6, 1, 237, 18, 2, 214, 25, 249, 11, 92, 7, 3, 1, 237, 18, 2, 214, 25, + 249, 11, 92, 7, 6, 1, 252, 1, 153, 7, 3, 1, 252, 1, 153, 7, 6, 1, 235, + 202, 2, 116, 92, 7, 3, 1, 235, 202, 2, 116, 92, 7, 6, 1, 142, 2, 171, + 214, 230, 74, 7, 3, 1, 142, 2, 171, 214, 230, 74, 7, 6, 1, 142, 2, 234, + 247, 7, 3, 1, 142, 2, 234, 247, 7, 6, 1, 230, 127, 7, 3, 1, 230, 127, 7, + 6, 1, 230, 60, 2, 214, 221, 225, 249, 48, 7, 3, 1, 230, 60, 2, 214, 221, + 225, 249, 48, 7, 6, 1, 230, 60, 2, 245, 146, 7, 3, 1, 230, 60, 2, 245, + 146, 7, 6, 1, 230, 60, 2, 223, 222, 222, 135, 7, 3, 1, 230, 60, 2, 223, + 222, 222, 135, 7, 6, 1, 228, 164, 2, 214, 221, 225, 249, 48, 7, 3, 1, + 228, 164, 2, 214, 221, 225, 249, 48, 7, 6, 1, 228, 164, 2, 249, 11, 92, + 7, 3, 1, 228, 164, 2, 249, 11, 92, 7, 6, 1, 228, 39, 227, 58, 7, 3, 1, + 228, 39, 227, 58, 7, 6, 1, 227, 14, 227, 58, 7, 3, 1, 227, 14, 227, 58, + 7, 6, 1, 220, 11, 2, 249, 11, 92, 7, 3, 1, 220, 11, 2, 249, 11, 92, 7, 6, + 1, 219, 48, 7, 3, 1, 219, 48, 7, 6, 1, 219, 75, 217, 157, 7, 3, 1, 219, + 75, 217, 157, 7, 6, 1, 221, 235, 2, 92, 7, 3, 1, 221, 235, 2, 92, 7, 6, + 1, 221, 235, 2, 214, 221, 225, 249, 48, 7, 3, 1, 221, 235, 2, 214, 221, + 225, 249, 48, 7, 6, 1, 219, 157, 7, 3, 1, 219, 157, 7, 6, 1, 246, 123, 7, + 3, 1, 246, 123, 7, 6, 1, 237, 151, 7, 3, 1, 237, 151, 7, 6, 1, 250, 158, + 7, 3, 1, 250, 158, 58, 1, 220, 34, 7, 3, 1, 247, 102, 7, 3, 1, 234, 219, + 7, 3, 1, 233, 80, 7, 3, 1, 231, 109, 7, 3, 1, 227, 13, 7, 1, 3, 6, 227, + 13, 7, 3, 1, 220, 249, 7, 3, 1, 220, 94, 7, 6, 1, 237, 188, 250, 46, 7, + 3, 1, 237, 188, 250, 46, 7, 6, 1, 237, 188, 246, 74, 7, 3, 1, 237, 188, + 246, 74, 7, 6, 1, 237, 188, 245, 67, 7, 6, 1, 215, 237, 188, 245, 67, 7, + 3, 1, 215, 237, 188, 245, 67, 7, 6, 1, 215, 153, 7, 3, 1, 215, 153, 7, 6, + 1, 237, 188, 152, 7, 3, 1, 237, 188, 152, 7, 6, 1, 237, 188, 198, 7, 3, + 1, 237, 188, 198, 7, 6, 1, 237, 188, 222, 201, 7, 3, 1, 237, 188, 222, + 201, 58, 1, 109, 250, 217, 255, 0, 58, 1, 250, 175, 58, 1, 224, 192, 246, + 154, 55, 7, 6, 1, 226, 150, 7, 3, 1, 226, 150, 7, 246, 158, 1, 210, 246, + 74, 7, 246, 158, 1, 210, 230, 59, 7, 246, 158, 1, 237, 170, 189, 7, 246, + 158, 1, 242, 107, 234, 250, 7, 246, 158, 1, 254, 49, 189, 223, 19, 232, + 225, 1, 60, 223, 19, 232, 225, 1, 72, 223, 19, 232, 225, 5, 247, 84, 223, + 19, 232, 225, 1, 68, 223, 19, 232, 225, 1, 73, 223, 19, 232, 225, 1, 74, + 223, 19, 232, 225, 5, 243, 175, 223, 19, 232, 225, 1, 236, 57, 223, 19, + 232, 225, 1, 236, 125, 223, 19, 232, 225, 1, 244, 68, 223, 19, 232, 225, + 1, 244, 112, 223, 19, 232, 225, 5, 254, 95, 223, 19, 232, 225, 1, 250, + 182, 223, 19, 232, 225, 1, 251, 11, 223, 19, 232, 225, 1, 237, 59, 223, + 19, 232, 225, 1, 237, 99, 223, 19, 232, 225, 1, 221, 11, 223, 19, 232, + 225, 1, 221, 15, 223, 19, 232, 225, 1, 249, 107, 223, 19, 232, 225, 1, + 249, 115, 223, 19, 232, 225, 1, 101, 223, 19, 232, 225, 1, 221, 239, 223, + 19, 232, 225, 1, 248, 167, 223, 19, 232, 225, 1, 249, 19, 223, 19, 232, + 225, 1, 231, 204, 223, 19, 232, 225, 1, 229, 37, 223, 19, 232, 225, 1, + 229, 118, 223, 19, 232, 225, 1, 252, 41, 223, 19, 232, 225, 1, 252, 88, + 223, 19, 232, 225, 1, 233, 136, 223, 19, 232, 225, 1, 227, 75, 223, 19, + 232, 225, 1, 235, 12, 223, 19, 232, 225, 1, 227, 44, 223, 19, 232, 225, + 1, 224, 26, 223, 19, 232, 225, 1, 243, 4, 223, 19, 232, 225, 29, 5, 60, + 223, 19, 232, 225, 29, 5, 72, 223, 19, 232, 225, 29, 5, 68, 223, 19, 232, + 225, 29, 5, 73, 223, 19, 232, 225, 29, 5, 230, 127, 223, 19, 232, 225, + 229, 33, 234, 67, 223, 19, 232, 225, 229, 33, 234, 66, 223, 19, 232, 225, + 229, 33, 234, 65, 223, 19, 232, 225, 229, 33, 234, 64, 231, 187, 237, + 212, 245, 108, 131, 228, 89, 231, 187, 237, 212, 245, 108, 131, 243, 194, + 231, 187, 237, 212, 245, 108, 148, 228, 87, 231, 187, 237, 212, 245, 108, + 131, 224, 75, 231, 187, 237, 212, 245, 108, 131, 246, 231, 231, 187, 237, + 212, 245, 108, 148, 224, 74, 231, 187, 237, 212, 228, 90, 78, 231, 187, + 237, 212, 229, 56, 78, 231, 187, 237, 212, 227, 4, 78, 231, 187, 237, + 212, 228, 91, 78, 229, 138, 1, 175, 229, 138, 1, 236, 149, 229, 138, 1, + 245, 0, 229, 138, 1, 232, 115, 229, 138, 1, 251, 169, 229, 138, 1, 251, + 69, 229, 138, 1, 237, 123, 229, 138, 1, 231, 77, 229, 138, 1, 222, 155, + 229, 138, 1, 222, 35, 229, 138, 1, 249, 207, 229, 138, 1, 208, 229, 138, + 1, 187, 229, 138, 1, 229, 141, 229, 138, 1, 252, 237, 229, 138, 1, 196, + 229, 138, 1, 221, 55, 229, 138, 1, 221, 47, 229, 138, 1, 247, 74, 229, + 138, 1, 219, 7, 229, 138, 1, 217, 80, 229, 138, 1, 217, 114, 229, 138, 1, + 3, 60, 229, 138, 1, 184, 229, 138, 1, 203, 229, 138, 1, 235, 188, 229, + 138, 1, 225, 25, 229, 138, 1, 226, 177, 229, 138, 1, 155, 229, 138, 1, + 60, 229, 138, 1, 72, 229, 138, 1, 68, 229, 138, 1, 73, 229, 138, 1, 74, + 229, 138, 1, 228, 155, 229, 138, 1, 218, 138, 229, 138, 1, 246, 8, 229, + 138, 1, 244, 160, 229, 138, 1, 246, 250, 229, 138, 223, 97, 1, 219, 7, + 229, 138, 223, 97, 1, 184, 229, 138, 1, 221, 29, 229, 138, 1, 221, 19, + 229, 138, 1, 249, 132, 229, 138, 1, 231, 217, 229, 138, 1, 254, 144, 184, + 229, 138, 1, 219, 69, 225, 25, 229, 138, 1, 219, 70, 155, 229, 138, 1, + 254, 1, 246, 8, 229, 138, 223, 97, 1, 203, 229, 138, 223, 61, 1, 203, + 229, 138, 1, 251, 146, 229, 138, 224, 109, 243, 160, 78, 229, 138, 51, + 243, 160, 78, 229, 138, 164, 225, 18, 229, 138, 164, 51, 225, 18, 158, 5, + 254, 95, 158, 5, 219, 77, 158, 1, 60, 158, 1, 255, 58, 158, 1, 72, 158, + 1, 237, 255, 158, 1, 68, 158, 1, 220, 23, 158, 1, 167, 152, 158, 1, 167, + 227, 53, 158, 1, 167, 153, 158, 1, 167, 235, 18, 158, 1, 73, 158, 1, 246, + 250, 158, 1, 254, 196, 158, 1, 74, 158, 1, 230, 127, 158, 1, 253, 232, + 158, 1, 175, 158, 1, 236, 149, 158, 1, 245, 0, 158, 1, 244, 125, 158, 1, + 232, 115, 158, 1, 251, 169, 158, 1, 251, 69, 158, 1, 237, 123, 158, 1, + 237, 103, 158, 1, 231, 77, 158, 1, 221, 29, 158, 1, 221, 19, 158, 1, 249, + 132, 158, 1, 249, 116, 158, 1, 231, 217, 158, 1, 222, 155, 158, 1, 222, + 35, 158, 1, 249, 207, 158, 1, 249, 36, 158, 1, 208, 158, 1, 187, 158, 1, + 229, 141, 158, 1, 252, 237, 158, 1, 252, 94, 158, 1, 196, 158, 1, 184, + 158, 1, 203, 158, 1, 235, 188, 158, 1, 219, 189, 158, 1, 225, 25, 158, 1, + 223, 218, 158, 1, 226, 177, 158, 1, 155, 158, 1, 235, 17, 158, 250, 147, + 5, 243, 209, 158, 29, 5, 255, 58, 158, 29, 5, 72, 158, 29, 5, 237, 255, + 158, 29, 5, 68, 158, 29, 5, 220, 23, 158, 29, 5, 167, 152, 158, 29, 5, + 167, 227, 53, 158, 29, 5, 167, 153, 158, 29, 5, 167, 235, 18, 158, 29, 5, + 73, 158, 29, 5, 246, 250, 158, 29, 5, 254, 196, 158, 29, 5, 74, 158, 29, + 5, 230, 127, 158, 29, 5, 253, 232, 158, 5, 219, 82, 158, 249, 167, 158, + 51, 249, 167, 158, 20, 217, 84, 158, 20, 107, 158, 20, 103, 158, 20, 160, + 158, 20, 154, 158, 20, 174, 158, 20, 182, 158, 20, 191, 158, 20, 185, + 158, 20, 190, 36, 80, 20, 217, 84, 36, 80, 20, 107, 36, 80, 20, 103, 36, + 80, 20, 160, 36, 80, 20, 154, 36, 80, 20, 174, 36, 80, 20, 182, 36, 80, + 20, 191, 36, 80, 20, 185, 36, 80, 20, 190, 36, 80, 1, 60, 36, 80, 1, 68, + 36, 80, 1, 175, 36, 80, 1, 208, 36, 80, 1, 187, 36, 80, 1, 203, 36, 80, + 1, 219, 94, 36, 80, 5, 253, 219, 80, 5, 223, 253, 251, 146, 80, 5, 251, + 147, 219, 82, 80, 5, 51, 251, 147, 219, 82, 80, 5, 251, 147, 103, 80, 5, + 251, 147, 160, 80, 5, 251, 147, 253, 219, 80, 5, 228, 186, 80, 244, 224, + 245, 185, 80, 251, 134, 80, 243, 155, 236, 190, 235, 68, 20, 217, 84, + 236, 190, 235, 68, 20, 107, 236, 190, 235, 68, 20, 103, 236, 190, 235, + 68, 20, 160, 236, 190, 235, 68, 20, 154, 236, 190, 235, 68, 20, 174, 236, + 190, 235, 68, 20, 182, 236, 190, 235, 68, 20, 191, 236, 190, 235, 68, 20, + 185, 236, 190, 235, 68, 20, 190, 236, 190, 235, 68, 1, 175, 236, 190, + 235, 68, 1, 236, 149, 236, 190, 235, 68, 1, 245, 0, 236, 190, 235, 68, 1, + 232, 115, 236, 190, 235, 68, 1, 226, 177, 236, 190, 235, 68, 1, 225, 25, + 236, 190, 235, 68, 1, 217, 114, 236, 190, 235, 68, 1, 231, 77, 236, 190, + 235, 68, 1, 222, 155, 236, 190, 235, 68, 1, 242, 175, 236, 190, 235, 68, + 1, 208, 236, 190, 235, 68, 1, 187, 236, 190, 235, 68, 1, 229, 141, 236, + 190, 235, 68, 1, 196, 236, 190, 235, 68, 1, 249, 207, 236, 190, 235, 68, + 1, 252, 237, 236, 190, 235, 68, 1, 203, 236, 190, 235, 68, 1, 184, 236, + 190, 235, 68, 1, 235, 188, 236, 190, 235, 68, 1, 219, 7, 236, 190, 235, + 68, 1, 222, 35, 236, 190, 235, 68, 1, 155, 236, 190, 235, 68, 1, 219, + 189, 236, 190, 235, 68, 1, 251, 169, 236, 190, 235, 68, 1, 60, 236, 190, + 235, 68, 1, 230, 167, 236, 190, 235, 68, 1, 72, 236, 190, 235, 68, 1, + 230, 127, 236, 190, 235, 68, 29, 220, 110, 236, 190, 235, 68, 29, 73, + 236, 190, 235, 68, 29, 68, 236, 190, 235, 68, 29, 246, 250, 236, 190, + 235, 68, 29, 74, 236, 190, 235, 68, 145, 229, 48, 236, 190, 235, 68, 145, + 251, 157, 236, 190, 235, 68, 145, 251, 158, 229, 48, 236, 190, 235, 68, + 5, 250, 62, 236, 190, 235, 68, 5, 224, 148, 227, 194, 1, 175, 227, 194, + 1, 245, 0, 227, 194, 1, 232, 115, 227, 194, 1, 222, 155, 227, 194, 1, + 249, 207, 227, 194, 1, 208, 227, 194, 1, 187, 227, 194, 1, 252, 237, 227, + 194, 1, 196, 227, 194, 1, 251, 169, 227, 194, 1, 237, 123, 227, 194, 1, + 231, 77, 227, 194, 1, 226, 177, 227, 194, 1, 203, 227, 194, 1, 235, 188, + 227, 194, 1, 184, 227, 194, 1, 219, 7, 227, 194, 1, 155, 227, 194, 1, + 234, 37, 227, 194, 1, 232, 100, 227, 194, 1, 232, 169, 227, 194, 1, 231, + 57, 227, 194, 1, 60, 227, 194, 29, 5, 72, 227, 194, 29, 5, 68, 227, 194, + 29, 5, 73, 227, 194, 29, 5, 254, 196, 227, 194, 29, 5, 74, 227, 194, 29, + 5, 253, 232, 227, 194, 29, 5, 246, 115, 227, 194, 29, 5, 247, 16, 227, + 194, 250, 147, 5, 232, 117, 227, 194, 250, 147, 5, 207, 227, 194, 250, + 147, 5, 152, 227, 194, 250, 147, 5, 243, 225, 227, 194, 219, 82, 227, + 194, 226, 87, 78, 22, 91, 221, 188, 22, 91, 221, 187, 22, 91, 221, 185, + 22, 91, 221, 190, 22, 91, 227, 135, 22, 91, 227, 119, 22, 91, 227, 114, + 22, 91, 227, 116, 22, 91, 227, 132, 22, 91, 227, 125, 22, 91, 227, 118, + 22, 91, 227, 137, 22, 91, 227, 120, 22, 91, 227, 139, 22, 91, 227, 136, + 22, 91, 233, 183, 22, 91, 233, 174, 22, 91, 233, 177, 22, 91, 229, 84, + 22, 91, 229, 95, 22, 91, 229, 96, 22, 91, 223, 203, 22, 91, 238, 12, 22, + 91, 238, 19, 22, 91, 223, 214, 22, 91, 223, 201, 22, 91, 229, 126, 22, + 91, 243, 101, 22, 91, 223, 198, 133, 5, 229, 252, 133, 5, 251, 96, 133, + 5, 235, 130, 133, 5, 218, 197, 133, 1, 60, 133, 1, 242, 107, 236, 193, + 133, 1, 72, 133, 1, 237, 255, 133, 1, 68, 133, 1, 230, 44, 251, 73, 133, + 1, 232, 116, 235, 98, 133, 1, 232, 116, 235, 99, 227, 229, 133, 1, 73, + 133, 1, 254, 196, 133, 1, 74, 133, 1, 175, 133, 1, 206, 226, 128, 133, 1, + 206, 233, 67, 133, 1, 245, 0, 133, 1, 245, 1, 233, 67, 133, 1, 232, 115, + 133, 1, 251, 169, 133, 1, 251, 170, 233, 67, 133, 1, 237, 123, 133, 1, + 231, 78, 233, 67, 133, 1, 237, 124, 234, 103, 133, 1, 231, 77, 133, 1, + 221, 29, 133, 1, 221, 30, 234, 103, 133, 1, 249, 132, 133, 1, 249, 133, + 234, 103, 133, 1, 232, 238, 233, 67, 133, 1, 222, 155, 133, 1, 222, 156, + 233, 67, 133, 1, 249, 207, 133, 1, 249, 208, 234, 103, 133, 1, 208, 133, + 1, 187, 133, 1, 230, 44, 233, 67, 133, 1, 252, 237, 133, 1, 252, 238, + 233, 67, 133, 1, 196, 133, 1, 184, 133, 1, 203, 133, 1, 228, 3, 254, 203, + 133, 1, 235, 188, 133, 1, 219, 7, 133, 1, 226, 178, 233, 67, 133, 1, 226, + 178, 234, 103, 133, 1, 226, 177, 133, 1, 155, 133, 5, 251, 97, 222, 68, + 133, 29, 5, 222, 111, 133, 29, 5, 221, 135, 133, 29, 5, 218, 162, 133, + 29, 5, 218, 163, 234, 5, 133, 29, 5, 223, 77, 133, 29, 5, 223, 78, 233, + 250, 133, 29, 5, 222, 124, 133, 29, 5, 248, 207, 233, 66, 133, 29, 5, + 229, 171, 133, 250, 147, 5, 236, 161, 133, 250, 147, 5, 229, 179, 133, + 250, 147, 5, 251, 162, 133, 230, 6, 133, 42, 227, 176, 133, 45, 227, 176, + 133, 230, 36, 254, 125, 133, 230, 36, 234, 107, 133, 230, 36, 234, 223, + 133, 230, 36, 218, 193, 133, 230, 36, 230, 7, 133, 230, 36, 235, 35, 133, + 230, 36, 234, 217, 133, 230, 36, 254, 239, 133, 230, 36, 254, 240, 254, + 239, 133, 230, 36, 229, 65, 133, 215, 230, 36, 229, 65, 133, 230, 4, 133, + 20, 217, 84, 133, 20, 107, 133, 20, 103, 133, 20, 160, 133, 20, 154, 133, + 20, 174, 133, 20, 182, 133, 20, 191, 133, 20, 185, 133, 20, 190, 133, + 230, 36, 221, 163, 220, 248, 133, 230, 36, 237, 147, 149, 1, 60, 149, 1, + 72, 149, 1, 68, 149, 1, 73, 149, 1, 254, 196, 149, 1, 74, 149, 1, 175, + 149, 1, 236, 149, 149, 1, 245, 0, 149, 1, 244, 125, 149, 1, 232, 73, 149, + 1, 232, 115, 149, 1, 251, 69, 149, 1, 251, 33, 149, 1, 237, 123, 149, 1, + 237, 103, 149, 1, 232, 64, 149, 1, 232, 66, 149, 1, 232, 65, 149, 1, 222, + 155, 149, 1, 222, 35, 149, 1, 249, 207, 149, 1, 249, 36, 149, 1, 231, + 114, 149, 1, 208, 149, 1, 249, 132, 149, 1, 187, 149, 1, 229, 6, 149, 1, + 229, 141, 149, 1, 252, 237, 149, 1, 252, 94, 149, 1, 233, 94, 149, 1, + 196, 149, 1, 252, 178, 149, 1, 184, 149, 1, 203, 149, 1, 235, 188, 149, + 1, 219, 189, 149, 1, 223, 218, 149, 1, 226, 177, 149, 1, 155, 149, 29, 5, + 255, 58, 149, 29, 5, 72, 149, 29, 5, 237, 255, 149, 29, 5, 246, 237, 149, + 29, 5, 68, 149, 29, 5, 230, 167, 149, 29, 5, 74, 149, 29, 5, 254, 196, + 149, 29, 5, 253, 232, 149, 29, 5, 220, 110, 149, 250, 147, 5, 184, 149, + 250, 147, 5, 203, 149, 250, 147, 5, 235, 188, 149, 250, 147, 5, 219, 7, + 149, 1, 39, 237, 17, 149, 1, 39, 245, 67, 149, 1, 39, 232, 117, 149, 250, + 147, 5, 39, 232, 117, 149, 1, 39, 251, 70, 149, 1, 39, 222, 201, 149, 1, + 39, 207, 149, 1, 39, 230, 59, 149, 1, 39, 218, 90, 149, 1, 39, 152, 149, + 1, 39, 153, 149, 1, 39, 223, 219, 149, 250, 147, 5, 39, 189, 149, 250, + 147, 5, 39, 243, 225, 149, 20, 217, 84, 149, 20, 107, 149, 20, 103, 149, + 20, 160, 149, 20, 154, 149, 20, 174, 149, 20, 182, 149, 20, 191, 149, 20, + 185, 149, 20, 190, 149, 228, 197, 223, 242, 149, 228, 197, 249, 167, 149, + 228, 197, 51, 249, 167, 149, 228, 197, 221, 78, 249, 167, 63, 1, 236, + 143, 245, 0, 63, 1, 236, 143, 251, 169, 63, 1, 236, 143, 251, 69, 63, 1, + 236, 143, 237, 123, 63, 1, 236, 143, 237, 103, 63, 1, 236, 143, 231, 77, + 63, 1, 236, 143, 221, 29, 63, 1, 236, 143, 221, 19, 63, 1, 236, 143, 249, + 132, 63, 1, 236, 143, 249, 116, 63, 1, 236, 143, 249, 36, 63, 1, 236, + 143, 208, 63, 1, 236, 143, 226, 177, 63, 1, 236, 143, 155, 63, 1, 236, + 143, 243, 121, 63, 1, 236, 143, 246, 8, 63, 58, 1, 236, 143, 227, 201, + 63, 1, 236, 143, 218, 138, 63, 1, 236, 143, 217, 114, 63, 1, 236, 143, + 203, 63, 235, 6, 236, 143, 230, 182, 63, 235, 6, 236, 143, 228, 111, 63, + 235, 6, 236, 143, 243, 57, 63, 16, 254, 186, 246, 94, 63, 16, 254, 186, + 107, 63, 16, 254, 186, 103, 63, 1, 254, 186, 203, 63, 5, 229, 248, 236, + 213, 221, 132, 37, 177, 1, 109, 236, 57, 37, 177, 1, 116, 236, 57, 37, + 177, 1, 109, 236, 125, 37, 177, 1, 116, 236, 125, 37, 177, 1, 109, 236, + 132, 37, 177, 1, 116, 236, 132, 37, 177, 1, 109, 244, 68, 37, 177, 1, + 116, 244, 68, 37, 177, 1, 109, 232, 84, 37, 177, 1, 116, 232, 84, 37, + 177, 1, 109, 250, 182, 37, 177, 1, 116, 250, 182, 37, 177, 1, 109, 251, + 11, 37, 177, 1, 116, 251, 11, 37, 177, 1, 109, 224, 26, 37, 177, 1, 116, + 224, 26, 37, 177, 1, 109, 231, 56, 37, 177, 1, 116, 231, 56, 37, 177, 1, + 109, 248, 167, 37, 177, 1, 116, 248, 167, 37, 177, 1, 109, 101, 37, 177, + 1, 116, 101, 37, 177, 1, 109, 221, 239, 37, 177, 1, 116, 221, 239, 37, + 177, 1, 109, 231, 204, 37, 177, 1, 116, 231, 204, 37, 177, 1, 109, 252, + 41, 37, 177, 1, 116, 252, 41, 37, 177, 1, 109, 229, 37, 37, 177, 1, 116, + 229, 37, 37, 177, 1, 109, 229, 118, 37, 177, 1, 116, 229, 118, 37, 177, + 1, 109, 245, 139, 37, 177, 1, 116, 245, 139, 37, 177, 1, 109, 233, 136, + 37, 177, 1, 116, 233, 136, 37, 177, 1, 109, 217, 231, 37, 177, 1, 116, + 217, 231, 37, 177, 1, 109, 227, 75, 37, 177, 1, 116, 227, 75, 37, 177, 1, + 109, 235, 12, 37, 177, 1, 116, 235, 12, 37, 177, 1, 109, 219, 72, 37, + 177, 1, 116, 219, 72, 37, 177, 1, 109, 243, 4, 37, 177, 1, 116, 243, 4, + 37, 177, 1, 109, 74, 37, 177, 1, 116, 74, 37, 177, 234, 100, 236, 229, + 37, 177, 29, 255, 58, 37, 177, 29, 72, 37, 177, 29, 220, 110, 37, 177, + 29, 68, 37, 177, 29, 73, 37, 177, 29, 74, 37, 177, 234, 100, 236, 127, + 37, 177, 29, 242, 72, 37, 177, 29, 220, 109, 37, 177, 29, 220, 123, 37, + 177, 29, 253, 231, 37, 177, 29, 253, 212, 37, 177, 29, 254, 131, 37, 177, + 29, 254, 140, 37, 177, 145, 234, 100, 246, 223, 37, 177, 145, 234, 100, + 231, 113, 37, 177, 145, 234, 100, 221, 239, 37, 177, 145, 234, 100, 224, + 15, 37, 177, 16, 236, 44, 37, 177, 16, 231, 113, 37, 177, 16, 226, 148, + 37, 177, 16, 243, 5, 243, 1, 37, 177, 16, 236, 52, 236, 51, 234, 11, 234, + 43, 1, 236, 49, 234, 11, 234, 43, 1, 226, 148, 234, 11, 234, 43, 1, 235, + 167, 234, 11, 234, 43, 1, 233, 145, 234, 11, 234, 43, 1, 187, 234, 11, + 234, 43, 1, 208, 234, 11, 234, 43, 1, 251, 25, 234, 11, 234, 43, 1, 221, + 181, 234, 11, 234, 43, 1, 236, 121, 234, 11, 234, 43, 1, 232, 76, 234, + 11, 234, 43, 1, 221, 233, 234, 11, 234, 43, 1, 219, 2, 234, 11, 234, 43, + 1, 218, 45, 234, 11, 234, 43, 1, 242, 167, 234, 11, 234, 43, 1, 220, 87, + 234, 11, 234, 43, 1, 72, 234, 11, 234, 43, 1, 229, 136, 234, 11, 234, 43, + 1, 253, 241, 234, 11, 234, 43, 1, 244, 63, 234, 11, 234, 43, 1, 237, 102, + 234, 11, 234, 43, 1, 227, 246, 234, 11, 234, 43, 1, 252, 237, 234, 11, + 234, 43, 1, 237, 91, 234, 11, 234, 43, 1, 248, 232, 234, 11, 234, 43, 1, + 244, 110, 234, 11, 234, 43, 1, 249, 17, 234, 11, 234, 43, 1, 252, 93, + 234, 11, 234, 43, 1, 236, 50, 234, 249, 234, 11, 234, 43, 1, 235, 168, + 234, 249, 234, 11, 234, 43, 1, 233, 146, 234, 249, 234, 11, 234, 43, 1, + 230, 44, 234, 249, 234, 11, 234, 43, 1, 232, 238, 234, 249, 234, 11, 234, + 43, 1, 221, 182, 234, 249, 234, 11, 234, 43, 1, 232, 77, 234, 249, 234, + 11, 234, 43, 1, 242, 107, 234, 249, 234, 11, 234, 43, 29, 5, 230, 137, + 234, 11, 234, 43, 29, 5, 237, 221, 234, 11, 234, 43, 29, 5, 254, 130, + 234, 11, 234, 43, 29, 5, 218, 18, 234, 11, 234, 43, 29, 5, 224, 10, 234, + 11, 234, 43, 29, 5, 220, 85, 234, 11, 234, 43, 29, 5, 251, 40, 234, 11, + 234, 43, 29, 5, 231, 100, 234, 11, 234, 43, 251, 41, 234, 11, 234, 43, + 234, 220, 237, 131, 234, 11, 234, 43, 254, 70, 237, 131, 234, 11, 234, + 43, 20, 217, 84, 234, 11, 234, 43, 20, 107, 234, 11, 234, 43, 20, 103, + 234, 11, 234, 43, 20, 160, 234, 11, 234, 43, 20, 154, 234, 11, 234, 43, + 20, 174, 234, 11, 234, 43, 20, 182, 234, 11, 234, 43, 20, 191, 234, 11, + 234, 43, 20, 185, 234, 11, 234, 43, 20, 190, 22, 122, 231, 6, 22, 122, + 231, 11, 22, 122, 217, 230, 22, 122, 217, 229, 22, 122, 217, 228, 22, + 122, 220, 173, 22, 122, 220, 176, 22, 122, 217, 198, 22, 122, 217, 194, + 22, 122, 246, 114, 22, 122, 246, 112, 22, 122, 246, 113, 22, 122, 246, + 110, 22, 122, 242, 97, 22, 122, 242, 96, 22, 122, 242, 94, 22, 122, 242, + 95, 22, 122, 242, 100, 22, 122, 242, 93, 22, 122, 242, 92, 22, 122, 242, + 102, 22, 122, 254, 59, 22, 122, 254, 58, 22, 85, 232, 48, 22, 85, 232, + 54, 22, 85, 223, 200, 22, 85, 223, 199, 22, 85, 221, 187, 22, 85, 221, + 185, 22, 85, 221, 184, 22, 85, 221, 190, 22, 85, 221, 191, 22, 85, 221, + 183, 22, 85, 227, 119, 22, 85, 227, 134, 22, 85, 223, 206, 22, 85, 227, + 131, 22, 85, 227, 121, 22, 85, 227, 123, 22, 85, 227, 110, 22, 85, 227, + 111, 22, 85, 236, 217, 22, 85, 233, 182, 22, 85, 233, 176, 22, 85, 223, + 210, 22, 85, 233, 179, 22, 85, 233, 185, 22, 85, 229, 80, 22, 85, 229, + 89, 22, 85, 229, 93, 22, 85, 223, 208, 22, 85, 229, 83, 22, 85, 229, 97, + 22, 85, 229, 98, 22, 85, 224, 96, 22, 85, 224, 99, 22, 85, 223, 204, 22, + 85, 223, 202, 22, 85, 224, 94, 22, 85, 224, 102, 22, 85, 224, 103, 22, + 85, 224, 88, 22, 85, 224, 101, 22, 85, 229, 255, 22, 85, 230, 0, 22, 85, + 218, 4, 22, 85, 218, 5, 22, 85, 250, 228, 22, 85, 250, 227, 22, 85, 223, + 215, 22, 85, 229, 124, 22, 85, 229, 123, 9, 13, 239, 244, 9, 13, 239, + 243, 9, 13, 239, 242, 9, 13, 239, 241, 9, 13, 239, 240, 9, 13, 239, 239, + 9, 13, 239, 238, 9, 13, 239, 237, 9, 13, 239, 236, 9, 13, 239, 235, 9, + 13, 239, 234, 9, 13, 239, 233, 9, 13, 239, 232, 9, 13, 239, 231, 9, 13, + 239, 230, 9, 13, 239, 229, 9, 13, 239, 228, 9, 13, 239, 227, 9, 13, 239, + 226, 9, 13, 239, 225, 9, 13, 239, 224, 9, 13, 239, 223, 9, 13, 239, 222, + 9, 13, 239, 221, 9, 13, 239, 220, 9, 13, 239, 219, 9, 13, 239, 218, 9, + 13, 239, 217, 9, 13, 239, 216, 9, 13, 239, 215, 9, 13, 239, 214, 9, 13, + 239, 213, 9, 13, 239, 212, 9, 13, 239, 211, 9, 13, 239, 210, 9, 13, 239, + 209, 9, 13, 239, 208, 9, 13, 239, 207, 9, 13, 239, 206, 9, 13, 239, 205, + 9, 13, 239, 204, 9, 13, 239, 203, 9, 13, 239, 202, 9, 13, 239, 201, 9, + 13, 239, 200, 9, 13, 239, 199, 9, 13, 239, 198, 9, 13, 239, 197, 9, 13, + 239, 196, 9, 13, 239, 195, 9, 13, 239, 194, 9, 13, 239, 193, 9, 13, 239, + 192, 9, 13, 239, 191, 9, 13, 239, 190, 9, 13, 239, 189, 9, 13, 239, 188, + 9, 13, 239, 187, 9, 13, 239, 186, 9, 13, 239, 185, 9, 13, 239, 184, 9, + 13, 239, 183, 9, 13, 239, 182, 9, 13, 239, 181, 9, 13, 239, 180, 9, 13, + 239, 179, 9, 13, 239, 178, 9, 13, 239, 177, 9, 13, 239, 176, 9, 13, 239, + 175, 9, 13, 239, 174, 9, 13, 239, 173, 9, 13, 239, 172, 9, 13, 239, 171, + 9, 13, 239, 170, 9, 13, 239, 169, 9, 13, 239, 168, 9, 13, 239, 167, 9, + 13, 239, 166, 9, 13, 239, 165, 9, 13, 239, 164, 9, 13, 239, 163, 9, 13, + 239, 162, 9, 13, 239, 161, 9, 13, 239, 160, 9, 13, 239, 159, 9, 13, 239, + 158, 9, 13, 239, 157, 9, 13, 239, 156, 9, 13, 239, 155, 9, 13, 239, 154, + 9, 13, 239, 153, 9, 13, 239, 152, 9, 13, 239, 151, 9, 13, 239, 150, 9, + 13, 239, 149, 9, 13, 239, 148, 9, 13, 239, 147, 9, 13, 239, 146, 9, 13, + 239, 145, 9, 13, 239, 144, 9, 13, 239, 143, 9, 13, 239, 142, 9, 13, 239, + 141, 9, 13, 239, 140, 9, 13, 239, 139, 9, 13, 239, 138, 9, 13, 239, 137, + 9, 13, 239, 136, 9, 13, 239, 135, 9, 13, 239, 134, 9, 13, 239, 133, 9, + 13, 239, 132, 9, 13, 239, 131, 9, 13, 239, 130, 9, 13, 239, 129, 9, 13, + 239, 128, 9, 13, 239, 127, 9, 13, 239, 126, 9, 13, 239, 125, 9, 13, 239, + 124, 9, 13, 239, 123, 9, 13, 239, 122, 9, 13, 239, 121, 9, 13, 239, 120, + 9, 13, 239, 119, 9, 13, 239, 118, 9, 13, 239, 117, 9, 13, 239, 116, 9, + 13, 239, 115, 9, 13, 239, 114, 9, 13, 239, 113, 9, 13, 239, 112, 9, 13, + 239, 111, 9, 13, 239, 110, 9, 13, 239, 109, 9, 13, 239, 108, 9, 13, 239, + 107, 9, 13, 239, 106, 9, 13, 239, 105, 9, 13, 239, 104, 9, 13, 239, 103, + 9, 13, 239, 102, 9, 13, 239, 101, 9, 13, 239, 100, 9, 13, 239, 99, 9, 13, + 239, 98, 9, 13, 239, 97, 9, 13, 239, 96, 9, 13, 239, 95, 9, 13, 239, 94, + 9, 13, 239, 93, 9, 13, 239, 92, 9, 13, 239, 91, 9, 13, 239, 90, 9, 13, + 239, 89, 9, 13, 239, 88, 9, 13, 239, 87, 9, 13, 239, 86, 9, 13, 239, 85, + 9, 13, 239, 84, 9, 13, 239, 83, 9, 13, 239, 82, 9, 13, 239, 81, 9, 13, + 239, 80, 9, 13, 239, 79, 9, 13, 239, 78, 9, 13, 239, 77, 9, 13, 239, 76, + 9, 13, 239, 75, 9, 13, 239, 74, 9, 13, 239, 73, 9, 13, 239, 72, 9, 13, + 239, 71, 9, 13, 239, 70, 9, 13, 239, 69, 9, 13, 239, 68, 9, 13, 239, 67, + 9, 13, 239, 66, 9, 13, 239, 65, 9, 13, 239, 64, 9, 13, 239, 63, 9, 13, + 239, 62, 9, 13, 239, 61, 9, 13, 239, 60, 9, 13, 239, 59, 9, 13, 239, 58, + 9, 13, 239, 57, 9, 13, 239, 56, 9, 13, 239, 55, 9, 13, 239, 54, 9, 13, + 239, 53, 9, 13, 239, 52, 9, 13, 239, 51, 9, 13, 239, 50, 9, 13, 239, 49, + 9, 13, 239, 48, 9, 13, 239, 47, 9, 13, 239, 46, 9, 13, 239, 45, 9, 13, + 239, 44, 9, 13, 239, 43, 9, 13, 239, 42, 9, 13, 239, 41, 9, 13, 239, 40, + 9, 13, 239, 39, 9, 13, 239, 38, 9, 13, 239, 37, 9, 13, 239, 36, 9, 13, + 239, 35, 9, 13, 239, 34, 9, 13, 239, 33, 9, 13, 239, 32, 9, 13, 239, 31, + 9, 13, 239, 30, 9, 13, 239, 29, 9, 13, 239, 28, 9, 13, 239, 27, 9, 13, + 239, 26, 9, 13, 239, 25, 9, 13, 239, 24, 9, 13, 239, 23, 9, 13, 239, 22, + 9, 13, 239, 21, 9, 13, 239, 20, 9, 13, 239, 19, 9, 13, 239, 18, 9, 13, + 239, 17, 9, 13, 239, 16, 9, 13, 239, 15, 9, 13, 239, 14, 9, 13, 239, 13, + 9, 13, 239, 12, 9, 13, 239, 11, 9, 13, 239, 10, 9, 13, 239, 9, 9, 13, + 239, 8, 9, 13, 239, 7, 9, 13, 239, 6, 9, 13, 239, 5, 9, 13, 239, 4, 9, + 13, 239, 3, 9, 13, 239, 2, 9, 13, 239, 1, 9, 13, 239, 0, 9, 13, 238, 255, + 9, 13, 238, 254, 9, 13, 238, 253, 9, 13, 238, 252, 9, 13, 238, 251, 9, + 13, 238, 250, 9, 13, 238, 249, 9, 13, 238, 248, 9, 13, 238, 247, 9, 13, + 238, 246, 9, 13, 238, 245, 9, 13, 238, 244, 9, 13, 238, 243, 9, 13, 238, + 242, 9, 13, 238, 241, 9, 13, 238, 240, 9, 13, 238, 239, 9, 13, 238, 238, + 9, 13, 238, 237, 9, 13, 238, 236, 9, 13, 238, 235, 9, 13, 238, 234, 9, + 13, 238, 233, 9, 13, 238, 232, 9, 13, 238, 231, 9, 13, 238, 230, 9, 13, + 238, 229, 9, 13, 238, 228, 9, 13, 238, 227, 9, 13, 238, 226, 9, 13, 238, + 225, 9, 13, 238, 224, 9, 13, 238, 223, 9, 13, 238, 222, 9, 13, 238, 221, + 9, 13, 238, 220, 9, 13, 238, 219, 9, 13, 238, 218, 9, 13, 238, 217, 9, + 13, 238, 216, 9, 13, 238, 215, 9, 13, 238, 214, 9, 13, 238, 213, 9, 13, + 238, 212, 9, 13, 238, 211, 9, 13, 238, 210, 9, 13, 238, 209, 9, 13, 238, + 208, 9, 13, 238, 207, 9, 13, 238, 206, 9, 13, 238, 205, 9, 13, 238, 204, + 9, 13, 238, 203, 9, 13, 238, 202, 9, 13, 238, 201, 9, 13, 238, 200, 9, + 13, 238, 199, 9, 13, 238, 198, 9, 13, 238, 197, 9, 13, 238, 196, 9, 13, + 238, 195, 9, 13, 238, 194, 9, 13, 238, 193, 9, 13, 238, 192, 9, 13, 238, + 191, 9, 13, 238, 190, 9, 13, 238, 189, 9, 13, 238, 188, 9, 13, 238, 187, + 9, 13, 238, 186, 9, 13, 238, 185, 9, 13, 238, 184, 9, 13, 238, 183, 9, + 13, 238, 182, 9, 13, 238, 181, 9, 13, 238, 180, 9, 13, 238, 179, 9, 13, + 238, 178, 9, 13, 238, 177, 9, 13, 238, 176, 9, 13, 238, 175, 9, 13, 238, + 174, 9, 13, 238, 173, 9, 13, 238, 172, 9, 13, 238, 171, 9, 13, 238, 170, + 9, 13, 238, 169, 9, 13, 238, 168, 9, 13, 238, 167, 9, 13, 238, 166, 9, + 13, 238, 165, 9, 13, 238, 164, 9, 13, 238, 163, 9, 13, 238, 162, 9, 13, + 238, 161, 9, 13, 238, 160, 9, 13, 238, 159, 9, 13, 238, 158, 9, 13, 238, + 157, 9, 13, 238, 156, 9, 13, 238, 155, 9, 13, 238, 154, 9, 13, 238, 153, + 9, 13, 238, 152, 9, 13, 238, 151, 9, 13, 238, 150, 9, 13, 238, 149, 9, + 13, 238, 148, 9, 13, 238, 147, 9, 13, 238, 146, 9, 13, 238, 145, 9, 13, + 238, 144, 9, 13, 238, 143, 9, 13, 238, 142, 9, 13, 238, 141, 9, 13, 238, + 140, 9, 13, 238, 139, 9, 13, 238, 138, 9, 13, 238, 137, 9, 13, 238, 136, + 9, 13, 238, 135, 9, 13, 238, 134, 9, 13, 238, 133, 9, 13, 238, 132, 9, + 13, 238, 131, 9, 13, 238, 130, 9, 13, 238, 129, 9, 13, 238, 128, 9, 13, + 238, 127, 9, 13, 238, 126, 9, 13, 238, 125, 9, 13, 238, 124, 9, 13, 238, + 123, 9, 13, 238, 122, 9, 13, 238, 121, 9, 13, 238, 120, 9, 13, 238, 119, + 9, 13, 238, 118, 9, 13, 238, 117, 9, 13, 238, 116, 9, 13, 238, 115, 9, + 13, 238, 114, 9, 13, 238, 113, 9, 13, 238, 112, 9, 13, 238, 111, 9, 13, + 238, 110, 9, 13, 238, 109, 9, 13, 238, 108, 9, 13, 238, 107, 9, 13, 238, + 106, 9, 13, 238, 105, 9, 13, 238, 104, 9, 13, 238, 103, 9, 13, 238, 102, + 9, 13, 238, 101, 9, 13, 238, 100, 9, 13, 238, 99, 9, 13, 238, 98, 9, 13, + 238, 97, 9, 13, 238, 96, 9, 13, 238, 95, 9, 13, 238, 94, 9, 13, 238, 93, + 9, 13, 238, 92, 9, 13, 238, 91, 9, 13, 238, 90, 9, 13, 238, 89, 9, 13, + 238, 88, 9, 13, 238, 87, 9, 13, 238, 86, 9, 13, 238, 85, 9, 13, 238, 84, + 9, 13, 238, 83, 9, 13, 238, 82, 9, 13, 238, 81, 9, 13, 238, 80, 9, 13, + 238, 79, 9, 13, 238, 78, 9, 13, 238, 77, 9, 13, 238, 76, 9, 13, 238, 75, + 9, 13, 238, 74, 9, 13, 238, 73, 9, 13, 238, 72, 9, 13, 238, 71, 9, 13, + 238, 70, 9, 13, 238, 69, 9, 13, 238, 68, 9, 13, 238, 67, 9, 13, 238, 66, + 9, 13, 238, 65, 9, 13, 238, 64, 9, 13, 238, 63, 9, 13, 238, 62, 9, 13, + 238, 61, 9, 13, 238, 60, 9, 13, 238, 59, 9, 13, 238, 58, 9, 13, 238, 57, + 9, 13, 238, 56, 9, 13, 238, 55, 9, 13, 238, 54, 9, 13, 238, 53, 9, 13, + 238, 52, 9, 13, 238, 51, 9, 13, 238, 50, 9, 13, 238, 49, 9, 13, 238, 48, + 9, 13, 238, 47, 9, 13, 238, 46, 9, 13, 238, 45, 9, 13, 238, 44, 9, 13, + 238, 43, 9, 13, 238, 42, 9, 13, 238, 41, 9, 13, 238, 40, 9, 13, 238, 39, + 9, 13, 238, 38, 9, 13, 238, 37, 9, 13, 238, 36, 9, 13, 238, 35, 9, 13, + 238, 34, 9, 13, 238, 33, 9, 13, 238, 32, 9, 13, 238, 31, 7, 3, 24, 245, + 207, 7, 3, 24, 245, 203, 7, 3, 24, 245, 166, 7, 3, 24, 245, 206, 7, 3, + 24, 245, 205, 7, 3, 24, 171, 226, 235, 222, 201, 7, 3, 24, 223, 168, 132, + 3, 24, 233, 252, 231, 174, 132, 3, 24, 233, 252, 246, 254, 132, 3, 24, + 233, 252, 237, 200, 132, 3, 24, 219, 97, 231, 174, 132, 3, 24, 233, 252, + 218, 133, 87, 1, 217, 221, 2, 243, 94, 87, 229, 32, 237, 42, 219, 176, + 87, 24, 217, 248, 217, 221, 217, 221, 229, 214, 87, 1, 254, 142, 253, + 207, 87, 1, 218, 201, 254, 168, 87, 1, 218, 201, 249, 177, 87, 1, 218, + 201, 243, 162, 87, 1, 218, 201, 236, 246, 87, 1, 218, 201, 235, 152, 87, + 1, 218, 201, 39, 234, 1, 87, 1, 218, 201, 227, 174, 87, 1, 218, 201, 222, + 102, 87, 1, 254, 142, 88, 55, 87, 1, 224, 210, 2, 224, 210, 248, 145, 87, + 1, 224, 210, 2, 224, 113, 248, 145, 87, 1, 224, 210, 2, 249, 194, 25, + 224, 210, 248, 145, 87, 1, 224, 210, 2, 249, 194, 25, 224, 113, 248, 145, + 87, 1, 99, 2, 229, 214, 87, 1, 99, 2, 228, 143, 87, 1, 99, 2, 234, 77, + 87, 1, 252, 105, 2, 249, 193, 87, 1, 244, 92, 2, 249, 193, 87, 1, 249, + 178, 2, 249, 193, 87, 1, 243, 163, 2, 234, 77, 87, 1, 219, 170, 2, 249, + 193, 87, 1, 217, 96, 2, 249, 193, 87, 1, 222, 51, 2, 249, 193, 87, 1, + 217, 221, 2, 249, 193, 87, 1, 39, 236, 247, 2, 249, 193, 87, 1, 236, 247, + 2, 249, 193, 87, 1, 235, 153, 2, 249, 193, 87, 1, 234, 2, 2, 249, 193, + 87, 1, 231, 104, 2, 249, 193, 87, 1, 226, 146, 2, 249, 193, 87, 1, 39, + 229, 199, 2, 249, 193, 87, 1, 229, 199, 2, 249, 193, 87, 1, 221, 52, 2, + 249, 193, 87, 1, 228, 108, 2, 249, 193, 87, 1, 227, 175, 2, 249, 193, 87, + 1, 224, 210, 2, 249, 193, 87, 1, 222, 103, 2, 249, 193, 87, 1, 219, 170, + 2, 242, 254, 87, 1, 252, 105, 2, 227, 248, 87, 1, 236, 247, 2, 227, 248, + 87, 1, 229, 199, 2, 227, 248, 87, 24, 99, 235, 152, 12, 1, 99, 218, 247, + 47, 17, 12, 1, 99, 218, 247, 39, 17, 12, 1, 252, 136, 47, 17, 12, 1, 252, + 136, 39, 17, 12, 1, 252, 136, 66, 17, 12, 1, 252, 136, 128, 17, 12, 1, + 229, 188, 47, 17, 12, 1, 229, 188, 39, 17, 12, 1, 229, 188, 66, 17, 12, + 1, 229, 188, 128, 17, 12, 1, 252, 127, 47, 17, 12, 1, 252, 127, 39, 17, + 12, 1, 252, 127, 66, 17, 12, 1, 252, 127, 128, 17, 12, 1, 221, 22, 47, + 17, 12, 1, 221, 22, 39, 17, 12, 1, 221, 22, 66, 17, 12, 1, 221, 22, 128, + 17, 12, 1, 222, 76, 47, 17, 12, 1, 222, 76, 39, 17, 12, 1, 222, 76, 66, + 17, 12, 1, 222, 76, 128, 17, 12, 1, 221, 24, 47, 17, 12, 1, 221, 24, 39, + 17, 12, 1, 221, 24, 66, 17, 12, 1, 221, 24, 128, 17, 12, 1, 219, 159, 47, + 17, 12, 1, 219, 159, 39, 17, 12, 1, 219, 159, 66, 17, 12, 1, 219, 159, + 128, 17, 12, 1, 229, 186, 47, 17, 12, 1, 229, 186, 39, 17, 12, 1, 229, + 186, 66, 17, 12, 1, 229, 186, 128, 17, 12, 1, 247, 80, 47, 17, 12, 1, + 247, 80, 39, 17, 12, 1, 247, 80, 66, 17, 12, 1, 247, 80, 128, 17, 12, 1, + 231, 71, 47, 17, 12, 1, 231, 71, 39, 17, 12, 1, 231, 71, 66, 17, 12, 1, + 231, 71, 128, 17, 12, 1, 222, 92, 47, 17, 12, 1, 222, 92, 39, 17, 12, 1, + 222, 92, 66, 17, 12, 1, 222, 92, 128, 17, 12, 1, 222, 90, 47, 17, 12, 1, + 222, 90, 39, 17, 12, 1, 222, 90, 66, 17, 12, 1, 222, 90, 128, 17, 12, 1, + 249, 130, 47, 17, 12, 1, 249, 130, 39, 17, 12, 1, 249, 190, 47, 17, 12, + 1, 249, 190, 39, 17, 12, 1, 247, 104, 47, 17, 12, 1, 247, 104, 39, 17, + 12, 1, 249, 128, 47, 17, 12, 1, 249, 128, 39, 17, 12, 1, 237, 110, 47, + 17, 12, 1, 237, 110, 39, 17, 12, 1, 227, 49, 47, 17, 12, 1, 227, 49, 39, + 17, 12, 1, 236, 177, 47, 17, 12, 1, 236, 177, 39, 17, 12, 1, 236, 177, + 66, 17, 12, 1, 236, 177, 128, 17, 12, 1, 244, 244, 47, 17, 12, 1, 244, + 244, 39, 17, 12, 1, 244, 244, 66, 17, 12, 1, 244, 244, 128, 17, 12, 1, + 244, 10, 47, 17, 12, 1, 244, 10, 39, 17, 12, 1, 244, 10, 66, 17, 12, 1, + 244, 10, 128, 17, 12, 1, 232, 83, 47, 17, 12, 1, 232, 83, 39, 17, 12, 1, + 232, 83, 66, 17, 12, 1, 232, 83, 128, 17, 12, 1, 231, 194, 244, 108, 47, + 17, 12, 1, 231, 194, 244, 108, 39, 17, 12, 1, 227, 79, 47, 17, 12, 1, + 227, 79, 39, 17, 12, 1, 227, 79, 66, 17, 12, 1, 227, 79, 128, 17, 12, 1, + 243, 147, 2, 70, 71, 47, 17, 12, 1, 243, 147, 2, 70, 71, 39, 17, 12, 1, + 243, 147, 244, 66, 47, 17, 12, 1, 243, 147, 244, 66, 39, 17, 12, 1, 243, + 147, 244, 66, 66, 17, 12, 1, 243, 147, 244, 66, 128, 17, 12, 1, 243, 147, + 248, 164, 47, 17, 12, 1, 243, 147, 248, 164, 39, 17, 12, 1, 243, 147, + 248, 164, 66, 17, 12, 1, 243, 147, 248, 164, 128, 17, 12, 1, 70, 252, + 195, 47, 17, 12, 1, 70, 252, 195, 39, 17, 12, 1, 70, 252, 195, 2, 181, + 71, 47, 17, 12, 1, 70, 252, 195, 2, 181, 71, 39, 17, 12, 1, 232, 118, 47, + 17, 12, 1, 232, 118, 39, 17, 12, 1, 232, 118, 66, 17, 12, 1, 232, 118, + 128, 17, 12, 1, 105, 47, 17, 12, 1, 105, 39, 17, 12, 1, 230, 168, 47, 17, + 12, 1, 230, 168, 39, 17, 12, 1, 217, 201, 47, 17, 12, 1, 217, 201, 39, + 17, 12, 1, 105, 2, 181, 71, 47, 17, 12, 1, 219, 166, 47, 17, 12, 1, 219, + 166, 39, 17, 12, 1, 236, 98, 230, 168, 47, 17, 12, 1, 236, 98, 230, 168, + 39, 17, 12, 1, 236, 98, 217, 201, 47, 17, 12, 1, 236, 98, 217, 201, 39, + 17, 12, 1, 178, 47, 17, 12, 1, 178, 39, 17, 12, 1, 178, 66, 17, 12, 1, + 178, 128, 17, 12, 1, 220, 104, 236, 188, 236, 98, 99, 197, 66, 17, 12, 1, + 220, 104, 236, 188, 236, 98, 99, 197, 128, 17, 12, 24, 70, 2, 181, 71, 2, + 99, 47, 17, 12, 24, 70, 2, 181, 71, 2, 99, 39, 17, 12, 24, 70, 2, 181, + 71, 2, 254, 235, 47, 17, 12, 24, 70, 2, 181, 71, 2, 254, 235, 39, 17, 12, + 24, 70, 2, 181, 71, 2, 218, 234, 47, 17, 12, 24, 70, 2, 181, 71, 2, 218, + 234, 39, 17, 12, 24, 70, 2, 181, 71, 2, 105, 47, 17, 12, 24, 70, 2, 181, + 71, 2, 105, 39, 17, 12, 24, 70, 2, 181, 71, 2, 230, 168, 47, 17, 12, 24, + 70, 2, 181, 71, 2, 230, 168, 39, 17, 12, 24, 70, 2, 181, 71, 2, 217, 201, + 47, 17, 12, 24, 70, 2, 181, 71, 2, 217, 201, 39, 17, 12, 24, 70, 2, 181, + 71, 2, 178, 47, 17, 12, 24, 70, 2, 181, 71, 2, 178, 39, 17, 12, 24, 70, + 2, 181, 71, 2, 178, 66, 17, 12, 24, 220, 104, 236, 98, 70, 2, 181, 71, 2, + 99, 197, 47, 17, 12, 24, 220, 104, 236, 98, 70, 2, 181, 71, 2, 99, 197, + 39, 17, 12, 24, 220, 104, 236, 98, 70, 2, 181, 71, 2, 99, 197, 66, 17, + 12, 1, 245, 241, 70, 47, 17, 12, 1, 245, 241, 70, 39, 17, 12, 1, 245, + 241, 70, 66, 17, 12, 1, 245, 241, 70, 128, 17, 12, 24, 70, 2, 181, 71, 2, + 134, 47, 17, 12, 24, 70, 2, 181, 71, 2, 111, 47, 17, 12, 24, 70, 2, 181, + 71, 2, 62, 47, 17, 12, 24, 70, 2, 181, 71, 2, 99, 197, 47, 17, 12, 24, + 70, 2, 181, 71, 2, 70, 47, 17, 12, 24, 252, 129, 2, 134, 47, 17, 12, 24, + 252, 129, 2, 111, 47, 17, 12, 24, 252, 129, 2, 236, 147, 47, 17, 12, 24, + 252, 129, 2, 62, 47, 17, 12, 24, 252, 129, 2, 99, 197, 47, 17, 12, 24, + 252, 129, 2, 70, 47, 17, 12, 24, 222, 78, 2, 134, 47, 17, 12, 24, 222, + 78, 2, 111, 47, 17, 12, 24, 222, 78, 2, 236, 147, 47, 17, 12, 24, 222, + 78, 2, 62, 47, 17, 12, 24, 222, 78, 2, 99, 197, 47, 17, 12, 24, 222, 78, + 2, 70, 47, 17, 12, 24, 222, 20, 2, 134, 47, 17, 12, 24, 222, 20, 2, 62, + 47, 17, 12, 24, 222, 20, 2, 99, 197, 47, 17, 12, 24, 222, 20, 2, 70, 47, + 17, 12, 24, 134, 2, 111, 47, 17, 12, 24, 134, 2, 62, 47, 17, 12, 24, 111, + 2, 134, 47, 17, 12, 24, 111, 2, 62, 47, 17, 12, 24, 236, 147, 2, 134, 47, + 17, 12, 24, 236, 147, 2, 111, 47, 17, 12, 24, 236, 147, 2, 62, 47, 17, + 12, 24, 226, 83, 2, 134, 47, 17, 12, 24, 226, 83, 2, 111, 47, 17, 12, 24, + 226, 83, 2, 236, 147, 47, 17, 12, 24, 226, 83, 2, 62, 47, 17, 12, 24, + 226, 171, 2, 111, 47, 17, 12, 24, 226, 171, 2, 62, 47, 17, 12, 24, 249, + 203, 2, 134, 47, 17, 12, 24, 249, 203, 2, 111, 47, 17, 12, 24, 249, 203, + 2, 236, 147, 47, 17, 12, 24, 249, 203, 2, 62, 47, 17, 12, 24, 222, 138, + 2, 111, 47, 17, 12, 24, 222, 138, 2, 62, 47, 17, 12, 24, 217, 110, 2, 62, + 47, 17, 12, 24, 254, 192, 2, 134, 47, 17, 12, 24, 254, 192, 2, 62, 47, + 17, 12, 24, 244, 123, 2, 134, 47, 17, 12, 24, 244, 123, 2, 62, 47, 17, + 12, 24, 245, 222, 2, 134, 47, 17, 12, 24, 245, 222, 2, 111, 47, 17, 12, + 24, 245, 222, 2, 236, 147, 47, 17, 12, 24, 245, 222, 2, 62, 47, 17, 12, + 24, 245, 222, 2, 99, 197, 47, 17, 12, 24, 245, 222, 2, 70, 47, 17, 12, + 24, 228, 149, 2, 111, 47, 17, 12, 24, 228, 149, 2, 62, 47, 17, 12, 24, + 228, 149, 2, 99, 197, 47, 17, 12, 24, 228, 149, 2, 70, 47, 17, 12, 24, + 236, 247, 2, 99, 47, 17, 12, 24, 236, 247, 2, 134, 47, 17, 12, 24, 236, + 247, 2, 111, 47, 17, 12, 24, 236, 247, 2, 236, 147, 47, 17, 12, 24, 236, + 247, 2, 235, 161, 47, 17, 12, 24, 236, 247, 2, 62, 47, 17, 12, 24, 236, + 247, 2, 99, 197, 47, 17, 12, 24, 236, 247, 2, 70, 47, 17, 12, 24, 235, + 161, 2, 134, 47, 17, 12, 24, 235, 161, 2, 111, 47, 17, 12, 24, 235, 161, + 2, 236, 147, 47, 17, 12, 24, 235, 161, 2, 62, 47, 17, 12, 24, 235, 161, + 2, 99, 197, 47, 17, 12, 24, 235, 161, 2, 70, 47, 17, 12, 24, 62, 2, 134, + 47, 17, 12, 24, 62, 2, 111, 47, 17, 12, 24, 62, 2, 236, 147, 47, 17, 12, + 24, 62, 2, 62, 47, 17, 12, 24, 62, 2, 99, 197, 47, 17, 12, 24, 62, 2, 70, + 47, 17, 12, 24, 231, 194, 2, 134, 47, 17, 12, 24, 231, 194, 2, 111, 47, + 17, 12, 24, 231, 194, 2, 236, 147, 47, 17, 12, 24, 231, 194, 2, 62, 47, + 17, 12, 24, 231, 194, 2, 99, 197, 47, 17, 12, 24, 231, 194, 2, 70, 47, + 17, 12, 24, 243, 147, 2, 134, 47, 17, 12, 24, 243, 147, 2, 62, 47, 17, + 12, 24, 243, 147, 2, 99, 197, 47, 17, 12, 24, 243, 147, 2, 70, 47, 17, + 12, 24, 70, 2, 134, 47, 17, 12, 24, 70, 2, 111, 47, 17, 12, 24, 70, 2, + 236, 147, 47, 17, 12, 24, 70, 2, 62, 47, 17, 12, 24, 70, 2, 99, 197, 47, + 17, 12, 24, 70, 2, 70, 47, 17, 12, 24, 222, 30, 2, 223, 59, 99, 47, 17, + 12, 24, 227, 197, 2, 223, 59, 99, 47, 17, 12, 24, 99, 197, 2, 223, 59, + 99, 47, 17, 12, 24, 225, 17, 2, 249, 171, 47, 17, 12, 24, 225, 17, 2, + 236, 205, 47, 17, 12, 24, 225, 17, 2, 245, 239, 47, 17, 12, 24, 225, 17, + 2, 249, 173, 47, 17, 12, 24, 225, 17, 2, 236, 207, 47, 17, 12, 24, 225, + 17, 2, 223, 59, 99, 47, 17, 12, 24, 70, 2, 181, 71, 2, 227, 197, 39, 17, + 12, 24, 70, 2, 181, 71, 2, 217, 107, 39, 17, 12, 24, 70, 2, 181, 71, 2, + 62, 39, 17, 12, 24, 70, 2, 181, 71, 2, 231, 194, 39, 17, 12, 24, 70, 2, + 181, 71, 2, 99, 197, 39, 17, 12, 24, 70, 2, 181, 71, 2, 70, 39, 17, 12, + 24, 252, 129, 2, 227, 197, 39, 17, 12, 24, 252, 129, 2, 217, 107, 39, 17, + 12, 24, 252, 129, 2, 62, 39, 17, 12, 24, 252, 129, 2, 231, 194, 39, 17, + 12, 24, 252, 129, 2, 99, 197, 39, 17, 12, 24, 252, 129, 2, 70, 39, 17, + 12, 24, 222, 78, 2, 227, 197, 39, 17, 12, 24, 222, 78, 2, 217, 107, 39, + 17, 12, 24, 222, 78, 2, 62, 39, 17, 12, 24, 222, 78, 2, 231, 194, 39, 17, + 12, 24, 222, 78, 2, 99, 197, 39, 17, 12, 24, 222, 78, 2, 70, 39, 17, 12, + 24, 222, 20, 2, 227, 197, 39, 17, 12, 24, 222, 20, 2, 217, 107, 39, 17, + 12, 24, 222, 20, 2, 62, 39, 17, 12, 24, 222, 20, 2, 231, 194, 39, 17, 12, + 24, 222, 20, 2, 99, 197, 39, 17, 12, 24, 222, 20, 2, 70, 39, 17, 12, 24, + 245, 222, 2, 99, 197, 39, 17, 12, 24, 245, 222, 2, 70, 39, 17, 12, 24, + 228, 149, 2, 99, 197, 39, 17, 12, 24, 228, 149, 2, 70, 39, 17, 12, 24, + 236, 247, 2, 99, 39, 17, 12, 24, 236, 247, 2, 235, 161, 39, 17, 12, 24, + 236, 247, 2, 62, 39, 17, 12, 24, 236, 247, 2, 99, 197, 39, 17, 12, 24, + 236, 247, 2, 70, 39, 17, 12, 24, 235, 161, 2, 62, 39, 17, 12, 24, 235, + 161, 2, 99, 197, 39, 17, 12, 24, 235, 161, 2, 70, 39, 17, 12, 24, 62, 2, + 99, 39, 17, 12, 24, 62, 2, 62, 39, 17, 12, 24, 231, 194, 2, 227, 197, 39, + 17, 12, 24, 231, 194, 2, 217, 107, 39, 17, 12, 24, 231, 194, 2, 62, 39, + 17, 12, 24, 231, 194, 2, 231, 194, 39, 17, 12, 24, 231, 194, 2, 99, 197, + 39, 17, 12, 24, 231, 194, 2, 70, 39, 17, 12, 24, 99, 197, 2, 223, 59, 99, + 39, 17, 12, 24, 70, 2, 227, 197, 39, 17, 12, 24, 70, 2, 217, 107, 39, 17, + 12, 24, 70, 2, 62, 39, 17, 12, 24, 70, 2, 231, 194, 39, 17, 12, 24, 70, + 2, 99, 197, 39, 17, 12, 24, 70, 2, 70, 39, 17, 12, 24, 70, 2, 181, 71, 2, + 134, 66, 17, 12, 24, 70, 2, 181, 71, 2, 111, 66, 17, 12, 24, 70, 2, 181, + 71, 2, 236, 147, 66, 17, 12, 24, 70, 2, 181, 71, 2, 62, 66, 17, 12, 24, + 70, 2, 181, 71, 2, 243, 147, 66, 17, 12, 24, 252, 129, 2, 134, 66, 17, + 12, 24, 252, 129, 2, 111, 66, 17, 12, 24, 252, 129, 2, 236, 147, 66, 17, + 12, 24, 252, 129, 2, 62, 66, 17, 12, 24, 252, 129, 2, 243, 147, 66, 17, + 12, 24, 222, 78, 2, 134, 66, 17, 12, 24, 222, 78, 2, 111, 66, 17, 12, 24, + 222, 78, 2, 236, 147, 66, 17, 12, 24, 222, 78, 2, 62, 66, 17, 12, 24, + 222, 78, 2, 243, 147, 66, 17, 12, 24, 222, 20, 2, 62, 66, 17, 12, 24, + 134, 2, 111, 66, 17, 12, 24, 134, 2, 62, 66, 17, 12, 24, 111, 2, 134, 66, + 17, 12, 24, 111, 2, 62, 66, 17, 12, 24, 236, 147, 2, 134, 66, 17, 12, 24, + 236, 147, 2, 62, 66, 17, 12, 24, 226, 83, 2, 134, 66, 17, 12, 24, 226, + 83, 2, 111, 66, 17, 12, 24, 226, 83, 2, 236, 147, 66, 17, 12, 24, 226, + 83, 2, 62, 66, 17, 12, 24, 226, 171, 2, 111, 66, 17, 12, 24, 226, 171, 2, + 236, 147, 66, 17, 12, 24, 226, 171, 2, 62, 66, 17, 12, 24, 249, 203, 2, + 134, 66, 17, 12, 24, 249, 203, 2, 111, 66, 17, 12, 24, 249, 203, 2, 236, + 147, 66, 17, 12, 24, 249, 203, 2, 62, 66, 17, 12, 24, 222, 138, 2, 111, + 66, 17, 12, 24, 217, 110, 2, 62, 66, 17, 12, 24, 254, 192, 2, 134, 66, + 17, 12, 24, 254, 192, 2, 62, 66, 17, 12, 24, 244, 123, 2, 134, 66, 17, + 12, 24, 244, 123, 2, 62, 66, 17, 12, 24, 245, 222, 2, 134, 66, 17, 12, + 24, 245, 222, 2, 111, 66, 17, 12, 24, 245, 222, 2, 236, 147, 66, 17, 12, + 24, 245, 222, 2, 62, 66, 17, 12, 24, 228, 149, 2, 111, 66, 17, 12, 24, + 228, 149, 2, 62, 66, 17, 12, 24, 236, 247, 2, 134, 66, 17, 12, 24, 236, + 247, 2, 111, 66, 17, 12, 24, 236, 247, 2, 236, 147, 66, 17, 12, 24, 236, + 247, 2, 235, 161, 66, 17, 12, 24, 236, 247, 2, 62, 66, 17, 12, 24, 235, + 161, 2, 134, 66, 17, 12, 24, 235, 161, 2, 111, 66, 17, 12, 24, 235, 161, + 2, 236, 147, 66, 17, 12, 24, 235, 161, 2, 62, 66, 17, 12, 24, 235, 161, + 2, 243, 147, 66, 17, 12, 24, 62, 2, 134, 66, 17, 12, 24, 62, 2, 111, 66, + 17, 12, 24, 62, 2, 236, 147, 66, 17, 12, 24, 62, 2, 62, 66, 17, 12, 24, + 231, 194, 2, 134, 66, 17, 12, 24, 231, 194, 2, 111, 66, 17, 12, 24, 231, + 194, 2, 236, 147, 66, 17, 12, 24, 231, 194, 2, 62, 66, 17, 12, 24, 231, + 194, 2, 243, 147, 66, 17, 12, 24, 243, 147, 2, 134, 66, 17, 12, 24, 243, + 147, 2, 62, 66, 17, 12, 24, 243, 147, 2, 223, 59, 99, 66, 17, 12, 24, 70, + 2, 134, 66, 17, 12, 24, 70, 2, 111, 66, 17, 12, 24, 70, 2, 236, 147, 66, + 17, 12, 24, 70, 2, 62, 66, 17, 12, 24, 70, 2, 243, 147, 66, 17, 12, 24, + 70, 2, 181, 71, 2, 62, 128, 17, 12, 24, 70, 2, 181, 71, 2, 243, 147, 128, + 17, 12, 24, 252, 129, 2, 62, 128, 17, 12, 24, 252, 129, 2, 243, 147, 128, + 17, 12, 24, 222, 78, 2, 62, 128, 17, 12, 24, 222, 78, 2, 243, 147, 128, + 17, 12, 24, 222, 20, 2, 62, 128, 17, 12, 24, 222, 20, 2, 243, 147, 128, + 17, 12, 24, 226, 83, 2, 62, 128, 17, 12, 24, 226, 83, 2, 243, 147, 128, + 17, 12, 24, 224, 243, 2, 62, 128, 17, 12, 24, 224, 243, 2, 243, 147, 128, + 17, 12, 24, 236, 247, 2, 235, 161, 128, 17, 12, 24, 236, 247, 2, 62, 128, + 17, 12, 24, 235, 161, 2, 62, 128, 17, 12, 24, 231, 194, 2, 62, 128, 17, + 12, 24, 231, 194, 2, 243, 147, 128, 17, 12, 24, 70, 2, 62, 128, 17, 12, + 24, 70, 2, 243, 147, 128, 17, 12, 24, 225, 17, 2, 245, 239, 128, 17, 12, + 24, 225, 17, 2, 249, 173, 128, 17, 12, 24, 225, 17, 2, 236, 207, 128, 17, + 12, 24, 222, 138, 2, 99, 197, 47, 17, 12, 24, 222, 138, 2, 70, 47, 17, + 12, 24, 254, 192, 2, 99, 197, 47, 17, 12, 24, 254, 192, 2, 70, 47, 17, + 12, 24, 244, 123, 2, 99, 197, 47, 17, 12, 24, 244, 123, 2, 70, 47, 17, + 12, 24, 226, 83, 2, 99, 197, 47, 17, 12, 24, 226, 83, 2, 70, 47, 17, 12, + 24, 224, 243, 2, 99, 197, 47, 17, 12, 24, 224, 243, 2, 70, 47, 17, 12, + 24, 111, 2, 99, 197, 47, 17, 12, 24, 111, 2, 70, 47, 17, 12, 24, 134, 2, + 99, 197, 47, 17, 12, 24, 134, 2, 70, 47, 17, 12, 24, 236, 147, 2, 99, + 197, 47, 17, 12, 24, 236, 147, 2, 70, 47, 17, 12, 24, 226, 171, 2, 99, + 197, 47, 17, 12, 24, 226, 171, 2, 70, 47, 17, 12, 24, 249, 203, 2, 99, + 197, 47, 17, 12, 24, 249, 203, 2, 70, 47, 17, 12, 24, 224, 243, 2, 134, + 47, 17, 12, 24, 224, 243, 2, 111, 47, 17, 12, 24, 224, 243, 2, 236, 147, + 47, 17, 12, 24, 224, 243, 2, 62, 47, 17, 12, 24, 224, 243, 2, 227, 197, + 47, 17, 12, 24, 226, 83, 2, 227, 197, 47, 17, 12, 24, 226, 171, 2, 227, + 197, 47, 17, 12, 24, 249, 203, 2, 227, 197, 47, 17, 12, 24, 222, 138, 2, + 99, 197, 39, 17, 12, 24, 222, 138, 2, 70, 39, 17, 12, 24, 254, 192, 2, + 99, 197, 39, 17, 12, 24, 254, 192, 2, 70, 39, 17, 12, 24, 244, 123, 2, + 99, 197, 39, 17, 12, 24, 244, 123, 2, 70, 39, 17, 12, 24, 226, 83, 2, 99, + 197, 39, 17, 12, 24, 226, 83, 2, 70, 39, 17, 12, 24, 224, 243, 2, 99, + 197, 39, 17, 12, 24, 224, 243, 2, 70, 39, 17, 12, 24, 111, 2, 99, 197, + 39, 17, 12, 24, 111, 2, 70, 39, 17, 12, 24, 134, 2, 99, 197, 39, 17, 12, + 24, 134, 2, 70, 39, 17, 12, 24, 236, 147, 2, 99, 197, 39, 17, 12, 24, + 236, 147, 2, 70, 39, 17, 12, 24, 226, 171, 2, 99, 197, 39, 17, 12, 24, + 226, 171, 2, 70, 39, 17, 12, 24, 249, 203, 2, 99, 197, 39, 17, 12, 24, + 249, 203, 2, 70, 39, 17, 12, 24, 224, 243, 2, 134, 39, 17, 12, 24, 224, + 243, 2, 111, 39, 17, 12, 24, 224, 243, 2, 236, 147, 39, 17, 12, 24, 224, + 243, 2, 62, 39, 17, 12, 24, 224, 243, 2, 227, 197, 39, 17, 12, 24, 226, + 83, 2, 227, 197, 39, 17, 12, 24, 226, 171, 2, 227, 197, 39, 17, 12, 24, + 249, 203, 2, 227, 197, 39, 17, 12, 24, 224, 243, 2, 134, 66, 17, 12, 24, + 224, 243, 2, 111, 66, 17, 12, 24, 224, 243, 2, 236, 147, 66, 17, 12, 24, + 224, 243, 2, 62, 66, 17, 12, 24, 226, 83, 2, 243, 147, 66, 17, 12, 24, + 224, 243, 2, 243, 147, 66, 17, 12, 24, 222, 138, 2, 62, 66, 17, 12, 24, + 226, 83, 2, 134, 128, 17, 12, 24, 226, 83, 2, 111, 128, 17, 12, 24, 226, + 83, 2, 236, 147, 128, 17, 12, 24, 224, 243, 2, 134, 128, 17, 12, 24, 224, + 243, 2, 111, 128, 17, 12, 24, 224, 243, 2, 236, 147, 128, 17, 12, 24, + 222, 138, 2, 62, 128, 17, 12, 24, 217, 110, 2, 62, 128, 17, 12, 24, 99, + 2, 245, 237, 39, 17, 12, 24, 99, 2, 245, 237, 47, 17, 230, 97, 42, 229, + 229, 230, 97, 45, 229, 229, 12, 24, 222, 78, 2, 134, 2, 62, 66, 17, 12, + 24, 222, 78, 2, 111, 2, 134, 39, 17, 12, 24, 222, 78, 2, 111, 2, 134, 66, + 17, 12, 24, 222, 78, 2, 111, 2, 62, 66, 17, 12, 24, 222, 78, 2, 236, 147, + 2, 62, 66, 17, 12, 24, 222, 78, 2, 62, 2, 134, 66, 17, 12, 24, 222, 78, + 2, 62, 2, 111, 66, 17, 12, 24, 222, 78, 2, 62, 2, 236, 147, 66, 17, 12, + 24, 134, 2, 62, 2, 111, 39, 17, 12, 24, 134, 2, 62, 2, 111, 66, 17, 12, + 24, 111, 2, 62, 2, 70, 39, 17, 12, 24, 111, 2, 62, 2, 99, 197, 39, 17, + 12, 24, 226, 83, 2, 111, 2, 134, 66, 17, 12, 24, 226, 83, 2, 134, 2, 111, + 66, 17, 12, 24, 226, 83, 2, 134, 2, 99, 197, 39, 17, 12, 24, 226, 83, 2, + 62, 2, 111, 39, 17, 12, 24, 226, 83, 2, 62, 2, 111, 66, 17, 12, 24, 226, + 83, 2, 62, 2, 134, 66, 17, 12, 24, 226, 83, 2, 62, 2, 62, 39, 17, 12, 24, + 226, 83, 2, 62, 2, 62, 66, 17, 12, 24, 226, 171, 2, 111, 2, 111, 39, 17, + 12, 24, 226, 171, 2, 111, 2, 111, 66, 17, 12, 24, 226, 171, 2, 62, 2, 62, + 39, 17, 12, 24, 224, 243, 2, 111, 2, 62, 39, 17, 12, 24, 224, 243, 2, + 111, 2, 62, 66, 17, 12, 24, 224, 243, 2, 134, 2, 70, 39, 17, 12, 24, 224, + 243, 2, 62, 2, 236, 147, 39, 17, 12, 24, 224, 243, 2, 62, 2, 236, 147, + 66, 17, 12, 24, 224, 243, 2, 62, 2, 62, 39, 17, 12, 24, 224, 243, 2, 62, + 2, 62, 66, 17, 12, 24, 249, 203, 2, 111, 2, 99, 197, 39, 17, 12, 24, 249, + 203, 2, 236, 147, 2, 62, 39, 17, 12, 24, 249, 203, 2, 236, 147, 2, 62, + 66, 17, 12, 24, 222, 138, 2, 62, 2, 111, 39, 17, 12, 24, 222, 138, 2, 62, + 2, 111, 66, 17, 12, 24, 222, 138, 2, 62, 2, 62, 66, 17, 12, 24, 222, 138, + 2, 62, 2, 70, 39, 17, 12, 24, 254, 192, 2, 134, 2, 62, 39, 17, 12, 24, + 254, 192, 2, 62, 2, 62, 39, 17, 12, 24, 254, 192, 2, 62, 2, 62, 66, 17, + 12, 24, 254, 192, 2, 62, 2, 99, 197, 39, 17, 12, 24, 244, 123, 2, 62, 2, + 62, 39, 17, 12, 24, 244, 123, 2, 62, 2, 70, 39, 17, 12, 24, 244, 123, 2, + 62, 2, 99, 197, 39, 17, 12, 24, 245, 222, 2, 236, 147, 2, 62, 39, 17, 12, + 24, 245, 222, 2, 236, 147, 2, 62, 66, 17, 12, 24, 228, 149, 2, 62, 2, + 111, 39, 17, 12, 24, 228, 149, 2, 62, 2, 62, 39, 17, 12, 24, 235, 161, 2, + 111, 2, 62, 39, 17, 12, 24, 235, 161, 2, 111, 2, 70, 39, 17, 12, 24, 235, + 161, 2, 111, 2, 99, 197, 39, 17, 12, 24, 235, 161, 2, 134, 2, 134, 66, + 17, 12, 24, 235, 161, 2, 134, 2, 134, 39, 17, 12, 24, 235, 161, 2, 236, + 147, 2, 62, 39, 17, 12, 24, 235, 161, 2, 236, 147, 2, 62, 66, 17, 12, 24, + 235, 161, 2, 62, 2, 111, 39, 17, 12, 24, 235, 161, 2, 62, 2, 111, 66, 17, + 12, 24, 62, 2, 111, 2, 134, 66, 17, 12, 24, 62, 2, 111, 2, 62, 66, 17, + 12, 24, 62, 2, 111, 2, 70, 39, 17, 12, 24, 62, 2, 134, 2, 111, 66, 17, + 12, 24, 62, 2, 134, 2, 62, 66, 17, 12, 24, 62, 2, 236, 147, 2, 134, 66, + 17, 12, 24, 62, 2, 236, 147, 2, 62, 66, 17, 12, 24, 62, 2, 134, 2, 236, + 147, 66, 17, 12, 24, 243, 147, 2, 62, 2, 134, 66, 17, 12, 24, 243, 147, + 2, 62, 2, 62, 66, 17, 12, 24, 231, 194, 2, 111, 2, 62, 66, 17, 12, 24, + 231, 194, 2, 111, 2, 99, 197, 39, 17, 12, 24, 231, 194, 2, 134, 2, 62, + 39, 17, 12, 24, 231, 194, 2, 134, 2, 62, 66, 17, 12, 24, 231, 194, 2, + 134, 2, 99, 197, 39, 17, 12, 24, 231, 194, 2, 62, 2, 70, 39, 17, 12, 24, + 231, 194, 2, 62, 2, 99, 197, 39, 17, 12, 24, 70, 2, 62, 2, 62, 39, 17, + 12, 24, 70, 2, 62, 2, 62, 66, 17, 12, 24, 252, 129, 2, 236, 147, 2, 70, + 39, 17, 12, 24, 222, 78, 2, 134, 2, 70, 39, 17, 12, 24, 222, 78, 2, 134, + 2, 99, 197, 39, 17, 12, 24, 222, 78, 2, 236, 147, 2, 70, 39, 17, 12, 24, + 222, 78, 2, 236, 147, 2, 99, 197, 39, 17, 12, 24, 222, 78, 2, 62, 2, 70, + 39, 17, 12, 24, 222, 78, 2, 62, 2, 99, 197, 39, 17, 12, 24, 134, 2, 62, + 2, 70, 39, 17, 12, 24, 134, 2, 111, 2, 99, 197, 39, 17, 12, 24, 134, 2, + 62, 2, 99, 197, 39, 17, 12, 24, 226, 83, 2, 236, 147, 2, 99, 197, 39, 17, + 12, 24, 226, 171, 2, 111, 2, 70, 39, 17, 12, 24, 224, 243, 2, 111, 2, 70, + 39, 17, 12, 24, 249, 203, 2, 111, 2, 70, 39, 17, 12, 24, 235, 161, 2, + 134, 2, 70, 39, 17, 12, 24, 235, 161, 2, 62, 2, 70, 39, 17, 12, 24, 70, + 2, 111, 2, 70, 39, 17, 12, 24, 70, 2, 134, 2, 70, 39, 17, 12, 24, 70, 2, + 62, 2, 70, 39, 17, 12, 24, 62, 2, 62, 2, 70, 39, 17, 12, 24, 228, 149, 2, + 62, 2, 70, 39, 17, 12, 24, 231, 194, 2, 111, 2, 70, 39, 17, 12, 24, 228, + 149, 2, 62, 2, 111, 66, 17, 12, 24, 235, 161, 2, 111, 2, 62, 66, 17, 12, + 24, 254, 192, 2, 62, 2, 70, 39, 17, 12, 24, 236, 247, 2, 62, 2, 70, 39, + 17, 12, 24, 231, 194, 2, 134, 2, 111, 66, 17, 12, 24, 62, 2, 236, 147, 2, + 70, 39, 17, 12, 24, 235, 161, 2, 134, 2, 62, 66, 17, 12, 24, 236, 247, 2, + 62, 2, 62, 39, 17, 12, 24, 235, 161, 2, 134, 2, 62, 39, 17, 12, 24, 231, + 194, 2, 134, 2, 111, 39, 17, 12, 24, 134, 2, 111, 2, 70, 39, 17, 12, 24, + 111, 2, 134, 2, 70, 39, 17, 12, 24, 62, 2, 134, 2, 70, 39, 17, 12, 24, + 245, 222, 2, 62, 2, 70, 39, 17, 12, 24, 252, 129, 2, 111, 2, 70, 39, 17, + 12, 24, 236, 247, 2, 62, 2, 62, 66, 17, 12, 24, 254, 192, 2, 134, 2, 62, + 66, 17, 12, 24, 226, 171, 2, 62, 2, 62, 66, 17, 12, 24, 226, 83, 2, 236, + 147, 2, 70, 39, 17, 12, 24, 231, 194, 2, 134, 2, 70, 39, 17, 12, 24, 226, + 153, 220, 32, 254, 14, 236, 35, 223, 137, 5, 47, 17, 12, 24, 228, 145, + 220, 32, 254, 14, 236, 35, 223, 137, 5, 47, 17, 12, 24, 254, 156, 47, 17, + 12, 24, 254, 179, 47, 17, 12, 24, 233, 130, 47, 17, 12, 24, 226, 154, 47, + 17, 12, 24, 227, 230, 47, 17, 12, 24, 254, 170, 47, 17, 12, 24, 218, 249, + 47, 17, 12, 24, 226, 153, 47, 17, 12, 24, 226, 152, 254, 170, 218, 248, + 12, 24, 237, 120, 227, 146, 55, 12, 24, 252, 61, 254, 65, 254, 66, 41, + 226, 73, 41, 225, 218, 41, 225, 150, 41, 225, 139, 41, 225, 128, 41, 225, + 117, 41, 225, 106, 41, 225, 95, 41, 225, 84, 41, 226, 72, 41, 226, 61, + 41, 226, 50, 41, 226, 39, 41, 226, 28, 41, 226, 17, 41, 226, 6, 228, 238, + 245, 124, 35, 69, 250, 168, 228, 238, 245, 124, 35, 69, 98, 250, 168, + 228, 238, 245, 124, 35, 69, 98, 245, 90, 223, 136, 228, 238, 245, 124, + 35, 69, 250, 175, 228, 238, 245, 124, 35, 69, 225, 67, 228, 238, 245, + 124, 35, 69, 246, 95, 78, 228, 238, 245, 124, 35, 69, 228, 82, 78, 228, + 238, 245, 124, 35, 69, 42, 67, 235, 91, 115, 228, 238, 245, 124, 35, 69, + 45, 67, 235, 91, 252, 16, 228, 238, 245, 124, 35, 69, 186, 246, 208, 36, + 24, 42, 243, 194, 36, 24, 45, 243, 194, 36, 51, 221, 180, 42, 243, 194, + 36, 51, 221, 180, 45, 243, 194, 36, 234, 116, 42, 243, 194, 36, 234, 116, + 45, 243, 194, 36, 250, 151, 234, 115, 228, 238, 245, 124, 35, 69, 124, + 61, 235, 121, 228, 238, 245, 124, 35, 69, 246, 206, 249, 146, 228, 238, + 245, 124, 35, 69, 246, 198, 249, 146, 228, 238, 245, 124, 35, 69, 109, + 235, 43, 228, 238, 245, 124, 35, 69, 218, 235, 109, 235, 43, 228, 238, + 245, 124, 35, 69, 42, 229, 229, 228, 238, 245, 124, 35, 69, 45, 229, 229, + 228, 238, 245, 124, 35, 69, 42, 250, 79, 115, 228, 238, 245, 124, 35, 69, + 45, 250, 79, 115, 228, 238, 245, 124, 35, 69, 42, 221, 114, 224, 236, + 115, 228, 238, 245, 124, 35, 69, 45, 221, 114, 224, 236, 115, 228, 238, + 245, 124, 35, 69, 42, 84, 235, 91, 115, 228, 238, 245, 124, 35, 69, 45, + 84, 235, 91, 115, 228, 238, 245, 124, 35, 69, 42, 51, 254, 120, 115, 228, + 238, 245, 124, 35, 69, 45, 51, 254, 120, 115, 228, 238, 245, 124, 35, 69, + 42, 254, 120, 115, 228, 238, 245, 124, 35, 69, 45, 254, 120, 115, 228, + 238, 245, 124, 35, 69, 42, 250, 124, 115, 228, 238, 245, 124, 35, 69, 45, + 250, 124, 115, 228, 238, 245, 124, 35, 69, 42, 67, 250, 124, 115, 228, + 238, 245, 124, 35, 69, 45, 67, 250, 124, 115, 225, 49, 248, 145, 67, 225, + 49, 248, 145, 228, 238, 245, 124, 35, 69, 42, 40, 115, 228, 238, 245, + 124, 35, 69, 45, 40, 115, 249, 145, 230, 73, 251, 82, 230, 73, 218, 235, + 230, 73, 51, 218, 235, 230, 73, 249, 145, 109, 235, 43, 251, 82, 109, + 235, 43, 218, 235, 109, 235, 43, 3, 250, 168, 3, 98, 250, 168, 3, 245, + 90, 223, 136, 3, 225, 67, 3, 250, 175, 3, 228, 82, 78, 3, 246, 95, 78, 3, + 246, 206, 249, 146, 3, 42, 229, 229, 3, 45, 229, 229, 3, 42, 250, 79, + 115, 3, 45, 250, 79, 115, 3, 42, 221, 114, 224, 236, 115, 3, 45, 221, + 114, 224, 236, 115, 3, 54, 55, 3, 254, 134, 3, 253, 251, 3, 88, 55, 3, + 242, 120, 3, 235, 87, 55, 3, 244, 30, 55, 3, 246, 154, 55, 3, 227, 160, + 224, 17, 3, 248, 155, 55, 3, 229, 169, 55, 3, 250, 167, 253, 244, 12, + 245, 237, 47, 17, 12, 222, 108, 2, 245, 237, 50, 12, 249, 171, 47, 17, + 12, 222, 136, 245, 107, 12, 236, 205, 47, 17, 12, 245, 239, 47, 17, 12, + 245, 239, 128, 17, 12, 249, 173, 47, 17, 12, 249, 173, 128, 17, 12, 236, + 207, 47, 17, 12, 236, 207, 128, 17, 12, 225, 17, 47, 17, 12, 225, 17, + 128, 17, 12, 223, 76, 47, 17, 12, 223, 76, 128, 17, 12, 1, 181, 47, 17, + 12, 1, 99, 2, 234, 111, 71, 47, 17, 12, 1, 99, 2, 234, 111, 71, 39, 17, + 12, 1, 99, 2, 181, 71, 47, 17, 12, 1, 99, 2, 181, 71, 39, 17, 12, 1, 218, + 234, 2, 181, 71, 47, 17, 12, 1, 218, 234, 2, 181, 71, 39, 17, 12, 1, 99, + 2, 181, 252, 118, 47, 17, 12, 1, 99, 2, 181, 252, 118, 39, 17, 12, 1, 70, + 2, 181, 71, 47, 17, 12, 1, 70, 2, 181, 71, 39, 17, 12, 1, 70, 2, 181, 71, + 66, 17, 12, 1, 70, 2, 181, 71, 128, 17, 12, 1, 99, 47, 17, 12, 1, 99, 39, + 17, 12, 1, 252, 129, 47, 17, 12, 1, 252, 129, 39, 17, 12, 1, 252, 129, + 66, 17, 12, 1, 252, 129, 128, 17, 12, 1, 222, 78, 234, 73, 47, 17, 12, 1, + 222, 78, 234, 73, 39, 17, 12, 1, 222, 78, 47, 17, 12, 1, 222, 78, 39, 17, + 12, 1, 222, 78, 66, 17, 12, 1, 222, 78, 128, 17, 12, 1, 222, 20, 47, 17, + 12, 1, 222, 20, 39, 17, 12, 1, 222, 20, 66, 17, 12, 1, 222, 20, 128, 17, + 12, 1, 134, 47, 17, 12, 1, 134, 39, 17, 12, 1, 134, 66, 17, 12, 1, 134, + 128, 17, 12, 1, 111, 47, 17, 12, 1, 111, 39, 17, 12, 1, 111, 66, 17, 12, + 1, 111, 128, 17, 12, 1, 236, 147, 47, 17, 12, 1, 236, 147, 39, 17, 12, 1, + 236, 147, 66, 17, 12, 1, 236, 147, 128, 17, 12, 1, 249, 184, 47, 17, 12, + 1, 249, 184, 39, 17, 12, 1, 222, 30, 47, 17, 12, 1, 222, 30, 39, 17, 12, + 1, 227, 197, 47, 17, 12, 1, 227, 197, 39, 17, 12, 1, 217, 107, 47, 17, + 12, 1, 217, 107, 39, 17, 12, 1, 226, 83, 47, 17, 12, 1, 226, 83, 39, 17, + 12, 1, 226, 83, 66, 17, 12, 1, 226, 83, 128, 17, 12, 1, 224, 243, 47, 17, + 12, 1, 224, 243, 39, 17, 12, 1, 224, 243, 66, 17, 12, 1, 224, 243, 128, + 17, 12, 1, 226, 171, 47, 17, 12, 1, 226, 171, 39, 17, 12, 1, 226, 171, + 66, 17, 12, 1, 226, 171, 128, 17, 12, 1, 249, 203, 47, 17, 12, 1, 249, + 203, 39, 17, 12, 1, 249, 203, 66, 17, 12, 1, 249, 203, 128, 17, 12, 1, + 222, 138, 47, 17, 12, 1, 222, 138, 39, 17, 12, 1, 222, 138, 66, 17, 12, + 1, 222, 138, 128, 17, 12, 1, 217, 110, 47, 17, 12, 1, 217, 110, 39, 17, + 12, 1, 217, 110, 66, 17, 12, 1, 217, 110, 128, 17, 12, 1, 254, 192, 47, + 17, 12, 1, 254, 192, 39, 17, 12, 1, 254, 192, 66, 17, 12, 1, 254, 192, + 128, 17, 12, 1, 244, 123, 47, 17, 12, 1, 244, 123, 39, 17, 12, 1, 244, + 123, 66, 17, 12, 1, 244, 123, 128, 17, 12, 1, 245, 222, 47, 17, 12, 1, + 245, 222, 39, 17, 12, 1, 245, 222, 66, 17, 12, 1, 245, 222, 128, 17, 12, + 1, 228, 149, 47, 17, 12, 1, 228, 149, 39, 17, 12, 1, 228, 149, 66, 17, + 12, 1, 228, 149, 128, 17, 12, 1, 236, 247, 47, 17, 12, 1, 236, 247, 39, + 17, 12, 1, 236, 247, 66, 17, 12, 1, 236, 247, 128, 17, 12, 1, 235, 161, + 47, 17, 12, 1, 235, 161, 39, 17, 12, 1, 235, 161, 66, 17, 12, 1, 235, + 161, 128, 17, 12, 1, 62, 47, 17, 12, 1, 62, 39, 17, 12, 1, 62, 66, 17, + 12, 1, 62, 128, 17, 12, 1, 231, 194, 47, 17, 12, 1, 231, 194, 39, 17, 12, + 1, 231, 194, 66, 17, 12, 1, 231, 194, 128, 17, 12, 1, 243, 147, 47, 17, + 12, 1, 243, 147, 39, 17, 12, 1, 243, 147, 66, 17, 12, 1, 243, 147, 128, + 17, 12, 1, 218, 234, 47, 17, 12, 1, 218, 234, 39, 17, 12, 1, 99, 197, 47, + 17, 12, 1, 99, 197, 39, 17, 12, 1, 70, 47, 17, 12, 1, 70, 39, 17, 12, 1, + 70, 66, 17, 12, 1, 70, 128, 17, 12, 24, 235, 161, 2, 99, 2, 234, 111, 71, + 47, 17, 12, 24, 235, 161, 2, 99, 2, 234, 111, 71, 39, 17, 12, 24, 235, + 161, 2, 99, 2, 181, 71, 47, 17, 12, 24, 235, 161, 2, 99, 2, 181, 71, 39, + 17, 12, 24, 235, 161, 2, 99, 2, 181, 252, 118, 47, 17, 12, 24, 235, 161, + 2, 99, 2, 181, 252, 118, 39, 17, 12, 24, 235, 161, 2, 99, 47, 17, 12, 24, + 235, 161, 2, 99, 39, 17, 217, 85, 218, 199, 231, 203, 223, 254, 110, 246, + 95, 78, 110, 228, 69, 78, 110, 54, 55, 110, 248, 155, 55, 110, 229, 169, + 55, 110, 254, 134, 110, 254, 79, 110, 42, 229, 229, 110, 45, 229, 229, + 110, 253, 251, 110, 88, 55, 110, 250, 168, 110, 242, 120, 110, 245, 90, + 223, 136, 110, 224, 17, 110, 20, 217, 84, 110, 20, 107, 110, 20, 103, + 110, 20, 160, 110, 20, 154, 110, 20, 174, 110, 20, 182, 110, 20, 191, + 110, 20, 185, 110, 20, 190, 110, 250, 175, 110, 225, 67, 110, 235, 87, + 55, 110, 246, 154, 55, 110, 244, 30, 55, 110, 228, 82, 78, 110, 250, 167, + 253, 244, 110, 7, 6, 1, 60, 110, 7, 6, 1, 253, 204, 110, 7, 6, 1, 251, + 202, 110, 7, 6, 1, 250, 46, 110, 7, 6, 1, 73, 110, 7, 6, 1, 246, 74, 110, + 7, 6, 1, 245, 67, 110, 7, 6, 1, 243, 225, 110, 7, 6, 1, 72, 110, 7, 6, 1, + 237, 126, 110, 7, 6, 1, 237, 17, 110, 7, 6, 1, 153, 110, 7, 6, 1, 189, + 110, 7, 6, 1, 207, 110, 7, 6, 1, 74, 110, 7, 6, 1, 230, 59, 110, 7, 6, 1, + 228, 163, 110, 7, 6, 1, 152, 110, 7, 6, 1, 198, 110, 7, 6, 1, 222, 201, + 110, 7, 6, 1, 68, 110, 7, 6, 1, 216, 216, 110, 7, 6, 1, 219, 40, 110, 7, + 6, 1, 218, 151, 110, 7, 6, 1, 218, 90, 110, 7, 6, 1, 217, 157, 110, 42, + 40, 115, 110, 227, 160, 224, 17, 110, 45, 40, 115, 110, 250, 217, 255, 0, + 110, 109, 235, 43, 110, 244, 37, 255, 0, 110, 7, 3, 1, 60, 110, 7, 3, 1, + 253, 204, 110, 7, 3, 1, 251, 202, 110, 7, 3, 1, 250, 46, 110, 7, 3, 1, + 73, 110, 7, 3, 1, 246, 74, 110, 7, 3, 1, 245, 67, 110, 7, 3, 1, 243, 225, + 110, 7, 3, 1, 72, 110, 7, 3, 1, 237, 126, 110, 7, 3, 1, 237, 17, 110, 7, + 3, 1, 153, 110, 7, 3, 1, 189, 110, 7, 3, 1, 207, 110, 7, 3, 1, 74, 110, + 7, 3, 1, 230, 59, 110, 7, 3, 1, 228, 163, 110, 7, 3, 1, 152, 110, 7, 3, + 1, 198, 110, 7, 3, 1, 222, 201, 110, 7, 3, 1, 68, 110, 7, 3, 1, 216, 216, + 110, 7, 3, 1, 219, 40, 110, 7, 3, 1, 218, 151, 110, 7, 3, 1, 218, 90, + 110, 7, 3, 1, 217, 157, 110, 42, 250, 79, 115, 110, 69, 235, 43, 110, 45, + 250, 79, 115, 110, 221, 179, 110, 42, 67, 229, 229, 110, 45, 67, 229, + 229, 93, 98, 245, 90, 223, 136, 93, 42, 250, 124, 115, 93, 45, 250, 124, + 115, 93, 98, 250, 168, 93, 52, 233, 193, 248, 145, 93, 52, 1, 218, 187, + 93, 52, 1, 3, 60, 93, 52, 1, 3, 72, 93, 52, 1, 3, 68, 93, 52, 1, 3, 73, + 93, 52, 1, 3, 74, 93, 52, 1, 3, 184, 93, 52, 1, 3, 217, 200, 93, 52, 1, + 3, 217, 231, 93, 52, 1, 3, 221, 0, 93, 236, 202, 228, 223, 224, 9, 78, + 93, 52, 1, 60, 93, 52, 1, 72, 93, 52, 1, 68, 93, 52, 1, 73, 93, 52, 1, + 74, 93, 52, 1, 175, 93, 52, 1, 236, 113, 93, 52, 1, 236, 7, 93, 52, 1, + 236, 184, 93, 52, 1, 236, 57, 93, 52, 1, 226, 177, 93, 52, 1, 224, 140, + 93, 52, 1, 223, 103, 93, 52, 1, 226, 94, 93, 52, 1, 224, 26, 93, 52, 1, + 222, 155, 93, 52, 1, 221, 205, 93, 52, 1, 221, 0, 93, 52, 1, 222, 87, 93, + 52, 1, 101, 93, 52, 1, 208, 93, 52, 1, 232, 62, 93, 52, 1, 231, 144, 93, + 52, 1, 232, 141, 93, 52, 1, 231, 204, 93, 52, 1, 155, 93, 52, 1, 243, + 112, 93, 52, 1, 242, 173, 93, 52, 1, 243, 162, 93, 52, 1, 243, 4, 93, 52, + 1, 196, 93, 52, 1, 233, 196, 93, 52, 1, 233, 99, 93, 52, 1, 234, 25, 93, + 52, 1, 233, 136, 93, 52, 1, 184, 93, 52, 1, 217, 200, 93, 52, 1, 217, + 231, 93, 52, 1, 203, 93, 52, 1, 227, 147, 93, 52, 1, 227, 22, 93, 52, 1, + 227, 216, 93, 52, 1, 227, 75, 93, 52, 1, 219, 7, 93, 52, 1, 207, 93, 52, + 219, 70, 224, 9, 78, 93, 52, 225, 72, 224, 9, 78, 93, 22, 245, 185, 93, + 22, 1, 236, 86, 93, 22, 1, 223, 211, 93, 22, 1, 236, 79, 93, 22, 1, 232, + 55, 93, 22, 1, 232, 53, 93, 22, 1, 232, 52, 93, 22, 1, 221, 192, 93, 22, + 1, 223, 200, 93, 22, 1, 227, 140, 93, 22, 1, 227, 135, 93, 22, 1, 227, + 132, 93, 22, 1, 227, 125, 93, 22, 1, 227, 120, 93, 22, 1, 227, 115, 93, + 22, 1, 227, 126, 93, 22, 1, 227, 138, 93, 22, 1, 233, 187, 93, 22, 1, + 229, 99, 93, 22, 1, 223, 208, 93, 22, 1, 229, 88, 93, 22, 1, 224, 104, + 93, 22, 1, 223, 205, 93, 22, 1, 238, 22, 93, 22, 1, 250, 230, 93, 22, 1, + 223, 215, 93, 22, 1, 251, 29, 93, 22, 1, 236, 128, 93, 22, 1, 222, 0, 93, + 22, 1, 229, 127, 93, 22, 1, 243, 106, 93, 22, 1, 60, 93, 22, 1, 254, 234, + 93, 22, 1, 184, 93, 22, 1, 218, 65, 93, 22, 1, 246, 168, 93, 22, 1, 73, + 93, 22, 1, 218, 16, 93, 22, 1, 218, 25, 93, 22, 1, 74, 93, 22, 1, 219, 7, + 93, 22, 1, 219, 4, 93, 22, 1, 230, 167, 93, 22, 1, 217, 231, 93, 22, 1, + 68, 93, 22, 1, 218, 219, 93, 22, 1, 218, 227, 93, 22, 1, 218, 204, 93, + 22, 1, 217, 200, 93, 22, 1, 246, 115, 93, 22, 1, 217, 250, 93, 22, 1, 72, + 110, 251, 86, 55, 110, 229, 11, 55, 110, 212, 55, 110, 234, 115, 110, + 252, 1, 135, 110, 218, 19, 55, 110, 218, 182, 55, 93, 245, 122, 170, 219, + 152, 93, 127, 65, 93, 220, 53, 65, 93, 90, 65, 93, 247, 130, 65, 93, 84, + 223, 227, 93, 67, 250, 221, 237, 180, 254, 112, 254, 128, 237, 180, 254, + 112, 225, 54, 237, 180, 254, 112, 222, 56, 230, 178, 227, 179, 251, 55, + 227, 179, 251, 55, 57, 49, 4, 253, 188, 60, 57, 49, 4, 253, 157, 73, 57, + 49, 4, 253, 166, 72, 57, 49, 4, 253, 134, 74, 57, 49, 4, 253, 184, 68, + 57, 49, 4, 253, 203, 249, 207, 57, 49, 4, 253, 150, 249, 92, 57, 49, 4, + 253, 190, 249, 15, 57, 49, 4, 253, 180, 248, 167, 57, 49, 4, 253, 144, + 247, 111, 57, 49, 4, 253, 138, 237, 123, 57, 49, 4, 253, 149, 237, 114, + 57, 49, 4, 253, 159, 237, 59, 57, 49, 4, 253, 130, 237, 43, 57, 49, 4, + 253, 118, 175, 57, 49, 4, 253, 151, 236, 184, 57, 49, 4, 253, 128, 236, + 113, 57, 49, 4, 253, 125, 236, 57, 57, 49, 4, 253, 114, 236, 7, 57, 49, + 4, 253, 115, 196, 57, 49, 4, 253, 181, 234, 25, 57, 49, 4, 253, 122, 233, + 196, 57, 49, 4, 253, 179, 233, 136, 57, 49, 4, 253, 171, 233, 99, 57, 49, + 4, 253, 192, 208, 57, 49, 4, 253, 170, 232, 141, 57, 49, 4, 253, 164, + 232, 62, 57, 49, 4, 253, 143, 231, 204, 57, 49, 4, 253, 140, 231, 144, + 57, 49, 4, 253, 199, 187, 57, 49, 4, 253, 123, 229, 198, 57, 49, 4, 253, + 156, 229, 108, 57, 49, 4, 253, 183, 229, 37, 57, 49, 4, 253, 145, 228, + 202, 57, 49, 4, 253, 178, 228, 155, 57, 49, 4, 253, 117, 228, 136, 57, + 49, 4, 253, 173, 228, 121, 57, 49, 4, 253, 162, 228, 110, 57, 49, 4, 253, + 135, 203, 57, 49, 4, 253, 167, 227, 216, 57, 49, 4, 253, 142, 227, 147, + 57, 49, 4, 253, 201, 227, 75, 57, 49, 4, 253, 168, 227, 22, 57, 49, 4, + 253, 163, 226, 177, 57, 49, 4, 253, 186, 226, 94, 57, 49, 4, 253, 154, + 224, 140, 57, 49, 4, 253, 182, 224, 26, 57, 49, 4, 253, 137, 223, 103, + 57, 49, 4, 253, 136, 222, 155, 57, 49, 4, 253, 197, 222, 87, 57, 49, 4, + 253, 158, 221, 205, 57, 49, 4, 253, 195, 101, 57, 49, 4, 253, 126, 221, + 0, 57, 49, 4, 253, 141, 219, 7, 57, 49, 4, 253, 120, 218, 227, 57, 49, 4, + 253, 155, 218, 204, 57, 49, 4, 253, 153, 218, 187, 57, 49, 4, 253, 177, + 217, 114, 57, 49, 4, 253, 121, 217, 92, 57, 49, 4, 253, 174, 217, 21, 57, + 49, 4, 253, 169, 255, 60, 57, 49, 4, 253, 152, 255, 59, 57, 49, 4, 253, + 111, 253, 232, 57, 49, 4, 253, 124, 247, 82, 57, 49, 4, 253, 107, 247, + 81, 57, 49, 4, 253, 147, 231, 85, 57, 49, 4, 253, 165, 228, 201, 57, 49, + 4, 253, 133, 228, 204, 57, 49, 4, 253, 119, 228, 2, 57, 49, 4, 253, 161, + 228, 1, 57, 49, 4, 253, 127, 227, 74, 57, 49, 4, 253, 129, 222, 153, 57, + 49, 4, 253, 109, 220, 223, 57, 49, 4, 253, 106, 103, 57, 49, 16, 253, + 176, 57, 49, 16, 253, 175, 57, 49, 16, 253, 172, 57, 49, 16, 253, 160, + 57, 49, 16, 253, 148, 57, 49, 16, 253, 146, 57, 49, 16, 253, 139, 57, 49, + 16, 253, 132, 57, 49, 16, 253, 131, 57, 49, 16, 253, 116, 57, 49, 16, + 253, 113, 57, 49, 16, 253, 112, 57, 49, 16, 253, 110, 57, 49, 16, 253, + 108, 57, 49, 97, 253, 105, 234, 86, 57, 49, 97, 253, 104, 218, 183, 57, + 49, 97, 253, 103, 249, 80, 57, 49, 97, 253, 102, 246, 151, 57, 49, 97, + 253, 101, 234, 68, 57, 49, 97, 253, 100, 223, 162, 57, 49, 97, 253, 99, + 246, 100, 57, 49, 97, 253, 98, 227, 239, 57, 49, 97, 253, 97, 224, 245, + 57, 49, 97, 253, 96, 243, 161, 57, 49, 97, 253, 95, 224, 4, 57, 49, 97, + 253, 94, 252, 39, 57, 49, 97, 253, 93, 250, 110, 57, 49, 97, 253, 92, + 251, 243, 57, 49, 97, 253, 91, 218, 212, 57, 49, 97, 253, 90, 252, 198, + 57, 49, 97, 253, 89, 230, 147, 57, 49, 97, 253, 88, 223, 244, 57, 49, 97, + 253, 87, 250, 54, 57, 49, 233, 125, 253, 86, 236, 223, 57, 49, 233, 125, + 253, 85, 236, 231, 57, 49, 97, 253, 84, 230, 157, 57, 49, 97, 253, 83, + 218, 192, 57, 49, 97, 253, 82, 57, 49, 233, 125, 253, 81, 254, 44, 57, + 49, 233, 125, 253, 80, 233, 247, 57, 49, 97, 253, 79, 252, 0, 57, 49, 97, + 253, 78, 244, 62, 57, 49, 97, 253, 77, 57, 49, 97, 253, 76, 218, 177, 57, + 49, 97, 253, 75, 57, 49, 97, 253, 74, 57, 49, 97, 253, 73, 242, 189, 57, + 49, 97, 253, 72, 57, 49, 97, 253, 71, 57, 49, 97, 253, 70, 57, 49, 233, + 125, 253, 68, 220, 235, 57, 49, 97, 253, 67, 57, 49, 97, 253, 66, 57, 49, + 97, 253, 65, 250, 192, 57, 49, 97, 253, 64, 57, 49, 97, 253, 63, 57, 49, + 97, 253, 62, 244, 218, 57, 49, 97, 253, 61, 254, 31, 57, 49, 97, 253, 60, + 57, 49, 97, 253, 59, 57, 49, 97, 253, 58, 57, 49, 97, 253, 57, 57, 49, + 97, 253, 56, 57, 49, 97, 253, 55, 57, 49, 97, 253, 54, 57, 49, 97, 253, + 53, 57, 49, 97, 253, 52, 57, 49, 97, 253, 51, 233, 120, 57, 49, 97, 253, + 50, 57, 49, 97, 253, 49, 221, 98, 57, 49, 97, 253, 48, 57, 49, 97, 253, + 47, 57, 49, 97, 253, 46, 57, 49, 97, 253, 45, 57, 49, 97, 253, 44, 57, + 49, 97, 253, 43, 57, 49, 97, 253, 42, 57, 49, 97, 253, 41, 57, 49, 97, + 253, 40, 57, 49, 97, 253, 39, 57, 49, 97, 253, 38, 57, 49, 97, 253, 37, + 243, 140, 57, 49, 97, 253, 16, 245, 131, 57, 49, 97, 253, 13, 252, 182, + 57, 49, 97, 253, 8, 223, 249, 57, 49, 97, 253, 7, 65, 57, 49, 97, 253, 6, + 57, 49, 97, 253, 5, 223, 25, 57, 49, 97, 253, 4, 57, 49, 97, 253, 3, 57, + 49, 97, 253, 2, 218, 208, 251, 52, 57, 49, 97, 253, 1, 251, 52, 57, 49, + 97, 253, 0, 251, 53, 245, 105, 57, 49, 97, 252, 255, 218, 210, 57, 49, + 97, 252, 254, 57, 49, 97, 252, 253, 57, 49, 233, 125, 252, 252, 248, 211, + 57, 49, 97, 252, 251, 57, 49, 97, 252, 250, 57, 49, 97, 252, 248, 57, 49, + 97, 252, 247, 57, 49, 97, 252, 246, 57, 49, 97, 252, 245, 249, 149, 57, + 49, 97, 252, 244, 57, 49, 97, 252, 243, 57, 49, 97, 252, 242, 57, 49, 97, + 252, 241, 57, 49, 97, 252, 240, 57, 49, 97, 219, 99, 253, 69, 57, 49, 97, + 219, 99, 253, 36, 57, 49, 97, 219, 99, 253, 35, 57, 49, 97, 219, 99, 253, + 34, 57, 49, 97, 219, 99, 253, 33, 57, 49, 97, 219, 99, 253, 32, 57, 49, + 97, 219, 99, 253, 31, 57, 49, 97, 219, 99, 253, 30, 57, 49, 97, 219, 99, + 253, 29, 57, 49, 97, 219, 99, 253, 28, 57, 49, 97, 219, 99, 253, 27, 57, + 49, 97, 219, 99, 253, 26, 57, 49, 97, 219, 99, 253, 25, 57, 49, 97, 219, + 99, 253, 24, 57, 49, 97, 219, 99, 253, 23, 57, 49, 97, 219, 99, 253, 22, + 57, 49, 97, 219, 99, 253, 21, 57, 49, 97, 219, 99, 253, 20, 57, 49, 97, + 219, 99, 253, 19, 57, 49, 97, 219, 99, 253, 18, 57, 49, 97, 219, 99, 253, + 17, 57, 49, 97, 219, 99, 253, 15, 57, 49, 97, 219, 99, 253, 14, 57, 49, + 97, 219, 99, 253, 12, 57, 49, 97, 219, 99, 253, 11, 57, 49, 97, 219, 99, + 253, 10, 57, 49, 97, 219, 99, 253, 9, 57, 49, 97, 219, 99, 252, 249, 57, + 49, 97, 219, 99, 252, 239, 254, 227, 218, 174, 225, 55, 235, 43, 254, + 227, 218, 174, 225, 55, 248, 145, 254, 227, 251, 45, 78, 254, 227, 54, + 107, 254, 227, 54, 103, 254, 227, 54, 160, 254, 227, 54, 154, 254, 227, + 54, 174, 254, 227, 54, 182, 254, 227, 54, 191, 254, 227, 54, 185, 254, + 227, 54, 190, 254, 227, 54, 222, 65, 254, 227, 54, 220, 219, 254, 227, + 54, 221, 245, 254, 227, 54, 245, 119, 254, 227, 54, 245, 196, 254, 227, + 54, 224, 69, 254, 227, 54, 225, 38, 254, 227, 54, 246, 227, 254, 227, 54, + 232, 27, 254, 227, 54, 131, 242, 161, 254, 227, 54, 124, 242, 161, 254, + 227, 54, 148, 242, 161, 254, 227, 54, 245, 116, 242, 161, 254, 227, 54, + 245, 170, 242, 161, 254, 227, 54, 224, 82, 242, 161, 254, 227, 54, 225, + 43, 242, 161, 254, 227, 54, 246, 235, 242, 161, 254, 227, 54, 232, 31, + 242, 161, 254, 227, 54, 131, 221, 231, 254, 227, 54, 124, 221, 231, 254, + 227, 54, 148, 221, 231, 254, 227, 54, 245, 116, 221, 231, 254, 227, 54, + 245, 170, 221, 231, 254, 227, 54, 224, 82, 221, 231, 254, 227, 54, 225, + 43, 221, 231, 254, 227, 54, 246, 235, 221, 231, 254, 227, 54, 232, 31, + 221, 231, 254, 227, 54, 222, 66, 221, 231, 254, 227, 54, 220, 220, 221, + 231, 254, 227, 54, 221, 246, 221, 231, 254, 227, 54, 245, 120, 221, 231, + 254, 227, 54, 245, 197, 221, 231, 254, 227, 54, 224, 70, 221, 231, 254, + 227, 54, 225, 39, 221, 231, 254, 227, 54, 246, 228, 221, 231, 254, 227, + 54, 232, 28, 221, 231, 254, 227, 218, 222, 252, 190, 220, 72, 254, 227, + 218, 222, 245, 178, 223, 88, 254, 227, 218, 222, 226, 90, 223, 88, 254, + 227, 218, 222, 221, 252, 223, 88, 254, 227, 218, 222, 245, 110, 223, 88, + 254, 227, 247, 114, 234, 24, 245, 178, 223, 88, 254, 227, 235, 31, 234, + 24, 245, 178, 223, 88, 254, 227, 234, 24, 226, 90, 223, 88, 254, 227, + 234, 24, 221, 252, 223, 88, 23, 254, 251, 253, 234, 131, 228, 89, 23, + 254, 251, 253, 234, 131, 243, 194, 23, 254, 251, 253, 234, 131, 247, 126, + 23, 254, 251, 253, 234, 174, 23, 254, 251, 253, 234, 245, 196, 23, 254, + 251, 253, 234, 245, 170, 242, 161, 23, 254, 251, 253, 234, 245, 170, 221, + 231, 23, 254, 251, 253, 234, 245, 197, 221, 231, 23, 254, 251, 253, 234, + 245, 170, 222, 126, 23, 254, 251, 253, 234, 222, 66, 222, 126, 23, 254, + 251, 253, 234, 245, 197, 222, 126, 23, 254, 251, 253, 234, 131, 242, 162, + 222, 126, 23, 254, 251, 253, 234, 245, 170, 242, 162, 222, 126, 23, 254, + 251, 253, 234, 131, 221, 232, 222, 126, 23, 254, 251, 253, 234, 245, 170, + 221, 232, 222, 126, 23, 254, 251, 253, 234, 245, 170, 223, 153, 23, 254, + 251, 253, 234, 222, 66, 223, 153, 23, 254, 251, 253, 234, 245, 197, 223, + 153, 23, 254, 251, 253, 234, 131, 242, 162, 223, 153, 23, 254, 251, 253, + 234, 245, 170, 242, 162, 223, 153, 23, 254, 251, 253, 234, 131, 221, 232, + 223, 153, 23, 254, 251, 253, 234, 222, 66, 221, 232, 223, 153, 23, 254, + 251, 253, 234, 245, 197, 221, 232, 223, 153, 23, 254, 251, 253, 234, 222, + 66, 233, 139, 23, 254, 251, 243, 134, 131, 229, 49, 23, 254, 251, 222, 8, + 107, 23, 254, 251, 243, 132, 107, 23, 254, 251, 246, 159, 103, 23, 254, + 251, 222, 8, 103, 23, 254, 251, 250, 51, 124, 247, 125, 23, 254, 251, + 246, 159, 124, 247, 125, 23, 254, 251, 221, 71, 174, 23, 254, 251, 221, + 71, 222, 65, 23, 254, 251, 221, 71, 222, 66, 254, 144, 17, 23, 254, 251, + 243, 132, 222, 65, 23, 254, 251, 233, 240, 222, 65, 23, 254, 251, 222, 8, + 222, 65, 23, 254, 251, 222, 8, 221, 245, 23, 254, 251, 221, 71, 245, 196, + 23, 254, 251, 221, 71, 245, 197, 254, 144, 17, 23, 254, 251, 243, 132, + 245, 196, 23, 254, 251, 222, 8, 245, 196, 23, 254, 251, 222, 8, 131, 242, + 161, 23, 254, 251, 222, 8, 148, 242, 161, 23, 254, 251, 246, 159, 245, + 170, 242, 161, 23, 254, 251, 221, 71, 245, 170, 242, 161, 23, 254, 251, + 222, 8, 245, 170, 242, 161, 23, 254, 251, 251, 126, 245, 170, 242, 161, + 23, 254, 251, 232, 200, 245, 170, 242, 161, 23, 254, 251, 222, 8, 131, + 221, 231, 23, 254, 251, 222, 8, 245, 170, 221, 231, 23, 254, 251, 249, + 65, 245, 170, 233, 139, 23, 254, 251, 223, 127, 245, 197, 233, 139, 23, + 131, 144, 55, 23, 131, 144, 5, 254, 144, 17, 23, 124, 221, 250, 55, 23, + 148, 228, 88, 55, 23, 218, 23, 55, 23, 222, 127, 55, 23, 247, 127, 55, + 23, 230, 175, 55, 23, 124, 230, 174, 55, 23, 148, 230, 174, 55, 23, 245, + 116, 230, 174, 55, 23, 245, 170, 230, 174, 55, 23, 233, 235, 55, 23, 235, + 210, 252, 190, 55, 23, 235, 26, 55, 23, 230, 84, 55, 23, 218, 132, 55, + 23, 254, 16, 55, 23, 254, 27, 55, 23, 244, 42, 55, 23, 221, 58, 252, 190, + 55, 23, 217, 85, 55, 227, 68, 225, 35, 55, 227, 68, 220, 83, 55, 227, 68, + 225, 59, 55, 227, 68, 225, 33, 55, 227, 68, 248, 226, 225, 33, 55, 227, + 68, 224, 120, 55, 227, 68, 249, 61, 55, 227, 68, 228, 76, 55, 227, 68, + 225, 47, 55, 227, 68, 247, 93, 55, 227, 68, 254, 14, 55, 227, 68, 251, + 81, 55, 229, 137, 248, 205, 5, 229, 192, 229, 137, 248, 205, 5, 229, 44, + 243, 159, 229, 137, 248, 205, 5, 222, 109, 243, 159, 229, 137, 248, 205, + 5, 251, 139, 229, 137, 248, 205, 5, 251, 24, 229, 137, 248, 205, 5, 218, + 183, 229, 137, 248, 205, 5, 243, 140, 229, 137, 248, 205, 5, 244, 210, + 229, 137, 248, 205, 5, 221, 204, 229, 137, 248, 205, 5, 65, 229, 137, + 248, 205, 5, 252, 24, 229, 137, 248, 205, 5, 224, 218, 229, 137, 248, + 205, 5, 250, 187, 229, 137, 248, 205, 5, 234, 85, 229, 137, 248, 205, 5, + 234, 48, 229, 137, 248, 205, 5, 226, 122, 229, 137, 248, 205, 5, 235, 64, + 229, 137, 248, 205, 5, 252, 33, 229, 137, 248, 205, 5, 251, 129, 229, 51, + 229, 137, 248, 205, 5, 248, 156, 229, 137, 248, 205, 5, 250, 172, 229, + 137, 248, 205, 5, 224, 50, 229, 137, 248, 205, 5, 250, 173, 229, 137, + 248, 205, 5, 252, 134, 229, 137, 248, 205, 5, 224, 206, 229, 137, 248, + 205, 5, 242, 189, 229, 137, 248, 205, 5, 243, 111, 229, 137, 248, 205, 5, + 251, 240, 235, 106, 229, 137, 248, 205, 5, 251, 124, 229, 137, 248, 205, + 5, 227, 239, 229, 137, 248, 205, 5, 247, 13, 229, 137, 248, 205, 5, 247, + 133, 229, 137, 248, 205, 5, 220, 247, 229, 137, 248, 205, 5, 252, 137, + 229, 137, 248, 205, 5, 229, 52, 221, 98, 229, 137, 248, 205, 5, 219, 84, + 229, 137, 248, 205, 5, 229, 244, 229, 137, 248, 205, 5, 227, 62, 229, + 137, 248, 205, 5, 235, 52, 229, 137, 248, 205, 5, 230, 69, 252, 233, 229, + 137, 248, 205, 5, 245, 143, 229, 137, 248, 205, 5, 244, 38, 229, 137, + 248, 205, 5, 223, 128, 229, 137, 248, 205, 5, 3, 253, 213, 229, 137, 248, + 205, 5, 218, 235, 252, 206, 229, 137, 248, 205, 5, 36, 230, 177, 92, 234, + 197, 1, 60, 234, 197, 1, 73, 234, 197, 1, 253, 204, 234, 197, 1, 252, 95, + 234, 197, 1, 245, 67, 234, 197, 1, 250, 46, 234, 197, 1, 72, 234, 197, 1, + 219, 40, 234, 197, 1, 217, 157, 234, 197, 1, 222, 37, 234, 197, 1, 237, + 126, 234, 197, 1, 237, 17, 234, 197, 1, 228, 163, 234, 197, 1, 153, 234, + 197, 1, 189, 234, 197, 1, 207, 234, 197, 1, 233, 140, 234, 197, 1, 231, + 218, 234, 197, 1, 68, 234, 197, 1, 230, 59, 234, 197, 1, 236, 75, 234, + 197, 1, 152, 234, 197, 1, 198, 234, 197, 1, 222, 201, 234, 197, 1, 221, + 32, 234, 197, 1, 254, 131, 234, 197, 1, 246, 197, 234, 197, 1, 243, 225, + 234, 197, 1, 218, 151, 251, 133, 1, 60, 251, 133, 1, 230, 45, 251, 133, + 1, 250, 46, 251, 133, 1, 153, 251, 133, 1, 220, 21, 251, 133, 1, 152, + 251, 133, 1, 235, 126, 251, 133, 1, 255, 60, 251, 133, 1, 228, 163, 251, + 133, 1, 253, 204, 251, 133, 1, 189, 251, 133, 1, 74, 251, 133, 1, 249, + 209, 251, 133, 1, 222, 201, 251, 133, 1, 225, 27, 251, 133, 1, 225, 26, + 251, 133, 1, 198, 251, 133, 1, 251, 201, 251, 133, 1, 68, 251, 133, 1, + 231, 218, 251, 133, 1, 218, 151, 251, 133, 1, 207, 251, 133, 1, 221, 31, + 251, 133, 1, 230, 59, 251, 133, 1, 223, 219, 251, 133, 1, 72, 251, 133, + 1, 73, 251, 133, 1, 220, 18, 251, 133, 1, 237, 17, 251, 133, 1, 237, 8, + 251, 133, 1, 232, 170, 251, 133, 1, 220, 23, 251, 133, 1, 245, 67, 251, + 133, 1, 245, 2, 251, 133, 1, 223, 168, 251, 133, 1, 223, 167, 251, 133, + 1, 232, 117, 251, 133, 1, 237, 255, 251, 133, 1, 251, 200, 251, 133, 1, + 221, 32, 251, 133, 1, 220, 20, 251, 133, 1, 227, 53, 251, 133, 1, 234, + 41, 251, 133, 1, 234, 40, 251, 133, 1, 234, 39, 251, 133, 1, 234, 38, + 251, 133, 1, 235, 125, 251, 133, 1, 247, 17, 251, 133, 1, 220, 19, 48, + 30, 1, 60, 48, 30, 1, 252, 144, 48, 30, 1, 236, 184, 48, 30, 1, 249, 92, + 48, 30, 1, 73, 48, 30, 1, 219, 165, 48, 30, 1, 217, 92, 48, 30, 1, 243, + 162, 48, 30, 1, 222, 22, 48, 30, 1, 72, 48, 30, 1, 175, 48, 30, 1, 246, + 217, 48, 30, 1, 246, 205, 48, 30, 1, 246, 197, 48, 30, 1, 246, 133, 48, + 30, 1, 74, 48, 30, 1, 229, 198, 48, 30, 1, 224, 246, 48, 30, 1, 236, 7, + 48, 30, 1, 246, 148, 48, 30, 1, 246, 138, 48, 30, 1, 222, 87, 48, 30, 1, + 68, 48, 30, 1, 246, 220, 48, 30, 1, 229, 132, 48, 30, 1, 236, 137, 48, + 30, 1, 246, 244, 48, 30, 1, 246, 140, 48, 30, 1, 251, 46, 48, 30, 1, 237, + 255, 48, 30, 1, 220, 23, 48, 30, 231, 107, 107, 48, 30, 231, 107, 174, + 48, 30, 231, 107, 222, 65, 48, 30, 231, 107, 245, 196, 244, 50, 1, 254, + 199, 244, 50, 1, 252, 219, 244, 50, 1, 244, 100, 244, 50, 1, 249, 191, + 244, 50, 1, 254, 195, 244, 50, 1, 228, 146, 244, 50, 1, 237, 136, 244, + 50, 1, 243, 204, 244, 50, 1, 221, 241, 244, 50, 1, 246, 226, 244, 50, 1, + 235, 241, 244, 50, 1, 235, 170, 244, 50, 1, 234, 82, 244, 50, 1, 232, + 202, 244, 50, 1, 237, 108, 244, 50, 1, 220, 37, 244, 50, 1, 230, 31, 244, + 50, 1, 232, 27, 244, 50, 1, 227, 245, 244, 50, 1, 226, 123, 244, 50, 1, + 222, 74, 244, 50, 1, 218, 191, 244, 50, 1, 245, 249, 244, 50, 1, 238, 3, + 244, 50, 1, 242, 152, 244, 50, 1, 230, 91, 244, 50, 1, 232, 31, 242, 161, + 220, 106, 1, 254, 150, 220, 106, 1, 252, 102, 220, 106, 1, 244, 232, 220, + 106, 1, 236, 149, 220, 106, 1, 249, 62, 220, 106, 1, 243, 4, 220, 106, 1, + 218, 187, 220, 106, 1, 217, 83, 220, 106, 1, 242, 185, 220, 106, 1, 222, + 50, 220, 106, 1, 217, 220, 220, 106, 1, 236, 246, 220, 106, 1, 224, 209, + 220, 106, 1, 235, 156, 220, 106, 1, 234, 1, 220, 106, 1, 249, 33, 220, + 106, 1, 231, 103, 220, 106, 1, 217, 13, 220, 106, 1, 226, 144, 220, 106, + 1, 254, 191, 220, 106, 1, 228, 202, 220, 106, 1, 226, 169, 220, 106, 1, + 228, 103, 220, 106, 1, 227, 231, 220, 106, 1, 222, 26, 220, 106, 1, 244, + 122, 220, 106, 1, 101, 220, 106, 1, 72, 220, 106, 1, 68, 220, 106, 1, + 223, 178, 220, 106, 218, 174, 248, 191, 48, 229, 159, 5, 60, 48, 229, + 159, 5, 72, 48, 229, 159, 5, 68, 48, 229, 159, 5, 175, 48, 229, 159, 5, + 236, 7, 48, 229, 159, 5, 245, 0, 48, 229, 159, 5, 244, 17, 48, 229, 159, + 5, 218, 138, 48, 229, 159, 5, 251, 169, 48, 229, 159, 5, 237, 123, 48, + 229, 159, 5, 237, 98, 48, 229, 159, 5, 222, 155, 48, 229, 159, 5, 221, 0, + 48, 229, 159, 5, 249, 207, 48, 229, 159, 5, 249, 15, 48, 229, 159, 5, + 247, 111, 48, 229, 159, 5, 222, 35, 48, 229, 159, 5, 187, 48, 229, 159, + 5, 252, 237, 48, 229, 159, 5, 246, 8, 48, 229, 159, 5, 208, 48, 229, 159, + 5, 231, 144, 48, 229, 159, 5, 196, 48, 229, 159, 5, 233, 196, 48, 229, + 159, 5, 233, 99, 48, 229, 159, 5, 184, 48, 229, 159, 5, 219, 189, 48, + 229, 159, 5, 219, 94, 48, 229, 159, 5, 203, 48, 229, 159, 5, 227, 22, 48, + 229, 159, 5, 235, 188, 48, 229, 159, 5, 226, 177, 48, 229, 159, 5, 217, + 114, 48, 229, 159, 5, 225, 25, 48, 229, 159, 5, 223, 218, 48, 229, 159, + 5, 155, 48, 229, 159, 5, 253, 227, 48, 229, 159, 5, 253, 226, 48, 229, + 159, 5, 253, 225, 48, 229, 159, 5, 218, 115, 48, 229, 159, 5, 249, 188, + 48, 229, 159, 5, 249, 187, 48, 229, 159, 5, 252, 224, 48, 229, 159, 5, + 251, 220, 48, 229, 159, 218, 174, 248, 191, 48, 229, 159, 54, 107, 48, + 229, 159, 54, 103, 48, 229, 159, 54, 222, 65, 48, 229, 159, 54, 220, 219, + 48, 229, 159, 54, 242, 161, 161, 6, 1, 171, 72, 161, 6, 1, 171, 73, 161, + 6, 1, 171, 60, 161, 6, 1, 171, 254, 202, 161, 6, 1, 171, 74, 161, 6, 1, + 171, 230, 127, 161, 6, 1, 224, 192, 72, 161, 6, 1, 224, 192, 73, 161, 6, + 1, 224, 192, 60, 161, 6, 1, 224, 192, 254, 202, 161, 6, 1, 224, 192, 74, + 161, 6, 1, 224, 192, 230, 127, 161, 6, 1, 253, 212, 161, 6, 1, 230, 70, + 161, 6, 1, 218, 165, 161, 6, 1, 218, 22, 161, 6, 1, 243, 225, 161, 6, 1, + 229, 191, 161, 6, 1, 252, 137, 161, 6, 1, 222, 80, 161, 6, 1, 249, 82, + 161, 6, 1, 251, 43, 161, 6, 1, 237, 113, 161, 6, 1, 236, 191, 161, 6, 1, + 244, 208, 161, 6, 1, 246, 244, 161, 6, 1, 219, 160, 161, 6, 1, 246, 118, + 161, 6, 1, 222, 21, 161, 6, 1, 246, 138, 161, 6, 1, 217, 90, 161, 6, 1, + 246, 133, 161, 6, 1, 217, 71, 161, 6, 1, 246, 148, 161, 6, 1, 246, 217, + 161, 6, 1, 246, 205, 161, 6, 1, 246, 197, 161, 6, 1, 246, 185, 161, 6, 1, + 230, 158, 161, 6, 1, 246, 101, 161, 3, 1, 171, 72, 161, 3, 1, 171, 73, + 161, 3, 1, 171, 60, 161, 3, 1, 171, 254, 202, 161, 3, 1, 171, 74, 161, 3, + 1, 171, 230, 127, 161, 3, 1, 224, 192, 72, 161, 3, 1, 224, 192, 73, 161, + 3, 1, 224, 192, 60, 161, 3, 1, 224, 192, 254, 202, 161, 3, 1, 224, 192, + 74, 161, 3, 1, 224, 192, 230, 127, 161, 3, 1, 253, 212, 161, 3, 1, 230, + 70, 161, 3, 1, 218, 165, 161, 3, 1, 218, 22, 161, 3, 1, 243, 225, 161, 3, + 1, 229, 191, 161, 3, 1, 252, 137, 161, 3, 1, 222, 80, 161, 3, 1, 249, 82, + 161, 3, 1, 251, 43, 161, 3, 1, 237, 113, 161, 3, 1, 236, 191, 161, 3, 1, + 244, 208, 161, 3, 1, 246, 244, 161, 3, 1, 219, 160, 161, 3, 1, 246, 118, + 161, 3, 1, 222, 21, 161, 3, 1, 246, 138, 161, 3, 1, 217, 90, 161, 3, 1, + 246, 133, 161, 3, 1, 217, 71, 161, 3, 1, 246, 148, 161, 3, 1, 246, 217, + 161, 3, 1, 246, 205, 161, 3, 1, 246, 197, 161, 3, 1, 246, 185, 161, 3, 1, + 230, 158, 161, 3, 1, 246, 101, 224, 252, 1, 229, 190, 224, 252, 1, 221, + 113, 224, 252, 1, 236, 112, 224, 252, 1, 245, 226, 224, 252, 1, 221, 255, + 224, 252, 1, 224, 26, 224, 252, 1, 223, 50, 224, 252, 1, 250, 245, 224, + 252, 1, 218, 24, 224, 252, 1, 242, 160, 224, 252, 1, 252, 83, 224, 252, + 1, 249, 91, 224, 252, 1, 244, 242, 224, 252, 1, 219, 60, 224, 252, 1, + 222, 3, 224, 252, 1, 217, 19, 224, 252, 1, 234, 23, 224, 252, 1, 237, 41, + 224, 252, 1, 218, 185, 224, 252, 1, 243, 213, 224, 252, 1, 235, 3, 224, + 252, 1, 233, 160, 224, 252, 1, 238, 6, 224, 252, 1, 246, 243, 224, 252, + 1, 254, 7, 224, 252, 1, 254, 237, 224, 252, 1, 230, 138, 224, 252, 1, + 218, 177, 224, 252, 1, 230, 83, 224, 252, 1, 254, 202, 224, 252, 1, 227, + 72, 224, 252, 1, 231, 103, 224, 252, 1, 247, 2, 224, 252, 1, 254, 207, + 224, 252, 1, 242, 65, 224, 252, 1, 220, 63, 224, 252, 1, 230, 183, 224, + 252, 1, 230, 121, 224, 252, 1, 230, 157, 224, 252, 1, 253, 215, 224, 252, + 1, 254, 45, 224, 252, 1, 230, 105, 224, 252, 1, 254, 188, 224, 252, 1, + 246, 142, 224, 252, 1, 254, 24, 224, 252, 1, 247, 11, 224, 252, 1, 242, + 71, 224, 252, 1, 217, 255, 230, 93, 1, 254, 168, 230, 93, 1, 252, 237, + 230, 93, 1, 222, 155, 230, 93, 1, 237, 123, 230, 93, 1, 218, 138, 230, + 93, 1, 236, 149, 230, 93, 1, 249, 81, 230, 93, 1, 203, 230, 93, 1, 226, + 177, 230, 93, 1, 224, 215, 230, 93, 1, 249, 36, 230, 93, 1, 251, 116, + 230, 93, 1, 245, 0, 230, 93, 1, 246, 8, 230, 93, 1, 228, 153, 230, 93, 1, + 237, 4, 230, 93, 1, 235, 184, 230, 93, 1, 233, 170, 230, 93, 1, 231, 89, + 230, 93, 1, 218, 233, 230, 93, 1, 155, 230, 93, 1, 184, 230, 93, 1, 60, + 230, 93, 1, 73, 230, 93, 1, 72, 230, 93, 1, 74, 230, 93, 1, 68, 230, 93, + 1, 255, 58, 230, 93, 1, 246, 250, 230, 93, 1, 230, 127, 230, 93, 20, 217, + 84, 230, 93, 20, 107, 230, 93, 20, 103, 230, 93, 20, 160, 230, 93, 20, + 154, 230, 93, 20, 174, 230, 93, 20, 182, 230, 93, 20, 191, 230, 93, 20, + 185, 230, 93, 20, 190, 250, 53, 4, 60, 250, 53, 4, 73, 250, 53, 4, 72, + 250, 53, 4, 74, 250, 53, 4, 68, 250, 53, 4, 237, 123, 250, 53, 4, 237, + 59, 250, 53, 4, 175, 250, 53, 4, 236, 184, 250, 53, 4, 236, 113, 250, 53, + 4, 236, 57, 250, 53, 4, 236, 7, 250, 53, 4, 235, 188, 250, 53, 4, 235, + 122, 250, 53, 4, 235, 67, 250, 53, 4, 235, 12, 250, 53, 4, 234, 231, 250, + 53, 4, 196, 250, 53, 4, 234, 25, 250, 53, 4, 233, 196, 250, 53, 4, 233, + 136, 250, 53, 4, 233, 99, 250, 53, 4, 208, 250, 53, 4, 232, 141, 250, 53, + 4, 232, 62, 250, 53, 4, 231, 204, 250, 53, 4, 231, 144, 250, 53, 4, 187, + 250, 53, 4, 229, 198, 250, 53, 4, 229, 108, 250, 53, 4, 229, 37, 250, 53, + 4, 228, 202, 250, 53, 4, 203, 250, 53, 4, 227, 216, 250, 53, 4, 227, 147, + 250, 53, 4, 227, 75, 250, 53, 4, 227, 22, 250, 53, 4, 226, 177, 250, 53, + 4, 226, 94, 250, 53, 4, 224, 140, 250, 53, 4, 224, 26, 250, 53, 4, 223, + 103, 250, 53, 4, 222, 155, 250, 53, 4, 222, 87, 250, 53, 4, 221, 205, + 250, 53, 4, 101, 250, 53, 4, 221, 0, 250, 53, 4, 219, 7, 250, 53, 4, 218, + 227, 250, 53, 4, 218, 204, 250, 53, 4, 218, 187, 250, 53, 4, 218, 138, + 250, 53, 4, 218, 135, 250, 53, 4, 217, 114, 250, 53, 4, 217, 21, 237, + 225, 254, 53, 1, 254, 166, 237, 225, 254, 53, 1, 252, 101, 237, 225, 254, + 53, 1, 244, 91, 237, 225, 254, 53, 1, 249, 176, 237, 225, 254, 53, 1, + 243, 162, 237, 225, 254, 53, 1, 218, 233, 237, 225, 254, 53, 1, 217, 95, + 237, 225, 254, 53, 1, 243, 126, 237, 225, 254, 53, 1, 222, 46, 237, 225, + 254, 53, 1, 217, 219, 237, 225, 254, 53, 1, 236, 224, 237, 225, 254, 53, + 1, 235, 151, 237, 225, 254, 53, 1, 234, 1, 237, 225, 254, 53, 1, 231, + 103, 237, 225, 254, 53, 1, 226, 145, 237, 225, 254, 53, 1, 253, 207, 237, + 225, 254, 53, 1, 229, 198, 237, 225, 254, 53, 1, 226, 168, 237, 225, 254, + 53, 1, 228, 102, 237, 225, 254, 53, 1, 227, 174, 237, 225, 254, 53, 1, + 224, 209, 237, 225, 254, 53, 1, 222, 100, 237, 225, 254, 53, 226, 87, 55, + 237, 225, 254, 53, 54, 107, 237, 225, 254, 53, 54, 103, 237, 225, 254, + 53, 54, 160, 237, 225, 254, 53, 54, 222, 65, 237, 225, 254, 53, 54, 220, + 219, 237, 225, 254, 53, 54, 131, 242, 161, 237, 225, 254, 53, 54, 131, + 221, 231, 237, 225, 254, 53, 54, 222, 66, 221, 231, 229, 116, 1, 254, + 164, 229, 116, 1, 252, 104, 229, 116, 1, 244, 233, 229, 116, 1, 249, 64, + 229, 116, 1, 243, 162, 229, 116, 1, 218, 238, 229, 116, 1, 217, 108, 229, + 116, 1, 243, 128, 229, 116, 1, 222, 50, 229, 116, 1, 217, 220, 229, 116, + 1, 236, 246, 229, 116, 1, 235, 157, 229, 116, 1, 234, 1, 229, 116, 1, + 231, 103, 229, 116, 1, 225, 61, 229, 116, 1, 254, 191, 229, 116, 1, 229, + 198, 229, 116, 1, 226, 169, 229, 116, 1, 228, 107, 229, 116, 1, 227, 61, + 229, 116, 1, 224, 209, 229, 116, 1, 222, 105, 229, 116, 54, 107, 229, + 116, 54, 222, 65, 229, 116, 54, 220, 219, 229, 116, 54, 131, 242, 161, + 229, 116, 54, 103, 229, 116, 54, 160, 229, 116, 218, 174, 225, 54, 234, + 196, 1, 60, 234, 196, 1, 253, 204, 234, 196, 1, 245, 67, 234, 196, 1, + 250, 46, 234, 196, 1, 73, 234, 196, 1, 216, 216, 234, 196, 1, 72, 234, + 196, 1, 218, 90, 234, 196, 1, 237, 17, 234, 196, 1, 153, 234, 196, 1, + 189, 234, 196, 1, 207, 234, 196, 1, 74, 234, 196, 1, 152, 234, 196, 1, + 223, 219, 234, 196, 1, 222, 201, 234, 196, 1, 68, 234, 196, 1, 246, 74, + 234, 196, 1, 228, 163, 234, 196, 1, 198, 234, 196, 1, 221, 32, 234, 196, + 1, 254, 131, 234, 196, 1, 246, 197, 234, 196, 1, 234, 198, 234, 196, 1, + 231, 218, 234, 196, 1, 251, 202, 234, 196, 221, 87, 78, 201, 1, 60, 201, + 29, 5, 72, 201, 29, 5, 68, 201, 29, 5, 167, 152, 201, 29, 5, 73, 201, 29, + 5, 74, 201, 29, 235, 94, 78, 201, 5, 51, 227, 94, 56, 201, 5, 254, 95, + 201, 5, 219, 77, 201, 1, 175, 201, 1, 236, 149, 201, 1, 245, 0, 201, 1, + 244, 125, 201, 1, 251, 169, 201, 1, 251, 69, 201, 1, 237, 123, 201, 1, + 231, 77, 201, 1, 221, 29, 201, 1, 221, 19, 201, 1, 249, 132, 201, 1, 249, + 116, 201, 1, 231, 217, 201, 1, 222, 155, 201, 1, 222, 35, 201, 1, 249, + 207, 201, 1, 249, 36, 201, 1, 208, 201, 1, 187, 201, 1, 229, 141, 201, 1, + 252, 237, 201, 1, 252, 94, 201, 1, 196, 201, 1, 184, 201, 1, 203, 201, 1, + 235, 188, 201, 1, 219, 189, 201, 1, 225, 25, 201, 1, 223, 218, 201, 1, + 226, 177, 201, 1, 217, 114, 201, 1, 155, 201, 1, 236, 74, 201, 1, 221, 4, + 201, 5, 252, 201, 50, 201, 5, 251, 122, 201, 5, 61, 56, 201, 219, 82, + 201, 20, 107, 201, 20, 103, 201, 20, 160, 201, 20, 154, 201, 54, 222, 65, + 201, 54, 220, 219, 201, 54, 131, 242, 161, 201, 54, 131, 221, 231, 201, + 228, 197, 248, 145, 201, 228, 197, 3, 250, 221, 201, 228, 197, 250, 221, + 201, 228, 197, 250, 105, 135, 201, 228, 197, 234, 83, 201, 228, 197, 234, + 241, 201, 228, 197, 249, 167, 201, 228, 197, 51, 249, 167, 201, 228, 197, + 235, 37, 48, 224, 6, 254, 64, 1, 243, 162, 48, 224, 6, 254, 64, 1, 235, + 151, 48, 224, 6, 254, 64, 1, 243, 126, 48, 224, 6, 254, 64, 1, 234, 1, + 48, 224, 6, 254, 64, 1, 228, 102, 48, 224, 6, 254, 64, 1, 218, 233, 48, + 224, 6, 254, 64, 1, 224, 209, 48, 224, 6, 254, 64, 1, 227, 174, 48, 224, + 6, 254, 64, 1, 252, 101, 48, 224, 6, 254, 64, 1, 222, 100, 48, 224, 6, + 254, 64, 1, 226, 127, 48, 224, 6, 254, 64, 1, 236, 224, 48, 224, 6, 254, + 64, 1, 231, 103, 48, 224, 6, 254, 64, 1, 236, 134, 48, 224, 6, 254, 64, + 1, 226, 168, 48, 224, 6, 254, 64, 1, 226, 145, 48, 224, 6, 254, 64, 1, + 245, 231, 48, 224, 6, 254, 64, 1, 254, 168, 48, 224, 6, 254, 64, 1, 253, + 206, 48, 224, 6, 254, 64, 1, 249, 34, 48, 224, 6, 254, 64, 1, 244, 91, + 48, 224, 6, 254, 64, 1, 249, 176, 48, 224, 6, 254, 64, 1, 244, 118, 48, + 224, 6, 254, 64, 1, 222, 46, 48, 224, 6, 254, 64, 1, 217, 94, 48, 224, 6, + 254, 64, 1, 249, 31, 48, 224, 6, 254, 64, 1, 217, 219, 48, 224, 6, 254, + 64, 1, 222, 24, 48, 224, 6, 254, 64, 1, 222, 5, 48, 224, 6, 254, 64, 54, + 107, 48, 224, 6, 254, 64, 54, 245, 196, 48, 224, 6, 254, 64, 120, 237, + 211, 253, 216, 1, 60, 253, 216, 1, 255, 58, 253, 216, 1, 254, 93, 253, + 216, 1, 255, 17, 253, 216, 1, 254, 131, 253, 216, 1, 255, 18, 253, 216, + 1, 254, 234, 253, 216, 1, 254, 230, 253, 216, 1, 73, 253, 216, 1, 246, + 250, 253, 216, 1, 74, 253, 216, 1, 230, 127, 253, 216, 1, 72, 253, 216, + 1, 237, 255, 253, 216, 1, 68, 253, 216, 1, 220, 23, 253, 216, 1, 236, + 184, 253, 216, 1, 218, 135, 253, 216, 1, 218, 101, 253, 216, 1, 218, 110, + 253, 216, 1, 244, 191, 253, 216, 1, 244, 155, 253, 216, 1, 244, 116, 253, + 216, 1, 251, 99, 253, 216, 1, 237, 114, 253, 216, 1, 222, 87, 253, 216, + 1, 222, 22, 253, 216, 1, 249, 92, 253, 216, 1, 249, 29, 253, 216, 1, 221, + 26, 253, 216, 1, 229, 198, 253, 216, 1, 245, 231, 253, 216, 1, 252, 144, + 253, 216, 1, 252, 92, 253, 216, 1, 232, 106, 253, 216, 1, 232, 68, 253, + 216, 1, 232, 69, 253, 216, 1, 232, 141, 253, 216, 1, 231, 73, 253, 216, + 1, 231, 216, 253, 216, 1, 234, 25, 253, 216, 1, 243, 52, 253, 216, 1, + 217, 164, 253, 216, 1, 218, 25, 253, 216, 1, 219, 165, 253, 216, 1, 227, + 216, 253, 216, 1, 235, 122, 253, 216, 1, 226, 94, 253, 216, 1, 217, 92, + 253, 216, 1, 224, 246, 253, 216, 1, 217, 72, 253, 216, 1, 224, 147, 253, + 216, 1, 223, 190, 253, 216, 1, 243, 162, 253, 216, 255, 7, 78, 221, 172, + 124, 188, 104, 131, 61, 228, 196, 3, 124, 188, 104, 131, 61, 228, 196, + 235, 146, 124, 188, 104, 131, 61, 228, 196, 235, 146, 131, 61, 104, 124, + 188, 228, 196, 235, 146, 124, 227, 92, 104, 131, 227, 94, 228, 196, 235, + 146, 131, 227, 94, 104, 124, 227, 92, 228, 196, 237, 193, 229, 224, 1, + 254, 166, 237, 193, 229, 224, 1, 252, 101, 237, 193, 229, 224, 1, 244, + 91, 237, 193, 229, 224, 1, 249, 176, 237, 193, 229, 224, 1, 243, 162, + 237, 193, 229, 224, 1, 218, 233, 237, 193, 229, 224, 1, 217, 95, 237, + 193, 229, 224, 1, 243, 126, 237, 193, 229, 224, 1, 222, 46, 237, 193, + 229, 224, 1, 217, 219, 237, 193, 229, 224, 1, 236, 224, 237, 193, 229, + 224, 1, 235, 151, 237, 193, 229, 224, 1, 234, 1, 237, 193, 229, 224, 1, + 231, 103, 237, 193, 229, 224, 1, 226, 145, 237, 193, 229, 224, 1, 253, + 207, 237, 193, 229, 224, 1, 229, 198, 237, 193, 229, 224, 1, 226, 168, + 237, 193, 229, 224, 1, 228, 102, 237, 193, 229, 224, 1, 227, 174, 237, + 193, 229, 224, 1, 224, 209, 237, 193, 229, 224, 1, 222, 100, 237, 193, + 229, 224, 54, 107, 237, 193, 229, 224, 54, 103, 237, 193, 229, 224, 54, + 160, 237, 193, 229, 224, 54, 154, 237, 193, 229, 224, 54, 222, 65, 237, + 193, 229, 224, 54, 220, 219, 237, 193, 229, 224, 54, 131, 242, 161, 237, + 193, 229, 224, 54, 131, 221, 231, 237, 193, 230, 33, 1, 254, 166, 237, + 193, 230, 33, 1, 252, 101, 237, 193, 230, 33, 1, 244, 91, 237, 193, 230, + 33, 1, 249, 176, 237, 193, 230, 33, 1, 243, 162, 237, 193, 230, 33, 1, + 218, 232, 237, 193, 230, 33, 1, 217, 95, 237, 193, 230, 33, 1, 243, 126, + 237, 193, 230, 33, 1, 222, 46, 237, 193, 230, 33, 1, 217, 219, 237, 193, + 230, 33, 1, 236, 224, 237, 193, 230, 33, 1, 235, 151, 237, 193, 230, 33, + 1, 234, 0, 237, 193, 230, 33, 1, 231, 103, 237, 193, 230, 33, 1, 226, + 145, 237, 193, 230, 33, 1, 229, 198, 237, 193, 230, 33, 1, 226, 168, 237, + 193, 230, 33, 1, 224, 209, 237, 193, 230, 33, 1, 222, 100, 237, 193, 230, + 33, 54, 107, 237, 193, 230, 33, 54, 103, 237, 193, 230, 33, 54, 160, 237, + 193, 230, 33, 54, 154, 237, 193, 230, 33, 54, 222, 65, 237, 193, 230, 33, + 54, 220, 219, 237, 193, 230, 33, 54, 131, 242, 161, 237, 193, 230, 33, + 54, 131, 221, 231, 48, 172, 1, 230, 100, 60, 48, 172, 1, 218, 17, 60, 48, + 172, 1, 218, 17, 254, 234, 48, 172, 1, 230, 100, 72, 48, 172, 1, 218, 17, + 72, 48, 172, 1, 218, 17, 73, 48, 172, 1, 230, 100, 74, 48, 172, 1, 230, + 100, 230, 167, 48, 172, 1, 218, 17, 230, 167, 48, 172, 1, 230, 100, 255, + 11, 48, 172, 1, 218, 17, 255, 11, 48, 172, 1, 230, 100, 254, 233, 48, + 172, 1, 218, 17, 254, 233, 48, 172, 1, 230, 100, 254, 209, 48, 172, 1, + 218, 17, 254, 209, 48, 172, 1, 230, 100, 254, 228, 48, 172, 1, 218, 17, + 254, 228, 48, 172, 1, 230, 100, 254, 244, 48, 172, 1, 218, 17, 254, 244, + 48, 172, 1, 230, 100, 254, 232, 48, 172, 1, 230, 100, 246, 80, 48, 172, + 1, 218, 17, 246, 80, 48, 172, 1, 230, 100, 253, 212, 48, 172, 1, 218, 17, + 253, 212, 48, 172, 1, 230, 100, 254, 216, 48, 172, 1, 218, 17, 254, 216, + 48, 172, 1, 230, 100, 254, 226, 48, 172, 1, 218, 17, 254, 226, 48, 172, + 1, 230, 100, 230, 166, 48, 172, 1, 218, 17, 230, 166, 48, 172, 1, 230, + 100, 254, 175, 48, 172, 1, 218, 17, 254, 175, 48, 172, 1, 230, 100, 254, + 225, 48, 172, 1, 230, 100, 246, 207, 48, 172, 1, 230, 100, 246, 205, 48, + 172, 1, 230, 100, 254, 131, 48, 172, 1, 230, 100, 254, 223, 48, 172, 1, + 218, 17, 254, 223, 48, 172, 1, 230, 100, 246, 180, 48, 172, 1, 218, 17, + 246, 180, 48, 172, 1, 230, 100, 246, 194, 48, 172, 1, 218, 17, 246, 194, + 48, 172, 1, 230, 100, 246, 169, 48, 172, 1, 218, 17, 246, 169, 48, 172, + 1, 218, 17, 254, 123, 48, 172, 1, 230, 100, 246, 185, 48, 172, 1, 218, + 17, 254, 222, 48, 172, 1, 230, 100, 246, 162, 48, 172, 1, 230, 100, 230, + 120, 48, 172, 1, 230, 100, 242, 67, 48, 172, 1, 230, 100, 247, 0, 48, + 172, 1, 218, 17, 247, 0, 48, 172, 1, 230, 100, 254, 69, 48, 172, 1, 218, + 17, 254, 69, 48, 172, 1, 230, 100, 237, 158, 48, 172, 1, 218, 17, 237, + 158, 48, 172, 1, 230, 100, 230, 106, 48, 172, 1, 218, 17, 230, 106, 48, + 172, 1, 230, 100, 254, 67, 48, 172, 1, 218, 17, 254, 67, 48, 172, 1, 230, + 100, 254, 221, 48, 172, 1, 230, 100, 254, 13, 48, 172, 1, 230, 100, 254, + 220, 48, 172, 1, 230, 100, 254, 7, 48, 172, 1, 218, 17, 254, 7, 48, 172, + 1, 230, 100, 246, 133, 48, 172, 1, 218, 17, 246, 133, 48, 172, 1, 230, + 100, 253, 244, 48, 172, 1, 218, 17, 253, 244, 48, 172, 1, 230, 100, 254, + 217, 48, 172, 1, 218, 17, 254, 217, 48, 172, 1, 230, 100, 230, 92, 48, + 172, 1, 230, 100, 252, 187, 227, 11, 20, 107, 227, 11, 20, 103, 227, 11, + 20, 160, 227, 11, 20, 154, 227, 11, 20, 174, 227, 11, 20, 182, 227, 11, + 20, 191, 227, 11, 20, 185, 227, 11, 20, 190, 227, 11, 54, 222, 65, 227, + 11, 54, 220, 219, 227, 11, 54, 221, 245, 227, 11, 54, 245, 119, 227, 11, + 54, 245, 196, 227, 11, 54, 224, 69, 227, 11, 54, 225, 38, 227, 11, 54, + 246, 227, 227, 11, 54, 232, 27, 227, 11, 54, 131, 242, 161, 227, 11, 54, + 124, 242, 161, 227, 11, 54, 148, 242, 161, 227, 11, 54, 245, 116, 242, + 161, 227, 11, 54, 245, 170, 242, 161, 227, 11, 54, 224, 82, 242, 161, + 227, 11, 54, 225, 43, 242, 161, 227, 11, 54, 246, 235, 242, 161, 227, 11, + 54, 232, 31, 242, 161, 227, 11, 245, 108, 131, 243, 194, 227, 11, 245, + 108, 131, 228, 89, 227, 11, 245, 108, 131, 221, 251, 227, 11, 245, 108, + 124, 221, 249, 194, 5, 251, 146, 194, 5, 254, 95, 194, 5, 219, 77, 194, + 1, 60, 194, 1, 255, 58, 194, 1, 72, 194, 1, 237, 255, 194, 1, 68, 194, 1, + 220, 23, 194, 1, 73, 194, 1, 254, 196, 194, 1, 74, 194, 1, 253, 232, 194, + 1, 175, 194, 1, 236, 149, 194, 1, 245, 0, 194, 1, 244, 125, 194, 1, 232, + 115, 194, 1, 251, 169, 194, 1, 251, 69, 194, 1, 237, 123, 194, 1, 237, + 103, 194, 1, 231, 77, 194, 1, 221, 29, 194, 1, 221, 19, 194, 1, 249, 132, + 194, 1, 249, 121, 194, 1, 249, 116, 194, 1, 227, 151, 194, 1, 231, 217, + 194, 1, 222, 155, 194, 1, 222, 35, 194, 1, 249, 207, 194, 1, 249, 36, + 194, 1, 208, 194, 1, 187, 194, 1, 229, 141, 194, 1, 252, 237, 194, 1, + 252, 94, 194, 1, 196, 194, 1, 184, 194, 1, 203, 194, 1, 235, 188, 194, 1, + 219, 189, 194, 1, 225, 25, 194, 1, 223, 218, 194, 1, 226, 177, 194, 1, + 155, 194, 29, 5, 255, 58, 194, 29, 5, 72, 194, 29, 5, 237, 255, 194, 29, + 5, 68, 194, 29, 5, 220, 23, 194, 29, 5, 73, 194, 29, 5, 254, 196, 194, + 29, 5, 74, 194, 29, 5, 253, 232, 194, 5, 219, 82, 194, 5, 231, 112, 194, + 255, 7, 55, 194, 246, 171, 55, 194, 54, 55, 194, 226, 87, 78, 194, 51, + 226, 87, 78, 194, 249, 167, 194, 51, 249, 167, 15, 5, 60, 15, 5, 112, 27, + 60, 15, 5, 112, 27, 252, 228, 15, 5, 112, 27, 244, 229, 222, 59, 15, 5, + 112, 27, 155, 15, 5, 112, 27, 238, 1, 15, 5, 112, 27, 235, 173, 244, 3, + 15, 5, 112, 27, 233, 62, 15, 5, 112, 27, 226, 165, 15, 5, 255, 60, 15, 5, + 255, 11, 15, 5, 255, 12, 27, 254, 5, 15, 5, 255, 12, 27, 247, 100, 244, + 3, 15, 5, 255, 12, 27, 244, 240, 15, 5, 255, 12, 27, 244, 229, 222, 59, + 15, 5, 255, 12, 27, 155, 15, 5, 255, 12, 27, 238, 2, 244, 3, 15, 5, 255, + 12, 27, 237, 231, 15, 5, 255, 12, 27, 235, 174, 15, 5, 255, 12, 27, 224, + 231, 15, 5, 255, 12, 27, 105, 88, 105, 88, 68, 15, 5, 255, 12, 244, 3, + 15, 5, 255, 9, 15, 5, 255, 10, 27, 252, 216, 15, 5, 255, 10, 27, 244, + 229, 222, 59, 15, 5, 255, 10, 27, 234, 26, 88, 246, 197, 15, 5, 255, 10, + 27, 225, 23, 15, 5, 255, 10, 27, 222, 130, 15, 5, 254, 244, 15, 5, 254, + 182, 15, 5, 254, 183, 27, 246, 143, 15, 5, 254, 183, 27, 224, 203, 88, + 244, 81, 15, 5, 254, 175, 15, 5, 254, 176, 27, 254, 175, 15, 5, 254, 176, + 27, 248, 229, 15, 5, 254, 176, 27, 244, 81, 15, 5, 254, 176, 27, 155, 15, + 5, 254, 176, 27, 236, 251, 15, 5, 254, 176, 27, 236, 113, 15, 5, 254, + 176, 27, 224, 246, 15, 5, 254, 176, 27, 220, 30, 15, 5, 254, 172, 15, 5, + 254, 166, 15, 5, 254, 137, 15, 5, 254, 138, 27, 224, 246, 15, 5, 254, + 131, 15, 5, 254, 132, 104, 254, 131, 15, 5, 254, 132, 148, 221, 176, 15, + 5, 254, 132, 88, 232, 228, 230, 110, 254, 132, 88, 232, 227, 15, 5, 254, + 132, 88, 232, 228, 223, 226, 15, 5, 254, 107, 15, 5, 254, 88, 15, 5, 254, + 61, 15, 5, 254, 62, 27, 235, 247, 15, 5, 254, 35, 15, 5, 254, 12, 15, 5, + 254, 7, 15, 5, 254, 8, 217, 38, 222, 59, 15, 5, 254, 8, 236, 254, 222, + 59, 15, 5, 254, 8, 104, 254, 8, 220, 254, 104, 220, 254, 220, 254, 104, + 220, 254, 229, 246, 15, 5, 254, 8, 104, 254, 8, 104, 254, 7, 15, 5, 254, + 8, 104, 254, 8, 104, 254, 8, 250, 95, 254, 8, 104, 254, 8, 104, 254, 7, + 15, 5, 254, 5, 15, 5, 254, 3, 15, 5, 252, 237, 15, 5, 252, 228, 15, 5, + 252, 225, 15, 5, 252, 223, 15, 5, 252, 217, 15, 5, 252, 218, 104, 252, + 217, 15, 5, 252, 216, 15, 5, 135, 15, 5, 252, 200, 15, 5, 252, 84, 15, 5, + 252, 85, 27, 60, 15, 5, 252, 85, 27, 244, 220, 15, 5, 252, 85, 27, 238, + 2, 244, 3, 15, 5, 251, 248, 15, 5, 251, 249, 104, 251, 249, 255, 11, 15, + 5, 251, 249, 104, 251, 249, 220, 87, 15, 5, 251, 249, 250, 95, 251, 248, + 15, 5, 251, 237, 15, 5, 251, 238, 104, 251, 237, 15, 5, 251, 228, 15, 5, + 251, 227, 15, 5, 249, 207, 15, 5, 249, 198, 15, 5, 249, 199, 236, 91, 27, + 112, 88, 234, 57, 15, 5, 249, 199, 236, 91, 27, 254, 137, 15, 5, 249, + 199, 236, 91, 27, 252, 216, 15, 5, 249, 199, 236, 91, 27, 252, 84, 15, 5, + 249, 199, 236, 91, 27, 245, 0, 15, 5, 249, 199, 236, 91, 27, 245, 1, 88, + 234, 57, 15, 5, 249, 199, 236, 91, 27, 244, 103, 15, 5, 249, 199, 236, + 91, 27, 244, 87, 15, 5, 249, 199, 236, 91, 27, 244, 11, 15, 5, 249, 199, + 236, 91, 27, 155, 15, 5, 249, 199, 236, 91, 27, 237, 156, 15, 5, 249, + 199, 236, 91, 27, 237, 157, 88, 234, 231, 15, 5, 249, 199, 236, 91, 27, + 236, 240, 15, 5, 249, 199, 236, 91, 27, 235, 188, 15, 5, 249, 199, 236, + 91, 27, 234, 231, 15, 5, 249, 199, 236, 91, 27, 234, 232, 88, 234, 56, + 15, 5, 249, 199, 236, 91, 27, 234, 219, 15, 5, 249, 199, 236, 91, 27, + 232, 141, 15, 5, 249, 199, 236, 91, 27, 229, 247, 88, 229, 246, 15, 5, + 249, 199, 236, 91, 27, 224, 140, 15, 5, 249, 199, 236, 91, 27, 222, 130, + 15, 5, 249, 199, 236, 91, 27, 220, 125, 88, 244, 87, 15, 5, 249, 199, + 236, 91, 27, 220, 30, 15, 5, 249, 175, 15, 5, 249, 156, 15, 5, 249, 155, + 15, 5, 249, 154, 15, 5, 249, 15, 15, 5, 248, 255, 15, 5, 248, 230, 15, 5, + 248, 231, 27, 224, 246, 15, 5, 248, 229, 15, 5, 248, 219, 15, 5, 248, + 220, 236, 209, 105, 244, 4, 248, 202, 15, 5, 248, 202, 15, 5, 247, 111, + 15, 5, 247, 112, 104, 247, 111, 15, 5, 247, 112, 244, 3, 15, 5, 247, 112, + 224, 228, 15, 5, 247, 109, 15, 5, 247, 110, 27, 246, 130, 15, 5, 247, + 108, 15, 5, 247, 107, 15, 5, 247, 106, 15, 5, 247, 105, 15, 5, 247, 101, + 15, 5, 247, 99, 15, 5, 247, 100, 244, 3, 15, 5, 247, 100, 244, 4, 244, 3, + 15, 5, 247, 98, 15, 5, 247, 91, 15, 5, 73, 15, 5, 178, 27, 229, 246, 15, + 5, 178, 104, 178, 231, 104, 104, 231, 103, 15, 5, 247, 17, 15, 5, 247, + 18, 27, 112, 88, 243, 214, 88, 249, 207, 15, 5, 247, 18, 27, 244, 220, + 15, 5, 247, 18, 27, 233, 196, 15, 5, 247, 18, 27, 226, 156, 15, 5, 247, + 18, 27, 224, 246, 15, 5, 247, 18, 27, 68, 15, 5, 246, 252, 15, 5, 246, + 242, 15, 5, 246, 217, 15, 5, 246, 197, 15, 5, 246, 198, 27, 244, 228, 15, + 5, 246, 198, 27, 244, 229, 222, 59, 15, 5, 246, 198, 27, 234, 25, 15, 5, + 246, 198, 250, 95, 246, 197, 15, 5, 246, 198, 230, 110, 246, 197, 15, 5, + 246, 198, 223, 226, 15, 5, 246, 145, 15, 5, 246, 143, 15, 5, 246, 130, + 15, 5, 246, 78, 15, 5, 246, 79, 27, 60, 15, 5, 246, 79, 27, 112, 88, 235, + 162, 15, 5, 246, 79, 27, 112, 88, 235, 163, 27, 235, 162, 15, 5, 246, 79, + 27, 254, 131, 15, 5, 246, 79, 27, 252, 228, 15, 5, 246, 79, 27, 247, 100, + 244, 3, 15, 5, 246, 79, 27, 247, 100, 244, 4, 244, 3, 15, 5, 246, 79, 27, + 155, 15, 5, 246, 79, 27, 243, 214, 244, 3, 15, 5, 246, 79, 27, 238, 2, + 244, 3, 15, 5, 246, 79, 27, 236, 208, 15, 5, 246, 79, 27, 236, 209, 223, + 226, 15, 5, 246, 79, 27, 236, 5, 15, 5, 246, 79, 27, 235, 188, 15, 5, + 246, 79, 27, 235, 163, 27, 235, 162, 15, 5, 246, 79, 27, 235, 67, 15, 5, + 246, 79, 27, 234, 231, 15, 5, 246, 79, 27, 220, 124, 15, 5, 246, 79, 27, + 220, 115, 15, 5, 245, 0, 15, 5, 245, 1, 244, 3, 15, 5, 244, 254, 15, 5, + 244, 255, 27, 112, 88, 249, 208, 88, 155, 15, 5, 244, 255, 27, 112, 88, + 155, 15, 5, 244, 255, 27, 112, 88, 238, 1, 15, 5, 244, 255, 27, 255, 10, + 222, 60, 88, 222, 147, 15, 5, 244, 255, 27, 254, 131, 15, 5, 244, 255, + 27, 254, 7, 15, 5, 244, 255, 27, 254, 6, 88, 244, 240, 15, 5, 244, 255, + 27, 252, 228, 15, 5, 244, 255, 27, 252, 201, 88, 203, 15, 5, 244, 255, + 27, 251, 228, 15, 5, 244, 255, 27, 251, 229, 88, 203, 15, 5, 244, 255, + 27, 249, 207, 15, 5, 244, 255, 27, 249, 15, 15, 5, 244, 255, 27, 248, + 231, 27, 224, 246, 15, 5, 244, 255, 27, 247, 109, 15, 5, 244, 255, 27, + 246, 217, 15, 5, 244, 255, 27, 246, 218, 88, 235, 188, 15, 5, 244, 255, + 27, 246, 197, 15, 5, 244, 255, 27, 246, 198, 27, 244, 229, 222, 59, 15, + 5, 244, 255, 27, 244, 229, 222, 59, 15, 5, 244, 255, 27, 244, 220, 15, 5, + 244, 255, 27, 244, 103, 15, 5, 244, 255, 27, 244, 101, 15, 5, 244, 255, + 27, 244, 102, 88, 60, 15, 5, 244, 255, 27, 244, 88, 88, 223, 103, 15, 5, + 244, 255, 27, 243, 214, 88, 234, 232, 88, 246, 130, 15, 5, 244, 255, 27, + 243, 197, 15, 5, 244, 255, 27, 243, 198, 88, 235, 188, 15, 5, 244, 255, + 27, 243, 113, 88, 235, 67, 15, 5, 244, 255, 27, 242, 169, 15, 5, 244, + 255, 27, 238, 2, 244, 3, 15, 5, 244, 255, 27, 237, 146, 88, 242, 174, 88, + 254, 7, 15, 5, 244, 255, 27, 236, 240, 15, 5, 244, 255, 27, 236, 208, 15, + 5, 244, 255, 27, 236, 110, 15, 5, 244, 255, 27, 236, 111, 88, 235, 162, + 15, 5, 244, 255, 27, 236, 6, 88, 254, 131, 15, 5, 244, 255, 27, 235, 188, + 15, 5, 244, 255, 27, 234, 26, 88, 246, 197, 15, 5, 244, 255, 27, 233, + 196, 15, 5, 244, 255, 27, 231, 103, 15, 5, 244, 255, 27, 231, 104, 104, + 231, 103, 15, 5, 244, 255, 27, 187, 15, 5, 244, 255, 27, 226, 156, 15, 5, + 244, 255, 27, 226, 131, 15, 5, 244, 255, 27, 224, 246, 15, 5, 244, 255, + 27, 224, 247, 88, 220, 240, 15, 5, 244, 255, 27, 224, 219, 15, 5, 244, + 255, 27, 223, 74, 15, 5, 244, 255, 27, 222, 130, 15, 5, 244, 255, 27, 68, + 15, 5, 244, 255, 27, 220, 115, 15, 5, 244, 255, 27, 220, 116, 88, 247, + 111, 15, 5, 244, 255, 104, 244, 254, 15, 5, 244, 249, 15, 5, 244, 250, + 250, 95, 244, 249, 15, 5, 244, 247, 15, 5, 244, 248, 104, 244, 248, 244, + 221, 104, 244, 220, 15, 5, 244, 240, 15, 5, 244, 241, 244, 248, 104, 244, + 248, 244, 221, 104, 244, 220, 15, 5, 244, 239, 15, 5, 244, 237, 15, 5, + 244, 230, 15, 5, 244, 228, 15, 5, 244, 229, 222, 59, 15, 5, 244, 229, + 104, 244, 228, 15, 5, 244, 229, 250, 95, 244, 228, 15, 5, 244, 220, 15, + 5, 244, 219, 15, 5, 244, 215, 15, 5, 244, 166, 15, 5, 244, 167, 27, 235, + 247, 15, 5, 244, 103, 15, 5, 244, 104, 27, 73, 15, 5, 244, 104, 27, 68, + 15, 5, 244, 104, 250, 95, 244, 103, 15, 5, 244, 101, 15, 5, 244, 102, + 104, 244, 101, 15, 5, 244, 102, 250, 95, 244, 101, 15, 5, 244, 99, 15, 5, + 244, 87, 15, 5, 244, 88, 244, 3, 15, 5, 244, 85, 15, 5, 244, 86, 27, 112, + 88, 238, 1, 15, 5, 244, 86, 27, 244, 229, 222, 59, 15, 5, 244, 86, 27, + 238, 1, 15, 5, 244, 86, 27, 234, 232, 88, 238, 1, 15, 5, 244, 86, 27, + 187, 15, 5, 244, 83, 15, 5, 244, 81, 15, 5, 244, 82, 250, 95, 244, 81, + 15, 5, 244, 82, 27, 252, 228, 15, 5, 244, 82, 27, 222, 130, 15, 5, 244, + 82, 222, 59, 15, 5, 244, 17, 15, 5, 244, 18, 250, 95, 244, 17, 15, 5, + 244, 15, 15, 5, 244, 16, 27, 236, 240, 15, 5, 244, 16, 27, 236, 241, 27, + 238, 2, 244, 3, 15, 5, 244, 16, 27, 231, 103, 15, 5, 244, 16, 27, 226, + 157, 88, 220, 253, 15, 5, 244, 16, 244, 3, 15, 5, 244, 11, 15, 5, 244, + 12, 27, 112, 88, 235, 247, 15, 5, 244, 12, 27, 235, 247, 15, 5, 244, 12, + 104, 244, 12, 234, 225, 15, 5, 244, 7, 15, 5, 244, 5, 15, 5, 244, 6, 27, + 224, 246, 15, 5, 243, 253, 15, 5, 243, 252, 15, 5, 243, 249, 15, 5, 243, + 248, 15, 5, 155, 15, 5, 243, 214, 222, 59, 15, 5, 243, 214, 244, 3, 15, + 5, 243, 197, 15, 5, 243, 112, 15, 5, 243, 113, 27, 254, 7, 15, 5, 243, + 113, 27, 254, 5, 15, 5, 243, 113, 27, 252, 228, 15, 5, 243, 113, 27, 248, + 202, 15, 5, 243, 113, 27, 244, 247, 15, 5, 243, 113, 27, 236, 104, 15, 5, + 243, 113, 27, 231, 103, 15, 5, 243, 113, 27, 224, 246, 15, 5, 243, 113, + 27, 68, 15, 5, 242, 173, 15, 5, 242, 169, 15, 5, 242, 170, 27, 254, 131, + 15, 5, 242, 170, 27, 243, 197, 15, 5, 242, 170, 27, 236, 208, 15, 5, 242, + 170, 27, 235, 29, 15, 5, 242, 170, 27, 220, 115, 15, 5, 242, 166, 15, 5, + 72, 15, 5, 242, 107, 60, 15, 5, 242, 69, 15, 5, 238, 29, 15, 5, 238, 30, + 104, 238, 30, 251, 228, 15, 5, 238, 30, 104, 238, 30, 223, 226, 15, 5, + 238, 4, 15, 5, 238, 1, 15, 5, 238, 2, 248, 255, 15, 5, 238, 2, 227, 147, + 15, 5, 238, 2, 104, 238, 2, 224, 205, 104, 224, 205, 220, 116, 104, 220, + 115, 15, 5, 238, 2, 244, 3, 15, 5, 237, 249, 15, 5, 237, 250, 27, 244, + 229, 222, 59, 15, 5, 237, 248, 15, 5, 237, 238, 15, 5, 237, 239, 27, 222, + 130, 15, 5, 237, 239, 250, 95, 237, 238, 15, 5, 237, 239, 230, 110, 237, + 238, 15, 5, 237, 239, 223, 226, 15, 5, 237, 231, 15, 5, 237, 223, 15, 5, + 237, 156, 15, 5, 237, 145, 15, 5, 175, 15, 5, 206, 27, 60, 15, 5, 206, + 27, 254, 244, 15, 5, 206, 27, 254, 245, 88, 236, 5, 15, 5, 206, 27, 254, + 5, 15, 5, 206, 27, 252, 228, 15, 5, 206, 27, 252, 216, 15, 5, 206, 27, + 135, 15, 5, 206, 27, 252, 84, 15, 5, 206, 27, 246, 143, 15, 5, 206, 27, + 246, 130, 15, 5, 206, 27, 245, 0, 15, 5, 206, 27, 244, 240, 15, 5, 206, + 27, 244, 229, 222, 59, 15, 5, 206, 27, 244, 220, 15, 5, 206, 27, 244, + 221, 88, 225, 24, 88, 60, 15, 5, 206, 27, 244, 103, 15, 5, 206, 27, 244, + 87, 15, 5, 206, 27, 244, 82, 88, 226, 131, 15, 5, 206, 27, 244, 82, 250, + 95, 244, 81, 15, 5, 206, 27, 244, 17, 15, 5, 206, 27, 243, 252, 15, 5, + 206, 27, 238, 1, 15, 5, 206, 27, 237, 238, 15, 5, 206, 27, 236, 240, 15, + 5, 206, 27, 236, 113, 15, 5, 206, 27, 236, 110, 15, 5, 206, 27, 235, 67, + 15, 5, 206, 27, 234, 231, 15, 5, 206, 27, 234, 25, 15, 5, 206, 27, 234, + 26, 88, 247, 111, 15, 5, 206, 27, 234, 26, 88, 244, 103, 15, 5, 206, 27, + 234, 26, 88, 222, 87, 15, 5, 206, 27, 233, 196, 15, 5, 206, 27, 233, 197, + 88, 231, 98, 15, 5, 206, 27, 232, 141, 15, 5, 206, 27, 231, 103, 15, 5, + 206, 27, 229, 108, 15, 5, 206, 27, 227, 22, 15, 5, 206, 27, 226, 177, 15, + 5, 206, 27, 226, 131, 15, 5, 206, 27, 225, 25, 15, 5, 206, 27, 224, 246, + 15, 5, 206, 27, 224, 219, 15, 5, 206, 27, 224, 170, 15, 5, 206, 27, 224, + 132, 15, 5, 206, 27, 223, 81, 15, 5, 206, 27, 222, 112, 15, 5, 206, 27, + 68, 15, 5, 206, 27, 220, 124, 15, 5, 206, 27, 220, 115, 15, 5, 206, 27, + 220, 90, 27, 187, 15, 5, 206, 27, 220, 30, 15, 5, 206, 27, 217, 42, 15, + 5, 237, 6, 15, 5, 237, 7, 250, 95, 237, 6, 15, 5, 236, 255, 15, 5, 236, + 253, 15, 5, 236, 251, 15, 5, 236, 250, 15, 5, 236, 248, 15, 5, 236, 249, + 104, 236, 248, 15, 5, 236, 240, 15, 5, 236, 241, 27, 238, 2, 244, 3, 15, + 5, 236, 236, 15, 5, 236, 237, 27, 252, 228, 15, 5, 236, 237, 250, 95, + 236, 236, 15, 5, 236, 235, 15, 5, 236, 234, 15, 5, 236, 208, 15, 5, 236, + 209, 235, 175, 27, 105, 104, 235, 175, 27, 68, 15, 5, 236, 209, 104, 236, + 209, 235, 175, 27, 105, 104, 235, 175, 27, 68, 15, 5, 236, 160, 15, 5, + 236, 113, 15, 5, 236, 114, 27, 252, 228, 15, 5, 236, 114, 27, 68, 15, 5, + 236, 114, 27, 220, 115, 15, 5, 236, 110, 15, 5, 236, 104, 15, 5, 236, 93, + 15, 5, 236, 92, 15, 5, 236, 90, 15, 5, 236, 91, 104, 236, 90, 15, 5, 236, + 7, 15, 5, 236, 8, 104, 243, 113, 27, 254, 6, 236, 8, 104, 243, 113, 27, + 254, 5, 15, 5, 236, 5, 15, 5, 236, 3, 15, 5, 236, 4, 219, 177, 17, 15, 5, + 236, 2, 15, 5, 236, 0, 15, 5, 236, 1, 244, 3, 15, 5, 235, 255, 15, 5, + 235, 247, 15, 5, 235, 248, 230, 110, 235, 247, 15, 5, 235, 242, 15, 5, + 235, 225, 15, 5, 235, 188, 15, 5, 235, 174, 15, 5, 235, 175, 27, 60, 15, + 5, 235, 175, 27, 112, 88, 249, 208, 88, 155, 15, 5, 235, 175, 27, 112, + 88, 244, 220, 15, 5, 235, 175, 27, 112, 88, 235, 162, 15, 5, 235, 175, + 27, 254, 175, 15, 5, 235, 175, 27, 254, 131, 15, 5, 235, 175, 27, 254, 8, + 217, 38, 222, 59, 15, 5, 235, 175, 27, 252, 228, 15, 5, 235, 175, 27, + 252, 84, 15, 5, 235, 175, 27, 249, 156, 15, 5, 235, 175, 27, 246, 197, + 15, 5, 235, 175, 27, 245, 0, 15, 5, 235, 175, 27, 244, 220, 15, 5, 235, + 175, 27, 244, 11, 15, 5, 235, 175, 27, 244, 12, 88, 244, 11, 15, 5, 235, + 175, 27, 155, 15, 5, 235, 175, 27, 243, 197, 15, 5, 235, 175, 27, 243, + 113, 27, 231, 103, 15, 5, 235, 175, 27, 238, 2, 244, 3, 15, 5, 235, 175, + 27, 237, 238, 15, 5, 235, 175, 27, 237, 239, 88, 155, 15, 5, 235, 175, + 27, 237, 239, 88, 234, 231, 15, 5, 235, 175, 27, 236, 113, 15, 5, 235, + 175, 27, 236, 104, 15, 5, 235, 175, 27, 236, 5, 15, 5, 235, 175, 27, 236, + 0, 15, 5, 235, 175, 27, 236, 1, 88, 243, 113, 88, 60, 15, 5, 235, 175, + 27, 235, 174, 15, 5, 235, 175, 27, 235, 29, 15, 5, 235, 175, 27, 234, + 231, 15, 5, 235, 175, 27, 234, 221, 15, 5, 235, 175, 27, 234, 25, 15, 5, + 235, 175, 27, 234, 26, 88, 246, 197, 15, 5, 235, 175, 27, 233, 62, 15, 5, + 235, 175, 27, 232, 141, 15, 5, 235, 175, 27, 224, 247, 88, 223, 74, 15, + 5, 235, 175, 27, 224, 203, 88, 244, 82, 88, 246, 143, 15, 5, 235, 175, + 27, 224, 203, 88, 244, 82, 222, 59, 15, 5, 235, 175, 27, 224, 168, 15, 5, + 235, 175, 27, 224, 169, 88, 224, 168, 15, 5, 235, 175, 27, 223, 74, 15, + 5, 235, 175, 27, 222, 141, 15, 5, 235, 175, 27, 222, 130, 15, 5, 235, + 175, 27, 222, 88, 88, 112, 88, 223, 104, 88, 208, 15, 5, 235, 175, 27, + 68, 15, 5, 235, 175, 27, 105, 88, 60, 15, 5, 235, 175, 27, 105, 88, 105, + 88, 68, 15, 5, 235, 175, 27, 220, 125, 88, 254, 7, 15, 5, 235, 175, 27, + 220, 115, 15, 5, 235, 175, 27, 220, 30, 15, 5, 235, 175, 223, 226, 15, 5, + 235, 172, 15, 5, 235, 173, 27, 224, 246, 15, 5, 235, 173, 27, 224, 247, + 88, 223, 74, 15, 5, 235, 173, 244, 3, 15, 5, 235, 173, 244, 4, 104, 235, + 173, 244, 4, 224, 246, 15, 5, 235, 169, 15, 5, 235, 162, 15, 5, 235, 163, + 27, 235, 162, 15, 5, 235, 160, 15, 5, 235, 161, 27, 235, 247, 15, 5, 235, + 161, 27, 235, 248, 88, 227, 22, 15, 5, 235, 67, 15, 5, 235, 54, 15, 5, + 235, 46, 15, 5, 235, 29, 15, 5, 234, 231, 15, 5, 234, 232, 27, 252, 228, + 15, 5, 234, 229, 15, 5, 234, 230, 27, 254, 175, 15, 5, 234, 230, 27, 252, + 228, 15, 5, 234, 230, 27, 246, 130, 15, 5, 234, 230, 27, 246, 131, 222, + 59, 15, 5, 234, 230, 27, 244, 229, 222, 59, 15, 5, 234, 230, 27, 243, + 113, 27, 252, 228, 15, 5, 234, 230, 27, 237, 238, 15, 5, 234, 230, 27, + 236, 253, 15, 5, 234, 230, 27, 236, 251, 15, 5, 234, 230, 27, 236, 252, + 88, 254, 7, 15, 5, 234, 230, 27, 236, 113, 15, 5, 234, 230, 27, 235, 189, + 88, 254, 7, 15, 5, 234, 230, 27, 235, 174, 15, 5, 234, 230, 27, 234, 26, + 88, 246, 197, 15, 5, 234, 230, 27, 232, 141, 15, 5, 234, 230, 27, 231, + 144, 15, 5, 234, 230, 27, 224, 141, 88, 254, 7, 15, 5, 234, 230, 27, 224, + 124, 88, 251, 248, 15, 5, 234, 230, 27, 220, 253, 15, 5, 234, 230, 222, + 59, 15, 5, 234, 230, 250, 95, 234, 229, 15, 5, 234, 230, 230, 110, 234, + 229, 15, 5, 234, 230, 223, 226, 15, 5, 234, 230, 224, 228, 15, 5, 234, + 228, 15, 5, 234, 225, 15, 5, 234, 226, 104, 234, 225, 15, 5, 234, 226, + 230, 110, 234, 225, 15, 5, 234, 226, 224, 228, 15, 5, 234, 224, 15, 5, + 234, 221, 15, 5, 234, 219, 15, 5, 234, 220, 104, 234, 219, 15, 5, 234, + 220, 104, 234, 220, 244, 221, 104, 244, 220, 15, 5, 196, 15, 5, 234, 120, + 27, 222, 130, 15, 5, 234, 120, 244, 3, 15, 5, 234, 119, 15, 5, 234, 106, + 15, 5, 234, 74, 15, 5, 234, 57, 15, 5, 234, 56, 15, 5, 234, 25, 15, 5, + 233, 244, 15, 5, 233, 196, 15, 5, 233, 159, 15, 5, 233, 99, 15, 5, 233, + 100, 104, 233, 99, 15, 5, 233, 92, 15, 5, 233, 93, 244, 3, 15, 5, 233, + 78, 15, 5, 233, 65, 15, 5, 233, 62, 15, 5, 233, 63, 27, 60, 15, 5, 233, + 63, 27, 235, 247, 15, 5, 233, 63, 27, 217, 114, 15, 5, 233, 63, 104, 233, + 62, 15, 5, 233, 63, 104, 233, 63, 27, 112, 88, 208, 15, 5, 233, 63, 250, + 95, 233, 62, 15, 5, 233, 60, 15, 5, 233, 61, 27, 60, 15, 5, 233, 61, 27, + 112, 88, 249, 15, 15, 5, 233, 61, 27, 249, 15, 15, 5, 233, 61, 244, 3, + 15, 5, 208, 15, 5, 232, 237, 15, 5, 232, 227, 15, 5, 232, 228, 237, 169, + 15, 5, 232, 228, 27, 224, 171, 222, 59, 15, 5, 232, 228, 230, 110, 232, + 227, 15, 5, 232, 226, 15, 5, 232, 222, 231, 90, 15, 5, 232, 221, 15, 5, + 232, 220, 15, 5, 232, 141, 15, 5, 232, 142, 27, 60, 15, 5, 232, 142, 27, + 220, 115, 15, 5, 232, 142, 224, 228, 15, 5, 232, 62, 15, 5, 232, 63, 27, + 73, 15, 5, 232, 61, 15, 5, 232, 34, 15, 5, 232, 35, 27, 244, 229, 222, + 59, 15, 5, 232, 35, 27, 244, 221, 88, 244, 229, 222, 59, 15, 5, 232, 32, + 15, 5, 232, 33, 27, 254, 131, 15, 5, 232, 33, 27, 254, 7, 15, 5, 232, 33, + 27, 254, 8, 88, 254, 7, 15, 5, 232, 33, 27, 244, 11, 15, 5, 232, 33, 27, + 234, 26, 88, 244, 229, 222, 59, 15, 5, 232, 33, 27, 232, 141, 15, 5, 232, + 33, 27, 231, 103, 15, 5, 232, 33, 27, 224, 246, 15, 5, 232, 33, 27, 224, + 247, 88, 112, 254, 131, 15, 5, 232, 33, 27, 224, 247, 88, 254, 7, 15, 5, + 232, 33, 27, 224, 247, 88, 254, 8, 88, 254, 7, 15, 5, 232, 33, 27, 220, + 125, 88, 254, 7, 15, 5, 232, 33, 27, 220, 30, 15, 5, 232, 22, 15, 5, 231, + 144, 15, 5, 231, 117, 15, 5, 231, 103, 15, 5, 231, 104, 235, 173, 27, + 244, 220, 15, 5, 231, 104, 235, 173, 27, 234, 57, 15, 5, 231, 104, 235, + 173, 27, 226, 156, 15, 5, 231, 104, 235, 173, 27, 226, 157, 104, 231, + 104, 235, 173, 27, 226, 156, 15, 5, 231, 104, 235, 173, 27, 220, 30, 15, + 5, 231, 104, 222, 59, 15, 5, 231, 104, 104, 231, 103, 15, 5, 231, 104, + 250, 95, 231, 103, 15, 5, 231, 104, 250, 95, 231, 104, 235, 173, 104, + 235, 172, 15, 5, 231, 98, 15, 5, 231, 99, 255, 10, 27, 254, 3, 15, 5, + 231, 99, 255, 10, 27, 252, 84, 15, 5, 231, 99, 255, 10, 27, 247, 107, 15, + 5, 231, 99, 255, 10, 27, 244, 11, 15, 5, 231, 99, 255, 10, 27, 238, 2, + 244, 3, 15, 5, 231, 99, 255, 10, 27, 236, 251, 15, 5, 231, 99, 255, 10, + 27, 235, 188, 15, 5, 231, 99, 255, 10, 27, 232, 141, 15, 5, 231, 99, 255, + 10, 27, 224, 121, 15, 5, 231, 99, 255, 10, 27, 220, 124, 15, 5, 231, 99, + 236, 91, 27, 252, 84, 15, 5, 231, 99, 236, 91, 27, 252, 85, 68, 15, 5, + 187, 15, 5, 230, 37, 15, 5, 230, 12, 15, 5, 229, 246, 15, 5, 229, 152, + 15, 5, 229, 108, 15, 5, 229, 109, 27, 60, 15, 5, 229, 109, 27, 255, 11, + 15, 5, 229, 109, 27, 252, 84, 15, 5, 229, 109, 27, 251, 248, 15, 5, 229, + 109, 27, 73, 15, 5, 229, 109, 27, 72, 15, 5, 229, 109, 27, 242, 69, 15, + 5, 229, 109, 27, 68, 15, 5, 229, 109, 27, 220, 124, 15, 5, 229, 109, 250, + 95, 229, 108, 15, 5, 229, 67, 15, 5, 229, 68, 27, 236, 236, 15, 5, 229, + 68, 27, 220, 115, 15, 5, 229, 68, 27, 217, 114, 15, 5, 229, 68, 230, 110, + 229, 67, 15, 5, 203, 15, 5, 227, 254, 15, 5, 227, 147, 15, 5, 227, 22, + 15, 5, 226, 177, 15, 5, 226, 166, 231, 90, 15, 5, 226, 165, 15, 5, 226, + 166, 27, 60, 15, 5, 226, 166, 27, 247, 111, 15, 5, 226, 166, 27, 247, + 109, 15, 5, 226, 166, 27, 155, 15, 5, 226, 166, 27, 236, 240, 15, 5, 226, + 166, 27, 235, 247, 15, 5, 226, 166, 27, 234, 219, 15, 5, 226, 166, 27, + 233, 196, 15, 5, 226, 166, 27, 231, 103, 15, 5, 226, 166, 27, 226, 156, + 15, 5, 226, 166, 27, 224, 219, 15, 5, 226, 166, 27, 222, 147, 15, 5, 226, + 166, 27, 220, 124, 15, 5, 226, 166, 27, 220, 121, 15, 5, 226, 166, 27, + 220, 94, 15, 5, 226, 166, 27, 220, 50, 15, 5, 226, 166, 27, 220, 30, 15, + 5, 226, 166, 104, 226, 165, 15, 5, 226, 166, 244, 3, 15, 5, 226, 156, 15, + 5, 226, 157, 235, 175, 27, 254, 5, 15, 5, 226, 138, 15, 5, 226, 131, 15, + 5, 225, 25, 15, 5, 225, 23, 15, 5, 225, 24, 27, 60, 15, 5, 225, 24, 27, + 252, 228, 15, 5, 225, 24, 27, 244, 81, 15, 5, 225, 24, 27, 232, 141, 15, + 5, 225, 24, 27, 224, 168, 15, 5, 225, 24, 27, 220, 240, 15, 5, 225, 24, + 27, 68, 15, 5, 225, 24, 27, 105, 88, 60, 15, 5, 225, 22, 15, 5, 225, 20, + 15, 5, 225, 3, 15, 5, 224, 246, 15, 5, 224, 247, 242, 173, 15, 5, 224, + 247, 104, 224, 247, 244, 248, 104, 244, 248, 244, 221, 104, 244, 220, 15, + 5, 224, 247, 104, 224, 247, 222, 148, 104, 222, 148, 244, 221, 104, 244, + 220, 15, 5, 224, 239, 15, 5, 224, 234, 15, 5, 224, 231, 15, 5, 224, 230, + 15, 5, 224, 227, 15, 5, 224, 219, 15, 5, 224, 220, 27, 60, 15, 5, 224, + 220, 27, 237, 238, 15, 5, 224, 213, 15, 5, 224, 214, 27, 60, 15, 5, 224, + 214, 27, 252, 217, 15, 5, 224, 214, 27, 251, 237, 15, 5, 224, 214, 27, + 248, 219, 15, 5, 224, 214, 27, 244, 220, 15, 5, 224, 214, 27, 238, 1, 15, + 5, 224, 214, 27, 238, 2, 244, 3, 15, 5, 224, 214, 27, 235, 242, 15, 5, + 224, 214, 27, 234, 221, 15, 5, 224, 214, 27, 233, 92, 15, 5, 224, 214, + 27, 226, 156, 15, 5, 224, 208, 15, 5, 224, 204, 15, 5, 224, 205, 222, 59, + 15, 5, 224, 205, 104, 224, 205, 251, 229, 104, 251, 228, 15, 5, 224, 202, + 15, 5, 224, 170, 15, 5, 224, 171, 104, 237, 170, 224, 170, 15, 5, 224, + 168, 15, 5, 224, 167, 15, 5, 224, 140, 15, 5, 224, 141, 244, 3, 15, 5, + 224, 132, 15, 5, 224, 130, 15, 5, 224, 131, 104, 224, 131, 224, 168, 15, + 5, 224, 123, 15, 5, 224, 121, 15, 5, 223, 103, 15, 5, 223, 104, 104, 223, + 103, 15, 5, 223, 83, 15, 5, 223, 82, 15, 5, 223, 81, 15, 5, 223, 74, 15, + 5, 223, 73, 15, 5, 223, 53, 15, 5, 223, 52, 15, 5, 222, 155, 15, 5, 222, + 156, 253, 251, 15, 5, 222, 156, 27, 243, 112, 15, 5, 222, 156, 27, 233, + 196, 15, 5, 222, 156, 244, 3, 15, 5, 222, 147, 15, 5, 222, 148, 104, 222, + 148, 232, 63, 104, 232, 63, 248, 203, 104, 248, 202, 15, 5, 222, 148, + 223, 226, 15, 5, 222, 141, 15, 5, 118, 27, 252, 84, 15, 5, 118, 27, 244, + 11, 15, 5, 118, 27, 224, 246, 15, 5, 118, 27, 224, 170, 15, 5, 118, 27, + 220, 253, 15, 5, 118, 27, 220, 115, 15, 5, 222, 130, 15, 5, 222, 112, 15, + 5, 222, 87, 15, 5, 222, 88, 244, 3, 15, 5, 221, 205, 15, 5, 221, 206, + 222, 59, 15, 5, 221, 181, 15, 5, 221, 165, 15, 5, 221, 166, 27, 222, 130, + 15, 5, 221, 166, 104, 221, 165, 15, 5, 221, 166, 104, 221, 166, 244, 248, + 104, 244, 248, 244, 221, 104, 244, 220, 15, 5, 221, 0, 15, 5, 220, 253, + 15, 5, 220, 251, 15, 5, 220, 249, 15, 5, 220, 240, 15, 5, 220, 241, 104, + 220, 241, 217, 115, 104, 217, 114, 15, 5, 68, 15, 5, 105, 244, 11, 15, 5, + 105, 105, 68, 15, 5, 105, 104, 105, 230, 44, 104, 230, 44, 244, 221, 104, + 244, 220, 15, 5, 105, 104, 105, 223, 54, 104, 223, 53, 15, 5, 105, 104, + 105, 105, 210, 104, 105, 227, 159, 15, 5, 220, 124, 15, 5, 220, 121, 15, + 5, 220, 115, 15, 5, 220, 116, 235, 242, 15, 5, 220, 116, 27, 252, 228, + 15, 5, 220, 116, 27, 233, 196, 15, 5, 220, 116, 27, 105, 88, 105, 88, 68, + 15, 5, 220, 116, 27, 105, 88, 105, 88, 105, 244, 3, 15, 5, 220, 116, 244, + 3, 15, 5, 220, 116, 224, 228, 15, 5, 220, 116, 224, 229, 27, 252, 228, + 15, 5, 220, 111, 15, 5, 220, 94, 15, 5, 220, 95, 27, 235, 174, 15, 5, + 220, 95, 27, 234, 26, 88, 249, 207, 15, 5, 220, 95, 27, 225, 23, 15, 5, + 220, 95, 27, 68, 15, 5, 220, 93, 15, 5, 220, 89, 15, 5, 220, 90, 27, 236, + 208, 15, 5, 220, 90, 27, 187, 15, 5, 220, 87, 15, 5, 220, 88, 244, 3, 15, + 5, 220, 50, 15, 5, 220, 51, 250, 95, 220, 50, 15, 5, 220, 51, 224, 228, + 15, 5, 220, 48, 15, 5, 220, 49, 27, 112, 88, 155, 15, 5, 220, 49, 27, + 112, 88, 208, 15, 5, 220, 49, 27, 254, 175, 15, 5, 220, 49, 27, 155, 15, + 5, 220, 49, 27, 231, 103, 15, 5, 220, 49, 27, 220, 124, 15, 5, 220, 49, + 27, 220, 125, 88, 254, 7, 15, 5, 220, 49, 27, 220, 125, 88, 252, 84, 15, + 5, 220, 47, 15, 5, 220, 44, 15, 5, 220, 43, 15, 5, 220, 40, 15, 5, 220, + 41, 27, 60, 15, 5, 220, 41, 27, 254, 3, 15, 5, 220, 41, 27, 135, 15, 5, + 220, 41, 27, 247, 101, 15, 5, 220, 41, 27, 245, 0, 15, 5, 220, 41, 27, + 244, 240, 15, 5, 220, 41, 27, 244, 229, 222, 59, 15, 5, 220, 41, 27, 244, + 220, 15, 5, 220, 41, 27, 244, 17, 15, 5, 220, 41, 27, 155, 15, 5, 220, + 41, 27, 238, 1, 15, 5, 220, 41, 27, 237, 238, 15, 5, 220, 41, 27, 237, + 145, 15, 5, 220, 41, 27, 236, 113, 15, 5, 220, 41, 27, 234, 219, 15, 5, + 220, 41, 27, 233, 159, 15, 5, 220, 41, 27, 187, 15, 5, 220, 41, 27, 224, + 246, 15, 5, 220, 41, 27, 224, 130, 15, 5, 220, 41, 27, 221, 0, 15, 5, + 220, 41, 27, 105, 88, 244, 11, 15, 5, 220, 41, 27, 220, 115, 15, 5, 220, + 41, 27, 220, 38, 15, 5, 220, 38, 15, 5, 220, 39, 27, 68, 15, 5, 220, 30, + 15, 5, 220, 31, 27, 60, 15, 5, 220, 31, 27, 236, 7, 15, 5, 220, 31, 27, + 235, 247, 15, 5, 220, 31, 27, 222, 130, 15, 5, 220, 27, 15, 5, 220, 29, + 15, 5, 220, 28, 15, 5, 220, 24, 15, 5, 220, 13, 15, 5, 220, 14, 27, 236, + 208, 15, 5, 220, 12, 15, 5, 217, 114, 15, 5, 217, 115, 222, 59, 15, 5, + 217, 115, 204, 27, 235, 247, 15, 5, 217, 111, 15, 5, 217, 104, 15, 5, + 217, 91, 15, 5, 217, 42, 15, 5, 217, 43, 104, 217, 42, 15, 5, 217, 41, + 15, 5, 217, 39, 15, 5, 217, 40, 236, 254, 222, 59, 15, 5, 217, 34, 15, 5, + 217, 26, 15, 5, 217, 13, 15, 5, 217, 11, 15, 5, 217, 12, 27, 60, 15, 5, + 217, 10, 15, 5, 217, 9, 15, 120, 5, 124, 254, 7, 15, 120, 5, 148, 254, 7, + 15, 120, 5, 245, 116, 254, 7, 15, 120, 5, 245, 170, 254, 7, 15, 120, 5, + 224, 82, 254, 7, 15, 120, 5, 225, 43, 254, 7, 15, 120, 5, 246, 235, 254, + 7, 15, 120, 5, 232, 31, 254, 7, 15, 120, 5, 148, 248, 202, 15, 120, 5, + 245, 116, 248, 202, 15, 120, 5, 245, 170, 248, 202, 15, 120, 5, 224, 82, + 248, 202, 15, 120, 5, 225, 43, 248, 202, 15, 120, 5, 246, 235, 248, 202, + 15, 120, 5, 232, 31, 248, 202, 15, 120, 5, 245, 116, 68, 15, 120, 5, 245, + 170, 68, 15, 120, 5, 224, 82, 68, 15, 120, 5, 225, 43, 68, 15, 120, 5, + 246, 235, 68, 15, 120, 5, 232, 31, 68, 15, 120, 5, 131, 244, 168, 15, + 120, 5, 124, 244, 168, 15, 120, 5, 148, 244, 168, 15, 120, 5, 245, 116, + 244, 168, 15, 120, 5, 245, 170, 244, 168, 15, 120, 5, 224, 82, 244, 168, + 15, 120, 5, 225, 43, 244, 168, 15, 120, 5, 246, 235, 244, 168, 15, 120, + 5, 232, 31, 244, 168, 15, 120, 5, 131, 244, 165, 15, 120, 5, 124, 244, + 165, 15, 120, 5, 148, 244, 165, 15, 120, 5, 245, 116, 244, 165, 15, 120, + 5, 245, 170, 244, 165, 15, 120, 5, 124, 225, 3, 15, 120, 5, 148, 225, 3, + 15, 120, 5, 148, 225, 4, 219, 177, 17, 15, 120, 5, 245, 116, 225, 3, 15, + 120, 5, 245, 170, 225, 3, 15, 120, 5, 224, 82, 225, 3, 15, 120, 5, 225, + 43, 225, 3, 15, 120, 5, 246, 235, 225, 3, 15, 120, 5, 232, 31, 225, 3, + 15, 120, 5, 131, 224, 254, 15, 120, 5, 124, 224, 254, 15, 120, 5, 148, + 224, 254, 15, 120, 5, 148, 224, 255, 219, 177, 17, 15, 120, 5, 245, 116, + 224, 254, 15, 120, 5, 245, 170, 224, 254, 15, 120, 5, 225, 4, 27, 244, + 241, 88, 248, 202, 15, 120, 5, 225, 4, 27, 244, 241, 88, 233, 159, 15, + 120, 5, 131, 251, 225, 15, 120, 5, 124, 251, 225, 15, 120, 5, 148, 251, + 225, 15, 120, 5, 148, 251, 226, 219, 177, 17, 15, 120, 5, 245, 116, 251, + 225, 15, 120, 5, 245, 170, 251, 225, 15, 120, 5, 148, 219, 177, 245, 124, + 246, 132, 15, 120, 5, 148, 219, 177, 245, 124, 246, 129, 15, 120, 5, 245, + 116, 219, 177, 245, 124, 235, 47, 15, 120, 5, 245, 116, 219, 177, 245, + 124, 235, 45, 15, 120, 5, 245, 116, 219, 177, 245, 124, 235, 48, 60, 15, + 120, 5, 245, 116, 219, 177, 245, 124, 235, 48, 253, 204, 15, 120, 5, 224, + 82, 219, 177, 245, 124, 254, 4, 15, 120, 5, 225, 43, 219, 177, 245, 124, + 237, 230, 15, 120, 5, 225, 43, 219, 177, 245, 124, 237, 232, 60, 15, 120, + 5, 225, 43, 219, 177, 245, 124, 237, 232, 253, 204, 15, 120, 5, 246, 235, + 219, 177, 245, 124, 220, 26, 15, 120, 5, 246, 235, 219, 177, 245, 124, + 220, 25, 15, 120, 5, 232, 31, 219, 177, 245, 124, 237, 246, 15, 120, 5, + 232, 31, 219, 177, 245, 124, 237, 245, 15, 120, 5, 232, 31, 219, 177, + 245, 124, 237, 244, 15, 120, 5, 232, 31, 219, 177, 245, 124, 237, 247, + 60, 15, 120, 5, 124, 254, 8, 222, 59, 15, 120, 5, 148, 254, 8, 222, 59, + 15, 120, 5, 245, 116, 254, 8, 222, 59, 15, 120, 5, 245, 170, 254, 8, 222, + 59, 15, 120, 5, 224, 82, 254, 8, 222, 59, 15, 120, 5, 131, 252, 207, 15, + 120, 5, 124, 252, 207, 15, 120, 5, 148, 252, 207, 15, 120, 5, 245, 116, + 252, 207, 15, 120, 5, 245, 116, 252, 208, 219, 177, 17, 15, 120, 5, 245, + 170, 252, 207, 15, 120, 5, 245, 170, 252, 208, 219, 177, 17, 15, 120, 5, + 232, 40, 15, 120, 5, 232, 41, 15, 120, 5, 131, 246, 128, 15, 120, 5, 124, + 246, 128, 15, 120, 5, 131, 221, 252, 248, 202, 15, 120, 5, 124, 221, 250, + 248, 202, 15, 120, 5, 245, 170, 224, 72, 248, 202, 15, 120, 5, 131, 221, + 252, 219, 177, 245, 124, 60, 15, 120, 5, 124, 221, 250, 219, 177, 245, + 124, 60, 15, 120, 5, 131, 246, 232, 254, 7, 15, 120, 5, 131, 228, 90, + 254, 7, 15, 120, 5, 48, 253, 254, 131, 224, 73, 15, 120, 5, 48, 253, 254, + 131, 228, 89, 15, 228, 197, 5, 48, 253, 254, 218, 174, 248, 191, 15, 228, + 197, 5, 69, 250, 175, 15, 228, 197, 5, 249, 11, 250, 175, 15, 228, 197, + 5, 249, 11, 221, 86, 10, 11, 255, 140, 10, 11, 255, 139, 10, 11, 255, + 138, 10, 11, 255, 137, 10, 11, 255, 136, 10, 11, 255, 135, 10, 11, 255, + 134, 10, 11, 255, 133, 10, 11, 255, 132, 10, 11, 255, 131, 10, 11, 255, + 130, 10, 11, 255, 129, 10, 11, 255, 128, 10, 11, 255, 127, 10, 11, 255, + 126, 10, 11, 255, 125, 10, 11, 255, 124, 10, 11, 255, 123, 10, 11, 255, + 122, 10, 11, 255, 121, 10, 11, 255, 120, 10, 11, 255, 119, 10, 11, 255, + 118, 10, 11, 255, 117, 10, 11, 255, 116, 10, 11, 255, 115, 10, 11, 255, + 114, 10, 11, 255, 113, 10, 11, 255, 112, 10, 11, 255, 111, 10, 11, 255, + 110, 10, 11, 255, 109, 10, 11, 255, 108, 10, 11, 255, 107, 10, 11, 255, + 106, 10, 11, 255, 105, 10, 11, 255, 104, 10, 11, 255, 103, 10, 11, 255, + 102, 10, 11, 255, 101, 10, 11, 255, 100, 10, 11, 255, 99, 10, 11, 255, + 98, 10, 11, 255, 97, 10, 11, 255, 96, 10, 11, 255, 95, 10, 11, 255, 94, + 10, 11, 255, 93, 10, 11, 255, 92, 10, 11, 255, 91, 10, 11, 255, 90, 10, + 11, 255, 89, 10, 11, 255, 88, 10, 11, 255, 87, 10, 11, 255, 86, 10, 11, + 255, 85, 10, 11, 255, 84, 10, 11, 255, 83, 10, 11, 255, 82, 10, 11, 255, + 81, 10, 11, 255, 80, 10, 11, 255, 79, 10, 11, 255, 78, 10, 11, 255, 77, + 10, 11, 255, 76, 10, 11, 255, 75, 10, 11, 255, 74, 10, 11, 255, 73, 10, + 11, 255, 72, 10, 11, 255, 71, 10, 11, 255, 70, 10, 11, 255, 69, 10, 11, + 255, 68, 10, 11, 255, 67, 10, 11, 255, 66, 10, 11, 255, 65, 10, 11, 255, + 64, 10, 11, 255, 63, 10, 11, 255, 62, 10, 11, 255, 61, 10, 11, 253, 202, + 10, 11, 253, 200, 10, 11, 253, 198, 10, 11, 253, 196, 10, 11, 253, 194, + 10, 11, 253, 193, 10, 11, 253, 191, 10, 11, 253, 189, 10, 11, 253, 187, + 10, 11, 253, 185, 10, 11, 251, 198, 10, 11, 251, 197, 10, 11, 251, 196, + 10, 11, 251, 195, 10, 11, 251, 194, 10, 11, 251, 193, 10, 11, 251, 192, + 10, 11, 251, 191, 10, 11, 251, 190, 10, 11, 251, 189, 10, 11, 251, 188, + 10, 11, 251, 187, 10, 11, 251, 186, 10, 11, 251, 185, 10, 11, 251, 184, + 10, 11, 251, 183, 10, 11, 251, 182, 10, 11, 251, 181, 10, 11, 251, 180, + 10, 11, 251, 179, 10, 11, 251, 178, 10, 11, 251, 177, 10, 11, 251, 176, + 10, 11, 251, 175, 10, 11, 251, 174, 10, 11, 251, 173, 10, 11, 251, 172, + 10, 11, 251, 171, 10, 11, 250, 45, 10, 11, 250, 44, 10, 11, 250, 43, 10, + 11, 250, 42, 10, 11, 250, 41, 10, 11, 250, 40, 10, 11, 250, 39, 10, 11, + 250, 38, 10, 11, 250, 37, 10, 11, 250, 36, 10, 11, 250, 35, 10, 11, 250, + 34, 10, 11, 250, 33, 10, 11, 250, 32, 10, 11, 250, 31, 10, 11, 250, 30, + 10, 11, 250, 29, 10, 11, 250, 28, 10, 11, 250, 27, 10, 11, 250, 26, 10, + 11, 250, 25, 10, 11, 250, 24, 10, 11, 250, 23, 10, 11, 250, 22, 10, 11, + 250, 21, 10, 11, 250, 20, 10, 11, 250, 19, 10, 11, 250, 18, 10, 11, 250, + 17, 10, 11, 250, 16, 10, 11, 250, 15, 10, 11, 250, 14, 10, 11, 250, 13, + 10, 11, 250, 12, 10, 11, 250, 11, 10, 11, 250, 10, 10, 11, 250, 9, 10, + 11, 250, 8, 10, 11, 250, 7, 10, 11, 250, 6, 10, 11, 250, 5, 10, 11, 250, + 4, 10, 11, 250, 3, 10, 11, 250, 2, 10, 11, 250, 1, 10, 11, 250, 0, 10, + 11, 249, 255, 10, 11, 249, 254, 10, 11, 249, 253, 10, 11, 249, 252, 10, + 11, 249, 251, 10, 11, 249, 250, 10, 11, 249, 249, 10, 11, 249, 248, 10, + 11, 249, 247, 10, 11, 249, 246, 10, 11, 249, 245, 10, 11, 249, 244, 10, + 11, 249, 243, 10, 11, 249, 242, 10, 11, 249, 241, 10, 11, 249, 240, 10, + 11, 249, 239, 10, 11, 249, 238, 10, 11, 249, 237, 10, 11, 249, 236, 10, + 11, 249, 235, 10, 11, 249, 234, 10, 11, 249, 233, 10, 11, 249, 232, 10, + 11, 249, 231, 10, 11, 249, 230, 10, 11, 249, 229, 10, 11, 249, 228, 10, + 11, 249, 227, 10, 11, 249, 226, 10, 11, 249, 225, 10, 11, 249, 224, 10, + 11, 249, 223, 10, 11, 249, 222, 10, 11, 249, 221, 10, 11, 249, 220, 10, + 11, 249, 219, 10, 11, 249, 218, 10, 11, 249, 217, 10, 11, 249, 216, 10, + 11, 249, 215, 10, 11, 249, 214, 10, 11, 249, 213, 10, 11, 249, 212, 10, + 11, 249, 211, 10, 11, 249, 210, 10, 11, 247, 62, 10, 11, 247, 61, 10, 11, + 247, 60, 10, 11, 247, 59, 10, 11, 247, 58, 10, 11, 247, 57, 10, 11, 247, + 56, 10, 11, 247, 55, 10, 11, 247, 54, 10, 11, 247, 53, 10, 11, 247, 52, + 10, 11, 247, 51, 10, 11, 247, 50, 10, 11, 247, 49, 10, 11, 247, 48, 10, + 11, 247, 47, 10, 11, 247, 46, 10, 11, 247, 45, 10, 11, 247, 44, 10, 11, + 247, 43, 10, 11, 247, 42, 10, 11, 247, 41, 10, 11, 247, 40, 10, 11, 247, + 39, 10, 11, 247, 38, 10, 11, 247, 37, 10, 11, 247, 36, 10, 11, 247, 35, + 10, 11, 247, 34, 10, 11, 247, 33, 10, 11, 247, 32, 10, 11, 247, 31, 10, + 11, 247, 30, 10, 11, 247, 29, 10, 11, 247, 28, 10, 11, 247, 27, 10, 11, + 247, 26, 10, 11, 247, 25, 10, 11, 247, 24, 10, 11, 247, 23, 10, 11, 247, + 22, 10, 11, 247, 21, 10, 11, 247, 20, 10, 11, 247, 19, 10, 11, 246, 73, + 10, 11, 246, 72, 10, 11, 246, 71, 10, 11, 246, 70, 10, 11, 246, 69, 10, + 11, 246, 68, 10, 11, 246, 67, 10, 11, 246, 66, 10, 11, 246, 65, 10, 11, + 246, 64, 10, 11, 246, 63, 10, 11, 246, 62, 10, 11, 246, 61, 10, 11, 246, + 60, 10, 11, 246, 59, 10, 11, 246, 58, 10, 11, 246, 57, 10, 11, 246, 56, + 10, 11, 246, 55, 10, 11, 246, 54, 10, 11, 246, 53, 10, 11, 246, 52, 10, + 11, 246, 51, 10, 11, 246, 50, 10, 11, 246, 49, 10, 11, 246, 48, 10, 11, + 246, 47, 10, 11, 246, 46, 10, 11, 246, 45, 10, 11, 246, 44, 10, 11, 246, + 43, 10, 11, 246, 42, 10, 11, 246, 41, 10, 11, 246, 40, 10, 11, 246, 39, + 10, 11, 246, 38, 10, 11, 246, 37, 10, 11, 246, 36, 10, 11, 246, 35, 10, + 11, 246, 34, 10, 11, 246, 33, 10, 11, 246, 32, 10, 11, 246, 31, 10, 11, + 246, 30, 10, 11, 246, 29, 10, 11, 246, 28, 10, 11, 246, 27, 10, 11, 246, + 26, 10, 11, 246, 25, 10, 11, 246, 24, 10, 11, 246, 23, 10, 11, 246, 22, + 10, 11, 246, 21, 10, 11, 246, 20, 10, 11, 246, 19, 10, 11, 246, 18, 10, + 11, 246, 17, 10, 11, 246, 16, 10, 11, 246, 15, 10, 11, 246, 14, 10, 11, + 246, 13, 10, 11, 246, 12, 10, 11, 246, 11, 10, 11, 246, 10, 10, 11, 246, + 9, 10, 11, 245, 66, 10, 11, 245, 65, 10, 11, 245, 64, 10, 11, 245, 63, + 10, 11, 245, 62, 10, 11, 245, 61, 10, 11, 245, 60, 10, 11, 245, 59, 10, + 11, 245, 58, 10, 11, 245, 57, 10, 11, 245, 56, 10, 11, 245, 55, 10, 11, + 245, 54, 10, 11, 245, 53, 10, 11, 245, 52, 10, 11, 245, 51, 10, 11, 245, + 50, 10, 11, 245, 49, 10, 11, 245, 48, 10, 11, 245, 47, 10, 11, 245, 46, + 10, 11, 245, 45, 10, 11, 245, 44, 10, 11, 245, 43, 10, 11, 245, 42, 10, + 11, 245, 41, 10, 11, 245, 40, 10, 11, 245, 39, 10, 11, 245, 38, 10, 11, + 245, 37, 10, 11, 245, 36, 10, 11, 245, 35, 10, 11, 245, 34, 10, 11, 245, + 33, 10, 11, 245, 32, 10, 11, 245, 31, 10, 11, 245, 30, 10, 11, 245, 29, + 10, 11, 245, 28, 10, 11, 245, 27, 10, 11, 245, 26, 10, 11, 245, 25, 10, + 11, 245, 24, 10, 11, 245, 23, 10, 11, 245, 22, 10, 11, 245, 21, 10, 11, + 245, 20, 10, 11, 245, 19, 10, 11, 245, 18, 10, 11, 245, 17, 10, 11, 245, + 16, 10, 11, 245, 15, 10, 11, 245, 14, 10, 11, 245, 13, 10, 11, 245, 12, + 10, 11, 245, 11, 10, 11, 245, 10, 10, 11, 245, 9, 10, 11, 245, 8, 10, 11, + 245, 7, 10, 11, 245, 6, 10, 11, 245, 5, 10, 11, 245, 4, 10, 11, 245, 3, + 10, 11, 243, 223, 10, 11, 243, 222, 10, 11, 243, 221, 10, 11, 243, 220, + 10, 11, 243, 219, 10, 11, 243, 218, 10, 11, 243, 217, 10, 11, 243, 216, + 10, 11, 243, 215, 10, 11, 242, 91, 10, 11, 242, 90, 10, 11, 242, 89, 10, + 11, 242, 88, 10, 11, 242, 87, 10, 11, 242, 86, 10, 11, 242, 85, 10, 11, + 242, 84, 10, 11, 242, 83, 10, 11, 242, 82, 10, 11, 242, 81, 10, 11, 242, + 80, 10, 11, 242, 79, 10, 11, 242, 78, 10, 11, 242, 77, 10, 11, 242, 76, + 10, 11, 242, 75, 10, 11, 242, 74, 10, 11, 242, 73, 10, 11, 237, 16, 10, + 11, 237, 15, 10, 11, 237, 14, 10, 11, 237, 13, 10, 11, 237, 12, 10, 11, + 237, 11, 10, 11, 237, 10, 10, 11, 237, 9, 10, 11, 235, 199, 10, 11, 235, + 198, 10, 11, 235, 197, 10, 11, 235, 196, 10, 11, 235, 195, 10, 11, 235, + 194, 10, 11, 235, 193, 10, 11, 235, 192, 10, 11, 235, 191, 10, 11, 235, + 190, 10, 11, 234, 186, 10, 11, 234, 185, 10, 11, 234, 184, 10, 11, 234, + 183, 10, 11, 234, 182, 10, 11, 234, 181, 10, 11, 234, 180, 10, 11, 234, + 179, 10, 11, 234, 178, 10, 11, 234, 177, 10, 11, 234, 176, 10, 11, 234, + 175, 10, 11, 234, 174, 10, 11, 234, 173, 10, 11, 234, 172, 10, 11, 234, + 171, 10, 11, 234, 170, 10, 11, 234, 169, 10, 11, 234, 168, 10, 11, 234, + 167, 10, 11, 234, 166, 10, 11, 234, 165, 10, 11, 234, 164, 10, 11, 234, + 163, 10, 11, 234, 162, 10, 11, 234, 161, 10, 11, 234, 160, 10, 11, 234, + 159, 10, 11, 234, 158, 10, 11, 234, 157, 10, 11, 234, 156, 10, 11, 234, + 155, 10, 11, 234, 154, 10, 11, 234, 153, 10, 11, 234, 152, 10, 11, 234, + 151, 10, 11, 234, 150, 10, 11, 234, 149, 10, 11, 234, 148, 10, 11, 234, + 147, 10, 11, 234, 146, 10, 11, 234, 145, 10, 11, 234, 144, 10, 11, 234, + 143, 10, 11, 234, 142, 10, 11, 234, 141, 10, 11, 234, 140, 10, 11, 234, + 139, 10, 11, 234, 138, 10, 11, 234, 137, 10, 11, 234, 136, 10, 11, 234, + 135, 10, 11, 234, 134, 10, 11, 234, 133, 10, 11, 234, 132, 10, 11, 234, + 131, 10, 11, 234, 130, 10, 11, 234, 129, 10, 11, 234, 128, 10, 11, 234, + 127, 10, 11, 234, 126, 10, 11, 234, 125, 10, 11, 234, 124, 10, 11, 234, + 123, 10, 11, 234, 122, 10, 11, 234, 121, 10, 11, 233, 31, 10, 11, 233, + 30, 10, 11, 233, 29, 10, 11, 233, 28, 10, 11, 233, 27, 10, 11, 233, 26, + 10, 11, 233, 25, 10, 11, 233, 24, 10, 11, 233, 23, 10, 11, 233, 22, 10, + 11, 233, 21, 10, 11, 233, 20, 10, 11, 233, 19, 10, 11, 233, 18, 10, 11, + 233, 17, 10, 11, 233, 16, 10, 11, 233, 15, 10, 11, 233, 14, 10, 11, 233, + 13, 10, 11, 233, 12, 10, 11, 233, 11, 10, 11, 233, 10, 10, 11, 233, 9, + 10, 11, 233, 8, 10, 11, 233, 7, 10, 11, 233, 6, 10, 11, 233, 5, 10, 11, + 233, 4, 10, 11, 233, 3, 10, 11, 233, 2, 10, 11, 233, 1, 10, 11, 233, 0, + 10, 11, 232, 255, 10, 11, 232, 254, 10, 11, 232, 253, 10, 11, 232, 252, + 10, 11, 232, 251, 10, 11, 232, 250, 10, 11, 232, 249, 10, 11, 232, 248, + 10, 11, 232, 247, 10, 11, 232, 246, 10, 11, 232, 245, 10, 11, 232, 244, + 10, 11, 232, 243, 10, 11, 232, 242, 10, 11, 232, 241, 10, 11, 232, 240, + 10, 11, 232, 239, 10, 11, 231, 241, 10, 11, 231, 240, 10, 11, 231, 239, + 10, 11, 231, 238, 10, 11, 231, 237, 10, 11, 231, 236, 10, 11, 231, 235, + 10, 11, 231, 234, 10, 11, 231, 233, 10, 11, 231, 232, 10, 11, 231, 231, + 10, 11, 231, 230, 10, 11, 231, 229, 10, 11, 231, 228, 10, 11, 231, 227, + 10, 11, 231, 226, 10, 11, 231, 225, 10, 11, 231, 224, 10, 11, 231, 223, + 10, 11, 231, 222, 10, 11, 231, 221, 10, 11, 231, 220, 10, 11, 231, 143, + 10, 11, 231, 142, 10, 11, 231, 141, 10, 11, 231, 140, 10, 11, 231, 139, + 10, 11, 231, 138, 10, 11, 231, 137, 10, 11, 231, 136, 10, 11, 231, 135, + 10, 11, 231, 134, 10, 11, 231, 133, 10, 11, 231, 132, 10, 11, 231, 131, + 10, 11, 231, 130, 10, 11, 231, 129, 10, 11, 231, 128, 10, 11, 231, 127, + 10, 11, 231, 126, 10, 11, 231, 125, 10, 11, 231, 124, 10, 11, 231, 123, + 10, 11, 231, 122, 10, 11, 231, 121, 10, 11, 231, 120, 10, 11, 231, 119, + 10, 11, 231, 118, 10, 11, 231, 5, 10, 11, 231, 4, 10, 11, 231, 3, 10, 11, + 231, 2, 10, 11, 231, 1, 10, 11, 231, 0, 10, 11, 230, 255, 10, 11, 230, + 254, 10, 11, 230, 253, 10, 11, 230, 252, 10, 11, 230, 251, 10, 11, 230, + 250, 10, 11, 230, 249, 10, 11, 230, 248, 10, 11, 230, 247, 10, 11, 230, + 246, 10, 11, 230, 245, 10, 11, 230, 244, 10, 11, 230, 243, 10, 11, 230, + 242, 10, 11, 230, 241, 10, 11, 230, 240, 10, 11, 230, 239, 10, 11, 230, + 238, 10, 11, 230, 237, 10, 11, 230, 236, 10, 11, 230, 235, 10, 11, 230, + 234, 10, 11, 230, 233, 10, 11, 230, 232, 10, 11, 230, 231, 10, 11, 230, + 230, 10, 11, 230, 229, 10, 11, 230, 228, 10, 11, 230, 227, 10, 11, 230, + 226, 10, 11, 230, 225, 10, 11, 230, 224, 10, 11, 230, 223, 10, 11, 230, + 222, 10, 11, 230, 221, 10, 11, 230, 220, 10, 11, 230, 219, 10, 11, 230, + 218, 10, 11, 230, 217, 10, 11, 230, 216, 10, 11, 230, 215, 10, 11, 230, + 214, 10, 11, 230, 213, 10, 11, 230, 212, 10, 11, 230, 211, 10, 11, 230, + 210, 10, 11, 230, 209, 10, 11, 230, 208, 10, 11, 230, 207, 10, 11, 230, + 206, 10, 11, 230, 205, 10, 11, 230, 204, 10, 11, 230, 203, 10, 11, 230, + 202, 10, 11, 230, 201, 10, 11, 230, 200, 10, 11, 230, 199, 10, 11, 230, + 198, 10, 11, 230, 197, 10, 11, 230, 196, 10, 11, 230, 195, 10, 11, 230, + 194, 10, 11, 230, 193, 10, 11, 230, 192, 10, 11, 230, 191, 10, 11, 230, + 190, 10, 11, 230, 189, 10, 11, 230, 188, 10, 11, 230, 187, 10, 11, 230, + 58, 10, 11, 230, 57, 10, 11, 230, 56, 10, 11, 230, 55, 10, 11, 230, 54, + 10, 11, 230, 53, 10, 11, 230, 52, 10, 11, 230, 51, 10, 11, 230, 50, 10, + 11, 230, 49, 10, 11, 230, 48, 10, 11, 230, 47, 10, 11, 230, 46, 10, 11, + 228, 162, 10, 11, 228, 161, 10, 11, 228, 160, 10, 11, 228, 159, 10, 11, + 228, 158, 10, 11, 228, 157, 10, 11, 228, 156, 10, 11, 228, 37, 10, 11, + 228, 36, 10, 11, 228, 35, 10, 11, 228, 34, 10, 11, 228, 33, 10, 11, 228, + 32, 10, 11, 228, 31, 10, 11, 228, 30, 10, 11, 228, 29, 10, 11, 228, 28, + 10, 11, 228, 27, 10, 11, 228, 26, 10, 11, 228, 25, 10, 11, 228, 24, 10, + 11, 228, 23, 10, 11, 228, 22, 10, 11, 228, 21, 10, 11, 228, 20, 10, 11, + 228, 19, 10, 11, 228, 18, 10, 11, 228, 17, 10, 11, 228, 16, 10, 11, 228, + 15, 10, 11, 228, 14, 10, 11, 228, 13, 10, 11, 228, 12, 10, 11, 228, 11, + 10, 11, 228, 10, 10, 11, 228, 9, 10, 11, 228, 8, 10, 11, 228, 7, 10, 11, + 228, 6, 10, 11, 228, 5, 10, 11, 228, 4, 10, 11, 226, 232, 10, 11, 226, + 231, 10, 11, 226, 230, 10, 11, 226, 229, 10, 11, 226, 228, 10, 11, 226, + 227, 10, 11, 226, 226, 10, 11, 226, 225, 10, 11, 226, 224, 10, 11, 226, + 223, 10, 11, 226, 222, 10, 11, 226, 221, 10, 11, 226, 220, 10, 11, 226, + 219, 10, 11, 226, 218, 10, 11, 226, 217, 10, 11, 226, 216, 10, 11, 226, + 215, 10, 11, 226, 214, 10, 11, 226, 213, 10, 11, 226, 212, 10, 11, 226, + 211, 10, 11, 226, 210, 10, 11, 226, 209, 10, 11, 226, 208, 10, 11, 226, + 207, 10, 11, 226, 206, 10, 11, 226, 205, 10, 11, 226, 204, 10, 11, 226, + 203, 10, 11, 226, 202, 10, 11, 226, 201, 10, 11, 226, 200, 10, 11, 226, + 199, 10, 11, 226, 198, 10, 11, 226, 197, 10, 11, 226, 196, 10, 11, 226, + 195, 10, 11, 226, 194, 10, 11, 226, 193, 10, 11, 226, 192, 10, 11, 226, + 191, 10, 11, 226, 190, 10, 11, 226, 189, 10, 11, 226, 188, 10, 11, 226, + 187, 10, 11, 226, 186, 10, 11, 226, 185, 10, 11, 226, 184, 10, 11, 226, + 183, 10, 11, 226, 182, 10, 11, 226, 181, 10, 11, 226, 180, 10, 11, 226, + 179, 10, 11, 222, 200, 10, 11, 222, 199, 10, 11, 222, 198, 10, 11, 222, + 197, 10, 11, 222, 196, 10, 11, 222, 195, 10, 11, 222, 194, 10, 11, 222, + 193, 10, 11, 222, 192, 10, 11, 222, 191, 10, 11, 222, 190, 10, 11, 222, + 189, 10, 11, 222, 188, 10, 11, 222, 187, 10, 11, 222, 186, 10, 11, 222, + 185, 10, 11, 222, 184, 10, 11, 222, 183, 10, 11, 222, 182, 10, 11, 222, + 181, 10, 11, 222, 180, 10, 11, 222, 179, 10, 11, 222, 178, 10, 11, 222, + 177, 10, 11, 222, 176, 10, 11, 222, 175, 10, 11, 222, 174, 10, 11, 222, + 173, 10, 11, 222, 172, 10, 11, 222, 171, 10, 11, 222, 170, 10, 11, 222, + 169, 10, 11, 222, 168, 10, 11, 222, 167, 10, 11, 222, 166, 10, 11, 222, + 165, 10, 11, 222, 164, 10, 11, 222, 163, 10, 11, 222, 162, 10, 11, 222, + 161, 10, 11, 222, 160, 10, 11, 222, 159, 10, 11, 222, 158, 10, 11, 222, + 157, 10, 11, 220, 172, 10, 11, 220, 171, 10, 11, 220, 170, 10, 11, 220, + 169, 10, 11, 220, 168, 10, 11, 220, 167, 10, 11, 220, 166, 10, 11, 220, + 165, 10, 11, 220, 164, 10, 11, 220, 163, 10, 11, 220, 162, 10, 11, 220, + 161, 10, 11, 220, 160, 10, 11, 220, 159, 10, 11, 220, 158, 10, 11, 220, + 157, 10, 11, 220, 156, 10, 11, 220, 155, 10, 11, 220, 154, 10, 11, 220, + 153, 10, 11, 220, 152, 10, 11, 220, 151, 10, 11, 220, 150, 10, 11, 220, + 149, 10, 11, 220, 148, 10, 11, 220, 147, 10, 11, 220, 146, 10, 11, 220, + 145, 10, 11, 220, 144, 10, 11, 220, 143, 10, 11, 220, 142, 10, 11, 220, + 141, 10, 11, 220, 140, 10, 11, 220, 139, 10, 11, 220, 138, 10, 11, 220, + 137, 10, 11, 220, 136, 10, 11, 220, 135, 10, 11, 220, 134, 10, 11, 220, + 133, 10, 11, 220, 132, 10, 11, 220, 131, 10, 11, 220, 130, 10, 11, 220, + 129, 10, 11, 220, 128, 10, 11, 220, 127, 10, 11, 220, 126, 10, 11, 220, + 10, 10, 11, 220, 9, 10, 11, 220, 8, 10, 11, 220, 7, 10, 11, 220, 6, 10, + 11, 220, 5, 10, 11, 220, 4, 10, 11, 220, 3, 10, 11, 220, 2, 10, 11, 220, + 1, 10, 11, 220, 0, 10, 11, 219, 255, 10, 11, 219, 254, 10, 11, 219, 253, + 10, 11, 219, 252, 10, 11, 219, 251, 10, 11, 219, 250, 10, 11, 219, 249, + 10, 11, 219, 248, 10, 11, 219, 247, 10, 11, 219, 246, 10, 11, 219, 245, + 10, 11, 219, 244, 10, 11, 219, 243, 10, 11, 219, 242, 10, 11, 219, 241, + 10, 11, 219, 240, 10, 11, 219, 239, 10, 11, 219, 238, 10, 11, 219, 237, + 10, 11, 219, 236, 10, 11, 219, 235, 10, 11, 219, 234, 10, 11, 219, 233, + 10, 11, 219, 232, 10, 11, 219, 231, 10, 11, 219, 230, 10, 11, 219, 229, + 10, 11, 219, 228, 10, 11, 219, 227, 10, 11, 219, 226, 10, 11, 219, 225, + 10, 11, 219, 224, 10, 11, 219, 223, 10, 11, 219, 222, 10, 11, 219, 221, + 10, 11, 219, 220, 10, 11, 219, 219, 10, 11, 219, 218, 10, 11, 219, 217, + 10, 11, 219, 216, 10, 11, 219, 215, 10, 11, 219, 214, 10, 11, 219, 213, + 10, 11, 219, 212, 10, 11, 219, 211, 10, 11, 219, 210, 10, 11, 219, 209, + 10, 11, 219, 208, 10, 11, 219, 207, 10, 11, 219, 206, 10, 11, 219, 205, + 10, 11, 219, 204, 10, 11, 219, 203, 10, 11, 219, 202, 10, 11, 219, 201, + 10, 11, 219, 200, 10, 11, 219, 199, 10, 11, 219, 198, 10, 11, 219, 197, + 10, 11, 219, 196, 10, 11, 219, 195, 10, 11, 219, 194, 10, 11, 219, 193, + 10, 11, 219, 192, 10, 11, 219, 191, 10, 11, 219, 190, 10, 11, 219, 39, + 10, 11, 219, 38, 10, 11, 219, 37, 10, 11, 219, 36, 10, 11, 219, 35, 10, + 11, 219, 34, 10, 11, 219, 33, 10, 11, 219, 32, 10, 11, 219, 31, 10, 11, + 219, 30, 10, 11, 219, 29, 10, 11, 219, 28, 10, 11, 219, 27, 10, 11, 219, + 26, 10, 11, 219, 25, 10, 11, 219, 24, 10, 11, 219, 23, 10, 11, 219, 22, + 10, 11, 219, 21, 10, 11, 219, 20, 10, 11, 219, 19, 10, 11, 219, 18, 10, + 11, 219, 17, 10, 11, 219, 16, 10, 11, 219, 15, 10, 11, 219, 14, 10, 11, + 219, 13, 10, 11, 219, 12, 10, 11, 219, 11, 10, 11, 219, 10, 10, 11, 219, + 9, 10, 11, 219, 8, 10, 11, 218, 150, 10, 11, 218, 149, 10, 11, 218, 148, + 10, 11, 218, 147, 10, 11, 218, 146, 10, 11, 218, 145, 10, 11, 218, 144, + 10, 11, 218, 143, 10, 11, 218, 142, 10, 11, 218, 141, 10, 11, 218, 140, + 10, 11, 218, 139, 10, 11, 218, 88, 10, 11, 218, 87, 10, 11, 218, 86, 10, + 11, 218, 85, 10, 11, 218, 84, 10, 11, 218, 83, 10, 11, 218, 82, 10, 11, + 218, 81, 10, 11, 218, 80, 10, 11, 217, 156, 10, 11, 217, 155, 10, 11, + 217, 154, 10, 11, 217, 153, 10, 11, 217, 152, 10, 11, 217, 151, 10, 11, + 217, 150, 10, 11, 217, 149, 10, 11, 217, 148, 10, 11, 217, 147, 10, 11, + 217, 146, 10, 11, 217, 145, 10, 11, 217, 144, 10, 11, 217, 143, 10, 11, + 217, 142, 10, 11, 217, 141, 10, 11, 217, 140, 10, 11, 217, 139, 10, 11, + 217, 138, 10, 11, 217, 137, 10, 11, 217, 136, 10, 11, 217, 135, 10, 11, + 217, 134, 10, 11, 217, 133, 10, 11, 217, 132, 10, 11, 217, 131, 10, 11, + 217, 130, 10, 11, 217, 129, 10, 11, 217, 128, 10, 11, 217, 127, 10, 11, + 217, 126, 10, 11, 217, 125, 10, 11, 217, 124, 10, 11, 217, 123, 10, 11, + 217, 122, 10, 11, 217, 121, 10, 11, 217, 120, 10, 11, 217, 119, 10, 11, + 217, 118, 10, 11, 217, 117, 10, 11, 217, 116, 10, 11, 255, 57, 10, 11, + 255, 56, 10, 11, 255, 55, 10, 11, 255, 54, 10, 11, 255, 53, 10, 11, 255, + 52, 10, 11, 255, 51, 10, 11, 255, 50, 10, 11, 255, 49, 10, 11, 255, 48, + 10, 11, 255, 47, 10, 11, 255, 46, 10, 11, 255, 45, 10, 11, 255, 44, 10, + 11, 255, 43, 10, 11, 255, 42, 10, 11, 255, 41, 10, 11, 255, 40, 10, 11, + 255, 39, 10, 11, 255, 38, 10, 11, 255, 37, 10, 11, 255, 36, 10, 11, 255, + 35, 10, 11, 255, 34, 10, 11, 255, 33, 10, 11, 255, 32, 10, 11, 255, 31, + 10, 11, 255, 30, 10, 11, 255, 29, 10, 11, 255, 28, 10, 11, 255, 27, 10, + 11, 255, 26, 10, 11, 255, 25, 10, 11, 255, 24, 46, 26, 16, 228, 206, 46, + 26, 16, 249, 148, 46, 26, 16, 229, 163, 46, 26, 16, 230, 67, 246, 221, + 46, 26, 16, 230, 67, 248, 214, 46, 26, 16, 219, 181, 246, 221, 46, 26, + 16, 219, 181, 248, 214, 46, 26, 16, 236, 198, 46, 26, 16, 222, 217, 46, + 26, 16, 229, 235, 46, 26, 16, 217, 205, 46, 26, 16, 217, 206, 248, 214, + 46, 26, 16, 236, 12, 46, 26, 16, 254, 89, 246, 221, 46, 26, 16, 246, 90, + 246, 221, 46, 26, 16, 222, 73, 46, 26, 16, 236, 164, 46, 26, 16, 254, 80, + 46, 26, 16, 254, 81, 248, 214, 46, 26, 16, 222, 222, 46, 26, 16, 221, + 242, 46, 26, 16, 230, 148, 254, 47, 46, 26, 16, 244, 56, 254, 47, 46, 26, + 16, 228, 205, 46, 26, 16, 251, 62, 46, 26, 16, 219, 171, 46, 26, 16, 237, + 144, 254, 47, 46, 26, 16, 236, 166, 254, 47, 46, 26, 16, 236, 165, 254, + 47, 46, 26, 16, 226, 119, 46, 26, 16, 229, 226, 46, 26, 16, 223, 151, + 254, 83, 46, 26, 16, 230, 66, 254, 47, 46, 26, 16, 219, 180, 254, 47, 46, + 26, 16, 254, 84, 254, 47, 46, 26, 16, 254, 78, 46, 26, 16, 236, 65, 46, + 26, 16, 227, 157, 46, 26, 16, 229, 106, 254, 47, 46, 26, 16, 221, 175, + 46, 26, 16, 254, 129, 46, 26, 16, 226, 75, 46, 26, 16, 222, 225, 254, 47, + 46, 26, 16, 222, 225, 233, 239, 223, 149, 46, 26, 16, 230, 61, 254, 47, + 46, 26, 16, 222, 17, 46, 26, 16, 235, 97, 46, 26, 16, 247, 77, 46, 26, + 16, 221, 92, 46, 26, 16, 222, 52, 46, 26, 16, 236, 15, 46, 26, 16, 254, + 89, 246, 90, 232, 131, 46, 26, 16, 245, 93, 254, 47, 46, 26, 16, 237, + 234, 46, 26, 16, 221, 68, 254, 47, 46, 26, 16, 236, 201, 221, 67, 46, 26, + 16, 229, 182, 46, 26, 16, 228, 209, 46, 26, 16, 236, 42, 46, 26, 16, 251, + 6, 254, 47, 46, 26, 16, 227, 232, 46, 26, 16, 229, 238, 254, 47, 46, 26, + 16, 229, 236, 254, 47, 46, 26, 16, 242, 63, 46, 26, 16, 232, 217, 46, 26, + 16, 229, 148, 46, 26, 16, 236, 43, 254, 152, 46, 26, 16, 221, 68, 254, + 152, 46, 26, 16, 223, 132, 46, 26, 16, 244, 25, 46, 26, 16, 237, 144, + 232, 131, 46, 26, 16, 230, 148, 232, 131, 46, 26, 16, 230, 67, 232, 131, + 46, 26, 16, 229, 147, 46, 26, 16, 236, 29, 46, 26, 16, 229, 146, 46, 26, + 16, 236, 14, 46, 26, 16, 229, 183, 232, 131, 46, 26, 16, 236, 165, 232, + 132, 254, 109, 46, 26, 16, 236, 166, 232, 132, 254, 109, 46, 26, 16, 217, + 203, 46, 26, 16, 254, 81, 232, 131, 46, 26, 16, 254, 82, 222, 223, 232, + 131, 46, 26, 16, 217, 204, 46, 26, 16, 236, 13, 46, 26, 16, 246, 216, 46, + 26, 16, 251, 63, 46, 26, 16, 233, 168, 237, 143, 46, 26, 16, 219, 181, + 232, 131, 46, 26, 16, 229, 106, 232, 131, 46, 26, 16, 228, 210, 232, 131, + 46, 26, 16, 230, 145, 46, 26, 16, 254, 100, 46, 26, 16, 234, 195, 46, 26, + 16, 229, 236, 232, 131, 46, 26, 16, 229, 238, 232, 131, 46, 26, 16, 246, + 119, 229, 237, 46, 26, 16, 235, 206, 46, 26, 16, 254, 101, 46, 26, 16, + 221, 68, 232, 131, 46, 26, 16, 246, 219, 46, 26, 16, 222, 225, 232, 131, + 46, 26, 16, 222, 218, 46, 26, 16, 251, 6, 232, 131, 46, 26, 16, 246, 161, + 46, 26, 16, 226, 76, 232, 131, 46, 26, 16, 218, 124, 236, 65, 46, 26, 16, + 221, 65, 46, 26, 16, 228, 211, 46, 26, 16, 221, 69, 46, 26, 16, 221, 66, + 46, 26, 16, 228, 208, 46, 26, 16, 221, 64, 46, 26, 16, 228, 207, 46, 26, + 16, 244, 55, 46, 26, 16, 254, 41, 46, 26, 16, 246, 119, 254, 41, 46, 26, + 16, 230, 61, 232, 131, 46, 26, 16, 222, 16, 246, 127, 46, 26, 16, 222, + 16, 246, 89, 46, 26, 16, 222, 18, 254, 85, 46, 26, 16, 222, 11, 236, 244, + 254, 77, 46, 26, 16, 236, 200, 46, 26, 16, 246, 186, 46, 26, 16, 217, + 253, 236, 197, 46, 26, 16, 217, 253, 254, 109, 46, 26, 16, 223, 150, 46, + 26, 16, 236, 66, 254, 109, 46, 26, 16, 248, 215, 254, 47, 46, 26, 16, + 236, 16, 254, 47, 46, 26, 16, 236, 16, 254, 152, 46, 26, 16, 236, 16, + 232, 131, 46, 26, 16, 254, 84, 232, 131, 46, 26, 16, 254, 86, 46, 26, 16, + 248, 214, 46, 26, 16, 221, 77, 46, 26, 16, 222, 44, 46, 26, 16, 236, 33, + 46, 26, 16, 235, 102, 246, 182, 250, 255, 46, 26, 16, 235, 102, 247, 78, + 251, 0, 46, 26, 16, 235, 102, 221, 79, 251, 0, 46, 26, 16, 235, 102, 222, + 54, 251, 0, 46, 26, 16, 235, 102, 237, 229, 250, 255, 46, 26, 16, 244, + 56, 232, 132, 254, 109, 46, 26, 16, 244, 56, 229, 227, 254, 37, 46, 26, + 16, 244, 56, 229, 227, 249, 40, 46, 26, 16, 248, 238, 46, 26, 16, 248, + 239, 229, 227, 254, 38, 236, 197, 46, 26, 16, 248, 239, 229, 227, 254, + 38, 254, 109, 46, 26, 16, 248, 239, 229, 227, 249, 40, 46, 26, 16, 221, + 83, 46, 26, 16, 254, 42, 46, 26, 16, 237, 236, 46, 26, 16, 249, 3, 46, + 26, 16, 254, 204, 229, 23, 254, 43, 46, 26, 16, 254, 204, 254, 40, 46, + 26, 16, 254, 204, 254, 43, 46, 26, 16, 254, 204, 233, 234, 46, 26, 16, + 254, 204, 233, 242, 46, 26, 16, 254, 204, 244, 57, 46, 26, 16, 254, 204, + 244, 54, 46, 26, 16, 254, 204, 229, 23, 244, 57, 46, 26, 16, 234, 60, + 228, 216, 242, 61, 46, 26, 16, 234, 60, 254, 154, 228, 216, 242, 61, 46, + 26, 16, 234, 60, 249, 39, 242, 61, 46, 26, 16, 234, 60, 254, 154, 249, + 39, 242, 61, 46, 26, 16, 234, 60, 221, 72, 242, 61, 46, 26, 16, 234, 60, + 221, 84, 46, 26, 16, 234, 60, 222, 48, 242, 61, 46, 26, 16, 234, 60, 222, + 48, 235, 105, 242, 61, 46, 26, 16, 234, 60, 235, 105, 242, 61, 46, 26, + 16, 234, 60, 229, 55, 242, 61, 46, 26, 16, 237, 149, 222, 69, 242, 62, + 46, 26, 16, 254, 82, 222, 69, 242, 62, 46, 26, 16, 245, 244, 222, 45, 46, + 26, 16, 245, 244, 233, 126, 46, 26, 16, 245, 244, 248, 243, 46, 26, 16, + 234, 60, 219, 175, 242, 61, 46, 26, 16, 234, 60, 228, 215, 242, 61, 46, + 26, 16, 234, 60, 229, 55, 222, 48, 242, 61, 46, 26, 16, 244, 52, 233, 34, + 254, 85, 46, 26, 16, 244, 52, 233, 34, 248, 213, 46, 26, 16, 246, 195, + 236, 244, 245, 93, 219, 61, 46, 26, 16, 237, 235, 46, 26, 16, 237, 233, + 46, 26, 16, 245, 93, 254, 48, 249, 38, 242, 60, 46, 26, 16, 245, 93, 249, + 1, 187, 46, 26, 16, 245, 93, 249, 1, 232, 217, 46, 26, 16, 245, 93, 232, + 213, 242, 61, 46, 26, 16, 245, 93, 249, 1, 249, 15, 46, 26, 16, 245, 93, + 224, 61, 249, 0, 249, 15, 46, 26, 16, 245, 93, 249, 1, 236, 184, 46, 26, + 16, 245, 93, 249, 1, 217, 21, 46, 26, 16, 245, 93, 249, 1, 232, 63, 236, + 197, 46, 26, 16, 245, 93, 249, 1, 232, 63, 254, 109, 46, 26, 16, 245, 93, + 234, 91, 251, 1, 248, 243, 46, 26, 16, 245, 93, 234, 91, 251, 1, 233, + 126, 46, 26, 16, 245, 204, 224, 61, 251, 1, 219, 174, 46, 26, 16, 245, + 93, 224, 61, 251, 1, 222, 226, 46, 26, 16, 245, 93, 232, 133, 46, 26, 16, + 251, 2, 216, 253, 46, 26, 16, 251, 2, 236, 64, 46, 26, 16, 251, 2, 223, + 250, 46, 26, 16, 245, 93, 242, 107, 217, 252, 222, 49, 46, 26, 16, 245, + 93, 246, 196, 254, 102, 46, 26, 16, 217, 252, 221, 73, 46, 26, 16, 248, + 251, 221, 73, 46, 26, 16, 248, 251, 222, 49, 46, 26, 16, 248, 251, 254, + 87, 247, 78, 248, 161, 46, 26, 16, 248, 251, 233, 124, 222, 53, 248, 161, + 46, 26, 16, 248, 251, 248, 235, 246, 99, 248, 161, 46, 26, 16, 248, 251, + 221, 81, 230, 152, 248, 161, 46, 26, 16, 217, 252, 254, 87, 247, 78, 248, + 161, 46, 26, 16, 217, 252, 233, 124, 222, 53, 248, 161, 46, 26, 16, 217, + 252, 248, 235, 246, 99, 248, 161, 46, 26, 16, 217, 252, 221, 81, 230, + 152, 248, 161, 46, 26, 16, 244, 179, 248, 250, 46, 26, 16, 244, 179, 217, + 251, 46, 26, 16, 249, 2, 254, 87, 233, 169, 46, 26, 16, 249, 2, 254, 87, + 234, 8, 46, 26, 16, 249, 2, 248, 214, 46, 26, 16, 249, 2, 222, 9, 46, 26, + 16, 224, 117, 222, 9, 46, 26, 16, 224, 117, 222, 10, 248, 201, 46, 26, + 16, 224, 117, 222, 10, 221, 74, 46, 26, 16, 224, 117, 222, 10, 222, 42, + 46, 26, 16, 224, 117, 254, 17, 46, 26, 16, 224, 117, 254, 18, 248, 201, + 46, 26, 16, 224, 117, 254, 18, 221, 74, 46, 26, 16, 224, 117, 254, 18, + 222, 42, 46, 26, 16, 248, 236, 244, 161, 46, 26, 16, 248, 242, 230, 86, + 46, 26, 16, 223, 144, 46, 26, 16, 254, 34, 187, 46, 26, 16, 254, 34, 219, + 61, 46, 26, 16, 254, 34, 245, 0, 46, 26, 16, 254, 34, 249, 15, 46, 26, + 16, 254, 34, 236, 184, 46, 26, 16, 254, 34, 217, 21, 46, 26, 16, 254, 34, + 232, 62, 46, 26, 16, 236, 165, 232, 132, 233, 241, 46, 26, 16, 236, 166, + 232, 132, 233, 241, 46, 26, 16, 236, 165, 232, 132, 236, 197, 46, 26, 16, + 236, 166, 232, 132, 236, 197, 46, 26, 16, 236, 66, 236, 197, 46, 26, 16, + 244, 56, 232, 132, 236, 197, 26, 16, 224, 109, 252, 197, 26, 16, 51, 252, + 197, 26, 16, 39, 252, 197, 26, 16, 227, 160, 39, 252, 197, 26, 16, 249, + 145, 252, 197, 26, 16, 224, 192, 252, 197, 26, 16, 42, 227, 182, 55, 26, + 16, 45, 227, 182, 55, 26, 16, 227, 182, 248, 143, 26, 16, 249, 184, 226, + 79, 26, 16, 249, 208, 251, 141, 26, 16, 226, 79, 26, 16, 250, 180, 26, + 16, 227, 180, 245, 193, 26, 16, 227, 180, 245, 192, 26, 16, 227, 180, + 245, 191, 26, 16, 245, 210, 26, 16, 245, 211, 56, 26, 16, 252, 10, 78, + 26, 16, 251, 163, 26, 16, 252, 19, 26, 16, 115, 26, 16, 230, 136, 223, + 163, 26, 16, 220, 205, 223, 163, 26, 16, 221, 227, 223, 163, 26, 16, 245, + 115, 223, 163, 26, 16, 245, 169, 223, 163, 26, 16, 224, 81, 223, 163, 26, + 16, 224, 79, 245, 101, 26, 16, 245, 113, 245, 101, 26, 16, 245, 68, 250, + 207, 26, 16, 245, 68, 250, 208, 230, 88, 254, 145, 26, 16, 245, 68, 250, + 208, 230, 88, 252, 185, 26, 16, 251, 203, 250, 207, 26, 16, 246, 75, 250, + 207, 26, 16, 246, 75, 250, 208, 230, 88, 254, 145, 26, 16, 246, 75, 250, + 208, 230, 88, 252, 185, 26, 16, 247, 116, 250, 206, 26, 16, 247, 116, + 250, 205, 26, 16, 233, 85, 234, 24, 227, 168, 26, 16, 51, 225, 0, 26, 16, + 51, 245, 156, 26, 16, 245, 157, 220, 63, 26, 16, 245, 157, 247, 132, 26, + 16, 232, 205, 220, 63, 26, 16, 232, 205, 247, 132, 26, 16, 225, 1, 220, + 63, 26, 16, 225, 1, 247, 132, 26, 16, 228, 90, 145, 225, 0, 26, 16, 228, + 90, 145, 245, 156, 26, 16, 250, 166, 221, 177, 26, 16, 250, 69, 221, 177, + 26, 16, 230, 88, 254, 145, 26, 16, 230, 88, 252, 185, 26, 16, 228, 74, + 254, 145, 26, 16, 228, 74, 252, 185, 26, 16, 233, 88, 227, 168, 26, 16, + 218, 205, 227, 168, 26, 16, 144, 227, 168, 26, 16, 228, 90, 227, 168, 26, + 16, 246, 232, 227, 168, 26, 16, 224, 76, 227, 168, 26, 16, 221, 243, 227, + 168, 26, 16, 224, 68, 227, 168, 26, 16, 131, 242, 162, 220, 217, 227, + 168, 26, 16, 218, 152, 231, 178, 26, 16, 88, 231, 178, 26, 16, 250, 222, + 218, 152, 231, 178, 26, 16, 40, 231, 179, 218, 207, 26, 16, 40, 231, 179, + 252, 53, 26, 16, 221, 91, 231, 179, 108, 218, 207, 26, 16, 221, 91, 231, + 179, 108, 252, 53, 26, 16, 221, 91, 231, 179, 42, 218, 207, 26, 16, 221, + 91, 231, 179, 42, 252, 53, 26, 16, 221, 91, 231, 179, 45, 218, 207, 26, + 16, 221, 91, 231, 179, 45, 252, 53, 26, 16, 221, 91, 231, 179, 113, 218, + 207, 26, 16, 221, 91, 231, 179, 113, 252, 53, 26, 16, 221, 91, 231, 179, + 108, 45, 218, 207, 26, 16, 221, 91, 231, 179, 108, 45, 252, 53, 26, 16, + 233, 118, 231, 179, 218, 207, 26, 16, 233, 118, 231, 179, 252, 53, 26, + 16, 221, 88, 231, 179, 113, 218, 207, 26, 16, 221, 88, 231, 179, 113, + 252, 53, 26, 16, 229, 230, 231, 178, 26, 16, 219, 67, 231, 178, 26, 16, + 231, 179, 252, 53, 26, 16, 231, 111, 231, 178, 26, 16, 250, 185, 231, + 179, 218, 207, 26, 16, 250, 185, 231, 179, 252, 53, 26, 16, 252, 8, 26, + 16, 218, 205, 231, 180, 26, 16, 144, 231, 180, 26, 16, 228, 90, 231, 180, + 26, 16, 246, 232, 231, 180, 26, 16, 224, 76, 231, 180, 26, 16, 221, 243, + 231, 180, 26, 16, 224, 68, 231, 180, 26, 16, 131, 242, 162, 220, 217, + 231, 180, 26, 16, 36, 223, 146, 26, 16, 36, 223, 233, 223, 146, 26, 16, + 36, 221, 97, 26, 16, 36, 221, 96, 26, 16, 36, 221, 95, 26, 16, 245, 183, + 221, 97, 26, 16, 245, 183, 221, 96, 26, 16, 245, 183, 221, 95, 26, 16, + 36, 253, 230, 248, 145, 26, 16, 36, 245, 162, 26, 16, 36, 245, 161, 26, + 16, 36, 245, 160, 26, 16, 36, 245, 159, 26, 16, 36, 245, 158, 26, 16, + 252, 131, 252, 143, 26, 16, 246, 190, 252, 143, 26, 16, 252, 131, 221, + 200, 26, 16, 246, 190, 221, 200, 26, 16, 252, 131, 224, 44, 26, 16, 246, + 190, 224, 44, 26, 16, 252, 131, 229, 115, 26, 16, 246, 190, 229, 115, 26, + 16, 36, 255, 0, 26, 16, 36, 223, 165, 26, 16, 36, 222, 58, 26, 16, 36, + 223, 166, 26, 16, 36, 234, 71, 26, 16, 36, 234, 70, 26, 16, 36, 254, 255, + 26, 16, 36, 234, 240, 26, 16, 254, 25, 220, 63, 26, 16, 254, 25, 247, + 132, 26, 16, 36, 248, 158, 26, 16, 36, 227, 91, 26, 16, 36, 245, 150, 26, + 16, 36, 224, 40, 26, 16, 36, 252, 113, 26, 16, 36, 51, 221, 124, 26, 16, + 36, 221, 78, 221, 124, 26, 16, 227, 95, 26, 16, 223, 99, 26, 16, 217, + 157, 26, 16, 229, 107, 26, 16, 233, 231, 26, 16, 245, 121, 26, 16, 250, + 106, 26, 16, 249, 83, 26, 16, 244, 47, 231, 181, 224, 55, 26, 16, 244, + 47, 231, 181, 231, 205, 224, 55, 26, 16, 221, 109, 26, 16, 220, 237, 26, + 16, 237, 170, 220, 237, 26, 16, 220, 238, 224, 55, 26, 16, 220, 238, 220, + 63, 26, 16, 230, 99, 223, 119, 26, 16, 230, 99, 223, 116, 26, 16, 230, + 99, 223, 115, 26, 16, 230, 99, 223, 114, 26, 16, 230, 99, 223, 113, 26, + 16, 230, 99, 223, 112, 26, 16, 230, 99, 223, 111, 26, 16, 230, 99, 223, + 110, 26, 16, 230, 99, 223, 109, 26, 16, 230, 99, 223, 118, 26, 16, 230, + 99, 223, 117, 26, 16, 243, 169, 26, 16, 232, 140, 26, 16, 246, 190, 117, + 223, 140, 26, 16, 249, 77, 224, 55, 26, 16, 36, 113, 252, 24, 26, 16, 36, + 108, 252, 24, 26, 16, 36, 243, 178, 26, 16, 36, 224, 34, 229, 59, 26, 16, + 229, 195, 78, 26, 16, 229, 195, 108, 78, 26, 16, 144, 229, 195, 78, 26, + 16, 244, 74, 220, 63, 26, 16, 244, 74, 247, 132, 26, 16, 2, 245, 182, 26, + 16, 249, 168, 26, 16, 249, 169, 254, 157, 26, 16, 234, 46, 26, 16, 234, + 250, 26, 16, 252, 5, 26, 16, 225, 71, 218, 207, 26, 16, 225, 71, 252, 53, + 26, 16, 233, 157, 26, 16, 233, 158, 252, 53, 26, 16, 225, 65, 218, 207, + 26, 16, 225, 65, 252, 53, 26, 16, 245, 82, 218, 207, 26, 16, 245, 82, + 252, 53, 26, 16, 234, 251, 229, 167, 227, 168, 26, 16, 234, 251, 237, + 228, 227, 168, 26, 16, 252, 6, 227, 168, 26, 16, 225, 71, 227, 168, 26, + 16, 233, 158, 227, 168, 26, 16, 225, 65, 227, 168, 26, 16, 222, 67, 229, + 165, 250, 87, 228, 224, 229, 166, 26, 16, 222, 67, 229, 165, 250, 87, + 228, 224, 237, 227, 26, 16, 222, 67, 229, 165, 250, 87, 228, 224, 229, + 167, 248, 224, 26, 16, 222, 67, 237, 226, 250, 87, 228, 224, 229, 166, + 26, 16, 222, 67, 237, 226, 250, 87, 228, 224, 237, 227, 26, 16, 222, 67, + 237, 226, 250, 87, 228, 224, 237, 228, 248, 224, 26, 16, 222, 67, 237, + 226, 250, 87, 228, 224, 237, 228, 248, 223, 26, 16, 222, 67, 237, 226, + 250, 87, 228, 224, 237, 228, 248, 222, 26, 16, 250, 103, 26, 16, 244, 26, + 251, 203, 250, 207, 26, 16, 244, 26, 246, 75, 250, 207, 26, 16, 40, 253, + 204, 26, 16, 219, 81, 26, 16, 229, 35, 26, 16, 250, 200, 26, 16, 226, + 110, 26, 16, 250, 202, 26, 16, 221, 115, 26, 16, 229, 17, 26, 16, 229, + 18, 245, 152, 26, 16, 226, 111, 245, 152, 26, 16, 221, 116, 227, 166, 26, + 16, 229, 154, 223, 95, 23, 219, 71, 165, 223, 18, 23, 219, 71, 165, 223, + 7, 23, 219, 71, 165, 222, 253, 23, 219, 71, 165, 222, 246, 23, 219, 71, + 165, 222, 238, 23, 219, 71, 165, 222, 232, 23, 219, 71, 165, 222, 231, + 23, 219, 71, 165, 222, 230, 23, 219, 71, 165, 222, 229, 23, 219, 71, 165, + 223, 17, 23, 219, 71, 165, 223, 16, 23, 219, 71, 165, 223, 15, 23, 219, + 71, 165, 223, 14, 23, 219, 71, 165, 223, 13, 23, 219, 71, 165, 223, 12, + 23, 219, 71, 165, 223, 11, 23, 219, 71, 165, 223, 10, 23, 219, 71, 165, + 223, 9, 23, 219, 71, 165, 223, 8, 23, 219, 71, 165, 223, 6, 23, 219, 71, + 165, 223, 5, 23, 219, 71, 165, 223, 4, 23, 219, 71, 165, 223, 3, 23, 219, + 71, 165, 223, 2, 23, 219, 71, 165, 222, 237, 23, 219, 71, 165, 222, 236, + 23, 219, 71, 165, 222, 235, 23, 219, 71, 165, 222, 234, 23, 219, 71, 165, + 222, 233, 23, 237, 189, 165, 223, 18, 23, 237, 189, 165, 223, 7, 23, 237, + 189, 165, 222, 246, 23, 237, 189, 165, 222, 238, 23, 237, 189, 165, 222, + 231, 23, 237, 189, 165, 222, 230, 23, 237, 189, 165, 223, 16, 23, 237, + 189, 165, 223, 15, 23, 237, 189, 165, 223, 14, 23, 237, 189, 165, 223, + 13, 23, 237, 189, 165, 223, 10, 23, 237, 189, 165, 223, 9, 23, 237, 189, + 165, 223, 8, 23, 237, 189, 165, 223, 3, 23, 237, 189, 165, 223, 2, 23, + 237, 189, 165, 223, 1, 23, 237, 189, 165, 223, 0, 23, 237, 189, 165, 222, + 255, 23, 237, 189, 165, 222, 254, 23, 237, 189, 165, 222, 252, 23, 237, + 189, 165, 222, 251, 23, 237, 189, 165, 222, 250, 23, 237, 189, 165, 222, + 249, 23, 237, 189, 165, 222, 248, 23, 237, 189, 165, 222, 247, 23, 237, + 189, 165, 222, 245, 23, 237, 189, 165, 222, 244, 23, 237, 189, 165, 222, + 243, 23, 237, 189, 165, 222, 242, 23, 237, 189, 165, 222, 241, 23, 237, + 189, 165, 222, 240, 23, 237, 189, 165, 222, 239, 23, 237, 189, 165, 222, + 237, 23, 237, 189, 165, 222, 236, 23, 237, 189, 165, 222, 235, 23, 237, + 189, 165, 222, 234, 23, 237, 189, 165, 222, 233, 36, 23, 26, 221, 75, 36, + 23, 26, 222, 43, 36, 23, 26, 229, 174, 23, 26, 235, 101, 233, 125, 35, + 247, 8, 248, 237, 35, 243, 150, 247, 8, 248, 237, 35, 242, 165, 247, 8, + 248, 237, 35, 247, 7, 243, 151, 248, 237, 35, 247, 7, 242, 164, 248, 237, + 35, 247, 8, 159, 35, 251, 84, 159, 35, 245, 90, 250, 221, 159, 35, 233, + 150, 159, 35, 252, 192, 159, 35, 236, 181, 224, 43, 159, 35, 250, 133, + 159, 35, 254, 9, 159, 35, 230, 109, 159, 35, 252, 13, 230, 83, 159, 35, + 249, 79, 156, 248, 198, 159, 35, 248, 195, 159, 35, 217, 210, 159, 35, + 237, 217, 159, 35, 229, 180, 159, 35, 227, 215, 159, 35, 250, 143, 159, + 35, 242, 253, 252, 233, 159, 35, 219, 1, 159, 35, 245, 138, 159, 35, 254, + 236, 159, 35, 227, 190, 159, 35, 227, 172, 159, 35, 247, 6, 159, 35, 237, + 45, 159, 35, 250, 138, 159, 35, 246, 189, 159, 35, 247, 87, 159, 35, 251, + 58, 159, 35, 249, 85, 159, 35, 21, 227, 171, 159, 35, 230, 38, 159, 35, + 235, 104, 159, 35, 250, 195, 159, 35, 236, 101, 159, 35, 244, 211, 159, + 35, 223, 126, 159, 35, 228, 189, 159, 35, 245, 89, 159, 35, 227, 173, + 159, 35, 235, 134, 156, 233, 134, 159, 35, 227, 169, 159, 35, 244, 64, + 199, 234, 12, 159, 35, 246, 191, 159, 35, 223, 133, 159, 35, 244, 28, + 159, 35, 246, 184, 159, 35, 229, 210, 159, 35, 227, 85, 159, 35, 245, + 151, 159, 35, 219, 173, 156, 218, 244, 159, 35, 250, 146, 159, 35, 234, + 23, 159, 35, 246, 120, 159, 35, 220, 71, 159, 35, 248, 225, 159, 35, 250, + 197, 233, 105, 159, 35, 244, 13, 159, 35, 244, 212, 237, 223, 159, 35, + 234, 53, 159, 35, 254, 253, 159, 35, 246, 203, 159, 35, 247, 134, 159, + 35, 218, 242, 159, 35, 224, 106, 159, 35, 237, 196, 159, 35, 249, 51, + 159, 35, 249, 150, 159, 35, 248, 221, 159, 35, 246, 93, 159, 35, 225, 37, + 159, 35, 223, 135, 159, 35, 243, 180, 159, 35, 250, 162, 159, 35, 250, + 193, 159, 35, 245, 248, 159, 35, 254, 205, 159, 35, 250, 161, 159, 35, + 230, 139, 222, 23, 219, 155, 159, 35, 248, 245, 159, 35, 235, 180, 159, + 35, 245, 118, 250, 112, 227, 69, 220, 73, 20, 107, 250, 112, 227, 69, + 220, 73, 20, 103, 250, 112, 227, 69, 220, 73, 20, 160, 250, 112, 227, 69, + 220, 73, 20, 154, 250, 112, 227, 69, 220, 73, 20, 174, 250, 112, 227, 69, + 220, 73, 20, 182, 250, 112, 227, 69, 220, 73, 20, 191, 250, 112, 227, 69, + 220, 73, 20, 185, 250, 112, 227, 69, 220, 73, 20, 190, 250, 112, 227, 69, + 222, 63, 20, 107, 250, 112, 227, 69, 222, 63, 20, 103, 250, 112, 227, 69, + 222, 63, 20, 160, 250, 112, 227, 69, 222, 63, 20, 154, 250, 112, 227, 69, + 222, 63, 20, 174, 250, 112, 227, 69, 222, 63, 20, 182, 250, 112, 227, 69, + 222, 63, 20, 191, 250, 112, 227, 69, 222, 63, 20, 185, 250, 112, 227, 69, + 222, 63, 20, 190, 14, 21, 6, 60, 14, 21, 6, 253, 204, 14, 21, 6, 251, + 202, 14, 21, 6, 250, 46, 14, 21, 6, 73, 14, 21, 6, 246, 74, 14, 21, 6, + 245, 67, 14, 21, 6, 243, 225, 14, 21, 6, 72, 14, 21, 6, 237, 126, 14, 21, + 6, 237, 17, 14, 21, 6, 153, 14, 21, 6, 189, 14, 21, 6, 207, 14, 21, 6, + 74, 14, 21, 6, 230, 59, 14, 21, 6, 228, 163, 14, 21, 6, 152, 14, 21, 6, + 198, 14, 21, 6, 222, 201, 14, 21, 6, 68, 14, 21, 6, 216, 216, 14, 21, 6, + 219, 40, 14, 21, 6, 218, 151, 14, 21, 6, 218, 90, 14, 21, 6, 217, 157, + 14, 21, 3, 60, 14, 21, 3, 253, 204, 14, 21, 3, 251, 202, 14, 21, 3, 250, + 46, 14, 21, 3, 73, 14, 21, 3, 246, 74, 14, 21, 3, 245, 67, 14, 21, 3, + 243, 225, 14, 21, 3, 72, 14, 21, 3, 237, 126, 14, 21, 3, 237, 17, 14, 21, + 3, 153, 14, 21, 3, 189, 14, 21, 3, 207, 14, 21, 3, 74, 14, 21, 3, 230, + 59, 14, 21, 3, 228, 163, 14, 21, 3, 152, 14, 21, 3, 198, 14, 21, 3, 222, + 201, 14, 21, 3, 68, 14, 21, 3, 216, 216, 14, 21, 3, 219, 40, 14, 21, 3, + 218, 151, 14, 21, 3, 218, 90, 14, 21, 3, 217, 157, 14, 30, 6, 60, 14, 30, + 6, 253, 204, 14, 30, 6, 251, 202, 14, 30, 6, 250, 46, 14, 30, 6, 73, 14, + 30, 6, 246, 74, 14, 30, 6, 245, 67, 14, 30, 6, 243, 225, 14, 30, 6, 72, + 14, 30, 6, 237, 126, 14, 30, 6, 237, 17, 14, 30, 6, 153, 14, 30, 6, 189, + 14, 30, 6, 207, 14, 30, 6, 74, 14, 30, 6, 230, 59, 14, 30, 6, 228, 163, + 14, 30, 6, 152, 14, 30, 6, 198, 14, 30, 6, 222, 201, 14, 30, 6, 68, 14, + 30, 6, 216, 216, 14, 30, 6, 219, 40, 14, 30, 6, 218, 151, 14, 30, 6, 218, + 90, 14, 30, 6, 217, 157, 14, 30, 3, 60, 14, 30, 3, 253, 204, 14, 30, 3, + 251, 202, 14, 30, 3, 250, 46, 14, 30, 3, 73, 14, 30, 3, 246, 74, 14, 30, + 3, 245, 67, 14, 30, 3, 72, 14, 30, 3, 237, 126, 14, 30, 3, 237, 17, 14, + 30, 3, 153, 14, 30, 3, 189, 14, 30, 3, 207, 14, 30, 3, 74, 14, 30, 3, + 230, 59, 14, 30, 3, 228, 163, 14, 30, 3, 152, 14, 30, 3, 198, 14, 30, 3, + 222, 201, 14, 30, 3, 68, 14, 30, 3, 216, 216, 14, 30, 3, 219, 40, 14, 30, + 3, 218, 151, 14, 30, 3, 218, 90, 14, 30, 3, 217, 157, 14, 21, 30, 6, 60, + 14, 21, 30, 6, 253, 204, 14, 21, 30, 6, 251, 202, 14, 21, 30, 6, 250, 46, + 14, 21, 30, 6, 73, 14, 21, 30, 6, 246, 74, 14, 21, 30, 6, 245, 67, 14, + 21, 30, 6, 243, 225, 14, 21, 30, 6, 72, 14, 21, 30, 6, 237, 126, 14, 21, + 30, 6, 237, 17, 14, 21, 30, 6, 153, 14, 21, 30, 6, 189, 14, 21, 30, 6, + 207, 14, 21, 30, 6, 74, 14, 21, 30, 6, 230, 59, 14, 21, 30, 6, 228, 163, + 14, 21, 30, 6, 152, 14, 21, 30, 6, 198, 14, 21, 30, 6, 222, 201, 14, 21, + 30, 6, 68, 14, 21, 30, 6, 216, 216, 14, 21, 30, 6, 219, 40, 14, 21, 30, + 6, 218, 151, 14, 21, 30, 6, 218, 90, 14, 21, 30, 6, 217, 157, 14, 21, 30, + 3, 60, 14, 21, 30, 3, 253, 204, 14, 21, 30, 3, 251, 202, 14, 21, 30, 3, + 250, 46, 14, 21, 30, 3, 73, 14, 21, 30, 3, 246, 74, 14, 21, 30, 3, 245, + 67, 14, 21, 30, 3, 243, 225, 14, 21, 30, 3, 72, 14, 21, 30, 3, 237, 126, + 14, 21, 30, 3, 237, 17, 14, 21, 30, 3, 153, 14, 21, 30, 3, 189, 14, 21, + 30, 3, 207, 14, 21, 30, 3, 74, 14, 21, 30, 3, 230, 59, 14, 21, 30, 3, + 228, 163, 14, 21, 30, 3, 152, 14, 21, 30, 3, 198, 14, 21, 30, 3, 222, + 201, 14, 21, 30, 3, 68, 14, 21, 30, 3, 216, 216, 14, 21, 30, 3, 219, 40, + 14, 21, 30, 3, 218, 151, 14, 21, 30, 3, 218, 90, 14, 21, 30, 3, 217, 157, + 14, 102, 6, 60, 14, 102, 6, 251, 202, 14, 102, 6, 250, 46, 14, 102, 6, + 245, 67, 14, 102, 6, 237, 126, 14, 102, 6, 237, 17, 14, 102, 6, 207, 14, + 102, 6, 74, 14, 102, 6, 230, 59, 14, 102, 6, 228, 163, 14, 102, 6, 198, + 14, 102, 6, 222, 201, 14, 102, 6, 68, 14, 102, 6, 216, 216, 14, 102, 6, + 219, 40, 14, 102, 6, 218, 151, 14, 102, 6, 218, 90, 14, 102, 6, 217, 157, + 14, 102, 3, 60, 14, 102, 3, 253, 204, 14, 102, 3, 251, 202, 14, 102, 3, + 250, 46, 14, 102, 3, 246, 74, 14, 102, 3, 243, 225, 14, 102, 3, 72, 14, + 102, 3, 237, 126, 14, 102, 3, 237, 17, 14, 102, 3, 153, 14, 102, 3, 189, + 14, 102, 3, 207, 14, 102, 3, 230, 59, 14, 102, 3, 228, 163, 14, 102, 3, + 152, 14, 102, 3, 198, 14, 102, 3, 222, 201, 14, 102, 3, 68, 14, 102, 3, + 216, 216, 14, 102, 3, 219, 40, 14, 102, 3, 218, 151, 14, 102, 3, 218, 90, + 14, 102, 3, 217, 157, 14, 21, 102, 6, 60, 14, 21, 102, 6, 253, 204, 14, + 21, 102, 6, 251, 202, 14, 21, 102, 6, 250, 46, 14, 21, 102, 6, 73, 14, + 21, 102, 6, 246, 74, 14, 21, 102, 6, 245, 67, 14, 21, 102, 6, 243, 225, + 14, 21, 102, 6, 72, 14, 21, 102, 6, 237, 126, 14, 21, 102, 6, 237, 17, + 14, 21, 102, 6, 153, 14, 21, 102, 6, 189, 14, 21, 102, 6, 207, 14, 21, + 102, 6, 74, 14, 21, 102, 6, 230, 59, 14, 21, 102, 6, 228, 163, 14, 21, + 102, 6, 152, 14, 21, 102, 6, 198, 14, 21, 102, 6, 222, 201, 14, 21, 102, + 6, 68, 14, 21, 102, 6, 216, 216, 14, 21, 102, 6, 219, 40, 14, 21, 102, 6, + 218, 151, 14, 21, 102, 6, 218, 90, 14, 21, 102, 6, 217, 157, 14, 21, 102, + 3, 60, 14, 21, 102, 3, 253, 204, 14, 21, 102, 3, 251, 202, 14, 21, 102, + 3, 250, 46, 14, 21, 102, 3, 73, 14, 21, 102, 3, 246, 74, 14, 21, 102, 3, + 245, 67, 14, 21, 102, 3, 243, 225, 14, 21, 102, 3, 72, 14, 21, 102, 3, + 237, 126, 14, 21, 102, 3, 237, 17, 14, 21, 102, 3, 153, 14, 21, 102, 3, + 189, 14, 21, 102, 3, 207, 14, 21, 102, 3, 74, 14, 21, 102, 3, 230, 59, + 14, 21, 102, 3, 228, 163, 14, 21, 102, 3, 152, 14, 21, 102, 3, 198, 14, + 21, 102, 3, 222, 201, 14, 21, 102, 3, 68, 14, 21, 102, 3, 216, 216, 14, + 21, 102, 3, 219, 40, 14, 21, 102, 3, 218, 151, 14, 21, 102, 3, 218, 90, + 14, 21, 102, 3, 217, 157, 14, 121, 6, 60, 14, 121, 6, 253, 204, 14, 121, + 6, 250, 46, 14, 121, 6, 73, 14, 121, 6, 246, 74, 14, 121, 6, 245, 67, 14, + 121, 6, 237, 126, 14, 121, 6, 237, 17, 14, 121, 6, 153, 14, 121, 6, 189, + 14, 121, 6, 207, 14, 121, 6, 74, 14, 121, 6, 230, 59, 14, 121, 6, 228, + 163, 14, 121, 6, 198, 14, 121, 6, 222, 201, 14, 121, 6, 68, 14, 121, 6, + 216, 216, 14, 121, 6, 219, 40, 14, 121, 6, 218, 151, 14, 121, 6, 218, 90, + 14, 121, 3, 60, 14, 121, 3, 253, 204, 14, 121, 3, 251, 202, 14, 121, 3, + 250, 46, 14, 121, 3, 73, 14, 121, 3, 246, 74, 14, 121, 3, 245, 67, 14, + 121, 3, 243, 225, 14, 121, 3, 72, 14, 121, 3, 237, 126, 14, 121, 3, 237, + 17, 14, 121, 3, 153, 14, 121, 3, 189, 14, 121, 3, 207, 14, 121, 3, 74, + 14, 121, 3, 230, 59, 14, 121, 3, 228, 163, 14, 121, 3, 152, 14, 121, 3, + 198, 14, 121, 3, 222, 201, 14, 121, 3, 68, 14, 121, 3, 216, 216, 14, 121, + 3, 219, 40, 14, 121, 3, 218, 151, 14, 121, 3, 218, 90, 14, 121, 3, 217, + 157, 14, 173, 6, 60, 14, 173, 6, 253, 204, 14, 173, 6, 250, 46, 14, 173, + 6, 73, 14, 173, 6, 246, 74, 14, 173, 6, 245, 67, 14, 173, 6, 72, 14, 173, + 6, 237, 126, 14, 173, 6, 237, 17, 14, 173, 6, 153, 14, 173, 6, 189, 14, + 173, 6, 74, 14, 173, 6, 198, 14, 173, 6, 222, 201, 14, 173, 6, 68, 14, + 173, 6, 216, 216, 14, 173, 6, 219, 40, 14, 173, 6, 218, 151, 14, 173, 6, + 218, 90, 14, 173, 3, 60, 14, 173, 3, 253, 204, 14, 173, 3, 251, 202, 14, + 173, 3, 250, 46, 14, 173, 3, 73, 14, 173, 3, 246, 74, 14, 173, 3, 245, + 67, 14, 173, 3, 243, 225, 14, 173, 3, 72, 14, 173, 3, 237, 126, 14, 173, + 3, 237, 17, 14, 173, 3, 153, 14, 173, 3, 189, 14, 173, 3, 207, 14, 173, + 3, 74, 14, 173, 3, 230, 59, 14, 173, 3, 228, 163, 14, 173, 3, 152, 14, + 173, 3, 198, 14, 173, 3, 222, 201, 14, 173, 3, 68, 14, 173, 3, 216, 216, + 14, 173, 3, 219, 40, 14, 173, 3, 218, 151, 14, 173, 3, 218, 90, 14, 173, + 3, 217, 157, 14, 21, 121, 6, 60, 14, 21, 121, 6, 253, 204, 14, 21, 121, + 6, 251, 202, 14, 21, 121, 6, 250, 46, 14, 21, 121, 6, 73, 14, 21, 121, 6, + 246, 74, 14, 21, 121, 6, 245, 67, 14, 21, 121, 6, 243, 225, 14, 21, 121, + 6, 72, 14, 21, 121, 6, 237, 126, 14, 21, 121, 6, 237, 17, 14, 21, 121, 6, + 153, 14, 21, 121, 6, 189, 14, 21, 121, 6, 207, 14, 21, 121, 6, 74, 14, + 21, 121, 6, 230, 59, 14, 21, 121, 6, 228, 163, 14, 21, 121, 6, 152, 14, + 21, 121, 6, 198, 14, 21, 121, 6, 222, 201, 14, 21, 121, 6, 68, 14, 21, + 121, 6, 216, 216, 14, 21, 121, 6, 219, 40, 14, 21, 121, 6, 218, 151, 14, + 21, 121, 6, 218, 90, 14, 21, 121, 6, 217, 157, 14, 21, 121, 3, 60, 14, + 21, 121, 3, 253, 204, 14, 21, 121, 3, 251, 202, 14, 21, 121, 3, 250, 46, + 14, 21, 121, 3, 73, 14, 21, 121, 3, 246, 74, 14, 21, 121, 3, 245, 67, 14, + 21, 121, 3, 243, 225, 14, 21, 121, 3, 72, 14, 21, 121, 3, 237, 126, 14, + 21, 121, 3, 237, 17, 14, 21, 121, 3, 153, 14, 21, 121, 3, 189, 14, 21, + 121, 3, 207, 14, 21, 121, 3, 74, 14, 21, 121, 3, 230, 59, 14, 21, 121, 3, + 228, 163, 14, 21, 121, 3, 152, 14, 21, 121, 3, 198, 14, 21, 121, 3, 222, + 201, 14, 21, 121, 3, 68, 14, 21, 121, 3, 216, 216, 14, 21, 121, 3, 219, + 40, 14, 21, 121, 3, 218, 151, 14, 21, 121, 3, 218, 90, 14, 21, 121, 3, + 217, 157, 14, 33, 6, 60, 14, 33, 6, 253, 204, 14, 33, 6, 251, 202, 14, + 33, 6, 250, 46, 14, 33, 6, 73, 14, 33, 6, 246, 74, 14, 33, 6, 245, 67, + 14, 33, 6, 243, 225, 14, 33, 6, 72, 14, 33, 6, 237, 126, 14, 33, 6, 237, + 17, 14, 33, 6, 153, 14, 33, 6, 189, 14, 33, 6, 207, 14, 33, 6, 74, 14, + 33, 6, 230, 59, 14, 33, 6, 228, 163, 14, 33, 6, 152, 14, 33, 6, 198, 14, + 33, 6, 222, 201, 14, 33, 6, 68, 14, 33, 6, 216, 216, 14, 33, 6, 219, 40, + 14, 33, 6, 218, 151, 14, 33, 6, 218, 90, 14, 33, 6, 217, 157, 14, 33, 3, + 60, 14, 33, 3, 253, 204, 14, 33, 3, 251, 202, 14, 33, 3, 250, 46, 14, 33, + 3, 73, 14, 33, 3, 246, 74, 14, 33, 3, 245, 67, 14, 33, 3, 243, 225, 14, + 33, 3, 72, 14, 33, 3, 237, 126, 14, 33, 3, 237, 17, 14, 33, 3, 153, 14, + 33, 3, 189, 14, 33, 3, 207, 14, 33, 3, 74, 14, 33, 3, 230, 59, 14, 33, 3, + 228, 163, 14, 33, 3, 152, 14, 33, 3, 198, 14, 33, 3, 222, 201, 14, 33, 3, + 68, 14, 33, 3, 216, 216, 14, 33, 3, 219, 40, 14, 33, 3, 218, 151, 14, 33, + 3, 218, 90, 14, 33, 3, 217, 157, 14, 33, 21, 6, 60, 14, 33, 21, 6, 253, + 204, 14, 33, 21, 6, 251, 202, 14, 33, 21, 6, 250, 46, 14, 33, 21, 6, 73, + 14, 33, 21, 6, 246, 74, 14, 33, 21, 6, 245, 67, 14, 33, 21, 6, 243, 225, + 14, 33, 21, 6, 72, 14, 33, 21, 6, 237, 126, 14, 33, 21, 6, 237, 17, 14, + 33, 21, 6, 153, 14, 33, 21, 6, 189, 14, 33, 21, 6, 207, 14, 33, 21, 6, + 74, 14, 33, 21, 6, 230, 59, 14, 33, 21, 6, 228, 163, 14, 33, 21, 6, 152, + 14, 33, 21, 6, 198, 14, 33, 21, 6, 222, 201, 14, 33, 21, 6, 68, 14, 33, + 21, 6, 216, 216, 14, 33, 21, 6, 219, 40, 14, 33, 21, 6, 218, 151, 14, 33, + 21, 6, 218, 90, 14, 33, 21, 6, 217, 157, 14, 33, 21, 3, 60, 14, 33, 21, + 3, 253, 204, 14, 33, 21, 3, 251, 202, 14, 33, 21, 3, 250, 46, 14, 33, 21, + 3, 73, 14, 33, 21, 3, 246, 74, 14, 33, 21, 3, 245, 67, 14, 33, 21, 3, + 243, 225, 14, 33, 21, 3, 72, 14, 33, 21, 3, 237, 126, 14, 33, 21, 3, 237, + 17, 14, 33, 21, 3, 153, 14, 33, 21, 3, 189, 14, 33, 21, 3, 207, 14, 33, + 21, 3, 74, 14, 33, 21, 3, 230, 59, 14, 33, 21, 3, 228, 163, 14, 33, 21, + 3, 152, 14, 33, 21, 3, 198, 14, 33, 21, 3, 222, 201, 14, 33, 21, 3, 68, + 14, 33, 21, 3, 216, 216, 14, 33, 21, 3, 219, 40, 14, 33, 21, 3, 218, 151, + 14, 33, 21, 3, 218, 90, 14, 33, 21, 3, 217, 157, 14, 33, 30, 6, 60, 14, + 33, 30, 6, 253, 204, 14, 33, 30, 6, 251, 202, 14, 33, 30, 6, 250, 46, 14, + 33, 30, 6, 73, 14, 33, 30, 6, 246, 74, 14, 33, 30, 6, 245, 67, 14, 33, + 30, 6, 243, 225, 14, 33, 30, 6, 72, 14, 33, 30, 6, 237, 126, 14, 33, 30, + 6, 237, 17, 14, 33, 30, 6, 153, 14, 33, 30, 6, 189, 14, 33, 30, 6, 207, + 14, 33, 30, 6, 74, 14, 33, 30, 6, 230, 59, 14, 33, 30, 6, 228, 163, 14, + 33, 30, 6, 152, 14, 33, 30, 6, 198, 14, 33, 30, 6, 222, 201, 14, 33, 30, + 6, 68, 14, 33, 30, 6, 216, 216, 14, 33, 30, 6, 219, 40, 14, 33, 30, 6, + 218, 151, 14, 33, 30, 6, 218, 90, 14, 33, 30, 6, 217, 157, 14, 33, 30, 3, + 60, 14, 33, 30, 3, 253, 204, 14, 33, 30, 3, 251, 202, 14, 33, 30, 3, 250, + 46, 14, 33, 30, 3, 73, 14, 33, 30, 3, 246, 74, 14, 33, 30, 3, 245, 67, + 14, 33, 30, 3, 243, 225, 14, 33, 30, 3, 72, 14, 33, 30, 3, 237, 126, 14, + 33, 30, 3, 237, 17, 14, 33, 30, 3, 153, 14, 33, 30, 3, 189, 14, 33, 30, + 3, 207, 14, 33, 30, 3, 74, 14, 33, 30, 3, 230, 59, 14, 33, 30, 3, 228, + 163, 14, 33, 30, 3, 152, 14, 33, 30, 3, 198, 14, 33, 30, 3, 222, 201, 14, + 33, 30, 3, 68, 14, 33, 30, 3, 216, 216, 14, 33, 30, 3, 219, 40, 14, 33, + 30, 3, 218, 151, 14, 33, 30, 3, 218, 90, 14, 33, 30, 3, 217, 157, 14, 33, + 21, 30, 6, 60, 14, 33, 21, 30, 6, 253, 204, 14, 33, 21, 30, 6, 251, 202, + 14, 33, 21, 30, 6, 250, 46, 14, 33, 21, 30, 6, 73, 14, 33, 21, 30, 6, + 246, 74, 14, 33, 21, 30, 6, 245, 67, 14, 33, 21, 30, 6, 243, 225, 14, 33, + 21, 30, 6, 72, 14, 33, 21, 30, 6, 237, 126, 14, 33, 21, 30, 6, 237, 17, + 14, 33, 21, 30, 6, 153, 14, 33, 21, 30, 6, 189, 14, 33, 21, 30, 6, 207, + 14, 33, 21, 30, 6, 74, 14, 33, 21, 30, 6, 230, 59, 14, 33, 21, 30, 6, + 228, 163, 14, 33, 21, 30, 6, 152, 14, 33, 21, 30, 6, 198, 14, 33, 21, 30, + 6, 222, 201, 14, 33, 21, 30, 6, 68, 14, 33, 21, 30, 6, 216, 216, 14, 33, + 21, 30, 6, 219, 40, 14, 33, 21, 30, 6, 218, 151, 14, 33, 21, 30, 6, 218, + 90, 14, 33, 21, 30, 6, 217, 157, 14, 33, 21, 30, 3, 60, 14, 33, 21, 30, + 3, 253, 204, 14, 33, 21, 30, 3, 251, 202, 14, 33, 21, 30, 3, 250, 46, 14, + 33, 21, 30, 3, 73, 14, 33, 21, 30, 3, 246, 74, 14, 33, 21, 30, 3, 245, + 67, 14, 33, 21, 30, 3, 243, 225, 14, 33, 21, 30, 3, 72, 14, 33, 21, 30, + 3, 237, 126, 14, 33, 21, 30, 3, 237, 17, 14, 33, 21, 30, 3, 153, 14, 33, + 21, 30, 3, 189, 14, 33, 21, 30, 3, 207, 14, 33, 21, 30, 3, 74, 14, 33, + 21, 30, 3, 230, 59, 14, 33, 21, 30, 3, 228, 163, 14, 33, 21, 30, 3, 152, + 14, 33, 21, 30, 3, 198, 14, 33, 21, 30, 3, 222, 201, 14, 33, 21, 30, 3, + 68, 14, 33, 21, 30, 3, 216, 216, 14, 33, 21, 30, 3, 219, 40, 14, 33, 21, + 30, 3, 218, 151, 14, 33, 21, 30, 3, 218, 90, 14, 33, 21, 30, 3, 217, 157, + 14, 211, 6, 60, 14, 211, 6, 253, 204, 14, 211, 6, 251, 202, 14, 211, 6, + 250, 46, 14, 211, 6, 73, 14, 211, 6, 246, 74, 14, 211, 6, 245, 67, 14, + 211, 6, 243, 225, 14, 211, 6, 72, 14, 211, 6, 237, 126, 14, 211, 6, 237, + 17, 14, 211, 6, 153, 14, 211, 6, 189, 14, 211, 6, 207, 14, 211, 6, 74, + 14, 211, 6, 230, 59, 14, 211, 6, 228, 163, 14, 211, 6, 152, 14, 211, 6, + 198, 14, 211, 6, 222, 201, 14, 211, 6, 68, 14, 211, 6, 216, 216, 14, 211, + 6, 219, 40, 14, 211, 6, 218, 151, 14, 211, 6, 218, 90, 14, 211, 6, 217, + 157, 14, 211, 3, 60, 14, 211, 3, 253, 204, 14, 211, 3, 251, 202, 14, 211, + 3, 250, 46, 14, 211, 3, 73, 14, 211, 3, 246, 74, 14, 211, 3, 245, 67, 14, + 211, 3, 243, 225, 14, 211, 3, 72, 14, 211, 3, 237, 126, 14, 211, 3, 237, + 17, 14, 211, 3, 153, 14, 211, 3, 189, 14, 211, 3, 207, 14, 211, 3, 74, + 14, 211, 3, 230, 59, 14, 211, 3, 228, 163, 14, 211, 3, 152, 14, 211, 3, + 198, 14, 211, 3, 222, 201, 14, 211, 3, 68, 14, 211, 3, 216, 216, 14, 211, + 3, 219, 40, 14, 211, 3, 218, 151, 14, 211, 3, 218, 90, 14, 211, 3, 217, + 157, 14, 30, 3, 248, 144, 72, 14, 30, 3, 248, 144, 237, 126, 14, 21, 6, + 254, 146, 14, 21, 6, 252, 102, 14, 21, 6, 244, 231, 14, 21, 6, 249, 62, + 14, 21, 6, 246, 156, 14, 21, 6, 217, 83, 14, 21, 6, 246, 121, 14, 21, 6, + 222, 6, 14, 21, 6, 237, 162, 14, 21, 6, 236, 221, 14, 21, 6, 235, 156, + 14, 21, 6, 233, 99, 14, 21, 6, 231, 144, 14, 21, 6, 218, 130, 14, 21, 6, + 230, 141, 14, 21, 6, 229, 108, 14, 21, 6, 227, 149, 14, 21, 6, 222, 7, + 100, 14, 21, 6, 224, 127, 14, 21, 6, 222, 105, 14, 21, 6, 220, 57, 14, + 21, 6, 229, 129, 14, 21, 6, 251, 31, 14, 21, 6, 228, 212, 14, 21, 6, 230, + 143, 14, 21, 232, 231, 14, 21, 3, 254, 146, 14, 21, 3, 252, 102, 14, 21, + 3, 244, 231, 14, 21, 3, 249, 62, 14, 21, 3, 246, 156, 14, 21, 3, 217, 83, + 14, 21, 3, 246, 121, 14, 21, 3, 222, 6, 14, 21, 3, 237, 162, 14, 21, 3, + 236, 221, 14, 21, 3, 235, 156, 14, 21, 3, 233, 99, 14, 21, 3, 231, 144, + 14, 21, 3, 218, 130, 14, 21, 3, 230, 141, 14, 21, 3, 229, 108, 14, 21, 3, + 227, 149, 14, 21, 3, 39, 224, 127, 14, 21, 3, 224, 127, 14, 21, 3, 222, + 105, 14, 21, 3, 220, 57, 14, 21, 3, 229, 129, 14, 21, 3, 251, 31, 14, 21, + 3, 228, 212, 14, 21, 3, 230, 143, 14, 21, 229, 223, 248, 246, 14, 21, + 246, 157, 100, 14, 21, 222, 7, 100, 14, 21, 236, 222, 100, 14, 21, 229, + 130, 100, 14, 21, 227, 150, 100, 14, 21, 229, 109, 100, 14, 30, 6, 254, + 146, 14, 30, 6, 252, 102, 14, 30, 6, 244, 231, 14, 30, 6, 249, 62, 14, + 30, 6, 246, 156, 14, 30, 6, 217, 83, 14, 30, 6, 246, 121, 14, 30, 6, 222, + 6, 14, 30, 6, 237, 162, 14, 30, 6, 236, 221, 14, 30, 6, 235, 156, 14, 30, + 6, 233, 99, 14, 30, 6, 231, 144, 14, 30, 6, 218, 130, 14, 30, 6, 230, + 141, 14, 30, 6, 229, 108, 14, 30, 6, 227, 149, 14, 30, 6, 222, 7, 100, + 14, 30, 6, 224, 127, 14, 30, 6, 222, 105, 14, 30, 6, 220, 57, 14, 30, 6, + 229, 129, 14, 30, 6, 251, 31, 14, 30, 6, 228, 212, 14, 30, 6, 230, 143, + 14, 30, 232, 231, 14, 30, 3, 254, 146, 14, 30, 3, 252, 102, 14, 30, 3, + 244, 231, 14, 30, 3, 249, 62, 14, 30, 3, 246, 156, 14, 30, 3, 217, 83, + 14, 30, 3, 246, 121, 14, 30, 3, 222, 6, 14, 30, 3, 237, 162, 14, 30, 3, + 236, 221, 14, 30, 3, 235, 156, 14, 30, 3, 233, 99, 14, 30, 3, 231, 144, + 14, 30, 3, 218, 130, 14, 30, 3, 230, 141, 14, 30, 3, 229, 108, 14, 30, 3, + 227, 149, 14, 30, 3, 39, 224, 127, 14, 30, 3, 224, 127, 14, 30, 3, 222, + 105, 14, 30, 3, 220, 57, 14, 30, 3, 229, 129, 14, 30, 3, 251, 31, 14, 30, + 3, 228, 212, 14, 30, 3, 230, 143, 14, 30, 229, 223, 248, 246, 14, 30, + 246, 157, 100, 14, 30, 222, 7, 100, 14, 30, 236, 222, 100, 14, 30, 229, + 130, 100, 14, 30, 227, 150, 100, 14, 30, 229, 109, 100, 14, 21, 30, 6, + 254, 146, 14, 21, 30, 6, 252, 102, 14, 21, 30, 6, 244, 231, 14, 21, 30, + 6, 249, 62, 14, 21, 30, 6, 246, 156, 14, 21, 30, 6, 217, 83, 14, 21, 30, + 6, 246, 121, 14, 21, 30, 6, 222, 6, 14, 21, 30, 6, 237, 162, 14, 21, 30, + 6, 236, 221, 14, 21, 30, 6, 235, 156, 14, 21, 30, 6, 233, 99, 14, 21, 30, + 6, 231, 144, 14, 21, 30, 6, 218, 130, 14, 21, 30, 6, 230, 141, 14, 21, + 30, 6, 229, 108, 14, 21, 30, 6, 227, 149, 14, 21, 30, 6, 222, 7, 100, 14, + 21, 30, 6, 224, 127, 14, 21, 30, 6, 222, 105, 14, 21, 30, 6, 220, 57, 14, + 21, 30, 6, 229, 129, 14, 21, 30, 6, 251, 31, 14, 21, 30, 6, 228, 212, 14, + 21, 30, 6, 230, 143, 14, 21, 30, 232, 231, 14, 21, 30, 3, 254, 146, 14, + 21, 30, 3, 252, 102, 14, 21, 30, 3, 244, 231, 14, 21, 30, 3, 249, 62, 14, + 21, 30, 3, 246, 156, 14, 21, 30, 3, 217, 83, 14, 21, 30, 3, 246, 121, 14, + 21, 30, 3, 222, 6, 14, 21, 30, 3, 237, 162, 14, 21, 30, 3, 236, 221, 14, + 21, 30, 3, 235, 156, 14, 21, 30, 3, 233, 99, 14, 21, 30, 3, 231, 144, 14, + 21, 30, 3, 218, 130, 14, 21, 30, 3, 230, 141, 14, 21, 30, 3, 229, 108, + 14, 21, 30, 3, 227, 149, 14, 21, 30, 3, 39, 224, 127, 14, 21, 30, 3, 224, + 127, 14, 21, 30, 3, 222, 105, 14, 21, 30, 3, 220, 57, 14, 21, 30, 3, 229, + 129, 14, 21, 30, 3, 251, 31, 14, 21, 30, 3, 228, 212, 14, 21, 30, 3, 230, + 143, 14, 21, 30, 229, 223, 248, 246, 14, 21, 30, 246, 157, 100, 14, 21, + 30, 222, 7, 100, 14, 21, 30, 236, 222, 100, 14, 21, 30, 229, 130, 100, + 14, 21, 30, 227, 150, 100, 14, 21, 30, 229, 109, 100, 14, 33, 21, 6, 254, + 146, 14, 33, 21, 6, 252, 102, 14, 33, 21, 6, 244, 231, 14, 33, 21, 6, + 249, 62, 14, 33, 21, 6, 246, 156, 14, 33, 21, 6, 217, 83, 14, 33, 21, 6, + 246, 121, 14, 33, 21, 6, 222, 6, 14, 33, 21, 6, 237, 162, 14, 33, 21, 6, + 236, 221, 14, 33, 21, 6, 235, 156, 14, 33, 21, 6, 233, 99, 14, 33, 21, 6, + 231, 144, 14, 33, 21, 6, 218, 130, 14, 33, 21, 6, 230, 141, 14, 33, 21, + 6, 229, 108, 14, 33, 21, 6, 227, 149, 14, 33, 21, 6, 222, 7, 100, 14, 33, + 21, 6, 224, 127, 14, 33, 21, 6, 222, 105, 14, 33, 21, 6, 220, 57, 14, 33, + 21, 6, 229, 129, 14, 33, 21, 6, 251, 31, 14, 33, 21, 6, 228, 212, 14, 33, + 21, 6, 230, 143, 14, 33, 21, 232, 231, 14, 33, 21, 3, 254, 146, 14, 33, + 21, 3, 252, 102, 14, 33, 21, 3, 244, 231, 14, 33, 21, 3, 249, 62, 14, 33, + 21, 3, 246, 156, 14, 33, 21, 3, 217, 83, 14, 33, 21, 3, 246, 121, 14, 33, + 21, 3, 222, 6, 14, 33, 21, 3, 237, 162, 14, 33, 21, 3, 236, 221, 14, 33, + 21, 3, 235, 156, 14, 33, 21, 3, 233, 99, 14, 33, 21, 3, 231, 144, 14, 33, + 21, 3, 218, 130, 14, 33, 21, 3, 230, 141, 14, 33, 21, 3, 229, 108, 14, + 33, 21, 3, 227, 149, 14, 33, 21, 3, 39, 224, 127, 14, 33, 21, 3, 224, + 127, 14, 33, 21, 3, 222, 105, 14, 33, 21, 3, 220, 57, 14, 33, 21, 3, 229, + 129, 14, 33, 21, 3, 251, 31, 14, 33, 21, 3, 228, 212, 14, 33, 21, 3, 230, + 143, 14, 33, 21, 229, 223, 248, 246, 14, 33, 21, 246, 157, 100, 14, 33, + 21, 222, 7, 100, 14, 33, 21, 236, 222, 100, 14, 33, 21, 229, 130, 100, + 14, 33, 21, 227, 150, 100, 14, 33, 21, 229, 109, 100, 14, 33, 21, 30, 6, + 254, 146, 14, 33, 21, 30, 6, 252, 102, 14, 33, 21, 30, 6, 244, 231, 14, + 33, 21, 30, 6, 249, 62, 14, 33, 21, 30, 6, 246, 156, 14, 33, 21, 30, 6, + 217, 83, 14, 33, 21, 30, 6, 246, 121, 14, 33, 21, 30, 6, 222, 6, 14, 33, + 21, 30, 6, 237, 162, 14, 33, 21, 30, 6, 236, 221, 14, 33, 21, 30, 6, 235, + 156, 14, 33, 21, 30, 6, 233, 99, 14, 33, 21, 30, 6, 231, 144, 14, 33, 21, + 30, 6, 218, 130, 14, 33, 21, 30, 6, 230, 141, 14, 33, 21, 30, 6, 229, + 108, 14, 33, 21, 30, 6, 227, 149, 14, 33, 21, 30, 6, 222, 7, 100, 14, 33, + 21, 30, 6, 224, 127, 14, 33, 21, 30, 6, 222, 105, 14, 33, 21, 30, 6, 220, + 57, 14, 33, 21, 30, 6, 229, 129, 14, 33, 21, 30, 6, 251, 31, 14, 33, 21, + 30, 6, 228, 212, 14, 33, 21, 30, 6, 230, 143, 14, 33, 21, 30, 232, 231, + 14, 33, 21, 30, 3, 254, 146, 14, 33, 21, 30, 3, 252, 102, 14, 33, 21, 30, + 3, 244, 231, 14, 33, 21, 30, 3, 249, 62, 14, 33, 21, 30, 3, 246, 156, 14, + 33, 21, 30, 3, 217, 83, 14, 33, 21, 30, 3, 246, 121, 14, 33, 21, 30, 3, + 222, 6, 14, 33, 21, 30, 3, 237, 162, 14, 33, 21, 30, 3, 236, 221, 14, 33, + 21, 30, 3, 235, 156, 14, 33, 21, 30, 3, 233, 99, 14, 33, 21, 30, 3, 231, + 144, 14, 33, 21, 30, 3, 218, 130, 14, 33, 21, 30, 3, 230, 141, 14, 33, + 21, 30, 3, 229, 108, 14, 33, 21, 30, 3, 227, 149, 14, 33, 21, 30, 3, 39, + 224, 127, 14, 33, 21, 30, 3, 224, 127, 14, 33, 21, 30, 3, 222, 105, 14, + 33, 21, 30, 3, 220, 57, 14, 33, 21, 30, 3, 229, 129, 14, 33, 21, 30, 3, + 251, 31, 14, 33, 21, 30, 3, 228, 212, 14, 33, 21, 30, 3, 230, 143, 14, + 33, 21, 30, 229, 223, 248, 246, 14, 33, 21, 30, 246, 157, 100, 14, 33, + 21, 30, 222, 7, 100, 14, 33, 21, 30, 236, 222, 100, 14, 33, 21, 30, 229, + 130, 100, 14, 33, 21, 30, 227, 150, 100, 14, 33, 21, 30, 229, 109, 100, + 14, 21, 6, 248, 240, 14, 21, 3, 248, 240, 14, 21, 20, 217, 84, 14, 21, + 20, 107, 14, 21, 20, 103, 14, 21, 20, 160, 14, 21, 20, 154, 14, 21, 20, + 174, 14, 21, 20, 182, 14, 21, 20, 191, 14, 21, 20, 185, 14, 21, 20, 190, + 14, 173, 20, 217, 84, 14, 173, 20, 107, 14, 173, 20, 103, 14, 173, 20, + 160, 14, 173, 20, 154, 14, 173, 20, 174, 14, 173, 20, 182, 14, 173, 20, + 191, 14, 173, 20, 185, 14, 173, 20, 190, 14, 33, 20, 217, 84, 14, 33, 20, + 107, 14, 33, 20, 103, 14, 33, 20, 160, 14, 33, 20, 154, 14, 33, 20, 174, + 14, 33, 20, 182, 14, 33, 20, 191, 14, 33, 20, 185, 14, 33, 20, 190, 14, + 33, 21, 20, 217, 84, 14, 33, 21, 20, 107, 14, 33, 21, 20, 103, 14, 33, + 21, 20, 160, 14, 33, 21, 20, 154, 14, 33, 21, 20, 174, 14, 33, 21, 20, + 182, 14, 33, 21, 20, 191, 14, 33, 21, 20, 185, 14, 33, 21, 20, 190, 14, + 211, 20, 217, 84, 14, 211, 20, 107, 14, 211, 20, 103, 14, 211, 20, 160, + 14, 211, 20, 154, 14, 211, 20, 174, 14, 211, 20, 182, 14, 211, 20, 191, + 14, 211, 20, 185, 14, 211, 20, 190, 234, 101, 81, 247, 5, 218, 194, 234, + 101, 81, 224, 6, 218, 194, 234, 101, 81, 218, 217, 218, 194, 234, 101, + 81, 231, 187, 218, 194, 234, 101, 81, 227, 203, 247, 123, 234, 101, 81, + 244, 27, 247, 123, 234, 101, 81, 67, 247, 123, 234, 101, 81, 131, 117, + 251, 54, 234, 101, 81, 124, 117, 251, 54, 234, 101, 81, 148, 117, 251, + 54, 234, 101, 81, 245, 116, 117, 251, 54, 234, 101, 81, 245, 170, 117, + 251, 54, 234, 101, 81, 224, 82, 117, 251, 54, 234, 101, 81, 225, 43, 117, + 251, 54, 234, 101, 81, 246, 235, 117, 251, 54, 234, 101, 81, 232, 31, + 117, 251, 54, 234, 101, 81, 131, 117, 252, 210, 234, 101, 81, 124, 117, + 252, 210, 234, 101, 81, 148, 117, 252, 210, 234, 101, 81, 245, 116, 117, + 252, 210, 234, 101, 81, 245, 170, 117, 252, 210, 234, 101, 81, 224, 82, + 117, 252, 210, 234, 101, 81, 225, 43, 117, 252, 210, 234, 101, 81, 246, + 235, 117, 252, 210, 234, 101, 81, 232, 31, 117, 252, 210, 234, 101, 81, + 131, 117, 250, 220, 234, 101, 81, 124, 117, 250, 220, 234, 101, 81, 148, + 117, 250, 220, 234, 101, 81, 245, 116, 117, 250, 220, 234, 101, 81, 245, + 170, 117, 250, 220, 234, 101, 81, 224, 82, 117, 250, 220, 234, 101, 81, + 225, 43, 117, 250, 220, 234, 101, 81, 246, 235, 117, 250, 220, 234, 101, + 81, 232, 31, 117, 250, 220, 234, 101, 81, 229, 45, 234, 101, 81, 230, + 104, 234, 101, 81, 252, 211, 234, 101, 81, 250, 254, 234, 101, 81, 223, + 232, 234, 101, 81, 223, 70, 234, 101, 81, 253, 223, 234, 101, 81, 218, + 190, 234, 101, 81, 237, 53, 234, 101, 81, 252, 233, 119, 81, 186, 252, + 233, 119, 81, 242, 240, 119, 81, 242, 239, 119, 81, 242, 238, 119, 81, + 242, 237, 119, 81, 242, 236, 119, 81, 242, 235, 119, 81, 242, 234, 119, + 81, 242, 233, 119, 81, 242, 232, 119, 81, 242, 231, 119, 81, 242, 230, + 119, 81, 242, 229, 119, 81, 242, 228, 119, 81, 242, 227, 119, 81, 242, + 226, 119, 81, 242, 225, 119, 81, 242, 224, 119, 81, 242, 223, 119, 81, + 242, 222, 119, 81, 242, 221, 119, 81, 242, 220, 119, 81, 242, 219, 119, + 81, 242, 218, 119, 81, 242, 217, 119, 81, 242, 216, 119, 81, 242, 215, + 119, 81, 242, 214, 119, 81, 242, 213, 119, 81, 242, 212, 119, 81, 242, + 211, 119, 81, 242, 210, 119, 81, 242, 209, 119, 81, 242, 208, 119, 81, + 242, 207, 119, 81, 242, 206, 119, 81, 242, 205, 119, 81, 242, 204, 119, + 81, 242, 203, 119, 81, 242, 202, 119, 81, 242, 201, 119, 81, 242, 200, + 119, 81, 242, 199, 119, 81, 242, 198, 119, 81, 242, 197, 119, 81, 242, + 196, 119, 81, 242, 195, 119, 81, 242, 194, 119, 81, 242, 193, 119, 81, + 242, 192, 119, 81, 69, 252, 233, 119, 81, 219, 151, 119, 81, 219, 150, + 119, 81, 219, 149, 119, 81, 219, 148, 119, 81, 219, 147, 119, 81, 219, + 146, 119, 81, 219, 145, 119, 81, 219, 144, 119, 81, 219, 143, 119, 81, + 219, 142, 119, 81, 219, 141, 119, 81, 219, 140, 119, 81, 219, 139, 119, + 81, 219, 138, 119, 81, 219, 137, 119, 81, 219, 136, 119, 81, 219, 135, + 119, 81, 219, 134, 119, 81, 219, 133, 119, 81, 219, 132, 119, 81, 219, + 131, 119, 81, 219, 130, 119, 81, 219, 129, 119, 81, 219, 128, 119, 81, + 219, 127, 119, 81, 219, 126, 119, 81, 219, 125, 119, 81, 219, 124, 119, + 81, 219, 123, 119, 81, 219, 122, 119, 81, 219, 121, 119, 81, 219, 120, + 119, 81, 219, 119, 119, 81, 219, 118, 119, 81, 219, 117, 119, 81, 219, + 116, 119, 81, 219, 115, 119, 81, 219, 114, 119, 81, 219, 113, 119, 81, + 219, 112, 119, 81, 219, 111, 119, 81, 219, 110, 119, 81, 219, 109, 119, + 81, 219, 108, 119, 81, 219, 107, 119, 81, 219, 106, 119, 81, 219, 105, + 119, 81, 219, 104, 119, 81, 219, 103, 20, 217, 85, 245, 90, 223, 136, 20, + 217, 85, 250, 168, 20, 131, 250, 168, 20, 124, 250, 168, 20, 148, 250, + 168, 20, 245, 116, 250, 168, 20, 245, 170, 250, 168, 20, 224, 82, 250, + 168, 20, 225, 43, 250, 168, 20, 246, 235, 250, 168, 20, 232, 31, 250, + 168, 82, 7, 6, 1, 60, 82, 7, 6, 1, 253, 204, 82, 7, 6, 1, 251, 202, 82, + 7, 6, 1, 250, 46, 82, 7, 6, 1, 73, 82, 7, 6, 1, 246, 74, 82, 7, 6, 1, + 245, 67, 82, 7, 6, 1, 243, 225, 82, 7, 6, 1, 72, 82, 7, 6, 1, 237, 126, + 82, 7, 6, 1, 237, 17, 82, 7, 6, 1, 153, 82, 7, 6, 1, 189, 82, 7, 6, 1, + 207, 82, 7, 6, 1, 74, 82, 7, 6, 1, 230, 59, 82, 7, 6, 1, 228, 163, 82, 7, + 6, 1, 152, 82, 7, 6, 1, 198, 82, 7, 6, 1, 222, 201, 82, 7, 6, 1, 68, 82, + 7, 6, 1, 216, 216, 82, 7, 6, 1, 219, 40, 82, 7, 6, 1, 218, 151, 82, 7, 6, + 1, 218, 90, 82, 7, 6, 1, 217, 157, 221, 114, 224, 236, 252, 17, 7, 6, 1, + 198, 34, 30, 7, 6, 1, 251, 202, 34, 30, 7, 6, 1, 152, 34, 251, 100, 34, + 218, 153, 204, 7, 6, 1, 253, 204, 204, 7, 6, 1, 207, 204, 7, 6, 1, 230, + 59, 204, 7, 6, 1, 198, 204, 7, 6, 1, 219, 40, 204, 242, 154, 204, 233, + 52, 204, 226, 96, 204, 223, 219, 204, 229, 4, 232, 136, 34, 7, 6, 1, 243, + 225, 232, 136, 34, 7, 6, 1, 230, 59, 232, 136, 204, 7, 6, 1, 237, 126, + 232, 136, 204, 7, 6, 1, 153, 232, 136, 204, 7, 6, 1, 189, 232, 136, 204, + 7, 6, 1, 230, 59, 250, 98, 232, 136, 204, 7, 6, 1, 230, 59, 232, 136, + 204, 242, 67, 232, 136, 204, 187, 232, 136, 204, 226, 177, 40, 248, 184, + 40, 136, 243, 0, 204, 9, 220, 76, 240, 8, 204, 9, 220, 76, 240, 12, 204, + 9, 220, 76, 240, 18, 204, 52, 249, 92, 204, 9, 220, 76, 240, 24, 204, 9, + 220, 76, 240, 14, 204, 9, 220, 76, 239, 248, 204, 9, 220, 76, 240, 13, + 204, 9, 220, 76, 240, 23, 204, 9, 220, 76, 240, 0, 204, 9, 220, 76, 239, + 252, 204, 9, 220, 76, 240, 2, 204, 9, 220, 76, 240, 20, 204, 9, 220, 76, + 240, 9, 204, 9, 220, 76, 240, 22, 204, 9, 220, 76, 240, 1, 204, 9, 220, + 76, 240, 21, 204, 9, 220, 76, 239, 249, 204, 9, 220, 76, 239, 251, 204, + 9, 220, 76, 239, 247, 204, 9, 220, 76, 240, 15, 204, 9, 220, 76, 240, 16, + 204, 9, 220, 76, 239, 254, 204, 9, 220, 76, 240, 6, 204, 9, 220, 76, 240, + 4, 204, 9, 220, 76, 240, 27, 204, 9, 220, 76, 240, 26, 204, 9, 220, 76, + 239, 245, 204, 9, 220, 76, 240, 10, 204, 9, 220, 76, 240, 25, 204, 9, + 220, 76, 240, 17, 204, 9, 220, 76, 240, 5, 204, 9, 220, 76, 239, 246, + 204, 9, 220, 76, 240, 7, 221, 114, 224, 236, 252, 17, 9, 220, 76, 239, + 255, 221, 114, 224, 236, 252, 17, 9, 220, 76, 240, 26, 221, 114, 224, + 236, 252, 17, 9, 220, 76, 240, 24, 221, 114, 224, 236, 252, 17, 9, 220, + 76, 240, 11, 221, 114, 224, 236, 252, 17, 9, 220, 76, 239, 253, 221, 114, + 224, 236, 252, 17, 9, 220, 76, 240, 7, 221, 114, 224, 236, 252, 17, 9, + 220, 76, 239, 250, 221, 114, 224, 236, 252, 17, 9, 220, 76, 240, 19, 221, + 114, 224, 236, 252, 17, 9, 220, 76, 240, 3, 9, 13, 242, 57, 9, 13, 242, + 56, 9, 13, 242, 55, 9, 13, 242, 54, 9, 13, 242, 53, 9, 13, 242, 52, 9, + 13, 242, 51, 9, 13, 242, 50, 9, 13, 242, 49, 9, 13, 242, 48, 9, 13, 242, + 47, 9, 13, 242, 46, 9, 13, 242, 45, 9, 13, 242, 44, 9, 13, 242, 43, 9, + 13, 242, 42, 9, 13, 242, 41, 9, 13, 242, 40, 9, 13, 242, 39, 9, 13, 242, + 38, 9, 13, 242, 37, 9, 13, 242, 36, 9, 13, 242, 35, 9, 13, 242, 34, 9, + 13, 242, 33, 9, 13, 242, 32, 9, 13, 242, 31, 9, 13, 242, 30, 9, 13, 242, + 29, 9, 13, 242, 28, 9, 13, 242, 27, 9, 13, 242, 26, 9, 13, 242, 25, 9, + 13, 242, 24, 9, 13, 242, 23, 9, 13, 242, 22, 9, 13, 242, 21, 9, 13, 242, + 20, 9, 13, 242, 19, 9, 13, 242, 18, 9, 13, 242, 17, 9, 13, 242, 16, 9, + 13, 242, 15, 9, 13, 242, 14, 9, 13, 242, 13, 9, 13, 242, 12, 9, 13, 242, + 11, 9, 13, 242, 10, 9, 13, 242, 9, 9, 13, 242, 8, 9, 13, 242, 7, 9, 13, + 242, 6, 9, 13, 242, 5, 9, 13, 242, 4, 9, 13, 242, 3, 9, 13, 242, 2, 9, + 13, 242, 1, 9, 13, 242, 0, 9, 13, 241, 255, 9, 13, 241, 254, 9, 13, 241, + 253, 9, 13, 241, 252, 9, 13, 241, 251, 9, 13, 241, 250, 9, 13, 241, 249, + 9, 13, 241, 248, 9, 13, 241, 247, 9, 13, 241, 246, 9, 13, 241, 245, 9, + 13, 241, 244, 9, 13, 241, 243, 9, 13, 241, 242, 9, 13, 241, 241, 9, 13, + 241, 240, 9, 13, 241, 239, 9, 13, 241, 238, 9, 13, 241, 237, 9, 13, 241, + 236, 9, 13, 241, 235, 9, 13, 241, 234, 9, 13, 241, 233, 9, 13, 241, 232, + 9, 13, 241, 231, 9, 13, 241, 230, 9, 13, 241, 229, 9, 13, 241, 228, 9, + 13, 241, 227, 9, 13, 241, 226, 9, 13, 241, 225, 9, 13, 241, 224, 9, 13, + 241, 223, 9, 13, 241, 222, 9, 13, 241, 221, 9, 13, 241, 220, 9, 13, 241, + 219, 9, 13, 241, 218, 9, 13, 241, 217, 9, 13, 241, 216, 9, 13, 241, 215, + 9, 13, 241, 214, 9, 13, 241, 213, 9, 13, 241, 212, 9, 13, 241, 211, 9, + 13, 241, 210, 9, 13, 241, 209, 9, 13, 241, 208, 9, 13, 241, 207, 9, 13, + 241, 206, 9, 13, 241, 205, 9, 13, 241, 204, 9, 13, 241, 203, 9, 13, 241, + 202, 9, 13, 241, 201, 9, 13, 241, 200, 9, 13, 241, 199, 9, 13, 241, 198, + 9, 13, 241, 197, 9, 13, 241, 196, 9, 13, 241, 195, 9, 13, 241, 194, 9, + 13, 241, 193, 9, 13, 241, 192, 9, 13, 241, 191, 9, 13, 241, 190, 9, 13, + 241, 189, 9, 13, 241, 188, 9, 13, 241, 187, 9, 13, 241, 186, 9, 13, 241, + 185, 9, 13, 241, 184, 9, 13, 241, 183, 9, 13, 241, 182, 9, 13, 241, 181, + 9, 13, 241, 180, 9, 13, 241, 179, 9, 13, 241, 178, 9, 13, 241, 177, 9, + 13, 241, 176, 9, 13, 241, 175, 9, 13, 241, 174, 9, 13, 241, 173, 9, 13, + 241, 172, 9, 13, 241, 171, 9, 13, 241, 170, 9, 13, 241, 169, 9, 13, 241, + 168, 9, 13, 241, 167, 9, 13, 241, 166, 9, 13, 241, 165, 9, 13, 241, 164, + 9, 13, 241, 163, 9, 13, 241, 162, 9, 13, 241, 161, 9, 13, 241, 160, 9, + 13, 241, 159, 9, 13, 241, 158, 9, 13, 241, 157, 9, 13, 241, 156, 9, 13, + 241, 155, 9, 13, 241, 154, 9, 13, 241, 153, 9, 13, 241, 152, 9, 13, 241, + 151, 9, 13, 241, 150, 9, 13, 241, 149, 9, 13, 241, 148, 9, 13, 241, 147, + 9, 13, 241, 146, 9, 13, 241, 145, 9, 13, 241, 144, 9, 13, 241, 143, 9, + 13, 241, 142, 9, 13, 241, 141, 9, 13, 241, 140, 9, 13, 241, 139, 9, 13, + 241, 138, 9, 13, 241, 137, 9, 13, 241, 136, 9, 13, 241, 135, 9, 13, 241, + 134, 9, 13, 241, 133, 9, 13, 241, 132, 9, 13, 241, 131, 9, 13, 241, 130, + 9, 13, 241, 129, 9, 13, 241, 128, 9, 13, 241, 127, 9, 13, 241, 126, 9, + 13, 241, 125, 9, 13, 241, 124, 9, 13, 241, 123, 9, 13, 241, 122, 9, 13, + 241, 121, 9, 13, 241, 120, 9, 13, 241, 119, 9, 13, 241, 118, 9, 13, 241, + 117, 9, 13, 241, 116, 9, 13, 241, 115, 9, 13, 241, 114, 9, 13, 241, 113, + 9, 13, 241, 112, 9, 13, 241, 111, 9, 13, 241, 110, 9, 13, 241, 109, 9, + 13, 241, 108, 9, 13, 241, 107, 9, 13, 241, 106, 9, 13, 241, 105, 9, 13, + 241, 104, 9, 13, 241, 103, 9, 13, 241, 102, 9, 13, 241, 101, 9, 13, 241, + 100, 9, 13, 241, 99, 9, 13, 241, 98, 9, 13, 241, 97, 9, 13, 241, 96, 9, + 13, 241, 95, 9, 13, 241, 94, 9, 13, 241, 93, 9, 13, 241, 92, 9, 13, 241, + 91, 9, 13, 241, 90, 9, 13, 241, 89, 9, 13, 241, 88, 9, 13, 241, 87, 9, + 13, 241, 86, 9, 13, 241, 85, 9, 13, 241, 84, 9, 13, 241, 83, 9, 13, 241, + 82, 9, 13, 241, 81, 9, 13, 241, 80, 9, 13, 241, 79, 9, 13, 241, 78, 9, + 13, 241, 77, 9, 13, 241, 76, 9, 13, 241, 75, 9, 13, 241, 74, 9, 13, 241, + 73, 9, 13, 241, 72, 9, 13, 241, 71, 9, 13, 241, 70, 9, 13, 241, 69, 9, + 13, 241, 68, 9, 13, 241, 67, 9, 13, 241, 66, 9, 13, 241, 65, 9, 13, 241, + 64, 9, 13, 241, 63, 9, 13, 241, 62, 9, 13, 241, 61, 9, 13, 241, 60, 9, + 13, 241, 59, 9, 13, 241, 58, 9, 13, 241, 57, 9, 13, 241, 56, 9, 13, 241, + 55, 9, 13, 241, 54, 9, 13, 241, 53, 9, 13, 241, 52, 9, 13, 241, 51, 9, + 13, 241, 50, 9, 13, 241, 49, 9, 13, 241, 48, 9, 13, 241, 47, 9, 13, 241, + 46, 9, 13, 241, 45, 9, 13, 241, 44, 9, 13, 241, 43, 9, 13, 241, 42, 9, + 13, 241, 41, 9, 13, 241, 40, 9, 13, 241, 39, 9, 13, 241, 38, 9, 13, 241, + 37, 9, 13, 241, 36, 9, 13, 241, 35, 9, 13, 241, 34, 9, 13, 241, 33, 9, + 13, 241, 32, 9, 13, 241, 31, 9, 13, 241, 30, 9, 13, 241, 29, 9, 13, 241, + 28, 9, 13, 241, 27, 9, 13, 241, 26, 9, 13, 241, 25, 9, 13, 241, 24, 9, + 13, 241, 23, 9, 13, 241, 22, 9, 13, 241, 21, 9, 13, 241, 20, 9, 13, 241, + 19, 9, 13, 241, 18, 9, 13, 241, 17, 9, 13, 241, 16, 9, 13, 241, 15, 9, + 13, 241, 14, 9, 13, 241, 13, 9, 13, 241, 12, 9, 13, 241, 11, 9, 13, 241, + 10, 9, 13, 241, 9, 9, 13, 241, 8, 9, 13, 241, 7, 9, 13, 241, 6, 9, 13, + 241, 5, 9, 13, 241, 4, 9, 13, 241, 3, 9, 13, 241, 2, 9, 13, 241, 1, 9, + 13, 241, 0, 9, 13, 240, 255, 9, 13, 240, 254, 9, 13, 240, 253, 9, 13, + 240, 252, 9, 13, 240, 251, 9, 13, 240, 250, 9, 13, 240, 249, 9, 13, 240, + 248, 9, 13, 240, 247, 9, 13, 240, 246, 9, 13, 240, 245, 9, 13, 240, 244, + 9, 13, 240, 243, 9, 13, 240, 242, 9, 13, 240, 241, 9, 13, 240, 240, 9, + 13, 240, 239, 9, 13, 240, 238, 9, 13, 240, 237, 9, 13, 240, 236, 9, 13, + 240, 235, 9, 13, 240, 234, 9, 13, 240, 233, 9, 13, 240, 232, 9, 13, 240, + 231, 9, 13, 240, 230, 9, 13, 240, 229, 9, 13, 240, 228, 9, 13, 240, 227, + 9, 13, 240, 226, 9, 13, 240, 225, 9, 13, 240, 224, 9, 13, 240, 223, 9, + 13, 240, 222, 9, 13, 240, 221, 9, 13, 240, 220, 9, 13, 240, 219, 9, 13, + 240, 218, 9, 13, 240, 217, 9, 13, 240, 216, 9, 13, 240, 215, 9, 13, 240, + 214, 9, 13, 240, 213, 9, 13, 240, 212, 9, 13, 240, 211, 9, 13, 240, 210, + 9, 13, 240, 209, 9, 13, 240, 208, 9, 13, 240, 207, 9, 13, 240, 206, 9, + 13, 240, 205, 9, 13, 240, 204, 9, 13, 240, 203, 9, 13, 240, 202, 9, 13, + 240, 201, 9, 13, 240, 200, 9, 13, 240, 199, 9, 13, 240, 198, 9, 13, 240, + 197, 9, 13, 240, 196, 9, 13, 240, 195, 9, 13, 240, 194, 9, 13, 240, 193, + 9, 13, 240, 192, 9, 13, 240, 191, 9, 13, 240, 190, 9, 13, 240, 189, 9, + 13, 240, 188, 9, 13, 240, 187, 9, 13, 240, 186, 9, 13, 240, 185, 9, 13, + 240, 184, 9, 13, 240, 183, 9, 13, 240, 182, 9, 13, 240, 181, 9, 13, 240, + 180, 9, 13, 240, 179, 9, 13, 240, 178, 9, 13, 240, 177, 9, 13, 240, 176, + 9, 13, 240, 175, 9, 13, 240, 174, 9, 13, 240, 173, 9, 13, 240, 172, 9, + 13, 240, 171, 9, 13, 240, 170, 9, 13, 240, 169, 9, 13, 240, 168, 9, 13, + 240, 167, 9, 13, 240, 166, 9, 13, 240, 165, 9, 13, 240, 164, 9, 13, 240, + 163, 9, 13, 240, 162, 9, 13, 240, 161, 9, 13, 240, 160, 9, 13, 240, 159, + 9, 13, 240, 158, 9, 13, 240, 157, 9, 13, 240, 156, 9, 13, 240, 155, 9, + 13, 240, 154, 9, 13, 240, 153, 9, 13, 240, 152, 9, 13, 240, 151, 9, 13, + 240, 150, 9, 13, 240, 149, 9, 13, 240, 148, 9, 13, 240, 147, 9, 13, 240, + 146, 9, 13, 240, 145, 9, 13, 240, 144, 9, 13, 240, 143, 9, 13, 240, 142, + 9, 13, 240, 141, 9, 13, 240, 140, 9, 13, 240, 139, 9, 13, 240, 138, 9, + 13, 240, 137, 9, 13, 240, 136, 9, 13, 240, 135, 9, 13, 240, 134, 9, 13, + 240, 133, 9, 13, 240, 132, 9, 13, 240, 131, 9, 13, 240, 130, 9, 13, 240, + 129, 9, 13, 240, 128, 9, 13, 240, 127, 9, 13, 240, 126, 9, 13, 240, 125, + 9, 13, 240, 124, 9, 13, 240, 123, 9, 13, 240, 122, 9, 13, 240, 121, 9, + 13, 240, 120, 9, 13, 240, 119, 9, 13, 240, 118, 9, 13, 240, 117, 9, 13, + 240, 116, 9, 13, 240, 115, 9, 13, 240, 114, 9, 13, 240, 113, 9, 13, 240, + 112, 9, 13, 240, 111, 9, 13, 240, 110, 9, 13, 240, 109, 9, 13, 240, 108, + 9, 13, 240, 107, 9, 13, 240, 106, 9, 13, 240, 105, 9, 13, 240, 104, 9, + 13, 240, 103, 9, 13, 240, 102, 9, 13, 240, 101, 9, 13, 240, 100, 9, 13, + 240, 99, 9, 13, 240, 98, 9, 13, 240, 97, 9, 13, 240, 96, 9, 13, 240, 95, + 9, 13, 240, 94, 9, 13, 240, 93, 9, 13, 240, 92, 9, 13, 240, 91, 9, 13, + 240, 90, 9, 13, 240, 89, 9, 13, 240, 88, 9, 13, 240, 87, 9, 13, 240, 86, + 9, 13, 240, 85, 9, 13, 240, 84, 9, 13, 240, 83, 9, 13, 240, 82, 9, 13, + 240, 81, 9, 13, 240, 80, 9, 13, 240, 79, 9, 13, 240, 78, 9, 13, 240, 77, + 9, 13, 240, 76, 9, 13, 240, 75, 9, 13, 240, 74, 9, 13, 240, 73, 9, 13, + 240, 72, 9, 13, 240, 71, 9, 13, 240, 70, 9, 13, 240, 69, 9, 13, 240, 68, + 9, 13, 240, 67, 9, 13, 240, 66, 9, 13, 240, 65, 9, 13, 240, 64, 9, 13, + 240, 63, 9, 13, 240, 62, 9, 13, 240, 61, 9, 13, 240, 60, 9, 13, 240, 59, + 9, 13, 240, 58, 9, 13, 240, 57, 9, 13, 240, 56, 9, 13, 240, 55, 9, 13, + 240, 54, 9, 13, 240, 53, 9, 13, 240, 52, 9, 13, 240, 51, 9, 13, 240, 50, + 9, 13, 240, 49, 9, 13, 240, 48, 9, 13, 240, 47, 9, 13, 240, 46, 9, 13, + 240, 45, 9, 13, 240, 44, 9, 13, 240, 43, 9, 13, 240, 42, 9, 13, 240, 41, + 9, 13, 240, 40, 9, 13, 240, 39, 9, 13, 240, 38, 9, 13, 240, 37, 9, 13, + 240, 36, 9, 13, 240, 35, 9, 13, 240, 34, 9, 13, 240, 33, 9, 13, 240, 32, + 9, 13, 240, 31, 9, 13, 240, 30, 9, 13, 240, 29, 9, 13, 240, 28, 235, 148, + 222, 141, 118, 223, 254, 118, 246, 95, 78, 118, 228, 69, 78, 118, 54, 55, + 118, 248, 155, 55, 118, 229, 169, 55, 118, 254, 134, 118, 254, 79, 118, + 42, 229, 229, 118, 45, 229, 229, 118, 253, 251, 118, 88, 55, 118, 250, + 168, 118, 242, 120, 118, 245, 90, 223, 136, 118, 224, 17, 118, 20, 217, + 84, 118, 20, 107, 118, 20, 103, 118, 20, 160, 118, 20, 154, 118, 20, 174, + 118, 20, 182, 118, 20, 191, 118, 20, 185, 118, 20, 190, 118, 250, 175, + 118, 225, 67, 118, 235, 87, 55, 118, 246, 154, 55, 118, 244, 30, 55, 118, + 228, 82, 78, 118, 250, 167, 253, 244, 118, 7, 6, 1, 60, 118, 7, 6, 1, + 253, 204, 118, 7, 6, 1, 251, 202, 118, 7, 6, 1, 250, 46, 118, 7, 6, 1, + 73, 118, 7, 6, 1, 246, 74, 118, 7, 6, 1, 245, 67, 118, 7, 6, 1, 243, 225, + 118, 7, 6, 1, 72, 118, 7, 6, 1, 237, 126, 118, 7, 6, 1, 237, 17, 118, 7, + 6, 1, 153, 118, 7, 6, 1, 189, 118, 7, 6, 1, 207, 118, 7, 6, 1, 74, 118, + 7, 6, 1, 230, 59, 118, 7, 6, 1, 228, 163, 118, 7, 6, 1, 152, 118, 7, 6, + 1, 198, 118, 7, 6, 1, 222, 201, 118, 7, 6, 1, 68, 118, 7, 6, 1, 216, 216, + 118, 7, 6, 1, 219, 40, 118, 7, 6, 1, 218, 151, 118, 7, 6, 1, 218, 90, + 118, 7, 6, 1, 217, 157, 118, 42, 40, 115, 118, 227, 160, 224, 17, 118, + 45, 40, 115, 118, 250, 217, 255, 0, 118, 109, 235, 43, 118, 244, 37, 255, + 0, 118, 7, 3, 1, 60, 118, 7, 3, 1, 253, 204, 118, 7, 3, 1, 251, 202, 118, + 7, 3, 1, 250, 46, 118, 7, 3, 1, 73, 118, 7, 3, 1, 246, 74, 118, 7, 3, 1, + 245, 67, 118, 7, 3, 1, 243, 225, 118, 7, 3, 1, 72, 118, 7, 3, 1, 237, + 126, 118, 7, 3, 1, 237, 17, 118, 7, 3, 1, 153, 118, 7, 3, 1, 189, 118, 7, + 3, 1, 207, 118, 7, 3, 1, 74, 118, 7, 3, 1, 230, 59, 118, 7, 3, 1, 228, + 163, 118, 7, 3, 1, 152, 118, 7, 3, 1, 198, 118, 7, 3, 1, 222, 201, 118, + 7, 3, 1, 68, 118, 7, 3, 1, 216, 216, 118, 7, 3, 1, 219, 40, 118, 7, 3, 1, + 218, 151, 118, 7, 3, 1, 218, 90, 118, 7, 3, 1, 217, 157, 118, 42, 250, + 79, 115, 118, 69, 235, 43, 118, 45, 250, 79, 115, 118, 221, 179, 251, + 153, 222, 141, 41, 225, 251, 41, 225, 240, 41, 225, 229, 41, 225, 217, + 41, 225, 206, 41, 225, 195, 41, 225, 184, 41, 225, 173, 41, 225, 162, 41, + 225, 154, 41, 225, 153, 41, 225, 152, 41, 225, 151, 41, 225, 149, 41, + 225, 148, 41, 225, 147, 41, 225, 146, 41, 225, 145, 41, 225, 144, 41, + 225, 143, 41, 225, 142, 41, 225, 141, 41, 225, 140, 41, 225, 138, 41, + 225, 137, 41, 225, 136, 41, 225, 135, 41, 225, 134, 41, 225, 133, 41, + 225, 132, 41, 225, 131, 41, 225, 130, 41, 225, 129, 41, 225, 127, 41, + 225, 126, 41, 225, 125, 41, 225, 124, 41, 225, 123, 41, 225, 122, 41, + 225, 121, 41, 225, 120, 41, 225, 119, 41, 225, 118, 41, 225, 116, 41, + 225, 115, 41, 225, 114, 41, 225, 113, 41, 225, 112, 41, 225, 111, 41, + 225, 110, 41, 225, 109, 41, 225, 108, 41, 225, 107, 41, 225, 105, 41, + 225, 104, 41, 225, 103, 41, 225, 102, 41, 225, 101, 41, 225, 100, 41, + 225, 99, 41, 225, 98, 41, 225, 97, 41, 225, 96, 41, 225, 94, 41, 225, 93, + 41, 225, 92, 41, 225, 91, 41, 225, 90, 41, 225, 89, 41, 225, 88, 41, 225, + 87, 41, 225, 86, 41, 225, 85, 41, 225, 83, 41, 225, 82, 41, 225, 81, 41, + 225, 80, 41, 225, 79, 41, 225, 78, 41, 225, 77, 41, 225, 76, 41, 225, 75, + 41, 225, 74, 41, 226, 71, 41, 226, 70, 41, 226, 69, 41, 226, 68, 41, 226, + 67, 41, 226, 66, 41, 226, 65, 41, 226, 64, 41, 226, 63, 41, 226, 62, 41, + 226, 60, 41, 226, 59, 41, 226, 58, 41, 226, 57, 41, 226, 56, 41, 226, 55, + 41, 226, 54, 41, 226, 53, 41, 226, 52, 41, 226, 51, 41, 226, 49, 41, 226, + 48, 41, 226, 47, 41, 226, 46, 41, 226, 45, 41, 226, 44, 41, 226, 43, 41, + 226, 42, 41, 226, 41, 41, 226, 40, 41, 226, 38, 41, 226, 37, 41, 226, 36, + 41, 226, 35, 41, 226, 34, 41, 226, 33, 41, 226, 32, 41, 226, 31, 41, 226, + 30, 41, 226, 29, 41, 226, 27, 41, 226, 26, 41, 226, 25, 41, 226, 24, 41, + 226, 23, 41, 226, 22, 41, 226, 21, 41, 226, 20, 41, 226, 19, 41, 226, 18, + 41, 226, 16, 41, 226, 15, 41, 226, 14, 41, 226, 13, 41, 226, 12, 41, 226, + 11, 41, 226, 10, 41, 226, 9, 41, 226, 8, 41, 226, 7, 41, 226, 5, 41, 226, + 4, 41, 226, 3, 41, 226, 2, 41, 226, 1, 41, 226, 0, 41, 225, 255, 41, 225, + 254, 41, 225, 253, 41, 225, 252, 41, 225, 250, 41, 225, 249, 41, 225, + 248, 41, 225, 247, 41, 225, 246, 41, 225, 245, 41, 225, 244, 41, 225, + 243, 41, 225, 242, 41, 225, 241, 41, 225, 239, 41, 225, 238, 41, 225, + 237, 41, 225, 236, 41, 225, 235, 41, 225, 234, 41, 225, 233, 41, 225, + 232, 41, 225, 231, 41, 225, 230, 41, 225, 228, 41, 225, 227, 41, 225, + 226, 41, 225, 225, 41, 225, 224, 41, 225, 223, 41, 225, 222, 41, 225, + 221, 41, 225, 220, 41, 225, 219, 41, 225, 216, 41, 225, 215, 41, 225, + 214, 41, 225, 213, 41, 225, 212, 41, 225, 211, 41, 225, 210, 41, 225, + 209, 41, 225, 208, 41, 225, 207, 41, 225, 205, 41, 225, 204, 41, 225, + 203, 41, 225, 202, 41, 225, 201, 41, 225, 200, 41, 225, 199, 41, 225, + 198, 41, 225, 197, 41, 225, 196, 41, 225, 194, 41, 225, 193, 41, 225, + 192, 41, 225, 191, 41, 225, 190, 41, 225, 189, 41, 225, 188, 41, 225, + 187, 41, 225, 186, 41, 225, 185, 41, 225, 183, 41, 225, 182, 41, 225, + 181, 41, 225, 180, 41, 225, 179, 41, 225, 178, 41, 225, 177, 41, 225, + 176, 41, 225, 175, 41, 225, 174, 41, 225, 172, 41, 225, 171, 41, 225, + 170, 41, 225, 169, 41, 225, 168, 41, 225, 167, 41, 225, 166, 41, 225, + 165, 41, 225, 164, 41, 225, 163, 41, 225, 161, 41, 225, 160, 41, 225, + 159, 41, 225, 158, 41, 225, 157, 41, 225, 156, 41, 225, 155, }; static unsigned char phrasebook_offset1[] = { - 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 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, 16, 52, 53, 54, - 16, 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, 16, 84, 85, 86, 87, 88, - 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 100, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 101, 102, 103, 104, 105, 106, - 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 16, 120, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 121, 122, 123, 124, - 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 16, - 139, 140, 141, 142, 143, 16, 16, 16, 16, 16, 16, 144, 16, 145, 16, 146, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 147, 148, 149, 150, 151, 152, 153, 16, 154, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 155, 156, 157, 158, 159, 16, 160, 16, 161, 162, 163, 164, 165, 166, - 167, 168, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 169, 170, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 171, 172, 173, 174, 175, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 176, - 16, 177, 178, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, + 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, 17, 87, 88, 89, 90, 91, + 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 103, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 104, 105, 106, 107, 108, + 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, + 123, 124, 125, 17, 126, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 127, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 128, 129, + 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, + 144, 145, 17, 146, 147, 148, 149, 150, 17, 17, 17, 17, 17, 17, 151, 17, + 152, 17, 153, 17, 154, 17, 155, 17, 17, 17, 156, 17, 17, 17, 17, 157, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 158, 159, 160, 161, 162, 163, + 164, 17, 165, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 166, 167, 168, 169, 170, 171, 172, 173, + 174, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 175, 176, 177, 178, 179, 17, 180, 17, 181, 182, + 183, 184, 185, 186, 187, 188, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 189, 190, 191, 192, 193, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 194, 195, 196, 197, 198, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 199, 17, 200, 201, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, }; 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, 114, 118, 122, 127, 132, 136, 140, - 144, 148, 153, 158, 162, 166, 171, 175, 179, 184, 189, 194, 199, 202, - 206, 209, 213, 216, 220, 224, 229, 234, 239, 243, 248, 252, 256, 260, - 265, 270, 274, 278, 282, 286, 291, 296, 300, 304, 309, 313, 317, 322, - 327, 332, 337, 341, 344, 348, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 349, 353, 358, - 361, 364, 367, 370, 373, 376, 377, 380, 386, 394, 396, 400, 403, 405, - 408, 411, 414, 417, 421, 424, 427, 431, 433, 436, 442, 450, 457, 464, - 471, 476, 483, 489, 496, 502, 508, 516, 521, 529, 536, 542, 549, 555, - 563, 570, 578, 585, 590, 597, 604, 610, 617, 623, 629, 632, 638, 645, - 651, 658, 664, 671, 676, 682, 689, 695, 702, 708, 714, 722, 727, 735, - 742, 748, 755, 761, 769, 776, 784, 791, 796, 803, 810, 816, 823, 829, - 835, 838, 844, 851, 857, 864, 870, 877, 882, 889, 896, 903, 910, 917, - 924, 931, 938, 945, 953, 961, 969, 977, 985, 993, 1001, 1009, 1016, 1023, - 1030, 1037, 1044, 1051, 1058, 1065, 1072, 1079, 1086, 1093, 1101, 1109, - 1117, 1125, 1133, 1141, 1149, 1157, 1165, 1173, 1180, 1187, 1194, 1201, - 1209, 1217, 1225, 1233, 1241, 1249, 1257, 1263, 1268, 1273, 1281, 1289, - 1297, 1305, 1310, 1317, 1324, 1332, 1340, 1348, 1356, 1366, 1376, 1383, - 1390, 1397, 1404, 1412, 1420, 1428, 1436, 1447, 1452, 1457, 1464, 1471, - 1478, 1485, 1492, 1499, 1504, 1509, 1516, 1523, 1531, 1539, 1547, 1555, - 1562, 1569, 1577, 1585, 1593, 1601, 1609, 1617, 1625, 1633, 1641, 1649, - 1656, 1663, 1669, 1675, 1682, 1689, 1696, 1703, 1711, 1719, 1726, 1733, - 1740, 1747, 1755, 1763, 1771, 1779, 1786, 1793, 1800, 1808, 1816, 1824, - 1832, 1837, 1843, 1849, 1856, 1863, 1868, 1873, 1879, 1886, 1893, 1900, - 1907, 1915, 1923, 1929, 1934, 1939, 1945, 1952, 1959, 1966, 1971, 1976, - 1981, 1988, 1995, 2002, 2009, 2016, 2021, 2029, 2039, 2047, 2054, 2061, - 2066, 2071, 2078, 2085, 2089, 2094, 2099, 2104, 2111, 2120, 2127, 2134, - 2143, 2150, 2157, 2162, 2169, 2176, 2183, 2190, 2197, 2202, 2209, 2216, - 2224, 2229, 2234, 2239, 2249, 2253, 2259, 2265, 2271, 2277, 2285, 2298, - 2306, 2311, 2321, 2326, 2331, 2341, 2346, 2353, 2360, 2368, 2376, 2383, - 2390, 2397, 2404, 2414, 2424, 2433, 2442, 2452, 2462, 2472, 2482, 2487, - 2497, 2507, 2517, 2527, 2535, 2543, 2550, 2557, 2565, 2573, 2581, 2589, - 2596, 2603, 2613, 2623, 2631, 2639, 2647, 2652, 2662, 2667, 2674, 2681, - 2686, 2691, 2699, 2707, 2717, 2727, 2734, 2741, 2749, 2757, 2765, 2773, - 2782, 2791, 2799, 2807, 2816, 2825, 2834, 2843, 2853, 2863, 2871, 2879, - 2888, 2897, 2906, 2915, 2925, 2935, 2943, 2951, 2960, 2969, 2978, 2987, - 2996, 3005, 3010, 3015, 3023, 3031, 3041, 3049, 3054, 3059, 3066, 3073, - 3080, 3087, 3094, 3101, 3111, 3121, 3131, 3141, 3148, 3155, 3165, 3175, - 3183, 3191, 3199, 3207, 3215, 3222, 3229, 3236, 3242, 3249, 3256, 3263, - 3272, 3282, 3292, 3299, 3306, 3312, 3317, 3322, 3328, 3334, 3341, 3348, - 3359, 3369, 3376, 3383, 3390, 3397, 3402, 3407, 3413, 3419, 3425, 3433, - 3441, 3448, 3453, 3458, 3465, 3471, 3478, 3487, 3496, 3505, 3512, 3517, - 3522, 3527, 3534, 3539, 3546, 3553, 3560, 3565, 3570, 3579, 3587, 3596, - 3601, 3606, 3616, 3623, 3631, 3640, 3645, 3651, 3657, 3664, 3669, 3674, - 3684, 3692, 3701, 3709, 3717, 3726, 3731, 3738, 3745, 3750, 3761, 3769, - 3777, 3783, 3792, 3797, 3802, 3809, 3814, 3820, 3826, 3832, 3841, 3849, - 3854, 3862, 3868, 3876, 3884, 3890, 3896, 3902, 3910, 3918, 3923, 3931, - 3937, 3942, 3949, 3957, 3966, 3973, 3980, 3990, 3997, 4004, 4014, 4021, - 4028, 4035, 4041, 4047, 4056, 4068, 4072, 4079, 4084, 4088, 4093, 4101, - 4108, 4113, 4118, 4122, 4127, 4132, 4136, 4141, 4147, 4153, 4159, 4166, - 4171, 4176, 4181, 4186, 4192, 4194, 4199, 4203, 4209, 4215, 4221, 4226, - 4233, 4240, 4246, 4253, 4261, 4269, 4274, 4279, 4283, 4288, 4290, 4292, - 4295, 4297, 4299, 4304, 4309, 4315, 4320, 4324, 4328, 4333, 4341, 4347, - 4352, 4358, 4363, 4369, 4377, 4385, 4389, 4393, 4398, 4404, 4410, 4416, - 4422, 4427, 4435, 4444, 4453, 4457, 4463, 4470, 4477, 4484, 4491, 4495, - 4501, 4506, 4511, 4516, 4521, 4523, 4526, 4529, 4532, 4535, 4537, 4541, - 4545, 4551, 4554, 4559, 4565, 4571, 4574, 4579, 4584, 4588, 4593, 4599, - 4605, 4611, 4616, 4621, 4626, 4629, 4635, 4640, 4645, 4649, 4654, 4660, - 4666, 4669, 4673, 4677, 4681, 4684, 4687, 4692, 4696, 4703, 4707, 4713, - 4717, 4723, 4727, 4731, 4735, 4740, 4745, 4751, 4756, 4763, 4769, 4775, - 4781, 4784, 4788, 4792, 4795, 4799, 4804, 4809, 4813, 4817, 4823, 4827, - 4831, 4836, 4842, 4847, 4852, 4856, 4862, 4867, 4872, 4877, 4882, 4888, - 4891, 4895, 4900, 4905, 4914, 4920, 4925, 4929, 4934, 4938, 4943, 4947, - 4951, 4956, 4959, 4965, 4970, 4975, 4980, 4985, 4990, 4995, 5001, 5007, - 5012, 5017, 5022, 5028, 5033, 5039, 5044, 5049, 5056, 5063, 5066, 5070, - 5077, 0, 0, 5084, 5087, 5095, 5104, 5114, 0, 0, 0, 0, 0, 5118, 5121, - 5126, 5134, 5139, 5147, 5155, 0, 5163, 0, 5171, 5179, 5187, 5198, 5203, - 5208, 5213, 5218, 5223, 5228, 5233, 5238, 5243, 5248, 5253, 5258, 5263, - 5268, 5273, 5278, 0, 5283, 5288, 5293, 5298, 5303, 5308, 5313, 5318, - 5326, 5334, 5342, 5350, 5358, 5366, 5377, 5382, 5387, 5392, 5397, 5402, - 5407, 5412, 5417, 5422, 5427, 5432, 5437, 5442, 5447, 5452, 5457, 5462, - 5468, 5473, 5478, 5483, 5488, 5493, 5498, 5503, 5511, 5519, 5527, 5535, - 5543, 5548, 5552, 5556, 5563, 5573, 5583, 5587, 5591, 5595, 5601, 5608, - 5612, 5617, 5621, 5626, 5630, 5635, 5639, 5644, 5649, 5654, 5659, 5664, - 5669, 5674, 5679, 5684, 5689, 5694, 5699, 5704, 5709, 5714, 5718, 5722, - 5728, 5732, 5737, 5743, 5750, 5755, 5760, 5767, 5772, 5777, 5783, 5791, - 5800, 5810, 5818, 5823, 5828, 5833, 5840, 5845, 5851, 5856, 5861, 5866, - 5871, 5876, 5881, 5889, 5895, 5900, 5904, 5909, 5914, 5919, 5924, 5929, - 5934, 5939, 5943, 5949, 5953, 5958, 5963, 5968, 5972, 5977, 5982, 5987, - 5992, 5996, 6001, 6005, 6010, 6015, 6020, 6025, 6031, 6036, 6042, 6046, - 6051, 6055, 6059, 6064, 6069, 6074, 6079, 6084, 6089, 6094, 6098, 6104, - 6108, 6113, 6118, 6123, 6127, 6132, 6137, 6142, 6147, 6151, 6156, 6160, - 6165, 6170, 6175, 6180, 6186, 6191, 6197, 6201, 6206, 6210, 6218, 6223, - 6228, 6233, 6240, 6245, 6251, 6256, 6261, 6266, 6271, 6276, 6281, 6289, - 6295, 6300, 6305, 6310, 6315, 6320, 6326, 6332, 6339, 6346, 6355, 6364, - 6371, 6378, 6387, 6396, 6401, 6406, 6411, 6416, 6421, 6426, 6431, 6436, - 6447, 6458, 6463, 6468, 6475, 6482, 6490, 6498, 6503, 6508, 6513, 6518, - 6522, 6526, 6530, 6535, 6540, 6544, 6551, 6556, 6566, 6576, 6582, 6588, - 6596, 6604, 6612, 6620, 6627, 6634, 6643, 6652, 6660, 6668, 6676, 6684, - 6691, 6698, 6705, 6712, 6718, 6724, 6730, 6736, 6744, 6752, 6759, 6766, - 6775, 6784, 6790, 6796, 6804, 6812, 6820, 6828, 6834, 6840, 6848, 6856, - 6864, 6872, 6879, 6886, 6894, 6902, 6910, 6918, 6923, 6928, 6935, 6942, - 6952, 6962, 6966, 6974, 6982, 6988, 6994, 7002, 7010, 7017, 7024, 7032, - 7040, 7047, 7054, 7062, 7070, 7075, 7082, 7089, 7095, 7101, 7107, 7113, - 7121, 7129, 7134, 7139, 7146, 7153, 7160, 7167, 7174, 7181, 7188, 7195, - 7203, 7211, 7218, 7225, 7231, 7237, 7243, 7249, 7257, 7265, 7271, 7277, - 7284, 7291, 7297, 7303, 7310, 7317, 7324, 7331, 7339, 7347, 7354, 7361, - 7370, 7379, 7386, 7393, 7400, 7407, 7414, 7421, 7428, 7435, 7442, 7449, - 7456, 7463, 7470, 7477, 7484, 7491, 7498, 7505, 7512, 7519, 7525, 7531, - 7538, 7545, 7550, 7555, 7560, 7565, 7570, 7575, 7580, 7585, 7590, 7595, - 7601, 7607, 7616, 7625, 7634, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 7643, 7648, 7653, 7658, 7663, 7668, 7673, 7678, 7683, 7687, 7692, 7697, - 7702, 7707, 7712, 7717, 7722, 7727, 7732, 7737, 7742, 7747, 7752, 7757, - 7762, 7767, 7772, 7777, 7781, 7786, 7791, 7796, 7801, 7806, 7811, 7816, - 7821, 7826, 0, 0, 7831, 7838, 7841, 7845, 7849, 7852, 7856, 0, 7860, - 7865, 7870, 7875, 7880, 7885, 7890, 7895, 7900, 7904, 7909, 7914, 7919, - 7924, 7929, 7934, 7939, 7944, 7949, 7954, 7959, 7964, 7969, 7974, 7979, - 7984, 7989, 7994, 7998, 8003, 8008, 8013, 8018, 8023, 8028, 8033, 8038, - 8043, 8048, 0, 8055, 8060, 0, 0, 0, 0, 0, 0, 8063, 8068, 8073, 8078, - 8085, 8092, 8097, 8102, 8107, 8112, 8117, 8122, 8127, 8134, 8139, 8146, - 8153, 8158, 8165, 8170, 8175, 8180, 8187, 8192, 8197, 8204, 8213, 8218, - 8223, 8228, 8233, 8239, 8244, 8251, 8258, 8265, 8270, 8275, 8280, 8285, - 8290, 8295, 8305, 8310, 8318, 8323, 8328, 8333, 8338, 8345, 8352, 8359, - 8365, 8370, 8377, 0, 0, 0, 0, 0, 0, 0, 0, 8384, 8388, 8392, 8396, 8400, - 8404, 8408, 8412, 8416, 8420, 8424, 8429, 8433, 8437, 8442, 8446, 8451, - 8455, 8459, 8463, 8468, 8472, 8477, 8481, 8485, 8489, 8493, 0, 0, 0, 0, - 0, 8497, 8504, 8512, 8519, 8524, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8529, - 8532, 8536, 8541, 0, 0, 8545, 8551, 8557, 8560, 8567, 8576, 8579, 8582, - 8587, 8593, 8597, 8605, 8611, 8617, 8625, 8629, 8634, 8644, 8649, 8653, - 8657, 8661, 0, 0, 8664, 8671, 0, 8675, 8679, 8686, 8692, 8699, 8705, - 8711, 8715, 8719, 8725, 8729, 8733, 8737, 8741, 8745, 8749, 8753, 8757, - 8761, 8765, 8769, 8773, 8777, 8781, 8785, 8789, 8793, 8801, 8809, 8818, - 8827, 8836, 8839, 8843, 8847, 8851, 8855, 8859, 8863, 8867, 8871, 8876, - 8880, 8883, 8886, 8889, 8892, 8895, 8898, 8901, 8904, 8908, 8911, 8914, - 8919, 8924, 8930, 8933, 8940, 8949, 8954, 8958, 0, 8965, 8970, 8974, - 8978, 8982, 8986, 8990, 8994, 8998, 9002, 9006, 9010, 9015, 9020, 9027, - 9033, 9039, 9045, 9050, 9058, 9066, 9071, 9077, 9083, 9089, 9095, 9099, - 9103, 9107, 9114, 9124, 9128, 9132, 9136, 9142, 9150, 9154, 9158, 9165, - 9169, 9173, 9177, 9184, 9191, 9203, 9207, 9211, 9215, 9225, 9234, 9238, - 9245, 9252, 9259, 9268, 9279, 9287, 9291, 9300, 9311, 9319, 9332, 9340, - 9348, 9356, 9364, 9370, 9379, 9386, 9390, 9398, 9402, 9409, 9417, 9421, - 9427, 9434, 9441, 9445, 9453, 9457, 9464, 9468, 9476, 9480, 9488, 9494, - 9500, 9507, 9514, 9521, 9527, 9531, 9538, 9546, 9552, 9559, 9566, 9572, - 9581, 9589, 9596, 9602, 9606, 9609, 9613, 9619, 9627, 9631, 9637, 9643, - 9649, 9656, 9659, 9666, 9671, 9679, 9684, 9688, 9700, 9712, 9718, 9724, - 9729, 9735, 9740, 9746, 9756, 9763, 9772, 9782, 9788, 9793, 9798, 9802, - 9806, 9811, 9816, 9822, 9830, 9838, 9849, 9854, 9862, 9870, 9877, 9883, - 9889, 9895, 9901, 9907, 9913, 9919, 9925, 9931, 9938, 9945, 9952, 9958, - 9966, 9974, 9980, 9987, 9994, 9999, 10004, 10008, 10015, 10022, 10031, - 10040, 10043, 10048, 10053, 0, 10058, 10062, 10066, 10072, 10076, 10080, - 10086, 10090, 10098, 10102, 10106, 10110, 10114, 10118, 10124, 10128, - 10134, 10138, 10142, 10146, 10150, 10154, 10159, 10162, 10166, 10171, - 10175, 10179, 10183, 10187, 10191, 10197, 10203, 10209, 10213, 10217, - 10222, 10226, 10230, 10235, 10239, 10243, 10250, 10257, 10261, 10265, - 10270, 10274, 10278, 10281, 10286, 10289, 10292, 10297, 10302, 10306, - 10310, 10316, 10322, 10325, 0, 0, 10328, 10334, 10340, 10346, 10356, - 10368, 10380, 10397, 10409, 10420, 10427, 10434, 10445, 10460, 10471, - 10477, 10486, 10494, 10506, 10516, 10524, 10536, 10543, 10551, 10563, - 10569, 10575, 10583, 10591, 10598, 10603, 10613, 10620, 10630, 10640, - 10653, 10667, 10681, 10691, 10702, 10713, 10726, 10739, 10753, 10765, - 10777, 10790, 10803, 10815, 10828, 10836, 10844, 10849, 10854, 10859, - 10864, 10869, 10874, 10879, 10884, 10889, 10894, 10899, 10904, 10909, - 10914, 10919, 10924, 10929, 10934, 10939, 10944, 10949, 10954, 10959, - 10964, 10969, 10974, 10979, 10984, 10989, 10994, 10999, 11004, 11008, - 11013, 11018, 11023, 11028, 11033, 11037, 11041, 11045, 11049, 11053, - 11057, 11061, 11065, 11069, 11073, 11077, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 11082, 11086, 11089, 11092, 11095, 11098, 11101, 11104, - 11107, 11110, 11113, 11116, 11120, 11123, 11126, 11129, 11133, 11136, - 11140, 11143, 11147, 11150, 11154, 11158, 11162, 11166, 11169, 11173, - 11177, 11181, 11185, 11188, 11192, 11198, 11201, 11205, 11209, 11212, - 11216, 11219, 11225, 11231, 11237, 11242, 11249, 11256, 11264, 11271, - 11277, 11283, 11290, 11295, 11300, 11305, 11310, 11316, 11320, 11323, - 11327, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11330, 11334, 11338, - 11342, 11347, 11350, 11354, 11357, 11361, 11364, 11368, 11372, 11376, - 11381, 11386, 11389, 11393, 11398, 11403, 11406, 11410, 11413, 11417, - 11421, 11425, 11429, 11433, 11437, 11441, 11445, 11449, 11453, 11457, - 11461, 11465, 11469, 11473, 11477, 11481, 11485, 11489, 11493, 11496, - 11500, 11504, 11508, 11511, 11514, 11517, 11521, 11525, 11529, 11533, - 11537, 11541, 11545, 11549, 0, 0, 11552, 11556, 11560, 11565, 11569, - 11574, 11578, 11583, 11588, 11594, 11600, 11606, 11610, 11615, 11621, - 11627, 11631, 11636, 0, 0, 11640, 11643, 11649, 11655, 11660, 0, 0, 0, - 11665, 11669, 11673, 11677, 11681, 11685, 11689, 11693, 11697, 11702, - 11707, 11712, 11718, 11721, 11725, 11729, 11732, 11735, 11738, 11741, - 11744, 11747, 11750, 11753, 11756, 11760, 11767, 0, 0, 0, 0, 0, 0, 0, 0, - 11772, 11776, 11780, 11786, 11790, 0, 11794, 11798, 11802, 0, 11806, - 11809, 11813, 11816, 11820, 11823, 11827, 11831, 0, 0, 11835, 11838, 0, - 0, 11842, 11845, 11849, 11852, 11856, 11860, 11864, 11868, 11872, 11876, - 11880, 11884, 11888, 11892, 11896, 11900, 11904, 11908, 11912, 11916, - 11920, 11924, 0, 11928, 11931, 11935, 11939, 11943, 11946, 11949, 0, - 11952, 0, 0, 0, 11956, 11960, 11964, 11968, 0, 0, 11971, 11975, 11979, - 11984, 11988, 11993, 11997, 12002, 12007, 0, 0, 12013, 12017, 0, 0, - 12022, 12026, 12031, 12035, 0, 0, 0, 0, 0, 0, 0, 0, 12041, 0, 0, 0, 0, - 12047, 12051, 0, 12055, 12059, 12064, 12069, 12074, 0, 0, 12080, 12084, - 12087, 12090, 12093, 12096, 12099, 12102, 12105, 12108, 12111, 12120, - 12128, 12132, 12136, 12142, 12148, 12154, 12160, 12174, 12181, 0, 0, 0, - 0, 0, 0, 12184, 12190, 12194, 0, 12198, 12201, 12205, 12208, 12212, - 12215, 0, 0, 0, 0, 12219, 12223, 0, 0, 12227, 12231, 12235, 12238, 12242, - 12246, 12250, 12254, 12258, 12262, 12266, 12270, 12274, 12278, 12282, - 12286, 12290, 12294, 12298, 12302, 12306, 12310, 0, 12314, 12317, 12321, - 12325, 12329, 12332, 12335, 0, 12338, 12342, 0, 12346, 12350, 0, 12354, - 12358, 0, 0, 12361, 0, 12365, 12370, 12374, 12379, 12383, 0, 0, 0, 0, - 12388, 12393, 0, 0, 12398, 12403, 12408, 0, 0, 0, 12412, 0, 0, 0, 0, 0, - 0, 0, 12416, 12420, 12424, 12428, 0, 12432, 0, 0, 0, 0, 0, 0, 0, 12436, - 12440, 12443, 12446, 12449, 12452, 12455, 12458, 12461, 12464, 12467, - 12470, 12473, 12476, 12479, 12484, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 12488, 12492, 12496, 0, 12500, 12503, 12507, 12510, 12514, 12517, 12521, - 12525, 12529, 0, 12534, 12537, 12541, 0, 12546, 12549, 12553, 12556, - 12560, 12564, 12568, 12572, 12576, 12580, 12584, 12588, 12592, 12596, - 12600, 12604, 12608, 12612, 12616, 12620, 12624, 12628, 0, 12632, 12635, - 12639, 12643, 12647, 12650, 12653, 0, 12656, 12660, 0, 12664, 12668, - 12672, 12676, 12680, 0, 0, 12683, 12687, 12691, 12696, 12700, 12705, - 12709, 12714, 12719, 12725, 0, 12731, 12735, 12740, 0, 12746, 12750, - 12755, 0, 0, 12759, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12762, - 12767, 12772, 12777, 0, 0, 12783, 12787, 12790, 12793, 12796, 12799, - 12802, 12805, 12808, 12811, 0, 12814, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 12818, 12822, 12826, 0, 12830, 12833, 12837, 12840, 12844, - 12847, 12851, 12855, 0, 0, 12859, 12862, 0, 0, 12866, 12869, 12873, - 12876, 12880, 12884, 12888, 12892, 12896, 12900, 12904, 12908, 12912, - 12916, 12920, 12924, 12928, 12932, 12936, 12940, 12944, 12948, 0, 12952, - 12955, 12959, 12963, 12967, 12970, 12973, 0, 12976, 12980, 0, 12984, - 12988, 12992, 12996, 13000, 0, 0, 13003, 13007, 13011, 13016, 13020, - 13025, 13029, 13034, 13039, 0, 0, 13045, 13049, 0, 0, 13054, 13058, - 13063, 0, 0, 0, 0, 0, 0, 0, 0, 13067, 13073, 0, 0, 0, 0, 13079, 13083, 0, - 13087, 13091, 13096, 13101, 13106, 0, 0, 13112, 13116, 13119, 13122, - 13125, 13128, 13131, 13134, 13137, 13140, 13143, 13146, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13150, 13154, 0, 13158, 13161, 13165, - 13168, 13172, 13175, 0, 0, 0, 13179, 13182, 13186, 0, 13190, 13193, - 13197, 13201, 0, 0, 0, 13204, 13208, 0, 13212, 0, 13216, 13220, 0, 0, 0, - 13224, 13228, 0, 0, 0, 13232, 13236, 13240, 0, 0, 0, 13243, 13246, 13249, - 13252, 13256, 13260, 13264, 13268, 13272, 13276, 13280, 13284, 0, 0, 0, - 0, 13287, 13292, 13296, 13301, 13305, 0, 0, 0, 13310, 13314, 13319, 0, - 13324, 13328, 13333, 13338, 0, 0, 13342, 0, 0, 0, 0, 0, 0, 13345, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13351, 13355, 13358, 13361, 13364, - 13367, 13370, 13373, 13376, 13379, 13382, 13386, 13391, 13396, 13400, - 13404, 13408, 13412, 13416, 13421, 13425, 0, 0, 0, 0, 0, 0, 13428, 13432, - 13436, 0, 13440, 13443, 13447, 13450, 13454, 13457, 13461, 13465, 0, - 13469, 13472, 13476, 0, 13480, 13483, 13487, 13491, 13494, 13498, 13502, - 13506, 13510, 13514, 13518, 13522, 13526, 13530, 13534, 13538, 13542, - 13546, 13550, 13554, 13558, 13562, 13566, 0, 13570, 13573, 13577, 13581, - 13585, 13588, 13591, 13594, 13598, 13602, 0, 13606, 13610, 13614, 13618, - 13622, 0, 0, 0, 13625, 13629, 13634, 13638, 13643, 13647, 13652, 13657, - 0, 13663, 13667, 13672, 0, 13677, 13681, 13686, 13691, 0, 0, 0, 0, 0, 0, - 0, 13695, 13699, 0, 13705, 13709, 0, 0, 0, 0, 0, 0, 13713, 13718, 13723, - 13728, 0, 0, 13734, 13738, 13741, 13744, 13747, 13750, 13753, 13756, - 13759, 13762, 0, 0, 0, 0, 0, 0, 0, 0, 13765, 13778, 13790, 13802, 13814, - 13826, 13838, 13850, 0, 0, 13854, 13858, 0, 13862, 13865, 13869, 13872, - 13876, 13879, 13883, 13887, 0, 13891, 13894, 13898, 0, 13902, 13905, - 13909, 13913, 13916, 13920, 13924, 13928, 13932, 13936, 13940, 13944, - 13948, 13952, 13956, 13960, 13964, 13968, 13972, 13976, 13980, 13984, - 13988, 0, 13992, 13995, 13999, 14003, 14007, 14010, 14013, 14016, 14020, - 14024, 0, 14028, 14032, 14036, 14040, 14044, 0, 0, 14047, 14051, 14055, - 14060, 14064, 14069, 14073, 14078, 14083, 0, 14089, 14093, 14098, 0, - 14103, 14107, 14112, 14117, 0, 0, 0, 0, 0, 0, 0, 14121, 14125, 0, 0, 0, - 0, 0, 0, 0, 14131, 0, 14135, 14140, 14145, 14150, 0, 0, 14156, 14160, - 14163, 14166, 14169, 14172, 14175, 14178, 14181, 14184, 0, 14187, 14191, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 14195, 14199, 0, 14203, - 14206, 14210, 14213, 14217, 14220, 14224, 14228, 0, 14232, 14235, 14239, - 0, 14243, 14246, 14250, 14254, 14257, 14261, 14265, 14269, 14273, 14277, - 14281, 14285, 14289, 14293, 14297, 14301, 14305, 14309, 14313, 14317, - 14321, 14325, 14329, 0, 14333, 14336, 14340, 14344, 14348, 14351, 14354, - 14357, 14361, 14365, 14369, 14373, 14377, 14381, 14385, 14389, 0, 0, 0, - 14392, 14396, 14401, 14405, 14410, 14414, 14419, 14424, 0, 14430, 14434, - 14439, 0, 14444, 14448, 14453, 14458, 0, 0, 0, 0, 0, 0, 0, 0, 0, 14462, - 0, 0, 0, 0, 0, 0, 0, 0, 14468, 14473, 14478, 14483, 0, 0, 14489, 14493, - 14496, 14499, 14502, 14505, 14508, 14511, 14514, 14517, 14520, 14524, - 14529, 14534, 14540, 14546, 0, 0, 0, 14552, 14556, 14562, 14567, 14573, - 14578, 14584, 0, 0, 14590, 14594, 0, 14598, 14602, 14606, 14610, 14614, - 14618, 14622, 14626, 14630, 14634, 14638, 14642, 14646, 14650, 14654, - 14658, 14662, 14666, 0, 0, 0, 14670, 14676, 14682, 14688, 14694, 14700, - 14706, 14712, 14718, 14724, 14730, 14736, 14744, 14750, 14756, 14762, - 14768, 14774, 14780, 14786, 14792, 14798, 14804, 14810, 0, 14816, 14822, - 14828, 14834, 14840, 14846, 14850, 14856, 14860, 0, 14864, 0, 0, 14870, - 14874, 14880, 14886, 14892, 14896, 14902, 0, 0, 0, 14906, 0, 0, 0, 0, - 14910, 14915, 14922, 14929, 14936, 14943, 0, 14950, 0, 14957, 14962, - 14967, 14974, 14981, 14990, 15001, 15010, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 15015, 15022, 15029, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 15034, 15040, 15046, 15052, 15058, 15064, 15070, 15076, 15082, - 15088, 15094, 15100, 15106, 15112, 15118, 15123, 15129, 15135, 15141, - 15147, 15153, 15158, 15164, 15170, 15176, 15182, 15188, 15194, 15200, - 15206, 15212, 15218, 15224, 15229, 15235, 15241, 15245, 15251, 15255, - 15261, 15267, 15273, 15279, 15285, 15291, 15296, 15302, 15306, 15311, - 15317, 15323, 15329, 15334, 15340, 15346, 15352, 15357, 15363, 0, 0, 0, - 0, 15367, 15373, 15378, 15384, 15389, 15397, 15405, 15409, 15413, 15417, - 15423, 15429, 15435, 15441, 15445, 15449, 15453, 15457, 15461, 15464, - 15467, 15470, 15473, 15476, 15479, 15482, 15485, 15488, 15492, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15496, 15500, 0, 15506, 0, 0, 15512, 15516, - 0, 15520, 0, 0, 15526, 0, 0, 0, 0, 0, 0, 15530, 15534, 15537, 15543, 0, - 15549, 15553, 15557, 15561, 15567, 15573, 15579, 0, 15585, 15589, 15593, - 0, 15599, 0, 15605, 0, 0, 15609, 15615, 0, 15621, 15624, 15630, 15633, - 15637, 15644, 15649, 15654, 15658, 15663, 15668, 15673, 15677, 0, 15682, - 15689, 15695, 0, 0, 15701, 15705, 15710, 15714, 15719, 0, 15724, 0, - 15729, 15735, 15741, 15747, 15753, 15757, 0, 0, 15760, 15764, 15767, - 15770, 15773, 15776, 15779, 15782, 15785, 15788, 0, 0, 15791, 15796, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 15801, 15805, 15816, 15831, 15846, 15856, - 15867, 15880, 15891, 15897, 15905, 15915, 15921, 15929, 15933, 15939, - 15945, 15953, 15963, 15971, 15984, 15990, 15998, 16006, 16018, 16025, - 16033, 16041, 16049, 16057, 16065, 16073, 16083, 16087, 16090, 16093, - 16096, 16099, 16102, 16105, 16108, 16111, 16114, 16118, 16122, 16126, - 16130, 16134, 16138, 16142, 16146, 16150, 16155, 16161, 16171, 16185, - 16195, 16201, 16207, 16215, 16223, 16231, 16239, 16245, 16251, 16254, - 16258, 16262, 16266, 16270, 16274, 16278, 0, 16282, 16286, 16290, 16294, - 16298, 16302, 16306, 16310, 16314, 16318, 16322, 16326, 16329, 16333, - 16337, 16341, 16344, 16348, 16352, 16356, 16360, 16364, 16368, 16372, - 16376, 16379, 16382, 16386, 16390, 16394, 16398, 16401, 16404, 16408, - 16413, 16417, 0, 0, 0, 0, 16421, 16426, 16430, 16435, 16439, 16444, - 16449, 16455, 16460, 16466, 16470, 16475, 16479, 16484, 16494, 16500, - 16505, 16511, 16521, 16527, 16531, 16535, 16541, 16547, 16555, 16561, - 16569, 0, 0, 0, 0, 16577, 16582, 16588, 16594, 16600, 16606, 16612, - 16618, 0, 16624, 16630, 16636, 16642, 16648, 16654, 16660, 16666, 16672, - 16678, 16684, 16690, 16695, 16701, 16707, 16713, 16718, 16724, 16730, - 16736, 16742, 16748, 16754, 16760, 16766, 16771, 16776, 16782, 16788, - 16794, 16800, 16805, 16810, 16816, 16824, 16831, 0, 16838, 16845, 16858, - 16865, 16872, 16880, 16888, 16894, 16900, 16906, 16916, 16921, 16927, - 16937, 16947, 0, 16957, 16967, 16975, 16987, 16999, 17005, 17019, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17034, 17037, 17041, - 17045, 17049, 17053, 17057, 17061, 17065, 17069, 17073, 17077, 17081, - 17085, 17089, 17093, 17097, 17101, 17105, 17109, 17113, 17117, 17120, - 17124, 17128, 17132, 17135, 17138, 17141, 17145, 17149, 17153, 17156, - 17160, 17163, 17168, 17171, 17175, 17178, 17182, 17185, 17190, 17193, - 17197, 17204, 17209, 17213, 17218, 17222, 17227, 17231, 17236, 17243, - 17249, 17254, 17258, 17262, 17266, 17270, 17274, 17280, 17286, 17293, - 17299, 17305, 17309, 17312, 17315, 17318, 17321, 17324, 17327, 17330, - 17333, 17336, 17342, 17346, 17350, 17354, 17358, 17362, 17366, 17370, - 17374, 17379, 17383, 17388, 17393, 17399, 17404, 17410, 17416, 17422, - 17428, 17434, 17443, 17451, 17460, 17468, 17477, 17486, 17497, 17507, - 17517, 17528, 17539, 17549, 17559, 17569, 17579, 17589, 17599, 17609, - 17619, 17627, 17634, 17640, 17647, 17652, 17658, 17664, 17670, 17676, - 17682, 17688, 17694, 17700, 17706, 17712, 17718, 17723, 17732, 17739, - 17745, 17752, 17760, 17766, 17772, 17778, 17784, 17792, 17800, 17810, - 17818, 17826, 17832, 17837, 17842, 17847, 17852, 17857, 17862, 17867, - 17872, 0, 0, 0, 0, 17877, 17882, 17888, 17893, 17898, 17903, 17908, - 17913, 17918, 17923, 17928, 17933, 17938, 17943, 17948, 17953, 17958, - 17963, 17968, 17973, 17978, 17983, 17988, 17993, 17998, 18003, 18008, - 18013, 18018, 18023, 18028, 18033, 18038, 18043, 18048, 18053, 18058, - 18063, 18068, 18073, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 18078, 18082, 18086, - 18090, 18094, 18098, 18102, 18106, 18110, 18114, 18118, 18122, 18126, - 18130, 18134, 18138, 18142, 18146, 18150, 18154, 18158, 18162, 18166, - 18170, 18174, 18178, 18182, 18186, 18190, 18194, 18198, 18202, 18206, - 18210, 18214, 18218, 18222, 18226, 18230, 18234, 18238, 18242, 18247, - 18251, 18256, 0, 0, 0, 18261, 18265, 18269, 18273, 18277, 18281, 18285, - 18289, 18293, 18297, 18301, 18305, 18309, 18313, 18317, 18321, 18325, - 18329, 18333, 18337, 18341, 18345, 18349, 18353, 18357, 18361, 18365, - 18369, 18373, 18377, 18381, 18385, 18389, 18393, 18397, 18401, 18405, - 18409, 18413, 18417, 18421, 18425, 18429, 18433, 18437, 18441, 18445, - 18449, 18453, 18457, 18461, 18465, 18469, 18473, 18477, 18481, 18485, - 18489, 18493, 18497, 18501, 18505, 18509, 18513, 18517, 18521, 18525, - 18529, 18533, 18537, 18541, 18545, 18549, 18553, 18557, 18561, 18565, - 18569, 18573, 18577, 18581, 18585, 18589, 18593, 18597, 18601, 18605, - 18609, 18613, 18617, 0, 0, 0, 0, 0, 18621, 18625, 18629, 18632, 18636, - 18639, 18643, 18647, 18650, 18654, 18658, 18661, 18665, 18669, 18673, - 18677, 18680, 18684, 18688, 18692, 18696, 18700, 18704, 18707, 18711, - 18715, 18719, 18723, 18727, 18731, 18735, 18739, 18743, 18747, 18751, - 18755, 18759, 18763, 18767, 18771, 18775, 18779, 18783, 18787, 18791, - 18795, 18799, 18803, 18807, 18811, 18815, 18819, 18823, 18827, 18831, - 18835, 18839, 18843, 18847, 18851, 18855, 18859, 18863, 18867, 18871, - 18875, 18879, 18883, 0, 0, 0, 0, 0, 18887, 18891, 18895, 18899, 18903, - 18907, 18911, 18915, 18919, 18923, 18927, 18931, 18935, 18939, 18943, - 18947, 18951, 18955, 18959, 18963, 18967, 18971, 18975, 18979, 18983, - 18987, 18991, 18995, 18999, 19003, 19007, 19011, 19015, 19019, 19023, - 19027, 19031, 19035, 19039, 19043, 19047, 19051, 19055, 19059, 19063, - 19067, 19071, 19075, 19079, 19083, 19087, 19091, 19095, 19099, 19103, - 19107, 19111, 19115, 19119, 19123, 19127, 19131, 19135, 19139, 19143, - 19147, 19151, 19155, 19159, 19163, 19167, 19171, 19175, 19179, 19183, - 19187, 19191, 19195, 19199, 19203, 19207, 19211, 0, 0, 0, 0, 0, 0, 19215, - 19218, 19222, 19226, 19230, 19234, 19238, 19242, 19246, 19250, 19254, + 75, 78, 82, 86, 91, 96, 101, 105, 110, 115, 120, 124, 129, 134, 138, 142, + 146, 150, 155, 160, 164, 168, 173, 177, 182, 187, 192, 197, 202, 205, + 209, 212, 216, 219, 223, 227, 232, 237, 242, 246, 251, 256, 261, 265, + 270, 275, 279, 283, 287, 291, 296, 301, 305, 309, 314, 318, 323, 328, + 333, 338, 343, 347, 350, 354, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 356, 360, 365, + 368, 371, 374, 377, 380, 383, 385, 388, 394, 402, 404, 408, 411, 413, + 416, 419, 422, 425, 429, 432, 435, 439, 441, 444, 450, 458, 465, 472, + 479, 484, 491, 497, 504, 511, 518, 526, 531, 539, 546, 552, 559, 566, + 574, 581, 589, 597, 602, 610, 617, 623, 630, 637, 644, 647, 653, 660, + 666, 673, 680, 687, 692, 698, 705, 711, 718, 725, 732, 740, 745, 753, + 760, 766, 773, 780, 788, 795, 803, 811, 816, 824, 831, 837, 844, 851, + 858, 861, 867, 874, 880, 887, 894, 901, 906, 914, 921, 928, 935, 942, + 949, 956, 963, 970, 978, 986, 994, 1002, 1010, 1018, 1026, 1034, 1041, + 1048, 1055, 1062, 1069, 1076, 1083, 1090, 1097, 1104, 1111, 1118, 1126, + 1134, 1142, 1150, 1158, 1166, 1174, 1182, 1190, 1198, 1205, 1212, 1220, + 1228, 1236, 1244, 1252, 1260, 1268, 1276, 1284, 1290, 1295, 1300, 1308, + 1316, 1324, 1332, 1337, 1344, 1351, 1359, 1367, 1375, 1383, 1393, 1403, + 1410, 1417, 1424, 1431, 1439, 1447, 1455, 1463, 1474, 1479, 1484, 1491, + 1498, 1505, 1512, 1519, 1526, 1531, 1536, 1543, 1550, 1558, 1566, 1574, + 1582, 1589, 1596, 1604, 1612, 1620, 1628, 1636, 1644, 1652, 1660, 1668, + 1676, 1683, 1690, 1697, 1704, 1711, 1718, 1725, 1732, 1740, 1748, 1755, + 1762, 1769, 1776, 1784, 1792, 1800, 1808, 1816, 1823, 1830, 1838, 1846, + 1854, 1862, 1867, 1873, 1879, 1886, 1893, 1898, 1903, 1909, 1916, 1923, + 1930, 1937, 1945, 1953, 1959, 1964, 1969, 1975, 1982, 1989, 1996, 2001, + 2006, 2011, 2018, 2025, 2032, 2039, 2046, 2051, 2059, 2069, 2078, 2085, + 2092, 2097, 2102, 2109, 2116, 2120, 2125, 2130, 2135, 2142, 2151, 2158, + 2165, 2174, 2181, 2188, 2193, 2200, 2207, 2214, 2221, 2228, 2233, 2240, + 2247, 2255, 2260, 2265, 2270, 2280, 2284, 2290, 2296, 2302, 2308, 2316, + 2329, 2337, 2342, 2352, 2357, 2362, 2372, 2377, 2384, 2391, 2399, 2407, + 2414, 2421, 2428, 2435, 2445, 2455, 2464, 2473, 2483, 2493, 2503, 2513, + 2518, 2528, 2538, 2548, 2558, 2566, 2574, 2581, 2588, 2596, 2604, 2612, + 2620, 2627, 2634, 2644, 2654, 2662, 2670, 2678, 2683, 2693, 2698, 2705, + 2712, 2717, 2722, 2730, 2738, 2748, 2758, 2765, 2772, 2780, 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, 3354, 3360, 3366, 3373, + 3380, 3391, 3401, 3408, 3415, 3422, 3429, 3434, 3439, 3445, 3451, 3457, + 3465, 3473, 3480, 3485, 3490, 3497, 3503, 3510, 3519, 3528, 3537, 3544, + 3550, 3556, 3561, 3568, 3574, 3581, 3588, 3595, 3600, 3605, 3615, 3623, + 3632, 3637, 3642, 3652, 3659, 3667, 3676, 3681, 3687, 3693, 3700, 3705, + 3710, 3720, 3728, 3737, 3745, 3753, 3762, 3767, 3774, 3781, 3786, 3797, + 3805, 3813, 3819, 3828, 3833, 3838, 3845, 3851, 3857, 3863, 3869, 3878, + 3886, 3891, 3899, 3905, 3913, 3921, 3927, 3933, 3939, 3947, 3955, 3961, + 3969, 3975, 3980, 3987, 3995, 4004, 4011, 4018, 4028, 4035, 4042, 4052, + 4059, 4066, 4073, 4079, 4085, 4094, 4106, 4111, 4118, 4123, 4127, 4132, + 4140, 4147, 4152, 4157, 4161, 4166, 4171, 4175, 4180, 4186, 4192, 4198, + 4205, 4210, 4215, 4220, 4225, 4231, 4233, 4238, 4242, 4248, 4254, 4260, + 4265, 4272, 4279, 4285, 4292, 4300, 4308, 4313, 4318, 4322, 4327, 4329, + 4331, 4334, 4336, 4339, 4344, 4349, 4355, 4360, 4364, 4368, 4373, 4381, + 4387, 4392, 4398, 4403, 4409, 4417, 4425, 4429, 4433, 4438, 4444, 4450, + 4456, 4462, 4467, 4475, 4484, 4493, 4498, 4504, 4511, 4518, 4525, 4532, + 4536, 4542, 4547, 4552, 4557, 4562, 4565, 4568, 4571, 4574, 4577, 4580, + 4584, 4588, 4594, 4597, 4602, 4608, 4614, 4617, 4622, 4627, 4631, 4636, + 4642, 4648, 4654, 4659, 4664, 4669, 4672, 4678, 4683, 4688, 4692, 4697, + 4703, 4709, 4712, 4716, 4720, 4724, 4727, 4730, 4735, 4739, 4746, 4750, + 4756, 4760, 4766, 4770, 4774, 4778, 4783, 4788, 4794, 4799, 4806, 4812, + 4818, 4824, 4827, 4831, 4835, 4839, 4843, 4848, 4853, 4857, 4861, 4867, + 4871, 4875, 4880, 4886, 4891, 4896, 4900, 4906, 4911, 4916, 4921, 4926, + 4932, 4935, 4939, 4944, 4949, 4958, 4964, 4969, 4973, 4978, 4982, 4987, + 4991, 4995, 5000, 5004, 5010, 5015, 5020, 5025, 5030, 5035, 5040, 5046, + 5052, 5058, 5063, 5068, 5074, 5080, 5086, 5091, 5096, 5103, 5110, 5114, + 5120, 5127, 0, 0, 5134, 5137, 5145, 5154, 5164, 0, 0, 0, 0, 0, 5168, + 5171, 5176, 5184, 5189, 5197, 5205, 0, 5213, 0, 5221, 5229, 5237, 5248, + 5253, 5258, 5263, 5268, 5273, 5278, 5283, 5288, 5293, 5298, 5303, 5308, + 5313, 5318, 5323, 5328, 0, 5333, 5338, 5343, 5348, 5353, 5358, 5363, + 5368, 5376, 5384, 5392, 5400, 5408, 5416, 5427, 5432, 5437, 5442, 5447, + 5452, 5457, 5462, 5467, 5472, 5477, 5482, 5487, 5492, 5497, 5502, 5507, + 5512, 5518, 5523, 5528, 5533, 5538, 5543, 5548, 5553, 5561, 5569, 5577, + 5585, 5593, 5598, 5602, 5606, 5613, 5623, 5633, 5637, 5641, 5645, 5651, + 5658, 5662, 5667, 5671, 5676, 5680, 5685, 5689, 5694, 5699, 5704, 5709, + 5714, 5719, 5724, 5729, 5734, 5739, 5744, 5749, 5754, 5759, 5764, 5768, + 5772, 5778, 5782, 5787, 5793, 5800, 5805, 5810, 5817, 5822, 5827, 5833, + 5841, 5850, 5860, 5868, 5873, 5878, 5883, 5890, 5895, 5901, 5906, 5911, + 5916, 5921, 5926, 5931, 5939, 5945, 5950, 5954, 5959, 5964, 5969, 5974, + 5979, 5984, 5989, 5993, 5999, 6003, 6008, 6013, 6018, 6022, 6027, 6032, + 6037, 6042, 6046, 6051, 6055, 6060, 6065, 6070, 6075, 6081, 6086, 6092, + 6096, 6101, 6105, 6109, 6114, 6119, 6124, 6129, 6134, 6139, 6144, 6148, + 6154, 6158, 6163, 6168, 6173, 6177, 6182, 6187, 6192, 6197, 6201, 6206, + 6210, 6215, 6220, 6225, 6230, 6236, 6241, 6247, 6251, 6256, 6260, 6268, + 6273, 6278, 6283, 6290, 6295, 6301, 6306, 6311, 6316, 6321, 6326, 6331, + 6339, 6345, 6350, 6355, 6360, 6365, 6370, 6376, 6382, 6389, 6396, 6405, + 6414, 6421, 6428, 6437, 6446, 6451, 6456, 6461, 6466, 6471, 6476, 6481, + 6486, 6497, 6508, 6513, 6518, 6525, 6532, 6540, 6548, 6553, 6558, 6563, + 6568, 6572, 6576, 6580, 6585, 6590, 6594, 6601, 6606, 6616, 6626, 6632, + 6638, 6646, 6654, 6662, 6670, 6677, 6684, 6693, 6702, 6710, 6718, 6726, + 6734, 6741, 6748, 6755, 6762, 6768, 6774, 6780, 6786, 6794, 6802, 6809, + 6816, 6825, 6834, 6840, 6846, 6854, 6862, 6870, 6878, 6884, 6890, 6898, + 6906, 6914, 6922, 6929, 6936, 6944, 6952, 6960, 6968, 6973, 6978, 6985, + 6992, 7002, 7012, 7016, 7024, 7032, 7038, 7044, 7052, 7060, 7067, 7074, + 7082, 7090, 7097, 7104, 7112, 7120, 7125, 7132, 7139, 7146, 7153, 7159, + 7165, 7173, 7181, 7186, 7191, 7199, 7207, 7215, 7223, 7231, 7239, 7246, + 7253, 7261, 7269, 7277, 7285, 7292, 7299, 7305, 7311, 7320, 7329, 7336, + 7343, 7350, 7357, 7364, 7371, 7378, 7385, 7393, 7401, 7409, 7417, 7425, + 7433, 7442, 7451, 7458, 7465, 7472, 7479, 7486, 7493, 7500, 7507, 7514, + 7521, 7528, 7535, 7542, 7549, 7556, 7563, 7570, 7577, 7584, 7591, 7597, + 7603, 7610, 7617, 7622, 7627, 7632, 7637, 7642, 7647, 7652, 7657, 7662, + 7667, 7673, 7679, 7688, 7697, 7706, 7715, 7723, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 7731, 7736, 7741, 7746, 7751, 7756, 7761, 7766, 7771, 7775, + 7780, 7785, 7790, 7795, 7800, 7805, 7810, 7815, 7820, 7825, 7830, 7835, + 7840, 7845, 7850, 7855, 7860, 7865, 7869, 7874, 7879, 7884, 7889, 7894, + 7899, 7904, 7909, 7914, 0, 0, 7919, 7926, 7929, 7933, 7937, 7940, 7944, + 0, 7948, 7953, 7958, 7963, 7968, 7973, 7978, 7983, 7988, 7992, 7997, + 8002, 8007, 8012, 8017, 8022, 8027, 8032, 8037, 8042, 8047, 8052, 8057, + 8062, 8067, 8072, 8077, 8082, 8086, 8091, 8096, 8101, 8106, 8111, 8116, + 8121, 8126, 8131, 8136, 0, 8143, 8148, 0, 0, 0, 0, 0, 0, 8151, 8156, + 8161, 8166, 8173, 8180, 8185, 8190, 8195, 8200, 8205, 8210, 8215, 8222, + 8227, 8234, 8241, 8246, 8253, 8258, 8263, 8268, 8275, 8280, 8285, 8292, + 8301, 8306, 8311, 8316, 8321, 8327, 8332, 8339, 8346, 8353, 8358, 8363, + 8368, 8373, 8378, 8383, 8393, 8398, 8406, 8411, 8416, 8421, 8426, 8433, + 8440, 8447, 8453, 8459, 8466, 0, 0, 0, 0, 0, 0, 0, 0, 8473, 8477, 8481, + 8485, 8489, 8493, 8497, 8501, 8505, 8509, 8513, 8518, 8522, 8526, 8531, + 8535, 8540, 8544, 8548, 8552, 8557, 8561, 8566, 8570, 8574, 8578, 8582, + 0, 0, 0, 0, 0, 8586, 8593, 8601, 8608, 8613, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 8618, 8621, 8625, 8630, 0, 0, 8634, 8640, 8646, 8649, 8656, 8665, + 8668, 8671, 8676, 8682, 8686, 8694, 8700, 8706, 8714, 8718, 8723, 8734, + 8739, 8743, 8747, 8751, 0, 0, 8754, 8761, 0, 8765, 8769, 8776, 8782, + 8789, 8795, 8801, 8805, 8809, 8815, 8819, 8823, 8827, 8831, 8835, 8839, + 8843, 8847, 8851, 8855, 8859, 8863, 8867, 8871, 8875, 8879, 8883, 8891, + 8899, 8909, 8918, 8927, 8930, 8934, 8938, 8942, 8946, 8950, 8954, 8958, + 8962, 8967, 8971, 8974, 8977, 8980, 8983, 8986, 8989, 8992, 8995, 8999, + 9002, 9005, 9010, 9015, 9021, 9024, 9031, 9040, 9045, 9049, 0, 9056, + 9061, 9065, 9069, 9073, 9077, 9081, 9085, 9089, 9093, 9097, 9101, 9106, + 9111, 9118, 9124, 9130, 9136, 9141, 9149, 9157, 9162, 9168, 9174, 9180, + 9186, 9190, 9194, 9198, 9205, 9215, 9219, 9223, 9227, 9233, 9241, 9245, + 9249, 9256, 9260, 9264, 9268, 9275, 9282, 9294, 9298, 9302, 9306, 9316, + 9325, 9329, 9337, 9344, 9351, 9360, 9371, 9379, 9383, 9392, 9403, 9411, + 9424, 9432, 9440, 9448, 9456, 9462, 9471, 9478, 9482, 9490, 9494, 9501, + 9509, 9513, 9519, 9526, 9533, 9537, 9545, 9549, 9556, 9560, 9568, 9572, + 9580, 9588, 9595, 9603, 9611, 9618, 9624, 9628, 9635, 9643, 9649, 9656, + 9663, 9669, 9678, 9686, 9693, 9699, 9703, 9706, 9710, 9716, 9724, 9728, + 9734, 9740, 9747, 9754, 9757, 9764, 9769, 9777, 9782, 9786, 9799, 9812, + 9818, 9825, 9830, 9836, 9841, 9847, 9857, 9864, 9873, 9883, 9889, 9894, + 9899, 9903, 9907, 9912, 9917, 9923, 9931, 9939, 9950, 9955, 9964, 9973, + 9980, 9986, 9992, 9998, 10004, 10010, 10016, 10022, 10028, 10034, 10041, + 10048, 10055, 10061, 10069, 10078, 10084, 10091, 10098, 10103, 10108, + 10112, 10119, 10126, 10135, 10144, 10147, 10152, 10157, 0, 10162, 10166, + 10170, 10176, 10180, 10184, 10190, 10194, 10202, 10206, 10210, 10214, + 10218, 10222, 10228, 10232, 10238, 10242, 10246, 10250, 10254, 10258, + 10263, 10266, 10270, 10275, 10279, 10283, 10287, 10291, 10295, 10301, + 10307, 10313, 10317, 10321, 10326, 10330, 10334, 10339, 10343, 10347, + 10354, 10361, 10365, 10369, 10374, 10378, 10382, 10385, 10390, 10393, + 10396, 10401, 10406, 10410, 10414, 10420, 10426, 10429, 0, 0, 10432, + 10438, 10444, 10450, 10460, 10472, 10484, 10501, 10513, 10524, 10532, + 10539, 10550, 10565, 10576, 10582, 10591, 10599, 10611, 10621, 10629, + 10641, 10648, 10656, 10668, 10674, 10680, 10688, 10696, 10704, 10710, + 10720, 10727, 10737, 10747, 10760, 10774, 10788, 10798, 10809, 10820, + 10833, 10846, 10860, 10872, 10884, 10897, 10910, 10922, 10935, 10944, + 10952, 10957, 10962, 10967, 10972, 10977, 10982, 10987, 10992, 10997, + 11002, 11007, 11012, 11017, 11022, 11027, 11032, 11037, 11042, 11047, + 11052, 11057, 11062, 11067, 11072, 11077, 11082, 11087, 11092, 11097, + 11102, 11107, 11112, 11116, 11121, 11126, 11131, 11136, 11141, 11145, + 11149, 11153, 11157, 11161, 11165, 11169, 11173, 11177, 11181, 11185, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11190, 11195, 11199, 11203, 11207, + 11211, 11215, 11219, 11223, 11227, 11231, 11235, 11240, 11244, 11248, + 11252, 11257, 11261, 11266, 11270, 11275, 11279, 11284, 11289, 11294, + 11299, 11303, 11308, 11313, 11318, 11323, 11327, 11332, 11339, 11343, + 11348, 11352, 11356, 11361, 11365, 11372, 11379, 11386, 11392, 11400, + 11408, 11417, 11425, 11432, 11439, 11447, 11453, 11459, 11465, 11471, + 11478, 11483, 11487, 11492, 0, 0, 0, 0, 0, 11496, 11500, 11504, 11508, + 11512, 11516, 11520, 11524, 11528, 11532, 11536, 11540, 11544, 11548, + 11552, 11556, 11560, 11564, 11568, 11572, 11576, 11580, 11584, 11588, + 11592, 11596, 11600, 11607, 11613, 11618, 11622, 11629, 11635, 11640, + 11646, 11651, 11655, 11661, 11667, 11672, 11676, 11680, 11685, 11689, + 11693, 11698, 0, 0, 11702, 11707, 11712, 11717, 11722, 11727, 11732, + 11736, 11743, 11748, 11753, 11758, 11763, 11768, 11775, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11780, 11786, + 11790, 11794, 11798, 11803, 11806, 11810, 11813, 11817, 11820, 11824, + 11828, 11832, 11837, 11842, 11845, 11849, 11854, 11859, 11862, 11866, + 11869, 11873, 11877, 11881, 11885, 11889, 11893, 11897, 11901, 11905, + 11909, 11913, 11917, 11921, 11925, 11929, 11933, 11937, 11941, 11944, + 11948, 11951, 11955, 11959, 11963, 11966, 11969, 11972, 11976, 11980, + 11984, 11988, 11992, 11996, 12000, 12004, 0, 0, 12007, 12011, 12015, + 12020, 12024, 12029, 12033, 12038, 12043, 12049, 12055, 12061, 12065, + 12070, 12076, 12082, 12086, 12091, 12095, 0, 12101, 12104, 12110, 12116, + 12121, 12126, 0, 0, 12133, 12137, 12141, 12145, 12149, 12153, 12157, + 12161, 12165, 12170, 12175, 12180, 12186, 12189, 12193, 12197, 12200, + 12203, 12206, 12209, 12212, 12215, 12218, 12221, 12224, 12228, 12235, 0, + 0, 0, 0, 0, 0, 12240, 12244, 12248, 12252, 12256, 12262, 12266, 0, 12270, + 12274, 12278, 0, 12282, 12285, 12289, 12292, 12296, 12299, 12303, 12307, + 0, 0, 12311, 12314, 0, 0, 12318, 12321, 12325, 12328, 12332, 12336, + 12340, 12344, 12348, 12352, 12356, 12360, 12364, 12368, 12372, 12376, + 12380, 12384, 12388, 12392, 12396, 12400, 0, 12403, 12406, 12410, 12414, + 12418, 12421, 12424, 0, 12427, 0, 0, 0, 12431, 12435, 12439, 12443, 0, 0, + 12446, 12450, 12454, 12459, 12463, 12468, 12472, 12477, 12482, 0, 0, + 12488, 12492, 0, 0, 12497, 12501, 12506, 12510, 0, 0, 0, 0, 0, 0, 0, 0, + 12516, 0, 0, 0, 0, 12522, 12526, 0, 12530, 12534, 12539, 12544, 12549, 0, + 0, 12555, 12559, 12562, 12565, 12568, 12571, 12574, 12577, 12580, 12583, + 12586, 12595, 12604, 12608, 12612, 12618, 12624, 12630, 12636, 12650, + 12657, 12660, 0, 0, 0, 0, 0, 12664, 12670, 12674, 0, 12678, 12681, 12685, + 12688, 12692, 12695, 0, 0, 0, 0, 12699, 12703, 0, 0, 12707, 12711, 12715, + 12718, 12722, 12726, 12730, 12734, 12738, 12742, 12746, 12750, 12754, + 12758, 12762, 12766, 12770, 12774, 12778, 12782, 12786, 12790, 0, 12793, + 12796, 12800, 12804, 12808, 12811, 12814, 0, 12817, 12821, 0, 12825, + 12829, 0, 12833, 12837, 0, 0, 12840, 0, 12844, 12849, 12853, 12858, + 12862, 0, 0, 0, 0, 12867, 12872, 0, 0, 12877, 12882, 12887, 0, 0, 0, + 12891, 0, 0, 0, 0, 0, 0, 0, 12895, 12899, 12903, 12907, 0, 12911, 0, 0, + 0, 0, 0, 0, 0, 12915, 12919, 12922, 12925, 12928, 12931, 12934, 12937, + 12940, 12943, 12946, 12949, 12952, 12955, 12958, 12963, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 12967, 12971, 12975, 0, 12979, 12982, 12986, 12989, 12993, + 12996, 13000, 13004, 13008, 0, 13013, 13016, 13020, 0, 13025, 13028, + 13032, 13035, 13039, 13043, 13047, 13051, 13055, 13059, 13063, 13067, + 13071, 13075, 13079, 13083, 13087, 13091, 13095, 13099, 13103, 13107, 0, + 13110, 13113, 13117, 13121, 13125, 13128, 13131, 0, 13134, 13138, 0, + 13142, 13146, 13150, 13154, 13158, 0, 0, 13161, 13165, 13169, 13174, + 13178, 13183, 13187, 13192, 13197, 13203, 0, 13209, 13213, 13218, 0, + 13224, 13228, 13233, 0, 0, 13237, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 13240, 13245, 13250, 13255, 0, 0, 13261, 13265, 13268, 13271, + 13274, 13277, 13280, 13283, 13286, 13289, 0, 13292, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 13296, 13300, 13304, 0, 13308, 13311, 13315, + 13318, 13322, 13325, 13329, 13333, 0, 0, 13337, 13340, 0, 0, 13344, + 13347, 13351, 13354, 13358, 13362, 13366, 13370, 13374, 13378, 13382, + 13386, 13390, 13394, 13398, 13402, 13406, 13410, 13414, 13418, 13422, + 13426, 0, 13429, 13432, 13436, 13440, 13444, 13447, 13450, 0, 13453, + 13457, 0, 13461, 13465, 13469, 13473, 13477, 0, 0, 13480, 13484, 13488, + 13493, 13497, 13502, 13506, 13511, 13516, 0, 0, 13522, 13526, 0, 0, + 13531, 13535, 13540, 0, 0, 0, 0, 0, 0, 0, 0, 13544, 13550, 0, 0, 0, 0, + 13556, 13560, 0, 13564, 13568, 13573, 13578, 13583, 0, 0, 13589, 13593, + 13596, 13599, 13602, 13605, 13608, 13611, 13614, 13617, 13620, 13623, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13627, 13631, 0, 13635, + 13638, 13642, 13645, 13649, 13652, 0, 0, 0, 13656, 13659, 13663, 0, + 13667, 13670, 13674, 13678, 0, 0, 0, 13681, 13685, 0, 13689, 0, 13693, + 13697, 0, 0, 0, 13701, 13705, 0, 0, 0, 13709, 13712, 13716, 0, 0, 0, + 13719, 13722, 13725, 13728, 13732, 13736, 13740, 13744, 13748, 13752, + 13756, 13760, 0, 0, 0, 0, 13763, 13768, 13772, 13777, 13781, 0, 0, 0, + 13786, 13790, 13795, 0, 13800, 13804, 13809, 13814, 0, 0, 13818, 0, 0, 0, + 0, 0, 0, 13821, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13827, 13831, + 13834, 13837, 13840, 13843, 13846, 13849, 13852, 13855, 13858, 13862, + 13867, 13872, 13876, 13880, 13884, 13888, 13892, 13897, 13901, 0, 0, 0, + 0, 0, 0, 13904, 13908, 13912, 0, 13916, 13919, 13923, 13926, 13930, + 13933, 13937, 13941, 0, 13945, 13948, 13952, 0, 13956, 13959, 13963, + 13967, 13970, 13974, 13978, 13982, 13986, 13990, 13994, 13998, 14002, + 14006, 14010, 14014, 14018, 14022, 14026, 14030, 14034, 14038, 14042, 0, + 14045, 14048, 14052, 14056, 14060, 14063, 14066, 14069, 14073, 14077, 0, + 14081, 14085, 14089, 14093, 14097, 0, 0, 0, 14100, 14104, 14109, 14113, + 14118, 14122, 14127, 14132, 0, 14138, 14142, 14147, 0, 14152, 14156, + 14161, 14166, 0, 0, 0, 0, 0, 0, 0, 14170, 14174, 0, 14180, 14184, 0, 0, + 0, 0, 0, 0, 14188, 14193, 14198, 14203, 0, 0, 14209, 14213, 14216, 14219, + 14222, 14225, 14228, 14231, 14234, 14237, 0, 0, 0, 0, 0, 0, 0, 0, 14240, + 14253, 14265, 14277, 14289, 14301, 14313, 14325, 0, 0, 14329, 14333, 0, + 14337, 14340, 14344, 14347, 14351, 14354, 14358, 14362, 0, 14366, 14369, + 14373, 0, 14377, 14380, 14384, 14388, 14391, 14395, 14399, 14403, 14407, + 14411, 14415, 14419, 14423, 14427, 14431, 14435, 14439, 14443, 14447, + 14451, 14455, 14459, 14463, 0, 14466, 14469, 14473, 14477, 14481, 14484, + 14487, 14490, 14494, 14498, 0, 14502, 14506, 14510, 14514, 14518, 0, 0, + 14521, 14525, 14529, 14534, 14538, 14543, 14547, 14552, 14557, 0, 14563, + 14567, 14572, 0, 14577, 14581, 14586, 14591, 0, 0, 0, 0, 0, 0, 0, 14595, + 14599, 0, 0, 0, 0, 0, 0, 0, 14605, 0, 14609, 14614, 14619, 14624, 0, 0, + 14630, 14634, 14637, 14640, 14643, 14646, 14649, 14652, 14655, 14658, 0, + 14661, 14665, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 14669, 14673, + 0, 14677, 14680, 14684, 14687, 14691, 14694, 14698, 14702, 0, 14706, + 14709, 14713, 0, 14717, 14720, 14724, 14728, 14731, 14735, 14739, 14743, + 14747, 14751, 14755, 14759, 14763, 14767, 14771, 14775, 14779, 14783, + 14787, 14791, 14795, 14799, 14803, 0, 14806, 14809, 14813, 14817, 14821, + 14824, 14827, 14830, 14834, 14838, 14842, 14846, 14850, 14854, 14858, + 14862, 0, 0, 0, 14865, 14869, 14874, 14878, 14883, 14887, 14892, 14897, + 0, 14903, 14907, 14912, 0, 14917, 14921, 14926, 14931, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 14935, 0, 0, 0, 0, 0, 0, 0, 0, 14941, 14946, 14951, 14956, 0, 0, + 14962, 14966, 14969, 14972, 14975, 14978, 14981, 14984, 14987, 14990, + 14993, 14997, 15002, 15007, 15013, 15019, 0, 0, 0, 15025, 15029, 15035, + 15040, 15046, 15051, 15057, 0, 0, 15063, 15067, 0, 15071, 15075, 15079, + 15083, 15087, 15091, 15095, 15099, 15103, 15107, 15111, 15115, 15119, + 15123, 15127, 15131, 15135, 15139, 0, 0, 0, 15143, 15149, 15155, 15161, + 15167, 15173, 15179, 15185, 15191, 15197, 15203, 15209, 15217, 15223, + 15229, 15235, 15241, 15247, 15253, 15259, 15265, 15271, 15277, 15283, 0, + 15289, 15295, 15301, 15307, 15313, 15319, 15323, 15329, 15333, 0, 15337, + 0, 0, 15343, 15347, 15353, 15359, 15365, 15369, 15375, 0, 0, 0, 15379, 0, + 0, 0, 0, 15383, 15388, 15395, 15402, 15409, 15416, 0, 15423, 0, 15430, + 15435, 15440, 15447, 15454, 15463, 15474, 15483, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15488, 15495, 15502, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 15507, 15513, 15519, 15525, 15531, 15537, 15543, 15549, + 15555, 15561, 15567, 15573, 15579, 15585, 15591, 15596, 15602, 15608, + 15614, 15620, 15626, 15631, 15637, 15643, 15649, 15655, 15661, 15667, + 15673, 15679, 15685, 15691, 15697, 15702, 15708, 15714, 15718, 15724, + 15728, 15734, 15740, 15746, 15752, 15758, 15764, 15769, 15775, 15779, + 15784, 15790, 15796, 15802, 15807, 15813, 15819, 15825, 15830, 15836, 0, + 0, 0, 0, 15840, 15846, 15851, 15857, 15862, 15870, 15878, 15882, 15886, + 15890, 15896, 15902, 15908, 15914, 15918, 15922, 15926, 15930, 15934, + 15937, 15940, 15943, 15946, 15949, 15952, 15955, 15958, 15961, 15965, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15969, 15973, 0, 15979, 0, 0, 15985, + 15989, 0, 15993, 0, 0, 15999, 0, 0, 0, 0, 0, 0, 16003, 16007, 16010, + 16016, 0, 16022, 16026, 16030, 16034, 16040, 16046, 16052, 0, 16058, + 16062, 16066, 0, 16072, 0, 16078, 0, 0, 16082, 16088, 0, 16094, 16097, + 16103, 16106, 16110, 16117, 16122, 16127, 16131, 16136, 16141, 16146, + 16150, 0, 16155, 16162, 16168, 0, 0, 16174, 16178, 16183, 16187, 16192, + 0, 16197, 0, 16202, 16208, 16214, 16220, 16226, 16230, 0, 0, 16233, + 16237, 16240, 16243, 16246, 16249, 16252, 16255, 16258, 16261, 0, 0, + 16264, 16269, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16274, 16278, 16289, 16304, + 16319, 16329, 16340, 16353, 16364, 16370, 16378, 16388, 16394, 16402, + 16406, 16412, 16418, 16426, 16436, 16444, 16457, 16463, 16471, 16479, + 16491, 16498, 16506, 16514, 16522, 16530, 16538, 16546, 16556, 16560, + 16563, 16566, 16569, 16572, 16575, 16578, 16581, 16584, 16587, 16591, + 16595, 16599, 16603, 16607, 16611, 16615, 16619, 16623, 16628, 16634, + 16644, 16658, 16668, 16674, 16680, 16688, 16696, 16704, 16712, 16718, + 16724, 16727, 16731, 16735, 16739, 16743, 16747, 16751, 0, 16755, 16759, + 16763, 16767, 16771, 16775, 16779, 16783, 16787, 16791, 16795, 16798, + 16801, 16805, 16809, 16813, 16816, 16820, 16824, 16828, 16832, 16836, + 16840, 16844, 16848, 16851, 16854, 16858, 16862, 16866, 16870, 16873, + 16876, 16880, 16885, 16889, 0, 0, 0, 0, 16893, 16898, 16902, 16907, + 16911, 16916, 16921, 16927, 16932, 16938, 16942, 16947, 16951, 16956, + 16966, 16972, 16977, 16983, 16993, 16999, 17003, 17007, 17013, 17019, + 17027, 17033, 17041, 0, 0, 0, 0, 17049, 17054, 17060, 17066, 17072, + 17078, 17084, 17090, 0, 17096, 17102, 17108, 17114, 17120, 17126, 17132, + 17138, 17144, 17150, 17156, 17161, 17166, 17172, 17178, 17184, 17189, + 17195, 17201, 17207, 17213, 17219, 17225, 17231, 17237, 17242, 17247, + 17253, 17259, 17265, 17271, 17276, 17281, 17287, 17295, 17302, 0, 17309, + 17316, 17329, 17336, 17343, 17351, 17359, 17365, 17371, 17377, 17387, + 17392, 17398, 17408, 17418, 0, 17428, 17438, 17446, 17458, 17470, 17476, + 17490, 17505, 17510, 17515, 17523, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 17531, 17534, 17538, 17542, 17546, 17550, 17554, 17558, 17562, + 17566, 17570, 17574, 17578, 17582, 17586, 17590, 17594, 17598, 17602, + 17606, 17610, 17613, 17616, 17620, 17624, 17628, 17631, 17634, 17637, + 17641, 17645, 17649, 17652, 17656, 17659, 17664, 17667, 17671, 17674, + 17678, 17681, 17686, 17689, 17693, 17700, 17705, 17709, 17714, 17718, + 17723, 17727, 17732, 17739, 17745, 17750, 17754, 17758, 17762, 17766, + 17770, 17776, 17782, 17789, 17795, 17801, 17805, 17808, 17811, 17814, + 17817, 17820, 17823, 17826, 17829, 17832, 17838, 17842, 17846, 17850, + 17854, 17858, 17862, 17866, 17870, 17875, 17879, 17884, 17889, 17895, + 17900, 17906, 17912, 17918, 17924, 17930, 17938, 17946, 17955, 17963, + 17972, 17981, 17992, 18002, 18012, 18023, 18034, 18044, 18054, 18064, + 18074, 18084, 18094, 18104, 18114, 18122, 18129, 18135, 18142, 18147, + 18153, 18159, 18165, 18171, 18177, 18183, 18188, 18194, 18200, 18206, + 18212, 18217, 18226, 18233, 18239, 18246, 18254, 18260, 18266, 18272, + 18278, 18286, 18294, 18304, 18312, 18320, 18326, 18331, 18336, 18341, + 18346, 18351, 18356, 18361, 18366, 18371, 18377, 18383, 18389, 18396, + 18401, 18407, 18412, 18417, 18422, 18427, 18432, 18437, 18442, 18447, + 18452, 18457, 18462, 18467, 18472, 18477, 18482, 18487, 18492, 18497, + 18502, 18507, 18512, 18517, 18522, 18527, 18532, 18537, 18542, 18547, + 18552, 18557, 18562, 18567, 18572, 18577, 18582, 18587, 18592, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 18597, 18601, 18605, 18609, 18613, 18617, 18621, + 18625, 18629, 18633, 18637, 18641, 18645, 18649, 18653, 18657, 18661, + 18665, 18669, 18673, 18677, 18681, 18685, 18689, 18693, 18697, 18701, + 18705, 18709, 18713, 18717, 18721, 18725, 18729, 18733, 18737, 18741, + 18745, 18749, 18753, 18757, 18761, 18766, 18770, 18775, 0, 0, 0, 18780, + 18784, 18788, 18792, 18796, 18800, 18804, 18808, 18812, 18816, 18820, + 18824, 18828, 18832, 18836, 18840, 18844, 18848, 18852, 18856, 18860, + 18864, 18868, 18872, 18876, 18880, 18884, 18888, 18892, 18896, 18900, + 18904, 18908, 18912, 18916, 18920, 18924, 18928, 18932, 18936, 18940, + 18944, 18948, 18952, 18956, 18960, 18964, 18968, 18972, 18976, 18980, + 18984, 18988, 18992, 18996, 19000, 19004, 19008, 19012, 19016, 19020, + 19024, 19028, 19032, 19036, 19040, 19044, 19048, 19052, 19056, 19060, + 19064, 19068, 19072, 19076, 19080, 19084, 19088, 19092, 19096, 19100, + 19104, 19108, 19112, 19116, 19120, 19124, 19128, 19132, 19136, 19140, + 19144, 19148, 19152, 19156, 19160, 19164, 19168, 19171, 19175, 19178, + 19182, 19186, 19189, 19193, 19197, 19200, 19204, 19208, 19212, 19216, + 19219, 19223, 19227, 19231, 19235, 19239, 19243, 19246, 19250, 19254, 19258, 19262, 19266, 19270, 19274, 19278, 19282, 19286, 19290, 19294, - 19298, 19302, 19306, 19310, 19313, 19317, 19321, 19325, 19329, 19333, - 19337, 19341, 19345, 19349, 19353, 19357, 19361, 19365, 19369, 19373, - 19376, 19380, 19384, 19388, 19392, 19396, 19400, 19404, 19408, 19412, - 19416, 19420, 19424, 19428, 19432, 19436, 19440, 19444, 19448, 19452, - 19456, 19460, 19464, 19468, 19472, 19476, 19480, 19484, 19488, 19492, - 19496, 19500, 0, 19504, 19508, 19512, 19516, 0, 0, 19520, 19524, 19528, - 19532, 19536, 19540, 19544, 0, 19548, 0, 19552, 19556, 19560, 19564, 0, - 0, 19568, 19572, 19576, 19580, 19584, 19588, 19592, 19596, 19600, 19604, - 19608, 19612, 19616, 19620, 19624, 19628, 19632, 19636, 19640, 19644, - 19648, 19652, 19656, 19659, 19663, 19667, 19671, 19675, 19679, 19683, - 19687, 19691, 19695, 19699, 19703, 19707, 19711, 19715, 19719, 19723, - 19727, 0, 19731, 19735, 19739, 19743, 0, 0, 19747, 19751, 19755, 19759, - 19763, 19767, 19771, 19775, 19779, 19783, 19787, 19791, 19795, 19799, - 19803, 19807, 19811, 19816, 19821, 19826, 19832, 19838, 19843, 19848, - 19854, 19857, 19861, 19865, 19869, 19873, 19877, 19881, 19885, 0, 19889, - 19893, 19897, 19901, 0, 0, 19905, 19909, 19913, 19917, 19921, 19925, - 19929, 0, 19933, 0, 19937, 19941, 19945, 19949, 0, 0, 19953, 19957, - 19961, 19965, 19969, 19973, 19977, 19981, 19985, 19990, 19995, 20000, - 20006, 20012, 20017, 0, 20022, 20026, 20030, 20034, 20038, 20042, 20046, - 20050, 20054, 20058, 20062, 20066, 20070, 20074, 20078, 20082, 20086, - 20089, 20093, 20097, 20101, 20105, 20109, 20113, 20117, 20121, 20125, - 20129, 20133, 20137, 20141, 20145, 20149, 20153, 20157, 20161, 20165, - 20169, 20173, 20177, 20181, 20185, 20189, 20193, 20197, 20201, 20205, - 20209, 20213, 20217, 20221, 20225, 20229, 20233, 20237, 20241, 20245, 0, - 20249, 20253, 20257, 20261, 0, 0, 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, 20492, 20496, 20500, 20504, 20508, 20512, 20516, 20520, - 20524, 20528, 0, 0, 0, 0, 20532, 20537, 20541, 20544, 20549, 20552, - 20555, 20558, 20563, 20567, 20572, 20575, 20578, 20581, 20584, 20587, - 20590, 20593, 20596, 20599, 20603, 20607, 20611, 20615, 20619, 20623, - 20627, 20631, 20635, 20639, 0, 0, 0, 20645, 20651, 20655, 20659, 20663, - 20669, 20673, 20677, 20681, 20687, 20691, 20695, 20699, 20705, 20709, - 20713, 20717, 20723, 20729, 20735, 20743, 20749, 20755, 20761, 20767, - 20773, 0, 0, 0, 0, 0, 0, 20779, 20782, 20785, 20788, 20791, 20794, 20797, - 20801, 20804, 20808, 20812, 20816, 20820, 20824, 20827, 20831, 20835, - 20839, 20843, 20847, 20851, 20855, 20859, 20863, 20867, 20871, 20874, - 20878, 20882, 20886, 20890, 20894, 20898, 20902, 20906, 20910, 20914, - 20918, 20922, 20926, 20930, 20934, 20938, 20942, 20946, 20950, 20953, - 20957, 20961, 20965, 20969, 20973, 20977, 20981, 20985, 20989, 20993, - 20997, 21001, 21005, 21009, 21013, 21017, 21021, 21025, 21029, 21033, - 21037, 21041, 21045, 21049, 21053, 21057, 21061, 21065, 21069, 21073, - 21077, 21081, 21085, 21088, 21092, 21096, 21100, 21104, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 21108, 21111, 21115, 21118, 21122, 21125, 21129, 21135, - 21140, 21144, 21147, 21151, 21155, 21160, 21164, 21169, 21173, 21178, - 21182, 21187, 21191, 21196, 21202, 21206, 21211, 21215, 21220, 21226, - 21230, 21236, 21242, 21246, 21251, 21259, 21267, 21274, 21279, 21284, - 21293, 21300, 21307, 21312, 21318, 21322, 21326, 21330, 21334, 21338, - 21342, 21346, 21350, 21354, 21358, 21364, 21369, 21374, 21377, 21381, - 21385, 21390, 21394, 21399, 21403, 21408, 21412, 21417, 21421, 21426, - 21430, 21435, 21439, 21444, 21450, 21454, 21459, 21463, 21467, 21471, - 21475, 21479, 21482, 21486, 21492, 21497, 21502, 21506, 21510, 21514, - 21519, 21523, 21528, 21532, 21537, 21540, 21544, 21548, 21553, 21557, - 21562, 21566, 21571, 21577, 21581, 21585, 21589, 21593, 21597, 21601, - 21605, 21609, 21613, 21617, 21621, 21627, 21630, 21634, 21638, 21643, - 21647, 21652, 21656, 21661, 21665, 21670, 21674, 21679, 21683, 21688, - 21692, 21697, 21703, 21707, 21711, 21717, 21723, 21729, 21735, 21739, - 21743, 21747, 21751, 21755, 21759, 21765, 21769, 21773, 21777, 21782, - 21786, 21791, 21795, 21800, 21804, 21809, 21813, 21818, 21822, 21827, - 21831, 21836, 21842, 21846, 21852, 21856, 21860, 21864, 21868, 21872, - 21876, 21882, 21885, 21889, 21893, 21898, 21902, 21907, 21911, 21916, - 21920, 21925, 21929, 21934, 21938, 21943, 21947, 21952, 21958, 21961, - 21965, 21969, 21974, 21979, 21983, 21987, 21991, 21995, 21999, 22003, - 22009, 22013, 22017, 22021, 22026, 22030, 22035, 22039, 22044, 22050, - 22053, 22058, 22062, 22066, 22070, 22074, 22078, 22082, 22086, 22092, - 22096, 22100, 22104, 22109, 22113, 22118, 22122, 22127, 22131, 22136, - 22140, 22145, 22149, 22154, 22158, 22163, 22166, 22170, 22174, 22178, - 22182, 22186, 22190, 22194, 22198, 22204, 22208, 22212, 22216, 22221, - 22225, 22230, 22234, 22239, 22243, 22248, 22252, 22257, 22261, 22266, - 22270, 22275, 22281, 22284, 22289, 22293, 22298, 22304, 22310, 22316, - 22322, 22328, 22334, 22340, 22344, 22348, 22352, 22356, 22360, 22364, - 22368, 22372, 22377, 22381, 22386, 22390, 22395, 22399, 22404, 22408, - 22413, 22417, 22422, 22426, 22431, 22435, 22439, 22443, 22447, 22451, - 22455, 22459, 22465, 22468, 22472, 22476, 22481, 22485, 22490, 22494, - 22499, 22503, 22508, 22512, 22517, 22521, 22526, 22530, 22535, 22541, - 22545, 22551, 22556, 22562, 22566, 22572, 22577, 22581, 22585, 22589, - 22593, 22597, 22602, 22605, 22609, 22614, 22618, 22623, 22626, 22630, - 22634, 22638, 22642, 22646, 22650, 22654, 22658, 22662, 22666, 22670, - 22675, 22679, 22683, 22689, 22693, 22699, 22703, 22709, 22713, 22717, - 22721, 22725, 22729, 22734, 22738, 22742, 22746, 22750, 22754, 22758, - 22762, 22766, 22770, 22774, 22780, 22786, 22792, 22798, 22804, 22809, - 22815, 22820, 22825, 22829, 22833, 22837, 22841, 22845, 22849, 22853, - 22857, 22861, 22865, 22869, 22873, 22877, 22882, 22887, 22892, 22896, - 22900, 22904, 22908, 22912, 22916, 22920, 22924, 22928, 22932, 22938, - 22944, 22950, 22956, 22962, 22968, 22974, 22980, 22986, 22990, 22994, - 22998, 23002, 23006, 23010, 23014, 23020, 23026, 23032, 23038, 23044, - 23050, 23056, 23062, 23068, 23073, 23078, 23083, 23088, 23094, 23100, - 23106, 23112, 23118, 23124, 23130, 23136, 23142, 23148, 23154, 23159, - 23165, 23171, 23177, 23182, 23187, 23192, 23197, 23202, 23207, 23212, - 23217, 23222, 23227, 23232, 23237, 23241, 23246, 23251, 23256, 23261, - 23266, 23271, 23276, 23281, 23286, 23291, 23296, 23301, 23306, 23311, - 23316, 23321, 23326, 23331, 23336, 23341, 23346, 23351, 23356, 23361, - 23366, 23371, 23376, 23381, 23386, 23390, 23395, 23400, 23405, 23410, - 23415, 23420, 23425, 23430, 23435, 23440, 23445, 23450, 23455, 23460, - 23465, 23470, 23475, 23480, 23485, 23490, 23495, 23500, 23505, 23510, - 23515, 23520, 23525, 23530, 23535, 23540, 23545, 23549, 23554, 23559, - 23564, 23569, 23574, 23578, 23583, 23589, 23594, 23599, 23604, 23609, - 23615, 23620, 23625, 23630, 23635, 23640, 23645, 23650, 23655, 23660, - 23665, 23670, 23675, 23680, 23685, 23690, 23695, 23700, 23705, 23710, - 23715, 23720, 23725, 23730, 23735, 23740, 23745, 23750, 23755, 23760, - 23765, 23770, 23775, 23780, 23785, 23790, 23795, 23800, 23805, 23810, - 23815, 23820, 23825, 23830, 23835, 23841, 23846, 23851, 23856, 23861, - 23866, 23871, 23876, 23881, 23886, 23891, 23896, 23901, 23906, 23911, - 23916, 23921, 23926, 23931, 23936, 23941, 23946, 23951, 23956, 23961, - 23966, 23971, 23976, 23981, 23986, 23991, 23996, 24001, 24006, 24011, - 24016, 24021, 24026, 24031, 24037, 24041, 24045, 24049, 24053, 24057, - 24061, 24065, 0, 0, 0, 0, 0, 0, 0, 0, 0, 24069, 24074, 24079, 24084, - 24089, 24094, 24099, 24104, 24109, 24114, 24119, 24124, 24129, 24134, - 24139, 24144, 24149, 24154, 24159, 24164, 24169, 24174, 24179, 24184, - 24189, 24194, 24199, 24204, 24209, 0, 0, 0, 24215, 24225, 24228, 24235, - 24239, 24243, 24247, 24255, 24259, 24264, 24269, 24274, 24278, 24283, - 24288, 24291, 24295, 24299, 24308, 24312, 24316, 24322, 24325, 24329, - 24336, 24340, 24348, 24353, 24358, 24363, 24368, 24377, 24382, 24386, - 24395, 24398, 24404, 24408, 24414, 24419, 24425, 24433, 24439, 24444, - 24451, 24456, 24460, 24464, 24474, 24480, 24484, 24494, 24500, 24504, - 24508, 24515, 24522, 24527, 24532, 24541, 24545, 24549, 24553, 24561, - 24568, 24572, 24576, 24580, 24584, 24588, 24592, 24596, 24600, 24604, - 24608, 24612, 24617, 24622, 24627, 24631, 24635, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 24639, 24643, 24647, 24651, 24655, 24660, 24665, - 24670, 24675, 24680, 24684, 24689, 24693, 0, 24697, 24702, 24707, 24712, - 24716, 24721, 24726, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 24731, 24735, - 24739, 24743, 24747, 24752, 24757, 24762, 24767, 24772, 24776, 24781, - 24785, 24789, 24793, 24798, 24803, 24808, 24812, 24817, 24822, 24827, - 24833, 0, 0, 0, 0, 0, 0, 0, 0, 0, 24838, 24842, 24846, 24850, 24854, - 24859, 24864, 24869, 24874, 24879, 24883, 24888, 24892, 24896, 24900, - 24905, 24910, 24915, 24919, 24924, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 24929, 24933, 24937, 24941, 24945, 24950, 24955, 24960, 24965, 24970, - 24974, 24979, 24983, 0, 24987, 24992, 24997, 0, 25002, 25007, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 25012, 25015, 25019, 25023, 25027, 25031, 25035, - 25039, 25043, 25047, 25051, 25055, 25059, 25063, 25067, 25071, 25075, - 25079, 25082, 25086, 25090, 25094, 25098, 25102, 25106, 25110, 25114, - 25118, 25122, 25126, 25130, 25134, 25138, 25141, 25145, 25149, 25155, - 25161, 25167, 25173, 25179, 25185, 25191, 25197, 25203, 25209, 25215, - 25221, 25227, 25233, 25242, 25251, 25257, 25263, 25269, 25274, 25278, - 25283, 25288, 25293, 25297, 25302, 25307, 25312, 25316, 25321, 25325, - 25330, 25335, 25340, 25345, 25349, 25353, 25357, 25361, 25365, 25369, - 25373, 25377, 25381, 25385, 25391, 25395, 25399, 25403, 25407, 25411, - 25419, 25425, 25429, 25435, 25439, 25445, 25449, 0, 0, 25453, 25457, - 25460, 25463, 25466, 25469, 25472, 25475, 25478, 25481, 0, 0, 0, 0, 0, 0, - 25484, 25492, 25500, 25508, 25516, 25524, 25532, 25540, 25548, 25556, 0, - 0, 0, 0, 0, 0, 25564, 25567, 25570, 25573, 25578, 25581, 25586, 25593, - 25601, 25606, 25613, 25616, 25623, 25630, 25637, 0, 25641, 25645, 25648, - 25651, 25654, 25657, 25660, 25663, 25666, 25669, 0, 0, 0, 0, 0, 0, 25672, - 25675, 25678, 25681, 25684, 25687, 25691, 25695, 25699, 25703, 25707, - 25711, 25714, 25718, 25722, 25725, 25729, 25733, 25737, 25741, 25745, - 25749, 25753, 25756, 25759, 25763, 25767, 25770, 25774, 25778, 25782, - 25786, 25790, 25794, 25798, 25802, 25809, 25814, 25819, 25824, 25829, - 25835, 25841, 25847, 25853, 25858, 25864, 25870, 25875, 25881, 25887, - 25893, 25899, 25905, 25910, 25916, 25921, 25927, 25933, 25939, 25945, - 25951, 25956, 25961, 25967, 25973, 25978, 25984, 25989, 25995, 26000, - 26005, 26011, 26017, 26023, 26029, 26035, 26041, 26047, 26053, 26059, - 26065, 26071, 26077, 26082, 26087, 26092, 26098, 0, 0, 0, 0, 0, 0, 0, 0, - 26104, 26113, 26122, 26130, 26138, 26148, 26156, 26165, 26172, 26179, - 26186, 26194, 26202, 26210, 26218, 26226, 26234, 26242, 26250, 26257, - 26265, 26273, 26281, 26289, 26297, 26307, 26317, 26327, 26337, 26347, - 26357, 26367, 26377, 26387, 26397, 26407, 26417, 26427, 26437, 26445, - 26453, 26463, 26471, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 26481, 26486, - 26489, 26493, 26497, 26501, 26505, 26509, 26513, 26517, 26521, 26525, - 26529, 26533, 26537, 26541, 26545, 26548, 26552, 26556, 26560, 26563, - 26566, 26569, 26573, 26577, 26581, 26585, 26589, 0, 0, 0, 26592, 26596, - 26600, 26604, 26609, 26614, 26619, 26624, 26628, 26632, 26637, 26642, 0, - 0, 0, 0, 26648, 26652, 26657, 26662, 26667, 26672, 26676, 26680, 26684, - 26689, 26693, 26697, 0, 0, 0, 0, 26701, 0, 0, 0, 26705, 26709, 26713, - 26717, 26720, 26723, 26726, 26729, 26732, 26735, 26738, 26741, 26744, - 26749, 26755, 26761, 26767, 26773, 26778, 26784, 26790, 26796, 26801, - 26807, 26812, 26818, 26824, 26829, 26835, 26841, 26847, 26853, 26858, - 26863, 26869, 26875, 26880, 26886, 26891, 26897, 26902, 26908, 0, 0, - 26914, 26920, 26926, 26932, 26938, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 26944, 26951, 26958, 26964, 26971, 26978, 26984, 26991, 26998, 27005, - 27012, 27018, 27025, 27032, 27038, 27045, 27052, 27059, 27066, 27073, - 27080, 27086, 27093, 27099, 27105, 27112, 27118, 27125, 27132, 27139, - 27146, 27153, 27160, 27166, 27173, 27180, 27186, 27193, 27200, 27207, - 27214, 27221, 0, 0, 0, 0, 0, 0, 27228, 27236, 27243, 27250, 27256, 27263, - 27269, 27276, 27282, 27289, 27296, 27303, 27310, 27317, 27324, 27331, - 27338, 27345, 27351, 27358, 27364, 27370, 27377, 27384, 27391, 27397, 0, - 0, 0, 0, 0, 0, 27403, 27409, 27414, 27419, 27424, 27429, 27434, 27439, - 27444, 27449, 0, 0, 0, 0, 27454, 27460, 27466, 27470, 27476, 27482, - 27488, 27494, 27500, 27506, 27512, 27518, 27524, 27530, 27536, 27542, - 27548, 27554, 27560, 27564, 27570, 27576, 27582, 27588, 27594, 27600, - 27606, 27612, 27618, 27624, 27630, 27636, 27642, 27648, 27654, 27658, - 27663, 27668, 27673, 27677, 27682, 27686, 27691, 27696, 27701, 27706, - 27711, 27716, 27721, 27726, 27731, 27735, 27739, 27744, 27749, 27754, - 27758, 27762, 27767, 27772, 27777, 27782, 0, 0, 27788, 27792, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 27799, 27805, - 27811, 27815, 27819, 27823, 27827, 27833, 27837, 27843, 27847, 27853, - 27859, 27867, 27873, 27881, 27885, 27889, 27893, 27899, 27902, 27907, - 27911, 27917, 27921, 27925, 27931, 27935, 27941, 27945, 27951, 27959, - 27967, 27975, 27981, 27985, 27991, 27995, 28001, 28005, 28008, 28014, - 28018, 28024, 28027, 28030, 28033, 28037, 28041, 28047, 28053, 28057, - 28060, 28064, 28069, 28074, 28081, 28086, 28093, 28100, 28109, 28116, - 28125, 28130, 28137, 28144, 28153, 28158, 28165, 28170, 28176, 28182, - 28188, 28194, 28200, 28206, 0, 0, 0, 0, 28212, 28216, 28219, 28222, - 28225, 28228, 28231, 28234, 28237, 28240, 28243, 28246, 28249, 28252, - 28257, 28262, 28267, 28270, 28275, 28280, 28285, 28290, 28297, 28302, - 28307, 28312, 28317, 28324, 28330, 28336, 28342, 28348, 28354, 28363, - 28372, 28378, 28384, 28393, 28402, 28411, 28420, 28429, 28438, 28447, - 28456, 0, 0, 0, 28465, 28469, 28473, 28477, 28480, 28483, 28486, 28490, - 28493, 28496, 28500, 28503, 28507, 28511, 28515, 28519, 28523, 28527, - 28531, 28535, 28539, 28543, 28546, 28550, 28554, 28558, 28561, 28564, - 28567, 28571, 28575, 28579, 28583, 28586, 28592, 28598, 28604, 28609, - 28614, 28619, 28624, 28629, 28634, 0, 0, 0, 28638, 28642, 28646, 28650, - 28653, 28656, 28659, 28662, 28665, 28668, 28671, 28674, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 28677, 28680, 28684, - 28688, 28692, 28696, 28700, 28704, 28708, 28712, 28716, 28720, 28724, - 28728, 28732, 28735, 28739, 28743, 28747, 28751, 28755, 28759, 28762, - 28766, 28770, 28774, 28778, 28781, 28784, 28788, 28791, 28795, 28799, - 28803, 28807, 28811, 28814, 28819, 28824, 28829, 28833, 28837, 28842, - 28846, 28851, 28855, 28861, 28866, 28871, 28876, 28882, 28887, 28893, - 28899, 28905, 28909, 0, 0, 0, 28913, 28918, 28927, 28932, 28939, 28944, - 28948, 28951, 28954, 28957, 28960, 28963, 28966, 28969, 28972, 0, 0, 0, - 28975, 28979, 28983, 28987, 28994, 29000, 29006, 29012, 29018, 29024, - 29030, 29036, 29042, 29048, 29055, 29062, 29069, 29076, 29083, 29090, - 29097, 29104, 29111, 29118, 29125, 29132, 29139, 29146, 29153, 29160, - 29167, 29174, 29181, 29188, 29195, 29202, 29209, 29216, 29223, 29230, - 29237, 29244, 29251, 29258, 29266, 29274, 29282, 29288, 29294, 29300, - 29308, 29317, 29322, 29328, 29334, 29342, 29348, 29354, 29360, 29365, - 29372, 29377, 29383, 29389, 29397, 29402, 29408, 29413, 29420, 29426, - 29434, 29442, 29448, 29454, 29461, 29468, 29474, 29480, 29486, 29492, - 29497, 29503, 29511, 29518, 29523, 29529, 29535, 29541, 29549, 29553, - 29559, 29565, 29571, 29577, 29583, 29589, 29593, 29598, 29603, 29610, - 29615, 29619, 29624, 29628, 29632, 29636, 29641, 29646, 29650, 29654, - 29658, 29663, 29667, 29672, 29677, 29681, 29686, 29690, 29695, 29699, - 29704, 29709, 29715, 29720, 29725, 29729, 29734, 29740, 29747, 29751, - 29756, 29761, 29765, 29770, 29774, 29780, 29787, 29794, 29799, 29804, - 29808, 29814, 29819, 29823, 29828, 29833, 29839, 29844, 29850, 29855, - 29861, 29867, 29873, 29879, 29886, 29893, 29900, 29907, 29914, 29919, - 29927, 29936, 29945, 29954, 29963, 29972, 29981, 29993, 30002, 30011, - 30020, 30025, 30030, 30036, 30044, 30052, 30059, 30066, 30073, 30080, - 30088, 30097, 30106, 30115, 30124, 30133, 30142, 30151, 30160, 30169, - 30178, 30187, 30196, 30205, 30214, 30222, 30231, 30242, 30250, 30260, - 30271, 30280, 30289, 30299, 30308, 30316, 30325, 30331, 30336, 30344, - 30349, 30356, 30361, 30370, 30375, 30380, 30387, 30392, 30397, 30405, - 30413, 30422, 30431, 30436, 30443, 30453, 30461, 30470, 30475, 30481, - 30486, 30493, 30498, 30507, 30512, 30517, 30522, 30529, 30534, 30539, - 30548, 30556, 30561, 30566, 30573, 30580, 30584, 30588, 30591, 30594, - 30597, 30600, 30603, 30606, 30613, 30616, 30619, 30624, 30628, 30632, - 30636, 30640, 30644, 30654, 30660, 30666, 30672, 30680, 30688, 30694, - 30699, 30705, 30711, 30716, 30722, 30728, 30733, 30739, 30745, 30753, - 30758, 30764, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 30770, 30775, 30784, 30792, 30800, 30807, 30814, 30821, 30828, - 30836, 30844, 30854, 30864, 30872, 30880, 30888, 30896, 30905, 30914, - 30922, 30930, 30939, 30948, 30958, 30968, 30977, 30986, 30994, 31002, - 31010, 31018, 31028, 31038, 31046, 31054, 31062, 31070, 31078, 31086, - 31094, 31102, 31109, 31116, 31124, 31132, 31141, 31150, 31159, 31168, - 31178, 31188, 31195, 31202, 31210, 31218, 31227, 31236, 31244, 31252, - 31264, 31276, 31285, 31294, 31303, 31312, 31319, 31326, 31334, 31342, - 31350, 31358, 31366, 31374, 31382, 31390, 31399, 31408, 31417, 31426, - 31435, 31444, 31453, 31462, 31472, 31482, 31491, 31500, 31507, 31514, - 31522, 31530, 31538, 31546, 31554, 31562, 31574, 31586, 31595, 31604, - 31612, 31620, 31628, 31636, 31647, 31658, 31669, 31680, 31692, 31704, - 31712, 31720, 31728, 31736, 31745, 31754, 31763, 31772, 31780, 31788, - 31796, 31804, 31812, 31820, 31829, 31838, 31847, 31856, 31863, 31870, - 31878, 31886, 31894, 31902, 31909, 31916, 31923, 31930, 31938, 31946, - 31954, 31962, 31970, 31978, 31985, 31992, 32000, 32008, 32016, 32024, - 32032, 32040, 32049, 32058, 32067, 32074, 32083, 32092, 32101, 32110, - 32120, 32129, 32135, 32140, 32147, 32154, 32162, 32170, 32179, 32188, - 32198, 32208, 32219, 32230, 32239, 32248, 32258, 32268, 32277, 32286, - 32296, 32306, 32317, 32328, 32337, 32346, 32356, 32366, 32373, 32380, - 32388, 32396, 32402, 32408, 32417, 32426, 32436, 32446, 32457, 32468, - 32477, 32486, 32496, 32506, 32515, 32524, 32532, 32540, 32547, 32554, - 32562, 32570, 32579, 32588, 32598, 32608, 32619, 32630, 32639, 32648, - 32658, 32668, 32677, 32686, 32696, 32706, 32717, 32728, 32737, 32746, - 32756, 32766, 32773, 32780, 32788, 32796, 32805, 32814, 32824, 32834, - 32845, 32856, 32865, 32874, 32884, 32894, 32902, 32910, 32918, 32926, - 32935, 32944, 32951, 32958, 32965, 32972, 32978, 32984, 32992, 33000, - 33008, 33016, 33026, 33036, 33046, 33056, 33066, 33076, 33084, 33092, - 33102, 33112, 33122, 33132, 33142, 33152, 33160, 33168, 33178, 33188, - 33198, 0, 0, 33208, 33216, 33224, 33234, 33244, 33254, 0, 0, 33264, - 33272, 33280, 33290, 33300, 33310, 33320, 33330, 33340, 33348, 33356, - 33366, 33376, 33386, 33396, 33406, 33416, 33424, 33432, 33442, 33452, - 33462, 33472, 33482, 33492, 33500, 33508, 33518, 33528, 33538, 33548, - 33558, 33568, 33576, 33584, 33594, 33604, 33614, 0, 0, 33624, 33632, - 33640, 33650, 33660, 33670, 0, 0, 33680, 33688, 33696, 33706, 33716, - 33726, 33736, 33746, 0, 33756, 0, 33764, 0, 33774, 0, 33784, 33794, - 33802, 33810, 33820, 33830, 33840, 33850, 33860, 33870, 33878, 33886, - 33896, 33906, 33916, 33926, 33936, 33946, 33954, 33962, 33970, 33978, - 33986, 33994, 34002, 34010, 34018, 34026, 34034, 34042, 34050, 0, 0, - 34058, 34068, 34078, 34091, 34104, 34117, 34130, 34143, 34156, 34166, - 34176, 34189, 34202, 34215, 34228, 34241, 34254, 34264, 34274, 34287, - 34300, 34313, 34326, 34339, 34352, 34362, 34372, 34385, 34398, 34411, - 34424, 34437, 34450, 34460, 34470, 34483, 34496, 34509, 34522, 34535, - 34548, 34558, 34568, 34581, 34594, 34607, 34620, 34633, 34646, 34654, - 34662, 34673, 34681, 0, 34692, 34700, 34711, 34719, 34727, 34735, 34743, - 34751, 34754, 34757, 34760, 34763, 34769, 34780, 34788, 0, 34799, 34807, - 34818, 34826, 34834, 34842, 34850, 34858, 34863, 34868, 34873, 34881, - 34889, 34900, 0, 0, 34911, 34919, 34930, 34938, 34946, 34954, 0, 34962, - 34967, 34972, 34977, 34985, 34993, 35004, 35015, 35023, 35031, 35039, - 35050, 35058, 35066, 35074, 35082, 35090, 35096, 35102, 0, 0, 35105, - 35116, 35124, 0, 35135, 35143, 35154, 35162, 35170, 35178, 35186, 35194, - 35197, 0, 35200, 35204, 35208, 35212, 35216, 35220, 35224, 35228, 35232, - 35236, 35240, 35244, 35250, 35256, 35262, 35265, 35268, 35270, 35274, - 35278, 35282, 35286, 35288, 35292, 35296, 35302, 35308, 35315, 35322, - 35327, 35332, 35338, 35344, 35346, 35349, 35351, 35355, 35359, 35363, - 35366, 35370, 35374, 35378, 35382, 35386, 35392, 35396, 35400, 35406, - 35411, 35418, 35420, 35423, 35427, 35430, 35434, 35439, 35441, 35450, - 35459, 35462, 35466, 35468, 35470, 35472, 35475, 35481, 35483, 35487, - 35491, 35498, 35505, 35509, 35514, 35519, 35524, 35528, 35532, 35536, - 35539, 35542, 35546, 35553, 35558, 35562, 35566, 35571, 35575, 35579, - 35584, 35589, 35593, 35597, 35601, 35603, 35608, 35613, 35617, 35621, - 35625, 35629, 0, 0, 0, 0, 0, 35633, 35639, 35645, 35651, 35657, 35662, - 35667, 35671, 0, 0, 35677, 35680, 35683, 35686, 35689, 35692, 35695, - 35699, 35703, 35708, 35713, 35718, 35724, 35728, 35731, 35734, 35737, - 35740, 35743, 35746, 35749, 35752, 35755, 35759, 35763, 35768, 35773, 0, - 35778, 35784, 35790, 35796, 35803, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 35810, 35813, 35816, 35819, 35824, 35827, 35830, 35833, 35836, 35839, - 35842, 35846, 35849, 35852, 35855, 35858, 35861, 35866, 35869, 35872, - 35875, 35878, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 35881, 35886, 35891, 35898, 35906, 35911, 35916, 35920, - 35924, 35929, 35936, 35943, 35947, 35952, 35957, 35962, 35967, 35974, - 35979, 35984, 35989, 35998, 36005, 36011, 36015, 36020, 36026, 36031, - 36038, 36046, 36054, 36058, 36062, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 36066, 36070, 36077, 36081, 36085, 36090, 36094, 36098, 36102, - 36104, 36108, 36111, 36114, 36118, 36121, 36125, 36133, 36136, 36140, - 36143, 36146, 36152, 36155, 36158, 36164, 36168, 36172, 36176, 36179, - 36183, 36186, 36190, 36192, 36195, 36198, 36202, 36204, 36208, 36211, - 36214, 36219, 36224, 36230, 36233, 36236, 36240, 36245, 36248, 36251, - 36254, 36258, 36262, 36265, 36268, 36270, 36273, 36276, 36279, 36283, - 36288, 36291, 36295, 36299, 36303, 36307, 36312, 36316, 36320, 36324, - 36329, 36334, 36339, 36343, 36347, 36352, 36356, 36359, 36362, 36364, - 36368, 0, 0, 0, 36374, 36381, 36388, 36395, 36402, 36409, 36417, 36424, - 36432, 36439, 36446, 36454, 36462, 36467, 36471, 36475, 36479, 36483, - 36487, 36491, 36495, 36499, 36503, 36508, 36513, 36518, 36523, 36529, - 36536, 36542, 36547, 36552, 36557, 36562, 36567, 36572, 36577, 36582, - 36587, 36593, 36599, 36605, 36611, 36618, 36626, 36633, 36643, 36650, - 36657, 36664, 36670, 36678, 36686, 36693, 0, 0, 0, 0, 0, 0, 0, 36701, - 36703, 36706, 36708, 36711, 36714, 36717, 36722, 36727, 36732, 36737, - 36741, 36745, 36749, 36753, 36758, 36764, 36769, 36775, 36780, 36785, - 36790, 36796, 36801, 36807, 36813, 36817, 36821, 36826, 36831, 36836, - 36841, 36846, 36854, 36862, 36870, 36878, 36885, 36893, 36900, 36907, - 36915, 36925, 36932, 36939, 36946, 36953, 36961, 36969, 36976, 36983, - 36991, 36999, 37004, 37012, 37017, 37022, 37028, 37033, 37039, 37046, - 37053, 37058, 37064, 37069, 37072, 37076, 37079, 37083, 37087, 37091, - 37097, 37103, 37109, 37115, 37119, 37123, 37127, 37131, 37137, 37143, - 37147, 37152, 37156, 37161, 37165, 37169, 37172, 37176, 37179, 37183, - 37190, 37198, 37209, 37220, 37225, 37234, 37241, 37249, 37257, 37261, - 37267, 37275, 37279, 37284, 37289, 37295, 37301, 37307, 37314, 37318, - 37322, 37327, 37330, 37332, 37336, 37340, 37347, 37351, 37353, 37355, - 37359, 37366, 37371, 37377, 37386, 37393, 37398, 37402, 37406, 37410, - 37413, 37416, 37419, 37423, 37427, 37431, 37435, 37439, 37442, 37446, - 37450, 37453, 37455, 37458, 37460, 37464, 37468, 37470, 37475, 37478, - 37482, 37486, 37490, 37492, 37494, 37496, 37499, 37503, 37507, 37511, - 37515, 37519, 37525, 37531, 37533, 37535, 37537, 37539, 37542, 37544, - 37548, 37550, 37554, 37556, 37561, 37565, 37569, 37571, 37574, 37578, - 37583, 37587, 37596, 37606, 37610, 37615, 37621, 37624, 37628, 37631, - 37636, 37640, 37646, 37650, 37661, 37669, 37673, 37677, 37683, 37687, - 37690, 37692, 37695, 37699, 37703, 37709, 37713, 37717, 37720, 37723, - 37727, 37732, 37737, 37742, 37747, 37752, 37759, 37766, 37770, 37774, - 37776, 37780, 37783, 37786, 37794, 37802, 37808, 37814, 37823, 37832, - 37837, 37842, 37850, 37858, 37860, 37862, 37867, 37872, 37878, 37884, - 37889, 37894, 37898, 37902, 37908, 37914, 37920, 37926, 37936, 37946, - 37953, 37960, 37962, 37966, 37970, 37975, 37980, 37987, 37994, 37997, - 38000, 38003, 38006, 38009, 38014, 38018, 38023, 38028, 38031, 38034, - 38038, 38042, 38046, 38051, 38054, 38057, 38060, 38063, 38065, 38067, - 38069, 38071, 38079, 38087, 38092, 38095, 38100, 38110, 38116, 38122, - 38128, 38136, 38144, 38155, 38159, 38163, 38165, 38171, 38173, 38175, - 38177, 38179, 38185, 38188, 38194, 38200, 38204, 38208, 38212, 38215, - 38219, 38223, 38225, 38234, 38243, 38248, 38253, 38258, 38264, 38270, - 38273, 38276, 38279, 38282, 38284, 38289, 38294, 38299, 38305, 38311, - 38318, 38325, 38330, 38335, 38340, 38345, 38353, 38361, 38369, 38377, - 38385, 38393, 38401, 38409, 38417, 38425, 38432, 38443, 38452, 38466, - 38469, 38474, 38480, 38486, 38493, 38507, 38522, 38528, 38534, 38541, - 38547, 38555, 38561, 38574, 38588, 38593, 38599, 38606, 38609, 38612, - 38614, 38617, 38620, 38622, 38624, 38628, 38631, 38634, 38637, 38640, - 38645, 38650, 38655, 38660, 38663, 38666, 38668, 38670, 38672, 38676, - 38680, 38684, 38690, 38693, 38695, 38697, 38702, 38707, 38712, 38717, - 38722, 38727, 38729, 38731, 38740, 38744, 38751, 38760, 38762, 38767, - 38772, 38779, 38783, 38785, 38789, 38791, 38795, 38799, 38803, 38805, - 38807, 38809, 38814, 38821, 38828, 38835, 38842, 38849, 38856, 38863, - 38870, 38876, 38882, 38889, 38896, 38903, 38910, 38916, 38922, 38929, - 38936, 38943, 38951, 38958, 38966, 38973, 38981, 38988, 38996, 39004, - 39011, 39019, 39026, 39034, 39041, 39049, 39056, 39063, 39070, 39077, - 39084, 39092, 39099, 39106, 39113, 39120, 39126, 39132, 39138, 39144, - 39152, 39160, 39166, 39172, 39178, 39184, 39189, 39195, 39202, 39210, - 39217, 39224, 39231, 39236, 39241, 39246, 39253, 39260, 39267, 39274, - 39279, 39283, 39292, 39298, 39301, 39309, 39312, 39317, 39322, 39325, - 39328, 39336, 39339, 39344, 39347, 39354, 39359, 39367, 39370, 39373, - 39376, 39381, 39386, 39389, 39392, 39399, 39402, 39407, 39414, 39418, - 39422, 39427, 39432, 39438, 39443, 39448, 39454, 39459, 39464, 39472, - 39478, 39485, 39493, 39499, 39506, 39514, 39523, 39530, 39536, 39544, - 39553, 39560, 39564, 39569, 39581, 39593, 39597, 39601, 39605, 39609, - 39619, 39623, 39628, 39633, 39638, 39643, 39648, 39653, 39663, 39673, - 39681, 39691, 39701, 39709, 39719, 39729, 39737, 39747, 39757, 39765, - 39773, 39783, 39793, 39796, 39799, 39802, 39807, 39811, 39817, 39824, - 39831, 39839, 39846, 39850, 39854, 39858, 39862, 39864, 39868, 39872, - 39877, 39882, 39889, 39896, 39899, 39906, 39908, 39910, 39914, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 39918, - 39922, 39929, 39936, 39943, 39950, 39954, 39958, 39962, 39966, 39971, - 39977, 39982, 39987, 39993, 39999, 40005, 40013, 40020, 40027, 40034, - 40041, 40047, 40053, 40062, 40066, 40073, 40077, 40081, 40087, 40093, - 40099, 40105, 40109, 40113, 40116, 40120, 40124, 40130, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 40136, 40139, - 40143, 40147, 40153, 40159, 40165, 40173, 40180, 40184, 40192, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 40197, 40200, - 40203, 40206, 40209, 40212, 40215, 40218, 40221, 40224, 40228, 40232, - 40236, 40240, 40244, 40248, 40252, 40256, 40260, 40264, 40268, 40271, - 40274, 40277, 40280, 40283, 40286, 40289, 40292, 40295, 40299, 40303, - 40307, 40311, 40315, 40319, 40323, 40327, 40331, 40335, 40339, 40345, - 40351, 40357, 40364, 40371, 40378, 40385, 40392, 40399, 40406, 40413, - 40420, 40427, 40434, 40441, 40448, 40455, 40462, 40469, 40476, 40481, - 40487, 40493, 40499, 40504, 40510, 40515, 40520, 40525, 40531, 40537, - 40542, 40547, 40552, 40557, 40563, 40569, 40574, 40579, 40585, 40590, - 40595, 40601, 40607, 40613, 40619, 40624, 40630, 40636, 40642, 40647, - 40653, 40658, 40663, 40668, 40674, 40680, 40685, 40690, 40695, 40700, - 40706, 40712, 40717, 40722, 40728, 40733, 40738, 40744, 40750, 40756, - 40762, 40767, 40773, 40779, 40785, 40790, 40796, 40801, 40806, 40811, - 40817, 40823, 40828, 40833, 40838, 40843, 40849, 40855, 40860, 40865, - 40871, 40876, 40881, 40887, 40893, 40899, 40905, 40909, 40915, 40921, - 40927, 40933, 40939, 40945, 40951, 40957, 40963, 40969, 40973, 40977, - 40981, 40985, 40989, 40993, 40997, 41001, 41005, 41010, 41016, 41021, - 41026, 41031, 41036, 41045, 41054, 41063, 41072, 41081, 41090, 41099, - 41108, 41115, 41123, 41131, 41138, 41145, 41153, 41161, 41168, 41175, - 41183, 41191, 41198, 41205, 41213, 41221, 41228, 41235, 41243, 41252, - 41261, 41269, 41278, 41287, 41294, 41301, 41309, 41318, 41327, 41335, - 41344, 41353, 41360, 41367, 41376, 41385, 41393, 41401, 41410, 41419, - 41426, 41433, 41442, 41451, 41459, 41467, 41476, 41485, 41492, 41499, - 41508, 41517, 41525, 41534, 41543, 41551, 41561, 41571, 41581, 41591, - 41600, 41609, 41618, 41627, 41634, 41642, 41650, 41658, 41666, 41671, - 41676, 41685, 41693, 41700, 41709, 41717, 41724, 41733, 41741, 41748, - 41757, 41765, 41772, 41781, 41789, 41796, 41805, 41813, 41820, 41829, - 41837, 41844, 41853, 41861, 41868, 41877, 41885, 41892, 41901, 41910, - 41919, 41928, 41940, 41952, 41959, 41964, 41969, 41974, 41979, 41984, - 41989, 41994, 41999, 42007, 42015, 42023, 42031, 42036, 42042, 42048, - 42054, 42058, 42065, 42071, 42078, 42082, 42089, 42095, 42102, 42106, - 42112, 42118, 42124, 42128, 42131, 42135, 42139, 42146, 42152, 42157, - 42162, 42168, 42180, 42189, 42202, 42215, 42221, 42230, 42242, 42245, - 42248, 42255, 42263, 42268, 42273, 42281, 42291, 42301, 42309, 42313, - 42317, 42320, 42323, 42327, 42331, 42334, 42337, 42342, 42347, 42353, - 42359, 42364, 42369, 42375, 42381, 42386, 42391, 42396, 42401, 42407, - 42413, 42418, 42423, 42429, 42435, 42440, 42445, 42448, 42451, 42460, - 42462, 42464, 42467, 42471, 42477, 42479, 42482, 42489, 42496, 42503, - 42511, 42521, 42535, 42540, 42545, 42549, 42554, 42562, 42569, 42578, - 42587, 42595, 42603, 42608, 42612, 42617, 42622, 42628, 42634, 42637, - 42643, 42649, 42659, 42668, 42676, 42684, 42693, 42702, 42706, 42714, - 42721, 42728, 42736, 42745, 42753, 42761, 42770, 42775, 42780, 42784, - 42789, 42794, 42800, 42806, 42810, 42816, 42818, 42820, 42822, 42824, - 42827, 42830, 42832, 42834, 42836, 42840, 42844, 42846, 42848, 42851, - 42854, 42858, 42864, 42870, 42872, 42879, 42883, 42888, 42893, 42895, - 42904, 42910, 42916, 42922, 42928, 42934, 42940, 42945, 42948, 42951, - 42954, 42956, 42958, 42962, 42966, 42971, 42976, 42981, 42984, 42988, - 42993, 42996, 43000, 43005, 43010, 43015, 43020, 43025, 43030, 43035, - 43040, 43045, 43050, 43055, 43060, 43066, 43072, 43078, 43080, 43083, - 43085, 43088, 43090, 43092, 43094, 43096, 43098, 43100, 43102, 43104, - 43106, 43108, 43110, 43112, 43114, 43116, 43118, 43120, 43122, 43127, - 43132, 43137, 43142, 43147, 43152, 43157, 43162, 43167, 43172, 43177, - 43182, 43187, 43192, 43197, 43202, 43207, 43212, 43217, 43222, 43226, - 43230, 43234, 43240, 43246, 43251, 43256, 43261, 43266, 43271, 43276, - 43284, 43292, 43300, 43308, 43316, 43324, 43332, 43340, 43346, 43351, - 43356, 43361, 43364, 43368, 43372, 43376, 43380, 43384, 43388, 43395, - 43402, 43410, 43418, 43423, 43428, 43435, 43442, 43449, 43456, 43459, - 43462, 43467, 43469, 43473, 43478, 43480, 43482, 43484, 43486, 43491, - 43494, 43496, 0, 0, 43501, 43504, 43508, 43513, 43518, 43526, 43532, - 43537, 43548, 43554, 43560, 43565, 43570, 43576, 43579, 43582, 43587, - 43589, 43593, 43595, 43597, 43599, 43601, 43603, 43605, 43610, 43612, - 43614, 43616, 0, 0, 0, 43618, 43623, 43628, 43633, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 43638, 43644, 43647, 43652, 0, 43655, 43660, 43664, - 43666, 0, 0, 43668, 43672, 43676, 43680, 43682, 43687, 43690, 43693, - 43696, 43700, 43704, 43709, 43713, 43718, 43723, 43727, 43733, 43740, - 43743, 43749, 43754, 43758, 43763, 43769, 43775, 43782, 43788, 43795, 0, - 43802, 43809, 43813, 43820, 43826, 43831, 43837, 43841, 43846, 43849, - 43855, 43861, 43868, 43876, 43883, 43892, 43902, 43909, 43915, 43919, - 43927, 43932, 43941, 43944, 43947, 43956, 43967, 43974, 43976, 43982, - 43987, 43989, 43992, 43996, 44004, 0, 44013, 0, 44018, 44025, 44033, - 44040, 0, 0, 0, 44048, 0, 44056, 44059, 44063, 44066, 44077, 44087, - 44097, 0, 0, 44106, 44115, 44121, 44129, 44133, 44141, 44145, 44153, - 44160, 44167, 44176, 44185, 44195, 44205, 44215, 44225, 44234, 44243, - 44253, 44263, 44272, 44281, 44288, 44295, 44302, 44309, 44316, 44323, - 44330, 44337, 44344, 44352, 44358, 44364, 44370, 44376, 44382, 44388, - 44394, 44400, 44406, 44413, 44421, 44429, 44437, 44445, 44453, 44461, - 44469, 44477, 44485, 44494, 0, 0, 0, 44499, 44505, 44508, 44514, 44520, - 44525, 44529, 44534, 44540, 44547, 44550, 44557, 44564, 44568, 44577, - 44586, 44591, 44597, 44602, 44607, 44614, 44621, 44628, 44636, 0, 44644, - 44653, 44658, 44662, 44669, 44673, 44680, 44688, 44693, 44701, 44705, - 44710, 44714, 44719, 0, 44723, 44728, 44737, 44739, 44743, 44747, 44754, - 44761, 44766, 44774, 44780, 0, 44786, 0, 0, 0, 44789, 44797, 44801, - 44808, 44815, 44823, 44828, 44833, 44839, 44844, 44849, 44855, 44860, - 44863, 44867, 44871, 44878, 44887, 44892, 44901, 44910, 44916, 44922, - 44927, 44932, 44937, 44942, 44948, 44954, 44962, 44970, 44976, 44982, - 44987, 44992, 44999, 45006, 45012, 45015, 45018, 45022, 45026, 45030, - 45035, 45041, 45047, 45054, 45061, 45066, 45070, 45074, 45078, 45082, - 45086, 45090, 45094, 45098, 45102, 45106, 45110, 45114, 45118, 45122, - 45126, 45130, 45134, 45138, 45142, 45146, 45150, 45154, 45158, 45162, - 45166, 45170, 45174, 45178, 45182, 45186, 45190, 45194, 45198, 45202, - 45206, 45210, 45214, 45218, 45222, 45226, 45230, 45234, 45238, 45242, - 45246, 45250, 45254, 45258, 45262, 45266, 45270, 45274, 45278, 45282, - 45286, 45290, 45294, 45298, 45302, 45306, 45310, 45314, 45318, 45322, - 45326, 45330, 45334, 45338, 45342, 45346, 45350, 45354, 45358, 45362, - 45366, 45370, 45374, 45378, 45382, 45386, 45390, 45394, 45398, 45402, - 45406, 45410, 45414, 45418, 45422, 45426, 45430, 45434, 45438, 45442, - 45446, 45450, 45454, 45458, 45462, 45466, 45470, 45474, 45478, 45482, - 45486, 45490, 45494, 45498, 45502, 45506, 45510, 45514, 45518, 45522, - 45526, 45530, 45534, 45538, 45542, 45546, 45550, 45554, 45558, 45562, - 45566, 45570, 45574, 45578, 45582, 45586, 45590, 45594, 45598, 45602, - 45606, 45610, 45614, 45618, 45622, 45626, 45630, 45634, 45638, 45642, - 45646, 45650, 45654, 45658, 45662, 45666, 45670, 45674, 45678, 45682, - 45686, 45690, 45694, 45698, 45702, 45706, 45710, 45714, 45718, 45722, - 45726, 45730, 45734, 45738, 45742, 45746, 45750, 45754, 45758, 45762, - 45766, 45770, 45774, 45778, 45782, 45786, 45790, 45794, 45798, 45802, - 45806, 45810, 45814, 45818, 45822, 45826, 45830, 45834, 45838, 45842, - 45846, 45850, 45854, 45858, 45862, 45866, 45870, 45874, 45878, 45882, - 45886, 45890, 45894, 45898, 45902, 45906, 45910, 45914, 45918, 45922, - 45926, 45930, 45934, 45938, 45942, 45946, 45950, 45954, 45958, 45962, - 45966, 45970, 45974, 45978, 45982, 45986, 45990, 45994, 45998, 46002, - 46006, 46010, 46014, 46018, 46022, 46026, 46030, 46034, 46038, 46042, - 46046, 46050, 46054, 46058, 46062, 46066, 46070, 46074, 46078, 46082, - 46086, 46090, 46097, 46105, 46111, 46117, 46124, 46131, 46137, 46143, - 46149, 46155, 46160, 46165, 46170, 46175, 46181, 46187, 46195, 46202, - 46207, 46212, 46220, 46229, 46236, 46246, 46257, 46260, 46263, 46267, - 46271, 46277, 46283, 46293, 46303, 46313, 46323, 46330, 46337, 46344, - 46351, 46362, 46373, 46384, 46395, 46405, 46415, 46427, 46439, 46450, - 46461, 46473, 46485, 46494, 46504, 46514, 46525, 46536, 46543, 46550, - 46557, 46564, 46574, 46584, 46591, 46598, 46605, 46612, 46619, 46626, - 46633, 46638, 46643, 46649, 46657, 46667, 46675, 46683, 46691, 46699, - 46707, 46715, 46723, 46731, 46739, 46747, 46756, 46765, 46773, 46781, - 46790, 46799, 46808, 46817, 46827, 46837, 46846, 46855, 46865, 46875, - 46889, 46906, 46920, 46937, 46951, 46965, 46979, 46993, 47003, 47014, - 47024, 47035, 47052, 47069, 47077, 47083, 47090, 47097, 47104, 47111, - 47116, 47122, 47127, 47132, 47138, 47143, 47148, 47153, 47158, 47163, - 47170, 47175, 47182, 47187, 47192, 47196, 47200, 47207, 47214, 47221, - 47228, 47235, 47242, 47255, 47268, 47281, 47294, 47302, 47310, 47316, - 47322, 47329, 47336, 47343, 47350, 47354, 47359, 47367, 47375, 47383, - 47390, 47394, 47402, 47410, 47413, 47416, 47421, 47427, 47435, 47443, - 47463, 47483, 47503, 47523, 47543, 47563, 47583, 47603, 47608, 47615, - 47624, 47632, 47640, 47645, 47648, 47651, 47656, 47659, 47678, 47685, - 47691, 47697, 47701, 47704, 47707, 47710, 47721, 47733, 47741, 47749, - 47753, 47758, 47762, 47767, 47772, 47777, 47783, 47792, 47799, 47806, - 47814, 47821, 47828, 47831, 47837, 47843, 47846, 47849, 47854, 47859, - 47865, 47871, 47875, 47880, 47887, 47891, 47897, 47901, 47905, 47913, - 47925, 47933, 47937, 47939, 47948, 47957, 47963, 47966, 47972, 47978, - 47983, 47988, 47993, 47998, 48003, 48008, 48010, 48016, 48021, 48028, - 48032, 48038, 48041, 48045, 48052, 48059, 48061, 48063, 48069, 48075, - 48081, 48090, 48099, 48106, 48113, 48119, 48125, 48130, 48135, 48140, - 48146, 48152, 48157, 48164, 48168, 48172, 48185, 48198, 48209, 48218, - 48224, 48231, 48236, 48241, 48246, 48251, 48256, 48258, 48265, 48272, - 48279, 48286, 48293, 48301, 48307, 48312, 48318, 48324, 48330, 48337, - 48343, 48351, 48359, 48367, 48375, 48382, 48388, 48394, 48403, 48407, - 48416, 48425, 48434, 48442, 48446, 48452, 48459, 48466, 48470, 48476, - 48483, 48488, 48493, 48499, 48504, 48509, 48516, 48523, 48528, 48533, - 48541, 48549, 48559, 48569, 48576, 48583, 48587, 48591, 48603, 48609, - 48615, 48620, 48625, 48632, 48639, 48645, 48651, 48660, 48668, 48676, - 48683, 48690, 48697, 48703, 48710, 48716, 48723, 48730, 48737, 48744, - 48750, 48755, 48764, 48774, 48781, 48790, 48796, 48801, 48806, 48815, - 48821, 48827, 48833, 48841, 48846, 48853, 48860, 48871, 48878, 48885, - 48892, 48899, 48906, 48913, 48920, 48931, 48942, 48952, 48962, 48974, - 48986, 48991, 48996, 49004, 49012, 49018, 49024, 49033, 49042, 49050, - 49058, 49066, 49074, 49084, 49094, 49108, 49122, 49129, 49136, 49147, - 49158, 49165, 49172, 49181, 49190, 49195, 49200, 49209, 49218, 49223, - 49228, 49236, 49242, 49248, 49256, 49264, 49277, 49290, 49294, 49298, - 49305, 49312, 49319, 49327, 49335, 49343, 49351, 49357, 49363, 49369, - 49375, 49382, 49389, 49397, 49405, 49408, 49411, 49416, 49421, 49427, - 49433, 49440, 49447, 49456, 49465, 49472, 49479, 49487, 49495, 49503, - 49511, 49518, 49525, 49532, 49539, 49543, 49547, 49554, 49561, 49566, - 49571, 49576, 49581, 49587, 49601, 49608, 49615, 49619, 49621, 49623, - 49628, 49633, 49638, 49642, 49650, 49657, 49664, 49672, 49684, 49692, - 49700, 49711, 49715, 49719, 49723, 49728, 49739, 49746, 49753, 49760, - 49765, 49772, 49781, 49789, 49795, 49801, 49807, 49816, 49825, 49833, - 49842, 49847, 49850, 49855, 49861, 49867, 49873, 49879, 49883, 49886, - 49890, 49894, 49900, 49906, 49912, 49918, 49922, 49926, 49933, 49940, - 49947, 49954, 49961, 49968, 49978, 49987, 49994, 50001, 50009, 50017, - 50021, 50026, 50031, 50037, 50043, 50046, 50049, 50052, 50055, 50059, - 50064, 50069, 50074, 50079, 50084, 50088, 50092, 50096, 50100, 50104, - 50108, 50112, 50118, 50122, 50128, 50133, 50140, 50148, 50155, 50163, - 50170, 50178, 50187, 50194, 50204, 50215, 50221, 50230, 50236, 50245, - 50254, 50260, 50266, 50270, 50274, 50283, 50292, 50299, 50306, 50315, 0, - 0, 0, 50324, 50329, 50333, 50337, 50342, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 50347, 50352, 50357, 50362, 50367, 50372, 50377, - 50382, 50387, 50392, 50397, 50403, 50407, 50412, 50417, 50422, 50427, - 50432, 50437, 50442, 50447, 50452, 50457, 50462, 50467, 50472, 50477, - 50482, 50487, 50492, 50497, 50502, 50507, 50512, 50517, 50523, 50528, - 50534, 50543, 50548, 50556, 50563, 50572, 50577, 50582, 50587, 50593, 0, - 50600, 50605, 50610, 50615, 50620, 50625, 50630, 50635, 50640, 50645, - 50650, 50656, 50660, 50665, 50670, 50675, 50680, 50685, 50690, 50695, - 50700, 50705, 50710, 50715, 50720, 50725, 50730, 50735, 50740, 50745, - 50750, 50755, 50760, 50765, 50770, 50776, 50781, 50787, 50796, 50801, - 50809, 50816, 50825, 50830, 50835, 50840, 50846, 0, 50853, 50861, 50869, - 50878, 50885, 50893, 50899, 50908, 50916, 50924, 50932, 50940, 50948, - 50956, 50961, 50968, 0, 50973, 50981, 50988, 50995, 51003, 51008, 51013, - 51020, 51027, 51036, 51046, 51052, 51059, 0, 0, 51063, 51068, 51073, - 51078, 51083, 51088, 51093, 51098, 51103, 51108, 51113, 51118, 51123, - 51128, 51133, 51138, 51143, 51148, 51153, 51158, 51163, 51168, 51173, - 51178, 51183, 51188, 51193, 51198, 51203, 51208, 51213, 51217, 51221, - 51226, 51231, 51236, 51241, 51246, 51251, 51256, 51261, 51266, 51271, - 51276, 51281, 51286, 51291, 51296, 51301, 51306, 51311, 51318, 51325, - 51332, 51339, 51346, 51353, 51360, 51367, 51374, 51381, 51388, 51395, - 51402, 51409, 51414, 51419, 51426, 51433, 51440, 51447, 51454, 51461, - 51468, 51475, 51482, 51489, 51496, 51503, 51509, 51515, 51521, 51527, - 51534, 51541, 51548, 51555, 51562, 51569, 51576, 51583, 51590, 51597, - 51605, 51613, 51621, 51629, 51637, 51645, 51653, 51661, 51665, 51671, - 51677, 51681, 51687, 51693, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 51699, 51707, 51716, 51725, 51733, 51739, 51744, 51749, 51754, 51759, - 51764, 51769, 51774, 51779, 51784, 51789, 51794, 51799, 51804, 51809, - 51814, 51819, 51824, 51829, 51834, 51839, 51844, 51849, 51854, 51859, - 51864, 51869, 51874, 51879, 51884, 51889, 51894, 51899, 51904, 51909, - 51914, 51919, 51924, 51929, 51934, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 51939, - 51942, 51946, 51950, 51954, 51958, 51966, 51970, 51974, 51978, 51982, - 51986, 51990, 51994, 51998, 52004, 52008, 52012, 52020, 52026, 52030, - 52034, 52038, 52044, 52048, 52054, 52058, 52062, 52068, 52074, 52078, - 52082, 52086, 52092, 52098, 52102, 52106, 52110, 52114, 52118, 52124, - 52130, 52134, 52138, 52142, 52146, 52150, 52154, 52158, 52162, 52166, - 52170, 52174, 52180, 0, 0, 0, 0, 0, 0, 0, 0, 0, 52184, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 52190, 52194, 52198, 52202, 52206, 52210, - 52214, 52218, 52222, 52226, 52230, 52236, 52240, 52244, 52248, 52252, - 52256, 52260, 52264, 52268, 52272, 52276, 52280, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 52284, 52288, 52292, 52296, 52300, 52304, 52308, 0, 52312, 52316, - 52320, 52324, 52328, 52332, 52336, 0, 52340, 52344, 52348, 52352, 52356, - 52360, 52364, 0, 52368, 52372, 52376, 52380, 52384, 52388, 52392, 0, - 52396, 52400, 52404, 52408, 52412, 52416, 52420, 0, 52424, 52428, 52432, - 52436, 52440, 52444, 52448, 0, 52452, 52456, 52460, 52464, 52468, 52472, - 52476, 0, 52480, 52484, 52488, 52492, 52496, 52500, 52504, 0, 52508, - 52513, 52518, 52523, 52528, 52533, 52538, 52542, 52547, 52552, 52557, - 52561, 52566, 52571, 52576, 52581, 52585, 52590, 52595, 52600, 52605, - 52610, 52615, 52619, 52624, 52629, 52636, 52641, 52646, 52652, 52659, - 52666, 52675, 52682, 52691, 52695, 52699, 52705, 52711, 52717, 52725, - 52731, 52735, 52739, 52743, 52749, 52755, 52759, 52761, 52765, 52770, - 52772, 52776, 52780, 52784, 52790, 52795, 52799, 52803, 52807, 52813, - 52818, 52823, 52828, 52833, 52840, 52847, 52852, 52857, 52862, 52867, - 52872, 52877, 52881, 52885, 52892, 52899, 52906, 52910, 52914, 52916, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 52920, 52924, 52928, 52933, 52938, 52943, 52947, 52951, - 52955, 52960, 52965, 52969, 52973, 52977, 52981, 52986, 52991, 52996, - 53001, 53005, 53009, 53014, 53019, 53024, 53029, 53033, 0, 53037, 53041, - 53045, 53049, 53053, 53057, 53061, 53066, 53071, 53075, 53080, 53085, - 53094, 53098, 53102, 53106, 53113, 53117, 53122, 53127, 53131, 53135, - 53141, 53146, 53151, 53156, 53161, 53165, 53169, 53173, 53177, 53181, - 53186, 53191, 53195, 53199, 53204, 53209, 53214, 53218, 53222, 53227, - 53232, 53238, 53244, 53248, 53254, 53260, 53264, 53270, 53276, 53281, - 53286, 53290, 53296, 53300, 53304, 53310, 53316, 53321, 53326, 53330, - 53334, 53342, 53348, 53354, 53360, 53365, 53370, 53375, 53381, 53385, - 53391, 53395, 53399, 53405, 53411, 53417, 53423, 53429, 53435, 53441, - 53447, 53453, 53459, 53465, 53471, 53475, 53481, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 53487, 53490, 53494, 53498, 53502, 53506, 53509, 53512, - 53516, 53520, 53524, 53528, 53531, 53536, 53540, 53544, 53548, 53554, - 53558, 53562, 53566, 53570, 53577, 53583, 53587, 53591, 53595, 53599, - 53603, 53607, 53611, 53615, 53619, 53623, 53627, 53633, 53637, 53641, - 53645, 53649, 53653, 53657, 53661, 53665, 53669, 53673, 53677, 53681, - 53685, 53689, 53693, 53697, 53703, 53709, 53714, 53719, 53723, 53727, - 53731, 53735, 53739, 53743, 53747, 53751, 53755, 53759, 53763, 53767, - 53771, 53775, 53779, 53783, 53787, 53791, 53795, 53799, 53803, 53807, - 53811, 53815, 53821, 53825, 53829, 53833, 53837, 53841, 53845, 53849, - 53853, 53858, 53865, 53869, 53873, 53877, 53881, 53885, 53889, 53893, - 53897, 53901, 53905, 53909, 53913, 53920, 53924, 53930, 53934, 53938, - 53942, 53946, 53950, 53953, 53957, 53961, 53965, 53969, 53973, 53977, - 53981, 53985, 53989, 53993, 53997, 54001, 54005, 54009, 54013, 54017, - 54021, 54025, 54029, 54033, 54037, 54041, 54045, 54049, 54053, 54057, - 54061, 54065, 54069, 54073, 54077, 54081, 54087, 54091, 54095, 54099, - 54103, 54107, 54111, 54115, 54119, 54123, 54127, 54131, 54135, 54139, - 54143, 54147, 54151, 54155, 54159, 54163, 54167, 54171, 54175, 54179, - 54183, 54187, 54191, 54195, 54203, 54207, 54211, 54215, 54219, 54223, - 54229, 54233, 54237, 54241, 54245, 54249, 54253, 54257, 54261, 54265, - 54269, 54273, 54277, 54281, 54287, 54291, 54295, 54299, 54303, 54307, - 54311, 54315, 54319, 54323, 54327, 54331, 54335, 54339, 54343, 54347, - 54351, 54355, 54359, 54363, 54367, 54371, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 54375, 54383, 54390, - 54401, 54411, 54419, 54428, 54437, 54447, 54459, 54471, 54482, 0, 0, 0, - 0, 54488, 54491, 54494, 54499, 54502, 54509, 54513, 54517, 54521, 54525, - 54529, 54534, 54539, 54543, 54547, 54552, 54557, 54562, 54567, 54570, - 54573, 54579, 54585, 54590, 54595, 54602, 54609, 54613, 54617, 54621, - 54628, 54634, 54641, 54646, 54650, 54654, 54658, 54662, 54666, 54670, - 54674, 54678, 54682, 54687, 54692, 54697, 54702, 54708, 54713, 54717, - 54723, 54734, 54744, 54759, 54768, 54772, 54781, 54786, 54791, 54796, - 54801, 54804, 54809, 54813, 0, 54819, 54823, 54826, 54830, 54833, 54837, - 54840, 54844, 54847, 54851, 54854, 54857, 54861, 54865, 54869, 54873, - 54877, 54881, 54885, 54889, 54893, 54897, 54901, 54905, 54909, 54913, - 54917, 54921, 54925, 54929, 54933, 54937, 54941, 54945, 54949, 54954, - 54958, 54962, 54966, 54970, 54973, 54977, 54981, 54985, 54989, 54993, - 54997, 55000, 55004, 55007, 55011, 55015, 55019, 55023, 55027, 55031, - 55035, 55039, 55043, 55047, 55051, 55055, 55058, 55062, 55066, 55070, - 55074, 55078, 55081, 55086, 55090, 55095, 55099, 55102, 55106, 55110, - 55114, 55118, 55123, 55127, 55131, 55135, 55139, 55142, 55146, 55150, 0, - 0, 55155, 55163, 55171, 55178, 55185, 55189, 55195, 55200, 55205, 55209, - 55212, 55216, 55219, 55223, 55226, 55230, 55233, 55237, 55240, 55243, - 55247, 55251, 55255, 55259, 55263, 55267, 55271, 55275, 55279, 55283, - 55287, 55291, 55295, 55299, 55303, 55307, 55311, 55315, 55319, 55323, - 55327, 55331, 55335, 55340, 55344, 55348, 55352, 55356, 55359, 55363, - 55367, 55371, 55375, 55379, 55383, 55386, 55390, 55393, 55397, 55401, - 55405, 55409, 55413, 55417, 55421, 55425, 55429, 55433, 55437, 55441, - 55444, 55448, 55452, 55456, 55460, 55464, 55467, 55472, 55476, 55481, - 55485, 55488, 55492, 55496, 55500, 55504, 55509, 55513, 55517, 55521, - 55525, 55528, 55532, 55536, 55541, 55545, 55549, 55553, 55557, 55562, - 55569, 55573, 55579, 0, 0, 0, 0, 0, 55584, 55588, 55592, 55595, 55599, - 55603, 55607, 55610, 55613, 55616, 55620, 55623, 55627, 55631, 55635, - 55639, 55643, 55647, 55650, 55654, 55658, 55661, 55664, 55667, 55670, - 55674, 55678, 55682, 55686, 55690, 55694, 55698, 55702, 55706, 55710, - 55713, 55716, 55720, 55723, 55727, 55731, 0, 0, 0, 55735, 55739, 55743, - 55747, 55751, 55755, 55759, 55763, 55767, 55771, 55775, 55779, 55783, - 55787, 55791, 55795, 55799, 55803, 55807, 55811, 55815, 55819, 55823, - 55827, 55831, 55835, 55839, 55843, 55847, 55851, 55855, 55858, 55862, - 55865, 55869, 55873, 55876, 55880, 55884, 55887, 55891, 55895, 55899, - 55903, 55906, 55910, 55914, 55918, 55922, 55926, 55930, 55933, 55936, - 55940, 55944, 55948, 55952, 55956, 55960, 55964, 55968, 55972, 55976, - 55980, 55984, 55988, 55992, 55996, 56000, 56004, 56008, 56012, 56016, - 56020, 56024, 56028, 56032, 56036, 56040, 56044, 56048, 56052, 56056, - 56060, 56064, 56068, 56072, 56076, 56080, 56084, 56088, 56092, 56096, - 56100, 0, 56104, 56110, 56116, 56121, 56126, 56131, 56137, 56143, 56149, - 56155, 56161, 56167, 56173, 56179, 56185, 56191, 56197, 56201, 56205, - 56209, 56213, 56217, 56221, 56225, 56229, 56233, 56237, 56241, 56245, - 56249, 56253, 56257, 56261, 56265, 56269, 56273, 56277, 56282, 56287, - 56292, 0, 0, 0, 0, 0, 0, 0, 0, 56296, 56300, 56304, 56308, 56312, 56316, - 56320, 56324, 56328, 56332, 56336, 56340, 56344, 56348, 56352, 56356, - 56359, 56362, 56365, 56369, 56373, 56377, 56381, 56385, 56389, 56393, - 56397, 56401, 56405, 56409, 56413, 56417, 56421, 56425, 56429, 56433, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 56437, 56442, 56447, 56452, 56456, - 56461, 56465, 56470, 56475, 56480, 56485, 56490, 56494, 56499, 56504, - 56509, 56514, 56518, 56522, 56526, 56530, 56534, 56538, 56542, 56546, - 56550, 56554, 56558, 56562, 56566, 56570, 56575, 56580, 56585, 56590, - 56595, 56600, 56605, 56610, 56615, 56620, 56625, 56630, 56635, 56640, - 56645, 56651, 0, 56658, 56661, 56664, 56667, 56670, 56673, 56676, 56679, - 56682, 56685, 56689, 56693, 56697, 56701, 56705, 56709, 56713, 56717, - 56721, 56725, 56729, 56733, 56737, 56741, 56745, 56749, 56753, 56757, - 56761, 56765, 56769, 56773, 56777, 56781, 56785, 56789, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 56793, 56796, 56801, 56806, 56811, 56816, 56821, 56826, - 56831, 56836, 56841, 56845, 56850, 56855, 56860, 56865, 56870, 56874, - 56878, 56882, 56886, 56890, 56894, 56898, 56902, 56906, 56910, 56914, - 56918, 56922, 56926, 56931, 56936, 56941, 56946, 56951, 56956, 56961, - 56966, 56971, 56976, 56981, 56986, 56991, 56996, 57002, 57008, 57013, - 57018, 57021, 57024, 57027, 57030, 57033, 57036, 57039, 57042, 57045, - 57049, 57053, 57057, 57061, 57065, 57069, 57073, 57077, 57081, 57085, - 57089, 57093, 57097, 57101, 57105, 57109, 57113, 57117, 57121, 57125, - 57129, 57133, 57137, 57141, 57145, 57149, 57153, 57157, 57161, 57165, - 57169, 57173, 57177, 57181, 57185, 57189, 57193, 57197, 57201, 57205, - 57210, 57215, 57220, 57225, 57229, 57234, 57239, 57244, 57249, 57254, - 57259, 57264, 57269, 57274, 57278, 57284, 57290, 57296, 57302, 57308, - 57314, 57320, 57326, 57332, 57338, 57344, 57350, 57353, 57356, 57359, - 57364, 57367, 57370, 57373, 57376, 57379, 57382, 57386, 57390, 57394, - 57398, 57402, 57406, 57410, 57414, 57418, 57422, 57426, 57430, 57434, - 57437, 57441, 57445, 57449, 57453, 57457, 57460, 57464, 57468, 57472, - 57476, 57479, 57483, 57487, 57491, 57495, 57498, 57502, 57506, 57509, - 57513, 57517, 57521, 57525, 57529, 57533, 57537, 0, 57541, 57544, 57547, - 57550, 57553, 57556, 57559, 57562, 57565, 57568, 57571, 57574, 57577, - 57580, 57583, 57586, 57589, 57592, 57595, 57598, 57601, 57604, 57607, - 57610, 57613, 57616, 57619, 57622, 57625, 57628, 57631, 57634, 57637, - 57640, 57643, 57646, 57649, 57652, 57655, 57658, 57661, 57664, 57667, - 57670, 57673, 57676, 57679, 57682, 57685, 57688, 57691, 57694, 57697, - 57700, 57703, 57706, 57709, 57712, 57715, 57718, 57721, 57724, 57727, - 57730, 57733, 57736, 57739, 57742, 57745, 57748, 57751, 57754, 57757, - 57760, 57763, 57766, 57769, 57772, 57775, 57778, 57781, 57784, 57787, - 57790, 57793, 57796, 57799, 57802, 57805, 57813, 57820, 57827, 57834, - 57841, 57848, 57855, 57862, 57869, 57876, 57884, 57892, 57900, 57908, - 57916, 57924, 57932, 57940, 57948, 57956, 57964, 57972, 57980, 57988, - 57996, 57999, 58002, 58005, 58007, 58010, 58013, 58016, 58021, 58026, - 58029, 58036, 58043, 58050, 58057, 58060, 58065, 58068, 58072, 58074, - 58076, 58079, 58082, 58085, 58088, 58091, 58094, 58097, 58102, 58106, - 58109, 58112, 58115, 58118, 58121, 58124, 58127, 58131, 58134, 58137, - 58140, 58143, 58146, 58150, 58153, 58156, 58159, 58164, 58169, 58174, - 58179, 58184, 58189, 58194, 58199, 58204, 58212, 58214, 58217, 58220, - 58223, 58226, 58231, 58239, 58242, 58245, 58249, 58252, 58255, 58258, - 58262, 58265, 58268, 58273, 58276, 58279, 58284, 58287, 58290, 58295, - 58300, 58305, 58308, 58311, 58314, 58317, 58323, 58326, 58329, 58332, - 58334, 58337, 58340, 58343, 58348, 58351, 58354, 58357, 58360, 58363, - 58368, 58371, 58374, 58377, 58380, 58383, 58386, 58389, 58392, 58395, - 58400, 58404, 58411, 58418, 58425, 58432, 58439, 58446, 58453, 58460, - 58467, 58475, 58483, 58491, 58499, 58507, 58515, 58523, 58531, 58539, - 58547, 58555, 58563, 58571, 58579, 58587, 58595, 58603, 58611, 58619, - 58627, 58635, 58643, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 19298, 19302, 19306, 19310, 19314, 19318, 19322, 19326, 19330, 19334, + 19338, 19342, 19346, 19350, 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, 19522, 19526, 19530, 19534, + 19538, 19542, 19546, 19550, 19554, 19558, 19562, 19566, 19570, 19574, + 19578, 19582, 19586, 19590, 19594, 19598, 19602, 19606, 19610, 19614, + 19618, 19622, 19626, 19630, 19634, 19638, 19642, 19646, 19650, 19654, + 19658, 19662, 19666, 19670, 19674, 19678, 19682, 19686, 19690, 19694, + 19698, 19702, 19706, 19710, 19714, 19718, 19722, 19726, 19730, 19734, + 19738, 19742, 19746, 19750, 19754, 19758, 19762, 19766, 19770, 19774, + 19778, 19782, 19786, 19790, 19794, 19798, 19801, 19805, 19809, 19813, + 19817, 19821, 19825, 19829, 19833, 19837, 19841, 19845, 19849, 19853, + 19857, 19861, 19865, 19869, 19873, 19877, 19881, 19885, 19889, 19893, + 19896, 19900, 19904, 19908, 19912, 19916, 19920, 19924, 19928, 19932, + 19936, 19940, 19944, 19948, 19952, 19956, 19959, 19963, 19967, 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, 0, 20087, 20091, + 20095, 20099, 0, 0, 20103, 20107, 20111, 20115, 20119, 20123, 20127, 0, + 20131, 0, 20135, 20139, 20143, 20147, 0, 0, 20151, 20155, 20159, 20163, + 20167, 20171, 20175, 20179, 20183, 20187, 20191, 20195, 20199, 20203, + 20207, 20211, 20215, 20219, 20223, 20227, 20231, 20235, 20239, 20242, + 20246, 20250, 20254, 20258, 20262, 20266, 20270, 20274, 20278, 20282, + 20286, 20290, 20294, 20298, 20302, 20306, 20310, 0, 20314, 20318, 20322, + 20326, 0, 0, 20330, 20333, 20337, 20341, 20345, 20349, 20353, 20357, + 20361, 20365, 20369, 20373, 20377, 20381, 20385, 20389, 20393, 20398, + 20403, 20408, 20414, 20420, 20425, 20430, 20436, 20439, 20443, 20447, + 20451, 20455, 20459, 20463, 20467, 0, 20471, 20475, 20479, 20483, 0, 0, + 20487, 20491, 20495, 20499, 20503, 20507, 20511, 0, 20515, 0, 20519, + 20523, 20527, 20531, 0, 0, 20535, 20539, 20543, 20547, 20551, 20555, + 20559, 20563, 20567, 20572, 20577, 20582, 20588, 20594, 20599, 0, 20604, + 20608, 20612, 20616, 20620, 20624, 20628, 20632, 20636, 20640, 20644, + 20648, 20652, 20656, 20660, 20664, 20668, 20671, 20675, 20679, 20683, + 20687, 20691, 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, 0, 20831, 20835, 20839, 20843, + 0, 0, 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, 21074, 21078, + 21082, 21086, 21090, 21094, 21098, 21102, 21106, 21110, 0, 0, 0, 0, + 21114, 21119, 21123, 21126, 21131, 21134, 21137, 21140, 21145, 21149, + 21154, 21157, 21160, 21163, 21166, 21169, 21172, 21175, 21178, 21181, + 21185, 21189, 21193, 21197, 21201, 21205, 21209, 21213, 21217, 21221, 0, + 0, 0, 21227, 21233, 21237, 21241, 21245, 21251, 21255, 21259, 21263, + 21269, 21273, 21277, 21281, 21287, 21291, 21295, 21299, 21305, 21311, + 21317, 21325, 21331, 21337, 21343, 21349, 21355, 0, 0, 0, 0, 0, 0, 21361, + 21364, 21367, 21370, 21373, 21376, 21380, 21384, 21387, 21391, 21395, + 21399, 21403, 21407, 21410, 21414, 21418, 21422, 21426, 21430, 21434, + 21438, 21442, 21446, 21450, 21454, 21457, 21461, 21465, 21469, 21473, + 21476, 21480, 21484, 21488, 21492, 21496, 21500, 21504, 21508, 21512, + 21516, 21520, 21524, 21528, 21532, 21535, 21539, 21543, 21547, 21551, + 21555, 21559, 21563, 21567, 21571, 21575, 21579, 21583, 21587, 21591, + 21595, 21599, 21603, 21607, 21611, 21615, 21619, 21623, 21627, 21631, + 21635, 21639, 21643, 21647, 21651, 21655, 21659, 21663, 21667, 21670, + 21674, 21678, 21682, 21686, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 21690, + 21694, 21697, 21701, 21704, 21708, 21711, 21715, 21721, 21726, 21730, + 21733, 21737, 21741, 21746, 21750, 21755, 21759, 21764, 21768, 21773, + 21777, 21782, 21788, 21792, 21797, 21801, 21806, 21812, 21816, 21822, + 21828, 21832, 21837, 21845, 21853, 21860, 21865, 21870, 21879, 21886, + 21893, 21898, 21904, 21908, 21912, 21916, 21920, 21924, 21928, 21932, + 21936, 21940, 21944, 21950, 21955, 21960, 21963, 21967, 21971, 21976, + 21980, 21985, 21989, 21994, 21998, 22003, 22007, 22012, 22016, 22021, + 22025, 22030, 22036, 22040, 22045, 22050, 22054, 22058, 22062, 22066, + 22069, 22073, 22079, 22084, 22089, 22093, 22097, 22101, 22106, 22110, + 22115, 22119, 22124, 22127, 22131, 22135, 22140, 22144, 22149, 22153, + 22158, 22164, 22168, 22172, 22176, 22180, 22184, 22188, 22192, 22196, + 22200, 22204, 22208, 22214, 22217, 22221, 22225, 22230, 22234, 22239, + 22243, 22248, 22252, 22257, 22261, 22266, 22270, 22275, 22279, 22284, + 22290, 22294, 22298, 22304, 22310, 22316, 22322, 22326, 22330, 22334, + 22338, 22342, 22346, 22352, 22356, 22360, 22364, 22369, 22373, 22378, + 22382, 22387, 22391, 22396, 22400, 22405, 22409, 22414, 22418, 22423, + 22429, 22433, 22439, 22443, 22447, 22451, 22455, 22459, 22463, 22469, + 22472, 22476, 22480, 22485, 22489, 22494, 22498, 22503, 22507, 22512, + 22516, 22521, 22525, 22530, 22534, 22539, 22545, 22548, 22552, 22556, + 22561, 22566, 22570, 22574, 22578, 22582, 22586, 22590, 22596, 22599, + 22603, 22607, 22612, 22616, 22621, 22625, 22630, 22636, 22639, 22644, + 22648, 22652, 22656, 22660, 22664, 22668, 22672, 22678, 22682, 22686, + 22690, 22695, 22699, 22704, 22708, 22713, 22717, 22722, 22726, 22731, + 22735, 22740, 22744, 22749, 22752, 22756, 22760, 22764, 22768, 22772, + 22776, 22780, 22784, 22790, 22794, 22798, 22802, 22807, 22811, 22816, + 22820, 22825, 22829, 22834, 22838, 22843, 22847, 22852, 22856, 22861, + 22867, 22870, 22875, 22879, 22884, 22890, 22896, 22902, 22908, 22914, + 22920, 22926, 22930, 22934, 22938, 22942, 22946, 22950, 22954, 22958, + 22963, 22967, 22972, 22976, 22981, 22985, 22990, 22994, 22999, 23003, + 23008, 23012, 23017, 23021, 23025, 23029, 23033, 23037, 23041, 23045, + 23051, 23054, 23058, 23062, 23067, 23071, 23076, 23080, 23085, 23089, + 23094, 23098, 23103, 23107, 23112, 23116, 23121, 23127, 23131, 23137, + 23142, 23148, 23152, 23158, 23163, 23167, 23171, 23175, 23179, 23183, + 23188, 23191, 23195, 23200, 23204, 23209, 23212, 23216, 23220, 23224, + 23228, 23232, 23236, 23240, 23244, 23248, 23252, 23256, 23261, 23265, + 23269, 23275, 23279, 23285, 23289, 23295, 23299, 23303, 23307, 23311, + 23315, 23320, 23324, 23328, 23332, 23336, 23340, 23344, 23348, 23352, + 23356, 23360, 23366, 23372, 23378, 23384, 23390, 23395, 23401, 23407, + 23413, 23417, 23421, 23425, 23429, 23433, 23437, 23441, 23445, 23449, + 23453, 23457, 23461, 23465, 23470, 23475, 23480, 23484, 23488, 23492, + 23496, 23500, 23504, 23508, 23512, 23516, 23520, 23526, 23532, 23538, + 23544, 23550, 23556, 23562, 23568, 23574, 23578, 23582, 23586, 23590, + 23594, 23598, 23602, 23608, 23614, 23620, 23626, 23632, 23638, 23644, + 23650, 23656, 23661, 23666, 23671, 23676, 23682, 23688, 23694, 23700, + 23706, 23712, 23718, 23723, 23729, 23735, 23741, 23746, 23752, 23758, + 23764, 23769, 23774, 23779, 23784, 23789, 23794, 23799, 23804, 23809, + 23814, 23819, 23824, 23828, 23833, 23838, 23843, 23848, 23853, 23858, + 23863, 23868, 23873, 23878, 23883, 23888, 23893, 23898, 23903, 23908, + 23913, 23918, 23923, 23928, 23933, 23938, 23943, 23948, 23953, 23958, + 23963, 23968, 23973, 23977, 23982, 23987, 23992, 23997, 24002, 24007, + 24012, 24017, 24022, 24027, 24032, 24037, 24042, 24047, 24052, 24057, + 24062, 24067, 24072, 24077, 24082, 24087, 24092, 24097, 24102, 24106, + 24111, 24116, 24121, 24126, 24131, 24135, 24140, 24145, 24150, 24155, + 24160, 24164, 24169, 24175, 24180, 24185, 24190, 24195, 24201, 24206, + 24211, 24216, 24221, 24226, 24231, 24236, 24241, 24246, 24251, 24256, + 24261, 24266, 24271, 24276, 24281, 24286, 24291, 24296, 24301, 24306, + 24311, 24316, 24321, 24326, 24331, 24336, 24341, 24346, 24351, 24356, + 24361, 24366, 24371, 24376, 24381, 24386, 24391, 24396, 24401, 24406, + 24411, 24416, 24421, 24427, 24432, 24437, 24442, 24447, 24452, 24457, + 24462, 24467, 24472, 24477, 24482, 24487, 24492, 24497, 24502, 24507, + 24512, 24517, 24522, 24527, 24532, 24537, 24542, 24547, 24552, 24557, + 24562, 24567, 24572, 24577, 24582, 24587, 24592, 24597, 24602, 24607, + 24612, 24617, 24623, 24627, 24631, 24635, 24639, 24643, 24647, 24651, + 24655, 24661, 24667, 24673, 24679, 24685, 24691, 24697, 24704, 24710, + 24715, 24720, 24725, 24730, 24735, 24740, 24745, 24750, 24755, 24760, + 24765, 24770, 24775, 24780, 24785, 24790, 24795, 24800, 24805, 24810, + 24815, 24820, 24825, 24830, 24835, 24840, 24845, 24850, 0, 0, 0, 24856, + 24866, 24870, 24877, 24881, 24885, 24889, 24897, 24901, 24906, 24911, + 24916, 24920, 24925, 24930, 24933, 24937, 24941, 24950, 24954, 24958, + 24964, 24968, 24972, 24980, 24984, 24992, 24998, 25004, 25010, 25016, + 25025, 25030, 25034, 25043, 25046, 25052, 25056, 25062, 25067, 25073, + 25081, 25087, 25092, 25099, 25104, 25108, 25112, 25122, 25128, 25132, + 25142, 25148, 25152, 25156, 25163, 25170, 25175, 25180, 25189, 25193, + 25197, 25201, 25209, 25216, 25220, 25224, 25228, 25232, 25236, 25240, + 25244, 25248, 25252, 25256, 25260, 25265, 25270, 25275, 25279, 25283, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 25287, 25291, 25295, 25299, + 25303, 25308, 25313, 25318, 25323, 25327, 25331, 25336, 25340, 0, 25344, + 25349, 25354, 25359, 25363, 25368, 25373, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 25378, 25382, 25386, 25390, 25394, 25399, 25404, 25409, 25414, 25418, + 25422, 25427, 25431, 25435, 25439, 25444, 25449, 25454, 25458, 25463, + 25468, 25473, 25479, 0, 0, 0, 0, 0, 0, 0, 0, 0, 25484, 25488, 25492, + 25496, 25500, 25505, 25510, 25515, 25520, 25524, 25528, 25533, 25537, + 25541, 25545, 25550, 25555, 25560, 25564, 25569, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 25574, 25578, 25582, 25586, 25590, 25595, 25600, 25605, + 25610, 25614, 25618, 25623, 25627, 0, 25631, 25636, 25641, 0, 25646, + 25651, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 25656, 25659, 25663, 25667, + 25671, 25675, 25679, 25683, 25687, 25691, 25695, 25699, 25703, 25707, + 25711, 25715, 25719, 25723, 25726, 25730, 25734, 25738, 25742, 25746, + 25750, 25754, 25758, 25762, 25766, 25770, 25774, 25778, 25782, 25785, + 25789, 25793, 25799, 25805, 25811, 25817, 25823, 25829, 25835, 25841, + 25847, 25853, 25859, 25865, 25871, 25877, 25886, 25895, 25901, 25907, + 25913, 25918, 25922, 25927, 25932, 25937, 25941, 25946, 25951, 25956, + 25960, 25965, 25969, 25974, 25979, 25984, 25989, 25993, 25997, 26001, + 26005, 26009, 26013, 26017, 26021, 26025, 26029, 26035, 26039, 26043, + 26047, 26051, 26055, 26063, 26069, 26073, 26079, 26083, 26089, 26093, 0, + 0, 26097, 26101, 26104, 26107, 26110, 26113, 26116, 26119, 26122, 26125, + 0, 0, 0, 0, 0, 0, 26128, 26136, 26144, 26152, 26160, 26168, 26176, 26184, + 26192, 26200, 0, 0, 0, 0, 0, 0, 26208, 26211, 26214, 26217, 26222, 26225, + 26230, 26237, 26245, 26250, 26257, 26260, 26267, 26274, 26281, 0, 26285, + 26289, 26292, 26295, 26298, 26301, 26304, 26307, 26310, 26313, 0, 0, 0, + 0, 0, 0, 26316, 26319, 26322, 26325, 26328, 26331, 26335, 26339, 26343, + 26346, 26350, 26354, 26357, 26361, 26365, 26368, 26372, 26376, 26380, + 26384, 26388, 26392, 26396, 26399, 26402, 26406, 26410, 26413, 26417, + 26421, 26425, 26429, 26433, 26437, 26441, 26445, 26452, 26457, 26462, + 26467, 26472, 26478, 26484, 26490, 26496, 26501, 26507, 26513, 26518, + 26524, 26530, 26536, 26542, 26548, 26553, 26559, 26564, 26570, 26576, + 26582, 26588, 26594, 26599, 26604, 26610, 26616, 26621, 26627, 26632, + 26638, 26643, 26648, 26654, 26660, 26666, 26672, 26678, 26684, 26690, + 26696, 26702, 26708, 26714, 26720, 26725, 26730, 26735, 26741, 0, 0, 0, + 0, 0, 0, 0, 0, 26747, 26756, 26765, 26773, 26781, 26791, 26799, 26808, + 26815, 26822, 26829, 26837, 26845, 26853, 26861, 26869, 26877, 26885, + 26893, 26900, 26908, 26916, 26924, 26932, 26940, 26950, 26960, 26970, + 26980, 26990, 27000, 27010, 27020, 27030, 27040, 27050, 27060, 27070, + 27080, 27088, 27096, 27106, 27114, 0, 0, 0, 0, 0, 27124, 27128, 27132, + 27136, 27140, 27144, 27148, 27152, 27156, 27160, 27164, 27168, 27172, + 27176, 27180, 27184, 27188, 27192, 27196, 27200, 27204, 27208, 27212, + 27216, 27222, 27226, 27232, 27236, 27242, 27246, 27252, 27256, 27260, + 27264, 27268, 27272, 27276, 27282, 27288, 27294, 27300, 27305, 27310, + 27315, 27321, 27327, 27333, 27339, 27346, 27352, 27357, 27362, 27366, + 27370, 27374, 27378, 27382, 27386, 27390, 27396, 27402, 27408, 27413, + 27420, 27425, 27430, 27436, 27441, 27448, 27455, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 27461, 27466, 27469, 27473, 27477, 27481, 27485, 27489, 27493, + 27497, 27501, 27505, 27509, 27513, 27517, 27521, 27524, 27527, 27531, + 27535, 27539, 27542, 27545, 27548, 27552, 27556, 27560, 27564, 27568, 0, + 0, 0, 27571, 27575, 27579, 27583, 27588, 27593, 27598, 27603, 27607, + 27611, 27616, 27621, 0, 0, 0, 0, 27627, 27631, 27636, 27641, 27646, + 27650, 27654, 27658, 27662, 27667, 27671, 27675, 0, 0, 0, 0, 27679, 0, 0, + 0, 27683, 27687, 27691, 27695, 27698, 27701, 27704, 27707, 27710, 27713, + 27716, 27719, 27722, 27727, 27733, 27739, 27745, 27751, 27756, 27762, + 27768, 27774, 27779, 27785, 27790, 27796, 27802, 27807, 27813, 27819, + 27825, 27830, 27835, 27840, 27846, 27852, 27857, 27863, 27868, 27874, + 27879, 27885, 0, 0, 27891, 27897, 27903, 27909, 27915, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 27921, 27928, 27935, 27941, 27948, 27955, 27961, 27968, + 27975, 27982, 27989, 27995, 28002, 28009, 28015, 28022, 28029, 28035, + 28042, 28049, 28055, 28061, 28068, 28074, 28080, 28087, 28093, 28100, + 28107, 28114, 28121, 28128, 28135, 28141, 28148, 28155, 28161, 28168, + 28175, 28182, 28189, 28196, 28203, 28210, 0, 0, 0, 0, 28217, 28225, + 28232, 28239, 28245, 28252, 28258, 28265, 28271, 28278, 28285, 28292, + 28299, 28306, 28313, 28320, 28327, 28334, 28341, 28348, 28354, 28360, + 28367, 28374, 28381, 28387, 0, 0, 0, 0, 0, 0, 28393, 28399, 28404, 28409, + 28414, 28419, 28424, 28429, 28434, 28439, 28444, 0, 0, 0, 28450, 28456, + 28462, 28466, 28472, 28478, 28484, 28490, 28496, 28502, 28508, 28514, + 28520, 28526, 28532, 28538, 28544, 28550, 28556, 28560, 28566, 28572, + 28578, 28584, 28590, 28596, 28602, 28608, 28614, 28620, 28626, 28632, + 28638, 28644, 28650, 28654, 28659, 28664, 28669, 28673, 28678, 28682, + 28687, 28692, 28697, 28701, 28706, 28711, 28716, 28721, 28726, 28730, + 28734, 28739, 28744, 28749, 28753, 28757, 28762, 28767, 28772, 28777, 0, + 0, 28783, 28787, 28794, 28799, 28805, 28811, 28816, 28822, 28828, 28833, + 28839, 28845, 28851, 28857, 28863, 28868, 28873, 28879, 28884, 28890, + 28895, 28901, 28907, 28913, 28919, 28923, 28928, 28933, 28939, 28945, + 28950, 28956, 28962, 28966, 28971, 28976, 28980, 28985, 28990, 28995, + 29000, 29006, 29012, 29018, 29023, 29028, 29032, 29037, 29041, 29046, + 29050, 29055, 29060, 29065, 29070, 29077, 29084, 29092, 29103, 29112, + 29120, 29127, 29138, 29144, 29151, 0, 29158, 29163, 29168, 29176, 29182, + 29190, 29195, 29201, 29207, 29213, 29218, 29224, 29229, 29236, 29242, + 29247, 29253, 29259, 29265, 29272, 29279, 29286, 29291, 29296, 29303, + 29310, 29317, 29324, 29331, 0, 0, 29338, 29345, 29352, 29358, 29364, + 29370, 29376, 29382, 29388, 29394, 29400, 0, 0, 0, 0, 0, 0, 29406, 29412, + 29417, 29422, 29427, 29432, 29437, 29442, 29447, 29452, 0, 0, 0, 0, 0, 0, + 29457, 29462, 29467, 29472, 29477, 29482, 29487, 29495, 29502, 29507, + 29512, 29517, 29522, 29527, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 58646, 58654, 58662, 58672, 58678, 58682, 58686, 58692, 58698, 58703, - 58707, 58711, 58715, 58719, 58725, 58729, 58733, 58737, 58747, 58751, - 58755, 58761, 58765, 58771, 58775, 58779, 58785, 58791, 58797, 58805, - 58813, 58817, 58821, 58825, 58831, 58835, 58844, 58850, 58854, 58858, - 58862, 58866, 58870, 58874, 58881, 58887, 58893, 58897, 58903, 58907, - 58913, 58921, 58931, 58935, 58943, 58947, 58953, 58961, 58969, 58973, - 58977, 58983, 58988, 58994, 59000, 59004, 59008, 59011, 59015, 59019, - 59023, 59027, 59031, 59035, 59039, 59042, 59046, 59050, 59054, 59058, - 59062, 59066, 59069, 59073, 59077, 59080, 59084, 59088, 59092, 59096, - 59100, 59104, 59108, 59112, 59116, 59120, 59124, 59128, 59132, 59136, - 59140, 59144, 59148, 59152, 59156, 59160, 59164, 59168, 59172, 59176, - 59180, 59184, 59188, 59192, 59196, 59200, 59204, 59208, 59212, 59216, - 59220, 59224, 59228, 59232, 59236, 59240, 59244, 59248, 59252, 59256, - 59259, 59263, 59267, 59271, 59275, 59279, 59283, 59287, 59291, 59295, - 59299, 59303, 59307, 59311, 59315, 59319, 59323, 59327, 59331, 59335, - 59339, 59343, 59347, 59351, 59355, 59359, 59363, 59367, 59371, 59375, - 59379, 59383, 59387, 59391, 59395, 59399, 59403, 59407, 59411, 59415, - 59419, 59423, 59427, 59431, 59435, 59439, 59443, 59447, 59451, 59455, - 59459, 59463, 59467, 59471, 59475, 59479, 59483, 59487, 59491, 59495, - 59499, 59503, 59507, 59511, 59515, 59519, 59523, 59527, 59531, 59535, - 59539, 59543, 59547, 59551, 59555, 59559, 59563, 59567, 59571, 59575, - 59579, 59583, 59587, 59591, 59595, 59599, 59603, 59607, 59611, 59615, - 59619, 59623, 59627, 59631, 59635, 59639, 59643, 59647, 59651, 59655, - 59659, 59663, 59667, 59671, 59675, 59679, 59683, 59687, 59691, 59695, - 59699, 59703, 59707, 59711, 59715, 59719, 59723, 59727, 59730, 59734, - 59738, 59742, 59746, 59750, 59754, 59758, 59762, 59766, 59770, 59774, - 59778, 59782, 59786, 59790, 59794, 59798, 59802, 59806, 59810, 59814, - 59818, 59822, 59826, 59830, 59834, 59838, 59842, 59846, 59850, 59854, - 59858, 59862, 59866, 59870, 59874, 59878, 59882, 59886, 59890, 59894, - 59898, 59902, 59906, 59910, 59914, 59918, 59922, 59926, 59930, 59934, - 59938, 59942, 59946, 59950, 59954, 59958, 59962, 59966, 59970, 59974, - 59978, 59982, 59986, 59990, 59994, 59998, 60002, 60006, 60010, 60014, - 60018, 60022, 60026, 60030, 60034, 60038, 60042, 60046, 60050, 60054, - 60058, 60062, 60066, 60070, 60074, 60078, 60082, 60086, 60090, 60094, - 60098, 60102, 60106, 60110, 60114, 60118, 60122, 60126, 60130, 60134, - 60138, 60142, 60146, 60150, 60154, 60158, 60162, 60166, 60170, 60174, - 60178, 60182, 60186, 60190, 60193, 60197, 60201, 60205, 60209, 60213, - 60217, 60221, 60225, 60229, 60233, 60237, 60241, 60245, 60249, 60253, - 60257, 60261, 60265, 60269, 60273, 60277, 60281, 60285, 60289, 60293, - 60297, 60301, 60305, 60309, 60313, 60317, 60321, 60325, 60329, 60333, - 60337, 60341, 60345, 60349, 60353, 60357, 60361, 60365, 60369, 60373, - 60377, 60381, 60385, 60389, 60393, 60397, 60401, 60405, 60409, 60413, - 60417, 60421, 60425, 60429, 60433, 60437, 60441, 60445, 60449, 60453, - 60457, 60461, 60465, 60469, 60473, 60477, 60481, 60485, 60489, 60493, - 60497, 60501, 60505, 60509, 60513, 60517, 60521, 60525, 60529, 60533, - 60537, 60541, 60545, 60549, 60553, 60557, 60561, 60565, 60569, 60573, - 60577, 60581, 60585, 60589, 60593, 60597, 60601, 60605, 60609, 60613, - 60617, 60621, 60625, 60629, 60633, 60637, 60641, 60645, 60649, 60653, - 60657, 60661, 60665, 60669, 60673, 60677, 60681, 60685, 60689, 60693, - 60697, 60701, 60705, 60709, 60713, 60717, 60721, 60725, 60729, 60733, - 60737, 60741, 60745, 60749, 60753, 60757, 60761, 60765, 60769, 60773, - 60777, 60781, 60785, 60789, 60793, 60797, 60801, 60805, 60809, 60813, - 60817, 60821, 60825, 60829, 60833, 60837, 60841, 60845, 60849, 60853, - 60857, 60861, 60865, 60869, 60873, 60877, 60881, 60885, 60889, 60893, - 60897, 60901, 60905, 60909, 60913, 60917, 60921, 60925, 60929, 60933, - 60937, 60941, 60945, 60949, 60953, 60957, 60961, 60965, 60969, 60973, - 60977, 60981, 60985, 60989, 60993, 60997, 61001, 61005, 61009, 61013, - 61017, 61021, 61025, 61029, 61033, 61037, 61041, 61045, 61048, 61052, - 61056, 61060, 61064, 61068, 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, 61204, 61208, 61212, - 61216, 61220, 61224, 61228, 61232, 61236, 61240, 61244, 61248, 61252, - 61256, 61260, 61264, 61268, 61272, 61276, 61280, 61284, 61288, 61292, - 61296, 61300, 61304, 61308, 61312, 61316, 61320, 61324, 61328, 61332, - 61336, 61340, 61344, 61348, 61352, 61356, 61360, 61364, 61368, 61372, - 61376, 61380, 61384, 61388, 61392, 61396, 61400, 61404, 61408, 61412, - 61416, 61420, 61424, 61428, 61432, 61436, 61440, 61444, 61448, 61452, - 61456, 61460, 61464, 61468, 61472, 61476, 61480, 61484, 61488, 61492, - 61496, 61500, 61503, 61507, 61511, 61515, 61519, 61523, 61527, 61531, - 61535, 61539, 61543, 61547, 61551, 61555, 61559, 61563, 61567, 61571, - 61575, 61579, 61583, 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, 61715, 61719, 61723, 61727, 61731, - 61735, 61739, 61743, 61747, 61751, 61755, 61759, 61763, 61767, 61771, - 61775, 61779, 61783, 61787, 61791, 61795, 61799, 61803, 61807, 61811, - 61815, 61819, 61823, 61827, 61831, 61835, 61839, 61843, 61847, 61851, - 61855, 61859, 61863, 61867, 61871, 61875, 61879, 61883, 61887, 61891, - 61895, 61899, 61903, 61907, 61911, 61915, 61919, 61923, 61927, 61931, - 61935, 61939, 61943, 61947, 61951, 61955, 61959, 61963, 61967, 61971, - 61975, 61979, 61983, 61987, 61991, 61995, 61999, 62003, 62007, 62011, - 62015, 62019, 62023, 62027, 62031, 62035, 62039, 62043, 62047, 62051, - 62055, 62059, 62063, 62067, 62071, 62075, 62079, 62083, 62087, 62091, - 62095, 62099, 62103, 62106, 62110, 62114, 62118, 62122, 62126, 62130, - 62134, 62138, 62142, 62146, 62150, 62154, 62158, 62162, 62166, 62170, - 62174, 62178, 62182, 62186, 62190, 62194, 62198, 62202, 62206, 62210, - 62214, 62218, 62222, 62226, 62230, 62234, 62238, 62242, 62246, 62250, - 62254, 62258, 62262, 62266, 62270, 62274, 62278, 62282, 62286, 62290, - 62294, 62298, 62302, 62306, 62310, 62314, 62318, 62322, 62326, 62330, - 62334, 62338, 62342, 62346, 62350, 62354, 62358, 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, 62486, 62490, - 62494, 62498, 62502, 62506, 62510, 62514, 62518, 62522, 62526, 62530, - 62534, 62538, 62542, 62546, 62550, 62554, 62558, 62562, 62566, 62570, - 62574, 62578, 62582, 62586, 62590, 62594, 62598, 62602, 62606, 62610, - 62614, 62618, 62622, 62626, 62630, 62634, 62638, 62642, 62646, 62650, - 62654, 62658, 62662, 62666, 62670, 62674, 62678, 62682, 62686, 62690, - 62694, 62698, 62702, 62706, 62710, 62714, 62718, 62722, 62726, 62730, - 62734, 62738, 62742, 62746, 62750, 62754, 62758, 62762, 62766, 62770, - 62774, 62778, 62782, 62786, 62790, 62794, 62798, 62802, 62806, 62810, - 62814, 62818, 62822, 62826, 62830, 62834, 62838, 62842, 62846, 62850, - 62854, 62858, 62862, 62865, 62869, 62873, 62877, 62881, 62885, 62889, - 62893, 62897, 62901, 62905, 62909, 62913, 62917, 62921, 62925, 62929, - 62933, 62937, 62941, 62945, 62949, 62953, 62957, 62961, 62965, 62969, - 62973, 62977, 62981, 62985, 62989, 62993, 62997, 63001, 63005, 63009, - 63013, 63017, 63021, 63025, 63029, 63033, 63037, 63041, 63045, 63049, - 63053, 63057, 63061, 63065, 63069, 63073, 63077, 63081, 63085, 63089, - 63093, 63097, 63101, 63105, 63109, 63113, 63117, 63121, 63125, 63129, - 63133, 63137, 63141, 63145, 63149, 63153, 63157, 63161, 63165, 63169, - 63173, 63177, 63181, 63185, 63189, 63193, 63197, 63201, 63205, 63209, - 63213, 63217, 63221, 63225, 63229, 63233, 63237, 63241, 63245, 63249, - 63253, 63257, 63261, 63265, 63269, 63273, 63277, 63281, 63285, 63289, - 63293, 63297, 63301, 63305, 63309, 63313, 63317, 63321, 63325, 63329, - 63333, 63337, 63341, 63345, 63349, 63353, 63357, 63361, 63365, 63369, - 63373, 63377, 63381, 63385, 63389, 63393, 63397, 63401, 63405, 63409, - 63413, 63417, 63421, 63425, 63429, 63433, 63437, 63441, 63445, 63449, - 63453, 63457, 63461, 63465, 63469, 63473, 63477, 63481, 63485, 63489, - 63493, 63497, 63501, 63505, 63509, 63513, 63517, 63521, 63525, 63529, - 63533, 63537, 63541, 63545, 63549, 63553, 63557, 63561, 63565, 63569, - 63573, 63577, 63581, 63585, 63589, 63593, 63597, 63601, 63605, 63609, - 63613, 63617, 63621, 63625, 63629, 63633, 63637, 63641, 63645, 0, 0, 0, - 63649, 63653, 63657, 63661, 63665, 63669, 63673, 63677, 63681, 63685, - 63689, 63693, 63697, 63701, 63705, 63709, 63713, 63717, 63721, 63725, - 63729, 63733, 63737, 63741, 63745, 63749, 63753, 63757, 63761, 63765, - 63769, 63773, 63777, 63781, 63785, 63789, 63793, 63797, 63801, 63805, - 63809, 63813, 63817, 63821, 63825, 63829, 63833, 63837, 63841, 63845, - 63849, 63853, 63857, 63861, 63865, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63869, 63873, - 63877, 63881, 63885, 63889, 63893, 63897, 63901, 63905, 63909, 63913, - 63917, 63921, 63925, 63929, 63933, 63937, 63941, 63945, 63949, 63953, - 63957, 63961, 63965, 63969, 63973, 63977, 63981, 63985, 63989, 63993, - 63997, 64001, 64005, 64009, 64013, 64016, 64020, 64024, 64028, 64032, - 64036, 64040, 64044, 64048, 64052, 64056, 64060, 64064, 64068, 64072, - 64076, 64080, 64084, 64088, 64092, 64096, 64100, 64104, 64108, 64112, - 64116, 64120, 64124, 64128, 64132, 64136, 64140, 64144, 64148, 64152, - 64156, 64160, 64163, 64167, 64171, 64174, 64178, 64182, 64186, 64189, - 64193, 64197, 64201, 64205, 64209, 64213, 64217, 64221, 64225, 64229, - 64233, 64237, 64241, 64245, 64248, 64252, 64256, 64260, 64264, 64268, - 64272, 64276, 64280, 64284, 64287, 64290, 64294, 64298, 64302, 64305, - 64309, 64313, 64317, 64321, 64325, 64329, 64333, 64337, 64341, 64345, - 64349, 64353, 64357, 64361, 64365, 64369, 64373, 64377, 64381, 64385, - 64389, 64393, 64397, 64401, 64405, 64409, 64413, 64417, 64421, 64425, - 64429, 64433, 64437, 64441, 64445, 64449, 64453, 64457, 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, 64607, 64611, 64615, 64619, 64623, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 29532, 29538, + 29544, 29548, 29552, 29556, 29560, 29566, 29570, 29576, 29580, 29586, + 29592, 29600, 29606, 29614, 29618, 29622, 29626, 29632, 29635, 29640, + 29644, 29650, 29654, 29658, 29664, 29668, 29674, 29678, 29684, 29692, + 29700, 29708, 29714, 29718, 29724, 29728, 29734, 29737, 29740, 29746, + 29750, 29756, 29759, 29762, 29765, 29769, 29773, 29779, 29785, 29789, + 29792, 29796, 29801, 29806, 29813, 29818, 29825, 29832, 29841, 29848, + 29857, 29862, 29869, 29876, 29885, 29890, 29897, 29902, 29908, 29914, + 29920, 29926, 29932, 29938, 0, 0, 0, 0, 29944, 29948, 29951, 29954, + 29957, 29960, 29963, 29966, 29969, 29972, 29975, 29978, 29981, 29984, + 29989, 29994, 29999, 30002, 30007, 30012, 30017, 30022, 30029, 30034, + 30039, 30044, 30049, 30056, 30062, 30068, 30074, 30080, 30086, 30095, + 30104, 30110, 30116, 30125, 30134, 30143, 30152, 30161, 30170, 30179, + 30188, 0, 0, 0, 30197, 30202, 30207, 30212, 30216, 30220, 30224, 30229, + 30233, 30237, 30242, 30246, 30251, 30256, 30261, 30266, 30271, 30276, + 30281, 30286, 30291, 30295, 30299, 30304, 30309, 30314, 30318, 30322, + 30326, 30331, 30336, 30341, 30346, 30350, 30357, 30364, 30371, 30377, + 30383, 30389, 30395, 30401, 30407, 0, 0, 0, 30412, 30417, 30422, 30427, + 30431, 30435, 30439, 30443, 30447, 30451, 30455, 30459, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 30463, 30466, 30470, + 30474, 30478, 30482, 30486, 30490, 30494, 30498, 30502, 30506, 30510, + 30514, 30517, 30520, 30524, 30528, 30532, 30536, 30540, 30544, 30547, + 30551, 30555, 30559, 30563, 30566, 30569, 30573, 30576, 30580, 30584, + 30588, 30592, 30596, 30599, 30604, 30609, 30614, 30618, 30622, 30627, + 30631, 30636, 30640, 30646, 30651, 30656, 30661, 30667, 30672, 30678, + 30684, 30690, 30694, 0, 0, 0, 30698, 30703, 30712, 30717, 30724, 30729, + 30733, 30736, 30739, 30742, 30745, 30748, 30751, 30754, 30757, 0, 0, 0, + 30760, 30764, 30768, 30772, 30779, 30785, 30791, 30797, 30803, 30809, + 30815, 30821, 30827, 30833, 30840, 30847, 30854, 30861, 30868, 30875, + 30882, 30889, 30896, 30903, 30910, 30917, 30924, 30931, 30938, 30945, + 30952, 30959, 30966, 30973, 30980, 30987, 30994, 31001, 31008, 31015, + 31022, 31029, 31036, 31043, 31051, 31059, 31067, 31073, 31079, 31085, + 31093, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 31102, 31107, 31112, 31117, 31122, 31131, + 31142, 31151, 31162, 31168, 31181, 31187, 31194, 31201, 31206, 31212, + 31218, 31229, 31238, 31245, 31252, 31260, 31267, 31275, 31285, 31295, + 31302, 31309, 31316, 31326, 31331, 31339, 31345, 31353, 31362, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 31367, 31372, 31378, 31384, 31392, 31398, + 31404, 31410, 31415, 31422, 31427, 31433, 31439, 31447, 31452, 31458, + 31463, 31470, 31476, 31484, 31492, 31498, 31504, 31511, 31518, 31524, + 31530, 31536, 31542, 31547, 31553, 31561, 31568, 31574, 31580, 31586, + 31592, 31600, 31604, 31610, 31616, 31622, 31628, 31634, 31640, 31644, + 31649, 31654, 31661, 31666, 31670, 31675, 31680, 31685, 31689, 31694, + 31699, 31703, 31707, 31711, 31716, 31720, 31725, 31730, 31734, 31739, + 31743, 31748, 31752, 31757, 31762, 31768, 31773, 31778, 31782, 31787, + 31793, 31800, 31805, 31810, 31815, 31819, 31824, 31828, 31834, 31841, + 31848, 31853, 31858, 31862, 31868, 31873, 31878, 31883, 31888, 31894, + 31899, 31905, 31910, 31916, 31922, 31928, 31935, 31942, 31949, 31956, + 31963, 31970, 31975, 31984, 31994, 32004, 32014, 32024, 32034, 32044, + 32057, 32067, 32077, 32087, 32093, 32098, 32105, 32113, 32121, 32128, + 32135, 32142, 32149, 32157, 32166, 32175, 32184, 32193, 32202, 32211, + 32220, 32229, 32238, 32247, 32256, 32265, 32274, 32283, 32291, 32300, + 32311, 32319, 32329, 32340, 32349, 32358, 32368, 32377, 32385, 32394, + 32400, 32405, 32413, 32418, 32425, 32430, 32439, 32445, 32451, 32458, + 32463, 32468, 32476, 32484, 32493, 32502, 32507, 32514, 32524, 32532, + 32541, 32546, 32552, 32557, 32564, 32569, 32578, 32583, 32588, 32593, + 32600, 32606, 32611, 32620, 32628, 32633, 32638, 32645, 32652, 32656, + 32660, 32663, 32666, 32669, 32672, 32675, 32678, 32685, 32688, 32691, + 32696, 32700, 32704, 32708, 32712, 32716, 32726, 32732, 32738, 32744, + 32752, 32760, 32766, 32772, 32779, 32785, 32790, 32796, 32802, 32807, + 32813, 32819, 32827, 32832, 32838, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 32844, 32850, 32855, 32864, 32872, 32880, + 32887, 32894, 32901, 32908, 32916, 32924, 32934, 32944, 32952, 32960, + 32968, 32976, 32985, 32994, 33002, 33010, 33019, 33028, 33038, 33048, + 33057, 33066, 33074, 33082, 33090, 33098, 33108, 33118, 33126, 33134, + 33142, 33150, 33158, 33166, 33174, 33182, 33190, 33198, 33206, 33214, + 33223, 33232, 33241, 33250, 33260, 33270, 33277, 33284, 33292, 33300, + 33309, 33318, 33326, 33334, 33346, 33358, 33367, 33376, 33385, 33394, + 33401, 33408, 33416, 33424, 33432, 33440, 33448, 33456, 33464, 33472, + 33481, 33490, 33499, 33508, 33517, 33526, 33536, 33546, 33556, 33566, + 33575, 33584, 33591, 33598, 33606, 33614, 33622, 33630, 33638, 33646, + 33658, 33670, 33679, 33688, 33696, 33704, 33712, 33720, 33731, 33742, + 33753, 33764, 33776, 33788, 33796, 33804, 33812, 33820, 33829, 33838, + 33847, 33856, 33864, 33872, 33880, 33888, 33896, 33904, 33913, 33922, + 33932, 33942, 33950, 33958, 33966, 33974, 33982, 33990, 33997, 34004, + 34012, 34020, 34028, 34036, 34044, 34052, 34060, 34068, 34076, 34084, + 34092, 34100, 34108, 34116, 34124, 34132, 34141, 34150, 34159, 34167, + 34176, 34185, 34194, 34203, 34213, 34222, 34228, 34233, 34240, 34247, + 34255, 34263, 34272, 34281, 34291, 34301, 34312, 34323, 34333, 34343, + 34353, 34363, 34372, 34381, 34391, 34401, 34412, 34423, 34433, 34443, + 34453, 34463, 34470, 34477, 34485, 34493, 34500, 34507, 34516, 34525, + 34535, 34545, 34556, 34567, 34577, 34587, 34597, 34607, 34616, 34625, + 34633, 34641, 34648, 34655, 34663, 34671, 34680, 34689, 34699, 34709, + 34720, 34731, 34741, 34751, 34761, 34771, 34780, 34789, 34799, 34809, + 34820, 34831, 34841, 34851, 34861, 34871, 34878, 34885, 34893, 34901, + 34910, 34919, 34929, 34939, 34950, 34961, 34971, 34981, 34991, 35001, + 35009, 35017, 35025, 35033, 35042, 35051, 35059, 35067, 35074, 35081, + 35088, 35095, 35103, 35111, 35119, 35127, 35137, 35147, 35157, 35167, + 35177, 35187, 35195, 35203, 35213, 35223, 35233, 35243, 35253, 35263, + 35271, 35279, 35289, 35299, 35309, 0, 0, 35319, 35327, 35335, 35345, + 35355, 35365, 0, 0, 35375, 35383, 35391, 35401, 35411, 35421, 35431, + 35441, 35451, 35459, 35467, 35477, 35487, 35497, 35507, 35517, 35527, + 35535, 35543, 35553, 35563, 35573, 35583, 35593, 35603, 35611, 35619, + 35629, 35639, 35649, 35659, 35669, 35679, 35687, 35695, 35705, 35715, + 35725, 0, 0, 35735, 35743, 35751, 35761, 35771, 35781, 0, 0, 35791, + 35799, 35807, 35817, 35827, 35837, 35847, 35857, 0, 35867, 0, 35875, 0, + 35885, 0, 35895, 35905, 35913, 35921, 35931, 35941, 35951, 35961, 35971, + 35981, 35989, 35997, 36007, 36017, 36027, 36037, 36047, 36057, 36065, + 36073, 36081, 36089, 36097, 36105, 36113, 36121, 36129, 36137, 36145, + 36153, 36161, 0, 0, 36169, 36179, 36189, 36202, 36215, 36228, 36241, + 36254, 36267, 36277, 36287, 36300, 36313, 36326, 36339, 36352, 36365, + 36375, 36385, 36398, 36411, 36424, 36437, 36450, 36463, 36473, 36483, + 36496, 36509, 36522, 36535, 36548, 36561, 36571, 36581, 36594, 36607, + 36620, 36633, 36646, 36659, 36669, 36679, 36692, 36705, 36718, 36731, + 36744, 36757, 36765, 36773, 36784, 36792, 0, 36803, 36811, 36822, 36830, + 36838, 36846, 36854, 36862, 36865, 36868, 36871, 36874, 36880, 36891, + 36899, 0, 36910, 36918, 36929, 36937, 36945, 36953, 36961, 36969, 36974, + 36979, 36984, 36992, 37000, 37011, 0, 0, 37022, 37030, 37041, 37049, + 37057, 37065, 0, 37073, 37078, 37083, 37088, 37096, 37104, 37115, 37126, + 37134, 37142, 37150, 37161, 37169, 37177, 37185, 37193, 37201, 37207, + 37213, 0, 0, 37216, 37227, 37235, 0, 37246, 37254, 37265, 37273, 37281, + 37289, 37297, 37305, 37308, 0, 37311, 37315, 37319, 37323, 37327, 37331, + 37335, 37339, 37343, 37347, 37351, 37355, 37361, 37367, 37373, 37376, + 37379, 37381, 37385, 37389, 37393, 37397, 37399, 37403, 37407, 37413, + 37419, 37426, 37433, 37438, 37443, 37449, 37455, 37457, 37460, 37462, + 37466, 37470, 37474, 37477, 37481, 37485, 37489, 37493, 37497, 37503, + 37507, 37511, 37517, 37522, 37529, 37531, 37534, 37538, 37541, 37545, + 37550, 37552, 37561, 37570, 37573, 37577, 37579, 37581, 37583, 37586, + 37592, 37594, 37598, 37602, 37609, 37616, 37620, 37625, 37630, 37635, + 37639, 37643, 37647, 37650, 37653, 37657, 37664, 37669, 37673, 37677, + 37682, 37686, 37690, 37695, 37700, 37704, 37708, 37712, 37714, 37719, + 37724, 37728, 37732, 37736, 37740, 0, 0, 0, 0, 0, 37744, 37750, 37756, + 37763, 37770, 37775, 37780, 37784, 0, 0, 37790, 37793, 37796, 37799, + 37802, 37805, 37808, 37812, 37816, 37821, 37826, 37831, 37837, 37841, + 37844, 37847, 37850, 37853, 37856, 37859, 37862, 37865, 37868, 37872, + 37876, 37881, 37886, 0, 37891, 37897, 37903, 37909, 37916, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 37923, 37926, 37929, 37932, 37937, 37940, 37943, 37946, + 37949, 37952, 37955, 37959, 37962, 37965, 37968, 37971, 37974, 37979, + 37982, 37985, 37988, 37991, 37994, 37999, 38002, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 38005, 38010, 38015, 38022, + 38030, 38035, 38040, 38044, 38048, 38053, 38060, 38067, 38071, 38076, + 38081, 38086, 38091, 38098, 38103, 38108, 38113, 38122, 38129, 38135, + 38139, 38144, 38150, 38155, 38162, 38170, 38178, 38182, 38186, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 38190, 38194, 38201, 38205, 38209, + 38214, 38218, 38222, 38226, 38228, 38232, 38236, 38240, 38245, 38249, + 38253, 38261, 38264, 38268, 38271, 38274, 38280, 38283, 38286, 38292, + 38296, 38300, 38304, 38307, 38311, 38314, 38318, 38320, 38323, 38326, + 38330, 38332, 38336, 38339, 38342, 38347, 38352, 38358, 38361, 38364, + 38368, 38373, 38376, 38379, 38382, 38386, 38390, 38393, 38396, 38398, + 38401, 38404, 38407, 38411, 38416, 38419, 38423, 38427, 38431, 38435, + 38440, 38445, 38449, 38453, 38458, 38463, 38468, 38472, 38476, 38481, + 38485, 38488, 38491, 38493, 38497, 38502, 38509, 38516, 38523, 38530, + 38537, 38544, 38551, 38558, 38566, 38573, 38581, 38588, 38595, 38603, + 38611, 38616, 38621, 38626, 38631, 38636, 38641, 38646, 38651, 38656, + 38661, 38667, 38673, 38679, 38685, 38692, 38700, 38707, 38713, 38719, + 38725, 38731, 38737, 38743, 38749, 38755, 38761, 38768, 38775, 38782, + 38789, 38797, 38806, 38814, 38825, 38833, 38841, 38849, 38855, 38864, + 38873, 38881, 38890, 0, 0, 0, 0, 0, 0, 38898, 38900, 38903, 38905, 38908, + 38911, 38914, 38919, 38924, 38929, 38934, 38938, 38942, 38946, 38950, + 38955, 38961, 38966, 38972, 38977, 38982, 38987, 38993, 38998, 39004, + 39010, 39014, 39018, 39023, 39028, 39033, 39038, 39043, 39051, 39059, + 39067, 39075, 39082, 39090, 39097, 39104, 39112, 39122, 39129, 39136, + 39143, 39150, 39158, 39166, 39173, 39180, 39188, 39196, 39201, 39209, + 39214, 39219, 39225, 39230, 39236, 39243, 39250, 39255, 39261, 39266, + 39269, 39273, 39276, 39280, 39284, 39288, 39294, 39300, 39306, 39312, + 39316, 39320, 39324, 39328, 39334, 39340, 39344, 39349, 39353, 39358, + 39362, 39366, 39369, 39373, 39376, 39380, 39387, 39395, 39406, 39417, + 39422, 39431, 39438, 39446, 39454, 39458, 39464, 39472, 39476, 39481, + 39486, 39492, 39498, 39504, 39511, 39515, 39519, 39524, 39527, 39529, + 39533, 39537, 39544, 39548, 39550, 39552, 39556, 39563, 39568, 39574, + 39583, 39590, 39595, 39599, 39603, 39607, 39610, 39613, 39616, 39620, + 39624, 39628, 39632, 39636, 39639, 39643, 39647, 39650, 39652, 39655, + 39657, 39661, 39665, 39667, 39672, 39675, 39679, 39683, 39687, 39689, + 39691, 39693, 39696, 39700, 39704, 39708, 39712, 39716, 39722, 39728, + 39730, 39732, 39734, 39736, 39739, 39741, 39745, 39747, 39751, 39754, + 39759, 39763, 39767, 39770, 39774, 39778, 39783, 39787, 39796, 39806, + 39810, 39815, 39821, 39825, 39829, 39832, 39837, 39841, 39847, 39851, + 39862, 39870, 39874, 39878, 39884, 39888, 39891, 39893, 39896, 39900, + 39904, 39910, 39914, 39918, 39921, 39924, 39928, 39933, 39938, 39943, + 39948, 39953, 39960, 39967, 39971, 39975, 39977, 39981, 39984, 39987, + 39995, 40003, 40009, 40015, 40024, 40033, 40038, 40043, 40051, 40059, + 40061, 40063, 40068, 40073, 40079, 40085, 40090, 40095, 40099, 40103, + 40109, 40115, 40121, 40127, 40137, 40147, 40154, 40161, 40163, 40167, + 40171, 40176, 40181, 40188, 40195, 40198, 40201, 40204, 40207, 40210, + 40215, 40219, 40224, 40229, 40232, 40235, 40238, 40241, 40244, 40248, + 40251, 40254, 40257, 40260, 40262, 40264, 40266, 40268, 40276, 40284, + 40289, 40292, 40297, 40307, 40313, 40319, 40325, 40333, 40341, 40352, + 40356, 40360, 40362, 40368, 40370, 40372, 40374, 40376, 40382, 40385, + 40391, 40397, 40401, 40405, 40409, 40412, 40416, 40420, 40422, 40431, + 40440, 40445, 40450, 40455, 40461, 40467, 40470, 40473, 40476, 40479, + 40481, 40486, 40491, 40496, 40502, 40508, 40515, 40522, 40527, 40532, + 40537, 40542, 40550, 40558, 40566, 40574, 40582, 40590, 40598, 40606, + 40614, 40622, 40629, 40640, 40649, 40663, 40666, 40671, 40677, 40683, + 40690, 40704, 40719, 40725, 40731, 40738, 40744, 40752, 40758, 40771, + 40785, 40790, 40796, 40803, 40806, 40809, 40811, 40814, 40817, 40819, + 40821, 40825, 40828, 40831, 40834, 40837, 40842, 40847, 40852, 40857, + 40860, 40863, 40865, 40867, 40869, 40873, 40877, 40881, 40887, 40890, + 40892, 40894, 40899, 40904, 40909, 40914, 40919, 40924, 40926, 40928, + 40937, 40941, 40948, 40957, 40959, 40964, 40969, 40976, 40980, 40982, + 40986, 40988, 40992, 40996, 41000, 41002, 41004, 41006, 41011, 41018, + 41025, 41032, 41039, 41046, 41053, 41060, 41067, 41073, 41079, 41086, + 41093, 41100, 41107, 41113, 41119, 41126, 41133, 41140, 41148, 41155, + 41163, 41170, 41178, 41185, 41193, 41201, 41208, 41216, 41223, 41231, + 41238, 41246, 41253, 41260, 41267, 41274, 41281, 41289, 41296, 41303, + 41310, 41318, 41325, 41332, 41339, 41346, 41354, 41362, 41369, 41376, + 41382, 41389, 41394, 41401, 41408, 41416, 41423, 41431, 41439, 41444, + 41449, 41454, 41461, 41468, 41475, 41482, 41487, 41491, 41500, 41506, + 41509, 41517, 41520, 41525, 41530, 41533, 41536, 41544, 41547, 41552, + 41555, 41562, 41567, 41575, 41578, 41581, 41584, 41589, 41594, 41597, + 41600, 41608, 41611, 41616, 41623, 41627, 41631, 41636, 41641, 41647, + 41652, 41658, 41664, 41669, 41675, 41683, 41689, 41697, 41705, 41711, + 41719, 41727, 41736, 41744, 41750, 41758, 41767, 41775, 41779, 41784, + 41797, 41810, 41814, 41818, 41822, 41826, 41836, 41840, 41845, 41850, + 41855, 41860, 41865, 41870, 41880, 41890, 41898, 41908, 41918, 41926, + 41936, 41946, 41954, 41964, 41974, 41982, 41990, 42000, 42010, 42013, + 42016, 42019, 42024, 42028, 42034, 42041, 42048, 42056, 42063, 42067, + 42071, 42075, 42079, 42081, 42085, 42089, 42094, 42099, 42106, 42113, + 42116, 42123, 42125, 42127, 42131, 42135, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 42140, 42144, 42151, 42158, 42165, + 42172, 42176, 42180, 42184, 42188, 42193, 42199, 42204, 42210, 42216, + 42222, 42228, 42236, 42243, 42250, 42257, 42264, 42270, 42276, 42285, + 42289, 42296, 42300, 42304, 42310, 42316, 42322, 42328, 42332, 42336, + 42339, 42343, 42347, 42354, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 42361, 42364, 42368, 42372, 42378, 42384, + 42390, 42398, 42405, 42409, 42417, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 42422, 42425, 42428, 42431, 42434, 42437, 42440, + 42443, 42446, 42449, 42453, 42457, 42461, 42465, 42469, 42473, 42477, + 42481, 42485, 42489, 42493, 42496, 42499, 42502, 42505, 42508, 42511, + 42514, 42517, 42520, 42524, 42528, 42532, 42536, 42540, 42544, 42548, + 42552, 42556, 42560, 42564, 42570, 42576, 42582, 42589, 42596, 42603, + 42610, 42617, 42624, 42631, 42638, 42645, 42652, 42659, 42666, 42673, + 42680, 42687, 42694, 42701, 42706, 42712, 42718, 42724, 42729, 42735, + 42741, 42747, 42752, 42758, 42764, 42769, 42774, 42779, 42784, 42790, + 42796, 42801, 42806, 42812, 42817, 42823, 42829, 42835, 42841, 42847, + 42852, 42858, 42864, 42870, 42875, 42881, 42887, 42893, 42898, 42904, + 42910, 42915, 42920, 42925, 42930, 42936, 42942, 42947, 42952, 42958, + 42963, 42969, 42975, 42981, 42987, 42993, 42998, 43004, 43010, 43016, + 43021, 43027, 43033, 43039, 43044, 43050, 43056, 43061, 43066, 43071, + 43076, 43082, 43088, 43093, 43098, 43104, 43109, 43115, 43121, 43127, + 43133, 43139, 43143, 43149, 43155, 43161, 43167, 43173, 43179, 43185, + 43191, 43197, 43203, 43207, 43211, 43215, 43219, 43223, 43227, 43231, + 43235, 43239, 43244, 43250, 43255, 43260, 43265, 43270, 43279, 43288, + 43297, 43306, 43315, 43324, 43333, 43342, 43349, 43357, 43365, 43372, + 43379, 43387, 43395, 43402, 43409, 43417, 43425, 43432, 43439, 43447, + 43455, 43462, 43469, 43477, 43486, 43495, 43503, 43512, 43521, 43528, + 43535, 43543, 43552, 43561, 43569, 43578, 43587, 43594, 43601, 43610, + 43619, 43627, 43635, 43644, 43653, 43660, 43667, 43676, 43685, 43693, + 43701, 43710, 43719, 43726, 43733, 43742, 43751, 43759, 43768, 43777, + 43785, 43795, 43805, 43815, 43825, 43834, 43843, 43852, 43861, 43868, + 43876, 43884, 43892, 43900, 43905, 43910, 43919, 43927, 43934, 43943, + 43951, 43958, 43967, 43975, 43982, 43991, 43999, 44006, 44015, 44023, + 44030, 44039, 44047, 44054, 44063, 44071, 44078, 44087, 44095, 44102, + 44111, 44119, 44126, 44135, 44144, 44153, 44162, 44175, 44188, 44195, + 44200, 44205, 44210, 44215, 44220, 44225, 44230, 44235, 44243, 44251, + 44259, 44267, 44272, 44279, 44286, 44293, 44298, 44306, 44313, 44321, + 44325, 44332, 44338, 44345, 44349, 44355, 44361, 44367, 44371, 44374, + 44378, 44382, 44389, 44395, 44401, 44407, 44413, 44427, 44437, 44451, + 44465, 44471, 44481, 44495, 44498, 44501, 44508, 44516, 44521, 44526, + 44534, 44545, 44556, 44564, 44568, 44572, 44575, 44578, 44582, 44586, + 44589, 44592, 44597, 44602, 44608, 44614, 44619, 44624, 44630, 44636, + 44641, 44646, 44651, 44656, 44662, 44668, 44673, 44678, 44684, 44690, + 44695, 44700, 44703, 44706, 44715, 44717, 44719, 44722, 44726, 44732, + 44734, 44737, 44744, 44751, 44759, 44767, 44777, 44791, 44796, 44801, + 44805, 44810, 44818, 44826, 44835, 44844, 44853, 44862, 44867, 44872, + 44878, 44884, 44890, 44896, 44899, 44905, 44911, 44921, 44931, 44939, + 44947, 44956, 44965, 44969, 44977, 44985, 44993, 45001, 45010, 45019, + 45028, 45037, 45042, 45047, 45052, 45057, 45062, 45068, 45074, 45079, + 45085, 45087, 45089, 45091, 45093, 45096, 45099, 45101, 45103, 45105, + 45109, 45113, 45115, 45117, 45120, 45123, 45127, 45133, 45139, 45141, + 45148, 45152, 45157, 45162, 45164, 45173, 45179, 45185, 45191, 45197, + 45203, 45209, 45214, 45217, 45220, 45223, 45225, 45227, 45231, 45235, + 45240, 45245, 45250, 45253, 45257, 45262, 45265, 45269, 45274, 45279, + 45284, 45289, 45294, 45299, 45304, 45309, 45314, 45319, 45324, 45329, + 45335, 45341, 45347, 45349, 45352, 45354, 45357, 45359, 45361, 45363, + 45365, 45367, 45369, 45371, 45373, 45375, 45377, 45379, 45381, 45383, + 45385, 45387, 45389, 45391, 45396, 45401, 45406, 45411, 45416, 45421, + 45426, 45431, 45436, 45441, 45446, 45451, 45456, 45461, 45466, 45471, + 45476, 45481, 45486, 45491, 45495, 45499, 45503, 45509, 45515, 45520, + 45525, 45530, 45535, 45540, 45545, 45553, 45561, 45569, 45577, 45585, + 45593, 45601, 45609, 45615, 45620, 45625, 45630, 45633, 45637, 45641, + 45645, 45649, 45653, 45657, 45664, 45671, 45679, 45687, 45692, 45697, + 45704, 45711, 45718, 45725, 45728, 45731, 45736, 45738, 45742, 45747, + 45749, 45751, 45753, 45755, 45760, 45763, 45765, 45770, 45777, 45784, + 45787, 45791, 45796, 45801, 45809, 45815, 45820, 45831, 45837, 45843, + 45848, 45853, 45859, 45862, 45865, 45870, 45872, 45876, 45878, 45880, + 45882, 45884, 45886, 45888, 45893, 45895, 45897, 45899, 45901, 45905, + 45907, 45910, 45915, 45920, 45925, 45930, 45936, 45942, 45944, 45947, + 45954, 45960, 45966, 45973, 45977, 0, 45981, 45983, 45987, 45993, 45998, + 46000, 46004, 46013, 46021, 46029, 46035, 46041, 46046, 46052, 46057, + 46060, 46074, 46077, 46082, 0, 46087, 0, 0, 0, 0, 46096, 46103, 46107, + 46109, 46111, 46115, 46121, 46126, 46132, 46134, 46140, 46142, 46148, + 46150, 46152, 46157, 46159, 46163, 46168, 46170, 46175, 46180, 46184, + 46191, 0, 46201, 46207, 46210, 46216, 0, 46219, 46224, 46228, 46230, 0, + 0, 46232, 46236, 46240, 46245, 46247, 46252, 46255, 46258, 46261, 46265, + 46269, 46274, 46278, 46283, 46288, 46292, 46298, 46305, 46308, 46314, + 46319, 46323, 46328, 46334, 46340, 46347, 46353, 46360, 0, 46367, 46374, + 46378, 46385, 46391, 46396, 46402, 46406, 46411, 46414, 46420, 46426, + 46433, 46441, 46448, 46457, 46467, 46474, 46480, 46484, 46492, 46497, + 46506, 46509, 46512, 46521, 46532, 46539, 46541, 46547, 46552, 46554, + 46557, 46561, 46569, 0, 46578, 0, 46583, 46591, 46599, 46607, 0, 0, 0, + 46615, 46623, 46628, 46631, 46635, 46638, 46649, 46659, 46669, 0, 0, + 46678, 46687, 46693, 46701, 46705, 46713, 46717, 46725, 46732, 46739, + 46748, 46757, 46767, 46777, 46787, 46797, 46806, 46815, 46825, 46835, + 46844, 46853, 46860, 46867, 46874, 46881, 46888, 46895, 46902, 46909, + 46916, 46924, 46930, 46936, 46942, 46948, 46954, 46960, 46966, 46972, + 46978, 46985, 46993, 47001, 47009, 47017, 47025, 47033, 47041, 47049, + 47057, 47066, 0, 0, 0, 47071, 47077, 47080, 47086, 47092, 47097, 47101, + 47106, 47112, 47119, 47122, 47129, 47136, 47140, 47149, 47158, 47163, + 47169, 47174, 47179, 47186, 47193, 47201, 47209, 0, 47218, 47227, 47232, + 47236, 47243, 47247, 47254, 47262, 47267, 47275, 47279, 47284, 47288, + 47293, 0, 47297, 47302, 47311, 47313, 47317, 47321, 47328, 47335, 47340, + 47348, 47354, 0, 47360, 0, 0, 0, 47363, 47371, 47375, 47382, 47390, + 47398, 47403, 47408, 47414, 47419, 47424, 47430, 47435, 47438, 47442, + 47446, 47453, 47462, 47467, 47476, 47485, 47491, 47497, 47502, 47507, + 47512, 47517, 47523, 47529, 47537, 47545, 47551, 47557, 47562, 47567, + 47574, 47581, 47587, 47590, 47593, 47597, 47601, 47605, 47610, 47616, + 47622, 47629, 47636, 47641, 47645, 47649, 47653, 47657, 47661, 47665, + 47669, 47673, 47677, 47681, 47685, 47689, 47693, 47697, 47701, 47705, + 47709, 47713, 47717, 47721, 47725, 47729, 47733, 47737, 47741, 47745, + 47749, 47753, 47757, 47761, 47765, 47769, 47773, 47777, 47781, 47785, + 47789, 47793, 47797, 47801, 47805, 47809, 47813, 47817, 47821, 47825, + 47829, 47833, 47837, 47841, 47845, 47849, 47853, 47857, 47861, 47865, + 47869, 47873, 47877, 47881, 47885, 47889, 47893, 47897, 47901, 47905, + 47909, 47913, 47917, 47921, 47925, 47929, 47933, 47937, 47941, 47945, + 47949, 47953, 47957, 47961, 47965, 47969, 47973, 47977, 47981, 47985, + 47989, 47993, 47997, 48001, 48005, 48009, 48013, 48017, 48021, 48025, + 48029, 48033, 48037, 48041, 48045, 48049, 48053, 48057, 48061, 48065, + 48069, 48073, 48077, 48081, 48085, 48089, 48093, 48097, 48101, 48105, + 48109, 48113, 48117, 48121, 48125, 48129, 48133, 48137, 48141, 48145, + 48149, 48153, 48157, 48161, 48165, 48169, 48173, 48177, 48181, 48185, + 48189, 48193, 48197, 48201, 48205, 48209, 48213, 48217, 48221, 48225, + 48229, 48233, 48237, 48241, 48245, 48249, 48253, 48257, 48261, 48265, + 48269, 48273, 48277, 48281, 48285, 48289, 48293, 48297, 48301, 48305, + 48309, 48313, 48317, 48321, 48325, 48329, 48333, 48337, 48341, 48345, + 48349, 48353, 48357, 48361, 48365, 48369, 48373, 48377, 48381, 48385, + 48389, 48393, 48397, 48401, 48405, 48409, 48413, 48417, 48421, 48425, + 48429, 48433, 48437, 48441, 48445, 48449, 48453, 48457, 48461, 48465, + 48469, 48473, 48477, 48481, 48485, 48489, 48493, 48497, 48501, 48505, + 48509, 48513, 48517, 48521, 48525, 48529, 48533, 48537, 48541, 48545, + 48549, 48553, 48557, 48561, 48565, 48569, 48573, 48577, 48581, 48585, + 48589, 48593, 48597, 48601, 48605, 48609, 48613, 48617, 48621, 48625, + 48629, 48633, 48637, 48641, 48645, 48649, 48653, 48657, 48661, 48665, + 48672, 48680, 48686, 48692, 48699, 48706, 48712, 48718, 48724, 48730, + 48735, 48740, 48745, 48750, 48756, 48762, 48770, 48777, 48782, 48787, + 48795, 48804, 48811, 48821, 48832, 48835, 48838, 48842, 48846, 48852, + 48858, 48868, 48878, 48888, 48898, 48905, 48912, 48919, 48926, 48937, + 48948, 48959, 48970, 48980, 48990, 49002, 49014, 49025, 49036, 49048, + 49060, 49069, 49079, 49089, 49100, 49111, 49118, 49125, 49132, 49139, + 49149, 49159, 49167, 49175, 49182, 49189, 49196, 49203, 49210, 49215, + 49220, 49226, 49234, 49244, 49252, 49260, 49268, 49276, 49284, 49292, + 49300, 49308, 49316, 49324, 49333, 49342, 49350, 49358, 49367, 49376, + 49385, 49394, 49404, 49414, 49423, 49432, 49442, 49452, 49466, 49483, + 49497, 49514, 49528, 49542, 49556, 49570, 49580, 49591, 49601, 49612, + 49629, 49646, 49654, 49660, 49667, 49674, 49681, 49688, 49693, 49699, + 49704, 49709, 49715, 49720, 49725, 49730, 49735, 49740, 49747, 49752, + 49759, 49764, 49769, 49773, 49777, 49784, 49791, 49798, 49805, 49812, + 49819, 49832, 49845, 49858, 49871, 49879, 49887, 49893, 49899, 49906, + 49913, 49920, 49927, 49931, 49936, 49944, 49952, 49960, 49967, 49971, + 49979, 49987, 49990, 49993, 49998, 50004, 50012, 50020, 50040, 50060, + 50080, 50100, 50120, 50140, 50160, 50180, 50185, 50192, 50201, 50209, + 50217, 50222, 50225, 50228, 50233, 50236, 50255, 50262, 50268, 50274, + 50278, 50281, 50284, 50287, 50298, 50310, 50317, 50324, 50327, 50331, + 50334, 50339, 50344, 50349, 50355, 50364, 50371, 50378, 50386, 50393, + 50400, 50403, 50409, 50415, 50418, 50421, 50426, 50431, 50437, 50443, + 50447, 50452, 50459, 50463, 50469, 50473, 50477, 50485, 50497, 50505, + 50509, 50511, 50520, 50529, 50535, 50538, 50544, 50550, 50555, 50560, + 50565, 50570, 50575, 50580, 50582, 50588, 50593, 50600, 50604, 50610, + 50613, 50617, 50624, 50631, 50633, 50635, 50641, 50647, 50653, 50662, + 50671, 50678, 50685, 50691, 50697, 50702, 50707, 50712, 50718, 50724, + 50729, 50736, 50740, 50744, 50757, 50770, 50781, 50790, 50796, 50803, + 50808, 50813, 50818, 50823, 50828, 50830, 50837, 50844, 50851, 50858, + 50865, 50873, 50879, 50884, 50890, 50896, 50902, 50909, 50915, 50923, + 50931, 50939, 50947, 50954, 50960, 50966, 50975, 50979, 50988, 50997, + 51006, 51014, 51018, 51024, 51031, 51038, 51042, 51048, 51055, 51060, + 51065, 51071, 51076, 51081, 51088, 51095, 51100, 51105, 51113, 51121, + 51131, 51141, 51148, 51155, 51159, 51163, 51175, 51181, 51187, 51192, + 51197, 51204, 51211, 51217, 51223, 51232, 51240, 51248, 51255, 51262, + 51269, 51275, 51282, 51288, 51295, 51302, 51309, 51316, 51322, 51327, + 51336, 51346, 51353, 51362, 51368, 51373, 51378, 51387, 51393, 51399, + 51405, 51413, 51418, 51425, 51432, 51443, 51450, 51457, 51464, 51471, + 51478, 51485, 51492, 51503, 51514, 51524, 51534, 51546, 51558, 51563, + 51568, 51576, 51584, 51590, 51596, 51605, 51614, 51622, 51630, 51638, + 51646, 51656, 51666, 51680, 51694, 51701, 51708, 51719, 51730, 51737, + 51744, 51753, 51762, 51767, 51772, 51781, 51790, 51795, 51800, 51808, + 51814, 51820, 51828, 51836, 51849, 51862, 51866, 51870, 51877, 51884, + 51891, 51899, 51907, 51915, 51923, 51929, 51935, 51941, 51947, 51954, + 51961, 51969, 51977, 51980, 51983, 51988, 51993, 51999, 52005, 52012, + 52019, 52028, 52037, 52044, 52051, 52059, 52067, 52075, 52083, 52090, + 52097, 52104, 52111, 52115, 52119, 52126, 52133, 52138, 52143, 52148, + 52153, 52159, 52173, 52180, 52187, 52191, 52193, 52195, 52200, 52205, + 52210, 52214, 52222, 52229, 52236, 52244, 52256, 52264, 52272, 52283, + 52287, 52291, 52295, 52300, 52311, 52318, 52325, 52332, 52337, 52344, + 52353, 52361, 52367, 52373, 52379, 52388, 52397, 52405, 52414, 52419, + 52422, 52427, 52433, 52439, 52445, 52451, 52455, 52458, 52462, 52466, + 52472, 52478, 52484, 52490, 52494, 52498, 52505, 52512, 52519, 52526, + 52533, 52540, 52550, 52560, 52567, 52574, 52582, 52590, 52594, 52599, + 52604, 52610, 52616, 52619, 52622, 52625, 52628, 52632, 52637, 52642, + 52647, 52652, 52657, 52661, 52665, 52669, 52673, 52677, 52681, 52685, + 52691, 52695, 52701, 52706, 52713, 52721, 52728, 52736, 52743, 52751, + 52760, 52767, 52777, 52788, 52794, 52803, 52809, 52818, 52827, 52833, + 52839, 52843, 52847, 52856, 52865, 52872, 52879, 52888, 0, 0, 0, 52897, + 52902, 52906, 52910, 52915, 52920, 52925, 52933, 52941, 52944, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 52948, 52953, 52958, 52963, 52968, + 52973, 52978, 52983, 52988, 52993, 52998, 53004, 53008, 53013, 53018, + 53023, 53028, 53033, 53038, 53043, 53048, 53053, 53058, 53063, 53068, + 53073, 53078, 53083, 53088, 53093, 53098, 53103, 53108, 53113, 53118, + 53124, 53129, 53135, 53144, 53149, 53157, 53164, 53173, 53178, 53183, + 53188, 53194, 0, 53201, 53206, 53211, 53216, 53221, 53226, 53231, 53236, + 53241, 53246, 53251, 53257, 53261, 53266, 53271, 53276, 53281, 53286, + 53291, 53296, 53301, 53306, 53311, 53316, 53321, 53326, 53331, 53336, + 53341, 53346, 53351, 53356, 53361, 53366, 53371, 53377, 53382, 53388, + 53397, 53402, 53410, 53417, 53426, 53431, 53436, 53441, 53447, 0, 53454, + 53462, 53470, 53480, 53487, 53495, 53501, 53510, 53518, 53526, 53534, + 53542, 53550, 53558, 53563, 53570, 53575, 53581, 53589, 53596, 53603, + 53611, 53617, 53623, 53630, 53637, 53646, 53656, 53662, 53669, 53674, + 53684, 53694, 53699, 53704, 53709, 53714, 53719, 53724, 53729, 53734, + 53739, 53744, 53749, 53754, 53759, 53764, 53769, 53774, 53779, 53784, + 53789, 53794, 53799, 53804, 53809, 53814, 53819, 53824, 53829, 53834, + 53839, 53844, 53848, 53852, 53857, 53862, 53867, 53872, 53877, 53882, + 53887, 53892, 53897, 53902, 53907, 53912, 53917, 53922, 53927, 53932, + 53937, 53942, 53949, 53956, 53963, 53970, 53977, 53984, 53991, 53998, + 54005, 54012, 54019, 54026, 54033, 54040, 54045, 54050, 54057, 54064, + 54071, 54078, 54085, 54092, 54099, 54106, 54113, 54120, 54127, 54134, + 54140, 54146, 54152, 54158, 54165, 54172, 54179, 54186, 54193, 54200, + 54207, 54214, 54221, 54228, 54236, 54244, 54252, 54260, 54268, 54276, + 54284, 54292, 54296, 54302, 54308, 54312, 54318, 54324, 54330, 54337, + 54344, 54351, 54358, 54363, 54369, 0, 0, 0, 0, 0, 0, 0, 54375, 54383, + 54392, 54401, 54409, 54415, 54420, 54425, 54430, 54435, 54440, 54445, + 54450, 54455, 54460, 54465, 54470, 54475, 54480, 54485, 54490, 54495, + 54500, 54505, 54510, 54515, 54520, 54525, 54530, 54535, 54540, 54545, + 54550, 54555, 54560, 54565, 54570, 54575, 54580, 54585, 54590, 54595, + 54600, 54605, 54610, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 54615, 54619, 54624, + 54629, 54634, 54639, 54648, 54653, 54658, 54663, 54668, 54673, 54678, + 54683, 54688, 54695, 54700, 54705, 54714, 54721, 54726, 54731, 54736, + 54743, 54748, 54755, 54760, 54765, 54772, 54779, 54784, 54789, 54794, + 54801, 54808, 54813, 54818, 54823, 54828, 54833, 54840, 54847, 54852, + 54857, 54862, 54867, 54872, 54877, 54882, 54887, 54892, 54897, 54902, + 54909, 0, 0, 0, 0, 0, 0, 0, 0, 0, 54914, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 54921, 54925, 54929, 54933, 54937, 54941, 54945, 54949, + 54953, 54957, 54961, 54967, 54971, 54975, 54979, 54983, 54987, 54991, + 54995, 54999, 55003, 55007, 55011, 0, 0, 0, 0, 0, 0, 0, 0, 0, 55015, + 55019, 55023, 55027, 55031, 55035, 55039, 0, 55043, 55047, 55051, 55055, + 55059, 55063, 55067, 0, 55071, 55075, 55079, 55083, 55087, 55091, 55095, + 0, 55099, 55103, 55107, 55111, 55115, 55119, 55123, 0, 55127, 55131, + 55135, 55139, 55143, 55147, 55151, 0, 55155, 55159, 55163, 55167, 55171, + 55175, 55179, 0, 55183, 55187, 55191, 55195, 55199, 55203, 55207, 0, + 55211, 55215, 55219, 55223, 55227, 55231, 55235, 0, 55239, 55244, 55249, + 55254, 55259, 55264, 55269, 55273, 55278, 55283, 55288, 55292, 55297, + 55302, 55307, 55312, 55316, 55321, 55326, 55331, 55336, 55341, 55346, + 55350, 55355, 55360, 55367, 55372, 55377, 55383, 55390, 55397, 55406, + 55413, 55422, 55426, 55430, 55436, 55442, 55448, 55456, 55462, 55466, + 55470, 55474, 55480, 55486, 55490, 55492, 55496, 55501, 55503, 55507, + 55511, 55515, 55521, 55526, 55530, 55534, 55539, 55545, 55550, 55555, + 55560, 55565, 55572, 55579, 55584, 55589, 55594, 55599, 55604, 55609, + 55613, 55617, 55624, 55631, 55637, 55641, 55645, 55648, 55652, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 55660, 55664, 55668, 55673, 55678, 55683, 55687, 55691, 55695, + 55700, 55705, 55709, 55713, 55717, 55721, 55726, 55731, 55736, 55741, + 55745, 55749, 55754, 55759, 55764, 55769, 55773, 0, 55777, 55781, 55785, + 55789, 55793, 55797, 55801, 55806, 55811, 55815, 55820, 55825, 55834, + 55838, 55842, 55846, 55853, 55857, 55862, 55867, 55871, 55875, 55881, + 55886, 55891, 55896, 55901, 55905, 55909, 55913, 55917, 55921, 55926, + 55931, 55935, 55939, 55944, 55949, 55954, 55958, 55962, 55967, 55972, + 55978, 55984, 55988, 55994, 56000, 56004, 56010, 56016, 56021, 56026, + 56030, 56036, 56040, 56044, 56050, 56056, 56061, 56066, 56070, 56074, + 56082, 56088, 56094, 56100, 56105, 56110, 56115, 56121, 56125, 56131, + 56135, 56139, 56145, 56151, 56157, 56163, 56169, 56175, 56181, 56187, + 56193, 56199, 56205, 56211, 56215, 56221, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 56227, 56230, 56234, 56238, 56242, 56246, 56249, 56252, 56256, + 56260, 56264, 56268, 56271, 56276, 56280, 56284, 56288, 56294, 56298, + 56302, 56306, 56310, 56317, 56323, 56327, 56331, 56335, 56339, 56343, + 56347, 56351, 56355, 56359, 56363, 56367, 56373, 56377, 56381, 56385, + 56389, 56393, 56397, 56401, 56405, 56409, 56413, 56417, 56421, 56425, + 56429, 56433, 56437, 56443, 56449, 56454, 56459, 56463, 56467, 56471, + 56475, 56479, 56483, 56487, 56491, 56495, 56499, 56503, 56507, 56511, + 56515, 56519, 56523, 56527, 56531, 56535, 56539, 56543, 56547, 56551, + 56555, 56561, 56565, 56569, 56573, 56577, 56581, 56585, 56589, 56593, + 56598, 56605, 56609, 56613, 56617, 56621, 56625, 56629, 56633, 56637, + 56641, 56645, 56649, 56653, 56660, 56664, 56670, 56674, 56678, 56682, + 56686, 56690, 56693, 56697, 56701, 56705, 56709, 56713, 56717, 56721, + 56725, 56729, 56733, 56737, 56741, 56745, 56749, 56753, 56757, 56761, + 56765, 56769, 56773, 56777, 56781, 56785, 56789, 56793, 56797, 56801, + 56805, 56809, 56813, 56817, 56821, 56827, 56831, 56835, 56839, 56843, + 56847, 56851, 56855, 56859, 56863, 56867, 56871, 56875, 56879, 56883, + 56887, 56891, 56895, 56899, 56903, 56907, 56911, 56915, 56919, 56923, + 56927, 56931, 56935, 56943, 56947, 56951, 56955, 56959, 56963, 56969, + 56973, 56977, 56981, 56985, 56989, 56993, 56997, 57001, 57005, 57009, + 57013, 57017, 57021, 57027, 57031, 57035, 57039, 57043, 57047, 57051, + 57055, 57059, 57063, 57067, 57071, 57075, 57079, 57083, 57087, 57091, + 57095, 57099, 57103, 57107, 57111, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 57115, 57123, 57130, 57141, 57151, + 57159, 57168, 57177, 57187, 57199, 57211, 57223, 0, 0, 0, 0, 57229, + 57232, 57235, 57240, 57243, 57250, 57254, 57258, 57262, 57266, 57270, + 57275, 57280, 57284, 57288, 57293, 57298, 57303, 57308, 57311, 57314, + 57320, 57326, 57331, 57336, 57343, 57350, 57354, 57358, 57362, 57369, + 57375, 57382, 57387, 57392, 57397, 57402, 57407, 57412, 57417, 57422, + 57427, 57432, 57437, 57442, 57447, 57452, 57458, 57463, 57467, 57473, + 57484, 57494, 57509, 57519, 57523, 57532, 57538, 57544, 57550, 57555, + 57558, 57563, 57567, 0, 57573, 57577, 57580, 57584, 57587, 57591, 57594, + 57598, 57601, 57605, 57608, 57611, 57615, 57619, 57623, 57627, 57631, + 57635, 57639, 57643, 57647, 57651, 57655, 57659, 57663, 57667, 57671, + 57675, 57679, 57683, 57687, 57691, 57695, 57699, 57703, 57708, 57712, + 57716, 57720, 57724, 57727, 57731, 57734, 57738, 57742, 57746, 57750, + 57753, 57757, 57760, 57764, 57768, 57772, 57776, 57780, 57784, 57788, + 57792, 57796, 57800, 57804, 57808, 57811, 57815, 57819, 57823, 57827, + 57831, 57834, 57839, 57843, 57848, 57852, 57855, 57859, 57863, 57867, + 57871, 57876, 57880, 57884, 57888, 57892, 57895, 57899, 57903, 0, 0, + 57908, 57916, 57924, 57931, 57938, 57942, 57948, 57953, 57958, 57962, + 57965, 57969, 57972, 57976, 57979, 57983, 57986, 57990, 57993, 57996, + 58000, 58004, 58008, 58012, 58016, 58020, 58024, 58028, 58032, 58036, + 58040, 58044, 58048, 58052, 58056, 58060, 58064, 58068, 58072, 58076, + 58080, 58084, 58088, 58093, 58097, 58101, 58105, 58109, 58112, 58116, + 58119, 58123, 58127, 58131, 58135, 58138, 58142, 58145, 58149, 58153, + 58157, 58161, 58165, 58169, 58173, 58177, 58181, 58185, 58189, 58193, + 58196, 58200, 58204, 58208, 58212, 58216, 58219, 58224, 58228, 58233, + 58237, 58240, 58244, 58248, 58252, 58256, 58261, 58265, 58269, 58273, + 58277, 58280, 58284, 58288, 58293, 58297, 58301, 58305, 58309, 58314, + 58321, 58325, 58331, 0, 0, 0, 0, 0, 58336, 58340, 58344, 58347, 58351, + 58355, 58359, 58362, 58365, 58369, 58373, 58377, 58381, 58385, 58389, + 58393, 58397, 58401, 58404, 58408, 58412, 58415, 58418, 58421, 58424, + 58428, 58432, 58436, 58440, 58444, 58448, 58452, 58456, 58460, 58464, + 58467, 58470, 58474, 58478, 58482, 58486, 0, 0, 0, 58490, 58494, 58498, + 58502, 58506, 58510, 58514, 58518, 58522, 58526, 58530, 58534, 58538, + 58542, 58546, 58550, 58554, 58558, 58562, 58566, 58570, 58574, 58578, + 58582, 58586, 58590, 58594, 58598, 58602, 58606, 58610, 58613, 58617, + 58620, 58624, 58628, 58631, 58635, 58639, 58642, 58646, 58650, 58654, + 58658, 58661, 58665, 58669, 58673, 58677, 58681, 58685, 58688, 58691, + 58695, 58699, 58703, 58707, 58711, 58715, 58719, 58723, 58727, 58731, + 58735, 58739, 58743, 58747, 58751, 58755, 58759, 58763, 58767, 58771, + 58775, 58779, 58783, 58787, 58791, 58795, 58799, 58803, 58807, 58811, + 58815, 58819, 58823, 58827, 58831, 58835, 58839, 58843, 58847, 58851, + 58855, 0, 58859, 58865, 58871, 58876, 58881, 58886, 58892, 58898, 58904, + 58910, 58916, 58922, 58928, 58934, 58940, 58946, 58952, 58956, 58960, + 58964, 58968, 58972, 58976, 58980, 58984, 58988, 58992, 58996, 59000, + 59004, 59008, 59012, 59016, 59020, 59024, 59028, 59032, 59037, 59042, + 59047, 0, 0, 0, 0, 0, 0, 0, 0, 59052, 59056, 59060, 59064, 59068, 59072, + 59076, 59080, 59084, 59088, 59092, 59096, 59100, 59104, 59108, 59112, + 59115, 59119, 59122, 59126, 59130, 59134, 59138, 59142, 59146, 59150, + 59154, 59158, 59162, 59166, 59170, 59174, 59178, 59182, 59186, 59190, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 59194, 59199, 59204, 59209, 59213, + 59218, 59222, 59227, 59232, 59237, 59242, 59247, 59251, 59256, 59261, + 59266, 59271, 59275, 59279, 59283, 59287, 59291, 59295, 59299, 59303, + 59307, 59311, 59315, 59319, 59323, 59327, 59332, 59337, 59342, 59347, + 59352, 59357, 59362, 59367, 59372, 59377, 59382, 59387, 59392, 59397, + 59402, 59408, 0, 59415, 59418, 59421, 59424, 59427, 59430, 59433, 59436, + 59439, 59442, 59446, 59450, 59454, 59458, 59462, 59466, 59470, 59474, + 59478, 59482, 59486, 59490, 59494, 59498, 59502, 59506, 59510, 59514, + 59518, 59522, 59526, 59530, 59534, 59538, 59542, 59546, 59550, 59554, + 59558, 59562, 59566, 59575, 59584, 59593, 59602, 59611, 59620, 59629, + 59638, 59641, 59646, 59651, 59656, 59661, 59666, 59671, 59676, 59681, + 59686, 59690, 59695, 59700, 59705, 59710, 59715, 59719, 59723, 59727, + 59731, 59735, 59739, 59743, 59747, 59751, 59755, 59759, 59763, 59767, + 59771, 59776, 59781, 59786, 59791, 59796, 59801, 59806, 59811, 59816, + 59821, 59826, 59831, 59836, 59841, 59847, 59853, 59858, 59863, 59866, + 59869, 59872, 59875, 59878, 59881, 59884, 59887, 59890, 59894, 59898, + 59902, 59906, 59910, 59914, 59918, 59922, 59926, 59930, 59934, 59938, + 59942, 59946, 59950, 59954, 59958, 59962, 59966, 59970, 59974, 59978, + 59982, 59986, 59990, 59994, 59998, 60002, 60006, 60010, 60014, 60018, + 60022, 60026, 60030, 60034, 60038, 60042, 60046, 60050, 60055, 60060, + 60065, 60070, 60074, 60079, 60084, 60089, 60094, 60099, 60104, 60109, + 60114, 60119, 60123, 60129, 60135, 60141, 60147, 60153, 60159, 60165, + 60171, 60177, 60183, 60189, 60195, 60198, 60201, 60204, 60209, 60212, + 60215, 60218, 60221, 60224, 60227, 60231, 60235, 60239, 60243, 60247, + 60251, 60255, 60259, 60263, 60267, 60271, 60275, 60279, 60282, 60285, + 60289, 60293, 60297, 60301, 60304, 60308, 60312, 60316, 60320, 60323, + 60327, 60331, 60335, 60339, 60342, 60346, 60350, 60353, 60357, 60361, + 60365, 60369, 60373, 60377, 60381, 0, 60385, 60388, 60391, 60394, 60397, + 60400, 60403, 60406, 60409, 60412, 60415, 60418, 60421, 60424, 60427, + 60430, 60433, 60436, 60439, 60442, 60445, 60448, 60451, 60454, 60457, + 60460, 60463, 60466, 60469, 60472, 60475, 60478, 60481, 60484, 60487, + 60490, 60493, 60496, 60499, 60502, 60505, 60508, 60511, 60514, 60517, + 60520, 60523, 60526, 60529, 60532, 60535, 60538, 60541, 60544, 60547, + 60550, 60553, 60556, 60559, 60562, 60565, 60568, 60571, 60574, 60577, + 60580, 60583, 60586, 60589, 60592, 60595, 60598, 60601, 60604, 60607, + 60610, 60613, 60616, 60619, 60622, 60625, 60628, 60631, 60634, 60637, + 60640, 60643, 60646, 60649, 60657, 60664, 60671, 60678, 60685, 60692, + 60699, 60706, 60713, 60720, 60728, 60736, 60744, 60752, 60760, 60768, + 60776, 60784, 60792, 60800, 60808, 60816, 60824, 60832, 60840, 60843, + 60846, 60849, 60851, 60854, 60857, 60860, 60865, 60870, 60873, 60880, + 60887, 60894, 60901, 60904, 60909, 60911, 60915, 60917, 60919, 60922, + 60925, 60928, 60931, 60934, 60937, 60940, 60945, 60950, 60953, 60956, + 60959, 60962, 60965, 60968, 60971, 60975, 60978, 60981, 60984, 60987, + 60990, 60994, 60997, 61000, 61003, 61008, 61013, 61018, 61023, 61028, + 61033, 61038, 61043, 61048, 61056, 61058, 61061, 61064, 61067, 61070, + 61075, 61083, 61086, 61089, 61093, 61096, 61099, 61102, 61107, 61110, + 61113, 61118, 61121, 61124, 61129, 61132, 61135, 61140, 61145, 61150, + 61153, 61156, 61159, 61162, 61168, 61171, 61174, 61177, 61179, 61182, + 61185, 61188, 61193, 61196, 61199, 61202, 61205, 61208, 61213, 61216, + 61219, 61222, 61225, 61228, 61231, 61234, 61237, 61240, 61245, 61249, + 61256, 61263, 61270, 61277, 61284, 61291, 61298, 61305, 61312, 61320, + 61328, 61336, 61344, 61352, 61360, 61368, 61376, 61384, 61392, 61400, + 61408, 61416, 61424, 61432, 61440, 61448, 61456, 61464, 61472, 61480, + 61488, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 61491, 61499, + 61507, 61517, 61523, 61527, 61531, 61537, 61543, 61548, 61552, 61556, + 61560, 61564, 61570, 61574, 61578, 61582, 61592, 61596, 61600, 61606, + 61610, 61616, 61620, 61624, 61630, 61636, 61642, 61650, 61658, 61662, + 61666, 61670, 61676, 61680, 61689, 61695, 61699, 61703, 61707, 61711, + 61715, 61719, 61726, 61732, 61738, 61742, 61748, 61752, 61758, 61766, + 61776, 61780, 61788, 61792, 61798, 61806, 61814, 61818, 61822, 61828, + 61833, 61839, 61845, 61849, 61853, 61856, 61860, 61864, 61868, 61872, + 61876, 61880, 61884, 61887, 61891, 61895, 61899, 61903, 61907, 61911, + 61914, 61918, 61922, 61925, 61929, 61933, 61937, 61941, 61945, 61949, + 61953, 61957, 61961, 61965, 61969, 61973, 61977, 61981, 61985, 61989, + 61993, 61997, 62001, 62005, 62009, 62013, 62017, 62021, 62025, 62029, + 62033, 62037, 62041, 62045, 62049, 62053, 62057, 62061, 62065, 62069, + 62073, 62077, 62081, 62085, 62089, 62093, 62097, 62101, 62104, 62108, + 62112, 62116, 62120, 62124, 62128, 62132, 62136, 62140, 62144, 62148, + 62152, 62156, 62160, 62164, 62168, 62172, 62176, 62180, 62184, 62188, + 62192, 62196, 62200, 62204, 62208, 62212, 62216, 62220, 62224, 62228, + 62232, 62236, 62240, 62244, 62248, 62252, 62256, 62260, 62264, 62268, + 62272, 62276, 62280, 62284, 62288, 62292, 62296, 62300, 62304, 62308, + 62312, 62316, 62320, 62324, 62328, 62332, 62336, 62340, 62344, 62348, + 62352, 62356, 62360, 62364, 62368, 62372, 62376, 62380, 62384, 62388, + 62392, 62396, 62400, 62404, 62408, 62412, 62416, 62420, 62424, 62428, + 62432, 62436, 62440, 62444, 62448, 62452, 62456, 62460, 62464, 62468, + 62472, 62476, 62480, 62484, 62488, 62492, 62496, 62500, 62504, 62508, + 62512, 62516, 62520, 62524, 62528, 62532, 62536, 62540, 62544, 62548, + 62552, 62556, 62560, 62564, 62568, 62572, 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, 62731, 62735, 62739, 62743, 62747, + 62751, 62755, 62759, 62763, 62767, 62771, 62775, 62779, 62783, 62787, + 62791, 62795, 62799, 62803, 62807, 62811, 62815, 62819, 62823, 62827, + 62831, 62835, 62839, 62843, 62847, 62851, 62855, 62859, 62863, 62867, + 62871, 62875, 62879, 62883, 62887, 62891, 62895, 62899, 62903, 62907, + 62911, 62915, 62919, 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, 63038, 63042, 63046, 63050, 63054, 63058, 63062, 63066, + 63070, 63074, 63078, 63082, 63086, 63090, 63094, 63098, 63102, 63106, + 63110, 63114, 63118, 63122, 63126, 63130, 63134, 63138, 63142, 63146, + 63150, 63154, 63158, 63162, 63166, 63170, 63174, 63178, 63182, 63186, + 63190, 63194, 63198, 63202, 63206, 63210, 63214, 63218, 63222, 63226, + 63230, 63234, 63238, 63242, 63246, 63250, 63254, 63258, 63262, 63266, + 63270, 63274, 63278, 63282, 63286, 63290, 63294, 63298, 63302, 63306, + 63310, 63314, 63318, 63322, 63326, 63330, 63334, 63338, 63342, 63346, + 63350, 63354, 63358, 63362, 63366, 63370, 63374, 63378, 63382, 63386, + 63390, 63394, 63397, 63401, 63405, 63409, 63413, 63417, 63421, 63425, + 63429, 63433, 63437, 63441, 63445, 63449, 63453, 63457, 63461, 63465, + 63469, 63473, 63477, 63481, 63485, 63489, 63493, 63497, 63501, 63505, + 63509, 63513, 63517, 63521, 63525, 63529, 63533, 63537, 63541, 63545, + 63549, 63553, 63557, 63561, 63565, 63569, 63573, 63577, 63581, 63585, + 63589, 63593, 63597, 63601, 63605, 63609, 63613, 63617, 63621, 63625, + 63629, 63633, 63637, 63641, 63645, 63649, 63653, 63657, 63661, 63665, + 63669, 63673, 63677, 63681, 63685, 63689, 63693, 63697, 63701, 63705, + 63709, 63713, 63717, 63721, 63725, 63729, 63733, 63737, 63741, 63745, + 63749, 63753, 63757, 63761, 63765, 63769, 63773, 63777, 63781, 63785, + 63789, 63793, 63797, 63801, 63805, 63809, 63813, 63817, 63821, 63825, + 63829, 63833, 63837, 63841, 63845, 63849, 63853, 63857, 63861, 63865, + 63869, 63873, 63877, 63881, 63885, 63889, 63892, 63896, 63900, 63904, + 63908, 63912, 63916, 63920, 63924, 63928, 63932, 63936, 63940, 63944, + 63948, 63952, 63956, 63960, 63964, 63968, 63972, 63976, 63980, 63984, + 63988, 63992, 63996, 64000, 64004, 64008, 64012, 64016, 64020, 64024, + 64028, 64032, 64036, 64040, 64044, 64048, 64052, 64056, 64060, 64064, + 64068, 64072, 64076, 64080, 64084, 64088, 64092, 64096, 64100, 64104, + 64108, 64112, 64116, 64120, 64124, 64128, 64132, 64136, 64140, 64144, + 64148, 64152, 64156, 64160, 64164, 64168, 64172, 64176, 64180, 64184, + 64188, 64192, 64196, 64200, 64204, 64208, 64212, 64216, 64220, 64224, + 64228, 64232, 64236, 64240, 64244, 64248, 64252, 64256, 64260, 64264, + 64268, 64272, 64276, 64280, 64284, 64288, 64292, 64296, 64300, 64304, + 64308, 64312, 64316, 64320, 64324, 64328, 64332, 64336, 64340, 64344, + 64347, 64351, 64355, 64359, 64363, 64367, 64371, 64375, 64379, 64383, + 64387, 64391, 64395, 64399, 64403, 64407, 64411, 64415, 64419, 64423, + 64427, 64431, 64435, 64439, 64443, 64447, 64451, 64455, 64459, 64463, + 64467, 64471, 64475, 64479, 64483, 64487, 64491, 64495, 64499, 64503, + 64507, 64511, 64515, 64519, 64523, 64527, 64531, 64535, 64539, 64543, + 64547, 64551, 64555, 64559, 64563, 64567, 64571, 64575, 64579, 64583, + 64587, 64591, 64595, 64599, 64603, 64607, 64611, 64615, 64619, 64623, 64627, 64631, 64635, 64639, 64643, 64647, 64651, 64655, 64659, 64663, - 64667, 64671, 64674, 64678, 64682, 64686, 64690, 64694, 64698, 64702, - 64706, 64710, 64714, 64718, 64722, 64726, 64730, 64734, 64738, 64742, - 64746, 64750, 64754, 64758, 64761, 64765, 64769, 64773, 64777, 64781, - 64785, 64789, 64793, 64797, 64801, 64805, 64809, 64813, 64817, 64821, - 64825, 64829, 64833, 64837, 64841, 64845, 64849, 64853, 64857, 64861, - 64865, 64869, 64873, 64877, 64881, 64885, 64889, 64893, 64897, 64901, - 64905, 64909, 64913, 64917, 64921, 64925, 64929, 64933, 64936, 64941, - 64945, 64951, 64956, 64962, 64966, 64970, 64974, 64978, 64982, 64986, - 64990, 64994, 64998, 65002, 65006, 65010, 65014, 65018, 65021, 65024, - 65027, 65030, 65033, 65036, 65039, 65042, 65045, 65050, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 65056, 65061, 65066, 65071, - 65076, 65082, 65088, 65093, 65098, 65103, 65108, 65115, 65122, 65129, - 65136, 65143, 65150, 65160, 65170, 65177, 65184, 65190, 65196, 65202, - 65208, 65217, 65226, 65233, 65240, 65251, 65262, 65267, 0, 0, 65272, - 65279, 65286, 65293, 65300, 65307, 65314, 65320, 65326, 65332, 65338, - 65345, 65352, 65357, 65361, 65368, 65375, 65382, 0, 0, 0, 0, 0, 0, 0, 0, - 65386, 65390, 65394, 65397, 65400, 65405, 65410, 65415, 65420, 65425, - 65430, 65435, 65440, 65445, 65450, 65459, 65468, 65473, 65478, 65483, - 65488, 65493, 65498, 65503, 65508, 65513, 65518, 65523, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 65528, 65537, 65546, 65555, 65564, 65573, 65582, 65591, 65600, - 65608, 65615, 65623, 65630, 65638, 65648, 65657, 65667, 65676, 65686, - 65694, 65701, 65709, 65716, 65724, 65729, 65734, 65739, 65747, 65753, - 65759, 65766, 65775, 65783, 65791, 65799, 65806, 65813, 65820, 65827, - 65832, 65837, 65842, 65847, 65852, 65857, 65862, 65867, 65875, 65883, - 65889, 65894, 65899, 65904, 65909, 65914, 65919, 65924, 65929, 65934, - 65942, 65950, 65955, 65960, 65969, 65978, 65985, 65992, 66001, 66010, - 66021, 66032, 66038, 66044, 66052, 66060, 66069, 66078, 66085, 66092, - 66097, 66102, 66113, 66124, 66132, 66140, 66150, 66160, 66171, 66182, - 66191, 66200, 66207, 66214, 66221, 66228, 66237, 66246, 66251, 66256, - 66263, 66270, 66277, 66284, 66295, 66306, 66311, 66316, 66321, 66326, - 66331, 66336, 66341, 66346, 66350, 66355, 66360, 66365, 66370, 66375, - 66381, 66386, 66391, 66398, 66405, 66412, 66419, 66425, 66432, 66439, - 66444, 66449, 66455, 66461, 66467, 66473, 66480, 66487, 66494, 66498, - 66505, 66510, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66515, 66522, - 66529, 66536, 66544, 66551, 66557, 66563, 66570, 66576, 66582, 66588, - 66595, 66602, 66609, 66616, 66623, 66630, 66637, 66644, 66651, 66658, - 66665, 66672, 66679, 66686, 66692, 66699, 66706, 66713, 66720, 66727, - 66734, 66741, 66748, 66755, 66762, 66769, 66776, 66783, 66790, 66797, - 66804, 66811, 66818, 66826, 66834, 66842, 66850, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66858, 66861, 66865, 66869, 66873, - 66877, 66881, 66885, 66889, 66893, 66897, 66901, 66905, 66908, 66912, - 66916, 66919, 66923, 66927, 66931, 66935, 66939, 66943, 66947, 66950, - 66953, 66957, 66961, 66965, 66968, 66971, 66974, 66977, 66980, 66983, - 66987, 66991, 66995, 66999, 67003, 67009, 67014, 67018, 67022, 67026, - 67030, 67035, 67041, 67046, 67052, 67057, 67062, 67066, 67072, 67077, - 67081, 0, 0, 0, 0, 0, 0, 0, 0, 67086, 67090, 67094, 67097, 67101, 67104, - 67108, 67111, 67115, 67119, 67124, 67128, 67133, 67136, 67140, 67144, - 67147, 67151, 67155, 67158, 67162, 67166, 67170, 67174, 67178, 67182, - 67186, 67190, 67194, 67198, 67202, 67206, 67210, 67214, 67218, 67222, - 67226, 67230, 67234, 67237, 67241, 67245, 67249, 67252, 67255, 67258, - 67262, 67266, 67270, 67274, 67278, 67281, 67285, 67291, 67296, 67300, - 67305, 67309, 67314, 67319, 67325, 67330, 67336, 67340, 67345, 67350, - 67354, 67359, 67364, 0, 0, 0, 0, 0, 0, 0, 0, 0, 67368, 67371, 67375, - 67379, 67382, 67385, 67388, 67391, 67394, 67397, 67400, 67403, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 67406, 67413, 67419, 67425, 67431, - 67437, 67443, 67449, 67455, 67461, 67467, 67473, 67480, 67487, 67494, - 67501, 67508, 67515, 67522, 67529, 67536, 67543, 67549, 67556, 67562, - 67569, 67576, 67582, 67588, 67595, 67602, 67609, 67615, 67622, 67629, - 67635, 67642, 67648, 67655, 67662, 67668, 67674, 67681, 67687, 67694, - 67701, 67710, 67717, 67724, 67728, 67733, 67738, 67743, 67748, 67753, - 67757, 67762, 67766, 67771, 67776, 67781, 67786, 67790, 67795, 67799, - 67804, 67808, 67813, 67818, 67823, 67828, 67832, 67837, 67842, 67847, - 67853, 67858, 67864, 67870, 67876, 67883, 67889, 67895, 67901, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 67905, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 67910, 67913, - 67916, 67919, 67922, 67926, 67929, 67932, 67936, 67940, 67944, 67948, - 67952, 67956, 67960, 67964, 67968, 67972, 67976, 67980, 67984, 67988, - 67992, 67996, 68000, 68004, 68008, 68011, 68015, 68019, 68023, 68027, - 68031, 68034, 68038, 68041, 68044, 68048, 68052, 68056, 68060, 68063, - 68068, 68072, 68077, 68082, 68086, 68091, 68095, 68100, 68105, 68110, - 68115, 68120, 68126, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68132, 68137, 68141, - 68146, 68153, 68158, 68163, 68167, 68172, 68177, 68181, 68185, 68190, - 68196, 0, 0, 68202, 68206, 68209, 68212, 68215, 68218, 68221, 68224, - 68227, 68230, 0, 0, 68233, 68238, 68243, 68249, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 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, 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, 68992, 68996, 69000, 69004, 69008, 69012, - 69016, 69020, 69024, 69028, 69032, 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, 0, 0, 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, 0, 0, 0, 0, 0, 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, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 70124, 70129, 70134, 70139, 70144, - 70149, 70157, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 70162, 70169, 70176, - 70183, 70190, 0, 0, 0, 0, 0, 70197, 70204, 70211, 70221, 70227, 70233, - 70239, 70245, 70251, 70257, 70264, 70270, 70276, 70282, 70291, 70300, - 70312, 70324, 70330, 70336, 70342, 70349, 70356, 70363, 70370, 70377, 0, - 70384, 70391, 70398, 70406, 70413, 0, 70420, 0, 70427, 70434, 0, 70441, - 70449, 0, 70456, 70463, 70470, 70477, 70484, 70491, 70498, 70505, 70512, - 70519, 70524, 70531, 70538, 70544, 70550, 70556, 70562, 70568, 70574, - 70580, 70586, 70592, 70598, 70604, 70610, 70616, 70622, 70628, 70634, - 70640, 70646, 70652, 70658, 70664, 70670, 70676, 70682, 70688, 70694, - 70700, 70706, 70712, 70718, 70724, 70730, 70736, 70742, 70748, 70754, - 70760, 70766, 70772, 70778, 70784, 70790, 70796, 70802, 70808, 70814, - 70820, 70826, 70832, 70838, 70844, 70850, 70856, 70862, 70868, 70874, - 70880, 70886, 70892, 70898, 70904, 70910, 70916, 70922, 70928, 70934, - 70940, 70946, 70952, 70958, 70964, 70970, 70976, 70982, 70988, 70994, - 71002, 71010, 71016, 71022, 71028, 71034, 71043, 71052, 71060, 71068, - 71076, 71084, 71092, 71100, 71108, 71116, 71123, 71130, 71140, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 71150, 71156, 71162, 71168, 71174, 71179, 71184, 71190, - 71196, 71202, 71208, 71216, 71222, 71228, 71236, 71244, 71252, 71260, - 71265, 71270, 71275, 71280, 71292, 71304, 71314, 71324, 71335, 71346, - 71357, 71368, 71378, 71388, 71399, 71410, 71421, 71432, 71442, 71452, - 71462, 71477, 71492, 71507, 71514, 71521, 71528, 71535, 71545, 71555, - 71565, 71576, 71586, 71594, 71602, 71610, 71618, 71627, 71635, 71643, - 71651, 71659, 71667, 71676, 71684, 71692, 71700, 71709, 71717, 71724, - 71731, 71738, 71745, 71752, 71759, 71766, 71774, 71782, 71790, 71798, - 71806, 71814, 71822, 71830, 71838, 71846, 71854, 71862, 71870, 71878, - 71886, 71894, 71902, 71910, 71918, 71926, 71934, 71943, 71951, 71959, - 71967, 71976, 71984, 71992, 72000, 72008, 72016, 72024, 72032, 72041, - 72049, 72056, 72063, 72070, 72077, 72085, 72092, 72099, 72106, 72113, - 72120, 72128, 72135, 72143, 72151, 72159, 72167, 72176, 72184, 72192, - 72200, 72209, 72217, 72224, 72231, 72238, 72245, 72253, 72260, 72270, - 72280, 72290, 72299, 72308, 72317, 72326, 72335, 72345, 72356, 72367, - 72377, 72388, 72399, 72409, 72418, 72427, 72435, 72444, 72453, 72461, - 72470, 72479, 72487, 72496, 72505, 72513, 72522, 72531, 72539, 72548, - 72557, 72565, 72574, 72582, 72591, 72599, 72607, 72615, 72623, 72632, - 72640, 72647, 72655, 72662, 72669, 72676, 72685, 72694, 72702, 72711, - 72720, 72728, 72738, 72746, 72754, 72761, 72769, 72777, 72784, 72794, - 72804, 72814, 72824, 72835, 72843, 72851, 72859, 72867, 72876, 72884, - 72892, 72900, 72908, 72917, 72925, 72932, 72939, 72946, 72953, 72960, - 72967, 72975, 72983, 72991, 72999, 73007, 73015, 73023, 73031, 73039, - 73047, 73055, 73063, 73071, 73079, 73087, 73095, 73103, 73111, 73119, - 73127, 73135, 73143, 73151, 73159, 73167, 73175, 73183, 73191, 73198, - 73205, 73212, 73219, 73227, 73234, 73241, 73248, 73255, 73263, 73271, - 73279, 73287, 73296, 73304, 73312, 73322, 73329, 73336, 73343, 73350, - 73358, 73368, 73379, 73387, 73396, 73404, 73413, 73421, 73430, 73438, - 73447, 73455, 73464, 73472, 73480, 73487, 73495, 73504, 73511, 73519, - 73528, 73537, 73546, 73555, 73563, 73572, 73580, 73589, 73597, 73606, - 73614, 73623, 73631, 73639, 73646, 73654, 73661, 73669, 73676, 73685, - 73693, 73702, 73710, 73718, 73726, 73734, 73742, 73751, 73760, 73769, - 73778, 73787, 73795, 73804, 73812, 73821, 73829, 73838, 73846, 73855, - 73863, 73871, 73878, 73886, 73893, 73901, 73908, 73917, 73925, 73934, - 73942, 73950, 73958, 73966, 73974, 73983, 73992, 74001, 74010, 74018, - 74026, 74034, 74042, 74051, 74060, 74068, 74076, 74084, 74092, 74100, - 74108, 74116, 74124, 74132, 74140, 74148, 74153, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 74158, 74168, 74178, 74188, 74198, 74208, 74218, - 74228, 74238, 74247, 74256, 74265, 74275, 74285, 74295, 74306, 74316, - 74326, 74336, 74346, 74356, 74366, 74376, 74386, 74396, 74406, 74416, - 74426, 74436, 74446, 74456, 74467, 74477, 74487, 74497, 74507, 74517, - 74527, 74537, 74547, 74557, 74568, 74578, 74588, 74599, 74609, 74619, - 74629, 74639, 74648, 74657, 74667, 74676, 74685, 74694, 74703, 74712, - 74721, 74730, 74739, 74748, 74757, 74766, 74775, 0, 0, 74784, 74793, - 74803, 74813, 74823, 74834, 74844, 74854, 74865, 74875, 74886, 74895, - 74904, 74914, 74924, 74935, 74945, 74956, 74966, 74977, 74986, 74996, - 75006, 75017, 75027, 75037, 75047, 75056, 75065, 75074, 75083, 75092, - 75101, 75111, 75121, 75131, 75140, 75150, 75160, 75170, 75179, 75188, - 75198, 75207, 75217, 75226, 75235, 75244, 75254, 75264, 75274, 75284, - 75294, 75304, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 75314, 75329, - 75344, 75350, 75356, 75362, 75368, 75374, 75380, 75386, 75392, 75400, - 75404, 75407, 0, 0, 75415, 75418, 75421, 75424, 75427, 75430, 75433, - 75436, 75439, 75442, 75445, 75448, 75451, 75454, 75457, 75460, 75463, - 75470, 75478, 75488, 75495, 75502, 75510, 75518, 75528, 75539, 0, 0, 0, - 0, 0, 0, 75547, 75552, 75557, 75564, 75571, 75577, 75583, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 75588, 75597, 75606, 75615, 75623, 75633, 75641, 75649, - 75658, 75667, 75678, 75689, 75699, 75709, 75719, 75729, 75738, 75747, - 75756, 75765, 75775, 75785, 75789, 75794, 75802, 75810, 75814, 75818, - 75822, 75827, 75832, 75837, 75842, 75845, 75849, 0, 75854, 75857, 75860, - 75864, 75868, 75873, 75877, 75881, 75886, 75891, 75898, 75905, 75908, - 75911, 75914, 75917, 75920, 75924, 75928, 0, 75932, 75937, 75941, 75945, - 0, 0, 0, 0, 75950, 75955, 75962, 75967, 75972, 0, 75977, 75982, 75987, - 75992, 75997, 76002, 76007, 76012, 76017, 76022, 76027, 76032, 76041, - 76050, 76058, 76066, 76075, 76084, 76093, 76102, 76110, 76118, 76126, - 76134, 76139, 76144, 76150, 76156, 76162, 76168, 76176, 76184, 76190, - 76196, 76202, 76208, 76214, 76220, 76226, 76232, 76237, 76242, 76247, - 76252, 76257, 76262, 76267, 76272, 76277, 76282, 76287, 76292, 76298, - 76304, 76310, 76316, 76322, 76328, 76334, 76340, 76346, 76352, 76358, - 76364, 76370, 76376, 76382, 76388, 76394, 76400, 76406, 76412, 76418, - 76424, 76430, 76436, 76442, 76448, 76454, 76460, 76466, 76472, 76478, - 76484, 76490, 76496, 76502, 76508, 76514, 76520, 76526, 76532, 76538, - 76544, 76550, 76556, 76562, 76568, 76574, 76580, 76586, 76592, 76598, - 76604, 76609, 76614, 76619, 76624, 76629, 76634, 76639, 76644, 76650, - 76656, 76662, 76668, 76674, 76680, 76686, 76692, 76698, 76704, 76710, - 76716, 76721, 76726, 76731, 76736, 76747, 76758, 76768, 76778, 76789, - 76800, 76807, 0, 0, 76814, 0, 76822, 76826, 76830, 76833, 76837, 76841, - 76844, 76847, 76851, 76855, 76858, 76861, 76864, 76867, 76872, 76875, - 76879, 76882, 76885, 76888, 76891, 76894, 76897, 76900, 76903, 76906, - 76909, 76912, 76916, 76920, 76924, 76928, 76933, 76938, 76944, 76950, - 76956, 76961, 76967, 76972, 76977, 76982, 76988, 76994, 76999, 77004, - 77009, 77014, 77020, 77026, 77031, 77036, 77042, 77047, 77052, 77058, - 77064, 77070, 77076, 77080, 77085, 77089, 77094, 77098, 77103, 77108, - 77114, 77120, 77126, 77131, 77137, 77142, 77147, 77152, 77158, 77164, - 77169, 77174, 77179, 77184, 77190, 77196, 77201, 77206, 77212, 77217, - 77222, 77228, 77234, 77240, 77246, 77251, 77255, 77260, 77262, 77267, - 77272, 77278, 77283, 77288, 77292, 77298, 77303, 77308, 77313, 77318, - 77323, 77328, 77333, 77339, 77345, 77351, 77359, 77363, 77367, 77371, - 77375, 77379, 77383, 77388, 77393, 77398, 77403, 77408, 77413, 77418, - 77423, 77428, 77433, 77438, 77443, 77448, 77452, 77457, 77462, 77467, - 77472, 77477, 77481, 77486, 77491, 77496, 77501, 77505, 77510, 77515, - 77520, 77525, 77529, 77534, 77539, 77543, 77548, 77553, 77558, 77563, - 77568, 77572, 77579, 77586, 77590, 77595, 77600, 77605, 77610, 77615, - 77620, 77625, 77630, 77635, 77640, 77645, 77650, 77655, 77660, 77665, - 77670, 77675, 77680, 77685, 77690, 77695, 77700, 77705, 77710, 77715, - 77720, 77725, 77730, 77735, 0, 0, 0, 77740, 77744, 77749, 77753, 77758, - 77763, 0, 0, 77767, 77772, 77777, 77781, 77786, 77791, 0, 0, 77796, - 77801, 77805, 77810, 77815, 77820, 0, 0, 77825, 77830, 77835, 0, 0, 0, - 77839, 77843, 77847, 77850, 77853, 77857, 77861, 0, 77865, 77871, 77874, - 77878, 77881, 77885, 77889, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 77893, 77899, - 77905, 77911, 77917, 0, 0, 77921, 77927, 77933, 77939, 77945, 77951, - 77958, 77965, 77972, 77979, 77986, 77993, 0, 78000, 78007, 78014, 78020, - 78027, 78034, 78041, 78048, 78054, 78061, 78068, 78075, 78082, 78089, - 78096, 78103, 78110, 78117, 78123, 78130, 78137, 78144, 78151, 78158, - 78165, 78172, 0, 78179, 78185, 78192, 78199, 78206, 78213, 78220, 78227, - 78234, 78241, 78248, 78255, 78262, 78269, 78275, 78282, 78289, 78296, - 78303, 0, 78310, 78317, 0, 78324, 78331, 78338, 78345, 78352, 78359, - 78366, 78373, 78380, 78387, 78394, 78401, 78408, 78415, 78422, 0, 0, - 78428, 78433, 78438, 78443, 78448, 78453, 78458, 78463, 78468, 78473, - 78478, 78483, 78488, 78493, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 78498, 78505, - 78512, 78519, 78526, 78533, 78540, 78547, 78554, 78561, 78568, 78575, - 78582, 78589, 78596, 78603, 78610, 78617, 78624, 78631, 78639, 78647, - 78654, 78661, 78666, 78674, 78682, 78689, 78696, 78701, 78708, 78713, - 78718, 78725, 78730, 78735, 78740, 78748, 78753, 78758, 78765, 78770, - 78775, 78782, 78789, 78794, 78799, 78804, 78809, 78814, 78819, 78824, - 78829, 78834, 78841, 78846, 78853, 78858, 78863, 78868, 78873, 78878, - 78883, 78888, 78893, 78898, 78903, 78908, 78915, 78922, 78929, 78936, - 78942, 78947, 78954, 78959, 78964, 78973, 78980, 78989, 78996, 79001, - 79006, 79014, 79019, 79024, 79029, 79034, 79039, 79046, 79051, 79056, - 79061, 79066, 79071, 79078, 79085, 79092, 79099, 79106, 79113, 79120, - 79127, 79134, 79141, 79148, 79155, 79162, 79169, 79176, 79183, 79190, - 79197, 79204, 79211, 79218, 79225, 79232, 79239, 79246, 79253, 79260, - 79267, 0, 0, 0, 0, 0, 79274, 79281, 79288, 0, 0, 0, 0, 79292, 79295, - 79298, 79301, 79304, 79307, 79310, 79313, 79316, 79319, 79323, 79327, - 79331, 79335, 79339, 79343, 79347, 79351, 79355, 79360, 79365, 79370, - 79376, 79382, 79388, 79394, 79400, 79406, 79411, 79416, 79421, 79427, - 79433, 79439, 79445, 79451, 79457, 79463, 79469, 79475, 79481, 79487, - 79493, 79499, 79505, 0, 0, 0, 79511, 79518, 79525, 79532, 79539, 79546, - 79555, 79564, 79571, 79578, 79586, 79594, 79602, 79608, 79615, 79624, - 79633, 79642, 79651, 79660, 79669, 79679, 79690, 79700, 79711, 79720, - 79729, 79738, 79748, 79759, 79769, 79780, 79791, 79800, 79808, 79814, - 79820, 79826, 79832, 79840, 79848, 79854, 79861, 79871, 79878, 79885, - 79892, 79899, 79906, 79916, 79923, 79930, 79938, 79946, 79955, 79964, - 79973, 79982, 79991, 79999, 80008, 80017, 80026, 80030, 80037, 80042, - 80047, 80051, 80055, 80059, 80063, 80068, 80073, 80079, 80085, 80089, - 80095, 80099, 80103, 80107, 80111, 80115, 80119, 80125, 0, 0, 0, 0, 0, - 80129, 80134, 80139, 80144, 80149, 80156, 80161, 80166, 80171, 80176, - 80181, 80186, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 80191, 80198, 80207, 80216, 80223, 80230, 80237, - 80244, 80251, 80258, 80264, 80271, 80278, 80285, 80292, 80299, 80306, - 80313, 80320, 80329, 80336, 80343, 80350, 80357, 80364, 80371, 80378, - 80385, 80394, 80401, 80408, 80415, 80422, 80429, 80436, 80445, 80452, - 80459, 80466, 80473, 80482, 80489, 80496, 80503, 80511, 80520, 0, 0, - 80529, 80533, 80537, 80542, 80547, 80551, 80556, 80560, 80565, 80570, - 80575, 80580, 80585, 80590, 80594, 80598, 80602, 80607, 80612, 80616, - 80621, 80626, 80630, 80634, 80639, 80644, 80649, 80654, 80658, 0, 0, 0, - 80663, 80667, 80672, 80677, 80681, 80686, 80690, 80695, 80700, 80705, - 80710, 80714, 80718, 80723, 80728, 80733, 80738, 80742, 80747, 80751, - 80756, 80761, 80765, 80770, 80775, 80780, 80784, 80788, 80793, 80798, - 80803, 80808, 80813, 80817, 80822, 80827, 80832, 80837, 80842, 80847, - 80852, 80857, 80862, 80867, 80872, 80877, 80882, 80887, 80892, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 80897, 80901, - 80906, 80911, 80916, 80920, 80925, 80930, 80935, 80940, 80944, 80948, - 80953, 80958, 80963, 80968, 80972, 80977, 80982, 80987, 80992, 80997, - 81002, 81006, 81011, 81016, 81021, 81026, 81031, 81036, 81041, 0, 81046, - 81050, 81054, 81059, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 81064, 81069, - 81074, 81079, 81084, 81089, 81094, 81099, 81104, 81109, 81114, 81119, - 81124, 81129, 81134, 81139, 81144, 81149, 81154, 81159, 81164, 81169, - 81174, 81179, 81184, 81189, 81194, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 81201, 81206, 81211, - 81216, 81221, 81226, 81231, 81236, 81241, 81246, 81251, 81256, 81261, - 81266, 81271, 81276, 81281, 81286, 81291, 81296, 81301, 81306, 81311, - 81316, 81321, 81326, 81331, 81335, 81339, 81343, 0, 81348, 81354, 81359, - 81364, 81369, 81374, 81380, 81386, 81392, 81398, 81404, 81410, 81416, - 81422, 81428, 81434, 81440, 81446, 81452, 81457, 81463, 81469, 81475, - 81481, 81486, 81492, 81498, 81503, 81509, 81515, 81520, 81526, 81532, - 81538, 81544, 81550, 81556, 0, 0, 0, 0, 81561, 81567, 81573, 81579, - 81585, 81591, 81597, 81603, 81609, 81616, 81621, 81626, 81632, 81638, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 81644, 81649, 81654, - 81659, 81665, 81670, 81676, 81682, 81688, 81694, 81701, 81707, 81714, - 81719, 81724, 81729, 81734, 81738, 81743, 81748, 81753, 81758, 81763, - 81768, 81773, 81778, 81783, 81788, 81793, 81798, 81803, 81808, 81813, - 81818, 81823, 81828, 81833, 81838, 81843, 81848, 81853, 81858, 81863, - 81868, 81874, 81879, 81885, 81891, 81897, 81903, 81910, 81916, 81923, - 81928, 81933, 81938, 81943, 81947, 81952, 81957, 81962, 81967, 81972, - 81977, 81982, 81987, 81992, 81997, 82002, 82007, 82012, 82017, 82022, - 82027, 82032, 82037, 82042, 82047, 82052, 82057, 82062, 82067, 82072, - 82077, 82082, 82087, 82092, 82097, 82102, 82107, 82112, 82117, 82122, - 82127, 82132, 82137, 82142, 82147, 82152, 82157, 82162, 82167, 82172, - 82177, 82182, 82187, 82192, 82197, 82202, 82207, 82212, 82217, 82222, - 82227, 82232, 82237, 82242, 82247, 82252, 82257, 82262, 82267, 82272, - 82277, 82282, 82287, 82292, 82297, 82302, 82307, 82312, 82317, 82322, - 82327, 82332, 82337, 82341, 82346, 82351, 82356, 82361, 82366, 82371, - 82376, 82381, 82386, 82391, 82396, 82401, 82405, 82409, 82413, 82417, - 82421, 82425, 82429, 82434, 82439, 0, 0, 82444, 82449, 82453, 82457, - 82461, 82465, 82469, 82473, 82477, 82481, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 82485, 82488, 82491, 82494, 82497, 82500, 0, 0, 82504, 0, - 82508, 82511, 82515, 82519, 82523, 82527, 82531, 82535, 82539, 82543, - 82547, 82550, 82554, 82558, 82562, 82566, 82570, 82574, 82578, 82582, - 82586, 82589, 82593, 82597, 82601, 82605, 82608, 82612, 82616, 82620, - 82624, 82628, 82632, 82636, 82640, 82644, 82648, 82652, 82656, 82659, - 82663, 82667, 82671, 82675, 0, 82679, 82683, 0, 0, 0, 82687, 0, 0, 82691, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82695, 82700, 82705, - 82710, 82715, 82720, 82725, 82730, 82735, 82740, 82745, 82750, 82755, - 82760, 82765, 82770, 82775, 82780, 82785, 82790, 82795, 82800, 82805, - 82809, 82814, 82819, 0, 0, 0, 0, 0, 82825, 82831, 82835, 82840, 82844, - 82849, 82853, 82857, 82861, 82866, 82871, 82875, 82879, 82883, 82887, - 82891, 82896, 82901, 82905, 82910, 82915, 82919, 82924, 82929, 82934, - 82939, 82944, 0, 0, 0, 0, 0, 82949, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 82954, 82957, 82961, 82965, 0, 82970, 82974, 0, 0, 0, 0, 0, - 82978, 82983, 82989, 82993, 82997, 83000, 83004, 83008, 0, 83012, 83016, - 83020, 0, 83024, 83028, 83032, 83036, 83040, 83044, 83048, 83052, 83056, - 83060, 83064, 83068, 83071, 83075, 83079, 83083, 83086, 83089, 83092, - 83096, 83100, 83104, 83108, 83112, 83116, 83119, 83123, 0, 0, 0, 0, - 83127, 83132, 83136, 0, 0, 0, 0, 83140, 83143, 83146, 83149, 83152, - 83155, 83159, 83163, 83168, 0, 0, 0, 0, 0, 0, 0, 0, 83173, 83178, 83184, - 83189, 83195, 83200, 83205, 83210, 83216, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 83221, 83224, 83229, 83235, 83243, 83248, 83254, 83262, - 83268, 83274, 83278, 83282, 83289, 83298, 83305, 83314, 83320, 83329, - 83336, 83343, 83350, 83360, 83366, 83370, 83377, 83386, 83396, 83403, - 83410, 83414, 83418, 83425, 83435, 83439, 83446, 83453, 83460, 83466, - 83473, 83480, 83487, 83494, 83498, 83502, 83506, 83513, 83517, 83524, - 83531, 83545, 83554, 83558, 83562, 83566, 83573, 83577, 83581, 83585, - 83593, 83601, 83620, 83630, 83650, 83654, 83658, 83662, 83666, 83670, - 83674, 83678, 83685, 83689, 83692, 83696, 83700, 83706, 83713, 83722, - 83726, 83735, 83744, 83752, 83756, 83763, 83767, 83771, 83775, 83779, - 83790, 83799, 83808, 83817, 83826, 83838, 83847, 83856, 83865, 83873, - 83882, 83894, 83903, 83912, 83921, 83933, 83942, 83951, 83963, 83972, - 83981, 83993, 84002, 84006, 84010, 84014, 84018, 84022, 84026, 84030, - 84037, 84041, 84045, 84056, 84060, 84064, 84071, 84077, 84083, 84087, - 84094, 84098, 84102, 84106, 84110, 84114, 84118, 84124, 84132, 84136, - 84140, 84143, 84149, 84159, 84163, 84175, 84182, 84189, 84196, 84203, - 84209, 84213, 84217, 84221, 84225, 84232, 84241, 84248, 84256, 84264, - 84270, 84274, 84278, 84282, 84286, 84292, 84301, 84313, 84320, 84327, - 84336, 84347, 84353, 84362, 84371, 84378, 84387, 84394, 84401, 84411, - 84418, 84425, 84432, 84439, 84443, 84449, 84453, 84464, 84472, 84481, - 84493, 84500, 84507, 84517, 84524, 84533, 84540, 84549, 84556, 84563, - 84573, 84580, 84587, 84597, 84604, 84616, 84625, 84632, 84639, 84646, - 84655, 84665, 84678, 84685, 84695, 84705, 84712, 84721, 84734, 84741, - 84748, 84755, 84765, 84775, 84782, 84792, 84799, 84806, 84816, 84822, - 84829, 84836, 84843, 84853, 84860, 84867, 84874, 84880, 84887, 84897, - 84904, 84908, 84916, 84920, 84932, 84936, 84950, 84954, 84958, 84962, - 84966, 84972, 84979, 84987, 84991, 84995, 84999, 85003, 85010, 85014, - 85020, 85026, 85034, 85038, 85045, 85053, 85057, 85061, 85067, 85071, - 85080, 85089, 85096, 85106, 85112, 85116, 85120, 85128, 85135, 85142, - 85148, 85152, 85160, 85164, 85171, 85183, 85190, 85200, 85206, 85210, - 85219, 85226, 85235, 85239, 85243, 85250, 85254, 85258, 85262, 85266, - 85269, 85275, 85281, 85285, 85289, 85296, 85303, 85310, 85317, 85324, - 85331, 85338, 85345, 85351, 85355, 85359, 85366, 85373, 85380, 85387, - 85394, 85398, 85401, 85406, 85410, 85414, 85423, 85432, 85436, 85440, - 85446, 85452, 85469, 85475, 85479, 85488, 85492, 85496, 85503, 85511, - 85519, 85525, 85529, 85533, 85537, 85541, 85544, 85549, 85555, 85564, - 85570, 85576, 85582, 85587, 85593, 85599, 85605, 85611, 85617, 85625, - 85631, 85642, 85648, 85654, 85663, 85673, 85679, 85685, 85691, 85697, - 85703, 85709, 85715, 85721, 85727, 85733, 85742, 85751, 85760, 85766, - 85775, 85781, 85787, 85793, 85799, 85805, 85811, 85817, 85823, 85829, - 85835, 85841, 85847, 85853, 85858, 85864, 85870, 85878, 85884, 85890, - 85894, 85902, 85906, 85910, 85914, 85918, 85922, 85929, 85933, 85942, - 85946, 85953, 85961, 85965, 85969, 85973, 85984, 85998, 86002, 86006, - 86013, 86019, 86026, 86030, 86034, 86038, 86042, 86046, 86053, 86057, - 86075, 86079, 86083, 86090, 86094, 86098, 86104, 86108, 86112, 86120, - 86124, 86128, 86132, 86136, 86141, 86151, 86159, 86167, 86173, 86179, - 86189, 86195, 86201, 86207, 86213, 86219, 86225, 86231, 86240, 86245, - 86251, 86260, 86268, 86274, 86282, 86291, 86297, 86303, 86309, 86315, - 86326, 86332, 86338, 86344, 86350, 86356, 86365, 86371, 86377, 86386, - 86398, 86409, 86415, 86424, 86430, 86436, 86442, 86456, 86461, 86468, - 86477, 86486, 86492, 86498, 86503, 86507, 86514, 86524, 86530, 86543, - 86547, 86551, 86558, 86562, 86568, 86577, 86581, 86585, 86589, 86593, - 86597, 86604, 86608, 86615, 86622, 86629, 86638, 86647, 86657, 86664, - 86671, 86678, 86688, 86695, 86705, 86712, 86722, 86729, 86736, 86746, - 86756, 86763, 86769, 86777, 86785, 86791, 86797, 86801, 86805, 86812, - 86820, 86826, 86830, 86834, 86838, 86845, 86857, 86860, 86867, 86873, - 86877, 86881, 86885, 86889, 86893, 86897, 86901, 86905, 86909, 86913, - 86920, 86924, 86930, 86934, 86938, 86942, 86948, 86955, 86962, 86969, - 86981, 86989, 86993, 86999, 87008, 87015, 87021, 87025, 87029, 87033, - 87039, 87048, 87056, 87060, 87066, 87070, 87074, 87078, 87084, 87091, - 87097, 87101, 87107, 87111, 87115, 87124, 87136, 87140, 87147, 87154, - 87164, 87171, 87183, 87190, 87197, 87204, 87215, 87225, 87238, 87248, - 87255, 87259, 87263, 87267, 87271, 87280, 87289, 87298, 87315, 87324, - 87330, 87337, 87345, 87358, 87362, 87371, 87380, 87389, 87398, 87409, - 87418, 87427, 87436, 87445, 87454, 87463, 87473, 87476, 87480, 87484, - 87488, 87492, 87496, 87502, 87509, 87516, 87523, 87529, 87535, 87542, - 87548, 87555, 87563, 87567, 87574, 87581, 87588, 87596, 87599, 87603, - 87607, 87611, 87615, 87621, 87625, 87631, 87638, 87645, 87651, 87658, - 87665, 87672, 87679, 87686, 87693, 87700, 87707, 87714, 87721, 87728, - 87735, 87742, 87749, 87755, 87759, 87767, 87771, 87775, 87779, 87783, - 87789, 87796, 87803, 87810, 87817, 87824, 87830, 87838, 87842, 87846, - 87850, 87854, 87860, 87877, 87894, 87898, 87902, 87906, 87910, 87914, - 87918, 87924, 87931, 87935, 87941, 87948, 87955, 87962, 87969, 87976, - 87985, 87992, 87999, 88006, 88013, 88017, 88021, 88027, 88039, 88043, - 88047, 88056, 88060, 88064, 88068, 88074, 88078, 88082, 88091, 88095, - 88099, 88103, 88110, 88114, 88118, 88122, 88126, 88130, 88134, 88138, - 88142, 88148, 88155, 88162, 88168, 88172, 88189, 88195, 88199, 88205, - 88211, 88217, 88223, 88229, 88235, 88239, 88243, 88247, 88253, 88257, - 88263, 88267, 88271, 88278, 88285, 88302, 88306, 88310, 88314, 88318, - 88322, 88334, 88337, 88342, 88347, 88362, 88372, 88383, 88387, 88391, - 88395, 88401, 88408, 88415, 88425, 88437, 88443, 88449, 88458, 88462, - 88466, 88473, 88483, 88490, 88496, 88500, 88504, 88511, 88517, 88521, - 88527, 88531, 88539, 88545, 88549, 88557, 88566, 88573, 88579, 88586, - 88593, 88603, 88613, 88617, 88621, 88625, 88629, 88635, 88642, 88648, - 88655, 88662, 88669, 88678, 88685, 88692, 88698, 88705, 88712, 88719, - 88726, 88733, 88740, 88746, 88753, 88760, 88767, 88776, 88783, 88790, - 88794, 88800, 88804, 88810, 88817, 88824, 88831, 88835, 88839, 88843, - 88847, 88851, 88858, 88862, 88866, 88872, 88881, 88885, 88889, 88893, - 88897, 88904, 88908, 88912, 88920, 88924, 88928, 88932, 88936, 88942, - 88946, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 88950, 88956, - 88962, 88969, 88976, 88983, 88990, 88997, 89004, 89010, 89017, 89024, - 89031, 89038, 89045, 89052, 89058, 89064, 89070, 89076, 89082, 89088, - 89094, 89100, 89106, 89113, 89120, 89127, 89134, 89141, 89148, 89154, - 89160, 89166, 89173, 89180, 89186, 89192, 89201, 89208, 89215, 89222, - 89229, 89236, 89243, 89249, 89255, 89261, 89270, 89277, 89284, 89295, - 89306, 89312, 89318, 89324, 89333, 89340, 89347, 89356, 89365, 89375, - 89385, 89396, 89408, 89418, 89428, 89439, 89451, 89461, 89471, 89481, - 89491, 89501, 89512, 89520, 89528, 89537, 89546, 89555, 89561, 89567, - 89573, 89580, 89590, 89597, 89607, 89612, 89617, 89623, 89629, 89637, - 89645, 89654, 89664, 89674, 89682, 89690, 89699, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 89708, 89719, 89726, 89734, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 89742, 89747, 89752, 89757, 89764, 89771, 89778, 89785, 89790, - 89795, 89800, 89805, 89812, 89817, 89824, 89831, 89836, 89841, 89846, - 89853, 89858, 89863, 89870, 89877, 89882, 89887, 89892, 89899, 89906, - 89913, 89918, 89923, 89930, 89937, 89944, 89951, 89956, 89961, 89966, - 89973, 89978, 89983, 89988, 89995, 90004, 90011, 90016, 90021, 90026, - 90031, 90036, 90041, 90050, 90057, 90062, 90069, 90076, 90081, 90086, - 90091, 90098, 90103, 90110, 90117, 90122, 90127, 90132, 90139, 90146, - 90151, 90156, 90163, 90170, 90177, 90182, 90187, 90192, 90197, 90204, - 90213, 90222, 90227, 90234, 90243, 90248, 90253, 90258, 90263, 90270, - 90277, 90284, 90291, 90296, 90301, 90306, 90313, 90320, 90327, 90332, - 90337, 90344, 90349, 90356, 90361, 90368, 90373, 90380, 90387, 90392, - 90397, 90402, 90407, 90412, 90417, 90422, 90427, 90432, 90439, 90446, - 90453, 90460, 90467, 90476, 90481, 90486, 90493, 90500, 90505, 90512, - 90519, 90526, 90533, 90540, 90547, 90552, 90557, 90562, 90567, 90572, - 90581, 90590, 90599, 90608, 90617, 90626, 90635, 90644, 90649, 90660, - 90671, 90680, 90685, 90690, 90695, 90700, 90709, 90716, 90723, 90730, - 90737, 90744, 90751, 90760, 90769, 90780, 90789, 90800, 90809, 90816, - 90825, 90836, 90845, 90854, 90863, 90872, 90879, 90886, 90893, 90902, - 90911, 90922, 90931, 90940, 90951, 90956, 90961, 90972, 90980, 90989, - 90998, 91007, 91018, 91027, 91036, 91047, 91058, 91069, 91080, 91091, - 91102, 91109, 91116, 91123, 91130, 91141, 91150, 91157, 91164, 91171, - 91182, 91193, 91204, 91215, 91226, 91237, 91248, 91259, 91266, 91273, - 91282, 91291, 91298, 91305, 91312, 91321, 91330, 91339, 91346, 91355, - 91364, 91373, 91380, 91387, 91392, 91398, 91405, 91412, 91419, 91426, - 91433, 91440, 91449, 91458, 91467, 91476, 91483, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 91492, 91498, 91503, 91508, 91515, 91521, 91527, 91533, 91539, - 91545, 91551, 91557, 91561, 91565, 91571, 91577, 91583, 91587, 91592, - 91597, 91601, 91605, 91608, 91614, 91620, 91626, 91632, 91638, 91644, - 91650, 91656, 91662, 91672, 91682, 91688, 91694, 91704, 91714, 91720, 0, - 0, 91726, 91734, 91739, 91744, 91750, 91756, 91762, 91768, 91774, 91780, - 91787, 91794, 91800, 91806, 91812, 91818, 91824, 91830, 91836, 91842, - 91847, 91853, 91859, 91865, 91871, 91877, 91886, 91892, 91897, 91905, - 91912, 91919, 91928, 91937, 91946, 91955, 91964, 91973, 91982, 91991, - 92001, 92011, 92019, 92027, 92036, 92045, 92051, 92057, 92063, 92069, - 92077, 92085, 92089, 92095, 92100, 92106, 92112, 92118, 92124, 92130, - 92139, 92144, 92151, 92156, 92161, 92166, 92172, 92178, 92184, 92191, - 92196, 92201, 92206, 92211, 92216, 92222, 92228, 92234, 92240, 92246, - 92252, 92258, 92264, 92269, 92274, 92279, 92284, 92289, 92294, 92299, - 92304, 92310, 92316, 92321, 92326, 92331, 92336, 92341, 92347, 92354, - 92358, 92362, 92366, 92370, 92374, 92378, 92382, 92386, 92394, 92404, - 92408, 92412, 92418, 92424, 92430, 92436, 92442, 92448, 92454, 92460, - 92466, 92472, 92478, 92484, 92490, 92496, 92500, 92504, 92511, 92517, - 92523, 92529, 92534, 92541, 92546, 92552, 92558, 92564, 92570, 92575, - 92579, 92585, 92589, 92593, 92597, 92603, 92609, 92613, 92619, 92625, - 92631, 92637, 92643, 92651, 92659, 92665, 92671, 92677, 92683, 92695, - 92707, 92721, 92733, 92745, 92759, 92773, 92787, 92791, 92799, 92807, - 92812, 92816, 92820, 92824, 92828, 92832, 92836, 92840, 92846, 92852, - 92858, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 92864, 92870, 92876, 92882, 92888, - 92894, 92900, 92906, 92912, 92918, 92924, 92930, 92936, 92942, 92948, - 92954, 92960, 92966, 92972, 92978, 92984, 92990, 92996, 93002, 93008, - 93014, 93020, 93026, 93032, 93038, 93044, 93050, 93056, 93062, 93068, - 93074, 93080, 93086, 93092, 93098, 93104, 93110, 93116, 93122, 93128, - 93134, 93140, 93146, 93152, 93158, 93164, 93170, 93176, 93182, 93188, - 93194, 93200, 93206, 93212, 93218, 93224, 93230, 93236, 93242, 93248, - 93254, 93260, 93265, 93270, 93275, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 93279, - 93284, 93291, 93298, 93305, 93312, 93317, 93321, 93327, 93331, 93335, - 93341, 93345, 93349, 93353, 93359, 93366, 93370, 93374, 93378, 93382, - 93386, 93390, 93396, 93400, 93404, 93408, 93412, 93416, 93420, 93424, - 93428, 93432, 93436, 93440, 93444, 93449, 93453, 93457, 93461, 93465, - 93469, 93473, 93477, 93481, 93485, 93492, 93496, 93503, 93507, 93511, - 93515, 93519, 93523, 93527, 93531, 93538, 93542, 93546, 93550, 93554, - 93558, 93564, 93568, 93574, 93578, 93582, 93586, 93590, 93594, 93598, - 93602, 93606, 93610, 93614, 93618, 93622, 93626, 93630, 93634, 93638, - 93642, 93646, 93650, 93658, 93662, 93666, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 93670, 93678, 93686, 93694, 93702, 93710, 93718, 93726, 93734, 93742, - 93750, 93758, 93766, 93774, 93782, 93790, 93798, 93806, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 93814, 93818, 93823, 93828, 93833, 93837, 93842, - 93846, 93850, 93854, 93859, 93864, 93868, 93872, 93876, 93880, 93885, - 93890, 93894, 93898, 93903, 93907, 93911, 93916, 93921, 93926, 93931, - 93935, 93940, 93945, 93950, 93954, 93959, 93963, 93967, 93971, 93976, - 93981, 93985, 93989, 93993, 93997, 94002, 94007, 94011, 94015, 94020, - 94024, 94028, 94033, 94038, 94043, 94048, 94052, 94057, 94062, 94067, - 94071, 94076, 94080, 94084, 94088, 94093, 94098, 94102, 94106, 94110, - 94114, 94119, 94124, 94128, 94132, 94137, 94141, 94145, 94150, 94155, - 94160, 94165, 94169, 94174, 94179, 94184, 94188, 94193, 0, 94197, 94201, - 94206, 94211, 94215, 94219, 94223, 94227, 94232, 94237, 94241, 94245, - 94250, 94254, 94258, 94263, 94268, 94273, 94278, 94283, 94289, 94295, - 94301, 94306, 94312, 94317, 94322, 94327, 94333, 94339, 94344, 94349, - 94354, 94359, 94365, 94371, 94376, 94381, 94387, 94392, 94397, 94403, - 94409, 94415, 94421, 94426, 94432, 94438, 94444, 94449, 94455, 94460, - 94465, 94470, 94476, 94482, 94487, 94492, 94497, 94502, 94508, 94514, - 94519, 94524, 94530, 94535, 94540, 94546, 94552, 94558, 94564, 0, 94568, - 94573, 0, 0, 94578, 0, 0, 94582, 94587, 0, 0, 94592, 94596, 94600, 94605, - 0, 94610, 94614, 94619, 94623, 94627, 94632, 94637, 94642, 94647, 94651, - 94656, 94661, 0, 94666, 0, 94671, 94675, 94679, 94684, 94689, 94693, - 94697, 0, 94701, 94706, 94711, 94715, 94719, 94724, 94728, 94732, 94737, - 94742, 94747, 94752, 94757, 94763, 94769, 94775, 94780, 94786, 94791, - 94796, 94801, 94807, 94813, 94818, 94823, 94828, 94833, 94839, 94845, - 94850, 94855, 94861, 94866, 94871, 94877, 94883, 94889, 94895, 94900, - 94906, 94912, 94918, 94923, 94929, 94934, 94939, 94944, 94950, 94956, - 94961, 94966, 94971, 94976, 94982, 94988, 94993, 94998, 95004, 95009, - 95014, 95020, 95026, 95032, 95038, 95042, 0, 95047, 95052, 95056, 95061, - 0, 0, 95065, 95070, 95075, 95079, 95083, 95087, 95091, 95096, 0, 95101, - 95105, 95110, 95114, 95118, 95123, 95128, 0, 95133, 95137, 95142, 95147, - 95152, 95156, 95161, 95165, 95169, 95173, 95178, 95183, 95187, 95191, - 95195, 95199, 95204, 95209, 95213, 95217, 95222, 95226, 95230, 95235, - 95240, 95245, 95250, 95254, 0, 95259, 95264, 95268, 95273, 0, 95277, - 95281, 95286, 95291, 95295, 0, 95299, 0, 0, 0, 95303, 95307, 95312, - 95316, 95320, 95325, 95330, 0, 95335, 95339, 95344, 95349, 95354, 95358, - 95363, 95367, 95371, 95375, 95380, 95385, 95389, 95393, 95397, 95401, - 95406, 95411, 95415, 95419, 95424, 95428, 95432, 95437, 95442, 95447, - 95452, 95457, 95463, 95469, 95475, 95480, 95486, 95491, 95496, 95501, - 95507, 95513, 95518, 95523, 95528, 95533, 95539, 95545, 95550, 95555, - 95561, 95566, 95571, 95577, 95583, 95589, 95595, 95600, 95606, 95612, - 95618, 95623, 95629, 95634, 95639, 95644, 95650, 95656, 95661, 95666, - 95671, 95676, 95682, 95688, 95693, 95698, 95704, 95709, 95714, 95720, - 95726, 95732, 95738, 95742, 95747, 95752, 95757, 95761, 95766, 95770, - 95774, 95778, 95783, 95788, 95792, 95796, 95800, 95804, 95809, 95814, - 95818, 95822, 95827, 95831, 95835, 95840, 95845, 95850, 95855, 95859, - 95864, 95869, 95874, 95878, 95883, 95887, 95891, 95895, 95900, 95905, - 95909, 95913, 95917, 95921, 95926, 95931, 95935, 95939, 95944, 95948, - 95952, 95957, 95962, 95967, 95972, 95977, 95983, 95989, 95995, 96000, - 96006, 96011, 96016, 96021, 96027, 96033, 96038, 96043, 96048, 96053, - 96059, 96065, 96070, 96075, 96081, 96086, 96091, 96097, 96103, 96109, - 96115, 96120, 96126, 96132, 96138, 96143, 96149, 96154, 96159, 96164, - 96170, 96176, 96181, 96186, 96191, 96196, 96202, 96208, 96213, 96218, - 96224, 96229, 96234, 96240, 96246, 96252, 96258, 96263, 96269, 96275, - 96281, 96286, 96292, 96297, 96302, 96307, 96313, 96319, 96324, 96329, - 96334, 96339, 96345, 96351, 96356, 96361, 96367, 96372, 96377, 96383, - 96389, 96395, 96401, 96406, 96412, 96418, 96424, 96429, 96435, 96440, - 96445, 96450, 96456, 96462, 96467, 96472, 96477, 96482, 96488, 96494, - 96499, 96504, 96510, 96515, 96520, 96526, 96532, 96538, 96544, 96550, - 96557, 96564, 96571, 96577, 96584, 96590, 96596, 96602, 96609, 96616, - 96622, 96628, 96634, 96640, 96647, 96654, 96660, 96666, 96673, 96679, - 96685, 96692, 96699, 96706, 96713, 96719, 96726, 96733, 96740, 96746, - 96753, 96759, 96765, 96771, 96778, 96785, 96791, 96797, 96803, 96809, - 96816, 96823, 96829, 96835, 96842, 96848, 96854, 96861, 96868, 96875, - 96882, 96886, 96891, 96896, 96901, 96905, 96910, 96914, 96918, 96922, - 96927, 96932, 96936, 96940, 96944, 96948, 96953, 96958, 96962, 96966, - 96971, 96975, 96979, 96984, 96989, 96994, 96999, 97003, 97008, 97013, - 97018, 97022, 97027, 97031, 97035, 97039, 97044, 97049, 97053, 97057, - 97061, 97065, 97070, 97075, 97079, 97083, 97088, 97092, 97096, 97101, - 97106, 97111, 97116, 97122, 0, 0, 97129, 97134, 97139, 97144, 97149, - 97154, 97159, 97164, 97169, 97174, 97179, 97184, 97189, 97194, 97199, - 97204, 97209, 97214, 97220, 97225, 97230, 97235, 97240, 97245, 97250, - 97255, 97259, 97264, 97269, 97274, 97279, 97284, 97289, 97294, 97299, - 97304, 97309, 97314, 97319, 97324, 97329, 97334, 97339, 97344, 97350, - 97355, 97360, 97365, 97370, 97375, 97380, 97385, 97391, 97396, 97401, - 97406, 97411, 97416, 97421, 97426, 97431, 97436, 97441, 97446, 97451, - 97456, 97461, 97466, 97471, 97476, 97481, 97486, 97491, 97496, 97501, - 97506, 97512, 97517, 97522, 97527, 97532, 97537, 97542, 97547, 97551, - 97556, 97561, 97566, 97571, 97576, 97581, 97586, 97591, 97596, 97601, - 97606, 97611, 97616, 97621, 97626, 97631, 97636, 97642, 97647, 97652, - 97657, 97662, 97667, 97672, 97677, 97683, 97688, 97693, 97698, 97703, - 97708, 97713, 97719, 97725, 97731, 97737, 97743, 97749, 97755, 97761, - 97767, 97773, 97779, 97785, 97791, 97797, 97803, 97809, 97815, 97822, - 97828, 97834, 97840, 97846, 97852, 97858, 97864, 97869, 97875, 97881, - 97887, 97893, 97899, 97905, 97911, 97917, 97923, 97929, 97935, 97941, - 97947, 97953, 97959, 97965, 97971, 97978, 97984, 97990, 97996, 98002, - 98008, 98014, 98020, 98027, 98033, 98039, 98045, 98051, 98057, 98063, - 98069, 98075, 98081, 98087, 98093, 98099, 98105, 98111, 98117, 98123, - 98129, 98135, 98141, 98147, 98153, 98159, 98165, 98172, 98178, 98184, - 98190, 98196, 98202, 98208, 98214, 98219, 98225, 98231, 98237, 98243, - 98249, 98255, 98261, 98267, 98273, 98279, 98285, 98291, 98297, 98303, - 98309, 98315, 98321, 98328, 98334, 98340, 98346, 98352, 98358, 98364, - 98370, 98377, 98383, 98389, 98395, 98401, 98407, 98413, 98420, 98427, - 98434, 98441, 98448, 98455, 98462, 98469, 98476, 98483, 98490, 98497, - 98504, 98511, 98518, 98525, 98532, 98540, 98547, 98554, 98561, 98568, - 98575, 98582, 98589, 98595, 98602, 98609, 98616, 98623, 98630, 98637, - 98644, 98651, 98658, 98665, 98672, 98679, 98686, 98693, 98700, 98707, - 98714, 98722, 98729, 98736, 98743, 98750, 98757, 98764, 98771, 98779, - 98786, 98793, 98800, 98807, 98814, 98821, 98826, 0, 0, 98831, 98836, - 98840, 98844, 98848, 98852, 98856, 98860, 98864, 98868, 98872, 98877, - 98881, 98885, 98889, 98893, 98897, 98901, 98905, 98909, 98913, 98918, - 98922, 98926, 98930, 98934, 98938, 98942, 98946, 98950, 98954, 98960, - 98965, 98970, 98975, 98980, 98985, 98990, 98995, 99000, 99005, 99010, - 99014, 99018, 99022, 99026, 99030, 99034, 99038, 99042, 99046, 99053, - 99060, 99067, 99074, 99081, 99088, 99094, 99101, 99108, 99115, 99123, - 99131, 99139, 99147, 99155, 99163, 99170, 99177, 99184, 99192, 99200, - 99208, 99216, 99224, 99232, 99239, 99246, 99253, 99261, 99269, 99277, - 99285, 99293, 99301, 99306, 99311, 99316, 99321, 99326, 99331, 99336, - 99341, 99346, 0, 0, 0, 0, 99351, 99356, 99360, 99364, 99368, 99372, - 99376, 99380, 99384, 99388, 99392, 99396, 99400, 99404, 99408, 99412, - 99416, 99420, 99424, 99428, 99432, 99436, 99440, 99444, 99448, 99452, - 99456, 99460, 99464, 99468, 99472, 99476, 99480, 99484, 99488, 99492, - 99496, 99500, 99504, 99508, 99512, 99516, 99520, 99524, 99528, 99532, - 99536, 99540, 99544, 99548, 99552, 99557, 99561, 99565, 99569, 99573, - 99577, 99581, 99585, 99589, 99593, 99597, 99601, 99605, 99609, 99613, - 99617, 99621, 99625, 99629, 99633, 99637, 99641, 99645, 99649, 99653, - 99657, 99661, 99665, 99669, 99673, 99677, 99681, 99685, 99689, 99693, - 99697, 99701, 99705, 99709, 99713, 99717, 99721, 99725, 99729, 99733, - 99737, 99741, 99745, 99749, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 99753, - 99757, 99761, 99765, 99769, 99773, 99777, 99781, 99785, 99789, 99793, - 99797, 99801, 99805, 99809, 99813, 99817, 99821, 99825, 99829, 99833, - 99837, 99841, 99845, 99849, 99853, 99857, 99861, 99865, 99869, 99873, - 99877, 99881, 99885, 99889, 99893, 99897, 99901, 99905, 99909, 99913, - 99917, 99921, 99925, 99929, 99933, 99937, 99941, 99945, 99949, 99953, - 99957, 99961, 99965, 99969, 99973, 99977, 99981, 99985, 99989, 99993, - 99997, 100001, 100005, 100009, 100013, 100017, 100021, 100025, 100029, - 100033, 100037, 100041, 100045, 100049, 100053, 100057, 100061, 100065, - 100069, 100073, 100077, 100081, 100085, 100089, 100093, 100097, 100101, - 100105, 100109, 100113, 100117, 100121, 100125, 100129, 100133, 100137, - 100141, 100145, 100149, 100153, 100157, 100161, 100165, 100169, 100173, - 100177, 100181, 100185, 100189, 100193, 100197, 100201, 100205, 100209, - 100213, 100217, 100221, 100225, 100229, 100233, 100237, 100241, 100245, - 100249, 100253, 100257, 100261, 100265, 100269, 100273, 100277, 100281, - 100285, 100289, 100293, 100297, 100301, 100305, 100309, 100313, 100317, - 100321, 100325, 100329, 100333, 100337, 100341, 100345, 100349, 100353, - 100357, 100361, 100365, 100369, 100373, 100377, 100381, 100385, 100389, - 100393, 100397, 100401, 100405, 100409, 100413, 100417, 100421, 100425, - 100429, 100433, 100437, 100441, 100445, 100449, 100453, 100457, 100461, - 100465, 100469, 100473, 100477, 100481, 100485, 100489, 100493, 100497, - 100501, 100505, 100509, 100513, 100517, 100521, 100525, 100529, 100533, - 100537, 100541, 100545, 100549, 100553, 100557, 100561, 100565, 100569, - 100573, 100577, 100581, 100585, 100589, 100593, 100597, 100601, 100605, - 100609, 100613, 100617, 100621, 100625, 100629, 100633, 100637, 100641, - 100645, 100649, 100653, 100657, 100661, 100665, 100669, 100673, 100677, - 100681, 100685, 100689, 100693, 100697, 100701, 100705, 100709, 100713, - 100717, 100721, 100725, 100729, 100733, 100737, 100741, 100745, 100749, - 100753, 100757, 100761, 100765, 100769, 100773, 100777, 100781, 100785, - 100789, 100793, 100797, 100801, 100805, 100809, 100813, 100817, 100821, - 100825, 100829, 100833, 100837, 100841, 100845, 100849, 100853, 100857, - 100861, 100865, 100869, 100873, 100877, 100881, 100885, 100889, 100893, - 100897, 100901, 100905, 100909, 100913, 100917, 100921, 100925, 100929, - 100933, 100937, 100941, 100945, 100949, 100953, 100957, 100961, 100965, - 100969, 100973, 100977, 100981, 100985, 100989, 100993, 100997, 101001, - 101005, 101009, 101013, 101017, 101021, 101025, 101029, 101033, 101037, - 101041, 101045, 101049, 101053, 101057, 101061, 101065, 101069, 101073, - 101077, 101081, 101085, 101089, 101093, 101097, 101101, 101105, 101109, - 101113, 101117, 101121, 101125, 101129, 101133, 101137, 101141, 101145, - 101149, 101153, 101157, 101161, 101165, 101169, 101173, 101177, 101181, - 101185, 101189, 101193, 101197, 101201, 101205, 101209, 101213, 101217, - 101221, 101225, 101229, 101233, 101237, 101241, 101245, 101249, 101253, - 101257, 101261, 101265, 101269, 101273, 101277, 101281, 101285, 101289, - 101293, 101297, 101301, 101305, 101309, 101313, 101317, 101321, 101325, - 101329, 101333, 101337, 101341, 101345, 101349, 101353, 101357, 101361, - 101365, 101369, 101373, 101377, 101381, 101385, 101389, 101393, 101397, - 101401, 101405, 101409, 101413, 101417, 101421, 101425, 101429, 101433, - 101437, 101441, 101445, 101449, 101453, 101457, 101461, 101465, 101469, - 101473, 101477, 101481, 101485, 101489, 101493, 101497, 101501, 101505, - 101509, 101513, 101517, 101521, 101525, 101529, 101533, 101537, 101541, - 101545, 101549, 101553, 101557, 101561, 101565, 101569, 101573, 101577, - 101581, 101585, 101589, 101593, 101597, 101601, 101605, 101609, 101613, - 101617, 101621, 101625, 101629, 101633, 101637, 101641, 101645, 101649, - 101653, 101657, 101661, 101665, 101669, 101673, 101677, 101681, 101685, - 101689, 101693, 101697, 101701, 101705, 101709, 101713, 101717, 101721, - 101725, 101729, 101733, 101737, 101741, 101745, 101749, 101753, 101757, - 101761, 101765, 101769, 101773, 101777, 101781, 101785, 101789, 101793, - 101797, 101801, 101805, 101809, 101813, 101817, 101821, 101825, 101829, - 101833, 101837, 101841, 101845, 101849, 101853, 101857, 101861, 101865, - 101869, 101873, 101877, 101881, 101885, 101889, 101893, 101897, 101901, - 101905, 101909, 101913, 101917, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 101921, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 101925, - 101928, 101932, 101936, 101939, 101943, 101947, 101950, 101953, 101957, - 101961, 101964, 101967, 101970, 101973, 101978, 101981, 101985, 101988, - 101991, 101994, 101997, 102000, 102003, 102006, 102009, 102012, 102015, - 102018, 102022, 102026, 102030, 102034, 102039, 102044, 102050, 102056, - 102062, 102067, 102073, 102078, 102083, 102088, 102094, 102100, 102105, - 102110, 102115, 102120, 102126, 102132, 102137, 102142, 102148, 102153, - 102158, 102164, 102170, 102176, 102182, 102186, 102191, 102195, 102200, - 102204, 102209, 102214, 102220, 102226, 102232, 102237, 102243, 102248, - 102253, 102258, 102264, 102270, 102275, 102280, 102285, 102290, 102296, - 102302, 102307, 102312, 102318, 102323, 102328, 102334, 102340, 102346, - 102352, 102357, 102361, 102366, 102368, 102372, 102375, 102378, 102381, - 102384, 102387, 102390, 102393, 102396, 102399, 102402, 102405, 102408, - 102411, 102414, 102417, 102420, 102423, 102426, 102429, 102432, 102435, - 102438, 102441, 102444, 102447, 102450, 102453, 102456, 102459, 102462, - 102465, 102468, 102471, 102474, 102477, 102480, 102483, 102486, 102489, - 102492, 102495, 102498, 102501, 102504, 102507, 102510, 102513, 102516, - 102519, 102522, 102525, 102528, 102531, 102534, 102537, 102540, 102543, - 102546, 102549, 102552, 102555, 102558, 102561, 102564, 102567, 102570, - 102573, 102576, 102579, 102582, 102585, 102588, 102591, 102594, 102597, - 102600, 102603, 102606, 102609, 102612, 102615, 102618, 102621, 102624, - 102627, 102630, 102633, 102636, 102639, 102642, 102645, 102648, 102651, - 102654, 102657, 102660, 102663, 102666, 102669, 102672, 102675, 102678, - 102681, 102684, 102687, 102690, 102693, 102696, 102699, 102702, 102705, - 102708, 102711, 102714, 102717, 102720, 102723, 102726, 102729, 102732, - 102735, 102738, 102741, 102744, 102747, 102750, 102753, 102756, 102759, - 102762, 102765, 102768, 102771, 102774, 102777, 102780, 102783, 102786, - 102789, 102792, 102795, 102798, 102801, 102804, 102807, 102810, 102813, - 102816, 102819, 102822, 102825, 102828, 102831, 102834, 102837, 102840, - 102843, 102846, 102849, 102852, 102855, 102858, 102861, 102864, 102867, - 102870, 102873, 102876, 102879, 102882, 102885, 102888, 102891, 102894, - 102897, 102900, 102903, 102906, 102909, 102912, 102915, 102918, 102921, - 102924, 102927, 102930, 102933, 102936, 102939, 102942, 102945, 102948, - 102951, 102954, 102957, 102960, 102963, 102966, 102969, 102972, 102975, - 102978, 102981, 102984, 102987, 102990, 102993, 102996, 102999, 103002, - 103005, 103008, 103011, 103014, 103017, 103020, 103023, 103026, 103029, - 103032, 103035, 103038, 103041, 103044, 103047, 103050, 103053, 103056, - 103059, 103062, 103065, 103068, 103071, 103074, 103077, 103080, 103083, - 103086, 103089, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 64667, 64671, 64675, 64679, 64683, 64687, 64691, 64695, 64699, 64703, + 64707, 64711, 64715, 64719, 64723, 64727, 64731, 64735, 64739, 64743, + 64747, 64751, 64755, 64759, 64763, 64767, 64771, 64775, 64779, 64783, + 64787, 64791, 64795, 64799, 64803, 64807, 64811, 64815, 64819, 64823, + 64827, 64831, 64835, 64839, 64843, 64847, 64851, 64855, 64859, 64863, + 64867, 64871, 64875, 64879, 64883, 64887, 64891, 64895, 64899, 64903, + 64907, 64911, 64915, 64919, 64923, 64927, 64931, 64935, 64939, 64943, + 64947, 64950, 64954, 64958, 64962, 64966, 64970, 64974, 64978, 64982, + 64986, 64990, 64994, 64998, 65002, 65006, 65010, 65014, 65018, 65022, + 65026, 65030, 65034, 65038, 65042, 65046, 65050, 65054, 65058, 65062, + 65066, 65070, 65074, 65078, 65082, 65086, 65090, 65094, 65098, 65102, + 65106, 65110, 65114, 65118, 65122, 65126, 65130, 65134, 65138, 65142, + 65146, 65150, 65154, 65158, 65162, 65166, 65170, 65174, 65178, 65182, + 65186, 65190, 65194, 65198, 65202, 65206, 65210, 65214, 65218, 65222, + 65226, 65230, 65234, 65238, 65242, 65246, 65250, 65254, 65258, 65262, + 65266, 65270, 65274, 65278, 65282, 65286, 65290, 65294, 65298, 65302, + 65306, 65310, 65314, 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, 65678, 65682, 65686, 65690, 65694, 65698, 65702, + 65706, 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, 66173, 66177, 66181, + 66185, 66189, 66193, 66197, 66201, 66205, 66209, 66213, 66217, 66221, + 66225, 66229, 66233, 66237, 66241, 66245, 66249, 66253, 66257, 66261, + 66265, 66269, 66273, 66277, 66281, 66285, 66289, 66293, 66297, 66301, + 66305, 66309, 66313, 66317, 66321, 66325, 66329, 66333, 66337, 66341, + 66345, 66349, 66353, 66357, 66361, 66365, 66369, 66373, 66377, 66381, + 66385, 66389, 66393, 66397, 66401, 66405, 66409, 66413, 66417, 66421, + 66425, 66429, 66433, 66437, 66441, 66445, 66449, 66453, 66457, 66461, + 66465, 66469, 66473, 66477, 66481, 66485, 66489, 0, 0, 0, 66493, 66497, + 66501, 66505, 66509, 66513, 66517, 66521, 66525, 66529, 66533, 66537, + 66541, 66545, 66549, 66553, 66557, 66561, 66565, 66569, 66573, 66577, + 66581, 66585, 66589, 66593, 66597, 66601, 66605, 66609, 66613, 66617, + 66621, 66625, 66629, 66633, 66637, 66641, 66645, 66649, 66653, 66657, + 66661, 66665, 66669, 66673, 66677, 66681, 66685, 66689, 66693, 66697, + 66701, 66705, 66709, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66713, 66718, 66722, + 66727, 66732, 66737, 66742, 66747, 66751, 66756, 66761, 66766, 66771, + 66776, 66781, 66786, 66790, 66794, 66799, 66804, 66809, 66814, 66819, + 66823, 66828, 66833, 66838, 66843, 66848, 66852, 66857, 66861, 66866, + 66870, 66875, 66879, 66883, 66887, 66892, 66897, 66902, 66910, 66918, + 66926, 66934, 66941, 66949, 66955, 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, 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, 67238, 67242, 67246, 67250, 67254, 67257, + 67261, 67265, 67268, 67272, 67276, 67280, 67283, 67287, 67291, 67295, + 67299, 67303, 67307, 67311, 67315, 67319, 67323, 67327, 67331, 67335, + 67339, 67342, 67346, 67350, 67354, 67358, 67362, 67366, 67370, 67374, + 67378, 67381, 67384, 67388, 67392, 67396, 67399, 67402, 67406, 67410, + 67414, 67418, 67422, 67426, 67430, 67434, 67438, 67442, 67446, 67450, + 67454, 67458, 67462, 67466, 67470, 67474, 67478, 67482, 67486, 67490, + 67494, 67498, 67502, 67506, 67510, 67514, 67518, 67522, 67526, 67530, + 67534, 67538, 67542, 67546, 67550, 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, 67767, + 67771, 67775, 67779, 67783, 67787, 67791, 67795, 67799, 67803, 67807, + 67811, 67815, 67819, 67823, 67827, 67831, 67835, 67839, 67843, 67847, + 67851, 67854, 67858, 67862, 67866, 67870, 67874, 67878, 67882, 67886, + 67890, 67894, 67898, 67902, 67906, 67910, 67914, 67918, 67922, 67926, + 67930, 67934, 67938, 67942, 67946, 67950, 67954, 67958, 67962, 67966, + 67970, 67974, 67978, 67982, 67986, 67990, 67994, 67998, 68002, 68006, + 68010, 68014, 68018, 68022, 68026, 68029, 68034, 68038, 68044, 68049, + 68055, 68059, 68063, 68067, 68071, 68075, 68079, 68083, 68087, 68091, + 68095, 68099, 68103, 68107, 68111, 68114, 68117, 68120, 68123, 68126, + 68129, 68132, 68135, 68138, 68143, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 68149, 68154, 68159, 68164, 68169, 68175, 68181, + 68186, 68191, 68196, 68201, 68208, 68215, 68222, 68229, 68236, 68243, + 68253, 68263, 68270, 68277, 68283, 68289, 68295, 68301, 68310, 68319, + 68326, 68333, 68344, 68355, 68360, 0, 0, 68365, 68372, 68379, 68386, + 68393, 68400, 68407, 68413, 68419, 68425, 68431, 68438, 68445, 68450, + 68454, 68461, 68468, 68475, 0, 0, 0, 0, 0, 0, 0, 0, 68479, 68483, 68487, + 68490, 68493, 68498, 68503, 68508, 68513, 68518, 68523, 68528, 68533, + 68538, 68543, 68552, 68561, 68566, 68571, 68576, 68581, 68586, 68591, + 68596, 68601, 68606, 68611, 68616, 0, 0, 0, 0, 0, 0, 0, 0, 68621, 68624, + 68627, 68630, 68634, 68638, 68642, 68646, 68649, 68653, 68656, 68660, + 68663, 68667, 68671, 68675, 68679, 68683, 68687, 68691, 68694, 68698, + 68702, 68706, 68710, 68714, 68718, 68722, 68726, 68730, 68734, 68738, + 68742, 68746, 68750, 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, 68852, 68856, + 68860, 68864, 68868, 68872, 68876, 68880, 68883, 68887, 68891, 68895, + 68899, 68903, 68907, 68911, 68915, 68919, 68923, 68927, 68931, 68936, + 68941, 68944, 68949, 68952, 68955, 68958, 0, 0, 0, 0, 0, 0, 0, 0, 68962, + 68971, 68980, 68989, 68998, 69007, 69016, 69025, 69034, 69042, 69049, + 69057, 69064, 69072, 69082, 69091, 69101, 69110, 69120, 69128, 69135, + 69143, 69150, 69158, 69163, 69168, 69173, 69182, 69188, 69194, 69201, + 69210, 69218, 69226, 69234, 69241, 69248, 69255, 69262, 69267, 69272, + 69277, 69282, 69287, 69292, 69297, 69302, 69310, 69318, 69324, 69329, + 69334, 69339, 69344, 69349, 69354, 69359, 69364, 69369, 69377, 69385, + 69390, 69395, 69404, 69413, 69420, 69427, 69436, 69445, 69456, 69467, + 69473, 69479, 69487, 69495, 69504, 69513, 69520, 69527, 69532, 69537, + 69548, 69559, 69567, 69575, 69585, 69595, 69606, 69617, 69626, 69635, + 69642, 69649, 69656, 69663, 69672, 69681, 69686, 69691, 69698, 69705, + 69712, 69719, 69730, 69741, 69746, 69751, 69756, 69761, 69766, 69771, + 69776, 69781, 69785, 69790, 69795, 69800, 69805, 69810, 69816, 69821, + 69826, 69833, 69840, 69847, 69854, 69861, 69869, 69877, 69882, 69887, + 69893, 69899, 69905, 69911, 69918, 69925, 69932, 69936, 69943, 69948, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 69953, 69960, 69967, 69974, 69982, + 69989, 69995, 70001, 70008, 70014, 70020, 70026, 70033, 70040, 70047, + 70054, 70061, 70068, 70075, 70082, 70089, 70096, 70103, 70110, 70117, + 70124, 70130, 70137, 70144, 70151, 70158, 70165, 70172, 70179, 70186, + 70193, 70200, 70207, 70214, 70221, 70228, 70235, 70242, 70249, 70256, + 70264, 70272, 70280, 70288, 0, 0, 0, 0, 70296, 70305, 70314, 70323, + 70332, 70341, 70350, 70357, 70364, 70371, 0, 0, 0, 0, 0, 0, 70378, 70382, + 70387, 70392, 70397, 70402, 70407, 70412, 70417, 70422, 70427, 70432, + 70436, 70440, 70445, 70450, 70454, 70459, 70464, 70469, 70474, 70479, + 70484, 70489, 70493, 70497, 70502, 70507, 70512, 70516, 70520, 70524, + 70528, 70532, 70536, 70541, 70546, 70551, 70556, 70561, 70568, 70574, + 70579, 70584, 70589, 70594, 70600, 70607, 70613, 70620, 70626, 70632, + 70637, 70644, 70650, 70655, 0, 0, 0, 0, 0, 0, 0, 0, 70661, 70665, 70669, + 70672, 70676, 70679, 70683, 70686, 70690, 70694, 70699, 70703, 70708, + 70711, 70715, 70719, 70722, 70726, 70730, 70733, 70737, 70741, 70745, + 70749, 70753, 70757, 70761, 70765, 70769, 70773, 70777, 70781, 70785, + 70789, 70793, 70797, 70801, 70805, 70808, 70811, 70815, 70819, 70823, + 70826, 70829, 70832, 70836, 70840, 70844, 70848, 70852, 70855, 70859, + 70865, 70870, 70874, 70879, 70883, 70888, 70893, 70899, 70904, 70910, + 70914, 70919, 70924, 70928, 70933, 70938, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 70942, 70945, 70949, 70953, 70956, 70959, 70962, 70965, 70968, 70971, + 70974, 70977, 0, 0, 0, 0, 0, 0, 70980, 70985, 70989, 70993, 70997, 71001, + 71005, 71009, 71013, 71017, 71021, 71025, 71029, 71033, 71037, 71041, + 71045, 71050, 71055, 71061, 71067, 71074, 71079, 71084, 71090, 71094, + 71099, 71102, 0, 0, 0, 0, 71105, 71112, 71118, 71124, 71130, 71136, + 71142, 71148, 71154, 71160, 71166, 71172, 71179, 71186, 71193, 71200, + 71207, 71214, 71221, 71228, 71235, 71241, 71247, 71254, 71260, 71267, + 71274, 71280, 71286, 71293, 71300, 71307, 71313, 71320, 71327, 71333, + 71340, 71346, 71353, 71360, 71366, 71372, 71379, 71385, 71392, 71399, + 71408, 71415, 71422, 71426, 71431, 71436, 71441, 71446, 71450, 71454, + 71459, 71463, 71468, 71473, 71478, 71483, 71487, 71492, 71496, 71501, + 71505, 71510, 71515, 71520, 71525, 71529, 71534, 71539, 71544, 71550, + 71555, 71561, 71567, 71573, 71580, 71586, 71592, 71599, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 71603, 71608, 71612, 71616, 71620, 71624, 71628, 71632, + 71636, 71640, 71644, 71648, 71652, 71656, 71660, 71664, 71668, 71672, + 71676, 71680, 71684, 71688, 71692, 71696, 71700, 71704, 71708, 71712, + 71716, 71720, 0, 0, 0, 71724, 71728, 71732, 71736, 71740, 71743, 71749, + 71752, 71756, 71759, 71765, 71771, 71779, 71782, 71786, 71789, 71792, + 71797, 71802, 71806, 71812, 71816, 71820, 71826, 71830, 71836, 71842, + 71846, 71850, 71856, 71860, 71866, 71872, 71876, 71882, 71886, 71892, + 71895, 71898, 71904, 71908, 71914, 71917, 71920, 71923, 71929, 71933, + 71937, 71943, 71949, 71953, 71956, 71962, 71967, 71972, 71977, 71984, + 71989, 71996, 72001, 72008, 72013, 72019, 72025, 72031, 72034, 72038, + 72042, 72047, 72052, 72057, 72062, 72067, 72072, 72077, 72082, 72089, + 72094, 0, 72100, 72103, 72107, 72110, 72113, 72116, 72119, 72122, 72125, + 72128, 72131, 0, 0, 0, 0, 72134, 72141, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 72146, + 72149, 72152, 72155, 72158, 72162, 72165, 72168, 72172, 72176, 72180, + 72184, 72188, 72192, 72196, 72200, 72204, 72208, 72212, 72216, 72220, + 72224, 72228, 72232, 72236, 72239, 72243, 72246, 72250, 72254, 72258, + 72262, 72266, 72269, 72273, 72276, 72279, 72283, 72287, 72291, 72295, + 72298, 72303, 72307, 72312, 72317, 72321, 72326, 72330, 72335, 72340, + 72345, 72350, 72355, 72361, 0, 0, 0, 0, 0, 0, 0, 0, 0, 72367, 72372, + 72377, 72382, 72389, 72394, 72399, 72403, 72408, 72413, 72417, 72421, + 72426, 72432, 0, 0, 72439, 72443, 72446, 72449, 72452, 72455, 72458, + 72461, 72464, 72467, 0, 0, 72470, 72475, 72480, 72486, 72493, 72499, + 72505, 72511, 72517, 72523, 72529, 72535, 72541, 72547, 72553, 72559, + 72564, 72570, 72575, 72581, 72587, 72594, 72600, 72606, 72611, 72618, + 72625, 72632, 72638, 72643, 72648, 72653, 0, 0, 0, 0, 72661, 72667, + 72673, 72679, 72685, 72691, 72697, 72703, 72709, 72715, 72721, 72727, + 72733, 72739, 72745, 72751, 72757, 72763, 72769, 72775, 72781, 72786, + 72791, 72797, 72803, 72809, 72815, 72821, 72827, 72833, 72839, 72845, + 72851, 72857, 72863, 72869, 72875, 72881, 72887, 72893, 72899, 72905, + 72911, 72917, 72923, 72929, 72935, 72940, 72945, 72951, 72956, 72960, + 72965, 72969, 72973, 72977, 72983, 72988, 72993, 72998, 73003, 73008, + 73013, 73018, 73025, 73032, 73039, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 73046, 73051, 73056, 73061, 73068, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 73075, + 73082, 73089, 73096, 73103, 73109, 73115, 73122, 73129, 73136, 73143, + 73150, 73157, 73164, 73171, 73178, 73184, 73191, 73198, 73205, 73212, + 73219, 73226, 73233, 73240, 73247, 73254, 73261, 73270, 73279, 73288, + 73297, 73306, 73315, 73324, 73333, 73341, 73349, 73357, 73365, 73373, + 73381, 73389, 73397, 73403, 73411, 0, 0, 73419, 73426, 73432, 73438, + 73444, 73450, 73456, 73462, 73468, 73474, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 73480, 73484, + 73488, 73492, 73496, 73500, 73504, 73508, 73512, 73516, 73520, 73524, + 73528, 73532, 73536, 73540, 73544, 73548, 73552, 73556, 73560, 73564, + 73568, 0, 0, 0, 0, 73572, 73576, 73580, 73584, 73588, 73592, 73596, + 73600, 73604, 73608, 73612, 73616, 73620, 73624, 73628, 73632, 73636, + 73640, 73644, 73648, 73652, 73656, 73660, 73664, 73668, 73672, 73676, + 73680, 73684, 73688, 73692, 73696, 73700, 73704, 73708, 73712, 73716, + 73720, 73724, 73728, 73732, 73736, 73740, 73744, 73748, 73752, 73756, + 73760, 73764, 0, 0, 0, 0, 73768, 73772, 73776, 73780, 73784, 73788, + 73792, 73796, 73800, 73804, 73808, 73812, 73816, 73820, 73824, 73828, + 73832, 73836, 73840, 73844, 73848, 73852, 73856, 73860, 73864, 73868, + 73872, 73876, 73880, 73884, 73888, 73892, 73896, 73900, 73904, 73908, + 73912, 73916, 73920, 73924, 73928, 73932, 73936, 73940, 73944, 73948, + 73952, 73956, 73960, 73964, 73968, 73972, 73976, 73980, 73984, 73988, + 73992, 73996, 74000, 74004, 74008, 74012, 74016, 74020, 74024, 74028, + 74032, 74036, 74040, 74044, 74048, 74052, 74056, 74060, 74064, 74068, + 74072, 74076, 74080, 74084, 74088, 74092, 74096, 74100, 74104, 74108, + 74112, 74116, 74120, 74124, 74128, 74132, 74136, 74140, 74144, 74148, + 74152, 74156, 74160, 74164, 74168, 74172, 74176, 74180, 74184, 74188, + 74192, 74196, 74200, 74204, 74208, 74212, 74216, 74220, 74224, 74228, + 74232, 74236, 74240, 74244, 74248, 74252, 74256, 74260, 74264, 74268, + 74272, 74276, 74280, 74284, 74288, 74292, 74296, 74300, 74304, 74308, + 74312, 74316, 74320, 74324, 74328, 74332, 74336, 74340, 74344, 74348, + 74352, 74356, 74360, 74364, 74368, 74372, 74376, 74380, 74384, 74388, + 74392, 74396, 74400, 74404, 74408, 74412, 74416, 74420, 74424, 74428, + 74432, 74436, 74440, 74444, 74448, 74452, 74456, 74460, 74464, 74468, + 74472, 74476, 74480, 74484, 74488, 74492, 74496, 74500, 74504, 74508, + 74512, 74516, 74520, 74524, 74528, 74532, 74536, 74540, 74544, 74548, + 74552, 74556, 74560, 74564, 74568, 74572, 74576, 74580, 74584, 74588, + 74592, 74596, 74600, 74604, 74608, 74612, 74616, 74620, 74624, 74628, + 74632, 74636, 74640, 74644, 74648, 74652, 74656, 74660, 74664, 74668, + 74672, 74676, 74680, 74684, 74688, 74692, 74696, 74700, 74704, 74708, + 74712, 74716, 74720, 74724, 74728, 74732, 74736, 74740, 74744, 74748, + 74752, 74756, 74760, 74764, 74768, 74772, 74776, 74780, 74784, 74788, + 74792, 74796, 74800, 74804, 74808, 74812, 74816, 74820, 74824, 74828, + 74832, 74836, 74840, 74844, 74848, 74852, 74856, 74860, 74864, 74868, + 74872, 74876, 74880, 74884, 74888, 74892, 74896, 74900, 74904, 74908, + 74912, 74916, 74920, 74924, 74928, 74932, 74936, 74940, 74944, 74948, + 74952, 74956, 74960, 74964, 74968, 74972, 0, 0, 74976, 74980, 74984, + 74988, 74992, 74996, 75000, 75004, 75008, 75012, 75016, 75020, 75024, + 75028, 75032, 75036, 75040, 75044, 75048, 75052, 75056, 75060, 75064, + 75068, 75072, 75076, 75080, 75084, 75088, 75092, 75096, 75100, 75104, + 75108, 75112, 75116, 75120, 75124, 75128, 75132, 75136, 75140, 75144, + 75148, 75152, 75156, 75160, 75164, 75168, 75172, 75176, 75180, 75184, + 75188, 75192, 75196, 75200, 75204, 75208, 75212, 75216, 75220, 0, 0, + 75224, 75228, 75232, 75236, 75240, 75244, 75248, 75252, 75256, 75260, + 75264, 75268, 75272, 75276, 75280, 75284, 75288, 75292, 75296, 75300, + 75304, 75308, 75312, 75316, 75320, 75324, 75328, 75332, 75336, 75340, + 75344, 75348, 75352, 75356, 75360, 75364, 75368, 75372, 75376, 75380, + 75384, 75388, 75392, 75396, 75400, 75404, 75408, 75412, 75416, 75420, + 75424, 75428, 75432, 75436, 75440, 75444, 75448, 75452, 75456, 75460, + 75464, 75468, 75472, 75476, 75480, 75484, 75488, 75492, 75496, 75500, + 75504, 75508, 75512, 75516, 75520, 75524, 75528, 75532, 75536, 75540, + 75544, 75548, 75552, 75556, 75560, 75564, 75568, 75572, 75576, 75580, + 75584, 75588, 75592, 75596, 75600, 75604, 75608, 75612, 75616, 75620, + 75624, 75628, 75632, 75636, 75640, 75644, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 75648, 75653, 75658, 75663, 75668, 75673, 75681, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 75686, 75693, 75700, 75707, 75714, 0, 0, 0, 0, 0, + 75721, 75728, 75735, 75745, 75751, 75757, 75763, 75769, 75775, 75781, + 75788, 75794, 75800, 75806, 75815, 75824, 75836, 75848, 75854, 75860, + 75866, 75873, 75880, 75887, 75894, 75901, 0, 75908, 75915, 75922, 75930, + 75937, 0, 75944, 0, 75951, 75958, 0, 75965, 75973, 0, 75980, 75987, + 75994, 76001, 76008, 76015, 76022, 76029, 76036, 76043, 76048, 76055, + 76062, 76068, 76074, 76080, 76086, 76092, 76098, 76104, 76110, 76116, + 76122, 76128, 76134, 76140, 76146, 76152, 76158, 76164, 76170, 76176, + 76182, 76188, 76194, 76200, 76206, 76212, 76218, 76224, 76230, 76236, + 76242, 76248, 76254, 76260, 76266, 76272, 76278, 76284, 76290, 76296, + 76302, 76308, 76314, 76320, 76326, 76332, 76338, 76344, 76350, 76356, + 76362, 76368, 76374, 76380, 76386, 76392, 76398, 76404, 76410, 76416, + 76422, 76428, 76434, 76440, 76446, 76452, 76458, 76464, 76470, 76476, + 76482, 76488, 76494, 76500, 76506, 76512, 76518, 76526, 76534, 76540, + 76546, 76552, 76558, 76567, 76576, 76584, 76592, 76600, 76608, 76616, + 76624, 76632, 76640, 76647, 76654, 76664, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 76674, 76680, 76686, 76692, 76698, 76703, 76708, 76714, 76720, 76726, + 76732, 76740, 76746, 76752, 76760, 76768, 76776, 76784, 76789, 76794, + 76799, 76804, 76816, 76828, 76838, 76848, 76859, 76870, 76881, 76892, + 76902, 76912, 76923, 76934, 76945, 76956, 76966, 76976, 76986, 77001, + 77016, 77031, 77038, 77045, 77052, 77059, 77069, 77079, 77089, 77100, + 77110, 77118, 77126, 77135, 77143, 77152, 77160, 77168, 77176, 77185, + 77193, 77202, 77210, 77218, 77226, 77235, 77243, 77250, 77257, 77264, + 77271, 77279, 77287, 77295, 77303, 77311, 77320, 77328, 77336, 77344, + 77352, 77360, 77369, 77377, 77385, 77393, 77401, 77409, 77417, 77425, + 77433, 77441, 77449, 77458, 77466, 77475, 77483, 77491, 77499, 77508, + 77516, 77524, 77532, 77540, 77549, 77558, 77566, 77575, 77583, 77591, + 77599, 77608, 77616, 77625, 77633, 77640, 77647, 77655, 77662, 77670, + 77677, 77685, 77693, 77702, 77710, 77719, 77727, 77735, 77743, 77752, + 77760, 77767, 77774, 77782, 77789, 77797, 77804, 77814, 77824, 77834, + 77843, 77852, 77861, 77870, 77879, 77889, 77900, 77911, 77921, 77932, + 77943, 77953, 77962, 77971, 77979, 77988, 77997, 78005, 78014, 78023, + 78031, 78040, 78049, 78057, 78066, 78075, 78083, 78092, 78101, 78109, + 78118, 78126, 78135, 78143, 78151, 78160, 78168, 78177, 78185, 78193, + 78202, 78210, 78217, 78224, 78233, 78242, 78250, 78259, 78268, 78276, + 78286, 78294, 78302, 78309, 78317, 78325, 78332, 78342, 78352, 78363, + 78373, 78384, 78392, 78400, 78409, 78417, 78426, 78434, 78442, 78451, + 78459, 78468, 78476, 78483, 78490, 78497, 78504, 78512, 78520, 78528, + 78536, 78545, 78553, 78561, 78570, 78578, 78586, 78594, 78603, 78611, + 78619, 78627, 78635, 78643, 78651, 78659, 78667, 78675, 78684, 78692, + 78700, 78708, 78716, 78724, 78733, 78742, 78750, 78758, 78766, 78775, + 78783, 78792, 78799, 78806, 78814, 78821, 78829, 78837, 78846, 78854, + 78863, 78871, 78879, 78889, 78896, 78903, 78911, 78918, 78926, 78936, + 78947, 78955, 78964, 78972, 78981, 78989, 78998, 79006, 79015, 79023, + 79032, 79041, 79049, 79057, 79065, 79074, 79081, 79089, 79098, 79107, + 79116, 79125, 79133, 79142, 79150, 79159, 79167, 79176, 79184, 79193, + 79201, 79209, 79216, 79224, 79231, 79240, 79248, 79257, 79265, 79274, + 79282, 79290, 79298, 79307, 79315, 79324, 79333, 79342, 79351, 79360, + 79368, 79377, 79385, 79394, 79402, 79411, 79419, 79428, 79436, 79444, + 79451, 79459, 79466, 79475, 79483, 79492, 79500, 79509, 79517, 79525, + 79533, 79542, 79550, 79559, 79568, 79577, 79586, 79594, 79602, 79611, + 79619, 79628, 79637, 79645, 79653, 79661, 79670, 79678, 79686, 79695, + 79703, 79711, 79719, 79727, 79732, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 79737, 79747, 79757, 79767, 79777, 79788, 79798, 79808, 79819, + 79828, 79837, 79846, 79856, 79866, 79876, 79887, 79897, 79907, 79917, + 79927, 79937, 79947, 79957, 79967, 79977, 79987, 79997, 80008, 80019, + 80029, 80039, 80050, 80061, 80072, 80082, 80092, 80102, 80112, 80122, + 80132, 80142, 80153, 80163, 80173, 80184, 80195, 80206, 80216, 80226, + 80236, 80246, 80257, 80267, 80277, 80288, 80299, 80309, 80319, 80328, + 80337, 80346, 80355, 80364, 80374, 0, 0, 80384, 80394, 80404, 80414, + 80424, 80435, 80445, 80455, 80466, 80476, 80487, 80496, 80505, 80516, + 80526, 80537, 80548, 80560, 80570, 80581, 80590, 80600, 80610, 80622, + 80632, 80642, 80652, 80662, 80672, 80681, 80690, 80699, 80708, 80718, + 80728, 80738, 80748, 80758, 80768, 80778, 80788, 80798, 80808, 80818, + 80828, 80837, 80846, 80855, 80865, 80875, 80885, 80895, 80905, 80916, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 80926, 80941, 80956, 80962, + 80968, 80974, 80980, 80986, 80992, 80998, 81004, 81012, 81016, 81019, 0, + 0, 81027, 81030, 81033, 81036, 81039, 81042, 81045, 81048, 81051, 81054, + 81057, 81060, 81063, 81066, 81069, 81072, 81075, 81083, 81092, 81103, + 81111, 81119, 81128, 81137, 81148, 81160, 0, 0, 0, 0, 0, 0, 81169, 81174, + 81179, 81186, 81193, 81199, 81205, 0, 0, 0, 0, 0, 0, 0, 0, 0, 81210, + 81220, 81230, 81240, 81249, 81260, 81269, 81278, 81288, 81298, 81310, + 81322, 81333, 81344, 81355, 81366, 81376, 81386, 81396, 81406, 81417, + 81428, 81432, 81437, 81446, 81455, 81459, 81463, 81467, 81472, 81477, + 81482, 81487, 81490, 81494, 0, 81499, 81502, 81505, 81509, 81513, 81518, + 81522, 81526, 81531, 81536, 81543, 81550, 81553, 81556, 81559, 81562, + 81565, 81569, 81573, 0, 81577, 81582, 81586, 81590, 0, 0, 0, 0, 81595, + 81600, 81607, 81612, 81617, 0, 81622, 81627, 81632, 81637, 81642, 81647, + 81652, 81657, 81662, 81667, 81672, 81677, 81686, 81695, 81703, 81711, + 81720, 81729, 81738, 81747, 81755, 81763, 81771, 81779, 81784, 81789, + 81795, 81801, 81807, 81813, 81821, 81829, 81835, 81841, 81847, 81853, + 81859, 81865, 81871, 81877, 81882, 81887, 81892, 81897, 81902, 81907, + 81912, 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, 82115, 82121, 82127, 82133, 82139, 82145, + 82151, 82157, 82163, 82169, 82175, 82181, 82187, 82193, 82199, 82205, + 82211, 82217, 82223, 82229, 82235, 82241, 82247, 82253, 82259, 82265, + 82271, 82277, 82282, 82287, 82292, 82297, 82303, 82309, 82315, 82321, + 82327, 82333, 82339, 82345, 82351, 82357, 82363, 82369, 82374, 82379, + 82384, 82389, 82401, 82413, 82424, 82435, 82447, 82459, 82467, 0, 0, + 82475, 0, 82483, 82487, 82491, 82494, 82498, 82502, 82505, 82508, 82512, + 82516, 82519, 82522, 82525, 82528, 82533, 82536, 82540, 82543, 82546, + 82549, 82552, 82555, 82558, 82561, 82564, 82567, 82570, 82573, 82577, + 82581, 82585, 82589, 82594, 82599, 82605, 82611, 82617, 82622, 82628, + 82634, 82640, 82645, 82651, 82657, 82662, 82667, 82672, 82677, 82683, + 82689, 82694, 82699, 82705, 82710, 82716, 82722, 82728, 82734, 82740, + 82744, 82749, 82753, 82758, 82762, 82767, 82772, 82778, 82784, 82790, + 82795, 82801, 82807, 82813, 82818, 82824, 82830, 82835, 82840, 82845, + 82850, 82856, 82862, 82867, 82872, 82878, 82883, 82889, 82895, 82901, + 82907, 82913, 82918, 82922, 82927, 82930, 82935, 82940, 82946, 82951, + 82956, 82960, 82966, 82971, 82976, 82981, 82986, 82991, 82996, 83001, + 83007, 83013, 83019, 83027, 83031, 83035, 83039, 83043, 83047, 83051, + 83056, 83061, 83066, 83071, 83076, 83081, 83086, 83091, 83096, 83101, + 83106, 83111, 83116, 83120, 83124, 83129, 83134, 83139, 83144, 83148, + 83153, 83158, 83163, 83168, 83172, 83177, 83182, 83187, 83192, 83196, + 83201, 83206, 83210, 83215, 83220, 83225, 83230, 83235, 83239, 83246, + 83253, 83257, 83262, 83267, 83272, 83277, 83282, 83287, 83292, 83297, + 83302, 83307, 83312, 83317, 83322, 83327, 83332, 83337, 83342, 83347, + 83352, 83357, 83362, 83367, 83372, 83377, 83382, 83387, 83392, 83397, + 83402, 0, 0, 0, 83407, 83411, 83416, 83420, 83425, 83430, 0, 0, 83434, + 83439, 83444, 83448, 83453, 83458, 0, 0, 83463, 83468, 83472, 83477, + 83482, 83487, 0, 0, 83492, 83497, 83502, 0, 0, 0, 83506, 83510, 83514, + 83517, 83520, 83524, 83528, 0, 83532, 83538, 83541, 83545, 83548, 83552, + 83556, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 83560, 83566, 83572, 83578, 83584, + 0, 0, 83588, 83594, 83600, 83606, 83612, 83618, 83625, 83632, 83639, + 83646, 83653, 83660, 0, 83667, 83674, 83681, 83687, 83694, 83701, 83708, + 83715, 83721, 83728, 83735, 83742, 83749, 83755, 83762, 83769, 83776, + 83783, 83789, 83796, 83803, 83810, 83817, 83824, 83831, 83838, 0, 83845, + 83851, 83858, 83865, 83872, 83879, 83886, 83893, 83900, 83907, 83914, + 83921, 83928, 83935, 83941, 83948, 83955, 83962, 83969, 0, 83976, 83983, + 0, 83990, 83997, 84004, 84011, 84018, 84025, 84032, 84039, 84046, 84053, + 84060, 84067, 84074, 84081, 84088, 0, 0, 84094, 84099, 84104, 84109, + 84114, 84119, 84124, 84129, 84134, 84139, 84144, 84149, 84154, 84159, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 84164, 84171, 84178, 84185, 84192, 84199, + 84206, 84213, 84220, 84227, 84234, 84241, 84248, 84255, 84262, 84269, + 84276, 84283, 84290, 84297, 84305, 84313, 84320, 84327, 84332, 84340, + 84348, 84355, 84362, 84367, 84374, 84379, 84384, 84391, 84396, 84401, + 84406, 84414, 84419, 84424, 84431, 84436, 84441, 84448, 84455, 84460, + 84465, 84470, 84475, 84480, 84485, 84490, 84495, 84500, 84507, 84512, + 84519, 84524, 84529, 84534, 84539, 84544, 84549, 84554, 84559, 84564, + 84569, 84574, 84581, 84588, 84595, 84602, 84608, 84613, 84620, 84625, + 84630, 84639, 84646, 84655, 84662, 84667, 84672, 84680, 84685, 84690, + 84695, 84700, 84705, 84712, 84717, 84722, 84727, 84732, 84737, 84744, + 84751, 84758, 84765, 84772, 84779, 84786, 84793, 84800, 84807, 84814, + 84821, 84828, 84835, 84842, 84849, 84856, 84863, 84870, 84877, 84884, + 84891, 84898, 84905, 84912, 84919, 84926, 84933, 0, 0, 0, 0, 0, 84940, + 84948, 84956, 0, 0, 0, 0, 84961, 84965, 84969, 84973, 84977, 84981, + 84985, 84989, 84993, 84997, 85002, 85007, 85012, 85017, 85022, 85027, + 85032, 85037, 85042, 85048, 85054, 85060, 85067, 85074, 85081, 85088, + 85095, 85102, 85108, 85114, 85120, 85127, 85134, 85141, 85148, 85155, + 85162, 85169, 85176, 85183, 85190, 85197, 85204, 85211, 85218, 0, 0, 0, + 85225, 85233, 85241, 85249, 85257, 85265, 85275, 85285, 85293, 85301, + 85309, 85317, 85325, 85331, 85338, 85347, 85356, 85365, 85374, 85383, + 85392, 85402, 85413, 85423, 85434, 85443, 85452, 85461, 85471, 85482, + 85492, 85503, 85514, 85523, 85531, 85537, 85543, 85549, 85555, 85563, + 85571, 85577, 85584, 85594, 85601, 85608, 85615, 85622, 85629, 85639, + 85646, 85653, 85661, 85669, 85678, 85687, 85696, 85705, 85714, 85722, + 85731, 85740, 85749, 85753, 85760, 85765, 85770, 85774, 85778, 85782, + 85786, 85791, 85796, 85802, 85808, 85812, 85818, 85822, 85826, 85830, + 85834, 85838, 85842, 85848, 0, 0, 0, 0, 0, 85852, 85857, 85862, 85867, + 85872, 85879, 85884, 85889, 85894, 85899, 85904, 85909, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 85914, + 85921, 85930, 85939, 85946, 85953, 85960, 85967, 85974, 85981, 85987, + 85994, 86001, 86008, 86015, 86022, 86029, 86036, 86043, 86052, 86059, + 86066, 86073, 86080, 86087, 86094, 86101, 86108, 86117, 86124, 86131, + 86138, 86145, 86152, 86159, 86168, 86175, 86182, 86189, 86196, 86205, + 86212, 86219, 86226, 86234, 86243, 0, 0, 86252, 86256, 86260, 86265, + 86270, 86275, 86280, 86284, 86289, 86294, 86299, 86304, 86309, 86314, + 86318, 86322, 86326, 86331, 86336, 86340, 86345, 86350, 86354, 86358, + 86363, 86368, 86373, 86378, 86383, 0, 0, 0, 86388, 86392, 86397, 86402, + 86406, 86411, 86415, 86420, 86425, 86430, 86435, 86439, 86443, 86448, + 86453, 86458, 86463, 86467, 86472, 86476, 86481, 86486, 86490, 86495, + 86500, 86505, 86509, 86513, 86518, 86523, 86528, 86533, 86538, 86543, + 86548, 86553, 86558, 86563, 86568, 86573, 86578, 86583, 86588, 86593, + 86598, 86603, 86608, 86613, 86618, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 86623, 86627, 86632, 86637, 86642, 86646, + 86651, 86656, 86661, 86666, 86670, 86674, 86679, 86684, 86689, 86694, + 86698, 86703, 86708, 86713, 86718, 86723, 86728, 86732, 86737, 86742, + 86747, 86752, 86757, 86762, 86767, 0, 86772, 86777, 86782, 86788, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 86794, 86799, 86804, 86809, 86814, 86819, + 86824, 86829, 86834, 86839, 86844, 86849, 86854, 86859, 86864, 86869, + 86874, 86879, 86884, 86889, 86894, 86899, 86904, 86909, 86914, 86919, + 86924, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 86931, 86936, 86941, 86946, 86951, 86956, 86961, + 86966, 86971, 86976, 86981, 86986, 86991, 86996, 87001, 87006, 87011, + 87016, 87021, 87026, 87031, 87036, 87041, 87046, 87051, 87056, 87061, + 87065, 87069, 87073, 0, 87078, 87084, 87089, 87094, 87099, 87104, 87110, + 87116, 87122, 87128, 87134, 87140, 87146, 87152, 87158, 87164, 87170, + 87176, 87182, 87187, 87193, 87199, 87204, 87210, 87215, 87221, 87227, + 87232, 87238, 87244, 87249, 87255, 87261, 87267, 87273, 87279, 87285, 0, + 0, 0, 0, 87290, 87296, 87302, 87308, 87314, 87320, 87326, 87332, 87338, + 87345, 87350, 87355, 87361, 87367, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 87373, 87378, 87383, 87388, 87394, 87399, 87405, 87411, + 87417, 87423, 87430, 87436, 87443, 87448, 87453, 87458, 87463, 87468, + 87473, 87478, 87483, 87488, 87493, 87498, 87503, 87508, 87513, 87518, + 87523, 87528, 87533, 87538, 87543, 87548, 87553, 87558, 87563, 87568, + 87573, 87578, 87583, 87588, 87593, 87598, 87604, 87609, 87615, 87621, + 87627, 87633, 87640, 87646, 87653, 87658, 87663, 87668, 87673, 87678, + 87683, 87688, 87693, 87698, 87703, 87708, 87713, 87718, 87723, 87728, + 87733, 87738, 87743, 87748, 87753, 87758, 87763, 87768, 87773, 87778, + 87783, 87788, 87793, 87798, 87803, 87808, 87813, 87818, 87823, 87828, + 87833, 87838, 87843, 87848, 87853, 87858, 87863, 87868, 87873, 87878, + 87883, 87888, 87893, 87898, 87903, 87908, 87913, 87918, 87923, 87928, + 87933, 87938, 87943, 87948, 87953, 87958, 87963, 87968, 87973, 87978, + 87983, 87988, 87993, 87998, 88003, 88008, 88013, 88018, 88023, 88028, + 88033, 88038, 88043, 88048, 88053, 88058, 88063, 88068, 88072, 88077, + 88082, 88087, 88092, 88097, 88102, 88107, 88112, 88117, 88122, 88127, + 88132, 88136, 88140, 88144, 88148, 88152, 88156, 88160, 88165, 88170, 0, + 0, 88175, 88180, 88184, 88188, 88192, 88196, 88200, 88204, 88208, 88212, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 88216, 88220, 88224, 88228, + 88232, 88236, 0, 0, 88241, 0, 88246, 88250, 88255, 88260, 88265, 88270, + 88275, 88280, 88285, 88290, 88295, 88299, 88304, 88309, 88314, 88319, + 88323, 88328, 88333, 88338, 88343, 88347, 88352, 88357, 88362, 88367, + 88371, 88376, 88381, 88386, 88391, 88396, 88401, 88406, 88411, 88416, + 88421, 88426, 88431, 88435, 88440, 88445, 88450, 88455, 0, 88460, 88465, + 0, 0, 0, 88470, 0, 0, 88475, 88480, 88487, 88494, 88501, 88508, 88515, + 88522, 88529, 88536, 88543, 88550, 88557, 88564, 88571, 88578, 88585, + 88592, 88599, 88606, 88613, 88620, 88627, 0, 88634, 88641, 88647, 88653, + 88659, 88666, 88673, 88681, 88689, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 88698, 88703, + 88708, 88713, 88718, 88723, 88728, 88733, 88738, 88743, 88748, 88753, + 88758, 88763, 88768, 88773, 88778, 88783, 88788, 88793, 88798, 88803, + 88808, 88812, 88817, 88822, 88828, 88832, 0, 0, 0, 88836, 88842, 88846, + 88851, 88856, 88861, 88865, 88870, 88874, 88879, 88884, 88888, 88892, + 88896, 88900, 88904, 88909, 88914, 88918, 88923, 88928, 88932, 88937, + 88942, 88947, 88952, 88957, 0, 0, 0, 0, 0, 88962, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 88967, 88970, 88974, 88978, 0, 88983, 88987, 0, + 0, 0, 0, 0, 88991, 88996, 89002, 89006, 89010, 89013, 89017, 89021, 0, + 89025, 89029, 89033, 0, 89037, 89041, 89045, 89049, 89053, 89057, 89061, + 89065, 89069, 89073, 89077, 89080, 89083, 89087, 89091, 89095, 89098, + 89101, 89104, 89108, 89112, 89116, 89120, 89124, 89128, 89131, 89135, 0, + 0, 0, 0, 89139, 89144, 89148, 0, 0, 0, 0, 89152, 89155, 89158, 89161, + 89164, 89167, 89171, 89175, 89180, 0, 0, 0, 0, 0, 0, 0, 0, 89185, 89190, + 89196, 89201, 89207, 89212, 89217, 89222, 89228, 0, 0, 0, 0, 0, 0, 0, + 89233, 89241, 89249, 89257, 89265, 89273, 89281, 89289, 89297, 89305, + 89313, 89321, 89329, 89337, 89345, 89353, 89361, 89369, 89377, 89385, + 89393, 89401, 89409, 89417, 89425, 89433, 89441, 89449, 89457, 89465, + 89472, 89480, 89488, 89492, 89497, 89502, 89507, 89512, 89517, 89522, + 89527, 89531, 89536, 89540, 89545, 89549, 89554, 89558, 89563, 89568, + 89573, 89578, 89583, 89588, 89593, 89598, 89603, 89608, 89613, 89618, + 89623, 89628, 89633, 89638, 89643, 89648, 89653, 89658, 89663, 89668, + 89673, 89678, 89683, 89688, 89693, 89698, 89703, 89708, 89713, 89718, + 89723, 89728, 89733, 89738, 89743, 89748, 0, 0, 0, 89753, 89758, 89767, + 89775, 89784, 89793, 89804, 89815, 89822, 89829, 89836, 89843, 89850, + 89857, 89864, 89871, 89878, 89885, 89892, 89899, 89906, 89913, 89920, + 89927, 89934, 89941, 89948, 89955, 89962, 0, 0, 89969, 89975, 89981, + 89987, 89993, 90000, 90007, 90015, 90023, 90030, 90037, 90044, 90051, + 90058, 90065, 90072, 90079, 90086, 90093, 90100, 90107, 90114, 90121, + 90128, 90135, 90142, 90149, 0, 0, 0, 0, 0, 90156, 90162, 90168, 90174, + 90180, 90187, 90194, 90202, 90210, 90216, 90222, 90229, 90235, 90241, + 90247, 90253, 90260, 90267, 90274, 90281, 90288, 90295, 90302, 90309, + 90316, 90323, 90330, 90337, 90344, 90351, 90358, 90365, 90372, 90379, + 90386, 90393, 90400, 90407, 90414, 90421, 90428, 90435, 90442, 90449, + 90456, 90463, 90470, 90477, 90484, 90491, 90498, 90505, 90512, 90519, + 90526, 90533, 90540, 90547, 90554, 90561, 90568, 90575, 90582, 90589, + 90596, 90603, 90610, 90617, 90624, 90631, 90638, 90645, 90652, 90659, + 90666, 90673, 90680, 90687, 90694, 90701, 90708, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 90715, 90719, 90723, 90727, 90731, 90735, 90739, 90743, 90747, 90751, + 90756, 90761, 90766, 90771, 90776, 90781, 90786, 90791, 90796, 90802, + 90808, 90814, 90821, 90828, 90835, 90842, 90849, 90856, 90863, 90870, + 90877, 0, 90884, 90888, 90892, 90896, 90899, 90903, 90906, 90910, 90913, + 90917, 90920, 90924, 90927, 90931, 90934, 90938, 90942, 90946, 90950, + 90954, 90958, 90962, 90966, 90970, 90974, 90978, 90982, 90986, 90990, + 90994, 90998, 91002, 91006, 91010, 91014, 91017, 91020, 91024, 91028, + 91032, 91035, 91038, 91041, 91045, 91049, 91053, 91057, 91061, 91064, + 91069, 91073, 91078, 91082, 91087, 91091, 91096, 91100, 91105, 91109, + 91113, 91117, 91121, 91124, 91128, 91133, 91136, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 91140, 91143, 91148, 91154, 91162, 91167, 91173, 91181, + 91187, 91193, 91197, 91201, 91208, 91217, 91224, 91233, 91239, 91248, + 91255, 91262, 91269, 91279, 91285, 91289, 91296, 91305, 91315, 91322, + 91329, 91333, 91337, 91344, 91354, 91358, 91365, 91372, 91379, 91385, + 91392, 91399, 91406, 91413, 91417, 91421, 91425, 91432, 91436, 91443, + 91450, 91464, 91473, 91477, 91481, 91485, 91492, 91496, 91500, 91504, + 91512, 91520, 91539, 91549, 91569, 91573, 91577, 91581, 91585, 91589, + 91593, 91597, 91604, 91608, 91611, 91615, 91619, 91625, 91632, 91641, + 91645, 91654, 91663, 91671, 91675, 91682, 91686, 91690, 91694, 91698, + 91709, 91718, 91727, 91736, 91745, 91757, 91766, 91775, 91784, 91792, + 91801, 91813, 91822, 91831, 91840, 91852, 91861, 91870, 91882, 91891, + 91900, 91912, 91921, 91925, 91929, 91933, 91937, 91941, 91945, 91949, + 91956, 91960, 91964, 91975, 91979, 91983, 91990, 91996, 92002, 92006, + 92013, 92017, 92021, 92025, 92029, 92033, 92037, 92043, 92051, 92055, + 92059, 92062, 92068, 92078, 92082, 92094, 92101, 92108, 92115, 92122, + 92128, 92132, 92136, 92140, 92144, 92151, 92160, 92167, 92175, 92183, + 92189, 92193, 92197, 92201, 92205, 92211, 92220, 92232, 92239, 92246, + 92255, 92266, 92272, 92281, 92290, 92297, 92306, 92313, 92320, 92330, + 92337, 92344, 92351, 92358, 92362, 92368, 92372, 92383, 92391, 92400, + 92412, 92419, 92426, 92436, 92443, 92452, 92459, 92468, 92475, 92482, + 92492, 92499, 92506, 92516, 92523, 92535, 92544, 92551, 92558, 92565, + 92574, 92584, 92597, 92604, 92614, 92624, 92631, 92640, 92653, 92660, + 92667, 92674, 92684, 92694, 92701, 92711, 92718, 92725, 92735, 92741, + 92748, 92755, 92762, 92772, 92779, 92786, 92793, 92799, 92806, 92816, + 92823, 92827, 92835, 92839, 92851, 92855, 92869, 92873, 92877, 92881, + 92885, 92891, 92898, 92906, 92910, 92914, 92918, 92922, 92929, 92933, + 92939, 92945, 92953, 92957, 92964, 92972, 92976, 92980, 92986, 92990, + 92999, 93008, 93015, 93025, 93031, 93035, 93039, 93047, 93054, 93061, + 93067, 93071, 93079, 93083, 93090, 93102, 93109, 93119, 93125, 93129, + 93138, 93145, 93154, 93158, 93162, 93169, 93173, 93177, 93181, 93185, + 93188, 93194, 93200, 93204, 93208, 93215, 93222, 93229, 93236, 93243, + 93250, 93257, 93264, 93270, 93274, 93278, 93285, 93292, 93299, 93306, + 93313, 93317, 93320, 93325, 93329, 93333, 93342, 93351, 93355, 93359, + 93365, 93371, 93388, 93394, 93398, 93407, 93411, 93415, 93422, 93430, + 93438, 93444, 93448, 93452, 93456, 93460, 93463, 93468, 93474, 93483, + 93489, 93495, 93501, 93506, 93512, 93518, 93524, 93530, 93536, 93544, + 93550, 93561, 93567, 93573, 93582, 93592, 93598, 93604, 93610, 93616, + 93622, 93628, 93634, 93640, 93646, 93652, 93661, 93670, 93679, 93685, + 93694, 93700, 93706, 93712, 93718, 93724, 93730, 93736, 93742, 93748, + 93754, 93760, 93766, 93772, 93777, 93783, 93789, 93797, 93803, 93809, + 93813, 93821, 93825, 93829, 93833, 93837, 93841, 93848, 93852, 93861, + 93865, 93872, 93880, 93884, 93888, 93892, 93905, 93921, 93925, 93929, + 93936, 93942, 93949, 93953, 93957, 93961, 93965, 93969, 93976, 93980, + 93998, 94002, 94006, 94013, 94017, 94021, 94027, 94031, 94035, 94043, + 94047, 94051, 94055, 94059, 94065, 94076, 94085, 94094, 94101, 94108, + 94119, 94126, 94133, 94140, 94147, 94154, 94161, 94168, 94178, 94184, + 94191, 94201, 94210, 94217, 94226, 94236, 94243, 94250, 94257, 94264, + 94276, 94283, 94290, 94297, 94304, 94311, 94321, 94328, 94335, 94345, + 94358, 94370, 94377, 94387, 94394, 94401, 94408, 94422, 94428, 94436, + 94446, 94456, 94463, 94470, 94476, 94480, 94487, 94497, 94503, 94516, + 94520, 94524, 94531, 94535, 94542, 94552, 94556, 94560, 94564, 94568, + 94572, 94579, 94583, 94590, 94597, 94604, 94613, 94622, 94632, 94639, + 94646, 94653, 94663, 94670, 94680, 94687, 94697, 94704, 94711, 94721, + 94731, 94738, 94744, 94752, 94760, 94766, 94772, 94776, 94780, 94787, + 94795, 94801, 94805, 94809, 94813, 94820, 94832, 94835, 94842, 94848, + 94852, 94856, 94860, 94864, 94868, 94872, 94876, 94880, 94884, 94888, + 94895, 94899, 94905, 94909, 94913, 94917, 94923, 94930, 94937, 94944, + 94955, 94963, 94967, 94973, 94982, 94989, 94995, 94998, 95002, 95006, + 95012, 95021, 95029, 95033, 95039, 95043, 95047, 95051, 95057, 95064, + 95070, 95074, 95080, 95084, 95088, 95097, 95109, 95113, 95120, 95127, + 95137, 95144, 95156, 95163, 95170, 95177, 95188, 95198, 95211, 95221, + 95228, 95232, 95236, 95240, 95244, 95253, 95262, 95271, 95288, 95297, + 95303, 95310, 95318, 95331, 95335, 95344, 95353, 95362, 95371, 95382, + 95391, 95400, 95409, 95418, 95427, 95436, 95446, 95449, 95453, 95457, + 95461, 95465, 95469, 95475, 95482, 95489, 95496, 95502, 95508, 95515, + 95521, 95528, 95536, 95540, 95547, 95554, 95561, 95569, 95572, 95576, + 95580, 95584, 95588, 95594, 95598, 95604, 95611, 95618, 95624, 95631, + 95638, 95645, 95652, 95659, 95666, 95673, 95680, 95687, 95694, 95701, + 95708, 95715, 95722, 95728, 95732, 95741, 95745, 95749, 95753, 95757, + 95763, 95770, 95777, 95784, 95791, 95798, 95804, 95812, 95816, 95820, + 95824, 95828, 95834, 95851, 95868, 95872, 95876, 95880, 95884, 95888, + 95892, 95898, 95905, 95909, 95915, 95922, 95929, 95936, 95943, 95950, + 95959, 95966, 95973, 95980, 95987, 95991, 95995, 96001, 96013, 96017, + 96021, 96030, 96034, 96038, 96042, 96048, 96052, 96056, 96065, 96069, + 96073, 96077, 96084, 96088, 96092, 96096, 96100, 96104, 96108, 96112, + 96116, 96122, 96129, 96136, 96142, 96146, 96163, 96169, 96173, 96179, + 96185, 96191, 96197, 96203, 96209, 96213, 96217, 96221, 96227, 96231, + 96237, 96241, 96245, 96252, 96259, 96276, 96280, 96284, 96288, 96292, + 96296, 96308, 96311, 96316, 96321, 96336, 96346, 96357, 96361, 96365, + 96369, 96375, 96382, 96389, 96399, 96411, 96417, 96423, 96432, 96436, + 96440, 96447, 96457, 96464, 96470, 96474, 96478, 96485, 96491, 96495, + 96501, 96505, 96513, 96519, 96523, 96531, 96539, 96546, 96552, 96559, + 96566, 96576, 96586, 96590, 96594, 96598, 96602, 96608, 96615, 96621, + 96628, 96635, 96642, 96651, 96658, 96665, 96671, 96678, 96685, 96692, + 96699, 96706, 96713, 96719, 96726, 96733, 96740, 96749, 96756, 96763, + 96767, 96773, 96777, 96783, 96790, 96797, 96804, 96808, 96812, 96816, + 96820, 96824, 96831, 96835, 96839, 96845, 96853, 96857, 96861, 96865, + 96869, 96876, 96880, 96884, 96892, 96896, 96900, 96904, 96908, 96914, + 96918, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 96922, 96928, + 96934, 96941, 96948, 96955, 96962, 96969, 96976, 96982, 96989, 96996, + 97003, 97010, 97017, 97024, 97030, 97036, 97042, 97048, 97054, 97060, + 97066, 97072, 97078, 97085, 97092, 97099, 97106, 97113, 97120, 97126, + 97132, 97138, 97145, 97152, 97158, 97164, 97173, 97180, 97187, 97194, + 97201, 97208, 97215, 97221, 97227, 97233, 97242, 97249, 97256, 97267, + 97278, 97284, 97290, 97296, 97305, 97312, 97319, 97329, 97339, 97350, + 97361, 97373, 97386, 97397, 97408, 97420, 97433, 97444, 97455, 97466, + 97477, 97488, 97500, 97508, 97516, 97525, 97534, 97543, 97549, 97555, + 97561, 97568, 97578, 97585, 97595, 97600, 97605, 97611, 97617, 97625, + 97633, 97642, 97653, 97664, 97672, 97680, 97689, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 97698, 97709, 97716, 97724, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 97732, 97736, 97740, 97744, 97748, 97752, 97756, 97760, 97764, + 97768, 97772, 97776, 97780, 97784, 97788, 97792, 97796, 97800, 97804, + 97808, 97812, 97816, 97820, 97824, 97828, 97832, 97836, 97840, 97844, + 97848, 97852, 97856, 97860, 97864, 97868, 97872, 97876, 97880, 97884, + 97888, 97892, 97896, 97900, 97904, 97908, 97912, 97916, 97920, 97924, + 97928, 97932, 97936, 97940, 97944, 97948, 97952, 97956, 97960, 97964, + 97968, 97972, 97976, 97980, 97984, 97988, 97992, 97996, 98000, 98004, + 98008, 98012, 98016, 98020, 98024, 98028, 98032, 98036, 98040, 98044, + 98048, 98052, 98056, 98060, 98064, 98068, 98072, 98076, 98080, 98084, + 98088, 98092, 98096, 98100, 98104, 98108, 98112, 98116, 98120, 98124, + 98128, 98132, 98136, 98140, 98144, 98148, 98152, 98156, 98160, 98164, + 98168, 98172, 98176, 98180, 98184, 98188, 98192, 98196, 98200, 98204, + 98208, 98212, 98216, 98220, 98224, 98228, 98232, 98236, 98240, 98244, + 98248, 98252, 98256, 98260, 98264, 98268, 98272, 98276, 98280, 98284, + 98288, 98292, 98296, 98300, 98304, 98308, 98312, 98316, 98320, 98324, + 98328, 98332, 98336, 98340, 98344, 98348, 98352, 98356, 98360, 98364, + 98368, 98372, 98376, 98380, 98384, 98388, 98392, 98396, 98400, 98404, + 98408, 98412, 98416, 98420, 98424, 98428, 98432, 98436, 98440, 98444, + 98448, 98452, 98456, 98460, 98464, 98468, 98472, 98476, 98480, 98484, + 98488, 98492, 98496, 98500, 98504, 98508, 98512, 98516, 98520, 98524, + 98528, 98532, 98536, 98540, 98544, 98548, 98552, 98556, 98560, 98564, + 98568, 98572, 98576, 98580, 98584, 98588, 98592, 98596, 98600, 98604, + 98608, 98612, 98616, 98620, 98624, 98628, 98632, 98636, 98640, 98644, + 98648, 98652, 98656, 98660, 98664, 98668, 98672, 98676, 98680, 98684, + 98688, 98692, 98696, 98700, 98704, 98708, 98712, 98716, 98720, 98724, + 98728, 98732, 98736, 98740, 98744, 98748, 98752, 98756, 98760, 98764, + 98768, 98772, 98776, 98780, 98784, 98788, 98792, 98796, 98800, 98804, + 98808, 98812, 98816, 98820, 98824, 98828, 98832, 98836, 98840, 98844, + 98848, 98852, 98856, 98860, 98864, 98868, 98872, 98876, 98880, 98884, + 98888, 98892, 98896, 98900, 98904, 98908, 98912, 98916, 98920, 98924, + 98928, 98932, 98936, 98940, 98944, 98948, 98952, 98956, 98960, 98964, + 98968, 98972, 98976, 98980, 98984, 98988, 98992, 98996, 99000, 99004, + 99008, 99012, 99016, 99020, 99024, 99028, 99032, 99036, 99040, 99044, + 99048, 99052, 99056, 99060, 99064, 99068, 99072, 99076, 99080, 99084, + 99088, 99092, 99096, 99100, 99104, 99108, 99112, 99116, 99120, 99124, + 99128, 99132, 99136, 99140, 99144, 99148, 99152, 99156, 99160, 99164, + 99168, 99172, 99176, 99180, 99184, 99188, 99192, 99196, 99200, 99204, + 99208, 99212, 99216, 99220, 99224, 99228, 99232, 99236, 99240, 99244, + 99248, 99252, 99256, 99260, 99264, 99268, 99272, 99276, 99280, 99284, + 99288, 99292, 99296, 99300, 99304, 99308, 99312, 99316, 99320, 99324, + 99328, 99332, 99336, 99340, 99344, 99348, 99352, 99356, 99360, 99364, + 99368, 99372, 99376, 99380, 99384, 99388, 99392, 99396, 99400, 99404, + 99408, 99412, 99416, 99420, 99424, 99428, 99432, 99436, 99440, 99444, + 99448, 99452, 99456, 99460, 99464, 99468, 99472, 99476, 99480, 99484, + 99488, 99492, 99496, 99500, 99504, 99508, 99512, 99516, 99520, 99524, + 99528, 99532, 99536, 99540, 99544, 99548, 99552, 99556, 99560, 99564, + 99568, 99572, 99576, 99580, 99584, 99588, 99592, 99596, 99600, 99604, + 99608, 99612, 99616, 99620, 99624, 99628, 99632, 99636, 99640, 99644, + 99648, 99652, 99656, 99660, 99664, 99668, 99672, 99676, 99680, 99684, + 99688, 99692, 99696, 99700, 99704, 99708, 99712, 99716, 99720, 99724, + 99728, 99732, 99736, 99740, 99744, 99748, 99752, 99756, 99760, 99764, + 99768, 99772, 99776, 99780, 99784, 99788, 99792, 99796, 99800, 99804, + 99808, 99812, 99816, 99820, 99824, 99828, 99832, 99836, 99840, 99844, + 99848, 99852, 99856, 99860, 99864, 99868, 99872, 99876, 99880, 99884, + 99888, 99892, 99896, 99900, 99904, 99908, 99912, 99916, 99920, 99924, + 99928, 99932, 99936, 99940, 99944, 99948, 99952, 99956, 99960, 99964, + 99968, 99972, 99976, 99980, 99984, 99988, 99992, 99996, 100000, 100004, + 100008, 100012, 100016, 100020, 100024, 100028, 100032, 100036, 100040, + 100044, 100048, 100052, 100056, 100060, 100064, 100068, 100072, 100076, + 100080, 100084, 100088, 100092, 100096, 100100, 100104, 100108, 100112, + 100116, 100120, 100124, 100128, 100132, 100136, 100140, 100144, 100148, + 100152, 100156, 100160, 100164, 100168, 100172, 100176, 100180, 100184, + 100188, 100192, 100196, 100200, 100204, 100208, 100212, 100216, 100220, + 100224, 100228, 100232, 100236, 100240, 100244, 100248, 100252, 100256, + 100260, 100264, 100268, 100272, 100276, 100280, 100284, 100288, 100292, + 100296, 100300, 100304, 100308, 100312, 100316, 100320, 100324, 100328, + 100332, 100336, 100340, 100344, 100348, 100352, 100356, 100360, 100364, + 100368, 100372, 100376, 100380, 100384, 100388, 100392, 100396, 100400, + 100404, 100408, 100412, 100416, 100420, 100424, 100428, 100432, 100436, + 100440, 100444, 100448, 100452, 100456, 100460, 100464, 100468, 100472, + 100476, 100480, 100484, 100488, 100492, 100496, 100500, 100504, 100508, + 100512, 100516, 100520, 100524, 100528, 100532, 100536, 100540, 100544, + 100548, 100552, 100556, 100560, 100564, 100568, 100572, 100576, 100580, + 100584, 100588, 100592, 100596, 100600, 100604, 100608, 100612, 100616, + 100620, 100624, 100628, 100632, 100636, 100640, 100644, 100648, 100652, + 100656, 100660, 100664, 100668, 100672, 100676, 100680, 100684, 100688, + 100692, 100696, 100700, 100704, 100708, 100712, 100716, 100720, 100724, + 100728, 100732, 100736, 100740, 100744, 100748, 100752, 100756, 100760, + 100764, 100768, 100772, 100776, 100780, 100784, 100788, 100792, 100796, + 100800, 100804, 100808, 100812, 100816, 100820, 100824, 100828, 100832, + 100836, 100840, 100844, 100848, 100852, 100856, 100860, 100864, 100868, + 100872, 100876, 100880, 100884, 100888, 100892, 100896, 100900, 100904, + 100908, 100912, 100916, 100920, 100924, 100928, 100932, 100936, 100940, + 100944, 100948, 100952, 100956, 100960, 100964, 100968, 100972, 100976, + 100980, 100984, 100988, 100992, 100996, 101000, 101004, 101008, 101012, + 101016, 101020, 101024, 101028, 101032, 101036, 101040, 101044, 101048, + 101052, 101056, 101060, 101064, 101068, 101072, 101076, 101080, 101084, + 101088, 101092, 101096, 101100, 101104, 101108, 101112, 101116, 101120, + 101124, 101128, 101132, 101136, 101140, 101144, 101148, 101152, 101156, + 101160, 101164, 101168, 101172, 101176, 101180, 101184, 101188, 101192, + 101196, 101200, 101204, 101208, 101212, 101216, 101220, 101224, 101228, + 101232, 101236, 101240, 101244, 101248, 101252, 101256, 101260, 101264, + 101268, 101272, 101276, 101280, 101284, 101288, 101292, 101296, 101300, + 101304, 101308, 101312, 101316, 101320, 101324, 101328, 101332, 101336, + 101340, 101344, 101348, 101352, 101356, 101360, 101364, 101368, 101372, + 101376, 101380, 101384, 101388, 101392, 101396, 101400, 101404, 101408, + 101412, 101416, 101420, 101424, 101428, 101432, 101436, 101440, 101444, + 101448, 101452, 101456, 101460, 101464, 101468, 101472, 101476, 101480, + 101484, 101488, 101492, 101496, 101500, 101504, 101508, 101512, 101516, + 101520, 101524, 101528, 101532, 101536, 101540, 101544, 101548, 101552, + 101556, 101560, 101564, 101568, 101572, 101576, 101580, 101584, 101588, + 101592, 101596, 101600, 101604, 101608, 101612, 101616, 101620, 101624, + 101628, 101632, 101636, 101640, 101644, 101648, 101652, 101656, 101660, + 101664, 101668, 101672, 101676, 101680, 101684, 101688, 101692, 101696, + 101700, 101704, 101708, 101712, 101716, 101720, 101724, 101728, 101732, + 101736, 101740, 101744, 101748, 101752, 101756, 101760, 101764, 101768, + 101772, 101776, 101780, 101784, 101788, 101792, 101796, 101800, 101804, + 101808, 101812, 101816, 101820, 101824, 101828, 101832, 101836, 101840, + 101844, 101848, 101852, 101856, 101860, 101864, 101868, 101872, 101876, + 101880, 101884, 101888, 101892, 101896, 101900, 101904, 101908, 101912, + 101916, 101920, 101924, 101928, 101932, 101936, 101940, 101944, 101948, + 101952, 101956, 101960, 101964, 101968, 101972, 101976, 101980, 101984, + 101988, 101992, 101996, 102000, 102004, 102008, 102012, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 102016, 102021, 102026, 102031, 102038, 102045, 102052, 102059, + 102064, 102069, 102074, 102079, 102086, 102091, 102098, 102105, 102110, + 102115, 102120, 102127, 102132, 102137, 102144, 102151, 102156, 102161, + 102166, 102173, 102180, 102187, 102192, 102197, 102204, 102211, 102218, + 102225, 102230, 102235, 102240, 102247, 102252, 102257, 102262, 102269, + 102278, 102285, 102290, 102295, 102300, 102305, 102310, 102315, 102324, + 102331, 102336, 102343, 102350, 102355, 102360, 102365, 102372, 102377, + 102384, 102391, 102396, 102401, 102406, 102413, 102420, 102425, 102430, + 102437, 102444, 102451, 102456, 102461, 102466, 102471, 102478, 102487, + 102496, 102501, 102508, 102517, 102522, 102527, 102532, 102537, 102544, + 102551, 102558, 102565, 102570, 102575, 102580, 102587, 102594, 102601, + 102606, 102611, 102618, 102623, 102630, 102635, 102642, 102647, 102654, + 102661, 102666, 102671, 102676, 102681, 102686, 102691, 102696, 102701, + 102706, 102713, 102720, 102727, 102734, 102741, 102750, 102755, 102760, + 102767, 102774, 102779, 102786, 102793, 102800, 102807, 102814, 102821, + 102826, 102831, 102836, 102841, 102846, 102855, 102864, 102873, 102882, + 102891, 102900, 102909, 102918, 102923, 102934, 102945, 102954, 102959, + 102964, 102969, 102974, 102983, 102990, 102997, 103004, 103011, 103018, + 103025, 103034, 103043, 103054, 103063, 103074, 103083, 103090, 103099, + 103110, 103119, 103128, 103137, 103146, 103153, 103160, 103167, 103176, + 103185, 103196, 103205, 103214, 103225, 103230, 103235, 103246, 103254, + 103263, 103272, 103281, 103292, 103301, 103310, 103321, 103332, 103343, + 103354, 103365, 103376, 103383, 103390, 103397, 103404, 103415, 103424, + 103431, 103438, 103445, 103456, 103467, 103478, 103489, 103500, 103511, + 103522, 103533, 103540, 103547, 103556, 103565, 103572, 103579, 103586, + 103595, 103604, 103613, 103620, 103629, 103638, 103647, 103654, 103661, + 103666, 103672, 103679, 103686, 103693, 103700, 103707, 103714, 103723, + 103732, 103741, 103750, 103757, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 103766, + 103772, 103777, 103782, 103789, 103795, 103801, 103807, 103813, 103819, + 103825, 103831, 103835, 103839, 103845, 103851, 103857, 103861, 103866, + 103871, 103875, 103879, 103882, 103888, 103894, 103900, 103906, 103912, + 103918, 103924, 103930, 103936, 103946, 103956, 103962, 103968, 103978, + 103988, 103994, 0, 0, 104000, 104008, 104013, 104018, 104024, 104030, + 104036, 104042, 104048, 104054, 104061, 104068, 104074, 104080, 104086, + 104092, 104098, 104104, 104110, 104116, 104121, 104127, 104133, 104139, + 104145, 104151, 104160, 104166, 104171, 104179, 104186, 104193, 104202, + 104211, 104220, 104229, 104238, 104247, 104256, 104265, 104275, 104285, + 104293, 104301, 104310, 104319, 104325, 104331, 104337, 104343, 104351, + 104359, 104363, 104369, 104374, 104380, 104386, 104392, 104398, 104404, + 104413, 104418, 104425, 104430, 104435, 104440, 104446, 104452, 104458, + 104465, 104470, 104475, 104480, 104485, 104490, 104496, 104502, 104508, + 104514, 104520, 104526, 104532, 104538, 104543, 104548, 104553, 104558, + 104563, 104568, 104573, 104578, 104584, 104590, 104595, 104600, 104605, + 104610, 104615, 104621, 104628, 104632, 104636, 104640, 104644, 104648, + 104652, 104656, 104660, 104668, 104678, 104682, 104686, 104692, 104698, + 104704, 104710, 104716, 104722, 104728, 104734, 104740, 104746, 104752, + 104758, 104764, 104770, 104774, 104778, 104785, 104791, 104797, 104803, + 104808, 104815, 104820, 104826, 104832, 104838, 104844, 104849, 104853, + 104859, 104863, 104867, 104871, 104877, 104883, 104887, 104893, 104899, + 104905, 104911, 104917, 104925, 104933, 104939, 104945, 104951, 104957, + 104969, 104981, 104995, 105007, 105019, 105033, 105047, 105061, 105065, + 105073, 105081, 105086, 105090, 105094, 105098, 105102, 105106, 105110, + 105114, 105120, 105126, 105132, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 105138, + 105144, 105150, 105156, 105162, 105168, 105174, 105180, 105186, 105192, + 105198, 105204, 105210, 105216, 105222, 105228, 105234, 105240, 105246, + 105252, 105258, 105264, 105270, 105276, 105282, 105288, 105294, 105300, + 105306, 105312, 105318, 105324, 105330, 105336, 105342, 105348, 105354, + 105360, 105366, 105372, 105378, 105384, 105390, 105396, 105402, 105408, + 105414, 105420, 105426, 105432, 105438, 105444, 105450, 105456, 105462, + 105468, 105474, 105480, 105486, 105492, 105498, 105504, 105510, 105516, + 105522, 105528, 105534, 105539, 105544, 105549, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 105553, 105558, 105565, 105572, 105579, 105586, 105591, 105595, + 105601, 105605, 105609, 105615, 105619, 105623, 105627, 105633, 105640, + 105644, 105648, 105652, 105656, 105660, 105664, 105670, 105674, 105678, + 105682, 105686, 105690, 105694, 105698, 105702, 105706, 105710, 105714, + 105718, 105723, 105727, 105731, 105735, 105739, 105743, 105747, 105751, + 105755, 105759, 105766, 105770, 105777, 105781, 105785, 105789, 105793, + 105797, 105801, 105805, 105812, 105816, 105820, 105824, 105828, 105832, + 105838, 105842, 105848, 105852, 105856, 105860, 105864, 105868, 105872, + 105876, 105880, 105884, 105888, 105892, 105896, 105900, 105904, 105908, + 105912, 105916, 105920, 105924, 105932, 105936, 105940, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 105944, 105952, 105960, 105968, 105976, 105984, 105992, 106000, + 106008, 106016, 106024, 106032, 106040, 106048, 106056, 106064, 106072, + 106080, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 106088, 106092, 106097, + 106102, 106107, 106111, 106116, 106121, 106126, 106130, 106135, 106140, + 106144, 106148, 106152, 106156, 106161, 106166, 106170, 106174, 106179, + 106183, 106188, 106193, 106198, 106203, 106208, 106212, 106217, 106222, + 106227, 106231, 106236, 106241, 106246, 106250, 106255, 106260, 106264, + 106268, 106272, 106276, 106281, 106286, 106290, 106294, 106299, 106303, + 106308, 106313, 106318, 106323, 106328, 106332, 106337, 106342, 106347, + 106351, 106356, 106361, 106366, 106370, 106375, 106380, 106384, 106388, + 106392, 106396, 106401, 106406, 106410, 106414, 106419, 106423, 106428, + 106433, 106438, 106443, 106448, 106452, 106457, 106462, 106467, 106471, + 106476, 0, 106481, 106485, 106490, 106495, 106499, 106503, 106507, + 106511, 106516, 106521, 106525, 106529, 106534, 106538, 106543, 106548, + 106553, 106558, 106563, 106568, 106574, 106580, 106586, 106591, 106597, + 106603, 106609, 106614, 106620, 106626, 106631, 106636, 106641, 106646, + 106652, 106658, 106663, 106668, 106674, 106679, 106685, 106691, 106697, + 106703, 106709, 106714, 106720, 106726, 106732, 106737, 106743, 106749, + 106755, 106760, 106766, 106772, 106777, 106782, 106787, 106792, 106798, + 106804, 106809, 106814, 106820, 106825, 106831, 106837, 106843, 106849, + 106855, 0, 106859, 106864, 0, 0, 106869, 0, 0, 106874, 106879, 0, 0, + 106884, 106888, 106892, 106897, 0, 106902, 106906, 106911, 106915, + 106920, 106925, 106930, 106935, 106940, 106944, 106949, 106954, 0, + 106959, 0, 106964, 106969, 106973, 106978, 106983, 106987, 106991, 0, + 106995, 107000, 107005, 107009, 107013, 107018, 107022, 107027, 107032, + 107037, 107042, 107047, 107052, 107058, 107064, 107070, 107075, 107081, + 107087, 107093, 107098, 107104, 107110, 107115, 107120, 107125, 107130, + 107136, 107142, 107147, 107152, 107158, 107163, 107169, 107175, 107181, + 107187, 107193, 107198, 107204, 107210, 107216, 107221, 107227, 107233, + 107239, 107244, 107250, 107256, 107261, 107266, 107271, 107276, 107282, + 107288, 107293, 107298, 107304, 107309, 107315, 107321, 107327, 107333, + 107339, 107343, 0, 107348, 107353, 107357, 107362, 0, 0, 107367, 107372, + 107377, 107381, 107385, 107389, 107393, 107398, 0, 107403, 107407, + 107412, 107416, 107421, 107426, 107431, 0, 107436, 107440, 107445, + 107450, 107455, 107459, 107464, 107469, 107474, 107478, 107483, 107488, + 107492, 107496, 107500, 107504, 107509, 107514, 107518, 107522, 107527, + 107531, 107536, 107541, 107546, 107551, 107556, 107560, 0, 107565, + 107570, 107574, 107579, 0, 107584, 107588, 107593, 107598, 107602, 0, + 107606, 0, 0, 0, 107610, 107614, 107619, 107623, 107628, 107633, 107638, + 0, 107643, 107647, 107652, 107657, 107662, 107666, 107671, 107676, + 107681, 107685, 107690, 107695, 107699, 107703, 107707, 107711, 107716, + 107721, 107725, 107729, 107734, 107738, 107743, 107748, 107753, 107758, + 107763, 107768, 107774, 107780, 107786, 107791, 107797, 107803, 107809, + 107814, 107820, 107826, 107831, 107836, 107841, 107846, 107852, 107858, + 107863, 107868, 107874, 107879, 107885, 107891, 107897, 107903, 107909, + 107914, 107920, 107926, 107932, 107937, 107943, 107949, 107955, 107960, + 107966, 107972, 107977, 107982, 107987, 107992, 107998, 108004, 108009, + 108014, 108020, 108025, 108031, 108037, 108043, 108049, 108055, 108059, + 108064, 108069, 108074, 108078, 108083, 108088, 108093, 108097, 108102, + 108107, 108111, 108115, 108119, 108123, 108128, 108133, 108137, 108141, + 108146, 108150, 108155, 108160, 108165, 108170, 108175, 108179, 108184, + 108189, 108194, 108198, 108203, 108208, 108213, 108217, 108222, 108227, + 108231, 108235, 108239, 108243, 108248, 108253, 108257, 108261, 108266, + 108270, 108275, 108280, 108285, 108290, 108295, 108300, 108306, 108312, + 108318, 108323, 108329, 108335, 108341, 108346, 108352, 108358, 108363, + 108368, 108373, 108378, 108384, 108390, 108395, 108400, 108406, 108411, + 108417, 108423, 108429, 108435, 108441, 108446, 108452, 108458, 108464, + 108469, 108475, 108481, 108487, 108492, 108498, 108504, 108509, 108514, + 108519, 108524, 108530, 108536, 108541, 108546, 108552, 108557, 108563, + 108569, 108575, 108581, 108587, 108592, 108598, 108604, 108610, 108615, + 108621, 108627, 108633, 108638, 108644, 108650, 108655, 108660, 108665, + 108670, 108676, 108682, 108687, 108692, 108698, 108703, 108709, 108715, + 108721, 108727, 108733, 108738, 108744, 108750, 108756, 108761, 108767, + 108773, 108779, 108784, 108790, 108796, 108801, 108806, 108811, 108816, + 108822, 108828, 108833, 108838, 108844, 108849, 108855, 108861, 108867, + 108873, 108879, 108885, 108892, 108899, 108906, 108912, 108919, 108926, + 108933, 108939, 108946, 108953, 108959, 108965, 108971, 108977, 108984, + 108991, 108997, 109003, 109010, 109016, 109023, 109030, 109037, 109044, + 109051, 109057, 109064, 109071, 109078, 109084, 109091, 109098, 109105, + 109111, 109118, 109125, 109131, 109137, 109143, 109149, 109156, 109163, + 109169, 109175, 109182, 109188, 109195, 109202, 109209, 109216, 109223, + 109227, 109232, 109237, 109242, 109246, 109251, 109256, 109261, 109265, + 109270, 109275, 109279, 109283, 109287, 109291, 109296, 109301, 109305, + 109309, 109314, 109318, 109323, 109328, 109333, 109338, 109343, 109347, + 109352, 109357, 109362, 109366, 109371, 109376, 109381, 109385, 109390, + 109395, 109399, 109403, 109407, 109411, 109416, 109421, 109425, 109429, + 109434, 109438, 109443, 109448, 109453, 109458, 109463, 109469, 0, 0, + 109476, 109481, 109486, 109491, 109496, 109501, 109506, 109511, 109516, + 109521, 109526, 109531, 109536, 109541, 109546, 109551, 109556, 109561, + 109567, 109572, 109577, 109582, 109587, 109592, 109597, 109602, 109606, + 109611, 109616, 109621, 109626, 109631, 109636, 109641, 109646, 109651, + 109656, 109661, 109666, 109671, 109676, 109681, 109686, 109691, 109697, + 109702, 109707, 109712, 109717, 109722, 109727, 109732, 109738, 109743, + 109748, 109753, 109758, 109763, 109768, 109773, 109778, 109783, 109788, + 109793, 109798, 109803, 109808, 109813, 109818, 109823, 109828, 109833, + 109838, 109843, 109848, 109853, 109859, 109864, 109869, 109874, 109879, + 109884, 109889, 109894, 109898, 109903, 109908, 109913, 109918, 109923, + 109928, 109933, 109938, 109943, 109948, 109953, 109958, 109963, 109968, + 109973, 109978, 109983, 109989, 109994, 109999, 110004, 110009, 110014, + 110019, 110024, 110030, 110035, 110040, 110045, 110050, 110055, 110060, + 110066, 110072, 110078, 110084, 110090, 110096, 110102, 110108, 110114, + 110120, 110126, 110132, 110138, 110144, 110150, 110156, 110162, 110169, + 110175, 110181, 110187, 110193, 110199, 110205, 110211, 110216, 110222, + 110228, 110234, 110240, 110246, 110252, 110258, 110264, 110270, 110276, + 110282, 110288, 110294, 110300, 110306, 110312, 110318, 110325, 110331, + 110337, 110343, 110349, 110355, 110361, 110367, 110374, 110380, 110386, + 110392, 110398, 110404, 110410, 110416, 110422, 110428, 110434, 110440, + 110446, 110452, 110458, 110464, 110470, 110476, 110482, 110488, 110494, + 110500, 110506, 110512, 110519, 110525, 110531, 110537, 110543, 110549, + 110555, 110561, 110566, 110572, 110578, 110584, 110590, 110596, 110602, + 110608, 110614, 110620, 110626, 110632, 110638, 110644, 110650, 110656, + 110662, 110668, 110675, 110681, 110687, 110693, 110699, 110705, 110711, + 110717, 110724, 110730, 110736, 110742, 110748, 110754, 110760, 110767, + 110774, 110781, 110788, 110795, 110802, 110809, 110816, 110823, 110830, + 110837, 110844, 110851, 110858, 110865, 110872, 110879, 110887, 110894, + 110901, 110908, 110915, 110922, 110929, 110936, 110942, 110949, 110956, + 110963, 110970, 110977, 110984, 110991, 110998, 111005, 111012, 111019, + 111026, 111033, 111040, 111047, 111054, 111061, 111069, 111076, 111083, + 111090, 111097, 111104, 111111, 111118, 111126, 111133, 111140, 111147, + 111154, 111161, 111168, 111173, 0, 0, 111178, 111183, 111187, 111191, + 111195, 111199, 111203, 111207, 111211, 111215, 111219, 111224, 111228, + 111232, 111236, 111240, 111244, 111248, 111252, 111256, 111260, 111265, + 111269, 111273, 111277, 111281, 111285, 111289, 111293, 111297, 111301, + 111307, 111312, 111317, 111322, 111327, 111332, 111337, 111342, 111347, + 111352, 111357, 111361, 111365, 111369, 111373, 111377, 111381, 111385, + 111389, 111393, 111400, 111407, 111414, 111421, 111428, 111435, 111441, + 111448, 111455, 111462, 111470, 111478, 111486, 111494, 111502, 111510, + 111517, 111524, 111531, 111539, 111547, 111555, 111563, 111571, 111579, + 111586, 111593, 111600, 111608, 111616, 111624, 111632, 111640, 111648, + 111653, 111658, 111663, 111668, 111673, 111678, 111683, 111688, 111693, + 0, 0, 0, 0, 111698, 111703, 111707, 111711, 111715, 111719, 111723, + 111727, 111731, 111735, 111739, 111743, 111747, 111751, 111755, 111759, + 111763, 111767, 111771, 111775, 111779, 111783, 111787, 111791, 111795, + 111799, 111803, 111807, 111811, 111815, 111819, 111823, 111827, 111831, + 111835, 111839, 111843, 111847, 111851, 111855, 111859, 111863, 111867, + 111871, 111875, 111879, 111883, 111887, 111891, 111895, 111899, 111904, + 111908, 111912, 111916, 111920, 111924, 111928, 111932, 111936, 111940, + 111944, 111948, 111952, 111956, 111960, 111964, 111968, 111972, 111976, + 111980, 111984, 111988, 111992, 111996, 112000, 112004, 112008, 112012, + 112016, 112020, 112024, 112028, 112032, 112036, 112040, 112044, 112048, + 112052, 112056, 112060, 112064, 112068, 112072, 112076, 112080, 112084, + 112088, 112092, 112096, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 112100, + 112107, 112112, 112116, 112120, 112124, 112129, 112134, 112139, 112144, + 112149, 0, 0, 0, 0, 0, 112154, 112159, 112165, 112171, 112177, 112182, + 112188, 112194, 112200, 112205, 112211, 112217, 112222, 112227, 112232, + 112237, 112243, 112249, 112254, 112259, 112265, 112270, 112276, 112282, + 112288, 112294, 112300, 112310, 112317, 112323, 112326, 0, 0, 112329, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 112335, 0, 112340, 0, 0, 112346, 0, 0, 0, + 112351, 0, 0, 0, 112357, 112360, 112363, 112366, 112369, 0, 0, 0, 0, 0, + 0, 0, 0, 112372, 0, 0, 0, 0, 0, 0, 0, 112380, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 112388, 0, 112396, + 112403, 0, 0, 112410, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 112418, 112428, + 112433, 112437, 0, 0, 112442, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 112445, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 112449, 112455, + 112461, 112467, 112471, 112477, 112483, 112489, 112495, 112501, 112507, + 112513, 112519, 112525, 112531, 112537, 112543, 112549, 112555, 112561, + 112567, 112573, 112579, 112585, 112591, 112597, 112603, 112609, 112615, + 112621, 112627, 112633, 112639, 112645, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 112651, 112662, 112673, 112684, 112695, 112706, 112717, 112728, + 112739, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 112750, 112754, 112758, 112762, 112766, + 112770, 112774, 112778, 112782, 112786, 112790, 112794, 112798, 112802, + 112806, 112810, 112814, 112818, 112822, 112826, 112830, 112834, 112838, + 112842, 112846, 112850, 112854, 112858, 112862, 112866, 112870, 112874, + 112878, 112882, 112886, 112890, 112894, 112898, 112902, 112906, 112910, + 112914, 112918, 112922, 112926, 112930, 112934, 112938, 112942, 112946, + 112950, 112954, 112958, 112962, 112966, 112970, 112974, 112978, 112982, + 112986, 112990, 112994, 112998, 113002, 113006, 113010, 113014, 113018, + 113022, 113026, 113030, 113034, 113038, 113042, 113046, 113050, 113054, + 113058, 113062, 113066, 113070, 113074, 113078, 113082, 113086, 113090, + 113094, 113098, 113102, 113106, 113110, 113114, 113118, 113122, 113126, + 113130, 113134, 113138, 113142, 113146, 113150, 113154, 113158, 113162, + 113166, 113170, 113174, 113178, 113182, 113186, 113190, 113194, 113198, + 113202, 113206, 113210, 113214, 113218, 113222, 113226, 113230, 113234, + 113238, 113242, 113246, 113250, 113254, 113258, 113262, 113266, 113270, + 113274, 113278, 113282, 113286, 113290, 113294, 113298, 113302, 113306, + 113310, 113314, 113318, 113322, 113326, 113330, 113334, 113338, 113342, + 113346, 113350, 113354, 113358, 113362, 113366, 113370, 113374, 113378, + 113382, 113386, 113390, 113394, 113398, 113402, 113406, 113410, 113414, + 113418, 113422, 113426, 113430, 113434, 113438, 113442, 113446, 113450, + 113454, 113458, 113462, 113466, 113470, 113474, 113478, 113482, 113486, + 113490, 113494, 113498, 113502, 113506, 113510, 113514, 113518, 113522, + 113526, 113530, 113534, 113538, 113542, 113546, 113550, 113554, 113558, + 113562, 113566, 113570, 113574, 113578, 113582, 113586, 113590, 113594, + 113598, 113602, 113606, 113610, 113614, 113618, 113622, 113626, 113630, + 113634, 113638, 113642, 113646, 113650, 113654, 113658, 113662, 113666, + 113670, 113674, 113678, 113682, 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, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 114918, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 114922, 114925, 114929, 114933, 114936, 114940, 114944, 114947, + 114950, 114954, 114958, 114961, 114964, 114967, 114970, 114975, 114978, + 114982, 114985, 114988, 114991, 114994, 114997, 115000, 115003, 115006, + 115009, 115012, 115015, 115019, 115023, 115027, 115031, 115036, 115041, + 115047, 115053, 115059, 115064, 115070, 115076, 115082, 115087, 115093, + 115099, 115104, 115109, 115114, 115119, 115125, 115131, 115136, 115141, + 115147, 115152, 115158, 115164, 115170, 115176, 115182, 115186, 115191, + 115195, 115200, 115204, 115209, 115214, 115220, 115226, 115232, 115237, + 115243, 115249, 115255, 115260, 115266, 115272, 115277, 115282, 115287, + 115292, 115298, 115304, 115309, 115314, 115320, 115325, 115331, 115337, + 115343, 115349, 115355, 115360, 115364, 115369, 115372, 115376, 115379, + 115382, 115385, 115388, 115391, 115394, 115397, 115400, 115403, 115406, + 115409, 115412, 115415, 115418, 115421, 115424, 115427, 115430, 115433, + 115436, 115439, 115442, 115445, 115448, 115451, 115454, 115457, 115460, + 115463, 115466, 115469, 115472, 115475, 115478, 115481, 115484, 115487, + 115490, 115493, 115496, 115499, 115502, 115505, 115508, 115511, 115514, + 115517, 115520, 115523, 115526, 115529, 115532, 115535, 115538, 115541, + 115544, 115547, 115550, 115553, 115556, 115559, 115562, 115565, 115568, + 115571, 115574, 115577, 115580, 115583, 115586, 115589, 115592, 115595, + 115598, 115601, 115604, 115607, 115610, 115613, 115616, 115619, 115622, + 115625, 115628, 115631, 115634, 115637, 115640, 115643, 115646, 115649, + 115652, 115655, 115658, 115661, 115664, 115667, 115670, 115673, 115676, + 115679, 115682, 115685, 115688, 115691, 115694, 115697, 115700, 115703, + 115706, 115709, 115712, 115715, 115718, 115721, 115724, 115727, 115730, + 115733, 115736, 115739, 115742, 115745, 115748, 115751, 115754, 115757, + 115760, 115763, 115766, 115769, 115772, 115775, 115778, 115781, 115784, + 115787, 115790, 115793, 115796, 115799, 115802, 115805, 115808, 115811, + 115814, 115817, 115820, 115823, 115826, 115829, 115832, 115835, 115838, + 115841, 115844, 115847, 115850, 115853, 115856, 115859, 115862, 115865, + 115868, 115871, 115874, 115877, 115880, 115883, 115886, 115889, 115892, + 115895, 115898, 115901, 115904, 115907, 115910, 115913, 115916, 115919, + 115922, 115925, 115928, 115931, 115934, 115937, 115940, 115943, 115946, + 115949, 115952, 115955, 115958, 115961, 115964, 115967, 115970, 115973, + 115976, 115979, 115982, 115985, 115988, 115991, 115994, 115997, 116000, + 116003, 116006, 116009, 116012, 116015, 116018, 116021, 116024, 116027, + 116030, 116033, 116036, 116039, 116042, 116045, 116048, 116051, 116054, + 116057, 116060, 116063, 116066, 116069, 116072, 116075, 116078, 116081, + 116084, 116087, 116090, 116093, 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, 0, 0, 0, 7929, 0, 194682, 0, 0, 66480, 0, 42833, 74529, - 12064, 0, 596, 0, 0, 65842, 8651, 0, 0, 120218, 12995, 64865, 1373, 0, 0, - 5816, 119067, 64810, 4231, 917833, 0, 4233, 4234, 4232, 917836, 0, - 120210, 917841, 917840, 0, 8851, 0, 0, 0, 41601, 8874, 0, 7748, 0, 0, 0, - 0, 41603, 9784, 0, 9188, 41600, 0, 0, 0, 1457, 3535, 0, 0, 0, 0, 65240, - 11951, 0, 3404, 0, 0, 0, 1759, 0, 194964, 0, 0, 0, 66577, 0, 0, 65859, 0, - 0, 0, 0, 0, 0, 65930, 9834, 3055, 9852, 0, 65288, 0, 11398, 0, 0, 119255, - 0, 0, 603, 0, 43548, 0, 0, 917824, 3350, 120817, 64318, 917828, 127089, - 3390, 74483, 43265, 120599, 917830, 917829, 0, 1919, 3400, 0, 917813, 0, - 917540, 66446, 64141, 8562, 64139, 64138, 4043, 8712, 64134, 64133, - 11297, 0, 0, 11966, 64128, 0, 0, 0, 64132, 10867, 64130, 64129, 0, 0, - 9779, 2764, 66002, 0, 9471, 0, 66021, 0, 0, 5457, 5440, 8857, 0, 65282, - 2843, 5355, 0, 0, 0, 5194, 11657, 0, 0, 0, 0, 0, 0, 127027, 10717, 64570, - 5630, 74350, 64143, 10682, 0, 10602, 800, 42499, 66186, 0, 0, 64930, - 11631, 64146, 64145, 64144, 762, 13172, 118859, 0, 0, 10906, 1353, 6960, - 0, 0, 5828, 8724, 917806, 8933, 1601, 42244, 858, 7080, 917808, 917807, - 8090, 0, 74401, 917811, 587, 0, 0, 0, 0, 0, 0, 2750, 0, 556, 64158, - 64157, 0, 12213, 0, 2760, 0, 0, 0, 0, 64156, 64155, 42496, 0, 64151, - 64150, 12679, 10053, 10421, 11787, 64153, 64152, 0, 0, 4839, 0, 0, 1874, - 120352, 0, 6577, 64125, 64124, 64123, 0, 0, 0, 7007, 7590, 65443, 9036, - 0, 64122, 74422, 66609, 0, 64117, 64116, 6287, 64114, 2725, 64120, 64119, - 64118, 42128, 0, 1177, 65601, 12322, 64106, 0, 0, 64102, 7859, 1945, - 64099, 0, 10453, 64104, 7188, 7997, 0, 0, 0, 8705, 64097, 64096, 9571, - 528, 917989, 0, 11429, 0, 0, 0, 0, 73841, 0, 0, 9056, 0, 6188, 120019, - 6155, 64068, 1823, 64066, 64065, 64072, 64071, 63, 7233, 0, 0, 41904, - 6639, 64064, 0, 0, 0, 1176, 118959, 0, 8162, 0, 0, 0, 120519, 66376, - 66242, 11415, 4333, 9855, 64112, 64642, 0, 5388, 0, 0, 0, 7714, 66222, 0, - 7768, 0, 4199, 64708, 0, 0, 0, 8708, 9560, 64077, 64076, 8996, 4992, - 4471, 42622, 64079, 64078, 0, 0, 0, 0, 64615, 0, 0, 12075, 0, 0, 5174, 0, - 0, 0, 3123, 0, 12685, 0, 8408, 64704, 0, 0, 9223, 0, 41616, 0, 73797, 0, - 1116, 0, 43049, 0, 43050, 8548, 0, 0, 119061, 0, 0, 13115, 64092, 64091, - 9322, 0, 120595, 64095, 64094, 8111, 66247, 42332, 64089, 64088, 6199, 0, - 0, 11434, 64083, 64082, 11329, 7737, 64087, 64086, 64085, 64084, 0, 0, - 41335, 4118, 1797, 0, 41334, 0, 46, 0, 0, 298, 0, 0, 0, 42627, 0, 32, - 6187, 119052, 11495, 11459, 3665, 0, 42871, 0, 19923, 74335, 0, 0, 66239, - 0, 64403, 4412, 7240, 0, 0, 0, 65758, 12750, 4181, 8544, 0, 120199, 0, - 120198, 120203, 6181, 65014, 0, 0, 0, 3639, 119588, 0, 0, 0, 10073, - 120206, 0, 0, 0, 42844, 7498, 1098, 0, 0, 0, 0, 10207, 8789, 0, 0, 0, 0, - 9234, 0, 6182, 0, 65058, 0, 0, 0, 0, 5471, 9461, 5573, 118936, 5473, 44, - 0, 66244, 118907, 0, 66238, 12844, 0, 1622, 7767, 1900, 41339, 11458, 0, - 0, 6581, 5576, 0, 64405, 41337, 0, 0, 8947, 0, 0, 41694, 0, 0, 7908, 0, - 10408, 6579, 0, 194829, 0, 0, 0, 6583, 7761, 127010, 120504, 194828, 0, - 5058, 41010, 9992, 0, 5057, 0, 0, 74538, 5054, 118951, 194971, 0, 0, - 1437, 41617, 658, 3497, 0, 7486, 5061, 5060, 4235, 0, 0, 0, 12113, 4236, - 4727, 0, 0, 7693, 10749, 0, 7488, 5773, 978, 0, 0, 41619, 10239, 0, 0, - 66209, 0, 0, 9748, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9341, - 119596, 2379, 11325, 0, 64668, 67854, 8125, 120545, 0, 119175, 917940, - 2369, 0, 0, 0, 119235, 74092, 73936, 7008, 0, 0, 0, 0, 2367, 0, 0, 264, - 2375, 8060, 6194, 119858, 1844, 119084, 0, 12858, 0, 0, 6961, 0, 0, 0, - 8800, 0, 42862, 4463, 65581, 6192, 194676, 42771, 0, 0, 725, 65042, + 74224, 4851, 0, 78156, 78499, 0, 7929, 0, 194682, 0, 78500, 66480, 0, + 42833, 74529, 12064, 0, 596, 0, 0, 13192, 8651, 0, 0, 120218, 12995, + 64865, 1373, 0, 0, 5816, 119067, 64810, 4231, 6825, 0, 4233, 4234, 4232, + 917836, 74415, 120210, 6384, 917840, 78108, 8851, 0, 0, 0, 41601, 8874, + 0, 7748, 0, 0, 0, 0, 41603, 9784, 0, 9188, 41600, 0, 120618, 0, 1457, + 3535, 0, 0, 0, 0, 65240, 11951, 0, 3404, 0, 0, 0, 1759, 0, 41076, 68383, + 120572, 119205, 66577, 0, 0, 65859, 0, 7404, 0, 0, 0, 0, 65908, 9834, + 3055, 9852, 0, 65288, 0, 11398, 0, 0, 119255, 0, 0, 603, 74398, 43548, 0, + 0, 917824, 3350, 120817, 64318, 917828, 127089, 3390, 74483, 43265, + 120599, 917830, 78573, 0, 1919, 3400, 0, 917813, 0, 917540, 66446, 64141, + 8562, 64139, 64138, 4043, 8712, 64134, 64133, 11297, 0, 0, 11966, 64128, + 0, 0, 0, 64132, 10867, 64130, 64129, 0, 43374, 9779, 2764, 66002, 10167, + 9471, 0, 66021, 0, 0, 5457, 5440, 8857, 0, 65282, 2843, 5355, 0, 0, 0, + 5194, 11657, 43984, 0, 0, 0, 0, 0, 127027, 10717, 64570, 5630, 74350, + 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, 0, 0, 0, 0, 78214, 2750, 0, 556, 64158, 64157, 0, + 12213, 194678, 2760, 0, 0, 0, 0, 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, 0, 0, 7007, 7590, 65443, 9036, 0, 64122, + 74422, 66609, 0, 64117, 64116, 6287, 64114, 2725, 64120, 64119, 43981, + 42128, 0, 1177, 65601, 12322, 64106, 0, 127306, 64102, 7859, 1945, 64099, + 0, 10453, 64104, 7188, 7997, 0, 7389, 0, 8705, 64097, 64096, 9571, 528, + 917989, 44017, 11429, 0, 0, 0, 917990, 73841, 0, 0, 9056, 0, 6188, + 120019, 6155, 64068, 1823, 64066, 64065, 64072, 64071, 63, 7233, 120698, + 0, 41904, 6639, 64064, 0, 0, 0, 1176, 118959, 0, 8162, 0, 0, 0, 120519, + 66376, 66242, 11415, 4333, 9855, 64112, 64642, 0, 5388, 0, 0, 0, 7714, + 66222, 0, 7768, 0, 4199, 64708, 0, 0, 0, 8708, 9560, 64077, 64076, 8996, + 4992, 4471, 42622, 64079, 64078, 0, 0, 0, 0, 64615, 0, 0, 12075, 0, 0, + 5174, 0, 0, 127557, 3123, 0, 12685, 0, 8408, 64704, 0, 0, 9223, 0, 41616, + 0, 73797, 0, 1116, 0, 43049, 0, 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, 0, 9927, 41335, 4118, 1797, 0, 41334, 0, 46, 43448, + 0, 298, 0, 0, 0, 42627, 0, 32, 6187, 119052, 11495, 11459, 3665, 0, + 42871, 0, 19923, 74335, 0, 0, 66239, 0, 64403, 4412, 7240, 0, 0, 0, + 65758, 12750, 4181, 8544, 0, 120199, 917897, 120198, 120203, 6181, 65014, + 0, 0, 0, 3639, 119588, 0, 0, 0, 10073, 120206, 0, 0, 68409, 42844, 7498, + 1098, 0, 0, 0, 0, 10207, 8789, 0, 0, 0, 0, 9234, 0, 6182, 0, 65058, 0, 0, + 0, 0, 5471, 9461, 5573, 118936, 5473, 44, 0, 66244, 118907, 0, 66238, + 12844, 0, 1622, 7767, 1900, 41339, 11458, 0, 0, 6581, 5576, 0, 64405, + 41337, 0, 41631, 8947, 68390, 0, 41694, 0, 0, 7908, 0, 10408, 6579, 0, + 64618, 0, 120147, 0, 6583, 7761, 127010, 120504, 194828, 0, 5058, 41010, + 9992, 0, 5057, 0, 0, 74538, 5054, 118951, 194971, 78606, 0, 1437, 41617, + 658, 3497, 0, 7486, 5061, 5060, 4235, 0, 0, 0, 12113, 4236, 4727, 0, 0, + 7693, 10749, 0, 7488, 5773, 978, 0, 0, 41619, 10239, 68611, 0, 66209, 0, + 0, 9748, 0, 127524, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9341, 119596, + 2379, 11325, 0, 64668, 67854, 8125, 120545, 6743, 119175, 917940, 2369, + 0, 0, 0, 119235, 74092, 73936, 7008, 43660, 0, 0, 0, 2367, 0, 0, 264, + 2375, 8060, 6194, 119858, 1844, 119084, 0, 12858, 0, 0, 6961, 0, 118839, + 0, 8800, 0, 42862, 4463, 65581, 6192, 194676, 42771, 0, 0, 725, 65042, 118797, 120800, 0, 12892, 0, 0, 0, 0, 0, 0, 0, 120707, 0, 0, 5074, 5073, - 0, 8983, 0, 917939, 0, 5072, 0, 6198, 11614, 0, 196, 0, 0, 0, 4929, + 0, 8983, 0, 74493, 0, 5072, 0, 6198, 11614, 0, 196, 0, 0, 0, 4929, 120342, 0, 0, 0, 0, 42847, 0, 0, 0, 4934, 0, 41323, 9758, 0, 120341, 0, 42584, 0, 4329, 41321, 4979, 3048, 7752, 41320, 0, 74418, 12819, 0, 5071, - 0, 3642, 0, 5070, 10042, 0, 3987, 5068, 0, 0, 120216, 0, 0, 10636, 73981, - 11806, 43167, 4531, 1245, 9105, 66463, 4921, 120219, 4926, 65544, 73884, - 194619, 0, 0, 64709, 0, 194620, 120790, 4922, 325, 992, 119568, 4925, 0, - 0, 9526, 4920, 0, 948, 0, 120208, 4930, 0, 0, 120275, 4933, 0, 0, 0, - 4928, 0, 0, 74770, 0, 0, 722, 0, 19908, 12637, 0, 119855, 8753, 1509, 0, - 5468, 9511, 0, 0, 1672, 6205, 10864, 74586, 0, 0, 0, 0, 0, 73863, 0, 0, - 41607, 120115, 1679, 120116, 194932, 120113, 0, 7005, 41609, 9580, 0, - 401, 0, 120109, 6968, 5761, 342, 8553, 0, 8143, 127115, 11983, 127113, - 624, 74508, 0, 119630, 5078, 74258, 12478, 0, 5076, 0, 194609, 0, 120097, - 685, 9025, 1524, 12618, 0, 5539, 0, 120095, 120102, 120094, 120552, 0, - 194611, 0, 0, 12520, 8058, 9732, 0, 5080, 64775, 5036, 5035, 120590, - 42604, 0, 0, 8074, 275, 13291, 1907, 0, 4432, 0, 5033, 0, 0, 4836, 3888, - 73792, 10729, 64546, 194600, 120681, 194937, 0, 67588, 119000, 0, 0, - 8858, 6409, 0, 120252, 0, 0, 0, 66321, 0, 12814, 0, 3432, 10218, 0, 6094, + 0, 3642, 0, 5070, 10042, 118835, 3987, 5068, 0, 8909, 78650, 78649, 0, + 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, 0, 120275, + 4933, 0, 0, 118985, 4928, 0, 0, 74770, 120194, 0, 722, 0, 19908, 12637, + 0, 119855, 8753, 1509, 0, 5468, 9511, 0, 0, 1672, 6205, 10864, 74586, 0, + 0, 0, 0, 0, 73863, 0, 0, 41607, 120115, 1679, 120116, 120180, 120113, 0, + 7005, 41609, 9580, 0, 401, 0, 120109, 6968, 5761, 342, 8553, 0, 8143, + 127115, 11983, 127113, 624, 74508, 0, 119630, 5078, 74258, 12478, 0, + 5076, 0, 194609, 0, 120097, 685, 9025, 1524, 12618, 0, 5539, 0, 120095, + 120102, 120094, 120552, 0, 194611, 78752, 0, 12520, 8058, 9732, 0, 5080, + 64775, 5036, 5035, 120590, 42604, 0, 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, 0, 0, 0, 66321, 0, 12814, 127248, 3432, 10218, 0, 6094, 7641, 42445, 0, 0, 42406, 1676, 74320, 194607, 0, 5030, 0, 0, 0, 0, 9622, - 0, 0, 0, 0, 0, 0, 0, 10544, 12919, 0, 0, 0, 0, 0, 0, 0, 947, 119835, - 194586, 194585, 10969, 119935, 7613, 119937, 119936, 4795, 119930, 7018, - 64914, 0, 120192, 120268, 0, 43567, 74056, 917910, 0, 119919, 7216, - 65232, 7217, 251, 7218, 7895, 4395, 43538, 119926, 119929, 119928, 7213, - 119922, 7214, 7215, 0, 74141, 8880, 7685, 0, 120173, 65540, 119618, 625, - 8187, 42861, 1113, 7236, 7915, 3630, 120176, 8179, 74264, 67886, 9316, - 10980, 2489, 65624, 8150, 1359, 0, 0, 0, 73756, 5042, 5041, 42769, 12084, - 0, 0, 0, 0, 0, 0, 0, 0, 12283, 1616, 3795, 0, 8795, 66245, 0, 0, 0, 1138, - 73905, 12677, 0, 0, 3239, 0, 0, 0, 8431, 0, 42164, 0, 11778, 12620, 0, - 73773, 119073, 5040, 0, 0, 0, 0, 0, 5039, 0, 0, 0, 5038, 0, 0, 13184, - 74293, 0, 64648, 0, 9359, 0, 0, 0, 65157, 6662, 0, 0, 3863, 73909, 4835, - 0, 0, 0, 4309, 0, 194569, 0, 194568, 1301, 0, 119595, 569, 0, 0, 711, - 119085, 0, 0, 73880, 11610, 11368, 0, 194571, 41331, 1006, 74240, 0, - 1550, 8201, 73737, 7627, 5499, 5031, 0, 0, 65784, 0, 65267, 3758, 0, - 65781, 64734, 0, 2440, 65780, 0, 8449, 0, 5008, 0, 8822, 0, 12121, 8255, - 5512, 73875, 119560, 0, 64313, 2641, 5906, 1119, 127068, 13038, 0, 2455, - 0, 118809, 0, 0, 0, 0, 8714, 0, 4211, 0, 0, 0, 0, 0, 5052, 66220, 5821, - 6186, 65778, 65775, 5051, 65773, 1429, 42647, 5050, 302, 388, 41115, 735, - 6637, 5907, 120670, 0, 12726, 74594, 9117, 0, 0, 5513, 6666, 5053, 74230, - 5510, 0, 0, 0, 2470, 0, 0, 1925, 0, 0, 0, 0, 5048, 5047, 0, 0, 0, 194863, - 0, 74497, 0, 8089, 6929, 639, 0, 68179, 0, 0, 0, 4599, 41402, 6674, - 120631, 43294, 1476, 648, 0, 65819, 3233, 0, 0, 10164, 0, 0, 3530, 9750, - 0, 0, 6656, 194858, 0, 5046, 8512, 65856, 74261, 8967, 0, 5045, 0, 1916, - 7986, 5044, 120556, 9006, 13128, 5043, 0, 7853, 74068, 74004, 9669, - 12341, 12703, 8402, 0, 119070, 0, 41750, 3586, 64508, 43148, 0, 0, - 119606, 0, 13296, 517, 0, 0, 0, 41528, 123, 65454, 0, 0, 74478, 10531, - 7784, 41526, 10829, 73991, 8057, 1126, 73895, 0, 194591, 0, 3925, 0, - 8069, 43142, 120439, 489, 0, 0, 120441, 120452, 43151, 0, 0, 66200, 0, 0, - 0, 0, 0, 0, 8711, 6183, 0, 0, 0, 120448, 7623, 118925, 194853, 9235, - 12760, 74176, 0, 66445, 43540, 120437, 3743, 11514, 11078, 0, 12136, 0, - 0, 120435, 0, 7726, 0, 19922, 267, 3393, 0, 1371, 194849, 0, 2458, 0, - 6201, 0, 41074, 4266, 10652, 41612, 41077, 3402, 9050, 3398, 0, 0, 0, - 3391, 41075, 2476, 0, 917550, 0, 10625, 0, 12767, 13017, 0, 64261, 64934, - 0, 13014, 13013, 0, 6673, 0, 0, 0, 12438, 0, 0, 0, 0, 0, 9053, 13015, - 74523, 0, 704, 66215, 6195, 0, 6660, 194941, 917760, 917793, 0, 12629, - 11435, 0, 0, 65538, 0, 0, 0, 74547, 0, 65448, 0, 12948, 195003, 195002, - 119238, 195004, 195007, 195006, 0, 0, 4287, 8276, 4902, 1131, 0, 0, - 66728, 1816, 0, 42533, 168, 0, 4898, 64298, 0, 0, 4901, 1821, 0, 578, + 0, 0, 6787, 0, 0, 0, 0, 10544, 12919, 0, 0, 0, 0, 0, 120789, 0, 947, + 119835, 194586, 194585, 10969, 119935, 7613, 119937, 119936, 4795, + 119930, 7018, 7376, 120181, 120192, 120268, 0, 43567, 74056, 917910, + 118963, 119919, 7216, 65232, 7217, 251, 7218, 7895, 4395, 43538, 119926, + 119929, 119928, 7213, 119922, 7214, 7215, 0, 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, 0, 0, + 73756, 5042, 5041, 42769, 12084, 0, 0, 0, 127319, 0, 917906, 0, 0, 12283, + 1616, 3795, 0, 8795, 66245, 0, 0, 0, 1138, 73905, 12677, 0, 0, 3239, 0, + 0, 0, 8431, 0, 42164, 0, 11778, 12620, 6826, 73773, 119073, 5040, 0, 0, + 0, 78420, 0, 5039, 0, 78418, 0, 5038, 0, 0, 13184, 74293, 0, 64648, 0, + 9359, 78416, 0, 0, 65157, 6662, 0, 0, 3863, 73909, 4835, 55266, 43432, 0, + 4309, 0, 194569, 0, 194568, 1301, 0, 42589, 569, 0, 73813, 711, 119085, + 0, 0, 73880, 11610, 11368, 0, 194571, 41331, 1006, 74240, 0, 1550, 8201, + 73737, 7627, 5499, 5031, 77908, 42738, 65784, 77907, 65267, 3758, 0, + 65781, 64734, 0, 2440, 65780, 77913, 8449, 0, 5008, 0, 8822, 0, 12121, + 8255, 5512, 73875, 119560, 0, 64313, 2641, 5906, 1119, 127068, 13038, 0, + 2455, 0, 118809, 0, 0, 0, 0, 8714, 0, 4211, 0, 0, 0, 0, 43713, 5052, + 66220, 5821, 6186, 65778, 65775, 5051, 65773, 1429, 42647, 5050, 302, + 388, 41115, 735, 6637, 5907, 120670, 0, 12726, 74594, 9117, 0, 195010, + 5513, 6666, 5053, 74230, 5510, 78451, 0, 78447, 2470, 78437, 0, 1925, 0, + 0, 74807, 0, 5048, 5047, 0, 0, 0, 194863, 0, 74497, 0, 8089, 6929, 639, + 0, 68179, 0, 0, 0, 4599, 41402, 6674, 43397, 43294, 1476, 648, 0, 65819, + 3233, 0, 41782, 6951, 0, 0, 3530, 9750, 0, 0, 6656, 194858, 0, 5046, + 8512, 65856, 74261, 8967, 0, 5045, 0, 1916, 7986, 5044, 120556, 9006, + 13128, 5043, 0, 7853, 74068, 74004, 9669, 12341, 12703, 8402, 0, 119070, + 0, 41750, 3586, 64508, 43148, 0, 0, 119606, 0, 13296, 517, 0, 0, 0, + 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, 0, 0, 66200, 0, 0, 0, 78423, 0, 0, 8711, 6183, 0, + 0, 0, 120448, 7623, 118925, 194853, 9235, 12760, 74176, 0, 66445, 43540, + 120437, 3743, 11514, 11078, 0, 12136, 0, 0, 120435, 0, 7726, 0, 19922, + 267, 3393, 42198, 1371, 194849, 69233, 2458, 0, 6201, 0, 41074, 4266, + 10652, 41612, 41077, 3402, 9050, 3398, 0, 0, 0, 3391, 41075, 2476, 0, + 917550, 0, 10625, 0, 12767, 13017, 78743, 64261, 64934, 127537, 13014, + 13013, 0, 6673, 0, 0, 0, 12438, 0, 0, 0, 0, 0, 9053, 13015, 74523, 0, + 704, 66215, 6195, 0, 6660, 78758, 917760, 917793, 42212, 12629, 11435, 0, + 55256, 65538, 0, 0, 0, 74547, 0, 65448, 78100, 12948, 119001, 195002, + 119238, 195004, 78099, 127085, 0, 0, 4287, 8276, 4902, 1131, 0, 78458, + 66728, 1816, 0, 42533, 168, 42845, 4898, 64298, 0, 0, 4901, 1821, 0, 578, 3653, 0, 791, 9162, 6977, 0, 119298, 74561, 0, 73731, 8354, 43590, 0, 0, 7557, 0, 119301, 8234, 7241, 0, 194994, 119167, 194996, 12811, 65925, - 3946, 195000, 10998, 0, 673, 194867, 64397, 0, 74599, 0, 0, 194977, - 194976, 2448, 194978, 10267, 8424, 2452, 120760, 194864, 8729, 0, 0, - 7845, 0, 0, 4408, 4122, 0, 11039, 8723, 194990, 194989, 119302, 731, - 119304, 119303, 2438, 64855, 119300, 119299, 1175, 0, 42135, 373, 119172, - 5396, 11457, 11521, 7723, 0, 0, 0, 41952, 0, 5273, 8248, 5269, 0, 5202, - 2404, 5267, 42823, 11291, 19915, 5277, 12963, 0, 6189, 4125, 1314, 12133, - 0, 118873, 1271, 0, 0, 66024, 41482, 3864, 74539, 0, 3879, 0, 12978, - 4166, 4574, 0, 7567, 7459, 0, 41390, 5384, 41882, 67647, 0, 0, 0, 0, - 41388, 0, 41392, 64288, 41387, 0, 8706, 5552, 0, 700, 0, 5553, 0, 7088, - 5356, 7499, 0, 66596, 0, 0, 0, 5554, 0, 12344, 10311, 0, 6665, 0, 0, - 7618, 8517, 11455, 0, 64632, 66017, 5555, 0, 0, 0, 0, 119204, 65033, - 9143, 6668, 195067, 195066, 195069, 656, 195071, 65037, 4577, 64624, 0, - 0, 0, 0, 4269, 73885, 917775, 42846, 917774, 950, 0, 0, 66580, 118895, - 66683, 10554, 917778, 119121, 0, 5098, 917770, 0, 119099, 5097, 4935, - 9848, 10381, 0, 0, 0, 3651, 0, 0, 0, 5102, 5101, 10269, 12983, 8138, 0, - 1932, 5100, 1439, 12093, 1247, 10034, 195064, 5099, 0, 1441, 42087, 3063, - 650, 0, 7838, 0, 195041, 195040, 119142, 9031, 195045, 195044, 9078, - 8545, 66356, 195048, 0, 9154, 9118, 0, 0, 2676, 7750, 0, 73812, 6190, - 8599, 195053, 0, 10795, 9857, 7014, 9858, 195033, 0, 12129, 0, 8481, 0, - 6202, 195035, 10920, 195037, 5203, 195039, 195038, 5108, 5107, 65818, - 66019, 9762, 0, 5541, 74772, 0, 12613, 5284, 6657, 207, 0, 4275, 74819, - 854, 68147, 74381, 0, 0, 5103, 0, 64348, 41368, 0, 488, 0, 0, 0, 10157, - 0, 43034, 11438, 0, 0, 0, 118839, 41771, 5106, 6669, 8504, 65154, 195025, - 41367, 5105, 195030, 195029, 6476, 5104, 0, 304, 3176, 0, 0, 932, 0, - 6567, 238, 74522, 195011, 195010, 19905, 120577, 195015, 120187, 41044, - 67640, 0, 64814, 9912, 65939, 10670, 74093, 13273, 0, 12552, 195019, - 8803, 309, 6622, 8151, 10858, 194596, 67636, 0, 12568, 0, 12553, 0, - 43275, 6950, 9712, 0, 0, 0, 65165, 0, 0, 66466, 0, 0, 0, 66725, 6191, - 11351, 10437, 11316, 67634, 0, 0, 41754, 67635, 9370, 2720, 194975, 0, - 8232, 118817, 0, 3222, 0, 0, 0, 66663, 0, 0, 10834, 0, 0, 65732, 0, 0, - 119579, 0, 195020, 0, 7781, 41383, 64568, 0, 120738, 12077, 0, 0, 0, - 42396, 0, 3475, 0, 2479, 0, 3632, 0, 10698, 0, 3648, 194960, 74844, - 67639, 3636, 67894, 3650, 8837, 65229, 1843, 42283, 0, 41562, 0, 74548, - 0, 3640, 0, 42321, 7284, 194974, 194973, 194950, 194949, 194952, 194951, - 0, 194953, 42080, 2529, 0, 0, 0, 42083, 194955, 194606, 194957, 67619, - 66367, 194958, 9634, 0, 9988, 0, 41068, 0, 0, 65264, 0, 0, 917923, 0, - 785, 8236, 194942, 9027, 68160, 67623, 64383, 0, 925, 0, 0, 41985, 41071, - 9586, 0, 41984, 9217, 0, 0, 0, 9186, 64580, 4016, 0, 0, 381, 0, 0, 42077, - 0, 194946, 5184, 42078, 194947, 10810, 0, 4585, 19943, 5860, 67633, 0, 0, - 812, 3615, 0, 5178, 194929, 120548, 120506, 5188, 74287, 67629, 3605, - 10692, 1166, 64429, 42639, 924, 0, 67631, 0, 0, 2442, 10703, 194940, - 67632, 0, 12771, 12736, 12753, 0, 73933, 67626, 42401, 0, 0, 0, 42288, - 12751, 0, 8542, 13145, 0, 2468, 66706, 41294, 3626, 3883, 64388, 42479, - 0, 41117, 0, 0, 0, 0, 67624, 0, 1290, 0, 65585, 2715, 806, 0, 41884, 0, - 7027, 64731, 0, 0, 0, 66325, 3465, 2405, 9240, 0, 12756, 65259, 0, 0, - 12752, 5833, 1432, 0, 41883, 73912, 9799, 0, 41886, 2480, 0, 43219, 0, - 6494, 5537, 0, 0, 0, 0, 1211, 0, 0, 0, 118832, 12318, 0, 0, 0, 10622, 0, - 0, 0, 6566, 0, 0, 73780, 0, 64864, 0, 194588, 0, 8284, 0, 0, 3589, 0, - 4035, 6492, 0, 4265, 6642, 3977, 74186, 41778, 836, 119216, 2488, 0, + 3946, 78078, 10998, 78080, 673, 194867, 64397, 0, 74599, 78449, 8890, + 194977, 194976, 2448, 78085, 10267, 8424, 2452, 78083, 194864, 8729, + 78456, 0, 7845, 0, 78692, 4408, 4122, 6772, 11039, 8723, 194990, 194989, + 119302, 731, 119304, 119303, 2438, 64855, 119300, 119299, 1175, 0, 42135, + 373, 119172, 5396, 11457, 11521, 7723, 0, 0, 0, 41952, 0, 5273, 8248, + 5269, 6337, 5202, 2404, 5267, 42823, 11291, 19915, 5277, 12963, 0, 6189, + 4125, 1314, 12133, 0, 118873, 1271, 0, 0, 66024, 41482, 3864, 74539, 0, + 3879, 0, 12978, 4166, 4574, 0, 7567, 7459, 0, 41390, 5384, 41882, 67647, + 0, 5759, 0, 0, 41388, 0, 41392, 64288, 41387, 0, 8706, 5552, 0, 700, 0, + 5553, 0, 7088, 5356, 7499, 78110, 66596, 0, 0, 10263, 5554, 0, 12344, + 10311, 78113, 6665, 0, 0, 7618, 8517, 11455, 78440, 64632, 66017, 5555, + 78088, 78093, 78091, 0, 42803, 65033, 9143, 6668, 195067, 195066, 195069, + 656, 195071, 65037, 4577, 64624, 0, 0, 0, 0, 4269, 73885, 917775, 42846, + 917774, 950, 0, 0, 66580, 118895, 66683, 10554, 917778, 119121, 0, 5098, + 917770, 0, 119099, 5097, 4935, 9848, 10381, 0, 917560, 0, 3651, 0, 0, + 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, 195044, 9078, 8545, 66356, 195048, + 0, 9154, 9118, 0, 0, 2676, 7750, 0, 73812, 6190, 8599, 195053, 0, 10795, + 9857, 7014, 9856, 195033, 0, 12129, 0, 8481, 0, 6202, 195035, 10920, + 195037, 5203, 195039, 195038, 5108, 5107, 65818, 66019, 9762, 0, 5541, + 74772, 0, 12613, 5284, 6657, 207, 0, 4275, 74819, 854, 68147, 74381, 0, + 0, 5103, 0, 64348, 41368, 43974, 488, 69811, 0, 0, 10157, 0, 43034, + 11438, 0, 0, 0, 68431, 41771, 5106, 6669, 8504, 65154, 69813, 41367, + 5105, 195030, 69809, 6476, 5104, 0, 304, 3176, 0, 0, 932, 0, 6567, 238, + 74522, 195011, 194595, 19905, 120577, 195015, 120187, 41044, 67640, + 194902, 42055, 9912, 65939, 10670, 74093, 13273, 0, 12552, 195019, 8803, + 309, 6622, 8151, 10858, 194596, 67636, 0, 12568, 0, 12553, 0, 43275, + 6950, 9712, 68680, 43970, 0, 65165, 0, 0, 66466, 0, 0, 0, 66725, 6191, + 11351, 10437, 11316, 67634, 0, 0, 41754, 67635, 9370, 2720, 194975, + 68462, 8232, 118817, 0, 3222, 0, 0, 0, 66663, 0, 0, 10834, 0, 0, 65732, + 0, 917547, 119579, 67679, 195020, 0, 7781, 41383, 64568, 0, 120738, + 12077, 0, 64586, 917620, 42396, 55255, 3475, 0, 2479, 0, 3632, 120728, + 10698, 8376, 3648, 194960, 74844, 67639, 3636, 67894, 3650, 8837, 65229, + 1843, 42283, 43250, 41562, 9100, 74548, 0, 3640, 0, 42321, 7284, 194974, + 194973, 194950, 194949, 194952, 194951, 0, 194953, 42080, 2529, 0, 0, 0, + 42083, 120678, 68398, 194957, 67619, 66367, 194958, 9634, 0, 9988, 0, + 41068, 0, 0, 65264, 0, 0, 917923, 0, 785, 8236, 194942, 9027, 68160, + 67623, 64383, 0, 925, 0, 0, 41985, 41071, 9586, 0, 41984, 9217, 0, 0, 0, + 9186, 2067, 4016, 0, 0, 381, 0, 0, 42077, 0, 194946, 5184, 42078, 194947, + 10810, 0, 4585, 19943, 5860, 67633, 0, 0, 812, 3615, 0, 5178, 44000, + 120548, 78807, 5188, 74287, 67629, 3605, 10692, 1166, 64429, 42639, 924, + 0, 67631, 0, 0, 2442, 10703, 78789, 67632, 917924, 12771, 12736, 12753, + 0, 73933, 67626, 42401, 0, 0, 127373, 42288, 12751, 0, 8542, 13145, 0, + 2468, 66706, 41294, 3626, 3883, 64388, 42479, 0, 41117, 0, 0, 0, 0, + 67624, 0, 1290, 0, 65585, 2715, 806, 65208, 41884, 917883, 7027, 64731, + 0, 0, 0, 66325, 3465, 2405, 9240, 0, 12756, 65259, 0, 0, 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, 0, 10622, 0, 0, + 0, 6566, 78659, 0, 73780, 0, 64864, 0, 78660, 0, 8284, 0, 0, 3589, 0, + 4035, 6492, 118981, 4265, 6642, 3977, 74186, 41778, 836, 119216, 2488, 0, 4582, 0, 0, 41777, 12926, 0, 7528, 10550, 0, 0, 0, 0, 0, 1374, 64878, - 119014, 0, 42389, 41374, 0, 0, 0, 41377, 0, 0, 400, 12597, 0, 0, 0, 6661, - 0, 64827, 0, 73817, 390, 0, 74755, 0, 3473, 7718, 0, 0, 0, 0, 0, 0, 0, - 11969, 0, 0, 8004, 1887, 0, 0, 8080, 7006, 0, 0, 0, 0, 1544, 0, 0, 64677, - 120716, 0, 6146, 0, 771, 0, 0, 12812, 13168, 42272, 12200, 917927, 7904, - 0, 953, 12917, 0, 12300, 0, 11491, 9724, 10341, 0, 9524, 7490, 11389, - 7489, 3379, 0, 7487, 0, 471, 7484, 7482, 7481, 7480, 7479, 7478, 7477, - 6501, 7475, 6918, 7473, 7472, 2474, 7470, 7468, 10232, 10615, 10213, 0, - 120222, 10049, 0, 3544, 0, 6017, 65311, 0, 0, 13306, 10533, 7870, 73949, - 7625, 0, 120544, 0, 0, 0, 0, 0, 0, 19961, 2472, 0, 120699, 0, 6019, 4256, - 120776, 74380, 0, 73847, 73844, 12845, 0, 0, 65138, 119355, 67862, 0, 0, - 120000, 120008, 8066, 7678, 74865, 0, 0, 0, 0, 7186, 0, 120555, 0, 445, - 120566, 0, 0, 0, 8330, 0, 0, 42797, 0, 120215, 0, 3902, 0, 1770, 0, 0, - 1560, 120209, 0, 4584, 73843, 0, 11712, 10866, 0, 1118, 0, 0, 0, 1081, - 7436, 0, 7252, 0, 5996, 0, 4903, 0, 41386, 5162, 119189, 1330, 0, 64530, - 0, 12047, 41384, 0, 0, 1848, 4334, 0, 41975, 64777, 10674, 12308, 0, 0, - 0, 0, 12715, 0, 0, 0, 2018, 66672, 41979, 66685, 119157, 0, 0, 0, 126984, - 0, 9334, 0, 0, 0, 7975, 0, 0, 0, 66621, 4884, 66597, 0, 0, 0, 6313, - 65513, 0, 0, 0, 0, 2345, 0, 463, 0, 0, 119607, 3117, 5460, 0, 0, 0, 0, - 42279, 194577, 0, 0, 0, 0, 0, 13248, 0, 0, 0, 0, 0, 0, 5663, 0, 0, 0, 0, - 2482, 1471, 0, 0, 42247, 12378, 73925, 0, 0, 12374, 0, 0, 0, 0, 2460, 0, - 11944, 12376, 0, 64679, 0, 12380, 10557, 64473, 5870, 0, 2024, 0, 0, 0, - 539, 0, 0, 0, 3853, 65180, 0, 120796, 120245, 0, 0, 8659, 0, 12474, 0, - 9503, 194969, 2478, 0, 4162, 0, 4260, 12953, 0, 120089, 12470, 0, 74189, - 2742, 12476, 11798, 10946, 0, 5000, 0, 0, 0, 0, 8213, 74017, 7771, 6161, - 0, 0, 0, 0, 0, 0, 120582, 0, 0, 10301, 10333, 10397, 0, 0, 73791, 0, 0, - 0, 0, 0, 4014, 12842, 73952, 12015, 0, 8275, 3893, 0, 0, 0, 7221, 42147, - 0, 74550, 74465, 64747, 118841, 0, 12516, 0, 0, 119017, 74537, 10892, - 8231, 0, 6473, 41968, 0, 41973, 3591, 41969, 0, 2453, 0, 0, 0, 0, 0, - 10349, 10413, 43591, 41962, 3202, 74353, 0, 8316, 0, 0, 0, 687, 0, 0, 0, - 1840, 0, 0, 119809, 4883, 285, 4723, 0, 0, 4459, 74577, 0, 41720, 11089, - 240, 19906, 0, 119248, 0, 9743, 120232, 13134, 0, 0, 0, 0, 0, 42634, 0, - 0, 3081, 11463, 120230, 0, 0, 10445, 0, 0, 66717, 2614, 9125, 119023, - 1729, 0, 120236, 65221, 63883, 43334, 64852, 0, 120235, 66201, 0, 66578, - 5001, 41879, 0, 4121, 5003, 884, 66700, 63879, 4943, 5150, 73889, 74182, - 0, 643, 3086, 0, 42448, 42299, 58, 0, 0, 120083, 63873, 8491, 0, 0, 0, - 4530, 42409, 0, 0, 2721, 120074, 119096, 19929, 0, 194574, 0, 4242, 4264, - 0, 0, 66179, 42412, 65941, 13114, 64522, 10740, 3094, 0, 9754, 119102, - 4437, 73948, 0, 0, 65179, 42174, 194925, 42430, 0, 0, 42355, 66026, 4306, - 41380, 0, 0, 0, 66667, 0, 0, 0, 120578, 42566, 0, 0, 5088, 6948, 0, 8524, - 0, 0, 12385, 0, 0, 0, 1386, 65034, 11480, 6116, 65039, 65038, 12392, - 65036, 8064, 0, 12101, 5822, 119004, 0, 710, 0, 11663, 1666, 42091, - 119657, 12383, 0, 42092, 0, 4289, 0, 63896, 12061, 42096, 0, 3362, 12377, - 0, 0, 0, 7461, 73901, 1244, 331, 73786, 12683, 10662, 0, 8112, 0, 65852, - 0, 12379, 0, 120818, 41964, 0, 63843, 12381, 41965, 0, 65866, 4327, 0, - 63840, 0, 41220, 13032, 0, 584, 12933, 43177, 12373, 0, 13000, 1351, 0, - 8698, 12665, 0, 1930, 0, 0, 12427, 0, 0, 13031, 0, 0, 0, 3657, 0, 65202, - 6000, 0, 12426, 0, 0, 41740, 12428, 41283, 41916, 119210, 0, 0, 12429, - 9695, 0, 7562, 0, 5170, 0, 41755, 676, 0, 0, 66664, 74427, 0, 3536, 0, - 9752, 0, 6162, 0, 0, 10113, 41829, 65886, 5159, 12422, 41832, 439, 43077, - 0, 120532, 74549, 11796, 40970, 41830, 0, 917799, 8308, 917797, 917796, - 0, 67864, 917801, 917800, 12336, 4135, 0, 341, 2727, 4129, 3539, 0, - 63861, 0, 7913, 0, 63859, 4131, 63868, 0, 63867, 4133, 11371, 210, 4600, - 0, 74560, 4137, 8082, 0, 119062, 0, 0, 4591, 0, 0, 0, 9680, 0, 120623, - 561, 12159, 195, 0, 41501, 0, 42031, 5719, 7172, 0, 8368, 0, 41499, 0, 0, - 42242, 41498, 917794, 42025, 0, 65805, 42463, 0, 2924, 0, 120510, 0, 0, - 119213, 73941, 0, 42330, 917784, 3969, 0, 0, 7169, 1992, 9652, 73977, - 7246, 42086, 917790, 917789, 0, 0, 0, 0, 0, 327, 0, 9042, 917777, 917776, - 65148, 12433, 917781, 917780, 917779, 12431, 8668, 12434, 0, 917782, - 5999, 0, 7712, 12432, 0, 0, 1726, 1015, 0, 8212, 0, 0, 42423, 119066, 0, - 0, 66709, 0, 8811, 927, 0, 0, 12436, 0, 42021, 0, 0, 1299, 12240, 42350, - 65143, 0, 195016, 0, 0, 11348, 0, 0, 0, 0, 0, 19914, 12179, 0, 9648, 0, - 63836, 63832, 917773, 10967, 63816, 2594, 3444, 63817, 64651, 0, 41503, - 0, 11265, 0, 0, 0, 0, 5664, 3972, 0, 0, 0, 917766, 12416, 917764, 119608, - 10816, 917769, 917768, 12418, 74111, 3882, 8532, 917771, 1573, 0, 119847, - 4596, 66339, 12417, 66001, 65343, 194782, 12414, 8287, 0, 0, 68108, 1143, - 119169, 0, 12415, 6626, 42763, 0, 118884, 9021, 120783, 0, 11724, 0, 0, - 127104, 194794, 0, 0, 8027, 10997, 9171, 12741, 11400, 74197, 194799, 0, - 0, 0, 0, 0, 0, 120190, 194773, 0, 194772, 42368, 0, 7715, 3881, 41487, - 12118, 42514, 0, 0, 0, 3009, 41476, 41489, 0, 3007, 1448, 3018, 0, 3889, + 119014, 0, 42389, 41374, 0, 0, 78492, 41377, 0, 0, 400, 12597, 120586, 0, + 0, 6661, 0, 64827, 0, 73817, 390, 0, 74755, 0, 3473, 7718, 0, 0, 0, + 55285, 0, 0, 0, 11969, 0, 0, 6365, 1887, 6763, 0, 8080, 7006, 0, 0, 6757, + 0, 1544, 0, 6766, 64677, 120716, 0, 6146, 0, 771, 0, 0, 12812, 13168, + 42272, 12200, 917927, 7904, 0, 953, 12917, 0, 12300, 0, 11491, 9724, + 10341, 0, 9524, 7490, 11389, 7489, 3379, 0, 7487, 0, 471, 7484, 7482, + 6753, 7480, 7479, 7478, 7477, 6501, 7475, 6918, 7473, 7472, 2474, 7470, + 7468, 10232, 10615, 10213, 0, 120222, 10049, 78884, 3544, 0, 6017, 65311, + 0, 120216, 13306, 10533, 7870, 73949, 7625, 0, 120544, 0, 0, 0, 0, 0, 0, + 19961, 2472, 42665, 120699, 0, 6019, 4256, 120776, 74380, 0, 42675, + 42658, 12845, 0, 0, 65138, 119355, 67862, 0, 65671, 120000, 120008, 8066, + 7678, 74865, 0, 0, 0, 0, 7186, 0, 120555, 0, 445, 120566, 0, 0, 0, 8330, + 0, 0, 42797, 0, 120215, 0, 3902, 0, 1770, 0, 0, 1560, 120209, 194972, + 4584, 73843, 0, 11712, 10866, 118928, 1118, 0, 0, 0, 1081, 7436, 68420, + 7252, 0, 5996, 0, 4903, 0, 41386, 5162, 119189, 1330, 0, 42848, 0, 12047, + 41384, 0, 0, 1848, 4334, 6324, 41975, 64777, 10674, 12308, 12186, 0, 0, + 0, 12715, 0, 0, 0, 2018, 66672, 41979, 66685, 119157, 0, 0, 0, 126984, 0, + 9334, 0, 127310, 0, 7975, 0, 77957, 0, 66621, 4884, 66597, 0, 0, 0, 6313, + 65513, 0, 0, 0, 0, 2345, 43697, 463, 0, 0, 119607, 3117, 5460, 0, 0, 0, + 0, 42279, 194577, 0, 78415, 0, 0, 0, 13248, 0, 0, 0, 0, 0, 0, 5663, 0, 0, + 0, 0, 2482, 1471, 0, 0, 42247, 12378, 73925, 127233, 0, 12374, 0, 0, 0, + 0, 2460, 0, 11944, 12376, 0, 64679, 0, 12380, 10557, 64473, 5870, 0, + 2024, 0, 0, 0, 539, 0, 0, 0, 3853, 65180, 0, 120796, 120245, 0, 0, 8659, + 0, 12474, 0, 9503, 194969, 2478, 0, 4162, 0, 4260, 12953, 0, 120089, + 12470, 0, 74189, 2742, 12476, 11798, 10946, 0, 5000, 0, 0, 0, 0, 8213, + 74017, 7771, 6161, 0, 6709, 0, 78885, 0, 194892, 120582, 78547, 0, 10301, + 10333, 10397, 0, 0, 73791, 0, 0, 0, 0, 0, 4014, 12842, 73952, 12015, 0, + 8275, 3893, 0, 0, 127555, 7221, 42147, 0, 74550, 74465, 64747, 118841, 0, + 12516, 4444, 0, 119017, 74537, 10892, 8231, 0, 6473, 41968, 78388, 41973, + 3591, 41969, 0, 2453, 0, 0, 64705, 0, 0, 10349, 10413, 43591, 41962, + 3202, 74353, 0, 8316, 0, 0, 0, 687, 0, 0, 0, 1840, 0, 68671, 119809, + 4883, 285, 4723, 77927, 0, 4459, 74577, 0, 41720, 11089, 240, 19906, 0, + 42323, 0, 9743, 120232, 13134, 0, 0, 0, 0, 0, 42634, 0, 43437, 3081, + 11463, 120230, 0, 0, 10445, 0, 0, 66717, 2614, 9125, 119023, 1729, 0, + 120236, 65221, 63883, 43334, 64852, 0, 120235, 66201, 0, 66578, 5001, + 41879, 74427, 4121, 5003, 884, 66700, 63879, 4943, 5150, 73889, 74182, 0, + 643, 3086, 0, 42448, 42299, 58, 0, 0, 120083, 63873, 8491, 0, 0, 0, 4530, + 42409, 0, 194575, 2721, 120074, 119096, 19929, 0, 194574, 0, 4242, 4264, + 120077, 0, 66179, 42412, 65941, 13114, 64522, 10740, 3094, 0, 9754, + 119102, 4437, 73948, 0, 0, 55280, 42174, 194925, 42430, 0, 0, 42355, + 66026, 4306, 41380, 68432, 0, 0, 66667, 127309, 0, 0, 42200, 42566, 0, 0, + 5088, 6948, 0, 8524, 0, 0, 12385, 0, 0, 0, 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, 0, 0, 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, 0, 13000, 1351, 0, 8698, 12665, 0, + 1930, 0, 78229, 12427, 66514, 0, 13031, 0, 63901, 0, 3657, 0, 65202, + 6000, 119206, 12426, 0, 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, 0, 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, 0, 0, 0, 9680, 0, 120623, 561, 12159, 195, 78508, + 41501, 0, 42031, 5719, 7172, 42687, 8368, 0, 41499, 0, 0, 42242, 41498, + 917794, 42025, 78567, 65805, 42463, 0, 2924, 0, 120510, 0, 0, 119213, + 73941, 0, 42330, 917784, 3969, 0, 0, 7169, 1992, 9652, 73977, 7246, + 42086, 917790, 917789, 0, 0, 0, 0, 0, 327, 0, 9042, 917777, 917776, + 65148, 12433, 917781, 127276, 917779, 12431, 8668, 12434, 0, 917782, + 5999, 0, 7712, 12432, 0, 43653, 1726, 1015, 0, 8212, 0, 0, 42423, 119066, + 0, 0, 66709, 0, 8811, 927, 0, 0, 12436, 0, 42021, 0, 0, 1299, 12240, + 42350, 65143, 0, 195016, 0, 78197, 11348, 0, 78037, 0, 0, 0, 19914, + 12179, 0, 9648, 194923, 63836, 63832, 917773, 10967, 63816, 2594, 3444, + 63817, 64651, 0, 41503, 0, 11265, 0, 0, 194922, 0, 5664, 3972, 0, 0, 0, + 917766, 12416, 917764, 119608, 10816, 917769, 917768, 12418, 74111, 3882, + 8532, 917771, 1573, 0, 119847, 4596, 66339, 12417, 66001, 65343, 194782, + 12414, 8287, 68219, 195017, 68108, 1143, 119169, 0, 12415, 6626, 42763, + 0, 118884, 9021, 120783, 0, 11724, 0, 0, 127104, 194794, 0, 0, 8027, + 10997, 9171, 12741, 11400, 74197, 194799, 0, 194798, 0, 0, 0, 127523, + 120190, 194773, 67608, 194772, 42368, 0, 7715, 3881, 41487, 12118, 42514, + 68651, 0, 0, 3009, 41476, 41489, 69825, 3007, 1448, 3018, 194809, 3889, 8521, 5083, 5082, 119859, 120184, 8519, 0, 3014, 5081, 65853, 0, 0, - 120183, 0, 5079, 64802, 65095, 4597, 65532, 0, 0, 12371, 0, 8407, 0, - 10805, 8518, 10779, 120188, 0, 0, 12367, 42170, 0, 0, 629, 1924, 0, - 12037, 74366, 5987, 8462, 8005, 12365, 66689, 0, 120815, 12369, 10649, 0, - 5077, 127108, 10880, 63927, 5075, 0, 0, 65075, 0, 11007, 0, 66659, 0, 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, 0, - 5276, 43021, 0, 0, 0, 0, 66461, 5177, 41324, 12055, 8722, 0, 41327, 0, - 66695, 4114, 409, 4383, 8900, 8948, 41325, 0, 721, 10182, 9108, 0, 0, - 119185, 0, 0, 0, 5998, 0, 42353, 74825, 0, 12587, 0, 0, 0, 0, 0, 41576, - 74121, 0, 119207, 0, 8578, 5995, 7573, 41575, 74789, 74752, 63944, 63949, - 0, 2670, 4167, 0, 11723, 0, 74120, 0, 65076, 938, 73857, 73854, 11737, - 9721, 0, 0, 0, 11742, 0, 0, 11493, 12334, 0, 4153, 12302, 10793, 5250, - 12407, 11978, 4404, 9189, 12401, 42007, 5775, 42005, 65806, 0, 0, 42002, - 12404, 0, 0, 4940, 12410, 7683, 1167, 0, 4983, 0, 861, 0, 0, 0, 0, 65577, - 0, 0, 0, 11956, 0, 0, 0, 9616, 6631, 0, 12816, 74583, 0, 12710, 0, 12721, - 4101, 66185, 0, 5992, 7616, 0, 0, 12577, 0, 0, 853, 0, 0, 0, 0, 5016, - 43535, 0, 42835, 9491, 917913, 0, 917914, 0, 12712, 917919, 0, 65060, + 120183, 78219, 5079, 64802, 42210, 4597, 65532, 78444, 120185, 12371, 0, + 8407, 0, 10805, 8518, 10779, 120188, 0, 0, 12367, 42170, 0, 0, 629, 1924, + 0, 12037, 74366, 5987, 8462, 8005, 12365, 63933, 127370, 120815, 12369, + 10649, 0, 5077, 127108, 10880, 63927, 5075, 0, 0, 65075, 0, 11007, 0, + 66659, 0, 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, 0, 0, 55236, 0, 66461, 5177, 41324, 12055, + 8722, 0, 41327, 0, 66695, 4114, 409, 4383, 8900, 8948, 41325, 0, 721, + 10182, 9108, 0, 0, 119185, 42229, 194912, 0, 5998, 0, 42353, 74825, 0, + 12587, 0, 78571, 0, 0, 0, 41576, 42215, 78570, 119207, 0, 8578, 5995, + 7573, 41575, 74789, 74752, 63944, 63949, 64767, 2670, 4167, 0, 11723, 0, + 74120, 0, 65076, 938, 43414, 73854, 11737, 9721, 0, 0, 0, 11742, 0, 0, + 11493, 12334, 0, 4153, 12302, 10793, 5250, 12407, 11978, 4404, 9189, + 12401, 42007, 5775, 6759, 65806, 43997, 0, 42002, 12404, 0, 0, 4940, + 12410, 7683, 1167, 73729, 4983, 0, 861, 0, 0, 0, 0, 65577, 43370, 0, 0, + 11956, 0, 0, 0, 9616, 6631, 0, 12816, 74583, 42218, 12710, 68674, 12721, + 4101, 66185, 0, 5992, 7616, 0, 0, 12577, 0, 0, 853, 42693, 0, 0, 0, 5016, + 43535, 63893, 42835, 9491, 917913, 0, 917914, 0, 12712, 917919, 0, 65060, 120797, 9900, 0, 0, 194919, 0, 0, 0, 64778, 12585, 10565, 0, 12177, 0, 0, - 0, 0, 0, 4900, 0, 0, 0, 8984, 4119, 0, 8971, 0, 43113, 9702, 0, 11025, - 9245, 13048, 4927, 4138, 0, 194921, 0, 12397, 0, 0, 13054, 12394, 0, 0, - 0, 13053, 0, 3948, 10781, 1546, 0, 5010, 1680, 10507, 0, 0, 0, 0, 0, 0, - 7267, 0, 74833, 0, 5993, 2819, 0, 12706, 0, 1893, 7266, 63915, 7264, - 7265, 0, 1363, 0, 63997, 63910, 63996, 3077, 0, 0, 1512, 0, 12589, 41479, - 0, 0, 43339, 0, 9836, 120727, 0, 41481, 43335, 7832, 42343, 3090, 43337, - 817, 1664, 1850, 0, 3079, 11340, 42408, 42447, 0, 120020, 42307, 12386, - 42304, 0, 0, 12389, 0, 0, 41996, 11526, 63985, 5864, 1147, 66688, 42887, - 1987, 0, 5480, 7858, 11653, 4116, 12391, 66193, 0, 4939, 12384, 0, 0, - 41686, 63905, 119601, 0, 0, 0, 0, 0, 0, 8247, 507, 91, 2042, 120775, 0, - 0, 66028, 10036, 41844, 119830, 774, 119831, 0, 119815, 5994, 12539, 0, - 119817, 120597, 119833, 0, 0, 0, 0, 7719, 6026, 2486, 0, 0, 162, 0, - 65219, 41073, 9687, 41681, 6304, 119812, 66196, 0, 5262, 0, 66658, 12681, - 42379, 0, 7534, 12219, 0, 0, 42810, 10492, 0, 0, 0, 43119, 0, 120753, - 12403, 2500, 195013, 0, 4899, 0, 0, 0, 74113, 2343, 4103, 19946, 74112, - 0, 13112, 0, 0, 12859, 0, 0, 66369, 5861, 0, 11999, 12400, 0, 0, 12645, - 5146, 11320, 0, 67612, 65040, 0, 64184, 12974, 64183, 67613, 120645, - 5147, 0, 0, 74524, 0, 1928, 0, 0, 5991, 3445, 67609, 4976, 64176, 0, - 67610, 8241, 0, 0, 4206, 0, 0, 0, 0, 0, 10138, 0, 0, 8897, 0, 0, 8357, - 4124, 0, 65836, 120641, 0, 0, 0, 0, 1123, 963, 41553, 10120, 12405, 0, 0, - 398, 13278, 9723, 41551, 120311, 7945, 0, 4402, 10896, 12402, 0, 42392, - 1305, 12408, 0, 0, 0, 0, 41464, 12411, 12969, 120824, 41465, 0, 195017, - 1575, 0, 63955, 165, 3024, 41467, 119163, 0, 9093, 0, 9147, 0, 0, 0, - 9148, 9692, 4096, 53, 73776, 12368, 195018, 0, 9594, 0, 0, 43527, 0, 727, - 0, 0, 5805, 0, 0, 0, 42176, 12370, 11655, 119095, 10591, 12364, 0, 12372, - 120642, 0, 0, 0, 0, 12366, 10963, 6066, 1329, 0, 3052, 9220, 0, 64478, 0, - 10803, 4132, 0, 0, 0, 0, 0, 74837, 0, 1499, 0, 8055, 0, 63965, 0, 63962, - 74042, 8924, 43123, 5988, 3660, 63969, 11781, 63968, 8788, 1357, 64851, - 65743, 0, 8774, 0, 127086, 67618, 120172, 0, 1933, 0, 9564, 0, 0, 73866, - 0, 0, 2487, 67614, 3121, 1804, 3311, 67615, 0, 0, 12220, 67616, 120598, - 0, 0, 0, 6675, 0, 0, 67592, 120685, 0, 64771, 1198, 9132, 0, 64619, 510, - 64663, 0, 0, 4561, 7711, 1398, 0, 0, 74034, 41569, 0, 11406, 8167, 12127, - 0, 840, 0, 0, 0, 6967, 0, 0, 9796, 0, 333, 0, 0, 8144, 0, 0, 0, 12406, 0, - 0, 0, 6678, 7769, 0, 12621, 0, 0, 10227, 4764, 43101, 0, 0, 40986, 4127, - 66487, 0, 0, 12754, 195022, 0, 0, 0, 67594, 65609, 12944, 4050, 67595, 0, - 43102, 10581, 12985, 4533, 0, 0, 6490, 0, 12038, 0, 0, 120704, 65461, - 9798, 0, 0, 1948, 119007, 0, 952, 0, 0, 0, 120802, 6449, 9494, 0, 0, - 43098, 4843, 8142, 64160, 4098, 64170, 0, 0, 3436, 0, 0, 12817, 67597, - 6676, 3930, 66708, 0, 0, 67598, 0, 0, 0, 65591, 41581, 65916, 1453, 0, 0, - 0, 8500, 0, 120142, 73743, 120400, 4317, 120140, 0, 64676, 0, 0, 67606, - 119083, 0, 0, 13102, 0, 66003, 6672, 0, 0, 0, 0, 63841, 9613, 9001, 4526, - 11274, 67601, 64520, 64210, 6664, 0, 42056, 10228, 64957, 11281, 0, - 64213, 1469, 66640, 65381, 0, 4988, 42372, 0, 9598, 904, 352, 0, 1451, - 8061, 8453, 4134, 0, 74847, 67600, 0, 0, 10520, 8575, 0, 1201, 0, 12846, - 0, 0, 11919, 64962, 0, 74864, 0, 8511, 9460, 823, 11587, 12305, 0, 64695, - 0, 12387, 1253, 13183, 65766, 500, 42783, 65765, 64208, 64369, 65760, - 65761, 119585, 11606, 64784, 11702, 66498, 9821, 0, 0, 5152, 11048, 7533, - 120121, 64410, 0, 0, 4323, 120062, 0, 0, 0, 42587, 65339, 41394, 0, 4763, - 4112, 118935, 0, 5260, 43143, 0, 326, 120131, 0, 0, 10771, 2876, 194915, - 194835, 194924, 41398, 127079, 9802, 127077, 127076, 453, 41396, 120524, - 0, 12140, 9572, 0, 7003, 194883, 42334, 7704, 0, 0, 43144, 4123, 0, - 43146, 0, 0, 0, 65759, 10765, 64061, 4465, 9808, 64056, 65582, 4126, 0, - 9521, 9589, 64755, 0, 64020, 0, 10464, 0, 0, 194869, 64514, 11528, 64024, - 0, 679, 64013, 0, 5850, 758, 7536, 0, 0, 41441, 10693, 64006, 0, 64005, - 10541, 119019, 0, 64660, 0, 119050, 0, 0, 1139, 43298, 64027, 64029, - 8970, 0, 64000, 0, 10774, 0, 42522, 12421, 194876, 0, 1852, 3057, 0, - 73744, 64034, 64041, 0, 0, 0, 0, 0, 7645, 12854, 74338, 3496, 0, 0, 0, - 9102, 627, 0, 6158, 8327, 74553, 66632, 12419, 0, 11570, 0, 19960, 11696, - 0, 1018, 0, 194909, 0, 1682, 194896, 0, 42756, 12951, 194906, 0, 0, - 73814, 11412, 12563, 10728, 194830, 0, 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, 0, - 64483, 65693, 0, 0, 0, 0, 42240, 0, 0, 42864, 0, 64667, 41868, 1184, 0, - 815, 11484, 0, 67840, 0, 0, 0, 0, 0, 64683, 0, 0, 0, 0, 0, 9879, 0, 0, - 4158, 0, 68166, 0, 0, 0, 0, 0, 332, 118808, 0, 5142, 2407, 0, 0, 0, 0, - 74373, 0, 0, 0, 63870, 43163, 0, 0, 119081, 42867, 1834, 0, 0, 0, 10940, - 65249, 119040, 8662, 0, 0, 2652, 120527, 11539, 10784, 195093, 0, 0, 0, - 0, 0, 118858, 917505, 1828, 74474, 120327, 0, 8531, 12499, 6280, 12324, - 118854, 65238, 0, 4832, 65573, 0, 6279, 12508, 12904, 12502, 9161, 0, - 1620, 0, 3601, 0, 0, 0, 609, 11555, 0, 12496, 0, 74181, 4343, 12505, 0, - 0, 0, 11377, 239, 0, 637, 0, 0, 43029, 0, 0, 0, 43565, 127082, 0, 12696, - 0, 0, 0, 12929, 0, 712, 0, 4197, 0, 42818, 0, 0, 120490, 0, 0, 1506, - 43562, 0, 0, 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, 0, 42571, 0, 0, 0, 0, 0, 0, 0, 3178, 0, 0, 0, 0, 9080, - 127000, 0, 0, 0, 0, 11082, 0, 5699, 195100, 0, 9488, 65166, 119112, 0, 0, - 0, 0, 0, 0, 5265, 0, 0, 11487, 67858, 12464, 0, 43045, 0, 0, 43345, 0, - 10770, 118994, 43344, 465, 9829, 0, 74348, 0, 43346, 8116, 795, 0, 0, - 12462, 10930, 10831, 0, 118952, 64362, 0, 0, 120811, 0, 12468, 8607, - 1008, 0, 10092, 0, 917842, 67855, 0, 73771, 1766, 11282, 11996, 1820, - 4547, 0, 0, 0, 0, 13223, 0, 64595, 0, 0, 0, 4345, 12616, 0, 0, 0, 74467, - 0, 0, 0, 5382, 0, 0, 0, 119060, 64953, 5406, 19920, 0, 66510, 3590, 0, - 1130, 0, 0, 42016, 11823, 43023, 0, 118896, 7742, 0, 13280, 0, 9326, - 73826, 5310, 74812, 0, 119962, 8959, 43589, 74334, 66723, 0, 8568, 0, - 120496, 73816, 120803, 0, 0, 0, 11621, 12460, 0, 0, 0, 0, 74519, 0, 0, 0, + 0, 77824, 0, 4900, 0, 12878, 0, 8984, 4119, 74768, 8971, 78593, 43113, + 9702, 78594, 11025, 9245, 13048, 4927, 4138, 74185, 194921, 0, 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, 0, 5993, + 2819, 0, 12706, 77840, 1893, 7266, 63915, 7264, 7265, 0, 1363, 0, 63997, + 63910, 63996, 3077, 0, 0, 1512, 0, 12589, 41479, 0, 0, 43339, 0, 9836, + 120727, 0, 41481, 43335, 7832, 42343, 3090, 43337, 817, 1664, 1850, 0, + 3079, 11340, 42408, 42447, 194704, 120020, 42307, 12386, 42304, 0, 0, + 12389, 0, 194694, 41996, 11526, 63985, 5864, 1147, 63992, 42887, 1987, 0, + 5480, 7858, 11653, 4116, 12391, 66193, 0, 4939, 12384, 0, 0, 41686, + 63905, 119601, 194688, 0, 0, 12649, 0, 0, 8247, 507, 91, 2042, 120775, + 43643, 194689, 66028, 10036, 41844, 119813, 774, 119831, 0, 119815, 5994, + 12539, 0, 78375, 120597, 119833, 0, 119600, 0, 0, 7719, 6026, 2486, 0, + 119808, 162, 0, 65219, 41073, 9687, 41681, 6304, 119812, 66196, 0, 5262, + 0, 55233, 12681, 42379, 0, 7534, 12219, 0, 127528, 42810, 10492, 0, 0, 0, + 43119, 0, 120753, 12403, 2500, 195013, 0, 4899, 0, 0, 0, 74113, 2343, + 4103, 19946, 74112, 77851, 13112, 0, 0, 12859, 0, 120148, 66369, 5861, 0, + 11999, 12400, 0, 0, 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, 0, 0, + 10138, 0, 0, 8897, 0, 0, 8357, 4124, 77862, 65836, 120641, 0, 77859, 0, + 0, 1123, 963, 41553, 10120, 12405, 120150, 0, 398, 13278, 9723, 6366, + 120311, 7945, 0, 4402, 9970, 12402, 0, 42392, 1305, 12408, 0, 44007, 0, + 0, 41464, 12411, 12969, 120824, 41465, 0, 8528, 1575, 0, 63955, 165, + 3024, 41467, 119163, 0, 9093, 0, 9147, 0, 63958, 0, 9148, 9692, 4096, 53, + 73776, 6750, 195018, 0, 9594, 0, 0, 43527, 0, 727, 0, 0, 5805, 0, 6726, + 0, 42176, 12370, 11655, 119095, 10591, 12364, 0, 12372, 120642, 120307, + 0, 0, 0, 12366, 10963, 6066, 1329, 0, 3052, 9220, 0, 64478, 0, 10803, + 4132, 120306, 68474, 0, 0, 0, 74837, 0, 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, 120154, 9564, 0, + 0, 73866, 0, 0, 2487, 67614, 3121, 1804, 3311, 67615, 0, 78302, 12220, + 67616, 120598, 0, 0, 68200, 6675, 0, 0, 67592, 120685, 0, 64771, 1198, + 9132, 0, 64619, 510, 64663, 0, 0, 4561, 2101, 1398, 0, 0, 74034, 41569, + 0, 11406, 8167, 12127, 0, 840, 0, 0, 0, 6967, 0, 0, 9796, 0, 333, 0, 0, + 8144, 0, 0, 0, 12406, 0, 19931, 119089, 6678, 7769, 0, 12621, 0, 0, + 10227, 4764, 43101, 9981, 0, 40986, 4127, 66487, 0, 42202, 12754, 195022, + 0, 0, 0, 67594, 2048, 12944, 4050, 67595, 917967, 43102, 10581, 12985, + 4533, 195021, 74003, 6490, 0, 12038, 0, 0, 120704, 65461, 9798, 0, 0, + 1948, 119007, 0, 952, 0, 0, 0, 120802, 6449, 9494, 120313, 0, 43098, + 4843, 8142, 64160, 4098, 64170, 0, 0, 3436, 0, 0, 12817, 67597, 6676, + 3930, 66708, 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, 0, 63841, 9613, + 9001, 4526, 11274, 67601, 64520, 64210, 6664, 78704, 42056, 10228, 64957, + 11281, 0, 64213, 1469, 66640, 65381, 42197, 4988, 42372, 0, 9598, 904, + 352, 42225, 1451, 8061, 8453, 4134, 0, 74847, 66576, 0, 0, 10520, 8575, + 9960, 1201, 0, 12846, 0, 0, 11919, 64962, 0, 43739, 127281, 8511, 9460, + 823, 11587, 12305, 0, 64695, 0, 12387, 1253, 13183, 65766, 500, 42783, + 65765, 64208, 64369, 65760, 65761, 119585, 11606, 64784, 11702, 66498, + 9821, 0, 0, 5152, 11048, 7533, 68366, 64410, 0, 0, 4323, 120062, 0, 0, + 127052, 42587, 42214, 41394, 0, 4763, 4112, 118935, 0, 5260, 43143, 0, + 326, 120131, 68423, 0, 10771, 2876, 74074, 194835, 194924, 41398, 7382, + 9802, 127077, 127076, 453, 41396, 120524, 42720, 12140, 9572, 0, 7003, + 194883, 42334, 7704, 0, 0, 43144, 4123, 8494, 43146, 9977, 0, 0, 65759, + 10765, 64061, 4465, 9808, 64056, 65582, 4126, 0, 9521, 9589, 64755, 0, + 64020, 0, 10464, 0, 0, 194869, 64514, 11528, 64024, 0, 679, 64013, 0, + 5850, 758, 7536, 0, 0, 41441, 10693, 64006, 0, 64005, 10541, 119019, 0, + 64660, 0, 119050, 0, 0, 1139, 43298, 64027, 64029, 8970, 0, 64000, 0, + 10774, 0, 42201, 12421, 194876, 0, 1852, 3057, 0, 73744, 64034, 64039, 0, + 0, 0, 0, 0, 7645, 12854, 74338, 3496, 0, 0, 0, 9102, 627, 0, 6158, 8327, + 74553, 66632, 12419, 13309, 11570, 0, 19960, 11696, 0, 1018, 118970, + 194909, 0, 1682, 194896, 194911, 42756, 6765, 194906, 0, 0, 73814, 11412, + 6768, 10728, 194830, 119010, 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, 0, 42240, 0, 0, 42864, 0, 64667, 41868, 1184, 0, 815, + 11484, 127535, 67840, 0, 0, 0, 0, 10986, 64683, 0, 0, 0, 0, 0, 9879, 0, + 0, 4158, 0, 68166, 0, 0, 0, 0, 0, 332, 118808, 0, 5142, 2407, 0, 42199, + 0, 0, 74373, 0, 55217, 0, 63870, 43163, 0, 0, 119081, 42867, 1834, 0, 0, + 69817, 10940, 65249, 119040, 8662, 0, 0, 2652, 120527, 11539, 10784, + 195093, 67674, 0, 0, 0, 0, 74562, 917505, 1828, 74474, 120327, 78620, + 8531, 12499, 6280, 12324, 118854, 65238, 68374, 4832, 65573, 0, 6279, + 12508, 12904, 12502, 9161, 0, 1620, 0, 3601, 195094, 0, 0, 609, 11555, 0, + 12496, 0, 74181, 4343, 12505, 0, 0, 0, 11377, 239, 0, 637, 0, 0, 42671, + 0, 0, 0, 43565, 127082, 0, 12696, 0, 0, 0, 12929, 0, 712, 0, 4197, 0, + 42818, 0, 0, 120490, 0, 0, 1506, 43562, 0, 0, 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, 917837, 0, 0, + 0, 0, 0, 0, 3178, 0, 0, 0, 0, 9080, 127000, 120352, 0, 68209, 0, 11082, + 0, 5699, 195100, 66000, 9488, 65166, 119112, 0, 0, 0, 0, 0, 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, 0, 120811, 0, 12468, 8607, 1008, 0, + 10092, 0, 917842, 67855, 55257, 73771, 1766, 11282, 11996, 1820, 4547, 0, + 0, 0, 0, 13223, 0, 64595, 0, 0, 0, 4345, 12616, 0, 0, 0, 74467, 0, 0, 0, + 5382, 0, 0, 0, 119060, 64953, 5406, 19920, 0, 66510, 3590, 0, 1130, 0, 0, + 42016, 11823, 43023, 0, 118896, 7742, 0, 13280, 0, 9326, 73826, 5310, + 74812, 0, 119962, 8959, 43589, 6747, 66723, 0, 8568, 0, 120496, 73816, + 120803, 0, 42670, 0, 11621, 12460, 0, 120631, 0, 43063, 74519, 0, 0, 0, 0, 0, 11689, 5410, 5783, 10468, 8403, 5400, 11594, 0, 0, 118990, 10491, 0, 64412, 0, 0, 5587, 42865, 64404, 8268, 4923, 65086, 8981, 12382, - 42133, 120755, 9706, 0, 0, 66610, 10461, 12103, 0, 8642, 0, 42766, 0, 0, - 0, 0, 119105, 0, 0, 0, 8816, 41515, 0, 11802, 8041, 1461, 910, 119133, 0, - 0, 3658, 0, 120525, 0, 7617, 0, 12888, 0, 0, 13143, 0, 41514, 0, 5703, 0, - 41517, 41504, 41519, 10016, 64305, 0, 65864, 623, 781, 670, 10660, 5769, - 613, 7543, 120774, 477, 41083, 0, 0, 592, 1578, 12459, 0, 0, 0, 8225, 0, - 654, 11345, 653, 652, 0, 647, 0, 633, 120744, 0, 0, 12480, 74354, 0, 39, - 12487, 0, 120529, 74199, 12482, 0, 12489, 0, 3195, 5550, 0, 7897, 0, - 1203, 74396, 1813, 64544, 41311, 12090, 0, 2877, 0, 0, 1675, 0, 0, 0, 0, - 10070, 10595, 0, 119077, 0, 0, 0, 0, 0, 118827, 0, 0, 0, 119561, 0, 0, 0, - 0, 0, 0, 0, 120692, 0, 0, 270, 0, 10714, 0, 0, 0, 0, 0, 65372, 0, 74038, - 119558, 6273, 66679, 364, 9595, 0, 0, 0, 707, 0, 0, 9282, 66489, 224, 0, - 0, 9332, 4966, 0, 0, 0, 0, 3841, 0, 0, 10732, 0, 850, 4972, 0, 64699, - 2909, 0, 65309, 0, 0, 11544, 10203, 9608, 0, 0, 11962, 0, 12507, 1196, 0, - 0, 777, 0, 4375, 65271, 0, 0, 12198, 0, 64824, 0, 0, 9454, 63778, 8658, - 42528, 0, 2705, 917975, 41520, 0, 0, 11986, 7765, 42502, 8280, 0, 2701, - 0, 0, 5767, 0, 0, 9809, 8353, 63747, 66701, 63772, 0, 63745, 1748, 63770, - 0, 0, 0, 65542, 63766, 0, 3061, 0, 63764, 63789, 9067, 6096, 0, 7694, 0, - 7257, 63768, 3485, 12987, 0, 0, 0, 63807, 1591, 0, 0, 63783, 0, 0, 0, 0, - 0, 0, 74575, 0, 65719, 13083, 64574, 65012, 0, 1640, 12495, 66691, 7624, - 3138, 10996, 0, 1922, 0, 12498, 10987, 0, 0, 3894, 65543, 0, 194842, 0, - 493, 0, 43197, 1717, 4228, 479, 10303, 917934, 0, 917935, 10335, 3520, - 917932, 12490, 64315, 0, 127039, 12493, 6233, 64636, 1002, 12491, 0, - 64911, 127040, 0, 65120, 0, 0, 0, 11611, 66228, 127041, 66213, 63864, - 66221, 66226, 66229, 13218, 66231, 66216, 8507, 66236, 66211, 66218, 0, - 66240, 0, 66233, 8928, 0, 7909, 66234, 11605, 63759, 0, 66208, 73999, - 63799, 0, 244, 11542, 12898, 12494, 73761, 12492, 12669, 0, 0, 74153, 0, - 0, 120680, 4882, 13040, 0, 8612, 4885, 74053, 0, 13042, 4880, 64662, - 2429, 1360, 248, 0, 63797, 0, 63792, 0, 7292, 0, 63756, 42786, 66693, 0, - 1870, 917916, 470, 0, 0, 120306, 0, 0, 4579, 0, 0, 12511, 74453, 12514, - 0, 74579, 7239, 7001, 8623, 0, 0, 0, 0, 12512, 11615, 13041, 0, 0, 659, - 6098, 0, 12234, 0, 127067, 8311, 12510, 41803, 13039, 127072, 12513, - 10202, 12471, 0, 8747, 0, 0, 0, 2323, 0, 2319, 0, 12477, 0, 2311, 0, - 4415, 237, 6281, 0, 0, 0, 2309, 1312, 8173, 0, 12469, 0, 0, 64335, 10609, - 0, 0, 9397, 11524, 9395, 9396, 9393, 9394, 9391, 9392, 9389, 6209, 9387, - 9388, 4932, 9386, 9383, 9384, 0, 0, 65451, 8185, 0, 917832, 43024, 43336, - 74375, 2313, 0, 7948, 9236, 0, 0, 0, 10570, 0, 6289, 10484, 0, 0, 11998, - 12082, 10924, 3147, 0, 0, 12524, 0, 2310, 11818, 9381, 9382, 9379, 9380, + 42133, 120755, 9706, 0, 0, 66610, 10461, 12103, 0, 8642, 0, 42766, 0, + 66566, 9983, 0, 119105, 0, 0, 0, 7398, 41515, 0, 11802, 8041, 1461, 910, + 119133, 0, 6749, 3658, 0, 120525, 0, 7617, 0, 12888, 0, 67668, 13143, 0, + 41514, 11097, 5703, 0, 41517, 41504, 41519, 10016, 64305, 0, 65864, 623, + 781, 670, 10660, 5769, 613, 7543, 120279, 477, 41083, 0, 0, 592, 1578, + 12459, 43449, 0, 0, 8225, 0, 654, 11345, 653, 652, 0, 647, 0, 633, + 120744, 0, 0, 12480, 43243, 0, 39, 12487, 0, 120529, 74199, 12482, 0, + 12489, 0, 3195, 5550, 0, 7897, 0, 1203, 74396, 1813, 64544, 41311, 12090, + 0, 2877, 0, 0, 1675, 0, 0, 0, 0, 10070, 10595, 0, 119077, 0, 0, 0, 0, 0, + 43244, 0, 0, 0, 119561, 0, 0, 0, 0, 0, 0, 0, 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, 64699, 2909, 68619, 44008, + 68627, 0, 11544, 10203, 9608, 0, 0, 11962, 0, 12507, 1196, 0, 0, 777, 0, + 4375, 65271, 67678, 0, 12198, 0, 64824, 0, 0, 9454, 63778, 8658, 42528, + 0, 2705, 917975, 41520, 0, 0, 11986, 7765, 42502, 8280, 0, 2701, 0, 0, + 5767, 0, 0, 9809, 8353, 63747, 66701, 63772, 0, 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, 0, 0, 0, 0, 74575, 0, 65719, 13083, 64574, 65012, 0, 1640, 12495, + 66691, 7624, 3138, 10996, 0, 1922, 0, 12498, 10987, 0, 0, 3894, 65543, 0, + 194842, 0, 493, 0, 43197, 1717, 4228, 479, 10303, 74020, 0, 917935, + 10335, 3520, 917932, 12490, 64315, 0, 127039, 12493, 6233, 42681, 1002, + 12491, 0, 64911, 127040, 2096, 65120, 0, 0, 0, 11611, 66228, 127041, + 66213, 63864, 66221, 66226, 66229, 13218, 66231, 66216, 8507, 66236, + 66211, 66218, 0, 66240, 78041, 66233, 8928, 0, 7909, 66234, 11605, 63759, + 0, 66208, 73999, 63799, 63803, 244, 11542, 12898, 12494, 73761, 12492, + 12669, 0, 0, 74153, 0, 0, 120680, 4882, 13040, 0, 8612, 4885, 74053, 0, + 13042, 4880, 64662, 2429, 1360, 248, 0, 63797, 0, 42358, 0, 7292, 0, + 63756, 42786, 66693, 0, 1870, 78040, 470, 78038, 78035, 78036, 0, 78034, + 4579, 0, 0, 12511, 74453, 12514, 0, 74579, 7239, 7001, 8623, 0, 0, 0, + 7378, 12512, 11615, 6104, 0, 0, 659, 6098, 0, 12234, 127307, 127067, + 8311, 12510, 41803, 13039, 127072, 12513, 10202, 12471, 0, 8747, 0, 0, 0, + 2323, 0, 2319, 77917, 12477, 77916, 2311, 0, 4415, 237, 6281, 0, 0, 0, + 2309, 1312, 8173, 0, 12469, 0, 78505, 64335, 10609, 0, 0, 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, + 0, 7948, 9236, 0, 0, 0, 10570, 43473, 6289, 10484, 0, 0, 11998, 12082, + 10924, 3147, 0, 120684, 12524, 0, 2310, 11818, 9381, 9382, 9379, 9380, 9377, 9378, 9375, 9376, 1683, 9374, 0, 9372, 12444, 0, 0, 13016, 8210, 0, - 42029, 11079, 12331, 0, 42032, 8744, 726, 0, 0, 4155, 0, 0, 42030, 5007, - 12522, 43088, 0, 4951, 0, 0, 0, 9922, 43309, 0, 12525, 0, 12016, 65770, - 9548, 0, 403, 0, 12503, 0, 0, 11030, 0, 0, 65691, 63998, 1819, 10496, 0, - 0, 119920, 0, 0, 0, 12506, 0, 12231, 0, 12500, 67605, 12509, 64393, 0, - 3389, 10589, 6608, 41047, 120321, 0, 0, 74069, 0, 0, 3608, 8281, 917839, - 1107, 0, 9076, 8862, 0, 41052, 13084, 64766, 43217, 7803, 13222, 118963, - 74782, 0, 8546, 11553, 63995, 13177, 9043, 6303, 0, 498, 64471, 120324, - 0, 12529, 8042, 0, 2344, 12528, 8031, 2414, 0, 0, 3231, 0, 6422, 66512, - 0, 12530, 2537, 0, 41429, 12658, 13036, 65772, 0, 0, 41433, 4719, 469, 0, - 4363, 3313, 41428, 0, 2023, 1772, 0, 0, 65706, 10051, 64812, 0, 0, 9920, - 12215, 0, 4931, 1951, 12497, 119363, 9607, 0, 9663, 0, 119634, 6503, - 41110, 0, 1491, 0, 0, 0, 41061, 0, 0, 0, 65026, 41993, 41509, 11045, - 65028, 0, 66476, 41108, 9738, 41995, 1075, 1958, 12535, 41992, 41506, 0, - 41687, 0, 120717, 0, 917816, 0, 7692, 0, 8008, 0, 330, 8566, 65083, - 41133, 9816, 0, 12532, 127055, 127056, 3508, 127058, 127059, 0, 917542, - 917815, 0, 6411, 12910, 120505, 66644, 13028, 0, 12537, 0, 0, 64136, - 12536, 2350, 13029, 0, 0, 0, 13030, 0, 4527, 0, 12538, 0, 0, 65599, - 65717, 12607, 0, 4948, 12484, 4032, 0, 42803, 0, 6207, 0, 6117, 66000, - 8412, 0, 7438, 1296, 2325, 41511, 0, 10149, 74118, 0, 0, 12481, 0, 12488, - 0, 0, 41556, 64414, 118802, 2354, 0, 73766, 0, 6295, 901, 41510, 7953, 0, - 65032, 41513, 0, 11927, 66584, 0, 0, 119010, 0, 0, 0, 848, 9868, 0, 6424, - 0, 119338, 0, 74031, 0, 0, 2352, 0, 893, 64576, 11289, 1407, 0, 0, 13026, - 0, 0, 0, 13023, 8903, 9777, 66715, 1871, 8099, 0, 0, 1343, 0, 0, 9325, - 13025, 6283, 11738, 0, 0, 0, 11741, 0, 0, 9216, 8263, 11279, 194752, 0, - 194754, 13021, 64494, 3136, 194758, 194757, 194760, 13022, 0, 64588, 0, - 0, 74552, 10014, 0, 41260, 119340, 13020, 118993, 194764, 194767, 74340, - 0, 0, 64945, 8029, 0, 0, 0, 3335, 0, 0, 9776, 120526, 194748, 5215, - 42644, 3333, 1632, 194751, 64849, 3342, 0, 5363, 12957, 0, 4156, 0, 0, - 6421, 0, 1611, 0, 13018, 74257, 0, 0, 3337, 4537, 67895, 11736, 0, 0, - 6482, 4214, 73790, 11945, 0, 13046, 8838, 425, 4025, 10709, 0, 73927, - 2392, 13047, 0, 0, 10617, 13049, 6499, 194739, 12424, 194741, 73944, - 13050, 194742, 194745, 6507, 0, 0, 0, 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, 194734, - 41057, 0, 0, 0, 0, 0, 0, 0, 0, 41496, 0, 9165, 1572, 11911, 0, 118842, - 2346, 13270, 8958, 0, 9646, 3773, 43183, 6401, 42536, 0, 0, 13043, 8056, - 0, 65681, 208, 0, 0, 0, 0, 0, 10699, 6408, 0, 7825, 5661, 0, 120630, - 3603, 41109, 2398, 3548, 0, 0, 0, 0, 3115, 0, 0, 11321, 0, 0, 0, 194726, - 4876, 74286, 0, 0, 0, 0, 41558, 41471, 73950, 8158, 41561, 41472, 0, - 13051, 194672, 3143, 194674, 194673, 41559, 1896, 66256, 13052, 194680, - 5665, 0, 119071, 41986, 63974, 0, 74352, 74161, 4154, 9863, 43550, 12310, - 5662, 42382, 194686, 73924, 1121, 194665, 63959, 0, 74378, 13231, 0, - 64752, 4732, 194666, 11596, 194668, 65187, 1626, 63983, 10110, 194671, - 42024, 6420, 42028, 0, 10509, 2795, 4910, 194728, 0, 64753, 6275, 0, - 118830, 63978, 11044, 3229, 6423, 42774, 0, 0, 0, 12823, 2331, 917810, - 42026, 6137, 0, 7524, 0, 0, 119343, 0, 8338, 0, 65043, 0, 822, 0, 9903, - 64721, 194657, 194656, 194659, 194658, 194661, 194660, 0, 41265, 5311, - 1795, 965, 118791, 10587, 0, 11278, 0, 194640, 0, 12946, 194641, 120705, - 194643, 6294, 3144, 194648, 194647, 65019, 194649, 73990, 0, 0, 748, - 41067, 2330, 535, 3148, 12375, 194652, 194629, 10556, 2475, 12388, 4889, - 8968, 67863, 3593, 0, 0, 2342, 0, 194634, 65206, 4894, 194635, 4890, - 194637, 0, 581, 4893, 0, 0, 65545, 4888, 4157, 917805, 0, 0, 0, 0, 10119, - 6415, 0, 0, 0, 0, 0, 11375, 64746, 2332, 0, 412, 0, 64932, 42880, 43587, - 0, 0, 0, 0, 65197, 0, 12203, 0, 0, 8913, 65854, 4875, 65811, 120381, - 194624, 120397, 9344, 8826, 120386, 120395, 13104, 74781, 11997, 120393, - 0, 0, 3134, 0, 65696, 0, 0, 66217, 0, 8334, 119344, 0, 3449, 0, 0, 0, 0, - 118950, 74011, 0, 0, 0, 0, 1908, 0, 4328, 10734, 127014, 0, 0, 7804, 0, - 10811, 6250, 11339, 4914, 11367, 0, 118971, 4917, 74516, 0, 64285, 4912, - 5464, 0, 118893, 2361, 7971, 0, 0, 0, 118986, 0, 8086, 74317, 0, 8319, - 2312, 40977, 10960, 40962, 8305, 12573, 0, 40980, 0, 13202, 0, 12582, 0, - 0, 0, 42438, 0, 6288, 0, 0, 5653, 42400, 10891, 7698, 5658, 74045, 0, 0, - 0, 4913, 0, 0, 0, 42326, 0, 0, 0, 42478, 2327, 0, 12959, 42287, 12705, 0, - 0, 12588, 8821, 6153, 2867, 194708, 66312, 698, 194709, 194712, 10356, - 74075, 194713, 651, 12641, 0, 0, 0, 0, 41552, 65115, 194691, 194690, - 194693, 194692, 194695, 194694, 194697, 74356, 0, 4716, 43277, 0, 0, - 12340, 120568, 0, 194700, 194699, 194702, 120676, 8703, 5462, 917629, 0, + 42029, 11079, 12331, 43451, 42032, 8744, 726, 0, 0, 4155, 0, 0, 42030, + 5007, 12522, 43088, 0, 4951, 0, 127240, 0, 9922, 43309, 0, 12525, 0, + 12016, 65770, 9548, 67665, 403, 78230, 12503, 0, 0, 11030, 0, 0, 65691, + 63998, 1819, 10496, 0, 0, 119920, 0, 0, 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, 0, + 41052, 13084, 64766, 43217, 7803, 13222, 74165, 74782, 0, 8546, 11553, + 63995, 13177, 9043, 6303, 0, 498, 64471, 120324, 0, 12529, 8042, 0, 2344, + 12528, 8031, 2414, 0, 0, 3231, 0, 6422, 66512, 0, 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, 0, 119634, + 6503, 41110, 0, 1491, 0, 0, 0, 41061, 0, 0, 0, 65026, 41993, 41509, + 11045, 65028, 78602, 66476, 41108, 9738, 41995, 1075, 1958, 12535, 41992, + 41506, 0, 41687, 0, 120717, 0, 9940, 0, 7692, 0, 8008, 41131, 330, 8566, + 65083, 41133, 9816, 0, 12532, 78550, 78546, 3508, 127058, 43235, 0, + 127298, 69783, 78231, 6411, 12910, 78554, 66644, 13028, 6737, 12537, 0, + 0, 64136, 12536, 2350, 13029, 78233, 0, 0, 13030, 6702, 4527, 0, 12538, + 0, 0, 65599, 65717, 9966, 0, 4948, 12484, 4032, 0, 12623, 0, 6207, 0, + 6117, 65930, 8412, 0, 7438, 1296, 2325, 41511, 0, 10149, 74118, 0, 0, + 12481, 0, 12488, 0, 0, 41556, 64414, 118802, 2354, 0, 73766, 0, 6295, + 901, 41510, 7953, 0, 65032, 41513, 0, 11927, 66584, 78559, 78560, 78557, + 78558, 0, 78556, 848, 9868, 0, 6424, 78568, 119338, 78565, 74031, 78563, + 78564, 2352, 78572, 893, 64576, 11289, 1407, 0, 0, 13026, 6762, 78579, + 78580, 13023, 8903, 9777, 66715, 1871, 8099, 0, 0, 1343, 0, 0, 9325, + 6818, 6283, 11738, 0, 0, 0, 11741, 0, 0, 9216, 8263, 11279, 194752, 0, + 194754, 13021, 64494, 3136, 194758, 194757, 194760, 13022, 42737, 64588, + 0, 0, 74552, 10014, 0, 41260, 119340, 13020, 118993, 194764, 194767, + 74340, 0, 0, 64945, 8029, 0, 0, 0, 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, 78584, 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, + 194739, 12424, 68614, 73944, 13050, 9924, 194745, 6507, 0, 0, 0, 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, 194734, 41057, 0, 0, 0, 0, 0, 0, 127109, 0, 41496, 0, + 9165, 1572, 11911, 0, 118842, 2346, 13270, 8958, 0, 9646, 3773, 43183, + 6401, 5831, 0, 0, 13043, 8056, 0, 65681, 208, 0, 0, 0, 0, 0, 10699, 6408, + 0, 7825, 5661, 0, 120630, 3603, 41109, 2398, 3548, 0, 0, 119933, 0, 3115, + 9918, 0, 11321, 0, 0, 0, 194726, 4876, 74286, 0, 0, 43468, 0, 41558, + 41471, 73950, 8158, 9944, 41472, 0, 13051, 78689, 3143, 194674, 6701, + 41559, 1896, 66256, 13052, 194680, 5665, 0, 119071, 7025, 63974, 0, + 74352, 74161, 4154, 9863, 43550, 12310, 5662, 42382, 194686, 73924, 1121, + 194665, 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, 917808, 118830, 63978, 11044, 3229, + 6423, 42774, 0, 0, 0, 12823, 2331, 917810, 42026, 6137, 0, 7524, 0, + 917809, 119343, 0, 8338, 0, 65043, 0, 822, 0, 9903, 64721, 42722, 194656, + 194659, 78655, 78661, 194660, 78662, 41265, 5311, 1795, 965, 118791, + 10587, 78055, 11278, 78632, 194640, 0, 12946, 194641, 120705, 194643, + 6294, 3144, 194648, 194647, 65019, 194649, 73990, 0, 0, 748, 41067, 2330, + 535, 3148, 12375, 194652, 194629, 10556, 2475, 12388, 4889, 8968, 67863, + 3593, 0, 0, 2342, 0, 194634, 65206, 4894, 194635, 4890, 194637, 917804, + 581, 4893, 0, 6571, 65545, 4888, 4157, 78048, 78049, 78046, 78047, 0, + 10119, 6415, 0, 0, 0, 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, 0, 0, 66217, 0, 8334, + 119344, 0, 3449, 0, 0, 78414, 78413, 118950, 74011, 0, 0, 0, 0, 1908, + 120167, 4328, 10734, 127014, 0, 0, 7804, 78272, 10811, 6250, 11339, 4914, + 11367, 0, 78054, 4917, 74516, 74208, 64285, 4912, 5464, 0, 118893, 2361, + 7971, 78072, 78073, 55243, 78071, 0, 8086, 74317, 6707, 8319, 2312, + 40977, 10960, 40962, 8305, 12573, 0, 40980, 0, 13202, 0, 12582, 78282, 0, + 0, 42438, 55221, 6288, 78280, 0, 5653, 42400, 10891, 7698, 5658, 74045, + 0, 0, 0, 4913, 0, 0, 0, 42326, 0, 0, 0, 42478, 2327, 0, 12563, 42287, + 12705, 0, 0, 12588, 8821, 6153, 2867, 194708, 66312, 698, 194709, 194606, + 10356, 74075, 194713, 651, 12641, 0, 0, 0, 0, 41552, 65115, 78465, 78467, + 78463, 78464, 194695, 78461, 194697, 74356, 0, 4716, 43277, 0, 78474, + 12340, 120568, 0, 194700, 55264, 41211, 120676, 8703, 5462, 917629, 0, 10101, 0, 0, 8479, 4151, 41933, 0, 0, 66254, 120821, 0, 0, 0, 0, 119194, 74050, 0, 0, 0, 0, 0, 0, 12278, 0, 0, 0, 2700, 12576, 7842, 12899, 0, 0, - 2699, 0, 0, 2985, 119222, 0, 0, 12192, 119314, 0, 119312, 9827, 119310, - 119311, 119308, 119309, 119306, 11481, 41210, 119305, 0, 35, 0, 0, 66694, - 74357, 0, 0, 43596, 6090, 64257, 7812, 10534, 0, 0, 73848, 0, 4272, 0, - 40967, 40964, 917825, 12704, 0, 43306, 0, 64497, 12138, 7930, 0, 43303, - 0, 0, 917826, 5244, 4189, 127098, 67596, 0, 4188, 1879, 0, 968, 0, 0, 0, - 8873, 0, 0, 0, 65555, 12574, 0, 0, 0, 74490, 0, 0, 0, 0, 0, 0, 12578, - 12720, 0, 41227, 0, 12346, 0, 64848, 0, 0, 7251, 0, 0, 118850, 119141, 0, - 66015, 0, 959, 8885, 12564, 66457, 0, 9469, 9632, 0, 74761, 64323, 0, 0, - 0, 0, 310, 0, 41564, 10976, 0, 0, 0, 0, 10054, 6497, 8574, 0, 9012, - 19958, 74420, 65089, 13215, 65047, 65163, 74044, 374, 43195, 816, 0, 0, - 0, 41934, 7465, 0, 0, 0, 4715, 6101, 0, 41936, 0, 4879, 0, 65446, 0, 307, - 0, 9585, 5374, 0, 0, 0, 0, 0, 0, 0, 65567, 120614, 1929, 0, 12142, 0, - 12236, 41419, 194618, 194621, 12982, 194623, 5378, 0, 0, 41421, 0, 4462, - 0, 0, 0, 821, 0, 2498, 5800, 120157, 0, 1760, 0, 4469, 2324, 828, 3611, - 0, 757, 1185, 0, 0, 43597, 10628, 74808, 194572, 7999, 0, 0, 0, 10634, - 10942, 7713, 2348, 0, 64374, 4380, 194608, 119044, 194610, 64324, 41240, - 862, 65626, 194613, 1810, 3673, 5137, 194617, 0, 7277, 65622, 0, 7566, - 64688, 194593, 194592, 194595, 120812, 194597, 4748, 194599, 194598, - 194601, 42260, 5871, 119075, 0, 74576, 0, 0, 194602, 3967, 194604, 13137, - 8775, 194605, 0, 2963, 0, 8410, 4454, 723, 0, 966, 4449, 0, 127060, 0, - 7819, 2320, 194589, 339, 4968, 194590, 120399, 8075, 0, 0, 8047, 0, 0, - 12634, 41542, 0, 7466, 118822, 12174, 42610, 0, 74452, 0, 1584, 66645, - 6045, 0, 120640, 65218, 0, 0, 0, 7537, 0, 11370, 0, 10330, 0, 10394, 0, + 2699, 0, 73845, 2985, 119222, 0, 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, 78483, 4272, 0, 40967, 40964, 917825, 12704, + 78487, 43306, 0, 64497, 12138, 7930, 0, 43303, 68216, 0, 917826, 5244, + 4189, 127098, 67596, 0, 4188, 1879, 0, 968, 0, 43743, 0, 8873, 0, 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, 0, 66015, 0, 959, 8885, 12564, 66457, 78808, 9469, 9632, + 0, 74761, 64323, 0, 0, 0, 0, 310, 0, 41281, 10976, 0, 194768, 0, 74266, + 10054, 6497, 8574, 0, 9012, 19958, 74420, 65089, 13215, 65047, 65163, + 74044, 374, 43195, 816, 0, 0, 0, 41934, 7465, 0, 0, 0, 4715, 6101, 0, + 41936, 0, 4879, 0, 65446, 0, 307, 0, 9585, 5374, 0, 0, 0, 0, 0, 0, 0, + 65567, 120614, 1929, 0, 12142, 0, 12236, 41419, 194618, 194621, 12982, + 194623, 5378, 78791, 0, 41421, 0, 4462, 0, 0, 0, 821, 0, 2498, 5800, + 120157, 0, 1760, 0, 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, 194599, 194598, 194601, 42260, 5871, 119075, + 0, 74576, 44019, 0, 194602, 3967, 194604, 13137, 8775, 194605, 0, 2963, + 0, 8410, 4454, 723, 917600, 966, 4449, 0, 127060, 0, 7819, 2320, 194589, + 339, 4968, 194590, 120399, 8075, 55276, 0, 8047, 0, 78827, 12634, 41542, + 78780, 7466, 6705, 12174, 42610, 0, 74452, 0, 1584, 66645, 6045, 6729, + 120640, 65218, 78777, 0, 78062, 7537, 0, 11370, 0, 10330, 0, 10394, 0, 194783, 0, 0, 9780, 0, 13092, 194576, 119605, 194578, 7074, 120396, 194579, 194582, 11414, 194584, 2531, 13034, 0, 0, 0, 1259, 7517, 0, 0, 194561, 40996, 13037, 7092, 641, 5219, 194567, 194566, 11064, 41129, 0, 42850, 13035, 9075, 0, 5466, 194570, 0, 64098, 65793, 4535, 194573, 4271, - 194575, 0, 0, 41410, 0, 64262, 0, 41407, 0, 0, 41131, 118864, 9046, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 64338, 2563, 13033, 247, 917787, 0, 12338, 4651, - 0, 11270, 0, 0, 11933, 0, 0, 41903, 67892, 11001, 0, 42255, 0, 0, 0, - 41905, 0, 0, 10775, 9793, 5009, 0, 42269, 64587, 0, 42535, 0, 64529, - 41408, 42853, 3877, 0, 0, 8147, 43566, 119021, 0, 10236, 65918, 0, 0, 0, - 64506, 0, 118921, 4747, 0, 0, 43200, 5832, 0, 0, 5141, 42600, 0, 43203, - 0, 0, 43286, 0, 0, 0, 0, 0, 0, 74137, 11303, 65547, 0, 7031, 859, 0, 0, - 0, 6059, 126985, 0, 0, 8535, 0, 0, 194787, 66032, 11488, 0, 120786, 0, 0, - 10558, 63885, 0, 11822, 0, 43189, 0, 0, 1788, 1579, 120482, 917817, 0, 0, - 0, 9028, 119571, 0, 0, 0, 1285, 64882, 41242, 0, 0, 12640, 0, 66642, 0, - 12625, 0, 0, 0, 3940, 41597, 0, 3396, 12642, 8665, 0, 0, 12630, 1653, 0, + 78417, 0, 6769, 41410, 0, 64262, 6767, 41407, 0, 0, 6755, 118864, 9046, + 0, 0, 0, 0, 0, 0, 67675, 0, 0, 0, 64338, 2563, 13033, 247, 118915, 0, + 12338, 4651, 0, 11270, 0, 0, 11933, 0, 0, 41903, 43447, 11001, 0, 42255, + 0, 0, 0, 41905, 0, 0, 10775, 9793, 5009, 0, 42269, 64587, 0, 42535, + 69812, 64529, 41408, 42853, 3877, 120795, 42674, 8147, 43566, 119021, 0, + 10236, 65918, 0, 0, 0, 64506, 0, 118921, 4747, 0, 0, 43200, 5832, 0, 0, + 5141, 42600, 0, 43203, 0, 0, 43286, 0, 0, 0, 0, 41305, 78776, 74137, + 11303, 65547, 0, 7031, 859, 0, 0, 0, 6059, 126985, 55235, 0, 8535, 0, + 65196, 194787, 66032, 11488, 0, 120786, 42233, 127488, 9946, 63885, 0, + 11822, 0, 43189, 0, 0, 1788, 1579, 120482, 917817, 0, 0, 0, 9028, 119571, + 69234, 0, 0, 1285, 64882, 41242, 0, 0, 12640, 0, 7401, 0, 12625, 68198, + 0, 0, 3940, 41597, 55260, 3396, 12642, 8665, 0, 0, 12630, 1653, 917815, 10153, 0, 6166, 120516, 120523, 0, 8815, 66673, 65046, 9285, 913, 42259, - 119317, 119318, 119315, 119316, 42485, 118837, 7878, 8211, 42293, 64377, - 0, 0, 0, 0, 12032, 0, 9725, 0, 0, 5263, 12818, 0, 41939, 10022, 65387, - 118831, 42777, 10139, 980, 0, 65386, 0, 0, 0, 43198, 7184, 0, 194797, - 917819, 10085, 119992, 0, 119999, 6634, 0, 0, 119323, 8072, 119321, - 119322, 0, 8872, 7783, 917992, 12398, 8237, 0, 0, 12395, 0, 0, 120565, - 9914, 127011, 917854, 73975, 74281, 0, 0, 0, 917853, 0, 64735, 41243, 0, - 7808, 1829, 0, 41937, 4358, 43272, 0, 0, 0, 0, 0, 1710, 0, 0, 0, 0, 49, - 6627, 0, 6258, 10683, 0, 9741, 120423, 5649, 917986, 0, 64418, 1643, - 74104, 8405, 3470, 0, 13213, 42452, 917987, 0, 120009, 0, 1072, 0, - 917990, 0, 6576, 41988, 41132, 65675, 1080, 120002, 74100, 0, 1101, - 120001, 12309, 0, 0, 12632, 1086, 1869, 0, 7680, 0, 65458, 120714, 12639, - 3380, 8123, 1091, 12638, 7977, 4501, 0, 0, 66309, 0, 0, 1494, 0, 0, 0, - 11693, 0, 10494, 119230, 65872, 12363, 11386, 0, 0, 0, 0, 64582, 0, - 73794, 0, 8022, 0, 0, 74106, 12413, 0, 0, 0, 0, 5570, 1881, 7210, 0, - 1012, 66630, 0, 120709, 7208, 66442, 5569, 0, 42339, 0, 6063, 0, 0, 0, + 119317, 119318, 119315, 68454, 42485, 118837, 7878, 8211, 42293, 64377, + 0, 0, 0, 194673, 12032, 0, 9725, 0, 78431, 5263, 12818, 78430, 41939, + 10022, 65387, 78419, 42777, 10139, 980, 43698, 65386, 0, 0, 43701, 43198, + 7184, 120673, 194797, 917819, 10085, 119992, 0, 119993, 6634, 0, 0, + 119323, 8072, 119321, 43700, 0, 8872, 7783, 917992, 12398, 8237, 0, 0, + 12395, 0, 126977, 120565, 9914, 127011, 917854, 73975, 6367, 6351, 66688, + 0, 78107, 0, 64735, 41243, 0, 7808, 1829, 0, 41937, 4358, 43272, 6353, 0, + 0, 120422, 0, 1710, 0, 0, 65607, 0, 49, 6627, 0, 6258, 10683, 78672, + 9741, 78443, 5649, 78441, 43443, 64418, 1643, 65213, 8405, 3470, 0, + 13213, 42452, 78331, 0, 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, 0, 0, 66309, 0, 0, 1494, 0, 0, 0, 11693, 0, + 10494, 119230, 65872, 12363, 11386, 0, 0, 0, 0, 64582, 0, 73794, 0, 8022, + 0, 0, 74106, 12413, 194829, 917994, 0, 917995, 5570, 1881, 7210, 0, 1012, + 66630, 0, 120709, 7208, 66442, 5569, 0, 42339, 0, 6063, 0, 0, 119594, 6053, 65602, 0, 0, 64727, 9160, 194827, 0, 0, 0, 10503, 118810, 6055, 3870, 4279, 8490, 120114, 4319, 64786, 8602, 120110, 11326, 0, 0, 0, - 120119, 120413, 120117, 120118, 120099, 120100, 65087, 5571, 3674, 9740, - 9121, 5568, 120107, 120108, 42085, 10107, 64567, 42870, 120101, 589, + 120119, 78333, 120117, 120118, 120099, 120100, 65087, 5571, 3674, 9740, + 9121, 5568, 120107, 120108, 42085, 10107, 42159, 42870, 120101, 589, 7050, 0, 43281, 10233, 41263, 66251, 65729, 66253, 0, 74099, 42645, 0, - 194815, 8583, 0, 5847, 6928, 0, 0, 0, 0, 0, 66592, 12204, 0, 19966, 0, - 42561, 120626, 0, 0, 8120, 120701, 0, 0, 0, 41063, 0, 10664, 0, 8369, 0, - 4551, 0, 74759, 0, 0, 9673, 66334, 65580, 10478, 127002, 12517, 557, - 9457, 12034, 0, 41056, 12519, 41004, 0, 0, 74094, 0, 0, 119001, 0, 0, 0, - 12111, 3927, 0, 12515, 1474, 67893, 5492, 6923, 0, 10441, 73836, 0, 0, - 5493, 0, 74319, 0, 66635, 12019, 0, 1618, 0, 0, 9645, 10430, 0, 5853, - 13063, 10363, 0, 12956, 0, 0, 11314, 0, 12060, 0, 0, 12826, 0, 0, 10514, - 65517, 74395, 2707, 8309, 0, 127054, 0, 43570, 2697, 0, 0, 127057, 2695, - 42171, 0, 0, 0, 67617, 194814, 0, 2693, 12125, 12766, 0, 1164, 0, 0, - 41918, 0, 0, 8687, 66009, 12178, 7053, 0, 7469, 0, 5248, 12218, 120538, - 6427, 42884, 41123, 0, 0, 42873, 41126, 9991, 41128, 74371, 127031, 0, - 9873, 0, 42877, 7994, 64762, 6104, 42843, 6591, 9340, 0, 1589, 0, 296, - 74438, 0, 0, 67841, 74370, 0, 8922, 0, 74600, 74435, 74836, 0, 12579, 0, - 12575, 6416, 5656, 2891, 13262, 65590, 5299, 0, 11473, 5449, 1252, 0, 0, - 41431, 74369, 65373, 5295, 0, 74114, 1223, 1642, 174, 0, 883, 4161, - 12691, 42603, 41413, 3212, 127025, 3211, 74810, 41425, 127029, 0, 74450, - 9728, 3846, 8070, 6150, 6636, 4370, 0, 0, 74178, 74587, 74117, 0, 0, 0, - 4986, 12189, 0, 0, 120499, 917553, 4257, 12104, 119182, 6220, 9004, - 65561, 0, 0, 0, 68135, 917576, 0, 0, 0, 0, 9890, 0, 12971, 0, 0, 73898, - 11979, 0, 118900, 0, 0, 9635, 12600, 8871, 0, 0, 0, 6469, 74227, 0, + 194815, 8583, 0, 5847, 6928, 0, 0, 0, 0, 0, 66592, 12204, 0, 19966, + 77856, 42561, 120626, 0, 0, 8120, 120701, 0, 0, 0, 41063, 0, 10664, 0, + 8369, 0, 4551, 0, 74759, 0, 0, 9673, 66334, 65580, 10478, 118960, 12517, + 557, 9457, 12034, 0, 6355, 12519, 41004, 0, 0, 74094, 0, 0, 77970, 0, 0, + 0, 12111, 3927, 0, 12515, 1474, 67893, 5492, 6923, 0, 10441, 73836, 0, + 43990, 5493, 0, 74319, 0, 66635, 12019, 0, 1618, 0, 120474, 9645, 10430, + 917959, 5853, 13063, 10363, 0, 12956, 0, 120729, 11314, 0, 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, 0, 0, 41918, 0, 0, 8687, 66009, 12178, + 7053, 0, 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, 0, 74600, 12700, 74836, 0, 12579, 0, 12575, 6416, 5656, 2891, + 13262, 65590, 5299, 0, 11473, 5449, 1252, 0, 78404, 41431, 74369, 65373, + 5295, 0, 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, 917553, 4257, 12104, 77942, 6220, 9004, 65561, 0, 77949, + 0, 68135, 917576, 77946, 0, 0, 0, 9890, 78561, 12971, 78453, 0, 73898, + 11979, 0, 118900, 917894, 0, 9635, 12600, 8871, 0, 0, 0, 6469, 74227, 0, 65304, 4679, 10230, 64300, 64867, 3427, 4240, 0, 0, 0, 0, 917952, 0, 0, - 0, 7282, 0, 65733, 64618, 0, 0, 3494, 74606, 6555, 0, 0, 0, 0, 0, 0, 0, - 65898, 0, 65312, 5447, 0, 12895, 65593, 4010, 0, 41106, 0, 65804, 0, - 41105, 0, 65820, 6232, 0, 0, 0, 43608, 119091, 0, 6538, 4335, 0, 3941, - 41122, 11061, 0, 64892, 9113, 1954, 12155, 0, 42878, 0, 0, 0, 74578, 0, - 65832, 0, 0, 0, 0, 0, 4586, 0, 350, 10951, 0, 509, 0, 0, 0, 0, 0, 5133, - 0, 0, 9500, 0, 12162, 64741, 0, 9354, 0, 0, 0, 2496, 11516, 944, 118851, - 3890, 12168, 1438, 0, 0, 0, 41947, 1220, 120828, 0, 0, 0, 1571, 42630, - 41949, 42805, 8270, 943, 564, 0, 312, 41980, 0, 0, 0, 8877, 269, 4429, - 6272, 9617, 1460, 6954, 0, 41120, 65121, 10862, 6060, 41119, 41416, - 74355, 4173, 0, 0, 0, 1906, 0, 11532, 74073, 0, 0, 1985, 6296, 9582, - 917895, 64287, 0, 0, 11428, 1730, 2457, 0, 19918, 10469, 0, 0, 7703, - 8840, 8035, 0, 0, 0, 0, 6129, 0, 0, 0, 0, 7874, 8681, 0, 0, 13136, 0, 0, - 74278, 63886, 118881, 9605, 73892, 13220, 0, 0, 5514, 0, 9228, 0, 0, 0, - 5240, 9811, 10012, 3096, 0, 0, 0, 66676, 65873, 0, 0, 0, 9501, 0, 1272, - 64536, 65465, 64654, 7467, 0, 1467, 10158, 10040, 0, 9519, 0, 0, 0, - 118899, 12193, 0, 0, 0, 0, 0, 19935, 0, 0, 0, 0, 0, 0, 5275, 0, 0, 8637, - 0, 0, 3789, 63880, 11471, 43554, 65862, 11474, 66332, 66603, 0, 0, 12042, - 0, 0, 9537, 3961, 12115, 0, 2605, 4500, 64561, 0, 4981, 0, 0, 63876, - 11667, 0, 0, 42362, 64686, 4499, 41649, 7589, 0, 0, 3237, 0, 120194, 0, - 8541, 0, 0, 41866, 0, 0, 0, 0, 0, 43555, 2823, 9559, 0, 41940, 8299, + 0, 7282, 78728, 65733, 4445, 0, 0, 3494, 74606, 6555, 0, 77976, 0, 0, + 78566, 0, 0, 65898, 0, 65312, 5447, 0, 12895, 65593, 4010, 0, 41106, 0, + 65804, 0, 41105, 0, 65820, 6232, 0, 0, 0, 43608, 119091, 0, 6538, 4335, + 78364, 3941, 41122, 11061, 78363, 64892, 9113, 1954, 12155, 0, 42878, + 11500, 0, 0, 74578, 0, 65832, 0, 0, 0, 77975, 0, 4586, 0, 350, 10951, 0, + 509, 0, 0, 0, 0, 0, 5133, 0, 0, 9500, 0, 12162, 64741, 0, 9354, 0, 0, 0, + 2496, 11516, 944, 118851, 3890, 12168, 1438, 0, 0, 0, 41947, 1220, + 120828, 0, 0, 0, 1571, 42630, 41949, 42805, 8270, 943, 564, 0, 312, + 41980, 0, 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, 0, 0, 1985, 6296, 9582, 917895, 64287, 0, 78115, + 11428, 1730, 2457, 0, 19918, 10469, 0, 0, 7703, 8840, 8035, 0, 0, 0, 0, + 6129, 0, 0, 0, 0, 7874, 8681, 0, 0, 13136, 0, 0, 74278, 63886, 118881, + 9605, 73892, 13220, 0, 120274, 5514, 0, 9228, 0, 0, 0, 5240, 9811, 10012, + 3096, 0, 0, 0, 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, 0, 19935, 0, 0, 0, 0, 0, 0, 5275, 0, 0, 8637, 0, 0, 3789, 63880, + 11471, 43554, 65862, 11474, 66332, 66603, 0, 2426, 12042, 0, 0, 9537, + 3961, 12115, 0, 2605, 4500, 64561, 55224, 4981, 0, 0, 63876, 11667, + 42686, 77973, 42362, 64686, 4499, 41649, 7589, 0, 0, 3237, 0, 68215, 0, + 8541, 78298, 0, 41866, 0, 0, 0, 0, 0, 43555, 2823, 9559, 0, 41940, 8299, 41945, 0, 41941, 3308, 7190, 64880, 8614, 65220, 41493, 0, 41699, 10762, 0, 12999, 0, 0, 8106, 4128, 0, 0, 4494, 0, 4012, 10395, 0, 119567, 65447, 0, 0, 11004, 695, 739, 696, 7611, 0, 42755, 74802, 9227, 7506, 7510, 0, 691, 738, 7511, 7512, 7515, 3868, 688, 41847, 690, 2548, 737, 974, 8003, - 0, 0, 0, 0, 3985, 0, 65860, 63921, 7051, 74208, 4682, 0, 12809, 6406, - 4685, 0, 10879, 10347, 4680, 9055, 0, 3851, 8132, 74325, 0, 917907, 0, - 41958, 119176, 917908, 0, 0, 0, 0, 7643, 42373, 11714, 67587, 43568, 0, - 11717, 7650, 10594, 64951, 7647, 7649, 0, 7646, 0, 0, 9651, 0, 3891, 0, - 0, 2337, 1735, 74324, 67860, 5452, 0, 0, 43561, 0, 0, 74146, 1860, 7495, - 7580, 5812, 7497, 7584, 0, 0, 0, 0, 7727, 0, 8498, 0, 8949, 3065, 0, 0, - 1569, 0, 12534, 12124, 7690, 0, 12533, 0, 6418, 4543, 0, 6969, 0, 74800, - 0, 0, 11980, 0, 0, 63894, 0, 12282, 66192, 0, 0, 8850, 74275, 9238, 0, 0, - 0, 0, 0, 12791, 0, 0, 0, 0, 73732, 12793, 12900, 0, 10950, 0, 0, 12790, - 41400, 119128, 0, 12792, 0, 0, 1744, 12789, 10366, 12317, 41310, 0, - 41399, 0, 0, 0, 0, 12690, 0, 0, 0, 0, 41652, 2974, 0, 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, 0, 0, 0, 0, 6413, - 6550, 0, 1940, 0, 66223, 220, 65193, 43551, 10678, 10044, 0, 0, 0, 0, - 6403, 5707, 10393, 0, 0, 66614, 0, 0, 0, 10297, 0, 3742, 0, 3959, 0, 0, - 0, 2467, 0, 6003, 63844, 6663, 8040, 0, 63845, 4182, 0, 4676, 120501, 0, - 0, 2510, 0, 10208, 0, 0, 11540, 43546, 12186, 0, 41060, 0, 0, 9083, 0, 0, - 0, 1559, 63831, 9677, 120260, 0, 65256, 0, 74070, 0, 0, 365, 12056, - 43027, 0, 41716, 0, 0, 0, 5516, 2845, 7717, 8036, 41717, 73827, 544, - 12045, 6278, 0, 5515, 0, 0, 0, 0, 43221, 65194, 0, 5517, 0, 0, 0, 67884, - 0, 67890, 67885, 67880, 67881, 67882, 67883, 0, 0, 67879, 0, 1902, 67887, - 9638, 12976, 0, 12483, 67872, 41769, 0, 41765, 0, 6667, 67874, 7556, - 67878, 74351, 11264, 989, 67876, 67889, 0, 1311, 0, 4326, 11000, 63824, - 13068, 10932, 0, 6917, 0, 0, 949, 917595, 0, 6148, 8605, 42253, 917967, - 0, 0, 0, 0, 0, 0, 63871, 0, 41796, 1269, 6530, 0, 65057, 0, 5144, 12221, - 0, 0, 4431, 4331, 0, 0, 41834, 5279, 0, 10336, 8312, 0, 118861, 0, 0, - 119654, 66036, 0, 0, 6428, 42270, 0, 0, 118866, 0, 5256, 1067, 255, - 12131, 0, 9493, 0, 41014, 11793, 0, 0, 74394, 43594, 10653, 0, 0, 119632, - 0, 6560, 7016, 74274, 0, 43556, 3929, 0, 6614, 2768, 0, 9746, 5135, - 11811, 12796, 11953, 0, 0, 5139, 346, 74303, 6305, 12795, 4675, 5168, 0, - 0, 74315, 74361, 8253, 8817, 1136, 0, 43563, 0, 0, 0, 65285, 8230, 9365, - 0, 0, 0, 0, 0, 4041, 0, 2357, 0, 12786, 229, 119885, 119884, 0, 43552, + 7406, 0, 0, 0, 3985, 0, 65860, 63921, 7051, 69777, 4682, 917805, 12809, + 6406, 4685, 0, 10879, 10347, 4680, 6341, 0, 3851, 8132, 74325, 0, 917907, + 0, 41958, 119176, 917908, 0, 0, 42657, 0, 7643, 42373, 11714, 67587, + 43568, 0, 11717, 7650, 10594, 64951, 7647, 7649, 0, 7646, 0, 78082, 9651, + 0, 3891, 0, 0, 2337, 1735, 74324, 67860, 5452, 0, 0, 43561, 0, 0, 74146, + 1860, 7495, 7580, 5812, 7497, 7584, 0, 0, 0, 120347, 7727, 0, 8498, + 69818, 8949, 3065, 42719, 0, 1569, 0, 12534, 12124, 7690, 0, 12533, 0, + 6418, 4543, 78086, 6969, 0, 74800, 0, 0, 11980, 0, 0, 63894, 120760, + 12282, 66192, 0, 74592, 8850, 74275, 9238, 10617, 917545, 0, 0, 0, 12791, + 0, 0, 0, 4447, 73732, 12793, 12900, 0, 10950, 0, 78087, 12790, 41400, + 119128, 0, 12792, 42232, 0, 1744, 12789, 10366, 12317, 41310, 0, 41399, + 0, 0, 55258, 0, 12690, 0, 0, 43672, 0, 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, 0, 77829, 0, 0, 6413, + 6550, 0, 1940, 0, 43637, 220, 65193, 43551, 10678, 10044, 0, 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, 63845, 4182, 78171, 4676, + 120501, 0, 0, 2510, 0, 10208, 78168, 0, 11540, 43546, 6692, 0, 41060, 0, + 0, 9083, 0, 0, 78144, 1559, 63831, 9677, 120260, 0, 65256, 0, 74070, 0, + 0, 365, 12056, 43027, 120423, 41716, 0, 0, 120472, 5516, 2845, 7717, + 8036, 41717, 73827, 544, 12045, 6278, 0, 5515, 0, 0, 0, 65339, 43221, + 65194, 0, 5517, 0, 0, 74841, 67884, 0, 67890, 67885, 67880, 67881, 67882, + 67883, 0, 0, 67879, 0, 1902, 67887, 9638, 12976, 0, 12483, 12368, 41769, + 42726, 41765, 0, 6667, 67874, 7556, 67878, 74351, 11264, 989, 42677, + 67889, 0, 1311, 0, 4326, 11000, 63824, 13068, 10932, 0, 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, 0, 0, + 41834, 5279, 0, 10336, 8312, 0, 42701, 0, 0, 78165, 66036, 0, 0, 6428, + 42270, 0, 0, 43059, 42666, 5256, 1067, 255, 12131, 0, 9493, 0, 41014, + 11793, 0, 0, 74394, 43460, 10653, 42723, 0, 119632, 0, 6560, 7016, 74274, + 0, 43556, 3929, 0, 6614, 2768, 0, 9746, 5135, 11811, 12796, 11953, 0, + 69761, 5139, 346, 74303, 6305, 12795, 4675, 5168, 78552, 0, 74315, 74361, + 8253, 8817, 1136, 0, 43563, 0, 0, 194750, 7392, 8230, 9365, 0, 0, 0, 0, + 0, 4041, 0, 2357, 43240, 12786, 229, 119885, 119884, 44004, 43552, 119881, 12350, 65554, 119882, 119877, 119876, 12785, 63863, 119873, 7770, - 10712, 64853, 12686, 118916, 42375, 0, 0, 66352, 10470, 0, 11059, 10791, - 0, 450, 0, 0, 10432, 12097, 5450, 64691, 1233, 0, 63856, 0, 66338, 0, 0, - 1839, 118799, 0, 10927, 1701, 0, 2388, 41749, 41761, 5453, 8361, 119865, - 41758, 5444, 41763, 64889, 119860, 119863, 119862, 0, 0, 0, 66432, 8801, - 3053, 4340, 0, 0, 65812, 0, 0, 41824, 0, 194801, 194800, 194803, 118997, - 194805, 194804, 194807, 194806, 194809, 194808, 0, 0, 4493, 4336, 0, - 2314, 43602, 0, 119325, 194811, 42439, 64638, 42327, 43528, 4489, 194791, - 0, 194793, 1912, 42385, 10306, 10370, 0, 0, 8867, 10250, 10258, 2712, - 1635, 194798, 1410, 0, 0, 118878, 0, 0, 0, 0, 559, 0, 41825, 0, 0, 4892, - 74016, 194781, 6542, 41957, 0, 5777, 0, 759, 65749, 65750, 65248, 12788, - 64487, 64552, 0, 10223, 42062, 0, 0, 0, 3668, 65754, 43560, 12226, 0, - 65149, 2340, 41959, 194786, 194785, 194788, 120154, 65747, 10937, 2962, - 0, 2321, 3587, 65745, 0, 8921, 66013, 0, 0, 194769, 194768, 194771, - 194770, 2949, 66012, 194775, 194774, 2958, 194776, 41820, 43038, 2395, 0, - 0, 120043, 194778, 120058, 194780, 194779, 42809, 42807, 0, 120047, - 10198, 4150, 64371, 8318, 41790, 0, 41898, 2360, 41794, 917942, 0, 0, 0, - 0, 2418, 0, 2411, 11336, 799, 63823, 10276, 10308, 10372, 917541, 41772, - 42813, 2317, 10260, 118980, 119576, 0, 0, 10384, 0, 0, 0, 7753, 2351, - 6655, 64489, 0, 0, 0, 0, 42779, 230, 0, 0, 43549, 4855, 42150, 65739, - 5441, 41896, 10288, 10320, 0, 855, 7046, 6109, 65045, 63839, 119116, 0, - 10098, 0, 74145, 0, 10264, 10280, 9184, 10376, 7013, 4467, 0, 0, 0, - 41887, 0, 4862, 9735, 6537, 120591, 0, 3914, 119604, 0, 9065, 12961, 0, - 0, 0, 0, 289, 0, 4694, 11420, 4690, 0, 120514, 0, 4693, 0, 73919, 0, - 4688, 120454, 0, 0, 119629, 8238, 3110, 120162, 0, 120163, 6528, 0, - 43035, 120161, 218, 0, 1520, 0, 4786, 0, 43225, 0, 0, 120158, 10088, - 6548, 0, 120156, 0, 8988, 8888, 0, 0, 0, 0, 10666, 0, 73902, 0, 0, 0, 0, - 0, 0, 4689, 8932, 0, 65560, 119209, 74441, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 10065, 8207, 0, 0, 0, 0, 662, 0, 9244, 0, 0, 119261, 0, 0, 0, 0, 41929, - 0, 0, 0, 41926, 0, 120443, 10513, 64637, 0, 0, 52, 13118, 6475, 0, 0, - 12095, 10225, 4812, 0, 0, 0, 74085, 0, 3978, 0, 0, 0, 11582, 120761, - 12281, 0, 6544, 13241, 0, 0, 0, 194860, 11765, 65258, 10369, 0, 1585, + 10712, 64853, 12686, 118916, 42375, 0, 127238, 66352, 10470, 0, 11059, + 10791, 917944, 450, 0, 0, 10432, 12097, 5450, 64691, 1233, 0, 44009, + 78284, 66338, 0, 0, 1839, 118799, 0, 10927, 1701, 0, 2388, 41749, 41761, + 5453, 8361, 119865, 41758, 5444, 41763, 64889, 119860, 119863, 78677, 0, + 0, 78174, 66432, 8801, 3053, 4340, 0, 0, 65812, 917831, 0, 41824, 0, + 194801, 194800, 194803, 42700, 194805, 194804, 194807, 78676, 120413, + 194808, 0, 0, 4493, 4336, 0, 2314, 43602, 78826, 119325, 194811, 42439, + 64638, 42327, 43528, 4489, 194791, 0, 194793, 1912, 42385, 10306, 10370, + 0, 0, 8867, 10250, 10258, 2712, 1635, 78821, 1410, 0, 0, 118878, 0, 0, + 9919, 0, 559, 0, 41825, 0, 78188, 4892, 74016, 194781, 6542, 41957, 0, + 5777, 0, 759, 65749, 2079, 65248, 12788, 64487, 64552, 0, 10223, 42062, + 0, 0, 0, 3668, 65754, 43560, 12226, 0, 65149, 2340, 41959, 194786, + 194785, 194788, 43618, 65747, 10937, 2962, 0, 2321, 3587, 65745, 0, 8921, + 9952, 0, 0, 42714, 9951, 43409, 194770, 2949, 66012, 194775, 194774, + 2958, 68359, 41820, 43038, 2395, 0, 9976, 120043, 194778, 120058, 68220, + 194779, 42809, 42807, 0, 120046, 10198, 4150, 64371, 8318, 41790, 0, + 41898, 2360, 41794, 917942, 0, 0, 0, 0, 2418, 0, 2411, 11336, 799, 63823, + 10276, 10308, 10372, 917541, 41772, 42813, 2317, 10260, 118980, 55284, 0, + 0, 10384, 0, 0, 0, 7753, 2351, 6655, 64489, 0, 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, 0, 10264, 10280, + 9184, 10376, 7013, 4467, 0, 0, 0, 41887, 0, 4862, 9735, 6537, 120591, 0, + 3914, 119604, 0, 9065, 12961, 0, 0, 0, 0, 289, 0, 4694, 11420, 4690, 0, + 120514, 917978, 4693, 0, 42724, 0, 4688, 120454, 0, 0, 119629, 8238, + 3110, 120162, 0, 120163, 6528, 127553, 43035, 120161, 218, 0, 1520, 0, + 4786, 0, 43225, 4602, 0, 78167, 10088, 6548, 0, 120156, 43978, 8988, + 8888, 0, 0, 0, 0, 10666, 0, 73902, 0, 0, 0, 9975, 0, 119902, 4689, 8932, + 0, 65560, 119209, 74441, 78810, 0, 0, 0, 0, 0, 0, 0, 0, 10065, 8207, 0, + 120539, 0, 0, 662, 0, 9244, 0, 0, 119261, 0, 0, 0, 0, 41929, 0, 0, 66674, + 41926, 120408, 120443, 10513, 64637, 194862, 0, 52, 13118, 6475, 0, 0, + 12095, 10225, 4812, 0, 0, 0, 74085, 0, 3978, 0, 917945, 0, 11582, 120761, + 12281, 0, 6544, 13241, 0, 69782, 0, 194860, 11765, 65258, 10369, 0, 1585, 7192, 10249, 422, 1500, 2036, 986, 194859, 64394, 5781, 5599, 64294, - 2494, 120450, 4861, 74021, 64334, 0, 0, 0, 0, 65102, 8961, 0, 10243, - 10245, 0, 0, 0, 120453, 64821, 9478, 2508, 0, 0, 202, 0, 74131, 1242, 0, - 0, 63940, 0, 64533, 0, 0, 67842, 11990, 0, 63939, 0, 65440, 2504, 0, 0, - 64829, 0, 6943, 0, 5859, 0, 2858, 0, 74294, 0, 74305, 0, 119027, 12992, - 2753, 1936, 74491, 0, 2751, 12662, 2763, 8953, 64701, 10731, 12922, 0, 0, - 0, 0, 0, 0, 74128, 2856, 119910, 47, 119911, 126986, 65858, 0, 0, 0, - 7899, 0, 8417, 65903, 7072, 0, 0, 4033, 0, 66474, 0, 0, 212, 64600, 1903, - 12320, 0, 0, 0, 0, 8915, 2759, 945, 0, 0, 0, 0, 0, 1291, 74828, 0, 0, - 9531, 13155, 8505, 0, 12062, 0, 0, 65487, 0, 41837, 120611, 120432, 0, 0, - 0, 120433, 0, 63935, 73962, 0, 64787, 43524, 0, 64426, 0, 0, 0, 0, 65664, - 64785, 9843, 0, 8674, 0, 0, 0, 0, 12624, 0, 1673, 4811, 0, 5986, 9338, - 3046, 74480, 5985, 917928, 119598, 9820, 0, 12187, 0, 0, 5984, 0, 43308, - 4393, 0, 0, 0, 0, 0, 74826, 64733, 0, 0, 3491, 0, 0, 0, 3514, 65485, 0, - 7492, 0, 0, 0, 7514, 0, 0, 194731, 7502, 7587, 0, 0, 0, 63925, 0, 7610, - 219, 0, 0, 692, 43588, 74433, 41635, 0, 9688, 0, 9535, 0, 0, 0, 0, 0, - 64610, 11804, 0, 0, 7453, 0, 8013, 0, 0, 0, 8895, 5253, 0, 5458, 0, 2866, - 0, 0, 65111, 0, 12018, 120484, 0, 0, 0, 8962, 0, 9641, 66653, 7059, 0, 0, - 9604, 0, 7441, 63826, 0, 118941, 64392, 0, 0, 2844, 0, 41974, 0, 12139, - 0, 0, 0, 3358, 65295, 0, 3104, 0, 0, 0, 0, 5308, 0, 290, 0, 0, 2862, - 2792, 195088, 0, 0, 3268, 66591, 0, 6552, 42367, 7035, 120558, 0, 0, - 1814, 0, 10240, 0, 195092, 0, 119020, 0, 0, 42646, 7606, 2591, 2837, - 4341, 0, 64482, 0, 8163, 65270, 0, 0, 0, 9112, 74431, 863, 9490, 0, 0, - 43323, 120513, 0, 9071, 0, 0, 3654, 0, 9637, 0, 2535, 65504, 7653, 40993, - 0, 66587, 195098, 0, 0, 0, 11006, 12927, 7807, 8073, 0, 10629, 0, 74088, - 3056, 10823, 0, 0, 8762, 10508, 74506, 73770, 63994, 43193, 10737, 3463, - 0, 0, 66633, 8695, 4815, 11322, 5811, 12345, 7049, 0, 5195, 0, 0, 66639, - 0, 0, 0, 0, 0, 120561, 1262, 0, 6561, 19939, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 119907, 64612, 11991, 0, 0, 0, 1502, 0, 0, 9107, 0, 5702, 3655, 0, 8430, - 0, 74132, 0, 0, 74057, 9603, 0, 5254, 120742, 7724, 74388, 74838, 10796, - 5129, 0, 0, 590, 7579, 5614, 5893, 194744, 11720, 0, 11721, 0, 0, 0, - 120541, 66038, 4793, 67851, 11726, 0, 74204, 0, 0, 917600, 894, 300, 0, - 12306, 66235, 0, 0, 0, 2562, 0, 0, 42503, 0, 11652, 0, 0, 119241, 0, 0, - 5096, 5095, 2863, 3424, 0, 10454, 42530, 5094, 119638, 0, 13156, 0, - 10832, 5093, 0, 0, 0, 5092, 10708, 11327, 0, 5091, 176, 0, 9153, 4104, 0, - 0, 1215, 0, 5744, 12272, 9832, 11777, 0, 0, 42881, 0, 8980, 118988, - 67861, 8844, 7433, 0, 0, 4278, 0, 0, 0, 0, 9074, 4348, 0, 65558, 65946, - 8113, 7087, 5255, 1786, 661, 0, 0, 0, 74423, 0, 586, 74414, 64359, 1267, - 0, 0, 0, 65731, 0, 0, 3621, 0, 66666, 0, 0, 6562, 12928, 0, 1228, 65490, - 11383, 0, 0, 0, 1714, 74406, 0, 0, 0, 0, 66225, 0, 0, 0, 11436, 119615, - 64, 0, 0, 10291, 10323, 2826, 0, 0, 0, 42008, 9708, 0, 0, 42011, 41999, - 0, 12206, 5839, 1702, 1240, 74065, 6286, 0, 0, 65833, 0, 0, 1765, 0, 0, - 65588, 0, 0, 0, 8401, 0, 42014, 0, 7030, 0, 10479, 64959, 2852, 0, 0, 0, - 0, 0, 0, 6963, 0, 12667, 0, 74786, 10147, 12935, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 64947, 12467, 2864, 64719, 1148, 10435, 11462, 41675, 0, 2765, 0, - 0, 0, 0, 0, 0, 66662, 0, 0, 9364, 194685, 74416, 0, 0, 119244, 263, - 10449, 41288, 0, 41839, 0, 0, 0, 0, 6931, 0, 64355, 7177, 120530, 0, 0, - 0, 4262, 10285, 10722, 42020, 0, 0, 6992, 42019, 0, 41290, 0, 750, 0, 0, - 10163, 0, 74066, 7032, 5954, 64931, 4314, 0, 198, 0, 730, 0, 0, 0, 0, - 13165, 10814, 74171, 42804, 678, 8240, 118960, 0, 41378, 11008, 6938, 0, - 0, 42812, 66246, 120560, 0, 0, 0, 3892, 0, 0, 0, 66045, 41470, 64805, 0, - 0, 0, 118982, 0, 497, 12100, 5953, 0, 7796, 0, 0, 73831, 0, 10293, 5952, - 1281, 0, 0, 0, 10677, 604, 41097, 9182, 1859, 0, 0, 3425, 0, 0, 2836, 0, - 0, 9707, 0, 43202, 0, 0, 65199, 1738, 0, 0, 2832, 0, 9670, 12937, 0, 0, - 0, 0, 2822, 0, 4436, 0, 0, 73752, 0, 64872, 0, 1331, 0, 0, 0, 12708, 0, - 5090, 5089, 0, 0, 119109, 0, 0, 319, 118931, 0, 9477, 0, 0, 5087, 0, - 7640, 96, 5086, 0, 0, 0, 5085, 64286, 0, 0, 41422, 0, 119901, 42356, - 3772, 0, 0, 5011, 0, 0, 0, 0, 0, 0, 6677, 7601, 0, 591, 64419, 118953, 0, - 0, 118923, 0, 0, 10939, 6106, 6933, 41271, 0, 119903, 4534, 41270, 0, 0, - 65574, 0, 9224, 0, 3671, 8976, 0, 0, 41275, 0, 0, 0, 7963, 42013, 0, 568, - 0, 41273, 0, 0, 0, 0, 9715, 0, 8258, 11753, 74820, 0, 9602, 118919, 42, - 0, 0, 0, 0, 7458, 0, 0, 65385, 0, 0, 11958, 0, 0, 0, 6254, 0, 66336, + 2494, 120450, 4861, 74021, 64334, 78203, 0, 0, 0, 65102, 8961, 65842, + 10243, 10245, 0, 120410, 0, 120453, 64821, 9478, 2508, 0, 0, 202, 0, + 74131, 1242, 65514, 0, 63940, 0, 64533, 120129, 0, 67842, 11990, 0, + 63939, 43375, 65440, 2504, 0, 78671, 64829, 0, 6943, 917934, 5859, 0, + 2858, 0, 74294, 0, 69239, 0, 119027, 12992, 2753, 1936, 74491, 0, 2751, + 12662, 2763, 8953, 64701, 10731, 12922, 7052, 917839, 0, 0, 0, 63920, + 74128, 2856, 119910, 47, 119911, 126986, 65858, 0, 0, 0, 7899, 0, 8417, + 65903, 7072, 0, 0, 4033, 0, 43992, 0, 0, 212, 64600, 1903, 12320, 0, 0, + 0, 0, 8915, 2759, 945, 6689, 0, 0, 0, 0, 1291, 74828, 0, 0, 9531, 13155, + 8505, 68379, 12062, 0, 0, 65487, 0, 41837, 120611, 120432, 0, 0, 0, + 120433, 0, 63935, 73962, 120806, 64787, 43524, 0, 64426, 0, 0, 0, 0, + 65664, 6693, 9843, 0, 8674, 0, 0, 0, 0, 12624, 0, 1673, 4811, 0, 5986, + 9338, 3046, 74480, 5985, 917928, 119598, 9820, 0, 12187, 0, 0, 5984, 0, + 43308, 4393, 0, 0, 0, 0, 0, 74826, 64733, 0, 0, 3491, 0, 0, 0, 3514, + 65485, 0, 7492, 0, 74605, 119134, 7514, 0, 0, 194731, 7502, 7587, 68353, + 0, 0, 63925, 0, 7610, 219, 0, 0, 692, 43588, 74433, 41635, 43241, 9688, + 0, 9535, 0, 0, 0, 64530, 0, 64610, 11804, 0, 0, 7453, 0, 8013, 0, 0, 0, + 8895, 5253, 0, 5458, 0, 2866, 0, 0, 65111, 68433, 6700, 120484, 0, 0, 0, + 8962, 77960, 9641, 43694, 7059, 0, 0, 9604, 78700, 7441, 63826, 0, + 118941, 64392, 0, 0, 2844, 0, 41974, 0, 12139, 0, 0, 0, 3358, 65295, 0, + 3104, 0, 0, 194765, 0, 5308, 0, 290, 0, 0, 2862, 2792, 195088, 0, 0, + 3268, 66591, 0, 6552, 42367, 7035, 120558, 0, 0, 1814, 0, 10240, 0, + 74305, 0, 74528, 0, 0, 42646, 7606, 2591, 2837, 4341, 77956, 64482, 0, + 8163, 65270, 0, 0, 0, 9112, 74431, 863, 9490, 119898, 0, 43323, 120513, + 119897, 9071, 0, 0, 3654, 7789, 9637, 0, 2535, 65504, 7653, 40993, + 119899, 66587, 195098, 0, 0, 0, 11006, 12927, 7807, 8073, 0, 10629, 0, + 74088, 3056, 10823, 0, 127327, 8762, 10508, 74506, 73770, 43969, 43193, + 10737, 3463, 0, 0, 66633, 8695, 4815, 11322, 5811, 12345, 7049, 0, 5195, + 0, 0, 66639, 0, 0, 0, 0, 0, 120561, 1262, 0, 6561, 19939, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 119907, 64612, 11991, 0, 0, 0, 1502, 0, 0, 9107, 0, 5702, + 3655, 67661, 8430, 0, 74132, 120758, 0, 74057, 9603, 0, 5254, 120742, + 7724, 74388, 68375, 10796, 5129, 0, 0, 590, 7579, 5614, 5893, 194744, + 11720, 0, 11721, 0, 4798, 0, 119316, 66038, 4793, 67851, 11726, 0, 74204, + 68610, 0, 68626, 894, 300, 0, 12306, 66235, 8004, 0, 0, 2562, 0, 0, + 42503, 0, 11652, 0, 0, 119241, 0, 0, 5096, 5095, 2863, 3424, 0, 10454, + 42530, 5094, 119638, 0, 13156, 0, 10832, 5093, 0, 0, 0, 5092, 10708, + 11327, 0, 5091, 176, 0, 9153, 4104, 78599, 78601, 1215, 42712, 5744, + 12272, 9832, 11777, 0, 127371, 42881, 0, 8980, 118988, 67861, 8844, 7209, + 0, 0, 4278, 0, 0, 0, 0, 9074, 4348, 0, 65558, 65946, 8113, 7087, 5255, + 1786, 661, 0, 0, 0, 74423, 0, 586, 74414, 64359, 1267, 0, 65468, 0, + 65731, 0, 0, 3621, 120473, 66666, 64211, 0, 6562, 12928, 0, 1228, 65490, + 11383, 0, 0, 0, 1714, 74406, 0, 0, 0, 0, 66225, 0, 0, 42660, 11436, 2070, + 64, 120694, 0, 10291, 10323, 2826, 0, 0, 0, 42008, 9708, 42710, 0, 42011, + 41999, 0, 12206, 5839, 1702, 1240, 74065, 6286, 0, 0, 65833, 77848, 0, + 1765, 0, 0, 65588, 0, 0, 0, 8401, 0, 42014, 0, 7030, 0, 10479, 64959, + 2852, 0, 0, 0, 0, 195061, 917951, 6963, 0, 12667, 64540, 74786, 10147, + 12935, 0, 0, 0, 0, 0, 78757, 0, 0, 0, 0, 64947, 12467, 2864, 64719, 1148, + 10435, 11462, 41675, 0, 2765, 0, 0, 0, 120719, 0, 0, 66662, 0, 78133, + 9364, 194685, 74416, 0, 0, 77988, 263, 10449, 41288, 0, 41839, 78387, 0, + 77986, 0, 6931, 0, 64355, 7177, 120530, 0, 0, 0, 4262, 10285, 10722, + 42020, 0, 6806, 6992, 42019, 0, 41290, 0, 750, 0, 0, 10163, 63913, 74066, + 7032, 5954, 64931, 4314, 0, 198, 68453, 730, 0, 63907, 77993, 78891, + 13165, 10814, 74171, 42804, 678, 8240, 78015, 0, 41378, 11008, 6938, 0, + 0, 2097, 66246, 120560, 0, 0, 0, 3892, 68632, 0, 6712, 66045, 41470, + 64805, 0, 0, 0, 64801, 0, 497, 12100, 5953, 0, 7796, 0, 43254, 73831, 0, + 10293, 5952, 1281, 0, 0, 0, 10677, 604, 41097, 9182, 1859, 0, 0, 3425, 0, + 0, 2836, 0, 0, 9707, 0, 43202, 0, 0, 65199, 1738, 917818, 0, 2832, 0, + 9670, 12937, 0, 66374, 0, 0, 2822, 0, 4436, 0, 0, 73752, 0, 64872, 0, + 1331, 0, 0, 0, 12708, 0, 5090, 5089, 0, 0, 119109, 0, 0, 319, 118931, + 43479, 9477, 0, 0, 5087, 0, 7640, 96, 5086, 0, 0, 0, 5085, 64286, 0, 0, + 41422, 0, 119901, 42356, 3772, 0, 0, 5011, 0, 0, 0, 0, 0, 127241, 6677, + 7601, 0, 591, 64419, 118953, 0, 0, 118923, 73734, 0, 10939, 6106, 6933, + 41271, 6760, 119903, 4534, 41270, 917962, 0, 65574, 0, 9224, 0, 3671, + 8976, 0, 0, 41275, 6372, 0, 55261, 7963, 6371, 0, 568, 0, 41273, 0, 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, 0, 42858, 11789, 65868, 5557, 917946, 9737, 13109, 0, - 9467, 5558, 8878, 0, 195036, 7451, 7435, 10146, 0, 9086, 64566, 0, 64584, - 7437, 7454, 12594, 0, 0, 4546, 7731, 0, 917948, 74243, 0, 3805, 0, 0, 0, - 41008, 0, 6307, 19949, 0, 7544, 0, 43525, 0, 0, 10152, 64422, 65091, - 119113, 7602, 64729, 0, 43521, 0, 42302, 0, 43523, 41447, 5559, 0, 8704, - 2397, 5556, 0, 0, 0, 9011, 9630, 0, 0, 0, 5506, 0, 1911, 66652, 0, 12598, - 8845, 66698, 0, 10792, 8889, 0, 6951, 0, 64751, 0, 66622, 0, 0, 74364, 0, - 0, 0, 74365, 7552, 0, 0, 65384, 7223, 4559, 0, 1956, 43138, 7024, 65728, - 64501, 1210, 0, 65175, 10184, 43140, 65727, 0, 0, 0, 38, 8533, 66669, 0, - 0, 0, 0, 4357, 0, 0, 0, 74233, 119846, 119852, 42860, 119838, 10941, - 65721, 6962, 0, 0, 0, 0, 11014, 0, 8942, 12000, 0, 0, 0, 11974, 0, 42772, - 0, 11650, 5013, 0, 0, 66210, 118914, 6613, 0, 0, 0, 0, 0, 64714, 0, 0, 0, - 12120, 0, 0, 11024, 74811, 0, 10563, 0, 0, 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, 0, 0, 3483, 127122, 1989, 0, 0, 9104, 3503, 65375, 0, 0, 42633, 1864, - 0, 74306, 41446, 2540, 7736, 0, 74064, 0, 10521, 0, 42173, 9705, 74124, - 8604, 6955, 10916, 0, 6149, 3887, 19956, 1411, 2824, 0, 10106, 0, 1403, - 0, 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, 0, 0, 0, 0, - 74585, 41391, 0, 917903, 376, 6987, 9221, 0, 0, 8823, 0, 12943, 65185, - 41869, 12619, 0, 10154, 0, 74439, 2039, 0, 7446, 1684, 63979, 10974, 458, - 120620, 0, 0, 0, 11916, 65016, 0, 0, 42115, 0, 12288, 0, 0, 1493, 42111, - 7553, 4097, 0, 13080, 0, 65808, 6610, 6030, 8059, 7508, 41636, 0, 0, 0, - 8794, 41278, 41629, 12154, 0, 41277, 64658, 0, 64380, 6625, 0, 19904, 0, - 0, 0, 65371, 7078, 0, 833, 0, 74592, 0, 10979, 41953, 0, 41434, 6062, 0, - 0, 19916, 6913, 933, 1341, 9842, 0, 65744, 0, 0, 0, 0, 41615, 10105, - 65810, 0, 41632, 7493, 0, 0, 41622, 0, 0, 119556, 74584, 7632, 9716, - 19954, 9805, 5990, 900, 0, 63957, 0, 0, 3612, 0, 64376, 0, 5389, 0, 0, - 65938, 2839, 9621, 582, 0, 74368, 3749, 6949, 7569, 74061, 0, 0, 6956, - 4403, 19962, 65559, 3299, 0, 0, 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, 0, 41183, 12907, 10271, 10287, - 684, 74185, 0, 2854, 119586, 4592, 65755, 0, 0, 11963, 65753, 0, 0, 0, 0, - 0, 9881, 0, 65757, 3415, 0, 0, 8648, 0, 118886, 43047, 0, 13180, 0, 418, - 0, 0, 10295, 10327, 10391, 41752, 74339, 8641, 41449, 0, 0, 0, 10911, - 6942, 0, 1024, 42849, 41751, 0, 8941, 0, 4554, 0, 9023, 11685, 0, 0, 0, - 0, 11437, 0, 0, 120700, 63967, 0, 41206, 120724, 9049, 41185, 43166, 0, - 11680, 0, 11686, 0, 65224, 4565, 4655, 119553, 0, 0, 64523, 10343, 10407, - 0, 66671, 11466, 0, 0, 42890, 0, 12050, 194750, 2860, 0, 0, 0, 42792, - 5743, 10424, 12065, 42872, 0, 0, 0, 8875, 0, 0, 917991, 7531, 12847, - 2413, 0, 0, 962, 0, 12855, 41196, 42564, 0, 1582, 0, 5508, 0, 0, 0, - 10801, 0, 118798, 0, 7173, 496, 10439, 4313, 64607, 119557, 7860, 0, 906, - 42793, 2842, 6405, 64722, 13132, 798, 64694, 12801, 8406, 1153, 0, 64788, - 0, 8054, 9174, 194749, 917976, 0, 0, 41611, 4642, 66574, 11556, 0, 0, 0, - 42089, 0, 9008, 0, 0, 195096, 42079, 917981, 917996, 42513, 0, 42842, - 73985, 0, 118974, 127003, 0, 0, 0, 0, 11335, 64069, 42093, 3920, 0, 0, 0, - 0, 4580, 41967, 0, 64384, 0, 119158, 3021, 42004, 0, 0, 42317, 41998, 0, - 6946, 0, 0, 0, 0, 65204, 0, 68113, 65196, 9880, 42010, 0, 64589, 10111, - 64875, 0, 0, 0, 11360, 0, 0, 0, 0, 42149, 0, 0, 0, 64941, 0, 0, 0, 0, - 65671, 4110, 66005, 6959, 10929, 119110, 0, 66703, 0, 8617, 41982, 6025, - 0, 0, 0, 0, 0, 9597, 42099, 43172, 0, 10117, 0, 0, 41642, 0, 0, 0, 8301, - 0, 0, 187, 0, 65669, 0, 4963, 0, 0, 0, 8964, 65676, 65785, 0, 41948, 0, - 0, 0, 41942, 65449, 3160, 10081, 13226, 42121, 42475, 0, 0, 41766, 0, - 65882, 0, 41760, 1189, 905, 480, 10985, 41733, 67859, 9629, 42436, 1745, - 0, 73835, 7888, 0, 0, 0, 0, 41507, 8806, 7023, 0, 74279, 64540, 0, 7867, - 0, 6236, 0, 0, 10505, 0, 12851, 118948, 348, 5474, 0, 3103, 0, 41753, 0, - 0, 0, 0, 0, 41739, 0, 42515, 10931, 41756, 43347, 42560, 5391, 41746, - 119147, 0, 41259, 5561, 74360, 2691, 0, 65553, 7933, 5562, 0, 0, 41262, - 0, 64421, 74846, 41251, 0, 0, 3979, 0, 0, 74813, 0, 0, 0, 0, 118847, - 41266, 0, 0, 917630, 10585, 65741, 41737, 9574, 2666, 0, 41738, 831, 419, - 13126, 10716, 0, 42822, 0, 6434, 0, 6939, 7766, 6432, 0, 0, 916, 769, - 41742, 11968, 120557, 6433, 5563, 547, 1943, 6439, 5560, 4994, 487, 0, - 4497, 3754, 0, 120424, 9039, 0, 41776, 0, 8716, 1595, 119206, 0, 0, - 74260, 0, 43267, 0, 0, 0, 12185, 0, 0, 0, 0, 0, 42856, 8634, 0, 0, 4209, - 120702, 0, 65879, 41538, 65612, 0, 669, 5679, 0, 0, 118961, 0, 0, 5678, - 11821, 0, 0, 460, 0, 0, 0, 0, 120747, 0, 0, 0, 119022, 0, 0, 0, 7782, - 9044, 4974, 11760, 917547, 7577, 65711, 41912, 1216, 0, 0, 5792, 0, 0, 0, - 0, 42264, 12244, 0, 5683, 0, 0, 0, 1549, 0, 0, 120398, 5682, 6206, 8670, - 74520, 5680, 917568, 10001, 0, 0, 1449, 10241, 0, 0, 0, 10552, 64342, - 41922, 0, 8584, 0, 5567, 2717, 0, 0, 5564, 42886, 41908, 42882, 5565, 0, - 0, 0, 65708, 65709, 5566, 0, 65704, 65705, 11904, 42875, 0, 42539, 5942, - 8468, 0, 10361, 10425, 65697, 65698, 65699, 0, 66598, 0, 64664, 10647, 0, - 0, 0, 457, 0, 65701, 1934, 43006, 0, 8802, 0, 65130, 0, 0, 6087, 0, 0, - 41757, 0, 8043, 8950, 65694, 64485, 43534, 10457, 0, 11961, 119006, 0, 0, - 0, 0, 0, 65515, 9499, 10035, 13069, 0, 0, 9889, 68184, 42806, 0, 7256, 0, - 0, 1667, 42161, 0, 42428, 0, 6934, 0, 10802, 64861, 6556, 0, 0, 8101, - 3610, 0, 41748, 4995, 955, 65907, 119208, 5350, 64339, 0, 64549, 10875, - 917956, 5477, 65692, 0, 0, 0, 12896, 10456, 917954, 0, 3874, 0, 0, 0, 0, - 0, 0, 65603, 0, 65687, 0, 41038, 74009, 119570, 67857, 8536, 0, 0, 0, - 74432, 724, 0, 1455, 0, 7183, 64583, 119233, 0, 4175, 917962, 0, 0, 939, - 0, 43520, 0, 74569, 917958, 0, 917959, 917945, 194704, 10788, 6088, 0, 0, - 190, 0, 12593, 0, 8188, 64408, 0, 4417, 0, 0, 41744, 0, 7827, 0, 6965, 0, - 0, 13201, 0, 0, 0, 74382, 73781, 7918, 73988, 0, 0, 917884, 1728, 0, - 120710, 178, 12972, 0, 0, 0, 120671, 0, 0, 0, 120405, 65690, 0, 0, - 119054, 0, 9252, 917889, 4652, 74259, 0, 0, 0, 13065, 9923, 10806, 0, - 11763, 0, 120688, 0, 119098, 0, 6993, 0, 0, 8333, 0, 0, 0, 0, 74464, 0, - 0, 74080, 0, 0, 11910, 0, 8278, 8963, 4034, 0, 0, 65344, 120517, 41747, - 0, 0, 8677, 0, 12707, 9350, 66037, 0, 8836, 12315, 12747, 8300, 0, 0, - 7491, 8856, 0, 0, 43150, 0, 120404, 65389, 120402, 120403, 10813, 2592, - 12853, 43269, 7263, 120244, 6536, 120238, 120239, 65516, 12321, 120391, - 120388, 120389, 10007, 120246, 9588, 120248, 1596, 120383, 41994, 65801, - 0, 0, 66572, 0, 0, 10613, 8092, 12805, 41928, 40981, 0, 0, 5006, 64328, - 0, 65298, 0, 8825, 74555, 65940, 0, 0, 6107, 0, 119177, 0, 0, 0, 11783, - 335, 120227, 64689, 438, 4510, 5765, 8721, 120233, 119227, 6092, 12840, - 43112, 8876, 120231, 8096, 10284, 0, 0, 0, 10380, 8733, 0, 0, 41602, 0, - 0, 74831, 917901, 0, 73747, 65399, 0, 64591, 42405, 0, 917897, 843, - 11541, 0, 0, 0, 41935, 74496, 41902, 0, 0, 215, 41258, 0, 43159, 1953, - 9579, 41938, 1256, 3910, 9407, 6242, 0, 0, 41257, 41900, 8675, 10700, - 8805, 1742, 0, 9333, 8202, 0, 0, 0, 0, 0, 73882, 499, 0, 0, 0, 126983, 0, - 1712, 5932, 0, 41762, 0, 0, 11967, 1775, 0, 0, 0, 0, 0, 9458, 0, 6470, - 9180, 120380, 43176, 0, 0, 42782, 0, 0, 0, 917912, 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, 0, 917980, 7507, - 0, 43149, 0, 65031, 7961, 1636, 0, 65029, 65024, 0, 12473, 6534, 0, 99, - 98, 97, 120571, 67584, 4049, 0, 0, 7090, 0, 7892, 917969, 10777, 0, - 65310, 65562, 66599, 0, 0, 8039, 3363, 66594, 0, 0, 0, 12596, 66595, - 42258, 42570, 5593, 119148, 120711, 0, 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, 0, 1536, - 64093, 73970, 0, 0, 0, 6020, 12716, 127112, 12744, 475, 120394, 13266, 0, - 127111, 0, 73926, 0, 10645, 1212, 6543, 0, 8134, 0, 2913, 73870, 0, 1866, - 0, 195095, 0, 8923, 1645, 12059, 66585, 0, 3196, 0, 0, 5935, 1250, 0, - 8174, 9787, 9856, 9859, 7916, 9861, 9860, 5258, 1882, 1892, 0, 10882, - 405, 11454, 73911, 0, 0, 41169, 8939, 41245, 0, 41170, 1454, 11369, 6477, - 12157, 0, 0, 0, 41172, 7855, 0, 0, 10480, 0, 0, 0, 8264, 12610, 0, 645, - 0, 7609, 40973, 0, 0, 0, 5824, 984, 0, 10688, 5851, 0, 7729, 73982, - 120518, 0, 195086, 66722, 0, 0, 0, 0, 4538, 120406, 43141, 0, 0, 74214, - 0, 0, 0, 118902, 43005, 0, 9552, 0, 0, 0, 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, 0, 8455, 10082, 11575, - 0, 119566, 0, 12808, 12183, 6145, 0, 64929, 0, 0, 0, 43186, 42509, 0, - 3922, 9187, 0, 0, 0, 119057, 11752, 3353, 9358, 0, 0, 66680, 120090, - 11747, 7931, 8558, 9795, 0, 0, 0, 120082, 120081, 120084, 41027, 120086, - 0, 120088, 120087, 7019, 120073, 0, 11751, 120078, 120077, 64657, 8657, - 120048, 8594, 120068, 0, 0, 120069, 120072, 120071, 0, 0, 43154, 41029, - 0, 11332, 65380, 7728, 0, 11294, 0, 66665, 7851, 0, 0, 8699, 0, 42524, 0, - 9085, 0, 7504, 9327, 6160, 0, 0, 0, 8088, 0, 74012, 0, 0, 4439, 6926, 0, - 12924, 0, 42369, 0, 65491, 65145, 9041, 43559, 64577, 10826, 0, 11296, 0, - 0, 0, 65825, 9577, 120494, 0, 64670, 0, 0, 42159, 11295, 0, 0, 120779, 0, - 0, 10902, 0, 0, 0, 0, 10472, 2995, 0, 0, 0, 2371, 0, 120808, 259, 1009, - 0, 2402, 2333, 6440, 0, 0, 65125, 41244, 0, 13271, 9103, 41180, 0, 0, 0, - 0, 10219, 0, 0, 0, 0, 43178, 127070, 41261, 119362, 917974, 8613, 0, - 118989, 917978, 917979, 41492, 12005, 917982, 0, 1890, 120056, 0, 0, 0, - 7293, 7991, 0, 10578, 0, 118840, 0, 0, 0, 0, 0, 0, 120054, 118815, 6635, - 0, 6164, 65170, 0, 0, 0, 11664, 0, 0, 0, 0, 118812, 0, 0, 0, 9175, 11925, - 0, 9088, 0, 64545, 1396, 0, 7546, 3847, 0, 0, 4985, 13288, 672, 8098, - 43196, 194746, 0, 0, 0, 74043, 65072, 1577, 11772, 0, 5928, 4525, 10658, - 65911, 1266, 10180, 0, 0, 12622, 0, 0, 0, 194714, 0, 13310, 773, 19933, - 1539, 0, 0, 66374, 0, 0, 0, 0, 3051, 5862, 7823, 0, 0, 120411, 3250, - 74020, 0, 66649, 9510, 66237, 0, 0, 41066, 64673, 917963, 917964, 0, - 3505, 8707, 917968, 917965, 917966, 917971, 917972, 3471, 917970, 5479, - 882, 6686, 119584, 11613, 120772, 42754, 0, 0, 0, 0, 0, 0, 0, 3225, 0, - 4433, 41156, 73745, 43173, 1443, 4381, 0, 0, 10926, 11756, 11757, 64879, + 9467, 5558, 8878, 0, 195036, 7451, 6706, 10146, 0, 9086, 64566, 0, 64584, + 7437, 7454, 12594, 0, 68362, 4546, 7731, 0, 119909, 74243, 0, 3805, 0, + 194565, 44001, 41008, 0, 6307, 19949, 0, 7544, 0, 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, 0, 0, 0, 5506, 0, + 1911, 66652, 0, 9961, 8845, 66698, 0, 10792, 8889, 0, 2098, 0, 64751, 0, + 66622, 0, 0, 74364, 0, 0, 0, 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, 0, 0, 0, 4357, 0, 0, 0, 74233, + 9967, 119852, 42860, 119838, 10941, 65721, 6962, 0, 0, 119324, 0, 11014, + 0, 8942, 12000, 69224, 0, 0, 11974, 0, 42772, 127518, 11650, 5013, 0, 0, + 66210, 118914, 6613, 0, 0, 0, 0, 0, 64714, 0, 0, 0, 12120, 43476, 0, + 11024, 74811, 0, 10563, 0, 0, 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, 0, + 3483, 119593, 1989, 0, 0, 9104, 3503, 65375, 0, 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, 0, + 1403, 0, 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, + 0, 12943, 65185, 41869, 12619, 0, 10154, 0, 74439, 2039, 0, 7446, 1684, + 63979, 10974, 458, 120620, 0, 69791, 0, 11916, 65016, 0, 78067, 42115, 0, + 12288, 78057, 0, 1493, 42111, 7553, 4097, 0, 13080, 0, 65808, 6610, 6030, + 8059, 7508, 13131, 0, 0, 0, 8794, 41278, 41629, 12154, 0, 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, 0, 195076, 0, 7405, 10105, 65810, 0, 41632, 7493, 0, 0, 41622, + 0, 0, 119556, 74584, 7632, 9716, 19954, 9805, 5990, 900, 0, 63957, 0, 0, + 3612, 0, 64376, 0, 5389, 0, 0, 65938, 2839, 9621, 582, 0, 74368, 3749, + 6949, 7569, 74061, 0, 0, 6956, 4403, 19962, 65559, 3299, 0, 0, 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, 0, 11963, 43620, 0, 78889, 0, 0, 0, 9881, 43115, 65757, 3415, + 0, 0, 8648, 0, 6741, 43047, 0, 13180, 0, 418, 0, 0, 10295, 10327, 10391, + 41752, 74339, 8641, 41449, 0, 74100, 0, 10911, 6942, 0, 1024, 42849, + 41751, 69776, 8941, 0, 4554, 0, 9023, 11685, 0, 9928, 78617, 0, 11437, + 43741, 0, 120700, 63967, 0, 41206, 120724, 9049, 41185, 43166, 0, 11680, + 0, 11686, 0, 65224, 4565, 4655, 119553, 0, 0, 64523, 10343, 10407, 0, + 66671, 11466, 0, 0, 42890, 0, 12050, 68201, 2860, 0, 0, 0, 42792, 5743, + 10424, 12065, 42872, 0, 0, 0, 8875, 0, 0, 917991, 7531, 12847, 2413, 0, + 78635, 962, 0, 12855, 41196, 42564, 0, 1582, 0, 5508, 0, 0, 0, 10801, 0, + 118798, 0, 7173, 496, 10439, 4313, 64607, 119557, 7860, 0, 906, 42793, + 2842, 6405, 64722, 13132, 798, 64694, 12801, 8406, 1153, 0, 64788, 0, + 8054, 9174, 194749, 917976, 9964, 0, 41611, 4642, 66574, 11556, 0, 0, + 78857, 42089, 78855, 9008, 0, 0, 195096, 42079, 917981, 77924, 42513, 0, + 42842, 73985, 65285, 118974, 127003, 0, 0, 0, 0, 11335, 64069, 42093, + 3920, 0, 0, 0, 0, 4580, 41967, 0, 64384, 0, 119158, 3021, 42004, 0, 0, + 42317, 41998, 0, 6946, 0, 0, 0, 0, 65204, 0, 68113, 42690, 9880, 42010, + 74824, 64589, 10111, 64875, 0, 68399, 43998, 11360, 0, 0, 0, 0, 42149, 0, + 0, 0, 64941, 77919, 0, 0, 0, 55247, 4110, 66005, 6959, 10929, 119110, 0, + 66703, 77921, 8617, 41982, 6025, 69242, 0, 0, 0, 0, 9597, 42099, 43172, + 0, 10117, 0, 0, 41636, 0, 0, 120681, 8301, 0, 0, 187, 0, 65669, 0, 4963, + 0, 127517, 0, 8964, 65676, 65785, 0, 41948, 0, 0, 0, 41942, 65449, 3160, + 10081, 13226, 42121, 42475, 42663, 0, 41766, 0, 65882, 78849, 41760, + 1189, 905, 480, 10985, 41733, 67859, 9629, 6742, 1745, 43625, 73835, + 7888, 0, 0, 0, 42656, 41507, 8806, 7023, 0, 74279, 9447, 78651, 7867, + 69218, 6236, 0, 0, 10505, 0, 12851, 118948, 348, 5474, 0, 3103, 0, 41753, + 0, 0, 0, 78844, 78845, 41739, 78843, 42515, 10931, 41756, 43347, 42560, + 5391, 41746, 119147, 0, 41259, 5561, 74360, 2691, 0, 65553, 7933, 5562, + 69800, 917851, 41262, 0, 64421, 74846, 41251, 0, 0, 3979, 0, 0, 74813, 0, + 0, 0, 0, 118847, 41266, 0, 0, 917630, 10585, 65741, 41737, 9574, 2666, 0, + 41738, 831, 419, 13126, 10716, 0, 42822, 0, 6434, 0, 6939, 7766, 6432, 0, + 0, 916, 769, 41742, 11968, 74805, 6433, 5563, 547, 1943, 6439, 5560, + 4994, 487, 0, 4497, 3754, 127056, 120424, 9039, 0, 41776, 0, 8716, 1595, + 41615, 0, 0, 74260, 0, 43267, 43219, 0, 0, 12185, 0, 0, 68355, 68357, 0, + 42856, 8634, 0, 0, 4209, 120702, 0, 65879, 41538, 65612, 0, 669, 5679, 0, + 69786, 118961, 0, 0, 5678, 11821, 0, 6711, 460, 0, 0, 0, 0, 120747, 0, 0, + 78050, 119022, 0, 0, 0, 7782, 9044, 4974, 11760, 78494, 7577, 65711, + 41912, 1216, 0, 0, 5792, 0, 0, 78501, 0, 42264, 12244, 0, 5683, 0, 0, + 78119, 1549, 0, 0, 120398, 5682, 6206, 8670, 10256, 5680, 917568, 10001, + 0, 69768, 1449, 10241, 78290, 0, 0, 10552, 64342, 41922, 0, 8584, 0, + 5567, 2717, 0, 0, 5564, 42886, 41908, 42882, 5565, 0, 0, 0, 65708, 65709, + 5566, 69803, 65704, 65705, 11904, 42875, 43373, 42539, 5942, 8468, 0, + 10361, 10425, 65697, 65698, 65699, 0, 66598, 0, 64664, 10647, 78702, + 78703, 78690, 457, 78502, 65701, 1934, 43006, 0, 8802, 78710, 65130, + 78706, 78709, 6087, 78705, 78716, 41757, 78711, 8043, 8950, 65694, 64485, + 43534, 10457, 0, 11961, 78725, 78722, 78723, 78720, 78721, 0, 65515, + 9499, 10035, 13069, 0, 0, 9889, 68184, 42806, 0, 7256, 0, 0, 1667, 42161, + 0, 42428, 0, 6934, 0, 10802, 64861, 6556, 78390, 0, 8101, 3610, 0, 41748, + 4995, 955, 65907, 119208, 5350, 64339, 78306, 64549, 10875, 917956, 5477, + 65692, 0, 0, 120397, 12896, 10456, 917954, 0, 3874, 0, 0, 0, 0, 0, 0, + 65603, 0, 65687, 0, 41038, 74009, 119570, 42239, 8536, 78740, 0, 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, + 0, 0, 6370, 0, 7827, 68441, 6965, 0, 0, 13201, 0, 0, 0, 74382, 73781, + 7918, 73988, 0, 0, 917884, 1728, 0, 120710, 178, 12972, 0, 0, 0, 120671, + 0, 0, 78327, 120405, 65690, 0, 0, 119054, 0, 9252, 917889, 4652, 68371, + 0, 0, 0, 13065, 9923, 10806, 0, 11763, 0, 120688, 6723, 78187, 0, 6993, + 0, 0, 8333, 0, 0, 11390, 0, 74464, 0, 0, 74080, 0, 0, 11910, 0, 8278, + 8963, 4034, 0, 0, 65344, 120517, 41747, 0, 0, 8677, 0, 12707, 9350, + 66037, 0, 8836, 12315, 12747, 8300, 0, 0, 7491, 8856, 0, 0, 43150, 0, + 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, 0, 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, 0, 11783, 335, 120227, 64689, + 438, 4510, 5765, 8721, 120233, 119227, 6092, 12840, 43112, 8876, 120231, + 8096, 10284, 0, 0, 0, 10380, 8733, 0, 0, 41602, 0, 0, 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, 0, 41257, 41900, 8675, 10700, 8805, 1742, 0, + 9333, 8202, 0, 0, 0, 0, 0, 73882, 499, 0, 43467, 0, 55290, 0, 1712, 5932, + 77845, 41762, 0, 0, 11967, 1775, 0, 0, 0, 0, 0, 9458, 0, 6470, 9180, + 120380, 43176, 0, 0, 42782, 0, 0, 0, 917912, 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, 194964, 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, 0, + 65310, 65562, 66599, 66722, 0, 8039, 3363, 66594, 43434, 0, 0, 12596, + 66595, 42258, 42570, 5593, 119148, 120711, 0, 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, 64093, 73970, 77930, 0, 0, 6020, 12716, 127112, 12744, 475, + 120394, 13266, 0, 127111, 0, 73926, 0, 10645, 1212, 6543, 0, 8134, 0, + 2913, 73870, 0, 1866, 0, 195095, 0, 8923, 1645, 12059, 66585, 78786, + 3196, 0, 0, 5935, 1250, 127066, 8174, 9787, 6733, 9859, 7916, 9861, 9860, + 5258, 1882, 1892, 6731, 10882, 405, 11454, 73911, 0, 0, 41169, 8939, + 41245, 0, 41170, 1454, 11369, 6477, 12157, 0, 0, 0, 41172, 7855, 0, 0, + 10480, 0, 0, 77936, 8264, 12610, 0, 645, 0, 7609, 40973, 0, 73833, 78249, + 5824, 984, 77918, 10688, 5851, 0, 7729, 73982, 120518, 0, 195086, 43369, + 0, 0, 68415, 0, 4538, 120406, 43141, 0, 0, 74214, 73886, 0, 0, 118902, + 43005, 78448, 9552, 0, 0, 0, 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, 0, 8455, 10082, 11575, 0, + 119566, 0, 12808, 12183, 6145, 0, 64929, 0, 0, 0, 43186, 42509, 0, 3922, + 9187, 0, 0, 0, 119057, 11752, 3353, 9358, 0, 917957, 66680, 120090, + 11747, 7931, 8558, 9795, 68380, 0, 0, 120082, 120081, 120084, 41027, + 120086, 0, 120088, 120087, 7019, 120073, 0, 11751, 120078, 78294, 64657, + 8657, 120048, 8594, 120068, 0, 0, 120069, 120072, 120071, 0, 0, 43154, + 41029, 0, 11332, 65380, 7728, 0, 11294, 0, 66665, 7851, 0, 8375, 8699, 0, + 42524, 0, 9085, 0, 7504, 9327, 6160, 0, 0, 0, 8088, 0, 74012, 0, 0, 4439, + 6926, 0, 12924, 0, 42369, 0, 65491, 65145, 9041, 43559, 64577, 10826, 0, + 11296, 0, 0, 0, 65825, 9577, 68199, 0, 64670, 0, 78056, 6793, 11295, 0, + 78053, 73872, 0, 0, 10902, 0, 0, 78070, 78068, 10472, 2995, 0, 0, 64682, + 2371, 78069, 120808, 259, 1009, 0, 2402, 2333, 6440, 0, 0, 65125, 41244, + 0, 13271, 9103, 41180, 0, 0, 0, 0, 10219, 0, 0, 0, 0, 43178, 127070, + 41261, 119362, 43640, 8613, 0, 118989, 6736, 195092, 41492, 12005, + 917982, 0, 1890, 120056, 0, 0, 0, 7293, 7991, 0, 10578, 0, 78076, 0, + 78077, 0, 0, 78800, 0, 120054, 42668, 6635, 0, 6164, 65170, 0, 0, 0, + 11664, 0, 0, 0, 0, 118812, 0, 0, 0, 9175, 11925, 78045, 9088, 0, 64545, + 1396, 0, 7546, 3847, 0, 0, 4985, 13288, 672, 8098, 43196, 194746, 0, 0, + 0, 74043, 65072, 1577, 11772, 13041, 5928, 4525, 10658, 65911, 1266, + 10180, 0, 0, 12622, 0, 0, 0, 194714, 0, 13310, 773, 19933, 1539, 0, + 126983, 42731, 0, 0, 0, 0, 3051, 5862, 7823, 0, 0, 120411, 3250, 43991, + 0, 66649, 9510, 66237, 0, 0, 41066, 64673, 917963, 917964, 0, 3505, 8707, + 917968, 6725, 917966, 917971, 917972, 3471, 917970, 5479, 882, 6686, + 119584, 11613, 120772, 42754, 0, 0, 0, 0, 0, 0, 0, 3225, 917996, 4433, + 41156, 43973, 43173, 1443, 4381, 0, 0, 10926, 11756, 11757, 64879, 917949, 917950, 917947, 13227, 0, 10021, 5160, 1387, 0, 917953, 41418, 0, - 65914, 917957, 217, 917955, 917960, 917961, 10443, 10789, 41158, 119257, - 4274, 0, 41483, 0, 41250, 0, 42179, 0, 5931, 11744, 0, 0, 41252, 66682, - 0, 119637, 41249, 1366, 64635, 0, 12466, 0, 0, 4397, 0, 0, 41296, 9545, - 41291, 0, 0, 41485, 3511, 41282, 5923, 10400, 0, 0, 760, 0, 12088, 5786, - 0, 42256, 119869, 119861, 417, 41474, 119562, 41565, 0, 5934, 119867, - 66583, 119231, 64877, 0, 64481, 0, 0, 41956, 0, 126995, 0, 0, 0, 42273, - 5819, 0, 917556, 0, 0, 0, 65910, 0, 10246, 0, 0, 1237, 10274, 4552, 0, 0, - 0, 1375, 66705, 43573, 65260, 42063, 0, 42811, 10312, 74192, 120794, - 7840, 0, 64890, 10252, 0, 0, 43185, 0, 4396, 0, 119880, 10769, 10331, - 119041, 0, 9753, 0, 8944, 0, 0, 10473, 0, 0, 6072, 43025, 10299, 0, 0, - 120608, 119874, 0, 0, 0, 0, 9330, 0, 7222, 10283, 10315, 10379, 4996, 0, - 13281, 66517, 7865, 10087, 0, 0, 119092, 0, 0, 7565, 66363, 12952, 64806, - 43180, 0, 68096, 0, 0, 74288, 622, 74023, 885, 64772, 1602, 0, 0, 852, 0, - 12160, 0, 10212, 65435, 0, 12071, 9609, 12156, 917983, 917984, 43586, - 11035, 10411, 917988, 10255, 10263, 10279, 4194, 10375, 917993, 0, 4315, - 12644, 917997, 917994, 917995, 43343, 0, 917998, 917999, 41177, 0, 0, - 917792, 0, 0, 8715, 0, 41179, 0, 43313, 0, 41176, 0, 994, 0, 8452, - 127103, 73966, 0, 0, 5921, 0, 2597, 0, 5922, 118903, 127109, 4186, - 127107, 127106, 127105, 73973, 0, 4406, 74601, 8480, 0, 9747, 0, 4413, 0, - 42268, 3198, 5924, 5920, 0, 6921, 0, 74007, 42869, 8418, 11681, 43169, - 10176, 0, 742, 0, 2893, 10772, 65276, 5937, 1914, 2553, 11682, 0, 0, 0, - 8363, 0, 2993, 7772, 3916, 0, 0, 1141, 42407, 8159, 718, 7572, 973, 0, - 120718, 3235, 2415, 43164, 0, 8018, 42333, 74756, 10675, 6937, 42486, 0, - 65390, 0, 0, 1202, 0, 0, 127037, 0, 0, 0, 0, 64542, 3260, 73829, 65388, - 0, 8419, 0, 127036, 0, 0, 74193, 0, 0, 0, 0, 1431, 0, 66565, 10821, 0, - 12804, 0, 8229, 1235, 3307, 11472, 0, 0, 4544, 0, 0, 0, 1740, 0, 8758, - 985, 12882, 64511, 0, 12068, 0, 0, 10141, 0, 63761, 8785, 4476, 0, 63763, - 12655, 8907, 0, 0, 0, 0, 0, 119572, 10665, 64616, 41572, 0, 0, 0, 41573, - 0, 3931, 0, 74143, 0, 0, 0, 0, 11982, 0, 0, 0, 0, 64484, 0, 41167, 0, - 41735, 0, 717, 10754, 0, 0, 0, 0, 63767, 0, 1780, 6936, 0, 0, 819, 10611, - 9694, 126978, 0, 0, 0, 0, 0, 0, 12820, 0, 6578, 7009, 7523, 6922, 74218, - 67848, 7525, 3346, 8339, 0, 0, 575, 268, 0, 8563, 0, 120343, 41541, - 65565, 8336, 5936, 7290, 0, 8337, 13081, 308, 11388, 7522, 120721, 0, - 65466, 11090, 6953, 0, 120346, 0, 120345, 5926, 0, 0, 0, 0, 0, 0, 9038, - 7887, 0, 7830, 11651, 13093, 64002, 0, 65742, 0, 119597, 11590, 0, 74048, - 0, 8595, 0, 0, 0, 13097, 0, 64643, 13283, 12697, 0, 120621, 3488, 5933, - 10033, 73738, 66241, 65570, 0, 12297, 119153, 1955, 0, 5349, 42538, 0, 0, - 65308, 9462, 0, 0, 0, 0, 0, 0, 5831, 0, 7638, 0, 42764, 0, 43109, 7637, - 11957, 120600, 0, 0, 0, 0, 0, 0, 0, 7636, 65171, 9124, 0, 120331, 0, 291, - 0, 0, 2027, 66230, 0, 0, 10403, 0, 4640, 64713, 10224, 120429, 42512, - 120431, 120430, 0, 0, 0, 0, 0, 0, 0, 119094, 74213, 7824, 0, 0, 41274, - 5778, 6302, 0, 0, 12680, 119130, 1417, 0, 194914, 9452, 0, 0, 11552, 0, - 0, 0, 65391, 0, 10172, 65453, 120408, 41264, 120410, 6426, 4641, 9179, - 64819, 64906, 41255, 42036, 41469, 41269, 120412, 41267, 4646, 120425, - 865, 42034, 120426, 120421, 4645, 42033, 120422, 0, 0, 64728, 0, 0, 0, - 1659, 919, 42784, 1671, 195089, 6069, 9219, 195090, 1661, 13120, 63784, - 195094, 10140, 9713, 119143, 0, 0, 0, 2306, 10485, 118943, 6068, 10612, - 195099, 0, 195101, 195078, 41462, 195080, 195079, 5422, 195081, 0, 0, 0, - 10229, 10635, 826, 195083, 195082, 195085, 195084, 195087, 6483, 0, 1808, - 7848, 0, 8100, 0, 0, 0, 13301, 0, 9667, 0, 0, 0, 11003, 9904, 0, 0, - 120690, 9144, 10921, 0, 0, 9840, 65131, 917560, 0, 10313, 0, 0, 64320, - 10265, 0, 10962, 118970, 43008, 8945, 0, 0, 41, 195072, 1792, 120515, - 195073, 8655, 195075, 0, 0, 12066, 0, 385, 4152, 2585, 0, 0, 3126, 0, - 74136, 10957, 0, 0, 0, 0, 13157, 0, 0, 3570, 0, 7443, 0, 0, 6997, 0, 0, - 7879, 8739, 11075, 0, 65216, 0, 0, 2593, 8463, 7810, 917862, 7839, - 119913, 0, 917860, 9691, 4411, 917847, 0, 0, 0, 0, 65254, 10066, 0, 0, 0, - 0, 13061, 8016, 0, 19932, 64831, 0, 0, 12390, 119171, 1634, 68115, 0, + 65914, 6721, 217, 917955, 917960, 917961, 10443, 10789, 41158, 119257, + 4274, 0, 41483, 0, 41250, 0, 42179, 0, 5931, 11744, 69232, 0, 41252, + 66682, 0, 119637, 41249, 1366, 64635, 0, 12466, 0, 0, 4397, 0, 0, 41296, + 9545, 41291, 0, 0, 41485, 3511, 41282, 5923, 10400, 0, 0, 760, 0, 12088, + 5786, 0, 42256, 119869, 119861, 417, 41474, 119562, 41565, 0, 5934, + 119867, 66583, 119231, 64877, 0, 64481, 78614, 66013, 41956, 43455, + 126995, 0, 0, 0, 42273, 5819, 0, 917556, 0, 0, 0, 65910, 0, 10246, + 120816, 0, 1237, 10274, 4552, 0, 0, 0, 1375, 66705, 43573, 65260, 42063, + 0, 42811, 10312, 74192, 120794, 7840, 0, 43630, 10252, 0, 0, 43185, 0, + 4396, 0, 119880, 10769, 9676, 119041, 0, 9753, 0, 8944, 0, 0, 10473, 0, + 0, 6072, 43025, 10299, 0, 0, 120608, 66326, 0, 0, 0, 0, 9330, 0, 7222, + 10283, 10315, 10379, 4996, 0, 13281, 66517, 7865, 10087, 78343, 0, 78347, + 0, 0, 7565, 66363, 12952, 64806, 43180, 77928, 68096, 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, 917993, 0, 4315, 12644, 127516, + 77937, 43639, 43343, 0, 917998, 11501, 41177, 0, 0, 917792, 0, 0, 8715, + 0, 41179, 0, 43313, 0, 41176, 0, 994, 0, 8452, 127103, 73966, 0, 0, 5921, + 0, 2597, 0, 5922, 118903, 77943, 4186, 127107, 127106, 127105, 6718, 0, + 4406, 74601, 8480, 9192, 9747, 0, 4413, 0, 42268, 3198, 5924, 5920, 0, + 6921, 78081, 74007, 42869, 8418, 11681, 43169, 10176, 0, 742, 0, 2893, + 10772, 65276, 5937, 1914, 2553, 11682, 6756, 0, 0, 8363, 0, 2993, 7772, + 3916, 0, 120494, 1141, 42407, 8159, 718, 7572, 973, 0, 120718, 3235, + 2415, 43164, 0, 8018, 42333, 74756, 10675, 6937, 42486, 43381, 65390, 0, + 0, 1202, 0, 0, 127037, 0, 0, 0, 78182, 64542, 3260, 73829, 65388, 9945, + 8419, 78042, 6738, 0, 43681, 74193, 2059, 0, 0, 55237, 1431, 0, 66565, + 10821, 0, 12804, 0, 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, 0, 0, 41573, 0, 3931, 120295, 74143, + 0, 0, 0, 0, 11982, 0, 0, 0, 0, 64484, 0, 41167, 0, 41735, 0, 717, 10754, + 0, 0, 0, 0, 63767, 0, 1780, 6936, 0, 0, 819, 10611, 9694, 126978, 0, 0, + 0, 0, 0, 0, 12820, 0, 6578, 7009, 7523, 6922, 74218, 67848, 7525, 3346, + 8339, 0, 0, 575, 268, 78111, 8563, 5754, 120343, 41541, 65565, 8336, + 5936, 7290, 78117, 8337, 13081, 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, 0, 8595, 0, 0, 43703, 13097, 0, 64643, + 13283, 12697, 0, 12381, 3488, 5933, 10033, 73738, 66241, 65570, 0, 12297, + 119153, 1955, 0, 5349, 42538, 0, 0, 65308, 9462, 0, 0, 0, 0, 42736, 0, + 5756, 0, 7638, 41642, 42764, 0, 43109, 7637, 5752, 120600, 0, 73832, 0, + 120635, 0, 78334, 0, 7636, 65171, 9124, 0, 78892, 0, 291, 0, 0, 2027, + 66230, 78142, 78136, 10403, 0, 4640, 64713, 10224, 120429, 42512, 120431, + 120430, 0, 0, 0, 0, 0, 0, 0, 119094, 74213, 7824, 0, 0, 41274, 5778, + 6302, 0, 0, 12680, 119130, 1417, 77889, 194914, 9452, 0, 74393, 11552, 0, + 0, 0, 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, 0, 0, 64728, 0, 78673, + 78674, 1659, 919, 42784, 1671, 195089, 6069, 9219, 195090, 1661, 13120, + 63784, 69819, 10140, 9713, 119143, 0, 0, 0, 2306, 10485, 118943, 6068, + 10612, 195099, 0, 195101, 195078, 41462, 195080, 195079, 5422, 195081, 0, + 0, 0, 10229, 10635, 826, 195083, 195082, 195085, 195084, 195087, 6483, 0, + 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, 0, 77951, + 12066, 0, 385, 4152, 2585, 0, 119068, 3126, 0, 74136, 10957, 0, 43258, 0, + 0, 13157, 0, 0, 3570, 0, 7443, 0, 44006, 6997, 0, 0, 7879, 8739, 11075, + 0, 65216, 0, 69795, 2593, 8463, 7810, 917862, 7839, 119913, 78806, + 119912, 9691, 4411, 78802, 0, 0, 43442, 78799, 65254, 10066, 0, 0, 0, 0, + 13061, 8016, 78687, 19932, 64831, 0, 0, 12390, 119171, 1634, 68115, 0, 11056, 0, 119925, 0, 41165, 11328, 12450, 0, 41166, 0, 12456, 119914, - 171, 5941, 12452, 917544, 12458, 12531, 0, 43013, 63800, 74162, 0, - 120483, 194920, 0, 12454, 63806, 42132, 12063, 195077, 0, 3230, 0, 0, 0, - 5209, 297, 5810, 8522, 8415, 0, 0, 0, 7077, 2497, 0, 960, 74156, 6981, 0, - 12938, 4292, 0, 74815, 10512, 0, 74814, 0, 0, 0, 2503, 73778, 1762, - 73833, 2495, 0, 5844, 119124, 118838, 0, 12654, 4663, 1899, 0, 2507, 0, - 8726, 65594, 0, 0, 0, 8892, 0, 0, 0, 0, 5782, 420, 0, 0, 120462, 10797, - 63794, 0, 0, 0, 63796, 118965, 0, 66581, 119205, 41608, 0, 0, 0, 4659, - 120788, 0, 0, 0, 0, 0, 0, 0, 329, 120472, 0, 917548, 0, 0, 41188, 13244, - 120466, 42167, 0, 0, 5380, 0, 0, 1155, 11365, 43126, 0, 0, 65684, 0, - 5601, 65192, 42765, 63752, 0, 7987, 0, 1172, 0, 0, 43601, 120476, 74126, - 5603, 0, 4473, 0, 194823, 0, 65347, 65346, 65345, 0, 0, 5347, 0, 0, - 73868, 118944, 10588, 0, 0, 63755, 0, 5343, 120473, 0, 4555, 5341, 0, 0, - 0, 5351, 0, 43104, 65244, 917892, 64541, 42519, 74472, 0, 0, 74765, - 917888, 0, 6638, 0, 65113, 271, 74180, 65370, 8835, 65368, 12653, 65366, - 42172, 41086, 65363, 65362, 65361, 11912, 65359, 11323, 65357, 11800, - 65355, 5345, 65353, 65352, 65351, 761, 65349, 19959, 0, 0, 0, 0, 0, - 64647, 0, 0, 4699, 0, 0, 0, 0, 64605, 0, 0, 0, 4916, 0, 380, 10958, - 66563, 917906, 0, 9773, 13167, 12918, 41096, 73980, 0, 917898, 917893, - 10684, 0, 917896, 0, 7946, 12541, 8182, 0, 0, 0, 0, 0, 0, 9005, 1225, - 6630, 0, 0, 0, 0, 8847, 0, 65876, 5535, 8329, 74590, 0, 0, 0, 0, 3127, - 2595, 65713, 0, 0, 5607, 41089, 0, 0, 74256, 2665, 11304, 0, 74200, 4970, - 8764, 120459, 8934, 0, 41566, 4492, 0, 65011, 41090, 0, 0, 1188, 7254, - 1100, 0, 0, 41081, 2912, 11749, 0, 0, 0, 3572, 10023, 4959, 13079, 0, 0, - 9729, 0, 0, 0, 0, 0, 0, 11803, 7996, 9907, 41450, 13304, 0, 0, 41451, 0, - 0, 8273, 0, 3451, 0, 972, 41453, 0, 0, 73883, 0, 73945, 0, 3455, 19955, - 9538, 0, 0, 0, 0, 0, 0, 11396, 0, 11019, 0, 0, 0, 120507, 41078, 0, 261, - 5927, 7791, 0, 0, 0, 10696, 0, 6073, 9838, 118920, 0, 6075, 0, 282, 0, - 6437, 74078, 0, 65861, 0, 0, 0, 0, 3474, 118787, 0, 120655, 6081, 0, 0, - 74076, 0, 0, 0, 0, 0, 0, 8751, 12623, 120273, 7816, 12636, 4665, 12628, - 4670, 120271, 120272, 0, 9642, 10912, 958, 0, 11387, 0, 4666, 0, 4915, 0, - 4669, 0, 68099, 13287, 4664, 10836, 120550, 0, 0, 0, 43595, 7450, 0, - 917875, 8664, 9697, 3606, 917873, 0, 0, 64815, 1063, 120250, 120251, - 9772, 7255, 8886, 1389, 0, 120257, 120258, 120259, 12941, 120253, 120254, - 120255, 120256, 12301, 120266, 120267, 41102, 66604, 120262, 120263, - 120264, 1017, 66600, 523, 505, 1447, 74436, 0, 0, 0, 8608, 42789, 0, 0, - 0, 119196, 11307, 66707, 917871, 0, 11745, 7919, 0, 1641, 0, 0, 8966, 0, - 0, 5908, 0, 0, 74562, 0, 1699, 74191, 74843, 0, 0, 6306, 10169, 0, - 119251, 0, 3766, 120457, 120456, 120455, 6611, 257, 43170, 13153, 0, - 42386, 0, 9436, 2599, 0, 6496, 9449, 5930, 11476, 11033, 11447, 0, 5622, - 120436, 8477, 3760, 1718, 9442, 66433, 3776, 0, 41435, 4352, 0, 2435, - 120809, 5621, 0, 4201, 3778, 4203, 4202, 4205, 4204, 120447, 3768, 68142, - 765, 41440, 3764, 8473, 120440, 8469, 120438, 12947, 4564, 0, 0, 74271, - 73753, 0, 0, 0, 0, 5225, 0, 0, 0, 0, 0, 0, 74793, 5626, 73807, 11771, 0, - 0, 0, 0, 5353, 5625, 74179, 0, 0, 1010, 64572, 0, 42623, 64277, 0, 6952, - 0, 120752, 119003, 2590, 5629, 65552, 7551, 10325, 5632, 10471, 120038, + 171, 5941, 12452, 917544, 12458, 12531, 78779, 43013, 63800, 74162, 0, + 120483, 9969, 0, 12454, 63806, 42132, 12063, 78425, 78424, 3230, 0, 0, 0, + 5209, 297, 5810, 8522, 8415, 0, 78429, 78428, 7077, 2497, 0, 960, 74156, + 6981, 0, 12938, 4292, 0, 74815, 10512, 0, 74814, 78875, 127505, 78876, + 2503, 73778, 1762, 69794, 2495, 78873, 5844, 78874, 118838, 0, 12654, + 4663, 1899, 78877, 2507, 64121, 8726, 65594, 0, 0, 0, 8892, 0, 0, 0, 0, + 5782, 420, 0, 0, 120462, 10797, 63794, 0, 0, 64814, 63796, 77965, 0, + 66581, 119204, 41608, 0, 0, 63792, 4659, 120788, 0, 43676, 0, 0, 0, 0, 0, + 329, 77968, 0, 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, 0, 1172, 69799, 6786, 43601, 120476, 74126, 5603, + 0, 4473, 0, 194823, 0, 65347, 65346, 65345, 0, 0, 5347, 69802, 0, 73868, + 118944, 10588, 0, 0, 63755, 0, 5343, 78422, 0, 4555, 5341, 0, 0, 0, 5351, + 0, 43104, 65244, 917892, 64541, 42519, 74472, 0, 0, 74765, 917888, 0, + 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, 0, 63856, 0, 0, 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, 0, 69780, 0, 0, 0, + 0, 9005, 1225, 6630, 0, 0, 0, 0, 8847, 0, 65876, 5535, 8329, 74590, 0, 0, + 0, 0, 3127, 2595, 65713, 42013, 0, 5607, 41089, 0, 0, 74256, 2665, 11304, + 0, 74200, 4970, 8764, 120459, 8934, 0, 41566, 4492, 0, 65011, 41090, 0, + 0, 1188, 7254, 1100, 0, 0, 41081, 2912, 11749, 69792, 0, 0, 3572, 10023, + 4959, 13079, 0, 0, 9729, 0, 0, 0, 43361, 0, 0, 11803, 7996, 9907, 41450, + 13304, 0, 127260, 41451, 0, 11095, 8273, 127533, 3451, 0, 972, 41453, 0, + 0, 73883, 0, 73945, 0, 3455, 19955, 9538, 0, 69807, 0, 0, 0, 0, 11396, 0, + 11019, 0, 0, 0, 120507, 41078, 0, 261, 5927, 7791, 0, 0, 0, 10696, 0, + 6073, 9838, 118920, 0, 6075, 0, 282, 0, 6437, 74078, 0, 65861, 0, 0, 0, + 0, 3474, 118787, 0, 120655, 6081, 0, 0, 74076, 78879, 0, 0, 0, 0, 0, + 8751, 11499, 120273, 7816, 12636, 4665, 12628, 4670, 120271, 120272, 0, + 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, 0, 120257, 120258, 120259, 12941, 42661, 120254, 120255, 120256, + 12301, 120266, 69820, 41102, 66604, 120262, 120263, 120264, 1017, 66600, + 523, 505, 1447, 74436, 0, 0, 0, 8608, 42789, 0, 0, 0, 119196, 11307, + 66707, 917871, 0, 11745, 7919, 0, 1641, 0, 0, 8966, 0, 0, 5908, 0, 0, + 6744, 0, 1699, 74191, 74843, 0, 0, 6306, 10169, 0, 119251, 118939, 3766, + 2389, 120456, 120455, 6611, 257, 43170, 13153, 0, 42386, 0, 9436, 2599, + 0, 6496, 9449, 5930, 11476, 11033, 11447, 0, 5622, 120436, 8477, 3760, + 1718, 9442, 66433, 3776, 0, 41435, 4352, 0, 2435, 120809, 5621, 0, 4201, + 3778, 4203, 4202, 4205, 4204, 120447, 3768, 68142, 765, 41440, 3764, + 8473, 6373, 8469, 120438, 12947, 4564, 0, 0, 74271, 73753, 8374, 0, 0, + 6829, 5225, 0, 0, 0, 0, 119615, 0, 74793, 5626, 73807, 11771, 0, 0, 0, 0, + 5353, 5625, 74179, 0, 0, 1010, 64572, 41780, 42623, 64277, 0, 6952, 0, + 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, 10961, 0, 203, 0, 0, 0, 0, 0, 0, - 64378, 42054, 0, 0, 554, 119649, 11358, 0, 12182, 42048, 11065, 0, 73891, - 0, 0, 5694, 7689, 74528, 9323, 4325, 3047, 10317, 175, 0, 0, 74605, 0, 0, - 1243, 42154, 5431, 6652, 0, 0, 0, 0, 68118, 0, 1129, 0, 0, 65900, 1986, - 7846, 0, 8661, 0, 65255, 0, 3845, 4490, 0, 6649, 74400, 1456, 7530, - 11977, 7249, 8366, 0, 7756, 12342, 0, 51, 41516, 0, 8570, 9568, 0, 456, - 7026, 8145, 1168, 9251, 9082, 0, 64055, 42781, 3866, 12323, 41512, 73805, - 68121, 0, 41494, 0, 4660, 0, 10405, 0, 0, 0, 0, 42040, 73918, 119627, - 7944, 41454, 12605, 0, 0, 41455, 236, 0, 0, 8214, 0, 0, 0, 41457, 0, - 119589, 1969, 2384, 8097, 0, 0, 0, 0, 8766, 0, 917863, 5854, 0, 10583, 0, - 119989, 0, 10416, 917869, 3872, 0, 0, 8429, 0, 0, 2838, 917867, 0, 0, 0, - 0, 0, 0, 0, 917864, 120813, 10553, 1662, 8483, 0, 43605, 5892, 917868, 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, 0, 10357, 0, 8170, 1704, 8556, 0, - 9659, 0, 0, 0, 9556, 0, 4503, 11353, 9647, 0, 0, 0, 0, 0, 0, 0, 0, 74229, - 66593, 6438, 0, 9109, 119565, 1289, 64599, 0, 0, 0, 65507, 2447, 0, 0, 0, - 0, 0, 0, 73750, 0, 0, 19937, 0, 0, 0, 5675, 254, 0, 0, 0, 42425, 8918, - 64003, 5716, 42312, 0, 0, 6972, 42826, 0, 42464, 120567, 0, 0, 74796, - 64400, 64693, 0, 0, 65429, 9515, 4435, 0, 0, 0, 0, 11785, 0, 64671, - 41978, 1412, 4594, 1391, 10536, 8067, 9901, 7775, 0, 0, 74588, 120748, - 3140, 0, 7960, 43271, 0, 12518, 10909, 0, 1428, 12472, 0, 0, 7699, 12393, - 0, 0, 0, 74518, 9063, 0, 4261, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64554, - 10574, 3878, 0, 42352, 1752, 73785, 0, 42506, 0, 10199, 0, 0, 0, 65919, - 0, 0, 720, 324, 0, 0, 0, 0, 1464, 40985, 0, 7974, 0, 68123, 0, 64488, 0, - 0, 0, 74787, 0, 0, 0, 65597, 0, 0, 0, 1302, 0, 0, 0, 0, 0, 5204, 74774, - 0, 0, 0, 3995, 0, 65608, 3714, 0, 0, 0, 10999, 11750, 0, 127004, 0, 0, 0, - 0, 8130, 8672, 10845, 11964, 0, 0, 0, 0, 0, 42863, 73839, 0, 0, 0, 0, 0, - 0, 468, 612, 0, 64401, 66448, 0, 0, 1674, 0, 5823, 0, 12280, 0, 540, + 120017, 120018, 120023, 64275, 120021, 10961, 0, 203, 0, 0, 0, 0, 78350, + 0, 64378, 42054, 0, 0, 554, 119649, 11358, 0, 12182, 42048, 11065, 0, + 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, 0, 1129, + 0, 0, 65900, 1986, 7846, 78804, 8661, 0, 65255, 0, 3845, 4490, 118969, + 6649, 74400, 1456, 7530, 11977, 7249, 8366, 0, 7756, 12342, 0, 51, 41516, + 0, 8570, 9568, 917863, 456, 7026, 8145, 1168, 9251, 9082, 0, 64055, + 42781, 3866, 12323, 41512, 73805, 68121, 0, 41494, 0, 4660, 0, 10405, 0, + 78803, 0, 0, 42040, 73918, 119627, 7944, 41454, 12605, 0, 42205, 41455, + 236, 64051, 78867, 8214, 0, 0, 0, 41457, 0, 119589, 1969, 2384, 8097, + 917864, 0, 0, 78029, 8766, 0, 78079, 5854, 0, 10583, 0, 119989, 0, 10416, + 917869, 3872, 917868, 0, 8429, 0, 0, 2838, 917867, 0, 0, 0, 0, 0, 0, 0, + 11096, 120813, 10553, 1662, 8483, 0, 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, 0, 78886, 0, + 0, 74229, 66593, 6438, 0, 9109, 78882, 1289, 64599, 0, 0, 0, 65507, 2447, + 0, 0, 0, 0, 0, 0, 6334, 0, 0, 19937, 0, 0, 0, 5675, 254, 0, 0, 0, 42425, + 8918, 64003, 5716, 42312, 0, 0, 6972, 42826, 0, 42464, 120567, 0, 0, + 74796, 64400, 64693, 0, 77861, 65429, 9515, 4435, 0, 42522, 0, 0, 11785, + 0, 64671, 41978, 1412, 4594, 1391, 10536, 8067, 9901, 7775, 0, 0, 74588, + 120748, 3140, 0, 7960, 43271, 0, 12518, 10909, 127508, 1428, 12472, 0, 0, + 7699, 12393, 0, 0, 0, 74518, 8223, 0, 4261, 0, 0, 0, 0, 0, 0, 0, 0, + 43419, 0, 64554, 10574, 3878, 0, 42352, 1752, 73785, 0, 42506, 0, 10199, + 0, 0, 0, 65919, 0, 6695, 720, 324, 0, 0, 43406, 0, 1464, 40985, 0, 7974, + 0, 43474, 0, 64488, 0, 0, 64041, 74787, 0, 78865, 0, 65597, 0, 78863, 0, + 1302, 0, 78861, 0, 0, 0, 5204, 74774, 43404, 43396, 0, 3995, 68360, + 65608, 3714, 0, 0, 0, 10999, 11750, 0, 43251, 68660, 43301, 0, 120557, + 8130, 8672, 10845, 11964, 0, 0, 0, 0, 68455, 42863, 73839, 0, 0, 0, 0, 0, + 0, 468, 612, 0, 64401, 66448, 68376, 0, 1674, 0, 5823, 0, 12280, 0, 540, 74564, 0, 0, 8432, 0, 11073, 0, 64316, 0, 0, 820, 41741, 0, 120667, 0, 64684, 126992, 3359, 7800, 0, 65177, 6226, 353, 12396, 0, 119612, 64742, - 0, 0, 0, 0, 12412, 19941, 0, 120277, 0, 1884, 9481, 42418, 0, 41157, 0, - 1195, 64898, 7924, 0, 41151, 2010, 0, 41328, 42344, 0, 12409, 0, 4360, - 127009, 9739, 0, 74392, 73921, 0, 42521, 8539, 0, 0, 0, 0, 4788, 0, 0, - 65734, 0, 64353, 0, 13075, 74429, 0, 64569, 43532, 10837, 2492, 0, - 118901, 0, 41136, 64351, 11813, 9649, 41154, 119617, 5128, 4038, 41143, - 65604, 64859, 41592, 0, 1648, 5435, 0, 0, 41343, 119848, 65439, 12709, - 6986, 0, 0, 0, 41349, 0, 12581, 10374, 5175, 0, 73806, 10254, 0, 10278, - 10262, 120295, 41346, 0, 607, 0, 0, 0, 12923, 10314, 10282, 65477, 10378, - 120297, 40976, 8265, 0, 119834, 40975, 5840, 42838, 0, 40978, 0, 119840, - 0, 0, 0, 66444, 10538, 0, 2550, 119836, 0, 0, 0, 3525, 0, 0, 0, 0, 5619, - 65822, 0, 194882, 7455, 0, 5616, 11486, 9656, 0, 0, 10727, 5615, 0, - 120551, 42380, 64895, 0, 66451, 808, 5455, 11347, 0, 1026, 5620, 194887, - 0, 11350, 5617, 0, 9225, 64639, 127073, 9145, 0, 1338, 120581, 0, 12739, - 0, 3084, 0, 0, 41025, 6037, 0, 3974, 0, 10290, 0, 3083, 10322, 0, 0, 0, - 41036, 0, 0, 43321, 65606, 0, 41032, 42388, 0, 64700, 10011, 1445, 40961, - 0, 194893, 0, 40960, 0, 0, 0, 40963, 0, 10402, 0, 0, 0, 10603, 0, 0, 0, - 0, 194923, 10083, 127069, 0, 194922, 0, 0, 0, 9073, 42585, 64302, 10704, - 65030, 4787, 0, 74829, 0, 65423, 0, 0, 9570, 0, 9525, 2689, 917626, - 65426, 0, 917624, 0, 0, 40966, 917623, 13286, 3998, 42598, 42596, 503, 0, - 8735, 2690, 66488, 42836, 194913, 41954, 917617, 1652, 772, 194877, 8310, - 65428, 3487, 0, 3585, 10194, 43320, 119159, 0, 194874, 6468, 41976, 9720, - 917606, 11767, 41970, 0, 5836, 12358, 0, 4355, 9048, 12180, 65027, 64680, - 65025, 64757, 0, 41488, 0, 8527, 194917, 12362, 12435, 12360, 41053, - 3266, 0, 12356, 8616, 41466, 0, 0, 11450, 0, 3638, 12354, 0, 3216, 0, - 2358, 0, 8633, 0, 0, 0, 0, 0, 0, 11759, 0, 0, 74823, 0, 41423, 8078, - 10504, 0, 0, 0, 0, 7002, 0, 41430, 42267, 41051, 41484, 0, 0, 41050, - 41473, 10466, 13099, 0, 0, 0, 6435, 0, 11362, 0, 0, 65382, 0, 41420, 0, - 3625, 0, 41409, 0, 0, 2041, 9178, 9672, 41427, 43541, 43317, 0, 0, 0, - 41424, 917598, 120546, 0, 0, 0, 41417, 1261, 0, 0, 12102, 119662, 41401, - 0, 0, 0, 0, 0, 42290, 3275, 0, 42329, 0, 0, 0, 0, 0, 0, 10989, 74234, 0, - 10598, 0, 2669, 903, 0, 2920, 0, 0, 74603, 64504, 19928, 0, 0, 3917, 0, - 11732, 0, 0, 41448, 41461, 0, 0, 917558, 0, 8819, 12663, 0, 41184, 74014, - 232, 74835, 120646, 9168, 65786, 0, 0, 0, 9094, 0, 11758, 0, 0, 1064, - 42467, 0, 10115, 19924, 0, 0, 7862, 64551, 13224, 8516, 41862, 66650, - 7561, 0, 74018, 1878, 0, 0, 2911, 0, 41178, 5427, 64823, 0, 0, 12617, - 41174, 0, 41458, 0, 41463, 42413, 11292, 2406, 775, 0, 65584, 0, 6074, - 9618, 194903, 0, 0, 0, 194901, 41436, 3656, 0, 194899, 41456, 0, 1599, - 11333, 0, 8514, 8513, 0, 1613, 0, 0, 0, 0, 0, 0, 74500, 41460, 10145, - 10542, 0, 120379, 0, 9905, 0, 65730, 0, 120374, 8427, 120375, 0, 120376, - 0, 11497, 64687, 74008, 120371, 3871, 0, 0, 9111, 5741, 0, 194846, - 120366, 119111, 120745, 0, 120369, 0, 11648, 0, 0, 120364, 41587, 120365, - 0, 74322, 42113, 0, 0, 12172, 0, 74530, 0, 65723, 0, 73871, 65724, 7928, - 120354, 0, 41595, 73730, 0, 42118, 73830, 66042, 10355, 0, 7875, 0, - 41598, 3993, 0, 1545, 40971, 536, 0, 119959, 0, 0, 65173, 65286, 0, 0, 0, - 0, 0, 0, 41375, 5402, 0, 0, 1687, 120503, 0, 0, 0, 64326, 40969, 10526, - 0, 8323, 40968, 1339, 11731, 0, 0, 65460, 12242, 0, 8020, 10843, 11554, - 0, 0, 8266, 41006, 65722, 0, 10710, 0, 118942, 0, 0, 119155, 195091, 0, - 119636, 0, 120687, 0, 0, 11755, 66305, 0, 0, 10917, 120767, 0, 11272, - 2040, 41247, 41326, 0, 1741, 42370, 1227, 0, 0, 11413, 0, 0, 0, 1586, - 4978, 0, 1984, 0, 0, 120651, 40984, 0, 9373, 0, 12916, 6284, 0, 41663, 0, - 0, 0, 9237, 9385, 41648, 0, 0, 0, 41666, 1830, 73783, 41076, 41287, 0, 0, - 0, 0, 0, 0, 41987, 41676, 0, 120823, 0, 41670, 0, 0, 2796, 65167, 11683, - 9902, 74521, 0, 11451, 0, 0, 42631, 2359, 0, 67844, 74164, 41238, 548, - 11405, 13133, 64368, 0, 0, 0, 397, 64678, 42139, 9547, 9590, 0, 1614, 0, - 64356, 66307, 6651, 1358, 0, 428, 9620, 1466, 0, 10982, 0, 1333, 0, 407, - 6425, 0, 74253, 0, 0, 0, 5804, 11976, 8554, 0, 0, 0, 9057, 42294, 41218, - 0, 0, 0, 1883, 10952, 8048, 0, 41225, 0, 118955, 0, 0, 0, 4407, 0, 65809, - 119074, 194821, 8448, 68122, 74183, 0, 12675, 12659, 0, 42363, 120624, - 194824, 119058, 10766, 12012, 2386, 64732, 9170, 917821, 9123, 64585, - 120500, 0, 0, 42051, 0, 4164, 9081, 0, 120569, 42049, 42042, 8709, 0, 0, - 120637, 42419, 0, 42047, 0, 0, 8470, 11807, 65897, 577, 0, 0, 74300, 0, - 0, 74840, 0, 0, 0, 0, 8736, 1414, 42643, 9683, 0, 74344, 0, 2536, 0, - 66330, 0, 0, 0, 0, 0, 0, 0, 66317, 0, 66315, 66316, 0, 11273, 0, 43004, - 7541, 0, 0, 961, 64307, 66324, 0, 0, 3106, 65917, 41284, 1696, 0, 891, - 12105, 0, 42624, 12802, 3264, 8824, 13268, 43003, 10936, 0, 0, 0, 0, 0, - 0, 2322, 0, 0, 11449, 0, 42868, 41285, 3547, 0, 0, 0, 0, 43216, 6089, 0, - 0, 0, 4170, 1029, 0, 0, 119224, 42374, 0, 744, 0, 0, 0, 65823, 0, 0, - 3551, 0, 0, 4623, 0, 0, 4598, 0, 65136, 0, 0, 0, 10851, 0, 6179, 0, 6180, - 0, 11952, 120778, 0, 11972, 0, 0, 0, 0, 177, 0, 6176, 120580, 0, 0, 6177, - 9020, 0, 0, 6178, 120249, 120242, 0, 120243, 7518, 8754, 0, 120237, - 74551, 43081, 0, 0, 9136, 120240, 4401, 41280, 0, 8974, 2308, 0, 74149, - 0, 2318, 0, 66361, 8198, 0, 64360, 12601, 0, 65266, 120827, 74307, 0, - 6970, 5404, 43332, 3667, 7936, 12925, 126989, 42055, 0, 0, 118949, 10874, - 65505, 0, 0, 42053, 0, 42057, 11083, 42052, 0, 0, 73845, 0, 9665, 0, 0, - 13181, 0, 0, 0, 0, 74148, 0, 0, 120225, 120229, 120224, 74172, 41145, 0, - 0, 0, 41148, 8683, 7594, 0, 0, 119090, 10869, 0, 41146, 0, 11441, 0, - 3512, 917612, 0, 8103, 0, 0, 65184, 11780, 41563, 42796, 0, 119106, - 41544, 65146, 0, 0, 0, 0, 19942, 0, 118908, 7988, 10436, 74273, 3271, - 73804, 64711, 0, 0, 0, 0, 3804, 13070, 11557, 42044, 0, 1095, 0, 3599, 0, - 0, 0, 0, 0, 0, 0, 74346, 66697, 0, 11684, 0, 0, 0, 0, 42043, 0, 66677, 0, - 42046, 120751, 4036, 0, 0, 0, 194862, 0, 11954, 0, 1450, 12986, 1340, 0, - 65441, 0, 0, 0, 0, 0, 0, 0, 0, 6539, 0, 0, 0, 0, 0, 0, 41190, 3973, - 194852, 4575, 41193, 7982, 429, 0, 0, 0, 194854, 65792, 0, 118968, 6417, - 118918, 0, 0, 194850, 0, 0, 4919, 10590, 0, 7755, 0, 0, 64548, 0, 1621, - 10214, 65126, 0, 0, 0, 12188, 0, 1617, 8050, 0, 5015, 0, 119174, 42590, - 194871, 1756, 0, 0, 65768, 120694, 41892, 0, 7555, 13103, 5408, 2817, - 1214, 0, 0, 0, 0, 0, 0, 0, 7957, 8689, 64723, 1056, 0, 74147, 0, 0, 0, - 7073, 65850, 12327, 0, 119028, 0, 0, 0, 2341, 8450, 8484, 8474, 0, 0, 0, - 8461, 0, 12153, 12799, 0, 120654, 120684, 9451, 7571, 13073, 0, 0, 681, - 0, 703, 0, 3272, 8781, 12894, 0, 11709, 0, 74446, 0, 0, 0, 11338, 120768, - 3276, 0, 0, 65928, 0, 0, 65021, 64795, 74574, 0, 10047, 0, 3262, 0, 0, 0, - 0, 74329, 163, 576, 9895, 1655, 0, 74591, 0, 0, 0, 0, 0, 0, 10039, 0, 0, - 5623, 5717, 5776, 0, 0, 0, 41591, 120586, 65252, 120795, 0, 0, 0, 0, 0, - 0, 0, 8887, 0, 7295, 11031, 0, 43157, 0, 8946, 10348, 10412, 8755, 0, 0, - 5718, 13221, 0, 0, 0, 0, 0, 8810, 74499, 686, 0, 0, 4619, 118954, 6654, - 73769, 0, 0, 12040, 65689, 10128, 65118, 0, 119151, 118891, 0, 0, 2401, - 68144, 8792, 0, 0, 65455, 0, 0, 0, 119129, 0, 12886, 0, 66624, 0, 43557, - 10300, 10161, 10396, 74135, 0, 0, 0, 73851, 3010, 6441, 0, 1458, 41475, - 0, 0, 0, 11479, 0, 0, 9100, 12864, 0, 0, 1061, 64780, 2001, 43111, 0, 0, - 4052, 0, 7626, 0, 0, 1045, 0, 5631, 0, 0, 0, 0, 74127, 0, 0, 8486, 0, - 73758, 2335, 4362, 0, 0, 73867, 1025, 0, 42625, 0, 0, 41443, 0, 0, 0, - 1774, 1523, 0, 0, 41445, 0, 0, 8567, 41442, 3988, 0, 0, 118910, 0, 65274, - 8564, 0, 0, 0, 0, 0, 65908, 0, 66513, 6256, 0, 579, 0, 10206, 0, 0, 2673, - 0, 11814, 0, 4488, 0, 0, 0, 10444, 120820, 0, 11799, 74407, 0, 4487, 0, - 42832, 1032, 0, 120736, 0, 7203, 0, 614, 0, 0, 120615, 0, 0, 0, 0, 0, + 0, 120282, 0, 0, 12412, 19941, 0, 120277, 78847, 1884, 9481, 42418, 0, + 41157, 0, 1195, 64898, 7924, 0, 41151, 2010, 0, 41328, 42344, 0, 12409, + 0, 4360, 127009, 9739, 0, 74392, 73921, 0, 42521, 8539, 0, 0, 0, 0, 4788, + 0, 0, 65734, 0, 64353, 0, 13075, 74429, 0, 64569, 43532, 10837, 2492, 0, + 118901, 68637, 41136, 64351, 11813, 9649, 41154, 119617, 5128, 4038, + 41143, 65604, 64859, 41592, 6771, 1648, 5435, 0, 6734, 41343, 119848, + 65439, 12709, 6986, 119846, 0, 0, 41349, 0, 12581, 10374, 5175, 0, 73806, + 10254, 0, 10278, 10262, 77950, 41346, 0, 607, 0, 0, 0, 12923, 10314, + 10282, 65477, 10378, 120297, 40976, 8265, 0, 119834, 40975, 5840, 42838, + 0, 40978, 0, 119840, 0, 0, 0, 66444, 10538, 0, 2550, 119836, 6779, 0, 0, + 3525, 6824, 118886, 0, 0, 5619, 65822, 0, 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, 0, 1338, 120581, 0, 12739, 4603, 3084, 0, 0, 9858, 6037, 0, + 3974, 78213, 10290, 0, 3083, 10322, 0, 0, 0, 41036, 0, 0, 43321, 65606, + 0, 41032, 42388, 0, 64700, 10011, 1445, 40961, 0, 194893, 0, 40960, 0, + 194891, 0, 40963, 64952, 10402, 0, 0, 0, 10603, 0, 0, 0, 0, 6714, 10083, + 127069, 194895, 78367, 0, 0, 0, 9073, 42585, 64302, 10704, 65030, 4787, + 0, 74829, 0, 65423, 0, 0, 9570, 0, 9525, 2689, 917626, 65426, 0, 917624, + 43740, 0, 40966, 917623, 13286, 3998, 42598, 42596, 503, 0, 8735, 2690, + 66488, 42836, 194913, 41954, 917617, 1652, 772, 6688, 8310, 65428, 3487, + 43416, 3585, 10194, 43320, 119159, 0, 194874, 6468, 41976, 9720, 917606, + 11767, 41970, 0, 5836, 12358, 0, 4355, 9048, 12180, 65027, 64680, 65025, + 43699, 0, 41488, 0, 8527, 194917, 12362, 12435, 12360, 41053, 3266, 0, + 12356, 8616, 41466, 0, 0, 11450, 0, 3638, 12354, 0, 3216, 0, 2358, + 119069, 8633, 0, 0, 119182, 69244, 0, 0, 11759, 0, 6368, 74823, 0, 41423, + 8078, 10504, 0, 41698, 42237, 0, 7002, 0, 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, 0, 2041, 9178, 9672, 41427, 43541, + 43317, 0, 0, 0, 41424, 917598, 120546, 0, 0, 0, 41417, 1261, 0, 0, 12102, + 119662, 41401, 0, 0, 0, 0, 0, 42290, 3275, 0, 42329, 0, 0, 0, 0, 0, + 120725, 10989, 74234, 0, 10598, 7410, 2669, 903, 0, 2920, 0, 127232, + 74603, 64504, 19928, 0, 0, 3917, 0, 11732, 0, 0, 41448, 41461, 0, 0, + 917558, 0, 8819, 12663, 0, 41184, 74014, 232, 74835, 120646, 9168, 65786, + 0, 0, 0, 9094, 0, 11758, 68425, 0, 1064, 42467, 0, 10115, 19924, 0, 0, + 7862, 64551, 13224, 8516, 41862, 66650, 7561, 78618, 69793, 1878, 0, 0, + 2911, 0, 41178, 5427, 64823, 0, 0, 12617, 41174, 0, 41458, 0, 41463, + 42413, 11292, 2406, 775, 0, 65584, 0, 6074, 9618, 194903, 0, 43440, 0, + 194901, 41436, 3656, 0, 194899, 41456, 0, 1599, 11333, 0, 6703, 8513, 0, + 1613, 0, 68456, 12598, 0, 0, 78745, 74500, 41460, 10145, 10542, 9937, + 78746, 0, 9905, 0, 65730, 0, 120374, 8427, 120375, 55246, 120376, 0, + 11497, 64687, 74008, 120371, 3871, 0, 0, 9111, 5741, 0, 194846, 120366, + 119111, 120745, 0, 120368, 0, 11648, 0, 0, 120364, 41587, 120365, 0, + 74322, 42113, 0, 0, 12172, 0, 74530, 65298, 65723, 194840, 73871, 65724, + 7928, 120354, 0, 41595, 73730, 0, 42118, 73830, 66042, 10355, 0, 7875, 0, + 41598, 3993, 0, 1545, 40971, 536, 0, 43029, 0, 0, 65173, 65286, 0, 0, 0, + 0, 0, 0, 41375, 5402, 0, 0, 1687, 120503, 0, 0, 78194, 64326, 40969, + 10526, 78753, 8323, 40968, 1339, 11731, 78756, 0, 65460, 12242, 0, 8020, + 10843, 11554, 0, 0, 8266, 41006, 65722, 0, 10710, 0, 118942, 67667, + 64567, 119155, 195091, 0, 119636, 67857, 120687, 0, 0, 11755, 66305, 0, + 0, 10917, 120767, 0, 11272, 2040, 41247, 41326, 195060, 1741, 42370, + 1227, 0, 0, 11413, 0, 0, 5283, 1586, 4978, 0, 1984, 0, 0, 120651, 40984, + 0, 9373, 0, 12916, 6284, 0, 41663, 0, 0, 0, 9237, 9385, 41648, 0, 0, 0, + 41666, 1830, 73783, 2056, 41287, 0, 0, 0, 42219, 0, 0, 41987, 41676, 0, + 120823, 0, 41670, 0, 0, 2796, 55291, 11683, 9902, 74521, 0, 11451, 0, 0, + 42631, 2359, 0, 67844, 74164, 41238, 548, 11405, 13133, 64368, 0, 0, 0, + 397, 43622, 42139, 9547, 9590, 0, 1614, 43661, 64356, 66307, 6651, 1358, + 0, 428, 9620, 1466, 78112, 10982, 118831, 1333, 0, 407, 6425, 0, 74253, + 0, 0, 0, 5804, 11976, 8554, 0, 0, 0, 9057, 42294, 41218, 0, 0, 78137, + 1883, 10952, 8048, 0, 41225, 0, 118955, 0, 0, 0, 4407, 0, 65809, 119074, + 194821, 8448, 68122, 74183, 0, 12675, 12659, 0, 42363, 120624, 194824, + 55273, 10766, 12012, 2386, 64732, 9170, 917821, 9123, 64585, 120500, 0, + 43367, 42051, 0, 4164, 9081, 0, 120569, 42049, 42042, 8709, 0, 0, 120637, + 42419, 0, 42047, 0, 0, 8470, 11807, 65897, 577, 0, 0, 74300, 0, 127308, + 74840, 0, 0, 0, 0, 8736, 1414, 42643, 9683, 43486, 74344, 0, 2536, 0, + 66330, 0, 0, 0, 0, 0, 0, 0, 66317, 917612, 66315, 2106, 0, 11273, 0, + 43004, 7541, 0, 0, 961, 64307, 66324, 64906, 0, 3106, 65917, 41284, 1696, + 0, 891, 12105, 0, 42624, 12802, 3264, 8824, 13268, 43003, 10936, 0, 0, 0, + 0, 0, 0, 2322, 0, 0, 11449, 0, 42868, 41285, 3547, 0, 0, 0, 0, 43216, + 6089, 78682, 0, 120578, 4170, 1029, 0, 127036, 119224, 42374, 0, 744, 0, + 0, 0, 65823, 0, 0, 3551, 0, 0, 4623, 55268, 0, 4598, 0, 65136, 0, 0, 0, + 10851, 0, 6179, 0, 6180, 0, 11952, 120778, 78648, 11972, 78646, 78647, + 78644, 78645, 177, 78643, 6176, 120580, 0, 0, 6177, 9020, 78652, 78653, + 6178, 120249, 120242, 0, 67673, 7518, 8754, 0, 120237, 74551, 43081, 0, + 0, 9136, 120240, 4401, 41280, 0, 8974, 2308, 0, 74149, 0, 2318, 0, 66361, + 8198, 0, 64360, 12601, 42536, 65266, 120827, 74307, 0, 6970, 5404, 43332, + 3667, 7936, 12925, 126989, 6385, 0, 0, 118949, 10874, 65505, 0, 0, 42053, + 2075, 42057, 11083, 42052, 0, 0, 67651, 0, 9665, 0, 0, 13181, 0, 0, 0, 0, + 74148, 0, 0, 120225, 120229, 120224, 74172, 41145, 0, 0, 0, 41148, 8683, + 7594, 127519, 0, 119090, 10869, 43458, 41146, 0, 11441, 0, 3512, 119633, + 0, 8103, 0, 0, 65184, 11780, 41563, 42796, 0, 119106, 41544, 65146, 0, 0, + 0, 0, 19942, 0, 118908, 7988, 10436, 74273, 3271, 73804, 64711, 0, 0, 0, + 0, 3804, 13070, 11557, 42044, 0, 1095, 0, 3599, 0, 0, 0, 8514, 0, 0, 0, + 74346, 66697, 0, 11684, 0, 0, 0, 0, 42043, 43232, 66677, 0, 42046, 78241, + 4036, 0, 0, 0, 194861, 0, 11954, 0, 1450, 12986, 1340, 0, 65441, 0, 0, 0, + 0, 0, 917542, 0, 0, 6539, 0, 0, 0, 194856, 0, 120492, 41190, 3973, + 119365, 4575, 41193, 7982, 429, 0, 0, 0, 194854, 65792, 0, 118968, 6417, + 118918, 78178, 0, 194850, 0, 0, 4919, 10590, 0, 7755, 0, 0, 64548, + 120506, 1621, 10214, 65126, 0, 127004, 0, 12188, 0, 1617, 8050, 0, 5015, + 0, 119174, 42590, 194871, 1756, 78181, 0, 65768, 6352, 41892, 0, 7555, + 13103, 5408, 2817, 1214, 0, 0, 0, 0, 0, 0, 0, 7957, 8689, 64723, 1056, 0, + 74147, 0, 0, 55286, 7073, 65850, 12327, 0, 119028, 0, 0, 0, 2341, 8450, + 8484, 8474, 0, 0, 0, 8461, 0, 12153, 12799, 0, 43709, 43708, 9451, 7571, + 13073, 0, 0, 681, 0, 703, 0, 3272, 8781, 12894, 0, 11709, 0, 74446, 0, 0, + 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, 0, 0, 0, 0, 10039, 0, 0, 5623, 5717, 5776, 0, 0, 0, + 41591, 11036, 65252, 120488, 0, 0, 0, 0, 0, 0, 0, 8887, 0, 7295, 11031, + 0, 43157, 0, 8946, 10348, 10412, 8755, 0, 0, 5718, 13221, 0, 0, 78135, 0, + 0, 8810, 74499, 686, 0, 0, 4619, 118954, 6654, 73769, 74426, 0, 12040, + 65689, 10128, 65118, 0, 119151, 118891, 0, 0, 2401, 68144, 8792, 0, 0, + 65455, 0, 0, 0, 119129, 0, 12886, 0, 66624, 0, 43557, 10300, 10161, + 10396, 74135, 0, 118945, 78118, 73851, 3010, 6441, 78122, 1458, 41475, 0, + 0, 0, 11479, 0, 0, 6350, 12864, 0, 78114, 1061, 64780, 2001, 43111, + 55230, 0, 4052, 0, 7626, 0, 0, 1045, 0, 5631, 41113, 0, 0, 43707, 74127, + 0, 0, 8486, 0, 73758, 2335, 4362, 0, 0, 69221, 1025, 0, 42625, 0, 78084, + 41443, 0, 0, 0, 1774, 1523, 0, 0, 41445, 78236, 0, 8567, 41442, 3988, 0, + 78237, 118910, 0, 65274, 8564, 0, 78238, 127515, 0, 0, 43446, 0, 66513, + 6256, 0, 579, 55218, 10206, 0, 6375, 2673, 0, 11814, 0, 4488, 0, 0, + 68451, 10444, 118846, 0, 11799, 74407, 68466, 4487, 0, 42832, 1032, + 120267, 43450, 78257, 7203, 0, 614, 78191, 0, 120615, 0, 78262, 0, 0, 0, 43121, 0, 0, 0, 1050, 7549, 0, 0, 9314, 0, 0, 120616, 0, 10057, 0, 0, 0, - 66504, 0, 0, 2307, 0, 64333, 0, 0, 73873, 0, 0, 0, 0, 0, 0, 10360, 0, 0, - 0, 440, 0, 13085, 9233, 74216, 0, 0, 0, 0, 66447, 8046, 64963, 65777, - 10125, 74212, 42819, 10910, 0, 1521, 9896, 0, 10487, 0, 12527, 0, 7970, - 0, 0, 0, 65769, 5243, 9849, 5239, 65771, 0, 0, 5237, 0, 0, 10103, 5247, - 4769, 0, 118977, 0, 5764, 0, 0, 3008, 4896, 0, 12087, 0, 0, 41103, 0, - 64565, 4773, 0, 0, 0, 4770, 0, 917567, 8731, 65378, 0, 120619, 9122, 0, - 0, 4774, 3019, 9997, 12834, 0, 9456, 10215, 0, 0, 0, 0, 0, 74776, 4281, - 4768, 0, 41535, 4099, 9017, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 42814, 880, 0, - 0, 0, 0, 0, 10116, 9877, 0, 0, 0, 7095, 0, 0, 120632, 0, 0, 8243, 2427, - 0, 7093, 0, 11585, 0, 0, 0, 12223, 0, 0, 1434, 0, 5637, 11573, 0, 0, 0, - 19951, 0, 0, 0, 0, 64432, 0, 0, 118888, 1156, 8740, 0, 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, 0, 0, 42257, 5696, 120470, 120465, 3862, 9643, 0, 0, - 7634, 0, 9845, 0, 0, 5701, 9722, 41490, 0, 1426, 120474, 0, 0, 0, 74345, - 8571, 194991, 0, 0, 0, 0, 43182, 12184, 0, 42022, 0, 10281, 0, 5650, - 43194, 64712, 0, 0, 990, 5647, 0, 0, 0, 41114, 11477, 5646, 0, 11018, 0, - 3945, 0, 0, 0, 0, 0, 0, 0, 1020, 73763, 0, 0, 5648, 64748, 0, 0, 10205, - 3545, 0, 6984, 0, 74051, 0, 118868, 120458, 2667, 0, 0, 0, 9911, 0, - 65020, 10097, 119166, 0, 0, 118836, 0, 0, 1140, 0, 0, 10159, 0, 0, 8128, - 0, 0, 0, 1815, 19910, 890, 0, 3267, 0, 0, 10123, 0, 4410, 1041, 10576, - 8102, 0, 580, 74232, 0, 0, 0, 0, 0, 19938, 65906, 0, 0, 0, 3298, 5375, - 10142, 0, 8215, 0, 6134, 41246, 64402, 0, 0, 0, 0, 0, 41382, 0, 0, 5173, - 65348, 527, 0, 0, 0, 0, 0, 11915, 0, 0, 10072, 0, 66434, 2329, 42250, 0, - 0, 0, 12245, 119237, 0, 0, 0, 0, 0, 74328, 0, 74769, 0, 0, 9069, 6144, 0, - 0, 73822, 0, 0, 64917, 41521, 118934, 494, 13250, 0, 65098, 0, 956, 0, - 12830, 10462, 73740, 0, 0, 0, 0, 66449, 13263, 0, 0, 13171, 0, 0, 0, 0, - 0, 1044, 41276, 0, 0, 0, 42068, 11795, 0, 0, 0, 0, 42450, 3907, 0, 64526, - 0, 0, 12295, 0, 11475, 0, 3020, 11537, 0, 66441, 0, 0, 0, 0, 1057, 566, - 0, 0, 3016, 42274, 0, 66490, 12921, 66571, 0, 0, 3006, 4620, 0, 0, 0, 0, - 64659, 0, 0, 0, 43333, 68129, 8626, 0, 0, 9090, 65377, 41596, 0, 0, 1698, - 0, 64477, 0, 0, 1053, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 1926, 0, 0, 7898, 8110, 10935, 0, 0, 5830, 0, 64594, 0, 0, 0, 0, 8693, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 119187, 11439, 0, 0, 0, 0, 42313, - 5579, 0, 0, 0, 0, 0, 5578, 41774, 0, 42023, 6234, 5669, 0, 0, 0, 0, 0, 0, - 5583, 0, 0, 42426, 5580, 42276, 2923, 892, 5582, 42465, 41330, 0, 5795, - 65512, 0, 65702, 0, 120801, 65251, 0, 65710, 0, 0, 0, 0, 5370, 0, 0, - 1638, 10966, 10188, 65878, 118848, 0, 0, 0, 0, 8172, 42017, 0, 10844, 0, - 0, 0, 0, 0, 0, 286, 0, 1062, 0, 0, 0, 0, 0, 1070, 64900, 0, 6095, 41865, - 0, 3015, 0, 917763, 5211, 0, 6400, 0, 194983, 0, 8189, 11276, 0, 0, 372, - 0, 0, 118874, 42102, 41585, 0, 0, 42101, 276, 0, 0, 33, 74226, 0, 9007, - 118796, 41588, 66033, 427, 10763, 0, 0, 0, 0, 1031, 6257, 0, 42104, 0, 0, - 2328, 0, 1071, 0, 0, 74848, 0, 0, 0, 1047, 0, 0, 64790, 0, 0, 10651, 0, - 0, 0, 0, 0, 119181, 5711, 41633, 12098, 65571, 9166, 0, 5710, 0, 0, - 65213, 13216, 0, 0, 0, 0, 64611, 41623, 0, 5715, 0, 0, 0, 5712, 2761, - 41620, 68124, 3074, 5722, 0, 8643, 73768, 0, 118906, 2757, 11067, 9718, - 74498, 8910, 10689, 6479, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 118911, 0, 0, 0, - 0, 0, 120010, 0, 8701, 68130, 119616, 120522, 0, 42477, 0, 12123, 4495, - 43569, 0, 0, 0, 64946, 10992, 0, 0, 0, 0, 9318, 120661, 13249, 65679, - 73808, 0, 65457, 42249, 7639, 0, 67845, 42641, 5454, 0, 0, 194997, - 120005, 0, 0, 5084, 0, 0, 119173, 0, 733, 0, 0, 0, 0, 41677, 0, 9218, - 1731, 0, 0, 0, 0, 0, 0, 0, 0, 127018, 0, 5155, 0, 5358, 0, 0, 917767, - 64424, 0, 3840, 64314, 41432, 0, 0, 0, 0, 0, 65943, 0, 3371, 10988, 0, - 8771, 1479, 0, 0, 1109, 11580, 0, 64601, 12205, 0, 0, 64507, 8868, 399, - 0, 74842, 0, 0, 12149, 13088, 551, 0, 10156, 12119, 0, 0, 2544, 65074, 0, - 0, 0, 0, 351, 119149, 0, 0, 0, 0, 74268, 0, 0, 0, 42377, 0, 0, 0, 0, 0, - 9013, 5588, 0, 0, 0, 0, 73960, 5585, 65881, 2549, 74469, 0, 0, 5584, - 8358, 0, 74411, 0, 10919, 0, 7980, 0, 0, 0, 41800, 5589, 0, 2664, 41613, - 5586, 118890, 0, 11356, 0, 0, 0, 0, 0, 42573, 67856, 0, 0, 0, 0, 0, 8135, - 6450, 10055, 0, 0, 0, 0, 5657, 0, 9626, 0, 0, 10179, 5654, 12939, 0, - 120799, 0, 0, 5652, 10945, 0, 0, 0, 3661, 7863, 0, 0, 0, 0, 0, 5659, 0, - 0, 66729, 5655, 0, 42168, 0, 1055, 917628, 0, 66310, 74030, 0, 12146, - 73955, 73956, 11618, 0, 126990, 0, 10272, 10304, 10368, 42518, 594, - 10244, 10248, 10256, 0, 64870, 0, 3467, 0, 0, 3331, 946, 10231, 1495, - 8131, 74330, 0, 9562, 0, 65927, 0, 0, 120155, 0, 64656, 0, 0, 194837, 0, - 5666, 65227, 5318, 0, 0, 9091, 10798, 0, 0, 10186, 0, 7732, 0, 64556, 0, - 0, 5668, 74445, 0, 0, 5670, 0, 0, 11820, 2992, 7826, 5667, 19952, 120807, - 0, 12749, 0, 0, 0, 66496, 4361, 119260, 1306, 9286, 1497, 0, 0, 0, 0, - 3571, 13247, 0, 7973, 66353, 0, 0, 67896, 43192, 0, 0, 553, 120653, 0, 0, - 5829, 0, 4587, 0, 65912, 0, 12746, 0, 0, 119924, 5633, 119927, 0, 0, 0, - 64905, 0, 9512, 0, 12742, 6443, 0, 0, 9135, 0, 0, 0, 0, 0, 0, 0, 12148, - 0, 0, 0, 64256, 0, 11669, 0, 5634, 4524, 0, 0, 0, 118880, 74266, 65182, - 0, 0, 5221, 0, 328, 0, 0, 0, 5636, 0, 5329, 0, 5638, 119918, 7940, 64938, - 43223, 0, 5635, 3373, 2986, 0, 74223, 3437, 0, 6203, 4247, 0, 11920, - 8274, 0, 0, 1657, 119921, 0, 0, 5639, 2954, 5660, 5640, 0, 0, 0, 0, 0, 0, - 41637, 0, 0, 0, 41625, 0, 0, 120713, 11705, 5642, 0, 0, 0, 4356, 11710, - 0, 12051, 0, 0, 5641, 8259, 0, 1058, 0, 67630, 0, 0, 1144, 0, 0, 0, 0, - 73890, 118972, 0, 73734, 0, 5645, 64964, 8652, 2547, 66484, 0, 0, 5608, - 65890, 0, 0, 67621, 119934, 9000, 0, 0, 0, 1865, 0, 5613, 74267, 0, 0, - 5610, 0, 0, 65826, 5612, 0, 10787, 917551, 2997, 0, 5609, 0, 65319, - 119933, 12316, 65376, 2412, 0, 8186, 9807, 74269, 0, 13130, 65874, 0, - 5807, 0, 10030, 5306, 12936, 0, 0, 11704, 0, 0, 10211, 0, 0, 0, 0, 11706, - 9710, 0, 0, 0, 413, 65623, 74237, 0, 9133, 74262, 0, 1042, 0, 64779, - 12171, 119240, 6185, 64776, 4984, 0, 708, 0, 0, 12241, 0, 0, 1308, 0, - 2534, 810, 0, 0, 0, 0, 0, 1917, 3000, 0, 0, 120739, 2364, 0, 74470, - 66618, 65680, 0, 10027, 0, 0, 12337, 120722, 0, 0, 2980, 755, 0, 931, - 13124, 68182, 0, 2748, 0, 0, 65041, 0, 73998, 8730, 0, 0, 119009, 7274, - 119250, 0, 7275, 0, 935, 0, 65840, 377, 42325, 11649, 0, 65253, 64301, 0, - 0, 42341, 65284, 2417, 0, 12884, 19912, 7907, 10768, 0, 194998, 0, 10673, - 119217, 7248, 0, 0, 1781, 5496, 3627, 62, 1649, 0, 964, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 13142, 0, 42415, 66575, 4542, 74037, 43547, 0, 0, 0, 2991, - 4946, 42454, 0, 7949, 0, 0, 11341, 42494, 3073, 65625, 9714, 11692, 0, 0, - 0, 6478, 9898, 0, 65237, 6241, 0, 4877, 0, 6238, 0, 10548, 127049, 4409, - 0, 0, 64798, 0, 5346, 0, 120528, 6237, 5461, 0, 9176, 0, 0, 65231, 65884, - 12678, 0, 0, 11378, 0, 42785, 2408, 3251, 0, 0, 5685, 0, 2461, 11052, - 7091, 5342, 8317, 0, 68163, 5340, 0, 0, 0, 73928, 0, 0, 0, 0, 0, 65482, - 0, 9142, 0, 0, 0, 10938, 0, 118790, 1182, 2542, 4826, 0, 0, 0, 529, 8580, - 0, 0, 10586, 10790, 11987, 66023, 41593, 41207, 0, 0, 41594, 225, 42828, - 0, 0, 0, 64705, 74379, 10721, 0, 3438, 42097, 0, 11084, 3194, 41870, 266, - 0, 0, 41873, 120575, 11324, 0, 0, 8420, 64918, 0, 41871, 41338, 3734, - 7734, 0, 8750, 66605, 66011, 0, 40965, 0, 0, 5161, 10572, 0, 0, 0, 64349, - 7287, 42162, 0, 0, 0, 11948, 0, 12359, 66674, 41369, 1697, 12191, 0, 0, - 7286, 0, 0, 10031, 0, 9870, 0, 8620, 65824, 0, 11938, 0, 7285, 0, 119577, - 0, 0, 0, 41583, 0, 65799, 0, 0, 0, 0, 0, 66199, 0, 3609, 0, 0, 832, - 120693, 120770, 0, 66007, 0, 65703, 0, 0, 0, 5180, 0, 41395, 41530, - 11691, 64773, 0, 74002, 0, 0, 0, 11036, 243, 13200, 0, 6024, 0, 74398, - 10037, 41529, 10648, 8538, 0, 0, 0, 4285, 66195, 0, 4230, 0, 13307, 0, 0, - 7563, 42376, 0, 0, 120512, 0, 0, 214, 0, 0, 0, 65893, 12208, 120488, 0, - 66311, 65589, 0, 2603, 0, 0, 0, 0, 0, 6022, 0, 2884, 0, 11620, 0, 43, 0, - 66453, 1016, 41107, 0, 41121, 3885, 92, 65456, 64608, 0, 74801, 0, 12451, - 0, 0, 0, 12453, 0, 0, 74241, 0, 8890, 12457, 0, 0, 0, 0, 118819, 0, 0, 0, - 66637, 7995, 8759, 0, 0, 12449, 0, 0, 0, 8752, 3197, 4720, 10165, 0, - 119249, 0, 11595, 64893, 0, 120180, 0, 0, 4993, 0, 6168, 10934, 1946, - 741, 0, 5494, 4639, 0, 1990, 66589, 4498, 0, 0, 0, 0, 0, 2960, 73779, 0, - 8969, 0, 0, 0, 0, 2950, 0, 6210, 0, 370, 0, 0, 0, 4953, 0, 0, 0, 0, 0, 0, - 0, 65688, 0, 5063, 3517, 2964, 0, 0, 65094, 74791, 10566, 10144, 66333, - 8252, 729, 66016, 0, 0, 0, 64923, 0, 65208, 9032, 0, 0, 0, 41215, 0, - 65883, 0, 0, 120602, 3761, 0, 0, 0, 0, 12912, 119012, 3850, 0, 0, 0, 0, - 0, 908, 0, 8611, 0, 0, 0, 0, 0, 0, 8978, 120540, 119135, 41586, 10527, 0, - 917848, 3848, 0, 0, 0, 65241, 5336, 0, 0, 663, 0, 10780, 0, 0, 0, 0, 0, - 0, 347, 0, 0, 0, 64675, 41582, 119126, 0, 65579, 12980, 0, 12143, 73733, - 0, 0, 0, 41804, 0, 0, 0, 0, 0, 41584, 10681, 0, 0, 73938, 0, 0, 4800, - 66661, 0, 66306, 64715, 0, 9518, 6609, 10434, 0, 11319, 1097, 0, 917850, - 41730, 0, 0, 0, 0, 65172, 41728, 41721, 0, 0, 0, 41203, 0, 13110, 41726, - 0, 0, 1000, 0, 0, 41140, 1209, 0, 0, 0, 1073, 0, 0, 41138, 0, 0, 0, - 12167, 1115, 41605, 9794, 127062, 127063, 127064, 12237, 127066, 66314, - 6587, 9290, 0, 0, 9231, 0, 2959, 7926, 0, 0, 0, 64398, 0, 119970, 12311, - 0, 0, 118846, 0, 0, 0, 119973, 0, 0, 0, 12290, 0, 0, 0, 42142, 10151, - 8205, 0, 5131, 0, 9627, 0, 0, 0, 0, 1944, 1248, 10148, 0, 119990, 119991, - 12701, 119993, 11308, 119995, 0, 119997, 119998, 65305, 74263, 4031, - 42794, 120003, 7075, 8154, 120006, 120007, 41817, 73934, 42275, 120011, - 120012, 120013, 120014, 120015, 6041, 0, 41899, 0, 8002, 0, 4364, 0, 0, - 64332, 0, 7813, 9064, 119986, 10124, 7526, 8601, 7281, 0, 7279, 12041, - 1418, 10885, 12673, 0, 0, 9660, 0, 13012, 4571, 0, 0, 0, 12078, 2970, 0, - 10933, 0, 0, 0, 0, 0, 41599, 0, 0, 0, 12950, 0, 3486, 0, 0, 4239, 0, 0, - 66511, 0, 2637, 64629, 8460, 127053, 8476, 0, 0, 0, 0, 65673, 1019, 0, - 4148, 0, 12289, 0, 4316, 0, 13119, 0, 5412, 66243, 10744, 0, 73864, 0, - 41734, 8206, 74081, 9163, 3286, 9072, 5867, 13302, 7622, 0, 41736, 0, - 41731, 0, 9483, 5416, 0, 119593, 10817, 0, 41539, 0, 0, 73963, 41855, - 41867, 65564, 11277, 65892, 11536, 10620, 0, 12210, 0, 73932, 5498, - 73942, 41536, 0, 0, 0, 3459, 8997, 0, 0, 0, 0, 0, 0, 66377, 0, 0, 0, 0, - 3161, 295, 0, 0, 0, 0, 0, 9016, 0, 63903, 63902, 63901, 0, 3971, 0, - 73972, 2952, 0, 11038, 10901, 63900, 63899, 63898, 0, 667, 12332, 63887, - 6086, 41722, 0, 5172, 0, 0, 4159, 0, 0, 9815, 63884, 19934, 63882, 41198, - 8555, 63878, 63877, 42460, 6050, 0, 63881, 63872, 0, 42421, 0, 41723, - 63875, 63874, 11460, 7432, 1913, 41913, 63852, 0, 0, 42348, 0, 74841, - 446, 41911, 0, 63851, 63850, 41910, 0, 63846, 2972, 12932, 7262, 0, - 63849, 63848, 63847, 0, 0, 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, 0, 0, - 10785, 0, 119170, 4557, 0, 9159, 10171, 13125, 63860, 5540, 63858, 63865, - 281, 13242, 63862, 74154, 0, 5536, 65568, 63857, 1388, 74169, 0, 1077, 0, - 65099, 11531, 0, 0, 0, 0, 0, 42773, 0, 0, 0, 119220, 0, 3663, 0, 1112, - 119122, 8686, 0, 5334, 65081, 0, 74778, 0, 11077, 0, 6509, 0, 5327, 0, - 19907, 63869, 3478, 7583, 7679, 2903, 0, 3001, 1158, 8745, 0, 73748, - 63866, 0, 1915, 4846, 0, 66371, 118984, 42105, 2990, 120128, 805, 120130, - 120125, 12070, 8760, 1117, 118987, 12212, 120123, 65174, 42357, 63835, - 63834, 0, 0, 12225, 63838, 63837, 0, 0, 63833, 6042, 66360, 8083, 0, 0, - 63821, 63820, 63819, 63818, 0, 5227, 9047, 63822, 0, 6091, 0, 10691, 560, - 5643, 8226, 119578, 63812, 63811, 63810, 63809, 5542, 63815, 63814, - 63813, 6047, 1597, 120143, 780, 206, 0, 4936, 65147, 8168, 63930, 0, - 1093, 9882, 63934, 63933, 63932, 917554, 63929, 3546, 1605, 0, 9806, - 65566, 0, 8400, 11343, 63920, 0, 63926, 2984, 5968, 9287, 0, 4618, 0, 0, - 13169, 5290, 5283, 1695, 10743, 1088, 63825, 7268, 1084, 1085, 63829, - 1083, 10131, 7283, 0, 63970, 0, 1092, 4754, 7273, 5252, 0, 0, 0, 0, 0, - 11809, 0, 0, 0, 2965, 7258, 8808, 0, 1089, 4187, 63937, 42119, 42120, 0, - 940, 5787, 10099, 63938, 0, 74494, 12463, 2994, 0, 0, 0, 9664, 0, 0, 0, - 0, 74343, 0, 0, 660, 10127, 666, 9022, 5532, 0, 5533, 0, 0, 6118, 222, - 979, 3884, 0, 74151, 120445, 6502, 0, 127118, 0, 63951, 12465, 0, 0, 0, - 63946, 1707, 63924, 12461, 63950, 63897, 63948, 63947, 63945, 6038, - 63943, 63942, 64685, 63895, 65838, 0, 7776, 0, 0, 0, 120444, 0, 801, - 43165, 1690, 63919, 63918, 63917, 13277, 63893, 0, 120638, 9906, 5486, - 2334, 0, 63916, 5483, 63914, 120610, 63911, 5484, 63909, 63908, 2539, 0, - 63913, 5485, 0, 195060, 9061, 5534, 10672, 4502, 0, 253, 0, 0, 0, 42854, - 0, 0, 11530, 0, 0, 0, 0, 0, 10474, 0, 13257, 42354, 0, 0, 0, 195065, 0, - 8413, 0, 0, 5693, 7272, 0, 13209, 64470, 65831, 0, 195063, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 66608, 3111, 41863, 8804, 66607, 0, 7270, 0, 66606, 6628, - 1076, 41305, 1436, 0, 0, 0, 63982, 10221, 12807, 63907, 63906, 1598, - 63904, 0, 0, 41729, 4423, 1307, 0, 10515, 41589, 0, 0, 6218, 0, 1430, 0, - 0, 120606, 119365, 5413, 7619, 3255, 3493, 74032, 11549, 10735, 0, 73937, - 10517, 0, 0, 10990, 65073, 5167, 4481, 3771, 0, 2710, 0, 0, 41724, 0, - 43073, 41690, 12479, 0, 0, 0, 0, 119659, 1628, 0, 0, 0, 65262, 63854, - 10783, 42315, 0, 63855, 120683, 0, 0, 5339, 74323, 0, 13004, 0, 4457, 0, - 0, 0, 0, 5684, 8678, 10914, 0, 5689, 65807, 0, 120617, 12633, 0, 0, - 65183, 5688, 11926, 6033, 6310, 5686, 0, 0, 0, 120647, 0, 50, 0, 9871, 0, - 0, 0, 0, 0, 66468, 0, 13259, 4448, 0, 0, 0, 0, 67853, 0, 10640, 0, 1151, - 0, 0, 0, 0, 195050, 0, 0, 0, 0, 12501, 64604, 0, 11527, 118870, 8812, 0, - 11538, 8673, 12650, 11020, 0, 66467, 10839, 8087, 0, 0, 9894, 0, 0, 0, - 4636, 0, 118985, 8053, 0, 0, 0, 0, 120495, 0, 0, 12277, 194627, 11995, - 194626, 0, 12158, 0, 8741, 10197, 0, 0, 0, 6531, 0, 0, 473, 0, 0, 0, - 1873, 1087, 0, 0, 0, 0, 66439, 43218, 0, 194716, 7237, 12504, 74282, 0, - 0, 0, 9489, 0, 0, 4384, 74220, 195055, 0, 917561, 13295, 43191, 0, 0, - 1154, 3857, 1205, 0, 0, 13100, 12958, 120706, 74168, 0, 0, 4421, 10592, - 0, 495, 0, 41712, 7983, 0, 0, 0, 8494, 0, 7654, 41710, 4196, 0, 437, - 41709, 73772, 0, 0, 9465, 13290, 119180, 4997, 64306, 0, 0, 4999, 194642, - 0, 0, 4711, 120769, 0, 2739, 0, 8044, 74834, 0, 41789, 0, 10809, 0, 0, 0, - 1779, 6600, 6601, 41543, 5325, 642, 64187, 13058, 0, 0, 0, 0, 13229, 0, - 10575, 0, 0, 0, 41791, 1104, 0, 0, 10655, 0, 0, 0, 0, 1082, 195049, 8428, - 0, 0, 0, 0, 0, 10167, 0, 12993, 8049, 41548, 0, 6458, 0, 0, 4761, 63828, - 4766, 64623, 1273, 194653, 0, 118876, 0, 6912, 1313, 7033, 10483, 0, - 41545, 0, 0, 0, 0, 0, 0, 0, 3484, 74337, 0, 0, 8503, 5122, 41527, 0, - 66320, 0, 0, 0, 0, 41537, 0, 8303, 8282, 11817, 0, 10003, 73859, 65904, - 194663, 1686, 0, 0, 11467, 3664, 65921, 64299, 194664, 0, 0, 4324, 126, - 42246, 119152, 0, 0, 65926, 7744, 194636, 74277, 74302, 0, 0, 6966, 0, - 8136, 0, 65600, 1633, 0, 0, 4762, 1103, 0, 0, 4765, 0, 13078, 0, 4760, - 63827, 0, 10871, 43199, 1102, 0, 0, 0, 0, 11546, 74794, 337, 0, 42591, - 8627, 12279, 1111, 0, 0, 4707, 0, 10143, 7883, 127081, 7880, 4522, 8645, - 5704, 13010, 0, 8304, 0, 0, 119575, 0, 0, 66654, 0, 0, 0, 13008, 0, 4385, - 0, 13011, 0, 0, 119161, 13009, 160, 2677, 0, 0, 41793, 65763, 74221, - 120141, 41792, 42770, 0, 65762, 118829, 64573, 5709, 0, 194638, 0, 0, 0, - 1079, 3867, 5708, 0, 0, 0, 5706, 64768, 5705, 8791, 4005, 0, 10237, - 10991, 0, 917579, 9173, 917581, 917580, 13170, 65942, 917577, 42605, - 120765, 917570, 917573, 917572, 10058, 0, 74867, 194654, 127078, 3339, - 11448, 1106, 917591, 917590, 917593, 3340, 917587, 917586, 917589, - 917588, 917583, 10605, 1309, 63966, 120743, 1754, 127075, 13246, 864, 0, - 118926, 8972, 0, 7849, 120092, 0, 13240, 195068, 5192, 4338, 0, 10948, - 917601, 13199, 120169, 1236, 13208, 13261, 13189, 13188, 120164, 0, 7440, - 0, 120153, 9553, 1590, 63777, 63776, 13178, 63782, 63781, 63780, 63779, - 1583, 0, 13260, 4550, 0, 64205, 0, 0, 41522, 0, 0, 0, 0, 11354, 0, 0, - 42795, 0, 119195, 11394, 194646, 13236, 13272, 13194, 1334, 0, 4479, - 1178, 65586, 120663, 66681, 119193, 4601, 0, 0, 0, 0, 0, 0, 0, 63787, + 66504, 0, 0, 2307, 0, 64333, 0, 0, 73873, 0, 0, 0, 0, 0, 0, 10360, 6746, + 0, 0, 440, 0, 13085, 9233, 74216, 0, 0, 68612, 0, 66447, 8046, 64963, + 65777, 10125, 74212, 42819, 10910, 0, 1521, 9896, 0, 10487, 0, 12527, 0, + 7970, 0, 0, 0, 65769, 5243, 9849, 5239, 65771, 0, 0, 5237, 0, 0, 10103, + 5247, 4769, 0, 118977, 12873, 5764, 0, 0, 3008, 4896, 0, 12087, 0, 55231, + 41103, 0, 64565, 4773, 0, 0, 0, 4770, 0, 917567, 8731, 65378, 0, 120619, + 9122, 0, 0, 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, 0, 0, 0, 10116, 9877, 0, 0, 0, 7095, 0, 0, + 6778, 0, 78090, 8243, 2427, 0, 7093, 0, 11585, 195003, 9962, 0, 12223, 0, + 0, 1434, 0, 5637, 11573, 0, 0, 0, 19951, 0, 78121, 0, 0, 55283, 0, 0, + 74437, 1156, 8740, 0, 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, 0, 0, 42257, 5696, + 120470, 120465, 3862, 9643, 0, 0, 7634, 65167, 9845, 0, 0, 5701, 9722, + 41490, 0, 1426, 68217, 0, 68447, 42204, 55270, 8571, 194991, 0, 0, 78818, + 0, 43182, 12184, 0, 42022, 0, 10281, 0, 5650, 43194, 64712, 10744, 0, + 990, 5647, 0, 7387, 78734, 41114, 11477, 5646, 12879, 11018, 0, 3945, 0, + 0, 0, 0, 0, 78212, 0, 1020, 73763, 0, 78731, 5648, 64748, 194910, 0, + 10205, 3545, 0, 6984, 0, 74051, 0, 43242, 120458, 2667, 0, 0, 0, 9911, 0, + 65020, 10097, 119166, 0, 0, 118836, 0, 78427, 1140, 78426, 0, 10159, 0, + 0, 8128, 0, 0, 917965, 1815, 19910, 890, 0, 3267, 0, 0, 10123, 0, 4410, + 1041, 10576, 6354, 0, 580, 74232, 0, 0, 0, 0, 0, 19938, 65906, 0, 0, 0, + 3298, 5375, 10142, 0, 8215, 0, 6134, 41246, 64402, 0, 0, 0, 0, 0, 41382, + 0, 0, 5173, 65348, 527, 0, 0, 0, 0, 78797, 11915, 0, 0, 10072, 0, 42695, + 2329, 42250, 0, 0, 0, 12245, 9939, 0, 0, 0, 0, 0, 74328, 119576, 74769, + 0, 119087, 9069, 6144, 0, 0, 73822, 0, 0, 64917, 41521, 118934, 494, + 13250, 0, 65098, 6364, 956, 0, 12830, 10462, 73740, 0, 0, 0, 0, 66449, + 13263, 74281, 69217, 13171, 0, 0, 0, 0, 0, 1044, 41276, 0, 0, 0, 42068, + 11795, 0, 0, 0, 0, 42450, 3907, 0, 64526, 0, 68197, 12295, 0, 11475, 0, + 3020, 11537, 0, 66441, 0, 0, 0, 0, 1057, 566, 42696, 0, 3016, 42274, + 43464, 66490, 12921, 66571, 78472, 0, 3006, 4620, 127237, 0, 0, 0, 64659, + 0, 0, 55253, 6357, 6362, 8626, 0, 0, 9090, 65377, 41596, 0, 0, 1698, 0, + 64477, 0, 0, 1053, 0, 78269, 0, 0, 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, 0, 0, 0, 6359, 0, 43471, 0, 0, 0, + 127274, 0, 6358, 6361, 1926, 6356, 0, 7898, 8110, 10935, 0, 43633, 5830, + 0, 43685, 0, 0, 0, 0, 8693, 78611, 119565, 0, 0, 0, 127257, 0, 0, 0, 0, + 0, 0, 0, 119187, 11439, 78868, 0, 0, 78869, 42313, 5579, 0, 0, 0, 0, 0, + 5578, 41774, 0, 42023, 6234, 5669, 0, 0, 0, 0, 127506, 68202, 5583, 0, 0, + 42426, 5580, 42276, 2923, 892, 5582, 42465, 41330, 194987, 5795, 65512, + 119006, 65702, 0, 120801, 65251, 0, 65710, 0, 0, 67672, 0, 5370, 0, + 194986, 1638, 10966, 10188, 65878, 118848, 0, 0, 0, 0, 8172, 42017, 0, + 10844, 0, 0, 0, 6374, 0, 0, 286, 78023, 1062, 0, 119999, 0, 7395, 0, + 1070, 64900, 0, 6095, 41865, 0, 3015, 0, 917763, 5211, 0, 6400, 0, + 194983, 0, 8189, 11276, 0, 0, 372, 0, 0, 118874, 42102, 41585, 0, 0, + 42101, 276, 78402, 0, 33, 74226, 0, 9007, 118796, 41588, 66033, 427, + 10763, 118819, 0, 0, 0, 1031, 6257, 0, 42104, 0, 0, 2328, 0, 1071, 0, 0, + 74848, 0, 0, 0, 1047, 0, 0, 64790, 0, 0, 10651, 0, 0, 0, 0, 0, 119181, + 5711, 41633, 12098, 65571, 9166, 0, 5710, 0, 6790, 65168, 13216, 0, 0, 0, + 0, 64611, 41623, 195001, 5715, 0, 0, 0, 5712, 2761, 41620, 68124, 3074, + 5722, 0, 8643, 73768, 0, 118906, 2757, 11067, 9718, 74498, 8910, 10689, + 6479, 0, 0, 0, 78607, 0, 0, 0, 0, 0, 0, 118911, 0, 0, 0, 0, 0, 120010, 0, + 8701, 68130, 119616, 120522, 0, 42477, 0, 12123, 4495, 43569, 0, 0, 0, + 64946, 10992, 0, 120009, 0, 0, 9318, 120661, 13249, 65679, 73808, 0, + 65457, 42249, 7639, 43995, 67845, 42641, 5454, 0, 0, 194997, 120005, 0, + 0, 5084, 0, 0, 118861, 0, 733, 917876, 78014, 78436, 78435, 41677, 0, + 9218, 1731, 0, 0, 0, 0, 0, 0, 0, 120001, 127018, 0, 5155, 0, 5358, 0, 0, + 917767, 64424, 0, 3840, 64314, 41432, 0, 0, 68430, 119116, 43253, 65943, + 0, 3371, 10988, 0, 8771, 1479, 0, 0, 1109, 11580, 0, 64601, 12205, 0, 0, + 64507, 8868, 399, 0, 74842, 0, 0, 12149, 13088, 551, 0, 10156, 12119, 0, + 0, 2544, 65074, 0, 0, 0, 78011, 351, 119149, 0, 0, 55229, 0, 74268, 0, 0, + 0, 42377, 0, 0, 0, 0, 0, 9013, 4054, 0, 0, 0, 0, 73960, 5585, 65881, + 2549, 74469, 0, 0, 5584, 8358, 0, 74411, 0, 10919, 0, 7980, 0, 0, 0, + 41800, 5589, 0, 2664, 41613, 5586, 118890, 0, 11356, 0, 0, 43452, 78609, + 0, 42573, 67856, 0, 78129, 0, 0, 0, 8135, 6450, 10055, 77996, 0, 0, 0, + 5657, 0, 9626, 0, 77994, 10179, 5654, 12939, 0, 120799, 0, 0, 5652, + 10945, 0, 66486, 0, 3661, 7863, 0, 0, 0, 74509, 0, 5659, 0, 0, 66729, + 5655, 0, 42168, 0, 1055, 917628, 0, 66310, 74030, 0, 12146, 73955, 73956, + 11618, 0, 126990, 0, 10272, 10304, 10368, 42518, 594, 10244, 10248, 7407, + 0, 64870, 0, 3467, 0, 0, 3331, 946, 10231, 1495, 8131, 74330, 0, 9562, + 69222, 65927, 0, 0, 120155, 69769, 64656, 0, 0, 194837, 0, 5666, 65227, + 5318, 63994, 0, 9091, 10798, 0, 917979, 10186, 0, 7732, 0, 64556, 0, 0, + 5668, 74445, 0, 0, 5670, 0, 0, 11820, 2992, 7826, 5667, 19952, 120807, 0, + 12749, 0, 0, 0, 66496, 4361, 119260, 1306, 9286, 1497, 0, 0, 0, 0, 3571, + 13247, 0, 7973, 66353, 68435, 78278, 67896, 43192, 0, 78265, 553, 120653, + 0, 0, 5829, 0, 4587, 78285, 65912, 0, 12746, 0, 0, 119924, 5633, 119927, + 0, 0, 0, 64905, 0, 9512, 0, 12742, 6443, 0, 0, 9135, 0, 41564, 0, 55219, + 0, 0, 0, 12148, 0, 78297, 0, 64256, 0, 11669, 0, 5634, 4524, 0, 127270, + 0, 118880, 2425, 65182, 0, 43636, 5221, 78410, 328, 0, 0, 69815, 5636, 0, + 5329, 0, 5638, 119918, 7940, 64938, 43223, 0, 5635, 3373, 2986, 78292, + 74223, 3437, 78291, 6203, 4247, 0, 11920, 8274, 0, 0, 1657, 41561, 78299, + 78295, 5639, 2954, 5660, 5640, 78303, 0, 78300, 42227, 0, 0, 41637, + 67872, 0, 78310, 41625, 43362, 78309, 120713, 11705, 5642, 0, 5486, 0, + 4356, 11710, 0, 12051, 0, 0, 5641, 8259, 0, 1058, 0, 67630, 0, 0, 1144, + 78750, 0, 42228, 0, 73890, 118972, 0, 65322, 0, 5645, 64964, 8652, 2547, + 66484, 43634, 0, 5608, 65890, 0, 0, 67621, 119934, 9000, 0, 0, 0, 1865, + 0, 5613, 74267, 0, 0, 5610, 0, 0, 65826, 2069, 0, 10787, 43999, 2997, 0, + 5609, 78316, 65319, 78313, 12316, 65376, 2412, 0, 8186, 9807, 74269, 0, + 13130, 65874, 0, 5807, 0, 10030, 5306, 12936, 0, 0, 11704, 0, 0, 10211, + 0, 0, 0, 0, 11706, 9710, 0, 0, 0, 413, 65623, 74237, 0, 9133, 74262, 0, + 1042, 0, 64779, 12171, 119240, 6185, 64776, 4984, 0, 708, 11391, 0, + 12241, 0, 0, 1308, 0, 2534, 810, 0, 0, 0, 0, 0, 1917, 3000, 0, 0, 120739, + 2364, 0, 74470, 66618, 65680, 0, 10027, 0, 0, 12337, 120722, 0, 0, 2980, + 755, 69774, 931, 13124, 68182, 6363, 2748, 0, 0, 65041, 0, 44011, 8730, + 0, 0, 78312, 7274, 119250, 0, 7275, 78304, 935, 0, 65840, 377, 42325, + 11649, 0, 65253, 64301, 0, 78308, 42341, 65284, 2417, 0, 12884, 19912, + 7907, 10768, 0, 194998, 0, 10673, 119217, 7248, 0, 0, 1781, 5496, 3627, + 62, 1649, 0, 964, 0, 0, 78226, 0, 127512, 0, 0, 0, 0, 43689, 0, 13142, + 78812, 42415, 66575, 4542, 74037, 43547, 0, 0, 7677, 2991, 4946, 42454, + 0, 7949, 0, 0, 11341, 42494, 3073, 65625, 9714, 11692, 4657, 0, 0, 6478, + 9898, 43673, 65237, 6241, 0, 4877, 0, 6238, 0, 10548, 127049, 4409, 0, 0, + 64798, 0, 5346, 0, 120528, 6237, 4874, 0, 9176, 0, 0, 65231, 65884, + 12678, 78748, 118912, 11378, 44018, 42785, 2408, 3251, 0, 0, 5685, 0, + 2461, 11052, 7091, 5342, 8317, 0, 68163, 5340, 0, 0, 43635, 73928, + 127529, 0, 0, 0, 0, 65482, 0, 9142, 0, 0, 0, 10938, 0, 118790, 1182, + 2542, 4826, 0, 0, 0, 529, 8580, 0, 0, 10586, 10790, 10839, 66023, 41593, + 41207, 0, 0, 41594, 225, 42828, 0, 0, 0, 11376, 74379, 10721, 67664, + 3438, 42097, 127267, 11084, 3194, 41870, 266, 78305, 0, 41873, 120575, + 11324, 0, 0, 8420, 64918, 0, 41871, 41338, 3734, 7734, 43683, 8750, + 66605, 66011, 0, 40965, 0, 0, 5161, 10572, 0, 0, 0, 64349, 7287, 42162, + 127552, 0, 0, 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, 0, 0, 0, 0, 78169, 66199, 0, + 3609, 68624, 0, 832, 120693, 120770, 78473, 66007, 78471, 65703, 0, 0, + 42732, 5180, 0, 41395, 41530, 11691, 64773, 0, 74002, 0, 0, 0, 6348, 243, + 13200, 0, 6024, 0, 9979, 10037, 41529, 10648, 8538, 43687, 0, 0, 4285, + 66195, 0, 4230, 0, 13307, 43256, 0, 7563, 42376, 0, 68442, 120512, 0, 0, + 214, 0, 0, 78466, 65893, 12208, 9973, 0, 66311, 65589, 0, 2603, 0, 0, 0, + 0, 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, 0, 0, + 74241, 0, 6791, 12457, 78268, 0, 0, 0, 78279, 0, 0, 0, 66637, 7995, 8759, + 43421, 78277, 12449, 0, 0, 0, 8752, 3197, 4720, 10165, 0, 119249, 0, + 11595, 64893, 0, 43435, 0, 0, 4993, 0, 6168, 10934, 1946, 741, 0, 5494, + 4639, 0, 1990, 66589, 4498, 78664, 119183, 0, 0, 0, 2960, 73779, 0, 8969, + 0, 43424, 127059, 0, 2950, 0, 6210, 65753, 370, 0, 0, 0, 4953, 0, 0, 0, + 0, 69230, 0, 0, 65688, 0, 5063, 3517, 2964, 43663, 917762, 6344, 74791, + 10566, 10144, 66333, 8252, 729, 66016, 78253, 0, 0, 64923, 0, 43669, + 9032, 78263, 78264, 0, 41215, 0, 65883, 0, 0, 120602, 3761, 0, 0, 0, 0, + 12912, 119012, 3850, 0, 0, 0, 0, 0, 908, 0, 8611, 0, 0, 0, 43691, 41197, + 0, 8978, 120540, 119135, 41586, 10527, 0, 917848, 3848, 78739, 194937, + 127536, 65241, 5336, 0, 0, 663, 0, 10780, 0, 0, 78767, 0, 0, 68193, 347, + 0, 0, 78775, 64675, 41582, 78774, 78744, 65579, 12980, 78769, 12143, + 73733, 78512, 0, 43441, 41804, 78523, 0, 78525, 0, 0, 41584, 10681, 0, 0, + 73938, 0, 0, 4800, 66661, 0, 66306, 64715, 78534, 9518, 6609, 10434, 0, + 11319, 1097, 0, 917850, 41730, 0, 0, 73847, 78761, 65172, 41728, 41721, + 0, 0, 0, 41203, 0, 13110, 41726, 0, 0, 1000, 0, 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, 0, 78796, + 78798, 78794, 78795, 68434, 78793, 66670, 0, 0, 12290, 0, 0, 0, 42142, + 9968, 8205, 0, 5131, 0, 9627, 78536, 78542, 78535, 0, 1944, 1248, 10148, + 0, 119990, 119991, 12701, 78376, 11308, 119995, 0, 119997, 119998, 65305, + 74263, 4031, 42794, 120003, 7075, 8154, 120006, 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, 0, 13012, 4571, 0, 0, 0, + 12078, 2970, 0, 10933, 0, 77870, 0, 0, 0, 41599, 0, 0, 0, 12950, 0, 3486, + 0, 0, 4239, 0, 0, 66511, 0, 2637, 64629, 8460, 127053, 8476, 0, 0, 0, 0, + 65673, 1019, 78495, 4148, 0, 12289, 0, 4316, 0, 13119, 0, 5412, 66243, + 9935, 0, 73864, 0, 41734, 8206, 74081, 9163, 3286, 9072, 5867, 13302, + 7622, 0, 41736, 0, 41731, 0, 7400, 5416, 68663, 118924, 10817, 0, 41539, + 0, 0, 73963, 41855, 41867, 65564, 11277, 65892, 11536, 10620, 0, 12210, + 66030, 73932, 5498, 73942, 41536, 0, 68204, 0, 3459, 8997, 0, 0, 0, 0, 0, + 0, 66377, 69781, 0, 0, 78511, 3161, 295, 120207, 0, 0, 0, 78742, 9016, + 43454, 63903, 63902, 43641, 0, 3971, 0, 73972, 2952, 78765, 11038, 10901, + 63900, 63899, 63898, 0, 667, 12332, 63887, 6086, 41722, 0, 5172, 0, 0, + 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, 0, 0, 42348, 0, 6752, 446, 41911, 0, 63851, 63850, + 41910, 0, 63846, 2972, 12932, 7262, 0, 63849, 63848, 63847, 0, 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, 0, 65099, 11531, + 5834, 0, 0, 0, 0, 42773, 0, 0, 0, 119220, 0, 3663, 0, 1112, 119122, 8686, + 0, 5334, 65081, 43249, 74778, 0, 11077, 0, 6509, 0, 5327, 0, 19907, + 63869, 3478, 7583, 7679, 2903, 0, 3001, 1158, 8745, 0, 73748, 63866, 0, + 1915, 4846, 0, 66371, 118984, 42105, 2990, 120128, 805, 69238, 120125, + 12070, 8760, 1117, 118987, 12212, 120123, 65174, 42357, 63835, 63834, 0, + 78240, 12225, 63838, 63837, 0, 0, 63833, 6042, 66360, 8083, 0, 0, 63821, + 63820, 63819, 63818, 0, 5227, 9047, 63822, 0, 6091, 0, 10691, 560, 5643, + 8226, 119578, 63812, 63811, 63810, 63809, 5542, 63815, 63814, 63813, + 6047, 1597, 120143, 780, 206, 77925, 4936, 65147, 8168, 63930, 2076, + 1093, 9882, 63934, 2082, 63932, 917554, 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, 0, 1092, 4754, 7273, 5252, + 44016, 43627, 0, 0, 7408, 11809, 0, 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, 120445, 6502, 0, 127118, 0, 63951, 12465, 0, 0, 0, 63946, 1707, + 63924, 12461, 63950, 63897, 63948, 63947, 63945, 6038, 63943, 63942, + 64685, 63895, 65838, 0, 7776, 0, 0, 0, 120444, 78172, 801, 43165, 1690, + 63919, 63918, 63917, 13277, 43659, 12951, 120638, 9906, 2054, 2334, + 78515, 63916, 5483, 63914, 120610, 63911, 5484, 63909, 63908, 2539, 0, + 43980, 5485, 0, 42697, 9061, 5534, 10672, 4502, 0, 253, 0, 68208, 0, + 42854, 78393, 0, 11530, 0, 68668, 0, 0, 0, 10474, 43426, 13257, 42354, 0, + 0, 0, 195065, 0, 8413, 0, 0, 5693, 7272, 0, 13209, 64470, 65831, 78460, + 195063, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66608, 3111, 41863, 8804, 66607, 0, + 7270, 0, 66606, 6628, 1076, 7433, 1436, 73844, 55226, 0, 63982, 7393, + 12807, 43413, 63906, 1598, 63904, 0, 0, 41729, 4423, 1307, 0, 10515, + 41589, 0, 0, 6218, 0, 1430, 0, 0, 120606, 78754, 5413, 7619, 3255, 3493, + 74032, 11549, 10735, 41743, 73937, 6801, 0, 4518, 10990, 65073, 5167, + 4481, 3771, 0, 2710, 0, 69243, 41724, 0, 43073, 41690, 12479, 0, 0, 0, 0, + 119659, 1628, 0, 0, 0, 65262, 6333, 10783, 42315, 0, 63855, 120683, 0, 0, + 5339, 74323, 0, 13004, 0, 4457, 0, 0, 0, 0, 5684, 8678, 10914, 0, 5689, + 65807, 0, 68464, 12633, 12870, 78521, 65183, 5688, 11926, 6033, 6310, + 5686, 0, 74251, 0, 120647, 0, 50, 10558, 9871, 0, 43655, 0, 0, 0, 66468, + 0, 13259, 4448, 0, 0, 0, 0, 67853, 0, 10640, 0, 1151, 0, 917607, 0, + 127079, 195050, 0, 0, 0, 0, 12501, 64604, 0, 11527, 118870, 8812, 0, + 11538, 8673, 12650, 11020, 0, 66467, 2105, 8087, 78163, 0, 9894, 0, 0, 0, + 4636, 55262, 78513, 4515, 2382, 0, 127055, 0, 120495, 0, 0, 12277, + 194627, 11995, 194626, 0, 12158, 0, 8741, 10197, 0, 0, 0, 6531, 0, 0, + 473, 43415, 0, 0, 1873, 1087, 0, 0, 0, 78527, 66439, 43218, 0, 194716, + 7237, 12504, 74282, 0, 0, 0, 9489, 0, 0, 4384, 74220, 195055, 2058, + 917561, 13295, 43191, 0, 0, 1154, 3857, 1205, 0, 0, 13100, 12958, 120706, + 74168, 0, 0, 4421, 10592, 0, 495, 0, 41712, 7983, 0, 120779, 0, 6347, 0, + 7654, 41710, 4196, 0, 437, 41709, 73772, 0, 0, 9465, 13290, 119180, 4997, + 64306, 0, 0, 4999, 194642, 0, 0, 4711, 120769, 0, 2739, 0, 8044, 74834, + 0, 41789, 0, 10809, 0, 0, 0, 1779, 6600, 6601, 41543, 5325, 642, 64187, + 13058, 120449, 12875, 0, 0, 13229, 0, 10575, 43399, 0, 0, 41791, 1104, 0, + 0, 10655, 0, 0, 0, 0, 1082, 195049, 8428, 6569, 0, 0, 0, 0, 6783, 0, + 12993, 8049, 41548, 44021, 6458, 0, 0, 4761, 63828, 4766, 64623, 1273, + 43407, 0, 118876, 195045, 6912, 1313, 6322, 10483, 0, 41545, 0, 0, 0, 0, + 0, 0, 78624, 3484, 74337, 0, 0, 8503, 5122, 41527, 0, 66320, 0, 0, 0, 0, + 41537, 0, 8303, 8282, 11817, 73857, 10003, 73859, 65904, 194663, 1686, 0, + 78406, 11467, 3664, 65921, 64299, 194664, 0, 0, 4324, 126, 42246, 119152, + 0, 74378, 65926, 7744, 194636, 74277, 74302, 78052, 0, 6966, 0, 8136, 0, + 65600, 1633, 0, 0, 4762, 1103, 0, 0, 4765, 0, 13078, 0, 4760, 63827, + 2050, 10871, 43199, 1102, 0, 42236, 0, 194667, 11546, 74794, 337, 0, + 42591, 8627, 12279, 1111, 0, 0, 4707, 68206, 10143, 7883, 127081, 7880, + 4522, 8645, 5704, 13010, 0, 8304, 0, 0, 119575, 0, 0, 66654, 0, 0, 0, + 13008, 0, 4385, 0, 13011, 0, 0, 119161, 13009, 160, 2677, 0, 0, 41793, + 65763, 74221, 120141, 41792, 42770, 0, 65762, 118829, 64573, 5709, 0, + 194638, 0, 0, 0, 1079, 3867, 5708, 0, 0, 0, 5706, 64768, 5705, 8791, + 4005, 0, 10237, 10991, 0, 43459, 9173, 917581, 917580, 13170, 65942, + 917577, 42605, 120765, 917570, 68647, 917572, 10058, 0, 74867, 194654, + 127078, 3339, 11448, 1106, 917591, 917590, 917593, 3340, 917587, 917586, + 917589, 917588, 120541, 10605, 1309, 63966, 120743, 1754, 127075, 13246, + 864, 0, 118926, 8972, 0, 7849, 120092, 0, 13240, 195068, 5192, 4338, 0, + 10948, 917601, 13199, 120169, 1236, 13208, 13261, 13189, 13188, 120164, + 0, 7440, 0, 120153, 9553, 1590, 63777, 63776, 13178, 63782, 63781, 63780, + 63779, 1583, 0, 13260, 4550, 0, 64205, 0, 0, 41522, 0, 0, 0, 0, 11354, 0, + 0, 42795, 0, 119195, 11394, 194646, 13236, 13272, 13194, 1334, 0, 4479, + 1178, 65586, 120663, 66681, 119193, 4601, 0, 0, 0, 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, 0, 0, 0, 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, 0, 41930, 63805, 63804, 63803, 63801, 41082, 8140, 63798, 6260, - 0, 0, 119225, 63793, 11988, 3898, 0, 10201, 12238, 63795, 42358, 10367, - 12521, 10431, 42114, 41932, 1068, 0, 12523, 12945, 0, 0, 7950, 10804, - 63771, 42787, 4386, 12224, 6973, 2793, 12475, 0, 0, 63769, 9530, 0, - 12232, 13135, 8596, 5681, 63762, 4595, 63760, 792, 0, 64803, 0, 8742, 0, - 11053, 0, 63744, 0, 0, 7588, 63748, 1693, 63746, 43204, 5055, 0, 0, 1090, - 120679, 0, 11665, 74133, 4558, 65685, 9523, 0, 0, 0, 11513, 0, 6157, - 63775, 63774, 63773, 13191, 12170, 3500, 3139, 0, 3170, 12485, 0, 10872, - 0, 13006, 64433, 0, 0, 941, 0, 0, 0, 65541, 11063, 0, 8228, 0, 42065, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 43603, 0, 65397, 288, 0, 0, 0, 10025, 0, 2918, - 0, 65300, 119871, 9883, 64726, 2790, 65395, 3793, 0, 0, 65393, 0, 74138, - 0, 0, 0, 74139, 120613, 65394, 11548, 5270, 0, 65396, 0, 65813, 13256, - 1282, 120771, 0, 0, 10888, 0, 65242, 0, 3330, 0, 0, 0, 0, 0, 0, 3304, - 42753, 0, 0, 0, 1627, 0, 0, 0, 5371, 13116, 0, 1826, 0, 0, 43094, 0, 0, - 0, 0, 9035, 0, 0, 0, 0, 0, 68125, 0, 164, 0, 0, 0, 6958, 0, 43116, 0, 0, - 13245, 0, 0, 0, 0, 73893, 0, 12666, 13175, 13207, 120414, 66014, 120428, + 10192, 13105, 8183, 120741, 2037, 0, 0, 10747, 125, 0, 64890, 0, 0, 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, 119225, 63793, 11988, 3898, 0, 10201, 12238, 63795, + 42194, 10367, 12521, 10431, 42114, 41932, 1068, 0, 12523, 12945, 0, + 42203, 7950, 10804, 63771, 42787, 4386, 12224, 6973, 2793, 12475, 0, 0, + 63769, 9530, 0, 12232, 13135, 8596, 5681, 63762, 4595, 63760, 792, 0, + 64803, 0, 8742, 0, 11053, 0, 63744, 0, 0, 7588, 63748, 1693, 63746, + 43204, 5055, 68426, 917853, 1090, 120679, 0, 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, 0, 0, 0, 7386, 0, 68358, 0, + 0, 43603, 0, 65397, 288, 0, 0, 0, 10025, 917916, 2918, 0, 65300, 119871, + 9883, 64726, 2790, 65395, 3793, 0, 0, 65393, 0, 74138, 0, 0, 0, 74139, + 120613, 65394, 11548, 5270, 0, 65396, 0, 65813, 13256, 1282, 120771, 0, + 0, 10888, 0, 65242, 0, 3330, 0, 0, 0, 0, 0, 74259, 3304, 42753, 0, 0, 0, + 1627, 0, 0, 0, 5371, 13116, 0, 1826, 118794, 0, 43094, 0, 43650, 0, 0, + 9035, 0, 0, 0, 0, 0, 68125, 0, 164, 0, 0, 0, 6958, 0, 43116, 0, 0, 13245, + 0, 0, 127376, 0, 73893, 0, 12666, 13175, 13207, 120414, 66014, 120428, 7447, 5929, 0, 65509, 0, 7449, 11306, 0, 73920, 3180, 0, 63808, 9054, - 971, 13062, 0, 0, 65195, 64767, 0, 74428, 0, 0, 0, 0, 0, 0, 10045, 64303, - 13275, 0, 11057, 0, 13276, 0, 41525, 0, 7271, 11444, 0, 0, 0, 12229, - 41523, 0, 0, 73751, 0, 64813, 0, 0, 10476, 3858, 0, 3932, 64958, 0, 0, - 73989, 0, 0, 0, 369, 0, 41784, 0, 64163, 0, 0, 0, 65474, 4796, 41782, 0, - 65479, 0, 41781, 10486, 41480, 120511, 9899, 0, 0, 404, 12821, 3741, 0, - 5788, 0, 0, 41222, 1831, 66020, 0, 0, 4388, 0, 746, 120784, 0, 0, 13131, - 65294, 0, 0, 0, 0, 4422, 4708, 3799, 74292, 119357, 0, 74430, 0, 11700, - 4374, 0, 0, 1364, 0, 8038, 0, 917597, 0, 0, 0, 0, 73979, 13174, 73968, - 13225, 0, 0, 65835, 0, 2365, 7841, 0, 42855, 118856, 42866, 0, 0, 0, - 66438, 41785, 41171, 64172, 13173, 4372, 119354, 0, 0, 0, 0, 0, 0, 12965, - 384, 64512, 10404, 10340, 119352, 1556, 5274, 13210, 0, 10017, 9733, - 41787, 0, 0, 41373, 0, 12303, 0, 13232, 13233, 349, 4863, 41371, 11656, - 0, 120703, 119883, 12861, 4398, 8543, 65618, 0, 1096, 0, 0, 0, 12441, - 12355, 119348, 119347, 4318, 10452, 0, 8032, 13243, 13237, 12719, 0, - 119101, 0, 64884, 119872, 119345, 8597, 0, 0, 9864, 0, 120785, 0, 0, - 13195, 41452, 64961, 7722, 0, 10459, 119878, 0, 119879, 66590, 0, 41533, - 66337, 0, 0, 0, 4965, 0, 917536, 73849, 0, 0, 0, 0, 6261, 119342, 43147, - 66570, 1957, 10420, 982, 2756, 13292, 13206, 0, 0, 2925, 73809, 13056, 0, - 13212, 65110, 0, 13190, 13187, 0, 13198, 118793, 0, 5242, 119179, 64476, - 1694, 8216, 0, 0, 43331, 0, 65620, 0, 43544, 0, 0, 41444, 65621, 120325, - 64799, 5246, 120326, 13185, 9709, 120323, 120322, 12314, 65616, 5238, - 119333, 0, 119337, 5236, 40979, 0, 74201, 8286, 0, 3936, 119331, 11699, - 41347, 0, 13235, 8842, 41248, 0, 4379, 13239, 12692, 7969, 0, 7219, 0, 0, - 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, 0, 0, 42841, 13267, 0, 0, - 41775, 0, 0, 41773, 0, 10663, 0, 0, 0, 6151, 12110, 0, 65572, 119602, - 65250, 13265, 13264, 64518, 0, 6100, 0, 0, 5808, 65922, 0, 12967, 66041, - 9676, 4583, 0, 0, 68097, 64575, 0, 11965, 0, 119211, 0, 0, 0, 0, 68102, - 9698, 7814, 74476, 119651, 0, 0, 41921, 0, 9756, 6985, 119258, 0, 74219, - 0, 0, 0, 8012, 5674, 12353, 0, 12361, 5677, 42323, 0, 41925, 0, 41920, - 5673, 120534, 5676, 41923, 12694, 118978, 5672, 1294, 0, 0, 0, 42511, - 1727, 0, 0, 0, 0, 0, 74222, 8718, 3550, 736, 10268, 4505, 10316, 74090, - 5826, 74270, 5813, 0, 120712, 5841, 5837, 0, 0, 3105, 12829, 5838, 5796, - 0, 119592, 5793, 0, 5866, 5797, 41011, 5865, 120091, 7956, 598, 0, 64649, + 971, 13062, 0, 0, 65195, 10164, 0, 74428, 0, 78146, 0, 0, 0, 0, 10045, + 12882, 13275, 0, 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, 0, 369, 0, 41784, 0, 64163, 0, 0, 0, 65474, + 4796, 12292, 0, 65479, 0, 41781, 10486, 41480, 120511, 9899, 0, 0, 404, + 12821, 3741, 0, 5788, 8092, 68212, 41222, 1831, 66020, 0, 0, 4388, 0, + 746, 120784, 0, 0, 12018, 65294, 0, 0, 0, 0, 4422, 4708, 3799, 74292, + 119357, 0, 74430, 0, 11700, 4374, 0, 0, 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, 41171, 64172, + 13173, 4372, 119354, 0, 0, 0, 0, 0, 0, 12965, 384, 64512, 10404, 10340, + 119352, 1556, 5274, 13210, 0, 10017, 9733, 41787, 0, 126994, 41373, + 78039, 12303, 0, 13232, 13233, 349, 4863, 41371, 11656, 0, 120703, + 119883, 12861, 4398, 8543, 65618, 0, 1096, 0, 0, 42688, 12441, 12355, + 119348, 119347, 4318, 10452, 0, 8032, 13243, 13237, 12719, 0, 119101, 0, + 64884, 119872, 119345, 8597, 0, 0, 9864, 0, 120785, 119874, 0, 13195, + 41452, 64961, 7722, 0, 10459, 119878, 0, 119879, 66590, 0, 41533, 66337, + 0, 0, 0, 4965, 0, 917536, 73849, 0, 43638, 78537, 0, 6261, 119342, 43147, + 66570, 1957, 10420, 982, 2756, 13292, 13206, 0, 0, 2925, 73809, 13056, + 127559, 13212, 43238, 0, 13190, 13187, 0, 13198, 118793, 0, 5242, 119179, + 64476, 1694, 8216, 0, 6770, 43331, 0, 65620, 0, 43544, 0, 0, 41444, + 65621, 120325, 64799, 5246, 120326, 13185, 9709, 120323, 120322, 12314, + 65616, 5238, 119333, 0, 119337, 5236, 40979, 0, 74201, 8286, 0, 3936, + 119331, 11699, 41347, 127249, 13235, 8842, 41248, 0, 4379, 13239, 12692, + 7969, 127266, 7219, 127250, 0, 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, 0, 0, 42841, 13267, 0, 0, 41775, 0, 0, 41773, 0, 10663, 0, 0, 0, + 6151, 12110, 42673, 65572, 119602, 65250, 13265, 13264, 64518, 0, 6100, + 0, 0, 5808, 65922, 0, 12967, 66041, 5612, 4583, 0, 0, 68097, 64575, 0, + 11965, 0, 119211, 0, 69789, 0, 0, 68102, 9698, 7814, 74476, 119651, 0, 0, + 41921, 118858, 9756, 6985, 119258, 0, 74219, 0, 0, 118997, 8012, 5674, + 12353, 0, 12361, 5677, 5588, 0, 41925, 0, 41920, 5673, 120534, 5676, + 41923, 12694, 118978, 5672, 1294, 0, 78059, 0, 42511, 1727, 0, 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, 0, 0, 0, 0, 0, 847, 0, 9529, 0, - 66657, 6980, 0, 120035, 0, 0, 0, 120033, 0, 0, 0, 120039, 0, 0, 0, 9624, - 0, 0, 43190, 65463, 1554, 0, 42611, 42563, 0, 5651, 2929, 0, 43201, 0, - 19963, 5698, 0, 0, 0, 0, 5644, 10292, 65546, 120492, 68141, 8372, 0, - 65116, 0, 120022, 0, 10388, 42799, 0, 41013, 10568, 0, 0, 2869, 0, 41015, - 0, 2785, 4366, 0, 10954, 41802, 0, 42608, 194688, 9884, 4759, 0, 0, - 10266, 41359, 1170, 127017, 0, 73908, 1609, 902, 0, 63936, 0, 11661, - 8122, 5818, 0, 0, 3861, 9540, 11028, 2554, 5158, 5714, 127015, 0, 0, 807, - 43079, 0, 0, 976, 5511, 64553, 0, 42155, 0, 41356, 74110, 118801, 0, 0, - 8676, 0, 0, 11066, 451, 63941, 5798, 9349, 42018, 0, 0, 0, 43609, 194703, - 120553, 1440, 0, 0, 120016, 74283, 11005, 0, 66656, 66044, 0, 194698, 0, - 0, 0, 10094, 0, 11529, 10857, 120643, 66436, 6546, 93, 0, 0, 74440, 0, 0, - 8171, 0, 119097, 127065, 917543, 383, 10377, 41656, 0, 0, 0, 5187, 0, 0, - 11286, 0, 64217, 0, 5232, 0, 41009, 0, 41005, 0, 0, 0, 8292, 195074, - 4980, 8860, 73947, 10028, 66478, 7076, 13182, 194705, 0, 0, 10631, 66031, - 7972, 0, 0, 0, 7900, 0, 11309, 194711, 4198, 64211, 0, 0, 0, 0, 0, 0, - 12931, 0, 0, 74285, 10185, 0, 64366, 65156, 8814, 0, 74771, 0, 0, 12836, - 0, 0, 74342, 8593, 0, 0, 0, 13255, 0, 0, 7464, 0, 65865, 0, 194650, 0, 0, - 9342, 120464, 0, 64516, 0, 0, 10129, 41007, 0, 0, 40995, 12209, 41012, - 119136, 0, 0, 120633, 40992, 0, 0, 0, 43558, 5522, 0, 61, 0, 74105, 3633, - 0, 65162, 41234, 12089, 0, 9771, 0, 13251, 0, 0, 6262, 2784, 0, 0, 8126, - 66483, 0, 0, 441, 42621, 0, 0, 41002, 40999, 119623, 43266, 0, 0, 10890, - 74481, 65834, 8324, 119103, 64417, 74817, 0, 64737, 0, 0, 8930, 0, 74249, - 1193, 10056, 1800, 13253, 13252, 7829, 0, 0, 7743, 0, 0, 0, 0, 0, 9034, - 6039, 0, 10075, 0, 41018, 65683, 10338, 66469, 0, 0, 0, 42815, 0, 41966, - 0, 0, 0, 11792, 0, 0, 911, 7539, 0, 0, 120339, 65159, 64390, 0, 0, 5520, - 11662, 0, 65330, 73886, 0, 0, 12326, 0, 0, 42808, 0, 9348, 64901, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 5857, 65342, 0, 119120, 0, 8644, 0, 0, 0, 74296, - 41909, 0, 120332, 2791, 0, 1891, 0, 0, 41907, 66647, 0, 8761, 12942, - 5748, 0, 10773, 0, 0, 8796, 0, 6412, 120347, 8520, 13146, 0, 63931, 0, - 65902, 2882, 0, 0, 12843, 4520, 0, 0, 0, 0, 0, 73860, 0, 0, 64345, 0, 0, - 0, 0, 0, 0, 0, 917585, 65117, 0, 0, 10427, 0, 3844, 0, 9755, 1110, 6612, - 12222, 0, 0, 0, 0, 783, 194935, 0, 0, 0, 0, 65056, 3620, 0, 118945, 4556, - 0, 0, 194933, 74250, 0, 0, 10510, 4382, 66482, 0, 0, 0, 9177, 8902, 0, - 9839, 0, 12891, 0, 0, 63999, 2016, 41917, 9788, 63928, 0, 1862, 65800, - 9155, 66623, 9786, 65082, 41919, 8579, 41914, 7981, 0, 0, 4508, 64883, 0, - 0, 0, 0, 64592, 74276, 120080, 41780, 120079, 68181, 0, 0, 0, 0, 12147, - 9024, 66378, 66472, 0, 64289, 65289, 0, 0, 0, 64509, 0, 0, 0, 11051, 0, - 0, 11355, 65885, 0, 0, 41214, 0, 12299, 0, 7500, 4506, 7773, 0, 0, - 118912, 0, 0, 4040, 0, 6167, 0, 63922, 6594, 0, 0, 0, 3624, 43036, 0, - 64655, 63990, 19947, 63988, 41955, 0, 63993, 63992, 9611, 0, 0, 0, 7738, - 63986, 11446, 63984, 0, 3435, 119652, 0, 119108, 7029, 64258, 41292, - 118898, 12748, 43115, 9517, 11518, 0, 0, 0, 194777, 63956, 42458, 63954, - 63953, 63960, 9591, 63958, 10217, 118845, 11469, 0, 42306, 2723, 118947, - 0, 0, 0, 0, 0, 11397, 2880, 0, 0, 2872, 0, 0, 3498, 4378, 917539, 4270, - 0, 65551, 118928, 6633, 0, 0, 5230, 0, 0, 0, 0, 0, 8161, 393, 12013, 0, - 0, 0, 415, 63964, 63963, 42345, 0, 5183, 1877, 42498, 0, 2927, 0, 63961, - 4472, 0, 0, 0, 0, 917936, 42340, 4756, 0, 7081, 10730, 7691, 0, 63830, - 119625, 194945, 42103, 8628, 9813, 0, 42453, 1604, 9565, 10539, 0, 65764, - 41415, 65767, 0, 8457, 42301, 11372, 64873, 11992, 0, 0, 63980, 11801, - 3622, 0, 64336, 12017, 10463, 63981, 4967, 64189, 1966, 63976, 0, 0, 0, - 0, 63971, 4347, 4416, 42098, 11009, 10694, 63973, 402, 0, 13147, 0, - 42100, 64646, 13228, 0, 41875, 3515, 74252, 11805, 0, 11302, 6259, 0, 0, - 0, 0, 0, 0, 0, 74425, 11299, 1561, 0, 0, 64942, 0, 194733, 0, 194732, 0, - 74301, 0, 11280, 0, 0, 74060, 0, 0, 119664, 5145, 12486, 65018, 66516, - 5409, 0, 194669, 64347, 5399, 9685, 74089, 7952, 5401, 0, 66616, 0, 0, 0, - 5405, 917555, 64866, 0, 0, 0, 0, 74248, 11330, 194723, 64690, 3254, 0, 0, - 0, 42390, 0, 194725, 0, 65077, 0, 0, 3355, 9508, 9867, 5723, 11520, 5611, - 0, 3377, 0, 0, 0, 0, 0, 0, 0, 119119, 0, 0, 119068, 0, 0, 1379, 246, 0, - 0, 3788, 0, 11041, 0, 66304, 0, 0, 8917, 42403, 301, 0, 0, 0, 0, 0, 0, - 10656, 0, 65214, 119242, 42567, 0, 13163, 0, 120831, 74597, 3182, 0, 0, - 0, 0, 65889, 42169, 4755, 74244, 0, 11443, 0, 66326, 74598, 608, 600, 0, - 1219, 3934, 64206, 11483, 74510, 0, 74485, 42442, 65470, 0, 64202, 13160, - 7759, 42482, 485, 0, 0, 9828, 0, 0, 42280, 0, 9351, 7778, 64379, 7496, - 42431, 6916, 1208, 0, 119631, 11002, 42470, 0, 0, 0, 0, 74041, 0, 0, - 43539, 5411, 0, 0, 0, 0, 9150, 0, 42393, 13086, 1310, 194687, 9337, - 12052, 10643, 64586, 0, 194684, 2546, 194683, 213, 118852, 65611, 0, 0, - 194756, 74310, 6554, 0, 11914, 0, 0, 0, 0, 0, 0, 194681, 118826, 2713, 0, - 9650, 43330, 0, 194675, 1406, 0, 0, 0, 0, 194678, 4143, 194677, 0, 65748, - 4141, 9682, 65287, 1508, 0, 8779, 10569, 8725, 13299, 66638, 0, 42263, - 4145, 0, 65751, 66613, 0, 65738, 73729, 9185, 9550, 0, 0, 0, 0, 0, 65736, - 41951, 64816, 65756, 0, 12955, 10596, 2888, 0, 0, 0, 9657, 9019, 194766, - 0, 2878, 5390, 0, 194961, 0, 0, 0, 7501, 13203, 0, 10429, 10365, 0, 0, - 41946, 7503, 5235, 803, 0, 0, 0, 8986, 0, 10632, 11934, 11452, 1332, 0, - 0, 0, 0, 917545, 1791, 5191, 9288, 64822, 2892, 0, 67849, 555, 0, 0, - 66646, 0, 119002, 13151, 74512, 7289, 74055, 0, 0, 64162, 5858, 41927, - 10582, 0, 1784, 1361, 195047, 0, 7905, 0, 64868, 0, 13158, 0, 7211, 0, - 9371, 0, 0, 0, 1625, 0, 0, 1342, 0, 64171, 0, 10903, 0, 0, 0, 0, 0, 4482, - 41606, 0, 0, 0, 0, 64381, 0, 0, 0, 42245, 0, 41972, 0, 444, 0, 9127, - 66687, 66619, 0, 194972, 0, 11349, 40991, 0, 0, 119599, 120830, 0, 1197, - 0, 1149, 194970, 0, 0, 40990, 0, 0, 3492, 0, 0, 0, 0, 0, 12838, 0, 19948, - 0, 3099, 0, 0, 41087, 0, 0, 0, 119059, 12036, 0, 0, 0, 8152, 0, 64428, - 12227, 0, 0, 12828, 0, 0, 0, 0, 0, 0, 10386, 119574, 0, 0, 0, 0, 68154, - 0, 1743, 0, 0, 0, 65186, 0, 0, 9606, 0, 0, 0, 0, 0, 0, 0, 0, 194967, 0, - 0, 3395, 9362, 10878, 0, 0, 0, 64830, 0, 0, 41091, 3426, 1344, 8870, 0, - 0, 4735, 0, 6119, 12822, 0, 0, 0, 74818, 0, 0, 42637, 41080, 0, 12039, - 10559, 0, 118892, 0, 9472, 0, 11929, 0, 7170, 9596, 6130, 0, 0, 11579, 0, - 0, 194740, 0, 0, 66699, 0, 1004, 0, 194737, 0, 66008, 12627, 0, 0, 0, 0, - 0, 11300, 43304, 9686, 5890, 11776, 7558, 0, 65627, 0, 10718, 13154, - 3461, 9139, 0, 0, 0, 0, 0, 73877, 65628, 0, 0, 0, 41708, 12860, 41703, - 12069, 10838, 5403, 10352, 73917, 10061, 0, 0, 5140, 209, 0, 41704, 0, - 43078, 0, 0, 0, 10899, 65469, 0, 0, 0, 2410, 993, 0, 120589, 120689, 0, - 0, 0, 7232, 0, 119253, 0, 0, 74462, 0, 10489, 42166, 0, 10659, 3600, 0, - 4224, 1336, 41518, 0, 0, 0, 0, 41139, 64820, 0, 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, 0, 0, 0, 0, 7209, 8223, 2409, 7799, 0, 74424, - 0, 0, 4731, 0, 66629, 0, 0, 1255, 4149, 9247, 0, 9913, 0, 0, 0, 0, 65101, - 0, 11694, 0, 11690, 5835, 0, 66625, 10842, 41354, 42123, 43097, 11688, - 66634, 1094, 194, 64692, 0, 8180, 0, 0, 73872, 73865, 0, 6114, 10898, - 43072, 0, 0, 0, 0, 0, 10695, 0, 7540, 0, 881, 7857, 6067, 65164, 0, 0, 0, - 13311, 0, 41857, 64321, 8359, 0, 12689, 0, 194594, 0, 0, 0, 68183, 0, 0, - 1287, 5436, 0, 0, 74142, 127013, 74152, 119078, 6051, 10497, 0, 8985, - 12109, 0, 0, 0, 0, 0, 3652, 10537, 0, 1276, 0, 6549, 279, 0, 0, 0, 0, - 1489, 0, 0, 0, 3899, 1007, 42124, 0, 42122, 0, 0, 0, 11985, 1345, 127006, - 0, 0, 8956, 43083, 0, 42138, 0, 0, 12151, 0, 0, 0, 6285, 0, 0, 0, 74194, - 492, 8685, 0, 0, 0, 0, 0, 2582, 11470, 64538, 7444, 0, 0, 41550, 0, - 73837, 0, 2527, 119824, 197, 2799, 0, 0, 120276, 0, 0, 66515, 767, 5524, - 7028, 0, 0, 119827, 0, 0, 0, 0, 0, 1799, 120497, 6971, 74336, 0, 0, - 65340, 118979, 0, 2434, 0, 0, 120579, 0, 4631, 0, 0, 6407, 0, 19931, - 43214, 0, 7570, 0, 3192, 0, 8414, 0, 0, 0, 0, 0, 9164, 66612, 0, 3171, - 6623, 4961, 0, 886, 0, 8654, 0, 9993, 74390, 64603, 0, 0, 9599, 0, 43084, - 0, 0, 0, 2399, 0, 8994, 10944, 41208, 0, 41168, 8178, 0, 3367, 195008, - 42510, 0, 0, 7789, 0, 1947, 0, 0, 0, 42759, 11068, 1705, 9331, 0, 74798, - 9181, 0, 0, 8017, 0, 65096, 66720, 0, 0, 0, 4909, 12126, 0, 120696, 4904, - 0, 195012, 1365, 9253, 42757, 0, 7462, 0, 0, 0, 0, 119587, 64415, 0, 0, - 5398, 0, 195014, 0, 0, 0, 0, 0, 0, 9476, 0, 0, 12763, 0, 3629, 0, 13005, - 0, 3628, 0, 0, 0, 3469, 42107, 42116, 917578, 64809, 2928, 4905, 9853, - 851, 9040, 0, 64665, 43086, 9114, 0, 42583, 9315, 4822, 4906, 3852, 2847, - 0, 3236, 11317, 1251, 7777, 41852, 11410, 10964, 0, 43222, 12646, 120269, - 10259, 9865, 65821, 0, 6018, 0, 0, 12276, 0, 0, 0, 0, 119613, 0, 0, - 10467, 0, 2443, 10918, 0, 0, 1001, 9241, 1927, 0, 0, 73987, 0, 0, 0, - 118828, 0, 65678, 12867, 0, 8260, 0, 7519, 118794, 12274, 8904, 518, - 65857, 0, 0, 13204, 4387, 857, 0, 65369, 0, 119583, 43125, 120592, 0, 0, - 0, 0, 5136, 1968, 0, 195023, 1337, 64967, 1629, 0, 796, 66506, 0, 74123, - 0, 0, 42314, 195021, 0, 74403, 6120, 478, 65151, 68128, 0, 43082, 6016, - 0, 42284, 0, 4276, 1206, 3619, 41638, 0, 3843, 12011, 8853, 3361, 0, 490, - 10715, 7578, 0, 0, 65350, 10530, 12348, 8653, 74314, 42435, 6154, 9551, - 65354, 0, 784, 42397, 334, 0, 42416, 65356, 65273, 0, 0, 7025, 10364, 0, - 778, 41626, 42455, 7989, 74063, 3227, 0, 0, 73983, 2915, 41698, 41022, - 41702, 10309, 127035, 0, 0, 6975, 0, 5415, 12176, 0, 0, 3462, 65215, - 42629, 0, 73784, 0, 0, 9759, 0, 0, 0, 8114, 0, 0, 0, 0, 8710, 42495, - 118956, 0, 4051, 10460, 74097, 118917, 1356, 12161, 0, 0, 0, 1619, 9703, + 66657, 6980, 0, 120035, 78484, 0, 0, 120033, 78486, 0, 0, 120039, 42683, + 0, 0, 9624, 0, 0, 43190, 65463, 1554, 0, 42611, 42563, 0, 5651, 2929, + 6792, 43201, 0, 19963, 5698, 0, 0, 0, 0, 5644, 10292, 65546, 69821, + 68141, 8372, 0, 65116, 0, 120022, 0, 10388, 42799, 0, 41013, 10568, 0, 0, + 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, 0, 11661, 8122, 5818, 0, 0, 3861, 9540, 11028, 2554, 5158, 5714, + 127015, 0, 0, 807, 43079, 0, 78475, 976, 5511, 64553, 0, 42155, 0, 41356, + 74110, 118801, 0, 0, 8676, 0, 0, 11066, 451, 63941, 5798, 9349, 42018, 0, + 0, 0, 43609, 194703, 120553, 1440, 0, 194701, 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, 10377, 41656, 0, 0, 0, 5187, 0, 127277, 11286, 68620, 64217, 0, + 5232, 0, 41009, 0, 41005, 0, 0, 0, 8292, 195074, 4980, 8860, 73947, + 10028, 66478, 7076, 13182, 194705, 0, 0, 10631, 66031, 7972, 0, 78785, 0, + 7900, 0, 11309, 78319, 4198, 42725, 0, 67656, 78819, 0, 0, 0, 12931, 0, + 42684, 74285, 2088, 0, 64366, 65156, 8814, 42238, 74771, 0, 0, 12836, 0, + 0, 74342, 8593, 0, 0, 68445, 13255, 0, 0, 7464, 0, 65865, 0, 194650, 0, + 0, 9342, 120464, 0, 64516, 0, 78792, 10129, 41007, 74375, 0, 40995, + 12209, 41012, 119136, 0, 0, 120633, 40992, 0, 0, 68653, 43558, 5522, 0, + 61, 0, 74105, 3633, 0, 65162, 41234, 12089, 78281, 9771, 0, 13251, 0, 0, + 6262, 2784, 42743, 0, 8126, 66483, 0, 0, 441, 42621, 0, 0, 41002, 40999, + 119623, 43266, 0, 0, 10890, 74481, 65834, 8324, 119103, 64417, 74817, 0, + 64737, 0, 0, 8930, 66678, 74249, 1193, 10056, 1800, 13253, 13252, 7829, + 0, 0, 7743, 0, 0, 77904, 0, 77905, 9034, 6039, 0, 10075, 0, 41018, 65683, + 10338, 66469, 0, 0, 0, 42815, 0, 41966, 0, 0, 0, 11792, 43064, 41025, + 911, 7539, 0, 0, 120339, 65159, 64390, 0, 0, 5520, 11662, 0, 65330, + 42812, 0, 0, 12326, 0, 0, 42808, 0, 9348, 64901, 0, 0, 0, 0, 0, 0, + 917584, 43702, 0, 5857, 65342, 0, 119120, 120079, 8644, 0, 0, 0, 74296, + 41909, 0, 120332, 2791, 0, 1891, 69824, 0, 41907, 66647, 0, 8761, 12942, + 5748, 0, 10773, 0, 0, 8796, 78149, 6412, 2061, 8520, 13146, 0, 63931, 0, + 65902, 2882, 0, 0, 12843, 4520, 120345, 0, 0, 0, 0, 73860, 0, 0, 64345, + 0, 0, 0, 194940, 0, 0, 43679, 917585, 65117, 194939, 0, 10427, 0, 3844, + 0, 9755, 1110, 6612, 12222, 0, 194934, 0, 0, 783, 194935, 0, 0, 0, + 194720, 65056, 3620, 0, 68378, 4556, 0, 0, 194933, 74250, 0, 67657, + 10510, 4382, 66482, 0, 0, 0, 9177, 8902, 0, 9839, 0, 12891, 0, 0, 63999, + 2016, 41917, 9788, 63928, 0, 1862, 65800, 9155, 66623, 9786, 65082, + 41919, 8579, 41914, 7981, 0, 0, 4508, 64883, 0, 0, 0, 0, 64592, 74276, + 120080, 6784, 78788, 68181, 0, 0, 0, 127534, 12147, 9024, 66378, 66472, + 0, 64289, 65289, 78151, 66658, 194929, 64509, 78152, 0, 0, 11051, 0, 0, + 11355, 65885, 0, 0, 41214, 0, 12299, 0, 7500, 4506, 7773, 0, 0, 9963, + 68649, 0, 4040, 0, 6167, 0, 63922, 6594, 0, 0, 0, 3624, 43036, 0, 6387, + 63990, 19947, 63988, 41955, 0, 63993, 10440, 9611, 0, 6803, 0, 7738, + 63986, 11446, 63984, 120331, 3435, 78164, 0, 119108, 7029, 64258, 41292, + 118898, 12748, 42742, 9517, 11518, 0, 78790, 0, 194777, 63956, 42458, + 63954, 63953, 63960, 9591, 4516, 10217, 68370, 11469, 0, 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, 0, 415, 63964, 63963, 42345, 0, 5183, 1877, 42498, 0, 2927, + 0, 63961, 4472, 0, 0, 78159, 0, 917936, 42340, 4756, 0, 7081, 10730, + 7691, 10331, 63830, 119625, 194945, 42103, 8628, 9813, 0, 42453, 1604, + 9565, 10539, 0, 65764, 41415, 65767, 0, 8457, 42301, 11372, 64873, 11992, + 0, 0, 63980, 11801, 3622, 0, 64336, 12017, 10463, 63981, 4967, 64189, + 1966, 43628, 0, 0, 0, 0, 63971, 4347, 4416, 42098, 11009, 10694, 63973, + 402, 0, 13147, 0, 42100, 64646, 13228, 0, 41875, 3515, 74252, 11805, 0, + 11302, 6259, 43395, 0, 0, 194670, 0, 0, 0, 74425, 11299, 1561, 0, 0, + 64942, 0, 194733, 0, 194732, 0, 74301, 0, 11280, 0, 69784, 74060, 0, 0, + 119664, 5145, 12486, 65018, 66516, 5409, 0, 194669, 7402, 5399, 9685, + 74089, 7952, 5401, 0, 66616, 68421, 0, 0, 5405, 917555, 64866, 0, 0, 0, + 78784, 74248, 11330, 194723, 64690, 3254, 0, 0, 0, 42390, 43678, 194725, + 0, 65077, 0, 6388, 3355, 9508, 9867, 5723, 11520, 5611, 0, 3377, 0, 0, 0, + 0, 78228, 0, 0, 42691, 917886, 0, 74767, 0, 0, 1379, 246, 0, 0, 3788, 0, + 11041, 0, 66304, 0, 0, 8917, 42403, 301, 0, 0, 0, 0, 0, 0, 10656, 0, + 65214, 119242, 42567, 0, 13163, 0, 120831, 74597, 3182, 0, 0, 0, 65034, + 65889, 42169, 4755, 74244, 0, 11443, 0, 66319, 74598, 608, 600, 0, 1219, + 3934, 64206, 11483, 74510, 0, 74485, 42442, 65470, 0, 64202, 13160, 7759, + 42482, 485, 0, 0, 9828, 0, 0, 42280, 0, 9351, 7778, 64379, 7496, 42431, + 6916, 1208, 0, 119631, 11002, 42470, 0, 118946, 0, 0, 74041, 0, 0, 43539, + 5411, 42196, 0, 0, 0, 9150, 0, 42393, 13086, 1310, 194687, 9337, 12052, + 10643, 55271, 0, 194684, 2546, 194683, 213, 118852, 65611, 0, 0, 194756, + 74310, 6554, 0, 11914, 0, 0, 0, 0, 0, 0, 194681, 118826, 2713, 0, 9650, + 43330, 0, 194675, 1406, 0, 0, 0, 0, 68223, 4143, 194677, 0, 65748, 4141, + 9682, 65287, 1508, 194963, 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, 0, 12955, 10596, 2888, 0, 0, 0, 9657, + 9019, 194766, 0, 2878, 5390, 0, 194961, 0, 68679, 0, 7501, 6328, 0, + 10429, 10365, 0, 0, 41946, 7503, 5235, 803, 68381, 0, 0, 8986, 0, 10632, + 11934, 11452, 1332, 0, 0, 0, 0, 118887, 1791, 5191, 9288, 64822, 2892, 0, + 43394, 555, 0, 0, 66646, 0, 119002, 13151, 74512, 7289, 74055, 0, 8854, + 64162, 5858, 41927, 10582, 0, 1784, 1361, 195047, 0, 7905, 0, 64868, 0, + 13158, 0, 7211, 0, 9371, 73973, 0, 6828, 1625, 0, 0, 1342, 68440, 64171, + 0, 10903, 0, 0, 0, 0, 0, 4482, 41606, 0, 0, 0, 0, 64381, 0, 0, 0, 42245, + 0, 41972, 0, 444, 0, 9127, 66687, 66619, 0, 78025, 0, 11349, 40991, 0, 0, + 119599, 120830, 0, 1197, 0, 1149, 194970, 0, 0, 40990, 0, 0, 3492, 0, 0, + 0, 0, 0, 12838, 0, 19948, 0, 3099, 0, 0, 41087, 0, 0, 0, 119059, 12036, + 0, 0, 0, 8152, 0, 64428, 12227, 0, 0, 12828, 127511, 0, 0, 120708, 0, 0, + 10386, 119574, 0, 0, 0, 0, 68154, 0, 1743, 0, 0, 0, 65186, 0, 0, 9606, 0, + 0, 0, 0, 0, 0, 0, 0, 194967, 0, 0, 3395, 9362, 10878, 0, 0, 78362, 64830, + 0, 0, 41091, 3426, 1344, 8870, 0, 0, 4735, 0, 6119, 12822, 42699, 0, 0, + 74818, 0, 0, 42637, 41080, 0, 12039, 10559, 0, 118892, 0, 9472, 0, 11929, + 0, 7170, 9596, 6130, 0, 43629, 11579, 194741, 0, 194740, 0, 0, 66699, 0, + 1004, 0, 194737, 43234, 66008, 12627, 0, 68414, 0, 43619, 43382, 11300, + 43304, 9686, 5890, 11776, 7558, 0, 65627, 0, 10718, 13154, 3461, 9139, 0, + 0, 0, 0, 65365, 73877, 65628, 78019, 0, 0, 41708, 12860, 41703, 12069, + 10838, 5403, 10352, 73917, 10061, 43237, 0, 5140, 209, 0, 41704, 41056, + 43078, 0, 0, 0, 10899, 65469, 0, 0, 0, 2410, 993, 0, 120589, 120689, + 78693, 0, 0, 7232, 0, 119253, 0, 0, 74462, 2066, 10489, 42166, 43463, + 10659, 3600, 0, 4224, 1336, 41518, 0, 0, 0, 0, 41139, 64820, 0, 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, 0, 0, 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, 0, 11690, 5835, 0, 66625, + 10842, 41354, 42123, 43097, 11688, 66634, 1094, 194, 64692, 0, 8180, 0, + 0, 9972, 73865, 4519, 6114, 10898, 43072, 0, 0, 0, 0, 0, 10695, 0, 7540, + 0, 881, 7857, 6067, 65164, 0, 0, 0, 13311, 68403, 41857, 64321, 8359, 0, + 12689, 0, 194594, 0, 0, 0, 68183, 0, 0, 1287, 5436, 0, 0, 74142, 127013, + 74152, 119078, 6051, 10497, 0, 8985, 12109, 0, 0, 0, 0, 0, 3652, 10537, + 0, 1276, 120440, 6549, 279, 73745, 0, 0, 0, 1489, 0, 0, 0, 3899, 1007, + 42124, 0, 42122, 0, 0, 0, 11985, 1345, 78600, 0, 0, 8956, 43083, 119830, + 42138, 78610, 0, 12151, 78608, 78604, 78605, 6285, 78603, 78612, 78613, + 74194, 492, 8685, 0, 0, 0, 78622, 43712, 2582, 11470, 64538, 7444, 78615, + 78616, 41550, 0, 73837, 119823, 2527, 119824, 197, 2799, 0, 41944, + 120276, 9933, 0, 66515, 767, 5524, 7028, 0, 0, 119827, 119817, 119828, + 78633, 10896, 0, 1799, 120497, 6971, 74336, 0, 0, 65340, 118979, 41551, + 2434, 0, 0, 120579, 0, 4631, 0, 0, 6407, 0, 6338, 43214, 0, 7570, 0, + 3192, 0, 8414, 0, 0, 0, 0, 0, 9164, 66612, 0, 3171, 6623, 4961, 68396, + 886, 55216, 8654, 78832, 9993, 74390, 64603, 0, 69241, 9599, 78629, + 43084, 78627, 78628, 78625, 2399, 0, 8994, 10944, 41208, 0, 41168, 8178, + 0, 3367, 195008, 42510, 78641, 78636, 6804, 78634, 1947, 0, 0, 0, 42759, + 11068, 1705, 9331, 0, 74798, 9181, 65359, 0, 8017, 0, 65096, 66720, 0, + 43475, 0, 4909, 12126, 0, 120696, 4904, 0, 195012, 1365, 9253, 42757, + 43436, 7462, 0, 0, 0, 0, 119587, 64415, 0, 0, 5398, 0, 195014, 0, 0, 0, + 119015, 0, 0, 9476, 0, 0, 12763, 0, 3629, 0, 13005, 0, 3628, 0, 0, 0, + 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, 119814, 0, 12276, 0, 68372, 0, 0, 119244, 0, 0, 10467, 0, + 2443, 10918, 78217, 119825, 1001, 9241, 1927, 0, 0, 73987, 0, 0, 0, + 118828, 127504, 65678, 12867, 0, 8260, 77945, 7519, 11505, 12274, 8904, + 518, 65857, 0, 0, 13204, 4387, 857, 0, 65369, 0, 119583, 43125, 120592, + 0, 0, 0, 0, 5136, 1968, 0, 195023, 1337, 64967, 1629, 0, 796, 66506, 0, + 74123, 12877, 0, 42314, 43388, 0, 74403, 6120, 478, 65151, 68128, 0, + 43082, 6016, 0, 42284, 0, 4276, 1206, 3619, 41638, 0, 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, 127265, 4442, 10364, 0, 778, 41626, 42455, 7989, 74063, 3227, 0, + 127275, 73983, 2915, 11502, 41022, 41702, 10309, 127035, 78320, 0, 6975, + 0, 5415, 12176, 0, 0, 3462, 65215, 42629, 78691, 73784, 0, 0, 9759, 0, + 78324, 127254, 8114, 78698, 78697, 78696, 78695, 8710, 42495, 118956, 0, + 4051, 10460, 43364, 118917, 1356, 12161, 42713, 0, 127268, 1619, 9703, 43152, 42489, 42112, 0, 1875, 10808, 42109, 120284, 41860, 64862, 13305, - 64907, 5289, 13144, 0, 0, 5575, 9675, 0, 5940, 226, 2649, 74493, 0, 0, 0, - 3382, 42449, 6498, 1658, 11936, 0, 0, 11269, 0, 73759, 43100, 74449, - 65508, 0, 0, 0, 8935, 917985, 0, 0, 0, 616, 0, 65178, 4684, 0, 119653, 0, - 0, 0, 6048, 74460, 42110, 73965, 10870, 8557, 11054, 0, 0, 9681, 4475, 0, - 0, 0, 0, 120731, 6035, 0, 7651, 10296, 0, 0, 0, 0, 0, 118966, 74144, - 40997, 0, 10392, 10328, 40998, 0, 74488, 0, 9800, 8979, 0, 119131, 41000, - 0, 119239, 6487, 10977, 0, 10344, 0, 65299, 5394, 0, 0, 10220, 66505, - 41200, 0, 4425, 0, 0, 0, 43074, 73799, 0, 0, 0, 12173, 0, 0, 0, 65338, 0, - 0, 119582, 4474, 0, 43093, 0, 1587, 0, 0, 64475, 0, 1369, 0, 0, 0, 0, - 4560, 0, 0, 0, 0, 64948, 4430, 74347, 42601, 4514, 0, 0, 8194, 65462, - 10626, 10965, 0, 8893, 0, 12542, 0, 65341, 0, 65829, 7925, 0, 10475, 0, - 0, 1352, 11069, 7707, 0, 0, 65279, 127102, 127101, 127100, 65605, 6040, - 127097, 10440, 0, 9336, 0, 0, 8899, 7798, 64474, 64259, 0, 65188, 7820, - 43018, 0, 0, 7746, 1492, 0, 10884, 0, 0, 5127, 11285, 42501, 5495, 4273, - 43095, 41426, 10849, 5730, 2999, 0, 120720, 74304, 371, 64373, 6023, 169, - 5497, 11708, 0, 0, 0, 0, 8224, 0, 8938, 6043, 12738, 0, 0, 5321, 0, 0, 0, - 2589, 74332, 1689, 7802, 4683, 74318, 0, 120296, 66704, 0, 0, 0, 0, - 74513, 6049, 0, 4027, 834, 118962, 1803, 0, 1503, 0, 0, 0, 5731, 1381, - 2387, 0, 0, 8289, 64525, 65817, 2881, 65514, 0, 9601, 2879, 9668, 9766, - 0, 5729, 0, 74410, 6036, 64881, 4026, 9361, 127091, 2887, 0, 3526, 6298, - 0, 0, 0, 0, 0, 8572, 6021, 0, 0, 0, 43155, 0, 0, 3146, 10959, 0, 0, 0, - 10981, 166, 0, 8635, 0, 10623, 408, 0, 0, 13298, 0, 7426, 41641, 12717, - 0, 7607, 10639, 66713, 0, 0, 41643, 74134, 0, 8713, 41640, 0, 41645, - 66712, 6645, 646, 66726, 66711, 42129, 0, 0, 3472, 8697, 0, 0, 0, 0, 0, - 0, 5809, 1950, 119356, 0, 74572, 0, 42136, 0, 0, 0, 0, 3247, 119854, - 65017, 0, 0, 66668, 0, 0, 10983, 0, 0, 0, 41567, 0, 0, 0, 0, 0, 0, 0, - 8285, 0, 4509, 0, 66471, 12216, 0, 40988, 0, 0, 41727, 0, 0, 2396, 0, 0, - 0, 0, 64940, 0, 3886, 0, 42457, 0, 0, 996, 0, 917571, 4249, 0, 917594, - 11707, 8222, 0, 7939, 0, 917574, 917582, 917592, 917569, 8534, 0, 40983, - 0, 0, 0, 7201, 12561, 0, 42371, 12558, 0, 0, 10052, 40982, 0, 0, 1488, 0, - 0, 0, 917559, 0, 0, 1563, 0, 9619, 0, 0, 0, 0, 0, 5803, 7797, 6070, - 10006, 0, 2922, 6082, 0, 65009, 0, 12567, 0, 0, 0, 0, 0, 3607, 65863, - 10046, 9612, 42153, 8218, 9485, 0, 2032, 0, 0, 0, 0, 0, 0, 43085, 6057, - 508, 0, 0, 120265, 0, 0, 0, 0, 638, 6083, 119072, 0, 0, 2305, 0, 0, 0, - 6056, 6659, 0, 0, 6085, 0, 0, 3915, 41634, 0, 41639, 63912, 11941, 0, - 4028, 1787, 42180, 43096, 0, 3249, 1768, 0, 12328, 501, 127074, 10601, 0, - 583, 0, 41977, 0, 66004, 119350, 6505, 74010, 0, 13064, 0, 120810, 6500, - 5526, 65049, 0, 74531, 0, 0, 12745, 9678, 0, 120587, 9869, 0, 1771, 0, - 8936, 0, 0, 4208, 0, 119115, 0, 0, 0, 74101, 0, 11762, 0, 0, 0, 0, 66475, - 0, 5027, 0, 0, 0, 5069, 73862, 5028, 9897, 0, 73739, 5026, 0, 0, 0, 0, - 8931, 0, 1415, 8866, 41901, 74790, 0, 119361, 0, 43106, 5029, 119360, - 1580, 3598, 0, 41070, 0, 0, 3440, 119359, 1562, 0, 917827, 119358, 1716, - 0, 10600, 0, 620, 41001, 6028, 0, 42892, 0, 74822, 5024, 120829, 41003, - 0, 5025, 0, 0, 0, 119328, 0, 65557, 0, 0, 0, 11599, 0, 11602, 6243, - 11574, 11581, 11597, 11598, 6253, 6105, 11584, 74195, 11569, 65275, 8906, - 127096, 66491, 2636, 0, 10815, 11619, 0, 41540, 7815, 11616, 6979, 12080, - 7721, 11604, 7869, 1592, 0, 42152, 0, 41048, 0, 829, 0, 0, 19950, 0, 0, - 6616, 0, 118875, 10953, 391, 0, 0, 482, 42296, 11588, 0, 43606, 0, 0, - 66370, 0, 42335, 0, 0, 0, 7538, 5315, 0, 42491, 0, 42061, 0, 4576, 0, 0, - 120241, 4277, 0, 4039, 64472, 42338, 368, 42058, 3960, 11043, 11337, - 120247, 917820, 63989, 3958, 12132, 1849, 0, 9921, 42451, 917818, 41147, - 42064, 11959, 42404, 41160, 0, 3618, 0, 0, 43300, 5156, 0, 0, 929, 0, - 917822, 42437, 1555, 0, 8691, 66435, 0, 41662, 0, 0, 0, 0, 0, 4578, - 64513, 41664, 0, 42578, 0, 41661, 0, 43305, 9356, 0, 0, 0, 1286, 10166, - 0, 0, 64707, 0, 42476, 7730, 0, 0, 42483, 0, 0, 42324, 42291, 10020, - 43359, 0, 6641, 525, 41627, 0, 8763, 0, 41628, 533, 11931, 65225, 8321, - 42504, 42581, 0, 6915, 42310, 4377, 8559, 0, 120234, 0, 13193, 64350, - 11666, 8679, 41924, 1576, 7735, 0, 0, 73840, 0, 11374, 0, 10889, 917909, - 7757, 42462, 120226, 126994, 66493, 2718, 4168, 73842, 13308, 120112, 0, - 1179, 4440, 0, 0, 363, 11015, 0, 0, 64296, 127090, 66692, 120826, 0, - 66492, 6593, 64625, 41963, 0, 119329, 0, 10013, 0, 0, 127095, 9492, - 11782, 64382, 12833, 0, 0, 1297, 41630, 630, 127094, 0, 0, 0, 1043, 0, 0, - 10090, 0, 0, 313, 917563, 41881, 0, 42311, 7445, 0, 5750, 10759, 9419, 0, - 9405, 11268, 0, 9398, 8526, 9399, 9422, 0, 66495, 0, 0, 0, 41718, 10707, - 1603, 0, 0, 0, 631, 0, 0, 13161, 65272, 0, 10546, 74210, 0, 11600, 0, - 2797, 73821, 42427, 306, 714, 3058, 42381, 120036, 127080, 12351, 42395, - 0, 11607, 0, 42282, 0, 0, 9157, 73765, 66364, 42433, 0, 7603, 12803, 180, - 42141, 0, 120612, 66494, 12674, 8244, 362, 0, 0, 8037, 917804, 11535, 0, - 74845, 5185, 66696, 5521, 10334, 5519, 0, 10302, 0, 10104, 1027, 5181, 0, - 0, 10523, 1446, 42320, 41646, 991, 5189, 42472, 41647, 120105, 1722, - 5581, 0, 3405, 0, 194644, 5523, 0, 42620, 0, 0, 9549, 0, 10549, 0, 9661, - 66486, 0, 120537, 120026, 0, 0, 0, 0, 41991, 0, 0, 7630, 9846, 7684, - 10350, 0, 1174, 0, 0, 0, 0, 66485, 0, 42277, 0, 42456, 65667, 0, 12330, - 0, 0, 42417, 42383, 0, 41344, 6293, 0, 66252, 0, 74443, 0, 10209, 8313, - 4195, 0, 9010, 66690, 0, 0, 64894, 0, 65871, 0, 1736, 0, 3901, 12228, - 120151, 65200, 3383, 10446, 0, 693, 9130, 314, 64149, 42420, 11949, 0, 0, - 11026, 0, 5332, 6940, 64154, 12635, 127007, 120628, 1751, 273, 8165, - 13166, 120763, 0, 0, 12824, 0, 4528, 5320, 6301, 0, 6133, 9339, 9463, - 42346, 10922, 64560, 3757, 0, 0, 0, 65869, 73760, 2569, 0, 2326, 65740, - 2565, 42459, 7596, 7921, 0, 74095, 0, 41848, 2567, 66006, 0, 4044, 0, 0, - 12233, 0, 1023, 474, 0, 119818, 0, 0, 42487, 65556, 0, 0, 42295, 0, 0, 0, - 0, 9835, 66499, 0, 0, 12275, 10895, 0, 274, 0, 1858, 0, 0, 0, 10118, - 3133, 0, 73795, 0, 9610, 8068, 8197, 0, 699, 0, 41665, 5868, 0, 0, 42182, - 7581, 19940, 0, 41667, 0, 0, 1923, 65583, 65802, 0, 64597, 0, 119184, 0, - 0, 6464, 7036, 2996, 1937, 0, 0, 41835, 4047, 41842, 0, 65217, 0, 0, - 11017, 0, 0, 293, 0, 0, 64791, 41827, 42466, 65416, 10579, 8560, 0, - 65413, 118835, 4803, 12964, 1739, 1941, 3900, 0, 1713, 0, 0, 73957, + 64907, 5289, 13144, 0, 0, 5575, 9675, 0, 5940, 226, 2649, 6336, 0, 0, + 43236, 3382, 42449, 6498, 1658, 11936, 78232, 0, 11269, 10151, 73759, + 43100, 74449, 65508, 0, 0, 0, 8935, 917985, 0, 0, 0, 616, 74753, 65178, + 4684, 78701, 119653, 0, 0, 0, 6048, 74460, 42110, 73965, 10870, 8557, + 11054, 68664, 119049, 9681, 4475, 0, 41142, 2100, 0, 120731, 6035, 0, + 7651, 10296, 0, 0, 0, 917987, 0, 118966, 74144, 40997, 0, 10392, 10328, + 40998, 43462, 74488, 0, 9800, 8979, 0, 119131, 41000, 0, 119239, 6487, + 10977, 0, 10344, 0, 65299, 5394, 43246, 78243, 10220, 66505, 41200, 0, + 4425, 0, 0, 0, 43074, 73799, 0, 78147, 0, 12173, 78545, 0, 0, 65338, 0, + 0, 119582, 4474, 0, 43093, 0, 1587, 0, 127372, 64475, 0, 1369, 0, 78251, + 7927, 0, 4560, 0, 0, 0, 0, 64948, 4430, 74347, 42601, 4514, 66434, 0, + 8194, 65462, 10626, 10965, 0, 8893, 0, 12542, 0, 65341, 0, 65829, 7925, + 119822, 10475, 0, 0, 1352, 11069, 7707, 127560, 0, 65279, 127102, 68207, + 127100, 65605, 6040, 127097, 10071, 0, 9336, 0, 0, 8899, 7798, 64474, + 64259, 0, 65188, 7820, 43018, 0, 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, 0, 8224, 0, + 8938, 6043, 12738, 0, 0, 5321, 0, 0, 0, 2589, 74332, 1689, 7802, 4683, + 74318, 42704, 120296, 11905, 0, 0, 0, 0, 74513, 6049, 0, 4027, 834, + 118962, 1803, 0, 1503, 0, 0, 0, 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, 0, 78519, + 0, 8572, 6021, 77896, 0, 77895, 43155, 0, 0, 3146, 10959, 9483, 0, 77893, + 10981, 166, 917841, 8635, 0, 10623, 408, 119058, 127507, 13298, 0, 7426, + 41641, 12717, 0, 7607, 10639, 66713, 0, 0, 41643, 74134, 0, 8713, 41640, + 10221, 41645, 66712, 6645, 646, 66726, 66711, 42129, 0, 77901, 3472, + 8697, 0, 0, 0, 0, 0, 0, 5809, 1950, 119356, 0, 74572, 0, 42136, 0, 0, 0, + 0, 3247, 119854, 65017, 0, 68428, 66668, 0, 0, 10983, 0, 0, 0, 41567, 0, + 0, 0, 194624, 0, 0, 0, 8285, 0, 4509, 0, 66471, 12216, 0, 40988, 0, 0, + 41727, 0, 0, 2396, 0, 0, 74018, 917538, 64940, 0, 3886, 0, 42457, 119008, + 0, 996, 68123, 917571, 4249, 0, 917594, 11707, 8222, 0, 7939, 0, 917574, + 917582, 917592, 917569, 8534, 0, 40983, 0, 0, 0, 7201, 12561, 0, 42371, + 12558, 0, 0, 10052, 40982, 0, 0, 1488, 0, 0, 0, 917559, 0, 0, 1563, 0, + 9619, 0, 0, 0, 0, 0, 5803, 7797, 6070, 10006, 0, 2922, 6082, 0, 65009, 0, + 12567, 0, 0, 41412, 0, 0, 3607, 65863, 10046, 9612, 42153, 8218, 9485, 0, + 2032, 78354, 0, 0, 0, 0, 0, 43085, 6057, 508, 0, 0, 120265, 0, 0, 0, 0, + 638, 6083, 119072, 0, 0, 2305, 78348, 0, 0, 6056, 6659, 0, 0, 6085, 0, 0, + 3915, 41634, 0, 41639, 63912, 11941, 0, 4028, 1787, 42180, 43096, 0, + 3249, 1768, 0, 12328, 501, 127074, 10601, 0, 583, 0, 41977, 0, 66004, + 119350, 6505, 74010, 0, 13064, 55267, 120810, 6500, 5526, 65049, 0, + 73764, 0, 0, 12745, 9678, 0, 120587, 9869, 0, 1771, 0, 8936, 0, 0, 4208, + 78341, 119115, 78342, 0, 0, 74101, 0, 11762, 0, 0, 77997, 0, 66475, 0, + 5027, 0, 0, 0, 5069, 73862, 5028, 9897, 0, 73739, 5026, 0, 68639, 6331, + 0, 8931, 0, 1415, 8866, 41901, 74790, 78138, 119361, 0, 43106, 5029, + 65309, 1580, 3598, 68424, 41070, 77903, 0, 3440, 78215, 1562, 0, 127236, + 119358, 1716, 0, 10600, 0, 620, 41001, 6028, 0, 42892, 0, 74822, 5024, + 120829, 41003, 0, 5025, 0, 0, 0, 119328, 0, 65557, 0, 74541, 0, 11599, 0, + 11602, 6243, 11574, 11581, 11597, 11598, 6253, 6105, 11584, 74195, 11569, + 65275, 8906, 127096, 5755, 2636, 0, 10815, 11619, 78717, 41540, 7815, + 11616, 6979, 12080, 7721, 11604, 7869, 1592, 0, 42152, 78498, 41048, 0, + 829, 0, 0, 19950, 0, 0, 6616, 0, 118875, 10953, 391, 0, 69785, 482, + 42296, 11588, 0, 43606, 0, 68397, 66370, 0, 42335, 0, 0, 0, 7538, 5315, + 0, 42491, 0, 42061, 0, 4576, 0, 68417, 120241, 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, 0, 0, 929, 6827, 42035, 42437, 1555, 0, 8691, + 66435, 0, 41662, 0, 0, 0, 0, 0, 4578, 64513, 41664, 0, 42578, 0, 41661, + 78715, 43305, 9356, 0, 0, 0, 1286, 10166, 0, 0, 64707, 0, 42476, 7730, 0, + 0, 42483, 0, 0, 42324, 42291, 10020, 43359, 0, 6641, 525, 41627, 0, 8763, + 0, 41628, 533, 11931, 65225, 8321, 42504, 42581, 0, 6915, 42310, 4377, + 8559, 0, 120234, 0, 13193, 64350, 11666, 8679, 41924, 1576, 7735, 0, 0, + 73840, 0, 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, + 0, 119329, 0, 10013, 0, 0, 127095, 9492, 11782, 64382, 12833, 118986, 0, + 1297, 41630, 630, 127094, 0, 120774, 120570, 1043, 43652, 66223, 10090, + 0, 0, 313, 917563, 41881, 0, 42311, 7445, 0, 5750, 10759, 9419, 55222, + 9405, 11268, 0, 9398, 8526, 9399, 9422, 0, 66495, 0, 0, 127239, 41718, + 10707, 1603, 0, 119003, 0, 631, 77952, 77953, 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, 0, 0, 8037, 917803, 11535, 0, 74845, 5185, 66696, 5521, + 10334, 2093, 77983, 10302, 0, 10104, 1027, 5181, 0, 0, 10523, 1446, + 42320, 41646, 991, 5189, 42472, 41647, 120105, 1722, 5581, 77979, 3405, + 0, 194644, 5523, 0, 42620, 0, 0, 9549, 0, 10549, 55282, 9661, 43682, 0, + 77910, 120026, 78708, 0, 77911, 0, 41991, 0, 0, 7630, 9846, 7684, 10350, + 0, 1174, 77981, 42733, 77978, 77980, 66485, 77977, 42277, 77974, 42456, + 65667, 0, 12330, 0, 0, 42417, 42383, 0, 41344, 6293, 0, 66252, 77984, + 74443, 0, 10209, 8313, 4195, 74435, 1316, 66690, 120032, 6332, 64894, 0, + 65871, 78060, 1736, 0, 3901, 12228, 120151, 65200, 3383, 10446, 78841, + 693, 9130, 314, 64149, 42420, 11949, 0, 120152, 11026, 0, 5332, 6940, + 64154, 12635, 127007, 42706, 1751, 273, 8165, 13166, 120763, 78840, 0, + 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, 0, 74095, 0, 41848, 2567, 66006, 0, 4044, 0, 0, 12233, 0, 1023, + 474, 0, 119818, 0, 0, 42487, 65556, 0, 0, 42295, 0, 0, 0, 0, 9835, 66499, + 0, 5417, 12275, 10895, 0, 274, 0, 1858, 0, 0, 55251, 10118, 3133, 0, + 73795, 0, 9610, 8068, 8197, 0, 699, 0, 41665, 5868, 0, 0, 42182, 7581, + 19940, 43668, 41667, 0, 0, 1923, 65583, 65802, 0, 64597, 43444, 119184, + 0, 0, 6464, 7036, 2996, 1937, 0, 0, 41835, 4047, 41842, 0, 64107, 0, 0, + 11017, 0, 0, 293, 77966, 0, 64791, 41827, 42466, 43422, 10579, 8560, 0, + 65413, 77963, 4803, 12964, 1739, 1941, 3900, 0, 1713, 77969, 0, 73957, 11407, 42441, 41971, 6297, 120098, 64105, 0, 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, 0, 6208, 0, - 5746, 73749, 0, 64416, 42422, 0, 0, 7082, 73775, 338, 5059, 194719, 0, - 42328, 10767, 0, 8115, 0, 0, 0, 8227, 0, 1218, 0, 0, 65848, 0, 0, 0, 0, - 126987, 4486, 0, 0, 0, 10925, 0, 0, 0, 0, 42309, 10257, 0, 10273, 0, - 10305, 42461, 0, 42349, 8832, 0, 64127, 10644, 0, 0, 42278, 74451, - 126988, 917857, 7794, 0, 42429, 11081, 42316, 119026, 3669, 3968, 42468, - 0, 0, 0, 65402, 119581, 0, 0, 64933, 0, 41960, 0, 0, 0, 0, 66678, 42391, - 1588, 65400, 8409, 0, 19967, 65398, 787, 0, 0, 0, 6115, 118940, 41654, - 42480, 0, 0, 41655, 65401, 0, 0, 0, 0, 644, 65500, 41657, 10778, 3659, - 9533, 184, 1553, 13107, 65484, 0, 10502, 74457, 0, 0, 41554, 0, 8220, 0, - 41557, 0, 0, 11070, 0, 5157, 4020, 73858, 41555, 9514, 64818, 65103, - 64641, 0, 119633, 7520, 0, 74377, 11029, 66651, 0, 0, 118930, 64527, 0, - 7877, 73803, 0, 0, 120096, 74602, 0, 0, 0, 42817, 0, 65212, 11715, 12190, - 12319, 0, 0, 0, 9502, 65427, 0, 65424, 0, 0, 9734, 65425, 0, 0, 0, 0, 0, - 10112, 10827, 0, 9866, 74527, 66675, 0, 8625, 64346, 11290, 10477, 0, - 8636, 0, 8315, 65444, 0, 0, 74595, 6152, 0, 0, 6629, 0, 120171, 0, 74589, - 0, 0, 0, 0, 0, 0, 11046, 11490, 43127, 4485, 0, 0, 64926, 0, 0, 0, 5869, - 12437, 0, 0, 7040, 3588, 0, 12825, 0, 0, 12725, 0, 0, 120167, 223, 0, 0, - 120166, 42444, 0, 64499, 65245, 0, 1171, 0, 120165, 0, 1805, 8772, 0, 0, - 65078, 65247, 0, 120111, 2338, 0, 118853, 0, 0, 0, 64800, 65236, 67644, - 68126, 1213, 0, 64075, 797, 64074, 8734, 4212, 0, 64387, 4115, 0, 5005, - 64070, 64073, 10679, 0, 0, 0, 64276, 426, 0, 0, 8251, 10136, 65436, 0, - 65088, 43302, 1224, 0, 65576, 0, 10701, 1764, 3101, 0, 65291, 120159, 0, - 11373, 74566, 0, 120103, 8663, 9312, 41644, 4539, 3787, 0, 9222, 0, 0, - 4259, 9092, 74567, 41961, 0, 12724, 66357, 42331, 64935, 0, 0, 1293, - 7947, 12003, 0, 74593, 120308, 2454, 74807, 3613, 0, 0, 0, 65888, 120307, - 10978, 10840, 0, 10668, 0, 43087, 12595, 120304, 0, 118806, 0, 1157, - 64903, 8638, 0, 0, 0, 0, 120319, 8235, 0, 4405, 10086, 0, 0, 0, 0, 65430, - 74013, 6079, 0, 10764, 0, 64291, 0, 998, 120312, 11062, 120313, 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, 0, 66373, 0, 0, 64908, 0, 6311, 0, 12004, 119192, 12049, - 43108, 0, 0, 41705, 0, 6598, 0, 6599, 0, 0, 42148, 118825, 66027, 0, - 6597, 9412, 8340, 11824, 64745, 0, 0, 0, 1988, 5407, 67865, 2430, 41678, - 0, 0, 2336, 0, 0, 0, 120442, 0, 1921, 10947, 19927, 0, 65406, 0, 19913, - 4284, 13217, 0, 0, 12841, 9229, 10956, 42285, 41674, 19964, 41679, 65084, - 3521, 0, 5774, 8325, 0, 65403, 0, 1854, 10794, 0, 0, 0, 0, 0, 5280, 0, - 4344, 12905, 65433, 6076, 64793, 41610, 768, 12074, 442, 0, 68162, 64081, - 12934, 41682, 65432, 41693, 0, 6071, 65434, 0, 4804, 6994, 0, 0, 0, - 41696, 467, 0, 0, 0, 0, 0, 8421, 0, 0, 64801, 502, 0, 65431, 0, 0, 12043, - 1303, 316, 0, 2029, 65191, 119246, 11533, 64365, 0, 0, 4860, 194645, 0, - 42488, 0, 9583, 0, 5546, 8019, 73856, 0, 0, 0, 5544, 2355, 12150, 65725, - 5543, 119245, 63751, 12137, 5548, 0, 0, 0, 0, 65726, 6077, 0, 65452, 0, - 11301, 0, 0, 0, 9874, 0, 0, 0, 3050, 65410, 0, 0, 0, 0, 42830, 0, 66716, - 0, 4691, 0, 9345, 621, 0, 0, 0, 65411, 0, 41182, 73881, 65408, 73899, 0, - 9474, 10545, 119118, 10887, 3786, 65409, 8894, 43179, 119611, 7923, 3716, + 74327, 7806, 0, 8914, 0, 0, 3183, 1435, 64876, 2969, 6046, 0, 6208, + 67849, 5746, 73749, 0, 64416, 42422, 0, 0, 7082, 73775, 338, 5059, + 194719, 0, 42328, 10767, 0, 8115, 0, 0, 0, 8227, 2073, 1218, 0, 0, 65848, + 0, 0, 0, 0, 126987, 4486, 0, 0, 0, 10925, 0, 0, 0, 0, 42309, 10257, 0, + 10273, 0, 10305, 42461, 0, 42349, 8832, 78051, 64127, 10644, 42662, + 78828, 42278, 74451, 126988, 917857, 7794, 0, 42429, 6377, 42316, 119026, + 3669, 3968, 42468, 0, 78544, 0, 65402, 119581, 0, 0, 64933, 0, 41960, + 6699, 0, 0, 0, 6823, 42391, 1588, 65400, 8409, 78223, 19967, 65398, 787, + 0, 917939, 0, 6115, 2078, 41654, 42480, 0, 0, 41655, 65401, 43975, 0, 0, + 0, 644, 65500, 41657, 10778, 3659, 9533, 184, 1553, 13107, 65484, 0, + 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, 0, 0, 118930, 64527, 0, 7877, 73803, 0, 0, + 120096, 74602, 9955, 0, 4055, 42817, 0, 65212, 11715, 12190, 12319, + 78630, 0, 78631, 9502, 65427, 0, 65424, 12607, 0, 9734, 65425, 0, 0, 0, + 78835, 0, 10112, 10827, 0, 9866, 74527, 66675, 0, 8625, 64346, 11290, + 10477, 0, 8636, 0, 8315, 65444, 0, 0, 74595, 6152, 0, 0, 6629, 0, 120171, + 0, 74589, 43993, 0, 69790, 0, 0, 43690, 11046, 11490, 42730, 4485, 0, 0, + 64926, 0, 0, 0, 5869, 12437, 42728, 0, 7040, 3588, 0, 12825, 0, 0, 12725, + 0, 0, 78642, 223, 0, 69806, 120166, 42444, 0, 64499, 65245, 0, 1171, 0, + 120165, 0, 1805, 8772, 0, 0, 9930, 65247, 78619, 120111, 2338, 0, 118853, + 0, 42676, 0, 64800, 65236, 67644, 68126, 1213, 0, 64075, 797, 64074, + 8734, 4212, 0, 64387, 4115, 0, 5005, 64070, 64073, 10679, 0, 77954, 0, + 64276, 426, 0, 0, 8251, 10136, 65436, 0, 65088, 43302, 1224, 0, 65576, + 120158, 10701, 1764, 3101, 0, 65291, 120159, 0, 11373, 6378, 0, 120103, + 8663, 9312, 41644, 4539, 3787, 0, 9222, 0, 0, 4259, 9092, 74567, 41961, + 0, 12724, 66357, 42331, 64935, 0, 0, 1293, 7947, 12003, 0, 74593, 120308, + 2454, 42717, 3613, 0, 0, 0, 65888, 8816, 10978, 10840, 0, 10668, 0, + 43087, 12595, 120304, 0, 118806, 0, 1157, 64903, 8638, 0, 0, 0, 0, + 120319, 8235, 120316, 4405, 10086, 120247, 0, 69216, 0, 65430, 74013, + 6079, 6817, 10764, 0, 64291, 0, 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, 0, + 66373, 0, 0, 64908, 0, 6311, 0, 12004, 119192, 12049, 43108, 0, 0, 41705, + 0, 6598, 0, 6599, 0, 0, 42148, 118825, 66027, 0, 6597, 9412, 8340, 11824, + 64745, 0, 0, 0, 1988, 5407, 67865, 2430, 41678, 0, 120243, 2336, 0, 0, + 78871, 120442, 0, 1921, 10947, 19927, 0, 65406, 0, 19913, 4284, 13217, 0, + 0, 12841, 9229, 10956, 42285, 41674, 19964, 41679, 65084, 3521, 0, 5774, + 8325, 0, 65403, 0, 1854, 10794, 0, 67660, 0, 0, 78359, 5280, 0, 4344, + 12905, 65433, 6076, 64793, 41610, 768, 12074, 442, 0, 68162, 64081, + 12934, 41682, 65432, 41693, 0, 6071, 65434, 0, 4804, 4053, 0, 0, 194653, + 41696, 467, 69823, 0, 69797, 0, 0, 8421, 0, 0, 43705, 502, 0, 65431, + 119056, 0, 12043, 1303, 316, 0, 2029, 65191, 119246, 11533, 64365, 43480, + 0, 4860, 194645, 0, 42488, 0, 9583, 0, 5546, 8019, 73856, 0, 0, 0, 5544, + 2355, 12150, 65725, 5543, 77989, 63751, 12137, 5548, 77985, 0, 65727, + 68388, 65726, 6077, 0, 65452, 0, 11301, 78013, 78008, 78010, 9874, 78007, + 0, 0, 3050, 65410, 0, 0, 78016, 78017, 42830, 43996, 66716, 0, 4691, 0, + 9345, 621, 0, 0, 0, 65411, 0, 41182, 73881, 65408, 73899, 78024, 9474, + 10545, 119118, 10887, 3786, 65409, 8894, 43179, 119611, 7923, 3716, 119341, 9996, 8508, 0, 7012, 8195, 0, 9566, 0, 3722, 0, 41707, 8493, 545, - 9575, 41379, 10050, 12718, 0, 8859, 41459, 0, 0, 120740, 0, 0, 9119, - 2787, 7920, 118823, 4021, 2012, 7985, 0, 119663, 0, 0, 0, 0, 410, 120449, - 1802, 120789, 74107, 0, 41659, 41671, 1827, 0, 64396, 10126, 12116, - 41673, 120370, 11422, 120372, 120373, 3860, 120367, 120368, 41345, - 120362, 120363, 11748, 42158, 7941, 11076, 8749, 120361, 12698, 64858, - 361, 120357, 845, 0, 41560, 11970, 4562, 917920, 2926, 0, 4569, 74130, 0, - 119221, 194630, 611, 74129, 64871, 0, 65629, 0, 0, 0, 0, 0, 120543, 0, 0, - 6291, 0, 0, 41669, 7094, 917921, 0, 0, 74054, 0, 0, 0, 839, 0, 7695, - 8769, 65246, 4829, 0, 4859, 64467, 0, 0, 118998, 7206, 0, 6647, 0, 0, 0, - 0, 64764, 4210, 0, 0, 804, 0, 0, 12298, 0, 0, 0, 64924, 10091, 73931, - 9468, 74245, 0, 0, 74246, 0, 12839, 64669, 0, 0, 1279, 1425, 6224, - 119229, 11049, 0, 917549, 0, 8482, 0, 0, 5032, 0, 11940, 67888, 664, 0, - 5034, 0, 0, 0, 0, 73888, 0, 13294, 67873, 64869, 6032, 0, 9115, 7430, - 120377, 0, 120819, 0, 120168, 73913, 120170, 41161, 5518, 4174, 10993, - 41162, 120160, 64528, 1169, 434, 41437, 1905, 6034, 41164, 64744, 9528, - 118867, 0, 524, 0, 74029, 788, 74027, 0, 0, 0, 1663, 10419, 74025, 42636, - 0, 0, 0, 120656, 0, 0, 0, 0, 0, 67897, 74039, 0, 0, 11395, 0, 119107, - 43612, 64344, 0, 0, 10855, 5445, 9355, 0, 65198, 0, 8989, 221, 65686, 0, - 0, 8010, 7191, 4962, 0, 8855, 0, 0, 64469, 0, 10555, 0, 0, 0, 0, 120427, - 10451, 0, 120152, 7245, 12443, 74405, 120148, 120149, 120150, 3873, 8367, - 0, 120146, 120147, 0, 66507, 0, 0, 11010, 12723, 74059, 74062, 6217, + 9575, 41379, 10050, 12718, 0, 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, 0, 4569, + 74130, 0, 43487, 194630, 611, 74129, 64871, 120379, 65629, 0, 0, 0, 0, 0, + 120543, 0, 0, 6291, 0, 78639, 41669, 7094, 917921, 0, 0, 74054, 0, + 195029, 0, 839, 0, 7695, 8769, 65246, 4829, 0, 4859, 64467, 0, 0, 118998, + 7206, 0, 6647, 43986, 0, 69766, 0, 64764, 4210, 0, 0, 804, 0, 0, 12298, + 0, 66653, 0, 64924, 10091, 73931, 9468, 74245, 0, 0, 74246, 0, 12839, + 64669, 0, 0, 1279, 1425, 6224, 119229, 11049, 0, 917549, 43239, 8482, 0, + 0, 5032, 77830, 11940, 67888, 664, 0, 5034, 0, 0, 127525, 42702, 73888, + 0, 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, 194668, 524, 0, + 74029, 788, 74027, 0, 0, 0, 1663, 10419, 74025, 42636, 0, 0, 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, 0, 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, 0, 74052, 0, 0, 120549, 119082, 64295, 120418, 0, 64765, 73923, 120417, 120662, 120730, 0, 6216, 0, 10755, 9455, 0, 8124, - 0, 9470, 6944, 0, 0, 0, 2828, 0, 531, 42638, 0, 0, 0, 73764, 8204, 3614, - 2827, 9696, 0, 0, 8728, 4354, 10904, 120502, 19936, 7833, 120691, 0, - 42599, 42597, 0, 120409, 0, 0, 8537, 0, 0, 0, 0, 0, 41199, 10121, 2028, - 0, 0, 0, 0, 3062, 0, 74447, 12608, 0, 66440, 7545, 9700, 12580, 0, - 120777, 0, 41155, 0, 74071, 0, 0, 12713, 0, 0, 0, 0, 0, 1734, 0, 0, 0, 0, - 2456, 231, 0, 74167, 542, 0, 118786, 0, 0, 1230, 0, 0, 3597, 9761, 10584, - 74235, 0, 4037, 0, 8352, 0, 5687, 0, 64515, 0, 0, 0, 67846, 0, 9704, 0, - 0, 74284, 0, 0, 8660, 0, 0, 0, 0, 74482, 4483, 1709, 0, 9909, 6080, 0, 0, - 1746, 1315, 8667, 0, 0, 13140, 65899, 10604, 0, 4480, 11266, 0, 1226, - 6930, 0, 0, 0, 10897, 41230, 605, 0, 74785, 120356, 0, 0, 41500, 0, 311, - 11453, 6221, 10608, 64943, 74280, 10877, 0, 64885, 74272, 0, 0, 0, 0, - 74312, 345, 0, 74456, 64606, 42589, 0, 0, 5037, 0, 1776, 8422, 0, 118814, - 41508, 41201, 323, 43328, 0, 120698, 1295, 0, 4625, 0, 4630, 13117, 0, 0, - 65123, 11293, 2668, 11288, 0, 42640, 65666, 2519, 0, 65420, 0, 0, 917886, - 5049, 0, 119011, 706, 7754, 10854, 8738, 0, 65419, 0, 0, 649, 65421, 0, + 127042, 9470, 6944, 0, 0, 0, 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, 0, 0, 0, 41199, + 10121, 2028, 0, 0, 0, 0, 3062, 0, 74447, 12608, 0, 66440, 7545, 9700, + 12580, 0, 120777, 120502, 41155, 0, 74071, 0, 0, 12713, 0, 0, 0, 78772, + 0, 1734, 0, 0, 0, 64594, 2456, 231, 0, 74167, 542, 0, 118786, 0, 0, 1230, + 0, 0, 3597, 4446, 10584, 74235, 0, 4037, 0, 8352, 0, 5687, 0, 64515, 0, + 0, 55265, 67846, 78434, 9704, 0, 0, 74284, 0, 0, 8660, 0, 0, 0, 78773, + 74482, 4483, 1709, 120617, 9909, 6080, 0, 0, 1746, 1315, 8667, 0, 0, + 13140, 65899, 10604, 0, 4480, 11266, 0, 1226, 6930, 0, 0, 6360, 10897, + 41230, 605, 0, 74785, 120356, 0, 0, 41500, 0, 311, 11453, 6221, 10608, + 64943, 74280, 10877, 118868, 64885, 74272, 0, 0, 0, 120736, 74312, 345, + 0, 74456, 64606, 9917, 0, 0, 5037, 0, 1776, 8422, 0, 118814, 41508, + 41201, 323, 43328, 0, 42698, 1295, 0, 4625, 0, 4630, 13117, 0, 0, 65123, + 11293, 2668, 11288, 0, 42640, 65666, 2519, 0, 65420, 0, 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, 0, 1183, 0, 7017, 42852, - 0, 8157, 9736, 64503, 65418, 0, 0, 74035, 0, 11913, 73874, 42848, 0, - 8920, 0, 0, 7962, 12211, 9837, 0, 66227, 0, 4184, 0, 0, 10177, 73777, - 1857, 0, 4626, 8464, 8472, 0, 4629, 8499, 0, 0, 4624, 7818, 194622, 0, 0, - 7805, 0, 0, 6935, 0, 0, 0, 0, 43327, 0, 119046, 8492, 8250, 8459, 0, - 8497, 8496, 0, 0, 0, 0, 9543, 0, 0, 0, 65849, 0, 0, 0, 0, 0, 8684, 0, - 6102, 0, 5298, 0, 5294, 0, 0, 0, 0, 0, 119826, 0, 119215, 0, 12073, 0, 0, - 0, 13108, 0, 74397, 41468, 0, 0, 5292, 0, 0, 1939, 5302, 3970, 0, 12455, - 1793, 0, 0, 0, 6643, 0, 65263, 0, 0, 41293, 0, 119125, 0, 13219, 9569, 0, - 74383, 0, 0, 0, 5500, 8813, 0, 0, 0, 5322, 0, 0, 0, 5324, 66443, 3784, - 41614, 65269, 6230, 0, 0, 43324, 3360, 0, 11523, 0, 0, 41732, 7197, 0, 0, - 0, 41821, 1249, 0, 0, 0, 118992, 0, 64899, 64763, 41149, 41807, 43162, - 41815, 41150, 0, 10571, 10096, 0, 0, 0, 6947, 41152, 887, 9249, 6565, 0, - 41990, 0, 41811, 74466, 0, 6670, 0, 0, 0, 43092, 43325, 0, 10168, 0, - 9781, 0, 9190, 0, 9666, 8269, 65944, 74005, 13019, 11670, 0, 315, 12813, - 0, 119648, 0, 0, 0, 0, 0, 0, 0, 1378, 9509, 0, 0, 74475, 3066, 0, 67847, - 0, 0, 0, 0, 8787, 0, 194616, 41618, 194615, 0, 194614, 0, 64652, 0, - 194612, 0, 0, 42088, 0, 0, 7176, 0, 10137, 6121, 10995, 0, 74534, 8119, - 64874, 0, 0, 0, 0, 74525, 0, 0, 12930, 1394, 74514, 0, 74515, 0, 118804, - 2998, 9527, 120659, 65190, 12977, 42090, 119165, 0, 119100, 41236, 0, - 65168, 42003, 41237, 5848, 0, 0, 3670, 0, 0, 0, 0, 7890, 0, 11298, 43315, - 0, 6229, 1593, 0, 0, 619, 4635, 65080, 0, 0, 4120, 65337, 65336, 0, - 11808, 119214, 74115, 9366, 42790, 42006, 0, 65327, 65326, 65325, 10757, - 1507, 65322, 65321, 65320, 65335, 65334, 65333, 65332, 65331, 42059, - 65329, 65328, 0, 9128, 118885, 42073, 41631, 64590, 0, 4371, 7196, 65318, - 2035, 65316, 4106, 65314, 65313, 42074, 0, 41228, 0, 119117, 41241, 7903, - 41239, 43533, 127099, 7189, 0, 0, 0, 12357, 42802, 0, 8487, 9131, 0, - 4615, 12695, 0, 0, 12175, 0, 64535, 0, 7809, 0, 0, 562, 12169, 6590, 0, - 66455, 64738, 3219, 0, 0, 0, 1037, 0, 2025, 0, 13098, 0, 10637, 4568, - 549, 1570, 0, 2835, 0, 10624, 194587, 11072, 0, 0, 0, 12606, 0, 2825, 0, - 10825, 8079, 2821, 41046, 0, 0, 0, 120593, 13071, 0, 452, 41049, 42840, - 43614, 2831, 0, 74596, 11465, 5212, 0, 64703, 119191, 42308, 7181, 0, - 41332, 0, 12333, 0, 1668, 0, 0, 0, 1187, 0, 42628, 0, 0, 0, 0, 3240, 0, - 12194, 0, 11591, 41065, 5323, 8166, 0, 0, 0, 74535, 1623, 65297, 0, 571, - 0, 4918, 0, 5288, 0, 8916, 65048, 1909, 8864, 0, 0, 10736, 0, 11571, - 7615, 0, 0, 4237, 0, 1035, 65815, 0, 7881, 701, 65936, 3489, 0, 0, 0, - 11403, 0, 0, 0, 3796, 0, 0, 3994, 11421, 0, 0, 0, 0, 0, 0, 64857, 0, - 2855, 0, 66308, 41621, 0, 0, 0, 10654, 0, 119226, 12164, 3246, 7906, 0, - 65847, 7182, 0, 13024, 194822, 119931, 0, 0, 0, 0, 1496, 747, 0, 942, - 2378, 43136, 0, 8466, 0, 9320, 8001, 1232, 8139, 11617, 0, 0, 11409, 0, - 0, 0, 66319, 0, 0, 11612, 0, 0, 2374, 0, 8475, 11609, 66313, 0, 0, 5286, - 119297, 0, 0, 64925, 0, 0, 0, 194583, 7705, 11942, 11305, 194581, 3309, - 0, 0, 0, 0, 11975, 0, 41653, 1280, 1241, 7168, 12096, 0, 0, 42565, 41651, - 0, 0, 0, 41650, 0, 66470, 0, 12914, 41491, 66010, 119552, 6078, 65100, 0, - 1475, 0, 0, 6084, 917546, 41064, 41062, 0, 0, 3256, 0, 42076, 0, 0, 0, - 8727, 0, 65875, 0, 0, 0, 10562, 74215, 67608, 0, 0, 3248, 74297, 3261, - 9015, 0, 0, 3635, 64337, 0, 0, 0, 7195, 0, 2007, 64431, 0, 0, 0, 0, 635, - 0, 0, 65613, 0, 0, 73997, 0, 0, 119218, 7984, 8600, 74434, 0, 4176, 0, - 2034, 0, 120805, 65891, 127038, 0, 318, 2038, 0, 0, 0, 3649, 13149, - 42145, 42798, 3634, 120291, 118927, 0, 120124, 7866, 0, 11402, 42146, - 120134, 74238, 120129, 2849, 127034, 0, 7938, 12960, 1761, 11812, 65379, - 74509, 0, 1159, 0, 0, 0, 0, 7178, 194632, 0, 41680, 0, 0, 11534, 1514, - 11668, 67891, 9313, 7015, 0, 67877, 0, 12989, 194560, 9368, 12848, 1624, - 43270, 0, 194563, 10818, 194562, 12649, 0, 0, 1194, 3242, 0, 9555, 8598, - 120299, 6169, 0, 1551, 2798, 65176, 120298, 42752, 119025, 0, 67875, - 120301, 3495, 66648, 0, 0, 0, 0, 4891, 0, 10641, 0, 73746, 0, 0, 0, - 73787, 0, 0, 7199, 64955, 0, 0, 0, 0, 0, 64952, 0, 193, 0, 0, 0, 0, 0, + 0, 8157, 9736, 64503, 65418, 0, 0, 74035, 0, 11913, 73874, 6696, 0, 8920, + 0, 0, 7962, 12211, 9837, 2051, 66227, 0, 4184, 0, 0, 10177, 73777, 1857, + 0, 4626, 8464, 8472, 0, 4629, 8499, 78321, 78322, 4624, 7818, 119173, 0, + 0, 7805, 0, 0, 6935, 0, 78325, 78326, 78323, 43327, 43989, 119046, 8492, + 8250, 8459, 0, 8497, 8496, 0, 0, 78336, 78339, 9543, 78335, 78332, 77832, + 65849, 77831, 0, 0, 12451, 0, 8684, 0, 6102, 0, 5298, 0, 5294, 0, 0, 0, + 195062, 9949, 119826, 43617, 119215, 0, 12073, 0, 0, 77863, 13108, 0, + 74397, 41468, 0, 0, 5292, 55272, 0, 1939, 5302, 3970, 0, 12455, 1793, 0, + 0, 0, 6643, 0, 65263, 0, 78330, 41293, 78328, 78329, 0, 13219, 9569, 0, + 74383, 0, 0, 0, 5500, 8813, 0, 0, 74566, 5322, 0, 78340, 43631, 5324, + 66443, 3784, 41614, 65269, 6230, 78349, 78345, 43324, 3360, 78344, 11523, + 0, 0, 9926, 7197, 0, 68429, 0, 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, 0, 6670, 77882, 0, 0, 43092, 43325, 0, 10168, 0, 9781, 194610, + 9190, 0, 9666, 8269, 65944, 74005, 13019, 11670, 0, 315, 12813, 0, 78432, + 78256, 78351, 78352, 0, 0, 0, 0, 1378, 9509, 0, 0, 74475, 3066, 0, 67847, + 0, 0, 0, 78365, 8787, 0, 194616, 41618, 194615, 78261, 194614, 0, 64652, + 0, 194612, 0, 78366, 42088, 0, 0, 7176, 0, 10137, 6121, 10995, 78259, + 74534, 8119, 64874, 917816, 0, 0, 0, 74525, 0, 0, 12930, 1394, 74514, 0, + 74515, 0, 118804, 2998, 9527, 120659, 65190, 12977, 42090, 119165, 0, + 119100, 41236, 0, 42005, 42003, 41237, 5848, 0, 0, 3670, 0, 194600, 0, 0, + 7890, 0, 11298, 43315, 0, 6229, 1593, 0, 0, 619, 4635, 65080, 0, 0, 4120, + 65337, 65336, 0, 11808, 119214, 74115, 9366, 42790, 42006, 0, 65327, + 65326, 65325, 10757, 1507, 42216, 65321, 65320, 65335, 65334, 65333, + 65332, 65331, 42059, 65329, 42689, 0, 9128, 118885, 42073, 6785, 64590, + 0, 4371, 7196, 65318, 2035, 65316, 4106, 65314, 65313, 42074, 0, 41228, + 0, 65609, 41241, 7903, 41239, 43533, 78459, 7189, 0, 0, 0, 12357, 42802, + 78450, 8487, 9131, 0, 4615, 12695, 0, 0, 12175, 0, 64535, 0, 7809, 0, 0, + 562, 12169, 6590, 69762, 66455, 64738, 3219, 68654, 0, 0, 1037, 0, 2025, + 0, 13098, 78442, 10637, 4568, 549, 1570, 0, 2835, 0, 10624, 43623, 11072, + 0, 0, 0, 12606, 78433, 2825, 0, 10825, 8079, 2821, 41046, 0, 0, 0, + 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, 0, 42628, 78575, 0, 0, 0, 3240, 0, 12194, 0, 11591, 41065, 5323, + 8166, 0, 0, 0, 74535, 1623, 65297, 0, 571, 0, 4918, 0, 5288, 127295, + 8916, 65048, 1909, 8864, 0, 0, 10736, 0, 11571, 7615, 0, 0, 4237, 0, + 1035, 65815, 0, 7881, 701, 65936, 3489, 0, 0, 120751, 11403, 0, 0, 0, + 3796, 6800, 0, 3994, 11421, 0, 0, 0, 0, 0, 0, 64857, 0, 2855, 0, 66308, + 41621, 68214, 0, 0, 10654, 0, 119226, 12164, 3246, 7906, 43972, 65847, + 7182, 0, 13024, 194822, 74270, 0, 0, 0, 0, 1496, 747, 0, 942, 2378, + 43136, 0, 8466, 0, 9320, 8001, 1232, 8139, 11617, 0, 0, 11409, 68373, + 6382, 0, 64634, 0, 0, 11612, 0, 67600, 2374, 0, 8475, 11609, 66313, 0, 0, + 5286, 119297, 0, 0, 64925, 0, 0, 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, 65100, 0, 1475, 0, 9938, 6084, 917546, 41064, 41062, + 0, 0, 3256, 0, 42076, 43252, 78823, 0, 8727, 0, 65875, 0, 0, 0, 10562, + 74215, 43065, 0, 0, 3248, 74297, 3261, 9015, 0, 0, 3635, 64337, 0, 0, 0, + 7195, 0, 2007, 64431, 0, 0, 0, 0, 635, 0, 0, 65613, 77909, 0, 73997, 0, + 0, 119218, 7984, 8600, 74434, 0, 4176, 0, 2034, 0, 120805, 65891, 127038, + 0, 318, 2038, 0, 78596, 0, 3649, 13149, 42145, 42798, 3634, 120291, + 118927, 67677, 120124, 7866, 0, 11402, 42146, 120134, 74238, 42664, 2849, + 127034, 0, 7938, 12960, 1761, 11812, 65379, 68386, 0, 1159, 0, 0, 0, 0, + 7178, 194632, 0, 41680, 0, 0, 11534, 1514, 11668, 67891, 9313, 7015, 0, + 67877, 0, 12989, 66474, 9368, 12848, 1624, 43270, 0, 194563, 10818, + 194562, 9953, 0, 78421, 1194, 3242, 9761, 9555, 8598, 120299, 6169, + 12871, 1551, 2798, 65176, 120298, 42752, 119025, 0, 67875, 120301, 3495, + 66648, 0, 0, 68364, 0, 4891, 0, 10641, 0, 73746, 0, 68352, 0, 73787, 0, + 194633, 7199, 64955, 0, 0, 0, 0, 0, 42685, 42679, 193, 0, 0, 0, 42667, 0, 5271, 0, 119661, 118882, 1362, 13297, 0, 0, 0, 0, 73789, 0, 6658, 4426, - 0, 0, 0, 119123, 7276, 42163, 5220, 0, 0, 0, 2416, 3310, 66030, 0, 379, - 0, 0, 0, 0, 3223, 65492, 1284, 0, 4549, 0, 0, 0, 0, 10807, 9558, 0, 0, - 8515, 8688, 12866, 0, 3294, 0, 0, 0, 0, 7564, 0, 43329, 0, 0, 73757, - 66456, 42359, 0, 2031, 0, 7202, 0, 12676, 66615, 0, 3215, 0, 7710, 1610, - 73801, 0, 0, 65682, 0, 0, 65924, 0, 228, 0, 1501, 0, 64395, 5179, 7200, - 6225, 0, 65794, 1725, 65533, 8196, 7476, 74399, 0, 0, 0, 8502, 5762, - 1967, 7483, 0, 0, 8104, 0, 7474, 0, 0, 0, 10414, 13001, 8141, 0, 42537, - 1557, 0, 0, 0, 0, 8631, 2545, 120672, 0, 0, 74190, 0, 0, 0, 42762, 0, 0, - 1650, 262, 1637, 0, 7901, 3238, 0, 41861, 0, 0, 65158, 10860, 0, 119134, - 7527, 0, 43319, 6419, 0, 45, 0, 0, 0, 0, 119810, 7194, 5291, 0, 0, 13129, - 0, 9084, 0, 8737, 0, 12881, 0, 12906, 9639, 7912, 2620, 0, 0, 0, 0, 179, - 65896, 0, 64756, 2853, 0, 118813, 0, 118996, 0, 2850, 8084, 0, 73850, - 2801, 119837, 42069, 119839, 74754, 119841, 42072, 119843, 119842, 74767, - 0, 0, 0, 0, 8245, 119313, 3158, 119853, 4389, 73813, 923, 119857, 119856, - 292, 13002, 119845, 119844, 3221, 1763, 119849, 4612, 119851, 119850, - 7253, 127110, 120618, 0, 10782, 3637, 12996, 43542, 0, 64578, 0, 3228, - 73869, 8783, 0, 119614, 2731, 0, 0, 118939, 4102, 7696, 73878, 0, 0, 0, - 43316, 4177, 11283, 9089, 0, 73996, 0, 64500, 68133, 0, 0, 1856, 0, 0, 0, - 0, 0, 0, 3208, 12975, 0, 0, 0, 0, 74072, 0, 0, 0, 0, 2033, 119008, 0, - 195026, 0, 7740, 0, 0, 0, 73964, 0, 0, 0, 65674, 0, 0, 41689, 0, 74006, - 64909, 6646, 11790, 74019, 0, 0, 0, 8561, 4573, 0, 5326, 0, 120605, 7230, - 8257, 0, 8778, 41688, 0, 65776, 0, 8314, 6459, 0, 7628, 65092, 73903, - 66721, 11342, 0, 0, 0, 0, 127001, 0, 11810, 13164, 10723, 967, 0, 0, - 11946, 0, 3257, 0, 12307, 1845, 0, 43526, 0, 0, 1886, 42342, 10089, 870, - 7648, 3499, 8609, 7652, 876, 871, 877, 0, 878, 42015, 879, 0, 4563, 0, 0, - 7591, 65887, 867, 9520, 872, 0, 868, 873, 7642, 0, 869, 874, 7644, 0, - 875, 790, 0, 0, 0, 0, 66182, 0, 5429, 0, 66180, 0, 66181, 0, 0, 0, 42067, - 0, 5433, 10657, 7911, 0, 1547, 66176, 42012, 0, 5425, 4977, 9999, 5317, - 5423, 4611, 0, 67637, 0, 9679, 74122, 0, 0, 0, 0, 4418, 66184, 4628, - 4245, 0, 0, 0, 1851, 0, 0, 11908, 0, 9360, 118897, 0, 42776, 66187, - 12837, 8829, 0, 0, 0, 0, 43318, 0, 8809, 119974, 0, 0, 120604, 0, 0, 0, - 0, 0, 0, 7427, 0, 4588, 0, 0, 74484, 0, 2433, 0, 119622, 3352, 74363, 0, - 0, 793, 74404, 0, 305, 567, 0, 842, 0, 8208, 0, 41695, 1647, 118877, 0, - 7837, 917625, 818, 5337, 917622, 917621, 41376, 119978, 917618, 120594, - 74086, 917615, 917614, 917613, 10973, 66359, 1372, 917609, 917608, 4969, - 1254, 917605, 917604, 917603, 917602, 65228, 0, 0, 0, 2840, 0, 119982, 0, - 0, 3245, 9068, 119069, 64725, 0, 0, 12991, 0, 2651, 0, 0, 917611, 0, 0, - 0, 0, 0, 0, 0, 43322, 0, 0, 0, 64372, 0, 3226, 655, 752, 7457, 7456, + 0, 0, 0, 119123, 7276, 42163, 5220, 0, 0, 0, 2416, 3310, 42703, 0, 379, + 0, 0, 0, 0, 3223, 65492, 1284, 194771, 4549, 0, 0, 0, 0, 10807, 9558, + 194613, 0, 8515, 8688, 12866, 0, 3294, 0, 8529, 0, 43385, 7564, 0, 43329, + 0, 0, 73757, 66456, 42359, 0, 2031, 0, 7202, 0, 12676, 42729, 0, 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, 0, 8502, 5762, 1967, 7483, 0, 0, 8104, 0, 7474, 0, 0, 0, 10414, 13001, + 8141, 0, 42537, 1557, 43594, 0, 6330, 6805, 8631, 2545, 120672, 0, 0, + 74190, 0, 0, 0, 42762, 0, 127017, 1650, 262, 1637, 0, 7901, 3238, 0, + 41861, 0, 0, 65158, 10860, 0, 43658, 7527, 0, 43319, 6419, 0, 45, 0, 0, + 0, 0, 119810, 7194, 5291, 0, 43666, 13129, 0, 9084, 0, 8737, 0, 12881, 0, + 12906, 9639, 7912, 2620, 0, 0, 0, 0, 179, 65896, 0, 64756, 2853, 0, + 118813, 0, 118996, 119009, 2850, 8084, 0, 73850, 2801, 119837, 42069, + 119839, 74754, 119841, 42072, 119843, 119842, 10398, 0, 0, 0, 0, 8245, + 68401, 3158, 119853, 4389, 43656, 923, 119857, 119856, 292, 13002, + 119845, 119844, 3221, 1763, 119849, 4612, 119851, 119850, 7253, 127110, + 68391, 0, 10782, 3637, 12996, 43542, 0, 64578, 0, 3228, 73869, 8783, 0, + 119614, 2731, 0, 0, 78585, 4102, 7696, 73878, 0, 0, 78586, 43316, 4177, + 11283, 9089, 0, 73996, 0, 64500, 43674, 0, 0, 1856, 0, 0, 6379, 0, 0, 0, + 3208, 12975, 0, 0, 0, 0, 74072, 55269, 0, 0, 0, 2033, 78577, 78576, + 195026, 55254, 7740, 0, 0, 0, 73964, 0, 0, 67612, 65674, 0, 0, 41689, 0, + 74006, 64909, 6646, 11790, 74019, 0, 0, 0, 8561, 4573, 0, 5326, 0, + 120605, 7230, 8257, 0, 8778, 41688, 0, 65776, 2071, 8314, 6459, 0, 7628, + 65092, 73903, 66721, 11342, 0, 0, 0, 0, 127001, 0, 11810, 13164, 10723, + 967, 0, 0, 11946, 0, 3257, 0, 12307, 1845, 0, 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, 0, 868, 873, 7642, 0, + 869, 874, 7644, 0, 875, 790, 0, 0, 0, 0, 66182, 0, 5429, 0, 66180, 0, + 66181, 68452, 0, 0, 42067, 0, 5433, 10657, 7911, 194622, 1547, 66176, + 42012, 120576, 5425, 4977, 9999, 5317, 5423, 4611, 0, 67637, 0, 9679, + 74122, 0, 0, 0, 0, 4418, 66184, 4628, 4245, 119648, 0, 0, 1851, 0, 0, + 11908, 0, 9360, 118897, 0, 42776, 66187, 12837, 8829, 7711, 0, 0, 119973, + 43318, 0, 8809, 119974, 0, 0, 120604, 0, 0, 0, 0, 0, 0, 7427, 0, 4588, + 43680, 0, 74484, 0, 2433, 0, 119622, 3352, 74363, 0, 0, 793, 74404, 0, + 305, 567, 67662, 842, 0, 8208, 0, 41695, 1647, 118877, 0, 7837, 917625, + 818, 5337, 917622, 917621, 41376, 119978, 917618, 120594, 74086, 917615, + 917614, 917613, 10973, 66359, 1372, 917609, 917608, 4969, 1254, 917605, + 917604, 917603, 917602, 65228, 78221, 0, 0, 2840, 0, 119982, 0, 0, 3245, + 9068, 68194, 64725, 0, 0, 12991, 0, 2651, 0, 0, 917611, 127026, 0, 0, 0, + 43648, 120812, 0, 43322, 0, 0, 0, 64372, 0, 3226, 655, 752, 7457, 7456, 7452, 3285, 0, 0, 119988, 65610, 0, 0, 0, 671, 250, 7434, 618, 668, 610, 42800, 7431, 1152, 42801, 640, 120666, 7448, 7439, 628, 3905, 73810, 0, - 0, 64749, 67850, 0, 0, 0, 0, 194873, 0, 0, 65945, 0, 0, 119590, 0, 0, 0, - 987, 6927, 11572, 42261, 11464, 3365, 0, 0, 0, 0, 0, 0, 0, 0, 11334, - 43326, 12609, 11519, 0, 5530, 5210, 0, 4627, 0, 5208, 0, 0, 10332, 5218, - 7976, 9156, 0, 3244, 5529, 0, 73894, 0, 5432, 64965, 5527, 74033, 10516, - 7790, 5528, 0, 42140, 120281, 0, 0, 43545, 120282, 0, 4000, 7429, 7428, - 665, 7424, 3206, 120279, 7884, 0, 0, 0, 0, 211, 2509, 0, 120573, 0, 3220, - 0, 0, 10690, 8951, 5214, 42474, 8118, 0, 7048, 4590, 0, 5852, 0, 0, 0, - 1708, 0, 0, 2623, 0, 0, 0, 0, 4698, 66509, 1066, 0, 4701, 0, 120285, - 74225, 119114, 8267, 0, 0, 0, 7516, 0, 2625, 0, 8034, 74309, 0, 3631, - 10955, 7850, 120293, 8416, 0, 0, 0, 0, 12660, 0, 0, 0, 74850, 41069, 0, - 0, 12099, 4310, 10032, 6252, 713, 7990, 0, 3990, 0, 0, 66368, 5017, - 64956, 7071, 0, 0, 1030, 118800, 0, 9513, 41059, 9357, 0, 1773, 0, - 120350, 0, 0, 7745, 9844, 0, 64650, 94, 1880, 74766, 0, 8908, 0, 0, - 65913, 0, 10752, 13003, 0, 0, 41307, 8732, 120338, 0, 1757, 6964, 4696, - 0, 0, 120806, 10029, 3641, 5419, 0, 0, 0, 0, 120344, 0, 0, 8610, 65230, - 7592, 856, 74299, 936, 13289, 0, 43171, 1459, 0, 65243, 0, 19953, 0, - 1504, 0, 0, 0, 74206, 7529, 0, 0, 0, 120782, 4113, 0, 2372, 336, 0, 7509, - 12152, 0, 682, 66458, 41505, 0, 64743, 10593, 1703, 0, 0, 8033, 0, 0, - 9810, 0, 0, 12970, 0, 42351, 10109, 0, 0, 0, 0, 119247, 0, 0, 74291, - 1965, 7069, 43312, 0, 73887, 0, 0, 64370, 6314, 41714, 8501, 0, 0, 74239, - 41317, 0, 5417, 0, 0, 0, 9353, 0, 41315, 917616, 0, 0, 6569, 0, 0, 0, - 119236, 634, 0, 0, 0, 917610, 4165, 8746, 0, 9654, 12856, 6924, 0, 7066, - 0, 0, 0, 41037, 0, 7786, 917607, 41039, 0, 0, 680, 6274, 0, 1181, 7056, - 3174, 0, 0, 0, 65665, 0, 0, 6920, 0, 0, 0, 0, 0, 64644, 126981, 0, 0, - 41028, 0, 6231, 2613, 65302, 40989, 0, 0, 0, 42760, 0, 0, 0, 40987, 4667, - 0, 0, 8828, 0, 0, 1246, 4746, 0, 0, 11021, 4749, 0, 0, 921, 4744, 0, - 12702, 242, 0, 1566, 8217, 0, 64653, 0, 0, 74036, 74505, 43274, 5313, - 951, 0, 0, 0, 7604, 0, 4009, 0, 0, 120562, 0, 0, 64860, 119138, 119902, - 0, 0, 4048, 0, 0, 120596, 1646, 0, 64534, 73995, 0, 0, 119890, 2579, - 119905, 3177, 11357, 9099, 4107, 3441, 119894, 2975, 74442, 9822, 0, 0, - 10084, 73943, 0, 0, 917562, 0, 3399, 9851, 0, 11909, 9059, 0, 7687, 0, - 8854, 0, 0, 0, 0, 0, 0, 1777, 9151, 1137, 0, 749, 42366, 0, 5385, 0, 0, - 0, 0, 5989, 0, 0, 0, 0, 41685, 0, 0, 9769, 41684, 0, 519, 0, 11740, 5766, - 0, 0, 2600, 8848, 120138, 41297, 0, 3666, 74473, 41300, 74468, 65160, 0, - 74542, 0, 74479, 0, 6558, 0, 0, 0, 120750, 252, 0, 41302, 0, 0, 0, 0, 0, - 11729, 8719, 9060, 0, 120139, 10761, 0, 0, 0, 118792, 11734, 0, 11730, 0, - 9593, 119188, 2403, 64808, 0, 0, 11728, 65894, 0, 0, 7764, 0, 0, 120825, - 0, 0, 4282, 8298, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8456, 0, 74783, 65670, 0, 0, - 0, 7774, 10607, 9792, 0, 0, 0, 0, 120764, 0, 10019, 74762, 0, 3458, 4365, - 0, 0, 3647, 0, 2602, 0, 0, 194707, 41135, 0, 0, 0, 64631, 172, 4971, - 41219, 41137, 1889, 7238, 6545, 0, 0, 7597, 10528, 0, 0, 3732, 73910, 0, - 5344, 0, 0, 0, 9062, 119252, 0, 0, 0, 64479, 9232, 0, 0, 0, 0, 10900, - 41531, 1263, 3720, 12048, 0, 64292, 41524, 7227, 119635, 6099, 41534, 0, - 0, 0, 299, 0, 8525, 0, 3524, 0, 8831, 0, 0, 3075, 0, 0, 0, 66362, 0, - 74758, 0, 0, 5845, 0, 0, 0, 2581, 8200, 65114, 74393, 0, 43283, 5551, 0, - 127085, 0, 0, 118855, 0, 0, 8680, 7204, 0, 2588, 2914, 7011, 0, 0, 2471, - 0, 2883, 2749, 119563, 73774, 10913, 0, 0, 8666, 675, 42493, 0, 0, 0, - 6219, 0, 0, 41232, 10928, 0, 41153, 41229, 118967, 0, 3738, 0, 0, 12711, - 3181, 66212, 74289, 0, 42857, 8262, 0, 0, 0, 0, 42347, 12092, 9615, 7234, - 74047, 0, 0, 64674, 0, 0, 73846, 0, 12722, 0, 922, 74426, 74507, 0, 0, - 3218, 120471, 74290, 120469, 64562, 120475, 8569, 11404, 11932, 73728, - 3214, 120461, 120468, 12128, 3207, 65486, 0, 1901, 0, 0, 120460, 7425, - 3205, 0, 0, 0, 0, 0, 0, 65459, 2606, 0, 73897, 0, 11496, 1173, 0, 41272, - 0, 0, 0, 0, 120737, 0, 0, 0, 378, 2610, 0, 65079, 0, 65695, 0, 37, 7068, - 0, 120480, 120479, 3209, 120477, 0, 10638, 9768, 120481, 0, 0, 0, 0, 0, - 0, 65510, 0, 0, 5233, 0, 64792, 0, 0, 0, 0, 7060, 9847, 0, 1685, 595, 0, - 73971, 1292, 8940, 0, 11088, 0, 10004, 126997, 0, 6541, 0, 0, 0, 3243, - 9014, 5606, 0, 538, 64620, 5602, 8467, 74391, 6547, 0, 8203, 0, 0, 8458, - 65211, 8495, 0, 0, 917552, 779, 0, 64367, 2465, 0, 8193, 0, 9730, 9280, - 0, 7065, 74155, 4346, 0, 73798, 504, 0, 120715, 8982, 0, 0, 0, 782, 0, - 10883, 0, 917876, 732, 3737, 0, 1548, 0, 0, 1832, 5604, 5735, 41141, 0, - 4376, 0, 41142, 3745, 0, 0, 42888, 65712, 0, 3869, 11937, 5725, 0, 1783, - 0, 5728, 0, 0, 0, 11918, 66567, 5724, 0, 5727, 0, 0, 0, 764, 0, 0, 43531, - 0, 9033, 0, 42532, 6223, 11042, 0, 11423, 0, 0, 0, 0, 0, 0, 6559, 64557, - 0, 0, 120648, 43019, 0, 10238, 0, 0, 0, 120675, 0, 1478, 9783, 0, 2607, + 0, 64749, 67850, 2107, 0, 0, 4605, 194873, 0, 43372, 65945, 0, 0, 119590, + 0, 0, 0, 987, 6927, 11572, 42261, 11464, 3365, 9971, 0, 0, 0, 0, 0, 0, 0, + 11334, 43326, 12609, 11519, 11503, 5530, 5210, 0, 4627, 0, 5208, 0, 0, + 10332, 5218, 7976, 9156, 0, 3244, 5529, 0, 73894, 0, 5432, 64965, 5527, + 74033, 10516, 7790, 5528, 0, 42140, 120281, 0, 0, 43545, 9887, 0, 4000, + 7429, 7428, 665, 7424, 3206, 120278, 7884, 0, 0, 0, 0, 211, 2509, 0, + 120573, 68672, 3220, 42235, 0, 10690, 8951, 5214, 42474, 8118, 0, 7048, + 4590, 127258, 5852, 0, 0, 127259, 1708, 0, 0, 2623, 11943, 0, 69226, 0, + 4698, 66509, 1066, 119921, 4701, 0, 120285, 74225, 119114, 8267, 0, 0, 0, + 7516, 0, 2625, 0, 8034, 74309, 0, 3631, 10955, 7850, 120293, 8416, 0, 0, + 0, 43384, 12660, 0, 0, 0, 74850, 41069, 0, 0, 12099, 4310, 10032, 6252, + 713, 7990, 0, 3990, 0, 0, 66368, 5017, 64956, 7071, 0, 119144, 1030, + 118800, 0, 9513, 41059, 9357, 0, 1773, 0, 120350, 0, 6339, 7745, 9844, 0, + 64650, 94, 1880, 74766, 0, 8908, 0, 0, 65913, 78470, 10752, 13003, 0, 0, + 41307, 8732, 120338, 0, 1757, 6964, 4696, 0, 0, 64785, 7394, 3641, 5419, + 0, 0, 0, 0, 120344, 43988, 0, 8610, 43062, 7592, 856, 74299, 936, 13289, + 127521, 43171, 1459, 0, 65243, 78638, 19953, 0, 1504, 0, 0, 12913, 74206, + 7529, 0, 0, 0, 120782, 4113, 0, 2372, 336, 0, 7509, 12152, 0, 682, 66458, + 41505, 0, 64743, 10593, 1703, 0, 0, 8033, 0, 0, 9810, 127269, 0, 12970, + 0, 42351, 10109, 0, 0, 194693, 0, 119247, 0, 0, 74291, 1965, 7069, 43312, + 0, 73887, 0, 2087, 64370, 6314, 41714, 8501, 0, 0, 74239, 41317, 0, 2091, + 0, 2090, 0, 9353, 77887, 2077, 77886, 0, 10498, 2083, 77888, 0, 0, + 119236, 634, 0, 0, 0, 69779, 4165, 8746, 0, 9654, 12856, 6924, 0, 7066, + 0, 0, 0, 41037, 42692, 7786, 12959, 41039, 0, 0, 680, 6274, 0, 1181, + 7056, 3174, 0, 0, 0, 65665, 0, 0, 6920, 0, 0, 0, 118965, 0, 64644, + 126981, 0, 0, 41028, 0, 6231, 2613, 65302, 40989, 0, 194696, 0, 42760, 0, + 0, 0, 40987, 4667, 0, 0, 8828, 0, 0, 1246, 4746, 0, 0, 11021, 4749, 0, 0, + 921, 4744, 0, 12702, 242, 0, 1566, 8217, 0, 64653, 78386, 0, 74036, + 74505, 43274, 5313, 951, 0, 0, 0, 7604, 0, 4009, 0, 0, 120562, 0, 0, + 64860, 119138, 119887, 0, 194702, 4048, 0, 0, 120596, 1646, 77890, 64534, + 73995, 0, 0, 119890, 2579, 119905, 3177, 11357, 9099, 4107, 3441, 119894, + 2975, 74442, 9822, 0, 55220, 10084, 73943, 118840, 0, 917562, 0, 3399, + 9851, 0, 11909, 9059, 0, 7687, 0, 6789, 0, 0, 0, 0, 0, 0, 1777, 9151, + 1137, 69767, 749, 42366, 0, 5385, 0, 0, 0, 0, 5989, 0, 0, 0, 0, 41685, + 69223, 0, 9769, 41684, 0, 519, 0, 11740, 5766, 0, 0, 2600, 8848, 120138, + 41297, 0, 3666, 74473, 41300, 74468, 65160, 0, 74542, 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, 0, 11730, 0, 9593, 5757, + 2403, 64808, 55275, 0, 11728, 65894, 0, 0, 7764, 0, 11094, 120825, 0, 0, + 4282, 8298, 0, 0, 0, 0, 0, 0, 0, 127509, 63854, 8456, 0, 74783, 65670, 0, + 78250, 0, 7774, 10607, 9792, 0, 0, 0, 0, 120764, 0, 10019, 74762, 0, + 3458, 4365, 0, 0, 3647, 0, 2602, 0, 0, 194707, 41135, 0, 0, 0, 64631, + 172, 4971, 41219, 41137, 1889, 7238, 6545, 0, 0, 7597, 10528, 0, 0, 3732, + 73910, 194588, 5344, 0, 43366, 43363, 9062, 119252, 0, 0, 0, 64479, 9232, + 0, 0, 0, 194712, 10900, 41531, 1263, 3720, 12048, 0, 64292, 41524, 7227, + 119635, 6099, 41534, 0, 0, 0, 299, 0, 8525, 0, 3524, 917565, 8831, 0, 0, + 3075, 67867, 0, 0, 66362, 0, 74758, 0, 0, 5845, 0, 0, 0, 2581, 8200, + 65114, 68460, 0, 43283, 5551, 0, 120735, 0, 6340, 118855, 0, 78134, 8680, + 7204, 0, 2588, 2914, 7011, 55281, 0, 2471, 0, 2883, 2749, 119563, 73774, + 10913, 0, 0, 8666, 675, 42493, 0, 43571, 0, 6219, 0, 9980, 41232, 10928, + 0, 41153, 41229, 118967, 0, 3738, 0, 0, 12711, 3181, 66212, 74289, 68472, + 42857, 8262, 0, 0, 0, 0, 42347, 12092, 9615, 7234, 74047, 0, 0, 64674, 0, + 0, 73846, 0, 12722, 0, 922, 43983, 74507, 0, 74461, 3218, 120471, 74290, + 120469, 64562, 120475, 8569, 11404, 11932, 73728, 3214, 120461, 120468, + 12128, 3207, 65486, 78729, 1901, 78727, 0, 120460, 7425, 3205, 0, 78737, + 78736, 78735, 43383, 78733, 65459, 2606, 78730, 73897, 0, 11496, 1173, 0, + 41272, 0, 0, 0, 0, 120737, 0, 0, 0, 378, 2610, 0, 65079, 0, 65695, 0, 37, + 7068, 0, 120480, 120479, 3209, 120477, 0, 10638, 9768, 120481, 0, 0, 0, + 0, 0, 0, 65510, 0, 0, 5233, 0, 64792, 0, 0, 0, 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, 0, + 8203, 78488, 0, 8458, 65211, 8495, 119904, 0, 917552, 779, 78314, 64367, + 2465, 0, 8193, 55279, 9730, 9280, 0, 7065, 74155, 4346, 0, 73798, 504, 0, + 120715, 8982, 0, 0, 0, 782, 0, 10883, 0, 194852, 732, 3737, 127253, 1548, + 68650, 0, 1832, 5604, 5735, 41141, 119020, 4376, 0, 11787, 3745, 0, 0, + 42888, 65712, 0, 3869, 11937, 5725, 0, 1783, 68648, 5728, 0, 0, 0, 11918, + 66567, 5724, 0, 5727, 0, 0, 0, 764, 0, 0, 43531, 0, 9033, 0, 42532, 6223, + 11042, 120749, 11423, 0, 0, 0, 43465, 0, 0, 6559, 64557, 0, 0, 120648, + 43019, 43477, 10238, 0, 0, 43377, 120675, 0, 1478, 9783, 11825, 2607, 64740, 0, 7739, 74543, 0, 0, 0, 6132, 0, 63765, 0, 0, 41144, 0, 0, 43537, - 0, 10093, 4369, 917791, 0, 0, 8820, 3947, 0, 0, 11515, 526, 0, 41295, - 194603, 917785, 0, 0, 7688, 917786, 7686, 8288, 11815, 0, 0, 0, 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, 7052, 0, 0, 12990, 1160, 42084, 119650, 41217, - 119660, 10018, 360, 0, 0, 68176, 5863, 3137, 0, 4147, 0, 41216, 7844, - 2616, 119190, 0, 65234, 0, 13076, 3135, 0, 0, 119139, 3142, 194948, 0, - 10819, 119580, 10183, 0, 2608, 1470, 73967, 0, 6227, 0, 0, 74775, 0, - 6163, 0, 0, 0, 0, 0, 8603, 0, 119866, 3306, 10876, 0, 119573, 0, 5834, 0, - 6222, 0, 0, 12086, 0, 1600, 64309, 64939, 0, 64783, 0, 11310, 0, 8882, 0, - 0, 2570, 7021, 0, 0, 43110, 0, 1234, 6540, 6974, 0, 0, 0, 5002, 0, 41286, - 0, 127019, 0, 43585, 0, 6551, 0, 0, 0, 41289, 0, 0, 0, 8977, 602, 120814, - 0, 0, 0, 0, 0, 41279, 0, 0, 0, 0, 43615, 0, 0, 0, 0, 12727, 0, 0, 0, - 9475, 0, 65105, 0, 9633, 10886, 43592, 7831, 0, 0, 0, 73915, 8076, 43048, - 8290, 8291, 43051, 0, 0, 2596, 43584, 0, 13113, 0, 0, 2393, 7058, 9087, - 74067, 0, 41574, 0, 0, 74058, 42035, 0, 0, 0, 0, 9854, 0, 64696, 0, 0, 0, - 74165, 0, 1720, 0, 0, 0, 6529, 7063, 0, 3751, 9120, 0, 0, 1798, 709, 0, - 1354, 1876, 13152, 6557, 12430, 8137, 0, 0, 0, 0, 245, 0, 11456, 41233, - 7070, 0, 0, 6136, 0, 65677, 8682, 41235, 0, 42045, 9804, 0, 432, 3595, 0, - 65437, 0, 74455, 42399, 0, 0, 0, 0, 119658, 0, 0, 0, 0, 8797, 0, 9052, - 64888, 0, 2356, 95, 74784, 10580, 0, 42286, 0, 64640, 0, 119104, 0, 0, 0, - 10063, 12652, 12199, 127030, 0, 2566, 11971, 0, 0, 1065, 0, 0, 0, 2576, - 0, 0, 0, 43604, 0, 0, 74082, 514, 74502, 0, 2921, 43215, 64493, 5772, - 12968, 0, 0, 74580, 917565, 2580, 0, 41341, 41223, 6564, 1463, 41342, 0, - 5293, 0, 0, 3733, 11346, 0, 12054, 0, 74098, 42827, 0, 13091, 0, 0, 0, - 917915, 0, 127026, 0, 74821, 0, 0, 119042, 0, 0, 13090, 66643, 0, 1270, - 1132, 42360, 0, 74096, 66655, 42569, 0, 0, 64761, 0, 41021, 8510, 42432, - 0, 0, 0, 0, 64496, 74109, 0, 9915, 0, 0, 7061, 41336, 3854, 0, 13141, - 917564, 0, 42319, 13082, 0, 7067, 0, 0, 0, 0, 0, 0, 0, 9029, 43543, 0, - 2353, 6308, 0, 74792, 2611, 119186, 0, 0, 0, 0, 0, 66627, 0, 4484, 8509, - 118976, 0, 65233, 0, 41224, 41017, 0, 3747, 10522, 0, 0, 1691, 41226, 0, - 12107, 0, 10905, 65010, 0, 697, 66018, 9284, 4244, 0, 0, 0, 13121, 0, 0, - 12010, 0, 0, 0, 0, 0, 0, 65816, 68111, 0, 0, 65668, 0, 0, 118784, 66365, - 0, 0, 12648, 0, 0, 0, 5785, 41309, 9764, 41316, 65877, 0, 13230, 41299, - 0, 0, 0, 0, 0, 0, 0, 13122, 0, 191, 74119, 0, 8000, 64411, 120652, 42889, - 64850, 41072, 41578, 0, 41577, 0, 10002, 0, 6533, 73802, 41570, 0, 683, - 396, 41580, 68146, 0, 12901, 0, 0, 343, 0, 0, 41360, 0, 0, 4743, 0, 0, - 74040, 74108, 8743, 1724, 1433, 119324, 0, 3739, 6263, 0, 0, 3964, 6592, - 0, 0, 66040, 0, 42568, 0, 0, 1778, 3956, 0, 42070, 6563, 43075, 9018, 0, - 0, 12067, 41312, 0, 5547, 0, 0, 0, 8175, 0, 284, 8108, 934, 0, 74001, - 173, 66460, 7174, 0, 0, 1750, 0, 4394, 0, 1807, 0, 0, 0, 5889, 0, 7180, - 0, 119145, 0, 0, 42471, 6982, 1721, 119144, 7891, 42243, 42160, 2583, - 4512, 0, 0, 0, 0, 0, 3855, 0, 0, 0, 0, 74295, 0, 0, 119140, 3975, 0, - 74087, 0, 12672, 3798, 2703, 0, 0, 0, 9774, 1275, 0, 0, 41095, 3962, 0, - 7873, 41101, 3954, 6457, 4513, 0, 0, 73994, 73992, 1468, 0, 0, 41851, 0, - 41846, 0, 0, 7633, 41849, 0, 4320, 3224, 0, 0, 0, 42531, 0, 1510, 0, - 8256, 0, 11393, 0, 8879, 0, 0, 8770, 0, 0, 127120, 1910, 8671, 0, 4283, - 0, 127117, 0, 0, 2654, 7893, 0, 0, 0, 0, 65106, 42761, 12857, 4581, 8411, - 119029, 127121, 0, 0, 0, 0, 0, 0, 1733, 4392, 2568, 10786, 0, 0, 8184, - 41486, 0, 0, 0, 0, 0, 0, 7185, 7965, 0, 0, 0, 0, 41350, 9129, 0, 0, 0, 0, - 0, 0, 10481, 0, 0, 7171, 0, 340, 0, 0, 0, 0, 0, 0, 0, 917620, 0, 0, 0, 0, - 0, 65203, 11392, 0, 0, 0, 3210, 0, 0, 0, 0, 0, 0, 917619, 0, 0, 10043, 0, - 1186, 41571, 6999, 617, 9464, 0, 3675, 5207, 65062, 5213, 0, 2617, 41348, - 41568, 0, 3253, 120535, 0, 8630, 0, 0, 5596, 5545, 7288, 2586, 64887, 0, - 5217, 0, 0, 0, 0, 64293, 68098, 2635, 0, 0, 0, 0, 0, 7835, 0, 0, 194988, - 0, 64558, 0, 0, 0, 0, 0, 0, 5784, 0, 0, 0, 0, 4011, 0, 68101, 0, 7864, - 4254, 118975, 0, 5600, 3903, 127083, 10447, 5598, 1207, 120521, 0, 3501, - 42582, 43600, 0, 0, 1124, 5597, 0, 0, 9321, 0, 0, 0, 0, 1719, 120576, 0, - 9671, 1125, 4399, 0, 0, 0, 7631, 5488, 65223, 0, 0, 5491, 0, 8937, 43044, - 2604, 74187, 5490, 43046, 5489, 7212, 11768, 43043, 6300, 0, 194789, 0, - 4390, 454, 41397, 0, 9875, 7593, 194792, 0, 118913, 7207, 0, 65901, 2394, - 2575, 0, 3746, 11016, 65752, 0, 0, 917944, 0, 11989, 0, 0, 0, 0, 0, 8249, - 0, 0, 0, 6640, 74806, 2598, 513, 0, 6586, 8656, 0, 0, 65008, 0, 194784, - 0, 194795, 0, 0, 194987, 0, 0, 0, 194986, 12647, 0, 194796, 0, 1036, 0, - 0, 1723, 0, 0, 0, 41579, 2444, 0, 10705, 73876, 0, 74486, 0, 740, 194985, - 0, 194984, 0, 4238, 11071, 9459, 917943, 0, 0, 0, 8121, 10438, 74487, - 42574, 13285, 195001, 11907, 0, 5690, 194999, 0, 0, 43181, 13095, 0, 0, - 64498, 0, 9506, 6978, 194993, 0, 0, 0, 194992, 0, 0, 1122, 317, 0, 0, 0, - 0, 1920, 0, 10173, 827, 0, 0, 0, 120126, 5223, 1304, 0, 119564, 5226, - 12602, 0, 0, 9329, 7758, 9239, 41173, 5224, 5487, 1222, 5692, 41725, 0, - 9674, 5695, 41711, 64627, 19909, 0, 74604, 5691, 287, 866, 233, 0, 0, - 42816, 0, 65140, 74797, 0, 8830, 6568, 42300, 10524, 41175, 0, 0, 0, - 5296, 0, 42492, 0, 0, 3302, 0, 0, 6516, 6515, 6514, 6513, 6512, 0, 7856, - 8690, 0, 0, 12122, 119628, 194813, 0, 1785, 0, 120635, 65153, 194810, - 5138, 0, 0, 0, 0, 4540, 41181, 0, 6200, 0, 5134, 0, 322, 4643, 5132, 0, - 0, 0, 5143, 0, 8790, 0, 0, 194802, 0, 8869, 120601, 0, 42060, 0, 0, 0, 0, - 10270, 10286, 10318, 10382, 43529, 66477, 0, 0, 74170, 0, 3234, 0, 0, - 74376, 43139, 118924, 127084, 120627, 8767, 0, 74489, 41281, 120746, - 5201, 0, 6215, 12714, 6214, 13101, 0, 0, 65268, 0, 0, 0, 11027, 0, 10059, - 10511, 42075, 9767, 789, 1749, 0, 127071, 0, 320, 0, 8647, 0, 3049, 0, - 6471, 42071, 43156, 0, 0, 0, 0, 4960, 5549, 0, 0, 8485, 4671, 5418, 0, - 3351, 0, 0, 10610, 5414, 3064, 6212, 4286, 5421, 0, 9554, 0, 0, 0, 6653, - 0, 0, 64510, 6213, 12885, 0, 119045, 64720, 0, 120759, 73741, 12603, 0, - 11430, 4566, 7843, 9317, 3801, 10342, 10406, 0, 119259, 42576, 0, 5200, - 0, 0, 0, 9183, 0, 74458, 73825, 395, 5482, 5198, 8786, 10390, 74202, - 5196, 43224, 6113, 42009, 5205, 0, 43307, 0, 118973, 0, 12134, 0, 0, - 118843, 9126, 435, 0, 12014, 12893, 8093, 9079, 3203, 192, 65109, 3385, - 0, 64430, 5383, 10294, 10326, 0, 5738, 0, 3336, 0, 5361, 3623, 41159, 0, - 68112, 7872, 8581, 0, 1260, 3149, 5359, 0, 0, 7914, 5357, 0, 0, 2624, - 5364, 0, 11431, 0, 9101, 11058, 0, 0, 0, 42271, 0, 65737, 120793, 0, 0, - 0, 10619, 0, 0, 0, 0, 0, 0, 0, 0, 9319, 7097, 119055, 0, 3232, 73824, - 74581, 0, 0, 0, 41889, 0, 0, 1161, 41895, 74103, 9701, 8622, 0, 0, 73819, - 120588, 5012, 119049, 41362, 0, 917762, 11921, 0, 11769, 0, 0, 41364, 0, - 74228, 41352, 41361, 0, 41366, 0, 3356, 0, 917, 0, 119915, 119923, 8199, - 119912, 119917, 677, 119916, 0, 119932, 0, 0, 0, 0, 3349, 74125, 7022, - 8927, 4739, 0, 5802, 0, 8615, 0, 0, 491, 0, 0, 0, 65837, 0, 8426, 11092, - 9891, 0, 42497, 0, 7586, 42305, 10852, 0, 0, 0, 0, 9095, 7741, 12684, - 41885, 1046, 0, 0, 0, 5815, 5171, 65539, 0, 6932, 0, 42394, 41878, 74849, - 917951, 0, 5169, 11935, 0, 0, 3175, 120822, 1537, 120804, 5176, 8905, - 4136, 4871, 0, 0, 9833, 0, 0, 1128, 65920, 0, 9711, 7057, 9408, 9409, - 9410, 9411, 3662, 9413, 3378, 9415, 9416, 9417, 9418, 8909, 9420, 9421, - 5897, 9423, 5165, 5126, 41385, 0, 41389, 917938, 8955, 3374, 9400, 9401, - 9402, 9403, 9404, 3507, 9406, 7629, 0, 19925, 0, 73832, 183, 0, 2631, 0, - 10627, 41130, 0, 3996, 0, 0, 0, 0, 119307, 0, 6580, 4332, 64825, 66329, - 10726, 66686, 41125, 5899, 41365, 917918, 12085, 0, 574, 917922, 0, - 73828, 5448, 41058, 5446, 73900, 41322, 74768, 5442, 4190, 0, 0, 5451, 0, - 3616, 0, 0, 0, 7708, 0, 10859, 65867, 10345, 10409, 4191, 0, 120719, - 73800, 42181, 0, 0, 4447, 0, 120708, 11788, 65587, 0, 10415, 74102, 0, - 205, 0, 10351, 119076, 0, 9862, 6588, 0, 64697, 0, 41355, 5505, 119154, - 5503, 8021, 0, 119150, 9819, 41357, 8011, 42885, 5507, 12044, 0, 0, - 10026, 5472, 65108, 1191, 13106, 5470, 10329, 5476, 8991, 66322, 0, 0, - 42874, 8550, 42876, 5592, 2919, 0, 2675, 5595, 0, 0, 4367, 0, 0, 5478, - 5904, 5594, 0, 74150, 7291, 5590, 0, 13067, 118909, 0, 0, 9731, 0, 64633, - 194565, 0, 0, 0, 0, 0, 10750, 0, 0, 74545, 0, 0, 12887, 10551, 194564, 0, - 0, 0, 120570, 0, 5199, 0, 1120, 42387, 0, 1444, 9486, 7554, 65839, 0, 0, - 1442, 0, 5894, 0, 0, 0, 0, 74313, 0, 13162, 0, 3334, 0, 118803, 0, 66022, - 0, 0, 1651, 0, 8861, 0, 0, 1142, 0, 8271, 0, 0, 0, 12903, 0, 4002, 0, - 10442, 10676, 3344, 0, 0, 12920, 0, 0, 0, 0, 1277, 0, 7871, 0, 0, 0, 0, - 119015, 120360, 0, 11784, 0, 0, 4700, 66366, 0, 120359, 11012, 0, 0, - 120358, 0, 4973, 8784, 0, 74804, 0, 0, 118981, 42440, 0, 43118, 0, 42364, - 0, 11543, 0, 0, 10346, 10410, 0, 9243, 2464, 0, 6108, 3372, 0, 6247, - 43117, 74526, 0, 74166, 0, 120355, 0, 0, 0, 0, 0, 0, 0, 74217, 3354, 0, - 4192, 9289, 118999, 41191, 3876, 0, 0, 120660, 0, 0, 0, 0, 0, 0, 11603, - 0, 0, 6589, 0, 194679, 0, 0, 0, 0, 0, 42572, 0, 10630, 74827, 1963, - 118889, 0, 11654, 0, 7550, 10686, 5903, 0, 0, 41329, 9662, 917937, 64698, - 3366, 10399, 0, 0, 11013, 0, 917933, 0, 0, 0, 6925, 0, 0, 917929, 0, - 11568, 0, 917931, 64579, 917930, 7852, 0, 0, 12292, 6312, 0, 64672, - 65296, 0, 118957, 0, 416, 12296, 74753, 73834, 0, 11050, 10984, 0, 0, 0, - 0, 0, 0, 9532, 66355, 0, 0, 917925, 64343, 195032, 0, 195031, 0, 0, - 195057, 11445, 0, 195028, 0, 195027, 0, 1021, 0, 9507, 10210, 74544, - 8023, 1200, 12243, 195062, 5282, 195061, 12540, 11545, 0, 120493, 3343, - 4424, 11047, 1885, 43268, 3896, 0, 66497, 2947, 392, 7894, 4391, 68139, - 0, 13059, 74816, 0, 3381, 7942, 0, 0, 0, 0, 0, 3913, 0, 0, 0, 7044, 1265, - 0, 6309, 7045, 7175, 7047, 0, 11791, 0, 0, 8221, 0, 41864, 0, 0, 0, 0, - 167, 0, 917584, 0, 74211, 41897, 0, 0, 0, 0, 0, 2493, 0, 118811, 0, 0, - 64354, 0, 8777, 0, 406, 8884, 2385, 0, 0, 0, 0, 43030, 42027, 12114, 0, - 0, 64936, 0, 0, 120629, 10561, 0, 8365, 0, 0, 65841, 120787, 11601, 0, 0, - 0, 917575, 7834, 74159, 0, 0, 10298, 6624, 4908, 917596, 1639, 0, 0, - 74157, 0, 0, 0, 0, 0, 0, 4817, 0, 194759, 0, 7043, 9600, 11022, 0, 0, 0, - 0, 0, 0, 7548, 64794, 42050, 12291, 0, 194761, 12343, 657, 195054, 64682, - 4461, 1134, 1838, 0, 0, 0, 4468, 0, 0, 0, 4456, 5206, 10720, 0, 42523, 0, - 0, 0, 0, 65550, 260, 4816, 74163, 10687, 0, 4821, 4466, 0, 195043, 4818, + 6761, 10093, 4369, 917791, 0, 0, 8820, 3947, 0, 0, 11515, 526, 0, 41295, + 194603, 917785, 194932, 0, 7688, 917786, 7686, 8288, 11815, 0, 0, 0, + 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, 0, 41216, + 7844, 2616, 119190, 68461, 65234, 0, 13076, 3135, 0, 78143, 119139, 3142, + 194948, 0, 10819, 119580, 10183, 0, 2608, 1470, 73967, 0, 6227, 0, 0, + 74775, 0, 6163, 0, 0, 0, 0, 0, 8603, 0, 119866, 3306, 10876, 43392, + 119573, 0, 5751, 0, 6222, 0, 0, 12086, 7403, 1600, 64309, 64939, 0, + 64783, 0, 11310, 0, 8882, 0, 0, 2570, 7021, 0, 0, 43110, 0, 1234, 6540, + 6974, 0, 0, 0, 5002, 0, 41286, 0, 127019, 0, 43585, 0, 6551, 0, 0, 0, + 41289, 0, 0, 0, 8977, 602, 120814, 0, 0, 0, 0, 0, 41279, 0, 0, 0, 11081, + 43615, 0, 0, 0, 0, 12727, 0, 0, 78397, 9475, 0, 65105, 0, 9633, 10886, + 43592, 7831, 0, 0, 0, 73915, 8076, 43048, 8290, 8291, 43051, 0, 0, 2596, + 43584, 0, 13113, 0, 0, 2393, 7058, 9087, 74067, 68673, 41574, 78337, 0, + 74058, 6376, 0, 0, 0, 0, 9854, 0, 64696, 0, 0, 0, 6994, 0, 1720, 0, 0, 0, + 6529, 7063, 0, 3751, 9120, 0, 0, 1798, 709, 0, 1354, 1876, 13152, 6557, + 12430, 8137, 0, 0, 0, 0, 245, 0, 11456, 41233, 7070, 0, 0, 6136, 0, + 65677, 8682, 41235, 0, 42045, 9804, 0, 432, 3595, 0, 65437, 0, 74455, + 42399, 0, 0, 0, 0, 119658, 0, 0, 0, 77894, 8797, 0, 9052, 64888, 0, 2356, + 95, 74784, 10580, 0, 42286, 0, 64640, 0, 119104, 0, 0, 0, 10063, 12652, + 12199, 127030, 0, 2566, 11971, 0, 0, 1065, 0, 0, 43400, 2576, 0, 0, 0, + 43604, 0, 0, 74082, 514, 74502, 0, 2921, 43215, 64493, 5772, 12968, 0, + 194944, 74580, 43398, 2580, 0, 41341, 41223, 6564, 1463, 41342, 0, 5293, + 0, 0, 3733, 11346, 0, 12054, 0, 74098, 42827, 0, 13091, 0, 0, 0, 917915, + 0, 127025, 0, 74821, 0, 0, 119042, 0, 0, 13090, 66643, 0, 1270, 1132, + 42360, 0, 74096, 66655, 42569, 0, 0, 64761, 0, 41021, 8510, 42432, 0, 0, + 0, 0, 64496, 74109, 0, 9915, 0, 0, 7061, 41336, 3854, 0, 13141, 68413, + 43401, 42319, 13082, 0, 7067, 68221, 0, 0, 0, 0, 0, 0, 9029, 43543, 0, + 2353, 6308, 0, 74792, 2611, 119186, 0, 0, 0, 43664, 0, 66627, 0, 4484, + 8509, 118976, 78116, 65233, 0, 41224, 41017, 0, 3747, 10522, 0, 0, 1691, + 41226, 0, 12107, 44002, 10905, 65010, 0, 697, 66018, 9284, 4244, 0, 0, 0, + 13121, 120036, 0, 12010, 0, 0, 0, 0, 0, 0, 65816, 68111, 0, 0, 65668, 0, + 6618, 118784, 66365, 0, 42234, 12648, 0, 0, 0, 5785, 41309, 9764, 41316, + 65877, 7383, 13230, 41299, 0, 0, 68365, 0, 0, 0, 0, 13122, 0, 191, 74119, + 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, 0, 42680, 41360, 78154, 0, 4743, 0, 0, 74040, 74108, 8743, 1724, + 1433, 119322, 0, 3739, 6263, 0, 0, 3964, 6592, 0, 0, 66040, 0, 42568, 0, + 0, 1778, 3956, 0, 42070, 6563, 43075, 9018, 0, 0, 12067, 41312, 0, 5547, + 74531, 0, 0, 8175, 0, 284, 8108, 934, 0, 74001, 173, 66460, 7174, 917917, + 118822, 1750, 0, 4394, 68368, 1807, 0, 0, 0, 5889, 0, 7180, 0, 119145, 0, + 0, 42471, 6982, 1721, 44022, 7891, 42243, 42160, 2583, 4512, 119360, + 65230, 0, 0, 0, 3855, 0, 0, 0, 0, 74295, 0, 0, 119140, 3975, 0, 74087, 0, + 12672, 3798, 2703, 0, 0, 2109, 9774, 1275, 0, 0, 41095, 3962, 0, 7873, + 41101, 3954, 6457, 4513, 0, 0, 73994, 73992, 1468, 0, 0, 41851, 0, 41846, + 0, 55238, 7633, 41849, 68385, 4320, 3224, 0, 0, 0, 42531, 0, 1510, 0, + 8256, 0, 11393, 0, 8879, 0, 0, 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, 0, 0, 8184, 41486, 0, 7396, 0, 0, 69788, 0, 7185, + 7965, 0, 0, 0, 0, 41350, 9129, 0, 0, 0, 0, 0, 0, 10481, 0, 0, 7171, 0, + 340, 0, 0, 0, 0, 0, 0, 0, 6764, 0, 0, 0, 0, 0, 65203, 11392, 119098, + 119359, 0, 3210, 0, 0, 0, 0, 0, 0, 917619, 0, 0, 10043, 0, 1186, 41571, + 6999, 617, 9464, 0, 3675, 5207, 65062, 5213, 194769, 2617, 41348, 41568, + 0, 3253, 120535, 0, 8630, 0, 0, 5596, 5545, 7288, 2586, 64887, 0, 5217, + 0, 0, 0, 0, 64293, 68098, 2635, 0, 0, 0, 0, 0, 7835, 0, 0, 194988, 0, + 64558, 127122, 0, 127121, 0, 0, 0, 5784, 0, 0, 0, 0, 4011, 917616, 68101, + 0, 7864, 4254, 65095, 0, 5600, 3903, 127083, 10447, 5598, 1207, 120521, + 66689, 3501, 42582, 43600, 194780, 0, 1124, 5597, 0, 0, 9321, 0, 0, 0, 0, + 1719, 68356, 68354, 9671, 1125, 4399, 0, 917610, 0, 7631, 5488, 65223, + 120532, 0, 5491, 0, 8937, 43044, 2604, 74187, 5490, 43046, 5489, 7212, + 11768, 43043, 6300, 0, 194789, 0, 4390, 454, 41397, 0, 9875, 7593, + 194792, 0, 118913, 7207, 0, 65901, 2394, 2575, 0, 3746, 11016, 65752, + 120037, 0, 43423, 0, 11989, 0, 0, 0, 0, 0, 8249, 0, 0, 78531, 6640, + 74806, 2598, 513, 0, 6586, 8656, 0, 127002, 65008, 0, 194784, 0, 194795, + 0, 0, 68475, 0, 0, 0, 78637, 12647, 0, 194796, 0, 1036, 0, 0, 1723, 0, 0, + 0, 41579, 2444, 0, 10705, 73876, 0, 74486, 0, 740, 194985, 194978, + 194984, 0, 4238, 11071, 9459, 68437, 78140, 78139, 0, 8121, 10438, 74487, + 42574, 13285, 55263, 11907, 195000, 5690, 194999, 0, 0, 43181, 13095, 0, + 0, 64498, 0, 9506, 6978, 194993, 77992, 0, 0, 194992, 0, 0, 1122, 317, 0, + 0, 0, 0, 1920, 0, 10173, 827, 0, 0, 78378, 120126, 5223, 1304, 0, 119564, + 5226, 12602, 0, 0, 9329, 7758, 9239, 41173, 5224, 5487, 1222, 5692, + 41725, 69229, 9674, 5695, 41711, 64627, 19909, 0, 74604, 5691, 287, 866, + 233, 0, 0, 42816, 0, 65140, 74797, 0, 8830, 6568, 42300, 10524, 41175, 0, + 0, 0, 5296, 0, 42492, 43402, 0, 3302, 0, 0, 6516, 6515, 6514, 6513, 6512, + 0, 7856, 8690, 0, 0, 12122, 119628, 43976, 0, 1785, 0, 68622, 65153, + 194810, 5138, 0, 0, 0, 0, 4540, 41181, 0, 6200, 0, 5134, 0, 322, 4643, + 5132, 0, 6389, 0, 5143, 0, 8790, 0, 0, 194802, 0, 8869, 120601, 0, 42060, + 0, 0, 0, 0, 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, 0, 65268, 0, 0, 0, 11027, + 0, 10059, 10511, 42075, 9767, 789, 1749, 78890, 127071, 0, 320, 0, 8647, + 0, 3049, 0, 6471, 42071, 43156, 9925, 127356, 127355, 0, 4960, 5549, + 127359, 0, 8485, 4671, 5418, 0, 3351, 127006, 0, 10610, 5414, 3064, 6212, + 4286, 5421, 0, 9554, 0, 0, 0, 6653, 0, 0, 64510, 6213, 12885, 0, 119045, + 64720, 0, 120759, 73741, 12603, 78654, 11430, 4566, 7843, 9317, 3801, + 10342, 10406, 0, 119259, 42576, 0, 5200, 0, 917948, 0, 9183, 0, 74458, + 73825, 395, 5482, 5198, 8786, 10390, 74202, 5196, 43224, 6113, 42009, + 5205, 0, 43307, 0, 118973, 0, 12134, 0, 0, 118843, 9126, 435, 0, 12014, + 12893, 8093, 9079, 3203, 192, 65109, 3385, 0, 64430, 5383, 10294, 10326, + 0, 5738, 0, 3336, 78355, 5361, 3623, 41159, 0, 68112, 7872, 8581, 0, + 1260, 3149, 5359, 0, 0, 7914, 5357, 0, 0, 2624, 5364, 0, 11431, 120030, + 9101, 11058, 78288, 0, 78293, 42271, 78289, 65737, 120793, 0, 65566, + 6717, 10619, 43360, 78385, 78384, 78383, 78382, 78381, 78380, 78379, + 9319, 7097, 119055, 77906, 3232, 73824, 74581, 120632, 0, 0, 41889, 0, 0, + 1161, 41895, 74103, 9701, 8622, 0, 0, 73819, 120588, 5012, 77912, 41362, + 0, 78296, 11921, 0, 11769, 0, 68609, 41364, 0, 74228, 41352, 41361, 0, + 41366, 0, 3356, 0, 917, 68422, 119915, 119923, 8199, 78389, 119917, 677, + 119916, 0, 119932, 0, 0, 0, 0, 3349, 74125, 7022, 8927, 4739, 0, 5802, 0, + 8615, 0, 0, 491, 0, 0, 0, 65837, 0, 8426, 11092, 9891, 0, 42497, 0, 7586, + 42305, 10852, 0, 0, 4606, 68448, 9095, 7741, 12684, 41885, 1046, 0, 0, 0, + 5815, 5171, 65539, 0, 6932, 78315, 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, 9402, 9403, 9404, + 3507, 9406, 7629, 0, 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, 73900, 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, + 78311, 11788, 65587, 68129, 10415, 74102, 0, 205, 0, 10351, 119076, 0, + 9862, 6588, 43257, 64697, 73998, 41355, 5505, 119154, 5503, 8021, 0, + 119150, 9819, 41357, 8011, 42885, 5507, 12044, 0, 0, 10026, 5472, 65108, + 1191, 13106, 5470, 10329, 5476, 8991, 66322, 69778, 78267, 42874, 8550, + 42876, 5592, 2919, 0, 2675, 5595, 78411, 0, 4367, 0, 0, 5478, 5904, 5594, + 0, 74150, 7291, 5590, 77849, 13067, 118909, 120372, 0, 9731, 0, 64633, + 77857, 77854, 77855, 77852, 77853, 77850, 10750, 43714, 77858, 74545, 0, + 0, 12887, 10551, 194564, 77866, 77867, 77864, 77865, 9929, 5199, 9936, + 1120, 42387, 0, 1444, 9486, 7554, 65839, 55252, 0, 1442, 0, 5894, 0, 0, + 0, 0, 74313, 0, 13162, 0, 3334, 0, 118803, 77881, 66022, 0, 0, 1651, 0, + 8861, 0, 0, 1142, 0, 8271, 0, 0, 0, 12903, 0, 4002, 43626, 10442, 10676, + 3344, 0, 0, 12920, 194560, 0, 0, 66642, 1277, 0, 7871, 0, 0, 78853, 0, + 78854, 120360, 0, 11784, 0, 78012, 4700, 66366, 78858, 120359, 11012, 0, + 78856, 120358, 77879, 4973, 8784, 77877, 74804, 77874, 77869, 77871, + 42440, 0, 43118, 0, 42364, 6774, 6773, 0, 120369, 10346, 10410, 78859, + 9243, 2464, 0, 6108, 3372, 0, 6247, 43117, 74526, 0, 74166, 0, 120355, 0, + 0, 0, 0, 0, 0, 0, 74217, 3354, 0, 4192, 9289, 118999, 41191, 3876, 0, 0, + 120660, 43696, 43380, 0, 0, 0, 0, 11603, 0, 0, 6589, 0, 194679, 0, 0, 0, + 0, 0, 42572, 0, 10630, 74827, 1963, 118889, 0, 11654, 0, 7550, 10686, + 5903, 0, 78009, 41329, 9662, 917937, 64698, 3366, 10399, 0, 0, 11013, 0, + 917933, 0, 78621, 194672, 6925, 0, 0, 917929, 0, 11568, 0, 917931, 64579, + 917930, 7852, 0, 0, 6754, 6312, 0, 64672, 65296, 0, 118957, 0, 416, + 12296, 68457, 73834, 68177, 11050, 10984, 0, 0, 0, 0, 0, 0, 9532, 66355, + 0, 0, 917925, 64343, 195032, 0, 195031, 0, 0, 195057, 11445, 0, 195028, + 195056, 195027, 10185, 1021, 0, 9507, 10210, 74544, 8023, 1200, 12243, + 78001, 5282, 78003, 12540, 11545, 0, 120493, 3343, 4424, 11047, 1885, + 43268, 3896, 78626, 66497, 2947, 392, 7894, 4391, 68139, 0, 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, 0, 78301, 0, 74211, 41897, 68477, 0, 917583, 0, 0, 2493, 0, + 118811, 0, 0, 64354, 0, 8777, 0, 406, 8884, 2385, 0, 0, 0, 917573, 43030, + 42027, 12114, 0, 917579, 64936, 0, 0, 120629, 10561, 0, 8365, 0, 0, + 65841, 120787, 11601, 0, 74121, 0, 917575, 7834, 74159, 0, 0, 10298, + 6624, 4908, 917596, 1639, 0, 0, 74157, 6327, 6724, 0, 0, 0, 0, 4817, + 78446, 194759, 0, 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, 0, 41403, 119977, 0, 0, 41406, 43273, 74160, 119983, 73939, 119985, 119984, 119979, 41404, 1165, 119980, 4451, 13087, 0, 11284, 119987, - 73855, 65155, 43014, 5439, 9363, 0, 3375, 0, 5900, 0, 7889, 2722, 42262, - 0, 0, 0, 0, 0, 0, 0, 11401, 0, 0, 0, 0, 0, 0, 0, 65438, 0, 7280, 0, 0, 0, - 4868, 119967, 119966, 0, 0, 0, 43161, 0, 119964, 0, 5182, 0, 120542, 0, - 0, 4226, 120798, 12135, 5732, 4464, 0, 0, 977, 4458, 0, 0, 64770, 0, 0, - 344, 0, 194790, 1395, 64279, 0, 0, 0, 786, 0, 43174, 64340, 0, 0, 0, - 43026, 7612, 10132, 64413, 0, 0, 0, 0, 0, 0, 120498, 0, 120734, 0, - 119160, 10204, 0, 0, 0, 0, 1399, 0, 0, 0, 8852, 0, 241, 0, 4907, 0, 0, - 7932, 9727, 0, 74255, 8748, 0, 0, 0, 0, 42780, 0, 0, 0, 4217, 0, 8650, 0, - 0, 0, 0, 118872, 43099, 3965, 0, 0, 0, 13300, 0, 0, 0, 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, 0, 42825, 41854, 5304, 0, 0, 6919, - 8619, 119655, 10038, 66454, 9592, 42851, 126993, 1542, 0, 0, 0, 0, 0, - 74311, 0, 0, 10181, 0, 0, 0, 7779, 0, 10195, 9479, 6029, 0, 0, 9689, 0, - 0, 8993, 66358, 0, 42378, 3368, 606, 0, 7697, 0, 0, 2030, 0, 6027, 8370, - 4322, 0, 65207, 0, 0, 0, 0, 0, 2735, 42831, 0, 0, 74866, 8881, 119047, 0, - 0, 73946, 0, 0, 0, 68140, 0, 9576, 0, 3347, 4160, 5154, 0, 3794, 66564, - 66514, 0, 7709, 41112, 0, 66560, 42041, 4572, 0, 66561, 0, 41113, 0, - 1615, 5855, 809, 0, 0, 0, 0, 5799, 0, 0, 0, 7260, 0, 43031, 64425, 65128, - 127061, 64386, 65257, 0, 0, 120607, 9347, 0, 6532, 0, 0, 0, 0, 65828, 0, - 283, 917917, 0, 532, 0, 0, 0, 120609, 0, 3370, 0, 11361, 5443, 0, 8153, - 73767, 0, 10741, 0, 0, 0, 0, 65495, 64706, 0, 0, 0, 0, 9466, 119600, - 9824, 0, 0, 0, 0, 915, 0, 0, 0, 0, 0, 0, 43264, 0, 0, 0, 0, 0, 0, 0, - 68161, 64550, 5186, 12890, 0, 0, 12108, 0, 65124, 0, 66043, 0, 0, 43107, - 0, 0, 42562, 0, 0, 0, 0, 11485, 6103, 127123, 0, 11718, 0, 12889, 0, 0, - 0, 0, 0, 0, 0, 1630, 0, 65483, 0, 12565, 0, 65476, 0, 0, 119554, 9283, - 7700, 917537, 9690, 65499, 0, 64593, 512, 3376, 118862, 0, 0, 0, 632, - 12940, 0, 42529, 0, 0, 5957, 0, 8926, 0, 0, 0, 10745, 10174, 0, 64581, - 5386, 120686, 11713, 10633, 120531, 5056, 0, 0, 0, 120773, 0, 9812, 0, - 4460, 0, 0, 0, 0, 0, 0, 0, 64278, 0, 0, 0, 0, 64389, 2953, 73879, 1801, - 12835, 917627, 0, 73823, 0, 66375, 0, 702, 42579, 0, 0, 13074, 0, 0, 0, - 0, 12106, 0, 74207, 1755, 10482, 12863, 0, 1163, 2951, 9522, 74079, - 195076, 120674, 0, 3384, 120728, 10702, 830, 0, 0, 0, 8451, 0, 0, 0, - 120762, 0, 0, 0, 0, 2908, 0, 0, 64902, 4243, 0, 12239, 0, 0, 4441, 0, 0, - 73940, 64352, 0, 0, 411, 0, 0, 0, 0, 0, 41890, 0, 2730, 41604, 0, 5428, - 194743, 3364, 42265, 0, 0, 118816, 0, 9684, 216, 0, 1401, 0, 0, 0, 0, 0, - 9158, 0, 120664, 5768, 0, 0, 0, 484, 0, 0, 0, 65895, 0, 0, 3338, 73935, - 572, 7041, 2736, 0, 0, 0, 2794, 8807, 64491, 0, 5438, 5222, 5381, 43114, - 0, 5193, 5125, 5456, 5509, 0, 194747, 9534, 0, 0, 0, 3430, 0, 0, 0, 0, - 981, 0, 4330, 120673, 120536, 1824, 10908, 0, 7034, 41683, 64617, 0, - 73754, 3957, 0, 64547, 0, 674, 63991, 0, 2946, 5354, 5251, 5328, 5307, - 3759, 11411, 8364, 5123, 0, 5281, 5469, 5121, 0, 0, 0, 5130, 0, 0, 0, 0, - 120726, 1221, 2733, 11746, 0, 5216, 0, 0, 0, 0, 3468, 0, 9230, 5939, 0, - 0, 0, 120677, 120729, 7278, 10321, 10289, 64613, 10385, 41706, 0, 0, 0, - 0, 11739, 0, 41981, 0, 5938, 0, 0, 12448, 7576, 10401, 10337, 73852, 0, + 73855, 65155, 43014, 5439, 9363, 127558, 3375, 0, 5900, 0, 7889, 2722, + 42262, 0, 0, 0, 0, 0, 0, 0, 11401, 0, 0, 68459, 0, 0, 0, 0, 65438, 0, + 7280, 0, 0, 0, 4868, 119967, 119966, 0, 0, 0, 43161, 0, 119964, 0, 5182, + 0, 120542, 0, 0, 4226, 120798, 12135, 5732, 4464, 0, 0, 977, 4458, 0, 0, + 64770, 74838, 0, 344, 0, 194790, 1395, 64279, 0, 0, 0, 786, 0, 43174, + 64340, 0, 0, 0, 43026, 7612, 10132, 64413, 0, 0, 0, 0, 0, 0, 68444, 0, + 120734, 0, 119160, 10204, 0, 0, 0, 0, 1399, 0, 65217, 0, 8852, 0, 241, 0, + 4907, 0, 0, 7932, 9727, 0, 74255, 8748, 0, 0, 0, 0, 42780, 0, 0, 0, 4217, + 0, 8650, 0, 0, 0, 0, 118872, 43099, 3965, 119119, 6719, 0, 13300, 78439, + 0, 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, 0, 42825, + 41854, 5304, 0, 78516, 6919, 8619, 119655, 10038, 66454, 9592, 42851, + 126993, 1542, 0, 0, 0, 0, 0, 74311, 78497, 0, 10181, 0, 43624, 0, 7779, + 0, 10195, 9479, 6029, 0, 0, 9689, 0, 0, 8993, 66358, 0, 42378, 3368, 606, + 0, 7697, 69237, 69787, 2030, 0, 6027, 8370, 4322, 0, 65207, 0, 0, 0, 0, + 0, 2735, 42831, 77935, 127120, 74866, 8881, 119047, 0, 0, 73946, 0, 0, 0, + 68140, 0, 9576, 0, 3347, 4160, 5154, 55288, 3794, 66564, 8530, 127063, + 7709, 41112, 0, 66560, 42041, 4572, 12876, 66561, 0, 6758, 0, 1615, 5855, + 809, 0, 0, 0, 0, 5799, 0, 0, 0, 7260, 0, 43031, 64425, 65128, 127061, + 64386, 65257, 0, 68616, 120607, 9347, 0, 6532, 0, 0, 0, 0, 65828, 0, 283, + 68665, 78813, 532, 78663, 0, 0, 120609, 0, 3370, 0, 11361, 5443, 78778, + 8153, 73767, 0, 10741, 0, 0, 0, 0, 65495, 64706, 0, 43344, 0, 78870, + 9466, 78866, 9824, 0, 0, 0, 0, 915, 43425, 0, 0, 0, 0, 0, 43264, 0, 0, 0, + 0, 78864, 6730, 78862, 68161, 64550, 5186, 12890, 0, 0, 12108, 0, 65124, + 43127, 66043, 0, 6326, 43107, 77826, 0, 42562, 0, 0, 0, 0, 11485, 6103, + 127123, 0, 11718, 0, 12889, 0, 0, 0, 0, 0, 55245, 0, 1630, 0, 65483, 0, + 12565, 0, 65476, 120013, 0, 119554, 9283, 7700, 917537, 9690, 65499, 0, + 64593, 512, 3376, 68210, 0, 0, 77892, 632, 12940, 77891, 42529, 78587, 0, + 5957, 0, 8926, 0, 0, 0, 10745, 10174, 7379, 64581, 5386, 120686, 11713, + 10633, 120531, 5056, 0, 0, 0, 120773, 0, 9812, 0, 4460, 0, 0, 0, 0, 0, 0, + 0, 64278, 0, 43466, 0, 0, 64389, 2953, 73879, 1801, 12835, 119029, 0, + 73823, 0, 66375, 2085, 702, 42579, 77884, 77885, 13074, 77883, 0, 0, 0, + 12106, 0, 74207, 1755, 10482, 12863, 77898, 1163, 2951, 9522, 74079, + 78266, 120674, 0, 3384, 69227, 10702, 830, 77902, 77899, 77900, 8451, 0, + 0, 0, 120762, 0, 0, 0, 0, 2908, 0, 43386, 64902, 4243, 0, 12239, 0, 0, + 4441, 0, 0, 73940, 64352, 127513, 0, 411, 0, 0, 0, 4056, 118992, 41890, + 0, 2730, 41604, 0, 5428, 194743, 3364, 42265, 0, 0, 118816, 194742, 9684, + 216, 0, 1401, 0, 44012, 0, 0, 0, 9158, 77842, 120664, 5768, 0, 0, 0, 484, + 0, 0, 0, 65895, 0, 0, 3338, 73935, 572, 7041, 2736, 67605, 0, 0, 2794, + 8807, 64491, 77847, 5438, 5222, 5381, 43114, 0, 5193, 5125, 5456, 5509, + 77846, 194747, 9534, 0, 0, 0, 3430, 0, 0, 0, 0, 981, 0, 4330, 73929, + 120536, 1824, 10908, 0, 7034, 41683, 64617, 0, 73754, 3957, 64358, 64547, + 0, 674, 63991, 0, 2946, 5354, 5251, 5328, 5307, 3759, 11411, 8364, 5123, + 0, 5281, 5469, 5121, 119245, 0, 0, 5130, 0, 0, 77990, 0, 120726, 1221, + 2733, 11746, 77991, 5216, 0, 0, 0, 0, 3468, 7033, 9230, 5939, 0, 0, 0, + 120677, 68400, 7278, 10321, 10289, 64613, 10385, 41706, 0, 0, 0, 0, + 11739, 0, 41981, 0, 5938, 0, 0, 12448, 7576, 10401, 10337, 73852, 0, 13057, 0, 126976, 0, 10009, 0, 64304, 0, 12165, 0, 0, 9885, 0, 8077, 0, - 0, 0, 0, 0, 0, 0, 4220, 10725, 10433, 0, 0, 4987, 64519, 0, 0, 0, 0, 0, - 10970, 11733, 0, 120792, 0, 19944, 0, 9009, 8551, 0, 11468, 74003, 7575, - 0, 2724, 0, 0, 12313, 119949, 515, 119947, 42791, 63987, 119942, 119943, - 119940, 119941, 119938, 9775, 4046, 4589, 4521, 0, 9141, 0, 0, 2741, - 64399, 6197, 1370, 0, 0, 0, 0, 0, 0, 6184, 8606, 3303, 41372, 11786, - 9473, 66203, 66177, 0, 11593, 43007, 4478, 66178, 0, 0, 2744, 0, 4477, 0, - 814, 42066, 66183, 66204, 66194, 119961, 66198, 41880, 66188, 66197, - 119954, 11955, 66190, 66191, 41111, 66189, 73788, 7788, 4847, 0, 0, 0, 0, - 0, 1581, 6535, 0, 12954, 430, 194934, 194939, 0, 194938, 5278, 4945, - 42883, 4950, 0, 120547, 0, 7269, 0, 5964, 12908, 0, 0, 74764, 74477, - 119146, 194936, 4949, 0, 443, 0, 4944, 5467, 119603, 0, 65137, 6044, - 65392, 0, 4213, 0, 41303, 0, 194931, 0, 41306, 73984, 2698, 0, 0, 12072, - 3193, 0, 41304, 824, 0, 12091, 119814, 119813, 119816, 4673, 64804, 4678, - 119820, 119819, 65059, 0, 119808, 0, 5481, 3490, 1199, 119811, 8356, - 119829, 119832, 4677, 12688, 3102, 0, 4672, 119822, 119821, 5531, 119823, - 42575, 119825, 119828, 4674, 4548, 0, 0, 0, 119946, 8025, 0, 127024, - 1855, 0, 119945, 0, 120554, 0, 0, 0, 0, 2745, 11797, 0, 0, 119939, 4654, - 0, 0, 194959, 73993, 10525, 4649, 65209, 0, 0, 4648, 43080, 0, 0, 0, - 6246, 64950, 7828, 4650, 0, 0, 119086, 4653, 7822, 0, 0, 43187, 8669, 0, - 0, 65093, 0, 0, 2716, 0, 0, 0, 0, 0, 0, 11060, 8547, 2711, 42165, 0, - 119228, 7992, 0, 0, 4662, 0, 0, 9149, 9146, 599, 4657, 194963, 120754, - 194962, 4656, 10130, 0, 7811, 40994, 194965, 6414, 5967, 4658, 3725, - 5713, 5814, 4661, 42434, 0, 0, 0, 64904, 9026, 10833, 0, 7547, 4867, 0, - 10008, 10222, 3054, 194956, 9744, 0, 7605, 4622, 119656, 0, 0, 0, 0, 0, - 9045, 0, 4225, 19926, 0, 12880, 65307, 4617, 0, 0, 0, 4616, 10518, 10423, - 10359, 0, 5958, 0, 0, 4215, 9789, 917941, 4321, 4621, 0, 41313, 522, - 5368, 0, 65803, 0, 5366, 12201, 5372, 0, 0, 0, 7720, 0, 2696, 0, 0, 4638, - 0, 1790, 0, 5965, 64363, 66569, 0, 194968, 5376, 1835, 5335, 194966, 0, - 4633, 0, 68119, 1180, 4632, 0, 5387, 5333, 0, 0, 42094, 5331, 4634, - 11928, 0, 5338, 4637, 0, 5971, 42414, 0, 1268, 65097, 42361, 0, 0, 73853, - 1427, 0, 0, 5970, 3431, 0, 10358, 10422, 4758, 0, 1608, 2738, 0, 10455, - 4753, 74026, 11344, 4222, 6240, 5231, 74384, 0, 0, 6248, 0, 0, 0, 42318, - 0, 5229, 4757, 0, 0, 2728, 4752, 64563, 65235, 5234, 0, 0, 0, 10713, 0, - 0, 2622, 7460, 0, 0, 0, 8954, 74760, 65189, 2632, 0, 10108, 1011, 5574, - 1853, 2709, 65139, 5577, 0, 0, 118871, 0, 8965, 7635, 42177, 5316, 0, - 5314, 6451, 5572, 0, 5312, 0, 5525, 5330, 5319, 0, 0, 194907, 119016, 0, - 0, 0, 0, 0, 195009, 0, 74022, 0, 64609, 0, 0, 0, 5721, 0, 10398, 8632, - 66465, 11267, 73961, 0, 5720, 0, 1692, 4219, 4610, 8696, 4305, 0, 4609, - 0, 4614, 541, 0, 5287, 5309, 5285, 0, 5961, 4647, 56, 4216, 10577, 41381, - 601, 4613, 0, 0, 0, 4608, 64260, 41124, 5190, 67628, 0, 68145, 7086, 0, - 119243, 67620, 0, 2734, 11074, 0, 67627, 43593, 0, 67625, 5960, 0, 8992, - 65293, 0, 1782, 67622, 68114, 119950, 0, 68180, 5501, 119952, 42508, - 7442, 120749, 359, 41253, 119957, 6239, 119956, 41256, 0, 68134, 0, - 74209, 0, 9346, 118904, 41254, 0, 43291, 3767, 5737, 0, 4865, 0, 5740, 0, - 5736, 4368, 0, 7193, 68137, 0, 5739, 41024, 4866, 0, 73904, 0, 4869, - 120563, 0, 4223, 0, 6650, 0, 0, 0, 0, 4870, 0, 74805, 66566, 0, 120758, - 0, 0, 0, 10122, 4864, 66568, 4144, 7937, 0, 6245, 0, 2732, 66459, 745, 0, - 195097, 0, 4777, 7821, 0, 0, 42775, 0, 194954, 0, 3097, 0, 5966, 0, 4778, - 0, 10863, 0, 4781, 0, 64407, 0, 0, 8577, 0, 118964, 43285, 10216, 4782, - 0, 0, 120757, 917924, 12325, 0, 8717, 0, 0, 4776, 0, 11492, 8700, 0, - 13176, 0, 10426, 0, 917599, 10362, 0, 1715, 4849, 8242, 9561, 73922, - 43278, 42635, 0, 0, 5963, 917926, 0, 0, 4850, 0, 1607, 466, 4853, 118995, - 4854, 0, 5164, 0, 1350, 5124, 64420, 1993, 5362, 8471, 2708, 0, 12445, - 3785, 234, 3199, 0, 41268, 4848, 2530, 0, 4798, 1964, 0, 73762, 10458, 0, - 8576, 0, 0, 2704, 4794, 0, 0, 8322, 4797, 74074, 0, 2694, 4792, 0, 2439, - 65104, 0, 0, 303, 0, 0, 0, 2437, 0, 4221, 4844, 118869, 0, 0, 0, 0, 0, - 43292, 0, 2441, 10739, 65090, 0, 119327, 0, 2451, 2714, 119326, 0, 0, - 4937, 74541, 753, 5849, 10597, 43089, 11722, 9248, 0, 42879, 11725, 0, 0, - 2726, 3107, 73958, 4941, 64937, 917538, 9140, 1408, 5261, 41412, 0, 181, - 0, 4942, 9539, 4938, 0, 65201, 5259, 9369, 64185, 4142, 5257, 0, 0, 4964, - 5264, 64178, 64177, 12979, 0, 64182, 64181, 64180, 64179, 9482, 4873, - 41231, 1822, 42526, 0, 12758, 3865, 0, 0, 10500, 0, 0, 0, 0, 9830, 0, - 389, 10893, 7521, 0, 4872, 5463, 0, 3125, 9567, 0, 4878, 5459, 4874, 0, - 9557, 5465, 0, 0, 11494, 0, 9563, 10865, 74570, 43279, 64186, 0, 0, - 64191, 64190, 8898, 64188, 0, 41030, 0, 0, 917835, 0, 917834, 0, 917837, - 41031, 0, 11960, 0, 3082, 0, 0, 0, 10573, 0, 7079, 5856, 127043, 5163, - 127042, 0, 1817, 66724, 0, 0, 10564, 7763, 13077, 41813, 4400, 41745, - 64207, 10275, 8925, 10371, 10307, 41814, 4248, 0, 0, 4541, 6299, 64204, - 64203, 64201, 64200, 64199, 64198, 0, 42156, 0, 0, 64193, 64192, 0, 0, - 64197, 64196, 64195, 64194, 13282, 64175, 64174, 64173, 0, 846, 0, 0, 0, - 0, 0, 0, 2543, 12163, 3108, 9745, 64167, 64166, 64165, 64164, 41743, 0, - 64169, 64168, 64949, 10972, 10251, 10247, 42768, 715, 64161, 43299, 9453, - 5348, 10943, 120378, 0, 11352, 550, 9910, 0, 0, 66579, 11551, 0, 0, 9504, - 7187, 0, 10373, 0, 120791, 10261, 10253, 6404, 10277, 0, 11984, 1552, - 65222, 6998, 0, 0, 3128, 4789, 5067, 5066, 118849, 4784, 0, 8827, 1146, - 5065, 0, 0, 68136, 0, 0, 5064, 2431, 0, 9450, 1809, 0, 0, 0, 5062, 1264, - 64817, 13254, 11697, 0, 9785, 64716, 0, 3933, 74559, 4740, 7954, 0, 0, - 42609, 0, 74175, 0, 127016, 0, 0, 42130, 0, 5151, 917831, 917823, 0, 0, - 0, 7620, 3800, 65122, 0, 0, 8355, 7854, 0, 954, 64927, 4185, 41045, 0, - 41438, 41439, 73978, 10711, 4593, 0, 120584, 0, 64774, 13309, 10532, - 66727, 0, 0, 0, 64759, 0, 5166, 9888, 0, 5148, 42834, 0, 120634, 118946, - 64140, 0, 64131, 3119, 917814, 0, 3060, 64135, 9986, 0, 0, 636, 11698, 0, - 0, 9916, 11701, 7836, 0, 64137, 8320, 118969, 8863, 0, 119960, 1477, - 43289, 0, 74358, 8618, 0, 9908, 0, 0, 0, 3937, 12312, 0, 0, 0, 64781, - 912, 10498, 4536, 119963, 74532, 0, 6244, 0, 194580, 3935, 120665, 0, 0, - 11950, 5392, 42248, 65129, 0, 5397, 0, 12046, 12599, 0, 0, 5395, 0, 5393, - 354, 0, 119948, 0, 0, 0, 42039, 0, 0, 64142, 626, 0, 5895, 0, 0, 5780, 0, - 0, 0, 0, 0, 43297, 0, 4311, 4644, 8818, 0, 0, 0, 73818, 3918, 66452, - 3797, 1644, 119944, 9658, 4140, 11385, 65947, 6455, 9030, 813, 0, 68131, - 4146, 0, 5360, 2466, 0, 0, 0, 6249, 42117, 0, 0, 0, 0, 74046, 120583, - 4911, 988, 917809, 0, 0, 0, 7054, 64147, 0, 64920, 917812, 917803, - 118933, 120349, 0, 0, 11981, 12202, 0, 11032, 120725, 6093, 11608, 975, - 0, 65843, 170, 0, 0, 4169, 0, 41859, 6058, 120401, 0, 120657, 0, 0, 0, - 9818, 10178, 10324, 42106, 5898, 74540, 4738, 41856, 7062, 917865, 4737, - 11779, 4742, 120564, 917866, 73736, 0, 9825, 6448, 12700, 127008, 4831, - 0, 0, 0, 5300, 4741, 42108, 0, 64159, 4736, 64148, 0, 849, 0, 0, 43288, - 0, 66620, 0, 0, 65549, 9496, 64598, 0, 0, 7876, 68132, 917872, 3928, - 917870, 65283, 10706, 7198, 0, 4842, 12053, 0, 0, 4841, 0, 4171, 12008, - 6251, 3923, 1490, 0, 119591, 0, 40972, 5245, 0, 10114, 42001, 41888, - 4845, 8332, 40974, 0, 4840, 9077, 917851, 1747, 917849, 4825, 0, 917852, - 0, 0, 0, 0, 0, 0, 0, 9850, 118937, 367, 1472, 917859, 6687, 1274, 0, - 5905, 12339, 8919, 73953, 10907, 65261, 11023, 119559, 4830, 9134, 0, - 64126, 43011, 0, 0, 64101, 0, 0, 4824, 10614, 120390, 0, 1888, 1960, - 7861, 917856, 0, 41836, 43012, 6052, 6064, 54, 43009, 12214, 0, 6211, 0, - 358, 41997, 41833, 11442, 10758, 65774, 0, 120384, 64115, 120385, 0, 0, - 0, 119053, 0, 12765, 64121, 126998, 12962, 0, 0, 4017, 12827, 5241, - 120392, 0, 41118, 3924, 0, 11366, 917843, 0, 0, 917846, 41116, 917844, - 917845, 0, 11363, 12057, 11917, 1567, 74000, 4721, 0, 66202, 8957, 4139, - 0, 0, 0, 0, 0, 12740, 0, 4722, 12761, 0, 12759, 4725, 0, 4726, 0, 0, 0, - 917904, 917905, 0, 12755, 12762, 4015, 0, 8052, 476, 0, 0, 0, 64212, - 41020, 1382, 64209, 64216, 64215, 64214, 1656, 41831, 0, 0, 41843, 8720, - 3908, 1452, 13111, 0, 64067, 0, 8552, 64113, 41845, 3849, 0, 66232, 9778, - 120066, 5891, 7064, 55, 74437, 917911, 0, 0, 7935, 67586, 0, 1114, 0, - 67585, 120052, 120053, 120050, 120051, 3938, 120057, 65417, 64717, - 120060, 120061, 65415, 120059, 6292, 65303, 7955, 6452, 4713, 917887, - 66249, 917885, 917890, 917891, 65152, 719, 120044, 120045, 120042, 41944, - 4532, 65412, 120046, 10868, 4717, 2349, 5902, 66450, 4712, 917902, - 917899, 917900, 0, 8155, 4718, 3942, 4714, 9625, 0, 0, 0, 12006, 0, 0, 0, - 0, 0, 65414, 6454, 1229, 0, 66437, 66025, 917894, 0, 42500, 120508, 4809, - 9623, 917874, 917879, 917880, 917877, 917878, 65405, 68159, 917881, - 917882, 5365, 4545, 8901, 917566, 119555, 4813, 0, 0, 5925, 4808, 64330, - 0, 65475, 0, 0, 4814, 0, 4810, 0, 0, 64928, 10543, 0, 3522, 0, 414, - 65404, 0, 0, 6456, 73820, 0, 11905, 917883, 0, 0, 0, 74495, 0, 0, 0, - 118820, 9751, 65407, 0, 11770, 3919, 0, 0, 65061, 0, 0, 0, 12235, 0, 0, - 0, 66576, 0, 64080, 0, 64090, 0, 0, 10162, 10310, 0, 8454, 0, 42038, 387, - 41363, 12737, 0, 4780, 0, 0, 64310, 64621, 0, 0, 0, 0, 0, 0, 8896, 0, - 375, 6976, 0, 119005, 0, 0, 0, 119202, 119203, 12526, 43120, 2315, 0, - 1938, 119197, 0, 4529, 119200, 119201, 119198, 119199, 0, 0, 0, 13150, - 64492, 0, 0, 0, 12902, 0, 42891, 66327, 74298, 0, 10799, 0, 2587, 66372, - 0, 4193, 120334, 4241, 0, 7998, 0, 0, 0, 0, 2316, 118821, 0, 0, 0, 64297, - 74799, 0, 74140, 0, 5373, 0, 0, 3762, 10015, 0, 119232, 0, 41590, 0, 0, - 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, 0, 68138, - 13072, 1894, 0, 0, 65478, 43310, 7231, 0, 11773, 0, 0, 0, 0, 2551, 0, - 6453, 10200, 6235, 0, 0, 0, 0, 4470, 0, 0, 7780, 5369, 118958, 5249, 0, - 5367, 8756, 0, 0, 5377, 120585, 68143, 1688, 0, 0, 0, 0, 0, 0, 0, 41697, - 41319, 1300, 10650, 41692, 64505, 4668, 0, 119624, 1465, 10850, 3943, 0, - 41205, 0, 0, 0, 0, 5352, 0, 0, 8839, 41314, 0, 7785, 41204, 0, 41209, 0, - 0, 43607, 0, 0, 5420, 3897, 0, 0, 74417, 4018, 0, 68127, 0, 0, 0, 0, 0, - 2561, 0, 3542, 41915, 12076, 7951, 68152, 118857, 5303, 6276, 1706, 0, 0, - 74116, 0, 65150, 41819, 0, 73951, 10847, 41822, 9985, 860, 0, 10506, 0, - 0, 10753, 10830, 0, 615, 64490, 7574, 0, 0, 0, 12909, 43016, 64559, - 127028, 0, 0, 0, 2020, 0, 4022, 0, 0, 0, 0, 41691, 0, 0, 0, 0, 64622, - 9070, 0, 0, 3911, 42829, 43122, 1033, 0, 0, 7000, 3904, 0, 0, 0, 0, - 127012, 13123, 10846, 3450, 0, 0, 118807, 0, 42778, 10000, 41088, 449, 0, - 3777, 0, 0, 9636, 0, 10738, 0, 9367, 593, 41085, 3999, 65226, 41713, - 12764, 0, 64409, 3596, 0, 0, 9763, 120280, 120283, 12347, 124, 12981, - 41127, 120278, 0, 0, 0, 0, 10820, 0, 0, 0, 1769, 41715, 2463, 0, 0, - 12770, 0, 1538, 0, 43124, 0, 195058, 7795, 120300, 0, 4828, 1258, 0, - 2006, 0, 0, 9498, 127032, 127033, 120289, 120288, 3939, 120290, 8846, - 8943, 120287, 120286, 2650, 4491, 1961, 42602, 11525, 120292, 1959, - 120294, 0, 11774, 41016, 0, 0, 0, 1511, 9324, 0, 10519, 66331, 3454, - 19930, 0, 41019, 0, 0, 65292, 0, 12862, 0, 0, 42143, 41828, 0, 65531, 0, - 118879, 0, 0, 0, 41826, 8865, 6402, 0, 13279, 7917, 120340, 0, 7733, 0, - 4998, 0, 0, 41950, 0, 4268, 0, 0, 0, 4013, 0, 10881, 0, 0, 0, 74788, - 2014, 0, 0, 9765, 0, 0, 0, 195059, 0, 65281, 0, 10949, 0, 0, 0, 2015, 0, - 0, 0, 66318, 74824, 0, 42517, 0, 0, 0, 0, 8094, 64468, 65909, 6474, 794, - 0, 12656, 0, 119353, 0, 1665, 0, 4833, 0, 119351, 0, 0, 189, 12611, 0, 0, - 2859, 4838, 0, 4834, 0, 0, 0, 4837, 0, 770, 0, 811, 0, 41042, 0, 41318, - 64427, 0, 0, 0, 3895, 0, 74341, 3976, 0, 42859, 10193, 3116, 7747, 0, 0, - 0, 0, 0, 0, 0, 41877, 0, 2871, 64614, 0, 999, 0, 68177, 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, 0, 0, 0, 3078, 1402, 0, 0, 0, 0, 0, 394, 3088, 0, 0, 0, - 3991, 64391, 0, 0, 424, 66328, 1999, 0, 73914, 0, 0, 0, 0, 0, 8246, 0, 0, - 0, 41840, 0, 2377, 1298, 64011, 12572, 11318, 12557, 12559, 12570, 8488, - 1003, 2373, 9446, 9447, 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, 0, 9655, 0, 2004, - 9096, 9782, 0, 9172, 0, 19965, 0, 5955, 120485, 1108, 0, 74773, 0, 0, - 64782, 3926, 0, 65210, 8798, 0, 0, 1392, 0, 0, 917557, 10606, 8065, - 118805, 10353, 10417, 0, 0, 64524, 0, 4019, 0, 0, 43280, 8219, 0, 1812, - 0, 0, 0, 0, 42410, 74448, 119132, 6054, 10697, 3169, 42297, 42322, 10642, - 3909, 74461, 0, 0, 0, 0, 0, 0, 1049, 0, 65707, 11943, 41806, 0, 42336, - 3921, 0, 11775, 64760, 11766, 1038, 42303, 9823, 0, 0, 4008, 64004, 8773, - 10733, 36, 0, 5153, 41805, 0, 73735, 763, 41808, 64910, 0, 2009, 0, 0, 0, - 9640, 119951, 0, 120695, 8621, 0, 12852, 3031, 0, 64361, 0, 182, 194718, - 0, 0, 0, 0, 9058, 366, 0, 9892, 5969, 11754, 10848, 4570, 65301, 0, 4255, - 0, 10102, 41189, 4003, 41026, 68109, 13293, 41192, 0, 0, 42251, 0, 42534, - 0, 11287, 6128, 0, 11034, 10923, 64423, 0, 65506, 0, 0, 74083, 0, 66582, - 0, 0, 119955, 0, 9817, 0, 0, 0, 12117, 66586, 4183, 10540, 66250, 127044, - 127045, 0, 0, 0, 12897, 3792, 2011, 0, 6065, 43160, 0, 194715, 8692, - 41186, 41816, 41023, 41818, 41187, 11659, 7922, 12614, 2005, 8523, - 120144, 0, 7513, 1863, 4710, 0, 5956, 7621, 120274, 127116, 4705, 716, 0, - 0, 4704, 120040, 120270, 42241, 161, 0, 74546, 66214, 4706, 0, 0, 120037, - 4709, 10680, 0, 43293, 0, 0, 119164, 0, 0, 0, 1700, 119223, 0, 0, 0, - 4004, 0, 10968, 43296, 0, 8506, 0, 0, 126996, 1005, 937, 120030, 4734, - 2870, 0, 120032, 0, 7463, 4729, 0, 235, 1384, 4728, 0, 120420, 120644, 0, - 8109, 43105, 0, 4730, 447, 13186, 1513, 4733, 120415, 0, 0, 42527, 12911, - 0, 1383, 8565, 2469, 120024, 119089, 6156, 68117, 0, 7993, 4288, 120416, - 2674, 13238, 11922, 0, 120330, 3510, 13234, 0, 120407, 5605, 42095, - 11364, 0, 1380, 65617, 120320, 120261, 13196, 13197, 120309, 120682, - 9495, 119346, 0, 5959, 0, 73976, 120305, 0, 6941, 119349, 13205, 13211, - 5801, 12769, 65905, 120316, 1283, 120302, 4779, 0, 3719, 4006, 0, 19957, - 0, 2021, 119332, 0, 0, 43028, 65493, 41838, 3875, 5962, 64341, 119339, - 9814, 43571, 5827, 3314, 7787, 0, 65494, 68153, 0, 0, 120636, 64531, 0, - 0, 0, 0, 0, 65467, 5771, 41298, 0, 9742, 521, 0, 10800, 0, 8404, 194625, - 483, 7096, 7089, 66323, 928, 0, 0, 0, 10599, 11586, 3989, 10971, 0, - 65782, 9841, 8843, 12145, 0, 10074, 120816, 0, 3769, 0, 0, 0, 0, 9573, 0, - 65290, 8849, 0, 65855, 65112, 1796, 0, 0, 0, 8164, 41301, 3502, 0, 0, - 10621, 73838, 0, 5825, 13007, 68165, 0, 0, 12661, 7608, 10354, 10418, - 42411, 2022, 0, 1409, 12195, 4001, 3112, 10824, 120639, 1390, 0, 0, 421, - 43536, 5846, 120120, 4130, 0, 7595, 42588, 7600, 0, 66035, 0, 0, 65851, - 42607, 0, 0, 3168, 0, 42134, 0, 2370, 2846, 0, 0, 0, 120132, 0, 1836, 0, - 0, 119137, 3740, 0, 6290, 65374, 120451, 65923, 3944, 66628, 120434, 0, - 6135, 3118, 74265, 119093, 120446, 0, 0, 8127, 8975, 64739, 7943, 0, 0, - 10618, 2584, 0, 0, 0, 9998, 0, 0, 0, 0, 0, 6204, 0, 0, 8279, 8776, 64954, - 4975, 74809, 0, 4267, 0, 0, 0, 0, 195046, 65700, 66562, 0, 64645, 0, 0, - 0, 12586, 0, 9242, 0, 0, 4523, 5842, 10495, 3122, 0, 7793, 0, 9328, 0, 0, - 12604, 0, 6615, 0, 0, 3986, 0, 0, 8912, 64555, 0, 0, 0, 9541, 0, 0, - 11275, 8540, 11498, 0, 0, 41040, 2459, 0, 13060, 41041, 74413, 0, 0, 0, - 0, 10450, 12551, 41043, 7020, 120353, 3765, 0, 0, 1606, 120348, 120351, - 3093, 0, 0, 0, 120649, 0, 0, 4312, 74091, 120337, 120336, 11923, 4023, - 120333, 5763, 120335, 4827, 10894, 12810, 64406, 118785, 4455, 74321, - 433, 119620, 66660, 2499, 0, 0, 0, 11973, 13089, 4293, 120329, 120328, - 42758, 12196, 42837, 0, 119319, 0, 0, 5817, 0, 0, 3120, 9797, 0, 0, 0, - 10389, 0, 0, 4895, 65358, 0, 4359, 585, 0, 3509, 0, 486, 4290, 0, 0, 0, - 0, 7004, 0, 65880, 0, 119048, 2380, 11380, 0, 0, 2376, 0, 0, 0, 5197, - 127046, 127047, 127048, 2366, 127050, 127051, 127052, 0, 0, 0, 0, 0, 0, - 0, 0, 74188, 0, 0, 0, 0, 0, 0, 0, 120049, 0, 1847, 0, 10339, 0, 42384, 0, - 4227, 74158, 0, 0, 43032, 0, 42365, 0, 12671, 11384, 0, 0, 0, 64797, 0, - 5820, 0, 0, 120065, 0, 120064, 120650, 42137, 9893, 2754, 12664, 120063, - 0, 13192, 0, 41799, 65530, 1711, 12984, 43039, 3114, 6255, 0, 118938, 0, - 10853, 926, 0, 74184, 0, 120055, 0, 43175, 0, 43037, 41798, 41035, 11583, - 0, 41801, 119088, 0, 520, 4200, 12699, 8331, 0, 3091, 41034, 0, 0, 8360, - 0, 0, 321, 4229, 64543, 0, 65563, 0, 0, 2861, 0, 10095, 0, 0, 0, 1861, 0, - 0, 0, 0, 43041, 0, 0, 0, 3859, 12181, 41660, 8209, 0, 120678, 12973, 0, - 74757, 0, 41658, 0, 0, 5760, 0, 743, 4414, 120766, 0, 42632, 917973, - 65161, 73896, 0, 0, 1405, 119063, 43220, 43341, 0, 19919, 0, 64532, - 65367, 0, 0, 0, 3513, 0, 118883, 43342, 119064, 65529, 65364, 0, 0, 6485, - 1397, 0, 65365, 0, 0, 0, 0, 0, 7471, 12079, 0, 12682, 43287, 0, 0, 0, 0, - 0, 0, 1099, 10490, 0, 10501, 65181, 74463, 0, 464, 41624, 119594, 0, 0, - 1346, 0, 917631, 64724, 64897, 423, 1818, 65144, 0, 8272, 0, 0, 4218, - 3087, 64960, 0, 43564, 0, 0, 9584, 10465, 0, 74359, 12626, 9106, 0, - 42642, 0, 64750, 9390, 0, 41797, 0, 0, 265, 41795, 64666, 0, 43530, 2752, - 0, 0, 0, 59, 0, 0, 0, 0, 0, 41810, 0, 7010, 0, 41809, 41495, 119364, 0, - 42252, 0, 8009, 3305, 43033, 511, 119320, 66255, 13127, 120067, 0, 0, 0, - 917977, 65915, 1400, 41812, 10685, 194870, 41211, 10387, 4453, 43276, - 917783, 13159, 0, 6481, 41213, 0, 0, 0, 0, 41983, 74198, 6617, 9116, 0, - 0, 462, 68110, 10493, 0, 8129, 0, 0, 74471, 6644, 11658, 0, 0, 3452, - 11906, 9581, 1385, 3098, 0, 119013, 43340, 0, 41033, 6493, 42626, 0, 0, - 11426, 0, 1681, 118789, 1204, 3755, 64661, 7235, 10170, 3966, 8911, 0, - 41841, 43338, 0, 0, 5726, 64915, 42175, 0, 0, 41497, 65044, 0, 2851, - 43017, 0, 0, 4373, 0, 0, 9587, 1789, 6671, 0, 3100, 0, 65360, 0, 0, 0, - 64922, 0, 8190, 12083, 0, 0, 6506, 64312, 74374, 2368, 0, 4419, 0, 0, - 3439, 1825, 1192, 120106, 8891, 3080, 120228, 2347, 5430, 0, 8990, 2848, - 0, 0, 0, 249, 0, 0, 0, 120658, 0, 0, 8883, 917802, 728, 68178, 995, 0, 0, - 64826, 0, 917798, 0, 0, 19945, 8091, 558, 0, 12273, 0, 0, 12112, 0, 0, 0, - 74419, 12335, 120104, 917795, 3443, 3129, 0, 12913, 65445, 0, 64891, 0, - 7725, 0, 0, 0, 8624, 0, 12446, 43295, 0, 41894, 0, 6277, 41672, 41893, - 10010, 0, 3540, 0, 835, 0, 0, 119868, 74408, 0, 73959, 5426, 4258, 0, 0, - 5424, 0, 8283, 0, 5434, 0, 0, 19917, 11408, 0, 11947, 0, 1404, 3095, - 11432, 0, 3464, 6486, 4819, 0, 0, 570, 8095, 3672, 119864, 1498, 0, 0, 0, - 431, 0, 0, 0, 0, 68167, 0, 13096, 0, 0, 0, 9516, 0, 5268, 0, 0, 0, 4450, - 120723, 11547, 64358, 0, 356, 3477, 227, 10488, 0, 382, 11418, 0, 0, 0, - 0, 0, 0, 6484, 2541, 66039, 0, 0, 0, 3549, 0, 9110, 119665, 2743, 0, - 43290, 194812, 9097, 0, 43015, 8782, 0, 776, 2524, 0, 8573, 0, 0, 0, 0, - 120572, 64944, 8952, 3856, 118818, 0, 5872, 6495, 0, 0, 0, 0, 0, 120733, - 12849, 3953, 1897, 0, 0, 11994, 4339, 74556, 0, 67843, 0, 0, 0, 74251, 0, - 5228, 0, 7868, 43184, 0, 0, 73986, 0, 0, 43022, 0, 1162, 0, 2671, 0, 0, - 0, 0, 118865, 4553, 73811, 0, 195005, 0, 0, 19921, 74331, 11424, 0, 4567, - 41891, 0, 0, 119056, 4820, 65239, 194662, 0, 0, 43042, 119212, 1377, 0, - 4897, 42821, 9250, 0, 4438, 64385, 0, 1753, 11331, 6147, 0, 43282, 8833, - 0, 0, 6504, 194667, 126979, 10719, 0, 1898, 1413, 42443, 0, 802, 12141, - 0, 0, 6648, 10671, 2528, 0, 64789, 9169, 838, 127092, 120697, 844, 5014, - 0, 256, 0, 9990, 0, 43301, 0, 7542, 65464, 9726, 0, 6489, 10048, 74326, - 0, 66573, 0, 0, 0, 11761, 194655, 0, 41094, 0, 0, 0, 0, 0, 6196, 6945, - 194628, 194890, 194631, 120491, 11816, 194943, 5733, 0, 0, 0, 41098, 0, - 41093, 0, 66626, 588, 9760, 0, 194717, 1238, 200, 0, 1660, 73916, 0, - 118905, 74362, 0, 0, 194651, 0, 0, 3394, 0, 120668, 0, 0, 0, 66219, 0, - 43284, 0, 7817, 1841, 11055, 120533, 194979, 194982, 1669, 10776, 194981, - 7701, 194980, 0, 194995, 1732, 4030, 0, 3963, 66611, 0, 41768, 6491, 0, - 65324, 914, 65323, 8071, 3538, 0, 0, 0, 0, 74367, 7614, 0, 11819, 0, - 12009, 12399, 0, 67852, 65537, 0, 10841, 0, 5301, 0, 0, 5734, 8960, 0, 0, - 65317, 0, 0, 0, 0, 12304, 0, 0, 65315, 0, 0, 0, 0, 0, 119621, 0, 74536, - 12447, 64486, 0, 0, 0, 0, 0, 0, 42767, 10915, 0, 12007, 0, 120520, 0, - 194878, 0, 0, 0, 8629, 0, 43168, 41872, 0, 4496, 0, 0, 0, 0, 0, 0, 0, - 64730, 0, 66714, 0, 0, 0, 65596, 0, 11416, 4280, 119018, 8765, 12784, - 7792, 1393, 0, 67871, 74386, 0, 8233, 43572, 0, 6683, 0, 3442, 12144, - 2841, 12543, 0, 1473, 42820, 64329, 917772, 0, 0, 6488, 357, 1048, 41100, - 0, 41104, 0, 41099, 1054, 119065, 1040, 65450, 0, 4434, 1069, 0, 0, - 74231, 917765, 0, 0, 0, 9693, 41943, 0, 41931, 41759, 12757, 4353, 0, - 1059, 9790, 8995, 0, 0, 65937, 0, 41764, 10646, 0, 118833, 0, 0, 74830, - 0, 12743, 0, 6480, 917761, 41779, 42580, 66601, 12207, 119619, 10986, - 66602, 11312, 64807, 0, 0, 41767, 0, 0, 43020, 0, 3955, 74254, 0, 0, - 917861, 0, 120735, 9770, 9246, 12230, 0, 0, 0, 10448, 41783, 41786, - 127093, 12797, 2755, 64571, 194912, 194927, 4857, 0, 4428, 12794, 73755, - 0, 0, 0, 0, 0, 5747, 194720, 0, 7978, 41092, 74571, 0, 11924, 74205, - 42144, 65015, 0, 563, 0, 0, 12798, 11271, 57, 0, 0, 0, 119043, 0, 0, - 43137, 694, 0, 9876, 0, 119168, 0, 0, 64537, 0, 277, 74385, 7229, 74459, - 0, 0, 64634, 64811, 8757, 119087, 0, 1574, 194633, 0, 2525, 4852, 5749, - 0, 13027, 42824, 120574, 1039, 9801, 10155, 5745, 188, 41858, 11592, 0, - 74015, 0, 41853, 4858, 0, 0, 436, 4771, 0, 2786, 0, 4856, 8051, 0, - 119609, 0, 9644, 0, 0, 0, 194916, 120732, 66710, 118834, 0, 73906, 0, - 127114, 0, 10234, 5843, 11939, 0, 42157, 0, 3157, 194918, 0, 0, 3504, - 119178, 0, 10822, 5149, 66029, 10226, 65142, 0, 3594, 42424, 0, 40, + 0, 0, 0, 0, 0, 0, 4220, 10725, 10433, 0, 68395, 4987, 64519, 0, 0, 0, 0, + 0, 10970, 11733, 0, 120792, 0, 19944, 0, 9009, 8551, 0, 11468, 64636, + 7575, 0, 2724, 0, 0, 12313, 119949, 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, 0, 11593, 43007, 4478, 66178, 0, 0, + 2744, 0, 4477, 118964, 814, 42066, 66183, 66204, 66194, 119961, 66198, + 41880, 66188, 66197, 78148, 11955, 66190, 66191, 41111, 66189, 73788, + 7788, 4847, 0, 0, 0, 0, 0, 1581, 6535, 78161, 12954, 430, 78160, 55259, + 78158, 194938, 5278, 4945, 42883, 4950, 0, 68625, 0, 7269, 0, 5964, + 12908, 0, 0, 74764, 74477, 119146, 194936, 4949, 0, 443, 0, 4944, 5467, + 119603, 0, 65137, 6044, 65392, 0, 4213, 0, 41303, 0, 194931, 0, 41306, + 73984, 2698, 127531, 0, 12072, 3193, 0, 41304, 824, 0, 12091, 78893, + 78894, 119816, 4673, 64804, 4678, 119820, 119819, 65059, 0, 6739, 0, + 5481, 3490, 1199, 119811, 8356, 119829, 119832, 4677, 12688, 3102, 0, + 4672, 78173, 78175, 5531, 68367, 42575, 78170, 78166, 4674, 4548, 44005, + 0, 68658, 119946, 8025, 68630, 127024, 1855, 0, 68669, 0, 119942, 127554, + 0, 0, 119652, 2745, 11797, 0, 0, 68643, 4654, 0, 0, 68638, 73993, 10525, + 4649, 65209, 0, 0, 4648, 43080, 0, 0, 0, 6246, 64950, 7828, 4650, 6777, + 6776, 6775, 4653, 7822, 78005, 0, 43187, 8669, 0, 6821, 65093, 0, 78881, + 2716, 0, 0, 0, 0, 68369, 0, 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, 0, 0, 0, 64904, 9026, 10833, 74864, 7547, 4867, 0, + 10008, 10222, 3054, 194956, 9744, 78860, 7605, 4622, 119656, 0, 0, 0, 0, + 0, 9045, 78888, 4225, 19926, 78887, 12880, 65307, 4617, 78883, 0, 41732, + 4616, 10518, 10423, 10359, 0, 5958, 0, 0, 4215, 9789, 917941, 4321, 4621, + 0, 41313, 522, 5368, 0, 65803, 0, 5366, 12201, 5372, 0, 0, 0, 7720, 7390, + 2696, 0, 0, 4638, 0, 1790, 78242, 5965, 64363, 66569, 68646, 194968, + 5376, 1835, 5335, 194966, 0, 4633, 0, 68119, 1180, 4632, 0, 5387, 5333, + 0, 0, 42094, 5331, 4634, 11928, 0, 5338, 4637, 0, 5971, 42414, 0, 1268, + 65097, 42361, 0, 0, 73853, 1427, 0, 0, 5970, 3431, 0, 10358, 10422, 4758, + 0, 1608, 2738, 0, 10455, 4753, 74026, 11344, 4222, 6240, 5231, 74384, 0, + 68377, 6248, 0, 0, 0, 42318, 0, 5229, 4757, 0, 0, 2728, 4752, 64563, + 65235, 5234, 0, 0, 0, 10713, 0, 0, 2622, 7460, 0, 0, 0, 8954, 74760, + 65189, 2632, 0, 10108, 1011, 5574, 1853, 2709, 65139, 5577, 0, 0, 118871, + 68641, 8965, 7635, 42177, 5316, 0, 5314, 6451, 5572, 0, 5312, 0, 5525, + 5330, 5319, 0, 0, 194907, 44003, 0, 0, 0, 120498, 0, 195009, 0, 74022, 0, + 64609, 0, 120634, 0, 5721, 0, 5519, 8632, 66465, 11267, 73961, 0, 5720, + 0, 1692, 4219, 4610, 8696, 4305, 0, 4609, 43478, 4614, 541, 0, 5287, + 5309, 5285, 68389, 5961, 4647, 56, 4216, 10577, 41381, 601, 4613, 0, 0, + 0, 4608, 64260, 41124, 5190, 67628, 0, 68145, 7086, 0, 119243, 67620, 0, + 2734, 11074, 0, 67627, 43593, 0, 67625, 5960, 0, 8992, 65293, 0, 1782, + 67622, 68114, 119939, 0, 68180, 5501, 119952, 42508, 7442, 43665, 359, + 41253, 68392, 6239, 119956, 41256, 0, 68134, 0, 74209, 0, 9346, 118904, + 41254, 0, 43291, 3767, 5737, 0, 4865, 0, 5740, 917997, 5736, 4368, 0, + 7193, 68137, 0, 5739, 41024, 4866, 0, 73904, 0, 4869, 120563, 0, 4223, 0, + 6650, 0, 0, 0, 0, 4870, 0, 68661, 6716, 78176, 68667, 68382, 68676, 0, + 10122, 4864, 66568, 4144, 7937, 0, 6245, 68652, 2732, 42734, 745, 0, + 195097, 0, 4777, 7821, 0, 68631, 42775, 0, 194954, 0, 3097, 0, 5966, 0, + 4778, 0, 10863, 0, 4781, 0, 64407, 0, 0, 8577, 0, 68196, 43285, 10216, + 4782, 0, 0, 120757, 68618, 12325, 43056, 8717, 0, 0, 4776, 0, 11492, + 8700, 0, 13176, 68363, 10426, 0, 917599, 10362, 0, 1715, 4849, 8242, + 9561, 73922, 43278, 42635, 0, 0, 5963, 917926, 0, 0, 4850, 0, 1607, 466, + 4853, 118995, 4854, 0, 5164, 0, 1350, 5124, 64420, 1993, 5362, 8471, + 2708, 0, 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, 0, 303, 0, 0, 0, 2437, + 0, 4221, 4844, 118869, 0, 0, 0, 0, 0, 43292, 0, 2441, 10739, 65090, 0, + 119327, 0, 2451, 2714, 119326, 0, 43379, 4937, 43376, 753, 5849, 10597, + 43089, 11722, 9248, 0, 42879, 11725, 0, 0, 2726, 3107, 73958, 4941, + 64937, 119233, 9140, 1408, 5261, 4607, 0, 181, 0, 4942, 9539, 4938, 0, + 65201, 5259, 9369, 64185, 4142, 5257, 0, 0, 4964, 5264, 64178, 64177, + 12979, 41411, 64182, 64181, 64180, 64179, 9482, 4873, 41231, 1822, 42526, + 0, 12758, 3865, 0, 0, 10500, 0, 0, 78028, 0, 9830, 43642, 389, 10893, + 7521, 0, 4872, 5463, 0, 3125, 9567, 0, 4878, 5459, 4604, 0, 9557, 5465, + 68617, 0, 11494, 0, 9563, 10865, 74570, 43279, 64186, 0, 78714, 64191, + 64190, 8898, 64188, 0, 41030, 78836, 0, 917835, 78820, 917834, 0, 78805, + 41031, 78801, 11960, 6745, 3082, 0, 78539, 73919, 10573, 41744, 7079, + 5856, 127043, 5163, 78809, 0, 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, 0, 42156, 78688, 0, + 64193, 64192, 78000, 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, 0, 64169, 64168, 64949, 10972, + 10251, 10247, 42768, 715, 64161, 43299, 9453, 5348, 10943, 120378, 0, + 11352, 550, 9910, 0, 0, 66579, 11551, 0, 0, 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, + 78196, 78192, 68136, 78190, 43412, 5064, 2431, 0, 9450, 1809, 0, 78200, + 78201, 5062, 1264, 64817, 13254, 11697, 0, 9785, 64716, 0, 3933, 74559, + 4740, 7954, 0, 0, 42609, 0, 74175, 0, 127016, 0, 0, 42130, 0, 5151, + 917829, 917823, 0, 0, 0, 7620, 3800, 65122, 0, 0, 8355, 7854, 0, 954, + 64927, 4185, 41045, 0, 41438, 41439, 68666, 10711, 4593, 0, 120584, 0, + 64774, 8053, 10532, 66727, 0, 0, 0, 64759, 6381, 5166, 9888, 0, 5148, + 42834, 0, 78205, 78206, 64140, 78204, 64131, 3119, 917814, 0, 3060, + 64135, 9986, 0, 77876, 636, 11698, 0, 0, 9916, 11701, 7836, 42741, 64137, + 8320, 78640, 8863, 0, 119960, 1477, 43289, 0, 74358, 8618, 0, 9908, 0, 0, + 0, 3937, 12312, 0, 0, 0, 64781, 912, 6349, 4536, 119963, 74532, 0, 6244, + 0, 194580, 3935, 120665, 0, 0, 11950, 5392, 42248, 65129, 68656, 5397, 0, + 12046, 12599, 0, 0, 5395, 0, 5393, 354, 68615, 119948, 78503, 0, 0, + 42039, 0, 0, 64142, 626, 0, 5895, 0, 0, 5780, 0, 0, 0, 0, 0, 43297, 0, + 4311, 4644, 8818, 0, 0, 0, 73818, 3918, 66452, 3797, 1644, 119944, 9658, + 4140, 11385, 65947, 6455, 9030, 813, 119945, 68131, 4146, 119957, 5360, + 2466, 0, 67669, 0, 6249, 42117, 0, 0, 0, 0, 74046, 120583, 4911, 988, + 917807, 0, 0, 43061, 7054, 64147, 0, 64920, 68195, 6698, 118933, 120349, + 0, 0, 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, 917866, 73736, 0, 9825, 6448, 6715, 127008, 4831, 0, 0, 0, + 5300, 4741, 42108, 0, 64159, 4736, 64148, 0, 849, 0, 78491, 43288, 0, + 66620, 0, 194920, 65549, 9496, 64598, 118866, 0, 7876, 68132, 917872, + 3928, 917870, 43378, 10706, 7198, 0, 4842, 12053, 0, 0, 4841, 0, 4171, + 12008, 6251, 3923, 1490, 0, 119591, 0, 40972, 5245, 0, 10114, 42001, + 41888, 4845, 8332, 40974, 64347, 4840, 9077, 78346, 1747, 917849, 4825, + 69240, 917852, 68655, 0, 0, 0, 0, 68628, 0, 9850, 118937, 367, 1472, + 917859, 6687, 1274, 0, 5905, 12339, 8919, 73953, 10907, 65261, 11023, + 119559, 4830, 9134, 78666, 64126, 43011, 0, 0, 64101, 0, 0, 4824, 10614, + 120390, 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, 120385, 0, 0, 0, 119053, 0, 12765, 64118, 126998, 12962, + 0, 0, 4017, 12827, 5241, 120392, 0, 41118, 3924, 0, 11366, 917843, 0, 0, + 917846, 41116, 917844, 917564, 0, 11363, 12057, 11917, 1567, 74000, 4721, + 0, 66202, 8957, 4139, 0, 0, 0, 0, 0, 12740, 0, 4722, 6816, 0, 12759, + 4725, 0, 4726, 0, 0, 0, 917904, 917905, 0, 12755, 12762, 4015, 0, 8052, + 476, 0, 0, 0, 64212, 41020, 1382, 64209, 64216, 64215, 64214, 1656, + 41831, 0, 0, 41843, 8720, 3908, 1452, 13111, 0, 64067, 0, 8552, 64113, + 41845, 3849, 78732, 66232, 9778, 120066, 5891, 7064, 55, 9948, 917911, 0, + 0, 7935, 67586, 0, 1114, 0, 67585, 78675, 120053, 120050, 120051, 3938, + 120057, 65417, 64717, 120060, 120061, 65415, 120059, 6292, 65303, 7955, + 6452, 4713, 917887, 66249, 917885, 917890, 917891, 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, 0, 12006, 0, 0, 0, 0, 0, 65414, 6454, 1229, 0, 66437, 66025, 78699, + 0, 42500, 120508, 4809, 9623, 917874, 78694, 917880, 917877, 917878, + 65405, 68159, 917881, 917882, 5365, 4545, 8901, 917566, 119555, 4813, 0, + 0, 5925, 4808, 64330, 0, 65475, 118940, 0, 4814, 0, 4810, 0, 0, 64928, + 10543, 0, 3522, 0, 414, 65404, 0, 0, 6456, 73820, 0, 6691, 42193, 0, 0, + 0, 74495, 0, 0, 0, 118820, 9751, 65407, 0, 11770, 3919, 0, 0, 65061, 0, + 0, 0, 12235, 0, 0, 195025, 64092, 0, 64080, 0, 64090, 0, 0, 10162, 10310, + 0, 8454, 0, 42038, 387, 41363, 12737, 0, 4780, 43368, 0, 64310, 64621, + 6732, 0, 0, 0, 0, 0, 8896, 0, 375, 6976, 66582, 119005, 0, 0, 0, 119202, + 119203, 12526, 43120, 2315, 0, 1938, 119197, 0, 4529, 119200, 119201, + 119198, 119199, 0, 0, 0, 13150, 64492, 0, 0, 0, 12902, 0, 42891, 66327, + 74298, 0, 10799, 0, 2587, 66372, 0, 4193, 120334, 4241, 0, 7998, 0, 0, 0, + 0, 2316, 118821, 0, 0, 0, 64297, 74799, 0, 74140, 0, 5373, 0, 0, 3762, + 10015, 0, 119232, 0, 41590, 0, 0, 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, 0, 68138, 13072, 1894, 0, 0, 65478, 43310, 7231, 0, + 11773, 0, 0, 0, 0, 2551, 0, 6453, 10200, 6235, 0, 119237, 0, 0, 4470, + 119613, 0, 7780, 5369, 118958, 5249, 0, 5367, 8756, 0, 0, 5377, 120585, + 68143, 1688, 78245, 0, 0, 0, 0, 0, 44020, 6808, 41319, 1300, 10650, + 41692, 64505, 4668, 0, 119624, 1465, 10850, 3943, 0, 41205, 41315, 0, 0, + 0, 5352, 0, 0, 8839, 41314, 7384, 7785, 41204, 0, 41209, 0, 0, 43607, 0, + 0, 5420, 3897, 0, 0, 74417, 4018, 0, 68127, 0, 0, 0, 0, 127526, 2561, + 68621, 3542, 41915, 12076, 7951, 68152, 118857, 5303, 6276, 1706, 0, + 78751, 74116, 0, 65150, 41819, 0, 73951, 10847, 41822, 9985, 860, 0, + 10506, 0, 0, 10753, 10830, 0, 615, 64490, 7574, 0, 77922, 0, 12909, + 43016, 64559, 127028, 0, 0, 0, 2020, 0, 4022, 0, 0, 77923, 0, 41691, 0, + 0, 74329, 0, 64622, 9070, 0, 68411, 3911, 42829, 43122, 1033, 74440, 0, + 7000, 3904, 0, 0, 0, 0, 127012, 13123, 10846, 3450, 0, 7397, 118807, 0, + 42778, 10000, 41088, 449, 0, 3777, 68458, 0, 9636, 0, 10738, 0, 9367, + 593, 41085, 3999, 65226, 41713, 12764, 0, 64409, 3596, 0, 0, 9763, + 120280, 120283, 12347, 124, 12981, 41127, 2092, 0, 0, 0, 0, 10820, 43987, + 0, 0, 1769, 41715, 2463, 78489, 0, 12770, 0, 1538, 0, 43124, 0, 195058, + 7795, 120300, 0, 4828, 1258, 0, 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, 0, + 1511, 9324, 78211, 10519, 66331, 3454, 19930, 0, 41019, 0, 0, 65292, + 6822, 12862, 0, 0, 42143, 41828, 78207, 65531, 78208, 118879, 55223, 0, + 0, 41826, 8865, 6402, 0, 13279, 7917, 120340, 0, 7733, 0, 4998, 0, 0, + 41950, 0, 4268, 0, 0, 0, 4013, 0, 10881, 0, 0, 0, 74788, 2014, 0, 0, + 9765, 0, 0, 0, 195059, 78357, 65281, 0, 10949, 0, 0, 0, 2015, 0, 0, 0, + 66318, 43233, 0, 42517, 0, 0, 0, 12698, 8094, 43445, 65909, 6474, 794, 0, + 12656, 0, 119353, 0, 1665, 0, 4833, 0, 119351, 0, 0, 189, 12611, 0, 0, + 2859, 4838, 0, 4834, 65078, 0, 0, 4837, 0, 770, 0, 811, 0, 41042, 917551, + 41318, 64427, 0, 0, 78848, 3895, 0, 74341, 3976, 0, 42859, 10193, 3116, + 7747, 0, 0, 0, 0, 0, 43686, 78846, 41877, 0, 2871, 64614, 0, 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, 0, 0, 0, + 119248, 394, 3088, 0, 0, 0, 3991, 64391, 0, 0, 424, 66328, 1999, 0, + 73914, 0, 0, 0, 0, 42231, 8246, 0, 0, 0, 41840, 0, 2377, 1298, 64011, + 12572, 11318, 12557, 12559, 12570, 8488, 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, 0, 9655, 0, 2004, 9096, 9782, 0, 9172, 0, 19965, + 0, 5955, 67666, 1108, 0, 74773, 0, 0, 64782, 3926, 0, 65210, 8798, 0, 0, + 1392, 0, 0, 917557, 10606, 8065, 118805, 10353, 10417, 0, 0, 64524, 0, + 4019, 0, 0, 43280, 8219, 68402, 1812, 0, 0, 0, 0, 42410, 74448, 119132, + 6054, 10697, 3169, 42297, 42322, 10642, 3909, 9950, 0, 0, 0, 68678, 0, 0, + 1049, 0, 65707, 2304, 41806, 0, 42336, 3921, 0, 11775, 64760, 11766, + 1038, 42303, 9823, 127278, 69236, 4008, 64004, 8773, 10733, 36, 0, 5153, + 41805, 0, 73735, 763, 41808, 64910, 0, 2009, 0, 0, 0, 9640, 119951, 0, + 120695, 8621, 0, 12852, 3031, 0, 64361, 0, 182, 194718, 0, 0, 119950, 0, + 9058, 366, 0, 9892, 5969, 11754, 10848, 4570, 65301, 44013, 4255, 0, + 10102, 41189, 4003, 41026, 68109, 13293, 41192, 0, 0, 42251, 0, 42534, + 65179, 11287, 6128, 0, 11034, 10923, 64423, 0, 65506, 0, 0, 74083, 0, + 9932, 0, 0, 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, 127116, + 4705, 716, 78004, 0, 4704, 120040, 120270, 42241, 161, 43977, 74546, + 66214, 4706, 0, 0, 42672, 4709, 10680, 0, 43293, 0, 0, 119164, 120328, 0, + 0, 1700, 119223, 0, 0, 0, 4004, 0, 10968, 43296, 0, 8506, 0, 0, 126996, + 1005, 937, 78216, 4734, 2870, 0, 78218, 0, 7463, 4729, 0, 235, 1384, + 4728, 0, 120420, 120644, 120421, 8109, 43105, 0, 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, 0, 73976, + 120305, 43371, 6941, 119349, 13205, 13211, 5801, 12769, 65905, 41697, + 1283, 120302, 4779, 0, 3719, 4006, 0, 19957, 0, 2021, 119332, 0, 0, + 43028, 65493, 41838, 3875, 5962, 64341, 119339, 9814, 43457, 5827, 3314, + 7787, 78234, 65494, 68153, 0, 0, 120636, 64531, 120692, 0, 0, 0, 66316, + 65467, 5771, 41298, 0, 9742, 521, 0, 10800, 0, 8404, 194625, 483, 7096, + 7089, 66323, 928, 0, 0, 119018, 10599, 11586, 3989, 10971, 0, 65782, + 9841, 8843, 12145, 0, 10074, 78548, 0, 3769, 0, 0, 0, 0, 9573, 0, 65290, + 8849, 0, 65855, 65112, 1796, 120505, 0, 78555, 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, 0, 7595, 42588, 7600, 120121, + 66035, 0, 0, 65851, 42607, 0, 0, 3168, 0, 42134, 0, 2370, 2846, 0, 0, 0, + 120132, 0, 1836, 0, 0, 119137, 3740, 0, 6290, 65374, 120451, 65923, 3944, + 66628, 120434, 0, 6135, 3118, 74265, 119093, 120446, 0, 0, 8127, 8975, + 64739, 7943, 0, 0, 10618, 2584, 0, 0, 0, 9998, 0, 0, 0, 0, 0, 6204, 0, 0, + 8279, 8776, 64954, 4975, 74809, 120130, 4267, 0, 42206, 0, 0, 195046, + 65700, 66562, 0, 64645, 0, 0, 0, 12586, 0, 9242, 0, 0, 4523, 5842, 10495, + 3122, 0, 7793, 78275, 9328, 0, 0, 12604, 0, 6615, 67650, 0, 3986, 44025, + 0, 8912, 64555, 7409, 0, 0, 9541, 78276, 0, 11275, 8540, 11498, 0, 0, + 41040, 2459, 0, 13060, 41041, 74413, 0, 0, 0, 68427, 10450, 12551, 41043, + 7020, 120353, 3765, 0, 0, 1606, 120348, 120351, 3093, 68436, 0, 0, + 120649, 0, 0, 4312, 74091, 120337, 120336, 11923, 4023, 120333, 5763, + 120335, 4827, 10894, 12810, 64406, 118785, 4455, 74321, 433, 119620, + 66660, 2499, 0, 0, 0, 11973, 13089, 4293, 120329, 42224, 42758, 12196, + 42837, 42226, 119319, 0, 119126, 5817, 0, 55277, 3120, 9797, 0, 0, 0, + 10389, 0, 0, 4895, 65358, 0, 4359, 585, 0, 3509, 0, 486, 4290, 5758, 0, + 0, 0, 7004, 0, 65880, 0, 119048, 2380, 11380, 0, 0, 2376, 0, 917847, 0, + 5197, 127046, 127047, 127048, 2366, 127050, 127051, 120554, 120045, 0, 0, + 0, 0, 0, 0, 0, 74188, 0, 0, 0, 120047, 0, 0, 0, 120049, 0, 1847, 0, + 10339, 0, 42384, 0, 4227, 74158, 0, 0, 43032, 0, 42365, 0, 12671, 11384, + 0, 0, 0, 64797, 0, 5820, 0, 120052, 120065, 0, 120064, 120650, 42137, + 9893, 2754, 12664, 120063, 0, 7377, 0, 41799, 65530, 1711, 12984, 43039, + 3114, 6255, 0, 118938, 0, 10853, 926, 0, 74184, 0, 120055, 0, 43175, 0, + 43037, 41798, 41035, 11583, 0, 41801, 119088, 0, 520, 4200, 12699, 8331, + 0, 3091, 41034, 127353, 0, 8360, 0, 78044, 321, 4229, 64543, 0, 65563, 0, + 917974, 2861, 0, 10095, 0, 0, 0, 1861, 0, 0, 0, 0, 43041, 0, 0, 0, 3859, + 12181, 41660, 8209, 0, 73867, 12973, 0, 74757, 127514, 41658, 0, 0, 5760, + 0, 743, 4414, 120766, 0, 42632, 917973, 65161, 73896, 0, 0, 1405, 119063, + 43220, 43341, 0, 19919, 0, 64532, 65367, 43710, 0, 0, 3513, 0, 118883, + 43342, 119064, 65529, 65364, 0, 0, 6485, 1397, 0, 41986, 0, 0, 0, 74097, + 0, 7471, 12079, 0, 12682, 43287, 0, 0, 0, 0, 0, 0, 1099, 10490, 0, 10501, + 65181, 74463, 0, 464, 41624, 65283, 67663, 78222, 1346, 0, 917631, 64724, + 64897, 423, 1818, 65144, 0, 8272, 0, 19911, 4218, 3087, 64960, 127234, + 43564, 0, 0, 9584, 10465, 0, 74359, 12626, 9106, 0, 42642, 0, 64750, + 9390, 0, 41797, 0, 0, 265, 41795, 64666, 0, 43530, 2752, 0, 0, 0, 59, 0, + 0, 0, 0, 77873, 41810, 0, 7010, 0, 41809, 41495, 119364, 0, 42252, 42213, + 8009, 3305, 43033, 511, 119320, 66255, 13127, 120067, 0, 0, 0, 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, 0, 3452, 11906, + 9581, 1385, 3098, 0, 119013, 43340, 0, 41033, 6493, 42626, 0, 0, 11426, + 0, 1681, 118789, 1204, 3755, 64661, 7235, 10170, 3966, 8911, 0, 41841, + 43338, 0, 0, 5726, 64915, 42175, 0, 0, 41497, 65044, 0, 2851, 43017, 0, + 0, 4373, 78058, 0, 9587, 1789, 6671, 0, 3100, 0, 65360, 0, 127510, 0, + 64922, 0, 8190, 12083, 0, 0, 6506, 64312, 74374, 2368, 0, 4419, 0, + 119125, 3439, 1825, 1192, 120106, 8891, 3080, 120228, 2347, 5430, 0, + 8990, 2848, 0, 0, 0, 249, 0, 0, 0, 120658, 0, 0, 8883, 917802, 728, + 68178, 995, 0, 0, 64826, 0, 917798, 0, 0, 19945, 8091, 558, 0, 12273, + 194814, 0, 12112, 0, 0, 0, 74419, 12335, 120104, 917795, 3443, 3129, 0, + 2102, 65445, 78258, 64891, 0, 7725, 0, 78255, 0, 8624, 69246, 12446, + 43295, 0, 41894, 0, 6277, 41672, 41893, 10010, 0, 3540, 0, 835, 0, 69816, + 119868, 74408, 0, 73959, 5426, 4258, 0, 0, 5424, 0, 8283, 0, 5434, 0, 0, + 19917, 11408, 0, 11947, 0, 1404, 3095, 11432, 194813, 3464, 6486, 4819, + 0, 0, 570, 8095, 3672, 119864, 1498, 67866, 0, 0, 431, 0, 0, 0, 0, 68167, + 0, 13096, 0, 0, 43408, 9516, 0, 5268, 42230, 42220, 0, 4450, 120723, + 11547, 43417, 0, 356, 3477, 227, 10488, 68203, 382, 11418, 0, 0, 0, 0, 0, + 0, 6484, 2541, 66039, 0, 78718, 0, 3549, 0, 9110, 119665, 2743, 0, 43290, + 194812, 9097, 0, 43015, 8782, 0, 776, 2524, 42707, 8573, 0, 0, 0, 0, + 42694, 64944, 8952, 3856, 118818, 0, 5872, 6495, 0, 0, 0, 0, 0, 120733, + 12849, 3953, 1897, 0, 65094, 11994, 4339, 74556, 0, 67843, 0, 0, 0, + 68473, 74104, 5228, 0, 7868, 43184, 0, 0, 73986, 43438, 0, 43022, 0, + 1162, 0, 2671, 0, 0, 0, 0, 118865, 4553, 73811, 0, 195005, 0, 0, 19921, + 74331, 11424, 195006, 4567, 41891, 0, 0, 55249, 4820, 65239, 194662, 0, + 0, 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, 127092, 120697, 844, 5014, 0, 256, 0, 9990, 0, 42739, + 0, 7542, 65464, 9726, 0, 6489, 10048, 74326, 78719, 66573, 0, 78724, + 78712, 11761, 194655, 0, 41094, 0, 0, 0, 0, 0, 6196, 6945, 194628, + 194890, 194631, 120491, 11816, 194943, 5733, 0, 0, 0, 41098, 0, 41093, 0, + 66626, 588, 9760, 0, 194717, 1238, 200, 0, 1660, 73916, 0, 118905, 74362, + 0, 0, 194651, 0, 0, 3394, 194894, 120668, 0, 0, 0, 66219, 0, 43284, + 194657, 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, 78713, 65328, 0, 74367, 7614, 0, + 11819, 0, 12009, 12399, 0, 67852, 65537, 0, 10841, 43430, 5301, 0, 0, + 5734, 8960, 0, 127527, 65317, 77880, 0, 0, 0, 12304, 0, 0, 65315, 0, 0, + 0, 0, 0, 119621, 0, 74536, 12447, 64486, 0, 0, 0, 0, 0, 0, 42767, 10915, + 0, 12007, 43695, 120520, 11975, 194878, 0, 0, 2555, 8629, 0, 43168, + 41872, 43706, 4496, 194879, 0, 0, 0, 0, 0, 0, 64730, 0, 66714, 68222, 0, + 0, 65596, 0, 11416, 4280, 67655, 8765, 12784, 7792, 1393, 127242, 67871, + 74386, 0, 8233, 43572, 0, 6683, 0, 3442, 12144, 2841, 12543, 0, 1473, + 42820, 64329, 917772, 0, 68642, 6488, 357, 1048, 41100, 0, 41104, 0, + 41099, 1054, 119065, 1040, 65450, 0, 4434, 1069, 0, 118862, 74231, + 917765, 0, 0, 0, 9693, 41943, 0, 41931, 41759, 12757, 4353, 0, 1059, + 9790, 8995, 0, 0, 65937, 0, 41764, 10646, 0, 118833, 0, 0, 74830, 78569, + 12743, 0, 6480, 917761, 41779, 42580, 66601, 12207, 119619, 6335, 66602, + 11312, 64807, 0, 0, 41767, 0, 0, 43020, 0, 3955, 74254, 0, 0, 917861, 0, + 77926, 9770, 9246, 12230, 0, 0, 0, 10448, 41783, 41786, 127093, 12797, + 2755, 64571, 78578, 194927, 4857, 0, 4428, 12794, 73755, 0, 78574, 0, 0, + 0, 5747, 78825, 0, 7978, 41092, 74571, 0, 11924, 74205, 42144, 65015, 0, + 563, 0, 0, 12798, 11271, 57, 0, 0, 917860, 119043, 0, 0, 43137, 694, 0, + 9876, 0, 119168, 0, 78822, 64537, 0, 277, 74385, 7229, 12761, 0, 0, + 13025, 64811, 8757, 78824, 0, 1574, 7381, 0, 2525, 4852, 5749, 68465, + 13027, 42824, 120574, 1039, 9801, 10155, 5745, 188, 41858, 11592, 0, + 74015, 9055, 41853, 4858, 917780, 0, 436, 4771, 0, 2786, 0, 4856, 8051, + 0, 119609, 0, 9644, 0, 0, 0, 194916, 120732, 66710, 118834, 0, 73906, 0, + 127114, 0, 10234, 5843, 11939, 0, 42157, 0, 3157, 194918, 68393, 0, 3504, + 119178, 0, 10822, 5149, 66029, 10226, 65142, 0, 3594, 42424, 194959, 40, 12657, 0, 0, 386, 0, 8834, 0, 12815, 43574, 0, 73907, 0, 74196, 7220, - 74504, 0, 74316, 0, 0, 4304, 74503, 8160, 0, 194753, 0, 0, 0, 1348, 0, 0, - 0, 13303, 0, 0, 194755, 7599, 1278, 0, 13269, 0, 0, 74387, 0, 0, 74492, - 6097, 7568, 8780, 4982, 0, 74501, 194763, 0, 194762, 2672, 3735, 194735, - 13138, 42266, 9484, 10724, 41202, 119024, 0, 0, 0, 9487, 0, 194765, 3842, - 195034, 195056, 12442, 6193, 9791, 0, 0, 42516, 7228, 7559, 74803, - 194689, 194851, 11399, 119219, 194856, 194855, 0, 194857, 3604, 0, 0, 0, - 0, 0, 42507, 1962, 194861, 194696, 42505, 11660, 0, 0, 0, 6995, 74173, - 5437, 74174, 10669, 8702, 7964, 194706, 0, 199, 194843, 4105, 194845, - 194701, 194847, 194710, 119875, 13148, 7560, 0, 9226, 0, 195070, 6472, - 65814, 73954, 0, 4724, 0, 0, 9191, 0, 0, 0, 0, 195024, 10196, 7886, 0, - 6585, 0, 6680, 195042, 0, 195051, 6679, 74412, 0, 194866, 74421, 11382, - 0, 0, 0, 0, 194833, 194832, 6681, 194834, 12693, 194836, 194839, 194838, - 194841, 194840, 65442, 119610, 118887, 12166, 74415, 66248, 194816, 0, - 194818, 194817, 194820, 194819, 5297, 7042, 13284, 6112, 7968, 194825, - 73929, 194738, 194736, 65746, 0, 74409, 74389, 194826, 4342, 42839, - 194831, 1677, 0, 0, 0, 917855, 11091, 11011, 2719, 0, 0, 0, 64495, 0, 0, - 7585, 65169, 42845, 4308, 917858, 74177, 7505, 543, 64916, 64736, 0, 0, - 66670, 0, 118922, 19911, 0, 43158, 7902, 0, 65265, 194639, 0, 0, 0, 0, 0, + 74504, 0, 74316, 0, 77932, 4304, 74503, 8160, 78707, 194753, 0, 0, 0, + 1348, 0, 78597, 0, 13303, 0, 0, 194755, 7599, 1278, 43616, 13269, 0, 0, + 74387, 78179, 78598, 74492, 6097, 7568, 8780, 4982, 0, 74501, 194763, + 78592, 194762, 2672, 3735, 194735, 13138, 42266, 9484, 10724, 41202, + 119024, 0, 43742, 0, 9487, 119959, 119117, 3842, 195034, 78668, 12442, + 6193, 9791, 0, 0, 42516, 7228, 7559, 74803, 78468, 194851, 11399, 119219, + 194691, 194855, 194690, 194857, 3604, 0, 119188, 0, 78540, 78541, 42507, + 1962, 78490, 78476, 42505, 11660, 0, 2072, 0, 6995, 74173, 5437, 74174, + 10669, 8702, 7964, 194706, 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, 0, 0, 195024, 10196, 7886, 0, 6585, + 0, 6680, 195042, 0, 195051, 6679, 74412, 0, 194866, 74421, 11382, 0, 0, + 0, 0, 194833, 194832, 6681, 194834, 12693, 194836, 42727, 194838, 194841, + 78195, 65442, 119610, 78199, 12166, 43248, 66248, 194816, 0, 194818, + 194817, 194820, 194819, 5297, 7042, 13284, 6112, 7968, 194825, 73927, + 194738, 194736, 65746, 0, 74409, 74389, 194826, 4342, 42839, 194831, + 1677, 0, 0, 194806, 917855, 11091, 11011, 2719, 0, 0, 119595, 64495, 0, + 0, 7585, 65169, 2052, 4308, 917858, 74177, 7505, 543, 64916, 64736, 0, 0, + 64655, 0, 118922, 2064, 0, 43158, 7902, 0, 65265, 194639, 0, 0, 0, 0, 0, 0, 12994, 0, 10828, 0, 6228, 4307, 3482, 0, 0, 0, 0, 506, 74573, 41194, - 65735, 0, 0, 41195, 0, 8169, 0, 8841, 0, 516, 0, 41197, 119051, 34, 0, - 120186, 120185, 1612, 74333, 120182, 120181, 74308, 12001, 120178, 10242, - 64564, 120179, 120174, 6584, 7749, 11037, 0, 1758, 0, 10667, 10560, - 120197, 120756, 1935, 11517, 120193, 120196, 120195, 1931, 120189, 74839, - 120191, 1217, 64702, 12643, 825, 0, 194905, 12294, 0, 194908, 9138, - 194910, 194902, 12631, 194911, 11080, 74554, 0, 5591, 1239, 0, 11313, 0, - 3403, 0, 0, 64364, 0, 0, 74582, 8998, 12988, 0, 9152, 0, 0, 194898, - 67589, 41850, 64290, 3433, 0, 12615, 1594, 65607, 6914, 67603, 0, 119569, + 65735, 2055, 43255, 41195, 0, 8169, 0, 8841, 0, 516, 0, 2063, 119051, 34, + 0, 120186, 11504, 1612, 74333, 120182, 74520, 74308, 12001, 120178, + 10242, 64564, 120179, 120174, 6584, 7749, 11037, 0, 1758, 0, 10667, + 10560, 120197, 120756, 1935, 11517, 120193, 120196, 120195, 1931, 120189, + 74839, 120191, 1217, 64702, 12643, 825, 0, 194905, 12294, 127261, 78834, + 9138, 78831, 78833, 12631, 78829, 11080, 74554, 0, 5591, 1239, 0, 11313, + 0, 3403, 0, 0, 64364, 0, 0, 74582, 8998, 12988, 0, 9152, 0, 0, 194898, + 67589, 41850, 64290, 3433, 0, 12615, 1594, 42192, 6914, 67603, 0, 119569, 74565, 41353, 67602, 67611, 4337, 0, 194897, 918, 65035, 41351, 7681, - 194900, 42577, 41393, 12668, 194904, 2477, 0, 0, 0, 0, 67604, 194880, 0, - 573, 194881, 194884, 11417, 194886, 194885, 194888, 67599, 0, 194889, - 67607, 11482, 0, 0, 3357, 0, 194891, 4207, 1288, 194892, 194895, 194894, - 0, 11589, 66354, 194872, 0, 0, 64602, 194670, 0, 0, 42788, 0, 64480, - 194875, 8423, 3348, 448, 194879, 9717, 0, 0, 997, 0, 0, 0, 0, 11440, - 11379, 42000, 13139, 0, 65013, 126999, 0, 73796, 0, 0, 12035, 0, 2818, 0, - 0, 73793, 0, 4172, 0, 0, 8373, 10873, 12197, 0, 0, 0, 0, 0, 126977, 0, 0, - 194865, 126982, 74563, 64828, 11419, 194868, 766, 1257, 0, 0, 11381, - 3265, 66617, 3274, 0, 0, 0, 0, 0, 41989, 0, 0, 0, 3263, 0, 65672, 0, - 3270, 64539, 11489, 0, 0, 0, 0, 9505, 65518, 0, 756, 195052, 0, 0, 0, - 7261, 0, 186, 0, 119156, 5770, 13179, 65830, 12612, 12949, 64856, 12800, - 0, 74203, 64718, 0, 0, 0, 118929, 0, 11578, 0, 119296, 0, 0, 0, 0, 74568, - 9254, 0, 1794, 120217, 64521, 5624, 120220, 120221, 119958, 120223, 3617, - 66636, 64886, 120211, 120212, 120213, 120214, 1872, 66508, 120467, 41079, - 10748, 5502, 119330, 4452, 0, 0, 0, 4511, 0, 0, 0, 11425, 0, 0, 1231, 0, - 0, 0, 9003, 8192, 0, 5305, 9653, 10616, 8694, 9546, 0, 0, 120478, 120200, - 65205, 120202, 64063, 9878, 74780, 119626, 120207, 64058, 8799, 42131, 0, - 64062, 1028, 64060, 64059, 837, 10567, 0, 43103, 0, 0, 11427, 2902, - 64043, 64042, 66464, 10756, 0, 42606, 64045, 64044, 0, 10076, 64040, - 64039, 0, 1034, 3392, 0, 43091, 64033, 64032, 65468, 64038, 64037, 64036, - 64035, 4291, 194928, 64015, 64014, 64681, 194930, 0, 194944, 0, 43090, 0, - 3476, 8973, 64012, 42473, 64010, 64008, 64007, 2003, 7706, 64517, 119183, + 194900, 42577, 41393, 12668, 194904, 2477, 0, 0, 127302, 0, 67604, + 194880, 127235, 573, 194881, 194884, 11417, 194886, 194885, 194888, + 67599, 0, 194889, 67607, 11482, 0, 0, 3357, 0, 42223, 4207, 1288, 78842, + 78839, 68419, 78837, 11589, 42195, 194872, 917627, 127263, 64602, 67618, + 0, 0, 42788, 68416, 64480, 194875, 8423, 3348, 448, 68476, 9717, 0, 0, + 997, 0, 0, 0, 0, 11440, 11379, 42000, 13139, 42221, 65013, 126999, 0, + 73796, 0, 119228, 12035, 0, 2818, 0, 0, 73793, 0, 4172, 0, 0, 8373, + 10873, 12197, 0, 0, 0, 0, 0, 78210, 0, 0, 194865, 126982, 74563, 64828, + 11419, 194868, 766, 1257, 0, 118845, 11381, 3265, 66617, 3274, 0, 0, 0, + 0, 119092, 41989, 0, 0, 0, 3263, 0, 65672, 0, 3270, 64539, 11489, 0, 0, + 0, 0, 9505, 65518, 194776, 756, 195052, 0, 0, 0, 7261, 0, 186, 0, 119156, + 5770, 13179, 65830, 12612, 12949, 64856, 12800, 0, 74203, 64718, 0, 0, 0, + 118929, 0, 11578, 0, 119296, 0, 0, 0, 0, 74568, 9254, 0, 1794, 120217, + 64521, 5624, 120220, 120221, 119958, 120223, 3617, 66636, 64886, 120211, + 120212, 120213, 120214, 1872, 66508, 120467, 41079, 10748, 5502, 119330, + 4452, 0, 0, 917879, 4511, 0, 0, 64678, 11425, 0, 43245, 1231, 0, 0, 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, 66464, 10756, 0, 42606, 64045, 64044, 43979, 10076, 64040, + 43060, 0, 1034, 3392, 0, 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, 0, 0, 4767, 9343, 64049, 64048, 120034, 1133, 64053, 64052, - 64051, 64050, 41340, 0, 0, 10005, 12329, 41333, 0, 8489, 1942, 0, 0, - 42520, 0, 0, 0, 10760, 64023, 64022, 64021, 6582, 0, 0, 64025, 9167, - 42151, 0, 0, 2026, 64019, 64018, 64017, 64016, 12768, 0, 7582, 0, 118915, - 0, 0, 0, 0, 120539, 0, 41411, 13094, 0, 7532, 41414, 0, 3179, 0, 64769, - 0, 0, 11461, 74454, 10751, 9051, 0, 0, 10535, 0, 0, 0, 2008, 64031, - 64030, 294, 41874, 0, 126991, 65929, 0, 0, 0, 0, 64028, 8146, 64026, - 41788, 194844, 0, 118795, 0, 119887, 119888, 0, 119886, 119891, 119892, - 119889, 11433, 119895, 119896, 0, 7801, 65578, 0, 12915, 0, 3297, 9699, - 0, 1135, 0, 0, 0, 1995, 7927, 0, 0, 2552, 41546, 60, 0, 8649, 41549, 0, - 0, 0, 6682, 0, 0, 64710, 41547, 0, 2013, 0, 119899, 119900, 119897, - 119898, 12832, 119904, 8081, 8362, 3537, 119908, 9137, 119906, 8999, 0, - 119909, 3466, 0, 0, 1996, 0, 3453, 6282, 0, 2002, 2000, 120175, 537, 0, - 4179, 65119, 1998, 0, 1842, 0, 0, 9628, 0, 12081, 9826, 64502, 1767, 0, - 0, 0, 120201, 0, 0, 0, 3059, 0, 120204, 119953, 120205, 0, 0, 0, 4100, - 920, 1811, 1355, 0, 0, 3592, 10078, 0, 0, 0, 8592, 65870, 68164, 0, + 43453, 64050, 41340, 118975, 0, 10005, 12329, 41333, 0, 8489, 1942, 0, 0, + 42520, 0, 0, 0, 10760, 64023, 64022, 64021, 6582, 43670, 0, 64025, 9167, + 42151, 78244, 0, 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, 0, 68218, 55274, 2008, 64031, 64030, 294, + 41874, 0, 126991, 65929, 0, 0, 0, 0, 64028, 8146, 64026, 41788, 194844, + 0, 118795, 6343, 43247, 119888, 0, 119886, 119891, 119892, 119889, 11433, + 119895, 119896, 0, 7801, 65578, 194839, 12915, 43968, 3297, 9699, 194955, + 1135, 0, 0, 0, 1995, 6722, 0, 0, 2552, 41546, 60, 68394, 8649, 41549, + 78496, 0, 0, 6682, 0, 78679, 64710, 41547, 0, 2013, 0, 78530, 78532, + 78528, 78529, 12832, 78493, 8081, 8362, 3537, 119908, 9137, 119906, 8999, + 0, 78533, 3466, 0, 0, 1996, 0, 3453, 6282, 0, 2002, 2000, 120175, 537, 0, + 4179, 65119, 1998, 0, 1842, 0, 0, 9628, 68446, 12081, 9826, 64502, 1767, + 0, 0, 0, 120201, 0, 0, 0, 3059, 44024, 120204, 119953, 120205, 0, 0, 0, + 4100, 920, 1811, 1355, 0, 0, 3592, 10078, 0, 0, 0, 8592, 65870, 68164, 0, 10742, 0, 0, 1994, 9281, 3296, 12865, 1997, 1895, }; Modified: python/branches/py3k/Objects/unicodetype_db.h ============================================================================== --- python/branches/py3k/Objects/unicodetype_db.h (original) +++ python/branches/py3k/Objects/unicodetype_db.h Fri Mar 19 14:37:08 2010 @@ -64,11 +64,13 @@ {0, 10795, 0, 0, 0, 1921}, {0, 65373, 0, 0, 0, 1921}, {0, 10792, 0, 0, 0, 1921}, + {10815, 0, 10815, 0, 0, 1801}, {0, 65341, 0, 0, 0, 1921}, {0, 69, 0, 0, 0, 1921}, {0, 71, 0, 0, 0, 1921}, {10783, 0, 10783, 0, 0, 1801}, {10780, 0, 10780, 0, 0, 1801}, + {10782, 0, 10782, 0, 0, 1801}, {65326, 0, 65326, 0, 0, 1801}, {65330, 0, 65330, 0, 0, 1801}, {65331, 0, 65331, 0, 0, 1801}, @@ -175,6 +177,8 @@ {0, 54756, 0, 0, 0, 1921}, {0, 54787, 0, 0, 0, 1921}, {0, 54753, 0, 0, 0, 1921}, + {0, 54754, 0, 0, 0, 1921}, + {0, 54721, 0, 0, 0, 1921}, {58272, 0, 58272, 0, 0, 1801}, {0, 0, 0, 0, 0, 5889}, {42877, 7545, 42877, 0, 0, 3969}, @@ -185,508 +189,508 @@ /* type indexes */ #define SHIFT 7 static unsigned char index1[] = { - 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 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, 40, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 16, 50, 51, 52, - 16, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 63, 63, 64, 65, 66, 63, - 63, 63, 67, 68, 69, 63, 63, 63, 63, 63, 63, 70, 16, 71, 72, 73, 74, 75, - 76, 63, 77, 78, 79, 80, 81, 82, 83, 63, 63, 84, 85, 40, 40, 40, 40, 40, - 40, 86, 40, 40, 40, 40, 40, 87, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, - 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, - 40, 40, 40, 40, 40, 40, 40, 40, 88, 89, 90, 91, 40, 40, 40, 92, 40, 40, - 40, 93, 94, 40, 40, 40, 40, 40, 95, 40, 40, 40, 96, 40, 40, 40, 40, 40, - 40, 40, 40, 40, 40, 97, 98, 99, 40, 40, 40, 40, 40, 40, 100, 101, 40, 40, - 40, 40, 40, 40, 40, 40, 102, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, - 40, 40, 40, 103, 40, 40, 40, 40, 40, 40, 40, 40, 104, 40, 40, 40, 40, - 100, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, - 40, 40, 40, 103, 40, 40, 40, 40, 40, 40, 105, 40, 40, 40, 40, 40, 40, 40, - 40, 40, 40, 40, 40, 40, 40, 40, 40, 106, 107, 40, 40, 40, 40, 40, 40, 40, - 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 108, 109, 40, 40, 40, 40, 40, 40, - 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 110, 40, 40, 40, 40, 40, 40, - 40, 40, 40, 111, 40, 40, 112, 113, 114, 115, 116, 117, 118, 16, 119, 16, - 16, 16, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, - 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, - 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, - 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, - 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 120, - 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, - 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, - 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, - 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, 123, 124, 125, - 126, 127, 128, 40, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 16, - 139, 140, 141, 142, 143, 16, 16, 16, 16, 16, 16, 144, 16, 145, 16, 146, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 40, 40, 40, 40, 40, 40, 147, 16, 148, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 63, - 149, 150, 151, 152, 16, 153, 16, 154, 155, 156, 157, 158, 159, 160, 161, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 162, 163, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 164, 165, 166, 40, 40, 40, 40, 40, 40, - 40, 40, 40, 40, 40, 40, 40, 40, 40, 86, 167, 40, 168, 169, 40, 40, 40, - 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, - 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, - 40, 40, 40, 40, 40, 40, 40, 40, 40, 170, 40, 40, 40, 40, 40, 40, 40, 40, - 40, 40, 40, 171, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, - 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, - 40, 40, 172, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, - 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, - 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, - 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, - 40, 40, 40, 40, 40, 40, 40, 40, 173, 40, 40, 40, 40, 40, 40, 40, 40, 40, - 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, - 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, - 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, - 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, - 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, - 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, - 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, - 40, 174, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 40, 170, 40, 40, 175, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 176, 16, - 177, 178, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, - 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, - 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, - 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, - 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, - 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, - 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, - 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, - 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, - 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, - 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, - 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, - 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, - 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, - 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, - 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, - 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, - 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, - 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, - 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, - 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, - 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, - 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, - 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, - 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, - 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, - 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, - 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, - 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, - 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, - 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, - 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, - 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, - 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, - 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, - 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, - 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 179, 121, 121, - 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, - 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, - 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, - 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, - 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, - 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, - 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, - 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, - 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, - 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, - 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, - 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, - 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, - 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, - 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, - 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, - 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, - 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, - 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, - 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, - 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, - 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, - 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, - 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, - 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, - 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, - 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, - 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, - 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, - 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, - 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, - 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, - 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, - 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, - 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, - 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, - 121, 121, 121, 121, 121, 179, + 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, 34, 35, 36, 37, + 38, 39, 34, 34, 34, 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, 64, 64, 65, 66, 67, 64, + 64, 64, 68, 69, 70, 64, 64, 64, 64, 64, 64, 71, 17, 72, 73, 74, 75, 76, + 77, 64, 78, 79, 80, 81, 82, 83, 84, 64, 64, 85, 86, 34, 34, 34, 34, 34, + 34, 87, 34, 34, 34, 34, 34, 88, 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, 89, 90, 91, 92, 34, 34, 34, 93, 34, 34, + 34, 94, 95, 34, 34, 34, 34, 34, 96, 34, 34, 34, 97, 34, 34, 34, 34, 34, + 34, 34, 34, 34, 34, 98, 99, 100, 34, 34, 34, 34, 34, 34, 101, 102, 34, + 34, 34, 34, 34, 34, 34, 34, 103, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, + 34, 34, 34, 34, 104, 34, 34, 34, 34, 34, 34, 34, 34, 105, 34, 34, 34, 34, + 101, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, + 34, 34, 34, 104, 34, 34, 34, 34, 34, 34, 106, 34, 34, 34, 34, 34, 34, 34, + 34, 34, 34, 34, 34, 34, 34, 34, 34, 107, 108, 34, 34, 34, 34, 34, 34, 34, + 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 109, 110, 34, 34, 34, 34, 34, 34, + 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 111, 34, 34, 34, 34, 34, 34, + 34, 34, 34, 112, 34, 34, 113, 114, 115, 116, 117, 118, 119, 120, 121, + 122, 17, 123, 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, + 124, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, + 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, + 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, + 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, + 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 126, 127, 128, + 129, 130, 131, 132, 34, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, + 17, 143, 144, 145, 146, 147, 17, 17, 17, 17, 17, 17, 148, 17, 149, 17, + 150, 17, 151, 17, 152, 17, 17, 17, 153, 17, 17, 17, 17, 154, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 34, 34, 34, 34, 34, 34, 155, 17, 156, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 34, 34, 34, 34, 34, 34, 34, 34, 157, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 64, 158, 159, 160, 161, 17, 162, 17, 163, 164, 165, 166, 167, 168, + 169, 170, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 171, 172, 173, + 174, 175, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 176, 177, 178, 34, 34, 34, + 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 87, 179, 34, 180, 181, + 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, 182, 34, 34, 34, 34, 34, + 34, 34, 34, 34, 34, 34, 183, 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, 184, 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, 185, 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, 186, 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, 187, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 34, 182, 34, 34, 188, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 189, 17, 190, 191, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 125, 125, 125, 125, 125, 125, + 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, + 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, + 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, + 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, + 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, + 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, + 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, + 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, + 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, + 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, + 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, + 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, + 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, + 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, + 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, + 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, + 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, + 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, + 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, + 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, + 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, + 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, + 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, + 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, + 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, + 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, + 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, + 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, + 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, + 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, + 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, + 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, + 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, + 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, + 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, + 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, + 125, 192, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, + 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, + 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, + 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, + 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, + 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, + 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, + 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, + 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, + 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, + 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, + 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, + 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, + 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, + 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, + 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, + 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, + 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, + 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, + 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, + 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, + 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, + 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, + 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, + 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, + 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, + 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, + 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, + 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, + 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, + 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, + 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, + 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, + 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, + 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, + 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, + 125, 125, 125, 125, 125, 125, 125, 125, 125, 192, }; static unsigned char index2[] = { @@ -720,11 +724,11 @@ 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 58, 19, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 19, 19, 19, 19, 19, 19, 59, 26, - 27, 60, 61, 19, 19, 26, 27, 62, 63, 64, 26, 27, 26, 27, 26, 27, 26, 27, - 26, 27, 65, 66, 19, 67, 68, 19, 69, 69, 19, 70, 19, 71, 19, 19, 19, 19, - 69, 19, 19, 72, 19, 19, 19, 19, 73, 74, 19, 75, 19, 19, 19, 74, 19, 76, - 77, 19, 19, 78, 19, 19, 19, 19, 19, 19, 19, 79, 19, 19, 80, 19, 19, 80, - 19, 19, 19, 19, 80, 81, 82, 82, 83, 19, 19, 19, 19, 19, 84, 19, 50, 19, + 27, 60, 61, 62, 62, 26, 27, 63, 64, 65, 26, 27, 26, 27, 26, 27, 26, 27, + 26, 27, 66, 67, 68, 69, 70, 19, 71, 71, 19, 72, 19, 73, 19, 19, 19, 19, + 71, 19, 19, 74, 19, 19, 19, 19, 75, 76, 19, 77, 19, 19, 19, 76, 19, 78, + 79, 19, 19, 80, 19, 19, 19, 19, 19, 19, 19, 81, 19, 19, 82, 19, 19, 82, + 19, 19, 19, 19, 82, 83, 84, 84, 85, 19, 19, 19, 19, 19, 86, 19, 50, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 5, 5, 5, 5, 50, 50, 50, 50, 50, 50, 50, @@ -734,40 +738,40 @@ 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 85, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 87, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 26, 27, 26, 27, 50, 5, 26, 27, 0, 0, 86, - 45, 45, 45, 5, 0, 0, 0, 0, 0, 5, 5, 87, 17, 88, 88, 88, 0, 89, 0, 90, 90, + 17, 17, 17, 17, 17, 17, 17, 17, 26, 27, 26, 27, 50, 5, 26, 27, 0, 0, 88, + 45, 45, 45, 5, 0, 0, 0, 0, 0, 5, 5, 89, 17, 90, 90, 90, 0, 91, 0, 92, 92, 19, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 0, 16, 16, 16, 16, 16, 16, 16, 16, 16, 91, 92, 92, 92, 19, 18, 18, 18, - 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 93, 18, 18, 18, - 18, 18, 18, 18, 18, 18, 94, 95, 95, 96, 97, 98, 99, 99, 99, 100, 101, - 102, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, - 27, 26, 27, 26, 27, 26, 27, 103, 104, 105, 19, 106, 107, 5, 26, 27, 108, - 26, 27, 19, 58, 58, 58, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, - 109, 109, 109, 109, 109, 109, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 0, 16, 16, 16, 16, 16, 16, 16, 16, 16, 93, 94, 94, 94, 19, 18, 18, 18, + 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 95, 18, 18, 18, + 18, 18, 18, 18, 18, 18, 96, 97, 97, 98, 99, 100, 101, 101, 101, 102, 103, + 104, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, + 27, 26, 27, 26, 27, 26, 27, 105, 106, 107, 19, 108, 109, 5, 26, 27, 110, + 26, 27, 19, 58, 58, 58, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, + 111, 111, 111, 111, 111, 111, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, - 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 104, - 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, - 104, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, + 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 106, + 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, + 106, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 5, 17, 17, 17, 17, 17, 5, 5, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, - 26, 27, 26, 27, 26, 27, 110, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, - 27, 26, 27, 111, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, + 26, 27, 26, 27, 26, 27, 112, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, + 27, 26, 27, 113, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, - 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 112, 112, 112, 112, 112, 112, 112, 112, - 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, - 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, - 112, 112, 0, 0, 50, 5, 5, 5, 5, 5, 5, 0, 113, 113, 113, 113, 113, 113, - 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, - 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, - 113, 113, 113, 113, 19, 0, 5, 5, 0, 0, 0, 0, 0, 0, 17, 17, 17, 17, 17, + 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 114, 114, 114, 114, 114, 114, 114, 114, + 114, 114, 114, 114, 114, 114, 114, 114, 114, 114, 114, 114, 114, 114, + 114, 114, 114, 114, 114, 114, 114, 114, 114, 114, 114, 114, 114, 114, + 114, 114, 0, 0, 50, 5, 5, 5, 5, 5, 5, 0, 115, 115, 115, 115, 115, 115, + 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, + 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, + 115, 115, 115, 115, 19, 0, 5, 5, 0, 0, 0, 0, 0, 0, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 5, 17, 5, 17, 17, 5, 17, 17, 5, 17, 0, 0, 0, 0, 0, 0, 0, @@ -800,29 +804,35 @@ 0, 0, 0, 0, 0, 0, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 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, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 50, 50, 5, 5, 5, 5, 50, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 17, 50, 50, 5, 5, 5, 5, 50, 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, 17, 17, 17, + 17, 50, 17, 17, 17, 17, 17, 17, 17, 17, 17, 50, 17, 17, 17, 50, 17, 17, + 17, 17, 17, 0, 0, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 17, 17, 17, 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, 50, 50, 50, 50, 50, 50, 50, 0, 0, 17, 50, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 0, 0, 50, 17, 17, 17, 17, 0, 0, 0, 50, 50, 50, 50, 50, 50, + 17, 17, 17, 17, 0, 50, 17, 17, 17, 17, 17, 0, 0, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 17, 17, 5, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 5, 50, - 50, 0, 0, 0, 0, 0, 0, 0, 0, 50, 50, 50, 50, 50, 0, 17, 17, 17, 0, 50, 50, - 50, 50, 50, 50, 50, 50, 0, 0, 50, 50, 0, 0, 50, 50, 50, 50, 50, 50, 50, - 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 0, 50, 50, - 50, 50, 50, 50, 50, 0, 50, 0, 0, 0, 50, 50, 50, 50, 0, 0, 17, 50, 17, 17, - 17, 17, 17, 17, 17, 0, 0, 17, 17, 0, 0, 17, 17, 17, 50, 0, 0, 0, 0, 0, 0, - 0, 0, 17, 0, 0, 0, 0, 50, 50, 0, 50, 50, 50, 17, 17, 0, 0, 6, 7, 8, 9, - 10, 11, 12, 13, 14, 15, 50, 50, 5, 5, 24, 24, 24, 24, 5, 24, 5, 0, 0, 0, - 0, 0, 0, 17, 17, 17, 0, 50, 50, 50, 50, 50, 50, 0, 0, 0, 0, 50, 50, 0, 0, - 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, - 50, 50, 50, 50, 0, 50, 50, 50, 50, 50, 50, 50, 0, 50, 50, 0, 50, 50, 0, - 50, 50, 0, 0, 17, 0, 17, 17, 17, 17, 17, 0, 0, 0, 0, 17, 17, 0, 0, 17, + 50, 0, 0, 0, 0, 0, 0, 50, 50, 50, 50, 50, 50, 50, 0, 17, 17, 17, 0, 50, + 50, 50, 50, 50, 50, 50, 50, 0, 0, 50, 50, 0, 0, 50, 50, 50, 50, 50, 50, + 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 0, 50, + 50, 50, 50, 50, 50, 50, 0, 50, 0, 0, 0, 50, 50, 50, 50, 0, 0, 17, 50, 17, + 17, 17, 17, 17, 17, 17, 0, 0, 17, 17, 0, 0, 17, 17, 17, 50, 0, 0, 0, 0, + 0, 0, 0, 0, 17, 0, 0, 0, 0, 50, 50, 0, 50, 50, 50, 17, 17, 0, 0, 6, 7, 8, + 9, 10, 11, 12, 13, 14, 15, 50, 50, 5, 5, 24, 24, 24, 24, 24, 24, 5, 5, 0, + 0, 0, 0, 0, 17, 17, 17, 0, 50, 50, 50, 50, 50, 50, 0, 0, 0, 0, 50, 50, 0, + 0, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, + 50, 50, 50, 50, 50, 0, 50, 50, 50, 50, 50, 50, 50, 0, 50, 50, 0, 50, 50, + 0, 50, 50, 0, 0, 17, 0, 17, 17, 17, 17, 17, 0, 0, 0, 0, 17, 17, 0, 0, 17, 17, 17, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0, 50, 50, 50, 50, 0, 50, 0, 0, 0, 0, 0, 0, 0, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 17, 17, 50, 50, 50, 17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 17, 17, 0, 50, 50, 50, 50, 50, 50, @@ -872,14 +882,14 @@ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 17, 5, 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, 50, 50, 50, 50, 50, 50, 50, 50, 17, 50, 114, + 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 17, 50, 116, 17, 17, 17, 17, 17, 17, 17, 0, 0, 0, 0, 5, 50, 50, 50, 50, 50, 50, 50, 17, 17, 17, 17, 17, 17, 17, 17, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 5, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 50, 0, 50, 0, 0, 50, 50, 0, 50, 0, 0, 50, 0, 0, 0, 0, 0, 0, 50, 50, 50, 50, 0, 50, 50, 50, 50, 50, 50, 50, 0, 50, 50, 50, 0, 50, 0, 50, 0, 0, 50, 50, 0, 50, 50, 50, 50, 17, - 50, 114, 17, 17, 17, 17, 17, 17, 0, 17, 17, 50, 0, 0, 50, 50, 50, 50, 50, + 50, 116, 17, 17, 17, 17, 17, 17, 0, 17, 17, 50, 0, 0, 50, 50, 50, 50, 50, 0, 50, 0, 17, 17, 17, 17, 17, 17, 0, 0, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 0, 0, 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, 50, 5, 5, 5, 5, 5, 5, 5, @@ -893,7 +903,7 @@ 17, 17, 17, 17, 17, 17, 17, 0, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 0, 5, 5, 5, 5, 5, 5, 5, 5, 17, 5, 5, 5, - 5, 5, 5, 0, 5, 5, 5, 5, 5, 5, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 5, 5, 5, 0, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -903,55 +913,49 @@ 17, 50, 50, 50, 50, 17, 17, 17, 50, 17, 17, 17, 50, 50, 17, 17, 17, 17, 17, 17, 17, 50, 50, 50, 17, 17, 17, 17, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 50, - 17, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 0, 0, 0, 0, 5, 5, 115, 115, 115, - 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, - 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, - 115, 115, 115, 115, 115, 115, 115, 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, + 17, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 17, 17, 17, 17, 5, 5, 117, 117, + 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, + 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, + 117, 117, 117, 117, 117, 117, 117, 117, 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, 5, 50, 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, 5, 50, 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, 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, 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, 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, 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, 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, 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, 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, 50, 50, 50, 50, 0, 0, 50, 50, - 50, 50, 50, 50, 50, 0, 50, 0, 50, 50, 50, 50, 0, 0, 50, 50, 50, 50, 50, + 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 0, 50, 50, 50, 50, 0, + 0, 50, 50, 50, 50, 50, 50, 50, 0, 50, 0, 50, 50, 50, 50, 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, - 0, 50, 50, 50, 50, 0, 0, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, + 50, 50, 50, 0, 50, 50, 50, 50, 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, 0, 50, 50, 50, 50, 0, 0, 50, 50, 50, 50, 50, 50, 50, 0, 50, - 0, 50, 50, 50, 50, 0, 0, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, - 50, 50, 50, 0, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, + 50, 50, 50, 50, 50, 50, 0, 50, 50, 50, 50, 0, 0, 50, 50, 50, 50, 50, 50, + 50, 0, 50, 0, 50, 50, 50, 50, 0, 0, 50, 50, 50, 50, 50, 50, 50, 50, 50, + 50, 50, 50, 50, 50, 50, 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, 50, 50, 50, 50, 50, 50, 50, - 50, 50, 50, 50, 50, 50, 50, 0, 50, 50, 50, 50, 0, 0, 50, 50, 50, 50, 50, + 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 0, 50, 50, 50, 50, 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, 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, 17, 5, 5, 5, 5, 5, 5, 5, 5, - 5, 116, 117, 118, 119, 120, 121, 122, 123, 124, 24, 24, 24, 24, 24, 24, - 24, 24, 24, 24, 24, 0, 0, 0, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, - 50, 50, 50, 50, 50, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 0, 0, 0, 0, 0, 0, 50, + 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 0, 0, 0, 0, 17, 5, 5, 5, 5, + 5, 5, 5, 5, 5, 118, 119, 120, 121, 122, 123, 124, 125, 126, 24, 24, 24, + 24, 24, 24, 24, 24, 24, 24, 24, 0, 0, 0, 50, 50, 50, 50, 50, 50, 50, 50, + 50, 50, 50, 50, 50, 50, 50, 50, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 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, 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, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 5, 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, 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, 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, @@ -963,101 +967,106 @@ 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, 50, 50, 50, 50, 50, 50, 50, + 50, 50, 50, 50, 50, 50, 5, 5, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, + 50, 50, 50, 50, 50, 50, 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, 5, 5, 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, 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, 5, 5, 5, 127, 127, 127, 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, 0, 50, + 50, 50, 50, 17, 17, 17, 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, 17, 17, 17, 5, 5, + 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, 17, 17, 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, 0, 50, 50, 50, 0, 17, + 17, 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, 50, 50, 50, 50, + 50, 50, 50, 50, 50, 50, 50, 50, 1, 1, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 5, 5, 5, 50, 5, 5, 5, 5, 50, 17, 0, 0, 6, 7, 8, 9, 10, 11, + 12, 13, 14, 15, 0, 0, 0, 0, 0, 0, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, + 0, 0, 0, 0, 0, 0, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 17, 17, 17, 2, 0, 6, + 7, 8, 9, 10, 11, 12, 13, 14, 15, 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, 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, 5, 5, 50, 50, 50, 50, 50, 50, 50, 50, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 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, 5, 5, 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, 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, 50, 17, 50, 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, 5, 5, 5, 125, 125, 125, 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, 0, 50, 50, - 50, 50, 17, 17, 17, 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, 17, 17, 17, 5, 5, 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, 17, 17, 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, 0, 50, 50, 50, 0, 17, 17, - 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, 50, 50, 50, 50, 50, - 50, 50, 50, 50, 50, 50, 50, 1, 1, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 5, 5, 5, 50, 5, 5, 5, 5, 50, 17, 0, 0, 6, 7, 8, 9, 10, 11, 12, - 13, 14, 15, 0, 0, 0, 0, 0, 0, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 0, - 0, 0, 0, 0, 0, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 17, 17, 17, 2, 0, 6, 7, - 8, 9, 10, 11, 12, 13, 14, 15, 0, 0, 0, 0, 0, 0, 50, 50, 50, 50, 50, 50, + 50, 50, 50, 50, 50, 50, 50, 50, 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, 0, 0, 0, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 0, 0, 0, 0, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 0, 0, 0, 0, 5, 0, 0, 0, 5, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 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, 50, 50, 50, 50, 50, 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, 50, 50, 50, 50, 0, 0, 0, 0, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 50, + 50, 50, 50, 50, 50, 50, 17, 17, 0, 0, 0, 0, 0, 0, 6, 7, 8, 9, 10, 11, 12, + 13, 14, 15, 7, 0, 0, 0, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 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, 50, 50, + 17, 17, 17, 17, 17, 0, 0, 5, 5, 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, 50, 50, 17, 50, 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, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 0, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 0, 0, 17, 6, 7, 8, 9, 10, 11, + 12, 13, 14, 15, 0, 0, 0, 0, 0, 0, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 0, + 0, 0, 0, 0, 0, 5, 5, 5, 5, 5, 5, 5, 50, 5, 5, 5, 5, 5, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, 17, 17, 17, 17, 17, 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, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 0, 0, 0, 0, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 0, 0, 0, 0, 5, 0, 0, 0, 5, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 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, 50, 50, 50, 50, 50, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, + 50, 50, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 50, 50, 50, 50, 50, 50, 50, 0, 0, 0, 0, 6, 7, 8, 9, 10, 11, 12, 13, + 14, 15, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 5, 5, 5, 5, 5, 5, 5, 5, 5, 0, 0, 0, 17, 17, 17, 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, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 50, 50, - 50, 50, 50, 50, 50, 17, 17, 0, 0, 0, 0, 0, 0, 6, 7, 8, 9, 10, 11, 12, 13, - 14, 15, 0, 0, 0, 0, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, - 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 50, 50, 50, 50, 50, 50, - 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 17, - 17, 17, 17, 17, 0, 0, 5, 5, 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, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 0, 0, 0, 50, 50, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 17, 17, 17, 17, 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, 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, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 0, 0, 0, 5, 5, 5, 5, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 0, 0, 0, 50, + 50, 50, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 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, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 50, 50, 50, 50, 50, 50, 50, 0, 0, 0, 0, 6, 7, 8, 9, 10, - 11, 12, 13, 14, 15, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 5, 5, 5, 5, 5, 5, 5, 5, 5, 0, 0, 0, - 17, 17, 17, 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, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 0, 0, 0, 50, 50, 6, 7, 8, 9, 10, 11, 12, 13, - 14, 15, 0, 0, 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, 5, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 0, 0, 0, 5, 5, 5, 5, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 0, 0, - 0, 50, 50, 50, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 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, 5, 5, 19, 19, 19, 19, - 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 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, + 17, 17, 17, 5, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 50, 50, 50, 50, 17, 50, 50, 50, 50, 17, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, - 19, 19, 19, 19, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, + 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 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, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, - 19, 19, 19, 19, 19, 19, 19, 19, 50, 126, 19, 19, 19, 127, 19, 19, 19, 19, + 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, - 19, 19, 19, 19, 19, 19, 19, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, + 19, 19, 50, 128, 19, 19, 19, 129, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, + 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, + 19, 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, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 50, 50, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 17, 26, 27, 26, 27, 26, 27, - 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, + 17, 17, 17, 17, 17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 17, 17, 17, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, @@ -1065,50 +1074,50 @@ 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, - 19, 19, 19, 19, 19, 128, 19, 19, 129, 19, 26, 27, 26, 27, 26, 27, 26, 27, + 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 19, 19, 19, 19, 19, 130, + 19, 19, 131, 19, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, - 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 130, 130, - 130, 130, 130, 130, 130, 130, 131, 131, 131, 131, 131, 131, 131, 131, - 130, 130, 130, 130, 130, 130, 0, 0, 131, 131, 131, 131, 131, 131, 0, 0, - 130, 130, 130, 130, 130, 130, 130, 130, 131, 131, 131, 131, 131, 131, - 131, 131, 130, 130, 130, 130, 130, 130, 130, 130, 131, 131, 131, 131, - 131, 131, 131, 131, 130, 130, 130, 130, 130, 130, 0, 0, 131, 131, 131, - 131, 131, 131, 0, 0, 19, 130, 19, 130, 19, 130, 19, 130, 0, 131, 0, 131, - 0, 131, 0, 131, 130, 130, 130, 130, 130, 130, 130, 130, 131, 131, 131, - 131, 131, 131, 131, 131, 132, 132, 133, 133, 133, 133, 134, 134, 135, - 135, 136, 136, 137, 137, 0, 0, 130, 130, 130, 130, 130, 130, 130, 130, - 138, 138, 138, 138, 138, 138, 138, 138, 130, 130, 130, 130, 130, 130, - 130, 130, 138, 138, 138, 138, 138, 138, 138, 138, 130, 130, 130, 130, - 130, 130, 130, 130, 138, 138, 138, 138, 138, 138, 138, 138, 130, 130, 19, - 139, 19, 0, 19, 19, 131, 131, 140, 140, 141, 5, 142, 5, 5, 5, 19, 139, - 19, 0, 19, 19, 143, 143, 143, 143, 141, 5, 5, 5, 130, 130, 19, 19, 0, 0, - 19, 19, 131, 131, 144, 144, 0, 5, 5, 5, 130, 130, 19, 19, 19, 105, 19, - 19, 131, 131, 145, 145, 108, 5, 5, 5, 0, 0, 19, 139, 19, 0, 19, 19, 146, - 146, 147, 147, 141, 5, 5, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, - 1, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, - 5, 3, 3, 1, 1, 1, 1, 1, 2, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, - 17, 17, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 17, 5, - 5, 5, 5, 5, 5, 5, 5, 5, 5, 2, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 1, 1, 1, 1, - 1, 1, 148, 19, 0, 0, 149, 150, 151, 152, 153, 154, 5, 5, 5, 5, 5, 19, - 148, 23, 20, 21, 149, 150, 151, 152, 153, 154, 5, 5, 5, 5, 5, 0, 50, 50, - 50, 50, 50, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 5, 5, 5, 5, 5, 5, 5, 5, - 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 5, 5, 5, 5, 17, 5, 5, 5, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, - 5, 99, 5, 5, 5, 5, 99, 5, 5, 19, 99, 99, 99, 19, 19, 99, 99, 99, 19, 5, - 99, 5, 5, 155, 99, 99, 99, 99, 99, 5, 5, 5, 5, 5, 5, 99, 5, 156, 5, 99, - 5, 157, 158, 99, 99, 155, 19, 99, 99, 159, 99, 19, 50, 50, 50, 50, 19, 5, - 5, 19, 19, 99, 99, 5, 5, 5, 5, 5, 99, 19, 19, 19, 19, 5, 5, 5, 5, 160, 5, - 0, 0, 0, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 161, 161, - 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, - 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, - 162, 162, 125, 125, 125, 26, 27, 125, 125, 125, 125, 0, 0, 0, 0, 0, 0, 0, - 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, - 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, + 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 132, 132, 132, 132, 132, 132, + 132, 132, 133, 133, 133, 133, 133, 133, 133, 133, 132, 132, 132, 132, + 132, 132, 0, 0, 133, 133, 133, 133, 133, 133, 0, 0, 132, 132, 132, 132, + 132, 132, 132, 132, 133, 133, 133, 133, 133, 133, 133, 133, 132, 132, + 132, 132, 132, 132, 132, 132, 133, 133, 133, 133, 133, 133, 133, 133, + 132, 132, 132, 132, 132, 132, 0, 0, 133, 133, 133, 133, 133, 133, 0, 0, + 19, 132, 19, 132, 19, 132, 19, 132, 0, 133, 0, 133, 0, 133, 0, 133, 132, + 132, 132, 132, 132, 132, 132, 132, 133, 133, 133, 133, 133, 133, 133, + 133, 134, 134, 135, 135, 135, 135, 136, 136, 137, 137, 138, 138, 139, + 139, 0, 0, 132, 132, 132, 132, 132, 132, 132, 132, 140, 140, 140, 140, + 140, 140, 140, 140, 132, 132, 132, 132, 132, 132, 132, 132, 140, 140, + 140, 140, 140, 140, 140, 140, 132, 132, 132, 132, 132, 132, 132, 132, + 140, 140, 140, 140, 140, 140, 140, 140, 132, 132, 19, 141, 19, 0, 19, 19, + 133, 133, 142, 142, 143, 5, 144, 5, 5, 5, 19, 141, 19, 0, 19, 19, 145, + 145, 145, 145, 143, 5, 5, 5, 132, 132, 19, 19, 0, 0, 19, 19, 133, 133, + 146, 146, 0, 5, 5, 5, 132, 132, 19, 19, 19, 107, 19, 19, 133, 133, 147, + 147, 110, 5, 5, 5, 0, 0, 19, 141, 19, 0, 19, 19, 148, 148, 149, 149, 143, + 5, 5, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 5, 5, 5, 5, 5, + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 3, 3, 1, 1, 1, + 1, 1, 2, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 17, 17, 5, 5, 5, 5, + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 17, 5, 5, 5, 5, 5, 5, 5, 5, + 5, 5, 2, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 150, 50, 0, 0, + 151, 152, 153, 154, 155, 156, 5, 5, 5, 5, 5, 50, 150, 23, 20, 21, 151, + 152, 153, 154, 155, 156, 5, 5, 5, 5, 5, 0, 50, 50, 50, 50, 50, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, + 5, 5, 5, 5, 5, 5, 5, 5, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 5, 5, 5, 5, 17, 5, 5, 5, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 5, 101, 5, 5, 5, 5, + 101, 5, 5, 19, 101, 101, 101, 19, 19, 101, 101, 101, 19, 5, 101, 5, 5, + 157, 101, 101, 101, 101, 101, 5, 5, 5, 5, 5, 5, 101, 5, 158, 5, 101, 5, + 159, 160, 101, 101, 157, 19, 101, 101, 161, 101, 19, 50, 50, 50, 50, 19, + 5, 5, 19, 19, 101, 101, 5, 5, 5, 5, 5, 101, 19, 19, 19, 19, 5, 5, 5, 5, + 162, 5, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, + 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, + 163, 163, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, + 164, 164, 164, 164, 127, 127, 127, 26, 27, 127, 127, 127, 127, 24, 0, 0, + 0, 0, 0, 0, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, @@ -1121,134 +1130,136 @@ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, - 5, 5, 5, 5, 5, 5, 5, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, - 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 23, 20, 21, 149, 150, 151, 152, 153, 154, 24, 24, - 24, 24, 24, 24, 24, 24, 24, 24, 24, 23, 20, 21, 149, 150, 151, 152, 153, - 154, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 23, 20, 21, 149, 150, - 151, 152, 153, 154, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 5, 5, 5, - 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 163, - 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, - 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 164, 164, 164, - 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, - 164, 164, 164, 164, 164, 164, 164, 164, 164, 148, 24, 24, 24, 24, 24, 24, - 24, 24, 24, 24, 23, 20, 21, 149, 150, 151, 152, 153, 154, 24, 148, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, - 5, 5, 5, 5, 0, 0, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, - 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 0, 0, 0, 5, 5, 5, 5, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 5, 5, 5, 5, 0, 5, 5, 5, 5, 0, 0, 5, 5, 5, 5, 5, 5, - 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 0, 5, + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, - 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 0, 5, 0, 5, 5, 5, 5, 0, 0, 0, 5, 0, 5, 5, - 5, 5, 5, 5, 5, 0, 0, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, - 5, 5, 5, 5, 23, 20, 21, 149, 150, 151, 152, 153, 154, 24, 23, 20, 21, - 149, 150, 151, 152, 153, 154, 24, 23, 20, 21, 149, 150, 151, 152, 153, - 154, 24, 5, 0, 0, 0, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, - 5, 5, 5, 5, 5, 5, 5, 0, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 0, 5, - 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 0, 5, 0, 0, 0, 5, 5, 5, 5, 5, 5, 5, 5, 5, + 5, 5, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 23, 20, 21, 151, 152, 153, 154, 155, + 156, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 23, 20, 21, 151, 152, + 153, 154, 155, 156, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 23, 20, + 21, 151, 152, 153, 154, 155, 156, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, + 24, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, + 5, 5, 5, 165, 165, 165, 165, 165, 165, 165, 165, 165, 165, 165, 165, 165, + 165, 165, 165, 165, 165, 165, 165, 165, 165, 165, 165, 165, 165, 166, + 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, + 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 150, 24, 24, 24, + 24, 24, 24, 24, 24, 24, 24, 23, 20, 21, 151, 152, 153, 154, 155, 156, 24, + 150, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, + 5, 5, 5, 5, 5, 5, 5, 0, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, + 5, 5, 5, 0, 5, 0, 0, 0, 0, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, + 5, 5, 5, 5, 5, 5, 5, 5, 5, 0, 5, 5, 5, 5, 0, 5, 5, 5, 5, 0, 0, 5, 5, 5, + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, + 5, 0, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 0, 5, 0, 5, 5, 5, 5, 0, 0, 0, 5, + 5, 5, 5, 5, 5, 5, 5, 5, 0, 0, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, + 5, 5, 5, 5, 5, 5, 5, 23, 20, 21, 151, 152, 153, 154, 155, 156, 24, 23, + 20, 21, 151, 152, 153, 154, 155, 156, 24, 23, 20, 21, 151, 152, 153, 154, + 155, 156, 24, 5, 0, 0, 0, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, + 5, 5, 5, 5, 5, 5, 5, 5, 0, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 0, + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 0, 5, 0, 0, 0, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, - 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 0, 0, 0, 5, - 5, 5, 5, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 112, - 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, - 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, - 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, - 112, 112, 112, 112, 0, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, - 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, - 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, - 113, 113, 113, 113, 113, 113, 113, 113, 113, 0, 26, 27, 165, 166, 167, - 168, 169, 26, 27, 26, 27, 26, 27, 170, 171, 172, 0, 19, 26, 27, 19, 26, - 27, 19, 19, 19, 19, 19, 19, 50, 0, 0, 26, 27, 26, 27, 26, 27, 26, 27, 26, - 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, - 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, - 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, - 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, - 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, - 27, 19, 5, 5, 5, 5, 5, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 5, - 5, 5, 24, 5, 5, 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, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 0, 0, 0, + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 114, 114, 114, 114, 114, 114, 114, 114, 114, 114, 114, 114, 114, 114, + 114, 114, 114, 114, 114, 114, 114, 114, 114, 114, 114, 114, 114, 114, + 114, 114, 114, 114, 114, 114, 114, 114, 114, 114, 114, 114, 114, 114, + 114, 114, 114, 114, 114, 0, 115, 115, 115, 115, 115, 115, 115, 115, 115, + 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, + 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, + 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 0, 26, 27, 167, 168, + 169, 170, 171, 26, 27, 26, 27, 26, 27, 172, 173, 174, 175, 19, 26, 27, + 19, 26, 27, 19, 19, 19, 19, 19, 19, 50, 176, 176, 26, 27, 26, 27, 26, 27, + 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, + 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, + 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, + 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, + 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, + 26, 27, 26, 27, 19, 5, 5, 5, 5, 5, 5, 26, 27, 26, 27, 17, 17, 17, 0, 0, + 0, 0, 0, 0, 0, 5, 5, 5, 5, 24, 5, 5, 177, 177, 177, 177, 177, 177, 177, + 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, + 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, + 177, 177, 177, 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, 50, 50, 50, - 50, 50, 50, 50, 50, 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, 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, + 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 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, 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, 50, 50, 50, 50, 50, 50, 50, 0, 50, 50, 50, 50, + 50, 50, 50, 0, 50, 50, 50, 50, 50, 50, 50, 0, 50, 50, 50, 50, 50, 50, 50, 0, 50, 50, 50, 50, 50, 50, 50, 0, 50, 50, 50, 50, 50, 50, 50, 0, 50, 50, - 50, 50, 50, 50, 50, 0, 50, 50, 50, 50, 50, 50, 50, 0, 50, 50, 50, 50, 50, - 50, 50, 0, 50, 50, 50, 50, 50, 50, 50, 0, 50, 50, 50, 50, 50, 50, 50, 0, - 50, 50, 50, 50, 50, 50, 50, 0, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 50, 50, 50, 50, 50, 0, 50, 50, 50, 50, 50, 50, 50, 0, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, - 5, 5, 5, 5, 86, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 88, 5, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, - 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 0, 5, 5, 5, 5, 5, 5, 5, 5, - 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 5, 5, 5, + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 0, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, - 5, 5, 5, 5, 5, 5, 5, 5, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, - 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, - 5, 0, 0, 0, 0, 2, 5, 5, 5, 5, 50, 50, 125, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, - 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 17, 17, 17, 17, 17, 17, 5, 50, 50, 50, 50, 50, 5, 5, - 125, 125, 125, 50, 50, 5, 5, 5, 0, 50, 50, 50, 50, 50, 50, 50, 50, 50, + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 5, 5, 5, + 5, 5, 5, 5, 5, 5, 5, 5, 0, 0, 0, 0, 2, 5, 5, 5, 5, 50, 50, 127, 5, 5, 5, + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 127, + 127, 127, 127, 127, 127, 127, 127, 127, 17, 17, 17, 17, 17, 17, 5, 50, + 50, 50, 50, 50, 5, 5, 127, 127, 127, 50, 50, 5, 5, 5, 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, 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, 0, 0, 17, 17, 5, 5, 50, 50, 50, 5, 50, 50, 50, 50, + 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 0, 0, 17, 17, 5, 5, 50, 50, 50, + 5, 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, 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, 50, 50, 50, 50, 50, 50, 50, 50, 50, 5, 50, 50, 50, - 50, 0, 0, 0, 0, 0, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, + 50, 5, 50, 50, 50, 50, 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, 0, 0, 0, 50, 50, 50, 50, 50, 50, + 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 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, 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, 50, 50, 50, 0, 5, 5, - 24, 24, 24, 24, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 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, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, - 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 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, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, - 5, 5, 5, 5, 5, 5, 5, 5, 5, 0, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 5, + 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, + 50, 50, 0, 5, 5, 24, 24, 24, 24, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 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, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, - 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 24, 24, 24, 24, 24, 24, 24, 24, - 24, 24, 24, 24, 24, 24, 24, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, - 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 24, 24, 24, 24, 24, + 5, 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, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 0, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, + 5, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, - 5, 5, 5, 5, 5, 5, 5, 5, 0, 50, 50, 50, 50, 50, 174, 50, 50, 50, 50, 50, + 5, 5, 5, 5, 5, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, + 24, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 0, 50, 50, 50, 50, 50, + 178, 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, 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, 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, 174, 50, 50, 50, 50, 50, + 178, 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, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, @@ -1257,7 +1268,7 @@ 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, 50, 50, 50, 50, 50, 50, 50, - 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 174, + 50, 50, 50, 50, 50, 178, 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, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, @@ -1266,56 +1277,56 @@ 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, 50, 50, 50, 50, 50, 50, 50, + 50, 50, 50, 50, 50, 50, 178, 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, - 174, 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, 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, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, + 50, 50, 50, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, - 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 174, - 50, 50, 174, 50, 50, 50, 174, 50, 174, 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, + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, + 5, 5, 5, 5, 5, 5, 178, 50, 50, 178, 50, 50, 50, 178, 50, 178, 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, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, - 50, 50, 50, 174, 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, 174, 50, 50, 50, - 50, 50, 50, 50, 174, 50, 174, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, + 50, 50, 50, 50, 50, 50, 50, 50, 178, 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, 174, 174, 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, 174, 50, 50, 50, 50, 50, 50, 50, 50, 174, 50, + 50, 178, 50, 50, 50, 50, 50, 50, 50, 178, 50, 178, 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, 174, + 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 178, + 178, 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, 178, 50, 50, 50, 50, + 50, 50, 50, 50, 178, 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, 178, 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, 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, 174, 50, 50, 50, 50, 50, 50, 50, 50, 50, - 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 174, 50, 50, 50, 50, 50, 50, 50, + 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 178, 50, 50, 50, + 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 178, 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, 50, 50, 50, 50, 50, 50, 50, 50, - 50, 50, 50, 50, 174, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, + 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 178, 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, 174, 50, 174, 50, 174, 50, 50, 50, 50, 50, 50, 50, 50, 50, + 50, 50, 50, 50, 50, 50, 50, 50, 50, 178, 50, 178, 50, 178, 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, 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, 174, 50, 174, 174, 174, 50, 50, 50, 50, 50, 50, 174, 50, 50, 50, + 50, 50, 50, 50, 50, 50, 50, 50, 178, 50, 178, 178, 178, 50, 50, 50, 50, + 50, 50, 178, 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, 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, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, + 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 178, 178, 178, 178, 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, 174, 174, 174, 174, 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, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, @@ -1323,7 +1334,7 @@ 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, 50, 50, 50, 50, 50, 50, 50, - 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 174, 50, + 50, 50, 50, 50, 178, 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, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, @@ -1331,24 +1342,25 @@ 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, 50, 50, 50, 50, 50, 50, 50, + 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 178, 50, 50, 50, 50, 50, 50, 50, + 178, 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, 174, 50, 50, 50, 50, 50, 50, 50, 174, 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, 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, 50, + 50, 50, 50, 178, 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, 174, 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, 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, 50, 50, 50, 50, 50, 50, 50, 178, 178, 50, 50, 50, 50, 50, 50, 50, + 50, 50, 50, 50, 50, 178, 178, 178, 50, 178, 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, 174, 174, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, - 174, 174, 174, 50, 174, 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, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, @@ -1359,175 +1371,196 @@ 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, 50, 50, 50, 50, 50, 50, 50, + 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 178, 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, 50, 174, 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, 178, 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, 50, 174, 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, 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, 50, 50, 50, 50, 50, 50, 50, 50, 178, 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, 50, 174, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, + 50, 50, 50, 50, 50, 50, 50, 50, 178, 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, 50, 174, 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, 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, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, + 50, 50, 50, 50, 50, 50, 50, 50, 178, 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, 50, 174, 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, 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, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, + 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 178, 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, 50, 174, 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, 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, 50, 50, 50, 50, + 178, 50, 50, 50, 50, 178, 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, 174, 50, 50, 50, 50, - 174, 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, 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, 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, 174, + 50, 50, 50, 50, 178, 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, 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, 50, 50, 50, 50, 50, 50, 50, 50, 50, + 50, 50, 50, 50, 50, 50, 50, 50, 50, 178, 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, 174, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, + 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 178, 50, 50, 50, 50, 50, 178, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, - 50, 50, 50, 50, 50, 174, 50, 50, 50, 50, 50, 174, 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, 178, 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, 174, 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, 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, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, + 50, 50, 50, 50, 50, 50, 178, 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, 174, 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, 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, + 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, 50, 50, - 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 0, 0, 0, 5, 5, 5, 5, 5, 5, 5, + 0, 0, 0, 0, 0, 0, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 0, + 0, 0, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, - 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, - 50, 50, 5, 5, 5, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, - 50, 50, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 50, 50, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 26, 27, 26, 27, 26, 27, 26, 27, - 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, - 26, 27, 26, 27, 26, 27, 0, 0, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, - 27, 50, 17, 5, 5, 5, 5, 0, 0, 0, 0, 0, 0, 0, 0, 17, 17, 5, 50, 26, 27, - 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, - 26, 27, 26, 27, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, - 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 50, 50, 50, 50, 50, 50, 50, 50, 50, - 5, 5, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 19, 19, 26, + 5, 5, 5, 5, 5, 5, 5, 5, 5, 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, 50, + 50, 50, 50, 50, 50, 5, 5, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, + 50, 5, 5, 5, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, + 50, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 50, 50, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 26, 27, 26, 27, 26, 27, 26, 27, 26, + 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, + 27, 26, 27, 26, 27, 0, 0, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, + 50, 17, 5, 5, 5, 5, 0, 0, 0, 0, 0, 0, 0, 0, 17, 17, 5, 50, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, + 27, 26, 27, 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, 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, 127, 127, 127, 127, 127, 127, 127, 127, 127, + 127, 17, 17, 5, 5, 5, 5, 5, 5, 0, 0, 0, 0, 0, 0, 0, 0, 5, 5, 5, 5, 5, 5, + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 50, 50, 50, 50, 50, + 50, 50, 50, 50, 5, 5, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, + 27, 19, 19, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, - 27, 26, 27, 26, 27, 26, 27, 50, 19, 19, 19, 19, 19, 19, 19, 19, 26, 27, - 26, 27, 175, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 50, 5, 5, 26, 27, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 27, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 50, 19, 19, 19, 19, 19, 19, + 19, 19, 26, 27, 26, 27, 179, 26, 27, 26, 27, 26, 27, 26, 27, 26, 27, 50, + 5, 5, 26, 27, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 50, 50, 50, 50, 50, 50, 17, - 50, 50, 50, 17, 50, 50, 50, 50, 17, 50, 50, 50, 50, 50, 50, 50, 50, 50, - 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 17, 17, 17, 17, - 17, 5, 5, 5, 5, 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, + 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, 17, 50, 50, 50, 17, 50, 50, 50, 50, 17, 50, 50, 50, 50, 50, 50, + 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 17, + 17, 17, 17, 17, 5, 5, 5, 5, 0, 0, 0, 0, 24, 24, 24, 24, 24, 24, 5, 5, 5, + 5, 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, 50, 50, 50, 50, 50, 50, 50, 50, 5, 5, - 5, 5, 0, 0, 0, 0, 0, 0, 0, 0, 17, 17, 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, 5, 5, 5, 5, 0, 0, 0, 0, 0, 0, 0, 0, 17, 17, 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, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 5, 6, 7, 8, 9, 10, 11, 12, - 13, 14, 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 7, 8, 9, 10, 11, - 12, 13, 14, 15, 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, 17, 17, 17, 17, - 17, 17, 17, 17, 5, 5, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, - 0, 0, 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, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 5, 6, + 7, 8, 9, 10, 11, 12, 13, 14, 15, 0, 0, 0, 0, 0, 0, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 50, 50, 50, 50, 50, + 50, 5, 5, 5, 50, 0, 0, 0, 0, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 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, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 50, 50, 50, 17, 50, 50, 50, 50, 50, - 50, 50, 50, 17, 17, 0, 0, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 0, 0, 5, 5, + 50, 50, 50, 50, 50, 50, 50, 50, 17, 17, 17, 17, 17, 17, 17, 17, 5, 5, 50, + 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, + 50, 50, 50, 50, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 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, 17, 17, 17, 17, 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, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 5, 5, 5, 5, 5, 5, 5, + 5, 5, 5, 5, 5, 5, 0, 50, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 0, 0, 0, 0, 5, 5, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, + 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 50, 50, 50, + 17, 50, 50, 50, 50, 50, 50, 50, 50, 17, 17, 0, 0, 6, 7, 8, 9, 10, 11, 12, + 13, 14, 15, 0, 0, 5, 5, 5, 5, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, + 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 5, 5, 5, 50, 17, 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, 50, 50, 50, 50, 50, 50, 50, 50, 17, 50, 17, 17, 17, + 50, 50, 17, 17, 50, 50, 50, 50, 50, 17, 17, 50, 17, 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, 50, 50, 50, 5, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 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, + 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, 17, + 17, 17, 17, 17, 17, 17, 17, 5, 17, 17, 0, 0, 6, 7, 8, 9, 10, 11, 12, 13, + 14, 15, 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, 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, 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, 50, 50, 50, 50, 50, 50, 50, 50, 50, + 0, 0, 0, 0, 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, 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, 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, 50, 50, 50, 50, 50, 50, 50, 50, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 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, 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, 50, 50, 50, 50, 50, - 50, 50, 50, 50, 50, 50, 50, 50, 50, 174, 50, 50, 50, 50, 50, 50, 50, 174, - 50, 50, 50, 50, 174, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, + 50, 50, 50, 50, 50, 50, 50, 50, 178, 50, 50, 50, 50, 50, 50, 50, 178, 50, + 50, 50, 50, 178, 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, 50, 50, 50, - 50, 50, 50, 50, 50, 50, 50, 50, 174, 50, 50, 50, 50, 50, 50, 50, 50, 50, + 50, 50, 50, 50, 50, 50, 50, 178, 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, 174, 50, 174, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, + 50, 50, 178, 50, 178, 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, 174, 50, 50, 50, 50, 50, 50, + 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 178, 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, 50, 50, 0, 0, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, + 50, 50, 50, 50, 50, 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, 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, 50, 50, + 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 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, 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, 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, + 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, 19, 19, 19, 19, 19, 19, 19, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 19, 19, 19, 19, 19, 0, 0, 0, 0, 0, 50, 17, 50, 50, 50, 50, + 0, 0, 0, 0, 0, 0, 0, 19, 19, 19, 19, 19, 19, 19, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 19, 19, 19, 19, 19, 0, 0, 0, 0, 0, 50, 17, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 5, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 0, 50, 50, 50, 50, 50, 0, 50, 0, 50, 50, 0, 50, 50, 0, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, @@ -1544,8 +1577,8 @@ 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, 50, 50, 50, 50, 50, 50, 50, - 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 86, - 86, 86, 86, 86, 86, 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, 88, + 88, 88, 88, 88, 88, 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, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, @@ -1559,13 +1592,13 @@ 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, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 86, 86, 5, 5, + 0, 0, 0, 0, 0, 0, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 88, 88, 5, 5, 0, 0, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 0, 0, 0, 0, 0, 0, 17, 17, 17, 17, 17, 17, 17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 5, 5, 17, 17, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 17, 17, 17, 5, 5, 5, 0, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 0, 5, 5, 5, 5, 0, 0, - 0, 0, 86, 50, 86, 50, 86, 0, 86, 50, 86, 50, 86, 50, 86, 50, 86, 50, 50, + 0, 0, 88, 50, 88, 50, 88, 0, 88, 50, 88, 50, 88, 50, 88, 50, 88, 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, 50, 50, 50, 50, 50, 50, 50, 50, 50, @@ -1581,7 +1614,7 @@ 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, 50, 50, 50, 50, 50, 50, 50, - 50, 50, 114, 114, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, + 50, 50, 116, 116, 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, 50, 50, 50, 50, 50, 50, 0, 0, 50, 50, 50, 50, 50, 50, 0, 0, 50, 50, 50, 50, 50, 50, 0, 0, 50, 50, 50, 0, 0, 0, 5, 5, 5, 5, 5, 5, 5, 0, 5, 5, @@ -1602,11 +1635,11 @@ 50, 50, 50, 50, 0, 0, 0, 0, 0, 5, 5, 5, 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, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, - 24, 24, 24, 24, 0, 0, 0, 5, 5, 5, 5, 5, 5, 5, 5, 5, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 24, 24, 24, 24, 5, 5, 5, 5, 5, 5, 5, + 24, 24, 24, 24, 0, 0, 0, 5, 5, 5, 5, 5, 5, 5, 5, 5, 127, 127, 127, 127, + 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, + 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, + 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, + 127, 127, 127, 127, 127, 127, 127, 24, 24, 24, 24, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 24, 0, 0, 0, 0, 0, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -1622,22 +1655,22 @@ 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, 24, 24, 24, 24, 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, 125, 50, 50, 50, 50, 50, 50, 50, 50, 125, 0, 0, 0, 0, 0, 0, + 50, 50, 50, 127, 50, 50, 50, 50, 50, 50, 50, 50, 127, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, 5, 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, 50, 50, 50, - 50, 50, 50, 50, 50, 5, 125, 125, 125, 125, 125, 0, 0, 0, 0, 0, 0, 0, 0, + 50, 50, 50, 50, 50, 5, 127, 127, 127, 127, 127, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 176, 176, 176, 176, 176, 176, 176, 176, - 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, - 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, - 176, 176, 176, 176, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, - 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, - 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, - 177, 177, 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, 180, 180, 180, 180, 180, 180, 180, 180, + 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, + 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, + 180, 180, 180, 180, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, + 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, + 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, + 181, 181, 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, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, @@ -1649,20 +1682,46 @@ 50, 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, 50, 50, 50, 50, 0, 50, 50, 0, 0, 0, 50, 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, 0, 5, 24, 24, 24, 24, 24, 24, 24, 24, 0, 0, 0, 0, 0, 0, + 0, 0, 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, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, + 50, 50, 50, 50, 50, 24, 24, 24, 24, 24, 24, 0, 0, 0, 5, 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, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 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, 17, 17, 17, 0, 17, 17, 0, 0, 0, 0, 0, 17, 17, 17, 17, 50, + 50, 50, 50, 0, 50, 50, 50, 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, 0, 0, 0, + 0, 17, 17, 17, 0, 0, 0, 0, 17, 23, 20, 21, 151, 24, 24, 24, 24, 0, 0, 0, + 0, 0, 0, 0, 0, 5, 5, 5, 5, 5, 5, 5, 5, 5, 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, 24, 24, 5, 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, 50, 50, 50, 50, 50, 50, 50, 0, 0, 0, 5, 5, 5, 5, 5, + 5, 5, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, + 50, 50, 50, 50, 50, 0, 0, 24, 24, 24, 24, 24, 24, 24, 24, 50, 50, 50, 50, + 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 0, 0, 0, 0, + 0, 24, 24, 24, 24, 24, 24, 24, 24, 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, 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, 50, 50, 50, 50, 50, 50, - 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 24, 24, - 24, 24, 0, 0, 0, 0, 0, 5, 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, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 17, 17, 17, 0, 17, - 17, 0, 0, 0, 0, 0, 17, 17, 17, 17, 50, 50, 50, 50, 0, 50, 50, 50, 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, 23, 20, 21, + 151, 152, 153, 154, 155, 156, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, + 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 0, 17, 17, 17, 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, 17, 17, 17, 0, 0, 0, 0, 17, - 23, 20, 21, 149, 24, 24, 24, 24, 0, 0, 0, 0, 0, 0, 0, 0, 5, 5, 5, 5, 5, - 5, 5, 5, 5, 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, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 5, 5, + 1, 5, 5, 5, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, @@ -1670,15 +1729,21 @@ 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, 50, 50, 50, 50, 50, 50, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 155, 155, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 155, 155, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 5, 5, 5, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 5, 5, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 127, 127, 127, 127, 127, + 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, + 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, + 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, + 127, 127, 127, 157, 157, 127, 127, 127, 127, 127, 127, 127, 127, 127, + 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, + 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 157, 157, 127, + 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 5, 5, 5, 5, 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, 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, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, @@ -1706,96 +1771,119 @@ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, - 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 19, 19, 19, 19, 19, 19, 19, + 0, 0, 0, 0, 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, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, - 19, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, - 99, 99, 99, 99, 99, 99, 99, 99, 99, 19, 19, 19, 19, 19, 19, 19, 0, 19, - 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 99, - 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, - 99, 99, 99, 99, 99, 99, 99, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, - 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 99, 0, 99, - 99, 0, 0, 99, 0, 0, 99, 99, 0, 0, 99, 99, 99, 99, 0, 99, 99, 99, 99, 99, - 99, 99, 99, 19, 19, 19, 19, 0, 19, 0, 19, 19, 19, 19, 19, 19, 19, 0, 19, - 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 99, 99, 99, 99, 99, 99, 99, 99, - 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, + 19, 19, 19, 19, 19, 19, 19, 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, 19, 19, 19, 19, 19, 19, 19, 0, 19, 19, 19, 19, 19, 19, 19, + 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 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, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, + 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 101, 0, 101, + 101, 0, 0, 101, 0, 0, 101, 101, 0, 0, 101, 101, 101, 101, 0, 101, 101, + 101, 101, 101, 101, 101, 101, 19, 19, 19, 19, 0, 19, 0, 19, 19, 19, 19, + 19, 19, 19, 0, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 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, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, - 19, 19, 19, 19, 19, 19, 19, 19, 99, 99, 0, 99, 99, 99, 99, 0, 0, 99, 99, - 99, 99, 99, 99, 99, 99, 0, 99, 99, 99, 99, 99, 99, 99, 0, 19, 19, 19, 19, + 19, 101, 101, 0, 101, 101, 101, 101, 0, 0, 101, 101, 101, 101, 101, 101, + 101, 101, 0, 101, 101, 101, 101, 101, 101, 101, 0, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, - 19, 19, 19, 19, 99, 99, 0, 99, 99, 99, 99, 0, 99, 99, 99, 99, 99, 0, 99, - 0, 0, 0, 99, 99, 99, 99, 99, 99, 99, 0, 19, 19, 19, 19, 19, 19, 19, 19, + 19, 19, 19, 101, 101, 0, 101, 101, 101, 101, 0, 101, 101, 101, 101, 101, + 0, 101, 0, 0, 0, 101, 101, 101, 101, 101, 101, 101, 0, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, - 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, - 99, 99, 99, 99, 99, 99, 99, 99, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, - 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 99, 99, - 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, - 99, 99, 99, 99, 99, 99, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, - 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 99, 99, 99, 99, - 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, - 99, 99, 99, 99, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, - 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 99, 99, 99, 99, 99, 99, - 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, - 99, 99, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, - 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 99, 99, 99, 99, 99, 99, 99, 99, - 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, + 19, 19, 19, 19, 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, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, + 19, 19, 19, 19, 19, 19, 19, 19, 19, 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, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, + 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 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, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, - 19, 19, 19, 19, 19, 19, 19, 19, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, - 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 19, 19, + 19, 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, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, - 19, 19, 19, 19, 19, 19, 19, 19, 0, 0, 99, 99, 99, 99, 99, 99, 99, 99, 99, - 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 5, 19, + 19, 19, 19, 19, 19, 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, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, + 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 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, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, + 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 0, 0, + 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, 5, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, - 19, 19, 19, 19, 19, 19, 5, 19, 19, 19, 19, 19, 19, 99, 99, 99, 99, 99, - 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, - 99, 99, 5, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, - 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 5, 19, 19, 19, 19, 19, 19, 99, - 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, - 99, 99, 99, 99, 99, 99, 5, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, - 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 5, 19, 19, 19, - 19, 19, 19, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, - 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 5, 19, 19, 19, 19, 19, 19, 19, + 19, 19, 19, 5, 19, 19, 19, 19, 19, 19, 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, 5, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, + 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 5, 19, 19, 19, 19, + 19, 19, 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, 5, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, - 5, 19, 19, 19, 19, 19, 19, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, - 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 5, 19, 19, 19, + 19, 19, 19, 19, 19, 5, 19, 19, 19, 19, 19, 19, 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, 5, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, + 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 5, 19, 19, + 19, 19, 19, 19, 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, 5, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, - 19, 19, 19, 19, 5, 19, 19, 19, 19, 19, 19, 99, 19, 0, 0, 6, 7, 8, 9, 10, - 11, 12, 13, 14, 15, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 6, 7, 8, 9, 10, - 11, 12, 13, 14, 15, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 6, 7, 8, 9, 10, - 11, 12, 13, 14, 15, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, + 19, 19, 19, 19, 19, 19, 19, 5, 19, 19, 19, 19, 19, 19, 101, 19, 0, 0, 6, + 7, 8, 9, 10, 11, 12, 13, 14, 15, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 6, + 7, 8, 9, 10, 11, 12, 13, 14, 15, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 6, + 7, 8, 9, 10, 11, 12, 13, 14, 15, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, - 5, 5, 0, 0, 0, 0, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, + 5, 5, 5, 5, 5, 5, 5, 0, 0, 0, 0, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, - 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, - 174, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, + 0, 0, 0, 150, 150, 23, 20, 21, 151, 152, 153, 154, 155, 156, 0, 0, 0, 0, + 0, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, + 5, 5, 5, 5, 5, 5, 5, 5, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 0, + 5, 0, 0, 5, 0, 0, 0, 5, 0, 0, 0, 5, 5, 5, 5, 5, 0, 0, 0, 0, 0, 0, 0, 0, + 5, 0, 0, 0, 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 0, 5, 5, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 5, 5, 5, 5, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 5, 5, 5, 5, 5, 5, + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, + 5, 5, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 5, 5, 5, 5, 5, 5, + 5, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 178, 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, 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, 174, 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, 178, 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, 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, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, - 50, 50, 50, 50, 50, 50, 50, 50, 50, 174, 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, 178, 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, 50, 50, 50, 50, 50, 50, 50, - 174, 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, 178, 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, 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, 174, 50, 50, 50, 50, 50, 50, 50, 50, 174, - 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 174, 50, 50, + 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 178, 50, + 50, 50, 50, 50, 50, 50, 50, 178, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, + 50, 50, 50, 50, 50, 178, 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, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, @@ -1806,32 +1894,32 @@ 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, 50, 50, 50, 50, 50, 50, 50, + 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 178, 50, 50, 50, 50, + 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 178, 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, 174, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, - 50, 50, 50, 50, 50, 50, 174, 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, 174, 50, + 50, 50, 50, 50, 50, 50, 178, 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, 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, 50, 50, 50, 50, 50, 50, 50, + 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 178, 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, 174, 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, 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, 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, 178, 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, 174, 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, 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, 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, 178, 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, 174, 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, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, @@ -1842,26 +1930,32 @@ 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, 50, 50, 50, 50, 50, 50, 50, + 50, 50, 50, 50, 50, 50, 50, 50, 178, 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, - 174, 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, 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, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 0, 0, 0, + 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, 50, 50, 50, 50, 50, 50, 50, 50, + 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, 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, 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, 1, 1, 1, 1, 1, 1, 1, 1, + 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, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, 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, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 17, 17, 17, 17, 17, 17, + 1, 1, 1, 1, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, @@ -1874,13 +1968,13 @@ 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 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, 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, 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, 0, 0, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, }; /* Returns the numeric value as double for Unicode characters @@ -1915,20 +2009,26 @@ case 0x1810: case 0x1946: case 0x19D0: + case 0x1A80: + case 0x1A90: case 0x1B50: case 0x1BB0: case 0x1C40: case 0x1C50: case 0x2070: case 0x2080: + case 0x2189: case 0x24EA: case 0x24FF: case 0x3007: case 0x96F6: case 0xA620: + case 0xA6EF: case 0xA8D0: case 0xA900: + case 0xA9D0: case 0xAA50: + case 0xABF0: case 0xF9B2: case 0xFF10: #ifdef Py_UNICODE_WIDE @@ -1939,6 +2039,8 @@ case 0x1D7E2: case 0x1D7EC: case 0x1D7F6: + case 0x1F100: + case 0x1F101: #endif return (double) 0.0; case 0x0031: @@ -1948,7 +2050,6 @@ case 0x07C1: case 0x0967: case 0x09E7: - case 0x09F4: case 0x0A67: case 0x0AE7: case 0x0B67: @@ -1969,6 +2070,9 @@ case 0x1811: case 0x1947: case 0x19D1: + case 0x19DA: + case 0x1A81: + case 0x1A91: case 0x1B51: case 0x1BB1: case 0x1C41: @@ -1994,9 +2098,12 @@ case 0x5E7A: case 0x5F0C: case 0xA621: + case 0xA6E6: case 0xA8D1: case 0xA901: + case 0xA9D1: case 0xAA51: + case 0xABF1: case 0xFF11: #ifdef Py_UNICODE_WIDE case 0x10107: @@ -2007,8 +2114,13 @@ case 0x10320: case 0x103D1: case 0x104A1: + case 0x10858: case 0x10916: case 0x10A40: + case 0x10A7D: + case 0x10B58: + case 0x10B78: + case 0x10E60: case 0x12415: case 0x1241E: case 0x1242C: @@ -2021,29 +2133,41 @@ case 0x1D7E3: case 0x1D7ED: case 0x1D7F7: + case 0x1F102: case 0x2092A: #endif return (double) 1.0; + case 0x2152: + return (double) 1.0/10.0; + case 0x09F4: + case 0xA833: + return (double) 1.0/16.0; case 0x00BD: case 0x0D74: case 0x0F2A: case 0x2CFD: + case 0xA831: #ifdef Py_UNICODE_WIDE case 0x10141: case 0x10175: case 0x10176: + case 0x10E7B: #endif return (double) 1.0/2.0; case 0x2153: #ifdef Py_UNICODE_WIDE + case 0x10E7D: case 0x1245A: case 0x1245D: #endif return (double) 1.0/3.0; case 0x00BC: + case 0x09F7: case 0x0D73: + case 0xA830: #ifdef Py_UNICODE_WIDE case 0x10140: + case 0x10E7C: case 0x12460: case 0x12462: #endif @@ -2055,11 +2179,17 @@ case 0x12461: #endif return (double) 1.0/6.0; + case 0x2150: + return (double) 1.0/7.0; + case 0x09F5: case 0x215B: + case 0xA834: #ifdef Py_UNICODE_WIDE case 0x1245F: #endif return (double) 1.0/8.0; + case 0x2151: + return (double) 1.0/9.0; case 0x0BF0: case 0x0D70: case 0x1372: @@ -2092,8 +2222,12 @@ case 0x10164: case 0x10322: case 0x103D3: + case 0x1085B: case 0x10917: case 0x10A44: + case 0x10B5C: + case 0x10B7C: + case 0x10E69: case 0x1D369: #endif return (double) 10.0; @@ -2111,8 +2245,12 @@ case 0x10152: case 0x1016A: case 0x103D5: + case 0x1085D: case 0x10919: case 0x10A46: + case 0x10B5E: + case 0x10B7E: + case 0x10E72: #endif return (double) 100.0; case 0x0BF2: @@ -2128,7 +2266,10 @@ case 0x1014D: case 0x10154: case 0x10171: + case 0x1085E: case 0x10A47: + case 0x10B5F: + case 0x10B7F: #endif return (double) 1000.0; case 0x137C: @@ -2138,6 +2279,7 @@ #ifdef Py_UNICODE_WIDE case 0x1012B: case 0x10155: + case 0x1085F: #endif return (double) 10000.0; case 0x2188: @@ -2215,7 +2357,6 @@ case 0x07C2: case 0x0968: case 0x09E8: - case 0x09F5: case 0x0A68: case 0x0AE8: case 0x0B68: @@ -2236,6 +2377,8 @@ case 0x1812: case 0x1948: case 0x19D2: + case 0x1A82: + case 0x1A92: case 0x1B52: case 0x1BB2: case 0x1C42: @@ -2263,9 +2406,12 @@ case 0x8CB3: case 0x8D30: case 0xA622: + case 0xA6E7: case 0xA8D2: case 0xA902: + case 0xA9D2: case 0xAA52: + case 0xABF2: case 0xF978: case 0xFF12: #ifdef Py_UNICODE_WIDE @@ -2276,7 +2422,12 @@ case 0x1015E: case 0x103D2: case 0x104A2: + case 0x10859: + case 0x1091A: case 0x10A41: + case 0x10B59: + case 0x10B79: + case 0x10E61: case 0x12400: case 0x12416: case 0x1241F: @@ -2292,12 +2443,14 @@ case 0x1D7E4: case 0x1D7EE: case 0x1D7F8: + case 0x1F103: case 0x22390: #endif return (double) 2.0; case 0x2154: #ifdef Py_UNICODE_WIDE case 0x10177: + case 0x10E7E: case 0x1245B: case 0x1245E: #endif @@ -2315,13 +2468,18 @@ #ifdef Py_UNICODE_WIDE case 0x10111: case 0x103D4: + case 0x1085C: case 0x10918: case 0x10A45: + case 0x10B5D: + case 0x10B7D: + case 0x10E6A: case 0x1D36A: #endif return (double) 20.0; #ifdef Py_UNICODE_WIDE case 0x1011A: + case 0x10E73: return (double) 200.0; #endif #ifdef Py_UNICODE_WIDE @@ -2357,7 +2515,6 @@ case 0x07C3: case 0x0969: case 0x09E9: - case 0x09F6: case 0x0A69: case 0x0AE9: case 0x0B69: @@ -2378,6 +2535,8 @@ case 0x1813: case 0x1949: case 0x19D3: + case 0x1A83: + case 0x1A93: case 0x1B53: case 0x1BB3: case 0x1C43: @@ -2404,15 +2563,23 @@ case 0x53C4: case 0x5F0E: case 0xA623: + case 0xA6E8: case 0xA8D3: case 0xA903: + case 0xA9D3: case 0xAA53: + case 0xABF3: case 0xF96B: case 0xFF13: #ifdef Py_UNICODE_WIDE case 0x10109: case 0x104A3: + case 0x1085A: + case 0x1091B: case 0x10A42: + case 0x10B5A: + case 0x10B7A: + case 0x10E62: case 0x12401: case 0x12408: case 0x12417: @@ -2433,16 +2600,22 @@ case 0x1D7E5: case 0x1D7EF: case 0x1D7F9: + case 0x1F104: case 0x20AFD: case 0x20B19: case 0x22998: case 0x23B1B: #endif return (double) 3.0; + case 0x09F6: + case 0xA835: + return (double) 3.0/16.0; case 0x0F2B: return (double) 3.0/2.0; case 0x00BE: + case 0x09F8: case 0x0D75: + case 0xA832: #ifdef Py_UNICODE_WIDE case 0x10178: #endif @@ -2458,6 +2631,7 @@ #ifdef Py_UNICODE_WIDE case 0x10112: case 0x10165: + case 0x10E6B: case 0x1D36B: case 0x20983: #endif @@ -2465,6 +2639,7 @@ #ifdef Py_UNICODE_WIDE case 0x1011B: case 0x1016B: + case 0x10E74: return (double) 300.0; #endif #ifdef Py_UNICODE_WIDE @@ -2499,7 +2674,6 @@ case 0x07C4: case 0x096A: case 0x09EA: - case 0x09F7: case 0x0A6A: case 0x0AEA: case 0x0B6A: @@ -2518,6 +2692,8 @@ case 0x1814: case 0x194A: case 0x19D4: + case 0x1A84: + case 0x1A94: case 0x1B54: case 0x1BB4: case 0x1C44: @@ -2541,14 +2717,20 @@ case 0x56DB: case 0x8086: case 0xA624: + case 0xA6E9: case 0xA8D4: case 0xA904: + case 0xA9D4: case 0xAA54: + case 0xABF4: case 0xFF14: #ifdef Py_UNICODE_WIDE case 0x1010A: case 0x104A4: case 0x10A43: + case 0x10B5B: + case 0x10B7B: + case 0x10E63: case 0x12402: case 0x12409: case 0x1240F: @@ -2570,6 +2752,7 @@ case 0x1D7E6: case 0x1D7F0: case 0x1D7FA: + case 0x1F105: case 0x20064: case 0x200E2: case 0x2626D: @@ -2582,6 +2765,7 @@ case 0x534C: #ifdef Py_UNICODE_WIDE case 0x10113: + case 0x10E6C: case 0x1D36C: case 0x2098C: case 0x2099C: @@ -2589,6 +2773,7 @@ return (double) 40.0; #ifdef Py_UNICODE_WIDE case 0x1011C: + case 0x10E75: return (double) 400.0; #endif #ifdef Py_UNICODE_WIDE @@ -2641,6 +2826,8 @@ case 0x1815: case 0x194B: case 0x19D5: + case 0x1A85: + case 0x1A95: case 0x1B55: case 0x1BB5: case 0x1C45: @@ -2664,9 +2851,12 @@ case 0x4E94: case 0x4F0D: case 0xA625: + case 0xA6EA: case 0xA8D5: case 0xA905: + case 0xA9D5: case 0xAA55: + case 0xABF5: case 0xFF15: #ifdef Py_UNICODE_WIDE case 0x1010B: @@ -2677,6 +2867,7 @@ case 0x10173: case 0x10321: case 0x104A5: + case 0x10E64: case 0x12403: case 0x1240A: case 0x12410: @@ -2694,6 +2885,7 @@ case 0x1D7E7: case 0x1D7F1: case 0x1D7FB: + case 0x1F106: case 0x20121: #endif return (double) 5.0; @@ -2722,6 +2914,8 @@ case 0x10169: case 0x10174: case 0x10323: + case 0x10A7E: + case 0x10E6D: case 0x1D36D: #endif return (double) 50.0; @@ -2737,6 +2931,7 @@ case 0x1016E: case 0x1016F: case 0x10170: + case 0x10E76: #endif return (double) 500.0; case 0x2181: @@ -2778,6 +2973,8 @@ case 0x1816: case 0x194C: case 0x19D6: + case 0x1A86: + case 0x1A96: case 0x1B56: case 0x1BB6: case 0x1C46: @@ -2801,15 +2998,19 @@ case 0x9646: case 0x9678: case 0xA626: + case 0xA6EB: case 0xA8D6: case 0xA906: + case 0xA9D6: case 0xAA56: + case 0xABF6: case 0xF9D1: case 0xF9D3: case 0xFF16: #ifdef Py_UNICODE_WIDE case 0x1010C: case 0x104A6: + case 0x10E65: case 0x12404: case 0x1240B: case 0x12411: @@ -2823,17 +3024,20 @@ case 0x1D7E8: case 0x1D7F2: case 0x1D7FC: + case 0x1F107: case 0x20AEA: #endif return (double) 6.0; case 0x1377: #ifdef Py_UNICODE_WIDE case 0x10115: + case 0x10E6E: case 0x1D36E: #endif return (double) 60.0; #ifdef Py_UNICODE_WIDE case 0x1011E: + case 0x10E77: return (double) 600.0; #endif #ifdef Py_UNICODE_WIDE @@ -2868,6 +3072,8 @@ case 0x1817: case 0x194D: case 0x19D7: + case 0x1A87: + case 0x1A97: case 0x1B57: case 0x1BB7: case 0x1C47: @@ -2891,13 +3097,17 @@ case 0x67D2: case 0x6F06: case 0xA627: + case 0xA6EC: case 0xA8D7: case 0xA907: + case 0xA9D7: case 0xAA57: + case 0xABF7: case 0xFF17: #ifdef Py_UNICODE_WIDE case 0x1010D: case 0x104A7: + case 0x10E66: case 0x12405: case 0x1240C: case 0x12412: @@ -2912,6 +3122,7 @@ case 0x1D7E9: case 0x1D7F3: case 0x1D7FD: + case 0x1F108: case 0x20001: #endif return (double) 7.0; @@ -2922,11 +3133,13 @@ case 0x1378: #ifdef Py_UNICODE_WIDE case 0x10116: + case 0x10E6F: case 0x1D36F: #endif return (double) 70.0; #ifdef Py_UNICODE_WIDE case 0x1011F: + case 0x10E78: return (double) 700.0; #endif #ifdef Py_UNICODE_WIDE @@ -2961,6 +3174,8 @@ case 0x1818: case 0x194E: case 0x19D8: + case 0x1A88: + case 0x1A98: case 0x1B58: case 0x1BB8: case 0x1C48: @@ -2982,13 +3197,17 @@ case 0x516B: case 0x634C: case 0xA628: + case 0xA6ED: case 0xA8D8: case 0xA908: + case 0xA9D8: case 0xAA58: + case 0xABF8: case 0xFF18: #ifdef Py_UNICODE_WIDE case 0x1010E: case 0x104A8: + case 0x10E67: case 0x12406: case 0x1240D: case 0x12413: @@ -3002,16 +3221,19 @@ case 0x1D7EA: case 0x1D7F4: case 0x1D7FE: + case 0x1F109: #endif return (double) 8.0; case 0x1379: #ifdef Py_UNICODE_WIDE case 0x10117: + case 0x10E70: case 0x1D370: #endif return (double) 80.0; #ifdef Py_UNICODE_WIDE case 0x10120: + case 0x10E79: return (double) 800.0; #endif #ifdef Py_UNICODE_WIDE @@ -3046,6 +3268,8 @@ case 0x1819: case 0x194F: case 0x19D9: + case 0x1A89: + case 0x1A99: case 0x1B59: case 0x1BB9: case 0x1C49: @@ -3068,13 +3292,17 @@ case 0x5EFE: case 0x7396: case 0xA629: + case 0xA6EE: case 0xA8D9: case 0xA909: + case 0xA9D9: case 0xAA59: + case 0xABF9: case 0xFF19: #ifdef Py_UNICODE_WIDE case 0x1010F: case 0x104A9: + case 0x10E68: case 0x12407: case 0x1240E: case 0x12414: @@ -3090,6 +3318,7 @@ case 0x1D7EB: case 0x1D7F5: case 0x1D7FF: + case 0x1F10A: case 0x2F890: #endif return (double) 9.0; @@ -3099,12 +3328,14 @@ #ifdef Py_UNICODE_WIDE case 0x10118: case 0x10341: + case 0x10E71: case 0x1D371: #endif return (double) 90.0; #ifdef Py_UNICODE_WIDE case 0x10121: case 0x1034A: + case 0x10E7A: return (double) 900.0; #endif #ifdef Py_UNICODE_WIDE Modified: python/branches/py3k/Tools/unicode/makeunicodedata.py ============================================================================== --- python/branches/py3k/Tools/unicode/makeunicodedata.py (original) +++ python/branches/py3k/Tools/unicode/makeunicodedata.py Fri Mar 19 14:37:08 2010 @@ -31,7 +31,7 @@ VERSION = "2.6" # The Unicode Database -UNIDATA_VERSION = "5.1.0" +UNIDATA_VERSION = "5.2.0" UNICODE_DATA = "UnicodeData%s.txt" COMPOSITION_EXCLUSIONS = "CompositionExclusions%s.txt" EASTASIAN_WIDTH = "EastAsianWidth%s.txt" From python-checkins at python.org Fri Mar 19 15:25:03 2010 From: python-checkins at python.org (florent.xicluna) Date: Fri, 19 Mar 2010 15:25:03 +0100 (CET) Subject: [Python-checkins] r79094 - in python/branches/py3k: Lib/test/support.py Lib/test/test_normalization.py Misc/NEWS Tools/unicode/gencodec.py Tools/unicode/makeunicodedata.py Message-ID: <20100319142503.999E7FBC0@mail.python.org> Author: florent.xicluna Date: Fri Mar 19 15:25:03 2010 New Revision: 79094 Log: Merged revisions 78982,78986 via svnmerge from svn+ssh://pythondev at svn.python.org/python/trunk ........ r78982 | florent.xicluna | 2010-03-15 15:00:58 +0100 (lun, 15 mar 2010) | 2 lines Remove py3k deprecation warnings from these Unicode tools. ........ r78986 | florent.xicluna | 2010-03-15 19:08:58 +0100 (lun, 15 mar 2010) | 3 lines Issue #7783 and #7787: open_urlresource invalidates the outdated files from the local cache. Use this feature to fix test_normalization. ........ Modified: python/branches/py3k/ (props changed) python/branches/py3k/Lib/test/support.py python/branches/py3k/Lib/test/test_normalization.py python/branches/py3k/Misc/NEWS python/branches/py3k/Tools/unicode/gencodec.py python/branches/py3k/Tools/unicode/makeunicodedata.py Modified: python/branches/py3k/Lib/test/support.py ============================================================================== --- python/branches/py3k/Lib/test/support.py (original) +++ python/branches/py3k/Lib/test/support.py Fri Mar 19 15:25:03 2010 @@ -33,6 +33,7 @@ "reap_children", "cpython_only", "check_impl_detail", "get_attribute", "swap_item", "swap_attr"] + class Error(Exception): """Base class for regression test exceptions.""" @@ -444,12 +445,29 @@ def open_urlresource(url, *args, **kw): import urllib.request, urllib.parse - requires('urlfetch') + check = kw.pop('check', None) + filename = urllib.parse.urlparse(url)[2].split('/')[-1] # '/': it's URL! fn = os.path.join(os.path.dirname(__file__), "data", filename) + + def check_valid_file(fn): + f = open(fn, *args, **kw) + if check is None: + return f + elif check(f): + f.seek(0) + return f + f.close() + if os.path.exists(fn): - return open(fn, *args, **kw) + f = check_valid_file(fn) + if f is not None: + return f + unlink(fn) + + # Verify the requirement before downloading the file + requires('urlfetch') print('\tfetching %s ...' % url, file=get_original_stdout()) f = urllib.request.urlopen(url, timeout=15) @@ -461,7 +479,12 @@ s = f.read() finally: f.close() - return open(fn, *args, **kw) + + f = check_valid_file(fn) + if f is not None: + return f + raise TestFailed('invalid resource "%s"' % fn) + class WarningsRecorder(object): """Convenience wrapper for the warnings list returned on Modified: python/branches/py3k/Lib/test/test_normalization.py ============================================================================== --- python/branches/py3k/Lib/test/test_normalization.py (original) +++ python/branches/py3k/Lib/test/test_normalization.py Fri Mar 19 15:25:03 2010 @@ -9,14 +9,9 @@ TESTDATAFILE = "NormalizationTest.txt" TESTDATAURL = "http://www.unicode.org/Public/" + unidata_version + "/ucd/" + TESTDATAFILE -# Verify we have the correct version of the test data file. -TESTDATAPATH = os.path.join(os.path.dirname(__file__), "data", TESTDATAFILE) -if os.path.exists(TESTDATAPATH): - f = open(TESTDATAPATH, encoding='utf-8') - l = f.readline() - f.close() - if not unidata_version in l: - os.unlink(testdatafile) +def check_version(testfile): + hdr = testfile.readline() + return unidata_version in hdr class RangeError(Exception): pass @@ -42,13 +37,15 @@ class NormalizationTest(unittest.TestCase): def test_main(self): + part = None part1_data = {} # Hit the exception early try: - open_urlresource(TESTDATAURL, encoding="utf-8") + testdata = open_urlresource(TESTDATAURL, encoding="utf-8", + check=check_version) except (IOError, HTTPException): self.skipTest("Could not retrieve " + TESTDATAURL) - for line in open_urlresource(TESTDATAURL, encoding="utf-8"): + for line in testdata: if '#' in line: line = line.split('#')[0] line = line.strip() Modified: python/branches/py3k/Misc/NEWS ============================================================================== --- python/branches/py3k/Misc/NEWS (original) +++ python/branches/py3k/Misc/NEWS Fri Mar 19 15:25:03 2010 @@ -903,13 +903,16 @@ - Issue #6556: Fixed the Distutils configuration files location explanation for Windows. - + - Update python manual page (options -B, -O0, -s, environment variables PYTHONDONTWRITEBYTECODE, PYTHONNOUSERSITE). Tests ----- +- Issue #7783: test.test_support.open_urlresource invalidates the outdated + files from the local cache. + - Issue #7849: Now the utility ``check_warnings`` verifies if the warnings are effectively raised. Modified: python/branches/py3k/Tools/unicode/gencodec.py ============================================================================== --- python/branches/py3k/Tools/unicode/gencodec.py (original) +++ python/branches/py3k/Tools/unicode/gencodec.py Fri Mar 19 15:25:03 2010 @@ -40,8 +40,7 @@ '\s*' '(#.+)?') -def parsecodes(codes, - len=len, filter=filter,range=range): +def parsecodes(codes, len=len, range=range): """ Converts code combinations to either a single code integer or a tuple of integers. Modified: python/branches/py3k/Tools/unicode/makeunicodedata.py ============================================================================== --- python/branches/py3k/Tools/unicode/makeunicodedata.py (original) +++ python/branches/py3k/Tools/unicode/makeunicodedata.py Fri Mar 19 15:25:03 2010 @@ -517,8 +517,7 @@ haswide = False hasnonewide = False - spaces.sort() - for codepoint in spaces: + for codepoint in sorted(spaces): if codepoint < 0x10000: hasnonewide = True if codepoint >= 0x10000 and not haswide: @@ -546,8 +545,7 @@ print(' switch (ch) {', file=fp) haswide = False hasnonewide = False - linebreaks.sort() - for codepoint in linebreaks: + for codepoint in sorted(linebreaks): if codepoint < 0x10000: hasnonewide = True if codepoint >= 0x10000 and not haswide: From python-checkins at python.org Fri Mar 19 15:40:32 2010 From: python-checkins at python.org (florent.xicluna) Date: Fri, 19 Mar 2010 15:40:32 +0100 (CET) Subject: [Python-checkins] r79095 - python/branches/py3k/Misc/NEWS Message-ID: <20100319144032.01DBDF96F@mail.python.org> Author: florent.xicluna Date: Fri Mar 19 15:40:31 2010 New Revision: 79095 Log: Rename test.test_support to test.support for 3.x. Modified: python/branches/py3k/Misc/NEWS Modified: python/branches/py3k/Misc/NEWS ============================================================================== --- python/branches/py3k/Misc/NEWS (original) +++ python/branches/py3k/Misc/NEWS Fri Mar 19 15:40:31 2010 @@ -886,8 +886,8 @@ - Issue 5390: Add uninstall icon independent of whether file extensions are installed. -- Issue #7541: when using ``python-config`` with a framework install the compiler might - use the wrong library. +- Issue #7541: when using ``python-config`` with a framework install the + compiler might use the wrong library. Documentation ------------ @@ -910,8 +910,8 @@ Tests ----- -- Issue #7783: test.test_support.open_urlresource invalidates the outdated - files from the local cache. +- Issue #7783: test.support.open_urlresource invalidates the outdated files + from the local cache. - Issue #7849: Now the utility ``check_warnings`` verifies if the warnings are effectively raised. @@ -937,8 +937,8 @@ test_capi (only seen so far on platforms where the curses module wasn't built), due to an uncleared exception. -- issue #7728: test_timeout was changed to use test_support.bind_port - instead of a hard coded port. +- Issue #7728: test_timeout was changed to use support.bind_port instead of a + hard coded port. - Issue #7376: instead of running a self-test (which was failing) when called with no arguments, doctest.py now gives a usage message. From python-checkins at python.org Fri Mar 19 15:45:06 2010 From: python-checkins at python.org (matthias.klose) Date: Fri, 19 Mar 2010 15:45:06 +0100 (CET) Subject: [Python-checkins] r79096 - in python/trunk: Lib/test/test_os.py Misc/NEWS Modules/posixmodule.c Message-ID: <20100319144506.9765FF9FA@mail.python.org> Author: matthias.klose Date: Fri Mar 19 15:45:06 2010 New Revision: 79096 Log: - Issue #1039, #8154: Fix os.execlp() crash with missing 2nd argument. Modified: python/trunk/Lib/test/test_os.py python/trunk/Misc/NEWS python/trunk/Modules/posixmodule.c Modified: python/trunk/Lib/test/test_os.py ============================================================================== --- python/trunk/Lib/test/test_os.py (original) +++ python/trunk/Lib/test/test_os.py Fri Mar 19 15:45:06 2010 @@ -505,6 +505,9 @@ except NotImplementedError: pass + def test_execvpe_with_bad_arglist(self): + self.assertRaises(ValueError, os.execvpe, 'notepad', [], None) + class Win32ErrorTests(unittest.TestCase): def test_rename(self): self.assertRaises(WindowsError, os.rename, test_support.TESTFN, test_support.TESTFN+".bak") Modified: python/trunk/Misc/NEWS ============================================================================== --- python/trunk/Misc/NEWS (original) +++ python/trunk/Misc/NEWS Fri Mar 19 15:45:06 2010 @@ -63,6 +63,8 @@ Extension Modules ----------------- +- Issue #1039, #8154: Fix os.execlp() crash with missing 2nd argument. + - Issue #6949: Allow the _bsddb extension to be built with db-4.8.x. - Issue #8142: Update libffi to the 3.0.9 release. Modified: python/trunk/Modules/posixmodule.c ============================================================================== --- python/trunk/Modules/posixmodule.c (original) +++ python/trunk/Modules/posixmodule.c Fri Mar 19 15:45:06 2010 @@ -2952,6 +2952,11 @@ PyMem_Free(path); return NULL; } + if (argc < 1) { + PyErr_SetString(PyExc_ValueError, "execv() arg 2 must not be empty"); + PyMem_Free(path); + return NULL; + } argvlist = PyMem_NEW(char *, argc+1); if (argvlist == NULL) { From python-checkins at python.org Fri Mar 19 17:53:08 2010 From: python-checkins at python.org (gregory.p.smith) Date: Fri, 19 Mar 2010 17:53:08 +0100 (CET) Subject: [Python-checkins] r79097 - in python/branches/py3k: Lib/test/test_subprocess.py Modules/_posixsubprocess.c Message-ID: <20100319165308.D0760DA8E@mail.python.org> Author: gregory.p.smith Date: Fri Mar 19 17:53:08 2010 New Revision: 79097 Log: * Fix a refleak when a preexec_fn was supplied (preexec_fn_args_tuple was not being defref'ed). * Fixes another potential refleak of a reference to the gc module in the unlikely odd case where gc module isenabled or disable calls fail. * Adds a unittest for the above case to verify behavior and lack of leaks. Modified: python/branches/py3k/Lib/test/test_subprocess.py python/branches/py3k/Modules/_posixsubprocess.c Modified: python/branches/py3k/Lib/test/test_subprocess.py ============================================================================== --- python/branches/py3k/Lib/test/test_subprocess.py (original) +++ python/branches/py3k/Lib/test/test_subprocess.py Fri Mar 19 17:53:08 2010 @@ -9,6 +9,10 @@ import time import re import sysconfig +try: + import gc +except ImportError: + gc = None mswindows = (sys.platform == "win32") @@ -650,6 +654,44 @@ self.fail("Exception raised by preexec_fn did not make it " "to the parent process.") + @unittest.skipUnless(gc, "Requires a gc module.") + def test_preexec_gc_module_failure(self): + # This tests the code that disables garbage collection if the child + # process will execute any Python. + def raise_runtime_error(): + raise RuntimeError("this shouldn't escape") + enabled = gc.isenabled() + orig_gc_disable = gc.disable + orig_gc_isenabled = gc.isenabled + try: + gc.disable() + self.assertFalse(gc.isenabled()) + subprocess.call([sys.executable, '-c', ''], + preexec_fn=lambda: None) + self.assertFalse(gc.isenabled(), + "Popen enabled gc when it shouldn't.") + + gc.enable() + self.assertTrue(gc.isenabled()) + subprocess.call([sys.executable, '-c', ''], + preexec_fn=lambda: None) + self.assertTrue(gc.isenabled(), "Popen left gc disabled.") + + gc.disable = raise_runtime_error + self.assertRaises(RuntimeError, subprocess.Popen, + [sys.executable, '-c', ''], + preexec_fn=lambda: None) + + del gc.isenabled # force an AttributeError + self.assertRaises(AttributeError, subprocess.Popen, + [sys.executable, '-c', ''], + preexec_fn=lambda: None) + finally: + gc.disable = orig_gc_disable + gc.isenabled = orig_gc_isenabled + if not enabled: + gc.disable() + def test_args_string(self): # args is a string fd, fname = mkstemp() Modified: python/branches/py3k/Modules/_posixsubprocess.c ============================================================================== --- python/branches/py3k/Modules/_posixsubprocess.c (original) +++ python/branches/py3k/Modules/_posixsubprocess.c Fri Mar 19 17:53:08 2010 @@ -204,15 +204,21 @@ if (gc_module == NULL) return NULL; result = PyObject_CallMethod(gc_module, "isenabled", NULL); - if (result == NULL) + if (result == NULL) { + Py_DECREF(gc_module); return NULL; + } need_to_reenable_gc = PyObject_IsTrue(result); Py_DECREF(result); - if (need_to_reenable_gc == -1) + if (need_to_reenable_gc == -1) { + Py_DECREF(gc_module); return NULL; + } result = PyObject_CallMethod(gc_module, "disable", NULL); - if (result == NULL) + if (result == NULL) { + Py_DECREF(gc_module); return NULL; + } Py_DECREF(result); } @@ -307,6 +313,7 @@ Py_XDECREF(gc_module); return NULL; } + Py_XDECREF(preexec_fn_args_tuple); Py_XDECREF(gc_module); if (pid == -1) @@ -322,6 +329,7 @@ _Py_FreeCharPArray(exec_array); Py_XDECREF(converted_args); Py_XDECREF(fast_args); + Py_XDECREF(preexec_fn_args_tuple); /* Reenable gc if it was disabled. */ if (need_to_reenable_gc) From python-checkins at python.org Fri Mar 19 18:46:34 2010 From: python-checkins at python.org (matthias.klose) Date: Fri, 19 Mar 2010 18:46:34 +0100 (CET) Subject: [Python-checkins] r79098 - in python/trunk/Modules/_ctypes: libffi.diff libffi/aclocal.m4 libffi/configure libffi/configure.ac Message-ID: <20100319174634.0E278FAE2@mail.python.org> Author: matthias.klose Date: Fri Mar 19 18:46:33 2010 New Revision: 79098 Log: Generate libffi's Makefiles again to be able to run the libffi testsuite -- Diese und die folgenden Zeilen werden ignoriert -- M _ctypes/libffi/configure M _ctypes/libffi/configure.ac M _ctypes/libffi/aclocal.m4 M _ctypes/libffi.diff Modified: python/trunk/Modules/_ctypes/libffi.diff python/trunk/Modules/_ctypes/libffi/aclocal.m4 python/trunk/Modules/_ctypes/libffi/configure python/trunk/Modules/_ctypes/libffi/configure.ac Modified: python/trunk/Modules/_ctypes/libffi.diff ============================================================================== --- python/trunk/Modules/_ctypes/libffi.diff (original) +++ python/trunk/Modules/_ctypes/libffi.diff Fri Mar 19 18:46:33 2010 @@ -1,28 +1,17 @@ -This file contains the diffs between the files in the libffi -subdirectory and the 'official' source files from -ftp://sourceware.org/pub/libffi/libffi-3.0.9.tar.gz - ---- libffi/configure.ac.orig 2009-12-31 13:41:51.000000000 +0100 -+++ libffi/configure.ac 2010-02-24 00:39:10.341610848 +0100 -@@ -1,4 +1,7 @@ - dnl Process this with autoconf to create configure -+# -+# file from libffi - slightly patched for ctypes -+# - - AC_PREREQ(2.63) - -@@ -91,6 +94,9 @@ - i?86-*-solaris2.1[[0-9]]*) +diff -urN libffi.orig/configure libffi/configure +--- libffi.orig/configure 2010-03-19 18:29:54.588499862 +0100 ++++ libffi/configure 2010-03-19 18:32:09.113499479 +0100 +@@ -11228,6 +11228,9 @@ + i?86-*-solaris2.1[0-9]*) TARGET=X86_64; TARGETDIR=x86 ;; -+ i*86-*-nto-qnx*) ++ i*86-*-nto-qnx*) + TARGET=X86; TARGETDIR=x86 + ;; i?86-*-*) TARGET=X86; TARGETDIR=x86 ;; -@@ -108,12 +114,12 @@ +@@ -11245,12 +11248,12 @@ ;; mips-sgi-irix5.* | mips-sgi-irix6.*) @@ -37,40 +26,59 @@ ;; powerpc*-*-linux* | powerpc-*-sysv*) -@@ -170,7 +176,7 @@ - AC_MSG_ERROR(["libffi has not been ported to $host."]) +@@ -11307,7 +11310,7 @@ + as_fn_error "\"libffi has not been ported to $host.\"" "$LINENO" 5 fi --AM_CONDITIONAL(MIPS, test x$TARGET = xMIPS) -+AM_CONDITIONAL(MIPS,[expr x$TARGET : 'xMIPS' > /dev/null]) - AM_CONDITIONAL(SPARC, test x$TARGET = xSPARC) - AM_CONDITIONAL(X86, test x$TARGET = xX86) - AM_CONDITIONAL(X86_FREEBSD, test x$TARGET = xX86_FREEBSD) -@@ -399,6 +405,10 @@ +- if test x$TARGET = xMIPS; then ++ if expr x$TARGET : 'xMIPS' > /dev/null; then + MIPS_TRUE= + MIPS_FALSE='#' + else +@@ -12422,6 +12425,12 @@ + ac_config_files="$ac_config_files include/Makefile include/ffi.h Makefile testsuite/Makefile man/Makefile libffi.pc" - AC_CONFIG_LINKS(include/ffitarget.h:src/$TARGETDIR/ffitarget.h) --AC_CONFIG_FILES(include/Makefile include/ffi.h Makefile testsuite/Makefile man/Makefile libffi.pc) -+AC_CONFIG_FILES(include/ffi.h) ++ac_config_links="$ac_config_links include/ffi_common.h:include/ffi_common.h" + -+AC_CONFIG_LINKS(include/ffi_common.h:include/ffi_common.h) + -+AC_CONFIG_FILES(fficonfig.py) ++ac_config_files="$ac_config_files fficonfig.py" ++ ++ + cat >confcache <<\_ACEOF + # This file is a shell script that caches the results of configure + # tests run on this system so they can be shared between configure +@@ -13521,6 +13530,8 @@ + "testsuite/Makefile") CONFIG_FILES="$CONFIG_FILES testsuite/Makefile" ;; + "man/Makefile") CONFIG_FILES="$CONFIG_FILES man/Makefile" ;; + "libffi.pc") CONFIG_FILES="$CONFIG_FILES libffi.pc" ;; ++ "include/ffi_common.h") CONFIG_LINKS="$CONFIG_LINKS include/ffi_common.h:include/ffi_common.h" ;; ++ "fficonfig.py") CONFIG_FILES="$CONFIG_FILES fficonfig.py" ;; - AC_OUTPUT ---- libffi/configure.orig 2009-12-31 13:41:51.000000000 +0100 -+++ libffi/configure 2010-02-24 00:41:59.829608794 +0100 -@@ -12191,6 +12191,9 @@ - i?86-*-solaris2.1[0-9]*) + *) as_fn_error "invalid argument: \`$ac_config_target'" "$LINENO" 5;; + esac +diff -urN libffi.orig/configure.ac libffi/configure.ac +--- libffi.orig/configure.ac 2010-03-19 18:27:44.988498585 +0100 ++++ libffi/configure.ac 2010-03-19 18:31:29.252505178 +0100 +@@ -1,4 +1,7 @@ + dnl Process this with autoconf to create configure ++# ++# file from libffi - slightly patched for ctypes ++# + + AC_PREREQ(2.63) + +@@ -91,6 +94,9 @@ + i?86-*-solaris2.1[[0-9]]*) TARGET=X86_64; TARGETDIR=x86 ;; -+ i*86-*-nto-qnx*) ++ i*86-*-nto-qnx*) + TARGET=X86; TARGETDIR=x86 + ;; i?86-*-*) TARGET=X86; TARGETDIR=x86 ;; -@@ -12208,12 +12211,12 @@ +@@ -108,12 +114,12 @@ ;; mips-sgi-irix5.* | mips-sgi-irix6.*) @@ -85,47 +93,27 @@ ;; powerpc*-*-linux* | powerpc-*-sysv*) -@@ -12272,7 +12275,7 @@ - { (exit 1); exit 1; }; } +@@ -170,7 +176,7 @@ + AC_MSG_ERROR(["libffi has not been ported to $host."]) fi -- if test x$TARGET = xMIPS; then -+ if expr x$TARGET : 'xMIPS' > /dev/null; then - MIPS_TRUE= - MIPS_FALSE='#' - else -@@ -14667,7 +14670,13 @@ - ac_config_links="$ac_config_links include/ffitarget.h:src/$TARGETDIR/ffitarget.h" +-AM_CONDITIONAL(MIPS, test x$TARGET = xMIPS) ++AM_CONDITIONAL(MIPS,[expr x$TARGET : 'xMIPS' > /dev/null]) + AM_CONDITIONAL(SPARC, test x$TARGET = xSPARC) + AM_CONDITIONAL(X86, test x$TARGET = xX86) + AM_CONDITIONAL(X86_FREEBSD, test x$TARGET = xX86_FREEBSD) +@@ -401,4 +407,8 @@ + AC_CONFIG_FILES(include/Makefile include/ffi.h Makefile testsuite/Makefile man/Makefile libffi.pc) --ac_config_files="$ac_config_files include/Makefile include/ffi.h Makefile testsuite/Makefile man/Makefile libffi.pc" -+ac_config_files="$ac_config_files include/ffi.h" -+ -+ -+ac_config_links="$ac_config_links include/ffi_common.h:include/ffi_common.h" ++AC_CONFIG_LINKS(include/ffi_common.h:include/ffi_common.h) + ++AC_CONFIG_FILES(fficonfig.py) + -+ac_config_files="$ac_config_files fficonfig.py" - - - cat >confcache <<\_ACEOF -@@ -15767,12 +15776,9 @@ - "include") CONFIG_COMMANDS="$CONFIG_COMMANDS include" ;; - "src") CONFIG_COMMANDS="$CONFIG_COMMANDS src" ;; - "include/ffitarget.h") CONFIG_LINKS="$CONFIG_LINKS include/ffitarget.h:src/$TARGETDIR/ffitarget.h" ;; -- "include/Makefile") CONFIG_FILES="$CONFIG_FILES include/Makefile" ;; - "include/ffi.h") CONFIG_FILES="$CONFIG_FILES include/ffi.h" ;; -- "Makefile") CONFIG_FILES="$CONFIG_FILES Makefile" ;; -- "testsuite/Makefile") CONFIG_FILES="$CONFIG_FILES testsuite/Makefile" ;; -- "man/Makefile") CONFIG_FILES="$CONFIG_FILES man/Makefile" ;; -- "libffi.pc") CONFIG_FILES="$CONFIG_FILES libffi.pc" ;; -+ "include/ffi_common.h") CONFIG_LINKS="$CONFIG_LINKS include/ffi_common.h:include/ffi_common.h" ;; -+ "fficonfig.py") CONFIG_FILES="$CONFIG_FILES fficonfig.py" ;; - - *) { { $as_echo "$as_me:$LINENO: error: invalid argument: $ac_config_target" >&5 - $as_echo "$as_me: error: invalid argument: $ac_config_target" >&2;} ---- libffi/src/x86/ffi64.c.orig 2009-12-29 16:22:26.000000000 +0100 -+++ libffi/src/x86/ffi64.c 2010-02-24 00:36:46.678610932 +0100 + AC_OUTPUT +diff -urN libffi.orig/src/x86/ffi64.c libffi/src/x86/ffi64.c +--- libffi.orig/src/x86/ffi64.c 2010-03-19 18:27:45.008523897 +0100 ++++ libffi/src/x86/ffi64.c 2010-03-19 18:24:36.437500070 +0100 @@ -52,7 +52,7 @@ /* Register class used for passing given 64bit part of the argument. These represent classes as documented by the PS ABI, with the exception @@ -135,8 +123,9 @@ Similary we play games with INTEGERSI_CLASS to use cheaper SImode moves whenever possible (upper half does contain padding). */ ---- libffi/src/x86/ffi.c.orig 2009-12-29 16:22:26.000000000 +0100 -+++ libffi/src/x86/ffi.c 2010-02-24 00:36:46.678610932 +0100 +diff -urN libffi.orig/src/x86/ffi.c libffi/src/x86/ffi.c +--- libffi.orig/src/x86/ffi.c 2010-03-19 18:27:45.008523897 +0100 ++++ libffi/src/x86/ffi.c 2010-03-19 18:24:36.441496039 +0100 @@ -594,10 +594,10 @@ return FFI_BAD_ABI; } Modified: python/trunk/Modules/_ctypes/libffi/aclocal.m4 ============================================================================== --- python/trunk/Modules/_ctypes/libffi/aclocal.m4 (original) +++ python/trunk/Modules/_ctypes/libffi/aclocal.m4 Fri Mar 19 18:46:33 2010 @@ -1046,4 +1046,9 @@ AC_SUBST([am__untar]) ]) # _AM_PROG_TAR +m4_include([m4/libtool.m4]) +m4_include([m4/ltoptions.m4]) +m4_include([m4/ltsugar.m4]) +m4_include([m4/ltversion.m4]) +m4_include([m4/lt~obsolete.m4]) m4_include([acinclude.m4]) Modified: python/trunk/Modules/_ctypes/libffi/configure ============================================================================== --- python/trunk/Modules/_ctypes/libffi/configure (original) +++ python/trunk/Modules/_ctypes/libffi/configure Fri Mar 19 18:46:33 2010 @@ -529,6 +529,155 @@ as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" + +# Check that we are running under the correct shell. +SHELL=${CONFIG_SHELL-/bin/sh} + +case X$lt_ECHO in +X*--fallback-echo) + # Remove one level of quotation (which was required for Make). + ECHO=`echo "$lt_ECHO" | sed 's,\\\\\$\\$0,'$0','` + ;; +esac + +ECHO=${lt_ECHO-echo} +if test "X$1" = X--no-reexec; then + # Discard the --no-reexec flag, and continue. + shift +elif test "X$1" = X--fallback-echo; then + # Avoid inline document here, it may be left over + : +elif test "X`{ $ECHO '\t'; } 2>/dev/null`" = 'X\t' ; then + # Yippee, $ECHO works! + : +else + # Restart under the correct shell. + exec $SHELL "$0" --no-reexec ${1+"$@"} +fi + +if test "X$1" = X--fallback-echo; then + # used as fallback echo + shift + cat <<_LT_EOF +$* +_LT_EOF + exit 0 +fi + +# The HP-UX ksh and POSIX shell print the target directory to stdout +# if CDPATH is set. +(unset CDPATH) >/dev/null 2>&1 && unset CDPATH + +if test -z "$lt_ECHO"; then + if test "X${echo_test_string+set}" != Xset; then + # find a string as large as possible, as long as the shell can cope with it + for cmd in 'sed 50q "$0"' 'sed 20q "$0"' 'sed 10q "$0"' 'sed 2q "$0"' 'echo test'; do + # expected sizes: less than 2Kb, 1Kb, 512 bytes, 16 bytes, ... + if { echo_test_string=`eval $cmd`; } 2>/dev/null && + { test "X$echo_test_string" = "X$echo_test_string"; } 2>/dev/null + then + break + fi + done + fi + + if test "X`{ $ECHO '\t'; } 2>/dev/null`" = 'X\t' && + echo_testing_string=`{ $ECHO "$echo_test_string"; } 2>/dev/null` && + test "X$echo_testing_string" = "X$echo_test_string"; then + : + else + # The Solaris, AIX, and Digital Unix default echo programs unquote + # backslashes. This makes it impossible to quote backslashes using + # echo "$something" | sed 's/\\/\\\\/g' + # + # So, first we look for a working echo in the user's PATH. + + lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR + for dir in $PATH /usr/ucb; do + IFS="$lt_save_ifs" + if (test -f $dir/echo || test -f $dir/echo$ac_exeext) && + test "X`($dir/echo '\t') 2>/dev/null`" = 'X\t' && + echo_testing_string=`($dir/echo "$echo_test_string") 2>/dev/null` && + test "X$echo_testing_string" = "X$echo_test_string"; then + ECHO="$dir/echo" + break + fi + done + IFS="$lt_save_ifs" + + if test "X$ECHO" = Xecho; then + # We didn't find a better echo, so look for alternatives. + if test "X`{ print -r '\t'; } 2>/dev/null`" = 'X\t' && + echo_testing_string=`{ print -r "$echo_test_string"; } 2>/dev/null` && + test "X$echo_testing_string" = "X$echo_test_string"; then + # This shell has a builtin print -r that does the trick. + ECHO='print -r' + elif { test -f /bin/ksh || test -f /bin/ksh$ac_exeext; } && + test "X$CONFIG_SHELL" != X/bin/ksh; then + # If we have ksh, try running configure again with it. + ORIGINAL_CONFIG_SHELL=${CONFIG_SHELL-/bin/sh} + export ORIGINAL_CONFIG_SHELL + CONFIG_SHELL=/bin/ksh + export CONFIG_SHELL + exec $CONFIG_SHELL "$0" --no-reexec ${1+"$@"} + else + # Try using printf. + ECHO='printf %s\n' + if test "X`{ $ECHO '\t'; } 2>/dev/null`" = 'X\t' && + echo_testing_string=`{ $ECHO "$echo_test_string"; } 2>/dev/null` && + test "X$echo_testing_string" = "X$echo_test_string"; then + # Cool, printf works + : + elif echo_testing_string=`($ORIGINAL_CONFIG_SHELL "$0" --fallback-echo '\t') 2>/dev/null` && + test "X$echo_testing_string" = 'X\t' && + echo_testing_string=`($ORIGINAL_CONFIG_SHELL "$0" --fallback-echo "$echo_test_string") 2>/dev/null` && + test "X$echo_testing_string" = "X$echo_test_string"; then + CONFIG_SHELL=$ORIGINAL_CONFIG_SHELL + export CONFIG_SHELL + SHELL="$CONFIG_SHELL" + export SHELL + ECHO="$CONFIG_SHELL $0 --fallback-echo" + elif echo_testing_string=`($CONFIG_SHELL "$0" --fallback-echo '\t') 2>/dev/null` && + test "X$echo_testing_string" = 'X\t' && + echo_testing_string=`($CONFIG_SHELL "$0" --fallback-echo "$echo_test_string") 2>/dev/null` && + test "X$echo_testing_string" = "X$echo_test_string"; then + ECHO="$CONFIG_SHELL $0 --fallback-echo" + else + # maybe with a smaller string... + prev=: + + for cmd in 'echo test' 'sed 2q "$0"' 'sed 10q "$0"' 'sed 20q "$0"' 'sed 50q "$0"'; do + if { test "X$echo_test_string" = "X`eval $cmd`"; } 2>/dev/null + then + break + fi + prev="$cmd" + done + + if test "$prev" != 'sed 50q "$0"'; then + echo_test_string=`eval $prev` + export echo_test_string + exec ${ORIGINAL_CONFIG_SHELL-${CONFIG_SHELL-/bin/sh}} "$0" ${1+"$@"} + else + # Oops. We lost completely, so just stick with echo. + ECHO=echo + fi + fi + fi + fi + fi +fi + +# Copy echo and quote the copy suitably for passing to libtool from +# the Makefile, instead of quoting the original, which is used later. +lt_ECHO=$ECHO +if test "X$lt_ECHO" = "X$CONFIG_SHELL $0 --fallback-echo"; then + lt_ECHO="$CONFIG_SHELL \\\$\$0 --fallback-echo" +fi + + + + test -n "$DJDIR" || exec 7<&0 &1 @@ -659,12 +808,29 @@ AM_RUNTESTFLAGS TESTSUBDIR_FALSE TESTSUBDIR_TRUE -EGREP -GREP -CPP MAINT MAINTAINER_MODE_FALSE MAINTAINER_MODE_TRUE +CPP +OTOOL64 +OTOOL +LIPO +NMEDIT +DSYMUTIL +lt_ECHO +RANLIB +AR +OBJDUMP +LN_S +NM +ac_ct_DUMPBIN +DUMPBIN +LD +FGREP +EGREP +GREP +SED +LIBTOOL am__fastdepCCAS_FALSE am__fastdepCCAS_TRUE CCASDEPMODE @@ -763,6 +929,12 @@ ac_user_opts=' enable_option_checking enable_dependency_tracking +enable_shared +enable_static +with_pic +enable_fast_install +with_gnu_ld +enable_libtool_lock enable_maintainer_mode enable_debug enable_structs @@ -1398,6 +1570,11 @@ --enable-FEATURE[=ARG] include FEATURE [ARG=yes] --disable-dependency-tracking speeds up one-time build --enable-dependency-tracking do not reject slow dependency extractors + --enable-shared[=PKGS] build shared libraries [default=yes] + --enable-static[=PKGS] build static libraries [default=yes] + --enable-fast-install[=PKGS] + optimize for fast installation [default=yes] + --disable-libtool-lock avoid locking (might break parallel builds) --enable-maintainer-mode enable make rules and dependencies not useful (and sometimes confusing) to the casual installer --enable-debug debugging mode @@ -1405,6 +1582,13 @@ --disable-raw-api make the raw api unavailable --enable-purify-safety purify-safe mode +Optional Packages: + --with-PACKAGE[=ARG] use PACKAGE [ARG=yes] + --without-PACKAGE do not use PACKAGE (same as --with-PACKAGE=no) + --with-pic try to use only PIC/non-PIC objects [default=use + both] + --with-gnu-ld assume the C compiler uses GNU ld [default=no] + Some influential environment variables: CC C compiler command CFLAGS C compiler flags @@ -1535,6 +1719,83 @@ } # ac_fn_c_try_compile +# ac_fn_c_try_link LINENO +# ----------------------- +# Try to link conftest.$ac_ext, and return whether this succeeded. +ac_fn_c_try_link () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + rm -f conftest.$ac_objext conftest$ac_exeext + if { { ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_link") 2>conftest.err + ac_status=$? + if test -s conftest.err; then + grep -v '^ *+' conftest.err >conftest.er1 + cat conftest.er1 >&5 + mv -f conftest.er1 conftest.err + fi + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest$ac_exeext && { + test "$cross_compiling" = yes || + $as_test_x conftest$ac_exeext + }; then : + ac_retval=0 +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_retval=1 +fi + # Delete the IPA/IPO (Inter Procedural Analysis/Optimization) information + # created by the PGI compiler (conftest_ipa8_conftest.oo), as it would + # interfere with the next link command; also delete a directory that is + # left behind by Apple's compiler. We do this before executing the actions. + rm -rf conftest.dSYM conftest_ipa8_conftest.oo + eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;} + as_fn_set_status $ac_retval + +} # ac_fn_c_try_link + +# ac_fn_c_check_header_compile LINENO HEADER VAR INCLUDES +# ------------------------------------------------------- +# Tests whether HEADER exists and can be compiled using the include files in +# INCLUDES, setting the cache variable VAR accordingly. +ac_fn_c_check_header_compile () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 +$as_echo_n "checking for $2... " >&6; } +if { as_var=$3; eval "test \"\${$as_var+set}\" = set"; }; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$4 +#include <$2> +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + eval "$3=yes" +else + eval "$3=no" +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +eval ac_res=\$$3 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } + eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;} + +} # ac_fn_c_check_header_compile + # ac_fn_c_try_cpp LINENO # ---------------------- # Try to preprocess conftest.$ac_ext, and return whether this succeeded. @@ -1572,6 +1833,115 @@ } # ac_fn_c_try_cpp +# ac_fn_c_try_run LINENO +# ---------------------- +# Try to link conftest.$ac_ext, and return whether this succeeded. Assumes +# that executables *can* be run. +ac_fn_c_try_run () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + if { { ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_link") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } && { ac_try='./conftest$ac_exeext' + { { case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_try") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then : + ac_retval=0 +else + $as_echo "$as_me: program exited with status $ac_status" >&5 + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_retval=$ac_status +fi + rm -rf conftest.dSYM conftest_ipa8_conftest.oo + eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;} + as_fn_set_status $ac_retval + +} # ac_fn_c_try_run + +# ac_fn_c_check_func LINENO FUNC VAR +# ---------------------------------- +# Tests whether FUNC exists, setting the cache variable VAR accordingly +ac_fn_c_check_func () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 +$as_echo_n "checking for $2... " >&6; } +if { as_var=$3; eval "test \"\${$as_var+set}\" = set"; }; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +/* Define $2 to an innocuous variant, in case declares $2. + For example, HP-UX 11i declares gettimeofday. */ +#define $2 innocuous_$2 + +/* System header to define __stub macros and hopefully few prototypes, + which can conflict with char $2 (); below. + Prefer to if __STDC__ is defined, since + exists even on freestanding compilers. */ + +#ifdef __STDC__ +# include +#else +# include +#endif + +#undef $2 + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char $2 (); +/* The GNU C library defines this for functions which it implements + to always fail with ENOSYS. Some functions are actually named + something starting with __ and the normal name is an alias. */ +#if defined __stub_$2 || defined __stub___$2 +choke me +#endif + +int +main () +{ +return $2 (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + eval "$3=yes" +else + eval "$3=no" +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +fi +eval ac_res=\$$3 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } + eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;} + +} # ac_fn_c_check_func + # ac_fn_c_check_header_mongrel LINENO HEADER VAR INCLUDES # ------------------------------------------------------- # Tests whether HEADER exists, giving a warning if it cannot be compiled using @@ -1665,198 +2035,12 @@ } # ac_fn_c_check_header_mongrel -# ac_fn_c_try_run LINENO -# ---------------------- -# Try to link conftest.$ac_ext, and return whether this succeeded. Assumes -# that executables *can* be run. -ac_fn_c_try_run () -{ - as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - if { { ac_try="$ac_link" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 - (eval "$ac_link") 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; } && { ac_try='./conftest$ac_exeext' - { { case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 - (eval "$ac_try") 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; }; then : - ac_retval=0 -else - $as_echo "$as_me: program exited with status $ac_status" >&5 - $as_echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_retval=$ac_status -fi - rm -rf conftest.dSYM conftest_ipa8_conftest.oo - eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;} - as_fn_set_status $ac_retval - -} # ac_fn_c_try_run - -# ac_fn_c_check_header_compile LINENO HEADER VAR INCLUDES -# ------------------------------------------------------- -# Tests whether HEADER exists and can be compiled using the include files in -# INCLUDES, setting the cache variable VAR accordingly. -ac_fn_c_check_header_compile () -{ - as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 -$as_echo_n "checking for $2... " >&6; } -if { as_var=$3; eval "test \"\${$as_var+set}\" = set"; }; then : - $as_echo_n "(cached) " >&6 -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -$4 -#include <$2> -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - eval "$3=yes" -else - eval "$3=no" -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -fi -eval ac_res=\$$3 - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 -$as_echo "$ac_res" >&6; } - eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;} - -} # ac_fn_c_check_header_compile - -# ac_fn_c_try_link LINENO -# ----------------------- -# Try to link conftest.$ac_ext, and return whether this succeeded. -ac_fn_c_try_link () -{ - as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - rm -f conftest.$ac_objext conftest$ac_exeext - if { { ac_try="$ac_link" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 - (eval "$ac_link") 2>conftest.err - ac_status=$? - if test -s conftest.err; then - grep -v '^ *+' conftest.err >conftest.er1 - cat conftest.er1 >&5 - mv -f conftest.er1 conftest.err - fi - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest$ac_exeext && { - test "$cross_compiling" = yes || - $as_test_x conftest$ac_exeext - }; then : - ac_retval=0 -else - $as_echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_retval=1 -fi - # Delete the IPA/IPO (Inter Procedural Analysis/Optimization) information - # created by the PGI compiler (conftest_ipa8_conftest.oo), as it would - # interfere with the next link command; also delete a directory that is - # left behind by Apple's compiler. We do this before executing the actions. - rm -rf conftest.dSYM conftest_ipa8_conftest.oo - eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;} - as_fn_set_status $ac_retval - -} # ac_fn_c_try_link - -# ac_fn_c_check_func LINENO FUNC VAR -# ---------------------------------- -# Tests whether FUNC exists, setting the cache variable VAR accordingly -ac_fn_c_check_func () -{ - as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 -$as_echo_n "checking for $2... " >&6; } -if { as_var=$3; eval "test \"\${$as_var+set}\" = set"; }; then : - $as_echo_n "(cached) " >&6 -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -/* Define $2 to an innocuous variant, in case declares $2. - For example, HP-UX 11i declares gettimeofday. */ -#define $2 innocuous_$2 - -/* System header to define __stub macros and hopefully few prototypes, - which can conflict with char $2 (); below. - Prefer to if __STDC__ is defined, since - exists even on freestanding compilers. */ - -#ifdef __STDC__ -# include -#else -# include -#endif - -#undef $2 - -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char $2 (); -/* The GNU C library defines this for functions which it implements - to always fail with ENOSYS. Some functions are actually named - something starting with __ and the normal name is an alias. */ -#if defined __stub_$2 || defined __stub___$2 -choke me -#endif - -int -main () -{ -return $2 (); - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - eval "$3=yes" -else - eval "$3=no" -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -fi -eval ac_res=\$$3 - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 -$as_echo "$ac_res" >&6; } - eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;} - -} # ac_fn_c_check_func - -# ac_fn_c_compute_int LINENO EXPR VAR INCLUDES -# -------------------------------------------- -# Tries to find the compile-time value of EXPR in a program that includes -# INCLUDES, setting VAR accordingly. Returns whether the value could be -# computed -ac_fn_c_compute_int () +# ac_fn_c_compute_int LINENO EXPR VAR INCLUDES +# -------------------------------------------- +# Tries to find the compile-time value of EXPR in a program that includes +# INCLUDES, setting VAR accordingly. Returns whether the value could be +# computed +ac_fn_c_compute_int () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack if test "$cross_compiling" = yes; then @@ -4249,170 +4433,111 @@ fi -AC_PROG_LIBTOOL +case `pwd` in + *\ * | *\ *) + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Libtool does not cope well with whitespace in \`pwd\`" >&5 +$as_echo "$as_me: WARNING: Libtool does not cope well with whitespace in \`pwd\`" >&2;} ;; +esac -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to enable maintainer-specific portions of Makefiles" >&5 -$as_echo_n "checking whether to enable maintainer-specific portions of Makefiles... " >&6; } - # Check whether --enable-maintainer-mode was given. -if test "${enable_maintainer_mode+set}" = set; then : - enableval=$enable_maintainer_mode; USE_MAINTAINER_MODE=$enableval -else - USE_MAINTAINER_MODE=no -fi +macro_version='2.2.6' +macro_revision='1.3012' - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $USE_MAINTAINER_MODE" >&5 -$as_echo "$USE_MAINTAINER_MODE" >&6; } - if test $USE_MAINTAINER_MODE = yes; then - MAINTAINER_MODE_TRUE= - MAINTAINER_MODE_FALSE='#' -else - MAINTAINER_MODE_TRUE='#' - MAINTAINER_MODE_FALSE= -fi - MAINT=$MAINTAINER_MODE_TRUE -ac_ext=c -ac_cpp='$CPP $CPPFLAGS' -ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_c_compiler_gnu -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to run the C preprocessor" >&5 -$as_echo_n "checking how to run the C preprocessor... " >&6; } -# On Suns, sometimes $CPP names a directory. -if test -n "$CPP" && test -d "$CPP"; then - CPP= -fi -if test -z "$CPP"; then - if test "${ac_cv_prog_CPP+set}" = set; then : + + + + + + + +ltmain="$ac_aux_dir/ltmain.sh" + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a sed that does not truncate output" >&5 +$as_echo_n "checking for a sed that does not truncate output... " >&6; } +if test "${ac_cv_path_SED+set}" = set; then : $as_echo_n "(cached) " >&6 else - # Double quotes because CPP needs to be expanded - for CPP in "$CC -E" "$CC -E -traditional-cpp" "/lib/cpp" - do - ac_preproc_ok=false -for ac_c_preproc_warn_flag in '' yes + ac_script=s/aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb/ + for ac_i in 1 2 3 4 5 6 7; do + ac_script="$ac_script$as_nl$ac_script" + done + echo "$ac_script" 2>/dev/null | sed 99q >conftest.sed + { ac_script=; unset ac_script;} + if test -z "$SED"; then + ac_path_SED_found=false + # Loop through the user's path and test for each of PROGNAME-LIST + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH do - # Use a header file that comes with gcc, so configuring glibc - # with a fresh cross-compiler works. - # Prefer to if __STDC__ is defined, since - # exists even on freestanding compilers. - # On the NeXT, cc -E runs the code through the compiler's parser, - # not just through cpp. "Syntax error" is here to catch this case. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#ifdef __STDC__ -# include -#else -# include -#endif - Syntax error -_ACEOF -if ac_fn_c_try_cpp "$LINENO"; then : - -else - # Broken: fails on valid input. -continue -fi -rm -f conftest.err conftest.$ac_ext - - # OK, works on sane cases. Now check whether nonexistent headers - # can be detected and how. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include -_ACEOF -if ac_fn_c_try_cpp "$LINENO"; then : - # Broken: success on invalid input. -continue + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_prog in sed gsed; do + for ac_exec_ext in '' $ac_executable_extensions; do + ac_path_SED="$as_dir/$ac_prog$ac_exec_ext" + { test -f "$ac_path_SED" && $as_test_x "$ac_path_SED"; } || continue +# Check for GNU ac_path_SED and select it if it is found. + # Check for GNU $ac_path_SED +case `"$ac_path_SED" --version 2>&1` in +*GNU*) + ac_cv_path_SED="$ac_path_SED" ac_path_SED_found=:;; +*) + ac_count=0 + $as_echo_n 0123456789 >"conftest.in" + while : + do + cat "conftest.in" "conftest.in" >"conftest.tmp" + mv "conftest.tmp" "conftest.in" + cp "conftest.in" "conftest.nl" + $as_echo '' >> "conftest.nl" + "$ac_path_SED" -f conftest.sed < "conftest.nl" >"conftest.out" 2>/dev/null || break + diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break + as_fn_arith $ac_count + 1 && ac_count=$as_val + if test $ac_count -gt ${ac_path_SED_max-0}; then + # Best one so far, save it but keep looking for a better one + ac_cv_path_SED="$ac_path_SED" + ac_path_SED_max=$ac_count + fi + # 10*(2^10) chars as input seems more than enough + test $ac_count -gt 10 && break + done + rm -f conftest.in conftest.tmp conftest.nl conftest.out;; +esac + + $ac_path_SED_found && break 3 + done + done + done +IFS=$as_save_IFS + if test -z "$ac_cv_path_SED"; then + as_fn_error "no acceptable sed could be found in \$PATH" "$LINENO" 5 + fi else - # Passes both tests. -ac_preproc_ok=: -break + ac_cv_path_SED=$SED fi -rm -f conftest.err conftest.$ac_ext -done -# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. -rm -f conftest.err conftest.$ac_ext -if $ac_preproc_ok; then : - break fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_SED" >&5 +$as_echo "$ac_cv_path_SED" >&6; } + SED="$ac_cv_path_SED" + rm -f conftest.sed + +test -z "$SED" && SED=sed +Xsed="$SED -e 1s/^X//" + + - done - ac_cv_prog_CPP=$CPP -fi - CPP=$ac_cv_prog_CPP -else - ac_cv_prog_CPP=$CPP -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $CPP" >&5 -$as_echo "$CPP" >&6; } -ac_preproc_ok=false -for ac_c_preproc_warn_flag in '' yes -do - # Use a header file that comes with gcc, so configuring glibc - # with a fresh cross-compiler works. - # Prefer to if __STDC__ is defined, since - # exists even on freestanding compilers. - # On the NeXT, cc -E runs the code through the compiler's parser, - # not just through cpp. "Syntax error" is here to catch this case. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#ifdef __STDC__ -# include -#else -# include -#endif - Syntax error -_ACEOF -if ac_fn_c_try_cpp "$LINENO"; then : -else - # Broken: fails on valid input. -continue -fi -rm -f conftest.err conftest.$ac_ext - # OK, works on sane cases. Now check whether nonexistent headers - # can be detected and how. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include -_ACEOF -if ac_fn_c_try_cpp "$LINENO"; then : - # Broken: success on invalid input. -continue -else - # Passes both tests. -ac_preproc_ok=: -break -fi -rm -f conftest.err conftest.$ac_ext -done -# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. -rm -f conftest.err conftest.$ac_ext -if $ac_preproc_ok; then : -else - { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} -as_fn_error "C preprocessor \"$CPP\" fails sanity check -See \`config.log' for more details." "$LINENO" 5; } -fi -ac_ext=c -ac_cpp='$CPP $CPPFLAGS' -ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_c_compiler_gnu { $as_echo "$as_me:${as_lineno-$LINENO}: checking for grep that handles long lines and -e" >&5 @@ -4545,134 +4670,6336 @@ EGREP="$ac_cv_path_EGREP" -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for ANSI C header files" >&5 -$as_echo_n "checking for ANSI C header files... " >&6; } -if test "${ac_cv_header_stdc+set}" = set; then : +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for fgrep" >&5 +$as_echo_n "checking for fgrep... " >&6; } +if test "${ac_cv_path_FGREP+set}" = set; then : $as_echo_n "(cached) " >&6 else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include -#include -#include -#include - -int -main () -{ + if echo 'ab*c' | $GREP -F 'ab*c' >/dev/null 2>&1 + then ac_cv_path_FGREP="$GREP -F" + else + if test -z "$FGREP"; then + ac_path_FGREP_found=false + # Loop through the user's path and test for each of PROGNAME-LIST + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_prog in fgrep; do + for ac_exec_ext in '' $ac_executable_extensions; do + ac_path_FGREP="$as_dir/$ac_prog$ac_exec_ext" + { test -f "$ac_path_FGREP" && $as_test_x "$ac_path_FGREP"; } || continue +# Check for GNU ac_path_FGREP and select it if it is found. + # Check for GNU $ac_path_FGREP +case `"$ac_path_FGREP" --version 2>&1` in +*GNU*) + ac_cv_path_FGREP="$ac_path_FGREP" ac_path_FGREP_found=:;; +*) + ac_count=0 + $as_echo_n 0123456789 >"conftest.in" + while : + do + cat "conftest.in" "conftest.in" >"conftest.tmp" + mv "conftest.tmp" "conftest.in" + cp "conftest.in" "conftest.nl" + $as_echo 'FGREP' >> "conftest.nl" + "$ac_path_FGREP" FGREP < "conftest.nl" >"conftest.out" 2>/dev/null || break + diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break + as_fn_arith $ac_count + 1 && ac_count=$as_val + if test $ac_count -gt ${ac_path_FGREP_max-0}; then + # Best one so far, save it but keep looking for a better one + ac_cv_path_FGREP="$ac_path_FGREP" + ac_path_FGREP_max=$ac_count + fi + # 10*(2^10) chars as input seems more than enough + test $ac_count -gt 10 && break + done + rm -f conftest.in conftest.tmp conftest.nl conftest.out;; +esac - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - ac_cv_header_stdc=yes + $ac_path_FGREP_found && break 3 + done + done + done +IFS=$as_save_IFS + if test -z "$ac_cv_path_FGREP"; then + as_fn_error "no acceptable fgrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 + fi else - ac_cv_header_stdc=no + ac_cv_path_FGREP=$FGREP fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -if test $ac_cv_header_stdc = yes; then - # SunOS 4.x string.h does not declare mem*, contrary to ANSI. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include + fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_FGREP" >&5 +$as_echo "$ac_cv_path_FGREP" >&6; } + FGREP="$ac_cv_path_FGREP" + + +test -z "$GREP" && GREP=grep -_ACEOF -if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | - $EGREP "memchr" >/dev/null 2>&1; then : -else - ac_cv_header_stdc=no -fi -rm -f conftest* -fi -if test $ac_cv_header_stdc = yes; then - # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include -_ACEOF -if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | - $EGREP "free" >/dev/null 2>&1; then : -else - ac_cv_header_stdc=no -fi -rm -f conftest* -fi -if test $ac_cv_header_stdc = yes; then - # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi. - if test "$cross_compiling" = yes; then : - : -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include -#include -#if ((' ' & 0x0FF) == 0x020) -# define ISLOWER(c) ('a' <= (c) && (c) <= 'z') -# define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c)) -#else -# define ISLOWER(c) \ - (('a' <= (c) && (c) <= 'i') \ - || ('j' <= (c) && (c) <= 'r') \ - || ('s' <= (c) && (c) <= 'z')) -# define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c)) -#endif -#define XOR(e, f) (((e) && !(f)) || (!(e) && (f))) -int -main () -{ - int i; - for (i = 0; i < 256; i++) - if (XOR (islower (i), ISLOWER (i)) - || toupper (i) != TOUPPER (i)) - return 2; - return 0; -} -_ACEOF -if ac_fn_c_try_run "$LINENO"; then : + + + + + + + + + +# Check whether --with-gnu-ld was given. +if test "${with_gnu_ld+set}" = set; then : + withval=$with_gnu_ld; test "$withval" = no || with_gnu_ld=yes else - ac_cv_header_stdc=no -fi -rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ - conftest.$ac_objext conftest.beam conftest.$ac_ext + with_gnu_ld=no fi +ac_prog=ld +if test "$GCC" = yes; then + # Check if gcc -print-prog-name=ld gives a path. + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ld used by $CC" >&5 +$as_echo_n "checking for ld used by $CC... " >&6; } + case $host in + *-*-mingw*) + # gcc leaves a trailing carriage return which upsets mingw + ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;; + *) + ac_prog=`($CC -print-prog-name=ld) 2>&5` ;; + esac + case $ac_prog in + # Accept absolute paths. + [\\/]* | ?:[\\/]*) + re_direlt='/[^/][^/]*/\.\./' + # Canonicalize the pathname of ld + ac_prog=`$ECHO "$ac_prog"| $SED 's%\\\\%/%g'` + while $ECHO "$ac_prog" | $GREP "$re_direlt" > /dev/null 2>&1; do + ac_prog=`$ECHO $ac_prog| $SED "s%$re_direlt%/%"` + done + test -z "$LD" && LD="$ac_prog" + ;; + "") + # If it fails, then pretend we aren't using GCC. + ac_prog=ld + ;; + *) + # If it is relative, then search for the first ld in PATH. + with_gnu_ld=unknown + ;; + esac +elif test "$with_gnu_ld" = yes; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for GNU ld" >&5 +$as_echo_n "checking for GNU ld... " >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for non-GNU ld" >&5 +$as_echo_n "checking for non-GNU ld... " >&6; } +fi +if test "${lt_cv_path_LD+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test -z "$LD"; then + lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR + for ac_dir in $PATH; do + IFS="$lt_save_ifs" + test -z "$ac_dir" && ac_dir=. + if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then + lt_cv_path_LD="$ac_dir/$ac_prog" + # Check to see if the program is GNU ld. I'd rather use --version, + # but apparently some variants of GNU ld only accept -v. + # Break only if it was the GNU/non-GNU ld that we prefer. + case `"$lt_cv_path_LD" -v 2>&1 &5 -$as_echo "$ac_cv_header_stdc" >&6; } -if test $ac_cv_header_stdc = yes; then - -$as_echo "#define STDC_HEADERS 1" >>confdefs.h +LD="$lt_cv_path_LD" +if test -n "$LD"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LD" >&5 +$as_echo "$LD" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi +test -z "$LD" && as_fn_error "no acceptable ld found in \$PATH" "$LINENO" 5 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if the linker ($LD) is GNU ld" >&5 +$as_echo_n "checking if the linker ($LD) is GNU ld... " >&6; } +if test "${lt_cv_prog_gnu_ld+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + # I'd rather use --version here, but apparently some GNU lds only accept -v. +case `$LD -v 2>&1 &5 +$as_echo "$lt_cv_prog_gnu_ld" >&6; } +with_gnu_ld=$lt_cv_prog_gnu_ld + + + + + + + + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for BSD- or MS-compatible name lister (nm)" >&5 +$as_echo_n "checking for BSD- or MS-compatible name lister (nm)... " >&6; } +if test "${lt_cv_path_NM+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$NM"; then + # Let the user override the test. + lt_cv_path_NM="$NM" +else + lt_nm_to_check="${ac_tool_prefix}nm" + if test -n "$ac_tool_prefix" && test "$build" = "$host"; then + lt_nm_to_check="$lt_nm_to_check nm" + fi + for lt_tmp_nm in $lt_nm_to_check; do + lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR + for ac_dir in $PATH /usr/ccs/bin/elf /usr/ccs/bin /usr/ucb /bin; do + IFS="$lt_save_ifs" + test -z "$ac_dir" && ac_dir=. + tmp_nm="$ac_dir/$lt_tmp_nm" + if test -f "$tmp_nm" || test -f "$tmp_nm$ac_exeext" ; then + # Check to see if the nm accepts a BSD-compat flag. + # Adding the `sed 1q' prevents false positives on HP-UX, which says: + # nm: unknown option "B" ignored + # Tru64's nm complains that /dev/null is an invalid object file + case `"$tmp_nm" -B /dev/null 2>&1 | sed '1q'` in + */dev/null* | *'Invalid file or object type'*) + lt_cv_path_NM="$tmp_nm -B" + break + ;; + *) + case `"$tmp_nm" -p /dev/null 2>&1 | sed '1q'` in + */dev/null*) + lt_cv_path_NM="$tmp_nm -p" + break + ;; + *) + lt_cv_path_NM=${lt_cv_path_NM="$tmp_nm"} # keep the first match, but + continue # so that we can try to find one that supports BSD flags + ;; + esac + ;; + esac + fi + done + IFS="$lt_save_ifs" + done + : ${lt_cv_path_NM=no} +fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_path_NM" >&5 +$as_echo "$lt_cv_path_NM" >&6; } +if test "$lt_cv_path_NM" != "no"; then + NM="$lt_cv_path_NM" +else + # Didn't find any BSD compatible name lister, look for dumpbin. + if test -n "$ac_tool_prefix"; then + for ac_prog in "dumpbin -symbols" "link -dump -symbols" + do + # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. +set dummy $ac_tool_prefix$ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_DUMPBIN+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$DUMPBIN"; then + ac_cv_prog_DUMPBIN="$DUMPBIN" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_DUMPBIN="$ac_tool_prefix$ac_prog" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +DUMPBIN=$ac_cv_prog_DUMPBIN +if test -n "$DUMPBIN"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DUMPBIN" >&5 +$as_echo "$DUMPBIN" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$DUMPBIN" && break + done +fi +if test -z "$DUMPBIN"; then + ac_ct_DUMPBIN=$DUMPBIN + for ac_prog in "dumpbin -symbols" "link -dump -symbols" +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_ac_ct_DUMPBIN+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_DUMPBIN"; then + ac_cv_prog_ac_ct_DUMPBIN="$ac_ct_DUMPBIN" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_ac_ct_DUMPBIN="$ac_prog" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_DUMPBIN=$ac_cv_prog_ac_ct_DUMPBIN +if test -n "$ac_ct_DUMPBIN"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DUMPBIN" >&5 +$as_echo "$ac_ct_DUMPBIN" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$ac_ct_DUMPBIN" && break +done + + if test "x$ac_ct_DUMPBIN" = x; then + DUMPBIN=":" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + DUMPBIN=$ac_ct_DUMPBIN + fi +fi + + + if test "$DUMPBIN" != ":"; then + NM="$DUMPBIN" + fi +fi +test -z "$NM" && NM=nm + + + + + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking the name lister ($NM) interface" >&5 +$as_echo_n "checking the name lister ($NM) interface... " >&6; } +if test "${lt_cv_nm_interface+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_nm_interface="BSD nm" + echo "int some_variable = 0;" > conftest.$ac_ext + (eval echo "\"\$as_me:5045: $ac_compile\"" >&5) + (eval "$ac_compile" 2>conftest.err) + cat conftest.err >&5 + (eval echo "\"\$as_me:5048: $NM \\\"conftest.$ac_objext\\\"\"" >&5) + (eval "$NM \"conftest.$ac_objext\"" 2>conftest.err > conftest.out) + cat conftest.err >&5 + (eval echo "\"\$as_me:5051: output\"" >&5) + cat conftest.out >&5 + if $GREP 'External.*some_variable' conftest.out > /dev/null; then + lt_cv_nm_interface="MS dumpbin" + fi + rm -f conftest* +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_nm_interface" >&5 +$as_echo "$lt_cv_nm_interface" >&6; } + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ln -s works" >&5 +$as_echo_n "checking whether ln -s works... " >&6; } +LN_S=$as_ln_s +if test "$LN_S" = "ln -s"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no, using $LN_S" >&5 +$as_echo "no, using $LN_S" >&6; } +fi + +# find the maximum length of command line arguments +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking the maximum length of command line arguments" >&5 +$as_echo_n "checking the maximum length of command line arguments... " >&6; } +if test "${lt_cv_sys_max_cmd_len+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + i=0 + teststring="ABCD" + + case $build_os in + msdosdjgpp*) + # On DJGPP, this test can blow up pretty badly due to problems in libc + # (any single argument exceeding 2000 bytes causes a buffer overrun + # during glob expansion). Even if it were fixed, the result of this + # check would be larger than it should be. + lt_cv_sys_max_cmd_len=12288; # 12K is about right + ;; + + gnu*) + # Under GNU Hurd, this test is not required because there is + # no limit to the length of command line arguments. + # Libtool will interpret -1 as no limit whatsoever + lt_cv_sys_max_cmd_len=-1; + ;; + + cygwin* | mingw* | cegcc*) + # On Win9x/ME, this test blows up -- it succeeds, but takes + # about 5 minutes as the teststring grows exponentially. + # Worse, since 9x/ME are not pre-emptively multitasking, + # you end up with a "frozen" computer, even though with patience + # the test eventually succeeds (with a max line length of 256k). + # Instead, let's just punt: use the minimum linelength reported by + # all of the supported platforms: 8192 (on NT/2K/XP). + lt_cv_sys_max_cmd_len=8192; + ;; + + amigaos*) + # On AmigaOS with pdksh, this test takes hours, literally. + # So we just punt and use a minimum line length of 8192. + lt_cv_sys_max_cmd_len=8192; + ;; + + netbsd* | freebsd* | openbsd* | darwin* | dragonfly*) + # This has been around since 386BSD, at least. Likely further. + if test -x /sbin/sysctl; then + lt_cv_sys_max_cmd_len=`/sbin/sysctl -n kern.argmax` + elif test -x /usr/sbin/sysctl; then + lt_cv_sys_max_cmd_len=`/usr/sbin/sysctl -n kern.argmax` + else + lt_cv_sys_max_cmd_len=65536 # usable default for all BSDs + fi + # And add a safety zone + lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4` + lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3` + ;; + + interix*) + # We know the value 262144 and hardcode it with a safety zone (like BSD) + lt_cv_sys_max_cmd_len=196608 + ;; + + osf*) + # Dr. Hans Ekkehard Plesser reports seeing a kernel panic running configure + # due to this test when exec_disable_arg_limit is 1 on Tru64. It is not + # nice to cause kernel panics so lets avoid the loop below. + # First set a reasonable default. + lt_cv_sys_max_cmd_len=16384 + # + if test -x /sbin/sysconfig; then + case `/sbin/sysconfig -q proc exec_disable_arg_limit` in + *1*) lt_cv_sys_max_cmd_len=-1 ;; + esac + fi + ;; + sco3.2v5*) + lt_cv_sys_max_cmd_len=102400 + ;; + sysv5* | sco5v6* | sysv4.2uw2*) + kargmax=`grep ARG_MAX /etc/conf/cf.d/stune 2>/dev/null` + if test -n "$kargmax"; then + lt_cv_sys_max_cmd_len=`echo $kargmax | sed 's/.*[ ]//'` + else + lt_cv_sys_max_cmd_len=32768 + fi + ;; + *) + lt_cv_sys_max_cmd_len=`(getconf ARG_MAX) 2> /dev/null` + if test -n "$lt_cv_sys_max_cmd_len"; then + lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4` + lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3` + else + # Make teststring a little bigger before we do anything with it. + # a 1K string should be a reasonable start. + for i in 1 2 3 4 5 6 7 8 ; do + teststring=$teststring$teststring + done + SHELL=${SHELL-${CONFIG_SHELL-/bin/sh}} + # If test is not a shell built-in, we'll probably end up computing a + # maximum length that is only half of the actual maximum length, but + # we can't tell. + while { test "X"`$SHELL $0 --fallback-echo "X$teststring$teststring" 2>/dev/null` \ + = "XX$teststring$teststring"; } >/dev/null 2>&1 && + test $i != 17 # 1/2 MB should be enough + do + i=`expr $i + 1` + teststring=$teststring$teststring + done + # Only check the string length outside the loop. + lt_cv_sys_max_cmd_len=`expr "X$teststring" : ".*" 2>&1` + teststring= + # Add a significant safety factor because C++ compilers can tack on + # massive amounts of additional arguments before passing them to the + # linker. It appears as though 1/2 is a usable value. + lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 2` + fi + ;; + esac + +fi + +if test -n $lt_cv_sys_max_cmd_len ; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_sys_max_cmd_len" >&5 +$as_echo "$lt_cv_sys_max_cmd_len" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: none" >&5 +$as_echo "none" >&6; } +fi +max_cmd_len=$lt_cv_sys_max_cmd_len + + + + + + +: ${CP="cp -f"} +: ${MV="mv -f"} +: ${RM="rm -f"} + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the shell understands some XSI constructs" >&5 +$as_echo_n "checking whether the shell understands some XSI constructs... " >&6; } +# Try some XSI features +xsi_shell=no +( _lt_dummy="a/b/c" + test "${_lt_dummy##*/},${_lt_dummy%/*},"${_lt_dummy%"$_lt_dummy"}, \ + = c,a/b,, \ + && eval 'test $(( 1 + 1 )) -eq 2 \ + && test "${#_lt_dummy}" -eq 5' ) >/dev/null 2>&1 \ + && xsi_shell=yes +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $xsi_shell" >&5 +$as_echo "$xsi_shell" >&6; } + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the shell understands \"+=\"" >&5 +$as_echo_n "checking whether the shell understands \"+=\"... " >&6; } +lt_shell_append=no +( foo=bar; set foo baz; eval "$1+=\$2" && test "$foo" = barbaz ) \ + >/dev/null 2>&1 \ + && lt_shell_append=yes +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_shell_append" >&5 +$as_echo "$lt_shell_append" >&6; } + + +if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then + lt_unset=unset +else + lt_unset=false +fi + + + + + +# test EBCDIC or ASCII +case `echo X|tr X '\101'` in + A) # ASCII based system + # \n is not interpreted correctly by Solaris 8 /usr/ucb/tr + lt_SP2NL='tr \040 \012' + lt_NL2SP='tr \015\012 \040\040' + ;; + *) # EBCDIC based system + lt_SP2NL='tr \100 \n' + lt_NL2SP='tr \r\n \100\100' + ;; +esac + + + + + + + + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $LD option to reload object files" >&5 +$as_echo_n "checking for $LD option to reload object files... " >&6; } +if test "${lt_cv_ld_reload_flag+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_ld_reload_flag='-r' +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ld_reload_flag" >&5 +$as_echo "$lt_cv_ld_reload_flag" >&6; } +reload_flag=$lt_cv_ld_reload_flag +case $reload_flag in +"" | " "*) ;; +*) reload_flag=" $reload_flag" ;; +esac +reload_cmds='$LD$reload_flag -o $output$reload_objs' +case $host_os in + darwin*) + if test "$GCC" = yes; then + reload_cmds='$LTCC $LTCFLAGS -nostdlib ${wl}-r -o $output$reload_objs' + else + reload_cmds='$LD$reload_flag -o $output$reload_objs' + fi + ;; +esac + + + + + + + + + +if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}objdump", so it can be a program name with args. +set dummy ${ac_tool_prefix}objdump; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_OBJDUMP+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$OBJDUMP"; then + ac_cv_prog_OBJDUMP="$OBJDUMP" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_OBJDUMP="${ac_tool_prefix}objdump" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +OBJDUMP=$ac_cv_prog_OBJDUMP +if test -n "$OBJDUMP"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OBJDUMP" >&5 +$as_echo "$OBJDUMP" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_OBJDUMP"; then + ac_ct_OBJDUMP=$OBJDUMP + # Extract the first word of "objdump", so it can be a program name with args. +set dummy objdump; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_ac_ct_OBJDUMP+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_OBJDUMP"; then + ac_cv_prog_ac_ct_OBJDUMP="$ac_ct_OBJDUMP" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_ac_ct_OBJDUMP="objdump" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_OBJDUMP=$ac_cv_prog_ac_ct_OBJDUMP +if test -n "$ac_ct_OBJDUMP"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OBJDUMP" >&5 +$as_echo "$ac_ct_OBJDUMP" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_OBJDUMP" = x; then + OBJDUMP="false" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + OBJDUMP=$ac_ct_OBJDUMP + fi +else + OBJDUMP="$ac_cv_prog_OBJDUMP" +fi + +test -z "$OBJDUMP" && OBJDUMP=objdump + + + + + + + + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to recognize dependent libraries" >&5 +$as_echo_n "checking how to recognize dependent libraries... " >&6; } +if test "${lt_cv_deplibs_check_method+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_file_magic_cmd='$MAGIC_CMD' +lt_cv_file_magic_test_file= +lt_cv_deplibs_check_method='unknown' +# Need to set the preceding variable on all platforms that support +# interlibrary dependencies. +# 'none' -- dependencies not supported. +# `unknown' -- same as none, but documents that we really don't know. +# 'pass_all' -- all dependencies passed with no checks. +# 'test_compile' -- check by making test program. +# 'file_magic [[regex]]' -- check by looking for files in library path +# which responds to the $file_magic_cmd with a given extended regex. +# If you have `file' or equivalent on your system and you're not sure +# whether `pass_all' will *always* work, you probably want this one. + +case $host_os in +aix[4-9]*) + lt_cv_deplibs_check_method=pass_all + ;; + +beos*) + lt_cv_deplibs_check_method=pass_all + ;; + +bsdi[45]*) + lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (shared object|dynamic lib)' + lt_cv_file_magic_cmd='/usr/bin/file -L' + lt_cv_file_magic_test_file=/shlib/libc.so + ;; + +cygwin*) + # func_win32_libid is a shell function defined in ltmain.sh + lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL' + lt_cv_file_magic_cmd='func_win32_libid' + ;; + +mingw* | pw32*) + # Base MSYS/MinGW do not provide the 'file' command needed by + # func_win32_libid shell function, so use a weaker test based on 'objdump', + # unless we find 'file', for example because we are cross-compiling. + if ( file / ) >/dev/null 2>&1; then + lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL' + lt_cv_file_magic_cmd='func_win32_libid' + else + lt_cv_deplibs_check_method='file_magic file format pei*-i386(.*architecture: i386)?' + lt_cv_file_magic_cmd='$OBJDUMP -f' + fi + ;; + +cegcc) + # use the weaker test based on 'objdump'. See mingw*. + lt_cv_deplibs_check_method='file_magic file format pe-arm-.*little(.*architecture: arm)?' + lt_cv_file_magic_cmd='$OBJDUMP -f' + ;; + +darwin* | rhapsody*) + lt_cv_deplibs_check_method=pass_all + ;; + +freebsd* | dragonfly*) + if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then + case $host_cpu in + i*86 ) + # Not sure whether the presence of OpenBSD here was a mistake. + # Let's accept both of them until this is cleared up. + lt_cv_deplibs_check_method='file_magic (FreeBSD|OpenBSD|DragonFly)/i[3-9]86 (compact )?demand paged shared library' + lt_cv_file_magic_cmd=/usr/bin/file + lt_cv_file_magic_test_file=`echo /usr/lib/libc.so.*` + ;; + esac + else + lt_cv_deplibs_check_method=pass_all + fi + ;; + +gnu*) + lt_cv_deplibs_check_method=pass_all + ;; + +hpux10.20* | hpux11*) + lt_cv_file_magic_cmd=/usr/bin/file + case $host_cpu in + ia64*) + lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF-[0-9][0-9]) shared object file - IA64' + lt_cv_file_magic_test_file=/usr/lib/hpux32/libc.so + ;; + hppa*64*) + lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF-[0-9][0-9]) shared object file - PA-RISC [0-9].[0-9]' + lt_cv_file_magic_test_file=/usr/lib/pa20_64/libc.sl + ;; + *) + lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|PA-RISC[0-9].[0-9]) shared library' + lt_cv_file_magic_test_file=/usr/lib/libc.sl + ;; + esac + ;; + +interix[3-9]*) + # PIC code is broken on Interix 3.x, that's why |\.a not |_pic\.a here + lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so|\.a)$' + ;; + +irix5* | irix6* | nonstopux*) + case $LD in + *-32|*"-32 ") libmagic=32-bit;; + *-n32|*"-n32 ") libmagic=N32;; + *-64|*"-64 ") libmagic=64-bit;; + *) libmagic=never-match;; + esac + lt_cv_deplibs_check_method=pass_all + ;; + +# This must be Linux ELF. +linux* | k*bsd*-gnu) + lt_cv_deplibs_check_method=pass_all + ;; + +netbsd*) + if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then + lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|_pic\.a)$' + else + lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so|_pic\.a)$' + fi + ;; + +newos6*) + lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (executable|dynamic lib)' + lt_cv_file_magic_cmd=/usr/bin/file + lt_cv_file_magic_test_file=/usr/lib/libnls.so + ;; + +*nto* | *qnx*) + lt_cv_deplibs_check_method=pass_all + ;; + +openbsd*) + if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then + lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|\.so|_pic\.a)$' + else + lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|_pic\.a)$' + fi + ;; + +osf3* | osf4* | osf5*) + lt_cv_deplibs_check_method=pass_all + ;; + +rdos*) + lt_cv_deplibs_check_method=pass_all + ;; + +solaris*) + lt_cv_deplibs_check_method=pass_all + ;; + +sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) + lt_cv_deplibs_check_method=pass_all + ;; + +sysv4 | sysv4.3*) + case $host_vendor in + motorola) + lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (shared object|dynamic lib) M[0-9][0-9]* Version [0-9]' + lt_cv_file_magic_test_file=`echo /usr/lib/libc.so*` + ;; + ncr) + lt_cv_deplibs_check_method=pass_all + ;; + sequent) + lt_cv_file_magic_cmd='/bin/file' + lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [LM]SB (shared object|dynamic lib )' + ;; + sni) + lt_cv_file_magic_cmd='/bin/file' + lt_cv_deplibs_check_method="file_magic ELF [0-9][0-9]*-bit [LM]SB dynamic lib" + lt_cv_file_magic_test_file=/lib/libc.so + ;; + siemens) + lt_cv_deplibs_check_method=pass_all + ;; + pc) + lt_cv_deplibs_check_method=pass_all + ;; + esac + ;; + +tpf*) + lt_cv_deplibs_check_method=pass_all + ;; +esac + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_deplibs_check_method" >&5 +$as_echo "$lt_cv_deplibs_check_method" >&6; } +file_magic_cmd=$lt_cv_file_magic_cmd +deplibs_check_method=$lt_cv_deplibs_check_method +test -z "$deplibs_check_method" && deplibs_check_method=unknown + + + + + + + + + + + + +if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}ar", so it can be a program name with args. +set dummy ${ac_tool_prefix}ar; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_AR+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$AR"; then + ac_cv_prog_AR="$AR" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_AR="${ac_tool_prefix}ar" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +AR=$ac_cv_prog_AR +if test -n "$AR"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AR" >&5 +$as_echo "$AR" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_AR"; then + ac_ct_AR=$AR + # Extract the first word of "ar", so it can be a program name with args. +set dummy ar; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_ac_ct_AR+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_AR"; then + ac_cv_prog_ac_ct_AR="$ac_ct_AR" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_ac_ct_AR="ar" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_AR=$ac_cv_prog_ac_ct_AR +if test -n "$ac_ct_AR"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_AR" >&5 +$as_echo "$ac_ct_AR" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_AR" = x; then + AR="false" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + AR=$ac_ct_AR + fi +else + AR="$ac_cv_prog_AR" +fi + +test -z "$AR" && AR=ar +test -z "$AR_FLAGS" && AR_FLAGS=cru + + + + + + + + + + + +if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args. +set dummy ${ac_tool_prefix}strip; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_STRIP+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$STRIP"; then + ac_cv_prog_STRIP="$STRIP" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_STRIP="${ac_tool_prefix}strip" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +STRIP=$ac_cv_prog_STRIP +if test -n "$STRIP"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $STRIP" >&5 +$as_echo "$STRIP" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_STRIP"; then + ac_ct_STRIP=$STRIP + # Extract the first word of "strip", so it can be a program name with args. +set dummy strip; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_ac_ct_STRIP+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_STRIP"; then + ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_ac_ct_STRIP="strip" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP +if test -n "$ac_ct_STRIP"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_STRIP" >&5 +$as_echo "$ac_ct_STRIP" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_STRIP" = x; then + STRIP=":" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + STRIP=$ac_ct_STRIP + fi +else + STRIP="$ac_cv_prog_STRIP" +fi + +test -z "$STRIP" && STRIP=: + + + + + + +if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}ranlib", so it can be a program name with args. +set dummy ${ac_tool_prefix}ranlib; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_RANLIB+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$RANLIB"; then + ac_cv_prog_RANLIB="$RANLIB" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_RANLIB="${ac_tool_prefix}ranlib" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +RANLIB=$ac_cv_prog_RANLIB +if test -n "$RANLIB"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $RANLIB" >&5 +$as_echo "$RANLIB" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_RANLIB"; then + ac_ct_RANLIB=$RANLIB + # Extract the first word of "ranlib", so it can be a program name with args. +set dummy ranlib; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_ac_ct_RANLIB+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_RANLIB"; then + ac_cv_prog_ac_ct_RANLIB="$ac_ct_RANLIB" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_ac_ct_RANLIB="ranlib" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_RANLIB=$ac_cv_prog_ac_ct_RANLIB +if test -n "$ac_ct_RANLIB"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_RANLIB" >&5 +$as_echo "$ac_ct_RANLIB" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_RANLIB" = x; then + RANLIB=":" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + RANLIB=$ac_ct_RANLIB + fi +else + RANLIB="$ac_cv_prog_RANLIB" +fi + +test -z "$RANLIB" && RANLIB=: + + + + + + +# Determine commands to create old-style static archives. +old_archive_cmds='$AR $AR_FLAGS $oldlib$oldobjs' +old_postinstall_cmds='chmod 644 $oldlib' +old_postuninstall_cmds= + +if test -n "$RANLIB"; then + case $host_os in + openbsd*) + old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB -t \$oldlib" + ;; + *) + old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB \$oldlib" + ;; + esac + old_archive_cmds="$old_archive_cmds~\$RANLIB \$oldlib" +fi + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +# If no C compiler was specified, use CC. +LTCC=${LTCC-"$CC"} + +# If no C compiler flags were specified, use CFLAGS. +LTCFLAGS=${LTCFLAGS-"$CFLAGS"} + +# Allow CC to be a program name with arguments. +compiler=$CC + + +# Check for command to grab the raw symbol name followed by C symbol from nm. +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking command to parse $NM output from $compiler object" >&5 +$as_echo_n "checking command to parse $NM output from $compiler object... " >&6; } +if test "${lt_cv_sys_global_symbol_pipe+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + +# These are sane defaults that work on at least a few old systems. +# [They come from Ultrix. What could be older than Ultrix?!! ;)] + +# Character class describing NM global symbol codes. +symcode='[BCDEGRST]' + +# Regexp to match symbols that can be accessed directly from C. +sympat='\([_A-Za-z][_A-Za-z0-9]*\)' + +# Define system-specific variables. +case $host_os in +aix*) + symcode='[BCDT]' + ;; +cygwin* | mingw* | pw32* | cegcc*) + symcode='[ABCDGISTW]' + ;; +hpux*) + if test "$host_cpu" = ia64; then + symcode='[ABCDEGRST]' + fi + ;; +irix* | nonstopux*) + symcode='[BCDEGRST]' + ;; +osf*) + symcode='[BCDEGQRST]' + ;; +solaris*) + symcode='[BDRT]' + ;; +sco3.2v5*) + symcode='[DT]' + ;; +sysv4.2uw2*) + symcode='[DT]' + ;; +sysv5* | sco5v6* | unixware* | OpenUNIX*) + symcode='[ABDT]' + ;; +sysv4) + symcode='[DFNSTU]' + ;; +esac + +# If we're using GNU nm, then use its standard symbol codes. +case `$NM -V 2>&1` in +*GNU* | *'with BFD'*) + symcode='[ABCDGIRSTW]' ;; +esac + +# Transform an extracted symbol line into a proper C declaration. +# Some systems (esp. on ia64) link data and code symbols differently, +# so use this general approach. +lt_cv_sys_global_symbol_to_cdecl="sed -n -e 's/^T .* \(.*\)$/extern int \1();/p' -e 's/^$symcode* .* \(.*\)$/extern char \1;/p'" + +# Transform an extracted symbol line into symbol name and symbol address +lt_cv_sys_global_symbol_to_c_name_address="sed -n -e 's/^: \([^ ]*\) $/ {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([^ ]*\) \([^ ]*\)$/ {\"\2\", (void *) \&\2},/p'" +lt_cv_sys_global_symbol_to_c_name_address_lib_prefix="sed -n -e 's/^: \([^ ]*\) $/ {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([^ ]*\) \(lib[^ ]*\)$/ {\"\2\", (void *) \&\2},/p' -e 's/^$symcode* \([^ ]*\) \([^ ]*\)$/ {\"lib\2\", (void *) \&\2},/p'" + +# Handle CRLF in mingw tool chain +opt_cr= +case $build_os in +mingw*) + opt_cr=`$ECHO 'x\{0,1\}' | tr x '\015'` # option cr in regexp + ;; +esac + +# Try without a prefix underscore, then with it. +for ac_symprfx in "" "_"; do + + # Transform symcode, sympat, and symprfx into a raw symbol and a C symbol. + symxfrm="\\1 $ac_symprfx\\2 \\2" + + # Write the raw and C identifiers. + if test "$lt_cv_nm_interface" = "MS dumpbin"; then + # Fake it for dumpbin and say T for any non-static function + # and D for any global variable. + # Also find C++ and __fastcall symbols from MSVC++, + # which start with @ or ?. + lt_cv_sys_global_symbol_pipe="$AWK '"\ +" {last_section=section; section=\$ 3};"\ +" /Section length .*#relocs.*(pick any)/{hide[last_section]=1};"\ +" \$ 0!~/External *\|/{next};"\ +" / 0+ UNDEF /{next}; / UNDEF \([^|]\)*()/{next};"\ +" {if(hide[section]) next};"\ +" {f=0}; \$ 0~/\(\).*\|/{f=1}; {printf f ? \"T \" : \"D \"};"\ +" {split(\$ 0, a, /\||\r/); split(a[2], s)};"\ +" s[1]~/^[@?]/{print s[1], s[1]; next};"\ +" s[1]~prfx {split(s[1],t,\"@\"); print t[1], substr(t[1],length(prfx))}"\ +" ' prfx=^$ac_symprfx" + else + lt_cv_sys_global_symbol_pipe="sed -n -e 's/^.*[ ]\($symcode$symcode*\)[ ][ ]*$ac_symprfx$sympat$opt_cr$/$symxfrm/p'" + fi + + # Check to see that the pipe works correctly. + pipe_works=no + + rm -f conftest* + cat > conftest.$ac_ext <<_LT_EOF +#ifdef __cplusplus +extern "C" { +#endif +char nm_test_var; +void nm_test_func(void); +void nm_test_func(void){} +#ifdef __cplusplus +} +#endif +int main(){nm_test_var='a';nm_test_func();return(0);} +_LT_EOF + + if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + # Now try to grab the symbols. + nlist=conftest.nm + if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$NM conftest.$ac_objext \| $lt_cv_sys_global_symbol_pipe \> $nlist\""; } >&5 + (eval $NM conftest.$ac_objext \| $lt_cv_sys_global_symbol_pipe \> $nlist) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } && test -s "$nlist"; then + # Try sorting and uniquifying the output. + if sort "$nlist" | uniq > "$nlist"T; then + mv -f "$nlist"T "$nlist" + else + rm -f "$nlist"T + fi + + # Make sure that we snagged all the symbols we need. + if $GREP ' nm_test_var$' "$nlist" >/dev/null; then + if $GREP ' nm_test_func$' "$nlist" >/dev/null; then + cat <<_LT_EOF > conftest.$ac_ext +#ifdef __cplusplus +extern "C" { +#endif + +_LT_EOF + # Now generate the symbol file. + eval "$lt_cv_sys_global_symbol_to_cdecl"' < "$nlist" | $GREP -v main >> conftest.$ac_ext' + + cat <<_LT_EOF >> conftest.$ac_ext + +/* The mapping between symbol names and symbols. */ +const struct { + const char *name; + void *address; +} +lt__PROGRAM__LTX_preloaded_symbols[] = +{ + { "@PROGRAM@", (void *) 0 }, +_LT_EOF + $SED "s/^$symcode$symcode* \(.*\) \(.*\)$/ {\"\2\", (void *) \&\2},/" < "$nlist" | $GREP -v main >> conftest.$ac_ext + cat <<\_LT_EOF >> conftest.$ac_ext + {0, (void *) 0} +}; + +/* This works around a problem in FreeBSD linker */ +#ifdef FREEBSD_WORKAROUND +static const void *lt_preloaded_setup() { + return lt__PROGRAM__LTX_preloaded_symbols; +} +#endif + +#ifdef __cplusplus +} +#endif +_LT_EOF + # Now try linking the two files. + mv conftest.$ac_objext conftstm.$ac_objext + lt_save_LIBS="$LIBS" + lt_save_CFLAGS="$CFLAGS" + LIBS="conftstm.$ac_objext" + CFLAGS="$CFLAGS$lt_prog_compiler_no_builtin_flag" + if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5 + (eval $ac_link) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } && test -s conftest${ac_exeext}; then + pipe_works=yes + fi + LIBS="$lt_save_LIBS" + CFLAGS="$lt_save_CFLAGS" + else + echo "cannot find nm_test_func in $nlist" >&5 + fi + else + echo "cannot find nm_test_var in $nlist" >&5 + fi + else + echo "cannot run $lt_cv_sys_global_symbol_pipe" >&5 + fi + else + echo "$progname: failed program was:" >&5 + cat conftest.$ac_ext >&5 + fi + rm -rf conftest* conftst* + + # Do not use the global_symbol_pipe unless it works. + if test "$pipe_works" = yes; then + break + else + lt_cv_sys_global_symbol_pipe= + fi +done + +fi + +if test -z "$lt_cv_sys_global_symbol_pipe"; then + lt_cv_sys_global_symbol_to_cdecl= +fi +if test -z "$lt_cv_sys_global_symbol_pipe$lt_cv_sys_global_symbol_to_cdecl"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: failed" >&5 +$as_echo "failed" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: ok" >&5 +$as_echo "ok" >&6; } +fi + + + + + + + + + + + + + + + + + + + + + + + +# Check whether --enable-libtool-lock was given. +if test "${enable_libtool_lock+set}" = set; then : + enableval=$enable_libtool_lock; +fi + +test "x$enable_libtool_lock" != xno && enable_libtool_lock=yes + +# Some flags need to be propagated to the compiler or linker for good +# libtool support. +case $host in +ia64-*-hpux*) + # Find out which ABI we are using. + echo 'int i;' > conftest.$ac_ext + if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + case `/usr/bin/file conftest.$ac_objext` in + *ELF-32*) + HPUX_IA64_MODE="32" + ;; + *ELF-64*) + HPUX_IA64_MODE="64" + ;; + esac + fi + rm -rf conftest* + ;; +*-*-irix6*) + # Find out which ABI we are using. + echo '#line 6257 "configure"' > conftest.$ac_ext + if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + if test "$lt_cv_prog_gnu_ld" = yes; then + case `/usr/bin/file conftest.$ac_objext` in + *32-bit*) + LD="${LD-ld} -melf32bsmip" + ;; + *N32*) + LD="${LD-ld} -melf32bmipn32" + ;; + *64-bit*) + LD="${LD-ld} -melf64bmip" + ;; + esac + else + case `/usr/bin/file conftest.$ac_objext` in + *32-bit*) + LD="${LD-ld} -32" + ;; + *N32*) + LD="${LD-ld} -n32" + ;; + *64-bit*) + LD="${LD-ld} -64" + ;; + esac + fi + fi + rm -rf conftest* + ;; + +x86_64-*kfreebsd*-gnu|x86_64-*linux*|ppc*-*linux*|powerpc*-*linux*| \ +s390*-*linux*|s390*-*tpf*|sparc*-*linux*) + # Find out which ABI we are using. + echo 'int i;' > conftest.$ac_ext + if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + case `/usr/bin/file conftest.o` in + *32-bit*) + case $host in + x86_64-*kfreebsd*-gnu) + LD="${LD-ld} -m elf_i386_fbsd" + ;; + x86_64-*linux*) + LD="${LD-ld} -m elf_i386" + ;; + ppc64-*linux*|powerpc64-*linux*) + LD="${LD-ld} -m elf32ppclinux" + ;; + s390x-*linux*) + LD="${LD-ld} -m elf_s390" + ;; + sparc64-*linux*) + LD="${LD-ld} -m elf32_sparc" + ;; + esac + ;; + *64-bit*) + case $host in + x86_64-*kfreebsd*-gnu) + LD="${LD-ld} -m elf_x86_64_fbsd" + ;; + x86_64-*linux*) + LD="${LD-ld} -m elf_x86_64" + ;; + ppc*-*linux*|powerpc*-*linux*) + LD="${LD-ld} -m elf64ppc" + ;; + s390*-*linux*|s390*-*tpf*) + LD="${LD-ld} -m elf64_s390" + ;; + sparc*-*linux*) + LD="${LD-ld} -m elf64_sparc" + ;; + esac + ;; + esac + fi + rm -rf conftest* + ;; + +*-*-sco3.2v5*) + # On SCO OpenServer 5, we need -belf to get full-featured binaries. + SAVE_CFLAGS="$CFLAGS" + CFLAGS="$CFLAGS -belf" + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the C compiler needs -belf" >&5 +$as_echo_n "checking whether the C compiler needs -belf... " >&6; } +if test "${lt_cv_cc_needs_belf+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + lt_cv_cc_needs_belf=yes +else + lt_cv_cc_needs_belf=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_cc_needs_belf" >&5 +$as_echo "$lt_cv_cc_needs_belf" >&6; } + if test x"$lt_cv_cc_needs_belf" != x"yes"; then + # this is probably gcc 2.8.0, egcs 1.0 or newer; no need for -belf + CFLAGS="$SAVE_CFLAGS" + fi + ;; +sparc*-*solaris*) + # Find out which ABI we are using. + echo 'int i;' > conftest.$ac_ext + if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + case `/usr/bin/file conftest.o` in + *64-bit*) + case $lt_cv_prog_gnu_ld in + yes*) LD="${LD-ld} -m elf64_sparc" ;; + *) + if ${LD-ld} -64 -r -o conftest2.o conftest.o >/dev/null 2>&1; then + LD="${LD-ld} -64" + fi + ;; + esac + ;; + esac + fi + rm -rf conftest* + ;; +esac + +need_locks="$enable_libtool_lock" + + + case $host_os in + rhapsody* | darwin*) + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}dsymutil", so it can be a program name with args. +set dummy ${ac_tool_prefix}dsymutil; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_DSYMUTIL+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$DSYMUTIL"; then + ac_cv_prog_DSYMUTIL="$DSYMUTIL" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_DSYMUTIL="${ac_tool_prefix}dsymutil" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +DSYMUTIL=$ac_cv_prog_DSYMUTIL +if test -n "$DSYMUTIL"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DSYMUTIL" >&5 +$as_echo "$DSYMUTIL" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_DSYMUTIL"; then + ac_ct_DSYMUTIL=$DSYMUTIL + # Extract the first word of "dsymutil", so it can be a program name with args. +set dummy dsymutil; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_ac_ct_DSYMUTIL+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_DSYMUTIL"; then + ac_cv_prog_ac_ct_DSYMUTIL="$ac_ct_DSYMUTIL" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_ac_ct_DSYMUTIL="dsymutil" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_DSYMUTIL=$ac_cv_prog_ac_ct_DSYMUTIL +if test -n "$ac_ct_DSYMUTIL"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DSYMUTIL" >&5 +$as_echo "$ac_ct_DSYMUTIL" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_DSYMUTIL" = x; then + DSYMUTIL=":" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + DSYMUTIL=$ac_ct_DSYMUTIL + fi +else + DSYMUTIL="$ac_cv_prog_DSYMUTIL" +fi + + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}nmedit", so it can be a program name with args. +set dummy ${ac_tool_prefix}nmedit; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_NMEDIT+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$NMEDIT"; then + ac_cv_prog_NMEDIT="$NMEDIT" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_NMEDIT="${ac_tool_prefix}nmedit" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +NMEDIT=$ac_cv_prog_NMEDIT +if test -n "$NMEDIT"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $NMEDIT" >&5 +$as_echo "$NMEDIT" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_NMEDIT"; then + ac_ct_NMEDIT=$NMEDIT + # Extract the first word of "nmedit", so it can be a program name with args. +set dummy nmedit; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_ac_ct_NMEDIT+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_NMEDIT"; then + ac_cv_prog_ac_ct_NMEDIT="$ac_ct_NMEDIT" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_ac_ct_NMEDIT="nmedit" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_NMEDIT=$ac_cv_prog_ac_ct_NMEDIT +if test -n "$ac_ct_NMEDIT"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_NMEDIT" >&5 +$as_echo "$ac_ct_NMEDIT" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_NMEDIT" = x; then + NMEDIT=":" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + NMEDIT=$ac_ct_NMEDIT + fi +else + NMEDIT="$ac_cv_prog_NMEDIT" +fi + + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}lipo", so it can be a program name with args. +set dummy ${ac_tool_prefix}lipo; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_LIPO+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$LIPO"; then + ac_cv_prog_LIPO="$LIPO" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_LIPO="${ac_tool_prefix}lipo" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +LIPO=$ac_cv_prog_LIPO +if test -n "$LIPO"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LIPO" >&5 +$as_echo "$LIPO" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_LIPO"; then + ac_ct_LIPO=$LIPO + # Extract the first word of "lipo", so it can be a program name with args. +set dummy lipo; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_ac_ct_LIPO+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_LIPO"; then + ac_cv_prog_ac_ct_LIPO="$ac_ct_LIPO" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_ac_ct_LIPO="lipo" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_LIPO=$ac_cv_prog_ac_ct_LIPO +if test -n "$ac_ct_LIPO"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_LIPO" >&5 +$as_echo "$ac_ct_LIPO" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_LIPO" = x; then + LIPO=":" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + LIPO=$ac_ct_LIPO + fi +else + LIPO="$ac_cv_prog_LIPO" +fi + + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}otool", so it can be a program name with args. +set dummy ${ac_tool_prefix}otool; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_OTOOL+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$OTOOL"; then + ac_cv_prog_OTOOL="$OTOOL" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_OTOOL="${ac_tool_prefix}otool" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +OTOOL=$ac_cv_prog_OTOOL +if test -n "$OTOOL"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OTOOL" >&5 +$as_echo "$OTOOL" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_OTOOL"; then + ac_ct_OTOOL=$OTOOL + # Extract the first word of "otool", so it can be a program name with args. +set dummy otool; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_ac_ct_OTOOL+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_OTOOL"; then + ac_cv_prog_ac_ct_OTOOL="$ac_ct_OTOOL" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_ac_ct_OTOOL="otool" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_OTOOL=$ac_cv_prog_ac_ct_OTOOL +if test -n "$ac_ct_OTOOL"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OTOOL" >&5 +$as_echo "$ac_ct_OTOOL" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_OTOOL" = x; then + OTOOL=":" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + OTOOL=$ac_ct_OTOOL + fi +else + OTOOL="$ac_cv_prog_OTOOL" +fi + + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}otool64", so it can be a program name with args. +set dummy ${ac_tool_prefix}otool64; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_OTOOL64+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$OTOOL64"; then + ac_cv_prog_OTOOL64="$OTOOL64" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_OTOOL64="${ac_tool_prefix}otool64" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +OTOOL64=$ac_cv_prog_OTOOL64 +if test -n "$OTOOL64"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OTOOL64" >&5 +$as_echo "$OTOOL64" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_OTOOL64"; then + ac_ct_OTOOL64=$OTOOL64 + # Extract the first word of "otool64", so it can be a program name with args. +set dummy otool64; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_ac_ct_OTOOL64+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_OTOOL64"; then + ac_cv_prog_ac_ct_OTOOL64="$ac_ct_OTOOL64" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_ac_ct_OTOOL64="otool64" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_OTOOL64=$ac_cv_prog_ac_ct_OTOOL64 +if test -n "$ac_ct_OTOOL64"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OTOOL64" >&5 +$as_echo "$ac_ct_OTOOL64" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_OTOOL64" = x; then + OTOOL64=":" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + OTOOL64=$ac_ct_OTOOL64 + fi +else + OTOOL64="$ac_cv_prog_OTOOL64" +fi + + + + + + + + + + + + + + + + + + + + + + + + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -single_module linker flag" >&5 +$as_echo_n "checking for -single_module linker flag... " >&6; } +if test "${lt_cv_apple_cc_single_mod+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_apple_cc_single_mod=no + if test -z "${LT_MULTI_MODULE}"; then + # By default we will add the -single_module flag. You can override + # by either setting the environment variable LT_MULTI_MODULE + # non-empty at configure time, or by adding -multi_module to the + # link flags. + rm -rf libconftest.dylib* + echo "int foo(void){return 1;}" > conftest.c + echo "$LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \ +-dynamiclib -Wl,-single_module conftest.c" >&5 + $LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \ + -dynamiclib -Wl,-single_module conftest.c 2>conftest.err + _lt_result=$? + if test -f libconftest.dylib && test ! -s conftest.err && test $_lt_result = 0; then + lt_cv_apple_cc_single_mod=yes + else + cat conftest.err >&5 + fi + rm -rf libconftest.dylib* + rm -f conftest.* + fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_apple_cc_single_mod" >&5 +$as_echo "$lt_cv_apple_cc_single_mod" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -exported_symbols_list linker flag" >&5 +$as_echo_n "checking for -exported_symbols_list linker flag... " >&6; } +if test "${lt_cv_ld_exported_symbols_list+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_ld_exported_symbols_list=no + save_LDFLAGS=$LDFLAGS + echo "_main" > conftest.sym + LDFLAGS="$LDFLAGS -Wl,-exported_symbols_list,conftest.sym" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + lt_cv_ld_exported_symbols_list=yes +else + lt_cv_ld_exported_symbols_list=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + LDFLAGS="$save_LDFLAGS" + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ld_exported_symbols_list" >&5 +$as_echo "$lt_cv_ld_exported_symbols_list" >&6; } + case $host_os in + rhapsody* | darwin1.[012]) + _lt_dar_allow_undefined='${wl}-undefined ${wl}suppress' ;; + darwin1.*) + _lt_dar_allow_undefined='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' ;; + darwin*) # darwin 5.x on + # if running on 10.5 or later, the deployment target defaults + # to the OS version, if on x86, and 10.4, the deployment + # target defaults to 10.4. Don't you love it? + case ${MACOSX_DEPLOYMENT_TARGET-10.0},$host in + 10.0,*86*-darwin8*|10.0,*-darwin[91]*) + _lt_dar_allow_undefined='${wl}-undefined ${wl}dynamic_lookup' ;; + 10.[012]*) + _lt_dar_allow_undefined='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' ;; + 10.*) + _lt_dar_allow_undefined='${wl}-undefined ${wl}dynamic_lookup' ;; + esac + ;; + esac + if test "$lt_cv_apple_cc_single_mod" = "yes"; then + _lt_dar_single_mod='$single_module' + fi + if test "$lt_cv_ld_exported_symbols_list" = "yes"; then + _lt_dar_export_syms=' ${wl}-exported_symbols_list,$output_objdir/${libname}-symbols.expsym' + else + _lt_dar_export_syms='~$NMEDIT -s $output_objdir/${libname}-symbols.expsym ${lib}' + fi + if test "$DSYMUTIL" != ":"; then + _lt_dsymutil='~$DSYMUTIL $lib || :' + else + _lt_dsymutil= + fi + ;; + esac + +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to run the C preprocessor" >&5 +$as_echo_n "checking how to run the C preprocessor... " >&6; } +# On Suns, sometimes $CPP names a directory. +if test -n "$CPP" && test -d "$CPP"; then + CPP= +fi +if test -z "$CPP"; then + if test "${ac_cv_prog_CPP+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + # Double quotes because CPP needs to be expanded + for CPP in "$CC -E" "$CC -E -traditional-cpp" "/lib/cpp" + do + ac_preproc_ok=false +for ac_c_preproc_warn_flag in '' yes +do + # Use a header file that comes with gcc, so configuring glibc + # with a fresh cross-compiler works. + # Prefer to if __STDC__ is defined, since + # exists even on freestanding compilers. + # On the NeXT, cc -E runs the code through the compiler's parser, + # not just through cpp. "Syntax error" is here to catch this case. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#ifdef __STDC__ +# include +#else +# include +#endif + Syntax error +_ACEOF +if ac_fn_c_try_cpp "$LINENO"; then : + +else + # Broken: fails on valid input. +continue +fi +rm -f conftest.err conftest.$ac_ext + + # OK, works on sane cases. Now check whether nonexistent headers + # can be detected and how. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +_ACEOF +if ac_fn_c_try_cpp "$LINENO"; then : + # Broken: success on invalid input. +continue +else + # Passes both tests. +ac_preproc_ok=: +break +fi +rm -f conftest.err conftest.$ac_ext + +done +# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. +rm -f conftest.err conftest.$ac_ext +if $ac_preproc_ok; then : + break +fi + + done + ac_cv_prog_CPP=$CPP + +fi + CPP=$ac_cv_prog_CPP +else + ac_cv_prog_CPP=$CPP +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $CPP" >&5 +$as_echo "$CPP" >&6; } +ac_preproc_ok=false +for ac_c_preproc_warn_flag in '' yes +do + # Use a header file that comes with gcc, so configuring glibc + # with a fresh cross-compiler works. + # Prefer to if __STDC__ is defined, since + # exists even on freestanding compilers. + # On the NeXT, cc -E runs the code through the compiler's parser, + # not just through cpp. "Syntax error" is here to catch this case. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#ifdef __STDC__ +# include +#else +# include +#endif + Syntax error +_ACEOF +if ac_fn_c_try_cpp "$LINENO"; then : + +else + # Broken: fails on valid input. +continue +fi +rm -f conftest.err conftest.$ac_ext + + # OK, works on sane cases. Now check whether nonexistent headers + # can be detected and how. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +_ACEOF +if ac_fn_c_try_cpp "$LINENO"; then : + # Broken: success on invalid input. +continue +else + # Passes both tests. +ac_preproc_ok=: +break +fi +rm -f conftest.err conftest.$ac_ext + +done +# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. +rm -f conftest.err conftest.$ac_ext +if $ac_preproc_ok; then : + +else + { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error "C preprocessor \"$CPP\" fails sanity check +See \`config.log' for more details." "$LINENO" 5; } +fi + +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for ANSI C header files" >&5 +$as_echo_n "checking for ANSI C header files... " >&6; } +if test "${ac_cv_header_stdc+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +#include +#include +#include + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_header_stdc=yes +else + ac_cv_header_stdc=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + +if test $ac_cv_header_stdc = yes; then + # SunOS 4.x string.h does not declare mem*, contrary to ANSI. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include + +_ACEOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP "memchr" >/dev/null 2>&1; then : + +else + ac_cv_header_stdc=no +fi +rm -f conftest* + +fi + +if test $ac_cv_header_stdc = yes; then + # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include + +_ACEOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP "free" >/dev/null 2>&1; then : + +else + ac_cv_header_stdc=no +fi +rm -f conftest* + +fi + +if test $ac_cv_header_stdc = yes; then + # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi. + if test "$cross_compiling" = yes; then : + : +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +#include +#if ((' ' & 0x0FF) == 0x020) +# define ISLOWER(c) ('a' <= (c) && (c) <= 'z') +# define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c)) +#else +# define ISLOWER(c) \ + (('a' <= (c) && (c) <= 'i') \ + || ('j' <= (c) && (c) <= 'r') \ + || ('s' <= (c) && (c) <= 'z')) +# define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c)) +#endif + +#define XOR(e, f) (((e) && !(f)) || (!(e) && (f))) +int +main () +{ + int i; + for (i = 0; i < 256; i++) + if (XOR (islower (i), ISLOWER (i)) + || toupper (i) != TOUPPER (i)) + return 2; + return 0; +} +_ACEOF +if ac_fn_c_try_run "$LINENO"; then : + +else + ac_cv_header_stdc=no +fi +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest.beam conftest.$ac_ext +fi + +fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_stdc" >&5 +$as_echo "$ac_cv_header_stdc" >&6; } +if test $ac_cv_header_stdc = yes; then + +$as_echo "#define STDC_HEADERS 1" >>confdefs.h + +fi + +# On IRIX 5.3, sys/types and inttypes.h are conflicting. +for ac_header in sys/types.h sys/stat.h stdlib.h string.h memory.h strings.h \ + inttypes.h stdint.h unistd.h +do : + as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` +ac_fn_c_check_header_compile "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default +" +eval as_val=\$$as_ac_Header + if test "x$as_val" = x""yes; then : + cat >>confdefs.h <<_ACEOF +#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 +_ACEOF + +fi + +done + + +for ac_header in dlfcn.h +do : + ac_fn_c_check_header_compile "$LINENO" "dlfcn.h" "ac_cv_header_dlfcn_h" "$ac_includes_default +" +if test "x$ac_cv_header_dlfcn_h" = x""yes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE_DLFCN_H 1 +_ACEOF + +fi + +done + + + +# Set options + + + + enable_dlopen=no + + + enable_win32_dll=no + + + # Check whether --enable-shared was given. +if test "${enable_shared+set}" = set; then : + enableval=$enable_shared; p=${PACKAGE-default} + case $enableval in + yes) enable_shared=yes ;; + no) enable_shared=no ;; + *) + enable_shared=no + # Look at the argument we got. We use all the common list separators. + lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," + for pkg in $enableval; do + IFS="$lt_save_ifs" + if test "X$pkg" = "X$p"; then + enable_shared=yes + fi + done + IFS="$lt_save_ifs" + ;; + esac +else + enable_shared=yes +fi + + + + + + + + + + # Check whether --enable-static was given. +if test "${enable_static+set}" = set; then : + enableval=$enable_static; p=${PACKAGE-default} + case $enableval in + yes) enable_static=yes ;; + no) enable_static=no ;; + *) + enable_static=no + # Look at the argument we got. We use all the common list separators. + lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," + for pkg in $enableval; do + IFS="$lt_save_ifs" + if test "X$pkg" = "X$p"; then + enable_static=yes + fi + done + IFS="$lt_save_ifs" + ;; + esac +else + enable_static=yes +fi + + + + + + + + + + +# Check whether --with-pic was given. +if test "${with_pic+set}" = set; then : + withval=$with_pic; pic_mode="$withval" +else + pic_mode=default +fi + + +test -z "$pic_mode" && pic_mode=default + + + + + + + + # Check whether --enable-fast-install was given. +if test "${enable_fast_install+set}" = set; then : + enableval=$enable_fast_install; p=${PACKAGE-default} + case $enableval in + yes) enable_fast_install=yes ;; + no) enable_fast_install=no ;; + *) + enable_fast_install=no + # Look at the argument we got. We use all the common list separators. + lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," + for pkg in $enableval; do + IFS="$lt_save_ifs" + if test "X$pkg" = "X$p"; then + enable_fast_install=yes + fi + done + IFS="$lt_save_ifs" + ;; + esac +else + enable_fast_install=yes +fi + + + + + + + + + + + +# This can be used to rebuild libtool when needed +LIBTOOL_DEPS="$ltmain" + +# Always use our own libtool. +LIBTOOL='$(SHELL) $(top_builddir)/libtool' + + + + + + + + + + + + + + + + + + + + + + + + + +test -z "$LN_S" && LN_S="ln -s" + + + + + + + + + + + + + + +if test -n "${ZSH_VERSION+set}" ; then + setopt NO_GLOB_SUBST +fi + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for objdir" >&5 +$as_echo_n "checking for objdir... " >&6; } +if test "${lt_cv_objdir+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + rm -f .libs 2>/dev/null +mkdir .libs 2>/dev/null +if test -d .libs; then + lt_cv_objdir=.libs +else + # MS-DOS does not allow filenames that begin with a dot. + lt_cv_objdir=_libs +fi +rmdir .libs 2>/dev/null +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_objdir" >&5 +$as_echo "$lt_cv_objdir" >&6; } +objdir=$lt_cv_objdir + + + + + +cat >>confdefs.h <<_ACEOF +#define LT_OBJDIR "$lt_cv_objdir/" +_ACEOF + + + + + + + + + + + + + + + + + +case $host_os in +aix3*) + # AIX sometimes has problems with the GCC collect2 program. For some + # reason, if we set the COLLECT_NAMES environment variable, the problems + # vanish in a puff of smoke. + if test "X${COLLECT_NAMES+set}" != Xset; then + COLLECT_NAMES= + export COLLECT_NAMES + fi + ;; +esac + +# Sed substitution that helps us do robust quoting. It backslashifies +# metacharacters that are still active within double-quoted strings. +sed_quote_subst='s/\(["`$\\]\)/\\\1/g' + +# Same as above, but do not quote variable references. +double_quote_subst='s/\(["`\\]\)/\\\1/g' + +# Sed substitution to delay expansion of an escaped shell variable in a +# double_quote_subst'ed string. +delay_variable_subst='s/\\\\\\\\\\\$/\\\\\\$/g' + +# Sed substitution to delay expansion of an escaped single quote. +delay_single_quote_subst='s/'\''/'\'\\\\\\\'\''/g' + +# Sed substitution to avoid accidental globbing in evaled expressions +no_glob_subst='s/\*/\\\*/g' + +# Global variables: +ofile=libtool +can_build_shared=yes + +# All known linkers require a `.a' archive for static linking (except MSVC, +# which needs '.lib'). +libext=a + +with_gnu_ld="$lt_cv_prog_gnu_ld" + +old_CC="$CC" +old_CFLAGS="$CFLAGS" + +# Set sane defaults for various variables +test -z "$CC" && CC=cc +test -z "$LTCC" && LTCC=$CC +test -z "$LTCFLAGS" && LTCFLAGS=$CFLAGS +test -z "$LD" && LD=ld +test -z "$ac_objext" && ac_objext=o + +for cc_temp in $compiler""; do + case $cc_temp in + compile | *[\\/]compile | ccache | *[\\/]ccache ) ;; + distcc | *[\\/]distcc | purify | *[\\/]purify ) ;; + \-*) ;; + *) break;; + esac +done +cc_basename=`$ECHO "X$cc_temp" | $Xsed -e 's%.*/%%' -e "s%^$host_alias-%%"` + + +# Only perform the check for file, if the check method requires it +test -z "$MAGIC_CMD" && MAGIC_CMD=file +case $deplibs_check_method in +file_magic*) + if test "$file_magic_cmd" = '$MAGIC_CMD'; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ${ac_tool_prefix}file" >&5 +$as_echo_n "checking for ${ac_tool_prefix}file... " >&6; } +if test "${lt_cv_path_MAGIC_CMD+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + case $MAGIC_CMD in +[\\/*] | ?:[\\/]*) + lt_cv_path_MAGIC_CMD="$MAGIC_CMD" # Let the user override the test with a path. + ;; +*) + lt_save_MAGIC_CMD="$MAGIC_CMD" + lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR + ac_dummy="/usr/bin$PATH_SEPARATOR$PATH" + for ac_dir in $ac_dummy; do + IFS="$lt_save_ifs" + test -z "$ac_dir" && ac_dir=. + if test -f $ac_dir/${ac_tool_prefix}file; then + lt_cv_path_MAGIC_CMD="$ac_dir/${ac_tool_prefix}file" + if test -n "$file_magic_test_file"; then + case $deplibs_check_method in + "file_magic "*) + file_magic_regex=`expr "$deplibs_check_method" : "file_magic \(.*\)"` + MAGIC_CMD="$lt_cv_path_MAGIC_CMD" + if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null | + $EGREP "$file_magic_regex" > /dev/null; then + : + else + cat <<_LT_EOF 1>&2 + +*** Warning: the command libtool uses to detect shared libraries, +*** $file_magic_cmd, produces output that libtool cannot recognize. +*** The result is that libtool may fail to recognize shared libraries +*** as such. This will affect the creation of libtool libraries that +*** depend on shared libraries, but programs linked with such libtool +*** libraries will work regardless of this problem. Nevertheless, you +*** may want to report the problem to your system manager and/or to +*** bug-libtool at gnu.org + +_LT_EOF + fi ;; + esac + fi + break + fi + done + IFS="$lt_save_ifs" + MAGIC_CMD="$lt_save_MAGIC_CMD" + ;; +esac +fi + +MAGIC_CMD="$lt_cv_path_MAGIC_CMD" +if test -n "$MAGIC_CMD"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MAGIC_CMD" >&5 +$as_echo "$MAGIC_CMD" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + + + +if test -z "$lt_cv_path_MAGIC_CMD"; then + if test -n "$ac_tool_prefix"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for file" >&5 +$as_echo_n "checking for file... " >&6; } +if test "${lt_cv_path_MAGIC_CMD+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + case $MAGIC_CMD in +[\\/*] | ?:[\\/]*) + lt_cv_path_MAGIC_CMD="$MAGIC_CMD" # Let the user override the test with a path. + ;; +*) + lt_save_MAGIC_CMD="$MAGIC_CMD" + lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR + ac_dummy="/usr/bin$PATH_SEPARATOR$PATH" + for ac_dir in $ac_dummy; do + IFS="$lt_save_ifs" + test -z "$ac_dir" && ac_dir=. + if test -f $ac_dir/file; then + lt_cv_path_MAGIC_CMD="$ac_dir/file" + if test -n "$file_magic_test_file"; then + case $deplibs_check_method in + "file_magic "*) + file_magic_regex=`expr "$deplibs_check_method" : "file_magic \(.*\)"` + MAGIC_CMD="$lt_cv_path_MAGIC_CMD" + if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null | + $EGREP "$file_magic_regex" > /dev/null; then + : + else + cat <<_LT_EOF 1>&2 + +*** Warning: the command libtool uses to detect shared libraries, +*** $file_magic_cmd, produces output that libtool cannot recognize. +*** The result is that libtool may fail to recognize shared libraries +*** as such. This will affect the creation of libtool libraries that +*** depend on shared libraries, but programs linked with such libtool +*** libraries will work regardless of this problem. Nevertheless, you +*** may want to report the problem to your system manager and/or to +*** bug-libtool at gnu.org + +_LT_EOF + fi ;; + esac + fi + break + fi + done + IFS="$lt_save_ifs" + MAGIC_CMD="$lt_save_MAGIC_CMD" + ;; +esac +fi + +MAGIC_CMD="$lt_cv_path_MAGIC_CMD" +if test -n "$MAGIC_CMD"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MAGIC_CMD" >&5 +$as_echo "$MAGIC_CMD" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + else + MAGIC_CMD=: + fi +fi + + fi + ;; +esac + +# Use C for the default configuration in the libtool script + +lt_save_CC="$CC" +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + + +# Source file extension for C test sources. +ac_ext=c + +# Object file extension for compiled C test sources. +objext=o +objext=$objext + +# Code to be used in simple compile tests +lt_simple_compile_test_code="int some_variable = 0;" + +# Code to be used in simple link tests +lt_simple_link_test_code='int main(){return(0);}' + + + + + + + +# If no C compiler was specified, use CC. +LTCC=${LTCC-"$CC"} + +# If no C compiler flags were specified, use CFLAGS. +LTCFLAGS=${LTCFLAGS-"$CFLAGS"} + +# Allow CC to be a program name with arguments. +compiler=$CC + +# Save the default compiler, since it gets overwritten when the other +# tags are being tested, and _LT_TAGVAR(compiler, []) is a NOP. +compiler_DEFAULT=$CC + +# save warnings/boilerplate of simple test code +ac_outfile=conftest.$ac_objext +echo "$lt_simple_compile_test_code" >conftest.$ac_ext +eval "$ac_compile" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err +_lt_compiler_boilerplate=`cat conftest.err` +$RM conftest* + +ac_outfile=conftest.$ac_objext +echo "$lt_simple_link_test_code" >conftest.$ac_ext +eval "$ac_link" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err +_lt_linker_boilerplate=`cat conftest.err` +$RM -r conftest* + + +## CAVEAT EMPTOR: +## There is no encapsulation within the following macros, do not change +## the running order or otherwise move them around unless you know exactly +## what you are doing... +if test -n "$compiler"; then + +lt_prog_compiler_no_builtin_flag= + +if test "$GCC" = yes; then + lt_prog_compiler_no_builtin_flag=' -fno-builtin' + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -fno-rtti -fno-exceptions" >&5 +$as_echo_n "checking if $compiler supports -fno-rtti -fno-exceptions... " >&6; } +if test "${lt_cv_prog_compiler_rtti_exceptions+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_prog_compiler_rtti_exceptions=no + ac_outfile=conftest.$ac_objext + echo "$lt_simple_compile_test_code" > conftest.$ac_ext + lt_compiler_flag="-fno-rtti -fno-exceptions" + # Insert the option either (1) after the last *FLAGS variable, or + # (2) before a word containing "conftest.", or (3) at the end. + # Note that $ac_compile itself does not contain backslashes and begins + # with a dollar sign (not a hyphen), so the echo should work correctly. + # The option is referenced via a variable to avoid confusing sed. + lt_compile=`echo "$ac_compile" | $SED \ + -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ + -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ + -e 's:$: $lt_compiler_flag:'` + (eval echo "\"\$as_me:7787: $lt_compile\"" >&5) + (eval "$lt_compile" 2>conftest.err) + ac_status=$? + cat conftest.err >&5 + echo "$as_me:7791: \$? = $ac_status" >&5 + if (exit $ac_status) && test -s "$ac_outfile"; then + # The compiler can only warn and ignore the option if not recognized + # So say no if there are warnings other than the usual output. + $ECHO "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' >conftest.exp + $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 + if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then + lt_cv_prog_compiler_rtti_exceptions=yes + fi + fi + $RM conftest* + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_rtti_exceptions" >&5 +$as_echo "$lt_cv_prog_compiler_rtti_exceptions" >&6; } + +if test x"$lt_cv_prog_compiler_rtti_exceptions" = xyes; then + lt_prog_compiler_no_builtin_flag="$lt_prog_compiler_no_builtin_flag -fno-rtti -fno-exceptions" +else + : +fi + +fi + + + + + + + lt_prog_compiler_wl= +lt_prog_compiler_pic= +lt_prog_compiler_static= + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $compiler option to produce PIC" >&5 +$as_echo_n "checking for $compiler option to produce PIC... " >&6; } + + if test "$GCC" = yes; then + lt_prog_compiler_wl='-Wl,' + lt_prog_compiler_static='-static' + + case $host_os in + aix*) + # All AIX code is PIC. + if test "$host_cpu" = ia64; then + # AIX 5 now supports IA64 processor + lt_prog_compiler_static='-Bstatic' + fi + ;; + + amigaos*) + case $host_cpu in + powerpc) + # see comment about AmigaOS4 .so support + lt_prog_compiler_pic='-fPIC' + ;; + m68k) + # FIXME: we need at least 68020 code to build shared libraries, but + # adding the `-m68020' flag to GCC prevents building anything better, + # like `-m68040'. + lt_prog_compiler_pic='-m68020 -resident32 -malways-restore-a4' + ;; + esac + ;; + + beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) + # PIC is the default for these OSes. + ;; + + mingw* | cygwin* | pw32* | os2* | cegcc*) + # This hack is so that the source file can tell whether it is being + # built for inclusion in a dll (and should export symbols for example). + # Although the cygwin gcc ignores -fPIC, still need this for old-style + # (--disable-auto-import) libraries + lt_prog_compiler_pic='-DDLL_EXPORT' + ;; + + darwin* | rhapsody*) + # PIC is the default on this platform + # Common symbols not allowed in MH_DYLIB files + lt_prog_compiler_pic='-fno-common' + ;; + + hpux*) + # PIC is the default for 64-bit PA HP-UX, but not for 32-bit + # PA HP-UX. On IA64 HP-UX, PIC is the default but the pic flag + # sets the default TLS model and affects inlining. + case $host_cpu in + hppa*64*) + # +Z the default + ;; + *) + lt_prog_compiler_pic='-fPIC' + ;; + esac + ;; + + interix[3-9]*) + # Interix 3.x gcc -fpic/-fPIC options generate broken code. + # Instead, we relocate shared libraries at runtime. + ;; + + msdosdjgpp*) + # Just because we use GCC doesn't mean we suddenly get shared libraries + # on systems that don't support them. + lt_prog_compiler_can_build_shared=no + enable_shared=no + ;; + + *nto* | *qnx*) + # QNX uses GNU C++, but need to define -shared option too, otherwise + # it will coredump. + lt_prog_compiler_pic='-fPIC -shared' + ;; + + sysv4*MP*) + if test -d /usr/nec; then + lt_prog_compiler_pic=-Kconform_pic + fi + ;; + + *) + lt_prog_compiler_pic='-fPIC' + ;; + esac + else + # PORTME Check for flag to pass linker flags through the system compiler. + case $host_os in + aix*) + lt_prog_compiler_wl='-Wl,' + if test "$host_cpu" = ia64; then + # AIX 5 now supports IA64 processor + lt_prog_compiler_static='-Bstatic' + else + lt_prog_compiler_static='-bnso -bI:/lib/syscalls.exp' + fi + ;; + + mingw* | cygwin* | pw32* | os2* | cegcc*) + # This hack is so that the source file can tell whether it is being + # built for inclusion in a dll (and should export symbols for example). + lt_prog_compiler_pic='-DDLL_EXPORT' + ;; + + hpux9* | hpux10* | hpux11*) + lt_prog_compiler_wl='-Wl,' + # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but + # not for PA HP-UX. + case $host_cpu in + hppa*64*|ia64*) + # +Z the default + ;; + *) + lt_prog_compiler_pic='+Z' + ;; + esac + # Is there a better lt_prog_compiler_static that works with the bundled CC? + lt_prog_compiler_static='${wl}-a ${wl}archive' + ;; + + irix5* | irix6* | nonstopux*) + lt_prog_compiler_wl='-Wl,' + # PIC (with -KPIC) is the default. + lt_prog_compiler_static='-non_shared' + ;; + + linux* | k*bsd*-gnu) + case $cc_basename in + # old Intel for x86_64 which still supported -KPIC. + ecc*) + lt_prog_compiler_wl='-Wl,' + lt_prog_compiler_pic='-KPIC' + lt_prog_compiler_static='-static' + ;; + # icc used to be incompatible with GCC. + # ICC 10 doesn't accept -KPIC any more. + icc* | ifort*) + lt_prog_compiler_wl='-Wl,' + lt_prog_compiler_pic='-fPIC' + lt_prog_compiler_static='-static' + ;; + # Lahey Fortran 8.1. + lf95*) + lt_prog_compiler_wl='-Wl,' + lt_prog_compiler_pic='--shared' + lt_prog_compiler_static='--static' + ;; + pgcc* | pgf77* | pgf90* | pgf95*) + # Portland Group compilers (*not* the Pentium gcc compiler, + # which looks to be a dead project) + lt_prog_compiler_wl='-Wl,' + lt_prog_compiler_pic='-fpic' + lt_prog_compiler_static='-Bstatic' + ;; + ccc*) + lt_prog_compiler_wl='-Wl,' + # All Alpha code is PIC. + lt_prog_compiler_static='-non_shared' + ;; + xl*) + # IBM XL C 8.0/Fortran 10.1 on PPC + lt_prog_compiler_wl='-Wl,' + lt_prog_compiler_pic='-qpic' + lt_prog_compiler_static='-qstaticlink' + ;; + *) + case `$CC -V 2>&1 | sed 5q` in + *Sun\ C*) + # Sun C 5.9 + lt_prog_compiler_pic='-KPIC' + lt_prog_compiler_static='-Bstatic' + lt_prog_compiler_wl='-Wl,' + ;; + *Sun\ F*) + # Sun Fortran 8.3 passes all unrecognized flags to the linker + lt_prog_compiler_pic='-KPIC' + lt_prog_compiler_static='-Bstatic' + lt_prog_compiler_wl='' + ;; + esac + ;; + esac + ;; + + newsos6) + lt_prog_compiler_pic='-KPIC' + lt_prog_compiler_static='-Bstatic' + ;; + + *nto* | *qnx*) + # QNX uses GNU C++, but need to define -shared option too, otherwise + # it will coredump. + lt_prog_compiler_pic='-fPIC -shared' + ;; + + osf3* | osf4* | osf5*) + lt_prog_compiler_wl='-Wl,' + # All OSF/1 code is PIC. + lt_prog_compiler_static='-non_shared' + ;; + + rdos*) + lt_prog_compiler_static='-non_shared' + ;; + + solaris*) + lt_prog_compiler_pic='-KPIC' + lt_prog_compiler_static='-Bstatic' + case $cc_basename in + f77* | f90* | f95*) + lt_prog_compiler_wl='-Qoption ld ';; + *) + lt_prog_compiler_wl='-Wl,';; + esac + ;; + + sunos4*) + lt_prog_compiler_wl='-Qoption ld ' + lt_prog_compiler_pic='-PIC' + lt_prog_compiler_static='-Bstatic' + ;; + + sysv4 | sysv4.2uw2* | sysv4.3*) + lt_prog_compiler_wl='-Wl,' + lt_prog_compiler_pic='-KPIC' + lt_prog_compiler_static='-Bstatic' + ;; + + sysv4*MP*) + if test -d /usr/nec ;then + lt_prog_compiler_pic='-Kconform_pic' + lt_prog_compiler_static='-Bstatic' + fi + ;; + + sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*) + lt_prog_compiler_wl='-Wl,' + lt_prog_compiler_pic='-KPIC' + lt_prog_compiler_static='-Bstatic' + ;; + + unicos*) + lt_prog_compiler_wl='-Wl,' + lt_prog_compiler_can_build_shared=no + ;; + + uts4*) + lt_prog_compiler_pic='-pic' + lt_prog_compiler_static='-Bstatic' + ;; + + *) + lt_prog_compiler_can_build_shared=no + ;; + esac + fi + +case $host_os in + # For platforms which do not support PIC, -DPIC is meaningless: + *djgpp*) + lt_prog_compiler_pic= + ;; + *) + lt_prog_compiler_pic="$lt_prog_compiler_pic -DPIC" + ;; +esac +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_prog_compiler_pic" >&5 +$as_echo "$lt_prog_compiler_pic" >&6; } + + + + + + +# +# Check to make sure the PIC flag actually works. +# +if test -n "$lt_prog_compiler_pic"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler PIC flag $lt_prog_compiler_pic works" >&5 +$as_echo_n "checking if $compiler PIC flag $lt_prog_compiler_pic works... " >&6; } +if test "${lt_cv_prog_compiler_pic_works+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_prog_compiler_pic_works=no + ac_outfile=conftest.$ac_objext + echo "$lt_simple_compile_test_code" > conftest.$ac_ext + lt_compiler_flag="$lt_prog_compiler_pic -DPIC" + # Insert the option either (1) after the last *FLAGS variable, or + # (2) before a word containing "conftest.", or (3) at the end. + # Note that $ac_compile itself does not contain backslashes and begins + # with a dollar sign (not a hyphen), so the echo should work correctly. + # The option is referenced via a variable to avoid confusing sed. + lt_compile=`echo "$ac_compile" | $SED \ + -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ + -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ + -e 's:$: $lt_compiler_flag:'` + (eval echo "\"\$as_me:8126: $lt_compile\"" >&5) + (eval "$lt_compile" 2>conftest.err) + ac_status=$? + cat conftest.err >&5 + echo "$as_me:8130: \$? = $ac_status" >&5 + if (exit $ac_status) && test -s "$ac_outfile"; then + # The compiler can only warn and ignore the option if not recognized + # So say no if there are warnings other than the usual output. + $ECHO "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' >conftest.exp + $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 + if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then + lt_cv_prog_compiler_pic_works=yes + fi + fi + $RM conftest* + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_pic_works" >&5 +$as_echo "$lt_cv_prog_compiler_pic_works" >&6; } + +if test x"$lt_cv_prog_compiler_pic_works" = xyes; then + case $lt_prog_compiler_pic in + "" | " "*) ;; + *) lt_prog_compiler_pic=" $lt_prog_compiler_pic" ;; + esac +else + lt_prog_compiler_pic= + lt_prog_compiler_can_build_shared=no +fi + +fi + + + + + + +# +# Check to make sure the static flag actually works. +# +wl=$lt_prog_compiler_wl eval lt_tmp_static_flag=\"$lt_prog_compiler_static\" +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler static flag $lt_tmp_static_flag works" >&5 +$as_echo_n "checking if $compiler static flag $lt_tmp_static_flag works... " >&6; } +if test "${lt_cv_prog_compiler_static_works+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_prog_compiler_static_works=no + save_LDFLAGS="$LDFLAGS" + LDFLAGS="$LDFLAGS $lt_tmp_static_flag" + echo "$lt_simple_link_test_code" > conftest.$ac_ext + if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then + # The linker can only warn and ignore the option if not recognized + # So say no if there are warnings + if test -s conftest.err; then + # Append any errors to the config.log. + cat conftest.err 1>&5 + $ECHO "X$_lt_linker_boilerplate" | $Xsed -e '/^$/d' > conftest.exp + $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 + if diff conftest.exp conftest.er2 >/dev/null; then + lt_cv_prog_compiler_static_works=yes + fi + else + lt_cv_prog_compiler_static_works=yes + fi + fi + $RM -r conftest* + LDFLAGS="$save_LDFLAGS" + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_static_works" >&5 +$as_echo "$lt_cv_prog_compiler_static_works" >&6; } + +if test x"$lt_cv_prog_compiler_static_works" = xyes; then + : +else + lt_prog_compiler_static= +fi + + + + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5 +$as_echo_n "checking if $compiler supports -c -o file.$ac_objext... " >&6; } +if test "${lt_cv_prog_compiler_c_o+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_prog_compiler_c_o=no + $RM -r conftest 2>/dev/null + mkdir conftest + cd conftest + mkdir out + echo "$lt_simple_compile_test_code" > conftest.$ac_ext + + lt_compiler_flag="-o out/conftest2.$ac_objext" + # Insert the option either (1) after the last *FLAGS variable, or + # (2) before a word containing "conftest.", or (3) at the end. + # Note that $ac_compile itself does not contain backslashes and begins + # with a dollar sign (not a hyphen), so the echo should work correctly. + lt_compile=`echo "$ac_compile" | $SED \ + -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ + -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ + -e 's:$: $lt_compiler_flag:'` + (eval echo "\"\$as_me:8231: $lt_compile\"" >&5) + (eval "$lt_compile" 2>out/conftest.err) + ac_status=$? + cat out/conftest.err >&5 + echo "$as_me:8235: \$? = $ac_status" >&5 + if (exit $ac_status) && test -s out/conftest2.$ac_objext + then + # The compiler can only warn and ignore the option if not recognized + # So say no if there are warnings + $ECHO "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' > out/conftest.exp + $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2 + if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then + lt_cv_prog_compiler_c_o=yes + fi + fi + chmod u+w . 2>&5 + $RM conftest* + # SGI C++ compiler will create directory out/ii_files/ for + # template instantiation + test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files + $RM out/* && rmdir out + cd .. + $RM -r conftest + $RM conftest* + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_c_o" >&5 +$as_echo "$lt_cv_prog_compiler_c_o" >&6; } + + + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5 +$as_echo_n "checking if $compiler supports -c -o file.$ac_objext... " >&6; } +if test "${lt_cv_prog_compiler_c_o+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_prog_compiler_c_o=no + $RM -r conftest 2>/dev/null + mkdir conftest + cd conftest + mkdir out + echo "$lt_simple_compile_test_code" > conftest.$ac_ext + + lt_compiler_flag="-o out/conftest2.$ac_objext" + # Insert the option either (1) after the last *FLAGS variable, or + # (2) before a word containing "conftest.", or (3) at the end. + # Note that $ac_compile itself does not contain backslashes and begins + # with a dollar sign (not a hyphen), so the echo should work correctly. + lt_compile=`echo "$ac_compile" | $SED \ + -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ + -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ + -e 's:$: $lt_compiler_flag:'` + (eval echo "\"\$as_me:8286: $lt_compile\"" >&5) + (eval "$lt_compile" 2>out/conftest.err) + ac_status=$? + cat out/conftest.err >&5 + echo "$as_me:8290: \$? = $ac_status" >&5 + if (exit $ac_status) && test -s out/conftest2.$ac_objext + then + # The compiler can only warn and ignore the option if not recognized + # So say no if there are warnings + $ECHO "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' > out/conftest.exp + $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2 + if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then + lt_cv_prog_compiler_c_o=yes + fi + fi + chmod u+w . 2>&5 + $RM conftest* + # SGI C++ compiler will create directory out/ii_files/ for + # template instantiation + test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files + $RM out/* && rmdir out + cd .. + $RM -r conftest + $RM conftest* + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_c_o" >&5 +$as_echo "$lt_cv_prog_compiler_c_o" >&6; } + + + + +hard_links="nottested" +if test "$lt_cv_prog_compiler_c_o" = no && test "$need_locks" != no; then + # do not overwrite the value of need_locks provided by the user + { $as_echo "$as_me:${as_lineno-$LINENO}: checking if we can lock with hard links" >&5 +$as_echo_n "checking if we can lock with hard links... " >&6; } + hard_links=yes + $RM conftest* + ln conftest.a conftest.b 2>/dev/null && hard_links=no + touch conftest.a + ln conftest.a conftest.b 2>&5 || hard_links=no + ln conftest.a conftest.b 2>/dev/null && hard_links=no + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $hard_links" >&5 +$as_echo "$hard_links" >&6; } + if test "$hard_links" = no; then + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&5 +$as_echo "$as_me: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&2;} + need_locks=warn + fi +else + need_locks=no +fi + + + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the $compiler linker ($LD) supports shared libraries" >&5 +$as_echo_n "checking whether the $compiler linker ($LD) supports shared libraries... " >&6; } + + runpath_var= + allow_undefined_flag= + always_export_symbols=no + archive_cmds= + archive_expsym_cmds= + compiler_needs_object=no + enable_shared_with_static_runtimes=no + export_dynamic_flag_spec= + export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' + hardcode_automatic=no + hardcode_direct=no + hardcode_direct_absolute=no + hardcode_libdir_flag_spec= + hardcode_libdir_flag_spec_ld= + hardcode_libdir_separator= + hardcode_minus_L=no + hardcode_shlibpath_var=unsupported + inherit_rpath=no + link_all_deplibs=unknown + module_cmds= + module_expsym_cmds= + old_archive_from_new_cmds= + old_archive_from_expsyms_cmds= + thread_safe_flag_spec= + whole_archive_flag_spec= + # include_expsyms should be a list of space-separated symbols to be *always* + # included in the symbol list + include_expsyms= + # exclude_expsyms can be an extended regexp of symbols to exclude + # it will be wrapped by ` (' and `)$', so one must not match beginning or + # end of line. Example: `a|bc|.*d.*' will exclude the symbols `a' and `bc', + # as well as any symbol that contains `d'. + exclude_expsyms='_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*' + # Although _GLOBAL_OFFSET_TABLE_ is a valid symbol C name, most a.out + # platforms (ab)use it in PIC code, but their linkers get confused if + # the symbol is explicitly referenced. Since portable code cannot + # rely on this symbol name, it's probably fine to never include it in + # preloaded symbol tables. + # Exclude shared library initialization/finalization symbols. + extract_expsyms_cmds= + + case $host_os in + cygwin* | mingw* | pw32* | cegcc*) + # FIXME: the MSVC++ port hasn't been tested in a loooong time + # When not using gcc, we currently assume that we are using + # Microsoft Visual C++. + if test "$GCC" != yes; then + with_gnu_ld=no + fi + ;; + interix*) + # we just hope/assume this is gcc and not c89 (= MSVC++) + with_gnu_ld=yes + ;; + openbsd*) + with_gnu_ld=no + ;; + esac + + ld_shlibs=yes + if test "$with_gnu_ld" = yes; then + # If archive_cmds runs LD, not CC, wlarc should be empty + wlarc='${wl}' + + # Set some defaults for GNU ld with shared library support. These + # are reset later if shared libraries are not supported. Putting them + # here allows them to be overridden if necessary. + runpath_var=LD_RUN_PATH + hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' + export_dynamic_flag_spec='${wl}--export-dynamic' + # ancient GNU ld didn't support --whole-archive et. al. + if $LD --help 2>&1 | $GREP 'no-whole-archive' > /dev/null; then + whole_archive_flag_spec="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' + else + whole_archive_flag_spec= + fi + supports_anon_versioning=no + case `$LD -v 2>&1` in + *\ [01].* | *\ 2.[0-9].* | *\ 2.10.*) ;; # catch versions < 2.11 + *\ 2.11.93.0.2\ *) supports_anon_versioning=yes ;; # RH7.3 ... + *\ 2.11.92.0.12\ *) supports_anon_versioning=yes ;; # Mandrake 8.2 ... + *\ 2.11.*) ;; # other 2.11 versions + *) supports_anon_versioning=yes ;; + esac + + # See if GNU ld supports shared libraries. + case $host_os in + aix[3-9]*) + # On AIX/PPC, the GNU linker is very broken + if test "$host_cpu" != ia64; then + ld_shlibs=no + cat <<_LT_EOF 1>&2 + +*** Warning: the GNU linker, at least up to release 2.9.1, is reported +*** to be unable to reliably create shared libraries on AIX. +*** Therefore, libtool is disabling shared libraries support. If you +*** really care for shared libraries, you may want to modify your PATH +*** so that a non-GNU linker is found, and then restart. + +_LT_EOF + fi + ;; + + amigaos*) + case $host_cpu in + powerpc) + # see comment about AmigaOS4 .so support + archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + archive_expsym_cmds='' + ;; + m68k) + archive_cmds='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' + hardcode_libdir_flag_spec='-L$libdir' + hardcode_minus_L=yes + ;; + esac + ;; + + beos*) + if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then + allow_undefined_flag=unsupported + # Joseph Beckenbach says some releases of gcc + # support --undefined. This deserves some investigation. FIXME + archive_cmds='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + else + ld_shlibs=no + fi + ;; + + cygwin* | mingw* | pw32* | cegcc*) + # _LT_TAGVAR(hardcode_libdir_flag_spec, ) is actually meaningless, + # as there is no search path for DLLs. + hardcode_libdir_flag_spec='-L$libdir' + allow_undefined_flag=unsupported + always_export_symbols=no + enable_shared_with_static_runtimes=yes + export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS][ ]/s/.*[ ]\([^ ]*\)/\1 DATA/'\'' | $SED -e '\''/^[AITW][ ]/s/.*[ ]//'\'' | sort | uniq > $export_symbols' + + if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then + archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' + # If the export-symbols file already is a .def file (1st line + # is EXPORTS), use it as is; otherwise, prepend... + archive_expsym_cmds='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then + cp $export_symbols $output_objdir/$soname.def; + else + echo EXPORTS > $output_objdir/$soname.def; + cat $export_symbols >> $output_objdir/$soname.def; + fi~ + $CC -shared $output_objdir/$soname.def $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' + else + ld_shlibs=no + fi + ;; + + interix[3-9]*) + hardcode_direct=no + hardcode_shlibpath_var=no + hardcode_libdir_flag_spec='${wl}-rpath,$libdir' + export_dynamic_flag_spec='${wl}-E' + # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc. + # Instead, shared libraries are loaded at an image base (0x10000000 by + # default) and relocated if they conflict, which is a slow very memory + # consuming and fragmenting process. To avoid this, we pick a random, + # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link + # time. Moving up from 0x10000000 also allows more sbrk(2) space. + archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' + archive_expsym_cmds='sed "s,^,_," $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--retain-symbols-file,$output_objdir/$soname.expsym ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' + ;; + + gnu* | linux* | tpf* | k*bsd*-gnu) + tmp_diet=no + if test "$host_os" = linux-dietlibc; then + case $cc_basename in + diet\ *) tmp_diet=yes;; # linux-dietlibc with static linking (!diet-dyn) + esac + fi + if $LD --help 2>&1 | $EGREP ': supported targets:.* elf' > /dev/null \ + && test "$tmp_diet" = no + then + tmp_addflag= + tmp_sharedflag='-shared' + case $cc_basename,$host_cpu in + pgcc*) # Portland Group C compiler + whole_archive_flag_spec='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $ECHO \"$new_convenience\"` ${wl}--no-whole-archive' + tmp_addflag=' $pic_flag' + ;; + pgf77* | pgf90* | pgf95*) # Portland Group f77 and f90 compilers + whole_archive_flag_spec='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $ECHO \"$new_convenience\"` ${wl}--no-whole-archive' + tmp_addflag=' $pic_flag -Mnomain' ;; + ecc*,ia64* | icc*,ia64*) # Intel C compiler on ia64 + tmp_addflag=' -i_dynamic' ;; + efc*,ia64* | ifort*,ia64*) # Intel Fortran compiler on ia64 + tmp_addflag=' -i_dynamic -nofor_main' ;; + ifc* | ifort*) # Intel Fortran compiler + tmp_addflag=' -nofor_main' ;; + lf95*) # Lahey Fortran 8.1 + whole_archive_flag_spec= + tmp_sharedflag='--shared' ;; + xl[cC]*) # IBM XL C 8.0 on PPC (deal with xlf below) + tmp_sharedflag='-qmkshrobj' + tmp_addflag= ;; + esac + case `$CC -V 2>&1 | sed 5q` in + *Sun\ C*) # Sun C 5.9 + whole_archive_flag_spec='${wl}--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; $ECHO \"$new_convenience\"` ${wl}--no-whole-archive' + compiler_needs_object=yes + tmp_sharedflag='-G' ;; + *Sun\ F*) # Sun Fortran 8.3 + tmp_sharedflag='-G' ;; + esac + archive_cmds='$CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + + if test "x$supports_anon_versioning" = xyes; then + archive_expsym_cmds='echo "{ global:" > $output_objdir/$libname.ver~ + cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ + echo "local: *; };" >> $output_objdir/$libname.ver~ + $CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib' + fi + + case $cc_basename in + xlf*) + # IBM XL Fortran 10.1 on PPC cannot create shared libs itself + whole_archive_flag_spec='--whole-archive$convenience --no-whole-archive' + hardcode_libdir_flag_spec= + hardcode_libdir_flag_spec_ld='-rpath $libdir' + archive_cmds='$LD -shared $libobjs $deplibs $compiler_flags -soname $soname -o $lib' + if test "x$supports_anon_versioning" = xyes; then + archive_expsym_cmds='echo "{ global:" > $output_objdir/$libname.ver~ + cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ + echo "local: *; };" >> $output_objdir/$libname.ver~ + $LD -shared $libobjs $deplibs $compiler_flags -soname $soname -version-script $output_objdir/$libname.ver -o $lib' + fi + ;; + esac + else + ld_shlibs=no + fi + ;; + + netbsd*) + if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then + archive_cmds='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib' + wlarc= + else + archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' + fi + ;; + + solaris*) + if $LD -v 2>&1 | $GREP 'BFD 2\.8' > /dev/null; then + ld_shlibs=no + cat <<_LT_EOF 1>&2 + +*** Warning: The releases 2.8.* of the GNU linker cannot reliably +*** create shared libraries on Solaris systems. Therefore, libtool +*** is disabling shared libraries support. We urge you to upgrade GNU +*** binutils to release 2.9.1 or newer. Another option is to modify +*** your PATH or compiler configuration so that the native linker is +*** used, and then restart. + +_LT_EOF + elif $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then + archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' + else + ld_shlibs=no + fi + ;; + + sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX*) + case `$LD -v 2>&1` in + *\ [01].* | *\ 2.[0-9].* | *\ 2.1[0-5].*) + ld_shlibs=no + cat <<_LT_EOF 1>&2 + +*** Warning: Releases of the GNU linker prior to 2.16.91.0.3 can not +*** reliably create shared libraries on SCO systems. Therefore, libtool +*** is disabling shared libraries support. We urge you to upgrade GNU +*** binutils to release 2.16.91.0.3 or newer. Another option is to modify +*** your PATH or compiler configuration so that the native linker is +*** used, and then restart. + +_LT_EOF + ;; + *) + # For security reasons, it is highly recommended that you always + # use absolute paths for naming shared libraries, and exclude the + # DT_RUNPATH tag from executables and libraries. But doing so + # requires that you compile everything twice, which is a pain. + if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then + hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' + archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' + else + ld_shlibs=no + fi + ;; + esac + ;; + + sunos4*) + archive_cmds='$LD -assert pure-text -Bshareable -o $lib $libobjs $deplibs $linker_flags' + wlarc= + hardcode_direct=yes + hardcode_shlibpath_var=no + ;; + + *) + if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then + archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' + else + ld_shlibs=no + fi + ;; + esac + + if test "$ld_shlibs" = no; then + runpath_var= + hardcode_libdir_flag_spec= + export_dynamic_flag_spec= + whole_archive_flag_spec= + fi + else + # PORTME fill in a description of your system's linker (not GNU ld) + case $host_os in + aix3*) + allow_undefined_flag=unsupported + always_export_symbols=yes + archive_expsym_cmds='$LD -o $output_objdir/$soname $libobjs $deplibs $linker_flags -bE:$export_symbols -T512 -H512 -bM:SRE~$AR $AR_FLAGS $lib $output_objdir/$soname' + # Note: this linker hardcodes the directories in LIBPATH if there + # are no directories specified by -L. + hardcode_minus_L=yes + if test "$GCC" = yes && test -z "$lt_prog_compiler_static"; then + # Neither direct hardcoding nor static linking is supported with a + # broken collect2. + hardcode_direct=unsupported + fi + ;; + + aix[4-9]*) + if test "$host_cpu" = ia64; then + # On IA64, the linker does run time linking by default, so we don't + # have to do anything special. + aix_use_runtimelinking=no + exp_sym_flag='-Bexport' + no_entry_flag="" + else + # If we're using GNU nm, then we don't want the "-C" option. + # -C means demangle to AIX nm, but means don't demangle with GNU nm + if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then + export_symbols_cmds='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && (substr(\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' + else + export_symbols_cmds='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && (substr(\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' + fi + aix_use_runtimelinking=no + + # Test if we are trying to use run time linking or normal + # AIX style linking. If -brtl is somewhere in LDFLAGS, we + # need to do runtime linking. + case $host_os in aix4.[23]|aix4.[23].*|aix[5-9]*) + for ld_flag in $LDFLAGS; do + if (test $ld_flag = "-brtl" || test $ld_flag = "-Wl,-brtl"); then + aix_use_runtimelinking=yes + break + fi + done + ;; + esac + + exp_sym_flag='-bexport' + no_entry_flag='-bnoentry' + fi + + # When large executables or shared objects are built, AIX ld can + # have problems creating the table of contents. If linking a library + # or program results in "error TOC overflow" add -mminimal-toc to + # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not + # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS. + + archive_cmds='' + hardcode_direct=yes + hardcode_direct_absolute=yes + hardcode_libdir_separator=':' + link_all_deplibs=yes + file_list_spec='${wl}-f,' + + if test "$GCC" = yes; then + case $host_os in aix4.[012]|aix4.[012].*) + # We only want to do this on AIX 4.2 and lower, the check + # below for broken collect2 doesn't work under 4.3+ + collect2name=`${CC} -print-prog-name=collect2` + if test -f "$collect2name" && + strings "$collect2name" | $GREP resolve_lib_name >/dev/null + then + # We have reworked collect2 + : + else + # We have old collect2 + hardcode_direct=unsupported + # It fails to find uninstalled libraries when the uninstalled + # path is not listed in the libpath. Setting hardcode_minus_L + # to unsupported forces relinking + hardcode_minus_L=yes + hardcode_libdir_flag_spec='-L$libdir' + hardcode_libdir_separator= + fi + ;; + esac + shared_flag='-shared' + if test "$aix_use_runtimelinking" = yes; then + shared_flag="$shared_flag "'${wl}-G' + fi + else + # not using gcc + if test "$host_cpu" = ia64; then + # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release + # chokes on -Wl,-G. The following line is correct: + shared_flag='-G' + else + if test "$aix_use_runtimelinking" = yes; then + shared_flag='${wl}-G' + else + shared_flag='${wl}-bM:SRE' + fi + fi + fi + + export_dynamic_flag_spec='${wl}-bexpall' + # It seems that -bexpall does not export symbols beginning with + # underscore (_), so it is better to generate a list of symbols to export. + always_export_symbols=yes + if test "$aix_use_runtimelinking" = yes; then + # Warning - without using the other runtime loading flags (-brtl), + # -berok will link without error, but may produce a broken library. + allow_undefined_flag='-berok' + # Determine the default libpath from the value encoded in an + # empty executable. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + +lt_aix_libpath_sed=' + /Import File Strings/,/^$/ { + /^0/ { + s/^0 *\(.*\)$/\1/ + p + } + }' +aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` +# Check for a 64-bit object if we didn't find anything. +if test -z "$aix_libpath"; then + aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` +fi +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi + + hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'"$aix_libpath" + archive_expsym_cmds='$CC -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then $ECHO "X${wl}${allow_undefined_flag}" | $Xsed; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag" + else + if test "$host_cpu" = ia64; then + hardcode_libdir_flag_spec='${wl}-R $libdir:/usr/lib:/lib' + allow_undefined_flag="-z nodefs" + archive_expsym_cmds="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$exp_sym_flag:\$export_symbols" + else + # Determine the default libpath from the value encoded in an + # empty executable. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + +lt_aix_libpath_sed=' + /Import File Strings/,/^$/ { + /^0/ { + s/^0 *\(.*\)$/\1/ + p + } + }' +aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` +# Check for a 64-bit object if we didn't find anything. +if test -z "$aix_libpath"; then + aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` +fi +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi + + hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'"$aix_libpath" + # Warning - without using the other run time loading flags, + # -berok will link without error, but may produce a broken library. + no_undefined_flag=' ${wl}-bernotok' + allow_undefined_flag=' ${wl}-berok' + # Exported symbols can be pulled into shared objects from archives + whole_archive_flag_spec='$convenience' + archive_cmds_need_lc=yes + # This is similar to how AIX traditionally builds its shared libraries. + archive_expsym_cmds="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs ${wl}-bnoentry $compiler_flags ${wl}-bE:$export_symbols${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname' + fi + fi + ;; + + amigaos*) + case $host_cpu in + powerpc) + # see comment about AmigaOS4 .so support + archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + archive_expsym_cmds='' + ;; + m68k) + archive_cmds='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' + hardcode_libdir_flag_spec='-L$libdir' + hardcode_minus_L=yes + ;; + esac + ;; + + bsdi[45]*) + export_dynamic_flag_spec=-rdynamic + ;; + + cygwin* | mingw* | pw32* | cegcc*) + # When not using gcc, we currently assume that we are using + # Microsoft Visual C++. + # hardcode_libdir_flag_spec is actually meaningless, as there is + # no search path for DLLs. + hardcode_libdir_flag_spec=' ' + allow_undefined_flag=unsupported + # Tell ltmain to make .lib files, not .a files. + libext=lib + # Tell ltmain to make .dll files, not .so files. + shrext_cmds=".dll" + # FIXME: Setting linknames here is a bad hack. + archive_cmds='$CC -o $lib $libobjs $compiler_flags `$ECHO "X$deplibs" | $Xsed -e '\''s/ -lc$//'\''` -link -dll~linknames=' + # The linker will automatically build a .lib file if we build a DLL. + old_archive_from_new_cmds='true' + # FIXME: Should let the user specify the lib program. + old_archive_cmds='lib -OUT:$oldlib$oldobjs$old_deplibs' + fix_srcfile_path='`cygpath -w "$srcfile"`' + enable_shared_with_static_runtimes=yes + ;; + + darwin* | rhapsody*) + + + archive_cmds_need_lc=no + hardcode_direct=no + hardcode_automatic=yes + hardcode_shlibpath_var=unsupported + whole_archive_flag_spec='' + link_all_deplibs=yes + allow_undefined_flag="$_lt_dar_allow_undefined" + case $cc_basename in + ifort*) _lt_dar_can_shared=yes ;; + *) _lt_dar_can_shared=$GCC ;; + esac + if test "$_lt_dar_can_shared" = "yes"; then + output_verbose_link_cmd=echo + archive_cmds="\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod${_lt_dsymutil}" + module_cmds="\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dsymutil}" + archive_expsym_cmds="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring ${_lt_dar_single_mod}${_lt_dar_export_syms}${_lt_dsymutil}" + module_expsym_cmds="sed -e 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dar_export_syms}${_lt_dsymutil}" + + else + ld_shlibs=no + fi + + ;; + + dgux*) + archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + hardcode_libdir_flag_spec='-L$libdir' + hardcode_shlibpath_var=no + ;; + + freebsd1*) + ld_shlibs=no + ;; + + # FreeBSD 2.2.[012] allows us to include c++rt0.o to get C++ constructor + # support. Future versions do this automatically, but an explicit c++rt0.o + # does not break anything, and helps significantly (at the cost of a little + # extra space). + freebsd2.2*) + archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags /usr/lib/c++rt0.o' + hardcode_libdir_flag_spec='-R$libdir' + hardcode_direct=yes + hardcode_shlibpath_var=no + ;; + + # Unfortunately, older versions of FreeBSD 2 do not have this feature. + freebsd2*) + archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' + hardcode_direct=yes + hardcode_minus_L=yes + hardcode_shlibpath_var=no + ;; + + # FreeBSD 3 and greater uses gcc -shared to do shared libraries. + freebsd* | dragonfly*) + archive_cmds='$CC -shared -o $lib $libobjs $deplibs $compiler_flags' + hardcode_libdir_flag_spec='-R$libdir' + hardcode_direct=yes + hardcode_shlibpath_var=no + ;; + + hpux9*) + if test "$GCC" = yes; then + archive_cmds='$RM $output_objdir/$soname~$CC -shared -fPIC ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' + else + archive_cmds='$RM $output_objdir/$soname~$LD -b +b $install_libdir -o $output_objdir/$soname $libobjs $deplibs $linker_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' + fi + hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir' + hardcode_libdir_separator=: + hardcode_direct=yes + + # hardcode_minus_L: Not really in the search PATH, + # but as the default location of the library. + hardcode_minus_L=yes + export_dynamic_flag_spec='${wl}-E' + ;; + + hpux10*) + if test "$GCC" = yes -a "$with_gnu_ld" = no; then + archive_cmds='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' + else + archive_cmds='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags' + fi + if test "$with_gnu_ld" = no; then + hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir' + hardcode_libdir_flag_spec_ld='+b $libdir' + hardcode_libdir_separator=: + hardcode_direct=yes + hardcode_direct_absolute=yes + export_dynamic_flag_spec='${wl}-E' + # hardcode_minus_L: Not really in the search PATH, + # but as the default location of the library. + hardcode_minus_L=yes + fi + ;; + + hpux11*) + if test "$GCC" = yes -a "$with_gnu_ld" = no; then + case $host_cpu in + hppa*64*) + archive_cmds='$CC -shared ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' + ;; + ia64*) + archive_cmds='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' + ;; + *) + archive_cmds='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' + ;; + esac + else + case $host_cpu in + hppa*64*) + archive_cmds='$CC -b ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' + ;; + ia64*) + archive_cmds='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' + ;; + *) + archive_cmds='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' + ;; + esac + fi + if test "$with_gnu_ld" = no; then + hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir' + hardcode_libdir_separator=: + + case $host_cpu in + hppa*64*|ia64*) + hardcode_direct=no + hardcode_shlibpath_var=no + ;; + *) + hardcode_direct=yes + hardcode_direct_absolute=yes + export_dynamic_flag_spec='${wl}-E' + + # hardcode_minus_L: Not really in the search PATH, + # but as the default location of the library. + hardcode_minus_L=yes + ;; + esac + fi + ;; + + irix5* | irix6* | nonstopux*) + if test "$GCC" = yes; then + archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' + # Try to use the -exported_symbol ld option, if it does not + # work, assume that -exports_file does not work either and + # implicitly export all symbols. + save_LDFLAGS="$LDFLAGS" + LDFLAGS="$LDFLAGS -shared ${wl}-exported_symbol ${wl}foo ${wl}-update_registry ${wl}/dev/null" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +int foo(void) {} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations ${wl}-exports_file ${wl}$export_symbols -o $lib' + +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + LDFLAGS="$save_LDFLAGS" + else + archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib' + archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -exports_file $export_symbols -o $lib' + fi + archive_cmds_need_lc='no' + hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' + hardcode_libdir_separator=: + inherit_rpath=yes + link_all_deplibs=yes + ;; + + netbsd*) + if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then + archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' # a.out + else + archive_cmds='$LD -shared -o $lib $libobjs $deplibs $linker_flags' # ELF + fi + hardcode_libdir_flag_spec='-R$libdir' + hardcode_direct=yes + hardcode_shlibpath_var=no + ;; + + newsos6) + archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + hardcode_direct=yes + hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' + hardcode_libdir_separator=: + hardcode_shlibpath_var=no + ;; + + *nto* | *qnx*) + ;; + + openbsd*) + if test -f /usr/libexec/ld.so; then + hardcode_direct=yes + hardcode_shlibpath_var=no + hardcode_direct_absolute=yes + if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then + archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' + archive_expsym_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-retain-symbols-file,$export_symbols' + hardcode_libdir_flag_spec='${wl}-rpath,$libdir' + export_dynamic_flag_spec='${wl}-E' + else + case $host_os in + openbsd[01].* | openbsd2.[0-7] | openbsd2.[0-7].*) + archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' + hardcode_libdir_flag_spec='-R$libdir' + ;; + *) + archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' + hardcode_libdir_flag_spec='${wl}-rpath,$libdir' + ;; + esac + fi + else + ld_shlibs=no + fi + ;; + + os2*) + hardcode_libdir_flag_spec='-L$libdir' + hardcode_minus_L=yes + allow_undefined_flag=unsupported + archive_cmds='$ECHO "LIBRARY $libname INITINSTANCE" > $output_objdir/$libname.def~$ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~$ECHO DATA >> $output_objdir/$libname.def~$ECHO " SINGLE NONSHARED" >> $output_objdir/$libname.def~$ECHO EXPORTS >> $output_objdir/$libname.def~emxexp $libobjs >> $output_objdir/$libname.def~$CC -Zdll -Zcrtdll -o $lib $libobjs $deplibs $compiler_flags $output_objdir/$libname.def' + old_archive_from_new_cmds='emximp -o $output_objdir/$libname.a $output_objdir/$libname.def' + ;; + + osf3*) + if test "$GCC" = yes; then + allow_undefined_flag=' ${wl}-expect_unresolved ${wl}\*' + archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' + else + allow_undefined_flag=' -expect_unresolved \*' + archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib' + fi + archive_cmds_need_lc='no' + hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' + hardcode_libdir_separator=: + ;; + + osf4* | osf5*) # as osf3* with the addition of -msym flag + if test "$GCC" = yes; then + allow_undefined_flag=' ${wl}-expect_unresolved ${wl}\*' + archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' + hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' + else + allow_undefined_flag=' -expect_unresolved \*' + archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags -msym -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib' + archive_expsym_cmds='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done; printf "%s\\n" "-hidden">> $lib.exp~ + $CC -shared${allow_undefined_flag} ${wl}-input ${wl}$lib.exp $compiler_flags $libobjs $deplibs -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib~$RM $lib.exp' + + # Both c and cxx compiler support -rpath directly + hardcode_libdir_flag_spec='-rpath $libdir' + fi + archive_cmds_need_lc='no' + hardcode_libdir_separator=: + ;; + + solaris*) + no_undefined_flag=' -z defs' + if test "$GCC" = yes; then + wlarc='${wl}' + archive_cmds='$CC -shared ${wl}-z ${wl}text ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' + archive_expsym_cmds='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ + $CC -shared ${wl}-z ${wl}text ${wl}-M ${wl}$lib.exp ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp' + else + case `$CC -V 2>&1` in + *"Compilers 5.0"*) + wlarc='' + archive_cmds='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linker_flags' + archive_expsym_cmds='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ + $LD -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$RM $lib.exp' + ;; + *) + wlarc='${wl}' + archive_cmds='$CC -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $compiler_flags' + archive_expsym_cmds='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ + $CC -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp' + ;; + esac + fi + hardcode_libdir_flag_spec='-R$libdir' + hardcode_shlibpath_var=no + case $host_os in + solaris2.[0-5] | solaris2.[0-5].*) ;; + *) + # The compiler driver will combine and reorder linker options, + # but understands `-z linker_flag'. GCC discards it without `$wl', + # but is careful enough not to reorder. + # Supported since Solaris 2.6 (maybe 2.5.1?) + if test "$GCC" = yes; then + whole_archive_flag_spec='${wl}-z ${wl}allextract$convenience ${wl}-z ${wl}defaultextract' + else + whole_archive_flag_spec='-z allextract$convenience -z defaultextract' + fi + ;; + esac + link_all_deplibs=yes + ;; + + sunos4*) + if test "x$host_vendor" = xsequent; then + # Use $CC to link under sequent, because it throws in some extra .o + # files that make .init and .fini sections work. + archive_cmds='$CC -G ${wl}-h $soname -o $lib $libobjs $deplibs $compiler_flags' + else + archive_cmds='$LD -assert pure-text -Bstatic -o $lib $libobjs $deplibs $linker_flags' + fi + hardcode_libdir_flag_spec='-L$libdir' + hardcode_direct=yes + hardcode_minus_L=yes + hardcode_shlibpath_var=no + ;; + + sysv4) + case $host_vendor in + sni) + archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + hardcode_direct=yes # is this really true??? + ;; + siemens) + ## LD is ld it makes a PLAMLIB + ## CC just makes a GrossModule. + archive_cmds='$LD -G -o $lib $libobjs $deplibs $linker_flags' + reload_cmds='$CC -r -o $output$reload_objs' + hardcode_direct=no + ;; + motorola) + archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + hardcode_direct=no #Motorola manual says yes, but my tests say they lie + ;; + esac + runpath_var='LD_RUN_PATH' + hardcode_shlibpath_var=no + ;; + + sysv4.3*) + archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + hardcode_shlibpath_var=no + export_dynamic_flag_spec='-Bexport' + ;; + + sysv4*MP*) + if test -d /usr/nec; then + archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + hardcode_shlibpath_var=no + runpath_var=LD_RUN_PATH + hardcode_runpath_var=yes + ld_shlibs=yes + fi + ;; + + sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[01].[10]* | unixware7* | sco3.2v5.0.[024]*) + no_undefined_flag='${wl}-z,text' + archive_cmds_need_lc=no + hardcode_shlibpath_var=no + runpath_var='LD_RUN_PATH' + + if test "$GCC" = yes; then + archive_cmds='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + archive_expsym_cmds='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + else + archive_cmds='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + archive_expsym_cmds='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + fi + ;; + + sysv5* | sco3.2v5* | sco5v6*) + # Note: We can NOT use -z defs as we might desire, because we do not + # link with -lc, and that would cause any symbols used from libc to + # always be unresolved, which means just about no library would + # ever link correctly. If we're not using GNU ld we use -z text + # though, which does catch some bad symbols but isn't as heavy-handed + # as -z defs. + no_undefined_flag='${wl}-z,text' + allow_undefined_flag='${wl}-z,nodefs' + archive_cmds_need_lc=no + hardcode_shlibpath_var=no + hardcode_libdir_flag_spec='${wl}-R,$libdir' + hardcode_libdir_separator=':' + link_all_deplibs=yes + export_dynamic_flag_spec='${wl}-Bexport' + runpath_var='LD_RUN_PATH' + + if test "$GCC" = yes; then + archive_cmds='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + archive_expsym_cmds='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + else + archive_cmds='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + archive_expsym_cmds='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + fi + ;; + + uts4*) + archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + hardcode_libdir_flag_spec='-L$libdir' + hardcode_shlibpath_var=no + ;; + + *) + ld_shlibs=no + ;; + esac + + if test x$host_vendor = xsni; then + case $host in + sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*) + export_dynamic_flag_spec='${wl}-Blargedynsym' + ;; + esac + fi + fi + +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ld_shlibs" >&5 +$as_echo "$ld_shlibs" >&6; } +test "$ld_shlibs" = no && can_build_shared=no + +with_gnu_ld=$with_gnu_ld + + + + + + + + + + + + + + + +# +# Do we need to explicitly link libc? +# +case "x$archive_cmds_need_lc" in +x|xyes) + # Assume -lc should be added + archive_cmds_need_lc=yes + + if test "$enable_shared" = yes && test "$GCC" = yes; then + case $archive_cmds in + *'~'*) + # FIXME: we may have to deal with multi-command sequences. + ;; + '$CC '*) + # Test whether the compiler implicitly links with -lc since on some + # systems, -lgcc has to come before -lc. If gcc already passes -lc + # to ld, don't add -lc before -lgcc. + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether -lc should be explicitly linked in" >&5 +$as_echo_n "checking whether -lc should be explicitly linked in... " >&6; } + $RM conftest* + echo "$lt_simple_compile_test_code" > conftest.$ac_ext + + if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } 2>conftest.err; then + soname=conftest + lib=conftest + libobjs=conftest.$ac_objext + deplibs= + wl=$lt_prog_compiler_wl + pic_flag=$lt_prog_compiler_pic + compiler_flags=-v + linker_flags=-v + verstring= + output_objdir=. + libname=conftest + lt_save_allow_undefined_flag=$allow_undefined_flag + allow_undefined_flag= + if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$archive_cmds 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1\""; } >&5 + (eval $archive_cmds 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } + then + archive_cmds_need_lc=no + else + archive_cmds_need_lc=yes + fi + allow_undefined_flag=$lt_save_allow_undefined_flag + else + cat conftest.err 1>&5 + fi + $RM conftest* + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $archive_cmds_need_lc" >&5 +$as_echo "$archive_cmds_need_lc" >&6; } + ;; + esac + fi + ;; +esac + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking dynamic linker characteristics" >&5 +$as_echo_n "checking dynamic linker characteristics... " >&6; } + +if test "$GCC" = yes; then + case $host_os in + darwin*) lt_awk_arg="/^libraries:/,/LR/" ;; + *) lt_awk_arg="/^libraries:/" ;; + esac + lt_search_path_spec=`$CC -print-search-dirs | awk $lt_awk_arg | $SED -e "s/^libraries://" -e "s,=/,/,g"` + if $ECHO "$lt_search_path_spec" | $GREP ';' >/dev/null ; then + # if the path contains ";" then we assume it to be the separator + # otherwise default to the standard path separator (i.e. ":") - it is + # assumed that no part of a normal pathname contains ";" but that should + # okay in the real world where ";" in dirpaths is itself problematic. + lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED -e 's/;/ /g'` + else + lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` + fi + # Ok, now we have the path, separated by spaces, we can step through it + # and add multilib dir if necessary. + lt_tmp_lt_search_path_spec= + lt_multi_os_dir=`$CC $CPPFLAGS $CFLAGS $LDFLAGS -print-multi-os-directory 2>/dev/null` + for lt_sys_path in $lt_search_path_spec; do + if test -d "$lt_sys_path/$lt_multi_os_dir"; then + lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path/$lt_multi_os_dir" + else + test -d "$lt_sys_path" && \ + lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path" + fi + done + lt_search_path_spec=`$ECHO $lt_tmp_lt_search_path_spec | awk ' +BEGIN {RS=" "; FS="/|\n";} { + lt_foo=""; + lt_count=0; + for (lt_i = NF; lt_i > 0; lt_i--) { + if ($lt_i != "" && $lt_i != ".") { + if ($lt_i == "..") { + lt_count++; + } else { + if (lt_count == 0) { + lt_foo="/" $lt_i lt_foo; + } else { + lt_count--; + } + } + } + } + if (lt_foo != "") { lt_freq[lt_foo]++; } + if (lt_freq[lt_foo] == 1) { print lt_foo; } +}'` + sys_lib_search_path_spec=`$ECHO $lt_search_path_spec` +else + sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib" +fi +library_names_spec= +libname_spec='lib$name' +soname_spec= +shrext_cmds=".so" +postinstall_cmds= +postuninstall_cmds= +finish_cmds= +finish_eval= +shlibpath_var= +shlibpath_overrides_runpath=unknown +version_type=none +dynamic_linker="$host_os ld.so" +sys_lib_dlsearch_path_spec="/lib /usr/lib" +need_lib_prefix=unknown +hardcode_into_libs=no + +# when you set need_version to no, make sure it does not cause -set_version +# flags to be left without arguments +need_version=unknown + +case $host_os in +aix3*) + version_type=linux + library_names_spec='${libname}${release}${shared_ext}$versuffix $libname.a' + shlibpath_var=LIBPATH + + # AIX 3 has no versioning support, so we append a major version to the name. + soname_spec='${libname}${release}${shared_ext}$major' + ;; + +aix[4-9]*) + version_type=linux + need_lib_prefix=no + need_version=no + hardcode_into_libs=yes + if test "$host_cpu" = ia64; then + # AIX 5 supports IA64 + library_names_spec='${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext}$versuffix $libname${shared_ext}' + shlibpath_var=LD_LIBRARY_PATH + else + # With GCC up to 2.95.x, collect2 would create an import file + # for dependence libraries. The import file would start with + # the line `#! .'. This would cause the generated library to + # depend on `.', always an invalid library. This was fixed in + # development snapshots of GCC prior to 3.0. + case $host_os in + aix4 | aix4.[01] | aix4.[01].*) + if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)' + echo ' yes ' + echo '#endif'; } | ${CC} -E - | $GREP yes > /dev/null; then + : + else + can_build_shared=no + fi + ;; + esac + # AIX (on Power*) has no versioning support, so currently we can not hardcode correct + # soname into executable. Probably we can add versioning support to + # collect2, so additional links can be useful in future. + if test "$aix_use_runtimelinking" = yes; then + # If using run time linking (on AIX 4.2 or later) use lib.so + # instead of lib.a to let people know that these are not + # typical AIX shared libraries. + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + else + # We preserve .a as extension for shared libraries through AIX4.2 + # and later when we are not doing run time linking. + library_names_spec='${libname}${release}.a $libname.a' + soname_spec='${libname}${release}${shared_ext}$major' + fi + shlibpath_var=LIBPATH + fi + ;; + +amigaos*) + case $host_cpu in + powerpc) + # Since July 2007 AmigaOS4 officially supports .so libraries. + # When compiling the executable, add -use-dynld -Lsobjs: to the compileline. + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + ;; + m68k) + library_names_spec='$libname.ixlibrary $libname.a' + # Create ${libname}_ixlibrary.a entries in /sys/libs. + finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`$ECHO "X$lib" | $Xsed -e '\''s%^.*/\([^/]*\)\.ixlibrary$%\1%'\''`; test $RM /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done' + ;; + esac + ;; + +beos*) + library_names_spec='${libname}${shared_ext}' + dynamic_linker="$host_os ld.so" + shlibpath_var=LIBRARY_PATH + ;; + +bsdi[45]*) + version_type=linux + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir' + shlibpath_var=LD_LIBRARY_PATH + sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib" + sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib" + # the default ld.so.conf also contains /usr/contrib/lib and + # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow + # libtool to hard-code these into programs + ;; + +cygwin* | mingw* | pw32* | cegcc*) + version_type=windows + shrext_cmds=".dll" + need_version=no + need_lib_prefix=no + + case $GCC,$host_os in + yes,cygwin* | yes,mingw* | yes,pw32* | yes,cegcc*) + library_names_spec='$libname.dll.a' + # DLL is installed to $(libdir)/../bin by postinstall_cmds + postinstall_cmds='base_file=`basename \${file}`~ + dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i; echo \$dlname'\''`~ + dldir=$destdir/`dirname \$dlpath`~ + test -d \$dldir || mkdir -p \$dldir~ + $install_prog $dir/$dlname \$dldir/$dlname~ + chmod a+x \$dldir/$dlname~ + if test -n '\''$stripme'\'' && test -n '\''$striplib'\''; then + eval '\''$striplib \$dldir/$dlname'\'' || exit \$?; + fi' + postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ + dlpath=$dir/\$dldll~ + $RM \$dlpath' + shlibpath_overrides_runpath=yes + + case $host_os in + cygwin*) + # Cygwin DLLs use 'cyg' prefix rather than 'lib' + soname_spec='`echo ${libname} | sed -e 's/^lib/cyg/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' + sys_lib_search_path_spec="/usr/lib /lib/w32api /lib /usr/local/lib" + ;; + mingw* | cegcc*) + # MinGW DLLs use traditional 'lib' prefix + soname_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' + sys_lib_search_path_spec=`$CC -print-search-dirs | $GREP "^libraries:" | $SED -e "s/^libraries://" -e "s,=/,/,g"` + if $ECHO "$sys_lib_search_path_spec" | $GREP ';[c-zC-Z]:/' >/dev/null; then + # It is most probably a Windows format PATH printed by + # mingw gcc, but we are running on Cygwin. Gcc prints its search + # path with ; separators, and with drive letters. We can handle the + # drive letters (cygwin fileutils understands them), so leave them, + # especially as we might pass files found there to a mingw objdump, + # which wouldn't understand a cygwinified path. Ahh. + sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'` + else + sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` + fi + ;; + pw32*) + # pw32 DLLs use 'pw' prefix rather than 'lib' + library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' + ;; + esac + ;; + + *) + library_names_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext} $libname.lib' + ;; + esac + dynamic_linker='Win32 ld.exe' + # FIXME: first we should search . and the directory the executable is in + shlibpath_var=PATH + ;; + +darwin* | rhapsody*) + dynamic_linker="$host_os dyld" + version_type=darwin + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${major}$shared_ext ${libname}$shared_ext' + soname_spec='${libname}${release}${major}$shared_ext' + shlibpath_overrides_runpath=yes + shlibpath_var=DYLD_LIBRARY_PATH + shrext_cmds='`test .$module = .yes && echo .so || echo .dylib`' + + sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/local/lib" + sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib' + ;; + +dgux*) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname$shared_ext' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + ;; + +freebsd1*) + dynamic_linker=no + ;; + +freebsd* | dragonfly*) + # DragonFly does not have aout. When/if they implement a new + # versioning mechanism, adjust this. + if test -x /usr/bin/objformat; then + objformat=`/usr/bin/objformat` + else + case $host_os in + freebsd[123]*) objformat=aout ;; + *) objformat=elf ;; + esac + fi + version_type=freebsd-$objformat + case $version_type in + freebsd-elf*) + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' + need_version=no + need_lib_prefix=no + ;; + freebsd-*) + library_names_spec='${libname}${release}${shared_ext}$versuffix $libname${shared_ext}$versuffix' + need_version=yes + ;; + esac + shlibpath_var=LD_LIBRARY_PATH + case $host_os in + freebsd2*) + shlibpath_overrides_runpath=yes + ;; + freebsd3.[01]* | freebsdelf3.[01]*) + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + ;; + freebsd3.[2-9]* | freebsdelf3.[2-9]* | \ + freebsd4.[0-5] | freebsdelf4.[0-5] | freebsd4.1.1 | freebsdelf4.1.1) + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + ;; + *) # from 4.6 on, and DragonFly + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + ;; + esac + ;; + +gnu*) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + hardcode_into_libs=yes + ;; + +hpux9* | hpux10* | hpux11*) + # Give a soname corresponding to the major version so that dld.sl refuses to + # link against other versions. + version_type=sunos + need_lib_prefix=no + need_version=no + case $host_cpu in + ia64*) + shrext_cmds='.so' + hardcode_into_libs=yes + dynamic_linker="$host_os dld.so" + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + if test "X$HPUX_IA64_MODE" = X32; then + sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib" + else + sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64" + fi + sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec + ;; + hppa*64*) + shrext_cmds='.sl' + hardcode_into_libs=yes + dynamic_linker="$host_os dld.sl" + shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH + shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64" + sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec + ;; + *) + shrext_cmds='.sl' + dynamic_linker="$host_os dld.sl" + shlibpath_var=SHLIB_PATH + shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + ;; + esac + # HP-UX runs *really* slowly unless shared libraries are mode 555. + postinstall_cmds='chmod 555 $lib' + ;; + +interix[3-9]*) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + dynamic_linker='Interix 3.x ld.so.1 (PE, like ELF)' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + ;; + +irix5* | irix6* | nonstopux*) + case $host_os in + nonstopux*) version_type=nonstopux ;; + *) + if test "$lt_cv_prog_gnu_ld" = yes; then + version_type=linux + else + version_type=irix + fi ;; + esac + need_lib_prefix=no + need_version=no + soname_spec='${libname}${release}${shared_ext}$major' + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext} $libname${shared_ext}' + case $host_os in + irix5* | nonstopux*) + libsuff= shlibsuff= + ;; + *) + case $LD in # libtool.m4 will add one of these switches to LD + *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ") + libsuff= shlibsuff= libmagic=32-bit;; + *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ") + libsuff=32 shlibsuff=N32 libmagic=N32;; + *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ") + libsuff=64 shlibsuff=64 libmagic=64-bit;; + *) libsuff= shlibsuff= libmagic=never-match;; + esac + ;; + esac + shlibpath_var=LD_LIBRARY${shlibsuff}_PATH + shlibpath_overrides_runpath=no + sys_lib_search_path_spec="/usr/lib${libsuff} /lib${libsuff} /usr/local/lib${libsuff}" + sys_lib_dlsearch_path_spec="/usr/lib${libsuff} /lib${libsuff}" + hardcode_into_libs=yes + ;; + +# No shared lib support for Linux oldld, aout, or coff. +linux*oldld* | linux*aout* | linux*coff*) + dynamic_linker=no + ;; + +# This must be Linux ELF. +linux* | k*bsd*-gnu) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + # Some binutils ld are patched to set DT_RUNPATH + save_LDFLAGS=$LDFLAGS + save_libdir=$libdir + eval "libdir=/foo; wl=\"$lt_prog_compiler_wl\"; \ + LDFLAGS=\"\$LDFLAGS $hardcode_libdir_flag_spec\"" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + if ($OBJDUMP -p conftest$ac_exeext) 2>/dev/null | grep "RUNPATH.*$libdir" >/dev/null; then : + shlibpath_overrides_runpath=yes +fi +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + LDFLAGS=$save_LDFLAGS + libdir=$save_libdir + + # This implies no fast_install, which is unacceptable. + # Some rework will be needed to allow for fast_install + # before this can be enabled. + hardcode_into_libs=yes + + # Add ABI-specific directories to the system library path. + sys_lib_dlsearch_path_spec="/lib64 /usr/lib64 /lib /usr/lib" + + # Append ld.so.conf contents to the search path + if test -f /etc/ld.so.conf; then + lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s 2>/dev/null", \$2)); skip = 1; } { if (!skip) print \$0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;/^[ ]*hwcap[ ]/d;s/[:, ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;/^$/d' | tr '\n' ' '` + sys_lib_dlsearch_path_spec="$sys_lib_dlsearch_path_spec $lt_ld_extra" + fi + + # We used to test for /lib/ld.so.1 and disable shared libraries on + # powerpc, because MkLinux only supported shared libraries with the + # GNU dynamic linker. Since this was broken with cross compilers, + # most powerpc-linux boxes support dynamic linking these days and + # people can always --disable-shared, the test was removed, and we + # assume the GNU/Linux dynamic linker is in use. + dynamic_linker='GNU/Linux ld.so' + ;; + +netbsd*) + version_type=sunos + need_lib_prefix=no + need_version=no + if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' + finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' + dynamic_linker='NetBSD (a.out) ld.so' + else + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + dynamic_linker='NetBSD ld.elf_so' + fi + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + ;; + +newsos6) + version_type=linux + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + ;; + +*nto* | *qnx*) + version_type=qnx + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + dynamic_linker='ldqnx.so' + ;; + +openbsd*) + version_type=sunos + sys_lib_dlsearch_path_spec="/usr/lib" + need_lib_prefix=no + # Some older versions of OpenBSD (3.3 at least) *do* need versioned libs. + case $host_os in + openbsd3.3 | openbsd3.3.*) need_version=yes ;; + *) need_version=no ;; + esac + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' + finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' + shlibpath_var=LD_LIBRARY_PATH + if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then + case $host_os in + openbsd2.[89] | openbsd2.[89].*) + shlibpath_overrides_runpath=no + ;; + *) + shlibpath_overrides_runpath=yes + ;; + esac + else + shlibpath_overrides_runpath=yes + fi + ;; + +os2*) + libname_spec='$name' + shrext_cmds=".dll" + need_lib_prefix=no + library_names_spec='$libname${shared_ext} $libname.a' + dynamic_linker='OS/2 ld.exe' + shlibpath_var=LIBPATH + ;; + +osf3* | osf4* | osf5*) + version_type=osf + need_lib_prefix=no + need_version=no + soname_spec='${libname}${release}${shared_ext}$major' + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + shlibpath_var=LD_LIBRARY_PATH + sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib" + sys_lib_dlsearch_path_spec="$sys_lib_search_path_spec" + ;; + +rdos*) + dynamic_linker=no + ;; + +solaris*) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + # ldd complains unless libraries are executable + postinstall_cmds='chmod +x $lib' + ;; + +sunos4*) + version_type=sunos + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' + finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + if test "$with_gnu_ld" = yes; then + need_lib_prefix=no + fi + need_version=yes + ;; + +sysv4 | sysv4.3*) + version_type=linux + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + case $host_vendor in + sni) + shlibpath_overrides_runpath=no + need_lib_prefix=no + runpath_var=LD_RUN_PATH + ;; + siemens) + need_lib_prefix=no + ;; + motorola) + need_lib_prefix=no + need_version=no + shlibpath_overrides_runpath=no + sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib' + ;; + esac + ;; + +sysv4*MP*) + if test -d /usr/nec ;then + version_type=linux + library_names_spec='$libname${shared_ext}.$versuffix $libname${shared_ext}.$major $libname${shared_ext}' + soname_spec='$libname${shared_ext}.$major' + shlibpath_var=LD_LIBRARY_PATH + fi + ;; + +sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) + version_type=freebsd-elf + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + if test "$with_gnu_ld" = yes; then + sys_lib_search_path_spec='/usr/local/lib /usr/gnu/lib /usr/ccs/lib /usr/lib /lib' + else + sys_lib_search_path_spec='/usr/ccs/lib /usr/lib' + case $host_os in + sco3.2v5*) + sys_lib_search_path_spec="$sys_lib_search_path_spec /lib" + ;; + esac + fi + sys_lib_dlsearch_path_spec='/usr/lib' + ;; + +tpf*) + # TPF is a cross-target only. Preferred cross-host = GNU/Linux. + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + ;; + +uts4*) + version_type=linux + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + ;; + +*) + dynamic_linker=no + ;; +esac +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $dynamic_linker" >&5 +$as_echo "$dynamic_linker" >&6; } +test "$dynamic_linker" = no && can_build_shared=no + +variables_saved_for_relink="PATH $shlibpath_var $runpath_var" +if test "$GCC" = yes; then + variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH" +fi + +if test "${lt_cv_sys_lib_search_path_spec+set}" = set; then + sys_lib_search_path_spec="$lt_cv_sys_lib_search_path_spec" +fi +if test "${lt_cv_sys_lib_dlsearch_path_spec+set}" = set; then + sys_lib_dlsearch_path_spec="$lt_cv_sys_lib_dlsearch_path_spec" +fi + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to hardcode library paths into programs" >&5 +$as_echo_n "checking how to hardcode library paths into programs... " >&6; } +hardcode_action= +if test -n "$hardcode_libdir_flag_spec" || + test -n "$runpath_var" || + test "X$hardcode_automatic" = "Xyes" ; then + + # We can hardcode non-existent directories. + if test "$hardcode_direct" != no && + # If the only mechanism to avoid hardcoding is shlibpath_var, we + # have to relink, otherwise we might link with an installed library + # when we should be linking with a yet-to-be-installed one + ## test "$_LT_TAGVAR(hardcode_shlibpath_var, )" != no && + test "$hardcode_minus_L" != no; then + # Linking always hardcodes the temporary library directory. + hardcode_action=relink + else + # We can link without hardcoding, and we can hardcode nonexisting dirs. + hardcode_action=immediate + fi +else + # We cannot hardcode anything, or else we can only hardcode existing + # directories. + hardcode_action=unsupported +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $hardcode_action" >&5 +$as_echo "$hardcode_action" >&6; } + +if test "$hardcode_action" = relink || + test "$inherit_rpath" = yes; then + # Fast installation is not supported + enable_fast_install=no +elif test "$shlibpath_overrides_runpath" = yes || + test "$enable_shared" = no; then + # Fast installation is not necessary + enable_fast_install=needless +fi + + + + + + + if test "x$enable_dlopen" != xyes; then + enable_dlopen=unknown + enable_dlopen_self=unknown + enable_dlopen_self_static=unknown +else + lt_cv_dlopen=no + lt_cv_dlopen_libs= + + case $host_os in + beos*) + lt_cv_dlopen="load_add_on" + lt_cv_dlopen_libs= + lt_cv_dlopen_self=yes + ;; + + mingw* | pw32* | cegcc*) + lt_cv_dlopen="LoadLibrary" + lt_cv_dlopen_libs= + ;; + + cygwin*) + lt_cv_dlopen="dlopen" + lt_cv_dlopen_libs= + ;; + + darwin*) + # if libdl is installed we need to link against it + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dlopen in -ldl" >&5 +$as_echo_n "checking for dlopen in -ldl... " >&6; } +if test "${ac_cv_lib_dl_dlopen+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-ldl $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char dlopen (); +int +main () +{ +return dlopen (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_lib_dl_dlopen=yes +else + ac_cv_lib_dl_dlopen=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dl_dlopen" >&5 +$as_echo "$ac_cv_lib_dl_dlopen" >&6; } +if test "x$ac_cv_lib_dl_dlopen" = x""yes; then : + lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl" +else + + lt_cv_dlopen="dyld" + lt_cv_dlopen_libs= + lt_cv_dlopen_self=yes + +fi + + ;; + + *) + ac_fn_c_check_func "$LINENO" "shl_load" "ac_cv_func_shl_load" +if test "x$ac_cv_func_shl_load" = x""yes; then : + lt_cv_dlopen="shl_load" +else + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for shl_load in -ldld" >&5 +$as_echo_n "checking for shl_load in -ldld... " >&6; } +if test "${ac_cv_lib_dld_shl_load+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-ldld $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char shl_load (); +int +main () +{ +return shl_load (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_lib_dld_shl_load=yes +else + ac_cv_lib_dld_shl_load=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dld_shl_load" >&5 +$as_echo "$ac_cv_lib_dld_shl_load" >&6; } +if test "x$ac_cv_lib_dld_shl_load" = x""yes; then : + lt_cv_dlopen="shl_load" lt_cv_dlopen_libs="-ldld" +else + ac_fn_c_check_func "$LINENO" "dlopen" "ac_cv_func_dlopen" +if test "x$ac_cv_func_dlopen" = x""yes; then : + lt_cv_dlopen="dlopen" +else + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dlopen in -ldl" >&5 +$as_echo_n "checking for dlopen in -ldl... " >&6; } +if test "${ac_cv_lib_dl_dlopen+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-ldl $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char dlopen (); +int +main () +{ +return dlopen (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_lib_dl_dlopen=yes +else + ac_cv_lib_dl_dlopen=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dl_dlopen" >&5 +$as_echo "$ac_cv_lib_dl_dlopen" >&6; } +if test "x$ac_cv_lib_dl_dlopen" = x""yes; then : + lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl" +else + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dlopen in -lsvld" >&5 +$as_echo_n "checking for dlopen in -lsvld... " >&6; } +if test "${ac_cv_lib_svld_dlopen+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lsvld $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ -# On IRIX 5.3, sys/types and inttypes.h are conflicting. -for ac_header in sys/types.h sys/stat.h stdlib.h string.h memory.h strings.h \ - inttypes.h stdint.h unistd.h -do : - as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` -ac_fn_c_check_header_compile "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default -" -eval as_val=\$$as_ac_Header - if test "x$as_val" = x""yes; then : - cat >>confdefs.h <<_ACEOF -#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char dlopen (); +int +main () +{ +return dlopen (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_lib_svld_dlopen=yes +else + ac_cv_lib_svld_dlopen=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_svld_dlopen" >&5 +$as_echo "$ac_cv_lib_svld_dlopen" >&6; } +if test "x$ac_cv_lib_svld_dlopen" = x""yes; then : + lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-lsvld" +else + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dld_link in -ldld" >&5 +$as_echo_n "checking for dld_link in -ldld... " >&6; } +if test "${ac_cv_lib_dld_dld_link+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-ldld $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char dld_link (); +int +main () +{ +return dld_link (); + ; + return 0; +} _ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_lib_dld_dld_link=yes +else + ac_cv_lib_dld_dld_link=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dld_dld_link" >&5 +$as_echo "$ac_cv_lib_dld_dld_link" >&6; } +if test "x$ac_cv_lib_dld_dld_link" = x""yes; then : + lt_cv_dlopen="dld_link" lt_cv_dlopen_libs="-ldld" +fi + + +fi + + +fi + + +fi + + +fi + + +fi + + ;; + esac + + if test "x$lt_cv_dlopen" != xno; then + enable_dlopen=yes + else + enable_dlopen=no + fi + + case $lt_cv_dlopen in + dlopen) + save_CPPFLAGS="$CPPFLAGS" + test "x$ac_cv_header_dlfcn_h" = xyes && CPPFLAGS="$CPPFLAGS -DHAVE_DLFCN_H" + + save_LDFLAGS="$LDFLAGS" + wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $export_dynamic_flag_spec\" + + save_LIBS="$LIBS" + LIBS="$lt_cv_dlopen_libs $LIBS" + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether a program can dlopen itself" >&5 +$as_echo_n "checking whether a program can dlopen itself... " >&6; } +if test "${lt_cv_dlopen_self+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test "$cross_compiling" = yes; then : + lt_cv_dlopen_self=cross +else + lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 + lt_status=$lt_dlunknown + cat > conftest.$ac_ext <<_LT_EOF +#line 10656 "configure" +#include "confdefs.h" + +#if HAVE_DLFCN_H +#include +#endif + +#include + +#ifdef RTLD_GLOBAL +# define LT_DLGLOBAL RTLD_GLOBAL +#else +# ifdef DL_GLOBAL +# define LT_DLGLOBAL DL_GLOBAL +# else +# define LT_DLGLOBAL 0 +# endif +#endif + +/* We may have to define LT_DLLAZY_OR_NOW in the command line if we + find out it does not work in some platform. */ +#ifndef LT_DLLAZY_OR_NOW +# ifdef RTLD_LAZY +# define LT_DLLAZY_OR_NOW RTLD_LAZY +# else +# ifdef DL_LAZY +# define LT_DLLAZY_OR_NOW DL_LAZY +# else +# ifdef RTLD_NOW +# define LT_DLLAZY_OR_NOW RTLD_NOW +# else +# ifdef DL_NOW +# define LT_DLLAZY_OR_NOW DL_NOW +# else +# define LT_DLLAZY_OR_NOW 0 +# endif +# endif +# endif +# endif +#endif + +void fnord() { int i=42;} +int main () +{ + void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW); + int status = $lt_dlunknown; + + if (self) + { + if (dlsym (self,"fnord")) status = $lt_dlno_uscore; + else if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore; + /* dlclose (self); */ + } + else + puts (dlerror ()); + + return status; +} +_LT_EOF + if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5 + (eval $ac_link) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } && test -s conftest${ac_exeext} 2>/dev/null; then + (./conftest; exit; ) >&5 2>/dev/null + lt_status=$? + case x$lt_status in + x$lt_dlno_uscore) lt_cv_dlopen_self=yes ;; + x$lt_dlneed_uscore) lt_cv_dlopen_self=yes ;; + x$lt_dlunknown|x*) lt_cv_dlopen_self=no ;; + esac + else : + # compilation failed + lt_cv_dlopen_self=no + fi +fi +rm -fr conftest* + + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_dlopen_self" >&5 +$as_echo "$lt_cv_dlopen_self" >&6; } + + if test "x$lt_cv_dlopen_self" = xyes; then + wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $lt_prog_compiler_static\" + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether a statically linked program can dlopen itself" >&5 +$as_echo_n "checking whether a statically linked program can dlopen itself... " >&6; } +if test "${lt_cv_dlopen_self_static+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test "$cross_compiling" = yes; then : + lt_cv_dlopen_self_static=cross +else + lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 + lt_status=$lt_dlunknown + cat > conftest.$ac_ext <<_LT_EOF +#line 10752 "configure" +#include "confdefs.h" + +#if HAVE_DLFCN_H +#include +#endif + +#include + +#ifdef RTLD_GLOBAL +# define LT_DLGLOBAL RTLD_GLOBAL +#else +# ifdef DL_GLOBAL +# define LT_DLGLOBAL DL_GLOBAL +# else +# define LT_DLGLOBAL 0 +# endif +#endif + +/* We may have to define LT_DLLAZY_OR_NOW in the command line if we + find out it does not work in some platform. */ +#ifndef LT_DLLAZY_OR_NOW +# ifdef RTLD_LAZY +# define LT_DLLAZY_OR_NOW RTLD_LAZY +# else +# ifdef DL_LAZY +# define LT_DLLAZY_OR_NOW DL_LAZY +# else +# ifdef RTLD_NOW +# define LT_DLLAZY_OR_NOW RTLD_NOW +# else +# ifdef DL_NOW +# define LT_DLLAZY_OR_NOW DL_NOW +# else +# define LT_DLLAZY_OR_NOW 0 +# endif +# endif +# endif +# endif +#endif + +void fnord() { int i=42;} +int main () +{ + void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW); + int status = $lt_dlunknown; + + if (self) + { + if (dlsym (self,"fnord")) status = $lt_dlno_uscore; + else if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore; + /* dlclose (self); */ + } + else + puts (dlerror ()); + + return status; +} +_LT_EOF + if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5 + (eval $ac_link) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } && test -s conftest${ac_exeext} 2>/dev/null; then + (./conftest; exit; ) >&5 2>/dev/null + lt_status=$? + case x$lt_status in + x$lt_dlno_uscore) lt_cv_dlopen_self_static=yes ;; + x$lt_dlneed_uscore) lt_cv_dlopen_self_static=yes ;; + x$lt_dlunknown|x*) lt_cv_dlopen_self_static=no ;; + esac + else : + # compilation failed + lt_cv_dlopen_self_static=no + fi +fi +rm -fr conftest* + + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_dlopen_self_static" >&5 +$as_echo "$lt_cv_dlopen_self_static" >&6; } + fi + + CPPFLAGS="$save_CPPFLAGS" + LDFLAGS="$save_LDFLAGS" + LIBS="$save_LIBS" + ;; + esac + + case $lt_cv_dlopen_self in + yes|no) enable_dlopen_self=$lt_cv_dlopen_self ;; + *) enable_dlopen_self=unknown ;; + esac + + case $lt_cv_dlopen_self_static in + yes|no) enable_dlopen_self_static=$lt_cv_dlopen_self_static ;; + *) enable_dlopen_self_static=unknown ;; + esac +fi + + + + + + + + + + + + + + + + + +striplib= +old_striplib= +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether stripping libraries is possible" >&5 +$as_echo_n "checking whether stripping libraries is possible... " >&6; } +if test -n "$STRIP" && $STRIP -V 2>&1 | $GREP "GNU strip" >/dev/null; then + test -z "$old_striplib" && old_striplib="$STRIP --strip-debug" + test -z "$striplib" && striplib="$STRIP --strip-unneeded" + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } +else +# FIXME - insert some real tests, host_os isn't really good enough + case $host_os in + darwin*) + if test -n "$STRIP" ; then + striplib="$STRIP -x" + old_striplib="$STRIP -S" + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + fi + ;; + *) + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + ;; + esac +fi + + + + + + + + + + + + + # Report which library types will actually be built + { $as_echo "$as_me:${as_lineno-$LINENO}: checking if libtool supports shared libraries" >&5 +$as_echo_n "checking if libtool supports shared libraries... " >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $can_build_shared" >&5 +$as_echo "$can_build_shared" >&6; } + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to build shared libraries" >&5 +$as_echo_n "checking whether to build shared libraries... " >&6; } + test "$can_build_shared" = "no" && enable_shared=no + + # On AIX, shared libraries and static libraries use the same namespace, and + # are all built from PIC. + case $host_os in + aix3*) + test "$enable_shared" = yes && enable_static=no + if test -n "$RANLIB"; then + archive_cmds="$archive_cmds~\$RANLIB \$lib" + postinstall_cmds='$RANLIB $lib' + fi + ;; + + aix[4-9]*) + if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then + test "$enable_shared" = yes && enable_static=no + fi + ;; + esac + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_shared" >&5 +$as_echo "$enable_shared" >&6; } + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to build static libraries" >&5 +$as_echo_n "checking whether to build static libraries... " >&6; } + # Make sure either enable_shared or enable_static is yes. + test "$enable_shared" = yes || enable_static=yes + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_static" >&5 +$as_echo "$enable_static" >&6; } + + + + +fi +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + +CC="$lt_save_CC" + + + + + + + + + + + + + + ac_config_commands="$ac_config_commands libtool" + + + + +# Only expand once: + + + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to enable maintainer-specific portions of Makefiles" >&5 +$as_echo_n "checking whether to enable maintainer-specific portions of Makefiles... " >&6; } + # Check whether --enable-maintainer-mode was given. +if test "${enable_maintainer_mode+set}" = set; then : + enableval=$enable_maintainer_mode; USE_MAINTAINER_MODE=$enableval +else + USE_MAINTAINER_MODE=no fi -done + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $USE_MAINTAINER_MODE" >&5 +$as_echo "$USE_MAINTAINER_MODE" >&6; } + if test $USE_MAINTAINER_MODE = yes; then + MAINTAINER_MODE_TRUE= + MAINTAINER_MODE_FALSE='#' +else + MAINTAINER_MODE_TRUE='#' + MAINTAINER_MODE_FALSE= +fi + + MAINT=$MAINTAINER_MODE_TRUE + for ac_header in sys/mman.h @@ -6095,7 +12422,7 @@ ac_config_links="$ac_config_links include/ffitarget.h:src/$TARGETDIR/ffitarget.h" -ac_config_files="$ac_config_files include/ffi.h" +ac_config_files="$ac_config_files include/Makefile include/ffi.h Makefile testsuite/Makefile man/Makefile libffi.pc" ac_config_links="$ac_config_links include/ffi_common.h:include/ffi_common.h" @@ -6926,6 +13253,261 @@ # INIT-COMMANDS # AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir" + + +# The HP-UX ksh and POSIX shell print the target directory to stdout +# if CDPATH is set. +(unset CDPATH) >/dev/null 2>&1 && unset CDPATH + +sed_quote_subst='$sed_quote_subst' +double_quote_subst='$double_quote_subst' +delay_variable_subst='$delay_variable_subst' +macro_version='`$ECHO "X$macro_version" | $Xsed -e "$delay_single_quote_subst"`' +macro_revision='`$ECHO "X$macro_revision" | $Xsed -e "$delay_single_quote_subst"`' +enable_shared='`$ECHO "X$enable_shared" | $Xsed -e "$delay_single_quote_subst"`' +enable_static='`$ECHO "X$enable_static" | $Xsed -e "$delay_single_quote_subst"`' +pic_mode='`$ECHO "X$pic_mode" | $Xsed -e "$delay_single_quote_subst"`' +enable_fast_install='`$ECHO "X$enable_fast_install" | $Xsed -e "$delay_single_quote_subst"`' +host_alias='`$ECHO "X$host_alias" | $Xsed -e "$delay_single_quote_subst"`' +host='`$ECHO "X$host" | $Xsed -e "$delay_single_quote_subst"`' +host_os='`$ECHO "X$host_os" | $Xsed -e "$delay_single_quote_subst"`' +build_alias='`$ECHO "X$build_alias" | $Xsed -e "$delay_single_quote_subst"`' +build='`$ECHO "X$build" | $Xsed -e "$delay_single_quote_subst"`' +build_os='`$ECHO "X$build_os" | $Xsed -e "$delay_single_quote_subst"`' +SED='`$ECHO "X$SED" | $Xsed -e "$delay_single_quote_subst"`' +Xsed='`$ECHO "X$Xsed" | $Xsed -e "$delay_single_quote_subst"`' +GREP='`$ECHO "X$GREP" | $Xsed -e "$delay_single_quote_subst"`' +EGREP='`$ECHO "X$EGREP" | $Xsed -e "$delay_single_quote_subst"`' +FGREP='`$ECHO "X$FGREP" | $Xsed -e "$delay_single_quote_subst"`' +LD='`$ECHO "X$LD" | $Xsed -e "$delay_single_quote_subst"`' +NM='`$ECHO "X$NM" | $Xsed -e "$delay_single_quote_subst"`' +LN_S='`$ECHO "X$LN_S" | $Xsed -e "$delay_single_quote_subst"`' +max_cmd_len='`$ECHO "X$max_cmd_len" | $Xsed -e "$delay_single_quote_subst"`' +ac_objext='`$ECHO "X$ac_objext" | $Xsed -e "$delay_single_quote_subst"`' +exeext='`$ECHO "X$exeext" | $Xsed -e "$delay_single_quote_subst"`' +lt_unset='`$ECHO "X$lt_unset" | $Xsed -e "$delay_single_quote_subst"`' +lt_SP2NL='`$ECHO "X$lt_SP2NL" | $Xsed -e "$delay_single_quote_subst"`' +lt_NL2SP='`$ECHO "X$lt_NL2SP" | $Xsed -e "$delay_single_quote_subst"`' +reload_flag='`$ECHO "X$reload_flag" | $Xsed -e "$delay_single_quote_subst"`' +reload_cmds='`$ECHO "X$reload_cmds" | $Xsed -e "$delay_single_quote_subst"`' +OBJDUMP='`$ECHO "X$OBJDUMP" | $Xsed -e "$delay_single_quote_subst"`' +deplibs_check_method='`$ECHO "X$deplibs_check_method" | $Xsed -e "$delay_single_quote_subst"`' +file_magic_cmd='`$ECHO "X$file_magic_cmd" | $Xsed -e "$delay_single_quote_subst"`' +AR='`$ECHO "X$AR" | $Xsed -e "$delay_single_quote_subst"`' +AR_FLAGS='`$ECHO "X$AR_FLAGS" | $Xsed -e "$delay_single_quote_subst"`' +STRIP='`$ECHO "X$STRIP" | $Xsed -e "$delay_single_quote_subst"`' +RANLIB='`$ECHO "X$RANLIB" | $Xsed -e "$delay_single_quote_subst"`' +old_postinstall_cmds='`$ECHO "X$old_postinstall_cmds" | $Xsed -e "$delay_single_quote_subst"`' +old_postuninstall_cmds='`$ECHO "X$old_postuninstall_cmds" | $Xsed -e "$delay_single_quote_subst"`' +old_archive_cmds='`$ECHO "X$old_archive_cmds" | $Xsed -e "$delay_single_quote_subst"`' +CC='`$ECHO "X$CC" | $Xsed -e "$delay_single_quote_subst"`' +CFLAGS='`$ECHO "X$CFLAGS" | $Xsed -e "$delay_single_quote_subst"`' +compiler='`$ECHO "X$compiler" | $Xsed -e "$delay_single_quote_subst"`' +GCC='`$ECHO "X$GCC" | $Xsed -e "$delay_single_quote_subst"`' +lt_cv_sys_global_symbol_pipe='`$ECHO "X$lt_cv_sys_global_symbol_pipe" | $Xsed -e "$delay_single_quote_subst"`' +lt_cv_sys_global_symbol_to_cdecl='`$ECHO "X$lt_cv_sys_global_symbol_to_cdecl" | $Xsed -e "$delay_single_quote_subst"`' +lt_cv_sys_global_symbol_to_c_name_address='`$ECHO "X$lt_cv_sys_global_symbol_to_c_name_address" | $Xsed -e "$delay_single_quote_subst"`' +lt_cv_sys_global_symbol_to_c_name_address_lib_prefix='`$ECHO "X$lt_cv_sys_global_symbol_to_c_name_address_lib_prefix" | $Xsed -e "$delay_single_quote_subst"`' +objdir='`$ECHO "X$objdir" | $Xsed -e "$delay_single_quote_subst"`' +SHELL='`$ECHO "X$SHELL" | $Xsed -e "$delay_single_quote_subst"`' +ECHO='`$ECHO "X$ECHO" | $Xsed -e "$delay_single_quote_subst"`' +MAGIC_CMD='`$ECHO "X$MAGIC_CMD" | $Xsed -e "$delay_single_quote_subst"`' +lt_prog_compiler_no_builtin_flag='`$ECHO "X$lt_prog_compiler_no_builtin_flag" | $Xsed -e "$delay_single_quote_subst"`' +lt_prog_compiler_wl='`$ECHO "X$lt_prog_compiler_wl" | $Xsed -e "$delay_single_quote_subst"`' +lt_prog_compiler_pic='`$ECHO "X$lt_prog_compiler_pic" | $Xsed -e "$delay_single_quote_subst"`' +lt_prog_compiler_static='`$ECHO "X$lt_prog_compiler_static" | $Xsed -e "$delay_single_quote_subst"`' +lt_cv_prog_compiler_c_o='`$ECHO "X$lt_cv_prog_compiler_c_o" | $Xsed -e "$delay_single_quote_subst"`' +need_locks='`$ECHO "X$need_locks" | $Xsed -e "$delay_single_quote_subst"`' +DSYMUTIL='`$ECHO "X$DSYMUTIL" | $Xsed -e "$delay_single_quote_subst"`' +NMEDIT='`$ECHO "X$NMEDIT" | $Xsed -e "$delay_single_quote_subst"`' +LIPO='`$ECHO "X$LIPO" | $Xsed -e "$delay_single_quote_subst"`' +OTOOL='`$ECHO "X$OTOOL" | $Xsed -e "$delay_single_quote_subst"`' +OTOOL64='`$ECHO "X$OTOOL64" | $Xsed -e "$delay_single_quote_subst"`' +libext='`$ECHO "X$libext" | $Xsed -e "$delay_single_quote_subst"`' +shrext_cmds='`$ECHO "X$shrext_cmds" | $Xsed -e "$delay_single_quote_subst"`' +extract_expsyms_cmds='`$ECHO "X$extract_expsyms_cmds" | $Xsed -e "$delay_single_quote_subst"`' +archive_cmds_need_lc='`$ECHO "X$archive_cmds_need_lc" | $Xsed -e "$delay_single_quote_subst"`' +enable_shared_with_static_runtimes='`$ECHO "X$enable_shared_with_static_runtimes" | $Xsed -e "$delay_single_quote_subst"`' +export_dynamic_flag_spec='`$ECHO "X$export_dynamic_flag_spec" | $Xsed -e "$delay_single_quote_subst"`' +whole_archive_flag_spec='`$ECHO "X$whole_archive_flag_spec" | $Xsed -e "$delay_single_quote_subst"`' +compiler_needs_object='`$ECHO "X$compiler_needs_object" | $Xsed -e "$delay_single_quote_subst"`' +old_archive_from_new_cmds='`$ECHO "X$old_archive_from_new_cmds" | $Xsed -e "$delay_single_quote_subst"`' +old_archive_from_expsyms_cmds='`$ECHO "X$old_archive_from_expsyms_cmds" | $Xsed -e "$delay_single_quote_subst"`' +archive_cmds='`$ECHO "X$archive_cmds" | $Xsed -e "$delay_single_quote_subst"`' +archive_expsym_cmds='`$ECHO "X$archive_expsym_cmds" | $Xsed -e "$delay_single_quote_subst"`' +module_cmds='`$ECHO "X$module_cmds" | $Xsed -e "$delay_single_quote_subst"`' +module_expsym_cmds='`$ECHO "X$module_expsym_cmds" | $Xsed -e "$delay_single_quote_subst"`' +with_gnu_ld='`$ECHO "X$with_gnu_ld" | $Xsed -e "$delay_single_quote_subst"`' +allow_undefined_flag='`$ECHO "X$allow_undefined_flag" | $Xsed -e "$delay_single_quote_subst"`' +no_undefined_flag='`$ECHO "X$no_undefined_flag" | $Xsed -e "$delay_single_quote_subst"`' +hardcode_libdir_flag_spec='`$ECHO "X$hardcode_libdir_flag_spec" | $Xsed -e "$delay_single_quote_subst"`' +hardcode_libdir_flag_spec_ld='`$ECHO "X$hardcode_libdir_flag_spec_ld" | $Xsed -e "$delay_single_quote_subst"`' +hardcode_libdir_separator='`$ECHO "X$hardcode_libdir_separator" | $Xsed -e "$delay_single_quote_subst"`' +hardcode_direct='`$ECHO "X$hardcode_direct" | $Xsed -e "$delay_single_quote_subst"`' +hardcode_direct_absolute='`$ECHO "X$hardcode_direct_absolute" | $Xsed -e "$delay_single_quote_subst"`' +hardcode_minus_L='`$ECHO "X$hardcode_minus_L" | $Xsed -e "$delay_single_quote_subst"`' +hardcode_shlibpath_var='`$ECHO "X$hardcode_shlibpath_var" | $Xsed -e "$delay_single_quote_subst"`' +hardcode_automatic='`$ECHO "X$hardcode_automatic" | $Xsed -e "$delay_single_quote_subst"`' +inherit_rpath='`$ECHO "X$inherit_rpath" | $Xsed -e "$delay_single_quote_subst"`' +link_all_deplibs='`$ECHO "X$link_all_deplibs" | $Xsed -e "$delay_single_quote_subst"`' +fix_srcfile_path='`$ECHO "X$fix_srcfile_path" | $Xsed -e "$delay_single_quote_subst"`' +always_export_symbols='`$ECHO "X$always_export_symbols" | $Xsed -e "$delay_single_quote_subst"`' +export_symbols_cmds='`$ECHO "X$export_symbols_cmds" | $Xsed -e "$delay_single_quote_subst"`' +exclude_expsyms='`$ECHO "X$exclude_expsyms" | $Xsed -e "$delay_single_quote_subst"`' +include_expsyms='`$ECHO "X$include_expsyms" | $Xsed -e "$delay_single_quote_subst"`' +prelink_cmds='`$ECHO "X$prelink_cmds" | $Xsed -e "$delay_single_quote_subst"`' +file_list_spec='`$ECHO "X$file_list_spec" | $Xsed -e "$delay_single_quote_subst"`' +variables_saved_for_relink='`$ECHO "X$variables_saved_for_relink" | $Xsed -e "$delay_single_quote_subst"`' +need_lib_prefix='`$ECHO "X$need_lib_prefix" | $Xsed -e "$delay_single_quote_subst"`' +need_version='`$ECHO "X$need_version" | $Xsed -e "$delay_single_quote_subst"`' +version_type='`$ECHO "X$version_type" | $Xsed -e "$delay_single_quote_subst"`' +runpath_var='`$ECHO "X$runpath_var" | $Xsed -e "$delay_single_quote_subst"`' +shlibpath_var='`$ECHO "X$shlibpath_var" | $Xsed -e "$delay_single_quote_subst"`' +shlibpath_overrides_runpath='`$ECHO "X$shlibpath_overrides_runpath" | $Xsed -e "$delay_single_quote_subst"`' +libname_spec='`$ECHO "X$libname_spec" | $Xsed -e "$delay_single_quote_subst"`' +library_names_spec='`$ECHO "X$library_names_spec" | $Xsed -e "$delay_single_quote_subst"`' +soname_spec='`$ECHO "X$soname_spec" | $Xsed -e "$delay_single_quote_subst"`' +postinstall_cmds='`$ECHO "X$postinstall_cmds" | $Xsed -e "$delay_single_quote_subst"`' +postuninstall_cmds='`$ECHO "X$postuninstall_cmds" | $Xsed -e "$delay_single_quote_subst"`' +finish_cmds='`$ECHO "X$finish_cmds" | $Xsed -e "$delay_single_quote_subst"`' +finish_eval='`$ECHO "X$finish_eval" | $Xsed -e "$delay_single_quote_subst"`' +hardcode_into_libs='`$ECHO "X$hardcode_into_libs" | $Xsed -e "$delay_single_quote_subst"`' +sys_lib_search_path_spec='`$ECHO "X$sys_lib_search_path_spec" | $Xsed -e "$delay_single_quote_subst"`' +sys_lib_dlsearch_path_spec='`$ECHO "X$sys_lib_dlsearch_path_spec" | $Xsed -e "$delay_single_quote_subst"`' +hardcode_action='`$ECHO "X$hardcode_action" | $Xsed -e "$delay_single_quote_subst"`' +enable_dlopen='`$ECHO "X$enable_dlopen" | $Xsed -e "$delay_single_quote_subst"`' +enable_dlopen_self='`$ECHO "X$enable_dlopen_self" | $Xsed -e "$delay_single_quote_subst"`' +enable_dlopen_self_static='`$ECHO "X$enable_dlopen_self_static" | $Xsed -e "$delay_single_quote_subst"`' +old_striplib='`$ECHO "X$old_striplib" | $Xsed -e "$delay_single_quote_subst"`' +striplib='`$ECHO "X$striplib" | $Xsed -e "$delay_single_quote_subst"`' + +LTCC='$LTCC' +LTCFLAGS='$LTCFLAGS' +compiler='$compiler_DEFAULT' + +# Quote evaled strings. +for var in SED \ +GREP \ +EGREP \ +FGREP \ +LD \ +NM \ +LN_S \ +lt_SP2NL \ +lt_NL2SP \ +reload_flag \ +OBJDUMP \ +deplibs_check_method \ +file_magic_cmd \ +AR \ +AR_FLAGS \ +STRIP \ +RANLIB \ +CC \ +CFLAGS \ +compiler \ +lt_cv_sys_global_symbol_pipe \ +lt_cv_sys_global_symbol_to_cdecl \ +lt_cv_sys_global_symbol_to_c_name_address \ +lt_cv_sys_global_symbol_to_c_name_address_lib_prefix \ +SHELL \ +ECHO \ +lt_prog_compiler_no_builtin_flag \ +lt_prog_compiler_wl \ +lt_prog_compiler_pic \ +lt_prog_compiler_static \ +lt_cv_prog_compiler_c_o \ +need_locks \ +DSYMUTIL \ +NMEDIT \ +LIPO \ +OTOOL \ +OTOOL64 \ +shrext_cmds \ +export_dynamic_flag_spec \ +whole_archive_flag_spec \ +compiler_needs_object \ +with_gnu_ld \ +allow_undefined_flag \ +no_undefined_flag \ +hardcode_libdir_flag_spec \ +hardcode_libdir_flag_spec_ld \ +hardcode_libdir_separator \ +fix_srcfile_path \ +exclude_expsyms \ +include_expsyms \ +file_list_spec \ +variables_saved_for_relink \ +libname_spec \ +library_names_spec \ +soname_spec \ +finish_eval \ +old_striplib \ +striplib; do + case \`eval \\\\\$ECHO "X\\\\\$\$var"\` in + *[\\\\\\\`\\"\\\$]*) + eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"X\\\$\$var\\" | \\\$Xsed -e \\"\\\$sed_quote_subst\\"\\\`\\\\\\"" + ;; + *) + eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\"" + ;; + esac +done + +# Double-quote double-evaled strings. +for var in reload_cmds \ +old_postinstall_cmds \ +old_postuninstall_cmds \ +old_archive_cmds \ +extract_expsyms_cmds \ +old_archive_from_new_cmds \ +old_archive_from_expsyms_cmds \ +archive_cmds \ +archive_expsym_cmds \ +module_cmds \ +module_expsym_cmds \ +export_symbols_cmds \ +prelink_cmds \ +postinstall_cmds \ +postuninstall_cmds \ +finish_cmds \ +sys_lib_search_path_spec \ +sys_lib_dlsearch_path_spec; do + case \`eval \\\\\$ECHO "X\\\\\$\$var"\` in + *[\\\\\\\`\\"\\\$]*) + eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"X\\\$\$var\\" | \\\$Xsed -e \\"\\\$double_quote_subst\\" -e \\"\\\$sed_quote_subst\\" -e \\"\\\$delay_variable_subst\\"\\\`\\\\\\"" + ;; + *) + eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\"" + ;; + esac +done + +# Fix-up fallback echo if it was mangled by the above quoting rules. +case \$lt_ECHO in +*'\\\$0 --fallback-echo"') lt_ECHO=\`\$ECHO "X\$lt_ECHO" | \$Xsed -e 's/\\\\\\\\\\\\\\\$0 --fallback-echo"\$/\$0 --fallback-echo"/'\` + ;; +esac + +ac_aux_dir='$ac_aux_dir' +xsi_shell='$xsi_shell' +lt_shell_append='$lt_shell_append' + +# See if we are running on zsh, and set the options which allow our +# commands through without removal of \ escapes INIT. +if test -n "\${ZSH_VERSION+set}" ; then + setopt NO_GLOB_SUBST +fi + + + PACKAGE='$PACKAGE' + VERSION='$VERSION' + TIMESTAMP='$TIMESTAMP' + RM='$RM' + ofile='$ofile' + + + TARGETDIR="$TARGETDIR" _ACEOF @@ -6938,10 +13520,16 @@ case $ac_config_target in "fficonfig.h") CONFIG_HEADERS="$CONFIG_HEADERS fficonfig.h" ;; "depfiles") CONFIG_COMMANDS="$CONFIG_COMMANDS depfiles" ;; + "libtool") CONFIG_COMMANDS="$CONFIG_COMMANDS libtool" ;; "include") CONFIG_COMMANDS="$CONFIG_COMMANDS include" ;; "src") CONFIG_COMMANDS="$CONFIG_COMMANDS src" ;; "include/ffitarget.h") CONFIG_LINKS="$CONFIG_LINKS include/ffitarget.h:src/$TARGETDIR/ffitarget.h" ;; + "include/Makefile") CONFIG_FILES="$CONFIG_FILES include/Makefile" ;; "include/ffi.h") CONFIG_FILES="$CONFIG_FILES include/ffi.h" ;; + "Makefile") CONFIG_FILES="$CONFIG_FILES Makefile" ;; + "testsuite/Makefile") CONFIG_FILES="$CONFIG_FILES testsuite/Makefile" ;; + "man/Makefile") CONFIG_FILES="$CONFIG_FILES man/Makefile" ;; + "libffi.pc") CONFIG_FILES="$CONFIG_FILES libffi.pc" ;; "include/ffi_common.h") CONFIG_LINKS="$CONFIG_LINKS include/ffi_common.h:include/ffi_common.h" ;; "fficonfig.py") CONFIG_FILES="$CONFIG_FILES fficonfig.py" ;; @@ -7655,6 +14243,641 @@ done } ;; + "libtool":C) + + # See if we are running on zsh, and set the options which allow our + # commands through without removal of \ escapes. + if test -n "${ZSH_VERSION+set}" ; then + setopt NO_GLOB_SUBST + fi + + cfgfile="${ofile}T" + trap "$RM \"$cfgfile\"; exit 1" 1 2 15 + $RM "$cfgfile" + + cat <<_LT_EOF >> "$cfgfile" +#! $SHELL + +# `$ECHO "$ofile" | sed 's%^.*/%%'` - Provide generalized library-building support services. +# Generated automatically by $as_me ($PACKAGE$TIMESTAMP) $VERSION +# Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`: +# NOTE: Changes made to this file will be lost: look at ltmain.sh. +# +# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005, +# 2006, 2007, 2008 Free Software Foundation, Inc. +# Written by Gordon Matzigkeit, 1996 +# +# This file is part of GNU Libtool. +# +# GNU Libtool is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License as +# published by the Free Software Foundation; either version 2 of +# the License, or (at your option) any later version. +# +# As a special exception to the GNU General Public License, +# if you distribute this file as part of a program or library that +# is built using GNU Libtool, you may include this file under the +# same distribution terms that you use for the rest of that program. +# +# GNU Libtool is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with GNU Libtool; see the file COPYING. If not, a copy +# can be downloaded from http://www.gnu.org/licenses/gpl.html, or +# obtained by writing to the Free Software Foundation, Inc., +# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + + +# The names of the tagged configurations supported by this script. +available_tags="" + +# ### BEGIN LIBTOOL CONFIG + +# Which release of libtool.m4 was used? +macro_version=$macro_version +macro_revision=$macro_revision + +# Whether or not to build shared libraries. +build_libtool_libs=$enable_shared + +# Whether or not to build static libraries. +build_old_libs=$enable_static + +# What type of objects to build. +pic_mode=$pic_mode + +# Whether or not to optimize for fast installation. +fast_install=$enable_fast_install + +# The host system. +host_alias=$host_alias +host=$host +host_os=$host_os + +# The build system. +build_alias=$build_alias +build=$build +build_os=$build_os + +# A sed program that does not truncate output. +SED=$lt_SED + +# Sed that helps us avoid accidentally triggering echo(1) options like -n. +Xsed="\$SED -e 1s/^X//" + +# A grep program that handles long lines. +GREP=$lt_GREP + +# An ERE matcher. +EGREP=$lt_EGREP + +# A literal string matcher. +FGREP=$lt_FGREP + +# A BSD- or MS-compatible name lister. +NM=$lt_NM + +# Whether we need soft or hard links. +LN_S=$lt_LN_S + +# What is the maximum length of a command? +max_cmd_len=$max_cmd_len + +# Object file suffix (normally "o"). +objext=$ac_objext + +# Executable file suffix (normally ""). +exeext=$exeext + +# whether the shell understands "unset". +lt_unset=$lt_unset + +# turn spaces into newlines. +SP2NL=$lt_lt_SP2NL + +# turn newlines into spaces. +NL2SP=$lt_lt_NL2SP + +# How to create reloadable object files. +reload_flag=$lt_reload_flag +reload_cmds=$lt_reload_cmds + +# An object symbol dumper. +OBJDUMP=$lt_OBJDUMP + +# Method to check whether dependent libraries are shared objects. +deplibs_check_method=$lt_deplibs_check_method + +# Command to use when deplibs_check_method == "file_magic". +file_magic_cmd=$lt_file_magic_cmd + +# The archiver. +AR=$lt_AR +AR_FLAGS=$lt_AR_FLAGS + +# A symbol stripping program. +STRIP=$lt_STRIP + +# Commands used to install an old-style archive. +RANLIB=$lt_RANLIB +old_postinstall_cmds=$lt_old_postinstall_cmds +old_postuninstall_cmds=$lt_old_postuninstall_cmds + +# A C compiler. +LTCC=$lt_CC + +# LTCC compiler flags. +LTCFLAGS=$lt_CFLAGS + +# Take the output of nm and produce a listing of raw symbols and C names. +global_symbol_pipe=$lt_lt_cv_sys_global_symbol_pipe + +# Transform the output of nm in a proper C declaration. +global_symbol_to_cdecl=$lt_lt_cv_sys_global_symbol_to_cdecl + +# Transform the output of nm in a C name address pair. +global_symbol_to_c_name_address=$lt_lt_cv_sys_global_symbol_to_c_name_address + +# Transform the output of nm in a C name address pair when lib prefix is needed. +global_symbol_to_c_name_address_lib_prefix=$lt_lt_cv_sys_global_symbol_to_c_name_address_lib_prefix + +# The name of the directory that contains temporary libtool files. +objdir=$objdir + +# Shell to use when invoking shell scripts. +SHELL=$lt_SHELL + +# An echo program that does not interpret backslashes. +ECHO=$lt_ECHO + +# Used to examine libraries when file_magic_cmd begins with "file". +MAGIC_CMD=$MAGIC_CMD + +# Must we lock files when doing compilation? +need_locks=$lt_need_locks + +# Tool to manipulate archived DWARF debug symbol files on Mac OS X. +DSYMUTIL=$lt_DSYMUTIL + +# Tool to change global to local symbols on Mac OS X. +NMEDIT=$lt_NMEDIT + +# Tool to manipulate fat objects and archives on Mac OS X. +LIPO=$lt_LIPO + +# ldd/readelf like tool for Mach-O binaries on Mac OS X. +OTOOL=$lt_OTOOL + +# ldd/readelf like tool for 64 bit Mach-O binaries on Mac OS X 10.4. +OTOOL64=$lt_OTOOL64 + +# Old archive suffix (normally "a"). +libext=$libext + +# Shared library suffix (normally ".so"). +shrext_cmds=$lt_shrext_cmds + +# The commands to extract the exported symbol list from a shared archive. +extract_expsyms_cmds=$lt_extract_expsyms_cmds + +# Variables whose values should be saved in libtool wrapper scripts and +# restored at link time. +variables_saved_for_relink=$lt_variables_saved_for_relink + +# Do we need the "lib" prefix for modules? +need_lib_prefix=$need_lib_prefix + +# Do we need a version for libraries? +need_version=$need_version + +# Library versioning type. +version_type=$version_type + +# Shared library runtime path variable. +runpath_var=$runpath_var + +# Shared library path variable. +shlibpath_var=$shlibpath_var + +# Is shlibpath searched before the hard-coded library search path? +shlibpath_overrides_runpath=$shlibpath_overrides_runpath + +# Format of library name prefix. +libname_spec=$lt_libname_spec + +# List of archive names. First name is the real one, the rest are links. +# The last name is the one that the linker finds with -lNAME +library_names_spec=$lt_library_names_spec + +# The coded name of the library, if different from the real name. +soname_spec=$lt_soname_spec + +# Command to use after installation of a shared archive. +postinstall_cmds=$lt_postinstall_cmds + +# Command to use after uninstallation of a shared archive. +postuninstall_cmds=$lt_postuninstall_cmds + +# Commands used to finish a libtool library installation in a directory. +finish_cmds=$lt_finish_cmds + +# As "finish_cmds", except a single script fragment to be evaled but +# not shown. +finish_eval=$lt_finish_eval + +# Whether we should hardcode library paths into libraries. +hardcode_into_libs=$hardcode_into_libs + +# Compile-time system search path for libraries. +sys_lib_search_path_spec=$lt_sys_lib_search_path_spec + +# Run-time system search path for libraries. +sys_lib_dlsearch_path_spec=$lt_sys_lib_dlsearch_path_spec + +# Whether dlopen is supported. +dlopen_support=$enable_dlopen + +# Whether dlopen of programs is supported. +dlopen_self=$enable_dlopen_self + +# Whether dlopen of statically linked programs is supported. +dlopen_self_static=$enable_dlopen_self_static + +# Commands to strip libraries. +old_striplib=$lt_old_striplib +striplib=$lt_striplib + + +# The linker used to build libraries. +LD=$lt_LD + +# Commands used to build an old-style archive. +old_archive_cmds=$lt_old_archive_cmds + +# A language specific compiler. +CC=$lt_compiler + +# Is the compiler the GNU compiler? +with_gcc=$GCC + +# Compiler flag to turn off builtin functions. +no_builtin_flag=$lt_lt_prog_compiler_no_builtin_flag + +# How to pass a linker flag through the compiler. +wl=$lt_lt_prog_compiler_wl + +# Additional compiler flags for building library objects. +pic_flag=$lt_lt_prog_compiler_pic + +# Compiler flag to prevent dynamic linking. +link_static_flag=$lt_lt_prog_compiler_static + +# Does compiler simultaneously support -c and -o options? +compiler_c_o=$lt_lt_cv_prog_compiler_c_o + +# Whether or not to add -lc for building shared libraries. +build_libtool_need_lc=$archive_cmds_need_lc + +# Whether or not to disallow shared libs when runtime libs are static. +allow_libtool_libs_with_static_runtimes=$enable_shared_with_static_runtimes + +# Compiler flag to allow reflexive dlopens. +export_dynamic_flag_spec=$lt_export_dynamic_flag_spec + +# Compiler flag to generate shared objects directly from archives. +whole_archive_flag_spec=$lt_whole_archive_flag_spec + +# Whether the compiler copes with passing no objects directly. +compiler_needs_object=$lt_compiler_needs_object + +# Create an old-style archive from a shared archive. +old_archive_from_new_cmds=$lt_old_archive_from_new_cmds + +# Create a temporary old-style archive to link instead of a shared archive. +old_archive_from_expsyms_cmds=$lt_old_archive_from_expsyms_cmds + +# Commands used to build a shared archive. +archive_cmds=$lt_archive_cmds +archive_expsym_cmds=$lt_archive_expsym_cmds + +# Commands used to build a loadable module if different from building +# a shared archive. +module_cmds=$lt_module_cmds +module_expsym_cmds=$lt_module_expsym_cmds + +# Whether we are building with GNU ld or not. +with_gnu_ld=$lt_with_gnu_ld + +# Flag that allows shared libraries with undefined symbols to be built. +allow_undefined_flag=$lt_allow_undefined_flag + +# Flag that enforces no undefined symbols. +no_undefined_flag=$lt_no_undefined_flag + +# Flag to hardcode \$libdir into a binary during linking. +# This must work even if \$libdir does not exist +hardcode_libdir_flag_spec=$lt_hardcode_libdir_flag_spec + +# If ld is used when linking, flag to hardcode \$libdir into a binary +# during linking. This must work even if \$libdir does not exist. +hardcode_libdir_flag_spec_ld=$lt_hardcode_libdir_flag_spec_ld + +# Whether we need a single "-rpath" flag with a separated argument. +hardcode_libdir_separator=$lt_hardcode_libdir_separator + +# Set to "yes" if using DIR/libNAME\${shared_ext} during linking hardcodes +# DIR into the resulting binary. +hardcode_direct=$hardcode_direct + +# Set to "yes" if using DIR/libNAME\${shared_ext} during linking hardcodes +# DIR into the resulting binary and the resulting library dependency is +# "absolute",i.e impossible to change by setting \${shlibpath_var} if the +# library is relocated. +hardcode_direct_absolute=$hardcode_direct_absolute + +# Set to "yes" if using the -LDIR flag during linking hardcodes DIR +# into the resulting binary. +hardcode_minus_L=$hardcode_minus_L + +# Set to "yes" if using SHLIBPATH_VAR=DIR during linking hardcodes DIR +# into the resulting binary. +hardcode_shlibpath_var=$hardcode_shlibpath_var + +# Set to "yes" if building a shared library automatically hardcodes DIR +# into the library and all subsequent libraries and executables linked +# against it. +hardcode_automatic=$hardcode_automatic + +# Set to yes if linker adds runtime paths of dependent libraries +# to runtime path list. +inherit_rpath=$inherit_rpath + +# Whether libtool must link a program against all its dependency libraries. +link_all_deplibs=$link_all_deplibs + +# Fix the shell variable \$srcfile for the compiler. +fix_srcfile_path=$lt_fix_srcfile_path + +# Set to "yes" if exported symbols are required. +always_export_symbols=$always_export_symbols + +# The commands to list exported symbols. +export_symbols_cmds=$lt_export_symbols_cmds + +# Symbols that should not be listed in the preloaded symbols. +exclude_expsyms=$lt_exclude_expsyms + +# Symbols that must always be exported. +include_expsyms=$lt_include_expsyms + +# Commands necessary for linking programs (against libraries) with templates. +prelink_cmds=$lt_prelink_cmds + +# Specify filename containing input files. +file_list_spec=$lt_file_list_spec + +# How to hardcode a shared library path into an executable. +hardcode_action=$hardcode_action + +# ### END LIBTOOL CONFIG + +_LT_EOF + + case $host_os in + aix3*) + cat <<\_LT_EOF >> "$cfgfile" +# AIX sometimes has problems with the GCC collect2 program. For some +# reason, if we set the COLLECT_NAMES environment variable, the problems +# vanish in a puff of smoke. +if test "X${COLLECT_NAMES+set}" != Xset; then + COLLECT_NAMES= + export COLLECT_NAMES +fi +_LT_EOF + ;; + esac + + +ltmain="$ac_aux_dir/ltmain.sh" + + + # We use sed instead of cat because bash on DJGPP gets confused if + # if finds mixed CR/LF and LF-only lines. Since sed operates in + # text mode, it properly converts lines to CR/LF. This bash problem + # is reportedly fixed, but why not run on old versions too? + sed '/^# Generated shell functions inserted here/q' "$ltmain" >> "$cfgfile" \ + || (rm -f "$cfgfile"; exit 1) + + case $xsi_shell in + yes) + cat << \_LT_EOF >> "$cfgfile" + +# func_dirname file append nondir_replacement +# Compute the dirname of FILE. If nonempty, add APPEND to the result, +# otherwise set result to NONDIR_REPLACEMENT. +func_dirname () +{ + case ${1} in + */*) func_dirname_result="${1%/*}${2}" ;; + * ) func_dirname_result="${3}" ;; + esac +} + +# func_basename file +func_basename () +{ + func_basename_result="${1##*/}" +} + +# func_dirname_and_basename file append nondir_replacement +# perform func_basename and func_dirname in a single function +# call: +# dirname: Compute the dirname of FILE. If nonempty, +# add APPEND to the result, otherwise set result +# to NONDIR_REPLACEMENT. +# value returned in "$func_dirname_result" +# basename: Compute filename of FILE. +# value retuned in "$func_basename_result" +# Implementation must be kept synchronized with func_dirname +# and func_basename. For efficiency, we do not delegate to +# those functions but instead duplicate the functionality here. +func_dirname_and_basename () +{ + case ${1} in + */*) func_dirname_result="${1%/*}${2}" ;; + * ) func_dirname_result="${3}" ;; + esac + func_basename_result="${1##*/}" +} + +# func_stripname prefix suffix name +# strip PREFIX and SUFFIX off of NAME. +# PREFIX and SUFFIX must not contain globbing or regex special +# characters, hashes, percent signs, but SUFFIX may contain a leading +# dot (in which case that matches only a dot). +func_stripname () +{ + # pdksh 5.2.14 does not do ${X%$Y} correctly if both X and Y are + # positional parameters, so assign one to ordinary parameter first. + func_stripname_result=${3} + func_stripname_result=${func_stripname_result#"${1}"} + func_stripname_result=${func_stripname_result%"${2}"} +} + +# func_opt_split +func_opt_split () +{ + func_opt_split_opt=${1%%=*} + func_opt_split_arg=${1#*=} +} + +# func_lo2o object +func_lo2o () +{ + case ${1} in + *.lo) func_lo2o_result=${1%.lo}.${objext} ;; + *) func_lo2o_result=${1} ;; + esac +} + +# func_xform libobj-or-source +func_xform () +{ + func_xform_result=${1%.*}.lo +} + +# func_arith arithmetic-term... +func_arith () +{ + func_arith_result=$(( $* )) +} + +# func_len string +# STRING may not start with a hyphen. +func_len () +{ + func_len_result=${#1} +} + +_LT_EOF + ;; + *) # Bourne compatible functions. + cat << \_LT_EOF >> "$cfgfile" + +# func_dirname file append nondir_replacement +# Compute the dirname of FILE. If nonempty, add APPEND to the result, +# otherwise set result to NONDIR_REPLACEMENT. +func_dirname () +{ + # Extract subdirectory from the argument. + func_dirname_result=`$ECHO "X${1}" | $Xsed -e "$dirname"` + if test "X$func_dirname_result" = "X${1}"; then + func_dirname_result="${3}" + else + func_dirname_result="$func_dirname_result${2}" + fi +} + +# func_basename file +func_basename () +{ + func_basename_result=`$ECHO "X${1}" | $Xsed -e "$basename"` +} + + +# func_stripname prefix suffix name +# strip PREFIX and SUFFIX off of NAME. +# PREFIX and SUFFIX must not contain globbing or regex special +# characters, hashes, percent signs, but SUFFIX may contain a leading +# dot (in which case that matches only a dot). +# func_strip_suffix prefix name +func_stripname () +{ + case ${2} in + .*) func_stripname_result=`$ECHO "X${3}" \ + | $Xsed -e "s%^${1}%%" -e "s%\\\\${2}\$%%"`;; + *) func_stripname_result=`$ECHO "X${3}" \ + | $Xsed -e "s%^${1}%%" -e "s%${2}\$%%"`;; + esac +} + +# sed scripts: +my_sed_long_opt='1s/^\(-[^=]*\)=.*/\1/;q' +my_sed_long_arg='1s/^-[^=]*=//' + +# func_opt_split +func_opt_split () +{ + func_opt_split_opt=`$ECHO "X${1}" | $Xsed -e "$my_sed_long_opt"` + func_opt_split_arg=`$ECHO "X${1}" | $Xsed -e "$my_sed_long_arg"` +} + +# func_lo2o object +func_lo2o () +{ + func_lo2o_result=`$ECHO "X${1}" | $Xsed -e "$lo2o"` +} + +# func_xform libobj-or-source +func_xform () +{ + func_xform_result=`$ECHO "X${1}" | $Xsed -e 's/\.[^.]*$/.lo/'` +} + +# func_arith arithmetic-term... +func_arith () +{ + func_arith_result=`expr "$@"` +} + +# func_len string +# STRING may not start with a hyphen. +func_len () +{ + func_len_result=`expr "$1" : ".*" 2>/dev/null || echo $max_cmd_len` +} + +_LT_EOF +esac + +case $lt_shell_append in + yes) + cat << \_LT_EOF >> "$cfgfile" + +# func_append var value +# Append VALUE to the end of shell variable VAR. +func_append () +{ + eval "$1+=\$2" +} +_LT_EOF + ;; + *) + cat << \_LT_EOF >> "$cfgfile" + +# func_append var value +# Append VALUE to the end of shell variable VAR. +func_append () +{ + eval "$1=\$$1\$2" +} + +_LT_EOF + ;; + esac + + + sed -n '/^# Generated shell functions inserted here/,$p' "$ltmain" >> "$cfgfile" \ + || (rm -f "$cfgfile"; exit 1) + + mv -f "$cfgfile" "$ofile" || + (rm -f "$ofile" && cp "$cfgfile" "$ofile" && rm -f "$cfgfile") + chmod +x "$ofile" + + ;; "include":C) test -d include || mkdir include ;; "src":C) test -d src || mkdir src Modified: python/trunk/Modules/_ctypes/libffi/configure.ac ============================================================================== --- python/trunk/Modules/_ctypes/libffi/configure.ac (original) +++ python/trunk/Modules/_ctypes/libffi/configure.ac Fri Mar 19 18:46:33 2010 @@ -405,7 +405,7 @@ AC_CONFIG_LINKS(include/ffitarget.h:src/$TARGETDIR/ffitarget.h) -AC_CONFIG_FILES(include/ffi.h) +AC_CONFIG_FILES(include/Makefile include/ffi.h Makefile testsuite/Makefile man/Makefile libffi.pc) AC_CONFIG_LINKS(include/ffi_common.h:include/ffi_common.h) From python-checkins at python.org Fri Mar 19 18:47:22 2010 From: python-checkins at python.org (matthias.klose) Date: Fri, 19 Mar 2010 18:47:22 +0100 (CET) Subject: [Python-checkins] r79099 - in python/branches/py3k: Modules/_ctypes/libffi.diff Modules/_ctypes/libffi/aclocal.m4 Modules/_ctypes/libffi/configure Modules/_ctypes/libffi/configure.ac Message-ID: <20100319174722.68807FC8A@mail.python.org> Author: matthias.klose Date: Fri Mar 19 18:47:21 2010 New Revision: 79099 Log: Merged revisions 79098 via svnmerge from svn+ssh://pythondev at svn.python.org/python/trunk ........ r79098 | matthias.klose | 2010-03-19 18:46:33 +0100 (Fr, 19 M?r 2010) | 8 lines Generate libffi's Makefiles again to be able to run the libffi testsuite -- Diese und die folgenden Zeilen werden ignoriert -- M _ctypes/libffi/configure M _ctypes/libffi/configure.ac M _ctypes/libffi/aclocal.m4 M _ctypes/libffi.diff ........ Modified: python/branches/py3k/ (props changed) python/branches/py3k/Modules/_ctypes/libffi.diff python/branches/py3k/Modules/_ctypes/libffi/aclocal.m4 python/branches/py3k/Modules/_ctypes/libffi/configure python/branches/py3k/Modules/_ctypes/libffi/configure.ac Modified: python/branches/py3k/Modules/_ctypes/libffi.diff ============================================================================== --- python/branches/py3k/Modules/_ctypes/libffi.diff (original) +++ python/branches/py3k/Modules/_ctypes/libffi.diff Fri Mar 19 18:47:21 2010 @@ -1,28 +1,17 @@ -This file contains the diffs between the files in the libffi -subdirectory and the 'official' source files from -ftp://sourceware.org/pub/libffi/libffi-3.0.9.tar.gz - ---- libffi/configure.ac.orig 2009-12-31 13:41:51.000000000 +0100 -+++ libffi/configure.ac 2010-02-24 00:39:10.341610848 +0100 -@@ -1,4 +1,7 @@ - dnl Process this with autoconf to create configure -+# -+# file from libffi - slightly patched for ctypes -+# - - AC_PREREQ(2.63) - -@@ -91,6 +94,9 @@ - i?86-*-solaris2.1[[0-9]]*) +diff -urN libffi.orig/configure libffi/configure +--- libffi.orig/configure 2010-03-19 18:29:54.588499862 +0100 ++++ libffi/configure 2010-03-19 18:32:09.113499479 +0100 +@@ -11228,6 +11228,9 @@ + i?86-*-solaris2.1[0-9]*) TARGET=X86_64; TARGETDIR=x86 ;; -+ i*86-*-nto-qnx*) ++ i*86-*-nto-qnx*) + TARGET=X86; TARGETDIR=x86 + ;; i?86-*-*) TARGET=X86; TARGETDIR=x86 ;; -@@ -108,12 +114,12 @@ +@@ -11245,12 +11248,12 @@ ;; mips-sgi-irix5.* | mips-sgi-irix6.*) @@ -37,40 +26,59 @@ ;; powerpc*-*-linux* | powerpc-*-sysv*) -@@ -170,7 +176,7 @@ - AC_MSG_ERROR(["libffi has not been ported to $host."]) +@@ -11307,7 +11310,7 @@ + as_fn_error "\"libffi has not been ported to $host.\"" "$LINENO" 5 fi --AM_CONDITIONAL(MIPS, test x$TARGET = xMIPS) -+AM_CONDITIONAL(MIPS,[expr x$TARGET : 'xMIPS' > /dev/null]) - AM_CONDITIONAL(SPARC, test x$TARGET = xSPARC) - AM_CONDITIONAL(X86, test x$TARGET = xX86) - AM_CONDITIONAL(X86_FREEBSD, test x$TARGET = xX86_FREEBSD) -@@ -399,6 +405,10 @@ +- if test x$TARGET = xMIPS; then ++ if expr x$TARGET : 'xMIPS' > /dev/null; then + MIPS_TRUE= + MIPS_FALSE='#' + else +@@ -12422,6 +12425,12 @@ + ac_config_files="$ac_config_files include/Makefile include/ffi.h Makefile testsuite/Makefile man/Makefile libffi.pc" - AC_CONFIG_LINKS(include/ffitarget.h:src/$TARGETDIR/ffitarget.h) --AC_CONFIG_FILES(include/Makefile include/ffi.h Makefile testsuite/Makefile man/Makefile libffi.pc) -+AC_CONFIG_FILES(include/ffi.h) ++ac_config_links="$ac_config_links include/ffi_common.h:include/ffi_common.h" + -+AC_CONFIG_LINKS(include/ffi_common.h:include/ffi_common.h) + -+AC_CONFIG_FILES(fficonfig.py) ++ac_config_files="$ac_config_files fficonfig.py" ++ ++ + cat >confcache <<\_ACEOF + # This file is a shell script that caches the results of configure + # tests run on this system so they can be shared between configure +@@ -13521,6 +13530,8 @@ + "testsuite/Makefile") CONFIG_FILES="$CONFIG_FILES testsuite/Makefile" ;; + "man/Makefile") CONFIG_FILES="$CONFIG_FILES man/Makefile" ;; + "libffi.pc") CONFIG_FILES="$CONFIG_FILES libffi.pc" ;; ++ "include/ffi_common.h") CONFIG_LINKS="$CONFIG_LINKS include/ffi_common.h:include/ffi_common.h" ;; ++ "fficonfig.py") CONFIG_FILES="$CONFIG_FILES fficonfig.py" ;; - AC_OUTPUT ---- libffi/configure.orig 2009-12-31 13:41:51.000000000 +0100 -+++ libffi/configure 2010-02-24 00:41:59.829608794 +0100 -@@ -12191,6 +12191,9 @@ - i?86-*-solaris2.1[0-9]*) + *) as_fn_error "invalid argument: \`$ac_config_target'" "$LINENO" 5;; + esac +diff -urN libffi.orig/configure.ac libffi/configure.ac +--- libffi.orig/configure.ac 2010-03-19 18:27:44.988498585 +0100 ++++ libffi/configure.ac 2010-03-19 18:31:29.252505178 +0100 +@@ -1,4 +1,7 @@ + dnl Process this with autoconf to create configure ++# ++# file from libffi - slightly patched for ctypes ++# + + AC_PREREQ(2.63) + +@@ -91,6 +94,9 @@ + i?86-*-solaris2.1[[0-9]]*) TARGET=X86_64; TARGETDIR=x86 ;; -+ i*86-*-nto-qnx*) ++ i*86-*-nto-qnx*) + TARGET=X86; TARGETDIR=x86 + ;; i?86-*-*) TARGET=X86; TARGETDIR=x86 ;; -@@ -12208,12 +12211,12 @@ +@@ -108,12 +114,12 @@ ;; mips-sgi-irix5.* | mips-sgi-irix6.*) @@ -85,47 +93,27 @@ ;; powerpc*-*-linux* | powerpc-*-sysv*) -@@ -12272,7 +12275,7 @@ - { (exit 1); exit 1; }; } +@@ -170,7 +176,7 @@ + AC_MSG_ERROR(["libffi has not been ported to $host."]) fi -- if test x$TARGET = xMIPS; then -+ if expr x$TARGET : 'xMIPS' > /dev/null; then - MIPS_TRUE= - MIPS_FALSE='#' - else -@@ -14667,7 +14670,13 @@ - ac_config_links="$ac_config_links include/ffitarget.h:src/$TARGETDIR/ffitarget.h" +-AM_CONDITIONAL(MIPS, test x$TARGET = xMIPS) ++AM_CONDITIONAL(MIPS,[expr x$TARGET : 'xMIPS' > /dev/null]) + AM_CONDITIONAL(SPARC, test x$TARGET = xSPARC) + AM_CONDITIONAL(X86, test x$TARGET = xX86) + AM_CONDITIONAL(X86_FREEBSD, test x$TARGET = xX86_FREEBSD) +@@ -401,4 +407,8 @@ + AC_CONFIG_FILES(include/Makefile include/ffi.h Makefile testsuite/Makefile man/Makefile libffi.pc) --ac_config_files="$ac_config_files include/Makefile include/ffi.h Makefile testsuite/Makefile man/Makefile libffi.pc" -+ac_config_files="$ac_config_files include/ffi.h" -+ -+ -+ac_config_links="$ac_config_links include/ffi_common.h:include/ffi_common.h" ++AC_CONFIG_LINKS(include/ffi_common.h:include/ffi_common.h) + ++AC_CONFIG_FILES(fficonfig.py) + -+ac_config_files="$ac_config_files fficonfig.py" - - - cat >confcache <<\_ACEOF -@@ -15767,12 +15776,9 @@ - "include") CONFIG_COMMANDS="$CONFIG_COMMANDS include" ;; - "src") CONFIG_COMMANDS="$CONFIG_COMMANDS src" ;; - "include/ffitarget.h") CONFIG_LINKS="$CONFIG_LINKS include/ffitarget.h:src/$TARGETDIR/ffitarget.h" ;; -- "include/Makefile") CONFIG_FILES="$CONFIG_FILES include/Makefile" ;; - "include/ffi.h") CONFIG_FILES="$CONFIG_FILES include/ffi.h" ;; -- "Makefile") CONFIG_FILES="$CONFIG_FILES Makefile" ;; -- "testsuite/Makefile") CONFIG_FILES="$CONFIG_FILES testsuite/Makefile" ;; -- "man/Makefile") CONFIG_FILES="$CONFIG_FILES man/Makefile" ;; -- "libffi.pc") CONFIG_FILES="$CONFIG_FILES libffi.pc" ;; -+ "include/ffi_common.h") CONFIG_LINKS="$CONFIG_LINKS include/ffi_common.h:include/ffi_common.h" ;; -+ "fficonfig.py") CONFIG_FILES="$CONFIG_FILES fficonfig.py" ;; - - *) { { $as_echo "$as_me:$LINENO: error: invalid argument: $ac_config_target" >&5 - $as_echo "$as_me: error: invalid argument: $ac_config_target" >&2;} ---- libffi/src/x86/ffi64.c.orig 2009-12-29 16:22:26.000000000 +0100 -+++ libffi/src/x86/ffi64.c 2010-02-24 00:36:46.678610932 +0100 + AC_OUTPUT +diff -urN libffi.orig/src/x86/ffi64.c libffi/src/x86/ffi64.c +--- libffi.orig/src/x86/ffi64.c 2010-03-19 18:27:45.008523897 +0100 ++++ libffi/src/x86/ffi64.c 2010-03-19 18:24:36.437500070 +0100 @@ -52,7 +52,7 @@ /* Register class used for passing given 64bit part of the argument. These represent classes as documented by the PS ABI, with the exception @@ -135,8 +123,9 @@ Similary we play games with INTEGERSI_CLASS to use cheaper SImode moves whenever possible (upper half does contain padding). */ ---- libffi/src/x86/ffi.c.orig 2009-12-29 16:22:26.000000000 +0100 -+++ libffi/src/x86/ffi.c 2010-02-24 00:36:46.678610932 +0100 +diff -urN libffi.orig/src/x86/ffi.c libffi/src/x86/ffi.c +--- libffi.orig/src/x86/ffi.c 2010-03-19 18:27:45.008523897 +0100 ++++ libffi/src/x86/ffi.c 2010-03-19 18:24:36.441496039 +0100 @@ -594,10 +594,10 @@ return FFI_BAD_ABI; } Modified: python/branches/py3k/Modules/_ctypes/libffi/aclocal.m4 ============================================================================== --- python/branches/py3k/Modules/_ctypes/libffi/aclocal.m4 (original) +++ python/branches/py3k/Modules/_ctypes/libffi/aclocal.m4 Fri Mar 19 18:47:21 2010 @@ -1046,4 +1046,9 @@ AC_SUBST([am__untar]) ]) # _AM_PROG_TAR +m4_include([m4/libtool.m4]) +m4_include([m4/ltoptions.m4]) +m4_include([m4/ltsugar.m4]) +m4_include([m4/ltversion.m4]) +m4_include([m4/lt~obsolete.m4]) m4_include([acinclude.m4]) Modified: python/branches/py3k/Modules/_ctypes/libffi/configure ============================================================================== --- python/branches/py3k/Modules/_ctypes/libffi/configure (original) +++ python/branches/py3k/Modules/_ctypes/libffi/configure Fri Mar 19 18:47:21 2010 @@ -529,6 +529,155 @@ as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" + +# Check that we are running under the correct shell. +SHELL=${CONFIG_SHELL-/bin/sh} + +case X$lt_ECHO in +X*--fallback-echo) + # Remove one level of quotation (which was required for Make). + ECHO=`echo "$lt_ECHO" | sed 's,\\\\\$\\$0,'$0','` + ;; +esac + +ECHO=${lt_ECHO-echo} +if test "X$1" = X--no-reexec; then + # Discard the --no-reexec flag, and continue. + shift +elif test "X$1" = X--fallback-echo; then + # Avoid inline document here, it may be left over + : +elif test "X`{ $ECHO '\t'; } 2>/dev/null`" = 'X\t' ; then + # Yippee, $ECHO works! + : +else + # Restart under the correct shell. + exec $SHELL "$0" --no-reexec ${1+"$@"} +fi + +if test "X$1" = X--fallback-echo; then + # used as fallback echo + shift + cat <<_LT_EOF +$* +_LT_EOF + exit 0 +fi + +# The HP-UX ksh and POSIX shell print the target directory to stdout +# if CDPATH is set. +(unset CDPATH) >/dev/null 2>&1 && unset CDPATH + +if test -z "$lt_ECHO"; then + if test "X${echo_test_string+set}" != Xset; then + # find a string as large as possible, as long as the shell can cope with it + for cmd in 'sed 50q "$0"' 'sed 20q "$0"' 'sed 10q "$0"' 'sed 2q "$0"' 'echo test'; do + # expected sizes: less than 2Kb, 1Kb, 512 bytes, 16 bytes, ... + if { echo_test_string=`eval $cmd`; } 2>/dev/null && + { test "X$echo_test_string" = "X$echo_test_string"; } 2>/dev/null + then + break + fi + done + fi + + if test "X`{ $ECHO '\t'; } 2>/dev/null`" = 'X\t' && + echo_testing_string=`{ $ECHO "$echo_test_string"; } 2>/dev/null` && + test "X$echo_testing_string" = "X$echo_test_string"; then + : + else + # The Solaris, AIX, and Digital Unix default echo programs unquote + # backslashes. This makes it impossible to quote backslashes using + # echo "$something" | sed 's/\\/\\\\/g' + # + # So, first we look for a working echo in the user's PATH. + + lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR + for dir in $PATH /usr/ucb; do + IFS="$lt_save_ifs" + if (test -f $dir/echo || test -f $dir/echo$ac_exeext) && + test "X`($dir/echo '\t') 2>/dev/null`" = 'X\t' && + echo_testing_string=`($dir/echo "$echo_test_string") 2>/dev/null` && + test "X$echo_testing_string" = "X$echo_test_string"; then + ECHO="$dir/echo" + break + fi + done + IFS="$lt_save_ifs" + + if test "X$ECHO" = Xecho; then + # We didn't find a better echo, so look for alternatives. + if test "X`{ print -r '\t'; } 2>/dev/null`" = 'X\t' && + echo_testing_string=`{ print -r "$echo_test_string"; } 2>/dev/null` && + test "X$echo_testing_string" = "X$echo_test_string"; then + # This shell has a builtin print -r that does the trick. + ECHO='print -r' + elif { test -f /bin/ksh || test -f /bin/ksh$ac_exeext; } && + test "X$CONFIG_SHELL" != X/bin/ksh; then + # If we have ksh, try running configure again with it. + ORIGINAL_CONFIG_SHELL=${CONFIG_SHELL-/bin/sh} + export ORIGINAL_CONFIG_SHELL + CONFIG_SHELL=/bin/ksh + export CONFIG_SHELL + exec $CONFIG_SHELL "$0" --no-reexec ${1+"$@"} + else + # Try using printf. + ECHO='printf %s\n' + if test "X`{ $ECHO '\t'; } 2>/dev/null`" = 'X\t' && + echo_testing_string=`{ $ECHO "$echo_test_string"; } 2>/dev/null` && + test "X$echo_testing_string" = "X$echo_test_string"; then + # Cool, printf works + : + elif echo_testing_string=`($ORIGINAL_CONFIG_SHELL "$0" --fallback-echo '\t') 2>/dev/null` && + test "X$echo_testing_string" = 'X\t' && + echo_testing_string=`($ORIGINAL_CONFIG_SHELL "$0" --fallback-echo "$echo_test_string") 2>/dev/null` && + test "X$echo_testing_string" = "X$echo_test_string"; then + CONFIG_SHELL=$ORIGINAL_CONFIG_SHELL + export CONFIG_SHELL + SHELL="$CONFIG_SHELL" + export SHELL + ECHO="$CONFIG_SHELL $0 --fallback-echo" + elif echo_testing_string=`($CONFIG_SHELL "$0" --fallback-echo '\t') 2>/dev/null` && + test "X$echo_testing_string" = 'X\t' && + echo_testing_string=`($CONFIG_SHELL "$0" --fallback-echo "$echo_test_string") 2>/dev/null` && + test "X$echo_testing_string" = "X$echo_test_string"; then + ECHO="$CONFIG_SHELL $0 --fallback-echo" + else + # maybe with a smaller string... + prev=: + + for cmd in 'echo test' 'sed 2q "$0"' 'sed 10q "$0"' 'sed 20q "$0"' 'sed 50q "$0"'; do + if { test "X$echo_test_string" = "X`eval $cmd`"; } 2>/dev/null + then + break + fi + prev="$cmd" + done + + if test "$prev" != 'sed 50q "$0"'; then + echo_test_string=`eval $prev` + export echo_test_string + exec ${ORIGINAL_CONFIG_SHELL-${CONFIG_SHELL-/bin/sh}} "$0" ${1+"$@"} + else + # Oops. We lost completely, so just stick with echo. + ECHO=echo + fi + fi + fi + fi + fi +fi + +# Copy echo and quote the copy suitably for passing to libtool from +# the Makefile, instead of quoting the original, which is used later. +lt_ECHO=$ECHO +if test "X$lt_ECHO" = "X$CONFIG_SHELL $0 --fallback-echo"; then + lt_ECHO="$CONFIG_SHELL \\\$\$0 --fallback-echo" +fi + + + + test -n "$DJDIR" || exec 7<&0 &1 @@ -659,12 +808,29 @@ AM_RUNTESTFLAGS TESTSUBDIR_FALSE TESTSUBDIR_TRUE -EGREP -GREP -CPP MAINT MAINTAINER_MODE_FALSE MAINTAINER_MODE_TRUE +CPP +OTOOL64 +OTOOL +LIPO +NMEDIT +DSYMUTIL +lt_ECHO +RANLIB +AR +OBJDUMP +LN_S +NM +ac_ct_DUMPBIN +DUMPBIN +LD +FGREP +EGREP +GREP +SED +LIBTOOL am__fastdepCCAS_FALSE am__fastdepCCAS_TRUE CCASDEPMODE @@ -763,6 +929,12 @@ ac_user_opts=' enable_option_checking enable_dependency_tracking +enable_shared +enable_static +with_pic +enable_fast_install +with_gnu_ld +enable_libtool_lock enable_maintainer_mode enable_debug enable_structs @@ -1398,6 +1570,11 @@ --enable-FEATURE[=ARG] include FEATURE [ARG=yes] --disable-dependency-tracking speeds up one-time build --enable-dependency-tracking do not reject slow dependency extractors + --enable-shared[=PKGS] build shared libraries [default=yes] + --enable-static[=PKGS] build static libraries [default=yes] + --enable-fast-install[=PKGS] + optimize for fast installation [default=yes] + --disable-libtool-lock avoid locking (might break parallel builds) --enable-maintainer-mode enable make rules and dependencies not useful (and sometimes confusing) to the casual installer --enable-debug debugging mode @@ -1405,6 +1582,13 @@ --disable-raw-api make the raw api unavailable --enable-purify-safety purify-safe mode +Optional Packages: + --with-PACKAGE[=ARG] use PACKAGE [ARG=yes] + --without-PACKAGE do not use PACKAGE (same as --with-PACKAGE=no) + --with-pic try to use only PIC/non-PIC objects [default=use + both] + --with-gnu-ld assume the C compiler uses GNU ld [default=no] + Some influential environment variables: CC C compiler command CFLAGS C compiler flags @@ -1535,6 +1719,83 @@ } # ac_fn_c_try_compile +# ac_fn_c_try_link LINENO +# ----------------------- +# Try to link conftest.$ac_ext, and return whether this succeeded. +ac_fn_c_try_link () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + rm -f conftest.$ac_objext conftest$ac_exeext + if { { ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_link") 2>conftest.err + ac_status=$? + if test -s conftest.err; then + grep -v '^ *+' conftest.err >conftest.er1 + cat conftest.er1 >&5 + mv -f conftest.er1 conftest.err + fi + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest$ac_exeext && { + test "$cross_compiling" = yes || + $as_test_x conftest$ac_exeext + }; then : + ac_retval=0 +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_retval=1 +fi + # Delete the IPA/IPO (Inter Procedural Analysis/Optimization) information + # created by the PGI compiler (conftest_ipa8_conftest.oo), as it would + # interfere with the next link command; also delete a directory that is + # left behind by Apple's compiler. We do this before executing the actions. + rm -rf conftest.dSYM conftest_ipa8_conftest.oo + eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;} + as_fn_set_status $ac_retval + +} # ac_fn_c_try_link + +# ac_fn_c_check_header_compile LINENO HEADER VAR INCLUDES +# ------------------------------------------------------- +# Tests whether HEADER exists and can be compiled using the include files in +# INCLUDES, setting the cache variable VAR accordingly. +ac_fn_c_check_header_compile () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 +$as_echo_n "checking for $2... " >&6; } +if { as_var=$3; eval "test \"\${$as_var+set}\" = set"; }; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$4 +#include <$2> +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + eval "$3=yes" +else + eval "$3=no" +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +eval ac_res=\$$3 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } + eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;} + +} # ac_fn_c_check_header_compile + # ac_fn_c_try_cpp LINENO # ---------------------- # Try to preprocess conftest.$ac_ext, and return whether this succeeded. @@ -1572,6 +1833,115 @@ } # ac_fn_c_try_cpp +# ac_fn_c_try_run LINENO +# ---------------------- +# Try to link conftest.$ac_ext, and return whether this succeeded. Assumes +# that executables *can* be run. +ac_fn_c_try_run () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + if { { ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_link") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } && { ac_try='./conftest$ac_exeext' + { { case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_try") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then : + ac_retval=0 +else + $as_echo "$as_me: program exited with status $ac_status" >&5 + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_retval=$ac_status +fi + rm -rf conftest.dSYM conftest_ipa8_conftest.oo + eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;} + as_fn_set_status $ac_retval + +} # ac_fn_c_try_run + +# ac_fn_c_check_func LINENO FUNC VAR +# ---------------------------------- +# Tests whether FUNC exists, setting the cache variable VAR accordingly +ac_fn_c_check_func () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 +$as_echo_n "checking for $2... " >&6; } +if { as_var=$3; eval "test \"\${$as_var+set}\" = set"; }; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +/* Define $2 to an innocuous variant, in case declares $2. + For example, HP-UX 11i declares gettimeofday. */ +#define $2 innocuous_$2 + +/* System header to define __stub macros and hopefully few prototypes, + which can conflict with char $2 (); below. + Prefer to if __STDC__ is defined, since + exists even on freestanding compilers. */ + +#ifdef __STDC__ +# include +#else +# include +#endif + +#undef $2 + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char $2 (); +/* The GNU C library defines this for functions which it implements + to always fail with ENOSYS. Some functions are actually named + something starting with __ and the normal name is an alias. */ +#if defined __stub_$2 || defined __stub___$2 +choke me +#endif + +int +main () +{ +return $2 (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + eval "$3=yes" +else + eval "$3=no" +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +fi +eval ac_res=\$$3 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } + eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;} + +} # ac_fn_c_check_func + # ac_fn_c_check_header_mongrel LINENO HEADER VAR INCLUDES # ------------------------------------------------------- # Tests whether HEADER exists, giving a warning if it cannot be compiled using @@ -1665,198 +2035,12 @@ } # ac_fn_c_check_header_mongrel -# ac_fn_c_try_run LINENO -# ---------------------- -# Try to link conftest.$ac_ext, and return whether this succeeded. Assumes -# that executables *can* be run. -ac_fn_c_try_run () -{ - as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - if { { ac_try="$ac_link" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 - (eval "$ac_link") 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; } && { ac_try='./conftest$ac_exeext' - { { case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 - (eval "$ac_try") 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; }; then : - ac_retval=0 -else - $as_echo "$as_me: program exited with status $ac_status" >&5 - $as_echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_retval=$ac_status -fi - rm -rf conftest.dSYM conftest_ipa8_conftest.oo - eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;} - as_fn_set_status $ac_retval - -} # ac_fn_c_try_run - -# ac_fn_c_check_header_compile LINENO HEADER VAR INCLUDES -# ------------------------------------------------------- -# Tests whether HEADER exists and can be compiled using the include files in -# INCLUDES, setting the cache variable VAR accordingly. -ac_fn_c_check_header_compile () -{ - as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 -$as_echo_n "checking for $2... " >&6; } -if { as_var=$3; eval "test \"\${$as_var+set}\" = set"; }; then : - $as_echo_n "(cached) " >&6 -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -$4 -#include <$2> -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - eval "$3=yes" -else - eval "$3=no" -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -fi -eval ac_res=\$$3 - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 -$as_echo "$ac_res" >&6; } - eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;} - -} # ac_fn_c_check_header_compile - -# ac_fn_c_try_link LINENO -# ----------------------- -# Try to link conftest.$ac_ext, and return whether this succeeded. -ac_fn_c_try_link () -{ - as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - rm -f conftest.$ac_objext conftest$ac_exeext - if { { ac_try="$ac_link" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 - (eval "$ac_link") 2>conftest.err - ac_status=$? - if test -s conftest.err; then - grep -v '^ *+' conftest.err >conftest.er1 - cat conftest.er1 >&5 - mv -f conftest.er1 conftest.err - fi - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest$ac_exeext && { - test "$cross_compiling" = yes || - $as_test_x conftest$ac_exeext - }; then : - ac_retval=0 -else - $as_echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_retval=1 -fi - # Delete the IPA/IPO (Inter Procedural Analysis/Optimization) information - # created by the PGI compiler (conftest_ipa8_conftest.oo), as it would - # interfere with the next link command; also delete a directory that is - # left behind by Apple's compiler. We do this before executing the actions. - rm -rf conftest.dSYM conftest_ipa8_conftest.oo - eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;} - as_fn_set_status $ac_retval - -} # ac_fn_c_try_link - -# ac_fn_c_check_func LINENO FUNC VAR -# ---------------------------------- -# Tests whether FUNC exists, setting the cache variable VAR accordingly -ac_fn_c_check_func () -{ - as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 -$as_echo_n "checking for $2... " >&6; } -if { as_var=$3; eval "test \"\${$as_var+set}\" = set"; }; then : - $as_echo_n "(cached) " >&6 -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -/* Define $2 to an innocuous variant, in case declares $2. - For example, HP-UX 11i declares gettimeofday. */ -#define $2 innocuous_$2 - -/* System header to define __stub macros and hopefully few prototypes, - which can conflict with char $2 (); below. - Prefer to if __STDC__ is defined, since - exists even on freestanding compilers. */ - -#ifdef __STDC__ -# include -#else -# include -#endif - -#undef $2 - -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char $2 (); -/* The GNU C library defines this for functions which it implements - to always fail with ENOSYS. Some functions are actually named - something starting with __ and the normal name is an alias. */ -#if defined __stub_$2 || defined __stub___$2 -choke me -#endif - -int -main () -{ -return $2 (); - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - eval "$3=yes" -else - eval "$3=no" -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -fi -eval ac_res=\$$3 - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 -$as_echo "$ac_res" >&6; } - eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;} - -} # ac_fn_c_check_func - -# ac_fn_c_compute_int LINENO EXPR VAR INCLUDES -# -------------------------------------------- -# Tries to find the compile-time value of EXPR in a program that includes -# INCLUDES, setting VAR accordingly. Returns whether the value could be -# computed -ac_fn_c_compute_int () +# ac_fn_c_compute_int LINENO EXPR VAR INCLUDES +# -------------------------------------------- +# Tries to find the compile-time value of EXPR in a program that includes +# INCLUDES, setting VAR accordingly. Returns whether the value could be +# computed +ac_fn_c_compute_int () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack if test "$cross_compiling" = yes; then @@ -4249,170 +4433,111 @@ fi -AC_PROG_LIBTOOL +case `pwd` in + *\ * | *\ *) + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Libtool does not cope well with whitespace in \`pwd\`" >&5 +$as_echo "$as_me: WARNING: Libtool does not cope well with whitespace in \`pwd\`" >&2;} ;; +esac -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to enable maintainer-specific portions of Makefiles" >&5 -$as_echo_n "checking whether to enable maintainer-specific portions of Makefiles... " >&6; } - # Check whether --enable-maintainer-mode was given. -if test "${enable_maintainer_mode+set}" = set; then : - enableval=$enable_maintainer_mode; USE_MAINTAINER_MODE=$enableval -else - USE_MAINTAINER_MODE=no -fi +macro_version='2.2.6' +macro_revision='1.3012' - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $USE_MAINTAINER_MODE" >&5 -$as_echo "$USE_MAINTAINER_MODE" >&6; } - if test $USE_MAINTAINER_MODE = yes; then - MAINTAINER_MODE_TRUE= - MAINTAINER_MODE_FALSE='#' -else - MAINTAINER_MODE_TRUE='#' - MAINTAINER_MODE_FALSE= -fi - MAINT=$MAINTAINER_MODE_TRUE -ac_ext=c -ac_cpp='$CPP $CPPFLAGS' -ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_c_compiler_gnu -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to run the C preprocessor" >&5 -$as_echo_n "checking how to run the C preprocessor... " >&6; } -# On Suns, sometimes $CPP names a directory. -if test -n "$CPP" && test -d "$CPP"; then - CPP= -fi -if test -z "$CPP"; then - if test "${ac_cv_prog_CPP+set}" = set; then : + + + + + + + +ltmain="$ac_aux_dir/ltmain.sh" + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a sed that does not truncate output" >&5 +$as_echo_n "checking for a sed that does not truncate output... " >&6; } +if test "${ac_cv_path_SED+set}" = set; then : $as_echo_n "(cached) " >&6 else - # Double quotes because CPP needs to be expanded - for CPP in "$CC -E" "$CC -E -traditional-cpp" "/lib/cpp" - do - ac_preproc_ok=false -for ac_c_preproc_warn_flag in '' yes + ac_script=s/aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb/ + for ac_i in 1 2 3 4 5 6 7; do + ac_script="$ac_script$as_nl$ac_script" + done + echo "$ac_script" 2>/dev/null | sed 99q >conftest.sed + { ac_script=; unset ac_script;} + if test -z "$SED"; then + ac_path_SED_found=false + # Loop through the user's path and test for each of PROGNAME-LIST + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH do - # Use a header file that comes with gcc, so configuring glibc - # with a fresh cross-compiler works. - # Prefer to if __STDC__ is defined, since - # exists even on freestanding compilers. - # On the NeXT, cc -E runs the code through the compiler's parser, - # not just through cpp. "Syntax error" is here to catch this case. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#ifdef __STDC__ -# include -#else -# include -#endif - Syntax error -_ACEOF -if ac_fn_c_try_cpp "$LINENO"; then : - -else - # Broken: fails on valid input. -continue -fi -rm -f conftest.err conftest.$ac_ext - - # OK, works on sane cases. Now check whether nonexistent headers - # can be detected and how. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include -_ACEOF -if ac_fn_c_try_cpp "$LINENO"; then : - # Broken: success on invalid input. -continue + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_prog in sed gsed; do + for ac_exec_ext in '' $ac_executable_extensions; do + ac_path_SED="$as_dir/$ac_prog$ac_exec_ext" + { test -f "$ac_path_SED" && $as_test_x "$ac_path_SED"; } || continue +# Check for GNU ac_path_SED and select it if it is found. + # Check for GNU $ac_path_SED +case `"$ac_path_SED" --version 2>&1` in +*GNU*) + ac_cv_path_SED="$ac_path_SED" ac_path_SED_found=:;; +*) + ac_count=0 + $as_echo_n 0123456789 >"conftest.in" + while : + do + cat "conftest.in" "conftest.in" >"conftest.tmp" + mv "conftest.tmp" "conftest.in" + cp "conftest.in" "conftest.nl" + $as_echo '' >> "conftest.nl" + "$ac_path_SED" -f conftest.sed < "conftest.nl" >"conftest.out" 2>/dev/null || break + diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break + as_fn_arith $ac_count + 1 && ac_count=$as_val + if test $ac_count -gt ${ac_path_SED_max-0}; then + # Best one so far, save it but keep looking for a better one + ac_cv_path_SED="$ac_path_SED" + ac_path_SED_max=$ac_count + fi + # 10*(2^10) chars as input seems more than enough + test $ac_count -gt 10 && break + done + rm -f conftest.in conftest.tmp conftest.nl conftest.out;; +esac + + $ac_path_SED_found && break 3 + done + done + done +IFS=$as_save_IFS + if test -z "$ac_cv_path_SED"; then + as_fn_error "no acceptable sed could be found in \$PATH" "$LINENO" 5 + fi else - # Passes both tests. -ac_preproc_ok=: -break + ac_cv_path_SED=$SED fi -rm -f conftest.err conftest.$ac_ext -done -# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. -rm -f conftest.err conftest.$ac_ext -if $ac_preproc_ok; then : - break fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_SED" >&5 +$as_echo "$ac_cv_path_SED" >&6; } + SED="$ac_cv_path_SED" + rm -f conftest.sed + +test -z "$SED" && SED=sed +Xsed="$SED -e 1s/^X//" + + - done - ac_cv_prog_CPP=$CPP -fi - CPP=$ac_cv_prog_CPP -else - ac_cv_prog_CPP=$CPP -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $CPP" >&5 -$as_echo "$CPP" >&6; } -ac_preproc_ok=false -for ac_c_preproc_warn_flag in '' yes -do - # Use a header file that comes with gcc, so configuring glibc - # with a fresh cross-compiler works. - # Prefer to if __STDC__ is defined, since - # exists even on freestanding compilers. - # On the NeXT, cc -E runs the code through the compiler's parser, - # not just through cpp. "Syntax error" is here to catch this case. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#ifdef __STDC__ -# include -#else -# include -#endif - Syntax error -_ACEOF -if ac_fn_c_try_cpp "$LINENO"; then : -else - # Broken: fails on valid input. -continue -fi -rm -f conftest.err conftest.$ac_ext - # OK, works on sane cases. Now check whether nonexistent headers - # can be detected and how. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include -_ACEOF -if ac_fn_c_try_cpp "$LINENO"; then : - # Broken: success on invalid input. -continue -else - # Passes both tests. -ac_preproc_ok=: -break -fi -rm -f conftest.err conftest.$ac_ext -done -# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. -rm -f conftest.err conftest.$ac_ext -if $ac_preproc_ok; then : -else - { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} -as_fn_error "C preprocessor \"$CPP\" fails sanity check -See \`config.log' for more details." "$LINENO" 5; } -fi -ac_ext=c -ac_cpp='$CPP $CPPFLAGS' -ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_c_compiler_gnu { $as_echo "$as_me:${as_lineno-$LINENO}: checking for grep that handles long lines and -e" >&5 @@ -4545,134 +4670,6336 @@ EGREP="$ac_cv_path_EGREP" -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for ANSI C header files" >&5 -$as_echo_n "checking for ANSI C header files... " >&6; } -if test "${ac_cv_header_stdc+set}" = set; then : +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for fgrep" >&5 +$as_echo_n "checking for fgrep... " >&6; } +if test "${ac_cv_path_FGREP+set}" = set; then : $as_echo_n "(cached) " >&6 else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include -#include -#include -#include - -int -main () -{ + if echo 'ab*c' | $GREP -F 'ab*c' >/dev/null 2>&1 + then ac_cv_path_FGREP="$GREP -F" + else + if test -z "$FGREP"; then + ac_path_FGREP_found=false + # Loop through the user's path and test for each of PROGNAME-LIST + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_prog in fgrep; do + for ac_exec_ext in '' $ac_executable_extensions; do + ac_path_FGREP="$as_dir/$ac_prog$ac_exec_ext" + { test -f "$ac_path_FGREP" && $as_test_x "$ac_path_FGREP"; } || continue +# Check for GNU ac_path_FGREP and select it if it is found. + # Check for GNU $ac_path_FGREP +case `"$ac_path_FGREP" --version 2>&1` in +*GNU*) + ac_cv_path_FGREP="$ac_path_FGREP" ac_path_FGREP_found=:;; +*) + ac_count=0 + $as_echo_n 0123456789 >"conftest.in" + while : + do + cat "conftest.in" "conftest.in" >"conftest.tmp" + mv "conftest.tmp" "conftest.in" + cp "conftest.in" "conftest.nl" + $as_echo 'FGREP' >> "conftest.nl" + "$ac_path_FGREP" FGREP < "conftest.nl" >"conftest.out" 2>/dev/null || break + diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break + as_fn_arith $ac_count + 1 && ac_count=$as_val + if test $ac_count -gt ${ac_path_FGREP_max-0}; then + # Best one so far, save it but keep looking for a better one + ac_cv_path_FGREP="$ac_path_FGREP" + ac_path_FGREP_max=$ac_count + fi + # 10*(2^10) chars as input seems more than enough + test $ac_count -gt 10 && break + done + rm -f conftest.in conftest.tmp conftest.nl conftest.out;; +esac - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - ac_cv_header_stdc=yes + $ac_path_FGREP_found && break 3 + done + done + done +IFS=$as_save_IFS + if test -z "$ac_cv_path_FGREP"; then + as_fn_error "no acceptable fgrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 + fi else - ac_cv_header_stdc=no + ac_cv_path_FGREP=$FGREP fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -if test $ac_cv_header_stdc = yes; then - # SunOS 4.x string.h does not declare mem*, contrary to ANSI. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include + fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_FGREP" >&5 +$as_echo "$ac_cv_path_FGREP" >&6; } + FGREP="$ac_cv_path_FGREP" + + +test -z "$GREP" && GREP=grep -_ACEOF -if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | - $EGREP "memchr" >/dev/null 2>&1; then : -else - ac_cv_header_stdc=no -fi -rm -f conftest* -fi -if test $ac_cv_header_stdc = yes; then - # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include -_ACEOF -if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | - $EGREP "free" >/dev/null 2>&1; then : -else - ac_cv_header_stdc=no -fi -rm -f conftest* -fi -if test $ac_cv_header_stdc = yes; then - # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi. - if test "$cross_compiling" = yes; then : - : -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include -#include -#if ((' ' & 0x0FF) == 0x020) -# define ISLOWER(c) ('a' <= (c) && (c) <= 'z') -# define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c)) -#else -# define ISLOWER(c) \ - (('a' <= (c) && (c) <= 'i') \ - || ('j' <= (c) && (c) <= 'r') \ - || ('s' <= (c) && (c) <= 'z')) -# define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c)) -#endif -#define XOR(e, f) (((e) && !(f)) || (!(e) && (f))) -int -main () -{ - int i; - for (i = 0; i < 256; i++) - if (XOR (islower (i), ISLOWER (i)) - || toupper (i) != TOUPPER (i)) - return 2; - return 0; -} -_ACEOF -if ac_fn_c_try_run "$LINENO"; then : + + + + + + + + + +# Check whether --with-gnu-ld was given. +if test "${with_gnu_ld+set}" = set; then : + withval=$with_gnu_ld; test "$withval" = no || with_gnu_ld=yes else - ac_cv_header_stdc=no -fi -rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ - conftest.$ac_objext conftest.beam conftest.$ac_ext + with_gnu_ld=no fi +ac_prog=ld +if test "$GCC" = yes; then + # Check if gcc -print-prog-name=ld gives a path. + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ld used by $CC" >&5 +$as_echo_n "checking for ld used by $CC... " >&6; } + case $host in + *-*-mingw*) + # gcc leaves a trailing carriage return which upsets mingw + ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;; + *) + ac_prog=`($CC -print-prog-name=ld) 2>&5` ;; + esac + case $ac_prog in + # Accept absolute paths. + [\\/]* | ?:[\\/]*) + re_direlt='/[^/][^/]*/\.\./' + # Canonicalize the pathname of ld + ac_prog=`$ECHO "$ac_prog"| $SED 's%\\\\%/%g'` + while $ECHO "$ac_prog" | $GREP "$re_direlt" > /dev/null 2>&1; do + ac_prog=`$ECHO $ac_prog| $SED "s%$re_direlt%/%"` + done + test -z "$LD" && LD="$ac_prog" + ;; + "") + # If it fails, then pretend we aren't using GCC. + ac_prog=ld + ;; + *) + # If it is relative, then search for the first ld in PATH. + with_gnu_ld=unknown + ;; + esac +elif test "$with_gnu_ld" = yes; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for GNU ld" >&5 +$as_echo_n "checking for GNU ld... " >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for non-GNU ld" >&5 +$as_echo_n "checking for non-GNU ld... " >&6; } +fi +if test "${lt_cv_path_LD+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test -z "$LD"; then + lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR + for ac_dir in $PATH; do + IFS="$lt_save_ifs" + test -z "$ac_dir" && ac_dir=. + if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then + lt_cv_path_LD="$ac_dir/$ac_prog" + # Check to see if the program is GNU ld. I'd rather use --version, + # but apparently some variants of GNU ld only accept -v. + # Break only if it was the GNU/non-GNU ld that we prefer. + case `"$lt_cv_path_LD" -v 2>&1 &5 -$as_echo "$ac_cv_header_stdc" >&6; } -if test $ac_cv_header_stdc = yes; then - -$as_echo "#define STDC_HEADERS 1" >>confdefs.h +LD="$lt_cv_path_LD" +if test -n "$LD"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LD" >&5 +$as_echo "$LD" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi +test -z "$LD" && as_fn_error "no acceptable ld found in \$PATH" "$LINENO" 5 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if the linker ($LD) is GNU ld" >&5 +$as_echo_n "checking if the linker ($LD) is GNU ld... " >&6; } +if test "${lt_cv_prog_gnu_ld+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + # I'd rather use --version here, but apparently some GNU lds only accept -v. +case `$LD -v 2>&1 &5 +$as_echo "$lt_cv_prog_gnu_ld" >&6; } +with_gnu_ld=$lt_cv_prog_gnu_ld + + + + + + + + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for BSD- or MS-compatible name lister (nm)" >&5 +$as_echo_n "checking for BSD- or MS-compatible name lister (nm)... " >&6; } +if test "${lt_cv_path_NM+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$NM"; then + # Let the user override the test. + lt_cv_path_NM="$NM" +else + lt_nm_to_check="${ac_tool_prefix}nm" + if test -n "$ac_tool_prefix" && test "$build" = "$host"; then + lt_nm_to_check="$lt_nm_to_check nm" + fi + for lt_tmp_nm in $lt_nm_to_check; do + lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR + for ac_dir in $PATH /usr/ccs/bin/elf /usr/ccs/bin /usr/ucb /bin; do + IFS="$lt_save_ifs" + test -z "$ac_dir" && ac_dir=. + tmp_nm="$ac_dir/$lt_tmp_nm" + if test -f "$tmp_nm" || test -f "$tmp_nm$ac_exeext" ; then + # Check to see if the nm accepts a BSD-compat flag. + # Adding the `sed 1q' prevents false positives on HP-UX, which says: + # nm: unknown option "B" ignored + # Tru64's nm complains that /dev/null is an invalid object file + case `"$tmp_nm" -B /dev/null 2>&1 | sed '1q'` in + */dev/null* | *'Invalid file or object type'*) + lt_cv_path_NM="$tmp_nm -B" + break + ;; + *) + case `"$tmp_nm" -p /dev/null 2>&1 | sed '1q'` in + */dev/null*) + lt_cv_path_NM="$tmp_nm -p" + break + ;; + *) + lt_cv_path_NM=${lt_cv_path_NM="$tmp_nm"} # keep the first match, but + continue # so that we can try to find one that supports BSD flags + ;; + esac + ;; + esac + fi + done + IFS="$lt_save_ifs" + done + : ${lt_cv_path_NM=no} +fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_path_NM" >&5 +$as_echo "$lt_cv_path_NM" >&6; } +if test "$lt_cv_path_NM" != "no"; then + NM="$lt_cv_path_NM" +else + # Didn't find any BSD compatible name lister, look for dumpbin. + if test -n "$ac_tool_prefix"; then + for ac_prog in "dumpbin -symbols" "link -dump -symbols" + do + # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. +set dummy $ac_tool_prefix$ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_DUMPBIN+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$DUMPBIN"; then + ac_cv_prog_DUMPBIN="$DUMPBIN" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_DUMPBIN="$ac_tool_prefix$ac_prog" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +DUMPBIN=$ac_cv_prog_DUMPBIN +if test -n "$DUMPBIN"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DUMPBIN" >&5 +$as_echo "$DUMPBIN" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$DUMPBIN" && break + done +fi +if test -z "$DUMPBIN"; then + ac_ct_DUMPBIN=$DUMPBIN + for ac_prog in "dumpbin -symbols" "link -dump -symbols" +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_ac_ct_DUMPBIN+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_DUMPBIN"; then + ac_cv_prog_ac_ct_DUMPBIN="$ac_ct_DUMPBIN" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_ac_ct_DUMPBIN="$ac_prog" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_DUMPBIN=$ac_cv_prog_ac_ct_DUMPBIN +if test -n "$ac_ct_DUMPBIN"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DUMPBIN" >&5 +$as_echo "$ac_ct_DUMPBIN" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$ac_ct_DUMPBIN" && break +done + + if test "x$ac_ct_DUMPBIN" = x; then + DUMPBIN=":" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + DUMPBIN=$ac_ct_DUMPBIN + fi +fi + + + if test "$DUMPBIN" != ":"; then + NM="$DUMPBIN" + fi +fi +test -z "$NM" && NM=nm + + + + + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking the name lister ($NM) interface" >&5 +$as_echo_n "checking the name lister ($NM) interface... " >&6; } +if test "${lt_cv_nm_interface+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_nm_interface="BSD nm" + echo "int some_variable = 0;" > conftest.$ac_ext + (eval echo "\"\$as_me:5045: $ac_compile\"" >&5) + (eval "$ac_compile" 2>conftest.err) + cat conftest.err >&5 + (eval echo "\"\$as_me:5048: $NM \\\"conftest.$ac_objext\\\"\"" >&5) + (eval "$NM \"conftest.$ac_objext\"" 2>conftest.err > conftest.out) + cat conftest.err >&5 + (eval echo "\"\$as_me:5051: output\"" >&5) + cat conftest.out >&5 + if $GREP 'External.*some_variable' conftest.out > /dev/null; then + lt_cv_nm_interface="MS dumpbin" + fi + rm -f conftest* +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_nm_interface" >&5 +$as_echo "$lt_cv_nm_interface" >&6; } + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ln -s works" >&5 +$as_echo_n "checking whether ln -s works... " >&6; } +LN_S=$as_ln_s +if test "$LN_S" = "ln -s"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no, using $LN_S" >&5 +$as_echo "no, using $LN_S" >&6; } +fi + +# find the maximum length of command line arguments +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking the maximum length of command line arguments" >&5 +$as_echo_n "checking the maximum length of command line arguments... " >&6; } +if test "${lt_cv_sys_max_cmd_len+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + i=0 + teststring="ABCD" + + case $build_os in + msdosdjgpp*) + # On DJGPP, this test can blow up pretty badly due to problems in libc + # (any single argument exceeding 2000 bytes causes a buffer overrun + # during glob expansion). Even if it were fixed, the result of this + # check would be larger than it should be. + lt_cv_sys_max_cmd_len=12288; # 12K is about right + ;; + + gnu*) + # Under GNU Hurd, this test is not required because there is + # no limit to the length of command line arguments. + # Libtool will interpret -1 as no limit whatsoever + lt_cv_sys_max_cmd_len=-1; + ;; + + cygwin* | mingw* | cegcc*) + # On Win9x/ME, this test blows up -- it succeeds, but takes + # about 5 minutes as the teststring grows exponentially. + # Worse, since 9x/ME are not pre-emptively multitasking, + # you end up with a "frozen" computer, even though with patience + # the test eventually succeeds (with a max line length of 256k). + # Instead, let's just punt: use the minimum linelength reported by + # all of the supported platforms: 8192 (on NT/2K/XP). + lt_cv_sys_max_cmd_len=8192; + ;; + + amigaos*) + # On AmigaOS with pdksh, this test takes hours, literally. + # So we just punt and use a minimum line length of 8192. + lt_cv_sys_max_cmd_len=8192; + ;; + + netbsd* | freebsd* | openbsd* | darwin* | dragonfly*) + # This has been around since 386BSD, at least. Likely further. + if test -x /sbin/sysctl; then + lt_cv_sys_max_cmd_len=`/sbin/sysctl -n kern.argmax` + elif test -x /usr/sbin/sysctl; then + lt_cv_sys_max_cmd_len=`/usr/sbin/sysctl -n kern.argmax` + else + lt_cv_sys_max_cmd_len=65536 # usable default for all BSDs + fi + # And add a safety zone + lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4` + lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3` + ;; + + interix*) + # We know the value 262144 and hardcode it with a safety zone (like BSD) + lt_cv_sys_max_cmd_len=196608 + ;; + + osf*) + # Dr. Hans Ekkehard Plesser reports seeing a kernel panic running configure + # due to this test when exec_disable_arg_limit is 1 on Tru64. It is not + # nice to cause kernel panics so lets avoid the loop below. + # First set a reasonable default. + lt_cv_sys_max_cmd_len=16384 + # + if test -x /sbin/sysconfig; then + case `/sbin/sysconfig -q proc exec_disable_arg_limit` in + *1*) lt_cv_sys_max_cmd_len=-1 ;; + esac + fi + ;; + sco3.2v5*) + lt_cv_sys_max_cmd_len=102400 + ;; + sysv5* | sco5v6* | sysv4.2uw2*) + kargmax=`grep ARG_MAX /etc/conf/cf.d/stune 2>/dev/null` + if test -n "$kargmax"; then + lt_cv_sys_max_cmd_len=`echo $kargmax | sed 's/.*[ ]//'` + else + lt_cv_sys_max_cmd_len=32768 + fi + ;; + *) + lt_cv_sys_max_cmd_len=`(getconf ARG_MAX) 2> /dev/null` + if test -n "$lt_cv_sys_max_cmd_len"; then + lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4` + lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3` + else + # Make teststring a little bigger before we do anything with it. + # a 1K string should be a reasonable start. + for i in 1 2 3 4 5 6 7 8 ; do + teststring=$teststring$teststring + done + SHELL=${SHELL-${CONFIG_SHELL-/bin/sh}} + # If test is not a shell built-in, we'll probably end up computing a + # maximum length that is only half of the actual maximum length, but + # we can't tell. + while { test "X"`$SHELL $0 --fallback-echo "X$teststring$teststring" 2>/dev/null` \ + = "XX$teststring$teststring"; } >/dev/null 2>&1 && + test $i != 17 # 1/2 MB should be enough + do + i=`expr $i + 1` + teststring=$teststring$teststring + done + # Only check the string length outside the loop. + lt_cv_sys_max_cmd_len=`expr "X$teststring" : ".*" 2>&1` + teststring= + # Add a significant safety factor because C++ compilers can tack on + # massive amounts of additional arguments before passing them to the + # linker. It appears as though 1/2 is a usable value. + lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 2` + fi + ;; + esac + +fi + +if test -n $lt_cv_sys_max_cmd_len ; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_sys_max_cmd_len" >&5 +$as_echo "$lt_cv_sys_max_cmd_len" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: none" >&5 +$as_echo "none" >&6; } +fi +max_cmd_len=$lt_cv_sys_max_cmd_len + + + + + + +: ${CP="cp -f"} +: ${MV="mv -f"} +: ${RM="rm -f"} + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the shell understands some XSI constructs" >&5 +$as_echo_n "checking whether the shell understands some XSI constructs... " >&6; } +# Try some XSI features +xsi_shell=no +( _lt_dummy="a/b/c" + test "${_lt_dummy##*/},${_lt_dummy%/*},"${_lt_dummy%"$_lt_dummy"}, \ + = c,a/b,, \ + && eval 'test $(( 1 + 1 )) -eq 2 \ + && test "${#_lt_dummy}" -eq 5' ) >/dev/null 2>&1 \ + && xsi_shell=yes +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $xsi_shell" >&5 +$as_echo "$xsi_shell" >&6; } + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the shell understands \"+=\"" >&5 +$as_echo_n "checking whether the shell understands \"+=\"... " >&6; } +lt_shell_append=no +( foo=bar; set foo baz; eval "$1+=\$2" && test "$foo" = barbaz ) \ + >/dev/null 2>&1 \ + && lt_shell_append=yes +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_shell_append" >&5 +$as_echo "$lt_shell_append" >&6; } + + +if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then + lt_unset=unset +else + lt_unset=false +fi + + + + + +# test EBCDIC or ASCII +case `echo X|tr X '\101'` in + A) # ASCII based system + # \n is not interpreted correctly by Solaris 8 /usr/ucb/tr + lt_SP2NL='tr \040 \012' + lt_NL2SP='tr \015\012 \040\040' + ;; + *) # EBCDIC based system + lt_SP2NL='tr \100 \n' + lt_NL2SP='tr \r\n \100\100' + ;; +esac + + + + + + + + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $LD option to reload object files" >&5 +$as_echo_n "checking for $LD option to reload object files... " >&6; } +if test "${lt_cv_ld_reload_flag+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_ld_reload_flag='-r' +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ld_reload_flag" >&5 +$as_echo "$lt_cv_ld_reload_flag" >&6; } +reload_flag=$lt_cv_ld_reload_flag +case $reload_flag in +"" | " "*) ;; +*) reload_flag=" $reload_flag" ;; +esac +reload_cmds='$LD$reload_flag -o $output$reload_objs' +case $host_os in + darwin*) + if test "$GCC" = yes; then + reload_cmds='$LTCC $LTCFLAGS -nostdlib ${wl}-r -o $output$reload_objs' + else + reload_cmds='$LD$reload_flag -o $output$reload_objs' + fi + ;; +esac + + + + + + + + + +if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}objdump", so it can be a program name with args. +set dummy ${ac_tool_prefix}objdump; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_OBJDUMP+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$OBJDUMP"; then + ac_cv_prog_OBJDUMP="$OBJDUMP" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_OBJDUMP="${ac_tool_prefix}objdump" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +OBJDUMP=$ac_cv_prog_OBJDUMP +if test -n "$OBJDUMP"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OBJDUMP" >&5 +$as_echo "$OBJDUMP" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_OBJDUMP"; then + ac_ct_OBJDUMP=$OBJDUMP + # Extract the first word of "objdump", so it can be a program name with args. +set dummy objdump; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_ac_ct_OBJDUMP+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_OBJDUMP"; then + ac_cv_prog_ac_ct_OBJDUMP="$ac_ct_OBJDUMP" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_ac_ct_OBJDUMP="objdump" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_OBJDUMP=$ac_cv_prog_ac_ct_OBJDUMP +if test -n "$ac_ct_OBJDUMP"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OBJDUMP" >&5 +$as_echo "$ac_ct_OBJDUMP" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_OBJDUMP" = x; then + OBJDUMP="false" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + OBJDUMP=$ac_ct_OBJDUMP + fi +else + OBJDUMP="$ac_cv_prog_OBJDUMP" +fi + +test -z "$OBJDUMP" && OBJDUMP=objdump + + + + + + + + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to recognize dependent libraries" >&5 +$as_echo_n "checking how to recognize dependent libraries... " >&6; } +if test "${lt_cv_deplibs_check_method+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_file_magic_cmd='$MAGIC_CMD' +lt_cv_file_magic_test_file= +lt_cv_deplibs_check_method='unknown' +# Need to set the preceding variable on all platforms that support +# interlibrary dependencies. +# 'none' -- dependencies not supported. +# `unknown' -- same as none, but documents that we really don't know. +# 'pass_all' -- all dependencies passed with no checks. +# 'test_compile' -- check by making test program. +# 'file_magic [[regex]]' -- check by looking for files in library path +# which responds to the $file_magic_cmd with a given extended regex. +# If you have `file' or equivalent on your system and you're not sure +# whether `pass_all' will *always* work, you probably want this one. + +case $host_os in +aix[4-9]*) + lt_cv_deplibs_check_method=pass_all + ;; + +beos*) + lt_cv_deplibs_check_method=pass_all + ;; + +bsdi[45]*) + lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (shared object|dynamic lib)' + lt_cv_file_magic_cmd='/usr/bin/file -L' + lt_cv_file_magic_test_file=/shlib/libc.so + ;; + +cygwin*) + # func_win32_libid is a shell function defined in ltmain.sh + lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL' + lt_cv_file_magic_cmd='func_win32_libid' + ;; + +mingw* | pw32*) + # Base MSYS/MinGW do not provide the 'file' command needed by + # func_win32_libid shell function, so use a weaker test based on 'objdump', + # unless we find 'file', for example because we are cross-compiling. + if ( file / ) >/dev/null 2>&1; then + lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL' + lt_cv_file_magic_cmd='func_win32_libid' + else + lt_cv_deplibs_check_method='file_magic file format pei*-i386(.*architecture: i386)?' + lt_cv_file_magic_cmd='$OBJDUMP -f' + fi + ;; + +cegcc) + # use the weaker test based on 'objdump'. See mingw*. + lt_cv_deplibs_check_method='file_magic file format pe-arm-.*little(.*architecture: arm)?' + lt_cv_file_magic_cmd='$OBJDUMP -f' + ;; + +darwin* | rhapsody*) + lt_cv_deplibs_check_method=pass_all + ;; + +freebsd* | dragonfly*) + if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then + case $host_cpu in + i*86 ) + # Not sure whether the presence of OpenBSD here was a mistake. + # Let's accept both of them until this is cleared up. + lt_cv_deplibs_check_method='file_magic (FreeBSD|OpenBSD|DragonFly)/i[3-9]86 (compact )?demand paged shared library' + lt_cv_file_magic_cmd=/usr/bin/file + lt_cv_file_magic_test_file=`echo /usr/lib/libc.so.*` + ;; + esac + else + lt_cv_deplibs_check_method=pass_all + fi + ;; + +gnu*) + lt_cv_deplibs_check_method=pass_all + ;; + +hpux10.20* | hpux11*) + lt_cv_file_magic_cmd=/usr/bin/file + case $host_cpu in + ia64*) + lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF-[0-9][0-9]) shared object file - IA64' + lt_cv_file_magic_test_file=/usr/lib/hpux32/libc.so + ;; + hppa*64*) + lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF-[0-9][0-9]) shared object file - PA-RISC [0-9].[0-9]' + lt_cv_file_magic_test_file=/usr/lib/pa20_64/libc.sl + ;; + *) + lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|PA-RISC[0-9].[0-9]) shared library' + lt_cv_file_magic_test_file=/usr/lib/libc.sl + ;; + esac + ;; + +interix[3-9]*) + # PIC code is broken on Interix 3.x, that's why |\.a not |_pic\.a here + lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so|\.a)$' + ;; + +irix5* | irix6* | nonstopux*) + case $LD in + *-32|*"-32 ") libmagic=32-bit;; + *-n32|*"-n32 ") libmagic=N32;; + *-64|*"-64 ") libmagic=64-bit;; + *) libmagic=never-match;; + esac + lt_cv_deplibs_check_method=pass_all + ;; + +# This must be Linux ELF. +linux* | k*bsd*-gnu) + lt_cv_deplibs_check_method=pass_all + ;; + +netbsd*) + if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then + lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|_pic\.a)$' + else + lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so|_pic\.a)$' + fi + ;; + +newos6*) + lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (executable|dynamic lib)' + lt_cv_file_magic_cmd=/usr/bin/file + lt_cv_file_magic_test_file=/usr/lib/libnls.so + ;; + +*nto* | *qnx*) + lt_cv_deplibs_check_method=pass_all + ;; + +openbsd*) + if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then + lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|\.so|_pic\.a)$' + else + lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|_pic\.a)$' + fi + ;; + +osf3* | osf4* | osf5*) + lt_cv_deplibs_check_method=pass_all + ;; + +rdos*) + lt_cv_deplibs_check_method=pass_all + ;; + +solaris*) + lt_cv_deplibs_check_method=pass_all + ;; + +sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) + lt_cv_deplibs_check_method=pass_all + ;; + +sysv4 | sysv4.3*) + case $host_vendor in + motorola) + lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (shared object|dynamic lib) M[0-9][0-9]* Version [0-9]' + lt_cv_file_magic_test_file=`echo /usr/lib/libc.so*` + ;; + ncr) + lt_cv_deplibs_check_method=pass_all + ;; + sequent) + lt_cv_file_magic_cmd='/bin/file' + lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [LM]SB (shared object|dynamic lib )' + ;; + sni) + lt_cv_file_magic_cmd='/bin/file' + lt_cv_deplibs_check_method="file_magic ELF [0-9][0-9]*-bit [LM]SB dynamic lib" + lt_cv_file_magic_test_file=/lib/libc.so + ;; + siemens) + lt_cv_deplibs_check_method=pass_all + ;; + pc) + lt_cv_deplibs_check_method=pass_all + ;; + esac + ;; + +tpf*) + lt_cv_deplibs_check_method=pass_all + ;; +esac + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_deplibs_check_method" >&5 +$as_echo "$lt_cv_deplibs_check_method" >&6; } +file_magic_cmd=$lt_cv_file_magic_cmd +deplibs_check_method=$lt_cv_deplibs_check_method +test -z "$deplibs_check_method" && deplibs_check_method=unknown + + + + + + + + + + + + +if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}ar", so it can be a program name with args. +set dummy ${ac_tool_prefix}ar; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_AR+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$AR"; then + ac_cv_prog_AR="$AR" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_AR="${ac_tool_prefix}ar" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +AR=$ac_cv_prog_AR +if test -n "$AR"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AR" >&5 +$as_echo "$AR" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_AR"; then + ac_ct_AR=$AR + # Extract the first word of "ar", so it can be a program name with args. +set dummy ar; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_ac_ct_AR+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_AR"; then + ac_cv_prog_ac_ct_AR="$ac_ct_AR" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_ac_ct_AR="ar" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_AR=$ac_cv_prog_ac_ct_AR +if test -n "$ac_ct_AR"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_AR" >&5 +$as_echo "$ac_ct_AR" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_AR" = x; then + AR="false" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + AR=$ac_ct_AR + fi +else + AR="$ac_cv_prog_AR" +fi + +test -z "$AR" && AR=ar +test -z "$AR_FLAGS" && AR_FLAGS=cru + + + + + + + + + + + +if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args. +set dummy ${ac_tool_prefix}strip; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_STRIP+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$STRIP"; then + ac_cv_prog_STRIP="$STRIP" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_STRIP="${ac_tool_prefix}strip" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +STRIP=$ac_cv_prog_STRIP +if test -n "$STRIP"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $STRIP" >&5 +$as_echo "$STRIP" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_STRIP"; then + ac_ct_STRIP=$STRIP + # Extract the first word of "strip", so it can be a program name with args. +set dummy strip; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_ac_ct_STRIP+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_STRIP"; then + ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_ac_ct_STRIP="strip" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP +if test -n "$ac_ct_STRIP"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_STRIP" >&5 +$as_echo "$ac_ct_STRIP" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_STRIP" = x; then + STRIP=":" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + STRIP=$ac_ct_STRIP + fi +else + STRIP="$ac_cv_prog_STRIP" +fi + +test -z "$STRIP" && STRIP=: + + + + + + +if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}ranlib", so it can be a program name with args. +set dummy ${ac_tool_prefix}ranlib; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_RANLIB+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$RANLIB"; then + ac_cv_prog_RANLIB="$RANLIB" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_RANLIB="${ac_tool_prefix}ranlib" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +RANLIB=$ac_cv_prog_RANLIB +if test -n "$RANLIB"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $RANLIB" >&5 +$as_echo "$RANLIB" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_RANLIB"; then + ac_ct_RANLIB=$RANLIB + # Extract the first word of "ranlib", so it can be a program name with args. +set dummy ranlib; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_ac_ct_RANLIB+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_RANLIB"; then + ac_cv_prog_ac_ct_RANLIB="$ac_ct_RANLIB" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_ac_ct_RANLIB="ranlib" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_RANLIB=$ac_cv_prog_ac_ct_RANLIB +if test -n "$ac_ct_RANLIB"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_RANLIB" >&5 +$as_echo "$ac_ct_RANLIB" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_RANLIB" = x; then + RANLIB=":" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + RANLIB=$ac_ct_RANLIB + fi +else + RANLIB="$ac_cv_prog_RANLIB" +fi + +test -z "$RANLIB" && RANLIB=: + + + + + + +# Determine commands to create old-style static archives. +old_archive_cmds='$AR $AR_FLAGS $oldlib$oldobjs' +old_postinstall_cmds='chmod 644 $oldlib' +old_postuninstall_cmds= + +if test -n "$RANLIB"; then + case $host_os in + openbsd*) + old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB -t \$oldlib" + ;; + *) + old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB \$oldlib" + ;; + esac + old_archive_cmds="$old_archive_cmds~\$RANLIB \$oldlib" +fi + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +# If no C compiler was specified, use CC. +LTCC=${LTCC-"$CC"} + +# If no C compiler flags were specified, use CFLAGS. +LTCFLAGS=${LTCFLAGS-"$CFLAGS"} + +# Allow CC to be a program name with arguments. +compiler=$CC + + +# Check for command to grab the raw symbol name followed by C symbol from nm. +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking command to parse $NM output from $compiler object" >&5 +$as_echo_n "checking command to parse $NM output from $compiler object... " >&6; } +if test "${lt_cv_sys_global_symbol_pipe+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + +# These are sane defaults that work on at least a few old systems. +# [They come from Ultrix. What could be older than Ultrix?!! ;)] + +# Character class describing NM global symbol codes. +symcode='[BCDEGRST]' + +# Regexp to match symbols that can be accessed directly from C. +sympat='\([_A-Za-z][_A-Za-z0-9]*\)' + +# Define system-specific variables. +case $host_os in +aix*) + symcode='[BCDT]' + ;; +cygwin* | mingw* | pw32* | cegcc*) + symcode='[ABCDGISTW]' + ;; +hpux*) + if test "$host_cpu" = ia64; then + symcode='[ABCDEGRST]' + fi + ;; +irix* | nonstopux*) + symcode='[BCDEGRST]' + ;; +osf*) + symcode='[BCDEGQRST]' + ;; +solaris*) + symcode='[BDRT]' + ;; +sco3.2v5*) + symcode='[DT]' + ;; +sysv4.2uw2*) + symcode='[DT]' + ;; +sysv5* | sco5v6* | unixware* | OpenUNIX*) + symcode='[ABDT]' + ;; +sysv4) + symcode='[DFNSTU]' + ;; +esac + +# If we're using GNU nm, then use its standard symbol codes. +case `$NM -V 2>&1` in +*GNU* | *'with BFD'*) + symcode='[ABCDGIRSTW]' ;; +esac + +# Transform an extracted symbol line into a proper C declaration. +# Some systems (esp. on ia64) link data and code symbols differently, +# so use this general approach. +lt_cv_sys_global_symbol_to_cdecl="sed -n -e 's/^T .* \(.*\)$/extern int \1();/p' -e 's/^$symcode* .* \(.*\)$/extern char \1;/p'" + +# Transform an extracted symbol line into symbol name and symbol address +lt_cv_sys_global_symbol_to_c_name_address="sed -n -e 's/^: \([^ ]*\) $/ {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([^ ]*\) \([^ ]*\)$/ {\"\2\", (void *) \&\2},/p'" +lt_cv_sys_global_symbol_to_c_name_address_lib_prefix="sed -n -e 's/^: \([^ ]*\) $/ {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([^ ]*\) \(lib[^ ]*\)$/ {\"\2\", (void *) \&\2},/p' -e 's/^$symcode* \([^ ]*\) \([^ ]*\)$/ {\"lib\2\", (void *) \&\2},/p'" + +# Handle CRLF in mingw tool chain +opt_cr= +case $build_os in +mingw*) + opt_cr=`$ECHO 'x\{0,1\}' | tr x '\015'` # option cr in regexp + ;; +esac + +# Try without a prefix underscore, then with it. +for ac_symprfx in "" "_"; do + + # Transform symcode, sympat, and symprfx into a raw symbol and a C symbol. + symxfrm="\\1 $ac_symprfx\\2 \\2" + + # Write the raw and C identifiers. + if test "$lt_cv_nm_interface" = "MS dumpbin"; then + # Fake it for dumpbin and say T for any non-static function + # and D for any global variable. + # Also find C++ and __fastcall symbols from MSVC++, + # which start with @ or ?. + lt_cv_sys_global_symbol_pipe="$AWK '"\ +" {last_section=section; section=\$ 3};"\ +" /Section length .*#relocs.*(pick any)/{hide[last_section]=1};"\ +" \$ 0!~/External *\|/{next};"\ +" / 0+ UNDEF /{next}; / UNDEF \([^|]\)*()/{next};"\ +" {if(hide[section]) next};"\ +" {f=0}; \$ 0~/\(\).*\|/{f=1}; {printf f ? \"T \" : \"D \"};"\ +" {split(\$ 0, a, /\||\r/); split(a[2], s)};"\ +" s[1]~/^[@?]/{print s[1], s[1]; next};"\ +" s[1]~prfx {split(s[1],t,\"@\"); print t[1], substr(t[1],length(prfx))}"\ +" ' prfx=^$ac_symprfx" + else + lt_cv_sys_global_symbol_pipe="sed -n -e 's/^.*[ ]\($symcode$symcode*\)[ ][ ]*$ac_symprfx$sympat$opt_cr$/$symxfrm/p'" + fi + + # Check to see that the pipe works correctly. + pipe_works=no + + rm -f conftest* + cat > conftest.$ac_ext <<_LT_EOF +#ifdef __cplusplus +extern "C" { +#endif +char nm_test_var; +void nm_test_func(void); +void nm_test_func(void){} +#ifdef __cplusplus +} +#endif +int main(){nm_test_var='a';nm_test_func();return(0);} +_LT_EOF + + if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + # Now try to grab the symbols. + nlist=conftest.nm + if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$NM conftest.$ac_objext \| $lt_cv_sys_global_symbol_pipe \> $nlist\""; } >&5 + (eval $NM conftest.$ac_objext \| $lt_cv_sys_global_symbol_pipe \> $nlist) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } && test -s "$nlist"; then + # Try sorting and uniquifying the output. + if sort "$nlist" | uniq > "$nlist"T; then + mv -f "$nlist"T "$nlist" + else + rm -f "$nlist"T + fi + + # Make sure that we snagged all the symbols we need. + if $GREP ' nm_test_var$' "$nlist" >/dev/null; then + if $GREP ' nm_test_func$' "$nlist" >/dev/null; then + cat <<_LT_EOF > conftest.$ac_ext +#ifdef __cplusplus +extern "C" { +#endif + +_LT_EOF + # Now generate the symbol file. + eval "$lt_cv_sys_global_symbol_to_cdecl"' < "$nlist" | $GREP -v main >> conftest.$ac_ext' + + cat <<_LT_EOF >> conftest.$ac_ext + +/* The mapping between symbol names and symbols. */ +const struct { + const char *name; + void *address; +} +lt__PROGRAM__LTX_preloaded_symbols[] = +{ + { "@PROGRAM@", (void *) 0 }, +_LT_EOF + $SED "s/^$symcode$symcode* \(.*\) \(.*\)$/ {\"\2\", (void *) \&\2},/" < "$nlist" | $GREP -v main >> conftest.$ac_ext + cat <<\_LT_EOF >> conftest.$ac_ext + {0, (void *) 0} +}; + +/* This works around a problem in FreeBSD linker */ +#ifdef FREEBSD_WORKAROUND +static const void *lt_preloaded_setup() { + return lt__PROGRAM__LTX_preloaded_symbols; +} +#endif + +#ifdef __cplusplus +} +#endif +_LT_EOF + # Now try linking the two files. + mv conftest.$ac_objext conftstm.$ac_objext + lt_save_LIBS="$LIBS" + lt_save_CFLAGS="$CFLAGS" + LIBS="conftstm.$ac_objext" + CFLAGS="$CFLAGS$lt_prog_compiler_no_builtin_flag" + if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5 + (eval $ac_link) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } && test -s conftest${ac_exeext}; then + pipe_works=yes + fi + LIBS="$lt_save_LIBS" + CFLAGS="$lt_save_CFLAGS" + else + echo "cannot find nm_test_func in $nlist" >&5 + fi + else + echo "cannot find nm_test_var in $nlist" >&5 + fi + else + echo "cannot run $lt_cv_sys_global_symbol_pipe" >&5 + fi + else + echo "$progname: failed program was:" >&5 + cat conftest.$ac_ext >&5 + fi + rm -rf conftest* conftst* + + # Do not use the global_symbol_pipe unless it works. + if test "$pipe_works" = yes; then + break + else + lt_cv_sys_global_symbol_pipe= + fi +done + +fi + +if test -z "$lt_cv_sys_global_symbol_pipe"; then + lt_cv_sys_global_symbol_to_cdecl= +fi +if test -z "$lt_cv_sys_global_symbol_pipe$lt_cv_sys_global_symbol_to_cdecl"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: failed" >&5 +$as_echo "failed" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: ok" >&5 +$as_echo "ok" >&6; } +fi + + + + + + + + + + + + + + + + + + + + + + + +# Check whether --enable-libtool-lock was given. +if test "${enable_libtool_lock+set}" = set; then : + enableval=$enable_libtool_lock; +fi + +test "x$enable_libtool_lock" != xno && enable_libtool_lock=yes + +# Some flags need to be propagated to the compiler or linker for good +# libtool support. +case $host in +ia64-*-hpux*) + # Find out which ABI we are using. + echo 'int i;' > conftest.$ac_ext + if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + case `/usr/bin/file conftest.$ac_objext` in + *ELF-32*) + HPUX_IA64_MODE="32" + ;; + *ELF-64*) + HPUX_IA64_MODE="64" + ;; + esac + fi + rm -rf conftest* + ;; +*-*-irix6*) + # Find out which ABI we are using. + echo '#line 6257 "configure"' > conftest.$ac_ext + if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + if test "$lt_cv_prog_gnu_ld" = yes; then + case `/usr/bin/file conftest.$ac_objext` in + *32-bit*) + LD="${LD-ld} -melf32bsmip" + ;; + *N32*) + LD="${LD-ld} -melf32bmipn32" + ;; + *64-bit*) + LD="${LD-ld} -melf64bmip" + ;; + esac + else + case `/usr/bin/file conftest.$ac_objext` in + *32-bit*) + LD="${LD-ld} -32" + ;; + *N32*) + LD="${LD-ld} -n32" + ;; + *64-bit*) + LD="${LD-ld} -64" + ;; + esac + fi + fi + rm -rf conftest* + ;; + +x86_64-*kfreebsd*-gnu|x86_64-*linux*|ppc*-*linux*|powerpc*-*linux*| \ +s390*-*linux*|s390*-*tpf*|sparc*-*linux*) + # Find out which ABI we are using. + echo 'int i;' > conftest.$ac_ext + if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + case `/usr/bin/file conftest.o` in + *32-bit*) + case $host in + x86_64-*kfreebsd*-gnu) + LD="${LD-ld} -m elf_i386_fbsd" + ;; + x86_64-*linux*) + LD="${LD-ld} -m elf_i386" + ;; + ppc64-*linux*|powerpc64-*linux*) + LD="${LD-ld} -m elf32ppclinux" + ;; + s390x-*linux*) + LD="${LD-ld} -m elf_s390" + ;; + sparc64-*linux*) + LD="${LD-ld} -m elf32_sparc" + ;; + esac + ;; + *64-bit*) + case $host in + x86_64-*kfreebsd*-gnu) + LD="${LD-ld} -m elf_x86_64_fbsd" + ;; + x86_64-*linux*) + LD="${LD-ld} -m elf_x86_64" + ;; + ppc*-*linux*|powerpc*-*linux*) + LD="${LD-ld} -m elf64ppc" + ;; + s390*-*linux*|s390*-*tpf*) + LD="${LD-ld} -m elf64_s390" + ;; + sparc*-*linux*) + LD="${LD-ld} -m elf64_sparc" + ;; + esac + ;; + esac + fi + rm -rf conftest* + ;; + +*-*-sco3.2v5*) + # On SCO OpenServer 5, we need -belf to get full-featured binaries. + SAVE_CFLAGS="$CFLAGS" + CFLAGS="$CFLAGS -belf" + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the C compiler needs -belf" >&5 +$as_echo_n "checking whether the C compiler needs -belf... " >&6; } +if test "${lt_cv_cc_needs_belf+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + lt_cv_cc_needs_belf=yes +else + lt_cv_cc_needs_belf=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_cc_needs_belf" >&5 +$as_echo "$lt_cv_cc_needs_belf" >&6; } + if test x"$lt_cv_cc_needs_belf" != x"yes"; then + # this is probably gcc 2.8.0, egcs 1.0 or newer; no need for -belf + CFLAGS="$SAVE_CFLAGS" + fi + ;; +sparc*-*solaris*) + # Find out which ABI we are using. + echo 'int i;' > conftest.$ac_ext + if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + case `/usr/bin/file conftest.o` in + *64-bit*) + case $lt_cv_prog_gnu_ld in + yes*) LD="${LD-ld} -m elf64_sparc" ;; + *) + if ${LD-ld} -64 -r -o conftest2.o conftest.o >/dev/null 2>&1; then + LD="${LD-ld} -64" + fi + ;; + esac + ;; + esac + fi + rm -rf conftest* + ;; +esac + +need_locks="$enable_libtool_lock" + + + case $host_os in + rhapsody* | darwin*) + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}dsymutil", so it can be a program name with args. +set dummy ${ac_tool_prefix}dsymutil; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_DSYMUTIL+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$DSYMUTIL"; then + ac_cv_prog_DSYMUTIL="$DSYMUTIL" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_DSYMUTIL="${ac_tool_prefix}dsymutil" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +DSYMUTIL=$ac_cv_prog_DSYMUTIL +if test -n "$DSYMUTIL"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DSYMUTIL" >&5 +$as_echo "$DSYMUTIL" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_DSYMUTIL"; then + ac_ct_DSYMUTIL=$DSYMUTIL + # Extract the first word of "dsymutil", so it can be a program name with args. +set dummy dsymutil; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_ac_ct_DSYMUTIL+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_DSYMUTIL"; then + ac_cv_prog_ac_ct_DSYMUTIL="$ac_ct_DSYMUTIL" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_ac_ct_DSYMUTIL="dsymutil" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_DSYMUTIL=$ac_cv_prog_ac_ct_DSYMUTIL +if test -n "$ac_ct_DSYMUTIL"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DSYMUTIL" >&5 +$as_echo "$ac_ct_DSYMUTIL" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_DSYMUTIL" = x; then + DSYMUTIL=":" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + DSYMUTIL=$ac_ct_DSYMUTIL + fi +else + DSYMUTIL="$ac_cv_prog_DSYMUTIL" +fi + + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}nmedit", so it can be a program name with args. +set dummy ${ac_tool_prefix}nmedit; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_NMEDIT+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$NMEDIT"; then + ac_cv_prog_NMEDIT="$NMEDIT" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_NMEDIT="${ac_tool_prefix}nmedit" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +NMEDIT=$ac_cv_prog_NMEDIT +if test -n "$NMEDIT"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $NMEDIT" >&5 +$as_echo "$NMEDIT" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_NMEDIT"; then + ac_ct_NMEDIT=$NMEDIT + # Extract the first word of "nmedit", so it can be a program name with args. +set dummy nmedit; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_ac_ct_NMEDIT+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_NMEDIT"; then + ac_cv_prog_ac_ct_NMEDIT="$ac_ct_NMEDIT" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_ac_ct_NMEDIT="nmedit" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_NMEDIT=$ac_cv_prog_ac_ct_NMEDIT +if test -n "$ac_ct_NMEDIT"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_NMEDIT" >&5 +$as_echo "$ac_ct_NMEDIT" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_NMEDIT" = x; then + NMEDIT=":" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + NMEDIT=$ac_ct_NMEDIT + fi +else + NMEDIT="$ac_cv_prog_NMEDIT" +fi + + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}lipo", so it can be a program name with args. +set dummy ${ac_tool_prefix}lipo; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_LIPO+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$LIPO"; then + ac_cv_prog_LIPO="$LIPO" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_LIPO="${ac_tool_prefix}lipo" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +LIPO=$ac_cv_prog_LIPO +if test -n "$LIPO"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LIPO" >&5 +$as_echo "$LIPO" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_LIPO"; then + ac_ct_LIPO=$LIPO + # Extract the first word of "lipo", so it can be a program name with args. +set dummy lipo; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_ac_ct_LIPO+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_LIPO"; then + ac_cv_prog_ac_ct_LIPO="$ac_ct_LIPO" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_ac_ct_LIPO="lipo" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_LIPO=$ac_cv_prog_ac_ct_LIPO +if test -n "$ac_ct_LIPO"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_LIPO" >&5 +$as_echo "$ac_ct_LIPO" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_LIPO" = x; then + LIPO=":" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + LIPO=$ac_ct_LIPO + fi +else + LIPO="$ac_cv_prog_LIPO" +fi + + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}otool", so it can be a program name with args. +set dummy ${ac_tool_prefix}otool; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_OTOOL+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$OTOOL"; then + ac_cv_prog_OTOOL="$OTOOL" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_OTOOL="${ac_tool_prefix}otool" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +OTOOL=$ac_cv_prog_OTOOL +if test -n "$OTOOL"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OTOOL" >&5 +$as_echo "$OTOOL" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_OTOOL"; then + ac_ct_OTOOL=$OTOOL + # Extract the first word of "otool", so it can be a program name with args. +set dummy otool; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_ac_ct_OTOOL+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_OTOOL"; then + ac_cv_prog_ac_ct_OTOOL="$ac_ct_OTOOL" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_ac_ct_OTOOL="otool" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_OTOOL=$ac_cv_prog_ac_ct_OTOOL +if test -n "$ac_ct_OTOOL"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OTOOL" >&5 +$as_echo "$ac_ct_OTOOL" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_OTOOL" = x; then + OTOOL=":" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + OTOOL=$ac_ct_OTOOL + fi +else + OTOOL="$ac_cv_prog_OTOOL" +fi + + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}otool64", so it can be a program name with args. +set dummy ${ac_tool_prefix}otool64; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_OTOOL64+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$OTOOL64"; then + ac_cv_prog_OTOOL64="$OTOOL64" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_OTOOL64="${ac_tool_prefix}otool64" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +OTOOL64=$ac_cv_prog_OTOOL64 +if test -n "$OTOOL64"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OTOOL64" >&5 +$as_echo "$OTOOL64" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_OTOOL64"; then + ac_ct_OTOOL64=$OTOOL64 + # Extract the first word of "otool64", so it can be a program name with args. +set dummy otool64; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_ac_ct_OTOOL64+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_OTOOL64"; then + ac_cv_prog_ac_ct_OTOOL64="$ac_ct_OTOOL64" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_ac_ct_OTOOL64="otool64" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_OTOOL64=$ac_cv_prog_ac_ct_OTOOL64 +if test -n "$ac_ct_OTOOL64"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OTOOL64" >&5 +$as_echo "$ac_ct_OTOOL64" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_OTOOL64" = x; then + OTOOL64=":" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + OTOOL64=$ac_ct_OTOOL64 + fi +else + OTOOL64="$ac_cv_prog_OTOOL64" +fi + + + + + + + + + + + + + + + + + + + + + + + + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -single_module linker flag" >&5 +$as_echo_n "checking for -single_module linker flag... " >&6; } +if test "${lt_cv_apple_cc_single_mod+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_apple_cc_single_mod=no + if test -z "${LT_MULTI_MODULE}"; then + # By default we will add the -single_module flag. You can override + # by either setting the environment variable LT_MULTI_MODULE + # non-empty at configure time, or by adding -multi_module to the + # link flags. + rm -rf libconftest.dylib* + echo "int foo(void){return 1;}" > conftest.c + echo "$LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \ +-dynamiclib -Wl,-single_module conftest.c" >&5 + $LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \ + -dynamiclib -Wl,-single_module conftest.c 2>conftest.err + _lt_result=$? + if test -f libconftest.dylib && test ! -s conftest.err && test $_lt_result = 0; then + lt_cv_apple_cc_single_mod=yes + else + cat conftest.err >&5 + fi + rm -rf libconftest.dylib* + rm -f conftest.* + fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_apple_cc_single_mod" >&5 +$as_echo "$lt_cv_apple_cc_single_mod" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -exported_symbols_list linker flag" >&5 +$as_echo_n "checking for -exported_symbols_list linker flag... " >&6; } +if test "${lt_cv_ld_exported_symbols_list+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_ld_exported_symbols_list=no + save_LDFLAGS=$LDFLAGS + echo "_main" > conftest.sym + LDFLAGS="$LDFLAGS -Wl,-exported_symbols_list,conftest.sym" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + lt_cv_ld_exported_symbols_list=yes +else + lt_cv_ld_exported_symbols_list=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + LDFLAGS="$save_LDFLAGS" + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ld_exported_symbols_list" >&5 +$as_echo "$lt_cv_ld_exported_symbols_list" >&6; } + case $host_os in + rhapsody* | darwin1.[012]) + _lt_dar_allow_undefined='${wl}-undefined ${wl}suppress' ;; + darwin1.*) + _lt_dar_allow_undefined='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' ;; + darwin*) # darwin 5.x on + # if running on 10.5 or later, the deployment target defaults + # to the OS version, if on x86, and 10.4, the deployment + # target defaults to 10.4. Don't you love it? + case ${MACOSX_DEPLOYMENT_TARGET-10.0},$host in + 10.0,*86*-darwin8*|10.0,*-darwin[91]*) + _lt_dar_allow_undefined='${wl}-undefined ${wl}dynamic_lookup' ;; + 10.[012]*) + _lt_dar_allow_undefined='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' ;; + 10.*) + _lt_dar_allow_undefined='${wl}-undefined ${wl}dynamic_lookup' ;; + esac + ;; + esac + if test "$lt_cv_apple_cc_single_mod" = "yes"; then + _lt_dar_single_mod='$single_module' + fi + if test "$lt_cv_ld_exported_symbols_list" = "yes"; then + _lt_dar_export_syms=' ${wl}-exported_symbols_list,$output_objdir/${libname}-symbols.expsym' + else + _lt_dar_export_syms='~$NMEDIT -s $output_objdir/${libname}-symbols.expsym ${lib}' + fi + if test "$DSYMUTIL" != ":"; then + _lt_dsymutil='~$DSYMUTIL $lib || :' + else + _lt_dsymutil= + fi + ;; + esac + +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to run the C preprocessor" >&5 +$as_echo_n "checking how to run the C preprocessor... " >&6; } +# On Suns, sometimes $CPP names a directory. +if test -n "$CPP" && test -d "$CPP"; then + CPP= +fi +if test -z "$CPP"; then + if test "${ac_cv_prog_CPP+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + # Double quotes because CPP needs to be expanded + for CPP in "$CC -E" "$CC -E -traditional-cpp" "/lib/cpp" + do + ac_preproc_ok=false +for ac_c_preproc_warn_flag in '' yes +do + # Use a header file that comes with gcc, so configuring glibc + # with a fresh cross-compiler works. + # Prefer to if __STDC__ is defined, since + # exists even on freestanding compilers. + # On the NeXT, cc -E runs the code through the compiler's parser, + # not just through cpp. "Syntax error" is here to catch this case. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#ifdef __STDC__ +# include +#else +# include +#endif + Syntax error +_ACEOF +if ac_fn_c_try_cpp "$LINENO"; then : + +else + # Broken: fails on valid input. +continue +fi +rm -f conftest.err conftest.$ac_ext + + # OK, works on sane cases. Now check whether nonexistent headers + # can be detected and how. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +_ACEOF +if ac_fn_c_try_cpp "$LINENO"; then : + # Broken: success on invalid input. +continue +else + # Passes both tests. +ac_preproc_ok=: +break +fi +rm -f conftest.err conftest.$ac_ext + +done +# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. +rm -f conftest.err conftest.$ac_ext +if $ac_preproc_ok; then : + break +fi + + done + ac_cv_prog_CPP=$CPP + +fi + CPP=$ac_cv_prog_CPP +else + ac_cv_prog_CPP=$CPP +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $CPP" >&5 +$as_echo "$CPP" >&6; } +ac_preproc_ok=false +for ac_c_preproc_warn_flag in '' yes +do + # Use a header file that comes with gcc, so configuring glibc + # with a fresh cross-compiler works. + # Prefer to if __STDC__ is defined, since + # exists even on freestanding compilers. + # On the NeXT, cc -E runs the code through the compiler's parser, + # not just through cpp. "Syntax error" is here to catch this case. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#ifdef __STDC__ +# include +#else +# include +#endif + Syntax error +_ACEOF +if ac_fn_c_try_cpp "$LINENO"; then : + +else + # Broken: fails on valid input. +continue +fi +rm -f conftest.err conftest.$ac_ext + + # OK, works on sane cases. Now check whether nonexistent headers + # can be detected and how. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +_ACEOF +if ac_fn_c_try_cpp "$LINENO"; then : + # Broken: success on invalid input. +continue +else + # Passes both tests. +ac_preproc_ok=: +break +fi +rm -f conftest.err conftest.$ac_ext + +done +# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. +rm -f conftest.err conftest.$ac_ext +if $ac_preproc_ok; then : + +else + { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error "C preprocessor \"$CPP\" fails sanity check +See \`config.log' for more details." "$LINENO" 5; } +fi + +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for ANSI C header files" >&5 +$as_echo_n "checking for ANSI C header files... " >&6; } +if test "${ac_cv_header_stdc+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +#include +#include +#include + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_header_stdc=yes +else + ac_cv_header_stdc=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + +if test $ac_cv_header_stdc = yes; then + # SunOS 4.x string.h does not declare mem*, contrary to ANSI. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include + +_ACEOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP "memchr" >/dev/null 2>&1; then : + +else + ac_cv_header_stdc=no +fi +rm -f conftest* + +fi + +if test $ac_cv_header_stdc = yes; then + # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include + +_ACEOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP "free" >/dev/null 2>&1; then : + +else + ac_cv_header_stdc=no +fi +rm -f conftest* + +fi + +if test $ac_cv_header_stdc = yes; then + # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi. + if test "$cross_compiling" = yes; then : + : +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +#include +#if ((' ' & 0x0FF) == 0x020) +# define ISLOWER(c) ('a' <= (c) && (c) <= 'z') +# define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c)) +#else +# define ISLOWER(c) \ + (('a' <= (c) && (c) <= 'i') \ + || ('j' <= (c) && (c) <= 'r') \ + || ('s' <= (c) && (c) <= 'z')) +# define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c)) +#endif + +#define XOR(e, f) (((e) && !(f)) || (!(e) && (f))) +int +main () +{ + int i; + for (i = 0; i < 256; i++) + if (XOR (islower (i), ISLOWER (i)) + || toupper (i) != TOUPPER (i)) + return 2; + return 0; +} +_ACEOF +if ac_fn_c_try_run "$LINENO"; then : + +else + ac_cv_header_stdc=no +fi +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest.beam conftest.$ac_ext +fi + +fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_stdc" >&5 +$as_echo "$ac_cv_header_stdc" >&6; } +if test $ac_cv_header_stdc = yes; then + +$as_echo "#define STDC_HEADERS 1" >>confdefs.h + +fi + +# On IRIX 5.3, sys/types and inttypes.h are conflicting. +for ac_header in sys/types.h sys/stat.h stdlib.h string.h memory.h strings.h \ + inttypes.h stdint.h unistd.h +do : + as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` +ac_fn_c_check_header_compile "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default +" +eval as_val=\$$as_ac_Header + if test "x$as_val" = x""yes; then : + cat >>confdefs.h <<_ACEOF +#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 +_ACEOF + +fi + +done + + +for ac_header in dlfcn.h +do : + ac_fn_c_check_header_compile "$LINENO" "dlfcn.h" "ac_cv_header_dlfcn_h" "$ac_includes_default +" +if test "x$ac_cv_header_dlfcn_h" = x""yes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE_DLFCN_H 1 +_ACEOF + +fi + +done + + + +# Set options + + + + enable_dlopen=no + + + enable_win32_dll=no + + + # Check whether --enable-shared was given. +if test "${enable_shared+set}" = set; then : + enableval=$enable_shared; p=${PACKAGE-default} + case $enableval in + yes) enable_shared=yes ;; + no) enable_shared=no ;; + *) + enable_shared=no + # Look at the argument we got. We use all the common list separators. + lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," + for pkg in $enableval; do + IFS="$lt_save_ifs" + if test "X$pkg" = "X$p"; then + enable_shared=yes + fi + done + IFS="$lt_save_ifs" + ;; + esac +else + enable_shared=yes +fi + + + + + + + + + + # Check whether --enable-static was given. +if test "${enable_static+set}" = set; then : + enableval=$enable_static; p=${PACKAGE-default} + case $enableval in + yes) enable_static=yes ;; + no) enable_static=no ;; + *) + enable_static=no + # Look at the argument we got. We use all the common list separators. + lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," + for pkg in $enableval; do + IFS="$lt_save_ifs" + if test "X$pkg" = "X$p"; then + enable_static=yes + fi + done + IFS="$lt_save_ifs" + ;; + esac +else + enable_static=yes +fi + + + + + + + + + + +# Check whether --with-pic was given. +if test "${with_pic+set}" = set; then : + withval=$with_pic; pic_mode="$withval" +else + pic_mode=default +fi + + +test -z "$pic_mode" && pic_mode=default + + + + + + + + # Check whether --enable-fast-install was given. +if test "${enable_fast_install+set}" = set; then : + enableval=$enable_fast_install; p=${PACKAGE-default} + case $enableval in + yes) enable_fast_install=yes ;; + no) enable_fast_install=no ;; + *) + enable_fast_install=no + # Look at the argument we got. We use all the common list separators. + lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," + for pkg in $enableval; do + IFS="$lt_save_ifs" + if test "X$pkg" = "X$p"; then + enable_fast_install=yes + fi + done + IFS="$lt_save_ifs" + ;; + esac +else + enable_fast_install=yes +fi + + + + + + + + + + + +# This can be used to rebuild libtool when needed +LIBTOOL_DEPS="$ltmain" + +# Always use our own libtool. +LIBTOOL='$(SHELL) $(top_builddir)/libtool' + + + + + + + + + + + + + + + + + + + + + + + + + +test -z "$LN_S" && LN_S="ln -s" + + + + + + + + + + + + + + +if test -n "${ZSH_VERSION+set}" ; then + setopt NO_GLOB_SUBST +fi + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for objdir" >&5 +$as_echo_n "checking for objdir... " >&6; } +if test "${lt_cv_objdir+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + rm -f .libs 2>/dev/null +mkdir .libs 2>/dev/null +if test -d .libs; then + lt_cv_objdir=.libs +else + # MS-DOS does not allow filenames that begin with a dot. + lt_cv_objdir=_libs +fi +rmdir .libs 2>/dev/null +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_objdir" >&5 +$as_echo "$lt_cv_objdir" >&6; } +objdir=$lt_cv_objdir + + + + + +cat >>confdefs.h <<_ACEOF +#define LT_OBJDIR "$lt_cv_objdir/" +_ACEOF + + + + + + + + + + + + + + + + + +case $host_os in +aix3*) + # AIX sometimes has problems with the GCC collect2 program. For some + # reason, if we set the COLLECT_NAMES environment variable, the problems + # vanish in a puff of smoke. + if test "X${COLLECT_NAMES+set}" != Xset; then + COLLECT_NAMES= + export COLLECT_NAMES + fi + ;; +esac + +# Sed substitution that helps us do robust quoting. It backslashifies +# metacharacters that are still active within double-quoted strings. +sed_quote_subst='s/\(["`$\\]\)/\\\1/g' + +# Same as above, but do not quote variable references. +double_quote_subst='s/\(["`\\]\)/\\\1/g' + +# Sed substitution to delay expansion of an escaped shell variable in a +# double_quote_subst'ed string. +delay_variable_subst='s/\\\\\\\\\\\$/\\\\\\$/g' + +# Sed substitution to delay expansion of an escaped single quote. +delay_single_quote_subst='s/'\''/'\'\\\\\\\'\''/g' + +# Sed substitution to avoid accidental globbing in evaled expressions +no_glob_subst='s/\*/\\\*/g' + +# Global variables: +ofile=libtool +can_build_shared=yes + +# All known linkers require a `.a' archive for static linking (except MSVC, +# which needs '.lib'). +libext=a + +with_gnu_ld="$lt_cv_prog_gnu_ld" + +old_CC="$CC" +old_CFLAGS="$CFLAGS" + +# Set sane defaults for various variables +test -z "$CC" && CC=cc +test -z "$LTCC" && LTCC=$CC +test -z "$LTCFLAGS" && LTCFLAGS=$CFLAGS +test -z "$LD" && LD=ld +test -z "$ac_objext" && ac_objext=o + +for cc_temp in $compiler""; do + case $cc_temp in + compile | *[\\/]compile | ccache | *[\\/]ccache ) ;; + distcc | *[\\/]distcc | purify | *[\\/]purify ) ;; + \-*) ;; + *) break;; + esac +done +cc_basename=`$ECHO "X$cc_temp" | $Xsed -e 's%.*/%%' -e "s%^$host_alias-%%"` + + +# Only perform the check for file, if the check method requires it +test -z "$MAGIC_CMD" && MAGIC_CMD=file +case $deplibs_check_method in +file_magic*) + if test "$file_magic_cmd" = '$MAGIC_CMD'; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ${ac_tool_prefix}file" >&5 +$as_echo_n "checking for ${ac_tool_prefix}file... " >&6; } +if test "${lt_cv_path_MAGIC_CMD+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + case $MAGIC_CMD in +[\\/*] | ?:[\\/]*) + lt_cv_path_MAGIC_CMD="$MAGIC_CMD" # Let the user override the test with a path. + ;; +*) + lt_save_MAGIC_CMD="$MAGIC_CMD" + lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR + ac_dummy="/usr/bin$PATH_SEPARATOR$PATH" + for ac_dir in $ac_dummy; do + IFS="$lt_save_ifs" + test -z "$ac_dir" && ac_dir=. + if test -f $ac_dir/${ac_tool_prefix}file; then + lt_cv_path_MAGIC_CMD="$ac_dir/${ac_tool_prefix}file" + if test -n "$file_magic_test_file"; then + case $deplibs_check_method in + "file_magic "*) + file_magic_regex=`expr "$deplibs_check_method" : "file_magic \(.*\)"` + MAGIC_CMD="$lt_cv_path_MAGIC_CMD" + if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null | + $EGREP "$file_magic_regex" > /dev/null; then + : + else + cat <<_LT_EOF 1>&2 + +*** Warning: the command libtool uses to detect shared libraries, +*** $file_magic_cmd, produces output that libtool cannot recognize. +*** The result is that libtool may fail to recognize shared libraries +*** as such. This will affect the creation of libtool libraries that +*** depend on shared libraries, but programs linked with such libtool +*** libraries will work regardless of this problem. Nevertheless, you +*** may want to report the problem to your system manager and/or to +*** bug-libtool at gnu.org + +_LT_EOF + fi ;; + esac + fi + break + fi + done + IFS="$lt_save_ifs" + MAGIC_CMD="$lt_save_MAGIC_CMD" + ;; +esac +fi + +MAGIC_CMD="$lt_cv_path_MAGIC_CMD" +if test -n "$MAGIC_CMD"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MAGIC_CMD" >&5 +$as_echo "$MAGIC_CMD" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + + + +if test -z "$lt_cv_path_MAGIC_CMD"; then + if test -n "$ac_tool_prefix"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for file" >&5 +$as_echo_n "checking for file... " >&6; } +if test "${lt_cv_path_MAGIC_CMD+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + case $MAGIC_CMD in +[\\/*] | ?:[\\/]*) + lt_cv_path_MAGIC_CMD="$MAGIC_CMD" # Let the user override the test with a path. + ;; +*) + lt_save_MAGIC_CMD="$MAGIC_CMD" + lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR + ac_dummy="/usr/bin$PATH_SEPARATOR$PATH" + for ac_dir in $ac_dummy; do + IFS="$lt_save_ifs" + test -z "$ac_dir" && ac_dir=. + if test -f $ac_dir/file; then + lt_cv_path_MAGIC_CMD="$ac_dir/file" + if test -n "$file_magic_test_file"; then + case $deplibs_check_method in + "file_magic "*) + file_magic_regex=`expr "$deplibs_check_method" : "file_magic \(.*\)"` + MAGIC_CMD="$lt_cv_path_MAGIC_CMD" + if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null | + $EGREP "$file_magic_regex" > /dev/null; then + : + else + cat <<_LT_EOF 1>&2 + +*** Warning: the command libtool uses to detect shared libraries, +*** $file_magic_cmd, produces output that libtool cannot recognize. +*** The result is that libtool may fail to recognize shared libraries +*** as such. This will affect the creation of libtool libraries that +*** depend on shared libraries, but programs linked with such libtool +*** libraries will work regardless of this problem. Nevertheless, you +*** may want to report the problem to your system manager and/or to +*** bug-libtool at gnu.org + +_LT_EOF + fi ;; + esac + fi + break + fi + done + IFS="$lt_save_ifs" + MAGIC_CMD="$lt_save_MAGIC_CMD" + ;; +esac +fi + +MAGIC_CMD="$lt_cv_path_MAGIC_CMD" +if test -n "$MAGIC_CMD"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MAGIC_CMD" >&5 +$as_echo "$MAGIC_CMD" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + else + MAGIC_CMD=: + fi +fi + + fi + ;; +esac + +# Use C for the default configuration in the libtool script + +lt_save_CC="$CC" +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + + +# Source file extension for C test sources. +ac_ext=c + +# Object file extension for compiled C test sources. +objext=o +objext=$objext + +# Code to be used in simple compile tests +lt_simple_compile_test_code="int some_variable = 0;" + +# Code to be used in simple link tests +lt_simple_link_test_code='int main(){return(0);}' + + + + + + + +# If no C compiler was specified, use CC. +LTCC=${LTCC-"$CC"} + +# If no C compiler flags were specified, use CFLAGS. +LTCFLAGS=${LTCFLAGS-"$CFLAGS"} + +# Allow CC to be a program name with arguments. +compiler=$CC + +# Save the default compiler, since it gets overwritten when the other +# tags are being tested, and _LT_TAGVAR(compiler, []) is a NOP. +compiler_DEFAULT=$CC + +# save warnings/boilerplate of simple test code +ac_outfile=conftest.$ac_objext +echo "$lt_simple_compile_test_code" >conftest.$ac_ext +eval "$ac_compile" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err +_lt_compiler_boilerplate=`cat conftest.err` +$RM conftest* + +ac_outfile=conftest.$ac_objext +echo "$lt_simple_link_test_code" >conftest.$ac_ext +eval "$ac_link" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err +_lt_linker_boilerplate=`cat conftest.err` +$RM -r conftest* + + +## CAVEAT EMPTOR: +## There is no encapsulation within the following macros, do not change +## the running order or otherwise move them around unless you know exactly +## what you are doing... +if test -n "$compiler"; then + +lt_prog_compiler_no_builtin_flag= + +if test "$GCC" = yes; then + lt_prog_compiler_no_builtin_flag=' -fno-builtin' + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -fno-rtti -fno-exceptions" >&5 +$as_echo_n "checking if $compiler supports -fno-rtti -fno-exceptions... " >&6; } +if test "${lt_cv_prog_compiler_rtti_exceptions+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_prog_compiler_rtti_exceptions=no + ac_outfile=conftest.$ac_objext + echo "$lt_simple_compile_test_code" > conftest.$ac_ext + lt_compiler_flag="-fno-rtti -fno-exceptions" + # Insert the option either (1) after the last *FLAGS variable, or + # (2) before a word containing "conftest.", or (3) at the end. + # Note that $ac_compile itself does not contain backslashes and begins + # with a dollar sign (not a hyphen), so the echo should work correctly. + # The option is referenced via a variable to avoid confusing sed. + lt_compile=`echo "$ac_compile" | $SED \ + -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ + -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ + -e 's:$: $lt_compiler_flag:'` + (eval echo "\"\$as_me:7787: $lt_compile\"" >&5) + (eval "$lt_compile" 2>conftest.err) + ac_status=$? + cat conftest.err >&5 + echo "$as_me:7791: \$? = $ac_status" >&5 + if (exit $ac_status) && test -s "$ac_outfile"; then + # The compiler can only warn and ignore the option if not recognized + # So say no if there are warnings other than the usual output. + $ECHO "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' >conftest.exp + $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 + if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then + lt_cv_prog_compiler_rtti_exceptions=yes + fi + fi + $RM conftest* + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_rtti_exceptions" >&5 +$as_echo "$lt_cv_prog_compiler_rtti_exceptions" >&6; } + +if test x"$lt_cv_prog_compiler_rtti_exceptions" = xyes; then + lt_prog_compiler_no_builtin_flag="$lt_prog_compiler_no_builtin_flag -fno-rtti -fno-exceptions" +else + : +fi + +fi + + + + + + + lt_prog_compiler_wl= +lt_prog_compiler_pic= +lt_prog_compiler_static= + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $compiler option to produce PIC" >&5 +$as_echo_n "checking for $compiler option to produce PIC... " >&6; } + + if test "$GCC" = yes; then + lt_prog_compiler_wl='-Wl,' + lt_prog_compiler_static='-static' + + case $host_os in + aix*) + # All AIX code is PIC. + if test "$host_cpu" = ia64; then + # AIX 5 now supports IA64 processor + lt_prog_compiler_static='-Bstatic' + fi + ;; + + amigaos*) + case $host_cpu in + powerpc) + # see comment about AmigaOS4 .so support + lt_prog_compiler_pic='-fPIC' + ;; + m68k) + # FIXME: we need at least 68020 code to build shared libraries, but + # adding the `-m68020' flag to GCC prevents building anything better, + # like `-m68040'. + lt_prog_compiler_pic='-m68020 -resident32 -malways-restore-a4' + ;; + esac + ;; + + beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) + # PIC is the default for these OSes. + ;; + + mingw* | cygwin* | pw32* | os2* | cegcc*) + # This hack is so that the source file can tell whether it is being + # built for inclusion in a dll (and should export symbols for example). + # Although the cygwin gcc ignores -fPIC, still need this for old-style + # (--disable-auto-import) libraries + lt_prog_compiler_pic='-DDLL_EXPORT' + ;; + + darwin* | rhapsody*) + # PIC is the default on this platform + # Common symbols not allowed in MH_DYLIB files + lt_prog_compiler_pic='-fno-common' + ;; + + hpux*) + # PIC is the default for 64-bit PA HP-UX, but not for 32-bit + # PA HP-UX. On IA64 HP-UX, PIC is the default but the pic flag + # sets the default TLS model and affects inlining. + case $host_cpu in + hppa*64*) + # +Z the default + ;; + *) + lt_prog_compiler_pic='-fPIC' + ;; + esac + ;; + + interix[3-9]*) + # Interix 3.x gcc -fpic/-fPIC options generate broken code. + # Instead, we relocate shared libraries at runtime. + ;; + + msdosdjgpp*) + # Just because we use GCC doesn't mean we suddenly get shared libraries + # on systems that don't support them. + lt_prog_compiler_can_build_shared=no + enable_shared=no + ;; + + *nto* | *qnx*) + # QNX uses GNU C++, but need to define -shared option too, otherwise + # it will coredump. + lt_prog_compiler_pic='-fPIC -shared' + ;; + + sysv4*MP*) + if test -d /usr/nec; then + lt_prog_compiler_pic=-Kconform_pic + fi + ;; + + *) + lt_prog_compiler_pic='-fPIC' + ;; + esac + else + # PORTME Check for flag to pass linker flags through the system compiler. + case $host_os in + aix*) + lt_prog_compiler_wl='-Wl,' + if test "$host_cpu" = ia64; then + # AIX 5 now supports IA64 processor + lt_prog_compiler_static='-Bstatic' + else + lt_prog_compiler_static='-bnso -bI:/lib/syscalls.exp' + fi + ;; + + mingw* | cygwin* | pw32* | os2* | cegcc*) + # This hack is so that the source file can tell whether it is being + # built for inclusion in a dll (and should export symbols for example). + lt_prog_compiler_pic='-DDLL_EXPORT' + ;; + + hpux9* | hpux10* | hpux11*) + lt_prog_compiler_wl='-Wl,' + # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but + # not for PA HP-UX. + case $host_cpu in + hppa*64*|ia64*) + # +Z the default + ;; + *) + lt_prog_compiler_pic='+Z' + ;; + esac + # Is there a better lt_prog_compiler_static that works with the bundled CC? + lt_prog_compiler_static='${wl}-a ${wl}archive' + ;; + + irix5* | irix6* | nonstopux*) + lt_prog_compiler_wl='-Wl,' + # PIC (with -KPIC) is the default. + lt_prog_compiler_static='-non_shared' + ;; + + linux* | k*bsd*-gnu) + case $cc_basename in + # old Intel for x86_64 which still supported -KPIC. + ecc*) + lt_prog_compiler_wl='-Wl,' + lt_prog_compiler_pic='-KPIC' + lt_prog_compiler_static='-static' + ;; + # icc used to be incompatible with GCC. + # ICC 10 doesn't accept -KPIC any more. + icc* | ifort*) + lt_prog_compiler_wl='-Wl,' + lt_prog_compiler_pic='-fPIC' + lt_prog_compiler_static='-static' + ;; + # Lahey Fortran 8.1. + lf95*) + lt_prog_compiler_wl='-Wl,' + lt_prog_compiler_pic='--shared' + lt_prog_compiler_static='--static' + ;; + pgcc* | pgf77* | pgf90* | pgf95*) + # Portland Group compilers (*not* the Pentium gcc compiler, + # which looks to be a dead project) + lt_prog_compiler_wl='-Wl,' + lt_prog_compiler_pic='-fpic' + lt_prog_compiler_static='-Bstatic' + ;; + ccc*) + lt_prog_compiler_wl='-Wl,' + # All Alpha code is PIC. + lt_prog_compiler_static='-non_shared' + ;; + xl*) + # IBM XL C 8.0/Fortran 10.1 on PPC + lt_prog_compiler_wl='-Wl,' + lt_prog_compiler_pic='-qpic' + lt_prog_compiler_static='-qstaticlink' + ;; + *) + case `$CC -V 2>&1 | sed 5q` in + *Sun\ C*) + # Sun C 5.9 + lt_prog_compiler_pic='-KPIC' + lt_prog_compiler_static='-Bstatic' + lt_prog_compiler_wl='-Wl,' + ;; + *Sun\ F*) + # Sun Fortran 8.3 passes all unrecognized flags to the linker + lt_prog_compiler_pic='-KPIC' + lt_prog_compiler_static='-Bstatic' + lt_prog_compiler_wl='' + ;; + esac + ;; + esac + ;; + + newsos6) + lt_prog_compiler_pic='-KPIC' + lt_prog_compiler_static='-Bstatic' + ;; + + *nto* | *qnx*) + # QNX uses GNU C++, but need to define -shared option too, otherwise + # it will coredump. + lt_prog_compiler_pic='-fPIC -shared' + ;; + + osf3* | osf4* | osf5*) + lt_prog_compiler_wl='-Wl,' + # All OSF/1 code is PIC. + lt_prog_compiler_static='-non_shared' + ;; + + rdos*) + lt_prog_compiler_static='-non_shared' + ;; + + solaris*) + lt_prog_compiler_pic='-KPIC' + lt_prog_compiler_static='-Bstatic' + case $cc_basename in + f77* | f90* | f95*) + lt_prog_compiler_wl='-Qoption ld ';; + *) + lt_prog_compiler_wl='-Wl,';; + esac + ;; + + sunos4*) + lt_prog_compiler_wl='-Qoption ld ' + lt_prog_compiler_pic='-PIC' + lt_prog_compiler_static='-Bstatic' + ;; + + sysv4 | sysv4.2uw2* | sysv4.3*) + lt_prog_compiler_wl='-Wl,' + lt_prog_compiler_pic='-KPIC' + lt_prog_compiler_static='-Bstatic' + ;; + + sysv4*MP*) + if test -d /usr/nec ;then + lt_prog_compiler_pic='-Kconform_pic' + lt_prog_compiler_static='-Bstatic' + fi + ;; + + sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*) + lt_prog_compiler_wl='-Wl,' + lt_prog_compiler_pic='-KPIC' + lt_prog_compiler_static='-Bstatic' + ;; + + unicos*) + lt_prog_compiler_wl='-Wl,' + lt_prog_compiler_can_build_shared=no + ;; + + uts4*) + lt_prog_compiler_pic='-pic' + lt_prog_compiler_static='-Bstatic' + ;; + + *) + lt_prog_compiler_can_build_shared=no + ;; + esac + fi + +case $host_os in + # For platforms which do not support PIC, -DPIC is meaningless: + *djgpp*) + lt_prog_compiler_pic= + ;; + *) + lt_prog_compiler_pic="$lt_prog_compiler_pic -DPIC" + ;; +esac +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_prog_compiler_pic" >&5 +$as_echo "$lt_prog_compiler_pic" >&6; } + + + + + + +# +# Check to make sure the PIC flag actually works. +# +if test -n "$lt_prog_compiler_pic"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler PIC flag $lt_prog_compiler_pic works" >&5 +$as_echo_n "checking if $compiler PIC flag $lt_prog_compiler_pic works... " >&6; } +if test "${lt_cv_prog_compiler_pic_works+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_prog_compiler_pic_works=no + ac_outfile=conftest.$ac_objext + echo "$lt_simple_compile_test_code" > conftest.$ac_ext + lt_compiler_flag="$lt_prog_compiler_pic -DPIC" + # Insert the option either (1) after the last *FLAGS variable, or + # (2) before a word containing "conftest.", or (3) at the end. + # Note that $ac_compile itself does not contain backslashes and begins + # with a dollar sign (not a hyphen), so the echo should work correctly. + # The option is referenced via a variable to avoid confusing sed. + lt_compile=`echo "$ac_compile" | $SED \ + -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ + -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ + -e 's:$: $lt_compiler_flag:'` + (eval echo "\"\$as_me:8126: $lt_compile\"" >&5) + (eval "$lt_compile" 2>conftest.err) + ac_status=$? + cat conftest.err >&5 + echo "$as_me:8130: \$? = $ac_status" >&5 + if (exit $ac_status) && test -s "$ac_outfile"; then + # The compiler can only warn and ignore the option if not recognized + # So say no if there are warnings other than the usual output. + $ECHO "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' >conftest.exp + $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 + if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then + lt_cv_prog_compiler_pic_works=yes + fi + fi + $RM conftest* + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_pic_works" >&5 +$as_echo "$lt_cv_prog_compiler_pic_works" >&6; } + +if test x"$lt_cv_prog_compiler_pic_works" = xyes; then + case $lt_prog_compiler_pic in + "" | " "*) ;; + *) lt_prog_compiler_pic=" $lt_prog_compiler_pic" ;; + esac +else + lt_prog_compiler_pic= + lt_prog_compiler_can_build_shared=no +fi + +fi + + + + + + +# +# Check to make sure the static flag actually works. +# +wl=$lt_prog_compiler_wl eval lt_tmp_static_flag=\"$lt_prog_compiler_static\" +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler static flag $lt_tmp_static_flag works" >&5 +$as_echo_n "checking if $compiler static flag $lt_tmp_static_flag works... " >&6; } +if test "${lt_cv_prog_compiler_static_works+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_prog_compiler_static_works=no + save_LDFLAGS="$LDFLAGS" + LDFLAGS="$LDFLAGS $lt_tmp_static_flag" + echo "$lt_simple_link_test_code" > conftest.$ac_ext + if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then + # The linker can only warn and ignore the option if not recognized + # So say no if there are warnings + if test -s conftest.err; then + # Append any errors to the config.log. + cat conftest.err 1>&5 + $ECHO "X$_lt_linker_boilerplate" | $Xsed -e '/^$/d' > conftest.exp + $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 + if diff conftest.exp conftest.er2 >/dev/null; then + lt_cv_prog_compiler_static_works=yes + fi + else + lt_cv_prog_compiler_static_works=yes + fi + fi + $RM -r conftest* + LDFLAGS="$save_LDFLAGS" + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_static_works" >&5 +$as_echo "$lt_cv_prog_compiler_static_works" >&6; } + +if test x"$lt_cv_prog_compiler_static_works" = xyes; then + : +else + lt_prog_compiler_static= +fi + + + + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5 +$as_echo_n "checking if $compiler supports -c -o file.$ac_objext... " >&6; } +if test "${lt_cv_prog_compiler_c_o+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_prog_compiler_c_o=no + $RM -r conftest 2>/dev/null + mkdir conftest + cd conftest + mkdir out + echo "$lt_simple_compile_test_code" > conftest.$ac_ext + + lt_compiler_flag="-o out/conftest2.$ac_objext" + # Insert the option either (1) after the last *FLAGS variable, or + # (2) before a word containing "conftest.", or (3) at the end. + # Note that $ac_compile itself does not contain backslashes and begins + # with a dollar sign (not a hyphen), so the echo should work correctly. + lt_compile=`echo "$ac_compile" | $SED \ + -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ + -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ + -e 's:$: $lt_compiler_flag:'` + (eval echo "\"\$as_me:8231: $lt_compile\"" >&5) + (eval "$lt_compile" 2>out/conftest.err) + ac_status=$? + cat out/conftest.err >&5 + echo "$as_me:8235: \$? = $ac_status" >&5 + if (exit $ac_status) && test -s out/conftest2.$ac_objext + then + # The compiler can only warn and ignore the option if not recognized + # So say no if there are warnings + $ECHO "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' > out/conftest.exp + $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2 + if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then + lt_cv_prog_compiler_c_o=yes + fi + fi + chmod u+w . 2>&5 + $RM conftest* + # SGI C++ compiler will create directory out/ii_files/ for + # template instantiation + test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files + $RM out/* && rmdir out + cd .. + $RM -r conftest + $RM conftest* + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_c_o" >&5 +$as_echo "$lt_cv_prog_compiler_c_o" >&6; } + + + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5 +$as_echo_n "checking if $compiler supports -c -o file.$ac_objext... " >&6; } +if test "${lt_cv_prog_compiler_c_o+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_prog_compiler_c_o=no + $RM -r conftest 2>/dev/null + mkdir conftest + cd conftest + mkdir out + echo "$lt_simple_compile_test_code" > conftest.$ac_ext + + lt_compiler_flag="-o out/conftest2.$ac_objext" + # Insert the option either (1) after the last *FLAGS variable, or + # (2) before a word containing "conftest.", or (3) at the end. + # Note that $ac_compile itself does not contain backslashes and begins + # with a dollar sign (not a hyphen), so the echo should work correctly. + lt_compile=`echo "$ac_compile" | $SED \ + -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ + -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ + -e 's:$: $lt_compiler_flag:'` + (eval echo "\"\$as_me:8286: $lt_compile\"" >&5) + (eval "$lt_compile" 2>out/conftest.err) + ac_status=$? + cat out/conftest.err >&5 + echo "$as_me:8290: \$? = $ac_status" >&5 + if (exit $ac_status) && test -s out/conftest2.$ac_objext + then + # The compiler can only warn and ignore the option if not recognized + # So say no if there are warnings + $ECHO "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' > out/conftest.exp + $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2 + if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then + lt_cv_prog_compiler_c_o=yes + fi + fi + chmod u+w . 2>&5 + $RM conftest* + # SGI C++ compiler will create directory out/ii_files/ for + # template instantiation + test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files + $RM out/* && rmdir out + cd .. + $RM -r conftest + $RM conftest* + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_c_o" >&5 +$as_echo "$lt_cv_prog_compiler_c_o" >&6; } + + + + +hard_links="nottested" +if test "$lt_cv_prog_compiler_c_o" = no && test "$need_locks" != no; then + # do not overwrite the value of need_locks provided by the user + { $as_echo "$as_me:${as_lineno-$LINENO}: checking if we can lock with hard links" >&5 +$as_echo_n "checking if we can lock with hard links... " >&6; } + hard_links=yes + $RM conftest* + ln conftest.a conftest.b 2>/dev/null && hard_links=no + touch conftest.a + ln conftest.a conftest.b 2>&5 || hard_links=no + ln conftest.a conftest.b 2>/dev/null && hard_links=no + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $hard_links" >&5 +$as_echo "$hard_links" >&6; } + if test "$hard_links" = no; then + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&5 +$as_echo "$as_me: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&2;} + need_locks=warn + fi +else + need_locks=no +fi + + + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the $compiler linker ($LD) supports shared libraries" >&5 +$as_echo_n "checking whether the $compiler linker ($LD) supports shared libraries... " >&6; } + + runpath_var= + allow_undefined_flag= + always_export_symbols=no + archive_cmds= + archive_expsym_cmds= + compiler_needs_object=no + enable_shared_with_static_runtimes=no + export_dynamic_flag_spec= + export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' + hardcode_automatic=no + hardcode_direct=no + hardcode_direct_absolute=no + hardcode_libdir_flag_spec= + hardcode_libdir_flag_spec_ld= + hardcode_libdir_separator= + hardcode_minus_L=no + hardcode_shlibpath_var=unsupported + inherit_rpath=no + link_all_deplibs=unknown + module_cmds= + module_expsym_cmds= + old_archive_from_new_cmds= + old_archive_from_expsyms_cmds= + thread_safe_flag_spec= + whole_archive_flag_spec= + # include_expsyms should be a list of space-separated symbols to be *always* + # included in the symbol list + include_expsyms= + # exclude_expsyms can be an extended regexp of symbols to exclude + # it will be wrapped by ` (' and `)$', so one must not match beginning or + # end of line. Example: `a|bc|.*d.*' will exclude the symbols `a' and `bc', + # as well as any symbol that contains `d'. + exclude_expsyms='_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*' + # Although _GLOBAL_OFFSET_TABLE_ is a valid symbol C name, most a.out + # platforms (ab)use it in PIC code, but their linkers get confused if + # the symbol is explicitly referenced. Since portable code cannot + # rely on this symbol name, it's probably fine to never include it in + # preloaded symbol tables. + # Exclude shared library initialization/finalization symbols. + extract_expsyms_cmds= + + case $host_os in + cygwin* | mingw* | pw32* | cegcc*) + # FIXME: the MSVC++ port hasn't been tested in a loooong time + # When not using gcc, we currently assume that we are using + # Microsoft Visual C++. + if test "$GCC" != yes; then + with_gnu_ld=no + fi + ;; + interix*) + # we just hope/assume this is gcc and not c89 (= MSVC++) + with_gnu_ld=yes + ;; + openbsd*) + with_gnu_ld=no + ;; + esac + + ld_shlibs=yes + if test "$with_gnu_ld" = yes; then + # If archive_cmds runs LD, not CC, wlarc should be empty + wlarc='${wl}' + + # Set some defaults for GNU ld with shared library support. These + # are reset later if shared libraries are not supported. Putting them + # here allows them to be overridden if necessary. + runpath_var=LD_RUN_PATH + hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' + export_dynamic_flag_spec='${wl}--export-dynamic' + # ancient GNU ld didn't support --whole-archive et. al. + if $LD --help 2>&1 | $GREP 'no-whole-archive' > /dev/null; then + whole_archive_flag_spec="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' + else + whole_archive_flag_spec= + fi + supports_anon_versioning=no + case `$LD -v 2>&1` in + *\ [01].* | *\ 2.[0-9].* | *\ 2.10.*) ;; # catch versions < 2.11 + *\ 2.11.93.0.2\ *) supports_anon_versioning=yes ;; # RH7.3 ... + *\ 2.11.92.0.12\ *) supports_anon_versioning=yes ;; # Mandrake 8.2 ... + *\ 2.11.*) ;; # other 2.11 versions + *) supports_anon_versioning=yes ;; + esac + + # See if GNU ld supports shared libraries. + case $host_os in + aix[3-9]*) + # On AIX/PPC, the GNU linker is very broken + if test "$host_cpu" != ia64; then + ld_shlibs=no + cat <<_LT_EOF 1>&2 + +*** Warning: the GNU linker, at least up to release 2.9.1, is reported +*** to be unable to reliably create shared libraries on AIX. +*** Therefore, libtool is disabling shared libraries support. If you +*** really care for shared libraries, you may want to modify your PATH +*** so that a non-GNU linker is found, and then restart. + +_LT_EOF + fi + ;; + + amigaos*) + case $host_cpu in + powerpc) + # see comment about AmigaOS4 .so support + archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + archive_expsym_cmds='' + ;; + m68k) + archive_cmds='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' + hardcode_libdir_flag_spec='-L$libdir' + hardcode_minus_L=yes + ;; + esac + ;; + + beos*) + if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then + allow_undefined_flag=unsupported + # Joseph Beckenbach says some releases of gcc + # support --undefined. This deserves some investigation. FIXME + archive_cmds='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + else + ld_shlibs=no + fi + ;; + + cygwin* | mingw* | pw32* | cegcc*) + # _LT_TAGVAR(hardcode_libdir_flag_spec, ) is actually meaningless, + # as there is no search path for DLLs. + hardcode_libdir_flag_spec='-L$libdir' + allow_undefined_flag=unsupported + always_export_symbols=no + enable_shared_with_static_runtimes=yes + export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS][ ]/s/.*[ ]\([^ ]*\)/\1 DATA/'\'' | $SED -e '\''/^[AITW][ ]/s/.*[ ]//'\'' | sort | uniq > $export_symbols' + + if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then + archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' + # If the export-symbols file already is a .def file (1st line + # is EXPORTS), use it as is; otherwise, prepend... + archive_expsym_cmds='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then + cp $export_symbols $output_objdir/$soname.def; + else + echo EXPORTS > $output_objdir/$soname.def; + cat $export_symbols >> $output_objdir/$soname.def; + fi~ + $CC -shared $output_objdir/$soname.def $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' + else + ld_shlibs=no + fi + ;; + + interix[3-9]*) + hardcode_direct=no + hardcode_shlibpath_var=no + hardcode_libdir_flag_spec='${wl}-rpath,$libdir' + export_dynamic_flag_spec='${wl}-E' + # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc. + # Instead, shared libraries are loaded at an image base (0x10000000 by + # default) and relocated if they conflict, which is a slow very memory + # consuming and fragmenting process. To avoid this, we pick a random, + # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link + # time. Moving up from 0x10000000 also allows more sbrk(2) space. + archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' + archive_expsym_cmds='sed "s,^,_," $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--retain-symbols-file,$output_objdir/$soname.expsym ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' + ;; + + gnu* | linux* | tpf* | k*bsd*-gnu) + tmp_diet=no + if test "$host_os" = linux-dietlibc; then + case $cc_basename in + diet\ *) tmp_diet=yes;; # linux-dietlibc with static linking (!diet-dyn) + esac + fi + if $LD --help 2>&1 | $EGREP ': supported targets:.* elf' > /dev/null \ + && test "$tmp_diet" = no + then + tmp_addflag= + tmp_sharedflag='-shared' + case $cc_basename,$host_cpu in + pgcc*) # Portland Group C compiler + whole_archive_flag_spec='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $ECHO \"$new_convenience\"` ${wl}--no-whole-archive' + tmp_addflag=' $pic_flag' + ;; + pgf77* | pgf90* | pgf95*) # Portland Group f77 and f90 compilers + whole_archive_flag_spec='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $ECHO \"$new_convenience\"` ${wl}--no-whole-archive' + tmp_addflag=' $pic_flag -Mnomain' ;; + ecc*,ia64* | icc*,ia64*) # Intel C compiler on ia64 + tmp_addflag=' -i_dynamic' ;; + efc*,ia64* | ifort*,ia64*) # Intel Fortran compiler on ia64 + tmp_addflag=' -i_dynamic -nofor_main' ;; + ifc* | ifort*) # Intel Fortran compiler + tmp_addflag=' -nofor_main' ;; + lf95*) # Lahey Fortran 8.1 + whole_archive_flag_spec= + tmp_sharedflag='--shared' ;; + xl[cC]*) # IBM XL C 8.0 on PPC (deal with xlf below) + tmp_sharedflag='-qmkshrobj' + tmp_addflag= ;; + esac + case `$CC -V 2>&1 | sed 5q` in + *Sun\ C*) # Sun C 5.9 + whole_archive_flag_spec='${wl}--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; $ECHO \"$new_convenience\"` ${wl}--no-whole-archive' + compiler_needs_object=yes + tmp_sharedflag='-G' ;; + *Sun\ F*) # Sun Fortran 8.3 + tmp_sharedflag='-G' ;; + esac + archive_cmds='$CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + + if test "x$supports_anon_versioning" = xyes; then + archive_expsym_cmds='echo "{ global:" > $output_objdir/$libname.ver~ + cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ + echo "local: *; };" >> $output_objdir/$libname.ver~ + $CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib' + fi + + case $cc_basename in + xlf*) + # IBM XL Fortran 10.1 on PPC cannot create shared libs itself + whole_archive_flag_spec='--whole-archive$convenience --no-whole-archive' + hardcode_libdir_flag_spec= + hardcode_libdir_flag_spec_ld='-rpath $libdir' + archive_cmds='$LD -shared $libobjs $deplibs $compiler_flags -soname $soname -o $lib' + if test "x$supports_anon_versioning" = xyes; then + archive_expsym_cmds='echo "{ global:" > $output_objdir/$libname.ver~ + cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ + echo "local: *; };" >> $output_objdir/$libname.ver~ + $LD -shared $libobjs $deplibs $compiler_flags -soname $soname -version-script $output_objdir/$libname.ver -o $lib' + fi + ;; + esac + else + ld_shlibs=no + fi + ;; + + netbsd*) + if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then + archive_cmds='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib' + wlarc= + else + archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' + fi + ;; + + solaris*) + if $LD -v 2>&1 | $GREP 'BFD 2\.8' > /dev/null; then + ld_shlibs=no + cat <<_LT_EOF 1>&2 + +*** Warning: The releases 2.8.* of the GNU linker cannot reliably +*** create shared libraries on Solaris systems. Therefore, libtool +*** is disabling shared libraries support. We urge you to upgrade GNU +*** binutils to release 2.9.1 or newer. Another option is to modify +*** your PATH or compiler configuration so that the native linker is +*** used, and then restart. + +_LT_EOF + elif $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then + archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' + else + ld_shlibs=no + fi + ;; + + sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX*) + case `$LD -v 2>&1` in + *\ [01].* | *\ 2.[0-9].* | *\ 2.1[0-5].*) + ld_shlibs=no + cat <<_LT_EOF 1>&2 + +*** Warning: Releases of the GNU linker prior to 2.16.91.0.3 can not +*** reliably create shared libraries on SCO systems. Therefore, libtool +*** is disabling shared libraries support. We urge you to upgrade GNU +*** binutils to release 2.16.91.0.3 or newer. Another option is to modify +*** your PATH or compiler configuration so that the native linker is +*** used, and then restart. + +_LT_EOF + ;; + *) + # For security reasons, it is highly recommended that you always + # use absolute paths for naming shared libraries, and exclude the + # DT_RUNPATH tag from executables and libraries. But doing so + # requires that you compile everything twice, which is a pain. + if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then + hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' + archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' + else + ld_shlibs=no + fi + ;; + esac + ;; + + sunos4*) + archive_cmds='$LD -assert pure-text -Bshareable -o $lib $libobjs $deplibs $linker_flags' + wlarc= + hardcode_direct=yes + hardcode_shlibpath_var=no + ;; + + *) + if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then + archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' + else + ld_shlibs=no + fi + ;; + esac + + if test "$ld_shlibs" = no; then + runpath_var= + hardcode_libdir_flag_spec= + export_dynamic_flag_spec= + whole_archive_flag_spec= + fi + else + # PORTME fill in a description of your system's linker (not GNU ld) + case $host_os in + aix3*) + allow_undefined_flag=unsupported + always_export_symbols=yes + archive_expsym_cmds='$LD -o $output_objdir/$soname $libobjs $deplibs $linker_flags -bE:$export_symbols -T512 -H512 -bM:SRE~$AR $AR_FLAGS $lib $output_objdir/$soname' + # Note: this linker hardcodes the directories in LIBPATH if there + # are no directories specified by -L. + hardcode_minus_L=yes + if test "$GCC" = yes && test -z "$lt_prog_compiler_static"; then + # Neither direct hardcoding nor static linking is supported with a + # broken collect2. + hardcode_direct=unsupported + fi + ;; + + aix[4-9]*) + if test "$host_cpu" = ia64; then + # On IA64, the linker does run time linking by default, so we don't + # have to do anything special. + aix_use_runtimelinking=no + exp_sym_flag='-Bexport' + no_entry_flag="" + else + # If we're using GNU nm, then we don't want the "-C" option. + # -C means demangle to AIX nm, but means don't demangle with GNU nm + if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then + export_symbols_cmds='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && (substr(\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' + else + export_symbols_cmds='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && (substr(\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' + fi + aix_use_runtimelinking=no + + # Test if we are trying to use run time linking or normal + # AIX style linking. If -brtl is somewhere in LDFLAGS, we + # need to do runtime linking. + case $host_os in aix4.[23]|aix4.[23].*|aix[5-9]*) + for ld_flag in $LDFLAGS; do + if (test $ld_flag = "-brtl" || test $ld_flag = "-Wl,-brtl"); then + aix_use_runtimelinking=yes + break + fi + done + ;; + esac + + exp_sym_flag='-bexport' + no_entry_flag='-bnoentry' + fi + + # When large executables or shared objects are built, AIX ld can + # have problems creating the table of contents. If linking a library + # or program results in "error TOC overflow" add -mminimal-toc to + # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not + # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS. + + archive_cmds='' + hardcode_direct=yes + hardcode_direct_absolute=yes + hardcode_libdir_separator=':' + link_all_deplibs=yes + file_list_spec='${wl}-f,' + + if test "$GCC" = yes; then + case $host_os in aix4.[012]|aix4.[012].*) + # We only want to do this on AIX 4.2 and lower, the check + # below for broken collect2 doesn't work under 4.3+ + collect2name=`${CC} -print-prog-name=collect2` + if test -f "$collect2name" && + strings "$collect2name" | $GREP resolve_lib_name >/dev/null + then + # We have reworked collect2 + : + else + # We have old collect2 + hardcode_direct=unsupported + # It fails to find uninstalled libraries when the uninstalled + # path is not listed in the libpath. Setting hardcode_minus_L + # to unsupported forces relinking + hardcode_minus_L=yes + hardcode_libdir_flag_spec='-L$libdir' + hardcode_libdir_separator= + fi + ;; + esac + shared_flag='-shared' + if test "$aix_use_runtimelinking" = yes; then + shared_flag="$shared_flag "'${wl}-G' + fi + else + # not using gcc + if test "$host_cpu" = ia64; then + # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release + # chokes on -Wl,-G. The following line is correct: + shared_flag='-G' + else + if test "$aix_use_runtimelinking" = yes; then + shared_flag='${wl}-G' + else + shared_flag='${wl}-bM:SRE' + fi + fi + fi + + export_dynamic_flag_spec='${wl}-bexpall' + # It seems that -bexpall does not export symbols beginning with + # underscore (_), so it is better to generate a list of symbols to export. + always_export_symbols=yes + if test "$aix_use_runtimelinking" = yes; then + # Warning - without using the other runtime loading flags (-brtl), + # -berok will link without error, but may produce a broken library. + allow_undefined_flag='-berok' + # Determine the default libpath from the value encoded in an + # empty executable. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + +lt_aix_libpath_sed=' + /Import File Strings/,/^$/ { + /^0/ { + s/^0 *\(.*\)$/\1/ + p + } + }' +aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` +# Check for a 64-bit object if we didn't find anything. +if test -z "$aix_libpath"; then + aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` +fi +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi + + hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'"$aix_libpath" + archive_expsym_cmds='$CC -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then $ECHO "X${wl}${allow_undefined_flag}" | $Xsed; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag" + else + if test "$host_cpu" = ia64; then + hardcode_libdir_flag_spec='${wl}-R $libdir:/usr/lib:/lib' + allow_undefined_flag="-z nodefs" + archive_expsym_cmds="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$exp_sym_flag:\$export_symbols" + else + # Determine the default libpath from the value encoded in an + # empty executable. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + +lt_aix_libpath_sed=' + /Import File Strings/,/^$/ { + /^0/ { + s/^0 *\(.*\)$/\1/ + p + } + }' +aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` +# Check for a 64-bit object if we didn't find anything. +if test -z "$aix_libpath"; then + aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` +fi +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi + + hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'"$aix_libpath" + # Warning - without using the other run time loading flags, + # -berok will link without error, but may produce a broken library. + no_undefined_flag=' ${wl}-bernotok' + allow_undefined_flag=' ${wl}-berok' + # Exported symbols can be pulled into shared objects from archives + whole_archive_flag_spec='$convenience' + archive_cmds_need_lc=yes + # This is similar to how AIX traditionally builds its shared libraries. + archive_expsym_cmds="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs ${wl}-bnoentry $compiler_flags ${wl}-bE:$export_symbols${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname' + fi + fi + ;; + + amigaos*) + case $host_cpu in + powerpc) + # see comment about AmigaOS4 .so support + archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + archive_expsym_cmds='' + ;; + m68k) + archive_cmds='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' + hardcode_libdir_flag_spec='-L$libdir' + hardcode_minus_L=yes + ;; + esac + ;; + + bsdi[45]*) + export_dynamic_flag_spec=-rdynamic + ;; + + cygwin* | mingw* | pw32* | cegcc*) + # When not using gcc, we currently assume that we are using + # Microsoft Visual C++. + # hardcode_libdir_flag_spec is actually meaningless, as there is + # no search path for DLLs. + hardcode_libdir_flag_spec=' ' + allow_undefined_flag=unsupported + # Tell ltmain to make .lib files, not .a files. + libext=lib + # Tell ltmain to make .dll files, not .so files. + shrext_cmds=".dll" + # FIXME: Setting linknames here is a bad hack. + archive_cmds='$CC -o $lib $libobjs $compiler_flags `$ECHO "X$deplibs" | $Xsed -e '\''s/ -lc$//'\''` -link -dll~linknames=' + # The linker will automatically build a .lib file if we build a DLL. + old_archive_from_new_cmds='true' + # FIXME: Should let the user specify the lib program. + old_archive_cmds='lib -OUT:$oldlib$oldobjs$old_deplibs' + fix_srcfile_path='`cygpath -w "$srcfile"`' + enable_shared_with_static_runtimes=yes + ;; + + darwin* | rhapsody*) + + + archive_cmds_need_lc=no + hardcode_direct=no + hardcode_automatic=yes + hardcode_shlibpath_var=unsupported + whole_archive_flag_spec='' + link_all_deplibs=yes + allow_undefined_flag="$_lt_dar_allow_undefined" + case $cc_basename in + ifort*) _lt_dar_can_shared=yes ;; + *) _lt_dar_can_shared=$GCC ;; + esac + if test "$_lt_dar_can_shared" = "yes"; then + output_verbose_link_cmd=echo + archive_cmds="\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod${_lt_dsymutil}" + module_cmds="\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dsymutil}" + archive_expsym_cmds="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring ${_lt_dar_single_mod}${_lt_dar_export_syms}${_lt_dsymutil}" + module_expsym_cmds="sed -e 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dar_export_syms}${_lt_dsymutil}" + + else + ld_shlibs=no + fi + + ;; + + dgux*) + archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + hardcode_libdir_flag_spec='-L$libdir' + hardcode_shlibpath_var=no + ;; + + freebsd1*) + ld_shlibs=no + ;; + + # FreeBSD 2.2.[012] allows us to include c++rt0.o to get C++ constructor + # support. Future versions do this automatically, but an explicit c++rt0.o + # does not break anything, and helps significantly (at the cost of a little + # extra space). + freebsd2.2*) + archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags /usr/lib/c++rt0.o' + hardcode_libdir_flag_spec='-R$libdir' + hardcode_direct=yes + hardcode_shlibpath_var=no + ;; + + # Unfortunately, older versions of FreeBSD 2 do not have this feature. + freebsd2*) + archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' + hardcode_direct=yes + hardcode_minus_L=yes + hardcode_shlibpath_var=no + ;; + + # FreeBSD 3 and greater uses gcc -shared to do shared libraries. + freebsd* | dragonfly*) + archive_cmds='$CC -shared -o $lib $libobjs $deplibs $compiler_flags' + hardcode_libdir_flag_spec='-R$libdir' + hardcode_direct=yes + hardcode_shlibpath_var=no + ;; + + hpux9*) + if test "$GCC" = yes; then + archive_cmds='$RM $output_objdir/$soname~$CC -shared -fPIC ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' + else + archive_cmds='$RM $output_objdir/$soname~$LD -b +b $install_libdir -o $output_objdir/$soname $libobjs $deplibs $linker_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' + fi + hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir' + hardcode_libdir_separator=: + hardcode_direct=yes + + # hardcode_minus_L: Not really in the search PATH, + # but as the default location of the library. + hardcode_minus_L=yes + export_dynamic_flag_spec='${wl}-E' + ;; + + hpux10*) + if test "$GCC" = yes -a "$with_gnu_ld" = no; then + archive_cmds='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' + else + archive_cmds='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags' + fi + if test "$with_gnu_ld" = no; then + hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir' + hardcode_libdir_flag_spec_ld='+b $libdir' + hardcode_libdir_separator=: + hardcode_direct=yes + hardcode_direct_absolute=yes + export_dynamic_flag_spec='${wl}-E' + # hardcode_minus_L: Not really in the search PATH, + # but as the default location of the library. + hardcode_minus_L=yes + fi + ;; + + hpux11*) + if test "$GCC" = yes -a "$with_gnu_ld" = no; then + case $host_cpu in + hppa*64*) + archive_cmds='$CC -shared ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' + ;; + ia64*) + archive_cmds='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' + ;; + *) + archive_cmds='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' + ;; + esac + else + case $host_cpu in + hppa*64*) + archive_cmds='$CC -b ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' + ;; + ia64*) + archive_cmds='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' + ;; + *) + archive_cmds='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' + ;; + esac + fi + if test "$with_gnu_ld" = no; then + hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir' + hardcode_libdir_separator=: + + case $host_cpu in + hppa*64*|ia64*) + hardcode_direct=no + hardcode_shlibpath_var=no + ;; + *) + hardcode_direct=yes + hardcode_direct_absolute=yes + export_dynamic_flag_spec='${wl}-E' + + # hardcode_minus_L: Not really in the search PATH, + # but as the default location of the library. + hardcode_minus_L=yes + ;; + esac + fi + ;; + + irix5* | irix6* | nonstopux*) + if test "$GCC" = yes; then + archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' + # Try to use the -exported_symbol ld option, if it does not + # work, assume that -exports_file does not work either and + # implicitly export all symbols. + save_LDFLAGS="$LDFLAGS" + LDFLAGS="$LDFLAGS -shared ${wl}-exported_symbol ${wl}foo ${wl}-update_registry ${wl}/dev/null" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +int foo(void) {} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations ${wl}-exports_file ${wl}$export_symbols -o $lib' + +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + LDFLAGS="$save_LDFLAGS" + else + archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib' + archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -exports_file $export_symbols -o $lib' + fi + archive_cmds_need_lc='no' + hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' + hardcode_libdir_separator=: + inherit_rpath=yes + link_all_deplibs=yes + ;; + + netbsd*) + if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then + archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' # a.out + else + archive_cmds='$LD -shared -o $lib $libobjs $deplibs $linker_flags' # ELF + fi + hardcode_libdir_flag_spec='-R$libdir' + hardcode_direct=yes + hardcode_shlibpath_var=no + ;; + + newsos6) + archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + hardcode_direct=yes + hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' + hardcode_libdir_separator=: + hardcode_shlibpath_var=no + ;; + + *nto* | *qnx*) + ;; + + openbsd*) + if test -f /usr/libexec/ld.so; then + hardcode_direct=yes + hardcode_shlibpath_var=no + hardcode_direct_absolute=yes + if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then + archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' + archive_expsym_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-retain-symbols-file,$export_symbols' + hardcode_libdir_flag_spec='${wl}-rpath,$libdir' + export_dynamic_flag_spec='${wl}-E' + else + case $host_os in + openbsd[01].* | openbsd2.[0-7] | openbsd2.[0-7].*) + archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' + hardcode_libdir_flag_spec='-R$libdir' + ;; + *) + archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' + hardcode_libdir_flag_spec='${wl}-rpath,$libdir' + ;; + esac + fi + else + ld_shlibs=no + fi + ;; + + os2*) + hardcode_libdir_flag_spec='-L$libdir' + hardcode_minus_L=yes + allow_undefined_flag=unsupported + archive_cmds='$ECHO "LIBRARY $libname INITINSTANCE" > $output_objdir/$libname.def~$ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~$ECHO DATA >> $output_objdir/$libname.def~$ECHO " SINGLE NONSHARED" >> $output_objdir/$libname.def~$ECHO EXPORTS >> $output_objdir/$libname.def~emxexp $libobjs >> $output_objdir/$libname.def~$CC -Zdll -Zcrtdll -o $lib $libobjs $deplibs $compiler_flags $output_objdir/$libname.def' + old_archive_from_new_cmds='emximp -o $output_objdir/$libname.a $output_objdir/$libname.def' + ;; + + osf3*) + if test "$GCC" = yes; then + allow_undefined_flag=' ${wl}-expect_unresolved ${wl}\*' + archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' + else + allow_undefined_flag=' -expect_unresolved \*' + archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib' + fi + archive_cmds_need_lc='no' + hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' + hardcode_libdir_separator=: + ;; + + osf4* | osf5*) # as osf3* with the addition of -msym flag + if test "$GCC" = yes; then + allow_undefined_flag=' ${wl}-expect_unresolved ${wl}\*' + archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' + hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' + else + allow_undefined_flag=' -expect_unresolved \*' + archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags -msym -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib' + archive_expsym_cmds='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done; printf "%s\\n" "-hidden">> $lib.exp~ + $CC -shared${allow_undefined_flag} ${wl}-input ${wl}$lib.exp $compiler_flags $libobjs $deplibs -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib~$RM $lib.exp' + + # Both c and cxx compiler support -rpath directly + hardcode_libdir_flag_spec='-rpath $libdir' + fi + archive_cmds_need_lc='no' + hardcode_libdir_separator=: + ;; + + solaris*) + no_undefined_flag=' -z defs' + if test "$GCC" = yes; then + wlarc='${wl}' + archive_cmds='$CC -shared ${wl}-z ${wl}text ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' + archive_expsym_cmds='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ + $CC -shared ${wl}-z ${wl}text ${wl}-M ${wl}$lib.exp ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp' + else + case `$CC -V 2>&1` in + *"Compilers 5.0"*) + wlarc='' + archive_cmds='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linker_flags' + archive_expsym_cmds='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ + $LD -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$RM $lib.exp' + ;; + *) + wlarc='${wl}' + archive_cmds='$CC -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $compiler_flags' + archive_expsym_cmds='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ + $CC -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp' + ;; + esac + fi + hardcode_libdir_flag_spec='-R$libdir' + hardcode_shlibpath_var=no + case $host_os in + solaris2.[0-5] | solaris2.[0-5].*) ;; + *) + # The compiler driver will combine and reorder linker options, + # but understands `-z linker_flag'. GCC discards it without `$wl', + # but is careful enough not to reorder. + # Supported since Solaris 2.6 (maybe 2.5.1?) + if test "$GCC" = yes; then + whole_archive_flag_spec='${wl}-z ${wl}allextract$convenience ${wl}-z ${wl}defaultextract' + else + whole_archive_flag_spec='-z allextract$convenience -z defaultextract' + fi + ;; + esac + link_all_deplibs=yes + ;; + + sunos4*) + if test "x$host_vendor" = xsequent; then + # Use $CC to link under sequent, because it throws in some extra .o + # files that make .init and .fini sections work. + archive_cmds='$CC -G ${wl}-h $soname -o $lib $libobjs $deplibs $compiler_flags' + else + archive_cmds='$LD -assert pure-text -Bstatic -o $lib $libobjs $deplibs $linker_flags' + fi + hardcode_libdir_flag_spec='-L$libdir' + hardcode_direct=yes + hardcode_minus_L=yes + hardcode_shlibpath_var=no + ;; + + sysv4) + case $host_vendor in + sni) + archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + hardcode_direct=yes # is this really true??? + ;; + siemens) + ## LD is ld it makes a PLAMLIB + ## CC just makes a GrossModule. + archive_cmds='$LD -G -o $lib $libobjs $deplibs $linker_flags' + reload_cmds='$CC -r -o $output$reload_objs' + hardcode_direct=no + ;; + motorola) + archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + hardcode_direct=no #Motorola manual says yes, but my tests say they lie + ;; + esac + runpath_var='LD_RUN_PATH' + hardcode_shlibpath_var=no + ;; + + sysv4.3*) + archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + hardcode_shlibpath_var=no + export_dynamic_flag_spec='-Bexport' + ;; + + sysv4*MP*) + if test -d /usr/nec; then + archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + hardcode_shlibpath_var=no + runpath_var=LD_RUN_PATH + hardcode_runpath_var=yes + ld_shlibs=yes + fi + ;; + + sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[01].[10]* | unixware7* | sco3.2v5.0.[024]*) + no_undefined_flag='${wl}-z,text' + archive_cmds_need_lc=no + hardcode_shlibpath_var=no + runpath_var='LD_RUN_PATH' + + if test "$GCC" = yes; then + archive_cmds='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + archive_expsym_cmds='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + else + archive_cmds='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + archive_expsym_cmds='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + fi + ;; + + sysv5* | sco3.2v5* | sco5v6*) + # Note: We can NOT use -z defs as we might desire, because we do not + # link with -lc, and that would cause any symbols used from libc to + # always be unresolved, which means just about no library would + # ever link correctly. If we're not using GNU ld we use -z text + # though, which does catch some bad symbols but isn't as heavy-handed + # as -z defs. + no_undefined_flag='${wl}-z,text' + allow_undefined_flag='${wl}-z,nodefs' + archive_cmds_need_lc=no + hardcode_shlibpath_var=no + hardcode_libdir_flag_spec='${wl}-R,$libdir' + hardcode_libdir_separator=':' + link_all_deplibs=yes + export_dynamic_flag_spec='${wl}-Bexport' + runpath_var='LD_RUN_PATH' + + if test "$GCC" = yes; then + archive_cmds='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + archive_expsym_cmds='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + else + archive_cmds='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + archive_expsym_cmds='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + fi + ;; + + uts4*) + archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + hardcode_libdir_flag_spec='-L$libdir' + hardcode_shlibpath_var=no + ;; + + *) + ld_shlibs=no + ;; + esac + + if test x$host_vendor = xsni; then + case $host in + sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*) + export_dynamic_flag_spec='${wl}-Blargedynsym' + ;; + esac + fi + fi + +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ld_shlibs" >&5 +$as_echo "$ld_shlibs" >&6; } +test "$ld_shlibs" = no && can_build_shared=no + +with_gnu_ld=$with_gnu_ld + + + + + + + + + + + + + + + +# +# Do we need to explicitly link libc? +# +case "x$archive_cmds_need_lc" in +x|xyes) + # Assume -lc should be added + archive_cmds_need_lc=yes + + if test "$enable_shared" = yes && test "$GCC" = yes; then + case $archive_cmds in + *'~'*) + # FIXME: we may have to deal with multi-command sequences. + ;; + '$CC '*) + # Test whether the compiler implicitly links with -lc since on some + # systems, -lgcc has to come before -lc. If gcc already passes -lc + # to ld, don't add -lc before -lgcc. + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether -lc should be explicitly linked in" >&5 +$as_echo_n "checking whether -lc should be explicitly linked in... " >&6; } + $RM conftest* + echo "$lt_simple_compile_test_code" > conftest.$ac_ext + + if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } 2>conftest.err; then + soname=conftest + lib=conftest + libobjs=conftest.$ac_objext + deplibs= + wl=$lt_prog_compiler_wl + pic_flag=$lt_prog_compiler_pic + compiler_flags=-v + linker_flags=-v + verstring= + output_objdir=. + libname=conftest + lt_save_allow_undefined_flag=$allow_undefined_flag + allow_undefined_flag= + if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$archive_cmds 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1\""; } >&5 + (eval $archive_cmds 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } + then + archive_cmds_need_lc=no + else + archive_cmds_need_lc=yes + fi + allow_undefined_flag=$lt_save_allow_undefined_flag + else + cat conftest.err 1>&5 + fi + $RM conftest* + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $archive_cmds_need_lc" >&5 +$as_echo "$archive_cmds_need_lc" >&6; } + ;; + esac + fi + ;; +esac + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking dynamic linker characteristics" >&5 +$as_echo_n "checking dynamic linker characteristics... " >&6; } + +if test "$GCC" = yes; then + case $host_os in + darwin*) lt_awk_arg="/^libraries:/,/LR/" ;; + *) lt_awk_arg="/^libraries:/" ;; + esac + lt_search_path_spec=`$CC -print-search-dirs | awk $lt_awk_arg | $SED -e "s/^libraries://" -e "s,=/,/,g"` + if $ECHO "$lt_search_path_spec" | $GREP ';' >/dev/null ; then + # if the path contains ";" then we assume it to be the separator + # otherwise default to the standard path separator (i.e. ":") - it is + # assumed that no part of a normal pathname contains ";" but that should + # okay in the real world where ";" in dirpaths is itself problematic. + lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED -e 's/;/ /g'` + else + lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` + fi + # Ok, now we have the path, separated by spaces, we can step through it + # and add multilib dir if necessary. + lt_tmp_lt_search_path_spec= + lt_multi_os_dir=`$CC $CPPFLAGS $CFLAGS $LDFLAGS -print-multi-os-directory 2>/dev/null` + for lt_sys_path in $lt_search_path_spec; do + if test -d "$lt_sys_path/$lt_multi_os_dir"; then + lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path/$lt_multi_os_dir" + else + test -d "$lt_sys_path" && \ + lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path" + fi + done + lt_search_path_spec=`$ECHO $lt_tmp_lt_search_path_spec | awk ' +BEGIN {RS=" "; FS="/|\n";} { + lt_foo=""; + lt_count=0; + for (lt_i = NF; lt_i > 0; lt_i--) { + if ($lt_i != "" && $lt_i != ".") { + if ($lt_i == "..") { + lt_count++; + } else { + if (lt_count == 0) { + lt_foo="/" $lt_i lt_foo; + } else { + lt_count--; + } + } + } + } + if (lt_foo != "") { lt_freq[lt_foo]++; } + if (lt_freq[lt_foo] == 1) { print lt_foo; } +}'` + sys_lib_search_path_spec=`$ECHO $lt_search_path_spec` +else + sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib" +fi +library_names_spec= +libname_spec='lib$name' +soname_spec= +shrext_cmds=".so" +postinstall_cmds= +postuninstall_cmds= +finish_cmds= +finish_eval= +shlibpath_var= +shlibpath_overrides_runpath=unknown +version_type=none +dynamic_linker="$host_os ld.so" +sys_lib_dlsearch_path_spec="/lib /usr/lib" +need_lib_prefix=unknown +hardcode_into_libs=no + +# when you set need_version to no, make sure it does not cause -set_version +# flags to be left without arguments +need_version=unknown + +case $host_os in +aix3*) + version_type=linux + library_names_spec='${libname}${release}${shared_ext}$versuffix $libname.a' + shlibpath_var=LIBPATH + + # AIX 3 has no versioning support, so we append a major version to the name. + soname_spec='${libname}${release}${shared_ext}$major' + ;; + +aix[4-9]*) + version_type=linux + need_lib_prefix=no + need_version=no + hardcode_into_libs=yes + if test "$host_cpu" = ia64; then + # AIX 5 supports IA64 + library_names_spec='${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext}$versuffix $libname${shared_ext}' + shlibpath_var=LD_LIBRARY_PATH + else + # With GCC up to 2.95.x, collect2 would create an import file + # for dependence libraries. The import file would start with + # the line `#! .'. This would cause the generated library to + # depend on `.', always an invalid library. This was fixed in + # development snapshots of GCC prior to 3.0. + case $host_os in + aix4 | aix4.[01] | aix4.[01].*) + if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)' + echo ' yes ' + echo '#endif'; } | ${CC} -E - | $GREP yes > /dev/null; then + : + else + can_build_shared=no + fi + ;; + esac + # AIX (on Power*) has no versioning support, so currently we can not hardcode correct + # soname into executable. Probably we can add versioning support to + # collect2, so additional links can be useful in future. + if test "$aix_use_runtimelinking" = yes; then + # If using run time linking (on AIX 4.2 or later) use lib.so + # instead of lib.a to let people know that these are not + # typical AIX shared libraries. + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + else + # We preserve .a as extension for shared libraries through AIX4.2 + # and later when we are not doing run time linking. + library_names_spec='${libname}${release}.a $libname.a' + soname_spec='${libname}${release}${shared_ext}$major' + fi + shlibpath_var=LIBPATH + fi + ;; + +amigaos*) + case $host_cpu in + powerpc) + # Since July 2007 AmigaOS4 officially supports .so libraries. + # When compiling the executable, add -use-dynld -Lsobjs: to the compileline. + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + ;; + m68k) + library_names_spec='$libname.ixlibrary $libname.a' + # Create ${libname}_ixlibrary.a entries in /sys/libs. + finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`$ECHO "X$lib" | $Xsed -e '\''s%^.*/\([^/]*\)\.ixlibrary$%\1%'\''`; test $RM /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done' + ;; + esac + ;; + +beos*) + library_names_spec='${libname}${shared_ext}' + dynamic_linker="$host_os ld.so" + shlibpath_var=LIBRARY_PATH + ;; + +bsdi[45]*) + version_type=linux + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir' + shlibpath_var=LD_LIBRARY_PATH + sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib" + sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib" + # the default ld.so.conf also contains /usr/contrib/lib and + # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow + # libtool to hard-code these into programs + ;; + +cygwin* | mingw* | pw32* | cegcc*) + version_type=windows + shrext_cmds=".dll" + need_version=no + need_lib_prefix=no + + case $GCC,$host_os in + yes,cygwin* | yes,mingw* | yes,pw32* | yes,cegcc*) + library_names_spec='$libname.dll.a' + # DLL is installed to $(libdir)/../bin by postinstall_cmds + postinstall_cmds='base_file=`basename \${file}`~ + dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i; echo \$dlname'\''`~ + dldir=$destdir/`dirname \$dlpath`~ + test -d \$dldir || mkdir -p \$dldir~ + $install_prog $dir/$dlname \$dldir/$dlname~ + chmod a+x \$dldir/$dlname~ + if test -n '\''$stripme'\'' && test -n '\''$striplib'\''; then + eval '\''$striplib \$dldir/$dlname'\'' || exit \$?; + fi' + postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ + dlpath=$dir/\$dldll~ + $RM \$dlpath' + shlibpath_overrides_runpath=yes + + case $host_os in + cygwin*) + # Cygwin DLLs use 'cyg' prefix rather than 'lib' + soname_spec='`echo ${libname} | sed -e 's/^lib/cyg/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' + sys_lib_search_path_spec="/usr/lib /lib/w32api /lib /usr/local/lib" + ;; + mingw* | cegcc*) + # MinGW DLLs use traditional 'lib' prefix + soname_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' + sys_lib_search_path_spec=`$CC -print-search-dirs | $GREP "^libraries:" | $SED -e "s/^libraries://" -e "s,=/,/,g"` + if $ECHO "$sys_lib_search_path_spec" | $GREP ';[c-zC-Z]:/' >/dev/null; then + # It is most probably a Windows format PATH printed by + # mingw gcc, but we are running on Cygwin. Gcc prints its search + # path with ; separators, and with drive letters. We can handle the + # drive letters (cygwin fileutils understands them), so leave them, + # especially as we might pass files found there to a mingw objdump, + # which wouldn't understand a cygwinified path. Ahh. + sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'` + else + sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` + fi + ;; + pw32*) + # pw32 DLLs use 'pw' prefix rather than 'lib' + library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' + ;; + esac + ;; + + *) + library_names_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext} $libname.lib' + ;; + esac + dynamic_linker='Win32 ld.exe' + # FIXME: first we should search . and the directory the executable is in + shlibpath_var=PATH + ;; + +darwin* | rhapsody*) + dynamic_linker="$host_os dyld" + version_type=darwin + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${major}$shared_ext ${libname}$shared_ext' + soname_spec='${libname}${release}${major}$shared_ext' + shlibpath_overrides_runpath=yes + shlibpath_var=DYLD_LIBRARY_PATH + shrext_cmds='`test .$module = .yes && echo .so || echo .dylib`' + + sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/local/lib" + sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib' + ;; + +dgux*) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname$shared_ext' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + ;; + +freebsd1*) + dynamic_linker=no + ;; + +freebsd* | dragonfly*) + # DragonFly does not have aout. When/if they implement a new + # versioning mechanism, adjust this. + if test -x /usr/bin/objformat; then + objformat=`/usr/bin/objformat` + else + case $host_os in + freebsd[123]*) objformat=aout ;; + *) objformat=elf ;; + esac + fi + version_type=freebsd-$objformat + case $version_type in + freebsd-elf*) + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' + need_version=no + need_lib_prefix=no + ;; + freebsd-*) + library_names_spec='${libname}${release}${shared_ext}$versuffix $libname${shared_ext}$versuffix' + need_version=yes + ;; + esac + shlibpath_var=LD_LIBRARY_PATH + case $host_os in + freebsd2*) + shlibpath_overrides_runpath=yes + ;; + freebsd3.[01]* | freebsdelf3.[01]*) + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + ;; + freebsd3.[2-9]* | freebsdelf3.[2-9]* | \ + freebsd4.[0-5] | freebsdelf4.[0-5] | freebsd4.1.1 | freebsdelf4.1.1) + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + ;; + *) # from 4.6 on, and DragonFly + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + ;; + esac + ;; + +gnu*) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + hardcode_into_libs=yes + ;; + +hpux9* | hpux10* | hpux11*) + # Give a soname corresponding to the major version so that dld.sl refuses to + # link against other versions. + version_type=sunos + need_lib_prefix=no + need_version=no + case $host_cpu in + ia64*) + shrext_cmds='.so' + hardcode_into_libs=yes + dynamic_linker="$host_os dld.so" + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + if test "X$HPUX_IA64_MODE" = X32; then + sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib" + else + sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64" + fi + sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec + ;; + hppa*64*) + shrext_cmds='.sl' + hardcode_into_libs=yes + dynamic_linker="$host_os dld.sl" + shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH + shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64" + sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec + ;; + *) + shrext_cmds='.sl' + dynamic_linker="$host_os dld.sl" + shlibpath_var=SHLIB_PATH + shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + ;; + esac + # HP-UX runs *really* slowly unless shared libraries are mode 555. + postinstall_cmds='chmod 555 $lib' + ;; + +interix[3-9]*) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + dynamic_linker='Interix 3.x ld.so.1 (PE, like ELF)' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + ;; + +irix5* | irix6* | nonstopux*) + case $host_os in + nonstopux*) version_type=nonstopux ;; + *) + if test "$lt_cv_prog_gnu_ld" = yes; then + version_type=linux + else + version_type=irix + fi ;; + esac + need_lib_prefix=no + need_version=no + soname_spec='${libname}${release}${shared_ext}$major' + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext} $libname${shared_ext}' + case $host_os in + irix5* | nonstopux*) + libsuff= shlibsuff= + ;; + *) + case $LD in # libtool.m4 will add one of these switches to LD + *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ") + libsuff= shlibsuff= libmagic=32-bit;; + *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ") + libsuff=32 shlibsuff=N32 libmagic=N32;; + *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ") + libsuff=64 shlibsuff=64 libmagic=64-bit;; + *) libsuff= shlibsuff= libmagic=never-match;; + esac + ;; + esac + shlibpath_var=LD_LIBRARY${shlibsuff}_PATH + shlibpath_overrides_runpath=no + sys_lib_search_path_spec="/usr/lib${libsuff} /lib${libsuff} /usr/local/lib${libsuff}" + sys_lib_dlsearch_path_spec="/usr/lib${libsuff} /lib${libsuff}" + hardcode_into_libs=yes + ;; + +# No shared lib support for Linux oldld, aout, or coff. +linux*oldld* | linux*aout* | linux*coff*) + dynamic_linker=no + ;; + +# This must be Linux ELF. +linux* | k*bsd*-gnu) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + # Some binutils ld are patched to set DT_RUNPATH + save_LDFLAGS=$LDFLAGS + save_libdir=$libdir + eval "libdir=/foo; wl=\"$lt_prog_compiler_wl\"; \ + LDFLAGS=\"\$LDFLAGS $hardcode_libdir_flag_spec\"" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + if ($OBJDUMP -p conftest$ac_exeext) 2>/dev/null | grep "RUNPATH.*$libdir" >/dev/null; then : + shlibpath_overrides_runpath=yes +fi +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + LDFLAGS=$save_LDFLAGS + libdir=$save_libdir + + # This implies no fast_install, which is unacceptable. + # Some rework will be needed to allow for fast_install + # before this can be enabled. + hardcode_into_libs=yes + + # Add ABI-specific directories to the system library path. + sys_lib_dlsearch_path_spec="/lib64 /usr/lib64 /lib /usr/lib" + + # Append ld.so.conf contents to the search path + if test -f /etc/ld.so.conf; then + lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s 2>/dev/null", \$2)); skip = 1; } { if (!skip) print \$0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;/^[ ]*hwcap[ ]/d;s/[:, ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;/^$/d' | tr '\n' ' '` + sys_lib_dlsearch_path_spec="$sys_lib_dlsearch_path_spec $lt_ld_extra" + fi + + # We used to test for /lib/ld.so.1 and disable shared libraries on + # powerpc, because MkLinux only supported shared libraries with the + # GNU dynamic linker. Since this was broken with cross compilers, + # most powerpc-linux boxes support dynamic linking these days and + # people can always --disable-shared, the test was removed, and we + # assume the GNU/Linux dynamic linker is in use. + dynamic_linker='GNU/Linux ld.so' + ;; + +netbsd*) + version_type=sunos + need_lib_prefix=no + need_version=no + if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' + finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' + dynamic_linker='NetBSD (a.out) ld.so' + else + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + dynamic_linker='NetBSD ld.elf_so' + fi + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + ;; + +newsos6) + version_type=linux + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + ;; + +*nto* | *qnx*) + version_type=qnx + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + dynamic_linker='ldqnx.so' + ;; + +openbsd*) + version_type=sunos + sys_lib_dlsearch_path_spec="/usr/lib" + need_lib_prefix=no + # Some older versions of OpenBSD (3.3 at least) *do* need versioned libs. + case $host_os in + openbsd3.3 | openbsd3.3.*) need_version=yes ;; + *) need_version=no ;; + esac + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' + finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' + shlibpath_var=LD_LIBRARY_PATH + if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then + case $host_os in + openbsd2.[89] | openbsd2.[89].*) + shlibpath_overrides_runpath=no + ;; + *) + shlibpath_overrides_runpath=yes + ;; + esac + else + shlibpath_overrides_runpath=yes + fi + ;; + +os2*) + libname_spec='$name' + shrext_cmds=".dll" + need_lib_prefix=no + library_names_spec='$libname${shared_ext} $libname.a' + dynamic_linker='OS/2 ld.exe' + shlibpath_var=LIBPATH + ;; + +osf3* | osf4* | osf5*) + version_type=osf + need_lib_prefix=no + need_version=no + soname_spec='${libname}${release}${shared_ext}$major' + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + shlibpath_var=LD_LIBRARY_PATH + sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib" + sys_lib_dlsearch_path_spec="$sys_lib_search_path_spec" + ;; + +rdos*) + dynamic_linker=no + ;; + +solaris*) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + # ldd complains unless libraries are executable + postinstall_cmds='chmod +x $lib' + ;; + +sunos4*) + version_type=sunos + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' + finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + if test "$with_gnu_ld" = yes; then + need_lib_prefix=no + fi + need_version=yes + ;; + +sysv4 | sysv4.3*) + version_type=linux + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + case $host_vendor in + sni) + shlibpath_overrides_runpath=no + need_lib_prefix=no + runpath_var=LD_RUN_PATH + ;; + siemens) + need_lib_prefix=no + ;; + motorola) + need_lib_prefix=no + need_version=no + shlibpath_overrides_runpath=no + sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib' + ;; + esac + ;; + +sysv4*MP*) + if test -d /usr/nec ;then + version_type=linux + library_names_spec='$libname${shared_ext}.$versuffix $libname${shared_ext}.$major $libname${shared_ext}' + soname_spec='$libname${shared_ext}.$major' + shlibpath_var=LD_LIBRARY_PATH + fi + ;; + +sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) + version_type=freebsd-elf + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + if test "$with_gnu_ld" = yes; then + sys_lib_search_path_spec='/usr/local/lib /usr/gnu/lib /usr/ccs/lib /usr/lib /lib' + else + sys_lib_search_path_spec='/usr/ccs/lib /usr/lib' + case $host_os in + sco3.2v5*) + sys_lib_search_path_spec="$sys_lib_search_path_spec /lib" + ;; + esac + fi + sys_lib_dlsearch_path_spec='/usr/lib' + ;; + +tpf*) + # TPF is a cross-target only. Preferred cross-host = GNU/Linux. + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + ;; + +uts4*) + version_type=linux + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + ;; + +*) + dynamic_linker=no + ;; +esac +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $dynamic_linker" >&5 +$as_echo "$dynamic_linker" >&6; } +test "$dynamic_linker" = no && can_build_shared=no + +variables_saved_for_relink="PATH $shlibpath_var $runpath_var" +if test "$GCC" = yes; then + variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH" +fi + +if test "${lt_cv_sys_lib_search_path_spec+set}" = set; then + sys_lib_search_path_spec="$lt_cv_sys_lib_search_path_spec" +fi +if test "${lt_cv_sys_lib_dlsearch_path_spec+set}" = set; then + sys_lib_dlsearch_path_spec="$lt_cv_sys_lib_dlsearch_path_spec" +fi + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to hardcode library paths into programs" >&5 +$as_echo_n "checking how to hardcode library paths into programs... " >&6; } +hardcode_action= +if test -n "$hardcode_libdir_flag_spec" || + test -n "$runpath_var" || + test "X$hardcode_automatic" = "Xyes" ; then + + # We can hardcode non-existent directories. + if test "$hardcode_direct" != no && + # If the only mechanism to avoid hardcoding is shlibpath_var, we + # have to relink, otherwise we might link with an installed library + # when we should be linking with a yet-to-be-installed one + ## test "$_LT_TAGVAR(hardcode_shlibpath_var, )" != no && + test "$hardcode_minus_L" != no; then + # Linking always hardcodes the temporary library directory. + hardcode_action=relink + else + # We can link without hardcoding, and we can hardcode nonexisting dirs. + hardcode_action=immediate + fi +else + # We cannot hardcode anything, or else we can only hardcode existing + # directories. + hardcode_action=unsupported +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $hardcode_action" >&5 +$as_echo "$hardcode_action" >&6; } + +if test "$hardcode_action" = relink || + test "$inherit_rpath" = yes; then + # Fast installation is not supported + enable_fast_install=no +elif test "$shlibpath_overrides_runpath" = yes || + test "$enable_shared" = no; then + # Fast installation is not necessary + enable_fast_install=needless +fi + + + + + + + if test "x$enable_dlopen" != xyes; then + enable_dlopen=unknown + enable_dlopen_self=unknown + enable_dlopen_self_static=unknown +else + lt_cv_dlopen=no + lt_cv_dlopen_libs= + + case $host_os in + beos*) + lt_cv_dlopen="load_add_on" + lt_cv_dlopen_libs= + lt_cv_dlopen_self=yes + ;; + + mingw* | pw32* | cegcc*) + lt_cv_dlopen="LoadLibrary" + lt_cv_dlopen_libs= + ;; + + cygwin*) + lt_cv_dlopen="dlopen" + lt_cv_dlopen_libs= + ;; + + darwin*) + # if libdl is installed we need to link against it + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dlopen in -ldl" >&5 +$as_echo_n "checking for dlopen in -ldl... " >&6; } +if test "${ac_cv_lib_dl_dlopen+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-ldl $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char dlopen (); +int +main () +{ +return dlopen (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_lib_dl_dlopen=yes +else + ac_cv_lib_dl_dlopen=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dl_dlopen" >&5 +$as_echo "$ac_cv_lib_dl_dlopen" >&6; } +if test "x$ac_cv_lib_dl_dlopen" = x""yes; then : + lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl" +else + + lt_cv_dlopen="dyld" + lt_cv_dlopen_libs= + lt_cv_dlopen_self=yes + +fi + + ;; + + *) + ac_fn_c_check_func "$LINENO" "shl_load" "ac_cv_func_shl_load" +if test "x$ac_cv_func_shl_load" = x""yes; then : + lt_cv_dlopen="shl_load" +else + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for shl_load in -ldld" >&5 +$as_echo_n "checking for shl_load in -ldld... " >&6; } +if test "${ac_cv_lib_dld_shl_load+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-ldld $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char shl_load (); +int +main () +{ +return shl_load (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_lib_dld_shl_load=yes +else + ac_cv_lib_dld_shl_load=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dld_shl_load" >&5 +$as_echo "$ac_cv_lib_dld_shl_load" >&6; } +if test "x$ac_cv_lib_dld_shl_load" = x""yes; then : + lt_cv_dlopen="shl_load" lt_cv_dlopen_libs="-ldld" +else + ac_fn_c_check_func "$LINENO" "dlopen" "ac_cv_func_dlopen" +if test "x$ac_cv_func_dlopen" = x""yes; then : + lt_cv_dlopen="dlopen" +else + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dlopen in -ldl" >&5 +$as_echo_n "checking for dlopen in -ldl... " >&6; } +if test "${ac_cv_lib_dl_dlopen+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-ldl $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char dlopen (); +int +main () +{ +return dlopen (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_lib_dl_dlopen=yes +else + ac_cv_lib_dl_dlopen=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dl_dlopen" >&5 +$as_echo "$ac_cv_lib_dl_dlopen" >&6; } +if test "x$ac_cv_lib_dl_dlopen" = x""yes; then : + lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl" +else + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dlopen in -lsvld" >&5 +$as_echo_n "checking for dlopen in -lsvld... " >&6; } +if test "${ac_cv_lib_svld_dlopen+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lsvld $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ -# On IRIX 5.3, sys/types and inttypes.h are conflicting. -for ac_header in sys/types.h sys/stat.h stdlib.h string.h memory.h strings.h \ - inttypes.h stdint.h unistd.h -do : - as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` -ac_fn_c_check_header_compile "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default -" -eval as_val=\$$as_ac_Header - if test "x$as_val" = x""yes; then : - cat >>confdefs.h <<_ACEOF -#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char dlopen (); +int +main () +{ +return dlopen (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_lib_svld_dlopen=yes +else + ac_cv_lib_svld_dlopen=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_svld_dlopen" >&5 +$as_echo "$ac_cv_lib_svld_dlopen" >&6; } +if test "x$ac_cv_lib_svld_dlopen" = x""yes; then : + lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-lsvld" +else + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dld_link in -ldld" >&5 +$as_echo_n "checking for dld_link in -ldld... " >&6; } +if test "${ac_cv_lib_dld_dld_link+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-ldld $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char dld_link (); +int +main () +{ +return dld_link (); + ; + return 0; +} _ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_lib_dld_dld_link=yes +else + ac_cv_lib_dld_dld_link=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dld_dld_link" >&5 +$as_echo "$ac_cv_lib_dld_dld_link" >&6; } +if test "x$ac_cv_lib_dld_dld_link" = x""yes; then : + lt_cv_dlopen="dld_link" lt_cv_dlopen_libs="-ldld" +fi + + +fi + + +fi + + +fi + + +fi + + +fi + + ;; + esac + + if test "x$lt_cv_dlopen" != xno; then + enable_dlopen=yes + else + enable_dlopen=no + fi + + case $lt_cv_dlopen in + dlopen) + save_CPPFLAGS="$CPPFLAGS" + test "x$ac_cv_header_dlfcn_h" = xyes && CPPFLAGS="$CPPFLAGS -DHAVE_DLFCN_H" + + save_LDFLAGS="$LDFLAGS" + wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $export_dynamic_flag_spec\" + + save_LIBS="$LIBS" + LIBS="$lt_cv_dlopen_libs $LIBS" + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether a program can dlopen itself" >&5 +$as_echo_n "checking whether a program can dlopen itself... " >&6; } +if test "${lt_cv_dlopen_self+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test "$cross_compiling" = yes; then : + lt_cv_dlopen_self=cross +else + lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 + lt_status=$lt_dlunknown + cat > conftest.$ac_ext <<_LT_EOF +#line 10656 "configure" +#include "confdefs.h" + +#if HAVE_DLFCN_H +#include +#endif + +#include + +#ifdef RTLD_GLOBAL +# define LT_DLGLOBAL RTLD_GLOBAL +#else +# ifdef DL_GLOBAL +# define LT_DLGLOBAL DL_GLOBAL +# else +# define LT_DLGLOBAL 0 +# endif +#endif + +/* We may have to define LT_DLLAZY_OR_NOW in the command line if we + find out it does not work in some platform. */ +#ifndef LT_DLLAZY_OR_NOW +# ifdef RTLD_LAZY +# define LT_DLLAZY_OR_NOW RTLD_LAZY +# else +# ifdef DL_LAZY +# define LT_DLLAZY_OR_NOW DL_LAZY +# else +# ifdef RTLD_NOW +# define LT_DLLAZY_OR_NOW RTLD_NOW +# else +# ifdef DL_NOW +# define LT_DLLAZY_OR_NOW DL_NOW +# else +# define LT_DLLAZY_OR_NOW 0 +# endif +# endif +# endif +# endif +#endif + +void fnord() { int i=42;} +int main () +{ + void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW); + int status = $lt_dlunknown; + + if (self) + { + if (dlsym (self,"fnord")) status = $lt_dlno_uscore; + else if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore; + /* dlclose (self); */ + } + else + puts (dlerror ()); + + return status; +} +_LT_EOF + if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5 + (eval $ac_link) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } && test -s conftest${ac_exeext} 2>/dev/null; then + (./conftest; exit; ) >&5 2>/dev/null + lt_status=$? + case x$lt_status in + x$lt_dlno_uscore) lt_cv_dlopen_self=yes ;; + x$lt_dlneed_uscore) lt_cv_dlopen_self=yes ;; + x$lt_dlunknown|x*) lt_cv_dlopen_self=no ;; + esac + else : + # compilation failed + lt_cv_dlopen_self=no + fi +fi +rm -fr conftest* + + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_dlopen_self" >&5 +$as_echo "$lt_cv_dlopen_self" >&6; } + + if test "x$lt_cv_dlopen_self" = xyes; then + wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $lt_prog_compiler_static\" + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether a statically linked program can dlopen itself" >&5 +$as_echo_n "checking whether a statically linked program can dlopen itself... " >&6; } +if test "${lt_cv_dlopen_self_static+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test "$cross_compiling" = yes; then : + lt_cv_dlopen_self_static=cross +else + lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 + lt_status=$lt_dlunknown + cat > conftest.$ac_ext <<_LT_EOF +#line 10752 "configure" +#include "confdefs.h" + +#if HAVE_DLFCN_H +#include +#endif + +#include + +#ifdef RTLD_GLOBAL +# define LT_DLGLOBAL RTLD_GLOBAL +#else +# ifdef DL_GLOBAL +# define LT_DLGLOBAL DL_GLOBAL +# else +# define LT_DLGLOBAL 0 +# endif +#endif + +/* We may have to define LT_DLLAZY_OR_NOW in the command line if we + find out it does not work in some platform. */ +#ifndef LT_DLLAZY_OR_NOW +# ifdef RTLD_LAZY +# define LT_DLLAZY_OR_NOW RTLD_LAZY +# else +# ifdef DL_LAZY +# define LT_DLLAZY_OR_NOW DL_LAZY +# else +# ifdef RTLD_NOW +# define LT_DLLAZY_OR_NOW RTLD_NOW +# else +# ifdef DL_NOW +# define LT_DLLAZY_OR_NOW DL_NOW +# else +# define LT_DLLAZY_OR_NOW 0 +# endif +# endif +# endif +# endif +#endif + +void fnord() { int i=42;} +int main () +{ + void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW); + int status = $lt_dlunknown; + + if (self) + { + if (dlsym (self,"fnord")) status = $lt_dlno_uscore; + else if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore; + /* dlclose (self); */ + } + else + puts (dlerror ()); + + return status; +} +_LT_EOF + if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5 + (eval $ac_link) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } && test -s conftest${ac_exeext} 2>/dev/null; then + (./conftest; exit; ) >&5 2>/dev/null + lt_status=$? + case x$lt_status in + x$lt_dlno_uscore) lt_cv_dlopen_self_static=yes ;; + x$lt_dlneed_uscore) lt_cv_dlopen_self_static=yes ;; + x$lt_dlunknown|x*) lt_cv_dlopen_self_static=no ;; + esac + else : + # compilation failed + lt_cv_dlopen_self_static=no + fi +fi +rm -fr conftest* + + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_dlopen_self_static" >&5 +$as_echo "$lt_cv_dlopen_self_static" >&6; } + fi + + CPPFLAGS="$save_CPPFLAGS" + LDFLAGS="$save_LDFLAGS" + LIBS="$save_LIBS" + ;; + esac + + case $lt_cv_dlopen_self in + yes|no) enable_dlopen_self=$lt_cv_dlopen_self ;; + *) enable_dlopen_self=unknown ;; + esac + + case $lt_cv_dlopen_self_static in + yes|no) enable_dlopen_self_static=$lt_cv_dlopen_self_static ;; + *) enable_dlopen_self_static=unknown ;; + esac +fi + + + + + + + + + + + + + + + + + +striplib= +old_striplib= +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether stripping libraries is possible" >&5 +$as_echo_n "checking whether stripping libraries is possible... " >&6; } +if test -n "$STRIP" && $STRIP -V 2>&1 | $GREP "GNU strip" >/dev/null; then + test -z "$old_striplib" && old_striplib="$STRIP --strip-debug" + test -z "$striplib" && striplib="$STRIP --strip-unneeded" + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } +else +# FIXME - insert some real tests, host_os isn't really good enough + case $host_os in + darwin*) + if test -n "$STRIP" ; then + striplib="$STRIP -x" + old_striplib="$STRIP -S" + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + fi + ;; + *) + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + ;; + esac +fi + + + + + + + + + + + + + # Report which library types will actually be built + { $as_echo "$as_me:${as_lineno-$LINENO}: checking if libtool supports shared libraries" >&5 +$as_echo_n "checking if libtool supports shared libraries... " >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $can_build_shared" >&5 +$as_echo "$can_build_shared" >&6; } + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to build shared libraries" >&5 +$as_echo_n "checking whether to build shared libraries... " >&6; } + test "$can_build_shared" = "no" && enable_shared=no + + # On AIX, shared libraries and static libraries use the same namespace, and + # are all built from PIC. + case $host_os in + aix3*) + test "$enable_shared" = yes && enable_static=no + if test -n "$RANLIB"; then + archive_cmds="$archive_cmds~\$RANLIB \$lib" + postinstall_cmds='$RANLIB $lib' + fi + ;; + + aix[4-9]*) + if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then + test "$enable_shared" = yes && enable_static=no + fi + ;; + esac + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_shared" >&5 +$as_echo "$enable_shared" >&6; } + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to build static libraries" >&5 +$as_echo_n "checking whether to build static libraries... " >&6; } + # Make sure either enable_shared or enable_static is yes. + test "$enable_shared" = yes || enable_static=yes + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_static" >&5 +$as_echo "$enable_static" >&6; } + + + + +fi +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + +CC="$lt_save_CC" + + + + + + + + + + + + + + ac_config_commands="$ac_config_commands libtool" + + + + +# Only expand once: + + + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to enable maintainer-specific portions of Makefiles" >&5 +$as_echo_n "checking whether to enable maintainer-specific portions of Makefiles... " >&6; } + # Check whether --enable-maintainer-mode was given. +if test "${enable_maintainer_mode+set}" = set; then : + enableval=$enable_maintainer_mode; USE_MAINTAINER_MODE=$enableval +else + USE_MAINTAINER_MODE=no fi -done + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $USE_MAINTAINER_MODE" >&5 +$as_echo "$USE_MAINTAINER_MODE" >&6; } + if test $USE_MAINTAINER_MODE = yes; then + MAINTAINER_MODE_TRUE= + MAINTAINER_MODE_FALSE='#' +else + MAINTAINER_MODE_TRUE='#' + MAINTAINER_MODE_FALSE= +fi + + MAINT=$MAINTAINER_MODE_TRUE + for ac_header in sys/mman.h @@ -6095,7 +12422,7 @@ ac_config_links="$ac_config_links include/ffitarget.h:src/$TARGETDIR/ffitarget.h" -ac_config_files="$ac_config_files include/ffi.h" +ac_config_files="$ac_config_files include/Makefile include/ffi.h Makefile testsuite/Makefile man/Makefile libffi.pc" ac_config_links="$ac_config_links include/ffi_common.h:include/ffi_common.h" @@ -6926,6 +13253,261 @@ # INIT-COMMANDS # AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir" + + +# The HP-UX ksh and POSIX shell print the target directory to stdout +# if CDPATH is set. +(unset CDPATH) >/dev/null 2>&1 && unset CDPATH + +sed_quote_subst='$sed_quote_subst' +double_quote_subst='$double_quote_subst' +delay_variable_subst='$delay_variable_subst' +macro_version='`$ECHO "X$macro_version" | $Xsed -e "$delay_single_quote_subst"`' +macro_revision='`$ECHO "X$macro_revision" | $Xsed -e "$delay_single_quote_subst"`' +enable_shared='`$ECHO "X$enable_shared" | $Xsed -e "$delay_single_quote_subst"`' +enable_static='`$ECHO "X$enable_static" | $Xsed -e "$delay_single_quote_subst"`' +pic_mode='`$ECHO "X$pic_mode" | $Xsed -e "$delay_single_quote_subst"`' +enable_fast_install='`$ECHO "X$enable_fast_install" | $Xsed -e "$delay_single_quote_subst"`' +host_alias='`$ECHO "X$host_alias" | $Xsed -e "$delay_single_quote_subst"`' +host='`$ECHO "X$host" | $Xsed -e "$delay_single_quote_subst"`' +host_os='`$ECHO "X$host_os" | $Xsed -e "$delay_single_quote_subst"`' +build_alias='`$ECHO "X$build_alias" | $Xsed -e "$delay_single_quote_subst"`' +build='`$ECHO "X$build" | $Xsed -e "$delay_single_quote_subst"`' +build_os='`$ECHO "X$build_os" | $Xsed -e "$delay_single_quote_subst"`' +SED='`$ECHO "X$SED" | $Xsed -e "$delay_single_quote_subst"`' +Xsed='`$ECHO "X$Xsed" | $Xsed -e "$delay_single_quote_subst"`' +GREP='`$ECHO "X$GREP" | $Xsed -e "$delay_single_quote_subst"`' +EGREP='`$ECHO "X$EGREP" | $Xsed -e "$delay_single_quote_subst"`' +FGREP='`$ECHO "X$FGREP" | $Xsed -e "$delay_single_quote_subst"`' +LD='`$ECHO "X$LD" | $Xsed -e "$delay_single_quote_subst"`' +NM='`$ECHO "X$NM" | $Xsed -e "$delay_single_quote_subst"`' +LN_S='`$ECHO "X$LN_S" | $Xsed -e "$delay_single_quote_subst"`' +max_cmd_len='`$ECHO "X$max_cmd_len" | $Xsed -e "$delay_single_quote_subst"`' +ac_objext='`$ECHO "X$ac_objext" | $Xsed -e "$delay_single_quote_subst"`' +exeext='`$ECHO "X$exeext" | $Xsed -e "$delay_single_quote_subst"`' +lt_unset='`$ECHO "X$lt_unset" | $Xsed -e "$delay_single_quote_subst"`' +lt_SP2NL='`$ECHO "X$lt_SP2NL" | $Xsed -e "$delay_single_quote_subst"`' +lt_NL2SP='`$ECHO "X$lt_NL2SP" | $Xsed -e "$delay_single_quote_subst"`' +reload_flag='`$ECHO "X$reload_flag" | $Xsed -e "$delay_single_quote_subst"`' +reload_cmds='`$ECHO "X$reload_cmds" | $Xsed -e "$delay_single_quote_subst"`' +OBJDUMP='`$ECHO "X$OBJDUMP" | $Xsed -e "$delay_single_quote_subst"`' +deplibs_check_method='`$ECHO "X$deplibs_check_method" | $Xsed -e "$delay_single_quote_subst"`' +file_magic_cmd='`$ECHO "X$file_magic_cmd" | $Xsed -e "$delay_single_quote_subst"`' +AR='`$ECHO "X$AR" | $Xsed -e "$delay_single_quote_subst"`' +AR_FLAGS='`$ECHO "X$AR_FLAGS" | $Xsed -e "$delay_single_quote_subst"`' +STRIP='`$ECHO "X$STRIP" | $Xsed -e "$delay_single_quote_subst"`' +RANLIB='`$ECHO "X$RANLIB" | $Xsed -e "$delay_single_quote_subst"`' +old_postinstall_cmds='`$ECHO "X$old_postinstall_cmds" | $Xsed -e "$delay_single_quote_subst"`' +old_postuninstall_cmds='`$ECHO "X$old_postuninstall_cmds" | $Xsed -e "$delay_single_quote_subst"`' +old_archive_cmds='`$ECHO "X$old_archive_cmds" | $Xsed -e "$delay_single_quote_subst"`' +CC='`$ECHO "X$CC" | $Xsed -e "$delay_single_quote_subst"`' +CFLAGS='`$ECHO "X$CFLAGS" | $Xsed -e "$delay_single_quote_subst"`' +compiler='`$ECHO "X$compiler" | $Xsed -e "$delay_single_quote_subst"`' +GCC='`$ECHO "X$GCC" | $Xsed -e "$delay_single_quote_subst"`' +lt_cv_sys_global_symbol_pipe='`$ECHO "X$lt_cv_sys_global_symbol_pipe" | $Xsed -e "$delay_single_quote_subst"`' +lt_cv_sys_global_symbol_to_cdecl='`$ECHO "X$lt_cv_sys_global_symbol_to_cdecl" | $Xsed -e "$delay_single_quote_subst"`' +lt_cv_sys_global_symbol_to_c_name_address='`$ECHO "X$lt_cv_sys_global_symbol_to_c_name_address" | $Xsed -e "$delay_single_quote_subst"`' +lt_cv_sys_global_symbol_to_c_name_address_lib_prefix='`$ECHO "X$lt_cv_sys_global_symbol_to_c_name_address_lib_prefix" | $Xsed -e "$delay_single_quote_subst"`' +objdir='`$ECHO "X$objdir" | $Xsed -e "$delay_single_quote_subst"`' +SHELL='`$ECHO "X$SHELL" | $Xsed -e "$delay_single_quote_subst"`' +ECHO='`$ECHO "X$ECHO" | $Xsed -e "$delay_single_quote_subst"`' +MAGIC_CMD='`$ECHO "X$MAGIC_CMD" | $Xsed -e "$delay_single_quote_subst"`' +lt_prog_compiler_no_builtin_flag='`$ECHO "X$lt_prog_compiler_no_builtin_flag" | $Xsed -e "$delay_single_quote_subst"`' +lt_prog_compiler_wl='`$ECHO "X$lt_prog_compiler_wl" | $Xsed -e "$delay_single_quote_subst"`' +lt_prog_compiler_pic='`$ECHO "X$lt_prog_compiler_pic" | $Xsed -e "$delay_single_quote_subst"`' +lt_prog_compiler_static='`$ECHO "X$lt_prog_compiler_static" | $Xsed -e "$delay_single_quote_subst"`' +lt_cv_prog_compiler_c_o='`$ECHO "X$lt_cv_prog_compiler_c_o" | $Xsed -e "$delay_single_quote_subst"`' +need_locks='`$ECHO "X$need_locks" | $Xsed -e "$delay_single_quote_subst"`' +DSYMUTIL='`$ECHO "X$DSYMUTIL" | $Xsed -e "$delay_single_quote_subst"`' +NMEDIT='`$ECHO "X$NMEDIT" | $Xsed -e "$delay_single_quote_subst"`' +LIPO='`$ECHO "X$LIPO" | $Xsed -e "$delay_single_quote_subst"`' +OTOOL='`$ECHO "X$OTOOL" | $Xsed -e "$delay_single_quote_subst"`' +OTOOL64='`$ECHO "X$OTOOL64" | $Xsed -e "$delay_single_quote_subst"`' +libext='`$ECHO "X$libext" | $Xsed -e "$delay_single_quote_subst"`' +shrext_cmds='`$ECHO "X$shrext_cmds" | $Xsed -e "$delay_single_quote_subst"`' +extract_expsyms_cmds='`$ECHO "X$extract_expsyms_cmds" | $Xsed -e "$delay_single_quote_subst"`' +archive_cmds_need_lc='`$ECHO "X$archive_cmds_need_lc" | $Xsed -e "$delay_single_quote_subst"`' +enable_shared_with_static_runtimes='`$ECHO "X$enable_shared_with_static_runtimes" | $Xsed -e "$delay_single_quote_subst"`' +export_dynamic_flag_spec='`$ECHO "X$export_dynamic_flag_spec" | $Xsed -e "$delay_single_quote_subst"`' +whole_archive_flag_spec='`$ECHO "X$whole_archive_flag_spec" | $Xsed -e "$delay_single_quote_subst"`' +compiler_needs_object='`$ECHO "X$compiler_needs_object" | $Xsed -e "$delay_single_quote_subst"`' +old_archive_from_new_cmds='`$ECHO "X$old_archive_from_new_cmds" | $Xsed -e "$delay_single_quote_subst"`' +old_archive_from_expsyms_cmds='`$ECHO "X$old_archive_from_expsyms_cmds" | $Xsed -e "$delay_single_quote_subst"`' +archive_cmds='`$ECHO "X$archive_cmds" | $Xsed -e "$delay_single_quote_subst"`' +archive_expsym_cmds='`$ECHO "X$archive_expsym_cmds" | $Xsed -e "$delay_single_quote_subst"`' +module_cmds='`$ECHO "X$module_cmds" | $Xsed -e "$delay_single_quote_subst"`' +module_expsym_cmds='`$ECHO "X$module_expsym_cmds" | $Xsed -e "$delay_single_quote_subst"`' +with_gnu_ld='`$ECHO "X$with_gnu_ld" | $Xsed -e "$delay_single_quote_subst"`' +allow_undefined_flag='`$ECHO "X$allow_undefined_flag" | $Xsed -e "$delay_single_quote_subst"`' +no_undefined_flag='`$ECHO "X$no_undefined_flag" | $Xsed -e "$delay_single_quote_subst"`' +hardcode_libdir_flag_spec='`$ECHO "X$hardcode_libdir_flag_spec" | $Xsed -e "$delay_single_quote_subst"`' +hardcode_libdir_flag_spec_ld='`$ECHO "X$hardcode_libdir_flag_spec_ld" | $Xsed -e "$delay_single_quote_subst"`' +hardcode_libdir_separator='`$ECHO "X$hardcode_libdir_separator" | $Xsed -e "$delay_single_quote_subst"`' +hardcode_direct='`$ECHO "X$hardcode_direct" | $Xsed -e "$delay_single_quote_subst"`' +hardcode_direct_absolute='`$ECHO "X$hardcode_direct_absolute" | $Xsed -e "$delay_single_quote_subst"`' +hardcode_minus_L='`$ECHO "X$hardcode_minus_L" | $Xsed -e "$delay_single_quote_subst"`' +hardcode_shlibpath_var='`$ECHO "X$hardcode_shlibpath_var" | $Xsed -e "$delay_single_quote_subst"`' +hardcode_automatic='`$ECHO "X$hardcode_automatic" | $Xsed -e "$delay_single_quote_subst"`' +inherit_rpath='`$ECHO "X$inherit_rpath" | $Xsed -e "$delay_single_quote_subst"`' +link_all_deplibs='`$ECHO "X$link_all_deplibs" | $Xsed -e "$delay_single_quote_subst"`' +fix_srcfile_path='`$ECHO "X$fix_srcfile_path" | $Xsed -e "$delay_single_quote_subst"`' +always_export_symbols='`$ECHO "X$always_export_symbols" | $Xsed -e "$delay_single_quote_subst"`' +export_symbols_cmds='`$ECHO "X$export_symbols_cmds" | $Xsed -e "$delay_single_quote_subst"`' +exclude_expsyms='`$ECHO "X$exclude_expsyms" | $Xsed -e "$delay_single_quote_subst"`' +include_expsyms='`$ECHO "X$include_expsyms" | $Xsed -e "$delay_single_quote_subst"`' +prelink_cmds='`$ECHO "X$prelink_cmds" | $Xsed -e "$delay_single_quote_subst"`' +file_list_spec='`$ECHO "X$file_list_spec" | $Xsed -e "$delay_single_quote_subst"`' +variables_saved_for_relink='`$ECHO "X$variables_saved_for_relink" | $Xsed -e "$delay_single_quote_subst"`' +need_lib_prefix='`$ECHO "X$need_lib_prefix" | $Xsed -e "$delay_single_quote_subst"`' +need_version='`$ECHO "X$need_version" | $Xsed -e "$delay_single_quote_subst"`' +version_type='`$ECHO "X$version_type" | $Xsed -e "$delay_single_quote_subst"`' +runpath_var='`$ECHO "X$runpath_var" | $Xsed -e "$delay_single_quote_subst"`' +shlibpath_var='`$ECHO "X$shlibpath_var" | $Xsed -e "$delay_single_quote_subst"`' +shlibpath_overrides_runpath='`$ECHO "X$shlibpath_overrides_runpath" | $Xsed -e "$delay_single_quote_subst"`' +libname_spec='`$ECHO "X$libname_spec" | $Xsed -e "$delay_single_quote_subst"`' +library_names_spec='`$ECHO "X$library_names_spec" | $Xsed -e "$delay_single_quote_subst"`' +soname_spec='`$ECHO "X$soname_spec" | $Xsed -e "$delay_single_quote_subst"`' +postinstall_cmds='`$ECHO "X$postinstall_cmds" | $Xsed -e "$delay_single_quote_subst"`' +postuninstall_cmds='`$ECHO "X$postuninstall_cmds" | $Xsed -e "$delay_single_quote_subst"`' +finish_cmds='`$ECHO "X$finish_cmds" | $Xsed -e "$delay_single_quote_subst"`' +finish_eval='`$ECHO "X$finish_eval" | $Xsed -e "$delay_single_quote_subst"`' +hardcode_into_libs='`$ECHO "X$hardcode_into_libs" | $Xsed -e "$delay_single_quote_subst"`' +sys_lib_search_path_spec='`$ECHO "X$sys_lib_search_path_spec" | $Xsed -e "$delay_single_quote_subst"`' +sys_lib_dlsearch_path_spec='`$ECHO "X$sys_lib_dlsearch_path_spec" | $Xsed -e "$delay_single_quote_subst"`' +hardcode_action='`$ECHO "X$hardcode_action" | $Xsed -e "$delay_single_quote_subst"`' +enable_dlopen='`$ECHO "X$enable_dlopen" | $Xsed -e "$delay_single_quote_subst"`' +enable_dlopen_self='`$ECHO "X$enable_dlopen_self" | $Xsed -e "$delay_single_quote_subst"`' +enable_dlopen_self_static='`$ECHO "X$enable_dlopen_self_static" | $Xsed -e "$delay_single_quote_subst"`' +old_striplib='`$ECHO "X$old_striplib" | $Xsed -e "$delay_single_quote_subst"`' +striplib='`$ECHO "X$striplib" | $Xsed -e "$delay_single_quote_subst"`' + +LTCC='$LTCC' +LTCFLAGS='$LTCFLAGS' +compiler='$compiler_DEFAULT' + +# Quote evaled strings. +for var in SED \ +GREP \ +EGREP \ +FGREP \ +LD \ +NM \ +LN_S \ +lt_SP2NL \ +lt_NL2SP \ +reload_flag \ +OBJDUMP \ +deplibs_check_method \ +file_magic_cmd \ +AR \ +AR_FLAGS \ +STRIP \ +RANLIB \ +CC \ +CFLAGS \ +compiler \ +lt_cv_sys_global_symbol_pipe \ +lt_cv_sys_global_symbol_to_cdecl \ +lt_cv_sys_global_symbol_to_c_name_address \ +lt_cv_sys_global_symbol_to_c_name_address_lib_prefix \ +SHELL \ +ECHO \ +lt_prog_compiler_no_builtin_flag \ +lt_prog_compiler_wl \ +lt_prog_compiler_pic \ +lt_prog_compiler_static \ +lt_cv_prog_compiler_c_o \ +need_locks \ +DSYMUTIL \ +NMEDIT \ +LIPO \ +OTOOL \ +OTOOL64 \ +shrext_cmds \ +export_dynamic_flag_spec \ +whole_archive_flag_spec \ +compiler_needs_object \ +with_gnu_ld \ +allow_undefined_flag \ +no_undefined_flag \ +hardcode_libdir_flag_spec \ +hardcode_libdir_flag_spec_ld \ +hardcode_libdir_separator \ +fix_srcfile_path \ +exclude_expsyms \ +include_expsyms \ +file_list_spec \ +variables_saved_for_relink \ +libname_spec \ +library_names_spec \ +soname_spec \ +finish_eval \ +old_striplib \ +striplib; do + case \`eval \\\\\$ECHO "X\\\\\$\$var"\` in + *[\\\\\\\`\\"\\\$]*) + eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"X\\\$\$var\\" | \\\$Xsed -e \\"\\\$sed_quote_subst\\"\\\`\\\\\\"" + ;; + *) + eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\"" + ;; + esac +done + +# Double-quote double-evaled strings. +for var in reload_cmds \ +old_postinstall_cmds \ +old_postuninstall_cmds \ +old_archive_cmds \ +extract_expsyms_cmds \ +old_archive_from_new_cmds \ +old_archive_from_expsyms_cmds \ +archive_cmds \ +archive_expsym_cmds \ +module_cmds \ +module_expsym_cmds \ +export_symbols_cmds \ +prelink_cmds \ +postinstall_cmds \ +postuninstall_cmds \ +finish_cmds \ +sys_lib_search_path_spec \ +sys_lib_dlsearch_path_spec; do + case \`eval \\\\\$ECHO "X\\\\\$\$var"\` in + *[\\\\\\\`\\"\\\$]*) + eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"X\\\$\$var\\" | \\\$Xsed -e \\"\\\$double_quote_subst\\" -e \\"\\\$sed_quote_subst\\" -e \\"\\\$delay_variable_subst\\"\\\`\\\\\\"" + ;; + *) + eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\"" + ;; + esac +done + +# Fix-up fallback echo if it was mangled by the above quoting rules. +case \$lt_ECHO in +*'\\\$0 --fallback-echo"') lt_ECHO=\`\$ECHO "X\$lt_ECHO" | \$Xsed -e 's/\\\\\\\\\\\\\\\$0 --fallback-echo"\$/\$0 --fallback-echo"/'\` + ;; +esac + +ac_aux_dir='$ac_aux_dir' +xsi_shell='$xsi_shell' +lt_shell_append='$lt_shell_append' + +# See if we are running on zsh, and set the options which allow our +# commands through without removal of \ escapes INIT. +if test -n "\${ZSH_VERSION+set}" ; then + setopt NO_GLOB_SUBST +fi + + + PACKAGE='$PACKAGE' + VERSION='$VERSION' + TIMESTAMP='$TIMESTAMP' + RM='$RM' + ofile='$ofile' + + + TARGETDIR="$TARGETDIR" _ACEOF @@ -6938,10 +13520,16 @@ case $ac_config_target in "fficonfig.h") CONFIG_HEADERS="$CONFIG_HEADERS fficonfig.h" ;; "depfiles") CONFIG_COMMANDS="$CONFIG_COMMANDS depfiles" ;; + "libtool") CONFIG_COMMANDS="$CONFIG_COMMANDS libtool" ;; "include") CONFIG_COMMANDS="$CONFIG_COMMANDS include" ;; "src") CONFIG_COMMANDS="$CONFIG_COMMANDS src" ;; "include/ffitarget.h") CONFIG_LINKS="$CONFIG_LINKS include/ffitarget.h:src/$TARGETDIR/ffitarget.h" ;; + "include/Makefile") CONFIG_FILES="$CONFIG_FILES include/Makefile" ;; "include/ffi.h") CONFIG_FILES="$CONFIG_FILES include/ffi.h" ;; + "Makefile") CONFIG_FILES="$CONFIG_FILES Makefile" ;; + "testsuite/Makefile") CONFIG_FILES="$CONFIG_FILES testsuite/Makefile" ;; + "man/Makefile") CONFIG_FILES="$CONFIG_FILES man/Makefile" ;; + "libffi.pc") CONFIG_FILES="$CONFIG_FILES libffi.pc" ;; "include/ffi_common.h") CONFIG_LINKS="$CONFIG_LINKS include/ffi_common.h:include/ffi_common.h" ;; "fficonfig.py") CONFIG_FILES="$CONFIG_FILES fficonfig.py" ;; @@ -7655,6 +14243,641 @@ done } ;; + "libtool":C) + + # See if we are running on zsh, and set the options which allow our + # commands through without removal of \ escapes. + if test -n "${ZSH_VERSION+set}" ; then + setopt NO_GLOB_SUBST + fi + + cfgfile="${ofile}T" + trap "$RM \"$cfgfile\"; exit 1" 1 2 15 + $RM "$cfgfile" + + cat <<_LT_EOF >> "$cfgfile" +#! $SHELL + +# `$ECHO "$ofile" | sed 's%^.*/%%'` - Provide generalized library-building support services. +# Generated automatically by $as_me ($PACKAGE$TIMESTAMP) $VERSION +# Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`: +# NOTE: Changes made to this file will be lost: look at ltmain.sh. +# +# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005, +# 2006, 2007, 2008 Free Software Foundation, Inc. +# Written by Gordon Matzigkeit, 1996 +# +# This file is part of GNU Libtool. +# +# GNU Libtool is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License as +# published by the Free Software Foundation; either version 2 of +# the License, or (at your option) any later version. +# +# As a special exception to the GNU General Public License, +# if you distribute this file as part of a program or library that +# is built using GNU Libtool, you may include this file under the +# same distribution terms that you use for the rest of that program. +# +# GNU Libtool is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with GNU Libtool; see the file COPYING. If not, a copy +# can be downloaded from http://www.gnu.org/licenses/gpl.html, or +# obtained by writing to the Free Software Foundation, Inc., +# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + + +# The names of the tagged configurations supported by this script. +available_tags="" + +# ### BEGIN LIBTOOL CONFIG + +# Which release of libtool.m4 was used? +macro_version=$macro_version +macro_revision=$macro_revision + +# Whether or not to build shared libraries. +build_libtool_libs=$enable_shared + +# Whether or not to build static libraries. +build_old_libs=$enable_static + +# What type of objects to build. +pic_mode=$pic_mode + +# Whether or not to optimize for fast installation. +fast_install=$enable_fast_install + +# The host system. +host_alias=$host_alias +host=$host +host_os=$host_os + +# The build system. +build_alias=$build_alias +build=$build +build_os=$build_os + +# A sed program that does not truncate output. +SED=$lt_SED + +# Sed that helps us avoid accidentally triggering echo(1) options like -n. +Xsed="\$SED -e 1s/^X//" + +# A grep program that handles long lines. +GREP=$lt_GREP + +# An ERE matcher. +EGREP=$lt_EGREP + +# A literal string matcher. +FGREP=$lt_FGREP + +# A BSD- or MS-compatible name lister. +NM=$lt_NM + +# Whether we need soft or hard links. +LN_S=$lt_LN_S + +# What is the maximum length of a command? +max_cmd_len=$max_cmd_len + +# Object file suffix (normally "o"). +objext=$ac_objext + +# Executable file suffix (normally ""). +exeext=$exeext + +# whether the shell understands "unset". +lt_unset=$lt_unset + +# turn spaces into newlines. +SP2NL=$lt_lt_SP2NL + +# turn newlines into spaces. +NL2SP=$lt_lt_NL2SP + +# How to create reloadable object files. +reload_flag=$lt_reload_flag +reload_cmds=$lt_reload_cmds + +# An object symbol dumper. +OBJDUMP=$lt_OBJDUMP + +# Method to check whether dependent libraries are shared objects. +deplibs_check_method=$lt_deplibs_check_method + +# Command to use when deplibs_check_method == "file_magic". +file_magic_cmd=$lt_file_magic_cmd + +# The archiver. +AR=$lt_AR +AR_FLAGS=$lt_AR_FLAGS + +# A symbol stripping program. +STRIP=$lt_STRIP + +# Commands used to install an old-style archive. +RANLIB=$lt_RANLIB +old_postinstall_cmds=$lt_old_postinstall_cmds +old_postuninstall_cmds=$lt_old_postuninstall_cmds + +# A C compiler. +LTCC=$lt_CC + +# LTCC compiler flags. +LTCFLAGS=$lt_CFLAGS + +# Take the output of nm and produce a listing of raw symbols and C names. +global_symbol_pipe=$lt_lt_cv_sys_global_symbol_pipe + +# Transform the output of nm in a proper C declaration. +global_symbol_to_cdecl=$lt_lt_cv_sys_global_symbol_to_cdecl + +# Transform the output of nm in a C name address pair. +global_symbol_to_c_name_address=$lt_lt_cv_sys_global_symbol_to_c_name_address + +# Transform the output of nm in a C name address pair when lib prefix is needed. +global_symbol_to_c_name_address_lib_prefix=$lt_lt_cv_sys_global_symbol_to_c_name_address_lib_prefix + +# The name of the directory that contains temporary libtool files. +objdir=$objdir + +# Shell to use when invoking shell scripts. +SHELL=$lt_SHELL + +# An echo program that does not interpret backslashes. +ECHO=$lt_ECHO + +# Used to examine libraries when file_magic_cmd begins with "file". +MAGIC_CMD=$MAGIC_CMD + +# Must we lock files when doing compilation? +need_locks=$lt_need_locks + +# Tool to manipulate archived DWARF debug symbol files on Mac OS X. +DSYMUTIL=$lt_DSYMUTIL + +# Tool to change global to local symbols on Mac OS X. +NMEDIT=$lt_NMEDIT + +# Tool to manipulate fat objects and archives on Mac OS X. +LIPO=$lt_LIPO + +# ldd/readelf like tool for Mach-O binaries on Mac OS X. +OTOOL=$lt_OTOOL + +# ldd/readelf like tool for 64 bit Mach-O binaries on Mac OS X 10.4. +OTOOL64=$lt_OTOOL64 + +# Old archive suffix (normally "a"). +libext=$libext + +# Shared library suffix (normally ".so"). +shrext_cmds=$lt_shrext_cmds + +# The commands to extract the exported symbol list from a shared archive. +extract_expsyms_cmds=$lt_extract_expsyms_cmds + +# Variables whose values should be saved in libtool wrapper scripts and +# restored at link time. +variables_saved_for_relink=$lt_variables_saved_for_relink + +# Do we need the "lib" prefix for modules? +need_lib_prefix=$need_lib_prefix + +# Do we need a version for libraries? +need_version=$need_version + +# Library versioning type. +version_type=$version_type + +# Shared library runtime path variable. +runpath_var=$runpath_var + +# Shared library path variable. +shlibpath_var=$shlibpath_var + +# Is shlibpath searched before the hard-coded library search path? +shlibpath_overrides_runpath=$shlibpath_overrides_runpath + +# Format of library name prefix. +libname_spec=$lt_libname_spec + +# List of archive names. First name is the real one, the rest are links. +# The last name is the one that the linker finds with -lNAME +library_names_spec=$lt_library_names_spec + +# The coded name of the library, if different from the real name. +soname_spec=$lt_soname_spec + +# Command to use after installation of a shared archive. +postinstall_cmds=$lt_postinstall_cmds + +# Command to use after uninstallation of a shared archive. +postuninstall_cmds=$lt_postuninstall_cmds + +# Commands used to finish a libtool library installation in a directory. +finish_cmds=$lt_finish_cmds + +# As "finish_cmds", except a single script fragment to be evaled but +# not shown. +finish_eval=$lt_finish_eval + +# Whether we should hardcode library paths into libraries. +hardcode_into_libs=$hardcode_into_libs + +# Compile-time system search path for libraries. +sys_lib_search_path_spec=$lt_sys_lib_search_path_spec + +# Run-time system search path for libraries. +sys_lib_dlsearch_path_spec=$lt_sys_lib_dlsearch_path_spec + +# Whether dlopen is supported. +dlopen_support=$enable_dlopen + +# Whether dlopen of programs is supported. +dlopen_self=$enable_dlopen_self + +# Whether dlopen of statically linked programs is supported. +dlopen_self_static=$enable_dlopen_self_static + +# Commands to strip libraries. +old_striplib=$lt_old_striplib +striplib=$lt_striplib + + +# The linker used to build libraries. +LD=$lt_LD + +# Commands used to build an old-style archive. +old_archive_cmds=$lt_old_archive_cmds + +# A language specific compiler. +CC=$lt_compiler + +# Is the compiler the GNU compiler? +with_gcc=$GCC + +# Compiler flag to turn off builtin functions. +no_builtin_flag=$lt_lt_prog_compiler_no_builtin_flag + +# How to pass a linker flag through the compiler. +wl=$lt_lt_prog_compiler_wl + +# Additional compiler flags for building library objects. +pic_flag=$lt_lt_prog_compiler_pic + +# Compiler flag to prevent dynamic linking. +link_static_flag=$lt_lt_prog_compiler_static + +# Does compiler simultaneously support -c and -o options? +compiler_c_o=$lt_lt_cv_prog_compiler_c_o + +# Whether or not to add -lc for building shared libraries. +build_libtool_need_lc=$archive_cmds_need_lc + +# Whether or not to disallow shared libs when runtime libs are static. +allow_libtool_libs_with_static_runtimes=$enable_shared_with_static_runtimes + +# Compiler flag to allow reflexive dlopens. +export_dynamic_flag_spec=$lt_export_dynamic_flag_spec + +# Compiler flag to generate shared objects directly from archives. +whole_archive_flag_spec=$lt_whole_archive_flag_spec + +# Whether the compiler copes with passing no objects directly. +compiler_needs_object=$lt_compiler_needs_object + +# Create an old-style archive from a shared archive. +old_archive_from_new_cmds=$lt_old_archive_from_new_cmds + +# Create a temporary old-style archive to link instead of a shared archive. +old_archive_from_expsyms_cmds=$lt_old_archive_from_expsyms_cmds + +# Commands used to build a shared archive. +archive_cmds=$lt_archive_cmds +archive_expsym_cmds=$lt_archive_expsym_cmds + +# Commands used to build a loadable module if different from building +# a shared archive. +module_cmds=$lt_module_cmds +module_expsym_cmds=$lt_module_expsym_cmds + +# Whether we are building with GNU ld or not. +with_gnu_ld=$lt_with_gnu_ld + +# Flag that allows shared libraries with undefined symbols to be built. +allow_undefined_flag=$lt_allow_undefined_flag + +# Flag that enforces no undefined symbols. +no_undefined_flag=$lt_no_undefined_flag + +# Flag to hardcode \$libdir into a binary during linking. +# This must work even if \$libdir does not exist +hardcode_libdir_flag_spec=$lt_hardcode_libdir_flag_spec + +# If ld is used when linking, flag to hardcode \$libdir into a binary +# during linking. This must work even if \$libdir does not exist. +hardcode_libdir_flag_spec_ld=$lt_hardcode_libdir_flag_spec_ld + +# Whether we need a single "-rpath" flag with a separated argument. +hardcode_libdir_separator=$lt_hardcode_libdir_separator + +# Set to "yes" if using DIR/libNAME\${shared_ext} during linking hardcodes +# DIR into the resulting binary. +hardcode_direct=$hardcode_direct + +# Set to "yes" if using DIR/libNAME\${shared_ext} during linking hardcodes +# DIR into the resulting binary and the resulting library dependency is +# "absolute",i.e impossible to change by setting \${shlibpath_var} if the +# library is relocated. +hardcode_direct_absolute=$hardcode_direct_absolute + +# Set to "yes" if using the -LDIR flag during linking hardcodes DIR +# into the resulting binary. +hardcode_minus_L=$hardcode_minus_L + +# Set to "yes" if using SHLIBPATH_VAR=DIR during linking hardcodes DIR +# into the resulting binary. +hardcode_shlibpath_var=$hardcode_shlibpath_var + +# Set to "yes" if building a shared library automatically hardcodes DIR +# into the library and all subsequent libraries and executables linked +# against it. +hardcode_automatic=$hardcode_automatic + +# Set to yes if linker adds runtime paths of dependent libraries +# to runtime path list. +inherit_rpath=$inherit_rpath + +# Whether libtool must link a program against all its dependency libraries. +link_all_deplibs=$link_all_deplibs + +# Fix the shell variable \$srcfile for the compiler. +fix_srcfile_path=$lt_fix_srcfile_path + +# Set to "yes" if exported symbols are required. +always_export_symbols=$always_export_symbols + +# The commands to list exported symbols. +export_symbols_cmds=$lt_export_symbols_cmds + +# Symbols that should not be listed in the preloaded symbols. +exclude_expsyms=$lt_exclude_expsyms + +# Symbols that must always be exported. +include_expsyms=$lt_include_expsyms + +# Commands necessary for linking programs (against libraries) with templates. +prelink_cmds=$lt_prelink_cmds + +# Specify filename containing input files. +file_list_spec=$lt_file_list_spec + +# How to hardcode a shared library path into an executable. +hardcode_action=$hardcode_action + +# ### END LIBTOOL CONFIG + +_LT_EOF + + case $host_os in + aix3*) + cat <<\_LT_EOF >> "$cfgfile" +# AIX sometimes has problems with the GCC collect2 program. For some +# reason, if we set the COLLECT_NAMES environment variable, the problems +# vanish in a puff of smoke. +if test "X${COLLECT_NAMES+set}" != Xset; then + COLLECT_NAMES= + export COLLECT_NAMES +fi +_LT_EOF + ;; + esac + + +ltmain="$ac_aux_dir/ltmain.sh" + + + # We use sed instead of cat because bash on DJGPP gets confused if + # if finds mixed CR/LF and LF-only lines. Since sed operates in + # text mode, it properly converts lines to CR/LF. This bash problem + # is reportedly fixed, but why not run on old versions too? + sed '/^# Generated shell functions inserted here/q' "$ltmain" >> "$cfgfile" \ + || (rm -f "$cfgfile"; exit 1) + + case $xsi_shell in + yes) + cat << \_LT_EOF >> "$cfgfile" + +# func_dirname file append nondir_replacement +# Compute the dirname of FILE. If nonempty, add APPEND to the result, +# otherwise set result to NONDIR_REPLACEMENT. +func_dirname () +{ + case ${1} in + */*) func_dirname_result="${1%/*}${2}" ;; + * ) func_dirname_result="${3}" ;; + esac +} + +# func_basename file +func_basename () +{ + func_basename_result="${1##*/}" +} + +# func_dirname_and_basename file append nondir_replacement +# perform func_basename and func_dirname in a single function +# call: +# dirname: Compute the dirname of FILE. If nonempty, +# add APPEND to the result, otherwise set result +# to NONDIR_REPLACEMENT. +# value returned in "$func_dirname_result" +# basename: Compute filename of FILE. +# value retuned in "$func_basename_result" +# Implementation must be kept synchronized with func_dirname +# and func_basename. For efficiency, we do not delegate to +# those functions but instead duplicate the functionality here. +func_dirname_and_basename () +{ + case ${1} in + */*) func_dirname_result="${1%/*}${2}" ;; + * ) func_dirname_result="${3}" ;; + esac + func_basename_result="${1##*/}" +} + +# func_stripname prefix suffix name +# strip PREFIX and SUFFIX off of NAME. +# PREFIX and SUFFIX must not contain globbing or regex special +# characters, hashes, percent signs, but SUFFIX may contain a leading +# dot (in which case that matches only a dot). +func_stripname () +{ + # pdksh 5.2.14 does not do ${X%$Y} correctly if both X and Y are + # positional parameters, so assign one to ordinary parameter first. + func_stripname_result=${3} + func_stripname_result=${func_stripname_result#"${1}"} + func_stripname_result=${func_stripname_result%"${2}"} +} + +# func_opt_split +func_opt_split () +{ + func_opt_split_opt=${1%%=*} + func_opt_split_arg=${1#*=} +} + +# func_lo2o object +func_lo2o () +{ + case ${1} in + *.lo) func_lo2o_result=${1%.lo}.${objext} ;; + *) func_lo2o_result=${1} ;; + esac +} + +# func_xform libobj-or-source +func_xform () +{ + func_xform_result=${1%.*}.lo +} + +# func_arith arithmetic-term... +func_arith () +{ + func_arith_result=$(( $* )) +} + +# func_len string +# STRING may not start with a hyphen. +func_len () +{ + func_len_result=${#1} +} + +_LT_EOF + ;; + *) # Bourne compatible functions. + cat << \_LT_EOF >> "$cfgfile" + +# func_dirname file append nondir_replacement +# Compute the dirname of FILE. If nonempty, add APPEND to the result, +# otherwise set result to NONDIR_REPLACEMENT. +func_dirname () +{ + # Extract subdirectory from the argument. + func_dirname_result=`$ECHO "X${1}" | $Xsed -e "$dirname"` + if test "X$func_dirname_result" = "X${1}"; then + func_dirname_result="${3}" + else + func_dirname_result="$func_dirname_result${2}" + fi +} + +# func_basename file +func_basename () +{ + func_basename_result=`$ECHO "X${1}" | $Xsed -e "$basename"` +} + + +# func_stripname prefix suffix name +# strip PREFIX and SUFFIX off of NAME. +# PREFIX and SUFFIX must not contain globbing or regex special +# characters, hashes, percent signs, but SUFFIX may contain a leading +# dot (in which case that matches only a dot). +# func_strip_suffix prefix name +func_stripname () +{ + case ${2} in + .*) func_stripname_result=`$ECHO "X${3}" \ + | $Xsed -e "s%^${1}%%" -e "s%\\\\${2}\$%%"`;; + *) func_stripname_result=`$ECHO "X${3}" \ + | $Xsed -e "s%^${1}%%" -e "s%${2}\$%%"`;; + esac +} + +# sed scripts: +my_sed_long_opt='1s/^\(-[^=]*\)=.*/\1/;q' +my_sed_long_arg='1s/^-[^=]*=//' + +# func_opt_split +func_opt_split () +{ + func_opt_split_opt=`$ECHO "X${1}" | $Xsed -e "$my_sed_long_opt"` + func_opt_split_arg=`$ECHO "X${1}" | $Xsed -e "$my_sed_long_arg"` +} + +# func_lo2o object +func_lo2o () +{ + func_lo2o_result=`$ECHO "X${1}" | $Xsed -e "$lo2o"` +} + +# func_xform libobj-or-source +func_xform () +{ + func_xform_result=`$ECHO "X${1}" | $Xsed -e 's/\.[^.]*$/.lo/'` +} + +# func_arith arithmetic-term... +func_arith () +{ + func_arith_result=`expr "$@"` +} + +# func_len string +# STRING may not start with a hyphen. +func_len () +{ + func_len_result=`expr "$1" : ".*" 2>/dev/null || echo $max_cmd_len` +} + +_LT_EOF +esac + +case $lt_shell_append in + yes) + cat << \_LT_EOF >> "$cfgfile" + +# func_append var value +# Append VALUE to the end of shell variable VAR. +func_append () +{ + eval "$1+=\$2" +} +_LT_EOF + ;; + *) + cat << \_LT_EOF >> "$cfgfile" + +# func_append var value +# Append VALUE to the end of shell variable VAR. +func_append () +{ + eval "$1=\$$1\$2" +} + +_LT_EOF + ;; + esac + + + sed -n '/^# Generated shell functions inserted here/,$p' "$ltmain" >> "$cfgfile" \ + || (rm -f "$cfgfile"; exit 1) + + mv -f "$cfgfile" "$ofile" || + (rm -f "$ofile" && cp "$cfgfile" "$ofile" && rm -f "$cfgfile") + chmod +x "$ofile" + + ;; "include":C) test -d include || mkdir include ;; "src":C) test -d src || mkdir src Modified: python/branches/py3k/Modules/_ctypes/libffi/configure.ac ============================================================================== --- python/branches/py3k/Modules/_ctypes/libffi/configure.ac (original) +++ python/branches/py3k/Modules/_ctypes/libffi/configure.ac Fri Mar 19 18:47:21 2010 @@ -405,7 +405,7 @@ AC_CONFIG_LINKS(include/ffitarget.h:src/$TARGETDIR/ffitarget.h) -AC_CONFIG_FILES(include/ffi.h) +AC_CONFIG_FILES(include/Makefile include/ffi.h Makefile testsuite/Makefile man/Makefile libffi.pc) AC_CONFIG_LINKS(include/ffi_common.h:include/ffi_common.h) From python-checkins at python.org Fri Mar 19 19:34:55 2010 From: python-checkins at python.org (florent.xicluna) Date: Fri, 19 Mar 2010 19:34:55 +0100 (CET) Subject: [Python-checkins] r79100 - in python/trunk/Lib/test: test_MimeWriter.py test_bytes.py test_grammar.py test_httpservers.py test_importhooks.py test_index.py test_minidom.py test_profilehooks.py test_scope.py test_urllib2_localnet.py Message-ID: <20100319183455.728CDF16E@mail.python.org> Author: florent.xicluna Date: Fri Mar 19 19:34:55 2010 New Revision: 79100 Log: Various tests cleanup: check_warnings/check_py3k_warnings, unittest.assert* and setUp/tearDown. Modified: python/trunk/Lib/test/test_MimeWriter.py python/trunk/Lib/test/test_bytes.py python/trunk/Lib/test/test_grammar.py python/trunk/Lib/test/test_httpservers.py python/trunk/Lib/test/test_importhooks.py python/trunk/Lib/test/test_index.py python/trunk/Lib/test/test_minidom.py python/trunk/Lib/test/test_profilehooks.py python/trunk/Lib/test/test_scope.py python/trunk/Lib/test/test_urllib2_localnet.py Modified: python/trunk/Lib/test/test_MimeWriter.py ============================================================================== --- python/trunk/Lib/test/test_MimeWriter.py (original) +++ python/trunk/Lib/test/test_MimeWriter.py Fri Mar 19 19:34:55 2010 @@ -8,12 +8,9 @@ """ import unittest, StringIO -from test.test_support import run_unittest - -import warnings -warnings.filterwarnings("ignore", "the MimeWriter module is deprecated.*", - DeprecationWarning) +from test.test_support import run_unittest, import_module +import_module("MimeWriter", deprecated=True) from MimeWriter import MimeWriter SELLER = '''\ Modified: python/trunk/Lib/test/test_bytes.py ============================================================================== --- python/trunk/Lib/test/test_bytes.py (original) +++ python/trunk/Lib/test/test_bytes.py Fri Mar 19 19:34:55 2010 @@ -841,9 +841,9 @@ self.assertEqual(bytes(b"abc") <= b"ab", False) def test_doc(self): - self.assertTrue(bytearray.__doc__ != None) + self.assertIsNotNone(bytearray.__doc__) self.assertTrue(bytearray.__doc__.startswith("bytearray("), bytearray.__doc__) - self.assertTrue(bytes.__doc__ != None) + self.assertIsNotNone(bytes.__doc__) self.assertTrue(bytes.__doc__.startswith("bytes("), bytes.__doc__) def test_from_bytearray(self): Modified: python/trunk/Lib/test/test_grammar.py ============================================================================== --- python/trunk/Lib/test/test_grammar.py (original) +++ python/trunk/Lib/test/test_grammar.py Fri Mar 19 19:34:55 2010 @@ -1,13 +1,6 @@ # Python test set -- part 1, grammar. # This just tests whether the parser accepts them all. -# NOTE: When you run this test as a script from the command line, you -# get warnings about certain hex/oct constants. Since those are -# issued by the parser, you can't suppress them by adding a -# filterwarnings() call to this module. Therefore, to shut up the -# regression test, the filterwarnings() call has been added to -# regrtest.py. - from test.test_support import run_unittest, check_syntax_error, \ check_py3k_warnings import unittest @@ -15,27 +8,28 @@ # testing import * from sys import * + class TokenTests(unittest.TestCase): def testBackslash(self): # Backslash means line continuation: x = 1 \ + 1 - self.assertEquals(x, 2, 'backslash for line continuation') + self.assertEqual(x, 2, 'backslash for line continuation') # Backslash does not means continuation in comments :\ x = 0 - self.assertEquals(x, 0, 'backslash ending comment') + self.assertEqual(x, 0, 'backslash ending comment') def testPlainIntegers(self): - self.assertEquals(0xff, 255) - self.assertEquals(0377, 255) - self.assertEquals(2147483647, 017777777777) + self.assertEqual(0xff, 255) + self.assertEqual(0377, 255) + self.assertEqual(2147483647, 017777777777) # "0x" is not a valid literal self.assertRaises(SyntaxError, eval, "0x") from sys import maxint if maxint == 2147483647: - self.assertEquals(-2147483647-1, -020000000000) + self.assertEqual(-2147483647-1, -020000000000) # XXX -2147483648 self.assertTrue(037777777777 > 0) self.assertTrue(0xffffffff > 0) @@ -45,7 +39,7 @@ except OverflowError: self.fail("OverflowError on huge integer literal %r" % s) elif maxint == 9223372036854775807: - self.assertEquals(-9223372036854775807-1, -01000000000000000000000) + self.assertEqual(-9223372036854775807-1, -01000000000000000000000) self.assertTrue(01777777777777777777777 > 0) self.assertTrue(0xffffffffffffffff > 0) for s in '9223372036854775808', '02000000000000000000000', \ @@ -98,28 +92,28 @@ the 'lazy' dog. """ y = '\nThe "quick"\nbrown fox\njumps over\nthe \'lazy\' dog.\n' - self.assertEquals(x, y) + self.assertEqual(x, y) y = ''' The "quick" brown fox jumps over the 'lazy' dog. ''' - self.assertEquals(x, y) + self.assertEqual(x, y) y = "\n\ The \"quick\"\n\ brown fox\n\ jumps over\n\ the 'lazy' dog.\n\ " - self.assertEquals(x, y) + self.assertEqual(x, y) y = '\n\ The \"quick\"\n\ brown fox\n\ jumps over\n\ the \'lazy\' dog.\n\ ' - self.assertEquals(x, y) + self.assertEqual(x, y) class GrammarTests(unittest.TestCase): @@ -156,18 +150,18 @@ # Silence Py3k warning exec('def f4(two, (compound, (argument, list))): pass') exec('def f5((compound, first), two): pass') - self.assertEquals(f2.func_code.co_varnames, ('one_argument',)) - self.assertEquals(f3.func_code.co_varnames, ('two', 'arguments')) + self.assertEqual(f2.func_code.co_varnames, ('one_argument',)) + self.assertEqual(f3.func_code.co_varnames, ('two', 'arguments')) if sys.platform.startswith('java'): - self.assertEquals(f4.func_code.co_varnames, + self.assertEqual(f4.func_code.co_varnames, ('two', '(compound, (argument, list))', 'compound', 'argument', 'list',)) - self.assertEquals(f5.func_code.co_varnames, + self.assertEqual(f5.func_code.co_varnames, ('(compound, first)', 'two', 'compound', 'first')) else: - self.assertEquals(f4.func_code.co_varnames, + self.assertEqual(f4.func_code.co_varnames, ('two', '.1', 'compound', 'argument', 'list')) - self.assertEquals(f5.func_code.co_varnames, + self.assertEqual(f5.func_code.co_varnames, ('.0', 'two', 'compound', 'first')) def a1(one_arg,): pass def a2(two, args,): pass @@ -204,10 +198,10 @@ # ceval unpacks the formal arguments into the first argcount names; # thus, the names nested inside tuples must appear after these names. if sys.platform.startswith('java'): - self.assertEquals(v3.func_code.co_varnames, ('a', '(b, c)', 'rest', 'b', 'c')) + self.assertEqual(v3.func_code.co_varnames, ('a', '(b, c)', 'rest', 'b', 'c')) else: - self.assertEquals(v3.func_code.co_varnames, ('a', '.1', 'rest', 'b', 'c')) - self.assertEquals(v3(1, (2, 3), 4), (1, 2, 3, (4,))) + self.assertEqual(v3.func_code.co_varnames, ('a', '.1', 'rest', 'b', 'c')) + self.assertEqual(v3(1, (2, 3), 4), (1, 2, 3, (4,))) def d01(a=1): pass d01() d01(1) @@ -289,7 +283,7 @@ # keyword arguments after *arglist def f(*args, **kwargs): return args, kwargs - self.assertEquals(f(1, x=2, *[3, 4], y=5), ((1, 3, 4), + self.assertEqual(f(1, x=2, *[3, 4], y=5), ((1, 3, 4), {'x':2, 'y':5})) self.assertRaises(SyntaxError, eval, "f(1, *(2,3), 4)") self.assertRaises(SyntaxError, eval, "f(1, x=2, *(3,4), x=5)") @@ -301,15 +295,15 @@ def testLambdef(self): ### lambdef: 'lambda' [varargslist] ':' test l1 = lambda : 0 - self.assertEquals(l1(), 0) + self.assertEqual(l1(), 0) l2 = lambda : a[d] # XXX just testing the expression l3 = lambda : [2 < x for x in [-1, 3, 0L]] - self.assertEquals(l3(), [0, 1, 0]) + self.assertEqual(l3(), [0, 1, 0]) l4 = lambda x = lambda y = lambda z=1 : z : y() : x() - self.assertEquals(l4(), 1) + self.assertEqual(l4(), 1) l5 = lambda x, y, z=2: x + y + z - self.assertEquals(l5(1, 2), 5) - self.assertEquals(l5(1, 2, 3), 6) + self.assertEqual(l5(1, 2), 5) + self.assertEqual(l5(1, 2, 3), 6) check_syntax_error(self, "lambda x: x = 2") check_syntax_error(self, "lambda (None,): None") @@ -545,8 +539,6 @@ g = {} l = {} - import warnings - warnings.filterwarnings("ignore", "global statement", module="") exec 'global a; a = 1; b = 2' in g, l if '__builtins__' in g: del g['__builtins__'] if '__builtins__' in l: del l['__builtins__'] @@ -562,7 +554,7 @@ try: assert 0, "msg" except AssertionError, e: - self.assertEquals(e.args[0], "msg") + self.assertEqual(e.args[0], "msg") else: if __debug__: self.fail("AssertionError not raised by assert 0") @@ -596,7 +588,7 @@ x = 1 else: x = 2 - self.assertEquals(x, 2) + self.assertEqual(x, 2) def testFor(self): # 'for' exprlist 'in' exprlist ':' suite ['else' ':' suite] @@ -751,7 +743,7 @@ d[1,2,3] = 4 L = list(d) L.sort() - self.assertEquals(str(L), '[1, (1,), (1, 2), (1, 2, 3)]') + self.assertEqual(str(L), '[1, (1,), (1, 2), (1, 2, 3)]') def testAtoms(self): ### atom: '(' [testlist] ')' | '[' [testlist] ']' | '{' [dictmaker] '}' | '`' testlist '`' | NAME | NUMBER | STRING Modified: python/trunk/Lib/test/test_httpservers.py ============================================================================== --- python/trunk/Lib/test/test_httpservers.py (original) +++ python/trunk/Lib/test/test_httpservers.py Fri Mar 19 19:34:55 2010 @@ -103,42 +103,42 @@ def test_command(self): self.con.request('GET', '/') res = self.con.getresponse() - self.assertEquals(res.status, 501) + self.assertEqual(res.status, 501) def test_request_line_trimming(self): self.con._http_vsn_str = 'HTTP/1.1\n' self.con.putrequest('GET', '/') self.con.endheaders() res = self.con.getresponse() - self.assertEquals(res.status, 501) + self.assertEqual(res.status, 501) def test_version_bogus(self): self.con._http_vsn_str = 'FUBAR' self.con.putrequest('GET', '/') self.con.endheaders() res = self.con.getresponse() - self.assertEquals(res.status, 400) + self.assertEqual(res.status, 400) def test_version_digits(self): self.con._http_vsn_str = 'HTTP/9.9.9' self.con.putrequest('GET', '/') self.con.endheaders() res = self.con.getresponse() - self.assertEquals(res.status, 400) + self.assertEqual(res.status, 400) def test_version_none_get(self): self.con._http_vsn_str = '' self.con.putrequest('GET', '/') self.con.endheaders() res = self.con.getresponse() - self.assertEquals(res.status, 501) + self.assertEqual(res.status, 501) def test_version_none(self): self.con._http_vsn_str = '' self.con.putrequest('PUT', '/') self.con.endheaders() res = self.con.getresponse() - self.assertEquals(res.status, 400) + self.assertEqual(res.status, 400) def test_version_invalid(self): self.con._http_vsn = 99 @@ -146,21 +146,21 @@ self.con.putrequest('GET', '/') self.con.endheaders() res = self.con.getresponse() - self.assertEquals(res.status, 505) + self.assertEqual(res.status, 505) def test_send_blank(self): self.con._http_vsn_str = '' self.con.putrequest('', '') self.con.endheaders() res = self.con.getresponse() - self.assertEquals(res.status, 400) + self.assertEqual(res.status, 400) def test_header_close(self): self.con.putrequest('GET', '/') self.con.putheader('Connection', 'close') self.con.endheaders() res = self.con.getresponse() - self.assertEquals(res.status, 501) + self.assertEqual(res.status, 501) def test_head_keep_alive(self): self.con._http_vsn_str = 'HTTP/1.1' @@ -168,28 +168,28 @@ self.con.putheader('Connection', 'keep-alive') self.con.endheaders() res = self.con.getresponse() - self.assertEquals(res.status, 501) + self.assertEqual(res.status, 501) def test_handler(self): self.con.request('TEST', '/') res = self.con.getresponse() - self.assertEquals(res.status, 204) + self.assertEqual(res.status, 204) def test_return_header_keep_alive(self): self.con.request('KEEP', '/') res = self.con.getresponse() - self.assertEquals(res.getheader('Connection'), 'keep-alive') + self.assertEqual(res.getheader('Connection'), 'keep-alive') self.con.request('TEST', '/') def test_internal_key_error(self): self.con.request('KEYERROR', '/') res = self.con.getresponse() - self.assertEquals(res.status, 999) + self.assertEqual(res.status, 999) def test_return_custom_status(self): self.con.request('CUSTOM', '/') res = self.con.getresponse() - self.assertEquals(res.status, 999) + self.assertEqual(res.status, 999) class SimpleHTTPServerTestCase(BaseTestCase): @@ -221,8 +221,8 @@ def check_status_and_reason(self, response, status, data=None): body = response.read() self.assertTrue(response) - self.assertEquals(response.status, status) - self.assertTrue(response.reason != None) + self.assertEqual(response.status, status) + self.assertIsNotNone(response.reason) if data: self.assertEqual(data, body) @@ -283,8 +283,8 @@ print form = cgi.FieldStorage() -print "%%s, %%s, %%s" %% (form.getfirst("spam"), form.getfirst("eggs"),\ - form.getfirst("bacon")) +print "%%s, %%s, %%s" %% (form.getfirst("spam"), form.getfirst("eggs"), + form.getfirst("bacon")) """ class CGIHTTPServerTestCase(BaseTestCase): @@ -355,38 +355,38 @@ CGIHTTPServer._url_collapse_path_split, path) else: actual = CGIHTTPServer._url_collapse_path_split(path) - self.assertEquals(expected, actual, - msg='path = %r\nGot: %r\nWanted: %r' % ( - path, actual, expected)) + self.assertEqual(expected, actual, + msg='path = %r\nGot: %r\nWanted: %r' % + (path, actual, expected)) def test_headers_and_content(self): res = self.request('/cgi-bin/file1.py') - self.assertEquals(('Hello World\n', 'text/html', 200), \ - (res.read(), res.getheader('Content-type'), res.status)) + self.assertEqual(('Hello World\n', 'text/html', 200), + (res.read(), res.getheader('Content-type'), res.status)) def test_post(self): params = urllib.urlencode({'spam' : 1, 'eggs' : 'python', 'bacon' : 123456}) headers = {'Content-type' : 'application/x-www-form-urlencoded'} res = self.request('/cgi-bin/file2.py', 'POST', params, headers) - self.assertEquals(res.read(), '1, python, 123456\n') + self.assertEqual(res.read(), '1, python, 123456\n') def test_invaliduri(self): res = self.request('/cgi-bin/invalid') res.read() - self.assertEquals(res.status, 404) + self.assertEqual(res.status, 404) def test_authorization(self): - headers = {'Authorization' : 'Basic %s' % \ - base64.b64encode('username:pass')} + headers = {'Authorization' : 'Basic %s' % + base64.b64encode('username:pass')} res = self.request('/cgi-bin/file1.py', 'GET', headers=headers) - self.assertEquals(('Hello World\n', 'text/html', 200), \ - (res.read(), res.getheader('Content-type'), res.status)) + self.assertEqual(('Hello World\n', 'text/html', 200), + (res.read(), res.getheader('Content-type'), res.status)) def test_no_leading_slash(self): # http://bugs.python.org/issue2254 res = self.request('cgi-bin/file1.py') - self.assertEquals(('Hello World\n', 'text/html', 200), + self.assertEqual(('Hello World\n', 'text/html', 200), (res.read(), res.getheader('Content-type'), res.status)) Modified: python/trunk/Lib/test/test_importhooks.py ============================================================================== --- python/trunk/Lib/test/test_importhooks.py (original) +++ python/trunk/Lib/test/test_importhooks.py Fri Mar 19 19:34:55 2010 @@ -247,7 +247,7 @@ for n in sys.modules.keys(): if n.startswith(parent): del sys.modules[n] - with test_support.check_py3k_warnings(), test_support.check_warnings(): + with test_support.check_warnings(): for mname in mnames: m = __import__(mname, globals(), locals(), ["__dummy__"]) m.__loader__ # to make sure we actually handled the import Modified: python/trunk/Lib/test/test_index.py ============================================================================== --- python/trunk/Lib/test/test_index.py (original) +++ python/trunk/Lib/test/test_index.py Fri Mar 19 19:34:55 2010 @@ -170,7 +170,7 @@ lst = [5, 6, 7, 8, 9, 11] l2 = lst.__imul__(self.n) - self.assertTrue(l2 is lst) + self.assertIs(l2, lst) self.assertEqual(lst, [5, 6, 7, 8, 9, 11] * 3) @@ -214,6 +214,9 @@ class StringTestCase(SeqTestCase): seq = "this is a test" +class ByteArrayTestCase(SeqTestCase): + seq = bytearray("this is a test") + class UnicodeTestCase(SeqTestCase): seq = u"this is a test" @@ -265,7 +268,7 @@ def _getslice_helper_deprecated(self, base): class GetItem(base): def __len__(self): - return maxint #cannot return long here + return maxint # cannot return long here def __getitem__(self, key): return key def __getslice__(self, i, j): @@ -299,6 +302,7 @@ BaseTestCase, ListTestCase, TupleTestCase, + ByteArrayTestCase, StringTestCase, UnicodeTestCase, ClassicSeqTestCase, Modified: python/trunk/Lib/test/test_minidom.py ============================================================================== --- python/trunk/Lib/test/test_minidom.py (original) +++ python/trunk/Lib/test/test_minidom.py Fri Mar 19 19:34:55 2010 @@ -950,7 +950,7 @@ node = doc.documentElement node.childNodes[1].nodeValue = "" node.normalize() - self.confirm(node.childNodes[-1].nextSibling == None, + self.confirm(node.childNodes[-1].nextSibling is None, "Final child's .nextSibling should be None") def testSiblings(self): Modified: python/trunk/Lib/test/test_profilehooks.py ============================================================================== --- python/trunk/Lib/test/test_profilehooks.py (original) +++ python/trunk/Lib/test/test_profilehooks.py Fri Mar 19 19:34:55 2010 @@ -12,7 +12,7 @@ sys.setprofile(None) def test_empty(self): - assert sys.getprofile() == None + assert sys.getprofile() is None def test_setget(self): def fn(*args): Modified: python/trunk/Lib/test/test_scope.py ============================================================================== --- python/trunk/Lib/test/test_scope.py (original) +++ python/trunk/Lib/test/test_scope.py Fri Mar 19 19:34:55 2010 @@ -1,9 +1,7 @@ import unittest -from test.test_support import check_syntax_error, run_unittest +from test.test_support import check_syntax_error, check_py3k_warnings, \ + check_warnings, run_unittest -import warnings -warnings.filterwarnings("ignore", r"import \*", SyntaxWarning, "") -warnings.filterwarnings("ignore", r"import \*", SyntaxWarning, "") class ScopeTests(unittest.TestCase): @@ -321,11 +319,14 @@ self.assertEqual(makeReturner2(a=11)()['a'], 11) - def makeAddPair((a, b)): - def addPair((c, d)): - return (a + c, b + d) - return addPair - + with check_py3k_warnings(("tuple parameter unpacking has been removed", + SyntaxWarning)): + exec """\ +def makeAddPair((a, b)): + def addPair((c, d)): + return (a + c, b + d) + return addPair +""" in locals() self.assertEqual(makeAddPair((1, 2))((100, 200)), (101,202)) def testScopeOfGlobalStmt(self): @@ -471,7 +472,7 @@ return g d = f(2)(4) - self.assertTrue(d.has_key('h')) + self.assertIn('h', d) del d['h'] self.assertEqual(d, {'x': 2, 'y': 7, 'w': 6}) @@ -648,7 +649,9 @@ def test_main(): - run_unittest(ScopeTests) + with check_warnings(("import \* only allowed at module level", + SyntaxWarning)): + run_unittest(ScopeTests) if __name__ == '__main__': test_main() Modified: python/trunk/Lib/test/test_urllib2_localnet.py ============================================================================== --- python/trunk/Lib/test/test_urllib2_localnet.py (original) +++ python/trunk/Lib/test/test_urllib2_localnet.py Fri Mar 19 19:34:55 2010 @@ -236,6 +236,7 @@ REALM = "TestRealm" def setUp(self): + super(ProxyAuthTests, self).setUp() self.digest_auth_handler = DigestAuthHandler() self.digest_auth_handler.set_users({self.USER: self.PASSWD}) self.digest_auth_handler.set_realm(self.REALM) @@ -252,6 +253,7 @@ def tearDown(self): self.server.stop() + super(ProxyAuthTests, self).tearDown() def test_proxy_with_bad_password_raises_httperror(self): self.proxy_digest_handler.add_password(self.REALM, self.URL, From python-checkins at python.org Fri Mar 19 19:59:20 2010 From: python-checkins at python.org (matthias.klose) Date: Fri, 19 Mar 2010 19:59:20 +0100 (CET) Subject: [Python-checkins] r79101 - in python/trunk/Modules/_ctypes: libffi.diff libffi/ChangeLog libffi/ChangeLog.libffi libffi/Makefile.am libffi/README libffi/configure libffi/configure.ac libffi/doc/libffi.info libffi/doc/libffi.texi libffi/doc/stamp-vti libffi/doc/version.texi libffi/fficonfig.h.in libffi/include/ffi.h.in libffi/msvcc.sh libffi/src/closures.c libffi/src/mips/n32.S libffi/src/moxie libffi/src/moxie/eabi.S libffi/src/moxie/ffi.c libffi/src/moxie/ffitarget.h libffi/src/prep_cif.c libffi/src/x86/ffi.c libffi/src/x86/ffi64.c libffi/src/x86/ffitarget.h libffi/src/x86/win32.S libffi/testsuite/lib/libffi-dg.exp libffi/testsuite/libffi.call/cls_align_sint64.c libffi/testsuite/libffi.call/cls_align_uint64.c libffi/testsuite/libffi.call/cls_longdouble.c libffi/testsuite/libffi.call/cls_ulonglong.c libffi/testsuite/libffi.call/ffitest.h libffi/testsuite/libffi.call/return_ll1.c libffi/testsuite/libffi.call/stret_medium2.c libffi/testsuite/libffi.special/ffitestcxx.h Message-ID: <20100319185920.A5546FCCB@mail.python.org> Author: matthias.klose Date: Fri Mar 19 19:59:20 2010 New Revision: 79101 Log: update libffi to commit 59a259f4d348f593b45f452309f4d020a28051c4 from the trunk (adding msvc port). Added: python/trunk/Modules/_ctypes/libffi/msvcc.sh python/trunk/Modules/_ctypes/libffi/src/moxie/ python/trunk/Modules/_ctypes/libffi/src/moxie/eabi.S python/trunk/Modules/_ctypes/libffi/src/moxie/ffi.c python/trunk/Modules/_ctypes/libffi/src/moxie/ffitarget.h Modified: python/trunk/Modules/_ctypes/libffi.diff python/trunk/Modules/_ctypes/libffi/ChangeLog python/trunk/Modules/_ctypes/libffi/ChangeLog.libffi python/trunk/Modules/_ctypes/libffi/Makefile.am python/trunk/Modules/_ctypes/libffi/README python/trunk/Modules/_ctypes/libffi/configure python/trunk/Modules/_ctypes/libffi/configure.ac python/trunk/Modules/_ctypes/libffi/doc/libffi.info python/trunk/Modules/_ctypes/libffi/doc/libffi.texi python/trunk/Modules/_ctypes/libffi/doc/stamp-vti python/trunk/Modules/_ctypes/libffi/doc/version.texi python/trunk/Modules/_ctypes/libffi/fficonfig.h.in python/trunk/Modules/_ctypes/libffi/include/ffi.h.in python/trunk/Modules/_ctypes/libffi/src/closures.c python/trunk/Modules/_ctypes/libffi/src/mips/n32.S python/trunk/Modules/_ctypes/libffi/src/prep_cif.c python/trunk/Modules/_ctypes/libffi/src/x86/ffi.c python/trunk/Modules/_ctypes/libffi/src/x86/ffi64.c python/trunk/Modules/_ctypes/libffi/src/x86/ffitarget.h python/trunk/Modules/_ctypes/libffi/src/x86/win32.S python/trunk/Modules/_ctypes/libffi/testsuite/lib/libffi-dg.exp python/trunk/Modules/_ctypes/libffi/testsuite/libffi.call/cls_align_sint64.c python/trunk/Modules/_ctypes/libffi/testsuite/libffi.call/cls_align_uint64.c python/trunk/Modules/_ctypes/libffi/testsuite/libffi.call/cls_longdouble.c python/trunk/Modules/_ctypes/libffi/testsuite/libffi.call/cls_ulonglong.c python/trunk/Modules/_ctypes/libffi/testsuite/libffi.call/ffitest.h python/trunk/Modules/_ctypes/libffi/testsuite/libffi.call/return_ll1.c python/trunk/Modules/_ctypes/libffi/testsuite/libffi.call/stret_medium2.c python/trunk/Modules/_ctypes/libffi/testsuite/libffi.special/ffitestcxx.h Modified: python/trunk/Modules/_ctypes/libffi.diff ============================================================================== --- python/trunk/Modules/_ctypes/libffi.diff (original) +++ python/trunk/Modules/_ctypes/libffi.diff Fri Mar 19 19:59:20 2010 @@ -111,31 +111,3 @@ +AC_CONFIG_FILES(fficonfig.py) + AC_OUTPUT -diff -urN libffi.orig/src/x86/ffi64.c libffi/src/x86/ffi64.c ---- libffi.orig/src/x86/ffi64.c 2010-03-19 18:27:45.008523897 +0100 -+++ libffi/src/x86/ffi64.c 2010-03-19 18:24:36.437500070 +0100 -@@ -52,7 +52,7 @@ - /* Register class used for passing given 64bit part of the argument. - These represent classes as documented by the PS ABI, with the exception - of SSESF, SSEDF classes, that are basically SSE class, just gcc will -- use SF or DFmode move instead of DImode to avoid reformating penalties. -+ use SF or DFmode move instead of DImode to avoid reformatting penalties. - - Similary we play games with INTEGERSI_CLASS to use cheaper SImode moves - whenever possible (upper half does contain padding). */ -diff -urN libffi.orig/src/x86/ffi.c libffi/src/x86/ffi.c ---- libffi.orig/src/x86/ffi.c 2010-03-19 18:27:45.008523897 +0100 -+++ libffi/src/x86/ffi.c 2010-03-19 18:24:36.441496039 +0100 -@@ -594,10 +594,10 @@ - return FFI_BAD_ABI; - } - -- // we currently don't support certain kinds of arguments for raw -+ /* we currently don't support certain kinds of arguments for raw - // closures. This should be implemented by a separate assembly language - // routine, since it would require argument processing, something we -- // don't do now for performance. -+ // don't do now for performance. */ - - for (i = cif->nargs-1; i >= 0; i--) - { Modified: python/trunk/Modules/_ctypes/libffi/ChangeLog ============================================================================== --- python/trunk/Modules/_ctypes/libffi/ChangeLog (original) +++ python/trunk/Modules/_ctypes/libffi/ChangeLog Fri Mar 19 19:59:20 2010 @@ -1,3 +1,89 @@ +2010-03-14 Matthias Klose + + * src/x86/ffi64.c: Fix typo in comment. + * src/x86/ffi.c: Use /* ... */ comment style. + +2010-01-07 Rainer Orth + + PR libffi/40701 + * testsuite/libffi.call/ffitest.h [__alpha__ && __osf__] (PRIdLL, + PRIuLL, PRId64, PRIu64, PRIuPTR): Define. + * testsuite/libffi.call/cls_align_sint64.c: Add -Wno-format on + alpha*-dec-osf*. + * testsuite/libffi.call/cls_align_uint64.c: Likewise. + * testsuite/libffi.call/cls_ulonglong.c: Likewise. + * testsuite/libffi.call/return_ll1.c: Likewise. + * testsuite/libffi.call/stret_medium2.c: Likewise. + * testsuite/libffi.special/ffitestcxx.h (allocate_mmap): Cast + MAP_FAILED to char *. + +2010-01-06 Rainer Orth + + * src/mips/n32.S: Use .abicalls and .eh_frame with __GNUC__. + +2009-12-31 Anthony Green + + * README: Update for libffi 3.0.9. + +2009-12-27 Matthias Klose + + * configure.ac (HAVE_LONG_DOUBLE): Define for mips when + appropriate. + * configure: Rebuilt. + +2009-12-26 Anthony Green + + * testsuite/libffi.call/cls_longdouble_va.c: Mark as xfail for + avr32*-*-*. + * testsuite/libffi.call/cls_double_va.c: Ditto. + +2009-12-26 Andreas Tobler + + * testsuite/libffi.call/ffitest.h: Conditionally include stdint.h + and inttypes.h. + * testsuite/libffi.special/unwindtest.cc: Ditto. + +2009-12-26 Andreas Tobler + + * configure.ac: Add amd64-*-openbsd*. + * configure: Rebuilt. + * testsuite/lib/libffi-dg.exp (libffi_target_compile): Link + openbsd programs with -lpthread. + +2009-12-26 Anthony Green + + * testsuite/libffi.call/cls_double_va.c, + testsuite/libffi.call/cls_longdouble.c, + testsuite/libffi.call/cls_longdouble_va.c, + testsuite/libffi.call/cls_pointer.c, + testsuite/libffi.call/cls_pointer_stack.c: Remove xfail for + mips*-*-* and arm*-*-*. + * testsuite/libffi.call/cls_align_longdouble_split.c, + testsuite/libffi.call/cls_align_longdouble_split2.c, + testsuite/libffi.call/stret_medium2.c, + testsuite/libffi.call/stret_medium.c, + testsuite/libffi.call/stret_large.c, + testsuite/libffi.call/stret_large2.c: Remove xfail for arm*-*-*. + +2009-12-31 Kay Tietz + + * testsuite/libffi.call/ffitest.h, + testsuite/libffi.special/ffitestcxx.h (PRIdLL, PRuLL): Fix + definitions. + +2009-12-31 Carlo Bramini + + * configure.ac (AM_LTLDFLAGS): Define for windows hosts. + * Makefile.am (libffi_la_LDFLAGS): Add AM_LTLDFLAGS. + * configure: Rebuilt. + * Makefile.in: Rebuilt. + +2009-12-31 Anthony Green + Blake Chaffin. + + * testsuite/libffi.call/huge_struct.c: New test case from Blake + Chaffin @ Apple. + 2009-12-28 David Edelsohn * src/powerpc/ffi_darwin.c (ffi_prep_args): Copy abi and nargs to Modified: python/trunk/Modules/_ctypes/libffi/ChangeLog.libffi ============================================================================== --- python/trunk/Modules/_ctypes/libffi/ChangeLog.libffi (original) +++ python/trunk/Modules/_ctypes/libffi/ChangeLog.libffi Fri Mar 19 19:59:20 2010 @@ -1,56 +1,35 @@ -2009-12-27 Matthias Klose +2010-01-15 Anthony Green - * configure.ac (HAVE_LONG_DOUBLE): Define for mips when - appropriate. - * configure: Rebuilt. - -2009-12-27 Anthony Green + * README: Add notes on building with Microsoft Visual C++. - * testsuite/libffi.call/cls_longdouble.c: Don't xfail for ARM. +2010-01-15 Daniel Witte -2009-12-26 Anthony Green + * msvcc.sh: New file. - * testsuite/libffi.call/huge_struct.c: Don't xfail for avr32*-*-*. - * testsuite/libffi.call/cls_longdouble_va.c: Mark as xfail for - avr32*-*-*. - * testsuite/libffi.call/cls_double_va.c: Ditto. + * src/x86/win32.S: Port assembly routines to MSVC and #ifdef. + * src/x86/ffi.c: Tweak function declaration and remove excess + parens. + * include/ffi.h.in: Add __declspec(align(8)) to typedef struct + ffi_closure. -2009-12-26 Andreas Tobler + * src/x86/ffi.c: Merge ffi_call_SYSV and ffi_call_STDCALL into new + function ffi_call_win32 on X86_WIN32. + * src/x86/win32.S (ffi_call_SYSV): Rename to ffi_call_win32. + (ffi_call_STDCALL): Remove. - * testsuite/libffi.call/ffitest.h: Conditionally include stdint.h - and inttypes.h. - * testsuite/libffi.special/unwindtest.cc: Ditto. - * testsuite/libffi.call/huge_struct.c: Don't include stdint.h - directly. + * src/prep_cif.c (ffi_prep_cif): Move stack space allocation code + to ffi_prep_cif_machdep for x86. + * src/x86/ffi.c (ffi_prep_cif_machdep): To here. -2009-12-26 Andreas Tobler +2010-01-15 Oliver Kiddle - * configure.ac: Add amd64-*-openbsd*. - * configure: Rebuilt. - * testsuite/lib/libffi-dg.exp (libffi_target_compile): Link - openbsd programs with -lpthread. + * src/x86/ffitarget.h (ffi_abi): Check for __i386 and __amd64 for + Sun Studio compiler compatibility. -2009-12-26 Anthony Green +2010-01-12 Conrad Irwin - * testsuite/libffi.call/cls_double_va.c, - testsuite/libffi.call/cls_longdouble.c, - testsuite/libffi.call/cls_longdouble_va.c, - testsuite/libffi.call/cls_pointer.c, - testsuite/libffi.call/cls_pointer_stack.c: Remove xfail for - mips*-*-* and arm*-*-*. - * testsuite/libffi.call/cls_align_longdouble_split.c, - testsuite/libffi.call/cls_align_longdouble_split2.c, - testsuite/libffi.call/stret_medium2.c, - testsuite/libffi.call/stret_medium.c, - testsuite/libffi.call/stret_large.c, - testsuite/libffi.call/stret_large2.c: Remove xfail for arm*-*-*. - -2009-12-26 Andreas Tobler - Anthony Green - - * testsuite/libffi.call/huge_struct.c (test_large_fn): Replace - format code %p with %#lx because %p does not add a leading 0x on - Solaris. Also change relevant arguments to unsigned long. + * doc/libffi.texi: Add closure example. + * doc/libffi.info: Rebuilt. 2009-12-25 Samuli Suominen @@ -58,30 +37,6 @@ * configure: Rebuilt. * fficonfig.h.in: Rebuilt. -2009-12-29 Kay Tietz - - * testsuite/libffi.call/ffitest.h, - testsuite/libffi.special/ffitestcxx.h (PRIdLL, PRuLL): Fix - definitions. - -2009-12-25 Carlo Bramini - - * configure.ac (AM_LTLDFLAGS): Define for windows hosts. - * Makefile.am (libffi_la_LDFLAGS): Add AM_LTLDFLAGS. - * configure: Rebuilt. - * Makefile.in: Rebuilt. - -2009-12-24 Anthony Green - - * testsuite/libffi.call/huge_struct.c: Fix printf format, and - don't xfail x86 Linux. - * testsuite/libffi.call/huge_struct.c: Don't xfail mips. - * testsuite/libffi.call/cls_pointer.c: Ditto. - * testsuite/libffi.call/cls_pointer_stack.c: Ditto. - * testsuite/libffi.call/cls_longdouble_va.c: Ditto. - * testsuite/libffi.call/cls_longdouble.c: Ditto. - * testsuite/libffi.call/cls_double_va.c: Ditto. - 2009-06-16 Andrew Haley * testsuite/libffi.call/cls_align_sint64.c, @@ -257,20 +212,20 @@ 2008-12-22 Timothy Wall * testsuite/libffi.call/closure_fn0.c, - testsuite/libffi.call/closure_fn1.c, - testsuite/libffi.call/closure_fn2.c, - testsuite/libffi.call/closure_fn3.c, - testsuite/libffi.call/closure_fn4.c, - testsuite/libffi.call/closure_fn5.c, - testsuite/libffi.call/closure_fn6.c, - testsuite/libffi.call/closure_loc_fn0.c, - testsuite/libffi.call/closure_stdcall.c, - testsuite/libffi.call/cls_align_pointer.c, - testsuite/libffi.call/cls_pointer.c, + testsuite/libffi.call/closure_fn1.c, + testsuite/libffi.call/closure_fn2.c, + testsuite/libffi.call/closure_fn3.c, + testsuite/libffi.call/closure_fn4.c, + testsuite/libffi.call/closure_fn5.c, + testsuite/libffi.call/closure_fn6.c, + testsuite/libffi.call/closure_loc_fn0.c, + testsuite/libffi.call/closure_stdcall.c, + testsuite/libffi.call/cls_align_pointer.c, + testsuite/libffi.call/cls_pointer.c, testsuite/libffi.call/cls_pointer_stack.c: use portable cast from pointer to integer (intptr_t). * testsuite/libffi.call/cls_longdouble.c: disable for win64. - + 2008-12-19 Anthony Green * configure.ac: Bump version to 3.0.8. Modified: python/trunk/Modules/_ctypes/libffi/Makefile.am ============================================================================== --- python/trunk/Modules/_ctypes/libffi/Makefile.am (original) +++ python/trunk/Modules/_ctypes/libffi/Makefile.am Fri Mar 19 19:59:20 2010 @@ -175,7 +175,7 @@ AM_CFLAGS = -Wall -g -fexceptions -libffi_la_LDFLAGS = -version-info `grep -v '^\#' $(srcdir)/libtool-version` $(AM_LTLDFLAGS) +libffi_la_LDFLAGS = -version-info `grep -v '^\#' $(srcdir)/libtool-version` $(LTLDFLAGS) $(AM_LTLDFLAGS) AM_CPPFLAGS = -I. -I$(top_srcdir)/include -Iinclude -I$(top_srcdir)/src AM_CCASFLAGS = $(AM_CPPFLAGS) @@ -184,4 +184,3 @@ .PHONY: install-html install-pdf install-html: install-pdf: - Modified: python/trunk/Modules/_ctypes/libffi/README ============================================================================== --- python/trunk/Modules/_ctypes/libffi/README (original) +++ python/trunk/Modules/_ctypes/libffi/README Fri Mar 19 19:59:20 2010 @@ -1,7 +1,7 @@ Status ====== -libffi-3.0.9 was released on December 31, 2009. Check the libffi web +libffi-3.0.10 was released on XXXXXXXXXX, 2010. Check the libffi web page for updates: . @@ -43,7 +43,7 @@ For specific configuration details and testing status, please refer to the wiki page here: - http://www.moxielogic.org/wiki/index.php?title=Libffi_3.0.9 + http://www.moxielogic.org/wiki/index.php?title=Libffi_3.0.10 At the time of release, the following basic configurations have been tested: @@ -52,6 +52,7 @@ | Architecture | Operating System | |--------------+------------------| | Alpha | Linux | +| Alpha | Tru64 | | ARM | Linux | | AVR32 | Linux | | HPPA | HPUX | @@ -80,6 +81,7 @@ | X86-64 | FreeBSD | | X86-64 | Linux | | X86-64 | OpenBSD | +| X86-64 | Windows/MingW | |--------------+------------------| Please send additional platform test results to @@ -107,6 +109,14 @@ are using Purify with libffi. Only use this switch when using Purify, as it will slow down the library. +It's also possible to build libffi on Windows platforms with +Microsoft's Visual C++ compiler. In this case, use the msvcc.sh +wrapper script during configuration like so: + +path/to/configure --enable-shared --enable-static \ + CC=path/to/msvcc.sh LD=link \ + CPP=\"cl -nologo -EP\" + Configure has many other options. Use "configure --help" to see them all. Once configure has finished, type "make". Note that you must be using @@ -123,6 +133,12 @@ See the ChangeLog files for details. +3.0.10 ???-??-?? + Fix the N64 build on mips-sgi-irix6.5. + Testsuite fixes for Tru64 Unix. + Enable builds with Microsoft's compiler. + Enable x86 builds with Sun's compiler. + 3.0.9 Dec-31-09 Add AVR32 and win64 ports. Add ARM softfp support. Many fixes for AIX, Solaris, HP-UX, *BSD. Modified: python/trunk/Modules/_ctypes/libffi/configure ============================================================================== --- python/trunk/Modules/_ctypes/libffi/configure (original) +++ python/trunk/Modules/_ctypes/libffi/configure Fri Mar 19 19:59:20 2010 @@ -1,6 +1,6 @@ #! /bin/sh # Guess values for system-dependent variables and create Makefiles. -# Generated by GNU Autoconf 2.65 for libffi 3.0.9. +# Generated by GNU Autoconf 2.65 for libffi 3.0.10rc0. # # Report bugs to . # @@ -701,8 +701,8 @@ # Identity of this package. PACKAGE_NAME='libffi' PACKAGE_TARNAME='libffi' -PACKAGE_VERSION='3.0.9' -PACKAGE_STRING='libffi 3.0.9' +PACKAGE_VERSION='3.0.10rc0' +PACKAGE_STRING='libffi 3.0.10rc0' PACKAGE_BUGREPORT='http://gcc.gnu.org/bugs.html' PACKAGE_URL='' @@ -1489,7 +1489,7 @@ # Omit some internal or obsolete options to make the list less imposing. # This message is too long to be a string in the A/UX 3.1 sh. cat <<_ACEOF -\`configure' configures libffi 3.0.9 to adapt to many kinds of systems. +\`configure' configures libffi 3.0.10rc0 to adapt to many kinds of systems. Usage: $0 [OPTION]... [VAR=VALUE]... @@ -1560,7 +1560,7 @@ if test -n "$ac_init_help"; then case $ac_init_help in - short | recursive ) echo "Configuration of libffi 3.0.9:";; + short | recursive ) echo "Configuration of libffi 3.0.10rc0:";; esac cat <<\_ACEOF @@ -1667,7 +1667,7 @@ test -n "$ac_init_help" && exit $ac_status if $ac_init_version; then cat <<\_ACEOF -libffi configure 3.0.9 +libffi configure 3.0.10rc0 generated by GNU Autoconf 2.65 Copyright (C) 2009 Free Software Foundation, Inc. @@ -2216,7 +2216,7 @@ This file contains any messages produced by compilers while running configure, to aid debugging if configure makes a mistake. -It was created by libffi $as_me 3.0.9, which was +It was created by libffi $as_me 3.0.10rc0, which was generated by GNU Autoconf 2.65. Invocation command line was $ $0 $@ @@ -3142,7 +3142,7 @@ # Define the identity of the package. PACKAGE='libffi' - VERSION='3.0.9' + VERSION='3.0.10rc0' cat >>confdefs.h <<_ACEOF @@ -11192,6 +11192,10 @@ TARGET=X86_64; TARGETDIR=x86 ;; + amd64-*-freebsd*) + TARGET=X86_64; TARGETDIR=x86 + ;; + avr32*-*-*) TARGET=AVR32; TARGETDIR=avr32 ;; @@ -13069,7 +13073,7 @@ # report actual input values of CONFIG_FILES etc. instead of their # values after options handling. ac_log=" -This file was extended by libffi $as_me 3.0.9, which was +This file was extended by libffi $as_me 3.0.10rc0, which was generated by GNU Autoconf 2.65. Invocation command line was CONFIG_FILES = $CONFIG_FILES @@ -13139,7 +13143,7 @@ cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`" ac_cs_version="\\ -libffi config.status 3.0.9 +libffi config.status 3.0.10rc0 configured by $0, generated by GNU Autoconf 2.65, with options \\"\$ac_cs_config\\" Modified: python/trunk/Modules/_ctypes/libffi/configure.ac ============================================================================== --- python/trunk/Modules/_ctypes/libffi/configure.ac (original) +++ python/trunk/Modules/_ctypes/libffi/configure.ac Fri Mar 19 19:59:20 2010 @@ -5,7 +5,7 @@ AC_PREREQ(2.63) -AC_INIT([libffi], [3.0.9], [http://gcc.gnu.org/bugs.html]) +AC_INIT([libffi], [3.0.10rc0], [http://gcc.gnu.org/bugs.html]) AC_CONFIG_HEADERS([fficonfig.h]) AC_CANONICAL_SYSTEM @@ -58,6 +58,10 @@ TARGET=X86_64; TARGETDIR=x86 ;; + amd64-*-freebsd*) + TARGET=X86_64; TARGETDIR=x86 + ;; + avr32*-*-*) TARGET=AVR32; TARGETDIR=avr32 ;; Modified: python/trunk/Modules/_ctypes/libffi/doc/libffi.info ============================================================================== --- python/trunk/Modules/_ctypes/libffi/doc/libffi.info (original) +++ python/trunk/Modules/_ctypes/libffi/doc/libffi.info Fri Mar 19 19:59:20 2010 @@ -4,7 +4,7 @@ This manual is for Libffi, a portable foreign-function interface library. - Copyright (C) 2008 Red Hat, Inc. + Copyright (C) 2008, 2010 Red Hat, Inc. Permission is granted to copy, distribute and/or modify this document under the terms of the GNU General Public License as @@ -27,7 +27,7 @@ This manual is for Libffi, a portable foreign-function interface library. - Copyright (C) 2008 Red Hat, Inc. + Copyright (C) 2008, 2010 Red Hat, Inc. Permission is granted to copy, distribute and/or modify this document under the terms of the GNU General Public License as @@ -89,6 +89,7 @@ * Types:: libffi type descriptions. * Multiple ABIs:: Different passing styles on one platform. * The Closure API:: Writing a generic function. +* Closure Example:: A closure example.  File: libffi.info, Node: The Basics, Next: Simple Example, Up: Using libffi @@ -368,7 +369,7 @@ necessarily platform-specific.  -File: libffi.info, Node: The Closure API, Prev: Multiple ABIs, Up: Using libffi +File: libffi.info, Node: The Closure API, Next: Closure Example, Prev: Multiple ABIs, Up: Using libffi 2.5 The Closure API =================== @@ -444,6 +445,62 @@ executable addresses.  +File: libffi.info, Node: Closure Example, Prev: The Closure API, Up: Using libffi + +2.6 Closure Example +=================== + +A trivial example that creates a new `puts' by binding `fputs' with +`stdin'. + + #include + #include + + /* Acts like puts with the file given at time of enclosure. */ + void puts_binding(ffi_cif *cif, unsigned int *ret, void* args[], + FILE *stream) + { + *ret = fputs(*(char **)args[0], stream); + } + + int main() + { + ffi_cif cif; + ffi_type *args[1]; + ffi_closure *closure; + + int (*bound_puts)(char *); + int rc; + + /* Allocate closure and bound_puts */ + closure = ffi_closure_alloc(sizeof(ffi_closure), &bound_puts); + + if (closure) + { + /* Initialize the argument info vectors */ + args[0] = &ffi_type_pointer; + + /* Initialize the cif */ + if (ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 1, + &ffi_type_uint, args) == FFI_OK) + { + /* Initialize the closure, setting stream to stdout */ + if (ffi_prep_closure_loc(closure, &cif, puts_binding, + stdout, bound_puts) == FFI_OK) + { + rc = bound_puts("Hello World!"); + /* rc now holds the result of the call to fputs */ + } + } + } + + /* Deallocate both closure, and bound_puts */ + ffi_closure_free(closure); + + return 0; + } + + File: libffi.info, Node: Missing Features, Next: Index, Prev: Using libffi, Up: Top 3 Missing Features @@ -516,18 +573,19 @@  Tag Table: -Node: Top700 -Node: Introduction1436 -Node: Using libffi3072 -Node: The Basics3507 -Node: Simple Example6114 -Node: Types7141 -Node: Primitive Types7424 -Node: Structures9244 -Node: Type Example10104 -Node: Multiple ABIs11327 -Node: The Closure API11698 -Node: Missing Features14618 -Node: Index15111 +Node: Top706 +Node: Introduction1448 +Node: Using libffi3084 +Node: The Basics3570 +Node: Simple Example6177 +Node: Types7204 +Node: Primitive Types7487 +Node: Structures9307 +Node: Type Example10167 +Node: Multiple ABIs11390 +Node: The Closure API11761 +Node: Closure Example14705 +Node: Missing Features16264 +Node: Index16757  End Tag Table Modified: python/trunk/Modules/_ctypes/libffi/doc/libffi.texi ============================================================================== --- python/trunk/Modules/_ctypes/libffi/doc/libffi.texi (original) +++ python/trunk/Modules/_ctypes/libffi/doc/libffi.texi Fri Mar 19 19:59:20 2010 @@ -19,7 +19,7 @@ This manual is for Libffi, a portable foreign-function interface library. -Copyright @copyright{} 2008 Red Hat, Inc. +Copyright @copyright{} 2008, 2010 Red Hat, Inc. @quotation Permission is granted to copy, distribute and/or modify this document @@ -106,6 +106,7 @@ * Types:: libffi type descriptions. * Multiple ABIs:: Different passing styles on one platform. * The Closure API:: Writing a generic function. +* Closure Example:: A closure example. @end menu @@ -500,12 +501,66 @@ to the appropriate pointer-to-function type. @end defun - at c FIXME: example - You may see old code referring to @code{ffi_prep_closure}. This function is deprecated, as it cannot handle the need for separate writable and executable addresses. + at node Closure Example + at section Closure Example + +A trivial example that creates a new @code{puts} by binding + at code{fputs} with @code{stdin}. + + at example +#include +#include + +/* Acts like puts with the file given at time of enclosure. */ +void puts_binding(ffi_cif *cif, unsigned int *ret, void* args[], + FILE *stream) +@{ + *ret = fputs(*(char **)args[0], stream); +@} + +int main() +@{ + ffi_cif cif; + ffi_type *args[1]; + ffi_closure *closure; + + int (*bound_puts)(char *); + int rc; + + /* Allocate closure and bound_puts */ + closure = ffi_closure_alloc(sizeof(ffi_closure), &bound_puts); + + if (closure) + @{ + /* Initialize the argument info vectors */ + args[0] = &ffi_type_pointer; + + /* Initialize the cif */ + if (ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 1, + &ffi_type_uint, args) == FFI_OK) + @{ + /* Initialize the closure, setting stream to stdout */ + if (ffi_prep_closure_loc(closure, &cif, puts_binding, + stdout, bound_puts) == FFI_OK) + @{ + rc = bound_puts("Hello World!"); + /* rc now holds the result of the call to fputs */ + @} + @} + @} + + /* Deallocate both closure, and bound_puts */ + ffi_closure_free(closure); + + return 0; +@} + + at end example + @node Missing Features @chapter Missing Features @@ -525,6 +580,8 @@ @item The closure API is + at c FIXME: ... + @item The ``raw'' API is undocumented. @c argument promotion? Modified: python/trunk/Modules/_ctypes/libffi/doc/stamp-vti ============================================================================== --- python/trunk/Modules/_ctypes/libffi/doc/stamp-vti (original) +++ python/trunk/Modules/_ctypes/libffi/doc/stamp-vti Fri Mar 19 19:59:20 2010 @@ -1,4 +1,4 @@ - at set UPDATED 29 December 2009 - at set UPDATED-MONTH December 2009 - at set EDITION 3.0.9 - at set VERSION 3.0.9 + at set UPDATED 14 February 2008 + at set UPDATED-MONTH February 2008 + at set EDITION 3.0.8 + at set VERSION 3.0.8 Modified: python/trunk/Modules/_ctypes/libffi/doc/version.texi ============================================================================== --- python/trunk/Modules/_ctypes/libffi/doc/version.texi (original) +++ python/trunk/Modules/_ctypes/libffi/doc/version.texi Fri Mar 19 19:59:20 2010 @@ -1,4 +1,4 @@ - at set UPDATED 29 December 2009 - at set UPDATED-MONTH December 2009 - at set EDITION 3.0.9 - at set VERSION 3.0.9 + at set UPDATED 14 February 2008 + at set UPDATED-MONTH February 2008 + at set EDITION 3.0.8 + at set VERSION 3.0.8 Modified: python/trunk/Modules/_ctypes/libffi/fficonfig.h.in ============================================================================== --- python/trunk/Modules/_ctypes/libffi/fficonfig.h.in (original) +++ python/trunk/Modules/_ctypes/libffi/fficonfig.h.in Fri Mar 19 19:59:20 2010 @@ -125,6 +125,9 @@ /* Define to the one symbol short name of this package. */ #undef PACKAGE_TARNAME +/* Define to the home page for this package. */ +#undef PACKAGE_URL + /* Define to the version of this package. */ #undef PACKAGE_VERSION Modified: python/trunk/Modules/_ctypes/libffi/include/ffi.h.in ============================================================================== --- python/trunk/Modules/_ctypes/libffi/include/ffi.h.in (original) +++ python/trunk/Modules/_ctypes/libffi/include/ffi.h.in Fri Mar 19 19:59:20 2010 @@ -251,6 +251,9 @@ #if FFI_CLOSURES +#ifdef _MSC_VER +__declspec(align(8)) +#endif typedef struct { char tramp[FFI_TRAMPOLINE_SIZE]; ffi_cif *cif; Added: python/trunk/Modules/_ctypes/libffi/msvcc.sh ============================================================================== --- (empty file) +++ python/trunk/Modules/_ctypes/libffi/msvcc.sh Fri Mar 19 19:59:20 2010 @@ -0,0 +1,185 @@ +#!/bin/sh + +# ***** BEGIN LICENSE BLOCK ***** +# Version: MPL 1.1/GPL 2.0/LGPL 2.1 +# +# The contents of this file are subject to the Mozilla Public License Version +# 1.1 (the "License"); you may not use this file except in compliance with +# the License. You may obtain a copy of the License at +# http://www.mozilla.org/MPL/ +# +# Software distributed under the License is distributed on an "AS IS" basis, +# WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License +# for the specific language governing rights and limitations under the +# License. +# +# The Original Code is the MSVC wrappificator. +# +# The Initial Developer of the Original Code is +# Timothy Wall . +# Portions created by the Initial Developer are Copyright (C) 2009 +# the Initial Developer. All Rights Reserved. +# +# Contributor(s): +# Daniel Witte +# +# Alternatively, the contents of this file may be used under the terms of +# either the GNU General Public License Version 2 or later (the "GPL"), or +# the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), +# in which case the provisions of the GPL or the LGPL are applicable instead +# of those above. If you wish to allow use of your version of this file only +# under the terms of either the GPL or the LGPL, and not to allow others to +# use your version of this file under the terms of the MPL, indicate your +# decision by deleting the provisions above and replace them with the notice +# and other provisions required by the GPL or the LGPL. If you do not delete +# the provisions above, a recipient may use your version of this file under +# the terms of any one of the MPL, the GPL or the LGPL. +# +# ***** END LICENSE BLOCK ***** + +# +# GCC-compatible wrapper for cl.exe and ml.exe. Arguments are given in GCC +# format and translated into something sensible for cl or ml. +# + +# Disable specific warnings, and enable warnings-as-errors so we catch any +# mistranslated args. +nowarn="-wd4127 -wd4820 -wd4706 -wd4100 -wd4255 -wd4668 -wd4053 -wd4324" +args="-nologo -W3 -WX $nowarn" +md=-MD +cl="cl" +ml="ml" +output= + +while [ $# -gt 0 ] +do + case $1 + in + -fexceptions) + # Don't enable exceptions for now. + #args="$args -EHac" + shift 1 + ;; + -m32) + shift 1 + ;; + -m64) + cl="cl" # "$MSVC/x86_amd64/cl" + ml="ml64" # "$MSVC/x86_amd64/ml64" + shift 1 + ;; + -O*) + args="$args $1" + shift 1 + ;; + -g) + # Can't specify -RTC1 or -Zi in opt. -Gy is ok. Use -OPT:REF? + args="$args -D_DEBUG -RTC1 -Zi" + md=-MDd + shift 1 + ;; + -c) + args="$args -c" + args="$(echo $args | sed 's%/Fe%/Fo%g')" + single="-c" + shift 1 + ;; + -D*=*) + name="$(echo $1|sed 's/-D\([^=][^=]*\)=.*/\1/g')" + value="$(echo $1|sed 's/-D[^=][^=]*=//g')" + args="$args -D${name}='$value'" + defines="$defines -D${name}='$value'" + shift 1 + ;; + -D*) + args="$args $1" + defines="$defines $1" + shift 1 + ;; + -I) + args="$args -I$2" + includes="$includes -I$2" + shift 2 + ;; + -I*) + args="$args $1" + includes="$includes $1" + shift 1 + ;; + -W|-Wextra) + # TODO map extra warnings + shift 1 + ;; + -Wall) + args="$args -Wall" + shift 1 + ;; + -Werror) + args="$args -WX" + shift 1 + ;; + -W*) + # TODO map specific warnings + shift 1 + ;; + -S) + args="$args -FAs" + shift 1 + ;; + -o) + outdir="$(dirname $2)" + base="$(basename $2|sed 's/\.[^.]*//g')" + if [ -n "$single" ]; then + output="-Fo$2" + else + output="-Fe$2" + fi + if [ -n "$assembly" ]; then + args="$args $output" + else + args="$args $output -Fd$outdir/$base -Fp$outdir/$base -Fa$outdir/$base" + fi + shift 2 + ;; + *.S) + src=$1 + assembly="true" + shift 1 + ;; + *.c) + args="$args $1" + shift 1 + ;; + *) + # Assume it's an MSVC argument, and pass it through. + args="$args $1" + shift 1 + ;; + esac +done + +if [ -n "$assembly" ]; then + if [ -z "$outdir" ]; then + outdir="." + fi + ppsrc="$outdir/$(basename $src|sed 's/.S$/.asm/g')" + echo "$cl -nologo -EP $includes $defines $src > $ppsrc" + "$cl" -nologo -EP $includes $defines $src > $ppsrc || exit $? + output="$(echo $output | sed 's%/F[dpa][^ ]*%%g')" + args="-nologo -safeseh $single $output $ppsrc" + + echo "$ml $args" + eval "\"$ml\" $args" + result=$? + + # required to fix ml64 broken output? + #mv *.obj $outdir +else + args="$md $args" + echo "$cl $args" + eval "\"$cl\" $args" + result=$? +fi + +exit $result + Modified: python/trunk/Modules/_ctypes/libffi/src/closures.c ============================================================================== --- python/trunk/Modules/_ctypes/libffi/src/closures.c (original) +++ python/trunk/Modules/_ctypes/libffi/src/closures.c Fri Mar 19 19:59:20 2010 @@ -1,5 +1,5 @@ /* ----------------------------------------------------------------------- - closures.c - Copyright (c) 2007, 2009 Red Hat, Inc. + closures.c - Copyright (c) 2007 Red Hat, Inc. Copyright (C) 2007, 2009 Free Software Foundation, Inc Code to allocate and deallocate memory for closures. @@ -209,8 +209,6 @@ #if !(defined(X86_WIN32) || defined(X86_WIN64)) || defined (__CYGWIN__) -#if FFI_MMAP_EXEC_SELINUX - /* A mutex used to synchronize access to *exec* variables in this file. */ static pthread_mutex_t open_temp_exec_file_mutex = PTHREAD_MUTEX_INITIALIZER; @@ -480,27 +478,6 @@ return dlmmap_locked (start, length, prot, flags, offset); } -#else - -static void * -dlmmap (void *start, size_t length, int prot, - int flags, int fd, off_t offset) -{ - - assert (start == NULL && length % malloc_getpagesize == 0 - && prot == (PROT_READ | PROT_WRITE) - && flags == (MAP_PRIVATE | MAP_ANONYMOUS) - && fd == -1 && offset == 0); - -#if FFI_CLOSURE_TEST - printf ("mapping in %zi\n", length); -#endif - - return mmap (start, length, prot | PROT_EXEC, flags, fd, offset); -} - -#endif - /* Release memory at the given address, as well as the corresponding executable page if it's separate. */ static int Modified: python/trunk/Modules/_ctypes/libffi/src/mips/n32.S ============================================================================== --- python/trunk/Modules/_ctypes/libffi/src/mips/n32.S (original) +++ python/trunk/Modules/_ctypes/libffi/src/mips/n32.S Fri Mar 19 19:59:20 2010 @@ -1,5 +1,5 @@ /* ----------------------------------------------------------------------- - n32.S - Copyright (c) 1996, 1998, 2005 Red Hat, Inc. + n32.S - Copyright (c) 1996, 1998, 2005, 2007, 2009, 2010 Red Hat, Inc. MIPS Foreign Function Interface @@ -40,7 +40,7 @@ #define SIZEOF_FRAME ( 8 * FFI_SIZEOF_ARG ) -#ifdef linux +#ifdef __GNUC__ .abicalls #endif .text @@ -529,7 +529,7 @@ .LFE2: .end ffi_closure_N32 -#ifdef linux +#ifdef __GNUC__ .section .eh_frame,"aw", at progbits .Lframe1: .4byte .LECIE1-.LSCIE1 # length @@ -586,6 +586,6 @@ .uleb128 (SIZEOF_FRAME2 - RA_OFF2)/4 .align EH_FRAME_ALIGN .LEFDE3: -#endif /* linux */ +#endif /* __GNUC__ */ #endif Added: python/trunk/Modules/_ctypes/libffi/src/moxie/eabi.S ============================================================================== --- (empty file) +++ python/trunk/Modules/_ctypes/libffi/src/moxie/eabi.S Fri Mar 19 19:59:20 2010 @@ -0,0 +1,128 @@ +/* ----------------------------------------------------------------------- + eabi.S - Copyright (c) 2004 Anthony Green + + FR-V Assembly glue. + + 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 THE AUTHOR 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 + + .globl ffi_prep_args_EABI + + .text + .p2align 4 + .globl ffi_call_EABI + .type ffi_call_EABI, @function + + # gr8 : ffi_prep_args + # gr9 : &ecif + # gr10: cif->bytes + # gr11: fig->flags + # gr12: ecif.rvalue + # gr13: fn + +ffi_call_EABI: + addi sp, #-80, sp + sti fp, @(sp, #24) + addi sp, #24, fp + movsg lr, gr5 + + /* Make room for the new arguments. */ + /* subi sp, fp, gr10 */ + + /* Store return address and incoming args on stack. */ + sti gr5, @(fp, #8) + sti gr8, @(fp, #-4) + sti gr9, @(fp, #-8) + sti gr10, @(fp, #-12) + sti gr11, @(fp, #-16) + sti gr12, @(fp, #-20) + sti gr13, @(fp, #-24) + + sub sp, gr10, sp + + /* Call ffi_prep_args. */ + ldi @(fp, #-4), gr4 + addi sp, #0, gr8 + ldi @(fp, #-8), gr9 +#ifdef __FRV_FDPIC__ + ldd @(gr4, gr0), gr14 + calll @(gr14, gr0) +#else + calll @(gr4, gr0) +#endif + + /* ffi_prep_args returns the new stack pointer. */ + mov gr8, gr4 + + ldi @(sp, #0), gr8 + ldi @(sp, #4), gr9 + ldi @(sp, #8), gr10 + ldi @(sp, #12), gr11 + ldi @(sp, #16), gr12 + ldi @(sp, #20), gr13 + + /* Always copy the return value pointer into the hidden + parameter register. This is only strictly necessary + when we're returning an aggregate type, but it doesn't + hurt to do this all the time, and it saves a branch. */ + ldi @(fp, #-20), gr3 + + /* Use the ffi_prep_args return value for the new sp. */ + mov gr4, sp + + /* Call the target function. */ + ldi @(fp, -24), gr4 +#ifdef __FRV_FDPIC__ + ldd @(gr4, gr0), gr14 + calll @(gr14, gr0) +#else + calll @(gr4, gr0) +#endif + + /* Store the result. */ + ldi @(fp, #-16), gr10 /* fig->flags */ + ldi @(fp, #-20), gr4 /* ecif.rvalue */ + + /* Is the return value stored in two registers? */ + cmpi gr10, #8, icc0 + bne icc0, 0, .L2 + /* Yes, save them. */ + sti gr8, @(gr4, #0) + sti gr9, @(gr4, #4) + bra .L3 +.L2: + /* Is the return value a structure? */ + cmpi gr10, #-1, icc0 + beq icc0, 0, .L3 + /* No, save a 4 byte return value. */ + sti gr8, @(gr4, #0) +.L3: + + /* Restore the stack, and return. */ + ldi @(fp, 8), gr5 + ld @(fp, gr0), fp + addi sp,#80,sp + jmpl @(gr5,gr0) + .size ffi_call_EABI, .-ffi_call_EABI + Added: python/trunk/Modules/_ctypes/libffi/src/moxie/ffi.c ============================================================================== --- (empty file) +++ python/trunk/Modules/_ctypes/libffi/src/moxie/ffi.c Fri Mar 19 19:59:20 2010 @@ -0,0 +1,276 @@ +/* ----------------------------------------------------------------------- + ffi.c - Copyright (C) 2009 Anthony Green + + Moxie 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 THE AUTHORS OR COPYRIGHT + HOLDERS 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 + +/* ffi_prep_args is called by the assembly routine once stack space + has been allocated for the function's arguments */ + +void *ffi_prep_args(char *stack, extended_cif *ecif) +{ + register unsigned int i; + register void **p_argv; + register char *argp; + register ffi_type **p_arg; + register int count = 0; + + p_argv = ecif->avalue; + argp = stack; + + for (i = ecif->cif->nargs, p_arg = ecif->cif->arg_types; + (i != 0); + i--, p_arg++) + { + size_t z; + + z = (*p_arg)->size; + + if ((*p_arg)->type == FFI_TYPE_STRUCT) + { + z = sizeof(void*); + *(void **) argp = *p_argv; + } + /* if ((*p_arg)->type == FFI_TYPE_FLOAT) + { + if (count > 24) + { + // This is going on the stack. Turn it into a double. + *(double *) argp = (double) *(float*)(* p_argv); + z = sizeof(double); + } + else + *(void **) argp = *(void **)(* p_argv); + } */ + else 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; + + 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; + count += z; + } + + return (stack + ((count > 24) ? 24 : ALIGN_DOWN(count, 8))); +} + +/* Perform machine dependent cif processing */ +ffi_status ffi_prep_cif_machdep(ffi_cif *cif) +{ + if (cif->rtype->type == FFI_TYPE_STRUCT) + cif->flags = -1; + else + cif->flags = cif->rtype->size; + + cif->bytes = ALIGN (cif->bytes, 8); + + return FFI_OK; +} + +extern void ffi_call_EABI(void *(*)(char *, extended_cif *), + extended_cif *, + unsigned, unsigned, + unsigned *, + void (*fn)(void)); + +void ffi_call(ffi_cif *cif, + void (*fn)(void), + void *rvalue, + 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)) + { + ecif.rvalue = alloca(cif->rtype->size); + } + else + ecif.rvalue = rvalue; + + + switch (cif->abi) + { + case FFI_EABI: + ffi_call_EABI(ffi_prep_args, &ecif, cif->bytes, + cif->flags, ecif.rvalue, fn); + break; + default: + FFI_ASSERT(0); + break; + } +} + +void ffi_closure_eabi (unsigned arg1, unsigned arg2, unsigned arg3, + unsigned arg4, unsigned arg5, unsigned arg6) +{ + /* This function is called by a trampoline. The trampoline stows a + pointer to the ffi_closure object in gr7. We must save this + pointer in a place that will persist while we do our work. */ + register ffi_closure *creg __asm__ ("gr7"); + ffi_closure *closure = creg; + + /* Arguments that don't fit in registers are found on the stack + at a fixed offset above the current frame pointer. */ + register char *frame_pointer __asm__ ("fp"); + char *stack_args = frame_pointer + 16; + + /* Lay the register arguments down in a continuous chunk of memory. */ + unsigned register_args[6] = + { arg1, arg2, arg3, arg4, arg5, arg6 }; + + ffi_cif *cif = closure->cif; + ffi_type **arg_types = cif->arg_types; + void **avalue = alloca (cif->nargs * sizeof(void *)); + char *ptr = (char *) register_args; + int i; + + /* Find the address of each argument. */ + for (i = 0; i < cif->nargs; i++) + { + switch (arg_types[i]->type) + { + case FFI_TYPE_SINT8: + case FFI_TYPE_UINT8: + avalue[i] = ptr + 3; + break; + case FFI_TYPE_SINT16: + case FFI_TYPE_UINT16: + avalue[i] = ptr + 2; + break; + case FFI_TYPE_SINT32: + case FFI_TYPE_UINT32: + case FFI_TYPE_FLOAT: + avalue[i] = ptr; + break; + case FFI_TYPE_STRUCT: + avalue[i] = *(void**)ptr; + break; + default: + /* This is an 8-byte value. */ + avalue[i] = ptr; + ptr += 4; + break; + } + ptr += 4; + + /* If we've handled more arguments than fit in registers, + start looking at the those passed on the stack. */ + if (ptr == ((char *)register_args + (6*4))) + ptr = stack_args; + } + + /* Invoke the closure. */ + if (cif->rtype->type == FFI_TYPE_STRUCT) + { + /* The caller allocates space for the return structure, and + passes a pointer to this space in gr3. Use this value directly + as the return value. */ + register void *return_struct_ptr __asm__("gr3"); + (closure->fun) (cif, return_struct_ptr, avalue, closure->user_data); + } + else + { + /* Allocate space for the return value and call the function. */ + long long rvalue; + (closure->fun) (cif, &rvalue, avalue, closure->user_data); + + /* Functions return 4-byte or smaller results in gr8. 8-byte + values also use gr9. We fill the both, even for small return + values, just to avoid a branch. */ + asm ("ldi @(%0, #0), gr8" : : "r" (&rvalue)); + asm ("ldi @(%0, #0), gr9" : : "r" (&((int *) &rvalue)[1])); + } +} + +ffi_status +ffi_prep_closure_loc (ffi_closure* closure, + ffi_cif* cif, + void (*fun)(ffi_cif*, void*, void**, void*), + void *user_data, + void *codeloc) +{ + unsigned int *tramp = (unsigned int *) &closure->tramp[0]; + unsigned long fn = (long) ffi_closure_eabi; + unsigned long cls = (long) codeloc; + int i; + + fn = (unsigned long) ffi_closure_eabi; + + tramp[0] = 0x8cfc0000 + (fn & 0xffff); /* setlos lo(fn), gr6 */ + tramp[1] = 0x8efc0000 + (cls & 0xffff); /* setlos lo(cls), gr7 */ + tramp[2] = 0x8cf80000 + (fn >> 16); /* sethi hi(fn), gr6 */ + tramp[3] = 0x8ef80000 + (cls >> 16); /* sethi hi(cls), gr7 */ + tramp[4] = 0x80300006; /* jmpl @(gr0, gr6) */ + + closure->cif = cif; + closure->fun = fun; + closure->user_data = user_data; + + /* Cache flushing. */ + for (i = 0; i < FFI_TRAMPOLINE_SIZE; i++) + __asm__ volatile ("dcf @(%0,%1)\n\tici @(%2,%1)" :: "r" (tramp), "r" (i), + "r" (codeloc)); + + return FFI_OK; +} Added: python/trunk/Modules/_ctypes/libffi/src/moxie/ffitarget.h ============================================================================== --- (empty file) +++ python/trunk/Modules/_ctypes/libffi/src/moxie/ffitarget.h Fri Mar 19 19:59:20 2010 @@ -0,0 +1,56 @@ +/* -----------------------------------------------------------------*-C-*- + ffitarget.h - Copyright (c) 2009 Anthony Green + Target configuration macros for Moxie + + 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 THE AUTHORS OR COPYRIGHT + HOLDERS 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 + +/* ---- System specific configurations ----------------------------------- */ + +#ifndef LIBFFI_ASM +typedef unsigned long ffi_arg; +typedef signed long ffi_sarg; + +typedef enum ffi_abi { + FFI_FIRST_ABI = 0, + +#ifdef MOXIE + FFI_EABI, + FFI_DEFAULT_ABI = FFI_EABI, +#endif + + FFI_LAST_ABI = FFI_DEFAULT_ABI + 1 +} ffi_abi; +#endif + +/* ---- Definitions for closures ----------------------------------------- */ + +#define FFI_CLOSURES 0 +#define FFI_NATIVE_RAW_API 0 + +/* Trampolines are 5 4-byte instructions long. */ +#define FFI_TRAMPOLINE_SIZE (5*4) + +#endif Modified: python/trunk/Modules/_ctypes/libffi/src/prep_cif.c ============================================================================== --- python/trunk/Modules/_ctypes/libffi/src/prep_cif.c (original) +++ python/trunk/Modules/_ctypes/libffi/src/prep_cif.c Fri Mar 19 19:59:20 2010 @@ -109,16 +109,13 @@ /* 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 && !defined PA + /* x86, x86-64 and s390 stack space allocation is handled in prep_machdep. */ +#if !defined M68K && !defined __i386__ && !defined __x86_64__ && !defined S390 && !defined PA /* Make space for the return structure pointer */ if (cif->rtype->type == FFI_TYPE_STRUCT #ifdef SPARC && (cif->abi != FFI_V9 || cif->rtype->size > 32) #endif -#ifdef X86_DARWIN - && (cif->rtype->size > 8) -#endif ) bytes = STACK_ARG_SIZE(sizeof(void*)); #endif @@ -134,7 +131,7 @@ check after the initialization. */ FFI_ASSERT_VALID_TYPE(*ptr); -#if !defined __x86_64__ && !defined S390 && !defined PA +#if !defined __i386__ && !defined __x86_64__ && !defined S390 && !defined PA #ifdef SPARC if (((*ptr)->type == FFI_TYPE_STRUCT && ((*ptr)->size > 16 || cif->abi != FFI_V9)) Modified: python/trunk/Modules/_ctypes/libffi/src/x86/ffi.c ============================================================================== --- python/trunk/Modules/_ctypes/libffi/src/x86/ffi.c (original) +++ python/trunk/Modules/_ctypes/libffi/src/x86/ffi.c Fri Mar 19 19:59:20 2010 @@ -148,13 +148,13 @@ /* Perform machine dependent cif processing */ ffi_status ffi_prep_cif_machdep(ffi_cif *cif) { + unsigned int i; + ffi_type **ptr; + /* Set the return type flag */ switch (cif->rtype->type) { case FFI_TYPE_VOID: -#ifdef X86 - case FFI_TYPE_STRUCT: -#endif #if defined(X86) || defined (X86_WIN32) || defined(X86_FREEBSD) || defined(X86_DARWIN) || defined(X86_WIN64) case FFI_TYPE_UINT8: case FFI_TYPE_UINT16: @@ -165,7 +165,6 @@ case FFI_TYPE_UINT32: case FFI_TYPE_SINT32: #endif - case FFI_TYPE_SINT64: case FFI_TYPE_FLOAT: case FFI_TYPE_DOUBLE: @@ -184,8 +183,8 @@ cif->flags = FFI_TYPE_SINT64; break; -#ifndef X86 case FFI_TYPE_STRUCT: +#ifndef X86 if (cif->rtype->size == 1) { cif->flags = FFI_TYPE_SMALL_STRUCT_1B; /* same as char size */ @@ -207,15 +206,13 @@ cif->flags = FFI_TYPE_SINT64; /* same as int64 type */ } else +#endif { cif->flags = FFI_TYPE_STRUCT; -#ifdef X86_WIN64 // allocate space for return value pointer cif->bytes += ALIGN(sizeof(void*), FFI_SIZEOF_ARG); -#endif } break; -#endif default: #ifdef X86_WIN64 @@ -229,41 +226,36 @@ break; } -#ifdef X86_DARWIN - cif->bytes = (cif->bytes + 15) & ~0xF; -#endif + for (ptr = cif->arg_types, i = cif->nargs; i > 0; i--, ptr++) + { + if (((*ptr)->alignment - 1) & cif->bytes) + cif->bytes = ALIGN(cif->bytes, (*ptr)->alignment); + cif->bytes += ALIGN((*ptr)->size, FFI_SIZEOF_ARG); + } #ifdef X86_WIN64 - { - unsigned int i; - ffi_type **ptr; - - for (ptr = cif->arg_types, i = cif->nargs; i > 0; i--, ptr++) - { - if (((*ptr)->alignment - 1) & cif->bytes) - cif->bytes = ALIGN(cif->bytes, (*ptr)->alignment); - cif->bytes += ALIGN((*ptr)->size, FFI_SIZEOF_ARG); - } - } // ensure space for storing four registers cif->bytes += 4 * sizeof(ffi_arg); #endif +#ifdef X86_DARWIN + cif->bytes = (cif->bytes + 15) & ~0xF; +#endif + return FFI_OK; } -extern void ffi_call_SYSV(void (*)(char *, extended_cif *), extended_cif *, - unsigned, unsigned, unsigned *, void (*fn)(void)); - -#ifdef X86_WIN32 -extern void ffi_call_STDCALL(void (*)(char *, extended_cif *), extended_cif *, - unsigned, unsigned, unsigned *, void (*fn)(void)); - -#endif /* X86_WIN32 */ #ifdef X86_WIN64 extern int ffi_call_win64(void (*)(char *, extended_cif *), extended_cif *, unsigned, unsigned, unsigned *, void (*fn)(void)); +#elif defined(X86_WIN32) +extern void +ffi_call_win32(void (*)(char *, extended_cif *), extended_cif *, + unsigned, unsigned, unsigned *, void (*fn)(void)); +#else +extern void ffi_call_SYSV(void (*)(char *, extended_cif *), extended_cif *, + unsigned, unsigned, unsigned *, void (*fn)(void)); #endif void ffi_call(ffi_cif *cif, void (*fn)(void), void *rvalue, void **avalue) @@ -321,18 +313,18 @@ cif->flags, ecif.rvalue, fn); } break; +#elif defined(X86_WIN32) + case FFI_SYSV: + case FFI_STDCALL: + ffi_call_win32(ffi_prep_args, &ecif, cif->bytes, cif->flags, + ecif.rvalue, fn); + break; #else case FFI_SYSV: ffi_call_SYSV(ffi_prep_args, &ecif, cif->bytes, cif->flags, ecif.rvalue, fn); break; -#ifdef X86_WIN32 - case FFI_STDCALL: - ffi_call_STDCALL(ffi_prep_args, &ecif, cif->bytes, cif->flags, - ecif.rvalue, fn); - break; -#endif /* X86_WIN32 */ -#endif /* X86_WIN64 */ +#endif default: FFI_ASSERT(0); break; @@ -342,6 +334,8 @@ /** private members **/ +/* The following __attribute__((regparm(1))) decorations will have no effect + on MSVC - standard cdecl convention applies. */ static void ffi_prep_incoming_args_SYSV (char *stack, void **ret, void** args, ffi_cif* cif); void FFI_HIDDEN ffi_closure_SYSV (ffi_closure *) @@ -390,11 +384,8 @@ } #else -unsigned int FFI_HIDDEN -ffi_closure_SYSV_inner (closure, respp, args) - ffi_closure *closure; - void **respp; - void *args; +unsigned int FFI_HIDDEN __attribute__ ((regparm(1))) +ffi_closure_SYSV_inner (ffi_closure *closure, void **respp, void *args) { /* our various things... */ ffi_cif *cif; @@ -505,7 +496,7 @@ /* How to make a trampoline. Derived from gcc/config/i386/i386.c. */ #define FFI_INIT_TRAMPOLINE(TRAMP,FUN,CTX) \ -({ unsigned char *__tramp = (unsigned char*)(TRAMP); \ +{ unsigned char *__tramp = (unsigned char*)(TRAMP); \ unsigned int __fun = (unsigned int)(FUN); \ unsigned int __ctx = (unsigned int)(CTX); \ unsigned int __dis = __fun - (__ctx + 10); \ @@ -513,10 +504,10 @@ *(unsigned int*) &__tramp[1] = __ctx; /* movl __ctx, %eax */ \ *(unsigned char *) &__tramp[5] = 0xe9; \ *(unsigned int*) &__tramp[6] = __dis; /* jmp __fun */ \ - }) + } #define FFI_INIT_TRAMPOLINE_STDCALL(TRAMP,FUN,CTX,SIZE) \ -({ unsigned char *__tramp = (unsigned char*)(TRAMP); \ +{ unsigned char *__tramp = (unsigned char*)(TRAMP); \ unsigned int __fun = (unsigned int)(FUN); \ unsigned int __ctx = (unsigned int)(CTX); \ unsigned int __dis = __fun - (__ctx + 10); \ @@ -527,7 +518,7 @@ *(unsigned int*) &__tramp[6] = __dis; /* call __fun */ \ *(unsigned char *) &__tramp[10] = 0xc2; \ *(unsigned short*) &__tramp[11] = __size; /* ret __size */ \ - }) + } /* the cif must already be prep'ed */ @@ -595,9 +586,9 @@ } /* we currently don't support certain kinds of arguments for raw - // closures. This should be implemented by a separate assembly language - // routine, since it would require argument processing, something we - // don't do now for performance. */ + closures. This should be implemented by a separate assembly + language routine, since it would require argument processing, + something we don't do now for performance. */ for (i = cif->nargs-1; i >= 0; i--) { @@ -627,16 +618,6 @@ * libffi-1.20, this is not the case.) */ -extern void -ffi_call_SYSV(void (*)(char *, extended_cif *), extended_cif *, unsigned, - unsigned, unsigned *, void (*fn)(void)); - -#ifdef X86_WIN32 -extern void -ffi_call_STDCALL(void (*)(char *, extended_cif *), extended_cif *, unsigned, - unsigned, unsigned *, void (*fn)(void)); -#endif /* X86_WIN32 */ - void ffi_raw_call(ffi_cif *cif, void (*fn)(void), void *rvalue, ffi_raw *fake_avalue) { @@ -660,16 +641,18 @@ switch (cif->abi) { +#ifdef X86_WIN32 + case FFI_SYSV: + case FFI_STDCALL: + ffi_call_win32(ffi_prep_args_raw, &ecif, cif->bytes, cif->flags, + ecif.rvalue, fn); + break; +#else case FFI_SYSV: ffi_call_SYSV(ffi_prep_args_raw, &ecif, cif->bytes, cif->flags, ecif.rvalue, fn); break; -#ifdef X86_WIN32 - case FFI_STDCALL: - ffi_call_STDCALL(ffi_prep_args_raw, &ecif, cif->bytes, cif->flags, - ecif.rvalue, fn); - break; -#endif /* X86_WIN32 */ +#endif default: FFI_ASSERT(0); break; Modified: python/trunk/Modules/_ctypes/libffi/src/x86/ffi64.c ============================================================================== --- python/trunk/Modules/_ctypes/libffi/src/x86/ffi64.c (original) +++ python/trunk/Modules/_ctypes/libffi/src/x86/ffi64.c Fri Mar 19 19:59:20 2010 @@ -50,9 +50,10 @@ gcc/config/i386/i386.c. Do *not* change one without the other. */ /* Register class used for passing given 64bit part of the argument. - These represent classes as documented by the PS ABI, with the exception - of SSESF, SSEDF classes, that are basically SSE class, just gcc will - use SF or DFmode move instead of DImode to avoid reformatting penalties. + These represent classes as documented by the PS ABI, with the + exception of SSESF, SSEDF classes, that are basically SSE class, + just gcc will use SF or DFmode move instead of DImode to avoid + reformatting penalties. Similary we play games with INTEGERSI_CLASS to use cheaper SImode moves whenever possible (upper half does contain padding). */ Modified: python/trunk/Modules/_ctypes/libffi/src/x86/ffitarget.h ============================================================================== --- python/trunk/Modules/_ctypes/libffi/src/x86/ffitarget.h (original) +++ python/trunk/Modules/_ctypes/libffi/src/x86/ffitarget.h Fri Mar 19 19:59:20 2010 @@ -1,5 +1,5 @@ /* -----------------------------------------------------------------*-C-*- - ffitarget.h - Copyright (c) 1996-2003 Red Hat, Inc. + ffitarget.h - Copyright (c) 1996-2003, 2010 Red Hat, Inc. Copyright (C) 2008 Free Software Foundation, Inc. Target configuration macros for x86 and x86-64. @@ -74,10 +74,10 @@ #else /* ---- Intel x86 and AMD x86-64 - */ -#if !defined(X86_WIN32) && (defined(__i386__) || defined(__x86_64__)) +#if !defined(X86_WIN32) && (defined(__i386__) || defined(__x86_64__) || defined(__i386) || defined(__amd64)) FFI_SYSV, FFI_UNIX64, /* Unix variants all use the same ABI for x86-64 */ -#ifdef __i386__ +#if defined(__i386__) || defined(__i386) FFI_DEFAULT_ABI = FFI_SYSV, #else FFI_DEFAULT_ABI = FFI_UNIX64, Modified: python/trunk/Modules/_ctypes/libffi/src/x86/win32.S ============================================================================== --- python/trunk/Modules/_ctypes/libffi/src/x86/win32.S (original) +++ python/trunk/Modules/_ctypes/libffi/src/x86/win32.S Fri Mar 19 19:59:20 2010 @@ -2,6 +2,7 @@ win32.S - Copyright (c) 1996, 1998, 2001, 2002, 2009 Red Hat, Inc. Copyright (c) 2001 John Beniton Copyright (c) 2002 Ranjit Mathew + Copyright (c) 2009 Daniel Witte X86 Foreign Function Interface @@ -31,14 +32,371 @@ #define LIBFFI_ASM #include #include - + +#ifdef _MSC_VER + +.386 +.MODEL FLAT, C + +EXTRN ffi_closure_SYSV_inner:NEAR + +_TEXT SEGMENT + +ffi_call_win32 PROC NEAR, + ffi_prep_args : NEAR PTR DWORD, + ecif : NEAR PTR DWORD, + cif_bytes : DWORD, + cif_flags : DWORD, + rvalue : NEAR PTR DWORD, + fn : NEAR PTR DWORD + + ;; Make room for all of the new args. + mov ecx, cif_bytes + sub esp, ecx + + mov eax, esp + + ;; Place all of the ffi_prep_args in position + push ecif + push eax + call ffi_prep_args + + ;; Return stack to previous state and call the function + add esp, 8 + + call fn + + ;; cdecl: we restore esp in the epilogue, so there's no need to + ;; remove the space we pushed for the args. + ;; stdcall: the callee has already cleaned the stack. + + ;; Load ecx with the return type code + mov ecx, cif_flags + + ;; If the return value pointer is NULL, assume no return value. + cmp rvalue, 0 + jne ca_jumptable + + ;; Even if there is no space for the return value, we are + ;; obliged to handle floating-point values. + cmp ecx, FFI_TYPE_FLOAT + jne ca_epilogue + fstp st(0) + + jmp ca_epilogue + +ca_jumptable: + jmp [ca_jumpdata + 4 * ecx] +ca_jumpdata: + ;; Do not insert anything here between label and jump table. + dd offset ca_epilogue ;; FFI_TYPE_VOID + dd offset ca_retint ;; FFI_TYPE_INT + dd offset ca_retfloat ;; FFI_TYPE_FLOAT + dd offset ca_retdouble ;; FFI_TYPE_DOUBLE + dd offset ca_retlongdouble ;; FFI_TYPE_LONGDOUBLE + dd offset ca_retint8 ;; FFI_TYPE_UINT8 + dd offset ca_retint8 ;; FFI_TYPE_SINT8 + dd offset ca_retint16 ;; FFI_TYPE_UINT16 + dd offset ca_retint16 ;; FFI_TYPE_SINT16 + dd offset ca_retint ;; FFI_TYPE_UINT32 + dd offset ca_retint ;; FFI_TYPE_SINT32 + dd offset ca_retint64 ;; FFI_TYPE_UINT64 + dd offset ca_retint64 ;; FFI_TYPE_SINT64 + dd offset ca_epilogue ;; FFI_TYPE_STRUCT + dd offset ca_retint ;; FFI_TYPE_POINTER + dd offset ca_retint8 ;; FFI_TYPE_SMALL_STRUCT_1B + dd offset ca_retint16 ;; FFI_TYPE_SMALL_STRUCT_2B + dd offset ca_retint ;; FFI_TYPE_SMALL_STRUCT_4B + +ca_retint8: + ;; Load %ecx with the pointer to storage for the return value + mov ecx, rvalue + mov [ecx + 0], al + jmp ca_epilogue + +ca_retint16: + ;; Load %ecx with the pointer to storage for the return value + mov ecx, rvalue + mov [ecx + 0], ax + jmp ca_epilogue + +ca_retint: + ;; Load %ecx with the pointer to storage for the return value + mov ecx, rvalue + mov [ecx + 0], eax + jmp ca_epilogue + +ca_retint64: + ;; Load %ecx with the pointer to storage for the return value + mov ecx, rvalue + mov [ecx + 0], eax + mov [ecx + 4], edx + jmp ca_epilogue + +ca_retfloat: + ;; Load %ecx with the pointer to storage for the return value + mov ecx, rvalue + fstp DWORD PTR [ecx] + jmp ca_epilogue + +ca_retdouble: + ;; Load %ecx with the pointer to storage for the return value + mov ecx, rvalue + fstp QWORD PTR [ecx] + jmp ca_epilogue + +ca_retlongdouble: + ;; Load %ecx with the pointer to storage for the return value + mov ecx, rvalue + fstp TBYTE PTR [ecx] + jmp ca_epilogue + +ca_epilogue: + ;; Epilogue code is autogenerated. + ret +ffi_call_win32 ENDP + +ffi_closure_SYSV PROC NEAR FORCEFRAME + ;; the ffi_closure ctx is passed in eax by the trampoline. + + sub esp, 40 + lea edx, [ebp - 24] + mov [ebp - 12], edx ;; resp + lea edx, [ebp + 8] + mov [esp + 8], edx ;; args + lea edx, [ebp - 12] + mov [esp + 4], edx ;; &resp + mov [esp], eax ;; closure + call ffi_closure_SYSV_inner + mov ecx, [ebp - 12] + +cs_jumptable: + jmp [cs_jumpdata + 4 * eax] +cs_jumpdata: + ;; Do not insert anything here between the label and jump table. + dd offset cs_epilogue ;; FFI_TYPE_VOID + dd offset cs_retint ;; FFI_TYPE_INT + dd offset cs_retfloat ;; FFI_TYPE_FLOAT + dd offset cs_retdouble ;; FFI_TYPE_DOUBLE + dd offset cs_retlongdouble ;; FFI_TYPE_LONGDOUBLE + dd offset cs_retint8 ;; FFI_TYPE_UINT8 + dd offset cs_retint8 ;; FFI_TYPE_SINT8 + dd offset cs_retint16 ;; FFI_TYPE_UINT16 + dd offset cs_retint16 ;; FFI_TYPE_SINT16 + dd offset cs_retint ;; FFI_TYPE_UINT32 + dd offset cs_retint ;; FFI_TYPE_SINT32 + dd offset cs_retint64 ;; FFI_TYPE_UINT64 + dd offset cs_retint64 ;; FFI_TYPE_SINT64 + dd offset cs_retstruct ;; FFI_TYPE_STRUCT + dd offset cs_retint ;; FFI_TYPE_POINTER + dd offset cs_retint8 ;; FFI_TYPE_SMALL_STRUCT_1B + dd offset cs_retint16 ;; FFI_TYPE_SMALL_STRUCT_2B + dd offset cs_retint ;; FFI_TYPE_SMALL_STRUCT_4B + +cs_retint8: + mov al, [ecx] + jmp cs_epilogue + +cs_retint16: + mov ax, [ecx] + jmp cs_epilogue + +cs_retint: + mov eax, [ecx] + jmp cs_epilogue + +cs_retint64: + mov eax, [ecx + 0] + mov edx, [ecx + 4] + jmp cs_epilogue + +cs_retfloat: + fld DWORD PTR [ecx] + jmp cs_epilogue + +cs_retdouble: + fld QWORD PTR [ecx] + jmp cs_epilogue + +cs_retlongdouble: + fld TBYTE PTR [ecx] + jmp cs_epilogue + +cs_retstruct: + ;; Caller expects us to pop struct return value pointer hidden arg. + ;; Epilogue code is autogenerated. + ret 4 + +cs_epilogue: + ;; Epilogue code is autogenerated. + ret +ffi_closure_SYSV ENDP + +#if !FFI_NO_RAW_API + +#define RAW_CLOSURE_CIF_OFFSET ((FFI_TRAMPOLINE_SIZE + 3) AND NOT 3) +#define RAW_CLOSURE_FUN_OFFSET (RAW_CLOSURE_CIF_OFFSET + 4) +#define RAW_CLOSURE_USER_DATA_OFFSET (RAW_CLOSURE_FUN_OFFSET + 4) +#define CIF_FLAGS_OFFSET 20 + +ffi_closure_raw_SYSV PROC NEAR USES esi + ;; the ffi_closure ctx is passed in eax by the trampoline. + + sub esp, 40 + mov esi, [eax + RAW_CLOSURE_CIF_OFFSET] ;; closure->cif + mov edx, [eax + RAW_CLOSURE_USER_DATA_OFFSET] ;; closure->user_data + mov [esp + 12], edx ;; user_data + lea edx, [ebp + 8] + mov [esp + 8], edx ;; raw_args + lea edx, [ebp - 24] + mov [esp + 4], edx ;; &res + mov [esp], esi ;; cif + call DWORD PTR [eax + RAW_CLOSURE_FUN_OFFSET] ;; closure->fun + mov eax, [esi + CIF_FLAGS_OFFSET] ;; cif->flags + lea ecx, [ebp - 24] + +cr_jumptable: + jmp [cr_jumpdata + 4 * eax] +cr_jumpdata: + ;; Do not insert anything here between the label and jump table. + dd offset cr_epilogue ;; FFI_TYPE_VOID + dd offset cr_retint ;; FFI_TYPE_INT + dd offset cr_retfloat ;; FFI_TYPE_FLOAT + dd offset cr_retdouble ;; FFI_TYPE_DOUBLE + dd offset cr_retlongdouble ;; FFI_TYPE_LONGDOUBLE + dd offset cr_retint8 ;; FFI_TYPE_UINT8 + dd offset cr_retint8 ;; FFI_TYPE_SINT8 + dd offset cr_retint16 ;; FFI_TYPE_UINT16 + dd offset cr_retint16 ;; FFI_TYPE_SINT16 + dd offset cr_retint ;; FFI_TYPE_UINT32 + dd offset cr_retint ;; FFI_TYPE_SINT32 + dd offset cr_retint64 ;; FFI_TYPE_UINT64 + dd offset cr_retint64 ;; FFI_TYPE_SINT64 + dd offset cr_epilogue ;; FFI_TYPE_STRUCT + dd offset cr_retint ;; FFI_TYPE_POINTER + dd offset cr_retint8 ;; FFI_TYPE_SMALL_STRUCT_1B + dd offset cr_retint16 ;; FFI_TYPE_SMALL_STRUCT_2B + dd offset cr_retint ;; FFI_TYPE_SMALL_STRUCT_4B + +cr_retint8: + mov al, [ecx] + jmp cr_epilogue + +cr_retint16: + mov ax, [ecx] + jmp cr_epilogue + +cr_retint: + mov eax, [ecx] + jmp cr_epilogue + +cr_retint64: + mov eax, [ecx + 0] + mov edx, [ecx + 4] + jmp cr_epilogue + +cr_retfloat: + fld DWORD PTR [ecx] + jmp cr_epilogue + +cr_retdouble: + fld QWORD PTR [ecx] + jmp cr_epilogue + +cr_retlongdouble: + fld TBYTE PTR [ecx] + jmp cr_epilogue + +cr_epilogue: + ;; Epilogue code is autogenerated. + ret +ffi_closure_raw_SYSV ENDP + +#endif /* !FFI_NO_RAW_API */ + +ffi_closure_STDCALL PROC NEAR FORCEFRAME + ;; the ffi_closure ctx is passed in eax by the trampoline. + + sub esp, 40 + lea edx, [ebp - 24] + mov [ebp - 12], edx ;; resp + lea edx, [ebp + 12] ;; account for stub return address on stack + mov [esp + 8], edx ;; args + lea edx, [ebp - 12] + mov [esp + 4], edx ;; &resp + mov [esp], eax ;; closure + call ffi_closure_SYSV_inner + mov ecx, [ebp - 12] + +cd_jumptable: + jmp [cd_jumpdata + 4 * eax] +cd_jumpdata: + ;; Do not insert anything here between the label and jump table. + dd offset cd_epilogue ;; FFI_TYPE_VOID + dd offset cd_retint ;; FFI_TYPE_INT + dd offset cd_retfloat ;; FFI_TYPE_FLOAT + dd offset cd_retdouble ;; FFI_TYPE_DOUBLE + dd offset cd_retlongdouble ;; FFI_TYPE_LONGDOUBLE + dd offset cd_retint8 ;; FFI_TYPE_UINT8 + dd offset cd_retint8 ;; FFI_TYPE_SINT8 + dd offset cd_retint16 ;; FFI_TYPE_UINT16 + dd offset cd_retint16 ;; FFI_TYPE_SINT16 + dd offset cd_retint ;; FFI_TYPE_UINT32 + dd offset cd_retint ;; FFI_TYPE_SINT32 + dd offset cd_retint64 ;; FFI_TYPE_UINT64 + dd offset cd_retint64 ;; FFI_TYPE_SINT64 + dd offset cd_epilogue ;; FFI_TYPE_STRUCT + dd offset cd_retint ;; FFI_TYPE_POINTER + dd offset cd_retint8 ;; FFI_TYPE_SMALL_STRUCT_1B + dd offset cd_retint16 ;; FFI_TYPE_SMALL_STRUCT_2B + dd offset cd_retint ;; FFI_TYPE_SMALL_STRUCT_4B + +cd_retint8: + mov al, [ecx] + jmp cd_epilogue + +cd_retint16: + mov ax, [ecx] + jmp cd_epilogue + +cd_retint: + mov eax, [ecx] + jmp cd_epilogue + +cd_retint64: + mov eax, [ecx + 0] + mov edx, [ecx + 4] + jmp cd_epilogue + +cd_retfloat: + fld DWORD PTR [ecx] + jmp cd_epilogue + +cd_retdouble: + fld QWORD PTR [ecx] + jmp cd_epilogue + +cd_retlongdouble: + fld TBYTE PTR [ecx] + jmp cd_epilogue + +cd_epilogue: + ;; Epilogue code is autogenerated. + ret +ffi_closure_STDCALL ENDP + +_TEXT ENDS +END + +#else + .text # This assumes we are using gas. .balign 16 - .globl _ffi_call_SYSV - .def _ffi_call_SYSV; .scl 2; .type 32; .endef -_ffi_call_SYSV: + .globl _ffi_call_win32 + .def _ffi_call_win32; .scl 2; .type 32; .endef +_ffi_call_win32: .LFB1: pushl %ebp .LCFI0: @@ -61,8 +419,10 @@ # FIXME: Align the stack to a 128-bit boundary to avoid # potential performance hits. - call *28(%ebp) + call *28(%ebp) + # stdcall functions pop arguments off the stack themselves + # Load %ecx with the return type code movl 20(%ebp),%ecx @@ -181,164 +541,11 @@ movl %ebp,%esp popl %ebp ret -.ffi_call_SYSV_end: +.ffi_call_win32_end: .LFE1: # This assumes we are using gas. .balign 16 - .globl _ffi_call_STDCALL - .def _ffi_call_STDCALL; .scl 2; .type 32; .endef -_ffi_call_STDCALL: -.LFB2: - pushl %ebp -.LCFI2: - movl %esp,%ebp -.LCFI3: - # Make room for all of the new args. - movl 16(%ebp),%ecx - subl %ecx,%esp - - movl %esp,%eax - - # Place all of the ffi_prep_args in position - pushl 12(%ebp) - pushl %eax - call *8(%ebp) - - # Return stack to previous state and call the function - addl $8,%esp - - # FIXME: Align the stack to a 128-bit boundary to avoid - # potential performance hits. - - call *28(%ebp) - - # stdcall functions pop arguments off the stack themselves - - # Load %ecx with the return type code - movl 20(%ebp),%ecx - - # If the return value pointer is NULL, assume no return value. - cmpl $0,24(%ebp) - jne 0f - - # Even if there is no space for the return value, we are - # obliged to handle floating-point values. - cmpl $FFI_TYPE_FLOAT,%ecx - jne .Lsc_noretval - fstp %st(0) - - jmp .Lsc_epilogue - -0: - call 1f - # Do not insert anything here between the call and the jump table. -.Lsc_store_table: - .long .Lsc_noretval /* FFI_TYPE_VOID */ - .long .Lsc_retint /* FFI_TYPE_INT */ - .long .Lsc_retfloat /* FFI_TYPE_FLOAT */ - .long .Lsc_retdouble /* FFI_TYPE_DOUBLE */ - .long .Lsc_retlongdouble /* FFI_TYPE_LONGDOUBLE */ - .long .Lsc_retuint8 /* FFI_TYPE_UINT8 */ - .long .Lsc_retsint8 /* FFI_TYPE_SINT8 */ - .long .Lsc_retuint16 /* FFI_TYPE_UINT16 */ - .long .Lsc_retsint16 /* FFI_TYPE_SINT16 */ - .long .Lsc_retint /* FFI_TYPE_UINT32 */ - .long .Lsc_retint /* FFI_TYPE_SINT32 */ - .long .Lsc_retint64 /* FFI_TYPE_UINT64 */ - .long .Lsc_retint64 /* FFI_TYPE_SINT64 */ - .long .Lsc_retstruct /* FFI_TYPE_STRUCT */ - .long .Lsc_retint /* FFI_TYPE_POINTER */ - .long .Lsc_retstruct1b /* FFI_TYPE_SMALL_STRUCT_1B */ - .long .Lsc_retstruct2b /* FFI_TYPE_SMALL_STRUCT_2B */ - .long .Lsc_retstruct4b /* FFI_TYPE_SMALL_STRUCT_4B */ - -1: - add %ecx, %ecx - add %ecx, %ecx - add (%esp),%ecx - add $4, %esp - jmp *(%ecx) - - /* Sign/zero extend as appropriate. */ -.Lsc_retsint8: - movsbl %al, %eax - jmp .Lsc_retint - -.Lsc_retsint16: - movswl %ax, %eax - jmp .Lsc_retint - -.Lsc_retuint8: - movzbl %al, %eax - jmp .Lsc_retint - -.Lsc_retuint16: - movzwl %ax, %eax - jmp .Lsc_retint - -.Lsc_retint: - # Load %ecx with the pointer to storage for the return value - movl 24(%ebp),%ecx - movl %eax,0(%ecx) - jmp .Lsc_epilogue - -.Lsc_retfloat: - # Load %ecx with the pointer to storage for the return value - movl 24(%ebp),%ecx - fstps (%ecx) - jmp .Lsc_epilogue - -.Lsc_retdouble: - # Load %ecx with the pointer to storage for the return value - movl 24(%ebp),%ecx - fstpl (%ecx) - jmp .Lsc_epilogue - -.Lsc_retlongdouble: - # Load %ecx with the pointer to storage for the return value - movl 24(%ebp),%ecx - fstpt (%ecx) - jmp .Lsc_epilogue - -.Lsc_retint64: - # Load %ecx with the pointer to storage for the return value - movl 24(%ebp),%ecx - movl %eax,0(%ecx) - movl %edx,4(%ecx) - jmp .Lsc_epilogue - -.Lsc_retstruct1b: - # Load %ecx with the pointer to storage for the return value - movl 24(%ebp),%ecx - movb %al,0(%ecx) - jmp .Lsc_epilogue - -.Lsc_retstruct2b: - # Load %ecx with the pointer to storage for the return value - movl 24(%ebp),%ecx - movw %ax,0(%ecx) - jmp .Lsc_epilogue - -.Lsc_retstruct4b: - # Load %ecx with the pointer to storage for the return value - movl 24(%ebp),%ecx - movl %eax,0(%ecx) - jmp .Lsc_epilogue - -.Lsc_retstruct: - # Nothing to do! - -.Lsc_noretval: -.Lsc_epilogue: - movl %ebp,%esp - popl %ebp - ret -.ffi_call_STDCALL_end: -.LFE2: - - # This assumes we are using gas. - .balign 16 .globl _ffi_closure_SYSV .def _ffi_closure_SYSV; .scl 2; .type 32; .endef _ffi_closure_SYSV: @@ -742,38 +949,6 @@ .LEFDE1: -.LSFDE2: - .long .LEFDE2-.LASFDE2 /* FDE Length */ -.LASFDE2: - .long .LASFDE2-.Lframe1 /* FDE CIE offset */ -#if defined __PIC__ && defined HAVE_AS_X86_PCREL - .long .LFB2-. /* FDE initial location */ -#else - .long .LFB2 -#endif - .long .LFE2-.LFB2 /* FDE address range */ -#ifdef __PIC__ - .byte 0x0 /* .uleb128 0x0; Augmentation size */ -#endif - /* DW_CFA_xxx CFI instructions go here. */ - - .byte 0x4 /* DW_CFA_advance_loc4 */ - .long .LCFI2-.LFB2 - .byte 0xe /* DW_CFA_def_cfa_offset CFA = r4 + 8 = 8(%esp) */ - .byte 0x8 /* .uleb128 0x8 */ - .byte 0x85 /* DW_CFA_offset, column 0x5 %ebp at CFA + 2 * -4 */ - .byte 0x2 /* .uleb128 0x2 */ - - .byte 0x4 /* DW_CFA_advance_loc4 */ - .long .LCFI3-.LCFI2 - .byte 0xd /* DW_CFA_def_cfa_register CFA = r5 = %ebp */ - .byte 0x5 /* .uleb128 0x5 */ - - /* End of DW_CFA_xxx CFI instructions. */ - .align 4 -.LEFDE2: - - .LSFDE3: .long .LEFDE3-.LASFDE3 /* FDE Length */ .LASFDE3: @@ -875,3 +1050,6 @@ /* End of DW_CFA_xxx CFI instructions. */ .align 4 .LEFDE5: + +#endif /* !_MSC_VER */ + Modified: python/trunk/Modules/_ctypes/libffi/testsuite/lib/libffi-dg.exp ============================================================================== --- python/trunk/Modules/_ctypes/libffi/testsuite/lib/libffi-dg.exp (original) +++ python/trunk/Modules/_ctypes/libffi/testsuite/lib/libffi-dg.exp Fri Mar 19 19:59:20 2010 @@ -1,8 +1,8 @@ -# Copyright (C) 2003, 2005, 2008, 2009 Free Software Foundation, Inc. +# Copyright (C) 2003, 2005, 2008, 2009, 2010 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 2 of the License, or +# the Free Software Foundation; either version 3 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, Modified: python/trunk/Modules/_ctypes/libffi/testsuite/libffi.call/cls_align_sint64.c ============================================================================== --- python/trunk/Modules/_ctypes/libffi/testsuite/libffi.call/cls_align_sint64.c (original) +++ python/trunk/Modules/_ctypes/libffi/testsuite/libffi.call/cls_align_sint64.c Fri Mar 19 19:59:20 2010 @@ -5,6 +5,7 @@ Originator: 20031203 */ /* { dg-do run } */ +/* { dg-options "-Wno-format" { target alpha*-dec-osf* } } */ #include "ffitest.h" typedef struct cls_struct_align { Modified: python/trunk/Modules/_ctypes/libffi/testsuite/libffi.call/cls_align_uint64.c ============================================================================== --- python/trunk/Modules/_ctypes/libffi/testsuite/libffi.call/cls_align_uint64.c (original) +++ python/trunk/Modules/_ctypes/libffi/testsuite/libffi.call/cls_align_uint64.c Fri Mar 19 19:59:20 2010 @@ -6,6 +6,7 @@ /* { dg-do run } */ +/* { dg-options "-Wno-format" { target alpha*-dec-osf* } } */ #include "ffitest.h" typedef struct cls_struct_align { Modified: python/trunk/Modules/_ctypes/libffi/testsuite/libffi.call/cls_longdouble.c ============================================================================== --- python/trunk/Modules/_ctypes/libffi/testsuite/libffi.call/cls_longdouble.c (original) +++ python/trunk/Modules/_ctypes/libffi/testsuite/libffi.call/cls_longdouble.c Fri Mar 19 19:59:20 2010 @@ -5,7 +5,7 @@ Originator: Blake Chaffin */ /* { dg-excess-errors "no long double format" { xfail x86_64-*-mingw* x86_64-*-cygwin* } } */ -/* { dg-do run { xfail strongarm*-*-* xscale*-*-* } } */ +/* { dg-do run { xfail arm*-*-* strongarm*-*-* xscale*-*-* } } */ /* { dg-options -mlong-double-128 { target powerpc64*-*-* } } */ /* { dg-output "" { xfail x86_64-*-mingw* x86_64-*-cygwin* } } */ Modified: python/trunk/Modules/_ctypes/libffi/testsuite/libffi.call/cls_ulonglong.c ============================================================================== --- python/trunk/Modules/_ctypes/libffi/testsuite/libffi.call/cls_ulonglong.c (original) +++ python/trunk/Modules/_ctypes/libffi/testsuite/libffi.call/cls_ulonglong.c Fri Mar 19 19:59:20 2010 @@ -5,6 +5,7 @@ Originator: 20030828 */ /* { dg-do run } */ +/* { dg-options "-Wno-format" { target alpha*-dec-osf* } } */ #include "ffitest.h" static void cls_ret_ulonglong_fn(ffi_cif* cif __UNUSED__, void* resp, Modified: python/trunk/Modules/_ctypes/libffi/testsuite/libffi.call/ffitest.h ============================================================================== --- python/trunk/Modules/_ctypes/libffi/testsuite/libffi.call/ffitest.h (original) +++ python/trunk/Modules/_ctypes/libffi/testsuite/libffi.call/ffitest.h Fri Mar 19 19:59:20 2010 @@ -60,6 +60,18 @@ #define PRIuLL "llu" #endif +/* Tru64 UNIX kludge. */ +#if defined(__alpha__) && defined(__osf__) +/* Tru64 UNIX V4.0 doesn't support %lld/%lld, but long is 64-bit. */ +#undef PRIdLL +#define PRIdLL "ld" +#undef PRIuLL +#define PRIuLL "lu" +#define PRId64 "ld" +#define PRIu64 "lu" +#define PRIuPTR "lu" +#endif + /* PA HP-UX kludge. */ #if defined(__hppa__) && defined(__hpux__) && !defined(PRIuPTR) #define PRIuPTR "lu" Modified: python/trunk/Modules/_ctypes/libffi/testsuite/libffi.call/return_ll1.c ============================================================================== --- python/trunk/Modules/_ctypes/libffi/testsuite/libffi.call/return_ll1.c (original) +++ python/trunk/Modules/_ctypes/libffi/testsuite/libffi.call/return_ll1.c Fri Mar 19 19:59:20 2010 @@ -5,6 +5,7 @@ Originator: 20050222 */ /* { dg-do run } */ +/* { dg-options "-Wno-format" { target alpha*-dec-osf* } } */ #include "ffitest.h" static long long return_ll(int ll0, long long ll1, int ll2) { Modified: python/trunk/Modules/_ctypes/libffi/testsuite/libffi.call/stret_medium2.c ============================================================================== --- python/trunk/Modules/_ctypes/libffi/testsuite/libffi.call/stret_medium2.c (original) +++ python/trunk/Modules/_ctypes/libffi/testsuite/libffi.call/stret_medium2.c Fri Mar 19 19:59:20 2010 @@ -7,6 +7,7 @@ Originator: Blake Chaffin 6/21/2007 */ /* { dg-do run { xfail strongarm*-*-* xscale*-*-* } } */ +/* { dg-options "-Wno-format" { target alpha*-dec-osf* } } */ #include "ffitest.h" typedef struct struct_72byte { Modified: python/trunk/Modules/_ctypes/libffi/testsuite/libffi.special/ffitestcxx.h ============================================================================== --- python/trunk/Modules/_ctypes/libffi/testsuite/libffi.special/ffitestcxx.h (original) +++ python/trunk/Modules/_ctypes/libffi/testsuite/libffi.special/ffitestcxx.h Fri Mar 19 19:59:20 2010 @@ -84,7 +84,7 @@ MAP_PRIVATE, dev_zero_fd, 0); #endif - if (page == MAP_FAILED) + if (page == (char *) MAP_FAILED) { perror ("virtual memory exhausted"); exit (1); From python-checkins at python.org Fri Mar 19 20:00:44 2010 From: python-checkins at python.org (florent.xicluna) Date: Fri, 19 Mar 2010 20:00:44 +0100 (CET) Subject: [Python-checkins] r79102 - in python/branches/py3k: Lib/test/test_bytes.py Lib/test/test_grammar.py Lib/test/test_httpservers.py Lib/test/test_index.py Lib/test/test_minidom.py Lib/test/test_profilehooks.py Lib/test/test_scope.py Lib/test/test_urllib2_localnet.py Message-ID: <20100319190044.D2E48FBC6@mail.python.org> Author: florent.xicluna Date: Fri Mar 19 20:00:44 2010 New Revision: 79102 Log: Merged revisions 79100 via svnmerge from svn+ssh://pythondev at svn.python.org/python/trunk ........ r79100 | florent.xicluna | 2010-03-19 19:34:55 +0100 (ven, 19 mar 2010) | 2 lines Various tests cleanup: check_warnings/check_py3k_warnings, unittest.assert* and setUp/tearDown. ........ Modified: python/branches/py3k/ (props changed) python/branches/py3k/Lib/test/test_bytes.py python/branches/py3k/Lib/test/test_grammar.py python/branches/py3k/Lib/test/test_httpservers.py python/branches/py3k/Lib/test/test_index.py python/branches/py3k/Lib/test/test_minidom.py python/branches/py3k/Lib/test/test_profilehooks.py python/branches/py3k/Lib/test/test_scope.py python/branches/py3k/Lib/test/test_urllib2_localnet.py Modified: python/branches/py3k/Lib/test/test_bytes.py ============================================================================== --- python/branches/py3k/Lib/test/test_bytes.py (original) +++ python/branches/py3k/Lib/test/test_bytes.py Fri Mar 19 20:00:44 2010 @@ -876,9 +876,9 @@ self.assertEqual(bytes(b"abc") <= b"ab", False) def test_doc(self): - self.assertTrue(bytearray.__doc__ != None) + self.assertIsNotNone(bytearray.__doc__) self.assertTrue(bytearray.__doc__.startswith("bytearray("), bytearray.__doc__) - self.assertTrue(bytes.__doc__ != None) + self.assertIsNotNone(bytes.__doc__) self.assertTrue(bytes.__doc__.startswith("bytes("), bytes.__doc__) def test_from_bytearray(self): Modified: python/branches/py3k/Lib/test/test_grammar.py ============================================================================== --- python/branches/py3k/Lib/test/test_grammar.py (original) +++ python/branches/py3k/Lib/test/test_grammar.py Fri Mar 19 20:00:44 2010 @@ -1,42 +1,36 @@ # Python test set -- part 1, grammar. # This just tests whether the parser accepts them all. -# NOTE: When you run this test as a script from the command line, you -# get warnings about certain hex/oct constants. Since those are -# issued by the parser, you can't suppress them by adding a -# filterwarnings() call to this module. Therefore, to shut up the -# regression test, the filterwarnings() call has been added to -# regrtest.py. - from test.support import run_unittest, check_syntax_error import unittest import sys # testing import * from sys import * + class TokenTests(unittest.TestCase): def testBackslash(self): # Backslash means line continuation: x = 1 \ + 1 - self.assertEquals(x, 2, 'backslash for line continuation') + self.assertEqual(x, 2, 'backslash for line continuation') # Backslash does not means continuation in comments :\ x = 0 - self.assertEquals(x, 0, 'backslash ending comment') + self.assertEqual(x, 0, 'backslash ending comment') def testPlainIntegers(self): - self.assertEquals(type(000), type(0)) - self.assertEquals(0xff, 255) - self.assertEquals(0o377, 255) - self.assertEquals(2147483647, 0o17777777777) - self.assertEquals(0b1001, 9) + self.assertEqual(type(000), type(0)) + self.assertEqual(0xff, 255) + self.assertEqual(0o377, 255) + self.assertEqual(2147483647, 0o17777777777) + self.assertEqual(0b1001, 9) # "0x" is not a valid literal self.assertRaises(SyntaxError, eval, "0x") from sys import maxsize if maxsize == 2147483647: - self.assertEquals(-2147483647-1, -0o20000000000) + self.assertEqual(-2147483647-1, -0o20000000000) # XXX -2147483648 self.assertTrue(0o37777777777 > 0) self.assertTrue(0xffffffff > 0) @@ -48,7 +42,7 @@ except OverflowError: self.fail("OverflowError on huge integer literal %r" % s) elif maxsize == 9223372036854775807: - self.assertEquals(-9223372036854775807-1, -0o1000000000000000000000) + self.assertEqual(-9223372036854775807-1, -0o1000000000000000000000) self.assertTrue(0o1777777777777777777777 > 0) self.assertTrue(0xffffffffffffffff > 0) self.assertTrue(0b11111111111111111111111111111111111111111111111111111111111111 > 0) @@ -103,28 +97,28 @@ the 'lazy' dog. """ y = '\nThe "quick"\nbrown fox\njumps over\nthe \'lazy\' dog.\n' - self.assertEquals(x, y) + self.assertEqual(x, y) y = ''' The "quick" brown fox jumps over the 'lazy' dog. ''' - self.assertEquals(x, y) + self.assertEqual(x, y) y = "\n\ The \"quick\"\n\ brown fox\n\ jumps over\n\ the 'lazy' dog.\n\ " - self.assertEquals(x, y) + self.assertEqual(x, y) y = '\n\ The \"quick\"\n\ brown fox\n\ jumps over\n\ the \'lazy\' dog.\n\ ' - self.assertEquals(x, y) + self.assertEqual(x, y) def testEllipsis(self): x = ... @@ -165,8 +159,8 @@ f1(*(), **{}) def f2(one_argument): pass def f3(two, arguments): pass - self.assertEquals(f2.__code__.co_varnames, ('one_argument',)) - self.assertEquals(f3.__code__.co_varnames, ('two', 'arguments')) + self.assertEqual(f2.__code__.co_varnames, ('one_argument',)) + self.assertEqual(f3.__code__.co_varnames, ('two', 'arguments')) def a1(one_arg,): pass def a2(two, args,): pass def v0(*rest): pass @@ -287,37 +281,37 @@ # keyword arguments after *arglist def f(*args, **kwargs): return args, kwargs - self.assertEquals(f(1, x=2, *[3, 4], y=5), ((1, 3, 4), + self.assertEqual(f(1, x=2, *[3, 4], y=5), ((1, 3, 4), {'x':2, 'y':5})) self.assertRaises(SyntaxError, eval, "f(1, *(2,3), 4)") self.assertRaises(SyntaxError, eval, "f(1, x=2, *(3,4), x=5)") # argument annotation tests def f(x) -> list: pass - self.assertEquals(f.__annotations__, {'return': list}) + self.assertEqual(f.__annotations__, {'return': list}) def f(x:int): pass - self.assertEquals(f.__annotations__, {'x': int}) + self.assertEqual(f.__annotations__, {'x': int}) def f(*x:str): pass - self.assertEquals(f.__annotations__, {'x': str}) + self.assertEqual(f.__annotations__, {'x': str}) def f(**x:float): pass - self.assertEquals(f.__annotations__, {'x': float}) + self.assertEqual(f.__annotations__, {'x': float}) def f(x, y:1+2): pass - self.assertEquals(f.__annotations__, {'y': 3}) + self.assertEqual(f.__annotations__, {'y': 3}) def f(a, b:1, c:2, d): pass - self.assertEquals(f.__annotations__, {'b': 1, 'c': 2}) + self.assertEqual(f.__annotations__, {'b': 1, 'c': 2}) def f(a, b:1, c:2, d, e:3=4, f=5, *g:6): pass - self.assertEquals(f.__annotations__, + self.assertEqual(f.__annotations__, {'b': 1, 'c': 2, 'e': 3, 'g': 6}) def f(a, b:1, c:2, d, e:3=4, f=5, *g:6, h:7, i=8, j:9=10, **k:11) -> 12: pass - self.assertEquals(f.__annotations__, + self.assertEqual(f.__annotations__, {'b': 1, 'c': 2, 'e': 3, 'g': 6, 'h': 7, 'j': 9, 'k': 11, 'return': 12}) # Check for SF Bug #1697248 - mixing decorators and a return annotation def null(x): return x @null def f(x) -> list: pass - self.assertEquals(f.__annotations__, {'return': list}) + self.assertEqual(f.__annotations__, {'return': list}) # test MAKE_CLOSURE with a variety of oparg's closure = 1 @@ -333,20 +327,20 @@ def testLambdef(self): ### lambdef: 'lambda' [varargslist] ':' test l1 = lambda : 0 - self.assertEquals(l1(), 0) + self.assertEqual(l1(), 0) l2 = lambda : a[d] # XXX just testing the expression l3 = lambda : [2 < x for x in [-1, 3, 0]] - self.assertEquals(l3(), [0, 1, 0]) + self.assertEqual(l3(), [0, 1, 0]) l4 = lambda x = lambda y = lambda z=1 : z : y() : x() - self.assertEquals(l4(), 1) + self.assertEqual(l4(), 1) l5 = lambda x, y, z=2: x + y + z - self.assertEquals(l5(1, 2), 5) - self.assertEquals(l5(1, 2, 3), 6) + self.assertEqual(l5(1, 2), 5) + self.assertEqual(l5(1, 2, 3), 6) check_syntax_error(self, "lambda x: x = 2") check_syntax_error(self, "lambda (None,): None") l6 = lambda x, y, *, k=20: x+y+k - self.assertEquals(l6(1,2), 1+2+20) - self.assertEquals(l6(1,2,k=10), 1+2+10) + self.assertEqual(l6(1,2), 1+2+20) + self.assertEqual(l6(1,2,k=10), 1+2+10) ### stmt: simple_stmt | compound_stmt @@ -502,7 +496,7 @@ try: assert 0, "msg" except AssertionError as e: - self.assertEquals(e.args[0], "msg") + self.assertEqual(e.args[0], "msg") else: if __debug__: self.fail("AssertionError not raised by assert 0") @@ -536,7 +530,7 @@ x = 1 else: x = 2 - self.assertEquals(x, 2) + self.assertEqual(x, 2) def testFor(self): # 'for' exprlist 'in' exprlist ':' suite ['else' ':' suite] @@ -688,7 +682,7 @@ d[1,2,3] = 4 L = list(d) L.sort(key=lambda x: x if isinstance(x, tuple) else ()) - self.assertEquals(str(L), '[1, (1,), (1, 2), (1, 2, 3)]') + self.assertEqual(str(L), '[1, (1,), (1, 2), (1, 2, 3)]') def testAtoms(self): ### atom: '(' [testlist] ')' | '[' [testlist] ']' | '{' [dictsetmaker] '}' | NAME | NUMBER | STRING Modified: python/branches/py3k/Lib/test/test_httpservers.py ============================================================================== --- python/branches/py3k/Lib/test/test_httpservers.py (original) +++ python/branches/py3k/Lib/test/test_httpservers.py Fri Mar 19 20:00:44 2010 @@ -104,42 +104,42 @@ def test_command(self): self.con.request('GET', '/') res = self.con.getresponse() - self.assertEquals(res.status, 501) + self.assertEqual(res.status, 501) def test_request_line_trimming(self): self.con._http_vsn_str = 'HTTP/1.1\n' self.con.putrequest('GET', '/') self.con.endheaders() res = self.con.getresponse() - self.assertEquals(res.status, 501) + self.assertEqual(res.status, 501) def test_version_bogus(self): self.con._http_vsn_str = 'FUBAR' self.con.putrequest('GET', '/') self.con.endheaders() res = self.con.getresponse() - self.assertEquals(res.status, 400) + self.assertEqual(res.status, 400) def test_version_digits(self): self.con._http_vsn_str = 'HTTP/9.9.9' self.con.putrequest('GET', '/') self.con.endheaders() res = self.con.getresponse() - self.assertEquals(res.status, 400) + self.assertEqual(res.status, 400) def test_version_none_get(self): self.con._http_vsn_str = '' self.con.putrequest('GET', '/') self.con.endheaders() res = self.con.getresponse() - self.assertEquals(res.status, 501) + self.assertEqual(res.status, 501) def test_version_none(self): self.con._http_vsn_str = '' self.con.putrequest('PUT', '/') self.con.endheaders() res = self.con.getresponse() - self.assertEquals(res.status, 400) + self.assertEqual(res.status, 400) def test_version_invalid(self): self.con._http_vsn = 99 @@ -147,21 +147,21 @@ self.con.putrequest('GET', '/') self.con.endheaders() res = self.con.getresponse() - self.assertEquals(res.status, 505) + self.assertEqual(res.status, 505) def test_send_blank(self): self.con._http_vsn_str = '' self.con.putrequest('', '') self.con.endheaders() res = self.con.getresponse() - self.assertEquals(res.status, 400) + self.assertEqual(res.status, 400) def test_header_close(self): self.con.putrequest('GET', '/') self.con.putheader('Connection', 'close') self.con.endheaders() res = self.con.getresponse() - self.assertEquals(res.status, 501) + self.assertEqual(res.status, 501) def test_head_keep_alive(self): self.con._http_vsn_str = 'HTTP/1.1' @@ -169,28 +169,28 @@ self.con.putheader('Connection', 'keep-alive') self.con.endheaders() res = self.con.getresponse() - self.assertEquals(res.status, 501) + self.assertEqual(res.status, 501) def test_handler(self): self.con.request('TEST', '/') res = self.con.getresponse() - self.assertEquals(res.status, 204) + self.assertEqual(res.status, 204) def test_return_header_keep_alive(self): self.con.request('KEEP', '/') res = self.con.getresponse() - self.assertEquals(res.getheader('Connection'), 'keep-alive') + self.assertEqual(res.getheader('Connection'), 'keep-alive') self.con.request('TEST', '/') def test_internal_key_error(self): self.con.request('KEYERROR', '/') res = self.con.getresponse() - self.assertEquals(res.status, 999) + self.assertEqual(res.status, 999) def test_return_custom_status(self): self.con.request('CUSTOM', '/') res = self.con.getresponse() - self.assertEquals(res.status, 999) + self.assertEqual(res.status, 999) class SimpleHTTPServerTestCase(BaseTestCase): @@ -222,8 +222,8 @@ def check_status_and_reason(self, response, status, data=None): body = response.read() self.assertTrue(response) - self.assertEquals(response.status, status) - self.assertTrue(response.reason != None) + self.assertEqual(response.status, status) + self.assertIsNotNone(response.reason) if data: self.assertEqual(data, body) @@ -284,8 +284,8 @@ print() form = cgi.FieldStorage() -print("%%s, %%s, %%s" %% (form.getfirst("spam"), form.getfirst("eggs"),\ - form.getfirst("bacon"))) +print("%%s, %%s, %%s" %% (form.getfirst("spam"), form.getfirst("eggs"), + form.getfirst("bacon"))) """ class CGIHTTPServerTestCase(BaseTestCase): @@ -356,14 +356,14 @@ server._url_collapse_path_split, path) else: actual = server._url_collapse_path_split(path) - self.assertEquals(expected, actual, - msg='path = %r\nGot: %r\nWanted: %r' % ( - path, actual, expected)) + self.assertEqual(expected, actual, + msg='path = %r\nGot: %r\nWanted: %r' % + (path, actual, expected)) def test_headers_and_content(self): res = self.request('/cgi-bin/file1.py') - self.assertEquals((b'Hello World\n', 'text/html', 200), \ - (res.read(), res.getheader('Content-type'), res.status)) + self.assertEqual((b'Hello World\n', 'text/html', 200), + (res.read(), res.getheader('Content-type'), res.status)) def test_post(self): params = urllib.parse.urlencode( @@ -371,24 +371,24 @@ headers = {'Content-type' : 'application/x-www-form-urlencoded'} res = self.request('/cgi-bin/file2.py', 'POST', params, headers) - self.assertEquals(res.read(), b'1, python, 123456\n') + self.assertEqual(res.read(), b'1, python, 123456\n') def test_invaliduri(self): res = self.request('/cgi-bin/invalid') res.read() - self.assertEquals(res.status, 404) + self.assertEqual(res.status, 404) def test_authorization(self): headers = {b'Authorization' : b'Basic ' + base64.b64encode(b'username:pass')} res = self.request('/cgi-bin/file1.py', 'GET', headers=headers) - self.assertEquals((b'Hello World\n', 'text/html', 200), \ - (res.read(), res.getheader('Content-type'), res.status)) + self.assertEqual((b'Hello World\n', 'text/html', 200), + (res.read(), res.getheader('Content-type'), res.status)) def test_no_leading_slash(self): # http://bugs.python.org/issue2254 res = self.request('cgi-bin/file1.py') - self.assertEquals((b'Hello World\n', 'text/html', 200), + self.assertEqual((b'Hello World\n', 'text/html', 200), (res.read(), res.getheader('Content-type'), res.status)) Modified: python/branches/py3k/Lib/test/test_index.py ============================================================================== --- python/branches/py3k/Lib/test/test_index.py (original) +++ python/branches/py3k/Lib/test/test_index.py Fri Mar 19 20:00:44 2010 @@ -154,7 +154,7 @@ lst = [5, 6, 7, 8, 9, 11] l2 = lst.__imul__(self.n) - self.assertTrue(l2 is lst) + self.assertIs(l2, lst) self.assertEqual(lst, [5, 6, 7, 8, 9, 11] * 3) Modified: python/branches/py3k/Lib/test/test_minidom.py ============================================================================== --- python/branches/py3k/Lib/test/test_minidom.py (original) +++ python/branches/py3k/Lib/test/test_minidom.py Fri Mar 19 20:00:44 2010 @@ -949,7 +949,7 @@ node = doc.documentElement node.childNodes[1].nodeValue = "" node.normalize() - self.confirm(node.childNodes[-1].nextSibling == None, + self.confirm(node.childNodes[-1].nextSibling is None, "Final child's .nextSibling should be None") def testSiblings(self): Modified: python/branches/py3k/Lib/test/test_profilehooks.py ============================================================================== --- python/branches/py3k/Lib/test/test_profilehooks.py (original) +++ python/branches/py3k/Lib/test/test_profilehooks.py Fri Mar 19 20:00:44 2010 @@ -12,7 +12,7 @@ sys.setprofile(None) def test_empty(self): - assert sys.getprofile() == None + assert sys.getprofile() is None def test_setget(self): def fn(*args): Modified: python/branches/py3k/Lib/test/test_scope.py ============================================================================== --- python/branches/py3k/Lib/test/test_scope.py (original) +++ python/branches/py3k/Lib/test/test_scope.py Fri Mar 19 20:00:44 2010 @@ -1,9 +1,6 @@ import unittest from test.support import check_syntax_error, run_unittest -import warnings -warnings.filterwarnings("ignore", r"import \*", SyntaxWarning, "") -warnings.filterwarnings("ignore", r"import \*", SyntaxWarning, "") class ScopeTests(unittest.TestCase): Modified: python/branches/py3k/Lib/test/test_urllib2_localnet.py ============================================================================== --- python/branches/py3k/Lib/test/test_urllib2_localnet.py (original) +++ python/branches/py3k/Lib/test/test_urllib2_localnet.py Fri Mar 19 20:00:44 2010 @@ -223,10 +223,10 @@ class BaseTestCase(unittest.TestCase): def setUp(self): - self._threads = test_support.threading_setup() + self._threads = support.threading_setup() def tearDown(self): - test_support.threading_cleanup(*self._threads) + support.threading_cleanup(*self._threads) class ProxyAuthTests(BaseTestCase): @@ -237,6 +237,7 @@ REALM = "TestRealm" def setUp(self): + super(ProxyAuthTests, self).setUp() self.digest_auth_handler = DigestAuthHandler() self.digest_auth_handler.set_users({self.USER: self.PASSWD}) self.digest_auth_handler.set_realm(self.REALM) @@ -254,6 +255,7 @@ def tearDown(self): self.server.stop() + super(ProxyAuthTests, self).tearDown() def test_proxy_with_bad_password_raises_httperror(self): self.proxy_digest_handler.add_password(self.REALM, self.URL, @@ -347,11 +349,13 @@ """ def setUp(self): + super(TestUrlopen, self).setUp() self.server = None def tearDown(self): if self.server is not None: self.server.stop() + super(TestUrlopen, self).tearDown() def urlopen(self, url, data=None): l = [] From python-checkins at python.org Fri Mar 19 20:02:11 2010 From: python-checkins at python.org (matthias.klose) Date: Fri, 19 Mar 2010 20:02:11 +0100 (CET) Subject: [Python-checkins] r79103 - in python/branches/py3k: Modules/_ctypes/libffi.diff Modules/_ctypes/libffi/ChangeLog Modules/_ctypes/libffi/ChangeLog.libffi Modules/_ctypes/libffi/Makefile.am Modules/_ctypes/libffi/README Modules/_ctypes/libffi/configure Modules/_ctypes/libffi/configure.ac Modules/_ctypes/libffi/doc/libffi.info Modules/_ctypes/libffi/doc/libffi.texi Modules/_ctypes/libffi/doc/stamp-vti Modules/_ctypes/libffi/doc/version.texi Modules/_ctypes/libffi/fficonfig.h.in Modules/_ctypes/libffi/include/ffi.h.in Modules/_ctypes/libffi/msvcc.sh Modules/_ctypes/libffi/src/closures.c Modules/_ctypes/libffi/src/mips/n32.S Modules/_ctypes/libffi/src/moxie Modules/_ctypes/libffi/src/prep_cif.c Modules/_ctypes/libffi/src/x86/ffi.c Modules/_ctypes/libffi/src/x86/ffi64.c Modules/_ctypes/libffi/src/x86/ffitarget.h Modules/_ctypes/libffi/src/x86/win32.S Modules/_ctypes/libffi/testsuite/lib/libffi-dg.exp Modules/_ctypes/libffi/testsuite/libffi.call/cls_align_sint64.c Modules/_ctypes/libffi/testsuite/libffi.call/cls_align_uint64.c Modules/_ctypes/libffi/testsuite/libffi.call/cls_longdouble.c Modules/_ctypes/libffi/testsuite/libffi.call/cls_ulonglong.c Modules/_ctypes/libffi/testsuite/libffi.call/ffitest.h Modules/_ctypes/libffi/testsuite/libffi.call/return_ll1.c Modules/_ctypes/libffi/testsuite/libffi.call/stret_medium2.c Modules/_ctypes/libffi/testsuite/libffi.special/ffitestcxx.h Message-ID: <20100319190211.27BB9FCA2@mail.python.org> Author: matthias.klose Date: Fri Mar 19 20:02:09 2010 New Revision: 79103 Log: Merged revisions 79101 via svnmerge from svn+ssh://pythondev at svn.python.org/python/trunk ........ r79101 | matthias.klose | 2010-03-19 19:59:20 +0100 (Fr, 19 M?r 2010) | 3 lines update libffi to commit 59a259f4d348f593b45f452309f4d020a28051c4 from the trunk (adding msvc port). ........ Added: python/branches/py3k/Modules/_ctypes/libffi/msvcc.sh - copied unchanged from r79101, /python/trunk/Modules/_ctypes/libffi/msvcc.sh python/branches/py3k/Modules/_ctypes/libffi/src/moxie/ - copied from r79101, /python/trunk/Modules/_ctypes/libffi/src/moxie/ Modified: python/branches/py3k/ (props changed) python/branches/py3k/Modules/_ctypes/libffi.diff python/branches/py3k/Modules/_ctypes/libffi/ChangeLog python/branches/py3k/Modules/_ctypes/libffi/ChangeLog.libffi python/branches/py3k/Modules/_ctypes/libffi/Makefile.am python/branches/py3k/Modules/_ctypes/libffi/README python/branches/py3k/Modules/_ctypes/libffi/configure python/branches/py3k/Modules/_ctypes/libffi/configure.ac python/branches/py3k/Modules/_ctypes/libffi/doc/libffi.info python/branches/py3k/Modules/_ctypes/libffi/doc/libffi.texi python/branches/py3k/Modules/_ctypes/libffi/doc/stamp-vti python/branches/py3k/Modules/_ctypes/libffi/doc/version.texi python/branches/py3k/Modules/_ctypes/libffi/fficonfig.h.in python/branches/py3k/Modules/_ctypes/libffi/include/ffi.h.in python/branches/py3k/Modules/_ctypes/libffi/src/closures.c python/branches/py3k/Modules/_ctypes/libffi/src/mips/n32.S python/branches/py3k/Modules/_ctypes/libffi/src/prep_cif.c python/branches/py3k/Modules/_ctypes/libffi/src/x86/ffi.c python/branches/py3k/Modules/_ctypes/libffi/src/x86/ffi64.c python/branches/py3k/Modules/_ctypes/libffi/src/x86/ffitarget.h python/branches/py3k/Modules/_ctypes/libffi/src/x86/win32.S python/branches/py3k/Modules/_ctypes/libffi/testsuite/lib/libffi-dg.exp python/branches/py3k/Modules/_ctypes/libffi/testsuite/libffi.call/cls_align_sint64.c python/branches/py3k/Modules/_ctypes/libffi/testsuite/libffi.call/cls_align_uint64.c python/branches/py3k/Modules/_ctypes/libffi/testsuite/libffi.call/cls_longdouble.c python/branches/py3k/Modules/_ctypes/libffi/testsuite/libffi.call/cls_ulonglong.c python/branches/py3k/Modules/_ctypes/libffi/testsuite/libffi.call/ffitest.h python/branches/py3k/Modules/_ctypes/libffi/testsuite/libffi.call/return_ll1.c python/branches/py3k/Modules/_ctypes/libffi/testsuite/libffi.call/stret_medium2.c python/branches/py3k/Modules/_ctypes/libffi/testsuite/libffi.special/ffitestcxx.h Modified: python/branches/py3k/Modules/_ctypes/libffi.diff ============================================================================== --- python/branches/py3k/Modules/_ctypes/libffi.diff (original) +++ python/branches/py3k/Modules/_ctypes/libffi.diff Fri Mar 19 20:02:09 2010 @@ -111,31 +111,3 @@ +AC_CONFIG_FILES(fficonfig.py) + AC_OUTPUT -diff -urN libffi.orig/src/x86/ffi64.c libffi/src/x86/ffi64.c ---- libffi.orig/src/x86/ffi64.c 2010-03-19 18:27:45.008523897 +0100 -+++ libffi/src/x86/ffi64.c 2010-03-19 18:24:36.437500070 +0100 -@@ -52,7 +52,7 @@ - /* Register class used for passing given 64bit part of the argument. - These represent classes as documented by the PS ABI, with the exception - of SSESF, SSEDF classes, that are basically SSE class, just gcc will -- use SF or DFmode move instead of DImode to avoid reformating penalties. -+ use SF or DFmode move instead of DImode to avoid reformatting penalties. - - Similary we play games with INTEGERSI_CLASS to use cheaper SImode moves - whenever possible (upper half does contain padding). */ -diff -urN libffi.orig/src/x86/ffi.c libffi/src/x86/ffi.c ---- libffi.orig/src/x86/ffi.c 2010-03-19 18:27:45.008523897 +0100 -+++ libffi/src/x86/ffi.c 2010-03-19 18:24:36.441496039 +0100 -@@ -594,10 +594,10 @@ - return FFI_BAD_ABI; - } - -- // we currently don't support certain kinds of arguments for raw -+ /* we currently don't support certain kinds of arguments for raw - // closures. This should be implemented by a separate assembly language - // routine, since it would require argument processing, something we -- // don't do now for performance. -+ // don't do now for performance. */ - - for (i = cif->nargs-1; i >= 0; i--) - { Modified: python/branches/py3k/Modules/_ctypes/libffi/ChangeLog ============================================================================== --- python/branches/py3k/Modules/_ctypes/libffi/ChangeLog (original) +++ python/branches/py3k/Modules/_ctypes/libffi/ChangeLog Fri Mar 19 20:02:09 2010 @@ -1,3 +1,89 @@ +2010-03-14 Matthias Klose + + * src/x86/ffi64.c: Fix typo in comment. + * src/x86/ffi.c: Use /* ... */ comment style. + +2010-01-07 Rainer Orth + + PR libffi/40701 + * testsuite/libffi.call/ffitest.h [__alpha__ && __osf__] (PRIdLL, + PRIuLL, PRId64, PRIu64, PRIuPTR): Define. + * testsuite/libffi.call/cls_align_sint64.c: Add -Wno-format on + alpha*-dec-osf*. + * testsuite/libffi.call/cls_align_uint64.c: Likewise. + * testsuite/libffi.call/cls_ulonglong.c: Likewise. + * testsuite/libffi.call/return_ll1.c: Likewise. + * testsuite/libffi.call/stret_medium2.c: Likewise. + * testsuite/libffi.special/ffitestcxx.h (allocate_mmap): Cast + MAP_FAILED to char *. + +2010-01-06 Rainer Orth + + * src/mips/n32.S: Use .abicalls and .eh_frame with __GNUC__. + +2009-12-31 Anthony Green + + * README: Update for libffi 3.0.9. + +2009-12-27 Matthias Klose + + * configure.ac (HAVE_LONG_DOUBLE): Define for mips when + appropriate. + * configure: Rebuilt. + +2009-12-26 Anthony Green + + * testsuite/libffi.call/cls_longdouble_va.c: Mark as xfail for + avr32*-*-*. + * testsuite/libffi.call/cls_double_va.c: Ditto. + +2009-12-26 Andreas Tobler + + * testsuite/libffi.call/ffitest.h: Conditionally include stdint.h + and inttypes.h. + * testsuite/libffi.special/unwindtest.cc: Ditto. + +2009-12-26 Andreas Tobler + + * configure.ac: Add amd64-*-openbsd*. + * configure: Rebuilt. + * testsuite/lib/libffi-dg.exp (libffi_target_compile): Link + openbsd programs with -lpthread. + +2009-12-26 Anthony Green + + * testsuite/libffi.call/cls_double_va.c, + testsuite/libffi.call/cls_longdouble.c, + testsuite/libffi.call/cls_longdouble_va.c, + testsuite/libffi.call/cls_pointer.c, + testsuite/libffi.call/cls_pointer_stack.c: Remove xfail for + mips*-*-* and arm*-*-*. + * testsuite/libffi.call/cls_align_longdouble_split.c, + testsuite/libffi.call/cls_align_longdouble_split2.c, + testsuite/libffi.call/stret_medium2.c, + testsuite/libffi.call/stret_medium.c, + testsuite/libffi.call/stret_large.c, + testsuite/libffi.call/stret_large2.c: Remove xfail for arm*-*-*. + +2009-12-31 Kay Tietz + + * testsuite/libffi.call/ffitest.h, + testsuite/libffi.special/ffitestcxx.h (PRIdLL, PRuLL): Fix + definitions. + +2009-12-31 Carlo Bramini + + * configure.ac (AM_LTLDFLAGS): Define for windows hosts. + * Makefile.am (libffi_la_LDFLAGS): Add AM_LTLDFLAGS. + * configure: Rebuilt. + * Makefile.in: Rebuilt. + +2009-12-31 Anthony Green + Blake Chaffin. + + * testsuite/libffi.call/huge_struct.c: New test case from Blake + Chaffin @ Apple. + 2009-12-28 David Edelsohn * src/powerpc/ffi_darwin.c (ffi_prep_args): Copy abi and nargs to Modified: python/branches/py3k/Modules/_ctypes/libffi/ChangeLog.libffi ============================================================================== --- python/branches/py3k/Modules/_ctypes/libffi/ChangeLog.libffi (original) +++ python/branches/py3k/Modules/_ctypes/libffi/ChangeLog.libffi Fri Mar 19 20:02:09 2010 @@ -1,56 +1,35 @@ -2009-12-27 Matthias Klose +2010-01-15 Anthony Green - * configure.ac (HAVE_LONG_DOUBLE): Define for mips when - appropriate. - * configure: Rebuilt. - -2009-12-27 Anthony Green + * README: Add notes on building with Microsoft Visual C++. - * testsuite/libffi.call/cls_longdouble.c: Don't xfail for ARM. +2010-01-15 Daniel Witte -2009-12-26 Anthony Green + * msvcc.sh: New file. - * testsuite/libffi.call/huge_struct.c: Don't xfail for avr32*-*-*. - * testsuite/libffi.call/cls_longdouble_va.c: Mark as xfail for - avr32*-*-*. - * testsuite/libffi.call/cls_double_va.c: Ditto. + * src/x86/win32.S: Port assembly routines to MSVC and #ifdef. + * src/x86/ffi.c: Tweak function declaration and remove excess + parens. + * include/ffi.h.in: Add __declspec(align(8)) to typedef struct + ffi_closure. -2009-12-26 Andreas Tobler + * src/x86/ffi.c: Merge ffi_call_SYSV and ffi_call_STDCALL into new + function ffi_call_win32 on X86_WIN32. + * src/x86/win32.S (ffi_call_SYSV): Rename to ffi_call_win32. + (ffi_call_STDCALL): Remove. - * testsuite/libffi.call/ffitest.h: Conditionally include stdint.h - and inttypes.h. - * testsuite/libffi.special/unwindtest.cc: Ditto. - * testsuite/libffi.call/huge_struct.c: Don't include stdint.h - directly. + * src/prep_cif.c (ffi_prep_cif): Move stack space allocation code + to ffi_prep_cif_machdep for x86. + * src/x86/ffi.c (ffi_prep_cif_machdep): To here. -2009-12-26 Andreas Tobler +2010-01-15 Oliver Kiddle - * configure.ac: Add amd64-*-openbsd*. - * configure: Rebuilt. - * testsuite/lib/libffi-dg.exp (libffi_target_compile): Link - openbsd programs with -lpthread. + * src/x86/ffitarget.h (ffi_abi): Check for __i386 and __amd64 for + Sun Studio compiler compatibility. -2009-12-26 Anthony Green +2010-01-12 Conrad Irwin - * testsuite/libffi.call/cls_double_va.c, - testsuite/libffi.call/cls_longdouble.c, - testsuite/libffi.call/cls_longdouble_va.c, - testsuite/libffi.call/cls_pointer.c, - testsuite/libffi.call/cls_pointer_stack.c: Remove xfail for - mips*-*-* and arm*-*-*. - * testsuite/libffi.call/cls_align_longdouble_split.c, - testsuite/libffi.call/cls_align_longdouble_split2.c, - testsuite/libffi.call/stret_medium2.c, - testsuite/libffi.call/stret_medium.c, - testsuite/libffi.call/stret_large.c, - testsuite/libffi.call/stret_large2.c: Remove xfail for arm*-*-*. - -2009-12-26 Andreas Tobler - Anthony Green - - * testsuite/libffi.call/huge_struct.c (test_large_fn): Replace - format code %p with %#lx because %p does not add a leading 0x on - Solaris. Also change relevant arguments to unsigned long. + * doc/libffi.texi: Add closure example. + * doc/libffi.info: Rebuilt. 2009-12-25 Samuli Suominen @@ -58,30 +37,6 @@ * configure: Rebuilt. * fficonfig.h.in: Rebuilt. -2009-12-29 Kay Tietz - - * testsuite/libffi.call/ffitest.h, - testsuite/libffi.special/ffitestcxx.h (PRIdLL, PRuLL): Fix - definitions. - -2009-12-25 Carlo Bramini - - * configure.ac (AM_LTLDFLAGS): Define for windows hosts. - * Makefile.am (libffi_la_LDFLAGS): Add AM_LTLDFLAGS. - * configure: Rebuilt. - * Makefile.in: Rebuilt. - -2009-12-24 Anthony Green - - * testsuite/libffi.call/huge_struct.c: Fix printf format, and - don't xfail x86 Linux. - * testsuite/libffi.call/huge_struct.c: Don't xfail mips. - * testsuite/libffi.call/cls_pointer.c: Ditto. - * testsuite/libffi.call/cls_pointer_stack.c: Ditto. - * testsuite/libffi.call/cls_longdouble_va.c: Ditto. - * testsuite/libffi.call/cls_longdouble.c: Ditto. - * testsuite/libffi.call/cls_double_va.c: Ditto. - 2009-06-16 Andrew Haley * testsuite/libffi.call/cls_align_sint64.c, @@ -257,20 +212,20 @@ 2008-12-22 Timothy Wall * testsuite/libffi.call/closure_fn0.c, - testsuite/libffi.call/closure_fn1.c, - testsuite/libffi.call/closure_fn2.c, - testsuite/libffi.call/closure_fn3.c, - testsuite/libffi.call/closure_fn4.c, - testsuite/libffi.call/closure_fn5.c, - testsuite/libffi.call/closure_fn6.c, - testsuite/libffi.call/closure_loc_fn0.c, - testsuite/libffi.call/closure_stdcall.c, - testsuite/libffi.call/cls_align_pointer.c, - testsuite/libffi.call/cls_pointer.c, + testsuite/libffi.call/closure_fn1.c, + testsuite/libffi.call/closure_fn2.c, + testsuite/libffi.call/closure_fn3.c, + testsuite/libffi.call/closure_fn4.c, + testsuite/libffi.call/closure_fn5.c, + testsuite/libffi.call/closure_fn6.c, + testsuite/libffi.call/closure_loc_fn0.c, + testsuite/libffi.call/closure_stdcall.c, + testsuite/libffi.call/cls_align_pointer.c, + testsuite/libffi.call/cls_pointer.c, testsuite/libffi.call/cls_pointer_stack.c: use portable cast from pointer to integer (intptr_t). * testsuite/libffi.call/cls_longdouble.c: disable for win64. - + 2008-12-19 Anthony Green * configure.ac: Bump version to 3.0.8. Modified: python/branches/py3k/Modules/_ctypes/libffi/Makefile.am ============================================================================== --- python/branches/py3k/Modules/_ctypes/libffi/Makefile.am (original) +++ python/branches/py3k/Modules/_ctypes/libffi/Makefile.am Fri Mar 19 20:02:09 2010 @@ -175,7 +175,7 @@ AM_CFLAGS = -Wall -g -fexceptions -libffi_la_LDFLAGS = -version-info `grep -v '^\#' $(srcdir)/libtool-version` $(AM_LTLDFLAGS) +libffi_la_LDFLAGS = -version-info `grep -v '^\#' $(srcdir)/libtool-version` $(LTLDFLAGS) $(AM_LTLDFLAGS) AM_CPPFLAGS = -I. -I$(top_srcdir)/include -Iinclude -I$(top_srcdir)/src AM_CCASFLAGS = $(AM_CPPFLAGS) @@ -184,4 +184,3 @@ .PHONY: install-html install-pdf install-html: install-pdf: - Modified: python/branches/py3k/Modules/_ctypes/libffi/README ============================================================================== --- python/branches/py3k/Modules/_ctypes/libffi/README (original) +++ python/branches/py3k/Modules/_ctypes/libffi/README Fri Mar 19 20:02:09 2010 @@ -1,7 +1,7 @@ Status ====== -libffi-3.0.9 was released on December 31, 2009. Check the libffi web +libffi-3.0.10 was released on XXXXXXXXXX, 2010. Check the libffi web page for updates: . @@ -43,7 +43,7 @@ For specific configuration details and testing status, please refer to the wiki page here: - http://www.moxielogic.org/wiki/index.php?title=Libffi_3.0.9 + http://www.moxielogic.org/wiki/index.php?title=Libffi_3.0.10 At the time of release, the following basic configurations have been tested: @@ -52,6 +52,7 @@ | Architecture | Operating System | |--------------+------------------| | Alpha | Linux | +| Alpha | Tru64 | | ARM | Linux | | AVR32 | Linux | | HPPA | HPUX | @@ -80,6 +81,7 @@ | X86-64 | FreeBSD | | X86-64 | Linux | | X86-64 | OpenBSD | +| X86-64 | Windows/MingW | |--------------+------------------| Please send additional platform test results to @@ -107,6 +109,14 @@ are using Purify with libffi. Only use this switch when using Purify, as it will slow down the library. +It's also possible to build libffi on Windows platforms with +Microsoft's Visual C++ compiler. In this case, use the msvcc.sh +wrapper script during configuration like so: + +path/to/configure --enable-shared --enable-static \ + CC=path/to/msvcc.sh LD=link \ + CPP=\"cl -nologo -EP\" + Configure has many other options. Use "configure --help" to see them all. Once configure has finished, type "make". Note that you must be using @@ -123,6 +133,12 @@ See the ChangeLog files for details. +3.0.10 ???-??-?? + Fix the N64 build on mips-sgi-irix6.5. + Testsuite fixes for Tru64 Unix. + Enable builds with Microsoft's compiler. + Enable x86 builds with Sun's compiler. + 3.0.9 Dec-31-09 Add AVR32 and win64 ports. Add ARM softfp support. Many fixes for AIX, Solaris, HP-UX, *BSD. Modified: python/branches/py3k/Modules/_ctypes/libffi/configure ============================================================================== --- python/branches/py3k/Modules/_ctypes/libffi/configure (original) +++ python/branches/py3k/Modules/_ctypes/libffi/configure Fri Mar 19 20:02:09 2010 @@ -1,6 +1,6 @@ #! /bin/sh # Guess values for system-dependent variables and create Makefiles. -# Generated by GNU Autoconf 2.65 for libffi 3.0.9. +# Generated by GNU Autoconf 2.65 for libffi 3.0.10rc0. # # Report bugs to . # @@ -701,8 +701,8 @@ # Identity of this package. PACKAGE_NAME='libffi' PACKAGE_TARNAME='libffi' -PACKAGE_VERSION='3.0.9' -PACKAGE_STRING='libffi 3.0.9' +PACKAGE_VERSION='3.0.10rc0' +PACKAGE_STRING='libffi 3.0.10rc0' PACKAGE_BUGREPORT='http://gcc.gnu.org/bugs.html' PACKAGE_URL='' @@ -1489,7 +1489,7 @@ # Omit some internal or obsolete options to make the list less imposing. # This message is too long to be a string in the A/UX 3.1 sh. cat <<_ACEOF -\`configure' configures libffi 3.0.9 to adapt to many kinds of systems. +\`configure' configures libffi 3.0.10rc0 to adapt to many kinds of systems. Usage: $0 [OPTION]... [VAR=VALUE]... @@ -1560,7 +1560,7 @@ if test -n "$ac_init_help"; then case $ac_init_help in - short | recursive ) echo "Configuration of libffi 3.0.9:";; + short | recursive ) echo "Configuration of libffi 3.0.10rc0:";; esac cat <<\_ACEOF @@ -1667,7 +1667,7 @@ test -n "$ac_init_help" && exit $ac_status if $ac_init_version; then cat <<\_ACEOF -libffi configure 3.0.9 +libffi configure 3.0.10rc0 generated by GNU Autoconf 2.65 Copyright (C) 2009 Free Software Foundation, Inc. @@ -2216,7 +2216,7 @@ This file contains any messages produced by compilers while running configure, to aid debugging if configure makes a mistake. -It was created by libffi $as_me 3.0.9, which was +It was created by libffi $as_me 3.0.10rc0, which was generated by GNU Autoconf 2.65. Invocation command line was $ $0 $@ @@ -3142,7 +3142,7 @@ # Define the identity of the package. PACKAGE='libffi' - VERSION='3.0.9' + VERSION='3.0.10rc0' cat >>confdefs.h <<_ACEOF @@ -11192,6 +11192,10 @@ TARGET=X86_64; TARGETDIR=x86 ;; + amd64-*-freebsd*) + TARGET=X86_64; TARGETDIR=x86 + ;; + avr32*-*-*) TARGET=AVR32; TARGETDIR=avr32 ;; @@ -13069,7 +13073,7 @@ # report actual input values of CONFIG_FILES etc. instead of their # values after options handling. ac_log=" -This file was extended by libffi $as_me 3.0.9, which was +This file was extended by libffi $as_me 3.0.10rc0, which was generated by GNU Autoconf 2.65. Invocation command line was CONFIG_FILES = $CONFIG_FILES @@ -13139,7 +13143,7 @@ cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`" ac_cs_version="\\ -libffi config.status 3.0.9 +libffi config.status 3.0.10rc0 configured by $0, generated by GNU Autoconf 2.65, with options \\"\$ac_cs_config\\" Modified: python/branches/py3k/Modules/_ctypes/libffi/configure.ac ============================================================================== --- python/branches/py3k/Modules/_ctypes/libffi/configure.ac (original) +++ python/branches/py3k/Modules/_ctypes/libffi/configure.ac Fri Mar 19 20:02:09 2010 @@ -5,7 +5,7 @@ AC_PREREQ(2.63) -AC_INIT([libffi], [3.0.9], [http://gcc.gnu.org/bugs.html]) +AC_INIT([libffi], [3.0.10rc0], [http://gcc.gnu.org/bugs.html]) AC_CONFIG_HEADERS([fficonfig.h]) AC_CANONICAL_SYSTEM @@ -58,6 +58,10 @@ TARGET=X86_64; TARGETDIR=x86 ;; + amd64-*-freebsd*) + TARGET=X86_64; TARGETDIR=x86 + ;; + avr32*-*-*) TARGET=AVR32; TARGETDIR=avr32 ;; Modified: python/branches/py3k/Modules/_ctypes/libffi/doc/libffi.info ============================================================================== --- python/branches/py3k/Modules/_ctypes/libffi/doc/libffi.info (original) +++ python/branches/py3k/Modules/_ctypes/libffi/doc/libffi.info Fri Mar 19 20:02:09 2010 @@ -4,7 +4,7 @@ This manual is for Libffi, a portable foreign-function interface library. - Copyright (C) 2008 Red Hat, Inc. + Copyright (C) 2008, 2010 Red Hat, Inc. Permission is granted to copy, distribute and/or modify this document under the terms of the GNU General Public License as @@ -27,7 +27,7 @@ This manual is for Libffi, a portable foreign-function interface library. - Copyright (C) 2008 Red Hat, Inc. + Copyright (C) 2008, 2010 Red Hat, Inc. Permission is granted to copy, distribute and/or modify this document under the terms of the GNU General Public License as @@ -89,6 +89,7 @@ * Types:: libffi type descriptions. * Multiple ABIs:: Different passing styles on one platform. * The Closure API:: Writing a generic function. +* Closure Example:: A closure example.  File: libffi.info, Node: The Basics, Next: Simple Example, Up: Using libffi @@ -368,7 +369,7 @@ necessarily platform-specific.  -File: libffi.info, Node: The Closure API, Prev: Multiple ABIs, Up: Using libffi +File: libffi.info, Node: The Closure API, Next: Closure Example, Prev: Multiple ABIs, Up: Using libffi 2.5 The Closure API =================== @@ -444,6 +445,62 @@ executable addresses.  +File: libffi.info, Node: Closure Example, Prev: The Closure API, Up: Using libffi + +2.6 Closure Example +=================== + +A trivial example that creates a new `puts' by binding `fputs' with +`stdin'. + + #include + #include + + /* Acts like puts with the file given at time of enclosure. */ + void puts_binding(ffi_cif *cif, unsigned int *ret, void* args[], + FILE *stream) + { + *ret = fputs(*(char **)args[0], stream); + } + + int main() + { + ffi_cif cif; + ffi_type *args[1]; + ffi_closure *closure; + + int (*bound_puts)(char *); + int rc; + + /* Allocate closure and bound_puts */ + closure = ffi_closure_alloc(sizeof(ffi_closure), &bound_puts); + + if (closure) + { + /* Initialize the argument info vectors */ + args[0] = &ffi_type_pointer; + + /* Initialize the cif */ + if (ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 1, + &ffi_type_uint, args) == FFI_OK) + { + /* Initialize the closure, setting stream to stdout */ + if (ffi_prep_closure_loc(closure, &cif, puts_binding, + stdout, bound_puts) == FFI_OK) + { + rc = bound_puts("Hello World!"); + /* rc now holds the result of the call to fputs */ + } + } + } + + /* Deallocate both closure, and bound_puts */ + ffi_closure_free(closure); + + return 0; + } + + File: libffi.info, Node: Missing Features, Next: Index, Prev: Using libffi, Up: Top 3 Missing Features @@ -516,18 +573,19 @@  Tag Table: -Node: Top700 -Node: Introduction1436 -Node: Using libffi3072 -Node: The Basics3507 -Node: Simple Example6114 -Node: Types7141 -Node: Primitive Types7424 -Node: Structures9244 -Node: Type Example10104 -Node: Multiple ABIs11327 -Node: The Closure API11698 -Node: Missing Features14618 -Node: Index15111 +Node: Top706 +Node: Introduction1448 +Node: Using libffi3084 +Node: The Basics3570 +Node: Simple Example6177 +Node: Types7204 +Node: Primitive Types7487 +Node: Structures9307 +Node: Type Example10167 +Node: Multiple ABIs11390 +Node: The Closure API11761 +Node: Closure Example14705 +Node: Missing Features16264 +Node: Index16757  End Tag Table Modified: python/branches/py3k/Modules/_ctypes/libffi/doc/libffi.texi ============================================================================== --- python/branches/py3k/Modules/_ctypes/libffi/doc/libffi.texi (original) +++ python/branches/py3k/Modules/_ctypes/libffi/doc/libffi.texi Fri Mar 19 20:02:09 2010 @@ -19,7 +19,7 @@ This manual is for Libffi, a portable foreign-function interface library. -Copyright @copyright{} 2008 Red Hat, Inc. +Copyright @copyright{} 2008, 2010 Red Hat, Inc. @quotation Permission is granted to copy, distribute and/or modify this document @@ -106,6 +106,7 @@ * Types:: libffi type descriptions. * Multiple ABIs:: Different passing styles on one platform. * The Closure API:: Writing a generic function. +* Closure Example:: A closure example. @end menu @@ -500,12 +501,66 @@ to the appropriate pointer-to-function type. @end defun - at c FIXME: example - You may see old code referring to @code{ffi_prep_closure}. This function is deprecated, as it cannot handle the need for separate writable and executable addresses. + at node Closure Example + at section Closure Example + +A trivial example that creates a new @code{puts} by binding + at code{fputs} with @code{stdin}. + + at example +#include +#include + +/* Acts like puts with the file given at time of enclosure. */ +void puts_binding(ffi_cif *cif, unsigned int *ret, void* args[], + FILE *stream) +@{ + *ret = fputs(*(char **)args[0], stream); +@} + +int main() +@{ + ffi_cif cif; + ffi_type *args[1]; + ffi_closure *closure; + + int (*bound_puts)(char *); + int rc; + + /* Allocate closure and bound_puts */ + closure = ffi_closure_alloc(sizeof(ffi_closure), &bound_puts); + + if (closure) + @{ + /* Initialize the argument info vectors */ + args[0] = &ffi_type_pointer; + + /* Initialize the cif */ + if (ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 1, + &ffi_type_uint, args) == FFI_OK) + @{ + /* Initialize the closure, setting stream to stdout */ + if (ffi_prep_closure_loc(closure, &cif, puts_binding, + stdout, bound_puts) == FFI_OK) + @{ + rc = bound_puts("Hello World!"); + /* rc now holds the result of the call to fputs */ + @} + @} + @} + + /* Deallocate both closure, and bound_puts */ + ffi_closure_free(closure); + + return 0; +@} + + at end example + @node Missing Features @chapter Missing Features @@ -525,6 +580,8 @@ @item The closure API is + at c FIXME: ... + @item The ``raw'' API is undocumented. @c argument promotion? Modified: python/branches/py3k/Modules/_ctypes/libffi/doc/stamp-vti ============================================================================== --- python/branches/py3k/Modules/_ctypes/libffi/doc/stamp-vti (original) +++ python/branches/py3k/Modules/_ctypes/libffi/doc/stamp-vti Fri Mar 19 20:02:09 2010 @@ -1,4 +1,4 @@ - at set UPDATED 29 December 2009 - at set UPDATED-MONTH December 2009 - at set EDITION 3.0.9 - at set VERSION 3.0.9 + at set UPDATED 14 February 2008 + at set UPDATED-MONTH February 2008 + at set EDITION 3.0.8 + at set VERSION 3.0.8 Modified: python/branches/py3k/Modules/_ctypes/libffi/doc/version.texi ============================================================================== --- python/branches/py3k/Modules/_ctypes/libffi/doc/version.texi (original) +++ python/branches/py3k/Modules/_ctypes/libffi/doc/version.texi Fri Mar 19 20:02:09 2010 @@ -1,4 +1,4 @@ - at set UPDATED 29 December 2009 - at set UPDATED-MONTH December 2009 - at set EDITION 3.0.9 - at set VERSION 3.0.9 + at set UPDATED 14 February 2008 + at set UPDATED-MONTH February 2008 + at set EDITION 3.0.8 + at set VERSION 3.0.8 Modified: python/branches/py3k/Modules/_ctypes/libffi/fficonfig.h.in ============================================================================== --- python/branches/py3k/Modules/_ctypes/libffi/fficonfig.h.in (original) +++ python/branches/py3k/Modules/_ctypes/libffi/fficonfig.h.in Fri Mar 19 20:02:09 2010 @@ -125,6 +125,9 @@ /* Define to the one symbol short name of this package. */ #undef PACKAGE_TARNAME +/* Define to the home page for this package. */ +#undef PACKAGE_URL + /* Define to the version of this package. */ #undef PACKAGE_VERSION Modified: python/branches/py3k/Modules/_ctypes/libffi/include/ffi.h.in ============================================================================== --- python/branches/py3k/Modules/_ctypes/libffi/include/ffi.h.in (original) +++ python/branches/py3k/Modules/_ctypes/libffi/include/ffi.h.in Fri Mar 19 20:02:09 2010 @@ -251,6 +251,9 @@ #if FFI_CLOSURES +#ifdef _MSC_VER +__declspec(align(8)) +#endif typedef struct { char tramp[FFI_TRAMPOLINE_SIZE]; ffi_cif *cif; Modified: python/branches/py3k/Modules/_ctypes/libffi/src/closures.c ============================================================================== --- python/branches/py3k/Modules/_ctypes/libffi/src/closures.c (original) +++ python/branches/py3k/Modules/_ctypes/libffi/src/closures.c Fri Mar 19 20:02:09 2010 @@ -1,5 +1,5 @@ /* ----------------------------------------------------------------------- - closures.c - Copyright (c) 2007, 2009 Red Hat, Inc. + closures.c - Copyright (c) 2007 Red Hat, Inc. Copyright (C) 2007, 2009 Free Software Foundation, Inc Code to allocate and deallocate memory for closures. @@ -209,8 +209,6 @@ #if !(defined(X86_WIN32) || defined(X86_WIN64)) || defined (__CYGWIN__) -#if FFI_MMAP_EXEC_SELINUX - /* A mutex used to synchronize access to *exec* variables in this file. */ static pthread_mutex_t open_temp_exec_file_mutex = PTHREAD_MUTEX_INITIALIZER; @@ -480,27 +478,6 @@ return dlmmap_locked (start, length, prot, flags, offset); } -#else - -static void * -dlmmap (void *start, size_t length, int prot, - int flags, int fd, off_t offset) -{ - - assert (start == NULL && length % malloc_getpagesize == 0 - && prot == (PROT_READ | PROT_WRITE) - && flags == (MAP_PRIVATE | MAP_ANONYMOUS) - && fd == -1 && offset == 0); - -#if FFI_CLOSURE_TEST - printf ("mapping in %zi\n", length); -#endif - - return mmap (start, length, prot | PROT_EXEC, flags, fd, offset); -} - -#endif - /* Release memory at the given address, as well as the corresponding executable page if it's separate. */ static int Modified: python/branches/py3k/Modules/_ctypes/libffi/src/mips/n32.S ============================================================================== --- python/branches/py3k/Modules/_ctypes/libffi/src/mips/n32.S (original) +++ python/branches/py3k/Modules/_ctypes/libffi/src/mips/n32.S Fri Mar 19 20:02:09 2010 @@ -1,5 +1,5 @@ /* ----------------------------------------------------------------------- - n32.S - Copyright (c) 1996, 1998, 2005 Red Hat, Inc. + n32.S - Copyright (c) 1996, 1998, 2005, 2007, 2009, 2010 Red Hat, Inc. MIPS Foreign Function Interface @@ -40,7 +40,7 @@ #define SIZEOF_FRAME ( 8 * FFI_SIZEOF_ARG ) -#ifdef linux +#ifdef __GNUC__ .abicalls #endif .text @@ -529,7 +529,7 @@ .LFE2: .end ffi_closure_N32 -#ifdef linux +#ifdef __GNUC__ .section .eh_frame,"aw", at progbits .Lframe1: .4byte .LECIE1-.LSCIE1 # length @@ -586,6 +586,6 @@ .uleb128 (SIZEOF_FRAME2 - RA_OFF2)/4 .align EH_FRAME_ALIGN .LEFDE3: -#endif /* linux */ +#endif /* __GNUC__ */ #endif Modified: python/branches/py3k/Modules/_ctypes/libffi/src/prep_cif.c ============================================================================== --- python/branches/py3k/Modules/_ctypes/libffi/src/prep_cif.c (original) +++ python/branches/py3k/Modules/_ctypes/libffi/src/prep_cif.c Fri Mar 19 20:02:09 2010 @@ -109,16 +109,13 @@ /* 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 && !defined PA + /* x86, x86-64 and s390 stack space allocation is handled in prep_machdep. */ +#if !defined M68K && !defined __i386__ && !defined __x86_64__ && !defined S390 && !defined PA /* Make space for the return structure pointer */ if (cif->rtype->type == FFI_TYPE_STRUCT #ifdef SPARC && (cif->abi != FFI_V9 || cif->rtype->size > 32) #endif -#ifdef X86_DARWIN - && (cif->rtype->size > 8) -#endif ) bytes = STACK_ARG_SIZE(sizeof(void*)); #endif @@ -134,7 +131,7 @@ check after the initialization. */ FFI_ASSERT_VALID_TYPE(*ptr); -#if !defined __x86_64__ && !defined S390 && !defined PA +#if !defined __i386__ && !defined __x86_64__ && !defined S390 && !defined PA #ifdef SPARC if (((*ptr)->type == FFI_TYPE_STRUCT && ((*ptr)->size > 16 || cif->abi != FFI_V9)) Modified: python/branches/py3k/Modules/_ctypes/libffi/src/x86/ffi.c ============================================================================== --- python/branches/py3k/Modules/_ctypes/libffi/src/x86/ffi.c (original) +++ python/branches/py3k/Modules/_ctypes/libffi/src/x86/ffi.c Fri Mar 19 20:02:09 2010 @@ -148,13 +148,13 @@ /* Perform machine dependent cif processing */ ffi_status ffi_prep_cif_machdep(ffi_cif *cif) { + unsigned int i; + ffi_type **ptr; + /* Set the return type flag */ switch (cif->rtype->type) { case FFI_TYPE_VOID: -#ifdef X86 - case FFI_TYPE_STRUCT: -#endif #if defined(X86) || defined (X86_WIN32) || defined(X86_FREEBSD) || defined(X86_DARWIN) || defined(X86_WIN64) case FFI_TYPE_UINT8: case FFI_TYPE_UINT16: @@ -165,7 +165,6 @@ case FFI_TYPE_UINT32: case FFI_TYPE_SINT32: #endif - case FFI_TYPE_SINT64: case FFI_TYPE_FLOAT: case FFI_TYPE_DOUBLE: @@ -184,8 +183,8 @@ cif->flags = FFI_TYPE_SINT64; break; -#ifndef X86 case FFI_TYPE_STRUCT: +#ifndef X86 if (cif->rtype->size == 1) { cif->flags = FFI_TYPE_SMALL_STRUCT_1B; /* same as char size */ @@ -207,15 +206,13 @@ cif->flags = FFI_TYPE_SINT64; /* same as int64 type */ } else +#endif { cif->flags = FFI_TYPE_STRUCT; -#ifdef X86_WIN64 // allocate space for return value pointer cif->bytes += ALIGN(sizeof(void*), FFI_SIZEOF_ARG); -#endif } break; -#endif default: #ifdef X86_WIN64 @@ -229,41 +226,36 @@ break; } -#ifdef X86_DARWIN - cif->bytes = (cif->bytes + 15) & ~0xF; -#endif + for (ptr = cif->arg_types, i = cif->nargs; i > 0; i--, ptr++) + { + if (((*ptr)->alignment - 1) & cif->bytes) + cif->bytes = ALIGN(cif->bytes, (*ptr)->alignment); + cif->bytes += ALIGN((*ptr)->size, FFI_SIZEOF_ARG); + } #ifdef X86_WIN64 - { - unsigned int i; - ffi_type **ptr; - - for (ptr = cif->arg_types, i = cif->nargs; i > 0; i--, ptr++) - { - if (((*ptr)->alignment - 1) & cif->bytes) - cif->bytes = ALIGN(cif->bytes, (*ptr)->alignment); - cif->bytes += ALIGN((*ptr)->size, FFI_SIZEOF_ARG); - } - } // ensure space for storing four registers cif->bytes += 4 * sizeof(ffi_arg); #endif +#ifdef X86_DARWIN + cif->bytes = (cif->bytes + 15) & ~0xF; +#endif + return FFI_OK; } -extern void ffi_call_SYSV(void (*)(char *, extended_cif *), extended_cif *, - unsigned, unsigned, unsigned *, void (*fn)(void)); - -#ifdef X86_WIN32 -extern void ffi_call_STDCALL(void (*)(char *, extended_cif *), extended_cif *, - unsigned, unsigned, unsigned *, void (*fn)(void)); - -#endif /* X86_WIN32 */ #ifdef X86_WIN64 extern int ffi_call_win64(void (*)(char *, extended_cif *), extended_cif *, unsigned, unsigned, unsigned *, void (*fn)(void)); +#elif defined(X86_WIN32) +extern void +ffi_call_win32(void (*)(char *, extended_cif *), extended_cif *, + unsigned, unsigned, unsigned *, void (*fn)(void)); +#else +extern void ffi_call_SYSV(void (*)(char *, extended_cif *), extended_cif *, + unsigned, unsigned, unsigned *, void (*fn)(void)); #endif void ffi_call(ffi_cif *cif, void (*fn)(void), void *rvalue, void **avalue) @@ -321,18 +313,18 @@ cif->flags, ecif.rvalue, fn); } break; +#elif defined(X86_WIN32) + case FFI_SYSV: + case FFI_STDCALL: + ffi_call_win32(ffi_prep_args, &ecif, cif->bytes, cif->flags, + ecif.rvalue, fn); + break; #else case FFI_SYSV: ffi_call_SYSV(ffi_prep_args, &ecif, cif->bytes, cif->flags, ecif.rvalue, fn); break; -#ifdef X86_WIN32 - case FFI_STDCALL: - ffi_call_STDCALL(ffi_prep_args, &ecif, cif->bytes, cif->flags, - ecif.rvalue, fn); - break; -#endif /* X86_WIN32 */ -#endif /* X86_WIN64 */ +#endif default: FFI_ASSERT(0); break; @@ -342,6 +334,8 @@ /** private members **/ +/* The following __attribute__((regparm(1))) decorations will have no effect + on MSVC - standard cdecl convention applies. */ static void ffi_prep_incoming_args_SYSV (char *stack, void **ret, void** args, ffi_cif* cif); void FFI_HIDDEN ffi_closure_SYSV (ffi_closure *) @@ -390,11 +384,8 @@ } #else -unsigned int FFI_HIDDEN -ffi_closure_SYSV_inner (closure, respp, args) - ffi_closure *closure; - void **respp; - void *args; +unsigned int FFI_HIDDEN __attribute__ ((regparm(1))) +ffi_closure_SYSV_inner (ffi_closure *closure, void **respp, void *args) { /* our various things... */ ffi_cif *cif; @@ -505,7 +496,7 @@ /* How to make a trampoline. Derived from gcc/config/i386/i386.c. */ #define FFI_INIT_TRAMPOLINE(TRAMP,FUN,CTX) \ -({ unsigned char *__tramp = (unsigned char*)(TRAMP); \ +{ unsigned char *__tramp = (unsigned char*)(TRAMP); \ unsigned int __fun = (unsigned int)(FUN); \ unsigned int __ctx = (unsigned int)(CTX); \ unsigned int __dis = __fun - (__ctx + 10); \ @@ -513,10 +504,10 @@ *(unsigned int*) &__tramp[1] = __ctx; /* movl __ctx, %eax */ \ *(unsigned char *) &__tramp[5] = 0xe9; \ *(unsigned int*) &__tramp[6] = __dis; /* jmp __fun */ \ - }) + } #define FFI_INIT_TRAMPOLINE_STDCALL(TRAMP,FUN,CTX,SIZE) \ -({ unsigned char *__tramp = (unsigned char*)(TRAMP); \ +{ unsigned char *__tramp = (unsigned char*)(TRAMP); \ unsigned int __fun = (unsigned int)(FUN); \ unsigned int __ctx = (unsigned int)(CTX); \ unsigned int __dis = __fun - (__ctx + 10); \ @@ -527,7 +518,7 @@ *(unsigned int*) &__tramp[6] = __dis; /* call __fun */ \ *(unsigned char *) &__tramp[10] = 0xc2; \ *(unsigned short*) &__tramp[11] = __size; /* ret __size */ \ - }) + } /* the cif must already be prep'ed */ @@ -595,9 +586,9 @@ } /* we currently don't support certain kinds of arguments for raw - // closures. This should be implemented by a separate assembly language - // routine, since it would require argument processing, something we - // don't do now for performance. */ + closures. This should be implemented by a separate assembly + language routine, since it would require argument processing, + something we don't do now for performance. */ for (i = cif->nargs-1; i >= 0; i--) { @@ -627,16 +618,6 @@ * libffi-1.20, this is not the case.) */ -extern void -ffi_call_SYSV(void (*)(char *, extended_cif *), extended_cif *, unsigned, - unsigned, unsigned *, void (*fn)(void)); - -#ifdef X86_WIN32 -extern void -ffi_call_STDCALL(void (*)(char *, extended_cif *), extended_cif *, unsigned, - unsigned, unsigned *, void (*fn)(void)); -#endif /* X86_WIN32 */ - void ffi_raw_call(ffi_cif *cif, void (*fn)(void), void *rvalue, ffi_raw *fake_avalue) { @@ -660,16 +641,18 @@ switch (cif->abi) { +#ifdef X86_WIN32 + case FFI_SYSV: + case FFI_STDCALL: + ffi_call_win32(ffi_prep_args_raw, &ecif, cif->bytes, cif->flags, + ecif.rvalue, fn); + break; +#else case FFI_SYSV: ffi_call_SYSV(ffi_prep_args_raw, &ecif, cif->bytes, cif->flags, ecif.rvalue, fn); break; -#ifdef X86_WIN32 - case FFI_STDCALL: - ffi_call_STDCALL(ffi_prep_args_raw, &ecif, cif->bytes, cif->flags, - ecif.rvalue, fn); - break; -#endif /* X86_WIN32 */ +#endif default: FFI_ASSERT(0); break; Modified: python/branches/py3k/Modules/_ctypes/libffi/src/x86/ffi64.c ============================================================================== --- python/branches/py3k/Modules/_ctypes/libffi/src/x86/ffi64.c (original) +++ python/branches/py3k/Modules/_ctypes/libffi/src/x86/ffi64.c Fri Mar 19 20:02:09 2010 @@ -50,9 +50,10 @@ gcc/config/i386/i386.c. Do *not* change one without the other. */ /* Register class used for passing given 64bit part of the argument. - These represent classes as documented by the PS ABI, with the exception - of SSESF, SSEDF classes, that are basically SSE class, just gcc will - use SF or DFmode move instead of DImode to avoid reformatting penalties. + These represent classes as documented by the PS ABI, with the + exception of SSESF, SSEDF classes, that are basically SSE class, + just gcc will use SF or DFmode move instead of DImode to avoid + reformatting penalties. Similary we play games with INTEGERSI_CLASS to use cheaper SImode moves whenever possible (upper half does contain padding). */ Modified: python/branches/py3k/Modules/_ctypes/libffi/src/x86/ffitarget.h ============================================================================== --- python/branches/py3k/Modules/_ctypes/libffi/src/x86/ffitarget.h (original) +++ python/branches/py3k/Modules/_ctypes/libffi/src/x86/ffitarget.h Fri Mar 19 20:02:09 2010 @@ -1,5 +1,5 @@ /* -----------------------------------------------------------------*-C-*- - ffitarget.h - Copyright (c) 1996-2003 Red Hat, Inc. + ffitarget.h - Copyright (c) 1996-2003, 2010 Red Hat, Inc. Copyright (C) 2008 Free Software Foundation, Inc. Target configuration macros for x86 and x86-64. @@ -74,10 +74,10 @@ #else /* ---- Intel x86 and AMD x86-64 - */ -#if !defined(X86_WIN32) && (defined(__i386__) || defined(__x86_64__)) +#if !defined(X86_WIN32) && (defined(__i386__) || defined(__x86_64__) || defined(__i386) || defined(__amd64)) FFI_SYSV, FFI_UNIX64, /* Unix variants all use the same ABI for x86-64 */ -#ifdef __i386__ +#if defined(__i386__) || defined(__i386) FFI_DEFAULT_ABI = FFI_SYSV, #else FFI_DEFAULT_ABI = FFI_UNIX64, Modified: python/branches/py3k/Modules/_ctypes/libffi/src/x86/win32.S ============================================================================== --- python/branches/py3k/Modules/_ctypes/libffi/src/x86/win32.S (original) +++ python/branches/py3k/Modules/_ctypes/libffi/src/x86/win32.S Fri Mar 19 20:02:09 2010 @@ -2,6 +2,7 @@ win32.S - Copyright (c) 1996, 1998, 2001, 2002, 2009 Red Hat, Inc. Copyright (c) 2001 John Beniton Copyright (c) 2002 Ranjit Mathew + Copyright (c) 2009 Daniel Witte X86 Foreign Function Interface @@ -31,14 +32,371 @@ #define LIBFFI_ASM #include #include - + +#ifdef _MSC_VER + +.386 +.MODEL FLAT, C + +EXTRN ffi_closure_SYSV_inner:NEAR + +_TEXT SEGMENT + +ffi_call_win32 PROC NEAR, + ffi_prep_args : NEAR PTR DWORD, + ecif : NEAR PTR DWORD, + cif_bytes : DWORD, + cif_flags : DWORD, + rvalue : NEAR PTR DWORD, + fn : NEAR PTR DWORD + + ;; Make room for all of the new args. + mov ecx, cif_bytes + sub esp, ecx + + mov eax, esp + + ;; Place all of the ffi_prep_args in position + push ecif + push eax + call ffi_prep_args + + ;; Return stack to previous state and call the function + add esp, 8 + + call fn + + ;; cdecl: we restore esp in the epilogue, so there's no need to + ;; remove the space we pushed for the args. + ;; stdcall: the callee has already cleaned the stack. + + ;; Load ecx with the return type code + mov ecx, cif_flags + + ;; If the return value pointer is NULL, assume no return value. + cmp rvalue, 0 + jne ca_jumptable + + ;; Even if there is no space for the return value, we are + ;; obliged to handle floating-point values. + cmp ecx, FFI_TYPE_FLOAT + jne ca_epilogue + fstp st(0) + + jmp ca_epilogue + +ca_jumptable: + jmp [ca_jumpdata + 4 * ecx] +ca_jumpdata: + ;; Do not insert anything here between label and jump table. + dd offset ca_epilogue ;; FFI_TYPE_VOID + dd offset ca_retint ;; FFI_TYPE_INT + dd offset ca_retfloat ;; FFI_TYPE_FLOAT + dd offset ca_retdouble ;; FFI_TYPE_DOUBLE + dd offset ca_retlongdouble ;; FFI_TYPE_LONGDOUBLE + dd offset ca_retint8 ;; FFI_TYPE_UINT8 + dd offset ca_retint8 ;; FFI_TYPE_SINT8 + dd offset ca_retint16 ;; FFI_TYPE_UINT16 + dd offset ca_retint16 ;; FFI_TYPE_SINT16 + dd offset ca_retint ;; FFI_TYPE_UINT32 + dd offset ca_retint ;; FFI_TYPE_SINT32 + dd offset ca_retint64 ;; FFI_TYPE_UINT64 + dd offset ca_retint64 ;; FFI_TYPE_SINT64 + dd offset ca_epilogue ;; FFI_TYPE_STRUCT + dd offset ca_retint ;; FFI_TYPE_POINTER + dd offset ca_retint8 ;; FFI_TYPE_SMALL_STRUCT_1B + dd offset ca_retint16 ;; FFI_TYPE_SMALL_STRUCT_2B + dd offset ca_retint ;; FFI_TYPE_SMALL_STRUCT_4B + +ca_retint8: + ;; Load %ecx with the pointer to storage for the return value + mov ecx, rvalue + mov [ecx + 0], al + jmp ca_epilogue + +ca_retint16: + ;; Load %ecx with the pointer to storage for the return value + mov ecx, rvalue + mov [ecx + 0], ax + jmp ca_epilogue + +ca_retint: + ;; Load %ecx with the pointer to storage for the return value + mov ecx, rvalue + mov [ecx + 0], eax + jmp ca_epilogue + +ca_retint64: + ;; Load %ecx with the pointer to storage for the return value + mov ecx, rvalue + mov [ecx + 0], eax + mov [ecx + 4], edx + jmp ca_epilogue + +ca_retfloat: + ;; Load %ecx with the pointer to storage for the return value + mov ecx, rvalue + fstp DWORD PTR [ecx] + jmp ca_epilogue + +ca_retdouble: + ;; Load %ecx with the pointer to storage for the return value + mov ecx, rvalue + fstp QWORD PTR [ecx] + jmp ca_epilogue + +ca_retlongdouble: + ;; Load %ecx with the pointer to storage for the return value + mov ecx, rvalue + fstp TBYTE PTR [ecx] + jmp ca_epilogue + +ca_epilogue: + ;; Epilogue code is autogenerated. + ret +ffi_call_win32 ENDP + +ffi_closure_SYSV PROC NEAR FORCEFRAME + ;; the ffi_closure ctx is passed in eax by the trampoline. + + sub esp, 40 + lea edx, [ebp - 24] + mov [ebp - 12], edx ;; resp + lea edx, [ebp + 8] + mov [esp + 8], edx ;; args + lea edx, [ebp - 12] + mov [esp + 4], edx ;; &resp + mov [esp], eax ;; closure + call ffi_closure_SYSV_inner + mov ecx, [ebp - 12] + +cs_jumptable: + jmp [cs_jumpdata + 4 * eax] +cs_jumpdata: + ;; Do not insert anything here between the label and jump table. + dd offset cs_epilogue ;; FFI_TYPE_VOID + dd offset cs_retint ;; FFI_TYPE_INT + dd offset cs_retfloat ;; FFI_TYPE_FLOAT + dd offset cs_retdouble ;; FFI_TYPE_DOUBLE + dd offset cs_retlongdouble ;; FFI_TYPE_LONGDOUBLE + dd offset cs_retint8 ;; FFI_TYPE_UINT8 + dd offset cs_retint8 ;; FFI_TYPE_SINT8 + dd offset cs_retint16 ;; FFI_TYPE_UINT16 + dd offset cs_retint16 ;; FFI_TYPE_SINT16 + dd offset cs_retint ;; FFI_TYPE_UINT32 + dd offset cs_retint ;; FFI_TYPE_SINT32 + dd offset cs_retint64 ;; FFI_TYPE_UINT64 + dd offset cs_retint64 ;; FFI_TYPE_SINT64 + dd offset cs_retstruct ;; FFI_TYPE_STRUCT + dd offset cs_retint ;; FFI_TYPE_POINTER + dd offset cs_retint8 ;; FFI_TYPE_SMALL_STRUCT_1B + dd offset cs_retint16 ;; FFI_TYPE_SMALL_STRUCT_2B + dd offset cs_retint ;; FFI_TYPE_SMALL_STRUCT_4B + +cs_retint8: + mov al, [ecx] + jmp cs_epilogue + +cs_retint16: + mov ax, [ecx] + jmp cs_epilogue + +cs_retint: + mov eax, [ecx] + jmp cs_epilogue + +cs_retint64: + mov eax, [ecx + 0] + mov edx, [ecx + 4] + jmp cs_epilogue + +cs_retfloat: + fld DWORD PTR [ecx] + jmp cs_epilogue + +cs_retdouble: + fld QWORD PTR [ecx] + jmp cs_epilogue + +cs_retlongdouble: + fld TBYTE PTR [ecx] + jmp cs_epilogue + +cs_retstruct: + ;; Caller expects us to pop struct return value pointer hidden arg. + ;; Epilogue code is autogenerated. + ret 4 + +cs_epilogue: + ;; Epilogue code is autogenerated. + ret +ffi_closure_SYSV ENDP + +#if !FFI_NO_RAW_API + +#define RAW_CLOSURE_CIF_OFFSET ((FFI_TRAMPOLINE_SIZE + 3) AND NOT 3) +#define RAW_CLOSURE_FUN_OFFSET (RAW_CLOSURE_CIF_OFFSET + 4) +#define RAW_CLOSURE_USER_DATA_OFFSET (RAW_CLOSURE_FUN_OFFSET + 4) +#define CIF_FLAGS_OFFSET 20 + +ffi_closure_raw_SYSV PROC NEAR USES esi + ;; the ffi_closure ctx is passed in eax by the trampoline. + + sub esp, 40 + mov esi, [eax + RAW_CLOSURE_CIF_OFFSET] ;; closure->cif + mov edx, [eax + RAW_CLOSURE_USER_DATA_OFFSET] ;; closure->user_data + mov [esp + 12], edx ;; user_data + lea edx, [ebp + 8] + mov [esp + 8], edx ;; raw_args + lea edx, [ebp - 24] + mov [esp + 4], edx ;; &res + mov [esp], esi ;; cif + call DWORD PTR [eax + RAW_CLOSURE_FUN_OFFSET] ;; closure->fun + mov eax, [esi + CIF_FLAGS_OFFSET] ;; cif->flags + lea ecx, [ebp - 24] + +cr_jumptable: + jmp [cr_jumpdata + 4 * eax] +cr_jumpdata: + ;; Do not insert anything here between the label and jump table. + dd offset cr_epilogue ;; FFI_TYPE_VOID + dd offset cr_retint ;; FFI_TYPE_INT + dd offset cr_retfloat ;; FFI_TYPE_FLOAT + dd offset cr_retdouble ;; FFI_TYPE_DOUBLE + dd offset cr_retlongdouble ;; FFI_TYPE_LONGDOUBLE + dd offset cr_retint8 ;; FFI_TYPE_UINT8 + dd offset cr_retint8 ;; FFI_TYPE_SINT8 + dd offset cr_retint16 ;; FFI_TYPE_UINT16 + dd offset cr_retint16 ;; FFI_TYPE_SINT16 + dd offset cr_retint ;; FFI_TYPE_UINT32 + dd offset cr_retint ;; FFI_TYPE_SINT32 + dd offset cr_retint64 ;; FFI_TYPE_UINT64 + dd offset cr_retint64 ;; FFI_TYPE_SINT64 + dd offset cr_epilogue ;; FFI_TYPE_STRUCT + dd offset cr_retint ;; FFI_TYPE_POINTER + dd offset cr_retint8 ;; FFI_TYPE_SMALL_STRUCT_1B + dd offset cr_retint16 ;; FFI_TYPE_SMALL_STRUCT_2B + dd offset cr_retint ;; FFI_TYPE_SMALL_STRUCT_4B + +cr_retint8: + mov al, [ecx] + jmp cr_epilogue + +cr_retint16: + mov ax, [ecx] + jmp cr_epilogue + +cr_retint: + mov eax, [ecx] + jmp cr_epilogue + +cr_retint64: + mov eax, [ecx + 0] + mov edx, [ecx + 4] + jmp cr_epilogue + +cr_retfloat: + fld DWORD PTR [ecx] + jmp cr_epilogue + +cr_retdouble: + fld QWORD PTR [ecx] + jmp cr_epilogue + +cr_retlongdouble: + fld TBYTE PTR [ecx] + jmp cr_epilogue + +cr_epilogue: + ;; Epilogue code is autogenerated. + ret +ffi_closure_raw_SYSV ENDP + +#endif /* !FFI_NO_RAW_API */ + +ffi_closure_STDCALL PROC NEAR FORCEFRAME + ;; the ffi_closure ctx is passed in eax by the trampoline. + + sub esp, 40 + lea edx, [ebp - 24] + mov [ebp - 12], edx ;; resp + lea edx, [ebp + 12] ;; account for stub return address on stack + mov [esp + 8], edx ;; args + lea edx, [ebp - 12] + mov [esp + 4], edx ;; &resp + mov [esp], eax ;; closure + call ffi_closure_SYSV_inner + mov ecx, [ebp - 12] + +cd_jumptable: + jmp [cd_jumpdata + 4 * eax] +cd_jumpdata: + ;; Do not insert anything here between the label and jump table. + dd offset cd_epilogue ;; FFI_TYPE_VOID + dd offset cd_retint ;; FFI_TYPE_INT + dd offset cd_retfloat ;; FFI_TYPE_FLOAT + dd offset cd_retdouble ;; FFI_TYPE_DOUBLE + dd offset cd_retlongdouble ;; FFI_TYPE_LONGDOUBLE + dd offset cd_retint8 ;; FFI_TYPE_UINT8 + dd offset cd_retint8 ;; FFI_TYPE_SINT8 + dd offset cd_retint16 ;; FFI_TYPE_UINT16 + dd offset cd_retint16 ;; FFI_TYPE_SINT16 + dd offset cd_retint ;; FFI_TYPE_UINT32 + dd offset cd_retint ;; FFI_TYPE_SINT32 + dd offset cd_retint64 ;; FFI_TYPE_UINT64 + dd offset cd_retint64 ;; FFI_TYPE_SINT64 + dd offset cd_epilogue ;; FFI_TYPE_STRUCT + dd offset cd_retint ;; FFI_TYPE_POINTER + dd offset cd_retint8 ;; FFI_TYPE_SMALL_STRUCT_1B + dd offset cd_retint16 ;; FFI_TYPE_SMALL_STRUCT_2B + dd offset cd_retint ;; FFI_TYPE_SMALL_STRUCT_4B + +cd_retint8: + mov al, [ecx] + jmp cd_epilogue + +cd_retint16: + mov ax, [ecx] + jmp cd_epilogue + +cd_retint: + mov eax, [ecx] + jmp cd_epilogue + +cd_retint64: + mov eax, [ecx + 0] + mov edx, [ecx + 4] + jmp cd_epilogue + +cd_retfloat: + fld DWORD PTR [ecx] + jmp cd_epilogue + +cd_retdouble: + fld QWORD PTR [ecx] + jmp cd_epilogue + +cd_retlongdouble: + fld TBYTE PTR [ecx] + jmp cd_epilogue + +cd_epilogue: + ;; Epilogue code is autogenerated. + ret +ffi_closure_STDCALL ENDP + +_TEXT ENDS +END + +#else + .text # This assumes we are using gas. .balign 16 - .globl _ffi_call_SYSV - .def _ffi_call_SYSV; .scl 2; .type 32; .endef -_ffi_call_SYSV: + .globl _ffi_call_win32 + .def _ffi_call_win32; .scl 2; .type 32; .endef +_ffi_call_win32: .LFB1: pushl %ebp .LCFI0: @@ -61,8 +419,10 @@ # FIXME: Align the stack to a 128-bit boundary to avoid # potential performance hits. - call *28(%ebp) + call *28(%ebp) + # stdcall functions pop arguments off the stack themselves + # Load %ecx with the return type code movl 20(%ebp),%ecx @@ -181,164 +541,11 @@ movl %ebp,%esp popl %ebp ret -.ffi_call_SYSV_end: +.ffi_call_win32_end: .LFE1: # This assumes we are using gas. .balign 16 - .globl _ffi_call_STDCALL - .def _ffi_call_STDCALL; .scl 2; .type 32; .endef -_ffi_call_STDCALL: -.LFB2: - pushl %ebp -.LCFI2: - movl %esp,%ebp -.LCFI3: - # Make room for all of the new args. - movl 16(%ebp),%ecx - subl %ecx,%esp - - movl %esp,%eax - - # Place all of the ffi_prep_args in position - pushl 12(%ebp) - pushl %eax - call *8(%ebp) - - # Return stack to previous state and call the function - addl $8,%esp - - # FIXME: Align the stack to a 128-bit boundary to avoid - # potential performance hits. - - call *28(%ebp) - - # stdcall functions pop arguments off the stack themselves - - # Load %ecx with the return type code - movl 20(%ebp),%ecx - - # If the return value pointer is NULL, assume no return value. - cmpl $0,24(%ebp) - jne 0f - - # Even if there is no space for the return value, we are - # obliged to handle floating-point values. - cmpl $FFI_TYPE_FLOAT,%ecx - jne .Lsc_noretval - fstp %st(0) - - jmp .Lsc_epilogue - -0: - call 1f - # Do not insert anything here between the call and the jump table. -.Lsc_store_table: - .long .Lsc_noretval /* FFI_TYPE_VOID */ - .long .Lsc_retint /* FFI_TYPE_INT */ - .long .Lsc_retfloat /* FFI_TYPE_FLOAT */ - .long .Lsc_retdouble /* FFI_TYPE_DOUBLE */ - .long .Lsc_retlongdouble /* FFI_TYPE_LONGDOUBLE */ - .long .Lsc_retuint8 /* FFI_TYPE_UINT8 */ - .long .Lsc_retsint8 /* FFI_TYPE_SINT8 */ - .long .Lsc_retuint16 /* FFI_TYPE_UINT16 */ - .long .Lsc_retsint16 /* FFI_TYPE_SINT16 */ - .long .Lsc_retint /* FFI_TYPE_UINT32 */ - .long .Lsc_retint /* FFI_TYPE_SINT32 */ - .long .Lsc_retint64 /* FFI_TYPE_UINT64 */ - .long .Lsc_retint64 /* FFI_TYPE_SINT64 */ - .long .Lsc_retstruct /* FFI_TYPE_STRUCT */ - .long .Lsc_retint /* FFI_TYPE_POINTER */ - .long .Lsc_retstruct1b /* FFI_TYPE_SMALL_STRUCT_1B */ - .long .Lsc_retstruct2b /* FFI_TYPE_SMALL_STRUCT_2B */ - .long .Lsc_retstruct4b /* FFI_TYPE_SMALL_STRUCT_4B */ - -1: - add %ecx, %ecx - add %ecx, %ecx - add (%esp),%ecx - add $4, %esp - jmp *(%ecx) - - /* Sign/zero extend as appropriate. */ -.Lsc_retsint8: - movsbl %al, %eax - jmp .Lsc_retint - -.Lsc_retsint16: - movswl %ax, %eax - jmp .Lsc_retint - -.Lsc_retuint8: - movzbl %al, %eax - jmp .Lsc_retint - -.Lsc_retuint16: - movzwl %ax, %eax - jmp .Lsc_retint - -.Lsc_retint: - # Load %ecx with the pointer to storage for the return value - movl 24(%ebp),%ecx - movl %eax,0(%ecx) - jmp .Lsc_epilogue - -.Lsc_retfloat: - # Load %ecx with the pointer to storage for the return value - movl 24(%ebp),%ecx - fstps (%ecx) - jmp .Lsc_epilogue - -.Lsc_retdouble: - # Load %ecx with the pointer to storage for the return value - movl 24(%ebp),%ecx - fstpl (%ecx) - jmp .Lsc_epilogue - -.Lsc_retlongdouble: - # Load %ecx with the pointer to storage for the return value - movl 24(%ebp),%ecx - fstpt (%ecx) - jmp .Lsc_epilogue - -.Lsc_retint64: - # Load %ecx with the pointer to storage for the return value - movl 24(%ebp),%ecx - movl %eax,0(%ecx) - movl %edx,4(%ecx) - jmp .Lsc_epilogue - -.Lsc_retstruct1b: - # Load %ecx with the pointer to storage for the return value - movl 24(%ebp),%ecx - movb %al,0(%ecx) - jmp .Lsc_epilogue - -.Lsc_retstruct2b: - # Load %ecx with the pointer to storage for the return value - movl 24(%ebp),%ecx - movw %ax,0(%ecx) - jmp .Lsc_epilogue - -.Lsc_retstruct4b: - # Load %ecx with the pointer to storage for the return value - movl 24(%ebp),%ecx - movl %eax,0(%ecx) - jmp .Lsc_epilogue - -.Lsc_retstruct: - # Nothing to do! - -.Lsc_noretval: -.Lsc_epilogue: - movl %ebp,%esp - popl %ebp - ret -.ffi_call_STDCALL_end: -.LFE2: - - # This assumes we are using gas. - .balign 16 .globl _ffi_closure_SYSV .def _ffi_closure_SYSV; .scl 2; .type 32; .endef _ffi_closure_SYSV: @@ -742,38 +949,6 @@ .LEFDE1: -.LSFDE2: - .long .LEFDE2-.LASFDE2 /* FDE Length */ -.LASFDE2: - .long .LASFDE2-.Lframe1 /* FDE CIE offset */ -#if defined __PIC__ && defined HAVE_AS_X86_PCREL - .long .LFB2-. /* FDE initial location */ -#else - .long .LFB2 -#endif - .long .LFE2-.LFB2 /* FDE address range */ -#ifdef __PIC__ - .byte 0x0 /* .uleb128 0x0; Augmentation size */ -#endif - /* DW_CFA_xxx CFI instructions go here. */ - - .byte 0x4 /* DW_CFA_advance_loc4 */ - .long .LCFI2-.LFB2 - .byte 0xe /* DW_CFA_def_cfa_offset CFA = r4 + 8 = 8(%esp) */ - .byte 0x8 /* .uleb128 0x8 */ - .byte 0x85 /* DW_CFA_offset, column 0x5 %ebp at CFA + 2 * -4 */ - .byte 0x2 /* .uleb128 0x2 */ - - .byte 0x4 /* DW_CFA_advance_loc4 */ - .long .LCFI3-.LCFI2 - .byte 0xd /* DW_CFA_def_cfa_register CFA = r5 = %ebp */ - .byte 0x5 /* .uleb128 0x5 */ - - /* End of DW_CFA_xxx CFI instructions. */ - .align 4 -.LEFDE2: - - .LSFDE3: .long .LEFDE3-.LASFDE3 /* FDE Length */ .LASFDE3: @@ -875,3 +1050,6 @@ /* End of DW_CFA_xxx CFI instructions. */ .align 4 .LEFDE5: + +#endif /* !_MSC_VER */ + Modified: python/branches/py3k/Modules/_ctypes/libffi/testsuite/lib/libffi-dg.exp ============================================================================== --- python/branches/py3k/Modules/_ctypes/libffi/testsuite/lib/libffi-dg.exp (original) +++ python/branches/py3k/Modules/_ctypes/libffi/testsuite/lib/libffi-dg.exp Fri Mar 19 20:02:09 2010 @@ -1,8 +1,8 @@ -# Copyright (C) 2003, 2005, 2008, 2009 Free Software Foundation, Inc. +# Copyright (C) 2003, 2005, 2008, 2009, 2010 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 2 of the License, or +# the Free Software Foundation; either version 3 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, Modified: python/branches/py3k/Modules/_ctypes/libffi/testsuite/libffi.call/cls_align_sint64.c ============================================================================== --- python/branches/py3k/Modules/_ctypes/libffi/testsuite/libffi.call/cls_align_sint64.c (original) +++ python/branches/py3k/Modules/_ctypes/libffi/testsuite/libffi.call/cls_align_sint64.c Fri Mar 19 20:02:09 2010 @@ -5,6 +5,7 @@ Originator: 20031203 */ /* { dg-do run } */ +/* { dg-options "-Wno-format" { target alpha*-dec-osf* } } */ #include "ffitest.h" typedef struct cls_struct_align { Modified: python/branches/py3k/Modules/_ctypes/libffi/testsuite/libffi.call/cls_align_uint64.c ============================================================================== --- python/branches/py3k/Modules/_ctypes/libffi/testsuite/libffi.call/cls_align_uint64.c (original) +++ python/branches/py3k/Modules/_ctypes/libffi/testsuite/libffi.call/cls_align_uint64.c Fri Mar 19 20:02:09 2010 @@ -6,6 +6,7 @@ /* { dg-do run } */ +/* { dg-options "-Wno-format" { target alpha*-dec-osf* } } */ #include "ffitest.h" typedef struct cls_struct_align { Modified: python/branches/py3k/Modules/_ctypes/libffi/testsuite/libffi.call/cls_longdouble.c ============================================================================== --- python/branches/py3k/Modules/_ctypes/libffi/testsuite/libffi.call/cls_longdouble.c (original) +++ python/branches/py3k/Modules/_ctypes/libffi/testsuite/libffi.call/cls_longdouble.c Fri Mar 19 20:02:09 2010 @@ -5,7 +5,7 @@ Originator: Blake Chaffin */ /* { dg-excess-errors "no long double format" { xfail x86_64-*-mingw* x86_64-*-cygwin* } } */ -/* { dg-do run { xfail strongarm*-*-* xscale*-*-* } } */ +/* { dg-do run { xfail arm*-*-* strongarm*-*-* xscale*-*-* } } */ /* { dg-options -mlong-double-128 { target powerpc64*-*-* } } */ /* { dg-output "" { xfail x86_64-*-mingw* x86_64-*-cygwin* } } */ Modified: python/branches/py3k/Modules/_ctypes/libffi/testsuite/libffi.call/cls_ulonglong.c ============================================================================== --- python/branches/py3k/Modules/_ctypes/libffi/testsuite/libffi.call/cls_ulonglong.c (original) +++ python/branches/py3k/Modules/_ctypes/libffi/testsuite/libffi.call/cls_ulonglong.c Fri Mar 19 20:02:09 2010 @@ -5,6 +5,7 @@ Originator: 20030828 */ /* { dg-do run } */ +/* { dg-options "-Wno-format" { target alpha*-dec-osf* } } */ #include "ffitest.h" static void cls_ret_ulonglong_fn(ffi_cif* cif __UNUSED__, void* resp, Modified: python/branches/py3k/Modules/_ctypes/libffi/testsuite/libffi.call/ffitest.h ============================================================================== --- python/branches/py3k/Modules/_ctypes/libffi/testsuite/libffi.call/ffitest.h (original) +++ python/branches/py3k/Modules/_ctypes/libffi/testsuite/libffi.call/ffitest.h Fri Mar 19 20:02:09 2010 @@ -60,6 +60,18 @@ #define PRIuLL "llu" #endif +/* Tru64 UNIX kludge. */ +#if defined(__alpha__) && defined(__osf__) +/* Tru64 UNIX V4.0 doesn't support %lld/%lld, but long is 64-bit. */ +#undef PRIdLL +#define PRIdLL "ld" +#undef PRIuLL +#define PRIuLL "lu" +#define PRId64 "ld" +#define PRIu64 "lu" +#define PRIuPTR "lu" +#endif + /* PA HP-UX kludge. */ #if defined(__hppa__) && defined(__hpux__) && !defined(PRIuPTR) #define PRIuPTR "lu" Modified: python/branches/py3k/Modules/_ctypes/libffi/testsuite/libffi.call/return_ll1.c ============================================================================== --- python/branches/py3k/Modules/_ctypes/libffi/testsuite/libffi.call/return_ll1.c (original) +++ python/branches/py3k/Modules/_ctypes/libffi/testsuite/libffi.call/return_ll1.c Fri Mar 19 20:02:09 2010 @@ -5,6 +5,7 @@ Originator: 20050222 */ /* { dg-do run } */ +/* { dg-options "-Wno-format" { target alpha*-dec-osf* } } */ #include "ffitest.h" static long long return_ll(int ll0, long long ll1, int ll2) { Modified: python/branches/py3k/Modules/_ctypes/libffi/testsuite/libffi.call/stret_medium2.c ============================================================================== --- python/branches/py3k/Modules/_ctypes/libffi/testsuite/libffi.call/stret_medium2.c (original) +++ python/branches/py3k/Modules/_ctypes/libffi/testsuite/libffi.call/stret_medium2.c Fri Mar 19 20:02:09 2010 @@ -7,6 +7,7 @@ Originator: Blake Chaffin 6/21/2007 */ /* { dg-do run { xfail strongarm*-*-* xscale*-*-* } } */ +/* { dg-options "-Wno-format" { target alpha*-dec-osf* } } */ #include "ffitest.h" typedef struct struct_72byte { Modified: python/branches/py3k/Modules/_ctypes/libffi/testsuite/libffi.special/ffitestcxx.h ============================================================================== --- python/branches/py3k/Modules/_ctypes/libffi/testsuite/libffi.special/ffitestcxx.h (original) +++ python/branches/py3k/Modules/_ctypes/libffi/testsuite/libffi.special/ffitestcxx.h Fri Mar 19 20:02:09 2010 @@ -84,7 +84,7 @@ MAP_PRIVATE, dev_zero_fd, 0); #endif - if (page == MAP_FAILED) + if (page == (char *) MAP_FAILED) { perror ("virtual memory exhausted"); exit (1); From python-checkins at python.org Fri Mar 19 20:49:16 2010 From: python-checkins at python.org (thomas.heller) Date: Fri, 19 Mar 2010 20:49:16 +0100 (CET) Subject: [Python-checkins] r79104 - python/branches/branch_libffi-3_0_10-win Message-ID: <20100319194916.31E12FC3A@mail.python.org> Author: thomas.heller Date: Fri Mar 19 20:49:16 2010 New Revision: 79104 Log: Branch for porting ctypes/windows to libffi 3.0.10 Added: python/branches/branch_libffi-3_0_10-win/ - copied from r79103, /python/trunk/ From python-checkins at python.org Fri Mar 19 20:59:30 2010 From: python-checkins at python.org (thomas.heller) Date: Fri, 19 Mar 2010 20:59:30 +0100 (CET) Subject: [Python-checkins] r79105 - python/trunk Message-ID: <20100319195930.B152DE708@mail.python.org> Author: thomas.heller Date: Fri Mar 19 20:59:30 2010 New Revision: 79105 Log: Initialized merge tracking via "svnmerge" with revisions "1-79104" from svn+ssh://pythondev at svn.python.org/python/branches/branch_libffi-3_0_10-win Modified: python/trunk/ (props changed) From python-checkins at python.org Fri Mar 19 21:39:41 2010 From: python-checkins at python.org (benjamin.peterson) Date: Fri, 19 Mar 2010 21:39:41 +0100 (CET) Subject: [Python-checkins] r79106 - in python/trunk: Include/dtoa.h Include/pyctype.h Lib/distutils/tests/xxmodule.c Modules/_math.c Modules/_math.h Python/dtoa.c Python/pyctype.c Message-ID: <20100319203941.E7CCBFD3A@mail.python.org> Author: benjamin.peterson Date: Fri Mar 19 21:39:41 2010 New Revision: 79106 Log: set svn:eol-style to native on C files Modified: python/trunk/Include/dtoa.h (props changed) python/trunk/Include/pyctype.h (props changed) python/trunk/Lib/distutils/tests/xxmodule.c (props changed) python/trunk/Modules/_math.c (props changed) python/trunk/Modules/_math.h (props changed) python/trunk/Python/dtoa.c (props changed) python/trunk/Python/pyctype.c (props changed) From python-checkins at python.org Fri Mar 19 21:42:30 2010 From: python-checkins at python.org (benjamin.peterson) Date: Fri, 19 Mar 2010 21:42:30 +0100 (CET) Subject: [Python-checkins] r79107 - in python/branches/py3k: Include/dtoa.h Include/pyctype.h Modules/_math.c Modules/_math.h Python/dtoa.c Python/pyctype.c Message-ID: <20100319204230.718F7E370@mail.python.org> Author: benjamin.peterson Date: Fri Mar 19 21:42:30 2010 New Revision: 79107 Log: Merged revisions 79106 via svnmerge from svn+ssh://pythondev at svn.python.org/python/trunk ........ r79106 | benjamin.peterson | 2010-03-19 15:39:41 -0500 (Fri, 19 Mar 2010) | 1 line set svn:eol-style to native on C files ........ Modified: python/branches/py3k/ (props changed) python/branches/py3k/Include/dtoa.h (props changed) python/branches/py3k/Include/pyctype.h (props changed) python/branches/py3k/Modules/_math.c (props changed) python/branches/py3k/Modules/_math.h (props changed) python/branches/py3k/Python/dtoa.c (props changed) python/branches/py3k/Python/pyctype.c (props changed) From python-checkins at python.org Fri Mar 19 21:44:29 2010 From: python-checkins at python.org (benjamin.peterson) Date: Fri, 19 Mar 2010 21:44:29 +0100 (CET) Subject: [Python-checkins] r79108 - in python/branches/py3k/Lib/importlib: _bootstrap.py abc.py machinery.py test/__init__.py test/__main__.py test/abc.py test/benchmark.py test/builtin/__init__.py test/builtin/test_finder.py test/builtin/test_loader.py test/builtin/util.py test/extension/__init__.py test/extension/test_case_sensitivity.py test/extension/test_finder.py test/extension/test_loader.py test/extension/test_path_hook.py test/extension/util.py test/frozen/__init__.py test/frozen/test_finder.py test/frozen/test_loader.py test/import_/__init__.py test/import_/test___package__.py test/import_/test_api.py test/import_/test_caching.py test/import_/test_fromlist.py test/import_/test_meta_path.py test/import_/test_packages.py test/import_/test_path.py test/import_/test_relative_imports.py test/import_/util.py test/regrtest.py test/source/__init__.py test/source/test_abc_loader.py test/source/test_case_sensitivity.py test/source/test_file_loader.py test/source/test_finder.py test/source/test_path_hook.py test/source/test_source_encoding.py test/source/util.py test/test_abc.py test/test_api.py test/test_util.py test/util.py util.py Message-ID: <20100319204429.06F67E3C0@mail.python.org> Author: benjamin.peterson Date: Fri Mar 19 21:44:28 2010 New Revision: 79108 Log: set svn:eol-style on importlib files Modified: python/branches/py3k/Lib/importlib/_bootstrap.py (props changed) python/branches/py3k/Lib/importlib/abc.py (props changed) python/branches/py3k/Lib/importlib/machinery.py (props changed) python/branches/py3k/Lib/importlib/test/__init__.py (props changed) python/branches/py3k/Lib/importlib/test/__main__.py (props changed) python/branches/py3k/Lib/importlib/test/abc.py (props changed) python/branches/py3k/Lib/importlib/test/benchmark.py (props changed) python/branches/py3k/Lib/importlib/test/builtin/__init__.py (props changed) python/branches/py3k/Lib/importlib/test/builtin/test_finder.py (props changed) python/branches/py3k/Lib/importlib/test/builtin/test_loader.py (props changed) python/branches/py3k/Lib/importlib/test/builtin/util.py (props changed) python/branches/py3k/Lib/importlib/test/extension/__init__.py (props changed) python/branches/py3k/Lib/importlib/test/extension/test_case_sensitivity.py (props changed) python/branches/py3k/Lib/importlib/test/extension/test_finder.py (props changed) python/branches/py3k/Lib/importlib/test/extension/test_loader.py (props changed) python/branches/py3k/Lib/importlib/test/extension/test_path_hook.py (props changed) python/branches/py3k/Lib/importlib/test/extension/util.py (props changed) python/branches/py3k/Lib/importlib/test/frozen/__init__.py (props changed) python/branches/py3k/Lib/importlib/test/frozen/test_finder.py (props changed) python/branches/py3k/Lib/importlib/test/frozen/test_loader.py (props changed) python/branches/py3k/Lib/importlib/test/import_/__init__.py (props changed) python/branches/py3k/Lib/importlib/test/import_/test___package__.py (props changed) python/branches/py3k/Lib/importlib/test/import_/test_api.py (props changed) python/branches/py3k/Lib/importlib/test/import_/test_caching.py (props changed) python/branches/py3k/Lib/importlib/test/import_/test_fromlist.py (props changed) python/branches/py3k/Lib/importlib/test/import_/test_meta_path.py (props changed) python/branches/py3k/Lib/importlib/test/import_/test_packages.py (props changed) python/branches/py3k/Lib/importlib/test/import_/test_path.py (props changed) python/branches/py3k/Lib/importlib/test/import_/test_relative_imports.py (props changed) python/branches/py3k/Lib/importlib/test/import_/util.py (props changed) python/branches/py3k/Lib/importlib/test/regrtest.py (props changed) python/branches/py3k/Lib/importlib/test/source/__init__.py (props changed) python/branches/py3k/Lib/importlib/test/source/test_abc_loader.py (props changed) python/branches/py3k/Lib/importlib/test/source/test_case_sensitivity.py (props changed) python/branches/py3k/Lib/importlib/test/source/test_file_loader.py (props changed) python/branches/py3k/Lib/importlib/test/source/test_finder.py (props changed) python/branches/py3k/Lib/importlib/test/source/test_path_hook.py (props changed) python/branches/py3k/Lib/importlib/test/source/test_source_encoding.py (props changed) python/branches/py3k/Lib/importlib/test/source/util.py (props changed) python/branches/py3k/Lib/importlib/test/test_abc.py (props changed) python/branches/py3k/Lib/importlib/test/test_api.py (props changed) python/branches/py3k/Lib/importlib/test/test_util.py (props changed) python/branches/py3k/Lib/importlib/test/util.py (props changed) python/branches/py3k/Lib/importlib/util.py (props changed) From python-checkins at python.org Fri Mar 19 21:58:53 2010 From: python-checkins at python.org (benjamin.peterson) Date: Fri, 19 Mar 2010 21:58:53 +0100 (CET) Subject: [Python-checkins] r79109 - in python/branches/py3k: Demo/turtle/tdemo_nim.py Demo/turtle/tdemo_round_dance.py Doc/includes/dbpickle.py Message-ID: <20100319205853.212C7FCAA@mail.python.org> Author: benjamin.peterson Date: Fri Mar 19 21:58:52 2010 New Revision: 79109 Log: fix demo/doc eol Modified: python/branches/py3k/Demo/turtle/tdemo_nim.py (contents, props changed) python/branches/py3k/Demo/turtle/tdemo_round_dance.py (contents, props changed) python/branches/py3k/Doc/includes/dbpickle.py (props changed) Modified: python/branches/py3k/Demo/turtle/tdemo_nim.py ============================================================================== --- python/branches/py3k/Demo/turtle/tdemo_nim.py (original) +++ python/branches/py3k/Demo/turtle/tdemo_nim.py Fri Mar 19 21:58:52 2010 @@ -1,227 +1,226 @@ -""" turtle-example-suite: - - tdemo_nim.py - -Play nim against the computer. The player -who takes the last stick is the winner. - -Implements the model-view-controller -design pattern. -""" - - -import turtle -import random -import time - -SCREENWIDTH = 640 -SCREENHEIGHT = 480 - -MINSTICKS = 7 -MAXSTICKS = 31 - -HUNIT = SCREENHEIGHT // 12 -WUNIT = SCREENWIDTH // ((MAXSTICKS // 5) * 11 + (MAXSTICKS % 5) * 2) - -SCOLOR = (63, 63, 31) -HCOLOR = (255, 204, 204) -COLOR = (204, 204, 255) - -def randomrow(): - return random.randint(MINSTICKS, MAXSTICKS) - -def computerzug(state): - xored = state[0] ^ state[1] ^ state[2] - if xored == 0: - return randommove(state) - for z in range(3): - s = state[z] ^ xored - if s <= state[z]: - move = (z, s) - return move - -def randommove(state): - m = max(state) - while True: - z = random.randint(0,2) - if state[z] > (m > 1): - break - rand = random.randint(m > 1, state[z]-1) - return z, rand - - -class NimModel(object): - def __init__(self, game): - self.game = game - - def setup(self): - if self.game.state not in [Nim.CREATED, Nim.OVER]: - return - self.sticks = [randomrow(), randomrow(), randomrow()] - self.player = 0 - self.winner = None - self.game.view.setup() - self.game.state = Nim.RUNNING - - def move(self, row, col): - maxspalte = self.sticks[row] - self.sticks[row] = col - self.game.view.notify_move(row, col, maxspalte, self.player) - if self.game_over(): - self.game.state = Nim.OVER - self.winner = self.player - self.game.view.notify_over() - elif self.player == 0: - self.player = 1 - row, col = computerzug(self.sticks) - self.move(row, col) - self.player = 0 - - def game_over(self): - return self.sticks == [0, 0, 0] - - def notify_move(self, row, col): - if self.sticks[row] <= col: - return - self.move(row, col) - - -class Stick(turtle.Turtle): - def __init__(self, row, col, game): - turtle.Turtle.__init__(self, visible=False) - self.row = row - self.col = col - self.game = game - x, y = self.coords(row, col) - self.shape("square") - self.shapesize(HUNIT/10.0, WUNIT/20.0) - self.speed(0) - self.pu() - self.goto(x,y) - self.color("white") - self.showturtle() - - def coords(self, row, col): - packet, remainder = divmod(col, 5) - x = (3 + 11 * packet + 2 * remainder) * WUNIT - y = (2 + 3 * row) * HUNIT - return x - SCREENWIDTH // 2 + WUNIT // 2, SCREENHEIGHT // 2 - y - HUNIT // 2 - - def makemove(self, x, y): - if self.game.state != Nim.RUNNING: - return - self.game.controller.notify_move(self.row, self.col) - - -class NimView(object): - def __init__(self, game): - self.game = game - self.screen = game.screen - self.model = game.model - self.screen.colormode(255) - self.screen.tracer(False) - self.screen.bgcolor((240, 240, 255)) - self.writer = turtle.Turtle(visible=False) - self.writer.pu() - self.writer.speed(0) - self.sticks = {} - for row in range(3): - for col in range(MAXSTICKS): - self.sticks[(row, col)] = Stick(row, col, game) - self.display("... a moment please ...") - self.screen.tracer(True) - - def display(self, msg1, msg2=None): - self.screen.tracer(False) - self.writer.clear() - if msg2 is not None: - self.writer.goto(0, - SCREENHEIGHT // 2 + 48) - self.writer.pencolor("red") - self.writer.write(msg2, align="center", font=("Courier",18,"bold")) - self.writer.goto(0, - SCREENHEIGHT // 2 + 20) - self.writer.pencolor("black") - self.writer.write(msg1, align="center", font=("Courier",14,"bold")) - self.screen.tracer(True) - - - def setup(self): - self.screen.tracer(False) - for row in range(3): - for col in range(self.model.sticks[row]): - self.sticks[(row, col)].color(SCOLOR) - for row in range(3): - for col in range(self.model.sticks[row], MAXSTICKS): - self.sticks[(row, col)].color("white") - self.display("Your turn! Click leftmost stick to remove.") - self.screen.tracer(True) - - def notify_move(self, row, col, maxspalte, player): - if player == 0: - farbe = HCOLOR - for s in range(col, maxspalte): - self.sticks[(row, s)].color(farbe) - else: - self.display(" ... thinking ... ") - time.sleep(0.5) - self.display(" ... thinking ... aaah ...") - farbe = COLOR - for s in range(maxspalte-1, col-1, -1): - time.sleep(0.2) - self.sticks[(row, s)].color(farbe) - self.display("Your turn! Click leftmost stick to remove.") - - def notify_over(self): - if self.game.model.winner == 0: - msg2 = "Congrats. You're the winner!!!" - else: - msg2 = "Sorry, the computer is the winner." - self.display("To play again press space bar. To leave press ESC.", msg2) - - def clear(self): - if self.game.state == Nim.OVER: - self.screen.clear() - -class NimController(object): - - def __init__(self, game): - self.game = game - self.sticks = game.view.sticks - self.BUSY = False - for stick in self.sticks.values(): - stick.onclick(stick.makemove) - self.game.screen.onkey(self.game.model.setup, "space") - self.game.screen.onkey(self.game.view.clear, "Escape") - self.game.view.display("Press space bar to start game") - self.game.screen.listen() - - def notify_move(self, row, col): - if self.BUSY: - return - self.BUSY = True - self.game.model.notify_move(row, col) - self.BUSY = False - -class Nim(object): - CREATED = 0 - RUNNING = 1 - OVER = 2 - def __init__(self, screen): - self.state = Nim.CREATED - self.screen = screen - self.model = NimModel(self) - self.view = NimView(self) - self.controller = NimController(self) - - -mainscreen = turtle.Screen() -mainscreen.mode("standard") -mainscreen.setup(SCREENWIDTH, SCREENHEIGHT) - -def main(): - nim = Nim(mainscreen) - return "EVENTLOOP!" - -if __name__ == "__main__": - main() - turtle.mainloop() - +""" turtle-example-suite: + + tdemo_nim.py + +Play nim against the computer. The player +who takes the last stick is the winner. + +Implements the model-view-controller +design pattern. +""" + + +import turtle +import random +import time + +SCREENWIDTH = 640 +SCREENHEIGHT = 480 + +MINSTICKS = 7 +MAXSTICKS = 31 + +HUNIT = SCREENHEIGHT // 12 +WUNIT = SCREENWIDTH // ((MAXSTICKS // 5) * 11 + (MAXSTICKS % 5) * 2) + +SCOLOR = (63, 63, 31) +HCOLOR = (255, 204, 204) +COLOR = (204, 204, 255) + +def randomrow(): + return random.randint(MINSTICKS, MAXSTICKS) + +def computerzug(state): + xored = state[0] ^ state[1] ^ state[2] + if xored == 0: + return randommove(state) + for z in range(3): + s = state[z] ^ xored + if s <= state[z]: + move = (z, s) + return move + +def randommove(state): + m = max(state) + while True: + z = random.randint(0,2) + if state[z] > (m > 1): + break + rand = random.randint(m > 1, state[z]-1) + return z, rand + + +class NimModel(object): + def __init__(self, game): + self.game = game + + def setup(self): + if self.game.state not in [Nim.CREATED, Nim.OVER]: + return + self.sticks = [randomrow(), randomrow(), randomrow()] + self.player = 0 + self.winner = None + self.game.view.setup() + self.game.state = Nim.RUNNING + + def move(self, row, col): + maxspalte = self.sticks[row] + self.sticks[row] = col + self.game.view.notify_move(row, col, maxspalte, self.player) + if self.game_over(): + self.game.state = Nim.OVER + self.winner = self.player + self.game.view.notify_over() + elif self.player == 0: + self.player = 1 + row, col = computerzug(self.sticks) + self.move(row, col) + self.player = 0 + + def game_over(self): + return self.sticks == [0, 0, 0] + + def notify_move(self, row, col): + if self.sticks[row] <= col: + return + self.move(row, col) + + +class Stick(turtle.Turtle): + def __init__(self, row, col, game): + turtle.Turtle.__init__(self, visible=False) + self.row = row + self.col = col + self.game = game + x, y = self.coords(row, col) + self.shape("square") + self.shapesize(HUNIT/10.0, WUNIT/20.0) + self.speed(0) + self.pu() + self.goto(x,y) + self.color("white") + self.showturtle() + + def coords(self, row, col): + packet, remainder = divmod(col, 5) + x = (3 + 11 * packet + 2 * remainder) * WUNIT + y = (2 + 3 * row) * HUNIT + return x - SCREENWIDTH // 2 + WUNIT // 2, SCREENHEIGHT // 2 - y - HUNIT // 2 + + def makemove(self, x, y): + if self.game.state != Nim.RUNNING: + return + self.game.controller.notify_move(self.row, self.col) + + +class NimView(object): + def __init__(self, game): + self.game = game + self.screen = game.screen + self.model = game.model + self.screen.colormode(255) + self.screen.tracer(False) + self.screen.bgcolor((240, 240, 255)) + self.writer = turtle.Turtle(visible=False) + self.writer.pu() + self.writer.speed(0) + self.sticks = {} + for row in range(3): + for col in range(MAXSTICKS): + self.sticks[(row, col)] = Stick(row, col, game) + self.display("... a moment please ...") + self.screen.tracer(True) + + def display(self, msg1, msg2=None): + self.screen.tracer(False) + self.writer.clear() + if msg2 is not None: + self.writer.goto(0, - SCREENHEIGHT // 2 + 48) + self.writer.pencolor("red") + self.writer.write(msg2, align="center", font=("Courier",18,"bold")) + self.writer.goto(0, - SCREENHEIGHT // 2 + 20) + self.writer.pencolor("black") + self.writer.write(msg1, align="center", font=("Courier",14,"bold")) + self.screen.tracer(True) + + + def setup(self): + self.screen.tracer(False) + for row in range(3): + for col in range(self.model.sticks[row]): + self.sticks[(row, col)].color(SCOLOR) + for row in range(3): + for col in range(self.model.sticks[row], MAXSTICKS): + self.sticks[(row, col)].color("white") + self.display("Your turn! Click leftmost stick to remove.") + self.screen.tracer(True) + + def notify_move(self, row, col, maxspalte, player): + if player == 0: + farbe = HCOLOR + for s in range(col, maxspalte): + self.sticks[(row, s)].color(farbe) + else: + self.display(" ... thinking ... ") + time.sleep(0.5) + self.display(" ... thinking ... aaah ...") + farbe = COLOR + for s in range(maxspalte-1, col-1, -1): + time.sleep(0.2) + self.sticks[(row, s)].color(farbe) + self.display("Your turn! Click leftmost stick to remove.") + + def notify_over(self): + if self.game.model.winner == 0: + msg2 = "Congrats. You're the winner!!!" + else: + msg2 = "Sorry, the computer is the winner." + self.display("To play again press space bar. To leave press ESC.", msg2) + + def clear(self): + if self.game.state == Nim.OVER: + self.screen.clear() + +class NimController(object): + + def __init__(self, game): + self.game = game + self.sticks = game.view.sticks + self.BUSY = False + for stick in self.sticks.values(): + stick.onclick(stick.makemove) + self.game.screen.onkey(self.game.model.setup, "space") + self.game.screen.onkey(self.game.view.clear, "Escape") + self.game.view.display("Press space bar to start game") + self.game.screen.listen() + + def notify_move(self, row, col): + if self.BUSY: + return + self.BUSY = True + self.game.model.notify_move(row, col) + self.BUSY = False + +class Nim(object): + CREATED = 0 + RUNNING = 1 + OVER = 2 + def __init__(self, screen): + self.state = Nim.CREATED + self.screen = screen + self.model = NimModel(self) + self.view = NimView(self) + self.controller = NimController(self) + + +mainscreen = turtle.Screen() +mainscreen.mode("standard") +mainscreen.setup(SCREENWIDTH, SCREENHEIGHT) + +def main(): + nim = Nim(mainscreen) + return "EVENTLOOP!" + +if __name__ == "__main__": + main() + turtle.mainloop() Modified: python/branches/py3k/Demo/turtle/tdemo_round_dance.py ============================================================================== --- python/branches/py3k/Demo/turtle/tdemo_round_dance.py (original) +++ python/branches/py3k/Demo/turtle/tdemo_round_dance.py Fri Mar 19 21:58:52 2010 @@ -1,90 +1,86 @@ -""" turtle-example-suite: - - tdemo_round_dance.py - -(Needs version 1.1 of the turtle module that -comes with Python 3.1) - -Dancing turtles have a compound shape -consisting of a series of triangles of -decreasing size. - -Turtles march along a circle while rotating -pairwise in opposite direction, with one -exception. Does that breaking of symmetry -enhance the attractiveness of the example? - -Press any key to stop the animation. - -Technically: demonstrates use of compound -shapes, transformation of shapes as well as -cloning turtles. The animation is -controlled through update(). -""" - -from turtle import * - -def stop(): - global running - running = False - -def main(): - global running - clearscreen() - bgcolor("gray10") - tracer(False) - shape("triangle") - f = 0.793402 - phi = 9.064678 - s = 5 - c = 1 - # create compound shape - sh = Shape("compound") - for i in range(10): - shapesize(s) - p =get_shapepoly() - s *= f - c *= f - tilt(-phi) - sh.addcomponent(p, (c, 0.25, 1-c), "black") - register_shape("multitri", sh) - # create dancers - shapesize(1) - shape("multitri") - pu() - setpos(0, -200) - dancers = [] - for i in range(180): - fd(7) - tilt(-4) - lt(2) - update() - if i % 12 == 0: - dancers.append(clone()) - home() - # dance - running = True - onkeypress(stop) - listen() - cs = 1 - while running: - ta = -4 - for dancer in dancers: - dancer.fd(7) - dancer.lt(2) - dancer.tilt(ta) - ta = -4 if ta > 0 else 2 - if cs < 180: - right(4) - shapesize(cs) - cs *= 1.005 - update() - return "DONE!" - -if __name__=='__main__': - print(main()) - mainloop() - - - - +""" turtle-example-suite: + + tdemo_round_dance.py + +(Needs version 1.1 of the turtle module that +comes with Python 3.1) + +Dancing turtles have a compound shape +consisting of a series of triangles of +decreasing size. + +Turtles march along a circle while rotating +pairwise in opposite direction, with one +exception. Does that breaking of symmetry +enhance the attractiveness of the example? + +Press any key to stop the animation. + +Technically: demonstrates use of compound +shapes, transformation of shapes as well as +cloning turtles. The animation is +controlled through update(). +""" + +from turtle import * + +def stop(): + global running + running = False + +def main(): + global running + clearscreen() + bgcolor("gray10") + tracer(False) + shape("triangle") + f = 0.793402 + phi = 9.064678 + s = 5 + c = 1 + # create compound shape + sh = Shape("compound") + for i in range(10): + shapesize(s) + p =get_shapepoly() + s *= f + c *= f + tilt(-phi) + sh.addcomponent(p, (c, 0.25, 1-c), "black") + register_shape("multitri", sh) + # create dancers + shapesize(1) + shape("multitri") + pu() + setpos(0, -200) + dancers = [] + for i in range(180): + fd(7) + tilt(-4) + lt(2) + update() + if i % 12 == 0: + dancers.append(clone()) + home() + # dance + running = True + onkeypress(stop) + listen() + cs = 1 + while running: + ta = -4 + for dancer in dancers: + dancer.fd(7) + dancer.lt(2) + dancer.tilt(ta) + ta = -4 if ta > 0 else 2 + if cs < 180: + right(4) + shapesize(cs) + cs *= 1.005 + update() + return "DONE!" + +if __name__=='__main__': + print(main()) + mainloop() From python-checkins at python.org Fri Mar 19 22:00:11 2010 From: python-checkins at python.org (benjamin.peterson) Date: Fri, 19 Mar 2010 22:00:11 +0100 (CET) Subject: [Python-checkins] r79110 - in python/branches/py3k/Lib/test: test_cprofile.py test_flufl.py test_urllib_response.py Message-ID: <20100319210011.F3CBFFB86@mail.python.org> Author: benjamin.peterson Date: Fri Mar 19 22:00:11 2010 New Revision: 79110 Log: fix test eol Modified: python/branches/py3k/Lib/test/test_cprofile.py (props changed) python/branches/py3k/Lib/test/test_flufl.py (props changed) python/branches/py3k/Lib/test/test_urllib_response.py (props changed) From python-checkins at python.org Fri Mar 19 22:00:32 2010 From: python-checkins at python.org (benjamin.peterson) Date: Fri, 19 Mar 2010 22:00:32 +0100 (CET) Subject: [Python-checkins] r79111 - in python/branches/py3k/Lib/urllib: __init__.py error.py response.py Message-ID: <20100319210032.9D5FCFB86@mail.python.org> Author: benjamin.peterson Date: Fri Mar 19 22:00:32 2010 New Revision: 79111 Log: set urllib svn:eol-style Modified: python/branches/py3k/Lib/urllib/__init__.py (props changed) python/branches/py3k/Lib/urllib/error.py (props changed) python/branches/py3k/Lib/urllib/response.py (props changed) From python-checkins at python.org Fri Mar 19 22:01:04 2010 From: python-checkins at python.org (benjamin.peterson) Date: Fri, 19 Mar 2010 22:01:04 +0100 (CET) Subject: [Python-checkins] r79112 - in python/branches/py3k/Modules: _posixsubprocess.c hashlib.h Message-ID: <20100319210104.7641DFB86@mail.python.org> Author: benjamin.peterson Date: Fri Mar 19 22:01:04 2010 New Revision: 79112 Log: set svn:eol-style on modules Modified: python/branches/py3k/Modules/_posixsubprocess.c (props changed) python/branches/py3k/Modules/hashlib.h (props changed) From python-checkins at python.org Fri Mar 19 22:01:27 2010 From: python-checkins at python.org (benjamin.peterson) Date: Fri, 19 Mar 2010 22:01:27 +0100 (CET) Subject: [Python-checkins] r79113 - python/branches/py3k/Misc/maintainers.rst Message-ID: <20100319210127.A7FB9FB86@mail.python.org> Author: benjamin.peterson Date: Fri Mar 19 22:01:27 2010 New Revision: 79113 Log: make maintainers.rst have correct eol Modified: python/branches/py3k/Misc/maintainers.rst (props changed) From python-checkins at python.org Fri Mar 19 22:14:00 2010 From: python-checkins at python.org (collin.winter) Date: Fri, 19 Mar 2010 22:14:00 +0100 (CET) Subject: [Python-checkins] r79114 - python/branches/py3k-jit/Misc/maintainers.rst Message-ID: <20100319211400.3B981FD89@mail.python.org> Author: collin.winter Date: Fri Mar 19 22:14:00 2010 New Revision: 79114 Log: Add JIT/LLVM section to maintainers.rst. Modified: python/branches/py3k-jit/Misc/maintainers.rst Modified: python/branches/py3k-jit/Misc/maintainers.rst ============================================================================== --- python/branches/py3k-jit/Misc/maintainers.rst (original) +++ python/branches/py3k-jit/Misc/maintainers.rst Fri Mar 19 22:14:00 2010 @@ -276,6 +276,7 @@ i18n lemburg import machinery brett.cannon, ncoghlan io pitrou, benjamin.peterson +jit compiler/llvm collin.winter, jeffrey.yasskin locale lemburg, loewis mathematics mark.dickinson, eric.smith, lemburg memory management tim_one, lemburg From python-checkins at python.org Fri Mar 19 22:14:48 2010 From: python-checkins at python.org (thomas.heller) Date: Fri, 19 Mar 2010 22:14:48 +0100 (CET) Subject: [Python-checkins] r79115 - in python/branches/branch_libffi-3_0_10-win: Modules/_ctypes/callbacks.c Modules/_ctypes/callproc.c Modules/_ctypes/ctypes.h Modules/_ctypes/libffi_msvc/LICENSE Modules/_ctypes/libffi_msvc/README Modules/_ctypes/libffi_msvc/README.ctypes Modules/_ctypes/libffi_msvc/ffi.c Modules/_ctypes/libffi_msvc/ffi.h Modules/_ctypes/libffi_msvc/ffi_common.h Modules/_ctypes/libffi_msvc/fficonfig.h Modules/_ctypes/libffi_msvc/ffitarget.h Modules/_ctypes/libffi_msvc/prep_cif.c Modules/_ctypes/libffi_msvc/types.c Modules/_ctypes/libffi_msvc/win32.c Modules/_ctypes/libffi_msvc/win64.asm Modules/_ctypes/malloc_closure.c PCbuild/_ctypes.vcproj Message-ID: <20100319211448.43D41FD4F@mail.python.org> Author: thomas.heller Date: Fri Mar 19 22:14:47 2010 New Revision: 79115 Log: Work in progress. 2 tests fail on x86/win32 because the stack checking code in ffi_call_win32 is not yet implemented. Remove most files from _ctypes/libffi_msvc, only two include files stay (updated from _ctypes/libffi/...). Other files are used in the cross-platform _ctypes/libffi directory. Removed: python/branches/branch_libffi-3_0_10-win/Modules/_ctypes/libffi_msvc/LICENSE python/branches/branch_libffi-3_0_10-win/Modules/_ctypes/libffi_msvc/README python/branches/branch_libffi-3_0_10-win/Modules/_ctypes/libffi_msvc/README.ctypes python/branches/branch_libffi-3_0_10-win/Modules/_ctypes/libffi_msvc/ffi.c python/branches/branch_libffi-3_0_10-win/Modules/_ctypes/libffi_msvc/ffi_common.h python/branches/branch_libffi-3_0_10-win/Modules/_ctypes/libffi_msvc/ffitarget.h python/branches/branch_libffi-3_0_10-win/Modules/_ctypes/libffi_msvc/prep_cif.c python/branches/branch_libffi-3_0_10-win/Modules/_ctypes/libffi_msvc/types.c python/branches/branch_libffi-3_0_10-win/Modules/_ctypes/libffi_msvc/win32.c python/branches/branch_libffi-3_0_10-win/Modules/_ctypes/libffi_msvc/win64.asm python/branches/branch_libffi-3_0_10-win/Modules/_ctypes/malloc_closure.c Modified: python/branches/branch_libffi-3_0_10-win/Modules/_ctypes/callbacks.c python/branches/branch_libffi-3_0_10-win/Modules/_ctypes/callproc.c python/branches/branch_libffi-3_0_10-win/Modules/_ctypes/ctypes.h python/branches/branch_libffi-3_0_10-win/Modules/_ctypes/libffi_msvc/ffi.h python/branches/branch_libffi-3_0_10-win/Modules/_ctypes/libffi_msvc/fficonfig.h python/branches/branch_libffi-3_0_10-win/PCbuild/_ctypes.vcproj Modified: python/branches/branch_libffi-3_0_10-win/Modules/_ctypes/callbacks.c ============================================================================== --- python/branches/branch_libffi-3_0_10-win/Modules/_ctypes/callbacks.c (original) +++ python/branches/branch_libffi-3_0_10-win/Modules/_ctypes/callbacks.c Fri Mar 19 22:14:47 2010 @@ -22,7 +22,7 @@ Py_XDECREF(self->callable); Py_XDECREF(self->restype); if (self->pcl) - _ctypes_free_closure(self->pcl); + ffi_closure_free(self->pcl); PyObject_GC_Del(self); } @@ -421,8 +421,7 @@ assert(CThunk_CheckExact(p)); - p->pcl = _ctypes_alloc_closure(); - if (p->pcl == NULL) { + if (ffi_closure_alloc(sizeof(ffi_closure), &p->pcl) == NULL) { PyErr_NoMemory(); goto error; } Modified: python/branches/branch_libffi-3_0_10-win/Modules/_ctypes/callproc.c ============================================================================== --- python/branches/branch_libffi-3_0_10-win/Modules/_ctypes/callproc.c (original) +++ python/branches/branch_libffi-3_0_10-win/Modules/_ctypes/callproc.c Fri Mar 19 22:14:47 2010 @@ -807,7 +807,11 @@ #ifndef DONT_USE_SEH __try { #endif +/* + XXX THIS CODE MUST BE ENABLED LATER AGAIN, AFTER libffi is patched for X86_WIN32! delta = +*/ + delta = 0; #endif ffi_call(&cif, (void *)pProc, resmem, avalues); #ifdef MS_WIN32 Modified: python/branches/branch_libffi-3_0_10-win/Modules/_ctypes/ctypes.h ============================================================================== --- python/branches/branch_libffi-3_0_10-win/Modules/_ctypes/ctypes.h (original) +++ python/branches/branch_libffi-3_0_10-win/Modules/_ctypes/ctypes.h Fri Mar 19 22:14:47 2010 @@ -428,9 +428,6 @@ #endif #endif -extern void _ctypes_free_closure(void *); -extern void *_ctypes_alloc_closure(void); - extern void _ctypes_add_traceback(char *, char *, int); extern PyObject *PyCData_FromBaseObj(PyObject *type, PyObject *base, Py_ssize_t index, char *adr); Deleted: python/branches/branch_libffi-3_0_10-win/Modules/_ctypes/libffi_msvc/LICENSE ============================================================================== --- python/branches/branch_libffi-3_0_10-win/Modules/_ctypes/libffi_msvc/LICENSE Fri Mar 19 22:14:47 2010 +++ (empty file) @@ -1,20 +0,0 @@ -libffi - 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. Deleted: python/branches/branch_libffi-3_0_10-win/Modules/_ctypes/libffi_msvc/README ============================================================================== --- python/branches/branch_libffi-3_0_10-win/Modules/_ctypes/libffi_msvc/README Fri Mar 19 22:14:47 2010 +++ (empty file) @@ -1,500 +0,0 @@ -This directory contains the libffi package, which is not part of GCC but -shipped with GCC as convenience. - -Status -====== - -libffi-2.00 has not been released yet! This is a development snapshot! - -libffi-1.20 was released on October 5, 1998. Check the libffi web -page for updates: . - - -What is libffi? -=============== - -Compilers for high level languages generate code that follow certain -conventions. These conventions are necessary, in part, for separate -compilation to work. One such convention is the "calling -convention". The "calling convention" is essentially a set of -assumptions made by the compiler about where function arguments will -be found on entry to a function. A "calling convention" also specifies -where the return value for a function is found. - -Some programs may not know at the time of compilation what arguments -are to be passed to a function. For instance, an interpreter may be -told at run-time about the number and types of arguments used to call -a given function. Libffi can be used in such programs to provide a -bridge from the interpreter program to compiled code. - -The libffi library provides a portable, high level programming -interface to various calling conventions. This allows a programmer to -call any function specified by a call interface description at run -time. - -Ffi stands for Foreign Function Interface. A foreign function -interface is the popular name for the interface that allows code -written in one language to call code written in another language. The -libffi library really only provides the lowest, machine dependent -layer of a fully featured foreign function interface. A layer must -exist above libffi that handles type conversions for values passed -between the two languages. - - -Supported Platforms and Prerequisites -===================================== - -Libffi has been ported to: - - SunOS 4.1.3 & Solaris 2.x (SPARC-V8, SPARC-V9) - - Irix 5.3 & 6.2 (System V/o32 & n32) - - Intel x86 - Linux (System V ABI) - - Alpha - Linux and OSF/1 - - m68k - Linux (System V ABI) - - PowerPC - Linux (System V ABI, Darwin, AIX) - - ARM - Linux (System V ABI) - -Libffi has been tested with the egcs 1.0.2 gcc compiler. Chances are -that other versions will work. Libffi has also been built and tested -with the SGI compiler tools. - -On PowerPC, the tests failed (see the note below). - -You must use GNU make to build libffi. SGI's make will not work. -Sun's probably won't either. - -If you port libffi to another platform, please let me know! I assume -that some will be easy (x86 NetBSD), and others will be more difficult -(HP). - - -Installing libffi -================= - -[Note: before actually performing any of these installation steps, - you may wish to read the "Platform Specific Notes" below.] - -First you must configure the distribution for your particular -system. Go to the directory you wish to build libffi in and run the -"configure" program found in the root directory of the libffi source -distribution. - -You may want to tell configure where to install the libffi library and -header files. To do that, use the --prefix configure switch. Libffi -will install under /usr/local by default. - -If you want to enable extra run-time debugging checks use the the ---enable-debug configure switch. This is useful when your program dies -mysteriously while using libffi. - -Another useful configure switch is --enable-purify-safety. Using this -will add some extra code which will suppress certain warnings when you -are using Purify with libffi. Only use this switch when using -Purify, as it will slow down the library. - -Configure has many other options. Use "configure --help" to see them all. - -Once configure has finished, type "make". Note that you must be using -GNU make. SGI's make will not work. Sun's probably won't either. -You can ftp GNU make from prep.ai.mit.edu:/pub/gnu. - -To ensure that libffi is working as advertised, type "make test". - -To install the library and header files, type "make install". - - -Using libffi -============ - - The Basics - ---------- - -Libffi assumes that you have a pointer to the function you wish to -call and that you know the number and types of arguments to pass it, -as well as the return type of the function. - -The first thing you must do is create an ffi_cif object that matches -the signature of the function you wish to call. The cif in ffi_cif -stands for Call InterFace. To prepare a call interface object, use the -following function: - -ffi_status ffi_prep_cif(ffi_cif *cif, ffi_abi abi, - unsigned int nargs, - ffi_type *rtype, ffi_type **atypes); - - CIF is a pointer to the call interface object you wish - to initialize. - - ABI is an enum that specifies the calling convention - to use for the call. FFI_DEFAULT_ABI defaults - to the system's native calling convention. Other - ABI's may be used with care. They are system - specific. - - NARGS is the number of arguments this function accepts. - libffi does not yet support vararg functions. - - RTYPE is a pointer to an ffi_type structure that represents - the return type of the function. Ffi_type objects - describe the types of values. libffi provides - ffi_type objects for many of the native C types: - signed int, unsigned int, signed char, unsigned char, - etc. There is also a pointer ffi_type object and - a void ffi_type. Use &ffi_type_void for functions that - don't return values. - - ATYPES is a vector of ffi_type pointers. ARGS must be NARGS long. - If NARGS is 0, this is ignored. - - -ffi_prep_cif will return a status code that you are responsible -for checking. It will be one of the following: - - FFI_OK - All is good. - - FFI_BAD_TYPEDEF - One of the ffi_type objects that ffi_prep_cif - came across is bad. - - -Before making the call, the VALUES vector should be initialized -with pointers to the appropriate argument values. - -To call the the function using the initialized ffi_cif, use the -ffi_call function: - -void ffi_call(ffi_cif *cif, void *fn, void *rvalue, void **avalues); - - CIF is a pointer to the ffi_cif initialized specifically - for this function. - - FN is a pointer to the function you want to call. - - RVALUE is a pointer to a chunk of memory that is to hold the - result of the function call. Currently, it must be - at least one word in size (except for the n32 version - under Irix 6.x, which must be a pointer to an 8 byte - aligned value (a long long). It must also be at least - word aligned (depending on the return type, and the - system's alignment requirements). If RTYPE is - &ffi_type_void, this is ignored. If RVALUE is NULL, - the return value is discarded. - - AVALUES is a vector of void* that point to the memory locations - holding the argument values for a call. - If NARGS is 0, this is ignored. - - -If you are expecting a return value from FN it will have been stored -at RVALUE. - - - - An Example - ---------- - -Here is a trivial example that calls puts() a few times. - - #include - #include - - int main() - { - ffi_cif cif; - ffi_type *args[1]; - void *values[1]; - char *s; - int rc; - - /* Initialize the argument info vectors */ - args[0] = &ffi_type_uint; - values[0] = &s; - - /* Initialize the cif */ - if (ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 1, - &ffi_type_uint, args) == FFI_OK) - { - s = "Hello World!"; - ffi_call(&cif, puts, &rc, values); - /* rc now holds the result of the call to puts */ - - /* values holds a pointer to the function's arg, so to - call puts() again all we need to do is change the - value of s */ - s = "This is cool!"; - ffi_call(&cif, puts, &rc, values); - } - - return 0; - } - - - - Aggregate Types - --------------- - -Although libffi has no special support for unions or bit-fields, it is -perfectly happy passing structures back and forth. You must first -describe the structure to libffi by creating a new ffi_type object -for it. Here is the definition of ffi_type: - - typedef struct _ffi_type - { - unsigned size; - short alignment; - short type; - struct _ffi_type **elements; - } ffi_type; - -All structures must have type set to FFI_TYPE_STRUCT. You may set -size and alignment to 0. These will be calculated and reset to the -appropriate values by ffi_prep_cif(). - -elements is a NULL terminated array of pointers to ffi_type objects -that describe the type of the structure elements. These may, in turn, -be structure elements. - -The following example initializes a ffi_type object representing the -tm struct from Linux's time.h: - - struct tm { - int tm_sec; - int tm_min; - int tm_hour; - int tm_mday; - int tm_mon; - int tm_year; - int tm_wday; - int tm_yday; - int tm_isdst; - /* Those are for future use. */ - long int __tm_gmtoff__; - __const char *__tm_zone__; - }; - - { - ffi_type tm_type; - ffi_type *tm_type_elements[12]; - int i; - - tm_type.size = tm_type.alignment = 0; - tm_type.elements = &tm_type_elements; - - for (i = 0; i < 9; i++) - tm_type_elements[i] = &ffi_type_sint; - - tm_type_elements[9] = &ffi_type_slong; - tm_type_elements[10] = &ffi_type_pointer; - tm_type_elements[11] = NULL; - - /* tm_type can now be used to represent tm argument types and - return types for ffi_prep_cif() */ - } - - - -Platform Specific Notes -======================= - - Intel x86 - --------- - -There are no known problems with the x86 port. - - Sun SPARC - SunOS 4.1.3 & Solaris 2.x - ------------------------------------- - -You must use GNU Make to build libffi on Sun platforms. - - MIPS - Irix 5.3 & 6.x - --------------------- - -Irix 6.2 and better supports three different calling conventions: o32, -n32 and n64. Currently, libffi only supports both o32 and n32 under -Irix 6.x, but only o32 under Irix 5.3. Libffi will automatically be -configured for whichever calling convention it was built for. - -By default, the configure script will try to build libffi with the GNU -development tools. To build libffi with the SGI development tools, set -the environment variable CC to either "cc -32" or "cc -n32" before -running configure under Irix 6.x (depending on whether you want an o32 -or n32 library), or just "cc" for Irix 5.3. - -With the n32 calling convention, when returning structures smaller -than 16 bytes, be sure to provide an RVALUE that is 8 byte aligned. -Here's one way of forcing this: - - double struct_storage[2]; - my_small_struct *s = (my_small_struct *) struct_storage; - /* Use s for RVALUE */ - -If you don't do this you are liable to get spurious bus errors. - -"long long" values are not supported yet. - -You must use GNU Make to build libffi on SGI platforms. - - ARM - System V ABI - ------------------ - -The ARM port was performed on a NetWinder running ARM Linux ELF -(2.0.31) and gcc 2.8.1. - - - - PowerPC System V ABI - -------------------- - -There are two `System V ABI's which libffi implements for PowerPC. -They differ only in how small structures are returned from functions. - -In the FFI_SYSV version, structures that are 8 bytes or smaller are -returned in registers. This is what GCC does when it is configured -for solaris, and is what the System V ABI I have (dated September -1995) says. - -In the FFI_GCC_SYSV version, all structures are returned the same way: -by passing a pointer as the first argument to the function. This is -what GCC does when it is configured for linux or a generic sysv -target. - -EGCS 1.0.1 (and probably other versions of EGCS/GCC) also has a -inconsistency with the SysV ABI: When a procedure is called with many -floating-point arguments, some of them get put on the stack. They are -all supposed to be stored in double-precision format, even if they are -only single-precision, but EGCS stores single-precision arguments as -single-precision anyway. This causes one test to fail (the `many -arguments' test). - - -What's With The Crazy Comments? -=============================== - -You might notice a number of cryptic comments in the code, delimited -by /*@ and @*/. These are annotations read by the program LCLint, a -tool for statically checking C programs. You can read all about it at -. - - -History -======= - -1.20 Oct-5-98 - Raffaele Sena produces ARM port. - -1.19 Oct-5-98 - Fixed x86 long double and long long return support. - m68k bug fixes from Andreas Schwab. - Patch for DU assembler compatibility for the Alpha from Richard - Henderson. - -1.18 Apr-17-98 - Bug fixes and MIPS configuration changes. - -1.17 Feb-24-98 - Bug fixes and m68k port from Andreas Schwab. PowerPC port from - Geoffrey Keating. Various bug x86, Sparc and MIPS bug fixes. - -1.16 Feb-11-98 - Richard Henderson produces Alpha port. - -1.15 Dec-4-97 - Fixed an n32 ABI bug. New libtool, auto* support. - -1.14 May-13-97 - libtool is now used to generate shared and static libraries. - Fixed a minor portability problem reported by Russ McManus - . - -1.13 Dec-2-96 - Added --enable-purify-safety to keep Purify from complaining - about certain low level code. - Sparc fix for calling functions with < 6 args. - Linux x86 a.out fix. - -1.12 Nov-22-96 - Added missing ffi_type_void, needed for supporting void return - types. Fixed test case for non MIPS machines. Cygnus Support - is now Cygnus Solutions. - -1.11 Oct-30-96 - Added notes about GNU make. - -1.10 Oct-29-96 - Added configuration fix for non GNU compilers. - -1.09 Oct-29-96 - Added --enable-debug configure switch. Clean-ups based on LCLint - feedback. ffi_mips.h is always installed. Many configuration - fixes. Fixed ffitest.c for sparc builds. - -1.08 Oct-15-96 - Fixed n32 problem. Many clean-ups. - -1.07 Oct-14-96 - Gordon Irlam rewrites v8.S again. Bug fixes. - -1.06 Oct-14-96 - Gordon Irlam improved the sparc port. - -1.05 Oct-14-96 - Interface changes based on feedback. - -1.04 Oct-11-96 - Sparc port complete (modulo struct passing bug). - -1.03 Oct-10-96 - Passing struct args, and returning struct values works for - all architectures/calling conventions. Expanded tests. - -1.02 Oct-9-96 - Added SGI n32 support. Fixed bugs in both o32 and Linux support. - Added "make test". - -1.01 Oct-8-96 - Fixed float passing bug in mips version. Restructured some - of the code. Builds cleanly with SGI tools. - -1.00 Oct-7-96 - First release. No public announcement. - - -Authors & Credits -================= - -libffi was written by Anthony Green . - -Portions of libffi were derived from Gianni Mariani's free gencall -library for Silicon Graphics machines. - -The closure mechanism was designed and implemented by Kresten Krab -Thorup. - -The Sparc port was derived from code contributed by the fine folks at -Visible Decisions Inc . Further enhancements were -made by Gordon Irlam at Cygnus Solutions . - -The Alpha port was written by Richard Henderson at Cygnus Solutions. - -Andreas Schwab ported libffi to m68k Linux and provided a number of -bug fixes. - -Geoffrey Keating ported libffi to the PowerPC. - -Raffaele Sena ported libffi to the ARM. - -Jesper Skov and Andrew Haley both did more than their fair share of -stepping through the code and tracking down bugs. - -Thanks also to Tom Tromey for bug fixes and configuration help. - -Thanks to Jim Blandy, who provided some useful feedback on the libffi -interface. - -If you have a problem, or have found a bug, please send a note to -green at cygnus.com. Deleted: python/branches/branch_libffi-3_0_10-win/Modules/_ctypes/libffi_msvc/README.ctypes ============================================================================== --- python/branches/branch_libffi-3_0_10-win/Modules/_ctypes/libffi_msvc/README.ctypes Fri Mar 19 22:14:47 2010 +++ (empty file) @@ -1,7 +0,0 @@ -The purpose is to hack the libffi sources so that they can be compiled -with MSVC, and to extend them so that they have the features I need -for ctypes. - -I retrieved the libffi sources from the gcc cvs repository on -2004-01-27. Then I did 'configure' in a 'build' subdirectory on a x86 -linux system, and copied the files I found useful. Deleted: python/branches/branch_libffi-3_0_10-win/Modules/_ctypes/libffi_msvc/ffi.c ============================================================================== --- python/branches/branch_libffi-3_0_10-win/Modules/_ctypes/libffi_msvc/ffi.c Fri Mar 19 22:14:47 2010 +++ (empty file) @@ -1,457 +0,0 @@ -/* ----------------------------------------------------------------------- - ffi.c - Copyright (c) 1996, 1998, 1999, 2001 Red Hat, Inc. - Copyright (c) 2002 Ranjit Mathew - Copyright (c) 2002 Bo Thorsen - Copyright (c) 2002 Roger Sayle - - x86 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 - -/* ffi_prep_args is called by the assembly routine once stack space - has been allocated for the function's arguments */ - -extern void Py_FatalError(const char *msg); - -/*@-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 += sizeof(void *); - } - - p_argv = ecif->avalue; - - for (i = ecif->cif->nargs, p_arg = ecif->cif->arg_types; - i != 0; - i--, p_arg++) - { - size_t z; - - /* Align if necessary */ - if ((sizeof(void *) - 1) & (size_t) argp) - argp = (char *) ALIGN(argp, sizeof(void *)); - - 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_SINT32: - *(signed int *) argp = (signed int)*(SINT32 *)(* p_argv); - break; - - case FFI_TYPE_UINT32: - *(unsigned int *) argp = (unsigned int)*(UINT32 *)(* p_argv); - break; - - case FFI_TYPE_STRUCT: - *(unsigned int *) argp = (unsigned int)*(UINT32 *)(* p_argv); - break; - - default: - FFI_ASSERT(0); - } - } - else - { - memcpy(argp, *p_argv, z); - } - p_argv++; - argp += z; - } - - if (argp - stack > ecif->cif->bytes) - { - Py_FatalError("FFI BUG: not enough stack space for arguments"); - } - 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_SINT64: - case FFI_TYPE_FLOAT: - case FFI_TYPE_DOUBLE: - case FFI_TYPE_LONGDOUBLE: - cif->flags = (unsigned) cif->rtype->type; - break; - - case FFI_TYPE_UINT64: -#ifdef _WIN64 - case FFI_TYPE_POINTER: -#endif - cif->flags = FFI_TYPE_SINT64; - break; - - default: - cif->flags = FFI_TYPE_INT; - break; - } - - return FFI_OK; -} - -#ifdef _WIN32 -extern int -ffi_call_x86(void (*)(char *, extended_cif *), - /*@out@*/ extended_cif *, - unsigned, unsigned, - /*@out@*/ unsigned *, - void (*fn)()); -#endif - -#ifdef _WIN64 -extern int -ffi_call_AMD64(void (*)(char *, extended_cif *), - /*@out@*/ extended_cif *, - unsigned, unsigned, - /*@out@*/ unsigned *, - void (*fn)()); -#endif - -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) - { -#if !defined(_WIN64) - case FFI_SYSV: - case FFI_STDCALL: - return ffi_call_x86(ffi_prep_args, &ecif, cif->bytes, - cif->flags, ecif.rvalue, fn); - break; -#else - case FFI_SYSV: - /*@-usedef@*/ - /* Function call needs at least 40 bytes stack size, on win64 AMD64 */ - return ffi_call_AMD64(ffi_prep_args, &ecif, cif->bytes ? cif->bytes : 40, - cif->flags, ecif.rvalue, fn); - /*@=usedef@*/ - break; -#endif - - default: - FFI_ASSERT(0); - break; - } - return -1; /* theller: Hrm. */ -} - - -/** private members **/ - -static void ffi_prep_incoming_args_SYSV (char *stack, void **ret, - void** args, ffi_cif* cif); -/* This function is jumped to by the trampoline */ - -#ifdef _WIN64 -void * -#else -static void __fastcall -#endif -ffi_closure_SYSV (ffi_closure *closure, int *argp) -{ - // this is our return value storage - long double res; - - // our various things... - ffi_cif *cif; - void **arg_area; - unsigned short rtype; - void *resp = (void*)&res; - void *args = &argp[1]; - - cif = closure->cif; - arg_area = (void**) alloca (cif->nargs * sizeof (void*)); - - /* this call will initialize ARG_AREA, 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 RESP to point to the - * structure return address. */ - - ffi_prep_incoming_args_SYSV(args, (void**)&resp, arg_area, cif); - - (closure->fun) (cif, resp, arg_area, closure->user_data); - - rtype = cif->flags; - -#if defined(_WIN32) && !defined(_WIN64) -#ifdef _MSC_VER - /* now, do a generic return based on the value of rtype */ - if (rtype == FFI_TYPE_INT) - { - _asm mov eax, resp ; - _asm mov eax, [eax] ; - } - else if (rtype == FFI_TYPE_FLOAT) - { - _asm mov eax, resp ; - _asm fld DWORD PTR [eax] ; -// asm ("flds (%0)" : : "r" (resp) : "st" ); - } - else if (rtype == FFI_TYPE_DOUBLE) - { - _asm mov eax, resp ; - _asm fld QWORD PTR [eax] ; -// asm ("fldl (%0)" : : "r" (resp) : "st", "st(1)" ); - } - else if (rtype == FFI_TYPE_LONGDOUBLE) - { -// asm ("fldt (%0)" : : "r" (resp) : "st", "st(1)" ); - } - else if (rtype == FFI_TYPE_SINT64) - { - _asm mov edx, resp ; - _asm mov eax, [edx] ; - _asm mov edx, [edx + 4] ; -// asm ("movl 0(%0),%%eax;" -// "movl 4(%0),%%edx" -// : : "r"(resp) -// : "eax", "edx"); - } -#else - /* now, do a generic return based on the value of rtype */ - if (rtype == FFI_TYPE_INT) - { - asm ("movl (%0),%%eax" : : "r" (resp) : "eax"); - } - else if (rtype == FFI_TYPE_FLOAT) - { - asm ("flds (%0)" : : "r" (resp) : "st" ); - } - else if (rtype == FFI_TYPE_DOUBLE) - { - asm ("fldl (%0)" : : "r" (resp) : "st", "st(1)" ); - } - else if (rtype == FFI_TYPE_LONGDOUBLE) - { - asm ("fldt (%0)" : : "r" (resp) : "st", "st(1)" ); - } - else if (rtype == FFI_TYPE_SINT64) - { - asm ("movl 0(%0),%%eax;" - "movl 4(%0),%%edx" - : : "r"(resp) - : "eax", "edx"); - } -#endif -#endif - -#ifdef _WIN64 - /* The result is returned in rax. This does the right thing for - result types except for floats; we have to 'mov xmm0, rax' in the - caller to correct this. - */ - return *(void **)resp; -#endif -} - -/*@-exportheader@*/ -static void -ffi_prep_incoming_args_SYSV(char *stack, void **rvalue, - void **avalue, ffi_cif *cif) -/*@=exportheader@*/ -{ - register unsigned int i; - register void **p_argv; - register char *argp; - register 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; - - /* Align if necessary */ - if ((sizeof(char *) - 1) & (size_t) argp) { - argp = (char *) ALIGN(argp, sizeof(char*)); - } - - z = (*p_arg)->size; - - /* because we're little endian, this is what it turns into. */ - - *p_argv = (void*) argp; - - p_argv++; - argp += z; - } - - return; -} - -/* the cif must already be prep'ed */ -extern void ffi_closure_OUTER(); - -ffi_status -ffi_prep_closure (ffi_closure* closure, - ffi_cif* cif, - void (*fun)(ffi_cif*,void*,void**,void*), - void *user_data) -{ - short bytes; - char *tramp; -#ifdef _WIN64 - int mask; -#endif - FFI_ASSERT (cif->abi == FFI_SYSV); - - if (cif->abi == FFI_SYSV) - bytes = 0; -#if !defined(_WIN64) - else if (cif->abi == FFI_STDCALL) - bytes = cif->bytes; -#endif - else - return FFI_BAD_ABI; - - tramp = &closure->tramp[0]; - -#define BYTES(text) memcpy(tramp, text, sizeof(text)), tramp += sizeof(text)-1 -#define POINTER(x) *(void**)tramp = (void*)(x), tramp += sizeof(void*) -#define SHORT(x) *(short*)tramp = x, tramp += sizeof(short) -#define INT(x) *(int*)tramp = x, tramp += sizeof(int) - -#ifdef _WIN64 - if (cif->nargs >= 1 && - (cif->arg_types[0]->type == FFI_TYPE_FLOAT - || cif->arg_types[0]->type == FFI_TYPE_DOUBLE)) - mask |= 1; - if (cif->nargs >= 2 && - (cif->arg_types[1]->type == FFI_TYPE_FLOAT - || cif->arg_types[1]->type == FFI_TYPE_DOUBLE)) - mask |= 2; - if (cif->nargs >= 3 && - (cif->arg_types[2]->type == FFI_TYPE_FLOAT - || cif->arg_types[2]->type == FFI_TYPE_DOUBLE)) - mask |= 4; - if (cif->nargs >= 4 && - (cif->arg_types[3]->type == FFI_TYPE_FLOAT - || cif->arg_types[3]->type == FFI_TYPE_DOUBLE)) - mask |= 8; - - /* 41 BB ---- mov r11d,mask */ - BYTES("\x41\xBB"); INT(mask); - - /* 48 B8 -------- mov rax, closure */ - BYTES("\x48\xB8"); POINTER(closure); - - /* 49 BA -------- mov r10, ffi_closure_OUTER */ - BYTES("\x49\xBA"); POINTER(ffi_closure_OUTER); - - /* 41 FF E2 jmp r10 */ - BYTES("\x41\xFF\xE2"); - -#else - - /* mov ecx, closure */ - BYTES("\xb9"); POINTER(closure); - - /* mov edx, esp */ - BYTES("\x8b\xd4"); - - /* call ffi_closure_SYSV */ - BYTES("\xe8"); POINTER((char*)&ffi_closure_SYSV - (tramp + 4)); - - /* ret bytes */ - BYTES("\xc2"); - SHORT(bytes); - -#endif - - if (tramp - &closure->tramp[0] > FFI_TRAMPOLINE_SIZE) - Py_FatalError("FFI_TRAMPOLINE_SIZE too small in " __FILE__); - - closure->cif = cif; - closure->user_data = user_data; - closure->fun = fun; - - return FFI_OK; -} Modified: python/branches/branch_libffi-3_0_10-win/Modules/_ctypes/libffi_msvc/ffi.h ============================================================================== --- python/branches/branch_libffi-3_0_10-win/Modules/_ctypes/libffi_msvc/ffi.h (original) +++ python/branches/branch_libffi-3_0_10-win/Modules/_ctypes/libffi_msvc/ffi.h Fri Mar 19 22:14:47 2010 @@ -1,5 +1,5 @@ /* -----------------------------------------------------------------*-C-*- - libffi 2.00-beta - Copyright (c) 1996-2003 Red Hat, Inc. + libffi @VERSION@ - Copyright (c) 1996-2003, 2007, 2008 Red Hat, Inc. Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the @@ -12,13 +12,14 @@ 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 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 THE AUTHORS OR COPYRIGHT + HOLDERS 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. ----------------------------------------------------------------------- */ @@ -56,7 +57,7 @@ #endif /* Specify which architecture libffi is configured for. */ -//XXX #define X86 +/* #define @TARGET@ */ /* ---- System configuration information --------------------------------- */ @@ -64,6 +65,10 @@ #ifndef LIBFFI_ASM +#ifdef _MSC_VER +#define __attribute__(X) +#endif + #include #include @@ -79,12 +84,21 @@ # ifdef __GNUC__ # define FFI_LONG_LONG_MAX __LONG_LONG_MAX__ # endif -# ifdef _MSC_VER -# define FFI_LONG_LONG_MAX _I64_MAX -# endif # endif #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; + struct _ffi_type **elements; +} ffi_type; + +#ifndef LIBFFI_HIDE_BASIC_TYPES #if SCHAR_MAX == 127 # define ffi_type_uchar ffi_type_uint8 # define ffi_type_schar ffi_type_sint8 @@ -115,26 +129,23 @@ #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" + #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; +#if LONG_MAX == 2147483647 +# define ffi_type_ulong ffi_type_uint32 +# define ffi_type_slong ffi_type_sint32 +#elif LONG_MAX == 9223372036854775807 +# define ffi_type_ulong ffi_type_uint64 +# define ffi_type_slong ffi_type_sint64 +#else + #error "long size not supported" +#endif /* These are defined in types.c */ extern ffi_type ffi_type_void; @@ -148,14 +159,19 @@ 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; +#if HAVE_LONG_DOUBLE +extern ffi_type ffi_type_longdouble; +#else +#define ffi_type_longdouble ffi_type_double +#endif +#endif /* LIBFFI_HIDE_BASIC_TYPES */ typedef enum { FFI_OK = 0, FFI_BAD_TYPEDEF, - FFI_BAD_ABI + FFI_BAD_ABI } ffi_status; typedef unsigned FFI_TYPE; @@ -163,8 +179,8 @@ typedef struct { ffi_abi abi; unsigned nargs; - /*@dependent@*/ ffi_type **arg_types; - /*@dependent@*/ ffi_type *rtype; + ffi_type **arg_types; + ffi_type *rtype; unsigned bytes; unsigned flags; #ifdef FFI_EXTRA_CIF_FIELDS @@ -174,10 +190,16 @@ /* ---- Definitions for the raw API -------------------------------------- */ -#ifdef _WIN64 -#define FFI_SIZEOF_ARG 8 -#else -#define FFI_SIZEOF_ARG 4 +#ifndef FFI_SIZEOF_ARG +# if LONG_MAX == 2147483647 +# define FFI_SIZEOF_ARG 4 +# elif LONG_MAX == 9223372036854775807 +# define FFI_SIZEOF_ARG 8 +# endif +#endif + +#ifndef FFI_SIZEOF_JAVA_RAW +# define FFI_SIZEOF_JAVA_RAW FFI_SIZEOF_ARG #endif typedef union { @@ -188,10 +210,25 @@ void* ptr; } ffi_raw; -void ffi_raw_call (/*@dependent@*/ ffi_cif *cif, - void (*fn)(), - /*@out@*/ void *rvalue, - /*@dependent@*/ ffi_raw *avalue); +#if FFI_SIZEOF_JAVA_RAW == 4 && FFI_SIZEOF_ARG == 8 +/* This is a special case for mips64/n32 ABI (and perhaps others) where + sizeof(void *) is 4 and FFI_SIZEOF_ARG is 8. */ +typedef union { + signed int sint; + unsigned int uint; + float flt; + char data[FFI_SIZEOF_JAVA_RAW]; + void* ptr; +} ffi_java_raw; +#else +typedef ffi_raw ffi_java_raw; +#endif + + +void ffi_raw_call (ffi_cif *cif, + void (*fn)(void), + void *rvalue, + 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); @@ -201,25 +238,35 @@ /* 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_raw_call (ffi_cif *cif, + void (*fn)(void), + void *rvalue, + ffi_java_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); +void ffi_java_ptrarray_to_raw (ffi_cif *cif, void **args, ffi_java_raw *raw); +void ffi_java_raw_to_ptrarray (ffi_cif *cif, ffi_java_raw *raw, void **args); size_t ffi_java_raw_size (ffi_cif *cif); /* ---- Definitions for closures ----------------------------------------- */ #if FFI_CLOSURES +#ifdef _MSC_VER +__declspec(align(8)) +#endif typedef struct { char tramp[FFI_TRAMPOLINE_SIZE]; ffi_cif *cif; void (*fun)(ffi_cif*,void*,void**,void*); void *user_data; +#ifdef __GNUC__ +} ffi_closure __attribute__((aligned (8))); +#else } ffi_closure; +#endif + +void *ffi_closure_alloc (size_t size, void **code); +void ffi_closure_free (void *); ffi_status ffi_prep_closure (ffi_closure*, @@ -227,6 +274,13 @@ void (*fun)(ffi_cif*,void*,void**,void*), void *user_data); +ffi_status +ffi_prep_closure_loc (ffi_closure*, + ffi_cif *, + void (*fun)(ffi_cif*,void*,void**,void*), + void *user_data, + void*codeloc); + typedef struct { char tramp[FFI_TRAMPOLINE_SIZE]; @@ -248,6 +302,27 @@ } ffi_raw_closure; +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_java_raw*,void*); + void *user_data; + +} ffi_java_raw_closure; + ffi_status ffi_prep_raw_closure (ffi_raw_closure*, ffi_cif *cif, @@ -255,29 +330,42 @@ void *user_data); ffi_status -ffi_prep_java_raw_closure (ffi_raw_closure*, +ffi_prep_raw_closure_loc (ffi_raw_closure*, + ffi_cif *cif, + void (*fun)(ffi_cif*,void*,ffi_raw*,void*), + void *user_data, + void *codeloc); + +ffi_status +ffi_prep_java_raw_closure (ffi_java_raw_closure*, ffi_cif *cif, - void (*fun)(ffi_cif*,void*,ffi_raw*,void*), + void (*fun)(ffi_cif*,void*,ffi_java_raw*,void*), void *user_data); +ffi_status +ffi_prep_java_raw_closure_loc (ffi_java_raw_closure*, + ffi_cif *cif, + void (*fun)(ffi_cif*,void*,ffi_java_raw*,void*), + void *user_data, + void *codeloc); + #endif /* FFI_CLOSURES */ /* ---- Public interface definition -------------------------------------- */ -ffi_status ffi_prep_cif(/*@out@*/ /*@partial@*/ ffi_cif *cif, +ffi_status ffi_prep_cif(ffi_cif *cif, ffi_abi abi, - unsigned int nargs, - /*@dependent@*/ /*@out@*/ /*@partial@*/ ffi_type *rtype, - /*@dependent@*/ ffi_type **atypes); - -int -ffi_call(/*@dependent@*/ ffi_cif *cif, - void (*fn)(), - /*@out@*/ void *rvalue, - /*@dependent@*/ void **avalue); + unsigned int nargs, + ffi_type *rtype, + ffi_type **atypes); + +void ffi_call(ffi_cif *cif, + void (*fn)(void), + void *rvalue, + void **avalue); /* Useful for eliminating compiler warnings */ -#define FFI_FN(f) ((void (*)())f) +#define FFI_FN(f) ((void (*)(void))f) /* ---- Definitions shared with assembly code ---------------------------- */ @@ -288,7 +376,7 @@ #define FFI_TYPE_INT 1 #define FFI_TYPE_FLOAT 2 #define FFI_TYPE_DOUBLE 3 -#if 1 +#if HAVE_LONG_DOUBLE #define FFI_TYPE_LONGDOUBLE 4 #else #define FFI_TYPE_LONGDOUBLE FFI_TYPE_DOUBLE @@ -312,4 +400,3 @@ #endif #endif - Deleted: python/branches/branch_libffi-3_0_10-win/Modules/_ctypes/libffi_msvc/ffi_common.h ============================================================================== --- python/branches/branch_libffi-3_0_10-win/Modules/_ctypes/libffi_msvc/ffi_common.h Fri Mar 19 22:14:47 2010 +++ (empty file) @@ -1,77 +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 -#include - -/* 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. */ -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__))); - -typedef float FLOAT32; - - -#ifdef __cplusplus -} -#endif - -#endif - - Modified: python/branches/branch_libffi-3_0_10-win/Modules/_ctypes/libffi_msvc/fficonfig.h ============================================================================== --- python/branches/branch_libffi-3_0_10-win/Modules/_ctypes/libffi_msvc/fficonfig.h (original) +++ python/branches/branch_libffi-3_0_10-win/Modules/_ctypes/libffi_msvc/fficonfig.h Fri Mar 19 22:14:47 2010 @@ -1,96 +1,186 @@ /* fficonfig.h. Originally created by configure, now hand_maintained for MSVC. */ -/* fficonfig.h. Generated automatically by configure. */ -/* fficonfig.h.in. Generated automatically from configure.in by autoheader. */ +/* fficonfig.h.in. Generated from configure.ac by autoheader. */ -/* Define this for MSVC, but not for mingw32! */ -#ifdef _MSC_VER -#define __attribute__(x) /* */ -#endif -#define alloca _alloca +/* Define if building universal (internal helper macro) */ +/* #undef AC_APPLE_UNIVERSAL_BUILD */ -/*----------------------------------------------------------------*/ +/* 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 if using alloca.c. */ +/* Define to 1 if using `alloca.c'. */ /* #undef C_ALLOCA */ -/* 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 the flags needed for the .section .eh_frame directive. */ +/* #undef EH_FRAME_FLAGS */ -/* Define if you have alloca, as a function or macro. */ -#define HAVE_ALLOCA 1 +/* Define this if you want extra debugging. */ +/* #undef FFI_DEBUG */ -/* Define if you have and it should be used (not on Ultrix). */ -/* #define HAVE_ALLOCA_H 1 */ +/* Cannot use malloc on this target, so, we revert to alternative means */ +/* #undef FFI_MMAP_EXEC_WRIT */ -/* 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 this is you do not want support for the raw API. */ +#undef FFI_NO_RAW_API -/* Define if you have the ANSI C header files. */ -#define STDC_HEADERS 1 +/* Define this is you do not want support for aggregate types. */ +/* #undef FFI_NO_STRUCTS */ -/* Define if you have the memcpy function. */ -#define HAVE_MEMCPY 1 +/* Define to 1 if you have `alloca', as a function or macro. */ +#define HAVE_ALLOCA 1 -/* Define if read-only mmap of a plain file works. */ -//#define HAVE_MMAP_FILE 1 +/* Define to 1 if you have and it should be used (not on Ultrix). + */ +/* #undef HAVE_ALLOCA_H */ -/* Define if mmap of /dev/zero works. */ -//#define HAVE_MMAP_DEV_ZERO 1 +/* Define if your assembler supports .cfi_* directives. */ +/* #undef HAVE_AS_CFI_PSEUDO_OP */ -/* Define if mmap with MAP_ANON(YMOUS) works. */ -//#define HAVE_MMAP_ANON 1 +/* Define if your assembler supports .register. */ +/* #undef HAVE_AS_REGISTER_PSEUDO_OP */ -/* The number of bytes in type double */ -#define SIZEOF_DOUBLE 8 +/* Define if your assembler and linker support unaligned PC relative relocs. + */ +/* #undef HAVE_AS_SPARC_UA_PCREL */ -/* The number of bytes in type long double */ -#define SIZEOF_LONG_DOUBLE 12 +/* Define if your assembler supports PC relative relocs. */ +/* #undef HAVE_AS_X86_PCREL */ + +/* Define to 1 if you have the header file. */ +/* #undef HAVE_DLFCN_H */ + +/* Define if __attribute__((visibility("hidden"))) is supported. */ +/* #undef HAVE_HIDDEN_VISIBILITY_ATTRIBUTE */ + +/* 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 */ -#define HAVE_LONG_DOUBLE 1 +/* #undef HAVE_LONG_DOUBLE */ -/* whether byteorder is bigendian */ -/* #undef WORDS_BIGENDIAN */ +/* Define to 1 if you have the `memcpy' function. */ +#define HAVE_MEMCPY 1 -/* Define if the host machine stores words of multi-word integers in - big-endian order. */ -/* #undef HOST_WORDS_BIG_ENDIAN */ +/* Define to 1 if you have the header file. */ +/* #undef HAVE_MEMORY_H */ -/* 1234 = LIL_ENDIAN, 4321 = BIGENDIAN */ -#define BYTEORDER 1234 +/* Define to 1 if you have the `mmap' function. */ +/* #undef HAVE_MMAP */ -/* Define if your assembler and linker support unaligned PC relative relocs. */ -/* #undef HAVE_AS_SPARC_UA_PCREL */ +/* Define if mmap with MAP_ANON(YMOUS) works. */ +/* #undef HAVE_MMAP_ANON */ -/* Define if your assembler supports .register. */ -/* #undef HAVE_AS_REGISTER_PSEUDO_OP */ +/* 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 the flags needed for the .section .eh_frame directive. */ -/* #define EH_FRAME_FLAGS "aw" */ +/* Define to 1 if you have the header file. */ +#undef HAVE_STDINT_H -/* Define to the flags needed for the .section .eh_frame directive. */ -/* #define EH_FRAME_FLAGS "aw" */ +/* Define to 1 if you have the header file. */ +#undef HAVE_STDLIB_H -/* Define this if you want extra debugging. */ -/* #undef FFI_DEBUG */ +/* Define to 1 if you have the header file. */ +#undef HAVE_STRINGS_H -/* Define this is you do not want support for aggregate types. */ -/* #undef FFI_NO_STRUCTS */ +/* Define to 1 if you have the header file. */ +#undef HAVE_STRING_H -/* Define this is you do not want support for the raw API. */ -/* #undef FFI_NO_RAW_API */ +/* 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 to the sub-directory in which libtool stores uninstalled libraries. + */ +/* #undef LT_OBJDIR */ + +/* 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 home page for this package. */ +/* #undef PACKAGE_URL */ + +/* Define to the version of this package. */ +/* #undef PACKAGE_VERSION */ -/* Define this if you are using Purify and want to suppress spurious messages. */ +/* The size of `double', as computed by sizeof. */ +#define SIZEOF_DOUBLE 8 + +/* The size of `long double', as computed by sizeof. */ +#undef SIZEOF_LONG_DOUBLE + +/* 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 runtime. + 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 */ + +/* Define WORDS_BIGENDIAN to 1 if your processor stores words with the most + significant byte first (like Motorola and SPARC, unlike Intel). */ +#if defined AC_APPLE_UNIVERSAL_BUILD +# if defined __BIG_ENDIAN__ +# define WORDS_BIGENDIAN 1 +# endif +#else +# ifndef WORDS_BIGENDIAN +# undef WORDS_BIGENDIAN +# endif +#endif + + +#ifdef HAVE_HIDDEN_VISIBILITY_ATTRIBUTE +#ifdef LIBFFI_ASM +#define FFI_HIDDEN(name) .hidden name +#else +#define FFI_HIDDEN __attribute__ ((visibility ("hidden"))) +#endif +#else +#ifdef LIBFFI_ASM +#define FFI_HIDDEN(name) +#else +#define FFI_HIDDEN +#endif +#endif + Deleted: python/branches/branch_libffi-3_0_10-win/Modules/_ctypes/libffi_msvc/ffitarget.h ============================================================================== --- python/branches/branch_libffi-3_0_10-win/Modules/_ctypes/libffi_msvc/ffitarget.h Fri Mar 19 22:14:47 2010 +++ (empty file) @@ -1,85 +0,0 @@ -/* -----------------------------------------------------------------*-C-*- - ffitarget.h - Copyright (c) 1996-2003 Red Hat, Inc. - Target configuration macros for x86 and x86-64. - - 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 - -/* ---- System specific configurations ----------------------------------- */ - -#if defined (X86_64) && defined (__i386__) -#undef X86_64 -#define X86 -#endif - -/* ---- Generic type definitions ----------------------------------------- */ - -#ifndef LIBFFI_ASM -#ifndef _WIN64 -typedef unsigned long ffi_arg; -#else -typedef unsigned __int64 ffi_arg; -#endif -typedef signed long ffi_sarg; - -typedef enum ffi_abi { - FFI_FIRST_ABI = 0, - - /* ---- Intel x86 Win32 ---------- */ - FFI_SYSV, -#ifndef _WIN64 - FFI_STDCALL, -#endif - /* TODO: Add fastcall support for the sake of completeness */ - FFI_DEFAULT_ABI = FFI_SYSV, - - /* ---- Intel x86 and AMD x86-64 - */ -/* #if !defined(X86_WIN32) && (defined(__i386__) || defined(__x86_64__)) */ -/* FFI_SYSV, */ -/* FFI_UNIX64,*/ /* Unix variants all use the same ABI for x86-64 */ -/* #ifdef __i386__ */ -/* FFI_DEFAULT_ABI = FFI_SYSV, */ -/* #else */ -/* FFI_DEFAULT_ABI = FFI_UNIX64, */ -/* #endif */ -/* #endif */ - - FFI_LAST_ABI = FFI_DEFAULT_ABI + 1 -} ffi_abi; -#endif - -/* ---- Definitions for closures ----------------------------------------- */ - -#define FFI_CLOSURES 1 - -#ifdef _WIN64 -#define FFI_TRAMPOLINE_SIZE 29 -#define FFI_NATIVE_RAW_API 0 -#else -#define FFI_TRAMPOLINE_SIZE 15 -#define FFI_NATIVE_RAW_API 1 /* x86 has native raw api support */ -#endif - -#endif - Deleted: python/branches/branch_libffi-3_0_10-win/Modules/_ctypes/libffi_msvc/prep_cif.c ============================================================================== --- python/branches/branch_libffi-3_0_10-win/Modules/_ctypes/libffi_msvc/prep_cif.c Fri Mar 19 22:14:47 2010 +++ (empty file) @@ -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 - { -#if !defined(_MSC_VER) && !defined(__MINGW32__) - /* 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); -} Deleted: python/branches/branch_libffi-3_0_10-win/Modules/_ctypes/libffi_msvc/types.c ============================================================================== --- python/branches/branch_libffi-3_0_10-win/Modules/_ctypes/libffi_msvc/types.c Fri Mar 19 22:14:47 2010 +++ (empty file) @@ -1,104 +0,0 @@ -/* ----------------------------------------------------------------------- - types.c - Copyright (c) 1996, 1998 Red Hat, Inc. - - Predefined ffi_types needed by libffi. - - 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 - -/* Type definitions */ - -#define FFI_INTEGRAL_TYPEDEF(n, s, a, t) ffi_type ffi_type_##n = { s, a, t, NULL } -#define FFI_AGGREGATE_TYPEDEF(n, e) ffi_type ffi_type_##n = { 0, 0, FFI_TYPE_STRUCT, e } - -/* Size and alignment are fake here. They must not be 0. */ -FFI_INTEGRAL_TYPEDEF(void, 1, 1, FFI_TYPE_VOID); - -FFI_INTEGRAL_TYPEDEF(uint8, 1, 1, FFI_TYPE_UINT8); -FFI_INTEGRAL_TYPEDEF(sint8, 1, 1, FFI_TYPE_SINT8); -FFI_INTEGRAL_TYPEDEF(uint16, 2, 2, FFI_TYPE_UINT16); -FFI_INTEGRAL_TYPEDEF(sint16, 2, 2, FFI_TYPE_SINT16); -FFI_INTEGRAL_TYPEDEF(uint32, 4, 4, FFI_TYPE_UINT32); -FFI_INTEGRAL_TYPEDEF(sint32, 4, 4, FFI_TYPE_SINT32); -FFI_INTEGRAL_TYPEDEF(float, 4, 4, FFI_TYPE_FLOAT); - -#if defined ALPHA || defined SPARC64 || defined X86_64 || defined S390X \ - || defined IA64 - -FFI_INTEGRAL_TYPEDEF(pointer, 8, 8, FFI_TYPE_POINTER); - -#else - -FFI_INTEGRAL_TYPEDEF(pointer, 4, 4, FFI_TYPE_POINTER); - -#endif - -#if defined X86 || defined X86_WIN32 || defined ARM || defined M68K - -FFI_INTEGRAL_TYPEDEF(uint64, 8, 4, FFI_TYPE_UINT64); -FFI_INTEGRAL_TYPEDEF(sint64, 8, 4, FFI_TYPE_SINT64); - -#elif defined SH - -FFI_INTEGRAL_TYPEDEF(uint64, 8, 4, FFI_TYPE_UINT64); -FFI_INTEGRAL_TYPEDEF(sint64, 8, 4, FFI_TYPE_SINT64); - -#else - -FFI_INTEGRAL_TYPEDEF(uint64, 8, 8, FFI_TYPE_UINT64); -FFI_INTEGRAL_TYPEDEF(sint64, 8, 8, FFI_TYPE_SINT64); - -#endif - - -#if defined X86 || defined X86_WIN32 || defined M68K - -FFI_INTEGRAL_TYPEDEF(double, 8, 4, FFI_TYPE_DOUBLE); -FFI_INTEGRAL_TYPEDEF(longdouble, 12, 4, FFI_TYPE_LONGDOUBLE); - -#elif defined ARM || defined SH || defined POWERPC_AIX || defined POWERPC_DARWIN - -FFI_INTEGRAL_TYPEDEF(double, 8, 4, FFI_TYPE_DOUBLE); -FFI_INTEGRAL_TYPEDEF(longdouble, 8, 4, FFI_TYPE_LONGDOUBLE); - -#elif defined SPARC - -FFI_INTEGRAL_TYPEDEF(double, 8, 8, FFI_TYPE_DOUBLE); -#ifdef SPARC64 -FFI_INTEGRAL_TYPEDEF(longdouble, 16, 16, FFI_TYPE_LONGDOUBLE); -#else -FFI_INTEGRAL_TYPEDEF(longdouble, 16, 8, FFI_TYPE_LONGDOUBLE); -#endif - -#elif defined X86_64 - -FFI_INTEGRAL_TYPEDEF(double, 8, 8, FFI_TYPE_DOUBLE); -FFI_INTEGRAL_TYPEDEF(longdouble, 16, 16, FFI_TYPE_LONGDOUBLE); - -#else - -FFI_INTEGRAL_TYPEDEF(double, 8, 8, FFI_TYPE_DOUBLE); -FFI_INTEGRAL_TYPEDEF(longdouble, 8, 8, FFI_TYPE_LONGDOUBLE); - -#endif - Deleted: python/branches/branch_libffi-3_0_10-win/Modules/_ctypes/libffi_msvc/win32.c ============================================================================== --- python/branches/branch_libffi-3_0_10-win/Modules/_ctypes/libffi_msvc/win32.c Fri Mar 19 22:14:47 2010 +++ (empty file) @@ -1,162 +0,0 @@ -/* ----------------------------------------------------------------------- - win32.S - Copyright (c) 1996, 1998, 2001, 2002 Red Hat, Inc. - Copyright (c) 2001 John Beniton - Copyright (c) 2002 Ranjit Mathew - - - X86 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. - ----------------------------------------------------------------------- */ - -/* theller: almost verbatim translation from gas syntax to MSVC inline - assembler code. */ - -/* theller: ffi_call_x86 now returns an integer - the difference of the stack - pointer before and after the function call. If everything is ok, zero is - returned. If stdcall functions are passed the wrong number of arguments, - the difference will be nonzero. */ - -#include -#include - -__declspec(naked) int -ffi_call_x86(void (* prepfunc)(char *, extended_cif *), /* 8 */ - extended_cif *ecif, /* 12 */ - unsigned bytes, /* 16 */ - unsigned flags, /* 20 */ - unsigned *rvalue, /* 24 */ - void (*fn)()) /* 28 */ -{ - _asm { - push ebp - mov ebp, esp - - push esi // NEW: this register must be preserved across function calls -// XXX SAVE ESP NOW! - mov esi, esp // save stack pointer before the call - -// Make room for all of the new args. - mov ecx, [ebp+16] - sub esp, ecx // sub esp, bytes - - mov eax, esp - -// Place all of the ffi_prep_args in position - push [ebp + 12] // ecif - push eax - call [ebp + 8] // prepfunc - -// Return stack to previous state and call the function - add esp, 8 -// FIXME: Align the stack to a 128-bit boundary to avoid -// potential performance hits. - call [ebp + 28] - -// Load ecif->cif->abi - mov ecx, [ebp + 12] - mov ecx, [ecx]ecif.cif - mov ecx, [ecx]ecif.cif.abi - - cmp ecx, FFI_STDCALL - je noclean -// STDCALL: Remove the space we pushed for the args - mov ecx, [ebp + 16] - add esp, ecx -// CDECL: Caller has already cleaned the stack -noclean: -// Check that esp has the same value as before! - sub esi, esp - -// Load %ecx with the return type code - mov ecx, [ebp + 20] - -// If the return value pointer is NULL, assume no return value. -/* - Intel asm is weird. We have to explicitely specify 'DWORD PTR' in the nexr instruction, - otherwise only one BYTE will be compared (instead of a DWORD)! - */ - cmp DWORD PTR [ebp + 24], 0 - jne sc_retint - -// Even if there is no space for the return value, we are -// obliged to handle floating-point values. - cmp ecx, FFI_TYPE_FLOAT - jne sc_noretval -// fstp %st(0) - fstp st(0) - - jmp sc_epilogue - -sc_retint: - cmp ecx, FFI_TYPE_INT - jne sc_retfloat -// # Load %ecx with the pointer to storage for the return value - mov ecx, [ebp + 24] - mov [ecx + 0], eax - jmp sc_epilogue - -sc_retfloat: - cmp ecx, FFI_TYPE_FLOAT - jne sc_retdouble -// Load %ecx with the pointer to storage for the return value - mov ecx, [ebp+24] -// fstps (%ecx) - fstp DWORD PTR [ecx] - jmp sc_epilogue - -sc_retdouble: - cmp ecx, FFI_TYPE_DOUBLE - jne sc_retlongdouble -// movl 24(%ebp),%ecx - mov ecx, [ebp+24] - fstp QWORD PTR [ecx] - jmp sc_epilogue - - jmp sc_retlongdouble // avoid warning about unused label -sc_retlongdouble: - cmp ecx, FFI_TYPE_LONGDOUBLE - jne sc_retint64 -// Load %ecx with the pointer to storage for the return value - mov ecx, [ebp+24] -// fstpt (%ecx) - fstp QWORD PTR [ecx] /* XXX ??? */ - jmp sc_epilogue - -sc_retint64: - cmp ecx, FFI_TYPE_SINT64 - jne sc_retstruct -// Load %ecx with the pointer to storage for the return value - mov ecx, [ebp+24] - mov [ecx+0], eax - mov [ecx+4], edx - -sc_retstruct: -// Nothing to do! - -sc_noretval: -sc_epilogue: - mov eax, esi - pop esi // NEW restore: must be preserved across function calls - mov esp, ebp - pop ebp - ret - } -} Deleted: python/branches/branch_libffi-3_0_10-win/Modules/_ctypes/libffi_msvc/win64.asm ============================================================================== --- python/branches/branch_libffi-3_0_10-win/Modules/_ctypes/libffi_msvc/win64.asm Fri Mar 19 22:14:47 2010 +++ (empty file) @@ -1,156 +0,0 @@ -PUBLIC ffi_call_AMD64 - -EXTRN __chkstk:NEAR -EXTRN ffi_closure_SYSV:NEAR - -_TEXT SEGMENT - -;;; ffi_closure_OUTER will be called with these registers set: -;;; rax points to 'closure' -;;; r11 contains a bit mask that specifies which of the -;;; first four parameters are float or double -;;; -;;; It must move the parameters passed in registers to their stack location, -;;; call ffi_closure_SYSV for the actual work, then return the result. -;;; -ffi_closure_OUTER PROC FRAME - ;; save actual arguments to their stack space. - test r11, 1 - jne first_is_float - mov QWORD PTR [rsp+8], rcx - jmp second -first_is_float: - movlpd QWORD PTR [rsp+8], xmm0 - -second: - test r11, 2 - jne second_is_float - mov QWORD PTR [rsp+16], rdx - jmp third -second_is_float: - movlpd QWORD PTR [rsp+16], xmm1 - -third: - test r11, 4 - jne third_is_float - mov QWORD PTR [rsp+24], r8 - jmp forth -third_is_float: - movlpd QWORD PTR [rsp+24], xmm2 - -forth: - test r11, 8 - jne forth_is_float - mov QWORD PTR [rsp+32], r9 - jmp done -forth_is_float: - movlpd QWORD PTR [rsp+32], xmm3 - -done: -.ALLOCSTACK 40 - sub rsp, 40 -.ENDPROLOG - mov rcx, rax ; context is first parameter - mov rdx, rsp ; stack is second parameter - add rdx, 40 ; correct our own area - mov rax, ffi_closure_SYSV - call rax ; call the real closure function - ;; Here, code is missing that handles float return values - add rsp, 40 - movd xmm0, rax ; In case the closure returned a float. - ret 0 -ffi_closure_OUTER ENDP - - -;;; ffi_call_AMD64 - -stack$ = 0 -prepfunc$ = 32 -ecif$ = 40 -bytes$ = 48 -flags$ = 56 -rvalue$ = 64 -fn$ = 72 - -ffi_call_AMD64 PROC FRAME - - mov QWORD PTR [rsp+32], r9 - mov QWORD PTR [rsp+24], r8 - mov QWORD PTR [rsp+16], rdx - mov QWORD PTR [rsp+8], rcx -.PUSHREG rbp - push rbp -.ALLOCSTACK 48 - sub rsp, 48 ; 00000030H -.SETFRAME rbp, 32 - lea rbp, QWORD PTR [rsp+32] -.ENDPROLOG - - mov eax, DWORD PTR bytes$[rbp] - add rax, 15 - and rax, -16 - call __chkstk - sub rsp, rax - lea rax, QWORD PTR [rsp+32] - mov QWORD PTR stack$[rbp], rax - - mov rdx, QWORD PTR ecif$[rbp] - mov rcx, QWORD PTR stack$[rbp] - call QWORD PTR prepfunc$[rbp] - - mov rsp, QWORD PTR stack$[rbp] - - movlpd xmm3, QWORD PTR [rsp+24] - movd r9, xmm3 - - movlpd xmm2, QWORD PTR [rsp+16] - movd r8, xmm2 - - movlpd xmm1, QWORD PTR [rsp+8] - movd rdx, xmm1 - - movlpd xmm0, QWORD PTR [rsp] - movd rcx, xmm0 - - call QWORD PTR fn$[rbp] -ret_int$: - cmp DWORD PTR flags$[rbp], 1 ; FFI_TYPE_INT - jne ret_float$ - - mov rcx, QWORD PTR rvalue$[rbp] - mov DWORD PTR [rcx], eax - jmp SHORT ret_nothing$ - -ret_float$: - cmp DWORD PTR flags$[rbp], 2 ; FFI_TYPE_FLOAT - jne SHORT ret_double$ - - mov rax, QWORD PTR rvalue$[rbp] - movlpd QWORD PTR [rax], xmm0 - jmp SHORT ret_nothing$ - -ret_double$: - cmp DWORD PTR flags$[rbp], 3 ; FFI_TYPE_DOUBLE - jne SHORT ret_int64$ - - mov rax, QWORD PTR rvalue$[rbp] - movlpd QWORD PTR [rax], xmm0 - jmp SHORT ret_nothing$ - -ret_int64$: - cmp DWORD PTR flags$[rbp], 12 ; FFI_TYPE_SINT64 - jne ret_nothing$ - - mov rcx, QWORD PTR rvalue$[rbp] - mov QWORD PTR [rcx], rax - jmp SHORT ret_nothing$ - -ret_nothing$: - xor eax, eax - - lea rsp, QWORD PTR [rbp+16] - pop rbp - ret 0 -ffi_call_AMD64 ENDP -_TEXT ENDS -END Deleted: python/branches/branch_libffi-3_0_10-win/Modules/_ctypes/malloc_closure.c ============================================================================== --- python/branches/branch_libffi-3_0_10-win/Modules/_ctypes/malloc_closure.c Fri Mar 19 22:14:47 2010 +++ (empty file) @@ -1,114 +0,0 @@ -/***************************************************************** - This file should be kept compatible with Python 2.3, see PEP 291. - *****************************************************************/ - -#include -#include -#ifdef MS_WIN32 -#include -#else -#include -#include -# if !defined(MAP_ANONYMOUS) && defined(MAP_ANON) -# define MAP_ANONYMOUS MAP_ANON -# endif -#endif -#include "ctypes.h" - -/* BLOCKSIZE can be adjusted. Larger blocksize will take a larger memory - overhead, but allocate less blocks from the system. It may be that some - systems have a limit of how many mmap'd blocks can be open. -*/ - -#define BLOCKSIZE _pagesize - -/* #define MALLOC_CLOSURE_DEBUG */ /* enable for some debugging output */ - -/******************************************************************/ - -typedef union _tagITEM { - ffi_closure closure; - union _tagITEM *next; -} ITEM; - -static ITEM *free_list; -static int _pagesize; - -static void more_core(void) -{ - ITEM *item; - int count, i; - -/* determine the pagesize */ -#ifdef MS_WIN32 - if (!_pagesize) { - SYSTEM_INFO systeminfo; - GetSystemInfo(&systeminfo); - _pagesize = systeminfo.dwPageSize; - } -#else - if (!_pagesize) { -#ifdef _SC_PAGESIZE - _pagesize = sysconf(_SC_PAGESIZE); -#else - _pagesize = getpagesize(); -#endif - } -#endif - - /* calculate the number of nodes to allocate */ - count = BLOCKSIZE / sizeof(ITEM); - - /* allocate a memory block */ -#ifdef MS_WIN32 - item = (ITEM *)VirtualAlloc(NULL, - count * sizeof(ITEM), - MEM_COMMIT, - PAGE_EXECUTE_READWRITE); - if (item == NULL) - return; -#else - item = (ITEM *)mmap(NULL, - count * sizeof(ITEM), - PROT_READ | PROT_WRITE | PROT_EXEC, - MAP_PRIVATE | MAP_ANONYMOUS, - -1, - 0); - if (item == (void *)MAP_FAILED) - return; -#endif - -#ifdef MALLOC_CLOSURE_DEBUG - printf("block at %p allocated (%d bytes), %d ITEMs\n", - item, count * sizeof(ITEM), count); -#endif - /* put them into the free list */ - for (i = 0; i < count; ++i) { - item->next = free_list; - free_list = item; - ++item; - } -} - -/******************************************************************/ - -/* put the item back into the free list */ -void _ctypes_free_closure(void *p) -{ - ITEM *item = (ITEM *)p; - item->next = free_list; - free_list = item; -} - -/* return one item from the free list, allocating more if needed */ -void *_ctypes_alloc_closure(void) -{ - ITEM *item; - if (!free_list) - more_core(); - if (!free_list) - return NULL; - item = free_list; - free_list = item->next; - return item; -} Modified: python/branches/branch_libffi-3_0_10-win/PCbuild/_ctypes.vcproj ============================================================================== --- python/branches/branch_libffi-3_0_10-win/PCbuild/_ctypes.vcproj (original) +++ python/branches/branch_libffi-3_0_10-win/PCbuild/_ctypes.vcproj Fri Mar 19 22:14:47 2010 @@ -1,7 +1,7 @@ - - - - - - - - - - - - - - From python-checkins at python.org Fri Mar 19 22:17:17 2010 From: python-checkins at python.org (collin.winter) Date: Fri, 19 Mar 2010 22:17:17 +0100 (CET) Subject: [Python-checkins] r79116 - in python/branches/py3k: Makefile.pre.in Misc/NEWS Misc/python-config.in Message-ID: <20100319211717.7CBD1FD8D@mail.python.org> Author: collin.winter Date: Fri Mar 19 22:17:17 2010 New Revision: 79116 Log: Merged revisions 79082,79084 via svnmerge from svn+ssh://pythondev at svn.python.org/python/trunk ........ r79082 | collin.winter | 2010-03-18 17:00:30 -0700 (Thu, 18 Mar 2010) | 1 line Add a separate python-config make target, useful for testing changes to Misc/python-config.in. ........ r79084 | collin.winter | 2010-03-18 17:08:44 -0700 (Thu, 18 Mar 2010) | 1 line Make python-config support multiple option flags on the same command line, rather than requiring one invocation per flag. ........ Modified: python/branches/py3k/ (props changed) python/branches/py3k/Makefile.pre.in python/branches/py3k/Misc/NEWS python/branches/py3k/Misc/python-config.in Modified: python/branches/py3k/Makefile.pre.in ============================================================================== --- python/branches/py3k/Makefile.pre.in (original) +++ python/branches/py3k/Makefile.pre.in Fri Mar 19 22:17:17 2010 @@ -941,6 +941,11 @@ export EXE; EXE="$(BUILDEXE)"; \ cd $(srcdir)/Lib/$(PLATDIR); $(RUNSHARED) ./regen +python-config: $(srcdir)/Misc/python-config.in + # Substitution happens here, as the completely-expanded BINDIR + # is not available in configure + sed -e "s, at EXENAME@,$(BINDIR)/python$(VERSION)$(EXE)," < $(srcdir)/Misc/python-config.in >python-config + # Install the include files INCLDIRSTOMAKE=$(INCLUDEDIR) $(CONFINCLUDEDIR) $(INCLUDEPY) $(CONFINCLUDEPY) inclinstall: @@ -966,7 +971,7 @@ # pkgconfig directory LIBPC= $(LIBDIR)/pkgconfig -libainstall: all +libainstall: all python-config @for i in $(LIBDIR) $(LIBP) $(LIBPL) $(LIBPC); \ do \ if test ! -d $(DESTDIR)$$i; then \ @@ -997,9 +1002,6 @@ $(INSTALL_DATA) Misc/python.pc $(DESTDIR)$(LIBPC)/python-$(VERSION).pc $(INSTALL_SCRIPT) $(srcdir)/Modules/makesetup $(DESTDIR)$(LIBPL)/makesetup $(INSTALL_SCRIPT) $(srcdir)/install-sh $(DESTDIR)$(LIBPL)/install-sh - # Substitution happens here, as the completely-expanded BINDIR - # is not available in configure - sed -e "s, at EXENAME@,$(BINDIR)/python$(VERSION)$(EXE)," < $(srcdir)/Misc/python-config.in >python-config $(INSTALL_SCRIPT) python-config $(DESTDIR)$(BINDIR)/python$(VERSION)-config rm python-config @if [ -s Modules/python.exp -a \ Modified: python/branches/py3k/Misc/NEWS ============================================================================== --- python/branches/py3k/Misc/NEWS (original) +++ python/branches/py3k/Misc/NEWS Fri Mar 19 22:17:17 2010 @@ -889,6 +889,8 @@ - Issue #7541: when using ``python-config`` with a framework install the compiler might use the wrong library. +- python-config now supports multiple options on the same command line. + Documentation ------------ Modified: python/branches/py3k/Misc/python-config.in ============================================================================== --- python/branches/py3k/Misc/python-config.in (original) +++ python/branches/py3k/Misc/python-config.in Fri Mar 19 22:17:17 2010 @@ -21,33 +21,36 @@ if not opts: exit_with_usage() -opt = opts[0][0] - pyver = sysconfig.get_config_var('VERSION') getvar = sysconfig.get_config_var -if opt == '--help': - exit_with_usage(0) - -elif opt == '--prefix': - print(sysconfig.PREFIX) +opt_flags = [flag for (flag, val) in opts] -elif opt == '--exec-prefix': - print(sysconfig.EXEC_PREFIX) +if '--help' in opt_flags: + exit_with_usage(code=0) -elif opt in ('--includes', '--cflags'): - flags = ['-I' + sysconfig.get_python_inc(), - '-I' + sysconfig.get_python_inc(plat_specific=True)] - if opt == '--cflags': - flags.extend(getvar('CFLAGS').split()) - print(' '.join(flags)) - -elif opt in ('--libs', '--ldflags'): - libs = getvar('LIBS').split() + getvar('SYSLIBS').split() - libs.append('-lpython'+pyver) - # add the prefix/lib/pythonX.Y/config dir, but only if there is no - # shared library in prefix/lib/. - if opt == '--ldflags' and not getvar('Py_ENABLE_SHARED'): - libs.insert(0, '-L' + getvar('LIBPL')) - print(' '.join(libs)) +for opt in opt_flags: + if opt == '--prefix': + print(sysconfig.PREFIX) + + elif opt == '--exec-prefix': + print(sysconfig.EXEC_PREFIX) + + elif opt in ('--includes', '--cflags'): + flags = ['-I' + sysconfig.get_python_inc(), + '-I' + sysconfig.get_python_inc(plat_specific=True)] + if opt == '--cflags': + flags.extend(getvar('CFLAGS').split()) + print(' '.join(flags)) + + elif opt in ('--libs', '--ldflags'): + libs = getvar('LIBS').split() + getvar('SYSLIBS').split() + libs.append('-lpython'+pyver) + # add the prefix/lib/pythonX.Y/config dir, but only if there is no + # shared library in prefix/lib/. + if opt == '--ldflags': + if not getvar('Py_ENABLE_SHARED'): + libs.insert(0, '-L' + getvar('LIBPL')) + libs.extend(getvar('LINKFORSHARED').split()) + print(' '.join(libs)) From python-checkins at python.org Fri Mar 19 22:38:46 2010 From: python-checkins at python.org (benjamin.peterson) Date: Fri, 19 Mar 2010 22:38:46 +0100 (CET) Subject: [Python-checkins] r79117 - in python/branches/release31-maint: Mac/Makefile.in Mac/README configure.in Message-ID: <20100319213846.57D57FCCC@mail.python.org> Author: benjamin.peterson Date: Fri Mar 19 22:38:46 2010 New Revision: 79117 Log: port r78813 from trunk fixing #8089 Modified: python/branches/release31-maint/Mac/Makefile.in python/branches/release31-maint/Mac/README python/branches/release31-maint/configure.in Modified: python/branches/release31-maint/Mac/Makefile.in ============================================================================== --- python/branches/release31-maint/Mac/Makefile.in (original) +++ python/branches/release31-maint/Mac/Makefile.in Fri Mar 19 22:38:46 2010 @@ -144,12 +144,14 @@ -DPYTHONWEXECUTABLE='"$(APPINSTALLDIR)/Contents/MacOS/$(PYTHONFRAMEWORK)"' pythonw-32: $(srcdir)/Tools/pythonw.c Makefile - $(CC) $(LDFLAGS) -o $@ -arch i386 -arch ppc $(srcdir)/Tools/pythonw.c \ - -DPYTHONWEXECUTABLE='"$(APPINSTALLDIR)/Contents/MacOS/$(PYTHONFRAMEWORK)-32"' + $(CC) $(LDFLAGS) -o pythonw-tmp.o $(srcdir)/Tools/pythonw.c \ + -DPYTHONWEXECUTABLE='"$(APPINSTALLDIR)/Contents/MacOS/$(PYTHONFRAMEWORK)-32"' ;\ + lipo @LIPO_32BIT_FLAGS@ -output $@ pythonw-tmp.o ; rm pythonw-tmp.o pythonw-64: $(srcdir)/Tools/pythonw.c Makefile - $(CC) $(LDFLAGS) -o $@ -arch x86_64 -arch ppc64 $(srcdir)/Tools/pythonw.c \ - -DPYTHONWEXECUTABLE='"$(APPINSTALLDIR)/Contents/MacOS/$(PYTHONFRAMEWORK)-64"' + $(CC) $(LDFLAGS) -o pythonw-tmp.o $(srcdir)/Tools/pythonw.c \ + -DPYTHONWEXECUTABLE='"$(APPINSTALLDIR)/Contents/MacOS/$(PYTHONFRAMEWORK)-64"' ;\ + lipo @LIPO_64BIT_FLAGS@ -output $@ pythonw-tmp.o ; rm pythonw-tmp.o install_PythonLauncher: cd PythonLauncher && make install DESTDIR=$(DESTDIR) @@ -206,8 +208,8 @@ rm "$(DESTDIR)$(APPINSTALLDIR)/Contents/Info.plist.in" install_Python4way: install_Python - lipo -extract i386 -extract ppc7400 -output "$(DESTDIR)$(APPINSTALLDIR)/Contents/MacOS/$(PYTHONFRAMEWORK)-32" "$(DESTDIR)$(APPINSTALLDIR)/Contents/MacOS/$(PYTHONFRAMEWORK)" - lipo -extract x86_64 -extract ppc64 -output "$(DESTDIR)$(APPINSTALLDIR)/Contents/MacOS/$(PYTHONFRAMEWORK)-64" "$(DESTDIR)$(APPINSTALLDIR)/Contents/MacOS/$(PYTHONFRAMEWORK)" + lipo @LIPO_32BIT_FLAGS@ -output "$(DESTDIR)$(APPINSTALLDIR)/Contents/MacOS/$(PYTHONFRAMEWORK)-32" "$(DESTDIR)$(APPINSTALLDIR)/Contents/MacOS/$(PYTHONFRAMEWORK)" + lipo @LIPO_64BIT_FLAGS@ -output "$(DESTDIR)$(APPINSTALLDIR)/Contents/MacOS/$(PYTHONFRAMEWORK)-64" "$(DESTDIR)$(APPINSTALLDIR)/Contents/MacOS/$(PYTHONFRAMEWORK)" Modified: python/branches/release31-maint/Mac/README ============================================================================== --- python/branches/release31-maint/Mac/README (original) +++ python/branches/release31-maint/Mac/README Fri Mar 19 22:38:46 2010 @@ -5,6 +5,39 @@ This document provides a quick overview of some Mac OS X specific features in the Python distribution. +Mac-specific arguments to configure +=================================== + +* ``--enable-framework`` + + If this argument is specified the build will create a Python.framework rather + than a traditional Unix install. See the section + _`Building and using a framework-based Python on Mac OS X` for more + information on frameworks. + +* ``--with-framework-name=NAME`` + + Specify the name for the python framework, defaults to ``Python``. This option + is only valid when ``--enable-framework`` is specified. + +* ``--enable-universalsdk[=PATH]`` + + Create a universal binary build of of Python. This can be used with both + regular and framework builds. + + The optional argument specifies with OSX SDK should be used to perform the + build. This defaults to ``/Developer/SDKs/MacOSX.10.4u.sdk``, specify + ``/`` when building on a 10.5 system, especially when building 64-bit code. + + See the section _`Building and using a universal binary of Python on Mac OS X` + for more information. + +* ``--with-universal-archs=VALUE`` + + Specify the kind of universal binary that should be created. This option is + only valid when ``--enable-universalsdk`` is specified. + + Building and using a universal binary of Python on Mac OS X =========================================================== @@ -31,6 +64,34 @@ with Xcode 2.1 (or later). You also have to install the 10.4u SDK when installing Xcode. +The option ``--enable-universalsdk`` has an optional argument to specify an +SDK, which defaults to the 10.4u SDK. When you build on OSX 10.5 or later +you can use the system headers instead of an SDK:: + + $ ./configure --enable-universalsdk=/ + +2.1 Flavours of universal binaries +.................................. + +It is possible to build a number of flavours of the universal binary build, +the default is a 32-bit only binary (i386 and ppc). The flavour can be +specified using the option ``--with-universal-archs=VALUE``. The following +values are available: + + * ``32-bit``: ``ppc``, ``i386`` + + * ``64-bit``: ``ppc64``, ``x86_64`` + + * ``all``: ``ppc``, ``ppc64``, ``i386``, ``x86_64`` + + * ``3-way``: ``ppc``, ``i386`` and ``x86_64`` + + * ``intel``: ``i386``, ``x86_64`` + +To build a universal binary that includes a 64-bit architecture you must build +on a system running OSX 10.5 or later. The ``all`` flavour can only be build on +OSX 10.5. + Building and using a framework-based Python on Mac OS X. ======================================================== @@ -48,7 +109,7 @@ A second reason for using frameworks is that they put Python-related items in only two places: "/Library/Framework/Python.framework" and -"/Applications/MacPython 2.6". This simplifies matters for users installing +"/Applications/MacPython m.n". This simplifies matters for users installing Python from a binary distribution if they want to get rid of it again. Moreover, due to the way frameworks work a user without admin privileges can install a binary distribution in his or her home directory without recompilation. @@ -75,40 +136,34 @@ This directory contains a Makefile that will create a couple of python-related applications (fullblown OSX .app applications, that is) in -"/Applications/MacPython 2.6", and a hidden helper application Python.app +"/Applications/MacPython m.n", and a hidden helper application Python.app inside the Python.framework, and unix tools "python" and "pythonw" into /usr/local/bin. In addition it has a target "installmacsubtree" that installs the relevant portions of the Mac subtree into the Python.framework. It is normally invoked indirectly through the main Makefile, as the last step -in the sequence - - 1. ./configure --enable-framework +in the sequence:: - 2. make - - 3. make install + $ ./configure --enable-framework + $ make + $ make install This sequence will put the framework in /Library/Framework/Python.framework, -the applications in "/Applications/MacPython 2.6" and the unix tools in +the applications in "/Applications/MacPython m.n" and the unix tools in /usr/local/bin. +It is possible to select a different name for the framework using the configure +option ``--with-framework-name=NAME``. This makes it possible to have several +parallel installs of a Python framework. + Installing in another place, for instance $HOME/Library/Frameworks if you have no admin privileges on your machine, has only been tested very lightly. This can be done by configuring with --enable-framework=$HOME/Library/Frameworks. -The other two directories, "/Applications/MacPython-2.6" and /usr/local/bin, +The other two directories, "/Applications/MacPython-m.n" and /usr/local/bin, will then also be deposited in $HOME. This is sub-optimal for the unix tools, which you would want in $HOME/bin, but there is no easy way to fix this right now. -If you want to install some part, but not all, read the main Makefile. The -frameworkinstall is composed of a couple of sub-targets that install the -framework itself, the Mac subtree, the applications and the unix tools. - -There is an extra target frameworkinstallextras that is not part of the -normal frameworkinstall which installs the Demo and Tools directories -into "/Applications/MacPython 2.6", this is useful for binary distributions. - What do all these programs do? =============================== @@ -123,6 +178,11 @@ script to set runtime options. These options can be set once and for all through PythonLauncher's preferences dialog. +"BuildApplet.app" creates an applet from a Python script. Drop the script on it +and out comes a full-featured MacOS application. There is much more to this, +to be supplied later. Some useful (but outdated) info can be found in +Mac/Demo. + The commandline scripts /usr/local/bin/python and pythonw can be used to run non-GUI and GUI python scripts from the command line, respectively. Modified: python/branches/release31-maint/configure.in ============================================================================== --- python/branches/release31-maint/configure.in (original) +++ python/branches/release31-maint/configure.in Fri Mar 19 22:38:46 2010 @@ -120,6 +120,8 @@ AC_SUBST(ARCH_RUN_32BIT) UNIVERSAL_ARCHS="32-bit" +AC_SUBST(LIPO_32BIT_FLAGS) +AC_SUBST(LIPO_64BIT_FLAGS) AC_MSG_CHECKING(for --with-universal-archs) AC_ARG_WITH(universal-archs, AC_HELP_STRING(--with-universal-archs=ARCH, select architectures for universal build ("32-bit", "64-bit", "3-way", "intel" or "all")), @@ -175,14 +177,16 @@ PYTHONFRAMEWORKINSTALLDIR=$PYTHONFRAMEWORKPREFIX/$PYTHONFRAMEWORKDIR FRAMEWORKINSTALLFIRST="frameworkinstallstructure" FRAMEWORKALTINSTALLFIRST="frameworkinstallstructure " - if test "$UNIVERSAL_ARCHS" = "all" - then + case "${UNIVERSAL_ARCHS}" in + all|3-way|intel) FRAMEWORKINSTALLLAST="frameworkinstallmaclib frameworkinstallapps4way frameworkinstallunixtools4way" FRAMEWORKALTINSTALLLAST="frameworkinstallmaclib frameworkinstallapps4way frameworkaltinstallunixtools4way" - else + ;; + *) FRAMEWORKINSTALLLAST="frameworkinstallmaclib frameworkinstallapps frameworkinstallunixtools" FRAMEWORKALTINSTALLLAST="frameworkinstallmaclib frameworkinstallapps frameworkaltinstallunixtools" - fi + ;; + esac if test "x${prefix}" = "xNONE" ; then FRAMEWORKUNIXTOOLSPREFIX="${ac_default_prefix}" @@ -913,24 +917,30 @@ if test "${enable_universalsdk}"; then UNIVERSAL_ARCH_FLAGS="" if test "$UNIVERSAL_ARCHS" = "32-bit" ; then - UNIVERSAL_ARCH_FLAGS="-arch ppc -arch i386" ARCH_RUN_32BIT="" + UNIVERSAL_ARCH_FLAGS="-arch ppc -arch i386" elif test "$UNIVERSAL_ARCHS" = "64-bit" ; then - UNIVERSAL_ARCH_FLAGS="-arch ppc64 -arch x86_64" ARCH_RUN_32BIT="true" + UNIVERSAL_ARCH_FLAGS="-arch ppc64 -arch x86_64" elif test "$UNIVERSAL_ARCHS" = "all" ; then - UNIVERSAL_ARCH_FLAGS="-arch i386 -arch ppc -arch ppc64 -arch x86_64" ARCH_RUN_32BIT="/usr/bin/arch -i386 -ppc" + UNIVERSAL_ARCH_FLAGS="-arch i386 -arch ppc -arch ppc64 -arch x86_64" + LIPO_32BIT_FLAGS="-extract i386 -extract ppc7400" + LIPO_64BIT_FLAGS="-extract x86_64 -extract ppc64" elif test "$UNIVERSAL_ARCHS" = "intel" ; then - UNIVERSAL_ARCH_FLAGS="-arch i386 -arch x86_64" ARCH_RUN_32BIT="/usr/bin/arch -i386" + UNIVERSAL_ARCH_FLAGS="-arch i386 -arch x86_64" + LIPO_32BIT_FLAGS="-extract i386" + LIPO_64BIT_FLAGS="-extract x86_64" elif test "$UNIVERSAL_ARCHS" = "3-way" ; then - UNIVERSAL_ARCH_FLAGS="-arch i386 -arch ppc -arch x86_64" ARCH_RUN_32BIT="/usr/bin/arch -i386 -ppc" + UNIVERSAL_ARCH_FLAGS="-arch i386 -arch ppc -arch x86_64" + LIPO_32BIT_FLAGS="-extract i386 -extract ppc7400" + LIPO_64BIT_FLAGS="-extract x86_64" else AC_MSG_ERROR([proper usage is --with-universal-arch=32-bit|64-bit|all|intel|3-way]) From python-checkins at python.org Fri Mar 19 22:41:37 2010 From: python-checkins at python.org (collin.winter) Date: Fri, 19 Mar 2010 22:41:37 +0100 (CET) Subject: [Python-checkins] r79118 - in python/branches/py3k-jit: Demo/turtle/tdemo_nim.py Demo/turtle/tdemo_round_dance.py Doc/includes/dbpickle.py Include/dtoa.h Include/pyctype.h Lib/importlib/_bootstrap.py Lib/importlib/abc.py Lib/importlib/machinery.py Lib/importlib/test/__init__.py Lib/importlib/test/__main__.py Lib/importlib/test/abc.py Lib/importlib/test/benchmark.py Lib/importlib/test/builtin/__init__.py Lib/importlib/test/builtin/test_finder.py Lib/importlib/test/builtin/test_loader.py Lib/importlib/test/builtin/util.py Lib/importlib/test/extension/__init__.py Lib/importlib/test/extension/test_case_sensitivity.py Lib/importlib/test/extension/test_finder.py Lib/importlib/test/extension/test_loader.py Lib/importlib/test/extension/test_path_hook.py Lib/importlib/test/extension/util.py Lib/importlib/test/frozen/__init__.py Lib/importlib/test/frozen/test_finder.py Lib/importlib/test/frozen/test_loader.py Lib/importlib/test/import_/__init__.py Lib/importlib/test/import_/test___package__.py Lib/importlib/test/import_/test_api.py Lib/importlib/test/import_/test_caching.py Lib/importlib/test/import_/test_fromlist.py Lib/importlib/test/import_/test_meta_path.py Lib/importlib/test/import_/test_packages.py Lib/importlib/test/import_/test_path.py Lib/importlib/test/import_/test_relative_imports.py Lib/importlib/test/import_/util.py Lib/importlib/test/regrtest.py Lib/importlib/test/source/__init__.py Lib/importlib/test/source/test_abc_loader.py Lib/importlib/test/source/test_case_sensitivity.py Lib/importlib/test/source/test_file_loader.py Lib/importlib/test/source/test_finder.py Lib/importlib/test/source/test_path_hook.py Lib/importlib/test/source/test_source_encoding.py Lib/importlib/test/source/util.py Lib/importlib/test/test_abc.py Lib/importlib/test/test_api.py Lib/importlib/test/test_util.py Lib/importlib/test/util.py Lib/importlib/util.py Lib/test/support.py Lib/test/test_bigmem.py Lib/test/test_bytes.py Lib/test/test_cprofile.py Lib/test/test_flufl.py Lib/test/test_grammar.py Lib/test/test_httpservers.py Lib/test/test_index.py Lib/test/test_minidom.py Lib/test/test_normalization.py Lib/test/test_profilehooks.py Lib/test/test_scope.py Lib/test/test_subprocess.py Lib/test/test_unicodedata.py Lib/test/test_urllib2_localnet.py Lib/test/test_urllib_response.py Lib/urllib/__init__.py Lib/urllib/error.py Lib/urllib/response.py Makefile.pre.in Misc/NEWS Misc/maintainers.rst Misc/python-config.in Modules/_ctypes/libffi.diff Modules/_ctypes/libffi/ChangeLog Modules/_ctypes/libffi/ChangeLog.libffi Modules/_ctypes/libffi/Makefile.am Modules/_ctypes/libffi/README Modules/_ctypes/libffi/aclocal.m4 Modules/_ctypes/libffi/configure Modules/_ctypes/libffi/configure.ac Modules/_ctypes/libffi/doc/libffi.info Modules/_ctypes/libffi/doc/libffi.texi Modules/_ctypes/libffi/doc/stamp-vti Modules/_ctypes/libffi/doc/version.texi Modules/_ctypes/libffi/fficonfig.h.in Modules/_ctypes/libffi/include/ffi.h.in Modules/_ctypes/libffi/msvcc.sh Modules/_ctypes/libffi/src/closures.c Modules/_ctypes/libffi/src/mips/n32.S Modules/_ctypes/libffi/src/moxie Modules/_ctypes/libffi/src/prep_cif.c Modules/_ctypes/libffi/src/x86/ffi.c Modules/_ctypes/libffi/src/x86/ffi64.c Modules/_ctypes/libffi/src/x86/ffitarget.h Modules/_ctypes/libffi/src/x86/win32.S Modules/_ctypes/libffi/testsuite/lib/libffi-dg.exp Modules/_ctypes/libffi/testsuite/libffi.call/cls_align_sint64.c Modules/_ctypes/libffi/testsuite/libffi.call/cls_align_uint64.c Modules/_ctypes/libffi/testsuite/libffi.call/cls_longdouble.c Modules/_ctypes/libffi/testsuite/libffi.call/cls_ulonglong.c Modules/_ctypes/libffi/testsuite/libffi.call/ffitest.h Modules/_ctypes/libffi/testsuite/libffi.call/return_ll1.c Modules/_ctypes/libffi/testsuite/libffi.call/stret_medium2.c Modules/_ctypes/libffi/testsuite/libffi.special/ffitestcxx.h Modules/_math.c Modules/_math.h Modules/_posixsubprocess.c Modules/hashlib.h Objects/longobject.c Python/dtoa.c Python/pyctype.c Tools/unicode/gencodec.py Tools/unicode/makeunicodedata.py Message-ID: <20100319214137.6F4DFF16E@mail.python.org> Author: collin.winter Date: Fri Mar 19 22:41:36 2010 New Revision: 79118 Log: Merged revisions 79080,79083,79087-79088,79092-79095,79097,79099,79102-79103,79107-79113,79116 via svnmerge from svn+ssh://pythondev at svn.python.org/python/branches/py3k ................ r79080 | benjamin.peterson | 2010-03-18 16:14:21 -0700 (Thu, 18 Mar 2010) | 8 lines Blocked revisions 79078 via svnmerge ........ r79078 | benjamin.peterson | 2010-03-18 18:12:43 -0500 (Thu, 18 Mar 2010) | 1 line make compiler's py3k warning a full deprecation warning #6837 ........ ................ r79083 | florent.xicluna | 2010-03-18 17:03:01 -0700 (Thu, 18 Mar 2010) | 2 lines Fix bad unicodedata checksum merge from trunk in r79062 ................ r79087 | benjamin.peterson | 2010-03-18 18:08:38 -0700 (Thu, 18 Mar 2010) | 12 lines Blocked revisions 79078,79086 via svnmerge ........ r79078 | benjamin.peterson | 2010-03-18 18:12:43 -0500 (Thu, 18 Mar 2010) | 1 line make compiler's py3k warning a full deprecation warning #6837 ........ r79086 | benjamin.peterson | 2010-03-18 20:06:33 -0500 (Thu, 18 Mar 2010) | 1 line keep DeprecationWarning from failing test ........ ................ r79088 | florent.xicluna | 2010-03-18 18:17:46 -0700 (Thu, 18 Mar 2010) | 2 lines Revert Unicode UCD 5.2 upgrade in 3.x. It broke repr() for unicode objects, and gave failures in test_bigmem. Revert 79062, 79065 and 79083. ................ r79092 | mark.dickinson | 2010-03-19 05:38:03 -0700 (Fri, 19 Mar 2010) | 1 line Remove out-of-date comment about making ints and longs hash equal. ................ r79093 | florent.xicluna | 2010-03-19 06:37:08 -0700 (Fri, 19 Mar 2010) | 11 lines Fixed a failure in test_bigmem. Merged revision 79059 via svnmerge from svn+ssh://pythondev at svn.python.org/python/trunk ........ r79059 | florent.xicluna | 2010-03-18 22:50:06 +0100 (jeu, 18 mar 2010) | 2 lines Issue #8024: Update the Unicode database to 5.2 ........ ................ r79094 | florent.xicluna | 2010-03-19 07:25:03 -0700 (Fri, 19 Mar 2010) | 14 lines Merged revisions 78982,78986 via svnmerge from svn+ssh://pythondev at svn.python.org/python/trunk ........ r78982 | florent.xicluna | 2010-03-15 15:00:58 +0100 (lun, 15 mar 2010) | 2 lines Remove py3k deprecation warnings from these Unicode tools. ........ r78986 | florent.xicluna | 2010-03-15 19:08:58 +0100 (lun, 15 mar 2010) | 3 lines Issue #7783 and #7787: open_urlresource invalidates the outdated files from the local cache. Use this feature to fix test_normalization. ........ ................ r79095 | florent.xicluna | 2010-03-19 07:40:31 -0700 (Fri, 19 Mar 2010) | 2 lines Rename test.test_support to test.support for 3.x. ................ r79097 | gregory.p.smith | 2010-03-19 09:53:08 -0700 (Fri, 19 Mar 2010) | 7 lines * Fix a refleak when a preexec_fn was supplied (preexec_fn_args_tuple was not being defref'ed). * Fixes another potential refleak of a reference to the gc module in the unlikely odd case where gc module isenabled or disable calls fail. * Adds a unittest for the above case to verify behavior and lack of leaks. ................ r79099 | matthias.klose | 2010-03-19 10:47:21 -0700 (Fri, 19 Mar 2010) | 15 lines Merged revisions 79098 via svnmerge from svn+ssh://pythondev at svn.python.org/python/trunk ........ r79098 | matthias.klose | 2010-03-19 18:46:33 +0100 (Fr, 19 M?r 2010) | 8 lines Generate libffi's Makefiles again to be able to run the libffi testsuite -- Diese und die folgenden Zeilen werden ignoriert -- M _ctypes/libffi/configure M _ctypes/libffi/configure.ac M _ctypes/libffi/aclocal.m4 M _ctypes/libffi.diff ........ ................ r79102 | florent.xicluna | 2010-03-19 12:00:44 -0700 (Fri, 19 Mar 2010) | 9 lines Merged revisions 79100 via svnmerge from svn+ssh://pythondev at svn.python.org/python/trunk ........ r79100 | florent.xicluna | 2010-03-19 19:34:55 +0100 (ven, 19 mar 2010) | 2 lines Various tests cleanup: check_warnings/check_py3k_warnings, unittest.assert* and setUp/tearDown. ........ ................ r79103 | matthias.klose | 2010-03-19 12:02:09 -0700 (Fri, 19 Mar 2010) | 10 lines Merged revisions 79101 via svnmerge from svn+ssh://pythondev at svn.python.org/python/trunk ........ r79101 | matthias.klose | 2010-03-19 19:59:20 +0100 (Fr, 19 M?r 2010) | 3 lines update libffi to commit 59a259f4d348f593b45f452309f4d020a28051c4 from the trunk (adding msvc port). ........ ................ r79107 | benjamin.peterson | 2010-03-19 13:42:30 -0700 (Fri, 19 Mar 2010) | 9 lines Merged revisions 79106 via svnmerge from svn+ssh://pythondev at svn.python.org/python/trunk ........ r79106 | benjamin.peterson | 2010-03-19 15:39:41 -0500 (Fri, 19 Mar 2010) | 1 line set svn:eol-style to native on C files ........ ................ r79108 | benjamin.peterson | 2010-03-19 13:44:28 -0700 (Fri, 19 Mar 2010) | 1 line set svn:eol-style on importlib files ................ r79109 | benjamin.peterson | 2010-03-19 13:58:52 -0700 (Fri, 19 Mar 2010) | 1 line fix demo/doc eol ................ r79110 | benjamin.peterson | 2010-03-19 14:00:11 -0700 (Fri, 19 Mar 2010) | 1 line fix test eol ................ r79111 | benjamin.peterson | 2010-03-19 14:00:32 -0700 (Fri, 19 Mar 2010) | 1 line set urllib svn:eol-style ................ r79112 | benjamin.peterson | 2010-03-19 14:01:04 -0700 (Fri, 19 Mar 2010) | 1 line set svn:eol-style on modules ................ r79113 | benjamin.peterson | 2010-03-19 14:01:27 -0700 (Fri, 19 Mar 2010) | 1 line make maintainers.rst have correct eol ................ r79116 | collin.winter | 2010-03-19 14:17:17 -0700 (Fri, 19 Mar 2010) | 13 lines Merged revisions 79082,79084 via svnmerge from svn+ssh://pythondev at svn.python.org/python/trunk ........ r79082 | collin.winter | 2010-03-18 17:00:30 -0700 (Thu, 18 Mar 2010) | 1 line Add a separate python-config make target, useful for testing changes to Misc/python-config.in. ........ r79084 | collin.winter | 2010-03-18 17:08:44 -0700 (Thu, 18 Mar 2010) | 1 line Make python-config support multiple option flags on the same command line, rather than requiring one invocation per flag. ........ ................ Added: python/branches/py3k-jit/Modules/_ctypes/libffi/msvcc.sh - copied unchanged from r79116, /python/branches/py3k/Modules/_ctypes/libffi/msvcc.sh python/branches/py3k-jit/Modules/_ctypes/libffi/src/moxie/ - copied from r79116, /python/branches/py3k/Modules/_ctypes/libffi/src/moxie/ Modified: python/branches/py3k-jit/ (props changed) python/branches/py3k-jit/Demo/turtle/tdemo_nim.py (contents, props changed) python/branches/py3k-jit/Demo/turtle/tdemo_round_dance.py (contents, props changed) python/branches/py3k-jit/Doc/includes/dbpickle.py (props changed) python/branches/py3k-jit/Include/dtoa.h (props changed) python/branches/py3k-jit/Include/pyctype.h (props changed) python/branches/py3k-jit/Lib/importlib/_bootstrap.py (props changed) python/branches/py3k-jit/Lib/importlib/abc.py (props changed) python/branches/py3k-jit/Lib/importlib/machinery.py (props changed) python/branches/py3k-jit/Lib/importlib/test/__init__.py (props changed) python/branches/py3k-jit/Lib/importlib/test/__main__.py (props changed) python/branches/py3k-jit/Lib/importlib/test/abc.py (props changed) python/branches/py3k-jit/Lib/importlib/test/benchmark.py (props changed) python/branches/py3k-jit/Lib/importlib/test/builtin/__init__.py (props changed) python/branches/py3k-jit/Lib/importlib/test/builtin/test_finder.py (props changed) python/branches/py3k-jit/Lib/importlib/test/builtin/test_loader.py (props changed) python/branches/py3k-jit/Lib/importlib/test/builtin/util.py (props changed) python/branches/py3k-jit/Lib/importlib/test/extension/__init__.py (props changed) python/branches/py3k-jit/Lib/importlib/test/extension/test_case_sensitivity.py (props changed) python/branches/py3k-jit/Lib/importlib/test/extension/test_finder.py (props changed) python/branches/py3k-jit/Lib/importlib/test/extension/test_loader.py (props changed) python/branches/py3k-jit/Lib/importlib/test/extension/test_path_hook.py (props changed) python/branches/py3k-jit/Lib/importlib/test/extension/util.py (props changed) python/branches/py3k-jit/Lib/importlib/test/frozen/__init__.py (props changed) python/branches/py3k-jit/Lib/importlib/test/frozen/test_finder.py (props changed) python/branches/py3k-jit/Lib/importlib/test/frozen/test_loader.py (props changed) python/branches/py3k-jit/Lib/importlib/test/import_/__init__.py (props changed) python/branches/py3k-jit/Lib/importlib/test/import_/test___package__.py (props changed) python/branches/py3k-jit/Lib/importlib/test/import_/test_api.py (props changed) python/branches/py3k-jit/Lib/importlib/test/import_/test_caching.py (props changed) python/branches/py3k-jit/Lib/importlib/test/import_/test_fromlist.py (props changed) python/branches/py3k-jit/Lib/importlib/test/import_/test_meta_path.py (props changed) python/branches/py3k-jit/Lib/importlib/test/import_/test_packages.py (props changed) python/branches/py3k-jit/Lib/importlib/test/import_/test_path.py (props changed) python/branches/py3k-jit/Lib/importlib/test/import_/test_relative_imports.py (props changed) python/branches/py3k-jit/Lib/importlib/test/import_/util.py (props changed) python/branches/py3k-jit/Lib/importlib/test/regrtest.py (props changed) python/branches/py3k-jit/Lib/importlib/test/source/__init__.py (props changed) python/branches/py3k-jit/Lib/importlib/test/source/test_abc_loader.py (props changed) python/branches/py3k-jit/Lib/importlib/test/source/test_case_sensitivity.py (props changed) python/branches/py3k-jit/Lib/importlib/test/source/test_file_loader.py (props changed) python/branches/py3k-jit/Lib/importlib/test/source/test_finder.py (props changed) python/branches/py3k-jit/Lib/importlib/test/source/test_path_hook.py (props changed) python/branches/py3k-jit/Lib/importlib/test/source/test_source_encoding.py (props changed) python/branches/py3k-jit/Lib/importlib/test/source/util.py (props changed) python/branches/py3k-jit/Lib/importlib/test/test_abc.py (props changed) python/branches/py3k-jit/Lib/importlib/test/test_api.py (props changed) python/branches/py3k-jit/Lib/importlib/test/test_util.py (props changed) python/branches/py3k-jit/Lib/importlib/test/util.py (props changed) python/branches/py3k-jit/Lib/importlib/util.py (props changed) python/branches/py3k-jit/Lib/test/support.py python/branches/py3k-jit/Lib/test/test_bigmem.py python/branches/py3k-jit/Lib/test/test_bytes.py python/branches/py3k-jit/Lib/test/test_cprofile.py (props changed) python/branches/py3k-jit/Lib/test/test_flufl.py (props changed) python/branches/py3k-jit/Lib/test/test_grammar.py python/branches/py3k-jit/Lib/test/test_httpservers.py python/branches/py3k-jit/Lib/test/test_index.py python/branches/py3k-jit/Lib/test/test_minidom.py python/branches/py3k-jit/Lib/test/test_normalization.py python/branches/py3k-jit/Lib/test/test_profilehooks.py python/branches/py3k-jit/Lib/test/test_scope.py python/branches/py3k-jit/Lib/test/test_subprocess.py python/branches/py3k-jit/Lib/test/test_unicodedata.py python/branches/py3k-jit/Lib/test/test_urllib2_localnet.py python/branches/py3k-jit/Lib/test/test_urllib_response.py (props changed) python/branches/py3k-jit/Lib/urllib/__init__.py (props changed) python/branches/py3k-jit/Lib/urllib/error.py (props changed) python/branches/py3k-jit/Lib/urllib/response.py (props changed) python/branches/py3k-jit/Makefile.pre.in python/branches/py3k-jit/Misc/NEWS python/branches/py3k-jit/Misc/maintainers.rst (props changed) python/branches/py3k-jit/Misc/python-config.in python/branches/py3k-jit/Modules/_ctypes/libffi.diff python/branches/py3k-jit/Modules/_ctypes/libffi/ChangeLog python/branches/py3k-jit/Modules/_ctypes/libffi/ChangeLog.libffi python/branches/py3k-jit/Modules/_ctypes/libffi/Makefile.am python/branches/py3k-jit/Modules/_ctypes/libffi/README python/branches/py3k-jit/Modules/_ctypes/libffi/aclocal.m4 python/branches/py3k-jit/Modules/_ctypes/libffi/configure python/branches/py3k-jit/Modules/_ctypes/libffi/configure.ac python/branches/py3k-jit/Modules/_ctypes/libffi/doc/libffi.info python/branches/py3k-jit/Modules/_ctypes/libffi/doc/libffi.texi python/branches/py3k-jit/Modules/_ctypes/libffi/doc/stamp-vti python/branches/py3k-jit/Modules/_ctypes/libffi/doc/version.texi python/branches/py3k-jit/Modules/_ctypes/libffi/fficonfig.h.in python/branches/py3k-jit/Modules/_ctypes/libffi/include/ffi.h.in python/branches/py3k-jit/Modules/_ctypes/libffi/src/closures.c python/branches/py3k-jit/Modules/_ctypes/libffi/src/mips/n32.S python/branches/py3k-jit/Modules/_ctypes/libffi/src/prep_cif.c python/branches/py3k-jit/Modules/_ctypes/libffi/src/x86/ffi.c python/branches/py3k-jit/Modules/_ctypes/libffi/src/x86/ffi64.c python/branches/py3k-jit/Modules/_ctypes/libffi/src/x86/ffitarget.h python/branches/py3k-jit/Modules/_ctypes/libffi/src/x86/win32.S python/branches/py3k-jit/Modules/_ctypes/libffi/testsuite/lib/libffi-dg.exp python/branches/py3k-jit/Modules/_ctypes/libffi/testsuite/libffi.call/cls_align_sint64.c python/branches/py3k-jit/Modules/_ctypes/libffi/testsuite/libffi.call/cls_align_uint64.c python/branches/py3k-jit/Modules/_ctypes/libffi/testsuite/libffi.call/cls_longdouble.c python/branches/py3k-jit/Modules/_ctypes/libffi/testsuite/libffi.call/cls_ulonglong.c python/branches/py3k-jit/Modules/_ctypes/libffi/testsuite/libffi.call/ffitest.h python/branches/py3k-jit/Modules/_ctypes/libffi/testsuite/libffi.call/return_ll1.c python/branches/py3k-jit/Modules/_ctypes/libffi/testsuite/libffi.call/stret_medium2.c python/branches/py3k-jit/Modules/_ctypes/libffi/testsuite/libffi.special/ffitestcxx.h python/branches/py3k-jit/Modules/_math.c (props changed) python/branches/py3k-jit/Modules/_math.h (props changed) python/branches/py3k-jit/Modules/_posixsubprocess.c (contents, props changed) python/branches/py3k-jit/Modules/hashlib.h (props changed) python/branches/py3k-jit/Objects/longobject.c python/branches/py3k-jit/Python/dtoa.c (props changed) python/branches/py3k-jit/Python/pyctype.c (props changed) python/branches/py3k-jit/Tools/unicode/gencodec.py python/branches/py3k-jit/Tools/unicode/makeunicodedata.py Modified: python/branches/py3k-jit/Demo/turtle/tdemo_nim.py ============================================================================== --- python/branches/py3k-jit/Demo/turtle/tdemo_nim.py (original) +++ python/branches/py3k-jit/Demo/turtle/tdemo_nim.py Fri Mar 19 22:41:36 2010 @@ -1,227 +1,226 @@ -""" turtle-example-suite: - - tdemo_nim.py - -Play nim against the computer. The player -who takes the last stick is the winner. - -Implements the model-view-controller -design pattern. -""" - - -import turtle -import random -import time - -SCREENWIDTH = 640 -SCREENHEIGHT = 480 - -MINSTICKS = 7 -MAXSTICKS = 31 - -HUNIT = SCREENHEIGHT // 12 -WUNIT = SCREENWIDTH // ((MAXSTICKS // 5) * 11 + (MAXSTICKS % 5) * 2) - -SCOLOR = (63, 63, 31) -HCOLOR = (255, 204, 204) -COLOR = (204, 204, 255) - -def randomrow(): - return random.randint(MINSTICKS, MAXSTICKS) - -def computerzug(state): - xored = state[0] ^ state[1] ^ state[2] - if xored == 0: - return randommove(state) - for z in range(3): - s = state[z] ^ xored - if s <= state[z]: - move = (z, s) - return move - -def randommove(state): - m = max(state) - while True: - z = random.randint(0,2) - if state[z] > (m > 1): - break - rand = random.randint(m > 1, state[z]-1) - return z, rand - - -class NimModel(object): - def __init__(self, game): - self.game = game - - def setup(self): - if self.game.state not in [Nim.CREATED, Nim.OVER]: - return - self.sticks = [randomrow(), randomrow(), randomrow()] - self.player = 0 - self.winner = None - self.game.view.setup() - self.game.state = Nim.RUNNING - - def move(self, row, col): - maxspalte = self.sticks[row] - self.sticks[row] = col - self.game.view.notify_move(row, col, maxspalte, self.player) - if self.game_over(): - self.game.state = Nim.OVER - self.winner = self.player - self.game.view.notify_over() - elif self.player == 0: - self.player = 1 - row, col = computerzug(self.sticks) - self.move(row, col) - self.player = 0 - - def game_over(self): - return self.sticks == [0, 0, 0] - - def notify_move(self, row, col): - if self.sticks[row] <= col: - return - self.move(row, col) - - -class Stick(turtle.Turtle): - def __init__(self, row, col, game): - turtle.Turtle.__init__(self, visible=False) - self.row = row - self.col = col - self.game = game - x, y = self.coords(row, col) - self.shape("square") - self.shapesize(HUNIT/10.0, WUNIT/20.0) - self.speed(0) - self.pu() - self.goto(x,y) - self.color("white") - self.showturtle() - - def coords(self, row, col): - packet, remainder = divmod(col, 5) - x = (3 + 11 * packet + 2 * remainder) * WUNIT - y = (2 + 3 * row) * HUNIT - return x - SCREENWIDTH // 2 + WUNIT // 2, SCREENHEIGHT // 2 - y - HUNIT // 2 - - def makemove(self, x, y): - if self.game.state != Nim.RUNNING: - return - self.game.controller.notify_move(self.row, self.col) - - -class NimView(object): - def __init__(self, game): - self.game = game - self.screen = game.screen - self.model = game.model - self.screen.colormode(255) - self.screen.tracer(False) - self.screen.bgcolor((240, 240, 255)) - self.writer = turtle.Turtle(visible=False) - self.writer.pu() - self.writer.speed(0) - self.sticks = {} - for row in range(3): - for col in range(MAXSTICKS): - self.sticks[(row, col)] = Stick(row, col, game) - self.display("... a moment please ...") - self.screen.tracer(True) - - def display(self, msg1, msg2=None): - self.screen.tracer(False) - self.writer.clear() - if msg2 is not None: - self.writer.goto(0, - SCREENHEIGHT // 2 + 48) - self.writer.pencolor("red") - self.writer.write(msg2, align="center", font=("Courier",18,"bold")) - self.writer.goto(0, - SCREENHEIGHT // 2 + 20) - self.writer.pencolor("black") - self.writer.write(msg1, align="center", font=("Courier",14,"bold")) - self.screen.tracer(True) - - - def setup(self): - self.screen.tracer(False) - for row in range(3): - for col in range(self.model.sticks[row]): - self.sticks[(row, col)].color(SCOLOR) - for row in range(3): - for col in range(self.model.sticks[row], MAXSTICKS): - self.sticks[(row, col)].color("white") - self.display("Your turn! Click leftmost stick to remove.") - self.screen.tracer(True) - - def notify_move(self, row, col, maxspalte, player): - if player == 0: - farbe = HCOLOR - for s in range(col, maxspalte): - self.sticks[(row, s)].color(farbe) - else: - self.display(" ... thinking ... ") - time.sleep(0.5) - self.display(" ... thinking ... aaah ...") - farbe = COLOR - for s in range(maxspalte-1, col-1, -1): - time.sleep(0.2) - self.sticks[(row, s)].color(farbe) - self.display("Your turn! Click leftmost stick to remove.") - - def notify_over(self): - if self.game.model.winner == 0: - msg2 = "Congrats. You're the winner!!!" - else: - msg2 = "Sorry, the computer is the winner." - self.display("To play again press space bar. To leave press ESC.", msg2) - - def clear(self): - if self.game.state == Nim.OVER: - self.screen.clear() - -class NimController(object): - - def __init__(self, game): - self.game = game - self.sticks = game.view.sticks - self.BUSY = False - for stick in self.sticks.values(): - stick.onclick(stick.makemove) - self.game.screen.onkey(self.game.model.setup, "space") - self.game.screen.onkey(self.game.view.clear, "Escape") - self.game.view.display("Press space bar to start game") - self.game.screen.listen() - - def notify_move(self, row, col): - if self.BUSY: - return - self.BUSY = True - self.game.model.notify_move(row, col) - self.BUSY = False - -class Nim(object): - CREATED = 0 - RUNNING = 1 - OVER = 2 - def __init__(self, screen): - self.state = Nim.CREATED - self.screen = screen - self.model = NimModel(self) - self.view = NimView(self) - self.controller = NimController(self) - - -mainscreen = turtle.Screen() -mainscreen.mode("standard") -mainscreen.setup(SCREENWIDTH, SCREENHEIGHT) - -def main(): - nim = Nim(mainscreen) - return "EVENTLOOP!" - -if __name__ == "__main__": - main() - turtle.mainloop() - +""" turtle-example-suite: + + tdemo_nim.py + +Play nim against the computer. The player +who takes the last stick is the winner. + +Implements the model-view-controller +design pattern. +""" + + +import turtle +import random +import time + +SCREENWIDTH = 640 +SCREENHEIGHT = 480 + +MINSTICKS = 7 +MAXSTICKS = 31 + +HUNIT = SCREENHEIGHT // 12 +WUNIT = SCREENWIDTH // ((MAXSTICKS // 5) * 11 + (MAXSTICKS % 5) * 2) + +SCOLOR = (63, 63, 31) +HCOLOR = (255, 204, 204) +COLOR = (204, 204, 255) + +def randomrow(): + return random.randint(MINSTICKS, MAXSTICKS) + +def computerzug(state): + xored = state[0] ^ state[1] ^ state[2] + if xored == 0: + return randommove(state) + for z in range(3): + s = state[z] ^ xored + if s <= state[z]: + move = (z, s) + return move + +def randommove(state): + m = max(state) + while True: + z = random.randint(0,2) + if state[z] > (m > 1): + break + rand = random.randint(m > 1, state[z]-1) + return z, rand + + +class NimModel(object): + def __init__(self, game): + self.game = game + + def setup(self): + if self.game.state not in [Nim.CREATED, Nim.OVER]: + return + self.sticks = [randomrow(), randomrow(), randomrow()] + self.player = 0 + self.winner = None + self.game.view.setup() + self.game.state = Nim.RUNNING + + def move(self, row, col): + maxspalte = self.sticks[row] + self.sticks[row] = col + self.game.view.notify_move(row, col, maxspalte, self.player) + if self.game_over(): + self.game.state = Nim.OVER + self.winner = self.player + self.game.view.notify_over() + elif self.player == 0: + self.player = 1 + row, col = computerzug(self.sticks) + self.move(row, col) + self.player = 0 + + def game_over(self): + return self.sticks == [0, 0, 0] + + def notify_move(self, row, col): + if self.sticks[row] <= col: + return + self.move(row, col) + + +class Stick(turtle.Turtle): + def __init__(self, row, col, game): + turtle.Turtle.__init__(self, visible=False) + self.row = row + self.col = col + self.game = game + x, y = self.coords(row, col) + self.shape("square") + self.shapesize(HUNIT/10.0, WUNIT/20.0) + self.speed(0) + self.pu() + self.goto(x,y) + self.color("white") + self.showturtle() + + def coords(self, row, col): + packet, remainder = divmod(col, 5) + x = (3 + 11 * packet + 2 * remainder) * WUNIT + y = (2 + 3 * row) * HUNIT + return x - SCREENWIDTH // 2 + WUNIT // 2, SCREENHEIGHT // 2 - y - HUNIT // 2 + + def makemove(self, x, y): + if self.game.state != Nim.RUNNING: + return + self.game.controller.notify_move(self.row, self.col) + + +class NimView(object): + def __init__(self, game): + self.game = game + self.screen = game.screen + self.model = game.model + self.screen.colormode(255) + self.screen.tracer(False) + self.screen.bgcolor((240, 240, 255)) + self.writer = turtle.Turtle(visible=False) + self.writer.pu() + self.writer.speed(0) + self.sticks = {} + for row in range(3): + for col in range(MAXSTICKS): + self.sticks[(row, col)] = Stick(row, col, game) + self.display("... a moment please ...") + self.screen.tracer(True) + + def display(self, msg1, msg2=None): + self.screen.tracer(False) + self.writer.clear() + if msg2 is not None: + self.writer.goto(0, - SCREENHEIGHT // 2 + 48) + self.writer.pencolor("red") + self.writer.write(msg2, align="center", font=("Courier",18,"bold")) + self.writer.goto(0, - SCREENHEIGHT // 2 + 20) + self.writer.pencolor("black") + self.writer.write(msg1, align="center", font=("Courier",14,"bold")) + self.screen.tracer(True) + + + def setup(self): + self.screen.tracer(False) + for row in range(3): + for col in range(self.model.sticks[row]): + self.sticks[(row, col)].color(SCOLOR) + for row in range(3): + for col in range(self.model.sticks[row], MAXSTICKS): + self.sticks[(row, col)].color("white") + self.display("Your turn! Click leftmost stick to remove.") + self.screen.tracer(True) + + def notify_move(self, row, col, maxspalte, player): + if player == 0: + farbe = HCOLOR + for s in range(col, maxspalte): + self.sticks[(row, s)].color(farbe) + else: + self.display(" ... thinking ... ") + time.sleep(0.5) + self.display(" ... thinking ... aaah ...") + farbe = COLOR + for s in range(maxspalte-1, col-1, -1): + time.sleep(0.2) + self.sticks[(row, s)].color(farbe) + self.display("Your turn! Click leftmost stick to remove.") + + def notify_over(self): + if self.game.model.winner == 0: + msg2 = "Congrats. You're the winner!!!" + else: + msg2 = "Sorry, the computer is the winner." + self.display("To play again press space bar. To leave press ESC.", msg2) + + def clear(self): + if self.game.state == Nim.OVER: + self.screen.clear() + +class NimController(object): + + def __init__(self, game): + self.game = game + self.sticks = game.view.sticks + self.BUSY = False + for stick in self.sticks.values(): + stick.onclick(stick.makemove) + self.game.screen.onkey(self.game.model.setup, "space") + self.game.screen.onkey(self.game.view.clear, "Escape") + self.game.view.display("Press space bar to start game") + self.game.screen.listen() + + def notify_move(self, row, col): + if self.BUSY: + return + self.BUSY = True + self.game.model.notify_move(row, col) + self.BUSY = False + +class Nim(object): + CREATED = 0 + RUNNING = 1 + OVER = 2 + def __init__(self, screen): + self.state = Nim.CREATED + self.screen = screen + self.model = NimModel(self) + self.view = NimView(self) + self.controller = NimController(self) + + +mainscreen = turtle.Screen() +mainscreen.mode("standard") +mainscreen.setup(SCREENWIDTH, SCREENHEIGHT) + +def main(): + nim = Nim(mainscreen) + return "EVENTLOOP!" + +if __name__ == "__main__": + main() + turtle.mainloop() Modified: python/branches/py3k-jit/Demo/turtle/tdemo_round_dance.py ============================================================================== --- python/branches/py3k-jit/Demo/turtle/tdemo_round_dance.py (original) +++ python/branches/py3k-jit/Demo/turtle/tdemo_round_dance.py Fri Mar 19 22:41:36 2010 @@ -1,90 +1,86 @@ -""" turtle-example-suite: - - tdemo_round_dance.py - -(Needs version 1.1 of the turtle module that -comes with Python 3.1) - -Dancing turtles have a compound shape -consisting of a series of triangles of -decreasing size. - -Turtles march along a circle while rotating -pairwise in opposite direction, with one -exception. Does that breaking of symmetry -enhance the attractiveness of the example? - -Press any key to stop the animation. - -Technically: demonstrates use of compound -shapes, transformation of shapes as well as -cloning turtles. The animation is -controlled through update(). -""" - -from turtle import * - -def stop(): - global running - running = False - -def main(): - global running - clearscreen() - bgcolor("gray10") - tracer(False) - shape("triangle") - f = 0.793402 - phi = 9.064678 - s = 5 - c = 1 - # create compound shape - sh = Shape("compound") - for i in range(10): - shapesize(s) - p =get_shapepoly() - s *= f - c *= f - tilt(-phi) - sh.addcomponent(p, (c, 0.25, 1-c), "black") - register_shape("multitri", sh) - # create dancers - shapesize(1) - shape("multitri") - pu() - setpos(0, -200) - dancers = [] - for i in range(180): - fd(7) - tilt(-4) - lt(2) - update() - if i % 12 == 0: - dancers.append(clone()) - home() - # dance - running = True - onkeypress(stop) - listen() - cs = 1 - while running: - ta = -4 - for dancer in dancers: - dancer.fd(7) - dancer.lt(2) - dancer.tilt(ta) - ta = -4 if ta > 0 else 2 - if cs < 180: - right(4) - shapesize(cs) - cs *= 1.005 - update() - return "DONE!" - -if __name__=='__main__': - print(main()) - mainloop() - - - - +""" turtle-example-suite: + + tdemo_round_dance.py + +(Needs version 1.1 of the turtle module that +comes with Python 3.1) + +Dancing turtles have a compound shape +consisting of a series of triangles of +decreasing size. + +Turtles march along a circle while rotating +pairwise in opposite direction, with one +exception. Does that breaking of symmetry +enhance the attractiveness of the example? + +Press any key to stop the animation. + +Technically: demonstrates use of compound +shapes, transformation of shapes as well as +cloning turtles. The animation is +controlled through update(). +""" + +from turtle import * + +def stop(): + global running + running = False + +def main(): + global running + clearscreen() + bgcolor("gray10") + tracer(False) + shape("triangle") + f = 0.793402 + phi = 9.064678 + s = 5 + c = 1 + # create compound shape + sh = Shape("compound") + for i in range(10): + shapesize(s) + p =get_shapepoly() + s *= f + c *= f + tilt(-phi) + sh.addcomponent(p, (c, 0.25, 1-c), "black") + register_shape("multitri", sh) + # create dancers + shapesize(1) + shape("multitri") + pu() + setpos(0, -200) + dancers = [] + for i in range(180): + fd(7) + tilt(-4) + lt(2) + update() + if i % 12 == 0: + dancers.append(clone()) + home() + # dance + running = True + onkeypress(stop) + listen() + cs = 1 + while running: + ta = -4 + for dancer in dancers: + dancer.fd(7) + dancer.lt(2) + dancer.tilt(ta) + ta = -4 if ta > 0 else 2 + if cs < 180: + right(4) + shapesize(cs) + cs *= 1.005 + update() + return "DONE!" + +if __name__=='__main__': + print(main()) + mainloop() Modified: python/branches/py3k-jit/Lib/test/support.py ============================================================================== --- python/branches/py3k-jit/Lib/test/support.py (original) +++ python/branches/py3k-jit/Lib/test/support.py Fri Mar 19 22:41:36 2010 @@ -33,6 +33,7 @@ "reap_children", "cpython_only", "check_impl_detail", "get_attribute", "swap_item", "swap_attr"] + class Error(Exception): """Base class for regression test exceptions.""" @@ -444,12 +445,29 @@ def open_urlresource(url, *args, **kw): import urllib.request, urllib.parse - requires('urlfetch') + check = kw.pop('check', None) + filename = urllib.parse.urlparse(url)[2].split('/')[-1] # '/': it's URL! fn = os.path.join(os.path.dirname(__file__), "data", filename) + + def check_valid_file(fn): + f = open(fn, *args, **kw) + if check is None: + return f + elif check(f): + f.seek(0) + return f + f.close() + if os.path.exists(fn): - return open(fn, *args, **kw) + f = check_valid_file(fn) + if f is not None: + return f + unlink(fn) + + # Verify the requirement before downloading the file + requires('urlfetch') print('\tfetching %s ...' % url, file=get_original_stdout()) f = urllib.request.urlopen(url, timeout=15) @@ -461,7 +479,12 @@ s = f.read() finally: f.close() - return open(fn, *args, **kw) + + f = check_valid_file(fn) + if f is not None: + return f + raise TestFailed('invalid resource "%s"' % fn) + class WarningsRecorder(object): """Convenience wrapper for the warnings list returned on Modified: python/branches/py3k-jit/Lib/test/test_bigmem.py ============================================================================== --- python/branches/py3k-jit/Lib/test/test_bigmem.py (original) +++ python/branches/py3k-jit/Lib/test/test_bigmem.py Fri Mar 19 22:41:36 2010 @@ -618,7 +618,7 @@ @precisionbigmemtest(size=_4G // 5, memuse=character_size * (6 + 1)) def test_unicode_repr_overflow(self, size): try: - s = "\uAAAA"*size + s = "\uDCBA"*size r = repr(s) except MemoryError: pass # acceptable on 32-bit @@ -679,22 +679,24 @@ @bigmemtest(minsize=2**32 / 5, memuse=character_size * 7) def test_unicode_repr(self, size): - s = "\uAAAA" * size + # Use an assigned, but not printable code point. + # It is in the range of the low surrogates \uDC00-\uDFFF. + s = "\uDCBA" * size for f in (repr, ascii): r = f(s) self.assertTrue(len(r) > size) - self.assertTrue(r.endswith(r"\uaaaa'"), r[-10:]) + self.assertTrue(r.endswith(r"\udcba'"), r[-10:]) del r # The character takes 4 bytes even in UCS-2 builds because it will # be decomposed into surrogates. @bigmemtest(minsize=2**32 / 5, memuse=4 + character_size * 9) def test_unicode_repr_wide(self, size): - s = "\U0001AAAA" * size + s = "\U0001DCBA" * size for f in (repr, ascii): r = f(s) self.assertTrue(len(r) > size) - self.assertTrue(r.endswith(r"\U0001aaaa'"), r[-12:]) + self.assertTrue(r.endswith(r"\U0001dcba'"), r[-12:]) del r Modified: python/branches/py3k-jit/Lib/test/test_bytes.py ============================================================================== --- python/branches/py3k-jit/Lib/test/test_bytes.py (original) +++ python/branches/py3k-jit/Lib/test/test_bytes.py Fri Mar 19 22:41:36 2010 @@ -876,9 +876,9 @@ self.assertEqual(bytes(b"abc") <= b"ab", False) def test_doc(self): - self.assertTrue(bytearray.__doc__ != None) + self.assertIsNotNone(bytearray.__doc__) self.assertTrue(bytearray.__doc__.startswith("bytearray("), bytearray.__doc__) - self.assertTrue(bytes.__doc__ != None) + self.assertIsNotNone(bytes.__doc__) self.assertTrue(bytes.__doc__.startswith("bytes("), bytes.__doc__) def test_from_bytearray(self): Modified: python/branches/py3k-jit/Lib/test/test_grammar.py ============================================================================== --- python/branches/py3k-jit/Lib/test/test_grammar.py (original) +++ python/branches/py3k-jit/Lib/test/test_grammar.py Fri Mar 19 22:41:36 2010 @@ -1,42 +1,36 @@ # Python test set -- part 1, grammar. # This just tests whether the parser accepts them all. -# NOTE: When you run this test as a script from the command line, you -# get warnings about certain hex/oct constants. Since those are -# issued by the parser, you can't suppress them by adding a -# filterwarnings() call to this module. Therefore, to shut up the -# regression test, the filterwarnings() call has been added to -# regrtest.py. - from test.support import run_unittest, check_syntax_error import unittest import sys # testing import * from sys import * + class TokenTests(unittest.TestCase): def testBackslash(self): # Backslash means line continuation: x = 1 \ + 1 - self.assertEquals(x, 2, 'backslash for line continuation') + self.assertEqual(x, 2, 'backslash for line continuation') # Backslash does not means continuation in comments :\ x = 0 - self.assertEquals(x, 0, 'backslash ending comment') + self.assertEqual(x, 0, 'backslash ending comment') def testPlainIntegers(self): - self.assertEquals(type(000), type(0)) - self.assertEquals(0xff, 255) - self.assertEquals(0o377, 255) - self.assertEquals(2147483647, 0o17777777777) - self.assertEquals(0b1001, 9) + self.assertEqual(type(000), type(0)) + self.assertEqual(0xff, 255) + self.assertEqual(0o377, 255) + self.assertEqual(2147483647, 0o17777777777) + self.assertEqual(0b1001, 9) # "0x" is not a valid literal self.assertRaises(SyntaxError, eval, "0x") from sys import maxsize if maxsize == 2147483647: - self.assertEquals(-2147483647-1, -0o20000000000) + self.assertEqual(-2147483647-1, -0o20000000000) # XXX -2147483648 self.assertTrue(0o37777777777 > 0) self.assertTrue(0xffffffff > 0) @@ -48,7 +42,7 @@ except OverflowError: self.fail("OverflowError on huge integer literal %r" % s) elif maxsize == 9223372036854775807: - self.assertEquals(-9223372036854775807-1, -0o1000000000000000000000) + self.assertEqual(-9223372036854775807-1, -0o1000000000000000000000) self.assertTrue(0o1777777777777777777777 > 0) self.assertTrue(0xffffffffffffffff > 0) self.assertTrue(0b11111111111111111111111111111111111111111111111111111111111111 > 0) @@ -103,28 +97,28 @@ the 'lazy' dog. """ y = '\nThe "quick"\nbrown fox\njumps over\nthe \'lazy\' dog.\n' - self.assertEquals(x, y) + self.assertEqual(x, y) y = ''' The "quick" brown fox jumps over the 'lazy' dog. ''' - self.assertEquals(x, y) + self.assertEqual(x, y) y = "\n\ The \"quick\"\n\ brown fox\n\ jumps over\n\ the 'lazy' dog.\n\ " - self.assertEquals(x, y) + self.assertEqual(x, y) y = '\n\ The \"quick\"\n\ brown fox\n\ jumps over\n\ the \'lazy\' dog.\n\ ' - self.assertEquals(x, y) + self.assertEqual(x, y) def testEllipsis(self): x = ... @@ -165,8 +159,8 @@ f1(*(), **{}) def f2(one_argument): pass def f3(two, arguments): pass - self.assertEquals(f2.__code__.co_varnames, ('one_argument',)) - self.assertEquals(f3.__code__.co_varnames, ('two', 'arguments')) + self.assertEqual(f2.__code__.co_varnames, ('one_argument',)) + self.assertEqual(f3.__code__.co_varnames, ('two', 'arguments')) def a1(one_arg,): pass def a2(two, args,): pass def v0(*rest): pass @@ -287,37 +281,37 @@ # keyword arguments after *arglist def f(*args, **kwargs): return args, kwargs - self.assertEquals(f(1, x=2, *[3, 4], y=5), ((1, 3, 4), + self.assertEqual(f(1, x=2, *[3, 4], y=5), ((1, 3, 4), {'x':2, 'y':5})) self.assertRaises(SyntaxError, eval, "f(1, *(2,3), 4)") self.assertRaises(SyntaxError, eval, "f(1, x=2, *(3,4), x=5)") # argument annotation tests def f(x) -> list: pass - self.assertEquals(f.__annotations__, {'return': list}) + self.assertEqual(f.__annotations__, {'return': list}) def f(x:int): pass - self.assertEquals(f.__annotations__, {'x': int}) + self.assertEqual(f.__annotations__, {'x': int}) def f(*x:str): pass - self.assertEquals(f.__annotations__, {'x': str}) + self.assertEqual(f.__annotations__, {'x': str}) def f(**x:float): pass - self.assertEquals(f.__annotations__, {'x': float}) + self.assertEqual(f.__annotations__, {'x': float}) def f(x, y:1+2): pass - self.assertEquals(f.__annotations__, {'y': 3}) + self.assertEqual(f.__annotations__, {'y': 3}) def f(a, b:1, c:2, d): pass - self.assertEquals(f.__annotations__, {'b': 1, 'c': 2}) + self.assertEqual(f.__annotations__, {'b': 1, 'c': 2}) def f(a, b:1, c:2, d, e:3=4, f=5, *g:6): pass - self.assertEquals(f.__annotations__, + self.assertEqual(f.__annotations__, {'b': 1, 'c': 2, 'e': 3, 'g': 6}) def f(a, b:1, c:2, d, e:3=4, f=5, *g:6, h:7, i=8, j:9=10, **k:11) -> 12: pass - self.assertEquals(f.__annotations__, + self.assertEqual(f.__annotations__, {'b': 1, 'c': 2, 'e': 3, 'g': 6, 'h': 7, 'j': 9, 'k': 11, 'return': 12}) # Check for SF Bug #1697248 - mixing decorators and a return annotation def null(x): return x @null def f(x) -> list: pass - self.assertEquals(f.__annotations__, {'return': list}) + self.assertEqual(f.__annotations__, {'return': list}) # test MAKE_CLOSURE with a variety of oparg's closure = 1 @@ -333,20 +327,20 @@ def testLambdef(self): ### lambdef: 'lambda' [varargslist] ':' test l1 = lambda : 0 - self.assertEquals(l1(), 0) + self.assertEqual(l1(), 0) l2 = lambda : a[d] # XXX just testing the expression l3 = lambda : [2 < x for x in [-1, 3, 0]] - self.assertEquals(l3(), [0, 1, 0]) + self.assertEqual(l3(), [0, 1, 0]) l4 = lambda x = lambda y = lambda z=1 : z : y() : x() - self.assertEquals(l4(), 1) + self.assertEqual(l4(), 1) l5 = lambda x, y, z=2: x + y + z - self.assertEquals(l5(1, 2), 5) - self.assertEquals(l5(1, 2, 3), 6) + self.assertEqual(l5(1, 2), 5) + self.assertEqual(l5(1, 2, 3), 6) check_syntax_error(self, "lambda x: x = 2") check_syntax_error(self, "lambda (None,): None") l6 = lambda x, y, *, k=20: x+y+k - self.assertEquals(l6(1,2), 1+2+20) - self.assertEquals(l6(1,2,k=10), 1+2+10) + self.assertEqual(l6(1,2), 1+2+20) + self.assertEqual(l6(1,2,k=10), 1+2+10) ### stmt: simple_stmt | compound_stmt @@ -502,7 +496,7 @@ try: assert 0, "msg" except AssertionError as e: - self.assertEquals(e.args[0], "msg") + self.assertEqual(e.args[0], "msg") else: if __debug__: self.fail("AssertionError not raised by assert 0") @@ -536,7 +530,7 @@ x = 1 else: x = 2 - self.assertEquals(x, 2) + self.assertEqual(x, 2) def testFor(self): # 'for' exprlist 'in' exprlist ':' suite ['else' ':' suite] @@ -688,7 +682,7 @@ d[1,2,3] = 4 L = list(d) L.sort(key=lambda x: x if isinstance(x, tuple) else ()) - self.assertEquals(str(L), '[1, (1,), (1, 2), (1, 2, 3)]') + self.assertEqual(str(L), '[1, (1,), (1, 2), (1, 2, 3)]') def testAtoms(self): ### atom: '(' [testlist] ')' | '[' [testlist] ']' | '{' [dictsetmaker] '}' | NAME | NUMBER | STRING Modified: python/branches/py3k-jit/Lib/test/test_httpservers.py ============================================================================== --- python/branches/py3k-jit/Lib/test/test_httpservers.py (original) +++ python/branches/py3k-jit/Lib/test/test_httpservers.py Fri Mar 19 22:41:36 2010 @@ -104,42 +104,42 @@ def test_command(self): self.con.request('GET', '/') res = self.con.getresponse() - self.assertEquals(res.status, 501) + self.assertEqual(res.status, 501) def test_request_line_trimming(self): self.con._http_vsn_str = 'HTTP/1.1\n' self.con.putrequest('GET', '/') self.con.endheaders() res = self.con.getresponse() - self.assertEquals(res.status, 501) + self.assertEqual(res.status, 501) def test_version_bogus(self): self.con._http_vsn_str = 'FUBAR' self.con.putrequest('GET', '/') self.con.endheaders() res = self.con.getresponse() - self.assertEquals(res.status, 400) + self.assertEqual(res.status, 400) def test_version_digits(self): self.con._http_vsn_str = 'HTTP/9.9.9' self.con.putrequest('GET', '/') self.con.endheaders() res = self.con.getresponse() - self.assertEquals(res.status, 400) + self.assertEqual(res.status, 400) def test_version_none_get(self): self.con._http_vsn_str = '' self.con.putrequest('GET', '/') self.con.endheaders() res = self.con.getresponse() - self.assertEquals(res.status, 501) + self.assertEqual(res.status, 501) def test_version_none(self): self.con._http_vsn_str = '' self.con.putrequest('PUT', '/') self.con.endheaders() res = self.con.getresponse() - self.assertEquals(res.status, 400) + self.assertEqual(res.status, 400) def test_version_invalid(self): self.con._http_vsn = 99 @@ -147,21 +147,21 @@ self.con.putrequest('GET', '/') self.con.endheaders() res = self.con.getresponse() - self.assertEquals(res.status, 505) + self.assertEqual(res.status, 505) def test_send_blank(self): self.con._http_vsn_str = '' self.con.putrequest('', '') self.con.endheaders() res = self.con.getresponse() - self.assertEquals(res.status, 400) + self.assertEqual(res.status, 400) def test_header_close(self): self.con.putrequest('GET', '/') self.con.putheader('Connection', 'close') self.con.endheaders() res = self.con.getresponse() - self.assertEquals(res.status, 501) + self.assertEqual(res.status, 501) def test_head_keep_alive(self): self.con._http_vsn_str = 'HTTP/1.1' @@ -169,28 +169,28 @@ self.con.putheader('Connection', 'keep-alive') self.con.endheaders() res = self.con.getresponse() - self.assertEquals(res.status, 501) + self.assertEqual(res.status, 501) def test_handler(self): self.con.request('TEST', '/') res = self.con.getresponse() - self.assertEquals(res.status, 204) + self.assertEqual(res.status, 204) def test_return_header_keep_alive(self): self.con.request('KEEP', '/') res = self.con.getresponse() - self.assertEquals(res.getheader('Connection'), 'keep-alive') + self.assertEqual(res.getheader('Connection'), 'keep-alive') self.con.request('TEST', '/') def test_internal_key_error(self): self.con.request('KEYERROR', '/') res = self.con.getresponse() - self.assertEquals(res.status, 999) + self.assertEqual(res.status, 999) def test_return_custom_status(self): self.con.request('CUSTOM', '/') res = self.con.getresponse() - self.assertEquals(res.status, 999) + self.assertEqual(res.status, 999) class SimpleHTTPServerTestCase(BaseTestCase): @@ -222,8 +222,8 @@ def check_status_and_reason(self, response, status, data=None): body = response.read() self.assertTrue(response) - self.assertEquals(response.status, status) - self.assertTrue(response.reason != None) + self.assertEqual(response.status, status) + self.assertIsNotNone(response.reason) if data: self.assertEqual(data, body) @@ -284,8 +284,8 @@ print() form = cgi.FieldStorage() -print("%%s, %%s, %%s" %% (form.getfirst("spam"), form.getfirst("eggs"),\ - form.getfirst("bacon"))) +print("%%s, %%s, %%s" %% (form.getfirst("spam"), form.getfirst("eggs"), + form.getfirst("bacon"))) """ class CGIHTTPServerTestCase(BaseTestCase): @@ -356,14 +356,14 @@ server._url_collapse_path_split, path) else: actual = server._url_collapse_path_split(path) - self.assertEquals(expected, actual, - msg='path = %r\nGot: %r\nWanted: %r' % ( - path, actual, expected)) + self.assertEqual(expected, actual, + msg='path = %r\nGot: %r\nWanted: %r' % + (path, actual, expected)) def test_headers_and_content(self): res = self.request('/cgi-bin/file1.py') - self.assertEquals((b'Hello World\n', 'text/html', 200), \ - (res.read(), res.getheader('Content-type'), res.status)) + self.assertEqual((b'Hello World\n', 'text/html', 200), + (res.read(), res.getheader('Content-type'), res.status)) def test_post(self): params = urllib.parse.urlencode( @@ -371,24 +371,24 @@ headers = {'Content-type' : 'application/x-www-form-urlencoded'} res = self.request('/cgi-bin/file2.py', 'POST', params, headers) - self.assertEquals(res.read(), b'1, python, 123456\n') + self.assertEqual(res.read(), b'1, python, 123456\n') def test_invaliduri(self): res = self.request('/cgi-bin/invalid') res.read() - self.assertEquals(res.status, 404) + self.assertEqual(res.status, 404) def test_authorization(self): headers = {b'Authorization' : b'Basic ' + base64.b64encode(b'username:pass')} res = self.request('/cgi-bin/file1.py', 'GET', headers=headers) - self.assertEquals((b'Hello World\n', 'text/html', 200), \ - (res.read(), res.getheader('Content-type'), res.status)) + self.assertEqual((b'Hello World\n', 'text/html', 200), + (res.read(), res.getheader('Content-type'), res.status)) def test_no_leading_slash(self): # http://bugs.python.org/issue2254 res = self.request('cgi-bin/file1.py') - self.assertEquals((b'Hello World\n', 'text/html', 200), + self.assertEqual((b'Hello World\n', 'text/html', 200), (res.read(), res.getheader('Content-type'), res.status)) Modified: python/branches/py3k-jit/Lib/test/test_index.py ============================================================================== --- python/branches/py3k-jit/Lib/test/test_index.py (original) +++ python/branches/py3k-jit/Lib/test/test_index.py Fri Mar 19 22:41:36 2010 @@ -154,7 +154,7 @@ lst = [5, 6, 7, 8, 9, 11] l2 = lst.__imul__(self.n) - self.assertTrue(l2 is lst) + self.assertIs(l2, lst) self.assertEqual(lst, [5, 6, 7, 8, 9, 11] * 3) Modified: python/branches/py3k-jit/Lib/test/test_minidom.py ============================================================================== --- python/branches/py3k-jit/Lib/test/test_minidom.py (original) +++ python/branches/py3k-jit/Lib/test/test_minidom.py Fri Mar 19 22:41:36 2010 @@ -949,7 +949,7 @@ node = doc.documentElement node.childNodes[1].nodeValue = "" node.normalize() - self.confirm(node.childNodes[-1].nextSibling == None, + self.confirm(node.childNodes[-1].nextSibling is None, "Final child's .nextSibling should be None") def testSiblings(self): Modified: python/branches/py3k-jit/Lib/test/test_normalization.py ============================================================================== --- python/branches/py3k-jit/Lib/test/test_normalization.py (original) +++ python/branches/py3k-jit/Lib/test/test_normalization.py Fri Mar 19 22:41:36 2010 @@ -9,14 +9,9 @@ TESTDATAFILE = "NormalizationTest.txt" TESTDATAURL = "http://www.unicode.org/Public/" + unidata_version + "/ucd/" + TESTDATAFILE -# Verify we have the correct version of the test data file. -TESTDATAPATH = os.path.join(os.path.dirname(__file__), "data", TESTDATAFILE) -if os.path.exists(TESTDATAPATH): - f = open(TESTDATAPATH, encoding='utf-8') - l = f.readline() - f.close() - if not unidata_version in l: - os.unlink(testdatafile) +def check_version(testfile): + hdr = testfile.readline() + return unidata_version in hdr class RangeError(Exception): pass @@ -42,13 +37,15 @@ class NormalizationTest(unittest.TestCase): def test_main(self): + part = None part1_data = {} # Hit the exception early try: - open_urlresource(TESTDATAURL, encoding="utf-8") + testdata = open_urlresource(TESTDATAURL, encoding="utf-8", + check=check_version) except (IOError, HTTPException): self.skipTest("Could not retrieve " + TESTDATAURL) - for line in open_urlresource(TESTDATAURL, encoding="utf-8"): + for line in testdata: if '#' in line: line = line.split('#')[0] line = line.strip() Modified: python/branches/py3k-jit/Lib/test/test_profilehooks.py ============================================================================== --- python/branches/py3k-jit/Lib/test/test_profilehooks.py (original) +++ python/branches/py3k-jit/Lib/test/test_profilehooks.py Fri Mar 19 22:41:36 2010 @@ -12,7 +12,7 @@ sys.setprofile(None) def test_empty(self): - assert sys.getprofile() == None + assert sys.getprofile() is None def test_setget(self): def fn(*args): Modified: python/branches/py3k-jit/Lib/test/test_scope.py ============================================================================== --- python/branches/py3k-jit/Lib/test/test_scope.py (original) +++ python/branches/py3k-jit/Lib/test/test_scope.py Fri Mar 19 22:41:36 2010 @@ -1,9 +1,6 @@ import unittest from test.support import check_syntax_error, run_unittest -import warnings -warnings.filterwarnings("ignore", r"import \*", SyntaxWarning, "") -warnings.filterwarnings("ignore", r"import \*", SyntaxWarning, "") class ScopeTests(unittest.TestCase): Modified: python/branches/py3k-jit/Lib/test/test_subprocess.py ============================================================================== --- python/branches/py3k-jit/Lib/test/test_subprocess.py (original) +++ python/branches/py3k-jit/Lib/test/test_subprocess.py Fri Mar 19 22:41:36 2010 @@ -9,6 +9,10 @@ import time import re import sysconfig +try: + import gc +except ImportError: + gc = None mswindows = (sys.platform == "win32") @@ -650,6 +654,44 @@ self.fail("Exception raised by preexec_fn did not make it " "to the parent process.") + @unittest.skipUnless(gc, "Requires a gc module.") + def test_preexec_gc_module_failure(self): + # This tests the code that disables garbage collection if the child + # process will execute any Python. + def raise_runtime_error(): + raise RuntimeError("this shouldn't escape") + enabled = gc.isenabled() + orig_gc_disable = gc.disable + orig_gc_isenabled = gc.isenabled + try: + gc.disable() + self.assertFalse(gc.isenabled()) + subprocess.call([sys.executable, '-c', ''], + preexec_fn=lambda: None) + self.assertFalse(gc.isenabled(), + "Popen enabled gc when it shouldn't.") + + gc.enable() + self.assertTrue(gc.isenabled()) + subprocess.call([sys.executable, '-c', ''], + preexec_fn=lambda: None) + self.assertTrue(gc.isenabled(), "Popen left gc disabled.") + + gc.disable = raise_runtime_error + self.assertRaises(RuntimeError, subprocess.Popen, + [sys.executable, '-c', ''], + preexec_fn=lambda: None) + + del gc.isenabled # force an AttributeError + self.assertRaises(AttributeError, subprocess.Popen, + [sys.executable, '-c', ''], + preexec_fn=lambda: None) + finally: + gc.disable = orig_gc_disable + gc.isenabled = orig_gc_isenabled + if not enabled: + gc.disable() + def test_args_string(self): # args is a string fd, fname = mkstemp() Modified: python/branches/py3k-jit/Lib/test/test_unicodedata.py ============================================================================== --- python/branches/py3k-jit/Lib/test/test_unicodedata.py (original) +++ python/branches/py3k-jit/Lib/test/test_unicodedata.py Fri Mar 19 22:41:36 2010 @@ -80,7 +80,7 @@ class UnicodeFunctionsTest(UnicodeDatabaseTest): # update this, if the database changes - expectedchecksum = 'dd36312c31318f938b9d9ecff757393508c5bd48' + expectedchecksum = '6ccf1b1a36460d2694f9b0b0f0324942fe70ede6' def test_function_checksum(self): data = [] Modified: python/branches/py3k-jit/Lib/test/test_urllib2_localnet.py ============================================================================== --- python/branches/py3k-jit/Lib/test/test_urllib2_localnet.py (original) +++ python/branches/py3k-jit/Lib/test/test_urllib2_localnet.py Fri Mar 19 22:41:36 2010 @@ -223,10 +223,10 @@ class BaseTestCase(unittest.TestCase): def setUp(self): - self._threads = test_support.threading_setup() + self._threads = support.threading_setup() def tearDown(self): - test_support.threading_cleanup(*self._threads) + support.threading_cleanup(*self._threads) class ProxyAuthTests(BaseTestCase): @@ -237,6 +237,7 @@ REALM = "TestRealm" def setUp(self): + super(ProxyAuthTests, self).setUp() self.digest_auth_handler = DigestAuthHandler() self.digest_auth_handler.set_users({self.USER: self.PASSWD}) self.digest_auth_handler.set_realm(self.REALM) @@ -254,6 +255,7 @@ def tearDown(self): self.server.stop() + super(ProxyAuthTests, self).tearDown() def test_proxy_with_bad_password_raises_httperror(self): self.proxy_digest_handler.add_password(self.REALM, self.URL, @@ -347,11 +349,13 @@ """ def setUp(self): + super(TestUrlopen, self).setUp() self.server = None def tearDown(self): if self.server is not None: self.server.stop() + super(TestUrlopen, self).tearDown() def urlopen(self, url, data=None): l = [] Modified: python/branches/py3k-jit/Makefile.pre.in ============================================================================== --- python/branches/py3k-jit/Makefile.pre.in (original) +++ python/branches/py3k-jit/Makefile.pre.in Fri Mar 19 22:41:36 2010 @@ -941,6 +941,11 @@ export EXE; EXE="$(BUILDEXE)"; \ cd $(srcdir)/Lib/$(PLATDIR); $(RUNSHARED) ./regen +python-config: $(srcdir)/Misc/python-config.in + # Substitution happens here, as the completely-expanded BINDIR + # is not available in configure + sed -e "s, at EXENAME@,$(BINDIR)/python$(VERSION)$(EXE)," < $(srcdir)/Misc/python-config.in >python-config + # Install the include files INCLDIRSTOMAKE=$(INCLUDEDIR) $(CONFINCLUDEDIR) $(INCLUDEPY) $(CONFINCLUDEPY) inclinstall: @@ -966,7 +971,7 @@ # pkgconfig directory LIBPC= $(LIBDIR)/pkgconfig -libainstall: all +libainstall: all python-config @for i in $(LIBDIR) $(LIBP) $(LIBPL) $(LIBPC); \ do \ if test ! -d $(DESTDIR)$$i; then \ @@ -997,9 +1002,6 @@ $(INSTALL_DATA) Misc/python.pc $(DESTDIR)$(LIBPC)/python-$(VERSION).pc $(INSTALL_SCRIPT) $(srcdir)/Modules/makesetup $(DESTDIR)$(LIBPL)/makesetup $(INSTALL_SCRIPT) $(srcdir)/install-sh $(DESTDIR)$(LIBPL)/install-sh - # Substitution happens here, as the completely-expanded BINDIR - # is not available in configure - sed -e "s, at EXENAME@,$(BINDIR)/python$(VERSION)$(EXE)," < $(srcdir)/Misc/python-config.in >python-config $(INSTALL_SCRIPT) python-config $(DESTDIR)$(BINDIR)/python$(VERSION)-config rm python-config @if [ -s Modules/python.exp -a \ Modified: python/branches/py3k-jit/Misc/NEWS ============================================================================== --- python/branches/py3k-jit/Misc/NEWS (original) +++ python/branches/py3k-jit/Misc/NEWS Fri Mar 19 22:41:36 2010 @@ -285,13 +285,13 @@ Library ------- +- Issue #8024: Update the Unicode database to 5.2. + - Issue #8168: py_compile now handles files with utf-8 BOMS. - ``tokenize.detect_encoding`` now returns ``'utf-8-sig'`` when a UTF-8 BOM is detected. -- Issue #8024: Update the Unicode database to 5.2. - - Issue #6716/2: Backslash-replace error output in compilall. - Issue #4961: Inconsistent/wrong result of askyesno function in tkMessageBox @@ -886,8 +886,10 @@ - Issue 5390: Add uninstall icon independent of whether file extensions are installed. -- Issue #7541: when using ``python-config`` with a framework install the compiler might - use the wrong library. +- Issue #7541: when using ``python-config`` with a framework install the + compiler might use the wrong library. + +- python-config now supports multiple options on the same command line. Documentation ------------ @@ -903,13 +905,16 @@ - Issue #6556: Fixed the Distutils configuration files location explanation for Windows. - + - Update python manual page (options -B, -O0, -s, environment variables PYTHONDONTWRITEBYTECODE, PYTHONNOUSERSITE). Tests ----- +- Issue #7783: test.support.open_urlresource invalidates the outdated files + from the local cache. + - Issue #7849: Now the utility ``check_warnings`` verifies if the warnings are effectively raised. @@ -934,8 +939,8 @@ test_capi (only seen so far on platforms where the curses module wasn't built), due to an uncleared exception. -- issue #7728: test_timeout was changed to use test_support.bind_port - instead of a hard coded port. +- Issue #7728: test_timeout was changed to use support.bind_port instead of a + hard coded port. - Issue #7376: instead of running a self-test (which was failing) when called with no arguments, doctest.py now gives a usage message. Modified: python/branches/py3k-jit/Misc/python-config.in ============================================================================== --- python/branches/py3k-jit/Misc/python-config.in (original) +++ python/branches/py3k-jit/Misc/python-config.in Fri Mar 19 22:41:36 2010 @@ -21,33 +21,36 @@ if not opts: exit_with_usage() -opt = opts[0][0] - pyver = sysconfig.get_config_var('VERSION') getvar = sysconfig.get_config_var -if opt == '--help': - exit_with_usage(0) - -elif opt == '--prefix': - print(sysconfig.PREFIX) +opt_flags = [flag for (flag, val) in opts] -elif opt == '--exec-prefix': - print(sysconfig.EXEC_PREFIX) +if '--help' in opt_flags: + exit_with_usage(code=0) -elif opt in ('--includes', '--cflags'): - flags = ['-I' + sysconfig.get_python_inc(), - '-I' + sysconfig.get_python_inc(plat_specific=True)] - if opt == '--cflags': - flags.extend(getvar('CFLAGS').split()) - print(' '.join(flags)) - -elif opt in ('--libs', '--ldflags'): - libs = getvar('LIBS').split() + getvar('SYSLIBS').split() - libs.append('-lpython'+pyver) - # add the prefix/lib/pythonX.Y/config dir, but only if there is no - # shared library in prefix/lib/. - if opt == '--ldflags' and not getvar('Py_ENABLE_SHARED'): - libs.insert(0, '-L' + getvar('LIBPL')) - print(' '.join(libs)) +for opt in opt_flags: + if opt == '--prefix': + print(sysconfig.PREFIX) + + elif opt == '--exec-prefix': + print(sysconfig.EXEC_PREFIX) + + elif opt in ('--includes', '--cflags'): + flags = ['-I' + sysconfig.get_python_inc(), + '-I' + sysconfig.get_python_inc(plat_specific=True)] + if opt == '--cflags': + flags.extend(getvar('CFLAGS').split()) + print(' '.join(flags)) + + elif opt in ('--libs', '--ldflags'): + libs = getvar('LIBS').split() + getvar('SYSLIBS').split() + libs.append('-lpython'+pyver) + # add the prefix/lib/pythonX.Y/config dir, but only if there is no + # shared library in prefix/lib/. + if opt == '--ldflags': + if not getvar('Py_ENABLE_SHARED'): + libs.insert(0, '-L' + getvar('LIBPL')) + libs.extend(getvar('LINKFORSHARED').split()) + print(' '.join(libs)) Modified: python/branches/py3k-jit/Modules/_ctypes/libffi.diff ============================================================================== --- python/branches/py3k-jit/Modules/_ctypes/libffi.diff (original) +++ python/branches/py3k-jit/Modules/_ctypes/libffi.diff Fri Mar 19 22:41:36 2010 @@ -1,28 +1,17 @@ -This file contains the diffs between the files in the libffi -subdirectory and the 'official' source files from -ftp://sourceware.org/pub/libffi/libffi-3.0.9.tar.gz - ---- libffi/configure.ac.orig 2009-12-31 13:41:51.000000000 +0100 -+++ libffi/configure.ac 2010-02-24 00:39:10.341610848 +0100 -@@ -1,4 +1,7 @@ - dnl Process this with autoconf to create configure -+# -+# file from libffi - slightly patched for ctypes -+# - - AC_PREREQ(2.63) - -@@ -91,6 +94,9 @@ - i?86-*-solaris2.1[[0-9]]*) +diff -urN libffi.orig/configure libffi/configure +--- libffi.orig/configure 2010-03-19 18:29:54.588499862 +0100 ++++ libffi/configure 2010-03-19 18:32:09.113499479 +0100 +@@ -11228,6 +11228,9 @@ + i?86-*-solaris2.1[0-9]*) TARGET=X86_64; TARGETDIR=x86 ;; -+ i*86-*-nto-qnx*) ++ i*86-*-nto-qnx*) + TARGET=X86; TARGETDIR=x86 + ;; i?86-*-*) TARGET=X86; TARGETDIR=x86 ;; -@@ -108,12 +114,12 @@ +@@ -11245,12 +11248,12 @@ ;; mips-sgi-irix5.* | mips-sgi-irix6.*) @@ -37,40 +26,59 @@ ;; powerpc*-*-linux* | powerpc-*-sysv*) -@@ -170,7 +176,7 @@ - AC_MSG_ERROR(["libffi has not been ported to $host."]) +@@ -11307,7 +11310,7 @@ + as_fn_error "\"libffi has not been ported to $host.\"" "$LINENO" 5 fi --AM_CONDITIONAL(MIPS, test x$TARGET = xMIPS) -+AM_CONDITIONAL(MIPS,[expr x$TARGET : 'xMIPS' > /dev/null]) - AM_CONDITIONAL(SPARC, test x$TARGET = xSPARC) - AM_CONDITIONAL(X86, test x$TARGET = xX86) - AM_CONDITIONAL(X86_FREEBSD, test x$TARGET = xX86_FREEBSD) -@@ -399,6 +405,10 @@ +- if test x$TARGET = xMIPS; then ++ if expr x$TARGET : 'xMIPS' > /dev/null; then + MIPS_TRUE= + MIPS_FALSE='#' + else +@@ -12422,6 +12425,12 @@ + ac_config_files="$ac_config_files include/Makefile include/ffi.h Makefile testsuite/Makefile man/Makefile libffi.pc" - AC_CONFIG_LINKS(include/ffitarget.h:src/$TARGETDIR/ffitarget.h) --AC_CONFIG_FILES(include/Makefile include/ffi.h Makefile testsuite/Makefile man/Makefile libffi.pc) -+AC_CONFIG_FILES(include/ffi.h) ++ac_config_links="$ac_config_links include/ffi_common.h:include/ffi_common.h" + -+AC_CONFIG_LINKS(include/ffi_common.h:include/ffi_common.h) + -+AC_CONFIG_FILES(fficonfig.py) ++ac_config_files="$ac_config_files fficonfig.py" ++ ++ + cat >confcache <<\_ACEOF + # This file is a shell script that caches the results of configure + # tests run on this system so they can be shared between configure +@@ -13521,6 +13530,8 @@ + "testsuite/Makefile") CONFIG_FILES="$CONFIG_FILES testsuite/Makefile" ;; + "man/Makefile") CONFIG_FILES="$CONFIG_FILES man/Makefile" ;; + "libffi.pc") CONFIG_FILES="$CONFIG_FILES libffi.pc" ;; ++ "include/ffi_common.h") CONFIG_LINKS="$CONFIG_LINKS include/ffi_common.h:include/ffi_common.h" ;; ++ "fficonfig.py") CONFIG_FILES="$CONFIG_FILES fficonfig.py" ;; - AC_OUTPUT ---- libffi/configure.orig 2009-12-31 13:41:51.000000000 +0100 -+++ libffi/configure 2010-02-24 00:41:59.829608794 +0100 -@@ -12191,6 +12191,9 @@ - i?86-*-solaris2.1[0-9]*) + *) as_fn_error "invalid argument: \`$ac_config_target'" "$LINENO" 5;; + esac +diff -urN libffi.orig/configure.ac libffi/configure.ac +--- libffi.orig/configure.ac 2010-03-19 18:27:44.988498585 +0100 ++++ libffi/configure.ac 2010-03-19 18:31:29.252505178 +0100 +@@ -1,4 +1,7 @@ + dnl Process this with autoconf to create configure ++# ++# file from libffi - slightly patched for ctypes ++# + + AC_PREREQ(2.63) + +@@ -91,6 +94,9 @@ + i?86-*-solaris2.1[[0-9]]*) TARGET=X86_64; TARGETDIR=x86 ;; -+ i*86-*-nto-qnx*) ++ i*86-*-nto-qnx*) + TARGET=X86; TARGETDIR=x86 + ;; i?86-*-*) TARGET=X86; TARGETDIR=x86 ;; -@@ -12208,12 +12211,12 @@ +@@ -108,12 +114,12 @@ ;; mips-sgi-irix5.* | mips-sgi-irix6.*) @@ -85,68 +93,21 @@ ;; powerpc*-*-linux* | powerpc-*-sysv*) -@@ -12272,7 +12275,7 @@ - { (exit 1); exit 1; }; } +@@ -170,7 +176,7 @@ + AC_MSG_ERROR(["libffi has not been ported to $host."]) fi -- if test x$TARGET = xMIPS; then -+ if expr x$TARGET : 'xMIPS' > /dev/null; then - MIPS_TRUE= - MIPS_FALSE='#' - else -@@ -14667,7 +14670,13 @@ - ac_config_links="$ac_config_links include/ffitarget.h:src/$TARGETDIR/ffitarget.h" +-AM_CONDITIONAL(MIPS, test x$TARGET = xMIPS) ++AM_CONDITIONAL(MIPS,[expr x$TARGET : 'xMIPS' > /dev/null]) + AM_CONDITIONAL(SPARC, test x$TARGET = xSPARC) + AM_CONDITIONAL(X86, test x$TARGET = xX86) + AM_CONDITIONAL(X86_FREEBSD, test x$TARGET = xX86_FREEBSD) +@@ -401,4 +407,8 @@ + AC_CONFIG_FILES(include/Makefile include/ffi.h Makefile testsuite/Makefile man/Makefile libffi.pc) --ac_config_files="$ac_config_files include/Makefile include/ffi.h Makefile testsuite/Makefile man/Makefile libffi.pc" -+ac_config_files="$ac_config_files include/ffi.h" -+ -+ -+ac_config_links="$ac_config_links include/ffi_common.h:include/ffi_common.h" ++AC_CONFIG_LINKS(include/ffi_common.h:include/ffi_common.h) + ++AC_CONFIG_FILES(fficonfig.py) + -+ac_config_files="$ac_config_files fficonfig.py" - - - cat >confcache <<\_ACEOF -@@ -15767,12 +15776,9 @@ - "include") CONFIG_COMMANDS="$CONFIG_COMMANDS include" ;; - "src") CONFIG_COMMANDS="$CONFIG_COMMANDS src" ;; - "include/ffitarget.h") CONFIG_LINKS="$CONFIG_LINKS include/ffitarget.h:src/$TARGETDIR/ffitarget.h" ;; -- "include/Makefile") CONFIG_FILES="$CONFIG_FILES include/Makefile" ;; - "include/ffi.h") CONFIG_FILES="$CONFIG_FILES include/ffi.h" ;; -- "Makefile") CONFIG_FILES="$CONFIG_FILES Makefile" ;; -- "testsuite/Makefile") CONFIG_FILES="$CONFIG_FILES testsuite/Makefile" ;; -- "man/Makefile") CONFIG_FILES="$CONFIG_FILES man/Makefile" ;; -- "libffi.pc") CONFIG_FILES="$CONFIG_FILES libffi.pc" ;; -+ "include/ffi_common.h") CONFIG_LINKS="$CONFIG_LINKS include/ffi_common.h:include/ffi_common.h" ;; -+ "fficonfig.py") CONFIG_FILES="$CONFIG_FILES fficonfig.py" ;; - - *) { { $as_echo "$as_me:$LINENO: error: invalid argument: $ac_config_target" >&5 - $as_echo "$as_me: error: invalid argument: $ac_config_target" >&2;} ---- libffi/src/x86/ffi64.c.orig 2009-12-29 16:22:26.000000000 +0100 -+++ libffi/src/x86/ffi64.c 2010-02-24 00:36:46.678610932 +0100 -@@ -52,7 +52,7 @@ - /* Register class used for passing given 64bit part of the argument. - These represent classes as documented by the PS ABI, with the exception - of SSESF, SSEDF classes, that are basically SSE class, just gcc will -- use SF or DFmode move instead of DImode to avoid reformating penalties. -+ use SF or DFmode move instead of DImode to avoid reformatting penalties. - - Similary we play games with INTEGERSI_CLASS to use cheaper SImode moves - whenever possible (upper half does contain padding). */ ---- libffi/src/x86/ffi.c.orig 2009-12-29 16:22:26.000000000 +0100 -+++ libffi/src/x86/ffi.c 2010-02-24 00:36:46.678610932 +0100 -@@ -594,10 +594,10 @@ - return FFI_BAD_ABI; - } - -- // we currently don't support certain kinds of arguments for raw -+ /* we currently don't support certain kinds of arguments for raw - // closures. This should be implemented by a separate assembly language - // routine, since it would require argument processing, something we -- // don't do now for performance. -+ // don't do now for performance. */ - - for (i = cif->nargs-1; i >= 0; i--) - { + AC_OUTPUT Modified: python/branches/py3k-jit/Modules/_ctypes/libffi/ChangeLog ============================================================================== --- python/branches/py3k-jit/Modules/_ctypes/libffi/ChangeLog (original) +++ python/branches/py3k-jit/Modules/_ctypes/libffi/ChangeLog Fri Mar 19 22:41:36 2010 @@ -1,3 +1,89 @@ +2010-03-14 Matthias Klose + + * src/x86/ffi64.c: Fix typo in comment. + * src/x86/ffi.c: Use /* ... */ comment style. + +2010-01-07 Rainer Orth + + PR libffi/40701 + * testsuite/libffi.call/ffitest.h [__alpha__ && __osf__] (PRIdLL, + PRIuLL, PRId64, PRIu64, PRIuPTR): Define. + * testsuite/libffi.call/cls_align_sint64.c: Add -Wno-format on + alpha*-dec-osf*. + * testsuite/libffi.call/cls_align_uint64.c: Likewise. + * testsuite/libffi.call/cls_ulonglong.c: Likewise. + * testsuite/libffi.call/return_ll1.c: Likewise. + * testsuite/libffi.call/stret_medium2.c: Likewise. + * testsuite/libffi.special/ffitestcxx.h (allocate_mmap): Cast + MAP_FAILED to char *. + +2010-01-06 Rainer Orth + + * src/mips/n32.S: Use .abicalls and .eh_frame with __GNUC__. + +2009-12-31 Anthony Green + + * README: Update for libffi 3.0.9. + +2009-12-27 Matthias Klose + + * configure.ac (HAVE_LONG_DOUBLE): Define for mips when + appropriate. + * configure: Rebuilt. + +2009-12-26 Anthony Green + + * testsuite/libffi.call/cls_longdouble_va.c: Mark as xfail for + avr32*-*-*. + * testsuite/libffi.call/cls_double_va.c: Ditto. + +2009-12-26 Andreas Tobler + + * testsuite/libffi.call/ffitest.h: Conditionally include stdint.h + and inttypes.h. + * testsuite/libffi.special/unwindtest.cc: Ditto. + +2009-12-26 Andreas Tobler + + * configure.ac: Add amd64-*-openbsd*. + * configure: Rebuilt. + * testsuite/lib/libffi-dg.exp (libffi_target_compile): Link + openbsd programs with -lpthread. + +2009-12-26 Anthony Green + + * testsuite/libffi.call/cls_double_va.c, + testsuite/libffi.call/cls_longdouble.c, + testsuite/libffi.call/cls_longdouble_va.c, + testsuite/libffi.call/cls_pointer.c, + testsuite/libffi.call/cls_pointer_stack.c: Remove xfail for + mips*-*-* and arm*-*-*. + * testsuite/libffi.call/cls_align_longdouble_split.c, + testsuite/libffi.call/cls_align_longdouble_split2.c, + testsuite/libffi.call/stret_medium2.c, + testsuite/libffi.call/stret_medium.c, + testsuite/libffi.call/stret_large.c, + testsuite/libffi.call/stret_large2.c: Remove xfail for arm*-*-*. + +2009-12-31 Kay Tietz + + * testsuite/libffi.call/ffitest.h, + testsuite/libffi.special/ffitestcxx.h (PRIdLL, PRuLL): Fix + definitions. + +2009-12-31 Carlo Bramini + + * configure.ac (AM_LTLDFLAGS): Define for windows hosts. + * Makefile.am (libffi_la_LDFLAGS): Add AM_LTLDFLAGS. + * configure: Rebuilt. + * Makefile.in: Rebuilt. + +2009-12-31 Anthony Green + Blake Chaffin. + + * testsuite/libffi.call/huge_struct.c: New test case from Blake + Chaffin @ Apple. + 2009-12-28 David Edelsohn * src/powerpc/ffi_darwin.c (ffi_prep_args): Copy abi and nargs to Modified: python/branches/py3k-jit/Modules/_ctypes/libffi/ChangeLog.libffi ============================================================================== --- python/branches/py3k-jit/Modules/_ctypes/libffi/ChangeLog.libffi (original) +++ python/branches/py3k-jit/Modules/_ctypes/libffi/ChangeLog.libffi Fri Mar 19 22:41:36 2010 @@ -1,56 +1,35 @@ -2009-12-27 Matthias Klose +2010-01-15 Anthony Green - * configure.ac (HAVE_LONG_DOUBLE): Define for mips when - appropriate. - * configure: Rebuilt. - -2009-12-27 Anthony Green + * README: Add notes on building with Microsoft Visual C++. - * testsuite/libffi.call/cls_longdouble.c: Don't xfail for ARM. +2010-01-15 Daniel Witte -2009-12-26 Anthony Green + * msvcc.sh: New file. - * testsuite/libffi.call/huge_struct.c: Don't xfail for avr32*-*-*. - * testsuite/libffi.call/cls_longdouble_va.c: Mark as xfail for - avr32*-*-*. - * testsuite/libffi.call/cls_double_va.c: Ditto. + * src/x86/win32.S: Port assembly routines to MSVC and #ifdef. + * src/x86/ffi.c: Tweak function declaration and remove excess + parens. + * include/ffi.h.in: Add __declspec(align(8)) to typedef struct + ffi_closure. -2009-12-26 Andreas Tobler + * src/x86/ffi.c: Merge ffi_call_SYSV and ffi_call_STDCALL into new + function ffi_call_win32 on X86_WIN32. + * src/x86/win32.S (ffi_call_SYSV): Rename to ffi_call_win32. + (ffi_call_STDCALL): Remove. - * testsuite/libffi.call/ffitest.h: Conditionally include stdint.h - and inttypes.h. - * testsuite/libffi.special/unwindtest.cc: Ditto. - * testsuite/libffi.call/huge_struct.c: Don't include stdint.h - directly. + * src/prep_cif.c (ffi_prep_cif): Move stack space allocation code + to ffi_prep_cif_machdep for x86. + * src/x86/ffi.c (ffi_prep_cif_machdep): To here. -2009-12-26 Andreas Tobler +2010-01-15 Oliver Kiddle - * configure.ac: Add amd64-*-openbsd*. - * configure: Rebuilt. - * testsuite/lib/libffi-dg.exp (libffi_target_compile): Link - openbsd programs with -lpthread. + * src/x86/ffitarget.h (ffi_abi): Check for __i386 and __amd64 for + Sun Studio compiler compatibility. -2009-12-26 Anthony Green +2010-01-12 Conrad Irwin - * testsuite/libffi.call/cls_double_va.c, - testsuite/libffi.call/cls_longdouble.c, - testsuite/libffi.call/cls_longdouble_va.c, - testsuite/libffi.call/cls_pointer.c, - testsuite/libffi.call/cls_pointer_stack.c: Remove xfail for - mips*-*-* and arm*-*-*. - * testsuite/libffi.call/cls_align_longdouble_split.c, - testsuite/libffi.call/cls_align_longdouble_split2.c, - testsuite/libffi.call/stret_medium2.c, - testsuite/libffi.call/stret_medium.c, - testsuite/libffi.call/stret_large.c, - testsuite/libffi.call/stret_large2.c: Remove xfail for arm*-*-*. - -2009-12-26 Andreas Tobler - Anthony Green - - * testsuite/libffi.call/huge_struct.c (test_large_fn): Replace - format code %p with %#lx because %p does not add a leading 0x on - Solaris. Also change relevant arguments to unsigned long. + * doc/libffi.texi: Add closure example. + * doc/libffi.info: Rebuilt. 2009-12-25 Samuli Suominen @@ -58,30 +37,6 @@ * configure: Rebuilt. * fficonfig.h.in: Rebuilt. -2009-12-29 Kay Tietz - - * testsuite/libffi.call/ffitest.h, - testsuite/libffi.special/ffitestcxx.h (PRIdLL, PRuLL): Fix - definitions. - -2009-12-25 Carlo Bramini - - * configure.ac (AM_LTLDFLAGS): Define for windows hosts. - * Makefile.am (libffi_la_LDFLAGS): Add AM_LTLDFLAGS. - * configure: Rebuilt. - * Makefile.in: Rebuilt. - -2009-12-24 Anthony Green - - * testsuite/libffi.call/huge_struct.c: Fix printf format, and - don't xfail x86 Linux. - * testsuite/libffi.call/huge_struct.c: Don't xfail mips. - * testsuite/libffi.call/cls_pointer.c: Ditto. - * testsuite/libffi.call/cls_pointer_stack.c: Ditto. - * testsuite/libffi.call/cls_longdouble_va.c: Ditto. - * testsuite/libffi.call/cls_longdouble.c: Ditto. - * testsuite/libffi.call/cls_double_va.c: Ditto. - 2009-06-16 Andrew Haley * testsuite/libffi.call/cls_align_sint64.c, @@ -257,20 +212,20 @@ 2008-12-22 Timothy Wall * testsuite/libffi.call/closure_fn0.c, - testsuite/libffi.call/closure_fn1.c, - testsuite/libffi.call/closure_fn2.c, - testsuite/libffi.call/closure_fn3.c, - testsuite/libffi.call/closure_fn4.c, - testsuite/libffi.call/closure_fn5.c, - testsuite/libffi.call/closure_fn6.c, - testsuite/libffi.call/closure_loc_fn0.c, - testsuite/libffi.call/closure_stdcall.c, - testsuite/libffi.call/cls_align_pointer.c, - testsuite/libffi.call/cls_pointer.c, + testsuite/libffi.call/closure_fn1.c, + testsuite/libffi.call/closure_fn2.c, + testsuite/libffi.call/closure_fn3.c, + testsuite/libffi.call/closure_fn4.c, + testsuite/libffi.call/closure_fn5.c, + testsuite/libffi.call/closure_fn6.c, + testsuite/libffi.call/closure_loc_fn0.c, + testsuite/libffi.call/closure_stdcall.c, + testsuite/libffi.call/cls_align_pointer.c, + testsuite/libffi.call/cls_pointer.c, testsuite/libffi.call/cls_pointer_stack.c: use portable cast from pointer to integer (intptr_t). * testsuite/libffi.call/cls_longdouble.c: disable for win64. - + 2008-12-19 Anthony Green * configure.ac: Bump version to 3.0.8. Modified: python/branches/py3k-jit/Modules/_ctypes/libffi/Makefile.am ============================================================================== --- python/branches/py3k-jit/Modules/_ctypes/libffi/Makefile.am (original) +++ python/branches/py3k-jit/Modules/_ctypes/libffi/Makefile.am Fri Mar 19 22:41:36 2010 @@ -175,7 +175,7 @@ AM_CFLAGS = -Wall -g -fexceptions -libffi_la_LDFLAGS = -version-info `grep -v '^\#' $(srcdir)/libtool-version` $(AM_LTLDFLAGS) +libffi_la_LDFLAGS = -version-info `grep -v '^\#' $(srcdir)/libtool-version` $(LTLDFLAGS) $(AM_LTLDFLAGS) AM_CPPFLAGS = -I. -I$(top_srcdir)/include -Iinclude -I$(top_srcdir)/src AM_CCASFLAGS = $(AM_CPPFLAGS) @@ -184,4 +184,3 @@ .PHONY: install-html install-pdf install-html: install-pdf: - Modified: python/branches/py3k-jit/Modules/_ctypes/libffi/README ============================================================================== --- python/branches/py3k-jit/Modules/_ctypes/libffi/README (original) +++ python/branches/py3k-jit/Modules/_ctypes/libffi/README Fri Mar 19 22:41:36 2010 @@ -1,7 +1,7 @@ Status ====== -libffi-3.0.9 was released on December 31, 2009. Check the libffi web +libffi-3.0.10 was released on XXXXXXXXXX, 2010. Check the libffi web page for updates: . @@ -43,7 +43,7 @@ For specific configuration details and testing status, please refer to the wiki page here: - http://www.moxielogic.org/wiki/index.php?title=Libffi_3.0.9 + http://www.moxielogic.org/wiki/index.php?title=Libffi_3.0.10 At the time of release, the following basic configurations have been tested: @@ -52,6 +52,7 @@ | Architecture | Operating System | |--------------+------------------| | Alpha | Linux | +| Alpha | Tru64 | | ARM | Linux | | AVR32 | Linux | | HPPA | HPUX | @@ -80,6 +81,7 @@ | X86-64 | FreeBSD | | X86-64 | Linux | | X86-64 | OpenBSD | +| X86-64 | Windows/MingW | |--------------+------------------| Please send additional platform test results to @@ -107,6 +109,14 @@ are using Purify with libffi. Only use this switch when using Purify, as it will slow down the library. +It's also possible to build libffi on Windows platforms with +Microsoft's Visual C++ compiler. In this case, use the msvcc.sh +wrapper script during configuration like so: + +path/to/configure --enable-shared --enable-static \ + CC=path/to/msvcc.sh LD=link \ + CPP=\"cl -nologo -EP\" + Configure has many other options. Use "configure --help" to see them all. Once configure has finished, type "make". Note that you must be using @@ -123,6 +133,12 @@ See the ChangeLog files for details. +3.0.10 ???-??-?? + Fix the N64 build on mips-sgi-irix6.5. + Testsuite fixes for Tru64 Unix. + Enable builds with Microsoft's compiler. + Enable x86 builds with Sun's compiler. + 3.0.9 Dec-31-09 Add AVR32 and win64 ports. Add ARM softfp support. Many fixes for AIX, Solaris, HP-UX, *BSD. Modified: python/branches/py3k-jit/Modules/_ctypes/libffi/aclocal.m4 ============================================================================== --- python/branches/py3k-jit/Modules/_ctypes/libffi/aclocal.m4 (original) +++ python/branches/py3k-jit/Modules/_ctypes/libffi/aclocal.m4 Fri Mar 19 22:41:36 2010 @@ -1046,4 +1046,9 @@ AC_SUBST([am__untar]) ]) # _AM_PROG_TAR +m4_include([m4/libtool.m4]) +m4_include([m4/ltoptions.m4]) +m4_include([m4/ltsugar.m4]) +m4_include([m4/ltversion.m4]) +m4_include([m4/lt~obsolete.m4]) m4_include([acinclude.m4]) Modified: python/branches/py3k-jit/Modules/_ctypes/libffi/configure ============================================================================== --- python/branches/py3k-jit/Modules/_ctypes/libffi/configure (original) +++ python/branches/py3k-jit/Modules/_ctypes/libffi/configure Fri Mar 19 22:41:36 2010 @@ -1,6 +1,6 @@ #! /bin/sh # Guess values for system-dependent variables and create Makefiles. -# Generated by GNU Autoconf 2.65 for libffi 3.0.9. +# Generated by GNU Autoconf 2.65 for libffi 3.0.10rc0. # # Report bugs to . # @@ -529,6 +529,155 @@ as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" + +# Check that we are running under the correct shell. +SHELL=${CONFIG_SHELL-/bin/sh} + +case X$lt_ECHO in +X*--fallback-echo) + # Remove one level of quotation (which was required for Make). + ECHO=`echo "$lt_ECHO" | sed 's,\\\\\$\\$0,'$0','` + ;; +esac + +ECHO=${lt_ECHO-echo} +if test "X$1" = X--no-reexec; then + # Discard the --no-reexec flag, and continue. + shift +elif test "X$1" = X--fallback-echo; then + # Avoid inline document here, it may be left over + : +elif test "X`{ $ECHO '\t'; } 2>/dev/null`" = 'X\t' ; then + # Yippee, $ECHO works! + : +else + # Restart under the correct shell. + exec $SHELL "$0" --no-reexec ${1+"$@"} +fi + +if test "X$1" = X--fallback-echo; then + # used as fallback echo + shift + cat <<_LT_EOF +$* +_LT_EOF + exit 0 +fi + +# The HP-UX ksh and POSIX shell print the target directory to stdout +# if CDPATH is set. +(unset CDPATH) >/dev/null 2>&1 && unset CDPATH + +if test -z "$lt_ECHO"; then + if test "X${echo_test_string+set}" != Xset; then + # find a string as large as possible, as long as the shell can cope with it + for cmd in 'sed 50q "$0"' 'sed 20q "$0"' 'sed 10q "$0"' 'sed 2q "$0"' 'echo test'; do + # expected sizes: less than 2Kb, 1Kb, 512 bytes, 16 bytes, ... + if { echo_test_string=`eval $cmd`; } 2>/dev/null && + { test "X$echo_test_string" = "X$echo_test_string"; } 2>/dev/null + then + break + fi + done + fi + + if test "X`{ $ECHO '\t'; } 2>/dev/null`" = 'X\t' && + echo_testing_string=`{ $ECHO "$echo_test_string"; } 2>/dev/null` && + test "X$echo_testing_string" = "X$echo_test_string"; then + : + else + # The Solaris, AIX, and Digital Unix default echo programs unquote + # backslashes. This makes it impossible to quote backslashes using + # echo "$something" | sed 's/\\/\\\\/g' + # + # So, first we look for a working echo in the user's PATH. + + lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR + for dir in $PATH /usr/ucb; do + IFS="$lt_save_ifs" + if (test -f $dir/echo || test -f $dir/echo$ac_exeext) && + test "X`($dir/echo '\t') 2>/dev/null`" = 'X\t' && + echo_testing_string=`($dir/echo "$echo_test_string") 2>/dev/null` && + test "X$echo_testing_string" = "X$echo_test_string"; then + ECHO="$dir/echo" + break + fi + done + IFS="$lt_save_ifs" + + if test "X$ECHO" = Xecho; then + # We didn't find a better echo, so look for alternatives. + if test "X`{ print -r '\t'; } 2>/dev/null`" = 'X\t' && + echo_testing_string=`{ print -r "$echo_test_string"; } 2>/dev/null` && + test "X$echo_testing_string" = "X$echo_test_string"; then + # This shell has a builtin print -r that does the trick. + ECHO='print -r' + elif { test -f /bin/ksh || test -f /bin/ksh$ac_exeext; } && + test "X$CONFIG_SHELL" != X/bin/ksh; then + # If we have ksh, try running configure again with it. + ORIGINAL_CONFIG_SHELL=${CONFIG_SHELL-/bin/sh} + export ORIGINAL_CONFIG_SHELL + CONFIG_SHELL=/bin/ksh + export CONFIG_SHELL + exec $CONFIG_SHELL "$0" --no-reexec ${1+"$@"} + else + # Try using printf. + ECHO='printf %s\n' + if test "X`{ $ECHO '\t'; } 2>/dev/null`" = 'X\t' && + echo_testing_string=`{ $ECHO "$echo_test_string"; } 2>/dev/null` && + test "X$echo_testing_string" = "X$echo_test_string"; then + # Cool, printf works + : + elif echo_testing_string=`($ORIGINAL_CONFIG_SHELL "$0" --fallback-echo '\t') 2>/dev/null` && + test "X$echo_testing_string" = 'X\t' && + echo_testing_string=`($ORIGINAL_CONFIG_SHELL "$0" --fallback-echo "$echo_test_string") 2>/dev/null` && + test "X$echo_testing_string" = "X$echo_test_string"; then + CONFIG_SHELL=$ORIGINAL_CONFIG_SHELL + export CONFIG_SHELL + SHELL="$CONFIG_SHELL" + export SHELL + ECHO="$CONFIG_SHELL $0 --fallback-echo" + elif echo_testing_string=`($CONFIG_SHELL "$0" --fallback-echo '\t') 2>/dev/null` && + test "X$echo_testing_string" = 'X\t' && + echo_testing_string=`($CONFIG_SHELL "$0" --fallback-echo "$echo_test_string") 2>/dev/null` && + test "X$echo_testing_string" = "X$echo_test_string"; then + ECHO="$CONFIG_SHELL $0 --fallback-echo" + else + # maybe with a smaller string... + prev=: + + for cmd in 'echo test' 'sed 2q "$0"' 'sed 10q "$0"' 'sed 20q "$0"' 'sed 50q "$0"'; do + if { test "X$echo_test_string" = "X`eval $cmd`"; } 2>/dev/null + then + break + fi + prev="$cmd" + done + + if test "$prev" != 'sed 50q "$0"'; then + echo_test_string=`eval $prev` + export echo_test_string + exec ${ORIGINAL_CONFIG_SHELL-${CONFIG_SHELL-/bin/sh}} "$0" ${1+"$@"} + else + # Oops. We lost completely, so just stick with echo. + ECHO=echo + fi + fi + fi + fi + fi +fi + +# Copy echo and quote the copy suitably for passing to libtool from +# the Makefile, instead of quoting the original, which is used later. +lt_ECHO=$ECHO +if test "X$lt_ECHO" = "X$CONFIG_SHELL $0 --fallback-echo"; then + lt_ECHO="$CONFIG_SHELL \\\$\$0 --fallback-echo" +fi + + + + test -n "$DJDIR" || exec 7<&0 &1 @@ -552,8 +701,8 @@ # Identity of this package. PACKAGE_NAME='libffi' PACKAGE_TARNAME='libffi' -PACKAGE_VERSION='3.0.9' -PACKAGE_STRING='libffi 3.0.9' +PACKAGE_VERSION='3.0.10rc0' +PACKAGE_STRING='libffi 3.0.10rc0' PACKAGE_BUGREPORT='http://gcc.gnu.org/bugs.html' PACKAGE_URL='' @@ -659,12 +808,29 @@ AM_RUNTESTFLAGS TESTSUBDIR_FALSE TESTSUBDIR_TRUE -EGREP -GREP -CPP MAINT MAINTAINER_MODE_FALSE MAINTAINER_MODE_TRUE +CPP +OTOOL64 +OTOOL +LIPO +NMEDIT +DSYMUTIL +lt_ECHO +RANLIB +AR +OBJDUMP +LN_S +NM +ac_ct_DUMPBIN +DUMPBIN +LD +FGREP +EGREP +GREP +SED +LIBTOOL am__fastdepCCAS_FALSE am__fastdepCCAS_TRUE CCASDEPMODE @@ -763,6 +929,12 @@ ac_user_opts=' enable_option_checking enable_dependency_tracking +enable_shared +enable_static +with_pic +enable_fast_install +with_gnu_ld +enable_libtool_lock enable_maintainer_mode enable_debug enable_structs @@ -1317,7 +1489,7 @@ # Omit some internal or obsolete options to make the list less imposing. # This message is too long to be a string in the A/UX 3.1 sh. cat <<_ACEOF -\`configure' configures libffi 3.0.9 to adapt to many kinds of systems. +\`configure' configures libffi 3.0.10rc0 to adapt to many kinds of systems. Usage: $0 [OPTION]... [VAR=VALUE]... @@ -1388,7 +1560,7 @@ if test -n "$ac_init_help"; then case $ac_init_help in - short | recursive ) echo "Configuration of libffi 3.0.9:";; + short | recursive ) echo "Configuration of libffi 3.0.10rc0:";; esac cat <<\_ACEOF @@ -1398,6 +1570,11 @@ --enable-FEATURE[=ARG] include FEATURE [ARG=yes] --disable-dependency-tracking speeds up one-time build --enable-dependency-tracking do not reject slow dependency extractors + --enable-shared[=PKGS] build shared libraries [default=yes] + --enable-static[=PKGS] build static libraries [default=yes] + --enable-fast-install[=PKGS] + optimize for fast installation [default=yes] + --disable-libtool-lock avoid locking (might break parallel builds) --enable-maintainer-mode enable make rules and dependencies not useful (and sometimes confusing) to the casual installer --enable-debug debugging mode @@ -1405,6 +1582,13 @@ --disable-raw-api make the raw api unavailable --enable-purify-safety purify-safe mode +Optional Packages: + --with-PACKAGE[=ARG] use PACKAGE [ARG=yes] + --without-PACKAGE do not use PACKAGE (same as --with-PACKAGE=no) + --with-pic try to use only PIC/non-PIC objects [default=use + both] + --with-gnu-ld assume the C compiler uses GNU ld [default=no] + Some influential environment variables: CC C compiler command CFLAGS C compiler flags @@ -1483,7 +1667,7 @@ test -n "$ac_init_help" && exit $ac_status if $ac_init_version; then cat <<\_ACEOF -libffi configure 3.0.9 +libffi configure 3.0.10rc0 generated by GNU Autoconf 2.65 Copyright (C) 2009 Free Software Foundation, Inc. @@ -1535,6 +1719,83 @@ } # ac_fn_c_try_compile +# ac_fn_c_try_link LINENO +# ----------------------- +# Try to link conftest.$ac_ext, and return whether this succeeded. +ac_fn_c_try_link () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + rm -f conftest.$ac_objext conftest$ac_exeext + if { { ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_link") 2>conftest.err + ac_status=$? + if test -s conftest.err; then + grep -v '^ *+' conftest.err >conftest.er1 + cat conftest.er1 >&5 + mv -f conftest.er1 conftest.err + fi + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest$ac_exeext && { + test "$cross_compiling" = yes || + $as_test_x conftest$ac_exeext + }; then : + ac_retval=0 +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_retval=1 +fi + # Delete the IPA/IPO (Inter Procedural Analysis/Optimization) information + # created by the PGI compiler (conftest_ipa8_conftest.oo), as it would + # interfere with the next link command; also delete a directory that is + # left behind by Apple's compiler. We do this before executing the actions. + rm -rf conftest.dSYM conftest_ipa8_conftest.oo + eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;} + as_fn_set_status $ac_retval + +} # ac_fn_c_try_link + +# ac_fn_c_check_header_compile LINENO HEADER VAR INCLUDES +# ------------------------------------------------------- +# Tests whether HEADER exists and can be compiled using the include files in +# INCLUDES, setting the cache variable VAR accordingly. +ac_fn_c_check_header_compile () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 +$as_echo_n "checking for $2... " >&6; } +if { as_var=$3; eval "test \"\${$as_var+set}\" = set"; }; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$4 +#include <$2> +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + eval "$3=yes" +else + eval "$3=no" +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +eval ac_res=\$$3 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } + eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;} + +} # ac_fn_c_check_header_compile + # ac_fn_c_try_cpp LINENO # ---------------------- # Try to preprocess conftest.$ac_ext, and return whether this succeeded. @@ -1572,6 +1833,115 @@ } # ac_fn_c_try_cpp +# ac_fn_c_try_run LINENO +# ---------------------- +# Try to link conftest.$ac_ext, and return whether this succeeded. Assumes +# that executables *can* be run. +ac_fn_c_try_run () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + if { { ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_link") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } && { ac_try='./conftest$ac_exeext' + { { case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_try") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then : + ac_retval=0 +else + $as_echo "$as_me: program exited with status $ac_status" >&5 + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_retval=$ac_status +fi + rm -rf conftest.dSYM conftest_ipa8_conftest.oo + eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;} + as_fn_set_status $ac_retval + +} # ac_fn_c_try_run + +# ac_fn_c_check_func LINENO FUNC VAR +# ---------------------------------- +# Tests whether FUNC exists, setting the cache variable VAR accordingly +ac_fn_c_check_func () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 +$as_echo_n "checking for $2... " >&6; } +if { as_var=$3; eval "test \"\${$as_var+set}\" = set"; }; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +/* Define $2 to an innocuous variant, in case declares $2. + For example, HP-UX 11i declares gettimeofday. */ +#define $2 innocuous_$2 + +/* System header to define __stub macros and hopefully few prototypes, + which can conflict with char $2 (); below. + Prefer to if __STDC__ is defined, since + exists even on freestanding compilers. */ + +#ifdef __STDC__ +# include +#else +# include +#endif + +#undef $2 + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char $2 (); +/* The GNU C library defines this for functions which it implements + to always fail with ENOSYS. Some functions are actually named + something starting with __ and the normal name is an alias. */ +#if defined __stub_$2 || defined __stub___$2 +choke me +#endif + +int +main () +{ +return $2 (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + eval "$3=yes" +else + eval "$3=no" +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +fi +eval ac_res=\$$3 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } + eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;} + +} # ac_fn_c_check_func + # ac_fn_c_check_header_mongrel LINENO HEADER VAR INCLUDES # ------------------------------------------------------- # Tests whether HEADER exists, giving a warning if it cannot be compiled using @@ -1665,198 +2035,12 @@ } # ac_fn_c_check_header_mongrel -# ac_fn_c_try_run LINENO -# ---------------------- -# Try to link conftest.$ac_ext, and return whether this succeeded. Assumes -# that executables *can* be run. -ac_fn_c_try_run () -{ - as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - if { { ac_try="$ac_link" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 - (eval "$ac_link") 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; } && { ac_try='./conftest$ac_exeext' - { { case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 - (eval "$ac_try") 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; }; then : - ac_retval=0 -else - $as_echo "$as_me: program exited with status $ac_status" >&5 - $as_echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_retval=$ac_status -fi - rm -rf conftest.dSYM conftest_ipa8_conftest.oo - eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;} - as_fn_set_status $ac_retval - -} # ac_fn_c_try_run - -# ac_fn_c_check_header_compile LINENO HEADER VAR INCLUDES -# ------------------------------------------------------- -# Tests whether HEADER exists and can be compiled using the include files in -# INCLUDES, setting the cache variable VAR accordingly. -ac_fn_c_check_header_compile () -{ - as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 -$as_echo_n "checking for $2... " >&6; } -if { as_var=$3; eval "test \"\${$as_var+set}\" = set"; }; then : - $as_echo_n "(cached) " >&6 -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -$4 -#include <$2> -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - eval "$3=yes" -else - eval "$3=no" -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -fi -eval ac_res=\$$3 - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 -$as_echo "$ac_res" >&6; } - eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;} - -} # ac_fn_c_check_header_compile - -# ac_fn_c_try_link LINENO -# ----------------------- -# Try to link conftest.$ac_ext, and return whether this succeeded. -ac_fn_c_try_link () -{ - as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - rm -f conftest.$ac_objext conftest$ac_exeext - if { { ac_try="$ac_link" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 - (eval "$ac_link") 2>conftest.err - ac_status=$? - if test -s conftest.err; then - grep -v '^ *+' conftest.err >conftest.er1 - cat conftest.er1 >&5 - mv -f conftest.er1 conftest.err - fi - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest$ac_exeext && { - test "$cross_compiling" = yes || - $as_test_x conftest$ac_exeext - }; then : - ac_retval=0 -else - $as_echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_retval=1 -fi - # Delete the IPA/IPO (Inter Procedural Analysis/Optimization) information - # created by the PGI compiler (conftest_ipa8_conftest.oo), as it would - # interfere with the next link command; also delete a directory that is - # left behind by Apple's compiler. We do this before executing the actions. - rm -rf conftest.dSYM conftest_ipa8_conftest.oo - eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;} - as_fn_set_status $ac_retval - -} # ac_fn_c_try_link - -# ac_fn_c_check_func LINENO FUNC VAR -# ---------------------------------- -# Tests whether FUNC exists, setting the cache variable VAR accordingly -ac_fn_c_check_func () -{ - as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 -$as_echo_n "checking for $2... " >&6; } -if { as_var=$3; eval "test \"\${$as_var+set}\" = set"; }; then : - $as_echo_n "(cached) " >&6 -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -/* Define $2 to an innocuous variant, in case declares $2. - For example, HP-UX 11i declares gettimeofday. */ -#define $2 innocuous_$2 - -/* System header to define __stub macros and hopefully few prototypes, - which can conflict with char $2 (); below. - Prefer to if __STDC__ is defined, since - exists even on freestanding compilers. */ - -#ifdef __STDC__ -# include -#else -# include -#endif - -#undef $2 - -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char $2 (); -/* The GNU C library defines this for functions which it implements - to always fail with ENOSYS. Some functions are actually named - something starting with __ and the normal name is an alias. */ -#if defined __stub_$2 || defined __stub___$2 -choke me -#endif - -int -main () -{ -return $2 (); - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - eval "$3=yes" -else - eval "$3=no" -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -fi -eval ac_res=\$$3 - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 -$as_echo "$ac_res" >&6; } - eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;} - -} # ac_fn_c_check_func - -# ac_fn_c_compute_int LINENO EXPR VAR INCLUDES -# -------------------------------------------- -# Tries to find the compile-time value of EXPR in a program that includes -# INCLUDES, setting VAR accordingly. Returns whether the value could be -# computed -ac_fn_c_compute_int () +# ac_fn_c_compute_int LINENO EXPR VAR INCLUDES +# -------------------------------------------- +# Tries to find the compile-time value of EXPR in a program that includes +# INCLUDES, setting VAR accordingly. Returns whether the value could be +# computed +ac_fn_c_compute_int () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack if test "$cross_compiling" = yes; then @@ -2032,7 +2216,7 @@ This file contains any messages produced by compilers while running configure, to aid debugging if configure makes a mistake. -It was created by libffi $as_me 3.0.9, which was +It was created by libffi $as_me 3.0.10rc0, which was generated by GNU Autoconf 2.65. Invocation command line was $ $0 $@ @@ -2958,7 +3142,7 @@ # Define the identity of the package. PACKAGE='libffi' - VERSION='3.0.9' + VERSION='3.0.10rc0' cat >>confdefs.h <<_ACEOF @@ -4249,170 +4433,111 @@ fi -AC_PROG_LIBTOOL +case `pwd` in + *\ * | *\ *) + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Libtool does not cope well with whitespace in \`pwd\`" >&5 +$as_echo "$as_me: WARNING: Libtool does not cope well with whitespace in \`pwd\`" >&2;} ;; +esac -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to enable maintainer-specific portions of Makefiles" >&5 -$as_echo_n "checking whether to enable maintainer-specific portions of Makefiles... " >&6; } - # Check whether --enable-maintainer-mode was given. -if test "${enable_maintainer_mode+set}" = set; then : - enableval=$enable_maintainer_mode; USE_MAINTAINER_MODE=$enableval -else - USE_MAINTAINER_MODE=no -fi +macro_version='2.2.6' +macro_revision='1.3012' - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $USE_MAINTAINER_MODE" >&5 -$as_echo "$USE_MAINTAINER_MODE" >&6; } - if test $USE_MAINTAINER_MODE = yes; then - MAINTAINER_MODE_TRUE= - MAINTAINER_MODE_FALSE='#' -else - MAINTAINER_MODE_TRUE='#' - MAINTAINER_MODE_FALSE= -fi - MAINT=$MAINTAINER_MODE_TRUE -ac_ext=c -ac_cpp='$CPP $CPPFLAGS' -ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_c_compiler_gnu -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to run the C preprocessor" >&5 -$as_echo_n "checking how to run the C preprocessor... " >&6; } -# On Suns, sometimes $CPP names a directory. -if test -n "$CPP" && test -d "$CPP"; then - CPP= -fi -if test -z "$CPP"; then - if test "${ac_cv_prog_CPP+set}" = set; then : + + + + + + + +ltmain="$ac_aux_dir/ltmain.sh" + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a sed that does not truncate output" >&5 +$as_echo_n "checking for a sed that does not truncate output... " >&6; } +if test "${ac_cv_path_SED+set}" = set; then : $as_echo_n "(cached) " >&6 else - # Double quotes because CPP needs to be expanded - for CPP in "$CC -E" "$CC -E -traditional-cpp" "/lib/cpp" - do - ac_preproc_ok=false -for ac_c_preproc_warn_flag in '' yes + ac_script=s/aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb/ + for ac_i in 1 2 3 4 5 6 7; do + ac_script="$ac_script$as_nl$ac_script" + done + echo "$ac_script" 2>/dev/null | sed 99q >conftest.sed + { ac_script=; unset ac_script;} + if test -z "$SED"; then + ac_path_SED_found=false + # Loop through the user's path and test for each of PROGNAME-LIST + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH do - # Use a header file that comes with gcc, so configuring glibc - # with a fresh cross-compiler works. - # Prefer to if __STDC__ is defined, since - # exists even on freestanding compilers. - # On the NeXT, cc -E runs the code through the compiler's parser, - # not just through cpp. "Syntax error" is here to catch this case. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#ifdef __STDC__ -# include -#else -# include -#endif - Syntax error -_ACEOF -if ac_fn_c_try_cpp "$LINENO"; then : - -else - # Broken: fails on valid input. -continue -fi -rm -f conftest.err conftest.$ac_ext - - # OK, works on sane cases. Now check whether nonexistent headers - # can be detected and how. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include -_ACEOF -if ac_fn_c_try_cpp "$LINENO"; then : - # Broken: success on invalid input. -continue + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_prog in sed gsed; do + for ac_exec_ext in '' $ac_executable_extensions; do + ac_path_SED="$as_dir/$ac_prog$ac_exec_ext" + { test -f "$ac_path_SED" && $as_test_x "$ac_path_SED"; } || continue +# Check for GNU ac_path_SED and select it if it is found. + # Check for GNU $ac_path_SED +case `"$ac_path_SED" --version 2>&1` in +*GNU*) + ac_cv_path_SED="$ac_path_SED" ac_path_SED_found=:;; +*) + ac_count=0 + $as_echo_n 0123456789 >"conftest.in" + while : + do + cat "conftest.in" "conftest.in" >"conftest.tmp" + mv "conftest.tmp" "conftest.in" + cp "conftest.in" "conftest.nl" + $as_echo '' >> "conftest.nl" + "$ac_path_SED" -f conftest.sed < "conftest.nl" >"conftest.out" 2>/dev/null || break + diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break + as_fn_arith $ac_count + 1 && ac_count=$as_val + if test $ac_count -gt ${ac_path_SED_max-0}; then + # Best one so far, save it but keep looking for a better one + ac_cv_path_SED="$ac_path_SED" + ac_path_SED_max=$ac_count + fi + # 10*(2^10) chars as input seems more than enough + test $ac_count -gt 10 && break + done + rm -f conftest.in conftest.tmp conftest.nl conftest.out;; +esac + + $ac_path_SED_found && break 3 + done + done + done +IFS=$as_save_IFS + if test -z "$ac_cv_path_SED"; then + as_fn_error "no acceptable sed could be found in \$PATH" "$LINENO" 5 + fi else - # Passes both tests. -ac_preproc_ok=: -break + ac_cv_path_SED=$SED fi -rm -f conftest.err conftest.$ac_ext -done -# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. -rm -f conftest.err conftest.$ac_ext -if $ac_preproc_ok; then : - break fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_SED" >&5 +$as_echo "$ac_cv_path_SED" >&6; } + SED="$ac_cv_path_SED" + rm -f conftest.sed + +test -z "$SED" && SED=sed +Xsed="$SED -e 1s/^X//" + + - done - ac_cv_prog_CPP=$CPP -fi - CPP=$ac_cv_prog_CPP -else - ac_cv_prog_CPP=$CPP -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $CPP" >&5 -$as_echo "$CPP" >&6; } -ac_preproc_ok=false -for ac_c_preproc_warn_flag in '' yes -do - # Use a header file that comes with gcc, so configuring glibc - # with a fresh cross-compiler works. - # Prefer to if __STDC__ is defined, since - # exists even on freestanding compilers. - # On the NeXT, cc -E runs the code through the compiler's parser, - # not just through cpp. "Syntax error" is here to catch this case. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#ifdef __STDC__ -# include -#else -# include -#endif - Syntax error -_ACEOF -if ac_fn_c_try_cpp "$LINENO"; then : -else - # Broken: fails on valid input. -continue -fi -rm -f conftest.err conftest.$ac_ext - # OK, works on sane cases. Now check whether nonexistent headers - # can be detected and how. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include -_ACEOF -if ac_fn_c_try_cpp "$LINENO"; then : - # Broken: success on invalid input. -continue -else - # Passes both tests. -ac_preproc_ok=: -break -fi -rm -f conftest.err conftest.$ac_ext -done -# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. -rm -f conftest.err conftest.$ac_ext -if $ac_preproc_ok; then : -else - { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} -as_fn_error "C preprocessor \"$CPP\" fails sanity check -See \`config.log' for more details." "$LINENO" 5; } -fi -ac_ext=c -ac_cpp='$CPP $CPPFLAGS' -ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_c_compiler_gnu { $as_echo "$as_me:${as_lineno-$LINENO}: checking for grep that handles long lines and -e" >&5 @@ -4545,134 +4670,6336 @@ EGREP="$ac_cv_path_EGREP" -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for ANSI C header files" >&5 -$as_echo_n "checking for ANSI C header files... " >&6; } -if test "${ac_cv_header_stdc+set}" = set; then : +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for fgrep" >&5 +$as_echo_n "checking for fgrep... " >&6; } +if test "${ac_cv_path_FGREP+set}" = set; then : $as_echo_n "(cached) " >&6 else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include -#include -#include -#include - -int -main () -{ + if echo 'ab*c' | $GREP -F 'ab*c' >/dev/null 2>&1 + then ac_cv_path_FGREP="$GREP -F" + else + if test -z "$FGREP"; then + ac_path_FGREP_found=false + # Loop through the user's path and test for each of PROGNAME-LIST + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_prog in fgrep; do + for ac_exec_ext in '' $ac_executable_extensions; do + ac_path_FGREP="$as_dir/$ac_prog$ac_exec_ext" + { test -f "$ac_path_FGREP" && $as_test_x "$ac_path_FGREP"; } || continue +# Check for GNU ac_path_FGREP and select it if it is found. + # Check for GNU $ac_path_FGREP +case `"$ac_path_FGREP" --version 2>&1` in +*GNU*) + ac_cv_path_FGREP="$ac_path_FGREP" ac_path_FGREP_found=:;; +*) + ac_count=0 + $as_echo_n 0123456789 >"conftest.in" + while : + do + cat "conftest.in" "conftest.in" >"conftest.tmp" + mv "conftest.tmp" "conftest.in" + cp "conftest.in" "conftest.nl" + $as_echo 'FGREP' >> "conftest.nl" + "$ac_path_FGREP" FGREP < "conftest.nl" >"conftest.out" 2>/dev/null || break + diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break + as_fn_arith $ac_count + 1 && ac_count=$as_val + if test $ac_count -gt ${ac_path_FGREP_max-0}; then + # Best one so far, save it but keep looking for a better one + ac_cv_path_FGREP="$ac_path_FGREP" + ac_path_FGREP_max=$ac_count + fi + # 10*(2^10) chars as input seems more than enough + test $ac_count -gt 10 && break + done + rm -f conftest.in conftest.tmp conftest.nl conftest.out;; +esac - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - ac_cv_header_stdc=yes + $ac_path_FGREP_found && break 3 + done + done + done +IFS=$as_save_IFS + if test -z "$ac_cv_path_FGREP"; then + as_fn_error "no acceptable fgrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 + fi else - ac_cv_header_stdc=no + ac_cv_path_FGREP=$FGREP fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -if test $ac_cv_header_stdc = yes; then - # SunOS 4.x string.h does not declare mem*, contrary to ANSI. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include + fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_FGREP" >&5 +$as_echo "$ac_cv_path_FGREP" >&6; } + FGREP="$ac_cv_path_FGREP" -_ACEOF -if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | - $EGREP "memchr" >/dev/null 2>&1; then : -else - ac_cv_header_stdc=no -fi -rm -f conftest* +test -z "$GREP" && GREP=grep + -fi -if test $ac_cv_header_stdc = yes; then - # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include -_ACEOF -if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | - $EGREP "free" >/dev/null 2>&1; then : -else - ac_cv_header_stdc=no -fi -rm -f conftest* -fi -if test $ac_cv_header_stdc = yes; then - # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi. - if test "$cross_compiling" = yes; then : - : -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include -#include -#if ((' ' & 0x0FF) == 0x020) -# define ISLOWER(c) ('a' <= (c) && (c) <= 'z') -# define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c)) -#else -# define ISLOWER(c) \ - (('a' <= (c) && (c) <= 'i') \ - || ('j' <= (c) && (c) <= 'r') \ - || ('s' <= (c) && (c) <= 'z')) -# define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c)) -#endif -#define XOR(e, f) (((e) && !(f)) || (!(e) && (f))) -int -main () -{ - int i; - for (i = 0; i < 256; i++) - if (XOR (islower (i), ISLOWER (i)) - || toupper (i) != TOUPPER (i)) - return 2; - return 0; -} -_ACEOF -if ac_fn_c_try_run "$LINENO"; then : + + + + + + + + + + +# Check whether --with-gnu-ld was given. +if test "${with_gnu_ld+set}" = set; then : + withval=$with_gnu_ld; test "$withval" = no || with_gnu_ld=yes else - ac_cv_header_stdc=no -fi -rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ - conftest.$ac_objext conftest.beam conftest.$ac_ext + with_gnu_ld=no fi +ac_prog=ld +if test "$GCC" = yes; then + # Check if gcc -print-prog-name=ld gives a path. + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ld used by $CC" >&5 +$as_echo_n "checking for ld used by $CC... " >&6; } + case $host in + *-*-mingw*) + # gcc leaves a trailing carriage return which upsets mingw + ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;; + *) + ac_prog=`($CC -print-prog-name=ld) 2>&5` ;; + esac + case $ac_prog in + # Accept absolute paths. + [\\/]* | ?:[\\/]*) + re_direlt='/[^/][^/]*/\.\./' + # Canonicalize the pathname of ld + ac_prog=`$ECHO "$ac_prog"| $SED 's%\\\\%/%g'` + while $ECHO "$ac_prog" | $GREP "$re_direlt" > /dev/null 2>&1; do + ac_prog=`$ECHO $ac_prog| $SED "s%$re_direlt%/%"` + done + test -z "$LD" && LD="$ac_prog" + ;; + "") + # If it fails, then pretend we aren't using GCC. + ac_prog=ld + ;; + *) + # If it is relative, then search for the first ld in PATH. + with_gnu_ld=unknown + ;; + esac +elif test "$with_gnu_ld" = yes; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for GNU ld" >&5 +$as_echo_n "checking for GNU ld... " >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for non-GNU ld" >&5 +$as_echo_n "checking for non-GNU ld... " >&6; } +fi +if test "${lt_cv_path_LD+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test -z "$LD"; then + lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR + for ac_dir in $PATH; do + IFS="$lt_save_ifs" + test -z "$ac_dir" && ac_dir=. + if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then + lt_cv_path_LD="$ac_dir/$ac_prog" + # Check to see if the program is GNU ld. I'd rather use --version, + # but apparently some variants of GNU ld only accept -v. + # Break only if it was the GNU/non-GNU ld that we prefer. + case `"$lt_cv_path_LD" -v 2>&1 &5 -$as_echo "$ac_cv_header_stdc" >&6; } -if test $ac_cv_header_stdc = yes; then -$as_echo "#define STDC_HEADERS 1" >>confdefs.h +LD="$lt_cv_path_LD" +if test -n "$LD"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LD" >&5 +$as_echo "$LD" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi +test -z "$LD" && as_fn_error "no acceptable ld found in \$PATH" "$LINENO" 5 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if the linker ($LD) is GNU ld" >&5 +$as_echo_n "checking if the linker ($LD) is GNU ld... " >&6; } +if test "${lt_cv_prog_gnu_ld+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + # I'd rather use --version here, but apparently some GNU lds only accept -v. +case `$LD -v 2>&1 &5 +$as_echo "$lt_cv_prog_gnu_ld" >&6; } +with_gnu_ld=$lt_cv_prog_gnu_ld + + + + + + + + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for BSD- or MS-compatible name lister (nm)" >&5 +$as_echo_n "checking for BSD- or MS-compatible name lister (nm)... " >&6; } +if test "${lt_cv_path_NM+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$NM"; then + # Let the user override the test. + lt_cv_path_NM="$NM" +else + lt_nm_to_check="${ac_tool_prefix}nm" + if test -n "$ac_tool_prefix" && test "$build" = "$host"; then + lt_nm_to_check="$lt_nm_to_check nm" + fi + for lt_tmp_nm in $lt_nm_to_check; do + lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR + for ac_dir in $PATH /usr/ccs/bin/elf /usr/ccs/bin /usr/ucb /bin; do + IFS="$lt_save_ifs" + test -z "$ac_dir" && ac_dir=. + tmp_nm="$ac_dir/$lt_tmp_nm" + if test -f "$tmp_nm" || test -f "$tmp_nm$ac_exeext" ; then + # Check to see if the nm accepts a BSD-compat flag. + # Adding the `sed 1q' prevents false positives on HP-UX, which says: + # nm: unknown option "B" ignored + # Tru64's nm complains that /dev/null is an invalid object file + case `"$tmp_nm" -B /dev/null 2>&1 | sed '1q'` in + */dev/null* | *'Invalid file or object type'*) + lt_cv_path_NM="$tmp_nm -B" + break + ;; + *) + case `"$tmp_nm" -p /dev/null 2>&1 | sed '1q'` in + */dev/null*) + lt_cv_path_NM="$tmp_nm -p" + break + ;; + *) + lt_cv_path_NM=${lt_cv_path_NM="$tmp_nm"} # keep the first match, but + continue # so that we can try to find one that supports BSD flags + ;; + esac + ;; + esac + fi + done + IFS="$lt_save_ifs" + done + : ${lt_cv_path_NM=no} +fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_path_NM" >&5 +$as_echo "$lt_cv_path_NM" >&6; } +if test "$lt_cv_path_NM" != "no"; then + NM="$lt_cv_path_NM" +else + # Didn't find any BSD compatible name lister, look for dumpbin. + if test -n "$ac_tool_prefix"; then + for ac_prog in "dumpbin -symbols" "link -dump -symbols" + do + # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. +set dummy $ac_tool_prefix$ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_DUMPBIN+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$DUMPBIN"; then + ac_cv_prog_DUMPBIN="$DUMPBIN" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_DUMPBIN="$ac_tool_prefix$ac_prog" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +DUMPBIN=$ac_cv_prog_DUMPBIN +if test -n "$DUMPBIN"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DUMPBIN" >&5 +$as_echo "$DUMPBIN" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$DUMPBIN" && break + done +fi +if test -z "$DUMPBIN"; then + ac_ct_DUMPBIN=$DUMPBIN + for ac_prog in "dumpbin -symbols" "link -dump -symbols" +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_ac_ct_DUMPBIN+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_DUMPBIN"; then + ac_cv_prog_ac_ct_DUMPBIN="$ac_ct_DUMPBIN" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_ac_ct_DUMPBIN="$ac_prog" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_DUMPBIN=$ac_cv_prog_ac_ct_DUMPBIN +if test -n "$ac_ct_DUMPBIN"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DUMPBIN" >&5 +$as_echo "$ac_ct_DUMPBIN" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$ac_ct_DUMPBIN" && break +done + + if test "x$ac_ct_DUMPBIN" = x; then + DUMPBIN=":" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + DUMPBIN=$ac_ct_DUMPBIN + fi +fi + + + if test "$DUMPBIN" != ":"; then + NM="$DUMPBIN" + fi +fi +test -z "$NM" && NM=nm + + + + + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking the name lister ($NM) interface" >&5 +$as_echo_n "checking the name lister ($NM) interface... " >&6; } +if test "${lt_cv_nm_interface+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_nm_interface="BSD nm" + echo "int some_variable = 0;" > conftest.$ac_ext + (eval echo "\"\$as_me:5045: $ac_compile\"" >&5) + (eval "$ac_compile" 2>conftest.err) + cat conftest.err >&5 + (eval echo "\"\$as_me:5048: $NM \\\"conftest.$ac_objext\\\"\"" >&5) + (eval "$NM \"conftest.$ac_objext\"" 2>conftest.err > conftest.out) + cat conftest.err >&5 + (eval echo "\"\$as_me:5051: output\"" >&5) + cat conftest.out >&5 + if $GREP 'External.*some_variable' conftest.out > /dev/null; then + lt_cv_nm_interface="MS dumpbin" + fi + rm -f conftest* +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_nm_interface" >&5 +$as_echo "$lt_cv_nm_interface" >&6; } + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ln -s works" >&5 +$as_echo_n "checking whether ln -s works... " >&6; } +LN_S=$as_ln_s +if test "$LN_S" = "ln -s"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no, using $LN_S" >&5 +$as_echo "no, using $LN_S" >&6; } +fi + +# find the maximum length of command line arguments +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking the maximum length of command line arguments" >&5 +$as_echo_n "checking the maximum length of command line arguments... " >&6; } +if test "${lt_cv_sys_max_cmd_len+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + i=0 + teststring="ABCD" + + case $build_os in + msdosdjgpp*) + # On DJGPP, this test can blow up pretty badly due to problems in libc + # (any single argument exceeding 2000 bytes causes a buffer overrun + # during glob expansion). Even if it were fixed, the result of this + # check would be larger than it should be. + lt_cv_sys_max_cmd_len=12288; # 12K is about right + ;; + + gnu*) + # Under GNU Hurd, this test is not required because there is + # no limit to the length of command line arguments. + # Libtool will interpret -1 as no limit whatsoever + lt_cv_sys_max_cmd_len=-1; + ;; + + cygwin* | mingw* | cegcc*) + # On Win9x/ME, this test blows up -- it succeeds, but takes + # about 5 minutes as the teststring grows exponentially. + # Worse, since 9x/ME are not pre-emptively multitasking, + # you end up with a "frozen" computer, even though with patience + # the test eventually succeeds (with a max line length of 256k). + # Instead, let's just punt: use the minimum linelength reported by + # all of the supported platforms: 8192 (on NT/2K/XP). + lt_cv_sys_max_cmd_len=8192; + ;; + + amigaos*) + # On AmigaOS with pdksh, this test takes hours, literally. + # So we just punt and use a minimum line length of 8192. + lt_cv_sys_max_cmd_len=8192; + ;; + + netbsd* | freebsd* | openbsd* | darwin* | dragonfly*) + # This has been around since 386BSD, at least. Likely further. + if test -x /sbin/sysctl; then + lt_cv_sys_max_cmd_len=`/sbin/sysctl -n kern.argmax` + elif test -x /usr/sbin/sysctl; then + lt_cv_sys_max_cmd_len=`/usr/sbin/sysctl -n kern.argmax` + else + lt_cv_sys_max_cmd_len=65536 # usable default for all BSDs + fi + # And add a safety zone + lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4` + lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3` + ;; + + interix*) + # We know the value 262144 and hardcode it with a safety zone (like BSD) + lt_cv_sys_max_cmd_len=196608 + ;; + + osf*) + # Dr. Hans Ekkehard Plesser reports seeing a kernel panic running configure + # due to this test when exec_disable_arg_limit is 1 on Tru64. It is not + # nice to cause kernel panics so lets avoid the loop below. + # First set a reasonable default. + lt_cv_sys_max_cmd_len=16384 + # + if test -x /sbin/sysconfig; then + case `/sbin/sysconfig -q proc exec_disable_arg_limit` in + *1*) lt_cv_sys_max_cmd_len=-1 ;; + esac + fi + ;; + sco3.2v5*) + lt_cv_sys_max_cmd_len=102400 + ;; + sysv5* | sco5v6* | sysv4.2uw2*) + kargmax=`grep ARG_MAX /etc/conf/cf.d/stune 2>/dev/null` + if test -n "$kargmax"; then + lt_cv_sys_max_cmd_len=`echo $kargmax | sed 's/.*[ ]//'` + else + lt_cv_sys_max_cmd_len=32768 + fi + ;; + *) + lt_cv_sys_max_cmd_len=`(getconf ARG_MAX) 2> /dev/null` + if test -n "$lt_cv_sys_max_cmd_len"; then + lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4` + lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3` + else + # Make teststring a little bigger before we do anything with it. + # a 1K string should be a reasonable start. + for i in 1 2 3 4 5 6 7 8 ; do + teststring=$teststring$teststring + done + SHELL=${SHELL-${CONFIG_SHELL-/bin/sh}} + # If test is not a shell built-in, we'll probably end up computing a + # maximum length that is only half of the actual maximum length, but + # we can't tell. + while { test "X"`$SHELL $0 --fallback-echo "X$teststring$teststring" 2>/dev/null` \ + = "XX$teststring$teststring"; } >/dev/null 2>&1 && + test $i != 17 # 1/2 MB should be enough + do + i=`expr $i + 1` + teststring=$teststring$teststring + done + # Only check the string length outside the loop. + lt_cv_sys_max_cmd_len=`expr "X$teststring" : ".*" 2>&1` + teststring= + # Add a significant safety factor because C++ compilers can tack on + # massive amounts of additional arguments before passing them to the + # linker. It appears as though 1/2 is a usable value. + lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 2` + fi + ;; + esac + +fi + +if test -n $lt_cv_sys_max_cmd_len ; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_sys_max_cmd_len" >&5 +$as_echo "$lt_cv_sys_max_cmd_len" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: none" >&5 +$as_echo "none" >&6; } +fi +max_cmd_len=$lt_cv_sys_max_cmd_len + + + + + + +: ${CP="cp -f"} +: ${MV="mv -f"} +: ${RM="rm -f"} + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the shell understands some XSI constructs" >&5 +$as_echo_n "checking whether the shell understands some XSI constructs... " >&6; } +# Try some XSI features +xsi_shell=no +( _lt_dummy="a/b/c" + test "${_lt_dummy##*/},${_lt_dummy%/*},"${_lt_dummy%"$_lt_dummy"}, \ + = c,a/b,, \ + && eval 'test $(( 1 + 1 )) -eq 2 \ + && test "${#_lt_dummy}" -eq 5' ) >/dev/null 2>&1 \ + && xsi_shell=yes +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $xsi_shell" >&5 +$as_echo "$xsi_shell" >&6; } + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the shell understands \"+=\"" >&5 +$as_echo_n "checking whether the shell understands \"+=\"... " >&6; } +lt_shell_append=no +( foo=bar; set foo baz; eval "$1+=\$2" && test "$foo" = barbaz ) \ + >/dev/null 2>&1 \ + && lt_shell_append=yes +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_shell_append" >&5 +$as_echo "$lt_shell_append" >&6; } + + +if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then + lt_unset=unset +else + lt_unset=false +fi + + + + + +# test EBCDIC or ASCII +case `echo X|tr X '\101'` in + A) # ASCII based system + # \n is not interpreted correctly by Solaris 8 /usr/ucb/tr + lt_SP2NL='tr \040 \012' + lt_NL2SP='tr \015\012 \040\040' + ;; + *) # EBCDIC based system + lt_SP2NL='tr \100 \n' + lt_NL2SP='tr \r\n \100\100' + ;; +esac + + + + + + + + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $LD option to reload object files" >&5 +$as_echo_n "checking for $LD option to reload object files... " >&6; } +if test "${lt_cv_ld_reload_flag+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_ld_reload_flag='-r' +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ld_reload_flag" >&5 +$as_echo "$lt_cv_ld_reload_flag" >&6; } +reload_flag=$lt_cv_ld_reload_flag +case $reload_flag in +"" | " "*) ;; +*) reload_flag=" $reload_flag" ;; +esac +reload_cmds='$LD$reload_flag -o $output$reload_objs' +case $host_os in + darwin*) + if test "$GCC" = yes; then + reload_cmds='$LTCC $LTCFLAGS -nostdlib ${wl}-r -o $output$reload_objs' + else + reload_cmds='$LD$reload_flag -o $output$reload_objs' + fi + ;; +esac + + + + + + + + + +if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}objdump", so it can be a program name with args. +set dummy ${ac_tool_prefix}objdump; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_OBJDUMP+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$OBJDUMP"; then + ac_cv_prog_OBJDUMP="$OBJDUMP" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_OBJDUMP="${ac_tool_prefix}objdump" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +OBJDUMP=$ac_cv_prog_OBJDUMP +if test -n "$OBJDUMP"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OBJDUMP" >&5 +$as_echo "$OBJDUMP" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_OBJDUMP"; then + ac_ct_OBJDUMP=$OBJDUMP + # Extract the first word of "objdump", so it can be a program name with args. +set dummy objdump; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_ac_ct_OBJDUMP+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_OBJDUMP"; then + ac_cv_prog_ac_ct_OBJDUMP="$ac_ct_OBJDUMP" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_ac_ct_OBJDUMP="objdump" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_OBJDUMP=$ac_cv_prog_ac_ct_OBJDUMP +if test -n "$ac_ct_OBJDUMP"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OBJDUMP" >&5 +$as_echo "$ac_ct_OBJDUMP" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_OBJDUMP" = x; then + OBJDUMP="false" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + OBJDUMP=$ac_ct_OBJDUMP + fi +else + OBJDUMP="$ac_cv_prog_OBJDUMP" +fi + +test -z "$OBJDUMP" && OBJDUMP=objdump + + + + + + + + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to recognize dependent libraries" >&5 +$as_echo_n "checking how to recognize dependent libraries... " >&6; } +if test "${lt_cv_deplibs_check_method+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_file_magic_cmd='$MAGIC_CMD' +lt_cv_file_magic_test_file= +lt_cv_deplibs_check_method='unknown' +# Need to set the preceding variable on all platforms that support +# interlibrary dependencies. +# 'none' -- dependencies not supported. +# `unknown' -- same as none, but documents that we really don't know. +# 'pass_all' -- all dependencies passed with no checks. +# 'test_compile' -- check by making test program. +# 'file_magic [[regex]]' -- check by looking for files in library path +# which responds to the $file_magic_cmd with a given extended regex. +# If you have `file' or equivalent on your system and you're not sure +# whether `pass_all' will *always* work, you probably want this one. + +case $host_os in +aix[4-9]*) + lt_cv_deplibs_check_method=pass_all + ;; + +beos*) + lt_cv_deplibs_check_method=pass_all + ;; + +bsdi[45]*) + lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (shared object|dynamic lib)' + lt_cv_file_magic_cmd='/usr/bin/file -L' + lt_cv_file_magic_test_file=/shlib/libc.so + ;; + +cygwin*) + # func_win32_libid is a shell function defined in ltmain.sh + lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL' + lt_cv_file_magic_cmd='func_win32_libid' + ;; + +mingw* | pw32*) + # Base MSYS/MinGW do not provide the 'file' command needed by + # func_win32_libid shell function, so use a weaker test based on 'objdump', + # unless we find 'file', for example because we are cross-compiling. + if ( file / ) >/dev/null 2>&1; then + lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL' + lt_cv_file_magic_cmd='func_win32_libid' + else + lt_cv_deplibs_check_method='file_magic file format pei*-i386(.*architecture: i386)?' + lt_cv_file_magic_cmd='$OBJDUMP -f' + fi + ;; + +cegcc) + # use the weaker test based on 'objdump'. See mingw*. + lt_cv_deplibs_check_method='file_magic file format pe-arm-.*little(.*architecture: arm)?' + lt_cv_file_magic_cmd='$OBJDUMP -f' + ;; + +darwin* | rhapsody*) + lt_cv_deplibs_check_method=pass_all + ;; + +freebsd* | dragonfly*) + if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then + case $host_cpu in + i*86 ) + # Not sure whether the presence of OpenBSD here was a mistake. + # Let's accept both of them until this is cleared up. + lt_cv_deplibs_check_method='file_magic (FreeBSD|OpenBSD|DragonFly)/i[3-9]86 (compact )?demand paged shared library' + lt_cv_file_magic_cmd=/usr/bin/file + lt_cv_file_magic_test_file=`echo /usr/lib/libc.so.*` + ;; + esac + else + lt_cv_deplibs_check_method=pass_all + fi + ;; + +gnu*) + lt_cv_deplibs_check_method=pass_all + ;; + +hpux10.20* | hpux11*) + lt_cv_file_magic_cmd=/usr/bin/file + case $host_cpu in + ia64*) + lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF-[0-9][0-9]) shared object file - IA64' + lt_cv_file_magic_test_file=/usr/lib/hpux32/libc.so + ;; + hppa*64*) + lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF-[0-9][0-9]) shared object file - PA-RISC [0-9].[0-9]' + lt_cv_file_magic_test_file=/usr/lib/pa20_64/libc.sl + ;; + *) + lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|PA-RISC[0-9].[0-9]) shared library' + lt_cv_file_magic_test_file=/usr/lib/libc.sl + ;; + esac + ;; + +interix[3-9]*) + # PIC code is broken on Interix 3.x, that's why |\.a not |_pic\.a here + lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so|\.a)$' + ;; + +irix5* | irix6* | nonstopux*) + case $LD in + *-32|*"-32 ") libmagic=32-bit;; + *-n32|*"-n32 ") libmagic=N32;; + *-64|*"-64 ") libmagic=64-bit;; + *) libmagic=never-match;; + esac + lt_cv_deplibs_check_method=pass_all + ;; + +# This must be Linux ELF. +linux* | k*bsd*-gnu) + lt_cv_deplibs_check_method=pass_all + ;; + +netbsd*) + if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then + lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|_pic\.a)$' + else + lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so|_pic\.a)$' + fi + ;; + +newos6*) + lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (executable|dynamic lib)' + lt_cv_file_magic_cmd=/usr/bin/file + lt_cv_file_magic_test_file=/usr/lib/libnls.so + ;; + +*nto* | *qnx*) + lt_cv_deplibs_check_method=pass_all + ;; + +openbsd*) + if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then + lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|\.so|_pic\.a)$' + else + lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|_pic\.a)$' + fi + ;; + +osf3* | osf4* | osf5*) + lt_cv_deplibs_check_method=pass_all + ;; + +rdos*) + lt_cv_deplibs_check_method=pass_all + ;; + +solaris*) + lt_cv_deplibs_check_method=pass_all + ;; + +sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) + lt_cv_deplibs_check_method=pass_all + ;; + +sysv4 | sysv4.3*) + case $host_vendor in + motorola) + lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (shared object|dynamic lib) M[0-9][0-9]* Version [0-9]' + lt_cv_file_magic_test_file=`echo /usr/lib/libc.so*` + ;; + ncr) + lt_cv_deplibs_check_method=pass_all + ;; + sequent) + lt_cv_file_magic_cmd='/bin/file' + lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [LM]SB (shared object|dynamic lib )' + ;; + sni) + lt_cv_file_magic_cmd='/bin/file' + lt_cv_deplibs_check_method="file_magic ELF [0-9][0-9]*-bit [LM]SB dynamic lib" + lt_cv_file_magic_test_file=/lib/libc.so + ;; + siemens) + lt_cv_deplibs_check_method=pass_all + ;; + pc) + lt_cv_deplibs_check_method=pass_all + ;; + esac + ;; + +tpf*) + lt_cv_deplibs_check_method=pass_all + ;; +esac + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_deplibs_check_method" >&5 +$as_echo "$lt_cv_deplibs_check_method" >&6; } +file_magic_cmd=$lt_cv_file_magic_cmd +deplibs_check_method=$lt_cv_deplibs_check_method +test -z "$deplibs_check_method" && deplibs_check_method=unknown + + + + + + + + + + + + +if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}ar", so it can be a program name with args. +set dummy ${ac_tool_prefix}ar; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_AR+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$AR"; then + ac_cv_prog_AR="$AR" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_AR="${ac_tool_prefix}ar" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +AR=$ac_cv_prog_AR +if test -n "$AR"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AR" >&5 +$as_echo "$AR" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_AR"; then + ac_ct_AR=$AR + # Extract the first word of "ar", so it can be a program name with args. +set dummy ar; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_ac_ct_AR+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_AR"; then + ac_cv_prog_ac_ct_AR="$ac_ct_AR" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_ac_ct_AR="ar" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_AR=$ac_cv_prog_ac_ct_AR +if test -n "$ac_ct_AR"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_AR" >&5 +$as_echo "$ac_ct_AR" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_AR" = x; then + AR="false" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + AR=$ac_ct_AR + fi +else + AR="$ac_cv_prog_AR" +fi + +test -z "$AR" && AR=ar +test -z "$AR_FLAGS" && AR_FLAGS=cru + + + + + + + + + + + +if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args. +set dummy ${ac_tool_prefix}strip; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_STRIP+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$STRIP"; then + ac_cv_prog_STRIP="$STRIP" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_STRIP="${ac_tool_prefix}strip" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +STRIP=$ac_cv_prog_STRIP +if test -n "$STRIP"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $STRIP" >&5 +$as_echo "$STRIP" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_STRIP"; then + ac_ct_STRIP=$STRIP + # Extract the first word of "strip", so it can be a program name with args. +set dummy strip; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_ac_ct_STRIP+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_STRIP"; then + ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_ac_ct_STRIP="strip" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP +if test -n "$ac_ct_STRIP"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_STRIP" >&5 +$as_echo "$ac_ct_STRIP" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_STRIP" = x; then + STRIP=":" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + STRIP=$ac_ct_STRIP + fi +else + STRIP="$ac_cv_prog_STRIP" +fi + +test -z "$STRIP" && STRIP=: + + + + + + +if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}ranlib", so it can be a program name with args. +set dummy ${ac_tool_prefix}ranlib; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_RANLIB+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$RANLIB"; then + ac_cv_prog_RANLIB="$RANLIB" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_RANLIB="${ac_tool_prefix}ranlib" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +RANLIB=$ac_cv_prog_RANLIB +if test -n "$RANLIB"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $RANLIB" >&5 +$as_echo "$RANLIB" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_RANLIB"; then + ac_ct_RANLIB=$RANLIB + # Extract the first word of "ranlib", so it can be a program name with args. +set dummy ranlib; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_ac_ct_RANLIB+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_RANLIB"; then + ac_cv_prog_ac_ct_RANLIB="$ac_ct_RANLIB" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_ac_ct_RANLIB="ranlib" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_RANLIB=$ac_cv_prog_ac_ct_RANLIB +if test -n "$ac_ct_RANLIB"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_RANLIB" >&5 +$as_echo "$ac_ct_RANLIB" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_RANLIB" = x; then + RANLIB=":" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + RANLIB=$ac_ct_RANLIB + fi +else + RANLIB="$ac_cv_prog_RANLIB" +fi + +test -z "$RANLIB" && RANLIB=: + + + + + + +# Determine commands to create old-style static archives. +old_archive_cmds='$AR $AR_FLAGS $oldlib$oldobjs' +old_postinstall_cmds='chmod 644 $oldlib' +old_postuninstall_cmds= + +if test -n "$RANLIB"; then + case $host_os in + openbsd*) + old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB -t \$oldlib" + ;; + *) + old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB \$oldlib" + ;; + esac + old_archive_cmds="$old_archive_cmds~\$RANLIB \$oldlib" +fi + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +# If no C compiler was specified, use CC. +LTCC=${LTCC-"$CC"} + +# If no C compiler flags were specified, use CFLAGS. +LTCFLAGS=${LTCFLAGS-"$CFLAGS"} + +# Allow CC to be a program name with arguments. +compiler=$CC + + +# Check for command to grab the raw symbol name followed by C symbol from nm. +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking command to parse $NM output from $compiler object" >&5 +$as_echo_n "checking command to parse $NM output from $compiler object... " >&6; } +if test "${lt_cv_sys_global_symbol_pipe+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + +# These are sane defaults that work on at least a few old systems. +# [They come from Ultrix. What could be older than Ultrix?!! ;)] + +# Character class describing NM global symbol codes. +symcode='[BCDEGRST]' + +# Regexp to match symbols that can be accessed directly from C. +sympat='\([_A-Za-z][_A-Za-z0-9]*\)' + +# Define system-specific variables. +case $host_os in +aix*) + symcode='[BCDT]' + ;; +cygwin* | mingw* | pw32* | cegcc*) + symcode='[ABCDGISTW]' + ;; +hpux*) + if test "$host_cpu" = ia64; then + symcode='[ABCDEGRST]' + fi + ;; +irix* | nonstopux*) + symcode='[BCDEGRST]' + ;; +osf*) + symcode='[BCDEGQRST]' + ;; +solaris*) + symcode='[BDRT]' + ;; +sco3.2v5*) + symcode='[DT]' + ;; +sysv4.2uw2*) + symcode='[DT]' + ;; +sysv5* | sco5v6* | unixware* | OpenUNIX*) + symcode='[ABDT]' + ;; +sysv4) + symcode='[DFNSTU]' + ;; +esac + +# If we're using GNU nm, then use its standard symbol codes. +case `$NM -V 2>&1` in +*GNU* | *'with BFD'*) + symcode='[ABCDGIRSTW]' ;; +esac + +# Transform an extracted symbol line into a proper C declaration. +# Some systems (esp. on ia64) link data and code symbols differently, +# so use this general approach. +lt_cv_sys_global_symbol_to_cdecl="sed -n -e 's/^T .* \(.*\)$/extern int \1();/p' -e 's/^$symcode* .* \(.*\)$/extern char \1;/p'" + +# Transform an extracted symbol line into symbol name and symbol address +lt_cv_sys_global_symbol_to_c_name_address="sed -n -e 's/^: \([^ ]*\) $/ {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([^ ]*\) \([^ ]*\)$/ {\"\2\", (void *) \&\2},/p'" +lt_cv_sys_global_symbol_to_c_name_address_lib_prefix="sed -n -e 's/^: \([^ ]*\) $/ {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([^ ]*\) \(lib[^ ]*\)$/ {\"\2\", (void *) \&\2},/p' -e 's/^$symcode* \([^ ]*\) \([^ ]*\)$/ {\"lib\2\", (void *) \&\2},/p'" + +# Handle CRLF in mingw tool chain +opt_cr= +case $build_os in +mingw*) + opt_cr=`$ECHO 'x\{0,1\}' | tr x '\015'` # option cr in regexp + ;; +esac + +# Try without a prefix underscore, then with it. +for ac_symprfx in "" "_"; do + + # Transform symcode, sympat, and symprfx into a raw symbol and a C symbol. + symxfrm="\\1 $ac_symprfx\\2 \\2" + + # Write the raw and C identifiers. + if test "$lt_cv_nm_interface" = "MS dumpbin"; then + # Fake it for dumpbin and say T for any non-static function + # and D for any global variable. + # Also find C++ and __fastcall symbols from MSVC++, + # which start with @ or ?. + lt_cv_sys_global_symbol_pipe="$AWK '"\ +" {last_section=section; section=\$ 3};"\ +" /Section length .*#relocs.*(pick any)/{hide[last_section]=1};"\ +" \$ 0!~/External *\|/{next};"\ +" / 0+ UNDEF /{next}; / UNDEF \([^|]\)*()/{next};"\ +" {if(hide[section]) next};"\ +" {f=0}; \$ 0~/\(\).*\|/{f=1}; {printf f ? \"T \" : \"D \"};"\ +" {split(\$ 0, a, /\||\r/); split(a[2], s)};"\ +" s[1]~/^[@?]/{print s[1], s[1]; next};"\ +" s[1]~prfx {split(s[1],t,\"@\"); print t[1], substr(t[1],length(prfx))}"\ +" ' prfx=^$ac_symprfx" + else + lt_cv_sys_global_symbol_pipe="sed -n -e 's/^.*[ ]\($symcode$symcode*\)[ ][ ]*$ac_symprfx$sympat$opt_cr$/$symxfrm/p'" + fi + + # Check to see that the pipe works correctly. + pipe_works=no + + rm -f conftest* + cat > conftest.$ac_ext <<_LT_EOF +#ifdef __cplusplus +extern "C" { +#endif +char nm_test_var; +void nm_test_func(void); +void nm_test_func(void){} +#ifdef __cplusplus +} +#endif +int main(){nm_test_var='a';nm_test_func();return(0);} +_LT_EOF + + if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + # Now try to grab the symbols. + nlist=conftest.nm + if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$NM conftest.$ac_objext \| $lt_cv_sys_global_symbol_pipe \> $nlist\""; } >&5 + (eval $NM conftest.$ac_objext \| $lt_cv_sys_global_symbol_pipe \> $nlist) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } && test -s "$nlist"; then + # Try sorting and uniquifying the output. + if sort "$nlist" | uniq > "$nlist"T; then + mv -f "$nlist"T "$nlist" + else + rm -f "$nlist"T + fi + + # Make sure that we snagged all the symbols we need. + if $GREP ' nm_test_var$' "$nlist" >/dev/null; then + if $GREP ' nm_test_func$' "$nlist" >/dev/null; then + cat <<_LT_EOF > conftest.$ac_ext +#ifdef __cplusplus +extern "C" { +#endif + +_LT_EOF + # Now generate the symbol file. + eval "$lt_cv_sys_global_symbol_to_cdecl"' < "$nlist" | $GREP -v main >> conftest.$ac_ext' + + cat <<_LT_EOF >> conftest.$ac_ext + +/* The mapping between symbol names and symbols. */ +const struct { + const char *name; + void *address; +} +lt__PROGRAM__LTX_preloaded_symbols[] = +{ + { "@PROGRAM@", (void *) 0 }, +_LT_EOF + $SED "s/^$symcode$symcode* \(.*\) \(.*\)$/ {\"\2\", (void *) \&\2},/" < "$nlist" | $GREP -v main >> conftest.$ac_ext + cat <<\_LT_EOF >> conftest.$ac_ext + {0, (void *) 0} +}; + +/* This works around a problem in FreeBSD linker */ +#ifdef FREEBSD_WORKAROUND +static const void *lt_preloaded_setup() { + return lt__PROGRAM__LTX_preloaded_symbols; +} +#endif + +#ifdef __cplusplus +} +#endif +_LT_EOF + # Now try linking the two files. + mv conftest.$ac_objext conftstm.$ac_objext + lt_save_LIBS="$LIBS" + lt_save_CFLAGS="$CFLAGS" + LIBS="conftstm.$ac_objext" + CFLAGS="$CFLAGS$lt_prog_compiler_no_builtin_flag" + if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5 + (eval $ac_link) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } && test -s conftest${ac_exeext}; then + pipe_works=yes + fi + LIBS="$lt_save_LIBS" + CFLAGS="$lt_save_CFLAGS" + else + echo "cannot find nm_test_func in $nlist" >&5 + fi + else + echo "cannot find nm_test_var in $nlist" >&5 + fi + else + echo "cannot run $lt_cv_sys_global_symbol_pipe" >&5 + fi + else + echo "$progname: failed program was:" >&5 + cat conftest.$ac_ext >&5 + fi + rm -rf conftest* conftst* + + # Do not use the global_symbol_pipe unless it works. + if test "$pipe_works" = yes; then + break + else + lt_cv_sys_global_symbol_pipe= + fi +done + +fi + +if test -z "$lt_cv_sys_global_symbol_pipe"; then + lt_cv_sys_global_symbol_to_cdecl= +fi +if test -z "$lt_cv_sys_global_symbol_pipe$lt_cv_sys_global_symbol_to_cdecl"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: failed" >&5 +$as_echo "failed" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: ok" >&5 +$as_echo "ok" >&6; } +fi + + + + + + + + + + + + + + + + + + + + + + + +# Check whether --enable-libtool-lock was given. +if test "${enable_libtool_lock+set}" = set; then : + enableval=$enable_libtool_lock; +fi + +test "x$enable_libtool_lock" != xno && enable_libtool_lock=yes + +# Some flags need to be propagated to the compiler or linker for good +# libtool support. +case $host in +ia64-*-hpux*) + # Find out which ABI we are using. + echo 'int i;' > conftest.$ac_ext + if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + case `/usr/bin/file conftest.$ac_objext` in + *ELF-32*) + HPUX_IA64_MODE="32" + ;; + *ELF-64*) + HPUX_IA64_MODE="64" + ;; + esac + fi + rm -rf conftest* + ;; +*-*-irix6*) + # Find out which ABI we are using. + echo '#line 6257 "configure"' > conftest.$ac_ext + if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + if test "$lt_cv_prog_gnu_ld" = yes; then + case `/usr/bin/file conftest.$ac_objext` in + *32-bit*) + LD="${LD-ld} -melf32bsmip" + ;; + *N32*) + LD="${LD-ld} -melf32bmipn32" + ;; + *64-bit*) + LD="${LD-ld} -melf64bmip" + ;; + esac + else + case `/usr/bin/file conftest.$ac_objext` in + *32-bit*) + LD="${LD-ld} -32" + ;; + *N32*) + LD="${LD-ld} -n32" + ;; + *64-bit*) + LD="${LD-ld} -64" + ;; + esac + fi + fi + rm -rf conftest* + ;; + +x86_64-*kfreebsd*-gnu|x86_64-*linux*|ppc*-*linux*|powerpc*-*linux*| \ +s390*-*linux*|s390*-*tpf*|sparc*-*linux*) + # Find out which ABI we are using. + echo 'int i;' > conftest.$ac_ext + if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + case `/usr/bin/file conftest.o` in + *32-bit*) + case $host in + x86_64-*kfreebsd*-gnu) + LD="${LD-ld} -m elf_i386_fbsd" + ;; + x86_64-*linux*) + LD="${LD-ld} -m elf_i386" + ;; + ppc64-*linux*|powerpc64-*linux*) + LD="${LD-ld} -m elf32ppclinux" + ;; + s390x-*linux*) + LD="${LD-ld} -m elf_s390" + ;; + sparc64-*linux*) + LD="${LD-ld} -m elf32_sparc" + ;; + esac + ;; + *64-bit*) + case $host in + x86_64-*kfreebsd*-gnu) + LD="${LD-ld} -m elf_x86_64_fbsd" + ;; + x86_64-*linux*) + LD="${LD-ld} -m elf_x86_64" + ;; + ppc*-*linux*|powerpc*-*linux*) + LD="${LD-ld} -m elf64ppc" + ;; + s390*-*linux*|s390*-*tpf*) + LD="${LD-ld} -m elf64_s390" + ;; + sparc*-*linux*) + LD="${LD-ld} -m elf64_sparc" + ;; + esac + ;; + esac + fi + rm -rf conftest* + ;; + +*-*-sco3.2v5*) + # On SCO OpenServer 5, we need -belf to get full-featured binaries. + SAVE_CFLAGS="$CFLAGS" + CFLAGS="$CFLAGS -belf" + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the C compiler needs -belf" >&5 +$as_echo_n "checking whether the C compiler needs -belf... " >&6; } +if test "${lt_cv_cc_needs_belf+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + lt_cv_cc_needs_belf=yes +else + lt_cv_cc_needs_belf=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_cc_needs_belf" >&5 +$as_echo "$lt_cv_cc_needs_belf" >&6; } + if test x"$lt_cv_cc_needs_belf" != x"yes"; then + # this is probably gcc 2.8.0, egcs 1.0 or newer; no need for -belf + CFLAGS="$SAVE_CFLAGS" + fi + ;; +sparc*-*solaris*) + # Find out which ABI we are using. + echo 'int i;' > conftest.$ac_ext + if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + case `/usr/bin/file conftest.o` in + *64-bit*) + case $lt_cv_prog_gnu_ld in + yes*) LD="${LD-ld} -m elf64_sparc" ;; + *) + if ${LD-ld} -64 -r -o conftest2.o conftest.o >/dev/null 2>&1; then + LD="${LD-ld} -64" + fi + ;; + esac + ;; + esac + fi + rm -rf conftest* + ;; +esac + +need_locks="$enable_libtool_lock" + + + case $host_os in + rhapsody* | darwin*) + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}dsymutil", so it can be a program name with args. +set dummy ${ac_tool_prefix}dsymutil; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_DSYMUTIL+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$DSYMUTIL"; then + ac_cv_prog_DSYMUTIL="$DSYMUTIL" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_DSYMUTIL="${ac_tool_prefix}dsymutil" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +DSYMUTIL=$ac_cv_prog_DSYMUTIL +if test -n "$DSYMUTIL"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DSYMUTIL" >&5 +$as_echo "$DSYMUTIL" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_DSYMUTIL"; then + ac_ct_DSYMUTIL=$DSYMUTIL + # Extract the first word of "dsymutil", so it can be a program name with args. +set dummy dsymutil; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_ac_ct_DSYMUTIL+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_DSYMUTIL"; then + ac_cv_prog_ac_ct_DSYMUTIL="$ac_ct_DSYMUTIL" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_ac_ct_DSYMUTIL="dsymutil" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_DSYMUTIL=$ac_cv_prog_ac_ct_DSYMUTIL +if test -n "$ac_ct_DSYMUTIL"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DSYMUTIL" >&5 +$as_echo "$ac_ct_DSYMUTIL" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_DSYMUTIL" = x; then + DSYMUTIL=":" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + DSYMUTIL=$ac_ct_DSYMUTIL + fi +else + DSYMUTIL="$ac_cv_prog_DSYMUTIL" +fi + + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}nmedit", so it can be a program name with args. +set dummy ${ac_tool_prefix}nmedit; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_NMEDIT+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$NMEDIT"; then + ac_cv_prog_NMEDIT="$NMEDIT" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_NMEDIT="${ac_tool_prefix}nmedit" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +NMEDIT=$ac_cv_prog_NMEDIT +if test -n "$NMEDIT"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $NMEDIT" >&5 +$as_echo "$NMEDIT" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_NMEDIT"; then + ac_ct_NMEDIT=$NMEDIT + # Extract the first word of "nmedit", so it can be a program name with args. +set dummy nmedit; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_ac_ct_NMEDIT+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_NMEDIT"; then + ac_cv_prog_ac_ct_NMEDIT="$ac_ct_NMEDIT" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_ac_ct_NMEDIT="nmedit" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_NMEDIT=$ac_cv_prog_ac_ct_NMEDIT +if test -n "$ac_ct_NMEDIT"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_NMEDIT" >&5 +$as_echo "$ac_ct_NMEDIT" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_NMEDIT" = x; then + NMEDIT=":" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + NMEDIT=$ac_ct_NMEDIT + fi +else + NMEDIT="$ac_cv_prog_NMEDIT" +fi + + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}lipo", so it can be a program name with args. +set dummy ${ac_tool_prefix}lipo; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_LIPO+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$LIPO"; then + ac_cv_prog_LIPO="$LIPO" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_LIPO="${ac_tool_prefix}lipo" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +LIPO=$ac_cv_prog_LIPO +if test -n "$LIPO"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LIPO" >&5 +$as_echo "$LIPO" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_LIPO"; then + ac_ct_LIPO=$LIPO + # Extract the first word of "lipo", so it can be a program name with args. +set dummy lipo; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_ac_ct_LIPO+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_LIPO"; then + ac_cv_prog_ac_ct_LIPO="$ac_ct_LIPO" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_ac_ct_LIPO="lipo" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_LIPO=$ac_cv_prog_ac_ct_LIPO +if test -n "$ac_ct_LIPO"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_LIPO" >&5 +$as_echo "$ac_ct_LIPO" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_LIPO" = x; then + LIPO=":" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + LIPO=$ac_ct_LIPO + fi +else + LIPO="$ac_cv_prog_LIPO" +fi + + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}otool", so it can be a program name with args. +set dummy ${ac_tool_prefix}otool; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_OTOOL+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$OTOOL"; then + ac_cv_prog_OTOOL="$OTOOL" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_OTOOL="${ac_tool_prefix}otool" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +OTOOL=$ac_cv_prog_OTOOL +if test -n "$OTOOL"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OTOOL" >&5 +$as_echo "$OTOOL" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_OTOOL"; then + ac_ct_OTOOL=$OTOOL + # Extract the first word of "otool", so it can be a program name with args. +set dummy otool; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_ac_ct_OTOOL+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_OTOOL"; then + ac_cv_prog_ac_ct_OTOOL="$ac_ct_OTOOL" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_ac_ct_OTOOL="otool" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_OTOOL=$ac_cv_prog_ac_ct_OTOOL +if test -n "$ac_ct_OTOOL"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OTOOL" >&5 +$as_echo "$ac_ct_OTOOL" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_OTOOL" = x; then + OTOOL=":" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + OTOOL=$ac_ct_OTOOL + fi +else + OTOOL="$ac_cv_prog_OTOOL" +fi + + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}otool64", so it can be a program name with args. +set dummy ${ac_tool_prefix}otool64; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_OTOOL64+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$OTOOL64"; then + ac_cv_prog_OTOOL64="$OTOOL64" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_OTOOL64="${ac_tool_prefix}otool64" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +OTOOL64=$ac_cv_prog_OTOOL64 +if test -n "$OTOOL64"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OTOOL64" >&5 +$as_echo "$OTOOL64" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_OTOOL64"; then + ac_ct_OTOOL64=$OTOOL64 + # Extract the first word of "otool64", so it can be a program name with args. +set dummy otool64; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_ac_ct_OTOOL64+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_OTOOL64"; then + ac_cv_prog_ac_ct_OTOOL64="$ac_ct_OTOOL64" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_ac_ct_OTOOL64="otool64" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_OTOOL64=$ac_cv_prog_ac_ct_OTOOL64 +if test -n "$ac_ct_OTOOL64"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OTOOL64" >&5 +$as_echo "$ac_ct_OTOOL64" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_OTOOL64" = x; then + OTOOL64=":" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + OTOOL64=$ac_ct_OTOOL64 + fi +else + OTOOL64="$ac_cv_prog_OTOOL64" +fi + + + + + + + + + + + + + + + + + + + + + + + + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -single_module linker flag" >&5 +$as_echo_n "checking for -single_module linker flag... " >&6; } +if test "${lt_cv_apple_cc_single_mod+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_apple_cc_single_mod=no + if test -z "${LT_MULTI_MODULE}"; then + # By default we will add the -single_module flag. You can override + # by either setting the environment variable LT_MULTI_MODULE + # non-empty at configure time, or by adding -multi_module to the + # link flags. + rm -rf libconftest.dylib* + echo "int foo(void){return 1;}" > conftest.c + echo "$LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \ +-dynamiclib -Wl,-single_module conftest.c" >&5 + $LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \ + -dynamiclib -Wl,-single_module conftest.c 2>conftest.err + _lt_result=$? + if test -f libconftest.dylib && test ! -s conftest.err && test $_lt_result = 0; then + lt_cv_apple_cc_single_mod=yes + else + cat conftest.err >&5 + fi + rm -rf libconftest.dylib* + rm -f conftest.* + fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_apple_cc_single_mod" >&5 +$as_echo "$lt_cv_apple_cc_single_mod" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -exported_symbols_list linker flag" >&5 +$as_echo_n "checking for -exported_symbols_list linker flag... " >&6; } +if test "${lt_cv_ld_exported_symbols_list+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_ld_exported_symbols_list=no + save_LDFLAGS=$LDFLAGS + echo "_main" > conftest.sym + LDFLAGS="$LDFLAGS -Wl,-exported_symbols_list,conftest.sym" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + lt_cv_ld_exported_symbols_list=yes +else + lt_cv_ld_exported_symbols_list=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + LDFLAGS="$save_LDFLAGS" + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ld_exported_symbols_list" >&5 +$as_echo "$lt_cv_ld_exported_symbols_list" >&6; } + case $host_os in + rhapsody* | darwin1.[012]) + _lt_dar_allow_undefined='${wl}-undefined ${wl}suppress' ;; + darwin1.*) + _lt_dar_allow_undefined='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' ;; + darwin*) # darwin 5.x on + # if running on 10.5 or later, the deployment target defaults + # to the OS version, if on x86, and 10.4, the deployment + # target defaults to 10.4. Don't you love it? + case ${MACOSX_DEPLOYMENT_TARGET-10.0},$host in + 10.0,*86*-darwin8*|10.0,*-darwin[91]*) + _lt_dar_allow_undefined='${wl}-undefined ${wl}dynamic_lookup' ;; + 10.[012]*) + _lt_dar_allow_undefined='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' ;; + 10.*) + _lt_dar_allow_undefined='${wl}-undefined ${wl}dynamic_lookup' ;; + esac + ;; + esac + if test "$lt_cv_apple_cc_single_mod" = "yes"; then + _lt_dar_single_mod='$single_module' + fi + if test "$lt_cv_ld_exported_symbols_list" = "yes"; then + _lt_dar_export_syms=' ${wl}-exported_symbols_list,$output_objdir/${libname}-symbols.expsym' + else + _lt_dar_export_syms='~$NMEDIT -s $output_objdir/${libname}-symbols.expsym ${lib}' + fi + if test "$DSYMUTIL" != ":"; then + _lt_dsymutil='~$DSYMUTIL $lib || :' + else + _lt_dsymutil= + fi + ;; + esac + +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to run the C preprocessor" >&5 +$as_echo_n "checking how to run the C preprocessor... " >&6; } +# On Suns, sometimes $CPP names a directory. +if test -n "$CPP" && test -d "$CPP"; then + CPP= +fi +if test -z "$CPP"; then + if test "${ac_cv_prog_CPP+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + # Double quotes because CPP needs to be expanded + for CPP in "$CC -E" "$CC -E -traditional-cpp" "/lib/cpp" + do + ac_preproc_ok=false +for ac_c_preproc_warn_flag in '' yes +do + # Use a header file that comes with gcc, so configuring glibc + # with a fresh cross-compiler works. + # Prefer to if __STDC__ is defined, since + # exists even on freestanding compilers. + # On the NeXT, cc -E runs the code through the compiler's parser, + # not just through cpp. "Syntax error" is here to catch this case. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#ifdef __STDC__ +# include +#else +# include +#endif + Syntax error +_ACEOF +if ac_fn_c_try_cpp "$LINENO"; then : + +else + # Broken: fails on valid input. +continue +fi +rm -f conftest.err conftest.$ac_ext + + # OK, works on sane cases. Now check whether nonexistent headers + # can be detected and how. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +_ACEOF +if ac_fn_c_try_cpp "$LINENO"; then : + # Broken: success on invalid input. +continue +else + # Passes both tests. +ac_preproc_ok=: +break +fi +rm -f conftest.err conftest.$ac_ext + +done +# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. +rm -f conftest.err conftest.$ac_ext +if $ac_preproc_ok; then : + break +fi + + done + ac_cv_prog_CPP=$CPP + +fi + CPP=$ac_cv_prog_CPP +else + ac_cv_prog_CPP=$CPP +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $CPP" >&5 +$as_echo "$CPP" >&6; } +ac_preproc_ok=false +for ac_c_preproc_warn_flag in '' yes +do + # Use a header file that comes with gcc, so configuring glibc + # with a fresh cross-compiler works. + # Prefer to if __STDC__ is defined, since + # exists even on freestanding compilers. + # On the NeXT, cc -E runs the code through the compiler's parser, + # not just through cpp. "Syntax error" is here to catch this case. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#ifdef __STDC__ +# include +#else +# include +#endif + Syntax error +_ACEOF +if ac_fn_c_try_cpp "$LINENO"; then : + +else + # Broken: fails on valid input. +continue +fi +rm -f conftest.err conftest.$ac_ext + + # OK, works on sane cases. Now check whether nonexistent headers + # can be detected and how. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +_ACEOF +if ac_fn_c_try_cpp "$LINENO"; then : + # Broken: success on invalid input. +continue +else + # Passes both tests. +ac_preproc_ok=: +break +fi +rm -f conftest.err conftest.$ac_ext + +done +# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. +rm -f conftest.err conftest.$ac_ext +if $ac_preproc_ok; then : + +else + { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error "C preprocessor \"$CPP\" fails sanity check +See \`config.log' for more details." "$LINENO" 5; } +fi + +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for ANSI C header files" >&5 +$as_echo_n "checking for ANSI C header files... " >&6; } +if test "${ac_cv_header_stdc+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +#include +#include +#include + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_header_stdc=yes +else + ac_cv_header_stdc=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + +if test $ac_cv_header_stdc = yes; then + # SunOS 4.x string.h does not declare mem*, contrary to ANSI. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include + +_ACEOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP "memchr" >/dev/null 2>&1; then : + +else + ac_cv_header_stdc=no +fi +rm -f conftest* + +fi + +if test $ac_cv_header_stdc = yes; then + # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include + +_ACEOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP "free" >/dev/null 2>&1; then : + +else + ac_cv_header_stdc=no +fi +rm -f conftest* + +fi + +if test $ac_cv_header_stdc = yes; then + # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi. + if test "$cross_compiling" = yes; then : + : +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +#include +#if ((' ' & 0x0FF) == 0x020) +# define ISLOWER(c) ('a' <= (c) && (c) <= 'z') +# define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c)) +#else +# define ISLOWER(c) \ + (('a' <= (c) && (c) <= 'i') \ + || ('j' <= (c) && (c) <= 'r') \ + || ('s' <= (c) && (c) <= 'z')) +# define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c)) +#endif + +#define XOR(e, f) (((e) && !(f)) || (!(e) && (f))) +int +main () +{ + int i; + for (i = 0; i < 256; i++) + if (XOR (islower (i), ISLOWER (i)) + || toupper (i) != TOUPPER (i)) + return 2; + return 0; +} +_ACEOF +if ac_fn_c_try_run "$LINENO"; then : + +else + ac_cv_header_stdc=no +fi +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest.beam conftest.$ac_ext +fi + +fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_stdc" >&5 +$as_echo "$ac_cv_header_stdc" >&6; } +if test $ac_cv_header_stdc = yes; then + +$as_echo "#define STDC_HEADERS 1" >>confdefs.h + +fi + +# On IRIX 5.3, sys/types and inttypes.h are conflicting. +for ac_header in sys/types.h sys/stat.h stdlib.h string.h memory.h strings.h \ + inttypes.h stdint.h unistd.h +do : + as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` +ac_fn_c_check_header_compile "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default +" +eval as_val=\$$as_ac_Header + if test "x$as_val" = x""yes; then : + cat >>confdefs.h <<_ACEOF +#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 +_ACEOF + +fi + +done + + +for ac_header in dlfcn.h +do : + ac_fn_c_check_header_compile "$LINENO" "dlfcn.h" "ac_cv_header_dlfcn_h" "$ac_includes_default +" +if test "x$ac_cv_header_dlfcn_h" = x""yes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE_DLFCN_H 1 +_ACEOF + +fi + +done + + + +# Set options + + + + enable_dlopen=no + + + enable_win32_dll=no + + + # Check whether --enable-shared was given. +if test "${enable_shared+set}" = set; then : + enableval=$enable_shared; p=${PACKAGE-default} + case $enableval in + yes) enable_shared=yes ;; + no) enable_shared=no ;; + *) + enable_shared=no + # Look at the argument we got. We use all the common list separators. + lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," + for pkg in $enableval; do + IFS="$lt_save_ifs" + if test "X$pkg" = "X$p"; then + enable_shared=yes + fi + done + IFS="$lt_save_ifs" + ;; + esac +else + enable_shared=yes +fi + + + + + + + + + + # Check whether --enable-static was given. +if test "${enable_static+set}" = set; then : + enableval=$enable_static; p=${PACKAGE-default} + case $enableval in + yes) enable_static=yes ;; + no) enable_static=no ;; + *) + enable_static=no + # Look at the argument we got. We use all the common list separators. + lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," + for pkg in $enableval; do + IFS="$lt_save_ifs" + if test "X$pkg" = "X$p"; then + enable_static=yes + fi + done + IFS="$lt_save_ifs" + ;; + esac +else + enable_static=yes +fi + + + + + + + + + + +# Check whether --with-pic was given. +if test "${with_pic+set}" = set; then : + withval=$with_pic; pic_mode="$withval" +else + pic_mode=default +fi + + +test -z "$pic_mode" && pic_mode=default + + + + + + + + # Check whether --enable-fast-install was given. +if test "${enable_fast_install+set}" = set; then : + enableval=$enable_fast_install; p=${PACKAGE-default} + case $enableval in + yes) enable_fast_install=yes ;; + no) enable_fast_install=no ;; + *) + enable_fast_install=no + # Look at the argument we got. We use all the common list separators. + lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," + for pkg in $enableval; do + IFS="$lt_save_ifs" + if test "X$pkg" = "X$p"; then + enable_fast_install=yes + fi + done + IFS="$lt_save_ifs" + ;; + esac +else + enable_fast_install=yes +fi + + + + + + + + + + + +# This can be used to rebuild libtool when needed +LIBTOOL_DEPS="$ltmain" + +# Always use our own libtool. +LIBTOOL='$(SHELL) $(top_builddir)/libtool' + + + + + + + + + + + + + + + + + + + + + + + + + +test -z "$LN_S" && LN_S="ln -s" + + + + + + + + + + + + + + +if test -n "${ZSH_VERSION+set}" ; then + setopt NO_GLOB_SUBST +fi + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for objdir" >&5 +$as_echo_n "checking for objdir... " >&6; } +if test "${lt_cv_objdir+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + rm -f .libs 2>/dev/null +mkdir .libs 2>/dev/null +if test -d .libs; then + lt_cv_objdir=.libs +else + # MS-DOS does not allow filenames that begin with a dot. + lt_cv_objdir=_libs +fi +rmdir .libs 2>/dev/null +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_objdir" >&5 +$as_echo "$lt_cv_objdir" >&6; } +objdir=$lt_cv_objdir + + + + + +cat >>confdefs.h <<_ACEOF +#define LT_OBJDIR "$lt_cv_objdir/" +_ACEOF + + + + + + + + + + + + + + + + + +case $host_os in +aix3*) + # AIX sometimes has problems with the GCC collect2 program. For some + # reason, if we set the COLLECT_NAMES environment variable, the problems + # vanish in a puff of smoke. + if test "X${COLLECT_NAMES+set}" != Xset; then + COLLECT_NAMES= + export COLLECT_NAMES + fi + ;; +esac + +# Sed substitution that helps us do robust quoting. It backslashifies +# metacharacters that are still active within double-quoted strings. +sed_quote_subst='s/\(["`$\\]\)/\\\1/g' + +# Same as above, but do not quote variable references. +double_quote_subst='s/\(["`\\]\)/\\\1/g' + +# Sed substitution to delay expansion of an escaped shell variable in a +# double_quote_subst'ed string. +delay_variable_subst='s/\\\\\\\\\\\$/\\\\\\$/g' + +# Sed substitution to delay expansion of an escaped single quote. +delay_single_quote_subst='s/'\''/'\'\\\\\\\'\''/g' + +# Sed substitution to avoid accidental globbing in evaled expressions +no_glob_subst='s/\*/\\\*/g' + +# Global variables: +ofile=libtool +can_build_shared=yes + +# All known linkers require a `.a' archive for static linking (except MSVC, +# which needs '.lib'). +libext=a + +with_gnu_ld="$lt_cv_prog_gnu_ld" + +old_CC="$CC" +old_CFLAGS="$CFLAGS" + +# Set sane defaults for various variables +test -z "$CC" && CC=cc +test -z "$LTCC" && LTCC=$CC +test -z "$LTCFLAGS" && LTCFLAGS=$CFLAGS +test -z "$LD" && LD=ld +test -z "$ac_objext" && ac_objext=o + +for cc_temp in $compiler""; do + case $cc_temp in + compile | *[\\/]compile | ccache | *[\\/]ccache ) ;; + distcc | *[\\/]distcc | purify | *[\\/]purify ) ;; + \-*) ;; + *) break;; + esac +done +cc_basename=`$ECHO "X$cc_temp" | $Xsed -e 's%.*/%%' -e "s%^$host_alias-%%"` + + +# Only perform the check for file, if the check method requires it +test -z "$MAGIC_CMD" && MAGIC_CMD=file +case $deplibs_check_method in +file_magic*) + if test "$file_magic_cmd" = '$MAGIC_CMD'; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ${ac_tool_prefix}file" >&5 +$as_echo_n "checking for ${ac_tool_prefix}file... " >&6; } +if test "${lt_cv_path_MAGIC_CMD+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + case $MAGIC_CMD in +[\\/*] | ?:[\\/]*) + lt_cv_path_MAGIC_CMD="$MAGIC_CMD" # Let the user override the test with a path. + ;; +*) + lt_save_MAGIC_CMD="$MAGIC_CMD" + lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR + ac_dummy="/usr/bin$PATH_SEPARATOR$PATH" + for ac_dir in $ac_dummy; do + IFS="$lt_save_ifs" + test -z "$ac_dir" && ac_dir=. + if test -f $ac_dir/${ac_tool_prefix}file; then + lt_cv_path_MAGIC_CMD="$ac_dir/${ac_tool_prefix}file" + if test -n "$file_magic_test_file"; then + case $deplibs_check_method in + "file_magic "*) + file_magic_regex=`expr "$deplibs_check_method" : "file_magic \(.*\)"` + MAGIC_CMD="$lt_cv_path_MAGIC_CMD" + if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null | + $EGREP "$file_magic_regex" > /dev/null; then + : + else + cat <<_LT_EOF 1>&2 + +*** Warning: the command libtool uses to detect shared libraries, +*** $file_magic_cmd, produces output that libtool cannot recognize. +*** The result is that libtool may fail to recognize shared libraries +*** as such. This will affect the creation of libtool libraries that +*** depend on shared libraries, but programs linked with such libtool +*** libraries will work regardless of this problem. Nevertheless, you +*** may want to report the problem to your system manager and/or to +*** bug-libtool at gnu.org + +_LT_EOF + fi ;; + esac + fi + break + fi + done + IFS="$lt_save_ifs" + MAGIC_CMD="$lt_save_MAGIC_CMD" + ;; +esac +fi + +MAGIC_CMD="$lt_cv_path_MAGIC_CMD" +if test -n "$MAGIC_CMD"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MAGIC_CMD" >&5 +$as_echo "$MAGIC_CMD" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + + + +if test -z "$lt_cv_path_MAGIC_CMD"; then + if test -n "$ac_tool_prefix"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for file" >&5 +$as_echo_n "checking for file... " >&6; } +if test "${lt_cv_path_MAGIC_CMD+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + case $MAGIC_CMD in +[\\/*] | ?:[\\/]*) + lt_cv_path_MAGIC_CMD="$MAGIC_CMD" # Let the user override the test with a path. + ;; +*) + lt_save_MAGIC_CMD="$MAGIC_CMD" + lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR + ac_dummy="/usr/bin$PATH_SEPARATOR$PATH" + for ac_dir in $ac_dummy; do + IFS="$lt_save_ifs" + test -z "$ac_dir" && ac_dir=. + if test -f $ac_dir/file; then + lt_cv_path_MAGIC_CMD="$ac_dir/file" + if test -n "$file_magic_test_file"; then + case $deplibs_check_method in + "file_magic "*) + file_magic_regex=`expr "$deplibs_check_method" : "file_magic \(.*\)"` + MAGIC_CMD="$lt_cv_path_MAGIC_CMD" + if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null | + $EGREP "$file_magic_regex" > /dev/null; then + : + else + cat <<_LT_EOF 1>&2 + +*** Warning: the command libtool uses to detect shared libraries, +*** $file_magic_cmd, produces output that libtool cannot recognize. +*** The result is that libtool may fail to recognize shared libraries +*** as such. This will affect the creation of libtool libraries that +*** depend on shared libraries, but programs linked with such libtool +*** libraries will work regardless of this problem. Nevertheless, you +*** may want to report the problem to your system manager and/or to +*** bug-libtool at gnu.org + +_LT_EOF + fi ;; + esac + fi + break + fi + done + IFS="$lt_save_ifs" + MAGIC_CMD="$lt_save_MAGIC_CMD" + ;; +esac +fi + +MAGIC_CMD="$lt_cv_path_MAGIC_CMD" +if test -n "$MAGIC_CMD"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MAGIC_CMD" >&5 +$as_echo "$MAGIC_CMD" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + else + MAGIC_CMD=: + fi +fi + + fi + ;; +esac + +# Use C for the default configuration in the libtool script + +lt_save_CC="$CC" +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + + +# Source file extension for C test sources. +ac_ext=c + +# Object file extension for compiled C test sources. +objext=o +objext=$objext + +# Code to be used in simple compile tests +lt_simple_compile_test_code="int some_variable = 0;" + +# Code to be used in simple link tests +lt_simple_link_test_code='int main(){return(0);}' + + + + + + + +# If no C compiler was specified, use CC. +LTCC=${LTCC-"$CC"} + +# If no C compiler flags were specified, use CFLAGS. +LTCFLAGS=${LTCFLAGS-"$CFLAGS"} + +# Allow CC to be a program name with arguments. +compiler=$CC + +# Save the default compiler, since it gets overwritten when the other +# tags are being tested, and _LT_TAGVAR(compiler, []) is a NOP. +compiler_DEFAULT=$CC + +# save warnings/boilerplate of simple test code +ac_outfile=conftest.$ac_objext +echo "$lt_simple_compile_test_code" >conftest.$ac_ext +eval "$ac_compile" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err +_lt_compiler_boilerplate=`cat conftest.err` +$RM conftest* + +ac_outfile=conftest.$ac_objext +echo "$lt_simple_link_test_code" >conftest.$ac_ext +eval "$ac_link" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err +_lt_linker_boilerplate=`cat conftest.err` +$RM -r conftest* + + +## CAVEAT EMPTOR: +## There is no encapsulation within the following macros, do not change +## the running order or otherwise move them around unless you know exactly +## what you are doing... +if test -n "$compiler"; then + +lt_prog_compiler_no_builtin_flag= + +if test "$GCC" = yes; then + lt_prog_compiler_no_builtin_flag=' -fno-builtin' + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -fno-rtti -fno-exceptions" >&5 +$as_echo_n "checking if $compiler supports -fno-rtti -fno-exceptions... " >&6; } +if test "${lt_cv_prog_compiler_rtti_exceptions+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_prog_compiler_rtti_exceptions=no + ac_outfile=conftest.$ac_objext + echo "$lt_simple_compile_test_code" > conftest.$ac_ext + lt_compiler_flag="-fno-rtti -fno-exceptions" + # Insert the option either (1) after the last *FLAGS variable, or + # (2) before a word containing "conftest.", or (3) at the end. + # Note that $ac_compile itself does not contain backslashes and begins + # with a dollar sign (not a hyphen), so the echo should work correctly. + # The option is referenced via a variable to avoid confusing sed. + lt_compile=`echo "$ac_compile" | $SED \ + -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ + -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ + -e 's:$: $lt_compiler_flag:'` + (eval echo "\"\$as_me:7787: $lt_compile\"" >&5) + (eval "$lt_compile" 2>conftest.err) + ac_status=$? + cat conftest.err >&5 + echo "$as_me:7791: \$? = $ac_status" >&5 + if (exit $ac_status) && test -s "$ac_outfile"; then + # The compiler can only warn and ignore the option if not recognized + # So say no if there are warnings other than the usual output. + $ECHO "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' >conftest.exp + $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 + if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then + lt_cv_prog_compiler_rtti_exceptions=yes + fi + fi + $RM conftest* + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_rtti_exceptions" >&5 +$as_echo "$lt_cv_prog_compiler_rtti_exceptions" >&6; } + +if test x"$lt_cv_prog_compiler_rtti_exceptions" = xyes; then + lt_prog_compiler_no_builtin_flag="$lt_prog_compiler_no_builtin_flag -fno-rtti -fno-exceptions" +else + : +fi + +fi + + + + + + + lt_prog_compiler_wl= +lt_prog_compiler_pic= +lt_prog_compiler_static= + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $compiler option to produce PIC" >&5 +$as_echo_n "checking for $compiler option to produce PIC... " >&6; } + + if test "$GCC" = yes; then + lt_prog_compiler_wl='-Wl,' + lt_prog_compiler_static='-static' + + case $host_os in + aix*) + # All AIX code is PIC. + if test "$host_cpu" = ia64; then + # AIX 5 now supports IA64 processor + lt_prog_compiler_static='-Bstatic' + fi + ;; + + amigaos*) + case $host_cpu in + powerpc) + # see comment about AmigaOS4 .so support + lt_prog_compiler_pic='-fPIC' + ;; + m68k) + # FIXME: we need at least 68020 code to build shared libraries, but + # adding the `-m68020' flag to GCC prevents building anything better, + # like `-m68040'. + lt_prog_compiler_pic='-m68020 -resident32 -malways-restore-a4' + ;; + esac + ;; + + beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) + # PIC is the default for these OSes. + ;; + + mingw* | cygwin* | pw32* | os2* | cegcc*) + # This hack is so that the source file can tell whether it is being + # built for inclusion in a dll (and should export symbols for example). + # Although the cygwin gcc ignores -fPIC, still need this for old-style + # (--disable-auto-import) libraries + lt_prog_compiler_pic='-DDLL_EXPORT' + ;; + + darwin* | rhapsody*) + # PIC is the default on this platform + # Common symbols not allowed in MH_DYLIB files + lt_prog_compiler_pic='-fno-common' + ;; + + hpux*) + # PIC is the default for 64-bit PA HP-UX, but not for 32-bit + # PA HP-UX. On IA64 HP-UX, PIC is the default but the pic flag + # sets the default TLS model and affects inlining. + case $host_cpu in + hppa*64*) + # +Z the default + ;; + *) + lt_prog_compiler_pic='-fPIC' + ;; + esac + ;; + + interix[3-9]*) + # Interix 3.x gcc -fpic/-fPIC options generate broken code. + # Instead, we relocate shared libraries at runtime. + ;; + + msdosdjgpp*) + # Just because we use GCC doesn't mean we suddenly get shared libraries + # on systems that don't support them. + lt_prog_compiler_can_build_shared=no + enable_shared=no + ;; + + *nto* | *qnx*) + # QNX uses GNU C++, but need to define -shared option too, otherwise + # it will coredump. + lt_prog_compiler_pic='-fPIC -shared' + ;; + + sysv4*MP*) + if test -d /usr/nec; then + lt_prog_compiler_pic=-Kconform_pic + fi + ;; + + *) + lt_prog_compiler_pic='-fPIC' + ;; + esac + else + # PORTME Check for flag to pass linker flags through the system compiler. + case $host_os in + aix*) + lt_prog_compiler_wl='-Wl,' + if test "$host_cpu" = ia64; then + # AIX 5 now supports IA64 processor + lt_prog_compiler_static='-Bstatic' + else + lt_prog_compiler_static='-bnso -bI:/lib/syscalls.exp' + fi + ;; + + mingw* | cygwin* | pw32* | os2* | cegcc*) + # This hack is so that the source file can tell whether it is being + # built for inclusion in a dll (and should export symbols for example). + lt_prog_compiler_pic='-DDLL_EXPORT' + ;; + + hpux9* | hpux10* | hpux11*) + lt_prog_compiler_wl='-Wl,' + # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but + # not for PA HP-UX. + case $host_cpu in + hppa*64*|ia64*) + # +Z the default + ;; + *) + lt_prog_compiler_pic='+Z' + ;; + esac + # Is there a better lt_prog_compiler_static that works with the bundled CC? + lt_prog_compiler_static='${wl}-a ${wl}archive' + ;; + + irix5* | irix6* | nonstopux*) + lt_prog_compiler_wl='-Wl,' + # PIC (with -KPIC) is the default. + lt_prog_compiler_static='-non_shared' + ;; + + linux* | k*bsd*-gnu) + case $cc_basename in + # old Intel for x86_64 which still supported -KPIC. + ecc*) + lt_prog_compiler_wl='-Wl,' + lt_prog_compiler_pic='-KPIC' + lt_prog_compiler_static='-static' + ;; + # icc used to be incompatible with GCC. + # ICC 10 doesn't accept -KPIC any more. + icc* | ifort*) + lt_prog_compiler_wl='-Wl,' + lt_prog_compiler_pic='-fPIC' + lt_prog_compiler_static='-static' + ;; + # Lahey Fortran 8.1. + lf95*) + lt_prog_compiler_wl='-Wl,' + lt_prog_compiler_pic='--shared' + lt_prog_compiler_static='--static' + ;; + pgcc* | pgf77* | pgf90* | pgf95*) + # Portland Group compilers (*not* the Pentium gcc compiler, + # which looks to be a dead project) + lt_prog_compiler_wl='-Wl,' + lt_prog_compiler_pic='-fpic' + lt_prog_compiler_static='-Bstatic' + ;; + ccc*) + lt_prog_compiler_wl='-Wl,' + # All Alpha code is PIC. + lt_prog_compiler_static='-non_shared' + ;; + xl*) + # IBM XL C 8.0/Fortran 10.1 on PPC + lt_prog_compiler_wl='-Wl,' + lt_prog_compiler_pic='-qpic' + lt_prog_compiler_static='-qstaticlink' + ;; + *) + case `$CC -V 2>&1 | sed 5q` in + *Sun\ C*) + # Sun C 5.9 + lt_prog_compiler_pic='-KPIC' + lt_prog_compiler_static='-Bstatic' + lt_prog_compiler_wl='-Wl,' + ;; + *Sun\ F*) + # Sun Fortran 8.3 passes all unrecognized flags to the linker + lt_prog_compiler_pic='-KPIC' + lt_prog_compiler_static='-Bstatic' + lt_prog_compiler_wl='' + ;; + esac + ;; + esac + ;; + + newsos6) + lt_prog_compiler_pic='-KPIC' + lt_prog_compiler_static='-Bstatic' + ;; + + *nto* | *qnx*) + # QNX uses GNU C++, but need to define -shared option too, otherwise + # it will coredump. + lt_prog_compiler_pic='-fPIC -shared' + ;; + + osf3* | osf4* | osf5*) + lt_prog_compiler_wl='-Wl,' + # All OSF/1 code is PIC. + lt_prog_compiler_static='-non_shared' + ;; + + rdos*) + lt_prog_compiler_static='-non_shared' + ;; + + solaris*) + lt_prog_compiler_pic='-KPIC' + lt_prog_compiler_static='-Bstatic' + case $cc_basename in + f77* | f90* | f95*) + lt_prog_compiler_wl='-Qoption ld ';; + *) + lt_prog_compiler_wl='-Wl,';; + esac + ;; + + sunos4*) + lt_prog_compiler_wl='-Qoption ld ' + lt_prog_compiler_pic='-PIC' + lt_prog_compiler_static='-Bstatic' + ;; + + sysv4 | sysv4.2uw2* | sysv4.3*) + lt_prog_compiler_wl='-Wl,' + lt_prog_compiler_pic='-KPIC' + lt_prog_compiler_static='-Bstatic' + ;; + + sysv4*MP*) + if test -d /usr/nec ;then + lt_prog_compiler_pic='-Kconform_pic' + lt_prog_compiler_static='-Bstatic' + fi + ;; + + sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*) + lt_prog_compiler_wl='-Wl,' + lt_prog_compiler_pic='-KPIC' + lt_prog_compiler_static='-Bstatic' + ;; + + unicos*) + lt_prog_compiler_wl='-Wl,' + lt_prog_compiler_can_build_shared=no + ;; + + uts4*) + lt_prog_compiler_pic='-pic' + lt_prog_compiler_static='-Bstatic' + ;; + + *) + lt_prog_compiler_can_build_shared=no + ;; + esac + fi + +case $host_os in + # For platforms which do not support PIC, -DPIC is meaningless: + *djgpp*) + lt_prog_compiler_pic= + ;; + *) + lt_prog_compiler_pic="$lt_prog_compiler_pic -DPIC" + ;; +esac +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_prog_compiler_pic" >&5 +$as_echo "$lt_prog_compiler_pic" >&6; } + + + + + + +# +# Check to make sure the PIC flag actually works. +# +if test -n "$lt_prog_compiler_pic"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler PIC flag $lt_prog_compiler_pic works" >&5 +$as_echo_n "checking if $compiler PIC flag $lt_prog_compiler_pic works... " >&6; } +if test "${lt_cv_prog_compiler_pic_works+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_prog_compiler_pic_works=no + ac_outfile=conftest.$ac_objext + echo "$lt_simple_compile_test_code" > conftest.$ac_ext + lt_compiler_flag="$lt_prog_compiler_pic -DPIC" + # Insert the option either (1) after the last *FLAGS variable, or + # (2) before a word containing "conftest.", or (3) at the end. + # Note that $ac_compile itself does not contain backslashes and begins + # with a dollar sign (not a hyphen), so the echo should work correctly. + # The option is referenced via a variable to avoid confusing sed. + lt_compile=`echo "$ac_compile" | $SED \ + -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ + -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ + -e 's:$: $lt_compiler_flag:'` + (eval echo "\"\$as_me:8126: $lt_compile\"" >&5) + (eval "$lt_compile" 2>conftest.err) + ac_status=$? + cat conftest.err >&5 + echo "$as_me:8130: \$? = $ac_status" >&5 + if (exit $ac_status) && test -s "$ac_outfile"; then + # The compiler can only warn and ignore the option if not recognized + # So say no if there are warnings other than the usual output. + $ECHO "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' >conftest.exp + $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 + if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then + lt_cv_prog_compiler_pic_works=yes + fi + fi + $RM conftest* + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_pic_works" >&5 +$as_echo "$lt_cv_prog_compiler_pic_works" >&6; } + +if test x"$lt_cv_prog_compiler_pic_works" = xyes; then + case $lt_prog_compiler_pic in + "" | " "*) ;; + *) lt_prog_compiler_pic=" $lt_prog_compiler_pic" ;; + esac +else + lt_prog_compiler_pic= + lt_prog_compiler_can_build_shared=no +fi + +fi + + + + + + +# +# Check to make sure the static flag actually works. +# +wl=$lt_prog_compiler_wl eval lt_tmp_static_flag=\"$lt_prog_compiler_static\" +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler static flag $lt_tmp_static_flag works" >&5 +$as_echo_n "checking if $compiler static flag $lt_tmp_static_flag works... " >&6; } +if test "${lt_cv_prog_compiler_static_works+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_prog_compiler_static_works=no + save_LDFLAGS="$LDFLAGS" + LDFLAGS="$LDFLAGS $lt_tmp_static_flag" + echo "$lt_simple_link_test_code" > conftest.$ac_ext + if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then + # The linker can only warn and ignore the option if not recognized + # So say no if there are warnings + if test -s conftest.err; then + # Append any errors to the config.log. + cat conftest.err 1>&5 + $ECHO "X$_lt_linker_boilerplate" | $Xsed -e '/^$/d' > conftest.exp + $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 + if diff conftest.exp conftest.er2 >/dev/null; then + lt_cv_prog_compiler_static_works=yes + fi + else + lt_cv_prog_compiler_static_works=yes + fi + fi + $RM -r conftest* + LDFLAGS="$save_LDFLAGS" + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_static_works" >&5 +$as_echo "$lt_cv_prog_compiler_static_works" >&6; } + +if test x"$lt_cv_prog_compiler_static_works" = xyes; then + : +else + lt_prog_compiler_static= +fi + + + + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5 +$as_echo_n "checking if $compiler supports -c -o file.$ac_objext... " >&6; } +if test "${lt_cv_prog_compiler_c_o+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_prog_compiler_c_o=no + $RM -r conftest 2>/dev/null + mkdir conftest + cd conftest + mkdir out + echo "$lt_simple_compile_test_code" > conftest.$ac_ext + + lt_compiler_flag="-o out/conftest2.$ac_objext" + # Insert the option either (1) after the last *FLAGS variable, or + # (2) before a word containing "conftest.", or (3) at the end. + # Note that $ac_compile itself does not contain backslashes and begins + # with a dollar sign (not a hyphen), so the echo should work correctly. + lt_compile=`echo "$ac_compile" | $SED \ + -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ + -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ + -e 's:$: $lt_compiler_flag:'` + (eval echo "\"\$as_me:8231: $lt_compile\"" >&5) + (eval "$lt_compile" 2>out/conftest.err) + ac_status=$? + cat out/conftest.err >&5 + echo "$as_me:8235: \$? = $ac_status" >&5 + if (exit $ac_status) && test -s out/conftest2.$ac_objext + then + # The compiler can only warn and ignore the option if not recognized + # So say no if there are warnings + $ECHO "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' > out/conftest.exp + $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2 + if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then + lt_cv_prog_compiler_c_o=yes + fi + fi + chmod u+w . 2>&5 + $RM conftest* + # SGI C++ compiler will create directory out/ii_files/ for + # template instantiation + test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files + $RM out/* && rmdir out + cd .. + $RM -r conftest + $RM conftest* + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_c_o" >&5 +$as_echo "$lt_cv_prog_compiler_c_o" >&6; } + + + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5 +$as_echo_n "checking if $compiler supports -c -o file.$ac_objext... " >&6; } +if test "${lt_cv_prog_compiler_c_o+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_prog_compiler_c_o=no + $RM -r conftest 2>/dev/null + mkdir conftest + cd conftest + mkdir out + echo "$lt_simple_compile_test_code" > conftest.$ac_ext + + lt_compiler_flag="-o out/conftest2.$ac_objext" + # Insert the option either (1) after the last *FLAGS variable, or + # (2) before a word containing "conftest.", or (3) at the end. + # Note that $ac_compile itself does not contain backslashes and begins + # with a dollar sign (not a hyphen), so the echo should work correctly. + lt_compile=`echo "$ac_compile" | $SED \ + -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ + -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ + -e 's:$: $lt_compiler_flag:'` + (eval echo "\"\$as_me:8286: $lt_compile\"" >&5) + (eval "$lt_compile" 2>out/conftest.err) + ac_status=$? + cat out/conftest.err >&5 + echo "$as_me:8290: \$? = $ac_status" >&5 + if (exit $ac_status) && test -s out/conftest2.$ac_objext + then + # The compiler can only warn and ignore the option if not recognized + # So say no if there are warnings + $ECHO "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' > out/conftest.exp + $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2 + if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then + lt_cv_prog_compiler_c_o=yes + fi + fi + chmod u+w . 2>&5 + $RM conftest* + # SGI C++ compiler will create directory out/ii_files/ for + # template instantiation + test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files + $RM out/* && rmdir out + cd .. + $RM -r conftest + $RM conftest* + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_c_o" >&5 +$as_echo "$lt_cv_prog_compiler_c_o" >&6; } + + + + +hard_links="nottested" +if test "$lt_cv_prog_compiler_c_o" = no && test "$need_locks" != no; then + # do not overwrite the value of need_locks provided by the user + { $as_echo "$as_me:${as_lineno-$LINENO}: checking if we can lock with hard links" >&5 +$as_echo_n "checking if we can lock with hard links... " >&6; } + hard_links=yes + $RM conftest* + ln conftest.a conftest.b 2>/dev/null && hard_links=no + touch conftest.a + ln conftest.a conftest.b 2>&5 || hard_links=no + ln conftest.a conftest.b 2>/dev/null && hard_links=no + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $hard_links" >&5 +$as_echo "$hard_links" >&6; } + if test "$hard_links" = no; then + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&5 +$as_echo "$as_me: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&2;} + need_locks=warn + fi +else + need_locks=no +fi + + + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the $compiler linker ($LD) supports shared libraries" >&5 +$as_echo_n "checking whether the $compiler linker ($LD) supports shared libraries... " >&6; } + + runpath_var= + allow_undefined_flag= + always_export_symbols=no + archive_cmds= + archive_expsym_cmds= + compiler_needs_object=no + enable_shared_with_static_runtimes=no + export_dynamic_flag_spec= + export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' + hardcode_automatic=no + hardcode_direct=no + hardcode_direct_absolute=no + hardcode_libdir_flag_spec= + hardcode_libdir_flag_spec_ld= + hardcode_libdir_separator= + hardcode_minus_L=no + hardcode_shlibpath_var=unsupported + inherit_rpath=no + link_all_deplibs=unknown + module_cmds= + module_expsym_cmds= + old_archive_from_new_cmds= + old_archive_from_expsyms_cmds= + thread_safe_flag_spec= + whole_archive_flag_spec= + # include_expsyms should be a list of space-separated symbols to be *always* + # included in the symbol list + include_expsyms= + # exclude_expsyms can be an extended regexp of symbols to exclude + # it will be wrapped by ` (' and `)$', so one must not match beginning or + # end of line. Example: `a|bc|.*d.*' will exclude the symbols `a' and `bc', + # as well as any symbol that contains `d'. + exclude_expsyms='_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*' + # Although _GLOBAL_OFFSET_TABLE_ is a valid symbol C name, most a.out + # platforms (ab)use it in PIC code, but their linkers get confused if + # the symbol is explicitly referenced. Since portable code cannot + # rely on this symbol name, it's probably fine to never include it in + # preloaded symbol tables. + # Exclude shared library initialization/finalization symbols. + extract_expsyms_cmds= + + case $host_os in + cygwin* | mingw* | pw32* | cegcc*) + # FIXME: the MSVC++ port hasn't been tested in a loooong time + # When not using gcc, we currently assume that we are using + # Microsoft Visual C++. + if test "$GCC" != yes; then + with_gnu_ld=no + fi + ;; + interix*) + # we just hope/assume this is gcc and not c89 (= MSVC++) + with_gnu_ld=yes + ;; + openbsd*) + with_gnu_ld=no + ;; + esac + + ld_shlibs=yes + if test "$with_gnu_ld" = yes; then + # If archive_cmds runs LD, not CC, wlarc should be empty + wlarc='${wl}' + + # Set some defaults for GNU ld with shared library support. These + # are reset later if shared libraries are not supported. Putting them + # here allows them to be overridden if necessary. + runpath_var=LD_RUN_PATH + hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' + export_dynamic_flag_spec='${wl}--export-dynamic' + # ancient GNU ld didn't support --whole-archive et. al. + if $LD --help 2>&1 | $GREP 'no-whole-archive' > /dev/null; then + whole_archive_flag_spec="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' + else + whole_archive_flag_spec= + fi + supports_anon_versioning=no + case `$LD -v 2>&1` in + *\ [01].* | *\ 2.[0-9].* | *\ 2.10.*) ;; # catch versions < 2.11 + *\ 2.11.93.0.2\ *) supports_anon_versioning=yes ;; # RH7.3 ... + *\ 2.11.92.0.12\ *) supports_anon_versioning=yes ;; # Mandrake 8.2 ... + *\ 2.11.*) ;; # other 2.11 versions + *) supports_anon_versioning=yes ;; + esac + + # See if GNU ld supports shared libraries. + case $host_os in + aix[3-9]*) + # On AIX/PPC, the GNU linker is very broken + if test "$host_cpu" != ia64; then + ld_shlibs=no + cat <<_LT_EOF 1>&2 + +*** Warning: the GNU linker, at least up to release 2.9.1, is reported +*** to be unable to reliably create shared libraries on AIX. +*** Therefore, libtool is disabling shared libraries support. If you +*** really care for shared libraries, you may want to modify your PATH +*** so that a non-GNU linker is found, and then restart. + +_LT_EOF + fi + ;; + + amigaos*) + case $host_cpu in + powerpc) + # see comment about AmigaOS4 .so support + archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + archive_expsym_cmds='' + ;; + m68k) + archive_cmds='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' + hardcode_libdir_flag_spec='-L$libdir' + hardcode_minus_L=yes + ;; + esac + ;; + + beos*) + if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then + allow_undefined_flag=unsupported + # Joseph Beckenbach says some releases of gcc + # support --undefined. This deserves some investigation. FIXME + archive_cmds='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + else + ld_shlibs=no + fi + ;; + + cygwin* | mingw* | pw32* | cegcc*) + # _LT_TAGVAR(hardcode_libdir_flag_spec, ) is actually meaningless, + # as there is no search path for DLLs. + hardcode_libdir_flag_spec='-L$libdir' + allow_undefined_flag=unsupported + always_export_symbols=no + enable_shared_with_static_runtimes=yes + export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS][ ]/s/.*[ ]\([^ ]*\)/\1 DATA/'\'' | $SED -e '\''/^[AITW][ ]/s/.*[ ]//'\'' | sort | uniq > $export_symbols' + + if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then + archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' + # If the export-symbols file already is a .def file (1st line + # is EXPORTS), use it as is; otherwise, prepend... + archive_expsym_cmds='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then + cp $export_symbols $output_objdir/$soname.def; + else + echo EXPORTS > $output_objdir/$soname.def; + cat $export_symbols >> $output_objdir/$soname.def; + fi~ + $CC -shared $output_objdir/$soname.def $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' + else + ld_shlibs=no + fi + ;; + + interix[3-9]*) + hardcode_direct=no + hardcode_shlibpath_var=no + hardcode_libdir_flag_spec='${wl}-rpath,$libdir' + export_dynamic_flag_spec='${wl}-E' + # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc. + # Instead, shared libraries are loaded at an image base (0x10000000 by + # default) and relocated if they conflict, which is a slow very memory + # consuming and fragmenting process. To avoid this, we pick a random, + # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link + # time. Moving up from 0x10000000 also allows more sbrk(2) space. + archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' + archive_expsym_cmds='sed "s,^,_," $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--retain-symbols-file,$output_objdir/$soname.expsym ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' + ;; + + gnu* | linux* | tpf* | k*bsd*-gnu) + tmp_diet=no + if test "$host_os" = linux-dietlibc; then + case $cc_basename in + diet\ *) tmp_diet=yes;; # linux-dietlibc with static linking (!diet-dyn) + esac + fi + if $LD --help 2>&1 | $EGREP ': supported targets:.* elf' > /dev/null \ + && test "$tmp_diet" = no + then + tmp_addflag= + tmp_sharedflag='-shared' + case $cc_basename,$host_cpu in + pgcc*) # Portland Group C compiler + whole_archive_flag_spec='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $ECHO \"$new_convenience\"` ${wl}--no-whole-archive' + tmp_addflag=' $pic_flag' + ;; + pgf77* | pgf90* | pgf95*) # Portland Group f77 and f90 compilers + whole_archive_flag_spec='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $ECHO \"$new_convenience\"` ${wl}--no-whole-archive' + tmp_addflag=' $pic_flag -Mnomain' ;; + ecc*,ia64* | icc*,ia64*) # Intel C compiler on ia64 + tmp_addflag=' -i_dynamic' ;; + efc*,ia64* | ifort*,ia64*) # Intel Fortran compiler on ia64 + tmp_addflag=' -i_dynamic -nofor_main' ;; + ifc* | ifort*) # Intel Fortran compiler + tmp_addflag=' -nofor_main' ;; + lf95*) # Lahey Fortran 8.1 + whole_archive_flag_spec= + tmp_sharedflag='--shared' ;; + xl[cC]*) # IBM XL C 8.0 on PPC (deal with xlf below) + tmp_sharedflag='-qmkshrobj' + tmp_addflag= ;; + esac + case `$CC -V 2>&1 | sed 5q` in + *Sun\ C*) # Sun C 5.9 + whole_archive_flag_spec='${wl}--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; $ECHO \"$new_convenience\"` ${wl}--no-whole-archive' + compiler_needs_object=yes + tmp_sharedflag='-G' ;; + *Sun\ F*) # Sun Fortran 8.3 + tmp_sharedflag='-G' ;; + esac + archive_cmds='$CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + + if test "x$supports_anon_versioning" = xyes; then + archive_expsym_cmds='echo "{ global:" > $output_objdir/$libname.ver~ + cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ + echo "local: *; };" >> $output_objdir/$libname.ver~ + $CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib' + fi + + case $cc_basename in + xlf*) + # IBM XL Fortran 10.1 on PPC cannot create shared libs itself + whole_archive_flag_spec='--whole-archive$convenience --no-whole-archive' + hardcode_libdir_flag_spec= + hardcode_libdir_flag_spec_ld='-rpath $libdir' + archive_cmds='$LD -shared $libobjs $deplibs $compiler_flags -soname $soname -o $lib' + if test "x$supports_anon_versioning" = xyes; then + archive_expsym_cmds='echo "{ global:" > $output_objdir/$libname.ver~ + cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ + echo "local: *; };" >> $output_objdir/$libname.ver~ + $LD -shared $libobjs $deplibs $compiler_flags -soname $soname -version-script $output_objdir/$libname.ver -o $lib' + fi + ;; + esac + else + ld_shlibs=no + fi + ;; + + netbsd*) + if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then + archive_cmds='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib' + wlarc= + else + archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' + fi + ;; + + solaris*) + if $LD -v 2>&1 | $GREP 'BFD 2\.8' > /dev/null; then + ld_shlibs=no + cat <<_LT_EOF 1>&2 + +*** Warning: The releases 2.8.* of the GNU linker cannot reliably +*** create shared libraries on Solaris systems. Therefore, libtool +*** is disabling shared libraries support. We urge you to upgrade GNU +*** binutils to release 2.9.1 or newer. Another option is to modify +*** your PATH or compiler configuration so that the native linker is +*** used, and then restart. + +_LT_EOF + elif $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then + archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' + else + ld_shlibs=no + fi + ;; + + sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX*) + case `$LD -v 2>&1` in + *\ [01].* | *\ 2.[0-9].* | *\ 2.1[0-5].*) + ld_shlibs=no + cat <<_LT_EOF 1>&2 + +*** Warning: Releases of the GNU linker prior to 2.16.91.0.3 can not +*** reliably create shared libraries on SCO systems. Therefore, libtool +*** is disabling shared libraries support. We urge you to upgrade GNU +*** binutils to release 2.16.91.0.3 or newer. Another option is to modify +*** your PATH or compiler configuration so that the native linker is +*** used, and then restart. + +_LT_EOF + ;; + *) + # For security reasons, it is highly recommended that you always + # use absolute paths for naming shared libraries, and exclude the + # DT_RUNPATH tag from executables and libraries. But doing so + # requires that you compile everything twice, which is a pain. + if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then + hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' + archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' + else + ld_shlibs=no + fi + ;; + esac + ;; + + sunos4*) + archive_cmds='$LD -assert pure-text -Bshareable -o $lib $libobjs $deplibs $linker_flags' + wlarc= + hardcode_direct=yes + hardcode_shlibpath_var=no + ;; + + *) + if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then + archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' + else + ld_shlibs=no + fi + ;; + esac + + if test "$ld_shlibs" = no; then + runpath_var= + hardcode_libdir_flag_spec= + export_dynamic_flag_spec= + whole_archive_flag_spec= + fi + else + # PORTME fill in a description of your system's linker (not GNU ld) + case $host_os in + aix3*) + allow_undefined_flag=unsupported + always_export_symbols=yes + archive_expsym_cmds='$LD -o $output_objdir/$soname $libobjs $deplibs $linker_flags -bE:$export_symbols -T512 -H512 -bM:SRE~$AR $AR_FLAGS $lib $output_objdir/$soname' + # Note: this linker hardcodes the directories in LIBPATH if there + # are no directories specified by -L. + hardcode_minus_L=yes + if test "$GCC" = yes && test -z "$lt_prog_compiler_static"; then + # Neither direct hardcoding nor static linking is supported with a + # broken collect2. + hardcode_direct=unsupported + fi + ;; + + aix[4-9]*) + if test "$host_cpu" = ia64; then + # On IA64, the linker does run time linking by default, so we don't + # have to do anything special. + aix_use_runtimelinking=no + exp_sym_flag='-Bexport' + no_entry_flag="" + else + # If we're using GNU nm, then we don't want the "-C" option. + # -C means demangle to AIX nm, but means don't demangle with GNU nm + if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then + export_symbols_cmds='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && (substr(\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' + else + export_symbols_cmds='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && (substr(\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' + fi + aix_use_runtimelinking=no + + # Test if we are trying to use run time linking or normal + # AIX style linking. If -brtl is somewhere in LDFLAGS, we + # need to do runtime linking. + case $host_os in aix4.[23]|aix4.[23].*|aix[5-9]*) + for ld_flag in $LDFLAGS; do + if (test $ld_flag = "-brtl" || test $ld_flag = "-Wl,-brtl"); then + aix_use_runtimelinking=yes + break + fi + done + ;; + esac + + exp_sym_flag='-bexport' + no_entry_flag='-bnoentry' + fi + + # When large executables or shared objects are built, AIX ld can + # have problems creating the table of contents. If linking a library + # or program results in "error TOC overflow" add -mminimal-toc to + # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not + # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS. + + archive_cmds='' + hardcode_direct=yes + hardcode_direct_absolute=yes + hardcode_libdir_separator=':' + link_all_deplibs=yes + file_list_spec='${wl}-f,' + + if test "$GCC" = yes; then + case $host_os in aix4.[012]|aix4.[012].*) + # We only want to do this on AIX 4.2 and lower, the check + # below for broken collect2 doesn't work under 4.3+ + collect2name=`${CC} -print-prog-name=collect2` + if test -f "$collect2name" && + strings "$collect2name" | $GREP resolve_lib_name >/dev/null + then + # We have reworked collect2 + : + else + # We have old collect2 + hardcode_direct=unsupported + # It fails to find uninstalled libraries when the uninstalled + # path is not listed in the libpath. Setting hardcode_minus_L + # to unsupported forces relinking + hardcode_minus_L=yes + hardcode_libdir_flag_spec='-L$libdir' + hardcode_libdir_separator= + fi + ;; + esac + shared_flag='-shared' + if test "$aix_use_runtimelinking" = yes; then + shared_flag="$shared_flag "'${wl}-G' + fi + else + # not using gcc + if test "$host_cpu" = ia64; then + # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release + # chokes on -Wl,-G. The following line is correct: + shared_flag='-G' + else + if test "$aix_use_runtimelinking" = yes; then + shared_flag='${wl}-G' + else + shared_flag='${wl}-bM:SRE' + fi + fi + fi + + export_dynamic_flag_spec='${wl}-bexpall' + # It seems that -bexpall does not export symbols beginning with + # underscore (_), so it is better to generate a list of symbols to export. + always_export_symbols=yes + if test "$aix_use_runtimelinking" = yes; then + # Warning - without using the other runtime loading flags (-brtl), + # -berok will link without error, but may produce a broken library. + allow_undefined_flag='-berok' + # Determine the default libpath from the value encoded in an + # empty executable. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + +lt_aix_libpath_sed=' + /Import File Strings/,/^$/ { + /^0/ { + s/^0 *\(.*\)$/\1/ + p + } + }' +aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` +# Check for a 64-bit object if we didn't find anything. +if test -z "$aix_libpath"; then + aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` +fi +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi + + hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'"$aix_libpath" + archive_expsym_cmds='$CC -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then $ECHO "X${wl}${allow_undefined_flag}" | $Xsed; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag" + else + if test "$host_cpu" = ia64; then + hardcode_libdir_flag_spec='${wl}-R $libdir:/usr/lib:/lib' + allow_undefined_flag="-z nodefs" + archive_expsym_cmds="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$exp_sym_flag:\$export_symbols" + else + # Determine the default libpath from the value encoded in an + # empty executable. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + +lt_aix_libpath_sed=' + /Import File Strings/,/^$/ { + /^0/ { + s/^0 *\(.*\)$/\1/ + p + } + }' +aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` +# Check for a 64-bit object if we didn't find anything. +if test -z "$aix_libpath"; then + aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` +fi +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi + + hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'"$aix_libpath" + # Warning - without using the other run time loading flags, + # -berok will link without error, but may produce a broken library. + no_undefined_flag=' ${wl}-bernotok' + allow_undefined_flag=' ${wl}-berok' + # Exported symbols can be pulled into shared objects from archives + whole_archive_flag_spec='$convenience' + archive_cmds_need_lc=yes + # This is similar to how AIX traditionally builds its shared libraries. + archive_expsym_cmds="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs ${wl}-bnoentry $compiler_flags ${wl}-bE:$export_symbols${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname' + fi + fi + ;; + + amigaos*) + case $host_cpu in + powerpc) + # see comment about AmigaOS4 .so support + archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + archive_expsym_cmds='' + ;; + m68k) + archive_cmds='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' + hardcode_libdir_flag_spec='-L$libdir' + hardcode_minus_L=yes + ;; + esac + ;; + + bsdi[45]*) + export_dynamic_flag_spec=-rdynamic + ;; + + cygwin* | mingw* | pw32* | cegcc*) + # When not using gcc, we currently assume that we are using + # Microsoft Visual C++. + # hardcode_libdir_flag_spec is actually meaningless, as there is + # no search path for DLLs. + hardcode_libdir_flag_spec=' ' + allow_undefined_flag=unsupported + # Tell ltmain to make .lib files, not .a files. + libext=lib + # Tell ltmain to make .dll files, not .so files. + shrext_cmds=".dll" + # FIXME: Setting linknames here is a bad hack. + archive_cmds='$CC -o $lib $libobjs $compiler_flags `$ECHO "X$deplibs" | $Xsed -e '\''s/ -lc$//'\''` -link -dll~linknames=' + # The linker will automatically build a .lib file if we build a DLL. + old_archive_from_new_cmds='true' + # FIXME: Should let the user specify the lib program. + old_archive_cmds='lib -OUT:$oldlib$oldobjs$old_deplibs' + fix_srcfile_path='`cygpath -w "$srcfile"`' + enable_shared_with_static_runtimes=yes + ;; + + darwin* | rhapsody*) + + + archive_cmds_need_lc=no + hardcode_direct=no + hardcode_automatic=yes + hardcode_shlibpath_var=unsupported + whole_archive_flag_spec='' + link_all_deplibs=yes + allow_undefined_flag="$_lt_dar_allow_undefined" + case $cc_basename in + ifort*) _lt_dar_can_shared=yes ;; + *) _lt_dar_can_shared=$GCC ;; + esac + if test "$_lt_dar_can_shared" = "yes"; then + output_verbose_link_cmd=echo + archive_cmds="\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod${_lt_dsymutil}" + module_cmds="\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dsymutil}" + archive_expsym_cmds="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring ${_lt_dar_single_mod}${_lt_dar_export_syms}${_lt_dsymutil}" + module_expsym_cmds="sed -e 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dar_export_syms}${_lt_dsymutil}" + + else + ld_shlibs=no + fi + + ;; + + dgux*) + archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + hardcode_libdir_flag_spec='-L$libdir' + hardcode_shlibpath_var=no + ;; + + freebsd1*) + ld_shlibs=no + ;; + + # FreeBSD 2.2.[012] allows us to include c++rt0.o to get C++ constructor + # support. Future versions do this automatically, but an explicit c++rt0.o + # does not break anything, and helps significantly (at the cost of a little + # extra space). + freebsd2.2*) + archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags /usr/lib/c++rt0.o' + hardcode_libdir_flag_spec='-R$libdir' + hardcode_direct=yes + hardcode_shlibpath_var=no + ;; + + # Unfortunately, older versions of FreeBSD 2 do not have this feature. + freebsd2*) + archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' + hardcode_direct=yes + hardcode_minus_L=yes + hardcode_shlibpath_var=no + ;; + + # FreeBSD 3 and greater uses gcc -shared to do shared libraries. + freebsd* | dragonfly*) + archive_cmds='$CC -shared -o $lib $libobjs $deplibs $compiler_flags' + hardcode_libdir_flag_spec='-R$libdir' + hardcode_direct=yes + hardcode_shlibpath_var=no + ;; + + hpux9*) + if test "$GCC" = yes; then + archive_cmds='$RM $output_objdir/$soname~$CC -shared -fPIC ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' + else + archive_cmds='$RM $output_objdir/$soname~$LD -b +b $install_libdir -o $output_objdir/$soname $libobjs $deplibs $linker_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' + fi + hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir' + hardcode_libdir_separator=: + hardcode_direct=yes + + # hardcode_minus_L: Not really in the search PATH, + # but as the default location of the library. + hardcode_minus_L=yes + export_dynamic_flag_spec='${wl}-E' + ;; + + hpux10*) + if test "$GCC" = yes -a "$with_gnu_ld" = no; then + archive_cmds='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' + else + archive_cmds='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags' + fi + if test "$with_gnu_ld" = no; then + hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir' + hardcode_libdir_flag_spec_ld='+b $libdir' + hardcode_libdir_separator=: + hardcode_direct=yes + hardcode_direct_absolute=yes + export_dynamic_flag_spec='${wl}-E' + # hardcode_minus_L: Not really in the search PATH, + # but as the default location of the library. + hardcode_minus_L=yes + fi + ;; + + hpux11*) + if test "$GCC" = yes -a "$with_gnu_ld" = no; then + case $host_cpu in + hppa*64*) + archive_cmds='$CC -shared ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' + ;; + ia64*) + archive_cmds='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' + ;; + *) + archive_cmds='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' + ;; + esac + else + case $host_cpu in + hppa*64*) + archive_cmds='$CC -b ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' + ;; + ia64*) + archive_cmds='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' + ;; + *) + archive_cmds='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' + ;; + esac + fi + if test "$with_gnu_ld" = no; then + hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir' + hardcode_libdir_separator=: + + case $host_cpu in + hppa*64*|ia64*) + hardcode_direct=no + hardcode_shlibpath_var=no + ;; + *) + hardcode_direct=yes + hardcode_direct_absolute=yes + export_dynamic_flag_spec='${wl}-E' + + # hardcode_minus_L: Not really in the search PATH, + # but as the default location of the library. + hardcode_minus_L=yes + ;; + esac + fi + ;; + + irix5* | irix6* | nonstopux*) + if test "$GCC" = yes; then + archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' + # Try to use the -exported_symbol ld option, if it does not + # work, assume that -exports_file does not work either and + # implicitly export all symbols. + save_LDFLAGS="$LDFLAGS" + LDFLAGS="$LDFLAGS -shared ${wl}-exported_symbol ${wl}foo ${wl}-update_registry ${wl}/dev/null" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +int foo(void) {} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations ${wl}-exports_file ${wl}$export_symbols -o $lib' + +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + LDFLAGS="$save_LDFLAGS" + else + archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib' + archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -exports_file $export_symbols -o $lib' + fi + archive_cmds_need_lc='no' + hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' + hardcode_libdir_separator=: + inherit_rpath=yes + link_all_deplibs=yes + ;; + + netbsd*) + if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then + archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' # a.out + else + archive_cmds='$LD -shared -o $lib $libobjs $deplibs $linker_flags' # ELF + fi + hardcode_libdir_flag_spec='-R$libdir' + hardcode_direct=yes + hardcode_shlibpath_var=no + ;; + + newsos6) + archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + hardcode_direct=yes + hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' + hardcode_libdir_separator=: + hardcode_shlibpath_var=no + ;; + + *nto* | *qnx*) + ;; + + openbsd*) + if test -f /usr/libexec/ld.so; then + hardcode_direct=yes + hardcode_shlibpath_var=no + hardcode_direct_absolute=yes + if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then + archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' + archive_expsym_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-retain-symbols-file,$export_symbols' + hardcode_libdir_flag_spec='${wl}-rpath,$libdir' + export_dynamic_flag_spec='${wl}-E' + else + case $host_os in + openbsd[01].* | openbsd2.[0-7] | openbsd2.[0-7].*) + archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' + hardcode_libdir_flag_spec='-R$libdir' + ;; + *) + archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' + hardcode_libdir_flag_spec='${wl}-rpath,$libdir' + ;; + esac + fi + else + ld_shlibs=no + fi + ;; + + os2*) + hardcode_libdir_flag_spec='-L$libdir' + hardcode_minus_L=yes + allow_undefined_flag=unsupported + archive_cmds='$ECHO "LIBRARY $libname INITINSTANCE" > $output_objdir/$libname.def~$ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~$ECHO DATA >> $output_objdir/$libname.def~$ECHO " SINGLE NONSHARED" >> $output_objdir/$libname.def~$ECHO EXPORTS >> $output_objdir/$libname.def~emxexp $libobjs >> $output_objdir/$libname.def~$CC -Zdll -Zcrtdll -o $lib $libobjs $deplibs $compiler_flags $output_objdir/$libname.def' + old_archive_from_new_cmds='emximp -o $output_objdir/$libname.a $output_objdir/$libname.def' + ;; + + osf3*) + if test "$GCC" = yes; then + allow_undefined_flag=' ${wl}-expect_unresolved ${wl}\*' + archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' + else + allow_undefined_flag=' -expect_unresolved \*' + archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib' + fi + archive_cmds_need_lc='no' + hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' + hardcode_libdir_separator=: + ;; + + osf4* | osf5*) # as osf3* with the addition of -msym flag + if test "$GCC" = yes; then + allow_undefined_flag=' ${wl}-expect_unresolved ${wl}\*' + archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' + hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' + else + allow_undefined_flag=' -expect_unresolved \*' + archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags -msym -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib' + archive_expsym_cmds='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done; printf "%s\\n" "-hidden">> $lib.exp~ + $CC -shared${allow_undefined_flag} ${wl}-input ${wl}$lib.exp $compiler_flags $libobjs $deplibs -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib~$RM $lib.exp' + + # Both c and cxx compiler support -rpath directly + hardcode_libdir_flag_spec='-rpath $libdir' + fi + archive_cmds_need_lc='no' + hardcode_libdir_separator=: + ;; + + solaris*) + no_undefined_flag=' -z defs' + if test "$GCC" = yes; then + wlarc='${wl}' + archive_cmds='$CC -shared ${wl}-z ${wl}text ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' + archive_expsym_cmds='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ + $CC -shared ${wl}-z ${wl}text ${wl}-M ${wl}$lib.exp ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp' + else + case `$CC -V 2>&1` in + *"Compilers 5.0"*) + wlarc='' + archive_cmds='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linker_flags' + archive_expsym_cmds='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ + $LD -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$RM $lib.exp' + ;; + *) + wlarc='${wl}' + archive_cmds='$CC -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $compiler_flags' + archive_expsym_cmds='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ + $CC -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp' + ;; + esac + fi + hardcode_libdir_flag_spec='-R$libdir' + hardcode_shlibpath_var=no + case $host_os in + solaris2.[0-5] | solaris2.[0-5].*) ;; + *) + # The compiler driver will combine and reorder linker options, + # but understands `-z linker_flag'. GCC discards it without `$wl', + # but is careful enough not to reorder. + # Supported since Solaris 2.6 (maybe 2.5.1?) + if test "$GCC" = yes; then + whole_archive_flag_spec='${wl}-z ${wl}allextract$convenience ${wl}-z ${wl}defaultextract' + else + whole_archive_flag_spec='-z allextract$convenience -z defaultextract' + fi + ;; + esac + link_all_deplibs=yes + ;; + + sunos4*) + if test "x$host_vendor" = xsequent; then + # Use $CC to link under sequent, because it throws in some extra .o + # files that make .init and .fini sections work. + archive_cmds='$CC -G ${wl}-h $soname -o $lib $libobjs $deplibs $compiler_flags' + else + archive_cmds='$LD -assert pure-text -Bstatic -o $lib $libobjs $deplibs $linker_flags' + fi + hardcode_libdir_flag_spec='-L$libdir' + hardcode_direct=yes + hardcode_minus_L=yes + hardcode_shlibpath_var=no + ;; + + sysv4) + case $host_vendor in + sni) + archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + hardcode_direct=yes # is this really true??? + ;; + siemens) + ## LD is ld it makes a PLAMLIB + ## CC just makes a GrossModule. + archive_cmds='$LD -G -o $lib $libobjs $deplibs $linker_flags' + reload_cmds='$CC -r -o $output$reload_objs' + hardcode_direct=no + ;; + motorola) + archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + hardcode_direct=no #Motorola manual says yes, but my tests say they lie + ;; + esac + runpath_var='LD_RUN_PATH' + hardcode_shlibpath_var=no + ;; + + sysv4.3*) + archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + hardcode_shlibpath_var=no + export_dynamic_flag_spec='-Bexport' + ;; + + sysv4*MP*) + if test -d /usr/nec; then + archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + hardcode_shlibpath_var=no + runpath_var=LD_RUN_PATH + hardcode_runpath_var=yes + ld_shlibs=yes + fi + ;; + + sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[01].[10]* | unixware7* | sco3.2v5.0.[024]*) + no_undefined_flag='${wl}-z,text' + archive_cmds_need_lc=no + hardcode_shlibpath_var=no + runpath_var='LD_RUN_PATH' + + if test "$GCC" = yes; then + archive_cmds='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + archive_expsym_cmds='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + else + archive_cmds='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + archive_expsym_cmds='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + fi + ;; + + sysv5* | sco3.2v5* | sco5v6*) + # Note: We can NOT use -z defs as we might desire, because we do not + # link with -lc, and that would cause any symbols used from libc to + # always be unresolved, which means just about no library would + # ever link correctly. If we're not using GNU ld we use -z text + # though, which does catch some bad symbols but isn't as heavy-handed + # as -z defs. + no_undefined_flag='${wl}-z,text' + allow_undefined_flag='${wl}-z,nodefs' + archive_cmds_need_lc=no + hardcode_shlibpath_var=no + hardcode_libdir_flag_spec='${wl}-R,$libdir' + hardcode_libdir_separator=':' + link_all_deplibs=yes + export_dynamic_flag_spec='${wl}-Bexport' + runpath_var='LD_RUN_PATH' + + if test "$GCC" = yes; then + archive_cmds='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + archive_expsym_cmds='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + else + archive_cmds='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + archive_expsym_cmds='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + fi + ;; + + uts4*) + archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + hardcode_libdir_flag_spec='-L$libdir' + hardcode_shlibpath_var=no + ;; + + *) + ld_shlibs=no + ;; + esac + + if test x$host_vendor = xsni; then + case $host in + sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*) + export_dynamic_flag_spec='${wl}-Blargedynsym' + ;; + esac + fi + fi + +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ld_shlibs" >&5 +$as_echo "$ld_shlibs" >&6; } +test "$ld_shlibs" = no && can_build_shared=no + +with_gnu_ld=$with_gnu_ld + + + + + + + + + + + + + + + +# +# Do we need to explicitly link libc? +# +case "x$archive_cmds_need_lc" in +x|xyes) + # Assume -lc should be added + archive_cmds_need_lc=yes + + if test "$enable_shared" = yes && test "$GCC" = yes; then + case $archive_cmds in + *'~'*) + # FIXME: we may have to deal with multi-command sequences. + ;; + '$CC '*) + # Test whether the compiler implicitly links with -lc since on some + # systems, -lgcc has to come before -lc. If gcc already passes -lc + # to ld, don't add -lc before -lgcc. + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether -lc should be explicitly linked in" >&5 +$as_echo_n "checking whether -lc should be explicitly linked in... " >&6; } + $RM conftest* + echo "$lt_simple_compile_test_code" > conftest.$ac_ext + + if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } 2>conftest.err; then + soname=conftest + lib=conftest + libobjs=conftest.$ac_objext + deplibs= + wl=$lt_prog_compiler_wl + pic_flag=$lt_prog_compiler_pic + compiler_flags=-v + linker_flags=-v + verstring= + output_objdir=. + libname=conftest + lt_save_allow_undefined_flag=$allow_undefined_flag + allow_undefined_flag= + if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$archive_cmds 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1\""; } >&5 + (eval $archive_cmds 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } + then + archive_cmds_need_lc=no + else + archive_cmds_need_lc=yes + fi + allow_undefined_flag=$lt_save_allow_undefined_flag + else + cat conftest.err 1>&5 + fi + $RM conftest* + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $archive_cmds_need_lc" >&5 +$as_echo "$archive_cmds_need_lc" >&6; } + ;; + esac + fi + ;; +esac + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking dynamic linker characteristics" >&5 +$as_echo_n "checking dynamic linker characteristics... " >&6; } + +if test "$GCC" = yes; then + case $host_os in + darwin*) lt_awk_arg="/^libraries:/,/LR/" ;; + *) lt_awk_arg="/^libraries:/" ;; + esac + lt_search_path_spec=`$CC -print-search-dirs | awk $lt_awk_arg | $SED -e "s/^libraries://" -e "s,=/,/,g"` + if $ECHO "$lt_search_path_spec" | $GREP ';' >/dev/null ; then + # if the path contains ";" then we assume it to be the separator + # otherwise default to the standard path separator (i.e. ":") - it is + # assumed that no part of a normal pathname contains ";" but that should + # okay in the real world where ";" in dirpaths is itself problematic. + lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED -e 's/;/ /g'` + else + lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` + fi + # Ok, now we have the path, separated by spaces, we can step through it + # and add multilib dir if necessary. + lt_tmp_lt_search_path_spec= + lt_multi_os_dir=`$CC $CPPFLAGS $CFLAGS $LDFLAGS -print-multi-os-directory 2>/dev/null` + for lt_sys_path in $lt_search_path_spec; do + if test -d "$lt_sys_path/$lt_multi_os_dir"; then + lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path/$lt_multi_os_dir" + else + test -d "$lt_sys_path" && \ + lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path" + fi + done + lt_search_path_spec=`$ECHO $lt_tmp_lt_search_path_spec | awk ' +BEGIN {RS=" "; FS="/|\n";} { + lt_foo=""; + lt_count=0; + for (lt_i = NF; lt_i > 0; lt_i--) { + if ($lt_i != "" && $lt_i != ".") { + if ($lt_i == "..") { + lt_count++; + } else { + if (lt_count == 0) { + lt_foo="/" $lt_i lt_foo; + } else { + lt_count--; + } + } + } + } + if (lt_foo != "") { lt_freq[lt_foo]++; } + if (lt_freq[lt_foo] == 1) { print lt_foo; } +}'` + sys_lib_search_path_spec=`$ECHO $lt_search_path_spec` +else + sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib" +fi +library_names_spec= +libname_spec='lib$name' +soname_spec= +shrext_cmds=".so" +postinstall_cmds= +postuninstall_cmds= +finish_cmds= +finish_eval= +shlibpath_var= +shlibpath_overrides_runpath=unknown +version_type=none +dynamic_linker="$host_os ld.so" +sys_lib_dlsearch_path_spec="/lib /usr/lib" +need_lib_prefix=unknown +hardcode_into_libs=no + +# when you set need_version to no, make sure it does not cause -set_version +# flags to be left without arguments +need_version=unknown + +case $host_os in +aix3*) + version_type=linux + library_names_spec='${libname}${release}${shared_ext}$versuffix $libname.a' + shlibpath_var=LIBPATH + + # AIX 3 has no versioning support, so we append a major version to the name. + soname_spec='${libname}${release}${shared_ext}$major' + ;; + +aix[4-9]*) + version_type=linux + need_lib_prefix=no + need_version=no + hardcode_into_libs=yes + if test "$host_cpu" = ia64; then + # AIX 5 supports IA64 + library_names_spec='${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext}$versuffix $libname${shared_ext}' + shlibpath_var=LD_LIBRARY_PATH + else + # With GCC up to 2.95.x, collect2 would create an import file + # for dependence libraries. The import file would start with + # the line `#! .'. This would cause the generated library to + # depend on `.', always an invalid library. This was fixed in + # development snapshots of GCC prior to 3.0. + case $host_os in + aix4 | aix4.[01] | aix4.[01].*) + if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)' + echo ' yes ' + echo '#endif'; } | ${CC} -E - | $GREP yes > /dev/null; then + : + else + can_build_shared=no + fi + ;; + esac + # AIX (on Power*) has no versioning support, so currently we can not hardcode correct + # soname into executable. Probably we can add versioning support to + # collect2, so additional links can be useful in future. + if test "$aix_use_runtimelinking" = yes; then + # If using run time linking (on AIX 4.2 or later) use lib.so + # instead of lib.a to let people know that these are not + # typical AIX shared libraries. + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + else + # We preserve .a as extension for shared libraries through AIX4.2 + # and later when we are not doing run time linking. + library_names_spec='${libname}${release}.a $libname.a' + soname_spec='${libname}${release}${shared_ext}$major' + fi + shlibpath_var=LIBPATH + fi + ;; + +amigaos*) + case $host_cpu in + powerpc) + # Since July 2007 AmigaOS4 officially supports .so libraries. + # When compiling the executable, add -use-dynld -Lsobjs: to the compileline. + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + ;; + m68k) + library_names_spec='$libname.ixlibrary $libname.a' + # Create ${libname}_ixlibrary.a entries in /sys/libs. + finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`$ECHO "X$lib" | $Xsed -e '\''s%^.*/\([^/]*\)\.ixlibrary$%\1%'\''`; test $RM /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done' + ;; + esac + ;; + +beos*) + library_names_spec='${libname}${shared_ext}' + dynamic_linker="$host_os ld.so" + shlibpath_var=LIBRARY_PATH + ;; + +bsdi[45]*) + version_type=linux + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir' + shlibpath_var=LD_LIBRARY_PATH + sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib" + sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib" + # the default ld.so.conf also contains /usr/contrib/lib and + # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow + # libtool to hard-code these into programs + ;; + +cygwin* | mingw* | pw32* | cegcc*) + version_type=windows + shrext_cmds=".dll" + need_version=no + need_lib_prefix=no + + case $GCC,$host_os in + yes,cygwin* | yes,mingw* | yes,pw32* | yes,cegcc*) + library_names_spec='$libname.dll.a' + # DLL is installed to $(libdir)/../bin by postinstall_cmds + postinstall_cmds='base_file=`basename \${file}`~ + dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i; echo \$dlname'\''`~ + dldir=$destdir/`dirname \$dlpath`~ + test -d \$dldir || mkdir -p \$dldir~ + $install_prog $dir/$dlname \$dldir/$dlname~ + chmod a+x \$dldir/$dlname~ + if test -n '\''$stripme'\'' && test -n '\''$striplib'\''; then + eval '\''$striplib \$dldir/$dlname'\'' || exit \$?; + fi' + postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ + dlpath=$dir/\$dldll~ + $RM \$dlpath' + shlibpath_overrides_runpath=yes + + case $host_os in + cygwin*) + # Cygwin DLLs use 'cyg' prefix rather than 'lib' + soname_spec='`echo ${libname} | sed -e 's/^lib/cyg/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' + sys_lib_search_path_spec="/usr/lib /lib/w32api /lib /usr/local/lib" + ;; + mingw* | cegcc*) + # MinGW DLLs use traditional 'lib' prefix + soname_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' + sys_lib_search_path_spec=`$CC -print-search-dirs | $GREP "^libraries:" | $SED -e "s/^libraries://" -e "s,=/,/,g"` + if $ECHO "$sys_lib_search_path_spec" | $GREP ';[c-zC-Z]:/' >/dev/null; then + # It is most probably a Windows format PATH printed by + # mingw gcc, but we are running on Cygwin. Gcc prints its search + # path with ; separators, and with drive letters. We can handle the + # drive letters (cygwin fileutils understands them), so leave them, + # especially as we might pass files found there to a mingw objdump, + # which wouldn't understand a cygwinified path. Ahh. + sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'` + else + sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` + fi + ;; + pw32*) + # pw32 DLLs use 'pw' prefix rather than 'lib' + library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' + ;; + esac + ;; + + *) + library_names_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext} $libname.lib' + ;; + esac + dynamic_linker='Win32 ld.exe' + # FIXME: first we should search . and the directory the executable is in + shlibpath_var=PATH + ;; + +darwin* | rhapsody*) + dynamic_linker="$host_os dyld" + version_type=darwin + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${major}$shared_ext ${libname}$shared_ext' + soname_spec='${libname}${release}${major}$shared_ext' + shlibpath_overrides_runpath=yes + shlibpath_var=DYLD_LIBRARY_PATH + shrext_cmds='`test .$module = .yes && echo .so || echo .dylib`' + + sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/local/lib" + sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib' + ;; + +dgux*) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname$shared_ext' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + ;; + +freebsd1*) + dynamic_linker=no + ;; + +freebsd* | dragonfly*) + # DragonFly does not have aout. When/if they implement a new + # versioning mechanism, adjust this. + if test -x /usr/bin/objformat; then + objformat=`/usr/bin/objformat` + else + case $host_os in + freebsd[123]*) objformat=aout ;; + *) objformat=elf ;; + esac + fi + version_type=freebsd-$objformat + case $version_type in + freebsd-elf*) + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' + need_version=no + need_lib_prefix=no + ;; + freebsd-*) + library_names_spec='${libname}${release}${shared_ext}$versuffix $libname${shared_ext}$versuffix' + need_version=yes + ;; + esac + shlibpath_var=LD_LIBRARY_PATH + case $host_os in + freebsd2*) + shlibpath_overrides_runpath=yes + ;; + freebsd3.[01]* | freebsdelf3.[01]*) + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + ;; + freebsd3.[2-9]* | freebsdelf3.[2-9]* | \ + freebsd4.[0-5] | freebsdelf4.[0-5] | freebsd4.1.1 | freebsdelf4.1.1) + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + ;; + *) # from 4.6 on, and DragonFly + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + ;; + esac + ;; + +gnu*) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + hardcode_into_libs=yes + ;; + +hpux9* | hpux10* | hpux11*) + # Give a soname corresponding to the major version so that dld.sl refuses to + # link against other versions. + version_type=sunos + need_lib_prefix=no + need_version=no + case $host_cpu in + ia64*) + shrext_cmds='.so' + hardcode_into_libs=yes + dynamic_linker="$host_os dld.so" + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + if test "X$HPUX_IA64_MODE" = X32; then + sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib" + else + sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64" + fi + sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec + ;; + hppa*64*) + shrext_cmds='.sl' + hardcode_into_libs=yes + dynamic_linker="$host_os dld.sl" + shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH + shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64" + sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec + ;; + *) + shrext_cmds='.sl' + dynamic_linker="$host_os dld.sl" + shlibpath_var=SHLIB_PATH + shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + ;; + esac + # HP-UX runs *really* slowly unless shared libraries are mode 555. + postinstall_cmds='chmod 555 $lib' + ;; + +interix[3-9]*) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + dynamic_linker='Interix 3.x ld.so.1 (PE, like ELF)' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + ;; + +irix5* | irix6* | nonstopux*) + case $host_os in + nonstopux*) version_type=nonstopux ;; + *) + if test "$lt_cv_prog_gnu_ld" = yes; then + version_type=linux + else + version_type=irix + fi ;; + esac + need_lib_prefix=no + need_version=no + soname_spec='${libname}${release}${shared_ext}$major' + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext} $libname${shared_ext}' + case $host_os in + irix5* | nonstopux*) + libsuff= shlibsuff= + ;; + *) + case $LD in # libtool.m4 will add one of these switches to LD + *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ") + libsuff= shlibsuff= libmagic=32-bit;; + *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ") + libsuff=32 shlibsuff=N32 libmagic=N32;; + *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ") + libsuff=64 shlibsuff=64 libmagic=64-bit;; + *) libsuff= shlibsuff= libmagic=never-match;; + esac + ;; + esac + shlibpath_var=LD_LIBRARY${shlibsuff}_PATH + shlibpath_overrides_runpath=no + sys_lib_search_path_spec="/usr/lib${libsuff} /lib${libsuff} /usr/local/lib${libsuff}" + sys_lib_dlsearch_path_spec="/usr/lib${libsuff} /lib${libsuff}" + hardcode_into_libs=yes + ;; + +# No shared lib support for Linux oldld, aout, or coff. +linux*oldld* | linux*aout* | linux*coff*) + dynamic_linker=no + ;; + +# This must be Linux ELF. +linux* | k*bsd*-gnu) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + # Some binutils ld are patched to set DT_RUNPATH + save_LDFLAGS=$LDFLAGS + save_libdir=$libdir + eval "libdir=/foo; wl=\"$lt_prog_compiler_wl\"; \ + LDFLAGS=\"\$LDFLAGS $hardcode_libdir_flag_spec\"" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + if ($OBJDUMP -p conftest$ac_exeext) 2>/dev/null | grep "RUNPATH.*$libdir" >/dev/null; then : + shlibpath_overrides_runpath=yes +fi +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + LDFLAGS=$save_LDFLAGS + libdir=$save_libdir + + # This implies no fast_install, which is unacceptable. + # Some rework will be needed to allow for fast_install + # before this can be enabled. + hardcode_into_libs=yes + + # Add ABI-specific directories to the system library path. + sys_lib_dlsearch_path_spec="/lib64 /usr/lib64 /lib /usr/lib" + + # Append ld.so.conf contents to the search path + if test -f /etc/ld.so.conf; then + lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s 2>/dev/null", \$2)); skip = 1; } { if (!skip) print \$0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;/^[ ]*hwcap[ ]/d;s/[:, ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;/^$/d' | tr '\n' ' '` + sys_lib_dlsearch_path_spec="$sys_lib_dlsearch_path_spec $lt_ld_extra" + fi + + # We used to test for /lib/ld.so.1 and disable shared libraries on + # powerpc, because MkLinux only supported shared libraries with the + # GNU dynamic linker. Since this was broken with cross compilers, + # most powerpc-linux boxes support dynamic linking these days and + # people can always --disable-shared, the test was removed, and we + # assume the GNU/Linux dynamic linker is in use. + dynamic_linker='GNU/Linux ld.so' + ;; + +netbsd*) + version_type=sunos + need_lib_prefix=no + need_version=no + if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' + finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' + dynamic_linker='NetBSD (a.out) ld.so' + else + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + dynamic_linker='NetBSD ld.elf_so' + fi + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + ;; + +newsos6) + version_type=linux + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + ;; + +*nto* | *qnx*) + version_type=qnx + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + dynamic_linker='ldqnx.so' + ;; + +openbsd*) + version_type=sunos + sys_lib_dlsearch_path_spec="/usr/lib" + need_lib_prefix=no + # Some older versions of OpenBSD (3.3 at least) *do* need versioned libs. + case $host_os in + openbsd3.3 | openbsd3.3.*) need_version=yes ;; + *) need_version=no ;; + esac + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' + finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' + shlibpath_var=LD_LIBRARY_PATH + if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then + case $host_os in + openbsd2.[89] | openbsd2.[89].*) + shlibpath_overrides_runpath=no + ;; + *) + shlibpath_overrides_runpath=yes + ;; + esac + else + shlibpath_overrides_runpath=yes + fi + ;; + +os2*) + libname_spec='$name' + shrext_cmds=".dll" + need_lib_prefix=no + library_names_spec='$libname${shared_ext} $libname.a' + dynamic_linker='OS/2 ld.exe' + shlibpath_var=LIBPATH + ;; + +osf3* | osf4* | osf5*) + version_type=osf + need_lib_prefix=no + need_version=no + soname_spec='${libname}${release}${shared_ext}$major' + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + shlibpath_var=LD_LIBRARY_PATH + sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib" + sys_lib_dlsearch_path_spec="$sys_lib_search_path_spec" + ;; + +rdos*) + dynamic_linker=no + ;; + +solaris*) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + # ldd complains unless libraries are executable + postinstall_cmds='chmod +x $lib' + ;; + +sunos4*) + version_type=sunos + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' + finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + if test "$with_gnu_ld" = yes; then + need_lib_prefix=no + fi + need_version=yes + ;; + +sysv4 | sysv4.3*) + version_type=linux + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + case $host_vendor in + sni) + shlibpath_overrides_runpath=no + need_lib_prefix=no + runpath_var=LD_RUN_PATH + ;; + siemens) + need_lib_prefix=no + ;; + motorola) + need_lib_prefix=no + need_version=no + shlibpath_overrides_runpath=no + sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib' + ;; + esac + ;; + +sysv4*MP*) + if test -d /usr/nec ;then + version_type=linux + library_names_spec='$libname${shared_ext}.$versuffix $libname${shared_ext}.$major $libname${shared_ext}' + soname_spec='$libname${shared_ext}.$major' + shlibpath_var=LD_LIBRARY_PATH + fi + ;; + +sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) + version_type=freebsd-elf + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + if test "$with_gnu_ld" = yes; then + sys_lib_search_path_spec='/usr/local/lib /usr/gnu/lib /usr/ccs/lib /usr/lib /lib' + else + sys_lib_search_path_spec='/usr/ccs/lib /usr/lib' + case $host_os in + sco3.2v5*) + sys_lib_search_path_spec="$sys_lib_search_path_spec /lib" + ;; + esac + fi + sys_lib_dlsearch_path_spec='/usr/lib' + ;; + +tpf*) + # TPF is a cross-target only. Preferred cross-host = GNU/Linux. + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + ;; + +uts4*) + version_type=linux + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + ;; + +*) + dynamic_linker=no + ;; +esac +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $dynamic_linker" >&5 +$as_echo "$dynamic_linker" >&6; } +test "$dynamic_linker" = no && can_build_shared=no + +variables_saved_for_relink="PATH $shlibpath_var $runpath_var" +if test "$GCC" = yes; then + variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH" +fi + +if test "${lt_cv_sys_lib_search_path_spec+set}" = set; then + sys_lib_search_path_spec="$lt_cv_sys_lib_search_path_spec" +fi +if test "${lt_cv_sys_lib_dlsearch_path_spec+set}" = set; then + sys_lib_dlsearch_path_spec="$lt_cv_sys_lib_dlsearch_path_spec" +fi + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to hardcode library paths into programs" >&5 +$as_echo_n "checking how to hardcode library paths into programs... " >&6; } +hardcode_action= +if test -n "$hardcode_libdir_flag_spec" || + test -n "$runpath_var" || + test "X$hardcode_automatic" = "Xyes" ; then + + # We can hardcode non-existent directories. + if test "$hardcode_direct" != no && + # If the only mechanism to avoid hardcoding is shlibpath_var, we + # have to relink, otherwise we might link with an installed library + # when we should be linking with a yet-to-be-installed one + ## test "$_LT_TAGVAR(hardcode_shlibpath_var, )" != no && + test "$hardcode_minus_L" != no; then + # Linking always hardcodes the temporary library directory. + hardcode_action=relink + else + # We can link without hardcoding, and we can hardcode nonexisting dirs. + hardcode_action=immediate + fi +else + # We cannot hardcode anything, or else we can only hardcode existing + # directories. + hardcode_action=unsupported +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $hardcode_action" >&5 +$as_echo "$hardcode_action" >&6; } + +if test "$hardcode_action" = relink || + test "$inherit_rpath" = yes; then + # Fast installation is not supported + enable_fast_install=no +elif test "$shlibpath_overrides_runpath" = yes || + test "$enable_shared" = no; then + # Fast installation is not necessary + enable_fast_install=needless +fi + + + + + + + if test "x$enable_dlopen" != xyes; then + enable_dlopen=unknown + enable_dlopen_self=unknown + enable_dlopen_self_static=unknown +else + lt_cv_dlopen=no + lt_cv_dlopen_libs= + + case $host_os in + beos*) + lt_cv_dlopen="load_add_on" + lt_cv_dlopen_libs= + lt_cv_dlopen_self=yes + ;; + + mingw* | pw32* | cegcc*) + lt_cv_dlopen="LoadLibrary" + lt_cv_dlopen_libs= + ;; + + cygwin*) + lt_cv_dlopen="dlopen" + lt_cv_dlopen_libs= + ;; + + darwin*) + # if libdl is installed we need to link against it + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dlopen in -ldl" >&5 +$as_echo_n "checking for dlopen in -ldl... " >&6; } +if test "${ac_cv_lib_dl_dlopen+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-ldl $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char dlopen (); +int +main () +{ +return dlopen (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_lib_dl_dlopen=yes +else + ac_cv_lib_dl_dlopen=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dl_dlopen" >&5 +$as_echo "$ac_cv_lib_dl_dlopen" >&6; } +if test "x$ac_cv_lib_dl_dlopen" = x""yes; then : + lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl" +else + + lt_cv_dlopen="dyld" + lt_cv_dlopen_libs= + lt_cv_dlopen_self=yes + +fi + + ;; + + *) + ac_fn_c_check_func "$LINENO" "shl_load" "ac_cv_func_shl_load" +if test "x$ac_cv_func_shl_load" = x""yes; then : + lt_cv_dlopen="shl_load" +else + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for shl_load in -ldld" >&5 +$as_echo_n "checking for shl_load in -ldld... " >&6; } +if test "${ac_cv_lib_dld_shl_load+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-ldld $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char shl_load (); +int +main () +{ +return shl_load (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_lib_dld_shl_load=yes +else + ac_cv_lib_dld_shl_load=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dld_shl_load" >&5 +$as_echo "$ac_cv_lib_dld_shl_load" >&6; } +if test "x$ac_cv_lib_dld_shl_load" = x""yes; then : + lt_cv_dlopen="shl_load" lt_cv_dlopen_libs="-ldld" +else + ac_fn_c_check_func "$LINENO" "dlopen" "ac_cv_func_dlopen" +if test "x$ac_cv_func_dlopen" = x""yes; then : + lt_cv_dlopen="dlopen" +else + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dlopen in -ldl" >&5 +$as_echo_n "checking for dlopen in -ldl... " >&6; } +if test "${ac_cv_lib_dl_dlopen+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-ldl $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char dlopen (); +int +main () +{ +return dlopen (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_lib_dl_dlopen=yes +else + ac_cv_lib_dl_dlopen=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dl_dlopen" >&5 +$as_echo "$ac_cv_lib_dl_dlopen" >&6; } +if test "x$ac_cv_lib_dl_dlopen" = x""yes; then : + lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl" +else + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dlopen in -lsvld" >&5 +$as_echo_n "checking for dlopen in -lsvld... " >&6; } +if test "${ac_cv_lib_svld_dlopen+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lsvld $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char dlopen (); +int +main () +{ +return dlopen (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_lib_svld_dlopen=yes +else + ac_cv_lib_svld_dlopen=no fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_svld_dlopen" >&5 +$as_echo "$ac_cv_lib_svld_dlopen" >&6; } +if test "x$ac_cv_lib_svld_dlopen" = x""yes; then : + lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-lsvld" +else + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dld_link in -ldld" >&5 +$as_echo_n "checking for dld_link in -ldld... " >&6; } +if test "${ac_cv_lib_dld_dld_link+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-ldld $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ -# On IRIX 5.3, sys/types and inttypes.h are conflicting. -for ac_header in sys/types.h sys/stat.h stdlib.h string.h memory.h strings.h \ - inttypes.h stdint.h unistd.h -do : - as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` -ac_fn_c_check_header_compile "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default -" -eval as_val=\$$as_ac_Header - if test "x$as_val" = x""yes; then : - cat >>confdefs.h <<_ACEOF -#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char dld_link (); +int +main () +{ +return dld_link (); + ; + return 0; +} _ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_lib_dld_dld_link=yes +else + ac_cv_lib_dld_dld_link=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dld_dld_link" >&5 +$as_echo "$ac_cv_lib_dld_dld_link" >&6; } +if test "x$ac_cv_lib_dld_dld_link" = x""yes; then : + lt_cv_dlopen="dld_link" lt_cv_dlopen_libs="-ldld" +fi + + +fi + + +fi + + +fi + + +fi + + +fi + + ;; + esac + + if test "x$lt_cv_dlopen" != xno; then + enable_dlopen=yes + else + enable_dlopen=no + fi + + case $lt_cv_dlopen in + dlopen) + save_CPPFLAGS="$CPPFLAGS" + test "x$ac_cv_header_dlfcn_h" = xyes && CPPFLAGS="$CPPFLAGS -DHAVE_DLFCN_H" + + save_LDFLAGS="$LDFLAGS" + wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $export_dynamic_flag_spec\" + + save_LIBS="$LIBS" + LIBS="$lt_cv_dlopen_libs $LIBS" + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether a program can dlopen itself" >&5 +$as_echo_n "checking whether a program can dlopen itself... " >&6; } +if test "${lt_cv_dlopen_self+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test "$cross_compiling" = yes; then : + lt_cv_dlopen_self=cross +else + lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 + lt_status=$lt_dlunknown + cat > conftest.$ac_ext <<_LT_EOF +#line 10656 "configure" +#include "confdefs.h" + +#if HAVE_DLFCN_H +#include +#endif + +#include + +#ifdef RTLD_GLOBAL +# define LT_DLGLOBAL RTLD_GLOBAL +#else +# ifdef DL_GLOBAL +# define LT_DLGLOBAL DL_GLOBAL +# else +# define LT_DLGLOBAL 0 +# endif +#endif + +/* We may have to define LT_DLLAZY_OR_NOW in the command line if we + find out it does not work in some platform. */ +#ifndef LT_DLLAZY_OR_NOW +# ifdef RTLD_LAZY +# define LT_DLLAZY_OR_NOW RTLD_LAZY +# else +# ifdef DL_LAZY +# define LT_DLLAZY_OR_NOW DL_LAZY +# else +# ifdef RTLD_NOW +# define LT_DLLAZY_OR_NOW RTLD_NOW +# else +# ifdef DL_NOW +# define LT_DLLAZY_OR_NOW DL_NOW +# else +# define LT_DLLAZY_OR_NOW 0 +# endif +# endif +# endif +# endif +#endif + +void fnord() { int i=42;} +int main () +{ + void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW); + int status = $lt_dlunknown; + + if (self) + { + if (dlsym (self,"fnord")) status = $lt_dlno_uscore; + else if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore; + /* dlclose (self); */ + } + else + puts (dlerror ()); + + return status; +} +_LT_EOF + if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5 + (eval $ac_link) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } && test -s conftest${ac_exeext} 2>/dev/null; then + (./conftest; exit; ) >&5 2>/dev/null + lt_status=$? + case x$lt_status in + x$lt_dlno_uscore) lt_cv_dlopen_self=yes ;; + x$lt_dlneed_uscore) lt_cv_dlopen_self=yes ;; + x$lt_dlunknown|x*) lt_cv_dlopen_self=no ;; + esac + else : + # compilation failed + lt_cv_dlopen_self=no + fi +fi +rm -fr conftest* + + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_dlopen_self" >&5 +$as_echo "$lt_cv_dlopen_self" >&6; } + + if test "x$lt_cv_dlopen_self" = xyes; then + wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $lt_prog_compiler_static\" + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether a statically linked program can dlopen itself" >&5 +$as_echo_n "checking whether a statically linked program can dlopen itself... " >&6; } +if test "${lt_cv_dlopen_self_static+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test "$cross_compiling" = yes; then : + lt_cv_dlopen_self_static=cross +else + lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 + lt_status=$lt_dlunknown + cat > conftest.$ac_ext <<_LT_EOF +#line 10752 "configure" +#include "confdefs.h" + +#if HAVE_DLFCN_H +#include +#endif + +#include + +#ifdef RTLD_GLOBAL +# define LT_DLGLOBAL RTLD_GLOBAL +#else +# ifdef DL_GLOBAL +# define LT_DLGLOBAL DL_GLOBAL +# else +# define LT_DLGLOBAL 0 +# endif +#endif + +/* We may have to define LT_DLLAZY_OR_NOW in the command line if we + find out it does not work in some platform. */ +#ifndef LT_DLLAZY_OR_NOW +# ifdef RTLD_LAZY +# define LT_DLLAZY_OR_NOW RTLD_LAZY +# else +# ifdef DL_LAZY +# define LT_DLLAZY_OR_NOW DL_LAZY +# else +# ifdef RTLD_NOW +# define LT_DLLAZY_OR_NOW RTLD_NOW +# else +# ifdef DL_NOW +# define LT_DLLAZY_OR_NOW DL_NOW +# else +# define LT_DLLAZY_OR_NOW 0 +# endif +# endif +# endif +# endif +#endif + +void fnord() { int i=42;} +int main () +{ + void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW); + int status = $lt_dlunknown; + + if (self) + { + if (dlsym (self,"fnord")) status = $lt_dlno_uscore; + else if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore; + /* dlclose (self); */ + } + else + puts (dlerror ()); + + return status; +} +_LT_EOF + if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5 + (eval $ac_link) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } && test -s conftest${ac_exeext} 2>/dev/null; then + (./conftest; exit; ) >&5 2>/dev/null + lt_status=$? + case x$lt_status in + x$lt_dlno_uscore) lt_cv_dlopen_self_static=yes ;; + x$lt_dlneed_uscore) lt_cv_dlopen_self_static=yes ;; + x$lt_dlunknown|x*) lt_cv_dlopen_self_static=no ;; + esac + else : + # compilation failed + lt_cv_dlopen_self_static=no + fi +fi +rm -fr conftest* + + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_dlopen_self_static" >&5 +$as_echo "$lt_cv_dlopen_self_static" >&6; } + fi + + CPPFLAGS="$save_CPPFLAGS" + LDFLAGS="$save_LDFLAGS" + LIBS="$save_LIBS" + ;; + esac + + case $lt_cv_dlopen_self in + yes|no) enable_dlopen_self=$lt_cv_dlopen_self ;; + *) enable_dlopen_self=unknown ;; + esac + + case $lt_cv_dlopen_self_static in + yes|no) enable_dlopen_self_static=$lt_cv_dlopen_self_static ;; + *) enable_dlopen_self_static=unknown ;; + esac +fi + + + + + + + + + + + + + + + + + +striplib= +old_striplib= +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether stripping libraries is possible" >&5 +$as_echo_n "checking whether stripping libraries is possible... " >&6; } +if test -n "$STRIP" && $STRIP -V 2>&1 | $GREP "GNU strip" >/dev/null; then + test -z "$old_striplib" && old_striplib="$STRIP --strip-debug" + test -z "$striplib" && striplib="$STRIP --strip-unneeded" + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } +else +# FIXME - insert some real tests, host_os isn't really good enough + case $host_os in + darwin*) + if test -n "$STRIP" ; then + striplib="$STRIP -x" + old_striplib="$STRIP -S" + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + fi + ;; + *) + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + ;; + esac +fi + + + + + + + + + + + + + # Report which library types will actually be built + { $as_echo "$as_me:${as_lineno-$LINENO}: checking if libtool supports shared libraries" >&5 +$as_echo_n "checking if libtool supports shared libraries... " >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $can_build_shared" >&5 +$as_echo "$can_build_shared" >&6; } + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to build shared libraries" >&5 +$as_echo_n "checking whether to build shared libraries... " >&6; } + test "$can_build_shared" = "no" && enable_shared=no + + # On AIX, shared libraries and static libraries use the same namespace, and + # are all built from PIC. + case $host_os in + aix3*) + test "$enable_shared" = yes && enable_static=no + if test -n "$RANLIB"; then + archive_cmds="$archive_cmds~\$RANLIB \$lib" + postinstall_cmds='$RANLIB $lib' + fi + ;; + + aix[4-9]*) + if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then + test "$enable_shared" = yes && enable_static=no + fi + ;; + esac + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_shared" >&5 +$as_echo "$enable_shared" >&6; } + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to build static libraries" >&5 +$as_echo_n "checking whether to build static libraries... " >&6; } + # Make sure either enable_shared or enable_static is yes. + test "$enable_shared" = yes || enable_static=yes + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_static" >&5 +$as_echo "$enable_static" >&6; } + + + + +fi +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + +CC="$lt_save_CC" + + + + + + + + + + + + + + ac_config_commands="$ac_config_commands libtool" + + + + +# Only expand once: + + + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to enable maintainer-specific portions of Makefiles" >&5 +$as_echo_n "checking whether to enable maintainer-specific portions of Makefiles... " >&6; } + # Check whether --enable-maintainer-mode was given. +if test "${enable_maintainer_mode+set}" = set; then : + enableval=$enable_maintainer_mode; USE_MAINTAINER_MODE=$enableval +else + USE_MAINTAINER_MODE=no fi -done + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $USE_MAINTAINER_MODE" >&5 +$as_echo "$USE_MAINTAINER_MODE" >&6; } + if test $USE_MAINTAINER_MODE = yes; then + MAINTAINER_MODE_TRUE= + MAINTAINER_MODE_FALSE='#' +else + MAINTAINER_MODE_TRUE='#' + MAINTAINER_MODE_FALSE= +fi + + MAINT=$MAINTAINER_MODE_TRUE + for ac_header in sys/mman.h @@ -4865,6 +11192,10 @@ TARGET=X86_64; TARGETDIR=x86 ;; + amd64-*-freebsd*) + TARGET=X86_64; TARGETDIR=x86 + ;; + avr32*-*-*) TARGET=AVR32; TARGETDIR=avr32 ;; @@ -6095,7 +12426,7 @@ ac_config_links="$ac_config_links include/ffitarget.h:src/$TARGETDIR/ffitarget.h" -ac_config_files="$ac_config_files include/ffi.h" +ac_config_files="$ac_config_files include/Makefile include/ffi.h Makefile testsuite/Makefile man/Makefile libffi.pc" ac_config_links="$ac_config_links include/ffi_common.h:include/ffi_common.h" @@ -6742,7 +13073,7 @@ # report actual input values of CONFIG_FILES etc. instead of their # values after options handling. ac_log=" -This file was extended by libffi $as_me 3.0.9, which was +This file was extended by libffi $as_me 3.0.10rc0, which was generated by GNU Autoconf 2.65. Invocation command line was CONFIG_FILES = $CONFIG_FILES @@ -6812,7 +13143,7 @@ cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`" ac_cs_version="\\ -libffi config.status 3.0.9 +libffi config.status 3.0.10rc0 configured by $0, generated by GNU Autoconf 2.65, with options \\"\$ac_cs_config\\" @@ -6926,6 +13257,261 @@ # INIT-COMMANDS # AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir" + + +# The HP-UX ksh and POSIX shell print the target directory to stdout +# if CDPATH is set. +(unset CDPATH) >/dev/null 2>&1 && unset CDPATH + +sed_quote_subst='$sed_quote_subst' +double_quote_subst='$double_quote_subst' +delay_variable_subst='$delay_variable_subst' +macro_version='`$ECHO "X$macro_version" | $Xsed -e "$delay_single_quote_subst"`' +macro_revision='`$ECHO "X$macro_revision" | $Xsed -e "$delay_single_quote_subst"`' +enable_shared='`$ECHO "X$enable_shared" | $Xsed -e "$delay_single_quote_subst"`' +enable_static='`$ECHO "X$enable_static" | $Xsed -e "$delay_single_quote_subst"`' +pic_mode='`$ECHO "X$pic_mode" | $Xsed -e "$delay_single_quote_subst"`' +enable_fast_install='`$ECHO "X$enable_fast_install" | $Xsed -e "$delay_single_quote_subst"`' +host_alias='`$ECHO "X$host_alias" | $Xsed -e "$delay_single_quote_subst"`' +host='`$ECHO "X$host" | $Xsed -e "$delay_single_quote_subst"`' +host_os='`$ECHO "X$host_os" | $Xsed -e "$delay_single_quote_subst"`' +build_alias='`$ECHO "X$build_alias" | $Xsed -e "$delay_single_quote_subst"`' +build='`$ECHO "X$build" | $Xsed -e "$delay_single_quote_subst"`' +build_os='`$ECHO "X$build_os" | $Xsed -e "$delay_single_quote_subst"`' +SED='`$ECHO "X$SED" | $Xsed -e "$delay_single_quote_subst"`' +Xsed='`$ECHO "X$Xsed" | $Xsed -e "$delay_single_quote_subst"`' +GREP='`$ECHO "X$GREP" | $Xsed -e "$delay_single_quote_subst"`' +EGREP='`$ECHO "X$EGREP" | $Xsed -e "$delay_single_quote_subst"`' +FGREP='`$ECHO "X$FGREP" | $Xsed -e "$delay_single_quote_subst"`' +LD='`$ECHO "X$LD" | $Xsed -e "$delay_single_quote_subst"`' +NM='`$ECHO "X$NM" | $Xsed -e "$delay_single_quote_subst"`' +LN_S='`$ECHO "X$LN_S" | $Xsed -e "$delay_single_quote_subst"`' +max_cmd_len='`$ECHO "X$max_cmd_len" | $Xsed -e "$delay_single_quote_subst"`' +ac_objext='`$ECHO "X$ac_objext" | $Xsed -e "$delay_single_quote_subst"`' +exeext='`$ECHO "X$exeext" | $Xsed -e "$delay_single_quote_subst"`' +lt_unset='`$ECHO "X$lt_unset" | $Xsed -e "$delay_single_quote_subst"`' +lt_SP2NL='`$ECHO "X$lt_SP2NL" | $Xsed -e "$delay_single_quote_subst"`' +lt_NL2SP='`$ECHO "X$lt_NL2SP" | $Xsed -e "$delay_single_quote_subst"`' +reload_flag='`$ECHO "X$reload_flag" | $Xsed -e "$delay_single_quote_subst"`' +reload_cmds='`$ECHO "X$reload_cmds" | $Xsed -e "$delay_single_quote_subst"`' +OBJDUMP='`$ECHO "X$OBJDUMP" | $Xsed -e "$delay_single_quote_subst"`' +deplibs_check_method='`$ECHO "X$deplibs_check_method" | $Xsed -e "$delay_single_quote_subst"`' +file_magic_cmd='`$ECHO "X$file_magic_cmd" | $Xsed -e "$delay_single_quote_subst"`' +AR='`$ECHO "X$AR" | $Xsed -e "$delay_single_quote_subst"`' +AR_FLAGS='`$ECHO "X$AR_FLAGS" | $Xsed -e "$delay_single_quote_subst"`' +STRIP='`$ECHO "X$STRIP" | $Xsed -e "$delay_single_quote_subst"`' +RANLIB='`$ECHO "X$RANLIB" | $Xsed -e "$delay_single_quote_subst"`' +old_postinstall_cmds='`$ECHO "X$old_postinstall_cmds" | $Xsed -e "$delay_single_quote_subst"`' +old_postuninstall_cmds='`$ECHO "X$old_postuninstall_cmds" | $Xsed -e "$delay_single_quote_subst"`' +old_archive_cmds='`$ECHO "X$old_archive_cmds" | $Xsed -e "$delay_single_quote_subst"`' +CC='`$ECHO "X$CC" | $Xsed -e "$delay_single_quote_subst"`' +CFLAGS='`$ECHO "X$CFLAGS" | $Xsed -e "$delay_single_quote_subst"`' +compiler='`$ECHO "X$compiler" | $Xsed -e "$delay_single_quote_subst"`' +GCC='`$ECHO "X$GCC" | $Xsed -e "$delay_single_quote_subst"`' +lt_cv_sys_global_symbol_pipe='`$ECHO "X$lt_cv_sys_global_symbol_pipe" | $Xsed -e "$delay_single_quote_subst"`' +lt_cv_sys_global_symbol_to_cdecl='`$ECHO "X$lt_cv_sys_global_symbol_to_cdecl" | $Xsed -e "$delay_single_quote_subst"`' +lt_cv_sys_global_symbol_to_c_name_address='`$ECHO "X$lt_cv_sys_global_symbol_to_c_name_address" | $Xsed -e "$delay_single_quote_subst"`' +lt_cv_sys_global_symbol_to_c_name_address_lib_prefix='`$ECHO "X$lt_cv_sys_global_symbol_to_c_name_address_lib_prefix" | $Xsed -e "$delay_single_quote_subst"`' +objdir='`$ECHO "X$objdir" | $Xsed -e "$delay_single_quote_subst"`' +SHELL='`$ECHO "X$SHELL" | $Xsed -e "$delay_single_quote_subst"`' +ECHO='`$ECHO "X$ECHO" | $Xsed -e "$delay_single_quote_subst"`' +MAGIC_CMD='`$ECHO "X$MAGIC_CMD" | $Xsed -e "$delay_single_quote_subst"`' +lt_prog_compiler_no_builtin_flag='`$ECHO "X$lt_prog_compiler_no_builtin_flag" | $Xsed -e "$delay_single_quote_subst"`' +lt_prog_compiler_wl='`$ECHO "X$lt_prog_compiler_wl" | $Xsed -e "$delay_single_quote_subst"`' +lt_prog_compiler_pic='`$ECHO "X$lt_prog_compiler_pic" | $Xsed -e "$delay_single_quote_subst"`' +lt_prog_compiler_static='`$ECHO "X$lt_prog_compiler_static" | $Xsed -e "$delay_single_quote_subst"`' +lt_cv_prog_compiler_c_o='`$ECHO "X$lt_cv_prog_compiler_c_o" | $Xsed -e "$delay_single_quote_subst"`' +need_locks='`$ECHO "X$need_locks" | $Xsed -e "$delay_single_quote_subst"`' +DSYMUTIL='`$ECHO "X$DSYMUTIL" | $Xsed -e "$delay_single_quote_subst"`' +NMEDIT='`$ECHO "X$NMEDIT" | $Xsed -e "$delay_single_quote_subst"`' +LIPO='`$ECHO "X$LIPO" | $Xsed -e "$delay_single_quote_subst"`' +OTOOL='`$ECHO "X$OTOOL" | $Xsed -e "$delay_single_quote_subst"`' +OTOOL64='`$ECHO "X$OTOOL64" | $Xsed -e "$delay_single_quote_subst"`' +libext='`$ECHO "X$libext" | $Xsed -e "$delay_single_quote_subst"`' +shrext_cmds='`$ECHO "X$shrext_cmds" | $Xsed -e "$delay_single_quote_subst"`' +extract_expsyms_cmds='`$ECHO "X$extract_expsyms_cmds" | $Xsed -e "$delay_single_quote_subst"`' +archive_cmds_need_lc='`$ECHO "X$archive_cmds_need_lc" | $Xsed -e "$delay_single_quote_subst"`' +enable_shared_with_static_runtimes='`$ECHO "X$enable_shared_with_static_runtimes" | $Xsed -e "$delay_single_quote_subst"`' +export_dynamic_flag_spec='`$ECHO "X$export_dynamic_flag_spec" | $Xsed -e "$delay_single_quote_subst"`' +whole_archive_flag_spec='`$ECHO "X$whole_archive_flag_spec" | $Xsed -e "$delay_single_quote_subst"`' +compiler_needs_object='`$ECHO "X$compiler_needs_object" | $Xsed -e "$delay_single_quote_subst"`' +old_archive_from_new_cmds='`$ECHO "X$old_archive_from_new_cmds" | $Xsed -e "$delay_single_quote_subst"`' +old_archive_from_expsyms_cmds='`$ECHO "X$old_archive_from_expsyms_cmds" | $Xsed -e "$delay_single_quote_subst"`' +archive_cmds='`$ECHO "X$archive_cmds" | $Xsed -e "$delay_single_quote_subst"`' +archive_expsym_cmds='`$ECHO "X$archive_expsym_cmds" | $Xsed -e "$delay_single_quote_subst"`' +module_cmds='`$ECHO "X$module_cmds" | $Xsed -e "$delay_single_quote_subst"`' +module_expsym_cmds='`$ECHO "X$module_expsym_cmds" | $Xsed -e "$delay_single_quote_subst"`' +with_gnu_ld='`$ECHO "X$with_gnu_ld" | $Xsed -e "$delay_single_quote_subst"`' +allow_undefined_flag='`$ECHO "X$allow_undefined_flag" | $Xsed -e "$delay_single_quote_subst"`' +no_undefined_flag='`$ECHO "X$no_undefined_flag" | $Xsed -e "$delay_single_quote_subst"`' +hardcode_libdir_flag_spec='`$ECHO "X$hardcode_libdir_flag_spec" | $Xsed -e "$delay_single_quote_subst"`' +hardcode_libdir_flag_spec_ld='`$ECHO "X$hardcode_libdir_flag_spec_ld" | $Xsed -e "$delay_single_quote_subst"`' +hardcode_libdir_separator='`$ECHO "X$hardcode_libdir_separator" | $Xsed -e "$delay_single_quote_subst"`' +hardcode_direct='`$ECHO "X$hardcode_direct" | $Xsed -e "$delay_single_quote_subst"`' +hardcode_direct_absolute='`$ECHO "X$hardcode_direct_absolute" | $Xsed -e "$delay_single_quote_subst"`' +hardcode_minus_L='`$ECHO "X$hardcode_minus_L" | $Xsed -e "$delay_single_quote_subst"`' +hardcode_shlibpath_var='`$ECHO "X$hardcode_shlibpath_var" | $Xsed -e "$delay_single_quote_subst"`' +hardcode_automatic='`$ECHO "X$hardcode_automatic" | $Xsed -e "$delay_single_quote_subst"`' +inherit_rpath='`$ECHO "X$inherit_rpath" | $Xsed -e "$delay_single_quote_subst"`' +link_all_deplibs='`$ECHO "X$link_all_deplibs" | $Xsed -e "$delay_single_quote_subst"`' +fix_srcfile_path='`$ECHO "X$fix_srcfile_path" | $Xsed -e "$delay_single_quote_subst"`' +always_export_symbols='`$ECHO "X$always_export_symbols" | $Xsed -e "$delay_single_quote_subst"`' +export_symbols_cmds='`$ECHO "X$export_symbols_cmds" | $Xsed -e "$delay_single_quote_subst"`' +exclude_expsyms='`$ECHO "X$exclude_expsyms" | $Xsed -e "$delay_single_quote_subst"`' +include_expsyms='`$ECHO "X$include_expsyms" | $Xsed -e "$delay_single_quote_subst"`' +prelink_cmds='`$ECHO "X$prelink_cmds" | $Xsed -e "$delay_single_quote_subst"`' +file_list_spec='`$ECHO "X$file_list_spec" | $Xsed -e "$delay_single_quote_subst"`' +variables_saved_for_relink='`$ECHO "X$variables_saved_for_relink" | $Xsed -e "$delay_single_quote_subst"`' +need_lib_prefix='`$ECHO "X$need_lib_prefix" | $Xsed -e "$delay_single_quote_subst"`' +need_version='`$ECHO "X$need_version" | $Xsed -e "$delay_single_quote_subst"`' +version_type='`$ECHO "X$version_type" | $Xsed -e "$delay_single_quote_subst"`' +runpath_var='`$ECHO "X$runpath_var" | $Xsed -e "$delay_single_quote_subst"`' +shlibpath_var='`$ECHO "X$shlibpath_var" | $Xsed -e "$delay_single_quote_subst"`' +shlibpath_overrides_runpath='`$ECHO "X$shlibpath_overrides_runpath" | $Xsed -e "$delay_single_quote_subst"`' +libname_spec='`$ECHO "X$libname_spec" | $Xsed -e "$delay_single_quote_subst"`' +library_names_spec='`$ECHO "X$library_names_spec" | $Xsed -e "$delay_single_quote_subst"`' +soname_spec='`$ECHO "X$soname_spec" | $Xsed -e "$delay_single_quote_subst"`' +postinstall_cmds='`$ECHO "X$postinstall_cmds" | $Xsed -e "$delay_single_quote_subst"`' +postuninstall_cmds='`$ECHO "X$postuninstall_cmds" | $Xsed -e "$delay_single_quote_subst"`' +finish_cmds='`$ECHO "X$finish_cmds" | $Xsed -e "$delay_single_quote_subst"`' +finish_eval='`$ECHO "X$finish_eval" | $Xsed -e "$delay_single_quote_subst"`' +hardcode_into_libs='`$ECHO "X$hardcode_into_libs" | $Xsed -e "$delay_single_quote_subst"`' +sys_lib_search_path_spec='`$ECHO "X$sys_lib_search_path_spec" | $Xsed -e "$delay_single_quote_subst"`' +sys_lib_dlsearch_path_spec='`$ECHO "X$sys_lib_dlsearch_path_spec" | $Xsed -e "$delay_single_quote_subst"`' +hardcode_action='`$ECHO "X$hardcode_action" | $Xsed -e "$delay_single_quote_subst"`' +enable_dlopen='`$ECHO "X$enable_dlopen" | $Xsed -e "$delay_single_quote_subst"`' +enable_dlopen_self='`$ECHO "X$enable_dlopen_self" | $Xsed -e "$delay_single_quote_subst"`' +enable_dlopen_self_static='`$ECHO "X$enable_dlopen_self_static" | $Xsed -e "$delay_single_quote_subst"`' +old_striplib='`$ECHO "X$old_striplib" | $Xsed -e "$delay_single_quote_subst"`' +striplib='`$ECHO "X$striplib" | $Xsed -e "$delay_single_quote_subst"`' + +LTCC='$LTCC' +LTCFLAGS='$LTCFLAGS' +compiler='$compiler_DEFAULT' + +# Quote evaled strings. +for var in SED \ +GREP \ +EGREP \ +FGREP \ +LD \ +NM \ +LN_S \ +lt_SP2NL \ +lt_NL2SP \ +reload_flag \ +OBJDUMP \ +deplibs_check_method \ +file_magic_cmd \ +AR \ +AR_FLAGS \ +STRIP \ +RANLIB \ +CC \ +CFLAGS \ +compiler \ +lt_cv_sys_global_symbol_pipe \ +lt_cv_sys_global_symbol_to_cdecl \ +lt_cv_sys_global_symbol_to_c_name_address \ +lt_cv_sys_global_symbol_to_c_name_address_lib_prefix \ +SHELL \ +ECHO \ +lt_prog_compiler_no_builtin_flag \ +lt_prog_compiler_wl \ +lt_prog_compiler_pic \ +lt_prog_compiler_static \ +lt_cv_prog_compiler_c_o \ +need_locks \ +DSYMUTIL \ +NMEDIT \ +LIPO \ +OTOOL \ +OTOOL64 \ +shrext_cmds \ +export_dynamic_flag_spec \ +whole_archive_flag_spec \ +compiler_needs_object \ +with_gnu_ld \ +allow_undefined_flag \ +no_undefined_flag \ +hardcode_libdir_flag_spec \ +hardcode_libdir_flag_spec_ld \ +hardcode_libdir_separator \ +fix_srcfile_path \ +exclude_expsyms \ +include_expsyms \ +file_list_spec \ +variables_saved_for_relink \ +libname_spec \ +library_names_spec \ +soname_spec \ +finish_eval \ +old_striplib \ +striplib; do + case \`eval \\\\\$ECHO "X\\\\\$\$var"\` in + *[\\\\\\\`\\"\\\$]*) + eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"X\\\$\$var\\" | \\\$Xsed -e \\"\\\$sed_quote_subst\\"\\\`\\\\\\"" + ;; + *) + eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\"" + ;; + esac +done + +# Double-quote double-evaled strings. +for var in reload_cmds \ +old_postinstall_cmds \ +old_postuninstall_cmds \ +old_archive_cmds \ +extract_expsyms_cmds \ +old_archive_from_new_cmds \ +old_archive_from_expsyms_cmds \ +archive_cmds \ +archive_expsym_cmds \ +module_cmds \ +module_expsym_cmds \ +export_symbols_cmds \ +prelink_cmds \ +postinstall_cmds \ +postuninstall_cmds \ +finish_cmds \ +sys_lib_search_path_spec \ +sys_lib_dlsearch_path_spec; do + case \`eval \\\\\$ECHO "X\\\\\$\$var"\` in + *[\\\\\\\`\\"\\\$]*) + eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"X\\\$\$var\\" | \\\$Xsed -e \\"\\\$double_quote_subst\\" -e \\"\\\$sed_quote_subst\\" -e \\"\\\$delay_variable_subst\\"\\\`\\\\\\"" + ;; + *) + eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\"" + ;; + esac +done + +# Fix-up fallback echo if it was mangled by the above quoting rules. +case \$lt_ECHO in +*'\\\$0 --fallback-echo"') lt_ECHO=\`\$ECHO "X\$lt_ECHO" | \$Xsed -e 's/\\\\\\\\\\\\\\\$0 --fallback-echo"\$/\$0 --fallback-echo"/'\` + ;; +esac + +ac_aux_dir='$ac_aux_dir' +xsi_shell='$xsi_shell' +lt_shell_append='$lt_shell_append' + +# See if we are running on zsh, and set the options which allow our +# commands through without removal of \ escapes INIT. +if test -n "\${ZSH_VERSION+set}" ; then + setopt NO_GLOB_SUBST +fi + + + PACKAGE='$PACKAGE' + VERSION='$VERSION' + TIMESTAMP='$TIMESTAMP' + RM='$RM' + ofile='$ofile' + + + TARGETDIR="$TARGETDIR" _ACEOF @@ -6938,10 +13524,16 @@ case $ac_config_target in "fficonfig.h") CONFIG_HEADERS="$CONFIG_HEADERS fficonfig.h" ;; "depfiles") CONFIG_COMMANDS="$CONFIG_COMMANDS depfiles" ;; + "libtool") CONFIG_COMMANDS="$CONFIG_COMMANDS libtool" ;; "include") CONFIG_COMMANDS="$CONFIG_COMMANDS include" ;; "src") CONFIG_COMMANDS="$CONFIG_COMMANDS src" ;; "include/ffitarget.h") CONFIG_LINKS="$CONFIG_LINKS include/ffitarget.h:src/$TARGETDIR/ffitarget.h" ;; + "include/Makefile") CONFIG_FILES="$CONFIG_FILES include/Makefile" ;; "include/ffi.h") CONFIG_FILES="$CONFIG_FILES include/ffi.h" ;; + "Makefile") CONFIG_FILES="$CONFIG_FILES Makefile" ;; + "testsuite/Makefile") CONFIG_FILES="$CONFIG_FILES testsuite/Makefile" ;; + "man/Makefile") CONFIG_FILES="$CONFIG_FILES man/Makefile" ;; + "libffi.pc") CONFIG_FILES="$CONFIG_FILES libffi.pc" ;; "include/ffi_common.h") CONFIG_LINKS="$CONFIG_LINKS include/ffi_common.h:include/ffi_common.h" ;; "fficonfig.py") CONFIG_FILES="$CONFIG_FILES fficonfig.py" ;; @@ -7655,6 +14247,641 @@ done } ;; + "libtool":C) + + # See if we are running on zsh, and set the options which allow our + # commands through without removal of \ escapes. + if test -n "${ZSH_VERSION+set}" ; then + setopt NO_GLOB_SUBST + fi + + cfgfile="${ofile}T" + trap "$RM \"$cfgfile\"; exit 1" 1 2 15 + $RM "$cfgfile" + + cat <<_LT_EOF >> "$cfgfile" +#! $SHELL + +# `$ECHO "$ofile" | sed 's%^.*/%%'` - Provide generalized library-building support services. +# Generated automatically by $as_me ($PACKAGE$TIMESTAMP) $VERSION +# Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`: +# NOTE: Changes made to this file will be lost: look at ltmain.sh. +# +# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005, +# 2006, 2007, 2008 Free Software Foundation, Inc. +# Written by Gordon Matzigkeit, 1996 +# +# This file is part of GNU Libtool. +# +# GNU Libtool is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License as +# published by the Free Software Foundation; either version 2 of +# the License, or (at your option) any later version. +# +# As a special exception to the GNU General Public License, +# if you distribute this file as part of a program or library that +# is built using GNU Libtool, you may include this file under the +# same distribution terms that you use for the rest of that program. +# +# GNU Libtool is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with GNU Libtool; see the file COPYING. If not, a copy +# can be downloaded from http://www.gnu.org/licenses/gpl.html, or +# obtained by writing to the Free Software Foundation, Inc., +# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + + +# The names of the tagged configurations supported by this script. +available_tags="" + +# ### BEGIN LIBTOOL CONFIG + +# Which release of libtool.m4 was used? +macro_version=$macro_version +macro_revision=$macro_revision + +# Whether or not to build shared libraries. +build_libtool_libs=$enable_shared + +# Whether or not to build static libraries. +build_old_libs=$enable_static + +# What type of objects to build. +pic_mode=$pic_mode + +# Whether or not to optimize for fast installation. +fast_install=$enable_fast_install + +# The host system. +host_alias=$host_alias +host=$host +host_os=$host_os + +# The build system. +build_alias=$build_alias +build=$build +build_os=$build_os + +# A sed program that does not truncate output. +SED=$lt_SED + +# Sed that helps us avoid accidentally triggering echo(1) options like -n. +Xsed="\$SED -e 1s/^X//" + +# A grep program that handles long lines. +GREP=$lt_GREP + +# An ERE matcher. +EGREP=$lt_EGREP + +# A literal string matcher. +FGREP=$lt_FGREP + +# A BSD- or MS-compatible name lister. +NM=$lt_NM + +# Whether we need soft or hard links. +LN_S=$lt_LN_S + +# What is the maximum length of a command? +max_cmd_len=$max_cmd_len + +# Object file suffix (normally "o"). +objext=$ac_objext + +# Executable file suffix (normally ""). +exeext=$exeext + +# whether the shell understands "unset". +lt_unset=$lt_unset + +# turn spaces into newlines. +SP2NL=$lt_lt_SP2NL + +# turn newlines into spaces. +NL2SP=$lt_lt_NL2SP + +# How to create reloadable object files. +reload_flag=$lt_reload_flag +reload_cmds=$lt_reload_cmds + +# An object symbol dumper. +OBJDUMP=$lt_OBJDUMP + +# Method to check whether dependent libraries are shared objects. +deplibs_check_method=$lt_deplibs_check_method + +# Command to use when deplibs_check_method == "file_magic". +file_magic_cmd=$lt_file_magic_cmd + +# The archiver. +AR=$lt_AR +AR_FLAGS=$lt_AR_FLAGS + +# A symbol stripping program. +STRIP=$lt_STRIP + +# Commands used to install an old-style archive. +RANLIB=$lt_RANLIB +old_postinstall_cmds=$lt_old_postinstall_cmds +old_postuninstall_cmds=$lt_old_postuninstall_cmds + +# A C compiler. +LTCC=$lt_CC + +# LTCC compiler flags. +LTCFLAGS=$lt_CFLAGS + +# Take the output of nm and produce a listing of raw symbols and C names. +global_symbol_pipe=$lt_lt_cv_sys_global_symbol_pipe + +# Transform the output of nm in a proper C declaration. +global_symbol_to_cdecl=$lt_lt_cv_sys_global_symbol_to_cdecl + +# Transform the output of nm in a C name address pair. +global_symbol_to_c_name_address=$lt_lt_cv_sys_global_symbol_to_c_name_address + +# Transform the output of nm in a C name address pair when lib prefix is needed. +global_symbol_to_c_name_address_lib_prefix=$lt_lt_cv_sys_global_symbol_to_c_name_address_lib_prefix + +# The name of the directory that contains temporary libtool files. +objdir=$objdir + +# Shell to use when invoking shell scripts. +SHELL=$lt_SHELL + +# An echo program that does not interpret backslashes. +ECHO=$lt_ECHO + +# Used to examine libraries when file_magic_cmd begins with "file". +MAGIC_CMD=$MAGIC_CMD + +# Must we lock files when doing compilation? +need_locks=$lt_need_locks + +# Tool to manipulate archived DWARF debug symbol files on Mac OS X. +DSYMUTIL=$lt_DSYMUTIL + +# Tool to change global to local symbols on Mac OS X. +NMEDIT=$lt_NMEDIT + +# Tool to manipulate fat objects and archives on Mac OS X. +LIPO=$lt_LIPO + +# ldd/readelf like tool for Mach-O binaries on Mac OS X. +OTOOL=$lt_OTOOL + +# ldd/readelf like tool for 64 bit Mach-O binaries on Mac OS X 10.4. +OTOOL64=$lt_OTOOL64 + +# Old archive suffix (normally "a"). +libext=$libext + +# Shared library suffix (normally ".so"). +shrext_cmds=$lt_shrext_cmds + +# The commands to extract the exported symbol list from a shared archive. +extract_expsyms_cmds=$lt_extract_expsyms_cmds + +# Variables whose values should be saved in libtool wrapper scripts and +# restored at link time. +variables_saved_for_relink=$lt_variables_saved_for_relink + +# Do we need the "lib" prefix for modules? +need_lib_prefix=$need_lib_prefix + +# Do we need a version for libraries? +need_version=$need_version + +# Library versioning type. +version_type=$version_type + +# Shared library runtime path variable. +runpath_var=$runpath_var + +# Shared library path variable. +shlibpath_var=$shlibpath_var + +# Is shlibpath searched before the hard-coded library search path? +shlibpath_overrides_runpath=$shlibpath_overrides_runpath + +# Format of library name prefix. +libname_spec=$lt_libname_spec + +# List of archive names. First name is the real one, the rest are links. +# The last name is the one that the linker finds with -lNAME +library_names_spec=$lt_library_names_spec + +# The coded name of the library, if different from the real name. +soname_spec=$lt_soname_spec + +# Command to use after installation of a shared archive. +postinstall_cmds=$lt_postinstall_cmds + +# Command to use after uninstallation of a shared archive. +postuninstall_cmds=$lt_postuninstall_cmds + +# Commands used to finish a libtool library installation in a directory. +finish_cmds=$lt_finish_cmds + +# As "finish_cmds", except a single script fragment to be evaled but +# not shown. +finish_eval=$lt_finish_eval + +# Whether we should hardcode library paths into libraries. +hardcode_into_libs=$hardcode_into_libs + +# Compile-time system search path for libraries. +sys_lib_search_path_spec=$lt_sys_lib_search_path_spec + +# Run-time system search path for libraries. +sys_lib_dlsearch_path_spec=$lt_sys_lib_dlsearch_path_spec + +# Whether dlopen is supported. +dlopen_support=$enable_dlopen + +# Whether dlopen of programs is supported. +dlopen_self=$enable_dlopen_self + +# Whether dlopen of statically linked programs is supported. +dlopen_self_static=$enable_dlopen_self_static + +# Commands to strip libraries. +old_striplib=$lt_old_striplib +striplib=$lt_striplib + + +# The linker used to build libraries. +LD=$lt_LD + +# Commands used to build an old-style archive. +old_archive_cmds=$lt_old_archive_cmds + +# A language specific compiler. +CC=$lt_compiler + +# Is the compiler the GNU compiler? +with_gcc=$GCC + +# Compiler flag to turn off builtin functions. +no_builtin_flag=$lt_lt_prog_compiler_no_builtin_flag + +# How to pass a linker flag through the compiler. +wl=$lt_lt_prog_compiler_wl + +# Additional compiler flags for building library objects. +pic_flag=$lt_lt_prog_compiler_pic + +# Compiler flag to prevent dynamic linking. +link_static_flag=$lt_lt_prog_compiler_static + +# Does compiler simultaneously support -c and -o options? +compiler_c_o=$lt_lt_cv_prog_compiler_c_o + +# Whether or not to add -lc for building shared libraries. +build_libtool_need_lc=$archive_cmds_need_lc + +# Whether or not to disallow shared libs when runtime libs are static. +allow_libtool_libs_with_static_runtimes=$enable_shared_with_static_runtimes + +# Compiler flag to allow reflexive dlopens. +export_dynamic_flag_spec=$lt_export_dynamic_flag_spec + +# Compiler flag to generate shared objects directly from archives. +whole_archive_flag_spec=$lt_whole_archive_flag_spec + +# Whether the compiler copes with passing no objects directly. +compiler_needs_object=$lt_compiler_needs_object + +# Create an old-style archive from a shared archive. +old_archive_from_new_cmds=$lt_old_archive_from_new_cmds + +# Create a temporary old-style archive to link instead of a shared archive. +old_archive_from_expsyms_cmds=$lt_old_archive_from_expsyms_cmds + +# Commands used to build a shared archive. +archive_cmds=$lt_archive_cmds +archive_expsym_cmds=$lt_archive_expsym_cmds + +# Commands used to build a loadable module if different from building +# a shared archive. +module_cmds=$lt_module_cmds +module_expsym_cmds=$lt_module_expsym_cmds + +# Whether we are building with GNU ld or not. +with_gnu_ld=$lt_with_gnu_ld + +# Flag that allows shared libraries with undefined symbols to be built. +allow_undefined_flag=$lt_allow_undefined_flag + +# Flag that enforces no undefined symbols. +no_undefined_flag=$lt_no_undefined_flag + +# Flag to hardcode \$libdir into a binary during linking. +# This must work even if \$libdir does not exist +hardcode_libdir_flag_spec=$lt_hardcode_libdir_flag_spec + +# If ld is used when linking, flag to hardcode \$libdir into a binary +# during linking. This must work even if \$libdir does not exist. +hardcode_libdir_flag_spec_ld=$lt_hardcode_libdir_flag_spec_ld + +# Whether we need a single "-rpath" flag with a separated argument. +hardcode_libdir_separator=$lt_hardcode_libdir_separator + +# Set to "yes" if using DIR/libNAME\${shared_ext} during linking hardcodes +# DIR into the resulting binary. +hardcode_direct=$hardcode_direct + +# Set to "yes" if using DIR/libNAME\${shared_ext} during linking hardcodes +# DIR into the resulting binary and the resulting library dependency is +# "absolute",i.e impossible to change by setting \${shlibpath_var} if the +# library is relocated. +hardcode_direct_absolute=$hardcode_direct_absolute + +# Set to "yes" if using the -LDIR flag during linking hardcodes DIR +# into the resulting binary. +hardcode_minus_L=$hardcode_minus_L + +# Set to "yes" if using SHLIBPATH_VAR=DIR during linking hardcodes DIR +# into the resulting binary. +hardcode_shlibpath_var=$hardcode_shlibpath_var + +# Set to "yes" if building a shared library automatically hardcodes DIR +# into the library and all subsequent libraries and executables linked +# against it. +hardcode_automatic=$hardcode_automatic + +# Set to yes if linker adds runtime paths of dependent libraries +# to runtime path list. +inherit_rpath=$inherit_rpath + +# Whether libtool must link a program against all its dependency libraries. +link_all_deplibs=$link_all_deplibs + +# Fix the shell variable \$srcfile for the compiler. +fix_srcfile_path=$lt_fix_srcfile_path + +# Set to "yes" if exported symbols are required. +always_export_symbols=$always_export_symbols + +# The commands to list exported symbols. +export_symbols_cmds=$lt_export_symbols_cmds + +# Symbols that should not be listed in the preloaded symbols. +exclude_expsyms=$lt_exclude_expsyms + +# Symbols that must always be exported. +include_expsyms=$lt_include_expsyms + +# Commands necessary for linking programs (against libraries) with templates. +prelink_cmds=$lt_prelink_cmds + +# Specify filename containing input files. +file_list_spec=$lt_file_list_spec + +# How to hardcode a shared library path into an executable. +hardcode_action=$hardcode_action + +# ### END LIBTOOL CONFIG + +_LT_EOF + + case $host_os in + aix3*) + cat <<\_LT_EOF >> "$cfgfile" +# AIX sometimes has problems with the GCC collect2 program. For some +# reason, if we set the COLLECT_NAMES environment variable, the problems +# vanish in a puff of smoke. +if test "X${COLLECT_NAMES+set}" != Xset; then + COLLECT_NAMES= + export COLLECT_NAMES +fi +_LT_EOF + ;; + esac + + +ltmain="$ac_aux_dir/ltmain.sh" + + + # We use sed instead of cat because bash on DJGPP gets confused if + # if finds mixed CR/LF and LF-only lines. Since sed operates in + # text mode, it properly converts lines to CR/LF. This bash problem + # is reportedly fixed, but why not run on old versions too? + sed '/^# Generated shell functions inserted here/q' "$ltmain" >> "$cfgfile" \ + || (rm -f "$cfgfile"; exit 1) + + case $xsi_shell in + yes) + cat << \_LT_EOF >> "$cfgfile" + +# func_dirname file append nondir_replacement +# Compute the dirname of FILE. If nonempty, add APPEND to the result, +# otherwise set result to NONDIR_REPLACEMENT. +func_dirname () +{ + case ${1} in + */*) func_dirname_result="${1%/*}${2}" ;; + * ) func_dirname_result="${3}" ;; + esac +} + +# func_basename file +func_basename () +{ + func_basename_result="${1##*/}" +} + +# func_dirname_and_basename file append nondir_replacement +# perform func_basename and func_dirname in a single function +# call: +# dirname: Compute the dirname of FILE. If nonempty, +# add APPEND to the result, otherwise set result +# to NONDIR_REPLACEMENT. +# value returned in "$func_dirname_result" +# basename: Compute filename of FILE. +# value retuned in "$func_basename_result" +# Implementation must be kept synchronized with func_dirname +# and func_basename. For efficiency, we do not delegate to +# those functions but instead duplicate the functionality here. +func_dirname_and_basename () +{ + case ${1} in + */*) func_dirname_result="${1%/*}${2}" ;; + * ) func_dirname_result="${3}" ;; + esac + func_basename_result="${1##*/}" +} + +# func_stripname prefix suffix name +# strip PREFIX and SUFFIX off of NAME. +# PREFIX and SUFFIX must not contain globbing or regex special +# characters, hashes, percent signs, but SUFFIX may contain a leading +# dot (in which case that matches only a dot). +func_stripname () +{ + # pdksh 5.2.14 does not do ${X%$Y} correctly if both X and Y are + # positional parameters, so assign one to ordinary parameter first. + func_stripname_result=${3} + func_stripname_result=${func_stripname_result#"${1}"} + func_stripname_result=${func_stripname_result%"${2}"} +} + +# func_opt_split +func_opt_split () +{ + func_opt_split_opt=${1%%=*} + func_opt_split_arg=${1#*=} +} + +# func_lo2o object +func_lo2o () +{ + case ${1} in + *.lo) func_lo2o_result=${1%.lo}.${objext} ;; + *) func_lo2o_result=${1} ;; + esac +} + +# func_xform libobj-or-source +func_xform () +{ + func_xform_result=${1%.*}.lo +} + +# func_arith arithmetic-term... +func_arith () +{ + func_arith_result=$(( $* )) +} + +# func_len string +# STRING may not start with a hyphen. +func_len () +{ + func_len_result=${#1} +} + +_LT_EOF + ;; + *) # Bourne compatible functions. + cat << \_LT_EOF >> "$cfgfile" + +# func_dirname file append nondir_replacement +# Compute the dirname of FILE. If nonempty, add APPEND to the result, +# otherwise set result to NONDIR_REPLACEMENT. +func_dirname () +{ + # Extract subdirectory from the argument. + func_dirname_result=`$ECHO "X${1}" | $Xsed -e "$dirname"` + if test "X$func_dirname_result" = "X${1}"; then + func_dirname_result="${3}" + else + func_dirname_result="$func_dirname_result${2}" + fi +} + +# func_basename file +func_basename () +{ + func_basename_result=`$ECHO "X${1}" | $Xsed -e "$basename"` +} + + +# func_stripname prefix suffix name +# strip PREFIX and SUFFIX off of NAME. +# PREFIX and SUFFIX must not contain globbing or regex special +# characters, hashes, percent signs, but SUFFIX may contain a leading +# dot (in which case that matches only a dot). +# func_strip_suffix prefix name +func_stripname () +{ + case ${2} in + .*) func_stripname_result=`$ECHO "X${3}" \ + | $Xsed -e "s%^${1}%%" -e "s%\\\\${2}\$%%"`;; + *) func_stripname_result=`$ECHO "X${3}" \ + | $Xsed -e "s%^${1}%%" -e "s%${2}\$%%"`;; + esac +} + +# sed scripts: +my_sed_long_opt='1s/^\(-[^=]*\)=.*/\1/;q' +my_sed_long_arg='1s/^-[^=]*=//' + +# func_opt_split +func_opt_split () +{ + func_opt_split_opt=`$ECHO "X${1}" | $Xsed -e "$my_sed_long_opt"` + func_opt_split_arg=`$ECHO "X${1}" | $Xsed -e "$my_sed_long_arg"` +} + +# func_lo2o object +func_lo2o () +{ + func_lo2o_result=`$ECHO "X${1}" | $Xsed -e "$lo2o"` +} + +# func_xform libobj-or-source +func_xform () +{ + func_xform_result=`$ECHO "X${1}" | $Xsed -e 's/\.[^.]*$/.lo/'` +} + +# func_arith arithmetic-term... +func_arith () +{ + func_arith_result=`expr "$@"` +} + +# func_len string +# STRING may not start with a hyphen. +func_len () +{ + func_len_result=`expr "$1" : ".*" 2>/dev/null || echo $max_cmd_len` +} + +_LT_EOF +esac + +case $lt_shell_append in + yes) + cat << \_LT_EOF >> "$cfgfile" + +# func_append var value +# Append VALUE to the end of shell variable VAR. +func_append () +{ + eval "$1+=\$2" +} +_LT_EOF + ;; + *) + cat << \_LT_EOF >> "$cfgfile" + +# func_append var value +# Append VALUE to the end of shell variable VAR. +func_append () +{ + eval "$1=\$$1\$2" +} + +_LT_EOF + ;; + esac + + + sed -n '/^# Generated shell functions inserted here/,$p' "$ltmain" >> "$cfgfile" \ + || (rm -f "$cfgfile"; exit 1) + + mv -f "$cfgfile" "$ofile" || + (rm -f "$ofile" && cp "$cfgfile" "$ofile" && rm -f "$cfgfile") + chmod +x "$ofile" + + ;; "include":C) test -d include || mkdir include ;; "src":C) test -d src || mkdir src Modified: python/branches/py3k-jit/Modules/_ctypes/libffi/configure.ac ============================================================================== --- python/branches/py3k-jit/Modules/_ctypes/libffi/configure.ac (original) +++ python/branches/py3k-jit/Modules/_ctypes/libffi/configure.ac Fri Mar 19 22:41:36 2010 @@ -5,7 +5,7 @@ AC_PREREQ(2.63) -AC_INIT([libffi], [3.0.9], [http://gcc.gnu.org/bugs.html]) +AC_INIT([libffi], [3.0.10rc0], [http://gcc.gnu.org/bugs.html]) AC_CONFIG_HEADERS([fficonfig.h]) AC_CANONICAL_SYSTEM @@ -58,6 +58,10 @@ TARGET=X86_64; TARGETDIR=x86 ;; + amd64-*-freebsd*) + TARGET=X86_64; TARGETDIR=x86 + ;; + avr32*-*-*) TARGET=AVR32; TARGETDIR=avr32 ;; @@ -405,7 +409,7 @@ AC_CONFIG_LINKS(include/ffitarget.h:src/$TARGETDIR/ffitarget.h) -AC_CONFIG_FILES(include/ffi.h) +AC_CONFIG_FILES(include/Makefile include/ffi.h Makefile testsuite/Makefile man/Makefile libffi.pc) AC_CONFIG_LINKS(include/ffi_common.h:include/ffi_common.h) Modified: python/branches/py3k-jit/Modules/_ctypes/libffi/doc/libffi.info ============================================================================== --- python/branches/py3k-jit/Modules/_ctypes/libffi/doc/libffi.info (original) +++ python/branches/py3k-jit/Modules/_ctypes/libffi/doc/libffi.info Fri Mar 19 22:41:36 2010 @@ -4,7 +4,7 @@ This manual is for Libffi, a portable foreign-function interface library. - Copyright (C) 2008 Red Hat, Inc. + Copyright (C) 2008, 2010 Red Hat, Inc. Permission is granted to copy, distribute and/or modify this document under the terms of the GNU General Public License as @@ -27,7 +27,7 @@ This manual is for Libffi, a portable foreign-function interface library. - Copyright (C) 2008 Red Hat, Inc. + Copyright (C) 2008, 2010 Red Hat, Inc. Permission is granted to copy, distribute and/or modify this document under the terms of the GNU General Public License as @@ -89,6 +89,7 @@ * Types:: libffi type descriptions. * Multiple ABIs:: Different passing styles on one platform. * The Closure API:: Writing a generic function. +* Closure Example:: A closure example.  File: libffi.info, Node: The Basics, Next: Simple Example, Up: Using libffi @@ -368,7 +369,7 @@ necessarily platform-specific.  -File: libffi.info, Node: The Closure API, Prev: Multiple ABIs, Up: Using libffi +File: libffi.info, Node: The Closure API, Next: Closure Example, Prev: Multiple ABIs, Up: Using libffi 2.5 The Closure API =================== @@ -444,6 +445,62 @@ executable addresses.  +File: libffi.info, Node: Closure Example, Prev: The Closure API, Up: Using libffi + +2.6 Closure Example +=================== + +A trivial example that creates a new `puts' by binding `fputs' with +`stdin'. + + #include + #include + + /* Acts like puts with the file given at time of enclosure. */ + void puts_binding(ffi_cif *cif, unsigned int *ret, void* args[], + FILE *stream) + { + *ret = fputs(*(char **)args[0], stream); + } + + int main() + { + ffi_cif cif; + ffi_type *args[1]; + ffi_closure *closure; + + int (*bound_puts)(char *); + int rc; + + /* Allocate closure and bound_puts */ + closure = ffi_closure_alloc(sizeof(ffi_closure), &bound_puts); + + if (closure) + { + /* Initialize the argument info vectors */ + args[0] = &ffi_type_pointer; + + /* Initialize the cif */ + if (ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 1, + &ffi_type_uint, args) == FFI_OK) + { + /* Initialize the closure, setting stream to stdout */ + if (ffi_prep_closure_loc(closure, &cif, puts_binding, + stdout, bound_puts) == FFI_OK) + { + rc = bound_puts("Hello World!"); + /* rc now holds the result of the call to fputs */ + } + } + } + + /* Deallocate both closure, and bound_puts */ + ffi_closure_free(closure); + + return 0; + } + + File: libffi.info, Node: Missing Features, Next: Index, Prev: Using libffi, Up: Top 3 Missing Features @@ -516,18 +573,19 @@  Tag Table: -Node: Top700 -Node: Introduction1436 -Node: Using libffi3072 -Node: The Basics3507 -Node: Simple Example6114 -Node: Types7141 -Node: Primitive Types7424 -Node: Structures9244 -Node: Type Example10104 -Node: Multiple ABIs11327 -Node: The Closure API11698 -Node: Missing Features14618 -Node: Index15111 +Node: Top706 +Node: Introduction1448 +Node: Using libffi3084 +Node: The Basics3570 +Node: Simple Example6177 +Node: Types7204 +Node: Primitive Types7487 +Node: Structures9307 +Node: Type Example10167 +Node: Multiple ABIs11390 +Node: The Closure API11761 +Node: Closure Example14705 +Node: Missing Features16264 +Node: Index16757  End Tag Table Modified: python/branches/py3k-jit/Modules/_ctypes/libffi/doc/libffi.texi ============================================================================== --- python/branches/py3k-jit/Modules/_ctypes/libffi/doc/libffi.texi (original) +++ python/branches/py3k-jit/Modules/_ctypes/libffi/doc/libffi.texi Fri Mar 19 22:41:36 2010 @@ -19,7 +19,7 @@ This manual is for Libffi, a portable foreign-function interface library. -Copyright @copyright{} 2008 Red Hat, Inc. +Copyright @copyright{} 2008, 2010 Red Hat, Inc. @quotation Permission is granted to copy, distribute and/or modify this document @@ -106,6 +106,7 @@ * Types:: libffi type descriptions. * Multiple ABIs:: Different passing styles on one platform. * The Closure API:: Writing a generic function. +* Closure Example:: A closure example. @end menu @@ -500,12 +501,66 @@ to the appropriate pointer-to-function type. @end defun - at c FIXME: example - You may see old code referring to @code{ffi_prep_closure}. This function is deprecated, as it cannot handle the need for separate writable and executable addresses. + at node Closure Example + at section Closure Example + +A trivial example that creates a new @code{puts} by binding + at code{fputs} with @code{stdin}. + + at example +#include +#include + +/* Acts like puts with the file given at time of enclosure. */ +void puts_binding(ffi_cif *cif, unsigned int *ret, void* args[], + FILE *stream) +@{ + *ret = fputs(*(char **)args[0], stream); +@} + +int main() +@{ + ffi_cif cif; + ffi_type *args[1]; + ffi_closure *closure; + + int (*bound_puts)(char *); + int rc; + + /* Allocate closure and bound_puts */ + closure = ffi_closure_alloc(sizeof(ffi_closure), &bound_puts); + + if (closure) + @{ + /* Initialize the argument info vectors */ + args[0] = &ffi_type_pointer; + + /* Initialize the cif */ + if (ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 1, + &ffi_type_uint, args) == FFI_OK) + @{ + /* Initialize the closure, setting stream to stdout */ + if (ffi_prep_closure_loc(closure, &cif, puts_binding, + stdout, bound_puts) == FFI_OK) + @{ + rc = bound_puts("Hello World!"); + /* rc now holds the result of the call to fputs */ + @} + @} + @} + + /* Deallocate both closure, and bound_puts */ + ffi_closure_free(closure); + + return 0; +@} + + at end example + @node Missing Features @chapter Missing Features @@ -525,6 +580,8 @@ @item The closure API is + at c FIXME: ... + @item The ``raw'' API is undocumented. @c argument promotion? Modified: python/branches/py3k-jit/Modules/_ctypes/libffi/doc/stamp-vti ============================================================================== --- python/branches/py3k-jit/Modules/_ctypes/libffi/doc/stamp-vti (original) +++ python/branches/py3k-jit/Modules/_ctypes/libffi/doc/stamp-vti Fri Mar 19 22:41:36 2010 @@ -1,4 +1,4 @@ - at set UPDATED 29 December 2009 - at set UPDATED-MONTH December 2009 - at set EDITION 3.0.9 - at set VERSION 3.0.9 + at set UPDATED 14 February 2008 + at set UPDATED-MONTH February 2008 + at set EDITION 3.0.8 + at set VERSION 3.0.8 Modified: python/branches/py3k-jit/Modules/_ctypes/libffi/doc/version.texi ============================================================================== --- python/branches/py3k-jit/Modules/_ctypes/libffi/doc/version.texi (original) +++ python/branches/py3k-jit/Modules/_ctypes/libffi/doc/version.texi Fri Mar 19 22:41:36 2010 @@ -1,4 +1,4 @@ - at set UPDATED 29 December 2009 - at set UPDATED-MONTH December 2009 - at set EDITION 3.0.9 - at set VERSION 3.0.9 + at set UPDATED 14 February 2008 + at set UPDATED-MONTH February 2008 + at set EDITION 3.0.8 + at set VERSION 3.0.8 Modified: python/branches/py3k-jit/Modules/_ctypes/libffi/fficonfig.h.in ============================================================================== --- python/branches/py3k-jit/Modules/_ctypes/libffi/fficonfig.h.in (original) +++ python/branches/py3k-jit/Modules/_ctypes/libffi/fficonfig.h.in Fri Mar 19 22:41:36 2010 @@ -125,6 +125,9 @@ /* Define to the one symbol short name of this package. */ #undef PACKAGE_TARNAME +/* Define to the home page for this package. */ +#undef PACKAGE_URL + /* Define to the version of this package. */ #undef PACKAGE_VERSION Modified: python/branches/py3k-jit/Modules/_ctypes/libffi/include/ffi.h.in ============================================================================== --- python/branches/py3k-jit/Modules/_ctypes/libffi/include/ffi.h.in (original) +++ python/branches/py3k-jit/Modules/_ctypes/libffi/include/ffi.h.in Fri Mar 19 22:41:36 2010 @@ -251,6 +251,9 @@ #if FFI_CLOSURES +#ifdef _MSC_VER +__declspec(align(8)) +#endif typedef struct { char tramp[FFI_TRAMPOLINE_SIZE]; ffi_cif *cif; Modified: python/branches/py3k-jit/Modules/_ctypes/libffi/src/closures.c ============================================================================== --- python/branches/py3k-jit/Modules/_ctypes/libffi/src/closures.c (original) +++ python/branches/py3k-jit/Modules/_ctypes/libffi/src/closures.c Fri Mar 19 22:41:36 2010 @@ -1,5 +1,5 @@ /* ----------------------------------------------------------------------- - closures.c - Copyright (c) 2007, 2009 Red Hat, Inc. + closures.c - Copyright (c) 2007 Red Hat, Inc. Copyright (C) 2007, 2009 Free Software Foundation, Inc Code to allocate and deallocate memory for closures. @@ -209,8 +209,6 @@ #if !(defined(X86_WIN32) || defined(X86_WIN64)) || defined (__CYGWIN__) -#if FFI_MMAP_EXEC_SELINUX - /* A mutex used to synchronize access to *exec* variables in this file. */ static pthread_mutex_t open_temp_exec_file_mutex = PTHREAD_MUTEX_INITIALIZER; @@ -480,27 +478,6 @@ return dlmmap_locked (start, length, prot, flags, offset); } -#else - -static void * -dlmmap (void *start, size_t length, int prot, - int flags, int fd, off_t offset) -{ - - assert (start == NULL && length % malloc_getpagesize == 0 - && prot == (PROT_READ | PROT_WRITE) - && flags == (MAP_PRIVATE | MAP_ANONYMOUS) - && fd == -1 && offset == 0); - -#if FFI_CLOSURE_TEST - printf ("mapping in %zi\n", length); -#endif - - return mmap (start, length, prot | PROT_EXEC, flags, fd, offset); -} - -#endif - /* Release memory at the given address, as well as the corresponding executable page if it's separate. */ static int Modified: python/branches/py3k-jit/Modules/_ctypes/libffi/src/mips/n32.S ============================================================================== --- python/branches/py3k-jit/Modules/_ctypes/libffi/src/mips/n32.S (original) +++ python/branches/py3k-jit/Modules/_ctypes/libffi/src/mips/n32.S Fri Mar 19 22:41:36 2010 @@ -1,5 +1,5 @@ /* ----------------------------------------------------------------------- - n32.S - Copyright (c) 1996, 1998, 2005 Red Hat, Inc. + n32.S - Copyright (c) 1996, 1998, 2005, 2007, 2009, 2010 Red Hat, Inc. MIPS Foreign Function Interface @@ -40,7 +40,7 @@ #define SIZEOF_FRAME ( 8 * FFI_SIZEOF_ARG ) -#ifdef linux +#ifdef __GNUC__ .abicalls #endif .text @@ -529,7 +529,7 @@ .LFE2: .end ffi_closure_N32 -#ifdef linux +#ifdef __GNUC__ .section .eh_frame,"aw", at progbits .Lframe1: .4byte .LECIE1-.LSCIE1 # length @@ -586,6 +586,6 @@ .uleb128 (SIZEOF_FRAME2 - RA_OFF2)/4 .align EH_FRAME_ALIGN .LEFDE3: -#endif /* linux */ +#endif /* __GNUC__ */ #endif Modified: python/branches/py3k-jit/Modules/_ctypes/libffi/src/prep_cif.c ============================================================================== --- python/branches/py3k-jit/Modules/_ctypes/libffi/src/prep_cif.c (original) +++ python/branches/py3k-jit/Modules/_ctypes/libffi/src/prep_cif.c Fri Mar 19 22:41:36 2010 @@ -109,16 +109,13 @@ /* 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 && !defined PA + /* x86, x86-64 and s390 stack space allocation is handled in prep_machdep. */ +#if !defined M68K && !defined __i386__ && !defined __x86_64__ && !defined S390 && !defined PA /* Make space for the return structure pointer */ if (cif->rtype->type == FFI_TYPE_STRUCT #ifdef SPARC && (cif->abi != FFI_V9 || cif->rtype->size > 32) #endif -#ifdef X86_DARWIN - && (cif->rtype->size > 8) -#endif ) bytes = STACK_ARG_SIZE(sizeof(void*)); #endif @@ -134,7 +131,7 @@ check after the initialization. */ FFI_ASSERT_VALID_TYPE(*ptr); -#if !defined __x86_64__ && !defined S390 && !defined PA +#if !defined __i386__ && !defined __x86_64__ && !defined S390 && !defined PA #ifdef SPARC if (((*ptr)->type == FFI_TYPE_STRUCT && ((*ptr)->size > 16 || cif->abi != FFI_V9)) Modified: python/branches/py3k-jit/Modules/_ctypes/libffi/src/x86/ffi.c ============================================================================== --- python/branches/py3k-jit/Modules/_ctypes/libffi/src/x86/ffi.c (original) +++ python/branches/py3k-jit/Modules/_ctypes/libffi/src/x86/ffi.c Fri Mar 19 22:41:36 2010 @@ -148,13 +148,13 @@ /* Perform machine dependent cif processing */ ffi_status ffi_prep_cif_machdep(ffi_cif *cif) { + unsigned int i; + ffi_type **ptr; + /* Set the return type flag */ switch (cif->rtype->type) { case FFI_TYPE_VOID: -#ifdef X86 - case FFI_TYPE_STRUCT: -#endif #if defined(X86) || defined (X86_WIN32) || defined(X86_FREEBSD) || defined(X86_DARWIN) || defined(X86_WIN64) case FFI_TYPE_UINT8: case FFI_TYPE_UINT16: @@ -165,7 +165,6 @@ case FFI_TYPE_UINT32: case FFI_TYPE_SINT32: #endif - case FFI_TYPE_SINT64: case FFI_TYPE_FLOAT: case FFI_TYPE_DOUBLE: @@ -184,8 +183,8 @@ cif->flags = FFI_TYPE_SINT64; break; -#ifndef X86 case FFI_TYPE_STRUCT: +#ifndef X86 if (cif->rtype->size == 1) { cif->flags = FFI_TYPE_SMALL_STRUCT_1B; /* same as char size */ @@ -207,15 +206,13 @@ cif->flags = FFI_TYPE_SINT64; /* same as int64 type */ } else +#endif { cif->flags = FFI_TYPE_STRUCT; -#ifdef X86_WIN64 // allocate space for return value pointer cif->bytes += ALIGN(sizeof(void*), FFI_SIZEOF_ARG); -#endif } break; -#endif default: #ifdef X86_WIN64 @@ -229,41 +226,36 @@ break; } -#ifdef X86_DARWIN - cif->bytes = (cif->bytes + 15) & ~0xF; -#endif + for (ptr = cif->arg_types, i = cif->nargs; i > 0; i--, ptr++) + { + if (((*ptr)->alignment - 1) & cif->bytes) + cif->bytes = ALIGN(cif->bytes, (*ptr)->alignment); + cif->bytes += ALIGN((*ptr)->size, FFI_SIZEOF_ARG); + } #ifdef X86_WIN64 - { - unsigned int i; - ffi_type **ptr; - - for (ptr = cif->arg_types, i = cif->nargs; i > 0; i--, ptr++) - { - if (((*ptr)->alignment - 1) & cif->bytes) - cif->bytes = ALIGN(cif->bytes, (*ptr)->alignment); - cif->bytes += ALIGN((*ptr)->size, FFI_SIZEOF_ARG); - } - } // ensure space for storing four registers cif->bytes += 4 * sizeof(ffi_arg); #endif +#ifdef X86_DARWIN + cif->bytes = (cif->bytes + 15) & ~0xF; +#endif + return FFI_OK; } -extern void ffi_call_SYSV(void (*)(char *, extended_cif *), extended_cif *, - unsigned, unsigned, unsigned *, void (*fn)(void)); - -#ifdef X86_WIN32 -extern void ffi_call_STDCALL(void (*)(char *, extended_cif *), extended_cif *, - unsigned, unsigned, unsigned *, void (*fn)(void)); - -#endif /* X86_WIN32 */ #ifdef X86_WIN64 extern int ffi_call_win64(void (*)(char *, extended_cif *), extended_cif *, unsigned, unsigned, unsigned *, void (*fn)(void)); +#elif defined(X86_WIN32) +extern void +ffi_call_win32(void (*)(char *, extended_cif *), extended_cif *, + unsigned, unsigned, unsigned *, void (*fn)(void)); +#else +extern void ffi_call_SYSV(void (*)(char *, extended_cif *), extended_cif *, + unsigned, unsigned, unsigned *, void (*fn)(void)); #endif void ffi_call(ffi_cif *cif, void (*fn)(void), void *rvalue, void **avalue) @@ -321,18 +313,18 @@ cif->flags, ecif.rvalue, fn); } break; +#elif defined(X86_WIN32) + case FFI_SYSV: + case FFI_STDCALL: + ffi_call_win32(ffi_prep_args, &ecif, cif->bytes, cif->flags, + ecif.rvalue, fn); + break; #else case FFI_SYSV: ffi_call_SYSV(ffi_prep_args, &ecif, cif->bytes, cif->flags, ecif.rvalue, fn); break; -#ifdef X86_WIN32 - case FFI_STDCALL: - ffi_call_STDCALL(ffi_prep_args, &ecif, cif->bytes, cif->flags, - ecif.rvalue, fn); - break; -#endif /* X86_WIN32 */ -#endif /* X86_WIN64 */ +#endif default: FFI_ASSERT(0); break; @@ -342,6 +334,8 @@ /** private members **/ +/* The following __attribute__((regparm(1))) decorations will have no effect + on MSVC - standard cdecl convention applies. */ static void ffi_prep_incoming_args_SYSV (char *stack, void **ret, void** args, ffi_cif* cif); void FFI_HIDDEN ffi_closure_SYSV (ffi_closure *) @@ -390,11 +384,8 @@ } #else -unsigned int FFI_HIDDEN -ffi_closure_SYSV_inner (closure, respp, args) - ffi_closure *closure; - void **respp; - void *args; +unsigned int FFI_HIDDEN __attribute__ ((regparm(1))) +ffi_closure_SYSV_inner (ffi_closure *closure, void **respp, void *args) { /* our various things... */ ffi_cif *cif; @@ -505,7 +496,7 @@ /* How to make a trampoline. Derived from gcc/config/i386/i386.c. */ #define FFI_INIT_TRAMPOLINE(TRAMP,FUN,CTX) \ -({ unsigned char *__tramp = (unsigned char*)(TRAMP); \ +{ unsigned char *__tramp = (unsigned char*)(TRAMP); \ unsigned int __fun = (unsigned int)(FUN); \ unsigned int __ctx = (unsigned int)(CTX); \ unsigned int __dis = __fun - (__ctx + 10); \ @@ -513,10 +504,10 @@ *(unsigned int*) &__tramp[1] = __ctx; /* movl __ctx, %eax */ \ *(unsigned char *) &__tramp[5] = 0xe9; \ *(unsigned int*) &__tramp[6] = __dis; /* jmp __fun */ \ - }) + } #define FFI_INIT_TRAMPOLINE_STDCALL(TRAMP,FUN,CTX,SIZE) \ -({ unsigned char *__tramp = (unsigned char*)(TRAMP); \ +{ unsigned char *__tramp = (unsigned char*)(TRAMP); \ unsigned int __fun = (unsigned int)(FUN); \ unsigned int __ctx = (unsigned int)(CTX); \ unsigned int __dis = __fun - (__ctx + 10); \ @@ -527,7 +518,7 @@ *(unsigned int*) &__tramp[6] = __dis; /* call __fun */ \ *(unsigned char *) &__tramp[10] = 0xc2; \ *(unsigned short*) &__tramp[11] = __size; /* ret __size */ \ - }) + } /* the cif must already be prep'ed */ @@ -595,9 +586,9 @@ } /* we currently don't support certain kinds of arguments for raw - // closures. This should be implemented by a separate assembly language - // routine, since it would require argument processing, something we - // don't do now for performance. */ + closures. This should be implemented by a separate assembly + language routine, since it would require argument processing, + something we don't do now for performance. */ for (i = cif->nargs-1; i >= 0; i--) { @@ -627,16 +618,6 @@ * libffi-1.20, this is not the case.) */ -extern void -ffi_call_SYSV(void (*)(char *, extended_cif *), extended_cif *, unsigned, - unsigned, unsigned *, void (*fn)(void)); - -#ifdef X86_WIN32 -extern void -ffi_call_STDCALL(void (*)(char *, extended_cif *), extended_cif *, unsigned, - unsigned, unsigned *, void (*fn)(void)); -#endif /* X86_WIN32 */ - void ffi_raw_call(ffi_cif *cif, void (*fn)(void), void *rvalue, ffi_raw *fake_avalue) { @@ -660,16 +641,18 @@ switch (cif->abi) { +#ifdef X86_WIN32 + case FFI_SYSV: + case FFI_STDCALL: + ffi_call_win32(ffi_prep_args_raw, &ecif, cif->bytes, cif->flags, + ecif.rvalue, fn); + break; +#else case FFI_SYSV: ffi_call_SYSV(ffi_prep_args_raw, &ecif, cif->bytes, cif->flags, ecif.rvalue, fn); break; -#ifdef X86_WIN32 - case FFI_STDCALL: - ffi_call_STDCALL(ffi_prep_args_raw, &ecif, cif->bytes, cif->flags, - ecif.rvalue, fn); - break; -#endif /* X86_WIN32 */ +#endif default: FFI_ASSERT(0); break; Modified: python/branches/py3k-jit/Modules/_ctypes/libffi/src/x86/ffi64.c ============================================================================== --- python/branches/py3k-jit/Modules/_ctypes/libffi/src/x86/ffi64.c (original) +++ python/branches/py3k-jit/Modules/_ctypes/libffi/src/x86/ffi64.c Fri Mar 19 22:41:36 2010 @@ -50,9 +50,10 @@ gcc/config/i386/i386.c. Do *not* change one without the other. */ /* Register class used for passing given 64bit part of the argument. - These represent classes as documented by the PS ABI, with the exception - of SSESF, SSEDF classes, that are basically SSE class, just gcc will - use SF or DFmode move instead of DImode to avoid reformatting penalties. + These represent classes as documented by the PS ABI, with the + exception of SSESF, SSEDF classes, that are basically SSE class, + just gcc will use SF or DFmode move instead of DImode to avoid + reformatting penalties. Similary we play games with INTEGERSI_CLASS to use cheaper SImode moves whenever possible (upper half does contain padding). */ Modified: python/branches/py3k-jit/Modules/_ctypes/libffi/src/x86/ffitarget.h ============================================================================== --- python/branches/py3k-jit/Modules/_ctypes/libffi/src/x86/ffitarget.h (original) +++ python/branches/py3k-jit/Modules/_ctypes/libffi/src/x86/ffitarget.h Fri Mar 19 22:41:36 2010 @@ -1,5 +1,5 @@ /* -----------------------------------------------------------------*-C-*- - ffitarget.h - Copyright (c) 1996-2003 Red Hat, Inc. + ffitarget.h - Copyright (c) 1996-2003, 2010 Red Hat, Inc. Copyright (C) 2008 Free Software Foundation, Inc. Target configuration macros for x86 and x86-64. @@ -74,10 +74,10 @@ #else /* ---- Intel x86 and AMD x86-64 - */ -#if !defined(X86_WIN32) && (defined(__i386__) || defined(__x86_64__)) +#if !defined(X86_WIN32) && (defined(__i386__) || defined(__x86_64__) || defined(__i386) || defined(__amd64)) FFI_SYSV, FFI_UNIX64, /* Unix variants all use the same ABI for x86-64 */ -#ifdef __i386__ +#if defined(__i386__) || defined(__i386) FFI_DEFAULT_ABI = FFI_SYSV, #else FFI_DEFAULT_ABI = FFI_UNIX64, Modified: python/branches/py3k-jit/Modules/_ctypes/libffi/src/x86/win32.S ============================================================================== --- python/branches/py3k-jit/Modules/_ctypes/libffi/src/x86/win32.S (original) +++ python/branches/py3k-jit/Modules/_ctypes/libffi/src/x86/win32.S Fri Mar 19 22:41:36 2010 @@ -2,6 +2,7 @@ win32.S - Copyright (c) 1996, 1998, 2001, 2002, 2009 Red Hat, Inc. Copyright (c) 2001 John Beniton Copyright (c) 2002 Ranjit Mathew + Copyright (c) 2009 Daniel Witte X86 Foreign Function Interface @@ -31,14 +32,371 @@ #define LIBFFI_ASM #include #include - + +#ifdef _MSC_VER + +.386 +.MODEL FLAT, C + +EXTRN ffi_closure_SYSV_inner:NEAR + +_TEXT SEGMENT + +ffi_call_win32 PROC NEAR, + ffi_prep_args : NEAR PTR DWORD, + ecif : NEAR PTR DWORD, + cif_bytes : DWORD, + cif_flags : DWORD, + rvalue : NEAR PTR DWORD, + fn : NEAR PTR DWORD + + ;; Make room for all of the new args. + mov ecx, cif_bytes + sub esp, ecx + + mov eax, esp + + ;; Place all of the ffi_prep_args in position + push ecif + push eax + call ffi_prep_args + + ;; Return stack to previous state and call the function + add esp, 8 + + call fn + + ;; cdecl: we restore esp in the epilogue, so there's no need to + ;; remove the space we pushed for the args. + ;; stdcall: the callee has already cleaned the stack. + + ;; Load ecx with the return type code + mov ecx, cif_flags + + ;; If the return value pointer is NULL, assume no return value. + cmp rvalue, 0 + jne ca_jumptable + + ;; Even if there is no space for the return value, we are + ;; obliged to handle floating-point values. + cmp ecx, FFI_TYPE_FLOAT + jne ca_epilogue + fstp st(0) + + jmp ca_epilogue + +ca_jumptable: + jmp [ca_jumpdata + 4 * ecx] +ca_jumpdata: + ;; Do not insert anything here between label and jump table. + dd offset ca_epilogue ;; FFI_TYPE_VOID + dd offset ca_retint ;; FFI_TYPE_INT + dd offset ca_retfloat ;; FFI_TYPE_FLOAT + dd offset ca_retdouble ;; FFI_TYPE_DOUBLE + dd offset ca_retlongdouble ;; FFI_TYPE_LONGDOUBLE + dd offset ca_retint8 ;; FFI_TYPE_UINT8 + dd offset ca_retint8 ;; FFI_TYPE_SINT8 + dd offset ca_retint16 ;; FFI_TYPE_UINT16 + dd offset ca_retint16 ;; FFI_TYPE_SINT16 + dd offset ca_retint ;; FFI_TYPE_UINT32 + dd offset ca_retint ;; FFI_TYPE_SINT32 + dd offset ca_retint64 ;; FFI_TYPE_UINT64 + dd offset ca_retint64 ;; FFI_TYPE_SINT64 + dd offset ca_epilogue ;; FFI_TYPE_STRUCT + dd offset ca_retint ;; FFI_TYPE_POINTER + dd offset ca_retint8 ;; FFI_TYPE_SMALL_STRUCT_1B + dd offset ca_retint16 ;; FFI_TYPE_SMALL_STRUCT_2B + dd offset ca_retint ;; FFI_TYPE_SMALL_STRUCT_4B + +ca_retint8: + ;; Load %ecx with the pointer to storage for the return value + mov ecx, rvalue + mov [ecx + 0], al + jmp ca_epilogue + +ca_retint16: + ;; Load %ecx with the pointer to storage for the return value + mov ecx, rvalue + mov [ecx + 0], ax + jmp ca_epilogue + +ca_retint: + ;; Load %ecx with the pointer to storage for the return value + mov ecx, rvalue + mov [ecx + 0], eax + jmp ca_epilogue + +ca_retint64: + ;; Load %ecx with the pointer to storage for the return value + mov ecx, rvalue + mov [ecx + 0], eax + mov [ecx + 4], edx + jmp ca_epilogue + +ca_retfloat: + ;; Load %ecx with the pointer to storage for the return value + mov ecx, rvalue + fstp DWORD PTR [ecx] + jmp ca_epilogue + +ca_retdouble: + ;; Load %ecx with the pointer to storage for the return value + mov ecx, rvalue + fstp QWORD PTR [ecx] + jmp ca_epilogue + +ca_retlongdouble: + ;; Load %ecx with the pointer to storage for the return value + mov ecx, rvalue + fstp TBYTE PTR [ecx] + jmp ca_epilogue + +ca_epilogue: + ;; Epilogue code is autogenerated. + ret +ffi_call_win32 ENDP + +ffi_closure_SYSV PROC NEAR FORCEFRAME + ;; the ffi_closure ctx is passed in eax by the trampoline. + + sub esp, 40 + lea edx, [ebp - 24] + mov [ebp - 12], edx ;; resp + lea edx, [ebp + 8] + mov [esp + 8], edx ;; args + lea edx, [ebp - 12] + mov [esp + 4], edx ;; &resp + mov [esp], eax ;; closure + call ffi_closure_SYSV_inner + mov ecx, [ebp - 12] + +cs_jumptable: + jmp [cs_jumpdata + 4 * eax] +cs_jumpdata: + ;; Do not insert anything here between the label and jump table. + dd offset cs_epilogue ;; FFI_TYPE_VOID + dd offset cs_retint ;; FFI_TYPE_INT + dd offset cs_retfloat ;; FFI_TYPE_FLOAT + dd offset cs_retdouble ;; FFI_TYPE_DOUBLE + dd offset cs_retlongdouble ;; FFI_TYPE_LONGDOUBLE + dd offset cs_retint8 ;; FFI_TYPE_UINT8 + dd offset cs_retint8 ;; FFI_TYPE_SINT8 + dd offset cs_retint16 ;; FFI_TYPE_UINT16 + dd offset cs_retint16 ;; FFI_TYPE_SINT16 + dd offset cs_retint ;; FFI_TYPE_UINT32 + dd offset cs_retint ;; FFI_TYPE_SINT32 + dd offset cs_retint64 ;; FFI_TYPE_UINT64 + dd offset cs_retint64 ;; FFI_TYPE_SINT64 + dd offset cs_retstruct ;; FFI_TYPE_STRUCT + dd offset cs_retint ;; FFI_TYPE_POINTER + dd offset cs_retint8 ;; FFI_TYPE_SMALL_STRUCT_1B + dd offset cs_retint16 ;; FFI_TYPE_SMALL_STRUCT_2B + dd offset cs_retint ;; FFI_TYPE_SMALL_STRUCT_4B + +cs_retint8: + mov al, [ecx] + jmp cs_epilogue + +cs_retint16: + mov ax, [ecx] + jmp cs_epilogue + +cs_retint: + mov eax, [ecx] + jmp cs_epilogue + +cs_retint64: + mov eax, [ecx + 0] + mov edx, [ecx + 4] + jmp cs_epilogue + +cs_retfloat: + fld DWORD PTR [ecx] + jmp cs_epilogue + +cs_retdouble: + fld QWORD PTR [ecx] + jmp cs_epilogue + +cs_retlongdouble: + fld TBYTE PTR [ecx] + jmp cs_epilogue + +cs_retstruct: + ;; Caller expects us to pop struct return value pointer hidden arg. + ;; Epilogue code is autogenerated. + ret 4 + +cs_epilogue: + ;; Epilogue code is autogenerated. + ret +ffi_closure_SYSV ENDP + +#if !FFI_NO_RAW_API + +#define RAW_CLOSURE_CIF_OFFSET ((FFI_TRAMPOLINE_SIZE + 3) AND NOT 3) +#define RAW_CLOSURE_FUN_OFFSET (RAW_CLOSURE_CIF_OFFSET + 4) +#define RAW_CLOSURE_USER_DATA_OFFSET (RAW_CLOSURE_FUN_OFFSET + 4) +#define CIF_FLAGS_OFFSET 20 + +ffi_closure_raw_SYSV PROC NEAR USES esi + ;; the ffi_closure ctx is passed in eax by the trampoline. + + sub esp, 40 + mov esi, [eax + RAW_CLOSURE_CIF_OFFSET] ;; closure->cif + mov edx, [eax + RAW_CLOSURE_USER_DATA_OFFSET] ;; closure->user_data + mov [esp + 12], edx ;; user_data + lea edx, [ebp + 8] + mov [esp + 8], edx ;; raw_args + lea edx, [ebp - 24] + mov [esp + 4], edx ;; &res + mov [esp], esi ;; cif + call DWORD PTR [eax + RAW_CLOSURE_FUN_OFFSET] ;; closure->fun + mov eax, [esi + CIF_FLAGS_OFFSET] ;; cif->flags + lea ecx, [ebp - 24] + +cr_jumptable: + jmp [cr_jumpdata + 4 * eax] +cr_jumpdata: + ;; Do not insert anything here between the label and jump table. + dd offset cr_epilogue ;; FFI_TYPE_VOID + dd offset cr_retint ;; FFI_TYPE_INT + dd offset cr_retfloat ;; FFI_TYPE_FLOAT + dd offset cr_retdouble ;; FFI_TYPE_DOUBLE + dd offset cr_retlongdouble ;; FFI_TYPE_LONGDOUBLE + dd offset cr_retint8 ;; FFI_TYPE_UINT8 + dd offset cr_retint8 ;; FFI_TYPE_SINT8 + dd offset cr_retint16 ;; FFI_TYPE_UINT16 + dd offset cr_retint16 ;; FFI_TYPE_SINT16 + dd offset cr_retint ;; FFI_TYPE_UINT32 + dd offset cr_retint ;; FFI_TYPE_SINT32 + dd offset cr_retint64 ;; FFI_TYPE_UINT64 + dd offset cr_retint64 ;; FFI_TYPE_SINT64 + dd offset cr_epilogue ;; FFI_TYPE_STRUCT + dd offset cr_retint ;; FFI_TYPE_POINTER + dd offset cr_retint8 ;; FFI_TYPE_SMALL_STRUCT_1B + dd offset cr_retint16 ;; FFI_TYPE_SMALL_STRUCT_2B + dd offset cr_retint ;; FFI_TYPE_SMALL_STRUCT_4B + +cr_retint8: + mov al, [ecx] + jmp cr_epilogue + +cr_retint16: + mov ax, [ecx] + jmp cr_epilogue + +cr_retint: + mov eax, [ecx] + jmp cr_epilogue + +cr_retint64: + mov eax, [ecx + 0] + mov edx, [ecx + 4] + jmp cr_epilogue + +cr_retfloat: + fld DWORD PTR [ecx] + jmp cr_epilogue + +cr_retdouble: + fld QWORD PTR [ecx] + jmp cr_epilogue + +cr_retlongdouble: + fld TBYTE PTR [ecx] + jmp cr_epilogue + +cr_epilogue: + ;; Epilogue code is autogenerated. + ret +ffi_closure_raw_SYSV ENDP + +#endif /* !FFI_NO_RAW_API */ + +ffi_closure_STDCALL PROC NEAR FORCEFRAME + ;; the ffi_closure ctx is passed in eax by the trampoline. + + sub esp, 40 + lea edx, [ebp - 24] + mov [ebp - 12], edx ;; resp + lea edx, [ebp + 12] ;; account for stub return address on stack + mov [esp + 8], edx ;; args + lea edx, [ebp - 12] + mov [esp + 4], edx ;; &resp + mov [esp], eax ;; closure + call ffi_closure_SYSV_inner + mov ecx, [ebp - 12] + +cd_jumptable: + jmp [cd_jumpdata + 4 * eax] +cd_jumpdata: + ;; Do not insert anything here between the label and jump table. + dd offset cd_epilogue ;; FFI_TYPE_VOID + dd offset cd_retint ;; FFI_TYPE_INT + dd offset cd_retfloat ;; FFI_TYPE_FLOAT + dd offset cd_retdouble ;; FFI_TYPE_DOUBLE + dd offset cd_retlongdouble ;; FFI_TYPE_LONGDOUBLE + dd offset cd_retint8 ;; FFI_TYPE_UINT8 + dd offset cd_retint8 ;; FFI_TYPE_SINT8 + dd offset cd_retint16 ;; FFI_TYPE_UINT16 + dd offset cd_retint16 ;; FFI_TYPE_SINT16 + dd offset cd_retint ;; FFI_TYPE_UINT32 + dd offset cd_retint ;; FFI_TYPE_SINT32 + dd offset cd_retint64 ;; FFI_TYPE_UINT64 + dd offset cd_retint64 ;; FFI_TYPE_SINT64 + dd offset cd_epilogue ;; FFI_TYPE_STRUCT + dd offset cd_retint ;; FFI_TYPE_POINTER + dd offset cd_retint8 ;; FFI_TYPE_SMALL_STRUCT_1B + dd offset cd_retint16 ;; FFI_TYPE_SMALL_STRUCT_2B + dd offset cd_retint ;; FFI_TYPE_SMALL_STRUCT_4B + +cd_retint8: + mov al, [ecx] + jmp cd_epilogue + +cd_retint16: + mov ax, [ecx] + jmp cd_epilogue + +cd_retint: + mov eax, [ecx] + jmp cd_epilogue + +cd_retint64: + mov eax, [ecx + 0] + mov edx, [ecx + 4] + jmp cd_epilogue + +cd_retfloat: + fld DWORD PTR [ecx] + jmp cd_epilogue + +cd_retdouble: + fld QWORD PTR [ecx] + jmp cd_epilogue + +cd_retlongdouble: + fld TBYTE PTR [ecx] + jmp cd_epilogue + +cd_epilogue: + ;; Epilogue code is autogenerated. + ret +ffi_closure_STDCALL ENDP + +_TEXT ENDS +END + +#else + .text # This assumes we are using gas. .balign 16 - .globl _ffi_call_SYSV - .def _ffi_call_SYSV; .scl 2; .type 32; .endef -_ffi_call_SYSV: + .globl _ffi_call_win32 + .def _ffi_call_win32; .scl 2; .type 32; .endef +_ffi_call_win32: .LFB1: pushl %ebp .LCFI0: @@ -61,8 +419,10 @@ # FIXME: Align the stack to a 128-bit boundary to avoid # potential performance hits. - call *28(%ebp) + call *28(%ebp) + # stdcall functions pop arguments off the stack themselves + # Load %ecx with the return type code movl 20(%ebp),%ecx @@ -181,164 +541,11 @@ movl %ebp,%esp popl %ebp ret -.ffi_call_SYSV_end: +.ffi_call_win32_end: .LFE1: # This assumes we are using gas. .balign 16 - .globl _ffi_call_STDCALL - .def _ffi_call_STDCALL; .scl 2; .type 32; .endef -_ffi_call_STDCALL: -.LFB2: - pushl %ebp -.LCFI2: - movl %esp,%ebp -.LCFI3: - # Make room for all of the new args. - movl 16(%ebp),%ecx - subl %ecx,%esp - - movl %esp,%eax - - # Place all of the ffi_prep_args in position - pushl 12(%ebp) - pushl %eax - call *8(%ebp) - - # Return stack to previous state and call the function - addl $8,%esp - - # FIXME: Align the stack to a 128-bit boundary to avoid - # potential performance hits. - - call *28(%ebp) - - # stdcall functions pop arguments off the stack themselves - - # Load %ecx with the return type code - movl 20(%ebp),%ecx - - # If the return value pointer is NULL, assume no return value. - cmpl $0,24(%ebp) - jne 0f - - # Even if there is no space for the return value, we are - # obliged to handle floating-point values. - cmpl $FFI_TYPE_FLOAT,%ecx - jne .Lsc_noretval - fstp %st(0) - - jmp .Lsc_epilogue - -0: - call 1f - # Do not insert anything here between the call and the jump table. -.Lsc_store_table: - .long .Lsc_noretval /* FFI_TYPE_VOID */ - .long .Lsc_retint /* FFI_TYPE_INT */ - .long .Lsc_retfloat /* FFI_TYPE_FLOAT */ - .long .Lsc_retdouble /* FFI_TYPE_DOUBLE */ - .long .Lsc_retlongdouble /* FFI_TYPE_LONGDOUBLE */ - .long .Lsc_retuint8 /* FFI_TYPE_UINT8 */ - .long .Lsc_retsint8 /* FFI_TYPE_SINT8 */ - .long .Lsc_retuint16 /* FFI_TYPE_UINT16 */ - .long .Lsc_retsint16 /* FFI_TYPE_SINT16 */ - .long .Lsc_retint /* FFI_TYPE_UINT32 */ - .long .Lsc_retint /* FFI_TYPE_SINT32 */ - .long .Lsc_retint64 /* FFI_TYPE_UINT64 */ - .long .Lsc_retint64 /* FFI_TYPE_SINT64 */ - .long .Lsc_retstruct /* FFI_TYPE_STRUCT */ - .long .Lsc_retint /* FFI_TYPE_POINTER */ - .long .Lsc_retstruct1b /* FFI_TYPE_SMALL_STRUCT_1B */ - .long .Lsc_retstruct2b /* FFI_TYPE_SMALL_STRUCT_2B */ - .long .Lsc_retstruct4b /* FFI_TYPE_SMALL_STRUCT_4B */ - -1: - add %ecx, %ecx - add %ecx, %ecx - add (%esp),%ecx - add $4, %esp - jmp *(%ecx) - - /* Sign/zero extend as appropriate. */ -.Lsc_retsint8: - movsbl %al, %eax - jmp .Lsc_retint - -.Lsc_retsint16: - movswl %ax, %eax - jmp .Lsc_retint - -.Lsc_retuint8: - movzbl %al, %eax - jmp .Lsc_retint - -.Lsc_retuint16: - movzwl %ax, %eax - jmp .Lsc_retint - -.Lsc_retint: - # Load %ecx with the pointer to storage for the return value - movl 24(%ebp),%ecx - movl %eax,0(%ecx) - jmp .Lsc_epilogue - -.Lsc_retfloat: - # Load %ecx with the pointer to storage for the return value - movl 24(%ebp),%ecx - fstps (%ecx) - jmp .Lsc_epilogue - -.Lsc_retdouble: - # Load %ecx with the pointer to storage for the return value - movl 24(%ebp),%ecx - fstpl (%ecx) - jmp .Lsc_epilogue - -.Lsc_retlongdouble: - # Load %ecx with the pointer to storage for the return value - movl 24(%ebp),%ecx - fstpt (%ecx) - jmp .Lsc_epilogue - -.Lsc_retint64: - # Load %ecx with the pointer to storage for the return value - movl 24(%ebp),%ecx - movl %eax,0(%ecx) - movl %edx,4(%ecx) - jmp .Lsc_epilogue - -.Lsc_retstruct1b: - # Load %ecx with the pointer to storage for the return value - movl 24(%ebp),%ecx - movb %al,0(%ecx) - jmp .Lsc_epilogue - -.Lsc_retstruct2b: - # Load %ecx with the pointer to storage for the return value - movl 24(%ebp),%ecx - movw %ax,0(%ecx) - jmp .Lsc_epilogue - -.Lsc_retstruct4b: - # Load %ecx with the pointer to storage for the return value - movl 24(%ebp),%ecx - movl %eax,0(%ecx) - jmp .Lsc_epilogue - -.Lsc_retstruct: - # Nothing to do! - -.Lsc_noretval: -.Lsc_epilogue: - movl %ebp,%esp - popl %ebp - ret -.ffi_call_STDCALL_end: -.LFE2: - - # This assumes we are using gas. - .balign 16 .globl _ffi_closure_SYSV .def _ffi_closure_SYSV; .scl 2; .type 32; .endef _ffi_closure_SYSV: @@ -742,38 +949,6 @@ .LEFDE1: -.LSFDE2: - .long .LEFDE2-.LASFDE2 /* FDE Length */ -.LASFDE2: - .long .LASFDE2-.Lframe1 /* FDE CIE offset */ -#if defined __PIC__ && defined HAVE_AS_X86_PCREL - .long .LFB2-. /* FDE initial location */ -#else - .long .LFB2 -#endif - .long .LFE2-.LFB2 /* FDE address range */ -#ifdef __PIC__ - .byte 0x0 /* .uleb128 0x0; Augmentation size */ -#endif - /* DW_CFA_xxx CFI instructions go here. */ - - .byte 0x4 /* DW_CFA_advance_loc4 */ - .long .LCFI2-.LFB2 - .byte 0xe /* DW_CFA_def_cfa_offset CFA = r4 + 8 = 8(%esp) */ - .byte 0x8 /* .uleb128 0x8 */ - .byte 0x85 /* DW_CFA_offset, column 0x5 %ebp at CFA + 2 * -4 */ - .byte 0x2 /* .uleb128 0x2 */ - - .byte 0x4 /* DW_CFA_advance_loc4 */ - .long .LCFI3-.LCFI2 - .byte 0xd /* DW_CFA_def_cfa_register CFA = r5 = %ebp */ - .byte 0x5 /* .uleb128 0x5 */ - - /* End of DW_CFA_xxx CFI instructions. */ - .align 4 -.LEFDE2: - - .LSFDE3: .long .LEFDE3-.LASFDE3 /* FDE Length */ .LASFDE3: @@ -875,3 +1050,6 @@ /* End of DW_CFA_xxx CFI instructions. */ .align 4 .LEFDE5: + +#endif /* !_MSC_VER */ + Modified: python/branches/py3k-jit/Modules/_ctypes/libffi/testsuite/lib/libffi-dg.exp ============================================================================== --- python/branches/py3k-jit/Modules/_ctypes/libffi/testsuite/lib/libffi-dg.exp (original) +++ python/branches/py3k-jit/Modules/_ctypes/libffi/testsuite/lib/libffi-dg.exp Fri Mar 19 22:41:36 2010 @@ -1,8 +1,8 @@ -# Copyright (C) 2003, 2005, 2008, 2009 Free Software Foundation, Inc. +# Copyright (C) 2003, 2005, 2008, 2009, 2010 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 2 of the License, or +# the Free Software Foundation; either version 3 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, Modified: python/branches/py3k-jit/Modules/_ctypes/libffi/testsuite/libffi.call/cls_align_sint64.c ============================================================================== --- python/branches/py3k-jit/Modules/_ctypes/libffi/testsuite/libffi.call/cls_align_sint64.c (original) +++ python/branches/py3k-jit/Modules/_ctypes/libffi/testsuite/libffi.call/cls_align_sint64.c Fri Mar 19 22:41:36 2010 @@ -5,6 +5,7 @@ Originator: 20031203 */ /* { dg-do run } */ +/* { dg-options "-Wno-format" { target alpha*-dec-osf* } } */ #include "ffitest.h" typedef struct cls_struct_align { Modified: python/branches/py3k-jit/Modules/_ctypes/libffi/testsuite/libffi.call/cls_align_uint64.c ============================================================================== --- python/branches/py3k-jit/Modules/_ctypes/libffi/testsuite/libffi.call/cls_align_uint64.c (original) +++ python/branches/py3k-jit/Modules/_ctypes/libffi/testsuite/libffi.call/cls_align_uint64.c Fri Mar 19 22:41:36 2010 @@ -6,6 +6,7 @@ /* { dg-do run } */ +/* { dg-options "-Wno-format" { target alpha*-dec-osf* } } */ #include "ffitest.h" typedef struct cls_struct_align { Modified: python/branches/py3k-jit/Modules/_ctypes/libffi/testsuite/libffi.call/cls_longdouble.c ============================================================================== --- python/branches/py3k-jit/Modules/_ctypes/libffi/testsuite/libffi.call/cls_longdouble.c (original) +++ python/branches/py3k-jit/Modules/_ctypes/libffi/testsuite/libffi.call/cls_longdouble.c Fri Mar 19 22:41:36 2010 @@ -5,7 +5,7 @@ Originator: Blake Chaffin */ /* { dg-excess-errors "no long double format" { xfail x86_64-*-mingw* x86_64-*-cygwin* } } */ -/* { dg-do run { xfail strongarm*-*-* xscale*-*-* } } */ +/* { dg-do run { xfail arm*-*-* strongarm*-*-* xscale*-*-* } } */ /* { dg-options -mlong-double-128 { target powerpc64*-*-* } } */ /* { dg-output "" { xfail x86_64-*-mingw* x86_64-*-cygwin* } } */ Modified: python/branches/py3k-jit/Modules/_ctypes/libffi/testsuite/libffi.call/cls_ulonglong.c ============================================================================== --- python/branches/py3k-jit/Modules/_ctypes/libffi/testsuite/libffi.call/cls_ulonglong.c (original) +++ python/branches/py3k-jit/Modules/_ctypes/libffi/testsuite/libffi.call/cls_ulonglong.c Fri Mar 19 22:41:36 2010 @@ -5,6 +5,7 @@ Originator: 20030828 */ /* { dg-do run } */ +/* { dg-options "-Wno-format" { target alpha*-dec-osf* } } */ #include "ffitest.h" static void cls_ret_ulonglong_fn(ffi_cif* cif __UNUSED__, void* resp, Modified: python/branches/py3k-jit/Modules/_ctypes/libffi/testsuite/libffi.call/ffitest.h ============================================================================== --- python/branches/py3k-jit/Modules/_ctypes/libffi/testsuite/libffi.call/ffitest.h (original) +++ python/branches/py3k-jit/Modules/_ctypes/libffi/testsuite/libffi.call/ffitest.h Fri Mar 19 22:41:36 2010 @@ -60,6 +60,18 @@ #define PRIuLL "llu" #endif +/* Tru64 UNIX kludge. */ +#if defined(__alpha__) && defined(__osf__) +/* Tru64 UNIX V4.0 doesn't support %lld/%lld, but long is 64-bit. */ +#undef PRIdLL +#define PRIdLL "ld" +#undef PRIuLL +#define PRIuLL "lu" +#define PRId64 "ld" +#define PRIu64 "lu" +#define PRIuPTR "lu" +#endif + /* PA HP-UX kludge. */ #if defined(__hppa__) && defined(__hpux__) && !defined(PRIuPTR) #define PRIuPTR "lu" Modified: python/branches/py3k-jit/Modules/_ctypes/libffi/testsuite/libffi.call/return_ll1.c ============================================================================== --- python/branches/py3k-jit/Modules/_ctypes/libffi/testsuite/libffi.call/return_ll1.c (original) +++ python/branches/py3k-jit/Modules/_ctypes/libffi/testsuite/libffi.call/return_ll1.c Fri Mar 19 22:41:36 2010 @@ -5,6 +5,7 @@ Originator: 20050222 */ /* { dg-do run } */ +/* { dg-options "-Wno-format" { target alpha*-dec-osf* } } */ #include "ffitest.h" static long long return_ll(int ll0, long long ll1, int ll2) { Modified: python/branches/py3k-jit/Modules/_ctypes/libffi/testsuite/libffi.call/stret_medium2.c ============================================================================== --- python/branches/py3k-jit/Modules/_ctypes/libffi/testsuite/libffi.call/stret_medium2.c (original) +++ python/branches/py3k-jit/Modules/_ctypes/libffi/testsuite/libffi.call/stret_medium2.c Fri Mar 19 22:41:36 2010 @@ -7,6 +7,7 @@ Originator: Blake Chaffin 6/21/2007 */ /* { dg-do run { xfail strongarm*-*-* xscale*-*-* } } */ +/* { dg-options "-Wno-format" { target alpha*-dec-osf* } } */ #include "ffitest.h" typedef struct struct_72byte { Modified: python/branches/py3k-jit/Modules/_ctypes/libffi/testsuite/libffi.special/ffitestcxx.h ============================================================================== --- python/branches/py3k-jit/Modules/_ctypes/libffi/testsuite/libffi.special/ffitestcxx.h (original) +++ python/branches/py3k-jit/Modules/_ctypes/libffi/testsuite/libffi.special/ffitestcxx.h Fri Mar 19 22:41:36 2010 @@ -84,7 +84,7 @@ MAP_PRIVATE, dev_zero_fd, 0); #endif - if (page == MAP_FAILED) + if (page == (char *) MAP_FAILED) { perror ("virtual memory exhausted"); exit (1); Modified: python/branches/py3k-jit/Modules/_posixsubprocess.c ============================================================================== --- python/branches/py3k-jit/Modules/_posixsubprocess.c (original) +++ python/branches/py3k-jit/Modules/_posixsubprocess.c Fri Mar 19 22:41:36 2010 @@ -204,15 +204,21 @@ if (gc_module == NULL) return NULL; result = PyObject_CallMethod(gc_module, "isenabled", NULL); - if (result == NULL) + if (result == NULL) { + Py_DECREF(gc_module); return NULL; + } need_to_reenable_gc = PyObject_IsTrue(result); Py_DECREF(result); - if (need_to_reenable_gc == -1) + if (need_to_reenable_gc == -1) { + Py_DECREF(gc_module); return NULL; + } result = PyObject_CallMethod(gc_module, "disable", NULL); - if (result == NULL) + if (result == NULL) { + Py_DECREF(gc_module); return NULL; + } Py_DECREF(result); } @@ -307,6 +313,7 @@ Py_XDECREF(gc_module); return NULL; } + Py_XDECREF(preexec_fn_args_tuple); Py_XDECREF(gc_module); if (pid == -1) @@ -322,6 +329,7 @@ _Py_FreeCharPArray(exec_array); Py_XDECREF(converted_args); Py_XDECREF(fast_args); + Py_XDECREF(preexec_fn_args_tuple); /* Reenable gc if it was disabled. */ if (need_to_reenable_gc) Modified: python/branches/py3k-jit/Objects/longobject.c ============================================================================== --- python/branches/py3k-jit/Objects/longobject.c (original) +++ python/branches/py3k-jit/Objects/longobject.c Fri Mar 19 22:41:36 2010 @@ -2560,9 +2560,6 @@ Py_ssize_t i; int sign; - /* This is designed so that Python ints and longs with the - same value hash to the same value, otherwise comparisons - of mapping keys will turn out weird */ i = Py_SIZE(v); switch(i) { case -1: return v->ob_digit[0]==1 ? -2 : -(sdigit)v->ob_digit[0]; Modified: python/branches/py3k-jit/Tools/unicode/gencodec.py ============================================================================== --- python/branches/py3k-jit/Tools/unicode/gencodec.py (original) +++ python/branches/py3k-jit/Tools/unicode/gencodec.py Fri Mar 19 22:41:36 2010 @@ -40,8 +40,7 @@ '\s*' '(#.+)?') -def parsecodes(codes, - len=len, filter=filter,range=range): +def parsecodes(codes, len=len, range=range): """ Converts code combinations to either a single code integer or a tuple of integers. Modified: python/branches/py3k-jit/Tools/unicode/makeunicodedata.py ============================================================================== --- python/branches/py3k-jit/Tools/unicode/makeunicodedata.py (original) +++ python/branches/py3k-jit/Tools/unicode/makeunicodedata.py Fri Mar 19 22:41:36 2010 @@ -517,8 +517,7 @@ haswide = False hasnonewide = False - spaces.sort() - for codepoint in spaces: + for codepoint in sorted(spaces): if codepoint < 0x10000: hasnonewide = True if codepoint >= 0x10000 and not haswide: @@ -546,8 +545,7 @@ print(' switch (ch) {', file=fp) haswide = False hasnonewide = False - linebreaks.sort() - for codepoint in linebreaks: + for codepoint in sorted(linebreaks): if codepoint < 0x10000: hasnonewide = True if codepoint >= 0x10000 and not haswide: From python-checkins at python.org Fri Mar 19 22:42:45 2010 From: python-checkins at python.org (benjamin.peterson) Date: Fri, 19 Mar 2010 22:42:45 +0100 (CET) Subject: [Python-checkins] r79119 - python/branches/py3k/Mac/BuildScript/build-installer.py Message-ID: <20100319214245.3D235FCCC@mail.python.org> Author: benjamin.peterson Date: Fri Mar 19 22:42:45 2010 New Revision: 79119 Log: update mac installer script from the trunk #8068 Modified: python/branches/py3k/Mac/BuildScript/build-installer.py Modified: python/branches/py3k/Mac/BuildScript/build-installer.py ============================================================================== --- python/branches/py3k/Mac/BuildScript/build-installer.py (original) +++ python/branches/py3k/Mac/BuildScript/build-installer.py Fri Mar 19 22:42:45 2010 @@ -40,16 +40,19 @@ if ln.startswith(variable): value = ln[len(variable):].strip() return value[1:-1] + raise RuntimeError, "Cannot find variable %s" % variable[:-1] def getVersion(): return grepValue(os.path.join(SRCDIR, 'configure'), 'PACKAGE_VERSION') +def getVersionTuple(): + return tuple([int(n) for n in getVersion().split('.')]) + def getFullVersion(): fn = os.path.join(SRCDIR, 'Include', 'patchlevel.h') for ln in open(fn): if 'PY_VERSION' in ln: return ln.split()[-1][1:-1] - raise RuntimeError, "Cannot find full version??" # The directory we'll use to create the build (will be erased and recreated) @@ -61,12 +64,33 @@ DEPSRC = os.path.expanduser('~/Universal/other-sources') # Location of the preferred SDK + +### There are some issues with the SDK selection below here, +### The resulting binary doesn't work on all platforms that +### it should. Always default to the 10.4u SDK until that +### isue is resolved. +### +##if int(os.uname()[2].split('.')[0]) == 8: +## # Explicitly use the 10.4u (universal) SDK when +## # building on 10.4, the system headers are not +## # useable for a universal build +## SDKPATH = "/Developer/SDKs/MacOSX10.4u.sdk" +##else: +## SDKPATH = "/" + SDKPATH = "/Developer/SDKs/MacOSX10.4u.sdk" -#SDKPATH = "/" universal_opts_map = { '32-bit': ('i386', 'ppc',), '64-bit': ('x86_64', 'ppc64',), - 'all': ('i386', 'ppc', 'x86_64', 'ppc64',) } + 'intel': ('i386', 'x86_64'), + '3-way': ('ppc', 'i386', 'x86_64'), + 'all': ('i386', 'ppc', 'x86_64', 'ppc64',) } +default_target_map = { + '64-bit': '10.5', + '3-way': '10.5', + 'intel': '10.5', + 'all': '10.5', +} UNIVERSALOPTS = tuple(universal_opts_map.keys()) @@ -84,6 +108,17 @@ # $MACOSX_DEPLOYMENT_TARGET -> minimum OS X level DEPTARGET = '10.3' +target_cc_map = { + '10.3': 'gcc-4.0', + '10.4': 'gcc-4.0', + '10.5': 'gcc-4.0', + '10.6': 'gcc-4.2', +} + +CC = target_cc_map[DEPTARGET] + +PYTHON_3 = getVersionTuple() >= (3, 0) + USAGE = textwrap.dedent("""\ Usage: build_python [options] @@ -104,177 +139,203 @@ # [The recipes are defined here for convenience but instantiated later after # command line options have been processed.] def library_recipes(): - return [ - dict( - name="Bzip2 1.0.4", - url="http://www.bzip.org/1.0.4/bzip2-1.0.4.tar.gz", - checksum='fc310b254f6ba5fbb5da018f04533688', - configure=None, - install='make install PREFIX=%s/usr/local/ CFLAGS="-arch %s -isysroot %s"'%( - shellQuote(os.path.join(WORKDIR, 'libraries')), - ' -arch '.join(ARCHLIST), - SDKPATH, + result = [] + + if DEPTARGET < '10.5': + result.extend([ + dict( + name="Bzip2 1.0.5", + url="http://www.bzip.org/1.0.5/bzip2-1.0.5.tar.gz", + checksum='3c15a0c8d1d3ee1c46a1634d00617b1a', + configure=None, + install='make install CC=%s PREFIX=%s/usr/local/ CFLAGS="-arch %s -isysroot %s"'%( + CC, + shellQuote(os.path.join(WORKDIR, 'libraries')), + ' -arch '.join(ARCHLIST), + SDKPATH, + ), ), - ), - dict( - name="ZLib 1.2.3", - url="http://www.gzip.org/zlib/zlib-1.2.3.tar.gz", - checksum='debc62758716a169df9f62e6ab2bc634', - configure=None, - install='make install prefix=%s/usr/local/ CFLAGS="-arch %s -isysroot %s"'%( - shellQuote(os.path.join(WORKDIR, 'libraries')), - ' -arch '.join(ARCHLIST), - SDKPATH, + dict( + name="ZLib 1.2.3", + url="http://www.gzip.org/zlib/zlib-1.2.3.tar.gz", + checksum='debc62758716a169df9f62e6ab2bc634', + configure=None, + install='make install CC=%s prefix=%s/usr/local/ CFLAGS="-arch %s -isysroot %s"'%( + CC, + shellQuote(os.path.join(WORKDIR, 'libraries')), + ' -arch '.join(ARCHLIST), + SDKPATH, + ), ), - ), - dict( - # Note that GNU readline is GPL'd software - name="GNU Readline 5.1.4", - url="http://ftp.gnu.org/pub/gnu/readline/readline-5.1.tar.gz" , - checksum='7ee5a692db88b30ca48927a13fd60e46', - patchlevel='0', - patches=[ - # The readline maintainers don't do actual micro releases, but - # just ship a set of patches. - 'http://ftp.gnu.org/pub/gnu/readline/readline-5.1-patches/readline51-001', - 'http://ftp.gnu.org/pub/gnu/readline/readline-5.1-patches/readline51-002', - 'http://ftp.gnu.org/pub/gnu/readline/readline-5.1-patches/readline51-003', - 'http://ftp.gnu.org/pub/gnu/readline/readline-5.1-patches/readline51-004', - ] - ), + dict( + # Note that GNU readline is GPL'd software + name="GNU Readline 5.1.4", + url="http://ftp.gnu.org/pub/gnu/readline/readline-5.1.tar.gz" , + checksum='7ee5a692db88b30ca48927a13fd60e46', + patchlevel='0', + patches=[ + # The readline maintainers don't do actual micro releases, but + # just ship a set of patches. + 'http://ftp.gnu.org/pub/gnu/readline/readline-5.1-patches/readline51-001', + 'http://ftp.gnu.org/pub/gnu/readline/readline-5.1-patches/readline51-002', + 'http://ftp.gnu.org/pub/gnu/readline/readline-5.1-patches/readline51-003', + 'http://ftp.gnu.org/pub/gnu/readline/readline-5.1-patches/readline51-004', + ] + ), + dict( + name="SQLite 3.6.11", + url="http://www.sqlite.org/sqlite-3.6.11.tar.gz", + checksum='7ebb099696ab76cc6ff65dd496d17858', + configure_pre=[ + '--enable-threadsafe', + '--enable-tempstore', + '--enable-shared=no', + '--enable-static=yes', + '--disable-tcl', + ] + ), + dict( + name="NCurses 5.5", + url="http://ftp.gnu.org/pub/gnu/ncurses/ncurses-5.5.tar.gz", + checksum='e73c1ac10b4bfc46db43b2ddfd6244ef', + configure_pre=[ + "--without-cxx", + "--without-ada", + "--without-progs", + "--without-curses-h", + "--enable-shared", + "--with-shared", + "--datadir=/usr/share", + "--sysconfdir=/etc", + "--sharedstatedir=/usr/com", + "--with-terminfo-dirs=/usr/share/terminfo", + "--with-default-terminfo-dir=/usr/share/terminfo", + "--libdir=/Library/Frameworks/Python.framework/Versions/%s/lib"%(getVersion(),), + "--enable-termcap", + ], + patches=[ + "ncurses-5.5.patch", + ], + useLDFlags=False, + install='make && make install DESTDIR=%s && cd %s/usr/local/lib && ln -fs ../../../Library/Frameworks/Python.framework/Versions/%s/lib/lib* .'%( + shellQuote(os.path.join(WORKDIR, 'libraries')), + shellQuote(os.path.join(WORKDIR, 'libraries')), + getVersion(), + ), + ), + ]) + result.extend([ dict( - name="SQLite 3.6.11", - url="http://www.sqlite.org/sqlite-3.6.11.tar.gz", - checksum='7ebb099696ab76cc6ff65dd496d17858', + name="Sleepycat DB 4.7.25", + url="http://download.oracle.com/berkeley-db/db-4.7.25.tar.gz", + checksum='ec2b87e833779681a0c3a814aa71359e', + buildDir="build_unix", + configure="../dist/configure", configure_pre=[ - '--enable-threadsafe', - '--enable-tempstore', - '--enable-shared=no', - '--enable-static=yes', - '--disable-tcl', + '--includedir=/usr/local/include/db4', ] ), + ]) - dict( - name="NCurses 5.5", - url="http://ftp.gnu.org/pub/gnu/ncurses/ncurses-5.5.tar.gz", - checksum='e73c1ac10b4bfc46db43b2ddfd6244ef', - configure_pre=[ - "--without-cxx", - "--without-ada", - "--without-progs", - "--without-curses-h", - "--enable-shared", - "--with-shared", - "--datadir=/usr/share", - "--sysconfdir=/etc", - "--sharedstatedir=/usr/com", - "--with-terminfo-dirs=/usr/share/terminfo", - "--with-default-terminfo-dir=/usr/share/terminfo", - "--libdir=/Library/Frameworks/Python.framework/Versions/%s/lib"%(getVersion(),), - "--enable-termcap", - ], - patches=[ - "ncurses-5.5.patch", - ], - useLDFlags=False, - install='make && make install DESTDIR=%s && cd %s/usr/local/lib && ln -fs ../../../Library/Frameworks/Python.framework/Versions/%s/lib/lib* .'%( - shellQuote(os.path.join(WORKDIR, 'libraries')), - shellQuote(os.path.join(WORKDIR, 'libraries')), - getVersion(), - ), - ), -] + return result -# Instructions for building packages inside the .mpkg. -PKG_RECIPES = [ - dict( - name="PythonFramework", - long_name="Python Framework", - source="/Library/Frameworks/Python.framework", - readme="""\ - This package installs Python.framework, that is the python - interpreter and the standard library. This also includes Python - wrappers for lots of Mac OS X API's. - """, - postflight="scripts/postflight.framework", - selected='selected', - ), - dict( - name="PythonApplications", - long_name="GUI Applications", - source="/Applications/Python %(VER)s", - readme="""\ - This package installs IDLE (an interactive Python IDE), - Python Launcher and Build Applet (create application bundles - from python scripts). - It also installs a number of examples and demos. - """, - required=False, - selected='selected', - ), - dict( - name="PythonUnixTools", - long_name="UNIX command-line tools", - source="/usr/local/bin", - readme="""\ - This package installs the unix tools in /usr/local/bin for - compatibility with older releases of Python. This package - is not necessary to use Python. - """, - required=False, - selected='selected', - ), - dict( - name="PythonDocumentation", - long_name="Python Documentation", - topdir="/Library/Frameworks/Python.framework/Versions/%(VER)s/Resources/English.lproj/Documentation", - source="/pydocs", - readme="""\ - This package installs the python documentation at a location - that is useable for pydoc and IDLE. If you have installed Xcode - it will also install a link to the documentation in - /Developer/Documentation/Python - """, - postflight="scripts/postflight.documentation", - required=False, - selected='selected', - ), - dict( - name="PythonProfileChanges", - long_name="Shell profile updater", - readme="""\ - This packages updates your shell profile to make sure that - the Python tools are found by your shell in preference of - the system provided Python tools. - - If you don't install this package you'll have to add - "/Library/Frameworks/Python.framework/Versions/%(VER)s/bin" - to your PATH by hand. - """, - postflight="scripts/postflight.patch-profile", - topdir="/Library/Frameworks/Python.framework", - source="/empty-dir", - required=False, - selected='unselected', - ), - dict( - name="PythonSystemFixes", - long_name="Fix system Python", - readme="""\ - This package updates the system python installation on - Mac OS X 10.3 to ensure that you can build new python extensions - using that copy of python after installing this version. +# Instructions for building packages inside the .mpkg. +def pkg_recipes(): + unselected_for_python3 = ('selected', 'unselected')[PYTHON_3] + result = [ + dict( + name="PythonFramework", + long_name="Python Framework", + source="/Library/Frameworks/Python.framework", + readme="""\ + This package installs Python.framework, that is the python + interpreter and the standard library. This also includes Python + wrappers for lots of Mac OS X API's. """, - postflight="../Tools/fixapplepython23.py", - topdir="/Library/Frameworks/Python.framework", - source="/empty-dir", - required=False, - selected='unselected', - ) -] + postflight="scripts/postflight.framework", + selected='selected', + ), + dict( + name="PythonApplications", + long_name="GUI Applications", + source="/Applications/Python %(VER)s", + readme="""\ + This package installs IDLE (an interactive Python IDE), + Python Launcher and Build Applet (create application bundles + from python scripts). + + It also installs a number of examples and demos. + """, + required=False, + selected='selected', + ), + dict( + name="PythonUnixTools", + long_name="UNIX command-line tools", + source="/usr/local/bin", + readme="""\ + This package installs the unix tools in /usr/local/bin for + compatibility with older releases of Python. This package + is not necessary to use Python. + """, + required=False, + selected='selected', + ), + dict( + name="PythonDocumentation", + long_name="Python Documentation", + topdir="/Library/Frameworks/Python.framework/Versions/%(VER)s/Resources/English.lproj/Documentation", + source="/pydocs", + readme="""\ + This package installs the python documentation at a location + that is useable for pydoc and IDLE. If you have installed Xcode + it will also install a link to the documentation in + /Developer/Documentation/Python + """, + postflight="scripts/postflight.documentation", + required=False, + selected='selected', + ), + dict( + name="PythonProfileChanges", + long_name="Shell profile updater", + readme="""\ + This packages updates your shell profile to make sure that + the Python tools are found by your shell in preference of + the system provided Python tools. + + If you don't install this package you'll have to add + "/Library/Frameworks/Python.framework/Versions/%(VER)s/bin" + to your PATH by hand. + """, + postflight="scripts/postflight.patch-profile", + topdir="/Library/Frameworks/Python.framework", + source="/empty-dir", + required=False, + selected=unselected_for_python3, + ), + ] + + if DEPTARGET < '10.4': + result.append( + dict( + name="PythonSystemFixes", + long_name="Fix system Python", + readme="""\ + This package updates the system python installation on + Mac OS X 10.3 to ensure that you can build new python extensions + using that copy of python after installing this version. + """, + postflight="../Tools/fixapplepython23.py", + topdir="/Library/Frameworks/Python.framework", + source="/empty-dir", + required=False, + selected=unselected_for_python3, + ) + ) + return result def fatal(msg): """ @@ -322,10 +383,10 @@ """ if platform.system() != 'Darwin': - fatal("This script should be run on a Mac OS X 10.4 system") + fatal("This script should be run on a Mac OS X 10.4 (or later) system") - if platform.release() <= '8.': - fatal("This script should be run on a Mac OS X 10.4 system") + if int(platform.release().split('.')[0]) < 8: + fatal("This script should be run on a Mac OS X 10.4 (or later) system") if not os.path.exists(SDKPATH): fatal("Please install the latest version of Xcode and the %s SDK"%( @@ -338,7 +399,7 @@ Parse arguments and update global settings. """ global WORKDIR, DEPSRC, SDKPATH, SRCDIR, DEPTARGET - global UNIVERSALOPTS, UNIVERSALARCHS, ARCHLIST + global UNIVERSALOPTS, UNIVERSALARCHS, ARCHLIST, CC if args is None: args = sys.argv[1:] @@ -355,6 +416,7 @@ print "Additional arguments" sys.exit(1) + deptarget = None for k, v in options: if k in ('-h', '-?', '--help'): print USAGE @@ -374,11 +436,16 @@ elif k in ('--dep-target', ): DEPTARGET=v + deptarget=v elif k in ('--universal-archs', ): if v in UNIVERSALOPTS: UNIVERSALARCHS = v ARCHLIST = universal_opts_map[UNIVERSALARCHS] + if deptarget is None: + # Select alternate default deployment + # target + DEPTARGET = default_target_map.get(v, '10.3') else: raise NotImplementedError, v @@ -390,6 +457,8 @@ SDKPATH=os.path.abspath(SDKPATH) DEPSRC=os.path.abspath(DEPSRC) + CC=target_cc_map[DEPTARGET] + print "Settings:" print " * Source directory:", SRCDIR print " * Build directory: ", WORKDIR @@ -397,6 +466,7 @@ print " * Third-party source:", DEPSRC print " * Deployment target:", DEPTARGET print " * Universal architectures:", ARCHLIST + print " * C compiler:", CC print "" @@ -614,8 +684,8 @@ runCommand('make update') runCommand('make html') os.chdir(curDir) - if os.path.exists(docdir): - os.rmdir(docdir) + if not os.path.exists(docdir): + os.mkdir(docdir) os.rename(os.path.join(buildDir, 'build', 'html'), docdir) @@ -650,18 +720,20 @@ 'libraries', 'usr', 'local', 'lib') print "Running configure..." runCommand("%s -C --enable-framework --enable-universalsdk=%s " - "--with-universal-archs=%s --with-computed-gotos " + "--with-universal-archs=%s " + "%s " "LDFLAGS='-g -L%s/libraries/usr/local/lib' " "OPT='-g -O3 -I%s/libraries/usr/local/include' 2>&1"%( shellQuote(os.path.join(SRCDIR, 'configure')), shellQuote(SDKPATH), UNIVERSALARCHS, + (' ', '--with-computed-gotos ')[PYTHON_3], shellQuote(WORKDIR)[1:-1], shellQuote(WORKDIR)[1:-1])) print "Running make" runCommand("make") - print "Running make frameworkinstall" + print "Running make install" runCommand("make install DESTDIR=%s"%( shellQuote(rootDir))) @@ -685,8 +757,6 @@ frmDir = os.path.join(rootDir, 'Library', 'Frameworks', 'Python.framework') gid = grp.getgrnam('admin').gr_gid - - for dirpath, dirnames, filenames in os.walk(frmDir): for dn in dirnames: os.chmod(os.path.join(dirpath, dn), 0775) @@ -733,12 +803,11 @@ os.chdir(curdir) - # Remove the 'Current' link, that way we don't accidently mess with an already installed - # version of python - os.unlink(os.path.join(rootDir, 'Library', 'Frameworks', 'Python.framework', 'Versions', 'Current')) - - - + if PYTHON_3: + # Remove the 'Current' link, that way we don't accidently mess + # with an already installed version of python 2 + os.unlink(os.path.join(rootDir, 'Library', 'Frameworks', + 'Python.framework', 'Versions', 'Current')) def patchFile(inPath, outPath): data = fileContents(inPath) @@ -872,9 +941,9 @@ IFPkgFlagPackageList=[ dict( IFPkgFlagPackageLocation='%s-%s.pkg'%(item['name'], getVersion()), - IFPkgFlagPackageSelection=item['selected'], + IFPkgFlagPackageSelection=item.get('selected', 'selected'), ) - for item in PKG_RECIPES + for item in pkg_recipes() ], IFPkgFormatVersion=0.10000000149011612, IFPkgFlagBackgroundScaling="proportional", @@ -901,7 +970,7 @@ pkgroot = os.path.join(outdir, 'Python.mpkg', 'Contents') pkgcontents = os.path.join(pkgroot, 'Packages') os.makedirs(pkgcontents) - for recipe in PKG_RECIPES: + for recipe in pkg_recipes(): packageFromRecipe(pkgcontents, recipe) rsrcDir = os.path.join(pkgroot, 'Resources') @@ -949,9 +1018,9 @@ shutil.rmtree(outdir) imagepath = os.path.join(outdir, - 'python-%s-macosx'%(getFullVersion(),)) + 'python-%s-macosx%s'%(getFullVersion(),DEPTARGET)) if INCLUDE_TIMESTAMP: - imagepath = imagepath + '%04d-%02d-%02d'%(time.localtime()[:3]) + imagepath = imagepath + '-%04d-%02d-%02d'%(time.localtime()[:3]) imagepath = imagepath + '.dmg' os.mkdir(outdir) @@ -1009,6 +1078,7 @@ checkEnvironment() os.environ['MACOSX_DEPLOYMENT_TARGET'] = DEPTARGET + os.environ['CC'] = CC if os.path.exists(WORKDIR): shutil.rmtree(WORKDIR) @@ -1055,11 +1125,8 @@ print >> fp, "# By:", pwd.getpwuid(os.getuid()).pw_gecos fp.close() - - # And copy it to a DMG buildDMG() - if __name__ == "__main__": main() From python-checkins at python.org Fri Mar 19 22:48:54 2010 From: python-checkins at python.org (benjamin.peterson) Date: Fri, 19 Mar 2010 22:48:54 +0100 (CET) Subject: [Python-checkins] r79120 - in python/branches/release31-maint: Mac/BuildScript/build-installer.py Message-ID: <20100319214854.ECF7FFD4F@mail.python.org> Author: benjamin.peterson Date: Fri Mar 19 22:48:54 2010 New Revision: 79120 Log: Merged revisions 79119 via svnmerge from svn+ssh://pythondev at svn.python.org/python/branches/py3k ........ r79119 | benjamin.peterson | 2010-03-19 16:42:45 -0500 (Fri, 19 Mar 2010) | 1 line update mac installer script from the trunk #8068 ........ Modified: python/branches/release31-maint/ (props changed) python/branches/release31-maint/Mac/BuildScript/build-installer.py Modified: python/branches/release31-maint/Mac/BuildScript/build-installer.py ============================================================================== --- python/branches/release31-maint/Mac/BuildScript/build-installer.py (original) +++ python/branches/release31-maint/Mac/BuildScript/build-installer.py Fri Mar 19 22:48:54 2010 @@ -40,16 +40,19 @@ if ln.startswith(variable): value = ln[len(variable):].strip() return value[1:-1] + raise RuntimeError, "Cannot find variable %s" % variable[:-1] def getVersion(): return grepValue(os.path.join(SRCDIR, 'configure'), 'PACKAGE_VERSION') +def getVersionTuple(): + return tuple([int(n) for n in getVersion().split('.')]) + def getFullVersion(): fn = os.path.join(SRCDIR, 'Include', 'patchlevel.h') for ln in open(fn): if 'PY_VERSION' in ln: return ln.split()[-1][1:-1] - raise RuntimeError, "Cannot find full version??" # The directory we'll use to create the build (will be erased and recreated) @@ -61,12 +64,33 @@ DEPSRC = os.path.expanduser('~/Universal/other-sources') # Location of the preferred SDK + +### There are some issues with the SDK selection below here, +### The resulting binary doesn't work on all platforms that +### it should. Always default to the 10.4u SDK until that +### isue is resolved. +### +##if int(os.uname()[2].split('.')[0]) == 8: +## # Explicitly use the 10.4u (universal) SDK when +## # building on 10.4, the system headers are not +## # useable for a universal build +## SDKPATH = "/Developer/SDKs/MacOSX10.4u.sdk" +##else: +## SDKPATH = "/" + SDKPATH = "/Developer/SDKs/MacOSX10.4u.sdk" -#SDKPATH = "/" universal_opts_map = { '32-bit': ('i386', 'ppc',), '64-bit': ('x86_64', 'ppc64',), - 'all': ('i386', 'ppc', 'x86_64', 'ppc64',) } + 'intel': ('i386', 'x86_64'), + '3-way': ('ppc', 'i386', 'x86_64'), + 'all': ('i386', 'ppc', 'x86_64', 'ppc64',) } +default_target_map = { + '64-bit': '10.5', + '3-way': '10.5', + 'intel': '10.5', + 'all': '10.5', +} UNIVERSALOPTS = tuple(universal_opts_map.keys()) @@ -84,6 +108,17 @@ # $MACOSX_DEPLOYMENT_TARGET -> minimum OS X level DEPTARGET = '10.3' +target_cc_map = { + '10.3': 'gcc-4.0', + '10.4': 'gcc-4.0', + '10.5': 'gcc-4.0', + '10.6': 'gcc-4.2', +} + +CC = target_cc_map[DEPTARGET] + +PYTHON_3 = getVersionTuple() >= (3, 0) + USAGE = textwrap.dedent("""\ Usage: build_python [options] @@ -104,177 +139,203 @@ # [The recipes are defined here for convenience but instantiated later after # command line options have been processed.] def library_recipes(): - return [ - dict( - name="Bzip2 1.0.4", - url="http://www.bzip.org/1.0.4/bzip2-1.0.4.tar.gz", - checksum='fc310b254f6ba5fbb5da018f04533688', - configure=None, - install='make install PREFIX=%s/usr/local/ CFLAGS="-arch %s -isysroot %s"'%( - shellQuote(os.path.join(WORKDIR, 'libraries')), - ' -arch '.join(ARCHLIST), - SDKPATH, + result = [] + + if DEPTARGET < '10.5': + result.extend([ + dict( + name="Bzip2 1.0.5", + url="http://www.bzip.org/1.0.5/bzip2-1.0.5.tar.gz", + checksum='3c15a0c8d1d3ee1c46a1634d00617b1a', + configure=None, + install='make install CC=%s PREFIX=%s/usr/local/ CFLAGS="-arch %s -isysroot %s"'%( + CC, + shellQuote(os.path.join(WORKDIR, 'libraries')), + ' -arch '.join(ARCHLIST), + SDKPATH, + ), ), - ), - dict( - name="ZLib 1.2.3", - url="http://www.gzip.org/zlib/zlib-1.2.3.tar.gz", - checksum='debc62758716a169df9f62e6ab2bc634', - configure=None, - install='make install prefix=%s/usr/local/ CFLAGS="-arch %s -isysroot %s"'%( - shellQuote(os.path.join(WORKDIR, 'libraries')), - ' -arch '.join(ARCHLIST), - SDKPATH, + dict( + name="ZLib 1.2.3", + url="http://www.gzip.org/zlib/zlib-1.2.3.tar.gz", + checksum='debc62758716a169df9f62e6ab2bc634', + configure=None, + install='make install CC=%s prefix=%s/usr/local/ CFLAGS="-arch %s -isysroot %s"'%( + CC, + shellQuote(os.path.join(WORKDIR, 'libraries')), + ' -arch '.join(ARCHLIST), + SDKPATH, + ), ), - ), - dict( - # Note that GNU readline is GPL'd software - name="GNU Readline 5.1.4", - url="http://ftp.gnu.org/pub/gnu/readline/readline-5.1.tar.gz" , - checksum='7ee5a692db88b30ca48927a13fd60e46', - patchlevel='0', - patches=[ - # The readline maintainers don't do actual micro releases, but - # just ship a set of patches. - 'http://ftp.gnu.org/pub/gnu/readline/readline-5.1-patches/readline51-001', - 'http://ftp.gnu.org/pub/gnu/readline/readline-5.1-patches/readline51-002', - 'http://ftp.gnu.org/pub/gnu/readline/readline-5.1-patches/readline51-003', - 'http://ftp.gnu.org/pub/gnu/readline/readline-5.1-patches/readline51-004', - ] - ), + dict( + # Note that GNU readline is GPL'd software + name="GNU Readline 5.1.4", + url="http://ftp.gnu.org/pub/gnu/readline/readline-5.1.tar.gz" , + checksum='7ee5a692db88b30ca48927a13fd60e46', + patchlevel='0', + patches=[ + # The readline maintainers don't do actual micro releases, but + # just ship a set of patches. + 'http://ftp.gnu.org/pub/gnu/readline/readline-5.1-patches/readline51-001', + 'http://ftp.gnu.org/pub/gnu/readline/readline-5.1-patches/readline51-002', + 'http://ftp.gnu.org/pub/gnu/readline/readline-5.1-patches/readline51-003', + 'http://ftp.gnu.org/pub/gnu/readline/readline-5.1-patches/readline51-004', + ] + ), + dict( + name="SQLite 3.6.11", + url="http://www.sqlite.org/sqlite-3.6.11.tar.gz", + checksum='7ebb099696ab76cc6ff65dd496d17858', + configure_pre=[ + '--enable-threadsafe', + '--enable-tempstore', + '--enable-shared=no', + '--enable-static=yes', + '--disable-tcl', + ] + ), + dict( + name="NCurses 5.5", + url="http://ftp.gnu.org/pub/gnu/ncurses/ncurses-5.5.tar.gz", + checksum='e73c1ac10b4bfc46db43b2ddfd6244ef', + configure_pre=[ + "--without-cxx", + "--without-ada", + "--without-progs", + "--without-curses-h", + "--enable-shared", + "--with-shared", + "--datadir=/usr/share", + "--sysconfdir=/etc", + "--sharedstatedir=/usr/com", + "--with-terminfo-dirs=/usr/share/terminfo", + "--with-default-terminfo-dir=/usr/share/terminfo", + "--libdir=/Library/Frameworks/Python.framework/Versions/%s/lib"%(getVersion(),), + "--enable-termcap", + ], + patches=[ + "ncurses-5.5.patch", + ], + useLDFlags=False, + install='make && make install DESTDIR=%s && cd %s/usr/local/lib && ln -fs ../../../Library/Frameworks/Python.framework/Versions/%s/lib/lib* .'%( + shellQuote(os.path.join(WORKDIR, 'libraries')), + shellQuote(os.path.join(WORKDIR, 'libraries')), + getVersion(), + ), + ), + ]) + result.extend([ dict( - name="SQLite 3.6.11", - url="http://www.sqlite.org/sqlite-3.6.11.tar.gz", - checksum='7ebb099696ab76cc6ff65dd496d17858', + name="Sleepycat DB 4.7.25", + url="http://download.oracle.com/berkeley-db/db-4.7.25.tar.gz", + checksum='ec2b87e833779681a0c3a814aa71359e', + buildDir="build_unix", + configure="../dist/configure", configure_pre=[ - '--enable-threadsafe', - '--enable-tempstore', - '--enable-shared=no', - '--enable-static=yes', - '--disable-tcl', + '--includedir=/usr/local/include/db4', ] ), + ]) - dict( - name="NCurses 5.5", - url="http://ftp.gnu.org/pub/gnu/ncurses/ncurses-5.5.tar.gz", - checksum='e73c1ac10b4bfc46db43b2ddfd6244ef', - configure_pre=[ - "--without-cxx", - "--without-ada", - "--without-progs", - "--without-curses-h", - "--enable-shared", - "--with-shared", - "--datadir=/usr/share", - "--sysconfdir=/etc", - "--sharedstatedir=/usr/com", - "--with-terminfo-dirs=/usr/share/terminfo", - "--with-default-terminfo-dir=/usr/share/terminfo", - "--libdir=/Library/Frameworks/Python.framework/Versions/%s/lib"%(getVersion(),), - "--enable-termcap", - ], - patches=[ - "ncurses-5.5.patch", - ], - useLDFlags=False, - install='make && make install DESTDIR=%s && cd %s/usr/local/lib && ln -fs ../../../Library/Frameworks/Python.framework/Versions/%s/lib/lib* .'%( - shellQuote(os.path.join(WORKDIR, 'libraries')), - shellQuote(os.path.join(WORKDIR, 'libraries')), - getVersion(), - ), - ), -] + return result -# Instructions for building packages inside the .mpkg. -PKG_RECIPES = [ - dict( - name="PythonFramework", - long_name="Python Framework", - source="/Library/Frameworks/Python.framework", - readme="""\ - This package installs Python.framework, that is the python - interpreter and the standard library. This also includes Python - wrappers for lots of Mac OS X API's. - """, - postflight="scripts/postflight.framework", - selected='selected', - ), - dict( - name="PythonApplications", - long_name="GUI Applications", - source="/Applications/Python %(VER)s", - readme="""\ - This package installs IDLE (an interactive Python IDE), - Python Launcher and Build Applet (create application bundles - from python scripts). - It also installs a number of examples and demos. - """, - required=False, - selected='selected', - ), - dict( - name="PythonUnixTools", - long_name="UNIX command-line tools", - source="/usr/local/bin", - readme="""\ - This package installs the unix tools in /usr/local/bin for - compatibility with older releases of Python. This package - is not necessary to use Python. - """, - required=False, - selected='selected', - ), - dict( - name="PythonDocumentation", - long_name="Python Documentation", - topdir="/Library/Frameworks/Python.framework/Versions/%(VER)s/Resources/English.lproj/Documentation", - source="/pydocs", - readme="""\ - This package installs the python documentation at a location - that is useable for pydoc and IDLE. If you have installed Xcode - it will also install a link to the documentation in - /Developer/Documentation/Python - """, - postflight="scripts/postflight.documentation", - required=False, - selected='selected', - ), - dict( - name="PythonProfileChanges", - long_name="Shell profile updater", - readme="""\ - This packages updates your shell profile to make sure that - the Python tools are found by your shell in preference of - the system provided Python tools. - - If you don't install this package you'll have to add - "/Library/Frameworks/Python.framework/Versions/%(VER)s/bin" - to your PATH by hand. - """, - postflight="scripts/postflight.patch-profile", - topdir="/Library/Frameworks/Python.framework", - source="/empty-dir", - required=False, - selected='unselected', - ), - dict( - name="PythonSystemFixes", - long_name="Fix system Python", - readme="""\ - This package updates the system python installation on - Mac OS X 10.3 to ensure that you can build new python extensions - using that copy of python after installing this version. +# Instructions for building packages inside the .mpkg. +def pkg_recipes(): + unselected_for_python3 = ('selected', 'unselected')[PYTHON_3] + result = [ + dict( + name="PythonFramework", + long_name="Python Framework", + source="/Library/Frameworks/Python.framework", + readme="""\ + This package installs Python.framework, that is the python + interpreter and the standard library. This also includes Python + wrappers for lots of Mac OS X API's. """, - postflight="../Tools/fixapplepython23.py", - topdir="/Library/Frameworks/Python.framework", - source="/empty-dir", - required=False, - selected='unselected', - ) -] + postflight="scripts/postflight.framework", + selected='selected', + ), + dict( + name="PythonApplications", + long_name="GUI Applications", + source="/Applications/Python %(VER)s", + readme="""\ + This package installs IDLE (an interactive Python IDE), + Python Launcher and Build Applet (create application bundles + from python scripts). + + It also installs a number of examples and demos. + """, + required=False, + selected='selected', + ), + dict( + name="PythonUnixTools", + long_name="UNIX command-line tools", + source="/usr/local/bin", + readme="""\ + This package installs the unix tools in /usr/local/bin for + compatibility with older releases of Python. This package + is not necessary to use Python. + """, + required=False, + selected='selected', + ), + dict( + name="PythonDocumentation", + long_name="Python Documentation", + topdir="/Library/Frameworks/Python.framework/Versions/%(VER)s/Resources/English.lproj/Documentation", + source="/pydocs", + readme="""\ + This package installs the python documentation at a location + that is useable for pydoc and IDLE. If you have installed Xcode + it will also install a link to the documentation in + /Developer/Documentation/Python + """, + postflight="scripts/postflight.documentation", + required=False, + selected='selected', + ), + dict( + name="PythonProfileChanges", + long_name="Shell profile updater", + readme="""\ + This packages updates your shell profile to make sure that + the Python tools are found by your shell in preference of + the system provided Python tools. + + If you don't install this package you'll have to add + "/Library/Frameworks/Python.framework/Versions/%(VER)s/bin" + to your PATH by hand. + """, + postflight="scripts/postflight.patch-profile", + topdir="/Library/Frameworks/Python.framework", + source="/empty-dir", + required=False, + selected=unselected_for_python3, + ), + ] + + if DEPTARGET < '10.4': + result.append( + dict( + name="PythonSystemFixes", + long_name="Fix system Python", + readme="""\ + This package updates the system python installation on + Mac OS X 10.3 to ensure that you can build new python extensions + using that copy of python after installing this version. + """, + postflight="../Tools/fixapplepython23.py", + topdir="/Library/Frameworks/Python.framework", + source="/empty-dir", + required=False, + selected=unselected_for_python3, + ) + ) + return result def fatal(msg): """ @@ -322,10 +383,10 @@ """ if platform.system() != 'Darwin': - fatal("This script should be run on a Mac OS X 10.4 system") + fatal("This script should be run on a Mac OS X 10.4 (or later) system") - if platform.release() <= '8.': - fatal("This script should be run on a Mac OS X 10.4 system") + if int(platform.release().split('.')[0]) < 8: + fatal("This script should be run on a Mac OS X 10.4 (or later) system") if not os.path.exists(SDKPATH): fatal("Please install the latest version of Xcode and the %s SDK"%( @@ -338,7 +399,7 @@ Parse arguments and update global settings. """ global WORKDIR, DEPSRC, SDKPATH, SRCDIR, DEPTARGET - global UNIVERSALOPTS, UNIVERSALARCHS, ARCHLIST + global UNIVERSALOPTS, UNIVERSALARCHS, ARCHLIST, CC if args is None: args = sys.argv[1:] @@ -355,6 +416,7 @@ print "Additional arguments" sys.exit(1) + deptarget = None for k, v in options: if k in ('-h', '-?', '--help'): print USAGE @@ -374,11 +436,16 @@ elif k in ('--dep-target', ): DEPTARGET=v + deptarget=v elif k in ('--universal-archs', ): if v in UNIVERSALOPTS: UNIVERSALARCHS = v ARCHLIST = universal_opts_map[UNIVERSALARCHS] + if deptarget is None: + # Select alternate default deployment + # target + DEPTARGET = default_target_map.get(v, '10.3') else: raise NotImplementedError, v @@ -390,6 +457,8 @@ SDKPATH=os.path.abspath(SDKPATH) DEPSRC=os.path.abspath(DEPSRC) + CC=target_cc_map[DEPTARGET] + print "Settings:" print " * Source directory:", SRCDIR print " * Build directory: ", WORKDIR @@ -397,6 +466,7 @@ print " * Third-party source:", DEPSRC print " * Deployment target:", DEPTARGET print " * Universal architectures:", ARCHLIST + print " * C compiler:", CC print "" @@ -614,8 +684,8 @@ runCommand('make update') runCommand('make html') os.chdir(curDir) - if os.path.exists(docdir): - os.rmdir(docdir) + if not os.path.exists(docdir): + os.mkdir(docdir) os.rename(os.path.join(buildDir, 'build', 'html'), docdir) @@ -650,18 +720,20 @@ 'libraries', 'usr', 'local', 'lib') print "Running configure..." runCommand("%s -C --enable-framework --enable-universalsdk=%s " - "--with-universal-archs=%s --with-computed-gotos " + "--with-universal-archs=%s " + "%s " "LDFLAGS='-g -L%s/libraries/usr/local/lib' " "OPT='-g -O3 -I%s/libraries/usr/local/include' 2>&1"%( shellQuote(os.path.join(SRCDIR, 'configure')), shellQuote(SDKPATH), UNIVERSALARCHS, + (' ', '--with-computed-gotos ')[PYTHON_3], shellQuote(WORKDIR)[1:-1], shellQuote(WORKDIR)[1:-1])) print "Running make" runCommand("make") - print "Running make frameworkinstall" + print "Running make install" runCommand("make install DESTDIR=%s"%( shellQuote(rootDir))) @@ -685,8 +757,6 @@ frmDir = os.path.join(rootDir, 'Library', 'Frameworks', 'Python.framework') gid = grp.getgrnam('admin').gr_gid - - for dirpath, dirnames, filenames in os.walk(frmDir): for dn in dirnames: os.chmod(os.path.join(dirpath, dn), 0775) @@ -733,12 +803,11 @@ os.chdir(curdir) - # Remove the 'Current' link, that way we don't accidently mess with an already installed - # version of python - os.unlink(os.path.join(rootDir, 'Library', 'Frameworks', 'Python.framework', 'Versions', 'Current')) - - - + if PYTHON_3: + # Remove the 'Current' link, that way we don't accidently mess + # with an already installed version of python 2 + os.unlink(os.path.join(rootDir, 'Library', 'Frameworks', + 'Python.framework', 'Versions', 'Current')) def patchFile(inPath, outPath): data = fileContents(inPath) @@ -872,9 +941,9 @@ IFPkgFlagPackageList=[ dict( IFPkgFlagPackageLocation='%s-%s.pkg'%(item['name'], getVersion()), - IFPkgFlagPackageSelection=item['selected'], + IFPkgFlagPackageSelection=item.get('selected', 'selected'), ) - for item in PKG_RECIPES + for item in pkg_recipes() ], IFPkgFormatVersion=0.10000000149011612, IFPkgFlagBackgroundScaling="proportional", @@ -901,7 +970,7 @@ pkgroot = os.path.join(outdir, 'Python.mpkg', 'Contents') pkgcontents = os.path.join(pkgroot, 'Packages') os.makedirs(pkgcontents) - for recipe in PKG_RECIPES: + for recipe in pkg_recipes(): packageFromRecipe(pkgcontents, recipe) rsrcDir = os.path.join(pkgroot, 'Resources') @@ -949,9 +1018,9 @@ shutil.rmtree(outdir) imagepath = os.path.join(outdir, - 'python-%s-macosx'%(getFullVersion(),)) + 'python-%s-macosx%s'%(getFullVersion(),DEPTARGET)) if INCLUDE_TIMESTAMP: - imagepath = imagepath + '%04d-%02d-%02d'%(time.localtime()[:3]) + imagepath = imagepath + '-%04d-%02d-%02d'%(time.localtime()[:3]) imagepath = imagepath + '.dmg' os.mkdir(outdir) @@ -1009,6 +1078,7 @@ checkEnvironment() os.environ['MACOSX_DEPLOYMENT_TARGET'] = DEPTARGET + os.environ['CC'] = CC if os.path.exists(WORKDIR): shutil.rmtree(WORKDIR) @@ -1055,11 +1125,8 @@ print >> fp, "# By:", pwd.getpwuid(os.getuid()).pw_gecos fp.close() - - # And copy it to a DMG buildDMG() - if __name__ == "__main__": main() From python-checkins at python.org Fri Mar 19 22:56:34 2010 From: python-checkins at python.org (tarek.ziade) Date: Fri, 19 Mar 2010 22:56:34 +0100 (CET) Subject: [Python-checkins] r79121 - in python/branches/release31-maint: Lib/distutils/command/build_ext.py Lib/distutils/tests/test_build_ext.py Misc/NEWS Message-ID: <20100319215634.9F706FC8A@mail.python.org> Author: tarek.ziade Date: Fri Mar 19 22:56:34 2010 New Revision: 79121 Log: Fixed #2698 - now reads the compiler option when creating the compiler Modified: python/branches/release31-maint/Lib/distutils/command/build_ext.py python/branches/release31-maint/Lib/distutils/tests/test_build_ext.py python/branches/release31-maint/Misc/NEWS Modified: python/branches/release31-maint/Lib/distutils/command/build_ext.py ============================================================================== --- python/branches/release31-maint/Lib/distutils/command/build_ext.py (original) +++ python/branches/release31-maint/Lib/distutils/command/build_ext.py Fri Mar 19 22:56:34 2010 @@ -310,7 +310,7 @@ # Setup the CCompiler object that we'll use to do all the # compiling and linking - self.compiler = new_compiler(compiler=None, + self.compiler = new_compiler(compiler=self.compiler, verbose=self.verbose, dry_run=self.dry_run, force=self.force) Modified: python/branches/release31-maint/Lib/distutils/tests/test_build_ext.py ============================================================================== --- python/branches/release31-maint/Lib/distutils/tests/test_build_ext.py (original) +++ python/branches/release31-maint/Lib/distutils/tests/test_build_ext.py Fri Mar 19 22:56:34 2010 @@ -329,6 +329,7 @@ self.assertEquals(so_dir, other_tmp_dir) cmd.inplace = 0 + cmd.compiler = None cmd.run() so_file = cmd.get_outputs()[0] self.assertTrue(os.path.exists(so_file)) Modified: python/branches/release31-maint/Misc/NEWS ============================================================================== --- python/branches/release31-maint/Misc/NEWS (original) +++ python/branches/release31-maint/Misc/NEWS Fri Mar 19 22:56:34 2010 @@ -17,6 +17,8 @@ Library ------- +- Issue #2698: The --compiler ignored was ignored for distutils' build_ext. + - Issue #4961: Inconsistent/wrong result of askyesno function in tkMessageBox with Tcl/Tk-8.5. From python-checkins at python.org Sat Mar 20 00:02:15 2010 From: python-checkins at python.org (barry.warsaw) Date: Sat, 20 Mar 2010 00:02:15 +0100 (CET) Subject: [Python-checkins] r79122 - in python/branches/release26-maint: Include/patchlevel.h Misc/NEWS Message-ID: <20100319230215.789CBF94A@mail.python.org> Author: barry.warsaw Date: Sat Mar 20 00:02:15 2010 New Revision: 79122 Log: Post 2.6.5 final cleanup. Modified: python/branches/release26-maint/Include/patchlevel.h python/branches/release26-maint/Misc/NEWS Modified: python/branches/release26-maint/Include/patchlevel.h ============================================================================== --- python/branches/release26-maint/Include/patchlevel.h (original) +++ python/branches/release26-maint/Include/patchlevel.h Sat Mar 20 00:02:15 2010 @@ -27,7 +27,7 @@ #define PY_RELEASE_SERIAL 0 /* Version as a string */ -#define PY_VERSION "2.6.5" +#define PY_VERSION "2.6.5+" /*--end constants--*/ /* Subversion Revision number of this file (not of the repository) */ Modified: python/branches/release26-maint/Misc/NEWS ============================================================================== --- python/branches/release26-maint/Misc/NEWS (original) +++ python/branches/release26-maint/Misc/NEWS Sat Mar 20 00:02:15 2010 @@ -4,6 +4,18 @@ (editors: check NEWS.help for information about editing NEWS using ReST.) +What's New in Python 2.6.6 alpha 1? +=================================== + +*Release date: XXXX-XX-XX* + +Core and Builtins +----------------- + +Library +------- + + What's New in Python 2.6.5? =========================== From python-checkins at python.org Sat Mar 20 00:19:56 2010 From: python-checkins at python.org (sean.reifschneider) Date: Sat, 20 Mar 2010 00:19:56 +0100 (CET) Subject: [Python-checkins] r79123 - in python/trunk/Doc: includes/email-headers.py library/email-examples.rst Message-ID: <20100319231956.136E7F91E@mail.python.org> Author: sean.reifschneider Date: Sat Mar 20 00:19:55 2010 New Revision: 79123 Log: Adding an example of reproducing the rfc822.Message() parsing. Added: python/trunk/Doc/includes/email-headers.py Modified: python/trunk/Doc/library/email-examples.rst Added: python/trunk/Doc/includes/email-headers.py ============================================================================== --- (empty file) +++ python/trunk/Doc/includes/email-headers.py Sat Mar 20 00:19:55 2010 @@ -0,0 +1,17 @@ +# Import the email modules we'll need +from email.parser import Parser + +# If the e-mail headers are in a file, uncomment this line: +#headers = Parser().parse(messagefile) + +# Or for parsing headers in a string, use: +headers = Parser().parsestr('From: \n' + 'To: \n' + 'Subject: Test message\n' + '\n' + 'Body would go here\n') + +# Now the header items can be accessed as a dictionary: +print 'To: %s' % headers['to'] +print 'From: %s' % headers['from'] +print 'Subject: %s' % headers['subject'] Modified: python/trunk/Doc/library/email-examples.rst ============================================================================== --- python/trunk/Doc/library/email-examples.rst (original) +++ python/trunk/Doc/library/email-examples.rst Sat Mar 20 00:19:55 2010 @@ -11,6 +11,12 @@ .. literalinclude:: ../includes/email-simple.py +And parsing RFC822 headers can easily be done by the parse(filename) or +parsestr(message_as_string) methods of the Parser() class: + +.. literalinclude:: ../includes/email-headers.py + + Here's an example of how to send a MIME message containing a bunch of family pictures that may be residing in a directory: From python-checkins at python.org Sat Mar 20 00:23:05 2010 From: python-checkins at python.org (sean.reifschneider) Date: Sat, 20 Mar 2010 00:23:05 +0100 (CET) Subject: [Python-checkins] r79124 - in python/branches/py3k/Doc: includes/email-headers.py library/email-examples.rst Message-ID: <20100319232305.7889BC535@mail.python.org> Author: sean.reifschneider Date: Sat Mar 20 00:23:05 2010 New Revision: 79124 Log: Adding an example of reproducing the rfc822.Message() parsing. Added: python/branches/py3k/Doc/includes/email-headers.py Modified: python/branches/py3k/Doc/library/email-examples.rst Added: python/branches/py3k/Doc/includes/email-headers.py ============================================================================== --- (empty file) +++ python/branches/py3k/Doc/includes/email-headers.py Sat Mar 20 00:23:05 2010 @@ -0,0 +1,17 @@ +# Import the email modules we'll need +from email.parser import Parser + +# If the e-mail headers are in a file, uncomment this line: +#headers = Parser().parse(messagefile) + +# Or for parsing headers in a string, use: +headers = Parser().parsestr('From: \n' + 'To: \n' + 'Subject: Test message\n' + '\n' + 'Body would go here\n') + +# Now the header items can be accessed as a dictionary: +print 'To: %s' % headers['to'] +print 'From: %s' % headers['from'] +print 'Subject: %s' % headers['subject'] Modified: python/branches/py3k/Doc/library/email-examples.rst ============================================================================== --- python/branches/py3k/Doc/library/email-examples.rst (original) +++ python/branches/py3k/Doc/library/email-examples.rst Sat Mar 20 00:23:05 2010 @@ -11,6 +11,12 @@ .. literalinclude:: ../includes/email-simple.py +And parsing RFC822 headers can easily be done by the parse(filename) or +parsestr(message_as_string) methods of the Parser() class: + +.. literalinclude:: ../includes/email-headers.py + + Here's an example of how to send a MIME message containing a bunch of family pictures that may be residing in a directory: From python-checkins at python.org Sat Mar 20 01:05:42 2010 From: python-checkins at python.org (sean.reifschneider) Date: Sat, 20 Mar 2010 01:05:42 +0100 (CET) Subject: [Python-checkins] r79125 - python/trunk/Doc/includes/email-headers.py Message-ID: <20100320000542.2DB75E229@mail.python.org> Author: sean.reifschneider Date: Sat Mar 20 01:05:42 2010 New Revision: 79125 Log: Fixing the file call in the rfc822.Message replacement example. Modified: python/trunk/Doc/includes/email-headers.py Modified: python/trunk/Doc/includes/email-headers.py ============================================================================== --- python/trunk/Doc/includes/email-headers.py (original) +++ python/trunk/Doc/includes/email-headers.py Sat Mar 20 01:05:42 2010 @@ -2,7 +2,7 @@ from email.parser import Parser # If the e-mail headers are in a file, uncomment this line: -#headers = Parser().parse(messagefile) +#headers = Parser().parse(open(messagefile, 'r')) # Or for parsing headers in a string, use: headers = Parser().parsestr('From: \n' From python-checkins at python.org Sat Mar 20 01:06:05 2010 From: python-checkins at python.org (sean.reifschneider) Date: Sat, 20 Mar 2010 01:06:05 +0100 (CET) Subject: [Python-checkins] r79126 - python/branches/py3k/Doc/includes/email-headers.py Message-ID: <20100320000605.EF9AAE229@mail.python.org> Author: sean.reifschneider Date: Sat Mar 20 01:06:05 2010 New Revision: 79126 Log: Fixing the file call in the rfc822.Message replacement example. Modified: python/branches/py3k/Doc/includes/email-headers.py Modified: python/branches/py3k/Doc/includes/email-headers.py ============================================================================== --- python/branches/py3k/Doc/includes/email-headers.py (original) +++ python/branches/py3k/Doc/includes/email-headers.py Sat Mar 20 01:06:05 2010 @@ -2,7 +2,7 @@ from email.parser import Parser # If the e-mail headers are in a file, uncomment this line: -#headers = Parser().parse(messagefile) +#headers = Parser().parse(open(messagefile, 'r')) # Or for parsing headers in a string, use: headers = Parser().parsestr('From: \n' From solipsis at pitrou.net Sat Mar 20 01:14:09 2010 From: solipsis at pitrou.net (solipsis at pitrou.net) Date: Sat, 20 Mar 2010 01:14:09 +0100 (CET) Subject: [Python-checkins] Daily py3k reference leaks (r79119): sum=0 Message-ID: <20100320001409.A61A11770D@ns6635.ovh.net> py3k results for svn r79119 (hg cset 95ec699fa3cb) -------------------------------------------------- Command line was: ['./python', '-m', 'test.regrtest', '-uall', '-R', '3:3:/home/antoine/py3k/refleaks/reflogyjaLMe', '-x', 'test_httpservers'] From python-checkins at python.org Sat Mar 20 01:17:46 2010 From: python-checkins at python.org (florent.xicluna) Date: Sat, 20 Mar 2010 01:17:46 +0100 (CET) Subject: [Python-checkins] r79127 - python/trunk/Lib/test/test_thread.py Message-ID: <20100320001746.8DF2FDDBC@mail.python.org> Author: florent.xicluna Date: Sat Mar 20 01:17:46 2010 New Revision: 79127 Log: #8178 Cleanup the threads after test_thread.TestForkInThread. Modified: python/trunk/Lib/test/test_thread.py Modified: python/trunk/Lib/test/test_thread.py ============================================================================== --- python/trunk/Lib/test/test_thread.py (original) +++ python/trunk/Lib/test/test_thread.py Sat Mar 20 01:17:46 2010 @@ -65,10 +65,10 @@ def test_stack_size(self): # Various stack size tests. - self.assertEquals(thread.stack_size(), 0, "intial stack size is not 0") + self.assertEqual(thread.stack_size(), 0, "initial stack size is not 0") thread.stack_size(0) - self.assertEquals(thread.stack_size(), 0, "stack_size not reset to default") + self.assertEqual(thread.stack_size(), 0, "stack_size not reset to default") if os.name not in ("nt", "os2", "posix"): return @@ -88,7 +88,7 @@ fail_msg = "stack_size(%d) failed - should succeed" for tss in (262144, 0x100000, 0): thread.stack_size(tss) - self.assertEquals(thread.stack_size(), tss, fail_msg % tss) + self.assertEqual(thread.stack_size(), tss, fail_msg % tss) verbose_print("successfully set stack_size(%d)" % tss) for tss in (262144, 0x100000): @@ -117,7 +117,7 @@ thread.start_new_thread(task, ()) while not started: time.sleep(0.01) - self.assertEquals(thread._count(), orig + 1) + self.assertEqual(thread._count(), orig + 1) # Allow the task to finish. mut.release() # The only reliable way to be sure that the thread ended from the @@ -128,7 +128,7 @@ del task while not done: time.sleep(0.01) - self.assertEquals(thread._count(), orig) + self.assertEqual(thread._count(), orig) class Barrier: @@ -202,7 +202,8 @@ self.read_fd, self.write_fd = os.pipe() @unittest.skipIf(sys.platform.startswith('win'), - "This test is only appropriate for POSIX-like systems.") + "This test is only appropriate for POSIX-like systems.") + @test_support.reap_threads def test_forkinthread(self): def thread1(): try: From python-checkins at python.org Sat Mar 20 01:21:04 2010 From: python-checkins at python.org (florent.xicluna) Date: Sat, 20 Mar 2010 01:21:04 +0100 (CET) Subject: [Python-checkins] r79128 - in python/branches/py3k: Lib/test/test_thread.py Message-ID: <20100320002104.9D382FA7C@mail.python.org> Author: florent.xicluna Date: Sat Mar 20 01:21:04 2010 New Revision: 79128 Log: Merged revisions 79127 via svnmerge from svn+ssh://pythondev at svn.python.org/python/trunk ........ r79127 | florent.xicluna | 2010-03-20 01:17:46 +0100 (sam, 20 mar 2010) | 2 lines #8178 Cleanup the threads after test_thread.TestForkInThread. ........ Modified: python/branches/py3k/ (props changed) python/branches/py3k/Lib/test/test_thread.py Modified: python/branches/py3k/Lib/test/test_thread.py ============================================================================== --- python/branches/py3k/Lib/test/test_thread.py (original) +++ python/branches/py3k/Lib/test/test_thread.py Sat Mar 20 01:21:04 2010 @@ -63,10 +63,10 @@ def test_stack_size(self): # Various stack size tests. - self.assertEquals(thread.stack_size(), 0, "intial stack size is not 0") + self.assertEqual(thread.stack_size(), 0, "initial stack size is not 0") thread.stack_size(0) - self.assertEquals(thread.stack_size(), 0, "stack_size not reset to default") + self.assertEqual(thread.stack_size(), 0, "stack_size not reset to default") if os.name not in ("nt", "os2", "posix"): return @@ -86,7 +86,7 @@ fail_msg = "stack_size(%d) failed - should succeed" for tss in (262144, 0x100000, 0): thread.stack_size(tss) - self.assertEquals(thread.stack_size(), tss, fail_msg % tss) + self.assertEqual(thread.stack_size(), tss, fail_msg % tss) verbose_print("successfully set stack_size(%d)" % tss) for tss in (262144, 0x100000): @@ -115,7 +115,7 @@ thread.start_new_thread(task, ()) while not started: time.sleep(0.01) - self.assertEquals(thread._count(), orig + 1) + self.assertEqual(thread._count(), orig + 1) # Allow the task to finish. mut.release() # The only reliable way to be sure that the thread ended from the @@ -126,7 +126,7 @@ del task while not done: time.sleep(0.01) - self.assertEquals(thread._count(), orig) + self.assertEqual(thread._count(), orig) class Barrier: @@ -199,7 +199,8 @@ self.read_fd, self.write_fd = os.pipe() @unittest.skipIf(sys.platform.startswith('win'), - "This test is only appropriate for POSIX-like systems.") + "This test is only appropriate for POSIX-like systems.") + @support.reap_threads def test_forkinthread(self): def thread1(): try: From python-checkins at python.org Sat Mar 20 03:11:16 2010 From: python-checkins at python.org (matthias.klose) Date: Sat, 20 Mar 2010 03:11:16 +0100 (CET) Subject: [Python-checkins] r79129 - in python/branches/release26-maint: Lib/ctypes/util.py Misc/NEWS Message-ID: <20100320021116.BA205E676@mail.python.org> Author: matthias.klose Date: Sat Mar 20 03:11:16 2010 New Revision: 79129 Log: Merged revisions 78979 via svnmerge from svn+ssh://pythondev at svn.python.org/python/trunk ........ r78979 | matthias.klose | 2010-03-15 14:42:23 +0100 (Mo, 15 M?r 2010) | 3 lines - Issue #7356: ctypes.util: Make parsing of ldconfig output independent of the locale. ........ Modified: python/branches/release26-maint/ (props changed) python/branches/release26-maint/Lib/ctypes/util.py python/branches/release26-maint/Misc/NEWS Modified: python/branches/release26-maint/Lib/ctypes/util.py ============================================================================== --- python/branches/release26-maint/Lib/ctypes/util.py (original) +++ python/branches/release26-maint/Lib/ctypes/util.py Sat Mar 20 03:11:16 2010 @@ -198,7 +198,7 @@ expr = r'(\S+)\s+\((%s(?:, OS ABI:[^\)]*)?)\)[^/]*(/[^\(\)\s]*lib%s\.[^\(\)\s]*)' \ % (abi_type, re.escape(name)) res = re.search(expr, - os.popen('/sbin/ldconfig -p 2>/dev/null').read()) + os.popen('LANG=C /sbin/ldconfig -p 2>/dev/null').read()) if not res: return None return res.group(1) Modified: python/branches/release26-maint/Misc/NEWS ============================================================================== --- python/branches/release26-maint/Misc/NEWS (original) +++ python/branches/release26-maint/Misc/NEWS Sat Mar 20 03:11:16 2010 @@ -15,6 +15,9 @@ Library ------- +- Issue #7356: ctypes.util: Make parsing of ldconfig output independent of + the locale. + What's New in Python 2.6.5? =========================== From python-checkins at python.org Sat Mar 20 03:12:36 2010 From: python-checkins at python.org (matthias.klose) Date: Sat, 20 Mar 2010 03:12:36 +0100 (CET) Subject: [Python-checkins] r79130 - in python/branches/release26-maint: Lib/lib-tk/tkMessageBox.py Misc/NEWS Message-ID: <20100320021236.1A491E676@mail.python.org> Author: matthias.klose Date: Sat Mar 20 03:12:35 2010 New Revision: 79130 Log: Merged revisions 78988 via svnmerge from svn+ssh://pythondev at svn.python.org/python/trunk ........ r78988 | matthias.klose | 2010-03-16 11:48:52 +0100 (Di, 16 M?r 2010) | 3 lines - Issue #4961: Inconsistent/wrong result of askyesno function in tkMessageBox with Tcl/Tk-8.5. ........ Modified: python/branches/release26-maint/ (props changed) python/branches/release26-maint/Lib/lib-tk/tkMessageBox.py python/branches/release26-maint/Misc/NEWS Modified: python/branches/release26-maint/Lib/lib-tk/tkMessageBox.py ============================================================================== --- python/branches/release26-maint/Lib/lib-tk/tkMessageBox.py (original) +++ python/branches/release26-maint/Lib/lib-tk/tkMessageBox.py Sat Mar 20 03:12:35 2010 @@ -70,11 +70,13 @@ if title: options["title"] = title if message: options["message"] = message res = Message(**options).show() - # In some Tcl installations, Tcl converts yes/no into a boolean + # In some Tcl installations, yes/no is converted into a boolean. if isinstance(res, bool): - if res: return YES + if res: + return YES return NO - return res + # In others we get a Tcl_Obj. + return str(res) def showinfo(title=None, message=None, **options): "Show an info message" Modified: python/branches/release26-maint/Misc/NEWS ============================================================================== --- python/branches/release26-maint/Misc/NEWS (original) +++ python/branches/release26-maint/Misc/NEWS Sat Mar 20 03:12:35 2010 @@ -15,6 +15,9 @@ Library ------- +- Issue #4961: Inconsistent/wrong result of askyesno function in tkMessageBox + with Tcl/Tk-8.5. + - Issue #7356: ctypes.util: Make parsing of ldconfig output independent of the locale. From python-checkins at python.org Sat Mar 20 03:13:49 2010 From: python-checkins at python.org (matthias.klose) Date: Sat, 20 Mar 2010 03:13:49 +0100 (CET) Subject: [Python-checkins] r79131 - in python/branches/release26-maint: Lib/test/test_os.py Misc/NEWS Modules/posixmodule.c Message-ID: <20100320021349.9C26AE708@mail.python.org> Author: matthias.klose Date: Sat Mar 20 03:13:49 2010 New Revision: 79131 Log: Merged revisions 79096 via svnmerge from svn+ssh://pythondev at svn.python.org/python/trunk ........ r79096 | matthias.klose | 2010-03-19 15:45:06 +0100 (Fr, 19 M?r 2010) | 2 lines - Issue #1039, #8154: Fix os.execlp() crash with missing 2nd argument. ........ Modified: python/branches/release26-maint/ (props changed) python/branches/release26-maint/Lib/test/test_os.py python/branches/release26-maint/Misc/NEWS python/branches/release26-maint/Modules/posixmodule.c Modified: python/branches/release26-maint/Lib/test/test_os.py ============================================================================== --- python/branches/release26-maint/Lib/test/test_os.py (original) +++ python/branches/release26-maint/Lib/test/test_os.py Sat Mar 20 03:13:49 2010 @@ -511,6 +511,9 @@ except NotImplementedError: pass + def test_execvpe_with_bad_arglist(self): + self.assertRaises(ValueError, os.execvpe, 'notepad', [], None) + class Win32ErrorTests(unittest.TestCase): def test_rename(self): self.assertRaises(WindowsError, os.rename, test_support.TESTFN, test_support.TESTFN+".bak") Modified: python/branches/release26-maint/Misc/NEWS ============================================================================== --- python/branches/release26-maint/Misc/NEWS (original) +++ python/branches/release26-maint/Misc/NEWS Sat Mar 20 03:13:49 2010 @@ -15,6 +15,8 @@ Library ------- +- Issue #1039, #8154: Fix os.execlp() crash with missing 2nd argument. + - Issue #4961: Inconsistent/wrong result of askyesno function in tkMessageBox with Tcl/Tk-8.5. Modified: python/branches/release26-maint/Modules/posixmodule.c ============================================================================== --- python/branches/release26-maint/Modules/posixmodule.c (original) +++ python/branches/release26-maint/Modules/posixmodule.c Sat Mar 20 03:13:49 2010 @@ -2979,6 +2979,11 @@ PyMem_Free(path); return NULL; } + if (argc < 1) { + PyErr_SetString(PyExc_ValueError, "execv() arg 2 must not be empty"); + PyMem_Free(path); + return NULL; + } argvlist = PyMem_NEW(char *, argc+1); if (argvlist == NULL) { From python-checkins at python.org Sat Mar 20 04:00:34 2010 From: python-checkins at python.org (michael.foord) Date: Sat, 20 Mar 2010 04:00:34 +0100 (CET) Subject: [Python-checkins] r79132 - in python/trunk: Doc/library/unittest.rst Doc/whatsnew/2.7.rst Lib/test/test_cgi.py Lib/test/test_unittest.py Lib/unittest/case.py Lib/unittest/util.py Message-ID: <20100320030034.B9491EA46@mail.python.org> Author: michael.foord Date: Sat Mar 20 04:00:34 2010 New Revision: 79132 Log: Issue 7832: renaming unittest.TestCase.assertSameElements to assertItemsEqual and changing behaviour Modified: python/trunk/Doc/library/unittest.rst python/trunk/Doc/whatsnew/2.7.rst python/trunk/Lib/test/test_cgi.py python/trunk/Lib/test/test_unittest.py python/trunk/Lib/unittest/case.py python/trunk/Lib/unittest/util.py Modified: python/trunk/Doc/library/unittest.rst ============================================================================== --- python/trunk/Doc/library/unittest.rst (original) +++ python/trunk/Doc/library/unittest.rst Sat Mar 20 04:00:34 2010 @@ -786,7 +786,7 @@ will be included in the error message. This method is used by default when comparing Unicode strings with :meth:`assertEqual`. - If specified *msg* will be used as the error message on failure. + If specified, *msg* will be used as the error message on failure. .. versionadded:: 2.7 @@ -807,22 +807,24 @@ Tests that *first* is or is not in *second* with an explanatory error message as appropriate. - If specified *msg* will be used as the error message on failure. + If specified, *msg* will be used as the error message on failure. .. versionadded:: 2.7 - .. method:: assertSameElements(actual, expected, msg=None) + .. method:: assertItemsEqual(actual, expected, msg=None) Test that sequence *expected* contains the same elements as *actual*, - regardless of their order. When they don't, an error message listing - the differences between the sequences will be generated. + regardless of their order. When they don't, an error message listing the + differences between the sequences will be generated. - Duplicate elements are ignored when comparing *actual* and *expected*. - It is the equivalent of ``assertEqual(set(expected), set(actual))`` - but it works with sequences of unhashable objects as well. + Duplicate elements are *not* ignored when comparing *actual* and + *expected*. It verifies if each element has the same count in both + sequences. It is the equivalent of ``assertEqual(sorted(expected), + sorted(actual))`` but it works with sequences of unhashable objects as + well. - If specified *msg* will be used as the error message on failure. + If specified, *msg* will be used as the error message on failure. .. versionadded:: 2.7 @@ -836,7 +838,7 @@ Fails if either of *set1* or *set2* does not have a :meth:`set.difference` method. - If specified *msg* will be used as the error message on failure. + If specified, *msg* will be used as the error message on failure. .. versionadded:: 2.7 @@ -848,7 +850,7 @@ method will be used by default to compare dictionaries in calls to :meth:`assertEqual`. - If specified *msg* will be used as the error message on failure. + If specified, *msg* will be used as the error message on failure. .. versionadded:: 2.7 @@ -859,7 +861,7 @@ superset of those in *expected*. If not, an error message listing the missing keys and mismatched values is generated. - If specified *msg* will be used as the error message on failure. + If specified, *msg* will be used as the error message on failure. .. versionadded:: 2.7 @@ -873,7 +875,7 @@ These methods are used by default when comparing lists or tuples with :meth:`assertEqual`. - If specified *msg* will be used as the error message on failure. + If specified, *msg* will be used as the error message on failure. .. versionadded:: 2.7 @@ -885,7 +887,7 @@ be raised. If the sequences are different an error message is constructed that shows the difference between the two. - If specified *msg* will be used as the error message on failure. + If specified, *msg* will be used as the error message on failure. This method is used to implement :meth:`assertListEqual` and :meth:`assertTupleEqual`. Modified: python/trunk/Doc/whatsnew/2.7.rst ============================================================================== --- python/trunk/Doc/whatsnew/2.7.rst (original) +++ python/trunk/Doc/whatsnew/2.7.rst Sat Mar 20 04:00:34 2010 @@ -1086,7 +1086,7 @@ * :meth:`assertIn` and :meth:`assertNotIn` tests whether *first* is or is not in *second*. -* :meth:`assertSameElements` tests whether two provided sequences +* :meth:`assertItemsEqual` tests whether two provided sequences contain the same elements. * :meth:`assertSetEqual` compares whether two sets are equal, and Modified: python/trunk/Lib/test/test_cgi.py ============================================================================== --- python/trunk/Lib/test/test_cgi.py (original) +++ python/trunk/Lib/test/test_cgi.py Sat Mar 20 04:00:34 2010 @@ -135,18 +135,18 @@ if isinstance(expect, dict): # test dict interface self.assertEqual(len(expect), len(fcd)) - self.assertSameElements(expect.keys(), fcd.keys()) - self.assertSameElements(expect.values(), fcd.values()) - self.assertSameElements(expect.items(), fcd.items()) + self.assertItemsEqual(expect.keys(), fcd.keys()) + self.assertItemsEqual(expect.values(), fcd.values()) + self.assertItemsEqual(expect.items(), fcd.items()) self.assertEqual(fcd.get("nonexistent field", "default"), "default") self.assertEqual(len(sd), len(fs)) - self.assertSameElements(sd.keys(), fs.keys()) + self.assertItemsEqual(sd.keys(), fs.keys()) self.assertEqual(fs.getvalue("nonexistent field", "default"), "default") # test individual fields for key in expect.keys(): expect_val = expect[key] self.assertTrue(fcd.has_key(key)) - self.assertSameElements(fcd[key], expect[key]) + self.assertItemsEqual(fcd[key], expect[key]) self.assertEqual(fcd.get(key, "default"), fcd[key]) self.assertTrue(fs.has_key(key)) if len(expect_val) > 1: @@ -162,11 +162,11 @@ self.assertTrue(single_value) self.assertEqual(val, expect_val[0]) self.assertEqual(fs.getvalue(key), expect_val[0]) - self.assertSameElements(sd.getlist(key), expect_val) + self.assertItemsEqual(sd.getlist(key), expect_val) if single_value: - self.assertSameElements(sd.values(), + self.assertItemsEqual(sd.values(), first_elts(expect.values())) - self.assertSameElements(sd.items(), + self.assertItemsEqual(sd.items(), first_second_elts(expect.items())) def test_weird_formcontentdict(self): @@ -178,7 +178,7 @@ self.assertEqual(d[k], v) for k, v in d.items(): self.assertEqual(expect[k], v) - self.assertSameElements(expect.values(), d.values()) + self.assertItemsEqual(expect.values(), d.values()) def test_log(self): cgi.log("Testing") Modified: python/trunk/Lib/test/test_unittest.py ============================================================================== --- python/trunk/Lib/test/test_unittest.py (original) +++ python/trunk/Lib/test/test_unittest.py Sat Mar 20 04:00:34 2010 @@ -2575,9 +2575,9 @@ class SadSnake(object): """Dummy class for test_addTypeEqualityFunc.""" s1, s2 = SadSnake(), SadSnake() - self.assertFalse(s1 == s2) + self.assertNotEqual(s1, s2) def AllSnakesCreatedEqual(a, b, msg=None): - return type(a) == type(b) == SadSnake + return type(a) is type(b) is SadSnake self.addTypeEqualityFunc(SadSnake, AllSnakesCreatedEqual) self.assertEqual(s1, s2) # No this doesn't clean up and remove the SadSnake equality func @@ -2745,21 +2745,51 @@ self.assertRaises(self.failureException, self.assertDictEqual, [], d) self.assertRaises(self.failureException, self.assertDictEqual, 1, 1) - self.assertSameElements([1, 2, 3], [3, 2, 1]) - self.assertSameElements([1, 2] + [3] * 100, [1] * 100 + [2, 3]) - self.assertSameElements(['foo', 'bar', 'baz'], ['bar', 'baz', 'foo']) - self.assertRaises(self.failureException, self.assertSameElements, + def testAssertItemsEqual(self): + a = object() + self.assertItemsEqual([1, 2, 3], [3, 2, 1]) + self.assertItemsEqual(['foo', 'bar', 'baz'], ['bar', 'baz', 'foo']) + self.assertItemsEqual([a, a, 2, 2, 3], (a, 2, 3, a, 2)) + self.assertItemsEqual([1, "2", "a", "a"], ["a", "2", True, "a"]) + self.assertRaises(self.failureException, self.assertItemsEqual, + [1, 2] + [3] * 100, [1] * 100 + [2, 3]) + self.assertRaises(self.failureException, self.assertItemsEqual, + [1, "2", "a", "a"], ["a", "2", True, 1]) + self.assertRaises(self.failureException, self.assertItemsEqual, [10], [10, 11]) - self.assertRaises(self.failureException, self.assertSameElements, + self.assertRaises(self.failureException, self.assertItemsEqual, [10, 11], [10]) + self.assertRaises(self.failureException, self.assertItemsEqual, + [10, 11, 10], [10, 11]) # Test that sequences of unhashable objects can be tested for sameness: - self.assertSameElements([[1, 2], [3, 4]], [[3, 4], [1, 2]]) - - self.assertSameElements([{'a': 1}, {'b': 2}], [{'b': 2}, {'a': 1}]) - self.assertRaises(self.failureException, self.assertSameElements, + self.assertItemsEqual([[1, 2], [3, 4], 0], [False, [3, 4], [1, 2]]) + with test_support.check_warnings(quiet=True) as w: + # hashable types, but not orderable + self.assertRaises(self.failureException, self.assertItemsEqual, + [], [divmod, 'x', 1, 5j, 2j, frozenset()]) + # comparing dicts raises a py3k warning + self.assertItemsEqual([{'a': 1}, {'b': 2}], [{'b': 2}, {'a': 1}]) + # comparing heterogenous non-hashable sequences raises a py3k warning + self.assertItemsEqual([1, 'x', divmod, []], [divmod, [], 'x', 1]) + self.assertRaises(self.failureException, self.assertItemsEqual, + [], [divmod, [], 'x', 1, 5j, 2j, set()]) + # fail the test if warnings are not silenced + if w.warnings: + self.fail('assertItemsEqual raised a warning: ' + + str(w.warnings[0])) + self.assertRaises(self.failureException, self.assertItemsEqual, [[1]], [[2]]) + # Same elements, but not same sequence length + self.assertRaises(self.failureException, self.assertItemsEqual, + [1, 1, 2], [2, 1]) + self.assertRaises(self.failureException, self.assertItemsEqual, + [1, 1, "2", "a", "a"], ["2", "2", True, "a"]) + self.assertRaises(self.failureException, self.assertItemsEqual, + [1, {'b': 2}, None, True], [{'b': 2}, True, None]) + + def testAssertSetEqual(self): set1 = set() set2 = set() @@ -3009,13 +3039,14 @@ Do not use these methods. They will go away in 3.3. """ - self.failIfEqual(3, 5) - self.failUnlessEqual(3, 3) - self.failUnlessAlmostEqual(2.0, 2.0) - self.failIfAlmostEqual(3.0, 5.0) - self.failUnless(True) - self.failUnlessRaises(TypeError, lambda _: 3.14 + u'spam') - self.failIf(False) + with test_support.check_warnings(): + self.failIfEqual(3, 5) + self.failUnlessEqual(3, 3) + self.failUnlessAlmostEqual(2.0, 2.0) + self.failIfAlmostEqual(3.0, 5.0) + self.failUnless(True) + self.failUnlessRaises(TypeError, lambda _: 3.14 + u'spam') + self.failIf(False) def testDeepcopy(self): # Issue: 5660 @@ -3355,8 +3386,8 @@ "^Missing: 'key'$", "^Missing: 'key' : oops$"]) - def testAssertSameElements(self): - self.assertMessages('assertSameElements', ([], [None]), + def testAssertItemsEqual(self): + self.assertMessages('assertItemsEqual', ([], [None]), [r"\[None\]$", "^oops$", r"\[None\]$", r"\[None\] : oops$"]) Modified: python/trunk/Lib/unittest/case.py ============================================================================== --- python/trunk/Lib/unittest/case.py (original) +++ python/trunk/Lib/unittest/case.py Sat Mar 20 04:00:34 2010 @@ -8,8 +8,9 @@ import warnings from . import result -from .util import strclass, safe_repr, sorted_list_difference - +from .util import ( + strclass, safe_repr, sorted_list_difference, unorderable_list_difference +) class SkipTest(Exception): """ @@ -686,10 +687,9 @@ msg: Optional message to use on failure instead of a list of differences. - For more general containership equality, assertSameElements will work - with things other than sets. This uses ducktyping to support - different types of sets, and is optimized for sets specifically - (parameters must support a difference method). + assertSetEqual uses ducktyping to support different types of sets, and + is optimized for sets specifically (parameters must support a + difference method). """ try: difference1 = set1.difference(set2) @@ -784,42 +784,48 @@ self.fail(self._formatMessage(msg, standardMsg)) - def assertSameElements(self, expected_seq, actual_seq, msg=None): - """An unordered sequence specific comparison. + def assertItemsEqual(self, expected_seq, actual_seq, msg=None): + """An unordered sequence / set specific comparison. It asserts that + expected_seq and actual_seq contain the same elements. It is + the equivalent of:: + + self.assertEqual(sorted(expected_seq), sorted(actual_seq)) Raises with an error message listing which elements of expected_seq are missing from actual_seq and vice versa if any. - Duplicate elements are ignored when comparing *expected_seq* and - *actual_seq*. It is the equivalent of ``assertEqual(set(expected), - set(actual))`` but it works with sequences of unhashable objects as - well. + Asserts that each element has the same count in both sequences. + Example: + - [0, 1, 1] and [1, 0, 1] compare equal. + - [0, 0, 1] and [0, 1] compare unequal. """ with warnings.catch_warnings(): if sys.py3kwarning: # Silence Py3k warning raised during the sorting for _msg in ["dict inequality comparisons", - "builtin_function_or_method order comparisons", - "comparing unequal types"]: + "builtin_function_or_method order comparisons", + "comparing unequal types"]: warnings.filterwarnings("ignore", _msg, DeprecationWarning) try: - expected = set(expected_seq) - actual = set(actual_seq) - missing = sorted(expected.difference(actual)) - unexpected = sorted(actual.difference(expected)) - except TypeError: - # Fall back to slower list-compare if any of the objects are - # not hashable. expected = sorted(expected_seq) actual = sorted(actual_seq) - missing, unexpected = sorted_list_difference(expected, actual) + except TypeError: + # Unsortable items (example: set(), complex(), ...) + expected = list(expected_seq) + actual = list(actual_seq) + missing, unexpected = unorderable_list_difference( + expected, actual, ignore_duplicate=False + ) + else: + return self.assertSequenceEqual(expected, actual, msg=msg) + errors = [] if missing: errors.append('Expected, but missing:\n %s' % - safe_repr(missing)) + safe_repr(missing)) if unexpected: errors.append('Unexpected, but present:\n %s' % - safe_repr(unexpected)) + safe_repr(unexpected)) if errors: standardMsg = '\n'.join(errors) self.fail(self._formatMessage(msg, standardMsg)) Modified: python/trunk/Lib/unittest/util.py ============================================================================== --- python/trunk/Lib/unittest/util.py (original) +++ python/trunk/Lib/unittest/util.py Sat Mar 20 04:00:34 2010 @@ -48,3 +48,40 @@ unexpected.extend(actual[j:]) break return missing, unexpected + + +def unorderable_list_difference(expected, actual, ignore_duplicate=False): + """Same behavior as sorted_list_difference but + for lists of unorderable items (like dicts). + + As it does a linear search per item (remove) it + has O(n*n) performance. + """ + missing = [] + unexpected = [] + while expected: + item = expected.pop() + try: + actual.remove(item) + except ValueError: + missing.append(item) + if ignore_duplicate: + for lst in expected, actual: + try: + while True: + lst.remove(item) + except ValueError: + pass + if ignore_duplicate: + while actual: + item = actual.pop() + unexpected.append(item) + try: + while True: + actual.remove(item) + except ValueError: + pass + return missing, unexpected + + # anything left in actual is unexpected + return missing, actual From python-checkins at python.org Sat Mar 20 16:42:52 2010 From: python-checkins at python.org (michael.foord) Date: Sat, 20 Mar 2010 16:42:52 +0100 (CET) Subject: [Python-checkins] r79136 - python/branches/py3k Message-ID: <20100320154252.9BAF2F825@mail.python.org> Author: michael.foord Date: Sat Mar 20 16:42:52 2010 New Revision: 79136 Log: Block revision 79132 in preparation for a manual merge. Modified: python/branches/py3k/ (props changed) From python-checkins at python.org Sat Mar 20 17:12:54 2010 From: python-checkins at python.org (benjamin.peterson) Date: Sat, 20 Mar 2010 17:12:54 +0100 (CET) Subject: [Python-checkins] r79137 - in sandbox/trunk/2to3/lib2to3: fixes/fix_exitfunc.py tests/test_fixers.py Message-ID: <20100320161254.21844F94A@mail.python.org> Author: benjamin.peterson Date: Sat Mar 20 17:12:53 2010 New Revision: 79137 Log: add a fixer for setting sys.exitfunc #2356 Added: sandbox/trunk/2to3/lib2to3/fixes/fix_exitfunc.py (contents, props changed) Modified: sandbox/trunk/2to3/lib2to3/tests/test_fixers.py Added: sandbox/trunk/2to3/lib2to3/fixes/fix_exitfunc.py ============================================================================== --- (empty file) +++ sandbox/trunk/2to3/lib2to3/fixes/fix_exitfunc.py Sat Mar 20 17:12:53 2010 @@ -0,0 +1,70 @@ +""" +Convert use of sys.exitfunc to use the atexit module. +""" + +# Author: Benjamin Peterson + +from lib2to3 import pytree, fixer_base +from lib2to3.fixer_util import Name, Attr, Call, Comma, Newline, syms + + +class FixExitfunc(fixer_base.BaseFix): + + PATTERN = """ + ( + sys_import=import_name<'import' + ('sys' + | + dotted_as_names< (any ',')* 'sys' (',' any)* > + ) + > + | + expr_stmt< + power< 'sys' trailer< '.' 'exitfunc' > > + '=' func=any > + ) + """ + + def __init__(self, *args): + super(FixExitfunc, self).__init__(*args) + + def start_tree(self, tree, filename): + super(FixExitfunc, self).start_tree(tree, filename) + self.sys_import = None + + def transform(self, node, results): + # First, find a the sys import. We'll just hope it's global scope. + if "sys_import" in results: + if self.sys_import is None: + self.sys_import = results["sys_import"] + return + + func = results["func"].clone() + func.prefix = "" + register = pytree.Node(syms.power, + Attr(Name("atexit"), Name("register")) + ) + call = Call(register, [func], node.prefix) + node.replace(call) + + if self.sys_import is None: + # That's interesting. + self.warning(node, "Can't find sys import; Please add an atexit " + "import at the top of your file.") + return + + # Now add an atexit import after the sys import. + names = self.sys_import.children[1] + if names.type == syms.dotted_as_names: + names.append_child(Comma()) + names.append_child(Name("atexit", " ")) + else: + containing_stmt = self.sys_import.parent + position = containing_stmt.children.index(self.sys_import) + stmt_container = containing_stmt.parent + new_import = pytree.Node("import_name", + [Name("import"), Name("atexit", " ")] + ) + new = pytree.Node("simple_stmt", [new_import]) + containing_stmt.insert_child(position + 1, Newline()) + containing_stmt.insert_child(position + 2, new) Modified: sandbox/trunk/2to3/lib2to3/tests/test_fixers.py ============================================================================== --- sandbox/trunk/2to3/lib2to3/tests/test_fixers.py (original) +++ sandbox/trunk/2to3/lib2to3/tests/test_fixers.py Sat Mar 20 17:12:53 2010 @@ -4285,3 +4285,91 @@ def test_bare_sequenceIncludes(self): s = "sequenceIncludes(x, y)" self.warns_unchanged(s, "You should use operator.contains here.") + + +class Test_exitfunc(FixerTestCase): + + fixer = "exitfunc" + + def test_simple(self): + b = """ + import sys + sys.exitfunc = my_atexit + """ + a = """ + import sys + import atexit + atexit.register(my_atexit) + """ + self.check(b, a) + + def test_names_import(self): + b = """ + import sys, crumbs + sys.exitfunc = my_func + """ + a = """ + import sys, crumbs, atexit + atexit.register(my_func) + """ + self.check(b, a) + + def test_complex_expression(self): + b = """ + import sys + sys.exitfunc = do(d)/a()+complex(f=23, g=23)*expression + """ + a = """ + import sys + import atexit + atexit.register(do(d)/a()+complex(f=23, g=23)*expression) + """ + self.check(b, a) + + def test_comments(self): + b = """ + import sys # Foo + sys.exitfunc = f # Blah + """ + a = """ + import sys + import atexit # Foo + atexit.register(f) # Blah + """ + self.check(b, a) + + b = """ + import apples, sys, crumbs, larry # Pleasant comments + sys.exitfunc = func + """ + a = """ + import apples, sys, crumbs, larry, atexit # Pleasant comments + atexit.register(func) + """ + self.check(b, a) + + def test_in_a_function(self): + b = """ + import sys + def f(): + sys.exitfunc = func + """ + a = """ + import sys + import atexit + def f(): + atexit.register(func) + """ + self.check(b, a) + + def test_no_sys_import(self): + b = """sys.exitfunc = f""" + a = """atexit.register(f)""" + msg = ("Can't find sys import; Please add an atexit import at the " + "top of your file.") + self.warns(b, a, msg) + + + def test_unchanged(self): + s = """f(sys.exitfunc)""" + self.unchanged(s) From python-checkins at python.org Sat Mar 20 17:16:45 2010 From: python-checkins at python.org (benjamin.peterson) Date: Sat, 20 Mar 2010 17:16:45 +0100 (CET) Subject: [Python-checkins] r79138 - python/trunk/Doc/library/2to3.rst Message-ID: <20100320161645.20A36E9D2@mail.python.org> Author: benjamin.peterson Date: Sat Mar 20 17:16:44 2010 New Revision: 79138 Log: document exitfunc fixer Modified: python/trunk/Doc/library/2to3.rst Modified: python/trunk/Doc/library/2to3.rst ============================================================================== --- python/trunk/Doc/library/2to3.rst (original) +++ python/trunk/Doc/library/2to3.rst Sat Mar 20 17:16:44 2010 @@ -148,6 +148,11 @@ Removes usage of :func:`execfile`. The argument to :func:`execfile` is wrapped in calls to :func:`open`, :func:`compile`, and :func:`exec`. +.. 2to3fixer:: exitfunc + + Changes assignment of :attr:`sys.exitfunc` to use of the :mod:`atexit` + module. + .. 2to3fixer:: filter Wraps :func:`filter` usage in a :class:`list` call. From python-checkins at python.org Sat Mar 20 17:17:37 2010 From: python-checkins at python.org (benjamin.peterson) Date: Sat, 20 Mar 2010 17:17:37 +0100 (CET) Subject: [Python-checkins] r79139 - python/trunk/Doc/library/2to3.rst Message-ID: <20100320161737.D47D4E9D2@mail.python.org> Author: benjamin.peterson Date: Sat Mar 20 17:17:37 2010 New Revision: 79139 Log: wrap Modified: python/trunk/Doc/library/2to3.rst Modified: python/trunk/Doc/library/2to3.rst ============================================================================== --- python/trunk/Doc/library/2to3.rst (original) +++ python/trunk/Doc/library/2to3.rst Sat Mar 20 17:17:37 2010 @@ -130,8 +130,8 @@ Fixes dictionary iteration methods. :meth:`dict.iteritems` is converted to :meth:`dict.items`, :meth:`dict.iterkeys` to :meth:`dict.keys`, and :meth:`dict.itervalues` to :meth:`dict.values`. Similarly, - :meth:`dict.viewitems`, :meth:`dict.viewkeys` and :meth:`dict.viewvalues` - are converted respectively to :meth:`dict.items`, :meth:`dict.keys` and + :meth:`dict.viewitems`, :meth:`dict.viewkeys` and :meth:`dict.viewvalues` are + converted respectively to :meth:`dict.items`, :meth:`dict.keys` and :meth:`dict.values`. It also wraps existing usages of :meth:`dict.items`, :meth:`dict.keys`, and :meth:`dict.values` in a call to :class:`list`. From python-checkins at python.org Sat Mar 20 17:58:04 2010 From: python-checkins at python.org (michael.foord) Date: Sat, 20 Mar 2010 17:58:04 +0100 (CET) Subject: [Python-checkins] r79140 - in python/branches/py3k/Lib: test/test_unittest.py unittest/case.py Message-ID: <20100320165804.88141C74D@mail.python.org> Author: michael.foord Date: Sat Mar 20 17:58:04 2010 New Revision: 79140 Log: Adding assertItemsEqual with tests. Issue 7832. assertSameElements still needs to be deprecated plus documentation needs to be updated. Modified: python/branches/py3k/Lib/test/test_unittest.py python/branches/py3k/Lib/unittest/case.py Modified: python/branches/py3k/Lib/test/test_unittest.py ============================================================================== --- python/branches/py3k/Lib/test/test_unittest.py (original) +++ python/branches/py3k/Lib/test/test_unittest.py Sat Mar 20 17:58:04 2010 @@ -2775,6 +2775,47 @@ self.assertRaises(self.failureException, self.assertSameElements, [{'a': 1}, {'b': 2}], [{'b': 2}, {'a': 2}]) + + def testAssertItemsEqual(self): + a = object() + self.assertItemsEqual([1, 2, 3], [3, 2, 1]) + self.assertItemsEqual(['foo', 'bar', 'baz'], ['bar', 'baz', 'foo']) + self.assertItemsEqual([a, a, 2, 2, 3], (a, 2, 3, a, 2)) + self.assertItemsEqual([1, "2", "a", "a"], ["a", "2", True, "a"]) + self.assertRaises(self.failureException, self.assertItemsEqual, + [1, 2] + [3] * 100, [1] * 100 + [2, 3]) + self.assertRaises(self.failureException, self.assertItemsEqual, + [1, "2", "a", "a"], ["a", "2", True, 1]) + self.assertRaises(self.failureException, self.assertItemsEqual, + [10], [10, 11]) + self.assertRaises(self.failureException, self.assertItemsEqual, + [10, 11], [10]) + self.assertRaises(self.failureException, self.assertItemsEqual, + [10, 11, 10], [10, 11]) + + # Test that sequences of unhashable objects can be tested for sameness: + self.assertItemsEqual([[1, 2], [3, 4], 0], [False, [3, 4], [1, 2]]) + + # hashable types, but not orderable + self.assertRaises(self.failureException, self.assertItemsEqual, + [], [divmod, 'x', 1, 5j, 2j, frozenset()]) + # comparing dicts raises a py3k warning + self.assertItemsEqual([{'a': 1}, {'b': 2}], [{'b': 2}, {'a': 1}]) + # comparing heterogenous non-hashable sequences raises a py3k warning + self.assertItemsEqual([1, 'x', divmod, []], [divmod, [], 'x', 1]) + self.assertRaises(self.failureException, self.assertItemsEqual, + [], [divmod, [], 'x', 1, 5j, 2j, set()]) + self.assertRaises(self.failureException, self.assertItemsEqual, + [[1]], [[2]]) + + # Same elements, but not same sequence length + self.assertRaises(self.failureException, self.assertItemsEqual, + [1, 1, 2], [2, 1]) + self.assertRaises(self.failureException, self.assertItemsEqual, + [1, 1, "2", "a", "a"], ["2", "2", True, "a"]) + self.assertRaises(self.failureException, self.assertItemsEqual, + [1, {'b': 2}, None, True], [{'b': 2}, True, None]) + def testAssertSetEqual(self): set1 = set() set2 = set() @@ -3338,8 +3379,8 @@ "^Missing: 'key'$", "^Missing: 'key' : oops$"]) - def testAssertSameElements(self): - self.assertMessages('assertSameElements', ([], [None]), + def testAssertItemsEqual(self): + self.assertMessages('assertItemsEqual', ([], [None]), [r"\[None\]$", "^oops$", r"\[None\]$", r"\[None\] : oops$"]) Modified: python/branches/py3k/Lib/unittest/case.py ============================================================================== --- python/branches/py3k/Lib/unittest/case.py (original) +++ python/branches/py3k/Lib/unittest/case.py Sat Mar 20 17:58:04 2010 @@ -838,6 +838,44 @@ standardMsg = '\n'.join(errors) self.fail(self._formatMessage(msg, standardMsg)) + + def assertItemsEqual(self, expected_seq, actual_seq, msg=None): + """An unordered sequence / set specific comparison. It asserts that + expected_seq and actual_seq contain the same elements. It is + the equivalent of:: + + self.assertEqual(sorted(expected_seq), sorted(actual_seq)) + + Raises with an error message listing which elements of expected_seq + are missing from actual_seq and vice versa if any. + + Asserts that each element has the same count in both sequences. + Example: + - [0, 1, 1] and [1, 0, 1] compare equal. + - [0, 0, 1] and [0, 1] compare unequal. + """ + try: + expected = sorted(expected_seq) + actual = sorted(actual_seq) + except TypeError: + # Unsortable items (example: set(), complex(), ...) + expected = list(expected_seq) + actual = list(actual_seq) + missing, unexpected = unorderable_list_difference(expected, actual) + else: + return self.assertSequenceEqual(expected, actual, msg=msg) + + errors = [] + if missing: + errors.append('Expected, but missing:\n %s' % + safe_repr(missing)) + if unexpected: + errors.append('Unexpected, but present:\n %s' % + safe_repr(unexpected)) + if errors: + standardMsg = '\n'.join(errors) + self.fail(self._formatMessage(msg, standardMsg)) + def assertMultiLineEqual(self, first, second, msg=None): """Assert that two multi-line strings are equal.""" self.assert_(isinstance(first, str), ( From python-checkins at python.org Sat Mar 20 18:21:27 2010 From: python-checkins at python.org (michael.foord) Date: Sat, 20 Mar 2010 18:21:27 +0100 (CET) Subject: [Python-checkins] r79141 - in python/branches/py3k/Lib: test/test_unittest.py unittest/case.py Message-ID: <20100320172127.52621FBCE@mail.python.org> Author: michael.foord Date: Sat Mar 20 18:21:27 2010 New Revision: 79141 Log: Issue 7832. Deprecating assertSameElements in Py3k. Modified: python/branches/py3k/Lib/test/test_unittest.py python/branches/py3k/Lib/unittest/case.py Modified: python/branches/py3k/Lib/test/test_unittest.py ============================================================================== --- python/branches/py3k/Lib/test/test_unittest.py (original) +++ python/branches/py3k/Lib/test/test_unittest.py Sat Mar 20 18:21:27 2010 @@ -2758,24 +2758,6 @@ self.assertRaises(self.failureException, self.assertDictEqual, [], d) self.assertRaises(self.failureException, self.assertDictEqual, 1, 1) - self.assertSameElements([1, 2, 3], [3, 2, 1]) - self.assertSameElements([1, 2] + [3] * 100, [1] * 100 + [2, 3]) - self.assertSameElements(['foo', 'bar', 'baz'], ['bar', 'baz', 'foo']) - self.assertRaises(self.failureException, self.assertSameElements, - [10], [10, 11]) - self.assertRaises(self.failureException, self.assertSameElements, - [10, 11], [10]) - - # Test that sequences of unhashable objects can be tested for sameness: - self.assertSameElements([[1, 2], [3, 4]], [[3, 4], [1, 2]]) - - self.assertSameElements([{'a': 1}, {'b': 2}], [{'b': 2}, {'a': 1}]) - self.assertRaises(self.failureException, self.assertSameElements, - [[1]], [[2]]) - self.assertRaises(self.failureException, self.assertSameElements, - [{'a': 1}, {'b': 2}], [{'b': 2}, {'a': 2}]) - - def testAssertItemsEqual(self): a = object() self.assertItemsEqual([1, 2, 3], [3, 2, 1]) @@ -3032,7 +3014,8 @@ (self.failIfAlmostEqual, (3.0, 5.0)), (self.failUnless, (True,)), (self.failUnlessRaises, (TypeError, lambda _: 3.14 + 'spam')), - (self.failIf, (False,)) + (self.failIf, (False,)), + (self.assertSameElements, ([1, 1, 2, 3], [1, 2, 3])) ) for meth, args in old: with warnings.catch_warnings(record=True) as w: Modified: python/branches/py3k/Lib/unittest/case.py ============================================================================== --- python/branches/py3k/Lib/unittest/case.py (original) +++ python/branches/py3k/Lib/unittest/case.py Sat Mar 20 18:21:27 2010 @@ -700,10 +700,9 @@ msg: Optional message to use on failure instead of a list of differences. - For more general containership equality, assertSameElements will work - with things other than sets. This uses ducktyping to support - different types of sets, and is optimized for sets specifically - (parameters must support a difference method). + assertSetEqual uses ducktyping to support different types of sets, and + is optimized for sets specifically (parameters must support a + difference method). """ try: difference1 = set1.difference(set2) @@ -809,6 +808,8 @@ set(actual))`` but it works with sequences of unhashable objects as well. """ + warnings.warn('assertSameElements is deprecated', + DeprecationWarning) try: expected = set(expected_seq) actual = set(actual_seq) From python-checkins at python.org Sat Mar 20 18:24:13 2010 From: python-checkins at python.org (r.david.murray) Date: Sat, 20 Mar 2010 18:24:13 +0100 (CET) Subject: [Python-checkins] r79142 - python/branches/release26-maint Message-ID: <20100320172413.CDD89FBA0@mail.python.org> Author: r.david.murray Date: Sat Mar 20 18:24:13 2010 New Revision: 79142 Log: Blocked revisions 78778 via svnmerge ........ r78778 | r.david.murray | 2010-03-07 21:04:06 -0500 (Sun, 07 Mar 2010) | 9 lines Issue #7143: get_payload used to strip any trailing newline from a base64 transfer-encoded payload *after* decoding it; it no longer does. email had a special method in utils, _bdecode, specifically to do this, so it must have served a purpose at some point, yet it is clearly wrong per RFC. Fixed with Barry's approval, but no backport. Email package minor version number is bumped, now version 4.0.1. Patch by Joaquin Cuenca Abela. ........ Modified: python/branches/release26-maint/ (props changed) From python-checkins at python.org Sat Mar 20 19:09:14 2010 From: python-checkins at python.org (michael.foord) Date: Sat, 20 Mar 2010 19:09:14 +0100 (CET) Subject: [Python-checkins] r79143 - in python/branches/py3k: Doc/library/unittest.rst Doc/whatsnew/2.7.rst Lib/test/test_cgi.py Tools/scripts/reindent-rst.py Message-ID: <20100320180914.DCD94C607@mail.python.org> Author: michael.foord Date: Sat Mar 20 19:09:14 2010 New Revision: 79143 Log: Issue 7832. Document changes to unittest.TestCase.assertSameElements and assertItemsEqual Modified: python/branches/py3k/Doc/library/unittest.rst python/branches/py3k/Doc/whatsnew/2.7.rst python/branches/py3k/Lib/test/test_cgi.py python/branches/py3k/Tools/scripts/reindent-rst.py Modified: python/branches/py3k/Doc/library/unittest.rst ============================================================================== --- python/branches/py3k/Doc/library/unittest.rst (original) +++ python/branches/py3k/Doc/library/unittest.rst Sat Mar 20 19:09:14 2010 @@ -785,7 +785,7 @@ will be included in the error message. This method is used by default when comparing strings with :meth:`assertEqual`. - If specified *msg* will be used as the error message on failure. + If specified, *msg* will be used as the error message on failure. .. versionadded:: 3.1 @@ -806,7 +806,7 @@ Tests that *first* is or is not in *second* with an explanatory error message as appropriate. - If specified *msg* will be used as the error message on failure. + If specified, *msg* will be used as the error message on failure. .. versionadded:: 3.1 @@ -819,12 +819,31 @@ Duplicate elements are ignored when comparing *actual* and *expected*. It is the equivalent of ``assertEqual(set(expected), set(actual))`` - but it works with sequences of unhashable objects as well. + but it works with sequences of unhashable objects as well. Because + duplicates are ignored, this method has been deprecated in favour of + :meth:`assertItemsEqual`. - If specified *msg* will be used as the error message on failure. + If specified, *msg* will be used as the error message on failure. .. versionadded:: 3.1 + .. deprecated:: 3.2 + + .. method:: assertItemsEqual(actual, expected, msg=None) + + Test that sequence *expected* contains the same elements as *actual*, + regardless of their order. When they don't, an error message listing the + differences between the sequences will be generated. + + Duplicate elements are *not* ignored when comparing *actual* and + *expected*. It verifies if each element has the same count in both + sequences. It is the equivalent of ``assertEqual(sorted(expected), + sorted(actual))`` but it works with sequences of unhashable objects as + well. + + If specified, *msg* will be used as the error message on failure. + + .. versionadded:: 3.2 .. method:: assertSetEqual(set1, set2, msg=None) @@ -835,7 +854,7 @@ Fails if either of *set1* or *set2* does not have a :meth:`set.difference` method. - If specified *msg* will be used as the error message on failure. + If specified, *msg* will be used as the error message on failure. .. versionadded:: 3.1 @@ -847,7 +866,7 @@ method will be used by default to compare dictionaries in calls to :meth:`assertEqual`. - If specified *msg* will be used as the error message on failure. + If specified, *msg* will be used as the error message on failure. .. versionadded:: 3.1 @@ -858,7 +877,7 @@ superset of those in *expected*. If not, an error message listing the missing keys and mismatched values is generated. - If specified *msg* will be used as the error message on failure. + If specified, *msg* will be used as the error message on failure. .. versionadded:: 3.1 @@ -872,7 +891,7 @@ These methods are used by default when comparing lists or tuples with :meth:`assertEqual`. - If specified *msg* will be used as the error message on failure. + If specified, *msg* will be used as the error message on failure. .. versionadded:: 3.1 @@ -884,7 +903,7 @@ be raised. If the sequences are different an error message is constructed that shows the difference between the two. - If specified *msg* will be used as the error message on failure. + If specified, *msg* will be used as the error message on failure. This method is used to implement :meth:`assertListEqual` and :meth:`assertTupleEqual`. @@ -1225,7 +1244,7 @@ :class:`TestLoader` objects have the following methods: - +a .. method:: loadTestsFromTestCase(testCaseClass) Return a suite of all tests cases contained in the :class:`TestCase`\ -derived Modified: python/branches/py3k/Doc/whatsnew/2.7.rst ============================================================================== --- python/branches/py3k/Doc/whatsnew/2.7.rst (original) +++ python/branches/py3k/Doc/whatsnew/2.7.rst Sat Mar 20 19:09:14 2010 @@ -960,7 +960,7 @@ * :meth:`assertIn` and :meth:`assertNotIn` tests whether *first* is or is not in *second*. -* :meth:`assertSameElements` tests whether two provided sequences +* :meth:`assertItemsEqual` tests whether two provided sequences contain the same elements. * :meth:`assertSetEqual` compares whether two sets are equal, and Modified: python/branches/py3k/Lib/test/test_cgi.py ============================================================================== --- python/branches/py3k/Lib/test/test_cgi.py (original) +++ python/branches/py3k/Lib/test/test_cgi.py Sat Mar 20 19:09:14 2010 @@ -131,7 +131,7 @@ if isinstance(expect, dict): # test dict interface self.assertEqual(len(expect), len(fs)) - self.assertEqual(norm(expect.keys()), norm(fs.keys())) + self.assertItemsEqual(expect.keys(), fs.keys()) ##self.assertEqual(norm(expect.values()), norm(fs.values())) ##self.assertEqual(norm(expect.items()), norm(fs.items())) self.assertEqual(fs.getvalue("nonexistent field", "default"), "default") Modified: python/branches/py3k/Tools/scripts/reindent-rst.py ============================================================================== --- python/branches/py3k/Tools/scripts/reindent-rst.py (original) +++ python/branches/py3k/Tools/scripts/reindent-rst.py Sat Mar 20 19:09:14 2010 @@ -1,4 +1,4 @@ -#!/usr/bin/env python3 +#!/usr/bin/env python # Make a reST file compliant to our pre-commit hook. # Currently just remove trailing whitespace. From python-checkins at python.org Sat Mar 20 21:30:53 2010 From: python-checkins at python.org (florent.xicluna) Date: Sat, 20 Mar 2010 21:30:53 +0100 (CET) Subject: [Python-checkins] r79144 - python/branches/py3k/Lib/test/test_imp.py Message-ID: <20100320203053.90AF7F10A@mail.python.org> Author: florent.xicluna Date: Sat Mar 20 21:30:53 2010 New Revision: 79144 Log: #8133: Use appropriate Unicode decomposition on MacOS X platform. Modified: python/branches/py3k/Lib/test/test_imp.py Modified: python/branches/py3k/Lib/test/test_imp.py ============================================================================== --- python/branches/py3k/Lib/test/test_imp.py (original) +++ python/branches/py3k/Lib/test/test_imp.py Sat Mar 20 21:30:53 2010 @@ -104,7 +104,14 @@ 'cp1258' : b'\xc0', } - special_char = known_locales.get(fs_encoding) + if sys.platform == 'darwin': + self.assertEqual(fs_encoding, 'utf-8') + # Mac OS X uses the Normal Form D decomposition + # http://developer.apple.com/mac/library/qa/qa2001/qa1173.html + special_char = b'a\xcc\x88' + else: + special_char = known_locales.get(fs_encoding) + if not special_char: self.skipTest("can't run this test with %s as filesystem encoding" % fs_encoding) From python-checkins at python.org Sat Mar 20 21:31:34 2010 From: python-checkins at python.org (florent.xicluna) Date: Sat, 20 Mar 2010 21:31:34 +0100 (CET) Subject: [Python-checkins] r79145 - python/branches/py3k/Lib/test/test_imp.py Message-ID: <20100320203134.5BAC2F81E@mail.python.org> Author: florent.xicluna Date: Sat Mar 20 21:31:34 2010 New Revision: 79145 Log: Typo Modified: python/branches/py3k/Lib/test/test_imp.py Modified: python/branches/py3k/Lib/test/test_imp.py ============================================================================== --- python/branches/py3k/Lib/test/test_imp.py (original) +++ python/branches/py3k/Lib/test/test_imp.py Sat Mar 20 21:31:34 2010 @@ -162,7 +162,7 @@ reload().""" def test_source(self): - # XXX (ncoghlan): It would be nice to use test_support.CleanImport + # XXX (ncoghlan): It would be nice to use test.support.CleanImport # here, but that breaks because the os module registers some # handlers in copy_reg on import. Since CleanImport doesn't # revert that registration, the module is left in a broken From python-checkins at python.org Sat Mar 20 21:36:20 2010 From: python-checkins at python.org (tarek.ziade) Date: Sat, 20 Mar 2010 21:36:20 +0100 Subject: [Python-checkins] distutils2: make sure the Project-URL field is not transformed into a string Message-ID: tarek.ziade pushed 98ce712a53d2 to distutils2: http://hg.python.org/distutils2/rev/98ce712a53d2 changeset: 83:98ce712a53d2 tag: tip user: Tarek Ziade date: Sat Mar 20 16:36:00 2010 -0400 summary: make sure the Project-URL field is not transformed into a string files: src/distutils2/metadata.py, src/distutils2/tests/test_metadata.py diff --git a/src/distutils2/metadata.py b/src/distutils2/metadata.py --- a/src/distutils2/metadata.py +++ b/src/distutils2/metadata.py @@ -153,6 +153,7 @@ 'Requires', 'Provides', 'Obsoletes-Dist', 'Provides-Dist', 'Requires-Dist', 'Requires-External', 'Project-URL') +_LISTTUPLEFIELDS = ('Project-URL',) _ELEMENTSFIELD = ('Keywords',) @@ -355,7 +356,11 @@ valid, val = self._platform(val) if not valid: continue - res.append(self._encode_field(val)) + if name not in _LISTTUPLEFIELDS: + res.append(self._encode_field(val)) + else: + # That's for Project-URL + res.append((self._encode_field(val[0]), val[1])) return res elif name in _ELEMENTSFIELD: diff --git a/src/distutils2/tests/test_metadata.py b/src/distutils2/tests/test_metadata.py --- a/src/distutils2/tests/test_metadata.py +++ b/src/distutils2/tests/test_metadata.py @@ -185,6 +185,12 @@ self.assertEquals(res, 0) + def test_project_url(self): + metadata = DistributionMetadata() + metadata['Project-URL'] = [('one', 'http://ok')] + self.assertEquals(metadata['Project-URL'], + [('one', 'http://ok')]) + def test_suite(): return unittest2.makeSuite(DistributionMetadataTestCase) -- Repository URL: http://hg.python.org/distutils2 From python-checkins at python.org Sat Mar 20 21:38:20 2010 From: python-checkins at python.org (florent.xicluna) Date: Sat, 20 Mar 2010 21:38:20 +0100 (CET) Subject: [Python-checkins] r79146 - in python/branches/release31-maint: Lib/test/test_imp.py Message-ID: <20100320203820.78F9CF472@mail.python.org> Author: florent.xicluna Date: Sat Mar 20 21:38:20 2010 New Revision: 79146 Log: Merged revisions 79144 via svnmerge from svn+ssh://pythondev at svn.python.org/python/branches/py3k ........ r79144 | florent.xicluna | 2010-03-20 21:30:53 +0100 (sam, 20 mar 2010) | 2 lines #8133: Use appropriate Unicode decomposition on MacOS X platform. ........ Modified: python/branches/release31-maint/ (props changed) python/branches/release31-maint/Lib/test/test_imp.py Modified: python/branches/release31-maint/Lib/test/test_imp.py ============================================================================== --- python/branches/release31-maint/Lib/test/test_imp.py (original) +++ python/branches/release31-maint/Lib/test/test_imp.py Sat Mar 20 21:38:20 2010 @@ -104,7 +104,14 @@ 'cp1258' : b'\xc0', } - special_char = known_locales.get(fs_encoding) + if sys.platform == 'darwin': + self.assertEqual(fs_encoding, 'utf-8') + # Mac OS X uses the Normal Form D decomposition + # http://developer.apple.com/mac/library/qa/qa2001/qa1173.html + special_char = b'a\xcc\x88' + else: + special_char = known_locales.get(fs_encoding) + if not special_char: self.skipTest("can't run this test with %s as filesystem encoding" % fs_encoding) From python-checkins at python.org Sat Mar 20 21:47:28 2010 From: python-checkins at python.org (benjamin.peterson) Date: Sat, 20 Mar 2010 21:47:28 +0100 (CET) Subject: [Python-checkins] r79147 - in python/branches/release31-maint: Include/patchlevel.h Lib/distutils/__init__.py Lib/idlelib/idlever.py Misc/NEWS Misc/RPM/python-3.1.spec README Message-ID: <20100320204728.272EBF472@mail.python.org> Author: benjamin.peterson Date: Sat Mar 20 21:47:27 2010 New Revision: 79147 Log: version becomes 3.1.2 Modified: python/branches/release31-maint/Include/patchlevel.h python/branches/release31-maint/Lib/distutils/__init__.py python/branches/release31-maint/Lib/idlelib/idlever.py python/branches/release31-maint/Misc/NEWS python/branches/release31-maint/Misc/RPM/python-3.1.spec python/branches/release31-maint/README Modified: python/branches/release31-maint/Include/patchlevel.h ============================================================================== --- python/branches/release31-maint/Include/patchlevel.h (original) +++ python/branches/release31-maint/Include/patchlevel.h Sat Mar 20 21:47:27 2010 @@ -19,11 +19,11 @@ #define PY_MAJOR_VERSION 3 #define PY_MINOR_VERSION 1 #define PY_MICRO_VERSION 2 -#define PY_RELEASE_LEVEL PY_RELEASE_LEVEL_GAMMA -#define PY_RELEASE_SERIAL 1 +#define PY_RELEASE_LEVEL PY_RELEASE_LEVEL_FINAL +#define PY_RELEASE_SERIAL 0 /* Version as a string */ -#define PY_VERSION "3.1.2rc1+" +#define PY_VERSION "3.1.2" /*--end constants--*/ /* Subversion Revision number of this file (not of the repository) */ Modified: python/branches/release31-maint/Lib/distutils/__init__.py ============================================================================== --- python/branches/release31-maint/Lib/distutils/__init__.py (original) +++ python/branches/release31-maint/Lib/distutils/__init__.py Sat Mar 20 21:47:27 2010 @@ -15,5 +15,5 @@ # Updated automatically by the Python release process. # #--start constants-- -__version__ = "3.1.2rc1" +__version__ = "3.1.2" #--end constants-- Modified: python/branches/release31-maint/Lib/idlelib/idlever.py ============================================================================== --- python/branches/release31-maint/Lib/idlelib/idlever.py (original) +++ python/branches/release31-maint/Lib/idlelib/idlever.py Sat Mar 20 21:47:27 2010 @@ -1 +1 @@ -IDLE_VERSION = "3.1.2rc1" +IDLE_VERSION = "3.1.2" Modified: python/branches/release31-maint/Misc/NEWS ============================================================================== --- python/branches/release31-maint/Misc/NEWS (original) +++ python/branches/release31-maint/Misc/NEWS Sat Mar 20 21:47:27 2010 @@ -7,7 +7,7 @@ What's New in Python 3.1.2? =========================== -*Release date: XXXX-XX-XX* +*Release date: 2010-03-20* Core and Builtins ----------------- Modified: python/branches/release31-maint/Misc/RPM/python-3.1.spec ============================================================================== --- python/branches/release31-maint/Misc/RPM/python-3.1.spec (original) +++ python/branches/release31-maint/Misc/RPM/python-3.1.spec Sat Mar 20 21:47:27 2010 @@ -34,7 +34,7 @@ %define name python #--start constants-- -%define version 3.1.2rc1 +%define version 3.1.2 %define libver 3.1 #--end constants-- %define release 1pydotorg Modified: python/branches/release31-maint/README ============================================================================== --- python/branches/release31-maint/README (original) +++ python/branches/release31-maint/README Sat Mar 20 21:47:27 2010 @@ -1,5 +1,5 @@ -This is Python version 3.1.2 Release Candidate 1 -================================================ +This is Python version 3.1.2 +============================ Copyright (c) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010 Python Software Foundation. From python-checkins at python.org Sat Mar 20 21:49:46 2010 From: python-checkins at python.org (benjamin.peterson) Date: Sat, 20 Mar 2010 21:49:46 +0100 (CET) Subject: [Python-checkins] r79148 - python/tags/r312 Message-ID: <20100320204946.0C628F78F@mail.python.org> Author: benjamin.peterson Date: Sat Mar 20 21:49:45 2010 New Revision: 79148 Log: tag Python 3.1.2 Added: python/tags/r312/ - copied from r79147, /python/branches/release31-maint/ From python-checkins at python.org Sat Mar 20 21:51:59 2010 From: python-checkins at python.org (tarek.ziade) Date: Sat, 20 Mar 2010 21:51:59 +0100 Subject: [Python-checkins] distutils2: Project-URL is also a 1.2 field Message-ID: tarek.ziade pushed 51b9f966241b to distutils2: http://hg.python.org/distutils2/rev/51b9f966241b changeset: 84:51b9f966241b tag: tip user: Tarek Ziade date: Sat Mar 20 16:51:46 2010 -0400 summary: Project-URL is also a 1.2 field files: src/distutils2/metadata.py, src/distutils2/tests/test_metadata.py diff --git a/src/distutils2/metadata.py b/src/distutils2/metadata.py --- a/src/distutils2/metadata.py +++ b/src/distutils2/metadata.py @@ -77,8 +77,8 @@ 'Requires-Python', 'Requires-External') _345_MARKERS = ('Provides-Dist', 'Requires-Dist', 'Requires-Python', - 'Obsoletes-Dist', 'Requires-External', 'Maintainer', - 'Maintainer-email') + 'Obsoletes-Dist', 'Requires-External', 'Maintainer', + 'Maintainer-email', 'Project-URL') _ALL_FIELDS = [] diff --git a/src/distutils2/tests/test_metadata.py b/src/distutils2/tests/test_metadata.py --- a/src/distutils2/tests/test_metadata.py +++ b/src/distutils2/tests/test_metadata.py @@ -190,6 +190,7 @@ metadata['Project-URL'] = [('one', 'http://ok')] self.assertEquals(metadata['Project-URL'], [('one', 'http://ok')]) + self.assertEquals(metadata.version, '1.2') def test_suite(): return unittest2.makeSuite(DistributionMetadataTestCase) -- Repository URL: http://hg.python.org/distutils2 From python-checkins at python.org Sat Mar 20 21:59:33 2010 From: python-checkins at python.org (brett.cannon) Date: Sat, 20 Mar 2010 21:59:33 +0100 (CET) Subject: [Python-checkins] r79149 - python/branches/py3k/Lib/test/test_builtin.py Message-ID: <20100320205933.72D61F472@mail.python.org> Author: brett.cannon Date: Sat Mar 20 21:59:33 2010 New Revision: 79149 Log: Clean up the manipulation of the warnings filter in test_builtin. Modified: python/branches/py3k/Lib/test/test_builtin.py Modified: python/branches/py3k/Lib/test/test_builtin.py ============================================================================== --- python/branches/py3k/Lib/test/test_builtin.py (original) +++ python/branches/py3k/Lib/test/test_builtin.py Sat Mar 20 21:59:33 2010 @@ -2,15 +2,11 @@ import platform import unittest -from test.support import fcmp, TESTFN, unlink, run_unittest +from test.support import fcmp, TESTFN, unlink, run_unittest, check_warnings from operator import neg import sys, warnings, random, collections, io -warnings.filterwarnings("ignore", "hex../oct.. of negative int", - FutureWarning, __name__) -warnings.filterwarnings("ignore", "integer argument expected", - DeprecationWarning, "unittest") import builtins class Squares: @@ -427,9 +423,10 @@ g = {} l = {} - import warnings - warnings.filterwarnings("ignore", "global statement", module="") - exec('global a; a = 1; b = 2', g, l) + with check_warnings(): + warnings.filterwarnings("ignore", "global statement", + module="") + exec('global a; a = 1; b = 2', g, l) if '__builtins__' in g: del g['__builtins__'] if '__builtins__' in l: From python-checkins at python.org Sat Mar 20 22:45:02 2010 From: python-checkins at python.org (brett.cannon) Date: Sat, 20 Mar 2010 22:45:02 +0100 (CET) Subject: [Python-checkins] r79150 - python/branches/py3k/Lib/test/test_bytes.py Message-ID: <20100320214502.07E4BE15B@mail.python.org> Author: brett.cannon Date: Sat Mar 20 22:45:01 2010 New Revision: 79150 Log: Clean up warnings filter use in test_bytes. Modified: python/branches/py3k/Lib/test/test_bytes.py Modified: python/branches/py3k/Lib/test/test_bytes.py ============================================================================== --- python/branches/py3k/Lib/test/test_bytes.py (original) +++ python/branches/py3k/Lib/test/test_bytes.py Sat Mar 20 22:45:01 2010 @@ -27,12 +27,6 @@ class BaseBytesTest(unittest.TestCase): - def setUp(self): - self.warning_filters = warnings.filters[:] - - def tearDown(self): - warnings.filters = self.warning_filters - def test_basics(self): b = self.type2test() self.assertEqual(type(b), self.type2test) @@ -127,15 +121,19 @@ self.assertFalse(b3 <= b2) def test_compare_to_str(self): - warnings.simplefilter('ignore', BytesWarning) - # Byte comparisons with unicode should always fail! - # Test this for all expected byte orders and Unicode character sizes - self.assertEqual(self.type2test(b"\0a\0b\0c") == "abc", False) - self.assertEqual(self.type2test(b"\0\0\0a\0\0\0b\0\0\0c") == "abc", False) - self.assertEqual(self.type2test(b"a\0b\0c\0") == "abc", False) - self.assertEqual(self.type2test(b"a\0\0\0b\0\0\0c\0\0\0") == "abc", False) - self.assertEqual(self.type2test() == str(), False) - self.assertEqual(self.type2test() != str(), True) + with test.support.check_warnings(): + warnings.simplefilter('ignore', BytesWarning) + # Byte comparisons with unicode should always fail! + # Test this for all expected byte orders and Unicode character + # sizes. + self.assertEqual(self.type2test(b"\0a\0b\0c") == "abc", False) + self.assertEqual(self.type2test(b"\0\0\0a\0\0\0b\0\0\0c") == "abc", + False) + self.assertEqual(self.type2test(b"a\0b\0c\0") == "abc", False) + self.assertEqual(self.type2test(b"a\0\0\0b\0\0\0c\0\0\0") == "abc", + False) + self.assertEqual(self.type2test() == str(), False) + self.assertEqual(self.type2test() != str(), True) def test_reversed(self): input = list(map(ord, "Hello")) @@ -829,22 +827,17 @@ # Test various combinations of bytes and bytearray # - def setUp(self): - self.warning_filters = warnings.filters[:] - - def tearDown(self): - warnings.filters = self.warning_filters - def test_repr_str(self): - warnings.simplefilter('ignore', BytesWarning) - for f in str, repr: - self.assertEqual(f(bytearray()), "bytearray(b'')") - self.assertEqual(f(bytearray([0])), "bytearray(b'\\x00')") - self.assertEqual(f(bytearray([0, 1, 254, 255])), - "bytearray(b'\\x00\\x01\\xfe\\xff')") - self.assertEqual(f(b"abc"), "b'abc'") - self.assertEqual(f(b"'"), '''b"'"''') # ''' - self.assertEqual(f(b"'\""), r"""b'\'"'""") # ' + with test.support.check_warnings(): + warnings.simplefilter('ignore', BytesWarning) + for f in str, repr: + self.assertEqual(f(bytearray()), "bytearray(b'')") + self.assertEqual(f(bytearray([0])), "bytearray(b'\\x00')") + self.assertEqual(f(bytearray([0, 1, 254, 255])), + "bytearray(b'\\x00\\x01\\xfe\\xff')") + self.assertEqual(f(b"abc"), "b'abc'") + self.assertEqual(f(b"'"), '''b"'"''') # ''' + self.assertEqual(f(b"'\""), r"""b'\'"'""") # ' def test_compare_bytes_to_bytearray(self): self.assertEqual(b"abc" == bytes(b"abc"), True) @@ -888,13 +881,14 @@ self.assertEqual(b, bytearray(sample)) def test_to_str(self): - warnings.simplefilter('ignore', BytesWarning) - self.assertEqual(str(b''), "b''") - self.assertEqual(str(b'x'), "b'x'") - self.assertEqual(str(b'\x80'), "b'\\x80'") - self.assertEqual(str(bytearray(b'')), "bytearray(b'')") - self.assertEqual(str(bytearray(b'x')), "bytearray(b'x')") - self.assertEqual(str(bytearray(b'\x80')), "bytearray(b'\\x80')") + with test.support.check_warnings(): + warnings.simplefilter('ignore', BytesWarning) + self.assertEqual(str(b''), "b''") + self.assertEqual(str(b'x'), "b'x'") + self.assertEqual(str(b'\x80'), "b'\\x80'") + self.assertEqual(str(bytearray(b'')), "bytearray(b'')") + self.assertEqual(str(bytearray(b'x')), "bytearray(b'x')") + self.assertEqual(str(bytearray(b'\x80')), "bytearray(b'\\x80')") def test_literal(self): tests = [ @@ -940,11 +934,16 @@ def test_compare(self): if sys.flags.bytes_warning: - warnings.simplefilter('error', BytesWarning) - self.assertRaises(BytesWarning, operator.eq, b'', '') - self.assertRaises(BytesWarning, operator.ne, b'', '') - self.assertRaises(BytesWarning, operator.eq, bytearray(b''), '') - self.assertRaises(BytesWarning, operator.ne, bytearray(b''), '') + with test.support.check_warnings(): + warnings.simplefilter('error', BytesWarning) + with self.assertRaises(BytesWarning): + b'' == '' + with self.assertRaises(BytesWarning): + b'' != '' + with self.assertRaises(BytesWarning): + bytearray(b'') == '' + with self.assertRaises(BytesWarning): + bytearray(b'') != '' else: # self.skipTest("BytesWarning is needed for this test: use -bb option") pass From python-checkins at python.org Sat Mar 20 22:48:19 2010 From: python-checkins at python.org (brett.cannon) Date: Sat, 20 Mar 2010 22:48:19 +0100 (CET) Subject: [Python-checkins] r79151 - python/branches/py3k/Lib/test/test_global.py Message-ID: <20100320214819.CD8D3F10A@mail.python.org> Author: brett.cannon Date: Sat Mar 20 22:48:19 2010 New Revision: 79151 Log: Clean up warnings filter use in test_global by no longer having it be a module-level manipulation of the filter. Modified: python/branches/py3k/Lib/test/test_global.py Modified: python/branches/py3k/Lib/test/test_global.py ============================================================================== --- python/branches/py3k/Lib/test/test_global.py (original) +++ python/branches/py3k/Lib/test/test_global.py Sat Mar 20 22:48:19 2010 @@ -1,13 +1,22 @@ """Verify that warnings are issued for global statements following use.""" -from test.support import run_unittest, check_syntax_error +from test.support import run_unittest, check_syntax_error, check_warnings import unittest import warnings -warnings.filterwarnings("error", module="") + class GlobalTests(unittest.TestCase): + def setUp(self): + self._warnings_manager = check_warnings() + self._warnings_manager.__enter__() + warnings.filterwarnings("error", module="") + + def tearDown(self): + self._warnings_manager.__exit__(None, None, None) + + def test1(self): prog_text_1 = """\ def wrong1(): From python-checkins at python.org Sat Mar 20 22:51:10 2010 From: python-checkins at python.org (brett.cannon) Date: Sat, 20 Mar 2010 22:51:10 +0100 (CET) Subject: [Python-checkins] r79152 - python/branches/py3k/Lib/test/test_http_cookies.py Message-ID: <20100320215110.5794BFB5F@mail.python.org> Author: brett.cannon Date: Sat Mar 20 22:51:10 2010 New Revision: 79152 Log: Fix the warnings filter usage in test_http_cookies. Modified: python/branches/py3k/Lib/test/test_http_cookies.py Modified: python/branches/py3k/Lib/test/test_http_cookies.py ============================================================================== --- python/branches/py3k/Lib/test/test_http_cookies.py (original) +++ python/branches/py3k/Lib/test/test_http_cookies.py Sat Mar 20 22:51:10 2010 @@ -1,15 +1,22 @@ # Simple test suite for http/cookies.py -from test.support import run_unittest, run_doctest +from test.support import run_unittest, run_doctest, check_warnings import unittest from http import cookies import warnings -warnings.filterwarnings("ignore", - ".* class is insecure.*", - DeprecationWarning) class CookieTests(unittest.TestCase): + + def setUp(self): + self._warnings_manager = check_warnings() + self._warnings_manager.__enter__() + warnings.filterwarnings("ignore", ".* class is insecure.*", + DeprecationWarning) + + def tearDown(self): + self._warnings_manager.__exit__(None, None, None) + def test_basic(self): cases = [ { 'data': 'chips=ahoy; vienna=finger', From python-checkins at python.org Sat Mar 20 22:53:28 2010 From: python-checkins at python.org (brett.cannon) Date: Sat, 20 Mar 2010 22:53:28 +0100 (CET) Subject: [Python-checkins] r79153 - python/branches/py3k/Lib/test/test_posix.py Message-ID: <20100320215328.4701AE15B@mail.python.org> Author: brett.cannon Date: Sat Mar 20 22:53:28 2010 New Revision: 79153 Log: Fix the warnings usage in test_posix. Modified: python/branches/py3k/Lib/test/test_posix.py Modified: python/branches/py3k/Lib/test/test_posix.py ============================================================================== --- python/branches/py3k/Lib/test/test_posix.py (original) +++ python/branches/py3k/Lib/test/test_posix.py Sat Mar 20 22:53:28 2010 @@ -13,8 +13,6 @@ import unittest import warnings -warnings.filterwarnings('ignore', '.* potential security risk .*', - RuntimeWarning) class PosixTester(unittest.TestCase): @@ -22,9 +20,14 @@ # create empty file fp = open(support.TESTFN, 'w+') fp.close() + self._warnings_manager = support.check_warnings() + self._warnings_manager.__enter__() + warnings.filterwarnings('ignore', '.* potential security risk .*', + RuntimeWarning) def tearDown(self): support.unlink(support.TESTFN) + self._warnings_manager.__exit__(None, None, None) def testNoArgFunctions(self): # test posix functions which take no arguments and have From python-checkins at python.org Sat Mar 20 22:55:48 2010 From: python-checkins at python.org (brett.cannon) Date: Sat, 20 Mar 2010 22:55:48 +0100 (CET) Subject: [Python-checkins] r79154 - python/branches/py3k/Lib/test/test_set.py Message-ID: <20100320215548.7147CE15B@mail.python.org> Author: brett.cannon Date: Sat Mar 20 22:55:48 2010 New Revision: 79154 Log: Clean up the warnings filter use in test_set. Modified: python/branches/py3k/Lib/test/test_set.py Modified: python/branches/py3k/Lib/test/test_set.py ============================================================================== --- python/branches/py3k/Lib/test/test_set.py (original) +++ python/branches/py3k/Lib/test/test_set.py Sat Mar 20 22:55:48 2010 @@ -907,7 +907,8 @@ class TestBasicOpsMixedStringBytes(TestBasicOps): def setUp(self): - self.warning_filters = warnings.filters[:] + self._warning_filters = support.check_warnings() + self._warning_filters.__enter__() warnings.simplefilter('ignore', BytesWarning) self.case = "string and bytes set" self.values = ["a", "b", b"a", b"b"] @@ -917,7 +918,7 @@ self.repr = "{'a', b'a', 'b', b'b'}" def tearDown(self): - warnings.filters = self.warning_filters + self._warning_filters.__exit__(None, None, None) #============================================================================== From python-checkins at python.org Sat Mar 20 23:19:55 2010 From: python-checkins at python.org (brett.cannon) Date: Sat, 20 Mar 2010 23:19:55 +0100 (CET) Subject: [Python-checkins] r79155 - python/branches/py3k/Lib/test/test_tempfile.py Message-ID: <20100320221955.4F4DBF81E@mail.python.org> Author: brett.cannon Date: Sat Mar 20 23:19:55 2010 New Revision: 79155 Log: Clean up warnings filter use in test_tempfile. Modified: python/branches/py3k/Lib/test/test_tempfile.py Modified: python/branches/py3k/Lib/test/test_tempfile.py ============================================================================== --- python/branches/py3k/Lib/test/test_tempfile.py (original) +++ python/branches/py3k/Lib/test/test_tempfile.py Sat Mar 20 23:19:55 2010 @@ -8,9 +8,6 @@ import unittest from test import support -warnings.filterwarnings("ignore", - category=RuntimeWarning, - message="mktemp", module=__name__) if hasattr(os, 'stat'): import stat @@ -39,6 +36,16 @@ str_check = re.compile(r"[a-zA-Z0-9_-]{6}$") + def setUp(self): + self._warnings_manager = support.check_warnings() + self._warnings_manager.__enter__() + warnings.filterwarnings("ignore", category=RuntimeWarning, + message="mktemp", module=__name__) + + def tearDown(self): + self._warnings_manager.__exit__(None, None, None) + + def failOnException(self, what, ei=None): if ei is None: ei = sys.exc_info() @@ -98,6 +105,7 @@ def setUp(self): self.r = tempfile._RandomNameSequence() + super().setUp() def test_get_six_char_str(self): # _RandomNameSequence returns a six-character string @@ -499,11 +507,13 @@ # We must also suppress the RuntimeWarning it generates. def setUp(self): self.dir = tempfile.mkdtemp() + super().setUp() def tearDown(self): if self.dir: os.rmdir(self.dir) self.dir = None + super().tearDown() class mktemped: _unlink = os.unlink From python-checkins at python.org Sat Mar 20 23:21:02 2010 From: python-checkins at python.org (florent.xicluna) Date: Sat, 20 Mar 2010 23:21:02 +0100 (CET) Subject: [Python-checkins] r79156 - python/trunk/Lib/test/test_struct.py Message-ID: <20100320222102.C36CFF9F7@mail.python.org> Author: florent.xicluna Date: Sat Mar 20 23:21:02 2010 New Revision: 79156 Log: Cleanup test_struct using check_warnings. Modified: python/trunk/Lib/test/test_struct.py Modified: python/trunk/Lib/test/test_struct.py ============================================================================== --- python/trunk/Lib/test/test_struct.py (original) +++ python/trunk/Lib/test/test_struct.py Sat Mar 20 23:21:02 2010 @@ -1,8 +1,9 @@ +import os import array import unittest import struct -import warnings -from test.test_support import run_unittest +import inspect +from test.test_support import run_unittest, check_warnings, check_py3k_warnings import sys ISBIGENDIAN = sys.byteorder == "big" @@ -10,6 +11,7 @@ integer_codes = 'b', 'B', 'h', 'H', 'i', 'I', 'l', 'L', 'q', 'Q' +testmod_filename = os.path.splitext(__file__)[0] + '.py' # Native 'q' packing isn't available on systems that don't have the C # long long type. try: @@ -33,23 +35,13 @@ def check_float_coerce(self, format, number): # SF bug 1530559. struct.pack raises TypeError where it used # to convert. - with warnings.catch_warnings(record=True) as w: - # ignore everything except the - # DeprecationWarning we're looking for - warnings.simplefilter("ignore") - warnings.filterwarnings( - "always", - message=".*integer argument expected, got float", - category=DeprecationWarning, - module=__name__ - ) + with check_warnings((".*integer argument expected, got float", + DeprecationWarning)) as w: got = struct.pack(format, number) - nwarn = len(w) - self.assertEqual(nwarn, 1, - "expected exactly one warning from " - "struct.pack({!r}, {!r}); " - "got {} warnings".format( - format, number, nwarn)) + lineno = inspect.currentframe().f_lineno - 1 + self.assertEqual(w.filename, testmod_filename) + self.assertEqual(w.lineno, lineno) + self.assertEqual(len(w.warnings), 1) expected = struct.pack(format, int(number)) self.assertEqual(got, expected) @@ -297,33 +289,29 @@ def __long__(self): return -163L - for badobject in ("a string", 3+42j, randrange): + self.assertRaises((TypeError, struct.error), + struct.pack, self.format, + "a string") + self.assertRaises((TypeError, struct.error), + struct.pack, self.format, + randrange) + with check_warnings(("integer argument expected, " + "got non-integer", DeprecationWarning)): self.assertRaises((TypeError, struct.error), struct.pack, self.format, - badobject) + 3+42j) # an attempt to convert a non-integer (with an # implicit conversion via __int__) should succeed, # with a DeprecationWarning for nonint in NotAnIntNS(), NotAnIntOS(): - with warnings.catch_warnings(record=True) as w: - # ignore everything except the - # DeprecationWarning we're looking for - warnings.simplefilter("ignore") - warnings.filterwarnings( - "always", - message=(".*integer argument expected, " - "got non-integer.*"), - category=DeprecationWarning, - module=__name__ - ) + with check_warnings((".*integer argument expected, got non" + "-integer", DeprecationWarning)) as w: got = struct.pack(self.format, nonint) - nwarn = len(w) - self.assertEqual(nwarn, 1, - "expected exactly one warning from " - "struct.pack({!r}, {!r}); " - "got {} warnings".format( - self.format, nonint, nwarn)) + lineno = inspect.currentframe().f_lineno - 1 + self.assertEqual(w.filename, testmod_filename) + self.assertEqual(w.lineno, lineno) + self.assertEqual(len(w.warnings), 1) expected = struct.pack(self.format, int(nonint)) self.assertEqual(got, expected) @@ -395,28 +383,19 @@ self.check_float_coerce(endian + fmt, 1.0) self.check_float_coerce(endian + fmt, 1.5) - def test_unpack_from(self): - test_string = 'abcd01234' + def test_unpack_from(self, cls=str): + data = cls('abcd01234') fmt = '4s' s = struct.Struct(fmt) - for cls in (str, buffer): - data = cls(test_string) - self.assertEqual(s.unpack_from(data), ('abcd',)) - self.assertEqual(s.unpack_from(data, 2), ('cd01',)) - self.assertEqual(s.unpack_from(data, 4), ('0123',)) - for i in xrange(6): - self.assertEqual(s.unpack_from(data, i), (data[i:i+4],)) - for i in xrange(6, len(test_string) + 1): - self.assertRaises(struct.error, s.unpack_from, data, i) - for cls in (str, buffer): - data = cls(test_string) - self.assertEqual(struct.unpack_from(fmt, data), ('abcd',)) - self.assertEqual(struct.unpack_from(fmt, data, 2), ('cd01',)) - self.assertEqual(struct.unpack_from(fmt, data, 4), ('0123',)) - for i in xrange(6): - self.assertEqual(struct.unpack_from(fmt, data, i), (data[i:i+4],)) - for i in xrange(6, len(test_string) + 1): - self.assertRaises(struct.error, struct.unpack_from, fmt, data, i) + + self.assertEqual(s.unpack_from(data), ('abcd',)) + self.assertEqual(struct.unpack_from(fmt, data), ('abcd',)) + for i in xrange(6): + self.assertEqual(s.unpack_from(data, i), (data[i:i+4],)) + self.assertEqual(struct.unpack_from(fmt, data, i), (data[i:i+4],)) + for i in xrange(6, len(data) + 1): + self.assertRaises(struct.error, s.unpack_from, data, i) + self.assertRaises(struct.error, struct.unpack_from, fmt, data, i) def test_pack_into(self): test_string = 'Reykjavik rocks, eow!' @@ -465,17 +444,21 @@ self.assertRaises(struct.error, pack_into, small_buf, 2, test_string) def test_unpack_with_buffer(self): - # SF bug 1563759: struct.unpack doens't support buffer protocol objects - data1 = array.array('B', '\x12\x34\x56\x78') - data2 = buffer('......\x12\x34\x56\x78......', 6, 4) - for data in [data1, data2]: - value, = struct.unpack('>I', data) - self.assertEqual(value, 0x12345678) + with check_py3k_warnings(("buffer.. not supported in 3.x", + DeprecationWarning)): + # SF bug 1563759: struct.unpack doesn't support buffer protocol objects + data1 = array.array('B', '\x12\x34\x56\x78') + data2 = buffer('......\x12\x34\x56\x78......', 6, 4) + for data in [data1, data2]: + value, = struct.unpack('>I', data) + self.assertEqual(value, 0x12345678) + + self.test_unpack_from(cls=buffer) def test_bool(self): for prefix in tuple("<>!=")+('',): false = (), [], [], '', 0 - true = [1], 'test', 5, -1, 0xffffffffL+1, 0xffffffff/2 + true = [1], 'test', 5, -1, 0xffffffffL+1, 0xffffffff//2 falseFormat = prefix + '?' * len(false) packedFalse = struct.pack(falseFormat, *false) @@ -504,10 +487,9 @@ for c in '\x01\x7f\xff\x0f\xf0': self.assertTrue(struct.unpack('>?', c)[0]) - if IS32BIT: - def test_crasher(self): - self.assertRaises(MemoryError, struct.pack, "357913941c", "a") - + @unittest.skipUnless(IS32BIT, "Specific to 32bit machines") + def test_crasher(self): + self.assertRaises(MemoryError, struct.pack, "357913941c", "a") def test_main(): From python-checkins at python.org Sat Mar 20 23:22:22 2010 From: python-checkins at python.org (brett.cannon) Date: Sat, 20 Mar 2010 23:22:22 +0100 (CET) Subject: [Python-checkins] r79157 - python/branches/py3k/Lib/test/test_unicode.py Message-ID: <20100320222222.7953EFA98@mail.python.org> Author: brett.cannon Date: Sat Mar 20 23:22:22 2010 New Revision: 79157 Log: Clean up the warnings filter use in test_unicode. Modified: python/branches/py3k/Lib/test/test_unicode.py Modified: python/branches/py3k/Lib/test/test_unicode.py ============================================================================== --- python/branches/py3k/Lib/test/test_unicode.py (original) +++ python/branches/py3k/Lib/test/test_unicode.py Sat Mar 20 23:22:22 2010 @@ -31,18 +31,11 @@ return None codecs.register(search_function) -class UnicodeTest( - string_tests.CommonTest, - string_tests.MixinStrUnicodeUserStringTest, - string_tests.MixinStrUnicodeTest, - ): - type2test = str - - def setUp(self): - self.warning_filters = warnings.filters[:] +class UnicodeTest(string_tests.CommonTest, + string_tests.MixinStrUnicodeUserStringTest, + string_tests.MixinStrUnicodeTest): - def tearDown(self): - warnings.filters = self.warning_filters + type2test = str def checkequalnofix(self, result, object, methodname, *args): method = getattr(object, methodname) @@ -283,11 +276,12 @@ self.assertRaises(TypeError, 'replace'.replace, "r", 42) def test_bytes_comparison(self): - warnings.simplefilter('ignore', BytesWarning) - self.assertEqual('abc' == b'abc', False) - self.assertEqual('abc' != b'abc', True) - self.assertEqual('abc' == bytearray(b'abc'), False) - self.assertEqual('abc' != bytearray(b'abc'), True) + with support.check_warnings(): + warnings.simplefilter('ignore', BytesWarning) + self.assertEqual('abc' == b'abc', False) + self.assertEqual('abc' != b'abc', True) + self.assertEqual('abc' == bytearray(b'abc'), False) + self.assertEqual('abc' != bytearray(b'abc'), True) def test_comparison(self): # Comparisons: From python-checkins at python.org Sat Mar 20 23:22:57 2010 From: python-checkins at python.org (brett.cannon) Date: Sat, 20 Mar 2010 23:22:57 +0100 (CET) Subject: [Python-checkins] r79158 - python/branches/py3k/Lib/test/regrtest.py Message-ID: <20100320222257.3440BFB86@mail.python.org> Author: brett.cannon Date: Sat Mar 20 23:22:57 2010 New Revision: 79158 Log: Have regrtest monitor the warnings filter for changes made by a test suite. Modified: python/branches/py3k/Lib/test/regrtest.py Modified: python/branches/py3k/Lib/test/regrtest.py ============================================================================== --- python/branches/py3k/Lib/test/regrtest.py (original) +++ python/branches/py3k/Lib/test/regrtest.py Sat Mar 20 23:22:57 2010 @@ -786,7 +786,8 @@ # the corresponding method names. resources = ('sys.argv', 'cwd', 'sys.stdin', 'sys.stdout', 'sys.stderr', - 'os.environ', 'sys.path', 'sys.path_hooks', '__import__') + 'os.environ', 'sys.path', 'sys.path_hooks', '__import__', + 'warnings.filters') def get_sys_argv(self): return id(sys.argv), sys.argv, sys.argv[:] @@ -838,6 +839,12 @@ def restore___import__(self, import_): __builtins__.__import__ = import_ + def get_warnings_filters(self): + return id(warnings.filters), warnings.filters, warnings.filters[:] + def restore_warnings_filters(self, saved_filters): + warnings.filters = saved_filters[1] + warnings.filters[:] = saved_filters[2] + def resource_info(self): for name in self.resources: method_suffix = name.replace('.', '_') From python-checkins at python.org Sat Mar 20 23:26:43 2010 From: python-checkins at python.org (florent.xicluna) Date: Sat, 20 Mar 2010 23:26:43 +0100 (CET) Subject: [Python-checkins] r79159 - python/trunk/Lib/test/test_tarfile.py Message-ID: <20100320222643.098DAFBA0@mail.python.org> Author: florent.xicluna Date: Sat Mar 20 23:26:42 2010 New Revision: 79159 Log: Cleanup test_tarfile, and use check_warnings. Modified: python/trunk/Lib/test/test_tarfile.py Modified: python/trunk/Lib/test/test_tarfile.py ============================================================================== --- python/trunk/Lib/test/test_tarfile.py (original) +++ python/trunk/Lib/test/test_tarfile.py Sat Mar 20 23:26:42 2010 @@ -69,7 +69,7 @@ "fileobj.readlines() failed") self.assertTrue(len(lines2) == 114, "fileobj.readlines() failed") - self.assertTrue(lines2[83] == \ + self.assertTrue(lines2[83] == "I will gladly admit that Python is not the fastest running scripting language.\n", "fileobj.readlines() failed") @@ -707,11 +707,12 @@ name = os.path.join(tempdir, name) open(name, "wb").close() - def exclude(name): - return os.path.isfile(name) + exclude = os.path.isfile tar = tarfile.open(tmpname, self.mode, encoding="iso8859-1") - tar.add(tempdir, arcname="empty_dir", exclude=exclude) + with test_support.check_warnings(("use the filter argument", + DeprecationWarning)): + tar.add(tempdir, arcname="empty_dir", exclude=exclude) tar.close() tar = tarfile.open(tmpname, "r") @@ -889,10 +890,12 @@ tar = tarfile.open(tmpname) member = tar.next() - self.assertFalse(member is None, "unable to read longname member") - self.assertTrue(tarinfo.name == member.name and \ - tarinfo.linkname == member.linkname, \ - "unable to read longname member") + self.assertIsNotNone(member, + "unable to read longname member") + self.assertEqual(tarinfo.name, member.name, + "unable to read longname member") + self.assertEqual(tarinfo.linkname, member.linkname, + "unable to read longname member") def test_longname_1023(self): self._test(("longnam/" * 127) + "longnam") @@ -994,7 +997,7 @@ u"test": u"???", u"???": u"test"} - tar = tarfile.open(tmpname, "w", format=tarfile.PAX_FORMAT, \ + tar = tarfile.open(tmpname, "w", format=tarfile.PAX_FORMAT, pax_headers=pax_headers) tar.addfile(tarfile.TarInfo("test")) tar.close() From python-checkins at python.org Sun Mar 21 01:21:43 2010 From: python-checkins at python.org (antoine.pitrou) Date: Sun, 21 Mar 2010 01:21:43 +0100 (CET) Subject: [Python-checkins] r79160 - python/trunk/.hgignore Message-ID: <20100321002143.C579CF825@mail.python.org> Author: antoine.pitrou Date: Sun Mar 21 01:21:43 2010 New Revision: 79160 Log: Fix overzealous .hgignore file Modified: python/trunk/.hgignore Modified: python/trunk/.hgignore ============================================================================== --- python/trunk/.hgignore (original) +++ python/trunk/.hgignore Sun Mar 21 01:21:43 2010 @@ -1,8 +1,8 @@ .gdb_history .purify .svn -Makefile -Makefile.pre +Makefile$ +Makefile.pre$ TAGS autom4te.cache build From python-checkins at python.org Sun Mar 21 01:22:55 2010 From: python-checkins at python.org (antoine.pitrou) Date: Sun, 21 Mar 2010 01:22:55 +0100 (CET) Subject: [Python-checkins] r79161 - in python/branches/py3k: .hgignore Message-ID: <20100321002255.D340FF825@mail.python.org> Author: antoine.pitrou Date: Sun Mar 21 01:22:55 2010 New Revision: 79161 Log: Merged revisions 79160 via svnmerge from svn+ssh://pythondev at svn.python.org/python/trunk ........ r79160 | antoine.pitrou | 2010-03-21 01:21:43 +0100 (dim., 21 mars 2010) | 3 lines Fix overzealous .hgignore file ........ Modified: python/branches/py3k/ (props changed) python/branches/py3k/.hgignore Modified: python/branches/py3k/.hgignore ============================================================================== --- python/branches/py3k/.hgignore (original) +++ python/branches/py3k/.hgignore Sun Mar 21 01:22:55 2010 @@ -1,8 +1,8 @@ .gdb_history .purify .svn -Makefile -Makefile.pre +Makefile$ +Makefile.pre$ TAGS autom4te.cache build From python-checkins at python.org Sun Mar 21 01:24:41 2010 From: python-checkins at python.org (antoine.pitrou) Date: Sun, 21 Mar 2010 01:24:41 +0100 (CET) Subject: [Python-checkins] r79162 - in python/branches/release26-maint: .hgignore Message-ID: <20100321002441.BA077F825@mail.python.org> Author: antoine.pitrou Date: Sun Mar 21 01:24:41 2010 New Revision: 79162 Log: Merged revisions 79160 via svnmerge from svn+ssh://pythondev at svn.python.org/python/trunk ........ r79160 | antoine.pitrou | 2010-03-21 01:21:43 +0100 (dim., 21 mars 2010) | 3 lines Fix overzealous .hgignore file ........ Modified: python/branches/release26-maint/ (props changed) python/branches/release26-maint/.hgignore Modified: python/branches/release26-maint/.hgignore ============================================================================== --- python/branches/release26-maint/.hgignore (original) +++ python/branches/release26-maint/.hgignore Sun Mar 21 01:24:41 2010 @@ -13,8 +13,8 @@ EUC-JP.TXT EUC-KR.TXT JOHAB.TXT -Makefile -Makefile.pre +Makefile$ +Makefile.pre$ NormalizationTest-3.2.0.txt NormalizationTest.txt SHIFTJIS.TXT @@ -66,4 +66,4 @@ PCbuild/*.o PCbuild/*.ncb PCbuild/*.bsc -PCbuild/Win32-temp-* \ No newline at end of file +PCbuild/Win32-temp-* From python-checkins at python.org Sun Mar 21 01:53:39 2010 From: python-checkins at python.org (michael.foord) Date: Sun, 21 Mar 2010 01:53:39 +0100 (CET) Subject: [Python-checkins] r79163 - in python/trunk/Lib: test/test_unittest.py unittest/loader.py Message-ID: <20100321005339.53A65FB8F@mail.python.org> Author: michael.foord Date: Sun Mar 21 01:53:39 2010 New Revision: 79163 Log: A faulty load_tests in a test module no longer halts test discovery. A placeholder test, that reports the failure, is created instead. Modified: python/trunk/Lib/test/test_unittest.py python/trunk/Lib/unittest/loader.py Modified: python/trunk/Lib/test/test_unittest.py ============================================================================== --- python/trunk/Lib/test/test_unittest.py (original) +++ python/trunk/Lib/test/test_unittest.py Sun Mar 21 01:53:39 2010 @@ -289,6 +289,21 @@ suite = loader.loadTestsFromModule(m, use_load_tests=False) self.assertEquals(load_tests_args, []) + def test_loadTestsFromModule__faulty_load_tests(self): + m = types.ModuleType('m') + + def load_tests(loader, tests, pattern): + raise TypeError('some failure') + m.load_tests = load_tests + + loader = unittest.TestLoader() + suite = loader.loadTestsFromModule(m) + self.assertIsInstance(suite, unittest.TestSuite) + self.assertEqual(suite.countTestCases(), 1) + test = list(suite)[0] + + self.assertRaisesRegexp(TypeError, "some failure", test.m) + ################################################################ ### /Tests for TestLoader.loadTestsFromModule() Modified: python/trunk/Lib/unittest/loader.py ============================================================================== --- python/trunk/Lib/unittest/loader.py (original) +++ python/trunk/Lib/unittest/loader.py Sun Mar 21 01:53:39 2010 @@ -33,12 +33,18 @@ # Python 2.3 compatibility # format_exc returns two frames of discover.py as well message += '\n%s' % traceback.format_exc() + return _make_failed_test('ModuleImportFailure', name, suiteClass, + ImportError(message)) - def testImportFailure(self): - raise ImportError(message) - attrs = {name: testImportFailure} - ModuleImportFailure = type('ModuleImportFailure', (case.TestCase,), attrs) - return suiteClass((ModuleImportFailure(name),)) +def _make_failed_load_tests(name, exception, suiteClass): + return _make_failed_test('LoadTestsFailure', name, suiteClass, exception) + +def _make_failed_test(classname, methodname, suiteClass, exception): + def testFailure(self): + raise exception + attrs = {methodname: testFailure} + TestClass = type(classname, (case.TestCase,), attrs) + return suiteClass((TestClass(methodname),)) class TestLoader(object): @@ -73,7 +79,11 @@ load_tests = getattr(module, 'load_tests', None) tests = self.suiteClass(tests) if use_load_tests and load_tests is not None: - return load_tests(self, tests, None) + try: + return load_tests(self, tests, None) + except Exception, e: + return _make_failed_load_tests(module.__name__, e, + self.suiteClass) return tests def loadTestsFromName(self, name, module=None): @@ -239,7 +249,11 @@ for test in self._find_tests(full_path, pattern): yield test else: - yield load_tests(self, tests, pattern) + try: + yield load_tests(self, tests, pattern) + except Exception, e: + yield _make_failed_load_tests(package.__name__, e, + self.suiteClass) defaultTestLoader = TestLoader() From python-checkins at python.org Sun Mar 21 01:55:58 2010 From: python-checkins at python.org (michael.foord) Date: Sun, 21 Mar 2010 01:55:58 +0100 (CET) Subject: [Python-checkins] r79164 - python/trunk/Lib/unittest/loader.py Message-ID: <20100321005558.CE245FA75@mail.python.org> Author: michael.foord Date: Sun Mar 21 01:55:58 2010 New Revision: 79164 Log: Change order of arguments in a unittest function. Modified: python/trunk/Lib/unittest/loader.py Modified: python/trunk/Lib/unittest/loader.py ============================================================================== --- python/trunk/Lib/unittest/loader.py (original) +++ python/trunk/Lib/unittest/loader.py Sun Mar 21 01:55:58 2010 @@ -33,13 +33,13 @@ # Python 2.3 compatibility # format_exc returns two frames of discover.py as well message += '\n%s' % traceback.format_exc() - return _make_failed_test('ModuleImportFailure', name, suiteClass, - ImportError(message)) + return _make_failed_test('ModuleImportFailure', name, ImportError(message), + suiteClass) def _make_failed_load_tests(name, exception, suiteClass): - return _make_failed_test('LoadTestsFailure', name, suiteClass, exception) + return _make_failed_test('LoadTestsFailure', name, exception, suiteClass) -def _make_failed_test(classname, methodname, suiteClass, exception): +def _make_failed_test(classname, methodname, exception, suiteClass): def testFailure(self): raise exception attrs = {methodname: testFailure} From python-checkins at python.org Sun Mar 21 02:14:24 2010 From: python-checkins at python.org (florent.xicluna) Date: Sun, 21 Mar 2010 02:14:24 +0100 (CET) Subject: [Python-checkins] r79165 - in python/trunk/Lib/test: list_tests.py mapping_tests.py test_StringIO.py test_array.py test_ast.py test_augassign.py test_bigmem.py test_bool.py test_buffer.py test_builtin.py test_call.py test_class.py test_ctypes.py test_descr.py test_doctest.py test_heapq.py test_inspect.py test_iter.py test_long.py test_marshal.py test_multiprocessing.py test_operator.py test_peepholer.py test_richcmp.py test_set.py test_sets.py test_slice.py test_socket.py test_sort.py test_ssl.py test_syntax.py test_types.py test_undocumented_details.py test_univnewlines2k.py test_userdict.py test_userlist.py test_weakref.py test_zipimport_support.py Message-ID: <20100321011424.8AA55F86B@mail.python.org> Author: florent.xicluna Date: Sun Mar 21 02:14:24 2010 New Revision: 79165 Log: #7092 - Silence more py3k deprecation warnings, using test_support.check_py3k_warnings() helper. Modified: python/trunk/Lib/test/list_tests.py python/trunk/Lib/test/mapping_tests.py python/trunk/Lib/test/test_StringIO.py python/trunk/Lib/test/test_array.py python/trunk/Lib/test/test_ast.py python/trunk/Lib/test/test_augassign.py python/trunk/Lib/test/test_bigmem.py python/trunk/Lib/test/test_bool.py python/trunk/Lib/test/test_buffer.py python/trunk/Lib/test/test_builtin.py python/trunk/Lib/test/test_call.py python/trunk/Lib/test/test_class.py python/trunk/Lib/test/test_ctypes.py python/trunk/Lib/test/test_descr.py python/trunk/Lib/test/test_doctest.py python/trunk/Lib/test/test_heapq.py python/trunk/Lib/test/test_inspect.py python/trunk/Lib/test/test_iter.py python/trunk/Lib/test/test_long.py python/trunk/Lib/test/test_marshal.py python/trunk/Lib/test/test_multiprocessing.py python/trunk/Lib/test/test_operator.py python/trunk/Lib/test/test_peepholer.py python/trunk/Lib/test/test_richcmp.py python/trunk/Lib/test/test_set.py python/trunk/Lib/test/test_sets.py python/trunk/Lib/test/test_slice.py python/trunk/Lib/test/test_socket.py python/trunk/Lib/test/test_sort.py python/trunk/Lib/test/test_ssl.py python/trunk/Lib/test/test_syntax.py python/trunk/Lib/test/test_types.py python/trunk/Lib/test/test_undocumented_details.py python/trunk/Lib/test/test_univnewlines2k.py python/trunk/Lib/test/test_userdict.py python/trunk/Lib/test/test_userlist.py python/trunk/Lib/test/test_weakref.py python/trunk/Lib/test/test_zipimport_support.py Modified: python/trunk/Lib/test/list_tests.py ============================================================================== --- python/trunk/Lib/test/list_tests.py (original) +++ python/trunk/Lib/test/list_tests.py Sun Mar 21 02:14:24 2010 @@ -36,7 +36,7 @@ self.assertEqual(str(a0), str(l0)) self.assertEqual(repr(a0), repr(l0)) - self.assertEqual(`a2`, `l2`) + self.assertEqual(repr(a2), repr(l2)) self.assertEqual(str(a2), "[0, 1, 2]") self.assertEqual(repr(a2), "[0, 1, 2]") @@ -421,6 +421,11 @@ self.assertRaises(TypeError, u.reverse, 42) def test_sort(self): + with test_support.check_py3k_warnings( + ("the cmp argument is not supported", DeprecationWarning)): + self._test_sort() + + def _test_sort(self): u = self.type2test([1, 0]) u.sort() self.assertEqual(u, [0, 1]) Modified: python/trunk/Lib/test/mapping_tests.py ============================================================================== --- python/trunk/Lib/test/mapping_tests.py (original) +++ python/trunk/Lib/test/mapping_tests.py Sun Mar 21 02:14:24 2010 @@ -1,6 +1,7 @@ # tests common to dict and UserDict import unittest import UserDict +import test_support class BasicTestMappingProtocol(unittest.TestCase): @@ -54,13 +55,17 @@ #len self.assertEqual(len(p), 0) self.assertEqual(len(d), len(self.reference)) - #has_key + #in for k in self.reference: - self.assertTrue(d.has_key(k)) self.assertIn(k, d) for k in self.other: - self.assertFalse(d.has_key(k)) self.assertNotIn(k, d) + #has_key + with test_support.check_py3k_warnings(quiet=True): + for k in self.reference: + self.assertTrue(d.has_key(k)) + for k in self.other: + self.assertFalse(d.has_key(k)) #cmp self.assertEqual(cmp(p,p), 0) self.assertEqual(cmp(d,d), 0) Modified: python/trunk/Lib/test/test_StringIO.py ============================================================================== --- python/trunk/Lib/test/test_StringIO.py (original) +++ python/trunk/Lib/test/test_StringIO.py Sun Mar 21 02:14:24 2010 @@ -137,12 +137,10 @@ def test_main(): - test_support.run_unittest( - TestStringIO, - TestcStringIO, - TestBufferStringIO, - TestBuffercStringIO - ) + test_support.run_unittest(TestStringIO, TestcStringIO) + with test_support.check_py3k_warnings(("buffer.. not supported", + DeprecationWarning)): + test_support.run_unittest(TestBufferStringIO, TestBuffercStringIO) if __name__ == '__main__': test_main() Modified: python/trunk/Lib/test/test_array.py ============================================================================== --- python/trunk/Lib/test/test_array.py (original) +++ python/trunk/Lib/test/test_array.py Sun Mar 21 02:14:24 2010 @@ -749,7 +749,8 @@ def test_buffer(self): a = array.array(self.typecode, self.example) - b = buffer(a) + with test_support.check_py3k_warnings(): + b = buffer(a) self.assertEqual(b[0], a.tostring()[0]) def test_weakref(self): Modified: python/trunk/Lib/test/test_ast.py ============================================================================== --- python/trunk/Lib/test/test_ast.py (original) +++ python/trunk/Lib/test/test_ast.py Sun Mar 21 02:14:24 2010 @@ -302,7 +302,9 @@ def test_main(): - test_support.run_unittest(AST_Tests, ASTHelpers_Test) + with test_support.check_py3k_warnings(("backquote not supported", + SyntaxWarning)): + test_support.run_unittest(AST_Tests, ASTHelpers_Test) def main(): if __name__ != '__main__': Modified: python/trunk/Lib/test/test_augassign.py ============================================================================== --- python/trunk/Lib/test/test_augassign.py (original) +++ python/trunk/Lib/test/test_augassign.py Sun Mar 21 02:14:24 2010 @@ -1,6 +1,6 @@ # Augmented assignment test. -from test.test_support import run_unittest +from test.test_support import run_unittest, check_py3k_warnings import unittest @@ -324,7 +324,8 @@ '''.splitlines()) def test_main(): - run_unittest(AugAssignTest) + with check_py3k_warnings(("classic int division", DeprecationWarning)): + run_unittest(AugAssignTest) if __name__ == '__main__': test_main() Modified: python/trunk/Lib/test/test_bigmem.py ============================================================================== --- python/trunk/Lib/test/test_bigmem.py (original) +++ python/trunk/Lib/test/test_bigmem.py Sun Mar 21 02:14:24 2010 @@ -97,21 +97,21 @@ def test_encode(self, size): return self.basic_encode_test(size, 'utf-8') - @precisionbigmemtest(size=_4G / 6 + 2, memuse=2) + @precisionbigmemtest(size=_4G // 6 + 2, memuse=2) def test_encode_raw_unicode_escape(self, size): try: return self.basic_encode_test(size, 'raw_unicode_escape') except MemoryError: pass # acceptable on 32-bit - @precisionbigmemtest(size=_4G / 5 + 70, memuse=3) + @precisionbigmemtest(size=_4G // 5 + 70, memuse=3) def test_encode_utf7(self, size): try: return self.basic_encode_test(size, 'utf7') except MemoryError: pass # acceptable on 32-bit - @precisionbigmemtest(size=_4G / 4 + 5, memuse=6) + @precisionbigmemtest(size=_4G // 4 + 5, memuse=6) def test_encode_utf32(self, size): try: return self.basic_encode_test(size, 'utf32', expectedsize=4*size+4) @@ -122,7 +122,7 @@ def test_decodeascii(self, size): return self.basic_encode_test(size, 'ascii', c='A') - @precisionbigmemtest(size=_4G / 5, memuse=6+2) + @precisionbigmemtest(size=_4G // 5, memuse=6+2) def test_unicode_repr_oflw(self, size): try: s = u"\uAAAA"*size @@ -516,7 +516,7 @@ self.assertEquals(s.count('\\'), size) self.assertEquals(s.count('0'), size * 2) - @bigmemtest(minsize=2**32 / 5, memuse=6+2) + @bigmemtest(minsize=2**32 // 5, memuse=6+2) def test_unicode_repr(self, size): s = u"\uAAAA" * size self.assertTrue(len(repr(s)) > size) @@ -1053,7 +1053,8 @@ @precisionbigmemtest(size=_1G, memuse=4) def test_repeat(self, size): try: - b = buffer("AAAA")*size + with test_support.check_py3k_warnings(): + b = buffer("AAAA")*size except MemoryError: pass # acceptable on 32-bit else: Modified: python/trunk/Lib/test/test_bool.py ============================================================================== --- python/trunk/Lib/test/test_bool.py (original) +++ python/trunk/Lib/test/test_bool.py Sun Mar 21 02:14:24 2010 @@ -85,10 +85,10 @@ self.assertEqual(False*1, 0) self.assertIsNot(False*1, False) - self.assertEqual(True/1, 1) - self.assertIsNot(True/1, True) - self.assertEqual(False/1, 0) - self.assertIsNot(False/1, False) + self.assertEqual(True//1, 1) + self.assertIsNot(True//1, True) + self.assertEqual(False//1, 0) + self.assertIsNot(False//1, False) for b in False, True: for i in 0, 1, 2: @@ -162,8 +162,9 @@ self.assertIs(hasattr([], "wobble"), False) def test_callable(self): - self.assertIs(callable(len), True) - self.assertIs(callable(1), False) + with test_support.check_py3k_warnings(): + self.assertIs(callable(len), True) + self.assertIs(callable(1), False) def test_isinstance(self): self.assertIs(isinstance(True, bool), True) @@ -178,8 +179,11 @@ self.assertIs(issubclass(int, bool), False) def test_haskey(self): - self.assertIs({}.has_key(1), False) - self.assertIs({1:1}.has_key(1), True) + self.assertIs(1 in {}, False) + self.assertIs(1 in {1:1}, True) + with test_support.check_py3k_warnings(): + self.assertIs({}.has_key(1), False) + self.assertIs({1:1}.has_key(1), True) def test_string(self): self.assertIs("xyz".endswith("z"), True) @@ -251,8 +255,9 @@ import operator self.assertIs(operator.truth(0), False) self.assertIs(operator.truth(1), True) - self.assertIs(operator.isCallable(0), False) - self.assertIs(operator.isCallable(len), True) + with test_support.check_py3k_warnings(): + self.assertIs(operator.isCallable(0), False) + self.assertIs(operator.isCallable(len), True) self.assertIs(operator.isNumberType(None), False) self.assertIs(operator.isNumberType(0), True) self.assertIs(operator.not_(1), False) Modified: python/trunk/Lib/test/test_buffer.py ============================================================================== --- python/trunk/Lib/test/test_buffer.py (original) +++ python/trunk/Lib/test/test_buffer.py Sun Mar 21 02:14:24 2010 @@ -23,7 +23,9 @@ def test_main(): - test_support.run_unittest(BufferTests) + with test_support.check_py3k_warnings(("buffer.. not supported", + DeprecationWarning)): + test_support.run_unittest(BufferTests) if __name__ == "__main__": test_main() Modified: python/trunk/Lib/test/test_builtin.py ============================================================================== --- python/trunk/Lib/test/test_builtin.py (original) +++ python/trunk/Lib/test/test_builtin.py Sun Mar 21 02:14:24 2010 @@ -3,14 +3,10 @@ import platform import unittest from test.test_support import fcmp, have_unicode, TESTFN, unlink, \ - run_unittest + run_unittest, check_py3k_warnings from operator import neg -import sys, warnings, cStringIO, random, UserDict -warnings.filterwarnings("ignore", "hex../oct.. of negative int", - FutureWarning, __name__) -warnings.filterwarnings("ignore", "integer argument expected", - DeprecationWarning, "unittest") +import sys, cStringIO, random, UserDict # count the number of test runs. # used to skip running test_execfile() multiple times @@ -419,7 +415,9 @@ f.write('z = z+1\n') f.write('z = z*2\n') f.close() - execfile(TESTFN) + with check_py3k_warnings(("execfile.. not supported in 3.x", + DeprecationWarning)): + execfile(TESTFN) def test_execfile(self): global numruns @@ -1542,17 +1540,24 @@ data = 'The quick Brown fox Jumped over The lazy Dog'.split() self.assertRaises(TypeError, sorted, data, None, lambda x,y: 0) +def _run_unittest(*args): + with check_py3k_warnings( + (".+ not supported in 3.x", DeprecationWarning), + (".+ is renamed to imp.reload", DeprecationWarning), + ("classic int division", DeprecationWarning)): + run_unittest(*args) + def test_main(verbose=None): test_classes = (BuiltinTest, TestSorted) - run_unittest(*test_classes) + _run_unittest(*test_classes) # verify reference counting if verbose and hasattr(sys, "gettotalrefcount"): import gc counts = [None] * 5 for i in xrange(len(counts)): - run_unittest(*test_classes) + _run_unittest(*test_classes) gc.collect() counts[i] = sys.gettotalrefcount() print counts Modified: python/trunk/Lib/test/test_call.py ============================================================================== --- python/trunk/Lib/test/test_call.py (original) +++ python/trunk/Lib/test/test_call.py Sun Mar 21 02:14:24 2010 @@ -12,7 +12,8 @@ self.assertRaises(TypeError, {}.has_key) def test_varargs1(self): - {}.has_key(0) + with test_support.check_py3k_warnings(): + {}.has_key(0) def test_varargs2(self): self.assertRaises(TypeError, {}.has_key, 0, 1) @@ -24,11 +25,13 @@ pass def test_varargs1_ext(self): - {}.has_key(*(0,)) + with test_support.check_py3k_warnings(): + {}.has_key(*(0,)) def test_varargs2_ext(self): try: - {}.has_key(*(1, 2)) + with test_support.check_py3k_warnings(): + {}.has_key(*(1, 2)) except TypeError: pass else: Modified: python/trunk/Lib/test/test_class.py ============================================================================== --- python/trunk/Lib/test/test_class.py (original) +++ python/trunk/Lib/test/test_class.py Sun Mar 21 02:14:24 2010 @@ -407,7 +407,7 @@ self.assertCallStack([("__coerce__", (testme, 1)), ('__cmp__', (testme, 1))]) callLst[:] = [] - testme <> 1 # XXX kill this in py3k + eval('testme <> 1') # XXX kill this in py3k self.assertCallStack([("__coerce__", (testme, 1)), ('__cmp__', (testme, 1))]) callLst[:] = [] @@ -427,7 +427,7 @@ self.assertCallStack([("__coerce__", (testme, 1)), ('__cmp__', (1, testme))]) callLst[:] = [] - 1 <> testme + eval('1 <> testme') self.assertCallStack([("__coerce__", (testme, 1)), ('__cmp__', (1, testme))]) callLst[:] = [] @@ -616,7 +616,11 @@ hash(a.f) def test_main(): - test_support.run_unittest(ClassTests) + with test_support.check_py3k_warnings( + (".+__(get|set|del)slice__ has been removed", DeprecationWarning), + ("classic int division", DeprecationWarning), + ("<> not supported", DeprecationWarning)): + test_support.run_unittest(ClassTests) if __name__=='__main__': test_main() Modified: python/trunk/Lib/test/test_ctypes.py ============================================================================== --- python/trunk/Lib/test/test_ctypes.py (original) +++ python/trunk/Lib/test/test_ctypes.py Sun Mar 21 02:14:24 2010 @@ -1,15 +1,17 @@ import unittest -from test.test_support import run_unittest, import_module +from test.test_support import run_unittest, import_module, check_py3k_warnings #Skip tests if _ctypes module does not exist import_module('_ctypes') -import ctypes.test def test_main(): - skipped, testcases = ctypes.test.get_tests(ctypes.test, "test_*.py", verbosity=0) - suites = [unittest.makeSuite(t) for t in testcases] - run_unittest(unittest.TestSuite(suites)) + with check_py3k_warnings(("buffer.. not supported", DeprecationWarning), + ("classic (int|long) division", DeprecationWarning)): + import ctypes.test + skipped, testcases = ctypes.test.get_tests(ctypes.test, "test_*.py", verbosity=0) + suites = [unittest.makeSuite(t) for t in testcases] + run_unittest(unittest.TestSuite(suites)) if __name__ == "__main__": test_main() Modified: python/trunk/Lib/test/test_descr.py ============================================================================== --- python/trunk/Lib/test/test_descr.py (original) +++ python/trunk/Lib/test/test_descr.py Sun Mar 21 02:14:24 2010 @@ -4622,9 +4622,14 @@ def test_main(): - # Run all local test cases, with PTypesLongInitTest first. - test_support.run_unittest(PTypesLongInitTest, OperatorsTest, - ClassPropertiesAndMethods, DictProxyTests) + with test_support.check_py3k_warnings( + ("classic (int|long) division", DeprecationWarning), + ("coerce.. not supported", DeprecationWarning), + ("Overriding __cmp__ ", DeprecationWarning), + (".+__(get|set|del)slice__ has been removed", DeprecationWarning)): + # Run all local test cases, with PTypesLongInitTest first. + test_support.run_unittest(PTypesLongInitTest, OperatorsTest, + ClassPropertiesAndMethods, DictProxyTests) if __name__ == "__main__": test_main() Modified: python/trunk/Lib/test/test_doctest.py ============================================================================== --- python/trunk/Lib/test/test_doctest.py (original) +++ python/trunk/Lib/test/test_doctest.py Sun Mar 21 02:14:24 2010 @@ -2169,7 +2169,7 @@ >>> doctest.master = None # Reset master. (Note: we'll be clearing doctest.master after each call to -`doctest.testfile`, to supress warnings about multiple tests with the +`doctest.testfile`, to suppress warnings about multiple tests with the same name.) Globals may be specified with the `globs` and `extraglobs` parameters: @@ -2333,12 +2333,6 @@ # that these use the deprecated doctest.Tester, so should go away (or # be rewritten) someday. -# Ignore all warnings about the use of class Tester in this module. -# Note that the name of this module may differ depending on how it's -# imported, so the use of __name__ is important. -warnings.filterwarnings("ignore", "class Tester", DeprecationWarning, - __name__, 0) - def old_test1(): r""" >>> from doctest import Tester >>> t = Tester(globs={'x': 42}, verbose=0) @@ -2462,9 +2456,16 @@ def test_main(): # Check the doctest cases in doctest itself: test_support.run_doctest(doctest, verbosity=True) - # Check the doctest cases defined here: + from test import test_doctest - test_support.run_doctest(test_doctest, verbosity=True) + with test_support.check_py3k_warnings( + ("backquote not supported", SyntaxWarning), + ("execfile.. not supported", DeprecationWarning)): + # Ignore all warnings about the use of class Tester in this module. + warnings.filterwarnings("ignore", "class Tester is deprecated", + DeprecationWarning) + # Check the doctest cases defined here: + test_support.run_doctest(test_doctest, verbosity=True) import trace, sys def test_coverage(coverdir): Modified: python/trunk/Lib/test/test_heapq.py ============================================================================== --- python/trunk/Lib/test/test_heapq.py (original) +++ python/trunk/Lib/test/test_heapq.py Sun Mar 21 02:14:24 2010 @@ -356,7 +356,10 @@ for f in (self.module.nlargest, self.module.nsmallest): for s in ("123", "", range(1000), ('do', 1.2), xrange(2000,2200,5)): for g in (G, I, Ig, L, R): - self.assertEqual(f(2, g(s)), f(2,s)) + with test_support.check_py3k_warnings( + ("comparing unequal types not supported", + DeprecationWarning), quiet=True): + self.assertEqual(f(2, g(s)), f(2,s)) self.assertEqual(f(2, S(s)), []) self.assertRaises(TypeError, f, 2, X(s)) self.assertRaises(TypeError, f, 2, N(s)) Modified: python/trunk/Lib/test/test_inspect.py ============================================================================== --- python/trunk/Lib/test/test_inspect.py (original) +++ python/trunk/Lib/test/test_inspect.py Sun Mar 21 02:14:24 2010 @@ -4,10 +4,13 @@ import inspect import datetime -from test.test_support import run_unittest +from test.test_support import run_unittest, check_py3k_warnings -from test import inspect_fodder as mod -from test import inspect_fodder2 as mod2 +with check_py3k_warnings( + ("tuple parameter unpacking has been removed", SyntaxWarning), + quiet=True): + from test import inspect_fodder as mod + from test import inspect_fodder2 as mod2 # C module for test_findsource_binary import unicodedata @@ -29,7 +32,7 @@ import __builtin__ try: - 1/0 + 1 // 0 except: tb = sys.exc_traceback @@ -420,11 +423,14 @@ self.assertArgSpecEquals(A.m, ['self']) def test_getargspec_sublistofone(self): - def sublistOfOne((foo,)): return 1 - self.assertArgSpecEquals(sublistOfOne, [['foo']]) + with check_py3k_warnings( + ("tuple parameter unpacking has been removed", SyntaxWarning), + ("parenthesized argument names are invalid", SyntaxWarning)): + exec 'def sublistOfOne((foo,)): return 1' + self.assertArgSpecEquals(sublistOfOne, [['foo']]) - def fakeSublistOfOne((foo)): return 1 - self.assertArgSpecEquals(fakeSublistOfOne, ['foo']) + exec 'def fakeSublistOfOne((foo)): return 1' + self.assertArgSpecEquals(fakeSublistOfOne, ['foo']) def test_classify_oldstyle(self): class A: Modified: python/trunk/Lib/test/test_iter.py ============================================================================== --- python/trunk/Lib/test/test_iter.py (original) +++ python/trunk/Lib/test/test_iter.py Sun Mar 21 02:14:24 2010 @@ -1,7 +1,8 @@ # Test iterators. import unittest -from test.test_support import run_unittest, TESTFN, unlink, have_unicode +from test.test_support import run_unittest, TESTFN, unlink, have_unicode, \ + check_py3k_warnings # Test result of triple loop (too big to inline) TRIPLETS = [(0, 0, 0), (0, 0, 1), (0, 0, 2), @@ -396,21 +397,24 @@ # Test map()'s use of iterators. def test_builtin_map(self): - self.assertEqual(map(None, SequenceClass(5)), range(5)) self.assertEqual(map(lambda x: x+1, SequenceClass(5)), range(1, 6)) d = {"one": 1, "two": 2, "three": 3} - self.assertEqual(map(None, d), d.keys()) self.assertEqual(map(lambda k, d=d: (k, d[k]), d), d.items()) dkeys = d.keys() expected = [(i < len(d) and dkeys[i] or None, i, i < len(d) and dkeys[i] or None) for i in range(5)] - self.assertEqual(map(None, d, - SequenceClass(5), - iter(d.iterkeys())), - expected) + + # Deprecated map(None, ...) + with check_py3k_warnings(): + self.assertEqual(map(None, SequenceClass(5)), range(5)) + self.assertEqual(map(None, d), d.keys()) + self.assertEqual(map(None, d, + SequenceClass(5), + iter(d.iterkeys())), + expected) f = open(TESTFN, "w") try: @@ -506,7 +510,11 @@ self.assertEqual(zip(x, y), expected) # Test reduces()'s use of iterators. - def test_builtin_reduce(self): + def test_deprecated_builtin_reduce(self): + with check_py3k_warnings(): + self._test_builtin_reduce() + + def _test_builtin_reduce(self): from operator import add self.assertEqual(reduce(add, SequenceClass(5)), 10) self.assertEqual(reduce(add, SequenceClass(5), 42), 52) Modified: python/trunk/Lib/test/test_long.py ============================================================================== --- python/trunk/Lib/test/test_long.py (original) +++ python/trunk/Lib/test/test_long.py Sun Mar 21 02:14:24 2010 @@ -574,11 +574,12 @@ def __getslice__(self, i, j): return i, j - self.assertEqual(X()[-5L:7L], (-5, 7)) - # use the clamping effect to test the smallest and largest longs - # that fit a Py_ssize_t - slicemin, slicemax = X()[-2L**100:2L**100] - self.assertEqual(X()[slicemin:slicemax], (slicemin, slicemax)) + with test_support.check_py3k_warnings(): + self.assertEqual(X()[-5L:7L], (-5, 7)) + # use the clamping effect to test the smallest and largest longs + # that fit a Py_ssize_t + slicemin, slicemax = X()[-2L**100:2L**100] + self.assertEqual(X()[slicemin:slicemax], (slicemin, slicemax)) # ----------------------------------- tests of auto int->long conversion @@ -616,8 +617,9 @@ checkit(x, '*', y) if y: - expected = longx / longy - got = x / y + with test_support.check_py3k_warnings(): + expected = longx / longy + got = x / y checkit(x, '/', y) expected = longx // longy Modified: python/trunk/Lib/test/test_marshal.py ============================================================================== --- python/trunk/Lib/test/test_marshal.py (original) +++ python/trunk/Lib/test/test_marshal.py Sun Mar 21 02:14:24 2010 @@ -129,7 +129,9 @@ def test_buffer(self): for s in ["", "Andr? Previn", "abc", " "*10000]: - b = buffer(s) + with test_support.check_py3k_warnings(("buffer.. not supported", + DeprecationWarning)): + b = buffer(s) new = marshal.loads(marshal.dumps(b)) self.assertEqual(s, new) marshal.dump(b, file(test_support.TESTFN, "wb")) Modified: python/trunk/Lib/test/test_multiprocessing.py ============================================================================== --- python/trunk/Lib/test/test_multiprocessing.py (original) +++ python/trunk/Lib/test/test_multiprocessing.py Sun Mar 21 02:14:24 2010 @@ -2023,7 +2023,9 @@ loadTestsFromTestCase = unittest.defaultTestLoader.loadTestsFromTestCase suite = unittest.TestSuite(loadTestsFromTestCase(tc) for tc in testcases) - run(suite) + with test_support.check_py3k_warnings( + (".+__(get|set)slice__ has been removed", DeprecationWarning)): + run(suite) ThreadsMixin.pool.terminate() ProcessesMixin.pool.terminate() Modified: python/trunk/Lib/test/test_operator.py ============================================================================== --- python/trunk/Lib/test/test_operator.py (original) +++ python/trunk/Lib/test/test_operator.py Sun Mar 21 02:14:24 2010 @@ -192,7 +192,9 @@ class C: pass def check(self, o, v): - self.assertTrue(operator.isCallable(o) == callable(o) == v) + with test_support.check_py3k_warnings(): + self.assertEqual(operator.isCallable(o), v) + self.assertEqual(callable(o), v) check(self, 4, 0) check(self, operator.isCallable, 1) check(self, C, 1) @@ -306,8 +308,9 @@ self.assertRaises(TypeError, operator.contains, None, None) self.assertTrue(operator.contains(range(4), 2)) self.assertFalse(operator.contains(range(4), 5)) - self.assertTrue(operator.sequenceIncludes(range(4), 2)) - self.assertFalse(operator.sequenceIncludes(range(4), 5)) + with test_support.check_py3k_warnings(): + self.assertTrue(operator.sequenceIncludes(range(4), 2)) + self.assertFalse(operator.sequenceIncludes(range(4), 5)) def test_setitem(self): a = range(3) Modified: python/trunk/Lib/test/test_peepholer.py ============================================================================== --- python/trunk/Lib/test/test_peepholer.py (original) +++ python/trunk/Lib/test/test_peepholer.py Sun Mar 21 02:14:24 2010 @@ -206,17 +206,20 @@ import sys from test import test_support test_classes = (TestTranforms,) - test_support.run_unittest(*test_classes) - # verify reference counting - if verbose and hasattr(sys, "gettotalrefcount"): - import gc - counts = [None] * 5 - for i in xrange(len(counts)): - test_support.run_unittest(*test_classes) - gc.collect() - counts[i] = sys.gettotalrefcount() - print counts + with test_support.check_py3k_warnings( + ("backquote not supported", SyntaxWarning)): + test_support.run_unittest(*test_classes) + + # verify reference counting + if verbose and hasattr(sys, "gettotalrefcount"): + import gc + counts = [None] * 5 + for i in xrange(len(counts)): + test_support.run_unittest(*test_classes) + gc.collect() + counts[i] = sys.gettotalrefcount() + print counts if __name__ == "__main__": test_main(verbose=True) Modified: python/trunk/Lib/test/test_richcmp.py ============================================================================== --- python/trunk/Lib/test/test_richcmp.py (original) +++ python/trunk/Lib/test/test_richcmp.py Sun Mar 21 02:14:24 2010 @@ -327,7 +327,12 @@ self.assertIs(op(x, y), True) def test_main(): - test_support.run_unittest(VectorTest, NumberTest, MiscTest, DictTest, ListTest) + test_support.run_unittest(VectorTest, NumberTest, MiscTest, ListTest) + with test_support.check_py3k_warnings(("dict inequality comparisons " + "not supported in 3.x", + DeprecationWarning)): + test_support.run_unittest(DictTest) + if __name__ == "__main__": test_main() Modified: python/trunk/Lib/test/test_set.py ============================================================================== --- python/trunk/Lib/test/test_set.py (original) +++ python/trunk/Lib/test/test_set.py Sun Mar 21 02:14:24 2010 @@ -1345,6 +1345,10 @@ self.other = operator.add self.otherIsIterable = False + def test_ge_gt_le_lt(self): + with test_support.check_py3k_warnings(): + super(TestOnlySetsOperator, self).test_ge_gt_le_lt() + #------------------------------------------------------------------------------ class TestOnlySetsTuple(TestOnlySetsInBinaryOps): Modified: python/trunk/Lib/test/test_sets.py ============================================================================== --- python/trunk/Lib/test/test_sets.py (original) +++ python/trunk/Lib/test/test_sets.py Sun Mar 21 02:14:24 2010 @@ -1,13 +1,11 @@ #!/usr/bin/env python -import warnings -warnings.filterwarnings("ignore", "the sets module is deprecated", - DeprecationWarning, "test\.test_sets") - import unittest, operator, copy, pickle, random -from sets import Set, ImmutableSet from test import test_support +test_support.import_module("sets", deprecated=True) +from sets import Set, ImmutableSet + empty_set = Set() #============================================================================== @@ -638,6 +636,10 @@ self.other = operator.add self.otherIsIterable = False + def test_ge_gt_le_lt(self): + with test_support.check_py3k_warnings(): + super(TestOnlySetsOperator, self).test_ge_gt_le_lt() + #------------------------------------------------------------------------------ class TestOnlySetsTuple(TestOnlySetsInBinaryOps): @@ -679,20 +681,16 @@ def test_copy(self): dup = self.set.copy() - dup_list = list(dup); dup_list.sort() - set_list = list(self.set); set_list.sort() + self.assertEqual(len(dup), len(self.set)) + dup_list = sorted(dup) + set_list = sorted(self.set) self.assertEqual(len(dup_list), len(set_list)) - for i in range(len(dup_list)): - self.assertTrue(dup_list[i] is set_list[i]) + for i, el in enumerate(dup_list): + self.assertIs(el, set_list[i]) def test_deep_copy(self): dup = copy.deepcopy(self.set) - ##print type(dup), repr(dup) - dup_list = list(dup); dup_list.sort() - set_list = list(self.set); set_list.sort() - self.assertEqual(len(dup_list), len(set_list)) - for i in range(len(dup_list)): - self.assertEqual(dup_list[i], set_list[i]) + self.assertSetEqual(dup, self.set) #------------------------------------------------------------------------------ @@ -712,6 +710,10 @@ def setUp(self): self.set = Set(["zero", 0, None]) + def test_copy(self): + with test_support.check_py3k_warnings(): + super(TestCopyingTriple, self).test_copy() + #------------------------------------------------------------------------------ class TestCopyingTuple(TestCopying): Modified: python/trunk/Lib/test/test_slice.py ============================================================================== --- python/trunk/Lib/test/test_slice.py (original) +++ python/trunk/Lib/test/test_slice.py Sun Mar 21 02:14:24 2010 @@ -115,7 +115,8 @@ tmp.append((i, j, k)) x = X() - x[1:2] = 42 + with test_support.check_py3k_warnings(): + x[1:2] = 42 self.assertEquals(tmp, [(1, 2, 42)]) def test_pickle(self): Modified: python/trunk/Lib/test/test_socket.py ============================================================================== --- python/trunk/Lib/test/test_socket.py (original) +++ python/trunk/Lib/test/test_socket.py Sun Mar 21 02:14:24 2010 @@ -123,8 +123,9 @@ self.server_ready.wait() self.client_ready.set() self.clientSetUp() - if not callable(test_func): - raise TypeError, "test_func must be a callable function" + with test_support.check_py3k_warnings(): + if not callable(test_func): + raise TypeError("test_func must be a callable function.") try: test_func() except Exception, strerror: @@ -132,7 +133,7 @@ self.clientTearDown() def clientSetUp(self): - raise NotImplementedError, "clientSetUp must be implemented." + raise NotImplementedError("clientSetUp must be implemented.") def clientTearDown(self): self.done.set() @@ -282,8 +283,8 @@ orig = sys.getrefcount(__name__) socket.getnameinfo(__name__,0) except TypeError: - if sys.getrefcount(__name__) <> orig: - self.fail("socket.getnameinfo loses a reference") + self.assertEqual(sys.getrefcount(__name__), orig, + "socket.getnameinfo loses a reference") def testInterpreterCrash(self): # Making sure getnameinfo doesn't crash the interpreter @@ -1234,7 +1235,8 @@ self.assertEqual(msg, MSG) def _testRecvIntoArray(self): - buf = buffer(MSG) + with test_support.check_py3k_warnings(): + buf = buffer(MSG) self.serv_conn.send(buf) def testRecvIntoBytearray(self): @@ -1263,7 +1265,8 @@ self.assertEqual(msg, MSG) def _testRecvFromIntoArray(self): - buf = buffer(MSG) + with test_support.check_py3k_warnings(): + buf = buffer(MSG) self.serv_conn.send(buf) def testRecvFromIntoBytearray(self): Modified: python/trunk/Lib/test/test_sort.py ============================================================================== --- python/trunk/Lib/test/test_sort.py (original) +++ python/trunk/Lib/test/test_sort.py Sun Mar 21 02:14:24 2010 @@ -185,7 +185,7 @@ def test_stability(self): data = [(random.randrange(100), i) for i in xrange(200)] copy = data[:] - data.sort(key=lambda (x,y): x) # sort on the random first field + data.sort(key=lambda x: x[0]) # sort on the random first field copy.sort() # sort using both fields self.assertEqual(data, copy) # should get the same result @@ -207,7 +207,7 @@ # Verify that the wrapper has been removed data = range(-2,2) dup = data[:] - self.assertRaises(ZeroDivisionError, data.sort, None, lambda x: 1/x) + self.assertRaises(ZeroDivisionError, data.sort, None, lambda x: 1 // x) self.assertEqual(data, dup) def test_key_with_mutation(self): @@ -274,17 +274,19 @@ TestBugs, ) - test_support.run_unittest(*test_classes) - - # verify reference counting - if verbose and hasattr(sys, "gettotalrefcount"): - import gc - counts = [None] * 5 - for i in xrange(len(counts)): - test_support.run_unittest(*test_classes) - gc.collect() - counts[i] = sys.gettotalrefcount() - print counts + with test_support.check_py3k_warnings( + ("the cmp argument is not supported", DeprecationWarning)): + test_support.run_unittest(*test_classes) + + # verify reference counting + if verbose and hasattr(sys, "gettotalrefcount"): + import gc + counts = [None] * 5 + for i in xrange(len(counts)): + test_support.run_unittest(*test_classes) + gc.collect() + counts[i] = sys.gettotalrefcount() + print counts if __name__ == "__main__": test_main(verbose=True) Modified: python/trunk/Lib/test/test_ssl.py ============================================================================== --- python/trunk/Lib/test/test_ssl.py (original) +++ python/trunk/Lib/test/test_ssl.py Sun Mar 21 02:14:24 2010 @@ -805,7 +805,7 @@ if test_support.verbose: sys.stdout.write(pprint.pformat(cert) + '\n') sys.stdout.write("Connection cipher is " + str(cipher) + '.\n') - if not cert.has_key('subject'): + if 'subject' not in cert: raise test_support.TestFailed( "No subject field in certificate: %s." % pprint.pformat(cert)) @@ -967,7 +967,8 @@ # now fetch the same data from the HTTPS server url = 'https://127.0.0.1:%d/%s' % ( server.port, os.path.split(CERTFILE)[1]) - f = urllib.urlopen(url) + with test_support.check_py3k_warnings(): + f = urllib.urlopen(url) dlen = f.info().getheader("content-length") if dlen and (int(dlen) > 0): d2 = f.read(int(dlen)) Modified: python/trunk/Lib/test/test_syntax.py ============================================================================== --- python/trunk/Lib/test/test_syntax.py (original) +++ python/trunk/Lib/test/test_syntax.py Sun Mar 21 02:14:24 2010 @@ -552,7 +552,9 @@ def test_main(): test_support.run_unittest(SyntaxTestCase) from test import test_syntax - test_support.run_doctest(test_syntax, verbosity=True) + with test_support.check_py3k_warnings(("backquote not supported", + SyntaxWarning)): + test_support.run_doctest(test_syntax, verbosity=True) if __name__ == "__main__": test_main() Modified: python/trunk/Lib/test/test_types.py ============================================================================== --- python/trunk/Lib/test/test_types.py (original) +++ python/trunk/Lib/test/test_types.py Sun Mar 21 02:14:24 2010 @@ -1,6 +1,7 @@ # Python test set -- part 6, built-in types -from test.test_support import run_unittest, have_unicode, run_with_locale +from test.test_support import run_unittest, have_unicode, run_with_locale, \ + check_py3k_warnings import unittest import sys import locale @@ -741,7 +742,10 @@ self.assertRaises(ValueError, format, 0, ',' + code) def test_main(): - run_unittest(TypesTests) + with check_py3k_warnings( + ("buffer.. not supported", DeprecationWarning), + ("classic long division", DeprecationWarning)): + run_unittest(TypesTests) if __name__ == '__main__': test_main() Modified: python/trunk/Lib/test/test_undocumented_details.py ============================================================================== --- python/trunk/Lib/test/test_undocumented_details.py (original) +++ python/trunk/Lib/test/test_undocumented_details.py Sun Mar 21 02:14:24 2010 @@ -1,4 +1,4 @@ -from test.test_support import run_unittest +from test.test_support import run_unittest, check_py3k_warnings import unittest class TestImplementationComparisons(unittest.TestCase): @@ -32,7 +32,8 @@ self.assertTrue(g_cell != h_cell) def test_main(): - run_unittest(TestImplementationComparisons) + with check_py3k_warnings(): + run_unittest(TestImplementationComparisons) if __name__ == '__main__': test_main() Modified: python/trunk/Lib/test/test_univnewlines2k.py ============================================================================== --- python/trunk/Lib/test/test_univnewlines2k.py (original) +++ python/trunk/Lib/test/test_univnewlines2k.py Sun Mar 21 02:14:24 2010 @@ -80,7 +80,8 @@ def test_execfile(self): namespace = {} - execfile(test_support.TESTFN, namespace) + with test_support.check_py3k_warnings(): + execfile(test_support.TESTFN, namespace) func = namespace['line3'] self.assertEqual(func.func_code.co_firstlineno, 3) self.assertEqual(namespace['line4'], FATX) Modified: python/trunk/Lib/test/test_userdict.py ============================================================================== --- python/trunk/Lib/test/test_userdict.py (original) +++ python/trunk/Lib/test/test_userdict.py Sun Mar 21 02:14:24 2010 @@ -45,7 +45,7 @@ # Test __repr__ self.assertEqual(str(u0), str(d0)) self.assertEqual(repr(u1), repr(d1)) - self.assertEqual(`u2`, `d2`) + self.assertEqual(repr(u2), repr(d2)) # Test __cmp__ and __len__ all = [d0, d1, d2, u, u0, u1, u2, uu, uu0, uu1, uu2] @@ -95,12 +95,13 @@ # Test has_key and "in". for i in u2.keys(): - self.assertTrue(u2.has_key(i)) self.assertIn(i, u2) - self.assertEqual(u1.has_key(i), d1.has_key(i)) self.assertEqual(i in u1, i in d1) - self.assertEqual(u0.has_key(i), d0.has_key(i)) self.assertEqual(i in u0, i in d0) + with test_support.check_py3k_warnings(): + self.assertTrue(u2.has_key(i)) + self.assertEqual(u1.has_key(i), d1.has_key(i)) + self.assertEqual(u0.has_key(i), d0.has_key(i)) # Test update t = UserDict.UserDict() Modified: python/trunk/Lib/test/test_userlist.py ============================================================================== --- python/trunk/Lib/test/test_userlist.py (original) +++ python/trunk/Lib/test/test_userlist.py Sun Mar 21 02:14:24 2010 @@ -53,7 +53,9 @@ self.assertEqual(iter(T((1,2))).next(), "0!!!") def test_main(): - test_support.run_unittest(UserListTest) + with test_support.check_py3k_warnings( + (".+__(get|set|del)slice__ has been removed", DeprecationWarning)): + test_support.run_unittest(UserListTest) if __name__ == "__main__": test_main() Modified: python/trunk/Lib/test/test_weakref.py ============================================================================== --- python/trunk/Lib/test/test_weakref.py (original) +++ python/trunk/Lib/test/test_weakref.py Sun Mar 21 02:14:24 2010 @@ -54,10 +54,10 @@ # Live reference: o = C() wr = weakref.ref(o) - `wr` + repr(wr) # Dead reference: del o - `wr` + repr(wr) def test_basic_callback(self): self.check_basic_callback(C) @@ -169,7 +169,8 @@ p.append(12) self.assertEqual(len(L), 1) self.assertTrue(p, "proxy for non-empty UserList should be true") - p[:] = [2, 3] + with test_support.check_py3k_warnings(): + p[:] = [2, 3] self.assertEqual(len(L), 2) self.assertEqual(len(p), 2) self.assertIn(3, p, "proxy didn't support __contains__() properly") @@ -182,10 +183,11 @@ ## self.assertEqual(repr(L2), repr(p2)) L3 = UserList.UserList(range(10)) p3 = weakref.proxy(L3) - self.assertEqual(L3[:], p3[:]) - self.assertEqual(L3[5:], p3[5:]) - self.assertEqual(L3[:5], p3[:5]) - self.assertEqual(L3[2:5], p3[2:5]) + with test_support.check_py3k_warnings(): + self.assertEqual(L3[:], p3[:]) + self.assertEqual(L3[5:], p3[5:]) + self.assertEqual(L3[:5], p3[:5]) + self.assertEqual(L3[2:5], p3[2:5]) def test_proxy_unicode(self): # See bug 5037 @@ -831,7 +833,7 @@ def test_weak_keys(self): # # This exercises d.copy(), d.items(), d[] = v, d[], del d[], - # len(d), d.has_key(). + # len(d), in d. # dict, objects = self.make_weak_keyed_dict() for o in objects: @@ -853,8 +855,8 @@ "deleting the keys did not clear the dictionary") o = Object(42) dict[o] = "What is the meaning of the universe?" - self.assertTrue(dict.has_key(o)) - self.assertTrue(not dict.has_key(34)) + self.assertIn(o, dict) + self.assertNotIn(34, dict) def test_weak_keyed_iters(self): dict, objects = self.make_weak_keyed_dict() @@ -866,7 +868,6 @@ objects2 = list(objects) for wr in refs: ob = wr() - self.assertTrue(dict.has_key(ob)) self.assertIn(ob, dict) self.assertEqual(ob.arg, dict[ob]) objects2.remove(ob) @@ -877,7 +878,6 @@ self.assertEqual(len(list(dict.iterkeyrefs())), len(objects)) for wr in dict.iterkeyrefs(): ob = wr() - self.assertTrue(dict.has_key(ob)) self.assertIn(ob, dict) self.assertEqual(ob.arg, dict[ob]) objects2.remove(ob) @@ -991,16 +991,16 @@ " -- value parameters must be distinct objects") weakdict = klass() o = weakdict.setdefault(key, value1) - self.assertTrue(o is value1) - self.assertTrue(weakdict.has_key(key)) - self.assertTrue(weakdict.get(key) is value1) - self.assertTrue(weakdict[key] is value1) + self.assertIs(o, value1) + self.assertIn(key, weakdict) + self.assertIs(weakdict.get(key), value1) + self.assertIs(weakdict[key], value1) o = weakdict.setdefault(key, value2) - self.assertTrue(o is value1) - self.assertTrue(weakdict.has_key(key)) - self.assertTrue(weakdict.get(key) is value1) - self.assertTrue(weakdict[key] is value1) + self.assertIs(o, value1) + self.assertIn(key, weakdict) + self.assertIs(weakdict.get(key), value1) + self.assertIs(weakdict[key], value1) def test_weak_valued_dict_setdefault(self): self.check_setdefault(weakref.WeakValueDictionary, @@ -1012,24 +1012,24 @@ def check_update(self, klass, dict): # - # This exercises d.update(), len(d), d.keys(), d.has_key(), + # This exercises d.update(), len(d), d.keys(), in d, # d.get(), d[]. # weakdict = klass() weakdict.update(dict) - self.assertTrue(len(weakdict) == len(dict)) + self.assertEqual(len(weakdict), len(dict)) for k in weakdict.keys(): - self.assertTrue(dict.has_key(k), + self.assertIn(k, dict, "mysterious new key appeared in weak dict") v = dict.get(k) - self.assertTrue(v is weakdict[k]) - self.assertTrue(v is weakdict.get(k)) + self.assertIs(v, weakdict[k]) + self.assertIs(v, weakdict.get(k)) for k in dict.keys(): - self.assertTrue(weakdict.has_key(k), + self.assertIn(k, weakdict, "original key disappeared in weak dict") v = dict[k] - self.assertTrue(v is weakdict[k]) - self.assertTrue(v is weakdict.get(k)) + self.assertIs(v, weakdict[k]) + self.assertIs(v, weakdict.get(k)) def test_weak_valued_dict_update(self): self.check_update(weakref.WeakValueDictionary, Modified: python/trunk/Lib/test/test_zipimport_support.py ============================================================================== --- python/trunk/Lib/test/test_zipimport_support.py (original) +++ python/trunk/Lib/test/test_zipimport_support.py Sun Mar 21 02:14:24 2010 @@ -13,6 +13,7 @@ import inspect import linecache import pdb +import warnings from test.script_helper import (spawn_python, kill_python, run_python, temp_dir, make_script, make_zip_script) @@ -166,8 +167,15 @@ test_zipped_doctest.test_testfile, test_zipped_doctest.test_unittest_reportflags, ] - for obj in known_good_tests: - _run_object_doctest(obj, test_zipped_doctest) + # Needed for test_DocTestParser and test_debug + with test.test_support.check_py3k_warnings( + ("backquote not supported", SyntaxWarning), + ("execfile.. not supported", DeprecationWarning)): + # Ignore all warnings about the use of class Tester in this module. + warnings.filterwarnings("ignore", "class Tester is deprecated", + DeprecationWarning) + for obj in known_good_tests: + _run_object_doctest(obj, test_zipped_doctest) def test_doctest_main_issue4197(self): test_src = textwrap.dedent("""\ From ncoghlan at gmail.com Sun Mar 21 03:03:54 2010 From: ncoghlan at gmail.com (Nick Coghlan) Date: Sun, 21 Mar 2010 12:03:54 +1000 Subject: [Python-checkins] r79132 - in python/trunk: Doc/library/unittest.rst Doc/whatsnew/2.7.rst Lib/test/test_cgi.py Lib/test/test_unittest.py Lib/unittest/case.py Lib/unittest/util.py In-Reply-To: <20100320030034.B9491EA46@mail.python.org> References: <20100320030034.B9491EA46@mail.python.org> Message-ID: <4BA57E8A.1030406@gmail.com> michael.foord wrote: > + Duplicate elements are *not* ignored when comparing *actual* and > + *expected*. It verifies if each element has the same count in both > + sequences. It is the equivalent of ``assertEqual(sorted(expected), > + sorted(actual))`` but it works with sequences of unhashable objects as > + well. With the change in definition, you don't need the second half of that last sentence anymore (with sorted() instead of set(), hashing doesn't matter). Now, there may be a similar caveat that orderability doesn't matter, but I didn't read the code closely enough to check. Cheers, Nick. -- Nick Coghlan | ncoghlan at gmail.com | Brisbane, Australia --------------------------------------------------------------- From python-checkins at python.org Sun Mar 21 08:16:44 2010 From: python-checkins at python.org (ezio.melotti) Date: Sun, 21 Mar 2010 08:16:44 +0100 (CET) Subject: [Python-checkins] r79166 - in python/branches/py3k/Doc: library/argparse.rst library/shutil.rst library/sqlite3.rst library/sysconfig.rst library/test.rst library/threading.rst library/xml.etree.elementtree.rst library/zipfile.rst reference/expressions.rst Message-ID: <20100321071644.135DAFA7C@mail.python.org> Author: ezio.melotti Date: Sun Mar 21 08:16:43 2010 New Revision: 79166 Log: Update versionadded/changed. Modified: python/branches/py3k/Doc/library/argparse.rst python/branches/py3k/Doc/library/shutil.rst python/branches/py3k/Doc/library/sqlite3.rst python/branches/py3k/Doc/library/sysconfig.rst python/branches/py3k/Doc/library/test.rst python/branches/py3k/Doc/library/threading.rst python/branches/py3k/Doc/library/xml.etree.elementtree.rst python/branches/py3k/Doc/library/zipfile.rst python/branches/py3k/Doc/reference/expressions.rst Modified: python/branches/py3k/Doc/library/argparse.rst ============================================================================== --- python/branches/py3k/Doc/library/argparse.rst (original) +++ python/branches/py3k/Doc/library/argparse.rst Sun Mar 21 08:16:43 2010 @@ -4,7 +4,7 @@ .. module:: argparse :synopsis: Command-line option and argument parsing library. .. moduleauthor:: Steven Bethard -.. versionadded:: 2.7 +.. versionadded:: 3.2 .. sectionauthor:: Steven Bethard Modified: python/branches/py3k/Doc/library/shutil.rst ============================================================================== --- python/branches/py3k/Doc/library/shutil.rst (original) +++ python/branches/py3k/Doc/library/shutil.rst Sun Mar 21 08:16:43 2010 @@ -236,7 +236,7 @@ *owner* and *group* are used when creating a tar archive. By default, uses the current owner and group. - .. versionadded:: 2.7 + .. versionadded:: 3.2 .. function:: get_archive_formats() @@ -255,7 +255,7 @@ You can register new formats or provide your own archiver for any existing formats, by using :func:`register_archive_format`. - .. versionadded:: 2.7 + .. versionadded:: 3.2 .. function:: register_archive_format(name, function, [extra_args, [description]]) @@ -269,14 +269,14 @@ *description* is used by :func:`get_archive_formats` which returns the list of archivers. Defaults to an empty list. - .. versionadded:: 2.7 + .. versionadded:: 3.2 .. function:: unregister_archive_format(name) Remove the archive format *name* from the list of supported formats. - .. versionadded:: 2.7 + .. versionadded:: 3.2 Archiving example Modified: python/branches/py3k/Doc/library/sqlite3.rst ============================================================================== --- python/branches/py3k/Doc/library/sqlite3.rst (original) +++ python/branches/py3k/Doc/library/sqlite3.rst Sun Mar 21 08:16:43 2010 @@ -367,7 +367,7 @@ .. method:: Connection.enable_load_extension(enabled) - .. versionadded:: 2.7 + .. versionadded:: 3.2 This routine allows/disallows the SQLite engine to load SQLite extensions from shared libraries. SQLite extensions can define new functions, @@ -378,7 +378,7 @@ .. method:: Connection.load_extension(path) - .. versionadded:: 2.7 + .. versionadded:: 3.2 This routine loads a SQLite extension from a shared library. You have to enable extension loading with ``enable_load_extension`` before you can use Modified: python/branches/py3k/Doc/library/sysconfig.rst ============================================================================== --- python/branches/py3k/Doc/library/sysconfig.rst (original) +++ python/branches/py3k/Doc/library/sysconfig.rst Sun Mar 21 08:16:43 2010 @@ -5,7 +5,7 @@ :synopsis: Python's configuration information .. moduleauthor:: Tarek Ziade .. sectionauthor:: Tarek Ziade -.. versionadded:: 2.7 +.. versionadded:: 3.2 .. index:: single: configuration information Modified: python/branches/py3k/Doc/library/test.rst ============================================================================== --- python/branches/py3k/Doc/library/test.rst (original) +++ python/branches/py3k/Doc/library/test.rst Sun Mar 21 08:16:43 2010 @@ -324,7 +324,7 @@ w.reset() assert len(w.warnings) == 0 - .. versionchanged:: 2.7 + .. versionchanged:: 3.2 New optional attributes ``*filters`` and ``quiet``. Modified: python/branches/py3k/Doc/library/threading.rst ============================================================================== --- python/branches/py3k/Doc/library/threading.rst (original) +++ python/branches/py3k/Doc/library/threading.rst Sun Mar 21 08:16:43 2010 @@ -647,9 +647,6 @@ Return true if and only if the internal flag is true. - .. versionchanged:: 2.6 - The ``is_set()`` syntax is new. - .. method:: set() Set the internal flag to true. All threads waiting for it to become true Modified: python/branches/py3k/Doc/library/xml.etree.elementtree.rst ============================================================================== --- python/branches/py3k/Doc/library/xml.etree.elementtree.rst (original) +++ python/branches/py3k/Doc/library/xml.etree.elementtree.rst Sun Mar 21 08:16:43 2010 @@ -35,7 +35,7 @@ docs. Fredrik Lundh's page is also the location of the development version of the xml.etree.ElementTree. -.. versionchanged:: 2.7 +.. versionchanged:: 3.2 The ElementTree API is updated to 1.3. For more information, see `Introducing ElementTree 1.3 `_. @@ -80,7 +80,7 @@ optional parser instance. If not given, the standard :class:`XMLParser` parser is used. Returns an :class:`Element` instance. - .. versionadded:: 2.7 + .. versionadded:: 3.2 .. function:: iselement(element) @@ -133,7 +133,7 @@ attributes in this namespace will be serialized with the given prefix, if at all possible. - .. versionadded:: 2.7 + .. versionadded:: 3.2 .. function:: SubElement(parent, tag, attrib={}, **extra) @@ -167,7 +167,7 @@ any specific sequence, except that ``"".join(tostringlist(element)) == tostring(element)``. - .. versionadded:: 2.7 + .. versionadded:: 3.2 .. function:: XML(text, parser=None) @@ -282,7 +282,7 @@ Appends *subelements* from a sequence object with zero or more elements. Raises :exc:`AssertionError` if a subelement is not a valid object. - .. versionadded:: 2.7 + .. versionadded:: 3.2 .. method:: find(match) @@ -336,7 +336,7 @@ Finds all matching subelements, by tag name or path. Returns an iterable yielding all matching elements in document order. - .. versionadded:: 2.7 + .. versionadded:: 3.2 .. method:: itertext() @@ -344,7 +344,7 @@ Creates a text iterator. The iterator loops over this element and all subelements, in document order, and returns all inner text. - .. versionadded:: 2.7 + .. versionadded:: 3.2 .. method:: makeelement(tag, attrib) @@ -446,7 +446,7 @@ getroot().iterfind(match). Returns an iterable yielding all matching elements in document order. - .. versionadded:: 2.7 + .. versionadded:: 3.2 .. method:: parse(source, parser=None) @@ -559,7 +559,7 @@ the public identifier. *system* is the system identifier. This method does not exist on the default :class:`TreeBuilder` class. - .. versionadded:: 2.7 + .. versionadded:: 3.2 .. _elementtree-xmlparser-objects: Modified: python/branches/py3k/Doc/library/zipfile.rst ============================================================================== --- python/branches/py3k/Doc/library/zipfile.rst (original) +++ python/branches/py3k/Doc/library/zipfile.rst Sun Mar 21 08:16:43 2010 @@ -288,7 +288,7 @@ member of the given :class:`ZipInfo` instance. By default, the :class:`ZipInfo` constructor sets this member to :const:`ZIP_STORED`. - .. versionchanged:: 2.7 + .. versionchanged:: 3.2 The *compression_type* argument. The following data attributes are also available: Modified: python/branches/py3k/Doc/reference/expressions.rst ============================================================================== --- python/branches/py3k/Doc/reference/expressions.rst (original) +++ python/branches/py3k/Doc/reference/expressions.rst Sun Mar 21 08:16:43 2010 @@ -1152,8 +1152,6 @@ Conditional Expressions ======================= -.. versionadded:: 2.5 - .. index:: pair: conditional; expression pair: ternary; operator From python-checkins at python.org Sun Mar 21 08:31:50 2010 From: python-checkins at python.org (ezio.melotti) Date: Sun, 21 Mar 2010 08:31:50 +0100 (CET) Subject: [Python-checkins] r79167 - in python/branches/release31-maint: Doc/library/unittest.rst Message-ID: <20100321073150.20142E436@mail.python.org> Author: ezio.melotti Date: Sun Mar 21 08:31:49 2010 New Revision: 79167 Log: Merged revisions 77888 via svnmerge from svn+ssh://pythondev at svn.python.org/python/branches/py3k ........ r77888 | georg.brandl | 2010-01-31 20:53:23 +0200 (Sun, 31 Jan 2010) | 1 line Fix versionadded:: 2.x merges. ........ Modified: python/branches/release31-maint/ (props changed) python/branches/release31-maint/Doc/library/unittest.rst Modified: python/branches/release31-maint/Doc/library/unittest.rst ============================================================================== --- python/branches/release31-maint/Doc/library/unittest.rst (original) +++ python/branches/release31-maint/Doc/library/unittest.rst Sun Mar 21 08:31:49 2010 @@ -993,7 +993,7 @@ If :meth:`setUp` fails, meaning that :meth:`tearDown` is not called, then any cleanup functions added will still be called. - .. versionadded:: 2.7 + .. versionadded:: 3.2 .. method:: doCleanups() @@ -1009,7 +1009,7 @@ :meth:`doCleanups` pops methods off the stack of cleanup functions one at a time, so it can be called at any time. - .. versionadded:: 2.7 + .. versionadded:: 3.2 .. class:: FunctionTestCase(testFunc, setUp=None, tearDown=None, description=None) @@ -1088,7 +1088,7 @@ (for example when counting tests or comparing for equality) so the tests returned must be the same for repeated iterations. - .. versionchanged:: 2.7 + .. versionchanged:: 3.2 In earlier versions the :class:`TestSuite` accessed tests directly rather than through iteration, so overriding :meth:`__iter__` wasn't sufficient for providing tests. @@ -1302,14 +1302,14 @@ Called once before any tests are executed. - .. versionadded:: 2.7 + .. versionadded:: 3.2 .. method:: stopTestRun(test) Called once before any tests are executed. - .. versionadded:: 2.7 + .. versionadded:: 3.2 .. method:: addError(test, err) @@ -1411,5 +1411,5 @@ Calling ``main`` actually returns an instance of the ``TestProgram`` class. This stores the result of the tests run as the ``result`` attribute. - .. versionchanged:: 2.7 + .. versionchanged:: 3.2 The ``exit`` parameter was added. From python-checkins at python.org Sun Mar 21 10:01:27 2010 From: python-checkins at python.org (georg.brandl) Date: Sun, 21 Mar 2010 10:01:27 +0100 (CET) Subject: [Python-checkins] r79168 - in python/trunk/Doc/library: functions.rst pdb.rst stdtypes.rst Message-ID: <20100321090127.A3326FA48@mail.python.org> Author: georg.brandl Date: Sun Mar 21 10:01:27 2010 New Revision: 79168 Log: Fix some issues found by Jacques Ducasse on the docs list. Modified: python/trunk/Doc/library/functions.rst python/trunk/Doc/library/pdb.rst python/trunk/Doc/library/stdtypes.rst Modified: python/trunk/Doc/library/functions.rst ============================================================================== --- python/trunk/Doc/library/functions.rst (original) +++ python/trunk/Doc/library/functions.rst Sun Mar 21 10:01:27 2010 @@ -339,7 +339,7 @@ This function can also be used to execute arbitrary code objects (such as those created by :func:`compile`). In this case pass a code object instead of a string. If the code object has been compiled with ``'exec'`` as the - *kind* argument, :func:`eval`\'s return value will be ``None``. + *mode* argument, :func:`eval`\'s return value will be ``None``. Hints: dynamic execution of statements is supported by the :keyword:`exec` statement. Execution of statements from a file is supported by the @@ -1145,7 +1145,8 @@ value is ``None``. *key* specifies a function of one argument that is used to extract a comparison - key from each list element: ``key=str.lower``. The default value is ``None``. + key from each list element: ``key=str.lower``. The default value is ``None`` + (compare the elements directly). *reverse* is a boolean value. If set to ``True``, then the list elements are sorted as if each comparison were reversed. Modified: python/trunk/Doc/library/pdb.rst ============================================================================== --- python/trunk/Doc/library/pdb.rst (original) +++ python/trunk/Doc/library/pdb.rst Sun Mar 21 10:01:27 2010 @@ -22,7 +22,7 @@ The debugger is extensible --- it is actually defined as the class :class:`Pdb`. This is currently undocumented but easily understood by reading the source. The -extension interface uses the modules :mod:`bdb` (undocumented) and :mod:`cmd`. +extension interface uses the modules :mod:`bdb` and :mod:`cmd`. The debugger's prompt is ``(Pdb)``. Typical usage to run a program under control of the debugger is:: Modified: python/trunk/Doc/library/stdtypes.rst ============================================================================== --- python/trunk/Doc/library/stdtypes.rst (original) +++ python/trunk/Doc/library/stdtypes.rst Sun Mar 21 10:01:27 2010 @@ -918,12 +918,12 @@ .. method:: str.format(*args, **kwargs) - Perform a string formatting operation. The *format_string* argument can - contain literal text or replacement fields delimited by braces ``{}``. Each - replacement field contains either the numeric index of a positional argument, - or the name of a keyword argument. Returns a copy of *format_string* where - each replacement field is replaced with the string value of the corresponding - argument. + Perform a string formatting operation. The string on which this method is + called can contain literal text or replacement fields delimited by braces + ``{}``. Each replacement field contains either the numeric index of a + positional argument, or the name of a keyword argument. Returns a copy of + the string where each replacement field is replaced with the string value of + the corresponding argument. >>> "The sum of 1 + 2 is {0}".format(1+2) 'The sum of 1 + 2 is 3' From python-checkins at python.org Sun Mar 21 10:02:03 2010 From: python-checkins at python.org (georg.brandl) Date: Sun, 21 Mar 2010 10:02:03 +0100 (CET) Subject: [Python-checkins] r79169 - in python/trunk/Doc/library: index.rst objects.rst Message-ID: <20100321090203.13056FA48@mail.python.org> Author: georg.brandl Date: Sun Mar 21 10:02:01 2010 New Revision: 79169 Log: Remove the "built-in objects" file. It only contained two paragraphs of which only one contained useful information, which belongs in the ref manual however. Removed: python/trunk/Doc/library/objects.rst Modified: python/trunk/Doc/library/index.rst Modified: python/trunk/Doc/library/index.rst ============================================================================== --- python/trunk/Doc/library/index.rst (original) +++ python/trunk/Doc/library/index.rst Sun Mar 21 10:02:01 2010 @@ -43,7 +43,6 @@ intro.rst functions.rst constants.rst - objects.rst stdtypes.rst exceptions.rst Deleted: python/trunk/Doc/library/objects.rst ============================================================================== --- python/trunk/Doc/library/objects.rst Sun Mar 21 10:02:01 2010 +++ (empty file) @@ -1,27 +0,0 @@ - -.. _builtin: - -**************** -Built-in Objects -**************** - -.. index:: - pair: built-in; types - pair: built-in; exceptions - pair: built-in; functions - pair: built-in; constants - single: symbol table - -Names for built-in exceptions and functions and a number of constants are found -in a separate symbol table. This table is searched last when the interpreter -looks up the meaning of a name, so local and global user-defined names can -override built-in names. Built-in types are described together here for easy -reference. - -The tables in this chapter document the priorities of operators by listing them -in order of ascending priority (within a table) and grouping operators that have -the same priority in the same box. Binary operators of the same priority group -from left to right. (Unary operators group from right to left, but there you -have no real choice.) See :ref:`operator-summary` for the complete picture on -operator priorities. - From python-checkins at python.org Sun Mar 21 10:02:59 2010 From: python-checkins at python.org (georg.brandl) Date: Sun, 21 Mar 2010 10:02:59 +0100 (CET) Subject: [Python-checkins] r79170 - in python/branches/py3k/Doc: library/sys.rst reference/simple_stmts.rst Message-ID: <20100321090259.826BCFA48@mail.python.org> Author: georg.brandl Date: Sun Mar 21 10:02:59 2010 New Revision: 79170 Log: Fix some issues found by Jacques Ducasse on the docs list. Modified: python/branches/py3k/Doc/library/sys.rst python/branches/py3k/Doc/reference/simple_stmts.rst Modified: python/branches/py3k/Doc/library/sys.rst ============================================================================== --- python/branches/py3k/Doc/library/sys.rst (original) +++ python/branches/py3k/Doc/library/sys.rst Sun Mar 21 10:02:59 2010 @@ -127,13 +127,12 @@ .. index:: object: traceback - If no exception is being handled anywhere on the stack, a tuple containing three - ``None`` values is returned. Otherwise, the values returned are ``(type, value, - traceback)``. Their meaning is: *type* gets the exception type of the exception - being handled (a class object); *value* gets the exception parameter (its - :dfn:`associated value` or the second argument to :keyword:`raise`, which is - always a class instance if the exception type is a class object); *traceback* - gets a traceback object (see the Reference Manual) which encapsulates the call + If no exception is being handled anywhere on the stack, a tuple containing + three ``None`` values is returned. Otherwise, the values returned are + ``(type, value, traceback)``. Their meaning is: *type* gets the type of the + exception being handled (a subclass of :exc:`BaseException`); *value* gets + the exception instance (an instance of the exception type); *traceback* gets + a traceback object (see the Reference Manual) which encapsulates the call stack at the point where the exception originally occurred. .. warning:: @@ -508,9 +507,7 @@ more information.) The meaning of the variables is the same as that of the return values from - :func:`exc_info` above. (Since there is only one interactive thread, - thread-safety is not a concern for these variables, unlike for ``exc_type`` - etc.) + :func:`exc_info` above. .. data:: maxsize Modified: python/branches/py3k/Doc/reference/simple_stmts.rst ============================================================================== --- python/branches/py3k/Doc/reference/simple_stmts.rst (original) +++ python/branches/py3k/Doc/reference/simple_stmts.rst Sun Mar 21 10:02:59 2010 @@ -146,16 +146,12 @@ * Otherwise: the name is bound to the object in the global namespace or the outer namespace determined by :keyword:`nonlocal`, respectively. + .. index:: single: destructor + The name is rebound if it was already bound. This may cause the reference count for the object previously bound to the name to reach zero, causing the object to be deallocated and its destructor (if it has one) to be called. - .. index:: single: destructor - - The name is rebound if it was already bound. This may cause the reference count - for the object previously bound to the name to reach zero, causing the object to - be deallocated and its destructor (if it has one) to be called. - * If the target is a target list enclosed in parentheses or in square brackets: The object must be an iterable with the same number of items as there are targets in the target list, and its items are assigned, from left to right, From python-checkins at python.org Sun Mar 21 10:04:24 2010 From: python-checkins at python.org (georg.brandl) Date: Sun, 21 Mar 2010 10:04:24 +0100 (CET) Subject: [Python-checkins] r79171 - in python/branches/py3k: Doc/library/functions.rst Doc/library/index.rst Doc/library/objects.rst Doc/library/pdb.rst Doc/library/stdtypes.rst Message-ID: <20100321090424.699BEFBB9@mail.python.org> Author: georg.brandl Date: Sun Mar 21 10:04:24 2010 New Revision: 79171 Log: Merged revisions 79168-79169 via svnmerge from svn+ssh://pythondev at svn.python.org/python/trunk ........ r79168 | georg.brandl | 2010-03-21 10:01:27 +0100 (So, 21 M?r 2010) | 1 line Fix some issues found by Jacques Ducasse on the docs list. ........ r79169 | georg.brandl | 2010-03-21 10:02:01 +0100 (So, 21 M?r 2010) | 1 line Remove the "built-in objects" file. It only contained two paragraphs of which only one contained useful information, which belongs in the ref manual however. ........ Removed: python/branches/py3k/Doc/library/objects.rst Modified: python/branches/py3k/ (props changed) python/branches/py3k/Doc/library/functions.rst python/branches/py3k/Doc/library/index.rst python/branches/py3k/Doc/library/pdb.rst python/branches/py3k/Doc/library/stdtypes.rst Modified: python/branches/py3k/Doc/library/functions.rst ============================================================================== --- python/branches/py3k/Doc/library/functions.rst (original) +++ python/branches/py3k/Doc/library/functions.rst Sun Mar 21 10:04:24 2010 @@ -328,7 +328,7 @@ This function can also be used to execute arbitrary code objects (such as those created by :func:`compile`). In this case pass a code object instead of a string. If the code object has been compiled with ``'exec'`` as the - *kind* argument, :func:`eval`\'s return value will be ``None``. + *mode* argument, :func:`eval`\'s return value will be ``None``. Hints: dynamic execution of statements is supported by the :func:`exec` function. The :func:`globals` and :func:`locals` functions @@ -1008,7 +1008,8 @@ Has two optional arguments which must be specified as keyword arguments. *key* specifies a function of one argument that is used to extract a comparison - key from each list element: ``key=str.lower``. The default value is ``None``. + key from each list element: ``key=str.lower``. The default value is ``None`` + (compare the elements directly). *reverse* is a boolean value. If set to ``True``, then the list elements are sorted as if each comparison were reversed. Modified: python/branches/py3k/Doc/library/index.rst ============================================================================== --- python/branches/py3k/Doc/library/index.rst (original) +++ python/branches/py3k/Doc/library/index.rst Sun Mar 21 10:04:24 2010 @@ -43,7 +43,6 @@ intro.rst functions.rst constants.rst - objects.rst stdtypes.rst exceptions.rst Deleted: python/branches/py3k/Doc/library/objects.rst ============================================================================== --- python/branches/py3k/Doc/library/objects.rst Sun Mar 21 10:04:24 2010 +++ (empty file) @@ -1,27 +0,0 @@ - -.. _builtin: - -**************** -Built-in Objects -**************** - -.. index:: - pair: built-in; types - pair: built-in; exceptions - pair: built-in; functions - pair: built-in; constants - single: symbol table - -Names for built-in exceptions and functions and a number of constants are found -in a separate symbol table. This table is searched last when the interpreter -looks up the meaning of a name, so local and global user-defined names can -override built-in names. Built-in types are described together here for easy -reference. - -The tables in this chapter document the priorities of operators by listing them -in order of ascending priority (within a table) and grouping operators that have -the same priority in the same box. Binary operators of the same priority group -from left to right. (Unary operators group from right to left, but there you -have no real choice.) See :ref:`operator-summary` for the complete picture on -operator priorities. - Modified: python/branches/py3k/Doc/library/pdb.rst ============================================================================== --- python/branches/py3k/Doc/library/pdb.rst (original) +++ python/branches/py3k/Doc/library/pdb.rst Sun Mar 21 10:04:24 2010 @@ -22,7 +22,7 @@ The debugger is extensible --- it is actually defined as the class :class:`Pdb`. This is currently undocumented but easily understood by reading the source. The -extension interface uses the modules :mod:`bdb` (undocumented) and :mod:`cmd`. +extension interface uses the modules :mod:`bdb` and :mod:`cmd`. The debugger's prompt is ``(Pdb)``. Typical usage to run a program under control of the debugger is:: Modified: python/branches/py3k/Doc/library/stdtypes.rst ============================================================================== --- python/branches/py3k/Doc/library/stdtypes.rst (original) +++ python/branches/py3k/Doc/library/stdtypes.rst Sun Mar 21 10:04:24 2010 @@ -920,12 +920,12 @@ .. method:: str.format(*args, **kwargs) - Perform a string formatting operation. The *format_string* argument can - contain literal text or replacement fields delimited by braces ``{}``. Each - replacement field contains either the numeric index of a positional argument, - or the name of a keyword argument. Returns a copy of *format_string* where - each replacement field is replaced with the string value of the corresponding - argument. + Perform a string formatting operation. The string on which this method is + called can contain literal text or replacement fields delimited by braces + ``{}``. Each replacement field contains either the numeric index of a + positional argument, or the name of a keyword argument. Returns a copy of + the string where each replacement field is replaced with the string value of + the corresponding argument. >>> "The sum of 1 + 2 is {0}".format(1+2) 'The sum of 1 + 2 is 3' From python-checkins at python.org Sun Mar 21 10:08:00 2010 From: python-checkins at python.org (georg.brandl) Date: Sun, 21 Mar 2010 10:08:00 +0100 (CET) Subject: [Python-checkins] r79172 - python/trunk/Doc/library/stdtypes.rst Message-ID: <20100321090800.6DDC1F86B@mail.python.org> Author: georg.brandl Date: Sun Mar 21 10:08:00 2010 New Revision: 79172 Log: Add a paragraph about set displays. Modified: python/trunk/Doc/library/stdtypes.rst Modified: python/trunk/Doc/library/stdtypes.rst ============================================================================== --- python/trunk/Doc/library/stdtypes.rst (original) +++ python/trunk/Doc/library/stdtypes.rst Sun Mar 21 10:08:00 2010 @@ -1672,6 +1672,10 @@ altered after it is created; it can therefore be used as a dictionary key or as an element of another set. +Non-empty sets (not frozensets) can be created by placing a comma-separated list +of elements pairs within braces, for example: ``{'jack', 'sjoerd'}``, in +addition to the :class:`set` constructor. + The constructors for both classes work the same: .. class:: set([iterable]) From python-checkins at python.org Sun Mar 21 10:09:38 2010 From: python-checkins at python.org (georg.brandl) Date: Sun, 21 Mar 2010 10:09:38 +0100 (CET) Subject: [Python-checkins] r79173 - python/trunk/Doc/library/gzip.rst Message-ID: <20100321090938.9D96CFB9F@mail.python.org> Author: georg.brandl Date: Sun Mar 21 10:09:38 2010 New Revision: 79173 Log: Document that GzipFile supports iteration. Modified: python/trunk/Doc/library/gzip.rst Modified: python/trunk/Doc/library/gzip.rst ============================================================================== --- python/trunk/Doc/library/gzip.rst (original) +++ python/trunk/Doc/library/gzip.rst Sun Mar 21 10:09:38 2010 @@ -67,7 +67,7 @@ writing as *fileobj*, and retrieve the resulting memory buffer using the :class:`StringIO` object's :meth:`getvalue` method. - :class:`GzipFile` supports the :keyword:`with` statement. + :class:`GzipFile` supports iteration and the :keyword:`with` statement. .. versionchanged:: 2.7 Support for the :keyword:`with` statement was added. From python-checkins at python.org Sun Mar 21 10:10:23 2010 From: python-checkins at python.org (georg.brandl) Date: Sun, 21 Mar 2010 10:10:23 +0100 (CET) Subject: [Python-checkins] r79174 - python/branches/release26-maint Message-ID: <20100321091023.711E5F8CA@mail.python.org> Author: georg.brandl Date: Sun Mar 21 10:10:23 2010 New Revision: 79174 Log: Blocked revisions 79172 via svnmerge ........ r79172 | georg.brandl | 2010-03-21 10:08:00 +0100 (So, 21 M?r 2010) | 1 line Add a paragraph about set displays. ........ Modified: python/branches/release26-maint/ (props changed) From python-checkins at python.org Sun Mar 21 10:10:32 2010 From: python-checkins at python.org (georg.brandl) Date: Sun, 21 Mar 2010 10:10:32 +0100 (CET) Subject: [Python-checkins] r79175 - in python/branches/py3k: Doc/library/stdtypes.rst Message-ID: <20100321091032.3CAA2FBCC@mail.python.org> Author: georg.brandl Date: Sun Mar 21 10:10:32 2010 New Revision: 79175 Log: Merged revisions 79172 via svnmerge from svn+ssh://pythondev at svn.python.org/python/trunk ........ r79172 | georg.brandl | 2010-03-21 10:08:00 +0100 (So, 21 M?r 2010) | 1 line Add a paragraph about set displays. ........ Modified: python/branches/py3k/ (props changed) python/branches/py3k/Doc/library/stdtypes.rst Modified: python/branches/py3k/Doc/library/stdtypes.rst ============================================================================== --- python/branches/py3k/Doc/library/stdtypes.rst (original) +++ python/branches/py3k/Doc/library/stdtypes.rst Sun Mar 21 10:10:32 2010 @@ -1704,6 +1704,10 @@ altered after it is created; it can therefore be used as a dictionary key or as an element of another set. +Non-empty sets (not frozensets) can be created by placing a comma-separated list +of elements pairs within braces, for example: ``{'jack', 'sjoerd'}``, in +addition to the :class:`set` constructor. + The constructors for both classes work the same: .. class:: set([iterable]) From python-checkins at python.org Sun Mar 21 10:17:41 2010 From: python-checkins at python.org (georg.brandl) Date: Sun, 21 Mar 2010 10:17:41 +0100 (CET) Subject: [Python-checkins] r79176 - python/trunk/Doc/tutorial/introduction.rst Message-ID: <20100321091741.8339AF8AD@mail.python.org> Author: georg.brandl Date: Sun Mar 21 10:17:41 2010 New Revision: 79176 Log: Introduce copy by slicing, used in later chapters. Modified: python/trunk/Doc/tutorial/introduction.rst Modified: python/trunk/Doc/tutorial/introduction.rst ============================================================================== --- python/trunk/Doc/tutorial/introduction.rst (original) +++ python/trunk/Doc/tutorial/introduction.rst Sun Mar 21 10:17:41 2010 @@ -523,6 +523,12 @@ >>> 3*a[:3] + ['Boo!'] ['spam', 'eggs', 100, 'spam', 'eggs', 100, 'spam', 'eggs', 100, 'Boo!'] +All slice operations return a new list containing the requested elements. This +means that the following slice returns a shallow copy of the list *a*:: + + >>> a[:] + ['spam', 'eggs', 100, 1234] + Unlike strings, which are *immutable*, it is possible to change individual elements of a list:: From python-checkins at python.org Sun Mar 21 10:25:54 2010 From: python-checkins at python.org (georg.brandl) Date: Sun, 21 Mar 2010 10:25:54 +0100 (CET) Subject: [Python-checkins] r79177 - python/branches/py3k/Doc/library/doctest.rst Message-ID: <20100321092554.4AC7DFA26@mail.python.org> Author: georg.brandl Date: Sun Mar 21 10:25:54 2010 New Revision: 79177 Log: Need to use list(range()) to get a list. Modified: python/branches/py3k/Doc/library/doctest.rst Modified: python/branches/py3k/Doc/library/doctest.rst ============================================================================== --- python/branches/py3k/Doc/library/doctest.rst (original) +++ python/branches/py3k/Doc/library/doctest.rst Sun Mar 21 10:25:54 2010 @@ -625,7 +625,7 @@ For example, this test passes:: - >>> print(range(20)) #doctest: +NORMALIZE_WHITESPACE + >>> print(list(range(20))) #doctest: +NORMALIZE_WHITESPACE [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19] @@ -634,28 +634,28 @@ is on a single line. This test also passes, and also requires a directive to do so:: - >>> print(range(20)) # doctest: +ELLIPSIS + >>> print(list(range(20))) # doctest: +ELLIPSIS [0, 1, ..., 18, 19] Multiple directives can be used on a single physical line, separated by commas:: - >>> print(range(20)) # doctest: +ELLIPSIS, +NORMALIZE_WHITESPACE + >>> print(list(range(20))) # doctest: +ELLIPSIS, +NORMALIZE_WHITESPACE [0, 1, ..., 18, 19] If multiple directive comments are used for a single example, then they are combined:: - >>> print(range(20)) # doctest: +ELLIPSIS - ... # doctest: +NORMALIZE_WHITESPACE + >>> print(list(range(20))) # doctest: +ELLIPSIS + ... # doctest: +NORMALIZE_WHITESPACE [0, 1, ..., 18, 19] As the previous example shows, you can add ``...`` lines to your example containing only directives. This can be useful when an example is too long for a directive to comfortably fit on the same line:: - >>> print(range(5) + range(10,20) + range(30,40) + range(50,60)) + >>> print(list(range(5)) + list(range(10, 20)) + list(range(30, 40))) ... # doctest: +ELLIPSIS - [0, ..., 4, 10, ..., 19, 30, ..., 39, 50, ..., 59] + [0, ..., 4, 10, ..., 19, 30, ..., 39] Note that since all options are disabled by default, and directives apply only to the example they appear in, enabling options (via ``+`` in a directive) is From python-checkins at python.org Sun Mar 21 10:28:16 2010 From: python-checkins at python.org (georg.brandl) Date: Sun, 21 Mar 2010 10:28:16 +0100 (CET) Subject: [Python-checkins] r79178 - python/trunk/Doc/library/subprocess.rst Message-ID: <20100321092816.A27F7FA26@mail.python.org> Author: georg.brandl Date: Sun Mar 21 10:28:16 2010 New Revision: 79178 Log: Clarify that for shell=True, the shell PID will be the child PID. Modified: python/trunk/Doc/library/subprocess.rst Modified: python/trunk/Doc/library/subprocess.rst ============================================================================== --- python/trunk/Doc/library/subprocess.rst (original) +++ python/trunk/Doc/library/subprocess.rst Sun Mar 21 10:28:16 2010 @@ -376,6 +376,9 @@ The process ID of the child process. + Note that if you set the *shell* argument to ``True``, this is the process ID + of the spawned shell. + .. attribute:: Popen.returncode From python-checkins at python.org Sun Mar 21 10:37:54 2010 From: python-checkins at python.org (georg.brandl) Date: Sun, 21 Mar 2010 10:37:54 +0100 (CET) Subject: [Python-checkins] r79179 - python/trunk/Doc/tutorial/datastructures.rst Message-ID: <20100321093754.5CDE8FA2D@mail.python.org> Author: georg.brandl Date: Sun Mar 21 10:37:54 2010 New Revision: 79179 Log: Mention inefficiency of lists as queues, add link to collections.deque discussion. Modified: python/trunk/Doc/tutorial/datastructures.rst Modified: python/trunk/Doc/tutorial/datastructures.rst ============================================================================== --- python/trunk/Doc/tutorial/datastructures.rst (original) +++ python/trunk/Doc/tutorial/datastructures.rst Sun Mar 21 10:37:54 2010 @@ -154,6 +154,11 @@ >>> queue ['Michael', 'Terry', 'Graham'] +However, since lists are implemented as an array of elements, they are not the +optimal data structure to use as a queue (the ``pop(0)`` needs to move all +following elements). See :ref:`tut-list-tools` for a look at +:class:`collections.deque`, which is designed to work efficiently as a queue. + .. _tut-functional: From python-checkins at python.org Sun Mar 21 10:50:49 2010 From: python-checkins at python.org (georg.brandl) Date: Sun, 21 Mar 2010 10:50:49 +0100 (CET) Subject: [Python-checkins] r79180 - in python/branches/py3k: Doc/library/subprocess.rst Message-ID: <20100321095049.7FD7FFA0E@mail.python.org> Author: georg.brandl Date: Sun Mar 21 10:50:49 2010 New Revision: 79180 Log: Merged revisions 79178 via svnmerge from svn+ssh://pythondev at svn.python.org/python/trunk ........ r79178 | georg.brandl | 2010-03-21 10:28:16 +0100 (So, 21 M?r 2010) | 1 line Clarify that for shell=True, the shell PID will be the child PID. ........ Modified: python/branches/py3k/ (props changed) python/branches/py3k/Doc/library/subprocess.rst Modified: python/branches/py3k/Doc/library/subprocess.rst ============================================================================== --- python/branches/py3k/Doc/library/subprocess.rst (original) +++ python/branches/py3k/Doc/library/subprocess.rst Sun Mar 21 10:50:49 2010 @@ -423,6 +423,9 @@ The process ID of the child process. + Note that if you set the *shell* argument to ``True``, this is the process ID + of the spawned shell. + .. attribute:: Popen.returncode From python-checkins at python.org Sun Mar 21 10:51:16 2010 From: python-checkins at python.org (georg.brandl) Date: Sun, 21 Mar 2010 10:51:16 +0100 (CET) Subject: [Python-checkins] r79181 - python/trunk/Doc/faq/windows.rst Message-ID: <20100321095116.289FDFA0E@mail.python.org> Author: georg.brandl Date: Sun Mar 21 10:51:16 2010 New Revision: 79181 Log: Update os.kill() emulation example for Windows to use ctypes. Modified: python/trunk/Doc/faq/windows.rst Modified: python/trunk/Doc/faq/windows.rst ============================================================================== --- python/trunk/Doc/faq/windows.rst (original) +++ python/trunk/Doc/faq/windows.rst Sun Mar 21 10:51:16 2010 @@ -441,13 +441,15 @@ How do I emulate os.kill() in Windows? -------------------------------------- -Use win32api:: +To terminate a process, you can use ctypes:: + + import ctypes def kill(pid): """kill function for Win32""" - import win32api - handle = win32api.OpenProcess(1, 0, pid) - return (0 != win32api.TerminateProcess(handle, 0)) + kernel32 = ctypes.windll.kernel32 + handle = kernel32.OpenProcess(1, 0, pid) + return (0 != kernel32.TerminateProcess(handle, 0)) Why does os.path.isdir() fail on NT shared directories? From python-checkins at python.org Sun Mar 21 10:51:44 2010 From: python-checkins at python.org (georg.brandl) Date: Sun, 21 Mar 2010 10:51:44 +0100 (CET) Subject: [Python-checkins] r79182 - in python/branches/py3k: Doc/tutorial/datastructures.rst Message-ID: <20100321095144.85CBAFBA0@mail.python.org> Author: georg.brandl Date: Sun Mar 21 10:51:44 2010 New Revision: 79182 Log: Merged revisions 79179 via svnmerge from svn+ssh://pythondev at svn.python.org/python/trunk ........ r79179 | georg.brandl | 2010-03-21 10:37:54 +0100 (So, 21 M?r 2010) | 1 line Mention inefficiency of lists as queues, add link to collections.deque discussion. ........ Modified: python/branches/py3k/ (props changed) python/branches/py3k/Doc/tutorial/datastructures.rst Modified: python/branches/py3k/Doc/tutorial/datastructures.rst ============================================================================== --- python/branches/py3k/Doc/tutorial/datastructures.rst (original) +++ python/branches/py3k/Doc/tutorial/datastructures.rst Sun Mar 21 10:51:44 2010 @@ -153,6 +153,11 @@ >>> queue ['Michael', 'Terry', 'Graham'] +However, since lists are implemented as an array of elements, they are not the +optimal data structure to use as a queue (the ``pop(0)`` needs to move all +following elements). See :ref:`tut-list-tools` for a look at +:class:`collections.deque`, which is designed to work efficiently as a queue. + .. _tut-listcomps: From python-checkins at python.org Sun Mar 21 10:52:24 2010 From: python-checkins at python.org (georg.brandl) Date: Sun, 21 Mar 2010 10:52:24 +0100 (CET) Subject: [Python-checkins] r79183 - in python/branches/py3k: Doc/faq/windows.rst Message-ID: <20100321095224.E557CFBD1@mail.python.org> Author: georg.brandl Date: Sun Mar 21 10:52:24 2010 New Revision: 79183 Log: Merged revisions 79181 via svnmerge from svn+ssh://pythondev at svn.python.org/python/trunk ........ r79181 | georg.brandl | 2010-03-21 10:51:16 +0100 (So, 21 M?r 2010) | 1 line Update os.kill() emulation example for Windows to use ctypes. ........ Modified: python/branches/py3k/ (props changed) python/branches/py3k/Doc/faq/windows.rst Modified: python/branches/py3k/Doc/faq/windows.rst ============================================================================== --- python/branches/py3k/Doc/faq/windows.rst (original) +++ python/branches/py3k/Doc/faq/windows.rst Sun Mar 21 10:52:24 2010 @@ -445,13 +445,15 @@ How do I emulate os.kill() in Windows? -------------------------------------- -Use win32api:: +To terminate a process, you can use ctypes:: + + import ctypes def kill(pid): """kill function for Win32""" - import win32api - handle = win32api.OpenProcess(1, 0, pid) - return (0 != win32api.TerminateProcess(handle, 0)) + kernel32 = ctypes.windll.kernel32 + handle = kernel32.OpenProcess(1, 0, pid) + return (0 != kernel32.TerminateProcess(handle, 0)) Why does os.path.isdir() fail on NT shared directories? From python-checkins at python.org Sun Mar 21 10:58:36 2010 From: python-checkins at python.org (georg.brandl) Date: Sun, 21 Mar 2010 10:58:36 +0100 (CET) Subject: [Python-checkins] r79184 - python/trunk/Doc/library/datetime.rst Message-ID: <20100321095836.D6092FA0E@mail.python.org> Author: georg.brandl Date: Sun Mar 21 10:58:36 2010 New Revision: 79184 Log: Update text for newest US DST regulation. The sample file already has the calculation right. Modified: python/trunk/Doc/library/datetime.rst Modified: python/trunk/Doc/library/datetime.rst ============================================================================== --- python/trunk/Doc/library/datetime.rst (original) +++ python/trunk/Doc/library/datetime.rst Sun Mar 21 10:58:36 2010 @@ -1457,8 +1457,8 @@ Note that there are unavoidable subtleties twice per year in a :class:`tzinfo` subclass accounting for both standard and daylight time, at the DST transition points. For concreteness, consider US Eastern (UTC -0500), where EDT begins the -minute after 1:59 (EST) on the first Sunday in April, and ends the minute after -1:59 (EDT) on the last Sunday in October:: +minute after 1:59 (EST) on the second Sunday in March, and ends the minute after +1:59 (EDT) on the first Sunday in November:: UTC 3:MM 4:MM 5:MM 6:MM 7:MM 8:MM EST 22:MM 23:MM 0:MM 1:MM 2:MM 3:MM From python-checkins at python.org Sun Mar 21 11:02:47 2010 From: python-checkins at python.org (georg.brandl) Date: Sun, 21 Mar 2010 11:02:47 +0100 (CET) Subject: [Python-checkins] r79185 - python/trunk/Doc/extending/newtypes.rst Message-ID: <20100321100247.C8195FA98@mail.python.org> Author: georg.brandl Date: Sun Mar 21 11:02:47 2010 New Revision: 79185 Log: Include structmember.h correctly. Modified: python/trunk/Doc/extending/newtypes.rst Modified: python/trunk/Doc/extending/newtypes.rst ============================================================================== --- python/trunk/Doc/extending/newtypes.rst (original) +++ python/trunk/Doc/extending/newtypes.rst Sun Mar 21 11:02:47 2010 @@ -252,7 +252,7 @@ We've added an extra include:: - #include "structmember.h" + #include This include provides declarations that we use to handle attributes, as described a bit later. From python-checkins at python.org Sun Mar 21 11:03:37 2010 From: python-checkins at python.org (georg.brandl) Date: Sun, 21 Mar 2010 11:03:37 +0100 (CET) Subject: [Python-checkins] r79186 - in python/branches/py3k: Doc/extending/newtypes.rst Doc/library/datetime.rst Message-ID: <20100321100337.0CB48FA98@mail.python.org> Author: georg.brandl Date: Sun Mar 21 11:03:36 2010 New Revision: 79186 Log: Merged revisions 79184-79185 via svnmerge from svn+ssh://pythondev at svn.python.org/python/trunk ........ r79184 | georg.brandl | 2010-03-21 10:58:36 +0100 (So, 21 M?r 2010) | 1 line Update text for newest US DST regulation. The sample file already has the calculation right. ........ r79185 | georg.brandl | 2010-03-21 11:02:47 +0100 (So, 21 M?r 2010) | 1 line Include structmember.h correctly. ........ Modified: python/branches/py3k/ (props changed) python/branches/py3k/Doc/extending/newtypes.rst python/branches/py3k/Doc/library/datetime.rst Modified: python/branches/py3k/Doc/extending/newtypes.rst ============================================================================== --- python/branches/py3k/Doc/extending/newtypes.rst (original) +++ python/branches/py3k/Doc/extending/newtypes.rst Sun Mar 21 11:03:36 2010 @@ -236,7 +236,7 @@ We've added an extra include:: - #include "structmember.h" + #include This include provides declarations that we use to handle attributes, as described a bit later. Modified: python/branches/py3k/Doc/library/datetime.rst ============================================================================== --- python/branches/py3k/Doc/library/datetime.rst (original) +++ python/branches/py3k/Doc/library/datetime.rst Sun Mar 21 11:03:36 2010 @@ -1454,8 +1454,8 @@ Note that there are unavoidable subtleties twice per year in a :class:`tzinfo` subclass accounting for both standard and daylight time, at the DST transition points. For concreteness, consider US Eastern (UTC -0500), where EDT begins the -minute after 1:59 (EST) on the first Sunday in April, and ends the minute after -1:59 (EDT) on the last Sunday in October:: +minute after 1:59 (EST) on the second Sunday in March, and ends the minute after +1:59 (EDT) on the first Sunday in November:: UTC 3:MM 4:MM 5:MM 6:MM 7:MM 8:MM EST 22:MM 23:MM 0:MM 1:MM 2:MM 3:MM From ncoghlan at gmail.com Sun Mar 21 11:32:25 2010 From: ncoghlan at gmail.com (Nick Coghlan) Date: Sun, 21 Mar 2010 20:32:25 +1000 Subject: [Python-checkins] r79172 - python/trunk/Doc/library/stdtypes.rst In-Reply-To: <20100321090800.6DDC1F86B@mail.python.org> References: <20100321090800.6DDC1F86B@mail.python.org> Message-ID: <4BA5F5B9.203@gmail.com> georg.brandl wrote: > Author: georg.brandl > Date: Sun Mar 21 10:08:00 2010 > New Revision: 79172 > > Log: > Add a paragraph about set displays. > > Modified: > python/trunk/Doc/library/stdtypes.rst > > Modified: python/trunk/Doc/library/stdtypes.rst > ============================================================================== > --- python/trunk/Doc/library/stdtypes.rst (original) > +++ python/trunk/Doc/library/stdtypes.rst Sun Mar 21 10:08:00 2010 > @@ -1672,6 +1672,10 @@ > altered after it is created; it can therefore be used as a dictionary key or as > an element of another set. > > +Non-empty sets (not frozensets) can be created by placing a comma-separated list > +of elements pairs within braces, for example: ``{'jack', 'sjoerd'}``, in > +addition to the :class:`set` constructor. Is that "pairs" meant to be there? Or should it just be "elements within braces"? Cheers, Nick. -- Nick Coghlan | ncoghlan at gmail.com | Brisbane, Australia --------------------------------------------------------------- From python-checkins at python.org Sun Mar 21 11:50:44 2010 From: python-checkins at python.org (florent.xicluna) Date: Sun, 21 Mar 2010 11:50:44 +0100 (CET) Subject: [Python-checkins] r79187 - python/trunk/Lib/unittest/case.py Message-ID: <20100321105044.F3AA7F9F7@mail.python.org> Author: florent.xicluna Date: Sun Mar 21 11:50:44 2010 New Revision: 79187 Log: Silence more py3k warnings in unittest.case. Modified: python/trunk/Lib/unittest/case.py Modified: python/trunk/Lib/unittest/case.py ============================================================================== --- python/trunk/Lib/unittest/case.py (original) +++ python/trunk/Lib/unittest/case.py Sun Mar 21 11:50:44 2010 @@ -568,7 +568,7 @@ msg: Optional message to use on failure instead of a list of differences. """ - if seq_type != None: + if seq_type is not None: seq_type_name = seq_type.__name__ if not isinstance(seq1, seq_type): raise self.failureException('First sequence is not a %s: %s' @@ -802,7 +802,7 @@ with warnings.catch_warnings(): if sys.py3kwarning: # Silence Py3k warning raised during the sorting - for _msg in ["dict inequality comparisons", + for _msg in ["(code|dict|type) inequality comparisons", "builtin_function_or_method order comparisons", "comparing unequal types"]: warnings.filterwarnings("ignore", _msg, DeprecationWarning) From python-checkins at python.org Sun Mar 21 11:51:40 2010 From: python-checkins at python.org (florent.xicluna) Date: Sun, 21 Mar 2010 11:51:40 +0100 (CET) Subject: [Python-checkins] r79188 - python/trunk/Lib/test/test_decimal.py Message-ID: <20100321105140.BA308F9F7@mail.python.org> Author: florent.xicluna Date: Sun Mar 21 11:51:40 2010 New Revision: 79188 Log: Fix py3k warnings in test_decimal, using unittest.assertItemsEqual. Modified: python/trunk/Lib/test/test_decimal.py Modified: python/trunk/Lib/test/test_decimal.py ============================================================================== --- python/trunk/Lib/test/test_decimal.py (original) +++ python/trunk/Lib/test/test_decimal.py Sun Mar 21 11:51:40 2010 @@ -30,7 +30,8 @@ import unittest from decimal import * import numbers -from test.test_support import (run_unittest, run_doctest, is_resource_enabled) +from test.test_support import (run_unittest, run_doctest, + is_resource_enabled, check_py3k_warnings) import random try: import threading @@ -201,7 +202,7 @@ if skip_expected: raise unittest.SkipTest return - for line in open(file).xreadlines(): + for line in open(file): line = line.replace('\r\n', '').replace('\n', '') #print line try: @@ -360,12 +361,9 @@ myexceptions = self.getexceptions() self.context.clear_flags() - myexceptions.sort() - theirexceptions.sort() - self.assertEqual(result, ans, 'Incorrect answer for ' + s + ' -- got ' + result) - self.assertEqual(myexceptions, theirexceptions, + self.assertItemsEqual(myexceptions, theirexceptions, 'Incorrect flags set in ' + s + ' -- got ' + str(myexceptions)) return @@ -616,12 +614,13 @@ ('//', '__floordiv__', '__rfloordiv__'), ('**', '__pow__', '__rpow__') ] - if 1/2 == 0: - # testing with classic division, so add __div__ - oplist.append(('/', '__div__', '__rdiv__')) - else: - # testing with -Qnew, so add __truediv__ - oplist.append(('/', '__truediv__', '__rtruediv__')) + with check_py3k_warnings(): + if 1 / 2 == 0: + # testing with classic division, so add __div__ + oplist.append(('/', '__div__', '__rdiv__')) + else: + # testing with -Qnew, so add __truediv__ + oplist.append(('/', '__truediv__', '__rtruediv__')) for sym, lop, rop in oplist: setattr(E, lop, lambda self, other: 'str' + lop + str(other)) @@ -1199,8 +1198,9 @@ self.assertEqual(a, b) # with None - self.assertFalse(Decimal(1) < None) - self.assertTrue(Decimal(1) > None) + with check_py3k_warnings(): + self.assertFalse(Decimal(1) < None) + self.assertTrue(Decimal(1) > None) def test_copy_and_deepcopy_methods(self): d = Decimal('43.24') @@ -2141,16 +2141,14 @@ for flag in extra_flags: if flag not in expected_flags: expected_flags.append(flag) - expected_flags.sort() # flags we actually got new_flags = [k for k,v in context.flags.items() if v] - new_flags.sort() self.assertEqual(ans, new_ans, "operation produces different answers depending on flags set: " + "expected %s, got %s." % (ans, new_ans)) - self.assertEqual(new_flags, expected_flags, + self.assertItemsEqual(new_flags, expected_flags, "operation raises different flags depending on flags set: " + "expected %s, got %s" % (expected_flags, new_flags)) From python-checkins at python.org Sun Mar 21 12:03:21 2010 From: python-checkins at python.org (florent.xicluna) Date: Sun, 21 Mar 2010 12:03:21 +0100 (CET) Subject: [Python-checkins] r79189 - in python/trunk/Lib/test: test_compile.py test_complex_args.py Message-ID: <20100321110321.8192FFBBB@mail.python.org> Author: florent.xicluna Date: Sun Mar 21 12:03:21 2010 New Revision: 79189 Log: Silence some py3k SyntaxWarning using check_py3k_warnings() with "exec" statements. Modified: python/trunk/Lib/test/test_compile.py python/trunk/Lib/test/test_complex_args.py Modified: python/trunk/Lib/test/test_compile.py ============================================================================== --- python/trunk/Lib/test/test_compile.py (original) +++ python/trunk/Lib/test/test_compile.py Sun Mar 21 12:03:21 2010 @@ -2,6 +2,7 @@ import sys import _ast from test import test_support +import textwrap class TestSpecifics(unittest.TestCase): @@ -142,6 +143,9 @@ def test_complex_args(self): + with test_support.check_py3k_warnings( + ("tuple parameter unpacking has been removed", SyntaxWarning)): + exec textwrap.dedent(''' def comp_args((a, b)): return a,b self.assertEqual(comp_args((1, 2)), (1, 2)) @@ -159,6 +163,7 @@ return a, b, c self.assertEqual(comp_args(1, (2, 3)), (1, 2, 3)) self.assertEqual(comp_args(), (2, 3, 4)) + ''') def test_argument_order(self): try: Modified: python/trunk/Lib/test/test_complex_args.py ============================================================================== --- python/trunk/Lib/test/test_complex_args.py (original) +++ python/trunk/Lib/test/test_complex_args.py Sun Mar 21 12:03:21 2010 @@ -1,23 +1,30 @@ import unittest from test import test_support +import textwrap class ComplexArgsTestCase(unittest.TestCase): def check(self, func, expected, *args): self.assertEqual(func(*args), expected) - # These functions are tested below as lambdas too. If you add a function test, - # also add a similar lambda test. + # These functions are tested below as lambdas too. If you add a + # function test, also add a similar lambda test. + + # Functions are wrapped in "exec" statements in order to + # silence Py3k warnings. def test_func_parens_no_unpacking(self): + exec textwrap.dedent(""" def f(((((x))))): return x self.check(f, 1, 1) # Inner parens are elided, same as: f(x,) def f(((x)),): return x self.check(f, 2, 2) + """) def test_func_1(self): + exec textwrap.dedent(""" def f(((((x),)))): return x self.check(f, 3, (3,)) def f(((((x)),))): return x @@ -26,16 +33,22 @@ self.check(f, 5, (5,)) def f(((x),)): return x self.check(f, 6, (6,)) + """) def test_func_2(self): + exec textwrap.dedent(""" def f(((((x)),),)): return x self.check(f, 2, ((2,),)) + """) def test_func_3(self): + exec textwrap.dedent(""" def f((((((x)),),),)): return x self.check(f, 3, (((3,),),)) + """) def test_func_complex(self): + exec textwrap.dedent(""" def f((((((x)),),),), a, b, c): return x, a, b, c self.check(f, (3, 9, 8, 7), (((3,),),), 9, 8, 7) @@ -44,18 +57,22 @@ def f(a, b, c, ((((((x)),)),),)): return a, b, c, x self.check(f, (9, 8, 7, 3), 9, 8, 7, (((3,),),)) + """) # Duplicate the tests above, but for lambda. If you add a lambda test, # also add a similar function test above. def test_lambda_parens_no_unpacking(self): + exec textwrap.dedent(""" f = lambda (((((x))))): x self.check(f, 1, 1) # Inner parens are elided, same as: f(x,) f = lambda ((x)),: x self.check(f, 2, 2) + """) def test_lambda_1(self): + exec textwrap.dedent(""" f = lambda (((((x),)))): x self.check(f, 3, (3,)) f = lambda (((((x)),))): x @@ -64,16 +81,22 @@ self.check(f, 5, (5,)) f = lambda (((x),)): x self.check(f, 6, (6,)) + """) def test_lambda_2(self): + exec textwrap.dedent(""" f = lambda (((((x)),),)): x self.check(f, 2, ((2,),)) + """) def test_lambda_3(self): + exec textwrap.dedent(""" f = lambda ((((((x)),),),)): x self.check(f, 3, (((3,),),)) + """) def test_lambda_complex(self): + exec textwrap.dedent(""" f = lambda (((((x)),),),), a, b, c: (x, a, b, c) self.check(f, (3, 9, 8, 7), (((3,),),), 9, 8, 7) @@ -82,10 +105,14 @@ f = lambda a, b, c, ((((((x)),)),),): (a, b, c, x) self.check(f, (9, 8, 7, 3), 9, 8, 7, (((3,),),)) + """) def test_main(): - test_support.run_unittest(ComplexArgsTestCase) + with test_support.check_py3k_warnings( + ("tuple parameter unpacking has been removed", SyntaxWarning), + ("parenthesized argument names are invalid", SyntaxWarning)): + test_support.run_unittest(ComplexArgsTestCase) if __name__ == "__main__": test_main() From python-checkins at python.org Sun Mar 21 12:15:45 2010 From: python-checkins at python.org (matthias.klose) Date: Sun, 21 Mar 2010 12:15:45 +0100 (CET) Subject: [Python-checkins] r79190 - in python/branches/release26-maint: Lib/test/test_os.py Misc/NEWS Modules/posixmodule.c Message-ID: <20100321111545.9E1E8FAF6@mail.python.org> Author: matthias.klose Date: Sun Mar 21 12:15:45 2010 New Revision: 79190 Log: Revert r79131 - Issue #1039, #8154: Fix os.execlp() crash with missing 2nd argument. Modified: python/branches/release26-maint/Lib/test/test_os.py python/branches/release26-maint/Misc/NEWS python/branches/release26-maint/Modules/posixmodule.c Modified: python/branches/release26-maint/Lib/test/test_os.py ============================================================================== --- python/branches/release26-maint/Lib/test/test_os.py (original) +++ python/branches/release26-maint/Lib/test/test_os.py Sun Mar 21 12:15:45 2010 @@ -511,9 +511,6 @@ except NotImplementedError: pass - def test_execvpe_with_bad_arglist(self): - self.assertRaises(ValueError, os.execvpe, 'notepad', [], None) - class Win32ErrorTests(unittest.TestCase): def test_rename(self): self.assertRaises(WindowsError, os.rename, test_support.TESTFN, test_support.TESTFN+".bak") Modified: python/branches/release26-maint/Misc/NEWS ============================================================================== --- python/branches/release26-maint/Misc/NEWS (original) +++ python/branches/release26-maint/Misc/NEWS Sun Mar 21 12:15:45 2010 @@ -15,8 +15,6 @@ Library ------- -- Issue #1039, #8154: Fix os.execlp() crash with missing 2nd argument. - - Issue #4961: Inconsistent/wrong result of askyesno function in tkMessageBox with Tcl/Tk-8.5. Modified: python/branches/release26-maint/Modules/posixmodule.c ============================================================================== --- python/branches/release26-maint/Modules/posixmodule.c (original) +++ python/branches/release26-maint/Modules/posixmodule.c Sun Mar 21 12:15:45 2010 @@ -2979,11 +2979,6 @@ PyMem_Free(path); return NULL; } - if (argc < 1) { - PyErr_SetString(PyExc_ValueError, "execv() arg 2 must not be empty"); - PyMem_Free(path); - return NULL; - } argvlist = PyMem_NEW(char *, argc+1); if (argvlist == NULL) { From python-checkins at python.org Sun Mar 21 12:50:18 2010 From: python-checkins at python.org (florent.xicluna) Date: Sun, 21 Mar 2010 12:50:18 +0100 (CET) Subject: [Python-checkins] r79191 - in python/trunk/Lib: distutils/tests/test_build_ext.py test/test_distutils.py Message-ID: <20100321115018.01C85F9B0@mail.python.org> Author: florent.xicluna Date: Sun Mar 21 12:50:17 2010 New Revision: 79191 Log: No more deprecation warnings for distutils.sysconfig, following r78666. But when the "dl" module is available, it gives a py3k deprecation warning. Modified: python/trunk/Lib/distutils/tests/test_build_ext.py python/trunk/Lib/test/test_distutils.py Modified: python/trunk/Lib/distutils/tests/test_build_ext.py ============================================================================== --- python/trunk/Lib/distutils/tests/test_build_ext.py (original) +++ python/trunk/Lib/distutils/tests/test_build_ext.py Sun Mar 21 12:50:17 2010 @@ -358,6 +358,9 @@ import distutils.core, distutils.extension, distutils.command.build_ext saved_ext = distutils.extension.Extension try: + # on some platforms, it loads the deprecated "dl" module + test_support.import_module('setuptools_build_ext', deprecated=True) + # theses import patch Distutils' Extension class from setuptools_build_ext import build_ext as setuptools_build_ext from setuptools_extension import Extension Modified: python/trunk/Lib/test/test_distutils.py ============================================================================== --- python/trunk/Lib/test/test_distutils.py (original) +++ python/trunk/Lib/test/test_distutils.py Sun Mar 21 12:50:17 2010 @@ -5,18 +5,13 @@ be run. """ +from test import test_support import distutils.tests -import test.test_support -import warnings def test_main(): - with warnings.catch_warnings(): - warnings.filterwarnings("ignore", - "distutils.sysconfig.\w+ is deprecated", - DeprecationWarning) - test.test_support.run_unittest(distutils.tests.test_suite()) - test.test_support.reap_children() + test_support.run_unittest(distutils.tests.test_suite()) + test_support.reap_children() if __name__ == "__main__": From python-checkins at python.org Sun Mar 21 12:50:59 2010 From: python-checkins at python.org (georg.brandl) Date: Sun, 21 Mar 2010 12:50:59 +0100 (CET) Subject: [Python-checkins] r79192 - python/trunk/Doc/library/stdtypes.rst Message-ID: <20100321115059.10F35F9B0@mail.python.org> Author: georg.brandl Date: Sun Mar 21 12:50:58 2010 New Revision: 79192 Log: Remove leftover word. Modified: python/trunk/Doc/library/stdtypes.rst Modified: python/trunk/Doc/library/stdtypes.rst ============================================================================== --- python/trunk/Doc/library/stdtypes.rst (original) +++ python/trunk/Doc/library/stdtypes.rst Sun Mar 21 12:50:58 2010 @@ -1673,8 +1673,8 @@ an element of another set. Non-empty sets (not frozensets) can be created by placing a comma-separated list -of elements pairs within braces, for example: ``{'jack', 'sjoerd'}``, in -addition to the :class:`set` constructor. +of elements within braces, for example: ``{'jack', 'sjoerd'}``, in addition to the +:class:`set` constructor. The constructors for both classes work the same: From g.brandl at gmx.net Sun Mar 21 12:49:34 2010 From: g.brandl at gmx.net (Georg Brandl) Date: Sun, 21 Mar 2010 12:49:34 +0100 Subject: [Python-checkins] r79172 - python/trunk/Doc/library/stdtypes.rst In-Reply-To: <4BA5F5B9.203@gmail.com> References: <20100321090800.6DDC1F86B@mail.python.org> <4BA5F5B9.203@gmail.com> Message-ID: Am 21.03.2010 11:32, schrieb Nick Coghlan: > georg.brandl wrote: >> Author: georg.brandl >> Date: Sun Mar 21 10:08:00 2010 >> New Revision: 79172 >> >> Log: >> Add a paragraph about set displays. >> >> Modified: >> python/trunk/Doc/library/stdtypes.rst >> >> Modified: python/trunk/Doc/library/stdtypes.rst >> ============================================================================== >> --- python/trunk/Doc/library/stdtypes.rst (original) >> +++ python/trunk/Doc/library/stdtypes.rst Sun Mar 21 10:08:00 2010 >> @@ -1672,6 +1672,10 @@ >> altered after it is created; it can therefore be used as a dictionary key or as >> an element of another set. >> >> +Non-empty sets (not frozensets) can be created by placing a comma-separated list >> +of elements pairs within braces, for example: ``{'jack', 'sjoerd'}``, in >> +addition to the :class:`set` constructor. > > Is that "pairs" meant to be there? Or should it just be "elements within > braces"? Of course. Thanks! Georg -- Thus spake the Lord: Thou shalt indent with four spaces. No more, no less. Four shall be the number of spaces thou shalt indent, and the number of thy indenting shall be four. Eight shalt thou not indent, nor either indent thou two, excepting that thou then proceed to four. Tabs are right out. From python-checkins at python.org Sun Mar 21 12:53:50 2010 From: python-checkins at python.org (georg.brandl) Date: Sun, 21 Mar 2010 12:53:50 +0100 (CET) Subject: [Python-checkins] r79193 - in python/branches/py3k: Doc/library/stdtypes.rst Message-ID: <20100321115350.4F062F9B0@mail.python.org> Author: georg.brandl Date: Sun Mar 21 12:53:50 2010 New Revision: 79193 Log: Merged revisions 79192 via svnmerge from svn+ssh://pythondev at svn.python.org/python/trunk ........ r79192 | georg.brandl | 2010-03-21 12:50:58 +0100 (So, 21 M?r 2010) | 1 line Remove leftover word. ........ Modified: python/branches/py3k/ (props changed) python/branches/py3k/Doc/library/stdtypes.rst Modified: python/branches/py3k/Doc/library/stdtypes.rst ============================================================================== --- python/branches/py3k/Doc/library/stdtypes.rst (original) +++ python/branches/py3k/Doc/library/stdtypes.rst Sun Mar 21 12:53:50 2010 @@ -1705,8 +1705,8 @@ an element of another set. Non-empty sets (not frozensets) can be created by placing a comma-separated list -of elements pairs within braces, for example: ``{'jack', 'sjoerd'}``, in -addition to the :class:`set` constructor. +of elements within braces, for example: ``{'jack', 'sjoerd'}``, in addition to the +:class:`set` constructor. The constructors for both classes work the same: From python-checkins at python.org Sun Mar 21 12:58:11 2010 From: python-checkins at python.org (florent.xicluna) Date: Sun, 21 Mar 2010 12:58:11 +0100 (CET) Subject: [Python-checkins] r79194 - python/trunk/Lib/test/test_importhooks.py Message-ID: <20100321115811.905D2F9B0@mail.python.org> Author: florent.xicluna Date: Sun Mar 21 12:58:11 2010 New Revision: 79194 Log: User assertRaises and add a specific warning filter. Modified: python/trunk/Lib/test/test_importhooks.py Modified: python/trunk/Lib/test/test_importhooks.py ============================================================================== --- python/trunk/Lib/test/test_importhooks.py (original) +++ python/trunk/Lib/test/test_importhooks.py Sun Mar 21 12:58:11 2010 @@ -227,15 +227,9 @@ def testBlocker(self): mname = "exceptions" # an arbitrary harmless builtin module - if mname in sys.modules: - del sys.modules[mname] + test_support.unload(mname) sys.meta_path.append(ImportBlocker(mname)) - try: - __import__(mname) - except ImportError: - pass - else: - self.fail("'%s' was not supposed to be importable" % mname) + self.assertRaises(ImportError, __import__, mname) def testImpWrapper(self): i = ImpWrapper() @@ -247,7 +241,8 @@ for n in sys.modules.keys(): if n.startswith(parent): del sys.modules[n] - with test_support.check_warnings(): + with test_support.check_warnings(("The compiler package is deprecated " + "and removed", DeprecationWarning)): for mname in mnames: m = __import__(mname, globals(), locals(), ["__dummy__"]) m.__loader__ # to make sure we actually handled the import From python-checkins at python.org Sun Mar 21 13:07:22 2010 From: python-checkins at python.org (florent.xicluna) Date: Sun, 21 Mar 2010 13:07:22 +0100 (CET) Subject: [Python-checkins] r79194 - svn:log Message-ID: <20100321120722.5FFDEFB8F@mail.python.org> Author: florent.xicluna Revision: 79194 Property Name: svn:log Action: modified Property diff: --- old property value +++ new property value @@ -1 +1 @@ -User assertRaises and add a specific warning filter. +Use assertRaises and add a specific warning filter. From python-checkins at python.org Sun Mar 21 13:27:20 2010 From: python-checkins at python.org (florent.xicluna) Date: Sun, 21 Mar 2010 13:27:20 +0100 (CET) Subject: [Python-checkins] r79195 - in python/trunk: Lib/macpath.py Misc/NEWS Message-ID: <20100321122720.C188CFAD8@mail.python.org> Author: florent.xicluna Date: Sun Mar 21 13:27:20 2010 New Revision: 79195 Log: Issue #8179: Fix macpath.realpath() on a non-existing path. Modified: python/trunk/Lib/macpath.py python/trunk/Misc/NEWS Modified: python/trunk/Lib/macpath.py ============================================================================== --- python/trunk/Lib/macpath.py (original) +++ python/trunk/Lib/macpath.py Sun Mar 21 13:27:20 2010 @@ -206,7 +206,10 @@ path = components[0] + ':' for c in components[1:]: path = join(path, c) - path = Carbon.File.FSResolveAliasFile(path, 1)[0].as_pathname() + try: + path = Carbon.File.FSResolveAliasFile(path, 1)[0].as_pathname() + except Carbon.File.Error: + pass return path supports_unicode_filenames = False Modified: python/trunk/Misc/NEWS ============================================================================== --- python/trunk/Misc/NEWS (original) +++ python/trunk/Misc/NEWS Sun Mar 21 13:27:20 2010 @@ -24,6 +24,8 @@ Library ------- +- Issue #8179: Fix macpath.realpath() on a non-existing path. + - Issue #8024: Update the Unicode database to 5.2. - Issue #8104: socket.recv_into() and socket.recvfrom_into() now support From python-checkins at python.org Sun Mar 21 13:29:50 2010 From: python-checkins at python.org (florent.xicluna) Date: Sun, 21 Mar 2010 13:29:50 +0100 (CET) Subject: [Python-checkins] r79196 - in python/branches/py3k: Lib/macpath.py Misc/NEWS Message-ID: <20100321122950.88C6AFA0E@mail.python.org> Author: florent.xicluna Date: Sun Mar 21 13:29:50 2010 New Revision: 79196 Log: Merged revisions 79195 via svnmerge from svn+ssh://pythondev at svn.python.org/python/trunk ........ r79195 | florent.xicluna | 2010-03-21 13:27:20 +0100 (dim, 21 mar 2010) | 2 lines Issue #8179: Fix macpath.realpath() on a non-existing path. ........ Modified: python/branches/py3k/ (props changed) python/branches/py3k/Lib/macpath.py python/branches/py3k/Misc/NEWS Modified: python/branches/py3k/Lib/macpath.py ============================================================================== --- python/branches/py3k/Lib/macpath.py (original) +++ python/branches/py3k/Lib/macpath.py Sun Mar 21 13:29:50 2010 @@ -193,7 +193,10 @@ path = components[0] + colon for c in components[1:]: path = join(path, c) - path = Carbon.File.FSResolveAliasFile(path, 1)[0].as_pathname() + try: + path = Carbon.File.FSResolveAliasFile(path, 1)[0].as_pathname() + except Carbon.File.Error: + pass return path supports_unicode_filenames = False Modified: python/branches/py3k/Misc/NEWS ============================================================================== --- python/branches/py3k/Misc/NEWS (original) +++ python/branches/py3k/Misc/NEWS Sun Mar 21 13:29:50 2010 @@ -285,6 +285,8 @@ Library ------- +- Issue #8179: Fix macpath.realpath() on a non-existing path. + - Issue #8024: Update the Unicode database to 5.2. - Issue #8168: py_compile now handles files with utf-8 BOMS. From python-checkins at python.org Sun Mar 21 14:09:25 2010 From: python-checkins at python.org (victor.stinner) Date: Sun, 21 Mar 2010 14:09:25 +0100 (CET) Subject: [Python-checkins] r79197 - in python/branches/release26-maint: Lib/test/test_pep263.py Misc/NEWS Parser/tokenizer.c Message-ID: <20100321130925.339FBF9B0@mail.python.org> Author: victor.stinner Date: Sun Mar 21 14:09:24 2010 New Revision: 79197 Log: Merged revisions 78603 via svnmerge from svn+ssh://pythondev at svn.python.org/python/trunk ........ r78603 | victor.stinner | 2010-03-03 00:20:02 +0100 (mer., 03 mars 2010) | 5 lines Issue #7820: The parser tokenizer restores all bytes in the right if the BOM check fails. Fix an assertion in pydebug mode. ........ Modified: python/branches/release26-maint/ (props changed) python/branches/release26-maint/Lib/test/test_pep263.py python/branches/release26-maint/Misc/NEWS python/branches/release26-maint/Parser/tokenizer.c Modified: python/branches/release26-maint/Lib/test/test_pep263.py ============================================================================== --- python/branches/release26-maint/Lib/test/test_pep263.py (original) +++ python/branches/release26-maint/Lib/test/test_pep263.py Sun Mar 21 14:09:24 2010 @@ -30,6 +30,17 @@ self.assertEqual(d['a'], d['b']) self.assertEqual(len(d['a']), len(d['b'])) + def test_issue7820(self): + # Ensure that check_bom() restores all bytes in the right order if + # check_bom() fails in pydebug mode: a buffer starts with the first + # byte of a valid BOM, but next bytes are different + + # one byte in common with the UTF-16-LE BOM + self.assertRaises(SyntaxError, eval, '\xff\x20') + + # two bytes in common with the UTF-8 BOM + self.assertRaises(SyntaxError, eval, '\xef\xbb\x20') + def test_main(): test_support.run_unittest(PEP263Test) Modified: python/branches/release26-maint/Misc/NEWS ============================================================================== --- python/branches/release26-maint/Misc/NEWS (original) +++ python/branches/release26-maint/Misc/NEWS Sun Mar 21 14:09:24 2010 @@ -12,6 +12,9 @@ Core and Builtins ----------------- +- Issue #7820: The parser tokenizer restores all bytes in the right if + the BOM check fails. + Library ------- Modified: python/branches/release26-maint/Parser/tokenizer.c ============================================================================== --- python/branches/release26-maint/Parser/tokenizer.c (original) +++ python/branches/release26-maint/Parser/tokenizer.c Sun Mar 21 14:09:24 2010 @@ -304,37 +304,57 @@ int set_readline(struct tok_state *, const char *), struct tok_state *tok) { - int ch = get_char(tok); + int ch1, ch2, ch3; + ch1 = get_char(tok); tok->decoding_state = 1; - if (ch == EOF) { + if (ch1 == EOF) { return 1; - } else if (ch == 0xEF) { - ch = get_char(tok); if (ch != 0xBB) goto NON_BOM; - ch = get_char(tok); if (ch != 0xBF) goto NON_BOM; + } else if (ch1 == 0xEF) { + ch2 = get_char(tok); + if (ch2 != 0xBB) { + unget_char(ch2, tok); + unget_char(ch1, tok); + return 1; + } + ch3 = get_char(tok); + if (ch3 != 0xBF) { + unget_char(ch3, tok); + unget_char(ch2, tok); + unget_char(ch1, tok); + return 1; + } #if 0 /* Disable support for UTF-16 BOMs until a decision is made whether this needs to be supported. */ - } else if (ch == 0xFE) { - ch = get_char(tok); if (ch != 0xFF) goto NON_BOM; - if (!set_readline(tok, "utf-16-be")) return 0; + } else if (ch1 == 0xFE) { + ch2 = get_char(tok); + if (ch2 != 0xFF) { + unget_char(ch2, tok); + unget_char(ch1, tok); + return 1; + } + if (!set_readline(tok, "utf-16-be")) + return 0; tok->decoding_state = -1; - } else if (ch == 0xFF) { - ch = get_char(tok); if (ch != 0xFE) goto NON_BOM; - if (!set_readline(tok, "utf-16-le")) return 0; + } else if (ch1 == 0xFF) { + ch2 = get_char(tok); + if (ch2 != 0xFE) { + unget_char(ch2, tok); + unget_char(ch1, tok); + return 1; + } + if (!set_readline(tok, "utf-16-le")) + return 0; tok->decoding_state = -1; #endif } else { - unget_char(ch, tok); + unget_char(ch1, tok); return 1; } if (tok->encoding != NULL) PyMem_FREE(tok->encoding); tok->encoding = new_string("utf-8", 5); /* resulting is in utf-8 */ return 1; - NON_BOM: - /* any token beginning with '\xEF', '\xFE', '\xFF' is a bad token */ - unget_char(0xFF, tok); /* XXX this will cause a syntax error */ - return 1; } /* Read a line of text from TOK into S, using the stream in TOK. From python-checkins at python.org Sun Mar 21 14:13:07 2010 From: python-checkins at python.org (victor.stinner) Date: Sun, 21 Mar 2010 14:13:07 +0100 (CET) Subject: [Python-checkins] r79198 - in python/branches/release26-maint: Modules/_curses_panel.c Modules/threadmodule.c Message-ID: <20100321131307.D3505F8AD@mail.python.org> Author: victor.stinner Date: Sun Mar 21 14:13:07 2010 New Revision: 79198 Log: Merged revisions 78610,78635 via svnmerge from svn+ssh://pythondev at svn.python.org/python/trunk ........ r78610 | victor.stinner | 2010-03-03 01:43:44 +0100 (mer., 03 mars 2010) | 3 lines Issue #3299: fix thread.allocate_lock() error handler, replace PyObject_Del() by Py_DECREF() to fix a crash in pydebug mode. ........ r78635 | victor.stinner | 2010-03-03 22:53:41 +0100 (mer., 03 mars 2010) | 5 lines Issue #3299: fix curses.panel.new_panel() error handler, replace PyObject_DEL() by Py_DECREF() to avoid a crash in pydebug mode. Use po->wo==NULL to detect than the panel is in the lop list or not. ........ Modified: python/branches/release26-maint/ (props changed) python/branches/release26-maint/Modules/_curses_panel.c python/branches/release26-maint/Modules/threadmodule.c Modified: python/branches/release26-maint/Modules/_curses_panel.c ============================================================================== --- python/branches/release26-maint/Modules/_curses_panel.c (original) +++ python/branches/release26-maint/Modules/_curses_panel.c Sun Mar 21 14:13:07 2010 @@ -178,12 +178,13 @@ po = PyObject_NEW(PyCursesPanelObject, &PyCursesPanel_Type); if (po == NULL) return NULL; po->pan = pan; - po->wo = wo; - Py_INCREF(wo); if (insert_lop(po) < 0) { - PyObject_DEL(po); + po->wo = NULL; + Py_DECREF(po); return NULL; } + po->wo = wo; + Py_INCREF(wo); return (PyObject *)po; } @@ -191,8 +192,10 @@ PyCursesPanel_Dealloc(PyCursesPanelObject *po) { (void)del_panel(po->pan); - Py_DECREF(po->wo); - remove_lop(po); + if (po->wo != NULL) { + Py_DECREF(po->wo); + remove_lop(po); + } PyObject_DEL(po); } Modified: python/branches/release26-maint/Modules/threadmodule.c ============================================================================== --- python/branches/release26-maint/Modules/threadmodule.c (original) +++ python/branches/release26-maint/Modules/threadmodule.c Sun Mar 21 14:13:07 2010 @@ -25,12 +25,13 @@ static void lock_dealloc(lockobject *self) { - assert(self->lock_lock); - /* Unlock the lock so it's safe to free it */ - PyThread_acquire_lock(self->lock_lock, 0); - PyThread_release_lock(self->lock_lock); - - PyThread_free_lock(self->lock_lock); + if (self->lock_lock != NULL) { + /* Unlock the lock so it's safe to free it */ + PyThread_acquire_lock(self->lock_lock, 0); + PyThread_release_lock(self->lock_lock); + + PyThread_free_lock(self->lock_lock); + } PyObject_Del(self); } @@ -148,9 +149,9 @@ return NULL; self->lock_lock = PyThread_allocate_lock(); if (self->lock_lock == NULL) { - PyObject_Del(self); - self = NULL; + Py_DECREF(self); PyErr_SetString(ThreadError, "can't allocate lock"); + return NULL; } return self; } From python-checkins at python.org Sun Mar 21 14:32:32 2010 From: python-checkins at python.org (victor.stinner) Date: Sun, 21 Mar 2010 14:32:32 +0100 (CET) Subject: [Python-checkins] r79199 - in python/branches/release26-maint: Include/pystate.h Misc/NEWS Modules/threadmodule.c Python/pystate.c Message-ID: <20100321133232.0A9F8F615@mail.python.org> Author: victor.stinner Date: Sun Mar 21 14:32:31 2010 New Revision: 79199 Log: Merged revisions 78638 via svnmerge from svn+ssh://pythondev at svn.python.org/python/trunk ........ r78638 | victor.stinner | 2010-03-04 00:20:25 +0100 (jeu., 04 mars 2010) | 3 lines Issue #7544: Preallocate thread memory before creating the thread to avoid a fatal error in low memory condition. ........ Modified: python/branches/release26-maint/ (props changed) python/branches/release26-maint/Include/pystate.h python/branches/release26-maint/Misc/NEWS python/branches/release26-maint/Modules/threadmodule.c python/branches/release26-maint/Python/pystate.c Modified: python/branches/release26-maint/Include/pystate.h ============================================================================== --- python/branches/release26-maint/Include/pystate.h (original) +++ python/branches/release26-maint/Include/pystate.h Sun Mar 21 14:32:31 2010 @@ -105,6 +105,8 @@ PyAPI_FUNC(void) PyInterpreterState_Delete(PyInterpreterState *); PyAPI_FUNC(PyThreadState *) PyThreadState_New(PyInterpreterState *); +PyAPI_FUNC(PyThreadState *) _PyThreadState_Prealloc(PyInterpreterState *); +PyAPI_FUNC(void) _PyThreadState_Init(PyThreadState *); PyAPI_FUNC(void) PyThreadState_Clear(PyThreadState *); PyAPI_FUNC(void) PyThreadState_Delete(PyThreadState *); #ifdef WITH_THREAD Modified: python/branches/release26-maint/Misc/NEWS ============================================================================== --- python/branches/release26-maint/Misc/NEWS (original) +++ python/branches/release26-maint/Misc/NEWS Sun Mar 21 14:32:31 2010 @@ -12,6 +12,9 @@ Core and Builtins ----------------- +- Issue #7544: Preallocate thread memory before creating the thread to avoid + a fatal error in low memory condition. + - Issue #7820: The parser tokenizer restores all bytes in the right if the BOM check fails. Modified: python/branches/release26-maint/Modules/threadmodule.c ============================================================================== --- python/branches/release26-maint/Modules/threadmodule.c (original) +++ python/branches/release26-maint/Modules/threadmodule.c Sun Mar 21 14:32:31 2010 @@ -411,6 +411,7 @@ PyObject *func; PyObject *args; PyObject *keyw; + PyThreadState *tstate; }; static void @@ -420,8 +421,9 @@ PyThreadState *tstate; PyObject *res; - tstate = PyThreadState_New(boot->interp); - + tstate = boot->tstate; + tstate->thread_id = PyThread_get_thread_ident(); + _PyThreadState_Init(tstate); PyEval_AcquireThread(tstate); res = PyEval_CallObjectWithKeywords( boot->func, boot->args, boot->keyw); @@ -484,6 +486,11 @@ boot->func = func; boot->args = args; boot->keyw = keyw; + boot->tstate = _PyThreadState_Prealloc(boot->interp); + if (boot->tstate == NULL) { + PyMem_DEL(boot); + return PyErr_NoMemory(); + } Py_INCREF(func); Py_INCREF(args); Py_XINCREF(keyw); @@ -494,6 +501,7 @@ Py_DECREF(func); Py_DECREF(args); Py_XDECREF(keyw); + PyThreadState_Clear(boot->tstate); PyMem_DEL(boot); return NULL; } Modified: python/branches/release26-maint/Python/pystate.c ============================================================================== --- python/branches/release26-maint/Python/pystate.c (original) +++ python/branches/release26-maint/Python/pystate.c Sun Mar 21 14:32:31 2010 @@ -154,8 +154,8 @@ return self->frame; } -PyThreadState * -PyThreadState_New(PyInterpreterState *interp) +static PyThreadState * +new_threadstate(PyInterpreterState *interp, int init) { PyThreadState *tstate = (PyThreadState *)malloc(sizeof(PyThreadState)); @@ -193,9 +193,8 @@ tstate->c_profileobj = NULL; tstate->c_traceobj = NULL; -#ifdef WITH_THREAD - _PyGILState_NoteThreadState(tstate); -#endif + if (init) + _PyThreadState_Init(tstate); HEAD_LOCK(); tstate->next = interp->tstate_head; @@ -206,6 +205,25 @@ return tstate; } +PyThreadState * +PyThreadState_New(PyInterpreterState *interp) +{ + return new_threadstate(interp, 1); +} + +PyThreadState * +_PyThreadState_Prealloc(PyInterpreterState *interp) +{ + return new_threadstate(interp, 0); +} + +void +_PyThreadState_Init(PyThreadState *tstate) +{ +#ifdef WITH_THREAD + _PyGILState_NoteThreadState(tstate); +#endif +} void PyThreadState_Clear(PyThreadState *tstate) From python-checkins at python.org Sun Mar 21 14:37:43 2010 From: python-checkins at python.org (victor.stinner) Date: Sun, 21 Mar 2010 14:37:43 +0100 (CET) Subject: [Python-checkins] r79200 - in python/branches/release26-maint: Misc/NEWS Modules/_lsprof.c Message-ID: <20100321133743.8EDECF8AD@mail.python.org> Author: victor.stinner Date: Sun Mar 21 14:37:43 2010 New Revision: 79200 Log: Merged revisions 78641 via svnmerge from svn+ssh://pythondev at svn.python.org/python/trunk ........ r78641 | victor.stinner | 2010-03-04 01:10:12 +0100 (jeu., 04 mars 2010) | 3 lines Issue #7494: fix a crash in _lsprof (cProfile) after clearing the profiler, reset also the pointer to the current pointer context. ........ Modified: python/branches/release26-maint/ (props changed) python/branches/release26-maint/Misc/NEWS python/branches/release26-maint/Modules/_lsprof.c Modified: python/branches/release26-maint/Misc/NEWS ============================================================================== --- python/branches/release26-maint/Misc/NEWS (original) +++ python/branches/release26-maint/Misc/NEWS Sun Mar 21 14:37:43 2010 @@ -21,6 +21,9 @@ Library ------- +- Issue #7494: fix a crash in _lsprof (cProfile) after clearing the profiler, + reset also the pointer to the current pointer context. + - Issue #4961: Inconsistent/wrong result of askyesno function in tkMessageBox with Tcl/Tk-8.5. Modified: python/branches/release26-maint/Modules/_lsprof.c ============================================================================== --- python/branches/release26-maint/Modules/_lsprof.c (original) +++ python/branches/release26-maint/Modules/_lsprof.c Sun Mar 21 14:37:43 2010 @@ -303,12 +303,17 @@ { RotatingTree_Enum(pObj->profilerEntries, freeEntry, NULL); pObj->profilerEntries = EMPTY_ROTATING_TREE; - /* release the memory hold by the free list of ProfilerContexts */ + /* release the memory hold by the ProfilerContexts */ + if (pObj->currentProfilerContext) { + free(pObj->currentProfilerContext); + pObj->currentProfilerContext = NULL; + } while (pObj->freelistProfilerContext) { ProfilerContext *c = pObj->freelistProfilerContext; pObj->freelistProfilerContext = c->previous; free(c); } + pObj->freelistProfilerContext = NULL; } static void From python-checkins at python.org Sun Mar 21 14:41:15 2010 From: python-checkins at python.org (victor.stinner) Date: Sun, 21 Mar 2010 14:41:15 +0100 (CET) Subject: [Python-checkins] r79201 - in python/branches/release26-maint: Lib/test/test_unicodedata.py Misc/NEWS Modules/unicodedata.c Message-ID: <20100321134115.BAED9F8AD@mail.python.org> Author: victor.stinner Date: Sun Mar 21 14:41:15 2010 New Revision: 79201 Log: Merged revisions 78646 via svnmerge from svn+ssh://pythondev at svn.python.org/python/trunk ........ r78646 | victor.stinner | 2010-03-04 13:09:33 +0100 (jeu., 04 mars 2010) | 5 lines Issue #1054943: Fix unicodedata.normalize('NFC', text) for the Public Review Issue #29. PR #29 was released in february 2004! ........ Modified: python/branches/release26-maint/ (props changed) python/branches/release26-maint/Lib/test/test_unicodedata.py python/branches/release26-maint/Misc/NEWS python/branches/release26-maint/Modules/unicodedata.c Modified: python/branches/release26-maint/Lib/test/test_unicodedata.py ============================================================================== --- python/branches/release26-maint/Lib/test/test_unicodedata.py (original) +++ python/branches/release26-maint/Lib/test/test_unicodedata.py Sun Mar 21 14:41:15 2010 @@ -185,6 +185,11 @@ # The rest can be found in test_normalization.py # which requires an external file. + def test_pr29(self): + # http://www.unicode.org/review/pr-29.html + for text in (u"\u0b47\u0300\u0b3e", u"\u1100\u0300\u1161"): + self.assertEqual(self.db.normalize('NFC', text), text) + def test_east_asian_width(self): eaw = self.db.east_asian_width self.assertRaises(TypeError, eaw, 'a') Modified: python/branches/release26-maint/Misc/NEWS ============================================================================== --- python/branches/release26-maint/Misc/NEWS (original) +++ python/branches/release26-maint/Misc/NEWS Sun Mar 21 14:41:15 2010 @@ -21,6 +21,9 @@ Library ------- +- Issue #1054943: Fix unicodedata.normalize('NFC', text) for the Public Review + Issue #29 + - Issue #7494: fix a crash in _lsprof (cProfile) after clearing the profiler, reset also the pointer to the current pointer context. Modified: python/branches/release26-maint/Modules/unicodedata.c ============================================================================== --- python/branches/release26-maint/Modules/unicodedata.c (original) +++ python/branches/release26-maint/Modules/unicodedata.c Sun Mar 21 14:41:15 2010 @@ -681,7 +681,7 @@ comb = 0; while (i1 < end) { int comb1 = _getrecord_ex(*i1)->combining; - if (comb1 && comb == comb1) { + if (comb && (comb1 == 0 || comb == comb1)) { /* Character is blocked. */ i1++; continue; From python-checkins at python.org Sun Mar 21 14:47:28 2010 From: python-checkins at python.org (victor.stinner) Date: Sun, 21 Mar 2010 14:47:28 +0100 (CET) Subject: [Python-checkins] r79202 - in python/branches/release26-maint: Lib/test/test_sys.py Misc/NEWS Modules/getpath.c Message-ID: <20100321134728.79A2CFAD8@mail.python.org> Author: victor.stinner Date: Sun Mar 21 14:47:28 2010 New Revision: 79202 Log: Merged revisions 78835-78837,78870 via svnmerge from svn+ssh://pythondev at svn.python.org/python/trunk ........ r78835 | victor.stinner | 2010-03-11 13:34:39 +0100 (jeu., 11 mars 2010) | 7 lines Issue #7774: Set sys.executable to an empty string if argv[0] has been set to an non existent program name and Python is unable to retrieve the real program name. Fix also sysconfig: if sys.executable is an empty string, use the current working directory. ........ r78836 | victor.stinner | 2010-03-11 14:27:35 +0100 (jeu., 11 mars 2010) | 4 lines Fix test_executable introduce in previous commit (r78835): Windows is able to retrieve the absolute Python path even if argv[0] has been set to a non existent program name. ........ r78837 | victor.stinner | 2010-03-11 14:46:06 +0100 (jeu., 11 mars 2010) | 3 lines Another fix to test_executable() of test_sys: set the current working to avoid the #7774 bug. ........ r78870 | victor.stinner | 2010-03-12 15:30:26 +0100 (ven., 12 mars 2010) | 1 line NEWS: issue #7774 is related to Library (sys), not Core and Builtins ........ Modified: python/branches/release26-maint/ (props changed) python/branches/release26-maint/Lib/test/test_sys.py python/branches/release26-maint/Misc/NEWS python/branches/release26-maint/Modules/getpath.c Modified: python/branches/release26-maint/Lib/test/test_sys.py ============================================================================== --- python/branches/release26-maint/Lib/test/test_sys.py (original) +++ python/branches/release26-maint/Lib/test/test_sys.py Sun Mar 21 14:47:28 2010 @@ -395,6 +395,20 @@ self.assertEqual(sys.call_tracing(str, (2,)), "2") self.assertRaises(TypeError, sys.call_tracing, str, 2) + def test_executable(self): + # Issue #7774: Ensure that sys.executable is an empty string if argv[0] + # has been set to an non existent program name and Python is unable to + # retrieve the real program name + import subprocess + # For a normal installation, it should work without 'cwd' + # argument. For test runs in the build directory, see #7774. + python_dir = os.path.dirname(os.path.realpath(sys.executable)) + p = subprocess.Popen( + ["nonexistent", "-c", 'import sys; print repr(sys.executable)'], + executable=sys.executable, stdout=subprocess.PIPE, cwd=python_dir) + executable = p.communicate()[0].strip() + p.wait() + self.assert_(executable in ["''", repr(sys.executable)], executable) class SizeofTest(unittest.TestCase): Modified: python/branches/release26-maint/Misc/NEWS ============================================================================== --- python/branches/release26-maint/Misc/NEWS (original) +++ python/branches/release26-maint/Misc/NEWS Sun Mar 21 14:47:28 2010 @@ -21,6 +21,10 @@ Library ------- +- Issue #7774: Set sys.executable to an empty string if argv[0] has been + set to an non existent program name and Python is unable to retrieve the real + program name + - Issue #1054943: Fix unicodedata.normalize('NFC', text) for the Public Review Issue #29 Modified: python/branches/release26-maint/Modules/getpath.c ============================================================================== --- python/branches/release26-maint/Modules/getpath.c (original) +++ python/branches/release26-maint/Modules/getpath.c Sun Mar 21 14:47:28 2010 @@ -441,7 +441,7 @@ } else progpath[0] = '\0'; - if (progpath[0] != SEP) + if (progpath[0] != SEP && progpath[0] != '\0') absolutize(progpath); strncpy(argv0_path, progpath, MAXPATHLEN); argv0_path[MAXPATHLEN] = '\0'; From python-checkins at python.org Sun Mar 21 14:52:56 2010 From: python-checkins at python.org (victor.stinner) Date: Sun, 21 Mar 2010 14:52:56 +0100 (CET) Subject: [Python-checkins] r79203 - in python/branches/release26-maint: Lib/sqlite3/test/regression.py Modules/_sqlite/connection.c Message-ID: <20100321135256.CE744E4B4@mail.python.org> Author: victor.stinner Date: Sun Mar 21 14:52:56 2010 New Revision: 79203 Log: Merged revisions 78898 via svnmerge from svn+ssh://pythondev at svn.python.org/python/trunk ........ r78898 | victor.stinner | 2010-03-13 04:27:07 +0100 (sam., 13 mars 2010) | 7 lines sqlite3: Fix a segfault on calling a connection with something else than a string. Initialize all attributes to be able to call the statement destructor on error. Avoid also a duplicate connection in some tests: setUp() does already open a connection (":memory:"). ........ Modified: python/branches/release26-maint/ (props changed) python/branches/release26-maint/Lib/sqlite3/test/regression.py python/branches/release26-maint/Modules/_sqlite/connection.c Modified: python/branches/release26-maint/Lib/sqlite3/test/regression.py ============================================================================== --- python/branches/release26-maint/Lib/sqlite3/test/regression.py (original) +++ python/branches/release26-maint/Lib/sqlite3/test/regression.py Sun Mar 21 14:52:56 2010 @@ -167,6 +167,12 @@ self.assertRaises(UnicodeEncodeError, setattr, con, "isolation_level", u"\xe9") + def CheckConnectionCall(self): + """ + Call a connection with a non-string SQL request: check error handling + of the statement constructor. + """ + self.assertRaises(sqlite.Warning, self.con, 1) def suite(): regression_suite = unittest.makeSuite(RegressionTests, "Check") Modified: python/branches/release26-maint/Modules/_sqlite/connection.c ============================================================================== --- python/branches/release26-maint/Modules/_sqlite/connection.c (original) +++ python/branches/release26-maint/Modules/_sqlite/connection.c Sun Mar 21 14:52:56 2010 @@ -1051,6 +1051,12 @@ return NULL; } + statement->db = NULL; + statement->st = NULL; + statement->sql = NULL; + statement->in_use = 0; + statement->in_weakreflist = NULL; + rc = pysqlite_statement_create(statement, self, sql); if (rc != SQLITE_OK) { From python-checkins at python.org Sun Mar 21 15:02:32 2010 From: python-checkins at python.org (victor.stinner) Date: Sun, 21 Mar 2010 15:02:32 +0100 (CET) Subject: [Python-checkins] r79204 - in python/branches/release26-maint: Lib/site.py Modules/main.c Parser/tokenizer.c Python/import.c Python/pythonrun.c Message-ID: <20100321140232.89F35E5C0@mail.python.org> Author: victor.stinner Date: Sun Mar 21 15:02:32 2010 New Revision: 79204 Log: Partial backport of r78826: leave import site error handler unchanged (print the error and continue). Merged revisions 78826-78827 via svnmerge from svn+ssh://pythondev at svn.python.org/python/trunk ........ r78826 | victor.stinner | 2010-03-10 23:30:19 +0100 (mer., 10 mars 2010) | 5 lines Issue #3137: Don't ignore errors at startup, especially a keyboard interrupt (SIGINT). If an error occurs while importing the site module, the error is printed and Python exits. Initialize the GIL before importing the site module. ........ r78827 | victor.stinner | 2010-03-10 23:45:04 +0100 (mer., 10 mars 2010) | 4 lines ooops, fix error message in execusercustomize() Copy/paste failure :-) ........ Modified: python/branches/release26-maint/ (props changed) python/branches/release26-maint/Lib/site.py python/branches/release26-maint/Modules/main.c python/branches/release26-maint/Parser/tokenizer.c python/branches/release26-maint/Python/import.c python/branches/release26-maint/Python/pythonrun.c Modified: python/branches/release26-maint/Lib/site.py ============================================================================== --- python/branches/release26-maint/Lib/site.py (original) +++ python/branches/release26-maint/Lib/site.py Sun Mar 21 15:02:32 2010 @@ -472,6 +472,12 @@ import sitecustomize except ImportError: pass + except Exception: + if sys.flags.verbose: + sys.excepthook(*sys.exc_info()) + else: + print >>sys.stderr, \ + "'import sitecustomize' failed; use -v for traceback" def execusercustomize(): @@ -480,6 +486,12 @@ import usercustomize except ImportError: pass + except Exception: + if sys.flags.verbose: + sys.excepthook(*sys.exc_info()) + else: + print>>sys.stderr, \ + "'import usercustomize' failed; use -v for traceback" def main(): Modified: python/branches/release26-maint/Modules/main.c ============================================================================== --- python/branches/release26-maint/Modules/main.c (original) +++ python/branches/release26-maint/Modules/main.c Sun Mar 21 15:02:32 2010 @@ -569,10 +569,16 @@ } if (sts==-1) { - sts = PyRun_AnyFileExFlags( - fp, - filename == NULL ? "" : filename, - filename != NULL, &cf) != 0; + /* call pending calls like signal handlers (SIGINT) */ + if (Py_MakePendingCalls() == -1) { + PyErr_Print(); + sts = 1; + } else { + sts = PyRun_AnyFileExFlags( + fp, + filename == NULL ? "" : filename, + filename != NULL, &cf) != 0; + } } } Modified: python/branches/release26-maint/Parser/tokenizer.c ============================================================================== --- python/branches/release26-maint/Parser/tokenizer.c (original) +++ python/branches/release26-maint/Parser/tokenizer.c Sun Mar 21 15:02:32 2010 @@ -764,8 +764,12 @@ return -1; error_clear: - /* Fallback to iso-8859-1: for backward compatibility */ Py_DECREF(enc); + if (!PyErr_ExceptionMatches(PyExc_UnicodeDecodeError)) { + tok->done = E_ERROR; + return -1; + } + /* Fallback to iso-8859-1: for backward compatibility */ PyErr_Clear(); return 0; } Modified: python/branches/release26-maint/Python/import.c ============================================================================== --- python/branches/release26-maint/Python/import.c (original) +++ python/branches/release26-maint/Python/import.c Sun Mar 21 15:02:32 2010 @@ -2744,8 +2744,6 @@ } else { /* No globals -- use standard builtins, and fake globals */ - PyErr_Clear(); - builtins = PyImport_ImportModuleLevel("__builtin__", NULL, NULL, NULL, 0); if (builtins == NULL) Modified: python/branches/release26-maint/Python/pythonrun.c ============================================================================== --- python/branches/release26-maint/Python/pythonrun.c (original) +++ python/branches/release26-maint/Python/pythonrun.c Sun Mar 21 15:02:32 2010 @@ -245,14 +245,15 @@ } initmain(); /* Module __main__ */ - if (!Py_NoSiteFlag) - initsite(); /* Module site */ /* auto-thread-state API, if available */ #ifdef WITH_THREAD _PyGILState_Init(interp, tstate); #endif /* WITH_THREAD */ + if (!Py_NoSiteFlag) + initsite(); /* Module site */ + if ((p = Py_GETENV("PYTHONIOENCODING")) && *p != '\0') { p = icodeset = codeset = strdup(p); free_codeset = 1; @@ -281,8 +282,13 @@ loc_codeset = strdup(loc_codeset); Py_DECREF(enc); } else { - loc_codeset = NULL; - PyErr_Clear(); + if (PyErr_ExceptionMatches(PyExc_LookupError)) { + PyErr_Clear(); + loc_codeset = NULL; + } else { + PyErr_Print(); + exit(1); + } } } else loc_codeset = NULL; @@ -1543,6 +1549,8 @@ char *msg = NULL; errtype = PyExc_SyntaxError; switch (err->error) { + case E_ERROR: + return; case E_SYNTAX: errtype = PyExc_IndentationError; if (err->expected == INDENT) From python-checkins at python.org Sun Mar 21 18:34:55 2010 From: python-checkins at python.org (benjamin.peterson) Date: Sun, 21 Mar 2010 18:34:55 +0100 (CET) Subject: [Python-checkins] r79205 - python/trunk/Lib/test/test_extcall.py Message-ID: <20100321173455.1AF78C71A@mail.python.org> Author: benjamin.peterson Date: Sun Mar 21 18:34:54 2010 New Revision: 79205 Log: rewrite a bit Modified: python/trunk/Lib/test/test_extcall.py Modified: python/trunk/Lib/test/test_extcall.py ============================================================================== --- python/trunk/Lib/test/test_extcall.py (original) +++ python/trunk/Lib/test/test_extcall.py Sun Mar 21 18:34:54 2010 @@ -1,4 +1,7 @@ # -*- coding: utf-8 -*- + +import sys + """Doctest for method/function calls. We're going the use these types for extra testing @@ -275,7 +278,7 @@ from test import test_support -class UnicodeKeywordArgsTest(unittest.TestCase): +class ExtCallTest(unittest.TestCase): def test_unicode_keywords(self): def f(a): @@ -292,9 +295,8 @@ def test_main(): - from test import test_extcall # self import - test_support.run_doctest(test_extcall, True) - test_support.run_unittest(UnicodeKeywordArgsTest) + test_support.run_doctest(sys.modules[__name__], True) + test_support.run_unittest(ExtCallTest) if __name__ == '__main__': test_main() From python-checkins at python.org Sun Mar 21 18:35:54 2010 From: python-checkins at python.org (victor.stinner) Date: Sun, 21 Mar 2010 18:35:54 +0100 (CET) Subject: [Python-checkins] r79206 - in python/branches/release26-maint: Modules/main.c Message-ID: <20100321173554.B7372F8AD@mail.python.org> Author: victor.stinner Date: Sun Mar 21 18:35:54 2010 New Revision: 79206 Log: Merged revisions 74052 via svnmerge from svn+ssh://pythondev at svn.python.org/python/trunk ........ r74052 | alexandre.vassalotti | 2009-07-17 10:09:04 +0200 (ven., 17 juil. 2009) | 3 lines Fix GCC warning about fprintf used without a string literal and without format arguments. ........ Modified: python/branches/release26-maint/ (props changed) python/branches/release26-maint/Modules/main.c Modified: python/branches/release26-maint/Modules/main.c ============================================================================== --- python/branches/release26-maint/Modules/main.c (original) +++ python/branches/release26-maint/Modules/main.c Sun Mar 21 18:35:54 2010 @@ -112,9 +112,9 @@ if (exitcode) fprintf(f, "Try `python -h' for more information.\n"); else { - fprintf(f, usage_1); - fprintf(f, usage_2); - fprintf(f, usage_3); + fputs(usage_1, f); + fputs(usage_2, f); + fputs(usage_3, f); fprintf(f, usage_4, DELIM); fprintf(f, usage_5, DELIM, PYTHONHOMEHELP); } From python-checkins at python.org Sun Mar 21 19:00:38 2010 From: python-checkins at python.org (florent.xicluna) Date: Sun, 21 Mar 2010 19:00:38 +0100 (CET) Subject: [Python-checkins] r79207 - in python/trunk: Lib/test/test_pep277.py Misc/NEWS Message-ID: <20100321180038.93FD1F83E@mail.python.org> Author: florent.xicluna Date: Sun Mar 21 19:00:38 2010 New Revision: 79207 Log: #8180: Fix test_pep277 on OS X and add more tests for special Unicode normalization cases. Modified: python/trunk/Lib/test/test_pep277.py python/trunk/Misc/NEWS Modified: python/trunk/Lib/test/test_pep277.py ============================================================================== --- python/trunk/Lib/test/test_pep277.py (original) +++ python/trunk/Lib/test/test_pep277.py Sun Mar 21 19:00:38 2010 @@ -1,6 +1,7 @@ # Test the Unicode versions of normal file functions # open, os.open, os.stat. os.listdir, os.rename, os.remove, os.mkdir, os.chdir, os.rmdir import sys, os, unittest +from unicodedata import normalize from test import test_support filenames = [ @@ -13,8 +14,21 @@ u'\u05d4\u05e9\u05e7\u05e6\u05e5\u05e1', u'\u66e8\u66e9\u66eb', u'\u66e8\u05e9\u3093\u0434\u0393\xdf', + # Specific code points: fn, NFC(fn) and NFKC(fn) all differents + u'\u2000\u2000\u2000A', + u'\u2001\u2001\u2001A', + u'\u2003\u2003\u2003A', # == NFC(u'\u2001\u2001\u2001A') + u'\u0020\u0020\u0020A', # u'\u0020' == u' ' == NFKC(u'\u2000') + # u'\u0020' == NFKC(u'\u2001') == NFKC(u'\u2003') + u'\u1fee\u1ffd', + # Specific code points: NFC(fn), NFD(fn), NFKC(fn) and NFKD(fn) all differents + u'\u0385\u03d3\u03d4', + u'\u00a8\u0301\u03d2\u0301\u03d2\u0308', # == NFD(u'\u0385\u03d3\u03d4') + u'\u0020\u0308\u0301\u038e\u03ab', # == NFKC(u'\u0385\u03d3\u03d4') + u'\u1e9b\u1fc1\u1fcd\u1fce\u1fcf\u1fdd\u1fde\u1fdf\u1fed', ] + # Destroy directory dirname and all files under it, to one level. def deltree(dirname): # Don't hide legitimate errors: if one of these suckers exists, it's @@ -25,43 +39,51 @@ os.unlink(os.path.join(dirname, fname)) os.rmdir(dirname) + class UnicodeFileTests(unittest.TestCase): - files = [os.path.join(test_support.TESTFN, f) for f in filenames] + files = set(filenames) + normal_form = None def setUp(self): try: os.mkdir(test_support.TESTFN) except OSError: pass + files = set() for name in self.files: + name = os.path.join(test_support.TESTFN, self.norm(name)) try: f = open(name, 'w') except UnicodeEncodeError: if not os.path.supports_unicode_filenames: - raise unittest.SkipTest("only NT+ and systems with Unicode" - "-friendly filesystem encoding") + self.skipTest("only NT+ and systems with Unicode-friendly" + "filesystem encoding") f.write((name+'\n').encode("utf-8")) f.close() os.stat(name) + files.add(name) + self.files = files def tearDown(self): deltree(test_support.TESTFN) + def norm(self, s): + if self.normal_form and isinstance(s, unicode): + return normalize(self.normal_form, s) + return s + def _apply_failure(self, fn, filename, expected_exception, check_fn_in_exception = True): - try: + with self.assertRaises(expected_exception) as c: fn(filename) - raise test_support.TestFailed("Expected to fail calling '%s(%r)'" - % (fn.__name__, filename)) - except expected_exception, details: - # the "filename" exception attribute may be encoded - if isinstance(details.filename, str): - filename = filename.encode(sys.getfilesystemencoding()) - if check_fn_in_exception and details.filename != filename: - raise test_support.TestFailed("Function '%s(%r) failed with " - "bad filename in the exception: %r" - % (fn.__name__, filename, - details.filename)) + exc_filename = c.exception.filename + # the "filename" exception attribute may be encoded + if isinstance(exc_filename, str): + filename = filename.encode(sys.getfilesystemencoding()) + if check_fn_in_exception: + self.assertEqual(exc_filename, filename, "Function '%s(%r) failed " + "with bad filename in the exception: %r" % + (fn.__name__, filename, exc_filename)) def test_failures(self): # Pass non-existing Unicode filenames all over the place. @@ -82,39 +104,92 @@ f.close() os.stat(name) + def test_normalize(self): + files = set(f for f in self.files if isinstance(f, unicode)) + others = set() + for nf in set(['NFC', 'NFD', 'NFKC', 'NFKD']): + others |= set(normalize(nf, file) for file in files) + others -= files + if sys.platform == 'darwin': + files = set(normalize('NFD', file) for file in files) + for name in others: + if sys.platform == 'darwin' and normalize('NFD', name) in files: + # Mac OS X decomposes Unicode names, using Normal Form D. + # http://developer.apple.com/mac/library/qa/qa2001/qa1173.html + os.stat(name) + continue + self._apply_failure(open, name, IOError) + self._apply_failure(os.stat, name, OSError) + self._apply_failure(os.chdir, name, OSError) + self._apply_failure(os.rmdir, name, OSError) + self._apply_failure(os.remove, name, OSError) + # listdir may append a wildcard to the filename, so dont check + self._apply_failure(os.listdir, name, OSError, False) + def test_listdir(self): + sf0 = set(self.files) f1 = os.listdir(test_support.TESTFN) f2 = os.listdir(unicode(test_support.TESTFN, sys.getfilesystemencoding())) - sf2 = set(os.path.join(unicode(test_support.TESTFN), f) - for f in f2) - self.assertEqual(len(f1), len(self.files)) - self.assertEqual(sf2, set(self.files)) + if sys.platform == 'darwin': + # Mac OS X returns canonically decomposed Unicode (Normal Form D) + # http://developer.apple.com/mac/library/qa/qa2001/qa1173.html + sf0 = set(normalize('NFD', unicode(f)) for f in self.files) + f2 = [normalize('NFD', unicode(f)) for f in f2] + sf2 = set(os.path.join(unicode(test_support.TESTFN), f) for f in f2) + self.assertEqual(sf0, sf2) + self.assertEqual(len(f1), len(f2)) def test_rename(self): for name in self.files: - os.rename(name,"tmp") - os.rename("tmp",name) + os.rename(name, "tmp") + os.rename("tmp", name) def test_directory(self): - dirname = os.path.join(test_support.TESTFN,u'Gr\xfc\xdf-\u66e8\u66e9\u66eb') + dirname = os.path.join(test_support.TESTFN, + u'Gr\xfc\xdf-\u66e8\u66e9\u66eb') filename = u'\xdf-\u66e8\u66e9\u66eb' oldwd = os.getcwd() os.mkdir(dirname) os.chdir(dirname) - f = open(filename, 'w') - f.write((filename + '\n').encode("utf-8")) - f.close() - os.access(filename,os.R_OK) - os.remove(filename) - os.chdir(oldwd) - os.rmdir(dirname) + try: + with open(filename, 'w') as f: + f.write((filename + '\n').encode("utf-8")) + os.access(filename,os.R_OK) + os.remove(filename) + finally: + os.chdir(oldwd) + os.rmdir(dirname) + + +class UnicodeNFCFileTests(UnicodeFileTests): + normal_form = 'NFC' + + +class UnicodeNFDFileTests(UnicodeFileTests): + normal_form = 'NFD' + + +class UnicodeNFKCFileTests(UnicodeFileTests): + normal_form = 'NFKC' + + +class UnicodeNFKDFileTests(UnicodeFileTests): + normal_form = 'NFKD' + def test_main(): try: - test_support.run_unittest(UnicodeFileTests) + test_support.run_unittest( + UnicodeFileTests, + UnicodeNFCFileTests, + UnicodeNFDFileTests, + UnicodeNFKCFileTests, + UnicodeNFKDFileTests, + ) finally: deltree(test_support.TESTFN) + if __name__ == "__main__": test_main() Modified: python/trunk/Misc/NEWS ============================================================================== --- python/trunk/Misc/NEWS (original) +++ python/trunk/Misc/NEWS Sun Mar 21 19:00:38 2010 @@ -98,6 +98,9 @@ Tests ----- +- Issue #8180: Fix test_pep277 on OS X and add more tests for special Unicode + normalization cases. + - Issue #7783: test.test_support.open_urlresource invalidates the outdated files from the local cache. From python-checkins at python.org Sun Mar 21 19:47:13 2010 From: python-checkins at python.org (andrew.kuchling) Date: Sun, 21 Mar 2010 19:47:13 +0100 (CET) Subject: [Python-checkins] r79208 - python/trunk/Doc/whatsnew/2.7.rst Message-ID: <20100321184713.02EC9FC8C@mail.python.org> Author: andrew.kuchling Date: Sun Mar 21 19:47:12 2010 New Revision: 79208 Log: Add items Modified: python/trunk/Doc/whatsnew/2.7.rst Modified: python/trunk/Doc/whatsnew/2.7.rst ============================================================================== --- python/trunk/Doc/whatsnew/2.7.rst (original) +++ python/trunk/Doc/whatsnew/2.7.rst Sun Mar 21 19:47:12 2010 @@ -636,7 +636,10 @@ * The :mod:`ctypes` module now always converts ``None`` to a C NULL pointer for arguments declared as pointers. (Changed by Thomas - Heller; :issue:`4606`.) + Heller; :issue:`4606`.) The underlying `libffi library + `__ has been updated to version + 3.0.9, containing various fixes for different platforms. (Updated + by Matthias Klose; :issue:`8142`.) * New method: the :mod:`datetime` module's :class:`timedelta` class gained a :meth:`total_seconds` method that returns the number of seconds @@ -794,6 +797,10 @@ contributed by Travis H.; :issue:`6508`. Support for initgroups added by Jean-Paul Calderone; :issue:`7333`.) + The :func:`os.fork` function now re-initializes the import lock in + the child process; this fixes problems on Solaris when :func:`fork` + is called from a thread. (Fixed by Zsolt Cserna; :issue:`7242`.) + The :func:`normpath` function now preserves Unicode; if its input path is a Unicode string, the return value is also a Unicode string. (Fixed by Matt Giuca; :issue:`5827`.) @@ -827,13 +834,25 @@ to store data. (Contributed by Tarek Ziad?; :issue:`6693`.) + The :mod:`site` module now reports exceptions occurring + when the :mod:`sitecustomize` module is imported, and will no longer + catch and swallow the :exc:`KeyboardError` exception. (Fixed by + Victor Stinner; :issue:`3137`.) + * The :mod:`socket` module's :class:`SSL` objects now support the buffer API, which fixed a test suite failure. (Fixed by Antoine - Pitrou; :issue:`7133`.) The :func:`create_connection` function + Pitrou; :issue:`7133`.) + + The :func:`create_connection` function gained a *source_address* parameter, a ``(host, port)`` 2-tuple giving the source address that will be used for the connection. (Contributed by Eldon Ziegler; :issue:`3972`.) + The :meth:`recv_into` and `recvfrom_into` methods will now write + into objects that support the buffer API, most usefully + the :class:`bytearray` and :class:`memoryview` objects. (Implemented by + Antoine Pitrou; :issue:`8104`.) + * The :mod:`SocketServer` module's :class:`TCPServer` class now has a :attr:`disable_nagle_algorithm` class attribute. The default value is False; if overridden to be True, @@ -963,6 +982,11 @@ information like the list of installation paths and the configuration variables relevant for the current platform. (contributed by Tarek) +Updated module: ElementTree 1.3 +--------------------------------- + +XXX write this. + .. ====================================================================== .. whole new modules get described in subsections here @@ -1365,9 +1389,10 @@ * Two benchmark scripts, :file:`iobench` and :file:`ccbench`, were added to the :file:`Tools` directory. :file:`iobench` measures the speed of built-in file I/O objects (as returned by :func:`open`) - while performing various operations, and :file:`ccbench` is a concurrency - benchmark that tries to measure computing throughput and thread switching - latency when performing several tasks using a varying number of threads. + while performing various operations, and :file:`ccbench` is a + concurrency benchmark that tries to measure computing throughput, + thread switching latency, and IO processing bandwidth when + performing several tasks using a varying number of threads. * When importing a module from a :file:`.pyc` or :file:`.pyo` file with an existing :file:`.py` counterpart, the :attr:`co_filename` From python-checkins at python.org Sun Mar 21 19:49:50 2010 From: python-checkins at python.org (florent.xicluna) Date: Sun, 21 Mar 2010 19:49:50 +0100 (CET) Subject: [Python-checkins] r79209 - in python/branches/py3k: Lib/test/test_pep277.py Misc/NEWS Message-ID: <20100321184950.BD0E8DEBA@mail.python.org> Author: florent.xicluna Date: Sun Mar 21 19:49:50 2010 New Revision: 79209 Log: Merged revisions 79207 via svnmerge from svn+ssh://pythondev at svn.python.org/python/trunk ........ r79207 | florent.xicluna | 2010-03-21 19:00:38 +0100 (dim, 21 mar 2010) | 2 lines #8180: Fix test_pep277 on OS X and add more tests for special Unicode normalization cases. ........ Modified: python/branches/py3k/ (props changed) python/branches/py3k/Lib/test/test_pep277.py python/branches/py3k/Misc/NEWS Modified: python/branches/py3k/Lib/test/test_pep277.py ============================================================================== --- python/branches/py3k/Lib/test/test_pep277.py (original) +++ python/branches/py3k/Lib/test/test_pep277.py Sun Mar 21 19:49:50 2010 @@ -1,6 +1,7 @@ # Test the Unicode versions of normal file functions # open, os.open, os.stat. os.listdir, os.rename, os.remove, os.mkdir, os.chdir, os.rmdir import sys, os, unittest +from unicodedata import normalize from test import support filenames = [ @@ -13,8 +14,21 @@ '\u05d4\u05e9\u05e7\u05e6\u05e5\u05e1', '\u66e8\u66e9\u66eb', '\u66e8\u05e9\u3093\u0434\u0393\xdf', + # Specific code points: fn, NFC(fn) and NFKC(fn) all differents + '\u2000\u2000\u2000A', + '\u2001\u2001\u2001A', + '\u2003\u2003\u2003A', # == NFC('\u2001\u2001\u2001A') + '\u0020\u0020\u0020A', # '\u0020' == ' ' == NFKC('\u2000') + # '\u0020' == NFKC('\u2001') == NFKC('\u2003') + '\u1fee\u1ffd', + # Specific code points: NFC(fn), NFD(fn), NFKC(fn) and NFKD(fn) all differents + '\u0385\u03d3\u03d4', + '\u00a8\u0301\u03d2\u0301\u03d2\u0308', # == NFD('\u0385\u03d3\u03d4') + '\u0020\u0308\u0301\u038e\u03ab', # == NFKC('\u0385\u03d3\u03d4') + '\u1e9b\u1fc1\u1fcd\u1fce\u1fcf\u1fdd\u1fde\u1fdf\u1fed', ] + # Destroy directory dirname and all files under it, to one level. def deltree(dirname): # Don't hide legitimate errors: if one of these suckers exists, it's @@ -25,43 +39,51 @@ os.unlink(os.path.join(dirname, fname)) os.rmdir(dirname) + class UnicodeFileTests(unittest.TestCase): - files = [os.path.join(support.TESTFN, f) for f in filenames] + files = set(filenames) + normal_form = None def setUp(self): try: os.mkdir(support.TESTFN) except OSError: pass + files = set() for name in self.files: + name = os.path.join(support.TESTFN, self.norm(name)) try: f = open(name, 'wb') except UnicodeEncodeError: if not os.path.supports_unicode_filenames: - raise unittest.SkipTest("only NT+ and systems with Unicode" - "-friendly filesystem encoding") + self.skipTest("only NT+ and systems with Unicode-friendly" + "filesystem encoding") f.write((name+'\n').encode("utf-8")) f.close() os.stat(name) + files.add(name) + self.files = files def tearDown(self): deltree(support.TESTFN) + def norm(self, s): + if self.normal_form: + return normalize(self.normal_form, s) + return s + def _apply_failure(self, fn, filename, expected_exception, check_fn_in_exception = True): - try: + with self.assertRaises(expected_exception) as c: fn(filename) - raise support.TestFailed("Expected to fail calling '%s(%r)'" - % (fn.__name__, filename)) - except expected_exception as details: - # the "filename" exception attribute may be encoded - if isinstance(details.filename, bytes): - filename = filename.encode(sys.getfilesystemencoding()) - if check_fn_in_exception and details.filename != filename: - raise support.TestFailed("Function '%s(%r) failed with " - "bad filename in the exception: %r" - % (fn.__name__, filename, - details.filename)) + exc_filename = c.exception.filename + # the "filename" exception attribute may be encoded + if isinstance(exc_filename, bytes): + filename = filename.encode(sys.getfilesystemencoding()) + if check_fn_in_exception: + self.assertEqual(exc_filename, filename, "Function '%s(%r) failed " + "with bad filename in the exception: %r" % + (fn.__name__, filename, exc_filename)) def test_failures(self): # Pass non-existing Unicode filenames all over the place. @@ -82,39 +104,90 @@ f.close() os.stat(name) + def test_normalize(self): + files = set(self.files) + others = set() + for nf in set(['NFC', 'NFD', 'NFKC', 'NFKD']): + others |= set(normalize(nf, file) for file in files) + others -= files + if sys.platform == 'darwin': + files = set(normalize('NFD', file) for file in files) + for name in others: + if sys.platform == 'darwin' and normalize('NFD', name) in files: + # Mac OS X decomposes Unicode names, using Normal Form D. + # http://developer.apple.com/mac/library/qa/qa2001/qa1173.html + os.stat(name) + continue + self._apply_failure(open, name, IOError) + self._apply_failure(os.stat, name, OSError) + self._apply_failure(os.chdir, name, OSError) + self._apply_failure(os.rmdir, name, OSError) + self._apply_failure(os.remove, name, OSError) + # listdir may append a wildcard to the filename, so dont check + self._apply_failure(os.listdir, name, OSError, False) + def test_listdir(self): - f1 = os.listdir(support.TESTFN) - f2 = os.listdir(str(support.TESTFN.encode("utf-8"), - sys.getfilesystemencoding())) - sf2 = set(os.path.join(str(support.TESTFN), f) - for f in f2) - self.assertEqual(len(f1), len(self.files)) - self.assertEqual(sf2, set(self.files)) + sf0 = set(self.files) + f1 = os.listdir(support.TESTFN.encode(sys.getfilesystemencoding())) + f2 = os.listdir(support.TESTFN) + if sys.platform == 'darwin': + # Mac OS X returns canonically decomposed Unicode (Normal Form D) + # http://developer.apple.com/mac/library/qa/qa2001/qa1173.html + sf0 = set(normalize('NFD', f) for f in self.files) + f2 = [normalize('NFD', f) for f in f2] + sf2 = set(os.path.join(support.TESTFN, f) for f in f2) + self.assertEqual(sf0, sf2) + self.assertEqual(len(f1), len(f2)) def test_rename(self): for name in self.files: - os.rename(name,"tmp") - os.rename("tmp",name) + os.rename(name, "tmp") + os.rename("tmp", name) def test_directory(self): - dirname = os.path.join(support.TESTFN,'Gr\xfc\xdf-\u66e8\u66e9\u66eb') + dirname = os.path.join(support.TESTFN, 'Gr\xfc\xdf-\u66e8\u66e9\u66eb') filename = '\xdf-\u66e8\u66e9\u66eb' oldwd = os.getcwd() os.mkdir(dirname) os.chdir(dirname) - f = open(filename, 'wb') - f.write((filename + '\n').encode("utf-8")) - f.close() - os.access(filename,os.R_OK) - os.remove(filename) - os.chdir(oldwd) - os.rmdir(dirname) + try: + with open(filename, 'wb') as f: + f.write((filename + '\n').encode("utf-8")) + os.access(filename,os.R_OK) + os.remove(filename) + finally: + os.chdir(oldwd) + os.rmdir(dirname) + + +class UnicodeNFCFileTests(UnicodeFileTests): + normal_form = 'NFC' + + +class UnicodeNFDFileTests(UnicodeFileTests): + normal_form = 'NFD' + + +class UnicodeNFKCFileTests(UnicodeFileTests): + normal_form = 'NFKC' + + +class UnicodeNFKDFileTests(UnicodeFileTests): + normal_form = 'NFKD' + def test_main(): try: - support.run_unittest(UnicodeFileTests) + support.run_unittest( + UnicodeFileTests, + UnicodeNFCFileTests, + UnicodeNFDFileTests, + UnicodeNFKCFileTests, + UnicodeNFKDFileTests, + ) finally: deltree(support.TESTFN) + if __name__ == "__main__": test_main() Modified: python/branches/py3k/Misc/NEWS ============================================================================== --- python/branches/py3k/Misc/NEWS (original) +++ python/branches/py3k/Misc/NEWS Sun Mar 21 19:49:50 2010 @@ -914,6 +914,9 @@ Tests ----- +- Issue #8180: Fix test_pep277 on OS X and add more tests for special Unicode + normalization cases. + - Issue #7783: test.support.open_urlresource invalidates the outdated files from the local cache. From python-checkins at python.org Sun Mar 21 19:56:52 2010 From: python-checkins at python.org (georg.brandl) Date: Sun, 21 Mar 2010 19:56:52 +0100 (CET) Subject: [Python-checkins] r79210 - python/branches/release26-maint Message-ID: <20100321185652.07857FBFA@mail.python.org> Author: georg.brandl Date: Sun Mar 21 19:56:51 2010 New Revision: 79210 Log: Blocked revisions 75866-75867,75954,75956-75957 via svnmerge ........ r75866 | georg.brandl | 2009-10-27 21:52:02 +0100 (Di, 27 Okt 2009) | 1 line Add a regrtest option to re-run in verbose mode immediately after a test fails, and use that option on the buildbots. ........ r75867 | georg.brandl | 2009-10-27 21:55:44 +0100 (Di, 27 Okt 2009) | 1 line Reformat the regrtest command-line option help and group the options into sections. ........ r75954 | georg.brandl | 2009-10-29 21:53:00 +0100 (Do, 29 Okt 2009) | 1 line Use constants instead of magic integers for test result. Do not re-run with --verbose3 for environment changing tests. ........ r75956 | georg.brandl | 2009-10-29 22:16:34 +0100 (Do, 29 Okt 2009) | 1 line I do not think the "railroad" program mentioned is still available. ........ r75957 | georg.brandl | 2009-10-29 22:44:56 +0100 (Do, 29 Okt 2009) | 1 line Fix constant name. ........ Modified: python/branches/release26-maint/ (props changed) From python-checkins at python.org Sun Mar 21 20:01:16 2010 From: python-checkins at python.org (georg.brandl) Date: Sun, 21 Mar 2010 20:01:16 +0100 (CET) Subject: [Python-checkins] r79211 - in python/branches/release26-maint: Doc/library/functions.rst Doc/library/operator.rst Doc/library/profile.rst Doc/library/string.rst Doc/library/turtle.rst Doc/library/xml.dom.rst Doc/library/zipfile.rst Misc/Porting Modules/mathmodule.c Modules/operator.c Message-ID: <20100321190116.2D49BE4D9@mail.python.org> Author: georg.brandl Date: Sun Mar 21 20:01:15 2010 New Revision: 79211 Log: Merged revisions 75952-75953,75955,76105,76143,76223,76259,76326,76376-76377 via svnmerge from svn+ssh://pythondev at svn.python.org/python/trunk ........ r75952 | georg.brandl | 2009-10-29 21:38:32 +0100 (Do, 29 Okt 2009) | 1 line Use the correct function name in docstring. ........ r75953 | georg.brandl | 2009-10-29 21:39:50 +0100 (Do, 29 Okt 2009) | 1 line Remove mention of the old -X command line switch. ........ r75955 | georg.brandl | 2009-10-29 21:54:03 +0100 (Do, 29 Okt 2009) | 1 line Use a single style for all the docstrings in the math module. ........ r76105 | georg.brandl | 2009-11-04 08:38:12 +0100 (Mi, 04 Nov 2009) | 1 line #7259: show correct equivalent for operator.i* operations in docstring; fix minor issues in operator docs. ........ r76143 | georg.brandl | 2009-11-07 09:26:07 +0100 (Sa, 07 Nov 2009) | 1 line #7271: fix typo. ........ r76223 | georg.brandl | 2009-11-12 09:29:46 +0100 (Do, 12 Nov 2009) | 1 line Give the profile module a module directive. ........ r76259 | georg.brandl | 2009-11-14 12:50:51 +0100 (Sa, 14 Nov 2009) | 1 line Fix terminology. ........ r76326 | georg.brandl | 2009-11-16 17:44:05 +0100 (Mo, 16 Nov 2009) | 1 line #7302: fix link. ........ r76376 | georg.brandl | 2009-11-18 20:39:14 +0100 (Mi, 18 Nov 2009) | 1 line upcase Python ........ r76377 | georg.brandl | 2009-11-18 21:05:15 +0100 (Mi, 18 Nov 2009) | 1 line Fix markup. ........ Modified: python/branches/release26-maint/ (props changed) python/branches/release26-maint/Doc/library/functions.rst python/branches/release26-maint/Doc/library/operator.rst python/branches/release26-maint/Doc/library/profile.rst python/branches/release26-maint/Doc/library/string.rst python/branches/release26-maint/Doc/library/turtle.rst python/branches/release26-maint/Doc/library/xml.dom.rst python/branches/release26-maint/Doc/library/zipfile.rst python/branches/release26-maint/Misc/Porting python/branches/release26-maint/Modules/mathmodule.c python/branches/release26-maint/Modules/operator.c Modified: python/branches/release26-maint/Doc/library/functions.rst ============================================================================== --- python/branches/release26-maint/Doc/library/functions.rst (original) +++ python/branches/release26-maint/Doc/library/functions.rst Sun Mar 21 20:01:15 2010 @@ -173,7 +173,7 @@ .. note:: - When compiling a string with multi-line statements, line endings must be + When compiling a string with multi-line code, line endings must be represented by a single newline character (``'\n'``), and the input must be terminated by at least one newline character. If line endings are represented by ``'\r\n'``, use :meth:`str.replace` to change them into Modified: python/branches/release26-maint/Doc/library/operator.rst ============================================================================== --- python/branches/release26-maint/Doc/library/operator.rst (original) +++ python/branches/release26-maint/Doc/library/operator.rst Sun Mar 21 20:01:15 2010 @@ -117,6 +117,14 @@ .. versionadded:: 2.2 +.. function:: index(a) + __index__(a) + + Return *a* converted to an integer. Equivalent to ``a.__index__()``. + + .. versionadded:: 2.5 + + .. function:: inv(obj) invert(obj) __inv__(obj) @@ -149,7 +157,7 @@ .. function:: neg(obj) __neg__(obj) - Return *obj* negated. + Return *obj* negated (``-obj``). .. function:: or_(a, b) @@ -161,7 +169,7 @@ .. function:: pos(obj) __pos__(obj) - Return *obj* positive. + Return *obj* positive (``+obj``). .. function:: pow(a, b) @@ -199,15 +207,7 @@ Return the bitwise exclusive or of *a* and *b*. -.. function:: index(a) - __index__(a) - - Return *a* converted to an integer. Equivalent to ``a.__index__()``. - - .. versionadded:: 2.5 - - -Operations which work with sequences include: +Operations which work with sequences (some of them with mappings too) include: .. function:: concat(a, b) __concat__(a, b) @@ -359,7 +359,7 @@ .. function:: ilshift(a, b) __ilshift__(a, b) - ``a = ilshift(a, b)`` is equivalent to ``a <``\ ``<= b``. + ``a = ilshift(a, b)`` is equivalent to ``a <<= b``. .. versionadded:: 2.5 @@ -572,79 +572,81 @@ This table shows how abstract operations correspond to operator symbols in the Python syntax and the functions in the :mod:`operator` module. -+-----------------------+-------------------------+---------------------------------+ -| Operation | Syntax | Function | -+=======================+=========================+=================================+ -| Addition | ``a + b`` | ``add(a, b)`` | -+-----------------------+-------------------------+---------------------------------+ -| Concatenation | ``seq1 + seq2`` | ``concat(seq1, seq2)`` | -+-----------------------+-------------------------+---------------------------------+ -| Containment Test | ``obj in seq`` | ``contains(seq, obj)`` | -+-----------------------+-------------------------+---------------------------------+ -| Division | ``a / b`` | ``div(a, b)`` (without | -| | | ``__future__.division``) | -+-----------------------+-------------------------+---------------------------------+ -| Division | ``a / b`` | ``truediv(a, b)`` (with | -| | | ``__future__.division``) | -+-----------------------+-------------------------+---------------------------------+ -| Division | ``a // b`` | ``floordiv(a, b)`` | -+-----------------------+-------------------------+---------------------------------+ -| Bitwise And | ``a & b`` | ``and_(a, b)`` | -+-----------------------+-------------------------+---------------------------------+ -| Bitwise Exclusive Or | ``a ^ b`` | ``xor(a, b)`` | -+-----------------------+-------------------------+---------------------------------+ -| Bitwise Inversion | ``~ a`` | ``invert(a)`` | -+-----------------------+-------------------------+---------------------------------+ -| Bitwise Or | ``a | b`` | ``or_(a, b)`` | -+-----------------------+-------------------------+---------------------------------+ -| Exponentiation | ``a ** b`` | ``pow(a, b)`` | -+-----------------------+-------------------------+---------------------------------+ -| Identity | ``a is b`` | ``is_(a, b)`` | -+-----------------------+-------------------------+---------------------------------+ -| Identity | ``a is not b`` | ``is_not(a, b)`` | -+-----------------------+-------------------------+---------------------------------+ -| Indexed Assignment | ``obj[k] = v`` | ``setitem(obj, k, v)`` | -+-----------------------+-------------------------+---------------------------------+ -| Indexed Deletion | ``del obj[k]`` | ``delitem(obj, k)`` | -+-----------------------+-------------------------+---------------------------------+ -| Indexing | ``obj[k]`` | ``getitem(obj, k)`` | -+-----------------------+-------------------------+---------------------------------+ -| Left Shift | ``a << b`` | ``lshift(a, b)`` | -+-----------------------+-------------------------+---------------------------------+ -| Modulo | ``a % b`` | ``mod(a, b)`` | -+-----------------------+-------------------------+---------------------------------+ -| Multiplication | ``a * b`` | ``mul(a, b)`` | -+-----------------------+-------------------------+---------------------------------+ -| Negation (Arithmetic) | ``- a`` | ``neg(a)`` | -+-----------------------+-------------------------+---------------------------------+ -| Negation (Logical) | ``not a`` | ``not_(a)`` | -+-----------------------+-------------------------+---------------------------------+ -| Right Shift | ``a >> b`` | ``rshift(a, b)`` | -+-----------------------+-------------------------+---------------------------------+ -| Sequence Repetition | ``seq * i`` | ``repeat(seq, i)`` | -+-----------------------+-------------------------+---------------------------------+ -| Slice Assignment | ``seq[i:j] = values`` | ``setslice(seq, i, j, values)`` | -+-----------------------+-------------------------+---------------------------------+ -| Slice Deletion | ``del seq[i:j]`` | ``delslice(seq, i, j)`` | -+-----------------------+-------------------------+---------------------------------+ -| Slicing | ``seq[i:j]`` | ``getslice(seq, i, j)`` | -+-----------------------+-------------------------+---------------------------------+ -| String Formatting | ``s % obj`` | ``mod(s, obj)`` | -+-----------------------+-------------------------+---------------------------------+ -| Subtraction | ``a - b`` | ``sub(a, b)`` | -+-----------------------+-------------------------+---------------------------------+ -| Truth Test | ``obj`` | ``truth(obj)`` | -+-----------------------+-------------------------+---------------------------------+ -| Ordering | ``a < b`` | ``lt(a, b)`` | -+-----------------------+-------------------------+---------------------------------+ -| Ordering | ``a <= b`` | ``le(a, b)`` | -+-----------------------+-------------------------+---------------------------------+ -| Equality | ``a == b`` | ``eq(a, b)`` | -+-----------------------+-------------------------+---------------------------------+ -| Difference | ``a != b`` | ``ne(a, b)`` | -+-----------------------+-------------------------+---------------------------------+ -| Ordering | ``a >= b`` | ``ge(a, b)`` | -+-----------------------+-------------------------+---------------------------------+ -| Ordering | ``a > b`` | ``gt(a, b)`` | -+-----------------------+-------------------------+---------------------------------+ ++-----------------------+-------------------------+---------------------------------------+ +| Operation | Syntax | Function | ++=======================+=========================+=======================================+ +| Addition | ``a + b`` | ``add(a, b)`` | ++-----------------------+-------------------------+---------------------------------------+ +| Concatenation | ``seq1 + seq2`` | ``concat(seq1, seq2)`` | ++-----------------------+-------------------------+---------------------------------------+ +| Containment Test | ``obj in seq`` | ``contains(seq, obj)`` | ++-----------------------+-------------------------+---------------------------------------+ +| Division | ``a / b`` | ``div(a, b)`` (without | +| | | ``__future__.division``) | ++-----------------------+-------------------------+---------------------------------------+ +| Division | ``a / b`` | ``truediv(a, b)`` (with | +| | | ``__future__.division``) | ++-----------------------+-------------------------+---------------------------------------+ +| Division | ``a // b`` | ``floordiv(a, b)`` | ++-----------------------+-------------------------+---------------------------------------+ +| Bitwise And | ``a & b`` | ``and_(a, b)`` | ++-----------------------+-------------------------+---------------------------------------+ +| Bitwise Exclusive Or | ``a ^ b`` | ``xor(a, b)`` | ++-----------------------+-------------------------+---------------------------------------+ +| Bitwise Inversion | ``~ a`` | ``invert(a)`` | ++-----------------------+-------------------------+---------------------------------------+ +| Bitwise Or | ``a | b`` | ``or_(a, b)`` | ++-----------------------+-------------------------+---------------------------------------+ +| Exponentiation | ``a ** b`` | ``pow(a, b)`` | ++-----------------------+-------------------------+---------------------------------------+ +| Identity | ``a is b`` | ``is_(a, b)`` | ++-----------------------+-------------------------+---------------------------------------+ +| Identity | ``a is not b`` | ``is_not(a, b)`` | ++-----------------------+-------------------------+---------------------------------------+ +| Indexed Assignment | ``obj[k] = v`` | ``setitem(obj, k, v)`` | ++-----------------------+-------------------------+---------------------------------------+ +| Indexed Deletion | ``del obj[k]`` | ``delitem(obj, k)`` | ++-----------------------+-------------------------+---------------------------------------+ +| Indexing | ``obj[k]`` | ``getitem(obj, k)`` | ++-----------------------+-------------------------+---------------------------------------+ +| Left Shift | ``a << b`` | ``lshift(a, b)`` | ++-----------------------+-------------------------+---------------------------------------+ +| Modulo | ``a % b`` | ``mod(a, b)`` | ++-----------------------+-------------------------+---------------------------------------+ +| Multiplication | ``a * b`` | ``mul(a, b)`` | ++-----------------------+-------------------------+---------------------------------------+ +| Negation (Arithmetic) | ``- a`` | ``neg(a)`` | ++-----------------------+-------------------------+---------------------------------------+ +| Negation (Logical) | ``not a`` | ``not_(a)`` | ++-----------------------+-------------------------+---------------------------------------+ +| Positive | ``+ a`` | ``pos(a)`` | ++-----------------------+-------------------------+---------------------------------------+ +| Right Shift | ``a >> b`` | ``rshift(a, b)`` | ++-----------------------+-------------------------+---------------------------------------+ +| Sequence Repetition | ``seq * i`` | ``repeat(seq, i)`` | ++-----------------------+-------------------------+---------------------------------------+ +| Slice Assignment | ``seq[i:j] = values`` | ``setitem(seq, slice(i, j), values)`` | ++-----------------------+-------------------------+---------------------------------------+ +| Slice Deletion | ``del seq[i:j]`` | ``delitem(seq, slice(i, j))`` | ++-----------------------+-------------------------+---------------------------------------+ +| Slicing | ``seq[i:j]`` | ``getitem(seq, slice(i, j))`` | ++-----------------------+-------------------------+---------------------------------------+ +| String Formatting | ``s % obj`` | ``mod(s, obj)`` | ++-----------------------+-------------------------+---------------------------------------+ +| Subtraction | ``a - b`` | ``sub(a, b)`` | ++-----------------------+-------------------------+---------------------------------------+ +| Truth Test | ``obj`` | ``truth(obj)`` | ++-----------------------+-------------------------+---------------------------------------+ +| Ordering | ``a < b`` | ``lt(a, b)`` | ++-----------------------+-------------------------+---------------------------------------+ +| Ordering | ``a <= b`` | ``le(a, b)`` | ++-----------------------+-------------------------+---------------------------------------+ +| Equality | ``a == b`` | ``eq(a, b)`` | ++-----------------------+-------------------------+---------------------------------------+ +| Difference | ``a != b`` | ``ne(a, b)`` | ++-----------------------+-------------------------+---------------------------------------+ +| Ordering | ``a >= b`` | ``ge(a, b)`` | ++-----------------------+-------------------------+---------------------------------------+ +| Ordering | ``a > b`` | ``gt(a, b)`` | ++-----------------------+-------------------------+---------------------------------------+ Modified: python/branches/release26-maint/Doc/library/profile.rst ============================================================================== --- python/branches/release26-maint/Doc/library/profile.rst (original) +++ python/branches/release26-maint/Doc/library/profile.rst Sun Mar 21 20:01:15 2010 @@ -7,6 +7,8 @@ .. sectionauthor:: James Roskind +.. module:: profile + :synopsis: Python source profiler. .. index:: single: InfoSeek Corporation Modified: python/branches/release26-maint/Doc/library/string.rst ============================================================================== --- python/branches/release26-maint/Doc/library/string.rst (original) +++ python/branches/release26-maint/Doc/library/string.rst Sun Mar 21 20:01:15 2010 @@ -548,13 +548,12 @@ templates containing dangling delimiters, unmatched braces, or placeholders that are not valid Python identifiers. -:class:`Template` instances also provide one public data attribute: + :class:`Template` instances also provide one public data attribute: + .. attribute:: template -.. attribute:: string.template - - This is the object passed to the constructor's *template* argument. In general, - you shouldn't change it, but read-only access is not enforced. + This is the object passed to the constructor's *template* argument. In + general, you shouldn't change it, but read-only access is not enforced. Here is an example of how to use a Template: Modified: python/branches/release26-maint/Doc/library/turtle.rst ============================================================================== --- python/branches/release26-maint/Doc/library/turtle.rst (original) +++ python/branches/release26-maint/Doc/library/turtle.rst Sun Mar 21 20:01:15 2010 @@ -1901,7 +1901,7 @@ Subclass of TurtleScreen, with :ref:`four methods added `. -.. class:: ScrolledCavas(master) +.. class:: ScrolledCanvas(master) :param master: some Tkinter widget to contain the ScrolledCanvas, i.e. a Tkinter-canvas with scrollbars added Modified: python/branches/release26-maint/Doc/library/xml.dom.rst ============================================================================== --- python/branches/release26-maint/Doc/library/xml.dom.rst (original) +++ python/branches/release26-maint/Doc/library/xml.dom.rst Sun Mar 21 20:01:15 2010 @@ -79,7 +79,7 @@ `Document Object Model (DOM) Level 1 Specification `_ The W3C recommendation for the DOM supported by :mod:`xml.dom.minidom`. - `Python Language Mapping Specification `_ + `Python Language Mapping Specification `_ This specifies the mapping from OMG IDL to Python. Modified: python/branches/release26-maint/Doc/library/zipfile.rst ============================================================================== --- python/branches/release26-maint/Doc/library/zipfile.rst (original) +++ python/branches/release26-maint/Doc/library/zipfile.rst Sun Mar 21 20:01:15 2010 @@ -22,7 +22,7 @@ (that is ZIP files that are more than 4 GByte in size). It supports decryption of encrypted files in ZIP archives, but it currently cannot create an encrypted file. Decryption is extremely slow as it is -implemented in native python rather than C. +implemented in native Python rather than C. For other archive formats, see the :mod:`bz2`, :mod:`gzip`, and :mod:`tarfile` modules. Modified: python/branches/release26-maint/Misc/Porting ============================================================================== --- python/branches/release26-maint/Misc/Porting (original) +++ python/branches/release26-maint/Misc/Porting Sun Mar 21 20:01:15 2010 @@ -31,8 +31,7 @@ it out of the config.c file. Bang on it until you get a >>> prompt. (You may have to disable the -importing of "site.py" and "exceptions.py" by passing -X and -S -options. +importing of "site.py" by passing the -S options.) Then bang on it until it executes very simple Python statements. Modified: python/branches/release26-maint/Modules/mathmodule.c ============================================================================== --- python/branches/release26-maint/Modules/mathmodule.c (original) +++ python/branches/release26-maint/Modules/mathmodule.c Sun Mar 21 20:01:15 2010 @@ -338,7 +338,7 @@ "ceil(x)\n\nReturn the ceiling of x as a float.\n" "This is the smallest integral value >= x.") FUNC2(copysign, copysign, - "copysign(x,y)\n\nReturn x with the sign of y.") + "copysign(x, y)\n\nReturn x with the sign of y.") FUNC1(cos, cos, 0, "cos(x)\n\nReturn the cosine of x (measured in radians).") FUNC1(cosh, cosh, 1, @@ -351,8 +351,8 @@ "floor(x)\n\nReturn the floor of x as a float.\n" "This is the largest integral value <= x.") FUNC1(log1p, log1p, 1, - "log1p(x)\n\nReturn the natural logarithm of 1+x (base e).\n\ - The result is computed in a way which is accurate for x near zero.") + "log1p(x)\n\nReturn the natural logarithm of 1+x (base e).\n" + "The result is computed in a way which is accurate for x near zero.") FUNC1(sin, sin, 0, "sin(x)\n\nReturn the sine of x (measured in radians).") FUNC1(sinh, sinh, 1, @@ -581,7 +581,7 @@ #undef NUM_PARTIALS PyDoc_STRVAR(math_fsum_doc, -"sum(iterable)\n\n\ +"fsum(iterable)\n\n\ Return an accurate floating point sum of values in the iterable.\n\ Assumes IEEE-754 floating point arithmetic."); @@ -739,7 +739,8 @@ } PyDoc_STRVAR(math_ldexp_doc, -"ldexp(x, i) -> x * (2**i)"); +"ldexp(x, i)\n\n\ +Return x * (2**i)."); static PyObject * math_modf(PyObject *self, PyObject *arg) @@ -830,7 +831,8 @@ } PyDoc_STRVAR(math_log_doc, -"log(x[, base]) -> the logarithm of x to the given base.\n\ +"log(x[, base])\n\n\ +Return the logarithm of x to the given base.\n\ If the base not specified, returns the natural logarithm (base e) of x."); static PyObject * @@ -840,7 +842,7 @@ } PyDoc_STRVAR(math_log10_doc, -"log10(x) -> the base 10 logarithm of x."); +"log10(x)\n\nReturn the base 10 logarithm of x."); static PyObject * math_fmod(PyObject *self, PyObject *args) @@ -873,7 +875,7 @@ } PyDoc_STRVAR(math_fmod_doc, -"fmod(x,y)\n\nReturn fmod(x, y), according to platform C." +"fmod(x, y)\n\nReturn fmod(x, y), according to platform C." " x % y may differ."); static PyObject * @@ -915,7 +917,7 @@ } PyDoc_STRVAR(math_hypot_doc, -"hypot(x,y)\n\nReturn the Euclidean distance, sqrt(x*x + y*y)."); +"hypot(x, y)\n\nReturn the Euclidean distance, sqrt(x*x + y*y)."); /* pow can't use math_2, but needs its own wrapper: the problem is that an infinite result can arise either as a result of overflow @@ -1002,7 +1004,7 @@ } PyDoc_STRVAR(math_pow_doc, -"pow(x,y)\n\nReturn x**y (x to the power of y)."); +"pow(x, y)\n\nReturn x**y (x to the power of y)."); static const double degToRad = Py_MATH_PI / 180.0; static const double radToDeg = 180.0 / Py_MATH_PI; @@ -1017,7 +1019,8 @@ } PyDoc_STRVAR(math_degrees_doc, -"degrees(x) -> converts angle x from radians to degrees"); +"degrees(x)\n\n\ +Convert angle x from radians to degrees."); static PyObject * math_radians(PyObject *self, PyObject *arg) @@ -1029,7 +1032,8 @@ } PyDoc_STRVAR(math_radians_doc, -"radians(x) -> converts angle x from degrees to radians"); +"radians(x)\n\n\ +Convert angle x from degrees to radians."); static PyObject * math_isnan(PyObject *self, PyObject *arg) @@ -1041,8 +1045,8 @@ } PyDoc_STRVAR(math_isnan_doc, -"isnan(x) -> bool\n\ -Checks if float x is not a number (NaN)"); +"isnan(x) -> bool\n\n\ +Check if float x is not a number (NaN)."); static PyObject * math_isinf(PyObject *self, PyObject *arg) @@ -1054,8 +1058,8 @@ } PyDoc_STRVAR(math_isinf_doc, -"isinf(x) -> bool\n\ -Checks if float x is infinite (positive or negative)"); +"isinf(x) -> bool\n\n\ +Check if float x is infinite (positive or negative)."); static PyMethodDef math_methods[] = { {"acos", math_acos, METH_O, math_acos_doc}, Modified: python/branches/release26-maint/Modules/operator.c ============================================================================== --- python/branches/release26-maint/Modules/operator.c (original) +++ python/branches/release26-maint/Modules/operator.c Sun Mar 21 20:01:15 2010 @@ -7,7 +7,7 @@ This module exports a set of functions implemented in C corresponding\n\ to the intrinsic operators of Python. For example, operator.add(x, y)\n\ is equivalent to the expression x+y. The function names are those\n\ -used for special class methods; variants without leading and trailing\n\ +used for special methods; variants without leading and trailing\n\ '__' are also provided for convenience."); #define spam1(OP,AOP) static PyObject *OP(PyObject *s, PyObject *a1) { \ @@ -258,26 +258,26 @@ spam2(and_,__and__, "and_(a, b) -- Same as a & b.") spam2(xor,__xor__, "xor(a, b) -- Same as a ^ b.") spam2(or_,__or__, "or_(a, b) -- Same as a | b.") -spam2(iadd,__iadd__, "iadd(a, b) -- Same as a += b.") -spam2(isub,__isub__, "isub(a, b) -- Same as a -= b.") -spam2(imul,__imul__, "imul(a, b) -- Same as a *= b.") -spam2(idiv,__idiv__, "idiv(a, b) -- Same as a /= b when __future__.division is not in effect.") -spam2(ifloordiv,__ifloordiv__, "ifloordiv(a, b) -- Same as a //= b.") -spam2(itruediv,__itruediv__, "itruediv(a, b) -- Same as a /= b when __future__.division is in effect.") -spam2(imod,__imod__, "imod(a, b) -- Same as a %= b.") -spam2(ilshift,__ilshift__, "ilshift(a, b) -- Same as a <<= b.") -spam2(irshift,__irshift__, "irshift(a, b) -- Same as a >>= b.") -spam2(iand,__iand__, "iand(a, b) -- Same as a &= b.") -spam2(ixor,__ixor__, "ixor(a, b) -- Same as a ^= b.") -spam2(ior,__ior__, "ior(a, b) -- Same as a |= b.") +spam2(iadd,__iadd__, "a = iadd(a, b) -- Same as a += b.") +spam2(isub,__isub__, "a = isub(a, b) -- Same as a -= b.") +spam2(imul,__imul__, "a = imul(a, b) -- Same as a *= b.") +spam2(idiv,__idiv__, "a = idiv(a, b) -- Same as a /= b when __future__.division is not in effect.") +spam2(ifloordiv,__ifloordiv__, "a = ifloordiv(a, b) -- Same as a //= b.") +spam2(itruediv,__itruediv__, "a = itruediv(a, b) -- Same as a /= b when __future__.division is in effect.") +spam2(imod,__imod__, "a = imod(a, b) -- Same as a %= b.") +spam2(ilshift,__ilshift__, "a = ilshift(a, b) -- Same as a <<= b.") +spam2(irshift,__irshift__, "a = irshift(a, b) -- Same as a >>= b.") +spam2(iand,__iand__, "a = iand(a, b) -- Same as a &= b.") +spam2(ixor,__ixor__, "a = ixor(a, b) -- Same as a ^= b.") +spam2(ior,__ior__, "a = ior(a, b) -- Same as a |= b.") spam2(concat,__concat__, "concat(a, b) -- Same as a + b, for a and b sequences.") spam2(repeat,__repeat__, "repeat(a, b) -- Return a * b, where a is a sequence, and b is an integer.") spam2(iconcat,__iconcat__, - "iconcat(a, b) -- Same as a += b, for a and b sequences.") + "a = iconcat(a, b) -- Same as a += b, for a and b sequences.") spam2(irepeat,__irepeat__, - "irepeat(a, b) -- Same as a *= b, where a is a sequence, and b is an integer.") + "a = irepeat(a, b) -- Same as a *= b, where a is a sequence, and b is an integer.") spam2(getitem,__getitem__, "getitem(a, b) -- Same as a[b].") spam2(setitem,__setitem__, @@ -285,7 +285,7 @@ spam2(delitem,__delitem__, "delitem(a, b) -- Same as del a[b].") spam2(pow,__pow__, "pow(a, b) -- Same as a ** b.") -spam2(ipow,__ipow__, "ipow(a, b) -- Same as a **= b.") +spam2(ipow,__ipow__, "a = ipow(a, b) -- Same as a **= b.") spam2(getslice,__getslice__, "getslice(a, b, c) -- Same as a[b:c].") spam2(setslice,__setslice__, From python-checkins at python.org Sun Mar 21 20:01:38 2010 From: python-checkins at python.org (georg.brandl) Date: Sun, 21 Mar 2010 20:01:38 +0100 (CET) Subject: [Python-checkins] r79212 - python/trunk/Misc/Porting Message-ID: <20100321190138.994B5FB99@mail.python.org> Author: georg.brandl Date: Sun Mar 21 20:01:38 2010 New Revision: 79212 Log: Fix plural. Modified: python/trunk/Misc/Porting Modified: python/trunk/Misc/Porting ============================================================================== --- python/trunk/Misc/Porting (original) +++ python/trunk/Misc/Porting Sun Mar 21 20:01:38 2010 @@ -31,7 +31,7 @@ it out of the config.c file. Bang on it until you get a >>> prompt. (You may have to disable the -importing of "site.py" by passing the -S options.) +importing of "site.py" by passing the -S option.) Then bang on it until it executes very simple Python statements. From python-checkins at python.org Sun Mar 21 20:06:52 2010 From: python-checkins at python.org (georg.brandl) Date: Sun, 21 Mar 2010 20:06:52 +0100 (CET) Subject: [Python-checkins] r79213 - in python/branches/release26-maint: Doc/c-api/buffer.rst Doc/c-api/init.rst Doc/faq/design.rst Doc/faq/programming.rst Doc/library/collections.rst Doc/library/functions.rst Doc/library/optparse.rst Doc/library/os.rst Doc/library/stdtypes.rst Doc/library/string.rst Doc/library/subprocess.rst Lib/subprocess.py Message-ID: <20100321190652.0CF79FC3C@mail.python.org> Author: georg.brandl Date: Sun Mar 21 20:06:51 2010 New Revision: 79213 Log: Merged revisions 76538,76559,76882-76883,76886,76891-76892,76920,76924-76925,77081,77084,77086,77092 via svnmerge from svn+ssh://pythondev at svn.python.org/python/trunk ........ r76538 | georg.brandl | 2009-11-26 21:48:25 +0100 (Do, 26 Nov 2009) | 1 line #7400: typo. ........ r76559 | georg.brandl | 2009-11-28 12:11:50 +0100 (Sa, 28 Nov 2009) | 1 line Fix versions and spacing. ........ r76882 | georg.brandl | 2009-12-19 18:30:28 +0100 (Sa, 19 Dez 2009) | 1 line #7527: use standard versionadded tags. ........ r76883 | georg.brandl | 2009-12-19 18:34:32 +0100 (Sa, 19 Dez 2009) | 1 line #7521: remove Py_GetBuildNumber(), which was removed in favor of Py_GetBuildInfo(). ........ r76886 | georg.brandl | 2009-12-19 18:43:33 +0100 (Sa, 19 Dez 2009) | 1 line #7493: review of Design FAQ by Florent Xicluna. ........ r76891 | georg.brandl | 2009-12-19 19:16:31 +0100 (Sa, 19 Dez 2009) | 1 line #7479: add note about function availability on Unices. ........ r76892 | georg.brandl | 2009-12-19 19:20:18 +0100 (Sa, 19 Dez 2009) | 1 line #7480: remove tautology. ........ r76920 | georg.brandl | 2009-12-20 15:20:16 +0100 (So, 20 Dez 2009) | 1 line #7495: backport Programming FAQ review to trunk. ........ r76924 | georg.brandl | 2009-12-20 15:28:05 +0100 (So, 20 Dez 2009) | 1 line Small indentation fix. ........ r76925 | georg.brandl | 2009-12-20 15:33:20 +0100 (So, 20 Dez 2009) | 1 line #7381: subprocess documentation and library docstring consistency fixes. ........ r77081 | georg.brandl | 2009-12-28 08:59:05 +0100 (Mo, 28 Dez 2009) | 1 line #7577: fix signature of PyBuffer_FillInfo(). ........ r77084 | georg.brandl | 2009-12-28 09:01:59 +0100 (Mo, 28 Dez 2009) | 1 line #7586: fix typo. ........ r77086 | georg.brandl | 2009-12-28 09:09:32 +0100 (Mo, 28 Dez 2009) | 1 line #7381: consistency update, and backport avoiding ``None >= 0`` check from py3k. ........ r77092 | georg.brandl | 2009-12-28 09:48:24 +0100 (Mo, 28 Dez 2009) | 1 line #7404: remove reference to non-existing example files. ........ Modified: python/branches/release26-maint/ (props changed) python/branches/release26-maint/Doc/c-api/buffer.rst python/branches/release26-maint/Doc/c-api/init.rst python/branches/release26-maint/Doc/faq/design.rst python/branches/release26-maint/Doc/faq/programming.rst python/branches/release26-maint/Doc/library/collections.rst python/branches/release26-maint/Doc/library/functions.rst python/branches/release26-maint/Doc/library/optparse.rst python/branches/release26-maint/Doc/library/os.rst python/branches/release26-maint/Doc/library/stdtypes.rst python/branches/release26-maint/Doc/library/string.rst python/branches/release26-maint/Doc/library/subprocess.rst python/branches/release26-maint/Lib/subprocess.py Modified: python/branches/release26-maint/Doc/c-api/buffer.rst ============================================================================== --- python/branches/release26-maint/Doc/c-api/buffer.rst (original) +++ python/branches/release26-maint/Doc/c-api/buffer.rst Sun Mar 21 20:06:51 2010 @@ -293,7 +293,7 @@ given shape with the given number of bytes per element. -.. cfunction:: int PyBuffer_FillInfo(Py_buffer *view, void *buf, Py_ssize_t len, int readonly, int infoflags) +.. cfunction:: int PyBuffer_FillInfo(Py_buffer *view, PyObject *obj, void *buf, Py_ssize_t len, int readonly, int infoflags) Fill in a buffer-info structure, *view*, correctly for an exporter that can only share a contiguous chunk of memory of "unsigned bytes" of the given Modified: python/branches/release26-maint/Doc/c-api/init.rst ============================================================================== --- python/branches/release26-maint/Doc/c-api/init.rst (original) +++ python/branches/release26-maint/Doc/c-api/init.rst Sun Mar 21 20:06:51 2010 @@ -284,15 +284,6 @@ modify its value. The value is available to Python code as ``sys.version``. -.. cfunction:: const char* Py_GetBuildNumber() - - Return a string representing the Subversion revision that this Python executable - was built from. This number is a string because it may contain a trailing 'M' - if Python was built from a mixed revision source tree. - - .. versionadded:: 2.5 - - .. cfunction:: const char* Py_GetPlatform() .. index:: single: platform (in module sys) Modified: python/branches/release26-maint/Doc/faq/design.rst ============================================================================== --- python/branches/release26-maint/Doc/faq/design.rst (original) +++ python/branches/release26-maint/Doc/faq/design.rst Sun Mar 21 20:06:51 2010 @@ -7,7 +7,7 @@ Guido van Rossum believes that using indentation for grouping is extremely elegant and contributes a lot to the clarity of the average Python program. -Most people learn to love this feature after awhile. +Most people learn to love this feature after a while. Since there are no begin/end brackets there cannot be a disagreement between grouping perceived by the parser and the human reader. Occasionally C @@ -48,7 +48,7 @@ People are often very surprised by results like this:: - >>> 1.2-1.0 + >>> 1.2 - 1.0 0.199999999999999996 and think it is a bug in Python. It's not. This has nothing to do with Python, @@ -85,7 +85,7 @@ ``==`` fails. Instead, you have to check that the difference between the two numbers is less than a certain threshold:: - epsilon = 0.0000000000001 # Tiny allowed error + epsilon = 0.0000000000001 # Tiny allowed error expected_result = 0.4 if expected_result-epsilon <= computation() <= expected_result+epsilon: @@ -131,24 +131,25 @@ Second, it means that no special syntax is necessary if you want to explicitly reference or call the method from a particular class. In C++, if you want to use a method from a base class which is overridden in a derived class, you have -to use the ``::`` operator -- in Python you can write baseclass.methodname(self, -). This is particularly useful for :meth:`__init__` methods, and -in general in cases where a derived class method wants to extend the base class -method of the same name and thus has to call the base class method somehow. +to use the ``::`` operator -- in Python you can write +``baseclass.methodname(self, )``. This is particularly useful +for :meth:`__init__` methods, and in general in cases where a derived class +method wants to extend the base class method of the same name and thus has to +call the base class method somehow. Finally, for instance variables it solves a syntactic problem with assignment: since local variables in Python are (by definition!) those variables to which a -value assigned in a function body (and that aren't explicitly declared global), -there has to be some way to tell the interpreter that an assignment was meant to -assign to an instance variable instead of to a local variable, and it should -preferably be syntactic (for efficiency reasons). C++ does this through +value is assigned in a function body (and that aren't explicitly declared +global), there has to be some way to tell the interpreter that an assignment was +meant to assign to an instance variable instead of to a local variable, and it +should preferably be syntactic (for efficiency reasons). C++ does this through declarations, but Python doesn't have declarations and it would be a pity having -to introduce them just for this purpose. Using the explicit "self.var" solves +to introduce them just for this purpose. Using the explicit ``self.var`` solves this nicely. Similarly, for using instance variables, having to write -"self.var" means that references to unqualified names inside a method don't have -to search the instance's directories. To put it another way, local variables -and instance variables live in two different namespaces, and you need to tell -Python which namespace to use. +``self.var`` means that references to unqualified names inside a method don't +have to search the instance's directories. To put it another way, local +variables and instance variables live in two different namespaces, and you need +to tell Python which namespace to use. Why can't I use an assignment in an expression? @@ -234,8 +235,10 @@ .. XXX talk about protocols? -Note that for string operations Python has moved from external functions (the -``string`` module) to methods. However, ``len()`` is still a function. +.. note:: + + For string operations, Python has moved from external functions (the + ``string`` module) to methods. However, ``len()`` is still a function. Why is join() a string method instead of a list or tuple method? @@ -298,22 +301,24 @@ expensive. In versions of Python prior to 2.0 it was common to use this idiom:: try: - value = dict[key] + value = mydict[key] except KeyError: - dict[key] = getvalue(key) - value = dict[key] + mydict[key] = getvalue(key) + value = mydict[key] This only made sense when you expected the dict to have the key almost all the time. If that wasn't the case, you coded it like this:: - if dict.has_key(key): - value = dict[key] + if mydict.has_key(key): + value = mydict[key] else: - dict[key] = getvalue(key) - value = dict[key] + mydict[key] = getvalue(key) + value = mydict[key] + +.. note:: -(In Python 2.0 and higher, you can code this as ``value = dict.setdefault(key, -getvalue(key))``.) + In Python 2.0 and higher, you can code this as ``value = + mydict.setdefault(key, getvalue(key))``. Why isn't there a switch or case statement in Python? @@ -432,7 +437,7 @@ `_, `PyInline `_, `Py2Cmod `_, and `Weave -`_. +`_. How does Python manage memory? @@ -450,6 +455,8 @@ difference can cause some subtle porting problems if your Python code depends on the behavior of the reference counting implementation. +.. XXX relevant for Python 2.6? + Sometimes objects get stuck in tracebacks temporarily and hence are not deallocated when you might expect. Clear the tracebacks with:: @@ -461,8 +468,8 @@ things. They contain a portion of the program state extracted during the handling of an exception (usually the most recent exception). -In the absence of circularities and tracebacks, Python programs need not -explicitly manage memory. +In the absence of circularities and tracebacks, Python programs do not need to +manage memory explicitly. Why doesn't Python use a more traditional garbage collection scheme? For one thing, this is not a C standard feature and hence it's not portable. (Yes, we @@ -481,19 +488,19 @@ In Jython, the following code (which is fine in CPython) will probably run out of file descriptors long before it runs out of memory:: - for file in : + for file in very_long_list_of_files: f = open(file) c = f.read(1) Using the current reference counting and destructor scheme, each new assignment to f closes the previous file. Using GC, this is not guaranteed. If you want to write code that will work with any Python implementation, you should -explicitly close the file; this will work regardless of GC:: +explicitly close the file or use the :keyword:`with` statement; this will work +regardless of GC:: - for file in : - f = open(file) - c = f.read(1) - f.close() + for file in very_long_list_of_files: + with open(file) as f: + c = f.read(1) Why isn't all memory freed when Python exits? @@ -589,10 +596,10 @@ - Hash lists by their address (object ID). This doesn't work because if you construct a new list with the same value it won't be found; e.g.:: - d = {[1,2]: '12'} - print d[[1,2]] + mydict = {[1, 2]: '12'} + print mydict[[1, 2]] - would raise a KeyError exception because the id of the ``[1,2]`` used in the + would raise a KeyError exception because the id of the ``[1, 2]`` used in the second line differs from that in the first line. In other words, dictionary keys should be compared using ``==``, not using :keyword:`is`. @@ -613,7 +620,7 @@ There is a trick to get around this if you need to, but use it at your own risk: You can wrap a mutable structure inside a class instance which has both a -:meth:`__cmp_` and a :meth:`__hash__` method. You must then make sure that the +:meth:`__eq__` and a :meth:`__hash__` method. You must then make sure that the hash value for all such wrapper objects that reside in a dictionary (or other hash based structure), remain fixed while the object is in the dictionary (or other structure). :: @@ -621,15 +628,15 @@ class ListWrapper: def __init__(self, the_list): self.the_list = the_list - def __cmp__(self, other): + def __eq__(self, other): return self.the_list == other.the_list def __hash__(self): l = self.the_list result = 98767 - len(l)*555 - for i in range(len(l)): + for i, el in enumerate(l): try: - result = result + (hash(l[i]) % 9999999) * 1001 + i - except: + result = result + (hash(el) % 9999999) * 1001 + i + except Exception: result = (result % 7777777) + i * 333 return result @@ -637,8 +644,8 @@ members of the list may be unhashable and also by the possibility of arithmetic overflow. -Furthermore it must always be the case that if ``o1 == o2`` (ie ``o1.__cmp__(o2) -== 0``) then ``hash(o1) == hash(o2)`` (ie, ``o1.__hash__() == o2.__hash__()``), +Furthermore it must always be the case that if ``o1 == o2`` (ie ``o1.__eq__(o2) +is True``) then ``hash(o1) == hash(o2)`` (ie, ``o1.__hash__() == o2.__hash__()``), regardless of whether the object is in a dictionary or not. If you fail to meet these restrictions dictionaries and other hash based structures will misbehave. @@ -662,8 +669,8 @@ it. For example, here's how to iterate over the keys of a dictionary in sorted order:: - for key in sorted(dict.iterkeys()): - ... # do whatever with dict[key]... + for key in sorted(mydict): + ... # do whatever with mydict[key]... How do you specify and enforce an interface spec in Python? @@ -712,14 +719,14 @@ This type of bug commonly bites neophyte programmers. Consider this function:: - def foo(D={}): # Danger: shared reference to one dict for all calls + def foo(mydict={}): # Danger: shared reference to one dict for all calls ... compute something ... - D[key] = value - return D + mydict[key] = value + return mydict -The first time you call this function, ``D`` contains a single item. The second -time, ``D`` contains two items because when ``foo()`` begins executing, ``D`` -starts out with an item already in it. +The first time you call this function, ``mydict`` contains a single item. The +second time, ``mydict`` contains two items because when ``foo()`` begins +executing, ``mydict`` starts out with an item already in it. It is often expected that a function call creates new objects for default values. This is not what happens. Default values are created exactly once, when @@ -735,14 +742,14 @@ inside the function, check if the parameter is ``None`` and create a new list/dictionary/whatever if it is. For example, don't write:: - def foo(dict={}): + def foo(mydict={}): ... but:: - def foo(dict=None): - if dict is None: - dict = {} # create a new dict for local namespace + def foo(mydict=None): + if mydict is None: + mydict = {} # create a new dict for local namespace This feature can be useful. When you have a function that's time-consuming to compute, a common technique is to cache the parameters and the resulting value @@ -751,7 +758,7 @@ # Callers will never provide a third parameter for this function. def expensive (arg1, arg2, _cache={}): - if _cache.has_key((arg1, arg2)): + if (arg1, arg2) in _cache: return _cache[(arg1, arg2)] # Calculate the value @@ -771,13 +778,13 @@ reasonable uses of the "go" or "goto" constructs of C, Fortran, and other languages. For example:: - class label: pass # declare a label + class label: pass # declare a label try: ... - if (condition): raise label() # goto label + if (condition): raise label() # goto label ... - except label: # where to goto + except label: # where to goto pass ... @@ -802,7 +809,7 @@ If you're trying to build Windows pathnames, note that all Windows system calls accept forward slashes too:: - f = open("/mydir/file.txt") # works fine! + f = open("/mydir/file.txt") # works fine! If you're trying to build a pathname for a DOS command, try e.g. one of :: @@ -819,7 +826,7 @@ looks like this:: with obj: - a = 1 # equivalent to obj.a = 1 + a = 1 # equivalent to obj.a = 1 total = total + 1 # obj.total = obj.total + 1 In Python, such a construct would be ambiguous. @@ -850,21 +857,20 @@ The primary benefit of "with" and similar language features (reduction of code volume) can, however, easily be achieved in Python by assignment. Instead of:: - function(args).dict[index][index].a = 21 - function(args).dict[index][index].b = 42 - function(args).dict[index][index].c = 63 + function(args).mydict[index][index].a = 21 + function(args).mydict[index][index].b = 42 + function(args).mydict[index][index].c = 63 write this:: - ref = function(args).dict[index][index] + ref = function(args).mydict[index][index] ref.a = 21 ref.b = 42 ref.c = 63 This also has the side-effect of increasing execution speed because name bindings are resolved at run-time in Python, and the second version only needs -to perform the resolution once. If the referenced object does not have a, b and -c attributes, of course, the end result is still a run-time exception. +to perform the resolution once. Why are colons required for the if/while/def/class statements? Modified: python/branches/release26-maint/Doc/faq/programming.rst ============================================================================== --- python/branches/release26-maint/Doc/faq/programming.rst (original) +++ python/branches/release26-maint/Doc/faq/programming.rst Sun Mar 21 20:06:51 2010 @@ -176,32 +176,33 @@ it is much shorter and far faster to use :: - L2 = list(L1[:3]) # "list" is redundant if L1 is a list. + L2 = list(L1[:3]) # "list" is redundant if L1 is a list. Note that the functionally-oriented built-in functions such as :func:`map`, :func:`zip`, and friends can be a convenient accelerator for loops that perform a single task. For example to pair the elements of two lists together:: - >>> zip([1,2,3], [4,5,6]) + >>> zip([1, 2, 3], [4, 5, 6]) [(1, 4), (2, 5), (3, 6)] or to compute a number of sines:: - >>> map( math.sin, (1,2,3,4)) - [0.841470984808, 0.909297426826, 0.14112000806, -0.756802495308] + >>> map(math.sin, (1, 2, 3, 4)) + [0.841470984808, 0.909297426826, 0.14112000806, -0.756802495308] The operation completes very quickly in such cases. -Other examples include the ``join()`` and ``split()`` methods of string objects. +Other examples include the ``join()`` and ``split()`` :ref:`methods +of string objects `. For example if s1..s7 are large (10K+) strings then ``"".join([s1,s2,s3,s4,s5,s6,s7])`` may be far faster than the more obvious ``s1+s2+s3+s4+s5+s6+s7``, since the "summation" will compute many subexpressions, whereas ``join()`` does all the copying in one pass. For -manipulating strings, use the ``replace()`` method on string objects. Use -regular expressions only when you're not dealing with constant string patterns. -Consider using the string formatting operations ``string % tuple`` and ``string -% dictionary``. +manipulating strings, use the ``replace()`` and the ``format()`` :ref:`methods +on string objects `. Use regular expressions only when you're +not dealing with constant string patterns. You may still use :ref:`the old % +operations ` ``string % tuple`` and ``string % dictionary``. Be sure to use the :meth:`list.sort` built-in method to do sorting, and see the `sorting mini-HOWTO `_ for examples @@ -211,7 +212,7 @@ Another common trick is to "push loops into functions or methods." For example suppose you have a program that runs slowly and you use the profiler to determine that a Python function ``ff()`` is being called lots of times. If you -notice that ``ff ()``:: +notice that ``ff()``:: def ff(x): ... # do something with x computing result... @@ -332,24 +333,6 @@ >>> print x 11 -In Python3, you can do a similar thing in a nested scope using the -:keyword:`nonlocal` keyword: - -.. doctest:: - :options: +SKIP - - >>> def foo(): - ... x = 10 - ... def bar(): - ... nonlocal x - ... print x - ... x += 1 - ... bar() - ... print x - >>> foo() - 10 - 11 - What are the rules for local and global variables in Python? ------------------------------------------------------------ @@ -412,7 +395,7 @@ It's good practice if you import modules in the following order: -1. standard library modules -- e.g. ``sys``, ``os``, ``getopt``, ``re``) +1. standard library modules -- e.g. ``sys``, ``os``, ``getopt``, ``re`` 2. third-party library modules (anything installed in Python's site-packages directory) -- e.g. mx.DateTime, ZODB, PIL.Image, etc. 3. locally-developed modules @@ -421,7 +404,7 @@ ``package.sub.m1`` module and want to import ``package.sub.m2``, do not just write ``import m2``, even though it's legal. Write ``from package.sub import m2`` instead. Relative imports can lead to a module being initialized twice, -leading to confusing bugs. +leading to confusing bugs. See :pep:`328` for details. It is sometimes necessary to move imports to a function or class to avoid problems with circular imports. Gordon McMillan says: @@ -649,9 +632,9 @@ a = B() b = a print b - <__main__.A instance at 016D07CC> + <__main__.A instance at 0x16D07CC> print a - <__main__.A instance at 016D07CC> + <__main__.A instance at 0x16D07CC> Arguably the class has a name: even though it is bound to two names and invoked through the name B the created instance is still reported as an instance of @@ -681,7 +664,7 @@ Comma is not an operator in Python. Consider this session:: >>> "a" in "b", "a" - (False, '1') + (False, 'a') Since the comma is not an operator, but a separator between expressions the above is evaluated as if you had entered:: @@ -690,7 +673,7 @@ not:: - >>> "a" in ("5", "a") + >>> "a" in ("b", "a") The same is true of the various assignment operators (``=``, ``+=`` etc). They are not truly operators but syntactic delimiters in assignment statements. @@ -732,12 +715,12 @@ if not isfunction(on_true): return on_true else: - return apply(on_true) + return on_true() else: if not isfunction(on_false): return on_false else: - return apply(on_false) + return on_false() In most cases you'll pass b and c directly: ``q(a, b, c)``. To avoid evaluating b or c when they shouldn't be, encapsulate them within a lambda function, e.g.: @@ -767,7 +750,7 @@ map(lambda x,y=y:y%x,range(2,int(pow(y,0.5)+1))),1),range(2,1000))) # First 10 Fibonacci numbers - print map(lambda x,f=lambda x,f:(x<=1) or (f(x-1,f)+f(x-2,f)): f(x,f), + print map(lambda x,f=lambda x,f:(f(x-1,f)+f(x-2,f)) if x>1 else 1: f(x,f), range(10)) # Mandelbrot set @@ -793,10 +776,11 @@ How do I specify hexadecimal and octal integers? ------------------------------------------------ -To specify an octal digit, precede the octal value with a zero. For example, to -set the variable "a" to the octal value "10" (8 in decimal), type:: +To specify an octal digit, precede the octal value with a zero, and then a lower +or uppercase "o". For example, to set the variable "a" to the octal value "10" +(8 in decimal), type:: - >>> a = 010 + >>> a = 0o10 >>> a 8 @@ -812,17 +796,17 @@ 178 -Why does -22 / 10 return -3? ----------------------------- +Why does -22 // 10 return -3? +----------------------------- It's primarily driven by the desire that ``i % j`` have the same sign as ``j``. If you want that, and also want:: - i == (i / j) * j + (i % j) + i == (i // j) * j + (i % j) then integer division has to return the floor. C also requires that identity to -hold, and then compilers that truncate ``i / j`` need to make ``i % j`` have the -same sign as ``i``. +hold, and then compilers that truncate ``i // j`` need to make ``i % j`` have +the same sign as ``i``. There are few real use cases for ``i % j`` when ``j`` is negative. When ``j`` is positive, there are many, and in virtually all of them it's more useful for @@ -830,6 +814,12 @@ ago? ``-190 % 12 == 2`` is useful; ``-190 % 12 == -10`` is a bug waiting to bite. +.. note:: + + On Python 2, ``a / b`` returns the same as ``a // b`` if + ``__future__.division`` is not in effect. This is also known as "classic" + division. + How do I convert a string to a number? -------------------------------------- @@ -861,10 +851,11 @@ To convert, e.g., the number 144 to the string '144', use the built-in type constructor :func:`str`. If you want a hexadecimal or octal representation, use -the built-in functions ``hex()`` or ``oct()``. For fancy formatting, use -:ref:`the % operator ` on strings, e.g. ``"%04d" % 144`` -yields ``'0144'`` and ``"%.3f" % (1/3.0)`` yields ``'0.333'``. See the library -reference manual for details. +the built-in functions :func:`hex` or :func:`oct`. For fancy formatting, see +the :ref:`formatstrings` section, e.g. ``"{:04d}".format(144)`` yields +``'0144'`` and ``"{:.3f}".format(1/3)`` yields ``'0.333'``. You may also use +:ref:`the % operator ` on strings. See the library reference +manual for details. How do I modify a string in place? @@ -962,12 +953,12 @@ ... "\r\n" ... "\r\n") >>> lines.rstrip("\n\r") - "line 1 " + 'line 1 ' Since this is typically only desired when reading text one line at a time, using ``S.rstrip()`` this way works well. -For older versions of Python, There are two partial substitutes: +For older versions of Python, there are two partial substitutes: - If you want to remove all trailing whitespace, use the ``rstrip()`` method of string objects. This removes all trailing whitespace, not just a single @@ -1093,26 +1084,26 @@ If you don't mind reordering the list, sort it and then scan from the end of the list, deleting duplicates as you go:: - if List: - List.sort() - last = List[-1] - for i in range(len(List)-2, -1, -1): - if last == List[i]: - del List[i] + if mylist: + mylist.sort() + last = mylist[-1] + for i in range(len(mylist)-2, -1, -1): + if last == mylist[i]: + del mylist[i] else: - last = List[i] + last = mylist[i] If all elements of the list may be used as dictionary keys (i.e. they are all hashable) this is often faster :: d = {} - for x in List: - d[x] = x - List = d.values() + for x in mylist: + d[x] = 1 + mylist = list(d.keys()) In Python 2.5 and later, the following is possible instead:: - List = list(set(List)) + mylist = list(set(mylist)) This converts the list into a set, thereby removing duplicates, and then back into a list. @@ -1188,7 +1179,7 @@ Use a list comprehension:: - result = [obj.method() for obj in List] + result = [obj.method() for obj in mylist] More generically, you can try the following function:: @@ -1213,23 +1204,17 @@ case, use the ``pprint`` module to pretty-print the dictionary; the items will be presented in order sorted by the key. -A more complicated solution is to subclass ``UserDict.UserDict`` to create a +A more complicated solution is to subclass ``dict`` to create a ``SortedDict`` class that prints itself in a predictable order. Here's one simpleminded implementation of such a class:: - import UserDict, string - - class SortedDict(UserDict.UserDict): + class SortedDict(dict): def __repr__(self): - result = [] - append = result.append - keys = self.data.keys() - keys.sort() - for k in keys: - append("%s: %s" % (`k`, `self.data[k]`)) - return "{%s}" % string.join(result, ", ") + keys = sorted(self.keys()) + result = ("{!r}: {!r}".format(k, self[k]) for k in keys) + return "{{{}}}".format(", ".join(result)) - __str__ = __repr__ + __str__ = __repr__ This will work for many common situations you might encounter, though it's far from a perfect solution. The largest flaw is that if some values in the @@ -1251,14 +1236,14 @@ sorting is quite simple to do with list comprehensions. To sort a list of strings by their uppercase values:: - tmp1 = [(x.upper(), x) for x in L] # Schwartzian transform + tmp1 = [(x.upper(), x) for x in L] # Schwartzian transform tmp1.sort() Usorted = [x[1] for x in tmp1] To sort by the integer value of a subfield extending from positions 10-15 in each string:: - tmp2 = [(int(s[10:15]), s) for s in L] # Schwartzian transform + tmp2 = [(int(s[10:15]), s) for s in L] # Schwartzian transform tmp2.sort() Isorted = [x[1] for x in tmp2] @@ -1295,8 +1280,8 @@ An alternative for the last step is:: - result = [] - for p in pairs: result.append(p[1]) + >>> result = [] + >>> for p in pairs: result.append(p[1]) If you find this more legible, you might prefer to use this instead of the final list comprehension. However, it is almost twice as slow for long lists. Why? @@ -1364,7 +1349,7 @@ different thing based on what class it is. For example, if you have a function that does something:: - def search (obj): + def search(obj): if isinstance(obj, Mailbox): # ... code to search a mailbox elif isinstance(obj, Document): @@ -1467,8 +1452,8 @@ How do I create static class data and static class methods? ----------------------------------------------------------- -Static data (in the sense of C++ or Java) is easy; static methods (again in the -sense of C++ or Java) are not supported directly. +Both static data and static methods (in the sense of C++ or Java) are supported +in Python. For static data, simply define a class attribute. To assign a new value to the attribute, you have to explicitly use the class name in the assignment:: @@ -1487,9 +1472,9 @@ search path from ``c.__class__`` back to ``C``. Caution: within a method of C, an assignment like ``self.count = 42`` creates a -new and unrelated instance vrbl named "count" in ``self``'s own dict. Rebinding -of a class-static data name must always specify the class whether inside a -method or not:: +new and unrelated instance named "count" in ``self``'s own dict. Rebinding of a +class-static data name must always specify the class whether inside a method or +not:: C.count = 314 Modified: python/branches/release26-maint/Doc/library/collections.rst ============================================================================== --- python/branches/release26-maint/Doc/library/collections.rst (original) +++ python/branches/release26-maint/Doc/library/collections.rst Sun Mar 21 20:06:51 2010 @@ -650,7 +650,7 @@ Point: x= 3.000 y= 4.000 hypot= 5.000 Point: x=14.000 y= 0.714 hypot=14.018 -The subclass shown above sets ``__slots__`` to an empty tuple. This keeps +The subclass shown above sets ``__slots__`` to an empty tuple. This helps keep memory requirements low by preventing the creation of instance dictionaries. Subclassing is not useful for adding new, stored fields. Instead, simply Modified: python/branches/release26-maint/Doc/library/functions.rst ============================================================================== --- python/branches/release26-maint/Doc/library/functions.rst (original) +++ python/branches/release26-maint/Doc/library/functions.rst Sun Mar 21 20:06:51 2010 @@ -1087,7 +1087,7 @@ .. function:: set([iterable]) :noindex: - Return a new set, optionally with elements are taken from *iterable*. + Return a new set, optionally with elements taken from *iterable*. The set type is described in :ref:`types-set`. For other containers see the built in :class:`dict`, :class:`list`, and Modified: python/branches/release26-maint/Doc/library/optparse.rst ============================================================================== --- python/branches/release26-maint/Doc/library/optparse.rst (original) +++ python/branches/release26-maint/Doc/library/optparse.rst Sun Mar 21 20:06:51 2010 @@ -163,9 +163,7 @@ an option that must be supplied on the command-line; note that the phrase "required option" is self-contradictory in English. :mod:`optparse` doesn't prevent you from implementing required options, but doesn't give you much - help at it either. See ``examples/required_1.py`` and - ``examples/required_2.py`` in the :mod:`optparse` source distribution for two - ways to implement required options with :mod:`optparse`. + help at it either. For example, consider this hypothetical command-line:: Modified: python/branches/release26-maint/Doc/library/os.rst ============================================================================== --- python/branches/release26-maint/Doc/library/os.rst (original) +++ python/branches/release26-maint/Doc/library/os.rst Sun Mar 21 20:06:51 2010 @@ -13,19 +13,24 @@ module, and for high-level file and directory handling see the :mod:`shutil` module. -The design of all built-in operating system dependent modules of Python is such -that as long as the same functionality is available, it uses the same interface; -for example, the function ``os.stat(path)`` returns stat information about -*path* in the same format (which happens to have originated with the POSIX -interface). +Notes on the availability of these functions: -Extensions peculiar to a particular operating system are also available through -the :mod:`os` module, but using them is of course a threat to portability! +* The design of all built-in operating system dependent modules of Python is + such that as long as the same functionality is available, it uses the same + interface; for example, the function ``os.stat(path)`` returns stat + information about *path* in the same format (which happens to have originated + with the POSIX interface). + +* Extensions peculiar to a particular operating system are also available + through the :mod:`os` module, but using them is of course a threat to + portability. + +* An "Availability: Unix" note means that this function is commonly found on + Unix systems. It does not make any claims about its existence on a specific + operating system. -.. note:: - - If not separately noted, all functions that claim "Availability: Unix" are - supported on Mac OS X, which builds on a Unix core. +* If not separately noted, all functions that claim "Availability: Unix" are + supported on Mac OS X, which builds on a Unix core. .. note:: @@ -41,9 +46,9 @@ .. data:: name - The name of the operating system dependent module imported. The following names - have currently been registered: ``'posix'``, ``'nt'``, ``'mac'``, ``'os2'``, - ``'ce'``, ``'java'``, ``'riscos'``. + The name of the operating system dependent module imported. The following + names have currently been registered: ``'posix'``, ``'nt'``, ``'mac'``, + ``'os2'``, ``'ce'``, ``'java'``, ``'riscos'``. .. _os-procinfo: Modified: python/branches/release26-maint/Doc/library/stdtypes.rst ============================================================================== --- python/branches/release26-maint/Doc/library/stdtypes.rst (original) +++ python/branches/release26-maint/Doc/library/stdtypes.rst Sun Mar 21 20:06:51 2010 @@ -2695,8 +2695,7 @@ .. attribute:: class.__bases__ - The tuple of base classes of a class object. If there are no base classes, this - will be an empty tuple. + The tuple of base classes of a class object. .. attribute:: class.__name__ Modified: python/branches/release26-maint/Doc/library/string.rst ============================================================================== --- python/branches/release26-maint/Doc/library/string.rst (original) +++ python/branches/release26-maint/Doc/library/string.rst Sun Mar 21 20:06:51 2010 @@ -105,7 +105,9 @@ String Formatting ----------------- -Starting in Python 2.6, the built-in str and unicode classes provide the ability +.. versionadded:: 2.6 + +The built-in str and unicode classes provide the ability to do complex variable substitutions and value formatting via the :meth:`str.format` method described in :pep:`3101`. The :class:`Formatter` class in the :mod:`string` module allows you to create and customize your own @@ -495,6 +497,8 @@ Template strings ---------------- +.. versionadded:: 2.4 + Templates provide simpler string substitutions as described in :pep:`292`. Instead of the normal ``%``\ -based substitutions, Templates support ``$``\ -based substitutions, using the following rules: @@ -513,8 +517,6 @@ Any other appearance of ``$`` in the string will result in a :exc:`ValueError` being raised. -.. versionadded:: 2.4 - The :mod:`string` module provides a :class:`Template` class that implements these rules. The methods of :class:`Template` are: Modified: python/branches/release26-maint/Doc/library/subprocess.rst ============================================================================== --- python/branches/release26-maint/Doc/library/subprocess.rst (original) +++ python/branches/release26-maint/Doc/library/subprocess.rst Sun Mar 21 20:06:51 2010 @@ -151,9 +151,10 @@ .. note:: - This feature is only available if Python is built with universal newline support - (the default). Also, the newlines attribute of the file objects :attr:`stdout`, - :attr:`stdin` and :attr:`stderr` are not updated by the communicate() method. + This feature is only available if Python is built with universal newline + support (the default). Also, the newlines attribute of the file objects + :attr:`stdout`, :attr:`stdin` and :attr:`stderr` are not updated by the + communicate() method. The *startupinfo* and *creationflags*, if given, will be passed to the underlying CreateProcess() function. They can specify things such as appearance @@ -187,7 +188,7 @@ The arguments are the same as for the Popen constructor. Example:: - retcode = call(["ls", "-l"]) + >>> retcode = subprocess.call(["ls", "-l"]) .. function:: check_call(*popenargs, **kwargs) @@ -199,7 +200,8 @@ The arguments are the same as for the Popen constructor. Example:: - check_call(["ls", "-l"]) + >>> subprocess.check_call(["ls", "-l"]) + 0 .. versionadded:: 2.5 Modified: python/branches/release26-maint/Lib/subprocess.py ============================================================================== --- python/branches/release26-maint/Lib/subprocess.py (original) +++ python/branches/release26-maint/Lib/subprocess.py Sun Mar 21 20:06:51 2010 @@ -447,7 +447,8 @@ def _cleanup(): for inst in _active[:]: - if inst._internal_poll(_deadstate=sys.maxint) >= 0: + res = inst._internal_poll(_deadstate=sys.maxint) + if res is not None and res >= 0: try: _active.remove(inst) except ValueError: From python-checkins at python.org Sun Mar 21 20:08:59 2010 From: python-checkins at python.org (georg.brandl) Date: Sun, 21 Mar 2010 20:08:59 +0100 (CET) Subject: [Python-checkins] r79214 - python/branches/release26-maint Message-ID: <20100321190859.D0502DB17@mail.python.org> Author: georg.brandl Date: Sun Mar 21 20:08:59 2010 New Revision: 79214 Log: Blocked revisions 77332 via svnmerge ........ r77332 | georg.brandl | 2010-01-06 19:02:16 +0100 (Mi, 06 Jan 2010) | 7 lines #5991: let completion for the "help" command include help topics. This also simplifies the Cmd.get_names() method implementation; it was written at a time where dir() didn't consider base class attributes. ........ Modified: python/branches/release26-maint/ (props changed) From python-checkins at python.org Sun Mar 21 20:10:15 2010 From: python-checkins at python.org (antoine.pitrou) Date: Sun, 21 Mar 2010 20:10:15 +0100 (CET) Subject: [Python-checkins] r79215 - in python/branches/release31-maint: .hgignore Message-ID: <20100321191015.50CFADB53@mail.python.org> Author: antoine.pitrou Date: Sun Mar 21 20:10:15 2010 New Revision: 79215 Log: Merged revisions 79161 via svnmerge from svn+ssh://pythondev at svn.python.org/python/branches/py3k ................ r79161 | antoine.pitrou | 2010-03-21 01:22:55 +0100 (dim., 21 mars 2010) | 9 lines Merged revisions 79160 via svnmerge from svn+ssh://pythondev at svn.python.org/python/trunk ........ r79160 | antoine.pitrou | 2010-03-21 01:21:43 +0100 (dim., 21 mars 2010) | 3 lines Fix overzealous .hgignore file ........ ................ Modified: python/branches/release31-maint/ (props changed) python/branches/release31-maint/.hgignore Modified: python/branches/release31-maint/.hgignore ============================================================================== --- python/branches/release31-maint/.hgignore (original) +++ python/branches/release31-maint/.hgignore Sun Mar 21 20:10:15 2010 @@ -13,8 +13,8 @@ EUC-JP.TXT EUC-KR.TXT JOHAB.TXT -Makefile -Makefile.pre +Makefile$ +Makefile.pre$ NormalizationTest-3.2.0.txt NormalizationTest.txt SHIFTJIS.TXT From python-checkins at python.org Sun Mar 21 20:16:28 2010 From: python-checkins at python.org (georg.brandl) Date: Sun, 21 Mar 2010 20:16:28 +0100 (CET) Subject: [Python-checkins] r79216 - in python/branches/release26-maint: Doc/c-api/init.rst Doc/library/datetime.rst Doc/library/inspect.rst Doc/library/msvcrt.rst Doc/library/select.rst Doc/library/zipimport.rst Doc/using/windows.rst Lib/email/generator.py Lib/email/test/test_email.py Lib/email/utils.py Lib/imaplib.py Lib/lib-tk/turtle.py Lib/logging/__init__.py Lib/platform.py Lib/test/test_cmd.py Lib/test/test_hashlib.py Lib/test/test_logging.py Mac/Resources/app/Info.plist.in Misc/developers.txt Modules/_hashopenssl.c Modules/selectmodule.c Message-ID: <20100321191628.B0C94FC1F@mail.python.org> Author: georg.brandl Date: Sun Mar 21 20:16:28 2010 New Revision: 79216 Log: Merged revisions 77120,77151,77155,77209,77229,77256,77317,77331,77333,77359-77360,77382,77561,77570 via svnmerge from svn+ssh://pythondev at svn.python.org/python/trunk ........ r77120 | georg.brandl | 2009-12-29 22:09:17 +0100 (Di, 29 Dez 2009) | 1 line #7595: fix typo in argument default constant. ........ r77151 | georg.brandl | 2009-12-30 19:32:50 +0100 (Mi, 30 Dez 2009) | 1 line #7487: update Pygments version. ........ r77155 | georg.brandl | 2009-12-30 20:03:00 +0100 (Mi, 30 Dez 2009) | 1 line We only support Windows NT derivatives now. ........ r77209 | georg.brandl | 2010-01-01 14:07:05 +0100 (Fr, 01 Jan 2010) | 1 line More yearly updates. ........ r77229 | georg.brandl | 2010-01-02 13:35:01 +0100 (Sa, 02 Jan 2010) | 1 line Fix casing. ........ r77256 | georg.brandl | 2010-01-02 23:55:55 +0100 (Sa, 02 Jan 2010) | 1 line Fix typo. ........ r77317 | georg.brandl | 2010-01-05 19:14:52 +0100 (Di, 05 Jan 2010) | 1 line Add Stefan. ........ r77331 | georg.brandl | 2010-01-06 18:43:06 +0100 (Mi, 06 Jan 2010) | 1 line Small fixes to test_cmd: fix signature of do_shell, remove duplicate import, add option to run the custom Cmd class. ........ r77333 | georg.brandl | 2010-01-06 19:26:08 +0100 (Mi, 06 Jan 2010) | 1 line #5950: document that zip files with comments are unsupported in zipimport. ........ r77359 | georg.brandl | 2010-01-07 21:54:45 +0100 (Do, 07 Jan 2010) | 1 line Fix description for Py_GetPath(); it sounded like it always returned sys.path. ........ r77360 | georg.brandl | 2010-01-07 22:48:47 +0100 (Do, 07 Jan 2010) | 1 line #7653: clarify how the PythonPath registry key should look like. ........ r77382 | georg.brandl | 2010-01-09 10:47:11 +0100 (Sa, 09 Jan 2010) | 1 line #7422: make it clear that getargspec() only works on Python functions. ........ r77561 | georg.brandl | 2010-01-17 09:42:30 +0100 (So, 17 Jan 2010) | 1 line #7699: improve datetime docs: straightforward linking to strftime/strptime section, mark classmethods as such. ........ r77570 | georg.brandl | 2010-01-17 13:14:42 +0100 (So, 17 Jan 2010) | 1 line Add note about usage of STRINGLIB_EMPTY. ........ Modified: python/branches/release26-maint/ (props changed) python/branches/release26-maint/Doc/c-api/init.rst python/branches/release26-maint/Doc/library/datetime.rst python/branches/release26-maint/Doc/library/inspect.rst python/branches/release26-maint/Doc/library/msvcrt.rst python/branches/release26-maint/Doc/library/select.rst python/branches/release26-maint/Doc/library/zipimport.rst python/branches/release26-maint/Doc/using/windows.rst python/branches/release26-maint/Lib/email/generator.py python/branches/release26-maint/Lib/email/test/test_email.py python/branches/release26-maint/Lib/email/utils.py python/branches/release26-maint/Lib/imaplib.py python/branches/release26-maint/Lib/lib-tk/turtle.py python/branches/release26-maint/Lib/logging/__init__.py python/branches/release26-maint/Lib/platform.py python/branches/release26-maint/Lib/test/test_cmd.py python/branches/release26-maint/Lib/test/test_hashlib.py python/branches/release26-maint/Lib/test/test_logging.py python/branches/release26-maint/Mac/Resources/app/Info.plist.in python/branches/release26-maint/Misc/developers.txt python/branches/release26-maint/Modules/_hashopenssl.c python/branches/release26-maint/Modules/selectmodule.c Modified: python/branches/release26-maint/Doc/c-api/init.rst ============================================================================== --- python/branches/release26-maint/Doc/c-api/init.rst (original) +++ python/branches/release26-maint/Doc/c-api/init.rst Sun Mar 21 20:16:28 2010 @@ -257,14 +257,15 @@ triple: module; search; path single: path (in module sys) - Return the default module search path; this is computed from the program name - (set by :cfunc:`Py_SetProgramName` above) and some environment variables. The - returned string consists of a series of directory names separated by a platform - dependent delimiter character. The delimiter character is ``':'`` on Unix and - Mac OS X, ``';'`` on Windows. The returned string points into static storage; - the caller should not modify its value. The value is available to Python code - as the list ``sys.path``, which may be modified to change the future search path - for loaded modules. + Return the default module search path; this is computed from the program name + (set by :cfunc:`Py_SetProgramName` above) and some environment variables. + The returned string consists of a series of directory names separated by a + platform dependent delimiter character. The delimiter character is ``':'`` + on Unix and Mac OS X, ``';'`` on Windows. The returned string points into + static storage; the caller should not modify its value. The list + :data:`sys.path` is initialized with this value on interpreter startup; it + can be (and usually is) modified later to change the search path for loading + modules. .. XXX should give the exact rules Modified: python/branches/release26-maint/Doc/library/datetime.rst ============================================================================== --- python/branches/release26-maint/Doc/library/datetime.rst (original) +++ python/branches/release26-maint/Doc/library/datetime.rst Sun Mar 21 20:16:28 2010 @@ -38,7 +38,6 @@ The :mod:`datetime` module exports the following constants: - .. data:: MINYEAR The smallest year number allowed in a :class:`date` or :class:`datetime` object. @@ -63,7 +62,6 @@ Available Types --------------- - .. class:: date :noindex: @@ -133,7 +131,6 @@ A :class:`timedelta` object represents a duration, the difference between two dates or times. - .. class:: timedelta([days[, seconds[, microseconds[, milliseconds[, minutes[, hours[, weeks]]]]]]]) All arguments are optional and default to ``0``. Arguments may be ints, longs, @@ -170,8 +167,8 @@ >>> (d.days, d.seconds, d.microseconds) (-1, 86399, 999999) -Class attributes are: +Class attributes are: .. attribute:: timedelta.min @@ -316,16 +313,16 @@ If an argument outside those ranges is given, :exc:`ValueError` is raised. -Other constructors, all class methods: +Other constructors, all class methods: -.. method:: date.today() +.. classmethod:: date.today() Return the current local date. This is equivalent to ``date.fromtimestamp(time.time())``. -.. method:: date.fromtimestamp(timestamp) +.. classmethod:: date.fromtimestamp(timestamp) Return the local date corresponding to the POSIX timestamp, such as is returned by :func:`time.time`. This may raise :exc:`ValueError`, if the timestamp is out @@ -335,15 +332,15 @@ timestamp, leap seconds are ignored by :meth:`fromtimestamp`. -.. method:: date.fromordinal(ordinal) +.. classmethod:: date.fromordinal(ordinal) Return the date corresponding to the proleptic Gregorian ordinal, where January 1 of year 1 has ordinal 1. :exc:`ValueError` is raised unless ``1 <= ordinal <= date.max.toordinal()``. For any date *d*, ``date.fromordinal(d.toordinal()) == d``. -Class attributes: +Class attributes: .. attribute:: date.min @@ -360,8 +357,8 @@ The smallest possible difference between non-equal date objects, ``timedelta(days=1)``. -Instance attributes (read-only): +Instance attributes (read-only): .. attribute:: date.year @@ -377,6 +374,7 @@ Between 1 and the number of days in the given month of the given year. + Supported operations: +-------------------------------+----------------------------------------------+ @@ -429,7 +427,6 @@ Instance methods: - .. method:: date.replace(year, month, day) Return a date with the same value, except for those members given new values by @@ -509,7 +506,8 @@ Return a string representing the date, controlled by an explicit format string. Format codes referring to hours, minutes or seconds will see 0 values. See - section :ref:`strftime-behavior`. + section :ref:`strftime-strptime-behavior`. + Example of counting days to an event:: @@ -576,7 +574,6 @@ Constructor: - .. class:: datetime(year, month, day[, hour[, minute[, second[, microsecond[, tzinfo]]]]]) The year, month and day arguments are required. *tzinfo* may be ``None``, or an @@ -595,15 +592,14 @@ Other constructors, all class methods: - -.. method:: datetime.today() +.. classmethod:: datetime.today() Return the current local datetime, with :attr:`tzinfo` ``None``. This is equivalent to ``datetime.fromtimestamp(time.time())``. See also :meth:`now`, :meth:`fromtimestamp`. -.. method:: datetime.now([tz]) +.. classmethod:: datetime.now([tz]) Return the current local date and time. If optional argument *tz* is ``None`` or not specified, this is like :meth:`today`, but, if possible, supplies more @@ -617,14 +613,14 @@ See also :meth:`today`, :meth:`utcnow`. -.. method:: datetime.utcnow() +.. classmethod:: datetime.utcnow() Return the current UTC date and time, with :attr:`tzinfo` ``None``. This is like :meth:`now`, but returns the current UTC date and time, as a naive :class:`datetime` object. See also :meth:`now`. -.. method:: datetime.fromtimestamp(timestamp[, tz]) +.. classmethod:: datetime.fromtimestamp(timestamp[, tz]) Return the local date and time corresponding to the POSIX timestamp, such as is returned by :func:`time.time`. If optional argument *tz* is ``None`` or not @@ -645,7 +641,7 @@ identical :class:`datetime` objects. See also :meth:`utcfromtimestamp`. -.. method:: datetime.utcfromtimestamp(timestamp) +.. classmethod:: datetime.utcfromtimestamp(timestamp) Return the UTC :class:`datetime` corresponding to the POSIX timestamp, with :attr:`tzinfo` ``None``. This may raise :exc:`ValueError`, if the timestamp is @@ -654,7 +650,7 @@ :meth:`fromtimestamp`. -.. method:: datetime.fromordinal(ordinal) +.. classmethod:: datetime.fromordinal(ordinal) Return the :class:`datetime` corresponding to the proleptic Gregorian ordinal, where January 1 of year 1 has ordinal 1. :exc:`ValueError` is raised unless ``1 @@ -662,7 +658,7 @@ microsecond of the result are all 0, and :attr:`tzinfo` is ``None``. -.. method:: datetime.combine(date, time) +.. classmethod:: datetime.combine(date, time) Return a new :class:`datetime` object whose date members are equal to the given :class:`date` object's, and whose time and :attr:`tzinfo` members are equal to @@ -671,18 +667,18 @@ object, its time and :attr:`tzinfo` members are ignored. -.. method:: datetime.strptime(date_string, format) +.. classmethod:: datetime.strptime(date_string, format) Return a :class:`datetime` corresponding to *date_string*, parsed according to *format*. This is equivalent to ``datetime(*(time.strptime(date_string, format)[0:6]))``. :exc:`ValueError` is raised if the date_string and format can't be parsed by :func:`time.strptime` or if it returns a value which isn't a - time tuple. + time tuple. See section :ref:`strftime-strptime-behavior`. .. versionadded:: 2.5 -Class attributes: +Class attributes: .. attribute:: datetime.min @@ -701,8 +697,8 @@ The smallest possible difference between non-equal :class:`datetime` objects, ``timedelta(microseconds=1)``. -Instance attributes (read-only): +Instance attributes (read-only): .. attribute:: datetime.year @@ -744,6 +740,7 @@ The object passed as the *tzinfo* argument to the :class:`datetime` constructor, or ``None`` if none was passed. + Supported operations: +---------------------------------------+-------------------------------+ @@ -817,7 +814,6 @@ Instance methods: - .. method:: datetime.date() Return :class:`date` object with same year, month and day. @@ -995,7 +991,8 @@ .. method:: datetime.strftime(format) Return a string representing the date and time, controlled by an explicit format - string. See section :ref:`strftime-behavior`. + string. See section :ref:`strftime-strptime-behavior`. + Examples of working with datetime objects: @@ -1108,7 +1105,6 @@ A time object represents a (local) time of day, independent of any particular day, and subject to adjustment via a :class:`tzinfo` object. - .. class:: time(hour[, minute[, second[, microsecond[, tzinfo]]]]) All arguments are optional. *tzinfo* may be ``None``, or an instance of a @@ -1142,8 +1138,8 @@ ``timedelta(microseconds=1)``, although note that arithmetic on :class:`time` objects is not supported. -Instance attributes (read-only): +Instance attributes (read-only): .. attribute:: time.hour @@ -1170,6 +1166,7 @@ The object passed as the tzinfo argument to the :class:`time` constructor, or ``None`` if none was passed. + Supported operations: * comparison of :class:`time` to :class:`time`, where *a* is considered less @@ -1192,8 +1189,8 @@ only if, after converting it to minutes and subtracting :meth:`utcoffset` (or ``0`` if that's ``None``), the result is non-zero. -Instance methods: +Instance methods: .. method:: time.replace([hour[, minute[, second[, microsecond[, tzinfo]]]]]) @@ -1219,7 +1216,7 @@ .. method:: time.strftime(format) Return a string representing the time, controlled by an explicit format string. - See section :ref:`strftime-behavior`. + See section :ref:`strftime-strptime-behavior`. .. method:: time.utcoffset() @@ -1244,6 +1241,7 @@ ``self.tzinfo.tzname(None)``, or raises an exception if the latter doesn't return ``None`` or a string object. + Example: >>> from datetime import time, tzinfo @@ -1380,6 +1378,7 @@ The default implementation of :meth:`tzname` raises :exc:`NotImplementedError`. + These methods are called by a :class:`datetime` or :class:`time` object, in response to their methods of the same names. A :class:`datetime` object passes itself as the argument, and a :class:`time` object passes ``None`` as the @@ -1483,10 +1482,10 @@ EST (fixed offset -5 hours), or only EDT (fixed offset -4 hours)). -.. _strftime-behavior: +.. _strftime-strptime-behavior: -:meth:`strftime` Behavior -------------------------- +:meth:`strftime` and :meth:`strptime` Behavior +---------------------------------------------- :class:`date`, :class:`datetime`, and :class:`time` objects all support a ``strftime(format)`` method, to create a string representing the time under the @@ -1494,9 +1493,14 @@ acts like the :mod:`time` module's ``time.strftime(fmt, d.timetuple())`` although not all objects support a :meth:`timetuple` method. +Conversely, the :meth:`datetime.strptime` class method creates a +:class:`datetime` object from a string representing a date and time and a +corresponding format string. ``datetime.strptime(date_string, format)`` is +equivalent to ``datetime(*(time.strptime(date_string, format)[0:6]))``. + For :class:`time` objects, the format codes for year, month, and day should not be used, as time objects have no such values. If they're used anyway, ``1900`` -is substituted for the year, and ``0`` for the month and day. +is substituted for the year, and ``1`` for the month and day. For :class:`date` objects, the format codes for hours, minutes, seconds, and microseconds should not be used, as :class:`date` objects have no such @@ -1623,14 +1627,14 @@ Notes: (1) - When used with the :func:`strptime` function, the ``%f`` directive + When used with the :meth:`strptime` method, the ``%f`` directive accepts from one to six digits and zero pads on the right. ``%f`` is an extension to the set of format characters in the C standard (but implemented separately in datetime objects, and therefore always available). (2) - When used with the :func:`strptime` function, the ``%p`` directive only affects + When used with the :meth:`strptime` method, the ``%p`` directive only affects the output hour field if the ``%I`` directive is used to parse the hour. (3) @@ -1638,11 +1642,11 @@ accounts for leap seconds and the (very rare) double leap seconds. The :mod:`time` module may produce and does accept leap seconds since it is based on the Posix standard, but the :mod:`datetime` module - does not accept leap seconds in :func:`strptime` input nor will it + does not accept leap seconds in :meth:`strptime` input nor will it produce them in :func:`strftime` output. (4) - When used with the :func:`strptime` function, ``%U`` and ``%W`` are only used in + When used with the :meth:`strptime` method, ``%U`` and ``%W`` are only used in calculations when the day of the week and the year are specified. (5) Modified: python/branches/release26-maint/Doc/library/inspect.rst ============================================================================== --- python/branches/release26-maint/Doc/library/inspect.rst (original) +++ python/branches/release26-maint/Doc/library/inspect.rst Sun Mar 21 20:16:28 2010 @@ -457,7 +457,7 @@ .. function:: getargspec(func) - Get the names and default values of a function's arguments. A tuple of four + Get the names and default values of a Python function's arguments. A tuple of four things is returned: ``(args, varargs, varkw, defaults)``. *args* is a list of the argument names (it may contain nested lists). *varargs* and *varkw* are the names of the ``*`` and ``**`` arguments or ``None``. *defaults* is a tuple of Modified: python/branches/release26-maint/Doc/library/msvcrt.rst ============================================================================== --- python/branches/release26-maint/Doc/library/msvcrt.rst (original) +++ python/branches/release26-maint/Doc/library/msvcrt.rst Sun Mar 21 20:16:28 2010 @@ -153,6 +153,4 @@ .. function:: heapmin() Force the :cfunc:`malloc` heap to clean itself up and return unused blocks to - the operating system. This only works on Windows NT. On failure, this raises - :exc:`IOError`. - + the operating system. On failure, this raises :exc:`IOError`. Modified: python/branches/release26-maint/Doc/library/select.rst ============================================================================== --- python/branches/release26-maint/Doc/library/select.rst (original) +++ python/branches/release26-maint/Doc/library/select.rst Sun Mar 21 20:16:28 2010 @@ -50,7 +50,7 @@ .. versionadded:: 2.6 -.. function:: kevent(ident, filter=KQ_FILTER_READ, flags=KQ_ADD, fflags=0, data=0, udata=0) +.. function:: kevent(ident, filter=KQ_FILTER_READ, flags=KQ_EV_ADD, fflags=0, data=0, udata=0) (Only supported on BSD.) Returns a kernel event object object; see section :ref:`kevent-objects` below for the methods supported by kqueue objects. Modified: python/branches/release26-maint/Doc/library/zipimport.rst ============================================================================== --- python/branches/release26-maint/Doc/library/zipimport.rst (original) +++ python/branches/release26-maint/Doc/library/zipimport.rst Sun Mar 21 20:16:28 2010 @@ -33,6 +33,8 @@ loaded from a ZIP archive; it is unlikely that :func:`reload` would be needed, since this would imply that the ZIP has been altered during runtime. +ZIP archives with an archive comment are currently not supported. + .. seealso:: `PKZIP Application Note `_ Modified: python/branches/release26-maint/Doc/using/windows.rst ============================================================================== --- python/branches/release26-maint/Doc/using/windows.rst (original) +++ python/branches/release26-maint/Doc/using/windows.rst Sun Mar 21 20:16:28 2010 @@ -168,12 +168,13 @@ .. `` -Modifying the module search path can also be done through the Windows registry: -Edit -:file:`HKEY_LOCAL_MACHINE\\SOFTWARE\\Python\\PythonCore\\{version}\\PythonPath\\`, -as described above for the environment variable :envvar:`%PYTHONPATH%`. A -convenient registry editor is :program:`regedit` (start it by typing "regedit" -into :menuselection:`Start --> Run`). +Modifying the module search path can also be done through the Windows registry +under the key :file:`HKLM\\SOFTWARE\\Python\\PythonCore\\{version}\\PythonPath`. +Subkeys which have semicolon-delimited path strings as their default value will +cause each path to be searched. Multiple subkeys can be created and are +appended to the path in alphabetical order. A convenient registry editor is +:program:`regedit` (start it by typing "regedit" into :menuselection:`Start --> +Run`). Executing scripts Modified: python/branches/release26-maint/Lib/email/generator.py ============================================================================== --- python/branches/release26-maint/Lib/email/generator.py (original) +++ python/branches/release26-maint/Lib/email/generator.py Sun Mar 21 20:16:28 2010 @@ -1,5 +1,4 @@ -# Copyright (C) 2001-2006 Python Software Foundation -# Author: Barry Warsaw +# Copyright (C) 2001-2010 Python Software Foundation # Contact: email-sig at python.org """Classes to generate plain text from a message object tree.""" Modified: python/branches/release26-maint/Lib/email/test/test_email.py ============================================================================== --- python/branches/release26-maint/Lib/email/test/test_email.py (original) +++ python/branches/release26-maint/Lib/email/test/test_email.py Sun Mar 21 20:16:28 2010 @@ -1,4 +1,4 @@ -# Copyright (C) 2001-2007 Python Software Foundation +# Copyright (C) 2001-2010 Python Software Foundation # Contact: email-sig at python.org # email package unit tests Modified: python/branches/release26-maint/Lib/email/utils.py ============================================================================== --- python/branches/release26-maint/Lib/email/utils.py (original) +++ python/branches/release26-maint/Lib/email/utils.py Sun Mar 21 20:16:28 2010 @@ -1,4 +1,4 @@ -# Copyright (C) 2001-2009 Python Software Foundation +# Copyright (C) 2001-2010 Python Software Foundation # Author: Barry Warsaw # Contact: email-sig at python.org Modified: python/branches/release26-maint/Lib/imaplib.py ============================================================================== --- python/branches/release26-maint/Lib/imaplib.py (original) +++ python/branches/release26-maint/Lib/imaplib.py Sun Mar 21 20:16:28 2010 @@ -1212,7 +1212,7 @@ Instantiate with: IMAP4_stream(command) - where "command" is a string that can be passed to Subprocess.Popen() + where "command" is a string that can be passed to subprocess.Popen() for more documentation see the docstring of the parent class IMAP4. """ Modified: python/branches/release26-maint/Lib/lib-tk/turtle.py ============================================================================== --- python/branches/release26-maint/Lib/lib-tk/turtle.py (original) +++ python/branches/release26-maint/Lib/lib-tk/turtle.py Sun Mar 21 20:16:28 2010 @@ -2,7 +2,7 @@ # turtle.py: a Tkinter based turtle graphics module for Python # Version 1.0.1 - 24. 9. 2009 # -# Copyright (C) 2006 - 2009 Gregor Lingl +# Copyright (C) 2006 - 2010 Gregor Lingl # email: glingl at aon.at # # This software is provided 'as-is', without any express or implied Modified: python/branches/release26-maint/Lib/logging/__init__.py ============================================================================== --- python/branches/release26-maint/Lib/logging/__init__.py (original) +++ python/branches/release26-maint/Lib/logging/__init__.py Sun Mar 21 20:16:28 2010 @@ -18,7 +18,7 @@ Logging package for Python. Based on PEP 282 and comments thereto in comp.lang.python, and influenced by Apache's log4j system. -Copyright (C) 2001-2009 Vinay Sajip. All Rights Reserved. +Copyright (C) 2001-2010 Vinay Sajip. All Rights Reserved. To use, simply 'import logging' and log away! """ Modified: python/branches/release26-maint/Lib/platform.py ============================================================================== --- python/branches/release26-maint/Lib/platform.py (original) +++ python/branches/release26-maint/Lib/platform.py Sun Mar 21 20:16:28 2010 @@ -91,7 +91,7 @@ __copyright__ = """ Copyright (c) 1999-2000, Marc-Andre Lemburg; mailto:mal at lemburg.com - Copyright (c) 2000-2008, eGenix.com Software GmbH; mailto:info at egenix.com + Copyright (c) 2000-2010, eGenix.com Software GmbH; mailto:info at egenix.com Permission to use, copy, modify, and distribute this software and its documentation for any purpose and without fee or royalty is hereby granted, Modified: python/branches/release26-maint/Lib/test/test_cmd.py ============================================================================== --- python/branches/release26-maint/Lib/test/test_cmd.py (original) +++ python/branches/release26-maint/Lib/test/test_cmd.py Sun Mar 21 20:16:28 2010 @@ -143,7 +143,7 @@ print "complete command" return - def do_shell(self): + def do_shell(self, s): pass def do_add(self, s): @@ -169,8 +169,8 @@ from test import test_support, test_cmd test_support.run_doctest(test_cmd, verbose) -import trace, sys def test_coverage(coverdir): + import trace tracer=trace.Trace(ignoredirs=[sys.prefix, sys.exec_prefix,], trace=0, count=1) tracer.run('reload(cmd);test_main()') @@ -181,5 +181,7 @@ if __name__ == "__main__": if "-c" in sys.argv: test_coverage('/tmp/cmd.cover') + elif "-i" in sys.argv: + samplecmdclass().cmdloop() else: test_main() Modified: python/branches/release26-maint/Lib/test/test_hashlib.py ============================================================================== --- python/branches/release26-maint/Lib/test/test_hashlib.py (original) +++ python/branches/release26-maint/Lib/test/test_hashlib.py Sun Mar 21 20:16:28 2010 @@ -2,7 +2,7 @@ # # $Id$ # -# Copyright (C) 2005 Gregory P. Smith (greg at krypto.org) +# Copyright (C) 2005-2010 Gregory P. Smith (greg at krypto.org) # Licensed to PSF under a Contributor Agreement. # Modified: python/branches/release26-maint/Lib/test/test_logging.py ============================================================================== --- python/branches/release26-maint/Lib/test/test_logging.py (original) +++ python/branches/release26-maint/Lib/test/test_logging.py Sun Mar 21 20:16:28 2010 @@ -1,6 +1,6 @@ #!/usr/bin/env python # -# Copyright 2001-2004 by Vinay Sajip. All Rights Reserved. +# Copyright 2001-2010 by Vinay Sajip. All Rights Reserved. # # Permission to use, copy, modify, and distribute this software and its # documentation for any purpose and without fee is hereby granted, @@ -18,7 +18,7 @@ """Test harness for the logging module. Run all tests. -Copyright (C) 2001-2002 Vinay Sajip. All Rights Reserved. +Copyright (C) 2001-2010 Vinay Sajip. All Rights Reserved. """ import logging Modified: python/branches/release26-maint/Mac/Resources/app/Info.plist.in ============================================================================== --- python/branches/release26-maint/Mac/Resources/app/Info.plist.in (original) +++ python/branches/release26-maint/Mac/Resources/app/Info.plist.in Sun Mar 21 20:16:28 2010 @@ -20,7 +20,7 @@ CFBundleExecutable Python CFBundleGetInfoString - %version%, (c) 2004-2009 Python Software Foundation. + %version%, (c) 2004-2010 Python Software Foundation. CFBundleHelpBookFolder Documentation @@ -37,7 +37,7 @@ CFBundleInfoDictionaryVersion 6.0 CFBundleLongVersionString - %version%, (c) 2004-2009 Python Software Foundation. + %version%, (c) 2004-2010 Python Software Foundation. CFBundleName Python CFBundlePackageType Modified: python/branches/release26-maint/Misc/developers.txt ============================================================================== --- python/branches/release26-maint/Misc/developers.txt (original) +++ python/branches/release26-maint/Misc/developers.txt Sun Mar 21 20:16:28 2010 @@ -17,7 +17,31 @@ Permissions History ------------------- -- Tarek Ziad? as given SVN access on Decmeber 21 2008 by NCN, +- Stefan Krah was given SVN access on January 5 2010 by GFB, at + suggestion of Mark Dickinson, for work on the decimal module. + +- Doug Hellmann was given SVN access on September 19 2009 by GFB, at + suggestion of Jesse Noller, for documentation work. + +- Ezio Melotti was given SVN access on June 7 2009 by GFB, for work on and + fixes to the documentation. + +- Paul Kippes was given commit privileges at PyCon 2009 by BAC to work on 3to2. + +- Ron DuPlain was given commit privileges at PyCon 2009 by BAC to work on 3to2. + +- Several developers of alternative Python implementations where + given access for test suite and library adaptions by MvL: + Allison Randal (Parrot), Michael Foord (IronPython), + Jim Baker, Philip Jenvey, and Frank Wierzbicki (all Jython). + +- R. David Murray was given SVN access on March 30 2009 by MvL, after + recommendation by BAC. + +- Chris Withers was given SVN access on March 8 2009 by MvL, + after recommendation by GvR. + +- Tarek Ziad? was given SVN access on December 21 2008 by NCN, for maintenance of distutils. - Hirokazu Yamamoto was given SVN access on August 12 2008 by MvL, Modified: python/branches/release26-maint/Modules/_hashopenssl.c ============================================================================== --- python/branches/release26-maint/Modules/_hashopenssl.c (original) +++ python/branches/release26-maint/Modules/_hashopenssl.c Sun Mar 21 20:16:28 2010 @@ -1,7 +1,7 @@ /* Module that wraps all OpenSSL hash algorithms */ /* - * Copyright (C) 2005 Gregory P. Smith (greg at krypto.org) + * Copyright (C) 2005-2010 Gregory P. Smith (greg at krypto.org) * Licensed to PSF under a Contributor Agreement. * * Derived from a skeleton of shamodule.c containing work performed by: Modified: python/branches/release26-maint/Modules/selectmodule.c ============================================================================== --- python/branches/release26-maint/Modules/selectmodule.c (original) +++ python/branches/release26-maint/Modules/selectmodule.c Sun Mar 21 20:16:28 2010 @@ -1161,7 +1161,7 @@ #endif PyDoc_STRVAR(kqueue_event_doc, -"kevent(ident, filter=KQ_FILTER_READ, flags=KQ_ADD, fflags=0, data=0, udata=0)\n\ +"kevent(ident, filter=KQ_FILTER_READ, flags=KQ_EV_ADD, fflags=0, data=0, udata=0)\n\ \n\ This object is the equivalent of the struct kevent for the C API.\n\ \n\ From python-checkins at python.org Sun Mar 21 20:18:02 2010 From: python-checkins at python.org (georg.brandl) Date: Sun, 21 Mar 2010 20:18:02 +0100 (CET) Subject: [Python-checkins] r79217 - python/branches/release26-maint Message-ID: <20100321191802.216F3DB53@mail.python.org> Author: georg.brandl Date: Sun Mar 21 20:18:01 2010 New Revision: 79217 Log: Blocked revisions 78091,78093 via svnmerge ........ r78091 | georg.brandl | 2010-02-07 18:02:22 +0100 (So, 07 Feb 2010) | 1 line Rename "exc_value" attribute on assertRaises context manager to "exception". ........ r78093 | georg.brandl | 2010-02-07 18:03:15 +0100 (So, 07 Feb 2010) | 1 line Remove unused imports in test modules. ........ Modified: python/branches/release26-maint/ (props changed) From python-checkins at python.org Sun Mar 21 20:19:41 2010 From: python-checkins at python.org (antoine.pitrou) Date: Sun, 21 Mar 2010 20:19:41 +0100 (CET) Subject: [Python-checkins] r79218 - in python/trunk: Makefile.pre.in Misc/NEWS Message-ID: <20100321191941.60002DB53@mail.python.org> Author: antoine.pitrou Date: Sun Mar 21 20:19:41 2010 New Revision: 79218 Log: Issue #1628484: The Makefile doesn't ignore the CFLAGS environment variable anymore. It also forwards the LDFLAGS settings to the linker when building a shared library. Modified: python/trunk/Makefile.pre.in python/trunk/Misc/NEWS Modified: python/trunk/Makefile.pre.in ============================================================================== --- python/trunk/Makefile.pre.in (original) +++ python/trunk/Makefile.pre.in Sun Mar 21 20:19:41 2010 @@ -59,7 +59,7 @@ # Compiler options OPT= @OPT@ BASECFLAGS= @BASECFLAGS@ -CFLAGS= $(BASECFLAGS) $(OPT) $(EXTRA_CFLAGS) +CFLAGS= $(BASECFLAGS) @CFLAGS@ $(OPT) $(EXTRA_CFLAGS) # Both CPPFLAGS and LDFLAGS need to contain the shell's value for setup.py to # be able to build extension modules using the directories specified in the # environment variables @@ -89,8 +89,8 @@ datarootdir= @datarootdir@ # Expanded directories -BINDIR= $(exec_prefix)/bin -LIBDIR= $(exec_prefix)/lib +BINDIR= @bindir@ +LIBDIR= @libdir@ MANDIR= @mandir@ INCLUDEDIR= @includedir@ CONFINCLUDEDIR= $(exec_prefix)/include @@ -401,8 +401,8 @@ # Build the shared modules sharedmods: $(BUILDPYTHON) @case $$MAKEFLAGS in \ - *s*) $(RUNSHARED) CC='$(CC)' LDSHARED='$(BLDSHARED)' OPT='$(OPT)' ./$(BUILDPYTHON) -E $(srcdir)/setup.py -q build;; \ - *) $(RUNSHARED) CC='$(CC)' LDSHARED='$(BLDSHARED)' OPT='$(OPT)' ./$(BUILDPYTHON) -E $(srcdir)/setup.py build;; \ + *s*) $(RUNSHARED) CC='$(CC)' LDSHARED='$(BLDSHARED)' LDFLAGS='$(LDFLAGS)' OPT='$(OPT)' ./$(BUILDPYTHON) -E $(srcdir)/setup.py -q build;; \ + *) $(RUNSHARED) CC='$(CC)' LDSHARED='$(BLDSHARED)' LDFLAGS='$(LDFLAGS)' OPT='$(OPT)' ./$(BUILDPYTHON) -E $(srcdir)/setup.py build;; \ esac # Build static library Modified: python/trunk/Misc/NEWS ============================================================================== --- python/trunk/Misc/NEWS (original) +++ python/trunk/Misc/NEWS Sun Mar 21 20:19:41 2010 @@ -91,6 +91,10 @@ Build ----- +- Issue #1628484: The Makefile doesn't ignore the CFLAGS environment + variable anymore. It also forwards the LDFLAGS settings to the linker + when building a shared library. + - Issue #6716: Quote -x arguments of compileall in MSI installer. - Issue #7705: Fix linking on FreeBSD. From python-checkins at python.org Sun Mar 21 20:24:08 2010 From: python-checkins at python.org (benjamin.peterson) Date: Sun, 21 Mar 2010 20:24:08 +0100 (CET) Subject: [Python-checkins] r79219 - python/trunk/Python/ceval.c Message-ID: <20100321192408.50154FBB9@mail.python.org> Author: benjamin.peterson Date: Sun Mar 21 20:24:08 2010 New Revision: 79219 Log: flatten condition Modified: python/trunk/Python/ceval.c Modified: python/trunk/Python/ceval.c ============================================================================== --- python/trunk/Python/ceval.c (original) +++ python/trunk/Python/ceval.c Sun Mar 21 20:24:08 2010 @@ -3177,14 +3177,12 @@ } } } - else { - if (argcount > 0 || kwcount > 0) { - PyErr_Format(PyExc_TypeError, - "%.200s() takes no arguments (%d given)", - PyString_AsString(co->co_name), - argcount + kwcount); - goto fail; - } + else if (argcount > 0 || kwcount > 0) { + PyErr_Format(PyExc_TypeError, + "%.200s() takes no arguments (%d given)", + PyString_AsString(co->co_name), + argcount + kwcount); + goto fail; } /* Allocate and initialize storage for cell vars, and copy free vars into frame. This isn't too efficient right now. */ From python-checkins at python.org Sun Mar 21 20:25:23 2010 From: python-checkins at python.org (antoine.pitrou) Date: Sun, 21 Mar 2010 20:25:23 +0100 (CET) Subject: [Python-checkins] r79220 - in python/branches/release26-maint: Makefile.pre.in Misc/NEWS Message-ID: <20100321192523.2A68EC74D@mail.python.org> Author: antoine.pitrou Date: Sun Mar 21 20:25:23 2010 New Revision: 79220 Log: Merged revisions 79218 via svnmerge from svn+ssh://pythondev at svn.python.org/python/trunk ........ r79218 | antoine.pitrou | 2010-03-21 20:19:41 +0100 (dim., 21 mars 2010) | 5 lines Issue #1628484: The Makefile doesn't ignore the CFLAGS environment variable anymore. It also forwards the LDFLAGS settings to the linker when building a shared library. ........ Modified: python/branches/release26-maint/ (props changed) python/branches/release26-maint/Makefile.pre.in python/branches/release26-maint/Misc/NEWS Modified: python/branches/release26-maint/Makefile.pre.in ============================================================================== --- python/branches/release26-maint/Makefile.pre.in (original) +++ python/branches/release26-maint/Makefile.pre.in Sun Mar 21 20:25:23 2010 @@ -57,7 +57,7 @@ # Compiler options OPT= @OPT@ BASECFLAGS= @BASECFLAGS@ -CFLAGS= $(BASECFLAGS) $(OPT) $(EXTRA_CFLAGS) +CFLAGS= $(BASECFLAGS) @CFLAGS@ $(OPT) $(EXTRA_CFLAGS) # Both CPPFLAGS and LDFLAGS need to contain the shell's value for setup.py to # be able to build extension modules using the directories specified in the # environment variables @@ -86,8 +86,8 @@ datarootdir= @datarootdir@ # Expanded directories -BINDIR= $(exec_prefix)/bin -LIBDIR= $(exec_prefix)/lib +BINDIR= @bindir@ +LIBDIR= @libdir@ MANDIR= @mandir@ INCLUDEDIR= @includedir@ CONFINCLUDEDIR= $(exec_prefix)/include @@ -394,8 +394,8 @@ # Build the shared modules sharedmods: $(BUILDPYTHON) @case $$MAKEFLAGS in \ - *s*) $(RUNSHARED) CC='$(CC)' LDSHARED='$(BLDSHARED)' OPT='$(OPT)' ./$(BUILDPYTHON) -E $(srcdir)/setup.py -q build;; \ - *) $(RUNSHARED) CC='$(CC)' LDSHARED='$(BLDSHARED)' OPT='$(OPT)' ./$(BUILDPYTHON) -E $(srcdir)/setup.py build;; \ + *s*) $(RUNSHARED) CC='$(CC)' LDSHARED='$(BLDSHARED)' LDFLAGS='$(LDFLAGS)' OPT='$(OPT)' ./$(BUILDPYTHON) -E $(srcdir)/setup.py -q build;; \ + *) $(RUNSHARED) CC='$(CC)' LDSHARED='$(BLDSHARED)' LDFLAGS='$(LDFLAGS)' OPT='$(OPT)' ./$(BUILDPYTHON) -E $(srcdir)/setup.py build;; \ esac # Build static library Modified: python/branches/release26-maint/Misc/NEWS ============================================================================== --- python/branches/release26-maint/Misc/NEWS (original) +++ python/branches/release26-maint/Misc/NEWS Sun Mar 21 20:25:23 2010 @@ -37,6 +37,13 @@ - Issue #7356: ctypes.util: Make parsing of ldconfig output independent of the locale. +Build +----- + +- Issue #1628484: The Makefile doesn't ignore the CFLAGS environment + variable anymore. It also forwards the LDFLAGS settings to the linker + when building a shared library. + What's New in Python 2.6.5? =========================== From python-checkins at python.org Sun Mar 21 20:25:26 2010 From: python-checkins at python.org (antoine.pitrou) Date: Sun, 21 Mar 2010 20:25:26 +0100 (CET) Subject: [Python-checkins] r79221 - in python/branches/py3k: Makefile.pre.in Misc/NEWS Message-ID: <20100321192526.AF06FF615@mail.python.org> Author: antoine.pitrou Date: Sun Mar 21 20:25:26 2010 New Revision: 79221 Log: Merged revisions 79218 via svnmerge from svn+ssh://pythondev at svn.python.org/python/trunk ........ r79218 | antoine.pitrou | 2010-03-21 20:19:41 +0100 (dim., 21 mars 2010) | 5 lines Issue #1628484: The Makefile doesn't ignore the CFLAGS environment variable anymore. It also forwards the LDFLAGS settings to the linker when building a shared library. ........ Modified: python/branches/py3k/ (props changed) python/branches/py3k/Makefile.pre.in python/branches/py3k/Misc/NEWS Modified: python/branches/py3k/Makefile.pre.in ============================================================================== --- python/branches/py3k/Makefile.pre.in (original) +++ python/branches/py3k/Makefile.pre.in Sun Mar 21 20:25:26 2010 @@ -59,7 +59,7 @@ # Compiler options OPT= @OPT@ BASECFLAGS= @BASECFLAGS@ -CFLAGS= $(BASECFLAGS) $(OPT) $(EXTRA_CFLAGS) +CFLAGS= $(BASECFLAGS) @CFLAGS@ $(OPT) $(EXTRA_CFLAGS) # Both CPPFLAGS and LDFLAGS need to contain the shell's value for setup.py to # be able to build extension modules using the directories specified in the # environment variables @@ -89,8 +89,8 @@ datarootdir= @datarootdir@ # Expanded directories -BINDIR= $(exec_prefix)/bin -LIBDIR= $(exec_prefix)/lib +BINDIR= @bindir@ +LIBDIR= @libdir@ MANDIR= @mandir@ INCLUDEDIR= @includedir@ CONFINCLUDEDIR= $(exec_prefix)/include @@ -418,8 +418,8 @@ # Build the shared modules sharedmods: $(BUILDPYTHON) @case $$MAKEFLAGS in \ - *s*) $(RUNSHARED) CC='$(CC)' LDSHARED='$(BLDSHARED)' OPT='$(OPT)' ./$(BUILDPYTHON) -E $(srcdir)/setup.py -q build;; \ - *) $(RUNSHARED) CC='$(CC)' LDSHARED='$(BLDSHARED)' OPT='$(OPT)' ./$(BUILDPYTHON) -E $(srcdir)/setup.py build;; \ + *s*) $(RUNSHARED) CC='$(CC)' LDSHARED='$(BLDSHARED)' LDFLAGS='$(LDFLAGS)' OPT='$(OPT)' ./$(BUILDPYTHON) -E $(srcdir)/setup.py -q build;; \ + *) $(RUNSHARED) CC='$(CC)' LDSHARED='$(BLDSHARED)' LDFLAGS='$(LDFLAGS)' OPT='$(OPT)' ./$(BUILDPYTHON) -E $(srcdir)/setup.py build;; \ esac # Build static library Modified: python/branches/py3k/Misc/NEWS ============================================================================== --- python/branches/py3k/Misc/NEWS (original) +++ python/branches/py3k/Misc/NEWS Sun Mar 21 20:25:26 2010 @@ -848,6 +848,10 @@ Build ----- +- Issue #1628484: The Makefile doesn't ignore the CFLAGS environment + variable anymore. It also forwards the LDFLAGS settings to the linker + when building a shared library. + - Issue #6716: Quote -x arguments of compileall in MSI installer. Exclude 2to3 tests from compileall. From python-checkins at python.org Sun Mar 21 20:27:27 2010 From: python-checkins at python.org (antoine.pitrou) Date: Sun, 21 Mar 2010 20:27:27 +0100 (CET) Subject: [Python-checkins] r79222 - in python/branches/release31-maint: Makefile.pre.in Misc/NEWS Message-ID: <20100321192727.F17F0E222@mail.python.org> Author: antoine.pitrou Date: Sun Mar 21 20:27:27 2010 New Revision: 79222 Log: Merged revisions 79221 via svnmerge from svn+ssh://pythondev at svn.python.org/python/branches/py3k ................ r79221 | antoine.pitrou | 2010-03-21 20:25:26 +0100 (dim., 21 mars 2010) | 11 lines Merged revisions 79218 via svnmerge from svn+ssh://pythondev at svn.python.org/python/trunk ........ r79218 | antoine.pitrou | 2010-03-21 20:19:41 +0100 (dim., 21 mars 2010) | 5 lines Issue #1628484: The Makefile doesn't ignore the CFLAGS environment variable anymore. It also forwards the LDFLAGS settings to the linker when building a shared library. ........ ................ Modified: python/branches/release31-maint/ (props changed) python/branches/release31-maint/Makefile.pre.in python/branches/release31-maint/Misc/NEWS Modified: python/branches/release31-maint/Makefile.pre.in ============================================================================== --- python/branches/release31-maint/Makefile.pre.in (original) +++ python/branches/release31-maint/Makefile.pre.in Sun Mar 21 20:27:27 2010 @@ -59,7 +59,7 @@ # Compiler options OPT= @OPT@ BASECFLAGS= @BASECFLAGS@ -CFLAGS= $(BASECFLAGS) $(OPT) $(EXTRA_CFLAGS) +CFLAGS= $(BASECFLAGS) @CFLAGS@ $(OPT) $(EXTRA_CFLAGS) # Both CPPFLAGS and LDFLAGS need to contain the shell's value for setup.py to # be able to build extension modules using the directories specified in the # environment variables @@ -89,8 +89,8 @@ datarootdir= @datarootdir@ # Expanded directories -BINDIR= $(exec_prefix)/bin -LIBDIR= $(exec_prefix)/lib +BINDIR= @bindir@ +LIBDIR= @libdir@ MANDIR= @mandir@ INCLUDEDIR= @includedir@ CONFINCLUDEDIR= $(exec_prefix)/include @@ -417,8 +417,8 @@ # Build the shared modules sharedmods: $(BUILDPYTHON) @case $$MAKEFLAGS in \ - *s*) $(RUNSHARED) CC='$(CC)' LDSHARED='$(BLDSHARED)' OPT='$(OPT)' ./$(BUILDPYTHON) -E $(srcdir)/setup.py -q build;; \ - *) $(RUNSHARED) CC='$(CC)' LDSHARED='$(BLDSHARED)' OPT='$(OPT)' ./$(BUILDPYTHON) -E $(srcdir)/setup.py build;; \ + *s*) $(RUNSHARED) CC='$(CC)' LDSHARED='$(BLDSHARED)' LDFLAGS='$(LDFLAGS)' OPT='$(OPT)' ./$(BUILDPYTHON) -E $(srcdir)/setup.py -q build;; \ + *) $(RUNSHARED) CC='$(CC)' LDSHARED='$(BLDSHARED)' LDFLAGS='$(LDFLAGS)' OPT='$(OPT)' ./$(BUILDPYTHON) -E $(srcdir)/setup.py build;; \ esac # Build static library Modified: python/branches/release31-maint/Misc/NEWS ============================================================================== --- python/branches/release31-maint/Misc/NEWS (original) +++ python/branches/release31-maint/Misc/NEWS Sun Mar 21 20:27:27 2010 @@ -4,6 +4,19 @@ (editors: check NEWS.help for information about editing NEWS using ReST.) +What's New in Python 3.1.3? +=========================== + +*Release date: 20XX-XX-XX* + +Build +----- + +- Issue #1628484: The Makefile doesn't ignore the CFLAGS environment + variable anymore. It also forwards the LDFLAGS settings to the linker + when building a shared library. + + What's New in Python 3.1.2? =========================== From python-checkins at python.org Sun Mar 21 20:29:05 2010 From: python-checkins at python.org (georg.brandl) Date: Sun, 21 Mar 2010 20:29:05 +0100 (CET) Subject: [Python-checkins] r79223 - in python/branches/release26-maint: Doc/bugs.rst Doc/c-api/exceptions.rst Doc/c-api/gcsupport.rst Doc/c-api/typeobj.rst Doc/data/refcounts.dat Doc/library/ftplib.rst Doc/library/markup.rst Doc/library/mutex.rst Doc/library/profile.rst Doc/library/xmlrpclib.rst Doc/reference/executionmodel.rst Doc/reference/expressions.rst Doc/whatsnew/2.6.rst Lib/plat-irix6/cdplayer.py Lib/test/test_strftime.py Misc/BeOS-setup.py Misc/HISTORY Misc/NEWS Misc/SpecialBuilds.txt Modules/selectmodule.c Message-ID: <20100321192905.69B5AE222@mail.python.org> Author: georg.brandl Date: Sun Mar 21 20:29:04 2010 New Revision: 79223 Log: Merged revisions 77593,77702-77703,77858,77887,78113-78115,78117,78245,78385-78386,78496,78760,78771-78773,78802 via svnmerge from svn+ssh://pythondev at svn.python.org/python/trunk ........ r77593 | georg.brandl | 2010-01-18 00:33:53 +0100 (Mo, 18 Jan 2010) | 1 line Fix internal reference. ........ r77702 | georg.brandl | 2010-01-23 09:43:31 +0100 (Sa, 23 Jan 2010) | 1 line #7762: fix refcount annotation of PyUnicode_Tailmatch(). ........ r77703 | georg.brandl | 2010-01-23 09:47:54 +0100 (Sa, 23 Jan 2010) | 1 line #7725: fix referencing issue. ........ r77858 | georg.brandl | 2010-01-30 18:57:48 +0100 (Sa, 30 Jan 2010) | 1 line #7802: fix invalid example (heh). ........ r77887 | georg.brandl | 2010-01-31 19:51:49 +0100 (So, 31 Jan 2010) | 5 lines Fix-up ftplib documentation: move exception descriptions to toplevel, not inside a class remove attribution in "versionadded" spell and grammar check docstring of FTP_TLS ........ r78113 | georg.brandl | 2010-02-08 23:37:20 +0100 (Mo, 08 Feb 2010) | 1 line Fix missing string formatting argument. ........ r78114 | georg.brandl | 2010-02-08 23:37:52 +0100 (Mo, 08 Feb 2010) | 1 line Fix undefined local. ........ r78115 | georg.brandl | 2010-02-08 23:40:51 +0100 (Mo, 08 Feb 2010) | 1 line Fix missing string formatting placeholder. ........ r78117 | georg.brandl | 2010-02-08 23:48:37 +0100 (Mo, 08 Feb 2010) | 1 line Convert test failure from output-producing to self.fail(). ........ r78245 | georg.brandl | 2010-02-19 20:36:08 +0100 (Fr, 19 Feb 2010) | 1 line #7967: PyXML is no more. ........ r78385 | georg.brandl | 2010-02-23 22:33:17 +0100 (Di, 23 Feb 2010) | 1 line #8000: fix deprecated directive. What a shame to lose that glorious issue number to such a minor bug :) ........ r78386 | georg.brandl | 2010-02-23 22:48:57 +0100 (Di, 23 Feb 2010) | 1 line #6544: fix refleak in kqueue, occurring in certain error conditions. ........ r78496 | georg.brandl | 2010-02-27 15:58:08 +0100 (Sa, 27 Feb 2010) | 1 line Link to http://www.python.org/dev/workflow/ from bugs page. ........ r78760 | georg.brandl | 2010-03-07 16:23:59 +0100 (So, 07 M?r 2010) | 1 line #5341: more built-in vs builtin fixes. ........ r78771 | georg.brandl | 2010-03-07 21:58:31 +0100 (So, 07 M?r 2010) | 1 line #8085: The function is called PyObject_NewVar, not PyObject_VarNew. ........ r78772 | georg.brandl | 2010-03-07 22:12:28 +0100 (So, 07 M?r 2010) | 1 line #8039: document conditional expressions better, giving them their own section. ........ r78773 | georg.brandl | 2010-03-07 22:32:06 +0100 (So, 07 M?r 2010) | 1 line #8044: document Py_{Enter,Leave}RecursiveCall functions. ........ r78802 | georg.brandl | 2010-03-08 17:28:40 +0100 (Mo, 08 M?r 2010) | 1 line Fix typo. ........ Modified: python/branches/release26-maint/ (props changed) python/branches/release26-maint/Doc/bugs.rst python/branches/release26-maint/Doc/c-api/exceptions.rst python/branches/release26-maint/Doc/c-api/gcsupport.rst python/branches/release26-maint/Doc/c-api/typeobj.rst python/branches/release26-maint/Doc/data/refcounts.dat python/branches/release26-maint/Doc/library/ftplib.rst python/branches/release26-maint/Doc/library/markup.rst python/branches/release26-maint/Doc/library/mutex.rst python/branches/release26-maint/Doc/library/profile.rst python/branches/release26-maint/Doc/library/xmlrpclib.rst python/branches/release26-maint/Doc/reference/executionmodel.rst python/branches/release26-maint/Doc/reference/expressions.rst python/branches/release26-maint/Doc/whatsnew/2.6.rst python/branches/release26-maint/Lib/plat-irix6/cdplayer.py python/branches/release26-maint/Lib/test/test_strftime.py python/branches/release26-maint/Misc/BeOS-setup.py python/branches/release26-maint/Misc/HISTORY python/branches/release26-maint/Misc/NEWS python/branches/release26-maint/Misc/SpecialBuilds.txt python/branches/release26-maint/Modules/selectmodule.c Modified: python/branches/release26-maint/Doc/bugs.rst ============================================================================== --- python/branches/release26-maint/Doc/bugs.rst (original) +++ python/branches/release26-maint/Doc/bugs.rst Sun Mar 21 20:29:04 2010 @@ -23,10 +23,9 @@ http://docs.python.org/dev to see if the bug has been fixed. If the problem you're reporting is not already in the bug tracker, go back to -the Python Bug Tracker. If you don't already have a tracker account, select the -"Register" link in the sidebar and undergo the registration procedure. -Otherwise, if you're not logged in, enter your credentials and select "Login". -It is not possible to submit a bug report anonymously. +the Python Bug Tracker and log in. If you don't already have a tracker account, +select the "Register" link or, if you use OpenID, one of the OpenID provider +logos in the sidebar. It is not possible to submit a bug report anonymously. Being now logged in, you can submit a bug. Select the "Create New" link in the sidebar to open the bug reporting form. @@ -43,7 +42,8 @@ Each bug report will be assigned to a developer who will determine what needs to be done to correct the problem. You will receive an update each time action is -taken on the bug. +taken on the bug. See http://www.python.org/dev/workflow/ for a detailed +description of the issue workflow. .. seealso:: Modified: python/branches/release26-maint/Doc/c-api/exceptions.rst ============================================================================== --- python/branches/release26-maint/Doc/c-api/exceptions.rst (original) +++ python/branches/release26-maint/Doc/c-api/exceptions.rst Sun Mar 21 20:29:04 2010 @@ -429,6 +429,36 @@ the warning message. +Recursion Control +================= + +These two functions provide a way to perform safe recursive calls at the C +level, both in the core and in extension modules. They are needed if the +recursive code does not necessarily invoke Python code (which tracks its +recursion depth automatically). + +.. cfunction:: int Py_EnterRecursiveCall(char *where) + + Marks a point where a recursive C-level call is about to be performed. + + If :const:`USE_STACKCHECK` is defined, this function checks if the the OS + stack overflowed using :cfunc:`PyOS_CheckStack`. In this is the case, it + sets a :exc:`MemoryError` and returns a nonzero value. + + The function then checks if the recursion limit is reached. If this is the + case, a :exc:`RuntimeError` is set and a nonzero value is returned. + Otherwise, zero is returned. + + *where* should be a string such as ``" in instance check"`` to be + concatenated to the :exc:`RuntimeError` message caused by the recursion depth + limit. + +.. cfunction:: void Py_LeaveRecursiveCall() + + Ends a :cfunc:`Py_EnterRecursiveCall`. Must be called once for each + *successful* invocation of :cfunc:`Py_EnterRecursiveCall`. + + .. _standardexceptions: Standard Exceptions Modified: python/branches/release26-maint/Doc/c-api/gcsupport.rst ============================================================================== --- python/branches/release26-maint/Doc/c-api/gcsupport.rst (original) +++ python/branches/release26-maint/Doc/c-api/gcsupport.rst Sun Mar 21 20:29:04 2010 @@ -31,7 +31,7 @@ Constructors for container types must conform to two rules: #. The memory for the object must be allocated using :cfunc:`PyObject_GC_New` - or :cfunc:`PyObject_GC_VarNew`. + or :cfunc:`PyObject_GC_NewVar`. #. Once all the fields which may contain references to other containers are initialized, it must call :cfunc:`PyObject_GC_Track`. Modified: python/branches/release26-maint/Doc/c-api/typeobj.rst ============================================================================== --- python/branches/release26-maint/Doc/c-api/typeobj.rst (original) +++ python/branches/release26-maint/Doc/c-api/typeobj.rst Sun Mar 21 20:29:04 2010 @@ -189,7 +189,7 @@ instance; this is normally :cfunc:`PyObject_Del` if the instance was allocated using :cfunc:`PyObject_New` or :cfunc:`PyObject_VarNew`, or :cfunc:`PyObject_GC_Del` if the instance was allocated using - :cfunc:`PyObject_GC_New` or :cfunc:`PyObject_GC_VarNew`. + :cfunc:`PyObject_GC_New` or :cfunc:`PyObject_GC_NewVar`. This field is inherited by subtypes. Modified: python/branches/release26-maint/Doc/data/refcounts.dat ============================================================================== --- python/branches/release26-maint/Doc/data/refcounts.dat (original) +++ python/branches/release26-maint/Doc/data/refcounts.dat Sun Mar 21 20:29:04 2010 @@ -1595,7 +1595,7 @@ PyUnicode_Join:PyObject*:separator:0: PyUnicode_Join:PyObject*:seq:0: -PyUnicode_Tailmatch:PyObject*::+1: +PyUnicode_Tailmatch:int::: PyUnicode_Tailmatch:PyObject*:str:0: PyUnicode_Tailmatch:PyObject*:substr:0: PyUnicode_Tailmatch:int:start:: Modified: python/branches/release26-maint/Doc/library/ftplib.rst ============================================================================== --- python/branches/release26-maint/Doc/library/ftplib.rst (original) +++ python/branches/release26-maint/Doc/library/ftplib.rst Sun Mar 21 20:29:04 2010 @@ -33,8 +33,8 @@ '226 Transfer complete.' >>> ftp.quit() -The module defines the following items: +The module defines the following items: .. class:: FTP([host[, user[, passwd[, acct[, timeout]]]]]) @@ -50,42 +50,42 @@ *timeout* was added. - .. attribute:: all_errors +.. exception:: error_reply - The set of all exceptions (as a tuple) that methods of :class:`FTP` - instances may raise as a result of problems with the FTP connection (as - opposed to programming errors made by the caller). This set includes the - four exceptions listed below as well as :exc:`socket.error` and - :exc:`IOError`. + Exception raised when an unexpected reply is received from the server. - .. exception:: error_reply +.. exception:: error_temp - Exception raised when an unexpected reply is received from the server. + Exception raised when an error code in the range 400--499 is received. - .. exception:: error_temp +.. exception:: error_perm - Exception raised when an error code in the range 400--499 is received. + Exception raised when an error code in the range 500--599 is received. - .. exception:: error_perm +.. exception:: error_proto - Exception raised when an error code in the range 500--599 is received. + Exception raised when a reply is received from the server that does not + begin with a digit in the range 1--5. - .. exception:: error_proto +.. data:: all_errors - Exception raised when a reply is received from the server that does not - begin with a digit in the range 1--5. + The set of all exceptions (as a tuple) that methods of :class:`FTP` + instances may raise as a result of problems with the FTP connection (as + opposed to programming errors made by the caller). This set includes the + four exceptions listed below as well as :exc:`socket.error` and + :exc:`IOError`. .. seealso:: Module :mod:`netrc` - Parser for the :file:`.netrc` file format. The file :file:`.netrc` is typically - used by FTP clients to load user authentication information before prompting the - user. + Parser for the :file:`.netrc` file format. The file :file:`.netrc` is + typically used by FTP clients to load user authentication information + before prompting the user. .. index:: single: ftpmirror.py Modified: python/branches/release26-maint/Doc/library/markup.rst ============================================================================== --- python/branches/release26-maint/Doc/library/markup.rst (original) +++ python/branches/release26-maint/Doc/library/markup.rst Sun Mar 21 20:29:04 2010 @@ -35,10 +35,3 @@ xml.sax.utils.rst xml.sax.reader.rst xml.etree.elementtree.rst - -.. seealso:: - - `Python/XML Libraries `_ - Home page for the PyXML package, containing an extension of :mod:`xml` package - bundled with Python. - Modified: python/branches/release26-maint/Doc/library/mutex.rst ============================================================================== --- python/branches/release26-maint/Doc/library/mutex.rst (original) +++ python/branches/release26-maint/Doc/library/mutex.rst Sun Mar 21 20:29:04 2010 @@ -6,7 +6,7 @@ :synopsis: Lock and queue for mutual exclusion. :deprecated: -.. deprecated:: +.. deprecated:: 2.6 The :mod:`mutex` module has been removed in Python 3.0. .. sectionauthor:: Moshe Zadka Modified: python/branches/release26-maint/Doc/library/profile.rst ============================================================================== --- python/branches/release26-maint/Doc/library/profile.rst (original) +++ python/branches/release26-maint/Doc/library/profile.rst Sun Mar 21 20:29:04 2010 @@ -124,7 +124,7 @@ cProfile.py [-o output_file] [-s sort_order] -:option:`-s` only applies to standard output (:option:`-o` is not supplied). +``-s`` only applies to standard output (``-o`` is not supplied). Look in the :class:`Stats` documentation for valid sort values. When you wish to review the profile, you should use the methods in the Modified: python/branches/release26-maint/Doc/library/xmlrpclib.rst ============================================================================== --- python/branches/release26-maint/Doc/library/xmlrpclib.rst (original) +++ python/branches/release26-maint/Doc/library/xmlrpclib.rst Sun Mar 21 20:29:04 2010 @@ -414,12 +414,12 @@ error. In the following example we're going to intentionally cause a :exc:`ProtocolError` -by providing an invalid URI:: +by providing an URI that doesn't point to an XMLRPC server:: import xmlrpclib - # create a ServerProxy with an invalid URI - proxy = xmlrpclib.ServerProxy("http://invalidaddress/") + # create a ServerProxy with an URI that doesn't respond to XMLRPC requests + proxy = xmlrpclib.ServerProxy("http://www.google.com/") try: proxy.some_method() Modified: python/branches/release26-maint/Doc/reference/executionmodel.rst ============================================================================== --- python/branches/release26-maint/Doc/reference/executionmodel.rst (original) +++ python/branches/release26-maint/Doc/reference/executionmodel.rst Sun Mar 21 20:29:04 2010 @@ -119,7 +119,7 @@ .. index:: pair: restricted; execution -The built-in namespace associated with the execution of a code block is actually +The builtins namespace associated with the execution of a code block is actually found by looking up the name ``__builtins__`` in its global namespace; this should be a dictionary or a module (in the latter case the module's dictionary is used). By default, when in the :mod:`__main__` module, ``__builtins__`` is @@ -131,7 +131,7 @@ .. impl-detail:: Users should not touch ``__builtins__``; it is strictly an implementation - detail. Users wanting to override values in the built-in namespace should + detail. Users wanting to override values in the builtins namespace should :keyword:`import` the :mod:`__builtin__` (no 's') module and modify its attributes appropriately. Modified: python/branches/release26-maint/Doc/reference/expressions.rst ============================================================================== --- python/branches/release26-maint/Doc/reference/expressions.rst (original) +++ python/branches/release26-maint/Doc/reference/expressions.rst Sun Mar 21 20:29:04 2010 @@ -185,6 +185,7 @@ list_comprehension: `expression` `list_for` list_for: "for" `target_list` "in" `old_expression_list` [`list_iter`] old_expression_list: `old_expression` [("," `old_expression`)+ [","]] + old_expression: `or_test` | `old_lambda_form` list_iter: `list_for` | `list_if` list_if: "if" `old_expression` [`list_iter`] @@ -1136,12 +1137,7 @@ pair: Conditional; expression pair: Boolean; operation -Boolean operations have the lowest priority of all Python operations: - .. productionlist:: - expression: `conditional_expression` | `lambda_form` - old_expression: `or_test` | `old_lambda_form` - conditional_expression: `or_test` ["if" `or_test` "else" `expression`] or_test: `and_test` | `or_test` "or" `and_test` and_test: `not_test` | `and_test` "and" `not_test` not_test: `comparison` | "not" `not_test` @@ -1158,12 +1154,6 @@ The operator :keyword:`not` yields ``True`` if its argument is false, ``False`` otherwise. -The expression ``x if C else y`` first evaluates *C* (*not* *x*); if *C* is -true, *x* is evaluated and its value is returned; otherwise, *y* is evaluated -and its value is returned. - -.. versionadded:: 2.5 - .. index:: operator: and The expression ``x and y`` first evaluates *x*; if *x* is false, its value is @@ -1183,6 +1173,29 @@ 'foo'`` yields ``False``, not ``''``.) +Conditional Expressions +======================= + +.. versionadded:: 2.5 + +.. index:: + pair: conditional; expression + pair: ternary; operator + +.. productionlist:: + conditional_expression: `or_test` ["if" `or_test` "else" `expression`] + expression: `conditional_expression` | `lambda_form` + +Conditional expressions (sometimes called a "ternary operator") have the lowest +priority of all Python operations. + +The expression ``x if C else y`` first evaluates the condition, *C* (*not* *x*); +if *C* is true, *x* is evaluated and its value is returned; otherwise, *y* is +evaluated and its value is returned. + +See :pep:`308` for more details about conditional expressions. + + .. _lambdas: .. _lambda: @@ -1276,6 +1289,8 @@ +===============================================+=====================================+ | :keyword:`lambda` | Lambda expression | +-----------------------------------------------+-------------------------------------+ +| :keyword:`if` -- :keyword:`else` | Conditional expression | ++-----------------------------------------------+-------------------------------------+ | :keyword:`or` | Boolean OR | +-----------------------------------------------+-------------------------------------+ | :keyword:`and` | Boolean AND | Modified: python/branches/release26-maint/Doc/whatsnew/2.6.rst ============================================================================== --- python/branches/release26-maint/Doc/whatsnew/2.6.rst (original) +++ python/branches/release26-maint/Doc/whatsnew/2.6.rst Sun Mar 21 20:29:04 2010 @@ -109,9 +109,9 @@ :func:`reduce` function. Python 3.0 adds several new built-in functions and changes the -semantics of some existing built-ins. Functions that are new in 3.0 +semantics of some existing builtins. Functions that are new in 3.0 such as :func:`bin` have simply been added to Python 2.6, but existing -built-ins haven't been changed; instead, the :mod:`future_builtins` +builtins haven't been changed; instead, the :mod:`future_builtins` module has versions with the new 3.0 semantics. Code written to be compatible with 3.0 can do ``from future_builtins import hex, map`` as necessary. @@ -833,7 +833,7 @@ else: return str(self) -There's also a :func:`format` built-in that will format a single +There's also a :func:`format` builtin that will format a single value. It calls the type's :meth:`__format__` method with the provided specifier:: @@ -1164,7 +1164,7 @@ feature for Python. The ABC support consists of an :mod:`abc` module containing a metaclass called :class:`ABCMeta`, special handling of this metaclass by the :func:`isinstance` and :func:`issubclass` -built-ins, and a collection of basic ABCs that the Python developers +builtins, and a collection of basic ABCs that the Python developers think will be widely useful. Future versions of Python will probably add more ABCs. @@ -1318,9 +1318,9 @@ >>> 0b101111 47 -The :func:`oct` built-in still returns numbers +The :func:`oct` builtin still returns numbers prefixed with a leading zero, and a new :func:`bin` -built-in returns the binary representation for a number:: +builtin returns the binary representation for a number:: >>> oct(42) '052' @@ -1329,7 +1329,7 @@ >>> bin(173) '0b10101101' -The :func:`int` and :func:`long` built-ins will now accept the "0o" +The :func:`int` and :func:`long` builtins will now accept the "0o" and "0b" prefixes when base-8 or base-2 are requested, or when the *base* argument is zero (signalling that the base used should be determined from the string):: @@ -1415,7 +1415,7 @@ combined using bitwise operations such as ``&`` and ``|``, and can be used as array indexes and slice boundaries. -In Python 3.0, the PEP slightly redefines the existing built-ins +In Python 3.0, the PEP slightly redefines the existing builtins :func:`round`, :func:`math.floor`, :func:`math.ceil`, and adds a new one, :func:`math.trunc`, that's been backported to Python 2.6. :func:`math.trunc` rounds toward zero, returning the closest @@ -1523,7 +1523,7 @@ Previously this would have been a syntax error. (Contributed by Amaury Forgeot d'Arc; :issue:`3473`.) -* A new built-in, ``next(iterator, [default])`` returns the next item +* A new builtin, ``next(iterator, [default])`` returns the next item from the specified iterator. If the *default* argument is supplied, it will be returned if *iterator* has been exhausted; otherwise, the :exc:`StopIteration` exception will be raised. (Backported @@ -1952,9 +1952,9 @@ (Contributed by Phil Schwartz; :issue:`1221598`.) * The :func:`reduce` built-in function is also available in the - :mod:`functools` module. In Python 3.0, the built-in has been + :mod:`functools` module. In Python 3.0, the builtin has been dropped and :func:`reduce` is only available from :mod:`functools`; - currently there are no plans to drop the built-in in the 2.x series. + currently there are no plans to drop the builtin in the 2.x series. (Patched by Christian Heimes; :issue:`1739906`.) * When possible, the :mod:`getpass` module will now use @@ -2756,7 +2756,7 @@ * ``filter(predicate, iterable)``, ``map(func, iterable1, ...)``: the 3.0 versions - return iterators, unlike the 2.x built-ins which return lists. + return iterators, unlike the 2.x builtins which return lists. * ``hex(value)``, ``oct(value)``: instead of calling the :meth:`__hex__` or :meth:`__oct__` methods, these versions will Modified: python/branches/release26-maint/Lib/plat-irix6/cdplayer.py ============================================================================== --- python/branches/release26-maint/Lib/plat-irix6/cdplayer.py (original) +++ python/branches/release26-maint/Lib/plat-irix6/cdplayer.py Sun Mar 21 20:29:04 2010 @@ -85,7 +85,7 @@ new.write(self.id + '.title:\t' + self.title + '\n') new.write(self.id + '.artist:\t' + self.artist + '\n') for i in range(1, len(self.track)): - new.write('%s.track.%r:\t%s\n' % (i, track)) + new.write('%s.track.%r:\t%s\n' % (self.id, i, self.track[i])) old.close() new.close() posix.rename(filename + '.new', filename) Modified: python/branches/release26-maint/Lib/test/test_strftime.py ============================================================================== --- python/branches/release26-maint/Lib/test/test_strftime.py (original) +++ python/branches/release26-maint/Lib/test/test_strftime.py Sun Mar 21 20:29:04 2010 @@ -119,16 +119,15 @@ try: result = time.strftime(e[0], now) except ValueError, error: - print "Standard '%s' format gaver error:" % (e[0], error) - continue + self.fail("strftime '%s' format gave error: %s" % (e[0], error)) if re.match(escapestr(e[1], self.ampm), result): continue if not result or result[0] == '%': - print "Does not support standard '%s' format (%s)" % \ - (e[0], e[2]) + self.fail("strftime does not support standard '%s' format (%s)" + % (e[0], e[2])) else: - print "Conflict for %s (%s):" % (e[0], e[2]) - print " Expected %s, but got %s" % (e[1], result) + self.fail("Conflict for %s (%s): expected %s, but got %s" + % (e[0], e[2], e[1], result)) def strftest2(self, now): nowsecs = str(long(now))[:-1] Modified: python/branches/release26-maint/Misc/BeOS-setup.py ============================================================================== --- python/branches/release26-maint/Misc/BeOS-setup.py (original) +++ python/branches/release26-maint/Misc/BeOS-setup.py Sun Mar 21 20:29:04 2010 @@ -195,7 +195,7 @@ libraries=math_libs) ) # operator.add() and similar goodies exts.append( Extension('operator', ['operator.c']) ) - # access to the builtin codecs and codec registry + # access to the built-in codecs and codec registry exts.append( Extension('_codecs', ['_codecsmodule.c']) ) # Python C API test module exts.append( Extension('_testcapi', ['_testcapimodule.c']) ) Modified: python/branches/release26-maint/Misc/HISTORY ============================================================================== --- python/branches/release26-maint/Misc/HISTORY (original) +++ python/branches/release26-maint/Misc/HISTORY Sun Mar 21 20:29:04 2010 @@ -1154,7 +1154,7 @@ - Bug #1244610, #1392915, fix build problem on OpenBSD 3.7 and 3.8. configure would break checking curses.h. -- Bug #959576: The pwd module is now builtin. This allows Python to be +- Bug #959576: The pwd module is now built in. This allows Python to be built on UNIX platforms without $HOME set. - Bug #1072182, fix some potential problems if characters are signed. @@ -1187,7 +1187,7 @@ it will now use a default error message in this case. - Replaced most Unicode charmap codecs with new ones using the - new Unicode translate string feature in the builtin charmap + new Unicode translate string feature in the built-in charmap codec; the codecs were created from the mapping tables available at ftp.unicode.org and contain a few updates (e.g. the Mac OS encodings now include a mapping for the Apple logo) @@ -1642,7 +1642,7 @@ current file number. - Patch #1349274: gettext.install() now optionally installs additional - translation functions other than _() in the builtin namespace. + translation functions other than _() in the builtins namespace. - Patch #1337756: fileinput now accepts Unicode filenames. @@ -2013,7 +2013,7 @@ - Patch #881820: look for openpty and forkpty also in libbsd. - The sources of zlib are now part of the Python distribution (zlib 1.2.3). - The zlib module is now builtin on Windows. + The zlib module is now built in on Windows. - Use -xcode=pic32 for CCSHARED on Solaris with SunPro. @@ -2848,7 +2848,7 @@ - Patch #846659. Fix an error in tarfile.py when using GNU longname/longlink creation. -- The obsolete FCNTL.py has been deleted. The builtin fcntl module +- The obsolete FCNTL.py has been deleted. The built-in fcntl module has been available (on platforms that support fcntl) since Python 1.5a3, and all FCNTL.py did is export fcntl's names, after generating a deprecation warning telling you to use fcntl directly. @@ -3102,7 +3102,7 @@ segfault in a debug build, but provided less predictable behavior in a release build. -- input() builtin function now respects compiler flags such as +- input() built-in function now respects compiler flags such as __future__ statements. SF patch 876178. - Removed PendingDeprecationWarning from apply(). apply() remains @@ -3163,12 +3163,12 @@ - Compiler flags set in PYTHONSTARTUP are now active in __main__. -- Added two builtin types, set() and frozenset(). +- Added two built-in types, set() and frozenset(). -- Added a reversed() builtin function that returns a reverse iterator +- Added a reversed() built-in function that returns a reverse iterator over a sequence. -- Added a sorted() builtin function that returns a new sorted list +- Added a sorted() built-in function that returns a new sorted list from any iterable. - CObjects are now mutable (on the C level) through PyCObject_SetVoidPtr. @@ -3207,7 +3207,7 @@ When comparing containers with cyclic references to themselves it will now just hit the recursion limit. See SF patch 825639. -- str and unicode builtin types now have an rsplit() method that is +- str and unicode built-in types now have an rsplit() method that is same as split() except that it scans the string from the end working towards the beginning. See SF feature request 801847. @@ -3758,7 +3758,7 @@ - A warning about assignments to module attributes that shadow builtins, present in earlier releases of 2.3, has been removed. -- It is not possible to create subclasses of builtin types like str +- It is not possible to create subclasses of built-in types like str and tuple that define an itemsize. Earlier releases of Python 2.3 allowed this by mistake, leading to crashes and other problems. @@ -4233,13 +4233,13 @@ - New format codes B, H, I, k and K have been implemented for PyArg_ParseTuple and PyBuild_Value. -- New builtin function sum(seq, start=0) returns the sum of all the +- New built-in function sum(seq, start=0) returns the sum of all the items in iterable object seq, plus start (items are normally numbers, and cannot be strings). - bool() called without arguments now returns False rather than raising an exception. This is consistent with calling the - constructors for the other builtin types -- called without argument + constructors for the other built-in types -- called without argument they all return the false value of that type. (SF patch #724135) - In support of PEP 269 (making the pgen parser generator accessible @@ -4764,7 +4764,7 @@ internals, and supplies some helpers for working with pickles, such as a symbolic pickle disassembler. -- Xmlrpclib.py now supports the builtin boolean type. +- xmlrpclib.py now supports the built-in boolean type. - py_compile has a new 'doraise' flag and a new PyCompileError exception. @@ -5015,8 +5015,8 @@ trace function to change which line will execute next. A command to exploit this from pdb has been added. [SF patch #643835] -- The _codecs support module for codecs.py was turned into a builtin - module to assure that at least the builtin codecs are available +- The _codecs support module for codecs.py was turned into a built-in + module to assure that at least the built-in codecs are available to the Python parser for source code decoding according to PEP 263. - issubclass now supports a tuple as the second argument, just like @@ -5174,13 +5174,13 @@ - Unicode objects in sys.path are no longer ignored but treated as directory names. -- Fixed string.startswith and string.endswith builtin methods +- Fixed string.startswith and string.endswith built-in methods so they accept negative indices. [SF bug 493951] - Fixed a bug with a continue inside a try block and a yield in the finally clause. [SF bug 567538] -- Most builtin sequences now support "extended slices", i.e. slices +- Most built-in sequences now support "extended slices", i.e. slices with a third "stride" parameter. For example, "hello world"[::-1] gives "dlrow olleh". @@ -5195,7 +5195,7 @@ method no longer exist. xrange repetition and slicing have been removed. -- New builtin function enumerate(x), from PEP 279. Example: +- New built-in function enumerate(x), from PEP 279. Example: enumerate("abc") is an iterator returning (0,"a"), (1,"b"), (2,"c"). The argument can be an arbitrary iterable object. @@ -5744,7 +5744,7 @@ Presumably 2.3a1 breaks such systems. If anyone uses such a system, help! - The configure option --without-doc-strings can be used to remove the - doc strings from the builtin functions and modules; this reduces the + doc strings from the built-in functions and modules; this reduces the size of the executable. - The universal newlines option (PEP 278) is on by default. On Unix @@ -5980,7 +5980,7 @@ available for convenience. - New Carbon modules File (implementing the APIs in Files.h and Aliases.h) - and Folder (APIs from Folders.h). The old macfs builtin module is + and Folder (APIs from Folders.h). The old macfs built-in module is gone, and replaced by a Python wrapper around the new modules. - Pathname handling should now be fully consistent: MacPython-OSX always uses @@ -6202,7 +6202,7 @@ C API ----- -- New function PyDict_MergeFromSeq2() exposes the builtin dict +- New function PyDict_MergeFromSeq2() exposes the built-in dict constructor's logic for updating a dictionary from an iterable object producing key-value pairs. @@ -6253,7 +6253,7 @@ using new-style MRO rules if any base class is a new-style class. This needs to be documented. -- The new builtin dictionary() constructor, and dictionary type, have +- The new built-in dictionary() constructor, and dictionary type, have been renamed to dict. This reflects a decade of common usage. - dict() now accepts an iterable object producing 2-sequences. For @@ -6708,9 +6708,9 @@ The new class must have the same C-level object layout as the old class. -- The builtin file type can be subclassed now. In the usual pattern, - "file" is the name of the builtin type, and file() is a new builtin - constructor, with the same signature as the builtin open() function. +- The built-in file type can be subclassed now. In the usual pattern, + "file" is the name of the built-in type, and file() is a new built-in + constructor, with the same signature as the built-in open() function. file() is now the preferred way to open a file. - Previously, __new__ would only see sequential arguments passed to @@ -6724,7 +6724,7 @@ - Previously, an operation on an instance of a subclass of an immutable type (int, long, float, complex, tuple, str, unicode), where the subtype didn't override the operation (and so the - operation was handled by the builtin type), could return that + operation was handled by the built-in type), could return that instance instead a value of the base type. For example, if s was of a str subclass type, s[:] returned s as-is. Now it returns a str with the same value as s. @@ -6772,7 +6772,7 @@ called for each iteration until it returns an empty string). - The codecs module has grown four new helper APIs to access - builtin codecs: getencoder(), getdecoder(), getreader(), + built-in codecs: getencoder(), getdecoder(), getreader(), getwriter(). - SimpleXMLRPCServer: a new module (based upon SimpleHTMLServer) @@ -7902,7 +7902,7 @@ In all previous version of Python, names were resolved in exactly three namespaces -- the local namespace, the global namespace, and - the builtin namespace. According to this old definition, if a + the builtins namespace. According to this old definition, if a function A is defined within a function B, the names bound in B are not visible in A. The new rules make names bound in B visible in A, unless A contains a name binding that hides the binding in B. @@ -7923,7 +7923,7 @@ return str.strip() Under the old rules, the name str in helper() is bound to the - builtin function str(). Under the new rules, it will be bound to + built-in function str(). Under the new rules, it will be bound to the argument named str and an error will occur when helper() is called. @@ -8421,7 +8421,7 @@ assignment, e.g. +=, was fixed. - Raise ZeroDivisionError when raising zero to a negative number, - e.g. 0.0 ** -2.0. Note that math.pow is unrelated to the builtin + e.g. 0.0 ** -2.0. Note that math.pow is unrelated to the built-in power operator and the result of math.pow(0.0, -2.0) will vary by platform. On Linux, it raises a ValueError. @@ -12671,7 +12671,7 @@ overriding modules with the same name. - Fixed some strange exceptions in __del__ methods in library modules -(e.g. urllib). This happens because the builtin names are already +(e.g. urllib). This happens because the built-in names are already deleted by the time __del__ is called. The solution (a hack, but it works) is to set some instance variables to 0 instead of None. @@ -13374,8 +13374,8 @@ f(a=1,a=2) is now a syntax error. -Changes to builtin features ---------------------------- +Changes to built-in features +---------------------------- - There's a new exception FloatingPointError (used only by Lee Busby's patches to catch floating point exceptions, at the moment). @@ -14675,7 +14675,7 @@ - New modules: errno, operator (XXX). -- Changes for use with Numerical Python: builtin function slice() and +- Changes for use with Numerical Python: built-in function slice() and Ellipses object, and corresponding syntax: x[lo:hi:stride] == x[slice(lo, hi, stride)] @@ -15163,7 +15163,7 @@ - The functions posix.popen() and posix.fdopen() now have an optional third argument to specify the buffer size, and default their second -(mode) argument to 'r' -- in analogy to the builtin open() function. +(mode) argument to 'r' -- in analogy to the built-in open() function. The same applies to posixfile.open() and the socket method makefile(). - The thread.exit_thread() function now raises SystemExit so that Modified: python/branches/release26-maint/Misc/NEWS ============================================================================== --- python/branches/release26-maint/Misc/NEWS (original) +++ python/branches/release26-maint/Misc/NEWS Sun Mar 21 20:29:04 2010 @@ -21,6 +21,9 @@ Library ------- +- Issue #6544: fix a reference leak in the kqueue implementation's error + handling. + - Issue #7774: Set sys.executable to an empty string if argv[0] has been set to an non existent program name and Python is unable to retrieve the real program name @@ -505,8 +508,8 @@ - Issue #4618: When unicode arguments are passed to print(), the default separator and end should be unicode also. -- Issue #6119: Fixed a incorrect Py3k warning about order comparisons of - builtin functions and methods. +- Issue #6119: Fixed an incorrect Py3k warning about order comparisons of + built-in functions and methods. - Issue #5330: C functions called with keyword arguments were not reported by the various profiling modules (profile, cProfile). Patch by Hagen F?rstenau. @@ -535,7 +538,7 @@ - Issue #5829: complex('1e-500') no longer raises an exception - Issue #5787: object.__getattribute__(some_type, "__bases__") segfaulted on - some builtin types. + some built-in types. - Issue #5283: Setting __class__ in __del__ caused a segfault. @@ -2799,7 +2802,7 @@ - Fixed a minor memory leak in dictobject.c. The content of the free list was not freed on interpreter shutdown. -- Limit free list of method and builtin function objects to 256 +- Limit free list of method and built-in function objects to 256 entries each. - Patch #1953: Added ``sys._compact_freelists()`` and the C API @@ -2933,7 +2936,7 @@ - Fix warnings found by the new version of the Coverity checker. -- The enumerate() builtin function is no longer bounded to sequences +- The enumerate() built-in function is no longer bounded to sequences smaller than LONG_MAX. Formerly, it raised an OverflowError. Now, automatically shifts from ints to longs. @@ -2994,7 +2997,7 @@ - Deprecate BaseException.message as per PEP 352. - Issue #1303614: don't expose object's __dict__ when the dict is - inherited from a builtin base. + inherited from a built-in base. - When __slots__ are set to a unicode string, make it work the same as setting a plain string, ie don't expand to single letter identifiers. @@ -3903,7 +3906,7 @@ GNU modes. - Bug #1586448: the compiler module now emits the same bytecode for - list comprehensions as the builtin compiler, using the LIST_APPEND + list comprehensions as the built-in compiler, using the LIST_APPEND opcode. - Fix codecs.EncodedFile which did not use file_encoding in 2.5.0, and @@ -4135,7 +4138,7 @@ - Bug #1653736: Complain about keyword arguments to time.isoformat. - Bug #1486663: don't reject keyword arguments for subclasses of - builtin types. + built-in types. - Patch #1610575: The struct module now supports the 't' code, for C99 _Bool. @@ -4318,7 +4321,7 @@ - Bug #1629566: clarify the docs on the return values of parsedate() and parsedate_tz() in email.utils and rfc822. -- Patch #1671450: add a section about subclassing builtin types to the +- Patch #1671450: add a section about subclassing built-in types to the "extending and embedding" tutorial. - Bug #1629125: fix wrong data type (int -> Py_ssize_t) in PyDict_Next Modified: python/branches/release26-maint/Misc/SpecialBuilds.txt ============================================================================== --- python/branches/release26-maint/Misc/SpecialBuilds.txt (original) +++ python/branches/release26-maint/Misc/SpecialBuilds.txt Sun Mar 21 20:29:04 2010 @@ -37,7 +37,7 @@ Turn on heavy reference debugging. This is major surgery. Every PyObject grows two more pointers, to maintain a doubly-linked list of all live -heap-allocated objects. Most builtin type objects are not in this list, +heap-allocated objects. Most built-in type objects are not in this list, as they're statically allocated. Starting in Python 2.3, if COUNT_ALLOCS (see below) is also defined, a static type object T does appear in this list if at least one object of type T has been created. Modified: python/branches/release26-maint/Modules/selectmodule.c ============================================================================== --- python/branches/release26-maint/Modules/selectmodule.c (original) +++ python/branches/release26-maint/Modules/selectmodule.c Sun Mar 21 20:29:04 2010 @@ -1212,6 +1212,7 @@ #undef KQ_OFF static PyObject * + kqueue_event_repr(kqueue_event_Object *s) { char buf[1024]; @@ -1491,19 +1492,6 @@ return NULL; } - if (ch != NULL && ch != Py_None) { - it = PyObject_GetIter(ch); - if (it == NULL) { - PyErr_SetString(PyExc_TypeError, - "changelist is not iterable"); - return NULL; - } - nchanges = PyObject_Size(ch); - if (nchanges < 0) { - return NULL; - } - } - if (otimeout == Py_None || otimeout == NULL) { ptimeoutspec = NULL; } @@ -1539,11 +1527,22 @@ return NULL; } - if (nchanges) { + if (ch != NULL && ch != Py_None) { + it = PyObject_GetIter(ch); + if (it == NULL) { + PyErr_SetString(PyExc_TypeError, + "changelist is not iterable"); + return NULL; + } + nchanges = PyObject_Size(ch); + if (nchanges < 0) { + goto error; + } + chl = PyMem_New(struct kevent, nchanges); if (chl == NULL) { PyErr_NoMemory(); - return NULL; + goto error; } i = 0; while ((ei = PyIter_Next(it)) != NULL) { @@ -1566,7 +1565,7 @@ evl = PyMem_New(struct kevent, nevents); if (evl == NULL) { PyErr_NoMemory(); - return NULL; + goto error; } } From python-checkins at python.org Sun Mar 21 20:29:47 2010 From: python-checkins at python.org (georg.brandl) Date: Sun, 21 Mar 2010 20:29:47 +0100 (CET) Subject: [Python-checkins] r79224 - python/branches/release26-maint Message-ID: <20100321192947.CB100E379@mail.python.org> Author: georg.brandl Date: Sun Mar 21 20:29:47 2010 New Revision: 79224 Log: Re-record 79218 as merged. Modified: python/branches/release26-maint/ (props changed) From python-checkins at python.org Sun Mar 21 20:30:24 2010 From: python-checkins at python.org (georg.brandl) Date: Sun, 21 Mar 2010 20:30:24 +0100 (CET) Subject: [Python-checkins] r79225 - python/branches/release26-maint Message-ID: <20100321193024.1F327E379@mail.python.org> Author: georg.brandl Date: Sun Mar 21 20:30:23 2010 New Revision: 79225 Log: Blocked revisions 78589,78922,78949 via svnmerge ........ r78589 | georg.brandl | 2010-03-02 23:17:38 +0100 (Di, 02 M?r 2010) | 1 line Add some x-refs. ........ r78922 | georg.brandl | 2010-03-13 14:41:58 +0100 (Sa, 13 M?r 2010) | 1 line Update for new download location. ........ r78949 | georg.brandl | 2010-03-14 10:50:54 +0100 (So, 14 M?r 2010) | 1 line Format and rewrap 2.7 NEWS consistently. ........ Modified: python/branches/release26-maint/ (props changed) From python-checkins at python.org Sun Mar 21 20:33:38 2010 From: python-checkins at python.org (antoine.pitrou) Date: Sun, 21 Mar 2010 20:33:38 +0100 (CET) Subject: [Python-checkins] r79226 - in python/trunk: Lib/ssl.py Misc/NEWS Message-ID: <20100321193338.D39CCFBF8@mail.python.org> Author: antoine.pitrou Date: Sun Mar 21 20:33:38 2010 New Revision: 79226 Log: Issue #3890: Fix recv() and recv_into() on non-blocking SSL sockets. Modified: python/trunk/Lib/ssl.py python/trunk/Misc/NEWS Modified: python/trunk/Lib/ssl.py ============================================================================== --- python/trunk/Lib/ssl.py (original) +++ python/trunk/Lib/ssl.py Sun Mar 21 20:33:38 2010 @@ -210,16 +210,9 @@ if self._sslobj: if flags != 0: raise ValueError( - "non-zero flags not allowed in calls to sendall() on %s" % + "non-zero flags not allowed in calls to recv() on %s" % self.__class__) - while True: - try: - return self.read(buflen) - except SSLError, x: - if x.args[0] == SSL_ERROR_WANT_READ: - continue - else: - raise x + return self.read(buflen) else: return socket.recv(self, buflen, flags) @@ -233,17 +226,10 @@ raise ValueError( "non-zero flags not allowed in calls to recv_into() on %s" % self.__class__) - while True: - try: - tmp_buffer = self.read(nbytes) - v = len(tmp_buffer) - buffer[:v] = tmp_buffer - return v - except SSLError as x: - if x.args[0] == SSL_ERROR_WANT_READ: - continue - else: - raise x + tmp_buffer = self.read(nbytes) + v = len(tmp_buffer) + buffer[:v] = tmp_buffer + return v else: return socket.recv_into(self, buffer, nbytes, flags) Modified: python/trunk/Misc/NEWS ============================================================================== --- python/trunk/Misc/NEWS (original) +++ python/trunk/Misc/NEWS Sun Mar 21 20:33:38 2010 @@ -24,6 +24,8 @@ Library ------- +- Issue #3890: Fix recv() and recv_into() on non-blocking SSL sockets. + - Issue #8179: Fix macpath.realpath() on a non-existing path. - Issue #8024: Update the Unicode database to 5.2. From python-checkins at python.org Sun Mar 21 20:34:26 2010 From: python-checkins at python.org (georg.brandl) Date: Sun, 21 Mar 2010 20:34:26 +0100 (CET) Subject: [Python-checkins] r79227 - in python/branches/release26-maint: Doc/extending/newtypes.rst Doc/faq/library.rst Doc/faq/windows.rst Doc/library/codecs.rst Doc/library/datetime.rst Doc/library/functions.rst Doc/library/gzip.rst Doc/library/index.rst Doc/library/logging.rst Doc/library/objects.rst Doc/library/pdb.rst Doc/library/stdtypes.rst Doc/library/subprocess.rst Doc/library/sys.rst Doc/tutorial/datastructures.rst Doc/tutorial/introduction.rst Doc/whatsnew/2.2.rst Misc/Porting Message-ID: <20100321193426.EDA30F83E@mail.python.org> Author: georg.brandl Date: Sun Mar 21 20:34:26 2010 New Revision: 79227 Log: Merged revisions 78859-78860,78952,79168-79169,79173,79176,79178-79179,79181,79184-79185,79192,79212 via svnmerge from svn+ssh://pythondev at svn.python.org/python/trunk ........ r78859 | georg.brandl | 2010-03-12 10:57:43 +0100 (Fr, 12 M?r 2010) | 1 line Get rid of backticks. ........ r78860 | georg.brandl | 2010-03-12 11:02:03 +0100 (Fr, 12 M?r 2010) | 1 line Fix warnings from "make check". ........ r78952 | georg.brandl | 2010-03-14 10:55:08 +0100 (So, 14 M?r 2010) | 1 line #8137: add iso-8859-16 to the standard encodings table. ........ r79168 | georg.brandl | 2010-03-21 10:01:27 +0100 (So, 21 M?r 2010) | 1 line Fix some issues found by Jacques Ducasse on the docs list. ........ r79169 | georg.brandl | 2010-03-21 10:02:01 +0100 (So, 21 M?r 2010) | 1 line Remove the "built-in objects" file. It only contained two paragraphs of which only one contained useful information, which belongs in the ref manual however. ........ r79173 | georg.brandl | 2010-03-21 10:09:38 +0100 (So, 21 M?r 2010) | 1 line Document that GzipFile supports iteration. ........ r79176 | georg.brandl | 2010-03-21 10:17:41 +0100 (So, 21 M?r 2010) | 1 line Introduce copy by slicing, used in later chapters. ........ r79178 | georg.brandl | 2010-03-21 10:28:16 +0100 (So, 21 M?r 2010) | 1 line Clarify that for shell=True, the shell PID will be the child PID. ........ r79179 | georg.brandl | 2010-03-21 10:37:54 +0100 (So, 21 M?r 2010) | 1 line Mention inefficiency of lists as queues, add link to collections.deque discussion. ........ r79181 | georg.brandl | 2010-03-21 10:51:16 +0100 (So, 21 M?r 2010) | 1 line Update os.kill() emulation example for Windows to use ctypes. ........ r79184 | georg.brandl | 2010-03-21 10:58:36 +0100 (So, 21 M?r 2010) | 1 line Update text for newest US DST regulation. The sample file already has the calculation right. ........ r79185 | georg.brandl | 2010-03-21 11:02:47 +0100 (So, 21 M?r 2010) | 1 line Include structmember.h correctly. ........ r79192 | georg.brandl | 2010-03-21 12:50:58 +0100 (So, 21 M?r 2010) | 1 line Remove leftover word. ........ r79212 | georg.brandl | 2010-03-21 20:01:38 +0100 (So, 21 M?r 2010) | 1 line Fix plural. ........ Removed: python/branches/release26-maint/Doc/library/objects.rst Modified: python/branches/release26-maint/ (props changed) python/branches/release26-maint/Doc/extending/newtypes.rst python/branches/release26-maint/Doc/faq/library.rst python/branches/release26-maint/Doc/faq/windows.rst python/branches/release26-maint/Doc/library/codecs.rst python/branches/release26-maint/Doc/library/datetime.rst python/branches/release26-maint/Doc/library/functions.rst python/branches/release26-maint/Doc/library/gzip.rst python/branches/release26-maint/Doc/library/index.rst python/branches/release26-maint/Doc/library/logging.rst python/branches/release26-maint/Doc/library/pdb.rst python/branches/release26-maint/Doc/library/stdtypes.rst python/branches/release26-maint/Doc/library/subprocess.rst python/branches/release26-maint/Doc/library/sys.rst python/branches/release26-maint/Doc/tutorial/datastructures.rst python/branches/release26-maint/Doc/tutorial/introduction.rst python/branches/release26-maint/Doc/whatsnew/2.2.rst python/branches/release26-maint/Misc/Porting Modified: python/branches/release26-maint/Doc/extending/newtypes.rst ============================================================================== --- python/branches/release26-maint/Doc/extending/newtypes.rst (original) +++ python/branches/release26-maint/Doc/extending/newtypes.rst Sun Mar 21 20:34:26 2010 @@ -252,7 +252,7 @@ We've added an extra include:: - #include "structmember.h" + #include This include provides declarations that we use to handle attributes, as described a bit later. Modified: python/branches/release26-maint/Doc/faq/library.rst ============================================================================== --- python/branches/release26-maint/Doc/faq/library.rst (original) +++ python/branches/release26-maint/Doc/faq/library.rst Sun Mar 21 20:34:26 2010 @@ -205,7 +205,7 @@ while 1: try: c = sys.stdin.read(1) - print "Got character", `c` + print "Got character", repr(c) except IOError: pass finally: termios.tcsetattr(fd, termios.TCSAFLUSH, oldterm) Modified: python/branches/release26-maint/Doc/faq/windows.rst ============================================================================== --- python/branches/release26-maint/Doc/faq/windows.rst (original) +++ python/branches/release26-maint/Doc/faq/windows.rst Sun Mar 21 20:34:26 2010 @@ -441,13 +441,15 @@ How do I emulate os.kill() in Windows? -------------------------------------- -Use win32api:: +To terminate a process, you can use ctypes:: + + import ctypes def kill(pid): """kill function for Win32""" - import win32api - handle = win32api.OpenProcess(1, 0, pid) - return (0 != win32api.TerminateProcess(handle, 0)) + kernel32 = ctypes.windll.kernel32 + handle = kernel32.OpenProcess(1, 0, pid) + return (0 != kernel32.TerminateProcess(handle, 0)) Why does os.path.isdir() fail on NT shared directories? Modified: python/branches/release26-maint/Doc/library/codecs.rst ============================================================================== --- python/branches/release26-maint/Doc/library/codecs.rst (original) +++ python/branches/release26-maint/Doc/library/codecs.rst Sun Mar 21 20:34:26 2010 @@ -1035,11 +1035,13 @@ +-----------------+--------------------------------+--------------------------------+ | iso8859_10 | iso-8859-10, latin6, L6 | Nordic languages | +-----------------+--------------------------------+--------------------------------+ -| iso8859_13 | iso-8859-13 | Baltic languages | +| iso8859_13 | iso-8859-13, latin7, L7 | Baltic languages | +-----------------+--------------------------------+--------------------------------+ | iso8859_14 | iso-8859-14, latin8, L8 | Celtic languages | +-----------------+--------------------------------+--------------------------------+ -| iso8859_15 | iso-8859-15 | Western Europe | +| iso8859_15 | iso-8859-15, latin9, L9 | Western Europe | ++-----------------+--------------------------------+--------------------------------+ +| iso8859_16 | iso-8859-16, latin10, L10 | South-Eastern Europe | +-----------------+--------------------------------+--------------------------------+ | johab | cp1361, ms1361 | Korean | +-----------------+--------------------------------+--------------------------------+ Modified: python/branches/release26-maint/Doc/library/datetime.rst ============================================================================== --- python/branches/release26-maint/Doc/library/datetime.rst (original) +++ python/branches/release26-maint/Doc/library/datetime.rst Sun Mar 21 20:34:26 2010 @@ -1445,8 +1445,8 @@ Note that there are unavoidable subtleties twice per year in a :class:`tzinfo` subclass accounting for both standard and daylight time, at the DST transition points. For concreteness, consider US Eastern (UTC -0500), where EDT begins the -minute after 1:59 (EST) on the first Sunday in April, and ends the minute after -1:59 (EDT) on the last Sunday in October:: +minute after 1:59 (EST) on the second Sunday in March, and ends the minute after +1:59 (EDT) on the first Sunday in November:: UTC 3:MM 4:MM 5:MM 6:MM 7:MM 8:MM EST 22:MM 23:MM 0:MM 1:MM 2:MM 3:MM Modified: python/branches/release26-maint/Doc/library/functions.rst ============================================================================== --- python/branches/release26-maint/Doc/library/functions.rst (original) +++ python/branches/release26-maint/Doc/library/functions.rst Sun Mar 21 20:34:26 2010 @@ -336,7 +336,7 @@ This function can also be used to execute arbitrary code objects (such as those created by :func:`compile`). In this case pass a code object instead of a string. If the code object has been compiled with ``'exec'`` as the - *kind* argument, :func:`eval`\'s return value will be ``None``. + *mode* argument, :func:`eval`\'s return value will be ``None``. Hints: dynamic execution of statements is supported by the :keyword:`exec` statement. Execution of statements from a file is supported by the @@ -1135,7 +1135,8 @@ value is ``None``. *key* specifies a function of one argument that is used to extract a comparison - key from each list element: ``key=str.lower``. The default value is ``None``. + key from each list element: ``key=str.lower``. The default value is ``None`` + (compare the elements directly). *reverse* is a boolean value. If set to ``True``, then the list elements are sorted as if each comparison were reversed. Modified: python/branches/release26-maint/Doc/library/gzip.rst ============================================================================== --- python/branches/release26-maint/Doc/library/gzip.rst (original) +++ python/branches/release26-maint/Doc/library/gzip.rst Sun Mar 21 20:34:26 2010 @@ -58,6 +58,7 @@ writing as *fileobj*, and retrieve the resulting memory buffer using the :class:`StringIO` object's :meth:`getvalue` method. + :class:`GzipFile` supports iteration. .. function:: open(filename[, mode[, compresslevel]]) Modified: python/branches/release26-maint/Doc/library/index.rst ============================================================================== --- python/branches/release26-maint/Doc/library/index.rst (original) +++ python/branches/release26-maint/Doc/library/index.rst Sun Mar 21 20:34:26 2010 @@ -43,7 +43,6 @@ intro.rst functions.rst constants.rst - objects.rst stdtypes.rst exceptions.rst Modified: python/branches/release26-maint/Doc/library/logging.rst ============================================================================== --- python/branches/release26-maint/Doc/library/logging.rst (original) +++ python/branches/release26-maint/Doc/library/logging.rst Sun Mar 21 20:34:26 2010 @@ -1210,12 +1210,12 @@ :class:`Handler` subclass are passed to its :meth:`handleError` method. The default implementation of :meth:`handleError` in :class:`Handler` checks -to see if a module-level variable, `raiseExceptions`, is set. If set, a -traceback is printed to `sys.stderr`. If not set, the exception is swallowed. +to see if a module-level variable, :data:`raiseExceptions`, is set. If set, a +traceback is printed to :data:`sys.stderr`. If not set, the exception is swallowed. -**Note:** The default value of `raiseExceptions` is `True`. This is because +**Note:** The default value of :data:`raiseExceptions` is ``True``. This is because during development, you typically want to be notified of any exceptions that -occur. It's advised that you set `raiseExceptions` to `False` for production +occur. It's advised that you set :data:`raiseExceptions` to ``False`` for production usage. .. _context-info: Deleted: python/branches/release26-maint/Doc/library/objects.rst ============================================================================== --- python/branches/release26-maint/Doc/library/objects.rst Sun Mar 21 20:34:26 2010 +++ (empty file) @@ -1,27 +0,0 @@ - -.. _builtin: - -**************** -Built-in Objects -**************** - -.. index:: - pair: built-in; types - pair: built-in; exceptions - pair: built-in; functions - pair: built-in; constants - single: symbol table - -Names for built-in exceptions and functions and a number of constants are found -in a separate symbol table. This table is searched last when the interpreter -looks up the meaning of a name, so local and global user-defined names can -override built-in names. Built-in types are described together here for easy -reference. - -The tables in this chapter document the priorities of operators by listing them -in order of ascending priority (within a table) and grouping operators that have -the same priority in the same box. Binary operators of the same priority group -from left to right. (Unary operators group from right to left, but there you -have no real choice.) See :ref:`operator-summary` for the complete picture on -operator priorities. - Modified: python/branches/release26-maint/Doc/library/pdb.rst ============================================================================== --- python/branches/release26-maint/Doc/library/pdb.rst (original) +++ python/branches/release26-maint/Doc/library/pdb.rst Sun Mar 21 20:34:26 2010 @@ -23,7 +23,7 @@ The debugger is extensible --- it is actually defined as the class :class:`Pdb`. This is currently undocumented but easily understood by reading the source. The -extension interface uses the modules :mod:`bdb` (undocumented) and :mod:`cmd`. +extension interface uses the modules :mod:`bdb` and :mod:`cmd`. The debugger's prompt is ``(Pdb)``. Typical usage to run a program under control of the debugger is:: Modified: python/branches/release26-maint/Doc/library/stdtypes.rst ============================================================================== --- python/branches/release26-maint/Doc/library/stdtypes.rst (original) +++ python/branches/release26-maint/Doc/library/stdtypes.rst Sun Mar 21 20:34:26 2010 @@ -883,12 +883,12 @@ .. method:: str.format(*args, **kwargs) - Perform a string formatting operation. The *format_string* argument can - contain literal text or replacement fields delimited by braces ``{}``. Each - replacement field contains either the numeric index of a positional argument, - or the name of a keyword argument. Returns a copy of *format_string* where - each replacement field is replaced with the string value of the corresponding - argument. + Perform a string formatting operation. The string on which this method is + called can contain literal text or replacement fields delimited by braces + ``{}``. Each replacement field contains either the numeric index of a + positional argument, or the name of a keyword argument. Returns a copy of + the string where each replacement field is replaced with the string value of + the corresponding argument. >>> "The sum of 1 + 2 is {0}".format(1+2) 'The sum of 1 + 2 is 3' Modified: python/branches/release26-maint/Doc/library/subprocess.rst ============================================================================== --- python/branches/release26-maint/Doc/library/subprocess.rst (original) +++ python/branches/release26-maint/Doc/library/subprocess.rst Sun Mar 21 20:34:26 2010 @@ -339,6 +339,9 @@ The process ID of the child process. + Note that if you set the *shell* argument to ``True``, this is the process ID + of the spawned shell. + .. attribute:: Popen.returncode Modified: python/branches/release26-maint/Doc/library/sys.rst ============================================================================== --- python/branches/release26-maint/Doc/library/sys.rst (original) +++ python/branches/release26-maint/Doc/library/sys.rst Sun Mar 21 20:34:26 2010 @@ -405,7 +405,7 @@ specific. If given, *default* will be returned if the object does not provide means to - retrieve the size. Otherwise a `TypeError` will be raised. + retrieve the size. Otherwise a :exc:`TypeError` will be raised. :func:`getsizeof` calls the object's ``__sizeof__`` method and adds an additional garbage collector overhead if the object is managed by the garbage Modified: python/branches/release26-maint/Doc/tutorial/datastructures.rst ============================================================================== --- python/branches/release26-maint/Doc/tutorial/datastructures.rst (original) +++ python/branches/release26-maint/Doc/tutorial/datastructures.rst Sun Mar 21 20:34:26 2010 @@ -158,6 +158,11 @@ >>> queue # Remaining queue in order of arrival deque(['Michael', 'Terry', 'Graham']) +However, since lists are implemented as an array of elements, they are not the +optimal data structure to use as a queue (the ``pop(0)`` needs to move all +following elements). See :ref:`tut-list-tools` for a look at +:class:`collections.deque`, which is designed to work efficiently as a queue. + .. _tut-functional: Modified: python/branches/release26-maint/Doc/tutorial/introduction.rst ============================================================================== --- python/branches/release26-maint/Doc/tutorial/introduction.rst (original) +++ python/branches/release26-maint/Doc/tutorial/introduction.rst Sun Mar 21 20:34:26 2010 @@ -523,6 +523,12 @@ >>> 3*a[:3] + ['Boo!'] ['spam', 'eggs', 100, 'spam', 'eggs', 100, 'spam', 'eggs', 100, 'Boo!'] +All slice operations return a new list containing the requested elements. This +means that the following slice returns a shallow copy of the list *a*:: + + >>> a[:] + ['spam', 'eggs', 100, 1234] + Unlike strings, which are *immutable*, it is possible to change individual elements of a list:: Modified: python/branches/release26-maint/Doc/whatsnew/2.2.rst ============================================================================== --- python/branches/release26-maint/Doc/whatsnew/2.2.rst (original) +++ python/branches/release26-maint/Doc/whatsnew/2.2.rst Sun Mar 21 20:34:26 2010 @@ -30,7 +30,7 @@ to the PEP for a particular new feature. -.. seealso (now defunct) +.. see also, now defunct http://www.unixreview.com/documents/s=1356/urm0109h/0109h.htm "What's So Special About Python 2.2?" is also about the new 2.2 features, and Modified: python/branches/release26-maint/Misc/Porting ============================================================================== --- python/branches/release26-maint/Misc/Porting (original) +++ python/branches/release26-maint/Misc/Porting Sun Mar 21 20:34:26 2010 @@ -31,7 +31,7 @@ it out of the config.c file. Bang on it until you get a >>> prompt. (You may have to disable the -importing of "site.py" by passing the -S options.) +importing of "site.py" by passing the -S option.) Then bang on it until it executes very simple Python statements. From python-checkins at python.org Sun Mar 21 20:35:39 2010 From: python-checkins at python.org (benjamin.peterson) Date: Sun, 21 Mar 2010 20:35:39 +0100 (CET) Subject: [Python-checkins] r79228 - python/trunk/Python/ceval.c Message-ID: <20100321193539.9B324E542@mail.python.org> Author: benjamin.peterson Date: Sun Mar 21 20:35:39 2010 New Revision: 79228 Log: remove pointless condition Modified: python/trunk/Python/ceval.c Modified: python/trunk/Python/ceval.c ============================================================================== --- python/trunk/Python/ceval.c (original) +++ python/trunk/Python/ceval.c Sun Mar 21 20:35:39 2010 @@ -3115,23 +3115,21 @@ else if (cmp < 0) goto fail; } - if (j >= co->co_argcount) { - if (kwdict == NULL) { - PyObject *kwd_str = kwd_as_string(keyword); - if (kwd_str) { - PyErr_Format(PyExc_TypeError, - "%.200s() got an unexpected " - "keyword argument '%.400s'", - PyString_AsString(co->co_name), - PyString_AsString(kwd_str)); - Py_DECREF(kwd_str); - } - goto fail; + if (kwdict == NULL) { + PyObject *kwd_str = kwd_as_string(keyword); + if (kwd_str) { + PyErr_Format(PyExc_TypeError, + "%.200s() got an unexpected " + "keyword argument '%.400s'", + PyString_AsString(co->co_name), + PyString_AsString(kwd_str)); + Py_DECREF(kwd_str); } - PyDict_SetItem(kwdict, keyword, value); - continue; + goto fail; } -kw_found: + PyDict_SetItem(kwdict, keyword, value); + continue; + kw_found: if (GETLOCAL(j) != NULL) { PyObject *kwd_str = kwd_as_string(keyword); if (kwd_str) { From python-checkins at python.org Sun Mar 21 20:38:10 2010 From: python-checkins at python.org (georg.brandl) Date: Sun, 21 Mar 2010 20:38:10 +0100 (CET) Subject: [Python-checkins] r79229 - in python/branches/release26-maint: Misc/developers.txt Message-ID: <20100321193810.2CF34E542@mail.python.org> Author: georg.brandl Date: Sun Mar 21 20:38:10 2010 New Revision: 79229 Log: Merged revisions 70244,70714,70764,70962,70964,71001,77834,78327,78399,78454 via svnmerge from svn+ssh://pythondev at svn.python.org/python/trunk ........ r70244 | martin.v.loewis | 2009-03-08 15:06:19 +0100 (So, 08 M?r 2009) | 2 lines Add Chris Withers. ........ r70714 | brett.cannon | 2009-03-30 17:20:53 +0200 (Mo, 30 M?r 2009) | 1 line Add an entry to developers.txt. ........ r70764 | martin.v.loewis | 2009-03-31 00:06:33 +0200 (Di, 31 M?r 2009) | 2 lines Add several VM developers. ........ r70962 | brett.cannon | 2009-04-01 19:07:16 +0200 (Mi, 01 Apr 2009) | 2 lines Ron DuPlain was given commit privileges at PyCon 2009 to work on 3to2. ........ r70964 | brett.cannon | 2009-04-01 19:52:13 +0200 (Mi, 01 Apr 2009) | 2 lines Paul Kippes was given commit privileges to work on 3to2. ........ r71001 | brett.cannon | 2009-04-02 01:01:12 +0200 (Do, 02 Apr 2009) | 3 lines Add my initials to Misc/developers.txt. Names are now sorted by number of characters in the person's name. ........ r77834 | martin.v.loewis | 2010-01-30 01:15:44 +0100 (Sa, 30 Jan 2010) | 2 lines Add Victor Stinner. ........ r78327 | andrew.kuchling | 2010-02-22 18:21:54 +0100 (Mo, 22 Feb 2010) | 1 line Note granting of commit privileges to Larry Hastings ........ r78399 | brett.cannon | 2010-02-24 02:38:04 +0100 (Mi, 24 Feb 2010) | 1 line Record that Dino Viehland got commit privs. ........ r78454 | martin.v.loewis | 2010-02-25 21:42:40 +0100 (Do, 25 Feb 2010) | 2 lines Add Florent Xicluna. ........ Modified: python/branches/release26-maint/ (props changed) python/branches/release26-maint/Misc/developers.txt Modified: python/branches/release26-maint/Misc/developers.txt ============================================================================== --- python/branches/release26-maint/Misc/developers.txt (original) +++ python/branches/release26-maint/Misc/developers.txt Sun Mar 21 20:38:10 2010 @@ -17,6 +17,18 @@ Permissions History ------------------- +- Florent Xicluna was given commit access on February 25 2010 by + MvL, based on Antoine Pitrou's recommendation. + +- Dino Viehland was given SVN access on February 23 2010 by Brett + Cannon, for backporting tests from IronPython. + +- Larry Hastings was given SVN access on February 22 2010 by + Andrew Kuchling, based on Brett Cannon's recommendation. + +- Victor Stinner was given SVN access on January 30 2010 by MvL, + at recommendation by Mark Dickinson and Amaury Forgeot d'Arc. + - Stefan Krah was given SVN access on January 5 2010 by GFB, at suggestion of Mark Dickinson, for work on the decimal module. @@ -265,10 +277,11 @@ Initials of Project Admins -------------------------- -GvR: Guido van Rossum -NCN: Neal Norwitz -RDH: Raymond Hettinger TGP: Tim Peters +GFB: Georg Brandl +BAC: Brett Cannon +NCN: Neal Norwitz DJG: David Goodger MvL: Martin v. Loewis -GFB: Georg Brandl +GvR: Guido van Rossum +RDH: Raymond Hettinger From python-checkins at python.org Sun Mar 21 20:39:52 2010 From: python-checkins at python.org (benjamin.peterson) Date: Sun, 21 Mar 2010 20:39:52 +0100 (CET) Subject: [Python-checkins] r79230 - python/trunk/Python/ceval.c Message-ID: <20100321193952.E3FBADB17@mail.python.org> Author: benjamin.peterson Date: Sun Mar 21 20:39:52 2010 New Revision: 79230 Log: co_varnames is certainly a tuple, so let's not waste time finding out Modified: python/trunk/Python/ceval.c Modified: python/trunk/Python/ceval.c ============================================================================== --- python/trunk/Python/ceval.c (original) +++ python/trunk/Python/ceval.c Sun Mar 21 20:39:52 2010 @@ -3099,7 +3099,7 @@ } /* Speed hack: do raw pointer compares. As names are normally interned this should almost always hit. */ - co_varnames = PySequence_Fast_ITEMS(co->co_varnames); + co_varnames = ((PyTupleObject *)(co->co_varnames))->ob_item; for (j = 0; j < co->co_argcount; j++) { PyObject *nm = co_varnames[j]; if (nm == keyword) From python-checkins at python.org Sun Mar 21 20:42:33 2010 From: python-checkins at python.org (georg.brandl) Date: Sun, 21 Mar 2010 20:42:33 +0100 (CET) Subject: [Python-checkins] r79231 - python/branches/release26-maint Message-ID: <20100321194233.0FAB1E6DB@mail.python.org> Author: georg.brandl Date: Sun Mar 21 20:42:32 2010 New Revision: 79231 Log: Blocked revisions 76380,76628,76701,77001,77115,77127,77185,77187-77188,77262,77902,77936,78102,78104,78107,78112,78216,78580,78791,79208 via svnmerge ........ r76380 | antoine.pitrou | 2009-11-18 21:20:46 +0100 (Mi, 18 Nov 2009) | 3 lines Mention Giampolo R's new FTP TLS support in the what's new file ........ r76628 | andrew.kuchling | 2009-12-02 15:27:11 +0100 (Mi, 02 Dez 2009) | 1 line Markup fixes ........ r76701 | andrew.kuchling | 2009-12-08 03:37:05 +0100 (Di, 08 Dez 2009) | 1 line Typo fix; grammar fix ........ r77001 | brett.cannon | 2009-12-22 03:37:37 +0100 (Di, 22 Dez 2009) | 1 line Make a word plural. ........ r77115 | andrew.kuchling | 2009-12-29 21:10:16 +0100 (Di, 29 Dez 2009) | 1 line Various additions ........ r77127 | andrew.kuchling | 2009-12-30 00:41:04 +0100 (Mi, 30 Dez 2009) | 1 line Add various items ........ r77185 | andrew.kuchling | 2009-12-31 17:17:05 +0100 (Do, 31 Dez 2009) | 1 line Add some items ........ r77187 | andrew.kuchling | 2009-12-31 17:38:53 +0100 (Do, 31 Dez 2009) | 1 line Add various items ........ r77188 | benjamin.peterson | 2009-12-31 17:49:37 +0100 (Do, 31 Dez 2009) | 1 line add another advancement ........ r77262 | andrew.kuchling | 2010-01-03 02:15:21 +0100 (So, 03 Jan 2010) | 1 line Add a few items ........ r77902 | andrew.kuchling | 2010-02-01 03:04:26 +0100 (Mo, 01 Feb 2010) | 1 line Add various items ........ r77936 | andrew.kuchling | 2010-02-03 03:19:14 +0100 (Mi, 03 Feb 2010) | 1 line Add various items ........ r78102 | andrew.kuchling | 2010-02-08 02:35:35 +0100 (Mo, 08 Feb 2010) | 1 line Move distutils into its own subsection; add various items ........ r78104 | andrew.kuchling | 2010-02-08 14:22:24 +0100 (Mo, 08 Feb 2010) | 1 line Add two items; move a subsection ........ r78107 | antoine.pitrou | 2010-02-08 21:25:47 +0100 (Mo, 08 Feb 2010) | 3 lines Clarify and correct description for ccbench and iobench. ........ r78112 | ezio.melotti | 2010-02-08 23:22:41 +0100 (Mo, 08 Feb 2010) | 1 line Fix typo ........ r78216 | andrew.kuchling | 2010-02-18 15:16:48 +0100 (Do, 18 Feb 2010) | 1 line Add various items ........ r78580 | andrew.kuchling | 2010-03-02 14:55:33 +0100 (Di, 02 M?r 2010) | 1 line Add an item ........ r78791 | andrew.kuchling | 2010-03-08 13:00:39 +0100 (Mo, 08 M?r 2010) | 1 line Add various items ........ r79208 | andrew.kuchling | 2010-03-21 19:47:12 +0100 (So, 21 M?r 2010) | 1 line Add items ........ Modified: python/branches/release26-maint/ (props changed) From python-checkins at python.org Sun Mar 21 20:54:56 2010 From: python-checkins at python.org (benjamin.peterson) Date: Sun, 21 Mar 2010 20:54:56 +0100 (CET) Subject: [Python-checkins] r79232 - python/trunk/Lib/test/test_extcall.py Message-ID: <20100321195456.AACDFC71A@mail.python.org> Author: benjamin.peterson Date: Sun Mar 21 20:54:56 2010 New Revision: 79232 Log: fix import Modified: python/trunk/Lib/test/test_extcall.py Modified: python/trunk/Lib/test/test_extcall.py ============================================================================== --- python/trunk/Lib/test/test_extcall.py (original) +++ python/trunk/Lib/test/test_extcall.py Sun Mar 21 20:54:56 2010 @@ -1,7 +1,5 @@ # -*- coding: utf-8 -*- -import sys - """Doctest for method/function calls. We're going the use these types for extra testing @@ -274,7 +272,10 @@ 1 2 """ +__test__ = {"extcall" : __doc__} + import unittest +import sys from test import test_support From python-checkins at python.org Sun Mar 21 20:56:37 2010 From: python-checkins at python.org (benjamin.peterson) Date: Sun, 21 Mar 2010 20:56:37 +0100 (CET) Subject: [Python-checkins] r79233 - python/trunk/Lib/test/test_extcall.py Message-ID: <20100321195637.37E86C71A@mail.python.org> Author: benjamin.peterson Date: Sun Mar 21 20:56:37 2010 New Revision: 79233 Log: don't write duplicate tests Modified: python/trunk/Lib/test/test_extcall.py Modified: python/trunk/Lib/test/test_extcall.py ============================================================================== --- python/trunk/Lib/test/test_extcall.py (original) +++ python/trunk/Lib/test/test_extcall.py Sun Mar 21 20:56:37 2010 @@ -272,8 +272,6 @@ 1 2 """ -__test__ = {"extcall" : __doc__} - import unittest import sys from test import test_support From python-checkins at python.org Sun Mar 21 21:05:51 2010 From: python-checkins at python.org (victor.stinner) Date: Sun, 21 Mar 2010 21:05:51 +0100 (CET) Subject: [Python-checkins] r79234 - in python/branches/release31-maint: Modules/_sqlite/connection.c Message-ID: <20100321200551.749FBFB96@mail.python.org> Author: victor.stinner Date: Sun Mar 21 21:05:51 2010 New Revision: 79234 Log: Merged revisions 78894 via svnmerge from svn+ssh://pythondev at svn.python.org/python/branches/py3k ........ r78894 | victor.stinner | 2010-03-13 01:57:22 +0100 (sam., 13 mars 2010) | 4 lines sqlite3: Fix _PyUnicode_AsStringAndSize() error handler. Destroy begin_statement (not statement) on error. ........ Modified: python/branches/release31-maint/ (props changed) python/branches/release31-maint/Modules/_sqlite/connection.c Modified: python/branches/release31-maint/Modules/_sqlite/connection.c ============================================================================== --- python/branches/release31-maint/Modules/_sqlite/connection.c (original) +++ python/branches/release31-maint/Modules/_sqlite/connection.c Sun Mar 21 21:05:51 2010 @@ -941,7 +941,7 @@ statement = _PyUnicode_AsStringAndSize(begin_statement, &size); if (!statement) { - Py_DECREF(statement); + Py_DECREF(begin_statement); return -1; } self->begin_statement = PyMem_Malloc(size + 2); From python-checkins at python.org Sun Mar 21 21:21:00 2010 From: python-checkins at python.org (benjamin.peterson) Date: Sun, 21 Mar 2010 21:21:00 +0100 (CET) Subject: [Python-checkins] r79235 - in python/trunk: Lib/test/test_extcall.py Misc/NEWS Python/ceval.c Message-ID: <20100321202100.6ECF1FAAD@mail.python.org> Author: benjamin.peterson Date: Sun Mar 21 21:21:00 2010 New Revision: 79235 Log: improve error message from passing inadequate number of keyword arguments #6474 Note this removes the "non-keyword" or "keyword" phrases from these messages. Modified: python/trunk/Lib/test/test_extcall.py python/trunk/Misc/NEWS python/trunk/Python/ceval.c Modified: python/trunk/Lib/test/test_extcall.py ============================================================================== --- python/trunk/Lib/test/test_extcall.py (original) +++ python/trunk/Lib/test/test_extcall.py Sun Mar 21 21:21:00 2010 @@ -270,6 +270,15 @@ ... print a,b >>> f(**x) 1 2 + +A obscure message: + + >>> def f(a, b): + ... pass + >>> f(b=1) + Traceback (most recent call last): + ... + TypeError: f() takes exactly 2 arguments (1 given) """ import unittest Modified: python/trunk/Misc/NEWS ============================================================================== --- python/trunk/Misc/NEWS (original) +++ python/trunk/Misc/NEWS Sun Mar 21 21:21:00 2010 @@ -12,6 +12,9 @@ Core and Builtins ----------------- +- Issue #6474: Make error message from passing an inadequate number of keyword + arguments to a function correct. + - Issue #8164: Don't allow lambda functions to have a docstring. - Issue #3137: Don't ignore errors at startup, especially a keyboard interrupt Modified: python/trunk/Python/ceval.c ============================================================================== --- python/trunk/Python/ceval.c (original) +++ python/trunk/Python/ceval.c Sun Mar 21 21:21:00 2010 @@ -3055,11 +3055,10 @@ if (!(co->co_flags & CO_VARARGS)) { PyErr_Format(PyExc_TypeError, "%.200s() takes %s %d " - "%sargument%s (%d given)", + "argument%s (%d given)", PyString_AsString(co->co_name), defcount ? "at most" : "exactly", co->co_argcount, - kwcount ? "non-keyword " : "", co->co_argcount == 1 ? "" : "s", argcount); goto fail; @@ -3150,15 +3149,18 @@ int m = co->co_argcount - defcount; for (i = argcount; i < m; i++) { if (GETLOCAL(i) == NULL) { + int j, given = 0; + for (j = 0; j < co->co_argcount; j++) + if (GETLOCAL(j)) + given++; PyErr_Format(PyExc_TypeError, "%.200s() takes %s %d " - "%sargument%s (%d given)", + "argument%s (%d given)", PyString_AsString(co->co_name), ((co->co_flags & CO_VARARGS) || defcount) ? "at least" : "exactly", - m, kwcount ? "non-keyword " : "", - m == 1 ? "" : "s", i); + m, m == 1 ? "" : "s", given); goto fail; } } From python-checkins at python.org Sun Mar 21 21:29:20 2010 From: python-checkins at python.org (victor.stinner) Date: Sun, 21 Mar 2010 21:29:20 +0100 (CET) Subject: [Python-checkins] r79236 - in python/branches/release31-maint: Lib/sqlite3/test/regression.py Modules/_sqlite/connection.c Message-ID: <20100321202920.709F7E530@mail.python.org> Author: victor.stinner Date: Sun Mar 21 21:29:20 2010 New Revision: 79236 Log: Merged revisions 78899 via svnmerge from svn+ssh://pythondev at svn.python.org/python/branches/py3k ................ r78899 | victor.stinner | 2010-03-13 04:28:34 +0100 (sam., 13 mars 2010) | 14 lines Merged revisions 78898 via svnmerge from svn+ssh://pythondev at svn.python.org/python/trunk ........ r78898 | victor.stinner | 2010-03-13 04:27:07 +0100 (sam., 13 mars 2010) | 7 lines sqlite3: Fix a segfault on calling a connection with something else than a string. Initialize all attributes to be able to call the statement destructor on error. Avoid also a duplicate connection in some tests: setUp() does already open a connection (":memory:"). ........ ................ Modified: python/branches/release31-maint/ (props changed) python/branches/release31-maint/Lib/sqlite3/test/regression.py python/branches/release31-maint/Modules/_sqlite/connection.c Modified: python/branches/release31-maint/Lib/sqlite3/test/regression.py ============================================================================== --- python/branches/release31-maint/Lib/sqlite3/test/regression.py (original) +++ python/branches/release31-maint/Lib/sqlite3/test/regression.py Sun Mar 21 21:29:20 2010 @@ -176,6 +176,13 @@ class MyStr(str): pass self.con.execute("select ?", (MyStr("abc"),)) + def CheckConnectionCall(self): + """ + Call a connection with a non-string SQL request: check error handling + of the statement constructor. + """ + self.assertRaises(sqlite.Warning, self.con, 1) + def suite(): regression_suite = unittest.makeSuite(RegressionTests, "Check") return unittest.TestSuite((regression_suite,)) Modified: python/branches/release31-maint/Modules/_sqlite/connection.c ============================================================================== --- python/branches/release31-maint/Modules/_sqlite/connection.c (original) +++ python/branches/release31-maint/Modules/_sqlite/connection.c Sun Mar 21 21:29:20 2010 @@ -979,6 +979,12 @@ return NULL; } + statement->db = NULL; + statement->st = NULL; + statement->sql = NULL; + statement->in_use = 0; + statement->in_weakreflist = NULL; + rc = pysqlite_statement_create(statement, self, sql); if (rc != SQLITE_OK) { From python-checkins at python.org Sun Mar 21 21:30:30 2010 From: python-checkins at python.org (benjamin.peterson) Date: Sun, 21 Mar 2010 21:30:30 +0100 (CET) Subject: [Python-checkins] r79237 - in python/trunk: Lib/test/test_extcall.py Python/ceval.c Message-ID: <20100321203030.36763E530@mail.python.org> Author: benjamin.peterson Date: Sun Mar 21 21:30:30 2010 New Revision: 79237 Log: take into account keyword arguments when passing too many args Modified: python/trunk/Lib/test/test_extcall.py python/trunk/Python/ceval.c Modified: python/trunk/Lib/test/test_extcall.py ============================================================================== --- python/trunk/Lib/test/test_extcall.py (original) +++ python/trunk/Lib/test/test_extcall.py Sun Mar 21 21:30:30 2010 @@ -279,6 +279,15 @@ Traceback (most recent call last): ... TypeError: f() takes exactly 2 arguments (1 given) + +The number of arguments passed in includes keywords: + + >>> def f(a): + ... pass + >>> f(6, a=4, *(1, 2, 3)) + Traceback (most recent call last): + ... + TypeError: f() takes exactly 1 argument (5 given) """ import unittest Modified: python/trunk/Python/ceval.c ============================================================================== --- python/trunk/Python/ceval.c (original) +++ python/trunk/Python/ceval.c Sun Mar 21 21:30:30 2010 @@ -3060,7 +3060,7 @@ defcount ? "at most" : "exactly", co->co_argcount, co->co_argcount == 1 ? "" : "s", - argcount); + argcount + kwcount); goto fail; } n = co->co_argcount; From python-checkins at python.org Sun Mar 21 21:41:54 2010 From: python-checkins at python.org (victor.stinner) Date: Sun, 21 Mar 2010 21:41:54 +0100 (CET) Subject: [Python-checkins] r79238 - in python/branches/release31-maint: Lib/test/test_sys.py Misc/NEWS Modules/getpath.c Message-ID: <20100321204154.DEBC4E367@mail.python.org> Author: victor.stinner Date: Sun Mar 21 21:41:54 2010 New Revision: 79238 Log: Merged revisions 78868-78869 via svnmerge from svn+ssh://pythondev at svn.python.org/python/branches/py3k ................ r78868 | victor.stinner | 2010-03-12 15:20:59 +0100 (ven., 12 mars 2010) | 25 lines Merged revisions 78835-78837 via svnmerge from svn+ssh://pythondev at svn.python.org/python/trunk ........ r78835 | victor.stinner | 2010-03-11 13:34:39 +0100 (jeu., 11 mars 2010) | 7 lines Issue #7774: Set sys.executable to an empty string if argv[0] has been set to an non existent program name and Python is unable to retrieve the real program name. Fix also sysconfig: if sys.executable is an empty string, use the current working directory. ........ r78836 | victor.stinner | 2010-03-11 14:27:35 +0100 (jeu., 11 mars 2010) | 4 lines Fix test_executable introduce in previous commit (r78835): Windows is able to retrieve the absolute Python path even if argv[0] has been set to a non existent program name. ........ r78837 | victor.stinner | 2010-03-11 14:46:06 +0100 (jeu., 11 mars 2010) | 3 lines Another fix to test_executable() of test_sys: set the current working to avoid the #7774 bug. ........ ................ r78869 | victor.stinner | 2010-03-12 15:27:16 +0100 (ven., 12 mars 2010) | 2 lines Oops, I loose the NEWS change in my previous backport (r78868) of r78835. ................ Modified: python/branches/release31-maint/ (props changed) python/branches/release31-maint/Lib/test/test_sys.py python/branches/release31-maint/Misc/NEWS python/branches/release31-maint/Modules/getpath.c Modified: python/branches/release31-maint/Lib/test/test_sys.py ============================================================================== --- python/branches/release31-maint/Lib/test/test_sys.py (original) +++ python/branches/release31-maint/Lib/test/test_sys.py Sun Mar 21 21:41:54 2010 @@ -438,6 +438,23 @@ out = p.stdout.read().strip() self.assertEqual(out, b'?') + def test_executable(self): + # Issue #7774: Ensure that sys.executable is an empty string if argv[0] + # has been set to an non existent program name and Python is unable to + # retrieve the real program name + import subprocess + # For a normal installation, it should work without 'cwd' + # argument. For test runs in the build directory, see #7774. + python_dir = os.path.dirname(os.path.realpath(sys.executable)) + p = subprocess.Popen( + ["nonexistent", "-c", + 'import sys; print(sys.executable.encode("ascii", "backslashreplace"))'], + executable=sys.executable, stdout=subprocess.PIPE, cwd=python_dir) + stdout = p.communicate()[0] + executable = stdout.strip().decode("ASCII") + p.wait() + self.assertIn(executable, ["b''", repr(sys.executable.encode("ascii", "backslashreplace"))]) + class SizeofTest(unittest.TestCase): Modified: python/branches/release31-maint/Misc/NEWS ============================================================================== --- python/branches/release31-maint/Misc/NEWS (original) +++ python/branches/release31-maint/Misc/NEWS Sun Mar 21 21:41:54 2010 @@ -135,6 +135,10 @@ Library ------- +- Issue #7774: Set sys.executable to an empty string if argv[0] has been set to + an non existent program name and Python is unable to retrieve the real + program name + - Issue #6509: fix re.sub to work properly when the pattern, the string, and the replacement were all bytes. Patch by Antoine Pitrou. Modified: python/branches/release31-maint/Modules/getpath.c ============================================================================== --- python/branches/release31-maint/Modules/getpath.c (original) +++ python/branches/release31-maint/Modules/getpath.c Sun Mar 21 21:41:54 2010 @@ -522,7 +522,7 @@ } else progpath[0] = '\0'; - if (progpath[0] != SEP) + if (progpath[0] != SEP && progpath[0] != '\0') absolutize(progpath); wcsncpy(argv0_path, progpath, MAXPATHLEN); argv0_path[MAXPATHLEN] = '\0'; From python-checkins at python.org Sun Mar 21 22:00:50 2010 From: python-checkins at python.org (benjamin.peterson) Date: Sun, 21 Mar 2010 22:00:50 +0100 (CET) Subject: [Python-checkins] r79239 - in python/branches/py3k: Lib/test/test_extcall.py Python/ceval.c Message-ID: <20100321210050.A2247FC55@mail.python.org> Author: benjamin.peterson Date: Sun Mar 21 22:00:50 2010 New Revision: 79239 Log: Merged revisions 79205,79219,79228,79230,79232-79233,79235,79237 via svnmerge from svn+ssh://pythondev at svn.python.org/python/trunk ........ r79205 | benjamin.peterson | 2010-03-21 12:34:54 -0500 (Sun, 21 Mar 2010) | 1 line rewrite a bit ........ r79219 | benjamin.peterson | 2010-03-21 14:24:08 -0500 (Sun, 21 Mar 2010) | 1 line flatten condition ........ r79228 | benjamin.peterson | 2010-03-21 14:35:39 -0500 (Sun, 21 Mar 2010) | 1 line remove pointless condition ........ r79230 | benjamin.peterson | 2010-03-21 14:39:52 -0500 (Sun, 21 Mar 2010) | 1 line co_varnames is certainly a tuple, so let's not waste time finding out ........ r79232 | benjamin.peterson | 2010-03-21 14:54:56 -0500 (Sun, 21 Mar 2010) | 1 line fix import ........ r79233 | benjamin.peterson | 2010-03-21 14:56:37 -0500 (Sun, 21 Mar 2010) | 1 line don't write duplicate tests ........ r79235 | benjamin.peterson | 2010-03-21 15:21:00 -0500 (Sun, 21 Mar 2010) | 4 lines improve error message from passing inadequate number of keyword arguments #6474 Note this removes the "non-keyword" or "keyword" phrases from these messages. ........ r79237 | benjamin.peterson | 2010-03-21 15:30:30 -0500 (Sun, 21 Mar 2010) | 1 line take into account keyword arguments when passing too many args ........ Modified: python/branches/py3k/ (props changed) python/branches/py3k/Lib/test/test_extcall.py python/branches/py3k/Python/ceval.c Modified: python/branches/py3k/Lib/test/test_extcall.py ============================================================================== --- python/branches/py3k/Lib/test/test_extcall.py (original) +++ python/branches/py3k/Lib/test/test_extcall.py Sun Mar 21 22:00:50 2010 @@ -1,3 +1,4 @@ + """Doctest for method/function calls. We're going the use these types for extra testing @@ -65,17 +66,17 @@ >>> g() Traceback (most recent call last): ... - TypeError: g() takes at least 1 positional argument (0 given) + TypeError: g() takes at least 1 argument (0 given) >>> g(*()) Traceback (most recent call last): ... - TypeError: g() takes at least 1 positional argument (0 given) + TypeError: g() takes at least 1 argument (0 given) >>> g(*(), **{}) Traceback (most recent call last): ... - TypeError: g() takes at least 1 positional argument (0 given) + TypeError: g() takes at least 1 argument (0 given) >>> g(1) 1 () {} @@ -261,13 +262,31 @@ ... print(a,b) >>> f(**x) 1 2 + +A obscure message: + + >>> def f(a, b): + ... pass + >>> f(b=1) + Traceback (most recent call last): + ... + TypeError: f() takes exactly 2 arguments (1 given) + +The number of arguments passed in includes keywords: + + >>> def f(a): + ... pass + >>> f(6, a=4, *(1, 2, 3)) + Traceback (most recent call last): + ... + TypeError: f() takes exactly 1 argument (5 given) """ +import sys from test import support def test_main(): - from test import test_extcall # self import - support.run_doctest(test_extcall, True) + support.run_doctest(sys.modules[__name__], True) if __name__ == '__main__': test_main() Modified: python/branches/py3k/Python/ceval.c ============================================================================== --- python/branches/py3k/Python/ceval.c (original) +++ python/branches/py3k/Python/ceval.c Sun Mar 21 22:00:50 2010 @@ -3076,13 +3076,12 @@ if (!(co->co_flags & CO_VARARGS)) { PyErr_Format(PyExc_TypeError, "%U() takes %s %d " - "%spositional argument%s (%d given)", + "argument%s (%d given)", co->co_name, defcount ? "at most" : "exactly", co->co_argcount, - kwcount ? "non-keyword " : "", co->co_argcount == 1 ? "" : "s", - argcount); + argcount + kwcount); goto fail; } n = co->co_argcount; @@ -3116,7 +3115,7 @@ } /* Speed hack: do raw pointer compares. As names are normally interned this should almost always hit. */ - co_varnames = PySequence_Fast_ITEMS(co->co_varnames); + co_varnames = ((PyTupleObject *)(co->co_varnames))->ob_item; for (j = 0; j < co->co_argcount + co->co_kwonlyargcount; j++) { @@ -3148,10 +3147,10 @@ keyword); goto fail; } - PyDict_SetItem(kwdict, keyword, value); - continue; } -kw_found: + PyDict_SetItem(kwdict, keyword, value); + continue; + kw_found: if (GETLOCAL(j) != NULL) { PyErr_Format(PyExc_TypeError, "%U() got multiple " @@ -3190,16 +3189,19 @@ int m = co->co_argcount - defcount; for (i = argcount; i < m; i++) { if (GETLOCAL(i) == NULL) { + int j, given = 0; + for (j = 0; j < co->co_argcount; j++) + if (GETLOCAL(j)) + given++; PyErr_Format(PyExc_TypeError, "%U() takes %s %d " - "%spositional argument%s " + "argument%s " "(%d given)", co->co_name, ((co->co_flags & CO_VARARGS) || defcount) ? "at least" : "exactly", - m, kwcount ? "non-keyword " : "", - m == 1 ? "" : "s", i); + m, m == 1 ? "" : "s", given); goto fail; } } @@ -3216,14 +3218,12 @@ } } } - else { - if (argcount > 0 || kwcount > 0) { - PyErr_Format(PyExc_TypeError, - "%U() takes no arguments (%d given)", - co->co_name, - argcount + kwcount); - goto fail; - } + else if (argcount > 0 || kwcount > 0) { + PyErr_Format(PyExc_TypeError, + "%U() takes no arguments (%d given)", + co->co_name, + argcount + kwcount); + goto fail; } /* Allocate and initialize storage for cell vars, and copy free vars into frame. This isn't too efficient right now. */ From python-checkins at python.org Sun Mar 21 22:05:54 2010 From: python-checkins at python.org (victor.stinner) Date: Sun, 21 Mar 2010 22:05:54 +0100 (CET) Subject: [Python-checkins] r79240 - in python/branches/release31-maint: Modules/_hashopenssl.c Modules/zipimport.c Objects/funcobject.c Objects/typeobject.c Python/ceval.c Python/import.c Message-ID: <20100321210554.48D16FBA0@mail.python.org> Author: victor.stinner Date: Sun Mar 21 22:05:53 2010 New Revision: 79240 Log: Merged revisions 78875 via svnmerge from svn+ssh://pythondev at svn.python.org/python/branches/py3k ........ r78875 | victor.stinner | 2010-03-12 18:00:41 +0100 (ven., 12 mars 2010) | 5 lines Issue #6697: use %U format instead of _PyUnicode_AsString(), because _PyUnicode_AsString() was not checked for error (NULL). The unicode string is no more truncated to 200 or 400 *bytes*. ........ Modified: python/branches/release31-maint/ (props changed) python/branches/release31-maint/Modules/_hashopenssl.c python/branches/release31-maint/Modules/zipimport.c python/branches/release31-maint/Objects/funcobject.c python/branches/release31-maint/Objects/typeobject.c python/branches/release31-maint/Python/ceval.c python/branches/release31-maint/Python/import.c Modified: python/branches/release31-maint/Modules/_hashopenssl.c ============================================================================== --- python/branches/release31-maint/Modules/_hashopenssl.c (original) +++ python/branches/release31-maint/Modules/_hashopenssl.c Sun Mar 21 22:05:53 2010 @@ -288,10 +288,7 @@ static PyObject * EVP_repr(EVPobject *self) { - char buf[100]; - PyOS_snprintf(buf, sizeof(buf), "<%s HASH object @ %p>", - _PyUnicode_AsString(self->name), self); - return PyUnicode_FromString(buf); + return PyUnicode_FromFormat("<%U HASH object @ %p>", self->name, self); } #if HASH_OBJ_CONSTRUCTOR Modified: python/branches/release31-maint/Modules/zipimport.c ============================================================================== --- python/branches/release31-maint/Modules/zipimport.c (original) +++ python/branches/release31-maint/Modules/zipimport.c Sun Mar 21 22:05:53 2010 @@ -321,15 +321,12 @@ /* add __path__ to the module *before* the code gets executed */ PyObject *pkgpath, *fullpath; - char *prefix = _PyUnicode_AsString(self->prefix); char *subname = get_subname(fullname); int err; - fullpath = PyUnicode_FromFormat("%s%c%s%s", - _PyUnicode_AsString(self->archive), - SEP, - prefix ? prefix : "", - subname); + fullpath = PyUnicode_FromFormat("%U%c%U%s", + self->archive, SEP, + self->prefix, subname); if (fullpath == NULL) goto error; Modified: python/branches/release31-maint/Objects/funcobject.c ============================================================================== --- python/branches/release31-maint/Objects/funcobject.c (original) +++ python/branches/release31-maint/Objects/funcobject.c Sun Mar 21 22:05:53 2010 @@ -295,9 +295,9 @@ PyTuple_GET_SIZE(op->func_closure)); if (nclosure != nfree) { PyErr_Format(PyExc_ValueError, - "%s() requires a code object with %zd free vars," + "%U() requires a code object with %zd free vars," " not %zd", - _PyUnicode_AsString(op->func_name), + op->func_name, nclosure, nfree); return -1; } Modified: python/branches/release31-maint/Objects/typeobject.c ============================================================================== --- python/branches/release31-maint/Objects/typeobject.c (original) +++ python/branches/release31-maint/Objects/typeobject.c Sun Mar 21 22:05:53 2010 @@ -1295,10 +1295,15 @@ for (j = i + 1; j < n; j++) { if (PyList_GET_ITEM(list, j) == o) { o = class_name(o); - PyErr_Format(PyExc_TypeError, - "duplicate base class %.400s", - o ? _PyUnicode_AsString(o) : "?"); - Py_XDECREF(o); + if (o != NULL) { + PyErr_Format(PyExc_TypeError, + "duplicate base class %U", + o); + Py_DECREF(o); + } else { + PyErr_SetString(PyExc_TypeError, + "duplicate base class"); + } return -1; } } Modified: python/branches/release31-maint/Python/ceval.c ============================================================================== --- python/branches/release31-maint/Python/ceval.c (original) +++ python/branches/release31-maint/Python/ceval.c Sun Mar 21 22:05:53 2010 @@ -3883,10 +3883,10 @@ if (PyDict_GetItem(kwdict, key) != NULL) { PyErr_Format(PyExc_TypeError, "%.200s%s got multiple values " - "for keyword argument '%.200s'", + "for keyword argument '%U'", PyEval_GetFuncName(func), PyEval_GetFuncDesc(func), - _PyUnicode_AsString(key)); + key); Py_DECREF(key); Py_DECREF(value); Py_DECREF(kwdict); Modified: python/branches/release31-maint/Python/import.c ============================================================================== --- python/branches/release31-maint/Python/import.c (original) +++ python/branches/release31-maint/Python/import.c Sun Mar 21 22:05:53 2010 @@ -2694,8 +2694,8 @@ parent = PyDict_GetItem(modules, parentname); if (parent == NULL) { PyErr_Format(PyExc_ImportError, - "reload(): parent %.200s not in sys.modules", - _PyUnicode_AsString(parentname)); + "reload(): parent %U not in sys.modules", + parentname); Py_DECREF(parentname); imp_modules_reloading_clear(); return NULL; From python-checkins at python.org Sun Mar 21 22:07:44 2010 From: python-checkins at python.org (victor.stinner) Date: Sun, 21 Mar 2010 22:07:44 +0100 (CET) Subject: [Python-checkins] r79241 - in python/branches/release31-maint: Lib/test/test_builtin.py Objects/object.c Message-ID: <20100321210744.55320FBA5@mail.python.org> Author: victor.stinner Date: Sun Mar 21 22:07:44 2010 New Revision: 79241 Log: Merged revisions 78876 via svnmerge from svn+ssh://pythondev at svn.python.org/python/branches/py3k ........ r78876 | victor.stinner | 2010-03-12 18:17:58 +0100 (ven., 12 mars 2010) | 3 lines Issue #6697: catch _PyUnicode_AsString() errors in getattr() and setattr() builtin functions. ........ Modified: python/branches/release31-maint/ (props changed) python/branches/release31-maint/Lib/test/test_builtin.py python/branches/release31-maint/Objects/object.c Modified: python/branches/release31-maint/Lib/test/test_builtin.py ============================================================================== --- python/branches/release31-maint/Lib/test/test_builtin.py (original) +++ python/branches/release31-maint/Lib/test/test_builtin.py Sun Mar 21 22:07:44 2010 @@ -495,6 +495,8 @@ self.assertRaises(TypeError, getattr, sys, 1, "foo") self.assertRaises(TypeError, getattr) self.assertRaises(AttributeError, getattr, sys, chr(sys.maxunicode)) + # unicode surrogates are not encodable to the default encoding (utf8) + self.assertRaises(AttributeError, getattr, 1, "\uDAD1\uD51E") def test_hasattr(self): import sys Modified: python/branches/release31-maint/Objects/object.c ============================================================================== --- python/branches/release31-maint/Objects/object.c (original) +++ python/branches/release31-maint/Objects/object.c Sun Mar 21 22:07:44 2010 @@ -797,8 +797,12 @@ } if (tp->tp_getattro != NULL) return (*tp->tp_getattro)(v, name); - if (tp->tp_getattr != NULL) - return (*tp->tp_getattr)(v, _PyUnicode_AsString(name)); + if (tp->tp_getattr != NULL) { + char *name_str = _PyUnicode_AsString(name); + if (name_str == NULL) + return NULL; + return (*tp->tp_getattr)(v, name_str); + } PyErr_Format(PyExc_AttributeError, "'%.50s' object has no attribute '%U'", tp->tp_name, name); @@ -838,7 +842,10 @@ return err; } if (tp->tp_setattr != NULL) { - err = (*tp->tp_setattr)(v, _PyUnicode_AsString(name), value); + char *name_str = _PyUnicode_AsString(name); + if (name_str == NULL) + return -1; + err = (*tp->tp_setattr)(v, name_str, value); Py_DECREF(name); return err; } @@ -1017,8 +1024,8 @@ } PyErr_Format(PyExc_AttributeError, - "'%.50s' object has no attribute '%.400s'", - tp->tp_name, _PyUnicode_AsString(name)); + "'%.50s' object has no attribute '%U'", + tp->tp_name, name); done: Py_DECREF(name); return res; From python-checkins at python.org Sun Mar 21 22:08:54 2010 From: python-checkins at python.org (benjamin.peterson) Date: Sun, 21 Mar 2010 22:08:54 +0100 (CET) Subject: [Python-checkins] r79242 - python/branches/py3k/Python/ceval.c Message-ID: <20100321210854.83075FBA5@mail.python.org> Author: benjamin.peterson Date: Sun Mar 21 22:08:54 2010 New Revision: 79242 Log: cleanup a bit Modified: python/branches/py3k/Python/ceval.c Modified: python/branches/py3k/Python/ceval.c ============================================================================== --- python/branches/py3k/Python/ceval.c (original) +++ python/branches/py3k/Python/ceval.c Sun Mar 21 22:08:54 2010 @@ -3041,6 +3041,7 @@ register PyObject **fastlocals, **freevars; PyThreadState *tstate = PyThreadState_GET(); PyObject *x, *u; + int total_args = co->co_argcount + co->co_kwonlyargcount; if (globals == NULL) { PyErr_SetString(PyExc_SystemError, @@ -3057,9 +3058,7 @@ fastlocals = f->f_localsplus; freevars = f->f_localsplus + co->co_nlocals; - if (co->co_argcount > 0 || - co->co_kwonlyargcount > 0 || - co->co_flags & (CO_VARARGS | CO_VARKEYWORDS)) { + if (total_args || co->co_flags & (CO_VARARGS | CO_VARKEYWORDS)) { int i; int n = argcount; PyObject *kwdict = NULL; @@ -3067,7 +3066,7 @@ kwdict = PyDict_New(); if (kwdict == NULL) goto fail; - i = co->co_argcount + co->co_kwonlyargcount; + i = total_args; if (co->co_flags & CO_VARARGS) i++; SETLOCAL(i, kwdict); @@ -3095,7 +3094,7 @@ u = PyTuple_New(argcount - n); if (u == NULL) goto fail; - SETLOCAL(co->co_argcount + co->co_kwonlyargcount, u); + SETLOCAL(total_args, u); for (i = n; i < argcount; i++) { x = args[i]; Py_INCREF(x); @@ -3116,17 +3115,13 @@ /* Speed hack: do raw pointer compares. As names are normally interned this should almost always hit. */ co_varnames = ((PyTupleObject *)(co->co_varnames))->ob_item; - for (j = 0; - j < co->co_argcount + co->co_kwonlyargcount; - j++) { + for (j = 0; j < total_args; j++) { PyObject *nm = co_varnames[j]; if (nm == keyword) goto kw_found; } /* Slow fallback, just in case */ - for (j = 0; - j < co->co_argcount + co->co_kwonlyargcount; - j++) { + for (j = 0; j < total_args; j++) { PyObject *nm = co_varnames[j]; int cmp = PyObject_RichCompareBool( keyword, nm, Py_EQ); @@ -3138,15 +3133,13 @@ /* Check errors from Compare */ if (PyErr_Occurred()) goto fail; - if (j >= co->co_argcount + co->co_kwonlyargcount) { - if (kwdict == NULL) { - PyErr_Format(PyExc_TypeError, - "%U() got an unexpected " - "keyword argument '%S'", - co->co_name, - keyword); - goto fail; - } + if (j >= total_args && kwdict == NULL) { + PyErr_Format(PyExc_TypeError, + "%U() got an unexpected " + "keyword argument '%S'", + co->co_name, + keyword); + goto fail; } PyDict_SetItem(kwdict, keyword, value); continue; @@ -3164,9 +3157,7 @@ SETLOCAL(j, value); } if (co->co_kwonlyargcount > 0) { - for (i = co->co_argcount; - i < co->co_argcount + co->co_kwonlyargcount; - i++) { + for (i = co->co_argcount; i < total_args; i++) { PyObject *name, *def; if (GETLOCAL(i) != NULL) continue; @@ -3232,7 +3223,7 @@ Py_UNICODE *cellname, *argname; PyObject *c; - nargs = co->co_argcount + co->co_kwonlyargcount; + nargs = total_args; if (co->co_flags & CO_VARARGS) nargs++; if (co->co_flags & CO_VARKEYWORDS) From python-checkins at python.org Sun Mar 21 22:12:03 2010 From: python-checkins at python.org (benjamin.peterson) Date: Sun, 21 Mar 2010 22:12:03 +0100 (CET) Subject: [Python-checkins] r79243 - in python/branches/py3k: Python/ceval.c Message-ID: <20100321211203.3F12EEA46@mail.python.org> Author: benjamin.peterson Date: Sun Mar 21 22:12:03 2010 New Revision: 79243 Log: Merged revisions 78028 via svnmerge from svn+ssh://pythondev at svn.python.org/python/trunk ........ r78028 | benjamin.peterson | 2010-02-06 13:40:18 -0600 (Sat, 06 Feb 2010) | 1 line remove pointless error checking ........ Modified: python/branches/py3k/ (props changed) python/branches/py3k/Python/ceval.c Modified: python/branches/py3k/Python/ceval.c ============================================================================== --- python/branches/py3k/Python/ceval.c (original) +++ python/branches/py3k/Python/ceval.c Sun Mar 21 22:12:03 2010 @@ -3130,9 +3130,6 @@ else if (cmp < 0) goto fail; } - /* Check errors from Compare */ - if (PyErr_Occurred()) - goto fail; if (j >= total_args && kwdict == NULL) { PyErr_Format(PyExc_TypeError, "%U() got an unexpected " From python-checkins at python.org Sun Mar 21 22:16:24 2010 From: python-checkins at python.org (benjamin.peterson) Date: Sun, 21 Mar 2010 22:16:24 +0100 (CET) Subject: [Python-checkins] r79244 - in python/branches/py3k: Lib/test/test_extcall.py Python/ceval.c Message-ID: <20100321211624.67362FA3D@mail.python.org> Author: benjamin.peterson Date: Sun Mar 21 22:16:24 2010 New Revision: 79244 Log: count keyword only arguments as part of the total Modified: python/branches/py3k/Lib/test/test_extcall.py python/branches/py3k/Python/ceval.c Modified: python/branches/py3k/Lib/test/test_extcall.py ============================================================================== --- python/branches/py3k/Lib/test/test_extcall.py (original) +++ python/branches/py3k/Lib/test/test_extcall.py Sun Mar 21 22:16:24 2010 @@ -280,6 +280,12 @@ Traceback (most recent call last): ... TypeError: f() takes exactly 1 argument (5 given) + >>> def f(a, *, kw): + ... pass + >>> f(6, 4, kw=4) + Traceback (most recent call last): + ... + TypeError: f() takes exactly 2 arguments (3 given) """ import sys Modified: python/branches/py3k/Python/ceval.c ============================================================================== --- python/branches/py3k/Python/ceval.c (original) +++ python/branches/py3k/Python/ceval.c Sun Mar 21 22:16:24 2010 @@ -3078,8 +3078,8 @@ "argument%s (%d given)", co->co_name, defcount ? "at most" : "exactly", - co->co_argcount, - co->co_argcount == 1 ? "" : "s", + total_args, + total_args == 1 ? "" : "s", argcount + kwcount); goto fail; } From python-checkins at python.org Sun Mar 21 22:22:12 2010 From: python-checkins at python.org (benjamin.peterson) Date: Sun, 21 Mar 2010 22:22:12 +0100 (CET) Subject: [Python-checkins] r79245 - python/branches/py3k/Python/ceval.c Message-ID: <20100321212212.3E6E0FAF5@mail.python.org> Author: benjamin.peterson Date: Sun Mar 21 22:22:12 2010 New Revision: 79245 Log: nest if for clarity Modified: python/branches/py3k/Python/ceval.c Modified: python/branches/py3k/Python/ceval.c ============================================================================== --- python/branches/py3k/Python/ceval.c (original) +++ python/branches/py3k/Python/ceval.c Sun Mar 21 22:22:12 2010 @@ -3155,17 +3155,17 @@ } if (co->co_kwonlyargcount > 0) { for (i = co->co_argcount; i < total_args; i++) { - PyObject *name, *def; + PyObject *name; if (GETLOCAL(i) != NULL) continue; name = PyTuple_GET_ITEM(co->co_varnames, i); - def = NULL; - if (kwdefs != NULL) - def = PyDict_GetItem(kwdefs, name); - if (def != NULL) { - Py_INCREF(def); - SETLOCAL(i, def); - continue; + if (kwdefs != NULL) { + PyObject *def = PyDict_GetItem(kwdefs, name); + if (def) { + Py_INCREF(def); + SETLOCAL(i, def); + continue; + } } PyErr_Format(PyExc_TypeError, "%U() needs keyword-only argument %S", From python-checkins at python.org Sun Mar 21 22:44:31 2010 From: python-checkins at python.org (victor.stinner) Date: Sun, 21 Mar 2010 22:44:31 +0100 (CET) Subject: [Python-checkins] r79246 - python/branches/release31-maint Message-ID: <20100321214431.D9C5CDDBC@mail.python.org> Author: victor.stinner Date: Sun Mar 21 22:44:31 2010 New Revision: 79246 Log: Blocked revisions 77840,77894,78871,78873 via svnmerge ................ r77840 | victor.stinner | 2010-01-30 03:30:00 +0100 (sam., 30 janv. 2010) | 10 lines Blocked revisions 77836 via svnmerge ........ r77836 | victor.stinner | 2010-01-30 03:00:26 +0100 (sam., 30 janv. 2010) | 2 lines #7801: fix xmlrpclib binary example, open the picture in binary mode ........ I wrote a different patch for the py3k (r77838). ................ r77894 | victor.stinner | 2010-01-31 23:34:52 +0100 (dim., 31 janv. 2010) | 10 lines Blocked revisions 77892 via svnmerge ........ r77892 | victor.stinner | 2010-01-31 23:32:15 +0100 (dim., 31 janv. 2010) | 4 lines Issue #7819: Check sys.call_tracing() arguments types. py3k was already patched by issue #3661. ........ ................ r78871 | victor.stinner | 2010-03-12 15:31:06 +0100 (ven., 12 mars 2010) | 8 lines Blocked revisions 78870 via svnmerge ........ r78870 | victor.stinner | 2010-03-12 15:30:26 +0100 (ven., 12 mars 2010) | 1 line NEWS: issue #7774 is related to Library (sys), not Core and Builtins ........ ................ r78873 | victor.stinner | 2010-03-12 15:47:28 +0100 (ven., 12 mars 2010) | 10 lines Blocked revisions 78827 via svnmerge ........ r78827 | victor.stinner | 2010-03-10 23:45:04 +0100 (mer., 10 mars 2010) | 4 lines ooops, fix error message in execusercustomize() Copy/paste failure :-) ........ ................ Modified: python/branches/release31-maint/ (props changed) From python-checkins at python.org Sun Mar 21 22:48:45 2010 From: python-checkins at python.org (victor.stinner) Date: Sun, 21 Mar 2010 22:48:45 +0100 (CET) Subject: [Python-checkins] r79247 - in python/branches/release31-maint: Lib/site.py Misc/NEWS Modules/main.c Parser/tokenizer.c Python/import.c Python/pythonrun.c Message-ID: <20100321214845.40B9FDB53@mail.python.org> Author: victor.stinner Date: Sun Mar 21 22:48:45 2010 New Revision: 79247 Log: Merged revisions 78872 via svnmerge from svn+ssh://pythondev at svn.python.org/python/branches/py3k ................ r78872 | victor.stinner | 2010-03-12 15:45:56 +0100 (ven., 12 mars 2010) | 12 lines Merged revisions 78826 via svnmerge from svn+ssh://pythondev at svn.python.org/python/trunk ........ r78826 | victor.stinner | 2010-03-10 23:30:19 +0100 (mer., 10 mars 2010) | 5 lines Issue #3137: Don't ignore errors at startup, especially a keyboard interrupt (SIGINT). If an error occurs while importing the site module, the error is printed and Python exits. Initialize the GIL before importing the site module. ........ ................ Modified: python/branches/release31-maint/ (props changed) python/branches/release31-maint/Lib/site.py python/branches/release31-maint/Misc/NEWS python/branches/release31-maint/Modules/main.c python/branches/release31-maint/Parser/tokenizer.c python/branches/release31-maint/Python/import.c python/branches/release31-maint/Python/pythonrun.c Modified: python/branches/release31-maint/Lib/site.py ============================================================================== --- python/branches/release31-maint/Lib/site.py (original) +++ python/branches/release31-maint/Lib/site.py Sun Mar 21 22:48:45 2010 @@ -474,11 +474,12 @@ pass except Exception as err: if os.environ.get("PYTHONVERBOSE"): - raise - sys.stderr.write( - "Error in sitecustomize; set PYTHONVERBOSE for traceback:\n" - "%s: %s\n" % - (err.__class__.__name__, err)) + sys.excepthook(*sys.exc_info()) + else: + sys.stderr.write( + "Error in sitecustomize; set PYTHONVERBOSE for traceback:\n" + "%s: %s\n" % + (err.__class__.__name__, err)) def execusercustomize(): @@ -487,6 +488,14 @@ import usercustomize except ImportError: pass + except Exception as err: + if os.environ.get("PYTHONVERBOSE"): + sys.excepthook(*sys.exc_info()) + else: + sys.stderr.write( + "Error in usercustomize; set PYTHONVERBOSE for traceback:\n" + "%s: %s\n" % + (err.__class__.__name__, err)) def main(): Modified: python/branches/release31-maint/Misc/NEWS ============================================================================== --- python/branches/release31-maint/Misc/NEWS (original) +++ python/branches/release31-maint/Misc/NEWS Sun Mar 21 22:48:45 2010 @@ -25,6 +25,11 @@ Core and Builtins ----------------- +- Issue #3137: Don't ignore errors at startup, especially a keyboard interrupt + (SIGINT). If an error occurs while importing the site module, the error is + printed and Python exits. Initialize the GIL before importing the site + module. + - Issue #7173: Generator finalization could invalidate sys.exc_info(). Library Modified: python/branches/release31-maint/Modules/main.c ============================================================================== --- python/branches/release31-maint/Modules/main.c (original) +++ python/branches/release31-maint/Modules/main.c Sun Mar 21 22:48:45 2010 @@ -595,10 +595,16 @@ else p_cfilename = ""; } - sts = PyRun_AnyFileExFlags( - fp, - p_cfilename, - filename != NULL, &cf) != 0; + /* call pending calls like signal handlers (SIGINT) */ + if (Py_MakePendingCalls() == -1) { + PyErr_Print(); + sts = 1; + } else { + sts = PyRun_AnyFileExFlags( + fp, + p_cfilename, + filename != NULL, &cf) != 0; + } Py_XDECREF(filenameObj); } Modified: python/branches/release31-maint/Parser/tokenizer.c ============================================================================== --- python/branches/release31-maint/Parser/tokenizer.c (original) +++ python/branches/release31-maint/Parser/tokenizer.c Sun Mar 21 22:48:45 2010 @@ -1187,21 +1187,28 @@ } #ifdef PGEN -#define verify_identifier(s,e) 1 +#define verify_identifier(tok) 1 #else /* Verify that the identifier follows PEP 3131. */ static int -verify_identifier(char *start, char *end) +verify_identifier(struct tok_state *tok) { PyObject *s; int result; - s = PyUnicode_DecodeUTF8(start, end-start, NULL); + s = PyUnicode_DecodeUTF8(tok->start, tok->cur - tok->start, NULL); if (s == NULL) { - PyErr_Clear(); + if (PyErr_ExceptionMatches(PyExc_UnicodeDecodeError)) { + PyErr_Clear(); + tok->done = E_IDENTIFIER; + } else { + tok->done = E_ERROR; + } return 0; } result = PyUnicode_IsIdentifier(s); Py_DECREF(s); + if (result == 0) + tok->done = E_IDENTIFIER; return result; } #endif @@ -1350,7 +1357,7 @@ } tok_backup(tok, c); if (nonascii && - !verify_identifier(tok->start, tok->cur)) { + !verify_identifier(tok)) { tok->done = E_IDENTIFIER; return ERRORTOKEN; } Modified: python/branches/release31-maint/Python/import.c ============================================================================== --- python/branches/release31-maint/Python/import.c (original) +++ python/branches/release31-maint/Python/import.c Sun Mar 21 22:48:45 2010 @@ -2777,8 +2777,6 @@ } else { /* No globals -- use standard builtins, and fake globals */ - PyErr_Clear(); - builtins = PyImport_ImportModuleLevel("builtins", NULL, NULL, NULL, 0); if (builtins == NULL) Modified: python/branches/release31-maint/Python/pythonrun.c ============================================================================== --- python/branches/release31-maint/Python/pythonrun.c (original) +++ python/branches/release31-maint/Python/pythonrun.c Sun Mar 21 22:48:45 2010 @@ -296,13 +296,14 @@ if (initstdio() < 0) Py_FatalError( "Py_Initialize: can't initialize sys standard streams"); - if (!Py_NoSiteFlag) - initsite(); /* Module site */ /* auto-thread-state API, if available */ #ifdef WITH_THREAD _PyGILState_Init(interp, tstate); #endif /* WITH_THREAD */ + + if (!Py_NoSiteFlag) + initsite(); /* Module site */ } void @@ -711,22 +712,12 @@ static void initsite(void) { - PyObject *m, *f; + PyObject *m; m = PyImport_ImportModule("site"); if (m == NULL) { - f = PySys_GetObject("stderr"); - if (f == NULL || f == Py_None) - return; - if (Py_VerboseFlag) { - PyFile_WriteString( - "'import site' failed; traceback:\n", f); - PyErr_Print(); - } - else { - PyFile_WriteString( - "'import site' failed; use -v for traceback\n", f); - PyErr_Clear(); - } + PyErr_Print(); + Py_Finalize(); + exit(1); } else { Py_DECREF(m); @@ -1907,6 +1898,8 @@ char *msg = NULL; errtype = PyExc_SyntaxError; switch (err->error) { + case E_ERROR: + return; case E_SYNTAX: errtype = PyExc_IndentationError; if (err->expected == INDENT) From python-checkins at python.org Sun Mar 21 22:52:46 2010 From: python-checkins at python.org (martin.v.loewis) Date: Sun, 21 Mar 2010 22:52:46 +0100 (CET) Subject: [Python-checkins] r79248 - in python/branches/release26-maint: Misc/NEWS Tools/msi/msi.py Message-ID: <20100321215246.82409E542@mail.python.org> Author: martin.v.loewis Date: Sun Mar 21 22:52:46 2010 New Revision: 79248 Log: Merged revisions 78976 via svnmerge from svn+ssh://pythondev at svn.python.org/python/trunk ........ r78976 | martin.v.loewis | 2010-03-15 14:00:17 +0100 (Mo, 15 M?r 2010) | 1 line Issue #6716: Quote -x arguments of compileall in MSI installer. ........ Modified: python/branches/release26-maint/ (props changed) python/branches/release26-maint/Misc/NEWS python/branches/release26-maint/Tools/msi/msi.py Modified: python/branches/release26-maint/Misc/NEWS ============================================================================== --- python/branches/release26-maint/Misc/NEWS (original) +++ python/branches/release26-maint/Misc/NEWS Sun Mar 21 22:52:46 2010 @@ -43,6 +43,8 @@ Build ----- +- Issue #6716: Quote -x arguments of compileall in MSI installer. + - Issue #1628484: The Makefile doesn't ignore the CFLAGS environment variable anymore. It also forwards the LDFLAGS settings to the linker when building a shared library. Modified: python/branches/release26-maint/Tools/msi/msi.py ============================================================================== --- python/branches/release26-maint/Tools/msi/msi.py (original) +++ python/branches/release26-maint/Tools/msi/msi.py Sun Mar 21 22:52:46 2010 @@ -398,7 +398,7 @@ ("VerdanaRed9", "Verdana", 9, 255, 0), ]) - compileargs = r'-Wi "[TARGETDIR]Lib\compileall.py" -f -x bad_coding|badsyntax|site-packages|py3_ "[TARGETDIR]Lib"' + compileargs = r'-Wi "[TARGETDIR]Lib\compileall.py" -f -x "bad_coding|badsyntax|site-packages|py3_" "[TARGETDIR]Lib"' lib2to3args = r'-c "import lib2to3.pygram, lib2to3.patcomp;lib2to3.patcomp.PatternCompiler()"' # See "CustomAction Table" add_data(db, "CustomAction", [ From python-checkins at python.org Sun Mar 21 22:57:42 2010 From: python-checkins at python.org (victor.stinner) Date: Sun, 21 Mar 2010 22:57:42 +0100 (CET) Subject: [Python-checkins] r79249 - in python/branches/release31-maint: Misc/NEWS Python/pythonrun.c Message-ID: <20100321215742.BB66FF81E@mail.python.org> Author: victor.stinner Date: Sun Mar 21 22:57:42 2010 New Revision: 79249 Log: Revert my change on initsite(): don't change import site error handler in 3.1, as I did for 2.6. But fix the other bugs :-) Modified: python/branches/release31-maint/Misc/NEWS python/branches/release31-maint/Python/pythonrun.c Modified: python/branches/release31-maint/Misc/NEWS ============================================================================== --- python/branches/release31-maint/Misc/NEWS (original) +++ python/branches/release31-maint/Misc/NEWS Sun Mar 21 22:57:42 2010 @@ -25,11 +25,6 @@ Core and Builtins ----------------- -- Issue #3137: Don't ignore errors at startup, especially a keyboard interrupt - (SIGINT). If an error occurs while importing the site module, the error is - printed and Python exits. Initialize the GIL before importing the site - module. - - Issue #7173: Generator finalization could invalidate sys.exc_info(). Library Modified: python/branches/release31-maint/Python/pythonrun.c ============================================================================== --- python/branches/release31-maint/Python/pythonrun.c (original) +++ python/branches/release31-maint/Python/pythonrun.c Sun Mar 21 22:57:42 2010 @@ -712,12 +712,22 @@ static void initsite(void) { - PyObject *m; + PyObject *m, *f; m = PyImport_ImportModule("site"); if (m == NULL) { - PyErr_Print(); - Py_Finalize(); - exit(1); + f = PySys_GetObject("stderr"); + if (f == NULL || f == Py_None) + return; + if (Py_VerboseFlag) { + PyFile_WriteString( + "'import site' failed; traceback:\n", f); + PyErr_Print(); + } + else { + PyFile_WriteString( + "'import site' failed; use -v for traceback\n", f); + PyErr_Clear(); + } } else { Py_DECREF(m); From python-checkins at python.org Sun Mar 21 23:02:42 2010 From: python-checkins at python.org (martin.v.loewis) Date: Sun, 21 Mar 2010 23:02:42 +0100 (CET) Subject: [Python-checkins] r79250 - in python/branches/release31-maint: Lib/compileall.py Lib/test/test_compileall.py Misc/NEWS Tools/msi/msi.py Message-ID: <20100321220242.3EE02FC13@mail.python.org> Author: martin.v.loewis Date: Sun Mar 21 23:02:42 2010 New Revision: 79250 Log: Merged revisions 78991-78992,78994 via svnmerge from svn+ssh://pythondev at svn.python.org/python/branches/py3k ................ r78991 | martin.v.loewis | 2010-03-16 12:03:13 +0100 (Di, 16 M?r 2010) | 9 lines Merged revisions 78976 via svnmerge from svn+ssh://pythondev at svn.python.org/python/trunk ........ r78976 | martin.v.loewis | 2010-03-15 14:00:17 +0100 (Mo, 15 M?r 2010) | 1 line Issue #6716: Quote -x arguments of compileall in MSI installer. ........ ................ r78992 | martin.v.loewis | 2010-03-16 14:19:21 +0100 (Di, 16 M?r 2010) | 2 lines Issue #6716/2: Backslash-replace error output in compilall. ................ r78994 | martin.v.loewis | 2010-03-16 17:19:47 +0100 (Di, 16 M?r 2010) | 1 line Issue #6716/3: Exclude 2to3 tests from compileall. ................ Modified: python/branches/release31-maint/ (props changed) python/branches/release31-maint/Lib/compileall.py python/branches/release31-maint/Lib/test/test_compileall.py python/branches/release31-maint/Misc/NEWS python/branches/release31-maint/Tools/msi/msi.py Modified: python/branches/release31-maint/Lib/compileall.py ============================================================================== --- python/branches/release31-maint/Lib/compileall.py (original) +++ python/branches/release31-maint/Lib/compileall.py Sun Mar 21 23:02:42 2010 @@ -77,7 +77,10 @@ print('*** Error compiling', fullname, '...') else: print('*** ', end='') - print(err.msg) + # escape non-printable characters in msg + msg = err.msg.encode(sys.stdout.encoding, 'backslashreplace') + msg = msg.decode(sys.stdout.encoding) + print(msg) success = 0 except (SyntaxError, UnicodeError, IOError) as e: if quiet: Modified: python/branches/release31-maint/Lib/test/test_compileall.py ============================================================================== --- python/branches/release31-maint/Lib/test/test_compileall.py (original) +++ python/branches/release31-maint/Lib/test/test_compileall.py Sun Mar 21 23:02:42 2010 @@ -1,3 +1,4 @@ +import sys import compileall import imp import os @@ -9,6 +10,7 @@ import time from test import support import unittest +import io class CompileallTests(unittest.TestCase): @@ -55,8 +57,30 @@ self.recreation_check(b'\0\0\0\0') +class EncodingTest(unittest.TestCase): + 'Issue 6716: compileall should escape source code when printing errors to stdout.' + + def setUp(self): + self.directory = tempfile.mkdtemp() + self.source_path = os.path.join(self.directory, '_test.py') + with open(self.source_path, 'w', encoding='utf-8') as file: + file.write('# -*- coding: utf-8 -*-\n') + file.write('print u"\u20ac"\n') + + def tearDown(self): + shutil.rmtree(self.directory) + + def test_error(self): + try: + orig_stdout = sys.stdout + sys.stdout = io.TextIOWrapper(io.BytesIO(),encoding='ascii') + compileall.compile_dir(self.directory) + finally: + sys.stdout = orig_stdout + def test_main(): - support.run_unittest(CompileallTests) + support.run_unittest(CompileallTests, + EncodingTest) if __name__ == "__main__": Modified: python/branches/release31-maint/Misc/NEWS ============================================================================== --- python/branches/release31-maint/Misc/NEWS (original) +++ python/branches/release31-maint/Misc/NEWS Sun Mar 21 23:02:42 2010 @@ -9,9 +9,17 @@ *Release date: 20XX-XX-XX* +Library +------- + +- Issue #6716/2: Backslash-replace error output in compilall. + Build ----- +- Issue #6716: Quote -x arguments of compileall in MSI installer. + Exclude 2to3 tests from compileall. + - Issue #1628484: The Makefile doesn't ignore the CFLAGS environment variable anymore. It also forwards the LDFLAGS settings to the linker when building a shared library. Modified: python/branches/release31-maint/Tools/msi/msi.py ============================================================================== --- python/branches/release31-maint/Tools/msi/msi.py (original) +++ python/branches/release31-maint/Tools/msi/msi.py Sun Mar 21 23:02:42 2010 @@ -403,7 +403,7 @@ ("VerdanaRed9", "Verdana", 9, 255, 0), ]) - compileargs = r'-Wi "[TARGETDIR]Lib\compileall.py" -f -x bad_coding|badsyntax|site-packages|py2_ "[TARGETDIR]Lib"' + compileargs = r'-Wi "[TARGETDIR]Lib\compileall.py" -f -x "bad_coding|badsyntax|site-packages|py2_|lib2to3\\tests" "[TARGETDIR]Lib"' lib2to3args = r'-c "import lib2to3.pygram, lib2to3.patcomp;lib2to3.patcomp.PatternCompiler()"' # See "CustomAction Table" add_data(db, "CustomAction", [ From python-checkins at python.org Sun Mar 21 23:03:04 2010 From: python-checkins at python.org (benjamin.peterson) Date: Sun, 21 Mar 2010 23:03:04 +0100 (CET) Subject: [Python-checkins] r79251 - in python/branches/py3k: Doc/distutils/sourcedist.rst Doc/library/asyncore.rst Doc/library/multiprocessing.rst Doc/library/random.rst Doc/library/subprocess.rst Doc/library/sys.rst Doc/library/xml.dom.minidom.rst Lib/mailbox.py Lib/pipes.py Lib/test/test_descr.py Lib/test/test_inspect.py Lib/test/test_mailbox.py Lib/test/test_pipes.py Misc/ACKS Modules/_cursesmodule.c Parser/myreadline.c Message-ID: <20100321220304.1367AFBA5@mail.python.org> Author: benjamin.peterson Date: Sun Mar 21 23:03:03 2010 New Revision: 79251 Log: Merged revisions 77952,78030,78102,78104,78107,78206,78216,78296-78297,78328,78331-78332,78336,78339,78343,78378-78379,78415,78559,78717,78791 via svnmerge from svn+ssh://pythondev at svn.python.org/python/trunk ........ r77952 | mark.dickinson | 2010-02-03 10:50:14 -0600 (Wed, 03 Feb 2010) | 1 line Fix test_inspect.py data to match recent change to inspect_fodder.py (r77942). ........ r78030 | benjamin.peterson | 2010-02-06 14:14:10 -0600 (Sat, 06 Feb 2010) | 1 line check type_getattro for correctness in a descriptor corner case ........ r78102 | andrew.kuchling | 2010-02-07 19:35:35 -0600 (Sun, 07 Feb 2010) | 1 line Move distutils into its own subsection; add various items ........ r78104 | andrew.kuchling | 2010-02-08 07:22:24 -0600 (Mon, 08 Feb 2010) | 1 line Add two items; move a subsection ........ r78107 | antoine.pitrou | 2010-02-08 14:25:47 -0600 (Mon, 08 Feb 2010) | 3 lines Clarify and correct description for ccbench and iobench. ........ r78206 | r.david.murray | 2010-02-16 11:55:26 -0600 (Tue, 16 Feb 2010) | 3 lines Make the references to Popen in the description of Call and check_call into links. ........ r78216 | andrew.kuchling | 2010-02-18 08:16:48 -0600 (Thu, 18 Feb 2010) | 1 line Add various items ........ r78296 | andrew.kuchling | 2010-02-21 20:08:45 -0600 (Sun, 21 Feb 2010) | 1 line Re-word ........ r78297 | andrew.kuchling | 2010-02-21 20:29:10 -0600 (Sun, 21 Feb 2010) | 1 line #7076: mention SystemRandom class near start of the module docs; reword change description for clarity. Noted by Shawn Ligocki. ........ r78328 | jack.diederich | 2010-02-22 12:17:16 -0600 (Mon, 22 Feb 2010) | 1 line fixes issue #7530, serve_forever() ........ r78331 | andrew.kuchling | 2010-02-22 12:38:23 -0600 (Mon, 22 Feb 2010) | 1 line Fix comment typo ........ r78332 | andrew.kuchling | 2010-02-22 12:42:07 -0600 (Mon, 22 Feb 2010) | 2 lines #7627: MH.remove() would fail if the MH mailbox was locked; it would call _unlock_file() and pass it a closed file object. Noted by Rob Austein. ........ r78336 | jack.diederich | 2010-02-22 13:55:22 -0600 (Mon, 22 Feb 2010) | 1 line fixes issue #1522237, bad init check in _threading_local ........ r78339 | jack.diederich | 2010-02-22 15:27:38 -0600 (Mon, 22 Feb 2010) | 1 line * fix issue#7476 ........ r78343 | andrew.kuchling | 2010-02-22 16:48:41 -0600 (Mon, 22 Feb 2010) | 10 lines #2560: remove an unnecessary 'for' loop from my_fgets() in Parser/myreadline.c. Noted by Joseph Armbruster; patch by Jessica McKellar. The original code was 'for (;;) {...}', where ... ended with a 'return -2' statement and did not contain a 'break' or 'continue' statement. Therefore, the body of the loop is always executed once. Once upon a time there was a 'continue' in the loop, but it was removed in rev36346, committed by mwh on Wed Jul 7 17:44:12 2004. ........ r78378 | jack.diederich | 2010-02-23 11:23:30 -0600 (Tue, 23 Feb 2010) | 1 line fixup markup error ........ r78379 | jack.diederich | 2010-02-23 13:34:06 -0600 (Tue, 23 Feb 2010) | 1 line issue#6442 use in operator instead of has_key ........ r78415 | dirkjan.ochtman | 2010-02-23 22:00:52 -0600 (Tue, 23 Feb 2010) | 1 line Issue #7733: add explicit reference in asyncore docs. ........ r78559 | andrew.kuchling | 2010-03-01 13:45:21 -0600 (Mon, 01 Mar 2010) | 1 line #7637: update discussion of minidom.unlink() and garbage collection ........ r78717 | benjamin.peterson | 2010-03-05 21:13:33 -0600 (Fri, 05 Mar 2010) | 1 line settscdump is definitely an implementation detail ........ r78791 | andrew.kuchling | 2010-03-08 06:00:39 -0600 (Mon, 08 Mar 2010) | 1 line Add various items ........ Modified: python/branches/py3k/ (props changed) python/branches/py3k/Doc/distutils/sourcedist.rst python/branches/py3k/Doc/library/asyncore.rst python/branches/py3k/Doc/library/multiprocessing.rst python/branches/py3k/Doc/library/random.rst python/branches/py3k/Doc/library/subprocess.rst python/branches/py3k/Doc/library/sys.rst python/branches/py3k/Doc/library/xml.dom.minidom.rst python/branches/py3k/Lib/mailbox.py python/branches/py3k/Lib/pipes.py python/branches/py3k/Lib/test/test_descr.py python/branches/py3k/Lib/test/test_inspect.py python/branches/py3k/Lib/test/test_mailbox.py python/branches/py3k/Lib/test/test_pipes.py python/branches/py3k/Misc/ACKS python/branches/py3k/Modules/_cursesmodule.c python/branches/py3k/Parser/myreadline.c Modified: python/branches/py3k/Doc/distutils/sourcedist.rst ============================================================================== --- python/branches/py3k/Doc/distutils/sourcedist.rst (original) +++ python/branches/py3k/Doc/distutils/sourcedist.rst Sun Mar 21 23:03:03 2010 @@ -54,9 +54,9 @@ requires the :program:`compress` program. Notice that this format is now pending for deprecation and will be removed in the future versions of Python. -When using any ``tar`` format (``gztar``, ``bztar``, ``ztar`` or ``tar``), you -can specify under Unix the ``owner`` and ``group`` names that will be set for -each member of the archive. +When using any ``tar`` format (``gztar``, ``bztar``, ``ztar`` or +``tar``) under Unix, you can specify the ``owner`` and ``group`` names +that will be set for each member of the archive. For example, if you want all files of the archive to be owned by root:: Modified: python/branches/py3k/Doc/library/asyncore.rst ============================================================================== --- python/branches/py3k/Doc/library/asyncore.rst (original) +++ python/branches/py3k/Doc/library/asyncore.rst Sun Mar 21 23:03:03 2010 @@ -201,7 +201,8 @@ .. method:: bind(address) Bind the socket to *address*. The socket must not already be bound. (The - format of *address* depends on the address family --- see above.) To mark + format of *address* depends on the address family --- refer to the + :mod:`socket` documentation for more information.) To mark the socket as re-usable (setting the :const:`SO_REUSEADDR` option), call the :class:`dispatcher` object's :meth:`set_reuse_addr` method. Modified: python/branches/py3k/Doc/library/multiprocessing.rst ============================================================================== --- python/branches/py3k/Doc/library/multiprocessing.rst (original) +++ python/branches/py3k/Doc/library/multiprocessing.rst Sun Mar 21 23:03:03 2010 @@ -1131,7 +1131,7 @@ Create a BaseManager object. - Once created one should call :meth:`start` or :meth:`serve_forever` to ensure + Once created one should call :meth:`start` or ``get_server().serve_forever()`` to ensure that the manager object refers to a started manager process. *address* is the address on which the manager process listens for new @@ -1147,10 +1147,6 @@ Start a subprocess to start the manager. If *initializer* is not ``None`` then the subprocess will call ``initializer(*initargs)`` when it starts. - .. method:: serve_forever() - - Run the server in the current process. - .. method:: get_server() Returns a :class:`Server` object which represents the actual server under Modified: python/branches/py3k/Doc/library/random.rst ============================================================================== --- python/branches/py3k/Doc/library/random.rst (original) +++ python/branches/py3k/Doc/library/random.rst Sun Mar 21 23:03:03 2010 @@ -35,6 +35,18 @@ Optionally, a new generator can supply a :meth:`getrandbits` method --- this allows :meth:`randrange` to produce selections over an arbitrarily large range. +As an example of subclassing, the :mod:`random` module provides the +:class:`WichmannHill` class that implements an alternative generator in pure +Python. The class provides a backward compatible way to reproduce results from +earlier versions of Python, which used the Wichmann-Hill algorithm as the core +generator. Note that this Wichmann-Hill generator can no longer be recommended: +its period is too short by contemporary standards, and the sequence generated is +known to fail some stringent randomness tests. See the references below for a +recent variant that repairs these flaws. + +The :mod:`random` module also provides the :class:`SystemRandom` class which +uses the system function :func:`os.urandom` to generate random numbers +from sources provided by the operating system. Bookkeeping functions: Modified: python/branches/py3k/Doc/library/subprocess.rst ============================================================================== --- python/branches/py3k/Doc/library/subprocess.rst (original) +++ python/branches/py3k/Doc/library/subprocess.rst Sun Mar 21 23:03:03 2010 @@ -210,7 +210,7 @@ Run command with arguments. Wait for command to complete, then return the :attr:`returncode` attribute. - The arguments are the same as for the Popen constructor. Example:: + The arguments are the same as for the :class:`Popen` constructor. Example:: >>> retcode = subprocess.call(["ls", "-l"]) @@ -229,7 +229,7 @@ :exc:`CalledProcessError` object will have the return code in the :attr:`returncode` attribute. - The arguments are the same as for the Popen constructor. Example:: + The arguments are the same as for the :class:`Popen` constructor. Example:: >>> subprocess.check_call(["ls", "-l"]) 0 Modified: python/branches/py3k/Doc/library/sys.rst ============================================================================== --- python/branches/py3k/Doc/library/sys.rst (original) +++ python/branches/py3k/Doc/library/sys.rst Sun Mar 21 23:03:03 2010 @@ -816,6 +816,10 @@ available only if Python was compiled with :option:`--with-tsc`. To understand the output of this dump, read :file:`Python/ceval.c` in the Python sources. + .. impl-detail:: + This function is intimately bound to CPython implementation details and + thus not likely to be implemented elsewhere. + .. data:: stdin stdout Modified: python/branches/py3k/Doc/library/xml.dom.minidom.rst ============================================================================== --- python/branches/py3k/Doc/library/xml.dom.minidom.rst (original) +++ python/branches/py3k/Doc/library/xml.dom.minidom.rst Sun Mar 21 23:03:03 2010 @@ -82,22 +82,12 @@ dom3 = parseString("Some data") assert dom3.documentElement.tagName == "myxml" -When you are finished with a DOM, you should clean it up. This is necessary -because some versions of Python do not support garbage collection of objects -that refer to each other in a cycle. Until this restriction is removed from all -versions of Python, it is safest to write your code as if cycles would not be -cleaned up. - -The way to clean up a DOM is to call its :meth:`unlink` method:: - - dom1.unlink() - dom2.unlink() - dom3.unlink() - -:meth:`unlink` is a :mod:`xml.dom.minidom`\ -specific extension to the DOM API. -After calling :meth:`unlink` on a node, the node and its descendants are -essentially useless. - +When you are finished with a DOM tree, you may optionally call the +:meth:`unlink` method to encourage early cleanup of the now-unneeded +objects. :meth:`unlink` is a :mod:`xml.dom.minidom`\ -specific +extension to the DOM API that renders the node and its descendants are +essentially useless. Otherwise, Python's garbage collector will +eventually take care of the objects in the tree. .. seealso:: Modified: python/branches/py3k/Lib/mailbox.py ============================================================================== --- python/branches/py3k/Lib/mailbox.py (original) +++ python/branches/py3k/Lib/mailbox.py Sun Mar 21 23:03:03 2010 @@ -882,17 +882,9 @@ raise KeyError('No message with key: %s' % key) else: raise - try: - if self._locked: - _lock_file(f) - try: - f.close() - os.remove(os.path.join(self._path, str(key))) - finally: - if self._locked: - _unlock_file(f) - finally: + else: f.close() + os.remove(path) def __setitem__(self, key, message): """Replace the keyed message; raise KeyError if it doesn't exist.""" Modified: python/branches/py3k/Lib/pipes.py ============================================================================== --- python/branches/py3k/Lib/pipes.py (original) +++ python/branches/py3k/Lib/pipes.py Sun Mar 21 23:03:03 2010 @@ -253,10 +253,13 @@ _funnychars = '"`$\\' # Unsafe inside "double quotes" def quote(file): + ''' return a shell-escaped version of the file string ''' for c in file: if c not in _safechars: break else: + if not file: + return "''" return file if '\'' not in file: return '\'' + file + '\'' Modified: python/branches/py3k/Lib/test/test_descr.py ============================================================================== --- python/branches/py3k/Lib/test/test_descr.py (original) +++ python/branches/py3k/Lib/test/test_descr.py Sun Mar 21 23:03:03 2010 @@ -4164,6 +4164,15 @@ x.a = 42 self.assertEqual(x.a, 42) + # Also check type_getattro for correctness. + class Meta(type): + pass + class X(object): + __metaclass__ = Meta + X.a = 42 + Meta.a = Descr("a") + self.assertEqual(X.a, 42) + def test_getattr_hooks(self): # issue 4230 Modified: python/branches/py3k/Lib/test/test_inspect.py ============================================================================== --- python/branches/py3k/Lib/test/test_inspect.py (original) +++ python/branches/py3k/Lib/test/test_inspect.py Sun Mar 21 23:03:03 2010 @@ -166,12 +166,12 @@ def test_trace(self): self.assertEqual(len(git.tr), 3) - self.assertEqual(revise(*git.tr[0][1:]), - (modfile, 43, 'argue', [' spam(a, b, c)\n'], 0)) - self.assertEqual(revise(*git.tr[1][1:]), - (modfile, 9, 'spam', [' eggs(b + d, c + f)\n'], 0)) - self.assertEqual(revise(*git.tr[2][1:]), - (modfile, 18, 'eggs', [' q = y / 0\n'], 0)) + self.assertEqual(git.tr[0][1:], (modfile, 43, 'argue', + [' spam(a, b, c)\n'], 0)) + self.assertEqual(git.tr[1][1:], (modfile, 9, 'spam', + [' eggs(b + d, c + f)\n'], 0)) + self.assertEqual(git.tr[2][1:], (modfile, 18, 'eggs', + [' q = y / 0\n'], 0)) def test_frame(self): args, varargs, varkw, locals = inspect.getargvalues(mod.fr) Modified: python/branches/py3k/Lib/test/test_mailbox.py ============================================================================== --- python/branches/py3k/Lib/test/test_mailbox.py (original) +++ python/branches/py3k/Lib/test/test_mailbox.py Sun Mar 21 23:03:03 2010 @@ -968,6 +968,13 @@ key0 = self._box.add(msg0) refmsg0 = self._box.get_message(key0) + def test_issue7627(self): + msg0 = mailbox.MHMessage(self._template % 0) + key0 = self._box.add(msg0) + self._box.lock() + self._box.remove(key0) + self._box.unlock() + def test_pack(self): # Pack the contents of the mailbox msg0 = mailbox.MHMessage(self._template % 0) Modified: python/branches/py3k/Lib/test/test_pipes.py ============================================================================== --- python/branches/py3k/Lib/test/test_pipes.py (original) +++ python/branches/py3k/Lib/test/test_pipes.py Sun Mar 21 23:03:03 2010 @@ -82,6 +82,8 @@ self.assertEqual(pipes.quote("test%s'name'" % u), '"test\\%s\'name\'"' % u) + self.assertEqual(pipes.quote(''), "''") + def testRepr(self): t = pipes.Template() self.assertEqual(repr(t), "

    +# The exact output format is implementation dependent. In this +# version, it's written as an ordinary XML file. +# +# @param elem An element tree or an individual element. + +def dump(elem): + # debugging + if not isinstance(elem, ElementTree): + elem = ElementTree(elem) + elem.write(sys.stdout) + tail = elem.getroot().tail + if not tail or tail[-1] != "\n": + sys.stdout.write("\n") + +# -------------------------------------------------------------------- +# parsing ## # Parses an XML document into an element tree. # # @param source A filename or file object containing XML data. # @param parser An optional parser instance. If not given, the -# standard {@link XMLTreeBuilder} parser is used. +# standard {@link XMLParser} parser is used. # @return An ElementTree instance def parse(source, parser=None): @@ -853,18 +1212,25 @@ # @param source A filename or file object containing XML data. # @param events A list of events to report back. If omitted, only "end" # events are reported. +# @param parser An optional parser instance. If not given, the +# standard {@link XMLParser} parser is used. # @return A (event, elem) iterator. -class iterparse: +def iterparse(source, events=None, parser=None): + if not hasattr(source, "read"): + source = open(source, "rb") + if not parser: + parser = XMLParser(target=TreeBuilder()) + return _IterParseIterator(source, events, parser) - def __init__(self, source, events=None): - if not hasattr(source, "read"): - source = open(source, "rb") +class _IterParseIterator: + + def __init__(self, source, events, parser): self._file = source self._events = [] self._index = 0 self.root = self._root = None - self._parser = XMLTreeBuilder() + self._parser = parser # wire up the parser for event reporting parser = self._parser._parser append = self._events.append @@ -891,16 +1257,14 @@ parser.EndElementHandler = handler elif event == "start-ns": def handler(prefix, uri, event=event, append=append): - try: - uri = _encode(uri, "ascii") - except UnicodeError: - pass - append((event, (prefix or "", uri))) + append((event, (prefix or "", uri or ""))) parser.StartNamespaceDeclHandler = handler elif event == "end-ns": def handler(prefix, event=event, append=append): append((event, None)) parser.EndNamespaceDeclHandler = handler + else: + raise ValueError("unknown event %r" % event) def __next__(self): while 1: @@ -909,10 +1273,7 @@ except IndexError: if self._parser is None: self.root = self._root - try: - raise StopIteration - except NameError: - raise IndexError + raise StopIteration # load event buffer del self._events[:] self._index = 0 @@ -926,24 +1287,22 @@ self._index = self._index + 1 return item - try: - iter - def __iter__(self): - return self - except NameError: - def __getitem__(self, index): - return self.__next__() + def __iter__(self): + return self ## # Parses an XML document from a string constant. This function can # be used to embed "XML literals" in Python code. # # @param source A string containing XML data. +# @param parser An optional parser instance. If not given, the +# standard {@link XMLParser} parser is used. # @return An Element instance. # @defreturn Element -def XML(text): - parser = XMLTreeBuilder() +def XML(text, parser=None): + if not parser: + parser = XMLParser(target=TreeBuilder()) parser.feed(text) return parser.close() @@ -952,15 +1311,18 @@ # a dictionary which maps from element id:s to elements. # # @param source A string containing XML data. +# @param parser An optional parser instance. If not given, the +# standard {@link XMLParser} parser is used. # @return A tuple containing an Element instance and a dictionary. # @defreturn (Element, dictionary) -def XMLID(text): - parser = XMLTreeBuilder() +def XMLID(text, parser=None): + if not parser: + parser = XMLParser(target=TreeBuilder()) parser.feed(text) tree = parser.close() ids = {} - for elem in tree.getiterator(): + for elem in tree.iter(): id = elem.get("id") if id: ids[id] = elem @@ -977,25 +1339,23 @@ fromstring = XML ## -# Generates a string representation of an XML element, including all -# subelements. If encoding is None, the return type is a string; -# otherwise it is a bytes array. +# Parses an XML document from a sequence of string fragments. # -# @param element An Element instance. -# @return An (optionally) encoded string containing the XML data. -# @defreturn string +# @param sequence A list or other sequence containing XML data fragments. +# @param parser An optional parser instance. If not given, the +# standard {@link XMLParser} parser is used. +# @return An Element instance. +# @defreturn Element +# @since 1.3 -def tostring(element, encoding=None): - class dummy: - pass - data = [] - file = dummy() - file.write = data.append - ElementTree(element).write(file, encoding) - if encoding: - return b"".join(data) - else: - return "".join(data) +def fromstringlist(sequence, parser=None): + if not parser: + parser = XMLParser(target=TreeBuilder()) + for text in sequence: + parser.feed(text) + return parser.close() + +# -------------------------------------------------------------------- ## # Generic element structure builder. This builder converts a sequence @@ -1016,11 +1376,11 @@ self._last = None # last element self._tail = None # true if we're after an end tag if element_factory is None: - element_factory = _ElementInterface + element_factory = Element self._factory = element_factory ## - # Flushes the parser buffers, and returns the toplevel documen + # Flushes the builder buffers, and returns the toplevel document # element. # # @return An Element instance. @@ -1028,7 +1388,7 @@ def close(self): assert len(self._elem) == 0, "missing end tags" - assert self._last != None, "missing toplevel element" + assert self._last is not None, "missing toplevel element" return self._last def _flush(self): @@ -1093,28 +1453,39 @@ # instance of the standard {@link #TreeBuilder} class. # @keyparam html Predefine HTML entities. This flag is not supported # by the current implementation. +# @keyparam encoding Optional encoding. If given, the value overrides +# the encoding specified in the XML file. # @see #ElementTree # @see #TreeBuilder -class XMLTreeBuilder: +class XMLParser: - def __init__(self, html=0, target=None): + def __init__(self, html=0, target=None, encoding=None): try: from xml.parsers import expat except ImportError: - raise ImportError( - "No module named expat; use SimpleXMLTreeBuilder instead" - ) - self._parser = parser = expat.ParserCreate(None, "}") + try: + import pyexpat as expat + except ImportError: + raise ImportError( + "No module named expat; use SimpleXMLTreeBuilder instead" + ) + parser = expat.ParserCreate(encoding, "}") if target is None: target = TreeBuilder() - self._target = target + # underscored names are provided for compatibility only + self.parser = self._parser = parser + self.target = self._target = target + self._error = expat.error self._names = {} # name memo cache # callbacks parser.DefaultHandlerExpand = self._default parser.StartElementHandler = self._start parser.EndElementHandler = self._end parser.CharacterDataHandler = self._data + # optional callbacks + parser.CommentHandler = self._comment + parser.ProcessingInstructionHandler = self._pi # let expat do the buffering, if supported try: self._parser.buffer_text = 1 @@ -1127,10 +1498,18 @@ parser.StartElementHandler = self._start_list except AttributeError: pass - encoding = "utf-8" - # target.xml(encoding, None) self._doctype = None self.entity = {} + try: + self.version = "Expat %d.%d.%d" % expat.version_info + except AttributeError: + pass # unknown + + def _raiseerror(self, value): + err = ParseError(value) + err.code = value.code + err.position = value.lineno, value.offset + raise err def _fixname(self, key): # expand qname, and convert name string to ascii, if possible @@ -1149,7 +1528,7 @@ attrib = {} for key, value in attrib_in.items(): attrib[fixname(key)] = value - return self._target.start(tag, attrib) + return self.target.start(tag, attrib) def _start_list(self, tag, attrib_in): fixname = self._fixname @@ -1158,27 +1537,47 @@ if attrib_in: for i in range(0, len(attrib_in), 2): attrib[fixname(attrib_in[i])] = attrib_in[i+1] - return self._target.start(tag, attrib) + return self.target.start(tag, attrib) def _data(self, text): - return self._target.data(text) + return self.target.data(text) def _end(self, tag): - return self._target.end(self._fixname(tag)) + return self.target.end(self._fixname(tag)) + + def _comment(self, data): + try: + comment = self.target.comment + except AttributeError: + pass + else: + return comment(data) + + def _pi(self, target, data): + try: + pi = self.target.pi + except AttributeError: + pass + else: + return pi(target, data) def _default(self, text): prefix = text[:1] if prefix == "&": # deal with undefined entities try: - self._target.data(self.entity[text[1:-1]]) + self.target.data(self.entity[text[1:-1]]) except KeyError: from xml.parsers import expat - raise expat.error( + err = expat.error( "undefined entity %s: line %d, column %d" % (text, self._parser.ErrorLineNumber, self._parser.ErrorColumnNumber) ) + err.code = 11 # XML_ERROR_UNDEFINED_ENTITY + err.lineno = self._parser.ErrorLineNumber + err.offset = self._parser.ErrorColumnNumber + raise err elif prefix == "<" and text[:9] == "ob_refcnt) +#define Py_TYPE(ob) (((PyObject*)(ob))->ob_type) +#endif + +#if (PY_VERSION_HEX < 0x02050000) +typedef int Py_ssize_t; +#define lenfunc inquiry +#endif + +#if (PY_VERSION_HEX < 0x02040000) +#define PyDict_CheckExact PyDict_Check + +#if !defined(Py_RETURN_NONE) +#define Py_RETURN_NONE return Py_INCREF(Py_None), Py_None +#endif +#endif + /* macros used to store 'join' flags in string object pointers. note that all use of text and tail as object pointers must be wrapped in JOIN_OBJ. see comments in the ElementObject definition for more @@ -102,9 +122,11 @@ #define JOIN_OBJ(p) ((PyObject*) ((Py_uintptr_t) (p) & ~1)) /* glue functions (see the init function for details) */ +static PyObject* elementtree_parseerror_obj; static PyObject* elementtree_copyelement_obj; static PyObject* elementtree_deepcopy_obj; -static PyObject* elementtree_getiterator_obj; +static PyObject* elementtree_iter_obj; +static PyObject* elementtree_itertext_obj; static PyObject* elementpath_obj; /* helpers */ @@ -188,23 +210,6 @@ return result; } -#if (PY_VERSION_HEX < 0x02020000) -LOCAL(int) -PyDict_Update(PyObject* dict, PyObject* other) -{ - /* PyDict_Update emulation for 2.1 and earlier */ - - PyObject* res; - - res = PyObject_CallMethod(dict, "update", "O", other); - if (!res) - return -1; - - Py_DECREF(res); - return 0; -} -#endif - /* -------------------------------------------------------------------- */ /* the element type */ @@ -309,7 +314,7 @@ if (element_new_extra(self, attrib) < 0) { PyObject_Del(self); return NULL; - } + } self->extra->length = 0; self->extra->allocated = STATIC_CHILDREN; @@ -407,6 +412,7 @@ PyObject* res = self->extra->attrib; if (res == Py_None) { + Py_DECREF(res); /* create missing dictionary */ res = PyDict_New(); if (!res) @@ -688,6 +694,8 @@ /* add object to memo dictionary (so deepcopy won't visit it again) */ id = PyLong_FromLong((Py_uintptr_t) self); + if (!id) + goto error; i = PyDict_SetItem(memo, id, (PyObject*) element); @@ -711,7 +719,8 @@ /* check if a tag contains an xpath character */ -#define PATHCHAR(ch) (ch == '/' || ch == '*' || ch == '[' || ch == '@') +#define PATHCHAR(ch) \ + (ch == '/' || ch == '*' || ch == '[' || ch == '@' || ch == '.') if (PyUnicode_Check(tag)) { Py_UNICODE *p = PyUnicode_AS_UNICODE(tag); @@ -742,17 +751,51 @@ } static PyObject* +element_extend(ElementObject* self, PyObject* args) +{ + 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, ""); + if (!seq) { + PyErr_Format( + PyExc_TypeError, + "expected sequence, not \"%.200s\"", Py_TYPE(seq_in)->tp_name + ); + return NULL; + } + + seqlen = PySequence_Size(seq); + for (i = 0; i < seqlen; i++) { + PyObject* element = PySequence_Fast_GET_ITEM(seq, i); + if (element_add_subelement(self, element) < 0) { + Py_DECREF(seq); + return NULL; + } + } + + Py_DECREF(seq); + + Py_RETURN_NONE; +} + +static PyObject* element_find(ElementObject* self, PyObject* args) { int i; PyObject* tag; - if (!PyArg_ParseTuple(args, "O:find", &tag)) + PyObject* namespaces = Py_None; + if (!PyArg_ParseTuple(args, "O|O:find", &tag, &namespaces)) return NULL; - if (checkpath(tag)) + if (checkpath(tag) || namespaces != Py_None) return PyObject_CallMethod( - elementpath_obj, "find", "OO", self, tag + elementpath_obj, "find", "OOO", self, tag, namespaces ); if (!self->extra) @@ -777,12 +820,13 @@ PyObject* tag; PyObject* default_value = Py_None; - if (!PyArg_ParseTuple(args, "O|O:findtext", &tag, &default_value)) + PyObject* namespaces = Py_None; + if (!PyArg_ParseTuple(args, "O|OO:findtext", &tag, &default_value, &namespaces)) return NULL; - if (checkpath(tag)) + if (checkpath(tag) || namespaces != Py_None) return PyObject_CallMethod( - elementpath_obj, "findtext", "OOO", self, tag, default_value + elementpath_obj, "findtext", "OOOO", self, tag, default_value, namespaces ); if (!self->extra) { @@ -813,12 +857,13 @@ PyObject* out; PyObject* tag; - if (!PyArg_ParseTuple(args, "O:findall", &tag)) + PyObject* namespaces = Py_None; + if (!PyArg_ParseTuple(args, "O|O:findall", &tag, &namespaces)) return NULL; - if (checkpath(tag)) + if (checkpath(tag) || namespaces != Py_None) return PyObject_CallMethod( - elementpath_obj, "findall", "OO", self, tag + elementpath_obj, "findall", "OOO", self, tag, namespaces ); out = PyList_New(0); @@ -843,6 +888,19 @@ } static PyObject* +element_iterfind(ElementObject* self, PyObject* args) +{ + PyObject* tag; + PyObject* namespaces = Py_None; + if (!PyArg_ParseTuple(args, "O|O:iterfind", &tag, &namespaces)) + return NULL; + + return PyObject_CallMethod( + elementpath_obj, "iterfind", "OOO", self, tag, namespaces + ); +} + +static PyObject* element_get(ElementObject* self, PyObject* args) { PyObject* value; @@ -870,6 +928,8 @@ int i; PyObject* list; + /* FIXME: report as deprecated? */ + if (!PyArg_ParseTuple(args, ":getchildren")) return NULL; @@ -890,18 +950,18 @@ } static PyObject* -element_getiterator(ElementObject* self, PyObject* args) +element_iter(ElementObject* self, PyObject* args) { PyObject* result; PyObject* tag = Py_None; - if (!PyArg_ParseTuple(args, "|O:getiterator", &tag)) + if (!PyArg_ParseTuple(args, "|O:iter", &tag)) return NULL; - if (!elementtree_getiterator_obj) { + if (!elementtree_iter_obj) { PyErr_SetString( PyExc_RuntimeError, - "getiterator helper not found" + "iter helper not found" ); return NULL; } @@ -913,61 +973,58 @@ Py_INCREF(self); PyTuple_SET_ITEM(args, 0, (PyObject*) self); Py_INCREF(tag); PyTuple_SET_ITEM(args, 1, (PyObject*) tag); - result = PyObject_CallObject(elementtree_getiterator_obj, args); + result = PyObject_CallObject(elementtree_iter_obj, args); Py_DECREF(args); return result; } + static PyObject* -element_getitem(PyObject* self_, Py_ssize_t index) +element_itertext(ElementObject* self, PyObject* args) { - ElementObject* self = (ElementObject*) self_; + PyObject* result; + + if (!PyArg_ParseTuple(args, ":itertext")) + return NULL; - if (!self->extra || index < 0 || index >= self->extra->length) { + if (!elementtree_itertext_obj) { PyErr_SetString( - PyExc_IndexError, - "child index out of range" + PyExc_RuntimeError, + "itertext helper not found" ); return NULL; } - Py_INCREF(self->extra->children[index]); - return self->extra->children[index]; + args = PyTuple_New(1); + if (!args) + return NULL; + + Py_INCREF(self); PyTuple_SET_ITEM(args, 0, (PyObject*) self); + + result = PyObject_CallObject(elementtree_itertext_obj, args); + + Py_DECREF(args); + + return result; } static PyObject* -element_getslice(PyObject* self_, Py_ssize_t start, Py_ssize_t end) +element_getitem(PyObject* self_, Py_ssize_t index) { ElementObject* self = (ElementObject*) self_; - Py_ssize_t i; - PyObject* list; - - if (!self->extra) - return PyList_New(0); - - /* standard clamping */ - if (start < 0) - start = 0; - if (end < 0) - end = 0; - if (end > self->extra->length) - end = self->extra->length; - if (start > end) - start = end; - list = PyList_New(end - start); - if (!list) + if (!self->extra || index < 0 || index >= self->extra->length) { + PyErr_SetString( + PyExc_IndexError, + "child index out of range" + ); return NULL; - - for (i = start; i < end; i++) { - PyObject* item = self->extra->children[i]; - Py_INCREF(item); - PyList_SET_ITEM(list, i - start, item); } - return list; + Py_INCREF(self->extra->children[index]); + return self->extra->children[index]; } static PyObject* @@ -984,8 +1041,11 @@ if (!self->extra) element_new_extra(self, NULL); - if (index < 0) - index = 0; + if (index < 0) { + index += self->extra->length; + if (index < 0) + index = 0; + } if (index > self->extra->length) index = self->extra->length; @@ -1156,77 +1216,6 @@ } static int -element_setslice(PyObject* self_, Py_ssize_t start, Py_ssize_t end, PyObject* item) -{ - ElementObject* self = (ElementObject*) self_; - Py_ssize_t i, new, old; - PyObject* recycle = NULL; - - if (!self->extra) - element_new_extra(self, NULL); - - /* standard clamping */ - if (start < 0) - start = 0; - if (end < 0) - end = 0; - if (end > self->extra->length) - end = self->extra->length; - if (start > end) - start = end; - - old = end - start; - - if (item == NULL) - new = 0; - else if (PyList_CheckExact(item)) { - new = PyList_GET_SIZE(item); - } else { - /* FIXME: support arbitrary sequences? */ - PyErr_Format( - PyExc_TypeError, - "expected list, not \"%.200s\"", Py_TYPE(item)->tp_name - ); - return -1; - } - - if (old > 0) { - /* to avoid recursive calls to this method (via decref), move - old items to the recycle bin here, and get rid of them when - we're done modifying the element */ - recycle = PyList_New(old); - for (i = 0; i < old; i++) - PyList_SET_ITEM(recycle, i, self->extra->children[i + start]); - } - - if (new < old) { - /* delete slice */ - for (i = end; i < self->extra->length; i++) - self->extra->children[i + new - old] = self->extra->children[i]; - } else if (new > old) { - /* insert slice */ - if (element_resize(self, new - old) < 0) - return -1; - for (i = self->extra->length-1; i >= end; i--) - self->extra->children[i + new - old] = self->extra->children[i]; - } - - /* replace the slice */ - for (i = 0; i < new; i++) { - PyObject* element = PyList_GET_ITEM(item, i); - Py_INCREF(element); - self->extra->children[i + start] = element; - } - - self->extra->length += new - old; - - /* discard the recycle bin, and everything in it */ - Py_XDECREF(recycle); - - return 0; -} - -static int element_setitem(PyObject* self_, Py_ssize_t index, PyObject* item) { ElementObject* self = (ElementObject*) self_; @@ -1256,6 +1245,190 @@ return 0; } +static PyObject* +element_subscr(PyObject* self_, PyObject* item) +{ + ElementObject* self = (ElementObject*) self_; + +#if (PY_VERSION_HEX < 0x02050000) + if (PyInt_Check(item) || PyLong_Check(item)) { + long i = PyInt_AsLong(item); +#else + if (PyIndex_Check(item)) { + Py_ssize_t i = PyNumber_AsSsize_t(item, PyExc_IndexError); +#endif + + if (i == -1 && PyErr_Occurred()) { + return NULL; + } + if (i < 0 && self->extra) + i += self->extra->length; + return element_getitem(self_, i); + } + else if (PySlice_Check(item)) { + Py_ssize_t start, stop, step, slicelen, cur, i; + PyObject* list; + + if (!self->extra) + return PyList_New(0); + + if (PySlice_GetIndicesEx((PySliceObject *)item, + self->extra->length, + &start, &stop, &step, &slicelen) < 0) { + return NULL; + } + + if (slicelen <= 0) + return PyList_New(0); + else { + list = PyList_New(slicelen); + if (!list) + return NULL; + + for (cur = start, i = 0; i < slicelen; + cur += step, i++) { + PyObject* item = self->extra->children[cur]; + Py_INCREF(item); + PyList_SET_ITEM(list, i, item); + } + + return list; + } + } + else { + PyErr_SetString(PyExc_TypeError, + "element indices must be integers"); + return NULL; + } +} + +static int +element_ass_subscr(PyObject* self_, PyObject* item, PyObject* value) +{ + ElementObject* self = (ElementObject*) self_; + +#if (PY_VERSION_HEX < 0x02050000) + if (PyInt_Check(item) || PyLong_Check(item)) { + long i = PyInt_AsLong(item); +#else + if (PyIndex_Check(item)) { + Py_ssize_t i = PyNumber_AsSsize_t(item, PyExc_IndexError); +#endif + + if (i == -1 && PyErr_Occurred()) { + return -1; + } + if (i < 0 && self->extra) + i += self->extra->length; + return element_setitem(self_, i, value); + } + else if (PySlice_Check(item)) { + Py_ssize_t start, stop, step, slicelen, newlen, cur, i; + + PyObject* recycle = NULL; + PyObject* seq = NULL; + + if (!self->extra) + element_new_extra(self, NULL); + + if (PySlice_GetIndicesEx((PySliceObject *)item, + self->extra->length, + &start, &stop, &step, &slicelen) < 0) { + return -1; + } + + if (value == NULL) + newlen = 0; + else { + seq = PySequence_Fast(value, ""); + if (!seq) { + PyErr_Format( + PyExc_TypeError, + "expected sequence, not \"%.200s\"", Py_TYPE(value)->tp_name + ); + return -1; + } + newlen = PySequence_Size(seq); + } + + if (step != 1 && newlen != slicelen) + { + PyErr_Format(PyExc_ValueError, +#if (PY_VERSION_HEX < 0x02050000) + "attempt to assign sequence of size %d " + "to extended slice of size %d", +#else + "attempt to assign sequence of size %zd " + "to extended slice of size %zd", +#endif + newlen, slicelen + ); + return -1; + } + + + /* Resize before creating the recycle bin, to prevent refleaks. */ + if (newlen > slicelen) { + if (element_resize(self, newlen - slicelen) < 0) { + if (seq) { + Py_DECREF(seq); + } + return -1; + } + } + + if (slicelen > 0) { + /* to avoid recursive calls to this method (via decref), move + old items to the recycle bin here, and get rid of them when + we're done modifying the element */ + recycle = PyList_New(slicelen); + if (!recycle) { + if (seq) { + Py_DECREF(seq); + } + return -1; + } + for (cur = start, i = 0; i < slicelen; + cur += step, i++) + PyList_SET_ITEM(recycle, i, self->extra->children[cur]); + } + + if (newlen < slicelen) { + /* delete slice */ + for (i = stop; i < self->extra->length; i++) + self->extra->children[i + newlen - slicelen] = self->extra->children[i]; + } else if (newlen > slicelen) { + /* insert slice */ + for (i = self->extra->length-1; i >= stop; i--) + self->extra->children[i + newlen - slicelen] = self->extra->children[i]; + } + + /* replace the slice */ + for (cur = start, i = 0; i < newlen; + cur += step, i++) { + PyObject* element = PySequence_Fast_GET_ITEM(seq, i); + Py_INCREF(element); + self->extra->children[cur] = element; + } + + self->extra->length += newlen - slicelen; + + if (seq) { + Py_DECREF(seq); + } + + /* discard the recycle bin, and everything in it */ + Py_XDECREF(recycle); + + return 0; + } + else { + PyErr_SetString(PyExc_TypeError, + "element indices must be integers"); + return -1; + } +} + static PyMethodDef element_methods[] = { {"clear", (PyCFunction) element_clear, METH_VARARGS}, @@ -1268,10 +1441,15 @@ {"findall", (PyCFunction) element_findall, METH_VARARGS}, {"append", (PyCFunction) element_append, METH_VARARGS}, + {"extend", (PyCFunction) element_extend, METH_VARARGS}, {"insert", (PyCFunction) element_insert, METH_VARARGS}, {"remove", (PyCFunction) element_remove, METH_VARARGS}, - {"getiterator", (PyCFunction) element_getiterator, METH_VARARGS}, + {"iter", (PyCFunction) element_iter, METH_VARARGS}, + {"itertext", (PyCFunction) element_itertext, METH_VARARGS}, + {"iterfind", (PyCFunction) element_iterfind, METH_VARARGS}, + + {"getiterator", (PyCFunction) element_iter, METH_VARARGS}, {"getchildren", (PyCFunction) element_getchildren, METH_VARARGS}, {"items", (PyCFunction) element_items, METH_VARARGS}, @@ -1297,30 +1475,46 @@ {NULL, NULL} }; -static PyObject* +static PyObject* element_getattro(ElementObject* self, PyObject* nameobj) { PyObject* res; char *name = ""; if (PyUnicode_Check(nameobj)) - name = _PyUnicode_AsString(nameobj); + name = _PyUnicode_AsString(nameobj); - if (strcmp(name, "tag") == 0) - res = self->tag; - else if (strcmp(name, "text") == 0) + /* 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); - else if (strcmp(name, "tail") == 0) { + Py_INCREF(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) element_new_extra(self, NULL); - res = element_get_attrib(self); - } else { - return PyObject_GenericGetAttr((PyObject*) self, nameobj); + res = element_get_attrib(self); } - Py_XINCREF(res); + if (!res) + return NULL; + + Py_INCREF(res); return res; } @@ -1366,9 +1560,15 @@ 0, /* sq_concat */ 0, /* sq_repeat */ element_getitem, - element_getslice, + 0, element_setitem, - element_setslice, + 0, +}; + +static PyMappingMethods element_as_mapping = { + (lenfunc) element_length, + (binaryfunc) element_subscr, + (objobjargproc) element_ass_subscr, }; static PyTypeObject Element_Type = { @@ -1383,7 +1583,7 @@ (reprfunc)element_repr, /* tp_repr */ 0, /* tp_as_number */ &element_as_sequence, /* tp_as_sequence */ - 0, /* tp_as_mapping */ + &element_as_mapping, /* tp_as_mapping */ 0, /* tp_hash */ 0, /* tp_call */ 0, /* tp_str */ @@ -1537,7 +1737,7 @@ } else { if (self->root) { PyErr_SetString( - PyExc_SyntaxError, + elementtree_parseerror_obj, "multiple elements on top level" ); goto error; @@ -1678,7 +1878,7 @@ LOCAL(void) treebuilder_handle_namespace(TreeBuilderObject* self, int start, - const char* prefix, const char *uri) + PyObject *prefix, PyObject *uri) { PyObject* res; PyObject* action; @@ -1691,8 +1891,7 @@ if (!self->start_ns_event_obj) return; action = self->start_ns_event_obj; - /* FIXME: prefix and uri use utf-8 encoding! */ - parcel = Py_BuildValue("ss", (prefix) ? prefix : "", uri); + parcel = Py_BuildValue("OO", prefix, uri); if (!parcel) return; Py_INCREF(action); @@ -1852,6 +2051,7 @@ PyObject* names; PyObject* handle_xml; + PyObject* handle_start; PyObject* handle_data; PyObject* handle_end; @@ -1859,6 +2059,8 @@ PyObject* handle_comment; PyObject* handle_pi; + PyObject* handle_close; + } XMLParserObject; static PyTypeObject XMLParser_Type; @@ -1930,6 +2132,36 @@ return value; } +static void +expat_set_error(const char* message, int line, int column) +{ + PyObject *error; + PyObject *position; + char buffer[256]; + + sprintf(buffer, "%s: line %d, column %d", message, line, column); + + error = PyObject_CallFunction(elementtree_parseerror_obj, "s", buffer); + if (!error) + return; + + /* add position attribute */ + position = Py_BuildValue("(ii)", line, column); + if (!position) { + Py_DECREF(error); + return; + } + if (PyObject_SetAttrString(error, "position", position) == -1) { + Py_DECREF(error); + Py_DECREF(position); + return; + } + Py_DECREF(position); + + PyErr_SetObject(elementtree_parseerror_obj, error); + Py_DECREF(error); +} + /* -------------------------------------------------------------------- */ /* handlers */ @@ -1960,10 +2192,12 @@ else res = NULL; Py_XDECREF(res); - } else { - PyErr_Format( - PyExc_SyntaxError, "undefined entity &%s;: line %ld, column %ld", - PyBytes_AS_STRING(key), + } else if (!PyErr_Occurred()) { + /* Report the first error, not the last */ + char message[128]; + sprintf(message, "undefined entity &%.100s;", _PyUnicode_AsString(key)); + expat_set_error( + message, EXPAT(GetErrorLineNumber)(self->parser), EXPAT(GetErrorColumnNumber)(self->parser) ); @@ -2018,9 +2252,15 @@ /* shortcut */ res = treebuilder_handle_start((TreeBuilderObject*) self->target, tag, attrib); - else if (self->handle_start) + else if (self->handle_start) { + if (attrib == Py_None) { + Py_DECREF(attrib); + attrib = PyDict_New(); + if (!attrib) + return; + } res = PyObject_CallFunction(self->handle_start, "OO", tag, attrib); - else + } else res = NULL; Py_DECREF(tag); @@ -2080,9 +2320,28 @@ expat_start_ns_handler(XMLParserObject* self, const XML_Char* prefix, const XML_Char *uri) { + PyObject* sprefix = NULL; + PyObject* suri = NULL; + + suri = PyUnicode_DecodeUTF8(uri, strlen(uri), "strict"); + if (!suri) + return; + + if (prefix) + sprefix = PyUnicode_DecodeUTF8(prefix, strlen(prefix), "strict"); + else + sprefix = PyUnicode_FromString(""); + if (!sprefix) { + Py_DECREF(suri); + return; + } + treebuilder_handle_namespace( - (TreeBuilderObject*) self->target, 1, prefix, uri + (TreeBuilderObject*) self->target, 1, sprefix, suri ); + + Py_DECREF(sprefix); + Py_DECREF(suri); } static void @@ -2158,10 +2417,10 @@ p = PyUnicode_AS_UNICODE(u); for (i = 0; i < 256; i++) { - if (p[i] != Py_UNICODE_REPLACEMENT_CHARACTER) - info->map[i] = p[i]; + if (p[i] != Py_UNICODE_REPLACEMENT_CHARACTER) + info->map[i] = p[i]; else - info->map[i] = -1; + info->map[i] = -1; } Py_DECREF(u); @@ -2245,6 +2504,7 @@ 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"); PyErr_Clear(); @@ -2288,6 +2548,7 @@ { EXPAT(ParserFree)(self->parser); + Py_XDECREF(self->handle_close); Py_XDECREF(self->handle_pi); Py_XDECREF(self->handle_comment); Py_XDECREF(self->handle_end); @@ -2318,8 +2579,7 @@ return NULL; if (!ok) { - PyErr_Format( - PyExc_SyntaxError, "%s: line %ld, column %ld", + expat_set_error( EXPAT(ErrorString)(EXPAT(GetErrorCode)(self->parser)), EXPAT(GetErrorLineNumber)(self->parser), EXPAT(GetErrorColumnNumber)(self->parser) @@ -2340,13 +2600,17 @@ return NULL; res = expat_parse(self, "", 0, 1); + if (!res) + return NULL; - if (res && TreeBuilder_CheckExact(self->target)) { + if (TreeBuilder_CheckExact(self->target)) { Py_DECREF(res); return treebuilder_done((TreeBuilderObject*) self->target); - } - - return res; + } if (self->handle_close) { + Py_DECREF(res); + return PyObject_CallFunction(self->handle_close, ""); + } else + return res; } static PyObject* @@ -2458,7 +2722,7 @@ if (event_set == Py_None) { /* default is "end" only */ - target->end_event_obj = PyBytes_FromString("end"); + target->end_event_obj = PyUnicode_FromString("end"); Py_RETURN_NONE; } @@ -2468,9 +2732,13 @@ for (i = 0; i < PyTuple_GET_SIZE(event_set); i++) { PyObject* item = PyTuple_GET_ITEM(event_set, i); char* event; - if (!PyBytes_Check(item)) + if (PyUnicode_Check(item)) { + event = _PyUnicode_AsString(item); + } else if (PyBytes_Check(item)) + event = PyBytes_AS_STRING(item); + else { goto error; - event = PyBytes_AS_STRING(item); + } if (strcmp(event, "start") == 0) { Py_INCREF(item); target->start_event_obj = item; @@ -2530,19 +2798,19 @@ char *name = ""; if (PyUnicode_Check(nameobj)) - name = _PyUnicode_AsString(nameobj); + name = _PyUnicode_AsString(nameobj); PyErr_Clear(); if (strcmp(name, "entity") == 0) - res = self->entity; + res = self->entity; else if (strcmp(name, "target") == 0) - res = self->target; + res = self->target; else if (strcmp(name, "version") == 0) { char buffer[100]; sprintf(buffer, "Expat %d.%d.%d", XML_MAJOR_VERSION, XML_MINOR_VERSION, XML_MICRO_VERSION); - return PyBytes_FromString(buffer); + return PyUnicode_DecodeUTF8(buffer, strlen(buffer), "strict"); } else { return PyObject_GenericGetAttr((PyObject*) self, nameobj); } @@ -2617,9 +2885,6 @@ PyObject* m; PyObject* g; char* bootstrap; -#if defined(USE_PYEXPAT_CAPI) - struct PyExpat_CAPI* capi; -#endif /* Initialize object types */ if (PyType_Ready(&TreeBuilder_Type) < 0) @@ -2651,10 +2916,6 @@ bootstrap = ( -#if (PY_VERSION_HEX >= 0x02020000 && PY_VERSION_HEX < 0x02030000) - "from __future__ import generators\n" /* enable yield under 2.2 */ -#endif - "from copy import copy, deepcopy\n" "try:\n" @@ -2672,11 +2933,14 @@ " def copyelement(elem):\n" " return elem\n" - "def Comment(text=None):\n" /* public */ + "class CommentProxy:\n" + " def __call__(self, text=None):\n" " element = cElementTree.Element(ET.Comment)\n" " element.text = text\n" " return element\n" - "cElementTree.Comment = Comment\n" + " def __eq__(self, other):\n" + " return ET.Comment == other\n" + "cElementTree.Comment = CommentProxy()\n" "class ElementTree(ET.ElementTree):\n" /* public */ " def parse(self, source, parser=None):\n" @@ -2695,23 +2959,23 @@ " return self._root\n" "cElementTree.ElementTree = ElementTree\n" - "def getiterator(node, tag=None):\n" /* helper */ + "def iter(node, tag=None):\n" /* helper */ " if tag == '*':\n" " tag = None\n" -#if (PY_VERSION_HEX < 0x02020000) - " nodes = []\n" /* 2.1 doesn't have yield */ - " if tag is None or node.tag == tag:\n" - " nodes.append(node)\n" - " for node in node:\n" - " nodes.extend(getiterator(node, tag))\n" - " return nodes\n" -#else " if tag is None or node.tag == tag:\n" " yield node\n" " for node in node:\n" - " for node in getiterator(node, tag):\n" + " for node in iter(node, tag):\n" " yield node\n" -#endif + + "def itertext(node):\n" /* helper */ + " if node.text:\n" + " yield node.text\n" + " for e in node:\n" + " for s in e.itertext():\n" + " yield s\n" + " if e.tail:\n" + " yield e.tail\n" "def parse(source, parser=None):\n" /* public */ " tree = ElementTree()\n" @@ -2719,48 +2983,52 @@ " return tree\n" "cElementTree.parse = parse\n" -#if (PY_VERSION_HEX < 0x02020000) - "if hasattr(ET, 'iterparse'):\n" - " cElementTree.iterparse = ET.iterparse\n" /* delegate on 2.1 */ -#else - "class iterparse(object):\n" + "class iterparse:\n" " root = None\n" " def __init__(self, file, events=None):\n" " if not hasattr(file, 'read'):\n" " file = open(file, 'rb')\n" " self._file = file\n" - " self._events = events\n" - " def __iter__(self):\n" - " events = []\n" + " self._events = []\n" + " self._index = 0\n" + " self.root = self._root = None\n" " b = cElementTree.TreeBuilder()\n" - " p = cElementTree.XMLParser(b)\n" - " p._setevents(events, self._events)\n" + " self._parser = cElementTree.XMLParser(b)\n" + " self._parser._setevents(self._events, events)\n" + " def __next__(self):\n" " while 1:\n" - " data = self._file.read(16384)\n" - " if not data:\n" - " break\n" - " p.feed(data)\n" - " for event in events:\n" - " yield event\n" - " del events[:]\n" - " root = p.close()\n" - " for event in events:\n" - " yield event\n" - " self.root = root\n" + " try:\n" + " item = self._events[self._index]\n" + " except IndexError:\n" + " if self._parser is None:\n" + " self.root = self._root\n" + " raise StopIteration\n" + " # load event buffer\n" + " del self._events[:]\n" + " self._index = 0\n" + " data = self._file.read(16384)\n" + " if data:\n" + " self._parser.feed(data)\n" + " else:\n" + " self._root = self._parser.close()\n" + " self._parser = None\n" + " else:\n" + " self._index = self._index + 1\n" + " return item\n" + " def __iter__(self):\n" + " return self\n" "cElementTree.iterparse = iterparse\n" -#endif - "def PI(target, text=None):\n" /* public */ - " element = cElementTree.Element(ET.ProcessingInstruction)\n" + "class PIProxy:\n" + " def __call__(self, target, text=None):\n" + " element = cElementTree.Element(ET.PI)\n" " element.text = target\n" " if text:\n" " element.text = element.text + ' ' + text\n" " return element\n" - - " elem = cElementTree.Element(ET.PI)\n" - " elem.text = text\n" - " return elem\n" - "cElementTree.PI = cElementTree.ProcessingInstruction = PI\n" + " def __eq__(self, other):\n" + " return ET.PI == other\n" + "cElementTree.PI = cElementTree.ProcessingInstruction = PIProxy()\n" "def XML(text):\n" /* public */ " parser = cElementTree.XMLParser()\n" @@ -2771,25 +3039,34 @@ "def XMLID(text):\n" /* public */ " tree = XML(text)\n" " ids = {}\n" - " for elem in tree.getiterator():\n" + " for elem in tree.iter():\n" " id = elem.get('id')\n" " if id:\n" " ids[id] = elem\n" " return tree, ids\n" "cElementTree.XMLID = XMLID\n" + "try:\n" + " register_namespace = ET.register_namespace\n" + "except AttributeError:\n" + " def register_namespace(prefix, uri):\n" + " ET._namespace_map[uri] = prefix\n" + "cElementTree.register_namespace = register_namespace\n" + "cElementTree.dump = ET.dump\n" "cElementTree.ElementPath = ElementPath = ET.ElementPath\n" "cElementTree.iselement = ET.iselement\n" "cElementTree.QName = ET.QName\n" "cElementTree.tostring = ET.tostring\n" + "cElementTree.fromstringlist = ET.fromstringlist\n" + "cElementTree.tostringlist = ET.tostringlist\n" "cElementTree.VERSION = '" VERSION "'\n" "cElementTree.__version__ = '" VERSION "'\n" - "cElementTree.XMLParserError = SyntaxError\n" ); - PyRun_String(bootstrap, Py_file_input, g, NULL); + if (!PyRun_String(bootstrap, Py_file_input, g, NULL)) + return NULL; elementpath_obj = PyDict_GetItemString(g, "ElementPath"); @@ -2804,22 +3081,30 @@ } } else PyErr_Clear(); + elementtree_deepcopy_obj = PyDict_GetItemString(g, "deepcopy"); - elementtree_getiterator_obj = PyDict_GetItemString(g, "getiterator"); + elementtree_iter_obj = PyDict_GetItemString(g, "iter"); + elementtree_itertext_obj = PyDict_GetItemString(g, "itertext"); #if defined(USE_PYEXPAT_CAPI) /* link against pyexpat, if possible */ - capi = PyCapsule_Import(PyExpat_CAPSULE_NAME, 0); - if (capi && - strcmp(capi->magic, PyExpat_CAPI_MAGIC) == 0 && - capi->size <= sizeof(*expat_capi) && - capi->MAJOR_VERSION == XML_MAJOR_VERSION && - capi->MINOR_VERSION == XML_MINOR_VERSION && - capi->MICRO_VERSION == XML_MICRO_VERSION) - expat_capi = capi; - else - expat_capi = NULL; + expat_capi = PyCapsule_Import(PyExpat_CAPSULE_NAME, 0); + if (expat_capi) { + /* check that it's usable */ + if (strcmp(expat_capi->magic, PyExpat_CAPI_MAGIC) != 0 || + 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) + expat_capi = NULL; + } #endif - return m; + elementtree_parseerror_obj = PyErr_NewException( + "cElementTree.ParseError", PyExc_SyntaxError, NULL + ); + Py_INCREF(elementtree_parseerror_obj); + PyModule_AddObject(m, "ParseError", elementtree_parseerror_obj); + + return m; } Modified: python/branches/py3k/Tools/msi/msi.py ============================================================================== --- python/branches/py3k/Tools/msi/msi.py (original) +++ python/branches/py3k/Tools/msi/msi.py Sun Mar 14 00:24:31 2010 @@ -1006,8 +1006,6 @@ lib.add_file("audiotest.au") lib.add_file("cfgparser.1") lib.add_file("sgml_input.html") - lib.add_file("test.xml") - lib.add_file("test.xml.out") lib.add_file("testtar.tar") lib.add_file("test_difflib_expect.html") lib.add_file("check_soundcard.vbs") @@ -1019,6 +1017,9 @@ lib.add_file("zipdir.zip") if dir=='decimaltestdata': lib.glob("*.decTest") + if dir=='xmltestdata': + lib.glob("*.xml") + lib.add_file("test.xml.out") if dir=='output': lib.glob("test_*") if dir=='idlelib': From solipsis at pitrou.net Sun Mar 14 01:02:54 2010 From: solipsis at pitrou.net (solipsis at pitrou.net) Date: Sun, 14 Mar 2010 01:02:54 +0100 (CET) Subject: [Python-checkins] Daily py3k reference leaks (r78940): sum=0 Message-ID: <20100314000254.97ECA1770C@ns6635.ovh.net> py3k results for svn r78940 (hg cset 3ff69db04e39) -------------------------------------------------- Command line was: ['./python', '-m', 'test.regrtest', '-uall', '-R', '3:3:/home/antoine/py3k/refleaks/reflogxJj6H8', '-x', 'test_httpservers'] From python-checkins at python.org Sun Mar 14 01:07:01 2010 From: python-checkins at python.org (benjamin.peterson) Date: Sun, 14 Mar 2010 01:07:01 +0100 (CET) Subject: [Python-checkins] r78943 - python/branches/py3k Message-ID: <20100314000701.3BCEBF4F6@mail.python.org> Author: benjamin.peterson Date: Sun Mar 14 01:07:01 2010 New Revision: 78943 Log: Merged revisions 78055 via svnmerge from svn+ssh://pythondev at svn.python.org/python/trunk ........ r78055 | vinay.sajip | 2010-02-06 19:37:08 -0600 (Sat, 06 Feb 2010) | 1 line Issue #7868: logging: added loggerClass attribute to Manager. ........ Modified: python/branches/py3k/ (props changed) From python-checkins at python.org Sun Mar 14 02:22:09 2010 From: python-checkins at python.org (florent.xicluna) Date: Sun, 14 Mar 2010 02:22:09 +0100 (CET) Subject: [Python-checkins] r78944 - in python/trunk: Doc/library/xml.etree.elementtree.rst Lib/test/test_xml_etree.py Message-ID: <20100314012209.8EFCDF572@mail.python.org> Author: florent.xicluna Date: Sun Mar 14 02:22:09 2010 New Revision: 78944 Log: Minor documentation updates for xml.etree. Modified: python/trunk/Doc/library/xml.etree.elementtree.rst python/trunk/Lib/test/test_xml_etree.py Modified: python/trunk/Doc/library/xml.etree.elementtree.rst ============================================================================== --- python/trunk/Doc/library/xml.etree.elementtree.rst (original) +++ python/trunk/Doc/library/xml.etree.elementtree.rst Sun Mar 14 02:22:09 2010 @@ -72,8 +72,8 @@ .. function:: fromstring(text) - Parses an XML section from a string constant. Same as XML. *text* is a - string containing XML data. Returns an :class:`Element` instance. + Parses an XML section from a string constant. Same as :func:`XML`. *text* + is a string containing XML data. Returns an :class:`Element` instance. .. function:: fromstringlist(sequence, parser=None) @@ -139,7 +139,7 @@ .. versionadded:: 2.7 -.. function:: SubElement(parent, tag, attrib={}, **extra) +.. function:: SubElement(parent, tag, attrib={}, **extra) Subelement factory. This function creates an element instance, and appends it to an existing element. @@ -151,22 +151,24 @@ arguments. Returns an element instance. -.. function:: tostring(element, encoding=None, method=None) +.. function:: tostring(element, encoding="us-ascii", method="xml") Generates a string representation of an XML element, including all - subelements. *element* is an :class:`Element` instance. *encoding* is the - output encoding (default is US-ASCII). *method* is either ``"xml"``, + subelements. *element* is an :class:`Element` instance. *encoding* [1]_ is + the output encoding (default is US-ASCII). *method* is either ``"xml"``, ``"html"`` or ``"text"`` (default is ``"xml"``). Returns an encoded string containing the XML data. -.. function:: tostringlist(element, encoding=None, method=None) +.. function:: tostringlist(element, encoding="us-ascii", method="xml") Generates a string representation of an XML element, including all - subelements. *element* is an :class:`Element` instance. *encoding* is the - output encoding (default is US-ASCII). *method* is either ``"xml"``, - ``"html"`` or ``"text"`` (default is ``"xml"``). Returns a sequence object - containing the XML data. + subelements. *element* is an :class:`Element` instance. *encoding* [1]_ is + the output encoding (default is US-ASCII). *method* is either ``"xml"``, + ``"html"`` or ``"text"`` (default is ``"xml"``). Returns a list of encoded + strings containing the XML data. It does not guarantee any specific + sequence, except that ``"".join(tostringlist(element)) == + tostring(element)``. .. versionadded:: 2.7 @@ -459,7 +461,7 @@ root element. - .. method:: write(file, encoding=None, xml_declaration=None, method=None) + .. method:: write(file, encoding="us-ascii", xml_declaration=None, method="xml") Writes the element tree to a file, as XML. *file* is a file name, or a file object opened for writing. *encoding* [1]_ is the output encoding Modified: python/trunk/Lib/test/test_xml_etree.py ============================================================================== --- python/trunk/Lib/test/test_xml_etree.py (original) +++ python/trunk/Lib/test/test_xml_etree.py Sun Mar 14 02:22:09 2010 @@ -617,7 +617,7 @@ """ def parseliteral(): - r""" + """ >>> element = ET.XML("text") >>> ET.ElementTree(element).write(sys.stdout) text @@ -631,7 +631,7 @@ >>> print "".join(ET.tostringlist(element)) text >>> ET.tostring(element, "ascii") - "\ntext" + "\\ntext" >>> _, ids = ET.XMLID("text") >>> len(ids) 0 From python-checkins at python.org Sun Mar 14 02:28:07 2010 From: python-checkins at python.org (florent.xicluna) Date: Sun, 14 Mar 2010 02:28:07 +0100 (CET) Subject: [Python-checkins] r78945 - in python/branches/py3k: Doc/library/xml.etree.elementtree.rst Message-ID: <20100314012807.A3232F97C@mail.python.org> Author: florent.xicluna Date: Sun Mar 14 02:28:07 2010 New Revision: 78945 Log: Merged revisions 78944 via svnmerge from svn+ssh://pythondev at svn.python.org/python/trunk ........ r78944 | florent.xicluna | 2010-03-14 02:22:09 +0100 (dim, 14 mar 2010) | 2 lines Minor documentation updates for xml.etree. ........ Modified: python/branches/py3k/ (props changed) python/branches/py3k/Doc/library/xml.etree.elementtree.rst Modified: python/branches/py3k/Doc/library/xml.etree.elementtree.rst ============================================================================== --- python/branches/py3k/Doc/library/xml.etree.elementtree.rst (original) +++ python/branches/py3k/Doc/library/xml.etree.elementtree.rst Sun Mar 14 02:28:07 2010 @@ -69,8 +69,8 @@ .. function:: fromstring(text) - Parses an XML section from a string constant. Same as XML. *text* is a - string containing XML data. Returns an :class:`Element` instance. + Parses an XML section from a string constant. Same as :func:`XML`. *text* + is a string containing XML data. Returns an :class:`Element` instance. .. function:: fromstringlist(sequence, parser=None) @@ -148,22 +148,24 @@ arguments. Returns an element instance. -.. function:: tostring(element, encoding=None, method=None) +.. function:: tostring(element, encoding=None, method="xml") Generates a string representation of an XML element, including all - subelements. *element* is an :class:`Element` instance. *encoding* is the - output encoding (default is None). *method* is either ``"xml"``, + subelements. *element* is an :class:`Element` instance. *encoding* [1]_ is + the output encoding (default is None). *method* is either ``"xml"``, ``"html"`` or ``"text"`` (default is ``"xml"``). Returns an (optionally) encoded string containing the XML data. -.. function:: tostringlist(element, encoding=None, method=None) +.. function:: tostringlist(element, encoding=None, method="xml") Generates a string representation of an XML element, including all - subelements. *element* is an :class:`Element` instance. *encoding* is the - output encoding (default is None). *method* is either ``"xml"``, - ``"html"`` or ``"text"`` (default is ``"xml"``). Returns a sequence object - containing the XML data. + subelements. *element* is an :class:`Element` instance. *encoding* [1]_ is + the output encoding (default is None). *method* is either ``"xml"``, + ``"html"`` or ``"text"`` (default is ``"xml"``). Returns a list of + (optionally) encoded strings containing the XML data. It does not guarantee + any specific sequence, except that ``"".join(tostringlist(element)) == + tostring(element)``. .. versionadded:: 2.7 @@ -455,7 +457,7 @@ root element. - .. method:: write(file, encoding=None, xml_declaration=None, method=None) + .. method:: write(file, encoding=None, xml_declaration=None, method="xml") Writes the element tree to a file, as XML. *file* is a file name, or a file object opened for writing. *encoding* [1]_ is the output encoding From python-checkins at python.org Sun Mar 14 07:49:56 2010 From: python-checkins at python.org (gregory.p.smith) Date: Sun, 14 Mar 2010 07:49:56 +0100 (CET) Subject: [Python-checkins] r78946 - in python/branches/py3k: Doc/library/subprocess.rst Include/abstract.h Include/longobject.h Include/pythonrun.h Lib/subprocess.py Lib/test/test_subprocess.py Modules/_posixsubprocess.c Modules/posixmodule.c Objects/abstract.c Python/pythonrun.c setup.py Message-ID: <20100314064956.35D23F74F@mail.python.org> Author: gregory.p.smith Date: Sun Mar 14 07:49:55 2010 New Revision: 78946 Log: * Replaces the internals of the subprocess module from fork through exec on POSIX systems with a C extension module. This is required in order for the subprocess module to be made thread safe. The pure python implementation is retained so that it can continue to be used if for some reason the _posixsubprocess extension module is not available. The unittest executes tests on both code paths to guarantee compatibility. * Moves PyLong_FromPid and PyLong_AsPid from posixmodule.c into longobject.h. Code reviewed by jeffrey.yasskin at http://codereview.appspot.com/223077/show Added: python/branches/py3k/Modules/_posixsubprocess.c Modified: python/branches/py3k/Doc/library/subprocess.rst python/branches/py3k/Include/abstract.h python/branches/py3k/Include/longobject.h python/branches/py3k/Include/pythonrun.h python/branches/py3k/Lib/subprocess.py python/branches/py3k/Lib/test/test_subprocess.py python/branches/py3k/Modules/posixmodule.c python/branches/py3k/Objects/abstract.c python/branches/py3k/Python/pythonrun.c python/branches/py3k/setup.py Modified: python/branches/py3k/Doc/library/subprocess.rst ============================================================================== --- python/branches/py3k/Doc/library/subprocess.rst (original) +++ python/branches/py3k/Doc/library/subprocess.rst Sun Mar 14 07:49:55 2010 @@ -28,7 +28,7 @@ This module defines one class called :class:`Popen`: -.. class:: Popen(args, bufsize=0, executable=None, stdin=None, stdout=None, stderr=None, preexec_fn=None, close_fds=False, shell=False, cwd=None, env=None, universal_newlines=False, startupinfo=None, creationflags=0) +.. class:: Popen(args, bufsize=0, executable=None, stdin=None, stdout=None, stderr=None, preexec_fn=None, close_fds=False, shell=False, cwd=None, env=None, universal_newlines=False, startupinfo=None, creationflags=0, restore_signals=True, start_new_session=False) Arguments are: @@ -41,7 +41,8 @@ name for the executing program in utilities such as :program:`ps`. On Unix, with *shell=False* (default): In this case, the Popen class uses - :meth:`os.execvp` to execute the child program. *args* should normally be a + :meth:`os.execvp` like behavior to execute the child program. + *args* should normally be a sequence. If a string is specified for *args*, it will be used as the name or path of the program to execute; this will only work if the program is being given no arguments. @@ -108,7 +109,23 @@ applications should be captured into the same file handle as for stdout. If *preexec_fn* is set to a callable object, this object will be called in the - child process just before the child is executed. (Unix only) + child process just before the child is executed. + (Unix only) + + .. warning:: + + The *preexec_fn* parameter is not safe to use in the presence of threads + in your application. The child process could deadlock before exec is + called. + If you must use it, keep it trivial! Minimize the number of libraries + you call into. + + .. note:: + + If you need to modify the environment for the child use the *env* + parameter rather than doing it in a *preexec_fn*. + The *start_new_session* parameter can take the place of a previously + common use of *preexec_fn* to call os.setsid() in the child. If *close_fds* is true, all file descriptors except :const:`0`, :const:`1` and :const:`2` will be closed before the child process is executed. (Unix only). @@ -124,9 +141,23 @@ searching the executable, so you can't specify the program's path relative to *cwd*. + If *restore_signals* is True (the default) all signals that Python has set to + SIG_IGN are restored to SIG_DFL in the child process before the exec. + Currently this includes the SIGPIPE, SIGXFZ and SIGXFSZ signals. + (Unix only) + + .. versionchanged:: 3.2 + *restore_signals* was added. + + If *start_new_session* is True the setsid() system call will be made in the + child process prior to the execution of the subprocess. (Unix only) + + .. versionchanged:: 3.2 + *start_new_session* was added. + If *env* is not ``None``, it must be a mapping that defines the environment - variables for the new process; these are used instead of inheriting the current - process' environment, which is the default behavior. + variables for the new process; these are used instead of the default + behavior of inheriting the current process' environment. .. note:: Modified: python/branches/py3k/Include/abstract.h ============================================================================== --- python/branches/py3k/Include/abstract.h (original) +++ python/branches/py3k/Include/abstract.h Sun Mar 14 07:49:55 2010 @@ -1232,6 +1232,9 @@ PyAPI_FUNC(int) _PyObject_RealIsSubclass(PyObject *derived, PyObject *cls); +PyAPI_FUNC(char *const *) _PySequence_BytesToCharpArray(PyObject* self); + +PyAPI_FUNC(void) _Py_FreeCharPArray(char *const array[]); #ifdef __cplusplus } Modified: python/branches/py3k/Include/longobject.h ============================================================================== --- python/branches/py3k/Include/longobject.h (original) +++ python/branches/py3k/Include/longobject.h Sun Mar 14 07:49:55 2010 @@ -41,6 +41,23 @@ #define PyLong_AsSocket_t(fd) (SOCKET_T)PyLong_AsLongLong(fd) #endif +/* Issue #1983: pid_t can be longer than a C long on some systems */ +#if !defined(SIZEOF_PID_T) || SIZEOF_PID_T == SIZEOF_INT +#define PARSE_PID "i" +#define PyLong_FromPid PyLong_FromLong +#define PyLong_AsPid PyLong_AsLong +#elif SIZEOF_PID_T == SIZEOF_LONG +#define PARSE_PID "l" +#define PyLong_FromPid PyLong_FromLong +#define PyLong_AsPid PyLong_AsLong +#elif defined(SIZEOF_LONG_LONG) && SIZEOF_PID_T == SIZEOF_LONG_LONG +#define PARSE_PID "L" +#define PyLong_FromPid PyLong_FromLongLong +#define PyLong_AsPid PyLong_AsLongLong +#else +#error "sizeof(pid_t) is neither sizeof(int), sizeof(long) or sizeof(long long)" +#endif /* SIZEOF_PID_T */ + /* For use by intobject.c only */ PyAPI_DATA(unsigned char) _PyLong_DigitValue[256]; Modified: python/branches/py3k/Include/pythonrun.h ============================================================================== --- python/branches/py3k/Include/pythonrun.h (original) +++ python/branches/py3k/Include/pythonrun.h Sun Mar 14 07:49:55 2010 @@ -81,6 +81,9 @@ PyAPI_FUNC(void) Py_Exit(int); +/* Restore signals that the interpreter has called SIG_IGN on to SIG_DFL. */ +PyAPI_FUNC(void) _Py_RestoreSignals(void); + PyAPI_FUNC(int) Py_FdIsInteractive(FILE *, const char *); /* Bootstrap */ Modified: python/branches/py3k/Lib/subprocess.py ============================================================================== --- python/branches/py3k/Lib/subprocess.py (original) +++ python/branches/py3k/Lib/subprocess.py Sun Mar 14 07:49:55 2010 @@ -29,7 +29,8 @@ stdin=None, stdout=None, stderr=None, preexec_fn=None, close_fds=False, shell=False, cwd=None, env=None, universal_newlines=False, - startupinfo=None, creationflags=0): + startupinfo=None, creationflags=0, + restore_signals=True, start_new_session=False): Arguments are: @@ -72,8 +73,11 @@ stderr data from the applications should be captured into the same file handle as for stdout. -If preexec_fn is set to a callable object, this object will be called -in the child process just before the child is executed. +On UNIX, if preexec_fn is set to a callable object, this object will be +called in the child process just before the child is executed. The use +of preexec_fn is not thread safe, using it in the presence of threads +could lead to a deadlock in the child process before the new executable +is executed. If close_fds is true, all file descriptors except 0, 1 and 2 will be closed before the child process is executed. @@ -84,6 +88,14 @@ If cwd is not None, the current directory will be changed to cwd before the child is executed. +On UNIX, if restore_signals is True all signals that Python sets to +SIG_IGN are restored to SIG_DFL in the child process before the exec. +Currently this includes the SIGPIPE, SIGXFZ and SIGXFSZ signals. This +parameter does nothing on Windows. + +On UNIX, if start_new_session is True, the setsid() system call will be made +in the child process prior to executing the command. + If env is not None, it defines the environment variables for the new process. @@ -326,6 +338,7 @@ import traceback import gc import signal +import builtins # Exception classes used by this module. class CalledProcessError(Exception): @@ -375,6 +388,15 @@ import fcntl import pickle + try: + import _posixsubprocess + except ImportError: + _posixsubprocess = None + import warnings + warnings.warn("The _posixsubprocess module is not being used. " + "Child process reliability may suffer if your " + "program uses threads.", RuntimeWarning) + # When select or poll has indicated that the file is writable, # we can write up to _PIPE_BUF bytes without risk of blocking. # POSIX defines PIPE_BUF as >= 512. @@ -596,7 +618,8 @@ stdin=None, stdout=None, stderr=None, preexec_fn=None, close_fds=False, shell=False, cwd=None, env=None, universal_newlines=False, - startupinfo=None, creationflags=0): + startupinfo=None, creationflags=0, + restore_signals=True, start_new_session=False): """Create new Popen instance.""" _cleanup() @@ -642,7 +665,7 @@ # On POSIX, the child objects are file descriptors. On # Windows, these are Windows file handles. The parent objects # are file descriptors on both platforms. The parent objects - # are None when not using PIPEs. The child objects are None + # are -1 when not using PIPEs. The child objects are -1 # when not redirecting. (p2cread, p2cwrite, @@ -654,7 +677,8 @@ startupinfo, creationflags, shell, p2cread, p2cwrite, c2pread, c2pwrite, - errread, errwrite) + errread, errwrite, + restore_signals, start_new_session) if mswindows: if p2cwrite is not None: @@ -666,15 +690,15 @@ if bufsize == 0: bufsize = 1 # Nearly unbuffered (XXX for now) - if p2cwrite is not None: + if p2cwrite != -1: self.stdin = io.open(p2cwrite, 'wb', bufsize) if self.universal_newlines: self.stdin = io.TextIOWrapper(self.stdin) - if c2pread is not None: + if c2pread != -1: self.stdout = io.open(c2pread, 'rb', bufsize) if universal_newlines: self.stdout = io.TextIOWrapper(self.stdout) - if errread is not None: + if errread != -1: self.stderr = io.open(errread, 'rb', bufsize) if universal_newlines: self.stderr = io.TextIOWrapper(self.stderr) @@ -739,11 +763,11 @@ p2cread, p2cwrite, c2pread, c2pwrite, errread, errwrite """ if stdin is None and stdout is None and stderr is None: - return (None, None, None, None, None, None) + return (-1, -1, -1, -1, -1, -1) - p2cread, p2cwrite = None, None - c2pread, c2pwrite = None, None - errread, errwrite = None, None + p2cread, p2cwrite = -1, -1 + c2pread, c2pwrite = -1, -1 + errread, errwrite = -1, -1 if stdin is None: p2cread = GetStdHandle(STD_INPUT_HANDLE) @@ -819,7 +843,8 @@ startupinfo, creationflags, shell, p2cread, p2cwrite, c2pread, c2pwrite, - errread, errwrite): + errread, errwrite, + unused_restore_signals, unused_start_new_session): """Execute program (MS Windows version)""" if not isinstance(args, str): @@ -973,9 +998,9 @@ """Construct and return tuple with IO objects: p2cread, p2cwrite, c2pread, c2pwrite, errread, errwrite """ - p2cread, p2cwrite = None, None - c2pread, c2pwrite = None, None - errread, errwrite = None, None + p2cread, p2cwrite = -1, -1 + c2pread, c2pwrite = -1, -1 + errread, errwrite = -1, -1 if stdin is None: pass @@ -1034,7 +1059,8 @@ startupinfo, creationflags, shell, p2cread, p2cwrite, c2pread, c2pwrite, - errread, errwrite): + errread, errwrite, + restore_signals, start_new_session): """Execute program (POSIX version)""" if isinstance(args, str): @@ -1048,113 +1074,190 @@ if executable is None: executable = args[0] - # For transferring possible exec failure from child to parent - # The first char specifies the exception type: 0 means - # OSError, 1 means some other error. + # For transferring possible exec failure from child to parent. + # Data format: "exception name:hex errno:description" + # Pickle is not used; it is complex and involves memory allocation. errpipe_read, errpipe_write = os.pipe() try: try: self._set_cloexec_flag(errpipe_write) - gc_was_enabled = gc.isenabled() - # Disable gc to avoid bug where gc -> file_dealloc -> - # write to stderr -> hang. http://bugs.python.org/issue1336 - gc.disable() - try: - self.pid = os.fork() - except: - if gc_was_enabled: - gc.enable() - raise - self._child_created = True - if self.pid == 0: - # Child + if _posixsubprocess: + fs_encoding = sys.getfilesystemencoding() + def fs_encode(s): + """Encode s for use in the env, fs or cmdline.""" + return s.encode(fs_encoding, 'surrogateescape') + + # We must avoid complex work that could involve + # malloc or free in the child process to avoid + # potential deadlocks, thus we do all this here. + # and pass it to fork_exec() + + if env: + env_list = [fs_encode(k) + b'=' + fs_encode(v) + for k, v in env.items()] + else: + env_list = None # Use execv instead of execve. + if os.path.dirname(executable): + executable_list = (fs_encode(executable),) + else: + # This matches the behavior of os._execvpe(). + path_list = os.get_exec_path(env) + executable_list = (os.path.join(dir, executable) + for dir in path_list) + executable_list = tuple(fs_encode(exe) + for exe in executable_list) + self.pid = _posixsubprocess.fork_exec( + args, executable_list, + close_fds, cwd, env_list, + p2cread, p2cwrite, c2pread, c2pwrite, + errread, errwrite, + errpipe_read, errpipe_write, + restore_signals, start_new_session, preexec_fn) + else: + # Pure Python implementation: It is not thread safe. + # This implementation may deadlock in the child if your + # parent process has any other threads running. + + gc_was_enabled = gc.isenabled() + # Disable gc to avoid bug where gc -> file_dealloc -> + # write to stderr -> hang. See issue1336 + gc.disable() try: - # Close parent's pipe ends - if p2cwrite is not None: - os.close(p2cwrite) - if c2pread is not None: - os.close(c2pread) - if errread is not None: - os.close(errread) - os.close(errpipe_read) - - # Dup fds for child - if p2cread is not None: - os.dup2(p2cread, 0) - if c2pwrite is not None: - os.dup2(c2pwrite, 1) - if errwrite is not None: - os.dup2(errwrite, 2) - - # Close pipe fds. Make sure we don't close the - # same fd more than once, or standard fds. - if p2cread is not None and p2cread not in (0,): - os.close(p2cread) - if c2pwrite is not None and \ - c2pwrite not in (p2cread, 1): - os.close(c2pwrite) - if (errwrite is not None and - errwrite not in (p2cread, c2pwrite, 2)): - os.close(errwrite) - - # Close all other fds, if asked for - if close_fds: - self._close_fds(but=errpipe_write) - - if cwd is not None: - os.chdir(cwd) - - if preexec_fn: - preexec_fn() - - if env is None: - os.execvp(executable, args) - else: - os.execvpe(executable, args, env) - + self.pid = os.fork() except: - exc_type, exc_value, tb = sys.exc_info() - # Save the traceback and attach it to the exception - # object - exc_lines = traceback.format_exception(exc_type, - exc_value, - tb) - exc_value.child_traceback = ''.join(exc_lines) - os.write(errpipe_write, pickle.dumps(exc_value)) - - # This exitcode won't be reported to applications, so - # it really doesn't matter what we return. - os._exit(255) - - # Parent - if gc_was_enabled: - gc.enable() + if gc_was_enabled: + gc.enable() + raise + self._child_created = True + if self.pid == 0: + # Child + try: + # Close parent's pipe ends + if p2cwrite != -1: + os.close(p2cwrite) + if c2pread != -1: + os.close(c2pread) + if errread != -1: + os.close(errread) + os.close(errpipe_read) + + # Dup fds for child + if p2cread != -1: + os.dup2(p2cread, 0) + if c2pwrite != -1: + os.dup2(c2pwrite, 1) + if errwrite != -1: + os.dup2(errwrite, 2) + + # Close pipe fds. Make sure we don't close the + # same fd more than once, or standard fds. + if p2cread != -1 and p2cread not in (0,): + os.close(p2cread) + if (c2pwrite != -1 and + c2pwrite not in (p2cread, 1)): + os.close(c2pwrite) + if (errwrite != -1 and + errwrite not in (p2cread, c2pwrite, 2)): + os.close(errwrite) + + # Close all other fds, if asked for + if close_fds: + self._close_fds(but=errpipe_write) + + if cwd is not None: + os.chdir(cwd) + + # This is a copy of Python/pythonrun.c + # _Py_RestoreSignals(). If that were exposed + # as a sys._py_restoresignals func it would be + # better.. but this pure python implementation + # isn't likely to be used much anymore. + if restore_signals: + signals = ('SIGPIPE', 'SIGXFZ', 'SIGXFSZ') + for sig in signals: + if hasattr(signal, sig): + signal.signal(getattr(signal, sig), + signal.SIG_DFL) + + if start_new_session and hasattr(os, 'setsid'): + os.setsid() + + if preexec_fn: + preexec_fn() + + if env is None: + os.execvp(executable, args) + else: + os.execvpe(executable, args, env) + + except: + try: + exc_type, exc_value = sys.exc_info()[:2] + if isinstance(exc_value, OSError): + errno = exc_value.errno + else: + errno = 0 + message = '%s:%x:%s' % (exc_type.__name__, + errno, exc_value) + os.write(errpipe_write, message.encode()) + except: + # We MUST not allow anything odd happening + # above to prevent us from exiting below. + pass + + # This exitcode won't be reported to applications + # so it really doesn't matter what we return. + os._exit(255) + + # Parent + if gc_was_enabled: + gc.enable() finally: # be sure the FD is closed no matter what os.close(errpipe_write) - if p2cread is not None and p2cwrite is not None: + if p2cread != -1 and p2cwrite != -1: os.close(p2cread) - if c2pwrite is not None and c2pread is not None: + if c2pwrite != -1 and c2pread != -1: os.close(c2pwrite) - if errwrite is not None and errread is not None: + if errwrite != -1 and errread != -1: os.close(errwrite) # Wait for exec to fail or succeed; possibly raising an - # exception (limited to 1 MB) - data = _eintr_retry_call(os.read, errpipe_read, 1048576) + # exception (limited in size) + data = bytearray() + while True: + part = _eintr_retry_call(os.read, errpipe_read, 50000) + data += part + if not part or len(data) > 50000: + break finally: # be sure the FD is closed no matter what os.close(errpipe_read) if data: _eintr_retry_call(os.waitpid, self.pid, 0) - child_exception = pickle.loads(data) + try: + exception_name, hex_errno, err_msg = data.split(b':', 2) + except ValueError: + print('Bad exception data:', repr(data)) + exception_name = b'RuntimeError' + hex_errno = b'0' + err_msg = b'Unknown' + child_exception_type = getattr( + builtins, exception_name.decode('ascii'), + RuntimeError) for fd in (p2cwrite, c2pread, errread): - if fd is not None: + if fd != -1: os.close(fd) - raise child_exception + err_msg = err_msg.decode() + if issubclass(child_exception_type, OSError) and hex_errno: + errno = int(hex_errno, 16) + if errno != 0: + err_msg = os.strerror(errno) + raise child_exception_type(errno, err_msg) + raise child_exception_type(err_msg) def _handle_exitstatus(self, sts): Modified: python/branches/py3k/Lib/test/test_subprocess.py ============================================================================== --- python/branches/py3k/Lib/test/test_subprocess.py (original) +++ python/branches/py3k/Lib/test/test_subprocess.py Sun Mar 14 07:49:55 2010 @@ -568,12 +568,53 @@ self.assertFalse(subprocess._active, "subprocess._active not empty") def test_exceptions(self): - # caught & re-raised exceptions - with self.assertRaises(OSError) as c: + nonexistent_dir = "/_this/pa.th/does/not/exist" + try: + os.chdir(nonexistent_dir) + except OSError as e: + # This avoids hard coding the errno value or the OS perror() + # string and instead capture the exception that we want to see + # below for comparison. + desired_exception = e + else: + self.fail("chdir to nonexistant directory %s succeeded." % + nonexistent_dir) + + # Error in the child re-raised in the parent. + try: p = subprocess.Popen([sys.executable, "-c", ""], - cwd="/this/path/does/not/exist") - # The attribute child_traceback should contain "os.chdir" somewhere. - self.assertIn("os.chdir", c.exception.child_traceback) + cwd=nonexistent_dir) + except OSError as e: + # Test that the child process chdir failure actually makes + # it up to the parent process as the correct exception. + self.assertEqual(desired_exception.errno, e.errno) + self.assertEqual(desired_exception.strerror, e.strerror) + else: + self.fail("Expected OSError: %s" % desired_exception) + + def test_restore_signals(self): + # Code coverage for both values of restore_signals to make sure it + # at least does not blow up. + # A test for behavior would be complex. Contributions welcome. + subprocess.call([sys.executable, "-c", ""], restore_signals=True) + subprocess.call([sys.executable, "-c", ""], restore_signals=False) + + def test_start_new_session(self): + # For code coverage of calling setsid(). We don't care if we get an + # EPERM error from it depending on the test execution environment, that + # still indicates that it was called. + try: + output = subprocess.check_output( + [sys.executable, "-c", + "import os; print(os.getpgid(os.getpid()))"], + start_new_session=True) + except OSError as e: + if e.errno != errno.EPERM: + raise + else: + parent_pgid = os.getpgid(os.getpid()) + child_pgid = int(output) + self.assertNotEqual(parent_pgid, child_pgid) def test_run_abort(self): # returncode handles signal termination @@ -584,7 +625,8 @@ self.assertEqual(-p.returncode, signal.SIGABRT) def test_preexec(self): - # preexec function + # DISCLAIMER: Setting environment variables is *not* a good use + # of a preexec_fn. This is merely a test. p = subprocess.Popen([sys.executable, "-c", 'import sys,os;' 'sys.stdout.write(os.getenv("FRUIT"))'], @@ -592,6 +634,22 @@ preexec_fn=lambda: os.putenv("FRUIT", "apple")) self.assertEqual(p.stdout.read(), b"apple") + def test_preexec_exception(self): + def raise_it(): + raise ValueError("What if two swallows carried a coconut?") + try: + p = subprocess.Popen([sys.executable, "-c", ""], + preexec_fn=raise_it) + except RuntimeError as e: + self.assertTrue( + subprocess._posixsubprocess, + "Expected a ValueError from the preexec_fn") + except ValueError as e: + self.assertIn("coconut", e.args[0]) + else: + self.fail("Exception raised by preexec_fn did not make it " + "to the parent process.") + def test_args_string(self): # args is a string fd, fname = mkstemp() @@ -836,6 +894,20 @@ ProcessTestCase.tearDown(self) + at unittest.skipUnless(getattr(subprocess, '_posixsubprocess', False), + "_posixsubprocess extension module not found.") +class ProcessTestCasePOSIXPurePython(ProcessTestCase, POSIXProcessTestCase): + def setUp(self): + subprocess._posixsubprocess = None + ProcessTestCase.setUp(self) + POSIXProcessTestCase.setUp(self) + + def tearDown(self): + subprocess._posixsubprocess = sys.modules['_posixsubprocess'] + POSIXProcessTestCase.tearDown(self) + ProcessTestCase.tearDown(self) + + class HelperFunctionTests(unittest.TestCase): @unittest.skipIf(mswindows, "errno and EINTR make no sense on windows") def test_eintr_retry_call(self): @@ -859,6 +931,7 @@ unit_tests = (ProcessTestCase, POSIXProcessTestCase, Win32ProcessTestCase, + ProcessTestCasePOSIXPurePython, CommandTests, ProcessTestCaseNoPoll, HelperFunctionTests) Added: python/branches/py3k/Modules/_posixsubprocess.c ============================================================================== --- (empty file) +++ python/branches/py3k/Modules/_posixsubprocess.c Sun Mar 14 07:49:55 2010 @@ -0,0 +1,385 @@ +/* Authors: Gregory P. Smith & Jeffrey Yasskin */ +#include "Python.h" +#include + + +#define POSIX_CALL(call) if ((call) == -1) goto error + + +/* Maximum file descriptor, initialized on module load. */ +static long max_fd; + + +/* Given the gc module call gc.enable() and return 0 on success. */ +static int _enable_gc(PyObject *gc_module) +{ + PyObject *result; + result = PyObject_CallMethod(gc_module, "enable", NULL); + if (result == NULL) + return 1; + Py_DECREF(result); + return 0; +} + + +/* + * This function is code executed in the child process immediately after fork + * to set things up and call exec(). + * + * All of the code in this function must only use async-signal-safe functions, + * listed at `man 7 signal` or + * http://www.opengroup.org/onlinepubs/009695399/functions/xsh_chap02_04.html. + * + * This restriction is documented at + * http://www.opengroup.org/onlinepubs/009695399/functions/fork.html. + */ +static void child_exec(char *const exec_array[], + char *const argv[], + char *const envp[], + const char *cwd, + int p2cread, int p2cwrite, + int c2pread, int c2pwrite, + int errread, int errwrite, + int errpipe_read, int errpipe_write, + int close_fds, int restore_signals, + int call_setsid, + PyObject *preexec_fn, + PyObject *preexec_fn_args_tuple) +{ + int i, saved_errno, fd_num; + PyObject *result; + const char* err_msg; + /* Buffer large enough to hold a hex integer. We can't malloc. */ + char hex_errno[sizeof(saved_errno)*2+1]; + + /* Close parent's pipe ends. */ + if (p2cwrite != -1) { + POSIX_CALL(close(p2cwrite)); + } + if (c2pread != -1) { + POSIX_CALL(close(c2pread)); + } + if (errread != -1) { + POSIX_CALL(close(errread)); + } + POSIX_CALL(close(errpipe_read)); + + /* Dup fds for child. */ + if (p2cread != -1) { + POSIX_CALL(dup2(p2cread, 0)); /* stdin */ + } + if (c2pwrite != -1) { + POSIX_CALL(dup2(c2pwrite, 1)); /* stdout */ + } + if (errwrite != -1) { + POSIX_CALL(dup2(errwrite, 2)); /* stderr */ + } + + /* Close pipe fds. Make sure we don't close the same fd more than */ + /* once, or standard fds. */ + if (p2cread != -1 && p2cread != 0) { + POSIX_CALL(close(p2cread)); + } + if (c2pwrite != -1 && c2pwrite != p2cread && c2pwrite != 1) { + POSIX_CALL(close(c2pwrite)); + } + if (errwrite != -1 && errwrite != p2cread && + errwrite != c2pwrite && errwrite != 2) { + POSIX_CALL(close(errwrite)); + } + + /* close() is intentionally not checked for errors here as we are closing */ + /* a large range of fds, some of which may be invalid. */ + if (close_fds) { + for (fd_num = 3; fd_num < errpipe_write; ++fd_num) { + close(fd_num); + } + for (fd_num = errpipe_write+1; fd_num < max_fd; ++fd_num) { + close(fd_num); + } + } + + if (cwd) + POSIX_CALL(chdir(cwd)); + + if (restore_signals) + _Py_RestoreSignals(); + +#ifdef HAVE_SETSID + if (call_setsid) + POSIX_CALL(setsid()); +#endif + + if (preexec_fn != Py_None && preexec_fn_args_tuple) { + /* This is where the user has asked us to deadlock their program. */ + result = PyObject_Call(preexec_fn, preexec_fn_args_tuple, NULL); + if (result == NULL) { + /* Stringifying the exception or traceback would involve + * memory allocation and thus potential for deadlock. + * We've already faced potential deadlock by calling back + * into Python in the first place, so it probably doesn't + * matter but we avoid it to minimize the possibility. */ + err_msg = "Exception occurred in preexec_fn."; + errno = 0; /* We don't want to report an OSError. */ + goto error; + } + /* Py_DECREF(result); - We're about to exec so why bother? */ + } + + /* This loop matches the Lib/os.py _execvpe()'s PATH search when */ + /* given the executable_list generated by Lib/subprocess.py. */ + saved_errno = 0; + for (i = 0; exec_array[i] != NULL; ++i) { + const char *executable = exec_array[i]; + if (envp) { + execve(executable, argv, envp); + } else { + execv(executable, argv); + } + if (errno != ENOENT && errno != ENOTDIR && saved_errno == 0) { + saved_errno = errno; + } + } + /* Report the first exec error, not the last. */ + if (saved_errno) + errno = saved_errno; + +error: + saved_errno = errno; + /* Report the posix error to our parent process. */ + if (saved_errno) { + char *cur; + write(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; + } + write(errpipe_write, cur, hex_errno + sizeof(hex_errno) - cur); + write(errpipe_write, ":", 1); + /* We can't call strerror(saved_errno). It is not async signal safe. + * The parent process will look the error message up. */ + } else { + write(errpipe_write, "RuntimeError:0:", 15); + write(errpipe_write, err_msg, strlen(err_msg)); + } +} + + +static PyObject * +subprocess_fork_exec(PyObject* self, PyObject *args) +{ + PyObject *gc_module = NULL; + PyObject *executable_list, *py_close_fds; + PyObject *env_list, *preexec_fn; + PyObject *process_args = NULL, *converted_args = NULL; + PyObject *preexec_fn_args_tuple = NULL; + int p2cread, p2cwrite, c2pread, c2pwrite, errread, errwrite; + int errpipe_read, errpipe_write, close_fds, restore_signals; + int call_setsid; + const char *cwd; + pid_t pid; + int need_to_reenable_gc = 0; + char *const *exec_array, *const *argv = NULL, *const *envp = NULL; + Py_ssize_t arg_num; + + if (!PyArg_ParseTuple( + args, "OOOzOiiiiiiiiiiO:fork_exec", + &process_args, &executable_list, &py_close_fds, &cwd, &env_list, + &p2cread, &p2cwrite, &c2pread, &c2pwrite, + &errread, &errwrite, &errpipe_read, &errpipe_write, + &restore_signals, &call_setsid, &preexec_fn)) + return NULL; + + close_fds = PyObject_IsTrue(py_close_fds); + if (close_fds && errpipe_write < 3) { /* precondition */ + PyErr_SetString(PyExc_ValueError, "errpipe_write must be >= 3"); + return NULL; + } + + /* We need to call gc.disable() when we'll be calling preexec_fn */ + if (preexec_fn != Py_None) { + PyObject *result; + gc_module = PyImport_ImportModule("gc"); + if (gc_module == NULL) + return NULL; + result = PyObject_CallMethod(gc_module, "isenabled", NULL); + if (result == NULL) + return NULL; + need_to_reenable_gc = PyObject_IsTrue(result); + Py_DECREF(result); + if (need_to_reenable_gc == -1) + return NULL; + result = PyObject_CallMethod(gc_module, "disable", NULL); + if (result == NULL) + return NULL; + Py_DECREF(result); + } + + exec_array = _PySequence_BytesToCharpArray(executable_list); + if (!exec_array) + return NULL; + + /* Convert args and env into appropriate arguments for exec() */ + /* These conversions are done in the parent process to avoid allocating + or freeing memory in the child process. */ + if (process_args != Py_None) { + /* Equivalent to: */ + /* tuple(PyUnicode_FSConverter(arg) for arg in process_args) */ + process_args = PySequence_Fast(process_args, "argv must be a tuple"); + converted_args = PyTuple_New(PySequence_Size(process_args)); + if (converted_args == NULL) + goto cleanup; + for (arg_num = 0; arg_num < PySequence_Size(process_args); ++arg_num) { + PyObject *borrowed_arg, *converted_arg; + borrowed_arg = PySequence_Fast_GET_ITEM(process_args, arg_num); + if (PyUnicode_FSConverter(borrowed_arg, &converted_arg) == 0) + goto cleanup; + PyTuple_SET_ITEM(converted_args, arg_num, converted_arg); + } + + argv = _PySequence_BytesToCharpArray(converted_args); + Py_CLEAR(converted_args); + Py_CLEAR(process_args); + if (!argv) + goto cleanup; + } + + if (env_list != Py_None) { + envp = _PySequence_BytesToCharpArray(env_list); + if (!envp) + goto cleanup; + } + + if (preexec_fn != Py_None) { + preexec_fn_args_tuple = PyTuple_New(0); + if (!preexec_fn_args_tuple) + goto cleanup; + _PyImport_AcquireLock(); + } + + pid = fork(); + if (pid == 0) { + /* Child process */ + /* + * Code from here to _exit() must only use async-signal-safe functions, + * listed at `man 7 signal` or + * http://www.opengroup.org/onlinepubs/009695399/functions/xsh_chap02_04.html. + */ + + if (preexec_fn != Py_None) { + /* We'll be calling back into Python later so we need to do this. + * This call may not be async-signal-safe but neither is calling + * back into Python. The user asked us to use hope as a strategy + * to avoid deadlock... */ + PyOS_AfterFork(); + } + + child_exec(exec_array, argv, envp, cwd, + p2cread, p2cwrite, c2pread, c2pwrite, + errread, errwrite, errpipe_read, errpipe_write, + close_fds, restore_signals, call_setsid, + preexec_fn, preexec_fn_args_tuple); + _exit(255); + return NULL; /* Dead code to avoid a potential compiler warning. */ + } + if (pid == -1) { + /* Capture the errno exception before errno can be clobbered. */ + PyErr_SetFromErrno(PyExc_OSError); + } + if (preexec_fn != Py_None && + _PyImport_ReleaseLock() < 0 && !PyErr_Occurred()) { + PyErr_SetString(PyExc_RuntimeError, + "not holding the import lock"); + } + + /* Parent process */ + if (envp) + _Py_FreeCharPArray(envp); + if (argv) + _Py_FreeCharPArray(argv); + _Py_FreeCharPArray(exec_array); + + /* Reenable gc in the parent process (or if fork failed). */ + if (need_to_reenable_gc && _enable_gc(gc_module)) { + Py_XDECREF(gc_module); + return NULL; + } + Py_XDECREF(gc_module); + + if (pid == -1) + return NULL; /* fork() failed. Exception set earlier. */ + + return PyLong_FromPid(pid); + +cleanup: + if (envp) + _Py_FreeCharPArray(envp); + if (argv) + _Py_FreeCharPArray(argv); + _Py_FreeCharPArray(exec_array); + Py_XDECREF(converted_args); + Py_XDECREF(process_args); + + /* Reenable gc if it was disabled. */ + if (need_to_reenable_gc) + _enable_gc(gc_module); + Py_XDECREF(gc_module); + return NULL; +} + + +PyDoc_STRVAR(subprocess_fork_exec_doc, +"fork_exec(args, executable_list, close_fds, cwd, env,\n\ + p2cread, p2cwrite, c2pread, c2pwrite,\n\ + errread, errwrite, errpipe_read, errpipe_write,\n\ + restore_signals, call_setsid, preexec_fn)\n\ +\n\ +Forks a child process, closes parent file descriptors as appropriate in the\n\ +child and dups the few that are needed before calling exec() in the child\n\ +process.\n\ +\n\ +The preexec_fn, if supplied, will be called immediately before exec.\n\ +WARNING: preexec_fn is NOT SAFE if your application uses threads.\n\ + It may trigger infrequent, difficult to debug deadlocks.\n\ +\n\ +If an error occurs in the child process before the exec, it is\n\ +serialized and written to the errpipe_write fd per subprocess.py.\n\ +\n\ +Returns: the child process's PID.\n\ +\n\ +Raises: Only on an error in the parent process.\n\ +"); + + +/* module level code ********************************************************/ + +PyDoc_STRVAR(module_doc, +"A POSIX helper for the subprocess module."); + + +static PyMethodDef module_methods[] = { + {"fork_exec", subprocess_fork_exec, METH_VARARGS, subprocess_fork_exec_doc}, + {NULL, NULL} /* sentinel */ +}; + + +static struct PyModuleDef _posixsubprocessmodule = { + PyModuleDef_HEAD_INIT, + "_posixsubprocess", + module_doc, + -1, /* No memory is needed. */ + module_methods, +}; + +PyMODINIT_FUNC +PyInit__posixsubprocess(void) +{ +#ifdef _SC_OPEN_MAX + max_fd = sysconf(_SC_OPEN_MAX); + if (max_fd == -1) +#endif + max_fd = 256; /* Matches Lib/subprocess.py */ + + return PyModule_Create(&_posixsubprocessmodule); +} Modified: python/branches/py3k/Modules/posixmodule.c ============================================================================== --- python/branches/py3k/Modules/posixmodule.c (original) +++ python/branches/py3k/Modules/posixmodule.c Sun Mar 14 07:49:55 2010 @@ -303,23 +303,6 @@ #define WAIT_STATUS_INT(s) (s) #endif /* UNION_WAIT */ -/* Issue #1983: pid_t can be longer than a C long on some systems */ -#if !defined(SIZEOF_PID_T) || SIZEOF_PID_T == SIZEOF_INT -#define PARSE_PID "i" -#define PyLong_FromPid PyLong_FromLong -#define PyLong_AsPid PyLong_AsLong -#elif SIZEOF_PID_T == SIZEOF_LONG -#define PARSE_PID "l" -#define PyLong_FromPid PyLong_FromLong -#define PyLong_AsPid PyLong_AsLong -#elif defined(SIZEOF_LONG_LONG) && SIZEOF_PID_T == SIZEOF_LONG_LONG -#define PARSE_PID "L" -#define PyLong_FromPid PyLong_FromLongLong -#define PyLong_AsPid PyLong_AsLongLong -#else -#error "sizeof(pid_t) is neither sizeof(int), sizeof(long) or sizeof(long long)" -#endif /* SIZEOF_PID_T */ - /* Don't use the "_r" form if we don't need it (also, won't have a prototype for it, at least on Solaris -- maybe others as well?). */ #if defined(HAVE_CTERMID_R) && defined(WITH_THREAD) Modified: python/branches/py3k/Objects/abstract.c ============================================================================== --- python/branches/py3k/Objects/abstract.c (original) +++ python/branches/py3k/Objects/abstract.c Sun Mar 14 07:49:55 2010 @@ -2722,3 +2722,63 @@ PyErr_Clear(); return result; } + + +/* + * Flatten a sequence of bytes() objects into a C array of + * NULL terminated string pointers with a NULL char* terminating the array. + * (ie: an argv or env list) + * + * Memory allocated for the returned list is allocated using malloc() and MUST + * be freed by the caller using a free() loop or _Py_FreeCharPArray(). + */ +char *const * +_PySequence_BytesToCharpArray(PyObject* self) +{ + char **array; + Py_ssize_t i, argc; + + argc = PySequence_Size(self); + if (argc == -1) + return NULL; + + array = malloc((argc + 1) * sizeof(char *)); + if (array == NULL) { + PyErr_NoMemory(); + return NULL; + } + for (i = 0; i < argc; ++i) { + char *data; + PyObject *item = PySequence_GetItem(self, i); + data = PyBytes_AsString(item); + if (data == NULL) { + /* NULL terminate before freeing. */ + array[i] = NULL; + goto fail; + } + array[i] = strdup(data); + if (!array[i]) { + PyErr_NoMemory(); + goto fail; + } + } + array[argc] = NULL; + + return array; + +fail: + _Py_FreeCharPArray(array); + return NULL; +} + + +/* Free's a NULL terminated char** array of C strings. */ +void +_Py_FreeCharPArray(char *const array[]) +{ + Py_ssize_t i; + for (i = 0; array[i] != NULL; ++i) { + free(array[i]); + } + free((void*)array); +} Modified: python/branches/py3k/Python/pythonrun.c ============================================================================== --- python/branches/py3k/Python/pythonrun.c (original) +++ python/branches/py3k/Python/pythonrun.c Sun Mar 14 07:49:55 2010 @@ -2130,6 +2130,27 @@ } +/* Restore signals that the interpreter has called SIG_IGN on to SIG_DFL. + * + * All of the code in this function must only use async-signal-safe functions, + * listed at `man 7 signal` or + * http://www.opengroup.org/onlinepubs/009695399/functions/xsh_chap02_04.html. + */ +void +_Py_RestoreSignals(void) +{ +#ifdef SIGPIPE + PyOS_setsig(SIGPIPE, SIG_DFL); +#endif +#ifdef SIGXFZ + PyOS_setsig(SIGXFZ, SIG_DFL); +#endif +#ifdef SIGXFSZ + PyOS_setsig(SIGXFSZ, SIG_DFL); +#endif +} + + /* * The file descriptor fd is considered ``interactive'' if either * a) isatty(fd) is TRUE, or @@ -2223,6 +2244,11 @@ #endif } +/* + * All of the code in this function must only use async-signal-safe functions, + * listed at `man 7 signal` or + * http://www.opengroup.org/onlinepubs/009695399/functions/xsh_chap02_04.html. + */ PyOS_sighandler_t PyOS_setsig(int sig, PyOS_sighandler_t handler) { Modified: python/branches/py3k/setup.py ============================================================================== --- python/branches/py3k/setup.py (original) +++ python/branches/py3k/setup.py Sun Mar 14 07:49:55 2010 @@ -546,6 +546,9 @@ # CSV files exts.append( Extension('_csv', ['_csv.c']) ) + # POSIX subprocess module helper. + exts.append( Extension('_posixsubprocess', ['_posixsubprocess.c']) ) + # socket(2) exts.append( Extension('_socket', ['socketmodule.c'], depends = ['socketmodule.h']) ) From python-checkins at python.org Sun Mar 14 07:52:19 2010 From: python-checkins at python.org (gregory.p.smith) Date: Sun, 14 Mar 2010 07:52:19 +0100 (CET) Subject: [Python-checkins] r78947 - python/branches/py3k/Misc/NEWS Message-ID: <20100314065219.02DF1F74F@mail.python.org> Author: gregory.p.smith Date: Sun Mar 14 07:52:18 2010 New Revision: 78947 Log: NEWS entry for subprocess module C extension in r78946. Modified: python/branches/py3k/Misc/NEWS Modified: python/branches/py3k/Misc/NEWS ============================================================================== --- python/branches/py3k/Misc/NEWS (original) +++ python/branches/py3k/Misc/NEWS Sun Mar 14 07:52:18 2010 @@ -283,6 +283,10 @@ Library ------- +- The internals of the subprocess module on POSIX systems have been replaced + by an extension module (_posixsubprocess) so that the fork()+exec() can be + done safely without the possibility of deadlock in multithreaded applications. + - Issue #6472: The xml.etree package is updated to ElementTree 1.3. The cElementTree module is updated too. From python-checkins at python.org Sun Mar 14 08:13:25 2010 From: python-checkins at python.org (gregory.p.smith) Date: Sun, 14 Mar 2010 08:13:25 +0100 (CET) Subject: [Python-checkins] r78948 - python/branches/py3k/Misc/NEWS Message-ID: <20100314071325.40F01F9A5@mail.python.org> Author: gregory.p.smith Date: Sun Mar 14 08:13:25 2010 New Revision: 78948 Log: More notes about r78946, this time describing the restore_signals behavior. Modified: python/branches/py3k/Misc/NEWS Modified: python/branches/py3k/Misc/NEWS ============================================================================== --- python/branches/py3k/Misc/NEWS (original) +++ python/branches/py3k/Misc/NEWS Sun Mar 14 08:13:25 2010 @@ -287,6 +287,11 @@ by an extension module (_posixsubprocess) so that the fork()+exec() can be done safely without the possibility of deadlock in multithreaded applications. +- subprocess.Popen now has restore_signals and start_new_session features. + The default of restore_signals=True is a new behavior compared to earlier + Python versions. This means that signals such as SIGPIPE are not ignored + by default in subprocesses launched by Python (Issue #1652). + - Issue #6472: The xml.etree package is updated to ElementTree 1.3. The cElementTree module is updated too. From python-checkins at python.org Sun Mar 14 10:50:54 2010 From: python-checkins at python.org (georg.brandl) Date: Sun, 14 Mar 2010 10:50:54 +0100 (CET) Subject: [Python-checkins] r78949 - python/trunk/Misc/NEWS Message-ID: <20100314095054.EA6ADF95D@mail.python.org> Author: georg.brandl Date: Sun Mar 14 10:50:54 2010 New Revision: 78949 Log: Format and rewrap 2.7 NEWS consistently. Modified: python/trunk/Misc/NEWS Modified: python/trunk/Misc/NEWS ============================================================================== --- python/trunk/Misc/NEWS (original) +++ python/trunk/Misc/NEWS Sun Mar 14 10:50:54 2010 @@ -13,53 +13,52 @@ ----------------- - Issue #3137: Don't ignore errors at startup, especially a keyboard interrupt - (SIGINT). If an error occurs while importing the site module, the error is - printed and Python exits. Initialize the GIL before importing the site + (SIGINT). If an error occurs while importing the site module, the error is + printed and Python exits. Initialize the GIL before importing the site module. Library ------- -- Issue #7774: Set sys.executable to an empty string if argv[0] has been +- Issue #7774: Set sys.executable to an empty string if ``argv[0]`` has been set to an non existent program name and Python is unable to retrieve the real - program name + program name. - Issue #8117: logging: Improved algorithm for computing initial rollover time - for TimedRotatingFileHandler by using the modification time of an existing - log file to compute the next rollover time. If the log file does not exist, - the current time is used as the basis for the computation. + for ``TimedRotatingFileHandler`` by using the modification time of an + existing log file to compute the next rollover time. If the log file does + not exist, the current time is used as the basis for the computation. -- Issue #6472: The xml.etree package is updated to ElementTree 1.3. The +- Issue #6472: The ``xml.etree`` package is updated to ElementTree 1.3. The cElementTree module is updated too. - Issue #7880: Fix sysconfig when the python executable is a symbolic link. -- Issue #7624: Fix isinstance(foo(), collections.Callable) for old-style +- Issue #7624: Fix ``isinstance(foo(), collections.Callable)`` for old-style classes. -- Issue #7143: get_payload used to strip any trailing newline from a - base64 transfer-encoded payload *after* decoding it; it no longer does. - This is a behavior change, so email's minor version number is now - bumped, to version 4.0.2, for the 2.7 release. +- Issue #7143: email: ``get_payload()`` used to strip any trailing newline from + a base64 transfer-encoded payload *after* decoding it; it no longer does. + This is a behavior change, so email's minor version number is now bumped, to + version 4.0.2, for the 2.7 release. Extension Modules ----------------- -- Issue #1530559: When passing a non-integer argument to struct.pack - with *any* integer format code (one of 'bBhHiIlLqQ'), struct.pack - attempts to use the argument's __int__ method to convert to an - integer before packing. It also produces a DeprecationWarning in - this case. (In Python 2.6, the behaviour was inconsistent: __int__ - was used for some integer codes but not for others, and the set of - integer codes for which it was used differed between native packing - and standard packing.) +- Issue #1530559: When passing a non-integer argument to struct.pack with *any* + integer format code (one of 'bBhHiIlLqQ'), struct.pack attempts to use the + argument's __int__ method to convert to an integer before packing. It also + produces a DeprecationWarning in this case. (In Python 2.6, the behaviour + was inconsistent: __int__ was used for some integer codes but not for others, + and the set of integer codes for which it was used differed between native + packing and standard packing.) Tools/Demos ----------- -- Issue #7993: Add a test of IO packet processing bandwidth to ccbench. - It measures the number of UDP packets processed per second depending on - the number of background CPU-bound Python threads. +- Issue #7993: Add a test of IO packet processing bandwidth to ccbench. It + measures the number of UDP packets processed per second depending on the + number of background CPU-bound Python threads. What's New in Python 2.7 alpha 4? @@ -70,72 +69,70 @@ Core and Builtins ----------------- -- Issue #7544: Preallocate thread memory before creating the thread to avoid - a fatal error in low memory condition. +- Issue #7544: Preallocate thread memory before creating the thread to avoid a + fatal error in low memory condition. -- Issue #7820: The parser tokenizer restores all bytes in the right if - the BOM check fails. +- Issue #7820: The parser tokenizer restores all bytes in the right if the BOM + check fails. - Issue #7309: Fix unchecked attribute access when converting - UnicodeEncodeError, UnicodeDecodeError, and UnicodeTranslateError to - strings. + UnicodeEncodeError, UnicodeDecodeError, and UnicodeTranslateError to strings. - Issue #7649: "u'%c' % char" now behaves like "u'%s' % char" and raises a - UnicodeDecodeError if 'char' is a byte string that can't be decoded using - the default encoding. + UnicodeDecodeError if 'char' is a byte string that can't be decoded using the + default encoding. -- Issue #6902: Fix problem with built-in types format incorrectly with - 0 padding. +- Issue #6902: Fix problem with built-in types format incorrectly with 0 + padding. -- Issue #2560: remove an unnecessary 'for' loop from my_fgets() in +- Issue #2560: Remove an unnecessary 'for' loop from ``my_fgets()`` in Parser/myreadline.c. - Issue #7988: Fix default alignment to be right aligned for - complex.__format__. Now it matches other numeric types. + ``complex.__format__``. Now it matches other numeric types. -- Issue #5211: the complex type no longer uses implicit coercion in - mixed-type binary arithmetic operations. +- Issue #5211: The complex type no longer uses implicit coercion in mixed-type + binary arithmetic operations. Library ------- - Issue #6906: Tk should not set Unicode environment variables on Windows. -- Issue #1054943: Fix unicodedata.normalize('NFC', text) for the Public Review - Issue #29 +- Issue #1054943: Fix ``unicodedata.normalize('NFC', text)`` for the Public + Review Issue #29. -- Issue #7494: fix a crash in _lsprof (cProfile) after clearing the profiler, +- Issue #7494: Fix a crash in ``_lsprof`` (cProfile) after clearing the profiler, reset also the pointer to the current pointer context. -- Issue #7232: Add support for the context manager protocol to the TarFile - class. +- Issue #7232: Add support for the context manager protocol to the + ``tarfile.TarFile`` class. - Issue #7250: Fix info leak of os.environ across multi-run uses of - wsgiref.handlers.CGIHandler. + ``wsgiref.handlers.CGIHandler``. - Issue #1729305: Fix doctest to handle encode error with "backslashreplace". -- Issue #691291: codecs.open() should not convert end of lines on reading and - writing. +- Issue #691291: ``codecs.open()`` should not convert end of lines on reading + and writing. -- Issue #7975: correct regression in dict methods supported by bsddb.dbshelve. +- Issue #7975: Correct regression in dict methods supported by bsddb.dbshelve. -- Issue #7959: ctypes callback functions are now registered correctly - with the cycle garbage collector. +- Issue #7959: ctypes callback functions are now registered correctly with the + cycle garbage collector. -- Issue #7970: email.Generator.flatten now correctly flattens message/rfc822 - messages parsed by email.Parser.HeaderParser. +- Issue #7970: ``email.Generator.flatten`` now correctly flattens + message/rfc822 messages parsed by ``email.Parser.HeaderParser``. - Issue #3426: ``os.path.abspath`` now returns unicode when its arg is unicode. -- Issue #7633: In the decimal module, Context class methods (with the - exception of canonical and is_canonical) now accept instances of int - and long wherever a Decimal instance is accepted, and implicitly - convert that argument to Decimal. Previously only some arguments - were converted. +- Issue #7633: In the decimal module, ``Context`` class methods (with the + exception of canonical and is_canonical) now accept instances of int and long + wherever a Decimal instance is accepted, and implicitly convert that argument + to Decimal. Previously only some arguments were converted. -- Issue #6003: add an argument to ``zipfile.Zipfile.writestr`` to - specify the compression type. +- Issue #6003: Add an argument to ``zipfile.Zipfile.writestr`` to specify the + compression type. - Issue #7893: ``unittest.TextTestResult`` is made public and a ``resultclass`` argument added to the TextTestRunner constructor allowing a different result @@ -144,65 +141,66 @@ - Issue #7588: ``unittest.TextTestResult.getDescription`` now includes the test name in failure reports even if the test has a docstring. -- Issue #5801: removed spurious empty lines in wsgiref. +- Issue #5801: Remove spurious empty lines in wsgiref. -- Issue #1537721: Add a writeheader() method to csv.DictWriter. +- Issue #1537721: Add a ``writeheader()`` method to ``csv.DictWriter``. -- Issue #7427: improve the representation of httplib.BadStatusLine exceptions. +- Issue #7427: Improve the representation of httplib.BadStatusLine exceptions. -- Issue #7481: When a threading.Thread failed to start it would leave the - instance stuck in initial state and present in threading.enumerate(). +- Issue #7481: When a ``threading.Thread`` failed to start it would leave the + instance stuck in initial state and present in ``threading.enumerate()``. - Issue #1068268: The subprocess module now handles EINTR in internal - os.waitpid and os.read system calls where appropriate. + ``os.waitpid()`` and ``os.read()`` system calls where appropriate. -- Issue #6729: Added ctypes.c_ssize_t to represent ssize_t. +- Issue #6729: Add ``ctypes.c_ssize_t`` to represent ssize_t. - Issue #6247: The argparse module has been added to the standard library. Extension Modules ----------------- -- The sqlite3 module was updated to pysqlite 2.6.0. This fixes several obscure +- The sqlite3 module was updated to pysqlite 2.6.0. This fixes several obscure bugs and allows loading SQLite extensions from shared libraries. - Issue #7808: Fix reference leaks in _bsddb and related tests. -- Issue #6544: fix a reference leak in the kqueue implementation's error +- Issue #6544: Fix a reference leak in the kqueue implementation's error handling. - Stop providing crtassem.h symbols when compiling with Visual Studio 2010, as msvcr100.dll is not a platform assembly anymore. -- Issue #7242: On Solaris 9 and earlier calling os.fork() from within a +- Issue #7242: On Solaris 9 and earlier calling ``os.fork()`` from within a thread could raise an incorrect RuntimeError about not holding the import lock. The import lock is now reinitialized after fork. -- Issue #7999: os.setreuid() and os.setregid() would refuse to accept a -1 - parameter on some platforms such as OS X. +- Issue #7999: ``os.setreuid()`` and ``os.setregid()`` would refuse to accept a + -1 parameter on some platforms such as OS X. Tests ----- -- Issue #7849: Now the utility ``check_warnings`` verifies if the warnings are - effectively raised. A new utility ``check_py3k_warnings`` is available. +- Issue #7849: The utility ``test.test_support.check_warnings()`` verifies if + warnings are effectively raised. A new utility ``check_py3k_warnings()`` is + available. - The four path modules (genericpath, macpath, ntpath, posixpath) share a common TestCase for some tests: test_genericpath.CommonTest. -- Print platform information when running the whole test suite, or using - the --verbose flag. +- Print platform information when running the whole test suite, or using the + ``--verbose`` flag. -- Issue #767675: enable test_pep277 on POSIX platforms with Unicode-friendly +- Issue #767675: Enable test_pep277 on POSIX platforms with Unicode-friendly filesystem encoding. -- Issue #6292: for the moment at least, the test suite runs cleanly if python +- Issue #6292: For the moment at least, the test suite runs cleanly if python is run with the -OO flag. Tests requiring docstrings are skipped. -- Issue #7712: test_support gained a new `temp_cwd` context manager which is - now also used by regrtest to run all the tests in a temporary directory. - The original CWD is saved in `test_support.SAVEDCWD`. - Thanks to Florent Xicluna who helped with the patch. +- Issue #7712: test_support gained a new ``temp_cwd`` context manager which is + now also used by regrtest to run all the tests in a temporary directory. The + original CWD is saved in ``test.test_support.SAVEDCWD``. Thanks to Florent + Xicluna who helped with the patch. Build ----- @@ -220,44 +218,46 @@ - Issue #5677: Explicitly forbid write operations on read-only file objects, and read operations on write-only file objects. On Windows, the system C - library would return a bogus result; on Solaris, it was possible to crash - the interpreter. Patch by Stefan Krah. + library would return a bogus result; on Solaris, it was possible to crash the + interpreter. Patch by Stefan Krah. - Issue #7853: Normalize exceptions before they are passed to a context - managers __exit__ method. + manager's ``__exit__()`` method. -- Issue #7385: Fix a crash in `MemoryView_FromObject` when - `PyObject_GetBuffer` fails. Patch by Florent Xicluna. +- Issue #7385: Fix a crash in ``PyMemoryView_FromObject()`` when + ``PyObject_GetBuffer()`` fails. Patch by Florent Xicluna. -- Issue #7819: Check sys.call_tracing() arguments types. +- Issue #7819: Check ``sys.call_tracing()`` arguments types. -- Issue #7788: Fix an interpreter crash produced by deleting a list - slice with very large step value. +- Issue #7788: Fix an interpreter crash produced by deleting a list slice with + very large step value. -- Issue #7766: Change sys.getwindowsversion() return value to a named - tuple and add the additional members returned in an OSVERSIONINFOEX - structure. The new members are service_pack_major, service_pack_minor, - suite_mask, and product_type. +- Issue #7766: Change ``sys.getwindowsversion()`` return value to a named tuple + and add the additional members returned in an OSVERSIONINFOEX structure. The + new members are service_pack_major, service_pack_minor, suite_mask, and + product_type. -- Issue #7561: Operations on empty bytearrays (such as `int(bytearray())`) - could crash in many places because of the PyByteArray_AS_STRING() macro - returning NULL. The macro now returns a statically allocated empty - string instead. +- Issue #7561: Operations on empty bytearrays (such as ``int(bytearray())``) + could crash in many places because of the ``PyByteArray_AS_STRING()`` macro + returning NULL. The macro now returns a statically allocated empty string + instead. - Issue #7622: Improve the split(), rsplit(), splitlines() and replace() methods of bytes, bytearray and unicode objects by using a common implementation based on stringlib's fast search. Patch by Florent Xicluna. -- Issue #7632: Fix various str -> float conversion bugs present in 2.7 - alpha 2, including: (1) a serious 'wrong output' bug that could - occur for long (> 40 digit) input strings, (2) a crash in dtoa.c - that occurred in debug builds when parsing certain long numeric - strings corresponding to subnormal values, (3) a memory leak for - some values large enough to cause overflow, and (4) a number of - flaws that could lead to incorrectly rounded results. +- Issue #7632: Fix various str -> float conversion bugs present in 2.7 alpha 2, + including: + + (1) a serious 'wrong output' bug that could occur for long (> 40 digit) input + strings, + (2) a crash in dtoa.c that occurred in debug builds when parsing certain long + numeric strings corresponding to subnormal values, + (3) a memory leak for some values large enough to cause overflow, and + (4) a number of flaws that could lead to incorrectly rounded results. -- Issue #7319, #7770: Silence DeprecationWarning by default when -3 is not - used. +- Issue #7319, #7770: Silence ``DeprecationWarning`` by default when the -3 + option is not used. - Issue #2335: Backport set literals syntax from Python 3.x. @@ -265,80 +265,79 @@ - Issue #1967: Backport dictionary views from Python 3.x. - Library ------- - Issue #7835: shelve should no longer produce mysterious warnings during interpreter shutdown. -- Issue #2746: Don't escape ampersands and angle brackets ("&", "<", ">") - in XML processing instructions and comments. These raw characters are - allowed by the XML specification, and are necessary when outputting e.g. - PHP code in a processing instruction. Patch by Neil Muller. +- Issue #2746: Don't escape ampersands and angle brackets ("&", "<", ">") in + XML processing instructions and comments. These raw characters are allowed + by the XML specification, and are necessary when outputting e.g. PHP code in + a processing instruction. Patch by Neil Muller. -- Issue #7869: logging: improved diagnostic for format-time errors. +- Issue #7869: logging: Improved diagnostic for format-time errors. -- Issue #7868: logging: added loggerClass attribute to Manager. +- Issue #7868: logging: Added loggerClass attribute to Manager. -- Issue #7851: logging: clarification on logging configuration files. +- Issue #7851: logging: Clarification on logging configuration files. - Issue #4772: Raise a ValueError when an unknown Bluetooth protocol is - specified, rather than fall through to AF_PACKET (in the `socket` module). + specified, rather than fall through to AF_PACKET (in the ``socket`` module). Also, raise ValueError rather than TypeError when an unknown TIPC address type is specified. Patch by Brian Curtin. - logging: Implemented PEP 391. - Issue #6939: Fix file I/O objects in the `io` module to keep the original - file position when calling `truncate()`. It would previously change the - file position to the given argument, which goes against the tradition of + file position when calling `truncate()`. It would previously change the file + position to the given argument, which goes against the tradition of ftruncate() and other truncation APIs. Patch by Pascal Chambon. - UserDict is now a new-style class. -- Issue #7610: Reworked implementation of the internal - :class:`zipfile.ZipExtFile` class used to represent files stored inside - an archive. The new implementation is significantly faster and can - be wrapped in a :class:`io.BufferedReader` object for more speedups. - It also solves an issue where interleaved calls to `read()` and - `readline()` give wrong results. Patch by Nir Aides. +- Issue #7610: Reworked implementation of the internal ``zipfile.ZipExtFile`` + class used to represent files stored inside an archive. The new + implementation is significantly faster and can be wrapped in a + ``io.BufferedReader`` object for more speedups. It also solves an issue + where interleaved calls to ``read()`` and ``readline()`` give wrong results. + Patch by Nir Aides. - Issue #7792: Registering non-classes to ABCs raised an obscure error. -- Removed the functions 'verify' and 'vereq' from Lib/test/test_support.py. +- Removed the deprecated functions ``verify()`` and ``vereq()`` from + Lib/test/test_support.py. -- Issue #7773: Fix an UnboundLocalError in platform.linux_distribution() when - the release file is empty. +- Issue #7773: Fix an UnboundLocalError in ``platform.linux_distribution()`` + when the release file is empty. -- Issue #7748: Since unicode values are supported for some metadata options - in Distutils, the DistributionMetadata get_* methods will now return an utf-8 - encoded string for them. This ensure that the upload and register commands - send the right values to PyPI without any error. +- Issue #7748: Since unicode values are supported for some metadata options in + Distutils, the DistributionMetadata get_* methods will now return an utf-8 + encoded string for them. This ensures that the upload and register commands + send the correct values to PyPI without any error. -- Issue #1670765: Prevent email.generator.Generator from re-wrapping +- Issue #1670765: Prevent ``email.generator.Generator`` from re-wrapping headers in multipart/signed MIME parts, which fixes one of the sources of invalid modifications to such parts by Generator. -- Issue #7701: Fix crash in binascii.b2a_uu() in debug mode when given a +- Issue #7701: Fix crash in ``binascii.b2a_uu()`` in debug mode when given a 1-byte argument. Patch by Victor Stinner. -- Issue #3299: Fix possible crash in the _sre module when given bad - argument values in debug mode. Patch by Victor Stinner. +- Issue #3299: Fix possible crash in the _sre module when given bad argument + values in debug mode. Patch by Victor Stinner. -- Issue #7703: Add support for the new buffer API to functions of the - binascii module. Backported from py3k by Florent Xicluna, with some - additional tests. +- Issue #7703: Add support for the new buffer API to functions of the binascii + module. Backported from py3k by Florent Xicluna, with some additional tests. -- Issue #2846: Add support for gzip.GzipFile reading zero-padded files. - Patch by Brian Curtin. +- Issue #2846: Add support for gzip.GzipFile reading zero-padded files. Patch + by Brian Curtin. -- Issue #5827: Make sure that normpath preserves unicode. Initial patch - by Matt Giuca. +- Issue #5827: Make sure that normpath preserves unicode. Initial patch by + Matt Giuca. - Issue #5372: Drop the reuse of .o files in Distutils' ccompiler (since - Extension extra options may change the output without changing the .c - file). Initial patch by Collin Winter. + Extension extra options may change the output without changing the .c file). + Initial patch by Collin Winter. Extension Modules ----------------- @@ -349,9 +348,9 @@ Build ----- -- Issue #7632: When Py_USING_MEMORY_DEBUGGER is defined, disable the - private memory allocation scheme in dtoa.c and use PyMem_Malloc and - PyMem_Free instead. Also disable caching of powers of 5. +- Issue #7632: When Py_USING_MEMORY_DEBUGGER is defined, disable the private + memory allocation scheme in dtoa.c and use PyMem_Malloc and PyMem_Free + instead. Also disable caching of powers of 5. - Issue #7658: Ensure that the new pythonw executable works on OSX 10.4 @@ -365,24 +364,22 @@ ----------- - iobench (a file I/O benchmark) and ccbench (a concurrency benchmark) were - added to the `Tools/` directory. They were previously living in the + added to the ``Tools`` directory. They were previously living in the sandbox. - Tests ----- -- issue #7728: test_timeout was changed to use test_support.bind_port +- issue #7728: test_timeout was changed to use ``test_support.bind_port()`` instead of a hard coded port. - Documentation ------------- -- Updating `Using Python` documentation to include description of CPython's - -J, -U and -X options. +- Updated "Using Python" documentation to include description of CPython's -J, + -U and -X options. -- Update python manual page (options -B, -O0, -s, environment variables +- Updated Python manual page (options -B, -O0, -s, environment variables PYTHONDONTWRITEBYTECODE, PYTHONNOUSERSITE). @@ -394,140 +391,138 @@ Core and Builtins ----------------- -- The __complex__ method is now looked up on the class of instances to make it - consistent with other special methods. +- The ``__complex__()`` method is now looked up on the class of instances to + make it consistent with other special methods. - Issue #7462: Implement the stringlib fast search algorithm for the `rfind`, `rindex`, `rsplit` and `rpartition` methods. Patch by Florent Xicluna. - Issue #5080: A number of functions and methods previously produced a - DeprecationWarning when passed a float argument where an integer was - expected. These functions and methods now raise TypeError instead. - The majority of the effects of this change are in the extension - modules, but some core functions and methods are affected: notably - the 'chr', 'range' and 'xrange' builtins, and many unicode/str - methods. + DeprecationWarning when passed a float argument where an integer was expected. + These functions and methods now raise TypeError instead. The majority of the + effects of this change are in the extension modules, but some core functions + and methods are affected: notably the 'chr', 'range' and 'xrange' builtins, + and many unicode/str methods. - Issue #7604: Deleting an unset slotted attribute did not raise an AttributeError. -- Issue #7534: Fix handling of IEEE specials (infinities, nans, - negative zero) in ** operator. The behaviour now conforms to that - described in C99 Annex F. +- Issue #7534: Fix handling of IEEE specials (infinities, nans, negative zero) + in ** operator. The behaviour now conforms to that described in C99 Annex F. -- Issue #7579: the msvcrt module now has docstrings for all its functions. +- Issue #7579: The msvcrt module now has docstrings for all its functions. - Issue #7413: Passing '\0' as the separator to datetime.datetime.isoformat() used to drop the time part of the result. -- Issue #1811: improve accuracy and cross-platform consistency for - true division of integers: the result of a/b is now correctly - rounded for ints a and b (at least on IEEE 754 platforms), and in - particular does not depend on the internal representation of a long. +- Issue #1811: Improve accuracy and cross-platform consistency for true division + of integers: the result of a/b is now correctly rounded for ints a and b (at + least on IEEE 754 platforms), and in particular does not depend on the + internal representation of a long. + +- Issue #6108: ``unicode(exception)`` and ``str(exception)`` should return the + same message when only ``__str__()`` (and not ``__unicode__()``) is overridden + in the subclass. -- Issue #6108: unicode(exception) and str(exception) should return the same - message when only __str__ (and not __unicode__) is overridden in the subclass. - -- Issue #6834: replace the implementation for the 'python' and 'pythonw' +- Issue #6834: Replace the implementation for the 'python' and 'pythonw' executables on OSX. - These executables now work properly with the arch(1) command: - ``arch -ppc python`` will start a universal binary version of python - in PPC mode (unlike previous releases). + These executables now work properly with the arch(1) command: ``arch -ppc + python`` will start a universal binary version of python in PPC mode (unlike + previous releases). -- Issue #1680159: unicode coercion during an 'in' operation no longer masks - the underlying error when the coercion fails for the left hand operand. +- Issue #1680159: Unicode coercion during an 'in' operation no longer masks the + underlying error when the coercion fails for the left hand operand. - Issue #7491: Metaclass's __cmp__ method was ignored. -- Issue #7466: segmentation fault when the garbage collector is called - in the middle of populating a tuple. Patch by Florent Xicluna. +- Issue #7466: Segmentation fault when the garbage collector is called in the + middle of populating a tuple. Patch by Florent Xicluna. Library ------- -- Issue #6963: Added "maxtasksperchild" argument to multiprocessing.Pool, - allowing for a maximum number of tasks within the pool to be completed by - the worker before that worker is terminated, and a new one created to - replace it. - -- Issue #7617: Make sure distutils.unixccompiler.UnixCCompiler recognizes - gcc when it has a fully qualified configuration prefix. Initial patch - by Arfrever. +- Issue #6963: Added "maxtasksperchild" argument to ``multiprocessing.Pool``, + allowing for a maximum number of tasks within the pool to be completed by the + worker before that worker is terminated, and a new one created to replace it. + +- Issue #7617: Make sure distutils.unixccompiler.UnixCCompiler recognizes gcc + when it has a fully qualified configuration prefix. Initial patch by + Arfrever. - Issue #7092: Remove py3k warning when importing cPickle. 2to3 handles - renaming of `cPickle` to `pickle`. The warning was annoying since there's - no alternative to cPickle if you care about performance. Patch by Florent + renaming of `cPickle` to `pickle`. The warning was annoying since there's no + alternative to cPickle if you care about performance. Patch by Florent Xicluna. -- Issue #7455: Fix possible crash in cPickle on invalid input. Patch by - Victor Stinner. +- Issue #7455: Fix possible crash in cPickle on invalid input. Patch by Victor + Stinner. -- Issue #7092: Fix the DeprecationWarnings emitted by the standard library - when using the -3 flag. Patch by Florent Xicluna. +- Issue #7092: Fix the DeprecationWarnings emitted by the standard library when + using the -3 flag. Patch by Florent Xicluna. -- Issue #7471: Improve the performance of GzipFile's buffering mechanism, - and make it implement the `io.BufferedIOBase` ABC to allow for further - speedups by wrapping it in an `io.BufferedReader`. Patch by Nir Aides. +- Issue #7471: Improve the performance of GzipFile's buffering mechanism, and + make it implement the ``io.BufferedIOBase`` ABC to allow for further speedups + by wrapping it in an ``io.BufferedReader``. Patch by Nir Aides. -- Issue #3972: httplib.HTTPConnection now accepts an optional source_address +- Issue #3972: ``httplib.HTTPConnection`` now accepts an optional source_address parameter to allow specifying where your connections come from. -- socket.create_connection now accepts an optional source_address parameter. +- ``socket.create_connection()`` now accepts an optional source_address + parameter. -- Issue #5511: now zipfile.ZipFile can be used as a context manager. +- Issue #5511: ``zipfile.ZipFile`` can now be used as a context manager. Initial patch by Brian Curtin. -- Distutils now correctly identifies the build architecture as "x86_64" - when building on OSX 10.6 without "-arch" flags. +- Distutils now correctly identifies the build architecture as "x86_64" when + building on OSX 10.6 without "-arch" flags. -- Issue #7556: Distutils' msvc9compiler now opens the MSVC Manifest - file in text mode. +- Issue #7556: Distutils' msvc9compiler now opens the MSVC Manifest file in text + mode. -- Issue #7552: Removed line feed in the base64 Authorization header in - the Distutils upload command to avoid an error when PyPI reads it. - This occurs on long passwords. Initial patch by JP St. Pierre. +- Issue #7552: Removed line feed in the base64 Authorization header in the + Distutils upload command to avoid an error when PyPI reads it. This occurs on + long passwords. Initial patch by JP St. Pierre. -- Issue #7231: urllib2 cannot handle https with proxy requiring auth. - Patch by Tatsuhiro Tsujikawa. +- Issue #7231: urllib2 cannot handle https with proxy requiring auth. Patch by + Tatsuhiro Tsujikawa. - Issue #7349: Make methods of file objects in the io module accept None as an argument where file-like objects (ie StringIO and BytesIO) accept them to mean the same as passing no argument. -- Issue #7348: StringIO.StringIO.readline(-1) now acts as if it got no argument - like other file objects. +- Issue #7348: ``StringIO.StringIO.readline(-1)`` now acts as if it got no + argument like other file objects. -- Issue #7357: tarfile no longer suppresses fatal extraction errors by - default. +- Issue #7357: tarfile no longer suppresses fatal extraction errors by default. -- Issue #7470: logging: fix bug in Unicode encoding fallback. +- Issue #7470: logging: Fix bug in Unicode encoding fallback. -- Issue #5949: fixed IMAP4_SSL hang when the IMAP server response is - missing proper end-of-line termination. +- Issue #5949: Fixed IMAP4_SSL hang when the IMAP server response is missing + proper end-of-line termination. -- Issue #7457: added a read_pkg_file method to - distutils.dist.DistributionMetadata. +- Issue #7457: Added a read_pkg_file method to + ``distutils.dist.DistributionMetadata``. -- Issue #3745: Undo the 2.7a1 change to have hashlib to reject unicode and - non buffer-api supporting objects as input. That behavior is for 3.x only. +- Issue #3745: Undo the 2.7a1 change to have hashlib to reject unicode and non + buffer API supporting objects as input. That behavior is for 3.x only. C-API ----- -- Issue #7767: New function PyLong_AsLongLongAndOverflow added, - analogous to PyLong_AsLongAndOverflow. +- Issue #7767: New function ``PyLong_AsLongLongAndOverflow()`` added, analogous + to ``PyLong_AsLongAndOverflow()``. -- Issue #5080: The argument parsing functions PyArg_ParseTuple, - PyArg_ParseTupleAndKeywords, PyArg_VaParse, - PyArg_VaParseTupleAndKeywords and PyArg_Parse no longer accept float - arguments for integer format codes (other than 'L'): previously an - attempt to pass a float resulted in a DeprecationWarning; now it - gives a TypeError. For the 'L' format code (which previously had no - warning) there is now a DeprecationWarning. +- Issue #5080: The argument parsing functions ``PyArg_ParseTuple()``, + ``PyArg_ParseTupleAndKeywords()``, ``PyArg_VaParse()``, + ``PyArg_VaParseTupleAndKeywords()`` and ``PyArg_Parse()`` no longer accept + float arguments for integer format codes (other than 'L'): previously an + attempt to pass a float resulted in a DeprecationWarning; now it gives a + TypeError. For the 'L' format code (which previously had no warning) there is + now a DeprecationWarning. -- Issue #7033: function ``PyErr_NewExceptionWithDoc()`` added. +- Issue #7033: Function ``PyErr_NewExceptionWithDoc()`` added. Build ----- @@ -535,33 +530,32 @@ - Issue #6491: Allow --with-dbmliborder to specify that no dbms will be built. - Issue #6943: Use pkg-config to find the libffi headers when the - --with-system-ffi flag is used. + ``--with-system-ffi`` flag is used. -- Issue #7609: Add a --with-system-expat option that causes the system's expat - library to be used for the pyexpat module instead of the one included with - Python. +- Issue #7609: Add a ``--with-system-expat`` option that causes the system's + expat library to be used for the pyexpat module instead of the one included + with Python. - Issue #7589: Only build the nis module when the correct header files are found. - Switch to OpenSSL 0.9.8l and sqlite 3.6.21 on Windows. -- Issue #7541: when using ``python-config`` with a framework install the compiler might - use the wrong library. +- Issue #7541: when using ``python-config`` with a framework install the + compiler might use the wrong library. Tests ----- -- Issue #7376: instead of running a self-test (which was failing) when called +- Issue #7376: Instead of running a self-test (which was failing) when called with no arguments, doctest.py now gives a usage message. -- Issue #7396: fix regrtest -s, which was broken by the -j enhancement. +- Issue #7396: Fix regrtest -s, which was broken by the -j enhancement. - Issue #7498: test_multiprocessing now uses test_support.find_unused_port instead of a hardcoded port number in test_rapid_restart. - What's New in Python 2.7 alpha 1 ================================ @@ -570,97 +564,94 @@ Core and Builtins ----------------- -- Issue #7419: setlocale() could crash the interpreter on Windows when called - with invalid values. +- Issue #7419: ``locale.setlocale()`` could crash the interpreter on Windows + when called with invalid values. -- Issue #3382: 'F' formatting for float and complex now convert the - result to upper case. This only affects 'inf' and 'nan', since 'f' - no longer converts to 'g' for large values. - -- Remove switch from "%f" formatting to "%g" formatting for floats - larger than 1e50 in absolute value. - -- Remove restrictions on precision when formatting floats. E.g., - "%.120g" % 1e-100 used to raise OverflowError, but now gives the - requested 120 significant digits instead. - -- Add Py3k warnings for parameter names in parenthesis. - -- Issue #7362: Give a proper error message for def f((x)=3): pass. - -- Issue #7085: Fix crash when importing some extensions in a thread - on MacOSX 10.6. - -- Issue #7117: repr(x) for a float x returns a result based on the - shortest decimal string that's guaranteed to round back to x under - correct rounding (with round-half-to-even rounding mode). - Previously it gave a string based on rounding x to 17 decimal digits. - repr(x) for a complex number behaves similarly. On platforms where - the correctly-rounded strtod and dtoa code is not supported (see below), - repr is unchanged. - -- Issue #7117: On almost all platforms: float-to-string and - string-to-float conversions within Python are now correctly rounded. - Places these conversions occur include: str for floats and complex - numbers; the float and complex constructors; old-style and new-style - numeric formatting; serialization and deserialization of floats and - complex numbers using marshal, pickle and json; parsing of float and - imaginary literals in Python code; Decimal-to-float conversion. - - The conversions use a Python-adapted version of David Gay's - well-known dtoa.c, providing correctly-rounded strtod and dtoa C - functions. This code is supported on Windows, and on Unix-like - platforms using gcc, icc or suncc as the C compiler. There may be a - small number of platforms on which correct operation of this code - cannot be guaranteed, so the code is not used: notably, this applies - to platforms where the C double format is not IEEE 754 binary64, and - to platforms on x86 hardware where the x87 FPU is set to 64-bit - precision and Python's configure script is unable to determine how - to change the FPU precision. On these platforms conversions use the - platform strtod and dtoa, as before. - -- Issue #7117: Backport round implementation from Python 3.x. round - now uses the correctly-rounded string <-> float conversions - described above (when available), and so produces correctly rounded - results that will display nicely under the float repr. There are - two related small changes: (1) round now accepts any class with an - __index__ method for its second argument (but no longer accepts - floats for the second argument), and (2) an excessively large second - integer argument (e.g., round(1.234, 10**100)) no longer raises an - exception. +- Issue #3382: 'F' formatting for float and complex now convert the result to + upper case. This only affects 'inf' and 'nan', since 'f' no longer converts + to 'g' for large values. + +- Remove switch from "%f" formatting to "%g" formatting for floats larger than + 1e50 in absolute value. + +- Remove restrictions on precision when formatting floats. E.g., "%.120g" % + 1e-100 used to raise OverflowError, but now gives the requested 120 + significant digits instead. + +- Add Py3k warnings for parameter names in parentheses. + +- Issue #7362: Give a proper error message for ``def f((x)=3): pass``. + +- Issue #7085: Fix crash when importing some extensions in a thread on MacOSX + 10.6. + +- Issue #7117: ``repr(x)`` for a float x returns a result based on the shortest + decimal string that's guaranteed to round back to x under correct rounding + (with round-half-to-even rounding mode). Previously it gave a string based on + rounding x to 17 decimal digits. repr(x) for a complex number behaves + similarly. On platforms where the correctly-rounded strtod and dtoa code is + not supported (see below), repr is unchanged. + +- Issue #7117: On almost all platforms: float-to-string and string-to-float + conversions within Python are now correctly rounded. Places these conversions + occur include: str for floats and complex numbers; the float and complex + constructors; old-style and new-style numeric formatting; serialization and + deserialization of floats and complex numbers using marshal, pickle and json; + parsing of float and imaginary literals in Python code; Decimal-to-float + conversion. + + The conversions use a Python-adapted version of David Gay's well-known dtoa.c, + providing correctly-rounded strtod and dtoa C functions. This code is + supported on Windows, and on Unix-like platforms using gcc, icc or suncc as + the C compiler. There may be a small number of platforms on which correct + operation of this code cannot be guaranteed, so the code is not used: notably, + this applies to platforms where the C double format is not IEEE 754 binary64, + and to platforms on x86 hardware where the x87 FPU is set to 64-bit precision + and Python's configure script is unable to determine how to change the FPU + precision. On these platforms conversions use the platform strtod and dtoa, + as before. + +- Issue #7117: Backport round implementation from Python 3.x. ``round()`` now + uses the correctly-rounded string <-> float conversions described above (when + available), and so produces correctly rounded results that will display nicely + under the float repr. There are two related small changes: (1) round now + accepts any class with an ``__index__()`` method for its second argument (but + no longer accepts floats for the second argument), and (2) an excessively + large second integer argument (e.g., ``round(1.234, 10**100)``) no longer + raises an exception. - Issue #1757126: Fix the cyrillic-asian alias for the ptcp154 encoding. -- Fix several issues with compile(). The input can now contain Windows and Mac - newlines and is no longer required to end in a newline. +- Fix several issues with ``compile()``. The input can now contain Windows and + Mac newlines and is no longer required to end in a newline. -- Remove length limitation when constructing a complex number from a - unicode string. +- Remove length limitation when constructing a complex number from a unicode + string. -- Issue #7244: itertools.izip_longest() no longer ignores exceptions - raised during the formation of an output tuple. +- Issue #7244: ``itertools.izip_longest()`` no longer ignores exceptions raised + during the formation of an output tuple. - Issue #1087418: Boost performance of bitwise operations for longs. -- Issue #1722344: threading._shutdown() is now called in Py_Finalize(), which - fixes the problem of some exceptions being thrown at shutdown when the - interpreter is killed. Patch by Adam Olsen. +- Issue #1722344: ``threading._shutdown()`` is now called in ``Py_Finalize()``, + which fixes the problem of some exceptions being thrown at shutdown when the + interpreter is killed. Patch by Adam Olsen. -- Issue #7168: Document PyFloat_AsString and PyFloat_AsReprString, and - note that they are unsafe and deprecated. +- Issue #7168: Document ``PyFloat_AsString()`` and ``PyFloat_AsReprString()``, + and note that they are unsafe and deprecated. -- Issue #7120: logging: Removed import of multiprocessing which is causing - crash in GAE. +- Issue #7120: logging: Remove import of multiprocessing which is causing crash + in GAE. -- Issue #7140: The __dict__ of a module should not be cleared unless the module - is the only object holding a reference to it. +- Issue #7140: The ``__dict__`` of a module should not be cleared unless the + module is the only object holding a reference to it. -- Issue #1754094: Improve the stack depth calculation in the compiler. - There should be no other effect than a small decrease in memory use. - Patch by Christopher Tur Lesniewski-Laas. +- Issue #1754094: Improve the stack depth calculation in the compiler. There + should be no other effect than a small decrease in memory use. Patch by + Christopher Tur Lesniewski-Laas. -- Issue #7084: Fix a (very unlikely) crash when printing a list from one - thread, and mutating it from another one. Patch by Scott Dial. +- Issue #7084: Fix a (very unlikely) crash when printing a list from one thread, + and mutating it from another one. Patch by Scott Dial. - Issue #1571184: The Unicode database contains properties for more characters. The tables for code points representing numeric values, white spaces or line @@ -670,24 +661,23 @@ - Issue #7050: Fix a SystemError when trying to use unpacking and augmented assignment. -- Issue #5329: Fix os.popen* regression from 2.5 with commands as a - sequence running through the shell. Patch by Jean-Paul Calderone - and Jani Hakala. +- Issue #5329: Fix ``os.popen*`` regression from 2.5 with commands as a sequence + running through the shell. Patch by Jean-Paul Calderone and Jani Hakala. -- Issue #7019: Raise ValueError when unmarshalling bad long data, instead - of producing internally inconsistent Python longs. +- Issue #7019: Raise ValueError when unmarshalling bad long data, instead of + producing internally inconsistent Python longs. -- Issue #6990: Fix threading.local subclasses leaving old state around - after a reference cycle GC which could be recycled by new locals. +- Issue #6990: Fix ``threading.local`` subclasses leaving old state around after + a reference cycle GC which could be recycled by new locals. - Issue #6300: unicode.encode, unicode.decode, str.decode, and str.encode now take keyword arguments. -- Issue #6922: Fix an infinite loop when trying to decode an invalid - UTF-32 stream with a non-raising error handler like "replace" or "ignore". +- Issue #6922: Fix an infinite loop when trying to decode an invalid UTF-32 + stream with a non-raising error handler like "replace" or "ignore". -- Issue #6713: Improve performance of base 10 int -> string and - long -> string conversions. +- Issue #6713: Improve performance of base 10 int -> string and long -> string + conversions. - Issue #1590864: Fix potential deadlock when mixing threads and fork(). @@ -696,35 +686,35 @@ - Issue #6846: Fix bug where bytearray.pop() returns negative integers. -- classmethod no longer checks if its argument is callable. +- ``classmethod()`` no longer checks if its argument is callable. -- Issue #6750: A text file opened with io.open() could duplicate its output +- Issue #6750: A text file opened with ``io.open()`` could duplicate its output when writing from multiple threads at the same time. -- Issue #6704: Improve the col_offset in AST for "for" statements with - a target of tuple unpacking. +- Issue #6704: Improve the col_offset in AST for "for" statements with a target + of tuple unpacking. -- Issue #6707: dir() on an uninitialized module caused a crash. +- Issue #6707: ``dir()`` on an uninitialized module caused a crash. -- Issue #6540: Fixed crash for bytearray.translate() with invalid parameters. +- Issue #6540: Fixed crash for ``bytearray.translate()`` with invalid parameters. -- Issue #6573: set.union() stopped processing inputs if an instance of self +- Issue #6573: ``set.union()`` stopped processing inputs if an instance of self occurred in the argument chain. - Issue #1616979: Added the cp720 (Arabic DOS) encoding. -- Issue #6070: On posix platforms import no longer copies the execute bit - from the .py file to the .pyc file if it is set. Patch by Marco N. +- Issue #6070: On posix platforms import no longer copies the execute bit from + the .py file to the .pyc file if it is set. Patch by Marco N. -- Issue #4618: When unicode arguments are passed to print(), the default +- Issue #4618: When unicode arguments are passed to ``print()``, the default separator and end should be unicode also. - Issue #6119: Fixed an incorrect Py3k warning about order comparisons of built-in functions and methods. -- Issue #6347: Include inttypes.h as well as stdint.h in pyport.h. - This fixes a build failure on HP-UX: int32_t and uint32_t are - defined in inttypes.h instead of stdint.h on that platform. +- Issue #6347: Include inttypes.h as well as stdint.h in pyport.h. This fixes a + build failure on HP-UX: int32_t and uint32_t are defined in inttypes.h instead + of stdint.h on that platform. - Issue #4856: Remove checks for win NT. @@ -736,161 +726,157 @@ - Issue #6329: Fixed iteration for memoryview objects (it was being blocked because it wasn't recognized as a sequence). -- Issue #6289: Encoding errors from compile() were being masked. +- Issue #6289: Encoding errors from ``compile()`` were being masked. - When no module is given in a relative import, the module field of the ImportFrom AST node is now None instead of an empty string. - Assignment to None using import statements now raises a SyntaxError. -- Issue #4547: When debugging a very large function, it was not always - possible to update the lineno attribute of the current frame. +- Issue #4547: When debugging a very large function, it was not always possible + to update the lineno attribute of the current frame. - Issue #5330: C functions called with keyword arguments were not reported by - the various profiling modules (profile, cProfile). Patch by Hagen F?rstenau. + the various profiling modules (profile, cProfile). Patch by Hagen F?rstenau. -- Issue #5982: staticmethod and classmethod now expose the wrapped - function with __func__. +- Issue #5982: staticmethod and classmethod now expose the wrapped function with + ``__func__``. - Added support for multiple context managers in the same with-statement. - Deprecated contextlib.nested() which is no longer needed. + Deprecated ``contextlib.nested()`` which is no longer needed. - Issue #6101: A new opcode, SETUP_WITH, has been added to speed up the with statement and correctly lookup the __enter__ and __exit__ special methods. -- Issue #5829: complex("1e500") no longer raises OverflowError. This - makes it consistent with float("1e500") and interpretation of real - and imaginary literals. +- Issue #5829: complex("1e500") no longer raises OverflowError. This makes it + consistent with float("1e500") and interpretation of real and imaginary + literals. - Issue #3527: Removed Py_WIN_WIDE_FILENAMES which is not used any more. -- __instancecheck__ and __subclasscheck__ are now completely ignored on classic - classes and instances. +- ``__instancecheck__()`` and ``__subclasscheck__()`` are now completely ignored + on classic classes and instances. -- Issue #5994: the marshal module now has docstrings. +- Issue #5994: The marshal module now has docstrings. - Issue #5981: Fix three minor inf/nan issues in float.fromhex: - (1) inf and nan strings with trailing whitespace were incorrectly - rejected; (2) parsing of strings representing infinities and nans - was locale aware; and (3) the interpretation of fromhex('-nan') - didn't match that of float('-nan'). - -- Issue #5920: For float.__format__, change the behavior with the - empty presentation type (that is, not one of 'e', 'f', 'g', or 'n') - to be like 'g' but with at least one decimal point and with a - default precision of 12. Previously, the behavior the same but with - a default precision of 6. This more closely matches str(), and - reduces surprises when adding alignment flags to the empty - presentation type. This also affects the new complex.__format__ in - the same way. - -- Issue #5890: in subclasses of 'property' the __doc__ attribute was - shadowed by classtype's, even if it was None. property now - inserts the __doc__ into the subclass instance __dict__. + + (1) inf and nan strings with trailing whitespace were incorrectly rejected; + (2) parsing of strings representing infinities and nans was locale aware; and + (3) the interpretation of fromhex('-nan') didn't match that of float('-nan'). + +- Issue #5920: For ``float.__format__()``, change the behavior with the empty + presentation type (that is, not one of 'e', 'f', 'g', or 'n') to be like 'g' + but with at least one decimal point and with a default precision + of 12. Previously, the behavior the same but with a default precision of 6. + This more closely matches ``str()``, and reduces surprises when adding + alignment flags to the empty presentation type. This also affects the new + complex.__format__ in the same way. + +- Issue #5890: In subclasses of 'property' the __doc__ attribute was shadowed by + classtype's, even if it was None. property now inserts the __doc__ into the + subclass instance __dict__. - Issue #4426: The UTF-7 decoder was too strict and didn't accept some legal - sequences. Patch by Nick Barnes and Victor Stinner. + sequences. Patch by Nick Barnes and Victor Stinner. -- Issue #1588: Add complex.__format__. For example, - format(complex(1, 2./3), '.5') now produces a sensible result. +- Issue #1588: Add complex.__format__. For example, ``format(complex(1, 2./3), + '.5')`` now produces a sensible result. -- Issue #5864: Fix empty format code formatting for floats so that it - never gives more than the requested number of significant digits. +- Issue #5864: Fix empty format code formatting for floats so that it never + gives more than the requested number of significant digits. -- Issue #5793: Rationalize isdigit / isalpha / tolower, etc. Includes - new Py_ISDIGIT / Py_ISALPHA / Py_TOLOWER, etc. in pctypes.h. +- Issue #5793: Rationalize isdigit / isalpha / tolower, etc. Includes new + Py_ISDIGIT / Py_ISALPHA / Py_TOLOWER, etc. in pctypes.h. -- Issue #4971: Fix titlecase for characters that are their own - titlecase, but not their own uppercase. +- Issue #4971: Fix titlecase for characters that are their own titlecase, but + not their own uppercase. - Issue #5835: Deprecate PyOS_ascii_formatd and replace it with _PyOS_double_to_string or PyOS_double_to_string. - Issue #5283: Setting __class__ in __del__ caused a segfault. -- Issue #5816: complex(repr(z)) now recovers z exactly, even when - z involves nans, infs or negative zeros. +- Issue #5816: ``complex(repr(z))`` now recovers z exactly, even when z involves + nans, infs or negative zeros. -- Implement PEP 378, Format Specifier for Thousands Separator, for - floats, ints, and longs. +- Implement PEP 378, Format Specifier for Thousands Separator, for floats, ints, + and longs. -- Issue #5515: 'n' formatting for ints, longs, and floats handles - leading zero formatting poorly. +- Issue #5515: 'n' formatting for ints, longs, and floats handles leading zero + formatting poorly. -- Issue #5772: For float.__format__, don't add a trailing ".0" if - we're using no type code and we have an exponent. +- Issue #5772: For float.__format__, don't add a trailing ".0" if we're using no + type code and we have an exponent. -- Issue #3166: Make long -> float (and int -> float) conversions - correctly rounded. +- Issue #3166: Make long -> float (and int -> float) conversions correctly + rounded. -- Issue #5787: object.__getattribute__(some_type, "__bases__") segfaulted on +- Issue #5787: ``object.__getattribute__(some_type, "__bases__")`` segfaulted on some built-in types. -- Issue #1869: fix a couple of minor round() issues. round(5e15+1) - was giving 5e15+2; round(-0.0) was losing the sign of the zero. +- Issue #1869: Fix a couple of minor round() issues. ``round(5e15+1)`` was + giving 5e15+2; ``round(-0.0)`` was losing the sign of the zero. - Issue #5759: float() didn't call __float__ on str subclasses. -- Issue #5704: the "-3" command-line option now implies "-t". +- Issue #5704: The "-3" command-line option now implies "-t". -- Issue #2170: refactored xml.dom.minidom.normalize, increasing both - its clarity and its speed. +- Issue #2170: Refactored ``xml.dom.minidom.normalize``, increasing both its + clarity and its speed. -- Issue #2396: the memoryview object was backported from Python 3.1. +- Issue #2396: The memoryview object was backported from Python 3.1. - Fix a problem in PyErr_NormalizeException that leads to "undetected errors" when hitting the recursion limit under certain circumstances. - Issue #1665206: Remove the last eager import in _warnings.c and make it lazy. -- Issue #4865: On MacOSX /Library/Python/2.7/site-packages is added to - the end sys.path, for compatibility with the system install of Python. +- Issue #4865: On MacOSX /Library/Python/2.7/site-packages is added to the end + sys.path, for compatibility with the system install of Python. - Issue #4688: Add a heuristic so that tuples and dicts containing only - untrackable objects are not tracked by the garbage collector. This can - reduce the size of collections and therefore the garbage collection overhead - on long-running programs, depending on their particular use of datatypes. - -- Issue #5512: Rewrite PyLong long division algorithm (x_divrem) to - improve its performance. Long divisions and remainder operations - are now between 50% and 150% faster. - -- Issue #4258: Make it possible to use base 2**30 instead of base - 2**15 for the internal representation of integers, for performance - reasons. Base 2**30 is enabled by default on 64-bit machines. Add - --enable-big-digits option to configure, which overrides the - default. Add sys.long_info structseq to provide information about - the internal format. + untrackable objects are not tracked by the garbage collector. This can reduce + the size of collections and therefore the garbage collection overhead on + long-running programs, depending on their particular use of datatypes. + +- Issue #5512: Rewrite PyLong long division algorithm (x_divrem) to improve its + performance. Long divisions and remainder operations are now between 50% and + 150% faster. + +- Issue #4258: Make it possible to use base 2**30 instead of base 2**15 for the + internal representation of integers, for performance reasons. Base 2**30 is + enabled by default on 64-bit machines. Add --enable-big-digits option to + configure, which overrides the default. Add sys.long_info structseq to + provide information about the internal format. - Issue #4034: Fix weird attribute error messages of the traceback object. (As a result traceback.__members__ no longer exists.) -- Issue #4474: PyUnicode_FromWideChar now converts characters outside - the BMP to surrogate pairs, on systems with sizeof(wchar_t) == 4 - and sizeof(Py_UNICODE) == 2. +- Issue #4474: PyUnicode_FromWideChar now converts characters outside the BMP to + surrogate pairs, on systems with sizeof(wchar_t) == 4 and sizeof(Py_UNICODE) + == 2. -- Issue #5237: Allow auto-numbered fields in str.format(). For - example: '{} {}'.format(1, 2) == '1 2'. +- Issue #5237: Allow auto-numbered fields in str.format(). For example: ``'{} + {}'.format(1, 2) == '1 2'``. -- Issue #3652: Make the 'line' argument for warnings.showwarning() a +- Issue #3652: Make the 'line' argument for ``warnings.showwarning()`` a requirement. Means the DeprecationWarning from Python 2.6 can go away. -- Issue #5247: Improve error message when unknown format codes are - used when using str.format() with str, unicode, long, int, and - float arguments. - -- Running Python with the -3 option now also warns about classic division - for ints and longs. - -- Issue #5260: Long integers now consume less memory: average - saving is 2 bytes per long on a 32-bit system and 6 bytes per long - on a 64-bit system. +- Issue #5247: Improve error message when unknown format codes are used when + using ``str.format()`` with str, unicode, long, int, and float arguments. + +- Running Python with the -3 option now also warns about classic division for + ints and longs. + +- Issue #5260: Long integers now consume less memory: average saving is 2 bytes + per long on a 32-bit system and 6 bytes per long on a 64-bit system. - Issue #5186: Reduce hash collisions for objects with no __hash__ method by rotating the object pointer by 4 bits to the right. -- Issue #4575: Fix Py_IS_INFINITY macro to work correctly on x87 FPUs: - it now forces its argument to double before testing for infinity. +- Issue #4575: Fix Py_IS_INFINITY macro to work correctly on x87 FPUs: it now + forces its argument to double before testing for infinity. - Issue #4978: Passing keyword arguments as unicode strings is now allowed. @@ -906,9 +892,9 @@ - Issue #4807: Port the _winreg module to Windows CE. -- Issue #4935: The overflow checking code in the expandtabs() method common - to str, bytes and bytearray could be optimized away by the compiler, letting - the interpreter segfault instead of raising an error. +- Issue #4935: The overflow checking code in the expandtabs() method common to + str, bytes and bytearray could be optimized away by the compiler, letting the + interpreter segfault instead of raising an error. - Issue #3720: Fix a crash when an iterator modifies its class and removes its __next__ method. @@ -925,13 +911,13 @@ - Issue #4850: Change COUNT_ALLOCS variables to Py_ssize_t. -- Issue #1180193: When importing a module from a .pyc (or .pyo) file with - an existing .py counterpart, override the co_filename attributes of all - code objects if the original filename is obsolete (which can happen if the - file has been renamed, moved, or if it is accessed through different paths). - Patch by Ziga Seilnacht and Jean-Paul Calderone. +- Issue #1180193: When importing a module from a .pyc (or .pyo) file with an + existing .py counterpart, override the co_filename attributes of all code + objects if the original filename is obsolete (which can happen if the file has + been renamed, moved, or if it is accessed through different paths). Patch by + Ziga Seilnacht and Jean-Paul Calderone. -- Issue #4075: Use OutputDebugStringW in Py_FatalError. +- Issue #4075: Use ``OutputDebugStringW()`` in Py_FatalError. - Issue #4797: IOError.filename was not set when _fileio.FileIO failed to open file with `str' filename on Windows. @@ -939,8 +925,8 @@ - Issue #3680: Reference cycles created through a dict, set or deque iterator did not get collected. -- Issue #4701: PyObject_Hash now implicitly calls PyType_Ready on types - where the tp_hash and tp_dict slots are both NULL. +- Issue #4701: PyObject_Hash now implicitly calls PyType_Ready on types where + the tp_hash and tp_dict slots are both NULL. - Issue #4764: With io.open, IOError.filename is set when trying to open a directory on POSIX systems. @@ -949,50 +935,49 @@ systems. - Issue #4759: None is now allowed as the first argument of - bytearray.translate(). It was always allowed for bytes.translate(). + ``bytearray.translate()``. It was always allowed for ``bytes.translate()``. - Added test case to ensure attempts to read from a file opened for writing fail. -- Issue #2467: gc.DEBUG_STATS reported invalid elapsed times. Also, always - print elapsed times, not only when some objects are uncollectable / - unreachable. Original patch by Neil Schemenauer. +- Issue #2467: gc.DEBUG_STATS reported invalid elapsed times. Also, always print + elapsed times, not only when some objects are uncollectable/unreachable. + Original patch by Neil Schemenauer. - Issue #3439: Add a bit_length method to int and long. -- Issue #2183: Simplify and optimize bytecode for list comprehensions. - Original patch by Neal Norwitz. +- Issue #2183: Simplify and optimize bytecode for list comprehensions. Original + patch by Neal Norwitz. -- Issue #4597: Fixed exception handling when the __exit__ function of a - context manager returns a value that cannot be converted to a bool. +- Issue #4597: Fixed exception handling when the __exit__ function of a context + manager returns a value that cannot be converted to a bool. -- Issue #4597: Fixed several opcodes that weren't always propagating - exceptions. +- Issue #4597: Fixed several opcodes that weren't always propagating exceptions. -- Issue #4445: Replace "sizeof(PyStringObject)" with - "offsetof(PyStringObject, ob_sval) + 1" when allocating memory for - str instances. On a typical machine this saves 3 bytes of memory - (on average) per string allocation. +- Issue #4445: Replace ``sizeof(PyStringObject)`` with + ``offsetof(PyStringObject, ob_sval) + 1`` when allocating memory for str + instances. On a typical machine this saves 3 bytes of memory (on average) per + string allocation. - Issue #3996: On Windows, the PyOS_CheckStack function would cause the interpreter to abort ("Fatal Python error: Could not reset the stack!") instead of throwing a MemoryError. -- Issue #3689: The list reversed iterator now supports __length_hint__ - instead of __len__. Behavior now matches other reversed iterators. +- Issue #3689: The list reversed iterator now supports __length_hint__ instead + of __len__. Behavior now matches other reversed iterators. - Issue #4367: Python would segfault during compiling when the unicodedata module couldn't be imported and \N escapes were present. -- Issue #4233: Changed semantic of ``_fileio.FileIO``'s ``close()`` - method on file objects with closefd=False. The file descriptor is still - kept open but the file object behaves like a closed file. The ``FileIO`` - object also got a new readonly attribute ``closefd``. +- Issue #4233: Changed semantic of ``_fileio.FileIO``'s ``close()`` method on + file objects with closefd=False. The file descriptor is still kept open but + the file object behaves like a closed file. The ``FileIO`` object also got a + new readonly attribute ``closefd``. - Issue #4348: Some bytearray methods returned that didn't cause any change to the bytearray, returned the same bytearray instead of a copy. -- Issue #4317: Fixed a crash in the imageop.rgb2rgb8() function. +- Issue #4317: Fixed a crash in the ``imageop.rgb2rgb8()`` function. - Issue #4230: If ``__getattr__`` is a descriptor, it now functions correctly. @@ -1001,8 +986,8 @@ - Issue #4225: ``from __future__ import unicode_literals`` didn't work in an exec statement. -- Issue #4176: Fixed a crash when pickling an object which ``__reduce__`` - method does not return iterators for the 4th and 5th items. +- Issue #4176: Fixed a crash when pickling an object which ``__reduce__`` method + does not return iterators for the 4th and 5th items. - Issue #4209: Enabling unicode_literals and the print_function in the same __future__ import didn't work. @@ -1010,17 +995,18 @@ - Using ``nonlocal`` as a variable name will now raise a Py3k SyntaxWarning because it is a reserved word in 3.x. -- On windows, os.chdir given unicode was not working if GetCurrentDirectoryW - returned a path longer than MAX_PATH. (But It's doubtful this code path is - really executed because I cannot move to such directory on win2k) - -- Issue #4069: When set.remove(element) is used with a set element, the element - is temporarily replaced with an equivalent frozenset. But the eventual - KeyError would always report the empty frozenset([]) as the missing key. Now - it correctly refers to the initial element. +- On windows, ``os.chdir()`` given unicode was not working if + GetCurrentDirectoryW returned a path longer than MAX_PATH. (But It's doubtful + this code path is really executed because I cannot move to such directory on + win2k) + +- Issue #4069: When ``set.remove(element)`` is used with a set element, the + element is temporarily replaced with an equivalent frozenset. But the + eventual KeyError would always report the empty ``frozenset()`` as the missing + key. Now it correctly refers to the initial element. -- Issue #4509: Various issues surrounding resize of bytearray objects to - which there are buffer exports. +- Issue #4509: Various issues surrounding resize of bytearray objects to which + there are buffer exports. - Issue #4748: Lambda generators no longer return a value. @@ -1028,8 +1014,8 @@ - The re.sub(), re.subn() and re.split() functions now accept a flags parameter. -- Issue #3845: In PyRun_SimpleFileExFlags avoid invalid memory access with - short file names. +- Issue #3845: In PyRun_SimpleFileExFlags avoid invalid memory access with short + file names. - Issue #1113244: Py_XINCREF, Py_DECREF, Py_XDECREF: Add `do { ... } while (0)' to avoid compiler warnings. @@ -1045,10 +1031,10 @@ - Issue #3739: The unicode-internal encoder now reports the number of characters consumed like any other encoder (instead of the number of bytes). -- Issue #2422: When compiled with the ``--with-valgrind`` option, the - pymalloc allocator will be automatically disabled when running under - Valgrind. This gives improved memory leak detection when running - under Valgrind, while taking advantage of pymalloc at other times. +- Issue #2422: When compiled with the ``--with-valgrind`` option, the pymalloc + allocator will be automatically disabled when running under Valgrind. This + gives improved memory leak detection when running under Valgrind, while taking + advantage of pymalloc at other times. Library ------- @@ -1057,105 +1043,103 @@ - Fix variations of extending deques: d.extend(d) d.extendleft(d) d+=d -- Issue #6986: Fix crash in the JSON C accelerator when called with the - wrong parameter types. Patch by Victor Stinner. +- Issue #6986: Fix crash in the JSON C accelerator when called with the wrong + parameter types. Patch by Victor Stinner. -- logging: Added optional `secure` parameter to SMTPHandler, to enable use of +- logging: Added optional "secure" parameter to SMTPHandler, to enable use of TLS with authentication credentials. -- Issue #1923: Fixed the removal of meaningful spaces when PKG-INFO is - generated in Distutils. Patch by Stephen Emslie. +- Issue #1923: Fixed the removal of meaningful spaces when PKG-INFO is generated + in Distutils. Patch by Stephen Emslie. - Issue #4120: Drop reference to CRT from manifest when building extensions with msvc9compiler. -- Issue #7333: The `posix` module gains an `initgroups()` function providing - access to the initgroups(3) C library call on Unix systems which implement - it. Patch by Jean-Paul Calderone. +- Issue #7333: The ``posix`` module gains an ``initgroups()`` function providing + access to the initgroups(3) C library call on Unix systems which implement it. + Patch by Jean-Paul Calderone. - Issue #7408: Fixed distutils.tests.sdist so it doesn't check for group ownership when the group is not forced, because the group may be different from the user's group and inherit from its container when the test is run. -- Issue #1515: Enable use of deepcopy() with instance methods. Patch by - Robert Collins. +- Issue #1515: Enable use of deepcopy() with instance methods. Patch by Robert + Collins. - Issue #7403: logging: Fixed possible race condition in lock creation. - Issue #6845: Add restart support for binary upload in ftplib. The - `storbinary()` method of FTP and FTP_TLS objects gains an optional `rest` + ``storbinary()`` method of FTP and FTP_TLS objects gains an optional "rest" argument. Patch by Pablo Mouzo. -- Issue #5788: `datetime.timedelta` objects get a new `total_seconds()` - method returning the total number of seconds in the duration. Patch by - Brian Quinlan. +- Issue #5788: ``datetime.timedelta`` objects get a new ``total_seconds()`` + method returning the total number of seconds in the duration. Patch by Brian + Quinlan. - Issue #6615: logging: Used weakrefs in internal handler list. -- Issue #1488943: difflib.Differ() doesn't always add hints for tab characters +- Issue #1488943: ``difflib.Differ`` doesn't always add hints for tab + characters. - Issue #6123: tarfile now opens empty archives correctly and consistently raises ReadError on empty files. -- Issue #7354: distutils.tests.test_msvc9compiler - dragfullwindows can - be 2. +- Issue #7354: distutils.tests.test_msvc9compiler - dragfullwindows can be 2. - Issue #5037: Proxy the __unicode__ special method to __unicode__ instead of __str__. -- Issue #7341: Close the internal file object in the TarFile constructor in - case of an error. +- Issue #7341: Close the internal file object in the TarFile constructor in case + of an error. -- Issue #7293: distutils.test_msvc9compiler is fixed to work on any fresh - Windows box. Help provided by David Bolen. +- Issue #7293: ``distutils.test_msvc9compiler`` is fixed to work on any fresh + Windows box. Help provided by David Bolen. -- Issue #7328: pydoc no longer corrupts sys.path when run with the '-m' switch +- Issue #7328: pydoc no longer corrupts sys.path when run with the '-m' switch. -- Issue #2054: ftplib now provides an FTP_TLS class to do secure FTP using - TLS or SSL. Patch by Giampaolo Rodola'. +- Issue #2054: ftplib now provides an FTP_TLS class to do secure FTP using TLS + or SSL. Patch by Giampaolo Rodola'. -- Issue #4969: The mimetypes module now reads the MIME database from - the registry under Windows. Patch by Gabriel Genellina. +- Issue #4969: The mimetypes module now reads the MIME database from the + registry under Windows. Patch by Gabriel Genellina. -- Issue #6816: runpy now provides a run_path function that allows Python code - to execute file paths that refer to source or compiled Python files as well - as zipfiles, directories and other valid sys.path entries that contain a +- Issue #6816: runpy now provides a run_path function that allows Python code to + execute file paths that refer to source or compiled Python files as well as + zipfiles, directories and other valid sys.path entries that contain a __main__.py file. This allows applications that run other Python scripts to support the same flexibility as the CPython command line itself. -- Issue #7318: multiprocessing now uses a timeout when it fails to establish - a connection with another process, rather than looping endlessly. The - default timeout is 20 seconds, which should be amply sufficient for - local connections. +- Issue #7318: multiprocessing now uses a timeout when it fails to establish a + connection with another process, rather than looping endlessly. The default + timeout is 20 seconds, which should be amply sufficient for local connections. - Issue #7197: Allow unittest.TextTestRunner objects to be pickled and - unpickled. This fixes crashes under Windows when trying to run + unpickled. This fixes crashes under Windows when trying to run test_multiprocessing in verbose mode. -- Issue #7282: Fix a memory leak when an RLock was used in a thread other - than those started through `threading.Thread` (for example, using - `thread.start_new_thread()`. +- Issue #7282: Fix a memory leak when an RLock was used in a thread other than + those started through ``threading.Thread`` (for example, using + ``thread.start_new_thread()``. - Issue #7264: Fix a possible deadlock when deallocating thread-local objects which are part of a reference cycle. -- Issue #7211: Allow 64-bit values for the `ident` and `data` fields of kevent - objects on 64-bit systems. Patch by Michael Broghton. +- Issue #7211: Allow 64-bit values for the ``ident`` and ``data`` fields of + kevent objects on 64-bit systems. Patch by Michael Broghton. -- Issue #6896: mailbox.Maildir now invalidates its internal cache each time +- Issue #6896: ``mailbox.Maildir`` now invalidates its internal cache each time a modification is done through it. This fixes inconsistencies and test failures on systems with slightly bogus mtime behaviour. -- Issue #7246 & Issue #7208: getpass now properly flushes input before - reading from stdin so that existing input does not confuse it and - lead to incorrect entry or an IOError. It also properly flushes it - afterwards to avoid the terminal echoing the input afterwards on - OSes such as Solaris. - -- Issue #7233: Fix a number of two-argument Decimal methods to make - sure that they accept an int or long as the second argument. Also - fix buggy handling of large arguments (those with coefficient longer - than the current precision) in shift and rotate. +- Issue #7246 & Issue #7208: getpass now properly flushes input before reading + from stdin so that existing input does not confuse it and lead to incorrect + entry or an IOError. It also properly flushes it afterwards to avoid the + terminal echoing the input afterwards on OSes such as Solaris. + +- Issue #7233: Fix a number of two-argument Decimal methods to make sure that + they accept an int or long as the second argument. Also fix buggy handling of + large arguments (those with coefficient longer than the current precision) in + shift and rotate. - Issue #4750: Store the basename of the original filename in the gzip FNAME header as required by RFC 1952. @@ -1166,8 +1150,8 @@ - Issue #7218: Fix test_site for win32, the directory comparison was done with an uppercase. -- Issue #7205: Fix a possible deadlock when using a BZ2File object from - several threads at once. +- Issue #7205: Fix a possible deadlock when using a BZ2File object from several + threads at once. - Issue #7071: byte-compilation in Distutils is now done with respect to sys.dont_write_bytecode. @@ -1183,76 +1167,75 @@ - Issue #7099: Decimal.is_normal now returns True for numbers with exponent larger than emax. -- Issue #5833: Fix extra space character in readline completion with the - GNU readline library version 6.0. +- Issue #5833: Fix extra space character in readline completion with the GNU + readline library version 6.0. - Issue #7133: SSL objects now support the new buffer API. -- Issue #7149: urllib fails on OSX in the proxy detection code +- Issue #7149: urllib fails on OSX in the proxy detection code. - Issue #7069: Make inspect.isabstract() return a boolean. -- Add support to the `ihooks` module for relative imports. +- Add support to the ``ihooks`` module for relative imports. -- Issue #6894: Fixed the issue urllib2 doesn't respect "no_proxy" environment +- Issue #6894: Fixed the issue urllib2 doesn't respect "no_proxy" environment. - Issue #7086: Added TCP support to SysLogHandler, and tidied up some anachronisms in the code which were a relic of 1.5.2 compatibility. -- Issue #7082: When falling back to the MIME 'name' parameter, the - correct place to look for it is the Content-Type header. +- Issue #7082: When falling back to the MIME 'name' parameter, the correct place + to look for it is the Content-Type header. -- Issue #7048: Force Decimal.logb to round its result when that result - is too large to fit in the current precision. +- Issue #7048: Force Decimal.logb to round its result when that result is too + large to fit in the current precision. - Issue #6516: Added owner/group support when creating tar archives in Distutils. -- Issue #7031: Add TestCase.assert(Not)IsInstance() methods. +- Issue #7031: Add ``TestCase.assert(Not)IsInstance()`` methods. -- Issue #6790: Make it possible again to pass an `array.array` to - `httplib.HTTPConnection.send`. Patch by Kirk McDonald. +- Issue #6790: Make it possible again to pass an ``array.array`` to + ``httplib.HTTPConnection.send``. Patch by Kirk McDonald. -- Issue #6236, #6348: Fix various failures in the `io` module under AIX - and other platforms, when using a non-gcc compiler. Patch by egreen. +- Issue #6236, #6348: Fix various failures in the `io` module under AIX and + other platforms, when using a non-gcc compiler. Patch by egreen. - Issue #6954: Fixed crash when using DISTUTILS_DEBUG flag in Distutils. - Issue #6851: Fix urllib.urlopen crash on secondairy threads on OSX 10.6 -- Issue #4606: Passing 'None' if ctypes argtype is set to POINTER(...) - does now always result in NULL. +- Issue #4606: Passing 'None' if ctypes argtype is set to POINTER(...) does now + always result in NULL. -- Issue #5042: ctypes Structure sub-subclass does now initialize - correctly with base class positional arguments. +- Issue #5042: ctypes Structure sub-subclass does now initialize correctly with + base class positional arguments. -- Issue #6938: Fix a TypeError in string formatting of a multiprocessing - debug message. +- Issue #6938: Fix a TypeError in string formatting of a multiprocessing debug + message. - Issue #6635: Fix profiler printing usage message. - Issue #6856: Add a filter keyword argument to TarFile.add(). - Issue #6163: Fixed HP-UX runtime library dir options in - distutils.unixcompiler. Initial patch by Sridhar Ratnakumar and - Michael Haubenwallner. + distutils.unixcompiler. Initial patch by Sridhar Ratnakumar and Michael + Haubenwallner. -- Issue #6857: Default format() alignment should be '>' for Decimal - instances. +- Issue #6857: Default format() alignment should be '>' for Decimal instances. -- Issue #6795: int(Decimal('nan')) now raises ValueError instead of - returning NaN or raising InvalidContext. Also, fix infinite recursion - in long(Decimal('nan')). +- Issue #6795: int(Decimal('nan')) now raises ValueError instead of returning + NaN or raising InvalidContext. Also, fix infinite recursion in + long(Decimal('nan')). -- Issue #6850: Fix bug in Decimal._parse_format_specifier for formats - with no type specifier. +- Issue #6850: Fix bug in Decimal._parse_format_specifier for formats with no + type specifier. -- Issue #4937: plat-mac/bundlebuilder revers to non-existing version.plist +- Issue #4937: plat-mac/bundlebuilder refers to non-existing version.plist. -- Issue #6838: Use a list to accumulate the value instead of - repeatedly concatenating strings in httplib's - HTTPResponse._read_chunked providing a significant speed increase - when downloading large files servend with a Transfer-Encoding of 'chunked'. +- Issue #6838: Use a list to accumulate the value instead of repeatedly + concatenating strings in httplib's HTTPResponse._read_chunked providing a + significant speed increase when downloading large files servend with a + Transfer-Encoding of 'chunked'. - Issue #5275: In Cookie's Cookie.load(), properly handle non-string arguments as documented. @@ -1280,8 +1263,8 @@ - Issue #6665: Fix fnmatch to properly match filenames with newlines in them. -- Issue #1135: Add the XView and YView mix-ins to avoid duplicating - the xview* and yview* methods. +- Issue #1135: Add the XView and YView mix-ins to avoid duplicating the xview* + and yview* methods. - Issue #6629: Fix a data corruption issue in the new `io` package, which could occur when writing to a BufferedRandom object (e.g. a file opened in "rb+" or @@ -1292,12 +1275,12 @@ possible to get a spurious 'task_done() called too many times' error. - Issue #1628205: Socket file objects returned by socket.socket.makefile() now - properly handles EINTR within the read, readline, write & flush methods. - The socket.sendall() method now properly handles interrupted system calls. + properly handles EINTR within the read, readline, write & flush methods. The + socket.sendall() method now properly handles interrupted system calls. -- Issue #6595: The Decimal constructor now allows arbitrary Unicode - decimal digits in input, as recommended by the standard. Previously - it was restricted to accepting [0-9]. +- Issue #6595: The Decimal constructor now allows arbitrary Unicode decimal + digits in input, as recommended by the standard. Previously it was restricted + to accepting [0-9]. - Issue #6511: ZipFile now raises BadZipfile (instead of an IOError) when opening an empty or very small file. @@ -1305,23 +1288,23 @@ - Issue #6553: Fixed a crash in cPickle.load(), when given a file-like object containing incomplete data. -- Issue #6545: Removed assert statements in distutils.Extension, so the - behavior is similar when used with -O. +- Issue #6545: Removed assert statements in distutils.Extension, so the behavior + is similar when used with -O. - unittest has been split up into a package. All old names should still work. -- Issue #6431: Make Fraction type return NotImplemented when it doesn't - know how to handle a comparison without loss of precision. Also add - correct handling of infinities and nans for comparisons with float. +- Issue #6431: Make Fraction type return NotImplemented when it doesn't know how + to handle a comparison without loss of precision. Also add correct handling + of infinities and nans for comparisons with float. - Issue #6415: Fixed warnings.warn segfault on bad formatted string. -- Issue #6466: now distutils.cygwinccompiler and distutils.emxccompiler - uses the same refactored function to get gcc/ld/dllwrap versions numbers. - It's `distutils.util.get_compiler_versions`. Added deprecation warnings - for the obsolete get_versions() functions. +- Issue #6466: Now distutils.cygwinccompiler and distutils.emxccompiler uses the + same refactored function to get gcc/ld/dllwrap versions numbers. It's + ``distutils.util.get_compiler_versions()``. Added deprecation warnings for + the obsolete get_versions() functions. -- Issue #6433: fixed issues with multiprocessing.pool.map hanging on empty list +- Issue #6433: Fixed issues with multiprocessing.pool.map hanging on empty list. - Issue #6314: logging: Extra checks on the "level" argument in more places. @@ -1340,26 +1323,26 @@ - Issue #6403: Fixed package path usage in build_ext. -- Issues #5155, 5313, 5331: multiprocessing.Process._bootstrap was +- Issues #5155, #5313, #5331: multiprocessing.Process._bootstrap was unconditionally calling "os.close(sys.stdin.fileno())" resulting in file - descriptor errors + descriptor errors. - Issue #6365: Distutils build_ext inplace mode was copying the compiled extension in a subdirectory if the extension name had dots. - Issue #6344: Fixed a crash of mmap.read() when passed a negative argument. -- Issue #5230: pydoc would report no documentation found if a module generated - a 'not found' import error when loaded; it now reports the import errors. +- Issue #5230: pydoc would report no documentation found if a module generated a + 'not found' import error when loaded; it now reports the import errors. Thanks to Lucas Prado Melo for initial fix and collaboration on the tests. -- Issue #6314: logging.basicConfig() performs extra checks on the "level" +- Issue #6314: ``logging.basicConfig()`` performs extra checks on the "level" argument. -- Issue #6164: Added an AIX specific linker argument in Distutils - unixcompiler. Original patch by Sridhar Ratnakumar. +- Issue #6164: Added an AIX specific linker argument in Distutils unixcompiler. + Original patch by Sridhar Ratnakumar. -- Issue #6274: Fixed possible file descriptors leak in subprocess.py +- Issue #6274: Fixed possible file descriptors leak in subprocess.py. - Issue #6189: Restored compatibility of subprocess.py with Python 2.2. @@ -1368,8 +1351,8 @@ - Issue #6286: Now Distutils upload command is based on urllib2 instead of httplib, allowing the usage of http_proxy. -- Issue #6271: mmap tried to close invalid file handle (-1) when annonymous. - (On Unix) +- Issue #6271: mmap tried to close invalid file handle (-1) for anonymous maps + on Unix. - Issue #6215: All bug fixes and enhancements from the Python 3.1 io library (including the fast C implementation) have been backported to the standard @@ -1382,31 +1365,31 @@ - Issue #6263: Fixed syntax error in distutils.cygwincompiler. -- Issue #5201: distutils.sysconfig.parse_makefile() now understands `$$` - in Makefiles. This prevents compile errors when using syntax like: - `LDFLAGS='-rpath=\$$LIB:/some/other/path'`. Patch by Floris Bruynooghe. +- Issue #5201: distutils.sysconfig.parse_makefile() now understands ``$$`` in + Makefiles. This prevents compile errors when using syntax like: + ``LDFLAGS='-rpath=\$$LIB:/some/other/path'``. Patch by Floris Bruynooghe. - Issue #5767: Removed sgmlop support from xmlrpclib. -- Issue #6131: test_modulefinder leaked when run after test_distutils. - Patch by Hirokazu Yamamoto. +- Issue #6131: test_modulefinder leaked when run after test_distutils. Patch by + Hirokazu Yamamoto. - Issue #6048: Now Distutils uses the tarfile module in archive_util. - Issue #5150: IDLE's format menu now has an option to strip trailing whitespace. -- Issue #6121: pydoc now ignores leading and trailing spaces in the - argument to the 'help' function. +- Issue #6121: pydoc now ignores leading and trailing spaces in the argument to + the 'help' function. - In unittest, using a skipping decorator on a class is now equivalent to skipping every test on the class. The ClassTestSuite class has been removed. -- Issue #6050: Don't fail extracting a directory from a zipfile if - the directory already exists. +- Issue #6050: Don't fail extracting a directory from a zipfile if the directory + already exists. -- Issue #5311: bdist_msi can now build packages that do not depend on a - specific Python version. +- Issue #5311: bdist_msi can now build packages that do not depend on a specific + Python version. - Issue #1309352: fcntl now converts its third arguments to a C `long` rather than an int, which makes some operations possible under 64-bit Linux (e.g. @@ -1415,20 +1398,20 @@ - Issue #1424152: Fix for httplib, urllib2 to support SSL while working through proxy. Original patch by Christopher Li, changes made by Senthil Kumaran. -- Issue #1983: Fix functions taking or returning a process identifier to use - the dedicated C type ``pid_t`` instead of a C ``int``. Some platforms have - a process identifier type wider than the standard C integer type. +- Issue #1983: Fix functions taking or returning a process identifier to use the + dedicated C type ``pid_t`` instead of a C ``int``. Some platforms have a + process identifier type wider than the standard C integer type. - Issue #4066: smtplib.SMTP_SSL._get_socket now correctly returns the socket. Patch by Farhan Ahmad, test by Marcin Bachry. -- Issue #6062: In distutils, fixed the package option of build_ext. Feedback +- Issue #6062: In distutils, fixed the package option of build_ext. Feedback and tests on pywin32 by Tim Golden. -- Issue #6053: Fixed distutils tests on win32. patch by Hirokazu Yamamoto. +- Issue #6053: Fixed distutils tests on win32. Patch by Hirokazu Yamamoto. -- Issue #6046: Fixed the library extension when distutils build_ext is used - inplace. Initial patch by Roumen Petrov. +- Issue #6046: Fixed the library extension when distutils build_ext is used in + place. Initial patch by Roumen Petrov. - Issue #6041: Now distutils `sdist` and `register` commands use `check` as a subcommand. @@ -1436,56 +1419,56 @@ - Issue #2116: Weak references and weak dictionaries now support copy()ing and deepcopy()ing. -- Issue #1655: Make imaplib IPv6-capable. Patch by Derek Morr. +- Issue #1655: Make imaplib IPv6-capable. Patch by Derek Morr. - Issue #5918: Fix a crash in the parser module. -- Issue #1664: Make nntplib IPv6-capable. Patch by Derek Morr. +- Issue #1664: Make nntplib IPv6-capable. Patch by Derek Morr. -- Issue #6022: a test file was created in the current working directory by +- Issue #6022: A test file was created in the current working directory by test_get_outputs in Distutils. - Issue #4050: inspect.findsource/getsource now raise an IOError if the 'source' file is a binary. Patch by Brodie Rao, tests by Daniel Diniz. - Issue #5977: distutils build_ext.get_outputs was not taking into account the - inplace option. Initial patch by kxroberto. + inplace option. Initial patch by kxroberto. -- Issue #5984: distutils.command.build_ext.check_extensions_list checks were broken - for old-style extensions. +- Issue #5984: distutils.command.build_ext.check_extensions_list checks were + broken for old-style extensions. - Issue #5971: StreamHandler.handleError now swallows IOErrors which occur when trying to print a traceback. - Issue #5976: Fixed Distutils test_check_environ. -- Issue #5900: Ensure RUNPATH is added to extension modules with RPATH if GNU - ld is used. Original patch by Floris Bruynooghe. +- Issue #5900: Ensure RUNPATH is added to extension modules with RPATH if GNU ld + is used. Original patch by Floris Bruynooghe. -- Issue #5941: Distutils build_clib command was not working anymore because - of an incomplete costumization of the archiver command. Added ARFLAGS in the - Makefile besides AR and make Distutils use it. Original patch by David +- Issue #5941: Distutils build_clib command was not working anymore because of + an incomplete costumization of the archiver command. Added ARFLAGS in the + Makefile besides AR and make Distutils use it. Original patch by David Cournapeau. -- Issue 5955: aifc's close method did not close the file it wrapped, - now it does. This also means getfp method now returns the real fp. +- Issue 5955: aifc's close method did not close the file it wrapped, now it + does. This also means getfp method now returns the real fp. -- Issue #4875: On win32, ctypes.util.find_library does no longer - return directories. +- Issue #4875: On win32, ctypes.util.find_library does no longer return + directories. - Issue #5142: Add the ability to skip modules while stepping to pdb. - Issue #1309567: Fix linecache behavior of stripping subdirectories when looking for files given by a relative filename. -- Issue #5692: In :class:`zipfile.Zipfile`, fix wrong path calculation when +- Issue #5692: In ``zipfile.Zipfile``, fix wrong path calculation when extracting a file to the root directory. -- Issue #5913: os.listdir() should fail for empty path on windows. +- Issue #5913: ``os.listdir()`` should fail for empty path on windows. -- Issue #5084: unpickling now interns the attribute names of pickled objects, - saving memory and avoiding growth in size of subsequent pickles. Proposal - and original patch by Jake McGuire. +- Issue #5084: Unpickling now interns the attribute names of pickled objects, + saving memory and avoiding growth in size of subsequent pickles. Proposal and + original patch by Jake McGuire. - Issue #3002: ``shutil.copyfile()`` and ``shutil.copytree()`` now raise an error when a named pipe is encountered, rather than blocking infinitely. @@ -1495,16 +1478,15 @@ - Issue #2245: aifc now skips chunk types it doesn't recognize, per spec. -- Issue #5874: distutils.tests.test_config_cmd is not locale-sensitive - anymore. +- Issue #5874: distutils.tests.test_config_cmd is not locale-sensitive anymore. - Issue #4305: ctypes should now build again on mipsel-linux-gnu -- Issue #1734234: Massively speedup ``unicodedata.normalize()`` when the - string is already in normalized form, by performing a quick check beforehand. +- Issue #1734234: Massively speedup ``unicodedata.normalize()`` when the string + is already in normalized form, by performing a quick check beforehand. Original patch by Rauli Ruohonen. -- Issue #5853: calling a function of the mimetypes module from several threads +- Issue #5853: Calling a function of the mimetypes module from several threads at once could hit the recursion limit if the mimetypes database hadn't been initialized before. @@ -1512,80 +1494,80 @@ names which should not be exported. - Issue #5810: Fixed Distutils test_build_scripts so it uses - sysconfig.get_config_vars. + ``sysconfig.get_config_vars()``. - Issue #4951: Fixed failure in test_httpservers. -- Issue #3102: All global symbols that the _ctypes extension defines - are now prefixed with 'Py' or '_ctypes'. +- Issue #3102: All global symbols that the _ctypes extension defines are now + prefixed with 'Py' or '_ctypes'. - Issue #5041: ctypes does now allow pickling wide character. - Issue #5812: For the two-argument form of the Fraction constructor, - Fraction(m, n), m and n are permitted to be arbitrary Rational - instances. + ``Fraction(m, n)``, m and n are permitted to be arbitrary Rational instances. -- Issue #5812: Fraction('1e6') is valid: more generally, any string - that's valid for float() is now valid for Fraction(), with the - exception of strings representing NaNs and infinities. +- Issue #5812: Fraction('1e6') is valid: more generally, any string that's valid + for float() is now valid for Fraction(), with the exception of strings + representing NaNs and infinities. - Issue #5795: Fixed test_distutils failure on Debian ppc. - Issue #5768: Fixed bug in Unicode output logic and test case for same. -- Issue #1161031: fix readwrite select flag handling: POLLPRI now - results in a handle_expt_event call, not handle_read_event, and POLLERR - and POLLNVAL now call handle_close, not handle_expt_event. Also, - dispatcher now has an 'ignore_log_types' attribute for suppressing - log messages, which is set to 'warning' by default. +- Issue #1161031: Fix readwrite select flag handling: POLLPRI now results in a + handle_expt_event call, not handle_read_event, and POLLERR and POLLNVAL now + call handle_close, not handle_expt_event. Also, dispatcher now has an + 'ignore_log_types' attribute for suppressing log messages, which is set to + 'warning' by default. -- Issue #5607: fixed Distutils test_get_platform for Mac OS X fat binaries. +- Issue #5607: Fixed Distutils test_get_platform for Mac OS X fat binaries. -- Issue #5741: don't disallow "%%" (which is an escape for "%") when setting - a value in SafeConfigParser. +- Issue #5741: Don't disallow "%%" (which is an escape for "%") when setting a + value in SafeConfigParser. -- Issue #5732: added a new command in Distutils: check. +- Issue #5732: Added a new command in Distutils: check. - Issue #5731: Distutils bdist_wininst no longer worked on non-Windows - platforms. Initial patch by Paul Moore. + platforms. Initial patch by Paul Moore. -- Issue #2254: Fix CGIHTTPServer information disclosure. Relative paths are - now collapsed within the url properly before looking in cgi_directories. +- Issue #2254: Fix CGIHTTPServer information disclosure. Relative paths are now + collapsed within the url properly before looking in cgi_directories. -- Issue #5095: Added bdist_msi to the list of bdist supported formats. - Initial fix by Steven Bethard. +- Issue #5095: Added bdist_msi to the list of bdist supported formats. Initial + fix by Steven Bethard. -- Issue #1491431: Fixed distutils.filelist.glob_to_re for edge cases. - Initial fix by Wayne Davison. +- Issue #1491431: Fixed distutils.filelist.glob_to_re for edge cases. Initial + fix by Wayne Davison. -- Issue #5693: TestSuite.__iter__ can now be consistently overridden in subclasses. +- Issue #5693: TestSuite.__iter__ can now be consistently overridden in + subclasses. -- Issue #5694: removed spurious test output in Distutils (test_clean). +- Issue #5694: Removed spurious test output in Distutils (test_clean). - Issue #5471: Fix os.path.expanduser() for $HOME set to '/'. -- Issue #1326077: fix the formatting of SyntaxErrors by the traceback module. +- Issue #1326077: Fix the formatting of SyntaxErrors by the traceback module. -- Issue #1726172: fix IndexError in the case of and empty response in ftplib. +- Issue #1726172: Fix IndexError in the case of and empty response in ftplib. -- Issue #2625: added missing iteritems() call to the for loop in +- Issue #2625: Added missing iteritems() call to the for loop in mailbox.MH.get_message(). -- Issue #5585: Add the ability to call an initializer to mulitiprocessing.manager - so that users can install custom handlers/etc. +- Issue #5585: Add the ability to call an initializer to + mulitiprocessing.manager so that users can install custom handlers/etc. -- Issue #3551: Patch multiprocessing to raise a proper exception if the size of the - object when writefile is called causes a ERROR_NO_SYSTEM_RESOURCES. Added docs - to note the limitation +- Issue #3551: Patch multiprocessing to raise a proper exception if the size of + the object when writefile is called causes a ERROR_NO_SYSTEM_RESOURCES. Added + docs to note the limitation. -- unittest.assertNotEqual() now uses the inequality operator (!=) instead - of the equality operator. +- unittest.assertNotEqual() now uses the inequality operator (!=) instead of the + equality operator. - Issue #6001: Test discovery for unittest. Implemented in unittest.TestLoader.discover and from the command line. -- Issue #5679: The methods unittest.TestCase.addCleanup and doCleanups were added. - addCleanup allows you to add cleanup functions that will be called +- Issue #5679: The methods unittest.TestCase.addCleanup and doCleanups were + added. addCleanup allows you to add cleanup functions that will be called unconditionally (after setUp if setUp fails, otherwise after tearDown). This allows for much simpler resource allocation and deallocation during tests. @@ -1601,17 +1583,17 @@ - Issue #5728: unittest.TestResult has new startTestRun and stopTestRun methods; called immediately before and after a test run. -- Issue #5663: better failure messages for unittest asserts. Default assertTrue +- Issue #5663: Better failure messages for unittest asserts. Default assertTrue and assertFalse messages are now useful. TestCase has a longMessage attribute. This defaults to False, but if set to True useful error messages are shown in addition to explicit messages passed to assert methods. -- Issue #3110: Add additional protect around SEM_VALUE_MAX for multiprocessing +- Issue #3110: Add additional protect around SEM_VALUE_MAX for multiprocessing. - In Pdb, prevent the reassignment of __builtin__._ by sys.displayhook on printing out values. -- Issue #4572: added SEEK_* symbolic constants to io module. +- Issue #4572: Added SEEK_* symbolic constants to io module. - Issue #1665206 (partially): Move imports in cgitb to the top of the module instead of performing them in functions. Helps prevent import deadlocking in @@ -1621,32 +1603,32 @@ - Actually make the SimpleXMLRPCServer CGI handler work. -- Issue #2522: locale.format now checks its first argument to ensure it has +- Issue #2522: locale.format() now checks its first argument to ensure it has been passed only one pattern, avoiding mysterious errors where it appeared that it was failing to do localization. -- Issue #5583: Added optional Extensions in Distutils. Initial patch by Georg +- Issue #5583: Added optional extensions in Distutils. Initial patch by Georg Brandl. -- Issue #5619: Multiprocessing children disobey the debug flag and causes - popups on windows buildbots. Patch applied to work around this issue. +- Issue #5619: Multiprocessing children disobey the debug flag and causes popups + on windows buildbots. Patch applied to work around this issue. - Issue #5632: Thread.ident was None for the main thread and threads not created with the threading module. -- Issue #5400: Added patch for multiprocessing on netbsd compilation/support +- Issue #5400: Added patch for multiprocessing on netbsd compilation/support. - Issue #5387: Fixed mmap.move crash by integer overflow. -- Issue #5261: Patch multiprocessing's semaphore.c to support context - manager use: "with multiprocessing.Lock()" works now. +- Issue #5261: Patch multiprocessing's semaphore.c to support context manager + use: "with multiprocessing.Lock()" works now. - Issue #5177: Multiprocessing's SocketListener class now uses - socket.SO_REUSEADDR on all connections so that the user no longer needs - to wait 120 seconds for the socket to expire. + socket.SO_REUSEADDR on all connections so that the user no longer needs to + wait 120 seconds for the socket to expire. -- Adjusted _tkinter to compile without warnings when WITH_THREAD is not - defined (part of issue #5035). +- Adjusted _tkinter to compile without warnings when WITH_THREAD is not defined + (part of issue #5035). - Issue #5561: Removed the sys.version_info shortcuts from platform's python_version() and python_version_tuple() since they produced different @@ -1655,18 +1637,18 @@ - Issue #1034053: unittest now supports skipping tests and expected failures. - The unittest.TestCase.assertRaises() method now returns a context manager when - not given a callable so that code to be tested can be written inline using - a with statement. + not given a callable so that code to be tested can be written inline using a + with statement. -- The unittest.TestCase.assertEqual() now displays the differences in lists, - tuples, dicts and sets on failure. Many new handy type and comparison - specific assert* methods have been added that fail with error messages - actually useful for debugging. Contributed in part by Google. [Issue #2578] - -- Issue #5068: Fixed the tarfile._BZ2Proxy.read() method that would loop - forever on incomplete input. That caused tarfile.open() to hang when used - with mode 'r' or 'r:bz2' and a fileobj argument that contained no data or - partial bzip2 compressed data. +- Issue #2578: The unittest.TestCase.assertEqual() now displays the differences + in lists, tuples, dicts and sets on failure. Many new handy type and + comparison specific assert* methods have been added that fail with error + messages actually useful for debugging. Contributed in part by Google. + +- Issue #5068: Fixed the tarfile._BZ2Proxy.read() method that would loop forever + on incomplete input. That caused tarfile.open() to hang when used with mode + 'r' or 'r:bz2' and a fileobj argument that contained no data or partial bzip2 + compressed data. - Issue #5536: urllib.urlretrieve makes sure to close the file it's writing to even if an exception occurs. @@ -1674,38 +1656,38 @@ - Issue #5381: Added object_pairs_hook to the json module. This allows OrderedDicts to be built by the decoder. -- Issue #2110: Add support for thousands separator and 'n' type - specifier to Decimal.__format__ +- Issue #2110: Add support for thousands separator and 'n' type specifier to + ``Decimal.__format__()``. -- Fix Decimal.__format__ bug that swapped the meanings of the '<' and - '>' alignment characters. +- Fix Decimal.__format__ bug that swapped the meanings of the '<' and '>' + alignment characters. -- Issue #1222: locale.format() bug when the thousands separator is a space +- Issue #1222: ``locale.format()`` bug when the thousands separator is a space character. -- Issue #5472: Fixed distutils.test_util tear down. Original patch by - Tim Golden. +- Issue #5472: Fixed distutils.test_util tear down. Original patch by Tim + Golden. -- collections.deque() objects now have a read-only attribute called maxlen. +- collections.deque objects now have a read-only attribute called maxlen. - Issue #2638: Show a window constructed with tkSimpleDialog.Dialog only after - it is has been populated and properly configured in order to prevent - window flashing. + it is has been populated and properly configured in order to prevent window + flashing. -- Issue #4792: Prevent a segfault in _tkinter by using the - guaranteed to be safe interp argument given to the PythonCmd in place of - the Tcl interpreter taken from a PythonCmd_ClientData. +- Issue #4792: Prevent a segfault in _tkinter by using the guaranteed to be safe + interp argument given to the PythonCmd in place of the Tcl interpreter taken + from a PythonCmd_ClientData. - Issue #5193: Guarantee that Tkinter.Text.search returns a string. -- Issue #5394: removed > 2.3 syntax from distutils.msvc9compiler. +- Issue #5394: Removed > 2.3 syntax from distutils.msvc9compiler. Original patch by Akira Kitada. - Issue #5385: Fixed mmap crash after resize failure on windows. - Issue #5179: Fixed subprocess handle leak on failure on windows. -- PEP 372: Added collections.OrderedDict(). +- PEP 372: Added collections.OrderedDict(). - The _asdict() for method for namedtuples now returns an OrderedDict(). @@ -1717,8 +1699,8 @@ - Issue #5401: Fixed a performance problem in mimetypes when ``from mimetypes import guess_extension`` was used. -- Issue #1733986: Fixed mmap crash in accessing elements of second map object - with same tagname but larger size than first map. (Windows) +- Issue #1733986: Fixed mmap crash on Windows in accessing elements of second + map object with same tagname but larger size than first map. - Issue #5386: mmap.write_byte didn't check map size, so it could cause buffer overrun. @@ -1726,37 +1708,37 @@ - Issue #1533164: Installed but not listed *.pyo was breaking Distutils bdist_rpm command. -- Issue #5378: added --quiet option to Distutils bdist_rpm command. +- Issue #5378: Added --quiet option to Distutils bdist_rpm command. -- Issue #5052: make Distutils compatible with 2.3 again. +- Issue #5052: Make Distutils compatible with 2.3 again. - Deprecated methods of symtable.Symbol have been removed: is_keywordarg(), is_vararg(), and is_in_tuple(). -- Issue #5316: Fixed buildbot failures introduced by multiple inheritance - in Distutils tests. +- Issue #5316: Fixed buildbot failures introduced by multiple inheritance in + Distutils tests. - Issue #5287: Add exception handling around findCaller() call to help out IronPython. -- Issue #5282: Fixed mmap resize on 32bit windows and unix. When offset > 0, - The file was resized to wrong size. +- Issue #5282: Fixed mmap resize on 32bit Windows and Unix. When ``offset > + 0``, the file was resized to wrong size. - Issue #5292: Fixed mmap crash on its boundary access m[len(m)]. -- Issue #2279: distutils.sdist.add_defaults now add files - from the package_data and the data_files metadata. +- Issue #2279: distutils.sdist.add_defaults now add files from the package_data + and the data_files metadata. -- Issue #5257: refactored all tests in distutils, so they use +- Issue #5257: Refactored all tests in distutils, so they use support.TempdirManager, to avoid writing in the tests directory. - Issue #4524: distutils build_script command failed with --with-suffix=3. Initial patch by Amaury Forgeot d'Arc. -- Issue #2461: added tests for distutils.util +- Issue #2461: Added tests for distutils.util. -- Issue #1008086: Fixed socket.inet_aton() to always return 4 bytes even on - LP64 platforms (most 64-bit Linux, bsd, unix systems). +- Issue #1008086: Fixed socket.inet_aton() to always return 4 bytes even on LP64 + platforms (most 64-bit Linux, bsd, unix systems). - Issue #5203: Fixed ctypes segfaults when passing a unicode string to a function without argtypes (only occurs if HAVE_USABLE_WCHAR_T is false). @@ -1765,39 +1747,38 @@ under NT and OS2. Patch by Philip Jenvey. - Issue #5128: Make compileall properly inspect bytecode to determine if needs - to be recreated. This avoids a timing hole thanks to the old reliance on the + to be recreated. This avoids a timing hole thanks to the old reliance on the ctime of the files involved. - Issue #5122: Synchronize tk load failure check to prevent a potential deadlock. -- Issue #1818: collections.namedtuple() now supports a keyword argument - 'rename' which lets invalid fieldnames be automatically converted to - positional names in the form, _1, _2, ... +- Issue #1818: collections.namedtuple() now supports a keyword argument 'rename' + which lets invalid fieldnames be automatically converted to positional names + in the form, _1, _2, ... - Issue #4890: Handle empty text search pattern in Tkinter.Text.search. -- Issue #5170: Fixed Unicode output bug in logging and added test case. - This is a regression which did not occur in 2.5. +- Issue #5170: Fixed Unicode output bug in logging and added test case. This is + a regression which did not occur in 2.5. -- Issue #4512 (part 2): Promote ``ZipImporter._get_filename()`` to be a - public documented method ``ZipImporter.get_filename()``. +- Issue #4512 (part 2): Promote ``ZipImporter._get_filename()`` to be a public + documented method ``ZipImporter.get_filename()``. -- Issue #4195: The ``runpy`` module (and the ``-m`` switch) now support - the execution of packages by looking for and executing a ``__main__`` - submodule when a package name is supplied. Initial patch by Andi - Vajda. - -- Issue #1731706: Call Tcl_ConditionFinalize for Tcl_Conditions that will - not be used again (this requires Tcl/Tk 8.3.1), also fix a memory leak in - Tkapp_Call when calling from a thread different than the one that created - the Tcl interpreter. Patch by Robert Hancock. +- Issue #4195: The ``runpy`` module (and the ``-m`` switch) now support the + execution of packages by looking for and executing a ``__main__`` submodule + when a package name is supplied. Initial patch by Andi Vajda. + +- Issue #1731706: Call Tcl_ConditionFinalize for Tcl_Conditions that will not be + used again (this requires Tcl/Tk 8.3.1), also fix a memory leak in Tkapp_Call + when calling from a thread different than the one that created the Tcl + interpreter. Patch by Robert Hancock. - Issue #1520877: Now distutils.sysconfig reads $AR from the environment/Makefile. Patch by Douglas Greiman. -- Issue #4285: Change sys.version_info to be a named tuple. Patch by - Ross Light. +- Issue #4285: Change sys.version_info to be a named tuple. Patch by Ross + Light. - Issue #1276768: The verbose option was not used in the code of distutils.file_util and distutils.dir_util. @@ -1807,53 +1788,50 @@ - Issue #1581476: Always use the Tcl global namespace when calling into Tcl. -- Issue #2047: shutil.move() could believe that its destination path was - inside its source path if it began with the same letters (e.g. "src" vs. - "src.new"). +- Issue #2047: shutil.move() could believe that its destination path was inside + its source path if it began with the same letters (e.g. "src" vs. "src.new"). -- Issue #4920: Fixed .next() vs .__next__() issues in the ABCs for - Iterator and MutableSet. +- Issue #4920: Fixed .next() vs .__next__() issues in the ABCs for Iterator and + MutableSet. - Added the ttk module. See issue #2983: Ttk support for Tkinter. -- Issue #5021: doctest.testfile() did not create __name__ and +- Issue #5021: doctest.testfile() did not create __name__ and collections.namedtuple() relied on __name__ being defined. -- Backport importlib from Python 3.1. Only the import_module() function has - been backported to help facilitate transitions from 2.7 to 3.1. +- Backport importlib from Python 3.1. Only the import_module() function has been + backported to help facilitate transitions from 2.7 to 3.1. -- Issue #1885: distutils. When running sdist with --formats=tar,gztar - the tar file was overriden by the gztar one. +- Issue #1885: distutils: When running sdist with --formats=tar,gztar the tar + file was overriden by the gztar one. - Issue #4863: distutils.mwerkscompiler has been removed. -- Added a new itertools functions: combinations_with_replacement() - and compress(). +- Added new itertools functions: combinations_with_replacement() and compress(). -- Issue #5032: added a step argument to itertools.count() and - allowed non-integer arguments. +- Issue #5032: Added a step argument to itertools.count() and allowed + non-integer arguments. -- Fix and properly document the multiprocessing module's logging - support, expose the internal levels and provide proper usage - examples. +- Fix and properly document the multiprocessing module's logging support, expose + the internal levels and provide proper usage examples. -- Issue #1672332: fix unpickling of subnormal floats, which was +- Issue #1672332: Fix unpickling of subnormal floats, which was producing a ValueError on some platforms. -- Issue #3881: Help Tcl to load even when started through the - unreadable local symlink to "Program Files" on Vista. +- Issue #3881: Help Tcl to load even when started through the unreadable local + symlink to "Program Files" on Vista. -- Issue #4710: Extract directories properly in the zipfile module; - allow adding directories to a zipfile. +- Issue #4710: Extract directories properly in the zipfile module; allow adding + directories to a zipfile. - Issue #3807: _multiprocessing build fails when configure is passed - --without-threads argument. When this occurs, _multiprocessing will - be disabled, and not compiled. + --without-threads argument. When this occurs, _multiprocessing will be + disabled, and not compiled. -- Issue #5008: When a file is opened in append mode with the new IO library, - do an explicit seek to the end of file (so that e.g. tell() returns the - file size rather than 0). This is consistent with the behaviour of the - traditional 2.x file object. +- Issue #5008: When a file is opened in append mode with the new IO library, do + an explicit seek to the end of file (so that e.g. tell() returns the file size + rather than 0). This is consistent with the behaviour of the traditional 2.x + file object. - Issue #5013: Fixed a bug in FileHandler which occurred when the delay parameter was set. @@ -1863,8 +1841,8 @@ numbers hierarchy now has its own __slots__ declarations. - Issue #3321: _multiprocessing.Connection() doesn't check handle; added checks - for *nix machines for negative handles and large int handles. Without this check - it is possible to segfault the interpreter. + for *nix machines for negative handles and large int handles. Without this + check it is possible to segfault the interpreter. - Issue #4449: AssertionError in mp_benchmarks.py, caused by an underlying issue in sharedctypes.py. @@ -1872,20 +1850,19 @@ - Issue #1225107: inspect.isclass() returned True for instances with a custom __getattr__. -- Issue #3997: zipfiles generated with more than 65536 files could not be - opened with other applications. +- Issue #3997: Zipfiles generated with more than 65536 files could not be opened + with other applications. -- Issue #1162154: inspect.getmembers() now skips attributes that raise +- Issue #1162154: ``inspect.getmembers()`` now skips attributes that raise AttributeError, e.g. a __slots__ attribute which has not been set. -- Issue #1696199: Add collections.Counter() for rapid and convenient - counting. +- Issue #1696199: Add collections.Counter() for rapid and convenient counting. - Issue #3860: GzipFile and BZ2File now support the context manager protocol. - Issue #4272: Add an optional argument to the GzipFile constructor to override - the timestamp in the gzip stream. The default value remains the current time. - The information can be used by e.g. gunzip when decompressing. Patch by + the timestamp in the gzip stream. The default value remains the current time. + The information can be used by e.g. gunzip when decompressing. Patch by Jacques Frechet. - Restore Python 2.3 compatibility for decimal.py. @@ -1894,39 +1871,39 @@ Windows. Inital solution by Guy Dalberto. - The _tkinter module functions "createfilehandler", "deletefilehandler", - "createtimerhandler", "mainloop", "dooneevent" and "quit" have been - deprecated for removal in 3.x + "createtimerhandler", "mainloop", "dooneevent" and "quit" have been deprecated + for removal in 3.x -- Issue #4796: Added Decimal.from_float() and Context.create_decimal_from_float() - to the decimal module. +- Issue #4796: Added Decimal.from_float() and + Context.create_decimal_from_float() to the decimal module. -- Issue #4812: add missing underscore prefix to some internal-use-only - constants in the decimal module. (Dec_0 becomes _Dec_0, etc.) +- Issue #4812: Add missing underscore prefix to some internal-use-only constants + in the decimal module. (Dec_0 becomes _Dec_0, etc.) - Issue #4795: inspect.isgeneratorfunction() returns False instead of None when the function is not a generator. -- Issue #4702: Throwing a DistutilsPlatformError instead of IOError in case - no MSVC compiler is found under Windows. Original patch by Philip Jenvey. +- Issue #4702: Throwing a DistutilsPlatformError instead of IOError in case no + MSVC compiler is found under Windows. Original patch by Philip Jenvey. -- Issue #4646: distutils was choking on empty options arg in the setup - function. Original patch by Thomas Heller. +- Issue #4646: distutils was choking on empty options arg in the setup function. + Original patch by Thomas Heller. -- Fractions.from_float() no longer loses precision for integers too big to - cast as floats. +- Fractions.from_float() no longer loses precision for integers too big to cast + as floats. -- Issue #4790: The nsmallest() and nlargest() functions in the heapq module - did unnecessary work in the common case where no key function was specified. +- Issue #4790: The nsmallest() and nlargest() functions in the heapq module did + unnecessary work in the common case where no key function was specified. - Issue #3767: Convert Tk object to string in tkColorChooser. - Issue #3248: Allow placing ScrolledText in a PanedWindow. -- Issue #4444: Allow assertRaises() to be used as a context handler, so that - the code under test can be written inline if more practical. +- Issue #4444: Allow assertRaises() to be used as a context handler, so that the + code under test can be written inline if more practical. -- Issue #4739: Add pydoc help topics for symbols, so that e.g. help('@') - works as expected in the interactive environment. +- Issue #4739: Add pydoc help topics for symbols, so that e.g. help('@') works + as expected in the interactive environment. - Issue #4756: zipfile.is_zipfile() now supports file-like objects. Patch by Gabriel Genellina. @@ -1935,71 +1912,67 @@ - Issue #4736: io.BufferedRWPair's closed property now functions properly. -- Issue #3954: Fix a potential SystemError in _hotshot.logreader error - handling. +- Issue #3954: Fix a potential SystemError in _hotshot.logreader error handling. -- Issue #4574: fix a crash in io.IncrementalNewlineDecoder when a carriage - return encodes to more than one byte in the source encoding (e.g. UTF-16) - and gets split on a chunk boundary. +- Issue #4574: Fix a crash in io.IncrementalNewlineDecoder when a carriage + return encodes to more than one byte in the source encoding (e.g. UTF-16) and + gets split on a chunk boundary. -- Issue #4223: inspect.getsource() will now correctly display source code - for packages loaded via zipimport (or any other conformant PEP 302 +- Issue #4223: inspect.getsource() will now correctly display source code for + packages loaded via zipimport (or any other conformant PEP 302 loader). Original patch by Alexander Belopolsky. -- Issue #4201: pdb can now access and display source code loaded via - zipimport (or any other conformant PEP 302 loader). Original patch by - Alexander Belopolsky. - -- Issue #4197: doctests in modules loaded via zipimport (or any other PEP - 302 conformant loader) will now work correctly in most cases (they - are still subject to the constraints that exist for all code running - from inside a module loaded via a PEP 302 loader and attempting to - perform IO operations based on __file__). Original patch by - Alexander Belopolsky. - -- Issues #4082 and #4512: Add runpy support to zipimport in a manner that - allows backporting to maintenance branches. Original patch by - Alexander Belopolsky. +- Issue #4201: pdb can now access and display source code loaded via zipimport + (or any other conformant PEP 302 loader). Original patch by Alexander + Belopolsky. + +- Issue #4197: Doctests in modules loaded via zipimport (or any other PEP 302 + conformant loader) will now work correctly in most cases (they are still + subject to the constraints that exist for all code running from inside a + module loaded via a PEP 302 loader and attempting to perform IO operations + based on __file__). Original patch by Alexander Belopolsky. + +- Issues #4082 and #4512: Add runpy support to zipimport in a manner that allows + backporting to maintenance branches. Original patch by Alexander Belopolsky. - Issue #4163: Use unicode-friendly word splitting in the textwrap functions when given an unicode string. - Issue #4616: TarFile.utime(): Restore directory times on Windows. -- Issue #4084: Fix max, min, max_mag and min_mag Decimal methods to - give correct results in the case where one argument is a quiet NaN - and the other is a finite number that requires rounding. +- Issue #4084: Fix max, min, max_mag and min_mag Decimal methods to give correct + results in the case where one argument is a quiet NaN and the other is a + finite number that requires rounding. -- Issue #1030250: Distutils created directories even when run with the - --dry-run option. +- Issue #1030250: Distutils created directories even when run with the --dry-run + option. -- Issue #4483: _dbm module now builds on systems with gdbm & gdbm_compat - libs. +- Issue #4483: _dbm module now builds on systems with gdbm & gdbm_compat libs. -- Issue #4529: fix the parser module's validation of try-except-finally +- Issue #4529: Fix the parser module's validation of try-except-finally statements. - Issue #4458: getopt.gnu_getopt() now recognizes a single "-" as an argument, not a malformed option. -- Added the subprocess.check_output() convenience function to get output - from a subprocess on success or raise an exception on error. +- Added the subprocess.check_output() convenience function to get output from a + subprocess on success or raise an exception on error. - Issue #1055234: cgi.parse_header(): Fixed parsing of header parameters to support unusual filenames (such as those containing semi-colons) in Content-Disposition headers. - Issue #4384: Added logging integration with warnings module using - captureWarnings(). This change includes a NullHandler which does nothing; - it will be of use to library developers who want to avoid the "No handlers - could be found for logger XXX" message which can appear if the library user - doesn't configure logging. + captureWarnings(). This change includes a NullHandler which does nothing; it + will be of use to library developers who want to avoid the "No handlers could + be found for logger XXX" message which can appear if the library user doesn't + configure logging. - Issue #3741: DISTUTILS_USE_SDK set causes msvc9compiler.py to raise an exception. -- Issue #4363: The uuid.uuid1() and uuid.uuid4() functions now work even if - the ctypes module is not present. +- Issue #4363: The uuid.uuid1() and uuid.uuid4() functions now work even if the + ctypes module is not present. - FileIO's mode attribute now always includes ``"b"``. @@ -2035,28 +2008,28 @@ - Issue #16278952: plat-mac/videoreader.py now correctly imports MediaDescr -- Issue #1737832 : plat-mac/EasyDialog.py no longer uses the broken aepack +- Issue #1737832: plat-mac/EasyDialog.py no longer uses the broken aepack module. -- Issue #1149804: macostools.mkdirs now even works when another process - creates one of the needed subdirectories. +- Issue #1149804: macostools.mkdirs now even works when another process creates + one of the needed subdirectories. -- Issue #900506: added --no-zipimport flag to the bundlebuilder script +- Issue #900506: added --no-zipimport flag to the bundlebuilder script. -- Issue #841800: bundlebuilder now works with 'python -O' +- Issue #841800: bundlebuilder now works with 'python -O'. - Issue #4861: ctypes.util.find_library(): Robustify. Fix library detection on - biarch systems. Try to rely on ldconfig only, without using objdump and gcc. + biarch systems. Try to rely on ldconfig only, without using objdump and gcc. - Issue #5104: The socket module now raises OverflowError when 16-bit port and - protocol numbers are supplied outside the allowed 0-65536 range on bind() - and getservbyport(). + protocol numbers are supplied outside the allowed 0-65536 range on bind() and + getservbyport(). - Issue #999042: The Python compiler now handles explict global statements correctly (should be assigned using STORE_GLOBAL opcode). -- Issue #2703: SimpleXMLRPCDispatcher.__init__: Provide default values for - new arguments introduced in 2.5. +- Issue #2703: SimpleXMLRPCDispatcher.__init__: Provide default values for new + arguments introduced in 2.5. - Issue #5828 (Invalid behavior of unicode.lower): Fixed bogus logic in makeunicodedata.py and regenerated the Unicode database (This fixes @@ -2067,42 +2040,40 @@ Tools/Demos ----------- -- Ttk demos added in Demo/tkinter/ttk/ +- Ttk demos added in Demo/tkinter/ttk/. -- Issue #4677: add two list comprehension tests to pybench. +- Issue #4677: Add two list comprehension tests to pybench. Build ----- -- Issue #6603: Change READ_TIMESTAMP macro in ceval.c so that it - compiles correctly under gcc on x86-64. This fixes a reported - problem with the --with-tsc build on x86-64. - -- Add 2 new options to ``--with-universal-archs`` on MacOSX: - ``intel`` builds a distribution with ``i386`` and ``x86_64`` architectures, - while ``3-way`` builds a distribution with the ``ppc``, ``i386`` - and ``x86_64`` architectures. +- Issue #6603: Change READ_TIMESTAMP macro in ceval.c so that it compiles + correctly under gcc on x86-64. This fixes a reported problem with the + --with-tsc build on x86-64. + +- Add 2 new options to ``--with-universal-archs`` on MacOSX: ``intel`` builds a + distribution with ``i386`` and ``x86_64`` architectures, while ``3-way`` + builds a distribution with the ``ppc``, ``i386`` and ``x86_64`` architectures. -- Issue #6802: Fix build issues on MacOSX 10.6 +- Issue #6802: Fix build issues on MacOSX 10.6. - Issue #6244: Allow detect_tkinter to look for Tcl/Tk 8.6. -- Issue 5390: Add uninstall icon independent of whether file - extensions are installed. +- Issue 5390: Add uninstall icon independent of whether file extensions are + installed. -- Issue 5809: Specifying both --enable-framework and --enable-shared is - an error. Configure now explicity tells you about this. +- Issue 5809: Specifying both --enable-framework and --enable-shared is an + error. Configure now explicity tells you about this. -- Issue #3585: Add pkg-config support. It creates a python-2.7.pc file - and a python.pc symlink in the $(LIBDIR)/pkgconfig directory. Patch by - Clinton Roy. +- Issue #3585: Add pkg-config support. It creates a python-2.7.pc file and a + python.pc symlink in the $(LIBDIR)/pkgconfig directory. Patch by Clinton Roy. - Issue #6094: Build correctly with Subversion 1.7. - Issue #5847: Remove -n switch on "Edit with IDLE" menu item. -- Issue #5726: Make Modules/ld_so_aix return the actual exit code of the - linker, rather than always exit successfully. Patch by Floris Bruynooghe. +- Issue #5726: Make Modules/ld_so_aix return the actual exit code of the linker, + rather than always exit successfully. Patch by Floris Bruynooghe. - Issue #4587: Add configure option --with-dbmliborder=db1:db2:... to specify the order that backends for the dbm extension are checked. @@ -2115,7 +2086,7 @@ - Issue #4895: Use _strdup on Windows CE. -- Issue #4472: "configure --enable-shared" now works on OSX +- Issue #4472: ``configure --enable-shared`` now works on OSX. - Issues #4728 and #4060: WORDS_BIGEDIAN is now correct in Universal builds. @@ -2131,36 +2102,35 @@ - Issue #4018: Disable "for me" installations on Vista. -- Issue #3758: Add ``patchcheck`` build target to .PHONY. +- Issue #3758: Add ``patchcheck`` build target to ``.PHONY``. - Issue #4204: Fixed module build errors on FreeBSD 4. Documentation ------------- -- Issue #6556: Fixed the Distutils configuration files location explanation - for Windows. +- Issue #6556: Fixed the Distutils configuration files location explanation for + Windows. -- Issue #6801 : symmetric_difference_update also accepts |. - Thanks to Carl Chenet. +- Issue #6801: symmetric_difference_update also accepts ``|``. Thanks to Carl + Chenet. C-API ----- - Issue #7528: Add PyLong_AsLongAndOverflow (backported from py3k). -- Issue #7228: Add '%lld' and '%llu' support to PyString_FromFormat(V) - and PyErr_Format, on machines with HAVE_LONG_LONG defined. +- Issue #7228: Add '%lld' and '%llu' support to PyString_FromFormat(V) and + PyErr_Format, on machines with HAVE_LONG_LONG defined. -- Add new C-API function PyOS_string_to_double, and deprecated - PyOS_ascii_atof and PyOS_ascii_strtod. +- Add new C-API function PyOS_string_to_double, and deprecated PyOS_ascii_atof + and PyOS_ascii_strtod. -- Removed _PyOS_double_to_string. Use PyOS_double_to_string - instead. This is in preparation for (but not strictly related to) - issue #7117, short float repr. +- Removed _PyOS_double_to_string. Use PyOS_double_to_string instead. This is in + preparation for (but not strictly related to) issue #7117, short float repr. -- Issue #6624: PyArg_ParseTuple with "s" format when parsing argument with - NULL: Bogus TypeError detail string. +- Issue #6624: PyArg_ParseTuple with "s" format when parsing argument with NULL: + Bogus TypeError detail string. - Issue #5954: Add a PyFrame_GetLineNumber() function to replace most uses of PyCode_Addr2Line(). @@ -2173,18 +2143,18 @@ - Some PyBytes_* aliases have been removed because they don't exist in 3.x. -- Issue #5175: PyLong_AsUnsignedLongLong now raises OverflowError - for negative arguments. Previously, it raised TypeError. +- Issue #5175: PyLong_AsUnsignedLongLong now raises OverflowError for negative + arguments. Previously, it raised TypeError. - Issue #4720: The format for PyArg_ParseTupleAndKeywords can begin with '|'. -- Issue #3632: from the gdb debugger, the 'pyo' macro can now be called when - the GIL is released, or owned by another thread. +- Issue #3632: From the gdb debugger, the 'pyo' macro can now be called when the + GIL is released, or owned by another thread. - Issue #4122: On Windows, fix a compilation error when using the Py_UNICODE_ISSPACE macro in an extension module. -- Issue #4293: Py_AddPendingCall is now thread safe and can be used for +- Issue #4293: Py_AddPendingCall() is now thread safe and can be used for asynchronous notifications to python from any thread. Documentation added. Extension Modules @@ -2194,18 +2164,16 @@ - Issue #7078: Set struct.__doc__ from _struct.__doc__. -- Issue #3366: Add erf, erfc, expm1, gamma, lgamma functions to math - module. +- Issue #3366: Add erf, erfc, expm1, gamma, lgamma functions to math module. - Issue #6823: Allow time.strftime() to accept a tuple with a isdst field - outside of the range of [-1, 1] by normalizing the value to within that - range. + outside of the range of [-1, 1] by normalizing the value to within that range. -- Issue #6877: Make it possible to link the readline extension to libedit - on OSX. +- Issue #6877: Make it possible to link the readline extension to libedit on + OSX. -- Issue #6944: Fix a SystemError when socket.getnameinfo() was called - with something other than a tuple as first argument. +- Issue #6944: Fix a SystemError when socket.getnameinfo() was called with + something other than a tuple as first argument. - Issue #6865: Fix reference counting issue in the initialization of the pwd module. @@ -2215,37 +2183,37 @@ - Fix a segfault in expat when given a specially crafted input lead to the tokenizer not stopping. CVE-2009-3720. -- Issue #6561: '\d' in a regex now matches only characters with - Unicode category 'Nd' (Number, Decimal Digit). Previously it also - matched characters with category 'No'. - -- Issue #1523: Remove deprecated overflow wrapping for struct.pack - with an integer format code ('bBhHiIlLqQ'). Packing an out-of-range - integer now consistently raises struct.error. - -- Issues #1530559, #1741130: Fix various struct.pack inconsistencies - for the integer formats ('bBhHiIlLqQ'). In the following, '*' - represents any of '=', '<', '>'. - - - Packing a float now always gives a Deprecation Warning. - Previously it only warned for 'I', 'L', '*B', '*H', '*I', '*L'. - - - If x is not an int, long or float, then packing x will always - result in struct.error. Previously an x with an __int__ method - could be packed by 'b', 'B', 'h', 'H', 'i', 'l', '*b', '*h' - ,'*i', '*l', and an x with a __long__ method could be packed by - 'q', 'Q', '*q', '*Q'; for x with neither __int__ nor __long__, - TypeError used to be raised (with a confusing error message) for - 'I', 'L', '*B', '*H', '*I', '*L', and struct.error in other cases. - - Note: as of Python 2.7 beta 1, the above is out of date. In 2.7 - beta 1, any argument with an __int__ method can be packed, but use - of this feature triggers a DeprecationWarning. +- Issue #6561: '\d' in a regex now matches only characters with Unicode category + 'Nd' (Number, Decimal Digit). Previously it also matched characters with + category 'No'. + +- Issue #1523: Remove deprecated overflow wrapping for struct.pack with an + integer format code ('bBhHiIlLqQ'). Packing an out-of-range integer now + consistently raises struct.error. + +- Issues #1530559, #1741130: Fix various struct.pack inconsistencies for the + integer formats ('bBhHiIlLqQ'). In the following, '*' represents any of '=', + '<', '>'. + + - Packing a float now always gives a Deprecation Warning. Previously it + only warned for 'I', 'L', '*B', '*H', '*I', '*L'. + + - If x is not an int, long or float, then packing x will always result in + struct.error. Previously an x with an __int__ method could be packed by + 'b', 'B', 'h', 'H', 'i', 'l', '*b', '*h' ,'*i', '*l', and an x with a + __long__ method could be packed by 'q', 'Q', '*q', '*Q'; for x with + neither __int__ nor __long__, TypeError used to be raised (with a + confusing error message) for 'I', 'L', '*B', '*H', '*I', '*L', and + struct.error in other cases. + + Note: as of Python 2.7 beta 1, the above is out of date. In 2.7 beta 1, any + argument with an __int__ method can be packed, but use of this feature + triggers a DeprecationWarning. - Issue #4873: Fix resource leaks in error cases of pwd and grp. -- Issue #4751: For hashlib algorithms provided by OpenSSL, the Python - GIL is now released during computation on data lengths >= 2048 bytes. +- Issue #4751: For hashlib algorithms provided by OpenSSL, the Python GIL is now + released during computation on data lengths >= 2048 bytes. - Issue #3745: Fix hashlib to always reject unicode and non buffer-api supporting objects as input no matter how it was compiled (built in @@ -2273,15 +2241,15 @@ Tests ----- -- Issue #7431: use TESTFN in test_linecache instead of trying to create a - file in the Lib/test directory, which might be read-only for the - user running the tests. +- Issue #7431: Use TESTFN in test_linecache instead of trying to create a file + in the Lib/test directory, which might be read-only for the user running the + tests. -- Issue #7324: add a sanity check to regrtest argument parsing to - catch the case of an option with no handler. +- Issue #7324: Add a sanity check to regrtest argument parsing to catch the case + of an option with no handler. -- Issue #7312: Add a -F flag to run the selected tests in a loop until - a test fails. Can be combined with -j. +- Issue #7312: Add a -F flag to run the selected tests in a loop until a test + fails. Can be combined with -j. - Issue #7295: Do not use a hardcoded file name in test_tarfile. @@ -2289,13 +2257,12 @@ primitives such as Lock, RLock, Condition, Event and Semaphore. - Issue #7222: Make thread "reaping" more reliable so that reference - leak-chasing test runs give sensible results. The previous method of - reaping threads could return successfully while some Thread objects were - still referenced. This also introduces a new private function: - :func:`thread._count()`. + leak-chasing test runs give sensible results. The previous method of reaping + threads could return successfully while some Thread objects were still + referenced. This also introduces a new private function: ``thread._count()``. -- Issue #7151: fixed regrtest -j so that output to stderr from a test no - longer runs the risk of causing the worker thread to fail. +- Issue #7151: Fixed regrtest -j so that output to stderr from a test no longer + runs the risk of causing the worker thread to fail. - Issue #7055: test___all__ now greedily detects all modules which have an __all__ attribute, rather than using a hardcoded and incomplete list. @@ -2311,17 +2278,17 @@ - Issue #5450: Moved tests involving loading tk from Lib/test/test_tcl to Lib/lib-tk/test/test_tkinter/test_loadtk. With this, these tests demonstrate - the same behaviour as test_ttkguionly (and now also test_tk) which is to - skip the tests if DISPLAY is defined but can't be used. + the same behaviour as test_ttkguionly (and now also test_tk) which is to skip + the tests if DISPLAY is defined but can't be used. - Issue #6152: New option '-j'/'--multiprocess' for regrtest allows running regression tests in parallel, shortening the total runtime. -- Issue #5354: New test support function import_fresh_module() makes - it easy to import both normal and optimised versions of modules. - test_heapq and test_warnings have been adjusted to use it, tests for - other modules with both C and Python implementations in the stdlib - can be adjusted to use it over time. +- Issue #5354: New test support function import_fresh_module() makes it easy to + import both normal and optimised versions of modules. test_heapq and + test_warnings have been adjusted to use it, tests for other modules with both + C and Python implementations in the stdlib can be adjusted to use it over + time. - Fix test_warnings to no longer reset the warnings filter. @@ -2329,9 +2296,9 @@ - Issue #5635: Fix running test_sys with tracing enabled. -- regrtest no longer treats ImportError as equivalent to SkipTest. Imports - that should cause a test to be skipped are now done using import_module - from test support, which does the conversion. +- regrtest no longer treats ImportError as equivalent to SkipTest. Imports that + should cause a test to be skipped are now done using import_module from test + support, which does the conversion. - Issue #5083: New 'gui' resource for regrtest. From python-checkins at python.org Sun Mar 14 10:51:37 2010 From: python-checkins at python.org (ezio.melotti) Date: Sun, 14 Mar 2010 10:51:37 +0100 (CET) Subject: [Python-checkins] r78950 - in python/branches/py3k/Doc: library/pydoc.rst library/tkinter.rst library/tkinter.tix.rst library/tkinter.ttk.rst library/turtle.rst using/mac.rst Message-ID: <20100314095137.4CB2EF95D@mail.python.org> Author: ezio.melotti Date: Sun Mar 14 10:51:37 2010 New Revision: 78950 Log: #7057: fix several errors. Modified: python/branches/py3k/Doc/library/pydoc.rst python/branches/py3k/Doc/library/tkinter.rst python/branches/py3k/Doc/library/tkinter.tix.rst python/branches/py3k/Doc/library/tkinter.ttk.rst python/branches/py3k/Doc/library/turtle.rst python/branches/py3k/Doc/using/mac.rst Modified: python/branches/py3k/Doc/library/pydoc.rst ============================================================================== --- python/branches/py3k/Doc/library/pydoc.rst (original) +++ python/branches/py3k/Doc/library/pydoc.rst Sun Mar 14 10:51:37 2010 @@ -54,7 +54,7 @@ :option:`-p 1234` will start a HTTP server on port 1234, allowing you to browse the documentation at ``http://localhost:1234/`` in your preferred Web browser. :program:`pydoc` :option:`-g` will start the server and additionally bring up a -small :mod:`Tkinter`\ -based graphical interface to help you search for +small :mod:`tkinter`\ -based graphical interface to help you search for documentation pages. When :program:`pydoc` generates documentation, it uses the current environment Modified: python/branches/py3k/Doc/library/tkinter.rst ============================================================================== --- python/branches/py3k/Doc/library/tkinter.rst (original) +++ python/branches/py3k/Doc/library/tkinter.rst Sun Mar 14 10:51:37 2010 @@ -30,8 +30,8 @@ Tkinter Modules --------------- -Most of the time, the :mod:`tkinter` is all you really need, but a number -of additional modules are available as well. The Tk interface is located in a +Most of the time, :mod:`tkinter` is all you really need, but a number of +additional modules are available as well. The Tk interface is located in a binary module named :mod:`_tkinter`. This module contains the low-level interface to Tk, and should never be used directly by application programmers. It is usually a shared library (or DLL), but might in some cases be statically @@ -112,13 +112,13 @@ Credits: -* Tkinter was written by Steen Lumholt and Guido van Rossum. - * Tk was written by John Ousterhout while at Berkeley. +* Tkinter was written by Steen Lumholt and Guido van Rossum. + * This Life Preserver was written by Matt Conway at the University of Virginia. -* The html rendering, and some liberal editing, was produced from a FrameMaker +* The HTML rendering, and some liberal editing, was produced from a FrameMaker version by Ken Manheimer. * Fredrik Lundh elaborated and revised the class interface descriptions, to get @@ -143,10 +143,10 @@ can't fulfill that role, so the best we can do is point you to the best documentation that exists. Here are some hints: -* The authors strongly suggest getting a copy of the Tk man pages. Specifically, - the man pages in the ``mann`` directory are most useful. The ``man3`` man pages - describe the C interface to the Tk library and thus are not especially helpful - for script writers. +* The authors strongly suggest getting a copy of the Tk man pages. + Specifically, the man pages in the ``manN`` directory are most useful. + The ``man3`` man pages describe the C interface to the Tk library and thus + are not especially helpful for script writers. * Addison-Wesley publishes a book called Tcl and the Tk Toolkit by John Ousterhout (ISBN 0-201-63337-X) which is a good introduction to Tcl and Tk for @@ -159,6 +159,9 @@ .. seealso:: + `Tcl/Tk 8.6 man pages `_ + The Tcl/Tk manual on www.tcl.tk. + `ActiveState Tcl Home Page `_ The Tk/Tcl development is largely taking place at ActiveState. @@ -183,8 +186,8 @@ def createWidgets(self): self.QUIT = Button(self) self.QUIT["text"] = "QUIT" - self.QUIT["fg"] = "red" - self.QUIT["command"] = self.quit + self.QUIT["fg"] = "red" + self.QUIT["command"] = self.quit self.QUIT.pack({"side": "left"}) @@ -257,7 +260,7 @@ For example:: button .fred -fg red -text "hi there" - ^ ^ \_____________________/ + ^ ^ \______________________/ | | | class new options command widget (-opt val -opt val ...) @@ -301,15 +304,15 @@ dictionary style, for established instances. See section :ref:`tkinter-setting-options` on setting options. :: - button .fred -fg red =====> fred = Button(panel, fg = "red") + button .fred -fg red =====> fred = Button(panel, fg="red") .fred configure -fg red =====> fred["fg"] = red - OR ==> fred.config(fg = "red") + OR ==> fred.config(fg="red") In Tk, to perform an action on a widget, use the widget name as a command, and follow it with an action name, possibly with arguments (options). In Tkinter, you call methods on the class instance to invoke actions on the widget. The -actions (methods) that a given widget can perform are listed in the Tkinter.py -module. :: +actions (methods) that a given widget can perform are listed in +:file:`tkinter/__init__.py`. :: .fred invoke =====> fred.invoke() @@ -320,7 +323,7 @@ methods. See the :mod:`tkinter.tix` module documentation for additional information on the Form geometry manager. :: - pack .fred -side left =====> fred.pack(side = "left") + pack .fred -side left =====> fred.pack(side="left") How Tk and Tkinter are Related @@ -332,14 +335,15 @@ A Python application makes a :mod:`tkinter` call. tkinter (Python Package) - This call (say, for example, creating a button widget), is implemented in the - *tkinter* package, which is written in Python. This Python function will parse - the commands and the arguments and convert them into a form that makes them look - as if they had come from a Tk script instead of a Python script. + This call (say, for example, creating a button widget), is implemented in + the :mod:`tkinter` package, which is written in Python. This Python + function will parse the commands and the arguments and convert them into a + form that makes them look as if they had come from a Tk script instead of + a Python script. -tkinter (C) +_tkinter (C) These commands and their arguments will be passed to a C function in the - *tkinter* - note the lowercase - extension module. + :mod:`_tkinter` - note the underscore - extension module. Tk Widgets (C and Tcl) This C function is able to make calls into other C modules, including the C @@ -370,7 +374,7 @@ At object creation time, using keyword arguments :: - fred = Button(self, fg = "red", bg = "blue") + fred = Button(self, fg="red", bg="blue") After object creation, treating the option name like a dictionary index :: @@ -381,7 +385,7 @@ Use the config() method to update multiple attrs subsequent to object creation :: - fred.config(fg = "red", bg = "blue") + fred.config(fg="red", bg="blue") For a complete explanation of a given option and its behavior, see the Tk man pages for the widget in question. @@ -464,8 +468,8 @@ the main application window is resized. Here are some examples:: fred.pack() # defaults to side = "top" - fred.pack(side = "left") - fred.pack(expand = 1) + fred.pack(side="left") + fred.pack(expand=1) Packer Options @@ -506,7 +510,7 @@ possible to hand over an arbitrary Python variable to a widget through a ``variable`` or ``textvariable`` option. The only kinds of variables for which this works are variables that are subclassed from a class called Variable, -defined in the :mod:`tkinter`. +defined in :mod:`tkinter`. There are many useful subclasses of Variable already defined: :class:`StringVar`, :class:`IntVar`, :class:`DoubleVar`, and @@ -606,7 +610,7 @@ This is any Python function that takes no arguments. For example:: def print_it(): - print("hi there") + print("hi there") fred["command"] = print_it color @@ -702,24 +706,32 @@ :meth:`turnRed` callback. This field contains the widget that caught the X event. The following table lists the other event fields you can access, and how they are denoted in Tk, which can be useful when referring to the Tk man pages. -:: - Tk Tkinter Event Field Tk Tkinter Event Field - -- ------------------- -- ------------------- - %f focus %A char - %h height %E send_event - %k keycode %K keysym - %s state %N keysym_num - %t time %T type - %w width %W widget - %x x %X x_root - %y y %Y y_root ++----+---------------------+----+---------------------+ +| Tk | Tkinter Event Field | Tk | Tkinter Event Field | ++====+=====================+====+=====================+ +| %f | focus | %A | char | ++----+---------------------+----+---------------------+ +| %h | height | %E | send_event | ++----+---------------------+----+---------------------+ +| %k | keycode | %K | keysym | ++----+---------------------+----+---------------------+ +| %s | state | %N | keysym_num | ++----+---------------------+----+---------------------+ +| %t | time | %T | type | ++----+---------------------+----+---------------------+ +| %w | width | %W | widget | ++----+---------------------+----+---------------------+ +| %x | x | %X | x_root | ++----+---------------------+----+---------------------+ +| %y | y | %Y | y_root | ++----+---------------------+----+---------------------+ The index Parameter ^^^^^^^^^^^^^^^^^^^ -A number of widgets require"index" parameters to be passed. These are used to +A number of widgets require "index" parameters to be passed. These are used to point at a specific place in a Text widget, or to particular characters in an Entry widget, or to particular menu items in a Menu widget. @@ -755,7 +767,7 @@ * an integer which refers to the numeric position of the entry in the widget, counted from the top, starting with 0; - * the string ``'active'``, which refers to the menu position that is currently + * the string ``"active"``, which refers to the menu position that is currently under the cursor; * the string ``"last"`` which refers to the last menu item; Modified: python/branches/py3k/Doc/library/tkinter.tix.rst ============================================================================== --- python/branches/py3k/Doc/library/tkinter.tix.rst (original) +++ python/branches/py3k/Doc/library/tkinter.tix.rst Sun Mar 14 10:51:37 2010 @@ -84,7 +84,7 @@ ----------- `Tix `_ -introduces over 40 widget classes to the :mod:`Tkinter` repertoire. There is a +introduces over 40 widget classes to the :mod:`tkinter` repertoire. There is a demo of all the :mod:`tkinter.tix` widgets in the :file:`Demo/tix` directory of the standard distribution. Modified: python/branches/py3k/Doc/library/tkinter.ttk.rst ============================================================================== --- python/branches/py3k/Doc/library/tkinter.ttk.rst (original) +++ python/branches/py3k/Doc/library/tkinter.ttk.rst Sun Mar 14 10:51:37 2010 @@ -116,12 +116,13 @@ | | for the parent widget. | +-----------+--------------------------------------------------------------+ | takefocus | Determines whether the window accepts the focus during | - | | keyboard traversal. 0, 1 or an empty is return. If 0 is | - | | returned, it means that the window should be skipped entirely| - | | during keyboard traversal. If 1, it means that the window | - | | should receive the input focus as long as it is viewable. And| - | | an empty string means that the traversal scripts make the | - | | decision about whether or not to focus on the window. | + | | keyboard traversal. 0, 1 or an empty string is returned. | + | | If 0 is returned, it means that the window should be skipped | + | | entirely during keyboard traversal. If 1, it means that the | + | | window should receive the input focus as long as it is | + | | viewable. And an empty string means that the traversal | + | | scripts make the decision about whether or not to focus | + | | on the window. | +-----------+--------------------------------------------------------------+ | style | May be used to specify a custom widget style. | +-----------+--------------------------------------------------------------+ Modified: python/branches/py3k/Doc/library/turtle.rst ============================================================================== --- python/branches/py3k/Doc/library/turtle.rst (original) +++ python/branches/py3k/Doc/library/turtle.rst Sun Mar 14 10:51:37 2010 @@ -35,13 +35,13 @@ the module from within IDLE run with the ``-n`` switch. The turtle module provides turtle graphics primitives, in both object-oriented -and procedure-oriented ways. Because it uses :mod:`Tkinter` for the underlying +and procedure-oriented ways. Because it uses :mod:`tkinter` for the underlying graphics, it needs a version of Python installed with Tk support. The object-oriented interface uses essentially two+two classes: 1. The :class:`TurtleScreen` class defines graphics windows as a playground for - the drawing turtles. Its constructor needs a :class:`Tkinter.Canvas` or a + the drawing turtles. Its constructor needs a :class:`tkinter.Canvas` or a :class:`ScrolledCanvas` as argument. It should be used when :mod:`turtle` is used as part of some application. @@ -1998,7 +1998,7 @@ .. class:: RawTurtle(canvas) RawPen(canvas) - :param canvas: a :class:`Tkinter.Canvas`, a :class:`ScrolledCanvas` or a + :param canvas: a :class:`tkinter.Canvas`, a :class:`ScrolledCanvas` or a :class:`TurtleScreen` Create a turtle. The turtle has all methods described above as "methods of @@ -2013,7 +2013,7 @@ .. class:: TurtleScreen(cv) - :param cv: a :class:`Tkinter.Canvas` + :param cv: a :class:`tkinter.Canvas` Provides screen oriented methods like :func:`setbg` etc. that are described above. Modified: python/branches/py3k/Doc/using/mac.rst ============================================================================== --- python/branches/py3k/Doc/using/mac.rst (original) +++ python/branches/py3k/Doc/using/mac.rst Sun Mar 14 10:51:37 2010 @@ -143,7 +143,7 @@ the foundation of most modern Mac development. Information on PyObjC is available from http://pyobjc.sourceforge.net. -The standard Python GUI toolkit is :mod:`Tkinter`, based on the cross-platform +The standard Python GUI toolkit is :mod:`tkinter`, based on the cross-platform Tk toolkit (http://www.tcl.tk). An Aqua-native version of Tk is bundled with OS X by Apple, and the latest version can be downloaded and installed from http://www.activestate.com; it can also be built from source. From python-checkins at python.org Sun Mar 14 10:53:34 2010 From: python-checkins at python.org (ezio.melotti) Date: Sun, 14 Mar 2010 10:53:34 +0100 (CET) Subject: [Python-checkins] r78951 - in python/branches/release31-maint: Doc/library/pydoc.rst Doc/library/tkinter.rst Doc/library/tkinter.tix.rst Doc/library/tkinter.ttk.rst Doc/library/turtle.rst Doc/using/mac.rst Message-ID: <20100314095334.EDF30F95D@mail.python.org> Author: ezio.melotti Date: Sun Mar 14 10:53:34 2010 New Revision: 78951 Log: Merged revisions 78950 via svnmerge from svn+ssh://pythondev at svn.python.org/python/branches/py3k ........ r78950 | ezio.melotti | 2010-03-14 11:51:37 +0200 (Sun, 14 Mar 2010) | 1 line #7057: fix several errors. ........ Modified: python/branches/release31-maint/ (props changed) python/branches/release31-maint/Doc/library/pydoc.rst python/branches/release31-maint/Doc/library/tkinter.rst python/branches/release31-maint/Doc/library/tkinter.tix.rst python/branches/release31-maint/Doc/library/tkinter.ttk.rst python/branches/release31-maint/Doc/library/turtle.rst python/branches/release31-maint/Doc/using/mac.rst Modified: python/branches/release31-maint/Doc/library/pydoc.rst ============================================================================== --- python/branches/release31-maint/Doc/library/pydoc.rst (original) +++ python/branches/release31-maint/Doc/library/pydoc.rst Sun Mar 14 10:53:34 2010 @@ -55,7 +55,7 @@ :option:`-p 1234` will start a HTTP server on port 1234, allowing you to browse the documentation at ``http://localhost:1234/`` in your preferred Web browser. :program:`pydoc` :option:`-g` will start the server and additionally bring up a -small :mod:`Tkinter`\ -based graphical interface to help you search for +small :mod:`tkinter`\ -based graphical interface to help you search for documentation pages. When :program:`pydoc` generates documentation, it uses the current environment Modified: python/branches/release31-maint/Doc/library/tkinter.rst ============================================================================== --- python/branches/release31-maint/Doc/library/tkinter.rst (original) +++ python/branches/release31-maint/Doc/library/tkinter.rst Sun Mar 14 10:53:34 2010 @@ -30,8 +30,8 @@ Tkinter Modules --------------- -Most of the time, the :mod:`tkinter` is all you really need, but a number -of additional modules are available as well. The Tk interface is located in a +Most of the time, :mod:`tkinter` is all you really need, but a number of +additional modules are available as well. The Tk interface is located in a binary module named :mod:`_tkinter`. This module contains the low-level interface to Tk, and should never be used directly by application programmers. It is usually a shared library (or DLL), but might in some cases be statically @@ -112,13 +112,13 @@ Credits: -* Tkinter was written by Steen Lumholt and Guido van Rossum. - * Tk was written by John Ousterhout while at Berkeley. +* Tkinter was written by Steen Lumholt and Guido van Rossum. + * This Life Preserver was written by Matt Conway at the University of Virginia. -* The html rendering, and some liberal editing, was produced from a FrameMaker +* The HTML rendering, and some liberal editing, was produced from a FrameMaker version by Ken Manheimer. * Fredrik Lundh elaborated and revised the class interface descriptions, to get @@ -143,10 +143,10 @@ can't fulfill that role, so the best we can do is point you to the best documentation that exists. Here are some hints: -* The authors strongly suggest getting a copy of the Tk man pages. Specifically, - the man pages in the ``mann`` directory are most useful. The ``man3`` man pages - describe the C interface to the Tk library and thus are not especially helpful - for script writers. +* The authors strongly suggest getting a copy of the Tk man pages. + Specifically, the man pages in the ``manN`` directory are most useful. + The ``man3`` man pages describe the C interface to the Tk library and thus + are not especially helpful for script writers. * Addison-Wesley publishes a book called Tcl and the Tk Toolkit by John Ousterhout (ISBN 0-201-63337-X) which is a good introduction to Tcl and Tk for @@ -159,6 +159,9 @@ .. seealso:: + `Tcl/Tk 8.6 man pages `_ + The Tcl/Tk manual on www.tcl.tk. + `ActiveState Tcl Home Page `_ The Tk/Tcl development is largely taking place at ActiveState. @@ -183,8 +186,8 @@ def createWidgets(self): self.QUIT = Button(self) self.QUIT["text"] = "QUIT" - self.QUIT["fg"] = "red" - self.QUIT["command"] = self.quit + self.QUIT["fg"] = "red" + self.QUIT["command"] = self.quit self.QUIT.pack({"side": "left"}) @@ -257,7 +260,7 @@ For example:: button .fred -fg red -text "hi there" - ^ ^ \_____________________/ + ^ ^ \______________________/ | | | class new options command widget (-opt val -opt val ...) @@ -301,15 +304,15 @@ dictionary style, for established instances. See section :ref:`tkinter-setting-options` on setting options. :: - button .fred -fg red =====> fred = Button(panel, fg = "red") + button .fred -fg red =====> fred = Button(panel, fg="red") .fred configure -fg red =====> fred["fg"] = red - OR ==> fred.config(fg = "red") + OR ==> fred.config(fg="red") In Tk, to perform an action on a widget, use the widget name as a command, and follow it with an action name, possibly with arguments (options). In Tkinter, you call methods on the class instance to invoke actions on the widget. The -actions (methods) that a given widget can perform are listed in the Tkinter.py -module. :: +actions (methods) that a given widget can perform are listed in +:file:`tkinter/__init__.py`. :: .fred invoke =====> fred.invoke() @@ -320,7 +323,7 @@ methods. See the :mod:`tkinter.tix` module documentation for additional information on the Form geometry manager. :: - pack .fred -side left =====> fred.pack(side = "left") + pack .fred -side left =====> fred.pack(side="left") How Tk and Tkinter are Related @@ -332,14 +335,15 @@ A Python application makes a :mod:`tkinter` call. tkinter (Python Package) - This call (say, for example, creating a button widget), is implemented in the - *tkinter* package, which is written in Python. This Python function will parse - the commands and the arguments and convert them into a form that makes them look - as if they had come from a Tk script instead of a Python script. + This call (say, for example, creating a button widget), is implemented in + the :mod:`tkinter` package, which is written in Python. This Python + function will parse the commands and the arguments and convert them into a + form that makes them look as if they had come from a Tk script instead of + a Python script. -tkinter (C) +_tkinter (C) These commands and their arguments will be passed to a C function in the - *tkinter* - note the lowercase - extension module. + :mod:`_tkinter` - note the underscore - extension module. Tk Widgets (C and Tcl) This C function is able to make calls into other C modules, including the C @@ -370,7 +374,7 @@ At object creation time, using keyword arguments :: - fred = Button(self, fg = "red", bg = "blue") + fred = Button(self, fg="red", bg="blue") After object creation, treating the option name like a dictionary index :: @@ -381,7 +385,7 @@ Use the config() method to update multiple attrs subsequent to object creation :: - fred.config(fg = "red", bg = "blue") + fred.config(fg="red", bg="blue") For a complete explanation of a given option and its behavior, see the Tk man pages for the widget in question. @@ -464,8 +468,8 @@ the main application window is resized. Here are some examples:: fred.pack() # defaults to side = "top" - fred.pack(side = "left") - fred.pack(expand = 1) + fred.pack(side="left") + fred.pack(expand=1) Packer Options @@ -506,7 +510,7 @@ possible to hand over an arbitrary Python variable to a widget through a ``variable`` or ``textvariable`` option. The only kinds of variables for which this works are variables that are subclassed from a class called Variable, -defined in the :mod:`tkinter`. +defined in :mod:`tkinter`. There are many useful subclasses of Variable already defined: :class:`StringVar`, :class:`IntVar`, :class:`DoubleVar`, and @@ -606,7 +610,7 @@ This is any Python function that takes no arguments. For example:: def print_it(): - print("hi there") + print("hi there") fred["command"] = print_it color @@ -702,24 +706,32 @@ :meth:`turnRed` callback. This field contains the widget that caught the X event. The following table lists the other event fields you can access, and how they are denoted in Tk, which can be useful when referring to the Tk man pages. -:: - Tk Tkinter Event Field Tk Tkinter Event Field - -- ------------------- -- ------------------- - %f focus %A char - %h height %E send_event - %k keycode %K keysym - %s state %N keysym_num - %t time %T type - %w width %W widget - %x x %X x_root - %y y %Y y_root ++----+---------------------+----+---------------------+ +| Tk | Tkinter Event Field | Tk | Tkinter Event Field | ++====+=====================+====+=====================+ +| %f | focus | %A | char | ++----+---------------------+----+---------------------+ +| %h | height | %E | send_event | ++----+---------------------+----+---------------------+ +| %k | keycode | %K | keysym | ++----+---------------------+----+---------------------+ +| %s | state | %N | keysym_num | ++----+---------------------+----+---------------------+ +| %t | time | %T | type | ++----+---------------------+----+---------------------+ +| %w | width | %W | widget | ++----+---------------------+----+---------------------+ +| %x | x | %X | x_root | ++----+---------------------+----+---------------------+ +| %y | y | %Y | y_root | ++----+---------------------+----+---------------------+ The index Parameter ^^^^^^^^^^^^^^^^^^^ -A number of widgets require"index" parameters to be passed. These are used to +A number of widgets require "index" parameters to be passed. These are used to point at a specific place in a Text widget, or to particular characters in an Entry widget, or to particular menu items in a Menu widget. @@ -755,7 +767,7 @@ * an integer which refers to the numeric position of the entry in the widget, counted from the top, starting with 0; - * the string ``'active'``, which refers to the menu position that is currently + * the string ``"active"``, which refers to the menu position that is currently under the cursor; * the string ``"last"`` which refers to the last menu item; Modified: python/branches/release31-maint/Doc/library/tkinter.tix.rst ============================================================================== --- python/branches/release31-maint/Doc/library/tkinter.tix.rst (original) +++ python/branches/release31-maint/Doc/library/tkinter.tix.rst Sun Mar 14 10:53:34 2010 @@ -84,7 +84,7 @@ ----------- `Tix `_ -introduces over 40 widget classes to the :mod:`Tkinter` repertoire. There is a +introduces over 40 widget classes to the :mod:`tkinter` repertoire. There is a demo of all the :mod:`tkinter.tix` widgets in the :file:`Demo/tix` directory of the standard distribution. Modified: python/branches/release31-maint/Doc/library/tkinter.ttk.rst ============================================================================== --- python/branches/release31-maint/Doc/library/tkinter.ttk.rst (original) +++ python/branches/release31-maint/Doc/library/tkinter.ttk.rst Sun Mar 14 10:53:34 2010 @@ -116,12 +116,13 @@ | | for the parent widget. | +-----------+--------------------------------------------------------------+ | takefocus | Determines whether the window accepts the focus during | - | | keyboard traversal. 0, 1 or an empty is return. If 0 is | - | | returned, it means that the window should be skipped entirely| - | | during keyboard traversal. If 1, it means that the window | - | | should receive the input focus as long as it is viewable. And| - | | an empty string means that the traversal scripts make the | - | | decision about whether or not to focus on the window. | + | | keyboard traversal. 0, 1 or an empty string is returned. | + | | If 0 is returned, it means that the window should be skipped | + | | entirely during keyboard traversal. If 1, it means that the | + | | window should receive the input focus as long as it is | + | | viewable. And an empty string means that the traversal | + | | scripts make the decision about whether or not to focus | + | | on the window. | +-----------+--------------------------------------------------------------+ | style | May be used to specify a custom widget style. | +-----------+--------------------------------------------------------------+ Modified: python/branches/release31-maint/Doc/library/turtle.rst ============================================================================== --- python/branches/release31-maint/Doc/library/turtle.rst (original) +++ python/branches/release31-maint/Doc/library/turtle.rst Sun Mar 14 10:53:34 2010 @@ -35,13 +35,13 @@ the module from within IDLE run with the ``-n`` switch. The turtle module provides turtle graphics primitives, in both object-oriented -and procedure-oriented ways. Because it uses :mod:`Tkinter` for the underlying +and procedure-oriented ways. Because it uses :mod:`tkinter` for the underlying graphics, it needs a version of Python installed with Tk support. The object-oriented interface uses essentially two+two classes: 1. The :class:`TurtleScreen` class defines graphics windows as a playground for - the drawing turtles. Its constructor needs a :class:`Tkinter.Canvas` or a + the drawing turtles. Its constructor needs a :class:`tkinter.Canvas` or a :class:`ScrolledCanvas` as argument. It should be used when :mod:`turtle` is used as part of some application. @@ -1998,7 +1998,7 @@ .. class:: RawTurtle(canvas) RawPen(canvas) - :param canvas: a :class:`Tkinter.Canvas`, a :class:`ScrolledCanvas` or a + :param canvas: a :class:`tkinter.Canvas`, a :class:`ScrolledCanvas` or a :class:`TurtleScreen` Create a turtle. The turtle has all methods described above as "methods of @@ -2013,7 +2013,7 @@ .. class:: TurtleScreen(cv) - :param cv: a :class:`Tkinter.Canvas` + :param cv: a :class:`tkinter.Canvas` Provides screen oriented methods like :func:`setbg` etc. that are described above. Modified: python/branches/release31-maint/Doc/using/mac.rst ============================================================================== --- python/branches/release31-maint/Doc/using/mac.rst (original) +++ python/branches/release31-maint/Doc/using/mac.rst Sun Mar 14 10:53:34 2010 @@ -143,7 +143,7 @@ the foundation of most modern Mac development. Information on PyObjC is available from http://pyobjc.sourceforge.net. -The standard Python GUI toolkit is :mod:`Tkinter`, based on the cross-platform +The standard Python GUI toolkit is :mod:`tkinter`, based on the cross-platform Tk toolkit (http://www.tcl.tk). An Aqua-native version of Tk is bundled with OS X by Apple, and the latest version can be downloaded and installed from http://www.activestate.com; it can also be built from source. From python-checkins at python.org Sun Mar 14 10:55:08 2010 From: python-checkins at python.org (georg.brandl) Date: Sun, 14 Mar 2010 10:55:08 +0100 (CET) Subject: [Python-checkins] r78952 - python/trunk/Doc/library/codecs.rst Message-ID: <20100314095508.AE39DF922@mail.python.org> Author: georg.brandl Date: Sun Mar 14 10:55:08 2010 New Revision: 78952 Log: #8137: add iso-8859-16 to the standard encodings table. Modified: python/trunk/Doc/library/codecs.rst Modified: python/trunk/Doc/library/codecs.rst ============================================================================== --- python/trunk/Doc/library/codecs.rst (original) +++ python/trunk/Doc/library/codecs.rst Sun Mar 14 10:55:08 2010 @@ -1037,11 +1037,13 @@ +-----------------+--------------------------------+--------------------------------+ | iso8859_10 | iso-8859-10, latin6, L6 | Nordic languages | +-----------------+--------------------------------+--------------------------------+ -| iso8859_13 | iso-8859-13 | Baltic languages | +| iso8859_13 | iso-8859-13, latin7, L7 | Baltic languages | +-----------------+--------------------------------+--------------------------------+ | iso8859_14 | iso-8859-14, latin8, L8 | Celtic languages | +-----------------+--------------------------------+--------------------------------+ -| iso8859_15 | iso-8859-15 | Western Europe | +| iso8859_15 | iso-8859-15, latin9, L9 | Western Europe | ++-----------------+--------------------------------+--------------------------------+ +| iso8859_16 | iso-8859-16, latin10, L10 | South-Eastern Europe | +-----------------+--------------------------------+--------------------------------+ | johab | cp1361, ms1361 | Korean | +-----------------+--------------------------------+--------------------------------+ From python-checkins at python.org Sun Mar 14 11:13:49 2010 From: python-checkins at python.org (ezio.melotti) Date: Sun, 14 Mar 2010 11:13:49 +0100 (CET) Subject: [Python-checkins] r78954 - python/trunk/Misc/NEWS Message-ID: <20100314101349.A1003F994@mail.python.org> Author: ezio.melotti Date: Sun Mar 14 11:13:49 2010 New Revision: 78954 Log: Add a link about the Public Review Issue #29 Modified: python/trunk/Misc/NEWS Modified: python/trunk/Misc/NEWS ============================================================================== --- python/trunk/Misc/NEWS (original) +++ python/trunk/Misc/NEWS Sun Mar 14 11:13:49 2010 @@ -100,7 +100,7 @@ - Issue #6906: Tk should not set Unicode environment variables on Windows. - Issue #1054943: Fix ``unicodedata.normalize('NFC', text)`` for the Public - Review Issue #29. + Review Issue #29 (http://unicode.org/review/pr-29.html). - Issue #7494: Fix a crash in ``_lsprof`` (cProfile) after clearing the profiler, reset also the pointer to the current pointer context. From python-checkins at python.org Sun Mar 14 11:23:40 2010 From: python-checkins at python.org (georg.brandl) Date: Sun, 14 Mar 2010 11:23:40 +0100 (CET) Subject: [Python-checkins] r78955 - in python/branches/py3k: Doc/library/unittest.rst Lib/distutils/tests/test_bdist.py Lib/distutils/tests/test_bdist_dumb.py Lib/distutils/tests/test_bdist_msi.py Lib/distutils/tests/test_bdist_rpm.py Lib/distutils/tests/test_bdist_wininst.py Lib/distutils/tests/test_cmd.py Lib/distutils/tests/test_cygwinccompiler.py Lib/distutils/tests/test_emxccompiler.py Lib/distutils/tests/test_sysconfig.py Lib/email/test/test_email_torture.py Lib/genericpath.py Lib/mimetypes.py Lib/posixpath.py Lib/subprocess.py Lib/test/test_csv.py Lib/test/test_docxmlrpc.py Lib/test/test_fnmatch.py Lib/test/test_functools.py Lib/test/test_long.py Lib/test/test_minidom.py Lib/test/test_multiprocessing.py Lib/test/test_optparse.py Lib/test/test_pep292.py Lib/test/test_platform.py Lib/test/test_posixpath.py Lib/test/test_richcmp.py Lib/test/test_ssl.py Lib/test/test_sysconfig.py Lib/test/test_tempfile.py Lib/test/test_threaded_import.py Lib/test/test_zipimport.py Lib/unittest/case.py Message-ID: <20100314102340.0F7E2F9A5@mail.python.org> Author: georg.brandl Date: Sun Mar 14 11:23:39 2010 New Revision: 78955 Log: Merged revisions 78018,78035-78040,78042-78043,78046,78048-78052,78054,78059,78075-78080 via svnmerge from svn+ssh://pythondev at svn.python.org/python/trunk ........ r78018 | georg.brandl | 2010-02-06 11:08:21 +0100 (Sa, 06 Feb 2010) | 1 line #7864: make deprecation notices a bit clearer. ........ r78035 | georg.brandl | 2010-02-06 23:44:17 +0100 (Sa, 06 Feb 2010) | 1 line Fix duplicate import. ........ r78036 | georg.brandl | 2010-02-06 23:49:47 +0100 (Sa, 06 Feb 2010) | 1 line Remove unused import. ........ r78037 | georg.brandl | 2010-02-06 23:59:15 +0100 (Sa, 06 Feb 2010) | 1 line No need to assign the results of expressions used only for side effects. ........ r78038 | georg.brandl | 2010-02-07 00:02:29 +0100 (So, 07 Feb 2010) | 1 line Add a missing import. ........ r78039 | georg.brandl | 2010-02-07 00:06:24 +0100 (So, 07 Feb 2010) | 1 line Add missing imports. ........ r78040 | georg.brandl | 2010-02-07 00:08:00 +0100 (So, 07 Feb 2010) | 1 line Fix a few UnboundLocalErrors in test_long. ........ r78042 | georg.brandl | 2010-02-07 00:12:12 +0100 (So, 07 Feb 2010) | 1 line Add missing import. ........ r78043 | georg.brandl | 2010-02-07 00:12:19 +0100 (So, 07 Feb 2010) | 1 line Remove duplicate test method. ........ r78046 | georg.brandl | 2010-02-07 00:18:00 +0100 (So, 07 Feb 2010) | 1 line Fix various missing import/unbound name errors. ........ r78048 | georg.brandl | 2010-02-07 00:23:45 +0100 (So, 07 Feb 2010) | 1 line We heard you like test failures so we put unbound locals in your test so that you can fail while you fail. ........ r78049 | georg.brandl | 2010-02-07 00:33:33 +0100 (So, 07 Feb 2010) | 1 line Fix import/access for some identifiers. _TestSharedCTypes does not seem to be executed? ........ r78050 | georg.brandl | 2010-02-07 00:34:10 +0100 (So, 07 Feb 2010) | 1 line Fix more unbound locals in code paths that do not seem to be used. ........ r78051 | georg.brandl | 2010-02-07 00:53:52 +0100 (So, 07 Feb 2010) | 1 line Add missing import when running these tests standalone. ........ r78052 | georg.brandl | 2010-02-07 00:54:04 +0100 (So, 07 Feb 2010) | 1 line Add missing import when running these tests standalone. ........ r78054 | georg.brandl | 2010-02-07 00:58:25 +0100 (So, 07 Feb 2010) | 1 line Add missing import. ........ r78059 | georg.brandl | 2010-02-07 12:34:15 +0100 (So, 07 Feb 2010) | 1 line Use "regexp" consistently. ........ r78075 | georg.brandl | 2010-02-07 13:16:12 +0100 (So, 07 Feb 2010) | 1 line Fix another duplicated test method. ........ r78076 | georg.brandl | 2010-02-07 13:19:43 +0100 (So, 07 Feb 2010) | 1 line Fix wrong usage of "except X, Y:". ........ r78077 | georg.brandl | 2010-02-07 13:25:50 +0100 (So, 07 Feb 2010) | 1 line Fix two redefined test methods. ........ r78078 | georg.brandl | 2010-02-07 13:27:06 +0100 (So, 07 Feb 2010) | 1 line Fix a redefined test method. ........ r78079 | georg.brandl | 2010-02-07 13:34:26 +0100 (So, 07 Feb 2010) | 1 line Add a minimal test for fnmatchcase(). ........ r78080 | georg.brandl | 2010-02-07 13:55:12 +0100 (So, 07 Feb 2010) | 1 line Remove duplicate test method. ........ Modified: python/branches/py3k/ (props changed) python/branches/py3k/Doc/library/unittest.rst python/branches/py3k/Lib/distutils/tests/test_bdist.py python/branches/py3k/Lib/distutils/tests/test_bdist_dumb.py python/branches/py3k/Lib/distutils/tests/test_bdist_msi.py python/branches/py3k/Lib/distutils/tests/test_bdist_rpm.py python/branches/py3k/Lib/distutils/tests/test_bdist_wininst.py python/branches/py3k/Lib/distutils/tests/test_cmd.py python/branches/py3k/Lib/distutils/tests/test_cygwinccompiler.py python/branches/py3k/Lib/distutils/tests/test_emxccompiler.py python/branches/py3k/Lib/distutils/tests/test_sysconfig.py python/branches/py3k/Lib/email/test/test_email_torture.py python/branches/py3k/Lib/genericpath.py python/branches/py3k/Lib/mimetypes.py python/branches/py3k/Lib/posixpath.py python/branches/py3k/Lib/subprocess.py python/branches/py3k/Lib/test/test_csv.py python/branches/py3k/Lib/test/test_docxmlrpc.py python/branches/py3k/Lib/test/test_fnmatch.py python/branches/py3k/Lib/test/test_functools.py python/branches/py3k/Lib/test/test_long.py python/branches/py3k/Lib/test/test_minidom.py python/branches/py3k/Lib/test/test_multiprocessing.py python/branches/py3k/Lib/test/test_optparse.py python/branches/py3k/Lib/test/test_pep292.py python/branches/py3k/Lib/test/test_platform.py python/branches/py3k/Lib/test/test_posixpath.py python/branches/py3k/Lib/test/test_richcmp.py python/branches/py3k/Lib/test/test_ssl.py python/branches/py3k/Lib/test/test_sysconfig.py python/branches/py3k/Lib/test/test_tempfile.py python/branches/py3k/Lib/test/test_threaded_import.py python/branches/py3k/Lib/test/test_zipimport.py python/branches/py3k/Lib/unittest/case.py Modified: python/branches/py3k/Doc/library/unittest.rst ============================================================================== --- python/branches/py3k/Doc/library/unittest.rst (original) +++ python/branches/py3k/Doc/library/unittest.rst Sun Mar 14 11:23:39 2010 @@ -676,7 +676,7 @@ will be *msg* if given, otherwise it will be :const:`None`. .. deprecated:: 3.1 - :meth:`failUnless`. + :meth:`failUnless`; use one of the ``assert`` variants. :meth:`assert_`; use :meth:`assertTrue`. @@ -704,7 +704,7 @@ function for comparing strings. .. deprecated:: 3.1 - :meth:`failUnlessEqual`. + :meth:`failUnlessEqual`; use :meth:`assertEqual`. .. method:: assertNotEqual(first, second, msg=None) @@ -718,7 +718,7 @@ *first* and *second*. .. deprecated:: 3.1 - :meth:`failIfEqual`. + :meth:`failIfEqual`; use :meth:`assertNotEqual`. .. method:: assertAlmostEqual(first, second, *, places=7, msg=None) @@ -737,7 +737,7 @@ Objects that compare equal are automatically almost equal. .. deprecated:: 3.1 - :meth:`failUnlessAlmostEqual`. + :meth:`failUnlessAlmostEqual`; use :meth:`assertAlmostEqual`. .. method:: assertNotAlmostEqual(first, second, *, places=7, msg=None) @@ -756,7 +756,7 @@ Objects that compare equal automatically fail. .. deprecated:: 3.1 - :meth:`failIfAlmostEqual`. + :meth:`failIfAlmostEqual`; use :meth:`assertNotAlmostEqual`. .. method:: assertGreater(first, second, msg=None) @@ -923,7 +923,7 @@ Added the :attr:`exception` attribute. .. deprecated:: 3.1 - :meth:`failUnlessRaises`. + :meth:`failUnlessRaises`; use :meth:`assertRaises`. .. method:: assertRaisesRegexp(exception, regexp[, callable, ...]) @@ -1000,7 +1000,7 @@ for the error message. .. deprecated:: 3.1 - :meth:`failIf`. + :meth:`failIf`; use :meth:`assertFalse`. .. method:: fail(msg=None) Modified: python/branches/py3k/Lib/distutils/tests/test_bdist.py ============================================================================== --- python/branches/py3k/Lib/distutils/tests/test_bdist.py (original) +++ python/branches/py3k/Lib/distutils/tests/test_bdist.py Sun Mar 14 11:23:39 2010 @@ -5,6 +5,8 @@ import tempfile import shutil +from test.support import run_unittest + from distutils.core import Distribution from distutils.command.bdist import bdist from distutils.tests import support @@ -40,4 +42,4 @@ return unittest.makeSuite(BuildTestCase) if __name__ == '__main__': - test_support.run_unittest(test_suite()) + run_unittest(test_suite()) Modified: python/branches/py3k/Lib/distutils/tests/test_bdist_dumb.py ============================================================================== --- python/branches/py3k/Lib/distutils/tests/test_bdist_dumb.py (original) +++ python/branches/py3k/Lib/distutils/tests/test_bdist_dumb.py Sun Mar 14 11:23:39 2010 @@ -11,6 +11,8 @@ except ImportError: zlib = None +from test.support import run_unittest + from distutils.core import Distribution from distutils.command.bdist_dumb import bdist_dumb from distutils.tests import support @@ -100,4 +102,4 @@ return unittest.makeSuite(BuildDumbTestCase) if __name__ == '__main__': - test_support.run_unittest(test_suite()) + run_unittest(test_suite()) Modified: python/branches/py3k/Lib/distutils/tests/test_bdist_msi.py ============================================================================== --- python/branches/py3k/Lib/distutils/tests/test_bdist_msi.py (original) +++ python/branches/py3k/Lib/distutils/tests/test_bdist_msi.py Sun Mar 14 11:23:39 2010 @@ -2,6 +2,8 @@ import unittest import sys +from test.support import run_unittest + from distutils.tests import support @unittest.skipUnless(sys.platform=="win32", "These tests are only for win32") @@ -20,4 +22,4 @@ return unittest.makeSuite(BDistMSITestCase) if __name__ == '__main__': - test_support.run_unittest(test_suite()) + run_unittest(test_suite()) Modified: python/branches/py3k/Lib/distutils/tests/test_bdist_rpm.py ============================================================================== --- python/branches/py3k/Lib/distutils/tests/test_bdist_rpm.py (original) +++ python/branches/py3k/Lib/distutils/tests/test_bdist_rpm.py Sun Mar 14 11:23:39 2010 @@ -6,6 +6,8 @@ import tempfile import shutil +from test.support import run_unittest + from distutils.core import Distribution from distutils.command.bdist_rpm import bdist_rpm from distutils.tests import support @@ -122,4 +124,4 @@ return unittest.makeSuite(BuildRpmTestCase) if __name__ == '__main__': - test_support.run_unittest(test_suite()) + run_unittest(test_suite()) Modified: python/branches/py3k/Lib/distutils/tests/test_bdist_wininst.py ============================================================================== --- python/branches/py3k/Lib/distutils/tests/test_bdist_wininst.py (original) +++ python/branches/py3k/Lib/distutils/tests/test_bdist_wininst.py Sun Mar 14 11:23:39 2010 @@ -1,6 +1,8 @@ """Tests for distutils.command.bdist_wininst.""" import unittest +from test.support import run_unittest + from distutils.command.bdist_wininst import bdist_wininst from distutils.tests import support @@ -27,4 +29,4 @@ return unittest.makeSuite(BuildWinInstTestCase) if __name__ == '__main__': - test_support.run_unittest(test_suite()) + run_unittest(test_suite()) Modified: python/branches/py3k/Lib/distutils/tests/test_cmd.py ============================================================================== --- python/branches/py3k/Lib/distutils/tests/test_cmd.py (original) +++ python/branches/py3k/Lib/distutils/tests/test_cmd.py Sun Mar 14 11:23:39 2010 @@ -1,7 +1,7 @@ """Tests for distutils.cmd.""" import unittest import os -from test.support import captured_stdout +from test.support import captured_stdout, run_unittest from distutils.cmd import Command from distutils.dist import Distribution @@ -124,4 +124,4 @@ return unittest.makeSuite(CommandTestCase) if __name__ == '__main__': - test_support.run_unittest(test_suite()) + run_unittest(test_suite()) Modified: python/branches/py3k/Lib/distutils/tests/test_cygwinccompiler.py ============================================================================== --- python/branches/py3k/Lib/distutils/tests/test_cygwinccompiler.py (original) +++ python/branches/py3k/Lib/distutils/tests/test_cygwinccompiler.py Sun Mar 14 11:23:39 2010 @@ -6,7 +6,7 @@ import warnings import sysconfig -from test.support import check_warnings +from test.support import check_warnings, run_unittest from test.support import captured_stdout from distutils import cygwinccompiler @@ -109,4 +109,4 @@ return unittest.makeSuite(CygwinCCompilerTestCase) if __name__ == '__main__': - test_support.run_unittest(test_suite()) + run_unittest(test_suite()) Modified: python/branches/py3k/Lib/distutils/tests/test_emxccompiler.py ============================================================================== --- python/branches/py3k/Lib/distutils/tests/test_emxccompiler.py (original) +++ python/branches/py3k/Lib/distutils/tests/test_emxccompiler.py Sun Mar 14 11:23:39 2010 @@ -4,7 +4,7 @@ import os import warnings -from test.support import check_warnings +from test.support import check_warnings, run_unittest from test.support import captured_stdout from distutils.emxccompiler import get_versions @@ -30,4 +30,4 @@ return unittest.makeSuite(EmxCCompilerTestCase) if __name__ == '__main__': - test_support.run_unittest(test_suite()) + run_unittest(test_suite()) Modified: python/branches/py3k/Lib/distutils/tests/test_sysconfig.py ============================================================================== --- python/branches/py3k/Lib/distutils/tests/test_sysconfig.py (original) +++ python/branches/py3k/Lib/distutils/tests/test_sysconfig.py Sun Mar 14 11:23:39 2010 @@ -2,6 +2,7 @@ import os import test import unittest +import shutil from distutils import sysconfig from distutils.tests import support Modified: python/branches/py3k/Lib/email/test/test_email_torture.py ============================================================================== --- python/branches/py3k/Lib/email/test/test_email_torture.py (original) +++ python/branches/py3k/Lib/email/test/test_email_torture.py Sun Mar 14 11:23:39 2010 @@ -13,7 +13,7 @@ from types import ListType from email.test.test_email import TestEmailBase -from test.support import TestSkipped +from test.support import TestSkipped, run_unittest import email from email import __file__ as testfile @@ -128,7 +128,7 @@ def test_main(): for testclass in _testclasses(): - support.run_unittest(testclass) + run_unittest(testclass) Modified: python/branches/py3k/Lib/genericpath.py ============================================================================== --- python/branches/py3k/Lib/genericpath.py (original) +++ python/branches/py3k/Lib/genericpath.py Sun Mar 14 11:23:39 2010 @@ -15,7 +15,7 @@ def exists(path): """Test whether a path exists. Returns False for broken symbolic links""" try: - st = os.stat(path) + os.stat(path) except os.error: return False return True Modified: python/branches/py3k/Lib/mimetypes.py ============================================================================== --- python/branches/py3k/Lib/mimetypes.py (original) +++ python/branches/py3k/Lib/mimetypes.py Sun Mar 14 11:23:39 2010 @@ -538,7 +538,6 @@ if __name__ == '__main__': - import sys import getopt USAGE = """\ Modified: python/branches/py3k/Lib/posixpath.py ============================================================================== --- python/branches/py3k/Lib/posixpath.py (original) +++ python/branches/py3k/Lib/posixpath.py Sun Mar 14 11:23:39 2010 @@ -158,7 +158,7 @@ def lexists(path): """Test whether a path exists. Returns True for broken symbolic links""" try: - st = os.lstat(path) + os.lstat(path) except os.error: return False return True Modified: python/branches/py3k/Lib/subprocess.py ============================================================================== --- python/branches/py3k/Lib/subprocess.py (original) +++ python/branches/py3k/Lib/subprocess.py Sun Mar 14 11:23:39 2010 @@ -930,7 +930,7 @@ """Wait for child process to terminate. Returns returncode attribute.""" if self.returncode is None: - obj = WaitForSingleObject(self._handle, INFINITE) + WaitForSingleObject(self._handle, INFINITE) self.returncode = GetExitCodeProcess(self._handle) return self.returncode Modified: python/branches/py3k/Lib/test/test_csv.py ============================================================================== --- python/branches/py3k/Lib/test/test_csv.py (original) +++ python/branches/py3k/Lib/test/test_csv.py Sun Mar 14 11:23:39 2010 @@ -488,10 +488,10 @@ def test_null(self): self.writerAssertEqual([], '') - def test_single(self): + def test_single_writer(self): self.writerAssertEqual([['abc']], 'abc\r\n') - def test_simple(self): + def test_simple_writer(self): self.writerAssertEqual([[1, 2, 'abc', 3, 4]], '1,2,abc,3,4\r\n') def test_quotes(self): Modified: python/branches/py3k/Lib/test/test_docxmlrpc.py ============================================================================== --- python/branches/py3k/Lib/test/test_docxmlrpc.py (original) +++ python/branches/py3k/Lib/test/test_docxmlrpc.py Sun Mar 14 11:23:39 2010 @@ -4,6 +4,7 @@ from test import support import threading import time +import socket import unittest PORT = None Modified: python/branches/py3k/Lib/test/test_fnmatch.py ============================================================================== --- python/branches/py3k/Lib/test/test_fnmatch.py (original) +++ python/branches/py3k/Lib/test/test_fnmatch.py Sun Mar 14 11:23:39 2010 @@ -50,6 +50,11 @@ self.assertRaises(TypeError, fnmatchcase, 'test', b'*') self.assertRaises(TypeError, fnmatchcase, b'test', '*') + def test_fnmatchcase(self): + check = self.check_match + check('AbC', 'abc', 0) + check('abc', 'AbC', 0) + def test_bytes(self): self.check_match(b'test', b'te*') self.check_match(b'test\xff', b'te*\xff') Modified: python/branches/py3k/Lib/test/test_functools.py ============================================================================== --- python/branches/py3k/Lib/test/test_functools.py (original) +++ python/branches/py3k/Lib/test/test_functools.py Sun Mar 14 11:23:39 2010 @@ -45,9 +45,17 @@ # attributes should not be writable if not isinstance(self.thetype, type): return - self.assertRaises(TypeError, setattr, p, 'func', map) - self.assertRaises(TypeError, setattr, p, 'args', (1, 2)) - self.assertRaises(TypeError, setattr, p, 'keywords', dict(a=1, b=2)) + self.assertRaises(AttributeError, setattr, p, 'func', map) + self.assertRaises(AttributeError, setattr, p, 'args', (1, 2)) + self.assertRaises(AttributeError, setattr, p, 'keywords', dict(a=1, b=2)) + + p = self.thetype(hex) + try: + del p.__dict__ + except TypeError: + pass + else: + self.fail('partial object allowed __dict__ to be deleted') def test_argument_checking(self): self.assertRaises(TypeError, self.thetype) # need at least a func arg @@ -123,15 +131,6 @@ self.assertRaises(ZeroDivisionError, self.thetype(f), 1, 0) self.assertRaises(ZeroDivisionError, self.thetype(f, y=0), 1) - def test_attributes(self): - p = self.thetype(hex) - try: - del p.__dict__ - except TypeError: - pass - else: - self.fail('partial object allowed __dict__ to be deleted') - def test_weakref(self): f = self.thetype(int, base=16) p = proxy(f) Modified: python/branches/py3k/Lib/test/test_long.py ============================================================================== --- python/branches/py3k/Lib/test/test_long.py (original) +++ python/branches/py3k/Lib/test/test_long.py Sun Mar 14 11:23:39 2010 @@ -502,7 +502,7 @@ self.d = d assert float(n) / float(d) == value else: - raise TypeError("can't deal with %r" % val) + raise TypeError("can't deal with %r" % value) def _cmp__(self, other): if not isinstance(other, Rat): Modified: python/branches/py3k/Lib/test/test_minidom.py ============================================================================== --- python/branches/py3k/Lib/test/test_minidom.py (original) +++ python/branches/py3k/Lib/test/test_minidom.py Sun Mar 14 11:23:39 2010 @@ -1449,12 +1449,13 @@ self.confirm(len(n1.entities) == len(n2.entities) and len(n1.notations) == len(n2.notations)) for i in range(len(n1.notations)): + # XXX this loop body doesn't seem to be executed? no1 = n1.notations.item(i) no2 = n1.notations.item(i) self.confirm(no1.name == no2.name and no1.publicId == no2.publicId and no1.systemId == no2.systemId) - statck.append((no1, no2)) + stack.append((no1, no2)) for i in range(len(n1.entities)): e1 = n1.entities.item(i) e2 = n2.entities.item(i) Modified: python/branches/py3k/Lib/test/test_multiprocessing.py ============================================================================== --- python/branches/py3k/Lib/test/test_multiprocessing.py (original) +++ python/branches/py3k/Lib/test/test_multiprocessing.py Sun Mar 14 11:23:39 2010 @@ -1600,10 +1600,10 @@ return x = Value('i', 7, lock=lock) - y = Value(ctypes.c_double, 1.0/3.0, lock=lock) + y = Value(c_double, 1.0/3.0, lock=lock) foo = Value(_Foo, 3, 2, lock=lock) - arr = Array('d', list(range(10)), lock=lock) - string = Array('c', 20, lock=lock) + arr = self.Array('d', list(range(10)), lock=lock) + string = self.Array('c', 20, lock=lock) string.value = 'hello' p = self.Process(target=self._double, args=(x, y, foo, arr, string)) Modified: python/branches/py3k/Lib/test/test_optparse.py ============================================================================== --- python/branches/py3k/Lib/test/test_optparse.py (original) +++ python/branches/py3k/Lib/test/test_optparse.py Sun Mar 14 11:23:39 2010 @@ -441,7 +441,7 @@ return int(value) else: return int(value[:-1]) * _time_units[value[-1]] - except ValueError as IndexError: + except (ValueError, IndexError): raise OptionValueError( 'option %s: invalid duration: %r' % (opt, value)) Modified: python/branches/py3k/Lib/test/test_pep292.py ============================================================================== --- python/branches/py3k/Lib/test/test_pep292.py (original) +++ python/branches/py3k/Lib/test/test_pep292.py Sun Mar 14 11:23:39 2010 @@ -86,13 +86,6 @@ s = Template('$who likes $100') raises(ValueError, s.substitute, dict(who='tim')) - def test_delimiter_override(self): - class PieDelims(Template): - delimiter = '@' - s = PieDelims('@who likes to eat a bag of @{what} worth $100') - self.assertEqual(s.substitute(dict(who='tim', what='ham')), - 'tim likes to eat a bag of ham worth $100') - def test_idpattern_override(self): class PathPattern(Template): idpattern = r'[_a-z][._a-z0-9]*' @@ -183,6 +176,12 @@ raises(ValueError, s.substitute, dict(gift='bud', who='you')) eq(s.safe_substitute(), 'this &gift is for &{who} &') + class PieDelims(Template): + delimiter = '@' + s = PieDelims('@who likes to eat a bag of @{what} worth $100') + self.assertEqual(s.substitute(dict(who='tim', what='ham')), + 'tim likes to eat a bag of ham worth $100') + def test_main(): from test import support Modified: python/branches/py3k/Lib/test/test_platform.py ============================================================================== --- python/branches/py3k/Lib/test/test_platform.py (original) +++ python/branches/py3k/Lib/test/test_platform.py Sun Mar 14 11:23:39 2010 @@ -175,8 +175,10 @@ if os.path.isdir(sys.executable) and \ os.path.exists(sys.executable+'.exe'): # Cygwin horror - executable = executable + '.exe' - res = platform.libc_ver(sys.executable) + executable = sys.executable + '.exe' + else: + executable = sys.executable + res = platform.libc_ver(executable) def test_parse_release_file(self): Modified: python/branches/py3k/Lib/test/test_posixpath.py ============================================================================== --- python/branches/py3k/Lib/test/test_posixpath.py (original) +++ python/branches/py3k/Lib/test/test_posixpath.py Sun Mar 14 11:23:39 2010 @@ -2,7 +2,7 @@ from test import support, test_genericpath import posixpath, os -from posixpath import realpath, abspath, join, dirname, basename, relpath +from posixpath import realpath, abspath, dirname, basename # An absolute path to a temporary filename for testing. We can't rely on TESTFN # being an absolute path, so we need this. Modified: python/branches/py3k/Lib/test/test_richcmp.py ============================================================================== --- python/branches/py3k/Lib/test/test_richcmp.py (original) +++ python/branches/py3k/Lib/test/test_richcmp.py Sun Mar 14 11:23:39 2010 @@ -192,12 +192,12 @@ def test_misbehavin(self): class Misb: - def __lt__(self, other): return 0 - def __gt__(self, other): return 0 - def __eq__(self, other): return 0 - def __le__(self, other): raise TestFailed("This shouldn't happen") - def __ge__(self, other): raise TestFailed("This shouldn't happen") - def __ne__(self, other): raise TestFailed("This shouldn't happen") + def __lt__(self_, other): return 0 + def __gt__(self_, other): return 0 + def __eq__(self_, other): return 0 + def __le__(self_, other): self.fail("This shouldn't happen") + def __ge__(self_, other): self.fail("This shouldn't happen") + def __ne__(self_, other): self.fail("This shouldn't happen") a = Misb() b = Misb() self.assertEqual(a> bad data " "<<{outdata:s}>> ({nout:d}) received; " "expected <<{indata:s}>> ({nin:d})\n".format( @@ -1110,12 +1110,12 @@ ) except ValueError as e: if expect_success: - raise support.TestFailed( + self.fail( "Failed to send with method <<{name:s}>>; " "expected to succeed.\n".format(name=meth_name) ) if not str(e).startswith(meth_name): - raise support.TestFailed( + self.fail( "Method <<{name:s}>> failed with unexpected " "exception message: {exp:s}\n".format( name=meth_name, exp=e @@ -1129,7 +1129,7 @@ outdata = recv_meth(*args) outdata = str(outdata, 'ASCII', 'strict') if outdata != indata.lower(): - raise support.TestFailed( + self.fail( "While receiving with <<{name:s}>> bad data " "<<{outdata:s}>> ({nout:d}) received; " "expected <<{indata:s}>> ({nin:d})\n".format( @@ -1140,12 +1140,12 @@ ) except ValueError as e: if expect_success: - raise support.TestFailed( + self.fail( "Failed to receive with method <<{name:s}>>; " "expected to succeed.\n".format(name=meth_name) ) if not str(e).startswith(meth_name): - raise support.TestFailed( + self.fail( "Method <<{name:s}>> failed with unexpected " "exception message: {exp:s}\n".format( name=meth_name, exp=e Modified: python/branches/py3k/Lib/test/test_sysconfig.py ============================================================================== --- python/branches/py3k/Lib/test/test_sysconfig.py (original) +++ python/branches/py3k/Lib/test/test_sysconfig.py Sun Mar 14 11:23:39 2010 @@ -9,6 +9,7 @@ import test import os import subprocess +import shutil from copy import copy, deepcopy from test.support import run_unittest, TESTFN, unlink, get_attribute Modified: python/branches/py3k/Lib/test/test_tempfile.py ============================================================================== --- python/branches/py3k/Lib/test/test_tempfile.py (original) +++ python/branches/py3k/Lib/test/test_tempfile.py Sun Mar 14 11:23:39 2010 @@ -127,7 +127,7 @@ if i == 20: break except: - failOnException("iteration") + self.failOnException("iteration") test_classes.append(test__RandomNameSequence) Modified: python/branches/py3k/Lib/test/test_threaded_import.py ============================================================================== --- python/branches/py3k/Lib/test/test_threaded_import.py (original) +++ python/branches/py3k/Lib/test/test_threaded_import.py Sun Mar 14 11:23:39 2010 @@ -6,6 +6,7 @@ # randrange, and then Python hangs. import _thread as thread +import unittest from test.support import verbose, TestFailed critical_section = thread.allocate_lock() Modified: python/branches/py3k/Lib/test/test_zipimport.py ============================================================================== --- python/branches/py3k/Lib/test/test_zipimport.py (original) +++ python/branches/py3k/Lib/test/test_zipimport.py Sun Mar 14 11:23:39 2010 @@ -227,7 +227,7 @@ mod_path = packdir2 + TESTMOD mod_name = module_path_to_dotted_name(mod_path) - pkg = __import__(mod_name) + __import__(mod_name) mod = sys.modules[mod_name] self.assertEquals(zi.get_source(TESTPACK), None) self.assertEquals(zi.get_source(mod_path), None) @@ -271,7 +271,7 @@ mod_path = TESTPACK2 + os.sep + TESTMOD mod_name = module_path_to_dotted_name(mod_path) - pkg = __import__(mod_name) + __import__(mod_name) mod = sys.modules[mod_name] self.assertEquals(zi.get_source(TESTPACK2), None) self.assertEquals(zi.get_source(mod_path), None) Modified: python/branches/py3k/Lib/unittest/case.py ============================================================================== --- python/branches/py3k/Lib/unittest/case.py (original) +++ python/branches/py3k/Lib/unittest/case.py Sun Mar 14 11:23:39 2010 @@ -96,7 +96,7 @@ self.obj_name = str(callable_obj) else: self.obj_name = None - self.expected_regex = expected_regexp + self.expected_regexp = expected_regexp def __enter__(self): return self @@ -118,10 +118,10 @@ return False # store exception, without traceback, for later retrieval self.exception = exc_value.with_traceback(None) - if self.expected_regex is None: + if self.expected_regexp is None: return True - expected_regexp = self.expected_regex + expected_regexp = self.expected_regexp if isinstance(expected_regexp, (bytes, str)): expected_regexp = re.compile(expected_regexp) if not expected_regexp.search(str(exc_value)): @@ -865,12 +865,12 @@ with context: callable_obj(*args, **kwargs) - def assertRegexpMatches(self, text, expected_regex, msg=None): - if isinstance(expected_regex, (str, bytes)): - expected_regex = re.compile(expected_regex) - if not expected_regex.search(text): + def assertRegexpMatches(self, text, expected_regexp, msg=None): + if isinstance(expected_regexp, (str, bytes)): + expected_regexp = re.compile(expected_regexp) + if not expected_regexp.search(text): msg = msg or "Regexp didn't match" - msg = '%s: %r not found in %r' % (msg, expected_regex.pattern, text) + msg = '%s: %r not found in %r' % (msg, expected_regexp.pattern, text) raise self.failureException(msg) From python-checkins at python.org Sun Mar 14 11:24:30 2010 From: python-checkins at python.org (georg.brandl) Date: Sun, 14 Mar 2010 11:24:30 +0100 (CET) Subject: [Python-checkins] r78956 - python/branches/py3k Message-ID: <20100314102430.0A6EFF9A5@mail.python.org> Author: georg.brandl Date: Sun Mar 14 11:24:29 2010 New Revision: 78956 Log: Blocked revisions 78949 via svnmerge ........ r78949 | georg.brandl | 2010-03-14 10:50:54 +0100 (So, 14 M?r 2010) | 1 line Format and rewrap 2.7 NEWS consistently. ........ Modified: python/branches/py3k/ (props changed) From python-checkins at python.org Sun Mar 14 11:45:50 2010 From: python-checkins at python.org (georg.brandl) Date: Sun, 14 Mar 2010 11:45:50 +0100 (CET) Subject: [Python-checkins] r78957 - in python/branches/py3k: Lib/test/regrtest.py Lib/test/test__locale.py Lib/test/test_abstract_numbers.py Lib/test/test_builtin.py Lib/test/test_cmath.py Lib/test/test_cmd_line.py Lib/test/test_cmd_line_script.py Lib/test/test_collections.py Lib/test/test_compileall.py Lib/test/test_contextlib.py Lib/test/test_decimal.py Lib/test/test_deque.py Lib/test/test_descr.py Lib/test/test_epoll.py Lib/test/test_file.py Lib/test/test_filecmp.py Lib/test/test_fileio.py Lib/test/test_float.py Lib/test/test_fork1.py Lib/test/test_frozen.py Lib/test/test_getopt.py Lib/test/test_hashlib.py Lib/test/test_heapq.py Lib/test/test_imaplib.py Lib/test/test_inspect.py Lib/test/test_io.py Lib/test/test_long.py Lib/test/test_memoryio.py Lib/test/test_multibytecodec.py Lib/test/test_ntpath.py Lib/test/test_optparse.py Lib/test/test_os.py Lib/test/test_parser.py Lib/test/test_pdb.py Lib/test/test_print.py Lib/test/test_profile.py Lib/test/test_pyexpat.py Lib/test/test_queue.py Lib/test/test_random.py Lib/test/test_re.py Lib/test/test_set.py Lib/test/test_socketserver.py Lib/test/test_sqlite.py Lib/test/test_ssl.py Lib/test/test_strftime.py Lib/test/test_structmembers.py Lib/test/test_sys.py Lib/test/test_sysconfig.py Lib/test/test_tarfile.py Lib/test/test_tempfile.py Lib/test/test_ttk_guionly.py Lib/test/test_ttk_textonly.py Lib/test/test_types.py Lib/test/test_urllib2net.py Lib/test/test_zipimport_support.py Message-ID: <20100314104550.B86D8F9F3@mail.python.org> Author: georg.brandl Date: Sun Mar 14 11:45:50 2010 New Revision: 78957 Log: Merged revisions 78093 via svnmerge from svn+ssh://pythondev at svn.python.org/python/trunk ........ r78093 | georg.brandl | 2010-02-07 18:03:15 +0100 (So, 07 Feb 2010) | 1 line Remove unused imports in test modules. ........ Modified: python/branches/py3k/ (props changed) python/branches/py3k/Lib/test/regrtest.py python/branches/py3k/Lib/test/test__locale.py python/branches/py3k/Lib/test/test_abstract_numbers.py python/branches/py3k/Lib/test/test_builtin.py python/branches/py3k/Lib/test/test_cmath.py python/branches/py3k/Lib/test/test_cmd_line.py python/branches/py3k/Lib/test/test_cmd_line_script.py python/branches/py3k/Lib/test/test_collections.py python/branches/py3k/Lib/test/test_compileall.py python/branches/py3k/Lib/test/test_contextlib.py python/branches/py3k/Lib/test/test_decimal.py python/branches/py3k/Lib/test/test_deque.py python/branches/py3k/Lib/test/test_descr.py python/branches/py3k/Lib/test/test_epoll.py python/branches/py3k/Lib/test/test_file.py python/branches/py3k/Lib/test/test_filecmp.py python/branches/py3k/Lib/test/test_fileio.py python/branches/py3k/Lib/test/test_float.py python/branches/py3k/Lib/test/test_fork1.py python/branches/py3k/Lib/test/test_frozen.py python/branches/py3k/Lib/test/test_getopt.py python/branches/py3k/Lib/test/test_hashlib.py python/branches/py3k/Lib/test/test_heapq.py python/branches/py3k/Lib/test/test_imaplib.py python/branches/py3k/Lib/test/test_inspect.py python/branches/py3k/Lib/test/test_io.py python/branches/py3k/Lib/test/test_long.py python/branches/py3k/Lib/test/test_memoryio.py python/branches/py3k/Lib/test/test_multibytecodec.py python/branches/py3k/Lib/test/test_ntpath.py python/branches/py3k/Lib/test/test_optparse.py python/branches/py3k/Lib/test/test_os.py python/branches/py3k/Lib/test/test_parser.py python/branches/py3k/Lib/test/test_pdb.py python/branches/py3k/Lib/test/test_print.py python/branches/py3k/Lib/test/test_profile.py python/branches/py3k/Lib/test/test_pyexpat.py python/branches/py3k/Lib/test/test_queue.py python/branches/py3k/Lib/test/test_random.py python/branches/py3k/Lib/test/test_re.py python/branches/py3k/Lib/test/test_set.py python/branches/py3k/Lib/test/test_socketserver.py python/branches/py3k/Lib/test/test_sqlite.py python/branches/py3k/Lib/test/test_ssl.py python/branches/py3k/Lib/test/test_strftime.py python/branches/py3k/Lib/test/test_structmembers.py python/branches/py3k/Lib/test/test_sys.py python/branches/py3k/Lib/test/test_sysconfig.py python/branches/py3k/Lib/test/test_tarfile.py python/branches/py3k/Lib/test/test_tempfile.py python/branches/py3k/Lib/test/test_ttk_guionly.py python/branches/py3k/Lib/test/test_ttk_textonly.py python/branches/py3k/Lib/test/test_types.py python/branches/py3k/Lib/test/test_urllib2net.py python/branches/py3k/Lib/test/test_zipimport_support.py Modified: python/branches/py3k/Lib/test/regrtest.py ============================================================================== --- python/branches/py3k/Lib/test/regrtest.py (original) +++ python/branches/py3k/Lib/test/regrtest.py Sun Mar 14 11:45:50 2010 @@ -146,7 +146,6 @@ """ import getopt -import itertools import json import os import random @@ -509,8 +508,8 @@ if use_mp: from threading import Thread - from queue import Queue, Empty - from subprocess import Popen, PIPE, STDOUT + from queue import Queue + from subprocess import Popen, PIPE from collections import deque debug_output_pat = re.compile(r"\[\d+ refs\]$") pending = deque() Modified: python/branches/py3k/Lib/test/test__locale.py ============================================================================== --- python/branches/py3k/Lib/test/test__locale.py (original) +++ python/branches/py3k/Lib/test/test__locale.py Sun Mar 14 11:45:50 2010 @@ -1,4 +1,4 @@ -from test.support import verbose, run_unittest +from test.support import run_unittest from _locale import (setlocale, LC_ALL, LC_CTYPE, LC_NUMERIC, localeconv, Error) try: from _locale import (RADIXCHAR, THOUSEP, nl_langinfo) Modified: python/branches/py3k/Lib/test/test_abstract_numbers.py ============================================================================== --- python/branches/py3k/Lib/test/test_abstract_numbers.py (original) +++ python/branches/py3k/Lib/test/test_abstract_numbers.py Sun Mar 14 11:45:50 2010 @@ -4,7 +4,6 @@ import operator import unittest from numbers import Complex, Real, Rational, Integral -from numbers import Number from test import support class TestNumbers(unittest.TestCase): Modified: python/branches/py3k/Lib/test/test_builtin.py ============================================================================== --- python/branches/py3k/Lib/test/test_builtin.py (original) +++ python/branches/py3k/Lib/test/test_builtin.py Sun Mar 14 11:45:50 2010 @@ -1,12 +1,12 @@ # Python test set -- built-in functions import platform -import test.support, unittest -from test.support import fcmp, TESTFN, unlink, run_unittest, \ - run_with_locale +import unittest +from test.support import fcmp, TESTFN, unlink, run_unittest from operator import neg -import sys, warnings, random, collections, io, fractions +import sys, warnings, random, collections, io + warnings.filterwarnings("ignore", "hex../oct.. of negative int", FutureWarning, __name__) warnings.filterwarnings("ignore", "integer argument expected", Modified: python/branches/py3k/Lib/test/test_cmath.py ============================================================================== --- python/branches/py3k/Lib/test/test_cmath.py (original) +++ python/branches/py3k/Lib/test/test_cmath.py Sun Mar 14 11:45:50 2010 @@ -1,7 +1,6 @@ from test.support import run_unittest from test.test_math import parse_testfile, test_file import unittest -import os, sys import cmath, math from cmath import phase, polar, rect, pi Modified: python/branches/py3k/Lib/test/test_cmd_line.py ============================================================================== --- python/branches/py3k/Lib/test/test_cmd_line.py (original) +++ python/branches/py3k/Lib/test/test_cmd_line.py Sun Mar 14 11:45:50 2010 @@ -2,7 +2,6 @@ # All tests are executed with environment variables ignored # See test_cmd_line_script.py for testing of script execution -import os import test.support, unittest import os import sys Modified: python/branches/py3k/Lib/test/test_cmd_line_script.py ============================================================================== --- python/branches/py3k/Lib/test/test_cmd_line_script.py (original) +++ python/branches/py3k/Lib/test/test_cmd_line_script.py Sun Mar 14 11:45:50 2010 @@ -3,9 +3,8 @@ import unittest import os import os.path -import sys import test.support -from test.script_helper import (spawn_python, kill_python, run_python, +from test.script_helper import (run_python, temp_dir, make_script, compile_script, make_pkg, make_zip_script, make_zip_pkg) Modified: python/branches/py3k/Lib/test/test_collections.py ============================================================================== --- python/branches/py3k/Lib/test/test_collections.py (original) +++ python/branches/py3k/Lib/test/test_collections.py Sun Mar 14 11:45:50 2010 @@ -7,7 +7,6 @@ from test import mapping_tests import pickle, copy from random import randrange, shuffle -import operator import keyword import re import sys Modified: python/branches/py3k/Lib/test/test_compileall.py ============================================================================== --- python/branches/py3k/Lib/test/test_compileall.py (original) +++ python/branches/py3k/Lib/test/test_compileall.py Sun Mar 14 11:45:50 2010 @@ -4,9 +4,7 @@ import py_compile import shutil import struct -import sys import tempfile -import time from test import support import unittest Modified: python/branches/py3k/Lib/test/test_contextlib.py ============================================================================== --- python/branches/py3k/Lib/test/test_contextlib.py (original) +++ python/branches/py3k/Lib/test/test_contextlib.py Sun Mar 14 11:45:50 2010 @@ -1,9 +1,7 @@ """Unit tests for contextlib.py, and other context managers.""" -import sys import os -import decimal import sys import tempfile import unittest Modified: python/branches/py3k/Lib/test/test_decimal.py ============================================================================== --- python/branches/py3k/Lib/test/test_decimal.py (original) +++ python/branches/py3k/Lib/test/test_decimal.py Sun Mar 14 11:45:50 2010 @@ -24,7 +24,6 @@ with the corresponding argument. """ -import glob import math import os, sys import pickle, copy Modified: python/branches/py3k/Lib/test/test_deque.py ============================================================================== --- python/branches/py3k/Lib/test/test_deque.py (original) +++ python/branches/py3k/Lib/test/test_deque.py Sun Mar 14 11:45:50 2010 @@ -7,7 +7,6 @@ import pickle from io import StringIO import random -import os BIG = 100000 Modified: python/branches/py3k/Lib/test/test_descr.py ============================================================================== --- python/branches/py3k/Lib/test/test_descr.py (original) +++ python/branches/py3k/Lib/test/test_descr.py Sun Mar 14 11:45:50 2010 @@ -624,7 +624,6 @@ def test_module_subclasses(self): # Testing Python subclass of module... log = [] - import types, sys MT = type(sys) class MM(MT): def __init__(self, name): @@ -1006,7 +1005,6 @@ # Test cyclical leaks [SF bug 519621] class F(object): __slots__ = ['a', 'b'] - log = [] s = F() s.a = [Counted(), s] self.assertEqual(Counted.counter, 1) @@ -1015,7 +1013,7 @@ self.assertEqual(Counted.counter, 0) # Test lookup leaks [SF bug 572567] - import sys,gc + import gc if hasattr(gc, 'get_objects'): class G(object): def __eq__(self, other): @@ -2038,7 +2036,6 @@ ## self.assertIn('__self__', dir(a.Amethod)) # Try a module subclass. - import sys class M(type(sys)): pass minstance = M("m") @@ -3206,7 +3203,6 @@ self.fail("d.foo should be undefined now") # Test a nasty bug in recurse_down_subclasses() - import gc class A(object): pass class B(A): @@ -3996,7 +3992,6 @@ def test_file_fault(self): # Testing sys.stdout is changed in getattr... - import sys test_stdout = sys.stdout class StdoutGuard: def __getattr__(self, attr): @@ -4087,8 +4082,6 @@ def test_not_implemented(self): # Testing NotImplemented... # all binary methods should be able to return a NotImplemented - import sys - import types import operator def specialmethod(self, other): Modified: python/branches/py3k/Lib/test/test_epoll.py ============================================================================== --- python/branches/py3k/Lib/test/test_epoll.py (original) +++ python/branches/py3k/Lib/test/test_epoll.py Sun Mar 14 11:45:50 2010 @@ -21,12 +21,10 @@ """ Tests for epoll wrapper. """ -import os import socket import errno import time import select -import tempfile import unittest from test import support Modified: python/branches/py3k/Lib/test/test_file.py ============================================================================== --- python/branches/py3k/Lib/test/test_file.py (original) +++ python/branches/py3k/Lib/test/test_file.py Sun Mar 14 11:45:50 2010 @@ -7,7 +7,7 @@ import io import _pyio as pyio -from test.support import TESTFN, findfile, run_unittest +from test.support import TESTFN, run_unittest from collections import UserList class AutoFileTests(unittest.TestCase): Modified: python/branches/py3k/Lib/test/test_filecmp.py ============================================================================== --- python/branches/py3k/Lib/test/test_filecmp.py (original) +++ python/branches/py3k/Lib/test/test_filecmp.py Sun Mar 14 11:45:50 2010 @@ -1,5 +1,5 @@ -import os, filecmp, shutil, tempfile, shutil +import os, filecmp, shutil, tempfile import unittest from test import support Modified: python/branches/py3k/Lib/test/test_fileio.py ============================================================================== --- python/branches/py3k/Lib/test/test_fileio.py (original) +++ python/branches/py3k/Lib/test/test_fileio.py Sun Mar 14 11:45:50 2010 @@ -8,9 +8,7 @@ from weakref import proxy from functools import wraps -from test.support import (TESTFN, findfile, check_warnings, run_unittest, - make_bad_fd) -from collections import UserList +from test.support import TESTFN, check_warnings, run_unittest, make_bad_fd from _io import FileIO as _FileIO Modified: python/branches/py3k/Lib/test/test_float.py ============================================================================== --- python/branches/py3k/Lib/test/test_float.py (original) +++ python/branches/py3k/Lib/test/test_float.py Sun Mar 14 11:45:50 2010 @@ -546,7 +546,6 @@ if float.__getformat__("double").startswith("IEEE"): def test_negative_zero(self): - import math def pos_pos(): return 0.0, math.atan2(0.0, -1) def pos_neg(): Modified: python/branches/py3k/Lib/test/test_fork1.py ============================================================================== --- python/branches/py3k/Lib/test/test_fork1.py (original) +++ python/branches/py3k/Lib/test/test_fork1.py Sun Mar 14 11:45:50 2010 @@ -1,7 +1,6 @@ """This test checks for correct fork() behavior. """ -import errno import imp import os import signal Modified: python/branches/py3k/Lib/test/test_frozen.py ============================================================================== --- python/branches/py3k/Lib/test/test_frozen.py (original) +++ python/branches/py3k/Lib/test/test_frozen.py Sun Mar 14 11:45:50 2010 @@ -2,7 +2,7 @@ from test.support import captured_stdout, run_unittest import unittest -import sys, os +import sys class FrozenTests(unittest.TestCase): def test_frozen(self): Modified: python/branches/py3k/Lib/test/test_getopt.py ============================================================================== --- python/branches/py3k/Lib/test/test_getopt.py (original) +++ python/branches/py3k/Lib/test/test_getopt.py Sun Mar 14 11:45:50 2010 @@ -5,7 +5,6 @@ import unittest import getopt -import os sentinel = object() Modified: python/branches/py3k/Lib/test/test_hashlib.py ============================================================================== --- python/branches/py3k/Lib/test/test_hashlib.py (original) +++ python/branches/py3k/Lib/test/test_hashlib.py Sun Mar 14 11:45:50 2010 @@ -8,7 +8,6 @@ import array import hashlib -from io import StringIO import itertools import sys try: Modified: python/branches/py3k/Lib/test/test_heapq.py ============================================================================== --- python/branches/py3k/Lib/test/test_heapq.py (original) +++ python/branches/py3k/Lib/test/test_heapq.py Sun Mar 14 11:45:50 2010 @@ -370,8 +370,6 @@ def test_main(verbose=None): - from types import BuiltinFunctionType - test_classes = [TestHeapPython, TestHeapC, TestErrorHandling] support.run_unittest(*test_classes) Modified: python/branches/py3k/Lib/test/test_imaplib.py ============================================================================== --- python/branches/py3k/Lib/test/test_imaplib.py (original) +++ python/branches/py3k/Lib/test/test_imaplib.py Sun Mar 14 11:45:50 2010 @@ -7,10 +7,7 @@ from contextlib import contextmanager import imaplib import os.path -import select -import socket import socketserver -import sys import time from test.support import reap_threads, verbose Modified: python/branches/py3k/Lib/test/test_inspect.py ============================================================================== --- python/branches/py3k/Lib/test/test_inspect.py (original) +++ python/branches/py3k/Lib/test/test_inspect.py Sun Mar 14 11:45:50 2010 @@ -6,7 +6,7 @@ import collections from os.path import normcase -from test.support import TESTFN, run_unittest +from test.support import run_unittest from test import inspect_fodder as mod from test import inspect_fodder2 as mod2 Modified: python/branches/py3k/Lib/test/test_io.py ============================================================================== --- python/branches/py3k/Lib/test/test_io.py (original) +++ python/branches/py3k/Lib/test/test_io.py Sun Mar 14 11:45:50 2010 @@ -28,9 +28,8 @@ import unittest import warnings import weakref -import gc import abc -from itertools import chain, cycle, count +from itertools import cycle, count from collections import deque from test import support Modified: python/branches/py3k/Lib/test/test_long.py ============================================================================== --- python/branches/py3k/Lib/test/test_long.py (original) +++ python/branches/py3k/Lib/test/test_long.py Sun Mar 14 11:45:50 2010 @@ -402,8 +402,6 @@ self.assertEqual(int(float(x)), y) def test_float_overflow(self): - import math - for x in -2.0, -1.0, 0.0, 1.0, 2.0: self.assertEqual(float(int(x)), x) @@ -435,8 +433,6 @@ "float(shuge) should not equal int(shuge)") def test_logs(self): - import math - LOG10E = math.log10(math.e) for exp in list(range(10)) + [100, 1000, 10000]: @@ -456,7 +452,6 @@ def test_mixed_compares(self): eq = self.assertEqual - import math # We're mostly concerned with that mixing floats and longs does the # right stuff, even when longs are too large to fit in a float. Modified: python/branches/py3k/Lib/test/test_memoryio.py ============================================================================== --- python/branches/py3k/Lib/test/test_memoryio.py (original) +++ python/branches/py3k/Lib/test/test_memoryio.py Sun Mar 14 11:45:50 2010 @@ -8,7 +8,6 @@ import io import _pyio as pyio -import sys import pickle class MemorySeekTestMixin: Modified: python/branches/py3k/Lib/test/test_multibytecodec.py ============================================================================== --- python/branches/py3k/Lib/test/test_multibytecodec.py (original) +++ python/branches/py3k/Lib/test/test_multibytecodec.py Sun Mar 14 11:45:50 2010 @@ -5,7 +5,6 @@ # from test import support -from test import test_multibytecodec_support from test.support import TESTFN import unittest, io, codecs, sys, os import _multibytecodec Modified: python/branches/py3k/Lib/test/test_ntpath.py ============================================================================== --- python/branches/py3k/Lib/test/test_ntpath.py (original) +++ python/branches/py3k/Lib/test/test_ntpath.py Sun Mar 14 11:45:50 2010 @@ -1,6 +1,6 @@ import ntpath import os -from test.support import verbose, TestFailed +from test.support import TestFailed from test import support, test_genericpath import unittest Modified: python/branches/py3k/Lib/test/test_optparse.py ============================================================================== --- python/branches/py3k/Lib/test/test_optparse.py (original) +++ python/branches/py3k/Lib/test/test_optparse.py Sun Mar 14 11:45:50 2010 @@ -16,9 +16,9 @@ from test import support -from optparse import make_option, Option, IndentedHelpFormatter, \ - TitledHelpFormatter, OptionParser, OptionContainer, OptionGroup, \ - SUPPRESS_HELP, SUPPRESS_USAGE, OptionError, OptionConflictError, \ +from optparse import make_option, Option, \ + TitledHelpFormatter, OptionParser, OptionGroup, \ + SUPPRESS_USAGE, OptionError, OptionConflictError, \ BadOptionError, OptionValueError, Values from optparse import _match_abbrev from optparse import _parse_num @@ -1224,7 +1224,6 @@ def variable_args(self, option, opt, value, parser): self.assertTrue(value is None) - done = 0 value = [] rargs = parser.rargs while rargs: Modified: python/branches/py3k/Lib/test/test_os.py ============================================================================== --- python/branches/py3k/Lib/test/test_os.py (original) +++ python/branches/py3k/Lib/test/test_os.py Sun Mar 14 11:45:50 2010 @@ -154,7 +154,6 @@ self.assertTrue(s == "foobar") def test_tmpnam(self): - import sys if not hasattr(os, "tmpnam"): return warnings.filterwarnings("ignore", "tmpnam", RuntimeWarning, @@ -215,8 +214,6 @@ self.assertEquals(result[stat.ST_SIZE], 3) self.assertEquals(result.st_size, 3) - import sys - # Make sure all the attributes are there members = dir(result) for name in dir(stat): Modified: python/branches/py3k/Lib/test/test_parser.py ============================================================================== --- python/branches/py3k/Lib/test/test_parser.py (original) +++ python/branches/py3k/Lib/test/test_parser.py Sun Mar 14 11:45:50 2010 @@ -1,5 +1,4 @@ import parser -import os import unittest import sys import operator Modified: python/branches/py3k/Lib/test/test_pdb.py ============================================================================== --- python/branches/py3k/Lib/test/test_pdb.py (original) +++ python/branches/py3k/Lib/test/test_pdb.py Sun Mar 14 11:45:50 2010 @@ -2,10 +2,7 @@ # specified test modules (RFE #5142). import imp -import os import sys -import doctest -import tempfile from test import support # This little helper class is essential for testing pdb under doctest. Modified: python/branches/py3k/Lib/test/test_print.py ============================================================================== --- python/branches/py3k/Lib/test/test_print.py (original) +++ python/branches/py3k/Lib/test/test_print.py Sun Mar 14 11:45:50 2010 @@ -8,7 +8,6 @@ import unittest from test import support -import sys try: # 3.x from io import StringIO Modified: python/branches/py3k/Lib/test/test_profile.py ============================================================================== --- python/branches/py3k/Lib/test/test_profile.py (original) +++ python/branches/py3k/Lib/test/test_profile.py Sun Mar 14 11:45:50 2010 @@ -1,6 +1,5 @@ """Test suite for the profile module.""" -import os import sys import pstats import unittest Modified: python/branches/py3k/Lib/test/test_pyexpat.py ============================================================================== --- python/branches/py3k/Lib/test/test_pyexpat.py (original) +++ python/branches/py3k/Lib/test/test_pyexpat.py Sun Mar 14 11:45:50 2010 @@ -5,7 +5,6 @@ import sys import unittest -import pyexpat from xml.parsers import expat from test.support import sortdict, run_unittest Modified: python/branches/py3k/Lib/test/test_queue.py ============================================================================== --- python/branches/py3k/Lib/test/test_queue.py (original) +++ python/branches/py3k/Lib/test/test_queue.py Sun Mar 14 11:45:50 2010 @@ -1,7 +1,6 @@ # Some simple queue module tests, plus some failure conditions # to ensure the Queue locks remain stable. import queue -import sys import threading import time import unittest Modified: python/branches/py3k/Lib/test/test_random.py ============================================================================== --- python/branches/py3k/Lib/test/test_random.py (original) +++ python/branches/py3k/Lib/test/test_random.py Sun Mar 14 11:45:50 2010 @@ -5,7 +5,7 @@ import time import pickle import warnings -from math import log, exp, sqrt, pi, fsum, sin +from math import log, exp, pi, fsum, sin from test import support class TestBasicOps(unittest.TestCase): Modified: python/branches/py3k/Lib/test/test_re.py ============================================================================== --- python/branches/py3k/Lib/test/test_re.py (original) +++ python/branches/py3k/Lib/test/test_re.py Sun Mar 14 11:45:50 2010 @@ -1,7 +1,7 @@ from test.support import verbose, run_unittest import re from re import Scanner -import sys, os, traceback +import sys, traceback from weakref import proxy # Misc tests from Tim Peters' re.doc @@ -748,7 +748,7 @@ self.assertRaises(TypeError, _sre.compile, {}, 0, []) def run_re_tests(): - from test.re_tests import benchmarks, tests, SUCCEED, FAIL, SYNTAX_ERROR + from test.re_tests import tests, SUCCEED, FAIL, SYNTAX_ERROR if verbose: print('Running re_tests test suite') else: Modified: python/branches/py3k/Lib/test/test_set.py ============================================================================== --- python/branches/py3k/Lib/test/test_set.py (original) +++ python/branches/py3k/Lib/test/test_set.py Sun Mar 14 11:45:50 2010 @@ -5,7 +5,6 @@ import operator import copy import pickle -import os from random import randrange, shuffle import sys import warnings Modified: python/branches/py3k/Lib/test/test_socketserver.py ============================================================================== --- python/branches/py3k/Lib/test/test_socketserver.py (original) +++ python/branches/py3k/Lib/test/test_socketserver.py Sun Mar 14 11:45:50 2010 @@ -3,7 +3,6 @@ """ import contextlib -import errno import imp import os import select @@ -11,13 +10,11 @@ import socket import tempfile import threading -import time import unittest import socketserver import test.support from test.support import reap_children, reap_threads, verbose -from test.support import TESTFN as TEST_FILE test.support.requires("network") Modified: python/branches/py3k/Lib/test/test_sqlite.py ============================================================================== --- python/branches/py3k/Lib/test/test_sqlite.py (original) +++ python/branches/py3k/Lib/test/test_sqlite.py Sun Mar 14 11:45:50 2010 @@ -1,4 +1,3 @@ -import unittest from test.support import run_unittest, import_module # Skip test if _sqlite3 module not installed Modified: python/branches/py3k/Lib/test/test_ssl.py ============================================================================== --- python/branches/py3k/Lib/test/test_ssl.py (original) +++ python/branches/py3k/Lib/test/test_ssl.py Sun Mar 14 11:45:50 2010 @@ -5,13 +5,10 @@ from test import support import socket import select -import errno -import subprocess import time import os import pprint import urllib.parse, urllib.request -import shutil import traceback import asyncore Modified: python/branches/py3k/Lib/test/test_strftime.py ============================================================================== --- python/branches/py3k/Lib/test/test_strftime.py (original) +++ python/branches/py3k/Lib/test/test_strftime.py Sun Mar 14 11:45:50 2010 @@ -4,7 +4,6 @@ import calendar import sys -import os import re from test import support import time Modified: python/branches/py3k/Lib/test/test_structmembers.py ============================================================================== --- python/branches/py3k/Lib/test/test_structmembers.py (original) +++ python/branches/py3k/Lib/test/test_structmembers.py Sun Mar 14 11:45:50 2010 @@ -6,7 +6,7 @@ LLONG_MAX, LLONG_MIN, ULLONG_MAX, \ PY_SSIZE_T_MAX, PY_SSIZE_T_MIN -import warnings, unittest, sys +import unittest from test import support ts=test_structmembersType(False, # T_BOOL Modified: python/branches/py3k/Lib/test/test_sys.py ============================================================================== --- python/branches/py3k/Lib/test/test_sys.py (original) +++ python/branches/py3k/Lib/test/test_sys.py Sun Mar 14 11:45:50 2010 @@ -461,7 +461,7 @@ sys._clear_type_cache() def test_ioencoding(self): - import subprocess,os + import subprocess env = dict(os.environ) # Test character: cent sign, encoded as 0x4A (ASCII J) in CP424, Modified: python/branches/py3k/Lib/test/test_sysconfig.py ============================================================================== --- python/branches/py3k/Lib/test/test_sysconfig.py (original) +++ python/branches/py3k/Lib/test/test_sysconfig.py Sun Mar 14 11:45:50 2010 @@ -6,7 +6,6 @@ """ import unittest import sys -import test import os import subprocess import shutil Modified: python/branches/py3k/Lib/test/test_tarfile.py ============================================================================== --- python/branches/py3k/Lib/test/test_tarfile.py (original) +++ python/branches/py3k/Lib/test/test_tarfile.py Sun Mar 14 11:45:50 2010 @@ -2,7 +2,6 @@ import os import io import shutil -import tempfile import io from hashlib import md5 import errno Modified: python/branches/py3k/Lib/test/test_tempfile.py ============================================================================== --- python/branches/py3k/Lib/test/test_tempfile.py (original) +++ python/branches/py3k/Lib/test/test_tempfile.py Sun Mar 14 11:45:50 2010 @@ -3,7 +3,6 @@ import os import sys import re -import errno import warnings import unittest Modified: python/branches/py3k/Lib/test/test_ttk_guionly.py ============================================================================== --- python/branches/py3k/Lib/test/test_ttk_guionly.py (original) +++ python/branches/py3k/Lib/test/test_ttk_guionly.py Sun Mar 14 11:45:50 2010 @@ -1,5 +1,4 @@ import os -import sys import unittest from test import support Modified: python/branches/py3k/Lib/test/test_ttk_textonly.py ============================================================================== --- python/branches/py3k/Lib/test/test_ttk_textonly.py (original) +++ python/branches/py3k/Lib/test/test_ttk_textonly.py Sun Mar 14 11:45:50 2010 @@ -1,5 +1,4 @@ import os -import sys from test import support # Skip this test if _tkinter does not exist. Modified: python/branches/py3k/Lib/test/test_types.py ============================================================================== --- python/branches/py3k/Lib/test/test_types.py (original) +++ python/branches/py3k/Lib/test/test_types.py Sun Mar 14 11:45:50 2010 @@ -18,7 +18,6 @@ if not {'x': 1}: self.fail('{\'x\': 1} is false instead of true') def f(): pass class C: pass - import sys x = C() if not f: self.fail('f is false instead of true') if not C: self.fail('C is false instead of true') Modified: python/branches/py3k/Lib/test/test_urllib2net.py ============================================================================== --- python/branches/py3k/Lib/test/test_urllib2net.py (original) +++ python/branches/py3k/Lib/test/test_urllib2net.py Sun Mar 14 11:45:50 2010 @@ -6,7 +6,6 @@ import os import socket -import sys import urllib.error import urllib.request @@ -75,8 +74,6 @@ class CloseSocketTest(unittest.TestCase): def test_close(self): - import socket, http.client, gc - # calling .close() on urllib2's response objects should close the # underlying socket @@ -150,7 +147,6 @@ ## self._test_urls(urls, self._extra_handlers()+[bauth, dauth]) def _test_urls(self, urls, handlers, retry=True): - import socket import time import logging debug = logging.getLogger("test_urllib2").debug Modified: python/branches/py3k/Lib/test/test_zipimport_support.py ============================================================================== --- python/branches/py3k/Lib/test/test_zipimport_support.py (original) +++ python/branches/py3k/Lib/test/test_zipimport_support.py Sun Mar 14 11:45:50 2010 @@ -2,7 +2,6 @@ # for working with modules located inside zipfiles # The tests are centralised in this fashion to make it easy to drop them # if a platform doesn't support zipimport -import unittest import test.support import os import os.path @@ -15,8 +14,7 @@ import linecache import pdb from test.script_helper import (spawn_python, kill_python, run_python, - temp_dir, make_script, compile_script, - make_pkg, make_zip_script, make_zip_pkg) + temp_dir, make_script, make_zip_script) verbose = test.support.verbose From python-checkins at python.org Sun Mar 14 11:51:01 2010 From: python-checkins at python.org (georg.brandl) Date: Sun, 14 Mar 2010 11:51:01 +0100 (CET) Subject: [Python-checkins] r78958 - in python/branches/py3k: Doc/bugs.rst Doc/whatsnew/2.6.rst Lib/test/test_fnmatch.py Lib/test/test_strftime.py Misc/NEWS Modules/selectmodule.c Message-ID: <20100314105101.9E5BFFA97@mail.python.org> Author: georg.brandl Date: Sun Mar 14 11:51:01 2010 New Revision: 78958 Log: Merged revisions 78101,78115,78117,78182,78188,78245,78386,78496 via svnmerge from svn+ssh://pythondev at svn.python.org/python/trunk ........ r78101 | georg.brandl | 2010-02-08 01:04:54 +0100 (Mo, 08 Feb 2010) | 1 line Fix test_fnmatch. ........ r78115 | georg.brandl | 2010-02-08 23:40:51 +0100 (Mo, 08 Feb 2010) | 1 line Fix missing string formatting placeholder. ........ r78117 | georg.brandl | 2010-02-08 23:48:37 +0100 (Mo, 08 Feb 2010) | 1 line Convert test failure from output-producing to self.fail(). ........ r78182 | georg.brandl | 2010-02-14 09:18:23 +0100 (So, 14 Feb 2010) | 1 line #7926: fix stray parens. ........ r78188 | georg.brandl | 2010-02-14 14:38:12 +0100 (So, 14 Feb 2010) | 1 line #7926: fix-up wording. ........ r78245 | georg.brandl | 2010-02-19 20:36:08 +0100 (Fr, 19 Feb 2010) | 1 line #7967: PyXML is no more. ........ r78386 | georg.brandl | 2010-02-23 22:48:57 +0100 (Di, 23 Feb 2010) | 1 line #6544: fix refleak in kqueue, occurring in certain error conditions. ........ r78496 | georg.brandl | 2010-02-27 15:58:08 +0100 (Sa, 27 Feb 2010) | 1 line Link to http://www.python.org/dev/workflow/ from bugs page. ........ Modified: python/branches/py3k/ (props changed) python/branches/py3k/Doc/bugs.rst python/branches/py3k/Doc/whatsnew/2.6.rst python/branches/py3k/Lib/test/test_fnmatch.py python/branches/py3k/Lib/test/test_strftime.py python/branches/py3k/Misc/NEWS python/branches/py3k/Modules/selectmodule.c Modified: python/branches/py3k/Doc/bugs.rst ============================================================================== --- python/branches/py3k/Doc/bugs.rst (original) +++ python/branches/py3k/Doc/bugs.rst Sun Mar 14 11:51:01 2010 @@ -23,10 +23,9 @@ http://docs.python.org/dev to see if the bug has been fixed. If the problem you're reporting is not already in the bug tracker, go back to -the Python Bug Tracker. If you don't already have a tracker account, select the -"Register" link in the sidebar and undergo the registration procedure. -Otherwise, if you're not logged in, enter your credentials and select "Login". -It is not possible to submit a bug report anonymously. +the Python Bug Tracker and log in. If you don't already have a tracker account, +select the "Register" link or, if you use OpenID, one of the OpenID provider +logos in the sidebar. It is not possible to submit a bug report anonymously. Being now logged in, you can submit a bug. Select the "Create New" link in the sidebar to open the bug reporting form. @@ -43,7 +42,8 @@ Each bug report will be assigned to a developer who will determine what needs to be done to correct the problem. You will receive an update each time action is -taken on the bug. +taken on the bug. See http://www.python.org/dev/workflow/ for a detailed +description of the issue workflow. .. seealso:: Modified: python/branches/py3k/Doc/whatsnew/2.6.rst ============================================================================== --- python/branches/py3k/Doc/whatsnew/2.6.rst (original) +++ python/branches/py3k/Doc/whatsnew/2.6.rst Sun Mar 14 11:51:01 2010 @@ -350,9 +350,10 @@ * The code in *BLOCK* is executed. -* If *BLOCK* raises an exception, the :meth:`__exit__(type, value, traceback)` - is called with the exception details, the same values returned by - :func:`sys.exc_info`. The method's return value controls whether the exception +* If *BLOCK* raises an exception, the context manager's :meth:`__exit__` method + is called with three arguments, the exception details (``type, value, traceback``, + the same values returned by :func:`sys.exc_info`, which can also be ``None`` + if no exception occurred). The method's return value controls whether an exception is re-raised: any false value re-raises the exception, and ``True`` will result in suppressing it. You'll only rarely want to suppress the exception, because if you do the author of the code containing the ':keyword:`with`' statement will @@ -463,7 +464,7 @@ with db_transaction(db) as cursor: ... -The :mod:`contextlib` module also has a :func:`nested(mgr1, mgr2, ...)` function +The :mod:`contextlib` module also has a ``nested(mgr1, mgr2, ...)`` function that combines a number of context managers so you don't need to write nested ':keyword:`with`' statements. In this example, the single ':keyword:`with`' statement both starts a database transaction and acquires a thread lock:: @@ -472,8 +473,9 @@ with nested (db_transaction(db), lock) as (cursor, locked): ... -Finally, the :func:`closing(object)` function returns *object* so that it can be -bound to a variable, and calls ``object.close`` at the end of the block. :: +Finally, the :func:`closing` function returns its argument so that it can be +bound to a variable, and calls the argument's ``.close()`` method at the end +of the block. :: import urllib, sys from contextlib import closing Modified: python/branches/py3k/Lib/test/test_fnmatch.py ============================================================================== --- python/branches/py3k/Lib/test/test_fnmatch.py (original) +++ python/branches/py3k/Lib/test/test_fnmatch.py Sun Mar 14 11:51:01 2010 @@ -7,13 +7,13 @@ class FnmatchTestCase(unittest.TestCase): - def check_match(self, filename, pattern, should_match=1): + def check_match(self, filename, pattern, should_match=1, fn=fnmatch): if should_match: - self.assertTrue(fnmatch(filename, pattern), + self.assertTrue(fn(filename, pattern), "expected %r to match pattern %r" % (filename, pattern)) else: - self.assertTrue(not fnmatch(filename, pattern), + self.assertTrue(not fn(filename, pattern), "expected %r not to match pattern %r" % (filename, pattern)) @@ -52,8 +52,8 @@ def test_fnmatchcase(self): check = self.check_match - check('AbC', 'abc', 0) - check('abc', 'AbC', 0) + check('AbC', 'abc', 0, fnmatchcase) + check('abc', 'AbC', 0, fnmatchcase) def test_bytes(self): self.check_match(b'test', b'te*') Modified: python/branches/py3k/Lib/test/test_strftime.py ============================================================================== --- python/branches/py3k/Lib/test/test_strftime.py (original) +++ python/branches/py3k/Lib/test/test_strftime.py Sun Mar 14 11:51:01 2010 @@ -116,16 +116,15 @@ try: result = time.strftime(e[0], now) except ValueError as error: - print("Standard '%s' format gaver error:" % (e[0], error)) - continue + self.fail("strftime '%s' format gave error: %s" % (e[0], error)) if re.match(escapestr(e[1], self.ampm), result): continue if not result or result[0] == '%': - print("Does not support standard '%s' format (%s)" % \ - (e[0], e[2])) + self.fail("strftime does not support standard '%s' format (%s)" + % (e[0], e[2])) else: - print("Conflict for %s (%s):" % (e[0], e[2])) - print(" Expected %s, but got %s" % (e[1], result)) + self.fail("Conflict for %s (%s): expected %s, but got %s" + % (e[0], e[2], e[1], result)) def strftest2(self, now): nowsecs = str(int(now))[:-1] Modified: python/branches/py3k/Misc/NEWS ============================================================================== --- python/branches/py3k/Misc/NEWS (original) +++ python/branches/py3k/Misc/NEWS Sun Mar 14 11:51:01 2010 @@ -781,6 +781,9 @@ Extension Modules ----------------- +- Issue #6544: fix a reference leak in the kqueue implementation's error + handling. + - Stop providing crtassem.h symbols when compiling with Visual Studio 2010, as msvcr100.dll is not a platform assembly anymore. Modified: python/branches/py3k/Modules/selectmodule.c ============================================================================== --- python/branches/py3k/Modules/selectmodule.c (original) +++ python/branches/py3k/Modules/selectmodule.c Sun Mar 14 11:51:01 2010 @@ -1241,6 +1241,7 @@ #undef KQ_OFF static PyObject * + kqueue_event_repr(kqueue_event_Object *s) { char buf[1024]; @@ -1526,19 +1527,6 @@ return NULL; } - if (ch != NULL && ch != Py_None) { - it = PyObject_GetIter(ch); - if (it == NULL) { - PyErr_SetString(PyExc_TypeError, - "changelist is not iterable"); - return NULL; - } - nchanges = PyObject_Size(ch); - if (nchanges < 0) { - return NULL; - } - } - if (otimeout == Py_None || otimeout == NULL) { ptimeoutspec = NULL; } @@ -1574,11 +1562,22 @@ return NULL; } - if (nchanges) { + if (ch != NULL && ch != Py_None) { + it = PyObject_GetIter(ch); + if (it == NULL) { + PyErr_SetString(PyExc_TypeError, + "changelist is not iterable"); + return NULL; + } + nchanges = PyObject_Size(ch); + if (nchanges < 0) { + goto error; + } + chl = PyMem_New(struct kevent, nchanges); if (chl == NULL) { PyErr_NoMemory(); - return NULL; + goto error; } i = 0; while ((ei = PyIter_Next(it)) != NULL) { @@ -1601,7 +1600,7 @@ evl = PyMem_New(struct kevent, nevents); if (evl == NULL) { PyErr_NoMemory(); - return NULL; + goto error; } } From python-checkins at python.org Sun Mar 14 11:56:14 2010 From: python-checkins at python.org (georg.brandl) Date: Sun, 14 Mar 2010 11:56:14 +0100 (CET) Subject: [Python-checkins] r78959 - in python/branches/py3k: Doc/c-api/exceptions.rst Doc/c-api/gcsupport.rst Doc/c-api/typeobj.rst Doc/library/argparse.rst Doc/library/codecs.rst Doc/reference/executionmodel.rst Doc/reference/expressions.rst Doc/whatsnew/2.6.rst Misc/HISTORY Misc/SpecialBuilds.txt Message-ID: <20100314105614.75F90FB08@mail.python.org> Author: georg.brandl Date: Sun Mar 14 11:56:14 2010 New Revision: 78959 Log: Merged revisions 78760,78771-78773,78802,78922,78952 via svnmerge from svn+ssh://pythondev at svn.python.org/python/trunk ........ r78760 | georg.brandl | 2010-03-07 16:23:59 +0100 (So, 07 M?r 2010) | 1 line #5341: more built-in vs builtin fixes. ........ r78771 | georg.brandl | 2010-03-07 21:58:31 +0100 (So, 07 M?r 2010) | 1 line #8085: The function is called PyObject_NewVar, not PyObject_VarNew. ........ r78772 | georg.brandl | 2010-03-07 22:12:28 +0100 (So, 07 M?r 2010) | 1 line #8039: document conditional expressions better, giving them their own section. ........ r78773 | georg.brandl | 2010-03-07 22:32:06 +0100 (So, 07 M?r 2010) | 1 line #8044: document Py_{Enter,Leave}RecursiveCall functions. ........ r78802 | georg.brandl | 2010-03-08 17:28:40 +0100 (Mo, 08 M?r 2010) | 1 line Fix typo. ........ r78922 | georg.brandl | 2010-03-13 14:41:58 +0100 (Sa, 13 M?r 2010) | 1 line Update for new download location. ........ r78952 | georg.brandl | 2010-03-14 10:55:08 +0100 (So, 14 M?r 2010) | 1 line #8137: add iso-8859-16 to the standard encodings table. ........ Modified: python/branches/py3k/ (props changed) python/branches/py3k/Doc/c-api/exceptions.rst python/branches/py3k/Doc/c-api/gcsupport.rst python/branches/py3k/Doc/c-api/typeobj.rst python/branches/py3k/Doc/library/argparse.rst python/branches/py3k/Doc/library/codecs.rst python/branches/py3k/Doc/reference/executionmodel.rst python/branches/py3k/Doc/reference/expressions.rst python/branches/py3k/Doc/whatsnew/2.6.rst python/branches/py3k/Misc/HISTORY python/branches/py3k/Misc/SpecialBuilds.txt Modified: python/branches/py3k/Doc/c-api/exceptions.rst ============================================================================== --- python/branches/py3k/Doc/c-api/exceptions.rst (original) +++ python/branches/py3k/Doc/c-api/exceptions.rst Sun Mar 14 11:56:14 2010 @@ -471,6 +471,36 @@ This steals a reference to *ctx*. +Recursion Control +================= + +These two functions provide a way to perform safe recursive calls at the C +level, both in the core and in extension modules. They are needed if the +recursive code does not necessarily invoke Python code (which tracks its +recursion depth automatically). + +.. cfunction:: int Py_EnterRecursiveCall(char *where) + + Marks a point where a recursive C-level call is about to be performed. + + If :const:`USE_STACKCHECK` is defined, this function checks if the the OS + stack overflowed using :cfunc:`PyOS_CheckStack`. In this is the case, it + sets a :exc:`MemoryError` and returns a nonzero value. + + The function then checks if the recursion limit is reached. If this is the + case, a :exc:`RuntimeError` is set and a nonzero value is returned. + Otherwise, zero is returned. + + *where* should be a string such as ``" in instance check"`` to be + concatenated to the :exc:`RuntimeError` message caused by the recursion depth + limit. + +.. cfunction:: void Py_LeaveRecursiveCall() + + Ends a :cfunc:`Py_EnterRecursiveCall`. Must be called once for each + *successful* invocation of :cfunc:`Py_EnterRecursiveCall`. + + .. _standardexceptions: Standard Exceptions Modified: python/branches/py3k/Doc/c-api/gcsupport.rst ============================================================================== --- python/branches/py3k/Doc/c-api/gcsupport.rst (original) +++ python/branches/py3k/Doc/c-api/gcsupport.rst Sun Mar 14 11:56:14 2010 @@ -28,7 +28,7 @@ Constructors for container types must conform to two rules: #. The memory for the object must be allocated using :cfunc:`PyObject_GC_New` - or :cfunc:`PyObject_GC_VarNew`. + or :cfunc:`PyObject_GC_NewVar`. #. Once all the fields which may contain references to other containers are initialized, it must call :cfunc:`PyObject_GC_Track`. Modified: python/branches/py3k/Doc/c-api/typeobj.rst ============================================================================== --- python/branches/py3k/Doc/c-api/typeobj.rst (original) +++ python/branches/py3k/Doc/c-api/typeobj.rst Sun Mar 14 11:56:14 2010 @@ -182,7 +182,7 @@ instance; this is normally :cfunc:`PyObject_Del` if the instance was allocated using :cfunc:`PyObject_New` or :cfunc:`PyObject_VarNew`, or :cfunc:`PyObject_GC_Del` if the instance was allocated using - :cfunc:`PyObject_GC_New` or :cfunc:`PyObject_GC_VarNew`. + :cfunc:`PyObject_GC_New` or :cfunc:`PyObject_GC_NewVar`. This field is inherited by subtypes. Modified: python/branches/py3k/Doc/library/argparse.rst ============================================================================== --- python/branches/py3k/Doc/library/argparse.rst (original) +++ python/branches/py3k/Doc/library/argparse.rst Sun Mar 14 11:56:14 2010 @@ -855,7 +855,7 @@ However, quite often the command-line string should instead be interpreted as another type, like a :class:`float`, :class:`int` or :class:`file`. The ``type`` keyword argument of :meth:`add_argument` allows any necessary -type-checking and type-conversions to be performed. Many common builtin types +type-checking and type-conversions to be performed. Many common built-in types can be used directly as the value of the ``type`` argument:: >>> parser = argparse.ArgumentParser() Modified: python/branches/py3k/Doc/library/codecs.rst ============================================================================== --- python/branches/py3k/Doc/library/codecs.rst (original) +++ python/branches/py3k/Doc/library/codecs.rst Sun Mar 14 11:56:14 2010 @@ -1065,11 +1065,13 @@ +-----------------+--------------------------------+--------------------------------+ | iso8859_10 | iso-8859-10, latin6, L6 | Nordic languages | +-----------------+--------------------------------+--------------------------------+ -| iso8859_13 | iso-8859-13 | Baltic languages | +| iso8859_13 | iso-8859-13, latin7, L7 | Baltic languages | +-----------------+--------------------------------+--------------------------------+ | iso8859_14 | iso-8859-14, latin8, L8 | Celtic languages | +-----------------+--------------------------------+--------------------------------+ -| iso8859_15 | iso-8859-15 | Western Europe | +| iso8859_15 | iso-8859-15, latin9, L9 | Western Europe | ++-----------------+--------------------------------+--------------------------------+ +| iso8859_16 | iso-8859-16, latin10, L10 | South-Eastern Europe | +-----------------+--------------------------------+--------------------------------+ | johab | cp1361, ms1361 | Korean | +-----------------+--------------------------------+--------------------------------+ Modified: python/branches/py3k/Doc/reference/executionmodel.rst ============================================================================== --- python/branches/py3k/Doc/reference/executionmodel.rst (original) +++ python/branches/py3k/Doc/reference/executionmodel.rst Sun Mar 14 11:56:14 2010 @@ -120,7 +120,7 @@ .. index:: pair: restricted; execution -The built-in namespace associated with the execution of a code block is actually +The builtins namespace associated with the execution of a code block is actually found by looking up the name ``__builtins__`` in its global namespace; this should be a dictionary or a module (in the latter case the module's dictionary is used). By default, when in the :mod:`__main__` module, ``__builtins__`` is @@ -132,7 +132,7 @@ .. impl-detail:: Users should not touch ``__builtins__``; it is strictly an implementation - detail. Users wanting to override values in the built-in namespace should + detail. Users wanting to override values in the builtins namespace should :keyword:`import` the :mod:`builtins` module and modify its attributes appropriately. Modified: python/branches/py3k/Doc/reference/expressions.rst ============================================================================== --- python/branches/py3k/Doc/reference/expressions.rst (original) +++ python/branches/py3k/Doc/reference/expressions.rst Sun Mar 14 11:56:14 2010 @@ -1113,12 +1113,7 @@ pair: Conditional; expression pair: Boolean; operation -Boolean operations have the lowest priority of all Python operations: - .. productionlist:: - expression: `conditional_expression` | `lambda_form` - expression_nocond: `or_test` | `lambda_form_nocond` - conditional_expression: `or_test` ["if" `or_test` "else" `expression`] or_test: `and_test` | `or_test` "or" `and_test` and_test: `not_test` | `and_test` "and" `not_test` not_test: `comparison` | "not" `not_test` @@ -1135,10 +1130,6 @@ The operator :keyword:`not` yields ``True`` if its argument is false, ``False`` otherwise. -The expression ``x if C else y`` first evaluates *C* (*not* *x*); if *C* is -true, *x* is evaluated and its value is returned; otherwise, *y* is evaluated -and its value is returned. - .. index:: operator: and The expression ``x and y`` first evaluates *x*; if *x* is false, its value is @@ -1158,6 +1149,30 @@ 'foo'`` yields ``False``, not ``''``.) +Conditional Expressions +======================= + +.. versionadded:: 2.5 + +.. index:: + pair: conditional; expression + pair: ternary; operator + +.. productionlist:: + conditional_expression: `or_test` ["if" `or_test` "else" `expression`] + expression: `conditional_expression` | `lambda_form` + expression_nocond: `or_test` | `lambda_form_nocond` + +Conditional expressions (sometimes called a "ternary operator") have the lowest +priority of all Python operations. + +The expression ``x if C else y`` first evaluates the condition, *C* (*not* *x*); +if *C* is true, *x* is evaluated and its value is returned; otherwise, *y* is +evaluated and its value is returned. + +See :pep:`308` for more details about conditional expressions. + + .. _lambdas: .. _lambda: @@ -1252,6 +1267,8 @@ +===============================================+=====================================+ | :keyword:`lambda` | Lambda expression | +-----------------------------------------------+-------------------------------------+ +| :keyword:`if` -- :keyword:`else` | Conditional expression | ++-----------------------------------------------+-------------------------------------+ | :keyword:`or` | Boolean OR | +-----------------------------------------------+-------------------------------------+ | :keyword:`and` | Boolean AND | Modified: python/branches/py3k/Doc/whatsnew/2.6.rst ============================================================================== --- python/branches/py3k/Doc/whatsnew/2.6.rst (original) +++ python/branches/py3k/Doc/whatsnew/2.6.rst Sun Mar 14 11:56:14 2010 @@ -111,9 +111,9 @@ :func:`reduce` function. Python 3.0 adds several new built-in functions and changes the -semantics of some existing built-ins. Functions that are new in 3.0 +semantics of some existing builtins. Functions that are new in 3.0 such as :func:`bin` have simply been added to Python 2.6, but existing -built-ins haven't been changed; instead, the :mod:`future_builtins` +builtins haven't been changed; instead, the :mod:`future_builtins` module has versions with the new 3.0 semantics. Code written to be compatible with 3.0 can do ``from future_builtins import hex, map`` as necessary. @@ -837,7 +837,7 @@ else: return str(self) -There's also a :func:`format` built-in that will format a single +There's also a :func:`format` builtin that will format a single value. It calls the type's :meth:`__format__` method with the provided specifier:: @@ -1168,7 +1168,7 @@ feature for Python. The ABC support consists of an :mod:`abc` module containing a metaclass called :class:`ABCMeta`, special handling of this metaclass by the :func:`isinstance` and :func:`issubclass` -built-ins, and a collection of basic ABCs that the Python developers +builtins, and a collection of basic ABCs that the Python developers think will be widely useful. Future versions of Python will probably add more ABCs. @@ -1322,9 +1322,9 @@ >>> 0b101111 47 -The :func:`oct` built-in still returns numbers +The :func:`oct` builtin still returns numbers prefixed with a leading zero, and a new :func:`bin` -built-in returns the binary representation for a number:: +builtin returns the binary representation for a number:: >>> oct(42) '052' @@ -1333,7 +1333,7 @@ >>> bin(173) '0b10101101' -The :func:`int` and :func:`long` built-ins will now accept the "0o" +The :func:`int` and :func:`long` builtins will now accept the "0o" and "0b" prefixes when base-8 or base-2 are requested, or when the *base* argument is zero (signalling that the base used should be determined from the string):: @@ -1419,7 +1419,7 @@ combined using bitwise operations such as ``&`` and ``|``, and can be used as array indexes and slice boundaries. -In Python 3.0, the PEP slightly redefines the existing built-ins +In Python 3.0, the PEP slightly redefines the existing builtins :func:`round`, :func:`math.floor`, :func:`math.ceil`, and adds a new one, :func:`math.trunc`, that's been backported to Python 2.6. :func:`math.trunc` rounds toward zero, returning the closest @@ -1527,7 +1527,7 @@ Previously this would have been a syntax error. (Contributed by Amaury Forgeot d'Arc; :issue:`3473`.) -* A new built-in, ``next(iterator, [default])`` returns the next item +* A new builtin, ``next(iterator, [default])`` returns the next item from the specified iterator. If the *default* argument is supplied, it will be returned if *iterator* has been exhausted; otherwise, the :exc:`StopIteration` exception will be raised. (Backported @@ -1956,9 +1956,9 @@ (Contributed by Phil Schwartz; :issue:`1221598`.) * The :func:`reduce` built-in function is also available in the - :mod:`functools` module. In Python 3.0, the built-in has been + :mod:`functools` module. In Python 3.0, the builtin has been dropped and :func:`reduce` is only available from :mod:`functools`; - currently there are no plans to drop the built-in in the 2.x series. + currently there are no plans to drop the builtin in the 2.x series. (Patched by Christian Heimes; :issue:`1739906`.) * When possible, the :mod:`getpass` module will now use @@ -2760,7 +2760,7 @@ * ``filter(predicate, iterable)``, ``map(func, iterable1, ...)``: the 3.0 versions - return iterators, unlike the 2.x built-ins which return lists. + return iterators, unlike the 2.x builtins which return lists. * ``hex(value)``, ``oct(value)``: instead of calling the :meth:`__hex__` or :meth:`__oct__` methods, these versions will Modified: python/branches/py3k/Misc/HISTORY ============================================================================== --- python/branches/py3k/Misc/HISTORY (original) +++ python/branches/py3k/Misc/HISTORY Sun Mar 14 11:56:14 2010 @@ -2544,7 +2544,7 @@ - Bug #1244610, #1392915, fix build problem on OpenBSD 3.7 and 3.8. configure would break checking curses.h. -- Bug #959576: The pwd module is now builtin. This allows Python to be +- Bug #959576: The pwd module is now built in. This allows Python to be built on UNIX platforms without $HOME set. - Bug #1072182, fix some potential problems if characters are signed. @@ -2577,7 +2577,7 @@ it will now use a default error message in this case. - Replaced most Unicode charmap codecs with new ones using the - new Unicode translate string feature in the builtin charmap + new Unicode translate string feature in the built-in charmap codec; the codecs were created from the mapping tables available at ftp.unicode.org and contain a few updates (e.g. the Mac OS encodings now include a mapping for the Apple logo) @@ -3032,7 +3032,7 @@ current file number. - Patch #1349274: gettext.install() now optionally installs additional - translation functions other than _() in the builtin namespace. + translation functions other than _() in the builtins namespace. - Patch #1337756: fileinput now accepts Unicode filenames. @@ -3403,7 +3403,7 @@ - Patch #881820: look for openpty and forkpty also in libbsd. - The sources of zlib are now part of the Python distribution (zlib 1.2.3). - The zlib module is now builtin on Windows. + The zlib module is now built in on Windows. - Use -xcode=pic32 for CCSHARED on Solaris with SunPro. @@ -4238,7 +4238,7 @@ - Patch #846659. Fix an error in tarfile.py when using GNU longname/longlink creation. -- The obsolete FCNTL.py has been deleted. The builtin fcntl module +- The obsolete FCNTL.py has been deleted. The built-in fcntl module has been available (on platforms that support fcntl) since Python 1.5a3, and all FCNTL.py did is export fcntl's names, after generating a deprecation warning telling you to use fcntl directly. @@ -4492,7 +4492,7 @@ segfault in a debug build, but provided less predictable behavior in a release build. -- input() builtin function now respects compiler flags such as +- input() built-in function now respects compiler flags such as __future__ statements. SF patch 876178. - Removed PendingDeprecationWarning from apply(). apply() remains @@ -4553,12 +4553,12 @@ - Compiler flags set in PYTHONSTARTUP are now active in __main__. -- Added two builtin types, set() and frozenset(). +- Added two built-in types, set() and frozenset(). -- Added a reversed() builtin function that returns a reverse iterator +- Added a reversed() built-in function that returns a reverse iterator over a sequence. -- Added a sorted() builtin function that returns a new sorted list +- Added a sorted() built-in function that returns a new sorted list from any iterable. - CObjects are now mutable (on the C level) through PyCObject_SetVoidPtr. @@ -4597,7 +4597,7 @@ When comparing containers with cyclic references to themselves it will now just hit the recursion limit. See SF patch 825639. -- str and unicode builtin types now have an rsplit() method that is +- str and unicode built-in types now have an rsplit() method that is same as split() except that it scans the string from the end working towards the beginning. See SF feature request 801847. @@ -5148,7 +5148,7 @@ - A warning about assignments to module attributes that shadow builtins, present in earlier releases of 2.3, has been removed. -- It is not possible to create subclasses of builtin types like str +- It is not possible to create subclasses of built-in types like str and tuple that define an itemsize. Earlier releases of Python 2.3 allowed this by mistake, leading to crashes and other problems. @@ -5623,13 +5623,13 @@ - New format codes B, H, I, k and K have been implemented for PyArg_ParseTuple and PyBuild_Value. -- New builtin function sum(seq, start=0) returns the sum of all the +- New built-in function sum(seq, start=0) returns the sum of all the items in iterable object seq, plus start (items are normally numbers, and cannot be strings). - bool() called without arguments now returns False rather than raising an exception. This is consistent with calling the - constructors for the other builtin types -- called without argument + constructors for the other built-in types -- called without argument they all return the false value of that type. (SF patch #724135) - In support of PEP 269 (making the pgen parser generator accessible @@ -6154,7 +6154,7 @@ internals, and supplies some helpers for working with pickles, such as a symbolic pickle disassembler. -- Xmlrpclib.py now supports the builtin boolean type. +- xmlrpclib.py now supports the built-in boolean type. - py_compile has a new 'doraise' flag and a new PyCompileError exception. @@ -6405,8 +6405,8 @@ trace function to change which line will execute next. A command to exploit this from pdb has been added. [SF patch #643835] -- The _codecs support module for codecs.py was turned into a builtin - module to assure that at least the builtin codecs are available +- The _codecs support module for codecs.py was turned into a built-in + module to assure that at least the built-in codecs are available to the Python parser for source code decoding according to PEP 263. - issubclass now supports a tuple as the second argument, just like @@ -6564,13 +6564,13 @@ - Unicode objects in sys.path are no longer ignored but treated as directory names. -- Fixed string.startswith and string.endswith builtin methods +- Fixed string.startswith and string.endswith built-in methods so they accept negative indices. [SF bug 493951] - Fixed a bug with a continue inside a try block and a yield in the finally clause. [SF bug 567538] -- Most builtin sequences now support "extended slices", i.e. slices +- Most built-in sequences now support "extended slices", i.e. slices with a third "stride" parameter. For example, "hello world"[::-1] gives "dlrow olleh". @@ -6585,7 +6585,7 @@ method no longer exist. xrange repetition and slicing have been removed. -- New builtin function enumerate(x), from PEP 279. Example: +- New built-in function enumerate(x), from PEP 279. Example: enumerate("abc") is an iterator returning (0,"a"), (1,"b"), (2,"c"). The argument can be an arbitrary iterable object. @@ -7134,7 +7134,7 @@ Presumably 2.3a1 breaks such systems. If anyone uses such a system, help! - The configure option --without-doc-strings can be used to remove the - doc strings from the builtin functions and modules; this reduces the + doc strings from the built-in functions and modules; this reduces the size of the executable. - The universal newlines option (PEP 278) is on by default. On Unix @@ -7370,7 +7370,7 @@ available for convenience. - New Carbon modules File (implementing the APIs in Files.h and Aliases.h) - and Folder (APIs from Folders.h). The old macfs builtin module is + and Folder (APIs from Folders.h). The old macfs built-in module is gone, and replaced by a Python wrapper around the new modules. - Pathname handling should now be fully consistent: MacPython-OSX always uses @@ -7592,7 +7592,7 @@ C API ----- -- New function PyDict_MergeFromSeq2() exposes the builtin dict +- New function PyDict_MergeFromSeq2() exposes the built-in dict constructor's logic for updating a dictionary from an iterable object producing key-value pairs. @@ -7643,7 +7643,7 @@ using new-style MRO rules if any base class is a new-style class. This needs to be documented. -- The new builtin dictionary() constructor, and dictionary type, have +- The new built-in dictionary() constructor, and dictionary type, have been renamed to dict. This reflects a decade of common usage. - dict() now accepts an iterable object producing 2-sequences. For @@ -8093,9 +8093,9 @@ The new class must have the same C-level object layout as the old class. -- The builtin file type can be subclassed now. In the usual pattern, - "file" is the name of the builtin type, and file() is a new builtin - constructor, with the same signature as the builtin open() function. +- The built-in file type can be subclassed now. In the usual pattern, + "file" is the name of the built-in type, and file() is a new built-in + constructor, with the same signature as the built-in open() function. file() is now the preferred way to open a file. - Previously, __new__ would only see sequential arguments passed to @@ -8109,7 +8109,7 @@ - Previously, an operation on an instance of a subclass of an immutable type (int, long, float, complex, tuple, str, unicode), where the subtype didn't override the operation (and so the - operation was handled by the builtin type), could return that + operation was handled by the built-in type), could return that instance instead a value of the base type. For example, if s was of a str subclass type, s[:] returned s as-is. Now it returns a str with the same value as s. @@ -8157,7 +8157,7 @@ called for each iteration until it returns an empty string). - The codecs module has grown four new helper APIs to access - builtin codecs: getencoder(), getdecoder(), getreader(), + built-in codecs: getencoder(), getdecoder(), getreader(), getwriter(). - SimpleXMLRPCServer: a new module (based upon SimpleHTMLServer) @@ -9287,7 +9287,7 @@ In all previous version of Python, names were resolved in exactly three namespaces -- the local namespace, the global namespace, and - the builtin namespace. According to this old definition, if a + the builtins namespace. According to this old definition, if a function A is defined within a function B, the names bound in B are not visible in A. The new rules make names bound in B visible in A, unless A contains a name binding that hides the binding in B. @@ -9308,7 +9308,7 @@ return str.strip() Under the old rules, the name str in helper() is bound to the - builtin function str(). Under the new rules, it will be bound to + built-in function str(). Under the new rules, it will be bound to the argument named str and an error will occur when helper() is called. @@ -9806,7 +9806,7 @@ assignment, e.g. +=, was fixed. - Raise ZeroDivisionError when raising zero to a negative number, - e.g. 0.0 ** -2.0. Note that math.pow is unrelated to the builtin + e.g. 0.0 ** -2.0. Note that math.pow is unrelated to the built-in power operator and the result of math.pow(0.0, -2.0) will vary by platform. On Linux, it raises a ValueError. @@ -14056,7 +14056,7 @@ overriding modules with the same name. - Fixed some strange exceptions in __del__ methods in library modules -(e.g. urllib). This happens because the builtin names are already +(e.g. urllib). This happens because the built-in names are already deleted by the time __del__ is called. The solution (a hack, but it works) is to set some instance variables to 0 instead of None. @@ -14759,8 +14759,8 @@ f(a=1,a=2) is now a syntax error. -Changes to builtin features ---------------------------- +Changes to built-in features +---------------------------- - There's a new exception FloatingPointError (used only by Lee Busby's patches to catch floating point exceptions, at the moment). @@ -16060,7 +16060,7 @@ - New modules: errno, operator (XXX). -- Changes for use with Numerical Python: builtin function slice() and +- Changes for use with Numerical Python: built-in function slice() and Ellipses object, and corresponding syntax: x[lo:hi:stride] == x[slice(lo, hi, stride)] @@ -16548,7 +16548,7 @@ - The functions posix.popen() and posix.fdopen() now have an optional third argument to specify the buffer size, and default their second -(mode) argument to 'r' -- in analogy to the builtin open() function. +(mode) argument to 'r' -- in analogy to the built-in open() function. The same applies to posixfile.open() and the socket method makefile(). - The thread.exit_thread() function now raises SystemExit so that Modified: python/branches/py3k/Misc/SpecialBuilds.txt ============================================================================== --- python/branches/py3k/Misc/SpecialBuilds.txt (original) +++ python/branches/py3k/Misc/SpecialBuilds.txt Sun Mar 14 11:56:14 2010 @@ -37,7 +37,7 @@ Turn on heavy reference debugging. This is major surgery. Every PyObject grows two more pointers, to maintain a doubly-linked list of all live -heap-allocated objects. Most builtin type objects are not in this list, +heap-allocated objects. Most built-in type objects are not in this list, as they're statically allocated. Starting in Python 2.3, if COUNT_ALLOCS (see below) is also defined, a static type object T does appear in this list if at least one object of type T has been created. From python-checkins at python.org Sun Mar 14 12:51:00 2010 From: python-checkins at python.org (ezio.melotti) Date: Sun, 14 Mar 2010 12:51:00 +0100 (CET) Subject: [Python-checkins] r78960 - in python/branches/py3k: Misc/NEWS Message-ID: <20100314115100.3D718F94A@mail.python.org> Author: ezio.melotti Date: Sun Mar 14 12:51:00 2010 New Revision: 78960 Log: Merged revisions 78954 via svnmerge from svn+ssh://pythondev at svn.python.org/python/trunk ........ r78954 | ezio.melotti | 2010-03-14 12:13:49 +0200 (Sun, 14 Mar 2010) | 1 line Add a link about the Public Review Issue #29 ........ Modified: python/branches/py3k/ (props changed) python/branches/py3k/Misc/NEWS Modified: python/branches/py3k/Misc/NEWS ============================================================================== --- python/branches/py3k/Misc/NEWS (original) +++ python/branches/py3k/Misc/NEWS Sun Mar 14 12:51:00 2010 @@ -307,8 +307,8 @@ - The sqlite3 module was updated to pysqlite 2.6.0. This fixes several obscure bugs and allows loading SQLite extensions from shared libraries. -- Issue #1054943: Fix unicodedata.normalize('NFC', text) for the Public Review - Issue #29 +- Issue #1054943: Fix ``unicodedata.normalize('NFC', text)`` for the Public + Review Issue #29 (http://unicode.org/review/pr-29.html). - Issue #7494: fix a crash in _lsprof (cProfile) after clearing the profiler, reset also the pointer to the current pointer context. From python-checkins at python.org Sun Mar 14 13:31:06 2010 From: python-checkins at python.org (florent.xicluna) Date: Sun, 14 Mar 2010 13:31:06 +0100 (CET) Subject: [Python-checkins] r78961 - python/branches/py3k/Lib/subprocess.py Message-ID: <20100314123106.D2E6AFAB7@mail.python.org> Author: florent.xicluna Date: Sun Mar 14 13:31:06 2010 New Revision: 78961 Log: Fix an oversight in r78946 which causes failure in the subprocess module on Windows. Modified: python/branches/py3k/Lib/subprocess.py Modified: python/branches/py3k/Lib/subprocess.py ============================================================================== --- python/branches/py3k/Lib/subprocess.py (original) +++ python/branches/py3k/Lib/subprocess.py Sun Mar 14 13:31:06 2010 @@ -681,11 +681,11 @@ restore_signals, start_new_session) if mswindows: - if p2cwrite is not None: + if p2cwrite != -1: p2cwrite = msvcrt.open_osfhandle(p2cwrite.Detach(), 0) - if c2pread is not None: + if c2pread != -1: c2pread = msvcrt.open_osfhandle(c2pread.Detach(), 0) - if errread is not None: + if errread != -1: errread = msvcrt.open_osfhandle(errread.Detach(), 0) if bufsize == 0: @@ -909,11 +909,11 @@ # output pipe are maintained in this process or else the # pipe will not close when the child process exits and the # ReadFile will hang. - if p2cread is not None: + if p2cread != -1: p2cread.Close() - if c2pwrite is not None: + if c2pwrite != -1: c2pwrite.Close() - if errwrite is not None: + if errwrite != -1: errwrite.Close() From python-checkins at python.org Sun Mar 14 15:24:31 2010 From: python-checkins at python.org (benjamin.peterson) Date: Sun, 14 Mar 2010 15:24:31 +0100 (CET) Subject: [Python-checkins] r78962 - in python/trunk: Misc/NEWS configure configure.in Message-ID: <20100314142431.E5D04FB8E@mail.python.org> Author: benjamin.peterson Date: Sun Mar 14 15:24:31 2010 New Revision: 78962 Log: fix freebsd linking #7705 Modified: python/trunk/Misc/NEWS python/trunk/configure python/trunk/configure.in Modified: python/trunk/Misc/NEWS ============================================================================== --- python/trunk/Misc/NEWS (original) +++ python/trunk/Misc/NEWS Sun Mar 14 15:24:31 2010 @@ -60,6 +60,11 @@ measures the number of UDP packets processed per second depending on the number of background CPU-bound Python threads. +Build +----- + +- Issue #7705: Fix linking on FreeBSD. + What's New in Python 2.7 alpha 4? ================================= Modified: python/trunk/configure ============================================================================== --- python/trunk/configure (original) +++ python/trunk/configure Sun Mar 14 15:24:31 2010 @@ -1,5 +1,5 @@ #! /bin/sh -# From configure.in Revision: 78817 . +# From configure.in Revision: 78819 . # Guess values for system-dependent variables and create Makefiles. # Generated by GNU Autoconf 2.61 for python 2.7. # @@ -14860,7 +14860,7 @@ FreeBSD*) if [ "`$CC -dM -E - Author: benjamin.peterson Date: Sun Mar 14 16:04:17 2010 New Revision: 78963 Log: Merged revisions 78227,78229,78288,78348,78377,78770,78774-78776,78810 via svnmerge from svn+ssh://pythondev at svn.python.org/python/trunk ........ r78227 | michael.foord | 2010-02-18 14:30:09 -0600 (Thu, 18 Feb 2010) | 1 line unittest.TestCase uses safe_repr for producing failure messages. Partial fix for issue 7956 ........ r78229 | michael.foord | 2010-02-18 15:37:07 -0600 (Thu, 18 Feb 2010) | 1 line Fix unittest.TestCase.assertDictContainsSubset so it can't die with unicode issues when constructing failure messages. Issue 7956 ........ r78288 | michael.foord | 2010-02-21 08:48:59 -0600 (Sun, 21 Feb 2010) | 1 line Silence UnicodeWarning in crazy unittest test. ........ r78348 | michael.foord | 2010-02-22 17:28:32 -0600 (Mon, 22 Feb 2010) | 1 line Support for old TestResult object (unittest) with warnings when using unsupported features. ........ r78377 | michael.foord | 2010-02-23 11:00:53 -0600 (Tue, 23 Feb 2010) | 1 line unittest.TestResult can now be used with the TextTestRunner. TextTestRunner compatible with old TestResult objects. ........ r78770 | michael.foord | 2010-03-07 14:22:12 -0600 (Sun, 07 Mar 2010) | 1 line Fix for potentials errors in constructing unittest failure messages. Plus skipped test methods no longer run setUp and tearDown (Issue 8059) ........ r78774 | michael.foord | 2010-03-07 16:04:55 -0600 (Sun, 07 Mar 2010) | 1 line Addition of setUpClass and setUpModule shared fixtures to unittest. ........ r78775 | michael.foord | 2010-03-07 17:10:36 -0600 (Sun, 07 Mar 2010) | 1 line Fix accidental name rebinding in unittest py3k warning filtering. ........ r78776 | michael.foord | 2010-03-07 17:16:20 -0600 (Sun, 07 Mar 2010) | 1 line Remove accidental print statement from last commit. ........ r78810 | raymond.hettinger | 2010-03-09 02:44:18 -0600 (Tue, 09 Mar 2010) | 5 lines Improve the basic example. * Show both the decorator and regular form for assertRaises() * Use assertTrue() instead of assertIn() to teach useful minimal subset of the API ........ Modified: python/branches/py3k/ (props changed) python/branches/py3k/Doc/library/unittest.rst python/branches/py3k/Lib/test/test_unittest.py python/branches/py3k/Lib/unittest/__init__.py python/branches/py3k/Lib/unittest/case.py python/branches/py3k/Lib/unittest/result.py python/branches/py3k/Lib/unittest/runner.py python/branches/py3k/Lib/unittest/suite.py python/branches/py3k/Lib/unittest/util.py Modified: python/branches/py3k/Doc/library/unittest.rst ============================================================================== --- python/branches/py3k/Doc/library/unittest.rst (original) +++ python/branches/py3k/Doc/library/unittest.rst Sun Mar 14 16:04:17 2010 @@ -177,14 +177,18 @@ self.seq.sort() self.assertEqual(self.seq, list(range(10))) + # should raise an exception for an immutable sequence + self.assertRaises(TypeError, random.shuffle, (1,2,3)) + def test_choice(self): element = random.choice(self.seq) - self.assertIn(element, self.seq) + self.assertTrue(element in self.seq) def test_sample(self): - self.assertRaises(ValueError, random.sample, self.seq, 20) + with self.assertRaises(ValueError): + random.sample(self.seq, 20) for element in random.sample(self.seq, 5): - self.assertIn(element, self.seq) + self.assertTrue(element in self.seq) if __name__ == '__main__': unittest.main() Modified: python/branches/py3k/Lib/test/test_unittest.py ============================================================================== --- python/branches/py3k/Lib/test/test_unittest.py (original) +++ python/branches/py3k/Lib/test/test_unittest.py Sun Mar 14 16:04:17 2010 @@ -18,10 +18,15 @@ from copy import deepcopy import io import pickle +import warnings + ### Support code ################################################################ +def resultFactory(*_): + return unittest.TestResult() + class LoggingResult(unittest.TestResult): def __init__(self, log): self._events = log @@ -2076,6 +2081,70 @@ 'Tests getDescription() for a method with a longer ' 'docstring.')) +classDict = dict(unittest.TestResult.__dict__) +for m in ('addSkip', 'addExpectedFailure', 'addUnexpectedSuccess', + '__init__'): + del classDict[m] + +def __init__(self, stream=None, descriptions=None, verbosity=None): + self.failures = [] + self.errors = [] + self.testsRun = 0 + self.shouldStop = False +classDict['__init__'] = __init__ +OldResult = type('OldResult', (object,), classDict) + +class Test_OldTestResult(unittest.TestCase): + + def assertOldResultWarning(self, test, failures): + with warnings.catch_warnings(record=True) as log: + result = OldResult() + test.run(result) + self.assertEqual(len(result.failures), failures) + warning, = log + self.assertIs(warning.category, RuntimeWarning) + + def testOldTestResult(self): + class Test(unittest.TestCase): + def testSkip(self): + self.skipTest('foobar') + @unittest.expectedFailure + def testExpectedFail(self): + raise TypeError + @unittest.expectedFailure + def testUnexpectedSuccess(self): + pass + + for test_name, should_pass in (('testSkip', True), + ('testExpectedFail', True), + ('testUnexpectedSuccess', False)): + test = Test(test_name) + self.assertOldResultWarning(test, int(not should_pass)) + + def testOldTestTesultSetup(self): + class Test(unittest.TestCase): + def setUp(self): + self.skipTest('no reason') + def testFoo(self): + pass + self.assertOldResultWarning(Test('testFoo'), 0) + + def testOldTestResultClass(self): + @unittest.skip('no reason') + class Test(unittest.TestCase): + def testFoo(self): + pass + self.assertOldResultWarning(Test('testFoo'), 0) + + def testOldResultWithRunner(self): + class Test(unittest.TestCase): + def testFoo(self): + pass + runner = unittest.TextTestRunner(resultclass=OldResult, + stream=io.StringIO()) + # This will raise an exception if TextTestRunner can't handle old + # test result objects + runner.run(Test('testFoo')) ### Support code for Test_TestCase ################################################################ @@ -2578,21 +2647,27 @@ self.assertDictContainsSubset({'a': 1}, {'a': 1, 'b': 2}) self.assertDictContainsSubset({'a': 1, 'b': 2}, {'a': 1, 'b': 2}) - self.assertRaises(unittest.TestCase.failureException, - self.assertDictContainsSubset, {'a': 2}, {'a': 1}, - '.*Mismatched values:.*') + with self.assertRaises(self.failureException): + self.assertDictContainsSubset({1: "one"}, {}) - self.assertRaises(unittest.TestCase.failureException, - self.assertDictContainsSubset, {'c': 1}, {'a': 1}, - '.*Missing:.*') + with self.assertRaises(self.failureException): + self.assertDictContainsSubset({'a': 2}, {'a': 1}) - self.assertRaises(unittest.TestCase.failureException, - self.assertDictContainsSubset, {'a': 1, 'c': 1}, - {'a': 1}, '.*Missing:.*') + with self.assertRaises(self.failureException): + self.assertDictContainsSubset({'c': 1}, {'a': 1}) - self.assertRaises(unittest.TestCase.failureException, - self.assertDictContainsSubset, {'a': 1, 'c': 1}, - {'a': 1}, '.*Missing:.*Mismatched values:.*') + with self.assertRaises(self.failureException): + self.assertDictContainsSubset({'a': 1, 'c': 1}, {'a': 1}) + + with self.assertRaises(self.failureException): + self.assertDictContainsSubset({'a': 1, 'c': 1}, {'a': 1}) + + with warnings.catch_warnings(record=True): + # silence the UnicodeWarning + one = ''.join(chr(i) for i in range(255)) + # this used to cause a UnicodeDecodeError constructing the failure msg + with self.assertRaises(self.failureException): + self.assertDictContainsSubset({'foo': one}, {'foo': '\uFFFD'}) def testAssertEqual(self): equal_pairs = [ @@ -3028,6 +3103,43 @@ self.assertEqual(result.unexpectedSuccesses, [test]) self.assertTrue(result.wasSuccessful()) + def test_skip_doesnt_run_setup(self): + class Foo(unittest.TestCase): + wasSetUp = False + wasTornDown = False + def setUp(self): + Foo.wasSetUp = True + def tornDown(self): + Foo.wasTornDown = True + @unittest.skip('testing') + def test_1(self): + pass + + result = unittest.TestResult() + test = Foo("test_1") + suite = unittest.TestSuite([test]) + suite.run(result) + self.assertEqual(result.skipped, [(test, "testing")]) + self.assertFalse(Foo.wasSetUp) + self.assertFalse(Foo.wasTornDown) + + def test_decorated_skip(self): + def decorator(func): + def inner(*a): + return func(*a) + return inner + + class Foo(unittest.TestCase): + @decorator + @unittest.skip('testing') + def test_1(self): + pass + + result = unittest.TestResult() + test = Foo("test_1") + suite = unittest.TestSuite([test]) + suite.run(result) + self.assertEqual(result.skipped, [(test, "testing")]) class Test_Assertions(TestCase): @@ -3131,6 +3243,16 @@ self.assertEquals(self.testableTrue._formatMessage(None, "foo"), "foo") self.assertEquals(self.testableTrue._formatMessage("foo", "bar"), "bar : foo") + # This blows up if _formatMessage uses string concatenation + self.testableTrue._formatMessage(object(), 'foo') + + def test_formatMessage_unicode_error(self): + with warnings.catch_warnings(record=True): + # This causes a UnicodeWarning due to its craziness + one = ''.join(chr(i) for i in range(255)) + # this used to cause a UnicodeDecodeError constructing msg + self.testableTrue._formatMessage(one, '\uFFFD') + def assertMessages(self, methodName, args, errors): def getMethod(i): useTestableFalse = i < 2 @@ -3795,6 +3917,397 @@ self.assertEqual(program.verbosity, 2) +class TestSetups(unittest.TestCase): + + def getRunner(self): + return unittest.TextTestRunner(resultclass=resultFactory, + stream=io.StringIO()) + def runTests(self, *cases): + suite = unittest.TestSuite() + for case in cases: + tests = unittest.defaultTestLoader.loadTestsFromTestCase(case) + suite.addTests(tests) + + runner = self.getRunner() + + # creating a nested suite exposes some potential bugs + realSuite = unittest.TestSuite() + realSuite.addTest(suite) + # adding empty suites to the end exposes potential bugs + suite.addTest(unittest.TestSuite()) + realSuite.addTest(unittest.TestSuite()) + return runner.run(realSuite) + + def test_setup_class(self): + class Test(unittest.TestCase): + setUpCalled = 0 + @classmethod + def setUpClass(cls): + Test.setUpCalled += 1 + unittest.TestCase.setUpClass() + def test_one(self): + pass + def test_two(self): + pass + + result = self.runTests(Test) + + self.assertEqual(Test.setUpCalled, 1) + self.assertEqual(result.testsRun, 2) + self.assertEqual(len(result.errors), 0) + + def test_teardown_class(self): + class Test(unittest.TestCase): + tearDownCalled = 0 + @classmethod + def tearDownClass(cls): + Test.tearDownCalled += 1 + unittest.TestCase.tearDownClass() + def test_one(self): + pass + def test_two(self): + pass + + result = self.runTests(Test) + + self.assertEqual(Test.tearDownCalled, 1) + self.assertEqual(result.testsRun, 2) + self.assertEqual(len(result.errors), 0) + + def test_teardown_class_two_classes(self): + class Test(unittest.TestCase): + tearDownCalled = 0 + @classmethod + def tearDownClass(cls): + Test.tearDownCalled += 1 + unittest.TestCase.tearDownClass() + def test_one(self): + pass + def test_two(self): + pass + + class Test2(unittest.TestCase): + tearDownCalled = 0 + @classmethod + def tearDownClass(cls): + Test2.tearDownCalled += 1 + unittest.TestCase.tearDownClass() + def test_one(self): + pass + def test_two(self): + pass + + result = self.runTests(Test, Test2) + + self.assertEqual(Test.tearDownCalled, 1) + self.assertEqual(Test2.tearDownCalled, 1) + self.assertEqual(result.testsRun, 4) + self.assertEqual(len(result.errors), 0) + + def test_error_in_setupclass(self): + class BrokenTest(unittest.TestCase): + @classmethod + def setUpClass(cls): + raise TypeError('foo') + def test_one(self): + pass + def test_two(self): + pass + + result = self.runTests(BrokenTest) + + self.assertEqual(result.testsRun, 0) + self.assertEqual(len(result.errors), 1) + error, _ = result.errors[0] + self.assertEqual(str(error), + 'classSetUp (%s.BrokenTest)' % __name__) + + def test_error_in_teardown_class(self): + class Test(unittest.TestCase): + tornDown = 0 + @classmethod + def tearDownClass(cls): + Test.tornDown += 1 + raise TypeError('foo') + def test_one(self): + pass + def test_two(self): + pass + + class Test2(unittest.TestCase): + tornDown = 0 + @classmethod + def tearDownClass(cls): + Test2.tornDown += 1 + raise TypeError('foo') + def test_one(self): + pass + def test_two(self): + pass + + result = self.runTests(Test, Test2) + self.assertEqual(result.testsRun, 4) + self.assertEqual(len(result.errors), 2) + self.assertEqual(Test.tornDown, 1) + self.assertEqual(Test2.tornDown, 1) + + error, _ = result.errors[0] + self.assertEqual(str(error), + 'classTearDown (%s.Test)' % __name__) + + def test_class_not_torndown_when_setup_fails(self): + class Test(unittest.TestCase): + tornDown = False + @classmethod + def setUpClass(cls): + raise TypeError + @classmethod + def tearDownClass(cls): + Test.tornDown = True + raise TypeError('foo') + def test_one(self): + pass + + self.runTests(Test) + self.assertFalse(Test.tornDown) + + def test_class_not_setup_or_torndown_when_skipped(self): + class Test(unittest.TestCase): + classSetUp = False + tornDown = False + @classmethod + def setUpClass(cls): + Test.classSetUp = True + @classmethod + def tearDownClass(cls): + Test.tornDown = True + def test_one(self): + pass + + Test = unittest.skip("hop")(Test) + self.runTests(Test) + self.assertFalse(Test.classSetUp) + self.assertFalse(Test.tornDown) + + def test_setup_teardown_order_with_pathological_suite(self): + results = [] + + class Module1(object): + @staticmethod + def setUpModule(): + results.append('Module1.setUpModule') + @staticmethod + def tearDownModule(): + results.append('Module1.tearDownModule') + + class Module2(object): + @staticmethod + def setUpModule(): + results.append('Module2.setUpModule') + @staticmethod + def tearDownModule(): + results.append('Module2.tearDownModule') + + class Test1(unittest.TestCase): + @classmethod + def setUpClass(cls): + results.append('setup 1') + @classmethod + def tearDownClass(cls): + results.append('teardown 1') + def testOne(self): + results.append('Test1.testOne') + def testTwo(self): + results.append('Test1.testTwo') + + class Test2(unittest.TestCase): + @classmethod + def setUpClass(cls): + results.append('setup 2') + @classmethod + def tearDownClass(cls): + results.append('teardown 2') + def testOne(self): + results.append('Test2.testOne') + def testTwo(self): + results.append('Test2.testTwo') + + class Test3(unittest.TestCase): + @classmethod + def setUpClass(cls): + results.append('setup 3') + @classmethod + def tearDownClass(cls): + results.append('teardown 3') + def testOne(self): + results.append('Test3.testOne') + def testTwo(self): + results.append('Test3.testTwo') + + Test1.__module__ = Test2.__module__ = 'Module' + Test3.__module__ = 'Module2' + sys.modules['Module'] = Module1 + sys.modules['Module2'] = Module2 + + first = unittest.TestSuite((Test1('testOne'),)) + second = unittest.TestSuite((Test1('testTwo'),)) + third = unittest.TestSuite((Test2('testOne'),)) + fourth = unittest.TestSuite((Test2('testTwo'),)) + fifth = unittest.TestSuite((Test3('testOne'),)) + sixth = unittest.TestSuite((Test3('testTwo'),)) + suite = unittest.TestSuite((first, second, third, fourth, fifth, sixth)) + + runner = self.getRunner() + result = runner.run(suite) + self.assertEqual(result.testsRun, 6) + self.assertEqual(len(result.errors), 0) + + self.assertEqual(results, + ['Module1.setUpModule', 'setup 1', + 'Test1.testOne', 'Test1.testTwo', 'teardown 1', + 'setup 2', 'Test2.testOne', 'Test2.testTwo', + 'teardown 2', 'Module1.tearDownModule', + 'Module2.setUpModule', 'setup 3', + 'Test3.testOne', 'Test3.testTwo', + 'teardown 3', 'Module2.tearDownModule']) + + def test_setup_module(self): + class Module(object): + moduleSetup = 0 + @staticmethod + def setUpModule(): + Module.moduleSetup += 1 + + class Test(unittest.TestCase): + def test_one(self): + pass + def test_two(self): + pass + Test.__module__ = 'Module' + sys.modules['Module'] = Module + + result = self.runTests(Test) + self.assertEqual(Module.moduleSetup, 1) + self.assertEqual(result.testsRun, 2) + self.assertEqual(len(result.errors), 0) + + def test_error_in_setup_module(self): + class Module(object): + moduleSetup = 0 + moduleTornDown = 0 + @staticmethod + def setUpModule(): + Module.moduleSetup += 1 + raise TypeError('foo') + @staticmethod + def tearDownModule(): + Module.moduleTornDown += 1 + + class Test(unittest.TestCase): + classSetUp = False + classTornDown = False + @classmethod + def setUpClass(cls): + Test.classSetUp = True + @classmethod + def tearDownClass(cls): + Test.classTornDown = True + def test_one(self): + pass + def test_two(self): + pass + + class Test2(unittest.TestCase): + def test_one(self): + pass + def test_two(self): + pass + Test.__module__ = 'Module' + Test2.__module__ = 'Module' + sys.modules['Module'] = Module + + result = self.runTests(Test, Test2) + self.assertEqual(Module.moduleSetup, 1) + self.assertEqual(Module.moduleTornDown, 0) + self.assertEqual(result.testsRun, 0) + self.assertFalse(Test.classSetUp) + self.assertFalse(Test.classTornDown) + self.assertEqual(len(result.errors), 1) + error, _ = result.errors[0] + self.assertEqual(str(error), 'setUpModule (Module)') + + def test_testcase_with_missing_module(self): + class Test(unittest.TestCase): + def test_one(self): + pass + def test_two(self): + pass + Test.__module__ = 'Module' + sys.modules.pop('Module', None) + + result = self.runTests(Test) + self.assertEqual(result.testsRun, 2) + + def test_teardown_module(self): + class Module(object): + moduleTornDown = 0 + @staticmethod + def tearDownModule(): + Module.moduleTornDown += 1 + + class Test(unittest.TestCase): + def test_one(self): + pass + def test_two(self): + pass + Test.__module__ = 'Module' + sys.modules['Module'] = Module + + result = self.runTests(Test) + self.assertEqual(Module.moduleTornDown, 1) + self.assertEqual(result.testsRun, 2) + self.assertEqual(len(result.errors), 0) + + def test_error_in_teardown_module(self): + class Module(object): + moduleTornDown = 0 + @staticmethod + def tearDownModule(): + Module.moduleTornDown += 1 + raise TypeError('foo') + + class Test(unittest.TestCase): + classSetUp = False + classTornDown = False + @classmethod + def setUpClass(cls): + Test.classSetUp = True + @classmethod + def tearDownClass(cls): + Test.classTornDown = True + def test_one(self): + pass + def test_two(self): + pass + + class Test2(unittest.TestCase): + def test_one(self): + pass + def test_two(self): + pass + Test.__module__ = 'Module' + Test2.__module__ = 'Module' + sys.modules['Module'] = Module + + result = self.runTests(Test, Test2) + self.assertEqual(Module.moduleTornDown, 1) + self.assertEqual(result.testsRun, 4) + self.assertTrue(Test.classSetUp) + self.assertTrue(Test.classTornDown) + self.assertEqual(len(result.errors), 1) + error, _ = result.errors[0] + self.assertEqual(str(error), 'tearDownModule (Module)') + ###################################################################### ## Main ###################################################################### @@ -3803,7 +4316,8 @@ support.run_unittest(Test_TestCase, Test_TestLoader, Test_TestSuite, Test_TestResult, Test_FunctionTestCase, Test_TestSkipping, Test_Assertions, TestLongMessage, - Test_TestProgram, TestCleanUp, TestDiscovery, Test_TextTestRunner) + Test_TestProgram, TestCleanUp, TestDiscovery, Test_TextTestRunner, + Test_OldTestResult, TestSetups) if __name__ == "__main__": test_main() Modified: python/branches/py3k/Lib/unittest/__init__.py ============================================================================== --- python/branches/py3k/Lib/unittest/__init__.py (original) +++ python/branches/py3k/Lib/unittest/__init__.py Sun Mar 14 16:04:17 2010 @@ -51,13 +51,12 @@ # Expose obsolete functions for backwards compatibility __all__.extend(['getTestCaseNames', 'makeSuite', 'findTestCases']) -__all__.append('_TextTestResult') from .result import TestResult from .case import (TestCase, FunctionTestCase, SkipTest, skip, skipIf, skipUnless, expectedFailure) -from .suite import TestSuite +from .suite import BaseTestSuite, TestSuite from .loader import (TestLoader, defaultTestLoader, makeSuite, getTestCaseNames, findTestCases) from .main import TestProgram, main Modified: python/branches/py3k/Lib/unittest/case.py ============================================================================== --- python/branches/py3k/Lib/unittest/case.py (original) +++ python/branches/py3k/Lib/unittest/case.py Sun Mar 14 16:04:17 2010 @@ -7,7 +7,9 @@ import re import warnings -from . import result, util +from . import result +from .util import (strclass, safe_repr, sorted_list_difference, + unorderable_list_difference) class SkipTest(Exception): @@ -44,14 +46,15 @@ Unconditionally skip a test. """ def decorator(test_item): - if isinstance(test_item, type) and issubclass(test_item, TestCase): - test_item.__unittest_skip__ = True - test_item.__unittest_skip_why__ = reason - return test_item - @functools.wraps(test_item) - def skip_wrapper(*args, **kwargs): - raise SkipTest(reason) - return skip_wrapper + if not (isinstance(test_item, type) and issubclass(test_item, TestCase)): + @functools.wraps(test_item) + def skip_wrapper(*args, **kwargs): + raise SkipTest(reason) + test_item = skip_wrapper + + test_item.__unittest_skip__ = True + test_item.__unittest_skip_why__ = reason + return test_item return decorator def skipIf(condition, reason): @@ -164,6 +167,9 @@ longMessage = False + # Attribute used by TestSuite for classSetUp + + _classSetupFailed = False def __init__(self, methodName='runTest'): """Create an instance of the class that will use the named test @@ -175,7 +181,7 @@ try: testMethod = getattr(self, methodName) except AttributeError: - raise ValueError("no such test method in %s: %s" % \ + raise ValueError("no such test method in %s: %s" % (self.__class__, methodName)) self._testMethodDoc = testMethod.__doc__ self._cleanups = [] @@ -222,6 +228,14 @@ "Hook method for deconstructing the test fixture after testing it." pass + @classmethod + def setUpClass(cls): + "Hook method for setting up class fixture before running tests in the class." + + @classmethod + def tearDownClass(cls): + "Hook method for deconstructing the class fixture after running all tests in the class." + def countTestCases(self): return 1 @@ -240,7 +254,7 @@ def id(self): - return "%s.%s" % (util.strclass(self.__class__), self._testMethodName) + return "%s.%s" % (strclass(self.__class__), self._testMethodName) def __eq__(self, other): if type(self) is not type(other): @@ -255,11 +269,20 @@ return hash((type(self), self._testMethodName)) def __str__(self): - return "%s (%s)" % (self._testMethodName, util.strclass(self.__class__)) + return "%s (%s)" % (self._testMethodName, strclass(self.__class__)) def __repr__(self): return "<%s testMethod=%s>" % \ - (util.strclass(self.__class__), self._testMethodName) + (strclass(self.__class__), self._testMethodName) + + def _addSkip(self, result, reason): + addSkip = getattr(result, 'addSkip', None) + if addSkip is not None: + addSkip(self, reason) + else: + warnings.warn("TestResult has no addSkip method, skips not reported", + RuntimeWarning, 2) + result.addSuccess(self) def run(self, result=None): orig_result = result @@ -271,20 +294,24 @@ self._resultForDoCleanups = result result.startTest(self) - if getattr(self.__class__, "__unittest_skip__", False): - # If the whole class was skipped. + + testMethod = getattr(self, self._testMethodName) + if (getattr(self.__class__, "__unittest_skip__", False) or + getattr(testMethod, "__unittest_skip__", False)): + # If the class or method was skipped. try: - result.addSkip(self, self.__class__.__unittest_skip_why__) + skip_why = (getattr(self.__class__, '__unittest_skip_why__', '') + or getattr(testMethod, '__unittest_skip_why__', '')) + self._addSkip(result, skip_why) finally: result.stopTest(self) return - testMethod = getattr(self, self._testMethodName) try: success = False try: self.setUp() except SkipTest as e: - result.addSkip(self, str(e)) + self._addSkip(result, str(e)) except Exception: result.addError(self, sys.exc_info()) else: @@ -293,11 +320,23 @@ except self.failureException: result.addFailure(self, sys.exc_info()) except _ExpectedFailure as e: - result.addExpectedFailure(self, e.exc_info) + addExpectedFailure = getattr(result, 'addExpectedFailure', None) + if addExpectedFailure is not None: + addExpectedFailure(self, e.exc_info) + else: + warnings.warn("TestResult has no addExpectedFailure method, reporting as passes", + RuntimeWarning) + result.addSuccess(self) except _UnexpectedSuccess: - result.addUnexpectedSuccess(self) + addUnexpectedSuccess = getattr(result, 'addUnexpectedSuccess', None) + if addUnexpectedSuccess is not None: + addUnexpectedSuccess(self) + else: + warnings.warn("TestResult has no addUnexpectedSuccess method, reporting as failures", + RuntimeWarning) + result.addFailure(self, sys.exc_info()) except SkipTest as e: - result.addSkip(self, str(e)) + self._addSkip(result, str(e)) except Exception: result.addError(self, sys.exc_info()) else: @@ -354,13 +393,13 @@ def assertFalse(self, expr, msg=None): "Fail the test if the expression is true." if expr: - msg = self._formatMessage(msg, "%r is not False" % expr) + msg = self._formatMessage(msg, "%s is not False" % safe_repr(expr)) raise self.failureException(msg) def assertTrue(self, expr, msg=None): """Fail the test unless the expression is true.""" if not expr: - msg = self._formatMessage(msg, "%r is not True" % expr) + msg = self._formatMessage(msg, "%s is not True" % safe_repr(expr)) raise self.failureException(msg) def _formatMessage(self, msg, standardMsg): @@ -377,7 +416,12 @@ return msg or standardMsg if msg is None: return standardMsg - return standardMsg + ' : ' + msg + try: + # don't switch to '{}' formatting in Python 2.X + # it changes the way unicode input is handled + return '%s : %s' % (standardMsg, msg) + except UnicodeDecodeError: + return '%s : %s' % (safe_repr(standardMsg), safe_repr(msg)) def assertRaises(self, excClass, callableObj=None, *args, **kwargs): @@ -436,7 +480,7 @@ def _baseAssertEqual(self, first, second, msg=None): """The default assertEqual implementation, not type specific.""" if not first == second: - standardMsg = '%r != %r' % (first, second) + standardMsg = '%s != %s' % (safe_repr(first), safe_repr(second)) msg = self._formatMessage(msg, standardMsg) raise self.failureException(msg) @@ -452,7 +496,8 @@ operator. """ if not first != second: - msg = self._formatMessage(msg, '%r == %r' % (first, second)) + msg = self._formatMessage(msg, '%s == %s' % (safe_repr(first), + safe_repr(second))) raise self.failureException(msg) def assertAlmostEqual(self, first, second, *, places=7, msg=None): @@ -467,10 +512,12 @@ compare almost equal. """ if first == second: - # shortcut for ite + # shortcut for inf return if round(abs(second-first), places) != 0: - standardMsg = '%r != %r within %r places' % (first, second, places) + standardMsg = '%s != %s within %r places' % (safe_repr(first), + safe_repr(second), + places) msg = self._formatMessage(msg, standardMsg) raise self.failureException(msg) @@ -485,7 +532,9 @@ Objects that are equal automatically fail. """ if (first == second) or round(abs(second-first), places) == 0: - standardMsg = '%r == %r within %r places' % (first, second, places) + standardMsg = '%s == %s within %r places' % (safe_repr(first), + safe_repr(second), + places) msg = self._formatMessage(msg, standardMsg) raise self.failureException(msg) @@ -535,11 +584,11 @@ if seq_type != None: seq_type_name = seq_type.__name__ if not isinstance(seq1, seq_type): - raise self.failureException('First sequence is not a %s: %r' - % (seq_type_name, seq1)) + raise self.failureException('First sequence is not a %s: %s' + % (seq_type_name, safe_repr(seq1))) if not isinstance(seq2, seq_type): - raise self.failureException('Second sequence is not a %s: %r' - % (seq_type_name, seq2)) + raise self.failureException('Second sequence is not a %s: %s' + % (seq_type_name, safe_repr(seq2))) else: seq_type_name = "sequence" @@ -561,8 +610,8 @@ if seq1 == seq2: return - seq1_repr = repr(seq1) - seq2_repr = repr(seq2) + seq1_repr = safe_repr(seq1) + seq2_repr = safe_repr(seq2) if len(seq1_repr) > 30: seq1_repr = seq1_repr[:30] + '...' if len(seq2_repr) > 30: @@ -689,25 +738,28 @@ def assertIn(self, member, container, msg=None): """Just like self.assertTrue(a in b), but with a nicer default message.""" if member not in container: - standardMsg = '%r not found in %r' % (member, container) + standardMsg = '%s not found in %s' % (safe_repr(member), + safe_repr(container)) self.fail(self._formatMessage(msg, standardMsg)) def assertNotIn(self, member, container, msg=None): """Just like self.assertTrue(a not in b), but with a nicer default message.""" if member in container: - standardMsg = '%r unexpectedly found in %r' % (member, container) + standardMsg = '%s unexpectedly found in %s' % (safe_repr(member), + safe_repr(container)) self.fail(self._formatMessage(msg, standardMsg)) def assertIs(self, expr1, expr2, msg=None): """Just like self.assertTrue(a is b), but with a nicer default message.""" if expr1 is not expr2: - standardMsg = '%r is not %r' % (expr1, expr2) + standardMsg = '%s is not %s' % (safe_repr(expr1), + safe_repr(expr2)) self.fail(self._formatMessage(msg, standardMsg)) def assertIsNot(self, expr1, expr2, msg=None): """Just like self.assertTrue(a is not b), but with a nicer default message.""" if expr1 is expr2: - standardMsg = 'unexpectedly identical: %r' % (expr1,) + standardMsg = 'unexpectedly identical: %s' % (safe_repr(expr1),) self.fail(self._formatMessage(msg, standardMsg)) def assertDictEqual(self, d1, d2, msg=None): @@ -729,14 +781,16 @@ missing.append(key) elif value != actual[key]: mismatched.append('%s, expected: %s, actual: %s' % - (key, value, actual[key])) + (safe_repr(key), safe_repr(value), + safe_repr(actual[key]))) if not (missing or mismatched): return standardMsg = '' if missing: - standardMsg = 'Missing: %r' % ','.join(missing) + standardMsg = 'Missing: %s' % ','.join(safe_repr(m) for m in + missing) if mismatched: if standardMsg: standardMsg += '; ' @@ -758,10 +812,8 @@ try: expected = set(expected_seq) actual = set(actual_seq) - missing = list(expected.difference(actual)) - unexpected = list(actual.difference(expected)) - missing.sort() - unexpected.sort() + missing = sorted(expected.difference(actual)) + unexpected = sorted(actual.difference(expected)) except TypeError: # Fall back to slower list-compare if any of the objects are # not hashable. @@ -771,16 +823,17 @@ expected.sort() actual.sort() except TypeError: - missing, unexpected = util.unorderable_list_difference(expected, - actual) - else: - missing, unexpected = util.sorted_list_difference(expected, + missing, unexpected = unorderable_list_difference(expected, actual) + else: + missing, unexpected = sorted_list_difference(expected, actual) errors = [] if missing: - errors.append('Expected, but missing:\n %r' % missing) + errors.append('Expected, but missing:\n %s' % + safe_repr(missing)) if unexpected: - errors.append('Unexpected, but present:\n %r' % unexpected) + errors.append('Unexpected, but present:\n %s' % + safe_repr(unexpected)) if errors: standardMsg = '\n'.join(errors) self.fail(self._formatMessage(msg, standardMsg)) @@ -800,31 +853,31 @@ def assertLess(self, a, b, msg=None): """Just like self.assertTrue(a < b), but with a nicer default message.""" if not a < b: - standardMsg = '%r not less than %r' % (a, b) + standardMsg = '%s not less than %s' % (safe_repr(a), safe_repr(b)) self.fail(self._formatMessage(msg, standardMsg)) def assertLessEqual(self, a, b, msg=None): """Just like self.assertTrue(a <= b), but with a nicer default message.""" if not a <= b: - standardMsg = '%r not less than or equal to %r' % (a, b) + standardMsg = '%s not less than or equal to %s' % (safe_repr(a), safe_repr(b)) self.fail(self._formatMessage(msg, standardMsg)) def assertGreater(self, a, b, msg=None): """Just like self.assertTrue(a > b), but with a nicer default message.""" if not a > b: - standardMsg = '%r not greater than %r' % (a, b) + standardMsg = '%s not greater than %s' % (safe_repr(a), safe_repr(b)) self.fail(self._formatMessage(msg, standardMsg)) def assertGreaterEqual(self, a, b, msg=None): """Just like self.assertTrue(a >= b), but with a nicer default message.""" if not a >= b: - standardMsg = '%r not greater than or equal to %r' % (a, b) + standardMsg = '%s not greater than or equal to %s' % (safe_repr(a), safe_repr(b)) self.fail(self._formatMessage(msg, standardMsg)) def assertIsNone(self, obj, msg=None): """Same as self.assertTrue(obj is None), with a nicer default message.""" if obj is not None: - standardMsg = '%r is not None' % obj + standardMsg = '%s is not None' % (safe_repr(obj),) self.fail(self._formatMessage(msg, standardMsg)) def assertIsNotNone(self, obj, msg=None): @@ -837,13 +890,13 @@ """Same as self.assertTrue(isinstance(obj, cls)), with a nicer default message.""" if not isinstance(obj, cls): - standardMsg = '%r is not an instance of %r' % (obj, cls) + standardMsg = '%s is not an instance of %r' % (safe_repr(obj), cls) self.fail(self._formatMessage(msg, standardMsg)) def assertNotIsInstance(self, obj, cls, msg=None): """Included for symmetry with assertIsInstance.""" if isinstance(obj, cls): - standardMsg = '%r is an instance of %r' % (obj, cls) + standardMsg = '%s is an instance of %r' % (safe_repr(obj), cls) self.fail(self._formatMessage(msg, standardMsg)) def assertRaisesRegexp(self, expected_exception, expected_regexp, @@ -921,11 +974,11 @@ self._testFunc, self._description)) def __str__(self): - return "%s (%s)" % (util.strclass(self.__class__), + return "%s (%s)" % (strclass(self.__class__), self._testFunc.__name__) def __repr__(self): - return "<%s testFunc=%s>" % (util.strclass(self.__class__), + return "<%s tec=%s>" % (strclass(self.__class__), self._testFunc) def shortDescription(self): Modified: python/branches/py3k/Lib/unittest/result.py ============================================================================== --- python/branches/py3k/Lib/unittest/result.py (original) +++ python/branches/py3k/Lib/unittest/result.py Sun Mar 14 16:04:17 2010 @@ -16,7 +16,9 @@ contain tuples of (testcase, exceptioninfo), where exceptioninfo is the formatted traceback of the error that occurred. """ - def __init__(self): + _previousTestClass = None + _moduleSetUpFailed = False + def __init__(self, stream=None, descriptions=None, verbosity=None): self.failures = [] self.errors = [] self.testsRun = 0 @@ -25,6 +27,9 @@ self.unexpectedSuccesses = [] self.shouldStop = False + def printErrors(self): + "Called by TestRunner after test run" + def startTest(self, test): "Called when the given test is about to be run" self.testsRun += 1 @@ -107,6 +112,6 @@ return length def __repr__(self): - return "<%s run=%i errors=%i failures=%i>" % \ + return ("<%s run=%i errors=%i failures=%i>" % (util.strclass(self.__class__), self.testsRun, len(self.errors), - len(self.failures)) + len(self.failures))) Modified: python/branches/py3k/Lib/unittest/runner.py ============================================================================== --- python/branches/py3k/Lib/unittest/runner.py (original) +++ python/branches/py3k/Lib/unittest/runner.py Sun Mar 14 16:04:17 2010 @@ -148,15 +148,22 @@ stopTime = time.time() timeTaken = stopTime - startTime result.printErrors() - self.stream.writeln(result.separator2) + if hasattr(result, 'separator2'): + self.stream.writeln(result.separator2) run = result.testsRun self.stream.writeln("Ran %d test%s in %.3fs" % (run, run != 1 and "s" or "", timeTaken)) self.stream.writeln() - results = map(len, (result.expectedFailures, - result.unexpectedSuccesses, - result.skipped)) - expectedFails, unexpectedSuccesses, skipped = results + + expectedFails = unexpectedSuccesses = skipped = 0 + try: + results = map(len, (result.expectedFailures, + result.unexpectedSuccesses, + result.skipped)) + expectedFails, unexpectedSuccesses, skipped = results + except AttributeError: + pass + infos = [] if not result.wasSuccessful(): self.stream.write("FAILED") Modified: python/branches/py3k/Lib/unittest/suite.py ============================================================================== --- python/branches/py3k/Lib/unittest/suite.py (original) +++ python/branches/py3k/Lib/unittest/suite.py Sun Mar 14 16:04:17 2010 @@ -1,17 +1,13 @@ """TestSuite""" +import sys + from . import case from . import util -class TestSuite(object): - """A test suite is a composite test consisting of a number of TestCases. - - For use, create an instance of TestSuite, then add test case instances. - When all tests have been added, the suite can be passed to a test - runner, such as TextTestRunner. It will run the individual test cases - in the order in which they were added, aggregating the results. When - subclassing, do not forget to call the base class constructor. +class BaseTestSuite(object): + """A simple test suite that doesn't provide class or module shared fixtures. """ def __init__(self, tests=()): self._tests = [] @@ -67,3 +63,190 @@ """Run the tests without collecting errors in a TestResult""" for test in self: test.debug() + + +class TestSuite(BaseTestSuite): + """A test suite is a composite test consisting of a number of TestCases. + + For use, create an instance of TestSuite, then add test case instances. + When all tests have been added, the suite can be passed to a test + runner, such as TextTestRunner. It will run the individual test cases + in the order in which they were added, aggregating the results. When + subclassing, do not forget to call the base class constructor. + """ + + + def run(self, result): + self._wrapped_run(result) + self._tearDownPreviousClass(None, result) + self._handleModuleTearDown(result) + return result + + ################################ + # private methods + def _wrapped_run(self, result): + for test in self: + if result.shouldStop: + break + + if _isnotsuite(test): + self._tearDownPreviousClass(test, result) + self._handleModuleFixture(test, result) + self._handleClassSetUp(test, result) + result._previousTestClass = test.__class__ + + if (getattr(test.__class__, '_classSetupFailed', False) or + getattr(result, '_moduleSetUpFailed', False)): + continue + + if hasattr(test, '_wrapped_run'): + test._wrapped_run(result) + else: + test(result) + + def _handleClassSetUp(self, test, result): + previousClass = getattr(result, '_previousTestClass', None) + currentClass = test.__class__ + if currentClass == previousClass: + return + if result._moduleSetUpFailed: + return + if getattr(currentClass, "__unittest_skip__", False): + return + + currentClass._classSetupFailed = False + + setUpClass = getattr(currentClass, 'setUpClass', None) + if setUpClass is not None: + try: + setUpClass() + except: + currentClass._classSetupFailed = True + self._addClassSetUpError(result, currentClass) + + def _get_previous_module(self, result): + previousModule = None + previousClass = getattr(result, '_previousTestClass', None) + if previousClass is not None: + previousModule = previousClass.__module__ + return previousModule + + + def _handleModuleFixture(self, test, result): + previousModule = self._get_previous_module(result) + currentModule = test.__class__.__module__ + if currentModule == previousModule: + return + + self._handleModuleTearDown(result) + + + result._moduleSetUpFailed = False + try: + module = sys.modules[currentModule] + except KeyError: + return + setUpModule = getattr(module, 'setUpModule', None) + if setUpModule is not None: + try: + setUpModule() + except: + result._moduleSetUpFailed = True + error = _ErrorHolder('setUpModule (%s)' % currentModule) + result.addError(error, sys.exc_info()) + + def _handleModuleTearDown(self, result): + previousModule = self._get_previous_module(result) + if previousModule is None: + return + if result._moduleSetUpFailed: + return + + try: + module = sys.modules[previousModule] + except KeyError: + return + + tearDownModule = getattr(module, 'tearDownModule', None) + if tearDownModule is not None: + try: + tearDownModule() + except: + error = _ErrorHolder('tearDownModule (%s)' % previousModule) + result.addError(error, sys.exc_info()) + + def _tearDownPreviousClass(self, test, result): + previousClass = getattr(result, '_previousTestClass', None) + currentClass = test.__class__ + if currentClass == previousClass: + return + if getattr(previousClass, '_classSetupFailed', False): + return + if getattr(result, '_moduleSetUpFailed', False): + return + if getattr(previousClass, "__unittest_skip__", False): + return + + tearDownClass = getattr(previousClass, 'tearDownClass', None) + if tearDownClass is not None: + try: + tearDownClass() + except: + self._addClassTearDownError(result) + + def _addClassTearDownError(self, result): + className = util.strclass(result._previousTestClass) + error = _ErrorHolder('classTearDown (%s)' % className) + result.addError(error, sys.exc_info()) + + def _addClassSetUpError(self, result, klass): + className = util.strclass(klass) + error = _ErrorHolder('classSetUp (%s)' % className) + result.addError(error, sys.exc_info()) + + +class _ErrorHolder(object): + """ + Placeholder for a TestCase inside a result. As far as a TestResult + is concerned, this looks exactly like a unit test. Used to insert + arbitrary errors into a test suite run. + """ + # Inspired by the ErrorHolder from Twisted: + # http://twistedmatrix.com/trac/browser/trunk/twisted/trial/runner.py + + # attribute used by TestResult._exc_info_to_string + failureException = None + + def __init__(self, description): + self.description = description + + def id(self): + return self.description + + def shortDescription(self): + return None + + def __repr__(self): + return "" % (self.description,) + + def __str__(self): + return self.id() + + def run(self, result): + # could call result.addError(...) - but this test-like object + # shouldn't be run anyway + pass + + def __call__(self, result): + return self.run(result) + + def countTestCases(self): + return 0 + +def _isnotsuite(test): + "A crude way to tell apart testcases and suites with duck-typing" + try: + iter(test) + except TypeError: + return True + return False Modified: python/branches/py3k/Lib/unittest/util.py ============================================================================== --- python/branches/py3k/Lib/unittest/util.py (original) +++ python/branches/py3k/Lib/unittest/util.py Sun Mar 14 16:04:17 2010 @@ -1,5 +1,11 @@ """Various utility functions.""" +def safe_repr(obj): + try: + return repr(obj) + except Exception: + return object.__repr__(obj) + def strclass(cls): return "%s.%s" % (cls.__module__, cls.__name__) From python-checkins at python.org Sun Mar 14 16:06:14 2010 From: python-checkins at python.org (benjamin.peterson) Date: Sun, 14 Mar 2010 16:06:14 +0100 (CET) Subject: [Python-checkins] r78964 - in python/trunk: configure configure.in Message-ID: <20100314150614.70828FA48@mail.python.org> Author: benjamin.peterson Date: Sun Mar 14 16:06:14 2010 New Revision: 78964 Log: fix quotes Modified: python/trunk/configure python/trunk/configure.in Modified: python/trunk/configure ============================================================================== --- python/trunk/configure (original) +++ python/trunk/configure Sun Mar 14 16:06:14 2010 @@ -1,5 +1,5 @@ #! /bin/sh -# From configure.in Revision: 78819 . +# From configure.in Revision: 78962 . # Guess values for system-dependent variables and create Makefiles. # Generated by GNU Autoconf 2.61 for python 2.7. # @@ -14860,7 +14860,7 @@ FreeBSD*) if [ "`$CC -dM -E - Author: benjamin.peterson Date: Sun Mar 14 16:18:25 2010 New Revision: 78965 Log: Merged revisions 78962,78964 via svnmerge from svn+ssh://pythondev at svn.python.org/python/trunk ........ r78962 | benjamin.peterson | 2010-03-14 09:24:31 -0500 (Sun, 14 Mar 2010) | 1 line fix freebsd linking #7705 ........ r78964 | benjamin.peterson | 2010-03-14 10:06:14 -0500 (Sun, 14 Mar 2010) | 1 line fix quotes ........ Modified: python/branches/py3k/ (props changed) python/branches/py3k/configure python/branches/py3k/configure.in Modified: python/branches/py3k/configure ============================================================================== --- python/branches/py3k/configure (original) +++ python/branches/py3k/configure Sun Mar 14 16:18:25 2010 @@ -1,5 +1,5 @@ #! /bin/sh -# From configure.in Revision: 78818 . +# From configure.in Revision: 78821 . # Guess values for system-dependent variables and create Makefiles. # Generated by GNU Autoconf 2.61 for python 3.2. # @@ -14728,7 +14728,7 @@ FreeBSD*) if [ "`$CC -dM -E - Author: florent.xicluna Date: Sun Mar 14 16:20:59 2010 New Revision: 78966 Log: Do not hardcode Expat version. It's possible to build Python with --with-system-expat option. Modified: python/trunk/Lib/test/test_xml_etree.py Modified: python/trunk/Lib/test/test_xml_etree.py ============================================================================== --- python/trunk/Lib/test/test_xml_etree.py (original) +++ python/trunk/Lib/test/test_xml_etree.py Sun Mar 14 16:20:59 2010 @@ -586,8 +586,8 @@ >>> parser = ET.XMLParser() - >>> parser.version # XXX: Upgrade to 2.0.1? - 'Expat 2.0.0' + >>> parser.version # doctest: +ELLIPSIS + 'Expat ...' >>> parser.feed(open(SIMPLE_XMLFILE).read()) >>> print serialize(parser.close()) From solipsis at pitrou.net Sun Mar 14 16:30:21 2010 From: solipsis at pitrou.net (Antoine Pitrou) Date: Sun, 14 Mar 2010 15:30:21 +0000 (UTC) Subject: [Python-checkins] =?utf-8?q?r78946_-_in_python/branches/py3k=3A?= =?utf-8?q?=09Doc/library/subprocess=2ErstInclude/abstract=2Eh=09In?= =?utf-8?q?clude/longobject=2Eh_Include/pythonrun=2Eh_Lib/subproces?= =?utf-8?q?s=2Epy=09Lib/test/test=5Fsubprocess=2EpyModules/=5Fposix?= =?utf-8?q?subprocess=2Ec=09Modules/posixmodule=2Ec_Objects/abstrac?= =?utf-8?q?t=2Ec_Python/pythonrun=2Ec_setup=2Epy?= References: <20100314064956.35D23F74F@mail.python.org> Message-ID: [in longobject.h] > +/* Issue #1983: pid_t can be longer than a C long on some systems */ > +#if !defined(SIZEOF_PID_T) || SIZEOF_PID_T == SIZEOF_INT > +#define PARSE_PID "i" I'm not sure it is ok to define symbols not beginning with Py or _Py in a public header file. Antoine. From python-checkins at python.org Sun Mar 14 19:56:11 2010 From: python-checkins at python.org (gregory.p.smith) Date: Sun, 14 Mar 2010 19:56:11 +0100 (CET) Subject: [Python-checkins] r78967 - in python/branches/py3k: Include/longobject.h Modules/posixmodule.c Message-ID: <20100314185611.9F417FDE6@mail.python.org> Author: gregory.p.smith Date: Sun Mar 14 19:56:11 2010 New Revision: 78967 Log: Change PARSE_PID to _Py_PARSE_PID (cleanup for r78946). Modified: python/branches/py3k/Include/longobject.h python/branches/py3k/Modules/posixmodule.c Modified: python/branches/py3k/Include/longobject.h ============================================================================== --- python/branches/py3k/Include/longobject.h (original) +++ python/branches/py3k/Include/longobject.h Sun Mar 14 19:56:11 2010 @@ -43,15 +43,15 @@ /* Issue #1983: pid_t can be longer than a C long on some systems */ #if !defined(SIZEOF_PID_T) || SIZEOF_PID_T == SIZEOF_INT -#define PARSE_PID "i" +#define _Py_PARSE_PID "i" #define PyLong_FromPid PyLong_FromLong #define PyLong_AsPid PyLong_AsLong #elif SIZEOF_PID_T == SIZEOF_LONG -#define PARSE_PID "l" +#define _Py_PARSE_PID "l" #define PyLong_FromPid PyLong_FromLong #define PyLong_AsPid PyLong_AsLong #elif defined(SIZEOF_LONG_LONG) && SIZEOF_PID_T == SIZEOF_LONG_LONG -#define PARSE_PID "L" +#define _Py_PARSE_PID "L" #define PyLong_FromPid PyLong_FromLongLong #define PyLong_AsPid PyLong_AsLongLong #else Modified: python/branches/py3k/Modules/posixmodule.c ============================================================================== --- python/branches/py3k/Modules/posixmodule.c (original) +++ python/branches/py3k/Modules/posixmodule.c Sun Mar 14 19:56:11 2010 @@ -4012,7 +4012,7 @@ posix_getpgid(PyObject *self, PyObject *args) { pid_t pid, pgid; - if (!PyArg_ParseTuple(args, PARSE_PID ":getpgid", &pid)) + if (!PyArg_ParseTuple(args, _Py_PARSE_PID ":getpgid", &pid)) return NULL; pgid = getpgid(pid); if (pgid < 0) @@ -4124,7 +4124,7 @@ { pid_t pid; int sig; - if (!PyArg_ParseTuple(args, PARSE_PID "i:kill", &pid, &sig)) + if (!PyArg_ParseTuple(args, _Py_PARSE_PID "i:kill", &pid, &sig)) return NULL; #if defined(PYOS_OS2) && !defined(PYCC_GCC) if (sig == XCPT_SIGNAL_INTR || sig == XCPT_SIGNAL_BREAK) { @@ -4162,7 +4162,7 @@ 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, PARSE_PID "i:killpg", &pgid, &sig)) + if (!PyArg_ParseTuple(args, _Py_PARSE_PID "i:killpg", &pgid, &sig)) return NULL; if (killpg(pgid, sig) == -1) return posix_error(); @@ -4519,7 +4519,7 @@ WAIT_TYPE status; WAIT_STATUS_INT(status) = 0; - if (!PyArg_ParseTuple(args, PARSE_PID "i:wait4", &pid, &options)) + if (!PyArg_ParseTuple(args, _Py_PARSE_PID "i:wait4", &pid, &options)) return NULL; Py_BEGIN_ALLOW_THREADS @@ -4543,7 +4543,7 @@ WAIT_TYPE status; WAIT_STATUS_INT(status) = 0; - if (!PyArg_ParseTuple(args, PARSE_PID "i:waitpid", &pid, &options)) + if (!PyArg_ParseTuple(args, _Py_PARSE_PID "i:waitpid", &pid, &options)) return NULL; Py_BEGIN_ALLOW_THREADS pid = waitpid(pid, &status, options); @@ -4567,7 +4567,7 @@ Py_intptr_t pid; int status, options; - if (!PyArg_ParseTuple(args, PARSE_PID "i:waitpid", &pid, &options)) + if (!PyArg_ParseTuple(args, _Py_PARSE_PID "i:waitpid", &pid, &options)) return NULL; Py_BEGIN_ALLOW_THREADS pid = _cwait(&status, pid, options); @@ -4783,7 +4783,7 @@ { pid_t pid; int sid; - if (!PyArg_ParseTuple(args, PARSE_PID ":getsid", &pid)) + if (!PyArg_ParseTuple(args, _Py_PARSE_PID ":getsid", &pid)) return NULL; sid = getsid(pid); if (sid < 0) @@ -4818,7 +4818,7 @@ { pid_t pid; int pgrp; - if (!PyArg_ParseTuple(args, PARSE_PID "i:setpgid", &pid, &pgrp)) + if (!PyArg_ParseTuple(args, _Py_PARSE_PID "i:setpgid", &pid, &pgrp)) return NULL; if (setpgid(pid, pgrp) < 0) return posix_error(); @@ -4858,7 +4858,7 @@ { int fd; pid_t pgid; - if (!PyArg_ParseTuple(args, "i" PARSE_PID ":tcsetpgrp", &fd, &pgid)) + if (!PyArg_ParseTuple(args, "i" _Py_PARSE_PID ":tcsetpgrp", &fd, &pgid)) return NULL; if (tcsetpgrp(fd, pgid) < 0) return posix_error(); From python-checkins at python.org Mon Mar 15 01:02:40 2010 From: python-checkins at python.org (matthias.klose) Date: Mon, 15 Mar 2010 01:02:40 +0100 (CET) Subject: [Python-checkins] r78968 - in python/trunk: Misc/NEWS Modules/_ctypes/libffi.diff Modules/_ctypes/libffi/ChangeLog Modules/_ctypes/libffi/ChangeLog.libffi Modules/_ctypes/libffi/ChangeLog.libgcj Modules/_ctypes/libffi/ChangeLog.v1 Modules/_ctypes/libffi/LICENSE Modules/_ctypes/libffi/Makefile.am Modules/_ctypes/libffi/Makefile.in Modules/_ctypes/libffi/README Modules/_ctypes/libffi/aclocal.m4 Modules/_ctypes/libffi/compile Modules/_ctypes/libffi/config.guess Modules/_ctypes/libffi/config.sub Modules/_ctypes/libffi/configure Modules/_ctypes/libffi/configure.ac Modules/_ctypes/libffi/depcomp Modules/_ctypes/libffi/doc Modules/_ctypes/libffi/doc/libffi.info Modules/_ctypes/libffi/doc/libffi.texi Modules/_ctypes/libffi/doc/stamp-vti Modules/_ctypes/libffi/doc/version.texi Modules/_ctypes/libffi/fficonfig.h.in Modules/_ctypes/libffi/include/Makefile.am Modules/_ctypes/libffi/include/Makefile.in Modules/_ctypes/libffi/include/ffi.h.in Modules/_ctypes/libffi/include/ffi_common.h Modules/_ctypes/libffi/libffi.pc.in Modules/_ctypes/libffi/libtool-version Modules/_ctypes/libffi/ltmain.sh Modules/_ctypes/libffi/m4 Modules/_ctypes/libffi/m4/libtool.m4 Modules/_ctypes/libffi/m4/ltoptions.m4 Modules/_ctypes/libffi/m4/ltsugar.m4 Modules/_ctypes/libffi/m4/ltversion.m4 Modules/_ctypes/libffi/m4/lt~obsolete.m4 Modules/_ctypes/libffi/man Modules/_ctypes/libffi/man/Makefile.am Modules/_ctypes/libffi/man/Makefile.in Modules/_ctypes/libffi/man/ffi.3 Modules/_ctypes/libffi/man/ffi_call.3 Modules/_ctypes/libffi/man/ffi_prep_cif.3 Modules/_ctypes/libffi/mdate-sh Modules/_ctypes/libffi/missing Modules/_ctypes/libffi/src/arm/sysv.S Modules/_ctypes/libffi/src/avr32 Modules/_ctypes/libffi/src/avr32/ffi.c Modules/_ctypes/libffi/src/avr32/ffitarget.h Modules/_ctypes/libffi/src/avr32/sysv.S Modules/_ctypes/libffi/src/closures.c Modules/_ctypes/libffi/src/darwin/ffitarget.h Modules/_ctypes/libffi/src/debug.c Modules/_ctypes/libffi/src/dlmalloc.c Modules/_ctypes/libffi/src/frv/ffi.c Modules/_ctypes/libffi/src/java_raw_api.c Modules/_ctypes/libffi/src/mips/ffi.c Modules/_ctypes/libffi/src/mips/ffitarget.h Modules/_ctypes/libffi/src/mips/n32.S Modules/_ctypes/libffi/src/mips/o32.S Modules/_ctypes/libffi/src/pa/ffi.c Modules/_ctypes/libffi/src/powerpc/aix.S Modules/_ctypes/libffi/src/powerpc/aix_closure.S Modules/_ctypes/libffi/src/powerpc/ffi.c Modules/_ctypes/libffi/src/powerpc/ffi_darwin.c Modules/_ctypes/libffi/src/powerpc/ffitarget.h Modules/_ctypes/libffi/src/powerpc/sysv.S Modules/_ctypes/libffi/src/raw_api.c Modules/_ctypes/libffi/src/s390/sysv.S Modules/_ctypes/libffi/src/sh/ffi.c Modules/_ctypes/libffi/src/sh/sysv.S Modules/_ctypes/libffi/src/sh64/ffi.c Modules/_ctypes/libffi/src/sh64/sysv.S Modules/_ctypes/libffi/src/sparc/ffi.c Modules/_ctypes/libffi/src/sparc/v8.S Modules/_ctypes/libffi/src/types.c Modules/_ctypes/libffi/src/x86/darwin.S Modules/_ctypes/libffi/src/x86/ffi.c Modules/_ctypes/libffi/src/x86/ffi64.c Modules/_ctypes/libffi/src/x86/ffitarget.h Modules/_ctypes/libffi/src/x86/sysv.S Modules/_ctypes/libffi/src/x86/unix64.S Modules/_ctypes/libffi/src/x86/win32.S Modules/_ctypes/libffi/src/x86/win64.S Modules/_ctypes/libffi/testsuite Modules/_ctypes/libffi/testsuite/Makefile.am Modules/_ctypes/libffi/testsuite/Makefile.in Modules/_ctypes/libffi/testsuite/config Modules/_ctypes/libffi/testsuite/config/default.exp Modules/_ctypes/libffi/testsuite/lib Modules/_ctypes/libffi/testsuite/lib/libffi-dg.exp Modules/_ctypes/libffi/testsuite/lib/target-libpath.exp Modules/_ctypes/libffi/testsuite/lib/wrapper.exp Modules/_ctypes/libffi/testsuite/libffi.call Modules/_ctypes/libffi/testsuite/libffi.call/call.exp Modules/_ctypes/libffi/testsuite/libffi.call/closure_fn0.c Modules/_ctypes/libffi/testsuite/libffi.call/closure_fn1.c Modules/_ctypes/libffi/testsuite/libffi.call/closure_fn2.c Modules/_ctypes/libffi/testsuite/libffi.call/closure_fn3.c Modules/_ctypes/libffi/testsuite/libffi.call/closure_fn4.c Modules/_ctypes/libffi/testsuite/libffi.call/closure_fn5.c Modules/_ctypes/libffi/testsuite/libffi.call/closure_fn6.c Modules/_ctypes/libffi/testsuite/libffi.call/closure_loc_fn0.c Modules/_ctypes/libffi/testsuite/libffi.call/closure_stdcall.c Modules/_ctypes/libffi/testsuite/libffi.call/cls_12byte.c Modules/_ctypes/libffi/testsuite/libffi.call/cls_16byte.c Modules/_ctypes/libffi/testsuite/libffi.call/cls_18byte.c Modules/_ctypes/libffi/testsuite/libffi.call/cls_19byte.c Modules/_ctypes/libffi/testsuite/libffi.call/cls_1_1byte.c Modules/_ctypes/libffi/testsuite/libffi.call/cls_20byte.c Modules/_ctypes/libffi/testsuite/libffi.call/cls_20byte1.c Modules/_ctypes/libffi/testsuite/libffi.call/cls_24byte.c Modules/_ctypes/libffi/testsuite/libffi.call/cls_2byte.c Modules/_ctypes/libffi/testsuite/libffi.call/cls_3_1byte.c Modules/_ctypes/libffi/testsuite/libffi.call/cls_3byte1.c Modules/_ctypes/libffi/testsuite/libffi.call/cls_3byte2.c Modules/_ctypes/libffi/testsuite/libffi.call/cls_4_1byte.c Modules/_ctypes/libffi/testsuite/libffi.call/cls_4byte.c Modules/_ctypes/libffi/testsuite/libffi.call/cls_5_1_byte.c Modules/_ctypes/libffi/testsuite/libffi.call/cls_5byte.c Modules/_ctypes/libffi/testsuite/libffi.call/cls_64byte.c Modules/_ctypes/libffi/testsuite/libffi.call/cls_6_1_byte.c Modules/_ctypes/libffi/testsuite/libffi.call/cls_6byte.c Modules/_ctypes/libffi/testsuite/libffi.call/cls_7_1_byte.c Modules/_ctypes/libffi/testsuite/libffi.call/cls_7byte.c Modules/_ctypes/libffi/testsuite/libffi.call/cls_8byte.c Modules/_ctypes/libffi/testsuite/libffi.call/cls_9byte1.c Modules/_ctypes/libffi/testsuite/libffi.call/cls_9byte2.c Modules/_ctypes/libffi/testsuite/libffi.call/cls_align_double.c Modules/_ctypes/libffi/testsuite/libffi.call/cls_align_float.c Modules/_ctypes/libffi/testsuite/libffi.call/cls_align_longdouble.c Modules/_ctypes/libffi/testsuite/libffi.call/cls_align_longdouble_split.c Modules/_ctypes/libffi/testsuite/libffi.call/cls_align_longdouble_split2.c Modules/_ctypes/libffi/testsuite/libffi.call/cls_align_pointer.c Modules/_ctypes/libffi/testsuite/libffi.call/cls_align_sint16.c Modules/_ctypes/libffi/testsuite/libffi.call/cls_align_sint32.c Modules/_ctypes/libffi/testsuite/libffi.call/cls_align_sint64.c Modules/_ctypes/libffi/testsuite/libffi.call/cls_align_uint16.c Modules/_ctypes/libffi/testsuite/libffi.call/cls_align_uint32.c Modules/_ctypes/libffi/testsuite/libffi.call/cls_align_uint64.c Modules/_ctypes/libffi/testsuite/libffi.call/cls_dbls_struct.c Modules/_ctypes/libffi/testsuite/libffi.call/cls_double.c Modules/_ctypes/libffi/testsuite/libffi.call/cls_double_va.c Modules/_ctypes/libffi/testsuite/libffi.call/cls_float.c Modules/_ctypes/libffi/testsuite/libffi.call/cls_longdouble.c Modules/_ctypes/libffi/testsuite/libffi.call/cls_longdouble_va.c Modules/_ctypes/libffi/testsuite/libffi.call/cls_multi_schar.c Modules/_ctypes/libffi/testsuite/libffi.call/cls_multi_sshort.c Modules/_ctypes/libffi/testsuite/libffi.call/cls_multi_sshortchar.c Modules/_ctypes/libffi/testsuite/libffi.call/cls_multi_uchar.c Modules/_ctypes/libffi/testsuite/libffi.call/cls_multi_ushort.c Modules/_ctypes/libffi/testsuite/libffi.call/cls_multi_ushortchar.c Modules/_ctypes/libffi/testsuite/libffi.call/cls_pointer.c Modules/_ctypes/libffi/testsuite/libffi.call/cls_pointer_stack.c Modules/_ctypes/libffi/testsuite/libffi.call/cls_schar.c Modules/_ctypes/libffi/testsuite/libffi.call/cls_sint.c Modules/_ctypes/libffi/testsuite/libffi.call/cls_sshort.c Modules/_ctypes/libffi/testsuite/libffi.call/cls_uchar.c Modules/_ctypes/libffi/testsuite/libffi.call/cls_uint.c Modules/_ctypes/libffi/testsuite/libffi.call/cls_ulonglong.c Modules/_ctypes/libffi/testsuite/libffi.call/cls_ushort.c Modules/_ctypes/libffi/testsuite/libffi.call/err_bad_abi.c Modules/_ctypes/libffi/testsuite/libffi.call/err_bad_typedef.c Modules/_ctypes/libffi/testsuite/libffi.call/ffitest.h Modules/_ctypes/libffi/testsuite/libffi.call/float.c Modules/_ctypes/libffi/testsuite/libffi.call/float1.c Modules/_ctypes/libffi/testsuite/libffi.call/float2.c Modules/_ctypes/libffi/testsuite/libffi.call/float3.c Modules/_ctypes/libffi/testsuite/libffi.call/float4.c Modules/_ctypes/libffi/testsuite/libffi.call/huge_struct.c Modules/_ctypes/libffi/testsuite/libffi.call/many.c Modules/_ctypes/libffi/testsuite/libffi.call/many_win32.c Modules/_ctypes/libffi/testsuite/libffi.call/negint.c Modules/_ctypes/libffi/testsuite/libffi.call/nested_struct.c Modules/_ctypes/libffi/testsuite/libffi.call/nested_struct1.c Modules/_ctypes/libffi/testsuite/libffi.call/nested_struct10.c Modules/_ctypes/libffi/testsuite/libffi.call/nested_struct2.c Modules/_ctypes/libffi/testsuite/libffi.call/nested_struct3.c Modules/_ctypes/libffi/testsuite/libffi.call/nested_struct4.c Modules/_ctypes/libffi/testsuite/libffi.call/nested_struct5.c Modules/_ctypes/libffi/testsuite/libffi.call/nested_struct6.c Modules/_ctypes/libffi/testsuite/libffi.call/nested_struct7.c Modules/_ctypes/libffi/testsuite/libffi.call/nested_struct8.c Modules/_ctypes/libffi/testsuite/libffi.call/nested_struct9.c Modules/_ctypes/libffi/testsuite/libffi.call/problem1.c Modules/_ctypes/libffi/testsuite/libffi.call/promotion.c Modules/_ctypes/libffi/testsuite/libffi.call/pyobjc-tc.c Modules/_ctypes/libffi/testsuite/libffi.call/return_dbl.c Modules/_ctypes/libffi/testsuite/libffi.call/return_dbl1.c Modules/_ctypes/libffi/testsuite/libffi.call/return_dbl2.c Modules/_ctypes/libffi/testsuite/libffi.call/return_fl.c Modules/_ctypes/libffi/testsuite/libffi.call/return_fl1.c Modules/_ctypes/libffi/testsuite/libffi.call/return_fl2.c Modules/_ctypes/libffi/testsuite/libffi.call/return_fl3.c Modules/_ctypes/libffi/testsuite/libffi.call/return_ldl.c Modules/_ctypes/libffi/testsuite/libffi.call/return_ll.c Modules/_ctypes/libffi/testsuite/libffi.call/return_ll1.c Modules/_ctypes/libffi/testsuite/libffi.call/return_sc.c Modules/_ctypes/libffi/testsuite/libffi.call/return_sl.c Modules/_ctypes/libffi/testsuite/libffi.call/return_uc.c Modules/_ctypes/libffi/testsuite/libffi.call/return_ul.c Modules/_ctypes/libffi/testsuite/libffi.call/stret_large.c Modules/_ctypes/libffi/testsuite/libffi.call/stret_large2.c Modules/_ctypes/libffi/testsuite/libffi.call/stret_medium.c Modules/_ctypes/libffi/testsuite/libffi.call/stret_medium2.c Modules/_ctypes/libffi/testsuite/libffi.call/strlen.c Modules/_ctypes/libffi/testsuite/libffi.call/strlen_win32.c Modules/_ctypes/libffi/testsuite/libffi.call/struct1.c Modules/_ctypes/libffi/testsuite/libffi.call/struct2.c Modules/_ctypes/libffi/testsuite/libffi.call/struct3.c Modules/_ctypes/libffi/testsuite/libffi.call/struct4.c Modules/_ctypes/libffi/testsuite/libffi.call/struct5.c Modules/_ctypes/libffi/testsuite/libffi.call/struct6.c Modules/_ctypes/libffi/testsuite/libffi.call/struct7.c Modules/_ctypes/libffi/testsuite/libffi.call/struct8.c Modules/_ctypes/libffi/testsuite/libffi.call/struct9.c Modules/_ctypes/libffi/testsuite/libffi.call/testclosure.c Modules/_ctypes/libffi/testsuite/libffi.special Modules/_ctypes/libffi/testsuite/libffi.special/ffitestcxx.h Modules/_ctypes/libffi/testsuite/libffi.special/special.exp Modules/_ctypes/libffi/testsuite/libffi.special/unwindtest.cc Modules/_ctypes/libffi/testsuite/libffi.special/unwindtest_ffi_call.cc Modules/_ctypes/libffi/texinfo.tex Message-ID: <20100315000240.8D152EE9A4@mail.python.org> Author: matthias.klose Date: Mon Mar 15 01:02:36 2010 New Revision: 78968 Log: - Issue #8142: Update libffi to the 3.0.9 release. -- Diese und die folgenden Zeilen werden ignoriert -- M Misc/NEWS A Modules/_ctypes/libffi/m4 A Modules/_ctypes/libffi/m4/ltsugar.m4 A Modules/_ctypes/libffi/m4/libtool.m4 A Modules/_ctypes/libffi/m4/ltversion.m4 A Modules/_ctypes/libffi/m4/lt~obsolete.m4 A Modules/_ctypes/libffi/m4/ltoptions.m4 A Modules/_ctypes/libffi/ChangeLog.libffi M Modules/_ctypes/libffi/configure M Modules/_ctypes/libffi/Makefile.in M Modules/_ctypes/libffi/fficonfig.h.in M Modules/_ctypes/libffi/src/arm/sysv.S M Modules/_ctypes/libffi/src/powerpc/ffitarget.h M Modules/_ctypes/libffi/src/powerpc/aix.S M Modules/_ctypes/libffi/src/powerpc/ffi.c M Modules/_ctypes/libffi/src/powerpc/sysv.S M Modules/_ctypes/libffi/src/powerpc/ffi_darwin.c M Modules/_ctypes/libffi/src/powerpc/aix_closure.S A Modules/_ctypes/libffi/src/closures.c D Modules/_ctypes/libffi/src/darwin/ffitarget.h M Modules/_ctypes/libffi/src/sh64/ffi.c M Modules/_ctypes/libffi/src/sh64/sysv.S M Modules/_ctypes/libffi/src/x86/ffi64.c M Modules/_ctypes/libffi/src/x86/ffitarget.h M Modules/_ctypes/libffi/src/x86/win32.S M Modules/_ctypes/libffi/src/x86/darwin.S M Modules/_ctypes/libffi/src/x86/ffi.c M Modules/_ctypes/libffi/src/x86/sysv.S A Modules/_ctypes/libffi/src/x86/win64.S M Modules/_ctypes/libffi/src/x86/unix64.S A Modules/_ctypes/libffi/src/types.c A Modules/_ctypes/libffi/src/avr32 A Modules/_ctypes/libffi/src/avr32/ffitarget.h A Modules/_ctypes/libffi/src/avr32/ffi.c A Modules/_ctypes/libffi/src/avr32/sysv.S M Modules/_ctypes/libffi/src/frv/ffi.c M Modules/_ctypes/libffi/src/s390/sysv.S M Modules/_ctypes/libffi/src/pa/ffi.c A Modules/_ctypes/libffi/src/raw_api.c A Modules/_ctypes/libffi/src/java_raw_api.c A Modules/_ctypes/libffi/src/debug.c M Modules/_ctypes/libffi/src/sparc/ffi.c M Modules/_ctypes/libffi/src/sparc/v8.S M Modules/_ctypes/libffi/src/mips/ffitarget.h M Modules/_ctypes/libffi/src/mips/n32.S M Modules/_ctypes/libffi/src/mips/o32.S M Modules/_ctypes/libffi/src/mips/ffi.c A Modules/_ctypes/libffi/src/dlmalloc.c M Modules/_ctypes/libffi/src/sh/ffi.c M Modules/_ctypes/libffi/src/sh/sysv.S AM Modules/_ctypes/libffi/depcomp AM Modules/_ctypes/libffi/compile M Modules/_ctypes/libffi/config.guess AM Modules/_ctypes/libffi/ltmain.sh M Modules/_ctypes/libffi/config.sub AM Modules/_ctypes/libffi/mdate-sh M Modules/_ctypes/libffi/configure.ac A Modules/_ctypes/libffi/doc A Modules/_ctypes/libffi/doc/libffi.texi A Modules/_ctypes/libffi/doc/stamp-vti A Modules/_ctypes/libffi/doc/libffi.info A Modules/_ctypes/libffi/doc/version.texi A Modules/_ctypes/libffi/texinfo.tex A Modules/_ctypes/libffi/man A Modules/_ctypes/libffi/man/ffi_call.3 A Modules/_ctypes/libffi/man/Makefile.in A Modules/_ctypes/libffi/man/ffi.3 A Modules/_ctypes/libffi/man/Makefile.am A Modules/_ctypes/libffi/man/ffi_prep_cif.3 A Modules/_ctypes/libffi/ChangeLog.libgcj M Modules/_ctypes/libffi/LICENSE M Modules/_ctypes/libffi/include/ffi.h.in M Modules/_ctypes/libffi/include/Makefile.in M Modules/_ctypes/libffi/include/ffi_common.h M Modules/_ctypes/libffi/include/Makefile.am A Modules/_ctypes/libffi/libtool-version A Modules/_ctypes/libffi/ChangeLog A Modules/_ctypes/libffi/testsuite A Modules/_ctypes/libffi/testsuite/Makefile.in A Modules/_ctypes/libffi/testsuite/libffi.call A Modules/_ctypes/libffi/testsuite/libffi.call/cls_multi_ushort.c A Modules/_ctypes/libffi/testsuite/libffi.call/stret_medium.c A Modules/_ctypes/libffi/testsuite/libffi.call/cls_align_uint16.c A Modules/_ctypes/libffi/testsuite/libffi.call/cls_align_longdouble_split2.c A Modules/_ctypes/libffi/testsuite/libffi.call/struct1.c A Modules/_ctypes/libffi/testsuite/libffi.call/return_uc.c A Modules/_ctypes/libffi/testsuite/libffi.call/struct3.c A Modules/_ctypes/libffi/testsuite/libffi.call/nested_struct1.c A Modules/_ctypes/libffi/testsuite/libffi.call/struct5.c A Modules/_ctypes/libffi/testsuite/libffi.call/err_bad_abi.c A Modules/_ctypes/libffi/testsuite/libffi.call/nested_struct3.c A Modules/_ctypes/libffi/testsuite/libffi.call/cls_7_1_byte.c A Modules/_ctypes/libffi/testsuite/libffi.call/nested_struct5.c A Modules/_ctypes/libffi/testsuite/libffi.call/cls_double.c A Modules/_ctypes/libffi/testsuite/libffi.call/struct7.c A Modules/_ctypes/libffi/testsuite/libffi.call/return_sl.c A Modules/_ctypes/libffi/testsuite/libffi.call/nested_struct7.c A Modules/_ctypes/libffi/testsuite/libffi.call/struct9.c A Modules/_ctypes/libffi/testsuite/libffi.call/cls_sint.c A Modules/_ctypes/libffi/testsuite/libffi.call/nested_struct9.c A Modules/_ctypes/libffi/testsuite/libffi.call/cls_pointer.c A Modules/_ctypes/libffi/testsuite/libffi.call/many_win32.c A Modules/_ctypes/libffi/testsuite/libffi.call/cls_20byte1.c A Modules/_ctypes/libffi/testsuite/libffi.call/cls_multi_sshortchar.c A Modules/_ctypes/libffi/testsuite/libffi.call/return_fl.c A Modules/_ctypes/libffi/testsuite/libffi.call/cls_align_sint64.c A Modules/_ctypes/libffi/testsuite/libffi.call/many.c A Modules/_ctypes/libffi/testsuite/libffi.call/strlen.c A Modules/_ctypes/libffi/testsuite/libffi.call/cls_3byte2.c A Modules/_ctypes/libffi/testsuite/libffi.call/return_ldl.c A Modules/_ctypes/libffi/testsuite/libffi.call/stret_large.c A Modules/_ctypes/libffi/testsuite/libffi.call/cls_multi_schar.c A Modules/_ctypes/libffi/testsuite/libffi.call/cls_multi_uchar.c A Modules/_ctypes/libffi/testsuite/libffi.call/cls_9byte1.c A Modules/_ctypes/libffi/testsuite/libffi.call/err_bad_typedef.c A Modules/_ctypes/libffi/testsuite/libffi.call/cls_19byte.c A Modules/_ctypes/libffi/testsuite/libffi.call/cls_align_float.c A Modules/_ctypes/libffi/testsuite/libffi.call/closure_fn1.c A Modules/_ctypes/libffi/testsuite/libffi.call/cls_align_longdouble_split.c A Modules/_ctypes/libffi/testsuite/libffi.call/problem1.c A Modules/_ctypes/libffi/testsuite/libffi.call/return_fl1.c A Modules/_ctypes/libffi/testsuite/libffi.call/closure_fn3.c A Modules/_ctypes/libffi/testsuite/libffi.call/return_dbl2.c A Modules/_ctypes/libffi/testsuite/libffi.call/cls_sshort.c A Modules/_ctypes/libffi/testsuite/libffi.call/return_fl3.c A Modules/_ctypes/libffi/testsuite/libffi.call/closure_fn5.c A Modules/_ctypes/libffi/testsuite/libffi.call/cls_align_double.c A Modules/_ctypes/libffi/testsuite/libffi.call/cls_2byte.c A Modules/_ctypes/libffi/testsuite/libffi.call/promotion.c A Modules/_ctypes/libffi/testsuite/libffi.call/nested_struct.c A Modules/_ctypes/libffi/testsuite/libffi.call/float2.c A Modules/_ctypes/libffi/testsuite/libffi.call/nested_struct10.c A Modules/_ctypes/libffi/testsuite/libffi.call/return_ll1.c A Modules/_ctypes/libffi/testsuite/libffi.call/cls_4byte.c A Modules/_ctypes/libffi/testsuite/libffi.call/float4.c A Modules/_ctypes/libffi/testsuite/libffi.call/cls_6byte.c A Modules/_ctypes/libffi/testsuite/libffi.call/cls_longdouble.c A Modules/_ctypes/libffi/testsuite/libffi.call/huge_struct.c A Modules/_ctypes/libffi/testsuite/libffi.call/cls_8byte.c A Modules/_ctypes/libffi/testsuite/libffi.call/cls_multi_sshort.c A Modules/_ctypes/libffi/testsuite/libffi.call/cls_align_uint32.c A Modules/_ctypes/libffi/testsuite/libffi.call/cls_align_sint16.c A Modules/_ctypes/libffi/testsuite/libffi.call/cls_double_va.c A Modules/_ctypes/libffi/testsuite/libffi.call/return_sc.c A Modules/_ctypes/libffi/testsuite/libffi.call/float.c A Modules/_ctypes/libffi/testsuite/libffi.call/cls_20byte.c A Modules/_ctypes/libffi/testsuite/libffi.call/cls_float.c A Modules/_ctypes/libffi/testsuite/libffi.call/struct2.c A Modules/_ctypes/libffi/testsuite/libffi.call/cls_pointer_stack.c A Modules/_ctypes/libffi/testsuite/libffi.call/cls_5_1_byte.c A Modules/_ctypes/libffi/testsuite/libffi.call/struct4.c A Modules/_ctypes/libffi/testsuite/libffi.call/nested_struct2.c A Modules/_ctypes/libffi/testsuite/libffi.call/cls_24byte.c A Modules/_ctypes/libffi/testsuite/libffi.call/struct6.c A Modules/_ctypes/libffi/testsuite/libffi.call/nested_struct4.c A Modules/_ctypes/libffi/testsuite/libffi.call/closure_loc_fn0.c A Modules/_ctypes/libffi/testsuite/libffi.call/struct8.c A Modules/_ctypes/libffi/testsuite/libffi.call/nested_struct6.c A Modules/_ctypes/libffi/testsuite/libffi.call/testclosure.c A Modules/_ctypes/libffi/testsuite/libffi.call/nested_struct8.c A Modules/_ctypes/libffi/testsuite/libffi.call/cls_64byte.c A Modules/_ctypes/libffi/testsuite/libffi.call/return_ul.c A Modules/_ctypes/libffi/testsuite/libffi.call/cls_uint.c A Modules/_ctypes/libffi/testsuite/libffi.call/cls_dbls_struct.c A Modules/_ctypes/libffi/testsuite/libffi.call/strlen_win32.c A Modules/_ctypes/libffi/testsuite/libffi.call/pyobjc-tc.c A Modules/_ctypes/libffi/testsuite/libffi.call/stret_large2.c A Modules/_ctypes/libffi/testsuite/libffi.call/cls_multi_ushortchar.c A Modules/_ctypes/libffi/testsuite/libffi.call/return_dbl.c A Modules/_ctypes/libffi/testsuite/libffi.call/cls_schar.c A Modules/_ctypes/libffi/testsuite/libffi.call/cls_uchar.c A Modules/_ctypes/libffi/testsuite/libffi.call/cls_align_uint64.c A Modules/_ctypes/libffi/testsuite/libffi.call/cls_align_longdouble.c A Modules/_ctypes/libffi/testsuite/libffi.call/cls_ulonglong.c A Modules/_ctypes/libffi/testsuite/libffi.call/cls_1_1byte.c A Modules/_ctypes/libffi/testsuite/libffi.call/return_ll.c A Modules/_ctypes/libffi/testsuite/libffi.call/cls_3_1byte.c A Modules/_ctypes/libffi/testsuite/libffi.call/cls_12byte.c A Modules/_ctypes/libffi/testsuite/libffi.call/cls_4_1byte.c A Modules/_ctypes/libffi/testsuite/libffi.call/cls_3byte1.c A Modules/_ctypes/libffi/testsuite/libffi.call/ffitest.h A Modules/_ctypes/libffi/testsuite/libffi.call/cls_6_1_byte.c A Modules/_ctypes/libffi/testsuite/libffi.call/cls_16byte.c A Modules/_ctypes/libffi/testsuite/libffi.call/cls_18byte.c A Modules/_ctypes/libffi/testsuite/libffi.call/closure_fn0.c A Modules/_ctypes/libffi/testsuite/libffi.call/cls_9byte2.c A Modules/_ctypes/libffi/testsuite/libffi.call/cls_longdouble_va.c A Modules/_ctypes/libffi/testsuite/libffi.call/return_dbl1.c A Modules/_ctypes/libffi/testsuite/libffi.call/closure_fn2.c A Modules/_ctypes/libffi/testsuite/libffi.call/closure_stdcall.c A Modules/_ctypes/libffi/testsuite/libffi.call/return_fl2.c A Modules/_ctypes/libffi/testsuite/libffi.call/stret_medium2.c A Modules/_ctypes/libffi/testsuite/libffi.call/closure_fn4.c A Modules/_ctypes/libffi/testsuite/libffi.call/negint.c A Modules/_ctypes/libffi/testsuite/libffi.call/cls_ushort.c A Modules/_ctypes/libffi/testsuite/libffi.call/call.exp A Modules/_ctypes/libffi/testsuite/libffi.call/closure_fn6.c A Modules/_ctypes/libffi/testsuite/libffi.call/float1.c A Modules/_ctypes/libffi/testsuite/libffi.call/float3.c A Modules/_ctypes/libffi/testsuite/libffi.call/cls_5byte.c A Modules/_ctypes/libffi/testsuite/libffi.call/cls_7byte.c A Modules/_ctypes/libffi/testsuite/libffi.call/cls_align_pointer.c A Modules/_ctypes/libffi/testsuite/libffi.call/cls_align_sint32.c A Modules/_ctypes/libffi/testsuite/config A Modules/_ctypes/libffi/testsuite/config/default.exp A Modules/_ctypes/libffi/testsuite/lib A Modules/_ctypes/libffi/testsuite/lib/target-libpath.exp A Modules/_ctypes/libffi/testsuite/lib/wrapper.exp A Modules/_ctypes/libffi/testsuite/lib/libffi-dg.exp A Modules/_ctypes/libffi/testsuite/Makefile.am A Modules/_ctypes/libffi/testsuite/libffi.special A Modules/_ctypes/libffi/testsuite/libffi.special/unwindtest_ffi_call.cc A Modules/_ctypes/libffi/testsuite/libffi.special/unwindtest.cc A Modules/_ctypes/libffi/testsuite/libffi.special/special.exp A Modules/_ctypes/libffi/testsuite/libffi.special/ffitestcxx.h M Modules/_ctypes/libffi/README A Modules/_ctypes/libffi/libffi.pc.in M Modules/_ctypes/libffi/Makefile.am M Modules/_ctypes/libffi/missing A Modules/_ctypes/libffi/ChangeLog.v1 M Modules/_ctypes/libffi/aclocal.m4 M Modules/_ctypes/libffi.diff Added: python/trunk/Modules/_ctypes/libffi/ChangeLog python/trunk/Modules/_ctypes/libffi/ChangeLog.libffi python/trunk/Modules/_ctypes/libffi/ChangeLog.libgcj python/trunk/Modules/_ctypes/libffi/ChangeLog.v1 python/trunk/Modules/_ctypes/libffi/compile (contents, props changed) python/trunk/Modules/_ctypes/libffi/depcomp (contents, props changed) python/trunk/Modules/_ctypes/libffi/doc/ python/trunk/Modules/_ctypes/libffi/doc/libffi.info python/trunk/Modules/_ctypes/libffi/doc/libffi.texi python/trunk/Modules/_ctypes/libffi/doc/stamp-vti python/trunk/Modules/_ctypes/libffi/doc/version.texi python/trunk/Modules/_ctypes/libffi/libffi.pc.in python/trunk/Modules/_ctypes/libffi/libtool-version python/trunk/Modules/_ctypes/libffi/ltmain.sh (contents, props changed) python/trunk/Modules/_ctypes/libffi/m4/ python/trunk/Modules/_ctypes/libffi/m4/libtool.m4 python/trunk/Modules/_ctypes/libffi/m4/ltoptions.m4 python/trunk/Modules/_ctypes/libffi/m4/ltsugar.m4 python/trunk/Modules/_ctypes/libffi/m4/ltversion.m4 python/trunk/Modules/_ctypes/libffi/m4/lt~obsolete.m4 python/trunk/Modules/_ctypes/libffi/man/ python/trunk/Modules/_ctypes/libffi/man/Makefile.am python/trunk/Modules/_ctypes/libffi/man/Makefile.in python/trunk/Modules/_ctypes/libffi/man/ffi.3 python/trunk/Modules/_ctypes/libffi/man/ffi_call.3 python/trunk/Modules/_ctypes/libffi/man/ffi_prep_cif.3 python/trunk/Modules/_ctypes/libffi/mdate-sh (contents, props changed) python/trunk/Modules/_ctypes/libffi/src/avr32/ python/trunk/Modules/_ctypes/libffi/src/avr32/ffi.c python/trunk/Modules/_ctypes/libffi/src/avr32/ffitarget.h python/trunk/Modules/_ctypes/libffi/src/avr32/sysv.S python/trunk/Modules/_ctypes/libffi/src/closures.c python/trunk/Modules/_ctypes/libffi/src/debug.c python/trunk/Modules/_ctypes/libffi/src/dlmalloc.c python/trunk/Modules/_ctypes/libffi/src/java_raw_api.c python/trunk/Modules/_ctypes/libffi/src/raw_api.c python/trunk/Modules/_ctypes/libffi/src/types.c python/trunk/Modules/_ctypes/libffi/src/x86/win64.S python/trunk/Modules/_ctypes/libffi/testsuite/ python/trunk/Modules/_ctypes/libffi/testsuite/Makefile.am python/trunk/Modules/_ctypes/libffi/testsuite/Makefile.in python/trunk/Modules/_ctypes/libffi/testsuite/config/ python/trunk/Modules/_ctypes/libffi/testsuite/config/default.exp python/trunk/Modules/_ctypes/libffi/testsuite/lib/ python/trunk/Modules/_ctypes/libffi/testsuite/lib/libffi-dg.exp python/trunk/Modules/_ctypes/libffi/testsuite/lib/target-libpath.exp python/trunk/Modules/_ctypes/libffi/testsuite/lib/wrapper.exp python/trunk/Modules/_ctypes/libffi/testsuite/libffi.call/ python/trunk/Modules/_ctypes/libffi/testsuite/libffi.call/call.exp python/trunk/Modules/_ctypes/libffi/testsuite/libffi.call/closure_fn0.c python/trunk/Modules/_ctypes/libffi/testsuite/libffi.call/closure_fn1.c python/trunk/Modules/_ctypes/libffi/testsuite/libffi.call/closure_fn2.c python/trunk/Modules/_ctypes/libffi/testsuite/libffi.call/closure_fn3.c python/trunk/Modules/_ctypes/libffi/testsuite/libffi.call/closure_fn4.c python/trunk/Modules/_ctypes/libffi/testsuite/libffi.call/closure_fn5.c python/trunk/Modules/_ctypes/libffi/testsuite/libffi.call/closure_fn6.c python/trunk/Modules/_ctypes/libffi/testsuite/libffi.call/closure_loc_fn0.c python/trunk/Modules/_ctypes/libffi/testsuite/libffi.call/closure_stdcall.c python/trunk/Modules/_ctypes/libffi/testsuite/libffi.call/cls_12byte.c python/trunk/Modules/_ctypes/libffi/testsuite/libffi.call/cls_16byte.c python/trunk/Modules/_ctypes/libffi/testsuite/libffi.call/cls_18byte.c python/trunk/Modules/_ctypes/libffi/testsuite/libffi.call/cls_19byte.c python/trunk/Modules/_ctypes/libffi/testsuite/libffi.call/cls_1_1byte.c python/trunk/Modules/_ctypes/libffi/testsuite/libffi.call/cls_20byte.c python/trunk/Modules/_ctypes/libffi/testsuite/libffi.call/cls_20byte1.c python/trunk/Modules/_ctypes/libffi/testsuite/libffi.call/cls_24byte.c python/trunk/Modules/_ctypes/libffi/testsuite/libffi.call/cls_2byte.c python/trunk/Modules/_ctypes/libffi/testsuite/libffi.call/cls_3_1byte.c python/trunk/Modules/_ctypes/libffi/testsuite/libffi.call/cls_3byte1.c python/trunk/Modules/_ctypes/libffi/testsuite/libffi.call/cls_3byte2.c python/trunk/Modules/_ctypes/libffi/testsuite/libffi.call/cls_4_1byte.c python/trunk/Modules/_ctypes/libffi/testsuite/libffi.call/cls_4byte.c python/trunk/Modules/_ctypes/libffi/testsuite/libffi.call/cls_5_1_byte.c python/trunk/Modules/_ctypes/libffi/testsuite/libffi.call/cls_5byte.c python/trunk/Modules/_ctypes/libffi/testsuite/libffi.call/cls_64byte.c python/trunk/Modules/_ctypes/libffi/testsuite/libffi.call/cls_6_1_byte.c python/trunk/Modules/_ctypes/libffi/testsuite/libffi.call/cls_6byte.c python/trunk/Modules/_ctypes/libffi/testsuite/libffi.call/cls_7_1_byte.c python/trunk/Modules/_ctypes/libffi/testsuite/libffi.call/cls_7byte.c python/trunk/Modules/_ctypes/libffi/testsuite/libffi.call/cls_8byte.c python/trunk/Modules/_ctypes/libffi/testsuite/libffi.call/cls_9byte1.c python/trunk/Modules/_ctypes/libffi/testsuite/libffi.call/cls_9byte2.c python/trunk/Modules/_ctypes/libffi/testsuite/libffi.call/cls_align_double.c python/trunk/Modules/_ctypes/libffi/testsuite/libffi.call/cls_align_float.c python/trunk/Modules/_ctypes/libffi/testsuite/libffi.call/cls_align_longdouble.c python/trunk/Modules/_ctypes/libffi/testsuite/libffi.call/cls_align_longdouble_split.c python/trunk/Modules/_ctypes/libffi/testsuite/libffi.call/cls_align_longdouble_split2.c python/trunk/Modules/_ctypes/libffi/testsuite/libffi.call/cls_align_pointer.c python/trunk/Modules/_ctypes/libffi/testsuite/libffi.call/cls_align_sint16.c python/trunk/Modules/_ctypes/libffi/testsuite/libffi.call/cls_align_sint32.c python/trunk/Modules/_ctypes/libffi/testsuite/libffi.call/cls_align_sint64.c python/trunk/Modules/_ctypes/libffi/testsuite/libffi.call/cls_align_uint16.c python/trunk/Modules/_ctypes/libffi/testsuite/libffi.call/cls_align_uint32.c python/trunk/Modules/_ctypes/libffi/testsuite/libffi.call/cls_align_uint64.c python/trunk/Modules/_ctypes/libffi/testsuite/libffi.call/cls_dbls_struct.c python/trunk/Modules/_ctypes/libffi/testsuite/libffi.call/cls_double.c python/trunk/Modules/_ctypes/libffi/testsuite/libffi.call/cls_double_va.c python/trunk/Modules/_ctypes/libffi/testsuite/libffi.call/cls_float.c python/trunk/Modules/_ctypes/libffi/testsuite/libffi.call/cls_longdouble.c python/trunk/Modules/_ctypes/libffi/testsuite/libffi.call/cls_longdouble_va.c python/trunk/Modules/_ctypes/libffi/testsuite/libffi.call/cls_multi_schar.c python/trunk/Modules/_ctypes/libffi/testsuite/libffi.call/cls_multi_sshort.c python/trunk/Modules/_ctypes/libffi/testsuite/libffi.call/cls_multi_sshortchar.c python/trunk/Modules/_ctypes/libffi/testsuite/libffi.call/cls_multi_uchar.c python/trunk/Modules/_ctypes/libffi/testsuite/libffi.call/cls_multi_ushort.c python/trunk/Modules/_ctypes/libffi/testsuite/libffi.call/cls_multi_ushortchar.c python/trunk/Modules/_ctypes/libffi/testsuite/libffi.call/cls_pointer.c python/trunk/Modules/_ctypes/libffi/testsuite/libffi.call/cls_pointer_stack.c python/trunk/Modules/_ctypes/libffi/testsuite/libffi.call/cls_schar.c python/trunk/Modules/_ctypes/libffi/testsuite/libffi.call/cls_sint.c python/trunk/Modules/_ctypes/libffi/testsuite/libffi.call/cls_sshort.c python/trunk/Modules/_ctypes/libffi/testsuite/libffi.call/cls_uchar.c python/trunk/Modules/_ctypes/libffi/testsuite/libffi.call/cls_uint.c python/trunk/Modules/_ctypes/libffi/testsuite/libffi.call/cls_ulonglong.c python/trunk/Modules/_ctypes/libffi/testsuite/libffi.call/cls_ushort.c python/trunk/Modules/_ctypes/libffi/testsuite/libffi.call/err_bad_abi.c python/trunk/Modules/_ctypes/libffi/testsuite/libffi.call/err_bad_typedef.c python/trunk/Modules/_ctypes/libffi/testsuite/libffi.call/ffitest.h python/trunk/Modules/_ctypes/libffi/testsuite/libffi.call/float.c python/trunk/Modules/_ctypes/libffi/testsuite/libffi.call/float1.c python/trunk/Modules/_ctypes/libffi/testsuite/libffi.call/float2.c python/trunk/Modules/_ctypes/libffi/testsuite/libffi.call/float3.c python/trunk/Modules/_ctypes/libffi/testsuite/libffi.call/float4.c python/trunk/Modules/_ctypes/libffi/testsuite/libffi.call/huge_struct.c python/trunk/Modules/_ctypes/libffi/testsuite/libffi.call/many.c python/trunk/Modules/_ctypes/libffi/testsuite/libffi.call/many_win32.c python/trunk/Modules/_ctypes/libffi/testsuite/libffi.call/negint.c python/trunk/Modules/_ctypes/libffi/testsuite/libffi.call/nested_struct.c python/trunk/Modules/_ctypes/libffi/testsuite/libffi.call/nested_struct1.c python/trunk/Modules/_ctypes/libffi/testsuite/libffi.call/nested_struct10.c python/trunk/Modules/_ctypes/libffi/testsuite/libffi.call/nested_struct2.c python/trunk/Modules/_ctypes/libffi/testsuite/libffi.call/nested_struct3.c python/trunk/Modules/_ctypes/libffi/testsuite/libffi.call/nested_struct4.c python/trunk/Modules/_ctypes/libffi/testsuite/libffi.call/nested_struct5.c python/trunk/Modules/_ctypes/libffi/testsuite/libffi.call/nested_struct6.c python/trunk/Modules/_ctypes/libffi/testsuite/libffi.call/nested_struct7.c python/trunk/Modules/_ctypes/libffi/testsuite/libffi.call/nested_struct8.c python/trunk/Modules/_ctypes/libffi/testsuite/libffi.call/nested_struct9.c python/trunk/Modules/_ctypes/libffi/testsuite/libffi.call/problem1.c python/trunk/Modules/_ctypes/libffi/testsuite/libffi.call/promotion.c python/trunk/Modules/_ctypes/libffi/testsuite/libffi.call/pyobjc-tc.c python/trunk/Modules/_ctypes/libffi/testsuite/libffi.call/return_dbl.c python/trunk/Modules/_ctypes/libffi/testsuite/libffi.call/return_dbl1.c python/trunk/Modules/_ctypes/libffi/testsuite/libffi.call/return_dbl2.c python/trunk/Modules/_ctypes/libffi/testsuite/libffi.call/return_fl.c python/trunk/Modules/_ctypes/libffi/testsuite/libffi.call/return_fl1.c python/trunk/Modules/_ctypes/libffi/testsuite/libffi.call/return_fl2.c python/trunk/Modules/_ctypes/libffi/testsuite/libffi.call/return_fl3.c python/trunk/Modules/_ctypes/libffi/testsuite/libffi.call/return_ldl.c python/trunk/Modules/_ctypes/libffi/testsuite/libffi.call/return_ll.c python/trunk/Modules/_ctypes/libffi/testsuite/libffi.call/return_ll1.c python/trunk/Modules/_ctypes/libffi/testsuite/libffi.call/return_sc.c python/trunk/Modules/_ctypes/libffi/testsuite/libffi.call/return_sl.c python/trunk/Modules/_ctypes/libffi/testsuite/libffi.call/return_uc.c python/trunk/Modules/_ctypes/libffi/testsuite/libffi.call/return_ul.c python/trunk/Modules/_ctypes/libffi/testsuite/libffi.call/stret_large.c python/trunk/Modules/_ctypes/libffi/testsuite/libffi.call/stret_large2.c python/trunk/Modules/_ctypes/libffi/testsuite/libffi.call/stret_medium.c python/trunk/Modules/_ctypes/libffi/testsuite/libffi.call/stret_medium2.c python/trunk/Modules/_ctypes/libffi/testsuite/libffi.call/strlen.c python/trunk/Modules/_ctypes/libffi/testsuite/libffi.call/strlen_win32.c python/trunk/Modules/_ctypes/libffi/testsuite/libffi.call/struct1.c python/trunk/Modules/_ctypes/libffi/testsuite/libffi.call/struct2.c python/trunk/Modules/_ctypes/libffi/testsuite/libffi.call/struct3.c python/trunk/Modules/_ctypes/libffi/testsuite/libffi.call/struct4.c python/trunk/Modules/_ctypes/libffi/testsuite/libffi.call/struct5.c python/trunk/Modules/_ctypes/libffi/testsuite/libffi.call/struct6.c python/trunk/Modules/_ctypes/libffi/testsuite/libffi.call/struct7.c python/trunk/Modules/_ctypes/libffi/testsuite/libffi.call/struct8.c python/trunk/Modules/_ctypes/libffi/testsuite/libffi.call/struct9.c python/trunk/Modules/_ctypes/libffi/testsuite/libffi.call/testclosure.c python/trunk/Modules/_ctypes/libffi/testsuite/libffi.special/ python/trunk/Modules/_ctypes/libffi/testsuite/libffi.special/ffitestcxx.h python/trunk/Modules/_ctypes/libffi/testsuite/libffi.special/special.exp python/trunk/Modules/_ctypes/libffi/testsuite/libffi.special/unwindtest.cc python/trunk/Modules/_ctypes/libffi/testsuite/libffi.special/unwindtest_ffi_call.cc python/trunk/Modules/_ctypes/libffi/texinfo.tex Removed: python/trunk/Modules/_ctypes/libffi/src/darwin/ffitarget.h Modified: python/trunk/Misc/NEWS python/trunk/Modules/_ctypes/libffi.diff python/trunk/Modules/_ctypes/libffi/LICENSE python/trunk/Modules/_ctypes/libffi/Makefile.am python/trunk/Modules/_ctypes/libffi/Makefile.in python/trunk/Modules/_ctypes/libffi/README python/trunk/Modules/_ctypes/libffi/aclocal.m4 python/trunk/Modules/_ctypes/libffi/config.guess python/trunk/Modules/_ctypes/libffi/config.sub python/trunk/Modules/_ctypes/libffi/configure python/trunk/Modules/_ctypes/libffi/configure.ac python/trunk/Modules/_ctypes/libffi/fficonfig.h.in python/trunk/Modules/_ctypes/libffi/include/Makefile.am python/trunk/Modules/_ctypes/libffi/include/Makefile.in python/trunk/Modules/_ctypes/libffi/include/ffi.h.in python/trunk/Modules/_ctypes/libffi/include/ffi_common.h python/trunk/Modules/_ctypes/libffi/missing python/trunk/Modules/_ctypes/libffi/src/arm/sysv.S python/trunk/Modules/_ctypes/libffi/src/frv/ffi.c python/trunk/Modules/_ctypes/libffi/src/mips/ffi.c python/trunk/Modules/_ctypes/libffi/src/mips/ffitarget.h python/trunk/Modules/_ctypes/libffi/src/mips/n32.S python/trunk/Modules/_ctypes/libffi/src/mips/o32.S python/trunk/Modules/_ctypes/libffi/src/pa/ffi.c python/trunk/Modules/_ctypes/libffi/src/powerpc/aix.S python/trunk/Modules/_ctypes/libffi/src/powerpc/aix_closure.S python/trunk/Modules/_ctypes/libffi/src/powerpc/ffi.c python/trunk/Modules/_ctypes/libffi/src/powerpc/ffi_darwin.c python/trunk/Modules/_ctypes/libffi/src/powerpc/ffitarget.h python/trunk/Modules/_ctypes/libffi/src/powerpc/sysv.S python/trunk/Modules/_ctypes/libffi/src/s390/sysv.S python/trunk/Modules/_ctypes/libffi/src/sh/ffi.c python/trunk/Modules/_ctypes/libffi/src/sh/sysv.S python/trunk/Modules/_ctypes/libffi/src/sh64/ffi.c python/trunk/Modules/_ctypes/libffi/src/sh64/sysv.S python/trunk/Modules/_ctypes/libffi/src/sparc/ffi.c python/trunk/Modules/_ctypes/libffi/src/sparc/v8.S python/trunk/Modules/_ctypes/libffi/src/x86/darwin.S python/trunk/Modules/_ctypes/libffi/src/x86/ffi.c python/trunk/Modules/_ctypes/libffi/src/x86/ffi64.c python/trunk/Modules/_ctypes/libffi/src/x86/ffitarget.h python/trunk/Modules/_ctypes/libffi/src/x86/sysv.S python/trunk/Modules/_ctypes/libffi/src/x86/unix64.S python/trunk/Modules/_ctypes/libffi/src/x86/win32.S Modified: python/trunk/Misc/NEWS ============================================================================== --- python/trunk/Misc/NEWS (original) +++ python/trunk/Misc/NEWS Mon Mar 15 01:02:36 2010 @@ -45,6 +45,8 @@ Extension Modules ----------------- +- Issue #8142: Update libffi to the 3.0.9 release. + - Issue #1530559: When passing a non-integer argument to struct.pack with *any* integer format code (one of 'bBhHiIlLqQ'), struct.pack attempts to use the argument's __int__ method to convert to an integer before packing. It also Modified: python/trunk/Modules/_ctypes/libffi.diff ============================================================================== --- python/trunk/Modules/_ctypes/libffi.diff (original) +++ python/trunk/Modules/_ctypes/libffi.diff Mon Mar 15 01:02:36 2010 @@ -1,33 +1,18 @@ This file contains the diffs between the files in the libffi subdirectory and the 'official' source files from -ftp://sourceware.org/pub/libffi/libffi-3.0.5.tar.gz +ftp://sourceware.org/pub/libffi/libffi-3.0.9.tar.gz -Index: libffi/aclocal.m4 -=================================================================== ---- libffi/aclocal.m4 (working copy) -+++ libffi/aclocal.m4 (revision 72475) -@@ -1155,7 +1155,7 @@ - test -n "$_LT_AC_TAGVAR(runpath_var, $1)" || \ - test "X$_LT_AC_TAGVAR(hardcode_automatic, $1)" = "Xyes" ; then - -- # We can hardcode non-existant directories. -+ # We can hardcode non-existent directories. - if test "$_LT_AC_TAGVAR(hardcode_direct, $1)" != no && - # If the only mechanism to avoid hardcoding is shlibpath_var, we - # have to relink, otherwise we might link with an installed library -Index: libffi/configure.ac -=================================================================== ---- libffi/configure.ac (working copy) -+++ libffi/configure.ac (revision 72475) +--- libffi/configure.ac.orig 2009-12-31 13:41:51.000000000 +0100 ++++ libffi/configure.ac 2010-02-24 00:39:10.341610848 +0100 @@ -1,4 +1,7 @@ dnl Process this with autoconf to create configure +# +# file from libffi - slightly patched for ctypes +# - AC_PREREQ(2.59) + AC_PREREQ(2.63) -@@ -83,6 +86,9 @@ +@@ -91,6 +94,9 @@ i?86-*-solaris2.1[[0-9]]*) TARGET=X86_64; TARGETDIR=x86 ;; @@ -37,7 +22,7 @@ i?86-*-*) TARGET=X86; TARGETDIR=x86 ;; -@@ -100,10 +106,10 @@ +@@ -108,12 +114,12 @@ ;; mips-sgi-irix5.* | mips-sgi-irix6.*) @@ -45,12 +30,14 @@ + TARGET=MIPS_IRIX; TARGETDIR=mips ;; mips*-*-linux*) + # Support 128-bit long double for NewABI. + HAVE_LONG_DOUBLE='defined(__mips64)' - TARGET=MIPS; TARGETDIR=mips -+ TARGET=MIPS_LINUX; TARGETDIR=mips ++ TARGET=MIPS_IRIX; TARGETDIR=mips ;; powerpc*-*-linux* | powerpc-*-sysv*) -@@ -156,7 +162,7 @@ +@@ -170,7 +176,7 @@ AC_MSG_ERROR(["libffi has not been ported to $host."]) fi @@ -59,59 +46,21 @@ AM_CONDITIONAL(SPARC, test x$TARGET = xSPARC) AM_CONDITIONAL(X86, test x$TARGET = xX86) AM_CONDITIONAL(X86_FREEBSD, test x$TARGET = xX86_FREEBSD) -@@ -360,6 +366,10 @@ +@@ -399,6 +405,10 @@ AC_CONFIG_LINKS(include/ffitarget.h:src/$TARGETDIR/ffitarget.h) -AC_CONFIG_FILES(include/Makefile include/ffi.h Makefile testsuite/Makefile man/Makefile libffi.pc) +AC_CONFIG_FILES(include/ffi.h) - ++ +AC_CONFIG_LINKS(include/ffi_common.h:include/ffi_common.h) + +AC_CONFIG_FILES(fficonfig.py) -+ + AC_OUTPUT -Index: libffi/configure -=================================================================== ---- libffi/configure (working copy) -+++ libffi/configure (revision 72475) -@@ -9546,7 +9546,7 @@ - test -n "$runpath_var" || \ - test "X$hardcode_automatic" = "Xyes" ; then - -- # We can hardcode non-existant directories. -+ # We can hardcode non-existent directories. - if test "$hardcode_direct" != no && - # If the only mechanism to avoid hardcoding is shlibpath_var, we - # have to relink, otherwise we might link with an installed library -@@ -13514,7 +13514,7 @@ - test -n "$runpath_var_CXX" || \ - test "X$hardcode_automatic_CXX" = "Xyes" ; then - -- # We can hardcode non-existant directories. -+ # We can hardcode non-existent directories. - if test "$hardcode_direct_CXX" != no && - # If the only mechanism to avoid hardcoding is shlibpath_var, we - # have to relink, otherwise we might link with an installed library -@@ -16117,7 +16117,7 @@ - test -n "$runpath_var_F77" || \ - test "X$hardcode_automatic_F77" = "Xyes" ; then - -- # We can hardcode non-existant directories. -+ # We can hardcode non-existent directories. - if test "$hardcode_direct_F77" != no && - # If the only mechanism to avoid hardcoding is shlibpath_var, we - # have to relink, otherwise we might link with an installed library -@@ -18720,7 +18720,7 @@ - test -n "$runpath_var_GCJ" || \ - test "X$hardcode_automatic_GCJ" = "Xyes" ; then - -- # We can hardcode non-existant directories. -+ # We can hardcode non-existent directories. - if test "$hardcode_direct_GCJ" != no && - # If the only mechanism to avoid hardcoding is shlibpath_var, we - # have to relink, otherwise we might link with an installed library -@@ -20406,6 +20406,9 @@ +--- libffi/configure.orig 2009-12-31 13:41:51.000000000 +0100 ++++ libffi/configure 2010-02-24 00:41:59.829608794 +0100 +@@ -12191,6 +12191,9 @@ i?86-*-solaris2.1[0-9]*) TARGET=X86_64; TARGETDIR=x86 ;; @@ -121,7 +70,7 @@ i?86-*-*) TARGET=X86; TARGETDIR=x86 ;; -@@ -20423,10 +20426,10 @@ +@@ -12208,12 +12211,12 @@ ;; mips-sgi-irix5.* | mips-sgi-irix6.*) @@ -129,12 +78,14 @@ + TARGET=MIPS_IRIX; TARGETDIR=mips ;; mips*-*-linux*) + # Support 128-bit long double for NewABI. + HAVE_LONG_DOUBLE='defined(__mips64)' - TARGET=MIPS; TARGETDIR=mips -+ TARGET=MIPS_LINUX; TARGETDIR=mips ++ TARGET=MIPS_IRIX; TARGETDIR=mips ;; powerpc*-*-linux* | powerpc-*-sysv*) -@@ -20481,7 +20484,7 @@ +@@ -12272,7 +12275,7 @@ { (exit 1); exit 1; }; } fi @@ -143,24 +94,22 @@ MIPS_TRUE= MIPS_FALSE='#' else -@@ -22712,9 +22715,15 @@ +@@ -14667,7 +14670,13 @@ ac_config_links="$ac_config_links include/ffitarget.h:src/$TARGETDIR/ffitarget.h" -ac_config_files="$ac_config_files include/Makefile include/ffi.h Makefile testsuite/Makefile man/Makefile libffi.pc" +ac_config_files="$ac_config_files include/ffi.h" - - -+ac_config_links="$ac_config_links include/ffi_common.h:include/ffi_common.h" + + -+ac_config_files="$ac_config_files fficonfig.py" ++ac_config_links="$ac_config_links include/ffi_common.h:include/ffi_common.h" + + ++ac_config_files="$ac_config_files fficonfig.py" + + cat >confcache <<\_ACEOF - # This file is a shell script that caches the results of configure - # tests run on this system so they can be shared between configure -@@ -23498,12 +23507,9 @@ +@@ -15767,12 +15776,9 @@ "include") CONFIG_COMMANDS="$CONFIG_COMMANDS include" ;; "src") CONFIG_COMMANDS="$CONFIG_COMMANDS src" ;; "include/ffitarget.h") CONFIG_LINKS="$CONFIG_LINKS include/ffitarget.h:src/$TARGETDIR/ffitarget.h" ;; @@ -173,13 +122,22 @@ + "include/ffi_common.h") CONFIG_LINKS="$CONFIG_LINKS include/ffi_common.h:include/ffi_common.h" ;; + "fficonfig.py") CONFIG_FILES="$CONFIG_FILES fficonfig.py" ;; - *) { { echo "$as_me:$LINENO: error: invalid argument: $ac_config_target" >&5 - echo "$as_me: error: invalid argument: $ac_config_target" >&2;} -Index: libffi/src/x86/ffi.c -=================================================================== ---- libffi/src/x86/ffi.c (working copy) -+++ libffi/src/x86/ffi.c (revision 72475) -@@ -388,10 +388,10 @@ + *) { { $as_echo "$as_me:$LINENO: error: invalid argument: $ac_config_target" >&5 + $as_echo "$as_me: error: invalid argument: $ac_config_target" >&2;} +--- libffi/src/x86/ffi64.c.orig 2009-12-29 16:22:26.000000000 +0100 ++++ libffi/src/x86/ffi64.c 2010-02-24 00:36:46.678610932 +0100 +@@ -52,7 +52,7 @@ + /* Register class used for passing given 64bit part of the argument. + These represent classes as documented by the PS ABI, with the exception + of SSESF, SSEDF classes, that are basically SSE class, just gcc will +- use SF or DFmode move instead of DImode to avoid reformating penalties. ++ use SF or DFmode move instead of DImode to avoid reformatting penalties. + + Similary we play games with INTEGERSI_CLASS to use cheaper SImode moves + whenever possible (upper half does contain padding). */ +--- libffi/src/x86/ffi.c.orig 2009-12-29 16:22:26.000000000 +0100 ++++ libffi/src/x86/ffi.c 2010-02-24 00:36:46.678610932 +0100 +@@ -594,10 +594,10 @@ return FFI_BAD_ABI; } @@ -192,16 +150,3 @@ for (i = cif->nargs-1; i >= 0; i--) { -Index: libffi/src/x86/ffi64.c -=================================================================== ---- libffi/src/x86/ffi64.c (working copy) -+++ libffi/src/x86/ffi64.c (revision 72475) -@@ -52,7 +52,7 @@ - /* Register class used for passing given 64bit part of the argument. - These represent classes as documented by the PS ABI, with the exception - of SSESF, SSEDF classes, that are basically SSE class, just gcc will -- use SF or DFmode move instead of DImode to avoid reformating penalties. -+ use SF or DFmode move instead of DImode to avoid reformatting penalties. - - Similary we play games with INTEGERSI_CLASS to use cheaper SImode moves - whenever possible (upper half does contain padding). */ Added: python/trunk/Modules/_ctypes/libffi/ChangeLog ============================================================================== --- (empty file) +++ python/trunk/Modules/_ctypes/libffi/ChangeLog Mon Mar 15 01:02:36 2010 @@ -0,0 +1,4059 @@ +2009-12-28 David Edelsohn + + * src/powerpc/ffi_darwin.c (ffi_prep_args): Copy abi and nargs to + local variables. + (aix_adjust_aggregate_sizes): New function. + (ffi_prep_cif_machdep): Call it. + +2009-12-26 Andreas Tobler + + * configure.ac: Define FFI_MMAP_EXEC_WRIT for the given targets. + * configure: Regenerate. + * fficonfig.h.in: Likewise. + * src/closures.c: Remove the FFI_MMAP_EXEC_WRIT definition for + Solaris/x86. + +2009-12-26 Andreas Schwab + + * src/powerpc/ffi.c (ffi_prep_args_SYSV): Advance intarg_count + when a float arguments is passed in memory. + (ffi_closure_helper_SYSV): Mark general registers as used up when + a 64bit or soft-float long double argument is passed in memory. + +2009-12-25 Matthias Klose + + * man/ffi_call.3: Fix #include in examples. + * doc/libffi.texi: Add dircategory. + +2009-12-25 Frank Everdij + + * include/ffi.h.in: Placed '__GNUC__' ifdef around + '__attribute__((aligned(8)))' in ffi_closure, fixes compile for + IRIX MIPSPro c99. + * include/ffi_common.h: Added '__sgi' define to non + '__attribute__((__mode__()))' integer typedefs. + * src/mips/ffi.c (ffi_call, ffi_closure_mips_inner_O32, + ffi_closure_mips_inner_N32): Added 'defined(_MIPSEB)' to BE check. + (ffi_closure_mips_inner_O32, ffi_closure_mips_inner_N32): Added + FFI_LONGDOUBLE support and alignment(N32 only). + * src/mips/ffitarget.h: Corrected '#include ' for IRIX and + fixed non '__attribute__((__mode__()))' integer typedefs. + * src/mips/n32.S: Put '#ifdef linux' around '.abicalls' and '.eh_frame' + since they are Linux/GNU Assembler specific. + +2009-12-25 Bradley Smith + + * configure.ac, Makefile.am, src/avr32/ffi.c, + src/avr32/ffitarget.h, + src/avr32/sysv.S: Add AVR32 port. + * configure, Makefile.in: Rebuilt. + +2009-12-21 Andreas Tobler + + * configure.ac: Make i?86 build on FreeBSD and OpenBSD. + * configure: Regenerate. + +2009-12-15 John David Anglin + + * testsuite/libffi.call/ffitest.h: Define PRIuPTR on PA HP-UX. + +2009-12-13 John David Anglin + + * src/pa/ffi.c (ffi_closure_inner_pa32): Handle FFI_TYPE_LONGDOUBLE + type on HP-UX. + +2009-12-11 Eric Botcazou + + * src/sparc/ffi.c (ffi_closure_sparc_inner_v9): Properly align 'long + double' arguments. + +2009-12-11 Eric Botcazou + + * testsuite/libffi.call/ffitest.h: Define PRIuPTR on Solaris < 10. + +2009-12-10 Rainer Orth + + PR libffi/40700 + * src/closures.c [X86_64 && __sun__ && __svr4__] + (FFI_MMAP_EXEC_WRIT): Define. + +2009-12-08 David Daney + + * testsuite/libffi.call/stret_medium.c: Remove xfail for mips*-*-* + * testsuite/libffi.call/cls_align_longdouble_split2.c: Same. + * testsuite/libffi.call/stret_large.c: Same. + * testsuite/libffi.call/cls_align_longdouble_split.c: Same. + * testsuite/libffi.call/stret_large2.c: Same. + * testsuite/libffi.call/stret_medium2.c: Same. + +2009-12-07 David Edelsohn + + * src/powerpc/aix_closure.S (libffi_closure_ASM): Fix tablejump + typo. + +2009-12-05 David Edelsohn + + * src/powerpc/aix.S: Update AIX32 code to be consistent with AIX64 + code. + * src/powerpc/aix_closure.S: Same. + +2009-12-05 Ralf Wildenhues + + * Makefile.in: Regenerate. + * configure: Regenerate. + * include/Makefile.in: Regenerate. + * man/Makefile.in: Regenerate. + * testsuite/Makefile.in: Regenerate. + +2009-12-04 David Edelsohn + + * src/powerpc/aix_closure.S: Reorganize 64-bit code to match + linux64_closure.S. + +2009-12-04 Uros Bizjak + + PR libffi/41908 + * src/x86/ffi64.c (classify_argument): Update from + gcc/config/i386/i386.c. + (ffi_closure_unix64_inner): Do not use the address of two consecutive + SSE registers directly. + * testsuite/libffi.call/cls_dbls_struct.c (main): Remove xfail + for x86_64 linux targets. + +2009-12-04 David Edelsohn + + * src/powerpc/ffi_darwin.c (ffi_closure_helper_DARWIN): Increment + pfr for long double split between fpr13 and stack. + +2009-12-03 David Edelsohn + + * src/powerpc/ffi_darwin.c (ffi_prep_args): Increment next_arg and + fparg_count twice for long double. + +2009-12-03 David Edelsohn + + PR libffi/42243 + * src/powerpc/ffi_darwin.c (ffi_prep_args): Remove extra parentheses. + +2009-12-03 Uros Bizjak + + * testsuite/libffi.call/cls_longdouble_va.c (main): Fix format string. + Remove xfails for x86 linux targets. + +2009-12-02 David Edelsohn + + * src/powerpc/ffi_darwin.c (ffi_prep_args): Fix typo in INT64 + case. + +2009-12-01 David Edelsohn + + * src/powerpc/aix.S (ffi_call_AIX): Convert to more standard + register usage. Call ffi_prep_args directly. Add long double + return value support. + * src/powerpc/ffi_darwin.c (ffi_prep_args): Double arg increment + applies to FFI_TYPE_DOUBLE. Correct fpr_base increment typo. + Separate FFI_TYPE_SINT32 and FFI_TYPE_UINT32 cases. + (ffi_prep_cif_machdep): Only 16 byte stack alignment in 64 bit + mode. + (ffi_closure_helper_DARWIN): Remove nf and ng counters. Move temp + into case. + * src/powerpc/aix_closure.S: Maintain 16 byte stack alignment. + Allocate result area between params and FPRs. + +2009-11-30 David Edelsohn + + PR target/35484 + * src/powerpc/ffitarget.h (POWERPC64): Define for PPC64 Linux and + AIX64. + * src/powerpc/aix.S: Implement AIX64 version. + * src/powerpc/aix_closure.S: Implement AIX64 version. + (ffi_closure_ASM): Use extsb, lha and displament addresses. + * src/powerpc/ffi_darwin.c (ffi_prep_args): Implement AIX64 + support. + (ffi_prep_cif_machdep): Same. + (ffi_call): Same. + (ffi_closure_helper_DARWIN): Same. + +2009-11-02 Andreas Tobler + + PR libffi/41908 + * testsuite/libffi.call/testclosure.c: New test. + +2009-09-28 Kai Tietz + + * src/x86/win64.S (_ffi_call_win64 stack): Remove for gnu + assembly version use of ___chkstk. + +2009-09-23 Matthias Klose + + PR libffi/40242, PR libffi/41443 + * src/arm/sysv.S (__ARM_ARCH__): Define for processors + __ARM_ARCH_6T2__, __ARM_ARCH_6M__, __ARM_ARCH_7__, + __ARM_ARCH_7A__, __ARM_ARCH_7R__, __ARM_ARCH_7M__. + Change the conditionals to __SOFTFP__ || __ARM_EABI__ + for -mfloat-abi=softfp to work. + +2009-09-17 Loren J. Rittle + + PR testsuite/32843 (strikes again) + * src/x86/ffi.c (ffi_prep_cif_machdep): Add X86_FREEBSD to + enable proper extension on char and short. + +2009-09-15 David Daney + + * src/java_raw_api.c (ffi_java_raw_to_rvalue): Remove special + handling for FFI_TYPE_POINTER. + * src/mips/ffitarget.h (FFI_TYPE_STRUCT_D_SOFT, + FFI_TYPE_STRUCT_F_SOFT, FFI_TYPE_STRUCT_DD_SOFT, + FFI_TYPE_STRUCT_FF_SOFT, FFI_TYPE_STRUCT_FD_SOFT, + FFI_TYPE_STRUCT_DF_SOFT, FFI_TYPE_STRUCT_SOFT): New defines. + (FFI_N32_SOFT_FLOAT, FFI_N64_SOFT_FLOAT): New ffi_abi enumerations. + (enum ffi_abi): Set FFI_DEFAULT_ABI for soft-float. + * src/mips/n32.S (ffi_call_N32): Add handling for soft-float + structure and pointer returns. + (ffi_closure_N32): Add handling for pointer returns. + * src/mips/ffi.c (ffi_prep_args, calc_n32_struct_flags, + calc_n32_return_struct_flags): Handle soft-float. + (ffi_prep_cif_machdep): Handle soft-float, fix pointer handling. + (ffi_call_N32): Declare proper argument types. + (ffi_call, copy_struct_N32, ffi_closure_mips_inner_N32): Handle + soft-float. + +2009-08-24 Ralf Wildenhues + + * configure.ac (AC_PREREQ): Bump to 2.64. + +2009-08-22 Ralf Wildenhues + + * Makefile.am (install-html, install-pdf): Remove. + * Makefile.in: Regenerate. + + * Makefile.in: Regenerate. + * aclocal.m4: Regenerate. + * configure: Regenerate. + * fficonfig.h.in: Regenerate. + * include/Makefile.in: Regenerate. + * man/Makefile.in: Regenerate. + * testsuite/Makefile.in: Regenerate. + +2009-07-30 Ralf Wildenhues + + * configure.ac (_AC_ARG_VAR_PRECIOUS): Use m4_rename_force. + +2009-07-24 Dave Korn + + PR libffi/40807 + * src/x86/ffi.c (ffi_prep_cif_machdep): Also use sign/zero-extending + return types for X86_WIN32. + * src/x86/win32.S (_ffi_call_SYSV): Handle omitted return types. + (_ffi_call_STDCALL, _ffi_closure_SYSV, _ffi_closure_raw_SYSV, + _ffi_closure_STDCALL): Likewise. + + * src/closures.c (is_selinux_enabled): Define to const 0 for Cygwin. + (dlmmap, dlmunmap): Also use these functions on Cygwin. + +2009-07-11 Richard Sandiford + + PR testsuite/40699 + PR testsuite/40707 + PR testsuite/40709 + * testsuite/lib/libffi-dg.exp: Revert 2009-07-02, 2009-07-01 and + 2009-06-30 commits. + +2009-07-01 Richard Sandiford + + * testsuite/lib/libffi-dg.exp (libffi-init): Set ld_library_path + to "" before adding paths. (This reinstates an assignment that + was removed by my 2009-06-30 commit, but changes the initial + value from "." to "".) + +2009-07-01 H.J. Lu + + PR testsuite/40601 + * testsuite/lib/libffi-dg.exp (libffi-init): Properly set + gccdir. Adjust ld_library_path for gcc only if gccdir isn't + empty. + +2009-06-30 Richard Sandiford + + * testsuite/lib/libffi-dg.exp (libffi-init): Don't add "." + to ld_library_path. Use add_path. Add just find_libgcc_s + to ld_library_path, not every libgcc multilib directory. + +2009-06-16 Wim Lewis + + * src/powerpc/ffi.c: Avoid clobbering cr3 and cr4, which are + supposed to be callee-saved. + * src/powerpc/sysv.S (small_struct_return_value): Fix overrun of + return buffer for odd-size structs. + +2009-06-16 Andreas Tobler + + PR libffi/40444 + * testsuite/lib/libffi-dg.exp (libffi_target_compile): Add + allow_stack_execute for Darwin. + +2009-06-16 Andrew Haley + + * configure.ac (TARGETDIR): Add missing blank lines. + * configure: Regenerate. + +2009-06-16 Andrew Haley + + * testsuite/libffi.call/cls_align_sint64.c, + testsuite/libffi.call/cls_align_uint64.c, + testsuite/libffi.call/cls_longdouble_va.c, + testsuite/libffi.call/cls_ulonglong.c, + testsuite/libffi.call/return_ll1.c, + testsuite/libffi.call/stret_medium2.c: Fix printf format + specifiers. + * testsuite/libffi.call/ffitest.h, + testsuite/libffi.special/ffitestcxx.h (PRIdLL, PRIuLL): Define. + +2009-06-15 Andrew Haley + + * testsuite/libffi.call/err_bad_typedef.c: xfail everywhere. + * testsuite/libffi.call/err_bad_abi.c: Likewise. + +2009-06-12 Andrew Haley + + * Makefile.am: Remove info_TEXINFOS. + +2009-06-12 Andrew Haley + + * ChangeLog.libffi: testsuite/libffi.call/cls_align_sint64.c, + testsuite/libffi.call/cls_align_uint64.c, + testsuite/libffi.call/cls_ulonglong.c, + testsuite/libffi.call/return_ll1.c, + testsuite/libffi.call/stret_medium2.c: Fix printf format + specifiers. + testsuite/libffi.special/unwindtest.cc: include stdint.h. + +2009-06-11 Timothy Wall + + * Makefile.am, + configure.ac, + include/ffi.h.in, + include/ffi_common.h, + src/closures.c, + src/dlmalloc.c, + src/x86/ffi.c, + src/x86/ffitarget.h, + src/x86/win64.S (new), + README: Added win64 support (mingw or MSVC) + * Makefile.in, + include/Makefile.in, + man/Makefile.in, + testsuite/Makefile.in, + configure, + aclocal.m4: Regenerated + * ltcf-c.sh: properly escape cygwin/w32 path + * man/ffi_call.3: Clarify size requirements for return value. + * src/x86/ffi64.c: Fix filename in comment. + * src/x86/win32.S: Remove unused extern. + + * testsuite/libffi.call/closure_fn0.c, + testsuite/libffi.call/closure_fn1.c, + testsuite/libffi.call/closure_fn2.c, + testsuite/libffi.call/closure_fn3.c, + testsuite/libffi.call/closure_fn4.c, + testsuite/libffi.call/closure_fn5.c, + testsuite/libffi.call/closure_fn6.c, + testsuite/libffi.call/closure_stdcall.c, + testsuite/libffi.call/cls_12byte.c, + testsuite/libffi.call/cls_16byte.c, + testsuite/libffi.call/cls_18byte.c, + testsuite/libffi.call/cls_19byte.c, + testsuite/libffi.call/cls_1_1byte.c, + testsuite/libffi.call/cls_20byte.c, + testsuite/libffi.call/cls_20byte1.c, + testsuite/libffi.call/cls_24byte.c, + testsuite/libffi.call/cls_2byte.c, + testsuite/libffi.call/cls_3_1byte.c, + testsuite/libffi.call/cls_3byte1.c, + testsuite/libffi.call/cls_3byte2.c, + testsuite/libffi.call/cls_4_1byte.c, + testsuite/libffi.call/cls_4byte.c, + testsuite/libffi.call/cls_5_1_byte.c, + testsuite/libffi.call/cls_5byte.c, + testsuite/libffi.call/cls_64byte.c, + testsuite/libffi.call/cls_6_1_byte.c, + testsuite/libffi.call/cls_6byte.c, + testsuite/libffi.call/cls_7_1_byte.c, + testsuite/libffi.call/cls_7byte.c, + testsuite/libffi.call/cls_8byte.c, + testsuite/libffi.call/cls_9byte1.c, + testsuite/libffi.call/cls_9byte2.c, + testsuite/libffi.call/cls_align_double.c, + testsuite/libffi.call/cls_align_float.c, + testsuite/libffi.call/cls_align_longdouble.c, + testsuite/libffi.call/cls_align_longdouble_split.c, + testsuite/libffi.call/cls_align_longdouble_split2.c, + testsuite/libffi.call/cls_align_pointer.c, + testsuite/libffi.call/cls_align_sint16.c, + testsuite/libffi.call/cls_align_sint32.c, + testsuite/libffi.call/cls_align_sint64.c, + testsuite/libffi.call/cls_align_uint16.c, + testsuite/libffi.call/cls_align_uint32.c, + testsuite/libffi.call/cls_align_uint64.c, + testsuite/libffi.call/cls_dbls_struct.c, + testsuite/libffi.call/cls_double.c, + testsuite/libffi.call/cls_double_va.c, + testsuite/libffi.call/cls_float.c, + testsuite/libffi.call/cls_longdouble.c, + testsuite/libffi.call/cls_longdouble_va.c, + testsuite/libffi.call/cls_multi_schar.c, + testsuite/libffi.call/cls_multi_sshort.c, + testsuite/libffi.call/cls_multi_sshortchar.c, + testsuite/libffi.call/cls_multi_uchar.c, + testsuite/libffi.call/cls_multi_ushort.c, + testsuite/libffi.call/cls_multi_ushortchar.c, + testsuite/libffi.call/cls_pointer.c, + testsuite/libffi.call/cls_pointer_stack.c, + testsuite/libffi.call/cls_schar.c, + testsuite/libffi.call/cls_sint.c, + testsuite/libffi.call/cls_sshort.c, + testsuite/libffi.call/cls_uchar.c, + testsuite/libffi.call/cls_uint.c, + testsuite/libffi.call/cls_ulonglong.c, + testsuite/libffi.call/cls_ushort.c, + testsuite/libffi.call/err_bad_abi.c, + testsuite/libffi.call/err_bad_typedef.c, + testsuite/libffi.call/float2.c, + testsuite/libffi.call/huge_struct.c, + testsuite/libffi.call/nested_struct.c, + testsuite/libffi.call/nested_struct1.c, + testsuite/libffi.call/nested_struct10.c, + testsuite/libffi.call/nested_struct2.c, + testsuite/libffi.call/nested_struct3.c, + testsuite/libffi.call/nested_struct4.c, + testsuite/libffi.call/nested_struct5.c, + testsuite/libffi.call/nested_struct6.c, + testsuite/libffi.call/nested_struct7.c, + testsuite/libffi.call/nested_struct8.c, + testsuite/libffi.call/nested_struct9.c, + testsuite/libffi.call/problem1.c, + testsuite/libffi.call/return_ldl.c, + testsuite/libffi.call/return_ll1.c, + testsuite/libffi.call/stret_large.c, + testsuite/libffi.call/stret_large2.c, + testsuite/libffi.call/stret_medium.c, + testsuite/libffi.call/stret_medium2.c, + testsuite/libffi.special/unwindtest.cc: use ffi_closure_alloc instead + of checking for MMAP. Use intptr_t instead of long casts. + +2009-06-11 Kaz Kojima + + * testsuite/libffi.call/cls_longdouble_va.c: Add xfail sh*-*-linux-*. + * testsuite/libffi.call/err_bad_abi.c: Add xfail sh*-*-*. + * testsuite/libffi.call/err_bad_typedef.c: Likewise. + +2009-06-09 Andrew Haley + + * src/x86/freebsd.S: Add missing file. + +2009-06-08 Andrew Haley + + Import from libffi 3.0.8: + + * doc/libffi.texi: New file. + * doc/libffi.info: Likewise. + * doc/stamp-vti: Likewise. + * man/Makefile.am: New file. + * man/ffi_call.3: New file. + + * Makefile.am (EXTRA_DIST): Add src/x86/darwin64.S, + src/dlmalloc.c. + (nodist_libffi_la_SOURCES): Add X86_FREEBSD. + + * configure.ac: Bump version to 3.0.8. + parisc*-*-linux*: Add. + i386-*-freebsd* | i386-*-openbsd*: Add. + powerpc-*-beos*: Add. + AM_CONDITIONAL X86_FREEBSD: Add. + AC_CONFIG_FILES: Add man/Makefile. + + * include/ffi.h.in (FFI_FN): Change void (*)() to void (*)(void). + +2009-06-08 Andrew Haley + + * README: Import from libffi 3.0.8. + +2009-06-08 Andrew Haley + + * testsuite/libffi.call/err_bad_abi.c: Add xfails. + * testsuite/libffi.call/cls_longdouble_va.c: Add xfails. + * testsuite/libffi.call/cls_dbls_struct.c: Add xfail x86_64-*-linux-*. + * testsuite/libffi.call/err_bad_typedef.c: Add xfails. + + * testsuite/libffi.call/stret_medium2.c: Add __UNUSED__ to args. + * testsuite/libffi.call/stret_medium.c: Likewise. + * testsuite/libffi.call/stret_large2.c: Likewise. + * testsuite/libffi.call/stret_large.c: Likewise. + +2008-12-26 Timothy Wall + + * testsuite/libffi.call/cls_longdouble.c, + testsuite/libffi.call/cls_longdouble_va.c, + testsuite/libffi.call/cls_align_longdouble.c, + testsuite/libffi.call/cls_align_longdouble_split.c, + testsuite/libffi.call/cls_align_longdouble_split2.c: mark expected + failures on x86_64 cygwin/mingw. + +2008-12-22 Timothy Wall + + * testsuite/libffi.call/closure_fn0.c, + testsuite/libffi.call/closure_fn1.c, + testsuite/libffi.call/closure_fn2.c, + testsuite/libffi.call/closure_fn3.c, + testsuite/libffi.call/closure_fn4.c, + testsuite/libffi.call/closure_fn5.c, + testsuite/libffi.call/closure_fn6.c, + testsuite/libffi.call/closure_loc_fn0.c, + testsuite/libffi.call/closure_stdcall.c, + testsuite/libffi.call/cls_align_pointer.c, + testsuite/libffi.call/cls_pointer.c, + testsuite/libffi.call/cls_pointer_stack.c: use portable cast from + pointer to integer (intptr_t). + * testsuite/libffi.call/cls_longdouble.c: disable for win64. + +2008-07-24 Anthony Green + + * testsuite/libffi.call/cls_dbls_struct.c, + testsuite/libffi.call/cls_double_va.c, + testsuite/libffi.call/cls_longdouble.c, + testsuite/libffi.call/cls_longdouble_va.c, + testsuite/libffi.call/cls_pointer.c, + testsuite/libffi.call/cls_pointer_stack.c, + testsuite/libffi.call/err_bad_abi.c: Clean up failures from + compiler warnings. + +2008-03-04 Anthony Green + Blake Chaffin + hos at tamanegi.org + + * testsuite/libffi.call/cls_align_longdouble_split2.c + testsuite/libffi.call/cls_align_longdouble_split.c + testsuite/libffi.call/cls_dbls_struct.c + testsuite/libffi.call/cls_double_va.c + testsuite/libffi.call/cls_longdouble.c + testsuite/libffi.call/cls_longdouble_va.c + testsuite/libffi.call/cls_pointer.c + testsuite/libffi.call/cls_pointer_stack.c + testsuite/libffi.call/err_bad_abi.c + testsuite/libffi.call/err_bad_typedef.c + testsuite/libffi.call/stret_large2.c + testsuite/libffi.call/stret_large.c + testsuite/libffi.call/stret_medium2.c + testsuite/libffi.call/stret_medium.c: New tests from Apple. + +2009-06-05 Andrew Haley + + * src/x86/ffitarget.h, src/x86/ffi.c: Merge stdcall changes from + libffi. + +2009-06-04 Andrew Haley + + * src/x86/ffitarget.h, src/x86/win32.S, src/x86/ffi.c: Back out + stdcall changes. + +2008-02-26 Anthony Green + Thomas Heller + + * src/x86/ffi.c (ffi_closure_SYSV_inner): Change C++ comment to C + comment. + +2008-02-03 Timothy Wall + + * src/x86/ffi.c (FFI_INIT_TRAMPOLINE_STDCALL): Calculate jump return + offset based on code pointer, not data pointer. + +2008-01-31 Timothy Wall + + * testsuite/libffi.call/closure_stdcall.c: Add test for stdcall + closures. + * src/x86/ffitarget.h: Increase size of trampoline for stdcall + closures. + * src/x86/win32.S: Add assembly for stdcall closure. + * src/x86/ffi.c: Initialize stdcall closure trampoline. + +2009-06-04 Andrew Haley + + * include/ffi.h.in: Change void (*)() to void (*)(void). + * src/x86/ffi.c: Likewise. + +2009-06-04 Andrew Haley + + * src/powerpc/ppc_closure.S: Insert licence header. + * src/powerpc/linux64_closure.S: Likewise. + * src/m68k/sysv.S: Likewise. + + * src/sh64/ffi.c: Change void (*)() to void (*)(void). + * src/powerpc/ffi.c: Likewise. + * src/powerpc/ffi_darwin.c: Likewise. + * src/m32r/ffi.c: Likewise. + * src/sh64/ffi.c: Likewise. + * src/x86/ffi64.c: Likewise. + * src/alpha/ffi.c: Likewise. + * src/alpha/osf.S: Likewise. + * src/frv/ffi.c: Likewise. + * src/s390/ffi.c: Likewise. + * src/pa/ffi.c: Likewise. + * src/pa/hpux32.S: Likewise. + * src/ia64/unix.S: Likewise. + * src/ia64/ffi.c: Likewise. + * src/sparc/ffi.c: Likewise. + * src/mips/ffi.c: Likewise. + * src/sh/ffi.c: Likewise. + +2008-02-15 David Daney + + * src/mips/ffi.c (USE__BUILTIN___CLEAR_CACHE): + Define (conditionally), and use it to include cachectl.h. + (ffi_prep_closure_loc): Fix cache flushing. + * src/mips/ffitarget.h (_ABIN32, _ABI64, _ABIO32): Define. + +2009-06-04 Andrew Haley + + include/ffi.h.in, + src/arm/ffitarget.h, + src/arm/ffi.c, + src/arm/sysv.S, + src/powerpc/ffitarget.h, + src/closures.c, + src/sh64/ffitarget.h, + src/sh64/ffi.c, + src/sh64/sysv.S, + src/types.c, + src/x86/ffi64.c, + src/x86/ffitarget.h, + src/x86/win32.S, + src/x86/darwin.S, + src/x86/ffi.c, + src/x86/sysv.S, + src/x86/unix64.S, + src/alpha/ffitarget.h, + src/alpha/ffi.c, + src/alpha/osf.S, + src/m68k/ffitarget.h, + src/frv/ffitarget.h, + src/frv/ffi.c, + src/s390/ffitarget.h, + src/s390/sysv.S, + src/cris/ffitarget.h, + src/pa/linux.S, + src/pa/ffitarget.h, + src/pa/ffi.c, + src/raw_api.c, + src/ia64/ffitarget.h, + src/ia64/unix.S, + src/ia64/ffi.c, + src/ia64/ia64_flags.h, + src/java_raw_api.c, + src/debug.c, + src/sparc/v9.S, + src/sparc/ffitarget.h, + src/sparc/ffi.c, + src/sparc/v8.S, + src/mips/ffitarget.h, + src/mips/n32.S, + src/mips/o32.S, + src/mips/ffi.c, + src/prep_cif.c, + src/sh/ffitarget.h, + src/sh/ffi.c, + src/sh/sysv.S: Update license text. + +2009-05-22 Dave Korn + + * src/x86/win32.S (_ffi_closure_STDCALL): New function. + (.eh_frame): Add FDE for it. + +2009-05-22 Dave Korn + + * configure.ac: Also check if assembler supports pc-relative + relocs on X86_WIN32 targets. + * configure: Regenerate. + * src/x86/win32.S (ffi_prep_args): Declare extern, not global. + (_ffi_call_SYSV): Add missing function type symbol .def and + add EH markup labels. + (_ffi_call_STDCALL): Likewise. + (_ffi_closure_SYSV): Likewise. + (_ffi_closure_raw_SYSV): Likewise. + (.eh_frame): Add hand-crafted EH data. + +2009-04-09 Jakub Jelinek + + * testsuite/lib/libffi-dg.exp: Change copyright header to refer to + version 3 of the GNU General Public License and to point readers + at the COPYING3 file and the FSF's license web page. + * testsuite/libffi.call/call.exp: Likewise. + * testsuite/libffi.special/special.exp: Likewise. + +2009-03-01 Ralf Wildenhues + + * configure: Regenerate. + +2008-12-18 Rainer Orth + + PR libffi/26048 + * configure.ac (HAVE_AS_X86_PCREL): New test. + * configure: Regenerate. + * fficonfig.h.in: Regenerate. + * src/x86/sysv.S [!FFI_NO_RAW_API]: Precalculate + RAW_CLOSURE_CIF_OFFSET, RAW_CLOSURE_FUN_OFFSET, + RAW_CLOSURE_USER_DATA_OFFSET for the Solaris 10/x86 assembler. + (.eh_frame): Only use SYMBOL-. iff HAVE_AS_X86_PCREL. + * src/x86/unix64.S (.Lstore_table): Move to .text section. + (.Lload_table): Likewise. + (.eh_frame): Only use SYMBOL-. iff HAVE_AS_X86_PCREL. + +2008-12-18 Ralf Wildenhues + + * configure: Regenerate. + +2008-11-21 Eric Botcazou + + * src/sparc/ffi.c (ffi_prep_cif_machdep): Add support for + signed/unsigned int8/16 return values. + * src/sparc/v8.S (ffi_call_v8): Likewise. + (ffi_closure_v8): Likewise. + +2008-09-26 Peter O'Gorman + Steve Ellcey + + * configure: Regenerate for new libtool. + * Makefile.in: Ditto. + * include/Makefile.in: Ditto. + * aclocal.m4: Ditto. + +2008-08-25 Andreas Tobler + + * src/powerpc/ffitarget.h (ffi_abi): Add FFI_LINUX and + FFI_LINUX_SOFT_FLOAT to the POWERPC_FREEBSD enum. + Add note about flag bits used for FFI_SYSV_TYPE_SMALL_STRUCT. + Adjust copyright notice. + * src/powerpc/ffi.c: Add two new flags to indicate if we have one + register or two register to use for FFI_SYSV structs. + (ffi_prep_cif_machdep): Pass the right register flag introduced above. + (ffi_closure_helper_SYSV): Fix the return type for + FFI_SYSV_TYPE_SMALL_STRUCT. Comment. + Adjust copyright notice. + +2008-07-16 Kaz Kojima + + * src/sh/ffi.c (ffi_prep_closure_loc): Turn INSN into an unsigned + int. + +2008-06-17 Ralf Wildenhues + + * configure: Regenerate. + * include/Makefile.in: Regenerate. + * testsuite/Makefile.in: Regenerate. + +2008-06-07 Joseph Myers + + * configure.ac (parisc*-*-linux*, powerpc-*-sysv*, + powerpc-*-beos*): Remove. + * configure: Regenerate. + +2008-05-09 Julian Brown + + * Makefile.am (LTLDFLAGS): New. + (libffi_la_LDFLAGS): Use above. + * Makefile.in: Regenerate. + +2008-04-18 Paolo Bonzini + + PR bootstrap/35457 + * aclocal.m4: Regenerate. + * configure: Regenerate. + +2008-03-26 Kaz Kojima + + * src/sh/sysv.S: Add .note.GNU-stack on Linux. + * src/sh64/sysv.S: Likewise. + +2008-03-26 Daniel Jacobowitz + + * src/arm/sysv.S: Fix ARM comment marker. + +2008-03-26 Jakub Jelinek + + * src/alpha/osf.S: Add .note.GNU-stack on Linux. + * src/s390/sysv.S: Likewise. + * src/powerpc/ppc_closure.S: Likewise. + * src/powerpc/sysv.S: Likewise. + * src/x86/unix64.S: Likewise. + * src/x86/sysv.S: Likewise. + * src/sparc/v8.S: Likewise. + * src/sparc/v9.S: Likewise. + * src/m68k/sysv.S: Likewise. + * src/arm/sysv.S: Likewise. + +2008-03-16 Ralf Wildenhues + + * aclocal.m4: Regenerate. + * configure: Likewise. + * Makefile.in: Likewise. + * include/Makefile.in: Likewise. + * testsuite/Makefile.in: Likewise. + +2008-02-12 Bjoern Koenig + Andreas Tobler + + * configure.ac: Add amd64-*-freebsd* target. + * configure: Regenerate. + +2008-01-30 H.J. Lu + + PR libffi/34612 + * src/x86/sysv.S (ffi_closure_SYSV): Pop 4 byte from stack when + returning struct. + + * testsuite/libffi.call/call.exp: Add "-O2 -fomit-frame-pointer" + tests. + +2008-01-24 David Edelsohn + + * configure: Regenerate. + +2008-01-06 Andreas Tobler + + * src/x86/ffi.c (ffi_prep_cif_machdep): Fix thinko. + +2008-01-05 Andreas Tobler + + PR testsuite/32843 + * src/x86/ffi.c (ffi_prep_cif_machdep): Add code for + signed/unsigned int8/16 for X86_DARWIN. + Updated copyright info. + Handle one and two byte structs with special cif->flags. + * src/x86/ffitarget.h: Add special types for one and two byte structs. + Updated copyright info. + * src/x86/darwin.S (ffi_call_SYSV): Rewrite to use a jump table like + sysv.S + Remove code to pop args from the stack after call. + Special-case signed/unsigned for int8/16, one and two byte structs. + (ffi_closure_raw_SYSV): Handle FFI_TYPE_UINT8, + FFI_TYPE_SINT8, FFI_TYPE_UINT16, FFI_TYPE_SINT16, FFI_TYPE_UINT32, + FFI_TYPE_SINT32. + Updated copyright info. + +2007-12-08 David Daney + + * src/mips/n32.S (ffi_call_N32): Replace dadd with ADDU, dsub with + SUBU, add with ADDU and use smaller code sequences. + +2007-12-07 David Daney + + * src/mips/ffi.c (ffi_prep_cif_machdep): Handle long double return + type. + +2007-12-06 David Daney + + * include/ffi.h.in (FFI_SIZEOF_JAVA_RAW): Define if not already + defined. + (ffi_java_raw): New typedef. + (ffi_java_raw_call, ffi_java_ptrarray_to_raw, + ffi_java_raw_to_ptrarray): Change parameter types from ffi_raw to + ffi_java_raw. + (ffi_java_raw_closure) : Same. + (ffi_prep_java_raw_closure, ffi_prep_java_raw_closure_loc): Change + parameter types. + * src/java_raw_api.c (ffi_java_raw_size): Replace FFI_SIZEOF_ARG with + FFI_SIZEOF_JAVA_RAW. + (ffi_java_raw_to_ptrarray): Change type of raw to ffi_java_raw. + Replace FFI_SIZEOF_ARG with FFI_SIZEOF_JAVA_RAW. Use + sizeof(ffi_java_raw) for alignment calculations. + (ffi_java_ptrarray_to_raw): Same. + (ffi_java_rvalue_to_raw): Add special handling for FFI_TYPE_POINTER + if FFI_SIZEOF_JAVA_RAW == 4. + (ffi_java_raw_to_rvalue): Same. + (ffi_java_raw_call): Change type of raw to ffi_java_raw. + (ffi_java_translate_args): Same. + (ffi_prep_java_raw_closure_loc, ffi_prep_java_raw_closure): Change + parameter types. + * src/mips/ffitarget.h (FFI_SIZEOF_JAVA_RAW): Define for N32 ABI. + +2007-12-06 David Daney + + * src/mips/n32.S (ffi_closure_N32): Use 64-bit add instruction on + pointer values. + +2007-12-01 Andreas Tobler + + PR libffi/31937 + * src/powerpc/ffitarget.h: Introduce new ABI FFI_LINUX_SOFT_FLOAT. + Add local FFI_TYPE_UINT128 to handle soft-float long-double-128. + * src/powerpc/ffi.c: Distinguish between __NO_FPRS__ and not and + set the NUM_FPR_ARG_REGISTERS according to. + Add support for potential soft-float support under hard-float + architecture. + (ffi_prep_args_SYSV): Set NUM_FPR_ARG_REGISTERS to 0 in case of + FFI_LINUX_SOFT_FLOAT, handle float, doubles and long-doubles according + to the FFI_LINUX_SOFT_FLOAT ABI. + (ffi_prep_cif_machdep): Likewise. + (ffi_closure_helper_SYSV): Likewise. + * src/powerpc/ppc_closure.S: Make sure not to store float/double + on archs where __NO_FPRS__ is true. + Add FFI_TYPE_UINT128 support. + * src/powerpc/sysv.S: Add support for soft-float long-double-128. + Adjust copyright notice. + +2007-11-25 Andreas Tobler + + * src/closures.c: Move defintion of MAYBE_UNUSED from here to ... + * include/ffi_common.h: ... here. + Update copyright. + +2007-11-17 Andreas Tobler + + * src/powerpc/sysv.S: Load correct cr to compare if we have long double. + * src/powerpc/linux64.S: Likewise. + * src/powerpc/ffi.c: Add a comment to show which part goes into cr6. + * testsuite/libffi.call/return_ldl.c: New test. + +2007-09-04 + + * src/arm/sysv.S (UNWIND): New. + (Whole file): Conditionally compile unwinder directives. + * src/arm/sysv.S: Add unwinder directives. + + * src/arm/ffi.c (ffi_prep_args): Align structs by at least 4 bytes. + Only treat r0 as a struct address if we're actually returning a + struct by address. + Only copy the bytes that are actually within a struct. + (ffi_prep_cif_machdep): A Composite Type not larger than 4 bytes + is returned in r0, not passed by address. + (ffi_call): Allocate a word-sized temporary for the case where + a composite is returned in r0. + (ffi_prep_incoming_args_SYSV): Align as necessary. + +2007-08-05 Steven Newbury + + * src/arm/ffi.c (FFI_INIT_TRAMPOLINE): Use __clear_cache instead of + directly using the sys_cacheflush syscall. + +2007-07-27 Andrew Haley + + * src/arm/sysv.S (ffi_closure_SYSV): Add soft-float. + +2007-09-03 Maciej W. Rozycki + + * Makefile.am: Unify MIPS_IRIX and MIPS_LINUX into MIPS. + * configure.ac: Likewise. + * Makefile.in: Regenerate. + * include/Makefile.in: Likewise. + * testsuite/Makefile.in: Likewise. + * configure: Likewise. + +2007-08-24 David Daney + + * testsuite/libffi.call/return_sl.c: New test. + +2007-08-10 David Daney + + * testsuite/libffi.call/cls_multi_ushort.c, + testsuite/libffi.call/cls_align_uint16.c, + testsuite/libffi.call/nested_struct1.c, + testsuite/libffi.call/nested_struct3.c, + testsuite/libffi.call/cls_7_1_byte.c, + testsuite/libffi.call/nested_struct5.c, + testsuite/libffi.call/cls_double.c, + testsuite/libffi.call/nested_struct7.c, + testsuite/libffi.call/cls_sint.c, + testsuite/libffi.call/nested_struct9.c, + testsuite/libffi.call/cls_20byte1.c, + testsuite/libffi.call/cls_multi_sshortchar.c, + testsuite/libffi.call/cls_align_sint64.c, + testsuite/libffi.call/cls_3byte2.c, + testsuite/libffi.call/cls_multi_schar.c, + testsuite/libffi.call/cls_multi_uchar.c, + testsuite/libffi.call/cls_19byte.c, + testsuite/libffi.call/cls_9byte1.c, + testsuite/libffi.call/cls_align_float.c, + testsuite/libffi.call/closure_fn1.c, + testsuite/libffi.call/problem1.c, + testsuite/libffi.call/closure_fn3.c, + testsuite/libffi.call/cls_sshort.c, + testsuite/libffi.call/closure_fn5.c, + testsuite/libffi.call/cls_align_double.c, + testsuite/libffi.call/nested_struct.c, + testsuite/libffi.call/cls_2byte.c, + testsuite/libffi.call/nested_struct10.c, + testsuite/libffi.call/cls_4byte.c, + testsuite/libffi.call/cls_6byte.c, + testsuite/libffi.call/cls_8byte.c, + testsuite/libffi.call/cls_multi_sshort.c, + testsuite/libffi.call/cls_align_sint16.c, + testsuite/libffi.call/cls_align_uint32.c, + testsuite/libffi.call/cls_20byte.c, + testsuite/libffi.call/cls_float.c, + testsuite/libffi.call/nested_struct2.c, + testsuite/libffi.call/cls_5_1_byte.c, + testsuite/libffi.call/nested_struct4.c, + testsuite/libffi.call/cls_24byte.c, + testsuite/libffi.call/nested_struct6.c, + testsuite/libffi.call/cls_64byte.c, + testsuite/libffi.call/nested_struct8.c, + testsuite/libffi.call/cls_uint.c, + testsuite/libffi.call/cls_multi_ushortchar.c, + testsuite/libffi.call/cls_schar.c, + testsuite/libffi.call/cls_uchar.c, + testsuite/libffi.call/cls_align_uint64.c, + testsuite/libffi.call/cls_ulonglong.c, + testsuite/libffi.call/cls_align_longdouble.c, + testsuite/libffi.call/cls_1_1byte.c, + testsuite/libffi.call/cls_12byte.c, + testsuite/libffi.call/cls_3_1byte.c, + testsuite/libffi.call/cls_3byte1.c, + testsuite/libffi.call/cls_4_1byte.c, + testsuite/libffi.call/cls_6_1_byte.c, + testsuite/libffi.call/cls_16byte.c, + testsuite/libffi.call/cls_18byte.c, + testsuite/libffi.call/closure_fn0.c, + testsuite/libffi.call/cls_9byte2.c, + testsuite/libffi.call/closure_fn2.c, + testsuite/libffi.call/closure_fn4.c, + testsuite/libffi.call/cls_ushort.c, + testsuite/libffi.call/closure_fn6.c, + testsuite/libffi.call/cls_5byte.c, + testsuite/libffi.call/cls_align_pointer.c, + testsuite/libffi.call/cls_7byte.c, + testsuite/libffi.call/cls_align_sint32.c, + testsuite/libffi.special/unwindtest_ffi_call.cc, + testsuite/libffi.special/unwindtest.cc: Remove xfail for mips64*-*-*. + +2007-08-10 David Daney + + PR libffi/28313 + * configure.ac: Don't treat mips64 as a special case. + * Makefile.am (nodist_libffi_la_SOURCES): Add n32.S. + * configure: Regenerate + * Makefile.in: Ditto. + * fficonfig.h.in: Ditto. + * src/mips/ffitarget.h (REG_L, REG_S, SUBU, ADDU, SRL, LI): Indent. + (LA, EH_FRAME_ALIGN, FDE_ADDR_BYTES): New preprocessor macros. + (FFI_DEFAULT_ABI): Set for n64 case. + (FFI_CLOSURES, FFI_TRAMPOLINE_SIZE): Define for n32 and n64 cases. + * src/mips/n32.S (ffi_call_N32): Add debug macros and labels for FDE. + (ffi_closure_N32): New function. + (.eh_frame): New section + * src/mips/o32.S: Clean up comments. + (ffi_closure_O32): Pass ffi_closure parameter in $12. + * src/mips/ffi.c: Use FFI_MIPS_N32 instead of + _MIPS_SIM == _ABIN32 throughout. + (FFI_MIPS_STOP_HERE): New, use in place of + ffi_stop_here. + (ffi_prep_args): Use unsigned long to hold pointer values. Rewrite + to support n32/n64 ABIs. + (calc_n32_struct_flags): Rewrite. + (calc_n32_return_struct_flags): Remove unused variable. Reverse + position of flag bits. + (ffi_prep_cif_machdep): Rewrite n32 portion. + (ffi_call): Enable for n64. Add special handling for small structure + return values. + (ffi_prep_closure_loc): Add n32 and n64 support. + (ffi_closure_mips_inner_O32): Add cast to silence warning. + (copy_struct_N32, ffi_closure_mips_inner_N32): New functions. + +2007-08-08 David Daney + + * testsuite/libffi.call/ffitest.h (ffi_type_mylong): Remove definition. + * testsuite/libffi.call/cls_align_uint16.c (main): Use correct type + specifiers. + * testsuite/libffi.call/nested_struct1.c (main): Ditto. + * testsuite/libffi.call/cls_sint.c (main): Ditto. + * testsuite/libffi.call/nested_struct9.c (main): Ditto. + * testsuite/libffi.call/cls_20byte1.c (main): Ditto. + * testsuite/libffi.call/cls_9byte1.c (main): Ditto. + * testsuite/libffi.call/closure_fn1.c (main): Ditto. + * testsuite/libffi.call/closure_fn3.c (main): Ditto. + * testsuite/libffi.call/return_dbl2.c (main): Ditto. + * testsuite/libffi.call/cls_sshort.c (main): Ditto. + * testsuite/libffi.call/return_fl3.c (main): Ditto. + * testsuite/libffi.call/closure_fn5.c (main): Ditto. + * testsuite/libffi.call/nested_struct.c (main): Ditto. + * testsuite/libffi.call/nested_struct10.c (main): Ditto. + * testsuite/libffi.call/return_ll1.c (main): Ditto. + * testsuite/libffi.call/cls_8byte.c (main): Ditto. + * testsuite/libffi.call/cls_align_uint32.c (main): Ditto. + * testsuite/libffi.call/cls_align_sint16.c (main): Ditto. + * testsuite/libffi.call/cls_20byte.c (main): Ditto. + * testsuite/libffi.call/nested_struct2.c (main): Ditto. + * testsuite/libffi.call/cls_24byte.c (main): Ditto. + * testsuite/libffi.call/nested_struct6.c (main): Ditto. + * testsuite/libffi.call/cls_uint.c (main): Ditto. + * testsuite/libffi.call/cls_12byte.c (main): Ditto. + * testsuite/libffi.call/cls_16byte.c (main): Ditto. + * testsuite/libffi.call/closure_fn0.c (main): Ditto. + * testsuite/libffi.call/cls_9byte2.c (main): Ditto. + * testsuite/libffi.call/closure_fn2.c (main): Ditto. + * testsuite/libffi.call/return_dbl1.c (main): Ditto. + * testsuite/libffi.call/closure_fn4.c (main): Ditto. + * testsuite/libffi.call/closure_fn6.c (main): Ditto. + * testsuite/libffi.call/cls_align_sint32.c (main): Ditto. + +2007-08-07 Andrew Haley + + * src/x86/sysv.S (ffi_closure_raw_SYSV): Fix typo in previous + checkin. + +2007-08-06 Andrew Haley + + PR testsuite/32843 + * src/x86/sysv.S (ffi_closure_raw_SYSV): Handle FFI_TYPE_UINT8, + FFI_TYPE_SINT8, FFI_TYPE_UINT16, FFI_TYPE_SINT16, FFI_TYPE_UINT32, + FFI_TYPE_SINT32. + +2007-08-02 David Daney + + * testsuite/libffi.call/return_ul.c (main): Define return type as + ffi_arg. Use proper printf conversion specifier. + +2007-07-30 Andrew Haley + + PR testsuite/32843 + * src/x86/ffi.c (ffi_prep_cif_machdep): in x86 case, add code for + signed/unsigned int8/16. + * src/x86/sysv.S (ffi_call_SYSV): Rewrite to: + Use a jump table. + Remove code to pop args from the stack after call. + Special-case signed/unsigned int8/16. + * testsuite/libffi.call/return_sc.c (main): Revert. + +2007-07-26 Richard Guenther + + PR testsuite/32843 + * testsuite/libffi.call/return_sc.c (main): Verify call + result as signed char, not ffi_arg. + +2007-07-16 Rainer Orth + + * configure.ac (i?86-*-solaris2.1[0-9]): Set TARGET to X86_64. + * configure: Regenerate. + +2007-07-11 David Daney + + * src/mips/ffi.c: Don't include sys/cachectl.h. + (ffi_prep_closure_loc): Use __builtin___clear_cache() instead of + cacheflush(). + +2007-05-18 Aurelien Jarno + + * src/arm/ffi.c (ffi_prep_closure_loc): Renamed and ajusted + from (ffi_prep_closure): ... this. + (FFI_INIT_TRAMPOLINE): Adjust. + +2005-12-31 Phil Blundell + + * src/arm/ffi.c (ffi_prep_incoming_args_SYSV, + ffi_closure_SYSV_inner, ffi_prep_closure): New, add closure support. + * src/arm/sysv.S(ffi_closure_SYSV): Likewise. + * src/arm/ffitarget.h (FFI_TRAMPOLINE_SIZE): Likewise. + (FFI_CLOSURES): Enable closure support. + +2007-07-03 Andrew Haley + + * testsuite/libffi.call/cls_multi_ushort.c, + testsuite/libffi.call/cls_align_uint16.c, + testsuite/libffi.call/nested_struct1.c, + testsuite/libffi.call/nested_struct3.c, + testsuite/libffi.call/cls_7_1_byte.c, + testsuite/libffi.call/cls_double.c, + testsuite/libffi.call/nested_struct5.c, + testsuite/libffi.call/nested_struct7.c, + testsuite/libffi.call/cls_sint.c, + testsuite/libffi.call/nested_struct9.c, + testsuite/libffi.call/cls_20byte1.c, + testsuite/libffi.call/cls_multi_sshortchar.c, + testsuite/libffi.call/cls_align_sint64.c, + testsuite/libffi.call/cls_3byte2.c, + testsuite/libffi.call/cls_multi_schar.c, + testsuite/libffi.call/cls_multi_uchar.c, + testsuite/libffi.call/cls_19byte.c, + testsuite/libffi.call/cls_9byte1.c, + testsuite/libffi.call/cls_align_float.c, + testsuite/libffi.call/closure_fn1.c, + testsuite/libffi.call/problem1.c, + testsuite/libffi.call/closure_fn3.c, + testsuite/libffi.call/cls_sshort.c, + testsuite/libffi.call/closure_fn5.c, + testsuite/libffi.call/cls_align_double.c, + testsuite/libffi.call/cls_2byte.c, + testsuite/libffi.call/nested_struct.c, + testsuite/libffi.call/nested_struct10.c, + testsuite/libffi.call/cls_4byte.c, + testsuite/libffi.call/cls_6byte.c, + testsuite/libffi.call/cls_8byte.c, + testsuite/libffi.call/cls_multi_sshort.c, + testsuite/libffi.call/cls_align_uint32.c, + testsuite/libffi.call/cls_align_sint16.c, + testsuite/libffi.call/cls_float.c, + testsuite/libffi.call/cls_20byte.c, + testsuite/libffi.call/cls_5_1_byte.c, + testsuite/libffi.call/nested_struct2.c, + testsuite/libffi.call/cls_24byte.c, + testsuite/libffi.call/nested_struct4.c, + testsuite/libffi.call/nested_struct6.c, + testsuite/libffi.call/cls_64byte.c, + testsuite/libffi.call/nested_struct8.c, + testsuite/libffi.call/cls_uint.c, + testsuite/libffi.call/cls_multi_ushortchar.c, + testsuite/libffi.call/cls_schar.c, + testsuite/libffi.call/cls_uchar.c, + testsuite/libffi.call/cls_align_uint64.c, + testsuite/libffi.call/cls_ulonglong.c, + testsuite/libffi.call/cls_align_longdouble.c, + testsuite/libffi.call/cls_1_1byte.c, + testsuite/libffi.call/cls_12byte.c, + testsuite/libffi.call/cls_3_1byte.c, + testsuite/libffi.call/cls_3byte1.c, + testsuite/libffi.call/cls_4_1byte.c, + testsuite/libffi.call/cls_6_1_byte.c, + testsuite/libffi.call/cls_16byte.c, + testsuite/libffi.call/cls_18byte.c, + testsuite/libffi.call/closure_fn0.c, + testsuite/libffi.call/cls_9byte2.c, + testsuite/libffi.call/closure_fn2.c, + testsuite/libffi.call/closure_fn4.c, + testsuite/libffi.call/cls_ushort.c, + testsuite/libffi.call/closure_fn6.c, + testsuite/libffi.call/cls_5byte.c, + testsuite/libffi.call/cls_align_pointer.c, + testsuite/libffi.call/cls_7byte.c, + testsuite/libffi.call/cls_align_sint32.c, + testsuite/libffi.special/unwindtest_ffi_call.cc, + testsuite/libffi.special/unwindtest.cc: Enable for ARM. + +2007-07-05 H.J. Lu + + * aclocal.m4: Regenerated. + +2007-06-02 Paolo Bonzini + + * configure: Regenerate. + +2007-05-23 Steve Ellcey + + * Makefile.in: Regenerate. + * configure: Regenerate. + * aclocal.m4: Regenerate. + * include/Makefile.in: Regenerate. + * testsuite/Makefile.in: Regenerate. + +2007-05-10 Roman Zippel + + * src/m68k/ffi.c (ffi_prep_incoming_args_SYSV, + ffi_closure_SYSV_inner,ffi_prep_closure): New, add closure support. + * src/m68k/sysv.S(ffi_closure_SYSV,ffi_closure_struct_SYSV): Likewise. + * src/m68k/ffitarget.h (FFI_TRAMPOLINE_SIZE): Likewise. + (FFI_CLOSURES): Enable closure support. + +2007-05-10 Roman Zippel + + * configure.ac (HAVE_AS_CFI_PSEUDO_OP): New test. + * configure: Regenerate. + * fficonfig.h.in: Regenerate. + * src/m68k/sysv.S (CFI_STARTPROC,CFI_ENDPROC, + CFI_OFFSET,CFI_DEF_CFA): New macros. + (ffi_call_SYSV): Add callframe annotation. + +2007-05-10 Roman Zippel + + * src/m68k/ffi.c (ffi_prep_args,ffi_prep_cif_machdep): Fix + numerous test suite failures. + * src/m68k/sysv.S (ffi_call_SYSV): Likewise. + +2007-04-11 Paolo Bonzini + + * Makefile.am (EXTRA_DIST): Bring up to date. + * Makefile.in: Regenerate. + * src/frv/eabi.S: Remove RCS keyword. + +2007-04-06 Richard Henderson + + * configure.ac: Tidy target case. + (HAVE_LONG_DOUBLE): Allow the target to override. + * configure: Regenerate. + * include/ffi.h.in: Don't define ffi_type_foo if + LIBFFI_HIDE_BASIC_TYPES is defined. + (ffi_type_longdouble): If not HAVE_LONG_DOUBLE, define + to ffi_type_double. + * types.c (LIBFFI_HIDE_BASIC_TYPES): Define. + (FFI_TYPEDEF, ffi_type_void): Mark the data const. + (ffi_type_longdouble): Special case for Alpha. Don't define + if long double == double. + + * src/alpha/ffi.c (FFI_TYPE_LONGDOUBLE): Assert unique value. + (ffi_prep_cif_machdep): Handle it as the 128-bit type. + (ffi_call, ffi_closure_osf_inner): Likewise. + (ffi_closure_osf_inner): Likewise. Mark hidden. + (ffi_call_osf, ffi_closure_osf): Mark hidden. + * src/alpha/ffitarget.h (FFI_LAST_ABI): Tidy definition. + * src/alpha/osf.S (ffi_call_osf, ffi_closure_osf): Mark hidden. + (load_table): Handle 128-bit long double. + + * testsuite/libffi.call/float4.c: Add -mieee for alpha. + +2007-04-06 Tom Tromey + + PR libffi/31491: + * README: Fixed bug in example. + +2007-04-03 Jakub Jelinek + + * src/closures.c: Include sys/statfs.h. + (_GNU_SOURCE): Define on Linux. + (FFI_MMAP_EXEC_SELINUX): Define. + (selinux_enabled): New variable. + (selinux_enabled_check): New function. + (is_selinux_enabled): Define. + (dlmmap): Use it. + +2007-03-24 Uros Bizjak + + * testsuite/libffi.call/return_fl2.c (return_fl): Mark as static. + Use 'volatile float sum' to create sum of floats to avoid false + negative due to excess precision on ix86 targets. + (main): Ditto. + +2007-03-08 Alexandre Oliva + + * src/powerpc/ffi.c (flush_icache): Fix left-over from previous + patch. + (ffi_prep_closure_loc): Remove unneeded casts. Add needed ones. + +2007-03-07 Alexandre Oliva + + * include/ffi.h.in (ffi_closure_alloc, ffi_closure_free): New. + (ffi_prep_closure_loc): New. + (ffi_prep_raw_closure_loc): New. + (ffi_prep_java_raw_closure_loc): New. + * src/closures.c: New file. + * src/dlmalloc.c [FFI_MMAP_EXEC_WRIT] (struct malloc_segment): + Replace sflags with exec_offset. + [FFI_MMAP_EXEC_WRIT] (mmap_exec_offset, add_segment_exec_offset, + sub_segment_exec_offset): New macros. + (get_segment_flags, set_segment_flags, check_segment_merge): New + macros. + (is_mmapped_segment, is_extern_segment): Use get_segment_flags. + (add_segment, sys_alloc, create_mspace, create_mspace_with_base, + destroy_mspace): Use new macros. + (sys_alloc): Silence warning. + * Makefile.am (libffi_la_SOURCES): Add src/closures.c. + * Makefile.in: Rebuilt. + * src/prep_cif [FFI_CLOSURES] (ffi_prep_closure): Implement in + terms of ffi_prep_closure_loc. + * src/raw_api.c (ffi_prep_raw_closure_loc): Renamed and adjusted + from... + (ffi_prep_raw_closure): ... this. Re-implement in terms of the + renamed version. + * src/java_raw_api (ffi_prep_java_raw_closure_loc): Renamed and + adjusted from... + (ffi_prep_java_raw_closure): ... this. Re-implement in terms of + the renamed version. + * src/alpha/ffi.c (ffi_prep_closure_loc): Renamed from + (ffi_prep_closure): ... this. + * src/pa/ffi.c: Likewise. + * src/cris/ffi.c: Likewise. Adjust. + * src/frv/ffi.c: Likewise. + * src/ia64/ffi.c: Likewise. + * src/mips/ffi.c: Likewise. + * src/powerpc/ffi_darwin.c: Likewise. + * src/s390/ffi.c: Likewise. + * src/sh/ffi.c: Likewise. + * src/sh64/ffi.c: Likewise. + * src/sparc/ffi.c: Likewise. + * src/x86/ffi64.c: Likewise. + * src/x86/ffi.c: Likewise. + (FFI_INIT_TRAMPOLINE): Adjust. + (ffi_prep_raw_closure_loc): Renamed and adjusted from... + (ffi_prep_raw_closure): ... this. + * src/powerpc/ffi.c (ffi_prep_closure_loc): Renamed from + (ffi_prep_closure): ... this. + (flush_icache): Adjust. + +2007-03-07 Alexandre Oliva + + * src/dlmalloc.c: New file, imported version 2.8.3 of Doug + Lea's malloc. + +2007-03-01 Brooks Moses + + * Makefile.am: Add dummy install-pdf target. + * Makefile.in: Regenerate + +2007-02-13 Andreas Krebbel + + * src/s390/ffi.c (ffi_prep_args, ffi_prep_cif_machdep, + ffi_closure_helper_SYSV): Add long double handling. + +2007-02-02 Jakub Jelinek + + * src/powerpc/linux64.S (ffi_call_LINUX64): Move restore of r2 + immediately after bctrl instruction. + +2007-01-18 Alexandre Oliva + + * Makefile.am (all-recursive, install-recursive, + mostlyclean-recursive, clean-recursive, distclean-recursive, + maintainer-clean-recursive): Add missing targets. + * Makefile.in: Rebuilt. + +2006-12-14 Andreas Tobler + + * configure.ac: Add TARGET for x86_64-*-darwin*. + * Makefile.am (nodist_libffi_la_SOURCES): Add rules for 64-bit sources + for X86_DARWIN. + * src/x86/ffitarget.h: Set trampoline size for x86_64-*-darwin*. + * src/x86/darwin64.S: New file for x86_64-*-darwin* support. + * configure: Regenerate. + * Makefile.in: Regenerate. + * include/Makefile.in: Regenerate. + * testsuite/Makefile.in: Regenerate. + * testsuite/libffi.special/unwindtest_ffi_call.cc: New test case for + ffi_call only. + +2006-12-13 Andreas Tobler + + * aclocal.m4: Regenerate with aclocal -I .. as written in the + Makefile.am. + +2006-10-31 Geoffrey Keating + + * src/powerpc/ffi_darwin.c (darwin_adjust_aggregate_sizes): New. + (ffi_prep_cif_machdep): Call darwin_adjust_aggregate_sizes for + Darwin. + * testsuite/libffi.call/nested_struct4.c: Remove Darwin XFAIL. + * testsuite/libffi.call/nested_struct6.c: Remove Darwin XFAIL. + +2006-10-10 Paolo Bonzini + Sandro Tolaini + + * configure.ac [i*86-*-darwin*]: Set X86_DARWIN symbol and + conditional. + * configure: Regenerated. + * Makefile.am (nodist_libffi_la_SOURCES) [X86_DARWIN]: New case. + (EXTRA_DIST): Add src/x86/darwin.S. + * Makefile.in: Regenerated. + * include/Makefile.in: Regenerated. + * testsuite/Makefile.in: Regenerated. + + * src/x86/ffi.c (ffi_prep_cif_machdep) [X86_DARWIN]: Treat like + X86_WIN32, and additionally align stack to 16 bytes. + * src/x86/darwin.S: New, based on sysv.S. + * src/prep_cif.c (ffi_prep_cif) [X86_DARWIN]: Align > 8-byte structs. + +2006-09-12 David Daney + + PR libffi/23935 + * include/Makefile.am: Install both ffi.h and ffitarget.h in + $(libdir)/gcc/$(target_alias)/$(gcc_version)/include. + * aclocal.m4: Regenerated for automake 1.9.6. + * Makefile.in: Regenerated. + * include/Makefile.in: Regenerated. + * testsuite/Makefile.in: Regenerated. + +2006-08-17 Andreas Tobler + + * include/ffi_common.h (struct): Revert accidental commit. + +2006-08-15 Andreas Tobler + + * include/ffi_common.h: Remove lint directives. + * include/ffi.h.in: Likewise. + +2006-07-25 Torsten Schoenfeld + + * include/ffi.h.in (ffi_type_ulong, ffi_type_slong): Define correctly + for 32-bit architectures. + * testsuite/libffi.call/return_ul.c: New test case. + +2006-07-19 David Daney + + * testsuite/libffi.call/closure_fn6.c: Remove xfail for mips, + xfail remains for mips64. + +2006-05-23 Carlos O'Donell + + * Makefile.am: Add install-html target. Add install-html to .PHONY + * Makefile.in: Regenerate. + * aclocal.m4: Regenerate. + * include/Makefile.in: Regenerate. + * testsuite/Makefile.in: Regenerate. + +2006-05-18 John David Anglin + + * pa/ffi.c (ffi_prep_args_pa32): Load floating point arguments from + stack slot. + +2006-04-22 Andreas Tobler + + * README: Remove notice about 'Crazy Comments'. + * src/debug.c: Remove lint directives. Cleanup white spaces. + * src/java_raw_api.c: Likewise. + * src/prep_cif.c: Likewise. + * src/raw_api.c: Likewise. + * src/ffitest.c: Delete. No longer needed, all test cases migrated + to the testsuite. + * src/arm/ffi.c: Remove lint directives. + * src/m32r/ffi.c: Likewise. + * src/pa/ffi.c: Likewise. + * src/powerpc/ffi.c: Likewise. + * src/powerpc/ffi_darwin.c: Likewise. + * src/sh/ffi.c: Likewise. + * src/sh64/ffi.c: Likewise. + * src/x86/ffi.c: Likewise. + * testsuite/libffi.call/float2.c: Likewise. + * testsuite/libffi.call/promotion.c: Likewise. + * testsuite/libffi.call/struct1.c: Likewise. + +2006-04-13 Andreas Tobler + + * src/pa/hpux32.S: Correct unwind offset calculation for + ffi_closure_pa32. + * src/pa/linux.S: Likewise. + +2006-04-12 James E Wilson + + PR libgcj/26483 + * src/ia64/ffi.c (stf_spill, ldf_fill): Rewrite as macros. + (hfa_type_load): Call stf_spill. + (hfa_type_store): Call ldf_fill. + (ffi_call): Adjust calls to above routines. Add local temps for + macro result. + +2006-04-10 Matthias Klose + + * testsuite/lib/libffi-dg.exp (libffi-init): Recognize multilib + directory names containing underscores. + +2006-04-07 James E Wilson + + * testsuite/libffi.call/float4.c: New testcase. + +2006-04-05 John David Anglin + Andreas Tobler + + * Makefile.am: Add PA_HPUX port. + * Makefile.in: Regenerate. + * include/Makefile.in: Likewise. + * testsuite/Makefile.in: Likewise. + * configure.ac: Add PA_HPUX rules. + * configure: Regenerate. + * src/pa/ffitarget.h: Rename linux target to PA_LINUX. + Add PA_HPUX and PA64_HPUX. + Rename FFI_LINUX ABI to FFI_PA32 ABI. + (FFI_TRAMPOLINE_SIZE): Define for 32-bit HP-UX targets. + (FFI_TYPE_SMALL_STRUCT2): Define. + (FFI_TYPE_SMALL_STRUCT4): Likewise. + (FFI_TYPE_SMALL_STRUCT8): Likewise. + (FFI_TYPE_SMALL_STRUCT3): Redefine. + (FFI_TYPE_SMALL_STRUCT5): Likewise. + (FFI_TYPE_SMALL_STRUCT6): Likewise. + (FFI_TYPE_SMALL_STRUCT7): Likewise. + * src/pa/ffi.c (ROUND_DOWN): Delete. + (fldw, fstw, fldd, fstd): Use '__asm__'. + (ffi_struct_type): Add support for FFI_TYPE_SMALL_STRUCT2, + FFI_TYPE_SMALL_STRUCT4 and FFI_TYPE_SMALL_STRUCT8. + (ffi_prep_args_LINUX): Rename to ffi_prep_args_pa32. Update comment. + Simplify incrementing of stack slot variable. Change type of local + 'n' to unsigned int. + (ffi_size_stack_LINUX): Rename to ffi_size_stack_pa32. Handle long + double on PA_HPUX. + (ffi_prep_cif_machdep): Likewise. + (ffi_call): Likewise. + (ffi_closure_inner_LINUX): Rename to ffi_closure_inner_pa32. Change + return type to ffi_status. Simplify incrementing of stack slot + variable. Only copy floating point argument registers when PA_LINUX + is true. Reformat debug statement. + Add support for FFI_TYPE_SMALL_STRUCT2, FFI_TYPE_SMALL_STRUCT4 and + FFI_TYPE_SMALL_STRUCT8. + (ffi_closure_LINUX): Rename to ffi_closure_pa32. Add 'extern' to + declaration. + (ffi_prep_closure): Make linux trampoline conditional on PA_LINUX. + Add nops to cache flush. Add trampoline for PA_HPUX. + * src/pa/hpux32.S: New file. + * src/pa/linux.S (ffi_call_LINUX): Rename to ffi_call_pa32. Rename + ffi_prep_args_LINUX to ffi_prep_args_pa32. + Localize labels. Add support for 2, 4 and 8-byte small structs. Handle + unaligned destinations in 3, 5, 6 and 7-byte small structs. Order + argument type checks so that common argument types appear first. + (ffi_closure_LINUX): Rename to ffi_closure_pa32. Rename + ffi_closure_inner_LINUX to ffi_closure_inner_pa32. + +2006-03-24 Alan Modra + + * src/powerpc/ffitarget.h (enum ffi_abi): Add FFI_LINUX. Default + for 32-bit using IBM extended double format. Fix FFI_LAST_ABI. + * src/powerpc/ffi.c (ffi_prep_args_SYSV): Handle linux variant of + FFI_TYPE_LONGDOUBLE. + (ffi_prep_args64): Assert using IBM extended double. + (ffi_prep_cif_machdep): Don't munge FFI_TYPE_LONGDOUBLE type. + Handle FFI_LINUX FFI_TYPE_LONGDOUBLE return and args. + (ffi_call): Handle FFI_LINUX. + (ffi_closure_helper_SYSV): Non FFI_LINUX long double return needs + gpr3 return pointer as for struct return. Handle FFI_LINUX + FFI_TYPE_LONGDOUBLE return and args. Don't increment "nf" + unnecessarily. + * src/powerpc/ppc_closure.S (ffi_closure_SYSV): Load both f1 and f2 + for FFI_TYPE_LONGDOUBLE. Move epilogue insns into case table. + Don't use r6 as pointer to results, instead use sp offset. Don't + make a special call to load lr with case table address, instead + use offset from previous call. + * src/powerpc/sysv.S (ffi_call_SYSV): Save long double return. + * src/powerpc/linux64.S (ffi_call_LINUX64): Simplify long double + return. + +2006-03-15 Kaz Kojima + + * src/sh64/ffi.c (ffi_prep_cif_machdep): Handle float arguments + passed with FP registers correctly. + (ffi_closure_helper_SYSV): Likewise. + * src/sh64/sysv.S: Likewise. + +2006-03-01 Andreas Tobler + + * testsuite/libffi.special/unwindtest.cc (closure_test_fn): Mark cif, + args and userdata unused. + (closure_test_fn1): Mark cif and userdata unused. + (main): Remove unused res. + +2006-02-28 Andreas Tobler + + * testsuite/libffi.call/call.exp: Adjust FSF address. Add test runs for + -O2, -O3, -Os and the warning flags -W -Wall. + * testsuite/libffi.special/special.exp: Likewise. + * testsuite/libffi.call/ffitest.h: Add an __UNUSED__ macro to mark + unused parameter unused for gcc or else do nothing. + * testsuite/libffi.special/ffitestcxx.h: Likewise. + * testsuite/libffi.call/cls_12byte.c (cls_struct_12byte_gn): Mark cif + and userdata unused. + * testsuite/libffi.call/cls_16byte.c (cls_struct_16byte_gn): Likewise. + * testsuite/libffi.call/cls_18byte.c (cls_struct_18byte_gn): Likewise. + * testsuite/libffi.call/cls_19byte.c (cls_struct_19byte_gn): Likewise. + * testsuite/libffi.call/cls_1_1byte.c (cls_struct_1_1byte_gn): Likewise. + * testsuite/libffi.call/cls_20byte.c (cls_struct_20byte_gn): Likewise. + * testsuite/libffi.call/cls_20byte1.c (cls_struct_20byte_gn): Likewise. + * testsuite/libffi.call/cls_24byte.c (cls_struct_24byte_gn): Likewise. + * testsuite/libffi.call/cls_2byte.c (cls_struct_2byte_gn): Likewise. + * testsuite/libffi.call/cls_3_1byte.c (cls_struct_3_1byte_gn): Likewise. + * testsuite/libffi.call/cls_3byte1.c (cls_struct_3byte_gn): Likewise. + * testsuite/libffi.call/cls_3byte2.c (cls_struct_3byte_gn1): Likewise. + * testsuite/libffi.call/cls_4_1byte.c (cls_struct_4_1byte_gn): Likewise. + * testsuite/libffi.call/cls_4byte.c (cls_struct_4byte_gn): Likewise. + * testsuite/libffi.call/cls_5_1_byte.c (cls_struct_5byte_gn): Likewise. + * testsuite/libffi.call/cls_5byte.c (cls_struct_5byte_gn): Likewise. + * testsuite/libffi.call/cls_64byte.c (cls_struct_64byte_gn): Likewise. + * testsuite/libffi.call/cls_6_1_byte.c (cls_struct_6byte_gn): Likewise. + * testsuite/libffi.call/cls_6byte.c (cls_struct_6byte_gn): Likewise. + * testsuite/libffi.call/cls_7_1_byte.c (cls_struct_7byte_gn): Likewise. + * testsuite/libffi.call/cls_7byte.c (cls_struct_7byte_gn): Likewise. + * testsuite/libffi.call/cls_8byte.c (cls_struct_8byte_gn): Likewise. + * testsuite/libffi.call/cls_9byte1.c (cls_struct_9byte_gn): Likewise. + * testsuite/libffi.call/cls_9byte2.c (cls_struct_9byte_gn): Likewise. + * testsuite/libffi.call/cls_align_double.c (cls_struct_align_gn): + Likewise. + * testsuite/libffi.call/cls_align_float.c (cls_struct_align_gn): + Likewise. + * testsuite/libffi.call/cls_align_longdouble.c (cls_struct_align_gn): + Likewise. + * testsuite/libffi.call/cls_align_pointer.c (cls_struct_align_fn): Cast + void* to avoid compiler warning. + (main): Likewise. + (cls_struct_align_gn): Mark cif and userdata unused. + * testsuite/libffi.call/cls_align_sint16.c (cls_struct_align_gn): + Likewise. + * testsuite/libffi.call/cls_align_sint32.c (cls_struct_align_gn): + Likewise. + * testsuite/libffi.call/cls_align_sint64.c (cls_struct_align_gn): + Likewise. + * testsuite/libffi.call/cls_align_uint16.c (cls_struct_align_gn): + Likewise. + * testsuite/libffi.call/cls_align_uint32.c (cls_struct_align_gn): + Likewise. + * testsuite/libffi.call/cls_double.c (cls_ret_double_fn): Likewise. + * testsuite/libffi.call/cls_float.c (cls_ret_float_fn): Likewise. + * testsuite/libffi.call/cls_multi_schar.c (test_func_gn): Mark cif and + data unused. + (main): Cast res_call to silence gcc. + * testsuite/libffi.call/cls_multi_sshort.c (test_func_gn): Mark cif and + data unused. + (main): Cast res_call to silence gcc. + * testsuite/libffi.call/cls_multi_sshortchar.c (test_func_gn): Mark cif + and data unused. + (main): Cast res_call to silence gcc. + * testsuite/libffi.call/cls_multi_uchar.c (test_func_gn): Mark cif and + data unused. + (main): Cast res_call to silence gcc. + * testsuite/libffi.call/cls_multi_ushort.c (test_func_gn): Mark cif and + data unused. + (main): Cast res_call to silence gcc. + * testsuite/libffi.call/cls_multi_ushortchar.c (test_func_gn): Mark cif + and data unused. + (main): Cast res_call to silence gcc. + * testsuite/libffi.call/cls_schar.c (cls_ret_schar_fn): Mark cif and + userdata unused. + (cls_ret_schar_fn): Cast printf parameter to silence gcc. + * testsuite/libffi.call/cls_sint.c (cls_ret_sint_fn): Mark cif and + userdata unused. + (cls_ret_sint_fn): Cast printf parameter to silence gcc. + * testsuite/libffi.call/cls_sshort.c (cls_ret_sshort_fn): Mark cif and + userdata unused. + (cls_ret_sshort_fn): Cast printf parameter to silence gcc. + * testsuite/libffi.call/cls_uchar.c (cls_ret_uchar_fn): Mark cif and + userdata unused. + (cls_ret_uchar_fn): Cast printf parameter to silence gcc. + * testsuite/libffi.call/cls_uint.c (cls_ret_uint_fn): Mark cif and + userdata unused. + (cls_ret_uint_fn): Cast printf parameter to silence gcc. + * testsuite/libffi.call/cls_ulonglong.c (cls_ret_ulonglong_fn): Mark cif + and userdata unused. + * testsuite/libffi.call/cls_ushort.c (cls_ret_ushort_fn): Mark cif and + userdata unused. + (cls_ret_ushort_fn): Cast printf parameter to silence gcc. + * testsuite/libffi.call/float.c (floating): Remove unused parameter e. + * testsuite/libffi.call/float1.c (main): Remove unused variable i. + Cleanup white spaces. + * testsuite/libffi.call/negint.c (checking): Remove unused variable i. + * testsuite/libffi.call/nested_struct.c (cls_struct_combined_gn): Mark + cif and userdata unused. + * testsuite/libffi.call/nested_struct1.c (cls_struct_combined_gn): + Likewise. + * testsuite/libffi.call/nested_struct10.c (B_gn): Likewise. + * testsuite/libffi.call/nested_struct2.c (B_fn): Adjust printf + formatters to silence gcc. + (B_gn): Mark cif and userdata unused. + * testsuite/libffi.call/nested_struct3.c (B_gn): Mark cif and userdata + unused. + * testsuite/libffi.call/nested_struct4.c: Mention related PR. + (B_gn): Mark cif and userdata unused. + * testsuite/libffi.call/nested_struct5.c (B_gn): Mark cif and userdata + unused. + * testsuite/libffi.call/nested_struct6.c: Mention related PR. + (B_gn): Mark cif and userdata unused. + * testsuite/libffi.call/nested_struct7.c (B_gn): Mark cif and userdata + unused. + * testsuite/libffi.call/nested_struct8.c (B_gn): Likewise. + * testsuite/libffi.call/nested_struct9.c (B_gn): Likewise. + * testsuite/libffi.call/problem1.c (stub): Likewise. + * testsuite/libffi.call/pyobjc-tc.c (main): Cast the result to silence + gcc. + * testsuite/libffi.call/return_fl2.c (return_fl): Add the note mentioned + in the last commit for this test case in the test case itself. + * testsuite/libffi.call/closure_fn0.c (closure_test_fn0): Mark cif as + unused. + * testsuite/libffi.call/closure_fn1.c (closure_test_fn1): Likewise. + * testsuite/libffi.call/closure_fn2.c (closure_test_fn2): Likewise. + * testsuite/libffi.call/closure_fn3.c (closure_test_fn3): Likewise. + * testsuite/libffi.call/closure_fn4.c (closure_test_fn0): Likewise. + * testsuite/libffi.call/closure_fn5.c (closure_test_fn5): Likewise. + * testsuite/libffi.call/closure_fn6.c (closure_test_fn0): Likewise. + +2006-02-22 Kaz Kojima + + * src/sh/sysv.S: Fix register numbers in the FDE for + ffi_closure_SYSV. + +2006-02-20 Andreas Tobler + + * testsuite/libffi.call/return_fl2.c (return_fl): Remove static + declaration to avoid a false negative on ix86. See PR323. + +2006-02-18 Kaz Kojima + + * src/sh/ffi.c (ffi_closure_helper_SYSV): Remove unused variable + and cast integer to void * if needed. Update the pointer to + the FP register saved area correctly. + +2006-02-17 Andreas Tobler + + * testsuite/libffi.call/nested_struct6.c: XFAIL this test until PR25630 + is fixed. + * testsuite/libffi.call/nested_struct4.c: Likewise. + +2006-02-16 Andreas Tobler + + * testsuite/libffi.call/return_dbl.c: New test case. + * testsuite/libffi.call/return_dbl1.c: Likewise. + * testsuite/libffi.call/return_dbl2.c: Likewise. + * testsuite/libffi.call/return_fl.c: Likewise. + * testsuite/libffi.call/return_fl1.c: Likewise. + * testsuite/libffi.call/return_fl2.c: Likewise. + * testsuite/libffi.call/return_fl3.c: Likewise. + * testsuite/libffi.call/closure_fn6.c: Likewise. + + * testsuite/libffi.call/nested_struct2.c: Remove ffi_type_mylong + definition. + * testsuite/libffi.call/ffitest.h: Add ffi_type_mylong definition + here to be used by other test cases too. + + * testsuite/libffi.call/nested_struct10.c: New test case. + * testsuite/libffi.call/nested_struct9.c: Likewise. + * testsuite/libffi.call/nested_struct8.c: Likewise. + * testsuite/libffi.call/nested_struct7.c: Likewise. + * testsuite/libffi.call/nested_struct6.c: Likewise. + * testsuite/libffi.call/nested_struct5.c: Likewise. + * testsuite/libffi.call/nested_struct4.c: Likewise. + +2006-01-21 Andreas Tobler + + * configure.ac: Enable libffi for sparc64-*-freebsd*. + * configure: Rebuilt. + +2006-01-18 Jakub Jelinek + + * src/powerpc/sysv.S (smst_two_register): Don't call __ashldi3, + instead do the shifting inline. + * src/powerpc/ppc_closure.S (ffi_closure_SYSV): Don't compute %r5 + shift count unconditionally. Simplify load sequences for 1, 2, 3, 4 + and 8 byte structs, for the remaining struct sizes don't call + __lshrdi3, instead do the shifting inline. + +2005-12-07 Thiemo Seufer + + * src/mips/ffitarget.h: Remove obsolete sgidefs.h include. Add + missing parentheses. + * src/mips/o32.S (ffi_call_O32): Code formatting. Define + and use A3_OFF, FP_OFF, RA_OFF. Micro-optimizations. + (ffi_closure_O32): Likewise, but with newly defined A3_OFF2, + A2_OFF2, A1_OFF2, A0_OFF2, RA_OFF2, FP_OFF2, S0_OFF2, GP_OFF2, + V1_OFF2, V0_OFF2, FA_1_1_OFF2, FA_1_0_OFF2, FA_0_1_OFF2, + FA_0_0_OFF2. + * src/mips/ffi.c (ffi_prep_args): Code formatting. Fix + endianness bugs. + (ffi_prep_closure): Improve trampoline instruction scheduling. + (ffi_closure_mips_inner_O32): Fix endianness bugs. + +2005-12-03 Alan Modra + + * src/powerpc/ffi.c: Formatting. + (ffi_prep_args_SYSV): Avoid possible aliasing problems by using unions. + (ffi_prep_args64): Likewise. + +2005-09-30 Geoffrey Keating + + * testsuite/lib/libffi-dg.exp (libffi_target_compile): For + darwin, use -shared-libgcc not -lgcc_s, and explain why. + +2005-09-26 Tom Tromey + + * testsuite/libffi.call/float1.c (value_type): New typedef. + (CANARY): New define. + (main): Check for result buffer overflow. + * src/powerpc/linux64.S: Handle linux64 long double returns. + * src/powerpc/ffi.c (FLAG_RETURNS_128BITS): New constant. + (ffi_prep_cif_machdep): Handle linux64 long double returns. + +2005-08-25 Alan Modra + + PR target/23404 + * src/powerpc/ffi.c (ffi_prep_args_SYSV): Correct placement of stack + homed fp args. + (ffi_status ffi_prep_cif_machdep): Correct stack sizing for same. + +2005-08-11 Jakub Jelinek + + * configure.ac (HAVE_HIDDEN_VISIBILITY_ATTRIBUTE): New test. + (AH_BOTTOM): Add FFI_HIDDEN definition. + * configure: Rebuilt. + * fficonfig.h.in: Rebuilt. + * src/powerpc/ffi.c (hidden): Remove. + (ffi_closure_LINUX64, ffi_prep_args64, ffi_call_LINUX64, + ffi_closure_helper_LINUX64): Use FFI_HIDDEN instead of hidden. + * src/powerpc/linux64_closure.S (ffi_closure_LINUX64, + .ffi_closure_LINUX64): Use FFI_HIDDEN instead of .hidden. + * src/x86/ffi.c (ffi_closure_SYSV, ffi_closure_raw_SYSV): Remove, + add FFI_HIDDEN to its prototype. + (ffi_closure_SYSV_inner): New. + * src/x86/sysv.S (ffi_closure_SYSV, ffi_closure_raw_SYSV): New. + * src/x86/win32.S (ffi_closure_SYSV, ffi_closure_raw_SYSV): New. + +2005-08-10 Alfred M. Szmidt + + PR libffi/21819: + * configure: Rebuilt. + * configure.ac: Handle i*86-*-gnu*. + +2005-08-09 Jakub Jelinek + + * src/powerpc/ppc_closure.S (ffi_closure_SYSV): Use + DW_CFA_offset_extended_sf rather than + DW_CFA_GNU_negative_offset_extended. + * src/powerpc/sysv.S (ffi_call_SYSV): Likewise. + +2005-07-22 SUGIOKA Toshinobu + + * src/sh/sysv.S (ffi_call_SYSV): Stop argument popping correctly + on sh3. + (ffi_closure_SYSV): Change the stack layout for sh3 struct argument. + * src/sh/ffi.c (ffi_prep_args): Fix sh3 argument copy, when it is + partially on register. + (ffi_closure_helper_SYSV): Likewise. + (ffi_prep_cif_machdep): Don't set too many cif->flags. + +2005-07-20 Kaz Kojima + + * src/sh/ffi.c (ffi_call): Handle small structures correctly. + Remove empty line. + * src/sh64/ffi.c (simple_type): Remove. + (return_type): Handle small structures correctly. + (ffi_prep_args): Likewise. + (ffi_call): Likewise. + (ffi_closure_helper_SYSV): Likewise. + * src/sh64/sysv.S (ffi_call_SYSV): Handle 1, 2 and 4-byte return. + Emit position independent code if PIC and remove wrong datalabel + prefixes from EH data. + +2005-07-19 Andreas Tobler + + * Makefile.am (nodist_libffi_la_SOURCES): Add POWERPC_FREEBSD. + * Makefile.in: Regenerate. + * include/Makefile.in: Likewise. + * testsuite/Makefile.in: Likewise. + * configure.ac: Add POWERPC_FREEBSD rules. + * configure: Regenerate. + * src/powerpc/ffitarget.h: Add POWERPC_FREEBSD rules. + (FFI_SYSV_TYPE_SMALL_STRUCT): Define. + * src/powerpc/ffi.c: Add flags to handle small structure returns + in ffi_call_SYSV. + (ffi_prep_cif_machdep): Handle small structures for SYSV 4 ABI. + Aka FFI_SYSV. + (ffi_closure_helper_SYSV): Likewise. + * src/powerpc/ppc_closure.S: Add return types for small structures. + * src/powerpc/sysv.S: Add bits to handle small structures for + final SYSV 4 ABI. + +2005-07-10 Andreas Tobler + + * testsuite/libffi.call/cls_5_1_byte.c: New test file. + * testsuite/libffi.call/cls_6_1_byte.c: Likewise. + * testsuite/libffi.call/cls_7_1_byte.c: Likewise. + +2005-07-05 Randolph Chung + + * src/pa/ffi.c (ffi_struct_type): Rename FFI_TYPE_SMALL_STRUCT1 + as FFI_TYPE_SMALL_STRUCT3. Break out handling for 5-7 byte + structures. Kill compilation warnings. + (ffi_closure_inner_LINUX): Print return values as hex in debug + message. Rename FFI_TYPE_SMALL_STRUCT1 as FFI_TYPE_SMALL_STRUCT3. + Properly handle 5-7 byte structure returns. + * src/pa/ffitarget.h (FFI_TYPE_SMALL_STRUCT1) + (FFI_TYPE_SMALL_STRUCT2): Remove. + (FFI_TYPE_SMALL_STRUCT3, FFI_TYPE_SMALL_STRUCT5) + (FFI_TYPE_SMALL_STRUCT6, FFI_TYPE_SMALL_STRUCT7): Define. + * src/pa/linux.S: Mark source file as using PA1.1 assembly. + (checksmst1, checksmst2): Remove. + (checksmst3): Optimize handling of 3-byte struct returns. + (checksmst567): Properly handle 5-7 byte struct returns. + +2005-06-15 Rainer Orth + + PR libgcj/21943 + * src/mips/n32.S: Enforce PIC code. + * src/mips/o32.S: Likewise. + +2005-06-15 Rainer Orth + + * configure.ac: Treat i*86-*-solaris2.10 and up as X86_64. + * configure: Regenerate. + +2005-06-01 Alan Modra + + * src/powerpc/ppc_closure.S (ffi_closure_SYSV): Don't use JUMPTARGET + to call ffi_closure_helper_SYSV. Append @local instead. + * src/powerpc/sysv.S (ffi_call_SYSV): Likewise for ffi_prep_args_SYSV. + +2005-05-17 Kelley Cook + + * configure.ac: Use AC_C_BIGENDIAN instead of AC_C_BIGENDIAN_CROSS. + Use AC_CHECK_SIZEOF instead of AC_COMPILE_CHECK_SIZEOF. + * Makefile.am (ACLOCAL_AMFLAGS): Remove -I ../config. + * aclocal.m4, configure, fficonfig.h.in, Makefile.in, + include/Makefile.in, testsuite/Makefile.in: Regenerate. + +2005-05-09 Mike Stump + + * configure: Regenerate. + +2005-05-08 Richard Henderson + + PR libffi/21285 + * src/alpha/osf.S: Update unwind into to match code. + +2005-05-04 Andreas Degert + Richard Henderson + + * src/x86/ffi64.c (ffi_prep_cif_machdep): Save sse-used flag in + bit 11 of flags. + (ffi_call): Mask return type field. Pass ssecount to ffi_call_unix64. + (ffi_prep_closure): Set carry bit if sse-used flag set. + * src/x86/unix64.S (ffi_call_unix64): Add ssecount argument. + Only load sse registers if ssecount non-zero. + (ffi_closure_unix64): Only save sse registers if carry set on entry. + +2005-04-29 Ralf Corsepius + + * configure.ac: Add i*86-*-rtems*, sparc*-*-rtems*, + powerpc-*rtems*, arm*-*-rtems*, sh-*-rtems*. + * configure: Regenerate. + +2005-04-20 Hans-Peter Nilsson + + * testsuite/lib/libffi-dg.exp (libffi-dg-test-1): In regsub use, + have Tcl8.3-compatible intermediate variable. + +2005-04-18 Simon Posnjak + Hans-Peter Nilsson + + * Makefile.am: Add CRIS support. + * configure.ac: Likewise. + * Makefile.in, configure, testsuite/Makefile.in, + include/Makefile.in: Regenerate. + * src/cris: New directory. + * src/cris/ffi.c, src/cris/sysv.S, src/cris/ffitarget.h: New files. + * src/prep_cif.c (ffi_prep_cif): Wrap in #ifndef __CRIS__. + + * testsuite/lib/libffi-dg.exp (libffi-dg-test-1): Replace \n with + \r?\n in output tests. + +2005-04-12 Mike Stump + + * configure: Regenerate. + +2005-03-30 Hans Boehm + + * src/ia64/ffitarget.h (ffi_arg): Use long long instead of DI. + +2005-03-30 Steve Ellcey + + * src/ia64/ffitarget.h (ffi_arg) ADD DI attribute. + (ffi_sarg) Ditto. + * src/ia64/unix.S (ffi_closure_unix): Extend gp + to 64 bits in ILP32 mode. + Load 64 bits even for short data. + +2005-03-23 Mike Stump + + * src/powerpc/darwin.S: Update for -m64 multilib. + * src/powerpc/darwin_closure.S: Likewise. + +2005-03-21 Zack Weinberg + + * configure.ac: Do not invoke TL_AC_GCC_VERSION. + Do not set tool_include_dir. + * aclocal.m4, configure, Makefile.in, testsuite/Makefile.in: + Regenerate. + * include/Makefile.am: Set gcc_version and toollibffidir. + * include/Makefile.in: Regenerate. + +2005-02-22 Andrew Haley + + * src/powerpc/ffi.c (ffi_prep_cif_machdep): Bump alignment to + odd-numbered register pairs for 64-bit integer types. + +2005-02-23 Andreas Tobler + + PR libffi/20104 + * testsuite/libffi.call/return_ll1.c: New test case. + +2005-02-11 Janis Johnson + + * testsuite/libffi.call/cls_align_longdouble.c: Remove dg-options. + * testsuite/libffi.call/float.c: Ditto. + * testsuite/libffi.call/float2.c: Ditto. + * testsuite/libffi.call/float3.c: Ditto. + +2005-02-08 Andreas Tobler + + * src/frv/ffitarget.h: Remove PPC stuff which does not belong to frv. + +2005-01-12 Eric Botcazou + + * testsuite/libffi.special/special.exp (cxx_options): Add + -shared-libgcc. + +2004-12-31 Richard Henderson + + * src/types.c (FFI_AGGREGATE_TYPEDEF): Remove. + (FFI_TYPEDEF): Rename from FFI_INTEGRAL_TYPEDEF. Replace size and + offset parameters with a type parameter; deduce size and structure + alignment. Update all users. + +2004-12-31 Richard Henderson + + * src/types.c (FFI_TYPE_POINTER): Define with sizeof. + (FFI_TYPE_LONGDOUBLE): Fix for ia64. + * src/ia64/ffitarget.h (struct ffi_ia64_trampoline_struct): Move + into ffi_prep_closure. + * src/ia64/ia64_flags.h, src/ia64/ffi.c, src/ia64/unix.S: Rewrite + from scratch. + +2004-12-27 Richard Henderson + + * src/x86/unix64.S: Fix typo in unwind info. + +2004-12-25 Richard Henderson + + * src/x86/ffi64.c (struct register_args): Rename from stackLayout. + (enum x86_64_reg_class): Add X86_64_COMPLEX_X87_CLASS. + (merge_classes): Check for it. + (SSE_CLASS_P): New. + (classify_argument): Pass byte_offset by value; perform all updates + inside struct case. + (examine_argument): Add classes argument; handle + X86_64_COMPLEX_X87_CLASS. + (ffi_prep_args): Merge into ... + (ffi_call): ... here. Share stack frame with ffi_call_unix64. + (ffi_prep_cif_machdep): Setup cif->flags for proper structure return. + (ffi_fill_return_value): Remove. + (ffi_prep_closure): Remove dead assert. + (ffi_closure_unix64_inner): Rename from ffi_closure_UNIX64_inner. + Rewrite to use struct register_args instead of va_list. Create + flags for handling structure returns. + * src/x86/unix64.S: Remove dead strings. + (ffi_call_unix64): Rename from ffi_call_UNIX64. Rewrite to share + stack frame with ffi_call. Handle structure returns properly. + (float2sse, floatfloat2sse, double2sse): Remove. + (sse2float, sse2double, sse2floatfloat): Remove. + (ffi_closure_unix64): Rename from ffi_closure_UNIX64. Rewrite + to handle structure returns properly. + +2004-12-08 David Edelsohn + + * Makefile.am (AM_MAKEFLAGS): Remove duplicate LIBCFLAGS and + PICFLAG. + * Makefile.in: Regenerated. + +2004-12-02 Richard Sandiford + + * configure.ac: Use TL_AC_GCC_VERSION to set gcc_version. + * configure, aclocal.m4, Makefile.in: Regenerate. + * include/Makefile.in, testsuite/Makefile.in: Regenerate. + +2004-11-29 Kelley Cook + + * configure: Regenerate for libtool change. + +2004-11-25 Kelley Cook + + * configure: Regenerate for libtool reversion. + +2004-11-24 Kelley Cook + + * configure: Regenerate for libtool change. + +2004-11-23 John David Anglin + + * testsuite/lib/libffi-dg.exp: Use new procs in target-libpath.exp. + +2004-11-23 Richard Sandiford + + * src/mips/o32.S (ffi_call_O32, ffi_closure_O32): Use jalr instead + of jal. Use an absolute encoding for the frame information. + +2004-11-23 Kelley Cook + + * Makefile.am: Remove no-dependencies. Add ACLOCAL_AMFLAGS. + * acinclude.m4: Delete logic for sincludes. + * aclocal.m4, Makefile.in, configure: Regenerate. + * include/Makefile: Likewise. + * testsuite/Makefile: Likewise. + +2004-11-22 Eric Botcazou + + * src/sparc/ffi.c (ffi_prep_closure): Align doubles and 64-bit integers + on a 8-byte boundary. + * src/sparc/v8.S (ffi_closure_v8): Reserve frame space for arguments. + +2004-10-27 Richard Earnshaw + + * src/arm/ffi.c (ffi_prep_cif_machdep): Handle functions that return + long long values. Round stack allocation to a multiple of 8 bytes + for ATPCS compatibility. + * src/arm/sysv.S (ffi_call_SYSV): Rework to avoid use of APCS register + names. Handle returning long long types. Add Thumb and interworking + support. Improve soft-float code. + +2004-10-27 Richard Earnshaw + + * testsuite/lib/libffi-db.exp (load_gcc_lib): New function. + (libffi_exit): New function. + (libffi_init): Build the testglue wrapper if needed. + +2004-10-25 Eric Botcazou + + PR other/18138 + * testsuite/lib/libffi-dg.exp: Accept more than one multilib libgcc. + +2004-10-25 Kazuhiro Inaoka + + * src/m32r/libffitarget.h (FFI_CLOSURES): Set to 0. + +2004-10-20 Kaz Kojima + + * src/sh/sysv.S (ffi_call_SYSV): Don't align for double data. + * testsuite/libffi.call/float3.c: New test case. + +2004-10-18 Kaz Kojima + + * src/sh/ffi.c (ffi_prep_closure): Set T bit in trampoline for + the function returning a structure pointed with R2. + * src/sh/sysv.S (ffi_closure_SYSV): Use R2 as the pointer to + the structure return value if T bit set. Emit position + independent code and EH data if PIC. + +2004-10-13 Kazuhiro Inaoka + + * Makefile.am: Add m32r support. + * configure.ac: Likewise. + * Makefile.in: Regenerate. + * confiugre: Regenerate. + * src/types.c: Add m32r port to FFI_INTERNAL_TYPEDEF + (uint64, sint64, double, longdouble) + * src/m32r: New directory. + * src/m32r/ffi.c: New file. + * src/m32r/sysv.S: Likewise. + * src/m32r/ffitarget.h: Likewise. + +2004-10-02 Kaz Kojima + + * testsuite/libffi.call/negint.c: New test case. + +2004-09-14 H.J. Lu + + PR libgcj/17465 + * testsuite/lib/libffi-dg.exp: Don't use global ld_library_path. + Set up LD_LIBRARY_PATH, SHLIB_PATH, LD_LIBRARYN32_PATH, + LD_LIBRARY64_PATH, LD_LIBRARY_PATH_32, LD_LIBRARY_PATH_64 and + DYLD_LIBRARY_PATH. + +2004-09-05 Andreas Tobler + + * testsuite/libffi.call/many_win32.c: Remove whitespaces. + * testsuite/libffi.call/promotion.c: Likewise. + * testsuite/libffi.call/return_ll.c: Remove unused var. Cleanup + whitespaces. + * testsuite/libffi.call/return_sc.c: Likewise. + * testsuite/libffi.call/return_uc.c: Likewise. + +2004-09-05 Andreas Tobler + + * src/powerpc/darwin.S: Fix comments and identation. + * src/powerpc/darwin_closure.S: Likewise. + +2004-09-02 Andreas Tobler + + * src/powerpc/ffi_darwin.c: Add flag for longdouble return values. + (ffi_prep_args): Handle longdouble arguments. + (ffi_prep_cif_machdep): Set flags for longdouble. Calculate space for + longdouble. + (ffi_closure_helper_DARWIN): Add closure handling for longdouble. + * src/powerpc/darwin.S (_ffi_call_DARWIN): Add handling of longdouble + values. + * src/powerpc/darwin_closure.S (_ffi_closure_ASM): Likewise. + * src/types.c: Defined longdouble size and alignment for darwin. + +2004-09-02 Andreas Tobler + + * src/powerpc/aix.S: Remove whitespaces. + * src/powerpc/aix_closure.S: Likewise. + * src/powerpc/asm.h: Likewise. + * src/powerpc/ffi.c: Likewise. + * src/powerpc/ffitarget.h: Likewise. + * src/powerpc/linux64.S: Likewise. + * src/powerpc/linux64_closure.S: Likewise. + * src/powerpc/ppc_closure.S: Likewise. + * src/powerpc/sysv.S: Likewise. + +2004-08-30 Anthony Green + + * Makefile.am: Add frv support. + * Makefile.in, testsuite/Makefile.in: Rebuilt. + * configure.ac: Read configure.host. + * configure.in: Read configure.host. + * configure.host: New file. frv-elf needs libgloss. + * include/ffi.h.in: Force ffi_closure to have a nice big (8) + alignment. This is needed to frv and shouldn't harm the others. + * include/ffi_common.h (ALIGN_DOWN): New macro. + * src/frv/ffi.c, src/frv/ffitarget.h, src/frv/eabi.S: New files. + +2004-08-24 David Daney + + * testsuite/libffi.call/closure_fn0.c: Xfail mips64* instead of mips*. + * testsuite/libffi.call/closure_fn1.c: Likewise. + * testsuite/libffi.call/closure_fn2.c Likewise. + * testsuite/libffi.call/closure_fn3.c: Likewise. + * testsuite/libffi.call/closure_fn4.c: Likewise. + * testsuite/libffi.call/closure_fn5.c: Likewise. + * testsuite/libffi.call/cls_18byte.c: Likewise. + * testsuite/libffi.call/cls_19byte.c: Likewise. + * testsuite/libffi.call/cls_1_1byte.c: Likewise. + * testsuite/libffi.call/cls_20byte.c: Likewise. + * testsuite/libffi.call/cls_20byte1.c: Likewise. + * testsuite/libffi.call/cls_24byte.c: Likewise. + * testsuite/libffi.call/cls_2byte.c: Likewise. + * testsuite/libffi.call/cls_3_1byte.c: Likewise. + * testsuite/libffi.call/cls_3byte1.c: Likewise. + * testsuite/libffi.call/cls_3byte2.c: Likewise. + * testsuite/libffi.call/cls_4_1byte.c: Likewise. + * testsuite/libffi.call/cls_4byte.c: Likewise. + * testsuite/libffi.call/cls_64byte.c: Likewise. + * testsuite/libffi.call/cls_6byte.c: Likewise. + * testsuite/libffi.call/cls_7byte.c: Likewise. + * testsuite/libffi.call/cls_8byte.c: Likewise. + * testsuite/libffi.call/cls_9byte1.c: Likewise. + * testsuite/libffi.call/cls_9byte2.c: Likewise. + * testsuite/libffi.call/cls_align_double.c: Likewise. + * testsuite/libffi.call/cls_align_float.c: Likewise. + * testsuite/libffi.call/cls_align_longdouble.c: Likewise. + * testsuite/libffi.call/cls_align_pointer.c: Likewise. + * testsuite/libffi.call/cls_align_sint16.c: Likewise. + * testsuite/libffi.call/cls_align_sint32.c: Likewise. + * testsuite/libffi.call/cls_align_sint64.c: Likewise. + * testsuite/libffi.call/cls_align_uint16.c: Likewise. + * testsuite/libffi.call/cls_align_uint32.c: Likewise. + * testsuite/libffi.call/cls_align_uint64.c: Likewise. + * testsuite/libffi.call/cls_double.c: Likewise. + * testsuite/libffi.call/cls_float.c: Likewise. + * testsuite/libffi.call/cls_multi_schar.c: Likewise. + * testsuite/libffi.call/cls_multi_sshort.c: Likewise. + * testsuite/libffi.call/cls_multi_sshortchar.c: Likewise. + * testsuite/libffi.call/cls_multi_uchar.c: Likewise. + * testsuite/libffi.call/cls_multi_ushort.c: Likewise. + * testsuite/libffi.call/cls_multi_ushortchar.c: Likewise. + * testsuite/libffi.call/cls_schar.c: Likewise. + * testsuite/libffi.call/cls_sint.c: Likewise. + * testsuite/libffi.call/cls_sshort.c: Likewise. + * testsuite/libffi.call/cls_uchar.c: Likewise. + * testsuite/libffi.call/cls_uint.c: Likewise. + * testsuite/libffi.call/cls_ulonglong.c: Likewise. + * testsuite/libffi.call/cls_ushort.c: Likewise. + * testsuite/libffi.call/nested_struct.c: Likewise. + * testsuite/libffi.call/nested_struct1.c: Likewise. + * testsuite/libffi.call/nested_struct2.c: Likewise. + * testsuite/libffi.call/nested_struct3.c: Likewise. + * testsuite/libffi.call/problem1.c: Likewise. + * testsuite/libffi.special/unwindtest.cc: Likewise. + * testsuite/libffi.call/cls_12byte.c: Likewise and set return value + to zero. + * testsuite/libffi.call/cls_16byte.c: Likewise. + * testsuite/libffi.call/cls_5byte.c: Likewise. + +2004-08-23 David Daney + + PR libgcj/13141 + * src/mips/ffitarget.h (FFI_O32_SOFT_FLOAT): New ABI. + * src/mips/ffi.c (ffi_prep_args): Fix alignment calculation. + (ffi_prep_cif_machdep): Handle FFI_O32_SOFT_FLOAT floating point + parameters and return types. + (ffi_call): Handle FFI_O32_SOFT_FLOAT ABI. + (ffi_prep_closure): Ditto. + (ffi_closure_mips_inner_O32): Handle FFI_O32_SOFT_FLOAT ABI, fix + alignment calculations. + * src/mips/o32.S (ffi_closure_O32): Don't use floating point + instructions if FFI_O32_SOFT_FLOAT, make stack frame ABI compliant. + +2004-08-14 Casey Marshall + + * src/mips/ffi.c (ffi_pref_cif_machdep): set `cif->flags' to + contain `FFI_TYPE_UINT64' as return type for any 64-bit + integer (O32 ABI only). + (ffi_prep_closure): new function. + (ffi_closure_mips_inner_O32): new function. + * src/mips/ffitarget.h: Define `FFI_CLOSURES' and + `FFI_TRAMPOLINE_SIZE' appropriately if the ABI is o32. + * src/mips/o32.S (ffi_call_O32): add labels for .eh_frame. Return + 64 bit integers correctly. + (ffi_closure_O32): new function. + Added DWARF-2 unwind info for both functions. + +2004-08-10 Andrew Haley + + * src/x86/ffi64.c (ffi_prep_args ): 8-align all stack arguments. + +2004-08-01 Robert Millan + + * configure.ac: Detect knetbsd-gnu and kfreebsd-gnu. + * configure: Regenerate. + +2004-07-30 Maciej W. Rozycki + + * acinclude.m4 (AC_FUNC_MMAP_BLACKLIST): Check for + and mmap() explicitly instead of relying on preset autoconf cache + variables. + * aclocal.m4: Regenerate. + * configure: Regenerate. + +2004-07-11 Ulrich Weigand + + * src/s390/ffi.c (ffi_prep_args): Fix C aliasing violation. + (ffi_check_float_struct): Remove unused prototype. + +2004-06-30 Geoffrey Keating + + * src/powerpc/ffi_darwin.c (flush_icache): ';' is a comment + character on Darwin, use '\n\t' instead. + +2004-06-26 Matthias Klose + + * libtool-version: Fix typo in revision/age. + +2004-06-17 Matthias Klose + + * libtool-version: New. + * Makefile.am (libffi_la_LDFLAGS): Use -version-info for soname. + * Makefile.in: Regenerate. + +2004-06-15 Paolo Bonzini + + * Makefile.am: Remove useless multilib rules. + * Makefile.in: Regenerate. + * aclocal.m4: Regenerate with automake 1.8.5. + * configure.ac: Remove useless multilib configury. + * configure: Regenerate. + +2004-06-15 Paolo Bonzini + + * .cvsignore: New file. + +2004-06-10 Jakub Jelinek + + * src/ia64/unix.S (ffi_call_unix): Insert group barrier break + fp_done. + (ffi_closure_UNIX): Fix f14/f15 adjustment if FLOAT_SZ is ever + changed from 8. + +2004-06-06 Sean McNeil + + * configure.ac: Add x86_64-*-freebsd* support. + * configure: Regenerate. + +2004-04-26 Joe Buck + + Bug 15093 + * configure.ac: Test for existence of mmap and sys/mman.h before + checking blacklist. Fix suggested by Jim Wilson. + * configure: Regenerate. + +2004-04-26 Matt Austern + + * src/powerpc/darwin.S: Go through a non-lazy pointer for initial + FDE location. + * src/powerpc/darwin_closure.S: Likewise. + +2004-04-24 Andreas Tobler + + * testsuite/libffi.call/cls_multi_schar.c (main): Fix initialization + error. Reported by Thomas Heller . + * testsuite/libffi.call/cls_multi_sshort.c (main): Likewise. + * testsuite/libffi.call/cls_multi_ushort.c (main): Likewise. + +2004-03-20 Matthias Klose + + * src/pa/linux.S: Fix typo. + +2004-03-19 Matthias Klose + + * Makefile.am: Update. + * Makefile.in: Regenerate. + * src/pa/ffi.h.in: Remove. + * src/pa/ffitarget.h: New file. + +2004-02-10 Randolph Chung + + * Makefile.am: Add PA support. + * Makefile.in: Regenerate. + * include/Makefile.in: Regenerate. + * configure.ac: Add PA target. + * configure: Regenerate. + * src/pa/ffi.c: New file. + * src/pa/ffi.h.in: Add PA support. + * src/pa/linux.S: New file. + * prep_cif.c: Add PA support. + +2004-03-16 Hosaka Yuji + + * src/types.c: Fix alignment size of X86_WIN32 case int64 and + double. + * src/x86/ffi.c (ffi_prep_args): Replace ecif->cif->rtype->type + with ecif->cif->flags. + (ffi_call, ffi_prep_incoming_args_SYSV): Replace cif->rtype->type + with cif->flags. + (ffi_prep_cif_machdep): Add X86_WIN32 struct case. + (ffi_closure_SYSV): Add 1 or 2-bytes struct case for X86_WIN32. + * src/x86/win32.S (retstruct1b, retstruct2b, sc_retstruct1b, + sc_retstruct2b): Add for 1 or 2-bytes struct case. + +2004-03-15 Kelley Cook + + * configure.in: Rename file to ... + * configure.ac: ... this. + * fficonfig.h.in: Regenerate. + * Makefile.in: Regenerate. + * include/Makefile.in: Regenerate. + * testsuite/Makefile.in: Regenerate. + +2004-03-12 Matt Austern + + * src/powerpc/darwin.S: Fix EH information so it corresponds to + changes in EH format resulting from addition of linkonce support. + * src/powerpc/darwin_closure.S: Likewise. + +2004-03-11 Andreas Tobler + Paolo Bonzini + + * Makefile.am (AUTOMAKE_OPTIONS): Set them. + Remove VPATH. Remove rules for object files. Remove multilib support. + (AM_CCASFLAGS): Add. + * configure.in (AC_CONFIG_HEADERS): Relace AM_CONFIG_HEADER. + (AC_PREREQ): Bump version to 2.59. + (AC_INIT): Fill with version info and bug address. + (ORIGINAL_LD_FOR_MULTILIBS): Remove. + (AM_ENABLE_MULTILIB): Use this instead of AC_ARG_ENABLE. + De-precious CC so that the right flags are passed down to multilibs. + (AC_MSG_ERROR): Replace obsolete macro AC_ERROR. + (AC_CONFIG_FILES): Replace obsolete macro AC_LINK_FILES. + (AC_OUTPUT): Reorganize the output with AC_CONFIG_COMMANDS. + * configure: Rebuilt. + * aclocal.m4: Likewise. + * Makefile.in, include/Makefile.in, testsuite/Makefile.in: Likewise. + * fficonfig.h.in: Likewise. + +2004-03-11 Andreas Schwab + + * src/ia64/ffi.c (ffi_prep_incoming_args_UNIX): Get floating point + arguments from fp registers only for the first 8 parameter slots. + Don't convert a float parameter when passed in memory. + +2004-03-09 Hans-Peter Nilsson + + * configure: Regenerate for config/accross.m4 correction. + +2004-02-25 Matt Kraai + + * src/powerpc/ffi.c (ffi_prep_args_SYSV): Change + ecif->cif->bytes to bytes. + (ffi_prep_cif_machdep): Add braces around nested if statement. + +2004-02-09 Alan Modra + + * src/types.c (pointer): POWERPC64 has 8 byte pointers. + + * src/powerpc/ffi.c (ffi_prep_args64): Correct long double handling. + (ffi_closure_helper_LINUX64): Fix typo. + * testsuite/libffi.call/cls_align_longdouble.c: Pass -mlong-double-128 + for powerpc64-*-*. + * testsuite/libffi.call/float.c: Likewise. + * testsuite/libffi.call/float2.c: Likewise. + +2004-02-08 Alan Modra + + * src/powerpc/ffi.c (ffi_prep_cif_machdep ): Correct + long double function return and long double arg handling. + (ffi_closure_helper_LINUX64): Formatting. Delete unused "ng" var. + Use "end_pfr" instead of "nf". Correct long double handling. + Localise "temp". + * src/powerpc/linux64.S (ffi_call_LINUX64): Save f2 long double + return value. + * src/powerpc/linux64_closure.S (ffi_closure_LINUX64): Allocate + space for long double return value. Adjust stack frame and offsets. + Load f2 long double return. + +2004-02-07 Alan Modra + + * src/types.c: Use 16 byte long double for POWERPC64. + +2004-01-25 Eric Botcazou + + * src/sparc/ffi.c (ffi_prep_args_v9): Shift the parameter array + when the structure return address is passed in %o0. + (ffi_V9_return_struct): Rename into ffi_v9_layout_struct. + (ffi_v9_layout_struct): Align the field following a nested structure + on a word boundary. Use memmove instead of memcpy. + (ffi_call): Update call to ffi_V9_return_struct. + (ffi_prep_closure): Define 'ctx' only for V8. + (ffi_closure_sparc_inner): Clone into ffi_closure_sparc_inner_v8 + and ffi_closure_sparc_inner_v9. + (ffi_closure_sparc_inner_v8): Return long doubles by reference. + Always skip the structure return address. For structures and long + doubles, copy the argument directly. + (ffi_closure_sparc_inner_v9): Skip the structure return address only + if required. Shift the maximum floating-point slot accordingly. For + big structures, copy the argument directly; otherwise, left-justify the + argument and call ffi_v9_layout_struct to lay out the structure on + the stack. + * src/sparc/v8.S: Undef STACKFRAME before defining it. + (ffi_closure_v8): Pass the structure return address. Update call to + ffi_closure_sparc_inner_v8. Short-circuit FFI_TYPE_INT handling. + Skip the 'unimp' insn when returning long doubles and structures. + * src/sparc/v9.S: Undef STACKFRAME before defining it. + (ffi_closure_v9): Increase the frame size by 2 words. Short-circuit + FFI_TYPE_INT handling. Load structures both in integers and + floating-point registers on return. + * README: Update status of the SPARC port. + +2004-01-24 Andreas Tobler + + * testsuite/libffi.call/pyobjc-tc.c (main): Treat result value + as of type ffi_arg. + * testsuite/libffi.call/struct3.c (main): Fix CHECK. + +2004-01-22 Ulrich Weigand + + * testsuite/libffi.call/cls_uint.c (cls_ret_uint_fn): Treat result + value as of type ffi_arg, not unsigned int. + +2004-01-21 Michael Ritzert + + * ffi64.c (ffi_prep_args): Cast the RHS of an assignment instead + of the LHS. + +2004-01-12 Andreas Tobler + + * testsuite/lib/libffi-dg.exp: Set LD_LIBRARY_PATH_32 for + Solaris. + +2004-01-08 Rainer Orth + + * testsuite/libffi.call/ffitest.h (allocate_mmap): Cast MAP_FAILED + to void *. + +2003-12-10 Richard Henderson + + * testsuite/libffi.call/cls_align_pointer.c: Cast pointers to + size_t instead of int. + +2003-12-04 Hosaka Yuji + + * testsuite/libffi.call/many_win32.c: Include . + * testsuite/libffi.call/many_win32.c (main): Replace variable + int i with unsigned long ul. + + * testsuite/libffi.call/cls_align_uint64.c: New test case. + * testsuite/libffi.call/cls_align_sint64.c: Likewise. + * testsuite/libffi.call/cls_align_uint32.c: Likewise. + * testsuite/libffi.call/cls_align_sint32.c: Likewise. + * testsuite/libffi.call/cls_align_uint16.c: Likewise. + * testsuite/libffi.call/cls_align_sint16.c: Likewise. + * testsuite/libffi.call/cls_align_float.c: Likewise. + * testsuite/libffi.call/cls_align_double.c: Likewise. + * testsuite/libffi.call/cls_align_longdouble.c: Likewise. + * testsuite/libffi.call/cls_align_pointer.c: Likewise. + +2003-12-02 Hosaka Yuji + + PR other/13221 + * src/x86/ffi.c (ffi_prep_args, ffi_prep_incoming_args_SYSV): + Align arguments to 32 bits. + +2003-12-01 Andreas Tobler + + PR other/13221 + * testsuite/libffi.call/cls_multi_sshort.c: New test case. + * testsuite/libffi.call/cls_multi_sshortchar.c: Likewise. + * testsuite/libffi.call/cls_multi_uchar.c: Likewise. + * testsuite/libffi.call/cls_multi_schar.c: Likewise. + * testsuite/libffi.call/cls_multi_ushortchar.c: Likewise. + * testsuite/libffi.call/cls_multi_ushort.c: Likewise. + + * testsuite/libffi.special/unwindtest.cc: Cosmetics. + +2003-11-26 Kaveh R. Ghazi + + * testsuite/libffi.call/ffitest.h: Include . + * testsuite/libffi.special/ffitestcxx.h: Likewise. + +2003-11-22 Andreas Tobler + + * Makefile.in: Rebuilt. + * configure: Likewise. + * testsuite/libffi.special/unwindtest.cc: Convert the mmap to + the right type. + +2003-11-21 Andreas Jaeger + Andreas Tobler + + * acinclude.m4: Add AC_FUNC_MMAP_BLACKLIST. + * configure.in: Call AC_FUNC_MMAP_BLACKLIST. + * Makefile.in: Rebuilt. + * aclocal.m4: Likewise. + * configure: Likewise. + * fficonfig.h.in: Likewise. + * testsuite/lib/libffi-dg.exp: Add include dir. + * testsuite/libffi.call/ffitest.h: Add MMAP definitions. + * testsuite/libffi.special/ffitestcxx.h: Likewise. + * testsuite/libffi.call/closure_fn0.c: Use MMAP functionality + for ffi_closure if available. + * testsuite/libffi.call/closure_fn1.c: Likewise. + * testsuite/libffi.call/closure_fn2.c: Likewise. + * testsuite/libffi.call/closure_fn3.c: Likewise. + * testsuite/libffi.call/closure_fn4.c: Likewise. + * testsuite/libffi.call/closure_fn5.c: Likewise. + * testsuite/libffi.call/cls_12byte.c: Likewise. + * testsuite/libffi.call/cls_16byte.c: Likewise. + * testsuite/libffi.call/cls_18byte.c: Likewise. + * testsuite/libffi.call/cls_19byte.c: Likewise. + * testsuite/libffi.call/cls_1_1byte.c: Likewise. + * testsuite/libffi.call/cls_20byte.c: Likewise. + * testsuite/libffi.call/cls_20byte1.c: Likewise. + * testsuite/libffi.call/cls_24byte.c: Likewise. + * testsuite/libffi.call/cls_2byte.c: Likewise. + * testsuite/libffi.call/cls_3_1byte.c: Likewise. + * testsuite/libffi.call/cls_3byte1.c: Likewise. + * testsuite/libffi.call/cls_3byte2.c: Likewise. + * testsuite/libffi.call/cls_4_1byte.c: Likewise. + * testsuite/libffi.call/cls_4byte.c: Likewise. + * testsuite/libffi.call/cls_5byte.c: Likewise. + * testsuite/libffi.call/cls_64byte.c: Likewise. + * testsuite/libffi.call/cls_6byte.c: Likewise. + * testsuite/libffi.call/cls_7byte.c: Likewise. + * testsuite/libffi.call/cls_8byte.c: Likewise. + * testsuite/libffi.call/cls_9byte1.c: Likewise. + * testsuite/libffi.call/cls_9byte2.c: Likewise. + * testsuite/libffi.call/cls_double.c: Likewise. + * testsuite/libffi.call/cls_float.c: Likewise. + * testsuite/libffi.call/cls_schar.c: Likewise. + * testsuite/libffi.call/cls_sint.c: Likewise. + * testsuite/libffi.call/cls_sshort.c: Likewise. + * testsuite/libffi.call/cls_uchar.c: Likewise. + * testsuite/libffi.call/cls_uint.c: Likewise. + * testsuite/libffi.call/cls_ulonglong.c: Likewise. + * testsuite/libffi.call/cls_ushort.c: Likewise. + * testsuite/libffi.call/nested_struct.c: Likewise. + * testsuite/libffi.call/nested_struct1.c: Likewise. + * testsuite/libffi.call/nested_struct2.c: Likewise. + * testsuite/libffi.call/nested_struct3.c: Likewise. + * testsuite/libffi.call/problem1.c: Likewise. + * testsuite/libffi.special/unwindtest.cc: Likewise. + +2003-11-20 Andreas Tobler + + * testsuite/lib/libffi-dg.exp: Make the -lgcc_s conditional. + +2003-11-19 Andreas Tobler + + * testsuite/lib/libffi-dg.exp: Add DYLD_LIBRARY_PATH for darwin. + Add -lgcc_s to additional flags. + +2003-11-12 Andreas Tobler + + * configure.in, include/Makefile.am: PR libgcj/11147, install + the ffitarget.h header file in a gcc versioned and target + dependent place. + * configure: Regenerated. + * Makefile.in, include/Makefile.in: Likewise. + * testsuite/Makefile.in: Likewise. + +2003-11-09 Andreas Tobler + + * testsuite/libffi.call/closure_fn0.c: Print result and check + with dg-output to make debugging easier. + * testsuite/libffi.call/closure_fn1.c: Likewise. + * testsuite/libffi.call/closure_fn2.c: Likewise. + * testsuite/libffi.call/closure_fn3.c: Likewise. + * testsuite/libffi.call/closure_fn4.c: Likewise. + * testsuite/libffi.call/closure_fn5.c: Likewise. + * testsuite/libffi.call/cls_12byte.c: Likewise. + * testsuite/libffi.call/cls_16byte.c: Likewise. + * testsuite/libffi.call/cls_18byte.c: Likewise. + * testsuite/libffi.call/cls_19byte.c: Likewise. + * testsuite/libffi.call/cls_1_1byte.c: Likewise. + * testsuite/libffi.call/cls_20byte.c: Likewise. + * testsuite/libffi.call/cls_20byte1.c: Likewise. + * testsuite/libffi.call/cls_24byte.c: Likewise. + * testsuite/libffi.call/cls_2byte.c: Likewise. + * testsuite/libffi.call/cls_3_1byte.c: Likewise. + * testsuite/libffi.call/cls_3byte1.c: Likewise. + * testsuite/libffi.call/cls_3byte2.c: Likewise. + * testsuite/libffi.call/cls_4_1byte.c: Likewise. + * testsuite/libffi.call/cls_4byte.c: Likewise. + * testsuite/libffi.call/cls_5byte.c: Likewise. + * testsuite/libffi.call/cls_64byte.c: Likewise. + * testsuite/libffi.call/cls_6byte.c: Likewise. + * testsuite/libffi.call/cls_7byte.c: Likewise. + * testsuite/libffi.call/cls_8byte.c: Likewise. + * testsuite/libffi.call/cls_9byte1.c: Likewise. + * testsuite/libffi.call/cls_9byte2.c: Likewise. + * testsuite/libffi.call/cls_double.c: Likewise. + * testsuite/libffi.call/cls_float.c: Likewise. + * testsuite/libffi.call/cls_schar.c: Likewise. + * testsuite/libffi.call/cls_sint.c: Likewise. + * testsuite/libffi.call/cls_sshort.c: Likewise. + * testsuite/libffi.call/cls_uchar.c: Likewise. + * testsuite/libffi.call/cls_uint.c: Likewise. + * testsuite/libffi.call/cls_ulonglong.c: Likewise. + * testsuite/libffi.call/cls_ushort.c: Likewise. + * testsuite/libffi.call/problem1.c: Likewise. + + * testsuite/libffi.special/unwindtest.cc: Make ffi_closure + static. + +2003-11-08 Andreas Tobler + + * testsuite/libffi.call/cls_9byte2.c: New test case. + * testsuite/libffi.call/cls_9byte1.c: Likewise. + * testsuite/libffi.call/cls_64byte.c: Likewise. + * testsuite/libffi.call/cls_20byte1.c: Likewise. + * testsuite/libffi.call/cls_19byte.c: Likewise. + * testsuite/libffi.call/cls_18byte.c: Likewise. + * testsuite/libffi.call/closure_fn4.c: Likewise. + * testsuite/libffi.call/closure_fn5.c: Likewise. + * testsuite/libffi.call/cls_schar.c: Likewise. + * testsuite/libffi.call/cls_sint.c: Likewise. + * testsuite/libffi.call/cls_sshort.c: Likewise. + * testsuite/libffi.call/nested_struct2.c: Likewise. + * testsuite/libffi.call/nested_struct3.c: Likewise. + +2003-11-08 Andreas Tobler + + * testsuite/libffi.call/cls_double.c: Do a check on the result. + * testsuite/libffi.call/cls_uchar.c: Likewise. + * testsuite/libffi.call/cls_uint.c: Likewise. + * testsuite/libffi.call/cls_ulonglong.c: Likewise. + * testsuite/libffi.call/cls_ushort.c: Likewise. + * testsuite/libffi.call/return_sc.c: Cleanup whitespaces. + +2003-11-06 Andreas Tobler + + * src/prep_cif.c (ffi_prep_cif): Move the validity check after + the initialization. + +2003-10-23 Andreas Tobler + + * src/java_raw_api.c (ffi_java_ptrarray_to_raw): Replace + FFI_ASSERT(FALSE) with FFI_ASSERT(0). + +2003-10-22 David Daney + + * src/mips/ffitarget.h: Replace undefined UINT32 and friends with + __attribute__((__mode__(__SI__))) and friends. + +2003-10-22 Andreas Schwab + + * src/ia64/ffi.c: Replace FALSE/TRUE with false/true. + +2003-10-21 Andreas Tobler + + * configure.in: AC_LINK_FILES(ffitarget.h). + * configure: Regenerate. + * Makefile.in: Likewise. + * include/Makefile.in: Likewise. + * testsuite/Makefile.in: Likewise. + * fficonfig.h.in: Likewise. + +2003-10-21 Paolo Bonzini + Richard Henderson + + Avoid that ffi.h includes fficonfig.h. + + * Makefile.am (EXTRA_DIST): Include ffitarget.h files + (TARGET_SRC_MIPS_GCC): Renamed to TARGET_SRC_MIPS_IRIX. + (TARGET_SRC_MIPS_SGI): Removed. + (MIPS_GCC): Renamed to TARGET_SRC_MIPS_IRIX. + (MIPS_SGI): Removed. + (CLEANFILES): Removed. + (mostlyclean-am, clean-am, mostlyclean-sub, clean-sub): New + targets. + * acconfig.h: Removed. + * configure.in: Compute sizeofs only for double and long double. + Use them to define and subst HAVE_LONG_DOUBLE. Include comments + into AC_DEFINE instead of using acconfig.h. Create + include/ffitarget.h instead of include/fficonfig.h. Rename + MIPS_GCC to MIPS_IRIX, drop MIPS_SGI since we are in gcc's tree. + AC_DEFINE EH_FRAME_FLAGS. + * include/Makefile.am (DISTCLEANFILES): New automake macro. + (hack_DATA): Add ffitarget.h. + * include/ffi.h.in: Remove all system specific definitions. + Declare raw API even if it is not installed, why bother? + Use limits.h instead of SIZEOF_* to define ffi_type_*. Do + not define EH_FRAME_FLAGS, it is in fficonfig.h now. Include + ffitarget.h instead of fficonfig.h. Remove ALIGN macro. + (UINT_ARG, INT_ARG): Removed, use ffi_arg and ffi_sarg instead. + * include/ffi_common.h (bool): Do not define. + (ffi_assert): Accept failed assertion. + (ffi_type_test): Return void and accept file/line. + (FFI_ASSERT): Pass stringized failed assertion. + (FFI_ASSERT_AT): New macro. + (FFI_ASSERT_VALID_TYPE): New macro. + (UINT8, SINT8, UINT16, SINT16, UINT32, SINT32, + UINT64, SINT64): Define here with gcc's __attribute__ macro + instead of in ffi.h + (FLOAT32, ALIGN): Define here instead of in ffi.h + * include/ffi-mips.h: Removed. Its content moved to + src/mips/ffitarget.h after separating assembly and C sections. + * src/alpha/ffi.c, src/alpha/ffi.c, src/java_raw_api.c + src/prep_cif.c, src/raw_api.c, src/ia64/ffi.c, + src/mips/ffi.c, src/mips/n32.S, src/mips/o32.S, + src/mips/ffitarget.h, src/sparc/ffi.c, src/x86/ffi64.c: + SIZEOF_ARG -> FFI_SIZEOF_ARG. + * src/ia64/ffi.c: Include stdbool.h (provided by GCC 2.95+). + * src/debug.c (ffi_assert): Accept stringized failed assertion. + (ffi_type_test): Rewritten. + * src/prep-cif.c (initialize_aggregate, ffi_prep_cif): Call + FFI_ASSERT_VALID_TYPE. + * src/alpha/ffitarget.h, src/arm/ffitarget.h, + src/ia64/ffitarget.h, src/m68k/ffitarget.h, + src/mips/ffitarget.h, src/powerpc/ffitarget.h, + src/s390/ffitarget.h, src/sh/ffitarget.h, + src/sh64/ffitarget.h, src/sparc/ffitarget.h, + src/x86/ffitarget.h: New files. + * src/alpha/osf.S, src/arm/sysv.S, src/ia64/unix.S, + src/m68k/sysv.S, src/mips/n32.S, src/mips/o32.S, + src/powerpc/aix.S, src/powerpc/darwin.S, + src/powerpc/ffi_darwin.c, src/powerpc/linux64.S, + src/powerpc/linux64_closure.S, src/powerpc/ppc_closure.S, + src/powerpc/sysv.S, src/s390/sysv.S, src/sh/sysv.S, + src/sh64/sysv.S, src/sparc/v8.S, src/sparc/v9.S, + src/x86/sysv.S, src/x86/unix64.S, src/x86/win32.S: + include fficonfig.h + +2003-10-20 Rainer Orth + + * src/mips/ffi.c: Use _ABIN32, _ABIO32 instead of external + _MIPS_SIM_NABI32, _MIPS_SIM_ABI32. + +2003-10-19 Andreas Tobler + + * src/powerpc/ffi_darwin.c (ffi_prep_args): Declare bytes again. + Used when FFI_DEBUG = 1. + +2003-10-14 Alan Modra + + * src/types.c (double, longdouble): Default POWERPC64 to 8 byte size + and align. + +2003-10-06 Rainer Orth + + * include/ffi_mips.h: Define FFI_MIPS_N32 for N32/N64 ABIs, + FFI_MIPS_O32 for O32 ABI. + +2003-10-01 Andreas Tobler + + * testsuite/lib/libffi-dg.exp: Set LD_LIBRARY_PATH_64 for + SPARC64. Cleanup whitespaces. + +2003-09-19 Andreas Tobler + + * testsuite/libffi.call/closure_fn0.c: Xfail mips, arm, + strongarm, xscale. Cleanup whitespaces. + * testsuite/libffi.call/closure_fn1.c: Likewise. + * testsuite/libffi.call/closure_fn2.c: Likewise. + * testsuite/libffi.call/closure_fn3.c: Likewise. + * testsuite/libffi.call/cls_12byte.c: Likewise. + * testsuite/libffi.call/cls_16byte.c: Likewise. + * testsuite/libffi.call/cls_1_1byte.c: Likewise. + * testsuite/libffi.call/cls_20byte.c: Likewise. + * testsuite/libffi.call/cls_24byte.c: Likewise. + * testsuite/libffi.call/cls_2byte.c: Likewise. + * testsuite/libffi.call/cls_3_1byte.c: Likewise. + * testsuite/libffi.call/cls_3byte1.c: Likewise. + * testsuite/libffi.call/cls_3byte2.c: Likewise. + * testsuite/libffi.call/cls_4_1byte.c: Likewise. + * testsuite/libffi.call/cls_4byte.c: Likewise. + * testsuite/libffi.call/cls_5byte.c: Likewise. + * testsuite/libffi.call/cls_6byte.c: Likewise. + * testsuite/libffi.call/cls_7byte.c: Likewise. + * testsuite/libffi.call/cls_8byte.c: Likewise. + * testsuite/libffi.call/cls_double.c: Likewise. + * testsuite/libffi.call/cls_float.c: Likewise. + * testsuite/libffi.call/cls_uchar.c: Likewise. + * testsuite/libffi.call/cls_uint.c: Likewise. + * testsuite/libffi.call/cls_ulonglong.c: Likewise. + * testsuite/libffi.call/cls_ushort.c: Likewise. + * testsuite/libffi.call/nested_struct.c: Likewise. + * testsuite/libffi.call/nested_struct1.c: Likewise. + * testsuite/libffi.call/problem1.c: Likewise. + * testsuite/libffi.special/unwindtest.cc: Likewise. + * testsuite/libffi.call/pyobjc-tc.c: Cleanup whitespaces. + +2003-09-18 David Edelsohn + + * src/powerpc/aix.S: Cleanup whitespaces. + * src/powerpc/aix_closure.S: Likewise. + +2003-09-18 Andreas Tobler + + * src/powerpc/darwin.S: Cleanup whitespaces, comment formatting. + * src/powerpc/darwin_closure.S: Likewise. + * src/powerpc/ffi_darwin.c: Likewise. + +2003-09-18 Andreas Tobler + David Edelsohn + + * src/types.c (double): Add AIX and Darwin to the right TYPEDEF. + * src/powerpc/aix_closure.S: Remove the pointer to the outgoing + parameter stack. + * src/powerpc/darwin_closure.S: Likewise. + * src/powerpc/ffi_darwin.c (ffi_prep_args): Handle structures + according to the Darwin/AIX ABI. + (ffi_prep_cif_machdep): Likewise. + (ffi_closure_helper_DARWIN): Likewise. + Remove the outgoing parameter stack logic. Simplify the evaluation + of the different CASE types. + (ffi_prep_clousure): Avoid the casts on lvalues. Change the branch + statement in the trampoline code. + +2003-09-18 Kaz Kojima + + * src/sh/ffi.c (ffi_prep_args): Take account into the alignement + for the register size. + (ffi_closure_helper_SYSV): Handle the structure return value + address correctly. + (ffi_closure_helper_SYSV): Return the appropriate type when + the registers are used for the structure return value. + * src/sh/sysv.S (ffi_closure_SYSV): Fix the stack layout for + the 64-bit return value. Update copyright years. + +2003-09-17 Rainer Orth + + * testsuite/lib/libffi-dg.exp (libffi_target_compile): Search in + srcdir for ffi_mips.h. + +2003-09-12 Alan Modra + + * src/prep_cif.c (initialize_aggregate): Include tail padding in + structure size. + * src/powerpc/linux64_closure.S (ffi_closure_LINUX64): Correct + placement of float result. + * testsuite/libffi.special/unwindtest.cc (closure_test_fn1): Correct + cast of "resp" for big-endian 64 bit machines. + +2003-09-11 Alan Modra + + * src/types.c (double, longdouble): Merge identical SH and ARM + typedefs, and add POWERPC64. + * src/powerpc/ffi.c (ffi_prep_args64): Correct next_arg calc for + struct split over gpr and rest. + (ffi_prep_cif_machdep): Correct intarg_count for structures. + * src/powerpc/linux64.S (ffi_call_LINUX64): Fix gpr offsets. + +2003-09-09 Andreas Tobler + + * src/powerpc/ffi.c (ffi_closure_helper_SYSV) Handle struct + passing correctly. + +2003-09-09 Alan Modra + + * configure: Regenerate. + +2003-09-04 Andreas Tobler + + * Makefile.am: Remove build rules for ffitest. + * Makefile.in: Rebuilt. + +2003-09-04 Andreas Tobler + + * src/java_raw_api.c: Include to fix compiler warning + about implicit declaration of abort(). + +2003-09-04 Andreas Tobler + + * Makefile.am: Add dejagnu test framework. Fixes PR other/11411. + * Makefile.in: Rebuilt. + * configure.in: Add dejagnu test framework. + * configure: Rebuilt. + + * testsuite/Makefile.am: New file. + * testsuite/Makefile.in: Built + * testsuite/lib/libffi-dg.exp: New file. + * testsuite/config/default.exp: Likewise. + * testsuite/libffi.call/call.exp: Likewise. + * testsuite/libffi.call/ffitest.h: Likewise. + * testsuite/libffi.call/closure_fn0.c: Likewise. + * testsuite/libffi.call/closure_fn1.c: Likewise. + * testsuite/libffi.call/closure_fn2.c: Likewise. + * testsuite/libffi.call/closure_fn3.c: Likewise. + * testsuite/libffi.call/cls_1_1byte.c: Likewise. + * testsuite/libffi.call/cls_3_1byte.c: Likewise. + * testsuite/libffi.call/cls_4_1byte.c: Likewise. + * testsuite/libffi.call/cls_2byte.c: Likewise. + * testsuite/libffi.call/cls_3byte1.c: Likewise. + * testsuite/libffi.call/cls_3byte2.c: Likewise. + * testsuite/libffi.call/cls_4byte.c: Likewise. + * testsuite/libffi.call/cls_5byte.c: Likewise. + * testsuite/libffi.call/cls_6byte.c: Likewise. + * testsuite/libffi.call/cls_7byte.c: Likewise. + * testsuite/libffi.call/cls_8byte.c: Likewise. + * testsuite/libffi.call/cls_12byte.c: Likewise. + * testsuite/libffi.call/cls_16byte.c: Likewise. + * testsuite/libffi.call/cls_20byte.c: Likewise. + * testsuite/libffi.call/cls_24byte.c: Likewise. + * testsuite/libffi.call/cls_double.c: Likewise. + * testsuite/libffi.call/cls_float.c: Likewise. + * testsuite/libffi.call/cls_uchar.c: Likewise. + * testsuite/libffi.call/cls_uint.c: Likewise. + * testsuite/libffi.call/cls_ulonglong.c: Likewise. + * testsuite/libffi.call/cls_ushort.c: Likewise. + * testsuite/libffi.call/float.c: Likewise. + * testsuite/libffi.call/float1.c: Likewise. + * testsuite/libffi.call/float2.c: Likewise. + * testsuite/libffi.call/many.c: Likewise. + * testsuite/libffi.call/many_win32.c: Likewise. + * testsuite/libffi.call/nested_struct.c: Likewise. + * testsuite/libffi.call/nested_struct1.c: Likewise. + * testsuite/libffi.call/pyobjc-tc.c: Likewise. + * testsuite/libffi.call/problem1.c: Likewise. + * testsuite/libffi.call/promotion.c: Likewise. + * testsuite/libffi.call/return_ll.c: Likewise. + * testsuite/libffi.call/return_sc.c: Likewise. + * testsuite/libffi.call/return_uc.c: Likewise. + * testsuite/libffi.call/strlen.c: Likewise. + * testsuite/libffi.call/strlen_win32.c: Likewise. + * testsuite/libffi.call/struct1.c: Likewise. + * testsuite/libffi.call/struct2.c: Likewise. + * testsuite/libffi.call/struct3.c: Likewise. + * testsuite/libffi.call/struct4.c: Likewise. + * testsuite/libffi.call/struct5.c: Likewise. + * testsuite/libffi.call/struct6.c: Likewise. + * testsuite/libffi.call/struct7.c: Likewise. + * testsuite/libffi.call/struct8.c: Likewise. + * testsuite/libffi.call/struct9.c: Likewise. + * testsuite/libffi.special/special.exp: New file. + * testsuite/libffi.special/ffitestcxx.h: Likewise. + * testsuite/libffi.special/unwindtest.cc: Likewise. + + +2003-08-13 Kaz Kojima + + * src/sh/ffi.c (OFS_INT16): Set 0 for little endian case. Update + copyright years. + +2003-08-02 Alan Modra + + * src/powerpc/ffi.c (ffi_prep_args64): Modify for changed gcc + structure passing. + (ffi_closure_helper_LINUX64): Likewise. + * src/powerpc/linux64.S: Remove code writing to parm save area. + * src/powerpc/linux64_closure.S (ffi_closure_LINUX64): Use return + address in lr from ffi_closure_helper_LINUX64 call to calculate + table address. Optimize function tail. + +2003-07-28 Andreas Tobler + + * src/sparc/ffi.c: Handle all floating point registers. + * src/sparc/v9.S: Likewise. Fixes second part of PR target/11410. + +2003-07-11 Gerald Pfeifer + + * README: Note that libffi is not part of GCC. Update the project + URL and status. + +2003-06-19 Franz Sirl + + * src/powerpc/ppc_closure.S: Include ffi.h. + +2003-06-13 Rainer Orth + + * src/x86/sysv.S: Avoid gas-only .uleb128/.sleb128 directives. + Use C style comments. + +2003-06-13 Kaz Kojima + + * Makefile.am: Add SHmedia support. Fix a typo of SH support. + * Makefile.in: Regenerate. + * configure.in (sh64-*-linux*, sh5*-*-linux*): Add target. + * configure: Regenerate. + * include/ffi.h.in: Add SHmedia support. + * src/sh64/ffi.c: New file. + * src/sh64/sysv.S: New file. + +2003-05-16 Jakub Jelinek + + * configure.in (HAVE_RO_EH_FRAME): Check whether .eh_frame section + should be read-only. + * configure: Rebuilt. + * fficonfig.h.in: Rebuilt. + * include/ffi.h.in (EH_FRAME_FLAGS): Define. + * src/alpha/osf.S: Use EH_FRAME_FLAGS. + * src/powerpc/linux64.S: Likewise. + * src/powerpc/linux64_closure.S: Likewise. Include ffi.h. + * src/powerpc/sysv.S: Use EH_FRAME_FLAGS. Use pcrel encoding + if -fpic/-fPIC/-mrelocatable. + * src/powerpc/powerpc_closure.S: Likewise. + * src/sparc/v8.S: If HAVE_RO_EH_FRAME is defined, don't include + #write in .eh_frame flags. + * src/sparc/v9.S: Likewise. + * src/x86/unix64.S: Use EH_FRAME_FLAGS. + * src/x86/sysv.S: Likewise. Use pcrel encoding if -fpic/-fPIC. + * src/s390/sysv.S: Use EH_FRAME_FLAGS. Include ffi.h. + +2003-05-07 Jeff Sturm + + Fixes PR bootstrap/10656 + * configure.in (HAVE_AS_REGISTER_PSEUDO_OP): Test assembler + support for .register pseudo-op. + * src/sparc/v8.S: Use it. + * fficonfig.h.in: Rebuilt. + * configure: Rebuilt. + +2003-04-18 Jakub Jelinek + + * include/ffi.h.in (POWERPC64): Define if 64-bit. + (enum ffi_abi): Add FFI_LINUX64 on POWERPC. + Make it the default on POWERPC64. + (FFI_TRAMPOLINE_SIZE): Define to 24 on POWERPC64. + * configure.in: Change powerpc-*-linux* into powerpc*-*-linux*. + * configure: Rebuilt. + * src/powerpc/ffi.c (hidden): Define. + (ffi_prep_args_SYSV): Renamed from + ffi_prep_args. Cast pointers to unsigned long to shut up warnings. + (NUM_GPR_ARG_REGISTERS64, NUM_FPR_ARG_REGISTERS64, + ASM_NEEDS_REGISTERS64): New. + (ffi_prep_args64): New function. + (ffi_prep_cif_machdep): Handle FFI_LINUX64 ABI. + (ffi_call): Likewise. + (ffi_prep_closure): Likewise. + (flush_icache): Surround by #ifndef POWERPC64. + (ffi_dblfl): New union type. + (ffi_closure_helper_SYSV): Use it to avoid aliasing problems. + (ffi_closure_helper_LINUX64): New function. + * src/powerpc/ppc_closure.S: Surround whole file by #ifndef + __powerpc64__. + * src/powerpc/sysv.S: Likewise. + (ffi_call_SYSV): Rename ffi_prep_args to ffi_prep_args_SYSV. + * src/powerpc/linux64.S: New file. + * src/powerpc/linux64_closure.S: New file. + * Makefile.am (EXTRA_DIST): Add src/powerpc/linux64.S and + src/powerpc/linux64_closure.S. + (TARGET_SRC_POWERPC): Likewise. + + * src/ffitest.c (closure_test_fn, closure_test_fn1, closure_test_fn2, + closure_test_fn3): Fix result printing on big-endian 64-bit + machines. + (main): Print tst2_arg instead of uninitialized tst2_result. + + * src/ffitest.c (main): Hide what closure pointer really points to + from the compiler. + +2003-04-16 Richard Earnshaw + + * configure.in (arm-*-netbsdelf*): Add configuration. + (configure): Regenerated. + +2003-04-04 Loren J. Rittle + + * include/Makefile.in: Regenerate. + +2003-03-21 Zdenek Dvorak + + * libffi/include/ffi.h.in: Define X86 instead of X86_64 in 32 + bit mode. + * libffi/src/x86/ffi.c (ffi_closure_SYSV, ffi_closure_raw_SYSV): + Receive closure pointer through parameter, read args using + __builtin_dwarf_cfa. + (FFI_INIT_TRAMPOLINE): Send closure reference through eax. + +2003-03-12 Andreas Schwab + + * configure.in: Avoid trailing /. in toolexeclibdir. + * configure: Rebuilt. + +2003-03-03 Andreas Tobler + + * src/powerpc/darwin_closure.S: Recode to fit dynamic libraries. + +2003-02-06 Andreas Tobler + + * libffi/src/powerpc/darwin_closure.S: + Fix alignement bug, allocate 8 bytes for the result. + * libffi/src/powerpc/aix_closure.S: + Likewise. + * libffi/src/powerpc/ffi_darwin.c: + Update stackframe description for aix/darwin_closure.S. + +2003-02-06 Jakub Jelinek + + * src/s390/ffi.c (ffi_closure_helper_SYSV): Add hidden visibility + attribute. + +2003-01-31 Christian Cornelssen , + Andreas Schwab + + * configure.in: Adjust command to source config-ml.in to account + for changes to the libffi_basedir definition. + (libffi_basedir): Remove ${srcdir} from value and include trailing + slash if nonempty. + + * configure: Regenerate. + +2003-01-29 Franz Sirl + + * src/powerpc/ppc_closure.S: Recode to fit shared libs. + +2003-01-28 Andrew Haley + + * include/ffi.h.in: Enable FFI_CLOSURES for x86_64. + * src/x86/ffi64.c (ffi_prep_closure): New. + (ffi_closure_UNIX64_inner): New. + * src/x86/unix64.S (ffi_closure_UNIX64): New. + +2003-01-27 Alexandre Oliva + + * configure.in (toolexecdir, toolexeclibdir): Set and AC_SUBST. + Remove USE_LIBDIR conditional. + * Makefile.am (toolexecdir, toolexeclibdir): Don't override. + * Makefile.in, configure: Rebuilt. + +2003-01027 David Edelsohn + + * Makefile.am (TARGET_SRC_POWERPC_AIX): Fix typo. + * Makefile.in: Regenerate. + +2003-01-22 Andrew Haley + + * src/powerpc/darwin.S (_ffi_call_AIX): Add Augmentation size to + unwind info. + +2003-01-21 Andreas Tobler + + * src/powerpc/darwin.S: Add unwind info. + * src/powerpc/darwin_closure.S: Likewise. + +2003-01-14 Andrew Haley + + * src/x86/ffi64.c (ffi_prep_args): Check for void retval. + (ffi_prep_cif_machdep): Likewise. + * src/x86/unix64.S: Add unwind info. + +2003-01-14 Andreas Jaeger + + * src/ffitest.c (main): Only use ffi_closures if those are + supported. + +2003-01-13 Andreas Tobler + + * libffi/src/ffitest.c + add closure testcases + +2003-01-13 Kevin B. Hendricks + + * libffi/src/powerpc/ffi.c + fix alignment bug for float (4 byte aligned iso 8 byte) + +2003-01-09 Geoffrey Keating + + * src/powerpc/ffi_darwin.c: Remove RCS version string. + * src/powerpc/darwin.S: Remove RCS version string. + +2003-01-03 Jeff Sturm + + * include/ffi.h.in: Add closure defines for SPARC, SPARC64. + * src/ffitest.c (main): Use static storage for closure. + * src/sparc/ffi.c (ffi_prep_closure, ffi_closure_sparc_inner): New. + * src/sparc/v8.S (ffi_closure_v8): New. + * src/sparc/v9.S (ffi_closure_v9): New. + +2002-11-10 Ranjit Mathew + + * include/ffi.h.in: Added FFI_STDCALL ffi_type + enumeration for X86_WIN32. + * src/x86/win32.S: Added ffi_call_STDCALL function + definition. + * src/x86/ffi.c (ffi_call/ffi_raw_call): Added + switch cases for recognising FFI_STDCALL and + calling ffi_call_STDCALL if target is X86_WIN32. + * src/ffitest.c (my_stdcall_strlen/stdcall_many): + stdcall versions of the "my_strlen" and "many" + test functions (for X86_WIN32). + Added test cases to test stdcall invocation using + these functions. + +2002-12-02 Kaz Kojima + + * src/sh/sysv.S: Add DWARF2 unwind info. + +2002-11-27 Ulrich Weigand + + * src/s390/sysv.S (.eh_frame section): Make section read-only. + +2002-11-26 Jim Wilson + + * src/types.c (FFI_TYPE_POINTER): Has size 8 on IA64. + +2002-11-23 H.J. Lu + + * acinclude.m4: Add dummy AM_PROG_LIBTOOL. + Include ../config/accross.m4. + * aclocal.m4; Rebuild. + * configure: Likewise. + +2002-11-15 Ulrich Weigand + + * src/s390/sysv.S (.eh_frame section): Adapt to pcrel FDE encoding. + +2002-11-11 DJ Delorie + + * configure.in: Look for common files in the right place. + +2002-10-08 Ulrich Weigand + + * src/java_raw_api.c (ffi_java_raw_to_ptrarray): Interpret + raw data as _Jv_word values, not ffi_raw. + (ffi_java_ptrarray_to_raw): Likewise. + (ffi_java_rvalue_to_raw): New function. + (ffi_java_raw_call): Call it. + (ffi_java_raw_to_rvalue): New function. + (ffi_java_translate_args): Call it. + * src/ffitest.c (closure_test_fn): Interpret return value + as ffi_arg, not int. + * src/s390/ffi.c (ffi_prep_cif_machdep): Add missing + FFI_TYPE_POINTER case. + (ffi_closure_helper_SYSV): Likewise. Also, assume return + values extended to word size. + +2002-10-02 Andreas Jaeger + + * src/x86/ffi64.c (ffi_prep_cif_machdep): Remove debug output. + +2002-10-01 Bo Thorsen + + * include/ffi.h.in: Fix i386 win32 compilation. + +2002-09-30 Ulrich Weigand + + * configure.in: Add s390x-*-linux-* target. + * configure: Regenerate. + * include/ffi.h.in: Define S390X for s390x targets. + (FFI_CLOSURES): Define for s390/s390x. + (FFI_TRAMPOLINE_SIZE): Likewise. + (FFI_NATIVE_RAW_API): Likewise. + * src/prep_cif.c (ffi_prep_cif): Do not compute stack space for s390. + * src/types.c (FFI_TYPE_POINTER): Use 8-byte pointers on s390x. + * src/s390/ffi.c: Major rework of existing code. Add support for + s390x targets. Add closure support. + * src/s390/sysv.S: Likewise. + +2002-09-29 Richard Earnshaw + + * src/arm/sysv.S: Fix typo. + +2002-09-28 Richard Earnshaw + + * src/arm/sysv.S: If we don't have machine/asm.h and the pre-processor + has defined __USER_LABEL_PREFIX__, then use it in CNAME. + (ffi_call_SYSV): Handle soft-float. + +2002-09-27 Bo Thorsen + + * include/ffi.h.in: Fix multilib x86-64 support. + +2002-09-22 Kaveh R. Ghazi + + * Makefile.am (all-multi): Fix multilib parallel build. + +2002-07-19 Kaz Kojima + + * configure.in (sh[34]*-*-linux*): Add brackets. + * configure: Regenerate. + +2002-07-18 Kaz Kojima + + * Makefile.am: Add SH support. + * Makefile.in: Regenerate. + * configure.in (sh-*-linux*, sh[34]*-*-linux*): Add target. + * configure: Regenerate. + * include/ffi.h.in: Add SH support. + * src/sh/ffi.c: New file. + * src/sh/sysv.S: New file. + * src/types.c: Add SH support. + +2002-07-16 Bo Thorsen + + * src/x86/ffi64.c: New file that adds x86-64 support. + * src/x86/unix64.S: New file that handles argument setup for + x86-64. + * src/x86/sysv.S: Don't use this on x86-64. + * src/x86/ffi.c: Don't use this on x86-64. + Remove unused vars. + * src/prep_cif.c (ffi_prep_cif): Don't do stack size calculation + for x86-64. + * src/ffitest.c (struct6): New test that tests a special case in + the x86-64 ABI. + (struct7): Likewise. + (struct8): Likewise. + (struct9): Likewise. + (closure_test_fn): Silence warning about this when it's not used. + (main): Add the new tests. + (main): Fix a couple of wrong casts and silence some compiler warnings. + * include/ffi.h.in: Add x86-64 ABI definition. + * fficonfig.h.in: Regenerate. + * Makefile.am: Add x86-64 support. + * configure.in: Likewise. + * Makefile.in: Regenerate. + * configure: Likewise. + +2002-06-24 Bo Thorsen + + * src/types.c: Merge settings for similar architectures. + Add x86-64 sizes and alignments. + +2002-06-23 Bo Thorsen + + * src/arm/ffi.c (ffi_prep_args): Remove unused vars. + * src/sparc/ffi.c (ffi_prep_args_v8): Likewise. + * src/mips/ffi.c (ffi_prep_args): Likewise. + * src/m68k/ffi.c (ffi_prep_args): Likewise. + +2002-07-18 H.J. Lu (hjl at gnu.org) + + * Makefile.am (TARGET_SRC_MIPS_LINUX): New. + (libffi_la_SOURCES): Support MIPS_LINUX. + (libffi_convenience_la_SOURCES): Likewise. + * Makefile.in: Regenerated. + + * configure.in (mips64*-*): Skip. + (mips*-*-linux*): New. + * configure: Regenerated. + + * src/mips/ffi.c: Include . + +2002-06-06 Ulrich Weigand + + * src/s390/sysv.S: Save/restore %r6. Add DWARF-2 unwind info. + +2002-05-27 Roger Sayle + + * src/x86/ffi.c (ffi_prep_args): Remove reference to avn. + +2002-05-27 Bo Thorsen + + * src/x86/ffi.c (ffi_prep_args): Remove unused variable and + fix formatting. + +2002-05-13 Andreas Tobler + + * src/powerpc/ffi_darwin.c (ffi_prep_closure): Declare fd at + beginning of function (for older apple cc). + +2002-05-08 Alexandre Oliva + + * configure.in (ORIGINAL_LD_FOR_MULTILIBS): Preserve LD at + script entry, and set LD to it when configuring multilibs. + * configure: Rebuilt. + +2002-05-05 Jason Thorpe + + * configure.in (sparc64-*-netbsd*): Add target. + (sparc-*-netbsdelf*): Likewise. + * configure: Regenerate. + +2002-04-28 David S. Miller + + * configure.in, configure: Fix SPARC test in previous change. + +2002-04-29 Gerhard Tonn + + * Makefile.am: Add Linux for S/390 support. + * Makefile.in: Regenerate. + * configure.in: Add Linux for S/390 support. + * configure: Regenerate. + * include/ffi.h.in: Add Linux for S/390 support. + * src/s390/ffi.c: New file from libffi CVS tree. + * src/s390/sysv.S: New file from libffi CVS tree. + +2002-04-28 Jakub Jelinek + + * configure.in (HAVE_AS_SPARC_UA_PCREL): Check for working + %r_disp32(). + * src/sparc/v8.S: Use it. + * src/sparc/v9.S: Likewise. + * fficonfig.h.in: Rebuilt. + * configure: Rebuilt. + +2002-04-08 Hans Boehm + + * src/java_raw_api.c (ffi_java_raw_size): Handle FFI_TYPE_DOUBLE + correctly. + * src/ia64/unix.S: Add unwind information. Fix comments. + Save sp in a way that's compatible with unwind info. + (ffi_call_unix): Correctly restore sp in all cases. + * src/ia64/ffi.c: Add, fix comments. + +2002-04-08 Jakub Jelinek + + * src/sparc/v8.S: Make .eh_frame dependent on target word size. + +2002-04-06 Jason Thorpe + + * configure.in (alpha*-*-netbsd*): Add target. + * configure: Regenerate. + +2002-04-04 Jeff Sturm + + * src/sparc/v8.S: Add unwind info. + * src/sparc/v9.S: Likewise. + +2002-03-30 Krister Walfridsson + + * configure.in: Enable i*86-*-netbsdelf*. + * configure: Rebuilt. + +2002-03-29 David Billinghurst + + PR other/2620 + * src/mips/n32.s: Delete + * src/mips/o32.s: Delete + +2002-03-21 Loren J. Rittle + + * configure.in: Enable alpha*-*-freebsd*. + * configure: Rebuilt. + +2002-03-17 Bryce McKinlay + + * Makefile.am: libfficonvenience -> libffi_convenience. + * Makefile.in: Rebuilt. + + * Makefile.am: Define ffitest_OBJECTS. + * Makefile.in: Rebuilt. + +2002-03-07 Andreas Tobler + David Edelsohn + + * Makefile.am (EXTRA_DIST): Add Darwin and AIX closure files. + (TARGET_SRC_POWERPC_AIX): Add aix_closure.S. + (TARGET_SRC_POWERPC_DARWIN): Add darwin_closure.S. + * Makefile.in: Regenerate. + * include/ffi.h.in: Add AIX and Darwin closure definitions. + * src/powerpc/ffi_darwin.c (ffi_prep_closure): New function. + (flush_icache, flush_range): New functions. + (ffi_closure_helper_DARWIN): New function. + * src/powerpc/aix_closure.S: New file. + * src/powerpc/darwin_closure.S: New file. + +2002-02-24 Jeff Sturm + + * include/ffi.h.in: Add typedef for ffi_arg. + * src/ffitest.c (main): Declare rint with ffi_arg. + +2002-02-21 Andreas Tobler + + * src/powerpc/ffi_darwin.c (ffi_prep_args): Skip appropriate + number of GPRs for floating-point arguments. + +2002-01-31 Anthony Green + + * configure: Rebuilt. + * configure.in: Replace CHECK_SIZEOF and endian tests with + cross-compiler friendly macros. + * aclocal.m4 (AC_COMPILE_CHECK_SIZEOF, AC_C_BIGENDIAN_CROSS): New + macros. + +2002-01-18 David Edelsohn + + * src/powerpc/darwin.S (_ffi_call_AIX): New. + * src/powerpc/aix.S (ffi_call_DARWIN): New. + +2002-01-17 David Edelsohn + + * Makefile.am (EXTRA_DIST): Add Darwin and AIX files. + (TARGET_SRC_POWERPC_AIX): New. + (POWERPC_AIX): New stanza. + * Makefile.in: Regenerate. + * configure.in: Add AIX case. + * configure: Regenerate. + * include/ffi.h.in (ffi_abi): Add FFI_AIX. + * src/powerpc/ffi_darwin.c (ffi_status): Use "long" to scale frame + size. Fix "long double" support. + (ffi_call): Add FFI_AIX case. + * src/powerpc/aix.S: New. + +2001-10-09 John Hornkvist + + Implement Darwin PowerPC ABI. + * configure.in: Handle powerpc-*-darwin*. + * Makefile.am: Set source files for POWERPC_DARWIN. + * configure: Rebuilt. + * Makefile.in: Rebuilt. + * include/ffi.h.in: Define FFI_DARWIN and FFI_DEFAULT_ABI for + POWERPC_DARWIN. + * src/powerpc/darwin.S: New file. + * src/powerpc/ffi_darwin.c: New file. + +2001-10-07 Joseph S. Myers + + * src/x86/ffi.c: Fix spelling error of "separate" as "seperate". + +2001-07-16 Rainer Orth + + * src/x86/sysv.S: Avoid gas-only .balign directive. + Use C style comments. + +2001-07-16 Rainer Orth + + * src/alpha/ffi.c (ffi_prep_closure): Avoid gas-only mnemonic. + Fixes PR bootstrap/3563. + +2001-06-26 Rainer Orth + + * src/alpha/osf.S (ffi_closure_osf): Use .rdata for ECOFF. + +2001-06-25 Rainer Orth + + * configure.in: Recognize sparc*-sun-* host. + * configure: Regenerate. + +2001-06-06 Andrew Haley + + * src/alpha/osf.S (__FRAME_BEGIN__): Conditionalize for ELF. + +2001-06-03 Andrew Haley + + * src/alpha/osf.S: Add unwind info. + * src/powerpc/sysv.S: Add unwind info. + * src/powerpc/ppc_closure.S: Likewise. + +2000-05-31 Jeff Sturm + + * configure.in: Fix AC_ARG_ENABLE usage. + * configure: Rebuilt. + +2001-05-06 Bryce McKinlay + + * configure.in: Remove warning about beta code. + * configure: Rebuilt. + +2001-04-25 Hans Boehm + + * src/ia64/unix.S: Restore stack pointer when returning from + ffi_closure_UNIX. + * src/ia64/ffi.c: Fix typo in comment. + +2001-04-18 Jim Wilson + + * src/ia64/unix.S: Delete unnecessary increment and decrement of loc2 + to eliminate RAW DV. + +2001-04-12 Bryce McKinlay + + * Makefile.am: Make a libtool convenience library. + * Makefile.in: Rebuilt. + +2001-03-29 Bryce McKinlay + + * configure.in: Use different syntax for subdirectory creation. + * configure: Rebuilt. + +2001-03-27 Jon Beniston + + * configure.in: Added X86_WIN32 target (Win32, CygWin, MingW). + * configure: Rebuilt. + * Makefile.am: Added X86_WIN32 target support. + * Makefile.in: Rebuilt. + + * include/ffi.h.in: Added X86_WIN32 target support. + + * src/ffitest.c: Doesn't run structure tests for X86_WIN32 targets. + * src/types.c: Added X86_WIN32 target support. + + * src/x86/win32.S: New file. Based on sysv.S, but with EH + stuff removed and made to work with CygWin's gas. + +2001-03-26 Bryce McKinlay + + * configure.in: Make target subdirectory in build dir. + * Makefile.am: Override suffix based rules to specify correct output + subdirectory. + * Makefile.in: Rebuilt. + * configure: Rebuilt. + +2001-03-23 Kevin B Hendricks + + * src/powerpc/ppc_closure.S: New file. + * src/powerpc/ffi.c (ffi_prep_args): Fixed ABI compatibility bug + involving long long and register pairs. + (ffi_prep_closure): New function. + (flush_icache): Likewise. + (ffi_closure_helper_SYSV): Likewise. + * include/ffi.h.in (FFI_CLOSURES): Define on PPC. + (FFI_TRAMPOLINE_SIZE): Likewise. + (FFI_NATIVE_RAW_API): Likewise. + * Makefile.in: Rebuilt. + * Makefile.am (EXTRA_DIST): Added src/powerpc/ppc_closure.S. + (TARGET_SRC_POWERPC): Likewise. + +2001-03-19 Tom Tromey + + * Makefile.in: Rebuilt. + * Makefile.am (ffitest_LDFLAGS): New macro. + +2001-03-02 Nick Clifton + + * include/ffi.h.in: Remove RCS ident string. + * include/ffi_mips.h: Remove RCS ident string. + * src/debug.c: Remove RCS ident string. + * src/ffitest.c: Remove RCS ident string. + * src/prep_cif.c: Remove RCS ident string. + * src/types.c: Remove RCS ident string. + * src/alpha/ffi.c: Remove RCS ident string. + * src/alpha/osf.S: Remove RCS ident string. + * src/arm/ffi.c: Remove RCS ident string. + * src/arm/sysv.S: Remove RCS ident string. + * src/mips/ffi.c: Remove RCS ident string. + * src/mips/n32.S: Remove RCS ident string. + * src/mips/o32.S: Remove RCS ident string. + * src/sparc/ffi.c: Remove RCS ident string. + * src/sparc/v8.S: Remove RCS ident string. + * src/sparc/v9.S: Remove RCS ident string. + * src/x86/ffi.c: Remove RCS ident string. + * src/x86/sysv.S: Remove RCS ident string. + +2001-02-08 Joseph S. Myers + + * include/ffi.h.in: Change sourceware.cygnus.com references to + gcc.gnu.org. + +2000-12-09 Richard Henderson + + * src/alpha/ffi.c (ffi_call): Simplify struct return test. + (ffi_closure_osf_inner): Index rather than increment avalue + and arg_types. Give ffi_closure_osf the raw return value type. + * src/alpha/osf.S (ffi_closure_osf): Handle return value type + promotion. + +2000-12-07 Richard Henderson + + * src/raw_api.c (ffi_translate_args): Fix typo. + (ffi_prep_closure): Likewise. + + * include/ffi.h.in [ALPHA]: Define FFI_CLOSURES and + FFI_TRAMPOLINE_SIZE. + * src/alpha/ffi.c (ffi_prep_cif_machdep): Adjust minimal + cif->bytes for new ffi_call_osf implementation. + (ffi_prep_args): Absorb into ... + (ffi_call): ... here. Do all stack allocation here and + avoid a callback function. + (ffi_prep_closure, ffi_closure_osf_inner): New. + * src/alpha/osf.S (ffi_call_osf): Reimplement with no callback. + (ffi_closure_osf): New. + +2000-09-10 Alexandre Oliva + + * config.guess, config.sub, install-sh: Removed. + * ltconfig, ltmain.sh, missing, mkinstalldirs: Likewise. + * Makefile.in: Rebuilt. + + * acinclude.m4: Include libtool macros from the top level. + * aclocal.m4, configure: Rebuilt. + +2000-08-22 Alexandre Oliva + + * configure.in [i*86-*-freebsd*] (TARGET, TARGETDIR): Set. + * configure: Rebuilt. + +2000-05-11 Scott Bambrough + + * libffi/src/arm/sysv.S (ffi_call_SYSV): Doubles are not saved to + memory correctly. Use conditional instructions, not branches where + possible. + +2000-05-04 Tom Tromey + + * configure: Rebuilt. + * configure.in: Match `arm*-*-linux-*'. + From Chris Dornan . + +2000-04-28 Jakub Jelinek + + * Makefile.am (SUBDIRS): Define. + (AM_MAKEFLAGS): Likewise. + (Multilib support.): Add section. + * Makefile.in: Rebuilt. + * ltconfig (extra_compiler_flags, extra_compiler_flags_value): + New variables. Set for gcc using -print-multi-lib. Export them + to libtool. + (sparc64-*-linux-gnu*): Use libsuff 64 for search paths. + * ltmain.sh (B|b|V): Don't throw away gcc's -B, -b and -V options + for -shared links. + (extra_compiler_flags_value, extra_compiler_flags): Check these + for extra compiler options which need to be passed down in + compiler_flags. + +2000-04-16 Anthony Green + + * configure: Rebuilt. + * configure.in: Change i*86-pc-linux* to i*86-*-linux*. + +2000-04-14 Jakub Jelinek + + * include/ffi.h.in (SPARC64): Define for 64bit SPARC builds. + Set SPARC FFI_DEFAULT_ABI based on SPARC64 define. + * src/sparc/ffi.c (ffi_prep_args_v8): Renamed from ffi_prep_args. + Replace all void * sizeofs with sizeof(int). + Only compare type with FFI_TYPE_LONGDOUBLE if LONGDOUBLE is + different than DOUBLE. + Remove FFI_TYPE_SINT32 and FFI_TYPE_UINT32 cases (handled elsewhere). + (ffi_prep_args_v9): New function. + (ffi_prep_cif_machdep): Handle V9 ABI and long long on V8. + (ffi_V9_return_struct): New function. + (ffi_call): Handle FFI_V9 ABI from 64bit code and FFI_V8 ABI from + 32bit code (not yet cross-arch calls). + * src/sparc/v8.S: Add struct return delay nop. + Handle long long. + * src/sparc/v9.S: New file. + * src/prep_cif.c (ffi_prep_cif): Return structure pointer + is used on sparc64 only for structures larger than 32 bytes. + Pass by reference for structures is done for structure arguments + larger than 16 bytes. + * src/ffitest.c (main): Use 64bit rint on sparc64. + Run long long tests on sparc. + * src/types.c (FFI_TYPE_POINTER): Pointer is 64bit on alpha and + sparc64. + (FFI_TYPE_LONGDOUBLE): long double is 128 bit aligned to 128 bits + on sparc64. + * configure.in (sparc-*-linux*): New supported target. + (sparc64-*-linux*): Likewise. + * configure: Rebuilt. + * Makefile.am: Add v9.S to SPARC files. + * Makefile.in: Likewise. + (LINK): Surround $(CCLD) into double quotes, so that multilib + compiles work correctly. + +2000-04-04 Alexandre Petit-Bianco + + * configure: Rebuilt. + * configure.in: (i*86-*-solaris*): New libffi target. Patch + proposed by Bryce McKinlay. + +2000-03-20 Tom Tromey + + * Makefile.in: Hand edit for java_raw_api.lo. + +2000-03-08 Bryce McKinlay + + * config.guess, config.sub: Update from the gcc tree. + Fix for PR libgcj/168. + +2000-03-03 Tom Tromey + + * Makefile.in: Fixed ia64 by hand. + + * configure: Rebuilt. + * configure.in (--enable-multilib): New option. + (libffi_basedir): New subst. + (AC_OUTPUT): Added multilib code. + +2000-03-02 Tom Tromey + + * Makefile.in: Rebuilt. + * Makefile.am (TARGET_SRC_IA64): Use `ia64', not `alpha', as + directory name. + +2000-02-25 Hans Boehm + + * src/ia64/ffi.c, src/ia64/ia64_flags.h, src/ia64/unix.S: New + files. + * src/raw_api.c (ffi_translate_args): Fixed typo in argument + list. + (ffi_prep_raw_closure): Use ffi_translate_args, not + ffi_closure_translate. + * src/java_raw_api.c: New file. + * src/ffitest.c (closure_test_fn): New function. + (main): Define `rint' as long long on IA64. Added new test when + FFI_CLOSURES is defined. + * include/ffi.h.in (ALIGN): Use size_t, not unsigned. + (ffi_abi): Recognize IA64. + (ffi_raw): Added `flt' field. + Added "Java raw API" code. + * configure.in: Recognize ia64. + * Makefile.am (TARGET_SRC_IA64): New macro. + (libffi_la_common_SOURCES): Added java_raw_api.c. + (libffi_la_SOURCES): Define in IA64 case. + +2000-01-04 Tom Tromey + + * Makefile.in: Rebuilt with newer automake. + +1999-12-31 Tom Tromey + + * Makefile.am (INCLUDES): Added -I$(top_srcdir)/src. + +1999-09-01 Tom Tromey + + * include/ffi.h.in: Removed PACKAGE and VERSION defines and + undefs. + * fficonfig.h.in: Rebuilt. + * configure: Rebuilt. + * configure.in: Pass 3rd argument to AM_INIT_AUTOMAKE. + Use AM_PROG_LIBTOOL (automake 1.4 compatibility). + * acconfig.h: Don't #undef PACKAGE or VERSION. + +1999-08-09 Anthony Green + + * include/ffi.h.in: Try to work around messy header problem + with PACKAGE and VERSION. + + * configure: Rebuilt. + * configure.in: Change version to 2.00-beta. + + * fficonfig.h.in: Rebuilt. + * acconfig.h (FFI_NO_STRUCTS, FFI_NO_RAW_API): Define. + + * src/x86/ffi.c (ffi_raw_call): Rename. + +1999-08-02 Kresten Krab Thorup + + * src/x86/ffi.c (ffi_closure_SYSV): New function. + (ffi_prep_incoming_args_SYSV): Ditto. + (ffi_prep_closure): Ditto. + (ffi_closure_raw_SYSV): Ditto. + (ffi_prep_raw_closure): More ditto. + (ffi_call_raw): Final ditto. + + * include/ffi.h.in: Add definitions for closure and raw API. + + * src/x86/ffi.c (ffi_prep_cif_machdep): Added case for + FFI_TYPE_UINT64. + + * Makefile.am (libffi_la_common_SOURCES): Added raw_api.c + + * src/raw_api.c: New file. + + * include/ffi.h.in (ffi_raw): New type. + (UINT_ARG, SINT_ARG): New defines. + (ffi_closure, ffi_raw_closure): New types. + (ffi_prep_closure, ffi_prep_raw_closure): New declarations. + + * configure.in: Add check for endianness and sizeof void*. + + * src/x86/sysv.S (ffi_call_SYSV): Call fixup routine via argument, + instead of directly. + + * configure: Rebuilt. + +Thu Jul 8 14:28:42 1999 Anthony Green + + * configure.in: Add x86 and powerpc BeOS configurations. + From Makoto Kato . + +1999-05-09 Anthony Green + + * configure.in: Add warning about this being beta code. + Remove src/Makefile.am from the picture. + * configure: Rebuilt. + + * Makefile.am: Move logic from src/Makefile.am. Add changes + to support libffi as a target library. + * Makefile.in: Rebuilt. + + * aclocal.m4, config.guess, config.sub, ltconfig, ltmain.sh: + Upgraded to new autoconf, automake, libtool. + + * README: Tweaks. + + * LICENSE: Update copyright date. + + * src/Makefile.am, src/Makefile.in: Removed. + +1998-11-29 Anthony Green + + * include/ChangeLog: Removed. + * src/ChangeLog: Removed. + * src/mips/ChangeLog: Removed. + * src/sparc/ChangeLog: Remboved. + * src/x86/ChangeLog: Removed. + + * ChangeLog.v1: Created. Added: python/trunk/Modules/_ctypes/libffi/ChangeLog.libffi ============================================================================== --- (empty file) +++ python/trunk/Modules/_ctypes/libffi/ChangeLog.libffi Mon Mar 15 01:02:36 2010 @@ -0,0 +1,658 @@ +2009-12-27 Matthias Klose + + * configure.ac (HAVE_LONG_DOUBLE): Define for mips when + appropriate. + * configure: Rebuilt. + +2009-12-27 Anthony Green + + * testsuite/libffi.call/cls_longdouble.c: Don't xfail for ARM. + +2009-12-26 Anthony Green + + * testsuite/libffi.call/huge_struct.c: Don't xfail for avr32*-*-*. + * testsuite/libffi.call/cls_longdouble_va.c: Mark as xfail for + avr32*-*-*. + * testsuite/libffi.call/cls_double_va.c: Ditto. + +2009-12-26 Andreas Tobler + + * testsuite/libffi.call/ffitest.h: Conditionally include stdint.h + and inttypes.h. + * testsuite/libffi.special/unwindtest.cc: Ditto. + * testsuite/libffi.call/huge_struct.c: Don't include stdint.h + directly. + +2009-12-26 Andreas Tobler + + * configure.ac: Add amd64-*-openbsd*. + * configure: Rebuilt. + * testsuite/lib/libffi-dg.exp (libffi_target_compile): Link + openbsd programs with -lpthread. + +2009-12-26 Anthony Green + + * testsuite/libffi.call/cls_double_va.c, + testsuite/libffi.call/cls_longdouble.c, + testsuite/libffi.call/cls_longdouble_va.c, + testsuite/libffi.call/cls_pointer.c, + testsuite/libffi.call/cls_pointer_stack.c: Remove xfail for + mips*-*-* and arm*-*-*. + * testsuite/libffi.call/cls_align_longdouble_split.c, + testsuite/libffi.call/cls_align_longdouble_split2.c, + testsuite/libffi.call/stret_medium2.c, + testsuite/libffi.call/stret_medium.c, + testsuite/libffi.call/stret_large.c, + testsuite/libffi.call/stret_large2.c: Remove xfail for arm*-*-*. + +2009-12-26 Andreas Tobler + Anthony Green + + * testsuite/libffi.call/huge_struct.c (test_large_fn): Replace + format code %p with %#lx because %p does not add a leading 0x on + Solaris. Also change relevant arguments to unsigned long. + +2009-12-25 Samuli Suominen + + * configure.ac: Undefine _AC_ARG_VAR_PRECIOUS for autoconf 2.64. + * configure: Rebuilt. + * fficonfig.h.in: Rebuilt. + +2009-12-29 Kay Tietz + + * testsuite/libffi.call/ffitest.h, + testsuite/libffi.special/ffitestcxx.h (PRIdLL, PRuLL): Fix + definitions. + +2009-12-25 Carlo Bramini + + * configure.ac (AM_LTLDFLAGS): Define for windows hosts. + * Makefile.am (libffi_la_LDFLAGS): Add AM_LTLDFLAGS. + * configure: Rebuilt. + * Makefile.in: Rebuilt. + +2009-12-24 Anthony Green + + * testsuite/libffi.call/huge_struct.c: Fix printf format, and + don't xfail x86 Linux. + * testsuite/libffi.call/huge_struct.c: Don't xfail mips. + * testsuite/libffi.call/cls_pointer.c: Ditto. + * testsuite/libffi.call/cls_pointer_stack.c: Ditto. + * testsuite/libffi.call/cls_longdouble_va.c: Ditto. + * testsuite/libffi.call/cls_longdouble.c: Ditto. + * testsuite/libffi.call/cls_double_va.c: Ditto. + +2009-06-16 Andrew Haley + + * testsuite/libffi.call/cls_align_sint64.c, + testsuite/libffi.call/cls_align_uint64.c, + testsuite/libffi.call/cls_longdouble_va.c, + testsuite/libffi.call/cls_ulonglong.c, + testsuite/libffi.call/return_ll1.c, + testsuite/libffi.call/stret_medium2.c: Fix printf format + specifiers. + * testsuite/libffi.call/huge_struct.c: Ad x86 XFAILs. + * testsuite/libffi.call/float2.c: Fix dg-excess-errors. + * testsuite/libffi.call/ffitest.h, + testsuite/libffi.special/ffitestcxx.h (PRIdLL, PRIuLL): Define. + +2009-06-12 Andrew Haley + + * testsuite/libffi.call/cls_align_sint64.c, + testsuite/libffi.call/cls_align_uint64.c, + testsuite/libffi.call/cls_ulonglong.c, + testsuite/libffi.call/return_ll1.c, + testsuite/libffi.call/stret_medium2.c: Fix printf format + specifiers. + testsuite/libffi.special/unwindtest.cc: include stdint.h. + +2009-06-11 Timothy Wall + + * Makefile.am, + configure.ac, + include/ffi.h.in, + include/ffi_common.h, + src/closures.c, + src/dlmalloc.c, + src/x86/ffi.c, + src/x86/ffitarget.h, + src/x86/win64.S (new), + README: Added win64 support (mingw or MSVC) + * Makefile.in, + include/Makefile.in, + man/Makefile.in, + testsuite/Makefile.in, + configure, + aclocal.m4: Regenerated + * ltcf-c.sh: properly escape cygwin/w32 path + * man/ffi_call.3: Clarify size requirements for return value. + * src/x86/ffi64.c: Fix filename in comment. + * src/x86/win32.S: Remove unused extern. + + * testsuite/libffi.call/closure_fn0.c, + testsuite/libffi.call/closure_fn1.c, + testsuite/libffi.call/closure_fn2.c, + testsuite/libffi.call/closure_fn3.c, + testsuite/libffi.call/closure_fn4.c, + testsuite/libffi.call/closure_fn5.c, + testsuite/libffi.call/closure_fn6.c, + testsuite/libffi.call/closure_stdcall.c, + testsuite/libffi.call/cls_12byte.c, + testsuite/libffi.call/cls_16byte.c, + testsuite/libffi.call/cls_18byte.c, + testsuite/libffi.call/cls_19byte.c, + testsuite/libffi.call/cls_1_1byte.c, + testsuite/libffi.call/cls_20byte.c, + testsuite/libffi.call/cls_20byte1.c, + testsuite/libffi.call/cls_24byte.c, + testsuite/libffi.call/cls_2byte.c, + testsuite/libffi.call/cls_3_1byte.c, + testsuite/libffi.call/cls_3byte1.c, + testsuite/libffi.call/cls_3byte2.c, + testsuite/libffi.call/cls_4_1byte.c, + testsuite/libffi.call/cls_4byte.c, + testsuite/libffi.call/cls_5_1_byte.c, + testsuite/libffi.call/cls_5byte.c, + testsuite/libffi.call/cls_64byte.c, + testsuite/libffi.call/cls_6_1_byte.c, + testsuite/libffi.call/cls_6byte.c, + testsuite/libffi.call/cls_7_1_byte.c, + testsuite/libffi.call/cls_7byte.c, + testsuite/libffi.call/cls_8byte.c, + testsuite/libffi.call/cls_9byte1.c, + testsuite/libffi.call/cls_9byte2.c, + testsuite/libffi.call/cls_align_double.c, + testsuite/libffi.call/cls_align_float.c, + testsuite/libffi.call/cls_align_longdouble.c, + testsuite/libffi.call/cls_align_longdouble_split.c, + testsuite/libffi.call/cls_align_longdouble_split2.c, + testsuite/libffi.call/cls_align_pointer.c, + testsuite/libffi.call/cls_align_sint16.c, + testsuite/libffi.call/cls_align_sint32.c, + testsuite/libffi.call/cls_align_sint64.c, + testsuite/libffi.call/cls_align_uint16.c, + testsuite/libffi.call/cls_align_uint32.c, + testsuite/libffi.call/cls_align_uint64.c, + testsuite/libffi.call/cls_dbls_struct.c, + testsuite/libffi.call/cls_double.c, + testsuite/libffi.call/cls_double_va.c, + testsuite/libffi.call/cls_float.c, + testsuite/libffi.call/cls_longdouble.c, + testsuite/libffi.call/cls_longdouble_va.c, + testsuite/libffi.call/cls_multi_schar.c, + testsuite/libffi.call/cls_multi_sshort.c, + testsuite/libffi.call/cls_multi_sshortchar.c, + testsuite/libffi.call/cls_multi_uchar.c, + testsuite/libffi.call/cls_multi_ushort.c, + testsuite/libffi.call/cls_multi_ushortchar.c, + testsuite/libffi.call/cls_pointer.c, + testsuite/libffi.call/cls_pointer_stack.c, + testsuite/libffi.call/cls_schar.c, + testsuite/libffi.call/cls_sint.c, + testsuite/libffi.call/cls_sshort.c, + testsuite/libffi.call/cls_uchar.c, + testsuite/libffi.call/cls_uint.c, + testsuite/libffi.call/cls_ulonglong.c, + testsuite/libffi.call/cls_ushort.c, + testsuite/libffi.call/err_bad_abi.c, + testsuite/libffi.call/err_bad_typedef.c, + testsuite/libffi.call/float2.c, + testsuite/libffi.call/huge_struct.c, + testsuite/libffi.call/nested_struct.c, + testsuite/libffi.call/nested_struct1.c, + testsuite/libffi.call/nested_struct10.c, + testsuite/libffi.call/nested_struct2.c, + testsuite/libffi.call/nested_struct3.c, + testsuite/libffi.call/nested_struct4.c, + testsuite/libffi.call/nested_struct5.c, + testsuite/libffi.call/nested_struct6.c, + testsuite/libffi.call/nested_struct7.c, + testsuite/libffi.call/nested_struct8.c, + testsuite/libffi.call/nested_struct9.c, + testsuite/libffi.call/problem1.c, + testsuite/libffi.call/return_ldl.c, + testsuite/libffi.call/return_ll1.c, + testsuite/libffi.call/stret_large.c, + testsuite/libffi.call/stret_large2.c, + testsuite/libffi.call/stret_medium.c, + testsuite/libffi.call/stret_medium2.c, + testsuite/libffi.special/unwindtest.cc: use ffi_closure_alloc instead + of checking for MMAP. Use intptr_t instead of long casts. + +2009-06-04 Andrew Haley + + * src/powerpc/ffitarget.h: Fix misapplied merge from gcc. + +2009-06-04 Andrew Haley + + * src/mips/o32.S, + src/mips/n32.S: Fix licence formatting. + +2009-06-04 Andrew Haley + + * src/x86/darwin.S: Fix licence formatting. + src/x86/win32.S: Likewise. + src/sh64/sysv.S: Likewise. + src/sh/sysv.S: Likewise. + +2009-06-04 Andrew Haley + + * src/sh64/ffi.c: Remove lint directives. Was missing from merge + of Andreas Tobler's patch from 2006-04-22. + +2009-06-04 Andrew Haley + + * src/sh/ffi.c: Apply missing hunk from Alexandre Oliva's patch of + 2007-03-07. + +2008-12-26 Timothy Wall + + * testsuite/libffi.call/cls_longdouble.c, + testsuite/libffi.call/cls_longdouble_va.c, + testsuite/libffi.call/cls_align_longdouble.c, + testsuite/libffi.call/cls_align_longdouble_split.c, + testsuite/libffi.call/cls_align_longdouble_split2.c: mark expected + failures on x86_64 cygwin/mingw. + +2008-12-22 Timothy Wall + + * testsuite/libffi.call/closure_fn0.c, + testsuite/libffi.call/closure_fn1.c, + testsuite/libffi.call/closure_fn2.c, + testsuite/libffi.call/closure_fn3.c, + testsuite/libffi.call/closure_fn4.c, + testsuite/libffi.call/closure_fn5.c, + testsuite/libffi.call/closure_fn6.c, + testsuite/libffi.call/closure_loc_fn0.c, + testsuite/libffi.call/closure_stdcall.c, + testsuite/libffi.call/cls_align_pointer.c, + testsuite/libffi.call/cls_pointer.c, + testsuite/libffi.call/cls_pointer_stack.c: use portable cast from + pointer to integer (intptr_t). + * testsuite/libffi.call/cls_longdouble.c: disable for win64. + +2008-12-19 Anthony Green + + * configure.ac: Bump version to 3.0.8. + * configure, doc/stamp-vti, doc/version.texi: Rebuilt. + * libtool-version: Increment revision. + * README: Update for new release. + +2008-11-11 Anthony Green + + * configure.ac: Bump version to 3.0.7. + * configure, doc/stamp-vti, doc/version.texi: Rebuilt. + * libtool-version: Increment revision. + * README: Update for new release. + +2008-08-25 Andreas Tobler + + * src/powerpc/ffitarget.h (ffi_abi): Add FFI_LINUX and + FFI_LINUX_SOFT_FLOAT to the POWERPC_FREEBSD enum. + Add note about flag bits used for FFI_SYSV_TYPE_SMALL_STRUCT. + Adjust copyright notice. + * src/powerpc/ffi.c: Add two new flags to indicate if we have one + register or two register to use for FFI_SYSV structs. + (ffi_prep_cif_machdep): Pass the right register flag introduced above. + (ffi_closure_helper_SYSV): Fix the return type for + FFI_SYSV_TYPE_SMALL_STRUCT. Comment. + Adjust copyright notice. + +2008-07-24 Anthony Green + + * testsuite/libffi.call/cls_dbls_struct.c, + testsuite/libffi.call/cls_double_va.c, + testsuite/libffi.call/cls_longdouble.c, + testsuite/libffi.call/cls_longdouble_va.c, + testsuite/libffi.call/cls_pointer.c, + testsuite/libffi.call/cls_pointer_stack.c, + testsuite/libffi.call/err_bad_abi.c: Clean up failures from + compiler warnings. + +2008-07-17 Anthony Green + + * configure.ac: Bump version to 3.0.6. + * configure, doc/stamp-vti, doc/version.texi: Rebuilt. + * libtool-version: Increment revision. Add documentation. + * README: Update for new release. + +2008-07-16 Kaz Kojima + + * src/sh/ffi.c (ffi_prep_closure_loc): Turn INSN into an unsigned + int. + +2008-07-16 Kaz Kojima + + * src/sh/sysv.S: Add .note.GNU-stack on Linux. + * src/sh64/sysv.S: Likewise. + +2008-04-03 Anthony Green + + * libffi.pc.in (Libs): Add -L${libdir}. + * configure.ac: Bump version to 3.0.5. + * configure, doc/stamp-vti, doc/version.texi: Rebuilt. + * libtool-version: Increment revision. + * README: Update for new release. + +2008-04-03 Anthony Green + Xerces Ranby + + * include/ffi.h.in: Wrap definition of target architecture to + protect from double definitions. + +2008-03-22 Moriyoshi Koizumi + + * src/x86/ffi.c (ffi_prep_closure_loc): Fix for bug revealed in + closure_loc_fn0.c. + * testsuite/libffi.call/closure_loc_fn0.c (closure_loc_test_fn0): + New test. + +2008-03-04 Anthony Green + Blake Chaffin + hos at tamanegi.org + + * testsuite/libffi.call/cls_align_longdouble_split2.c + testsuite/libffi.call/cls_align_longdouble_split.c + testsuite/libffi.call/cls_dbls_struct.c + testsuite/libffi.call/cls_double_va.c + testsuite/libffi.call/cls_longdouble.c + testsuite/libffi.call/cls_longdouble_va.c + testsuite/libffi.call/cls_pointer.c + testsuite/libffi.call/cls_pointer_stack.c + testsuite/libffi.call/err_bad_abi.c + testsuite/libffi.call/err_bad_typedef.c + testsuite/libffi.call/huge_struct.c + testsuite/libffi.call/stret_large2.c + testsuite/libffi.call/stret_large.c + testsuite/libffi.call/stret_medium2.c + testsuite/libffi.call/stret_medium.c: New tests from Apple. + +2008-02-26 Jakub Jelinek + Anthony Green + + * src/alpha/osf.S: Add .note.GNU-stack on Linux. + * src/s390/sysv.S: Likewise. + * src/powerpc/linux64.S: Likewise. + * src/powerpc/linux64_closure.S: Likewise. + * src/powerpc/ppc_closure.S: Likewise. + * src/powerpc/sysv.S: Likewise. + * src/x86/unix64.S: Likewise. + * src/x86/sysv.S: Likewise. + * src/sparc/v8.S: Likewise. + * src/sparc/v9.S: Likewise. + * src/m68k/sysv.S: Likewise. + * src/ia64/unix.S: Likewise. + * src/arm/sysv.S: Likewise. + +2008-02-26 Anthony Green + Thomas Heller + + * src/x86/ffi.c (ffi_closure_SYSV_inner): Change C++ comment to C + comment. + +2008-02-26 Anthony Green + Thomas Heller + + * include/ffi.h.in: Change void (*)() to void (*)(void). + +2008-02-26 Anthony Green + Thomas Heller + + * src/alpha/ffi.c: Change void (*)() to void (*)(void). + src/alpha/osf.S, src/arm/ffi.c, src/frv/ffi.c, src/ia64/ffi.c, + src/ia64/unix.S, src/java_raw_api.c, src/m32r/ffi.c, + src/mips/ffi.c, src/pa/ffi.c, src/pa/hpux32.S, src/pa/linux.S, + src/powerpc/ffi.c, src/powerpc/ffi_darwin.c, src/raw_api.c, + src/s390/ffi.c, src/sh/ffi.c, src/sh64/ffi.c, src/sparc/ffi.c, + src/x86/ffi.c, src/x86/unix64.S, src/x86/darwin64.S, + src/x86/ffi64.c: Ditto. + +2008-02-24 Anthony Green + + * configure.ac: Accept openbsd*, not just openbsd. + Bump version to 3.0.4. + * configure, doc/stamp-vti, doc/version.texi: Rebuilt. + * libtool-version: Increment revision. + * README: Update for new release. + +2008-02-22 Anthony Green + + * README: Clean up list of tested platforms. + +2008-02-22 Anthony Green + + * configure.ac: Bump version to 3.0.3. + * configure, doc/stamp-vti, doc/version.texi: Rebuilt. + * libtool-version: Increment revision. + * README: Update for new release. Clean up test docs. + +2008-02-22 Bjoern Koenig + Andreas Tobler + + * configure.ac: Add amd64-*-freebsd* target. + * configure: Regenerate. + +2008-02-22 Thomas Heller + + * configure.ac: Add x86 OpenBSD support. + * configure: Rebuilt. + +2008-02-21 Thomas Heller + + * README: Change "make test" to "make check". + +2008-02-21 Anthony Green + + * configure.ac: Bump version to 3.0.2. + * configure, doc/stamp-vti, doc/version.texi: Rebuilt. + * libtool-version: Increment revision. + * README: Update for new release. + +2008-02-21 Bj?rn K?nig + + * src/x86/freebsd.S: New file. + * configure.ac: Add x86 FreeBSD support. + * Makefile.am: Ditto. + +2008-02-15 Anthony Green + + * configure.ac: Bump version to 3.0.1. + * configure, doc/stamp-vti, doc/version.texi: Rebuilt. + * libtool-version: Increment revision. + * README: Update for new release. + +2008-02-15 David Daney + + * src/mips/ffi.c: Remove extra '>' from include directive. + (ffi_prep_closure_loc): Use clear_location instead of tramp. + +2008-02-15 Anthony Green + + * configure.ac: Bump version to 3.0.0. + * configure, doc/stamp-vti, doc/version.texi: Rebuilt. + +2008-02-15 David Daney + + * src/mips/ffi.c (USE__BUILTIN___CLEAR_CACHE): + Define (conditionally), and use it to include cachectl.h. + (ffi_prep_closure_loc): Fix cache flushing. + * src/mips/ffitarget.h (_ABIN32, _ABI64, _ABIO32): Define. + +2008-02-15 Anthony Green + + * man/ffi_call.3, man/ffi_prep_cif.3, man/ffi.3: + Update dates and remove all references to ffi_prep_closure. + * configure.ac: Bump version to 2.99.9. + * configure, doc/stamp-vti, doc/version.texi: Rebuilt. + +2008-02-15 Anthony Green + + * man/ffi_prep_closure.3: Delete. + * man/Makefile.am (EXTRA_DIST): Remove ffi_prep_closure.3. + (man_MANS): Ditto. + * man/Makefile.in: Rebuilt. + * configure.ac: Bump version to 2.99.8. + * configure, doc/stamp-vti, doc/version.texi: Rebuilt. + +2008-02-14 Anthony Green + + * configure.ac: Bump version to 2.99.7. + * configure, doc/stamp-vti, doc/version.texi: Rebuilt. + * include/ffi.h.in LICENSE src/debug.c src/closures.c + src/ffitest.c src/s390/sysv.S src/s390/ffitarget.h + src/types.c src/m68k/ffitarget.h src/raw_api.c src/frv/ffi.c + src/frv/ffitarget.h src/sh/ffi.c src/sh/sysv.S + src/sh/ffitarget.h src/powerpc/ffitarget.h src/pa/ffi.c + src/pa/ffitarget.h src/pa/linux.S src/java_raw_api.c + src/cris/ffitarget.h src/x86/ffi.c src/x86/sysv.S + src/x86/unix64.S src/x86/win32.S src/x86/ffitarget.h + src/x86/ffi64.c src/x86/darwin.S src/ia64/ffi.c + src/ia64/ffitarget.h src/ia64/ia64_flags.h src/ia64/unix.S + src/sparc/ffi.c src/sparc/v9.S src/sparc/ffitarget.h + src/sparc/v8.S src/alpha/ffi.c src/alpha/ffitarget.h + src/alpha/osf.S src/sh64/ffi.c src/sh64/sysv.S + src/sh64/ffitarget.h src/mips/ffi.c src/mips/ffitarget.h + src/mips/n32.S src/mips/o32.S src/arm/ffi.c src/arm/sysv.S + src/arm/ffitarget.h src/prep_cif.c: Update license text. + +2008-02-14 Anthony Green + + * README: Update tested platforms. + * configure.ac: Bump version to 2.99.6. + * configure: Rebuilt. + +2008-02-14 Anthony Green + + * configure.ac: Bump version to 2.99.5. + * configure: Rebuilt. + * Makefile.am (EXTRA_DIST): Add darwin64.S + * Makefile.in: Rebuilt. + * testsuite/lib/libffi-dg.exp: Remove libstdc++ bits from GCC tree. + * LICENSE: Update WARRANTY. + +2008-02-14 Anthony Green + + * libffi.pc.in (libdir): Fix libdir definition. + * configure.ac: Bump version to 2.99.4. + * configure: Rebuilt. + +2008-02-14 Anthony Green + + * README: Update. + * libffi.info: New file. + * doc/stamp-vti: New file. + * configure.ac: Bump version to 2.99.3. + * configure: Rebuilt. + +2008-02-14 Anthony Green + + * Makefile.am (SUBDIRS): Add man dir. + * Makefile.in: Rebuilt. + * configure.ac: Create Makefile. + * configure: Rebuilt. + * man/ffi_call.3 man/ffi_prep_cif.3 man/ffi_prep_closure.3 + man/Makefile.am man/Makefile.in: New files. + +2008-02-14 Tom Tromey + + * aclocal.m4, Makefile.in, configure, fficonfig.h.in: Rebuilt. + * mdate-sh, texinfo.tex: New files. + * Makefile.am (info_TEXINFOS): New variable. + * doc/libffi.texi: New file. + * doc/version.texi: Likewise. + +2008-02-14 Anthony Green + + * Makefile.am (AM_CFLAGS): Don't compile with -D$(TARGET). + (lib_LTLIBRARIES): Define. + (toolexeclib_LIBRARIES): Undefine. + * Makefile.in: Rebuilt. + * configure.ac: Reset version to 2.99.1. + * configure.in: Rebuilt. + +2008-02-14 Anthony Green + + * libffi.pc.in: Use @PACKAGE_NAME@ and @PACKAGE_VERSION at . + * configure.ac: Reset version to 2.99.1. + * configure.in: Rebuilt. + * Makefile.am (EXTRA_DIST): Add ChangeLog.libffi. + * Makefile.in: Rebuilt. + * LICENSE: Update copyright notice. + +2008-02-14 Anthony Green + + * include/Makefile.am (nodist_includes_HEADERS): Define. Don't + distribute ffitarget.h or ffi.h from the build include dir. + * Makefile.in: Rebuilt. + +2008-02-14 Anthony Green + + * include/Makefile.am (includesdir): Install headers under libdir. + (pkgconfigdir): Define. Install libffi.pc. + * include/Makefile.in: Rebuilt. + * libffi.pc.in: Create. + * libtool-version: Increment CURRENT + * configure.ac: Add libffi.pc.in + * configure: Rebuilt. + +2008-02-03 Anthony Green + + * include/Makefile.am (includesdir): Fix header install with + DESTDIR. + * include/Makefile.in: Rebuilt. + +2008-02-03 Timothy Wall + + * src/x86/ffi.c (FFI_INIT_TRAMPOLINE_STDCALL): Calculate jump return + offset based on code pointer, not data pointer. + +2008-02-01 Anthony Green + + * include/Makefile.am: Fix header installs. + * Makefile.am: Ditto. + * include/Makefile.in: Rebuilt. + * Makefile.in: Ditto. + +2008-02-01 Anthony Green + + * src/x86/ffi.c (FFI_INIT_TRAMPOLINE_STDCALL, + FFI_INIT_TRAMPOLINE): Revert my broken changes to twall's last + patch. + +2008-01-31 Anthony Green + + * Makefile.am (EXTRA_DIST): Add missing files. + * testsuite/Makefile.am: Ditto. + * Makefile.in, testsuite/Makefile.in: Rebuilt. + +2008-01-31 Timothy Wall + + * testsuite/libffi.call/closure_stdcall.c: Add test for stdcall + closures. + * src/x86/ffitarget.h: Increase size of trampoline for stdcall + closures. + * src/x86/win32.S: Add assembly for stdcall closure. + * src/x86/ffi.c: Initialize stdcall closure trampoline. + +2008-01-30 H.J. Lu + + PR libffi/34612 + * src/x86/sysv.S (ffi_closure_SYSV): Pop 4 byte from stack when + returning struct. + + * testsuite/libffi.call/call.exp: Add "-O2 -fomit-frame-pointer" + tests. + +2008-01-30 Anthony Green + + * Makefile.am, include/Makefile.am: Move headers to + libffi_la_SOURCES for new automake. + * Makefile.in, include/Makefile.in: Rebuilt. + + * testsuite/lib/wrapper.exp: Copied from gcc tree to allow for + execution outside of gcc tree. + * testsuite/lib/target-libpath.exp: Ditto. + + * testsuite/lib/libffi-dg.exp: Many changes to allow for execution + outside of gcc tree. + Added: python/trunk/Modules/_ctypes/libffi/ChangeLog.libgcj ============================================================================== --- (empty file) +++ python/trunk/Modules/_ctypes/libffi/ChangeLog.libgcj Mon Mar 15 01:02:36 2010 @@ -0,0 +1,40 @@ +2004-01-14 Kelley Cook + + * configure.in: Add in AC_PREREQ(2.13) + +2003-02-20 Alexandre Oliva + + * configure.in: Propagate ORIGINAL_LD_FOR_MULTILIBS to + config.status. + * configure: Rebuilt. + +2002-01-27 Alexandre Oliva + + * configure.in (toolexecdir, toolexeclibdir): Set and AC_SUBST. + Remove USE_LIBDIR conditional. + * Makefile.am (toolexecdir, toolexeclibdir): Don't override. + * Makefile.in, configure: Rebuilt. + +Mon Aug 9 18:33:38 1999 Rainer Orth + + * include/Makefile.in: Rebuilt. + * Makefile.in: Rebuilt + * Makefile.am (toolexeclibdir): Add $(MULTISUBDIR) even for native + builds. + Use USE_LIBDIR. + + * configure: Rebuilt. + * configure.in (USE_LIBDIR): Define for native builds. + Use lowercase in configure --help explanations. + +1999-08-08 Anthony Green + + * include/ffi.h.in (FFI_FN): Remove `...'. + +1999-08-08 Anthony Green + + * Makefile.in: Rebuilt. + * Makefile.am (AM_CFLAGS): Compile with -fexceptions. + + * src/x86/sysv.S: Add exception handling metadata. + Added: python/trunk/Modules/_ctypes/libffi/ChangeLog.v1 ============================================================================== --- (empty file) +++ python/trunk/Modules/_ctypes/libffi/ChangeLog.v1 Mon Mar 15 01:02:36 2010 @@ -0,0 +1,764 @@ +The libffi version 1 ChangeLog archive. + +Version 1 of libffi had per-directory ChangeLogs. Current and future +versions have a single ChangeLog file in the root directory. The +version 1 ChangeLogs have all been concatonated into this file for +future reference only. + +--- libffi ---------------------------------------------------------------- + +Mon Oct 5 02:17:50 1998 Anthony Green + + * configure.in: Boosted rev. + * configure, Makefile.in, aclocal.m4: Rebuilt. + * README: Boosted rev and updated release notes. + +Mon Oct 5 01:03:03 1998 Anthony Green + + * configure.in: Boosted rev. + * configure, Makefile.in, aclocal.m4: Rebuilt. + * README: Boosted rev and updated release notes. + +1998-07-25 Andreas Schwab + + * m68k/ffi.c (ffi_prep_cif_machdep): Use bitmask for cif->flags. + Correctly handle small structures. + (ffi_prep_args): Also handle small structures. + (ffi_call): Pass size of return type to ffi_call_SYSV. + * m68k/sysv.S: Adjust for above changes. Correctly align small + structures in the return value. + + * types.c (uint64, sint64) [M68K]: Change alignment to 4. + +Fri Apr 17 17:26:58 1998 Anthony Green + + * configure.in: Boosted rev. + * configure,Makefile.in,aclocal.m4: Rebuilt. + * README: Boosted rev and added release notes. + +Sun Feb 22 00:50:41 1998 Geoff Keating + + * configure.in: Add PowerPC config bits. + +1998-02-14 Andreas Schwab + + * configure.in: Add m68k config bits. Change AC_CANONICAL_SYSTEM + to AC_CANONICAL_HOST, this is not a compiler. Use $host instead + of $target. Remove AC_CHECK_SIZEOF(char), we already know the + result. Fix argument of AC_ARG_ENABLE. + * configure, fficonfig.h.in: Rebuilt. + +Tue Feb 10 20:53:40 1998 Richard Henderson + + * configure.in: Add Alpha config bits. + +Tue May 13 13:39:20 1997 Anthony Green + + * README: Updated dates and reworded Irix comments. + + * configure.in: Removed AC_PROG_RANLIB. + + * Makefile.in, aclocal.m4, config.guess, config.sub, configure, + ltmain.sh, */Makefile.in: libtoolized again and rebuilt with + automake and autoconf. + +Sat May 10 18:44:50 1997 Tom Tromey + + * configure, aclocal.m4: Rebuilt. + * configure.in: Don't compute EXTRADIST; now handled in + src/Makefile.in. Removed macros implied by AM_INIT_AUTOMAKE. + Don't run AM_MAINTAINER_MODE. + +Thu May 8 14:34:05 1997 Anthony Green + + * missing, ltmain.sh, ltconfig.sh: Created. These are new files + required by automake and libtool. + + * README: Boosted rev to 1.14. Added notes. + + * acconfig.h: Moved PACKAGE and VERSION for new automake. + + * configure.in: Changes for libtool. + + * Makefile.am (check): make test now make check. Uses libtool now. + + * Makefile.in, configure.in, aclocal.h, fficonfig.h.in: Rebuilt. + +Thu May 1 16:27:07 1997 Anthony Green + + * missing: Added file required by new automake. + +Tue Nov 26 14:10:42 1996 Anthony Green + + * acconfig.h: Added USING_PURIFY flag. This is defined when + --enable-purify-safety was used at configure time. + + * configure.in (allsources): Added --enable-purify-safety switch. + (VERSION): Boosted rev to 1.13. + * configure: Rebuilt. + +Fri Nov 22 06:46:12 1996 Anthony Green + + * configure.in (VERSION): Boosted rev to 1.12. + Removed special CFLAGS hack for gcc. + * configure: Rebuilt. + + * README: Boosted rev to 1.12. Added notes. + + * Many files: Cygnus Support changed to Cygnus Solutions. + +Wed Oct 30 11:15:25 1996 Anthony Green + + * configure.in (VERSION): Boosted rev to 1.11. + * configure: Rebuilt. + + * README: Boosted rev to 1.11. Added notes about GNU make. + +Tue Oct 29 12:25:12 1996 Anthony Green + + * configure.in: Fixed -Wall trick. + (VERSION): Boosted rev. + * configure: Rebuilt + + * acconfig.h: Needed for --enable-debug configure switch. + + * README: Boosted rev to 1.09. Added more notes on building + libffi, and LCLint. + + * configure.in: Added --enable-debug switch. Boosted rev to + 1.09. + * configure: Rebuilt + +Tue Oct 15 13:11:28 1996 Anthony Green + + * configure.in (VERSION): Boosted rev to 1.08 + * configure: Rebuilt. + + * README: Added n32 bug fix notes. + + * Makefile.am: Added "make lint" production. + * Makefile.in: Rebuilt. + +Mon Oct 14 10:54:46 1996 Anthony Green + + * README: Added web page reference. + + * configure.in, README: Boosted rev to 1.05 + * configure: Rebuilt. + + * README: Fixed n32 sample code. + +Fri Oct 11 17:09:28 1996 Anthony Green + + * README: Added sparc notes. + + * configure.in, README: Boosted rev to 1.04. + * configure: Rebuilt. + +Thu Oct 10 10:31:03 1996 Anthony Green + + * configure.in, README: Boosted rev to 1.03. + * configure: Rebuilt. + + * README: Added struct notes. + + * Makefile.am (EXTRA_DIST): Added LICENSE to distribution. + * Makefile.in: Rebuilt. + + * README: Removed Linux section. No special notes now + because aggregates arg/return types work. + +Wed Oct 9 16:16:42 1996 Anthony Green + + * README, configure.in (VERSION): Boosted rev to 1.02 + * configure: Rebuilt. + +Tue Oct 8 11:56:33 1996 Anthony Green + + * README (NOTE): Added n32 notes. + + * Makefile.am: Added test production. + * Makefile: Rebuilt + + * README: spell checked! + + * configure.in (VERSION): Boosted rev to 1.01 + * configure: Rebuilt. + +Mon Oct 7 15:50:22 1996 Anthony Green + + * configure.in: Added nasty bit to support SGI tools. + * configure: Rebuilt. + + * README: Added SGI notes. Added note about automake bug. + +Mon Oct 7 11:00:28 1996 Anthony Green + + * README: Rewrote intro, and fixed examples. + +Fri Oct 4 10:19:55 1996 Anthony Green + + * configure.in: -D$TARGET is no longer used as a compiler switch. + It is now inserted into ffi.h at configure time. + * configure: Rebuilt. + + * FFI_ABI and FFI_STATUS are now ffi_abi and ffi_status. + +Thu Oct 3 13:47:34 1996 Anthony Green + + * README, LICENSE: Created. Wrote some docs. + + * configure.in: Don't barf on i586-unknown-linuxaout. + Added EXTRADIST code for "make dist". + * configure: Rebuilt. + + * */Makefile.in: Rebuilt with patched automake. + +Tue Oct 1 17:12:25 1996 Anthony Green + + * Makefile.am, aclocal.m4, config.guess, config.sub, + configure.in, fficonfig.h.in, install-sh, mkinstalldirs, + stamp-h.in: Created + * Makefile.in, configure: Generated + +--- libffi/include -------------------------------------------------------- + +Tue Feb 24 13:09:36 1998 Anthony Green + + * ffi_mips.h: Updated FFI_TYPE_STRUCT_* values based on + ffi.h.in changes. This is a work-around for SGI's "simple" + assembler. + +Sun Feb 22 00:51:55 1998 Geoff Keating + + * ffi.h.in: PowerPC support. + +1998-02-14 Andreas Schwab + + * ffi.h.in: Add m68k support. + (FFI_TYPE_LONGDOUBLE): Make it a separate value. + +Tue Feb 10 20:55:16 1998 Richard Henderson + + * ffi.h.in (SIZEOF_ARG): Use a pointer type by default. + + * ffi.h.in: Alpha support. + +Fri Nov 22 06:48:45 1996 Anthony Green + + * ffi.h.in, ffi_common.h: Cygnus Support -> Cygnus Solutions. + +Wed Nov 20 22:31:01 1996 Anthony Green + + * ffi.h.in: Added ffi_type_void definition. + +Tue Oct 29 12:22:40 1996 Anthony Green + + * Makefile.am (hack_DATA): Always install ffi_mips.h. + + * ffi.h.in: Removed FFI_DEBUG. It's now in the correct + place (acconfig.h). + Added #include for size_t definition. + +Tue Oct 15 17:23:35 1996 Anthony Green + + * ffi.h.in, ffi_common.h, ffi_mips.h: More clean up. + Commented out #define of FFI_DEBUG. + +Tue Oct 15 13:01:06 1996 Anthony Green + + * ffi_common.h: Added bool definition. + + * ffi.h.in, ffi_common.h: Clean up based on LCLint output. + Added funny /*@...@*/ comments to annotate source. + +Mon Oct 14 12:29:23 1996 Anthony Green + + * ffi.h.in: Interface changes based on feedback from Jim + Blandy. + +Fri Oct 11 16:49:35 1996 Anthony Green + + * ffi.h.in: Small change for sparc support. + +Thu Oct 10 14:53:37 1996 Anthony Green + + * ffi_mips.h: Added FFI_TYPE_STRUCT_* definitions for + special structure return types. + +Wed Oct 9 13:55:57 1996 Anthony Green + + * ffi.h.in: Added SIZEOF_ARG definition for X86 + +Tue Oct 8 11:40:36 1996 Anthony Green + + * ffi.h.in (FFI_FN): Added macro for eliminating compiler warnings. + Use it to case your function pointers to the proper type. + + * ffi_mips.h (SIZEOF_ARG): Added magic to fix type promotion bug. + + * Makefile.am (EXTRA_DIST): Added ffi_mips.h to EXTRA_DIST. + * Makefile: Rebuilt. + + * ffi_mips.h: Created. Moved all common mips definitions here. + +Mon Oct 7 10:58:12 1996 Anthony Green + + * ffi.h.in: The SGI assember is very picky about parens. Redefined + some macros to avoid problems. + + * ffi.h.in: Added FFI_DEFAULT_ABI definitions. Also added + externs for pointer, and 64bit integral ffi_types. + +Fri Oct 4 09:51:37 1996 Anthony Green + + * ffi.h.in: Added FFI_ABI member to ffi_cif and changed + function prototypes accordingly. + Added #define @TARGET at . Now programs including ffi.h don't + have to specify this themselves. + +Thu Oct 3 15:36:44 1996 Anthony Green + + * ffi.h.in: Changed ffi_prep_cif's values from void* to void** + + * Makefile.am (EXTRA_DIST): Added EXTRA_DIST for "make dist" + to work. + * Makefile.in: Regenerated. + +Wed Oct 2 10:16:59 1996 Anthony Green + + * Makefile.am: Created + * Makefile.in: Generated + + * ffi_common.h: Added rcsid comment + +Tue Oct 1 17:13:51 1996 Anthony Green + + * ffi.h.in, ffi_common.h: Created + +--- libffi/src ------------------------------------------------------------ + +Mon Oct 5 02:17:50 1998 Anthony Green + + * arm/ffi.c, arm/sysv.S: Created. + + * Makefile.am: Added arm files. + * Makefile.in: Rebuilt. + +Mon Oct 5 01:41:38 1998 Anthony Green + + * Makefile.am (libffi_la_LDFLAGS): Incremented revision. + +Sun Oct 4 16:27:17 1998 Anthony Green + + * alpha/osf.S (ffi_call_osf): Patch for DU assembler. + + * ffitest.c (main): long long and long double return values work + for x86. + +Fri Apr 17 11:50:58 1998 Anthony Green + + * Makefile.in: Rebuilt. + + * ffitest.c (main): Floating point tests not executed for systems + with broken lond double (SunOS 4 w/ GCC). + + * types.c: Fixed x86 alignment info for long long types. + +Thu Apr 16 07:15:28 1998 Anthony Green + + * ffitest.c: Added more notes about GCC bugs under Irix 6. + +Wed Apr 15 08:42:22 1998 Anthony Green + + * ffitest.c (struct5): New test function. + (main): New test with struct5. + +Thu Mar 5 10:48:11 1998 Anthony Green + + * prep_cif.c (initialize_aggregate): Fix assertion for + nested structures. + +Tue Feb 24 16:33:41 1998 Anthony Green + + * prep_cif.c (ffi_prep_cif): Added long double support for sparc. + +Sun Feb 22 00:52:18 1998 Geoff Keating + + * powerpc/asm.h: New file. + * powerpc/ffi.c: New file. + * powerpc/sysv.S: New file. + * Makefile.am: PowerPC port. + * ffitest.c (main): Allow all tests to run even in presence of gcc + bug on PowerPC. + +1998-02-17 Anthony Green + + * mips/ffi.c: Fixed comment typo. + + * x86/ffi.c (ffi_prep_cif_machdep), x86/sysv.S (retfloat): + Fixed x86 long double return handling. + + * types.c: Fixed x86 long double alignment info. + +1998-02-14 Andreas Schwab + + * types.c: Add m68k support. + + * ffitest.c (floating): Add long double parameter. + (return_ll, ldblit): New functions to test long long and long + double return value. + (main): Fix type error in assignment of ts[1-4]_type.elements. + Add tests for long long and long double arguments and return + values. + + * prep_cif.c (ffi_prep_cif) [M68K]: Don't allocate argument for + struct value pointer. + + * m68k/ffi.c, m68k/sysv.S: New files. + * Makefile.am: Add bits for m68k port. Add kludge to work around + automake deficiency. + (test): Don't require "." in $PATH. + * Makefile.in: Rebuilt. + +Wed Feb 11 07:36:50 1998 Anthony Green + + * Makefile.in: Rebuilt. + +Tue Feb 10 20:56:00 1998 Richard Henderson + + * alpha/ffi.c, alpha/osf.S: New files. + * Makefile.am: Alpha port. + +Tue Nov 18 14:12:07 1997 Anthony Green + + * mips/ffi.c (ffi_prep_cif_machdep): Initialize rstruct_flag + for n32. + +Tue Jun 3 17:18:20 1997 Anthony Green + + * ffitest.c (main): Added hack to get structure tests working + correctly. + +Sat May 10 19:06:42 1997 Tom Tromey + + * Makefile.in: Rebuilt. + * Makefile.am (EXTRA_DIST): Explicitly list all distributable + files in subdirs. + (VERSION, CC): Removed. + +Thu May 8 17:19:01 1997 Anthony Green + + * Makefile.am: Many changes for new automake and libtool. + * Makefile.in: Rebuilt. + +Fri Nov 22 06:57:56 1996 Anthony Green + + * ffitest.c (main): Fixed test case for non mips machines. + +Wed Nov 20 22:31:59 1996 Anthony Green + + * types.c: Added ffi_type_void declaration. + +Tue Oct 29 13:07:19 1996 Anthony Green + + * ffitest.c (main): Fixed character constants. + (main): Emit warning for structure test 3 failure on Sun. + + * Makefile.am (VPATH): Fixed VPATH def'n so automake won't + strip it out. + Moved distdir hack from libffi to automake. + (ffitest): Added missing -c for $(COMPILE) (change in automake). + * Makefile.in: Rebuilt. + +Tue Oct 15 13:08:20 1996 Anthony Green + + * Makefile.am: Added "make lint" production. + * Makefile.in: Rebuilt. + + * prep_cif.c (STACK_ARG_SIZE): Improved STACK_ARG_SIZE macro. + Clean up based on LCLint output. Added funny /*@...@*/ comments to + annotate source. + + * ffitest.c, debug.c: Cleaned up code. + +Mon Oct 14 12:26:56 1996 Anthony Green + + * ffitest.c: Changes based on interface changes. + + * prep_cif.c (ffi_prep_cif): Cleaned up interface based on + feedback from Jim Blandy. + +Fri Oct 11 15:53:18 1996 Anthony Green + + * ffitest.c: Reordered tests while porting to sparc. + Made changes to handle lame structure passing for sparc. + Removed calls to fflush(). + + * prep_cif.c (ffi_prep_cif): Added special case for sparc + aggregate type arguments. + +Thu Oct 10 09:56:51 1996 Anthony Green + + * ffitest.c (main): Added structure passing/returning tests. + + * prep_cif.c (ffi_prep_cif): Perform proper initialization + of structure return types if needed. + (initialize_aggregate): Bug fix + +Wed Oct 9 16:04:20 1996 Anthony Green + + * types.c: Added special definitions for x86 (double doesn't + need double word alignment). + + * ffitest.c: Added many tests + +Tue Oct 8 09:19:22 1996 Anthony Green + + * prep_cif.c (ffi_prep_cif): Fixed assertion. + + * debug.c (ffi_assert): Must return a non void now. + + * Makefile.am: Added test production. + * Makefile: Rebuilt. + + * ffitest.c (main): Created. + + * types.c: Created. Stripped common code out of */ffi.c. + + * prep_cif.c: Added missing stdlib.h include. + + * debug.c (ffi_type_test): Used "a" to eliminate compiler + warnings in non-debug builds. Included ffi_common.h. + +Mon Oct 7 15:36:42 1996 Anthony Green + + * Makefile.am: Added a rule for .s -> .o + This is required by the SGI compiler. + * Makefile: Rebuilt. + +Fri Oct 4 09:51:08 1996 Anthony Green + + * prep_cif.c (initialize_aggregate): Moved abi specification + to ffi_prep_cif(). + +Thu Oct 3 15:37:37 1996 Anthony Green + + * prep_cif.c (ffi_prep_cif): Changed values from void* to void**. + (initialize_aggregate): Fixed aggregate type initialization. + + * Makefile.am (EXTRA_DIST): Added support code for "make dist". + * Makefile.in: Regenerated. + +Wed Oct 2 11:41:57 1996 Anthony Green + + * debug.c, prep_cif: Created. + + * Makefile.am: Added debug.o and prep_cif.o to OBJ. + * Makefile.in: Regenerated. + + * Makefile.am (INCLUDES): Added missing -I../include + * Makefile.in: Regenerated. + +Tue Oct 1 17:11:51 1996 Anthony Green + + * error.c, Makefile.am: Created. + * Makefile.in: Generated. + +--- libffi/src/x86 -------------------------------------------------------- + +Sun Oct 4 16:27:17 1998 Anthony Green + + * sysv.S (retlongdouble): Fixed long long return value support. + * ffi.c (ffi_prep_cif_machdep): Ditto. + +Wed May 13 04:30:33 1998 Anthony Green + + * ffi.c (ffi_prep_cif_machdep): Fixed long double return value + support. + +Wed Apr 15 08:43:20 1998 Anthony Green + + * ffi.c (ffi_prep_args): small struct support was missing. + +Thu May 8 16:53:58 1997 Anthony Green + + * objects.mak: Removed. + +Mon Dec 2 15:12:58 1996 Tom Tromey + + * sysv.S: Use .balign, for a.out Linux boxes. + +Tue Oct 15 13:06:50 1996 Anthony Green + + * ffi.c: Clean up based on LCLint output. + Added funny /*@...@*/ comments to annotate source. + +Fri Oct 11 16:43:38 1996 Anthony Green + + * ffi.c (ffi_call): Added assertion for bad ABIs. + +Wed Oct 9 13:57:27 1996 Anthony Green + + * sysv.S (retdouble): Fixed double return problems. + + * ffi.c (ffi_call): Corrected fn arg definition. + (ffi_prep_cif_machdep): Fixed double return problems + +Tue Oct 8 12:12:49 1996 Anthony Green + + * ffi.c: Moved ffi_type definitions to types.c. + (ffi_prep_args): Fixed type promotion bug. + +Mon Oct 7 15:53:06 1996 Anthony Green + + * ffi.c (FFI_*_TYPEDEF): Removed redundant ';' + +Fri Oct 4 09:54:53 1996 Anthony Green + + * ffi.c (ffi_call): Removed FFI_ABI arg, and swapped + remaining args. + +Wed Oct 2 10:07:05 1996 Anthony Green + + * ffi.c, sysv.S, objects.mak: Created. + (ffi_prep_cif): cif->rvalue no longer initialized to NULL. + (ffi_prep_cif_machdep): Moved machine independent cif processing + to src/prep_cif.c. Introduced ffi_prep_cif_machdep(). + +--- libffi/src/mips ------------------------------------------------------- + +Tue Feb 17 17:18:07 1998 Anthony Green + + * o32.S: Fixed typo in comment. + + * ffi.c (ffi_prep_cif_machdep): Fixed argument processing. + +Thu May 8 16:53:58 1997 Anthony Green + + * o32.s, n32.s: Wrappers for SGI tool support. + + * objects.mak: Removed. + +Tue Oct 29 14:37:45 1996 Anthony Green + + * ffi.c (ffi_prep_args): Changed int z to size_t z. + +Tue Oct 15 13:17:25 1996 Anthony Green + + * n32.S: Fixed bad stack munging. + + * ffi.c: Moved prototypes for ffi_call_?32() to here from + ffi_mips.h because extended_cif is not defined in ffi_mips.h. + +Mon Oct 14 12:42:02 1996 Anthony Green + + * ffi.c: Interface changes based on feedback from Jim Blandy. + +Thu Oct 10 11:22:16 1996 Anthony Green + + * n32.S, ffi.c: Lots of changes to support passing and + returning structures with the n32 calling convention. + + * n32.S: Fixed fn pointer bug. + + * ffi.c (ffi_prep_cif_machdep): Fix for o32 structure + return values. + (ffi_prep_args): Fixed n32 structure passing when structures + partially fit in registers. + +Wed Oct 9 13:49:25 1996 Anthony Green + + * objects.mak: Added n32.o. + + * n32.S: Created. + + * ffi.c (ffi_prep_args): Added magic to support proper + n32 processing. + +Tue Oct 8 10:37:35 1996 Anthony Green + + * ffi.c: Moved ffi_type definitions to types.c. + (ffi_prep_args): Fixed type promotion bug. + + * o32.S: This code is only built for o32 compiles. + A lot of the #define cruft has moved to ffi_mips.h. + + * ffi.c (ffi_prep_cif_machdep): Fixed arg flags. Second arg + is only processed if the first is either a float or double. + +Mon Oct 7 15:33:59 1996 Anthony Green + + * o32.S: Modified to compile under each of o32, n32 and n64. + + * ffi.c (FFI_*_TYPEDEF): Removed redundant ';' + +Fri Oct 4 09:53:25 1996 Anthony Green + + * ffi.c (ffi_call): Removed FFI_ABI arg, and swapped + remaining args. + +Wed Oct 2 17:41:22 1996 Anthony Green + + * o32.S: Removed crufty definitions. + +Wed Oct 2 12:53:42 1996 Anthony Green + + * ffi.c (ffi_prep_cif): cif->rvalue no longer initialized to NULL. + (ffi_prep_cif_machdep): Moved all machine independent cif processing + to src/prep_cif.c. Introduced ffi_prep_cif_machdep. Return types + of FFI_TYPE_STRUCT are no different than FFI_TYPE_INT. + +Tue Oct 1 17:11:02 1996 Anthony Green + + * ffi.c, o32.S, object.mak: Created + +--- libffi/src/sparc ------------------------------------------------------ + +Tue Feb 24 16:33:18 1998 Anthony Green + + * ffi.c (ffi_prep_args): Added long double support. + +Thu May 8 16:53:58 1997 Anthony Green + + * objects.mak: Removed. + +Thu May 1 16:07:56 1997 Anthony Green + + * v8.S: Fixed minor portability problem reported by + Russ McManus . + +Tue Nov 26 14:12:43 1996 Anthony Green + + * v8.S: Used STACKFRAME define elsewhere. + + * ffi.c (ffi_prep_args): Zero out space when USING_PURIFY + is set. + (ffi_prep_cif_machdep): Allocate the correct stack frame + space for functions with < 6 args. + +Tue Oct 29 15:08:55 1996 Anthony Green + + * ffi.c (ffi_prep_args): int z is now size_t z. + +Mon Oct 14 13:31:24 1996 Anthony Green + + * v8.S (ffi_call_V8): Gordon rewrites this again. It looks + great now. + + * ffi.c (ffi_call): The comment about hijacked registers + is no longer valid after gordoni hacked v8.S. + + * v8.S (ffi_call_V8): Rewrote with gordoni. Much simpler. + + * v8.S, ffi.c: ffi_call() had changed to accept more than + two args, so v8.S had to change (because it hijacks incoming + arg registers). + + * ffi.c: Interface changes based on feedback from Jim Blandy. + +Thu Oct 10 17:48:16 1996 Anthony Green + + * ffi.c, v8.S, objects.mak: Created. + + Modified: python/trunk/Modules/_ctypes/libffi/LICENSE ============================================================================== --- python/trunk/Modules/_ctypes/libffi/LICENSE (original) +++ python/trunk/Modules/_ctypes/libffi/LICENSE Mon Mar 15 01:02:36 2010 @@ -1,4 +1,4 @@ -libffi - Copyright (c) 1996-2008 Red Hat, Inc and others. +libffi - Copyright (c) 1996-2009 Anthony Green, Red Hat, Inc and others. See source files for details. Permission is hereby granted, free of charge, to any person obtaining Modified: python/trunk/Modules/_ctypes/libffi/Makefile.am ============================================================================== --- python/trunk/Modules/_ctypes/libffi/Makefile.am (original) +++ python/trunk/Modules/_ctypes/libffi/Makefile.am Mon Mar 15 01:02:36 2010 @@ -7,6 +7,7 @@ EXTRA_DIST = LICENSE ChangeLog.v1 ChangeLog.libgcj configure.host \ src/alpha/ffi.c src/alpha/osf.S src/alpha/ffitarget.h \ src/arm/ffi.c src/arm/sysv.S src/arm/ffitarget.h \ + src/avr32/ffi.c src/avr32/sysv.S src/avr32/ffitarget.h \ src/cris/ffi.c src/cris/sysv.S src/cris/ffitarget.h \ src/ia64/ffi.c src/ia64/ffitarget.h src/ia64/ia64_flags.h \ src/ia64/unix.S \ @@ -25,12 +26,13 @@ src/sh64/ffi.c src/sh64/sysv.S src/sh64/ffitarget.h \ src/sparc/v8.S src/sparc/v9.S src/sparc/ffitarget.h \ src/sparc/ffi.c src/x86/darwin64.S \ - src/x86/ffi.c src/x86/sysv.S src/x86/win32.S src/x86/darwin.S \ - src/x86/freebsd.S \ + src/x86/ffi.c src/x86/sysv.S src/x86/win32.S src/x86/win64.S \ + src/x86/darwin.S src/x86/freebsd.S \ src/x86/ffi64.c src/x86/unix64.S src/x86/ffitarget.h \ src/pa/ffitarget.h src/pa/ffi.c src/pa/linux.S src/pa/hpux32.S \ src/frv/ffi.c src/frv/eabi.S src/frv/ffitarget.h src/dlmalloc.c \ - libtool-version ChangeLog.libffi + libtool-version ChangeLog.libffi m4/libtool.m4 \ + m4/lt~obsolete.m4 m4/ltoptions.m4 m4/ltsugar.m4 m4/ltversion.m4 info_TEXINFOS = doc/libffi.texi @@ -79,6 +81,8 @@ MAKEOVERRIDES= +ACLOCAL_AMFLAGS=$(ACLOCAL_AMFLAGS) -I m4 + lib_LTLIBRARIES = libffi.la noinst_LTLIBRARIES = libffi_convenience.la @@ -102,6 +106,9 @@ if X86_WIN32 nodist_libffi_la_SOURCES += src/x86/ffi.c src/x86/win32.S endif +if X86_WIN64 +nodist_libffi_la_SOURCES += src/x86/ffi.c src/x86/win64.S +endif if X86_DARWIN nodist_libffi_la_SOURCES += src/x86/ffi.c src/x86/darwin.S src/x86/ffi64.c src/x86/darwin64.S endif @@ -135,6 +142,9 @@ if ARM nodist_libffi_la_SOURCES += src/arm/sysv.S src/arm/ffi.c endif +if AVR32 +nodist_libffi_la_SOURCES += src/avr32/sysv.S src/avr32/ffi.c +endif if LIBFFI_CRIS nodist_libffi_la_SOURCES += src/cris/sysv.S src/cris/ffi.c endif @@ -165,7 +175,7 @@ AM_CFLAGS = -Wall -g -fexceptions -libffi_la_LDFLAGS = -version-info `grep -v '^\#' $(srcdir)/libtool-version` +libffi_la_LDFLAGS = -version-info `grep -v '^\#' $(srcdir)/libtool-version` $(AM_LTLDFLAGS) AM_CPPFLAGS = -I. -I$(top_srcdir)/include -Iinclude -I$(top_srcdir)/src AM_CCASFLAGS = $(AM_CPPFLAGS) Modified: python/trunk/Modules/_ctypes/libffi/Makefile.in ============================================================================== --- python/trunk/Modules/_ctypes/libffi/Makefile.in (original) +++ python/trunk/Modules/_ctypes/libffi/Makefile.in Mon Mar 15 01:02:36 2010 @@ -1,8 +1,9 @@ -# Makefile.in generated by automake 1.10 from Makefile.am. +# Makefile.in generated by automake 1.11 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, -# 2003, 2004, 2005, 2006 Free Software Foundation, Inc. +# 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, +# Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. @@ -17,8 +18,9 @@ VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ -pkglibdir = $(libdir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c @@ -38,33 +40,34 @@ @X86_TRUE at am__append_2 = src/x86/ffi.c src/x86/sysv.S @X86_FREEBSD_TRUE at am__append_3 = src/x86/ffi.c src/x86/freebsd.S @X86_WIN32_TRUE at am__append_4 = src/x86/ffi.c src/x86/win32.S - at X86_DARWIN_TRUE@am__append_5 = src/x86/ffi.c src/x86/darwin.S src/x86/ffi64.c src/x86/darwin64.S - at SPARC_TRUE@am__append_6 = src/sparc/ffi.c src/sparc/v8.S src/sparc/v9.S - at ALPHA_TRUE@am__append_7 = src/alpha/ffi.c src/alpha/osf.S - at IA64_TRUE@am__append_8 = src/ia64/ffi.c src/ia64/unix.S - at M32R_TRUE@am__append_9 = src/m32r/sysv.S src/m32r/ffi.c - at M68K_TRUE@am__append_10 = src/m68k/ffi.c src/m68k/sysv.S - at POWERPC_TRUE@am__append_11 = src/powerpc/ffi.c src/powerpc/sysv.S src/powerpc/ppc_closure.S src/powerpc/linux64.S src/powerpc/linux64_closure.S - at POWERPC_AIX_TRUE@am__append_12 = src/powerpc/ffi_darwin.c src/powerpc/aix.S src/powerpc/aix_closure.S - at POWERPC_DARWIN_TRUE@am__append_13 = src/powerpc/ffi_darwin.c src/powerpc/darwin.S src/powerpc/darwin_closure.S - at POWERPC_FREEBSD_TRUE@am__append_14 = src/powerpc/ffi.c src/powerpc/sysv.S src/powerpc/ppc_closure.S - at ARM_TRUE@am__append_15 = src/arm/sysv.S src/arm/ffi.c - at LIBFFI_CRIS_TRUE@am__append_16 = src/cris/sysv.S src/cris/ffi.c - at FRV_TRUE@am__append_17 = src/frv/eabi.S src/frv/ffi.c - at S390_TRUE@am__append_18 = src/s390/sysv.S src/s390/ffi.c - at X86_64_TRUE@am__append_19 = src/x86/ffi64.c src/x86/unix64.S src/x86/ffi.c src/x86/sysv.S - at SH_TRUE@am__append_20 = src/sh/sysv.S src/sh/ffi.c - at SH64_TRUE@am__append_21 = src/sh64/sysv.S src/sh64/ffi.c - at PA_LINUX_TRUE@am__append_22 = src/pa/linux.S src/pa/ffi.c - at PA_HPUX_TRUE@am__append_23 = src/pa/hpux32.S src/pa/ffi.c + at X86_WIN64_TRUE@am__append_5 = src/x86/ffi.c src/x86/win64.S + at X86_DARWIN_TRUE@am__append_6 = src/x86/ffi.c src/x86/darwin.S src/x86/ffi64.c src/x86/darwin64.S + at SPARC_TRUE@am__append_7 = src/sparc/ffi.c src/sparc/v8.S src/sparc/v9.S + at ALPHA_TRUE@am__append_8 = src/alpha/ffi.c src/alpha/osf.S + at IA64_TRUE@am__append_9 = src/ia64/ffi.c src/ia64/unix.S + at M32R_TRUE@am__append_10 = src/m32r/sysv.S src/m32r/ffi.c + at M68K_TRUE@am__append_11 = src/m68k/ffi.c src/m68k/sysv.S + at POWERPC_TRUE@am__append_12 = src/powerpc/ffi.c src/powerpc/sysv.S src/powerpc/ppc_closure.S src/powerpc/linux64.S src/powerpc/linux64_closure.S + at POWERPC_AIX_TRUE@am__append_13 = src/powerpc/ffi_darwin.c src/powerpc/aix.S src/powerpc/aix_closure.S + at POWERPC_DARWIN_TRUE@am__append_14 = src/powerpc/ffi_darwin.c src/powerpc/darwin.S src/powerpc/darwin_closure.S + at POWERPC_FREEBSD_TRUE@am__append_15 = src/powerpc/ffi.c src/powerpc/sysv.S src/powerpc/ppc_closure.S + at ARM_TRUE@am__append_16 = src/arm/sysv.S src/arm/ffi.c + at AVR32_TRUE@am__append_17 = src/avr32/sysv.S src/avr32/ffi.c + at LIBFFI_CRIS_TRUE@am__append_18 = src/cris/sysv.S src/cris/ffi.c + at FRV_TRUE@am__append_19 = src/frv/eabi.S src/frv/ffi.c + at S390_TRUE@am__append_20 = src/s390/sysv.S src/s390/ffi.c + at X86_64_TRUE@am__append_21 = src/x86/ffi64.c src/x86/unix64.S src/x86/ffi.c src/x86/sysv.S + at SH_TRUE@am__append_22 = src/sh/sysv.S src/sh/ffi.c + at SH64_TRUE@am__append_23 = src/sh64/sysv.S src/sh64/ffi.c + at PA_LINUX_TRUE@am__append_24 = src/pa/linux.S src/pa/ffi.c + at PA_HPUX_TRUE@am__append_25 = src/pa/hpux32.S src/pa/ffi.c subdir = . DIST_COMMON = README $(am__configure_deps) $(srcdir)/Makefile.am \ $(srcdir)/Makefile.in $(srcdir)/doc/stamp-vti \ $(srcdir)/doc/version.texi $(srcdir)/fficonfig.h.in \ - $(srcdir)/libffi.pc.in $(top_srcdir)/configure ChangeLog TODO \ - compile config.guess config.sub depcomp install-sh ltcf-c.sh \ - ltcf-cxx.sh ltcf-gcj.sh ltconfig ltmain.sh mdate-sh missing \ - mkinstalldirs texinfo.tex + $(srcdir)/libffi.pc.in $(top_srcdir)/configure ChangeLog \ + compile config.guess config.sub depcomp install-sh ltmain.sh \ + mdate-sh missing texinfo.tex ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/acinclude.m4 \ $(top_srcdir)/configure.ac @@ -72,18 +75,33 @@ $(ACLOCAL_M4) am__CONFIG_DISTCLEAN_FILES = config.status config.cache config.log \ configure.lineno config.status.lineno -mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs +mkinstalldirs = $(install_sh) -d CONFIG_HEADER = fficonfig.h CONFIG_CLEAN_FILES = libffi.pc +CONFIG_CLEAN_VPATH_FILES = am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; -am__strip_dir = `echo $$p | sed -e 's|^.*/||'`; +am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; +am__install_max = 40 +am__nobase_strip_setup = \ + srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` +am__nobase_strip = \ + for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" +am__nobase_list = $(am__nobase_strip_setup); \ + for p in $$list; do echo "$$p $$p"; done | \ + sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ + $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ + if (++n[$$2] == $(am__install_max)) \ + { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ + END { for (dir in files) print dir, files[dir] }' +am__base_list = \ + sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ + sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__installdirs = "$(DESTDIR)$(libdir)" "$(DESTDIR)$(infodir)" \ "$(DESTDIR)$(pkgconfigdir)" -libLTLIBRARIES_INSTALL = $(INSTALL) LTLIBRARIES = $(lib_LTLIBRARIES) $(noinst_LTLIBRARIES) libffi_la_LIBADD = am__dirstamp = $(am__leading_dot)dirstamp @@ -94,37 +112,39 @@ @X86_TRUE at am__objects_2 = src/x86/ffi.lo src/x86/sysv.lo @X86_FREEBSD_TRUE at am__objects_3 = src/x86/ffi.lo src/x86/freebsd.lo @X86_WIN32_TRUE at am__objects_4 = src/x86/ffi.lo src/x86/win32.lo - at X86_DARWIN_TRUE@am__objects_5 = src/x86/ffi.lo src/x86/darwin.lo \ + at X86_WIN64_TRUE@am__objects_5 = src/x86/ffi.lo src/x86/win64.lo + at X86_DARWIN_TRUE@am__objects_6 = src/x86/ffi.lo src/x86/darwin.lo \ @X86_DARWIN_TRUE@ src/x86/ffi64.lo src/x86/darwin64.lo - at SPARC_TRUE@am__objects_6 = src/sparc/ffi.lo src/sparc/v8.lo \ + at SPARC_TRUE@am__objects_7 = src/sparc/ffi.lo src/sparc/v8.lo \ @SPARC_TRUE@ src/sparc/v9.lo - at ALPHA_TRUE@am__objects_7 = src/alpha/ffi.lo src/alpha/osf.lo - at IA64_TRUE@am__objects_8 = src/ia64/ffi.lo src/ia64/unix.lo - at M32R_TRUE@am__objects_9 = src/m32r/sysv.lo src/m32r/ffi.lo - at M68K_TRUE@am__objects_10 = src/m68k/ffi.lo src/m68k/sysv.lo - at POWERPC_TRUE@am__objects_11 = src/powerpc/ffi.lo src/powerpc/sysv.lo \ + at ALPHA_TRUE@am__objects_8 = src/alpha/ffi.lo src/alpha/osf.lo + at IA64_TRUE@am__objects_9 = src/ia64/ffi.lo src/ia64/unix.lo + at M32R_TRUE@am__objects_10 = src/m32r/sysv.lo src/m32r/ffi.lo + at M68K_TRUE@am__objects_11 = src/m68k/ffi.lo src/m68k/sysv.lo + at POWERPC_TRUE@am__objects_12 = src/powerpc/ffi.lo src/powerpc/sysv.lo \ @POWERPC_TRUE@ src/powerpc/ppc_closure.lo \ @POWERPC_TRUE@ src/powerpc/linux64.lo \ @POWERPC_TRUE@ src/powerpc/linux64_closure.lo - at POWERPC_AIX_TRUE@am__objects_12 = src/powerpc/ffi_darwin.lo \ + at POWERPC_AIX_TRUE@am__objects_13 = src/powerpc/ffi_darwin.lo \ @POWERPC_AIX_TRUE@ src/powerpc/aix.lo \ @POWERPC_AIX_TRUE@ src/powerpc/aix_closure.lo - at POWERPC_DARWIN_TRUE@am__objects_13 = src/powerpc/ffi_darwin.lo \ + at POWERPC_DARWIN_TRUE@am__objects_14 = src/powerpc/ffi_darwin.lo \ @POWERPC_DARWIN_TRUE@ src/powerpc/darwin.lo \ @POWERPC_DARWIN_TRUE@ src/powerpc/darwin_closure.lo - at POWERPC_FREEBSD_TRUE@am__objects_14 = src/powerpc/ffi.lo \ + at POWERPC_FREEBSD_TRUE@am__objects_15 = src/powerpc/ffi.lo \ @POWERPC_FREEBSD_TRUE@ src/powerpc/sysv.lo \ @POWERPC_FREEBSD_TRUE@ src/powerpc/ppc_closure.lo - at ARM_TRUE@am__objects_15 = src/arm/sysv.lo src/arm/ffi.lo - at LIBFFI_CRIS_TRUE@am__objects_16 = src/cris/sysv.lo src/cris/ffi.lo - at FRV_TRUE@am__objects_17 = src/frv/eabi.lo src/frv/ffi.lo - at S390_TRUE@am__objects_18 = src/s390/sysv.lo src/s390/ffi.lo - at X86_64_TRUE@am__objects_19 = src/x86/ffi64.lo src/x86/unix64.lo \ + at ARM_TRUE@am__objects_16 = src/arm/sysv.lo src/arm/ffi.lo + at AVR32_TRUE@am__objects_17 = src/avr32/sysv.lo src/avr32/ffi.lo + at LIBFFI_CRIS_TRUE@am__objects_18 = src/cris/sysv.lo src/cris/ffi.lo + at FRV_TRUE@am__objects_19 = src/frv/eabi.lo src/frv/ffi.lo + at S390_TRUE@am__objects_20 = src/s390/sysv.lo src/s390/ffi.lo + at X86_64_TRUE@am__objects_21 = src/x86/ffi64.lo src/x86/unix64.lo \ @X86_64_TRUE@ src/x86/ffi.lo src/x86/sysv.lo - at SH_TRUE@am__objects_20 = src/sh/sysv.lo src/sh/ffi.lo - at SH64_TRUE@am__objects_21 = src/sh64/sysv.lo src/sh64/ffi.lo - at PA_LINUX_TRUE@am__objects_22 = src/pa/linux.lo src/pa/ffi.lo - at PA_HPUX_TRUE@am__objects_23 = src/pa/hpux32.lo src/pa/ffi.lo + at SH_TRUE@am__objects_22 = src/sh/sysv.lo src/sh/ffi.lo + at SH64_TRUE@am__objects_23 = src/sh64/sysv.lo src/sh64/ffi.lo + at PA_LINUX_TRUE@am__objects_24 = src/pa/linux.lo src/pa/ffi.lo + at PA_HPUX_TRUE@am__objects_25 = src/pa/hpux32.lo src/pa/ffi.lo nodist_libffi_la_OBJECTS = $(am__objects_1) $(am__objects_2) \ $(am__objects_3) $(am__objects_4) $(am__objects_5) \ $(am__objects_6) $(am__objects_7) $(am__objects_8) \ @@ -132,30 +152,33 @@ $(am__objects_12) $(am__objects_13) $(am__objects_14) \ $(am__objects_15) $(am__objects_16) $(am__objects_17) \ $(am__objects_18) $(am__objects_19) $(am__objects_20) \ - $(am__objects_21) $(am__objects_22) $(am__objects_23) + $(am__objects_21) $(am__objects_22) $(am__objects_23) \ + $(am__objects_24) $(am__objects_25) libffi_la_OBJECTS = $(am_libffi_la_OBJECTS) \ $(nodist_libffi_la_OBJECTS) libffi_la_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(libffi_la_LDFLAGS) $(LDFLAGS) -o $@ libffi_convenience_la_LIBADD = -am__objects_24 = src/debug.lo src/prep_cif.lo src/types.lo \ +am__objects_26 = src/debug.lo src/prep_cif.lo src/types.lo \ src/raw_api.lo src/java_raw_api.lo src/closures.lo -am_libffi_convenience_la_OBJECTS = $(am__objects_24) -am__objects_25 = $(am__objects_1) $(am__objects_2) $(am__objects_3) \ +am_libffi_convenience_la_OBJECTS = $(am__objects_26) +am__objects_27 = $(am__objects_1) $(am__objects_2) $(am__objects_3) \ $(am__objects_4) $(am__objects_5) $(am__objects_6) \ $(am__objects_7) $(am__objects_8) $(am__objects_9) \ $(am__objects_10) $(am__objects_11) $(am__objects_12) \ $(am__objects_13) $(am__objects_14) $(am__objects_15) \ $(am__objects_16) $(am__objects_17) $(am__objects_18) \ $(am__objects_19) $(am__objects_20) $(am__objects_21) \ - $(am__objects_22) $(am__objects_23) -nodist_libffi_convenience_la_OBJECTS = $(am__objects_25) + $(am__objects_22) $(am__objects_23) $(am__objects_24) \ + $(am__objects_25) +nodist_libffi_convenience_la_OBJECTS = $(am__objects_27) libffi_convenience_la_OBJECTS = $(am_libffi_convenience_la_OBJECTS) \ $(nodist_libffi_convenience_la_OBJECTS) DEFAULT_INCLUDES = -I. at am__isrc@ depcomp = $(SHELL) $(top_srcdir)/depcomp am__depfiles_maybe = depfiles +am__mv = mv -f CPPASCOMPILE = $(CCAS) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CCASFLAGS) $(CCASFLAGS) LTCPPASCOMPILE = $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ @@ -193,10 +216,12 @@ install-pdf-recursive install-ps-recursive install-recursive \ installcheck-recursive installdirs-recursive pdf-recursive \ ps-recursive uninstall-recursive -pkgconfigDATA_INSTALL = $(INSTALL_DATA) DATA = $(pkgconfig_DATA) RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ distclean-recursive maintainer-clean-recursive +AM_RECURSIVE_TARGETS = $(RECURSIVE_TARGETS:-recursive=) \ + $(RECURSIVE_CLEAN_TARGETS:-recursive=) tags TAGS ctags CTAGS \ + distdir dist dist-all distcheck ETAGS = etags CTAGS = ctags DIST_SUBDIRS = $(SUBDIRS) @@ -204,9 +229,34 @@ distdir = $(PACKAGE)-$(VERSION) top_distdir = $(distdir) am__remove_distdir = \ - { test ! -d $(distdir) \ - || { find $(distdir) -type d ! -perm -200 -exec chmod u+w {} ';' \ - && rm -fr $(distdir); }; } + { test ! -d "$(distdir)" \ + || { find "$(distdir)" -type d ! -perm -200 -exec chmod u+w {} ';' \ + && rm -fr "$(distdir)"; }; } +am__relativize = \ + dir0=`pwd`; \ + sed_first='s,^\([^/]*\)/.*$$,\1,'; \ + sed_rest='s,^[^/]*/*,,'; \ + sed_last='s,^.*/\([^/]*\)$$,\1,'; \ + sed_butlast='s,/*[^/]*$$,,'; \ + while test -n "$$dir1"; do \ + first=`echo "$$dir1" | sed -e "$$sed_first"`; \ + if test "$$first" != "."; then \ + if test "$$first" = ".."; then \ + dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \ + dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \ + else \ + first2=`echo "$$dir2" | sed -e "$$sed_first"`; \ + if test "$$first2" = "$$first"; then \ + dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \ + else \ + dir2="../$$dir2"; \ + fi; \ + dir0="$$dir0"/"$$first"; \ + fi; \ + fi; \ + dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \ + done; \ + reldir="$$dir2" DIST_ARCHIVES = $(distdir).tar.gz GZIP_ENV = --best distuninstallcheck_listfiles = find . -type f -print @@ -214,6 +264,7 @@ ACLOCAL = @ACLOCAL@ ALLOCA = @ALLOCA@ AMTAR = @AMTAR@ +AM_LTLDFLAGS = @AM_LTLDFLAGS@ AM_RUNTESTFLAGS = @AM_RUNTESTFLAGS@ AR = @AR@ AUTOCONF = @AUTOCONF@ @@ -228,21 +279,17 @@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ -CXX = @CXX@ -CXXCPP = @CXXCPP@ -CXXDEPMODE = @CXXDEPMODE@ -CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ -ECHO = @ECHO@ +DSYMUTIL = @DSYMUTIL@ +DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ -F77 = @F77@ -FFLAGS = @FFLAGS@ +FGREP = @FGREP@ GREP = @GREP@ HAVE_LONG_DOUBLE = @HAVE_LONG_DOUBLE@ INSTALL = @INSTALL@ @@ -250,16 +297,23 @@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +LD = @LD@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ +LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ +NM = @NM@ +NMEDIT = @NMEDIT@ +OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ +OTOOL = @OTOOL@ +OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ @@ -280,8 +334,7 @@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ -ac_ct_CXX = @ac_ct_CXX@ -ac_ct_F77 = @ac_ct_F77@ +ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ @@ -312,6 +365,7 @@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ +lt_ECHO = @lt_ECHO@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ @@ -330,6 +384,7 @@ target_vendor = @target_vendor@ toolexecdir = @toolexecdir@ toolexeclibdir = @toolexeclibdir@ +top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ AUTOMAKE_OPTIONS = foreign subdir-objects @@ -337,6 +392,7 @@ EXTRA_DIST = LICENSE ChangeLog.v1 ChangeLog.libgcj configure.host \ src/alpha/ffi.c src/alpha/osf.S src/alpha/ffitarget.h \ src/arm/ffi.c src/arm/sysv.S src/arm/ffitarget.h \ + src/avr32/ffi.c src/avr32/sysv.S src/avr32/ffitarget.h \ src/cris/ffi.c src/cris/sysv.S src/cris/ffitarget.h \ src/ia64/ffi.c src/ia64/ffitarget.h src/ia64/ia64_flags.h \ src/ia64/unix.S \ @@ -355,12 +411,13 @@ src/sh64/ffi.c src/sh64/sysv.S src/sh64/ffitarget.h \ src/sparc/v8.S src/sparc/v9.S src/sparc/ffitarget.h \ src/sparc/ffi.c src/x86/darwin64.S \ - src/x86/ffi.c src/x86/sysv.S src/x86/win32.S src/x86/darwin.S \ - src/x86/freebsd.S \ + src/x86/ffi.c src/x86/sysv.S src/x86/win32.S src/x86/win64.S \ + src/x86/darwin.S src/x86/freebsd.S \ src/x86/ffi64.c src/x86/unix64.S src/x86/ffitarget.h \ src/pa/ffitarget.h src/pa/ffi.c src/pa/linux.S src/pa/hpux32.S \ src/frv/ffi.c src/frv/eabi.S src/frv/ffitarget.h src/dlmalloc.c \ - libtool-version ChangeLog.libffi + libtool-version ChangeLog.libffi m4/libtool.m4 \ + m4/lt~obsolete.m4 m4/ltoptions.m4 m4/ltsugar.m4 m4/ltversion.m4 info_TEXINFOS = doc/libffi.texi @@ -402,6 +459,7 @@ "DESTDIR=$(DESTDIR)" MAKEOVERRIDES = +ACLOCAL_AMFLAGS = $(ACLOCAL_AMFLAGS) -I m4 lib_LTLIBRARIES = libffi.la noinst_LTLIBRARIES = libffi_convenience.la libffi_la_SOURCES = src/debug.c src/prep_cif.c src/types.c \ @@ -416,11 +474,12 @@ $(am__append_12) $(am__append_13) $(am__append_14) \ $(am__append_15) $(am__append_16) $(am__append_17) \ $(am__append_18) $(am__append_19) $(am__append_20) \ - $(am__append_21) $(am__append_22) $(am__append_23) + $(am__append_21) $(am__append_22) $(am__append_23) \ + $(am__append_24) $(am__append_25) libffi_convenience_la_SOURCES = $(libffi_la_SOURCES) nodist_libffi_convenience_la_SOURCES = $(nodist_libffi_la_SOURCES) AM_CFLAGS = -Wall -g -fexceptions -libffi_la_LDFLAGS = -version-info `grep -v '^\#' $(srcdir)/libtool-version` +libffi_la_LDFLAGS = -version-info `grep -v '^\#' $(srcdir)/libtool-version` $(AM_LTLDFLAGS) AM_CPPFLAGS = -I. -I$(top_srcdir)/include -Iinclude -I$(top_srcdir)/src AM_CCASFLAGS = $(AM_CPPFLAGS) all: fficonfig.h @@ -434,15 +493,15 @@ @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ - echo ' cd $(srcdir) && $(AUTOMAKE) --foreign '; \ - cd $(srcdir) && $(AUTOMAKE) --foreign \ + echo ' cd $(srcdir) && $(AUTOMAKE) --foreign'; \ + $(am__cd) $(srcdir) && $(AUTOMAKE) --foreign \ && exit 0; \ exit 1;; \ esac; \ done; \ - echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign Makefile'; \ - cd $(top_srcdir) && \ - $(AUTOMAKE) --foreign Makefile + echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign Makefile'; \ + $(am__cd) $(top_srcdir) && \ + $(AUTOMAKE) --foreign Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ @@ -458,9 +517,10 @@ $(SHELL) ./config.status --recheck $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) - cd $(srcdir) && $(AUTOCONF) + $(am__cd) $(srcdir) && $(AUTOCONF) $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) - cd $(srcdir) && $(ACLOCAL) $(ACLOCAL_AMFLAGS) + $(am__cd) $(srcdir) && $(ACLOCAL) $(ACLOCAL_AMFLAGS) +$(am__aclocal_m4_deps): fficonfig.h: stamp-h1 @if test ! -f $@; then \ @@ -472,7 +532,7 @@ @rm -f stamp-h1 cd $(top_builddir) && $(SHELL) ./config.status fficonfig.h $(srcdir)/fficonfig.h.in: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) - cd $(top_srcdir) && $(AUTOHEADER) + ($(am__cd) $(top_srcdir) && $(AUTOHEADER)) rm -f stamp-h1 touch $@ @@ -483,20 +543,24 @@ install-libLTLIBRARIES: $(lib_LTLIBRARIES) @$(NORMAL_INSTALL) test -z "$(libdir)" || $(MKDIR_P) "$(DESTDIR)$(libdir)" - @list='$(lib_LTLIBRARIES)'; for p in $$list; do \ + @list='$(lib_LTLIBRARIES)'; test -n "$(libdir)" || list=; \ + list2=; for p in $$list; do \ if test -f $$p; then \ - f=$(am__strip_dir) \ - echo " $(LIBTOOL) --mode=install $(libLTLIBRARIES_INSTALL) $(INSTALL_STRIP_FLAG) '$$p' '$(DESTDIR)$(libdir)/$$f'"; \ - $(LIBTOOL) --mode=install $(libLTLIBRARIES_INSTALL) $(INSTALL_STRIP_FLAG) "$$p" "$(DESTDIR)$(libdir)/$$f"; \ + list2="$$list2 $$p"; \ else :; fi; \ - done + done; \ + test -z "$$list2" || { \ + echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 '$(DESTDIR)$(libdir)'"; \ + $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 "$(DESTDIR)$(libdir)"; \ + } uninstall-libLTLIBRARIES: @$(NORMAL_UNINSTALL) - @list='$(lib_LTLIBRARIES)'; for p in $$list; do \ - p=$(am__strip_dir) \ - echo " $(LIBTOOL) --mode=uninstall rm -f '$(DESTDIR)$(libdir)/$$p'"; \ - $(LIBTOOL) --mode=uninstall rm -f "$(DESTDIR)$(libdir)/$$p"; \ + @list='$(lib_LTLIBRARIES)'; test -n "$(libdir)" || list=; \ + for p in $$list; do \ + $(am__strip_dir) \ + echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f '$(DESTDIR)$(libdir)/$$f'"; \ + $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f "$(DESTDIR)$(libdir)/$$f"; \ done clean-libLTLIBRARIES: @@ -554,6 +618,8 @@ src/x86/$(DEPDIR)/$(am__dirstamp) src/x86/win32.lo: src/x86/$(am__dirstamp) \ src/x86/$(DEPDIR)/$(am__dirstamp) +src/x86/win64.lo: src/x86/$(am__dirstamp) \ + src/x86/$(DEPDIR)/$(am__dirstamp) src/x86/darwin.lo: src/x86/$(am__dirstamp) \ src/x86/$(DEPDIR)/$(am__dirstamp) src/x86/ffi64.lo: src/x86/$(am__dirstamp) \ @@ -648,6 +714,16 @@ src/arm/$(DEPDIR)/$(am__dirstamp) src/arm/ffi.lo: src/arm/$(am__dirstamp) \ src/arm/$(DEPDIR)/$(am__dirstamp) +src/avr32/$(am__dirstamp): + @$(MKDIR_P) src/avr32 + @: > src/avr32/$(am__dirstamp) +src/avr32/$(DEPDIR)/$(am__dirstamp): + @$(MKDIR_P) src/avr32/$(DEPDIR) + @: > src/avr32/$(DEPDIR)/$(am__dirstamp) +src/avr32/sysv.lo: src/avr32/$(am__dirstamp) \ + src/avr32/$(DEPDIR)/$(am__dirstamp) +src/avr32/ffi.lo: src/avr32/$(am__dirstamp) \ + src/avr32/$(DEPDIR)/$(am__dirstamp) src/cris/$(am__dirstamp): @$(MKDIR_P) src/cris @: > src/cris/$(am__dirstamp) @@ -725,6 +801,10 @@ -rm -f src/arm/ffi.lo -rm -f src/arm/sysv.$(OBJEXT) -rm -f src/arm/sysv.lo + -rm -f src/avr32/ffi.$(OBJEXT) + -rm -f src/avr32/ffi.lo + -rm -f src/avr32/sysv.$(OBJEXT) + -rm -f src/avr32/sysv.lo -rm -f src/closures.$(OBJEXT) -rm -f src/closures.lo -rm -f src/cris/ffi.$(OBJEXT) @@ -823,6 +903,8 @@ -rm -f src/x86/unix64.lo -rm -f src/x86/win32.$(OBJEXT) -rm -f src/x86/win32.lo + -rm -f src/x86/win64.$(OBJEXT) + -rm -f src/x86/win64.lo distclean-compile: -rm -f *.tab.c @@ -837,6 +919,8 @@ @AMDEP_TRUE@@am__include@ @am__quote at src/alpha/$(DEPDIR)/osf.Plo at am__quote@ @AMDEP_TRUE@@am__include@ @am__quote at src/arm/$(DEPDIR)/ffi.Plo at am__quote@ @AMDEP_TRUE@@am__include@ @am__quote at src/arm/$(DEPDIR)/sysv.Plo at am__quote@ + at AMDEP_TRUE@@am__include@ @am__quote at src/avr32/$(DEPDIR)/ffi.Plo at am__quote@ + at AMDEP_TRUE@@am__include@ @am__quote at src/avr32/$(DEPDIR)/sysv.Plo at am__quote@ @AMDEP_TRUE@@am__include@ @am__quote at src/cris/$(DEPDIR)/ffi.Plo at am__quote@ @AMDEP_TRUE@@am__include@ @am__quote at src/cris/$(DEPDIR)/sysv.Plo at am__quote@ @AMDEP_TRUE@@am__include@ @am__quote at src/frv/$(DEPDIR)/eabi.Plo at am__quote@ @@ -880,11 +964,12 @@ @AMDEP_TRUE@@am__include@ @am__quote at src/x86/$(DEPDIR)/sysv.Plo at am__quote@ @AMDEP_TRUE@@am__include@ @am__quote at src/x86/$(DEPDIR)/unix64.Plo at am__quote@ @AMDEP_TRUE@@am__include@ @am__quote at src/x86/$(DEPDIR)/win32.Plo at am__quote@ + at AMDEP_TRUE@@am__include@ @am__quote at src/x86/$(DEPDIR)/win64.Plo at am__quote@ .S.o: @am__fastdepCCAS_TRUE@ depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.o$$||'`;\ @am__fastdepCCAS_TRUE@ $(CPPASCOMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\ - at am__fastdepCCAS_TRUE@ mv -f $$depbase.Tpo $$depbase.Po + at am__fastdepCCAS_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Po @AMDEP_TRUE@@am__fastdepCCAS_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCCAS_FALSE@ DEPDIR=$(DEPDIR) $(CCASDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCCAS_FALSE@ $(CPPASCOMPILE) -c -o $@ $< @@ -892,7 +977,7 @@ .S.obj: @am__fastdepCCAS_TRUE@ depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.obj$$||'`;\ @am__fastdepCCAS_TRUE@ $(CPPASCOMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ `$(CYGPATH_W) '$<'` &&\ - at am__fastdepCCAS_TRUE@ mv -f $$depbase.Tpo $$depbase.Po + at am__fastdepCCAS_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Po @AMDEP_TRUE@@am__fastdepCCAS_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCCAS_FALSE@ DEPDIR=$(DEPDIR) $(CCASDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCCAS_FALSE@ $(CPPASCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'` @@ -900,7 +985,7 @@ .S.lo: @am__fastdepCCAS_TRUE@ depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.lo$$||'`;\ @am__fastdepCCAS_TRUE@ $(LTCPPASCOMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\ - at am__fastdepCCAS_TRUE@ mv -f $$depbase.Tpo $$depbase.Plo + at am__fastdepCCAS_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Plo @AMDEP_TRUE@@am__fastdepCCAS_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCCAS_FALSE@ DEPDIR=$(DEPDIR) $(CCASDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCCAS_FALSE@ $(LTCPPASCOMPILE) -c -o $@ $< @@ -908,7 +993,7 @@ .c.o: @am__fastdepCC_TRUE@ depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.o$$||'`;\ @am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\ - at am__fastdepCC_TRUE@ mv -f $$depbase.Tpo $$depbase.Po + at am__fastdepCC_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(COMPILE) -c -o $@ $< @@ -916,7 +1001,7 @@ .c.obj: @am__fastdepCC_TRUE@ depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.obj$$||'`;\ @am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ `$(CYGPATH_W) '$<'` &&\ - at am__fastdepCC_TRUE@ mv -f $$depbase.Tpo $$depbase.Po + at am__fastdepCC_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'` @@ -924,7 +1009,7 @@ .c.lo: @am__fastdepCC_TRUE@ depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.lo$$||'`;\ @am__fastdepCC_TRUE@ $(LTCOMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\ - at am__fastdepCC_TRUE@ mv -f $$depbase.Tpo $$depbase.Plo + at am__fastdepCC_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(LTCOMPILE) -c -o $@ $< @@ -937,6 +1022,7 @@ -rm -rf src/.libs src/_libs -rm -rf src/alpha/.libs src/alpha/_libs -rm -rf src/arm/.libs src/arm/_libs + -rm -rf src/avr32/.libs src/avr32/_libs -rm -rf src/cris/.libs src/cris/_libs -rm -rf src/frv/.libs src/frv/_libs -rm -rf src/ia64/.libs src/ia64/_libs @@ -952,14 +1038,14 @@ -rm -rf src/x86/.libs src/x86/_libs distclean-libtool: - -rm -f libtool + -rm -f libtool config.lt doc/$(am__dirstamp): @$(MKDIR_P) doc @: > doc/$(am__dirstamp) $(srcdir)/doc/libffi.info: doc/libffi.texi $(srcdir)/doc/version.texi restore=: && backupdir="$(am__leading_dot)am$$$$" && \ - am__cwd=`pwd` && cd $(srcdir) && \ + am__cwd=`pwd` && $(am__cd) $(srcdir) && \ rm -rf $$backupdir && mkdir $$backupdir && \ if ($(MAKEINFO) --version) >/dev/null 2>&1; then \ for f in $@ $@-[0-9] $@-[0-9][0-9] $(@:.info=).i[0-9] $(@:.info=).i[0-9][0-9]; do \ @@ -971,10 +1057,10 @@ -o $@ $(srcdir)/doc/libffi.texi; \ then \ rc=0; \ - cd $(srcdir); \ + $(am__cd) $(srcdir); \ else \ rc=$$?; \ - cd $(srcdir) && \ + $(am__cd) $(srcdir) && \ $$restore $$backupdir/* `echo "./$@" | sed 's|[^/]*$$||'`; \ fi; \ rm -rf $$backupdir; exit $$rc @@ -1028,16 +1114,18 @@ uninstall-dvi-am: @$(NORMAL_UNINSTALL) - @list='$(DVIS)'; for p in $$list; do \ - f=$(am__strip_dir) \ + @list='$(DVIS)'; test -n "$(dvidir)" || list=; \ + for p in $$list; do \ + $(am__strip_dir) \ echo " rm -f '$(DESTDIR)$(dvidir)/$$f'"; \ rm -f "$(DESTDIR)$(dvidir)/$$f"; \ done uninstall-html-am: @$(NORMAL_UNINSTALL) - @list='$(HTMLS)'; for p in $$list; do \ - f=$(am__strip_dir) \ + @list='$(HTMLS)'; test -n "$(htmldir)" || list=; \ + for p in $$list; do \ + $(am__strip_dir) \ echo " rm -rf '$(DESTDIR)$(htmldir)/$$f'"; \ rm -rf "$(DESTDIR)$(htmldir)/$$f"; \ done @@ -1051,7 +1139,8 @@ for file in $$list; do \ relfile=`echo "$$file" | sed 's|^.*/||'`; \ echo " install-info --info-dir='$(DESTDIR)$(infodir)' --remove '$(DESTDIR)$(infodir)/$$relfile'"; \ - install-info --info-dir="$(DESTDIR)$(infodir)" --remove "$(DESTDIR)$(infodir)/$$relfile"; \ + if install-info --info-dir="$(DESTDIR)$(infodir)" --remove "$(DESTDIR)$(infodir)/$$relfile"; \ + then :; else test ! -f "$(DESTDIR)$(infodir)/$$relfile" || exit 1; fi; \ done; \ else :; fi @$(NORMAL_UNINSTALL) @@ -1067,16 +1156,18 @@ uninstall-pdf-am: @$(NORMAL_UNINSTALL) - @list='$(PDFS)'; for p in $$list; do \ - f=$(am__strip_dir) \ + @list='$(PDFS)'; test -n "$(pdfdir)" || list=; \ + for p in $$list; do \ + $(am__strip_dir) \ echo " rm -f '$(DESTDIR)$(pdfdir)/$$f'"; \ rm -f "$(DESTDIR)$(pdfdir)/$$f"; \ done uninstall-ps-am: @$(NORMAL_UNINSTALL) - @list='$(PSS)'; for p in $$list; do \ - f=$(am__strip_dir) \ + @list='$(PSS)'; test -n "$(psdir)" || list=; \ + for p in $$list; do \ + $(am__strip_dir) \ echo " rm -f '$(DESTDIR)$(psdir)/$$f'"; \ rm -f "$(DESTDIR)$(psdir)/$$f"; \ done @@ -1093,16 +1184,19 @@ for file in $$d/$$base $$d/$$base-[0-9] $$d/$$base-[0-9][0-9] $$d/$$base_i[0-9] $$d/$$base_i[0-9][0-9]; do \ if test -f $$file; then \ relfile=`expr "$$file" : "$$d/\(.*\)"`; \ - test -f $(distdir)/$$relfile || \ - cp -p $$file $(distdir)/$$relfile; \ + test -f "$(distdir)/$$relfile" || \ + cp -p $$file "$(distdir)/$$relfile"; \ else :; fi; \ done; \ done mostlyclean-aminfo: -rm -rf libffi.aux libffi.cp libffi.cps libffi.fn libffi.ky libffi.log \ - libffi.pg libffi.tmp libffi.toc libffi.tp libffi.vr \ - doc/libffi.dvi doc/libffi.pdf doc/libffi.ps doc/libffi.html + libffi.pg libffi.tmp libffi.toc libffi.tp libffi.vr + +clean-aminfo: + -test -z "doc/libffi.dvi doc/libffi.pdf doc/libffi.ps doc/libffi.html" \ + || rm -rf doc/libffi.dvi doc/libffi.pdf doc/libffi.ps doc/libffi.html maintainer-clean-aminfo: @list='$(INFO_DEPS)'; for i in $$list; do \ @@ -1113,20 +1207,23 @@ install-pkgconfigDATA: $(pkgconfig_DATA) @$(NORMAL_INSTALL) test -z "$(pkgconfigdir)" || $(MKDIR_P) "$(DESTDIR)$(pkgconfigdir)" - @list='$(pkgconfig_DATA)'; for p in $$list; do \ + @list='$(pkgconfig_DATA)'; test -n "$(pkgconfigdir)" || list=; \ + for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ - f=$(am__strip_dir) \ - echo " $(pkgconfigDATA_INSTALL) '$$d$$p' '$(DESTDIR)$(pkgconfigdir)/$$f'"; \ - $(pkgconfigDATA_INSTALL) "$$d$$p" "$(DESTDIR)$(pkgconfigdir)/$$f"; \ + echo "$$d$$p"; \ + done | $(am__base_list) | \ + while read files; do \ + echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(pkgconfigdir)'"; \ + $(INSTALL_DATA) $$files "$(DESTDIR)$(pkgconfigdir)" || exit $$?; \ done uninstall-pkgconfigDATA: @$(NORMAL_UNINSTALL) - @list='$(pkgconfig_DATA)'; for p in $$list; do \ - f=$(am__strip_dir) \ - echo " rm -f '$(DESTDIR)$(pkgconfigdir)/$$f'"; \ - rm -f "$(DESTDIR)$(pkgconfigdir)/$$f"; \ - done + @list='$(pkgconfig_DATA)'; test -n "$(pkgconfigdir)" || list=; \ + files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ + test -n "$$files" || exit 0; \ + echo " ( cd '$(DESTDIR)$(pkgconfigdir)' && rm -f" $$files ")"; \ + cd "$(DESTDIR)$(pkgconfigdir)" && rm -f $$files # This directory's subdirectories are mostly independent; you can cd # into them and run `make' without going through this Makefile. @@ -1152,7 +1249,7 @@ else \ local_target="$$target"; \ fi; \ - (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ + ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || eval $$failcom; \ done; \ if test "$$dot_seen" = "no"; then \ @@ -1186,16 +1283,16 @@ else \ local_target="$$target"; \ fi; \ - (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ + ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || eval $$failcom; \ done && test -z "$$fail" tags-recursive: list='$(SUBDIRS)'; for subdir in $$list; do \ - test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \ + test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \ done ctags-recursive: list='$(SUBDIRS)'; for subdir in $$list; do \ - test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \ + test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \ done ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) @@ -1203,14 +1300,14 @@ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ - $(AWK) ' { files[$$0] = 1; } \ - END { for (i in files) print i; }'`; \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ mkid -fID $$unique tags: TAGS TAGS: tags-recursive $(HEADERS) $(SOURCES) fficonfig.h.in $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) - tags=; \ + set x; \ here=`pwd`; \ if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ include_option=--etags-include; \ @@ -1222,46 +1319,50 @@ list='$(SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test ! -f $$subdir/TAGS || \ - tags="$$tags $$include_option=$$here/$$subdir/TAGS"; \ + set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \ fi; \ done; \ list='$(SOURCES) $(HEADERS) fficonfig.h.in $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ - $(AWK) ' { files[$$0] = 1; } \ - END { for (i in files) print i; }'`; \ - if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + shift; \ + if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ - $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ - $$tags $$unique; \ + if test $$# -gt 0; then \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + "$$@" $$unique; \ + else \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + $$unique; \ + fi; \ fi ctags: CTAGS CTAGS: ctags-recursive $(HEADERS) $(SOURCES) fficonfig.h.in $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) - tags=; \ - here=`pwd`; \ list='$(SOURCES) $(HEADERS) fficonfig.h.in $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ - $(AWK) ' { files[$$0] = 1; } \ - END { for (i in files) print i; }'`; \ - test -z "$(CTAGS_ARGS)$$tags$$unique" \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ - $$tags $$unique + $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ - && cd $(top_srcdir) \ - && gtags -i $(GTAGS_ARGS) $$here + && $(am__cd) $(top_srcdir) \ + && gtags -i $(GTAGS_ARGS) "$$here" distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) $(am__remove_distdir) - test -d $(distdir) || mkdir $(distdir) + test -d "$(distdir)" || mkdir "$(distdir)" @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ @@ -1277,29 +1378,44 @@ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d "$(distdir)/$$file"; then \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ - cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ + cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ - cp -pR $$d/$$file $(distdir)$$dir || exit 1; \ + cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ - test -f $(distdir)/$$file \ - || cp -p $$d/$$file $(distdir)/$$file \ + test -f "$(distdir)/$$file" \ + || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done - list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ + @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test -d "$(distdir)/$$subdir" \ || $(MKDIR_P) "$(distdir)/$$subdir" \ || exit 1; \ - distdir=`$(am__cd) $(distdir) && pwd`; \ - top_distdir=`$(am__cd) $(top_distdir) && pwd`; \ - (cd $$subdir && \ + fi; \ + done + @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ + if test "$$subdir" = .; then :; else \ + dir1=$$subdir; dir2="$(distdir)/$$subdir"; \ + $(am__relativize); \ + new_distdir=$$reldir; \ + dir1=$$subdir; dir2="$(top_distdir)"; \ + $(am__relativize); \ + new_top_distdir=$$reldir; \ + echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \ + echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \ + ($(am__cd) $$subdir && \ $(MAKE) $(AM_MAKEFLAGS) \ - top_distdir="$$top_distdir" \ - distdir="$$distdir/$$subdir" \ + top_distdir="$$new_top_distdir" \ + distdir="$$new_distdir" \ am__remove_distdir=: \ am__skip_length_check=: \ + am__skip_mode_fix=: \ distdir) \ || exit 1; \ fi; \ @@ -1307,11 +1423,12 @@ $(MAKE) $(AM_MAKEFLAGS) \ top_distdir="$(top_distdir)" distdir="$(distdir)" \ dist-info - -find $(distdir) -type d ! -perm -777 -exec chmod a+rwx {} \; -o \ + -test -n "$(am__skip_mode_fix)" \ + || find "$(distdir)" -type d ! -perm -777 -exec chmod a+rwx {} \; -o \ ! -type d ! -perm -444 -links 1 -exec chmod a+r {} \; -o \ ! -type d ! -perm -400 -exec chmod a+r {} \; -o \ ! -type d ! -perm -444 -exec $(install_sh) -c -m a+r {} {} \; \ - || chmod -R a+r $(distdir) + || chmod -R a+r "$(distdir)" dist-gzip: distdir tardir=$(distdir) && $(am__tar) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz $(am__remove_distdir) @@ -1320,6 +1437,14 @@ tardir=$(distdir) && $(am__tar) | bzip2 -9 -c >$(distdir).tar.bz2 $(am__remove_distdir) +dist-lzma: distdir + tardir=$(distdir) && $(am__tar) | lzma -9 -c >$(distdir).tar.lzma + $(am__remove_distdir) + +dist-xz: distdir + tardir=$(distdir) && $(am__tar) | xz -c >$(distdir).tar.xz + $(am__remove_distdir) + dist-tarZ: distdir tardir=$(distdir) && $(am__tar) | compress -c >$(distdir).tar.Z $(am__remove_distdir) @@ -1346,6 +1471,10 @@ GZIP=$(GZIP_ENV) gunzip -c $(distdir).tar.gz | $(am__untar) ;;\ *.tar.bz2*) \ bunzip2 -c $(distdir).tar.bz2 | $(am__untar) ;;\ + *.tar.lzma*) \ + unlzma -c $(distdir).tar.lzma | $(am__untar) ;;\ + *.tar.xz*) \ + xz -dc $(distdir).tar.xz | $(am__untar) ;;\ *.tar.Z*) \ uncompress -c $(distdir).tar.Z | $(am__untar) ;;\ *.shar.gz*) \ @@ -1357,9 +1486,11 @@ mkdir $(distdir)/_build mkdir $(distdir)/_inst chmod a-w $(distdir) + test -d $(distdir)/_build || exit 0; \ dc_install_base=`$(am__cd) $(distdir)/_inst && pwd | sed -e 's,^[^:\\/]:[\\/],/,'` \ && dc_destdir="$${TMPDIR-/tmp}/am-dc-$$$$/" \ - && cd $(distdir)/_build \ + && am__cwd=`pwd` \ + && $(am__cd) $(distdir)/_build \ && ../configure --srcdir=.. --prefix="$$dc_install_base" \ $(DISTCHECK_CONFIGURE_FLAGS) \ && $(MAKE) $(AM_MAKEFLAGS) \ @@ -1381,13 +1512,15 @@ && rm -rf "$$dc_destdir" \ && $(MAKE) $(AM_MAKEFLAGS) dist \ && rm -rf $(DIST_ARCHIVES) \ - && $(MAKE) $(AM_MAKEFLAGS) distcleancheck + && $(MAKE) $(AM_MAKEFLAGS) distcleancheck \ + && cd "$$am__cwd" \ + || exit 1 $(am__remove_distdir) @(echo "$(distdir) archives ready for distribution: "; \ list='$(DIST_ARCHIVES)'; for i in $$list; do echo $$i; done) | \ sed -e 1h -e 1s/./=/g -e 1p -e 1x -e '$$p' -e '$$x' distuninstallcheck: - @cd $(distuninstallcheck_dir) \ + @$(am__cd) '$(distuninstallcheck_dir)' \ && test `$(distuninstallcheck_listfiles) | wc -l` -le 1 \ || { echo "ERROR: files left after uninstall:" ; \ if test -n "$(DESTDIR)"; then \ @@ -1432,6 +1565,7 @@ distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) -rm -f doc/$(am__dirstamp) -rm -f src/$(DEPDIR)/$(am__dirstamp) -rm -f src/$(am__dirstamp) @@ -1439,6 +1573,8 @@ -rm -f src/alpha/$(am__dirstamp) -rm -f src/arm/$(DEPDIR)/$(am__dirstamp) -rm -f src/arm/$(am__dirstamp) + -rm -f src/avr32/$(DEPDIR)/$(am__dirstamp) + -rm -f src/avr32/$(am__dirstamp) -rm -f src/cris/$(DEPDIR)/$(am__dirstamp) -rm -f src/cris/$(am__dirstamp) -rm -f src/frv/$(DEPDIR)/$(am__dirstamp) @@ -1471,12 +1607,12 @@ @echo "it deletes files that may require special tools to rebuild." clean: clean-recursive -clean-am: clean-generic clean-libLTLIBRARIES clean-libtool \ - clean-noinstLTLIBRARIES mostlyclean-am +clean-am: clean-aminfo clean-generic clean-libLTLIBRARIES \ + clean-libtool clean-noinstLTLIBRARIES mostlyclean-am distclean: distclean-recursive -rm -f $(am__CONFIG_DISTCLEAN_FILES) - -rm -rf src/$(DEPDIR) src/alpha/$(DEPDIR) src/arm/$(DEPDIR) src/cris/$(DEPDIR) src/frv/$(DEPDIR) src/ia64/$(DEPDIR) src/m32r/$(DEPDIR) src/m68k/$(DEPDIR) src/mips/$(DEPDIR) src/pa/$(DEPDIR) src/powerpc/$(DEPDIR) src/s390/$(DEPDIR) src/sh/$(DEPDIR) src/sh64/$(DEPDIR) src/sparc/$(DEPDIR) src/x86/$(DEPDIR) + -rm -rf src/$(DEPDIR) src/alpha/$(DEPDIR) src/arm/$(DEPDIR) src/avr32/$(DEPDIR) src/cris/$(DEPDIR) src/frv/$(DEPDIR) src/ia64/$(DEPDIR) src/m32r/$(DEPDIR) src/m68k/$(DEPDIR) src/mips/$(DEPDIR) src/pa/$(DEPDIR) src/powerpc/$(DEPDIR) src/s390/$(DEPDIR) src/sh/$(DEPDIR) src/sh64/$(DEPDIR) src/sparc/$(DEPDIR) src/x86/$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-hdr distclean-libtool distclean-tags @@ -1500,37 +1636,45 @@ install-dvi-am: $(DVIS) @$(NORMAL_INSTALL) test -z "$(dvidir)" || $(MKDIR_P) "$(DESTDIR)$(dvidir)" - @list='$(DVIS)'; for p in $$list; do \ + @list='$(DVIS)'; test -n "$(dvidir)" || list=; \ + for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ - f=$(am__strip_dir) \ - echo " $(INSTALL_DATA) '$$d$$p' '$(DESTDIR)$(dvidir)/$$f'"; \ - $(INSTALL_DATA) "$$d$$p" "$(DESTDIR)$(dvidir)/$$f"; \ + echo "$$d$$p"; \ + done | $(am__base_list) | \ + while read files; do \ + echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(dvidir)'"; \ + $(INSTALL_DATA) $$files "$(DESTDIR)$(dvidir)" || exit $$?; \ done install-exec-am: install-libLTLIBRARIES install-html-am: $(HTMLS) @$(NORMAL_INSTALL) test -z "$(htmldir)" || $(MKDIR_P) "$(DESTDIR)$(htmldir)" - @list='$(HTMLS)'; for p in $$list; do \ + @list='$(HTMLS)'; list2=; test -n "$(htmldir)" || list=; \ + for p in $$list; do \ if test -f "$$p" || test -d "$$p"; then d=; else d="$(srcdir)/"; fi; \ - f=$(am__strip_dir) \ + $(am__strip_dir) \ if test -d "$$d$$p"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(htmldir)/$$f'"; \ $(MKDIR_P) "$(DESTDIR)$(htmldir)/$$f" || exit 1; \ echo " $(INSTALL_DATA) '$$d$$p'/* '$(DESTDIR)$(htmldir)/$$f'"; \ - $(INSTALL_DATA) "$$d$$p"/* "$(DESTDIR)$(htmldir)/$$f"; \ + $(INSTALL_DATA) "$$d$$p"/* "$(DESTDIR)$(htmldir)/$$f" || exit $$?; \ else \ - echo " $(INSTALL_DATA) '$$d$$p' '$(DESTDIR)$(htmldir)/$$f'"; \ - $(INSTALL_DATA) "$$d$$p" "$(DESTDIR)$(htmldir)/$$f"; \ + list2="$$list2 $$d$$p"; \ fi; \ - done + done; \ + test -z "$$list2" || { echo "$$list2" | $(am__base_list) | \ + while read files; do \ + echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(htmldir)'"; \ + $(INSTALL_DATA) $$files "$(DESTDIR)$(htmldir)" || exit $$?; \ + done; } install-info: install-info-recursive install-info-am: $(INFO_DEPS) @$(NORMAL_INSTALL) test -z "$(infodir)" || $(MKDIR_P) "$(DESTDIR)$(infodir)" @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \ - list='$(INFO_DEPS)'; \ + list='$(INFO_DEPS)'; test -n "$(infodir)" || list=; \ for file in $$list; do \ case $$file in \ $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \ @@ -1538,18 +1682,19 @@ if test -f $$file; then d=.; else d=$(srcdir); fi; \ file_i=`echo "$$file" | sed 's|\.info$$||;s|$$|.i|'`; \ for ifile in $$d/$$file $$d/$$file-[0-9] $$d/$$file-[0-9][0-9] \ - $$d/$$file_i[0-9] $$d/$$file_i[0-9][0-9] ; do \ + $$d/$$file_i[0-9] $$d/$$file_i[0-9][0-9] ; do \ if test -f $$ifile; then \ - relfile=`echo "$$ifile" | sed 's|^.*/||'`; \ - echo " $(INSTALL_DATA) '$$ifile' '$(DESTDIR)$(infodir)/$$relfile'"; \ - $(INSTALL_DATA) "$$ifile" "$(DESTDIR)$(infodir)/$$relfile"; \ + echo "$$ifile"; \ else : ; fi; \ done; \ - done + done | $(am__base_list) | \ + while read files; do \ + echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(infodir)'"; \ + $(INSTALL_DATA) $$files "$(DESTDIR)$(infodir)" || exit $$?; done @$(POST_INSTALL) @if (install-info --version && \ install-info --version 2>&1 | sed 1q | grep -i -v debian) >/dev/null 2>&1; then \ - list='$(INFO_DEPS)'; \ + list='$(INFO_DEPS)'; test -n "$(infodir)" || list=; \ for file in $$list; do \ relfile=`echo "$$file" | sed 's|^.*/||'`; \ echo " install-info --info-dir='$(DESTDIR)$(infodir)' '$(DESTDIR)$(infodir)/$$relfile'";\ @@ -1561,29 +1706,33 @@ install-pdf-am: $(PDFS) @$(NORMAL_INSTALL) test -z "$(pdfdir)" || $(MKDIR_P) "$(DESTDIR)$(pdfdir)" - @list='$(PDFS)'; for p in $$list; do \ + @list='$(PDFS)'; test -n "$(pdfdir)" || list=; \ + for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ - f=$(am__strip_dir) \ - echo " $(INSTALL_DATA) '$$d$$p' '$(DESTDIR)$(pdfdir)/$$f'"; \ - $(INSTALL_DATA) "$$d$$p" "$(DESTDIR)$(pdfdir)/$$f"; \ - done + echo "$$d$$p"; \ + done | $(am__base_list) | \ + while read files; do \ + echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(pdfdir)'"; \ + $(INSTALL_DATA) $$files "$(DESTDIR)$(pdfdir)" || exit $$?; done install-ps: install-ps-recursive install-ps-am: $(PSS) @$(NORMAL_INSTALL) test -z "$(psdir)" || $(MKDIR_P) "$(DESTDIR)$(psdir)" - @list='$(PSS)'; for p in $$list; do \ + @list='$(PSS)'; test -n "$(psdir)" || list=; \ + for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ - f=$(am__strip_dir) \ - echo " $(INSTALL_DATA) '$$d$$p' '$(DESTDIR)$(psdir)/$$f'"; \ - $(INSTALL_DATA) "$$d$$p" "$(DESTDIR)$(psdir)/$$f"; \ - done + echo "$$d$$p"; \ + done | $(am__base_list) | \ + while read files; do \ + echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(psdir)'"; \ + $(INSTALL_DATA) $$files "$(DESTDIR)$(psdir)" || exit $$?; done installcheck-am: maintainer-clean: maintainer-clean-recursive -rm -f $(am__CONFIG_DISTCLEAN_FILES) -rm -rf $(top_srcdir)/autom4te.cache - -rm -rf src/$(DEPDIR) src/alpha/$(DEPDIR) src/arm/$(DEPDIR) src/cris/$(DEPDIR) src/frv/$(DEPDIR) src/ia64/$(DEPDIR) src/m32r/$(DEPDIR) src/m68k/$(DEPDIR) src/mips/$(DEPDIR) src/pa/$(DEPDIR) src/powerpc/$(DEPDIR) src/s390/$(DEPDIR) src/sh/$(DEPDIR) src/sh64/$(DEPDIR) src/sparc/$(DEPDIR) src/x86/$(DEPDIR) + -rm -rf src/$(DEPDIR) src/alpha/$(DEPDIR) src/arm/$(DEPDIR) src/avr32/$(DEPDIR) src/cris/$(DEPDIR) src/frv/$(DEPDIR) src/ia64/$(DEPDIR) src/m32r/$(DEPDIR) src/m68k/$(DEPDIR) src/mips/$(DEPDIR) src/pa/$(DEPDIR) src/powerpc/$(DEPDIR) src/s390/$(DEPDIR) src/sh/$(DEPDIR) src/sh64/$(DEPDIR) src/sparc/$(DEPDIR) src/x86/$(DEPDIR) -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-aminfo \ maintainer-clean-generic maintainer-clean-vti @@ -1605,36 +1754,38 @@ uninstall-libLTLIBRARIES uninstall-pdf-am \ uninstall-pkgconfigDATA uninstall-ps-am -.MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) install-am \ - install-strip +.MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) all \ + ctags-recursive install-am install-strip tags-recursive .PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \ - all all-am am--refresh check check-am clean clean-generic \ - clean-libLTLIBRARIES clean-libtool clean-noinstLTLIBRARIES \ - ctags ctags-recursive dist dist-all dist-bzip2 dist-gzip \ - dist-info dist-shar dist-tarZ dist-zip distcheck distclean \ - distclean-compile distclean-generic distclean-hdr \ - distclean-libtool distclean-tags distcleancheck distdir \ - distuninstallcheck dvi dvi-am html html-am info info-am \ - install install-am install-data install-data-am install-dvi \ - install-dvi-am install-exec install-exec-am install-html \ - install-html-am install-info install-info-am \ - install-libLTLIBRARIES install-man install-pdf install-pdf-am \ - install-pkgconfigDATA install-ps install-ps-am install-strip \ - installcheck installcheck-am installdirs installdirs-am \ - maintainer-clean maintainer-clean-aminfo \ - maintainer-clean-generic maintainer-clean-vti mostlyclean \ - mostlyclean-aminfo mostlyclean-compile mostlyclean-generic \ - mostlyclean-libtool mostlyclean-vti pdf pdf-am ps ps-am tags \ - tags-recursive uninstall uninstall-am uninstall-dvi-am \ - uninstall-html-am uninstall-info-am uninstall-libLTLIBRARIES \ - uninstall-pdf-am uninstall-pkgconfigDATA uninstall-ps-am + all all-am am--refresh check check-am clean clean-aminfo \ + clean-generic clean-libLTLIBRARIES clean-libtool \ + clean-noinstLTLIBRARIES ctags ctags-recursive dist dist-all \ + dist-bzip2 dist-gzip dist-info dist-lzma dist-shar dist-tarZ \ + dist-xz dist-zip distcheck distclean distclean-compile \ + distclean-generic distclean-hdr distclean-libtool \ + distclean-tags distcleancheck distdir distuninstallcheck dvi \ + dvi-am html html-am info info-am install install-am \ + install-data install-data-am install-dvi install-dvi-am \ + install-exec install-exec-am install-html install-html-am \ + install-info install-info-am install-libLTLIBRARIES \ + install-man install-pdf install-pdf-am install-pkgconfigDATA \ + install-ps install-ps-am install-strip installcheck \ + installcheck-am installdirs installdirs-am maintainer-clean \ + maintainer-clean-aminfo maintainer-clean-generic \ + maintainer-clean-vti mostlyclean mostlyclean-aminfo \ + mostlyclean-compile mostlyclean-generic mostlyclean-libtool \ + mostlyclean-vti pdf pdf-am ps ps-am tags tags-recursive \ + uninstall uninstall-am uninstall-dvi-am uninstall-html-am \ + uninstall-info-am uninstall-libLTLIBRARIES uninstall-pdf-am \ + uninstall-pkgconfigDATA uninstall-ps-am # No install-html or install-pdf support in automake yet .PHONY: install-html install-pdf install-html: install-pdf: + # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: Modified: python/trunk/Modules/_ctypes/libffi/README ============================================================================== --- python/trunk/Modules/_ctypes/libffi/README (original) +++ python/trunk/Modules/_ctypes/libffi/README Mon Mar 15 01:02:36 2010 @@ -1,7 +1,7 @@ Status ====== -libffi-3.0.5 was released on April 3, 2008. Check the libffi web +libffi-3.0.9 was released on December 31, 2009. Check the libffi web page for updates: . @@ -9,27 +9,27 @@ =============== Compilers for high level languages generate code that follow certain -conventions. These conventions are necessary, in part, for separate -compilation to work. One such convention is the "calling convention". -The "calling convention" is a set of assumptions made by the compiler -about where function arguments will be found on entry to a function. -A "calling convention" also specifies where the return value for a -function is found. +conventions. These conventions are necessary, in part, for separate +compilation to work. One such convention is the "calling +convention". The "calling convention" is essentially a set of +assumptions made by the compiler about where function arguments will +be found on entry to a function. A "calling convention" also specifies +where the return value for a function is found. Some programs may not know at the time of compilation what arguments -are to be passed to a function. For instance, an interpreter may be +are to be passed to a function. For instance, an interpreter may be told at run-time about the number and types of arguments used to call -a given function. Libffi can be used in such programs to provide a +a given function. Libffi can be used in such programs to provide a bridge from the interpreter program to compiled code. The libffi library provides a portable, high level programming -interface to various calling conventions. This allows a programmer to +interface to various calling conventions. This allows a programmer to call any function specified by a call interface description at run -time. +time. FFI stands for Foreign Function Interface. A foreign function interface is the popular name for the interface that allows code -written in one language to call code written in another language. The +written in one language to call code written in another language. The libffi library really only provides the lowest, machine dependent layer of a fully featured foreign function interface. A layer must exist above libffi that handles type conversions for values passed @@ -39,36 +39,56 @@ Supported Platforms =================== -Libffi has been ported to many different platforms, although this -release was only tested on: +Libffi has been ported to many different platforms. +For specific configuration details and testing status, please +refer to the wiki page here: + + http://www.moxielogic.org/wiki/index.php?title=Libffi_3.0.9 + +At the time of release, the following basic configurations have been +tested: + +|--------------+------------------| +| Architecture | Operating System | +|--------------+------------------| +| Alpha | Linux | +| ARM | Linux | +| AVR32 | Linux | +| HPPA | HPUX | +| IA-64 | Linux | +| MIPS | IRIX | +| MIPS | Linux | +| MIPS64 | Linux | +| PowerPC | Linux | +| PowerPC | Mac OSX | +| PowerPC | FreeBSD | +| PowerPC64 | Linux | +| S390 | Linux | +| S390X | Linux | +| SPARC | Linux | +| SPARC | Solaris | +| SPARC64 | Linux | +| SPARC64 | FreeBSD | +| X86 | FreeBSD | +| X86 | kFreeBSD | +| X86 | Linux | +| X86 | Mac OSX | +| X86 | OpenBSD | +| X86 | Solaris | +| X86 | Windows/Cygwin | +| X86 | Windows/MingW | +| X86-64 | FreeBSD | +| X86-64 | Linux | +| X86-64 | OpenBSD | +|--------------+------------------| - arm oabi linux - arm eabi linux - hppa linux - mips o32 linux (little endian) - powerpc darwin - powerpc64 linux - sparc solaris - sparc64 solaris - x86 cygwin - x86 darwin - x86 freebsd - x86 linux - x86 openbsd - x86-64 darwin - x86-64 linux - x86-64 OS X - x86-64 freebsd - Please send additional platform test results to -libffi-discuss at sourceware.org. +libffi-discuss at sourceware.org and feel free to update the wiki page +above. Installing libffi ================= -[Note: before actually performing any of these installation steps, - you may wish to read the "Platform Specific Notes" below.] - First you must configure the distribution for your particular system. Go to the directory you wish to build libffi in and run the "configure" program found in the root directory of the libffi source @@ -98,66 +118,29 @@ To install the library and header files, type "make install". -Platform Specific Notes -======================= - - MIPS - Irix 5.3 & 6.x - --------------------- - -Irix 6.2 and better supports three different calling conventions: o32, -n32 and n64. Currently, libffi only supports both o32 and n32 under -Irix 6.x, but only o32 under Irix 5.3. Libffi will automatically be -configured for whichever calling convention it was built for. - -By default, the configure script will try to build libffi with the GNU -development tools. To build libffi with the SGI development tools, set -the environment variable CC to either "cc -32" or "cc -n32" before -running configure under Irix 6.x (depending on whether you want an o32 -or n32 library), or just "cc" for Irix 5.3. - -With the n32 calling convention, when returning structures smaller -than 16 bytes, be sure to provide an RVALUE that is 8 byte aligned. -Here's one way of forcing this: - - double struct_storage[2]; - my_small_struct *s = (my_small_struct *) struct_storage; - /* Use s for RVALUE */ - -If you don't do this you are liable to get spurious bus errors. - -"long long" values are not supported yet. - -You must use GNU Make to build libffi on SGI platforms. - - - PowerPC System V ABI - -------------------- - -There are two `System V ABI's which libffi implements for PowerPC. -They differ only in how small structures are returned from functions. - -In the FFI_SYSV version, structures that are 8 bytes or smaller are -returned in registers. This is what GCC does when it is configured -for solaris, and is what the System V ABI I have (dated September -1995) says. - -In the FFI_GCC_SYSV version, all structures are returned the same way: -by passing a pointer as the first argument to the function. This is -what GCC does when it is configured for linux or a generic sysv -target. - -EGCS 1.0.1 (and probably other versions of EGCS/GCC) also has a -inconsistency with the SysV ABI: When a procedure is called with many -floating-point arguments, some of them get put on the stack. They are -all supposed to be stored in double-precision format, even if they are -only single-precision, but EGCS stores single-precision arguments as -single-precision anyway. This causes one test to fail (the `many -arguments' test). - - History ======= +See the ChangeLog files for details. + +3.0.9 Dec-31-09 + Add AVR32 and win64 ports. Add ARM softfp support. + Many fixes for AIX, Solaris, HP-UX, *BSD. + Several PowerPC and x86-64 bug fixes. + Build DLL for windows. + +3.0.8 Dec-19-08 + Add *BSD, BeOS, and PA-Linux support. + +3.0.7 Nov-11-08 + Fix for ppc FreeBSD. + (thanks to Andreas Tobler) + +3.0.6 Jul-17-08 + Fix for closures on sh. + Mark the sh/sh64 stack as non-executable. + (both thanks to Kaz Kojima) + 3.0.5 Apr-3-08 Fix libffi.pc file. Fix #define ARM for IcedTea users. Modified: python/trunk/Modules/_ctypes/libffi/aclocal.m4 ============================================================================== --- python/trunk/Modules/_ctypes/libffi/aclocal.m4 (original) +++ python/trunk/Modules/_ctypes/libffi/aclocal.m4 Mon Mar 15 01:02:36 2010 @@ -1,7 +1,7 @@ -# generated automatically by aclocal 1.10 -*- Autoconf -*- +# generated automatically by aclocal 1.11.1 -*- Autoconf -*- # Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, -# 2005, 2006 Free Software Foundation, Inc. +# 2005, 2006, 2007, 2008, 2009 Free Software Foundation, Inc. # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. @@ -11,6580 +11,15 @@ # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. -m4_if(m4_PACKAGE_VERSION, [2.61],, -[m4_fatal([this file was generated for autoconf 2.61. -You have another version of autoconf. If you want to use that, -you should regenerate the build system entirely.], [63])]) +m4_ifndef([AC_AUTOCONF_VERSION], + [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl +m4_if(m4_defn([AC_AUTOCONF_VERSION]), [2.65],, +[m4_warning([this file was generated for autoconf 2.65. +You have another version of autoconf. It may work, but is not guaranteed to. +If you have problems, you may need to regenerate the build system entirely. +To do so, use the procedure documented by the package, typically `autoreconf'.])]) -# libtool.m4 - Configure libtool for the host system. -*-Autoconf-*- - -# serial 51 AC_PROG_LIBTOOL - - -# AC_PROVIDE_IFELSE(MACRO-NAME, IF-PROVIDED, IF-NOT-PROVIDED) -# ----------------------------------------------------------- -# If this macro is not defined by Autoconf, define it here. -m4_ifdef([AC_PROVIDE_IFELSE], - [], - [m4_define([AC_PROVIDE_IFELSE], - [m4_ifdef([AC_PROVIDE_$1], - [$2], [$3])])]) - - -# AC_PROG_LIBTOOL -# --------------- -AC_DEFUN([AC_PROG_LIBTOOL], -[AC_REQUIRE([_AC_PROG_LIBTOOL])dnl -dnl If AC_PROG_CXX has already been expanded, run AC_LIBTOOL_CXX -dnl immediately, otherwise, hook it in at the end of AC_PROG_CXX. - AC_PROVIDE_IFELSE([AC_PROG_CXX], - [AC_LIBTOOL_CXX], - [define([AC_PROG_CXX], defn([AC_PROG_CXX])[AC_LIBTOOL_CXX - ])]) -dnl And a similar setup for Fortran 77 support - AC_PROVIDE_IFELSE([AC_PROG_F77], - [AC_LIBTOOL_F77], - [define([AC_PROG_F77], defn([AC_PROG_F77])[AC_LIBTOOL_F77 -])]) - -dnl Quote A][M_PROG_GCJ so that aclocal doesn't bring it in needlessly. -dnl If either AC_PROG_GCJ or A][M_PROG_GCJ have already been expanded, run -dnl AC_LIBTOOL_GCJ immediately, otherwise, hook it in at the end of both. - AC_PROVIDE_IFELSE([AC_PROG_GCJ], - [AC_LIBTOOL_GCJ], - [AC_PROVIDE_IFELSE([A][M_PROG_GCJ], - [AC_LIBTOOL_GCJ], - [AC_PROVIDE_IFELSE([LT_AC_PROG_GCJ], - [AC_LIBTOOL_GCJ], - [ifdef([AC_PROG_GCJ], - [define([AC_PROG_GCJ], defn([AC_PROG_GCJ])[AC_LIBTOOL_GCJ])]) - ifdef([A][M_PROG_GCJ], - [define([A][M_PROG_GCJ], defn([A][M_PROG_GCJ])[AC_LIBTOOL_GCJ])]) - ifdef([LT_AC_PROG_GCJ], - [define([LT_AC_PROG_GCJ], - defn([LT_AC_PROG_GCJ])[AC_LIBTOOL_GCJ])])])]) -])])# AC_PROG_LIBTOOL - - -# _AC_PROG_LIBTOOL -# ---------------- -AC_DEFUN([_AC_PROG_LIBTOOL], -[AC_REQUIRE([AC_LIBTOOL_SETUP])dnl -AC_BEFORE([$0],[AC_LIBTOOL_CXX])dnl -AC_BEFORE([$0],[AC_LIBTOOL_F77])dnl -AC_BEFORE([$0],[AC_LIBTOOL_GCJ])dnl - -# This can be used to rebuild libtool when needed -LIBTOOL_DEPS="$ac_aux_dir/ltmain.sh" - -# Always use our own libtool. -LIBTOOL='$(SHELL) $(top_builddir)/libtool' -AC_SUBST(LIBTOOL)dnl - -# Prevent multiple expansion -define([AC_PROG_LIBTOOL], []) -])# _AC_PROG_LIBTOOL - - -# AC_LIBTOOL_SETUP -# ---------------- -AC_DEFUN([AC_LIBTOOL_SETUP], -[AC_PREREQ(2.50)dnl -AC_REQUIRE([AC_ENABLE_SHARED])dnl -AC_REQUIRE([AC_ENABLE_STATIC])dnl -AC_REQUIRE([AC_ENABLE_FAST_INSTALL])dnl -AC_REQUIRE([AC_CANONICAL_HOST])dnl -AC_REQUIRE([AC_CANONICAL_BUILD])dnl -AC_REQUIRE([AC_PROG_CC])dnl -AC_REQUIRE([AC_PROG_LD])dnl -AC_REQUIRE([AC_PROG_LD_RELOAD_FLAG])dnl -AC_REQUIRE([AC_PROG_NM])dnl - -AC_REQUIRE([AC_PROG_LN_S])dnl -AC_REQUIRE([AC_DEPLIBS_CHECK_METHOD])dnl -# Autoconf 2.13's AC_OBJEXT and AC_EXEEXT macros only works for C compilers! -AC_REQUIRE([AC_OBJEXT])dnl -AC_REQUIRE([AC_EXEEXT])dnl -dnl - -AC_LIBTOOL_SYS_MAX_CMD_LEN -AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE -AC_LIBTOOL_OBJDIR - -AC_REQUIRE([_LT_AC_SYS_COMPILER])dnl -_LT_AC_PROG_ECHO_BACKSLASH - -case $host_os in -aix3*) - # AIX sometimes has problems with the GCC collect2 program. For some - # reason, if we set the COLLECT_NAMES environment variable, the problems - # vanish in a puff of smoke. - if test "X${COLLECT_NAMES+set}" != Xset; then - COLLECT_NAMES= - export COLLECT_NAMES - fi - ;; -esac - -# Sed substitution that helps us do robust quoting. It backslashifies -# metacharacters that are still active within double-quoted strings. -Xsed='sed -e 1s/^X//' -[sed_quote_subst='s/\([\\"\\`$\\\\]\)/\\\1/g'] - -# Same as above, but do not quote variable references. -[double_quote_subst='s/\([\\"\\`\\\\]\)/\\\1/g'] - -# Sed substitution to delay expansion of an escaped shell variable in a -# double_quote_subst'ed string. -delay_variable_subst='s/\\\\\\\\\\\$/\\\\\\$/g' - -# Sed substitution to avoid accidental globbing in evaled expressions -no_glob_subst='s/\*/\\\*/g' - -# Constants: -rm="rm -f" - -# Global variables: -default_ofile=libtool -can_build_shared=yes - -# All known linkers require a `.a' archive for static linking (except MSVC, -# which needs '.lib'). -libext=a -ltmain="$ac_aux_dir/ltmain.sh" -ofile="$default_ofile" -with_gnu_ld="$lt_cv_prog_gnu_ld" - -AC_CHECK_TOOL(AR, ar, false) -AC_CHECK_TOOL(RANLIB, ranlib, :) -AC_CHECK_TOOL(STRIP, strip, :) - -old_CC="$CC" -old_CFLAGS="$CFLAGS" - -# Set sane defaults for various variables -test -z "$AR" && AR=ar -test -z "$AR_FLAGS" && AR_FLAGS=cru -test -z "$AS" && AS=as -test -z "$CC" && CC=cc -test -z "$LTCC" && LTCC=$CC -test -z "$LTCFLAGS" && LTCFLAGS=$CFLAGS -test -z "$DLLTOOL" && DLLTOOL=dlltool -test -z "$LD" && LD=ld -test -z "$LN_S" && LN_S="ln -s" -test -z "$MAGIC_CMD" && MAGIC_CMD=file -test -z "$NM" && NM=nm -test -z "$SED" && SED=sed -test -z "$OBJDUMP" && OBJDUMP=objdump -test -z "$RANLIB" && RANLIB=: -test -z "$STRIP" && STRIP=: -test -z "$ac_objext" && ac_objext=o - -# Determine commands to create old-style static archives. -old_archive_cmds='$AR $AR_FLAGS $oldlib$oldobjs' -old_postinstall_cmds='chmod 644 $oldlib' -old_postuninstall_cmds= - -if test -n "$RANLIB"; then - case $host_os in - openbsd*) - old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB -t \$oldlib" - ;; - *) - old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB \$oldlib" - ;; - esac - old_archive_cmds="$old_archive_cmds~\$RANLIB \$oldlib" -fi - -_LT_CC_BASENAME([$compiler]) - -# Only perform the check for file, if the check method requires it -case $deplibs_check_method in -file_magic*) - if test "$file_magic_cmd" = '$MAGIC_CMD'; then - AC_PATH_MAGIC - fi - ;; -esac - -AC_PROVIDE_IFELSE([AC_LIBTOOL_DLOPEN], enable_dlopen=yes, enable_dlopen=no) -AC_PROVIDE_IFELSE([AC_LIBTOOL_WIN32_DLL], -enable_win32_dll=yes, enable_win32_dll=no) - -AC_ARG_ENABLE([libtool-lock], - [AC_HELP_STRING([--disable-libtool-lock], - [avoid locking (might break parallel builds)])]) -test "x$enable_libtool_lock" != xno && enable_libtool_lock=yes - -AC_ARG_WITH([pic], - [AC_HELP_STRING([--with-pic], - [try to use only PIC/non-PIC objects @<:@default=use both@:>@])], - [pic_mode="$withval"], - [pic_mode=default]) -test -z "$pic_mode" && pic_mode=default - -# Use C for the default configuration in the libtool script -tagname= -AC_LIBTOOL_LANG_C_CONFIG -_LT_AC_TAGCONFIG -])# AC_LIBTOOL_SETUP - - -# _LT_AC_SYS_COMPILER -# ------------------- -AC_DEFUN([_LT_AC_SYS_COMPILER], -[AC_REQUIRE([AC_PROG_CC])dnl - -# If no C compiler was specified, use CC. -LTCC=${LTCC-"$CC"} - -# If no C compiler flags were specified, use CFLAGS. -LTCFLAGS=${LTCFLAGS-"$CFLAGS"} - -# Allow CC to be a program name with arguments. -compiler=$CC -])# _LT_AC_SYS_COMPILER - - -# _LT_CC_BASENAME(CC) -# ------------------- -# Calculate cc_basename. Skip known compiler wrappers and cross-prefix. -AC_DEFUN([_LT_CC_BASENAME], -[for cc_temp in $1""; do - case $cc_temp in - compile | *[[\\/]]compile | ccache | *[[\\/]]ccache ) ;; - distcc | *[[\\/]]distcc | purify | *[[\\/]]purify ) ;; - \-*) ;; - *) break;; - esac -done -cc_basename=`$echo "X$cc_temp" | $Xsed -e 's%.*/%%' -e "s%^$host_alias-%%"` -]) - - -# _LT_COMPILER_BOILERPLATE -# ------------------------ -# Check for compiler boilerplate output or warnings with -# the simple compiler test code. -AC_DEFUN([_LT_COMPILER_BOILERPLATE], -[AC_REQUIRE([LT_AC_PROG_SED])dnl -ac_outfile=conftest.$ac_objext -echo "$lt_simple_compile_test_code" >conftest.$ac_ext -eval "$ac_compile" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err -_lt_compiler_boilerplate=`cat conftest.err` -$rm conftest* -])# _LT_COMPILER_BOILERPLATE - - -# _LT_LINKER_BOILERPLATE -# ---------------------- -# Check for linker boilerplate output or warnings with -# the simple link test code. -AC_DEFUN([_LT_LINKER_BOILERPLATE], -[AC_REQUIRE([LT_AC_PROG_SED])dnl -ac_outfile=conftest.$ac_objext -echo "$lt_simple_link_test_code" >conftest.$ac_ext -eval "$ac_link" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err -_lt_linker_boilerplate=`cat conftest.err` -$rm conftest* -])# _LT_LINKER_BOILERPLATE - - -# _LT_AC_SYS_LIBPATH_AIX -# ---------------------- -# Links a minimal program and checks the executable -# for the system default hardcoded library path. In most cases, -# this is /usr/lib:/lib, but when the MPI compilers are used -# the location of the communication and MPI libs are included too. -# If we don't find anything, use the default library path according -# to the aix ld manual. -AC_DEFUN([_LT_AC_SYS_LIBPATH_AIX], -[AC_REQUIRE([LT_AC_PROG_SED])dnl -AC_LINK_IFELSE(AC_LANG_PROGRAM,[ -lt_aix_libpath_sed=' - /Import File Strings/,/^$/ { - /^0/ { - s/^0 *\(.*\)$/\1/ - p - } - }' -aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` -# Check for a 64-bit object if we didn't find anything. -if test -z "$aix_libpath"; then - aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` -fi],[]) -if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi -])# _LT_AC_SYS_LIBPATH_AIX - - -# _LT_AC_SHELL_INIT(ARG) -# ---------------------- -AC_DEFUN([_LT_AC_SHELL_INIT], -[ifdef([AC_DIVERSION_NOTICE], - [AC_DIVERT_PUSH(AC_DIVERSION_NOTICE)], - [AC_DIVERT_PUSH(NOTICE)]) -$1 -AC_DIVERT_POP -])# _LT_AC_SHELL_INIT - - -# _LT_AC_PROG_ECHO_BACKSLASH -# -------------------------- -# Add some code to the start of the generated configure script which -# will find an echo command which doesn't interpret backslashes. -AC_DEFUN([_LT_AC_PROG_ECHO_BACKSLASH], -[_LT_AC_SHELL_INIT([ -# Check that we are running under the correct shell. -SHELL=${CONFIG_SHELL-/bin/sh} - -case X$ECHO in -X*--fallback-echo) - # Remove one level of quotation (which was required for Make). - ECHO=`echo "$ECHO" | sed 's,\\\\\[$]\\[$]0,'[$]0','` - ;; -esac - -echo=${ECHO-echo} -if test "X[$]1" = X--no-reexec; then - # Discard the --no-reexec flag, and continue. - shift -elif test "X[$]1" = X--fallback-echo; then - # Avoid inline document here, it may be left over - : -elif test "X`($echo '\t') 2>/dev/null`" = 'X\t' ; then - # Yippee, $echo works! - : -else - # Restart under the correct shell. - exec $SHELL "[$]0" --no-reexec ${1+"[$]@"} -fi - -if test "X[$]1" = X--fallback-echo; then - # used as fallback echo - shift - cat </dev/null 2>&1 && unset CDPATH - -if test -z "$ECHO"; then -if test "X${echo_test_string+set}" != Xset; then -# find a string as large as possible, as long as the shell can cope with it - for cmd in 'sed 50q "[$]0"' 'sed 20q "[$]0"' 'sed 10q "[$]0"' 'sed 2q "[$]0"' 'echo test'; do - # expected sizes: less than 2Kb, 1Kb, 512 bytes, 16 bytes, ... - if (echo_test_string=`eval $cmd`) 2>/dev/null && - echo_test_string=`eval $cmd` && - (test "X$echo_test_string" = "X$echo_test_string") 2>/dev/null - then - break - fi - done -fi - -if test "X`($echo '\t') 2>/dev/null`" = 'X\t' && - echo_testing_string=`($echo "$echo_test_string") 2>/dev/null` && - test "X$echo_testing_string" = "X$echo_test_string"; then - : -else - # The Solaris, AIX, and Digital Unix default echo programs unquote - # backslashes. This makes it impossible to quote backslashes using - # echo "$something" | sed 's/\\/\\\\/g' - # - # So, first we look for a working echo in the user's PATH. - - lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR - for dir in $PATH /usr/ucb; do - IFS="$lt_save_ifs" - if (test -f $dir/echo || test -f $dir/echo$ac_exeext) && - test "X`($dir/echo '\t') 2>/dev/null`" = 'X\t' && - echo_testing_string=`($dir/echo "$echo_test_string") 2>/dev/null` && - test "X$echo_testing_string" = "X$echo_test_string"; then - echo="$dir/echo" - break - fi - done - IFS="$lt_save_ifs" - - if test "X$echo" = Xecho; then - # We didn't find a better echo, so look for alternatives. - if test "X`(print -r '\t') 2>/dev/null`" = 'X\t' && - echo_testing_string=`(print -r "$echo_test_string") 2>/dev/null` && - test "X$echo_testing_string" = "X$echo_test_string"; then - # This shell has a builtin print -r that does the trick. - echo='print -r' - elif (test -f /bin/ksh || test -f /bin/ksh$ac_exeext) && - test "X$CONFIG_SHELL" != X/bin/ksh; then - # If we have ksh, try running configure again with it. - ORIGINAL_CONFIG_SHELL=${CONFIG_SHELL-/bin/sh} - export ORIGINAL_CONFIG_SHELL - CONFIG_SHELL=/bin/ksh - export CONFIG_SHELL - exec $CONFIG_SHELL "[$]0" --no-reexec ${1+"[$]@"} - else - # Try using printf. - echo='printf %s\n' - if test "X`($echo '\t') 2>/dev/null`" = 'X\t' && - echo_testing_string=`($echo "$echo_test_string") 2>/dev/null` && - test "X$echo_testing_string" = "X$echo_test_string"; then - # Cool, printf works - : - elif echo_testing_string=`($ORIGINAL_CONFIG_SHELL "[$]0" --fallback-echo '\t') 2>/dev/null` && - test "X$echo_testing_string" = 'X\t' && - echo_testing_string=`($ORIGINAL_CONFIG_SHELL "[$]0" --fallback-echo "$echo_test_string") 2>/dev/null` && - test "X$echo_testing_string" = "X$echo_test_string"; then - CONFIG_SHELL=$ORIGINAL_CONFIG_SHELL - export CONFIG_SHELL - SHELL="$CONFIG_SHELL" - export SHELL - echo="$CONFIG_SHELL [$]0 --fallback-echo" - elif echo_testing_string=`($CONFIG_SHELL "[$]0" --fallback-echo '\t') 2>/dev/null` && - test "X$echo_testing_string" = 'X\t' && - echo_testing_string=`($CONFIG_SHELL "[$]0" --fallback-echo "$echo_test_string") 2>/dev/null` && - test "X$echo_testing_string" = "X$echo_test_string"; then - echo="$CONFIG_SHELL [$]0 --fallback-echo" - else - # maybe with a smaller string... - prev=: - - for cmd in 'echo test' 'sed 2q "[$]0"' 'sed 10q "[$]0"' 'sed 20q "[$]0"' 'sed 50q "[$]0"'; do - if (test "X$echo_test_string" = "X`eval $cmd`") 2>/dev/null - then - break - fi - prev="$cmd" - done - - if test "$prev" != 'sed 50q "[$]0"'; then - echo_test_string=`eval $prev` - export echo_test_string - exec ${ORIGINAL_CONFIG_SHELL-${CONFIG_SHELL-/bin/sh}} "[$]0" ${1+"[$]@"} - else - # Oops. We lost completely, so just stick with echo. - echo=echo - fi - fi - fi - fi -fi -fi - -# Copy echo and quote the copy suitably for passing to libtool from -# the Makefile, instead of quoting the original, which is used later. -ECHO=$echo -if test "X$ECHO" = "X$CONFIG_SHELL [$]0 --fallback-echo"; then - ECHO="$CONFIG_SHELL \\\$\[$]0 --fallback-echo" -fi - -AC_SUBST(ECHO) -])])# _LT_AC_PROG_ECHO_BACKSLASH - - -# _LT_AC_LOCK -# ----------- -AC_DEFUN([_LT_AC_LOCK], -[AC_ARG_ENABLE([libtool-lock], - [AC_HELP_STRING([--disable-libtool-lock], - [avoid locking (might break parallel builds)])]) -test "x$enable_libtool_lock" != xno && enable_libtool_lock=yes - -# Some flags need to be propagated to the compiler or linker for good -# libtool support. -case $host in -ia64-*-hpux*) - # Find out which ABI we are using. - echo 'int i;' > conftest.$ac_ext - if AC_TRY_EVAL(ac_compile); then - case `/usr/bin/file conftest.$ac_objext` in - *ELF-32*) - HPUX_IA64_MODE="32" - ;; - *ELF-64*) - HPUX_IA64_MODE="64" - ;; - esac - fi - rm -rf conftest* - ;; -*-*-irix6*) - # Find out which ABI we are using. - echo '[#]line __oline__ "configure"' > conftest.$ac_ext - if AC_TRY_EVAL(ac_compile); then - if test "$lt_cv_prog_gnu_ld" = yes; then - case `/usr/bin/file conftest.$ac_objext` in - *32-bit*) - LD="${LD-ld} -melf32bsmip" - ;; - *N32*) - LD="${LD-ld} -melf32bmipn32" - ;; - *64-bit*) - LD="${LD-ld} -melf64bmip" - ;; - esac - else - case `/usr/bin/file conftest.$ac_objext` in - *32-bit*) - LD="${LD-ld} -32" - ;; - *N32*) - LD="${LD-ld} -n32" - ;; - *64-bit*) - LD="${LD-ld} -64" - ;; - esac - fi - fi - rm -rf conftest* - ;; - -x86_64-*kfreebsd*-gnu|x86_64-*linux*|ppc*-*linux*|powerpc*-*linux*| \ -s390*-*linux*|sparc*-*linux*) - # Find out which ABI we are using. - echo 'int i;' > conftest.$ac_ext - if AC_TRY_EVAL(ac_compile); then - case `/usr/bin/file conftest.o` in - *32-bit*) - case $host in - x86_64-*kfreebsd*-gnu) - LD="${LD-ld} -m elf_i386_fbsd" - ;; - x86_64-*linux*) - LD="${LD-ld} -m elf_i386" - ;; - ppc64-*linux*|powerpc64-*linux*) - LD="${LD-ld} -m elf32ppclinux" - ;; - s390x-*linux*) - LD="${LD-ld} -m elf_s390" - ;; - sparc64-*linux*) - LD="${LD-ld} -m elf32_sparc" - ;; - esac - ;; - *64-bit*) - libsuff=64 - case $host in - x86_64-*kfreebsd*-gnu) - LD="${LD-ld} -m elf_x86_64_fbsd" - ;; - x86_64-*linux*) - LD="${LD-ld} -m elf_x86_64" - ;; - ppc*-*linux*|powerpc*-*linux*) - LD="${LD-ld} -m elf64ppc" - ;; - s390*-*linux*) - LD="${LD-ld} -m elf64_s390" - ;; - sparc*-*linux*) - LD="${LD-ld} -m elf64_sparc" - ;; - esac - ;; - esac - fi - rm -rf conftest* - ;; - -*-*-sco3.2v5*) - # On SCO OpenServer 5, we need -belf to get full-featured binaries. - SAVE_CFLAGS="$CFLAGS" - CFLAGS="$CFLAGS -belf" - AC_CACHE_CHECK([whether the C compiler needs -belf], lt_cv_cc_needs_belf, - [AC_LANG_PUSH(C) - AC_TRY_LINK([],[],[lt_cv_cc_needs_belf=yes],[lt_cv_cc_needs_belf=no]) - AC_LANG_POP]) - if test x"$lt_cv_cc_needs_belf" != x"yes"; then - # this is probably gcc 2.8.0, egcs 1.0 or newer; no need for -belf - CFLAGS="$SAVE_CFLAGS" - fi - ;; -sparc*-*solaris*) - # Find out which ABI we are using. - echo 'int i;' > conftest.$ac_ext - if AC_TRY_EVAL(ac_compile); then - case `/usr/bin/file conftest.o` in - *64-bit*) - case $lt_cv_prog_gnu_ld in - yes*) LD="${LD-ld} -m elf64_sparc" ;; - *) LD="${LD-ld} -64" ;; - esac - ;; - esac - fi - rm -rf conftest* - ;; - -AC_PROVIDE_IFELSE([AC_LIBTOOL_WIN32_DLL], -[*-*-cygwin* | *-*-mingw* | *-*-pw32*) - AC_CHECK_TOOL(DLLTOOL, dlltool, false) - AC_CHECK_TOOL(AS, as, false) - AC_CHECK_TOOL(OBJDUMP, objdump, false) - ;; - ]) -esac - -need_locks="$enable_libtool_lock" - -])# _LT_AC_LOCK - - -# AC_LIBTOOL_COMPILER_OPTION(MESSAGE, VARIABLE-NAME, FLAGS, -# [OUTPUT-FILE], [ACTION-SUCCESS], [ACTION-FAILURE]) -# ---------------------------------------------------------------- -# Check whether the given compiler option works -AC_DEFUN([AC_LIBTOOL_COMPILER_OPTION], -[AC_REQUIRE([LT_AC_PROG_SED]) -AC_CACHE_CHECK([$1], [$2], - [$2=no - ifelse([$4], , [ac_outfile=conftest.$ac_objext], [ac_outfile=$4]) - echo "$lt_simple_compile_test_code" > conftest.$ac_ext - lt_compiler_flag="$3" - # Insert the option either (1) after the last *FLAGS variable, or - # (2) before a word containing "conftest.", or (3) at the end. - # Note that $ac_compile itself does not contain backslashes and begins - # with a dollar sign (not a hyphen), so the echo should work correctly. - # The option is referenced via a variable to avoid confusing sed. - lt_compile=`echo "$ac_compile" | $SED \ - -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ - -e 's: [[^ ]]*conftest\.: $lt_compiler_flag&:; t' \ - -e 's:$: $lt_compiler_flag:'` - (eval echo "\"\$as_me:__oline__: $lt_compile\"" >&AS_MESSAGE_LOG_FD) - (eval "$lt_compile" 2>conftest.err) - ac_status=$? - cat conftest.err >&AS_MESSAGE_LOG_FD - echo "$as_me:__oline__: \$? = $ac_status" >&AS_MESSAGE_LOG_FD - if (exit $ac_status) && test -s "$ac_outfile"; then - # The compiler can only warn and ignore the option if not recognized - # So say no if there are warnings other than the usual output. - $echo "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' >conftest.exp - $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 - if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then - $2=yes - fi - fi - $rm conftest* -]) - -if test x"[$]$2" = xyes; then - ifelse([$5], , :, [$5]) -else - ifelse([$6], , :, [$6]) -fi -])# AC_LIBTOOL_COMPILER_OPTION - - -# AC_LIBTOOL_LINKER_OPTION(MESSAGE, VARIABLE-NAME, FLAGS, -# [ACTION-SUCCESS], [ACTION-FAILURE]) -# ------------------------------------------------------------ -# Check whether the given compiler option works -AC_DEFUN([AC_LIBTOOL_LINKER_OPTION], -[AC_REQUIRE([LT_AC_PROG_SED])dnl -AC_CACHE_CHECK([$1], [$2], - [$2=no - save_LDFLAGS="$LDFLAGS" - LDFLAGS="$LDFLAGS $3" - echo "$lt_simple_link_test_code" > conftest.$ac_ext - if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then - # The linker can only warn and ignore the option if not recognized - # So say no if there are warnings - if test -s conftest.err; then - # Append any errors to the config.log. - cat conftest.err 1>&AS_MESSAGE_LOG_FD - $echo "X$_lt_linker_boilerplate" | $Xsed -e '/^$/d' > conftest.exp - $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 - if diff conftest.exp conftest.er2 >/dev/null; then - $2=yes - fi - else - $2=yes - fi - fi - $rm conftest* - LDFLAGS="$save_LDFLAGS" -]) - -if test x"[$]$2" = xyes; then - ifelse([$4], , :, [$4]) -else - ifelse([$5], , :, [$5]) -fi -])# AC_LIBTOOL_LINKER_OPTION - - -# AC_LIBTOOL_SYS_MAX_CMD_LEN -# -------------------------- -AC_DEFUN([AC_LIBTOOL_SYS_MAX_CMD_LEN], -[# find the maximum length of command line arguments -AC_MSG_CHECKING([the maximum length of command line arguments]) -AC_CACHE_VAL([lt_cv_sys_max_cmd_len], [dnl - i=0 - teststring="ABCD" - - case $build_os in - msdosdjgpp*) - # On DJGPP, this test can blow up pretty badly due to problems in libc - # (any single argument exceeding 2000 bytes causes a buffer overrun - # during glob expansion). Even if it were fixed, the result of this - # check would be larger than it should be. - lt_cv_sys_max_cmd_len=12288; # 12K is about right - ;; - - gnu*) - # Under GNU Hurd, this test is not required because there is - # no limit to the length of command line arguments. - # Libtool will interpret -1 as no limit whatsoever - lt_cv_sys_max_cmd_len=-1; - ;; - - cygwin* | mingw*) - # On Win9x/ME, this test blows up -- it succeeds, but takes - # about 5 minutes as the teststring grows exponentially. - # Worse, since 9x/ME are not pre-emptively multitasking, - # you end up with a "frozen" computer, even though with patience - # the test eventually succeeds (with a max line length of 256k). - # Instead, let's just punt: use the minimum linelength reported by - # all of the supported platforms: 8192 (on NT/2K/XP). - lt_cv_sys_max_cmd_len=8192; - ;; - - amigaos*) - # On AmigaOS with pdksh, this test takes hours, literally. - # So we just punt and use a minimum line length of 8192. - lt_cv_sys_max_cmd_len=8192; - ;; - - netbsd* | freebsd* | openbsd* | darwin* | dragonfly*) - # This has been around since 386BSD, at least. Likely further. - if test -x /sbin/sysctl; then - lt_cv_sys_max_cmd_len=`/sbin/sysctl -n kern.argmax` - elif test -x /usr/sbin/sysctl; then - lt_cv_sys_max_cmd_len=`/usr/sbin/sysctl -n kern.argmax` - else - lt_cv_sys_max_cmd_len=65536 # usable default for all BSDs - fi - # And add a safety zone - lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4` - lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3` - ;; - - interix*) - # We know the value 262144 and hardcode it with a safety zone (like BSD) - lt_cv_sys_max_cmd_len=196608 - ;; - - osf*) - # Dr. Hans Ekkehard Plesser reports seeing a kernel panic running configure - # due to this test when exec_disable_arg_limit is 1 on Tru64. It is not - # nice to cause kernel panics so lets avoid the loop below. - # First set a reasonable default. - lt_cv_sys_max_cmd_len=16384 - # - if test -x /sbin/sysconfig; then - case `/sbin/sysconfig -q proc exec_disable_arg_limit` in - *1*) lt_cv_sys_max_cmd_len=-1 ;; - esac - fi - ;; - sco3.2v5*) - lt_cv_sys_max_cmd_len=102400 - ;; - sysv5* | sco5v6* | sysv4.2uw2*) - kargmax=`grep ARG_MAX /etc/conf/cf.d/stune 2>/dev/null` - if test -n "$kargmax"; then - lt_cv_sys_max_cmd_len=`echo $kargmax | sed 's/.*[[ ]]//'` - else - lt_cv_sys_max_cmd_len=32768 - fi - ;; - *) - lt_cv_sys_max_cmd_len=`(getconf ARG_MAX) 2> /dev/null` - if test -n "$lt_cv_sys_max_cmd_len"; then - lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4` - lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3` - else - SHELL=${SHELL-${CONFIG_SHELL-/bin/sh}} - while (test "X"`$SHELL [$]0 --fallback-echo "X$teststring" 2>/dev/null` \ - = "XX$teststring") >/dev/null 2>&1 && - new_result=`expr "X$teststring" : ".*" 2>&1` && - lt_cv_sys_max_cmd_len=$new_result && - test $i != 17 # 1/2 MB should be enough - do - i=`expr $i + 1` - teststring=$teststring$teststring - done - teststring= - # Add a significant safety factor because C++ compilers can tack on massive - # amounts of additional arguments before passing them to the linker. - # It appears as though 1/2 is a usable value. - lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 2` - fi - ;; - esac -]) -if test -n $lt_cv_sys_max_cmd_len ; then - AC_MSG_RESULT($lt_cv_sys_max_cmd_len) -else - AC_MSG_RESULT(none) -fi -])# AC_LIBTOOL_SYS_MAX_CMD_LEN - - -# _LT_AC_CHECK_DLFCN -# ------------------ -AC_DEFUN([_LT_AC_CHECK_DLFCN], -[AC_CHECK_HEADERS(dlfcn.h)dnl -])# _LT_AC_CHECK_DLFCN - - -# _LT_AC_TRY_DLOPEN_SELF (ACTION-IF-TRUE, ACTION-IF-TRUE-W-USCORE, -# ACTION-IF-FALSE, ACTION-IF-CROSS-COMPILING) -# --------------------------------------------------------------------- -AC_DEFUN([_LT_AC_TRY_DLOPEN_SELF], -[AC_REQUIRE([_LT_AC_CHECK_DLFCN])dnl -if test "$cross_compiling" = yes; then : - [$4] -else - lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 - lt_status=$lt_dlunknown - cat > conftest.$ac_ext < -#endif - -#include - -#ifdef RTLD_GLOBAL -# define LT_DLGLOBAL RTLD_GLOBAL -#else -# ifdef DL_GLOBAL -# define LT_DLGLOBAL DL_GLOBAL -# else -# define LT_DLGLOBAL 0 -# endif -#endif - -/* We may have to define LT_DLLAZY_OR_NOW in the command line if we - find out it does not work in some platform. */ -#ifndef LT_DLLAZY_OR_NOW -# ifdef RTLD_LAZY -# define LT_DLLAZY_OR_NOW RTLD_LAZY -# else -# ifdef DL_LAZY -# define LT_DLLAZY_OR_NOW DL_LAZY -# else -# ifdef RTLD_NOW -# define LT_DLLAZY_OR_NOW RTLD_NOW -# else -# ifdef DL_NOW -# define LT_DLLAZY_OR_NOW DL_NOW -# else -# define LT_DLLAZY_OR_NOW 0 -# endif -# endif -# endif -# endif -#endif - -#ifdef __cplusplus -extern "C" void exit (int); -#endif - -void fnord() { int i=42;} -int main () -{ - void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW); - int status = $lt_dlunknown; - - if (self) - { - if (dlsym (self,"fnord")) status = $lt_dlno_uscore; - else if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore; - /* dlclose (self); */ - } - else - puts (dlerror ()); - - exit (status); -}] -EOF - if AC_TRY_EVAL(ac_link) && test -s conftest${ac_exeext} 2>/dev/null; then - (./conftest; exit; ) >&AS_MESSAGE_LOG_FD 2>/dev/null - lt_status=$? - case x$lt_status in - x$lt_dlno_uscore) $1 ;; - x$lt_dlneed_uscore) $2 ;; - x$lt_dlunknown|x*) $3 ;; - esac - else : - # compilation failed - $3 - fi -fi -rm -fr conftest* -])# _LT_AC_TRY_DLOPEN_SELF - - -# AC_LIBTOOL_DLOPEN_SELF -# ---------------------- -AC_DEFUN([AC_LIBTOOL_DLOPEN_SELF], -[AC_REQUIRE([_LT_AC_CHECK_DLFCN])dnl -if test "x$enable_dlopen" != xyes; then - enable_dlopen=unknown - enable_dlopen_self=unknown - enable_dlopen_self_static=unknown -else - lt_cv_dlopen=no - lt_cv_dlopen_libs= - - case $host_os in - beos*) - lt_cv_dlopen="load_add_on" - lt_cv_dlopen_libs= - lt_cv_dlopen_self=yes - ;; - - mingw* | pw32*) - lt_cv_dlopen="LoadLibrary" - lt_cv_dlopen_libs= - ;; - - cygwin*) - lt_cv_dlopen="dlopen" - lt_cv_dlopen_libs= - ;; - - darwin*) - # if libdl is installed we need to link against it - AC_CHECK_LIB([dl], [dlopen], - [lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl"],[ - lt_cv_dlopen="dyld" - lt_cv_dlopen_libs= - lt_cv_dlopen_self=yes - ]) - ;; - - *) - AC_CHECK_FUNC([shl_load], - [lt_cv_dlopen="shl_load"], - [AC_CHECK_LIB([dld], [shl_load], - [lt_cv_dlopen="shl_load" lt_cv_dlopen_libs="-dld"], - [AC_CHECK_FUNC([dlopen], - [lt_cv_dlopen="dlopen"], - [AC_CHECK_LIB([dl], [dlopen], - [lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl"], - [AC_CHECK_LIB([svld], [dlopen], - [lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-lsvld"], - [AC_CHECK_LIB([dld], [dld_link], - [lt_cv_dlopen="dld_link" lt_cv_dlopen_libs="-dld"]) - ]) - ]) - ]) - ]) - ]) - ;; - esac - - if test "x$lt_cv_dlopen" != xno; then - enable_dlopen=yes - else - enable_dlopen=no - fi - - case $lt_cv_dlopen in - dlopen) - save_CPPFLAGS="$CPPFLAGS" - test "x$ac_cv_header_dlfcn_h" = xyes && CPPFLAGS="$CPPFLAGS -DHAVE_DLFCN_H" - - save_LDFLAGS="$LDFLAGS" - wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $export_dynamic_flag_spec\" - - save_LIBS="$LIBS" - LIBS="$lt_cv_dlopen_libs $LIBS" - - AC_CACHE_CHECK([whether a program can dlopen itself], - lt_cv_dlopen_self, [dnl - _LT_AC_TRY_DLOPEN_SELF( - lt_cv_dlopen_self=yes, lt_cv_dlopen_self=yes, - lt_cv_dlopen_self=no, lt_cv_dlopen_self=cross) - ]) - - if test "x$lt_cv_dlopen_self" = xyes; then - wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $lt_prog_compiler_static\" - AC_CACHE_CHECK([whether a statically linked program can dlopen itself], - lt_cv_dlopen_self_static, [dnl - _LT_AC_TRY_DLOPEN_SELF( - lt_cv_dlopen_self_static=yes, lt_cv_dlopen_self_static=yes, - lt_cv_dlopen_self_static=no, lt_cv_dlopen_self_static=cross) - ]) - fi - - CPPFLAGS="$save_CPPFLAGS" - LDFLAGS="$save_LDFLAGS" - LIBS="$save_LIBS" - ;; - esac - - case $lt_cv_dlopen_self in - yes|no) enable_dlopen_self=$lt_cv_dlopen_self ;; - *) enable_dlopen_self=unknown ;; - esac - - case $lt_cv_dlopen_self_static in - yes|no) enable_dlopen_self_static=$lt_cv_dlopen_self_static ;; - *) enable_dlopen_self_static=unknown ;; - esac -fi -])# AC_LIBTOOL_DLOPEN_SELF - - -# AC_LIBTOOL_PROG_CC_C_O([TAGNAME]) -# --------------------------------- -# Check to see if options -c and -o are simultaneously supported by compiler -AC_DEFUN([AC_LIBTOOL_PROG_CC_C_O], -[AC_REQUIRE([LT_AC_PROG_SED])dnl -AC_REQUIRE([_LT_AC_SYS_COMPILER])dnl -AC_CACHE_CHECK([if $compiler supports -c -o file.$ac_objext], - [_LT_AC_TAGVAR(lt_cv_prog_compiler_c_o, $1)], - [_LT_AC_TAGVAR(lt_cv_prog_compiler_c_o, $1)=no - $rm -r conftest 2>/dev/null - mkdir conftest - cd conftest - mkdir out - echo "$lt_simple_compile_test_code" > conftest.$ac_ext - - lt_compiler_flag="-o out/conftest2.$ac_objext" - # Insert the option either (1) after the last *FLAGS variable, or - # (2) before a word containing "conftest.", or (3) at the end. - # Note that $ac_compile itself does not contain backslashes and begins - # with a dollar sign (not a hyphen), so the echo should work correctly. - lt_compile=`echo "$ac_compile" | $SED \ - -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ - -e 's: [[^ ]]*conftest\.: $lt_compiler_flag&:; t' \ - -e 's:$: $lt_compiler_flag:'` - (eval echo "\"\$as_me:__oline__: $lt_compile\"" >&AS_MESSAGE_LOG_FD) - (eval "$lt_compile" 2>out/conftest.err) - ac_status=$? - cat out/conftest.err >&AS_MESSAGE_LOG_FD - echo "$as_me:__oline__: \$? = $ac_status" >&AS_MESSAGE_LOG_FD - if (exit $ac_status) && test -s out/conftest2.$ac_objext - then - # The compiler can only warn and ignore the option if not recognized - # So say no if there are warnings - $echo "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' > out/conftest.exp - $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2 - if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then - _LT_AC_TAGVAR(lt_cv_prog_compiler_c_o, $1)=yes - fi - fi - chmod u+w . 2>&AS_MESSAGE_LOG_FD - $rm conftest* - # SGI C++ compiler will create directory out/ii_files/ for - # template instantiation - test -d out/ii_files && $rm out/ii_files/* && rmdir out/ii_files - $rm out/* && rmdir out - cd .. - rmdir conftest - $rm conftest* -]) -])# AC_LIBTOOL_PROG_CC_C_O - - -# AC_LIBTOOL_SYS_HARD_LINK_LOCKS([TAGNAME]) -# ----------------------------------------- -# Check to see if we can do hard links to lock some files if needed -AC_DEFUN([AC_LIBTOOL_SYS_HARD_LINK_LOCKS], -[AC_REQUIRE([_LT_AC_LOCK])dnl - -hard_links="nottested" -if test "$_LT_AC_TAGVAR(lt_cv_prog_compiler_c_o, $1)" = no && test "$need_locks" != no; then - # do not overwrite the value of need_locks provided by the user - AC_MSG_CHECKING([if we can lock with hard links]) - hard_links=yes - $rm conftest* - ln conftest.a conftest.b 2>/dev/null && hard_links=no - touch conftest.a - ln conftest.a conftest.b 2>&5 || hard_links=no - ln conftest.a conftest.b 2>/dev/null && hard_links=no - AC_MSG_RESULT([$hard_links]) - if test "$hard_links" = no; then - AC_MSG_WARN([`$CC' does not support `-c -o', so `make -j' may be unsafe]) - need_locks=warn - fi -else - need_locks=no -fi -])# AC_LIBTOOL_SYS_HARD_LINK_LOCKS - - -# AC_LIBTOOL_OBJDIR -# ----------------- -AC_DEFUN([AC_LIBTOOL_OBJDIR], -[AC_CACHE_CHECK([for objdir], [lt_cv_objdir], -[rm -f .libs 2>/dev/null -mkdir .libs 2>/dev/null -if test -d .libs; then - lt_cv_objdir=.libs -else - # MS-DOS does not allow filenames that begin with a dot. - lt_cv_objdir=_libs -fi -rmdir .libs 2>/dev/null]) -objdir=$lt_cv_objdir -])# AC_LIBTOOL_OBJDIR - - -# AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH([TAGNAME]) -# ---------------------------------------------- -# Check hardcoding attributes. -AC_DEFUN([AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH], -[AC_MSG_CHECKING([how to hardcode library paths into programs]) -_LT_AC_TAGVAR(hardcode_action, $1)= -if test -n "$_LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)" || \ - test -n "$_LT_AC_TAGVAR(runpath_var, $1)" || \ - test "X$_LT_AC_TAGVAR(hardcode_automatic, $1)" = "Xyes" ; then - - # We can hardcode non-existent directories. - if test "$_LT_AC_TAGVAR(hardcode_direct, $1)" != no && - # If the only mechanism to avoid hardcoding is shlibpath_var, we - # have to relink, otherwise we might link with an installed library - # when we should be linking with a yet-to-be-installed one - ## test "$_LT_AC_TAGVAR(hardcode_shlibpath_var, $1)" != no && - test "$_LT_AC_TAGVAR(hardcode_minus_L, $1)" != no; then - # Linking always hardcodes the temporary library directory. - _LT_AC_TAGVAR(hardcode_action, $1)=relink - else - # We can link without hardcoding, and we can hardcode nonexisting dirs. - _LT_AC_TAGVAR(hardcode_action, $1)=immediate - fi -else - # We cannot hardcode anything, or else we can only hardcode existing - # directories. - _LT_AC_TAGVAR(hardcode_action, $1)=unsupported -fi -AC_MSG_RESULT([$_LT_AC_TAGVAR(hardcode_action, $1)]) - -if test "$_LT_AC_TAGVAR(hardcode_action, $1)" = relink; then - # Fast installation is not supported - enable_fast_install=no -elif test "$shlibpath_overrides_runpath" = yes || - test "$enable_shared" = no; then - # Fast installation is not necessary - enable_fast_install=needless -fi -])# AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH - - -# AC_LIBTOOL_SYS_LIB_STRIP -# ------------------------ -AC_DEFUN([AC_LIBTOOL_SYS_LIB_STRIP], -[striplib= -old_striplib= -AC_MSG_CHECKING([whether stripping libraries is possible]) -if test -n "$STRIP" && $STRIP -V 2>&1 | grep "GNU strip" >/dev/null; then - test -z "$old_striplib" && old_striplib="$STRIP --strip-debug" - test -z "$striplib" && striplib="$STRIP --strip-unneeded" - AC_MSG_RESULT([yes]) -else -# FIXME - insert some real tests, host_os isn't really good enough - case $host_os in - darwin*) - if test -n "$STRIP" ; then - striplib="$STRIP -x" - old_striplib="$STRIP -S" - AC_MSG_RESULT([yes]) - else - AC_MSG_RESULT([no]) -fi - ;; - *) - AC_MSG_RESULT([no]) - ;; - esac -fi -])# AC_LIBTOOL_SYS_LIB_STRIP - - -# AC_LIBTOOL_SYS_DYNAMIC_LINKER -# ----------------------------- -# PORTME Fill in your ld.so characteristics -AC_DEFUN([AC_LIBTOOL_SYS_DYNAMIC_LINKER], -[AC_REQUIRE([LT_AC_PROG_SED])dnl -AC_MSG_CHECKING([dynamic linker characteristics]) -library_names_spec= -libname_spec='lib$name' -soname_spec= -shrext_cmds=".so" -postinstall_cmds= -postuninstall_cmds= -finish_cmds= -finish_eval= -shlibpath_var= -shlibpath_overrides_runpath=unknown -version_type=none -dynamic_linker="$host_os ld.so" -sys_lib_dlsearch_path_spec="/lib /usr/lib" -m4_if($1,[],[ -if test "$GCC" = yes; then - case $host_os in - darwin*) lt_awk_arg="/^libraries:/,/LR/" ;; - *) lt_awk_arg="/^libraries:/" ;; - esac - lt_search_path_spec=`$CC -print-search-dirs | awk $lt_awk_arg | $SED -e "s/^libraries://" -e "s,=/,/,g"` - if echo "$lt_search_path_spec" | grep ';' >/dev/null ; then - # if the path contains ";" then we assume it to be the separator - # otherwise default to the standard path separator (i.e. ":") - it is - # assumed that no part of a normal pathname contains ";" but that should - # okay in the real world where ";" in dirpaths is itself problematic. - lt_search_path_spec=`echo "$lt_search_path_spec" | $SED -e 's/;/ /g'` - else - lt_search_path_spec=`echo "$lt_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` - fi - # Ok, now we have the path, separated by spaces, we can step through it - # and add multilib dir if necessary. - lt_tmp_lt_search_path_spec= - lt_multi_os_dir=`$CC $CPPFLAGS $CFLAGS $LDFLAGS -print-multi-os-directory 2>/dev/null` - for lt_sys_path in $lt_search_path_spec; do - if test -d "$lt_sys_path/$lt_multi_os_dir"; then - lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path/$lt_multi_os_dir" - else - test -d "$lt_sys_path" && \ - lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path" - fi - done - lt_search_path_spec=`echo $lt_tmp_lt_search_path_spec | awk ' -BEGIN {RS=" "; FS="/|\n";} { - lt_foo=""; - lt_count=0; - for (lt_i = NF; lt_i > 0; lt_i--) { - if ($lt_i != "" && $lt_i != ".") { - if ($lt_i == "..") { - lt_count++; - } else { - if (lt_count == 0) { - lt_foo="/" $lt_i lt_foo; - } else { - lt_count--; - } - } - } - } - if (lt_foo != "") { lt_freq[[lt_foo]]++; } - if (lt_freq[[lt_foo]] == 1) { print lt_foo; } -}'` - sys_lib_search_path_spec=`echo $lt_search_path_spec` -else - sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib" -fi]) -need_lib_prefix=unknown -hardcode_into_libs=no - -# when you set need_version to no, make sure it does not cause -set_version -# flags to be left without arguments -need_version=unknown - -case $host_os in -aix3*) - version_type=linux - library_names_spec='${libname}${release}${shared_ext}$versuffix $libname.a' - shlibpath_var=LIBPATH - - # AIX 3 has no versioning support, so we append a major version to the name. - soname_spec='${libname}${release}${shared_ext}$major' - ;; - -aix4* | aix5*) - version_type=linux - need_lib_prefix=no - need_version=no - hardcode_into_libs=yes - if test "$host_cpu" = ia64; then - # AIX 5 supports IA64 - library_names_spec='${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext}$versuffix $libname${shared_ext}' - shlibpath_var=LD_LIBRARY_PATH - else - # With GCC up to 2.95.x, collect2 would create an import file - # for dependence libraries. The import file would start with - # the line `#! .'. This would cause the generated library to - # depend on `.', always an invalid library. This was fixed in - # development snapshots of GCC prior to 3.0. - case $host_os in - aix4 | aix4.[[01]] | aix4.[[01]].*) - if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)' - echo ' yes ' - echo '#endif'; } | ${CC} -E - | grep yes > /dev/null; then - : - else - can_build_shared=no - fi - ;; - esac - # AIX (on Power*) has no versioning support, so currently we can not hardcode correct - # soname into executable. Probably we can add versioning support to - # collect2, so additional links can be useful in future. - if test "$aix_use_runtimelinking" = yes; then - # If using run time linking (on AIX 4.2 or later) use lib.so - # instead of lib.a to let people know that these are not - # typical AIX shared libraries. - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - else - # We preserve .a as extension for shared libraries through AIX4.2 - # and later when we are not doing run time linking. - library_names_spec='${libname}${release}.a $libname.a' - soname_spec='${libname}${release}${shared_ext}$major' - fi - shlibpath_var=LIBPATH - fi - ;; - -amigaos*) - library_names_spec='$libname.ixlibrary $libname.a' - # Create ${libname}_ixlibrary.a entries in /sys/libs. - finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`$echo "X$lib" | $Xsed -e '\''s%^.*/\([[^/]]*\)\.ixlibrary$%\1%'\''`; test $rm /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done' - ;; - -beos*) - library_names_spec='${libname}${shared_ext}' - dynamic_linker="$host_os ld.so" - shlibpath_var=LIBRARY_PATH - ;; - -bsdi[[45]]*) - version_type=linux - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir' - shlibpath_var=LD_LIBRARY_PATH - sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib" - sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib" - # the default ld.so.conf also contains /usr/contrib/lib and - # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow - # libtool to hard-code these into programs - ;; - -cygwin* | mingw* | pw32*) - version_type=windows - shrext_cmds=".dll" - need_version=no - need_lib_prefix=no - - case $GCC,$host_os in - yes,cygwin* | yes,mingw* | yes,pw32*) - library_names_spec='$libname.dll.a' - # DLL is installed to $(libdir)/../bin by postinstall_cmds - postinstall_cmds='base_file=`basename \${file}`~ - dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i;echo \$dlname'\''`~ - dldir=$destdir/`dirname \$dlpath`~ - test -d \$dldir || mkdir -p \$dldir~ - $install_prog $dir/$dlname \$dldir/$dlname~ - chmod a+x \$dldir/$dlname' - postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ - dlpath=$dir/\$dldll~ - $rm \$dlpath' - shlibpath_overrides_runpath=yes - - case $host_os in - cygwin*) - # Cygwin DLLs use 'cyg' prefix rather than 'lib' - soname_spec='`echo ${libname} | sed -e 's/^lib/cyg/'``echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext}' - sys_lib_search_path_spec="/usr/lib /lib/w32api /lib /usr/local/lib" - ;; - mingw*) - # MinGW DLLs use traditional 'lib' prefix - soname_spec='${libname}`echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext}' - sys_lib_search_path_spec=`$CC -print-search-dirs | grep "^libraries:" | $SED -e "s/^libraries://" -e "s,=/,/,g"` - if echo "$sys_lib_search_path_spec" | [grep ';[c-zC-Z]:/' >/dev/null]; then - # It is most probably a Windows format PATH printed by - # mingw gcc, but we are running on Cygwin. Gcc prints its search - # path with ; separators, and with drive letters. We can handle the - # drive letters (cygwin fileutils understands them), so leave them, - # especially as we might pass files found there to a mingw objdump, - # which wouldn't understand a cygwinified path. Ahh. - sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'` - else - sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` - fi - ;; - pw32*) - # pw32 DLLs use 'pw' prefix rather than 'lib' - library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext}' - ;; - esac - ;; - - *) - library_names_spec='${libname}`echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext} $libname.lib' - ;; - esac - dynamic_linker='Win32 ld.exe' - # FIXME: first we should search . and the directory the executable is in - shlibpath_var=PATH - ;; - -darwin* | rhapsody*) - dynamic_linker="$host_os dyld" - version_type=darwin - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${versuffix}$shared_ext ${libname}${release}${major}$shared_ext ${libname}$shared_ext' - soname_spec='${libname}${release}${major}$shared_ext' - shlibpath_overrides_runpath=yes - shlibpath_var=DYLD_LIBRARY_PATH - shrext_cmds='`test .$module = .yes && echo .so || echo .dylib`' - m4_if([$1], [],[ - sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/local/lib"]) - sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib' - ;; - -dgux*) - version_type=linux - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname$shared_ext' - soname_spec='${libname}${release}${shared_ext}$major' - shlibpath_var=LD_LIBRARY_PATH - ;; - -freebsd1*) - dynamic_linker=no - ;; - -freebsd* | dragonfly*) - # DragonFly does not have aout. When/if they implement a new - # versioning mechanism, adjust this. - if test -x /usr/bin/objformat; then - objformat=`/usr/bin/objformat` - else - case $host_os in - freebsd[[123]]*) objformat=aout ;; - *) objformat=elf ;; - esac - fi - version_type=freebsd-$objformat - case $version_type in - freebsd-elf*) - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' - need_version=no - need_lib_prefix=no - ;; - freebsd-*) - library_names_spec='${libname}${release}${shared_ext}$versuffix $libname${shared_ext}$versuffix' - need_version=yes - ;; - esac - shlibpath_var=LD_LIBRARY_PATH - case $host_os in - freebsd2*) - shlibpath_overrides_runpath=yes - ;; - freebsd3.[[01]]* | freebsdelf3.[[01]]*) - shlibpath_overrides_runpath=yes - hardcode_into_libs=yes - ;; - freebsd3.[[2-9]]* | freebsdelf3.[[2-9]]* | \ - freebsd4.[[0-5]] | freebsdelf4.[[0-5]] | freebsd4.1.1 | freebsdelf4.1.1) - shlibpath_overrides_runpath=no - hardcode_into_libs=yes - ;; - *) # from 4.6 on, and DragonFly - shlibpath_overrides_runpath=yes - hardcode_into_libs=yes - ;; - esac - ;; - -gnu*) - version_type=linux - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - shlibpath_var=LD_LIBRARY_PATH - hardcode_into_libs=yes - ;; - -hpux9* | hpux10* | hpux11*) - # Give a soname corresponding to the major version so that dld.sl refuses to - # link against other versions. - version_type=sunos - need_lib_prefix=no - need_version=no - case $host_cpu in - ia64*) - shrext_cmds='.so' - hardcode_into_libs=yes - dynamic_linker="$host_os dld.so" - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - if test "X$HPUX_IA64_MODE" = X32; then - sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib" - else - sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64" - fi - sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec - ;; - hppa*64*) - shrext_cmds='.sl' - hardcode_into_libs=yes - dynamic_linker="$host_os dld.sl" - shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH - shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64" - sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec - ;; - *) - shrext_cmds='.sl' - dynamic_linker="$host_os dld.sl" - shlibpath_var=SHLIB_PATH - shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - ;; - esac - # HP-UX runs *really* slowly unless shared libraries are mode 555. - postinstall_cmds='chmod 555 $lib' - ;; - -interix[[3-9]]*) - version_type=linux - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - dynamic_linker='Interix 3.x ld.so.1 (PE, like ELF)' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=no - hardcode_into_libs=yes - ;; - -irix5* | irix6* | nonstopux*) - case $host_os in - nonstopux*) version_type=nonstopux ;; - *) - if test "$lt_cv_prog_gnu_ld" = yes; then - version_type=linux - else - version_type=irix - fi ;; - esac - need_lib_prefix=no - need_version=no - soname_spec='${libname}${release}${shared_ext}$major' - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext} $libname${shared_ext}' - case $host_os in - irix5* | nonstopux*) - libsuff= shlibsuff= - ;; - *) - case $LD in # libtool.m4 will add one of these switches to LD - *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ") - libsuff= shlibsuff= libmagic=32-bit;; - *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ") - libsuff=32 shlibsuff=N32 libmagic=N32;; - *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ") - libsuff=64 shlibsuff=64 libmagic=64-bit;; - *) libsuff= shlibsuff= libmagic=never-match;; - esac - ;; - esac - shlibpath_var=LD_LIBRARY${shlibsuff}_PATH - shlibpath_overrides_runpath=no - sys_lib_search_path_spec="/usr/lib${libsuff} /lib${libsuff} /usr/local/lib${libsuff}" - sys_lib_dlsearch_path_spec="/usr/lib${libsuff} /lib${libsuff}" - hardcode_into_libs=yes - ;; - -# No shared lib support for Linux oldld, aout, or coff. -linux*oldld* | linux*aout* | linux*coff*) - dynamic_linker=no - ;; - -# This must be Linux ELF. -linux* | k*bsd*-gnu) - version_type=linux - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=no - # This implies no fast_install, which is unacceptable. - # Some rework will be needed to allow for fast_install - # before this can be enabled. - hardcode_into_libs=yes - sys_lib_search_path_spec="/usr/lib${libsuff} /lib${libsuff} /usr/local/lib${libsuff}" - sys_lib_dlsearch_path_spec="/usr/lib${libsuff} /lib${libsuff}" - - # Append ld.so.conf contents to the search path - if test -f /etc/ld.so.conf; then - lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s 2>/dev/null", \[$]2)); skip = 1; } { if (!skip) print \[$]0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;/^[ ]*hwcap[ ]/d;s/[:, ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;/^$/d' | tr '\n' ' '` - sys_lib_dlsearch_path_spec="$sys_lib_dlsearch_path_spec $lt_ld_extra" - fi - - # We used to test for /lib/ld.so.1 and disable shared libraries on - # powerpc, because MkLinux only supported shared libraries with the - # GNU dynamic linker. Since this was broken with cross compilers, - # most powerpc-linux boxes support dynamic linking these days and - # people can always --disable-shared, the test was removed, and we - # assume the GNU/Linux dynamic linker is in use. - dynamic_linker='GNU/Linux ld.so' - ;; - -netbsd*) - version_type=sunos - need_lib_prefix=no - need_version=no - if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' - finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' - dynamic_linker='NetBSD (a.out) ld.so' - else - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - dynamic_linker='NetBSD ld.elf_so' - fi - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=yes - hardcode_into_libs=yes - ;; - -newsos6) - version_type=linux - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=yes - ;; - -nto-qnx*) - version_type=linux - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=yes - ;; - -openbsd*) - version_type=sunos - sys_lib_dlsearch_path_spec="/usr/lib" - need_lib_prefix=no - # Some older versions of OpenBSD (3.3 at least) *do* need versioned libs. - case $host_os in - openbsd3.3 | openbsd3.3.*) need_version=yes ;; - *) need_version=no ;; - esac - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' - finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' - shlibpath_var=LD_LIBRARY_PATH - if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then - case $host_os in - openbsd2.[[89]] | openbsd2.[[89]].*) - shlibpath_overrides_runpath=no - ;; - *) - shlibpath_overrides_runpath=yes - ;; - esac - else - shlibpath_overrides_runpath=yes - fi - ;; - -os2*) - libname_spec='$name' - shrext_cmds=".dll" - need_lib_prefix=no - library_names_spec='$libname${shared_ext} $libname.a' - dynamic_linker='OS/2 ld.exe' - shlibpath_var=LIBPATH - ;; - -osf3* | osf4* | osf5*) - version_type=osf - need_lib_prefix=no - need_version=no - soname_spec='${libname}${release}${shared_ext}$major' - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - shlibpath_var=LD_LIBRARY_PATH - sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib" - sys_lib_dlsearch_path_spec="$sys_lib_search_path_spec" - ;; - -rdos*) - dynamic_linker=no - ;; - -solaris*) - version_type=linux - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=yes - hardcode_into_libs=yes - # ldd complains unless libraries are executable - postinstall_cmds='chmod +x $lib' - ;; - -sunos4*) - version_type=sunos - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' - finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=yes - if test "$with_gnu_ld" = yes; then - need_lib_prefix=no - fi - need_version=yes - ;; - -sysv4 | sysv4.3*) - version_type=linux - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - shlibpath_var=LD_LIBRARY_PATH - case $host_vendor in - sni) - shlibpath_overrides_runpath=no - need_lib_prefix=no - export_dynamic_flag_spec='${wl}-Blargedynsym' - runpath_var=LD_RUN_PATH - ;; - siemens) - need_lib_prefix=no - ;; - motorola) - need_lib_prefix=no - need_version=no - shlibpath_overrides_runpath=no - sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib' - ;; - esac - ;; - -sysv4*MP*) - if test -d /usr/nec ;then - version_type=linux - library_names_spec='$libname${shared_ext}.$versuffix $libname${shared_ext}.$major $libname${shared_ext}' - soname_spec='$libname${shared_ext}.$major' - shlibpath_var=LD_LIBRARY_PATH - fi - ;; - -sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) - version_type=freebsd-elf - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - shlibpath_var=LD_LIBRARY_PATH - hardcode_into_libs=yes - if test "$with_gnu_ld" = yes; then - sys_lib_search_path_spec='/usr/local/lib /usr/gnu/lib /usr/ccs/lib /usr/lib /lib' - shlibpath_overrides_runpath=no - else - sys_lib_search_path_spec='/usr/ccs/lib /usr/lib' - shlibpath_overrides_runpath=yes - case $host_os in - sco3.2v5*) - sys_lib_search_path_spec="$sys_lib_search_path_spec /lib" - ;; - esac - fi - sys_lib_dlsearch_path_spec='/usr/lib' - ;; - -uts4*) - version_type=linux - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - shlibpath_var=LD_LIBRARY_PATH - ;; - -*) - dynamic_linker=no - ;; -esac -AC_MSG_RESULT([$dynamic_linker]) -test "$dynamic_linker" = no && can_build_shared=no - -variables_saved_for_relink="PATH $shlibpath_var $runpath_var" -if test "$GCC" = yes; then - variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH" -fi -])# AC_LIBTOOL_SYS_DYNAMIC_LINKER - - -# _LT_AC_TAGCONFIG -# ---------------- -AC_DEFUN([_LT_AC_TAGCONFIG], -[AC_REQUIRE([LT_AC_PROG_SED])dnl -AC_ARG_WITH([tags], - [AC_HELP_STRING([--with-tags@<:@=TAGS@:>@], - [include additional configurations @<:@automatic@:>@])], - [tagnames="$withval"]) - -if test -f "$ltmain" && test -n "$tagnames"; then - if test ! -f "${ofile}"; then - AC_MSG_WARN([output file `$ofile' does not exist]) - fi - - if test -z "$LTCC"; then - eval "`$SHELL ${ofile} --config | grep '^LTCC='`" - if test -z "$LTCC"; then - AC_MSG_WARN([output file `$ofile' does not look like a libtool script]) - else - AC_MSG_WARN([using `LTCC=$LTCC', extracted from `$ofile']) - fi - fi - if test -z "$LTCFLAGS"; then - eval "`$SHELL ${ofile} --config | grep '^LTCFLAGS='`" - fi - - # Extract list of available tagged configurations in $ofile. - # Note that this assumes the entire list is on one line. - available_tags=`grep "^available_tags=" "${ofile}" | $SED -e 's/available_tags=\(.*$\)/\1/' -e 's/\"//g'` - - lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," - for tagname in $tagnames; do - IFS="$lt_save_ifs" - # Check whether tagname contains only valid characters - case `$echo "X$tagname" | $Xsed -e 's:[[-_ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz1234567890,/]]::g'` in - "") ;; - *) AC_MSG_ERROR([invalid tag name: $tagname]) - ;; - esac - - if grep "^# ### BEGIN LIBTOOL TAG CONFIG: $tagname$" < "${ofile}" > /dev/null - then - AC_MSG_ERROR([tag name \"$tagname\" already exists]) - fi - - # Update the list of available tags. - if test -n "$tagname"; then - echo appending configuration tag \"$tagname\" to $ofile - - case $tagname in - CXX) - if test -n "$CXX" && ( test "X$CXX" != "Xno" && - ( (test "X$CXX" = "Xg++" && `g++ -v >/dev/null 2>&1` ) || - (test "X$CXX" != "Xg++"))) ; then - AC_LIBTOOL_LANG_CXX_CONFIG - else - tagname="" - fi - ;; - - F77) - if test -n "$F77" && test "X$F77" != "Xno"; then - AC_LIBTOOL_LANG_F77_CONFIG - else - tagname="" - fi - ;; - - GCJ) - if test -n "$GCJ" && test "X$GCJ" != "Xno"; then - AC_LIBTOOL_LANG_GCJ_CONFIG - else - tagname="" - fi - ;; - - RC) - AC_LIBTOOL_LANG_RC_CONFIG - ;; - - *) - AC_MSG_ERROR([Unsupported tag name: $tagname]) - ;; - esac - - # Append the new tag name to the list of available tags. - if test -n "$tagname" ; then - available_tags="$available_tags $tagname" - fi - fi - done - IFS="$lt_save_ifs" - - # Now substitute the updated list of available tags. - if eval "sed -e 's/^available_tags=.*\$/available_tags=\"$available_tags\"/' \"$ofile\" > \"${ofile}T\""; then - mv "${ofile}T" "$ofile" - chmod +x "$ofile" - else - rm -f "${ofile}T" - AC_MSG_ERROR([unable to update list of available tagged configurations.]) - fi -fi -])# _LT_AC_TAGCONFIG - - -# AC_LIBTOOL_DLOPEN -# ----------------- -# enable checks for dlopen support -AC_DEFUN([AC_LIBTOOL_DLOPEN], - [AC_BEFORE([$0],[AC_LIBTOOL_SETUP]) -])# AC_LIBTOOL_DLOPEN - - -# AC_LIBTOOL_WIN32_DLL -# -------------------- -# declare package support for building win32 DLLs -AC_DEFUN([AC_LIBTOOL_WIN32_DLL], -[AC_BEFORE([$0], [AC_LIBTOOL_SETUP]) -])# AC_LIBTOOL_WIN32_DLL - - -# AC_ENABLE_SHARED([DEFAULT]) -# --------------------------- -# implement the --enable-shared flag -# DEFAULT is either `yes' or `no'. If omitted, it defaults to `yes'. -AC_DEFUN([AC_ENABLE_SHARED], -[define([AC_ENABLE_SHARED_DEFAULT], ifelse($1, no, no, yes))dnl -AC_ARG_ENABLE([shared], - [AC_HELP_STRING([--enable-shared@<:@=PKGS@:>@], - [build shared libraries @<:@default=]AC_ENABLE_SHARED_DEFAULT[@:>@])], - [p=${PACKAGE-default} - case $enableval in - yes) enable_shared=yes ;; - no) enable_shared=no ;; - *) - enable_shared=no - # Look at the argument we got. We use all the common list separators. - lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," - for pkg in $enableval; do - IFS="$lt_save_ifs" - if test "X$pkg" = "X$p"; then - enable_shared=yes - fi - done - IFS="$lt_save_ifs" - ;; - esac], - [enable_shared=]AC_ENABLE_SHARED_DEFAULT) -])# AC_ENABLE_SHARED - - -# AC_DISABLE_SHARED -# ----------------- -# set the default shared flag to --disable-shared -AC_DEFUN([AC_DISABLE_SHARED], -[AC_BEFORE([$0],[AC_LIBTOOL_SETUP])dnl -AC_ENABLE_SHARED(no) -])# AC_DISABLE_SHARED - - -# AC_ENABLE_STATIC([DEFAULT]) -# --------------------------- -# implement the --enable-static flag -# DEFAULT is either `yes' or `no'. If omitted, it defaults to `yes'. -AC_DEFUN([AC_ENABLE_STATIC], -[define([AC_ENABLE_STATIC_DEFAULT], ifelse($1, no, no, yes))dnl -AC_ARG_ENABLE([static], - [AC_HELP_STRING([--enable-static@<:@=PKGS@:>@], - [build static libraries @<:@default=]AC_ENABLE_STATIC_DEFAULT[@:>@])], - [p=${PACKAGE-default} - case $enableval in - yes) enable_static=yes ;; - no) enable_static=no ;; - *) - enable_static=no - # Look at the argument we got. We use all the common list separators. - lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," - for pkg in $enableval; do - IFS="$lt_save_ifs" - if test "X$pkg" = "X$p"; then - enable_static=yes - fi - done - IFS="$lt_save_ifs" - ;; - esac], - [enable_static=]AC_ENABLE_STATIC_DEFAULT) -])# AC_ENABLE_STATIC - - -# AC_DISABLE_STATIC -# ----------------- -# set the default static flag to --disable-static -AC_DEFUN([AC_DISABLE_STATIC], -[AC_BEFORE([$0],[AC_LIBTOOL_SETUP])dnl -AC_ENABLE_STATIC(no) -])# AC_DISABLE_STATIC - - -# AC_ENABLE_FAST_INSTALL([DEFAULT]) -# --------------------------------- -# implement the --enable-fast-install flag -# DEFAULT is either `yes' or `no'. If omitted, it defaults to `yes'. -AC_DEFUN([AC_ENABLE_FAST_INSTALL], -[define([AC_ENABLE_FAST_INSTALL_DEFAULT], ifelse($1, no, no, yes))dnl -AC_ARG_ENABLE([fast-install], - [AC_HELP_STRING([--enable-fast-install@<:@=PKGS@:>@], - [optimize for fast installation @<:@default=]AC_ENABLE_FAST_INSTALL_DEFAULT[@:>@])], - [p=${PACKAGE-default} - case $enableval in - yes) enable_fast_install=yes ;; - no) enable_fast_install=no ;; - *) - enable_fast_install=no - # Look at the argument we got. We use all the common list separators. - lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," - for pkg in $enableval; do - IFS="$lt_save_ifs" - if test "X$pkg" = "X$p"; then - enable_fast_install=yes - fi - done - IFS="$lt_save_ifs" - ;; - esac], - [enable_fast_install=]AC_ENABLE_FAST_INSTALL_DEFAULT) -])# AC_ENABLE_FAST_INSTALL - - -# AC_DISABLE_FAST_INSTALL -# ----------------------- -# set the default to --disable-fast-install -AC_DEFUN([AC_DISABLE_FAST_INSTALL], -[AC_BEFORE([$0],[AC_LIBTOOL_SETUP])dnl -AC_ENABLE_FAST_INSTALL(no) -])# AC_DISABLE_FAST_INSTALL - - -# AC_LIBTOOL_PICMODE([MODE]) -# -------------------------- -# implement the --with-pic flag -# MODE is either `yes' or `no'. If omitted, it defaults to `both'. -AC_DEFUN([AC_LIBTOOL_PICMODE], -[AC_BEFORE([$0],[AC_LIBTOOL_SETUP])dnl -pic_mode=ifelse($#,1,$1,default) -])# AC_LIBTOOL_PICMODE - - -# AC_PROG_EGREP -# ------------- -# This is predefined starting with Autoconf 2.54, so this conditional -# definition can be removed once we require Autoconf 2.54 or later. -m4_ifndef([AC_PROG_EGREP], [AC_DEFUN([AC_PROG_EGREP], -[AC_CACHE_CHECK([for egrep], [ac_cv_prog_egrep], - [if echo a | (grep -E '(a|b)') >/dev/null 2>&1 - then ac_cv_prog_egrep='grep -E' - else ac_cv_prog_egrep='egrep' - fi]) - EGREP=$ac_cv_prog_egrep - AC_SUBST([EGREP]) -])]) - - -# AC_PATH_TOOL_PREFIX -# ------------------- -# find a file program which can recognize shared library -AC_DEFUN([AC_PATH_TOOL_PREFIX], -[AC_REQUIRE([AC_PROG_EGREP])dnl -AC_MSG_CHECKING([for $1]) -AC_CACHE_VAL(lt_cv_path_MAGIC_CMD, -[case $MAGIC_CMD in -[[\\/*] | ?:[\\/]*]) - lt_cv_path_MAGIC_CMD="$MAGIC_CMD" # Let the user override the test with a path. - ;; -*) - lt_save_MAGIC_CMD="$MAGIC_CMD" - lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR -dnl $ac_dummy forces splitting on constant user-supplied paths. -dnl POSIX.2 word splitting is done only on the output of word expansions, -dnl not every word. This closes a longstanding sh security hole. - ac_dummy="ifelse([$2], , $PATH, [$2])" - for ac_dir in $ac_dummy; do - IFS="$lt_save_ifs" - test -z "$ac_dir" && ac_dir=. - if test -f $ac_dir/$1; then - lt_cv_path_MAGIC_CMD="$ac_dir/$1" - if test -n "$file_magic_test_file"; then - case $deplibs_check_method in - "file_magic "*) - file_magic_regex=`expr "$deplibs_check_method" : "file_magic \(.*\)"` - MAGIC_CMD="$lt_cv_path_MAGIC_CMD" - if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null | - $EGREP "$file_magic_regex" > /dev/null; then - : - else - cat <&2 - -*** Warning: the command libtool uses to detect shared libraries, -*** $file_magic_cmd, produces output that libtool cannot recognize. -*** The result is that libtool may fail to recognize shared libraries -*** as such. This will affect the creation of libtool libraries that -*** depend on shared libraries, but programs linked with such libtool -*** libraries will work regardless of this problem. Nevertheless, you -*** may want to report the problem to your system manager and/or to -*** bug-libtool at gnu.org - -EOF - fi ;; - esac - fi - break - fi - done - IFS="$lt_save_ifs" - MAGIC_CMD="$lt_save_MAGIC_CMD" - ;; -esac]) -MAGIC_CMD="$lt_cv_path_MAGIC_CMD" -if test -n "$MAGIC_CMD"; then - AC_MSG_RESULT($MAGIC_CMD) -else - AC_MSG_RESULT(no) -fi -])# AC_PATH_TOOL_PREFIX - - -# AC_PATH_MAGIC -# ------------- -# find a file program which can recognize a shared library -AC_DEFUN([AC_PATH_MAGIC], -[AC_PATH_TOOL_PREFIX(${ac_tool_prefix}file, /usr/bin$PATH_SEPARATOR$PATH) -if test -z "$lt_cv_path_MAGIC_CMD"; then - if test -n "$ac_tool_prefix"; then - AC_PATH_TOOL_PREFIX(file, /usr/bin$PATH_SEPARATOR$PATH) - else - MAGIC_CMD=: - fi -fi -])# AC_PATH_MAGIC - - -# AC_PROG_LD -# ---------- -# find the pathname to the GNU or non-GNU linker -AC_DEFUN([AC_PROG_LD], -[AC_ARG_WITH([gnu-ld], - [AC_HELP_STRING([--with-gnu-ld], - [assume the C compiler uses GNU ld @<:@default=no@:>@])], - [test "$withval" = no || with_gnu_ld=yes], - [with_gnu_ld=no]) -AC_REQUIRE([LT_AC_PROG_SED])dnl -AC_REQUIRE([AC_PROG_CC])dnl -AC_REQUIRE([AC_CANONICAL_HOST])dnl -AC_REQUIRE([AC_CANONICAL_BUILD])dnl -ac_prog=ld -if test "$GCC" = yes; then - # Check if gcc -print-prog-name=ld gives a path. - AC_MSG_CHECKING([for ld used by $CC]) - case $host in - *-*-mingw*) - # gcc leaves a trailing carriage return which upsets mingw - ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;; - *) - ac_prog=`($CC -print-prog-name=ld) 2>&5` ;; - esac - case $ac_prog in - # Accept absolute paths. - [[\\/]]* | ?:[[\\/]]*) - re_direlt='/[[^/]][[^/]]*/\.\./' - # Canonicalize the pathname of ld - ac_prog=`echo $ac_prog| $SED 's%\\\\%/%g'` - while echo $ac_prog | grep "$re_direlt" > /dev/null 2>&1; do - ac_prog=`echo $ac_prog| $SED "s%$re_direlt%/%"` - done - test -z "$LD" && LD="$ac_prog" - ;; - "") - # If it fails, then pretend we aren't using GCC. - ac_prog=ld - ;; - *) - # If it is relative, then search for the first ld in PATH. - with_gnu_ld=unknown - ;; - esac -elif test "$with_gnu_ld" = yes; then - AC_MSG_CHECKING([for GNU ld]) -else - AC_MSG_CHECKING([for non-GNU ld]) -fi -AC_CACHE_VAL(lt_cv_path_LD, -[if test -z "$LD"; then - lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR - for ac_dir in $PATH; do - IFS="$lt_save_ifs" - test -z "$ac_dir" && ac_dir=. - if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then - lt_cv_path_LD="$ac_dir/$ac_prog" - # Check to see if the program is GNU ld. I'd rather use --version, - # but apparently some variants of GNU ld only accept -v. - # Break only if it was the GNU/non-GNU ld that we prefer. - case `"$lt_cv_path_LD" -v 2>&1 &1 /dev/null 2>&1; then - lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL' - lt_cv_file_magic_cmd='func_win32_libid' - else - lt_cv_deplibs_check_method='file_magic file format pei*-i386(.*architecture: i386)?' - lt_cv_file_magic_cmd='$OBJDUMP -f' - fi - ;; - -darwin* | rhapsody*) - lt_cv_deplibs_check_method=pass_all - ;; - -freebsd* | dragonfly*) - if echo __ELF__ | $CC -E - | grep __ELF__ > /dev/null; then - case $host_cpu in - i*86 ) - # Not sure whether the presence of OpenBSD here was a mistake. - # Let's accept both of them until this is cleared up. - lt_cv_deplibs_check_method='file_magic (FreeBSD|OpenBSD|DragonFly)/i[[3-9]]86 (compact )?demand paged shared library' - lt_cv_file_magic_cmd=/usr/bin/file - lt_cv_file_magic_test_file=`echo /usr/lib/libc.so.*` - ;; - esac - else - lt_cv_deplibs_check_method=pass_all - fi - ;; - -gnu*) - lt_cv_deplibs_check_method=pass_all - ;; - -hpux10.20* | hpux11*) - lt_cv_file_magic_cmd=/usr/bin/file - case $host_cpu in - ia64*) - lt_cv_deplibs_check_method='file_magic (s[[0-9]][[0-9]][[0-9]]|ELF-[[0-9]][[0-9]]) shared object file - IA64' - lt_cv_file_magic_test_file=/usr/lib/hpux32/libc.so - ;; - hppa*64*) - [lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF-[0-9][0-9]) shared object file - PA-RISC [0-9].[0-9]'] - lt_cv_file_magic_test_file=/usr/lib/pa20_64/libc.sl - ;; - *) - lt_cv_deplibs_check_method='file_magic (s[[0-9]][[0-9]][[0-9]]|PA-RISC[[0-9]].[[0-9]]) shared library' - lt_cv_file_magic_test_file=/usr/lib/libc.sl - ;; - esac - ;; - -interix[[3-9]]*) - # PIC code is broken on Interix 3.x, that's why |\.a not |_pic\.a here - lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so|\.a)$' - ;; - -irix5* | irix6* | nonstopux*) - case $LD in - *-32|*"-32 ") libmagic=32-bit;; - *-n32|*"-n32 ") libmagic=N32;; - *-64|*"-64 ") libmagic=64-bit;; - *) libmagic=never-match;; - esac - lt_cv_deplibs_check_method=pass_all - ;; - -# This must be Linux ELF. -linux* | k*bsd*-gnu) - lt_cv_deplibs_check_method=pass_all - ;; - -netbsd*) - if echo __ELF__ | $CC -E - | grep __ELF__ > /dev/null; then - lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so\.[[0-9]]+\.[[0-9]]+|_pic\.a)$' - else - lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so|_pic\.a)$' - fi - ;; - -newos6*) - lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[ML]]SB (executable|dynamic lib)' - lt_cv_file_magic_cmd=/usr/bin/file - lt_cv_file_magic_test_file=/usr/lib/libnls.so - ;; - -nto-qnx*) - lt_cv_deplibs_check_method=unknown - ;; - -openbsd*) - if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then - lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so\.[[0-9]]+\.[[0-9]]+|\.so|_pic\.a)$' - else - lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so\.[[0-9]]+\.[[0-9]]+|_pic\.a)$' - fi - ;; - -osf3* | osf4* | osf5*) - lt_cv_deplibs_check_method=pass_all - ;; - -rdos*) - lt_cv_deplibs_check_method=pass_all - ;; - -solaris*) - lt_cv_deplibs_check_method=pass_all - ;; - -sysv4 | sysv4.3*) - case $host_vendor in - motorola) - lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[ML]]SB (shared object|dynamic lib) M[[0-9]][[0-9]]* Version [[0-9]]' - lt_cv_file_magic_test_file=`echo /usr/lib/libc.so*` - ;; - ncr) - lt_cv_deplibs_check_method=pass_all - ;; - sequent) - lt_cv_file_magic_cmd='/bin/file' - lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[LM]]SB (shared object|dynamic lib )' - ;; - sni) - lt_cv_file_magic_cmd='/bin/file' - lt_cv_deplibs_check_method="file_magic ELF [[0-9]][[0-9]]*-bit [[LM]]SB dynamic lib" - lt_cv_file_magic_test_file=/lib/libc.so - ;; - siemens) - lt_cv_deplibs_check_method=pass_all - ;; - pc) - lt_cv_deplibs_check_method=pass_all - ;; - esac - ;; - -sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) - lt_cv_deplibs_check_method=pass_all - ;; -esac -]) -file_magic_cmd=$lt_cv_file_magic_cmd -deplibs_check_method=$lt_cv_deplibs_check_method -test -z "$deplibs_check_method" && deplibs_check_method=unknown -])# AC_DEPLIBS_CHECK_METHOD - - -# AC_PROG_NM -# ---------- -# find the pathname to a BSD-compatible name lister -AC_DEFUN([AC_PROG_NM], -[AC_CACHE_CHECK([for BSD-compatible nm], lt_cv_path_NM, -[if test -n "$NM"; then - # Let the user override the test. - lt_cv_path_NM="$NM" -else - lt_nm_to_check="${ac_tool_prefix}nm" - if test -n "$ac_tool_prefix" && test "$build" = "$host"; then - lt_nm_to_check="$lt_nm_to_check nm" - fi - for lt_tmp_nm in $lt_nm_to_check; do - lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR - for ac_dir in $PATH /usr/ccs/bin/elf /usr/ccs/bin /usr/ucb /bin; do - IFS="$lt_save_ifs" - test -z "$ac_dir" && ac_dir=. - tmp_nm="$ac_dir/$lt_tmp_nm" - if test -f "$tmp_nm" || test -f "$tmp_nm$ac_exeext" ; then - # Check to see if the nm accepts a BSD-compat flag. - # Adding the `sed 1q' prevents false positives on HP-UX, which says: - # nm: unknown option "B" ignored - # Tru64's nm complains that /dev/null is an invalid object file - case `"$tmp_nm" -B /dev/null 2>&1 | sed '1q'` in - */dev/null* | *'Invalid file or object type'*) - lt_cv_path_NM="$tmp_nm -B" - break - ;; - *) - case `"$tmp_nm" -p /dev/null 2>&1 | sed '1q'` in - */dev/null*) - lt_cv_path_NM="$tmp_nm -p" - break - ;; - *) - lt_cv_path_NM=${lt_cv_path_NM="$tmp_nm"} # keep the first match, but - continue # so that we can try to find one that supports BSD flags - ;; - esac - ;; - esac - fi - done - IFS="$lt_save_ifs" - done - test -z "$lt_cv_path_NM" && lt_cv_path_NM=nm -fi]) -NM="$lt_cv_path_NM" -])# AC_PROG_NM - - -# AC_CHECK_LIBM -# ------------- -# check for math library -AC_DEFUN([AC_CHECK_LIBM], -[AC_REQUIRE([AC_CANONICAL_HOST])dnl -LIBM= -case $host in -*-*-beos* | *-*-cygwin* | *-*-pw32* | *-*-darwin*) - # These system don't have libm, or don't need it - ;; -*-ncr-sysv4.3*) - AC_CHECK_LIB(mw, _mwvalidcheckl, LIBM="-lmw") - AC_CHECK_LIB(m, cos, LIBM="$LIBM -lm") - ;; -*) - AC_CHECK_LIB(m, cos, LIBM="-lm") - ;; -esac -])# AC_CHECK_LIBM - - -# AC_LIBLTDL_CONVENIENCE([DIRECTORY]) -# ----------------------------------- -# sets LIBLTDL to the link flags for the libltdl convenience library and -# LTDLINCL to the include flags for the libltdl header and adds -# --enable-ltdl-convenience to the configure arguments. Note that -# AC_CONFIG_SUBDIRS is not called here. If DIRECTORY is not provided, -# it is assumed to be `libltdl'. LIBLTDL will be prefixed with -# '${top_builddir}/' and LTDLINCL will be prefixed with '${top_srcdir}/' -# (note the single quotes!). If your package is not flat and you're not -# using automake, define top_builddir and top_srcdir appropriately in -# the Makefiles. -AC_DEFUN([AC_LIBLTDL_CONVENIENCE], -[AC_BEFORE([$0],[AC_LIBTOOL_SETUP])dnl - case $enable_ltdl_convenience in - no) AC_MSG_ERROR([this package needs a convenience libltdl]) ;; - "") enable_ltdl_convenience=yes - ac_configure_args="$ac_configure_args --enable-ltdl-convenience" ;; - esac - LIBLTDL='${top_builddir}/'ifelse($#,1,[$1],['libltdl'])/libltdlc.la - LTDLINCL='-I${top_srcdir}/'ifelse($#,1,[$1],['libltdl']) - # For backwards non-gettext consistent compatibility... - INCLTDL="$LTDLINCL" -])# AC_LIBLTDL_CONVENIENCE - - -# AC_LIBLTDL_INSTALLABLE([DIRECTORY]) -# ----------------------------------- -# sets LIBLTDL to the link flags for the libltdl installable library and -# LTDLINCL to the include flags for the libltdl header and adds -# --enable-ltdl-install to the configure arguments. Note that -# AC_CONFIG_SUBDIRS is not called here. If DIRECTORY is not provided, -# and an installed libltdl is not found, it is assumed to be `libltdl'. -# LIBLTDL will be prefixed with '${top_builddir}/'# and LTDLINCL with -# '${top_srcdir}/' (note the single quotes!). If your package is not -# flat and you're not using automake, define top_builddir and top_srcdir -# appropriately in the Makefiles. -# In the future, this macro may have to be called after AC_PROG_LIBTOOL. -AC_DEFUN([AC_LIBLTDL_INSTALLABLE], -[AC_BEFORE([$0],[AC_LIBTOOL_SETUP])dnl - AC_CHECK_LIB(ltdl, lt_dlinit, - [test x"$enable_ltdl_install" != xyes && enable_ltdl_install=no], - [if test x"$enable_ltdl_install" = xno; then - AC_MSG_WARN([libltdl not installed, but installation disabled]) - else - enable_ltdl_install=yes - fi - ]) - if test x"$enable_ltdl_install" = x"yes"; then - ac_configure_args="$ac_configure_args --enable-ltdl-install" - LIBLTDL='${top_builddir}/'ifelse($#,1,[$1],['libltdl'])/libltdl.la - LTDLINCL='-I${top_srcdir}/'ifelse($#,1,[$1],['libltdl']) - else - ac_configure_args="$ac_configure_args --enable-ltdl-install=no" - LIBLTDL="-lltdl" - LTDLINCL= - fi - # For backwards non-gettext consistent compatibility... - INCLTDL="$LTDLINCL" -])# AC_LIBLTDL_INSTALLABLE - - -# AC_LIBTOOL_CXX -# -------------- -# enable support for C++ libraries -AC_DEFUN([AC_LIBTOOL_CXX], -[AC_REQUIRE([_LT_AC_LANG_CXX]) -])# AC_LIBTOOL_CXX - - -# _LT_AC_LANG_CXX -# --------------- -AC_DEFUN([_LT_AC_LANG_CXX], -[AC_REQUIRE([AC_PROG_CXX]) -AC_REQUIRE([_LT_AC_PROG_CXXCPP]) -_LT_AC_SHELL_INIT([tagnames=${tagnames+${tagnames},}CXX]) -])# _LT_AC_LANG_CXX - -# _LT_AC_PROG_CXXCPP -# ------------------ -AC_DEFUN([_LT_AC_PROG_CXXCPP], -[ -AC_REQUIRE([AC_PROG_CXX]) -if test -n "$CXX" && ( test "X$CXX" != "Xno" && - ( (test "X$CXX" = "Xg++" && `g++ -v >/dev/null 2>&1` ) || - (test "X$CXX" != "Xg++"))) ; then - AC_PROG_CXXCPP -fi -])# _LT_AC_PROG_CXXCPP - -# AC_LIBTOOL_F77 -# -------------- -# enable support for Fortran 77 libraries -AC_DEFUN([AC_LIBTOOL_F77], -[AC_REQUIRE([_LT_AC_LANG_F77]) -])# AC_LIBTOOL_F77 - - -# _LT_AC_LANG_F77 -# --------------- -AC_DEFUN([_LT_AC_LANG_F77], -[AC_REQUIRE([AC_PROG_F77]) -_LT_AC_SHELL_INIT([tagnames=${tagnames+${tagnames},}F77]) -])# _LT_AC_LANG_F77 - - -# AC_LIBTOOL_GCJ -# -------------- -# enable support for GCJ libraries -AC_DEFUN([AC_LIBTOOL_GCJ], -[AC_REQUIRE([_LT_AC_LANG_GCJ]) -])# AC_LIBTOOL_GCJ - - -# _LT_AC_LANG_GCJ -# --------------- -AC_DEFUN([_LT_AC_LANG_GCJ], -[AC_PROVIDE_IFELSE([AC_PROG_GCJ],[], - [AC_PROVIDE_IFELSE([A][M_PROG_GCJ],[], - [AC_PROVIDE_IFELSE([LT_AC_PROG_GCJ],[], - [ifdef([AC_PROG_GCJ],[AC_REQUIRE([AC_PROG_GCJ])], - [ifdef([A][M_PROG_GCJ],[AC_REQUIRE([A][M_PROG_GCJ])], - [AC_REQUIRE([A][C_PROG_GCJ_OR_A][M_PROG_GCJ])])])])])]) -_LT_AC_SHELL_INIT([tagnames=${tagnames+${tagnames},}GCJ]) -])# _LT_AC_LANG_GCJ - - -# AC_LIBTOOL_RC -# ------------- -# enable support for Windows resource files -AC_DEFUN([AC_LIBTOOL_RC], -[AC_REQUIRE([LT_AC_PROG_RC]) -_LT_AC_SHELL_INIT([tagnames=${tagnames+${tagnames},}RC]) -])# AC_LIBTOOL_RC - - -# AC_LIBTOOL_LANG_C_CONFIG -# ------------------------ -# Ensure that the configuration vars for the C compiler are -# suitably defined. Those variables are subsequently used by -# AC_LIBTOOL_CONFIG to write the compiler configuration to `libtool'. -AC_DEFUN([AC_LIBTOOL_LANG_C_CONFIG], [_LT_AC_LANG_C_CONFIG]) -AC_DEFUN([_LT_AC_LANG_C_CONFIG], -[lt_save_CC="$CC" -AC_LANG_PUSH(C) - -# Source file extension for C test sources. -ac_ext=c - -# Object file extension for compiled C test sources. -objext=o -_LT_AC_TAGVAR(objext, $1)=$objext - -# Code to be used in simple compile tests -lt_simple_compile_test_code="int some_variable = 0;" - -# Code to be used in simple link tests -lt_simple_link_test_code='int main(){return(0);}' - -_LT_AC_SYS_COMPILER - -# save warnings/boilerplate of simple test code -_LT_COMPILER_BOILERPLATE -_LT_LINKER_BOILERPLATE - -AC_LIBTOOL_PROG_COMPILER_NO_RTTI($1) -AC_LIBTOOL_PROG_COMPILER_PIC($1) -AC_LIBTOOL_PROG_CC_C_O($1) -AC_LIBTOOL_SYS_HARD_LINK_LOCKS($1) -AC_LIBTOOL_PROG_LD_SHLIBS($1) -AC_LIBTOOL_SYS_DYNAMIC_LINKER($1) -AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH($1) -AC_LIBTOOL_SYS_LIB_STRIP -AC_LIBTOOL_DLOPEN_SELF - -# Report which library types will actually be built -AC_MSG_CHECKING([if libtool supports shared libraries]) -AC_MSG_RESULT([$can_build_shared]) - -AC_MSG_CHECKING([whether to build shared libraries]) -test "$can_build_shared" = "no" && enable_shared=no - -# On AIX, shared libraries and static libraries use the same namespace, and -# are all built from PIC. -case $host_os in -aix3*) - test "$enable_shared" = yes && enable_static=no - if test -n "$RANLIB"; then - archive_cmds="$archive_cmds~\$RANLIB \$lib" - postinstall_cmds='$RANLIB $lib' - fi - ;; - -aix4* | aix5*) - if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then - test "$enable_shared" = yes && enable_static=no - fi - ;; -esac -AC_MSG_RESULT([$enable_shared]) - -AC_MSG_CHECKING([whether to build static libraries]) -# Make sure either enable_shared or enable_static is yes. -test "$enable_shared" = yes || enable_static=yes -AC_MSG_RESULT([$enable_static]) - -AC_LIBTOOL_CONFIG($1) - -AC_LANG_POP -CC="$lt_save_CC" -])# AC_LIBTOOL_LANG_C_CONFIG - - -# AC_LIBTOOL_LANG_CXX_CONFIG -# -------------------------- -# Ensure that the configuration vars for the C compiler are -# suitably defined. Those variables are subsequently used by -# AC_LIBTOOL_CONFIG to write the compiler configuration to `libtool'. -AC_DEFUN([AC_LIBTOOL_LANG_CXX_CONFIG], [_LT_AC_LANG_CXX_CONFIG(CXX)]) -AC_DEFUN([_LT_AC_LANG_CXX_CONFIG], -[AC_LANG_PUSH(C++) -AC_REQUIRE([AC_PROG_CXX]) -AC_REQUIRE([_LT_AC_PROG_CXXCPP]) - -_LT_AC_TAGVAR(archive_cmds_need_lc, $1)=no -_LT_AC_TAGVAR(allow_undefined_flag, $1)= -_LT_AC_TAGVAR(always_export_symbols, $1)=no -_LT_AC_TAGVAR(archive_expsym_cmds, $1)= -_LT_AC_TAGVAR(export_dynamic_flag_spec, $1)= -_LT_AC_TAGVAR(hardcode_direct, $1)=no -_LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)= -_LT_AC_TAGVAR(hardcode_libdir_flag_spec_ld, $1)= -_LT_AC_TAGVAR(hardcode_libdir_separator, $1)= -_LT_AC_TAGVAR(hardcode_minus_L, $1)=no -_LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=unsupported -_LT_AC_TAGVAR(hardcode_automatic, $1)=no -_LT_AC_TAGVAR(module_cmds, $1)= -_LT_AC_TAGVAR(module_expsym_cmds, $1)= -_LT_AC_TAGVAR(link_all_deplibs, $1)=unknown -_LT_AC_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds -_LT_AC_TAGVAR(no_undefined_flag, $1)= -_LT_AC_TAGVAR(whole_archive_flag_spec, $1)= -_LT_AC_TAGVAR(enable_shared_with_static_runtimes, $1)=no - -# Dependencies to place before and after the object being linked: -_LT_AC_TAGVAR(predep_objects, $1)= -_LT_AC_TAGVAR(postdep_objects, $1)= -_LT_AC_TAGVAR(predeps, $1)= -_LT_AC_TAGVAR(postdeps, $1)= -_LT_AC_TAGVAR(compiler_lib_search_path, $1)= - -# Source file extension for C++ test sources. -ac_ext=cpp - -# Object file extension for compiled C++ test sources. -objext=o -_LT_AC_TAGVAR(objext, $1)=$objext - -# Code to be used in simple compile tests -lt_simple_compile_test_code="int some_variable = 0;" - -# Code to be used in simple link tests -lt_simple_link_test_code='int main(int, char *[[]]) { return(0); }' - -# ltmain only uses $CC for tagged configurations so make sure $CC is set. -_LT_AC_SYS_COMPILER - -# save warnings/boilerplate of simple test code -_LT_COMPILER_BOILERPLATE -_LT_LINKER_BOILERPLATE - -# Allow CC to be a program name with arguments. -lt_save_CC=$CC -lt_save_LD=$LD -lt_save_GCC=$GCC -GCC=$GXX -lt_save_with_gnu_ld=$with_gnu_ld -lt_save_path_LD=$lt_cv_path_LD -if test -n "${lt_cv_prog_gnu_ldcxx+set}"; then - lt_cv_prog_gnu_ld=$lt_cv_prog_gnu_ldcxx -else - $as_unset lt_cv_prog_gnu_ld -fi -if test -n "${lt_cv_path_LDCXX+set}"; then - lt_cv_path_LD=$lt_cv_path_LDCXX -else - $as_unset lt_cv_path_LD -fi -test -z "${LDCXX+set}" || LD=$LDCXX -CC=${CXX-"c++"} -compiler=$CC -_LT_AC_TAGVAR(compiler, $1)=$CC -_LT_CC_BASENAME([$compiler]) - -# We don't want -fno-exception wen compiling C++ code, so set the -# no_builtin_flag separately -if test "$GXX" = yes; then - _LT_AC_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=' -fno-builtin' -else - _LT_AC_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)= -fi - -if test "$GXX" = yes; then - # Set up default GNU C++ configuration - - AC_PROG_LD - - # Check if GNU C++ uses GNU ld as the underlying linker, since the - # archiving commands below assume that GNU ld is being used. - if test "$with_gnu_ld" = yes; then - _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib' - _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' - - _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}--rpath ${wl}$libdir' - _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic' - - # If archive_cmds runs LD, not CC, wlarc should be empty - # XXX I think wlarc can be eliminated in ltcf-cxx, but I need to - # investigate it a little bit more. (MM) - wlarc='${wl}' - - # ancient GNU ld didn't support --whole-archive et. al. - if eval "`$CC -print-prog-name=ld` --help 2>&1" | \ - grep 'no-whole-archive' > /dev/null; then - _LT_AC_TAGVAR(whole_archive_flag_spec, $1)="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' - else - _LT_AC_TAGVAR(whole_archive_flag_spec, $1)= - fi - else - with_gnu_ld=no - wlarc= - - # A generic and very simple default shared library creation - # command for GNU C++ for the case where it uses the native - # linker, instead of GNU ld. If possible, this setting should - # overridden to take advantage of the native linker features on - # the platform it is being used on. - _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib' - fi - - # Commands to make compiler produce verbose output that lists - # what "hidden" libraries, object files and flags are used when - # linking a shared library. - output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep "\-L"' - -else - GXX=no - with_gnu_ld=no - wlarc= -fi - -# PORTME: fill in a description of your system's C++ link characteristics -AC_MSG_CHECKING([whether the $compiler linker ($LD) supports shared libraries]) -_LT_AC_TAGVAR(ld_shlibs, $1)=yes -case $host_os in - aix3*) - # FIXME: insert proper C++ library support - _LT_AC_TAGVAR(ld_shlibs, $1)=no - ;; - aix4* | aix5*) - if test "$host_cpu" = ia64; then - # On IA64, the linker does run time linking by default, so we don't - # have to do anything special. - aix_use_runtimelinking=no - exp_sym_flag='-Bexport' - no_entry_flag="" - else - aix_use_runtimelinking=no - - # Test if we are trying to use run time linking or normal - # AIX style linking. If -brtl is somewhere in LDFLAGS, we - # need to do runtime linking. - case $host_os in aix4.[[23]]|aix4.[[23]].*|aix5*) - for ld_flag in $LDFLAGS; do - case $ld_flag in - *-brtl*) - aix_use_runtimelinking=yes - break - ;; - esac - done - ;; - esac - - exp_sym_flag='-bexport' - no_entry_flag='-bnoentry' - fi - - # When large executables or shared objects are built, AIX ld can - # have problems creating the table of contents. If linking a library - # or program results in "error TOC overflow" add -mminimal-toc to - # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not - # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS. - - _LT_AC_TAGVAR(archive_cmds, $1)='' - _LT_AC_TAGVAR(hardcode_direct, $1)=yes - _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=':' - _LT_AC_TAGVAR(link_all_deplibs, $1)=yes - - if test "$GXX" = yes; then - case $host_os in aix4.[[012]]|aix4.[[012]].*) - # We only want to do this on AIX 4.2 and lower, the check - # below for broken collect2 doesn't work under 4.3+ - collect2name=`${CC} -print-prog-name=collect2` - if test -f "$collect2name" && \ - strings "$collect2name" | grep resolve_lib_name >/dev/null - then - # We have reworked collect2 - : - else - # We have old collect2 - _LT_AC_TAGVAR(hardcode_direct, $1)=unsupported - # It fails to find uninstalled libraries when the uninstalled - # path is not listed in the libpath. Setting hardcode_minus_L - # to unsupported forces relinking - _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes - _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' - _LT_AC_TAGVAR(hardcode_libdir_separator, $1)= - fi - ;; - esac - shared_flag='-shared' - if test "$aix_use_runtimelinking" = yes; then - shared_flag="$shared_flag "'${wl}-G' - fi - else - # not using gcc - if test "$host_cpu" = ia64; then - # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release - # chokes on -Wl,-G. The following line is correct: - shared_flag='-G' - else - if test "$aix_use_runtimelinking" = yes; then - shared_flag='${wl}-G' - else - shared_flag='${wl}-bM:SRE' - fi - fi - fi - - # It seems that -bexpall does not export symbols beginning with - # underscore (_), so it is better to generate a list of symbols to export. - _LT_AC_TAGVAR(always_export_symbols, $1)=yes - if test "$aix_use_runtimelinking" = yes; then - # Warning - without using the other runtime loading flags (-brtl), - # -berok will link without error, but may produce a broken library. - _LT_AC_TAGVAR(allow_undefined_flag, $1)='-berok' - # Determine the default libpath from the value encoded in an empty executable. - _LT_AC_SYS_LIBPATH_AIX - _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath" - - _LT_AC_TAGVAR(archive_expsym_cmds, $1)="\$CC"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then echo "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag" - else - if test "$host_cpu" = ia64; then - _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R $libdir:/usr/lib:/lib' - _LT_AC_TAGVAR(allow_undefined_flag, $1)="-z nodefs" - _LT_AC_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$exp_sym_flag:\$export_symbols" - else - # Determine the default libpath from the value encoded in an empty executable. - _LT_AC_SYS_LIBPATH_AIX - _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath" - # Warning - without using the other run time loading flags, - # -berok will link without error, but may produce a broken library. - _LT_AC_TAGVAR(no_undefined_flag, $1)=' ${wl}-bernotok' - _LT_AC_TAGVAR(allow_undefined_flag, $1)=' ${wl}-berok' - # Exported symbols can be pulled into shared objects from archives - _LT_AC_TAGVAR(whole_archive_flag_spec, $1)='$convenience' - _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=yes - # This is similar to how AIX traditionally builds its shared libraries. - _LT_AC_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs ${wl}-bnoentry $compiler_flags ${wl}-bE:$export_symbols${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname' - fi - fi - ;; - - beos*) - if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then - _LT_AC_TAGVAR(allow_undefined_flag, $1)=unsupported - # Joseph Beckenbach says some releases of gcc - # support --undefined. This deserves some investigation. FIXME - _LT_AC_TAGVAR(archive_cmds, $1)='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' - else - _LT_AC_TAGVAR(ld_shlibs, $1)=no - fi - ;; - - chorus*) - case $cc_basename in - *) - # FIXME: insert proper C++ library support - _LT_AC_TAGVAR(ld_shlibs, $1)=no - ;; - esac - ;; - - cygwin* | mingw* | pw32*) - # _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1) is actually meaningless, - # as there is no search path for DLLs. - _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' - _LT_AC_TAGVAR(allow_undefined_flag, $1)=unsupported - _LT_AC_TAGVAR(always_export_symbols, $1)=no - _LT_AC_TAGVAR(enable_shared_with_static_runtimes, $1)=yes - - if $LD --help 2>&1 | grep 'auto-import' > /dev/null; then - _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' - # If the export-symbols file already is a .def file (1st line - # is EXPORTS), use it as is; otherwise, prepend... - _LT_AC_TAGVAR(archive_expsym_cmds, $1)='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then - cp $export_symbols $output_objdir/$soname.def; - else - echo EXPORTS > $output_objdir/$soname.def; - cat $export_symbols >> $output_objdir/$soname.def; - fi~ - $CC -shared -nostdlib $output_objdir/$soname.def $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' - else - _LT_AC_TAGVAR(ld_shlibs, $1)=no - fi - ;; - darwin* | rhapsody*) - case $host_os in - rhapsody* | darwin1.[[012]]) - _LT_AC_TAGVAR(allow_undefined_flag, $1)='${wl}-undefined ${wl}suppress' - ;; - *) # Darwin 1.3 on - if test -z ${MACOSX_DEPLOYMENT_TARGET} ; then - _LT_AC_TAGVAR(allow_undefined_flag, $1)='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' - else - case ${MACOSX_DEPLOYMENT_TARGET} in - 10.[[012]]) - _LT_AC_TAGVAR(allow_undefined_flag, $1)='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' - ;; - 10.*) - _LT_AC_TAGVAR(allow_undefined_flag, $1)='${wl}-undefined ${wl}dynamic_lookup' - ;; - esac - fi - ;; - esac - _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=no - _LT_AC_TAGVAR(hardcode_direct, $1)=no - _LT_AC_TAGVAR(hardcode_automatic, $1)=yes - _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=unsupported - _LT_AC_TAGVAR(whole_archive_flag_spec, $1)='' - _LT_AC_TAGVAR(link_all_deplibs, $1)=yes - - if test "$GXX" = yes ; then - lt_int_apple_cc_single_mod=no - output_verbose_link_cmd='echo' - if $CC -dumpspecs 2>&1 | $EGREP 'single_module' >/dev/null ; then - lt_int_apple_cc_single_mod=yes - fi - if test "X$lt_int_apple_cc_single_mod" = Xyes ; then - _LT_AC_TAGVAR(archive_cmds, $1)='$CC -dynamiclib -single_module $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags -install_name $rpath/$soname $verstring' - else - _LT_AC_TAGVAR(archive_cmds, $1)='$CC -r -keep_private_externs -nostdlib -o ${lib}-master.o $libobjs~$CC -dynamiclib $allow_undefined_flag -o $lib ${lib}-master.o $deplibs $compiler_flags -install_name $rpath/$soname $verstring' - fi - _LT_AC_TAGVAR(module_cmds, $1)='$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags' - # Don't fix this by using the ld -exported_symbols_list flag, it doesn't exist in older darwin lds - if test "X$lt_int_apple_cc_single_mod" = Xyes ; then - _LT_AC_TAGVAR(archive_expsym_cmds, $1)='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -dynamiclib -single_module $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags -install_name $rpath/$soname $verstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' - else - _LT_AC_TAGVAR(archive_expsym_cmds, $1)='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -r -keep_private_externs -nostdlib -o ${lib}-master.o $libobjs~$CC -dynamiclib $allow_undefined_flag -o $lib ${lib}-master.o $deplibs $compiler_flags -install_name $rpath/$soname $verstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' - fi - _LT_AC_TAGVAR(module_expsym_cmds, $1)='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' - else - case $cc_basename in - xlc*) - output_verbose_link_cmd='echo' - _LT_AC_TAGVAR(archive_cmds, $1)='$CC -qmkshrobj ${wl}-single_module $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-install_name ${wl}`echo $rpath/$soname` $xlcverstring' - _LT_AC_TAGVAR(module_cmds, $1)='$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags' - # Don't fix this by using the ld -exported_symbols_list flag, it doesn't exist in older darwin lds - _LT_AC_TAGVAR(archive_expsym_cmds, $1)='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -qmkshrobj ${wl}-single_module $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-install_name ${wl}$rpath/$soname $xlcverstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' - _LT_AC_TAGVAR(module_expsym_cmds, $1)='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' - ;; - *) - _LT_AC_TAGVAR(ld_shlibs, $1)=no - ;; - esac - fi - ;; - - dgux*) - case $cc_basename in - ec++*) - # FIXME: insert proper C++ library support - _LT_AC_TAGVAR(ld_shlibs, $1)=no - ;; - ghcx*) - # Green Hills C++ Compiler - # FIXME: insert proper C++ library support - _LT_AC_TAGVAR(ld_shlibs, $1)=no - ;; - *) - # FIXME: insert proper C++ library support - _LT_AC_TAGVAR(ld_shlibs, $1)=no - ;; - esac - ;; - freebsd[[12]]*) - # C++ shared libraries reported to be fairly broken before switch to ELF - _LT_AC_TAGVAR(ld_shlibs, $1)=no - ;; - freebsd-elf*) - _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=no - ;; - freebsd* | dragonfly*) - # FreeBSD 3 and later use GNU C++ and GNU ld with standard ELF - # conventions - _LT_AC_TAGVAR(ld_shlibs, $1)=yes - ;; - gnu*) - ;; - hpux9*) - _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir' - _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=: - _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' - _LT_AC_TAGVAR(hardcode_direct, $1)=yes - _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes # Not in the search PATH, - # but as the default - # location of the library. - - case $cc_basename in - CC*) - # FIXME: insert proper C++ library support - _LT_AC_TAGVAR(ld_shlibs, $1)=no - ;; - aCC*) - _LT_AC_TAGVAR(archive_cmds, $1)='$rm $output_objdir/$soname~$CC -b ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' - # Commands to make compiler produce verbose output that lists - # what "hidden" libraries, object files and flags are used when - # linking a shared library. - # - # There doesn't appear to be a way to prevent this compiler from - # explicitly linking system object files so we need to strip them - # from the output so that they don't get included in the library - # dependencies. - output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | grep "[[-]]L"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; echo $list' - ;; - *) - if test "$GXX" = yes; then - _LT_AC_TAGVAR(archive_cmds, $1)='$rm $output_objdir/$soname~$CC -shared -nostdlib -fPIC ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' - else - # FIXME: insert proper C++ library support - _LT_AC_TAGVAR(ld_shlibs, $1)=no - fi - ;; - esac - ;; - hpux10*|hpux11*) - if test $with_gnu_ld = no; then - _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir' - _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=: - - case $host_cpu in - hppa*64*|ia64*) ;; - *) - _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' - ;; - esac - fi - case $host_cpu in - hppa*64*|ia64*) - _LT_AC_TAGVAR(hardcode_direct, $1)=no - _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no - ;; - *) - _LT_AC_TAGVAR(hardcode_direct, $1)=yes - _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes # Not in the search PATH, - # but as the default - # location of the library. - ;; - esac - - case $cc_basename in - CC*) - # FIXME: insert proper C++ library support - _LT_AC_TAGVAR(ld_shlibs, $1)=no - ;; - aCC*) - case $host_cpu in - hppa*64*) - _LT_AC_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' - ;; - ia64*) - _LT_AC_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' - ;; - *) - _LT_AC_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' - ;; - esac - # Commands to make compiler produce verbose output that lists - # what "hidden" libraries, object files and flags are used when - # linking a shared library. - # - # There doesn't appear to be a way to prevent this compiler from - # explicitly linking system object files so we need to strip them - # from the output so that they don't get included in the library - # dependencies. - output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | grep "\-L"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; echo $list' - ;; - *) - if test "$GXX" = yes; then - if test $with_gnu_ld = no; then - case $host_cpu in - hppa*64*) - _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib -fPIC ${wl}+h ${wl}$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' - ;; - ia64*) - _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib -fPIC ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' - ;; - *) - _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' - ;; - esac - fi - else - # FIXME: insert proper C++ library support - _LT_AC_TAGVAR(ld_shlibs, $1)=no - fi - ;; - esac - ;; - interix[[3-9]]*) - _LT_AC_TAGVAR(hardcode_direct, $1)=no - _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no - _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' - _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' - # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc. - # Instead, shared libraries are loaded at an image base (0x10000000 by - # default) and relocated if they conflict, which is a slow very memory - # consuming and fragmenting process. To avoid this, we pick a random, - # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link - # time. Moving up from 0x10000000 also allows more sbrk(2) space. - _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' - _LT_AC_TAGVAR(archive_expsym_cmds, $1)='sed "s,^,_," $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--retain-symbols-file,$output_objdir/$soname.expsym ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' - ;; - irix5* | irix6*) - case $cc_basename in - CC*) - # SGI C++ - _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -all -multigot $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib' - - # Archives containing C++ object files must be created using - # "CC -ar", where "CC" is the IRIX C++ compiler. This is - # necessary to make sure instantiated templates are included - # in the archive. - _LT_AC_TAGVAR(old_archive_cmds, $1)='$CC -ar -WR,-u -o $oldlib $oldobjs' - ;; - *) - if test "$GXX" = yes; then - if test "$with_gnu_ld" = no; then - _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' - else - _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` -o $lib' - fi - fi - _LT_AC_TAGVAR(link_all_deplibs, $1)=yes - ;; - esac - _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' - _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=: - ;; - linux* | k*bsd*-gnu) - case $cc_basename in - KCC*) - # Kuck and Associates, Inc. (KAI) C++ Compiler - - # KCC will only create a shared library if the output file - # ends with ".so" (or ".sl" for HP-UX), so rename the library - # to its proper name (with version) after linking. - _LT_AC_TAGVAR(archive_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib' - _LT_AC_TAGVAR(archive_expsym_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib ${wl}-retain-symbols-file,$export_symbols; mv \$templib $lib' - # Commands to make compiler produce verbose output that lists - # what "hidden" libraries, object files and flags are used when - # linking a shared library. - # - # There doesn't appear to be a way to prevent this compiler from - # explicitly linking system object files so we need to strip them - # from the output so that they don't get included in the library - # dependencies. - output_verbose_link_cmd='templist=`$CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1 | grep "ld"`; rm -f libconftest$shared_ext; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; echo $list' - - _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}--rpath,$libdir' - _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic' - - # Archives containing C++ object files must be created using - # "CC -Bstatic", where "CC" is the KAI C++ compiler. - _LT_AC_TAGVAR(old_archive_cmds, $1)='$CC -Bstatic -o $oldlib $oldobjs' - ;; - icpc*) - # Intel C++ - with_gnu_ld=yes - # version 8.0 and above of icpc choke on multiply defined symbols - # if we add $predep_objects and $postdep_objects, however 7.1 and - # earlier do not add the objects themselves. - case `$CC -V 2>&1` in - *"Version 7."*) - _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib' - _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' - ;; - *) # Version 8.0 or newer - tmp_idyn= - case $host_cpu in - ia64*) tmp_idyn=' -i_dynamic';; - esac - _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared'"$tmp_idyn"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' - _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -shared'"$tmp_idyn"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' - ;; - esac - _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=no - _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' - _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic' - _LT_AC_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive$convenience ${wl}--no-whole-archive' - ;; - pgCC*) - # Portland Group C++ compiler - _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname -o $lib' - _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname ${wl}-retain-symbols-file ${wl}$export_symbols -o $lib' - - _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}--rpath ${wl}$libdir' - _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic' - _LT_AC_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $echo \"$new_convenience\"` ${wl}--no-whole-archive' - ;; - cxx*) - # Compaq C++ - _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib' - _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib ${wl}-retain-symbols-file $wl$export_symbols' - - runpath_var=LD_RUN_PATH - _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir' - _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=: - - # Commands to make compiler produce verbose output that lists - # what "hidden" libraries, object files and flags are used when - # linking a shared library. - # - # There doesn't appear to be a way to prevent this compiler from - # explicitly linking system object files so we need to strip them - # from the output so that they don't get included in the library - # dependencies. - output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep "ld"`; templist=`echo $templist | $SED "s/\(^.*ld.*\)\( .*ld .*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; echo $list' - ;; - *) - case `$CC -V 2>&1 | sed 5q` in - *Sun\ C*) - # Sun C++ 5.9 - _LT_AC_TAGVAR(no_undefined_flag, $1)=' -zdefs' - _LT_AC_TAGVAR(archive_cmds, $1)='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' - _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-retain-symbols-file ${wl}$export_symbols' - _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' - _LT_AC_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; $echo \"$new_convenience\"` ${wl}--no-whole-archive' - - # Not sure whether something based on - # $CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1 - # would be better. - output_verbose_link_cmd='echo' - - # Archives containing C++ object files must be created using - # "CC -xar", where "CC" is the Sun C++ compiler. This is - # necessary to make sure instantiated templates are included - # in the archive. - _LT_AC_TAGVAR(old_archive_cmds, $1)='$CC -xar -o $oldlib $oldobjs' - ;; - esac - ;; - esac - ;; - lynxos*) - # FIXME: insert proper C++ library support - _LT_AC_TAGVAR(ld_shlibs, $1)=no - ;; - m88k*) - # FIXME: insert proper C++ library support - _LT_AC_TAGVAR(ld_shlibs, $1)=no - ;; - mvs*) - case $cc_basename in - cxx*) - # FIXME: insert proper C++ library support - _LT_AC_TAGVAR(ld_shlibs, $1)=no - ;; - *) - # FIXME: insert proper C++ library support - _LT_AC_TAGVAR(ld_shlibs, $1)=no - ;; - esac - ;; - netbsd*) - if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then - _LT_AC_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $predep_objects $libobjs $deplibs $postdep_objects $linker_flags' - wlarc= - _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' - _LT_AC_TAGVAR(hardcode_direct, $1)=yes - _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no - fi - # Workaround some broken pre-1.5 toolchains - output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep conftest.$objext | $SED -e "s:-lgcc -lc -lgcc::"' - ;; - openbsd2*) - # C++ shared libraries are fairly broken - _LT_AC_TAGVAR(ld_shlibs, $1)=no - ;; - openbsd*) - if test -f /usr/libexec/ld.so; then - _LT_AC_TAGVAR(hardcode_direct, $1)=yes - _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no - _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib' - _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' - if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then - _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-retain-symbols-file,$export_symbols -o $lib' - _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' - _LT_AC_TAGVAR(whole_archive_flag_spec, $1)="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' - fi - output_verbose_link_cmd='echo' - else - _LT_AC_TAGVAR(ld_shlibs, $1)=no - fi - ;; - osf3*) - case $cc_basename in - KCC*) - # Kuck and Associates, Inc. (KAI) C++ Compiler - - # KCC will only create a shared library if the output file - # ends with ".so" (or ".sl" for HP-UX), so rename the library - # to its proper name (with version) after linking. - _LT_AC_TAGVAR(archive_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib' - - _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' - _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=: - - # Archives containing C++ object files must be created using - # "CC -Bstatic", where "CC" is the KAI C++ compiler. - _LT_AC_TAGVAR(old_archive_cmds, $1)='$CC -Bstatic -o $oldlib $oldobjs' - - ;; - RCC*) - # Rational C++ 2.4.1 - # FIXME: insert proper C++ library support - _LT_AC_TAGVAR(ld_shlibs, $1)=no - ;; - cxx*) - _LT_AC_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*' - _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $soname `test -n "$verstring" && echo ${wl}-set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib' - - _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' - _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=: - - # Commands to make compiler produce verbose output that lists - # what "hidden" libraries, object files and flags are used when - # linking a shared library. - # - # There doesn't appear to be a way to prevent this compiler from - # explicitly linking system object files so we need to strip them - # from the output so that they don't get included in the library - # dependencies. - output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep "ld" | grep -v "ld:"`; templist=`echo $templist | $SED "s/\(^.*ld.*\)\( .*ld.*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; echo $list' - ;; - *) - if test "$GXX" = yes && test "$with_gnu_ld" = no; then - _LT_AC_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*' - _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' - - _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' - _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=: - - # Commands to make compiler produce verbose output that lists - # what "hidden" libraries, object files and flags are used when - # linking a shared library. - output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep "\-L"' - - else - # FIXME: insert proper C++ library support - _LT_AC_TAGVAR(ld_shlibs, $1)=no - fi - ;; - esac - ;; - osf4* | osf5*) - case $cc_basename in - KCC*) - # Kuck and Associates, Inc. (KAI) C++ Compiler - - # KCC will only create a shared library if the output file - # ends with ".so" (or ".sl" for HP-UX), so rename the library - # to its proper name (with version) after linking. - _LT_AC_TAGVAR(archive_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib' - - _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' - _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=: - - # Archives containing C++ object files must be created using - # the KAI C++ compiler. - _LT_AC_TAGVAR(old_archive_cmds, $1)='$CC -o $oldlib $oldobjs' - ;; - RCC*) - # Rational C++ 2.4.1 - # FIXME: insert proper C++ library support - _LT_AC_TAGVAR(ld_shlibs, $1)=no - ;; - cxx*) - _LT_AC_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*' - _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib' - _LT_AC_TAGVAR(archive_expsym_cmds, $1)='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done~ - echo "-hidden">> $lib.exp~ - $CC -shared$allow_undefined_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname -Wl,-input -Wl,$lib.exp `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib~ - $rm $lib.exp' - - _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir' - _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=: - - # Commands to make compiler produce verbose output that lists - # what "hidden" libraries, object files and flags are used when - # linking a shared library. - # - # There doesn't appear to be a way to prevent this compiler from - # explicitly linking system object files so we need to strip them - # from the output so that they don't get included in the library - # dependencies. - output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep "ld" | grep -v "ld:"`; templist=`echo $templist | $SED "s/\(^.*ld.*\)\( .*ld.*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; echo $list' - ;; - *) - if test "$GXX" = yes && test "$with_gnu_ld" = no; then - _LT_AC_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*' - _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' - - _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' - _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=: - - # Commands to make compiler produce verbose output that lists - # what "hidden" libraries, object files and flags are used when - # linking a shared library. - output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep "\-L"' - - else - # FIXME: insert proper C++ library support - _LT_AC_TAGVAR(ld_shlibs, $1)=no - fi - ;; - esac - ;; - psos*) - # FIXME: insert proper C++ library support - _LT_AC_TAGVAR(ld_shlibs, $1)=no - ;; - sunos4*) - case $cc_basename in - CC*) - # Sun C++ 4.x - # FIXME: insert proper C++ library support - _LT_AC_TAGVAR(ld_shlibs, $1)=no - ;; - lcc*) - # Lucid - # FIXME: insert proper C++ library support - _LT_AC_TAGVAR(ld_shlibs, $1)=no - ;; - *) - # FIXME: insert proper C++ library support - _LT_AC_TAGVAR(ld_shlibs, $1)=no - ;; - esac - ;; - solaris*) - case $cc_basename in - CC*) - # Sun C++ 4.2, 5.x and Centerline C++ - _LT_AC_TAGVAR(archive_cmds_need_lc,$1)=yes - _LT_AC_TAGVAR(no_undefined_flag, $1)=' -zdefs' - _LT_AC_TAGVAR(archive_cmds, $1)='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' - _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~ - $CC -G${allow_undefined_flag} ${wl}-M ${wl}$lib.exp -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$rm $lib.exp' - - _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' - _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no - case $host_os in - solaris2.[[0-5]] | solaris2.[[0-5]].*) ;; - *) - # The compiler driver will combine and reorder linker options, - # but understands `-z linker_flag'. - # Supported since Solaris 2.6 (maybe 2.5.1?) - _LT_AC_TAGVAR(whole_archive_flag_spec, $1)='-z allextract$convenience -z defaultextract' - ;; - esac - _LT_AC_TAGVAR(link_all_deplibs, $1)=yes - - output_verbose_link_cmd='echo' - - # Archives containing C++ object files must be created using - # "CC -xar", where "CC" is the Sun C++ compiler. This is - # necessary to make sure instantiated templates are included - # in the archive. - _LT_AC_TAGVAR(old_archive_cmds, $1)='$CC -xar -o $oldlib $oldobjs' - ;; - gcx*) - # Green Hills C++ Compiler - _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib' - - # The C++ compiler must be used to create the archive. - _LT_AC_TAGVAR(old_archive_cmds, $1)='$CC $LDFLAGS -archive -o $oldlib $oldobjs' - ;; - *) - # GNU C++ compiler with Solaris linker - if test "$GXX" = yes && test "$with_gnu_ld" = no; then - _LT_AC_TAGVAR(no_undefined_flag, $1)=' ${wl}-z ${wl}defs' - if $CC --version | grep -v '^2\.7' > /dev/null; then - _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $LDFLAGS $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib' - _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~ - $CC -shared -nostdlib ${wl}-M $wl$lib.exp -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$rm $lib.exp' - - # Commands to make compiler produce verbose output that lists - # what "hidden" libraries, object files and flags are used when - # linking a shared library. - output_verbose_link_cmd="$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep \"\-L\"" - else - # g++ 2.7 appears to require `-G' NOT `-shared' on this - # platform. - _LT_AC_TAGVAR(archive_cmds, $1)='$CC -G -nostdlib $LDFLAGS $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib' - _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~ - $CC -G -nostdlib ${wl}-M $wl$lib.exp -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$rm $lib.exp' - - # Commands to make compiler produce verbose output that lists - # what "hidden" libraries, object files and flags are used when - # linking a shared library. - output_verbose_link_cmd="$CC -G $CFLAGS -v conftest.$objext 2>&1 | grep \"\-L\"" - fi - - _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R $wl$libdir' - case $host_os in - solaris2.[[0-5]] | solaris2.[[0-5]].*) ;; - *) - _LT_AC_TAGVAR(whole_archive_flag_spec, $1)='${wl}-z ${wl}allextract$convenience ${wl}-z ${wl}defaultextract' - ;; - esac - fi - ;; - esac - ;; - sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[[01]].[[10]]* | unixware7* | sco3.2v5.0.[[024]]*) - _LT_AC_TAGVAR(no_undefined_flag, $1)='${wl}-z,text' - _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=no - _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no - runpath_var='LD_RUN_PATH' - - case $cc_basename in - CC*) - _LT_AC_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - ;; - *) - _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - ;; - esac - ;; - sysv5* | sco3.2v5* | sco5v6*) - # Note: We can NOT use -z defs as we might desire, because we do not - # link with -lc, and that would cause any symbols used from libc to - # always be unresolved, which means just about no library would - # ever link correctly. If we're not using GNU ld we use -z text - # though, which does catch some bad symbols but isn't as heavy-handed - # as -z defs. - # For security reasons, it is highly recommended that you always - # use absolute paths for naming shared libraries, and exclude the - # DT_RUNPATH tag from executables and libraries. But doing so - # requires that you compile everything twice, which is a pain. - # So that behaviour is only enabled if SCOABSPATH is set to a - # non-empty value in the environment. Most likely only useful for - # creating official distributions of packages. - # This is a hack until libtool officially supports absolute path - # names for shared libraries. - _LT_AC_TAGVAR(no_undefined_flag, $1)='${wl}-z,text' - _LT_AC_TAGVAR(allow_undefined_flag, $1)='${wl}-z,nodefs' - _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=no - _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no - _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='`test -z "$SCOABSPATH" && echo ${wl}-R,$libdir`' - _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=':' - _LT_AC_TAGVAR(link_all_deplibs, $1)=yes - _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-Bexport' - runpath_var='LD_RUN_PATH' - - case $cc_basename in - CC*) - _LT_AC_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags' - _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags' - ;; - *) - _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags' - _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags' - ;; - esac - ;; - tandem*) - case $cc_basename in - NCC*) - # NonStop-UX NCC 3.20 - # FIXME: insert proper C++ library support - _LT_AC_TAGVAR(ld_shlibs, $1)=no - ;; - *) - # FIXME: insert proper C++ library support - _LT_AC_TAGVAR(ld_shlibs, $1)=no - ;; - esac - ;; - vxworks*) - # FIXME: insert proper C++ library support - _LT_AC_TAGVAR(ld_shlibs, $1)=no - ;; - *) - # FIXME: insert proper C++ library support - _LT_AC_TAGVAR(ld_shlibs, $1)=no - ;; -esac -AC_MSG_RESULT([$_LT_AC_TAGVAR(ld_shlibs, $1)]) -test "$_LT_AC_TAGVAR(ld_shlibs, $1)" = no && can_build_shared=no - -_LT_AC_TAGVAR(GCC, $1)="$GXX" -_LT_AC_TAGVAR(LD, $1)="$LD" - -AC_LIBTOOL_POSTDEP_PREDEP($1) -AC_LIBTOOL_PROG_COMPILER_PIC($1) -AC_LIBTOOL_PROG_CC_C_O($1) -AC_LIBTOOL_SYS_HARD_LINK_LOCKS($1) -AC_LIBTOOL_PROG_LD_SHLIBS($1) -AC_LIBTOOL_SYS_DYNAMIC_LINKER($1) -AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH($1) - -AC_LIBTOOL_CONFIG($1) - -AC_LANG_POP -CC=$lt_save_CC -LDCXX=$LD -LD=$lt_save_LD -GCC=$lt_save_GCC -with_gnu_ldcxx=$with_gnu_ld -with_gnu_ld=$lt_save_with_gnu_ld -lt_cv_path_LDCXX=$lt_cv_path_LD -lt_cv_path_LD=$lt_save_path_LD -lt_cv_prog_gnu_ldcxx=$lt_cv_prog_gnu_ld -lt_cv_prog_gnu_ld=$lt_save_with_gnu_ld -])# AC_LIBTOOL_LANG_CXX_CONFIG - -# AC_LIBTOOL_POSTDEP_PREDEP([TAGNAME]) -# ------------------------------------ -# Figure out "hidden" library dependencies from verbose -# compiler output when linking a shared library. -# Parse the compiler output and extract the necessary -# objects, libraries and library flags. -AC_DEFUN([AC_LIBTOOL_POSTDEP_PREDEP],[ -dnl we can't use the lt_simple_compile_test_code here, -dnl because it contains code intended for an executable, -dnl not a library. It's possible we should let each -dnl tag define a new lt_????_link_test_code variable, -dnl but it's only used here... -ifelse([$1],[],[cat > conftest.$ac_ext < conftest.$ac_ext < conftest.$ac_ext < conftest.$ac_ext <&1 | sed 5q` in - *Sun\ C*) - # Sun C++ 5.9 - # - # The more standards-conforming stlport4 library is - # incompatible with the Cstd library. Avoid specifying - # it if it's in CXXFLAGS. Ignore libCrun as - # -library=stlport4 depends on it. - case " $CXX $CXXFLAGS " in - *" -library=stlport4 "*) - solaris_use_stlport4=yes - ;; - esac - if test "$solaris_use_stlport4" != yes; then - _LT_AC_TAGVAR(postdeps,$1)='-library=Cstd -library=Crun' - fi - ;; - esac - ;; - -solaris*) - case $cc_basename in - CC*) - # The more standards-conforming stlport4 library is - # incompatible with the Cstd library. Avoid specifying - # it if it's in CXXFLAGS. Ignore libCrun as - # -library=stlport4 depends on it. - case " $CXX $CXXFLAGS " in - *" -library=stlport4 "*) - solaris_use_stlport4=yes - ;; - esac - - # Adding this requires a known-good setup of shared libraries for - # Sun compiler versions before 5.6, else PIC objects from an old - # archive will be linked into the output, leading to subtle bugs. - if test "$solaris_use_stlport4" != yes; then - _LT_AC_TAGVAR(postdeps,$1)='-library=Cstd -library=Crun' - fi - ;; - esac - ;; -esac -]) - -case " $_LT_AC_TAGVAR(postdeps, $1) " in -*" -lc "*) _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=no ;; -esac -])# AC_LIBTOOL_POSTDEP_PREDEP - -# AC_LIBTOOL_LANG_F77_CONFIG -# -------------------------- -# Ensure that the configuration vars for the C compiler are -# suitably defined. Those variables are subsequently used by -# AC_LIBTOOL_CONFIG to write the compiler configuration to `libtool'. -AC_DEFUN([AC_LIBTOOL_LANG_F77_CONFIG], [_LT_AC_LANG_F77_CONFIG(F77)]) -AC_DEFUN([_LT_AC_LANG_F77_CONFIG], -[AC_REQUIRE([AC_PROG_F77]) -AC_LANG_PUSH(Fortran 77) - -_LT_AC_TAGVAR(archive_cmds_need_lc, $1)=no -_LT_AC_TAGVAR(allow_undefined_flag, $1)= -_LT_AC_TAGVAR(always_export_symbols, $1)=no -_LT_AC_TAGVAR(archive_expsym_cmds, $1)= -_LT_AC_TAGVAR(export_dynamic_flag_spec, $1)= -_LT_AC_TAGVAR(hardcode_direct, $1)=no -_LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)= -_LT_AC_TAGVAR(hardcode_libdir_flag_spec_ld, $1)= -_LT_AC_TAGVAR(hardcode_libdir_separator, $1)= -_LT_AC_TAGVAR(hardcode_minus_L, $1)=no -_LT_AC_TAGVAR(hardcode_automatic, $1)=no -_LT_AC_TAGVAR(module_cmds, $1)= -_LT_AC_TAGVAR(module_expsym_cmds, $1)= -_LT_AC_TAGVAR(link_all_deplibs, $1)=unknown -_LT_AC_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds -_LT_AC_TAGVAR(no_undefined_flag, $1)= -_LT_AC_TAGVAR(whole_archive_flag_spec, $1)= -_LT_AC_TAGVAR(enable_shared_with_static_runtimes, $1)=no - -# Source file extension for f77 test sources. -ac_ext=f - -# Object file extension for compiled f77 test sources. -objext=o -_LT_AC_TAGVAR(objext, $1)=$objext - -# Code to be used in simple compile tests -lt_simple_compile_test_code="\ - subroutine t - return - end -" - -# Code to be used in simple link tests -lt_simple_link_test_code="\ - program t - end -" - -# ltmain only uses $CC for tagged configurations so make sure $CC is set. -_LT_AC_SYS_COMPILER - -# save warnings/boilerplate of simple test code -_LT_COMPILER_BOILERPLATE -_LT_LINKER_BOILERPLATE - -# Allow CC to be a program name with arguments. -lt_save_CC="$CC" -CC=${F77-"f77"} -compiler=$CC -_LT_AC_TAGVAR(compiler, $1)=$CC -_LT_CC_BASENAME([$compiler]) - -AC_MSG_CHECKING([if libtool supports shared libraries]) -AC_MSG_RESULT([$can_build_shared]) - -AC_MSG_CHECKING([whether to build shared libraries]) -test "$can_build_shared" = "no" && enable_shared=no - -# On AIX, shared libraries and static libraries use the same namespace, and -# are all built from PIC. -case $host_os in -aix3*) - test "$enable_shared" = yes && enable_static=no - if test -n "$RANLIB"; then - archive_cmds="$archive_cmds~\$RANLIB \$lib" - postinstall_cmds='$RANLIB $lib' - fi - ;; -aix4* | aix5*) - if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then - test "$enable_shared" = yes && enable_static=no - fi - ;; -esac -AC_MSG_RESULT([$enable_shared]) - -AC_MSG_CHECKING([whether to build static libraries]) -# Make sure either enable_shared or enable_static is yes. -test "$enable_shared" = yes || enable_static=yes -AC_MSG_RESULT([$enable_static]) - -_LT_AC_TAGVAR(GCC, $1)="$G77" -_LT_AC_TAGVAR(LD, $1)="$LD" - -AC_LIBTOOL_PROG_COMPILER_PIC($1) -AC_LIBTOOL_PROG_CC_C_O($1) -AC_LIBTOOL_SYS_HARD_LINK_LOCKS($1) -AC_LIBTOOL_PROG_LD_SHLIBS($1) -AC_LIBTOOL_SYS_DYNAMIC_LINKER($1) -AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH($1) - -AC_LIBTOOL_CONFIG($1) - -AC_LANG_POP -CC="$lt_save_CC" -])# AC_LIBTOOL_LANG_F77_CONFIG - - -# AC_LIBTOOL_LANG_GCJ_CONFIG -# -------------------------- -# Ensure that the configuration vars for the C compiler are -# suitably defined. Those variables are subsequently used by -# AC_LIBTOOL_CONFIG to write the compiler configuration to `libtool'. -AC_DEFUN([AC_LIBTOOL_LANG_GCJ_CONFIG], [_LT_AC_LANG_GCJ_CONFIG(GCJ)]) -AC_DEFUN([_LT_AC_LANG_GCJ_CONFIG], -[AC_LANG_SAVE - -# Source file extension for Java test sources. -ac_ext=java - -# Object file extension for compiled Java test sources. -objext=o -_LT_AC_TAGVAR(objext, $1)=$objext - -# Code to be used in simple compile tests -lt_simple_compile_test_code="class foo {}" - -# Code to be used in simple link tests -lt_simple_link_test_code='public class conftest { public static void main(String[[]] argv) {}; }' - -# ltmain only uses $CC for tagged configurations so make sure $CC is set. -_LT_AC_SYS_COMPILER - -# save warnings/boilerplate of simple test code -_LT_COMPILER_BOILERPLATE -_LT_LINKER_BOILERPLATE - -# Allow CC to be a program name with arguments. -lt_save_CC="$CC" -CC=${GCJ-"gcj"} -compiler=$CC -_LT_AC_TAGVAR(compiler, $1)=$CC -_LT_CC_BASENAME([$compiler]) - -# GCJ did not exist at the time GCC didn't implicitly link libc in. -_LT_AC_TAGVAR(archive_cmds_need_lc, $1)=no - -_LT_AC_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds - -AC_LIBTOOL_PROG_COMPILER_NO_RTTI($1) -AC_LIBTOOL_PROG_COMPILER_PIC($1) -AC_LIBTOOL_PROG_CC_C_O($1) -AC_LIBTOOL_SYS_HARD_LINK_LOCKS($1) -AC_LIBTOOL_PROG_LD_SHLIBS($1) -AC_LIBTOOL_SYS_DYNAMIC_LINKER($1) -AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH($1) - -AC_LIBTOOL_CONFIG($1) - -AC_LANG_RESTORE -CC="$lt_save_CC" -])# AC_LIBTOOL_LANG_GCJ_CONFIG - - -# AC_LIBTOOL_LANG_RC_CONFIG -# ------------------------- -# Ensure that the configuration vars for the Windows resource compiler are -# suitably defined. Those variables are subsequently used by -# AC_LIBTOOL_CONFIG to write the compiler configuration to `libtool'. -AC_DEFUN([AC_LIBTOOL_LANG_RC_CONFIG], [_LT_AC_LANG_RC_CONFIG(RC)]) -AC_DEFUN([_LT_AC_LANG_RC_CONFIG], -[AC_LANG_SAVE - -# Source file extension for RC test sources. -ac_ext=rc - -# Object file extension for compiled RC test sources. -objext=o -_LT_AC_TAGVAR(objext, $1)=$objext - -# Code to be used in simple compile tests -lt_simple_compile_test_code='sample MENU { MENUITEM "&Soup", 100, CHECKED }' - -# Code to be used in simple link tests -lt_simple_link_test_code="$lt_simple_compile_test_code" - -# ltmain only uses $CC for tagged configurations so make sure $CC is set. -_LT_AC_SYS_COMPILER - -# save warnings/boilerplate of simple test code -_LT_COMPILER_BOILERPLATE -_LT_LINKER_BOILERPLATE - -# Allow CC to be a program name with arguments. -lt_save_CC="$CC" -CC=${RC-"windres"} -compiler=$CC -_LT_AC_TAGVAR(compiler, $1)=$CC -_LT_CC_BASENAME([$compiler]) -_LT_AC_TAGVAR(lt_cv_prog_compiler_c_o, $1)=yes - -AC_LIBTOOL_CONFIG($1) - -AC_LANG_RESTORE -CC="$lt_save_CC" -])# AC_LIBTOOL_LANG_RC_CONFIG - - -# AC_LIBTOOL_CONFIG([TAGNAME]) -# ---------------------------- -# If TAGNAME is not passed, then create an initial libtool script -# with a default configuration from the untagged config vars. Otherwise -# add code to config.status for appending the configuration named by -# TAGNAME from the matching tagged config vars. -AC_DEFUN([AC_LIBTOOL_CONFIG], -[# The else clause should only fire when bootstrapping the -# libtool distribution, otherwise you forgot to ship ltmain.sh -# with your package, and you will get complaints that there are -# no rules to generate ltmain.sh. -if test -f "$ltmain"; then - # See if we are running on zsh, and set the options which allow our commands through - # without removal of \ escapes. - if test -n "${ZSH_VERSION+set}" ; then - setopt NO_GLOB_SUBST - fi - # Now quote all the things that may contain metacharacters while being - # careful not to overquote the AC_SUBSTed values. We take copies of the - # variables and quote the copies for generation of the libtool script. - for var in echo old_CC old_CFLAGS AR AR_FLAGS EGREP RANLIB LN_S LTCC LTCFLAGS NM \ - SED SHELL STRIP \ - libname_spec library_names_spec soname_spec extract_expsyms_cmds \ - old_striplib striplib file_magic_cmd finish_cmds finish_eval \ - deplibs_check_method reload_flag reload_cmds need_locks \ - lt_cv_sys_global_symbol_pipe lt_cv_sys_global_symbol_to_cdecl \ - lt_cv_sys_global_symbol_to_c_name_address \ - sys_lib_search_path_spec sys_lib_dlsearch_path_spec \ - old_postinstall_cmds old_postuninstall_cmds \ - _LT_AC_TAGVAR(compiler, $1) \ - _LT_AC_TAGVAR(CC, $1) \ - _LT_AC_TAGVAR(LD, $1) \ - _LT_AC_TAGVAR(lt_prog_compiler_wl, $1) \ - _LT_AC_TAGVAR(lt_prog_compiler_pic, $1) \ - _LT_AC_TAGVAR(lt_prog_compiler_static, $1) \ - _LT_AC_TAGVAR(lt_prog_compiler_no_builtin_flag, $1) \ - _LT_AC_TAGVAR(export_dynamic_flag_spec, $1) \ - _LT_AC_TAGVAR(thread_safe_flag_spec, $1) \ - _LT_AC_TAGVAR(whole_archive_flag_spec, $1) \ - _LT_AC_TAGVAR(enable_shared_with_static_runtimes, $1) \ - _LT_AC_TAGVAR(old_archive_cmds, $1) \ - _LT_AC_TAGVAR(old_archive_from_new_cmds, $1) \ - _LT_AC_TAGVAR(predep_objects, $1) \ - _LT_AC_TAGVAR(postdep_objects, $1) \ - _LT_AC_TAGVAR(predeps, $1) \ - _LT_AC_TAGVAR(postdeps, $1) \ - _LT_AC_TAGVAR(compiler_lib_search_path, $1) \ - _LT_AC_TAGVAR(archive_cmds, $1) \ - _LT_AC_TAGVAR(archive_expsym_cmds, $1) \ - _LT_AC_TAGVAR(postinstall_cmds, $1) \ - _LT_AC_TAGVAR(postuninstall_cmds, $1) \ - _LT_AC_TAGVAR(old_archive_from_expsyms_cmds, $1) \ - _LT_AC_TAGVAR(allow_undefined_flag, $1) \ - _LT_AC_TAGVAR(no_undefined_flag, $1) \ - _LT_AC_TAGVAR(export_symbols_cmds, $1) \ - _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1) \ - _LT_AC_TAGVAR(hardcode_libdir_flag_spec_ld, $1) \ - _LT_AC_TAGVAR(hardcode_libdir_separator, $1) \ - _LT_AC_TAGVAR(hardcode_automatic, $1) \ - _LT_AC_TAGVAR(module_cmds, $1) \ - _LT_AC_TAGVAR(module_expsym_cmds, $1) \ - _LT_AC_TAGVAR(lt_cv_prog_compiler_c_o, $1) \ - _LT_AC_TAGVAR(fix_srcfile_path, $1) \ - _LT_AC_TAGVAR(exclude_expsyms, $1) \ - _LT_AC_TAGVAR(include_expsyms, $1); do - - case $var in - _LT_AC_TAGVAR(old_archive_cmds, $1) | \ - _LT_AC_TAGVAR(old_archive_from_new_cmds, $1) | \ - _LT_AC_TAGVAR(archive_cmds, $1) | \ - _LT_AC_TAGVAR(archive_expsym_cmds, $1) | \ - _LT_AC_TAGVAR(module_cmds, $1) | \ - _LT_AC_TAGVAR(module_expsym_cmds, $1) | \ - _LT_AC_TAGVAR(old_archive_from_expsyms_cmds, $1) | \ - _LT_AC_TAGVAR(export_symbols_cmds, $1) | \ - extract_expsyms_cmds | reload_cmds | finish_cmds | \ - postinstall_cmds | postuninstall_cmds | \ - old_postinstall_cmds | old_postuninstall_cmds | \ - sys_lib_search_path_spec | sys_lib_dlsearch_path_spec) - # Double-quote double-evaled strings. - eval "lt_$var=\\\"\`\$echo \"X\$$var\" | \$Xsed -e \"\$double_quote_subst\" -e \"\$sed_quote_subst\" -e \"\$delay_variable_subst\"\`\\\"" - ;; - *) - eval "lt_$var=\\\"\`\$echo \"X\$$var\" | \$Xsed -e \"\$sed_quote_subst\"\`\\\"" - ;; - esac - done - - case $lt_echo in - *'\[$]0 --fallback-echo"') - lt_echo=`$echo "X$lt_echo" | $Xsed -e 's/\\\\\\\[$]0 --fallback-echo"[$]/[$]0 --fallback-echo"/'` - ;; - esac - -ifelse([$1], [], - [cfgfile="${ofile}T" - trap "$rm \"$cfgfile\"; exit 1" 1 2 15 - $rm -f "$cfgfile" - AC_MSG_NOTICE([creating $ofile])], - [cfgfile="$ofile"]) - - cat <<__EOF__ >> "$cfgfile" -ifelse([$1], [], -[#! $SHELL - -# `$echo "$cfgfile" | sed 's%^.*/%%'` - Provide generalized library-building support services. -# Generated automatically by $PROGRAM (GNU $PACKAGE $VERSION$TIMESTAMP) -# NOTE: Changes made to this file will be lost: look at ltmain.sh. -# -# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007 -# Free Software Foundation, Inc. -# -# This file is part of GNU Libtool: -# Originally by Gordon Matzigkeit , 1996 -# -# This program is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 2 of the License, or -# (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, but -# WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. -# -# As a special exception to the GNU General Public License, if you -# distribute this file as part of a program that contains a -# configuration script generated by Autoconf, you may include it under -# the same distribution terms that you use for the rest of that program. - -# A sed program that does not truncate output. -SED=$lt_SED - -# Sed that helps us avoid accidentally triggering echo(1) options like -n. -Xsed="$SED -e 1s/^X//" - -# The HP-UX ksh and POSIX shell print the target directory to stdout -# if CDPATH is set. -(unset CDPATH) >/dev/null 2>&1 && unset CDPATH - -# The names of the tagged configurations supported by this script. -available_tags= - -# ### BEGIN LIBTOOL CONFIG], -[# ### BEGIN LIBTOOL TAG CONFIG: $tagname]) - -# Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`: - -# Shell to use when invoking shell scripts. -SHELL=$lt_SHELL - -# Whether or not to build shared libraries. -build_libtool_libs=$enable_shared - -# Whether or not to build static libraries. -build_old_libs=$enable_static - -# Whether or not to add -lc for building shared libraries. -build_libtool_need_lc=$_LT_AC_TAGVAR(archive_cmds_need_lc, $1) - -# Whether or not to disallow shared libs when runtime libs are static -allow_libtool_libs_with_static_runtimes=$_LT_AC_TAGVAR(enable_shared_with_static_runtimes, $1) - -# Whether or not to optimize for fast installation. -fast_install=$enable_fast_install - -# The host system. -host_alias=$host_alias -host=$host -host_os=$host_os - -# The build system. -build_alias=$build_alias -build=$build -build_os=$build_os - -# An echo program that does not interpret backslashes. -echo=$lt_echo - -# The archiver. -AR=$lt_AR -AR_FLAGS=$lt_AR_FLAGS - -# A C compiler. -LTCC=$lt_LTCC - -# LTCC compiler flags. -LTCFLAGS=$lt_LTCFLAGS - -# A language-specific compiler. -CC=$lt_[]_LT_AC_TAGVAR(compiler, $1) - -# Is the compiler the GNU C compiler? -with_gcc=$_LT_AC_TAGVAR(GCC, $1) - -# An ERE matcher. -EGREP=$lt_EGREP - -# The linker used to build libraries. -LD=$lt_[]_LT_AC_TAGVAR(LD, $1) - -# Whether we need hard or soft links. -LN_S=$lt_LN_S - -# A BSD-compatible nm program. -NM=$lt_NM - -# A symbol stripping program -STRIP=$lt_STRIP - -# Used to examine libraries when file_magic_cmd begins "file" -MAGIC_CMD=$MAGIC_CMD - -# Used on cygwin: DLL creation program. -DLLTOOL="$DLLTOOL" - -# Used on cygwin: object dumper. -OBJDUMP="$OBJDUMP" - -# Used on cygwin: assembler. -AS="$AS" - -# The name of the directory that contains temporary libtool files. -objdir=$objdir - -# How to create reloadable object files. -reload_flag=$lt_reload_flag -reload_cmds=$lt_reload_cmds - -# How to pass a linker flag through the compiler. -wl=$lt_[]_LT_AC_TAGVAR(lt_prog_compiler_wl, $1) - -# Object file suffix (normally "o"). -objext="$ac_objext" - -# Old archive suffix (normally "a"). -libext="$libext" - -# Shared library suffix (normally ".so"). -shrext_cmds='$shrext_cmds' - -# Executable file suffix (normally ""). -exeext="$exeext" - -# Additional compiler flags for building library objects. -pic_flag=$lt_[]_LT_AC_TAGVAR(lt_prog_compiler_pic, $1) -pic_mode=$pic_mode - -# What is the maximum length of a command? -max_cmd_len=$lt_cv_sys_max_cmd_len - -# Does compiler simultaneously support -c and -o options? -compiler_c_o=$lt_[]_LT_AC_TAGVAR(lt_cv_prog_compiler_c_o, $1) - -# Must we lock files when doing compilation? -need_locks=$lt_need_locks - -# Do we need the lib prefix for modules? -need_lib_prefix=$need_lib_prefix - -# Do we need a version for libraries? -need_version=$need_version - -# Whether dlopen is supported. -dlopen_support=$enable_dlopen - -# Whether dlopen of programs is supported. -dlopen_self=$enable_dlopen_self - -# Whether dlopen of statically linked programs is supported. -dlopen_self_static=$enable_dlopen_self_static - -# Compiler flag to prevent dynamic linking. -link_static_flag=$lt_[]_LT_AC_TAGVAR(lt_prog_compiler_static, $1) - -# Compiler flag to turn off builtin functions. -no_builtin_flag=$lt_[]_LT_AC_TAGVAR(lt_prog_compiler_no_builtin_flag, $1) - -# Compiler flag to allow reflexive dlopens. -export_dynamic_flag_spec=$lt_[]_LT_AC_TAGVAR(export_dynamic_flag_spec, $1) - -# Compiler flag to generate shared objects directly from archives. -whole_archive_flag_spec=$lt_[]_LT_AC_TAGVAR(whole_archive_flag_spec, $1) - -# Compiler flag to generate thread-safe objects. -thread_safe_flag_spec=$lt_[]_LT_AC_TAGVAR(thread_safe_flag_spec, $1) - -# Library versioning type. -version_type=$version_type - -# Format of library name prefix. -libname_spec=$lt_libname_spec - -# List of archive names. First name is the real one, the rest are links. -# The last name is the one that the linker finds with -lNAME. -library_names_spec=$lt_library_names_spec - -# The coded name of the library, if different from the real name. -soname_spec=$lt_soname_spec - -# Commands used to build and install an old-style archive. -RANLIB=$lt_RANLIB -old_archive_cmds=$lt_[]_LT_AC_TAGVAR(old_archive_cmds, $1) -old_postinstall_cmds=$lt_old_postinstall_cmds -old_postuninstall_cmds=$lt_old_postuninstall_cmds - -# Create an old-style archive from a shared archive. -old_archive_from_new_cmds=$lt_[]_LT_AC_TAGVAR(old_archive_from_new_cmds, $1) - -# Create a temporary old-style archive to link instead of a shared archive. -old_archive_from_expsyms_cmds=$lt_[]_LT_AC_TAGVAR(old_archive_from_expsyms_cmds, $1) - -# Commands used to build and install a shared archive. -archive_cmds=$lt_[]_LT_AC_TAGVAR(archive_cmds, $1) -archive_expsym_cmds=$lt_[]_LT_AC_TAGVAR(archive_expsym_cmds, $1) -postinstall_cmds=$lt_postinstall_cmds -postuninstall_cmds=$lt_postuninstall_cmds - -# Commands used to build a loadable module (assumed same as above if empty) -module_cmds=$lt_[]_LT_AC_TAGVAR(module_cmds, $1) -module_expsym_cmds=$lt_[]_LT_AC_TAGVAR(module_expsym_cmds, $1) - -# Commands to strip libraries. -old_striplib=$lt_old_striplib -striplib=$lt_striplib - -# Dependencies to place before the objects being linked to create a -# shared library. -predep_objects=$lt_[]_LT_AC_TAGVAR(predep_objects, $1) - -# Dependencies to place after the objects being linked to create a -# shared library. -postdep_objects=$lt_[]_LT_AC_TAGVAR(postdep_objects, $1) - -# Dependencies to place before the objects being linked to create a -# shared library. -predeps=$lt_[]_LT_AC_TAGVAR(predeps, $1) - -# Dependencies to place after the objects being linked to create a -# shared library. -postdeps=$lt_[]_LT_AC_TAGVAR(postdeps, $1) - -# The library search path used internally by the compiler when linking -# a shared library. -compiler_lib_search_path=$lt_[]_LT_AC_TAGVAR(compiler_lib_search_path, $1) - -# Method to check whether dependent libraries are shared objects. -deplibs_check_method=$lt_deplibs_check_method - -# Command to use when deplibs_check_method == file_magic. -file_magic_cmd=$lt_file_magic_cmd - -# Flag that allows shared libraries with undefined symbols to be built. -allow_undefined_flag=$lt_[]_LT_AC_TAGVAR(allow_undefined_flag, $1) - -# Flag that forces no undefined symbols. -no_undefined_flag=$lt_[]_LT_AC_TAGVAR(no_undefined_flag, $1) - -# Commands used to finish a libtool library installation in a directory. -finish_cmds=$lt_finish_cmds - -# Same as above, but a single script fragment to be evaled but not shown. -finish_eval=$lt_finish_eval - -# Take the output of nm and produce a listing of raw symbols and C names. -global_symbol_pipe=$lt_lt_cv_sys_global_symbol_pipe - -# Transform the output of nm in a proper C declaration -global_symbol_to_cdecl=$lt_lt_cv_sys_global_symbol_to_cdecl - -# Transform the output of nm in a C name address pair -global_symbol_to_c_name_address=$lt_lt_cv_sys_global_symbol_to_c_name_address - -# This is the shared library runtime path variable. -runpath_var=$runpath_var - -# This is the shared library path variable. -shlibpath_var=$shlibpath_var - -# Is shlibpath searched before the hard-coded library search path? -shlibpath_overrides_runpath=$shlibpath_overrides_runpath - -# How to hardcode a shared library path into an executable. -hardcode_action=$_LT_AC_TAGVAR(hardcode_action, $1) - -# Whether we should hardcode library paths into libraries. -hardcode_into_libs=$hardcode_into_libs - -# Flag to hardcode \$libdir into a binary during linking. -# This must work even if \$libdir does not exist. -hardcode_libdir_flag_spec=$lt_[]_LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1) - -# If ld is used when linking, flag to hardcode \$libdir into -# a binary during linking. This must work even if \$libdir does -# not exist. -hardcode_libdir_flag_spec_ld=$lt_[]_LT_AC_TAGVAR(hardcode_libdir_flag_spec_ld, $1) - -# Whether we need a single -rpath flag with a separated argument. -hardcode_libdir_separator=$lt_[]_LT_AC_TAGVAR(hardcode_libdir_separator, $1) - -# Set to yes if using DIR/libNAME${shared_ext} during linking hardcodes DIR into the -# resulting binary. -hardcode_direct=$_LT_AC_TAGVAR(hardcode_direct, $1) - -# Set to yes if using the -LDIR flag during linking hardcodes DIR into the -# resulting binary. -hardcode_minus_L=$_LT_AC_TAGVAR(hardcode_minus_L, $1) - -# Set to yes if using SHLIBPATH_VAR=DIR during linking hardcodes DIR into -# the resulting binary. -hardcode_shlibpath_var=$_LT_AC_TAGVAR(hardcode_shlibpath_var, $1) - -# Set to yes if building a shared library automatically hardcodes DIR into the library -# and all subsequent libraries and executables linked against it. -hardcode_automatic=$_LT_AC_TAGVAR(hardcode_automatic, $1) - -# Variables whose values should be saved in libtool wrapper scripts and -# restored at relink time. -variables_saved_for_relink="$variables_saved_for_relink" - -# Whether libtool must link a program against all its dependency libraries. -link_all_deplibs=$_LT_AC_TAGVAR(link_all_deplibs, $1) - -# Compile-time system search path for libraries -sys_lib_search_path_spec=$lt_sys_lib_search_path_spec - -# Run-time system search path for libraries -sys_lib_dlsearch_path_spec=$lt_sys_lib_dlsearch_path_spec - -# Fix the shell variable \$srcfile for the compiler. -fix_srcfile_path=$lt_fix_srcfile_path - -# Set to yes if exported symbols are required. -always_export_symbols=$_LT_AC_TAGVAR(always_export_symbols, $1) - -# The commands to list exported symbols. -export_symbols_cmds=$lt_[]_LT_AC_TAGVAR(export_symbols_cmds, $1) - -# The commands to extract the exported symbol list from a shared archive. -extract_expsyms_cmds=$lt_extract_expsyms_cmds - -# Symbols that should not be listed in the preloaded symbols. -exclude_expsyms=$lt_[]_LT_AC_TAGVAR(exclude_expsyms, $1) - -# Symbols that must always be exported. -include_expsyms=$lt_[]_LT_AC_TAGVAR(include_expsyms, $1) - -ifelse([$1],[], -[# ### END LIBTOOL CONFIG], -[# ### END LIBTOOL TAG CONFIG: $tagname]) - -__EOF__ - -ifelse([$1],[], [ - case $host_os in - aix3*) - cat <<\EOF >> "$cfgfile" - -# AIX sometimes has problems with the GCC collect2 program. For some -# reason, if we set the COLLECT_NAMES environment variable, the problems -# vanish in a puff of smoke. -if test "X${COLLECT_NAMES+set}" != Xset; then - COLLECT_NAMES= - export COLLECT_NAMES -fi -EOF - ;; - esac - - # We use sed instead of cat because bash on DJGPP gets confused if - # if finds mixed CR/LF and LF-only lines. Since sed operates in - # text mode, it properly converts lines to CR/LF. This bash problem - # is reportedly fixed, but why not run on old versions too? - sed '$q' "$ltmain" >> "$cfgfile" || (rm -f "$cfgfile"; exit 1) - - mv -f "$cfgfile" "$ofile" || \ - (rm -f "$ofile" && cp "$cfgfile" "$ofile" && rm -f "$cfgfile") - chmod +x "$ofile" -]) -else - # If there is no Makefile yet, we rely on a make rule to execute - # `config.status --recheck' to rerun these tests and create the - # libtool script then. - ltmain_in=`echo $ltmain | sed -e 's/\.sh$/.in/'` - if test -f "$ltmain_in"; then - test -f Makefile && make "$ltmain" - fi -fi -])# AC_LIBTOOL_CONFIG - - -# AC_LIBTOOL_PROG_COMPILER_NO_RTTI([TAGNAME]) -# ------------------------------------------- -AC_DEFUN([AC_LIBTOOL_PROG_COMPILER_NO_RTTI], -[AC_REQUIRE([_LT_AC_SYS_COMPILER])dnl - -_LT_AC_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)= - -if test "$GCC" = yes; then - _LT_AC_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=' -fno-builtin' - - AC_LIBTOOL_COMPILER_OPTION([if $compiler supports -fno-rtti -fno-exceptions], - lt_cv_prog_compiler_rtti_exceptions, - [-fno-rtti -fno-exceptions], [], - [_LT_AC_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)="$_LT_AC_TAGVAR(lt_prog_compiler_no_builtin_flag, $1) -fno-rtti -fno-exceptions"]) -fi -])# AC_LIBTOOL_PROG_COMPILER_NO_RTTI - - -# AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE -# --------------------------------- -AC_DEFUN([AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE], -[AC_REQUIRE([AC_CANONICAL_HOST]) -AC_REQUIRE([LT_AC_PROG_SED]) -AC_REQUIRE([AC_PROG_NM]) -AC_REQUIRE([AC_OBJEXT]) -# Check for command to grab the raw symbol name followed by C symbol from nm. -AC_MSG_CHECKING([command to parse $NM output from $compiler object]) -AC_CACHE_VAL([lt_cv_sys_global_symbol_pipe], -[ -# These are sane defaults that work on at least a few old systems. -# [They come from Ultrix. What could be older than Ultrix?!! ;)] - -# Character class describing NM global symbol codes. -symcode='[[BCDEGRST]]' - -# Regexp to match symbols that can be accessed directly from C. -sympat='\([[_A-Za-z]][[_A-Za-z0-9]]*\)' - -# Transform an extracted symbol line into a proper C declaration -lt_cv_sys_global_symbol_to_cdecl="sed -n -e 's/^. .* \(.*\)$/extern int \1;/p'" - -# Transform an extracted symbol line into symbol name and symbol address -lt_cv_sys_global_symbol_to_c_name_address="sed -n -e 's/^: \([[^ ]]*\) $/ {\\\"\1\\\", (lt_ptr) 0},/p' -e 's/^$symcode \([[^ ]]*\) \([[^ ]]*\)$/ {\"\2\", (lt_ptr) \&\2},/p'" - -# Define system-specific variables. -case $host_os in -aix*) - symcode='[[BCDT]]' - ;; -cygwin* | mingw* | pw32*) - symcode='[[ABCDGISTW]]' - ;; -hpux*) # Its linker distinguishes data from code symbols - if test "$host_cpu" = ia64; then - symcode='[[ABCDEGRST]]' - fi - lt_cv_sys_global_symbol_to_cdecl="sed -n -e 's/^T .* \(.*\)$/extern int \1();/p' -e 's/^$symcode* .* \(.*\)$/extern char \1;/p'" - lt_cv_sys_global_symbol_to_c_name_address="sed -n -e 's/^: \([[^ ]]*\) $/ {\\\"\1\\\", (lt_ptr) 0},/p' -e 's/^$symcode* \([[^ ]]*\) \([[^ ]]*\)$/ {\"\2\", (lt_ptr) \&\2},/p'" - ;; -linux* | k*bsd*-gnu) - if test "$host_cpu" = ia64; then - symcode='[[ABCDGIRSTW]]' - lt_cv_sys_global_symbol_to_cdecl="sed -n -e 's/^T .* \(.*\)$/extern int \1();/p' -e 's/^$symcode* .* \(.*\)$/extern char \1;/p'" - lt_cv_sys_global_symbol_to_c_name_address="sed -n -e 's/^: \([[^ ]]*\) $/ {\\\"\1\\\", (lt_ptr) 0},/p' -e 's/^$symcode* \([[^ ]]*\) \([[^ ]]*\)$/ {\"\2\", (lt_ptr) \&\2},/p'" - fi - ;; -irix* | nonstopux*) - symcode='[[BCDEGRST]]' - ;; -osf*) - symcode='[[BCDEGQRST]]' - ;; -solaris*) - symcode='[[BDRT]]' - ;; -sco3.2v5*) - symcode='[[DT]]' - ;; -sysv4.2uw2*) - symcode='[[DT]]' - ;; -sysv5* | sco5v6* | unixware* | OpenUNIX*) - symcode='[[ABDT]]' - ;; -sysv4) - symcode='[[DFNSTU]]' - ;; -esac - -# Handle CRLF in mingw tool chain -opt_cr= -case $build_os in -mingw*) - opt_cr=`echo 'x\{0,1\}' | tr x '\015'` # option cr in regexp - ;; -esac - -# If we're using GNU nm, then use its standard symbol codes. -case `$NM -V 2>&1` in -*GNU* | *'with BFD'*) - symcode='[[ABCDGIRSTW]]' ;; -esac - -# Try without a prefix undercore, then with it. -for ac_symprfx in "" "_"; do - - # Transform symcode, sympat, and symprfx into a raw symbol and a C symbol. - symxfrm="\\1 $ac_symprfx\\2 \\2" - - # Write the raw and C identifiers. - lt_cv_sys_global_symbol_pipe="sed -n -e 's/^.*[[ ]]\($symcode$symcode*\)[[ ]][[ ]]*$ac_symprfx$sympat$opt_cr$/$symxfrm/p'" - - # Check to see that the pipe works correctly. - pipe_works=no - - rm -f conftest* - cat > conftest.$ac_ext < $nlist) && test -s "$nlist"; then - # Try sorting and uniquifying the output. - if sort "$nlist" | uniq > "$nlist"T; then - mv -f "$nlist"T "$nlist" - else - rm -f "$nlist"T - fi - - # Make sure that we snagged all the symbols we need. - if grep ' nm_test_var$' "$nlist" >/dev/null; then - if grep ' nm_test_func$' "$nlist" >/dev/null; then - cat < conftest.$ac_ext -#ifdef __cplusplus -extern "C" { -#endif - -EOF - # Now generate the symbol file. - eval "$lt_cv_sys_global_symbol_to_cdecl"' < "$nlist" | grep -v main >> conftest.$ac_ext' - - cat <> conftest.$ac_ext -#if defined (__STDC__) && __STDC__ -# define lt_ptr_t void * -#else -# define lt_ptr_t char * -# define const -#endif - -/* The mapping between symbol names and symbols. */ -const struct { - const char *name; - lt_ptr_t address; -} -lt_preloaded_symbols[[]] = -{ -EOF - $SED "s/^$symcode$symcode* \(.*\) \(.*\)$/ {\"\2\", (lt_ptr_t) \&\2},/" < "$nlist" | grep -v main >> conftest.$ac_ext - cat <<\EOF >> conftest.$ac_ext - {0, (lt_ptr_t) 0} -}; - -#ifdef __cplusplus -} -#endif -EOF - # Now try linking the two files. - mv conftest.$ac_objext conftstm.$ac_objext - lt_save_LIBS="$LIBS" - lt_save_CFLAGS="$CFLAGS" - LIBS="conftstm.$ac_objext" - CFLAGS="$CFLAGS$_LT_AC_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)" - if AC_TRY_EVAL(ac_link) && test -s conftest${ac_exeext}; then - pipe_works=yes - fi - LIBS="$lt_save_LIBS" - CFLAGS="$lt_save_CFLAGS" - else - echo "cannot find nm_test_func in $nlist" >&AS_MESSAGE_LOG_FD - fi - else - echo "cannot find nm_test_var in $nlist" >&AS_MESSAGE_LOG_FD - fi - else - echo "cannot run $lt_cv_sys_global_symbol_pipe" >&AS_MESSAGE_LOG_FD - fi - else - echo "$progname: failed program was:" >&AS_MESSAGE_LOG_FD - cat conftest.$ac_ext >&5 - fi - rm -f conftest* conftst* - - # Do not use the global_symbol_pipe unless it works. - if test "$pipe_works" = yes; then - break - else - lt_cv_sys_global_symbol_pipe= - fi -done -]) -if test -z "$lt_cv_sys_global_symbol_pipe"; then - lt_cv_sys_global_symbol_to_cdecl= -fi -if test -z "$lt_cv_sys_global_symbol_pipe$lt_cv_sys_global_symbol_to_cdecl"; then - AC_MSG_RESULT(failed) -else - AC_MSG_RESULT(ok) -fi -]) # AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE - - -# AC_LIBTOOL_PROG_COMPILER_PIC([TAGNAME]) -# --------------------------------------- -AC_DEFUN([AC_LIBTOOL_PROG_COMPILER_PIC], -[_LT_AC_TAGVAR(lt_prog_compiler_wl, $1)= -_LT_AC_TAGVAR(lt_prog_compiler_pic, $1)= -_LT_AC_TAGVAR(lt_prog_compiler_static, $1)= - -AC_MSG_CHECKING([for $compiler option to produce PIC]) - ifelse([$1],[CXX],[ - # C++ specific cases for pic, static, wl, etc. - if test "$GXX" = yes; then - _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' - _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-static' - - case $host_os in - aix*) - # All AIX code is PIC. - if test "$host_cpu" = ia64; then - # AIX 5 now supports IA64 processor - _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' - fi - ;; - amigaos*) - # FIXME: we need at least 68020 code to build shared libraries, but - # adding the `-m68020' flag to GCC prevents building anything better, - # like `-m68040'. - _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-m68020 -resident32 -malways-restore-a4' - ;; - beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) - # PIC is the default for these OSes. - ;; - mingw* | cygwin* | os2* | pw32*) - # This hack is so that the source file can tell whether it is being - # built for inclusion in a dll (and should export symbols for example). - # Although the cygwin gcc ignores -fPIC, still need this for old-style - # (--disable-auto-import) libraries - _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT' - ;; - darwin* | rhapsody*) - # PIC is the default on this platform - # Common symbols not allowed in MH_DYLIB files - _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-fno-common' - ;; - *djgpp*) - # DJGPP does not support shared libraries at all - _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)= - ;; - interix[[3-9]]*) - # Interix 3.x gcc -fpic/-fPIC options generate broken code. - # Instead, we relocate shared libraries at runtime. - ;; - sysv4*MP*) - if test -d /usr/nec; then - _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)=-Kconform_pic - fi - ;; - hpux*) - # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but - # not for PA HP-UX. - case $host_cpu in - hppa*64*|ia64*) - ;; - *) - _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' - ;; - esac - ;; - *) - _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' - ;; - esac - else - case $host_os in - aix4* | aix5*) - # All AIX code is PIC. - if test "$host_cpu" = ia64; then - # AIX 5 now supports IA64 processor - _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' - else - _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-bnso -bI:/lib/syscalls.exp' - fi - ;; - chorus*) - case $cc_basename in - cxch68*) - # Green Hills C++ Compiler - # _LT_AC_TAGVAR(lt_prog_compiler_static, $1)="--no_auto_instantiation -u __main -u __premain -u _abort -r $COOL_DIR/lib/libOrb.a $MVME_DIR/lib/CC/libC.a $MVME_DIR/lib/classix/libcx.s.a" - ;; - esac - ;; - darwin*) - # PIC is the default on this platform - # Common symbols not allowed in MH_DYLIB files - case $cc_basename in - xlc*) - _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-qnocommon' - _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' - ;; - esac - ;; - dgux*) - case $cc_basename in - ec++*) - _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' - ;; - ghcx*) - # Green Hills C++ Compiler - _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-pic' - ;; - *) - ;; - esac - ;; - freebsd* | dragonfly*) - # FreeBSD uses GNU C++ - ;; - hpux9* | hpux10* | hpux11*) - case $cc_basename in - CC*) - _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' - _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='${wl}-a ${wl}archive' - if test "$host_cpu" != ia64; then - _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='+Z' - fi - ;; - aCC*) - _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' - _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='${wl}-a ${wl}archive' - case $host_cpu in - hppa*64*|ia64*) - # +Z the default - ;; - *) - _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='+Z' - ;; - esac - ;; - *) - ;; - esac - ;; - interix*) - # This is c89, which is MS Visual C++ (no shared libs) - # Anyone wants to do a port? - ;; - irix5* | irix6* | nonstopux*) - case $cc_basename in - CC*) - _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' - _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' - # CC pic flag -KPIC is the default. - ;; - *) - ;; - esac - ;; - linux* | k*bsd*-gnu) - case $cc_basename in - KCC*) - # KAI C++ Compiler - _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='--backend -Wl,' - _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' - ;; - icpc* | ecpc*) - # Intel C++ - _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' - _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' - _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-static' - ;; - pgCC*) - # Portland Group C++ compiler. - _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' - _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-fpic' - _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' - ;; - cxx*) - # Compaq C++ - # Make sure the PIC flag is empty. It appears that all Alpha - # Linux and Compaq Tru64 Unix objects are PIC. - _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)= - _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' - ;; - *) - case `$CC -V 2>&1 | sed 5q` in - *Sun\ C*) - # Sun C++ 5.9 - _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' - _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' - _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ' - ;; - esac - ;; - esac - ;; - lynxos*) - ;; - m88k*) - ;; - mvs*) - case $cc_basename in - cxx*) - _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-W c,exportall' - ;; - *) - ;; - esac - ;; - netbsd*) - ;; - osf3* | osf4* | osf5*) - case $cc_basename in - KCC*) - _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='--backend -Wl,' - ;; - RCC*) - # Rational C++ 2.4.1 - _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-pic' - ;; - cxx*) - # Digital/Compaq C++ - _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' - # Make sure the PIC flag is empty. It appears that all Alpha - # Linux and Compaq Tru64 Unix objects are PIC. - _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)= - _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' - ;; - *) - ;; - esac - ;; - psos*) - ;; - solaris*) - case $cc_basename in - CC*) - # Sun C++ 4.2, 5.x and Centerline C++ - _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' - _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' - _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ' - ;; - gcx*) - # Green Hills C++ Compiler - _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-PIC' - ;; - *) - ;; - esac - ;; - sunos4*) - case $cc_basename in - CC*) - # Sun C++ 4.x - _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-pic' - _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' - ;; - lcc*) - # Lucid - _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-pic' - ;; - *) - ;; - esac - ;; - tandem*) - case $cc_basename in - NCC*) - # NonStop-UX NCC 3.20 - _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' - ;; - *) - ;; - esac - ;; - sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*) - case $cc_basename in - CC*) - _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' - _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' - _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' - ;; - esac - ;; - vxworks*) - ;; - *) - _LT_AC_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no - ;; - esac - fi -], -[ - if test "$GCC" = yes; then - _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' - _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-static' - - case $host_os in - aix*) - # All AIX code is PIC. - if test "$host_cpu" = ia64; then - # AIX 5 now supports IA64 processor - _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' - fi - ;; - - amigaos*) - # FIXME: we need at least 68020 code to build shared libraries, but - # adding the `-m68020' flag to GCC prevents building anything better, - # like `-m68040'. - _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-m68020 -resident32 -malways-restore-a4' - ;; - - beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) - # PIC is the default for these OSes. - ;; - - mingw* | cygwin* | pw32* | os2*) - # This hack is so that the source file can tell whether it is being - # built for inclusion in a dll (and should export symbols for example). - # Although the cygwin gcc ignores -fPIC, still need this for old-style - # (--disable-auto-import) libraries - _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT' - ;; - - darwin* | rhapsody*) - # PIC is the default on this platform - # Common symbols not allowed in MH_DYLIB files - _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-fno-common' - ;; - - interix[[3-9]]*) - # Interix 3.x gcc -fpic/-fPIC options generate broken code. - # Instead, we relocate shared libraries at runtime. - ;; - - msdosdjgpp*) - # Just because we use GCC doesn't mean we suddenly get shared libraries - # on systems that don't support them. - _LT_AC_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no - enable_shared=no - ;; - - sysv4*MP*) - if test -d /usr/nec; then - _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)=-Kconform_pic - fi - ;; - - hpux*) - # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but - # not for PA HP-UX. - case $host_cpu in - hppa*64*|ia64*) - # +Z the default - ;; - *) - _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' - ;; - esac - ;; - - *) - _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' - ;; - esac - else - # PORTME Check for flag to pass linker flags through the system compiler. - case $host_os in - aix*) - _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' - if test "$host_cpu" = ia64; then - # AIX 5 now supports IA64 processor - _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' - else - _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-bnso -bI:/lib/syscalls.exp' - fi - ;; - darwin*) - # PIC is the default on this platform - # Common symbols not allowed in MH_DYLIB files - case $cc_basename in - xlc*) - _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-qnocommon' - _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' - ;; - esac - ;; - - mingw* | cygwin* | pw32* | os2*) - # This hack is so that the source file can tell whether it is being - # built for inclusion in a dll (and should export symbols for example). - _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT' - ;; - - hpux9* | hpux10* | hpux11*) - _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' - # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but - # not for PA HP-UX. - case $host_cpu in - hppa*64*|ia64*) - # +Z the default - ;; - *) - _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='+Z' - ;; - esac - # Is there a better lt_prog_compiler_static that works with the bundled CC? - _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='${wl}-a ${wl}archive' - ;; - - irix5* | irix6* | nonstopux*) - _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' - # PIC (with -KPIC) is the default. - _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' - ;; - - newsos6) - _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' - _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' - ;; - - linux* | k*bsd*-gnu) - case $cc_basename in - icc* | ecc*) - _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' - _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' - _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-static' - ;; - pgcc* | pgf77* | pgf90* | pgf95*) - # Portland Group compilers (*not* the Pentium gcc compiler, - # which looks to be a dead project) - _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' - _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-fpic' - _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' - ;; - ccc*) - _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' - # All Alpha code is PIC. - _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' - ;; - *) - case `$CC -V 2>&1 | sed 5q` in - *Sun\ C*) - # Sun C 5.9 - _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' - _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' - _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' - ;; - *Sun\ F*) - # Sun Fortran 8.3 passes all unrecognized flags to the linker - _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' - _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' - _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='' - ;; - esac - ;; - esac - ;; - - osf3* | osf4* | osf5*) - _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' - # All OSF/1 code is PIC. - _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' - ;; - - rdos*) - _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' - ;; - - solaris*) - _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' - _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' - case $cc_basename in - f77* | f90* | f95*) - _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ';; - *) - _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,';; - esac - ;; - - sunos4*) - _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ' - _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-PIC' - _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' - ;; - - sysv4 | sysv4.2uw2* | sysv4.3*) - _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' - _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' - _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' - ;; - - sysv4*MP*) - if test -d /usr/nec ;then - _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-Kconform_pic' - _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' - fi - ;; - - sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*) - _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' - _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' - _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' - ;; - - unicos*) - _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' - _LT_AC_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no - ;; - - uts4*) - _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-pic' - _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' - ;; - - *) - _LT_AC_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no - ;; - esac - fi -]) -AC_MSG_RESULT([$_LT_AC_TAGVAR(lt_prog_compiler_pic, $1)]) - -# -# Check to make sure the PIC flag actually works. -# -if test -n "$_LT_AC_TAGVAR(lt_prog_compiler_pic, $1)"; then - AC_LIBTOOL_COMPILER_OPTION([if $compiler PIC flag $_LT_AC_TAGVAR(lt_prog_compiler_pic, $1) works], - _LT_AC_TAGVAR(lt_prog_compiler_pic_works, $1), - [$_LT_AC_TAGVAR(lt_prog_compiler_pic, $1)ifelse([$1],[],[ -DPIC],[ifelse([$1],[CXX],[ -DPIC],[])])], [], - [case $_LT_AC_TAGVAR(lt_prog_compiler_pic, $1) in - "" | " "*) ;; - *) _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)=" $_LT_AC_TAGVAR(lt_prog_compiler_pic, $1)" ;; - esac], - [_LT_AC_TAGVAR(lt_prog_compiler_pic, $1)= - _LT_AC_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no]) -fi -case $host_os in - # For platforms which do not support PIC, -DPIC is meaningless: - *djgpp*) - _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)= - ;; - *) - _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)="$_LT_AC_TAGVAR(lt_prog_compiler_pic, $1)ifelse([$1],[],[ -DPIC],[ifelse([$1],[CXX],[ -DPIC],[])])" - ;; -esac - -# -# Check to make sure the static flag actually works. -# -wl=$_LT_AC_TAGVAR(lt_prog_compiler_wl, $1) eval lt_tmp_static_flag=\"$_LT_AC_TAGVAR(lt_prog_compiler_static, $1)\" -AC_LIBTOOL_LINKER_OPTION([if $compiler static flag $lt_tmp_static_flag works], - _LT_AC_TAGVAR(lt_prog_compiler_static_works, $1), - $lt_tmp_static_flag, - [], - [_LT_AC_TAGVAR(lt_prog_compiler_static, $1)=]) -]) - - -# AC_LIBTOOL_PROG_LD_SHLIBS([TAGNAME]) -# ------------------------------------ -# See if the linker supports building shared libraries. -AC_DEFUN([AC_LIBTOOL_PROG_LD_SHLIBS], -[AC_REQUIRE([LT_AC_PROG_SED])dnl -AC_MSG_CHECKING([whether the $compiler linker ($LD) supports shared libraries]) -ifelse([$1],[CXX],[ - _LT_AC_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' - case $host_os in - aix4* | aix5*) - # If we're using GNU nm, then we don't want the "-C" option. - # -C means demangle to AIX nm, but means don't demangle with GNU nm - if $NM -V 2>&1 | grep 'GNU' > /dev/null; then - _LT_AC_TAGVAR(export_symbols_cmds, $1)='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\[$]2 == "T") || (\[$]2 == "D") || (\[$]2 == "B")) && ([substr](\[$]3,1,1) != ".")) { print \[$]3 } }'\'' | sort -u > $export_symbols' - else - _LT_AC_TAGVAR(export_symbols_cmds, $1)='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\[$]2 == "T") || (\[$]2 == "D") || (\[$]2 == "B")) && ([substr](\[$]3,1,1) != ".")) { print \[$]3 } }'\'' | sort -u > $export_symbols' - fi - ;; - pw32*) - _LT_AC_TAGVAR(export_symbols_cmds, $1)="$ltdll_cmds" - ;; - cygwin* | mingw*) - _LT_AC_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[[BCDGRS]][[ ]]/s/.*[[ ]]\([[^ ]]*\)/\1 DATA/;/^.*[[ ]]__nm__/s/^.*[[ ]]__nm__\([[^ ]]*\)[[ ]][[^ ]]*/\1 DATA/;/^I[[ ]]/d;/^[[AITW]][[ ]]/s/.*[[ ]]//'\'' | sort | uniq > $export_symbols' - ;; - *) - _LT_AC_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' - ;; - esac -],[ - runpath_var= - _LT_AC_TAGVAR(allow_undefined_flag, $1)= - _LT_AC_TAGVAR(enable_shared_with_static_runtimes, $1)=no - _LT_AC_TAGVAR(archive_cmds, $1)= - _LT_AC_TAGVAR(archive_expsym_cmds, $1)= - _LT_AC_TAGVAR(old_archive_From_new_cmds, $1)= - _LT_AC_TAGVAR(old_archive_from_expsyms_cmds, $1)= - _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)= - _LT_AC_TAGVAR(whole_archive_flag_spec, $1)= - _LT_AC_TAGVAR(thread_safe_flag_spec, $1)= - _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)= - _LT_AC_TAGVAR(hardcode_libdir_flag_spec_ld, $1)= - _LT_AC_TAGVAR(hardcode_libdir_separator, $1)= - _LT_AC_TAGVAR(hardcode_direct, $1)=no - _LT_AC_TAGVAR(hardcode_minus_L, $1)=no - _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=unsupported - _LT_AC_TAGVAR(link_all_deplibs, $1)=unknown - _LT_AC_TAGVAR(hardcode_automatic, $1)=no - _LT_AC_TAGVAR(module_cmds, $1)= - _LT_AC_TAGVAR(module_expsym_cmds, $1)= - _LT_AC_TAGVAR(always_export_symbols, $1)=no - _LT_AC_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' - # include_expsyms should be a list of space-separated symbols to be *always* - # included in the symbol list - _LT_AC_TAGVAR(include_expsyms, $1)= - # exclude_expsyms can be an extended regexp of symbols to exclude - # it will be wrapped by ` (' and `)$', so one must not match beginning or - # end of line. Example: `a|bc|.*d.*' will exclude the symbols `a' and `bc', - # as well as any symbol that contains `d'. - _LT_AC_TAGVAR(exclude_expsyms, $1)="_GLOBAL_OFFSET_TABLE_" - # Although _GLOBAL_OFFSET_TABLE_ is a valid symbol C name, most a.out - # platforms (ab)use it in PIC code, but their linkers get confused if - # the symbol is explicitly referenced. Since portable code cannot - # rely on this symbol name, it's probably fine to never include it in - # preloaded symbol tables. - extract_expsyms_cmds= - # Just being paranoid about ensuring that cc_basename is set. - _LT_CC_BASENAME([$compiler]) - case $host_os in - cygwin* | mingw* | pw32*) - # FIXME: the MSVC++ port hasn't been tested in a loooong time - # When not using gcc, we currently assume that we are using - # Microsoft Visual C++. - if test "$GCC" != yes; then - with_gnu_ld=no - fi - ;; - interix*) - # we just hope/assume this is gcc and not c89 (= MSVC++) - with_gnu_ld=yes - ;; - openbsd*) - with_gnu_ld=no - ;; - esac - - _LT_AC_TAGVAR(ld_shlibs, $1)=yes - if test "$with_gnu_ld" = yes; then - # If archive_cmds runs LD, not CC, wlarc should be empty - wlarc='${wl}' - - # Set some defaults for GNU ld with shared library support. These - # are reset later if shared libraries are not supported. Putting them - # here allows them to be overridden if necessary. - runpath_var=LD_RUN_PATH - _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}--rpath ${wl}$libdir' - _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic' - # ancient GNU ld didn't support --whole-archive et. al. - if $LD --help 2>&1 | grep 'no-whole-archive' > /dev/null; then - _LT_AC_TAGVAR(whole_archive_flag_spec, $1)="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' - else - _LT_AC_TAGVAR(whole_archive_flag_spec, $1)= - fi - supports_anon_versioning=no - case `$LD -v 2>/dev/null` in - *\ [[01]].* | *\ 2.[[0-9]].* | *\ 2.10.*) ;; # catch versions < 2.11 - *\ 2.11.93.0.2\ *) supports_anon_versioning=yes ;; # RH7.3 ... - *\ 2.11.92.0.12\ *) supports_anon_versioning=yes ;; # Mandrake 8.2 ... - *\ 2.11.*) ;; # other 2.11 versions - *) supports_anon_versioning=yes ;; - esac - - # See if GNU ld supports shared libraries. - case $host_os in - aix3* | aix4* | aix5*) - # On AIX/PPC, the GNU linker is very broken - if test "$host_cpu" != ia64; then - _LT_AC_TAGVAR(ld_shlibs, $1)=no - cat <&2 - -*** Warning: the GNU linker, at least up to release 2.9.1, is reported -*** to be unable to reliably create shared libraries on AIX. -*** Therefore, libtool is disabling shared libraries support. If you -*** really care for shared libraries, you may want to modify your PATH -*** so that a non-GNU linker is found, and then restart. - -EOF - fi - ;; - - amigaos*) - _LT_AC_TAGVAR(archive_cmds, $1)='$rm $output_objdir/a2ixlibrary.data~$echo "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$echo "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$echo "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$echo "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' - _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' - _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes - - # Samuel A. Falvo II reports - # that the semantics of dynamic libraries on AmigaOS, at least up - # to version 4, is to share data among multiple programs linked - # with the same dynamic library. Since this doesn't match the - # behavior of shared libraries on other platforms, we can't use - # them. - _LT_AC_TAGVAR(ld_shlibs, $1)=no - ;; - - beos*) - if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then - _LT_AC_TAGVAR(allow_undefined_flag, $1)=unsupported - # Joseph Beckenbach says some releases of gcc - # support --undefined. This deserves some investigation. FIXME - _LT_AC_TAGVAR(archive_cmds, $1)='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' - else - _LT_AC_TAGVAR(ld_shlibs, $1)=no - fi - ;; - - cygwin* | mingw* | pw32*) - # _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1) is actually meaningless, - # as there is no search path for DLLs. - _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' - _LT_AC_TAGVAR(allow_undefined_flag, $1)=unsupported - _LT_AC_TAGVAR(always_export_symbols, $1)=no - _LT_AC_TAGVAR(enable_shared_with_static_runtimes, $1)=yes - _LT_AC_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[[BCDGRS]][[ ]]/s/.*[[ ]]\([[^ ]]*\)/\1 DATA/'\'' -e '\''/^[[AITW]][[ ]]/s/.*[[ ]]//'\'' | sort | uniq > $export_symbols' - - if $LD --help 2>&1 | grep 'auto-import' > /dev/null; then - _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' - # If the export-symbols file already is a .def file (1st line - # is EXPORTS), use it as is; otherwise, prepend... - _LT_AC_TAGVAR(archive_expsym_cmds, $1)='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then - cp $export_symbols $output_objdir/$soname.def; - else - echo EXPORTS > $output_objdir/$soname.def; - cat $export_symbols >> $output_objdir/$soname.def; - fi~ - $CC -shared $output_objdir/$soname.def $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' - else - _LT_AC_TAGVAR(ld_shlibs, $1)=no - fi - ;; - - interix[[3-9]]*) - _LT_AC_TAGVAR(hardcode_direct, $1)=no - _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no - _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' - _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' - # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc. - # Instead, shared libraries are loaded at an image base (0x10000000 by - # default) and relocated if they conflict, which is a slow very memory - # consuming and fragmenting process. To avoid this, we pick a random, - # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link - # time. Moving up from 0x10000000 also allows more sbrk(2) space. - _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' - _LT_AC_TAGVAR(archive_expsym_cmds, $1)='sed "s,^,_," $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--retain-symbols-file,$output_objdir/$soname.expsym ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' - ;; - - gnu* | linux* | k*bsd*-gnu) - if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then - tmp_addflag= - case $cc_basename,$host_cpu in - pgcc*) # Portland Group C compiler - _LT_AC_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $echo \"$new_convenience\"` ${wl}--no-whole-archive' - tmp_addflag=' $pic_flag' - ;; - pgf77* | pgf90* | pgf95*) # Portland Group f77 and f90 compilers - _LT_AC_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $echo \"$new_convenience\"` ${wl}--no-whole-archive' - tmp_addflag=' $pic_flag -Mnomain' ;; - ecc*,ia64* | icc*,ia64*) # Intel C compiler on ia64 - tmp_addflag=' -i_dynamic' ;; - efc*,ia64* | ifort*,ia64*) # Intel Fortran compiler on ia64 - tmp_addflag=' -i_dynamic -nofor_main' ;; - ifc* | ifort*) # Intel Fortran compiler - tmp_addflag=' -nofor_main' ;; - esac - case `$CC -V 2>&1 | sed 5q` in - *Sun\ C*) # Sun C 5.9 - _LT_AC_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; $echo \"$new_convenience\"` ${wl}--no-whole-archive' - tmp_sharedflag='-G' ;; - *Sun\ F*) # Sun Fortran 8.3 - tmp_sharedflag='-G' ;; - *) - tmp_sharedflag='-shared' ;; - esac - _LT_AC_TAGVAR(archive_cmds, $1)='$CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' - - if test $supports_anon_versioning = yes; then - _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$echo "{ global:" > $output_objdir/$libname.ver~ - cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ - $echo "local: *; };" >> $output_objdir/$libname.ver~ - $CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib' - fi - else - _LT_AC_TAGVAR(ld_shlibs, $1)=no - fi - ;; - - netbsd*) - if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then - _LT_AC_TAGVAR(archive_cmds, $1)='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib' - wlarc= - else - _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' - _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' - fi - ;; - - solaris*) - if $LD -v 2>&1 | grep 'BFD 2\.8' > /dev/null; then - _LT_AC_TAGVAR(ld_shlibs, $1)=no - cat <&2 - -*** Warning: The releases 2.8.* of the GNU linker cannot reliably -*** create shared libraries on Solaris systems. Therefore, libtool -*** is disabling shared libraries support. We urge you to upgrade GNU -*** binutils to release 2.9.1 or newer. Another option is to modify -*** your PATH or compiler configuration so that the native linker is -*** used, and then restart. - -EOF - elif $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then - _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' - _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' - else - _LT_AC_TAGVAR(ld_shlibs, $1)=no - fi - ;; - - sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX*) - case `$LD -v 2>&1` in - *\ [[01]].* | *\ 2.[[0-9]].* | *\ 2.1[[0-5]].*) - _LT_AC_TAGVAR(ld_shlibs, $1)=no - cat <<_LT_EOF 1>&2 - -*** Warning: Releases of the GNU linker prior to 2.16.91.0.3 can not -*** reliably create shared libraries on SCO systems. Therefore, libtool -*** is disabling shared libraries support. We urge you to upgrade GNU -*** binutils to release 2.16.91.0.3 or newer. Another option is to modify -*** your PATH or compiler configuration so that the native linker is -*** used, and then restart. - -_LT_EOF - ;; - *) - if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then - _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='`test -z "$SCOABSPATH" && echo ${wl}-rpath,$libdir`' - _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib' - _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname,\${SCOABSPATH:+${install_libdir}/}$soname,-retain-symbols-file,$export_symbols -o $lib' - else - _LT_AC_TAGVAR(ld_shlibs, $1)=no - fi - ;; - esac - ;; - - sunos4*) - _LT_AC_TAGVAR(archive_cmds, $1)='$LD -assert pure-text -Bshareable -o $lib $libobjs $deplibs $linker_flags' - wlarc= - _LT_AC_TAGVAR(hardcode_direct, $1)=yes - _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no - ;; - - *) - if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then - _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' - _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' - else - _LT_AC_TAGVAR(ld_shlibs, $1)=no - fi - ;; - esac - - if test "$_LT_AC_TAGVAR(ld_shlibs, $1)" = no; then - runpath_var= - _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)= - _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)= - _LT_AC_TAGVAR(whole_archive_flag_spec, $1)= - fi - else - # PORTME fill in a description of your system's linker (not GNU ld) - case $host_os in - aix3*) - _LT_AC_TAGVAR(allow_undefined_flag, $1)=unsupported - _LT_AC_TAGVAR(always_export_symbols, $1)=yes - _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$LD -o $output_objdir/$soname $libobjs $deplibs $linker_flags -bE:$export_symbols -T512 -H512 -bM:SRE~$AR $AR_FLAGS $lib $output_objdir/$soname' - # Note: this linker hardcodes the directories in LIBPATH if there - # are no directories specified by -L. - _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes - if test "$GCC" = yes && test -z "$lt_prog_compiler_static"; then - # Neither direct hardcoding nor static linking is supported with a - # broken collect2. - _LT_AC_TAGVAR(hardcode_direct, $1)=unsupported - fi - ;; - - aix4* | aix5*) - if test "$host_cpu" = ia64; then - # On IA64, the linker does run time linking by default, so we don't - # have to do anything special. - aix_use_runtimelinking=no - exp_sym_flag='-Bexport' - no_entry_flag="" - else - # If we're using GNU nm, then we don't want the "-C" option. - # -C means demangle to AIX nm, but means don't demangle with GNU nm - if $NM -V 2>&1 | grep 'GNU' > /dev/null; then - _LT_AC_TAGVAR(export_symbols_cmds, $1)='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\[$]2 == "T") || (\[$]2 == "D") || (\[$]2 == "B")) && ([substr](\[$]3,1,1) != ".")) { print \[$]3 } }'\'' | sort -u > $export_symbols' - else - _LT_AC_TAGVAR(export_symbols_cmds, $1)='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\[$]2 == "T") || (\[$]2 == "D") || (\[$]2 == "B")) && ([substr](\[$]3,1,1) != ".")) { print \[$]3 } }'\'' | sort -u > $export_symbols' - fi - aix_use_runtimelinking=no - - # Test if we are trying to use run time linking or normal - # AIX style linking. If -brtl is somewhere in LDFLAGS, we - # need to do runtime linking. - case $host_os in aix4.[[23]]|aix4.[[23]].*|aix5*) - for ld_flag in $LDFLAGS; do - if (test $ld_flag = "-brtl" || test $ld_flag = "-Wl,-brtl"); then - aix_use_runtimelinking=yes - break - fi - done - ;; - esac - - exp_sym_flag='-bexport' - no_entry_flag='-bnoentry' - fi - - # When large executables or shared objects are built, AIX ld can - # have problems creating the table of contents. If linking a library - # or program results in "error TOC overflow" add -mminimal-toc to - # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not - # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS. - - _LT_AC_TAGVAR(archive_cmds, $1)='' - _LT_AC_TAGVAR(hardcode_direct, $1)=yes - _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=':' - _LT_AC_TAGVAR(link_all_deplibs, $1)=yes - - if test "$GCC" = yes; then - case $host_os in aix4.[[012]]|aix4.[[012]].*) - # We only want to do this on AIX 4.2 and lower, the check - # below for broken collect2 doesn't work under 4.3+ - collect2name=`${CC} -print-prog-name=collect2` - if test -f "$collect2name" && \ - strings "$collect2name" | grep resolve_lib_name >/dev/null - then - # We have reworked collect2 - : - else - # We have old collect2 - _LT_AC_TAGVAR(hardcode_direct, $1)=unsupported - # It fails to find uninstalled libraries when the uninstalled - # path is not listed in the libpath. Setting hardcode_minus_L - # to unsupported forces relinking - _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes - _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' - _LT_AC_TAGVAR(hardcode_libdir_separator, $1)= - fi - ;; - esac - shared_flag='-shared' - if test "$aix_use_runtimelinking" = yes; then - shared_flag="$shared_flag "'${wl}-G' - fi - else - # not using gcc - if test "$host_cpu" = ia64; then - # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release - # chokes on -Wl,-G. The following line is correct: - shared_flag='-G' - else - if test "$aix_use_runtimelinking" = yes; then - shared_flag='${wl}-G' - else - shared_flag='${wl}-bM:SRE' - fi - fi - fi - - # It seems that -bexpall does not export symbols beginning with - # underscore (_), so it is better to generate a list of symbols to export. - _LT_AC_TAGVAR(always_export_symbols, $1)=yes - if test "$aix_use_runtimelinking" = yes; then - # Warning - without using the other runtime loading flags (-brtl), - # -berok will link without error, but may produce a broken library. - _LT_AC_TAGVAR(allow_undefined_flag, $1)='-berok' - # Determine the default libpath from the value encoded in an empty executable. - _LT_AC_SYS_LIBPATH_AIX - _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath" - _LT_AC_TAGVAR(archive_expsym_cmds, $1)="\$CC"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then echo "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag" - else - if test "$host_cpu" = ia64; then - _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R $libdir:/usr/lib:/lib' - _LT_AC_TAGVAR(allow_undefined_flag, $1)="-z nodefs" - _LT_AC_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$exp_sym_flag:\$export_symbols" - else - # Determine the default libpath from the value encoded in an empty executable. - _LT_AC_SYS_LIBPATH_AIX - _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath" - # Warning - without using the other run time loading flags, - # -berok will link without error, but may produce a broken library. - _LT_AC_TAGVAR(no_undefined_flag, $1)=' ${wl}-bernotok' - _LT_AC_TAGVAR(allow_undefined_flag, $1)=' ${wl}-berok' - # Exported symbols can be pulled into shared objects from archives - _LT_AC_TAGVAR(whole_archive_flag_spec, $1)='$convenience' - _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=yes - # This is similar to how AIX traditionally builds its shared libraries. - _LT_AC_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs ${wl}-bnoentry $compiler_flags ${wl}-bE:$export_symbols${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname' - fi - fi - ;; - - amigaos*) - _LT_AC_TAGVAR(archive_cmds, $1)='$rm $output_objdir/a2ixlibrary.data~$echo "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$echo "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$echo "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$echo "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' - _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' - _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes - # see comment about different semantics on the GNU ld section - _LT_AC_TAGVAR(ld_shlibs, $1)=no - ;; - - bsdi[[45]]*) - _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)=-rdynamic - ;; - - cygwin* | mingw* | pw32*) - # When not using gcc, we currently assume that we are using - # Microsoft Visual C++. - # hardcode_libdir_flag_spec is actually meaningless, as there is - # no search path for DLLs. - _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)=' ' - _LT_AC_TAGVAR(allow_undefined_flag, $1)=unsupported - # Tell ltmain to make .lib files, not .a files. - libext=lib - # Tell ltmain to make .dll files, not .so files. - shrext_cmds=".dll" - # FIXME: Setting linknames here is a bad hack. - _LT_AC_TAGVAR(archive_cmds, $1)='$CC -o $lib $libobjs $compiler_flags `echo "$deplibs" | $SED -e '\''s/ -lc$//'\''` -link -dll~linknames=' - # The linker will automatically build a .lib file if we build a DLL. - _LT_AC_TAGVAR(old_archive_From_new_cmds, $1)='true' - # FIXME: Should let the user specify the lib program. - _LT_AC_TAGVAR(old_archive_cmds, $1)='lib -OUT:$oldlib$oldobjs$old_deplibs' - _LT_AC_TAGVAR(fix_srcfile_path, $1)='`cygpath -w "$srcfile"`' - _LT_AC_TAGVAR(enable_shared_with_static_runtimes, $1)=yes - ;; - - darwin* | rhapsody*) - case $host_os in - rhapsody* | darwin1.[[012]]) - _LT_AC_TAGVAR(allow_undefined_flag, $1)='${wl}-undefined ${wl}suppress' - ;; - *) # Darwin 1.3 on - if test -z ${MACOSX_DEPLOYMENT_TARGET} ; then - _LT_AC_TAGVAR(allow_undefined_flag, $1)='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' - else - case ${MACOSX_DEPLOYMENT_TARGET} in - 10.[[012]]) - _LT_AC_TAGVAR(allow_undefined_flag, $1)='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' - ;; - 10.*) - _LT_AC_TAGVAR(allow_undefined_flag, $1)='${wl}-undefined ${wl}dynamic_lookup' - ;; - esac - fi - ;; - esac - _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=no - _LT_AC_TAGVAR(hardcode_direct, $1)=no - _LT_AC_TAGVAR(hardcode_automatic, $1)=yes - _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=unsupported - _LT_AC_TAGVAR(whole_archive_flag_spec, $1)='' - _LT_AC_TAGVAR(link_all_deplibs, $1)=yes - if test "$GCC" = yes ; then - output_verbose_link_cmd='echo' - _LT_AC_TAGVAR(archive_cmds, $1)='$CC -dynamiclib $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags -install_name $rpath/$soname $verstring' - _LT_AC_TAGVAR(module_cmds, $1)='$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags' - # Don't fix this by using the ld -exported_symbols_list flag, it doesn't exist in older darwin lds - _LT_AC_TAGVAR(archive_expsym_cmds, $1)='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -dynamiclib $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags -install_name $rpath/$soname $verstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' - _LT_AC_TAGVAR(module_expsym_cmds, $1)='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' - else - case $cc_basename in - xlc*) - output_verbose_link_cmd='echo' - _LT_AC_TAGVAR(archive_cmds, $1)='$CC -qmkshrobj $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-install_name ${wl}`echo $rpath/$soname` $xlcverstring' - _LT_AC_TAGVAR(module_cmds, $1)='$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags' - # Don't fix this by using the ld -exported_symbols_list flag, it doesn't exist in older darwin lds - _LT_AC_TAGVAR(archive_expsym_cmds, $1)='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -qmkshrobj $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-install_name ${wl}$rpath/$soname $xlcverstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' - _LT_AC_TAGVAR(module_expsym_cmds, $1)='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' - ;; - *) - _LT_AC_TAGVAR(ld_shlibs, $1)=no - ;; - esac - fi - ;; - - dgux*) - _LT_AC_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' - _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' - _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no - ;; - - freebsd1*) - _LT_AC_TAGVAR(ld_shlibs, $1)=no - ;; - - # FreeBSD 2.2.[012] allows us to include c++rt0.o to get C++ constructor - # support. Future versions do this automatically, but an explicit c++rt0.o - # does not break anything, and helps significantly (at the cost of a little - # extra space). - freebsd2.2*) - _LT_AC_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags /usr/lib/c++rt0.o' - _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' - _LT_AC_TAGVAR(hardcode_direct, $1)=yes - _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no - ;; - - # Unfortunately, older versions of FreeBSD 2 do not have this feature. - freebsd2*) - _LT_AC_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' - _LT_AC_TAGVAR(hardcode_direct, $1)=yes - _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes - _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no - ;; - - # FreeBSD 3 and greater uses gcc -shared to do shared libraries. - freebsd* | dragonfly*) - _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -o $lib $libobjs $deplibs $compiler_flags' - _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' - _LT_AC_TAGVAR(hardcode_direct, $1)=yes - _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no - ;; - - hpux9*) - if test "$GCC" = yes; then - _LT_AC_TAGVAR(archive_cmds, $1)='$rm $output_objdir/$soname~$CC -shared -fPIC ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' - else - _LT_AC_TAGVAR(archive_cmds, $1)='$rm $output_objdir/$soname~$LD -b +b $install_libdir -o $output_objdir/$soname $libobjs $deplibs $linker_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' - fi - _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir' - _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=: - _LT_AC_TAGVAR(hardcode_direct, $1)=yes - - # hardcode_minus_L: Not really in the search PATH, - # but as the default location of the library. - _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes - _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' - ;; - - hpux10*) - if test "$GCC" = yes -a "$with_gnu_ld" = no; then - _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' - else - _LT_AC_TAGVAR(archive_cmds, $1)='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags' - fi - if test "$with_gnu_ld" = no; then - _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir' - _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=: - - _LT_AC_TAGVAR(hardcode_direct, $1)=yes - _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' - - # hardcode_minus_L: Not really in the search PATH, - # but as the default location of the library. - _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes - fi - ;; - - hpux11*) - if test "$GCC" = yes -a "$with_gnu_ld" = no; then - case $host_cpu in - hppa*64*) - _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' - ;; - ia64*) - _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' - ;; - *) - _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' - ;; - esac - else - case $host_cpu in - hppa*64*) - _LT_AC_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' - ;; - ia64*) - _LT_AC_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' - ;; - *) - _LT_AC_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' - ;; - esac - fi - if test "$with_gnu_ld" = no; then - _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir' - _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=: - - case $host_cpu in - hppa*64*|ia64*) - _LT_AC_TAGVAR(hardcode_libdir_flag_spec_ld, $1)='+b $libdir' - _LT_AC_TAGVAR(hardcode_direct, $1)=no - _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no - ;; - *) - _LT_AC_TAGVAR(hardcode_direct, $1)=yes - _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' - - # hardcode_minus_L: Not really in the search PATH, - # but as the default location of the library. - _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes - ;; - esac - fi - ;; - - irix5* | irix6* | nonstopux*) - if test "$GCC" = yes; then - _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' - else - _LT_AC_TAGVAR(archive_cmds, $1)='$LD -shared $libobjs $deplibs $linker_flags -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib' - _LT_AC_TAGVAR(hardcode_libdir_flag_spec_ld, $1)='-rpath $libdir' - fi - _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' - _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=: - _LT_AC_TAGVAR(link_all_deplibs, $1)=yes - ;; - - netbsd*) - if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then - _LT_AC_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' # a.out - else - _LT_AC_TAGVAR(archive_cmds, $1)='$LD -shared -o $lib $libobjs $deplibs $linker_flags' # ELF - fi - _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' - _LT_AC_TAGVAR(hardcode_direct, $1)=yes - _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no - ;; - - newsos6) - _LT_AC_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' - _LT_AC_TAGVAR(hardcode_direct, $1)=yes - _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' - _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=: - _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no - ;; - - openbsd*) - if test -f /usr/libexec/ld.so; then - _LT_AC_TAGVAR(hardcode_direct, $1)=yes - _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no - if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then - _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' - _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-retain-symbols-file,$export_symbols' - _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' - _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' - else - case $host_os in - openbsd[[01]].* | openbsd2.[[0-7]] | openbsd2.[[0-7]].*) - _LT_AC_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' - _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' - ;; - *) - _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' - _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' - ;; - esac - fi - else - _LT_AC_TAGVAR(ld_shlibs, $1)=no - fi - ;; - - os2*) - _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' - _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes - _LT_AC_TAGVAR(allow_undefined_flag, $1)=unsupported - _LT_AC_TAGVAR(archive_cmds, $1)='$echo "LIBRARY $libname INITINSTANCE" > $output_objdir/$libname.def~$echo "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~$echo DATA >> $output_objdir/$libname.def~$echo " SINGLE NONSHARED" >> $output_objdir/$libname.def~$echo EXPORTS >> $output_objdir/$libname.def~emxexp $libobjs >> $output_objdir/$libname.def~$CC -Zdll -Zcrtdll -o $lib $libobjs $deplibs $compiler_flags $output_objdir/$libname.def' - _LT_AC_TAGVAR(old_archive_From_new_cmds, $1)='emximp -o $output_objdir/$libname.a $output_objdir/$libname.def' - ;; - - osf3*) - if test "$GCC" = yes; then - _LT_AC_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*' - _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' - else - _LT_AC_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*' - _LT_AC_TAGVAR(archive_cmds, $1)='$LD -shared${allow_undefined_flag} $libobjs $deplibs $linker_flags -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib' - fi - _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' - _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=: - ;; - - osf4* | osf5*) # as osf3* with the addition of -msym flag - if test "$GCC" = yes; then - _LT_AC_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*' - _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' - _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' - else - _LT_AC_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*' - _LT_AC_TAGVAR(archive_cmds, $1)='$LD -shared${allow_undefined_flag} $libobjs $deplibs $linker_flags -msym -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib' - _LT_AC_TAGVAR(archive_expsym_cmds, $1)='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done; echo "-hidden">> $lib.exp~ - $LD -shared${allow_undefined_flag} -input $lib.exp $linker_flags $libobjs $deplibs -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib~$rm $lib.exp' - - # Both c and cxx compiler support -rpath directly - _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir' - fi - _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=: - ;; - - solaris*) - _LT_AC_TAGVAR(no_undefined_flag, $1)=' -z text' - if test "$GCC" = yes; then - wlarc='${wl}' - _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' - _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~ - $CC -shared ${wl}-M ${wl}$lib.exp ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags~$rm $lib.exp' - else - wlarc='' - _LT_AC_TAGVAR(archive_cmds, $1)='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linker_flags' - _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~ - $LD -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$rm $lib.exp' - fi - _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' - _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no - case $host_os in - solaris2.[[0-5]] | solaris2.[[0-5]].*) ;; - *) - # The compiler driver will combine and reorder linker options, - # but understands `-z linker_flag'. GCC discards it without `$wl', - # but is careful enough not to reorder. - # Supported since Solaris 2.6 (maybe 2.5.1?) - if test "$GCC" = yes; then - _LT_AC_TAGVAR(whole_archive_flag_spec, $1)='${wl}-z ${wl}allextract$convenience ${wl}-z ${wl}defaultextract' - else - _LT_AC_TAGVAR(whole_archive_flag_spec, $1)='-z allextract$convenience -z defaultextract' - fi - ;; - esac - _LT_AC_TAGVAR(link_all_deplibs, $1)=yes - ;; - - sunos4*) - if test "x$host_vendor" = xsequent; then - # Use $CC to link under sequent, because it throws in some extra .o - # files that make .init and .fini sections work. - _LT_AC_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h $soname -o $lib $libobjs $deplibs $compiler_flags' - else - _LT_AC_TAGVAR(archive_cmds, $1)='$LD -assert pure-text -Bstatic -o $lib $libobjs $deplibs $linker_flags' - fi - _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' - _LT_AC_TAGVAR(hardcode_direct, $1)=yes - _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes - _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no - ;; - - sysv4) - case $host_vendor in - sni) - _LT_AC_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' - _LT_AC_TAGVAR(hardcode_direct, $1)=yes # is this really true??? - ;; - siemens) - ## LD is ld it makes a PLAMLIB - ## CC just makes a GrossModule. - _LT_AC_TAGVAR(archive_cmds, $1)='$LD -G -o $lib $libobjs $deplibs $linker_flags' - _LT_AC_TAGVAR(reload_cmds, $1)='$CC -r -o $output$reload_objs' - _LT_AC_TAGVAR(hardcode_direct, $1)=no - ;; - motorola) - _LT_AC_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' - _LT_AC_TAGVAR(hardcode_direct, $1)=no #Motorola manual says yes, but my tests say they lie - ;; - esac - runpath_var='LD_RUN_PATH' - _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no - ;; - - sysv4.3*) - _LT_AC_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' - _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no - _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='-Bexport' - ;; - - sysv4*MP*) - if test -d /usr/nec; then - _LT_AC_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' - _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no - runpath_var=LD_RUN_PATH - hardcode_runpath_var=yes - _LT_AC_TAGVAR(ld_shlibs, $1)=yes - fi - ;; - - sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[[01]].[[10]]* | unixware7* | sco3.2v5.0.[[024]]*) - _LT_AC_TAGVAR(no_undefined_flag, $1)='${wl}-z,text' - _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=no - _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no - runpath_var='LD_RUN_PATH' - - if test "$GCC" = yes; then - _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - else - _LT_AC_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - fi - ;; - - sysv5* | sco3.2v5* | sco5v6*) - # Note: We can NOT use -z defs as we might desire, because we do not - # link with -lc, and that would cause any symbols used from libc to - # always be unresolved, which means just about no library would - # ever link correctly. If we're not using GNU ld we use -z text - # though, which does catch some bad symbols but isn't as heavy-handed - # as -z defs. - _LT_AC_TAGVAR(no_undefined_flag, $1)='${wl}-z,text' - _LT_AC_TAGVAR(allow_undefined_flag, $1)='${wl}-z,nodefs' - _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=no - _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no - _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='`test -z "$SCOABSPATH" && echo ${wl}-R,$libdir`' - _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=':' - _LT_AC_TAGVAR(link_all_deplibs, $1)=yes - _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-Bexport' - runpath_var='LD_RUN_PATH' - - if test "$GCC" = yes; then - _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags' - _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags' - else - _LT_AC_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags' - _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags' - fi - ;; - - uts4*) - _LT_AC_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' - _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' - _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no - ;; - - *) - _LT_AC_TAGVAR(ld_shlibs, $1)=no - ;; - esac - fi -]) -AC_MSG_RESULT([$_LT_AC_TAGVAR(ld_shlibs, $1)]) -test "$_LT_AC_TAGVAR(ld_shlibs, $1)" = no && can_build_shared=no - -# -# Do we need to explicitly link libc? -# -case "x$_LT_AC_TAGVAR(archive_cmds_need_lc, $1)" in -x|xyes) - # Assume -lc should be added - _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=yes - - if test "$enable_shared" = yes && test "$GCC" = yes; then - case $_LT_AC_TAGVAR(archive_cmds, $1) in - *'~'*) - # FIXME: we may have to deal with multi-command sequences. - ;; - '$CC '*) - # Test whether the compiler implicitly links with -lc since on some - # systems, -lgcc has to come before -lc. If gcc already passes -lc - # to ld, don't add -lc before -lgcc. - AC_MSG_CHECKING([whether -lc should be explicitly linked in]) - $rm conftest* - echo "$lt_simple_compile_test_code" > conftest.$ac_ext - - if AC_TRY_EVAL(ac_compile) 2>conftest.err; then - soname=conftest - lib=conftest - libobjs=conftest.$ac_objext - deplibs= - wl=$_LT_AC_TAGVAR(lt_prog_compiler_wl, $1) - pic_flag=$_LT_AC_TAGVAR(lt_prog_compiler_pic, $1) - compiler_flags=-v - linker_flags=-v - verstring= - output_objdir=. - libname=conftest - lt_save_allow_undefined_flag=$_LT_AC_TAGVAR(allow_undefined_flag, $1) - _LT_AC_TAGVAR(allow_undefined_flag, $1)= - if AC_TRY_EVAL(_LT_AC_TAGVAR(archive_cmds, $1) 2\>\&1 \| grep \" -lc \" \>/dev/null 2\>\&1) - then - _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=no - else - _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=yes - fi - _LT_AC_TAGVAR(allow_undefined_flag, $1)=$lt_save_allow_undefined_flag - else - cat conftest.err 1>&5 - fi - $rm conftest* - AC_MSG_RESULT([$_LT_AC_TAGVAR(archive_cmds_need_lc, $1)]) - ;; - esac - fi - ;; -esac -])# AC_LIBTOOL_PROG_LD_SHLIBS - - -# _LT_AC_FILE_LTDLL_C -# ------------------- -# Be careful that the start marker always follows a newline. -AC_DEFUN([_LT_AC_FILE_LTDLL_C], [ -# /* ltdll.c starts here */ -# #define WIN32_LEAN_AND_MEAN -# #include -# #undef WIN32_LEAN_AND_MEAN -# #include -# -# #ifndef __CYGWIN__ -# # ifdef __CYGWIN32__ -# # define __CYGWIN__ __CYGWIN32__ -# # endif -# #endif -# -# #ifdef __cplusplus -# extern "C" { -# #endif -# BOOL APIENTRY DllMain (HINSTANCE hInst, DWORD reason, LPVOID reserved); -# #ifdef __cplusplus -# } -# #endif -# -# #ifdef __CYGWIN__ -# #include -# DECLARE_CYGWIN_DLL( DllMain ); -# #endif -# HINSTANCE __hDllInstance_base; -# -# BOOL APIENTRY -# DllMain (HINSTANCE hInst, DWORD reason, LPVOID reserved) -# { -# __hDllInstance_base = hInst; -# return TRUE; -# } -# /* ltdll.c ends here */ -])# _LT_AC_FILE_LTDLL_C - - -# _LT_AC_TAGVAR(VARNAME, [TAGNAME]) -# --------------------------------- -AC_DEFUN([_LT_AC_TAGVAR], [ifelse([$2], [], [$1], [$1_$2])]) - - -# old names -AC_DEFUN([AM_PROG_LIBTOOL], [AC_PROG_LIBTOOL]) -AC_DEFUN([AM_ENABLE_SHARED], [AC_ENABLE_SHARED($@)]) -AC_DEFUN([AM_ENABLE_STATIC], [AC_ENABLE_STATIC($@)]) -AC_DEFUN([AM_DISABLE_SHARED], [AC_DISABLE_SHARED($@)]) -AC_DEFUN([AM_DISABLE_STATIC], [AC_DISABLE_STATIC($@)]) -AC_DEFUN([AM_PROG_LD], [AC_PROG_LD]) -AC_DEFUN([AM_PROG_NM], [AC_PROG_NM]) - -# This is just to silence aclocal about the macro not being used -ifelse([AC_DISABLE_FAST_INSTALL]) - -AC_DEFUN([LT_AC_PROG_GCJ], -[AC_CHECK_TOOL(GCJ, gcj, no) - test "x${GCJFLAGS+set}" = xset || GCJFLAGS="-g -O2" - AC_SUBST(GCJFLAGS) -]) - -AC_DEFUN([LT_AC_PROG_RC], -[AC_CHECK_TOOL(RC, windres, no) -]) - - -# Cheap backport of AS_EXECUTABLE_P and required macros -# from Autoconf 2.59; we should not use $as_executable_p directly. - -# _AS_TEST_PREPARE -# ---------------- -m4_ifndef([_AS_TEST_PREPARE], -[m4_defun([_AS_TEST_PREPARE], -[if test -x / >/dev/null 2>&1; then - as_executable_p='test -x' -else - as_executable_p='test -f' -fi -])])# _AS_TEST_PREPARE - -# AS_EXECUTABLE_P -# --------------- -# Check whether a file is executable. -m4_ifndef([AS_EXECUTABLE_P], -[m4_defun([AS_EXECUTABLE_P], -[AS_REQUIRE([_AS_TEST_PREPARE])dnl -$as_executable_p $1[]dnl -])])# AS_EXECUTABLE_P - -# NOTE: This macro has been submitted for inclusion into # -# GNU Autoconf as AC_PROG_SED. When it is available in # -# a released version of Autoconf we should remove this # -# macro and use it instead. # -# LT_AC_PROG_SED -# -------------- -# Check for a fully-functional sed program, that truncates -# as few characters as possible. Prefer GNU sed if found. -AC_DEFUN([LT_AC_PROG_SED], -[AC_MSG_CHECKING([for a sed that does not truncate output]) -AC_CACHE_VAL(lt_cv_path_SED, -[# Loop through the user's path and test for sed and gsed. -# Then use that list of sed's as ones to test for truncation. -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for lt_ac_prog in sed gsed; do - for ac_exec_ext in '' $ac_executable_extensions; do - if AS_EXECUTABLE_P(["$as_dir/$lt_ac_prog$ac_exec_ext"]); then - lt_ac_sed_list="$lt_ac_sed_list $as_dir/$lt_ac_prog$ac_exec_ext" - fi - done - done -done -IFS=$as_save_IFS -lt_ac_max=0 -lt_ac_count=0 -# Add /usr/xpg4/bin/sed as it is typically found on Solaris -# along with /bin/sed that truncates output. -for lt_ac_sed in $lt_ac_sed_list /usr/xpg4/bin/sed; do - test ! -f $lt_ac_sed && continue - cat /dev/null > conftest.in - lt_ac_count=0 - echo $ECHO_N "0123456789$ECHO_C" >conftest.in - # Check for GNU sed and select it if it is found. - if "$lt_ac_sed" --version 2>&1 < /dev/null | grep 'GNU' > /dev/null; then - lt_cv_path_SED=$lt_ac_sed - break - fi - while true; do - cat conftest.in conftest.in >conftest.tmp - mv conftest.tmp conftest.in - cp conftest.in conftest.nl - echo >>conftest.nl - $lt_ac_sed -e 's/a$//' < conftest.nl >conftest.out || break - cmp -s conftest.out conftest.nl || break - # 10000 chars as input seems more than enough - test $lt_ac_count -gt 10 && break - lt_ac_count=`expr $lt_ac_count + 1` - if test $lt_ac_count -gt $lt_ac_max; then - lt_ac_max=$lt_ac_count - lt_cv_path_SED=$lt_ac_sed - fi - done -done -]) -SED=$lt_cv_path_SED -AC_SUBST([SED]) -AC_MSG_RESULT([$SED]) -]) - -# Copyright (C) 2002, 2003, 2005, 2006 Free Software Foundation, Inc. +# Copyright (C) 2002, 2003, 2005, 2006, 2007, 2008 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -6596,10 +31,10 @@ # generated from the m4 files accompanying Automake X.Y. # (This private macro should not be called outside this file.) AC_DEFUN([AM_AUTOMAKE_VERSION], -[am__api_version='1.10' +[am__api_version='1.11' dnl Some users find AM_AUTOMAKE_VERSION and mistake it for a way to dnl require some minimum version. Point them to the right macro. -m4_if([$1], [1.10], [], +m4_if([$1], [1.11.1], [], [AC_FATAL([Do not call $0, use AM_INIT_AUTOMAKE([$1]).])])dnl ]) @@ -6613,10 +48,12 @@ # AM_SET_CURRENT_AUTOMAKE_VERSION # ------------------------------- # Call AM_AUTOMAKE_VERSION and AM_AUTOMAKE_VERSION so they can be traced. -# This function is AC_REQUIREd by AC_INIT_AUTOMAKE. +# This function is AC_REQUIREd by AM_INIT_AUTOMAKE. AC_DEFUN([AM_SET_CURRENT_AUTOMAKE_VERSION], -[AM_AUTOMAKE_VERSION([1.10])dnl -_AM_AUTOCONF_VERSION(m4_PACKAGE_VERSION)]) +[AM_AUTOMAKE_VERSION([1.11.1])dnl +m4_ifndef([AC_AUTOCONF_VERSION], + [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl +_AM_AUTOCONF_VERSION(m4_defn([AC_AUTOCONF_VERSION]))]) # Figure out how to run the assembler. -*- Autoconf -*- @@ -6695,14 +132,14 @@ # AM_CONDITIONAL -*- Autoconf -*- -# Copyright (C) 1997, 2000, 2001, 2003, 2004, 2005, 2006 +# Copyright (C) 1997, 2000, 2001, 2003, 2004, 2005, 2006, 2008 # Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. -# serial 8 +# serial 9 # AM_CONDITIONAL(NAME, SHELL-CONDITION) # ------------------------------------- @@ -6715,6 +152,7 @@ AC_SUBST([$1_FALSE])dnl _AM_SUBST_NOTMAKE([$1_TRUE])dnl _AM_SUBST_NOTMAKE([$1_FALSE])dnl +m4_define([_AM_COND_VALUE_$1], [$2])dnl if $2; then $1_TRUE= $1_FALSE='#' @@ -6728,14 +166,14 @@ Usually this means the macro was only invoked conditionally.]]) fi])]) -# Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006 +# Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2009 # Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. -# serial 9 +# serial 10 # There are a few dirty hacks below to avoid letting `AC_PROG_CC' be # written in clear, in which case automake, when reading aclocal.m4, @@ -6792,6 +230,16 @@ if test "$am_compiler_list" = ""; then am_compiler_list=`sed -n ['s/^#*\([a-zA-Z0-9]*\))$/\1/p'] < ./depcomp` fi + am__universal=false + m4_case([$1], [CC], + [case " $depcc " in #( + *\ -arch\ *\ -arch\ *) am__universal=true ;; + esac], + [CXX], + [case " $depcc " in #( + *\ -arch\ *\ -arch\ *) am__universal=true ;; + esac]) + for depmode in $am_compiler_list; do # Setup a source with many dependencies, because some compilers # like to wrap large dependency lists on column 80 (with \), and @@ -6809,7 +257,17 @@ done echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf + # We check with `-c' and `-o' for the sake of the "dashmstdout" + # mode. It turns out that the SunPro C++ compiler does not properly + # handle `-M -o', and we need to detect this. Also, some Intel + # versions had trouble with output in subdirs + am__obj=sub/conftest.${OBJEXT-o} + am__minus_obj="-o $am__obj" case $depmode in + gcc) + # This depmode causes a compiler race in universal mode. + test "$am__universal" = false || continue + ;; nosideeffect) # after this tag, mechanisms are not by side-effect, so they'll # only be used when explicitly requested @@ -6819,19 +277,23 @@ break fi ;; + msvisualcpp | msvcmsys) + # This compiler won't grok `-c -o', but also, the minuso test has + # not run yet. These depmodes are late enough in the game, and + # so weak that their functioning should not be impacted. + am__obj=conftest.${OBJEXT-o} + am__minus_obj= + ;; none) break ;; esac - # We check with `-c' and `-o' for the sake of the "dashmstdout" - # mode. It turns out that the SunPro C++ compiler does not properly - # handle `-M -o', and we need to detect this. if depmode=$depmode \ - source=sub/conftest.c object=sub/conftest.${OBJEXT-o} \ + source=sub/conftest.c object=$am__obj \ depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ - $SHELL ./depcomp $depcc -c -o sub/conftest.${OBJEXT-o} sub/conftest.c \ + $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \ >/dev/null 2>conftest.err && grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 && grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && - grep sub/conftest.${OBJEXT-o} sub/conftest.Po > /dev/null 2>&1 && + grep $am__obj sub/conftest.Po > /dev/null 2>&1 && ${MAKE-make} -s -f confmf > /dev/null 2>&1; then # icc doesn't choke on unknown options, it will just issue warnings # or remarks (even with -Werror). So we grep stderr for any message @@ -6888,57 +350,68 @@ # Generate code to set up dependency tracking. -*- Autoconf -*- -# Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005 +# Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2008 # Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. -#serial 3 +#serial 5 # _AM_OUTPUT_DEPENDENCY_COMMANDS # ------------------------------ AC_DEFUN([_AM_OUTPUT_DEPENDENCY_COMMANDS], -[for mf in $CONFIG_FILES; do - # Strip MF so we end up with the name of the file. - mf=`echo "$mf" | sed -e 's/:.*$//'` - # Check whether this is an Automake generated Makefile or not. - # We used to match only the files named `Makefile.in', but - # some people rename them; so instead we look at the file content. - # Grep'ing the first line is not enough: some people post-process - # each Makefile.in and add a new line on top of each file to say so. - # Grep'ing the whole file is not good either: AIX grep has a line - # limit of 2048, but all sed's we know have understand at least 4000. - if sed 10q "$mf" | grep '^#.*generated by automake' > /dev/null 2>&1; then - dirpart=`AS_DIRNAME("$mf")` - else - continue - fi - # Extract the definition of DEPDIR, am__include, and am__quote - # from the Makefile without running `make'. - DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"` - test -z "$DEPDIR" && continue - am__include=`sed -n 's/^am__include = //p' < "$mf"` - test -z "am__include" && continue - am__quote=`sed -n 's/^am__quote = //p' < "$mf"` - # When using ansi2knr, U may be empty or an underscore; expand it - U=`sed -n 's/^U = //p' < "$mf"` - # Find all dependency output files, they are included files with - # $(DEPDIR) in their names. We invoke sed twice because it is the - # simplest approach to changing $(DEPDIR) to its actual value in the - # expansion. - for file in `sed -n " - s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \ - sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g' -e 's/\$U/'"$U"'/g'`; do - # Make sure the directory exists. - test -f "$dirpart/$file" && continue - fdir=`AS_DIRNAME(["$file"])` - AS_MKDIR_P([$dirpart/$fdir]) - # echo "creating $dirpart/$file" - echo '# dummy' > "$dirpart/$file" +[{ + # Autoconf 2.62 quotes --file arguments for eval, but not when files + # are listed without --file. Let's play safe and only enable the eval + # if we detect the quoting. + case $CONFIG_FILES in + *\'*) eval set x "$CONFIG_FILES" ;; + *) set x $CONFIG_FILES ;; + esac + shift + for mf + do + # Strip MF so we end up with the name of the file. + mf=`echo "$mf" | sed -e 's/:.*$//'` + # Check whether this is an Automake generated Makefile or not. + # We used to match only the files named `Makefile.in', but + # some people rename them; so instead we look at the file content. + # Grep'ing the first line is not enough: some people post-process + # each Makefile.in and add a new line on top of each file to say so. + # Grep'ing the whole file is not good either: AIX grep has a line + # limit of 2048, but all sed's we know have understand at least 4000. + if sed -n 's,^#.*generated by automake.*,X,p' "$mf" | grep X >/dev/null 2>&1; then + dirpart=`AS_DIRNAME("$mf")` + else + continue + fi + # Extract the definition of DEPDIR, am__include, and am__quote + # from the Makefile without running `make'. + DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"` + test -z "$DEPDIR" && continue + am__include=`sed -n 's/^am__include = //p' < "$mf"` + test -z "am__include" && continue + am__quote=`sed -n 's/^am__quote = //p' < "$mf"` + # When using ansi2knr, U may be empty or an underscore; expand it + U=`sed -n 's/^U = //p' < "$mf"` + # Find all dependency output files, they are included files with + # $(DEPDIR) in their names. We invoke sed twice because it is the + # simplest approach to changing $(DEPDIR) to its actual value in the + # expansion. + for file in `sed -n " + s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \ + sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g' -e 's/\$U/'"$U"'/g'`; do + # Make sure the directory exists. + test -f "$dirpart/$file" && continue + fdir=`AS_DIRNAME(["$file"])` + AS_MKDIR_P([$dirpart/$fdir]) + # echo "creating $dirpart/$file" + echo '# dummy' > "$dirpart/$file" + done done -done +} ])# _AM_OUTPUT_DEPENDENCY_COMMANDS @@ -6958,13 +431,13 @@ # Do all the work for Automake. -*- Autoconf -*- # Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, -# 2005, 2006 Free Software Foundation, Inc. +# 2005, 2006, 2008, 2009 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. -# serial 12 +# serial 16 # This macro actually does too much. Some checks are only needed if # your package does certain things. But this isn't really a big deal. @@ -6981,7 +454,7 @@ # arguments mandatory, and then we can depend on a new Autoconf # release and drop the old call support. AC_DEFUN([AM_INIT_AUTOMAKE], -[AC_PREREQ([2.60])dnl +[AC_PREREQ([2.62])dnl dnl Autoconf wants to disallow AM_ names. We explicitly allow dnl the ones we care about. m4_pattern_allow([^AM_[A-Z]+FLAGS$])dnl @@ -7032,8 +505,8 @@ AM_MISSING_PROG(AUTOMAKE, automake-${am__api_version}) AM_MISSING_PROG(AUTOHEADER, autoheader) AM_MISSING_PROG(MAKEINFO, makeinfo) -AM_PROG_INSTALL_SH -AM_PROG_INSTALL_STRIP +AC_REQUIRE([AM_PROG_INSTALL_SH])dnl +AC_REQUIRE([AM_PROG_INSTALL_STRIP])dnl AC_REQUIRE([AM_PROG_MKDIR_P])dnl # We need awk for the "check" target. The system "awk" is bad on # some platforms. @@ -7041,23 +514,36 @@ AC_REQUIRE([AC_PROG_MAKE_SET])dnl AC_REQUIRE([AM_SET_LEADING_DOT])dnl _AM_IF_OPTION([tar-ustar], [_AM_PROG_TAR([ustar])], - [_AM_IF_OPTION([tar-pax], [_AM_PROG_TAR([pax])], - [_AM_PROG_TAR([v7])])]) + [_AM_IF_OPTION([tar-pax], [_AM_PROG_TAR([pax])], + [_AM_PROG_TAR([v7])])]) _AM_IF_OPTION([no-dependencies],, [AC_PROVIDE_IFELSE([AC_PROG_CC], - [_AM_DEPENDENCIES(CC)], - [define([AC_PROG_CC], - defn([AC_PROG_CC])[_AM_DEPENDENCIES(CC)])])dnl + [_AM_DEPENDENCIES(CC)], + [define([AC_PROG_CC], + defn([AC_PROG_CC])[_AM_DEPENDENCIES(CC)])])dnl AC_PROVIDE_IFELSE([AC_PROG_CXX], - [_AM_DEPENDENCIES(CXX)], - [define([AC_PROG_CXX], - defn([AC_PROG_CXX])[_AM_DEPENDENCIES(CXX)])])dnl + [_AM_DEPENDENCIES(CXX)], + [define([AC_PROG_CXX], + defn([AC_PROG_CXX])[_AM_DEPENDENCIES(CXX)])])dnl AC_PROVIDE_IFELSE([AC_PROG_OBJC], - [_AM_DEPENDENCIES(OBJC)], - [define([AC_PROG_OBJC], - defn([AC_PROG_OBJC])[_AM_DEPENDENCIES(OBJC)])])dnl -]) -]) + [_AM_DEPENDENCIES(OBJC)], + [define([AC_PROG_OBJC], + defn([AC_PROG_OBJC])[_AM_DEPENDENCIES(OBJC)])])dnl +]) +_AM_IF_OPTION([silent-rules], [AC_REQUIRE([AM_SILENT_RULES])])dnl +dnl The `parallel-tests' driver may need to know about EXEEXT, so add the +dnl `am__EXEEXT' conditional if _AM_COMPILER_EXEEXT was seen. This macro +dnl is hooked onto _AC_COMPILER_EXEEXT early, see below. +AC_CONFIG_COMMANDS_PRE(dnl +[m4_provide_if([_AM_COMPILER_EXEEXT], + [AM_CONDITIONAL([am__EXEEXT], [test -n "$EXEEXT"])])])dnl +]) + +dnl Hook into `_AC_COMPILER_EXEEXT' early to learn its expansion. Do not +dnl add the conditional right here, as _AC_COMPILER_EXEEXT may be further +dnl mangled by Autoconf and run in a shell conditional statement. +m4_define([_AC_COMPILER_EXEEXT], +m4_defn([_AC_COMPILER_EXEEXT])[m4_provide([_AM_COMPILER_EXEEXT])]) # When config.status generates a header, we must update the stamp-h file. @@ -7069,18 +555,19 @@ # our stamp files there. AC_DEFUN([_AC_AM_CONFIG_HEADER_HOOK], [# Compute $1's index in $config_headers. +_am_arg=$1 _am_stamp_count=1 for _am_header in $config_headers :; do case $_am_header in - $1 | $1:* ) + $_am_arg | $_am_arg:* ) break ;; * ) _am_stamp_count=`expr $_am_stamp_count + 1` ;; esac done -echo "timestamp for $1" >`AS_DIRNAME([$1])`/stamp-h[]$_am_stamp_count]) +echo "timestamp for $_am_arg" >`AS_DIRNAME(["$_am_arg"])`/stamp-h[]$_am_stamp_count]) -# Copyright (C) 2001, 2003, 2005 Free Software Foundation, Inc. +# Copyright (C) 2001, 2003, 2005, 2008 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -7091,7 +578,14 @@ # Define $install_sh. AC_DEFUN([AM_PROG_INSTALL_SH], [AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl -install_sh=${install_sh-"\$(SHELL) $am_aux_dir/install-sh"} +if test x"${install_sh}" != xset; then + case $am_aux_dir in + *\ * | *\ *) + install_sh="\${SHELL} '$am_aux_dir/install-sh'" ;; + *) + install_sh="\${SHELL} $am_aux_dir/install-sh" + esac +fi AC_SUBST(install_sh)]) # Copyright (C) 2003, 2005 Free Software Foundation, Inc. @@ -7118,27 +612,38 @@ # Add --enable-maintainer-mode option to configure. -*- Autoconf -*- # From Jim Meyering -# Copyright (C) 1996, 1998, 2000, 2001, 2002, 2003, 2004, 2005 +# Copyright (C) 1996, 1998, 2000, 2001, 2002, 2003, 2004, 2005, 2008 # Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. -# serial 4 +# serial 5 +# AM_MAINTAINER_MODE([DEFAULT-MODE]) +# ---------------------------------- +# Control maintainer-specific portions of Makefiles. +# Default is to disable them, unless `enable' is passed literally. +# For symmetry, `disable' may be passed as well. Anyway, the user +# can override the default with the --enable/--disable switch. AC_DEFUN([AM_MAINTAINER_MODE], -[AC_MSG_CHECKING([whether to enable maintainer-specific portions of Makefiles]) - dnl maintainer-mode is disabled by default - AC_ARG_ENABLE(maintainer-mode, -[ --enable-maintainer-mode enable make rules and dependencies not useful +[m4_case(m4_default([$1], [disable]), + [enable], [m4_define([am_maintainer_other], [disable])], + [disable], [m4_define([am_maintainer_other], [enable])], + [m4_define([am_maintainer_other], [enable]) + m4_warn([syntax], [unexpected argument to AM@&t at _MAINTAINER_MODE: $1])]) +AC_MSG_CHECKING([whether to am_maintainer_other maintainer-specific portions of Makefiles]) + dnl maintainer-mode's default is 'disable' unless 'enable' is passed + AC_ARG_ENABLE([maintainer-mode], +[ --][am_maintainer_other][-maintainer-mode am_maintainer_other make rules and dependencies not useful (and sometimes confusing) to the casual installer], - USE_MAINTAINER_MODE=$enableval, - USE_MAINTAINER_MODE=no) + [USE_MAINTAINER_MODE=$enableval], + [USE_MAINTAINER_MODE=]m4_if(am_maintainer_other, [enable], [no], [yes])) AC_MSG_RESULT([$USE_MAINTAINER_MODE]) - AM_CONDITIONAL(MAINTAINER_MODE, [test $USE_MAINTAINER_MODE = yes]) + AM_CONDITIONAL([MAINTAINER_MODE], [test $USE_MAINTAINER_MODE = yes]) MAINT=$MAINTAINER_MODE_TRUE - AC_SUBST(MAINT)dnl + AC_SUBST([MAINT])dnl ] ) @@ -7146,13 +651,13 @@ # Check to see how 'make' treats includes. -*- Autoconf -*- -# Copyright (C) 2001, 2002, 2003, 2005 Free Software Foundation, Inc. +# Copyright (C) 2001, 2002, 2003, 2005, 2009 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. -# serial 3 +# serial 4 # AM_MAKE_INCLUDE() # ----------------- @@ -7161,7 +666,7 @@ [am_make=${MAKE-make} cat > confinc << 'END' am__doit: - @echo done + @echo this is the am__doit target .PHONY: am__doit END # If we don't find an include directive, just comment out the code. @@ -7171,24 +676,24 @@ _am_result=none # First try GNU make style include. echo "include confinc" > confmf -# We grep out `Entering directory' and `Leaving directory' -# messages which can occur if `w' ends up in MAKEFLAGS. -# In particular we don't look at `^make:' because GNU make might -# be invoked under some other name (usually "gmake"), in which -# case it prints its new name instead of `make'. -if test "`$am_make -s -f confmf 2> /dev/null | grep -v 'ing directory'`" = "done"; then - am__include=include - am__quote= - _am_result=GNU -fi +# Ignore all kinds of additional output from `make'. +case `$am_make -s -f confmf 2> /dev/null` in #( +*the\ am__doit\ target*) + am__include=include + am__quote= + _am_result=GNU + ;; +esac # Now try BSD make style include. if test "$am__include" = "#"; then echo '.include "confinc"' > confmf - if test "`$am_make -s -f confmf 2> /dev/null`" = "done"; then - am__include=.include - am__quote="\"" - _am_result=BSD - fi + case `$am_make -s -f confmf 2> /dev/null` in #( + *the\ am__doit\ target*) + am__include=.include + am__quote="\"" + _am_result=BSD + ;; + esac fi AC_SUBST([am__include]) AC_SUBST([am__quote]) @@ -7196,14 +701,14 @@ rm -f confinc confmf ]) -# Copyright (C) 1999, 2000, 2001, 2003, 2004, 2005 +# Copyright (C) 1999, 2000, 2001, 2003, 2004, 2005, 2008 # Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. -# serial 5 +# serial 6 # AM_PROG_CC_C_O # -------------- @@ -7215,8 +720,9 @@ # FIXME: we rely on the cache variable name because # there is no other way. set dummy $CC -ac_cc=`echo $[2] | sed ['s/[^a-zA-Z0-9_]/_/g;s/^[0-9]/_/']` -if eval "test \"`echo '$ac_cv_prog_cc_'${ac_cc}_c_o`\" != yes"; then +am_cc=`echo $[2] | sed ['s/[^a-zA-Z0-9_]/_/g;s/^[0-9]/_/']` +eval am_t=\$ac_cv_prog_cc_${am_cc}_c_o +if test "$am_t" != yes; then # Losing compiler, so override with the script. # FIXME: It is wrong to rewrite CC. # But if we don't then we get into trouble of one sort or another. @@ -7232,14 +738,14 @@ # Fake the existence of programs that GNU maintainers use. -*- Autoconf -*- -# Copyright (C) 1997, 1999, 2000, 2001, 2003, 2004, 2005 +# Copyright (C) 1997, 1999, 2000, 2001, 2003, 2004, 2005, 2008 # Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. -# serial 5 +# serial 6 # AM_MISSING_PROG(NAME, PROGRAM) # ------------------------------ @@ -7256,7 +762,14 @@ AC_DEFUN([AM_MISSING_HAS_RUN], [AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl AC_REQUIRE_AUX_FILE([missing])dnl -test x"${MISSING+set}" = xset || MISSING="\${SHELL} $am_aux_dir/missing" +if test x"${MISSING+set}" != xset; then + case $am_aux_dir in + *\ * | *\ *) + MISSING="\${SHELL} \"$am_aux_dir/missing\"" ;; + *) + MISSING="\${SHELL} $am_aux_dir/missing" ;; + esac +fi # Use eval to expand $SHELL if eval "$MISSING --run true"; then am_missing_run="$MISSING --run " @@ -7294,13 +807,13 @@ # Helper functions for option handling. -*- Autoconf -*- -# Copyright (C) 2001, 2002, 2003, 2005 Free Software Foundation, Inc. +# Copyright (C) 2001, 2002, 2003, 2005, 2008 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. -# serial 3 +# serial 4 # _AM_MANGLE_OPTION(NAME) # ----------------------- @@ -7317,7 +830,7 @@ # ---------------------------------- # OPTIONS is a space-separated list of Automake options. AC_DEFUN([_AM_SET_OPTIONS], -[AC_FOREACH([_AM_Option], [$1], [_AM_SET_OPTION(_AM_Option)])]) +[m4_foreach_w([_AM_Option], [$1], [_AM_SET_OPTION(_AM_Option)])]) # _AM_IF_OPTION(OPTION, IF-SET, [IF-NOT-SET]) # ------------------------------------------- @@ -7327,14 +840,14 @@ # Check to make sure that the build environment is sane. -*- Autoconf -*- -# Copyright (C) 1996, 1997, 2000, 2001, 2003, 2005 +# Copyright (C) 1996, 1997, 2000, 2001, 2003, 2005, 2008 # Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. -# serial 4 +# serial 5 # AM_SANITY_CHECK # --------------- @@ -7343,16 +856,29 @@ # Just in case sleep 1 echo timestamp > conftest.file +# Reject unsafe characters in $srcdir or the absolute working directory +# name. Accept space and tab only in the latter. +am_lf=' +' +case `pwd` in + *[[\\\"\#\$\&\'\`$am_lf]]*) + AC_MSG_ERROR([unsafe absolute working directory name]);; +esac +case $srcdir in + *[[\\\"\#\$\&\'\`$am_lf\ \ ]]*) + AC_MSG_ERROR([unsafe srcdir value: `$srcdir']);; +esac + # Do `set' in a subshell so we don't clobber the current shell's # arguments. Must try -L first in case configure is actually a # symlink; some systems play weird games with the mod time of symlinks # (eg FreeBSD returns the mod time of the symlink's containing # directory). if ( - set X `ls -Lt $srcdir/configure conftest.file 2> /dev/null` + set X `ls -Lt "$srcdir/configure" conftest.file 2> /dev/null` if test "$[*]" = "X"; then # -L didn't work. - set X `ls -t $srcdir/configure conftest.file` + set X `ls -t "$srcdir/configure" conftest.file` fi rm -f conftest.file if test "$[*]" != "X $srcdir/configure conftest.file" \ @@ -7405,18 +931,25 @@ INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s" AC_SUBST([INSTALL_STRIP_PROGRAM])]) -# Copyright (C) 2006 Free Software Foundation, Inc. +# Copyright (C) 2006, 2008 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. +# serial 2 + # _AM_SUBST_NOTMAKE(VARIABLE) # --------------------------- -# Prevent Automake from outputing VARIABLE = @VARIABLE@ in Makefile.in. +# Prevent Automake from outputting VARIABLE = @VARIABLE@ in Makefile.in. # This macro is traced by Automake. AC_DEFUN([_AM_SUBST_NOTMAKE]) +# AM_SUBST_NOTMAKE(VARIABLE) +# --------------------------- +# Public sister of _AM_SUBST_NOTMAKE. +AC_DEFUN([AM_SUBST_NOTMAKE], [_AM_SUBST_NOTMAKE($@)]) + # Check how to create a tarball. -*- Autoconf -*- # Copyright (C) 2004, 2005 Free Software Foundation, Inc. Added: python/trunk/Modules/_ctypes/libffi/compile ============================================================================== --- (empty file) +++ python/trunk/Modules/_ctypes/libffi/compile Mon Mar 15 01:02:36 2010 @@ -0,0 +1,142 @@ +#! /bin/sh +# Wrapper for compilers which do not understand `-c -o'. + +scriptversion=2005-05-14.22 + +# Copyright (C) 1999, 2000, 2003, 2004, 2005 Free Software Foundation, Inc. +# Written by Tom Tromey . +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2, or (at your option) +# any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + +# As a special exception to the GNU General Public License, if you +# distribute this file as part of a program that contains a +# configuration script generated by Autoconf, you may include it under +# the same distribution terms that you use for the rest of that program. + +# This file is maintained in Automake, please report +# bugs to or send patches to +# . + +case $1 in + '') + echo "$0: No command. Try \`$0 --help' for more information." 1>&2 + exit 1; + ;; + -h | --h*) + cat <<\EOF +Usage: compile [--help] [--version] PROGRAM [ARGS] + +Wrapper for compilers which do not understand `-c -o'. +Remove `-o dest.o' from ARGS, run PROGRAM with the remaining +arguments, and rename the output as expected. + +If you are trying to build a whole package this is not the +right script to run: please start by reading the file `INSTALL'. + +Report bugs to . +EOF + exit $? + ;; + -v | --v*) + echo "compile $scriptversion" + exit $? + ;; +esac + +ofile= +cfile= +eat= + +for arg +do + if test -n "$eat"; then + eat= + else + case $1 in + -o) + # configure might choose to run compile as `compile cc -o foo foo.c'. + # So we strip `-o arg' only if arg is an object. + eat=1 + case $2 in + *.o | *.obj) + ofile=$2 + ;; + *) + set x "$@" -o "$2" + shift + ;; + esac + ;; + *.c) + cfile=$1 + set x "$@" "$1" + shift + ;; + *) + set x "$@" "$1" + shift + ;; + esac + fi + shift +done + +if test -z "$ofile" || test -z "$cfile"; then + # If no `-o' option was seen then we might have been invoked from a + # pattern rule where we don't need one. That is ok -- this is a + # normal compilation that the losing compiler can handle. If no + # `.c' file was seen then we are probably linking. That is also + # ok. + exec "$@" +fi + +# Name of file we expect compiler to create. +cofile=`echo "$cfile" | sed -e 's|^.*/||' -e 's/\.c$/.o/'` + +# Create the lock directory. +# Note: use `[/.-]' here to ensure that we don't use the same name +# that we are using for the .o file. Also, base the name on the expected +# object file name, since that is what matters with a parallel build. +lockdir=`echo "$cofile" | sed -e 's|[/.-]|_|g'`.d +while true; do + if mkdir "$lockdir" >/dev/null 2>&1; then + break + fi + sleep 1 +done +# FIXME: race condition here if user kills between mkdir and trap. +trap "rmdir '$lockdir'; exit 1" 1 2 15 + +# Run the compile. +"$@" +ret=$? + +if test -f "$cofile"; then + mv "$cofile" "$ofile" +elif test -f "${cofile}bj"; then + mv "${cofile}bj" "$ofile" +fi + +rmdir "$lockdir" +exit $ret + +# Local Variables: +# mode: shell-script +# sh-indentation: 2 +# eval: (add-hook 'write-file-hooks 'time-stamp) +# time-stamp-start: "scriptversion=" +# time-stamp-format: "%:y-%02m-%02d.%02H" +# time-stamp-end: "$" +# End: Modified: python/trunk/Modules/_ctypes/libffi/config.guess ============================================================================== --- python/trunk/Modules/_ctypes/libffi/config.guess (original) +++ python/trunk/Modules/_ctypes/libffi/config.guess Mon Mar 15 01:02:36 2010 @@ -1,10 +1,10 @@ #! /bin/sh # Attempt to guess a canonical system name. # Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, -# 2000, 2001, 2002, 2003, 2004, 2005, 2006 Free Software Foundation, -# Inc. +# 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 +# Free Software Foundation, Inc. -timestamp='2007-05-17' +timestamp='2009-11-19' # This file is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by @@ -27,16 +27,16 @@ # the same distribution terms that you use for the rest of that program. -# Originally written by Per Bothner . -# Please send patches to . Submit a context -# diff and a properly formatted ChangeLog entry. +# Originally written by Per Bothner. Please send patches (context +# diff format) to and include a ChangeLog +# entry. # # This script attempts to guess a canonical system name similar to # config.sub. If it succeeds, it prints the system name on stdout, and # exits with 0. Otherwise, it exits with 1. # -# The plan is that this can be called by configure scripts if you -# don't specify an explicit build system type. +# You can get the latest version of this script from: +# http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.guess;hb=HEAD me=`echo "$0" | sed -e 's,.*/,,'` @@ -56,8 +56,8 @@ GNU config.guess ($timestamp) Originally written by Per Bothner. -Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005 -Free Software Foundation, Inc. +Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, +2002, 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." @@ -170,7 +170,7 @@ arm*|i386|m68k|ns32k|sh3*|sparc|vax) eval $set_cc_for_build if echo __ELF__ | $CC_FOR_BUILD -E - 2>/dev/null \ - | grep __ELF__ >/dev/null + | grep -q __ELF__ then # Once all utilities can be ECOFF (netbsdecoff) or a.out (netbsdaout). # Return netbsd for either. FIX? @@ -324,14 +324,30 @@ case `/usr/bin/uname -p` in sparc) echo sparc-icl-nx7; exit ;; esac ;; + s390x:SunOS:*:*) + echo ${UNAME_MACHINE}-ibm-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` + exit ;; sun4H:SunOS:5.*:*) echo sparc-hal-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit ;; sun4*:SunOS:5.*:* | tadpole*:SunOS:5.*:*) echo sparc-sun-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit ;; - i86pc:SunOS:5.*:* | ix86xen:SunOS:5.*:*) - echo i386-pc-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` + i86pc:SunOS:5.*:* | i86xen:SunOS:5.*:*) + eval $set_cc_for_build + SUN_ARCH="i386" + # If there is a compiler, see if it is configured for 64-bit objects. + # Note that the Sun cc does not turn __LP64__ into 1 like gcc does. + # This test works for both compilers. + if [ "$CC_FOR_BUILD" != 'no_compiler_found' ]; then + if (echo '#ifdef __amd64'; echo IS_64BIT_ARCH; echo '#endif') | \ + (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | \ + grep IS_64BIT_ARCH >/dev/null + then + SUN_ARCH="x86_64" + fi + fi + echo ${SUN_ARCH}-pc-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit ;; sun4*:SunOS:6*:*) # According to config.sub, this is the proper way to canonicalize @@ -532,7 +548,7 @@ echo rs6000-ibm-aix3.2 fi exit ;; - *:AIX:*:[45]) + *:AIX:*:[456]) IBM_CPU_ID=`/usr/sbin/lsdev -C -c processor -S available | sed 1q | awk '{ print $1 }'` if /usr/sbin/lsattr -El ${IBM_CPU_ID} | grep ' POWER' >/dev/null 2>&1; then IBM_ARCH=rs6000 @@ -640,7 +656,7 @@ # => hppa64-hp-hpux11.23 if echo __LP64__ | (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | - grep __LP64__ >/dev/null + grep -q __LP64__ then HP_ARCH="hppa2.0w" else @@ -791,18 +807,24 @@ i*:PW*:*) echo ${UNAME_MACHINE}-pc-pw32 exit ;; - *:Interix*:[3456]*) + *:Interix*:*) case ${UNAME_MACHINE} in - x86) + x86) echo i586-pc-interix${UNAME_RELEASE} exit ;; - EM64T | authenticamd) + authenticamd | genuineintel | EM64T) echo x86_64-unknown-interix${UNAME_RELEASE} exit ;; + IA64) + echo ia64-unknown-interix${UNAME_RELEASE} + exit ;; esac ;; [345]86:Windows_95:* | [345]86:Windows_98:* | [345]86:Windows_NT:*) echo i${UNAME_MACHINE}-pc-mks exit ;; + 8664:Windows_NT:*) + echo x86_64-pc-mks + exit ;; i*:Windows_NT*:* | Pentium*:Windows_NT*:*) # How do we know it's Interix rather than the generic POSIX subsystem? # It also conflicts with pre-2.0 versions of AT&T UWIN. Should we @@ -832,8 +854,29 @@ i*86:Minix:*:*) echo ${UNAME_MACHINE}-pc-minix exit ;; + alpha:Linux:*:*) + case `sed -n '/^cpu model/s/^.*: \(.*\)/\1/p' < /proc/cpuinfo` in + EV5) UNAME_MACHINE=alphaev5 ;; + EV56) UNAME_MACHINE=alphaev56 ;; + PCA56) UNAME_MACHINE=alphapca56 ;; + PCA57) UNAME_MACHINE=alphapca56 ;; + EV6) UNAME_MACHINE=alphaev6 ;; + EV67) UNAME_MACHINE=alphaev67 ;; + EV68*) UNAME_MACHINE=alphaev68 ;; + esac + objdump --private-headers /bin/sh | grep -q ld.so.1 + if test "$?" = 0 ; then LIBC="libc1" ; else LIBC="" ; fi + echo ${UNAME_MACHINE}-unknown-linux-gnu${LIBC} + exit ;; arm*:Linux:*:*) - echo ${UNAME_MACHINE}-unknown-linux-gnu + eval $set_cc_for_build + if echo __ARM_EABI__ | $CC_FOR_BUILD -E - 2>/dev/null \ + | grep -q __ARM_EABI__ + then + echo ${UNAME_MACHINE}-unknown-linux-gnu + else + echo ${UNAME_MACHINE}-unknown-linux-gnueabi + fi exit ;; avr32*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu @@ -847,6 +890,17 @@ frv:Linux:*:*) echo frv-unknown-linux-gnu exit ;; + i*86:Linux:*:*) + LIBC=gnu + eval $set_cc_for_build + sed 's/^ //' << EOF >$dummy.c + #ifdef __dietlibc__ + LIBC=dietlibc + #endif +EOF + eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep '^LIBC'` + echo "${UNAME_MACHINE}-pc-linux-${LIBC}" + exit ;; ia64:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; @@ -856,74 +910,33 @@ m68*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; - mips:Linux:*:*) + mips:Linux:*:* | mips64:Linux:*:*) eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #undef CPU - #undef mips - #undef mipsel + #undef ${UNAME_MACHINE} + #undef ${UNAME_MACHINE}el #if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL) - CPU=mipsel + CPU=${UNAME_MACHINE}el #else #if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB) - CPU=mips + CPU=${UNAME_MACHINE} #else CPU= #endif #endif EOF - eval "`$CC_FOR_BUILD -E $dummy.c 2>/dev/null | sed -n ' - /^CPU/{ - s: ::g - p - }'`" - test x"${CPU}" != x && { echo "${CPU}-unknown-linux-gnu"; exit; } - ;; - mips64:Linux:*:*) - eval $set_cc_for_build - sed 's/^ //' << EOF >$dummy.c - #undef CPU - #undef mips64 - #undef mips64el - #if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL) - CPU=mips64el - #else - #if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB) - CPU=mips64 - #else - CPU= - #endif - #endif -EOF - eval "`$CC_FOR_BUILD -E $dummy.c 2>/dev/null | sed -n ' - /^CPU/{ - s: ::g - p - }'`" + eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep '^CPU'` test x"${CPU}" != x && { echo "${CPU}-unknown-linux-gnu"; exit; } ;; or32:Linux:*:*) echo or32-unknown-linux-gnu exit ;; - ppc:Linux:*:*) - echo powerpc-unknown-linux-gnu + padre:Linux:*:*) + echo sparc-unknown-linux-gnu exit ;; - ppc64:Linux:*:*) - echo powerpc64-unknown-linux-gnu - exit ;; - alpha:Linux:*:*) - case `sed -n '/^cpu model/s/^.*: \(.*\)/\1/p' < /proc/cpuinfo` in - EV5) UNAME_MACHINE=alphaev5 ;; - EV56) UNAME_MACHINE=alphaev56 ;; - PCA56) UNAME_MACHINE=alphapca56 ;; - PCA57) UNAME_MACHINE=alphapca56 ;; - EV6) UNAME_MACHINE=alphaev6 ;; - EV67) UNAME_MACHINE=alphaev67 ;; - EV68*) UNAME_MACHINE=alphaev68 ;; - esac - objdump --private-headers /bin/sh | grep ld.so.1 >/dev/null - if test "$?" = 0 ; then LIBC="libc1" ; else LIBC="" ; fi - echo ${UNAME_MACHINE}-unknown-linux-gnu${LIBC} + parisc64:Linux:*:* | hppa64:Linux:*:*) + echo hppa64-unknown-linux-gnu exit ;; parisc:Linux:*:* | hppa:Linux:*:*) # Look for CPU level @@ -933,8 +946,11 @@ *) echo hppa-unknown-linux-gnu ;; esac exit ;; - parisc64:Linux:*:* | hppa64:Linux:*:*) - echo hppa64-unknown-linux-gnu + ppc64:Linux:*:*) + echo powerpc64-unknown-linux-gnu + exit ;; + ppc:Linux:*:*) + echo powerpc-unknown-linux-gnu exit ;; s390:Linux:*:* | s390x:Linux:*:*) echo ${UNAME_MACHINE}-ibm-linux @@ -954,72 +970,9 @@ x86_64:Linux:*:*) echo x86_64-unknown-linux-gnu exit ;; - xtensa:Linux:*:*) - echo xtensa-unknown-linux-gnu + xtensa*:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; - i*86:Linux:*:*) - # The BFD linker knows what the default object file format is, so - # first see if it will tell us. cd to the root directory to prevent - # problems with other programs or directories called `ld' in the path. - # Set LC_ALL=C to ensure ld outputs messages in English. - ld_supported_targets=`cd /; LC_ALL=C ld --help 2>&1 \ - | sed -ne '/supported targets:/!d - s/[ ][ ]*/ /g - s/.*supported targets: *// - s/ .*// - p'` - case "$ld_supported_targets" in - elf32-i386) - TENTATIVE="${UNAME_MACHINE}-pc-linux-gnu" - ;; - a.out-i386-linux) - echo "${UNAME_MACHINE}-pc-linux-gnuaout" - exit ;; - coff-i386) - echo "${UNAME_MACHINE}-pc-linux-gnucoff" - exit ;; - "") - # Either a pre-BFD a.out linker (linux-gnuoldld) or - # one that does not give us useful --help. - echo "${UNAME_MACHINE}-pc-linux-gnuoldld" - exit ;; - esac - # Determine whether the default compiler is a.out or elf - eval $set_cc_for_build - sed 's/^ //' << EOF >$dummy.c - #include - #ifdef __ELF__ - # ifdef __GLIBC__ - # if __GLIBC__ >= 2 - LIBC=gnu - # else - LIBC=gnulibc1 - # endif - # else - LIBC=gnulibc1 - # endif - #else - #if defined(__INTEL_COMPILER) || defined(__PGI) || defined(__SUNPRO_C) || defined(__SUNPRO_CC) - LIBC=gnu - #else - LIBC=gnuaout - #endif - #endif - #ifdef __dietlibc__ - LIBC=dietlibc - #endif -EOF - eval "`$CC_FOR_BUILD -E $dummy.c 2>/dev/null | sed -n ' - /^LIBC/{ - s: ::g - p - }'`" - test x"${LIBC}" != x && { - echo "${UNAME_MACHINE}-pc-linux-${LIBC}" - exit - } - test x"${TENTATIVE}" != x && { echo "${TENTATIVE}"; exit; } - ;; i*86:DYNIX/ptx:4*:*) # ptx 4.0 does uname -s correctly, with DYNIX/ptx in there. # earlier versions are messed up and put the nodename in both @@ -1048,7 +1001,7 @@ i*86:syllable:*:*) echo ${UNAME_MACHINE}-pc-syllable exit ;; - i*86:LynxOS:2.*:* | i*86:LynxOS:3.[01]*:* | i*86:LynxOS:4.0*:*) + i*86:LynxOS:2.*:* | i*86:LynxOS:3.[01]*:* | i*86:LynxOS:4.[02]*:*) echo i386-unknown-lynxos${UNAME_RELEASE} exit ;; i*86:*DOS:*:*) @@ -1092,8 +1045,11 @@ pc:*:*:*) # Left here for compatibility: # uname -m prints for DJGPP always 'pc', but it prints nothing about - # the processor, so we play safe by assuming i386. - echo i386-pc-msdosdjgpp + # the processor, so we play safe by assuming i586. + # Note: whatever this is, it MUST be the same as what config.sub + # prints for the "djgpp" host, or else GDB configury will decide that + # this is a cross-build. + echo i586-pc-msdosdjgpp exit ;; Intel:Mach:3*:*) echo i386-pc-mach3 @@ -1131,6 +1087,16 @@ 3[34]??:*:4.0:* | 3[34]??,*:*:4.0:*) /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ && { echo i486-ncr-sysv4; exit; } ;; + NCR*:*:4.2:* | MPRAS*:*:4.2:*) + OS_REL='.3' + test -r /etc/.relid \ + && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid` + /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ + && { echo i486-ncr-sysv4.3${OS_REL}; exit; } + /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \ + && { echo i586-ncr-sysv4.3${OS_REL}; exit; } + /bin/uname -p 2>/dev/null | /bin/grep pteron >/dev/null \ + && { echo i586-ncr-sysv4.3${OS_REL}; exit; } ;; m68*:LynxOS:2.*:* | m68*:LynxOS:3.0*:*) echo m68k-unknown-lynxos${UNAME_RELEASE} exit ;; @@ -1143,7 +1109,7 @@ rs6000:LynxOS:2.*:*) echo rs6000-unknown-lynxos${UNAME_RELEASE} exit ;; - PowerPC:LynxOS:2.*:* | PowerPC:LynxOS:3.[01]*:* | PowerPC:LynxOS:4.0*:*) + PowerPC:LynxOS:2.*:* | PowerPC:LynxOS:3.[01]*:* | PowerPC:LynxOS:4.[02]*:*) echo powerpc-unknown-lynxos${UNAME_RELEASE} exit ;; SM[BE]S:UNIX_SV:*:*) @@ -1206,6 +1172,9 @@ BePC:BeOS:*:*) # BeOS running on Intel PC compatible. echo i586-pc-beos exit ;; + BePC:Haiku:*:*) # Haiku running on Intel PC compatible. + echo i586-pc-haiku + exit ;; SX-4:SUPER-UX:*:*) echo sx4-nec-superux${UNAME_RELEASE} exit ;; @@ -1233,6 +1202,16 @@ *:Darwin:*:*) UNAME_PROCESSOR=`uname -p` || UNAME_PROCESSOR=unknown case $UNAME_PROCESSOR in + i386) + eval $set_cc_for_build + if [ "$CC_FOR_BUILD" != 'no_compiler_found' ]; then + if (echo '#ifdef __LP64__'; echo IS_64BIT_ARCH; echo '#endif') | \ + (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | \ + grep IS_64BIT_ARCH >/dev/null + then + UNAME_PROCESSOR="x86_64" + fi + fi ;; unknown) UNAME_PROCESSOR=powerpc ;; esac echo ${UNAME_PROCESSOR}-apple-darwin${UNAME_RELEASE} @@ -1314,6 +1293,9 @@ i*86:rdos:*:*) echo ${UNAME_MACHINE}-pc-rdos exit ;; + i*86:AROS:*:*) + echo ${UNAME_MACHINE}-pc-aros + exit ;; esac #echo '(No uname command or uname output not recognized.)' 1>&2 @@ -1474,9 +1456,9 @@ the operating system you are using. It is advised that you download the most up to date version of the config scripts from - http://savannah.gnu.org/cgi-bin/viewcvs/*checkout*/config/config/config.guess + http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.guess;hb=HEAD and - http://savannah.gnu.org/cgi-bin/viewcvs/*checkout*/config/config/config.sub + http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.sub;hb=HEAD If the version you run ($0) is already up to date, please send the following data and any information you think might be Modified: python/trunk/Modules/_ctypes/libffi/config.sub ============================================================================== --- python/trunk/Modules/_ctypes/libffi/config.sub (original) +++ python/trunk/Modules/_ctypes/libffi/config.sub Mon Mar 15 01:02:36 2010 @@ -1,10 +1,10 @@ #! /bin/sh # Configuration validation subroutine script. # Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, -# 2000, 2001, 2002, 2003, 2004, 2005, 2006 Free Software Foundation, -# Inc. +# 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 +# Free Software Foundation, Inc. -timestamp='2007-04-29' +timestamp='2009-11-07' # This file is (in principle) common to ALL GNU software. # The presence of a machine in this file suggests that SOME GNU software @@ -32,13 +32,16 @@ # Please send patches to . Submit a context -# diff and a properly formatted ChangeLog entry. +# diff and a properly formatted GNU ChangeLog entry. # # Configuration subroutine to validate and canonicalize a configuration type. # Supply the specified configuration type as an argument. # If it is invalid, we print an error message on stderr and exit with code 1. # Otherwise, we print the canonical config type on stdout and succeed. +# You can get the latest version of this script from: +# http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.sub;hb=HEAD + # This file is supposed to be the same for all GNU packages # and recognize all the CPU types, system types and aliases # that are meaningful with *any* GNU software. @@ -72,8 +75,8 @@ version="\ GNU config.sub ($timestamp) -Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005 -Free Software Foundation, Inc. +Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, +2002, 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." @@ -122,6 +125,7 @@ case $maybe_os in nto-qnx* | linux-gnu* | linux-dietlibc | linux-newlib* | linux-uclibc* | \ uclinux-uclibc* | uclinux-gnu* | kfreebsd*-gnu* | knetbsd*-gnu* | netbsd*-gnu* | \ + kopensolaris*-gnu* | \ storm-chaos* | os2-emx* | rtmk-nova*) os=-$maybe_os basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'` @@ -148,10 +152,13 @@ -convergent* | -ncr* | -news | -32* | -3600* | -3100* | -hitachi* |\ -c[123]* | -convex* | -sun | -crds | -omron* | -dg | -ultra | -tti* | \ -harris | -dolphin | -highlevel | -gould | -cbm | -ns | -masscomp | \ - -apple | -axis | -knuth | -cray) + -apple | -axis | -knuth | -cray | -microblaze) os= basic_machine=$1 ;; + -bluegene*) + os=-cnk + ;; -sim | -cisco | -oki | -wec | -winbond) os= basic_machine=$1 @@ -249,13 +256,16 @@ | h8300 | h8500 | hppa | hppa1.[01] | hppa2.0 | hppa2.0[nw] | hppa64 \ | i370 | i860 | i960 | ia64 \ | ip2k | iq2000 \ + | lm32 \ | m32c | m32r | m32rle | m68000 | m68k | m88k \ - | maxq | mb | microblaze | mcore | mep \ + | maxq | mb | microblaze | mcore | mep | metag \ | mips | mipsbe | mipseb | mipsel | mipsle \ | mips16 \ | mips64 | mips64el \ - | mips64vr | mips64vrel \ + | mips64octeon | mips64octeonel \ | mips64orion | mips64orionel \ + | mips64r5900 | mips64r5900el \ + | mips64vr | mips64vrel \ | mips64vr4100 | mips64vr4100el \ | mips64vr4300 | mips64vr4300el \ | mips64vr5000 | mips64vr5000el \ @@ -268,6 +278,7 @@ | mipsisa64sr71k | mipsisa64sr71kel \ | mipstx39 | mipstx39el \ | mn10200 | mn10300 \ + | moxie \ | mt \ | msp430 \ | nios | nios2 \ @@ -276,20 +287,22 @@ | pdp10 | pdp11 | pj | pjl \ | powerpc | powerpc64 | powerpc64le | powerpcle | ppcbe \ | pyramid \ + | rx \ | score \ - | sh | sh[1234] | sh[24]a | sh[23]e | sh[34]eb | sheb | shbe | shle | sh[1234]le | sh3ele \ + | sh | sh[1234] | sh[24]a | sh[24]aeb | sh[23]e | sh[34]eb | sheb | shbe | shle | sh[1234]le | sh3ele \ | sh64 | sh64le \ | sparc | sparc64 | sparc64b | sparc64v | sparc86x | sparclet | sparclite \ | sparcv8 | sparcv9 | sparcv9b | sparcv9v \ | spu | strongarm \ | tahoe | thumb | tic4x | tic80 | tron \ + | ubicom32 \ | v850 | v850e \ | we32k \ | x86 | xc16x | xscale | xscalee[bl] | xstormy16 | xtensa \ - | z8k) + | z8k | z80) basic_machine=$basic_machine-unknown ;; - m6811 | m68hc11 | m6812 | m68hc12) + m6811 | m68hc11 | m6812 | m68hc12 | picochip) # Motorola 68HC11/12. basic_machine=$basic_machine-unknown os=-none @@ -329,14 +342,17 @@ | hppa-* | hppa1.[01]-* | hppa2.0-* | hppa2.0[nw]-* | hppa64-* \ | i*86-* | i860-* | i960-* | ia64-* \ | ip2k-* | iq2000-* \ + | lm32-* \ | m32c-* | m32r-* | m32rle-* \ | m68000-* | m680[012346]0-* | m68360-* | m683?2-* | m68k-* \ - | m88110-* | m88k-* | maxq-* | mcore-* \ + | m88110-* | m88k-* | maxq-* | mcore-* | metag-* | microblaze-* \ | mips-* | mipsbe-* | mipseb-* | mipsel-* | mipsle-* \ | mips16-* \ | mips64-* | mips64el-* \ - | mips64vr-* | mips64vrel-* \ + | mips64octeon-* | mips64octeonel-* \ | mips64orion-* | mips64orionel-* \ + | mips64r5900-* | mips64r5900el-* \ + | mips64vr-* | mips64vrel-* \ | mips64vr4100-* | mips64vr4100el-* \ | mips64vr4300-* | mips64vr4300el-* \ | mips64vr5000-* | mips64vr5000el-* \ @@ -357,21 +373,26 @@ | pdp10-* | pdp11-* | pj-* | pjl-* | pn-* | power-* \ | powerpc-* | powerpc64-* | powerpc64le-* | powerpcle-* | ppcbe-* \ | pyramid-* \ - | romp-* | rs6000-* \ - | sh-* | sh[1234]-* | sh[24]a-* | sh[23]e-* | sh[34]eb-* | sheb-* | shbe-* \ + | romp-* | rs6000-* | rx-* \ + | sh-* | sh[1234]-* | sh[24]a-* | sh[24]aeb-* | sh[23]e-* | sh[34]eb-* | sheb-* | shbe-* \ | shle-* | sh[1234]le-* | sh3ele-* | sh64-* | sh64le-* \ | sparc-* | sparc64-* | sparc64b-* | sparc64v-* | sparc86x-* | sparclet-* \ | sparclite-* \ | sparcv8-* | sparcv9-* | sparcv9b-* | sparcv9v-* | strongarm-* | sv1-* | sx?-* \ | tahoe-* | thumb-* \ - | tic30-* | tic4x-* | tic54x-* | tic55x-* | tic6x-* | tic80-* \ + | tic30-* | tic4x-* | tic54x-* | tic55x-* | tic6x-* | tic80-* | tile-* \ | tron-* \ + | ubicom32-* \ | v850-* | v850e-* | vax-* \ | we32k-* \ | x86-* | x86_64-* | xc16x-* | xps100-* | xscale-* | xscalee[bl]-* \ - | xstormy16-* | xtensa-* \ + | xstormy16-* | xtensa*-* \ | ymp-* \ - | z8k-*) + | z8k-* | z80-*) + ;; + # Recognize the basic CPU types without company name, with glob match. + xtensa*) + basic_machine=$basic_machine-unknown ;; # Recognize the various machine names and aliases which stand # for a CPU type and a company and sometimes even an OS. @@ -435,6 +456,10 @@ basic_machine=m68k-apollo os=-bsd ;; + aros) + basic_machine=i386-pc + os=-aros + ;; aux) basic_machine=m68k-apple os=-aux @@ -443,10 +468,26 @@ basic_machine=ns32k-sequent os=-dynix ;; + blackfin) + basic_machine=bfin-unknown + os=-linux + ;; + blackfin-*) + basic_machine=bfin-`echo $basic_machine | sed 's/^[^-]*-//'` + os=-linux + ;; + bluegene*) + basic_machine=powerpc-ibm + os=-cnk + ;; c90) basic_machine=c90-cray os=-unicos ;; + cegcc) + basic_machine=arm-unknown + os=-cegcc + ;; convex-c1) basic_machine=c1-convex os=-bsd @@ -475,8 +516,8 @@ basic_machine=craynv-cray os=-unicosmp ;; - cr16c) - basic_machine=cr16c-unknown + cr16) + basic_machine=cr16-unknown os=-elf ;; crds | unos) @@ -514,6 +555,10 @@ basic_machine=m88k-motorola os=-sysv3 ;; + dicos) + basic_machine=i686-pc + os=-dicos + ;; djgpp) basic_machine=i586-pc os=-msdosdjgpp @@ -668,6 +713,14 @@ basic_machine=m68k-isi os=-sysv ;; + m68knommu) + basic_machine=m68k-unknown + os=-linux + ;; + m68knommu-*) + basic_machine=m68k-`echo $basic_machine | sed 's/^[^-]*-//'` + os=-linux + ;; m88k-omron*) basic_machine=m88k-omron ;; @@ -679,6 +732,9 @@ basic_machine=ns32k-utek os=-sysv ;; + microblaze) + basic_machine=microblaze-xilinx + ;; mingw32) basic_machine=i386-pc os=-mingw32 @@ -813,6 +869,14 @@ basic_machine=i860-intel os=-osf ;; + parisc) + basic_machine=hppa-unknown + os=-linux + ;; + parisc-*) + basic_machine=hppa-`echo $basic_machine | sed 's/^[^-]*-//'` + os=-linux + ;; pbd) basic_machine=sparc-tti ;; @@ -1021,6 +1085,10 @@ basic_machine=tic6x-unknown os=-coff ;; + tile*) + basic_machine=tile-unknown + os=-linux-gnu + ;; tx39) basic_machine=mipstx39-unknown ;; @@ -1096,6 +1164,10 @@ basic_machine=z8k-unknown os=-sim ;; + z80-*-coff) + basic_machine=z80-unknown + os=-sim + ;; none) basic_machine=none-none os=-none @@ -1134,7 +1206,7 @@ we32k) basic_machine=we32k-att ;; - sh[1234] | sh[24]a | sh[34]eb | sh[1234]le | sh[23]ele) + sh[1234] | sh[24]a | sh[24]aeb | sh[34]eb | sh[1234]le | sh[23]ele) basic_machine=sh-unknown ;; sparc | sparcv8 | sparcv9 | sparcv9b | sparcv9v) @@ -1204,10 +1276,11 @@ # Each alternative MUST END IN A *, to match a version number. # -sysv* is not here because it comes later, after sysvr4. -gnu* | -bsd* | -mach* | -minix* | -genix* | -ultrix* | -irix* \ - | -*vms* | -sco* | -esix* | -isc* | -aix* | -sunos | -sunos[34]*\ + | -*vms* | -sco* | -esix* | -isc* | -aix* | -cnk* | -sunos | -sunos[34]*\ | -hpux* | -unos* | -osf* | -luna* | -dgux* | -solaris* | -sym* \ + | -kopensolaris* \ | -amigaos* | -amigados* | -msdos* | -newsos* | -unicos* | -aof* \ - | -aos* \ + | -aos* | -aros* \ | -nindy* | -vxsim* | -vxworks* | -ebmon* | -hms* | -mvs* \ | -clix* | -riscos* | -uniplus* | -iris* | -rtu* | -xenix* \ | -hiux* | -386bsd* | -knetbsd* | -mirbsd* | -netbsd* \ @@ -1216,7 +1289,7 @@ | -bosx* | -nextstep* | -cxux* | -aout* | -elf* | -oabi* \ | -ptx* | -coff* | -ecoff* | -winnt* | -domain* | -vsta* \ | -udi* | -eabi* | -lites* | -ieee* | -go32* | -aux* \ - | -chorusos* | -chorusrdb* \ + | -chorusos* | -chorusrdb* | -cegcc* \ | -cygwin* | -pe* | -psos* | -moss* | -proelf* | -rtems* \ | -mingw32* | -linux-gnu* | -linux-newlib* | -linux-uclibc* \ | -uxpv* | -beos* | -mpeix* | -udk* \ @@ -1226,7 +1299,7 @@ | -os2* | -vos* | -palmos* | -uclinux* | -nucleus* \ | -morphos* | -superux* | -rtmk* | -rtmk-nova* | -windiss* \ | -powermax* | -dnix* | -nx6 | -nx7 | -sei* | -dragonfly* \ - | -skyos* | -haiku* | -rdos* | -toppers* | -drops*) + | -skyos* | -haiku* | -rdos* | -toppers* | -drops* | -es*) # Remember, each alternative MUST END IN *, to match a version number. ;; -qnx*) @@ -1356,6 +1429,9 @@ -zvmoe) os=-zvmoe ;; + -dicos*) + os=-dicos + ;; -none) ;; *) @@ -1553,7 +1629,7 @@ -sunos*) vendor=sun ;; - -aix*) + -cnk*|-aix*) vendor=ibm ;; -beos*) Modified: python/trunk/Modules/_ctypes/libffi/configure ============================================================================== --- python/trunk/Modules/_ctypes/libffi/configure (original) +++ python/trunk/Modules/_ctypes/libffi/configure Mon Mar 15 01:02:36 2010 @@ -1,62 +1,85 @@ #! /bin/sh # Guess values for system-dependent variables and create Makefiles. -# Generated by GNU Autoconf 2.61 for libffi 3.0.5. +# Generated by GNU Autoconf 2.65 for libffi 3.0.9. # # Report bugs to . # +# # Copyright (C) 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001, -# 2002, 2003, 2004, 2005, 2006 Free Software Foundation, Inc. +# 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, +# Inc. +# +# # This configure script is free software; the Free Software Foundation # gives unlimited permission to copy, distribute and modify it. -## --------------------- ## -## M4sh Initialization. ## -## --------------------- ## +## -------------------- ## +## M4sh Initialization. ## +## -------------------- ## # Be more Bourne compatible DUALCASE=1; export DUALCASE # for MKS sh -if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then +if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then : emulate sh NULLCMD=: - # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which + # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which # is contrary to our usage. Disable this feature. alias -g '${1+"$@"}'='"$@"' setopt NO_GLOB_SUBST else - case `(set -o) 2>/dev/null` in - *posix*) set -o posix ;; + case `(set -o) 2>/dev/null` in #( + *posix*) : + set -o posix ;; #( + *) : + ;; esac - fi - - -# PATH needs CR -# Avoid depending upon Character Ranges. -as_cr_letters='abcdefghijklmnopqrstuvwxyz' -as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' -as_cr_Letters=$as_cr_letters$as_cr_LETTERS -as_cr_digits='0123456789' -as_cr_alnum=$as_cr_Letters$as_cr_digits - -# The user is always right. -if test "${PATH_SEPARATOR+set}" != set; then - echo "#! /bin/sh" >conf$$.sh - echo "exit 0" >>conf$$.sh - chmod +x conf$$.sh - if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then - PATH_SEPARATOR=';' - else - PATH_SEPARATOR=: +as_nl=' +' +export as_nl +# Printing a long string crashes Solaris 7 /usr/bin/printf. +as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' +as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo +as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo +# Prefer a ksh shell builtin over an external printf program on Solaris, +# but without wasting forks for bash or zsh. +if test -z "$BASH_VERSION$ZSH_VERSION" \ + && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then + as_echo='print -r --' + as_echo_n='print -rn --' +elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then + as_echo='printf %s\n' + as_echo_n='printf %s' +else + if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then + as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"' + as_echo_n='/usr/ucb/echo -n' + else + as_echo_body='eval expr "X$1" : "X\\(.*\\)"' + as_echo_n_body='eval + arg=$1; + case $arg in #( + *"$as_nl"*) + expr "X$arg" : "X\\(.*\\)$as_nl"; + arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;; + esac; + expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl" + ' + export as_echo_n_body + as_echo_n='sh -c $as_echo_n_body as_echo' fi - rm -f conf$$.sh + export as_echo_body + as_echo='sh -c $as_echo_body as_echo' fi -# Support unset when possible. -if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then - as_unset=unset -else - as_unset=false +# The user is always right. +if test "${PATH_SEPARATOR+set}" != set; then + PATH_SEPARATOR=: + (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { + (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || + PATH_SEPARATOR=';' + } fi @@ -65,20 +88,18 @@ # there to prevent editors from complaining about space-tab. # (If _AS_PATH_WALK were called with IFS unset, it would disable word # splitting by setting IFS to empty value.) -as_nl=' -' IFS=" "" $as_nl" # Find who we are. Look in the path if we contain no directory separator. -case $0 in +case $0 in #(( *[\\/]* ) as_myself=$0 ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. - test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break -done + test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break + done IFS=$as_save_IFS ;; @@ -89,354 +110,322 @@ as_myself=$0 fi if test ! -f "$as_myself"; then - echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 - { (exit 1); exit 1; } + $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 + exit 1 fi -# Work around bugs in pre-3.0 UWIN ksh. -for as_var in ENV MAIL MAILPATH -do ($as_unset $as_var) >/dev/null 2>&1 && $as_unset $as_var +# Unset variables that we do not need and which cause bugs (e.g. in +# pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1" +# suppresses any "Segmentation fault" message there. '((' could +# trigger a bug in pdksh 5.2.14. +for as_var in BASH_ENV ENV MAIL MAILPATH +do eval test x\${$as_var+set} = xset \ + && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : done PS1='$ ' PS2='> ' PS4='+ ' # NLS nuisances. -for as_var in \ - LANG LANGUAGE LC_ADDRESS LC_ALL LC_COLLATE LC_CTYPE LC_IDENTIFICATION \ - LC_MEASUREMENT LC_MESSAGES LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER \ - LC_TELEPHONE LC_TIME -do - if (set +x; test -z "`(eval $as_var=C; export $as_var) 2>&1`"); then - eval $as_var=C; export $as_var - else - ($as_unset $as_var) >/dev/null 2>&1 && $as_unset $as_var - fi -done - -# Required to use basename. -if expr a : '\(a\)' >/dev/null 2>&1 && - test "X`expr 00001 : '.*\(...\)'`" = X001; then - as_expr=expr -else - as_expr=false -fi - -if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then - as_basename=basename -else - as_basename=false -fi - - -# Name of the executable. -as_me=`$as_basename -- "$0" || -$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ - X"$0" : 'X\(//\)$' \| \ - X"$0" : 'X\(/\)' \| . 2>/dev/null || -echo X/"$0" | - sed '/^.*\/\([^/][^/]*\)\/*$/{ - s//\1/ - q - } - /^X\/\(\/\/\)$/{ - s//\1/ - q - } - /^X\/\(\/\).*/{ - s//\1/ - q - } - s/.*/./; q'` +LC_ALL=C +export LC_ALL +LANGUAGE=C +export LANGUAGE # CDPATH. -$as_unset CDPATH - +(unset CDPATH) >/dev/null 2>&1 && unset CDPATH if test "x$CONFIG_SHELL" = x; then - if (eval ":") 2>/dev/null; then - as_have_required=yes + as_bourne_compatible="if test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then : + emulate sh + NULLCMD=: + # Pre-4.2 versions of Zsh do word splitting on \${1+\"\$@\"}, which + # is contrary to our usage. Disable this feature. + alias -g '\${1+\"\$@\"}'='\"\$@\"' + setopt NO_GLOB_SUBST else - as_have_required=no + case \`(set -o) 2>/dev/null\` in #( + *posix*) : + set -o posix ;; #( + *) : + ;; +esac fi - - if test $as_have_required = yes && (eval ": -(as_func_return () { - (exit \$1) -} -as_func_success () { - as_func_return 0 -} -as_func_failure () { - as_func_return 1 -} -as_func_ret_success () { - return 0 -} -as_func_ret_failure () { - return 1 -} +" + as_required="as_fn_return () { (exit \$1); } +as_fn_success () { as_fn_return 0; } +as_fn_failure () { as_fn_return 1; } +as_fn_ret_success () { return 0; } +as_fn_ret_failure () { return 1; } exitcode=0 -if as_func_success; then - : -else - exitcode=1 - echo as_func_success failed. -fi - -if as_func_failure; then - exitcode=1 - echo as_func_failure succeeded. -fi - -if as_func_ret_success; then - : -else - exitcode=1 - echo as_func_ret_success failed. -fi - -if as_func_ret_failure; then - exitcode=1 - echo as_func_ret_failure succeeded. -fi - -if ( set x; as_func_ret_success y && test x = \"\$1\" ); then - : +as_fn_success || { exitcode=1; echo as_fn_success failed.; } +as_fn_failure && { exitcode=1; echo as_fn_failure succeeded.; } +as_fn_ret_success || { exitcode=1; echo as_fn_ret_success failed.; } +as_fn_ret_failure && { exitcode=1; echo as_fn_ret_failure succeeded.; } +if ( set x; as_fn_ret_success y && test x = \"\$1\" ); then : + +else + exitcode=1; echo positional parameters were not saved. +fi +test x\$exitcode = x0 || exit 1" + as_suggested=" as_lineno_1=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_1a=\$LINENO + as_lineno_2=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_2a=\$LINENO + eval 'test \"x\$as_lineno_1'\$as_run'\" != \"x\$as_lineno_2'\$as_run'\" && + test \"x\`expr \$as_lineno_1'\$as_run' + 1\`\" = \"x\$as_lineno_2'\$as_run'\"' || exit 1 +test \$(( 1 + 1 )) = 2 || exit 1" + if (eval "$as_required") 2>/dev/null; then : + as_have_required=yes else - exitcode=1 - echo positional parameters were not saved. + as_have_required=no fi + if test x$as_have_required = xyes && (eval "$as_suggested") 2>/dev/null; then : -test \$exitcode = 0) || { (exit 1); exit 1; } - -( - as_lineno_1=\$LINENO - as_lineno_2=\$LINENO - test \"x\$as_lineno_1\" != \"x\$as_lineno_2\" && - test \"x\`expr \$as_lineno_1 + 1\`\" = \"x\$as_lineno_2\") || { (exit 1); exit 1; } -") 2> /dev/null; then - : else - as_candidate_shells= - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +as_found=false for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. - case $as_dir in + as_found=: + case $as_dir in #( /*) for as_base in sh bash ksh sh5; do - as_candidate_shells="$as_candidate_shells $as_dir/$as_base" + # Try only shells that exist, to save several forks. + as_shell=$as_dir/$as_base + if { test -f "$as_shell" || test -f "$as_shell.exe"; } && + { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$as_shell"; } 2>/dev/null; then : + CONFIG_SHELL=$as_shell as_have_required=yes + if { $as_echo "$as_bourne_compatible""$as_suggested" | as_run=a "$as_shell"; } 2>/dev/null; then : + break 2 +fi +fi done;; esac + as_found=false done +$as_found || { if { test -f "$SHELL" || test -f "$SHELL.exe"; } && + { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$SHELL"; } 2>/dev/null; then : + CONFIG_SHELL=$SHELL as_have_required=yes +fi; } IFS=$as_save_IFS - for as_shell in $as_candidate_shells $SHELL; do - # Try only shells that exist, to save several forks. - if { test -f "$as_shell" || test -f "$as_shell.exe"; } && - { ("$as_shell") 2> /dev/null <<\_ASEOF -if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then - emulate sh - NULLCMD=: - # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which - # is contrary to our usage. Disable this feature. - alias -g '${1+"$@"}'='"$@"' - setopt NO_GLOB_SUBST -else - case `(set -o) 2>/dev/null` in - *posix*) set -o posix ;; -esac - -fi - - -: -_ASEOF -}; then - CONFIG_SHELL=$as_shell - as_have_required=yes - if { "$as_shell" 2> /dev/null <<\_ASEOF -if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then - emulate sh - NULLCMD=: - # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which - # is contrary to our usage. Disable this feature. - alias -g '${1+"$@"}'='"$@"' - setopt NO_GLOB_SUBST -else - case `(set -o) 2>/dev/null` in - *posix*) set -o posix ;; -esac - -fi - - -: -(as_func_return () { - (exit $1) -} -as_func_success () { - as_func_return 0 -} -as_func_failure () { - as_func_return 1 -} -as_func_ret_success () { - return 0 -} -as_func_ret_failure () { - return 1 -} - -exitcode=0 -if as_func_success; then - : -else - exitcode=1 - echo as_func_success failed. -fi - -if as_func_failure; then - exitcode=1 - echo as_func_failure succeeded. -fi - -if as_func_ret_success; then - : -else - exitcode=1 - echo as_func_ret_success failed. -fi - -if as_func_ret_failure; then - exitcode=1 - echo as_func_ret_failure succeeded. -fi - -if ( set x; as_func_ret_success y && test x = "$1" ); then - : -else - exitcode=1 - echo positional parameters were not saved. + if test "x$CONFIG_SHELL" != x; then : + # We cannot yet assume a decent shell, so we have to provide a + # neutralization value for shells without unset; and this also + # works around shells that cannot unset nonexistent variables. + BASH_ENV=/dev/null + ENV=/dev/null + (unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV + export CONFIG_SHELL + exec "$CONFIG_SHELL" "$as_myself" ${1+"$@"} fi -test $exitcode = 0) || { (exit 1); exit 1; } - -( - as_lineno_1=$LINENO - as_lineno_2=$LINENO - test "x$as_lineno_1" != "x$as_lineno_2" && - test "x`expr $as_lineno_1 + 1`" = "x$as_lineno_2") || { (exit 1); exit 1; } - -_ASEOF -}; then - break + if test x$as_have_required = xno; then : + $as_echo "$0: This script requires a shell more modern than all" + $as_echo "$0: the shells that I found on your system." + if test x${ZSH_VERSION+set} = xset ; then + $as_echo "$0: In particular, zsh $ZSH_VERSION has bugs and should" + $as_echo "$0: be upgraded to zsh 4.3.4 or later." + else + $as_echo "$0: Please tell bug-autoconf at gnu.org and +$0: http://gcc.gnu.org/bugs.html about your system, +$0: including any error possibly output before this +$0: message. Then install a modern shell, or manually run +$0: the script under such a shell if you do have one." + fi + exit 1 fi - fi - - done - - if test "x$CONFIG_SHELL" != x; then - for as_var in BASH_ENV ENV - do ($as_unset $as_var) >/dev/null 2>&1 && $as_unset $as_var - done - export CONFIG_SHELL - exec "$CONFIG_SHELL" "$as_myself" ${1+"$@"} fi +SHELL=${CONFIG_SHELL-/bin/sh} +export SHELL +# Unset more variables known to interfere with behavior of common tools. +CLICOLOR_FORCE= GREP_OPTIONS= +unset CLICOLOR_FORCE GREP_OPTIONS +## --------------------- ## +## M4sh Shell Functions. ## +## --------------------- ## +# as_fn_unset VAR +# --------------- +# Portably unset VAR. +as_fn_unset () +{ + { eval $1=; unset $1;} +} +as_unset=as_fn_unset + +# as_fn_set_status STATUS +# ----------------------- +# Set $? to STATUS, without forking. +as_fn_set_status () +{ + return $1 +} # as_fn_set_status + +# as_fn_exit STATUS +# ----------------- +# Exit the shell with STATUS, even in a "trap 0" or "set -e" context. +as_fn_exit () +{ + set +e + as_fn_set_status $1 + exit $1 +} # as_fn_exit + +# as_fn_mkdir_p +# ------------- +# Create "$as_dir" as a directory, including parents if necessary. +as_fn_mkdir_p () +{ - if test $as_have_required = no; then - echo This script requires a shell more modern than all the - echo shells that I found on your system. Please install a - echo modern shell, or manually run the script under such a - echo shell if you do have one. - { (exit 1); exit 1; } -fi - + case $as_dir in #( + -*) as_dir=./$as_dir;; + esac + test -d "$as_dir" || eval $as_mkdir_p || { + as_dirs= + while :; do + case $as_dir in #( + *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( + *) as_qdir=$as_dir;; + esac + as_dirs="'$as_qdir' $as_dirs" + as_dir=`$as_dirname -- "$as_dir" || +$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$as_dir" : 'X\(//\)[^/]' \| \ + X"$as_dir" : 'X\(//\)$' \| \ + X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X"$as_dir" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + test -d "$as_dir" && break + done + test -z "$as_dirs" || eval "mkdir $as_dirs" + } || test -d "$as_dir" || as_fn_error "cannot create directory $as_dir" -fi -fi +} # as_fn_mkdir_p +# as_fn_append VAR VALUE +# ---------------------- +# Append the text in VALUE to the end of the definition contained in VAR. Take +# advantage of any shell optimizations that allow amortized linear growth over +# repeated appends, instead of the typical quadratic growth present in naive +# implementations. +if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then : + eval 'as_fn_append () + { + eval $1+=\$2 + }' +else + as_fn_append () + { + eval $1=\$$1\$2 + } +fi # as_fn_append +# as_fn_arith ARG... +# ------------------ +# Perform arithmetic evaluation on the ARGs, and store the result in the +# global $as_val. Take advantage of shells that can avoid forks. The arguments +# must be portable across $(()) and expr. +if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then : + eval 'as_fn_arith () + { + as_val=$(( $* )) + }' +else + as_fn_arith () + { + as_val=`expr "$@" || test $? -eq 1` + } +fi # as_fn_arith -(eval "as_func_return () { - (exit \$1) -} -as_func_success () { - as_func_return 0 -} -as_func_failure () { - as_func_return 1 -} -as_func_ret_success () { - return 0 -} -as_func_ret_failure () { - return 1 -} +# as_fn_error ERROR [LINENO LOG_FD] +# --------------------------------- +# Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are +# provided, also output the error to LOG_FD, referencing LINENO. Then exit the +# script with status $?, using 1 if that was 0. +as_fn_error () +{ + as_status=$?; test $as_status -eq 0 && as_status=1 + if test "$3"; then + as_lineno=${as_lineno-"$2"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + $as_echo "$as_me:${as_lineno-$LINENO}: error: $1" >&$3 + fi + $as_echo "$as_me: error: $1" >&2 + as_fn_exit $as_status +} # as_fn_error -exitcode=0 -if as_func_success; then - : +if expr a : '\(a\)' >/dev/null 2>&1 && + test "X`expr 00001 : '.*\(...\)'`" = X001; then + as_expr=expr else - exitcode=1 - echo as_func_success failed. -fi - -if as_func_failure; then - exitcode=1 - echo as_func_failure succeeded. + as_expr=false fi -if as_func_ret_success; then - : +if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then + as_basename=basename else - exitcode=1 - echo as_func_ret_success failed. -fi - -if as_func_ret_failure; then - exitcode=1 - echo as_func_ret_failure succeeded. + as_basename=false fi -if ( set x; as_func_ret_success y && test x = \"\$1\" ); then - : +if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then + as_dirname=dirname else - exitcode=1 - echo positional parameters were not saved. + as_dirname=false fi -test \$exitcode = 0") || { - echo No shell found that supports shell functions. - echo Please tell autoconf at gnu.org about your system, - echo including any error possibly output before this - echo message -} +as_me=`$as_basename -- "$0" || +$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ + X"$0" : 'X\(//\)$' \| \ + X"$0" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X/"$0" | + sed '/^.*\/\([^/][^/]*\)\/*$/{ + s//\1/ + q + } + /^X\/\(\/\/\)$/{ + s//\1/ + q + } + /^X\/\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` +# Avoid depending upon Character Ranges. +as_cr_letters='abcdefghijklmnopqrstuvwxyz' +as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' +as_cr_Letters=$as_cr_letters$as_cr_LETTERS +as_cr_digits='0123456789' +as_cr_alnum=$as_cr_Letters$as_cr_digits - as_lineno_1=$LINENO - as_lineno_2=$LINENO - test "x$as_lineno_1" != "x$as_lineno_2" && - test "x`expr $as_lineno_1 + 1`" = "x$as_lineno_2" || { - - # Create $as_me.lineno as a copy of $as_myself, but with $LINENO - # uniformly replaced by the line number. The first 'sed' inserts a - # line-number line after each line using $LINENO; the second 'sed' - # does the real work. The second script uses 'N' to pair each - # line-number line with the line containing $LINENO, and appends - # trailing '-' during substitution so that $LINENO is not a special - # case at line end. - # (Raja R Harinath suggested sed '=', and Paul Eggert wrote the - # scripts with optimization help from Paolo Bonzini. Blame Lee - # E. McMahon (1931-1989) for sed's syntax. :-) + as_lineno_1=$LINENO as_lineno_1a=$LINENO + as_lineno_2=$LINENO as_lineno_2a=$LINENO + eval 'test "x$as_lineno_1'$as_run'" != "x$as_lineno_2'$as_run'" && + test "x`expr $as_lineno_1'$as_run' + 1`" = "x$as_lineno_2'$as_run'"' || { + # Blame Lee E. McMahon (1931-1989) for sed's syntax. :-) sed -n ' p /[$]LINENO/= @@ -453,8 +442,7 @@ s/-\n.*// ' >$as_me.lineno && chmod +x "$as_me.lineno" || - { echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2 - { (exit 1); exit 1; }; } + { $as_echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2; as_fn_exit 1; } # Don't try to exec as it changes $[0], causing all sort of problems # (the dirname of $[0] is not the place where we might find the @@ -464,49 +452,40 @@ exit } - -if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then - as_dirname=dirname -else - as_dirname=false -fi - ECHO_C= ECHO_N= ECHO_T= -case `echo -n x` in +case `echo -n x` in #((((( -n*) - case `echo 'x\c'` in + case `echo 'xy\c'` in *c*) ECHO_T=' ';; # ECHO_T is single tab character. - *) ECHO_C='\c';; + xy) ECHO_C='\c';; + *) echo `echo ksh88 bug on AIX 6.1` > /dev/null + ECHO_T=' ';; esac;; *) ECHO_N='-n';; esac -if expr a : '\(a\)' >/dev/null 2>&1 && - test "X`expr 00001 : '.*\(...\)'`" = X001; then - as_expr=expr -else - as_expr=false -fi - rm -f conf$$ conf$$.exe conf$$.file if test -d conf$$.dir; then rm -f conf$$.dir/conf$$.file else rm -f conf$$.dir - mkdir conf$$.dir + mkdir conf$$.dir 2>/dev/null fi -echo >conf$$.file -if ln -s conf$$.file conf$$ 2>/dev/null; then - as_ln_s='ln -s' - # ... but there are two gotchas: - # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. - # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. - # In both cases, we have to default to `cp -p'. - ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || +if (echo >conf$$.file) 2>/dev/null; then + if ln -s conf$$.file conf$$ 2>/dev/null; then + as_ln_s='ln -s' + # ... but there are two gotchas: + # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. + # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. + # In both cases, we have to default to `cp -p'. + ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || + as_ln_s='cp -p' + elif ln conf$$.file conf$$ 2>/dev/null; then + as_ln_s=ln + else as_ln_s='cp -p' -elif ln conf$$.file conf$$ 2>/dev/null; then - as_ln_s=ln + fi else as_ln_s='cp -p' fi @@ -514,7 +493,7 @@ rmdir conf$$.dir 2>/dev/null if mkdir -p . 2>/dev/null; then - as_mkdir_p=: + as_mkdir_p='mkdir -p "$as_dir"' else test -d ./-p && rmdir ./-p as_mkdir_p=false @@ -531,12 +510,12 @@ as_test_x=' eval sh -c '\'' if test -d "$1"; then - test -d "$1/."; + test -d "$1/."; else - case $1 in - -*)set "./$1";; + case $1 in #( + -*)set "./$1";; esac; - case `ls -ld'$as_ls_L_option' "$1" 2>/dev/null` in + case `ls -ld'$as_ls_L_option' "$1" 2>/dev/null` in #(( ???[sx]*):;;*)false;;esac;fi '\'' sh ' @@ -550,162 +529,8 @@ as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" - - -# Check that we are running under the correct shell. -SHELL=${CONFIG_SHELL-/bin/sh} - -case X$ECHO in -X*--fallback-echo) - # Remove one level of quotation (which was required for Make). - ECHO=`echo "$ECHO" | sed 's,\\\\\$\\$0,'$0','` - ;; -esac - -echo=${ECHO-echo} -if test "X$1" = X--no-reexec; then - # Discard the --no-reexec flag, and continue. - shift -elif test "X$1" = X--fallback-echo; then - # Avoid inline document here, it may be left over - : -elif test "X`($echo '\t') 2>/dev/null`" = 'X\t' ; then - # Yippee, $echo works! - : -else - # Restart under the correct shell. - exec $SHELL "$0" --no-reexec ${1+"$@"} -fi - -if test "X$1" = X--fallback-echo; then - # used as fallback echo - shift - cat </dev/null 2>&1 && unset CDPATH - -if test -z "$ECHO"; then -if test "X${echo_test_string+set}" != Xset; then -# find a string as large as possible, as long as the shell can cope with it - for cmd in 'sed 50q "$0"' 'sed 20q "$0"' 'sed 10q "$0"' 'sed 2q "$0"' 'echo test'; do - # expected sizes: less than 2Kb, 1Kb, 512 bytes, 16 bytes, ... - if (echo_test_string=`eval $cmd`) 2>/dev/null && - echo_test_string=`eval $cmd` && - (test "X$echo_test_string" = "X$echo_test_string") 2>/dev/null - then - break - fi - done -fi - -if test "X`($echo '\t') 2>/dev/null`" = 'X\t' && - echo_testing_string=`($echo "$echo_test_string") 2>/dev/null` && - test "X$echo_testing_string" = "X$echo_test_string"; then - : -else - # The Solaris, AIX, and Digital Unix default echo programs unquote - # backslashes. This makes it impossible to quote backslashes using - # echo "$something" | sed 's/\\/\\\\/g' - # - # So, first we look for a working echo in the user's PATH. - - lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR - for dir in $PATH /usr/ucb; do - IFS="$lt_save_ifs" - if (test -f $dir/echo || test -f $dir/echo$ac_exeext) && - test "X`($dir/echo '\t') 2>/dev/null`" = 'X\t' && - echo_testing_string=`($dir/echo "$echo_test_string") 2>/dev/null` && - test "X$echo_testing_string" = "X$echo_test_string"; then - echo="$dir/echo" - break - fi - done - IFS="$lt_save_ifs" - - if test "X$echo" = Xecho; then - # We didn't find a better echo, so look for alternatives. - if test "X`(print -r '\t') 2>/dev/null`" = 'X\t' && - echo_testing_string=`(print -r "$echo_test_string") 2>/dev/null` && - test "X$echo_testing_string" = "X$echo_test_string"; then - # This shell has a builtin print -r that does the trick. - echo='print -r' - elif (test -f /bin/ksh || test -f /bin/ksh$ac_exeext) && - test "X$CONFIG_SHELL" != X/bin/ksh; then - # If we have ksh, try running configure again with it. - ORIGINAL_CONFIG_SHELL=${CONFIG_SHELL-/bin/sh} - export ORIGINAL_CONFIG_SHELL - CONFIG_SHELL=/bin/ksh - export CONFIG_SHELL - exec $CONFIG_SHELL "$0" --no-reexec ${1+"$@"} - else - # Try using printf. - echo='printf %s\n' - if test "X`($echo '\t') 2>/dev/null`" = 'X\t' && - echo_testing_string=`($echo "$echo_test_string") 2>/dev/null` && - test "X$echo_testing_string" = "X$echo_test_string"; then - # Cool, printf works - : - elif echo_testing_string=`($ORIGINAL_CONFIG_SHELL "$0" --fallback-echo '\t') 2>/dev/null` && - test "X$echo_testing_string" = 'X\t' && - echo_testing_string=`($ORIGINAL_CONFIG_SHELL "$0" --fallback-echo "$echo_test_string") 2>/dev/null` && - test "X$echo_testing_string" = "X$echo_test_string"; then - CONFIG_SHELL=$ORIGINAL_CONFIG_SHELL - export CONFIG_SHELL - SHELL="$CONFIG_SHELL" - export SHELL - echo="$CONFIG_SHELL $0 --fallback-echo" - elif echo_testing_string=`($CONFIG_SHELL "$0" --fallback-echo '\t') 2>/dev/null` && - test "X$echo_testing_string" = 'X\t' && - echo_testing_string=`($CONFIG_SHELL "$0" --fallback-echo "$echo_test_string") 2>/dev/null` && - test "X$echo_testing_string" = "X$echo_test_string"; then - echo="$CONFIG_SHELL $0 --fallback-echo" - else - # maybe with a smaller string... - prev=: - - for cmd in 'echo test' 'sed 2q "$0"' 'sed 10q "$0"' 'sed 20q "$0"' 'sed 50q "$0"'; do - if (test "X$echo_test_string" = "X`eval $cmd`") 2>/dev/null - then - break - fi - prev="$cmd" - done - - if test "$prev" != 'sed 50q "$0"'; then - echo_test_string=`eval $prev` - export echo_test_string - exec ${ORIGINAL_CONFIG_SHELL-${CONFIG_SHELL-/bin/sh}} "$0" ${1+"$@"} - else - # Oops. We lost completely, so just stick with echo. - echo=echo - fi - fi - fi - fi -fi -fi - -# Copy echo and quote the copy suitably for passing to libtool from -# the Makefile, instead of quoting the original, which is used later. -ECHO=$echo -if test "X$ECHO" = "X$CONFIG_SHELL $0 --fallback-echo"; then - ECHO="$CONFIG_SHELL \\\$\$0 --fallback-echo" -fi - - - - -tagnames=${tagnames+${tagnames},}CXX - -tagnames=${tagnames+${tagnames},}F77 - -exec 7<&0 &1 +test -n "$DJDIR" || exec 7<&0 &1 # Name of the host. # hostname on some systems (SVR3.2, Linux) returns a bogus exit status, @@ -723,14 +548,14 @@ subdirs= MFLAGS= MAKEFLAGS= -SHELL=${CONFIG_SHELL-/bin/sh} # Identity of this package. PACKAGE_NAME='libffi' PACKAGE_TARNAME='libffi' -PACKAGE_VERSION='3.0.5' -PACKAGE_STRING='libffi 3.0.5' +PACKAGE_VERSION='3.0.9' +PACKAGE_STRING='libffi 3.0.9' PACKAGE_BUGREPORT='http://gcc.gnu.org/bugs.html' +PACKAGE_URL='' # Factoring default headers for most tests. ac_includes_default="\ @@ -768,200 +593,196 @@ # include #endif" -ac_subst_vars='SHELL -PATH_SEPARATOR -PACKAGE_NAME -PACKAGE_TARNAME -PACKAGE_VERSION -PACKAGE_STRING -PACKAGE_BUGREPORT -exec_prefix -prefix -program_transform_name -bindir -sbindir -libexecdir -datarootdir -datadir -sysconfdir -sharedstatedir -localstatedir -includedir -oldincludedir -docdir -infodir -htmldir -dvidir -pdfdir -psdir -libdir -localedir -mandir -DEFS -ECHO_C -ECHO_N -ECHO_T -LIBS -build_alias -host_alias -target_alias -build -build_cpu -build_vendor -build_os -host -host_cpu -host_vendor -host_os -target -target_cpu -target_vendor -target_os -INSTALL_PROGRAM -INSTALL_SCRIPT -INSTALL_DATA -am__isrc -CYGPATH_W -PACKAGE -VERSION -ACLOCAL -AUTOCONF -AUTOMAKE -AUTOHEADER -MAKEINFO -install_sh -STRIP -INSTALL_STRIP_PROGRAM -mkdir_p -AWK -SET_MAKE -am__leading_dot -AMTAR -am__tar -am__untar -CC -CFLAGS -LDFLAGS -CPPFLAGS -ac_ct_CC -EXEEXT -OBJEXT -DEPDIR -am__include -am__quote -AMDEP_TRUE -AMDEP_FALSE -AMDEPBACKSLASH -CCDEPMODE -am__fastdepCC_TRUE -am__fastdepCC_FALSE -CCAS -CCASFLAGS -CCASDEPMODE -am__fastdepCCAS_TRUE -am__fastdepCCAS_FALSE -SED -GREP +ac_subst_vars='am__EXEEXT_FALSE +am__EXEEXT_TRUE +LTLIBOBJS +LIBOBJS +toolexeclibdir +toolexecdir +TARGETDIR +TARGET +HAVE_LONG_DOUBLE +ALLOCA +PA64_HPUX_FALSE +PA64_HPUX_TRUE +PA_HPUX_FALSE +PA_HPUX_TRUE +PA_LINUX_FALSE +PA_LINUX_TRUE +SH64_FALSE +SH64_TRUE +SH_FALSE +SH_TRUE +X86_64_FALSE +X86_64_TRUE +S390_FALSE +S390_TRUE +FRV_FALSE +FRV_TRUE +LIBFFI_CRIS_FALSE +LIBFFI_CRIS_TRUE +AVR32_FALSE +AVR32_TRUE +ARM_FALSE +ARM_TRUE +POWERPC_FREEBSD_FALSE +POWERPC_FREEBSD_TRUE +POWERPC_DARWIN_FALSE +POWERPC_DARWIN_TRUE +POWERPC_AIX_FALSE +POWERPC_AIX_TRUE +POWERPC_FALSE +POWERPC_TRUE +M68K_FALSE +M68K_TRUE +M32R_FALSE +M32R_TRUE +IA64_FALSE +IA64_TRUE +ALPHA_FALSE +ALPHA_TRUE +X86_DARWIN_FALSE +X86_DARWIN_TRUE +X86_WIN64_FALSE +X86_WIN64_TRUE +X86_WIN32_FALSE +X86_WIN32_TRUE +X86_FREEBSD_FALSE +X86_FREEBSD_TRUE +X86_FALSE +X86_TRUE +SPARC_FALSE +SPARC_TRUE +MIPS_FALSE +MIPS_TRUE +AM_LTLDFLAGS +AM_RUNTESTFLAGS +TESTSUBDIR_FALSE +TESTSUBDIR_TRUE EGREP -LN_S -ECHO -AR -RANLIB +GREP CPP -CXX -CXXFLAGS -ac_ct_CXX -CXXDEPMODE -am__fastdepCXX_TRUE -am__fastdepCXX_FALSE -CXXCPP -F77 -FFLAGS -ac_ct_F77 -LIBTOOL -MAINTAINER_MODE_TRUE -MAINTAINER_MODE_FALSE MAINT -TESTSUBDIR_TRUE -TESTSUBDIR_FALSE -AM_RUNTESTFLAGS -MIPS_TRUE -MIPS_FALSE -SPARC_TRUE -SPARC_FALSE -X86_TRUE -X86_FALSE -X86_FREEBSD_TRUE -X86_FREEBSD_FALSE -X86_WIN32_TRUE -X86_WIN32_FALSE -X86_DARWIN_TRUE -X86_DARWIN_FALSE -ALPHA_TRUE -ALPHA_FALSE -IA64_TRUE -IA64_FALSE -M32R_TRUE -M32R_FALSE -M68K_TRUE -M68K_FALSE -POWERPC_TRUE -POWERPC_FALSE -POWERPC_AIX_TRUE -POWERPC_AIX_FALSE -POWERPC_DARWIN_TRUE -POWERPC_DARWIN_FALSE -POWERPC_FREEBSD_TRUE -POWERPC_FREEBSD_FALSE -ARM_TRUE -ARM_FALSE -LIBFFI_CRIS_TRUE -LIBFFI_CRIS_FALSE -FRV_TRUE -FRV_FALSE -S390_TRUE -S390_FALSE -X86_64_TRUE -X86_64_FALSE -SH_TRUE -SH_FALSE -SH64_TRUE -SH64_FALSE -PA_LINUX_TRUE -PA_LINUX_FALSE -PA_HPUX_TRUE -PA_HPUX_FALSE -PA64_HPUX_TRUE -PA64_HPUX_FALSE -ALLOCA -HAVE_LONG_DOUBLE -TARGET -TARGETDIR -toolexecdir -toolexeclibdir -LIBOBJS -LTLIBOBJS' +MAINTAINER_MODE_FALSE +MAINTAINER_MODE_TRUE +am__fastdepCCAS_FALSE +am__fastdepCCAS_TRUE +CCASDEPMODE +CCASFLAGS +CCAS +am__fastdepCC_FALSE +am__fastdepCC_TRUE +CCDEPMODE +AMDEPBACKSLASH +AMDEP_FALSE +AMDEP_TRUE +am__quote +am__include +DEPDIR +OBJEXT +EXEEXT +ac_ct_CC +CPPFLAGS +LDFLAGS +CFLAGS +CC +am__untar +am__tar +AMTAR +am__leading_dot +SET_MAKE +AWK +mkdir_p +MKDIR_P +INSTALL_STRIP_PROGRAM +STRIP +install_sh +MAKEINFO +AUTOHEADER +AUTOMAKE +AUTOCONF +ACLOCAL +VERSION +PACKAGE +CYGPATH_W +am__isrc +INSTALL_DATA +INSTALL_SCRIPT +INSTALL_PROGRAM +target_os +target_vendor +target_cpu +target +host_os +host_vendor +host_cpu +host +build_os +build_vendor +build_cpu +build +target_alias +host_alias +build_alias +LIBS +ECHO_T +ECHO_N +ECHO_C +DEFS +mandir +localedir +libdir +psdir +pdfdir +dvidir +htmldir +infodir +docdir +oldincludedir +includedir +localstatedir +sharedstatedir +sysconfdir +datadir +datarootdir +libexecdir +sbindir +bindir +program_transform_name +prefix +exec_prefix +PACKAGE_URL +PACKAGE_BUGREPORT +PACKAGE_STRING +PACKAGE_VERSION +PACKAGE_TARNAME +PACKAGE_NAME +PATH_SEPARATOR +SHELL' ac_subst_files='' +ac_user_opts=' +enable_option_checking +enable_dependency_tracking +enable_maintainer_mode +enable_debug +enable_structs +enable_raw_api +enable_purify_safety +' ac_precious_vars='build_alias host_alias target_alias CCAS CCASFLAGS CPP -CPPFLAGS -CXX -CXXFLAGS -LDFLAGS -LIBS -CCC -CXXCPP -F77 -FFLAGS' +CPPFLAGS' # Initialize some variables set by options. ac_init_help= ac_init_version=false +ac_unrecognized_opts= +ac_unrecognized_sep= # The variables have the same names as the options, with # dashes changed to underlines. cache_file=/dev/null @@ -1060,13 +881,20 @@ datarootdir=$ac_optarg ;; -disable-* | --disable-*) - ac_feature=`expr "x$ac_option" : 'x-*disable-\(.*\)'` + ac_useropt=`expr "x$ac_option" : 'x-*disable-\(.*\)'` # Reject names that are not valid shell variable names. - expr "x$ac_feature" : ".*[^-._$as_cr_alnum]" >/dev/null && - { echo "$as_me: error: invalid feature name: $ac_feature" >&2 - { (exit 1); exit 1; }; } - ac_feature=`echo $ac_feature | sed 's/[-.]/_/g'` - eval enable_$ac_feature=no ;; + expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && + as_fn_error "invalid feature name: $ac_useropt" + ac_useropt_orig=$ac_useropt + ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` + case $ac_user_opts in + *" +"enable_$ac_useropt" +"*) ;; + *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--disable-$ac_useropt_orig" + ac_unrecognized_sep=', ';; + esac + eval enable_$ac_useropt=no ;; -docdir | --docdir | --docdi | --doc | --do) ac_prev=docdir ;; @@ -1079,13 +907,20 @@ dvidir=$ac_optarg ;; -enable-* | --enable-*) - ac_feature=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'` + ac_useropt=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'` # Reject names that are not valid shell variable names. - expr "x$ac_feature" : ".*[^-._$as_cr_alnum]" >/dev/null && - { echo "$as_me: error: invalid feature name: $ac_feature" >&2 - { (exit 1); exit 1; }; } - ac_feature=`echo $ac_feature | sed 's/[-.]/_/g'` - eval enable_$ac_feature=\$ac_optarg ;; + expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && + as_fn_error "invalid feature name: $ac_useropt" + ac_useropt_orig=$ac_useropt + ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` + case $ac_user_opts in + *" +"enable_$ac_useropt" +"*) ;; + *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--enable-$ac_useropt_orig" + ac_unrecognized_sep=', ';; + esac + eval enable_$ac_useropt=\$ac_optarg ;; -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \ | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \ @@ -1276,22 +1111,36 @@ ac_init_version=: ;; -with-* | --with-*) - ac_package=`expr "x$ac_option" : 'x-*with-\([^=]*\)'` + ac_useropt=`expr "x$ac_option" : 'x-*with-\([^=]*\)'` # Reject names that are not valid shell variable names. - expr "x$ac_package" : ".*[^-._$as_cr_alnum]" >/dev/null && - { echo "$as_me: error: invalid package name: $ac_package" >&2 - { (exit 1); exit 1; }; } - ac_package=`echo $ac_package | sed 's/[-.]/_/g'` - eval with_$ac_package=\$ac_optarg ;; + expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && + as_fn_error "invalid package name: $ac_useropt" + ac_useropt_orig=$ac_useropt + ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` + case $ac_user_opts in + *" +"with_$ac_useropt" +"*) ;; + *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--with-$ac_useropt_orig" + ac_unrecognized_sep=', ';; + esac + eval with_$ac_useropt=\$ac_optarg ;; -without-* | --without-*) - ac_package=`expr "x$ac_option" : 'x-*without-\(.*\)'` + ac_useropt=`expr "x$ac_option" : 'x-*without-\(.*\)'` # Reject names that are not valid shell variable names. - expr "x$ac_package" : ".*[^-._$as_cr_alnum]" >/dev/null && - { echo "$as_me: error: invalid package name: $ac_package" >&2 - { (exit 1); exit 1; }; } - ac_package=`echo $ac_package | sed 's/[-.]/_/g'` - eval with_$ac_package=no ;; + expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && + as_fn_error "invalid package name: $ac_useropt" + ac_useropt_orig=$ac_useropt + ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` + case $ac_user_opts in + *" +"with_$ac_useropt" +"*) ;; + *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--without-$ac_useropt_orig" + ac_unrecognized_sep=', ';; + esac + eval with_$ac_useropt=no ;; --x) # Obsolete; use --with-x. @@ -1311,25 +1160,25 @@ | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*) x_libraries=$ac_optarg ;; - -*) { echo "$as_me: error: unrecognized option: $ac_option -Try \`$0 --help' for more information." >&2 - { (exit 1); exit 1; }; } + -*) as_fn_error "unrecognized option: \`$ac_option' +Try \`$0 --help' for more information." ;; *=*) ac_envvar=`expr "x$ac_option" : 'x\([^=]*\)='` # Reject names that are not valid shell variable names. - expr "x$ac_envvar" : ".*[^_$as_cr_alnum]" >/dev/null && - { echo "$as_me: error: invalid variable name: $ac_envvar" >&2 - { (exit 1); exit 1; }; } + case $ac_envvar in #( + '' | [0-9]* | *[!_$as_cr_alnum]* ) + as_fn_error "invalid variable name: \`$ac_envvar'" ;; + esac eval $ac_envvar=\$ac_optarg export $ac_envvar ;; *) # FIXME: should be removed in autoconf 3.0. - echo "$as_me: WARNING: you should use --build, --host, --target" >&2 + $as_echo "$as_me: WARNING: you should use --build, --host, --target" >&2 expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null && - echo "$as_me: WARNING: invalid host type: $ac_option" >&2 + $as_echo "$as_me: WARNING: invalid host type: $ac_option" >&2 : ${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option} ;; @@ -1338,23 +1187,36 @@ if test -n "$ac_prev"; then ac_option=--`echo $ac_prev | sed 's/_/-/g'` - { echo "$as_me: error: missing argument to $ac_option" >&2 - { (exit 1); exit 1; }; } + as_fn_error "missing argument to $ac_option" +fi + +if test -n "$ac_unrecognized_opts"; then + case $enable_option_checking in + no) ;; + fatal) as_fn_error "unrecognized options: $ac_unrecognized_opts" ;; + *) $as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2 ;; + esac fi -# Be sure to have absolute directory names. +# Check all directory arguments for consistency. for ac_var in exec_prefix prefix bindir sbindir libexecdir datarootdir \ datadir sysconfdir sharedstatedir localstatedir includedir \ oldincludedir docdir infodir htmldir dvidir pdfdir psdir \ libdir localedir mandir do eval ac_val=\$$ac_var + # Remove trailing slashes. + case $ac_val in + */ ) + ac_val=`expr "X$ac_val" : 'X\(.*[^/]\)' \| "X$ac_val" : 'X\(.*\)'` + eval $ac_var=\$ac_val;; + esac + # Be sure to have absolute directory names. case $ac_val in [\\/$]* | ?:[\\/]* ) continue;; NONE | '' ) case $ac_var in *prefix ) continue;; esac;; esac - { echo "$as_me: error: expected an absolute directory name for --$ac_var: $ac_val" >&2 - { (exit 1); exit 1; }; } + as_fn_error "expected an absolute directory name for --$ac_var: $ac_val" done # There might be people who depend on the old broken behavior: `$host' @@ -1368,7 +1230,7 @@ if test "x$host_alias" != x; then if test "x$build_alias" = x; then cross_compiling=maybe - echo "$as_me: WARNING: If you wanted to set the --build type, don't use --host. + $as_echo "$as_me: WARNING: If you wanted to set the --build type, don't use --host. If a cross compiler is detected then cross compile mode will be used." >&2 elif test "x$build_alias" != "x$host_alias"; then cross_compiling=yes @@ -1384,23 +1246,21 @@ ac_pwd=`pwd` && test -n "$ac_pwd" && ac_ls_di=`ls -di .` && ac_pwd_ls_di=`cd "$ac_pwd" && ls -di .` || - { echo "$as_me: error: Working directory cannot be determined" >&2 - { (exit 1); exit 1; }; } + as_fn_error "working directory cannot be determined" test "X$ac_ls_di" = "X$ac_pwd_ls_di" || - { echo "$as_me: error: pwd does not report name of working directory" >&2 - { (exit 1); exit 1; }; } + as_fn_error "pwd does not report name of working directory" # Find the source files, if location was not specified. if test -z "$srcdir"; then ac_srcdir_defaulted=yes # Try the directory containing this script, then the parent directory. - ac_confdir=`$as_dirname -- "$0" || -$as_expr X"$0" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ - X"$0" : 'X\(//\)[^/]' \| \ - X"$0" : 'X\(//\)$' \| \ - X"$0" : 'X\(/\)' \| . 2>/dev/null || -echo X"$0" | + ac_confdir=`$as_dirname -- "$as_myself" || +$as_expr X"$as_myself" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$as_myself" : 'X\(//\)[^/]' \| \ + X"$as_myself" : 'X\(//\)$' \| \ + X"$as_myself" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X"$as_myself" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q @@ -1427,13 +1287,11 @@ fi if test ! -r "$srcdir/$ac_unique_file"; then test "$ac_srcdir_defaulted" = yes && srcdir="$ac_confdir or .." - { echo "$as_me: error: cannot find sources ($ac_unique_file) in $srcdir" >&2 - { (exit 1); exit 1; }; } + as_fn_error "cannot find sources ($ac_unique_file) in $srcdir" fi ac_msg="sources are in $srcdir, but \`cd $srcdir' does not work" ac_abs_confdir=`( - cd "$srcdir" && test -r "./$ac_unique_file" || { echo "$as_me: error: $ac_msg" >&2 - { (exit 1); exit 1; }; } + cd "$srcdir" && test -r "./$ac_unique_file" || as_fn_error "$ac_msg" pwd)` # When building in place, set srcdir=. if test "$ac_abs_confdir" = "$ac_pwd"; then @@ -1459,7 +1317,7 @@ # Omit some internal or obsolete options to make the list less imposing. # This message is too long to be a string in the A/UX 3.1 sh. cat <<_ACEOF -\`configure' configures libffi 3.0.5 to adapt to many kinds of systems. +\`configure' configures libffi 3.0.9 to adapt to many kinds of systems. Usage: $0 [OPTION]... [VAR=VALUE]... @@ -1481,9 +1339,9 @@ Installation directories: --prefix=PREFIX install architecture-independent files in PREFIX - [$ac_default_prefix] + [$ac_default_prefix] --exec-prefix=EPREFIX install architecture-dependent files in EPREFIX - [PREFIX] + [PREFIX] By default, \`make install' will install all the files in \`$ac_default_prefix/bin', \`$ac_default_prefix/lib' etc. You can specify @@ -1493,25 +1351,25 @@ For better control, use the options below. Fine tuning of the installation directories: - --bindir=DIR user executables [EPREFIX/bin] - --sbindir=DIR system admin executables [EPREFIX/sbin] - --libexecdir=DIR program executables [EPREFIX/libexec] - --sysconfdir=DIR read-only single-machine data [PREFIX/etc] - --sharedstatedir=DIR modifiable architecture-independent data [PREFIX/com] - --localstatedir=DIR modifiable single-machine data [PREFIX/var] - --libdir=DIR object code libraries [EPREFIX/lib] - --includedir=DIR C header files [PREFIX/include] - --oldincludedir=DIR C header files for non-gcc [/usr/include] - --datarootdir=DIR read-only arch.-independent data root [PREFIX/share] - --datadir=DIR read-only architecture-independent data [DATAROOTDIR] - --infodir=DIR info documentation [DATAROOTDIR/info] - --localedir=DIR locale-dependent data [DATAROOTDIR/locale] - --mandir=DIR man documentation [DATAROOTDIR/man] - --docdir=DIR documentation root [DATAROOTDIR/doc/libffi] - --htmldir=DIR html documentation [DOCDIR] - --dvidir=DIR dvi documentation [DOCDIR] - --pdfdir=DIR pdf documentation [DOCDIR] - --psdir=DIR ps documentation [DOCDIR] + --bindir=DIR user executables [EPREFIX/bin] + --sbindir=DIR system admin executables [EPREFIX/sbin] + --libexecdir=DIR program executables [EPREFIX/libexec] + --sysconfdir=DIR read-only single-machine data [PREFIX/etc] + --sharedstatedir=DIR modifiable architecture-independent data [PREFIX/com] + --localstatedir=DIR modifiable single-machine data [PREFIX/var] + --libdir=DIR object code libraries [EPREFIX/lib] + --includedir=DIR C header files [PREFIX/include] + --oldincludedir=DIR C header files for non-gcc [/usr/include] + --datarootdir=DIR read-only arch.-independent data root [PREFIX/share] + --datadir=DIR read-only architecture-independent data [DATAROOTDIR] + --infodir=DIR info documentation [DATAROOTDIR/info] + --localedir=DIR locale-dependent data [DATAROOTDIR/locale] + --mandir=DIR man documentation [DATAROOTDIR/man] + --docdir=DIR documentation root [DATAROOTDIR/doc/libffi] + --htmldir=DIR html documentation [DOCDIR] + --dvidir=DIR dvi documentation [DOCDIR] + --pdfdir=DIR pdf documentation [DOCDIR] + --psdir=DIR ps documentation [DOCDIR] _ACEOF cat <<\_ACEOF @@ -1530,20 +1388,16 @@ if test -n "$ac_init_help"; then case $ac_init_help in - short | recursive ) echo "Configuration of libffi 3.0.5:";; + short | recursive ) echo "Configuration of libffi 3.0.9:";; esac cat <<\_ACEOF Optional Features: + --disable-option-checking ignore unrecognized --enable/--with options --disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no) --enable-FEATURE[=ARG] include FEATURE [ARG=yes] --disable-dependency-tracking speeds up one-time build --enable-dependency-tracking do not reject slow dependency extractors - --enable-shared[=PKGS] build shared libraries [default=yes] - --enable-static[=PKGS] build static libraries [default=yes] - --enable-fast-install[=PKGS] - optimize for fast installation [default=yes] - --disable-libtool-lock avoid locking (might break parallel builds) --enable-maintainer-mode enable make rules and dependencies not useful (and sometimes confusing) to the casual installer --enable-debug debugging mode @@ -1551,30 +1405,17 @@ --disable-raw-api make the raw api unavailable --enable-purify-safety purify-safe mode -Optional Packages: - --with-PACKAGE[=ARG] use PACKAGE [ARG=yes] - --without-PACKAGE do not use PACKAGE (same as --with-PACKAGE=no) - --with-gnu-ld assume the C compiler uses GNU ld [default=no] - --with-pic try to use only PIC/non-PIC objects [default=use - both] - --with-tags[=TAGS] include additional configurations [automatic] - Some influential environment variables: CC C compiler command CFLAGS C compiler flags LDFLAGS linker flags, e.g. -L if you have libraries in a nonstandard directory LIBS libraries to pass to the linker, e.g. -l - CPPFLAGS C/C++/Objective C preprocessor flags, e.g. -I if + CPPFLAGS (Objective) C/C++ preprocessor flags, e.g. -I if you have headers in a nonstandard directory CCAS assembler compiler command (defaults to CC) CCASFLAGS assembler compiler flags (defaults to CFLAGS) CPP C preprocessor - CXX C++ compiler command - CXXFLAGS C++ compiler flags - CXXCPP C++ preprocessor - F77 Fortran 77 compiler command - FFLAGS Fortran 77 compiler flags Use these variables to override the choices made by `configure' or to help it to find libraries and programs with nonstandard names/locations. @@ -1587,15 +1428,17 @@ if test "$ac_init_help" = "recursive"; then # If there are subdirs, report their specific --help. for ac_dir in : $ac_subdirs_all; do test "x$ac_dir" = x: && continue - test -d "$ac_dir" || continue + test -d "$ac_dir" || + { cd "$srcdir" && ac_pwd=`pwd` && srcdir=. && test -d "$ac_dir"; } || + continue ac_builddir=. case "$ac_dir" in .) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; *) - ac_dir_suffix=/`echo "$ac_dir" | sed 's,^\.[\\/],,'` + ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'` # A ".." for each directory in $ac_dir_suffix. - ac_top_builddir_sub=`echo "$ac_dir_suffix" | sed 's,/[^\\/]*,/..,g;s,/,,'` + ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` case $ac_top_builddir_sub in "") ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; @@ -1631,7 +1474,7 @@ echo && $SHELL "$ac_srcdir/configure" --help=recursive else - echo "$as_me: WARNING: no configuration information is in $ac_dir" >&2 + $as_echo "$as_me: WARNING: no configuration information is in $ac_dir" >&2 fi || ac_status=$? cd "$ac_pwd" || { ac_status=$?; break; } done @@ -1640,79 +1483,614 @@ test -n "$ac_init_help" && exit $ac_status if $ac_init_version; then cat <<\_ACEOF -libffi configure 3.0.5 -generated by GNU Autoconf 2.61 +libffi configure 3.0.9 +generated by GNU Autoconf 2.65 -Copyright (C) 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001, -2002, 2003, 2004, 2005, 2006 Free Software Foundation, Inc. +Copyright (C) 2009 Free Software Foundation, Inc. This configure script is free software; the Free Software Foundation gives unlimited permission to copy, distribute and modify it. _ACEOF exit fi -cat >config.log <<_ACEOF -This file contains any messages produced by compilers while -running configure, to aid debugging if configure makes a mistake. -It was created by libffi $as_me 3.0.5, which was -generated by GNU Autoconf 2.61. Invocation command line was +## ------------------------ ## +## Autoconf initialization. ## +## ------------------------ ## + +# ac_fn_c_try_compile LINENO +# -------------------------- +# Try to compile conftest.$ac_ext, and return whether this succeeded. +ac_fn_c_try_compile () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + rm -f conftest.$ac_objext + if { { ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_compile") 2>conftest.err + ac_status=$? + if test -s conftest.err; then + grep -v '^ *+' conftest.err >conftest.er1 + cat conftest.er1 >&5 + mv -f conftest.er1 conftest.err + fi + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then : + ac_retval=0 +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_retval=1 +fi + eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;} + as_fn_set_status $ac_retval - $ $0 $@ +} # ac_fn_c_try_compile -_ACEOF -exec 5>>config.log +# ac_fn_c_try_cpp LINENO +# ---------------------- +# Try to preprocess conftest.$ac_ext, and return whether this succeeded. +ac_fn_c_try_cpp () { -cat <<_ASUNAME -## --------- ## -## Platform. ## -## --------- ## + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + if { { ac_try="$ac_cpp conftest.$ac_ext" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_cpp conftest.$ac_ext") 2>conftest.err + ac_status=$? + if test -s conftest.err; then + grep -v '^ *+' conftest.err >conftest.er1 + cat conftest.er1 >&5 + mv -f conftest.er1 conftest.err + fi + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } >/dev/null && { + test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || + test ! -s conftest.err + }; then : + ac_retval=0 +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 -hostname = `(hostname || uname -n) 2>/dev/null | sed 1q` -uname -m = `(uname -m) 2>/dev/null || echo unknown` -uname -r = `(uname -r) 2>/dev/null || echo unknown` -uname -s = `(uname -s) 2>/dev/null || echo unknown` -uname -v = `(uname -v) 2>/dev/null || echo unknown` + ac_retval=1 +fi + eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;} + as_fn_set_status $ac_retval -/usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null || echo unknown` -/bin/uname -X = `(/bin/uname -X) 2>/dev/null || echo unknown` +} # ac_fn_c_try_cpp -/bin/arch = `(/bin/arch) 2>/dev/null || echo unknown` -/usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null || echo unknown` -/usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null || echo unknown` -/usr/bin/hostinfo = `(/usr/bin/hostinfo) 2>/dev/null || echo unknown` -/bin/machine = `(/bin/machine) 2>/dev/null || echo unknown` -/usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null || echo unknown` -/bin/universe = `(/bin/universe) 2>/dev/null || echo unknown` +# ac_fn_c_check_header_mongrel LINENO HEADER VAR INCLUDES +# ------------------------------------------------------- +# Tests whether HEADER exists, giving a warning if it cannot be compiled using +# the include files in INCLUDES and setting the cache variable VAR +# accordingly. +ac_fn_c_check_header_mongrel () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + if { as_var=$3; eval "test \"\${$as_var+set}\" = set"; }; then : + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 +$as_echo_n "checking for $2... " >&6; } +if { as_var=$3; eval "test \"\${$as_var+set}\" = set"; }; then : + $as_echo_n "(cached) " >&6 +fi +eval ac_res=\$$3 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } +else + # Is the header compilable? +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 usability" >&5 +$as_echo_n "checking $2 usability... " >&6; } +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$4 +#include <$2> +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_header_compiler=yes +else + ac_header_compiler=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_compiler" >&5 +$as_echo "$ac_header_compiler" >&6; } -_ASUNAME +# Is the header present? +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 presence" >&5 +$as_echo_n "checking $2 presence... " >&6; } +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include <$2> +_ACEOF +if ac_fn_c_try_cpp "$LINENO"; then : + ac_header_preproc=yes +else + ac_header_preproc=no +fi +rm -f conftest.err conftest.$ac_ext +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_preproc" >&5 +$as_echo "$ac_header_preproc" >&6; } -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - echo "PATH: $as_dir" -done -IFS=$as_save_IFS +# So? What about this header? +case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in #(( + yes:no: ) + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&5 +$as_echo "$as_me: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5 +$as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;} + ;; + no:yes:* ) + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: present but cannot be compiled" >&5 +$as_echo "$as_me: WARNING: $2: present but cannot be compiled" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: check for missing prerequisite headers?" >&5 +$as_echo "$as_me: WARNING: $2: check for missing prerequisite headers?" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: see the Autoconf documentation" >&5 +$as_echo "$as_me: WARNING: $2: see the Autoconf documentation" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: section \"Present But Cannot Be Compiled\"" >&5 +$as_echo "$as_me: WARNING: $2: section \"Present But Cannot Be Compiled\"" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5 +$as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;} +( cat <<\_ASBOX +## ------------------------------------------- ## +## Report this to http://gcc.gnu.org/bugs.html ## +## ------------------------------------------- ## +_ASBOX + ) | sed "s/^/$as_me: WARNING: /" >&2 + ;; +esac + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 +$as_echo_n "checking for $2... " >&6; } +if { as_var=$3; eval "test \"\${$as_var+set}\" = set"; }; then : + $as_echo_n "(cached) " >&6 +else + eval "$3=\$ac_header_compiler" +fi +eval ac_res=\$$3 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } +fi + eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;} -} >&5 +} # ac_fn_c_check_header_mongrel -cat >&5 <<_ACEOF +# ac_fn_c_try_run LINENO +# ---------------------- +# Try to link conftest.$ac_ext, and return whether this succeeded. Assumes +# that executables *can* be run. +ac_fn_c_try_run () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + if { { ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_link") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } && { ac_try='./conftest$ac_exeext' + { { case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_try") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then : + ac_retval=0 +else + $as_echo "$as_me: program exited with status $ac_status" >&5 + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + ac_retval=$ac_status +fi + rm -rf conftest.dSYM conftest_ipa8_conftest.oo + eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;} + as_fn_set_status $ac_retval -## ----------- ## -## Core tests. ## -## ----------- ## +} # ac_fn_c_try_run +# ac_fn_c_check_header_compile LINENO HEADER VAR INCLUDES +# ------------------------------------------------------- +# Tests whether HEADER exists and can be compiled using the include files in +# INCLUDES, setting the cache variable VAR accordingly. +ac_fn_c_check_header_compile () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 +$as_echo_n "checking for $2... " >&6; } +if { as_var=$3; eval "test \"\${$as_var+set}\" = set"; }; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$4 +#include <$2> _ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + eval "$3=yes" +else + eval "$3=no" +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +eval ac_res=\$$3 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } + eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;} +} # ac_fn_c_check_header_compile -# Keep a trace of the command line. -# Strip out --no-create and --no-recursion so they do not pile up. -# Strip out --silent because we don't want to record it for future runs. -# Also quote any args containing shell meta-characters. -# Make two passes to allow for proper duplicate-argument suppression. -ac_configure_args= +# ac_fn_c_try_link LINENO +# ----------------------- +# Try to link conftest.$ac_ext, and return whether this succeeded. +ac_fn_c_try_link () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + rm -f conftest.$ac_objext conftest$ac_exeext + if { { ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_link") 2>conftest.err + ac_status=$? + if test -s conftest.err; then + grep -v '^ *+' conftest.err >conftest.er1 + cat conftest.er1 >&5 + mv -f conftest.er1 conftest.err + fi + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest$ac_exeext && { + test "$cross_compiling" = yes || + $as_test_x conftest$ac_exeext + }; then : + ac_retval=0 +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_retval=1 +fi + # Delete the IPA/IPO (Inter Procedural Analysis/Optimization) information + # created by the PGI compiler (conftest_ipa8_conftest.oo), as it would + # interfere with the next link command; also delete a directory that is + # left behind by Apple's compiler. We do this before executing the actions. + rm -rf conftest.dSYM conftest_ipa8_conftest.oo + eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;} + as_fn_set_status $ac_retval + +} # ac_fn_c_try_link + +# ac_fn_c_check_func LINENO FUNC VAR +# ---------------------------------- +# Tests whether FUNC exists, setting the cache variable VAR accordingly +ac_fn_c_check_func () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 +$as_echo_n "checking for $2... " >&6; } +if { as_var=$3; eval "test \"\${$as_var+set}\" = set"; }; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +/* Define $2 to an innocuous variant, in case declares $2. + For example, HP-UX 11i declares gettimeofday. */ +#define $2 innocuous_$2 + +/* System header to define __stub macros and hopefully few prototypes, + which can conflict with char $2 (); below. + Prefer to if __STDC__ is defined, since + exists even on freestanding compilers. */ + +#ifdef __STDC__ +# include +#else +# include +#endif + +#undef $2 + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char $2 (); +/* The GNU C library defines this for functions which it implements + to always fail with ENOSYS. Some functions are actually named + something starting with __ and the normal name is an alias. */ +#if defined __stub_$2 || defined __stub___$2 +choke me +#endif + +int +main () +{ +return $2 (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + eval "$3=yes" +else + eval "$3=no" +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +fi +eval ac_res=\$$3 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } + eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;} + +} # ac_fn_c_check_func + +# ac_fn_c_compute_int LINENO EXPR VAR INCLUDES +# -------------------------------------------- +# Tries to find the compile-time value of EXPR in a program that includes +# INCLUDES, setting VAR accordingly. Returns whether the value could be +# computed +ac_fn_c_compute_int () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + if test "$cross_compiling" = yes; then + # Depending upon the size, compute the lo and hi bounds. +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$4 +int +main () +{ +static int test_array [1 - 2 * !(($2) >= 0)]; +test_array [0] = 0 + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_lo=0 ac_mid=0 + while :; do + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$4 +int +main () +{ +static int test_array [1 - 2 * !(($2) <= $ac_mid)]; +test_array [0] = 0 + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_hi=$ac_mid; break +else + as_fn_arith $ac_mid + 1 && ac_lo=$as_val + if test $ac_lo -le $ac_mid; then + ac_lo= ac_hi= + break + fi + as_fn_arith 2 '*' $ac_mid + 1 && ac_mid=$as_val +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + done +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$4 +int +main () +{ +static int test_array [1 - 2 * !(($2) < 0)]; +test_array [0] = 0 + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_hi=-1 ac_mid=-1 + while :; do + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$4 +int +main () +{ +static int test_array [1 - 2 * !(($2) >= $ac_mid)]; +test_array [0] = 0 + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_lo=$ac_mid; break +else + as_fn_arith '(' $ac_mid ')' - 1 && ac_hi=$as_val + if test $ac_mid -le $ac_hi; then + ac_lo= ac_hi= + break + fi + as_fn_arith 2 '*' $ac_mid && ac_mid=$as_val +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + done +else + ac_lo= ac_hi= +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +# Binary search between lo and hi bounds. +while test "x$ac_lo" != "x$ac_hi"; do + as_fn_arith '(' $ac_hi - $ac_lo ')' / 2 + $ac_lo && ac_mid=$as_val + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$4 +int +main () +{ +static int test_array [1 - 2 * !(($2) <= $ac_mid)]; +test_array [0] = 0 + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_hi=$ac_mid +else + as_fn_arith '(' $ac_mid ')' + 1 && ac_lo=$as_val +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +done +case $ac_lo in #(( +?*) eval "$3=\$ac_lo"; ac_retval=0 ;; +'') ac_retval=1 ;; +esac + else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$4 +static long int longval () { return $2; } +static unsigned long int ulongval () { return $2; } +#include +#include +int +main () +{ + + FILE *f = fopen ("conftest.val", "w"); + if (! f) + return 1; + if (($2) < 0) + { + long int i = longval (); + if (i != ($2)) + return 1; + fprintf (f, "%ld", i); + } + else + { + unsigned long int i = ulongval (); + if (i != ($2)) + return 1; + fprintf (f, "%lu", i); + } + /* Do not output a trailing newline, as this causes \r\n confusion + on some platforms. */ + return ferror (f) || fclose (f) != 0; + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_run "$LINENO"; then : + echo >>conftest.val; read $3 config.log <<_ACEOF +This file contains any messages produced by compilers while +running configure, to aid debugging if configure makes a mistake. + +It was created by libffi $as_me 3.0.9, which was +generated by GNU Autoconf 2.65. Invocation command line was + + $ $0 $@ + +_ACEOF +exec 5>>config.log +{ +cat <<_ASUNAME +## --------- ## +## Platform. ## +## --------- ## + +hostname = `(hostname || uname -n) 2>/dev/null | sed 1q` +uname -m = `(uname -m) 2>/dev/null || echo unknown` +uname -r = `(uname -r) 2>/dev/null || echo unknown` +uname -s = `(uname -s) 2>/dev/null || echo unknown` +uname -v = `(uname -v) 2>/dev/null || echo unknown` + +/usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null || echo unknown` +/bin/uname -X = `(/bin/uname -X) 2>/dev/null || echo unknown` + +/bin/arch = `(/bin/arch) 2>/dev/null || echo unknown` +/usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null || echo unknown` +/usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null || echo unknown` +/usr/bin/hostinfo = `(/usr/bin/hostinfo) 2>/dev/null || echo unknown` +/bin/machine = `(/bin/machine) 2>/dev/null || echo unknown` +/usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null || echo unknown` +/bin/universe = `(/bin/universe) 2>/dev/null || echo unknown` + +_ASUNAME + +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + $as_echo "PATH: $as_dir" + done +IFS=$as_save_IFS + +} >&5 + +cat >&5 <<_ACEOF + + +## ----------- ## +## Core tests. ## +## ----------- ## + +_ACEOF + + +# Keep a trace of the command line. +# Strip out --no-create and --no-recursion so they do not pile up. +# Strip out --silent because we don't want to record it for future runs. +# Also quote any args containing shell meta-characters. +# Make two passes to allow for proper duplicate-argument suppression. +ac_configure_args= ac_configure_args0= ac_configure_args1= ac_must_keep_next=false @@ -1726,12 +2104,12 @@ | -silent | --silent | --silen | --sile | --sil) continue ;; *\'*) - ac_arg=`echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;; + ac_arg=`$as_echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;; esac case $ac_pass in - 1) ac_configure_args0="$ac_configure_args0 '$ac_arg'" ;; + 1) as_fn_append ac_configure_args0 " '$ac_arg'" ;; 2) - ac_configure_args1="$ac_configure_args1 '$ac_arg'" + as_fn_append ac_configure_args1 " '$ac_arg'" if test $ac_must_keep_next = true; then ac_must_keep_next=false # Got value, back to normal. else @@ -1747,13 +2125,13 @@ -* ) ac_must_keep_next=true ;; esac fi - ac_configure_args="$ac_configure_args '$ac_arg'" + as_fn_append ac_configure_args " '$ac_arg'" ;; esac done done -$as_unset ac_configure_args0 || test "${ac_configure_args0+set}" != set || { ac_configure_args0=; export ac_configure_args0; } -$as_unset ac_configure_args1 || test "${ac_configure_args1+set}" != set || { ac_configure_args1=; export ac_configure_args1; } +{ ac_configure_args0=; unset ac_configure_args0;} +{ ac_configure_args1=; unset ac_configure_args1;} # When interrupted or exit'd, cleanup temporary files, and complete # config.log. We remove comments because anyway the quotes in there @@ -1778,12 +2156,13 @@ case $ac_val in #( *${as_nl}*) case $ac_var in #( - *_cv_*) { echo "$as_me:$LINENO: WARNING: Cache variable $ac_var contains a newline." >&5 -echo "$as_me: WARNING: Cache variable $ac_var contains a newline." >&2;} ;; + *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 +$as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; esac case $ac_var in #( _ | IFS | as_nl) ;; #( - *) $as_unset $ac_var ;; + BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #( + *) { eval $ac_var=; unset $ac_var;} ;; esac ;; esac done @@ -1812,9 +2191,9 @@ do eval ac_val=\$$ac_var case $ac_val in - *\'\''*) ac_val=`echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; + *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; esac - echo "$ac_var='\''$ac_val'\''" + $as_echo "$ac_var='\''$ac_val'\''" done | sort echo @@ -1829,9 +2208,9 @@ do eval ac_val=\$$ac_var case $ac_val in - *\'\''*) ac_val=`echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; + *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; esac - echo "$ac_var='\''$ac_val'\''" + $as_echo "$ac_var='\''$ac_val'\''" done | sort echo fi @@ -1847,83 +2226,88 @@ echo fi test "$ac_signal" != 0 && - echo "$as_me: caught signal $ac_signal" - echo "$as_me: exit $exit_status" + $as_echo "$as_me: caught signal $ac_signal" + $as_echo "$as_me: exit $exit_status" } >&5 rm -f core *.core core.conftest.* && rm -f -r conftest* confdefs* conf$$* $ac_clean_files && exit $exit_status ' 0 for ac_signal in 1 2 13 15; do - trap 'ac_signal='$ac_signal'; { (exit 1); exit 1; }' $ac_signal + trap 'ac_signal='$ac_signal'; as_fn_exit 1' $ac_signal done ac_signal=0 # confdefs.h avoids OS command line length limits that DEFS can exceed. rm -f -r conftest* confdefs.h +$as_echo "/* confdefs.h */" > confdefs.h + # Predefined preprocessor variables. cat >>confdefs.h <<_ACEOF #define PACKAGE_NAME "$PACKAGE_NAME" _ACEOF - cat >>confdefs.h <<_ACEOF #define PACKAGE_TARNAME "$PACKAGE_TARNAME" _ACEOF - cat >>confdefs.h <<_ACEOF #define PACKAGE_VERSION "$PACKAGE_VERSION" _ACEOF - cat >>confdefs.h <<_ACEOF #define PACKAGE_STRING "$PACKAGE_STRING" _ACEOF - cat >>confdefs.h <<_ACEOF #define PACKAGE_BUGREPORT "$PACKAGE_BUGREPORT" _ACEOF +cat >>confdefs.h <<_ACEOF +#define PACKAGE_URL "$PACKAGE_URL" +_ACEOF + # Let the site file select an alternate cache file if it wants to. -# Prefer explicitly selected file to automatically selected ones. +# Prefer an explicitly selected file to automatically selected ones. +ac_site_file1=NONE +ac_site_file2=NONE if test -n "$CONFIG_SITE"; then - set x "$CONFIG_SITE" + ac_site_file1=$CONFIG_SITE elif test "x$prefix" != xNONE; then - set x "$prefix/share/config.site" "$prefix/etc/config.site" + ac_site_file1=$prefix/share/config.site + ac_site_file2=$prefix/etc/config.site else - set x "$ac_default_prefix/share/config.site" \ - "$ac_default_prefix/etc/config.site" + ac_site_file1=$ac_default_prefix/share/config.site + ac_site_file2=$ac_default_prefix/etc/config.site fi -shift -for ac_site_file +for ac_site_file in "$ac_site_file1" "$ac_site_file2" do - if test -r "$ac_site_file"; then - { echo "$as_me:$LINENO: loading site script $ac_site_file" >&5 -echo "$as_me: loading site script $ac_site_file" >&6;} + test "x$ac_site_file" = xNONE && continue + if test /dev/null != "$ac_site_file" && test -r "$ac_site_file"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: loading site script $ac_site_file" >&5 +$as_echo "$as_me: loading site script $ac_site_file" >&6;} sed 's/^/| /' "$ac_site_file" >&5 . "$ac_site_file" fi done if test -r "$cache_file"; then - # Some versions of bash will fail to source /dev/null (special - # files actually), so we avoid doing that. - if test -f "$cache_file"; then - { echo "$as_me:$LINENO: loading cache $cache_file" >&5 -echo "$as_me: loading cache $cache_file" >&6;} + # Some versions of bash will fail to source /dev/null (special files + # actually), so we avoid doing that. DJGPP emulates it as a regular file. + if test /dev/null != "$cache_file" && test -f "$cache_file"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: loading cache $cache_file" >&5 +$as_echo "$as_me: loading cache $cache_file" >&6;} case $cache_file in [\\/]* | ?:[\\/]* ) . "$cache_file";; *) . "./$cache_file";; esac fi else - { echo "$as_me:$LINENO: creating cache $cache_file" >&5 -echo "$as_me: creating cache $cache_file" >&6;} + { $as_echo "$as_me:${as_lineno-$LINENO}: creating cache $cache_file" >&5 +$as_echo "$as_me: creating cache $cache_file" >&6;} >$cache_file fi @@ -1937,99 +2321,79 @@ eval ac_new_val=\$ac_env_${ac_var}_value case $ac_old_set,$ac_new_set in set,) - { echo "$as_me:$LINENO: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5 -echo "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5 +$as_echo "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;} ac_cache_corrupted=: ;; ,set) - { echo "$as_me:$LINENO: error: \`$ac_var' was not set in the previous run" >&5 -echo "$as_me: error: \`$ac_var' was not set in the previous run" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was not set in the previous run" >&5 +$as_echo "$as_me: error: \`$ac_var' was not set in the previous run" >&2;} ac_cache_corrupted=: ;; ,);; *) if test "x$ac_old_val" != "x$ac_new_val"; then - { echo "$as_me:$LINENO: error: \`$ac_var' has changed since the previous run:" >&5 -echo "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;} - { echo "$as_me:$LINENO: former value: $ac_old_val" >&5 -echo "$as_me: former value: $ac_old_val" >&2;} - { echo "$as_me:$LINENO: current value: $ac_new_val" >&5 -echo "$as_me: current value: $ac_new_val" >&2;} - ac_cache_corrupted=: + # differences in whitespace do not lead to failure. + ac_old_val_w=`echo x $ac_old_val` + ac_new_val_w=`echo x $ac_new_val` + if test "$ac_old_val_w" != "$ac_new_val_w"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' has changed since the previous run:" >&5 +$as_echo "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;} + ac_cache_corrupted=: + else + { $as_echo "$as_me:${as_lineno-$LINENO}: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&5 +$as_echo "$as_me: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&2;} + eval $ac_var=\$ac_old_val + fi + { $as_echo "$as_me:${as_lineno-$LINENO}: former value: \`$ac_old_val'" >&5 +$as_echo "$as_me: former value: \`$ac_old_val'" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: current value: \`$ac_new_val'" >&5 +$as_echo "$as_me: current value: \`$ac_new_val'" >&2;} fi;; esac # Pass precious variables to config.status. if test "$ac_new_set" = set; then case $ac_new_val in - *\'*) ac_arg=$ac_var=`echo "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;; + *\'*) ac_arg=$ac_var=`$as_echo "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;; *) ac_arg=$ac_var=$ac_new_val ;; esac case " $ac_configure_args " in *" '$ac_arg' "*) ;; # Avoid dups. Use of quotes ensures accuracy. - *) ac_configure_args="$ac_configure_args '$ac_arg'" ;; + *) as_fn_append ac_configure_args " '$ac_arg'" ;; esac fi done if $ac_cache_corrupted; then - { echo "$as_me:$LINENO: error: changes in the environment can compromise the build" >&5 -echo "$as_me: error: changes in the environment can compromise the build" >&2;} - { { echo "$as_me:$LINENO: error: run \`make distclean' and/or \`rm $cache_file' and start over" >&5 -echo "$as_me: error: run \`make distclean' and/or \`rm $cache_file' and start over" >&2;} - { (exit 1); exit 1; }; } -fi - - - + { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: error: changes in the environment can compromise the build" >&5 +$as_echo "$as_me: error: changes in the environment can compromise the build" >&2;} + as_fn_error "run \`make distclean' and/or \`rm $cache_file' and start over" "$LINENO" 5 +fi +## -------------------- ## +## Main body of script. ## +## -------------------- ## +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu - - - - - - - - - - - - - - - - - - - -ac_ext=c -ac_cpp='$CPP $CPPFLAGS' -ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_c_compiler_gnu - - -ac_config_headers="$ac_config_headers fficonfig.h" +ac_config_headers="$ac_config_headers fficonfig.h" ac_aux_dir= for ac_dir in "$srcdir" "$srcdir/.." "$srcdir/../.."; do - if test -f "$ac_dir/install-sh"; then - ac_aux_dir=$ac_dir - ac_install_sh="$ac_aux_dir/install-sh -c" - break - elif test -f "$ac_dir/install.sh"; then - ac_aux_dir=$ac_dir - ac_install_sh="$ac_aux_dir/install.sh -c" - break - elif test -f "$ac_dir/shtool"; then - ac_aux_dir=$ac_dir - ac_install_sh="$ac_aux_dir/shtool install -c" - break - fi + for ac_t in install-sh install.sh shtool; do + if test -f "$ac_dir/$ac_t"; then + ac_aux_dir=$ac_dir + ac_install_sh="$ac_aux_dir/$ac_t -c" + break 2 + fi + done done if test -z "$ac_aux_dir"; then - { { echo "$as_me:$LINENO: error: cannot find install-sh or install.sh in \"$srcdir\" \"$srcdir/..\" \"$srcdir/../..\"" >&5 -echo "$as_me: error: cannot find install-sh or install.sh in \"$srcdir\" \"$srcdir/..\" \"$srcdir/../..\"" >&2;} - { (exit 1); exit 1; }; } + as_fn_error "cannot find install-sh, install.sh, or shtool in \"$srcdir\" \"$srcdir/..\" \"$srcdir/../..\"" "$LINENO" 5 fi # These three variables are undocumented and unsupported, @@ -2043,35 +2407,27 @@ # Make sure we can run config.sub. $SHELL "$ac_aux_dir/config.sub" sun4 >/dev/null 2>&1 || - { { echo "$as_me:$LINENO: error: cannot run $SHELL $ac_aux_dir/config.sub" >&5 -echo "$as_me: error: cannot run $SHELL $ac_aux_dir/config.sub" >&2;} - { (exit 1); exit 1; }; } - -{ echo "$as_me:$LINENO: checking build system type" >&5 -echo $ECHO_N "checking build system type... $ECHO_C" >&6; } -if test "${ac_cv_build+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 + as_fn_error "cannot run $SHELL $ac_aux_dir/config.sub" "$LINENO" 5 + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking build system type" >&5 +$as_echo_n "checking build system type... " >&6; } +if test "${ac_cv_build+set}" = set; then : + $as_echo_n "(cached) " >&6 else ac_build_alias=$build_alias test "x$ac_build_alias" = x && ac_build_alias=`$SHELL "$ac_aux_dir/config.guess"` test "x$ac_build_alias" = x && - { { echo "$as_me:$LINENO: error: cannot guess build type; you must specify one" >&5 -echo "$as_me: error: cannot guess build type; you must specify one" >&2;} - { (exit 1); exit 1; }; } + as_fn_error "cannot guess build type; you must specify one" "$LINENO" 5 ac_cv_build=`$SHELL "$ac_aux_dir/config.sub" $ac_build_alias` || - { { echo "$as_me:$LINENO: error: $SHELL $ac_aux_dir/config.sub $ac_build_alias failed" >&5 -echo "$as_me: error: $SHELL $ac_aux_dir/config.sub $ac_build_alias failed" >&2;} - { (exit 1); exit 1; }; } + as_fn_error "$SHELL $ac_aux_dir/config.sub $ac_build_alias failed" "$LINENO" 5 fi -{ echo "$as_me:$LINENO: result: $ac_cv_build" >&5 -echo "${ECHO_T}$ac_cv_build" >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_build" >&5 +$as_echo "$ac_cv_build" >&6; } case $ac_cv_build in *-*-*) ;; -*) { { echo "$as_me:$LINENO: error: invalid value of canonical build" >&5 -echo "$as_me: error: invalid value of canonical build" >&2;} - { (exit 1); exit 1; }; };; +*) as_fn_error "invalid value of canonical build" "$LINENO" 5;; esac build=$ac_cv_build ac_save_IFS=$IFS; IFS='-' @@ -2087,28 +2443,24 @@ case $build_os in *\ *) build_os=`echo "$build_os" | sed 's/ /-/g'`;; esac -{ echo "$as_me:$LINENO: checking host system type" >&5 -echo $ECHO_N "checking host system type... $ECHO_C" >&6; } -if test "${ac_cv_host+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking host system type" >&5 +$as_echo_n "checking host system type... " >&6; } +if test "${ac_cv_host+set}" = set; then : + $as_echo_n "(cached) " >&6 else if test "x$host_alias" = x; then ac_cv_host=$ac_cv_build else ac_cv_host=`$SHELL "$ac_aux_dir/config.sub" $host_alias` || - { { echo "$as_me:$LINENO: error: $SHELL $ac_aux_dir/config.sub $host_alias failed" >&5 -echo "$as_me: error: $SHELL $ac_aux_dir/config.sub $host_alias failed" >&2;} - { (exit 1); exit 1; }; } + as_fn_error "$SHELL $ac_aux_dir/config.sub $host_alias failed" "$LINENO" 5 fi fi -{ echo "$as_me:$LINENO: result: $ac_cv_host" >&5 -echo "${ECHO_T}$ac_cv_host" >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_host" >&5 +$as_echo "$ac_cv_host" >&6; } case $ac_cv_host in *-*-*) ;; -*) { { echo "$as_me:$LINENO: error: invalid value of canonical host" >&5 -echo "$as_me: error: invalid value of canonical host" >&2;} - { (exit 1); exit 1; }; };; +*) as_fn_error "invalid value of canonical host" "$LINENO" 5;; esac host=$ac_cv_host ac_save_IFS=$IFS; IFS='-' @@ -2124,28 +2476,24 @@ case $host_os in *\ *) host_os=`echo "$host_os" | sed 's/ /-/g'`;; esac -{ echo "$as_me:$LINENO: checking target system type" >&5 -echo $ECHO_N "checking target system type... $ECHO_C" >&6; } -if test "${ac_cv_target+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking target system type" >&5 +$as_echo_n "checking target system type... " >&6; } +if test "${ac_cv_target+set}" = set; then : + $as_echo_n "(cached) " >&6 else if test "x$target_alias" = x; then ac_cv_target=$ac_cv_host else ac_cv_target=`$SHELL "$ac_aux_dir/config.sub" $target_alias` || - { { echo "$as_me:$LINENO: error: $SHELL $ac_aux_dir/config.sub $target_alias failed" >&5 -echo "$as_me: error: $SHELL $ac_aux_dir/config.sub $target_alias failed" >&2;} - { (exit 1); exit 1; }; } + as_fn_error "$SHELL $ac_aux_dir/config.sub $target_alias failed" "$LINENO" 5 fi fi -{ echo "$as_me:$LINENO: result: $ac_cv_target" >&5 -echo "${ECHO_T}$ac_cv_target" >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_target" >&5 +$as_echo "$ac_cv_target" >&6; } case $ac_cv_target in *-*-*) ;; -*) { { echo "$as_me:$LINENO: error: invalid value of canonical target" >&5 -echo "$as_me: error: invalid value of canonical target" >&2;} - { (exit 1); exit 1; }; };; +*) as_fn_error "invalid value of canonical target" "$LINENO" 5;; esac target=$ac_cv_target ac_save_IFS=$IFS; IFS='-' @@ -2167,11 +2515,12 @@ test "$program_prefix$program_suffix$program_transform_name" = \ NONENONEs,x,x, && program_prefix=${target_alias}- + target_alias=${target_alias-$host_alias} . ${srcdir}/configure.host -am__api_version='1.10' +am__api_version='1.11' # Find a good install program. We prefer a C program (faster), # so one script is as good as another. But avoid the broken or @@ -2186,22 +2535,23 @@ # SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff" # OS/2's system install, which has a completely different semantic # ./install, which can be erroneously created by make from ./install.sh. -{ echo "$as_me:$LINENO: checking for a BSD-compatible install" >&5 -echo $ECHO_N "checking for a BSD-compatible install... $ECHO_C" >&6; } +# Reject install programs that cannot install multiple files. +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a BSD-compatible install" >&5 +$as_echo_n "checking for a BSD-compatible install... " >&6; } if test -z "$INSTALL"; then -if test "${ac_cv_path_install+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 +if test "${ac_cv_path_install+set}" = set; then : + $as_echo_n "(cached) " >&6 else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. - # Account for people who put trailing slashes in PATH elements. -case $as_dir/ in - ./ | .// | /cC/* | \ + # Account for people who put trailing slashes in PATH elements. +case $as_dir/ in #(( + ./ | .// | /[cC]/* | \ /etc/* | /usr/sbin/* | /usr/etc/* | /sbin/* | /usr/afsws/bin/* | \ - ?:\\/os2\\/install\\/* | ?:\\/OS2\\/INSTALL\\/* | \ + ?:[\\/]os2[\\/]install[\\/]* | ?:[\\/]OS2[\\/]INSTALL[\\/]* | \ /usr/ucb/* ) ;; *) # OSF1 and SCO ODT 3.0 have their own names for install. @@ -2219,17 +2569,29 @@ # program-specific install script used by HP pwplus--don't use. : else - ac_cv_path_install="$as_dir/$ac_prog$ac_exec_ext -c" - break 3 + rm -rf conftest.one conftest.two conftest.dir + echo one > conftest.one + echo two > conftest.two + mkdir conftest.dir + if "$as_dir/$ac_prog$ac_exec_ext" -c conftest.one conftest.two "`pwd`/conftest.dir" && + test -s conftest.one && test -s conftest.two && + test -s conftest.dir/conftest.one && + test -s conftest.dir/conftest.two + then + ac_cv_path_install="$as_dir/$ac_prog$ac_exec_ext -c" + break 3 + fi fi fi done done ;; esac -done + + done IFS=$as_save_IFS +rm -rf conftest.one conftest.two conftest.dir fi if test "${ac_cv_path_install+set}" = set; then @@ -2242,8 +2604,8 @@ INSTALL=$ac_install_sh fi fi -{ echo "$as_me:$LINENO: result: $INSTALL" >&5 -echo "${ECHO_T}$INSTALL" >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $INSTALL" >&5 +$as_echo "$INSTALL" >&6; } # Use test -z because SunOS4 sh mishandles braces in ${var-val}. # It thinks the first close brace ends the variable substitution. @@ -2253,21 +2615,34 @@ test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644' -{ echo "$as_me:$LINENO: checking whether build environment is sane" >&5 -echo $ECHO_N "checking whether build environment is sane... $ECHO_C" >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether build environment is sane" >&5 +$as_echo_n "checking whether build environment is sane... " >&6; } # Just in case sleep 1 echo timestamp > conftest.file +# Reject unsafe characters in $srcdir or the absolute working directory +# name. Accept space and tab only in the latter. +am_lf=' +' +case `pwd` in + *[\\\"\#\$\&\'\`$am_lf]*) + as_fn_error "unsafe absolute working directory name" "$LINENO" 5;; +esac +case $srcdir in + *[\\\"\#\$\&\'\`$am_lf\ \ ]*) + as_fn_error "unsafe srcdir value: \`$srcdir'" "$LINENO" 5;; +esac + # Do `set' in a subshell so we don't clobber the current shell's # arguments. Must try -L first in case configure is actually a # symlink; some systems play weird games with the mod time of symlinks # (eg FreeBSD returns the mod time of the symlink's containing # directory). if ( - set X `ls -Lt $srcdir/configure conftest.file 2> /dev/null` + set X `ls -Lt "$srcdir/configure" conftest.file 2> /dev/null` if test "$*" = "X"; then # -L didn't work. - set X `ls -t $srcdir/configure conftest.file` + set X `ls -t "$srcdir/configure" conftest.file` fi rm -f conftest.file if test "$*" != "X $srcdir/configure conftest.file" \ @@ -2277,11 +2652,8 @@ # if, for instance, CONFIG_SHELL is bash and it inherits a # broken ls alias from the environment. This has actually # happened. Such a system could not be considered "sane". - { { echo "$as_me:$LINENO: error: ls -t appears to fail. Make sure there is not a broken -alias in your environment" >&5 -echo "$as_me: error: ls -t appears to fail. Make sure there is not a broken -alias in your environment" >&2;} - { (exit 1); exit 1; }; } + as_fn_error "ls -t appears to fail. Make sure there is not a broken +alias in your environment" "$LINENO" 5 fi test "$2" = conftest.file @@ -2290,52 +2662,162 @@ # Ok. : else - { { echo "$as_me:$LINENO: error: newly created file is older than distributed files! -Check your system clock" >&5 -echo "$as_me: error: newly created file is older than distributed files! -Check your system clock" >&2;} - { (exit 1); exit 1; }; } + as_fn_error "newly created file is older than distributed files! +Check your system clock" "$LINENO" 5 fi -{ echo "$as_me:$LINENO: result: yes" >&5 -echo "${ECHO_T}yes" >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } test "$program_prefix" != NONE && program_transform_name="s&^&$program_prefix&;$program_transform_name" # Use a double $ so make ignores it. test "$program_suffix" != NONE && program_transform_name="s&\$&$program_suffix&;$program_transform_name" -# Double any \ or $. echo might interpret backslashes. +# Double any \ or $. # By default was `s,x,x', remove it if useless. -cat <<\_ACEOF >conftest.sed -s/[\\$]/&&/g;s/;s,x,x,$// -_ACEOF -program_transform_name=`echo $program_transform_name | sed -f conftest.sed` -rm -f conftest.sed +ac_script='s/[\\$]/&&/g;s/;s,x,x,$//' +program_transform_name=`$as_echo "$program_transform_name" | sed "$ac_script"` # expand $ac_aux_dir to an absolute path am_aux_dir=`cd $ac_aux_dir && pwd` -test x"${MISSING+set}" = xset || MISSING="\${SHELL} $am_aux_dir/missing" +if test x"${MISSING+set}" != xset; then + case $am_aux_dir in + *\ * | *\ *) + MISSING="\${SHELL} \"$am_aux_dir/missing\"" ;; + *) + MISSING="\${SHELL} $am_aux_dir/missing" ;; + esac +fi # Use eval to expand $SHELL if eval "$MISSING --run true"; then am_missing_run="$MISSING --run " else am_missing_run= - { echo "$as_me:$LINENO: WARNING: \`missing' script is too old or missing" >&5 -echo "$as_me: WARNING: \`missing' script is too old or missing" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: \`missing' script is too old or missing" >&5 +$as_echo "$as_me: WARNING: \`missing' script is too old or missing" >&2;} +fi + +if test x"${install_sh}" != xset; then + case $am_aux_dir in + *\ * | *\ *) + install_sh="\${SHELL} '$am_aux_dir/install-sh'" ;; + *) + install_sh="\${SHELL} $am_aux_dir/install-sh" + esac +fi + +# Installed binaries are usually stripped using `strip' when the user +# run `make install-strip'. However `strip' might not be the right +# tool to use in cross-compilation environments, therefore Automake +# will honor the `STRIP' environment variable to overrule this program. +if test "$cross_compiling" != no; then + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args. +set dummy ${ac_tool_prefix}strip; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_STRIP+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$STRIP"; then + ac_cv_prog_STRIP="$STRIP" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_STRIP="${ac_tool_prefix}strip" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +STRIP=$ac_cv_prog_STRIP +if test -n "$STRIP"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $STRIP" >&5 +$as_echo "$STRIP" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_STRIP"; then + ac_ct_STRIP=$STRIP + # Extract the first word of "strip", so it can be a program name with args. +set dummy strip; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_ac_ct_STRIP+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_STRIP"; then + ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_ac_ct_STRIP="strip" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP +if test -n "$ac_ct_STRIP"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_STRIP" >&5 +$as_echo "$ac_ct_STRIP" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_STRIP" = x; then + STRIP=":" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + STRIP=$ac_ct_STRIP + fi +else + STRIP="$ac_cv_prog_STRIP" +fi + fi +INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s" -{ echo "$as_me:$LINENO: checking for a thread-safe mkdir -p" >&5 -echo $ECHO_N "checking for a thread-safe mkdir -p... $ECHO_C" >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a thread-safe mkdir -p" >&5 +$as_echo_n "checking for a thread-safe mkdir -p... " >&6; } if test -z "$MKDIR_P"; then - if test "${ac_cv_path_mkdir+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 + if test "${ac_cv_path_mkdir+set}" = set; then : + $as_echo_n "(cached) " >&6 else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH$PATH_SEPARATOR/opt/sfw/bin do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. - for ac_prog in mkdir gmkdir; do + for ac_prog in mkdir gmkdir; do for ac_exec_ext in '' $ac_executable_extensions; do { test -f "$as_dir/$ac_prog$ac_exec_ext" && $as_test_x "$as_dir/$ac_prog$ac_exec_ext"; } || continue case `"$as_dir/$ac_prog$ac_exec_ext" --version 2>&1` in #( @@ -2347,11 +2829,12 @@ esac done done -done + done IFS=$as_save_IFS fi + test -d ./--version && rmdir ./--version if test "${ac_cv_path_mkdir+set}" = set; then MKDIR_P="$ac_cv_path_mkdir -p" else @@ -2359,12 +2842,11 @@ # value for MKDIR_P within a source directory, because that will # break other packages using the cache if that directory is # removed, or if the value is a relative name. - test -d ./--version && rmdir ./--version MKDIR_P="$ac_install_sh -d" fi fi -{ echo "$as_me:$LINENO: result: $MKDIR_P" >&5 -echo "${ECHO_T}$MKDIR_P" >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $MKDIR_P" >&5 +$as_echo "$MKDIR_P" >&6; } mkdir_p="$MKDIR_P" case $mkdir_p in @@ -2376,10 +2858,10 @@ do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 -{ echo "$as_me:$LINENO: checking for $ac_word" >&5 -echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } -if test "${ac_cv_prog_AWK+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_AWK+set}" = set; then : + $as_echo_n "(cached) " >&6 else if test -n "$AWK"; then ac_cv_prog_AWK="$AWK" # Let the user override the test. @@ -2389,36 +2871,37 @@ do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do + for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_AWK="$ac_prog" - echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done -done + done IFS=$as_save_IFS fi fi AWK=$ac_cv_prog_AWK if test -n "$AWK"; then - { echo "$as_me:$LINENO: result: $AWK" >&5 -echo "${ECHO_T}$AWK" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AWK" >&5 +$as_echo "$AWK" >&6; } else - { echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi test -n "$AWK" && break done -{ echo "$as_me:$LINENO: checking whether ${MAKE-make} sets \$(MAKE)" >&5 -echo $ECHO_N "checking whether ${MAKE-make} sets \$(MAKE)... $ECHO_C" >&6; } -set x ${MAKE-make}; ac_make=`echo "$2" | sed 's/+/p/g; s/[^a-zA-Z0-9_]/_/g'` -if { as_var=ac_cv_prog_make_${ac_make}_set; eval "test \"\${$as_var+set}\" = set"; }; then - echo $ECHO_N "(cached) $ECHO_C" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ${MAKE-make} sets \$(MAKE)" >&5 +$as_echo_n "checking whether ${MAKE-make} sets \$(MAKE)... " >&6; } +set x ${MAKE-make} +ac_make=`$as_echo "$2" | sed 's/+/p/g; s/[^a-zA-Z0-9_]/_/g'` +if { as_var=ac_cv_prog_make_${ac_make}_set; eval "test \"\${$as_var+set}\" = set"; }; then : + $as_echo_n "(cached) " >&6 else cat >conftest.make <<\_ACEOF SHELL = /bin/sh @@ -2435,12 +2918,12 @@ rm -f conftest.make fi if eval test \$ac_cv_prog_make_${ac_make}_set = yes; then - { echo "$as_me:$LINENO: result: yes" >&5 -echo "${ECHO_T}yes" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } SET_MAKE= else - { echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } SET_MAKE="MAKE=${MAKE-make}" fi @@ -2459,9 +2942,7 @@ am__isrc=' -I$(srcdir)' # test to see if srcdir already configured if test -f $srcdir/config.status; then - { { echo "$as_me:$LINENO: error: source directory already configured; run \"make distclean\" there first" >&5 -echo "$as_me: error: source directory already configured; run \"make distclean\" there first" >&2;} - { (exit 1); exit 1; }; } + as_fn_error "source directory already configured; run \"make distclean\" there first" "$LINENO" 5 fi fi @@ -2477,7 +2958,7 @@ # Define the identity of the package. PACKAGE='libffi' - VERSION='3.0.5' + VERSION='3.0.9' cat >>confdefs.h <<_ACEOF @@ -2505,112 +2986,6 @@ MAKEINFO=${MAKEINFO-"${am_missing_run}makeinfo"} -install_sh=${install_sh-"\$(SHELL) $am_aux_dir/install-sh"} - -# Installed binaries are usually stripped using `strip' when the user -# run `make install-strip'. However `strip' might not be the right -# tool to use in cross-compilation environments, therefore Automake -# will honor the `STRIP' environment variable to overrule this program. -if test "$cross_compiling" != no; then - if test -n "$ac_tool_prefix"; then - # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args. -set dummy ${ac_tool_prefix}strip; ac_word=$2 -{ echo "$as_me:$LINENO: checking for $ac_word" >&5 -echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } -if test "${ac_cv_prog_STRIP+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - if test -n "$STRIP"; then - ac_cv_prog_STRIP="$STRIP" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_STRIP="${ac_tool_prefix}strip" - echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done -done -IFS=$as_save_IFS - -fi -fi -STRIP=$ac_cv_prog_STRIP -if test -n "$STRIP"; then - { echo "$as_me:$LINENO: result: $STRIP" >&5 -echo "${ECHO_T}$STRIP" >&6; } -else - { echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6; } -fi - - -fi -if test -z "$ac_cv_prog_STRIP"; then - ac_ct_STRIP=$STRIP - # Extract the first word of "strip", so it can be a program name with args. -set dummy strip; ac_word=$2 -{ echo "$as_me:$LINENO: checking for $ac_word" >&5 -echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } -if test "${ac_cv_prog_ac_ct_STRIP+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - if test -n "$ac_ct_STRIP"; then - ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_ac_ct_STRIP="strip" - echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done -done -IFS=$as_save_IFS - -fi -fi -ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP -if test -n "$ac_ct_STRIP"; then - { echo "$as_me:$LINENO: result: $ac_ct_STRIP" >&5 -echo "${ECHO_T}$ac_ct_STRIP" >&6; } -else - { echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6; } -fi - - if test "x$ac_ct_STRIP" = x; then - STRIP=":" - else - case $cross_compiling:$ac_tool_warned in -yes:) -{ echo "$as_me:$LINENO: WARNING: In the future, Autoconf will not detect cross-tools -whose name does not start with the host triplet. If you think this -configuration is useful to you, please write to autoconf at gnu.org." >&5 -echo "$as_me: WARNING: In the future, Autoconf will not detect cross-tools -whose name does not start with the host triplet. If you think this -configuration is useful to you, please write to autoconf at gnu.org." >&2;} -ac_tool_warned=yes ;; -esac - STRIP=$ac_ct_STRIP - fi -else - STRIP="$ac_cv_prog_STRIP" -fi - -fi -INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s" - # We need awk for the "check" target. The system "awk" is bad on # some platforms. # Always define AMTAR for backward compatibility. @@ -2639,10 +3014,10 @@ if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args. set dummy ${ac_tool_prefix}gcc; ac_word=$2 -{ echo "$as_me:$LINENO: checking for $ac_word" >&5 -echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } -if test "${ac_cv_prog_CC+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_CC+set}" = set; then : + $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. @@ -2652,25 +3027,25 @@ do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do + for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_CC="${ac_tool_prefix}gcc" - echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done -done + done IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then - { echo "$as_me:$LINENO: result: $CC" >&5 -echo "${ECHO_T}$CC" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 +$as_echo "$CC" >&6; } else - { echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi @@ -2679,10 +3054,10 @@ ac_ct_CC=$CC # Extract the first word of "gcc", so it can be a program name with args. set dummy gcc; ac_word=$2 -{ echo "$as_me:$LINENO: checking for $ac_word" >&5 -echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } -if test "${ac_cv_prog_ac_ct_CC+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_ac_ct_CC+set}" = set; then : + $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. @@ -2692,25 +3067,25 @@ do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do + for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_ac_ct_CC="gcc" - echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done -done + done IFS=$as_save_IFS fi fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then - { echo "$as_me:$LINENO: result: $ac_ct_CC" >&5 -echo "${ECHO_T}$ac_ct_CC" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 +$as_echo "$ac_ct_CC" >&6; } else - { echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi if test "x$ac_ct_CC" = x; then @@ -2718,12 +3093,8 @@ else case $cross_compiling:$ac_tool_warned in yes:) -{ echo "$as_me:$LINENO: WARNING: In the future, Autoconf will not detect cross-tools -whose name does not start with the host triplet. If you think this -configuration is useful to you, please write to autoconf at gnu.org." >&5 -echo "$as_me: WARNING: In the future, Autoconf will not detect cross-tools -whose name does not start with the host triplet. If you think this -configuration is useful to you, please write to autoconf at gnu.org." >&2;} +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac CC=$ac_ct_CC @@ -2736,10 +3107,10 @@ if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args. set dummy ${ac_tool_prefix}cc; ac_word=$2 -{ echo "$as_me:$LINENO: checking for $ac_word" >&5 -echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } -if test "${ac_cv_prog_CC+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_CC+set}" = set; then : + $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. @@ -2749,25 +3120,25 @@ do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do + for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_CC="${ac_tool_prefix}cc" - echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done -done + done IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then - { echo "$as_me:$LINENO: result: $CC" >&5 -echo "${ECHO_T}$CC" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 +$as_echo "$CC" >&6; } else - { echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi @@ -2776,10 +3147,10 @@ if test -z "$CC"; then # Extract the first word of "cc", so it can be a program name with args. set dummy cc; ac_word=$2 -{ echo "$as_me:$LINENO: checking for $ac_word" >&5 -echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } -if test "${ac_cv_prog_CC+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_CC+set}" = set; then : + $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. @@ -2790,18 +3161,18 @@ do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do + for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then ac_prog_rejected=yes continue fi ac_cv_prog_CC="cc" - echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done -done + done IFS=$as_save_IFS if test $ac_prog_rejected = yes; then @@ -2820,11 +3191,11 @@ fi CC=$ac_cv_prog_CC if test -n "$CC"; then - { echo "$as_me:$LINENO: result: $CC" >&5 -echo "${ECHO_T}$CC" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 +$as_echo "$CC" >&6; } else - { echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi @@ -2835,10 +3206,10 @@ do # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. set dummy $ac_tool_prefix$ac_prog; ac_word=$2 -{ echo "$as_me:$LINENO: checking for $ac_word" >&5 -echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } -if test "${ac_cv_prog_CC+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_CC+set}" = set; then : + $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. @@ -2848,25 +3219,25 @@ do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do + for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_CC="$ac_tool_prefix$ac_prog" - echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done -done + done IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then - { echo "$as_me:$LINENO: result: $CC" >&5 -echo "${ECHO_T}$CC" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 +$as_echo "$CC" >&6; } else - { echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi @@ -2879,10 +3250,10 @@ do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 -{ echo "$as_me:$LINENO: checking for $ac_word" >&5 -echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } -if test "${ac_cv_prog_ac_ct_CC+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_ac_ct_CC+set}" = set; then : + $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. @@ -2892,25 +3263,25 @@ do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do + for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_ac_ct_CC="$ac_prog" - echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done -done + done IFS=$as_save_IFS fi fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then - { echo "$as_me:$LINENO: result: $ac_ct_CC" >&5 -echo "${ECHO_T}$ac_ct_CC" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 +$as_echo "$ac_ct_CC" >&6; } else - { echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi @@ -2922,12 +3293,8 @@ else case $cross_compiling:$ac_tool_warned in yes:) -{ echo "$as_me:$LINENO: WARNING: In the future, Autoconf will not detect cross-tools -whose name does not start with the host triplet. If you think this -configuration is useful to you, please write to autoconf at gnu.org." >&5 -echo "$as_me: WARNING: In the future, Autoconf will not detect cross-tools -whose name does not start with the host triplet. If you think this -configuration is useful to you, please write to autoconf at gnu.org." >&2;} +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac CC=$ac_ct_CC @@ -2937,51 +3304,37 @@ fi -test -z "$CC" && { { echo "$as_me:$LINENO: error: no acceptable C compiler found in \$PATH -See \`config.log' for more details." >&5 -echo "$as_me: error: no acceptable C compiler found in \$PATH -See \`config.log' for more details." >&2;} - { (exit 1); exit 1; }; } +test -z "$CC" && { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error "no acceptable C compiler found in \$PATH +See \`config.log' for more details." "$LINENO" 5; } # Provide some information about the compiler. -echo "$as_me:$LINENO: checking for C compiler version" >&5 -ac_compiler=`set X $ac_compile; echo $2` -{ (ac_try="$ac_compiler --version >&5" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_compiler --version >&5") 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } -{ (ac_try="$ac_compiler -v >&5" +$as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler version" >&5 +set X $ac_compile +ac_compiler=$2 +for ac_option in --version -v -V -qversion; do + { { ac_try="$ac_compiler $ac_option >&5" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_compiler -v >&5") 2>&5 +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_compiler $ac_option >&5") 2>conftest.err ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } -{ (ac_try="$ac_compiler -V >&5" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_compiler -V >&5") 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } + if test -s conftest.err; then + sed '10a\ +... rest of stderr output deleted ... + 10q' conftest.err >conftest.er1 + cat conftest.er1 >&5 + fi + rm -f conftest.er1 conftest.err + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } +done -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF +cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int @@ -2993,42 +3346,38 @@ } _ACEOF ac_clean_files_save=$ac_clean_files -ac_clean_files="$ac_clean_files a.out a.exe b.out" +ac_clean_files="$ac_clean_files a.out a.out.dSYM a.exe b.out" # Try to create an executable without -o first, disregard a.out. # It will help us diagnose broken compilers, and finding out an intuition # of exeext. -{ echo "$as_me:$LINENO: checking for C compiler default output file name" >&5 -echo $ECHO_N "checking for C compiler default output file name... $ECHO_C" >&6; } -ac_link_default=`echo "$ac_link" | sed 's/ -o *conftest[^ ]*//'` -# -# List of possible output files, starting from the most likely. -# The algorithm is not robust to junk in `.', hence go to wildcards (a.*) -# only as a last resort. b.out is created by i960 compilers. -ac_files='a_out.exe a.exe conftest.exe a.out conftest a.* conftest.* b.out' -# -# The IRIX 6 linker writes into existing files which may not be -# executable, retaining their permissions. Remove them first so a -# subsequent execution test works. +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the C compiler works" >&5 +$as_echo_n "checking whether the C compiler works... " >&6; } +ac_link_default=`$as_echo "$ac_link" | sed 's/ -o *conftest[^ ]*//'` + +# The possible output files: +ac_files="a.out conftest.exe conftest a.exe a_out.exe b.out conftest.*" + ac_rmfiles= for ac_file in $ac_files do case $ac_file in - *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.o | *.obj ) ;; + *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; * ) ac_rmfiles="$ac_rmfiles $ac_file";; esac done rm -f $ac_rmfiles -if { (ac_try="$ac_link_default" +if { { ac_try="$ac_link_default" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 (eval "$ac_link_default") 2>&5 ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; then + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then : # Autoconf-2.13 could set the ac_cv_exeext variable to `no'. # So ignore a value of `no', otherwise this would lead to `EXEEXT = no' # in a Makefile. We should not override ac_cv_exeext if it was cached, @@ -3038,14 +3387,14 @@ do test -f "$ac_file" || continue case $ac_file in - *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.o | *.obj ) + *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; [ab].out ) # We found the default executable, but exeext='' is most # certainly right. break;; *.* ) - if test "${ac_cv_exeext+set}" = set && test "$ac_cv_exeext" != no; + if test "${ac_cv_exeext+set}" = set && test "$ac_cv_exeext" != no; then :; else ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` fi @@ -3064,78 +3413,42 @@ else ac_file='' fi +if test -z "$ac_file"; then : + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +$as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +{ as_fn_set_status 77 +as_fn_error "C compiler cannot create executables +See \`config.log' for more details." "$LINENO" 5; }; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler default output file name" >&5 +$as_echo_n "checking for C compiler default output file name... " >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_file" >&5 +$as_echo "$ac_file" >&6; } +ac_exeext=$ac_cv_exeext -{ echo "$as_me:$LINENO: result: $ac_file" >&5 -echo "${ECHO_T}$ac_file" >&6; } -if test -z "$ac_file"; then - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -{ { echo "$as_me:$LINENO: error: C compiler cannot create executables -See \`config.log' for more details." >&5 -echo "$as_me: error: C compiler cannot create executables -See \`config.log' for more details." >&2;} - { (exit 77); exit 77; }; } -fi - -ac_exeext=$ac_cv_exeext - -# Check that the compiler produces executables we can run. If not, either -# the compiler is broken, or we cross compile. -{ echo "$as_me:$LINENO: checking whether the C compiler works" >&5 -echo $ECHO_N "checking whether the C compiler works... $ECHO_C" >&6; } -# FIXME: These cross compiler hacks should be removed for Autoconf 3.0 -# If not cross compiling, check that we can run a simple program. -if test "$cross_compiling" != yes; then - if { ac_try='./$ac_file' - { (case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_try") 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - cross_compiling=no - else - if test "$cross_compiling" = maybe; then - cross_compiling=yes - else - { { echo "$as_me:$LINENO: error: cannot run C compiled programs. -If you meant to cross compile, use \`--host'. -See \`config.log' for more details." >&5 -echo "$as_me: error: cannot run C compiled programs. -If you meant to cross compile, use \`--host'. -See \`config.log' for more details." >&2;} - { (exit 1); exit 1; }; } - fi - fi -fi -{ echo "$as_me:$LINENO: result: yes" >&5 -echo "${ECHO_T}yes" >&6; } - -rm -f a.out a.exe conftest$ac_cv_exeext b.out +rm -f -r a.out a.out.dSYM a.exe conftest$ac_cv_exeext b.out ac_clean_files=$ac_clean_files_save -# Check that the compiler produces executables we can run. If not, either -# the compiler is broken, or we cross compile. -{ echo "$as_me:$LINENO: checking whether we are cross compiling" >&5 -echo $ECHO_N "checking whether we are cross compiling... $ECHO_C" >&6; } -{ echo "$as_me:$LINENO: result: $cross_compiling" >&5 -echo "${ECHO_T}$cross_compiling" >&6; } - -{ echo "$as_me:$LINENO: checking for suffix of executables" >&5 -echo $ECHO_N "checking for suffix of executables... $ECHO_C" >&6; } -if { (ac_try="$ac_link" +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of executables" >&5 +$as_echo_n "checking for suffix of executables... " >&6; } +if { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 (eval "$ac_link") 2>&5 ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; then + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then : # If both `conftest.exe' and `conftest' are `present' (well, observable) # catch `conftest.exe'. For instance with Cygwin, `ls conftest' will # work properly (i.e., refer to `conftest.exe'), while it won't with @@ -3143,37 +3456,90 @@ for ac_file in conftest.exe conftest conftest.*; do test -f "$ac_file" || continue case $ac_file in - *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.o | *.obj ) ;; + *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` break;; * ) break;; esac done else - { { echo "$as_me:$LINENO: error: cannot compute suffix of executables: cannot compile and link -See \`config.log' for more details." >&5 -echo "$as_me: error: cannot compute suffix of executables: cannot compile and link -See \`config.log' for more details." >&2;} - { (exit 1); exit 1; }; } -fi - -rm -f conftest$ac_cv_exeext -{ echo "$as_me:$LINENO: result: $ac_cv_exeext" >&5 -echo "${ECHO_T}$ac_cv_exeext" >&6; } + { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error "cannot compute suffix of executables: cannot compile and link +See \`config.log' for more details." "$LINENO" 5; } +fi +rm -f conftest conftest$ac_cv_exeext +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_exeext" >&5 +$as_echo "$ac_cv_exeext" >&6; } rm -f conftest.$ac_ext EXEEXT=$ac_cv_exeext ac_exeext=$EXEEXT -{ echo "$as_me:$LINENO: checking for suffix of object files" >&5 -echo $ECHO_N "checking for suffix of object files... $ECHO_C" >&6; } -if test "${ac_cv_objext+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +int +main () +{ +FILE *f = fopen ("conftest.out", "w"); + return ferror (f) || fclose (f) != 0; + + ; + return 0; +} _ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF +ac_clean_files="$ac_clean_files conftest.out" +# Check that the compiler produces executables we can run. If not, either +# the compiler is broken, or we cross compile. +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are cross compiling" >&5 +$as_echo_n "checking whether we are cross compiling... " >&6; } +if test "$cross_compiling" != yes; then + { { ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_link") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } + if { ac_try='./conftest$ac_cv_exeext' + { { case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_try") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then + cross_compiling=no + else + if test "$cross_compiling" = maybe; then + cross_compiling=yes + else + { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error "cannot run C compiled programs. +If you meant to cross compile, use \`--host'. +See \`config.log' for more details." "$LINENO" 5; } + fi + fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $cross_compiling" >&5 +$as_echo "$cross_compiling" >&6; } + +rm -f conftest.$ac_ext conftest$ac_cv_exeext conftest.out +ac_clean_files=$ac_clean_files_save +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of object files" >&5 +$as_echo_n "checking for suffix of object files... " >&6; } +if test "${ac_cv_objext+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int @@ -3185,51 +3551,46 @@ } _ACEOF rm -f conftest.o conftest.obj -if { (ac_try="$ac_compile" +if { { ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 (eval "$ac_compile") 2>&5 ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; then + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then : for ac_file in conftest.o conftest.obj conftest.*; do test -f "$ac_file" || continue; case $ac_file in - *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf ) ;; + *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM ) ;; *) ac_cv_objext=`expr "$ac_file" : '.*\.\(.*\)'` break;; esac done else - echo "$as_me: failed program was:" >&5 + $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 -{ { echo "$as_me:$LINENO: error: cannot compute suffix of object files: cannot compile -See \`config.log' for more details." >&5 -echo "$as_me: error: cannot compute suffix of object files: cannot compile -See \`config.log' for more details." >&2;} - { (exit 1); exit 1; }; } +{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error "cannot compute suffix of object files: cannot compile +See \`config.log' for more details." "$LINENO" 5; } fi - rm -f conftest.$ac_cv_objext conftest.$ac_ext fi -{ echo "$as_me:$LINENO: result: $ac_cv_objext" >&5 -echo "${ECHO_T}$ac_cv_objext" >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_objext" >&5 +$as_echo "$ac_cv_objext" >&6; } OBJEXT=$ac_cv_objext ac_objext=$OBJEXT -{ echo "$as_me:$LINENO: checking whether we are using the GNU C compiler" >&5 -echo $ECHO_N "checking whether we are using the GNU C compiler... $ECHO_C" >&6; } -if test "${ac_cv_c_compiler_gnu+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C compiler" >&5 +$as_echo_n "checking whether we are using the GNU C compiler... " >&6; } +if test "${ac_cv_c_compiler_gnu+set}" = set; then : + $as_echo_n "(cached) " >&6 else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int @@ -3243,54 +3604,34 @@ return 0; } _ACEOF -rm -f conftest.$ac_objext -if { (ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then +if ac_fn_c_try_compile "$LINENO"; then : ac_compiler_gnu=yes else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_compiler_gnu=no + ac_compiler_gnu=no fi - rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_cv_c_compiler_gnu=$ac_compiler_gnu fi -{ echo "$as_me:$LINENO: result: $ac_cv_c_compiler_gnu" >&5 -echo "${ECHO_T}$ac_cv_c_compiler_gnu" >&6; } -GCC=`test $ac_compiler_gnu = yes && echo yes` +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_compiler_gnu" >&5 +$as_echo "$ac_cv_c_compiler_gnu" >&6; } +if test $ac_compiler_gnu = yes; then + GCC=yes +else + GCC= +fi ac_test_CFLAGS=${CFLAGS+set} ac_save_CFLAGS=$CFLAGS -{ echo "$as_me:$LINENO: checking whether $CC accepts -g" >&5 -echo $ECHO_N "checking whether $CC accepts -g... $ECHO_C" >&6; } -if test "${ac_cv_prog_cc_g+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC accepts -g" >&5 +$as_echo_n "checking whether $CC accepts -g... " >&6; } +if test "${ac_cv_prog_cc_g+set}" = set; then : + $as_echo_n "(cached) " >&6 else ac_save_c_werror_flag=$ac_c_werror_flag ac_c_werror_flag=yes ac_cv_prog_cc_g=no CFLAGS="-g" - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int @@ -3301,34 +3642,11 @@ return 0; } _ACEOF -rm -f conftest.$ac_objext -if { (ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then +if ac_fn_c_try_compile "$LINENO"; then : ac_cv_prog_cc_g=yes else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - CFLAGS="" - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF + CFLAGS="" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int @@ -3339,35 +3657,12 @@ return 0; } _ACEOF -rm -f conftest.$ac_objext -if { (ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then - : -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 +if ac_fn_c_try_compile "$LINENO"; then : - ac_c_werror_flag=$ac_save_c_werror_flag +else + ac_c_werror_flag=$ac_save_c_werror_flag CFLAGS="-g" - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int @@ -3378,42 +3673,18 @@ return 0; } _ACEOF -rm -f conftest.$ac_objext -if { (ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then +if ac_fn_c_try_compile "$LINENO"; then : ac_cv_prog_cc_g=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - fi - rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi - rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi - rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_c_werror_flag=$ac_save_c_werror_flag fi -{ echo "$as_me:$LINENO: result: $ac_cv_prog_cc_g" >&5 -echo "${ECHO_T}$ac_cv_prog_cc_g" >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_g" >&5 +$as_echo "$ac_cv_prog_cc_g" >&6; } if test "$ac_test_CFLAGS" = set; then CFLAGS=$ac_save_CFLAGS elif test $ac_cv_prog_cc_g = yes; then @@ -3429,18 +3700,14 @@ CFLAGS= fi fi -{ echo "$as_me:$LINENO: checking for $CC option to accept ISO C89" >&5 -echo $ECHO_N "checking for $CC option to accept ISO C89... $ECHO_C" >&6; } -if test "${ac_cv_prog_cc_c89+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $CC option to accept ISO C89" >&5 +$as_echo_n "checking for $CC option to accept ISO C89... " >&6; } +if test "${ac_cv_prog_cc_c89+set}" = set; then : + $as_echo_n "(cached) " >&6 else ac_cv_prog_cc_c89=no ac_save_CC=$CC -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF +cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include @@ -3497,31 +3764,9 @@ -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__" do CC="$ac_save_CC $ac_arg" - rm -f conftest.$ac_objext -if { (ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then + if ac_fn_c_try_compile "$LINENO"; then : ac_cv_prog_cc_c89=$ac_arg -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - fi - rm -f core conftest.err conftest.$ac_objext test "x$ac_cv_prog_cc_c89" != "xno" && break done @@ -3532,17 +3777,19 @@ # AC_CACHE_VAL case "x$ac_cv_prog_cc_c89" in x) - { echo "$as_me:$LINENO: result: none needed" >&5 -echo "${ECHO_T}none needed" >&6; } ;; + { $as_echo "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 +$as_echo "none needed" >&6; } ;; xno) - { echo "$as_me:$LINENO: result: unsupported" >&5 -echo "${ECHO_T}unsupported" >&6; } ;; + { $as_echo "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 +$as_echo "unsupported" >&6; } ;; *) CC="$CC $ac_cv_prog_cc_c89" - { echo "$as_me:$LINENO: result: $ac_cv_prog_cc_c89" >&5 -echo "${ECHO_T}$ac_cv_prog_cc_c89" >&6; } ;; + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c89" >&5 +$as_echo "$ac_cv_prog_cc_c89" >&6; } ;; esac +if test "x$ac_cv_prog_cc_c89" != xno; then : +fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' @@ -3557,44 +3804,44 @@ am_make=${MAKE-make} cat > confinc << 'END' am__doit: - @echo done + @echo this is the am__doit target .PHONY: am__doit END # If we don't find an include directive, just comment out the code. -{ echo "$as_me:$LINENO: checking for style of include used by $am_make" >&5 -echo $ECHO_N "checking for style of include used by $am_make... $ECHO_C" >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for style of include used by $am_make" >&5 +$as_echo_n "checking for style of include used by $am_make... " >&6; } am__include="#" am__quote= _am_result=none # First try GNU make style include. echo "include confinc" > confmf -# We grep out `Entering directory' and `Leaving directory' -# messages which can occur if `w' ends up in MAKEFLAGS. -# In particular we don't look at `^make:' because GNU make might -# be invoked under some other name (usually "gmake"), in which -# case it prints its new name instead of `make'. -if test "`$am_make -s -f confmf 2> /dev/null | grep -v 'ing directory'`" = "done"; then - am__include=include - am__quote= - _am_result=GNU -fi +# Ignore all kinds of additional output from `make'. +case `$am_make -s -f confmf 2> /dev/null` in #( +*the\ am__doit\ target*) + am__include=include + am__quote= + _am_result=GNU + ;; +esac # Now try BSD make style include. if test "$am__include" = "#"; then echo '.include "confinc"' > confmf - if test "`$am_make -s -f confmf 2> /dev/null`" = "done"; then - am__include=.include - am__quote="\"" - _am_result=BSD - fi + case `$am_make -s -f confmf 2> /dev/null` in #( + *the\ am__doit\ target*) + am__include=.include + am__quote="\"" + _am_result=BSD + ;; + esac fi -{ echo "$as_me:$LINENO: result: $_am_result" >&5 -echo "${ECHO_T}$_am_result" >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $_am_result" >&5 +$as_echo "$_am_result" >&6; } rm -f confinc confmf # Check whether --enable-dependency-tracking was given. -if test "${enable_dependency_tracking+set}" = set; then +if test "${enable_dependency_tracking+set}" = set; then : enableval=$enable_dependency_tracking; fi @@ -3614,10 +3861,10 @@ depcc="$CC" am_compiler_list= -{ echo "$as_me:$LINENO: checking dependency style of $depcc" >&5 -echo $ECHO_N "checking dependency style of $depcc... $ECHO_C" >&6; } -if test "${am_cv_CC_dependencies_compiler_type+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking dependency style of $depcc" >&5 +$as_echo_n "checking dependency style of $depcc... " >&6; } +if test "${am_cv_CC_dependencies_compiler_type+set}" = set; then : + $as_echo_n "(cached) " >&6 else if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then # We make a subdir and do the tests there. Otherwise we can end up @@ -3642,6 +3889,11 @@ if test "$am_compiler_list" = ""; then am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp` fi + am__universal=false + case " $depcc " in #( + *\ -arch\ *\ -arch\ *) am__universal=true ;; + esac + for depmode in $am_compiler_list; do # Setup a source with many dependencies, because some compilers # like to wrap large dependency lists on column 80 (with \), and @@ -3659,7 +3911,17 @@ done echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf + # We check with `-c' and `-o' for the sake of the "dashmstdout" + # mode. It turns out that the SunPro C++ compiler does not properly + # handle `-M -o', and we need to detect this. Also, some Intel + # versions had trouble with output in subdirs + am__obj=sub/conftest.${OBJEXT-o} + am__minus_obj="-o $am__obj" case $depmode in + gcc) + # This depmode causes a compiler race in universal mode. + test "$am__universal" = false || continue + ;; nosideeffect) # after this tag, mechanisms are not by side-effect, so they'll # only be used when explicitly requested @@ -3669,19 +3931,23 @@ break fi ;; + msvisualcpp | msvcmsys) + # This compiler won't grok `-c -o', but also, the minuso test has + # not run yet. These depmodes are late enough in the game, and + # so weak that their functioning should not be impacted. + am__obj=conftest.${OBJEXT-o} + am__minus_obj= + ;; none) break ;; esac - # We check with `-c' and `-o' for the sake of the "dashmstdout" - # mode. It turns out that the SunPro C++ compiler does not properly - # handle `-M -o', and we need to detect this. if depmode=$depmode \ - source=sub/conftest.c object=sub/conftest.${OBJEXT-o} \ + source=sub/conftest.c object=$am__obj \ depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ - $SHELL ./depcomp $depcc -c -o sub/conftest.${OBJEXT-o} sub/conftest.c \ + $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \ >/dev/null 2>conftest.err && grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 && grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && - grep sub/conftest.${OBJEXT-o} sub/conftest.Po > /dev/null 2>&1 && + grep $am__obj sub/conftest.Po > /dev/null 2>&1 && ${MAKE-make} -s -f confmf > /dev/null 2>&1; then # icc doesn't choke on unknown options, it will just issue warnings # or remarks (even with -Werror). So we grep stderr for any message @@ -3705,8 +3971,8 @@ fi fi -{ echo "$as_me:$LINENO: result: $am_cv_CC_dependencies_compiler_type" >&5 -echo "${ECHO_T}$am_cv_CC_dependencies_compiler_type" >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_CC_dependencies_compiler_type" >&5 +$as_echo "$am_cv_CC_dependencies_compiler_type" >&6; } CCDEPMODE=depmode=$am_cv_CC_dependencies_compiler_type if @@ -3724,6 +3990,7 @@ + # By default we simply use the C compiler to build assembly code. test "${CCAS+set}" = set || CCAS=$CC @@ -3733,10 +4000,10 @@ depcc="$CCAS" am_compiler_list= -{ echo "$as_me:$LINENO: checking dependency style of $depcc" >&5 -echo $ECHO_N "checking dependency style of $depcc... $ECHO_C" >&6; } -if test "${am_cv_CCAS_dependencies_compiler_type+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking dependency style of $depcc" >&5 +$as_echo_n "checking dependency style of $depcc... " >&6; } +if test "${am_cv_CCAS_dependencies_compiler_type+set}" = set; then : + $as_echo_n "(cached) " >&6 else if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then # We make a subdir and do the tests there. Otherwise we can end up @@ -3761,6 +4028,9 @@ if test "$am_compiler_list" = ""; then am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp` fi + am__universal=false + + for depmode in $am_compiler_list; do # Setup a source with many dependencies, because some compilers # like to wrap large dependency lists on column 80 (with \), and @@ -3778,7 +4048,17 @@ done echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf + # We check with `-c' and `-o' for the sake of the "dashmstdout" + # mode. It turns out that the SunPro C++ compiler does not properly + # handle `-M -o', and we need to detect this. Also, some Intel + # versions had trouble with output in subdirs + am__obj=sub/conftest.${OBJEXT-o} + am__minus_obj="-o $am__obj" case $depmode in + gcc) + # This depmode causes a compiler race in universal mode. + test "$am__universal" = false || continue + ;; nosideeffect) # after this tag, mechanisms are not by side-effect, so they'll # only be used when explicitly requested @@ -3788,19 +4068,23 @@ break fi ;; + msvisualcpp | msvcmsys) + # This compiler won't grok `-c -o', but also, the minuso test has + # not run yet. These depmodes are late enough in the game, and + # so weak that their functioning should not be impacted. + am__obj=conftest.${OBJEXT-o} + am__minus_obj= + ;; none) break ;; esac - # We check with `-c' and `-o' for the sake of the "dashmstdout" - # mode. It turns out that the SunPro C++ compiler does not properly - # handle `-M -o', and we need to detect this. if depmode=$depmode \ - source=sub/conftest.c object=sub/conftest.${OBJEXT-o} \ + source=sub/conftest.c object=$am__obj \ depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ - $SHELL ./depcomp $depcc -c -o sub/conftest.${OBJEXT-o} sub/conftest.c \ + $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \ >/dev/null 2>conftest.err && grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 && grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && - grep sub/conftest.${OBJEXT-o} sub/conftest.Po > /dev/null 2>&1 && + grep $am__obj sub/conftest.Po > /dev/null 2>&1 && ${MAKE-make} -s -f confmf > /dev/null 2>&1; then # icc doesn't choke on unknown options, it will just issue warnings # or remarks (even with -Werror). So we grep stderr for any message @@ -3824,8 +4108,8 @@ fi fi -{ echo "$as_me:$LINENO: result: $am_cv_CCAS_dependencies_compiler_type" >&5 -echo "${ECHO_T}$am_cv_CCAS_dependencies_compiler_type" >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_CCAS_dependencies_compiler_type" >&5 +$as_echo "$am_cv_CCAS_dependencies_compiler_type" >&6; } CCASDEPMODE=depmode=$am_cv_CCAS_dependencies_compiler_type if @@ -3840,22 +4124,18 @@ if test "x$CC" != xcc; then - { echo "$as_me:$LINENO: checking whether $CC and cc understand -c and -o together" >&5 -echo $ECHO_N "checking whether $CC and cc understand -c and -o together... $ECHO_C" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC and cc understand -c and -o together" >&5 +$as_echo_n "checking whether $CC and cc understand -c and -o together... " >&6; } else - { echo "$as_me:$LINENO: checking whether cc understands -c and -o together" >&5 -echo $ECHO_N "checking whether cc understands -c and -o together... $ECHO_C" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether cc understands -c and -o together" >&5 +$as_echo_n "checking whether cc understands -c and -o together... " >&6; } fi -set dummy $CC; ac_cc=`echo $2 | +set dummy $CC; ac_cc=`$as_echo "$2" | sed 's/[^a-zA-Z0-9_]/_/g;s/^[0-9]/_/'` -if { as_var=ac_cv_prog_cc_${ac_cc}_c_o; eval "test \"\${$as_var+set}\" = set"; }; then - echo $ECHO_N "(cached) $ECHO_C" >&6 +if { as_var=ac_cv_prog_cc_${ac_cc}_c_o; eval "test \"\${$as_var+set}\" = set"; }; then : + $as_echo_n "(cached) " >&6 else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int @@ -3871,58 +4151,63 @@ # existing .o file with -o, though they will create one. ac_try='$CC -c conftest.$ac_ext -o conftest2.$ac_objext >&5' rm -f conftest2.* -if { (case "(($ac_try" in +if { { case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 (eval "$ac_try") 2>&5 ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - test -f conftest2.$ac_objext && { (case "(($ac_try" in + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } && + test -f conftest2.$ac_objext && { { case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 (eval "$ac_try") 2>&5 ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then eval ac_cv_prog_cc_${ac_cc}_c_o=yes if test "x$CC" != xcc; then # Test first that cc exists at all. if { ac_try='cc -c conftest.$ac_ext >&5' - { (case "(($ac_try" in + { { case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 (eval "$ac_try") 2>&5 ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then ac_try='cc -c conftest.$ac_ext -o conftest2.$ac_objext >&5' rm -f conftest2.* - if { (case "(($ac_try" in + if { { case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 (eval "$ac_try") 2>&5 ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - test -f conftest2.$ac_objext && { (case "(($ac_try" in + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } && + test -f conftest2.$ac_objext && { { case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 (eval "$ac_try") 2>&5 ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then # cc works too. : @@ -3939,23 +4224,22 @@ fi if eval test \$ac_cv_prog_cc_${ac_cc}_c_o = yes; then - { echo "$as_me:$LINENO: result: yes" >&5 -echo "${ECHO_T}yes" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } else - { echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } -cat >>confdefs.h <<\_ACEOF -#define NO_MINUS_C_MINUS_O 1 -_ACEOF +$as_echo "#define NO_MINUS_C_MINUS_O 1" >>confdefs.h fi # FIXME: we rely on the cache variable name because # there is no other way. set dummy $CC -ac_cc=`echo $2 | sed 's/[^a-zA-Z0-9_]/_/g;s/^[0-9]/_/'` -if eval "test \"`echo '$ac_cv_prog_cc_'${ac_cc}_c_o`\" != yes"; then +am_cc=`echo $2 | sed 's/[^a-zA-Z0-9_]/_/g;s/^[0-9]/_/'` +eval am_t=\$ac_cv_prog_cc_${am_cc}_c_o +if test "$am_t" != yes; then # Losing compiler, so override with the script. # FIXME: It is wrong to rewrite CC. # But if we don't then we get into trouble of one sort or another. @@ -3965,176 +4249,206 @@ fi -# Check whether --enable-shared was given. -if test "${enable_shared+set}" = set; then - enableval=$enable_shared; p=${PACKAGE-default} - case $enableval in - yes) enable_shared=yes ;; - no) enable_shared=no ;; - *) - enable_shared=no - # Look at the argument we got. We use all the common list separators. - lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," - for pkg in $enableval; do - IFS="$lt_save_ifs" - if test "X$pkg" = "X$p"; then - enable_shared=yes - fi - done - IFS="$lt_save_ifs" - ;; - esac -else - enable_shared=yes -fi +AC_PROG_LIBTOOL -# Check whether --enable-static was given. -if test "${enable_static+set}" = set; then - enableval=$enable_static; p=${PACKAGE-default} - case $enableval in - yes) enable_static=yes ;; - no) enable_static=no ;; - *) - enable_static=no - # Look at the argument we got. We use all the common list separators. - lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," - for pkg in $enableval; do - IFS="$lt_save_ifs" - if test "X$pkg" = "X$p"; then - enable_static=yes - fi - done - IFS="$lt_save_ifs" - ;; - esac + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to enable maintainer-specific portions of Makefiles" >&5 +$as_echo_n "checking whether to enable maintainer-specific portions of Makefiles... " >&6; } + # Check whether --enable-maintainer-mode was given. +if test "${enable_maintainer_mode+set}" = set; then : + enableval=$enable_maintainer_mode; USE_MAINTAINER_MODE=$enableval else - enable_static=yes + USE_MAINTAINER_MODE=no fi - -# Check whether --enable-fast-install was given. -if test "${enable_fast_install+set}" = set; then - enableval=$enable_fast_install; p=${PACKAGE-default} - case $enableval in - yes) enable_fast_install=yes ;; - no) enable_fast_install=no ;; - *) - enable_fast_install=no - # Look at the argument we got. We use all the common list separators. - lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," - for pkg in $enableval; do - IFS="$lt_save_ifs" - if test "X$pkg" = "X$p"; then - enable_fast_install=yes - fi - done - IFS="$lt_save_ifs" - ;; - esac + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $USE_MAINTAINER_MODE" >&5 +$as_echo "$USE_MAINTAINER_MODE" >&6; } + if test $USE_MAINTAINER_MODE = yes; then + MAINTAINER_MODE_TRUE= + MAINTAINER_MODE_FALSE='#' else - enable_fast_install=yes + MAINTAINER_MODE_TRUE='#' + MAINTAINER_MODE_FALSE= fi + MAINT=$MAINTAINER_MODE_TRUE + + + -{ echo "$as_me:$LINENO: checking for a sed that does not truncate output" >&5 -echo $ECHO_N "checking for a sed that does not truncate output... $ECHO_C" >&6; } -if test "${lt_cv_path_SED+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to run the C preprocessor" >&5 +$as_echo_n "checking how to run the C preprocessor... " >&6; } +# On Suns, sometimes $CPP names a directory. +if test -n "$CPP" && test -d "$CPP"; then + CPP= +fi +if test -z "$CPP"; then + if test "${ac_cv_prog_CPP+set}" = set; then : + $as_echo_n "(cached) " >&6 else - # Loop through the user's path and test for sed and gsed. -# Then use that list of sed's as ones to test for truncation. -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH + # Double quotes because CPP needs to be expanded + for CPP in "$CC -E" "$CC -E -traditional-cpp" "/lib/cpp" + do + ac_preproc_ok=false +for ac_c_preproc_warn_flag in '' yes do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for lt_ac_prog in sed gsed; do - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$lt_ac_prog$ac_exec_ext" && $as_test_x "$as_dir/$lt_ac_prog$ac_exec_ext"; }; then - lt_ac_sed_list="$lt_ac_sed_list $as_dir/$lt_ac_prog$ac_exec_ext" - fi - done - done -done -IFS=$as_save_IFS -lt_ac_max=0 -lt_ac_count=0 -# Add /usr/xpg4/bin/sed as it is typically found on Solaris -# along with /bin/sed that truncates output. -for lt_ac_sed in $lt_ac_sed_list /usr/xpg4/bin/sed; do - test ! -f $lt_ac_sed && continue - cat /dev/null > conftest.in - lt_ac_count=0 - echo $ECHO_N "0123456789$ECHO_C" >conftest.in - # Check for GNU sed and select it if it is found. - if "$lt_ac_sed" --version 2>&1 < /dev/null | grep 'GNU' > /dev/null; then - lt_cv_path_SED=$lt_ac_sed - break - fi - while true; do - cat conftest.in conftest.in >conftest.tmp - mv conftest.tmp conftest.in - cp conftest.in conftest.nl - echo >>conftest.nl - $lt_ac_sed -e 's/a$//' < conftest.nl >conftest.out || break - cmp -s conftest.out conftest.nl || break - # 10000 chars as input seems more than enough - test $lt_ac_count -gt 10 && break - lt_ac_count=`expr $lt_ac_count + 1` - if test $lt_ac_count -gt $lt_ac_max; then - lt_ac_max=$lt_ac_count - lt_cv_path_SED=$lt_ac_sed - fi - done -done + # Use a header file that comes with gcc, so configuring glibc + # with a fresh cross-compiler works. + # Prefer to if __STDC__ is defined, since + # exists even on freestanding compilers. + # On the NeXT, cc -E runs the code through the compiler's parser, + # not just through cpp. "Syntax error" is here to catch this case. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#ifdef __STDC__ +# include +#else +# include +#endif + Syntax error +_ACEOF +if ac_fn_c_try_cpp "$LINENO"; then : + +else + # Broken: fails on valid input. +continue +fi +rm -f conftest.err conftest.$ac_ext + # OK, works on sane cases. Now check whether nonexistent headers + # can be detected and how. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +_ACEOF +if ac_fn_c_try_cpp "$LINENO"; then : + # Broken: success on invalid input. +continue +else + # Passes both tests. +ac_preproc_ok=: +break fi +rm -f conftest.err conftest.$ac_ext -SED=$lt_cv_path_SED +done +# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. +rm -f conftest.err conftest.$ac_ext +if $ac_preproc_ok; then : + break +fi -{ echo "$as_me:$LINENO: result: $SED" >&5 -echo "${ECHO_T}$SED" >&6; } + done + ac_cv_prog_CPP=$CPP -{ echo "$as_me:$LINENO: checking for grep that handles long lines and -e" >&5 -echo $ECHO_N "checking for grep that handles long lines and -e... $ECHO_C" >&6; } -if test "${ac_cv_path_GREP+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - # Extract the first word of "grep ggrep" to use in msg output -if test -z "$GREP"; then -set dummy grep ggrep; ac_prog_name=$2 -if test "${ac_cv_path_GREP+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 +fi + CPP=$ac_cv_prog_CPP else - ac_path_GREP_found=false -# Loop through the user's path and test for each of PROGNAME-LIST -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR + ac_cv_prog_CPP=$CPP +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $CPP" >&5 +$as_echo "$CPP" >&6; } +ac_preproc_ok=false +for ac_c_preproc_warn_flag in '' yes +do + # Use a header file that comes with gcc, so configuring glibc + # with a fresh cross-compiler works. + # Prefer to if __STDC__ is defined, since + # exists even on freestanding compilers. + # On the NeXT, cc -E runs the code through the compiler's parser, + # not just through cpp. "Syntax error" is here to catch this case. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#ifdef __STDC__ +# include +#else +# include +#endif + Syntax error +_ACEOF +if ac_fn_c_try_cpp "$LINENO"; then : + +else + # Broken: fails on valid input. +continue +fi +rm -f conftest.err conftest.$ac_ext + + # OK, works on sane cases. Now check whether nonexistent headers + # can be detected and how. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +_ACEOF +if ac_fn_c_try_cpp "$LINENO"; then : + # Broken: success on invalid input. +continue +else + # Passes both tests. +ac_preproc_ok=: +break +fi +rm -f conftest.err conftest.$ac_ext + +done +# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. +rm -f conftest.err conftest.$ac_ext +if $ac_preproc_ok; then : + +else + { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error "C preprocessor \"$CPP\" fails sanity check +See \`config.log' for more details." "$LINENO" 5; } +fi + +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for grep that handles long lines and -e" >&5 +$as_echo_n "checking for grep that handles long lines and -e... " >&6; } +if test "${ac_cv_path_GREP+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test -z "$GREP"; then + ac_path_GREP_found=false + # Loop through the user's path and test for each of PROGNAME-LIST + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. - for ac_prog in grep ggrep; do - for ac_exec_ext in '' $ac_executable_extensions; do - ac_path_GREP="$as_dir/$ac_prog$ac_exec_ext" - { test -f "$ac_path_GREP" && $as_test_x "$ac_path_GREP"; } || continue - # Check for GNU ac_path_GREP and select it if it is found. + for ac_prog in grep ggrep; do + for ac_exec_ext in '' $ac_executable_extensions; do + ac_path_GREP="$as_dir/$ac_prog$ac_exec_ext" + { test -f "$ac_path_GREP" && $as_test_x "$ac_path_GREP"; } || continue +# Check for GNU ac_path_GREP and select it if it is found. # Check for GNU $ac_path_GREP case `"$ac_path_GREP" --version 2>&1` in *GNU*) ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_found=:;; *) ac_count=0 - echo $ECHO_N "0123456789$ECHO_C" >"conftest.in" + $as_echo_n 0123456789 >"conftest.in" while : do cat "conftest.in" "conftest.in" >"conftest.tmp" mv "conftest.tmp" "conftest.in" cp "conftest.in" "conftest.nl" - echo 'GREP' >> "conftest.nl" + $as_echo 'GREP' >> "conftest.nl" "$ac_path_GREP" -e 'GREP$' -e '-(cannot match)-' < "conftest.nl" >"conftest.out" 2>/dev/null || break diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break - ac_count=`expr $ac_count + 1` + as_fn_arith $ac_count + 1 && ac_count=$as_val if test $ac_count -gt ${ac_path_GREP_max-0}; then # Best one so far, save it but keep looking for a better one ac_cv_path_GREP="$ac_path_GREP" @@ -4146,77 +4460,61 @@ rm -f conftest.in conftest.tmp conftest.nl conftest.out;; esac - - $ac_path_GREP_found && break 3 + $ac_path_GREP_found && break 3 + done + done done -done - -done IFS=$as_save_IFS - - -fi - -GREP="$ac_cv_path_GREP" -if test -z "$GREP"; then - { { echo "$as_me:$LINENO: error: no acceptable $ac_prog_name could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" >&5 -echo "$as_me: error: no acceptable $ac_prog_name could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" >&2;} - { (exit 1); exit 1; }; } -fi - + if test -z "$ac_cv_path_GREP"; then + as_fn_error "no acceptable grep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 + fi else ac_cv_path_GREP=$GREP fi - fi -{ echo "$as_me:$LINENO: result: $ac_cv_path_GREP" >&5 -echo "${ECHO_T}$ac_cv_path_GREP" >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_GREP" >&5 +$as_echo "$ac_cv_path_GREP" >&6; } GREP="$ac_cv_path_GREP" -{ echo "$as_me:$LINENO: checking for egrep" >&5 -echo $ECHO_N "checking for egrep... $ECHO_C" >&6; } -if test "${ac_cv_path_EGREP+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for egrep" >&5 +$as_echo_n "checking for egrep... " >&6; } +if test "${ac_cv_path_EGREP+set}" = set; then : + $as_echo_n "(cached) " >&6 else if echo a | $GREP -E '(a|b)' >/dev/null 2>&1 then ac_cv_path_EGREP="$GREP -E" else - # Extract the first word of "egrep" to use in msg output -if test -z "$EGREP"; then -set dummy egrep; ac_prog_name=$2 -if test "${ac_cv_path_EGREP+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else + if test -z "$EGREP"; then ac_path_EGREP_found=false -# Loop through the user's path and test for each of PROGNAME-LIST -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR + # Loop through the user's path and test for each of PROGNAME-LIST + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. - for ac_prog in egrep; do - for ac_exec_ext in '' $ac_executable_extensions; do - ac_path_EGREP="$as_dir/$ac_prog$ac_exec_ext" - { test -f "$ac_path_EGREP" && $as_test_x "$ac_path_EGREP"; } || continue - # Check for GNU ac_path_EGREP and select it if it is found. + for ac_prog in egrep; do + for ac_exec_ext in '' $ac_executable_extensions; do + ac_path_EGREP="$as_dir/$ac_prog$ac_exec_ext" + { test -f "$ac_path_EGREP" && $as_test_x "$ac_path_EGREP"; } || continue +# Check for GNU ac_path_EGREP and select it if it is found. # Check for GNU $ac_path_EGREP case `"$ac_path_EGREP" --version 2>&1` in *GNU*) ac_cv_path_EGREP="$ac_path_EGREP" ac_path_EGREP_found=:;; *) ac_count=0 - echo $ECHO_N "0123456789$ECHO_C" >"conftest.in" + $as_echo_n 0123456789 >"conftest.in" while : do cat "conftest.in" "conftest.in" >"conftest.tmp" mv "conftest.tmp" "conftest.in" cp "conftest.in" "conftest.nl" - echo 'EGREP' >> "conftest.nl" + $as_echo 'EGREP' >> "conftest.nl" "$ac_path_EGREP" 'EGREP$' < "conftest.nl" >"conftest.out" 2>/dev/null || break diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break - ac_count=`expr $ac_count + 1` + as_fn_arith $ac_count + 1 && ac_count=$as_val if test $ac_count -gt ${ac_path_EGREP_max-0}; then # Best one so far, save it but keep looking for a better one ac_cv_path_EGREP="$ac_path_EGREP" @@ -4228,17885 +4526,1046 @@ rm -f conftest.in conftest.tmp conftest.nl conftest.out;; esac - - $ac_path_EGREP_found && break 3 + $ac_path_EGREP_found && break 3 + done + done done -done - -done IFS=$as_save_IFS - - -fi - -EGREP="$ac_cv_path_EGREP" -if test -z "$EGREP"; then - { { echo "$as_me:$LINENO: error: no acceptable $ac_prog_name could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" >&5 -echo "$as_me: error: no acceptable $ac_prog_name could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" >&2;} - { (exit 1); exit 1; }; } -fi - + if test -z "$ac_cv_path_EGREP"; then + as_fn_error "no acceptable egrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 + fi else ac_cv_path_EGREP=$EGREP fi - fi fi -{ echo "$as_me:$LINENO: result: $ac_cv_path_EGREP" >&5 -echo "${ECHO_T}$ac_cv_path_EGREP" >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_EGREP" >&5 +$as_echo "$ac_cv_path_EGREP" >&6; } EGREP="$ac_cv_path_EGREP" +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for ANSI C header files" >&5 +$as_echo_n "checking for ANSI C header files... " >&6; } +if test "${ac_cv_header_stdc+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +#include +#include +#include + +int +main () +{ -# Check whether --with-gnu-ld was given. -if test "${with_gnu_ld+set}" = set; then - withval=$with_gnu_ld; test "$withval" = no || with_gnu_ld=yes -else - with_gnu_ld=no -fi - -ac_prog=ld -if test "$GCC" = yes; then - # Check if gcc -print-prog-name=ld gives a path. - { echo "$as_me:$LINENO: checking for ld used by $CC" >&5 -echo $ECHO_N "checking for ld used by $CC... $ECHO_C" >&6; } - case $host in - *-*-mingw*) - # gcc leaves a trailing carriage return which upsets mingw - ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;; - *) - ac_prog=`($CC -print-prog-name=ld) 2>&5` ;; - esac - case $ac_prog in - # Accept absolute paths. - [\\/]* | ?:[\\/]*) - re_direlt='/[^/][^/]*/\.\./' - # Canonicalize the pathname of ld - ac_prog=`echo $ac_prog| $SED 's%\\\\%/%g'` - while echo $ac_prog | grep "$re_direlt" > /dev/null 2>&1; do - ac_prog=`echo $ac_prog| $SED "s%$re_direlt%/%"` - done - test -z "$LD" && LD="$ac_prog" - ;; - "") - # If it fails, then pretend we aren't using GCC. - ac_prog=ld - ;; - *) - # If it is relative, then search for the first ld in PATH. - with_gnu_ld=unknown - ;; - esac -elif test "$with_gnu_ld" = yes; then - { echo "$as_me:$LINENO: checking for GNU ld" >&5 -echo $ECHO_N "checking for GNU ld... $ECHO_C" >&6; } -else - { echo "$as_me:$LINENO: checking for non-GNU ld" >&5 -echo $ECHO_N "checking for non-GNU ld... $ECHO_C" >&6; } -fi -if test "${lt_cv_path_LD+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - if test -z "$LD"; then - lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR - for ac_dir in $PATH; do - IFS="$lt_save_ifs" - test -z "$ac_dir" && ac_dir=. - if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then - lt_cv_path_LD="$ac_dir/$ac_prog" - # Check to see if the program is GNU ld. I'd rather use --version, - # but apparently some variants of GNU ld only accept -v. - # Break only if it was the GNU/non-GNU ld that we prefer. - case `"$lt_cv_path_LD" -v 2>&1 conftest.$ac_ext +/* end confdefs.h. */ +#include + +_ACEOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP "memchr" >/dev/null 2>&1; then : -LD="$lt_cv_path_LD" -if test -n "$LD"; then - { echo "$as_me:$LINENO: result: $LD" >&5 -echo "${ECHO_T}$LD" >&6; } else - { echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6; } + ac_cv_header_stdc=no fi -test -z "$LD" && { { echo "$as_me:$LINENO: error: no acceptable ld found in \$PATH" >&5 -echo "$as_me: error: no acceptable ld found in \$PATH" >&2;} - { (exit 1); exit 1; }; } -{ echo "$as_me:$LINENO: checking if the linker ($LD) is GNU ld" >&5 -echo $ECHO_N "checking if the linker ($LD) is GNU ld... $ECHO_C" >&6; } -if test "${lt_cv_prog_gnu_ld+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - # I'd rather use --version here, but apparently some GNU lds only accept -v. -case `$LD -v 2>&1 &5 -echo "${ECHO_T}$lt_cv_prog_gnu_ld" >&6; } -with_gnu_ld=$lt_cv_prog_gnu_ld - - -{ echo "$as_me:$LINENO: checking for $LD option to reload object files" >&5 -echo $ECHO_N "checking for $LD option to reload object files... $ECHO_C" >&6; } -if test "${lt_cv_ld_reload_flag+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - lt_cv_ld_reload_flag='-r' -fi -{ echo "$as_me:$LINENO: result: $lt_cv_ld_reload_flag" >&5 -echo "${ECHO_T}$lt_cv_ld_reload_flag" >&6; } -reload_flag=$lt_cv_ld_reload_flag -case $reload_flag in -"" | " "*) ;; -*) reload_flag=" $reload_flag" ;; -esac -reload_cmds='$LD$reload_flag -o $output$reload_objs' -case $host_os in - darwin*) - if test "$GCC" = yes; then - reload_cmds='$LTCC $LTCFLAGS -nostdlib ${wl}-r -o $output$reload_objs' - else - reload_cmds='$LD$reload_flag -o $output$reload_objs' - fi - ;; -esac -{ echo "$as_me:$LINENO: checking for BSD-compatible nm" >&5 -echo $ECHO_N "checking for BSD-compatible nm... $ECHO_C" >&6; } -if test "${lt_cv_path_NM+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - if test -n "$NM"; then - # Let the user override the test. - lt_cv_path_NM="$NM" -else - lt_nm_to_check="${ac_tool_prefix}nm" - if test -n "$ac_tool_prefix" && test "$build" = "$host"; then - lt_nm_to_check="$lt_nm_to_check nm" - fi - for lt_tmp_nm in $lt_nm_to_check; do - lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR - for ac_dir in $PATH /usr/ccs/bin/elf /usr/ccs/bin /usr/ucb /bin; do - IFS="$lt_save_ifs" - test -z "$ac_dir" && ac_dir=. - tmp_nm="$ac_dir/$lt_tmp_nm" - if test -f "$tmp_nm" || test -f "$tmp_nm$ac_exeext" ; then - # Check to see if the nm accepts a BSD-compat flag. - # Adding the `sed 1q' prevents false positives on HP-UX, which says: - # nm: unknown option "B" ignored - # Tru64's nm complains that /dev/null is an invalid object file - case `"$tmp_nm" -B /dev/null 2>&1 | sed '1q'` in - */dev/null* | *'Invalid file or object type'*) - lt_cv_path_NM="$tmp_nm -B" - break - ;; - *) - case `"$tmp_nm" -p /dev/null 2>&1 | sed '1q'` in - */dev/null*) - lt_cv_path_NM="$tmp_nm -p" - break - ;; - *) - lt_cv_path_NM=${lt_cv_path_NM="$tmp_nm"} # keep the first match, but - continue # so that we can try to find one that supports BSD flags - ;; - esac - ;; - esac - fi - done - IFS="$lt_save_ifs" - done - test -z "$lt_cv_path_NM" && lt_cv_path_NM=nm +if test $ac_cv_header_stdc = yes; then + # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include + +_ACEOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP "free" >/dev/null 2>&1; then : + +else + ac_cv_header_stdc=no fi +rm -f conftest* + fi -{ echo "$as_me:$LINENO: result: $lt_cv_path_NM" >&5 -echo "${ECHO_T}$lt_cv_path_NM" >&6; } -NM="$lt_cv_path_NM" - -{ echo "$as_me:$LINENO: checking whether ln -s works" >&5 -echo $ECHO_N "checking whether ln -s works... $ECHO_C" >&6; } -LN_S=$as_ln_s -if test "$LN_S" = "ln -s"; then - { echo "$as_me:$LINENO: result: yes" >&5 -echo "${ECHO_T}yes" >&6; } -else - { echo "$as_me:$LINENO: result: no, using $LN_S" >&5 -echo "${ECHO_T}no, using $LN_S" >&6; } -fi - -{ echo "$as_me:$LINENO: checking how to recognize dependent libraries" >&5 -echo $ECHO_N "checking how to recognize dependent libraries... $ECHO_C" >&6; } -if test "${lt_cv_deplibs_check_method+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - lt_cv_file_magic_cmd='$MAGIC_CMD' -lt_cv_file_magic_test_file= -lt_cv_deplibs_check_method='unknown' -# Need to set the preceding variable on all platforms that support -# interlibrary dependencies. -# 'none' -- dependencies not supported. -# `unknown' -- same as none, but documents that we really don't know. -# 'pass_all' -- all dependencies passed with no checks. -# 'test_compile' -- check by making test program. -# 'file_magic [[regex]]' -- check by looking for files in library path -# which responds to the $file_magic_cmd with a given extended regex. -# If you have `file' or equivalent on your system and you're not sure -# whether `pass_all' will *always* work, you probably want this one. - -case $host_os in -aix4* | aix5*) - lt_cv_deplibs_check_method=pass_all - ;; -beos*) - lt_cv_deplibs_check_method=pass_all - ;; +if test $ac_cv_header_stdc = yes; then + # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi. + if test "$cross_compiling" = yes; then : + : +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +#include +#if ((' ' & 0x0FF) == 0x020) +# define ISLOWER(c) ('a' <= (c) && (c) <= 'z') +# define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c)) +#else +# define ISLOWER(c) \ + (('a' <= (c) && (c) <= 'i') \ + || ('j' <= (c) && (c) <= 'r') \ + || ('s' <= (c) && (c) <= 'z')) +# define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c)) +#endif -bsdi[45]*) - lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (shared object|dynamic lib)' - lt_cv_file_magic_cmd='/usr/bin/file -L' - lt_cv_file_magic_test_file=/shlib/libc.so - ;; +#define XOR(e, f) (((e) && !(f)) || (!(e) && (f))) +int +main () +{ + int i; + for (i = 0; i < 256; i++) + if (XOR (islower (i), ISLOWER (i)) + || toupper (i) != TOUPPER (i)) + return 2; + return 0; +} +_ACEOF +if ac_fn_c_try_run "$LINENO"; then : -cygwin*) - # func_win32_libid is a shell function defined in ltmain.sh - lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL' - lt_cv_file_magic_cmd='func_win32_libid' - ;; +else + ac_cv_header_stdc=no +fi +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest.beam conftest.$ac_ext +fi -mingw* | pw32*) - # Base MSYS/MinGW do not provide the 'file' command needed by - # func_win32_libid shell function, so use a weaker test based on 'objdump', - # unless we find 'file', for example because we are cross-compiling. - if ( file / ) >/dev/null 2>&1; then - lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL' - lt_cv_file_magic_cmd='func_win32_libid' - else - lt_cv_deplibs_check_method='file_magic file format pei*-i386(.*architecture: i386)?' - lt_cv_file_magic_cmd='$OBJDUMP -f' - fi - ;; +fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_stdc" >&5 +$as_echo "$ac_cv_header_stdc" >&6; } +if test $ac_cv_header_stdc = yes; then -darwin* | rhapsody*) - lt_cv_deplibs_check_method=pass_all - ;; +$as_echo "#define STDC_HEADERS 1" >>confdefs.h -freebsd* | dragonfly*) - if echo __ELF__ | $CC -E - | grep __ELF__ > /dev/null; then - case $host_cpu in - i*86 ) - # Not sure whether the presence of OpenBSD here was a mistake. - # Let's accept both of them until this is cleared up. - lt_cv_deplibs_check_method='file_magic (FreeBSD|OpenBSD|DragonFly)/i[3-9]86 (compact )?demand paged shared library' - lt_cv_file_magic_cmd=/usr/bin/file - lt_cv_file_magic_test_file=`echo /usr/lib/libc.so.*` - ;; - esac - else - lt_cv_deplibs_check_method=pass_all - fi - ;; +fi -gnu*) - lt_cv_deplibs_check_method=pass_all - ;; +# On IRIX 5.3, sys/types and inttypes.h are conflicting. +for ac_header in sys/types.h sys/stat.h stdlib.h string.h memory.h strings.h \ + inttypes.h stdint.h unistd.h +do : + as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` +ac_fn_c_check_header_compile "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default +" +eval as_val=\$$as_ac_Header + if test "x$as_val" = x""yes; then : + cat >>confdefs.h <<_ACEOF +#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 +_ACEOF -hpux10.20* | hpux11*) - lt_cv_file_magic_cmd=/usr/bin/file - case $host_cpu in - ia64*) - lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF-[0-9][0-9]) shared object file - IA64' - lt_cv_file_magic_test_file=/usr/lib/hpux32/libc.so - ;; - hppa*64*) - lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF-[0-9][0-9]) shared object file - PA-RISC [0-9].[0-9]' - lt_cv_file_magic_test_file=/usr/lib/pa20_64/libc.sl - ;; - *) - lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|PA-RISC[0-9].[0-9]) shared library' - lt_cv_file_magic_test_file=/usr/lib/libc.sl - ;; - esac - ;; +fi -interix[3-9]*) - # PIC code is broken on Interix 3.x, that's why |\.a not |_pic\.a here - lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so|\.a)$' - ;; +done -irix5* | irix6* | nonstopux*) - case $LD in - *-32|*"-32 ") libmagic=32-bit;; - *-n32|*"-n32 ") libmagic=N32;; - *-64|*"-64 ") libmagic=64-bit;; - *) libmagic=never-match;; - esac - lt_cv_deplibs_check_method=pass_all - ;; -# This must be Linux ELF. -linux* | k*bsd*-gnu) - lt_cv_deplibs_check_method=pass_all - ;; +for ac_header in sys/mman.h +do : + ac_fn_c_check_header_mongrel "$LINENO" "sys/mman.h" "ac_cv_header_sys_mman_h" "$ac_includes_default" +if test "x$ac_cv_header_sys_mman_h" = x""yes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE_SYS_MMAN_H 1 +_ACEOF -netbsd*) - if echo __ELF__ | $CC -E - | grep __ELF__ > /dev/null; then - lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|_pic\.a)$' - else - lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so|_pic\.a)$' - fi - ;; +fi -newos6*) - lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (executable|dynamic lib)' - lt_cv_file_magic_cmd=/usr/bin/file - lt_cv_file_magic_test_file=/usr/lib/libnls.so - ;; +done -nto-qnx*) - lt_cv_deplibs_check_method=unknown - ;; +for ac_func in mmap +do : + ac_fn_c_check_func "$LINENO" "mmap" "ac_cv_func_mmap" +if test "x$ac_cv_func_mmap" = x""yes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE_MMAP 1 +_ACEOF -openbsd*) - if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then - lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|\.so|_pic\.a)$' - else - lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|_pic\.a)$' - fi - ;; +fi +done -osf3* | osf4* | osf5*) - lt_cv_deplibs_check_method=pass_all - ;; -rdos*) - lt_cv_deplibs_check_method=pass_all - ;; +ac_fn_c_check_header_mongrel "$LINENO" "sys/mman.h" "ac_cv_header_sys_mman_h" "$ac_includes_default" +if test "x$ac_cv_header_sys_mman_h" = x""yes; then : + libffi_header_sys_mman_h=yes +else + libffi_header_sys_mman_h=no +fi -solaris*) - lt_cv_deplibs_check_method=pass_all - ;; -sysv4 | sysv4.3*) - case $host_vendor in - motorola) - lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (shared object|dynamic lib) M[0-9][0-9]* Version [0-9]' - lt_cv_file_magic_test_file=`echo /usr/lib/libc.so*` - ;; - ncr) - lt_cv_deplibs_check_method=pass_all - ;; - sequent) - lt_cv_file_magic_cmd='/bin/file' - lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [LM]SB (shared object|dynamic lib )' - ;; - sni) - lt_cv_file_magic_cmd='/bin/file' - lt_cv_deplibs_check_method="file_magic ELF [0-9][0-9]*-bit [LM]SB dynamic lib" - lt_cv_file_magic_test_file=/lib/libc.so - ;; - siemens) - lt_cv_deplibs_check_method=pass_all - ;; - pc) - lt_cv_deplibs_check_method=pass_all - ;; - esac - ;; - -sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) - lt_cv_deplibs_check_method=pass_all - ;; -esac - -fi -{ echo "$as_me:$LINENO: result: $lt_cv_deplibs_check_method" >&5 -echo "${ECHO_T}$lt_cv_deplibs_check_method" >&6; } -file_magic_cmd=$lt_cv_file_magic_cmd -deplibs_check_method=$lt_cv_deplibs_check_method -test -z "$deplibs_check_method" && deplibs_check_method=unknown - - - - -# If no C compiler was specified, use CC. -LTCC=${LTCC-"$CC"} - -# If no C compiler flags were specified, use CFLAGS. -LTCFLAGS=${LTCFLAGS-"$CFLAGS"} - -# Allow CC to be a program name with arguments. -compiler=$CC - - -# Check whether --enable-libtool-lock was given. -if test "${enable_libtool_lock+set}" = set; then - enableval=$enable_libtool_lock; -fi - -test "x$enable_libtool_lock" != xno && enable_libtool_lock=yes - -# Some flags need to be propagated to the compiler or linker for good -# libtool support. -case $host in -ia64-*-hpux*) - # Find out which ABI we are using. - echo 'int i;' > conftest.$ac_ext - if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; then - case `/usr/bin/file conftest.$ac_objext` in - *ELF-32*) - HPUX_IA64_MODE="32" - ;; - *ELF-64*) - HPUX_IA64_MODE="64" - ;; - esac - fi - rm -rf conftest* - ;; -*-*-irix6*) - # Find out which ABI we are using. - echo '#line 4693 "configure"' > conftest.$ac_ext - if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; then - if test "$lt_cv_prog_gnu_ld" = yes; then - case `/usr/bin/file conftest.$ac_objext` in - *32-bit*) - LD="${LD-ld} -melf32bsmip" - ;; - *N32*) - LD="${LD-ld} -melf32bmipn32" - ;; - *64-bit*) - LD="${LD-ld} -melf64bmip" - ;; - esac - else - case `/usr/bin/file conftest.$ac_objext` in - *32-bit*) - LD="${LD-ld} -32" - ;; - *N32*) - LD="${LD-ld} -n32" - ;; - *64-bit*) - LD="${LD-ld} -64" - ;; - esac - fi - fi - rm -rf conftest* - ;; - -x86_64-*kfreebsd*-gnu|x86_64-*linux*|ppc*-*linux*|powerpc*-*linux*| \ -s390*-*linux*|sparc*-*linux*) - # Find out which ABI we are using. - echo 'int i;' > conftest.$ac_ext - if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; then - case `/usr/bin/file conftest.o` in - *32-bit*) - case $host in - x86_64-*kfreebsd*-gnu) - LD="${LD-ld} -m elf_i386_fbsd" - ;; - x86_64-*linux*) - LD="${LD-ld} -m elf_i386" - ;; - ppc64-*linux*|powerpc64-*linux*) - LD="${LD-ld} -m elf32ppclinux" - ;; - s390x-*linux*) - LD="${LD-ld} -m elf_s390" - ;; - sparc64-*linux*) - LD="${LD-ld} -m elf32_sparc" - ;; - esac - ;; - *64-bit*) - libsuff=64 - case $host in - x86_64-*kfreebsd*-gnu) - LD="${LD-ld} -m elf_x86_64_fbsd" - ;; - x86_64-*linux*) - LD="${LD-ld} -m elf_x86_64" - ;; - ppc*-*linux*|powerpc*-*linux*) - LD="${LD-ld} -m elf64ppc" - ;; - s390*-*linux*) - LD="${LD-ld} -m elf64_s390" - ;; - sparc*-*linux*) - LD="${LD-ld} -m elf64_sparc" - ;; - esac - ;; - esac - fi - rm -rf conftest* - ;; - -*-*-sco3.2v5*) - # On SCO OpenServer 5, we need -belf to get full-featured binaries. - SAVE_CFLAGS="$CFLAGS" - CFLAGS="$CFLAGS -belf" - { echo "$as_me:$LINENO: checking whether the C compiler needs -belf" >&5 -echo $ECHO_N "checking whether the C compiler needs -belf... $ECHO_C" >&6; } -if test "${lt_cv_cc_needs_belf+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - ac_ext=c -ac_cpp='$CPP $CPPFLAGS' -ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_c_compiler_gnu - - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ - -int -main () -{ - - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext conftest$ac_exeext -if { (ac_try="$ac_link" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_link") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest$ac_exeext && - $as_test_x conftest$ac_exeext; then - lt_cv_cc_needs_belf=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - lt_cv_cc_needs_belf=no -fi - -rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ - conftest$ac_exeext conftest.$ac_ext - ac_ext=c -ac_cpp='$CPP $CPPFLAGS' -ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_c_compiler_gnu - -fi -{ echo "$as_me:$LINENO: result: $lt_cv_cc_needs_belf" >&5 -echo "${ECHO_T}$lt_cv_cc_needs_belf" >&6; } - if test x"$lt_cv_cc_needs_belf" != x"yes"; then - # this is probably gcc 2.8.0, egcs 1.0 or newer; no need for -belf - CFLAGS="$SAVE_CFLAGS" - fi - ;; -sparc*-*solaris*) - # Find out which ABI we are using. - echo 'int i;' > conftest.$ac_ext - if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; then - case `/usr/bin/file conftest.o` in - *64-bit*) - case $lt_cv_prog_gnu_ld in - yes*) LD="${LD-ld} -m elf64_sparc" ;; - *) LD="${LD-ld} -64" ;; - esac - ;; - esac - fi - rm -rf conftest* - ;; - - -esac - -need_locks="$enable_libtool_lock" - - -ac_ext=c -ac_cpp='$CPP $CPPFLAGS' -ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_c_compiler_gnu -{ echo "$as_me:$LINENO: checking how to run the C preprocessor" >&5 -echo $ECHO_N "checking how to run the C preprocessor... $ECHO_C" >&6; } -# On Suns, sometimes $CPP names a directory. -if test -n "$CPP" && test -d "$CPP"; then - CPP= -fi -if test -z "$CPP"; then - if test "${ac_cv_prog_CPP+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - # Double quotes because CPP needs to be expanded - for CPP in "$CC -E" "$CC -E -traditional-cpp" "/lib/cpp" - do - ac_preproc_ok=false -for ac_c_preproc_warn_flag in '' yes -do - # Use a header file that comes with gcc, so configuring glibc - # with a fresh cross-compiler works. - # Prefer to if __STDC__ is defined, since - # exists even on freestanding compilers. - # On the NeXT, cc -E runs the code through the compiler's parser, - # not just through cpp. "Syntax error" is here to catch this case. - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -#ifdef __STDC__ -# include -#else -# include -#endif - Syntax error -_ACEOF -if { (ac_try="$ac_cpp conftest.$ac_ext" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } >/dev/null && { - test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || - test ! -s conftest.err - }; then - : -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - # Broken: fails on valid input. -continue -fi - -rm -f conftest.err conftest.$ac_ext - - # OK, works on sane cases. Now check whether nonexistent headers - # can be detected and how. - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -#include -_ACEOF -if { (ac_try="$ac_cpp conftest.$ac_ext" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } >/dev/null && { - test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || - test ! -s conftest.err - }; then - # Broken: success on invalid input. -continue -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - # Passes both tests. -ac_preproc_ok=: -break -fi - -rm -f conftest.err conftest.$ac_ext - -done -# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. -rm -f conftest.err conftest.$ac_ext -if $ac_preproc_ok; then - break -fi - - done - ac_cv_prog_CPP=$CPP - -fi - CPP=$ac_cv_prog_CPP -else - ac_cv_prog_CPP=$CPP -fi -{ echo "$as_me:$LINENO: result: $CPP" >&5 -echo "${ECHO_T}$CPP" >&6; } -ac_preproc_ok=false -for ac_c_preproc_warn_flag in '' yes -do - # Use a header file that comes with gcc, so configuring glibc - # with a fresh cross-compiler works. - # Prefer to if __STDC__ is defined, since - # exists even on freestanding compilers. - # On the NeXT, cc -E runs the code through the compiler's parser, - # not just through cpp. "Syntax error" is here to catch this case. - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -#ifdef __STDC__ -# include -#else -# include -#endif - Syntax error -_ACEOF -if { (ac_try="$ac_cpp conftest.$ac_ext" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } >/dev/null && { - test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || - test ! -s conftest.err - }; then - : -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - # Broken: fails on valid input. -continue -fi - -rm -f conftest.err conftest.$ac_ext - - # OK, works on sane cases. Now check whether nonexistent headers - # can be detected and how. - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -#include -_ACEOF -if { (ac_try="$ac_cpp conftest.$ac_ext" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } >/dev/null && { - test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || - test ! -s conftest.err - }; then - # Broken: success on invalid input. -continue -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - # Passes both tests. -ac_preproc_ok=: -break -fi - -rm -f conftest.err conftest.$ac_ext - -done -# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. -rm -f conftest.err conftest.$ac_ext -if $ac_preproc_ok; then - : -else - { { echo "$as_me:$LINENO: error: C preprocessor \"$CPP\" fails sanity check -See \`config.log' for more details." >&5 -echo "$as_me: error: C preprocessor \"$CPP\" fails sanity check -See \`config.log' for more details." >&2;} - { (exit 1); exit 1; }; } -fi - -ac_ext=c -ac_cpp='$CPP $CPPFLAGS' -ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_c_compiler_gnu - - -{ echo "$as_me:$LINENO: checking for ANSI C header files" >&5 -echo $ECHO_N "checking for ANSI C header files... $ECHO_C" >&6; } -if test "${ac_cv_header_stdc+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -#include -#include -#include -#include - -int -main () -{ - - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then - ac_cv_header_stdc=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_cv_header_stdc=no -fi - -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - -if test $ac_cv_header_stdc = yes; then - # SunOS 4.x string.h does not declare mem*, contrary to ANSI. - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -#include - -_ACEOF -if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | - $EGREP "memchr" >/dev/null 2>&1; then - : -else - ac_cv_header_stdc=no -fi -rm -f conftest* - -fi - -if test $ac_cv_header_stdc = yes; then - # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI. - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -#include - -_ACEOF -if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | - $EGREP "free" >/dev/null 2>&1; then - : -else - ac_cv_header_stdc=no -fi -rm -f conftest* - -fi - -if test $ac_cv_header_stdc = yes; then - # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi. - if test "$cross_compiling" = yes; then - : -else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -#include -#include -#if ((' ' & 0x0FF) == 0x020) -# define ISLOWER(c) ('a' <= (c) && (c) <= 'z') -# define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c)) -#else -# define ISLOWER(c) \ - (('a' <= (c) && (c) <= 'i') \ - || ('j' <= (c) && (c) <= 'r') \ - || ('s' <= (c) && (c) <= 'z')) -# define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c)) -#endif - -#define XOR(e, f) (((e) && !(f)) || (!(e) && (f))) -int -main () -{ - int i; - for (i = 0; i < 256; i++) - if (XOR (islower (i), ISLOWER (i)) - || toupper (i) != TOUPPER (i)) - return 2; - return 0; -} -_ACEOF -rm -f conftest$ac_exeext -if { (ac_try="$ac_link" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_link") 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { ac_try='./conftest$ac_exeext' - { (case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_try") 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - : -else - echo "$as_me: program exited with status $ac_status" >&5 -echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -( exit $ac_status ) -ac_cv_header_stdc=no -fi -rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext -fi - - -fi -fi -{ echo "$as_me:$LINENO: result: $ac_cv_header_stdc" >&5 -echo "${ECHO_T}$ac_cv_header_stdc" >&6; } -if test $ac_cv_header_stdc = yes; then - -cat >>confdefs.h <<\_ACEOF -#define STDC_HEADERS 1 -_ACEOF - -fi - -# On IRIX 5.3, sys/types and inttypes.h are conflicting. - - - - - - - - - -for ac_header in sys/types.h sys/stat.h stdlib.h string.h memory.h strings.h \ - inttypes.h stdint.h unistd.h -do -as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh` -{ echo "$as_me:$LINENO: checking for $ac_header" >&5 -echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6; } -if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default - -#include <$ac_header> -_ACEOF -rm -f conftest.$ac_objext -if { (ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then - eval "$as_ac_Header=yes" -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - eval "$as_ac_Header=no" -fi - -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -fi -ac_res=`eval echo '${'$as_ac_Header'}'` - { echo "$as_me:$LINENO: result: $ac_res" >&5 -echo "${ECHO_T}$ac_res" >&6; } -if test `eval echo '${'$as_ac_Header'}'` = yes; then - cat >>confdefs.h <<_ACEOF -#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1 -_ACEOF - -fi - -done - - - -for ac_header in dlfcn.h -do -as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh` -if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then - { echo "$as_me:$LINENO: checking for $ac_header" >&5 -echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6; } -if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -fi -ac_res=`eval echo '${'$as_ac_Header'}'` - { echo "$as_me:$LINENO: result: $ac_res" >&5 -echo "${ECHO_T}$ac_res" >&6; } -else - # Is the header compilable? -{ echo "$as_me:$LINENO: checking $ac_header usability" >&5 -echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6; } -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default -#include <$ac_header> -_ACEOF -rm -f conftest.$ac_objext -if { (ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then - ac_header_compiler=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_header_compiler=no -fi - -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -{ echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 -echo "${ECHO_T}$ac_header_compiler" >&6; } - -# Is the header present? -{ echo "$as_me:$LINENO: checking $ac_header presence" >&5 -echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6; } -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -#include <$ac_header> -_ACEOF -if { (ac_try="$ac_cpp conftest.$ac_ext" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } >/dev/null && { - test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || - test ! -s conftest.err - }; then - ac_header_preproc=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_header_preproc=no -fi - -rm -f conftest.err conftest.$ac_ext -{ echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 -echo "${ECHO_T}$ac_header_preproc" >&6; } - -# So? What about this header? -case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in - yes:no: ) - { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5 -echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5 -echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;} - ac_header_preproc=yes - ;; - no:yes:* ) - { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5 -echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: check for missing prerequisite headers?" >&5 -echo "$as_me: WARNING: $ac_header: check for missing prerequisite headers?" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5 -echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&5 -echo "$as_me: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5 -echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5 -echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;} - ( cat <<\_ASBOX -## ------------------------------------------- ## -## Report this to http://gcc.gnu.org/bugs.html ## -## ------------------------------------------- ## -_ASBOX - ) | sed "s/^/$as_me: WARNING: /" >&2 - ;; -esac -{ echo "$as_me:$LINENO: checking for $ac_header" >&5 -echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6; } -if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - eval "$as_ac_Header=\$ac_header_preproc" -fi -ac_res=`eval echo '${'$as_ac_Header'}'` - { echo "$as_me:$LINENO: result: $ac_res" >&5 -echo "${ECHO_T}$ac_res" >&6; } - -fi -if test `eval echo '${'$as_ac_Header'}'` = yes; then - cat >>confdefs.h <<_ACEOF -#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1 -_ACEOF - -fi - -done - -ac_ext=cpp -ac_cpp='$CXXCPP $CPPFLAGS' -ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_cxx_compiler_gnu -if test -z "$CXX"; then - if test -n "$CCC"; then - CXX=$CCC - else - if test -n "$ac_tool_prefix"; then - for ac_prog in g++ c++ gpp aCC CC cxx cc++ cl.exe FCC KCC RCC xlC_r xlC - do - # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. -set dummy $ac_tool_prefix$ac_prog; ac_word=$2 -{ echo "$as_me:$LINENO: checking for $ac_word" >&5 -echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } -if test "${ac_cv_prog_CXX+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - if test -n "$CXX"; then - ac_cv_prog_CXX="$CXX" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_CXX="$ac_tool_prefix$ac_prog" - echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done -done -IFS=$as_save_IFS - -fi -fi -CXX=$ac_cv_prog_CXX -if test -n "$CXX"; then - { echo "$as_me:$LINENO: result: $CXX" >&5 -echo "${ECHO_T}$CXX" >&6; } -else - { echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6; } -fi - - - test -n "$CXX" && break - done -fi -if test -z "$CXX"; then - ac_ct_CXX=$CXX - for ac_prog in g++ c++ gpp aCC CC cxx cc++ cl.exe FCC KCC RCC xlC_r xlC -do - # Extract the first word of "$ac_prog", so it can be a program name with args. -set dummy $ac_prog; ac_word=$2 -{ echo "$as_me:$LINENO: checking for $ac_word" >&5 -echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } -if test "${ac_cv_prog_ac_ct_CXX+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - if test -n "$ac_ct_CXX"; then - ac_cv_prog_ac_ct_CXX="$ac_ct_CXX" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_ac_ct_CXX="$ac_prog" - echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done -done -IFS=$as_save_IFS - -fi -fi -ac_ct_CXX=$ac_cv_prog_ac_ct_CXX -if test -n "$ac_ct_CXX"; then - { echo "$as_me:$LINENO: result: $ac_ct_CXX" >&5 -echo "${ECHO_T}$ac_ct_CXX" >&6; } -else - { echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6; } -fi - - - test -n "$ac_ct_CXX" && break -done - - if test "x$ac_ct_CXX" = x; then - CXX="g++" - else - case $cross_compiling:$ac_tool_warned in -yes:) -{ echo "$as_me:$LINENO: WARNING: In the future, Autoconf will not detect cross-tools -whose name does not start with the host triplet. If you think this -configuration is useful to you, please write to autoconf at gnu.org." >&5 -echo "$as_me: WARNING: In the future, Autoconf will not detect cross-tools -whose name does not start with the host triplet. If you think this -configuration is useful to you, please write to autoconf at gnu.org." >&2;} -ac_tool_warned=yes ;; -esac - CXX=$ac_ct_CXX - fi -fi - - fi -fi -# Provide some information about the compiler. -echo "$as_me:$LINENO: checking for C++ compiler version" >&5 -ac_compiler=`set X $ac_compile; echo $2` -{ (ac_try="$ac_compiler --version >&5" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_compiler --version >&5") 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } -{ (ac_try="$ac_compiler -v >&5" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_compiler -v >&5") 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } -{ (ac_try="$ac_compiler -V >&5" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_compiler -V >&5") 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } - -{ echo "$as_me:$LINENO: checking whether we are using the GNU C++ compiler" >&5 -echo $ECHO_N "checking whether we are using the GNU C++ compiler... $ECHO_C" >&6; } -if test "${ac_cv_cxx_compiler_gnu+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ - -int -main () -{ -#ifndef __GNUC__ - choke me -#endif - - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_cxx_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then - ac_compiler_gnu=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_compiler_gnu=no -fi - -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -ac_cv_cxx_compiler_gnu=$ac_compiler_gnu - -fi -{ echo "$as_me:$LINENO: result: $ac_cv_cxx_compiler_gnu" >&5 -echo "${ECHO_T}$ac_cv_cxx_compiler_gnu" >&6; } -GXX=`test $ac_compiler_gnu = yes && echo yes` -ac_test_CXXFLAGS=${CXXFLAGS+set} -ac_save_CXXFLAGS=$CXXFLAGS -{ echo "$as_me:$LINENO: checking whether $CXX accepts -g" >&5 -echo $ECHO_N "checking whether $CXX accepts -g... $ECHO_C" >&6; } -if test "${ac_cv_prog_cxx_g+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - ac_save_cxx_werror_flag=$ac_cxx_werror_flag - ac_cxx_werror_flag=yes - ac_cv_prog_cxx_g=no - CXXFLAGS="-g" - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ - -int -main () -{ - - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_cxx_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then - ac_cv_prog_cxx_g=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - CXXFLAGS="" - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ - -int -main () -{ - - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_cxx_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then - : -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_cxx_werror_flag=$ac_save_cxx_werror_flag - CXXFLAGS="-g" - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ - -int -main () -{ - - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_cxx_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then - ac_cv_prog_cxx_g=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - -fi - -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -fi - -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -fi - -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - ac_cxx_werror_flag=$ac_save_cxx_werror_flag -fi -{ echo "$as_me:$LINENO: result: $ac_cv_prog_cxx_g" >&5 -echo "${ECHO_T}$ac_cv_prog_cxx_g" >&6; } -if test "$ac_test_CXXFLAGS" = set; then - CXXFLAGS=$ac_save_CXXFLAGS -elif test $ac_cv_prog_cxx_g = yes; then - if test "$GXX" = yes; then - CXXFLAGS="-g -O2" - else - CXXFLAGS="-g" - fi -else - if test "$GXX" = yes; then - CXXFLAGS="-O2" - else - CXXFLAGS= - fi -fi -ac_ext=cpp -ac_cpp='$CXXCPP $CPPFLAGS' -ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_cxx_compiler_gnu - -depcc="$CXX" am_compiler_list= - -{ echo "$as_me:$LINENO: checking dependency style of $depcc" >&5 -echo $ECHO_N "checking dependency style of $depcc... $ECHO_C" >&6; } -if test "${am_cv_CXX_dependencies_compiler_type+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then - # We make a subdir and do the tests there. Otherwise we can end up - # making bogus files that we don't know about and never remove. For - # instance it was reported that on HP-UX the gcc test will end up - # making a dummy file named `D' -- because `-MD' means `put the output - # in D'. - mkdir conftest.dir - # Copy depcomp to subdir because otherwise we won't find it if we're - # using a relative directory. - cp "$am_depcomp" conftest.dir - cd conftest.dir - # We will build objects and dependencies in a subdirectory because - # it helps to detect inapplicable dependency modes. For instance - # both Tru64's cc and ICC support -MD to output dependencies as a - # side effect of compilation, but ICC will put the dependencies in - # the current directory while Tru64 will put them in the object - # directory. - mkdir sub - - am_cv_CXX_dependencies_compiler_type=none - if test "$am_compiler_list" = ""; then - am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp` - fi - for depmode in $am_compiler_list; do - # Setup a source with many dependencies, because some compilers - # like to wrap large dependency lists on column 80 (with \), and - # we should not choose a depcomp mode which is confused by this. - # - # We need to recreate these files for each test, as the compiler may - # overwrite some of them when testing with obscure command lines. - # This happens at least with the AIX C compiler. - : > sub/conftest.c - for i in 1 2 3 4 5 6; do - echo '#include "conftst'$i'.h"' >> sub/conftest.c - # Using `: > sub/conftst$i.h' creates only sub/conftst1.h with - # Solaris 8's {/usr,}/bin/sh. - touch sub/conftst$i.h - done - echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf - - case $depmode in - nosideeffect) - # after this tag, mechanisms are not by side-effect, so they'll - # only be used when explicitly requested - if test "x$enable_dependency_tracking" = xyes; then - continue - else - break - fi - ;; - none) break ;; - esac - # We check with `-c' and `-o' for the sake of the "dashmstdout" - # mode. It turns out that the SunPro C++ compiler does not properly - # handle `-M -o', and we need to detect this. - if depmode=$depmode \ - source=sub/conftest.c object=sub/conftest.${OBJEXT-o} \ - depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ - $SHELL ./depcomp $depcc -c -o sub/conftest.${OBJEXT-o} sub/conftest.c \ - >/dev/null 2>conftest.err && - grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 && - grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && - grep sub/conftest.${OBJEXT-o} sub/conftest.Po > /dev/null 2>&1 && - ${MAKE-make} -s -f confmf > /dev/null 2>&1; then - # icc doesn't choke on unknown options, it will just issue warnings - # or remarks (even with -Werror). So we grep stderr for any message - # that says an option was ignored or not supported. - # When given -MP, icc 7.0 and 7.1 complain thusly: - # icc: Command line warning: ignoring option '-M'; no argument required - # The diagnosis changed in icc 8.0: - # icc: Command line remark: option '-MP' not supported - if (grep 'ignoring option' conftest.err || - grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else - am_cv_CXX_dependencies_compiler_type=$depmode - break - fi - fi - done - - cd .. - rm -rf conftest.dir -else - am_cv_CXX_dependencies_compiler_type=none -fi - -fi -{ echo "$as_me:$LINENO: result: $am_cv_CXX_dependencies_compiler_type" >&5 -echo "${ECHO_T}$am_cv_CXX_dependencies_compiler_type" >&6; } -CXXDEPMODE=depmode=$am_cv_CXX_dependencies_compiler_type - - if - test "x$enable_dependency_tracking" != xno \ - && test "$am_cv_CXX_dependencies_compiler_type" = gcc3; then - am__fastdepCXX_TRUE= - am__fastdepCXX_FALSE='#' -else - am__fastdepCXX_TRUE='#' - am__fastdepCXX_FALSE= -fi - - - - -if test -n "$CXX" && ( test "X$CXX" != "Xno" && - ( (test "X$CXX" = "Xg++" && `g++ -v >/dev/null 2>&1` ) || - (test "X$CXX" != "Xg++"))) ; then - ac_ext=cpp -ac_cpp='$CXXCPP $CPPFLAGS' -ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_cxx_compiler_gnu -{ echo "$as_me:$LINENO: checking how to run the C++ preprocessor" >&5 -echo $ECHO_N "checking how to run the C++ preprocessor... $ECHO_C" >&6; } -if test -z "$CXXCPP"; then - if test "${ac_cv_prog_CXXCPP+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - # Double quotes because CXXCPP needs to be expanded - for CXXCPP in "$CXX -E" "/lib/cpp" - do - ac_preproc_ok=false -for ac_cxx_preproc_warn_flag in '' yes -do - # Use a header file that comes with gcc, so configuring glibc - # with a fresh cross-compiler works. - # Prefer to if __STDC__ is defined, since - # exists even on freestanding compilers. - # On the NeXT, cc -E runs the code through the compiler's parser, - # not just through cpp. "Syntax error" is here to catch this case. - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -#ifdef __STDC__ -# include -#else -# include -#endif - Syntax error -_ACEOF -if { (ac_try="$ac_cpp conftest.$ac_ext" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } >/dev/null && { - test -z "$ac_cxx_preproc_warn_flag$ac_cxx_werror_flag" || - test ! -s conftest.err - }; then - : -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - # Broken: fails on valid input. -continue -fi - -rm -f conftest.err conftest.$ac_ext - - # OK, works on sane cases. Now check whether nonexistent headers - # can be detected and how. - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -#include -_ACEOF -if { (ac_try="$ac_cpp conftest.$ac_ext" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } >/dev/null && { - test -z "$ac_cxx_preproc_warn_flag$ac_cxx_werror_flag" || - test ! -s conftest.err - }; then - # Broken: success on invalid input. -continue -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - # Passes both tests. -ac_preproc_ok=: -break -fi - -rm -f conftest.err conftest.$ac_ext - -done -# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. -rm -f conftest.err conftest.$ac_ext -if $ac_preproc_ok; then - break -fi - - done - ac_cv_prog_CXXCPP=$CXXCPP - -fi - CXXCPP=$ac_cv_prog_CXXCPP -else - ac_cv_prog_CXXCPP=$CXXCPP -fi -{ echo "$as_me:$LINENO: result: $CXXCPP" >&5 -echo "${ECHO_T}$CXXCPP" >&6; } -ac_preproc_ok=false -for ac_cxx_preproc_warn_flag in '' yes -do - # Use a header file that comes with gcc, so configuring glibc - # with a fresh cross-compiler works. - # Prefer to if __STDC__ is defined, since - # exists even on freestanding compilers. - # On the NeXT, cc -E runs the code through the compiler's parser, - # not just through cpp. "Syntax error" is here to catch this case. - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -#ifdef __STDC__ -# include -#else -# include -#endif - Syntax error -_ACEOF -if { (ac_try="$ac_cpp conftest.$ac_ext" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } >/dev/null && { - test -z "$ac_cxx_preproc_warn_flag$ac_cxx_werror_flag" || - test ! -s conftest.err - }; then - : -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - # Broken: fails on valid input. -continue -fi - -rm -f conftest.err conftest.$ac_ext - - # OK, works on sane cases. Now check whether nonexistent headers - # can be detected and how. - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -#include -_ACEOF -if { (ac_try="$ac_cpp conftest.$ac_ext" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } >/dev/null && { - test -z "$ac_cxx_preproc_warn_flag$ac_cxx_werror_flag" || - test ! -s conftest.err - }; then - # Broken: success on invalid input. -continue -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - # Passes both tests. -ac_preproc_ok=: -break -fi - -rm -f conftest.err conftest.$ac_ext - -done -# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. -rm -f conftest.err conftest.$ac_ext -if $ac_preproc_ok; then - : -else - { { echo "$as_me:$LINENO: error: C++ preprocessor \"$CXXCPP\" fails sanity check -See \`config.log' for more details." >&5 -echo "$as_me: error: C++ preprocessor \"$CXXCPP\" fails sanity check -See \`config.log' for more details." >&2;} - { (exit 1); exit 1; }; } -fi - -ac_ext=cpp -ac_cpp='$CXXCPP $CPPFLAGS' -ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_cxx_compiler_gnu - -fi - - -ac_ext=f -ac_compile='$F77 -c $FFLAGS conftest.$ac_ext >&5' -ac_link='$F77 -o conftest$ac_exeext $FFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_f77_compiler_gnu -if test -n "$ac_tool_prefix"; then - for ac_prog in g77 xlf f77 frt pgf77 cf77 fort77 fl32 af77 xlf90 f90 pgf90 pghpf epcf90 gfortran g95 xlf95 f95 fort ifort ifc efc pgf95 lf95 ftn - do - # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. -set dummy $ac_tool_prefix$ac_prog; ac_word=$2 -{ echo "$as_me:$LINENO: checking for $ac_word" >&5 -echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } -if test "${ac_cv_prog_F77+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - if test -n "$F77"; then - ac_cv_prog_F77="$F77" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_F77="$ac_tool_prefix$ac_prog" - echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done -done -IFS=$as_save_IFS - -fi -fi -F77=$ac_cv_prog_F77 -if test -n "$F77"; then - { echo "$as_me:$LINENO: result: $F77" >&5 -echo "${ECHO_T}$F77" >&6; } -else - { echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6; } -fi - - - test -n "$F77" && break - done -fi -if test -z "$F77"; then - ac_ct_F77=$F77 - for ac_prog in g77 xlf f77 frt pgf77 cf77 fort77 fl32 af77 xlf90 f90 pgf90 pghpf epcf90 gfortran g95 xlf95 f95 fort ifort ifc efc pgf95 lf95 ftn -do - # Extract the first word of "$ac_prog", so it can be a program name with args. -set dummy $ac_prog; ac_word=$2 -{ echo "$as_me:$LINENO: checking for $ac_word" >&5 -echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } -if test "${ac_cv_prog_ac_ct_F77+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - if test -n "$ac_ct_F77"; then - ac_cv_prog_ac_ct_F77="$ac_ct_F77" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_ac_ct_F77="$ac_prog" - echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done -done -IFS=$as_save_IFS - -fi -fi -ac_ct_F77=$ac_cv_prog_ac_ct_F77 -if test -n "$ac_ct_F77"; then - { echo "$as_me:$LINENO: result: $ac_ct_F77" >&5 -echo "${ECHO_T}$ac_ct_F77" >&6; } -else - { echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6; } -fi - - - test -n "$ac_ct_F77" && break -done - - if test "x$ac_ct_F77" = x; then - F77="" - else - case $cross_compiling:$ac_tool_warned in -yes:) -{ echo "$as_me:$LINENO: WARNING: In the future, Autoconf will not detect cross-tools -whose name does not start with the host triplet. If you think this -configuration is useful to you, please write to autoconf at gnu.org." >&5 -echo "$as_me: WARNING: In the future, Autoconf will not detect cross-tools -whose name does not start with the host triplet. If you think this -configuration is useful to you, please write to autoconf at gnu.org." >&2;} -ac_tool_warned=yes ;; -esac - F77=$ac_ct_F77 - fi -fi - - -# Provide some information about the compiler. -echo "$as_me:$LINENO: checking for Fortran 77 compiler version" >&5 -ac_compiler=`set X $ac_compile; echo $2` -{ (ac_try="$ac_compiler --version >&5" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_compiler --version >&5") 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } -{ (ac_try="$ac_compiler -v >&5" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_compiler -v >&5") 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } -{ (ac_try="$ac_compiler -V >&5" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_compiler -V >&5") 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } -rm -f a.out - -# If we don't use `.F' as extension, the preprocessor is not run on the -# input file. (Note that this only needs to work for GNU compilers.) -ac_save_ext=$ac_ext -ac_ext=F -{ echo "$as_me:$LINENO: checking whether we are using the GNU Fortran 77 compiler" >&5 -echo $ECHO_N "checking whether we are using the GNU Fortran 77 compiler... $ECHO_C" >&6; } -if test "${ac_cv_f77_compiler_gnu+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - cat >conftest.$ac_ext <<_ACEOF - program main -#ifndef __GNUC__ - choke me -#endif - - end -_ACEOF -rm -f conftest.$ac_objext -if { (ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_f77_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then - ac_compiler_gnu=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_compiler_gnu=no -fi - -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -ac_cv_f77_compiler_gnu=$ac_compiler_gnu - -fi -{ echo "$as_me:$LINENO: result: $ac_cv_f77_compiler_gnu" >&5 -echo "${ECHO_T}$ac_cv_f77_compiler_gnu" >&6; } -ac_ext=$ac_save_ext -ac_test_FFLAGS=${FFLAGS+set} -ac_save_FFLAGS=$FFLAGS -FFLAGS= -{ echo "$as_me:$LINENO: checking whether $F77 accepts -g" >&5 -echo $ECHO_N "checking whether $F77 accepts -g... $ECHO_C" >&6; } -if test "${ac_cv_prog_f77_g+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - FFLAGS=-g -cat >conftest.$ac_ext <<_ACEOF - program main - - end -_ACEOF -rm -f conftest.$ac_objext -if { (ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_f77_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then - ac_cv_prog_f77_g=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_cv_prog_f77_g=no -fi - -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - -fi -{ echo "$as_me:$LINENO: result: $ac_cv_prog_f77_g" >&5 -echo "${ECHO_T}$ac_cv_prog_f77_g" >&6; } -if test "$ac_test_FFLAGS" = set; then - FFLAGS=$ac_save_FFLAGS -elif test $ac_cv_prog_f77_g = yes; then - if test "x$ac_cv_f77_compiler_gnu" = xyes; then - FFLAGS="-g -O2" - else - FFLAGS="-g" - fi -else - if test "x$ac_cv_f77_compiler_gnu" = xyes; then - FFLAGS="-O2" - else - FFLAGS= - fi -fi - -G77=`test $ac_compiler_gnu = yes && echo yes` -ac_ext=c -ac_cpp='$CPP $CPPFLAGS' -ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_c_compiler_gnu - - - -# Autoconf 2.13's AC_OBJEXT and AC_EXEEXT macros only works for C compilers! - -# find the maximum length of command line arguments -{ echo "$as_me:$LINENO: checking the maximum length of command line arguments" >&5 -echo $ECHO_N "checking the maximum length of command line arguments... $ECHO_C" >&6; } -if test "${lt_cv_sys_max_cmd_len+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - i=0 - teststring="ABCD" - - case $build_os in - msdosdjgpp*) - # On DJGPP, this test can blow up pretty badly due to problems in libc - # (any single argument exceeding 2000 bytes causes a buffer overrun - # during glob expansion). Even if it were fixed, the result of this - # check would be larger than it should be. - lt_cv_sys_max_cmd_len=12288; # 12K is about right - ;; - - gnu*) - # Under GNU Hurd, this test is not required because there is - # no limit to the length of command line arguments. - # Libtool will interpret -1 as no limit whatsoever - lt_cv_sys_max_cmd_len=-1; - ;; - - cygwin* | mingw*) - # On Win9x/ME, this test blows up -- it succeeds, but takes - # about 5 minutes as the teststring grows exponentially. - # Worse, since 9x/ME are not pre-emptively multitasking, - # you end up with a "frozen" computer, even though with patience - # the test eventually succeeds (with a max line length of 256k). - # Instead, let's just punt: use the minimum linelength reported by - # all of the supported platforms: 8192 (on NT/2K/XP). - lt_cv_sys_max_cmd_len=8192; - ;; - - amigaos*) - # On AmigaOS with pdksh, this test takes hours, literally. - # So we just punt and use a minimum line length of 8192. - lt_cv_sys_max_cmd_len=8192; - ;; - - netbsd* | freebsd* | openbsd* | darwin* | dragonfly*) - # This has been around since 386BSD, at least. Likely further. - if test -x /sbin/sysctl; then - lt_cv_sys_max_cmd_len=`/sbin/sysctl -n kern.argmax` - elif test -x /usr/sbin/sysctl; then - lt_cv_sys_max_cmd_len=`/usr/sbin/sysctl -n kern.argmax` - else - lt_cv_sys_max_cmd_len=65536 # usable default for all BSDs - fi - # And add a safety zone - lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4` - lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3` - ;; - - interix*) - # We know the value 262144 and hardcode it with a safety zone (like BSD) - lt_cv_sys_max_cmd_len=196608 - ;; - - osf*) - # Dr. Hans Ekkehard Plesser reports seeing a kernel panic running configure - # due to this test when exec_disable_arg_limit is 1 on Tru64. It is not - # nice to cause kernel panics so lets avoid the loop below. - # First set a reasonable default. - lt_cv_sys_max_cmd_len=16384 - # - if test -x /sbin/sysconfig; then - case `/sbin/sysconfig -q proc exec_disable_arg_limit` in - *1*) lt_cv_sys_max_cmd_len=-1 ;; - esac - fi - ;; - sco3.2v5*) - lt_cv_sys_max_cmd_len=102400 - ;; - sysv5* | sco5v6* | sysv4.2uw2*) - kargmax=`grep ARG_MAX /etc/conf/cf.d/stune 2>/dev/null` - if test -n "$kargmax"; then - lt_cv_sys_max_cmd_len=`echo $kargmax | sed 's/.*[ ]//'` - else - lt_cv_sys_max_cmd_len=32768 - fi - ;; - *) - lt_cv_sys_max_cmd_len=`(getconf ARG_MAX) 2> /dev/null` - if test -n "$lt_cv_sys_max_cmd_len"; then - lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4` - lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3` - else - SHELL=${SHELL-${CONFIG_SHELL-/bin/sh}} - while (test "X"`$SHELL $0 --fallback-echo "X$teststring" 2>/dev/null` \ - = "XX$teststring") >/dev/null 2>&1 && - new_result=`expr "X$teststring" : ".*" 2>&1` && - lt_cv_sys_max_cmd_len=$new_result && - test $i != 17 # 1/2 MB should be enough - do - i=`expr $i + 1` - teststring=$teststring$teststring - done - teststring= - # Add a significant safety factor because C++ compilers can tack on massive - # amounts of additional arguments before passing them to the linker. - # It appears as though 1/2 is a usable value. - lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 2` - fi - ;; - esac - -fi - -if test -n $lt_cv_sys_max_cmd_len ; then - { echo "$as_me:$LINENO: result: $lt_cv_sys_max_cmd_len" >&5 -echo "${ECHO_T}$lt_cv_sys_max_cmd_len" >&6; } -else - { echo "$as_me:$LINENO: result: none" >&5 -echo "${ECHO_T}none" >&6; } -fi - - - - - -# Check for command to grab the raw symbol name followed by C symbol from nm. -{ echo "$as_me:$LINENO: checking command to parse $NM output from $compiler object" >&5 -echo $ECHO_N "checking command to parse $NM output from $compiler object... $ECHO_C" >&6; } -if test "${lt_cv_sys_global_symbol_pipe+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - -# These are sane defaults that work on at least a few old systems. -# [They come from Ultrix. What could be older than Ultrix?!! ;)] - -# Character class describing NM global symbol codes. -symcode='[BCDEGRST]' - -# Regexp to match symbols that can be accessed directly from C. -sympat='\([_A-Za-z][_A-Za-z0-9]*\)' - -# Transform an extracted symbol line into a proper C declaration -lt_cv_sys_global_symbol_to_cdecl="sed -n -e 's/^. .* \(.*\)$/extern int \1;/p'" - -# Transform an extracted symbol line into symbol name and symbol address -lt_cv_sys_global_symbol_to_c_name_address="sed -n -e 's/^: \([^ ]*\) $/ {\\\"\1\\\", (lt_ptr) 0},/p' -e 's/^$symcode \([^ ]*\) \([^ ]*\)$/ {\"\2\", (lt_ptr) \&\2},/p'" - -# Define system-specific variables. -case $host_os in -aix*) - symcode='[BCDT]' - ;; -cygwin* | mingw* | pw32*) - symcode='[ABCDGISTW]' - ;; -hpux*) # Its linker distinguishes data from code symbols - if test "$host_cpu" = ia64; then - symcode='[ABCDEGRST]' - fi - lt_cv_sys_global_symbol_to_cdecl="sed -n -e 's/^T .* \(.*\)$/extern int \1();/p' -e 's/^$symcode* .* \(.*\)$/extern char \1;/p'" - lt_cv_sys_global_symbol_to_c_name_address="sed -n -e 's/^: \([^ ]*\) $/ {\\\"\1\\\", (lt_ptr) 0},/p' -e 's/^$symcode* \([^ ]*\) \([^ ]*\)$/ {\"\2\", (lt_ptr) \&\2},/p'" - ;; -linux* | k*bsd*-gnu) - if test "$host_cpu" = ia64; then - symcode='[ABCDGIRSTW]' - lt_cv_sys_global_symbol_to_cdecl="sed -n -e 's/^T .* \(.*\)$/extern int \1();/p' -e 's/^$symcode* .* \(.*\)$/extern char \1;/p'" - lt_cv_sys_global_symbol_to_c_name_address="sed -n -e 's/^: \([^ ]*\) $/ {\\\"\1\\\", (lt_ptr) 0},/p' -e 's/^$symcode* \([^ ]*\) \([^ ]*\)$/ {\"\2\", (lt_ptr) \&\2},/p'" - fi - ;; -irix* | nonstopux*) - symcode='[BCDEGRST]' - ;; -osf*) - symcode='[BCDEGQRST]' - ;; -solaris*) - symcode='[BDRT]' - ;; -sco3.2v5*) - symcode='[DT]' - ;; -sysv4.2uw2*) - symcode='[DT]' - ;; -sysv5* | sco5v6* | unixware* | OpenUNIX*) - symcode='[ABDT]' - ;; -sysv4) - symcode='[DFNSTU]' - ;; -esac - -# Handle CRLF in mingw tool chain -opt_cr= -case $build_os in -mingw*) - opt_cr=`echo 'x\{0,1\}' | tr x '\015'` # option cr in regexp - ;; -esac - -# If we're using GNU nm, then use its standard symbol codes. -case `$NM -V 2>&1` in -*GNU* | *'with BFD'*) - symcode='[ABCDGIRSTW]' ;; -esac - -# Try without a prefix undercore, then with it. -for ac_symprfx in "" "_"; do - - # Transform symcode, sympat, and symprfx into a raw symbol and a C symbol. - symxfrm="\\1 $ac_symprfx\\2 \\2" - - # Write the raw and C identifiers. - lt_cv_sys_global_symbol_pipe="sed -n -e 's/^.*[ ]\($symcode$symcode*\)[ ][ ]*$ac_symprfx$sympat$opt_cr$/$symxfrm/p'" - - # Check to see that the pipe works correctly. - pipe_works=no - - rm -f conftest* - cat > conftest.$ac_ext <&5 - (eval $ac_compile) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; then - # Now try to grab the symbols. - nlist=conftest.nm - if { (eval echo "$as_me:$LINENO: \"$NM conftest.$ac_objext \| $lt_cv_sys_global_symbol_pipe \> $nlist\"") >&5 - (eval $NM conftest.$ac_objext \| $lt_cv_sys_global_symbol_pipe \> $nlist) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && test -s "$nlist"; then - # Try sorting and uniquifying the output. - if sort "$nlist" | uniq > "$nlist"T; then - mv -f "$nlist"T "$nlist" - else - rm -f "$nlist"T - fi - - # Make sure that we snagged all the symbols we need. - if grep ' nm_test_var$' "$nlist" >/dev/null; then - if grep ' nm_test_func$' "$nlist" >/dev/null; then - cat < conftest.$ac_ext -#ifdef __cplusplus -extern "C" { -#endif - -EOF - # Now generate the symbol file. - eval "$lt_cv_sys_global_symbol_to_cdecl"' < "$nlist" | grep -v main >> conftest.$ac_ext' - - cat <> conftest.$ac_ext -#if defined (__STDC__) && __STDC__ -# define lt_ptr_t void * -#else -# define lt_ptr_t char * -# define const -#endif - -/* The mapping between symbol names and symbols. */ -const struct { - const char *name; - lt_ptr_t address; -} -lt_preloaded_symbols[] = -{ -EOF - $SED "s/^$symcode$symcode* \(.*\) \(.*\)$/ {\"\2\", (lt_ptr_t) \&\2},/" < "$nlist" | grep -v main >> conftest.$ac_ext - cat <<\EOF >> conftest.$ac_ext - {0, (lt_ptr_t) 0} -}; - -#ifdef __cplusplus -} -#endif -EOF - # Now try linking the two files. - mv conftest.$ac_objext conftstm.$ac_objext - lt_save_LIBS="$LIBS" - lt_save_CFLAGS="$CFLAGS" - LIBS="conftstm.$ac_objext" - CFLAGS="$CFLAGS$lt_prog_compiler_no_builtin_flag" - if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 - (eval $ac_link) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && test -s conftest${ac_exeext}; then - pipe_works=yes - fi - LIBS="$lt_save_LIBS" - CFLAGS="$lt_save_CFLAGS" - else - echo "cannot find nm_test_func in $nlist" >&5 - fi - else - echo "cannot find nm_test_var in $nlist" >&5 - fi - else - echo "cannot run $lt_cv_sys_global_symbol_pipe" >&5 - fi - else - echo "$progname: failed program was:" >&5 - cat conftest.$ac_ext >&5 - fi - rm -f conftest* conftst* - - # Do not use the global_symbol_pipe unless it works. - if test "$pipe_works" = yes; then - break - else - lt_cv_sys_global_symbol_pipe= - fi -done - -fi - -if test -z "$lt_cv_sys_global_symbol_pipe"; then - lt_cv_sys_global_symbol_to_cdecl= -fi -if test -z "$lt_cv_sys_global_symbol_pipe$lt_cv_sys_global_symbol_to_cdecl"; then - { echo "$as_me:$LINENO: result: failed" >&5 -echo "${ECHO_T}failed" >&6; } -else - { echo "$as_me:$LINENO: result: ok" >&5 -echo "${ECHO_T}ok" >&6; } -fi - -{ echo "$as_me:$LINENO: checking for objdir" >&5 -echo $ECHO_N "checking for objdir... $ECHO_C" >&6; } -if test "${lt_cv_objdir+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - rm -f .libs 2>/dev/null -mkdir .libs 2>/dev/null -if test -d .libs; then - lt_cv_objdir=.libs -else - # MS-DOS does not allow filenames that begin with a dot. - lt_cv_objdir=_libs -fi -rmdir .libs 2>/dev/null -fi -{ echo "$as_me:$LINENO: result: $lt_cv_objdir" >&5 -echo "${ECHO_T}$lt_cv_objdir" >&6; } -objdir=$lt_cv_objdir - - - - - -case $host_os in -aix3*) - # AIX sometimes has problems with the GCC collect2 program. For some - # reason, if we set the COLLECT_NAMES environment variable, the problems - # vanish in a puff of smoke. - if test "X${COLLECT_NAMES+set}" != Xset; then - COLLECT_NAMES= - export COLLECT_NAMES - fi - ;; -esac - -# Sed substitution that helps us do robust quoting. It backslashifies -# metacharacters that are still active within double-quoted strings. -Xsed='sed -e 1s/^X//' -sed_quote_subst='s/\([\\"\\`$\\\\]\)/\\\1/g' - -# Same as above, but do not quote variable references. -double_quote_subst='s/\([\\"\\`\\\\]\)/\\\1/g' - -# Sed substitution to delay expansion of an escaped shell variable in a -# double_quote_subst'ed string. -delay_variable_subst='s/\\\\\\\\\\\$/\\\\\\$/g' - -# Sed substitution to avoid accidental globbing in evaled expressions -no_glob_subst='s/\*/\\\*/g' - -# Constants: -rm="rm -f" - -# Global variables: -default_ofile=libtool -can_build_shared=yes - -# All known linkers require a `.a' archive for static linking (except MSVC, -# which needs '.lib'). -libext=a -ltmain="$ac_aux_dir/ltmain.sh" -ofile="$default_ofile" -with_gnu_ld="$lt_cv_prog_gnu_ld" - -if test -n "$ac_tool_prefix"; then - # Extract the first word of "${ac_tool_prefix}ar", so it can be a program name with args. -set dummy ${ac_tool_prefix}ar; ac_word=$2 -{ echo "$as_me:$LINENO: checking for $ac_word" >&5 -echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } -if test "${ac_cv_prog_AR+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - if test -n "$AR"; then - ac_cv_prog_AR="$AR" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_AR="${ac_tool_prefix}ar" - echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done -done -IFS=$as_save_IFS - -fi -fi -AR=$ac_cv_prog_AR -if test -n "$AR"; then - { echo "$as_me:$LINENO: result: $AR" >&5 -echo "${ECHO_T}$AR" >&6; } -else - { echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6; } -fi - - -fi -if test -z "$ac_cv_prog_AR"; then - ac_ct_AR=$AR - # Extract the first word of "ar", so it can be a program name with args. -set dummy ar; ac_word=$2 -{ echo "$as_me:$LINENO: checking for $ac_word" >&5 -echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } -if test "${ac_cv_prog_ac_ct_AR+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - if test -n "$ac_ct_AR"; then - ac_cv_prog_ac_ct_AR="$ac_ct_AR" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_ac_ct_AR="ar" - echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done -done -IFS=$as_save_IFS - -fi -fi -ac_ct_AR=$ac_cv_prog_ac_ct_AR -if test -n "$ac_ct_AR"; then - { echo "$as_me:$LINENO: result: $ac_ct_AR" >&5 -echo "${ECHO_T}$ac_ct_AR" >&6; } -else - { echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6; } -fi - - if test "x$ac_ct_AR" = x; then - AR="false" - else - case $cross_compiling:$ac_tool_warned in -yes:) -{ echo "$as_me:$LINENO: WARNING: In the future, Autoconf will not detect cross-tools -whose name does not start with the host triplet. If you think this -configuration is useful to you, please write to autoconf at gnu.org." >&5 -echo "$as_me: WARNING: In the future, Autoconf will not detect cross-tools -whose name does not start with the host triplet. If you think this -configuration is useful to you, please write to autoconf at gnu.org." >&2;} -ac_tool_warned=yes ;; -esac - AR=$ac_ct_AR - fi -else - AR="$ac_cv_prog_AR" -fi - -if test -n "$ac_tool_prefix"; then - # Extract the first word of "${ac_tool_prefix}ranlib", so it can be a program name with args. -set dummy ${ac_tool_prefix}ranlib; ac_word=$2 -{ echo "$as_me:$LINENO: checking for $ac_word" >&5 -echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } -if test "${ac_cv_prog_RANLIB+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - if test -n "$RANLIB"; then - ac_cv_prog_RANLIB="$RANLIB" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_RANLIB="${ac_tool_prefix}ranlib" - echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done -done -IFS=$as_save_IFS - -fi -fi -RANLIB=$ac_cv_prog_RANLIB -if test -n "$RANLIB"; then - { echo "$as_me:$LINENO: result: $RANLIB" >&5 -echo "${ECHO_T}$RANLIB" >&6; } -else - { echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6; } -fi - - -fi -if test -z "$ac_cv_prog_RANLIB"; then - ac_ct_RANLIB=$RANLIB - # Extract the first word of "ranlib", so it can be a program name with args. -set dummy ranlib; ac_word=$2 -{ echo "$as_me:$LINENO: checking for $ac_word" >&5 -echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } -if test "${ac_cv_prog_ac_ct_RANLIB+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - if test -n "$ac_ct_RANLIB"; then - ac_cv_prog_ac_ct_RANLIB="$ac_ct_RANLIB" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_ac_ct_RANLIB="ranlib" - echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done -done -IFS=$as_save_IFS - -fi -fi -ac_ct_RANLIB=$ac_cv_prog_ac_ct_RANLIB -if test -n "$ac_ct_RANLIB"; then - { echo "$as_me:$LINENO: result: $ac_ct_RANLIB" >&5 -echo "${ECHO_T}$ac_ct_RANLIB" >&6; } -else - { echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6; } -fi - - if test "x$ac_ct_RANLIB" = x; then - RANLIB=":" - else - case $cross_compiling:$ac_tool_warned in -yes:) -{ echo "$as_me:$LINENO: WARNING: In the future, Autoconf will not detect cross-tools -whose name does not start with the host triplet. If you think this -configuration is useful to you, please write to autoconf at gnu.org." >&5 -echo "$as_me: WARNING: In the future, Autoconf will not detect cross-tools -whose name does not start with the host triplet. If you think this -configuration is useful to you, please write to autoconf at gnu.org." >&2;} -ac_tool_warned=yes ;; -esac - RANLIB=$ac_ct_RANLIB - fi -else - RANLIB="$ac_cv_prog_RANLIB" -fi - -if test -n "$ac_tool_prefix"; then - # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args. -set dummy ${ac_tool_prefix}strip; ac_word=$2 -{ echo "$as_me:$LINENO: checking for $ac_word" >&5 -echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } -if test "${ac_cv_prog_STRIP+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - if test -n "$STRIP"; then - ac_cv_prog_STRIP="$STRIP" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_STRIP="${ac_tool_prefix}strip" - echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done -done -IFS=$as_save_IFS - -fi -fi -STRIP=$ac_cv_prog_STRIP -if test -n "$STRIP"; then - { echo "$as_me:$LINENO: result: $STRIP" >&5 -echo "${ECHO_T}$STRIP" >&6; } -else - { echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6; } -fi - - -fi -if test -z "$ac_cv_prog_STRIP"; then - ac_ct_STRIP=$STRIP - # Extract the first word of "strip", so it can be a program name with args. -set dummy strip; ac_word=$2 -{ echo "$as_me:$LINENO: checking for $ac_word" >&5 -echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } -if test "${ac_cv_prog_ac_ct_STRIP+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - if test -n "$ac_ct_STRIP"; then - ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_ac_ct_STRIP="strip" - echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done -done -IFS=$as_save_IFS - -fi -fi -ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP -if test -n "$ac_ct_STRIP"; then - { echo "$as_me:$LINENO: result: $ac_ct_STRIP" >&5 -echo "${ECHO_T}$ac_ct_STRIP" >&6; } -else - { echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6; } -fi - - if test "x$ac_ct_STRIP" = x; then - STRIP=":" - else - case $cross_compiling:$ac_tool_warned in -yes:) -{ echo "$as_me:$LINENO: WARNING: In the future, Autoconf will not detect cross-tools -whose name does not start with the host triplet. If you think this -configuration is useful to you, please write to autoconf at gnu.org." >&5 -echo "$as_me: WARNING: In the future, Autoconf will not detect cross-tools -whose name does not start with the host triplet. If you think this -configuration is useful to you, please write to autoconf at gnu.org." >&2;} -ac_tool_warned=yes ;; -esac - STRIP=$ac_ct_STRIP - fi -else - STRIP="$ac_cv_prog_STRIP" -fi - - -old_CC="$CC" -old_CFLAGS="$CFLAGS" - -# Set sane defaults for various variables -test -z "$AR" && AR=ar -test -z "$AR_FLAGS" && AR_FLAGS=cru -test -z "$AS" && AS=as -test -z "$CC" && CC=cc -test -z "$LTCC" && LTCC=$CC -test -z "$LTCFLAGS" && LTCFLAGS=$CFLAGS -test -z "$DLLTOOL" && DLLTOOL=dlltool -test -z "$LD" && LD=ld -test -z "$LN_S" && LN_S="ln -s" -test -z "$MAGIC_CMD" && MAGIC_CMD=file -test -z "$NM" && NM=nm -test -z "$SED" && SED=sed -test -z "$OBJDUMP" && OBJDUMP=objdump -test -z "$RANLIB" && RANLIB=: -test -z "$STRIP" && STRIP=: -test -z "$ac_objext" && ac_objext=o - -# Determine commands to create old-style static archives. -old_archive_cmds='$AR $AR_FLAGS $oldlib$oldobjs' -old_postinstall_cmds='chmod 644 $oldlib' -old_postuninstall_cmds= - -if test -n "$RANLIB"; then - case $host_os in - openbsd*) - old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB -t \$oldlib" - ;; - *) - old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB \$oldlib" - ;; - esac - old_archive_cmds="$old_archive_cmds~\$RANLIB \$oldlib" -fi - -for cc_temp in $compiler""; do - case $cc_temp in - compile | *[\\/]compile | ccache | *[\\/]ccache ) ;; - distcc | *[\\/]distcc | purify | *[\\/]purify ) ;; - \-*) ;; - *) break;; - esac -done -cc_basename=`$echo "X$cc_temp" | $Xsed -e 's%.*/%%' -e "s%^$host_alias-%%"` - - -# Only perform the check for file, if the check method requires it -case $deplibs_check_method in -file_magic*) - if test "$file_magic_cmd" = '$MAGIC_CMD'; then - { echo "$as_me:$LINENO: checking for ${ac_tool_prefix}file" >&5 -echo $ECHO_N "checking for ${ac_tool_prefix}file... $ECHO_C" >&6; } -if test "${lt_cv_path_MAGIC_CMD+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - case $MAGIC_CMD in -[\\/*] | ?:[\\/]*) - lt_cv_path_MAGIC_CMD="$MAGIC_CMD" # Let the user override the test with a path. - ;; -*) - lt_save_MAGIC_CMD="$MAGIC_CMD" - lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR - ac_dummy="/usr/bin$PATH_SEPARATOR$PATH" - for ac_dir in $ac_dummy; do - IFS="$lt_save_ifs" - test -z "$ac_dir" && ac_dir=. - if test -f $ac_dir/${ac_tool_prefix}file; then - lt_cv_path_MAGIC_CMD="$ac_dir/${ac_tool_prefix}file" - if test -n "$file_magic_test_file"; then - case $deplibs_check_method in - "file_magic "*) - file_magic_regex=`expr "$deplibs_check_method" : "file_magic \(.*\)"` - MAGIC_CMD="$lt_cv_path_MAGIC_CMD" - if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null | - $EGREP "$file_magic_regex" > /dev/null; then - : - else - cat <&2 - -*** Warning: the command libtool uses to detect shared libraries, -*** $file_magic_cmd, produces output that libtool cannot recognize. -*** The result is that libtool may fail to recognize shared libraries -*** as such. This will affect the creation of libtool libraries that -*** depend on shared libraries, but programs linked with such libtool -*** libraries will work regardless of this problem. Nevertheless, you -*** may want to report the problem to your system manager and/or to -*** bug-libtool at gnu.org - -EOF - fi ;; - esac - fi - break - fi - done - IFS="$lt_save_ifs" - MAGIC_CMD="$lt_save_MAGIC_CMD" - ;; -esac -fi - -MAGIC_CMD="$lt_cv_path_MAGIC_CMD" -if test -n "$MAGIC_CMD"; then - { echo "$as_me:$LINENO: result: $MAGIC_CMD" >&5 -echo "${ECHO_T}$MAGIC_CMD" >&6; } -else - { echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6; } -fi - -if test -z "$lt_cv_path_MAGIC_CMD"; then - if test -n "$ac_tool_prefix"; then - { echo "$as_me:$LINENO: checking for file" >&5 -echo $ECHO_N "checking for file... $ECHO_C" >&6; } -if test "${lt_cv_path_MAGIC_CMD+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - case $MAGIC_CMD in -[\\/*] | ?:[\\/]*) - lt_cv_path_MAGIC_CMD="$MAGIC_CMD" # Let the user override the test with a path. - ;; -*) - lt_save_MAGIC_CMD="$MAGIC_CMD" - lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR - ac_dummy="/usr/bin$PATH_SEPARATOR$PATH" - for ac_dir in $ac_dummy; do - IFS="$lt_save_ifs" - test -z "$ac_dir" && ac_dir=. - if test -f $ac_dir/file; then - lt_cv_path_MAGIC_CMD="$ac_dir/file" - if test -n "$file_magic_test_file"; then - case $deplibs_check_method in - "file_magic "*) - file_magic_regex=`expr "$deplibs_check_method" : "file_magic \(.*\)"` - MAGIC_CMD="$lt_cv_path_MAGIC_CMD" - if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null | - $EGREP "$file_magic_regex" > /dev/null; then - : - else - cat <&2 - -*** Warning: the command libtool uses to detect shared libraries, -*** $file_magic_cmd, produces output that libtool cannot recognize. -*** The result is that libtool may fail to recognize shared libraries -*** as such. This will affect the creation of libtool libraries that -*** depend on shared libraries, but programs linked with such libtool -*** libraries will work regardless of this problem. Nevertheless, you -*** may want to report the problem to your system manager and/or to -*** bug-libtool at gnu.org - -EOF - fi ;; - esac - fi - break - fi - done - IFS="$lt_save_ifs" - MAGIC_CMD="$lt_save_MAGIC_CMD" - ;; -esac -fi - -MAGIC_CMD="$lt_cv_path_MAGIC_CMD" -if test -n "$MAGIC_CMD"; then - { echo "$as_me:$LINENO: result: $MAGIC_CMD" >&5 -echo "${ECHO_T}$MAGIC_CMD" >&6; } -else - { echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6; } -fi - - else - MAGIC_CMD=: - fi -fi - - fi - ;; -esac - -enable_dlopen=no -enable_win32_dll=no - -# Check whether --enable-libtool-lock was given. -if test "${enable_libtool_lock+set}" = set; then - enableval=$enable_libtool_lock; -fi - -test "x$enable_libtool_lock" != xno && enable_libtool_lock=yes - - -# Check whether --with-pic was given. -if test "${with_pic+set}" = set; then - withval=$with_pic; pic_mode="$withval" -else - pic_mode=default -fi - -test -z "$pic_mode" && pic_mode=default - -# Use C for the default configuration in the libtool script -tagname= -lt_save_CC="$CC" -ac_ext=c -ac_cpp='$CPP $CPPFLAGS' -ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_c_compiler_gnu - - -# Source file extension for C test sources. -ac_ext=c - -# Object file extension for compiled C test sources. -objext=o -objext=$objext - -# Code to be used in simple compile tests -lt_simple_compile_test_code="int some_variable = 0;" - -# Code to be used in simple link tests -lt_simple_link_test_code='int main(){return(0);}' - - -# If no C compiler was specified, use CC. -LTCC=${LTCC-"$CC"} - -# If no C compiler flags were specified, use CFLAGS. -LTCFLAGS=${LTCFLAGS-"$CFLAGS"} - -# Allow CC to be a program name with arguments. -compiler=$CC - - -# save warnings/boilerplate of simple test code -ac_outfile=conftest.$ac_objext -echo "$lt_simple_compile_test_code" >conftest.$ac_ext -eval "$ac_compile" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err -_lt_compiler_boilerplate=`cat conftest.err` -$rm conftest* - -ac_outfile=conftest.$ac_objext -echo "$lt_simple_link_test_code" >conftest.$ac_ext -eval "$ac_link" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err -_lt_linker_boilerplate=`cat conftest.err` -$rm conftest* - - - -lt_prog_compiler_no_builtin_flag= - -if test "$GCC" = yes; then - lt_prog_compiler_no_builtin_flag=' -fno-builtin' - - -{ echo "$as_me:$LINENO: checking if $compiler supports -fno-rtti -fno-exceptions" >&5 -echo $ECHO_N "checking if $compiler supports -fno-rtti -fno-exceptions... $ECHO_C" >&6; } -if test "${lt_cv_prog_compiler_rtti_exceptions+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - lt_cv_prog_compiler_rtti_exceptions=no - ac_outfile=conftest.$ac_objext - echo "$lt_simple_compile_test_code" > conftest.$ac_ext - lt_compiler_flag="-fno-rtti -fno-exceptions" - # Insert the option either (1) after the last *FLAGS variable, or - # (2) before a word containing "conftest.", or (3) at the end. - # Note that $ac_compile itself does not contain backslashes and begins - # with a dollar sign (not a hyphen), so the echo should work correctly. - # The option is referenced via a variable to avoid confusing sed. - lt_compile=`echo "$ac_compile" | $SED \ - -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ - -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ - -e 's:$: $lt_compiler_flag:'` - (eval echo "\"\$as_me:7436: $lt_compile\"" >&5) - (eval "$lt_compile" 2>conftest.err) - ac_status=$? - cat conftest.err >&5 - echo "$as_me:7440: \$? = $ac_status" >&5 - if (exit $ac_status) && test -s "$ac_outfile"; then - # The compiler can only warn and ignore the option if not recognized - # So say no if there are warnings other than the usual output. - $echo "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' >conftest.exp - $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 - if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then - lt_cv_prog_compiler_rtti_exceptions=yes - fi - fi - $rm conftest* - -fi -{ echo "$as_me:$LINENO: result: $lt_cv_prog_compiler_rtti_exceptions" >&5 -echo "${ECHO_T}$lt_cv_prog_compiler_rtti_exceptions" >&6; } - -if test x"$lt_cv_prog_compiler_rtti_exceptions" = xyes; then - lt_prog_compiler_no_builtin_flag="$lt_prog_compiler_no_builtin_flag -fno-rtti -fno-exceptions" -else - : -fi - -fi - -lt_prog_compiler_wl= -lt_prog_compiler_pic= -lt_prog_compiler_static= - -{ echo "$as_me:$LINENO: checking for $compiler option to produce PIC" >&5 -echo $ECHO_N "checking for $compiler option to produce PIC... $ECHO_C" >&6; } - - if test "$GCC" = yes; then - lt_prog_compiler_wl='-Wl,' - lt_prog_compiler_static='-static' - - case $host_os in - aix*) - # All AIX code is PIC. - if test "$host_cpu" = ia64; then - # AIX 5 now supports IA64 processor - lt_prog_compiler_static='-Bstatic' - fi - ;; - - amigaos*) - # FIXME: we need at least 68020 code to build shared libraries, but - # adding the `-m68020' flag to GCC prevents building anything better, - # like `-m68040'. - lt_prog_compiler_pic='-m68020 -resident32 -malways-restore-a4' - ;; - - beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) - # PIC is the default for these OSes. - ;; - - mingw* | cygwin* | pw32* | os2*) - # This hack is so that the source file can tell whether it is being - # built for inclusion in a dll (and should export symbols for example). - # Although the cygwin gcc ignores -fPIC, still need this for old-style - # (--disable-auto-import) libraries - lt_prog_compiler_pic='-DDLL_EXPORT' - ;; - - darwin* | rhapsody*) - # PIC is the default on this platform - # Common symbols not allowed in MH_DYLIB files - lt_prog_compiler_pic='-fno-common' - ;; - - interix[3-9]*) - # Interix 3.x gcc -fpic/-fPIC options generate broken code. - # Instead, we relocate shared libraries at runtime. - ;; - - msdosdjgpp*) - # Just because we use GCC doesn't mean we suddenly get shared libraries - # on systems that don't support them. - lt_prog_compiler_can_build_shared=no - enable_shared=no - ;; - - sysv4*MP*) - if test -d /usr/nec; then - lt_prog_compiler_pic=-Kconform_pic - fi - ;; - - hpux*) - # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but - # not for PA HP-UX. - case $host_cpu in - hppa*64*|ia64*) - # +Z the default - ;; - *) - lt_prog_compiler_pic='-fPIC' - ;; - esac - ;; - - *) - lt_prog_compiler_pic='-fPIC' - ;; - esac - else - # PORTME Check for flag to pass linker flags through the system compiler. - case $host_os in - aix*) - lt_prog_compiler_wl='-Wl,' - if test "$host_cpu" = ia64; then - # AIX 5 now supports IA64 processor - lt_prog_compiler_static='-Bstatic' - else - lt_prog_compiler_static='-bnso -bI:/lib/syscalls.exp' - fi - ;; - darwin*) - # PIC is the default on this platform - # Common symbols not allowed in MH_DYLIB files - case $cc_basename in - xlc*) - lt_prog_compiler_pic='-qnocommon' - lt_prog_compiler_wl='-Wl,' - ;; - esac - ;; - - mingw* | cygwin* | pw32* | os2*) - # This hack is so that the source file can tell whether it is being - # built for inclusion in a dll (and should export symbols for example). - lt_prog_compiler_pic='-DDLL_EXPORT' - ;; - - hpux9* | hpux10* | hpux11*) - lt_prog_compiler_wl='-Wl,' - # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but - # not for PA HP-UX. - case $host_cpu in - hppa*64*|ia64*) - # +Z the default - ;; - *) - lt_prog_compiler_pic='+Z' - ;; - esac - # Is there a better lt_prog_compiler_static that works with the bundled CC? - lt_prog_compiler_static='${wl}-a ${wl}archive' - ;; - - irix5* | irix6* | nonstopux*) - lt_prog_compiler_wl='-Wl,' - # PIC (with -KPIC) is the default. - lt_prog_compiler_static='-non_shared' - ;; - - newsos6) - lt_prog_compiler_pic='-KPIC' - lt_prog_compiler_static='-Bstatic' - ;; - - linux* | k*bsd*-gnu) - case $cc_basename in - icc* | ecc*) - lt_prog_compiler_wl='-Wl,' - lt_prog_compiler_pic='-KPIC' - lt_prog_compiler_static='-static' - ;; - pgcc* | pgf77* | pgf90* | pgf95*) - # Portland Group compilers (*not* the Pentium gcc compiler, - # which looks to be a dead project) - lt_prog_compiler_wl='-Wl,' - lt_prog_compiler_pic='-fpic' - lt_prog_compiler_static='-Bstatic' - ;; - ccc*) - lt_prog_compiler_wl='-Wl,' - # All Alpha code is PIC. - lt_prog_compiler_static='-non_shared' - ;; - *) - case `$CC -V 2>&1 | sed 5q` in - *Sun\ C*) - # Sun C 5.9 - lt_prog_compiler_pic='-KPIC' - lt_prog_compiler_static='-Bstatic' - lt_prog_compiler_wl='-Wl,' - ;; - *Sun\ F*) - # Sun Fortran 8.3 passes all unrecognized flags to the linker - lt_prog_compiler_pic='-KPIC' - lt_prog_compiler_static='-Bstatic' - lt_prog_compiler_wl='' - ;; - esac - ;; - esac - ;; - - osf3* | osf4* | osf5*) - lt_prog_compiler_wl='-Wl,' - # All OSF/1 code is PIC. - lt_prog_compiler_static='-non_shared' - ;; - - rdos*) - lt_prog_compiler_static='-non_shared' - ;; - - solaris*) - lt_prog_compiler_pic='-KPIC' - lt_prog_compiler_static='-Bstatic' - case $cc_basename in - f77* | f90* | f95*) - lt_prog_compiler_wl='-Qoption ld ';; - *) - lt_prog_compiler_wl='-Wl,';; - esac - ;; - - sunos4*) - lt_prog_compiler_wl='-Qoption ld ' - lt_prog_compiler_pic='-PIC' - lt_prog_compiler_static='-Bstatic' - ;; - - sysv4 | sysv4.2uw2* | sysv4.3*) - lt_prog_compiler_wl='-Wl,' - lt_prog_compiler_pic='-KPIC' - lt_prog_compiler_static='-Bstatic' - ;; - - sysv4*MP*) - if test -d /usr/nec ;then - lt_prog_compiler_pic='-Kconform_pic' - lt_prog_compiler_static='-Bstatic' - fi - ;; - - sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*) - lt_prog_compiler_wl='-Wl,' - lt_prog_compiler_pic='-KPIC' - lt_prog_compiler_static='-Bstatic' - ;; - - unicos*) - lt_prog_compiler_wl='-Wl,' - lt_prog_compiler_can_build_shared=no - ;; - - uts4*) - lt_prog_compiler_pic='-pic' - lt_prog_compiler_static='-Bstatic' - ;; - - *) - lt_prog_compiler_can_build_shared=no - ;; - esac - fi - -{ echo "$as_me:$LINENO: result: $lt_prog_compiler_pic" >&5 -echo "${ECHO_T}$lt_prog_compiler_pic" >&6; } - -# -# Check to make sure the PIC flag actually works. -# -if test -n "$lt_prog_compiler_pic"; then - -{ echo "$as_me:$LINENO: checking if $compiler PIC flag $lt_prog_compiler_pic works" >&5 -echo $ECHO_N "checking if $compiler PIC flag $lt_prog_compiler_pic works... $ECHO_C" >&6; } -if test "${lt_prog_compiler_pic_works+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - lt_prog_compiler_pic_works=no - ac_outfile=conftest.$ac_objext - echo "$lt_simple_compile_test_code" > conftest.$ac_ext - lt_compiler_flag="$lt_prog_compiler_pic -DPIC" - # Insert the option either (1) after the last *FLAGS variable, or - # (2) before a word containing "conftest.", or (3) at the end. - # Note that $ac_compile itself does not contain backslashes and begins - # with a dollar sign (not a hyphen), so the echo should work correctly. - # The option is referenced via a variable to avoid confusing sed. - lt_compile=`echo "$ac_compile" | $SED \ - -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ - -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ - -e 's:$: $lt_compiler_flag:'` - (eval echo "\"\$as_me:7726: $lt_compile\"" >&5) - (eval "$lt_compile" 2>conftest.err) - ac_status=$? - cat conftest.err >&5 - echo "$as_me:7730: \$? = $ac_status" >&5 - if (exit $ac_status) && test -s "$ac_outfile"; then - # The compiler can only warn and ignore the option if not recognized - # So say no if there are warnings other than the usual output. - $echo "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' >conftest.exp - $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 - if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then - lt_prog_compiler_pic_works=yes - fi - fi - $rm conftest* - -fi -{ echo "$as_me:$LINENO: result: $lt_prog_compiler_pic_works" >&5 -echo "${ECHO_T}$lt_prog_compiler_pic_works" >&6; } - -if test x"$lt_prog_compiler_pic_works" = xyes; then - case $lt_prog_compiler_pic in - "" | " "*) ;; - *) lt_prog_compiler_pic=" $lt_prog_compiler_pic" ;; - esac -else - lt_prog_compiler_pic= - lt_prog_compiler_can_build_shared=no -fi - -fi -case $host_os in - # For platforms which do not support PIC, -DPIC is meaningless: - *djgpp*) - lt_prog_compiler_pic= - ;; - *) - lt_prog_compiler_pic="$lt_prog_compiler_pic -DPIC" - ;; -esac - -# -# Check to make sure the static flag actually works. -# -wl=$lt_prog_compiler_wl eval lt_tmp_static_flag=\"$lt_prog_compiler_static\" -{ echo "$as_me:$LINENO: checking if $compiler static flag $lt_tmp_static_flag works" >&5 -echo $ECHO_N "checking if $compiler static flag $lt_tmp_static_flag works... $ECHO_C" >&6; } -if test "${lt_prog_compiler_static_works+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - lt_prog_compiler_static_works=no - save_LDFLAGS="$LDFLAGS" - LDFLAGS="$LDFLAGS $lt_tmp_static_flag" - echo "$lt_simple_link_test_code" > conftest.$ac_ext - if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then - # The linker can only warn and ignore the option if not recognized - # So say no if there are warnings - if test -s conftest.err; then - # Append any errors to the config.log. - cat conftest.err 1>&5 - $echo "X$_lt_linker_boilerplate" | $Xsed -e '/^$/d' > conftest.exp - $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 - if diff conftest.exp conftest.er2 >/dev/null; then - lt_prog_compiler_static_works=yes - fi - else - lt_prog_compiler_static_works=yes - fi - fi - $rm conftest* - LDFLAGS="$save_LDFLAGS" - -fi -{ echo "$as_me:$LINENO: result: $lt_prog_compiler_static_works" >&5 -echo "${ECHO_T}$lt_prog_compiler_static_works" >&6; } - -if test x"$lt_prog_compiler_static_works" = xyes; then - : -else - lt_prog_compiler_static= -fi - - -{ echo "$as_me:$LINENO: checking if $compiler supports -c -o file.$ac_objext" >&5 -echo $ECHO_N "checking if $compiler supports -c -o file.$ac_objext... $ECHO_C" >&6; } -if test "${lt_cv_prog_compiler_c_o+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - lt_cv_prog_compiler_c_o=no - $rm -r conftest 2>/dev/null - mkdir conftest - cd conftest - mkdir out - echo "$lt_simple_compile_test_code" > conftest.$ac_ext - - lt_compiler_flag="-o out/conftest2.$ac_objext" - # Insert the option either (1) after the last *FLAGS variable, or - # (2) before a word containing "conftest.", or (3) at the end. - # Note that $ac_compile itself does not contain backslashes and begins - # with a dollar sign (not a hyphen), so the echo should work correctly. - lt_compile=`echo "$ac_compile" | $SED \ - -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ - -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ - -e 's:$: $lt_compiler_flag:'` - (eval echo "\"\$as_me:7830: $lt_compile\"" >&5) - (eval "$lt_compile" 2>out/conftest.err) - ac_status=$? - cat out/conftest.err >&5 - echo "$as_me:7834: \$? = $ac_status" >&5 - if (exit $ac_status) && test -s out/conftest2.$ac_objext - then - # The compiler can only warn and ignore the option if not recognized - # So say no if there are warnings - $echo "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' > out/conftest.exp - $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2 - if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then - lt_cv_prog_compiler_c_o=yes - fi - fi - chmod u+w . 2>&5 - $rm conftest* - # SGI C++ compiler will create directory out/ii_files/ for - # template instantiation - test -d out/ii_files && $rm out/ii_files/* && rmdir out/ii_files - $rm out/* && rmdir out - cd .. - rmdir conftest - $rm conftest* - -fi -{ echo "$as_me:$LINENO: result: $lt_cv_prog_compiler_c_o" >&5 -echo "${ECHO_T}$lt_cv_prog_compiler_c_o" >&6; } - - -hard_links="nottested" -if test "$lt_cv_prog_compiler_c_o" = no && test "$need_locks" != no; then - # do not overwrite the value of need_locks provided by the user - { echo "$as_me:$LINENO: checking if we can lock with hard links" >&5 -echo $ECHO_N "checking if we can lock with hard links... $ECHO_C" >&6; } - hard_links=yes - $rm conftest* - ln conftest.a conftest.b 2>/dev/null && hard_links=no - touch conftest.a - ln conftest.a conftest.b 2>&5 || hard_links=no - ln conftest.a conftest.b 2>/dev/null && hard_links=no - { echo "$as_me:$LINENO: result: $hard_links" >&5 -echo "${ECHO_T}$hard_links" >&6; } - if test "$hard_links" = no; then - { echo "$as_me:$LINENO: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&5 -echo "$as_me: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&2;} - need_locks=warn - fi -else - need_locks=no -fi - -{ echo "$as_me:$LINENO: checking whether the $compiler linker ($LD) supports shared libraries" >&5 -echo $ECHO_N "checking whether the $compiler linker ($LD) supports shared libraries... $ECHO_C" >&6; } - - runpath_var= - allow_undefined_flag= - enable_shared_with_static_runtimes=no - archive_cmds= - archive_expsym_cmds= - old_archive_From_new_cmds= - old_archive_from_expsyms_cmds= - export_dynamic_flag_spec= - whole_archive_flag_spec= - thread_safe_flag_spec= - hardcode_libdir_flag_spec= - hardcode_libdir_flag_spec_ld= - hardcode_libdir_separator= - hardcode_direct=no - hardcode_minus_L=no - hardcode_shlibpath_var=unsupported - link_all_deplibs=unknown - hardcode_automatic=no - module_cmds= - module_expsym_cmds= - always_export_symbols=no - export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' - # include_expsyms should be a list of space-separated symbols to be *always* - # included in the symbol list - include_expsyms= - # exclude_expsyms can be an extended regexp of symbols to exclude - # it will be wrapped by ` (' and `)$', so one must not match beginning or - # end of line. Example: `a|bc|.*d.*' will exclude the symbols `a' and `bc', - # as well as any symbol that contains `d'. - exclude_expsyms="_GLOBAL_OFFSET_TABLE_" - # Although _GLOBAL_OFFSET_TABLE_ is a valid symbol C name, most a.out - # platforms (ab)use it in PIC code, but their linkers get confused if - # the symbol is explicitly referenced. Since portable code cannot - # rely on this symbol name, it's probably fine to never include it in - # preloaded symbol tables. - extract_expsyms_cmds= - # Just being paranoid about ensuring that cc_basename is set. - for cc_temp in $compiler""; do - case $cc_temp in - compile | *[\\/]compile | ccache | *[\\/]ccache ) ;; - distcc | *[\\/]distcc | purify | *[\\/]purify ) ;; - \-*) ;; - *) break;; - esac -done -cc_basename=`$echo "X$cc_temp" | $Xsed -e 's%.*/%%' -e "s%^$host_alias-%%"` - - case $host_os in - cygwin* | mingw* | pw32*) - # FIXME: the MSVC++ port hasn't been tested in a loooong time - # When not using gcc, we currently assume that we are using - # Microsoft Visual C++. - if test "$GCC" != yes; then - with_gnu_ld=no - fi - ;; - interix*) - # we just hope/assume this is gcc and not c89 (= MSVC++) - with_gnu_ld=yes - ;; - openbsd*) - with_gnu_ld=no - ;; - esac - - ld_shlibs=yes - if test "$with_gnu_ld" = yes; then - # If archive_cmds runs LD, not CC, wlarc should be empty - wlarc='${wl}' - - # Set some defaults for GNU ld with shared library support. These - # are reset later if shared libraries are not supported. Putting them - # here allows them to be overridden if necessary. - runpath_var=LD_RUN_PATH - hardcode_libdir_flag_spec='${wl}--rpath ${wl}$libdir' - export_dynamic_flag_spec='${wl}--export-dynamic' - # ancient GNU ld didn't support --whole-archive et. al. - if $LD --help 2>&1 | grep 'no-whole-archive' > /dev/null; then - whole_archive_flag_spec="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' - else - whole_archive_flag_spec= - fi - supports_anon_versioning=no - case `$LD -v 2>/dev/null` in - *\ [01].* | *\ 2.[0-9].* | *\ 2.10.*) ;; # catch versions < 2.11 - *\ 2.11.93.0.2\ *) supports_anon_versioning=yes ;; # RH7.3 ... - *\ 2.11.92.0.12\ *) supports_anon_versioning=yes ;; # Mandrake 8.2 ... - *\ 2.11.*) ;; # other 2.11 versions - *) supports_anon_versioning=yes ;; - esac - - # See if GNU ld supports shared libraries. - case $host_os in - aix3* | aix4* | aix5*) - # On AIX/PPC, the GNU linker is very broken - if test "$host_cpu" != ia64; then - ld_shlibs=no - cat <&2 - -*** Warning: the GNU linker, at least up to release 2.9.1, is reported -*** to be unable to reliably create shared libraries on AIX. -*** Therefore, libtool is disabling shared libraries support. If you -*** really care for shared libraries, you may want to modify your PATH -*** so that a non-GNU linker is found, and then restart. - -EOF - fi - ;; - - amigaos*) - archive_cmds='$rm $output_objdir/a2ixlibrary.data~$echo "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$echo "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$echo "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$echo "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' - hardcode_libdir_flag_spec='-L$libdir' - hardcode_minus_L=yes - - # Samuel A. Falvo II reports - # that the semantics of dynamic libraries on AmigaOS, at least up - # to version 4, is to share data among multiple programs linked - # with the same dynamic library. Since this doesn't match the - # behavior of shared libraries on other platforms, we can't use - # them. - ld_shlibs=no - ;; - - beos*) - if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then - allow_undefined_flag=unsupported - # Joseph Beckenbach says some releases of gcc - # support --undefined. This deserves some investigation. FIXME - archive_cmds='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' - else - ld_shlibs=no - fi - ;; - - cygwin* | mingw* | pw32*) - # _LT_AC_TAGVAR(hardcode_libdir_flag_spec, ) is actually meaningless, - # as there is no search path for DLLs. - hardcode_libdir_flag_spec='-L$libdir' - allow_undefined_flag=unsupported - always_export_symbols=no - enable_shared_with_static_runtimes=yes - export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS][ ]/s/.*[ ]\([^ ]*\)/\1 DATA/'\'' -e '\''/^[AITW][ ]/s/.*[ ]//'\'' | sort | uniq > $export_symbols' - - if $LD --help 2>&1 | grep 'auto-import' > /dev/null; then - archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' - # If the export-symbols file already is a .def file (1st line - # is EXPORTS), use it as is; otherwise, prepend... - archive_expsym_cmds='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then - cp $export_symbols $output_objdir/$soname.def; - else - echo EXPORTS > $output_objdir/$soname.def; - cat $export_symbols >> $output_objdir/$soname.def; - fi~ - $CC -shared $output_objdir/$soname.def $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' - else - ld_shlibs=no - fi - ;; - - interix[3-9]*) - hardcode_direct=no - hardcode_shlibpath_var=no - hardcode_libdir_flag_spec='${wl}-rpath,$libdir' - export_dynamic_flag_spec='${wl}-E' - # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc. - # Instead, shared libraries are loaded at an image base (0x10000000 by - # default) and relocated if they conflict, which is a slow very memory - # consuming and fragmenting process. To avoid this, we pick a random, - # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link - # time. Moving up from 0x10000000 also allows more sbrk(2) space. - archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' - archive_expsym_cmds='sed "s,^,_," $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--retain-symbols-file,$output_objdir/$soname.expsym ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' - ;; - - gnu* | linux* | k*bsd*-gnu) - if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then - tmp_addflag= - case $cc_basename,$host_cpu in - pgcc*) # Portland Group C compiler - whole_archive_flag_spec='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $echo \"$new_convenience\"` ${wl}--no-whole-archive' - tmp_addflag=' $pic_flag' - ;; - pgf77* | pgf90* | pgf95*) # Portland Group f77 and f90 compilers - whole_archive_flag_spec='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $echo \"$new_convenience\"` ${wl}--no-whole-archive' - tmp_addflag=' $pic_flag -Mnomain' ;; - ecc*,ia64* | icc*,ia64*) # Intel C compiler on ia64 - tmp_addflag=' -i_dynamic' ;; - efc*,ia64* | ifort*,ia64*) # Intel Fortran compiler on ia64 - tmp_addflag=' -i_dynamic -nofor_main' ;; - ifc* | ifort*) # Intel Fortran compiler - tmp_addflag=' -nofor_main' ;; - esac - case `$CC -V 2>&1 | sed 5q` in - *Sun\ C*) # Sun C 5.9 - whole_archive_flag_spec='${wl}--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; $echo \"$new_convenience\"` ${wl}--no-whole-archive' - tmp_sharedflag='-G' ;; - *Sun\ F*) # Sun Fortran 8.3 - tmp_sharedflag='-G' ;; - *) - tmp_sharedflag='-shared' ;; - esac - archive_cmds='$CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' - - if test $supports_anon_versioning = yes; then - archive_expsym_cmds='$echo "{ global:" > $output_objdir/$libname.ver~ - cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ - $echo "local: *; };" >> $output_objdir/$libname.ver~ - $CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib' - fi - else - ld_shlibs=no - fi - ;; - - netbsd*) - if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then - archive_cmds='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib' - wlarc= - else - archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' - archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' - fi - ;; - - solaris*) - if $LD -v 2>&1 | grep 'BFD 2\.8' > /dev/null; then - ld_shlibs=no - cat <&2 - -*** Warning: The releases 2.8.* of the GNU linker cannot reliably -*** create shared libraries on Solaris systems. Therefore, libtool -*** is disabling shared libraries support. We urge you to upgrade GNU -*** binutils to release 2.9.1 or newer. Another option is to modify -*** your PATH or compiler configuration so that the native linker is -*** used, and then restart. - -EOF - elif $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then - archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' - archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' - else - ld_shlibs=no - fi - ;; - - sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX*) - case `$LD -v 2>&1` in - *\ [01].* | *\ 2.[0-9].* | *\ 2.1[0-5].*) - ld_shlibs=no - cat <<_LT_EOF 1>&2 - -*** Warning: Releases of the GNU linker prior to 2.16.91.0.3 can not -*** reliably create shared libraries on SCO systems. Therefore, libtool -*** is disabling shared libraries support. We urge you to upgrade GNU -*** binutils to release 2.16.91.0.3 or newer. Another option is to modify -*** your PATH or compiler configuration so that the native linker is -*** used, and then restart. - -_LT_EOF - ;; - *) - if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then - hardcode_libdir_flag_spec='`test -z "$SCOABSPATH" && echo ${wl}-rpath,$libdir`' - archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib' - archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname,\${SCOABSPATH:+${install_libdir}/}$soname,-retain-symbols-file,$export_symbols -o $lib' - else - ld_shlibs=no - fi - ;; - esac - ;; - - sunos4*) - archive_cmds='$LD -assert pure-text -Bshareable -o $lib $libobjs $deplibs $linker_flags' - wlarc= - hardcode_direct=yes - hardcode_shlibpath_var=no - ;; - - *) - if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then - archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' - archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' - else - ld_shlibs=no - fi - ;; - esac - - if test "$ld_shlibs" = no; then - runpath_var= - hardcode_libdir_flag_spec= - export_dynamic_flag_spec= - whole_archive_flag_spec= - fi - else - # PORTME fill in a description of your system's linker (not GNU ld) - case $host_os in - aix3*) - allow_undefined_flag=unsupported - always_export_symbols=yes - archive_expsym_cmds='$LD -o $output_objdir/$soname $libobjs $deplibs $linker_flags -bE:$export_symbols -T512 -H512 -bM:SRE~$AR $AR_FLAGS $lib $output_objdir/$soname' - # Note: this linker hardcodes the directories in LIBPATH if there - # are no directories specified by -L. - hardcode_minus_L=yes - if test "$GCC" = yes && test -z "$lt_prog_compiler_static"; then - # Neither direct hardcoding nor static linking is supported with a - # broken collect2. - hardcode_direct=unsupported - fi - ;; - - aix4* | aix5*) - if test "$host_cpu" = ia64; then - # On IA64, the linker does run time linking by default, so we don't - # have to do anything special. - aix_use_runtimelinking=no - exp_sym_flag='-Bexport' - no_entry_flag="" - else - # If we're using GNU nm, then we don't want the "-C" option. - # -C means demangle to AIX nm, but means don't demangle with GNU nm - if $NM -V 2>&1 | grep 'GNU' > /dev/null; then - export_symbols_cmds='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$2 == "T") || (\$2 == "D") || (\$2 == "B")) && (substr(\$3,1,1) != ".")) { print \$3 } }'\'' | sort -u > $export_symbols' - else - export_symbols_cmds='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$2 == "T") || (\$2 == "D") || (\$2 == "B")) && (substr(\$3,1,1) != ".")) { print \$3 } }'\'' | sort -u > $export_symbols' - fi - aix_use_runtimelinking=no - - # Test if we are trying to use run time linking or normal - # AIX style linking. If -brtl is somewhere in LDFLAGS, we - # need to do runtime linking. - case $host_os in aix4.[23]|aix4.[23].*|aix5*) - for ld_flag in $LDFLAGS; do - if (test $ld_flag = "-brtl" || test $ld_flag = "-Wl,-brtl"); then - aix_use_runtimelinking=yes - break - fi - done - ;; - esac - - exp_sym_flag='-bexport' - no_entry_flag='-bnoentry' - fi - - # When large executables or shared objects are built, AIX ld can - # have problems creating the table of contents. If linking a library - # or program results in "error TOC overflow" add -mminimal-toc to - # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not - # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS. - - archive_cmds='' - hardcode_direct=yes - hardcode_libdir_separator=':' - link_all_deplibs=yes - - if test "$GCC" = yes; then - case $host_os in aix4.[012]|aix4.[012].*) - # We only want to do this on AIX 4.2 and lower, the check - # below for broken collect2 doesn't work under 4.3+ - collect2name=`${CC} -print-prog-name=collect2` - if test -f "$collect2name" && \ - strings "$collect2name" | grep resolve_lib_name >/dev/null - then - # We have reworked collect2 - : - else - # We have old collect2 - hardcode_direct=unsupported - # It fails to find uninstalled libraries when the uninstalled - # path is not listed in the libpath. Setting hardcode_minus_L - # to unsupported forces relinking - hardcode_minus_L=yes - hardcode_libdir_flag_spec='-L$libdir' - hardcode_libdir_separator= - fi - ;; - esac - shared_flag='-shared' - if test "$aix_use_runtimelinking" = yes; then - shared_flag="$shared_flag "'${wl}-G' - fi - else - # not using gcc - if test "$host_cpu" = ia64; then - # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release - # chokes on -Wl,-G. The following line is correct: - shared_flag='-G' - else - if test "$aix_use_runtimelinking" = yes; then - shared_flag='${wl}-G' - else - shared_flag='${wl}-bM:SRE' - fi - fi - fi - - # It seems that -bexpall does not export symbols beginning with - # underscore (_), so it is better to generate a list of symbols to export. - always_export_symbols=yes - if test "$aix_use_runtimelinking" = yes; then - # Warning - without using the other runtime loading flags (-brtl), - # -berok will link without error, but may produce a broken library. - allow_undefined_flag='-berok' - # Determine the default libpath from the value encoded in an empty executable. - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ - -int -main () -{ - - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext conftest$ac_exeext -if { (ac_try="$ac_link" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_link") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest$ac_exeext && - $as_test_x conftest$ac_exeext; then - -lt_aix_libpath_sed=' - /Import File Strings/,/^$/ { - /^0/ { - s/^0 *\(.*\)$/\1/ - p - } - }' -aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` -# Check for a 64-bit object if we didn't find anything. -if test -z "$aix_libpath"; then - aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` -fi -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - -fi - -rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ - conftest$ac_exeext conftest.$ac_ext -if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi - - hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'"$aix_libpath" - archive_expsym_cmds="\$CC"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then echo "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag" - else - if test "$host_cpu" = ia64; then - hardcode_libdir_flag_spec='${wl}-R $libdir:/usr/lib:/lib' - allow_undefined_flag="-z nodefs" - archive_expsym_cmds="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$exp_sym_flag:\$export_symbols" - else - # Determine the default libpath from the value encoded in an empty executable. - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ - -int -main () -{ - - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext conftest$ac_exeext -if { (ac_try="$ac_link" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_link") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest$ac_exeext && - $as_test_x conftest$ac_exeext; then - -lt_aix_libpath_sed=' - /Import File Strings/,/^$/ { - /^0/ { - s/^0 *\(.*\)$/\1/ - p - } - }' -aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` -# Check for a 64-bit object if we didn't find anything. -if test -z "$aix_libpath"; then - aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` -fi -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - -fi - -rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ - conftest$ac_exeext conftest.$ac_ext -if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi - - hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'"$aix_libpath" - # Warning - without using the other run time loading flags, - # -berok will link without error, but may produce a broken library. - no_undefined_flag=' ${wl}-bernotok' - allow_undefined_flag=' ${wl}-berok' - # Exported symbols can be pulled into shared objects from archives - whole_archive_flag_spec='$convenience' - archive_cmds_need_lc=yes - # This is similar to how AIX traditionally builds its shared libraries. - archive_expsym_cmds="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs ${wl}-bnoentry $compiler_flags ${wl}-bE:$export_symbols${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname' - fi - fi - ;; - - amigaos*) - archive_cmds='$rm $output_objdir/a2ixlibrary.data~$echo "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$echo "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$echo "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$echo "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' - hardcode_libdir_flag_spec='-L$libdir' - hardcode_minus_L=yes - # see comment about different semantics on the GNU ld section - ld_shlibs=no - ;; - - bsdi[45]*) - export_dynamic_flag_spec=-rdynamic - ;; - - cygwin* | mingw* | pw32*) - # When not using gcc, we currently assume that we are using - # Microsoft Visual C++. - # hardcode_libdir_flag_spec is actually meaningless, as there is - # no search path for DLLs. - hardcode_libdir_flag_spec=' ' - allow_undefined_flag=unsupported - # Tell ltmain to make .lib files, not .a files. - libext=lib - # Tell ltmain to make .dll files, not .so files. - shrext_cmds=".dll" - # FIXME: Setting linknames here is a bad hack. - archive_cmds='$CC -o $lib $libobjs $compiler_flags `echo "$deplibs" | $SED -e '\''s/ -lc$//'\''` -link -dll~linknames=' - # The linker will automatically build a .lib file if we build a DLL. - old_archive_From_new_cmds='true' - # FIXME: Should let the user specify the lib program. - old_archive_cmds='lib -OUT:$oldlib$oldobjs$old_deplibs' - fix_srcfile_path='`cygpath -w "$srcfile"`' - enable_shared_with_static_runtimes=yes - ;; - - darwin* | rhapsody*) - case $host_os in - rhapsody* | darwin1.[012]) - allow_undefined_flag='${wl}-undefined ${wl}suppress' - ;; - *) # Darwin 1.3 on - if test -z ${MACOSX_DEPLOYMENT_TARGET} ; then - allow_undefined_flag='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' - else - case ${MACOSX_DEPLOYMENT_TARGET} in - 10.[012]) - allow_undefined_flag='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' - ;; - 10.*) - allow_undefined_flag='${wl}-undefined ${wl}dynamic_lookup' - ;; - esac - fi - ;; - esac - archive_cmds_need_lc=no - hardcode_direct=no - hardcode_automatic=yes - hardcode_shlibpath_var=unsupported - whole_archive_flag_spec='' - link_all_deplibs=yes - if test "$GCC" = yes ; then - output_verbose_link_cmd='echo' - archive_cmds='$CC -dynamiclib $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags -install_name $rpath/$soname $verstring' - module_cmds='$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags' - # Don't fix this by using the ld -exported_symbols_list flag, it doesn't exist in older darwin lds - archive_expsym_cmds='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -dynamiclib $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags -install_name $rpath/$soname $verstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' - module_expsym_cmds='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' - else - case $cc_basename in - xlc*) - output_verbose_link_cmd='echo' - archive_cmds='$CC -qmkshrobj $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-install_name ${wl}`echo $rpath/$soname` $xlcverstring' - module_cmds='$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags' - # Don't fix this by using the ld -exported_symbols_list flag, it doesn't exist in older darwin lds - archive_expsym_cmds='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -qmkshrobj $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-install_name ${wl}$rpath/$soname $xlcverstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' - module_expsym_cmds='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' - ;; - *) - ld_shlibs=no - ;; - esac - fi - ;; - - dgux*) - archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' - hardcode_libdir_flag_spec='-L$libdir' - hardcode_shlibpath_var=no - ;; - - freebsd1*) - ld_shlibs=no - ;; - - # FreeBSD 2.2.[012] allows us to include c++rt0.o to get C++ constructor - # support. Future versions do this automatically, but an explicit c++rt0.o - # does not break anything, and helps significantly (at the cost of a little - # extra space). - freebsd2.2*) - archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags /usr/lib/c++rt0.o' - hardcode_libdir_flag_spec='-R$libdir' - hardcode_direct=yes - hardcode_shlibpath_var=no - ;; - - # Unfortunately, older versions of FreeBSD 2 do not have this feature. - freebsd2*) - archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' - hardcode_direct=yes - hardcode_minus_L=yes - hardcode_shlibpath_var=no - ;; - - # FreeBSD 3 and greater uses gcc -shared to do shared libraries. - freebsd* | dragonfly*) - archive_cmds='$CC -shared -o $lib $libobjs $deplibs $compiler_flags' - hardcode_libdir_flag_spec='-R$libdir' - hardcode_direct=yes - hardcode_shlibpath_var=no - ;; - - hpux9*) - if test "$GCC" = yes; then - archive_cmds='$rm $output_objdir/$soname~$CC -shared -fPIC ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' - else - archive_cmds='$rm $output_objdir/$soname~$LD -b +b $install_libdir -o $output_objdir/$soname $libobjs $deplibs $linker_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' - fi - hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir' - hardcode_libdir_separator=: - hardcode_direct=yes - - # hardcode_minus_L: Not really in the search PATH, - # but as the default location of the library. - hardcode_minus_L=yes - export_dynamic_flag_spec='${wl}-E' - ;; - - hpux10*) - if test "$GCC" = yes -a "$with_gnu_ld" = no; then - archive_cmds='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' - else - archive_cmds='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags' - fi - if test "$with_gnu_ld" = no; then - hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir' - hardcode_libdir_separator=: - - hardcode_direct=yes - export_dynamic_flag_spec='${wl}-E' - - # hardcode_minus_L: Not really in the search PATH, - # but as the default location of the library. - hardcode_minus_L=yes - fi - ;; - - hpux11*) - if test "$GCC" = yes -a "$with_gnu_ld" = no; then - case $host_cpu in - hppa*64*) - archive_cmds='$CC -shared ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' - ;; - ia64*) - archive_cmds='$CC -shared ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' - ;; - *) - archive_cmds='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' - ;; - esac - else - case $host_cpu in - hppa*64*) - archive_cmds='$CC -b ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' - ;; - ia64*) - archive_cmds='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' - ;; - *) - archive_cmds='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' - ;; - esac - fi - if test "$with_gnu_ld" = no; then - hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir' - hardcode_libdir_separator=: - - case $host_cpu in - hppa*64*|ia64*) - hardcode_libdir_flag_spec_ld='+b $libdir' - hardcode_direct=no - hardcode_shlibpath_var=no - ;; - *) - hardcode_direct=yes - export_dynamic_flag_spec='${wl}-E' - - # hardcode_minus_L: Not really in the search PATH, - # but as the default location of the library. - hardcode_minus_L=yes - ;; - esac - fi - ;; - - irix5* | irix6* | nonstopux*) - if test "$GCC" = yes; then - archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' - else - archive_cmds='$LD -shared $libobjs $deplibs $linker_flags -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib' - hardcode_libdir_flag_spec_ld='-rpath $libdir' - fi - hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' - hardcode_libdir_separator=: - link_all_deplibs=yes - ;; - - netbsd*) - if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then - archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' # a.out - else - archive_cmds='$LD -shared -o $lib $libobjs $deplibs $linker_flags' # ELF - fi - hardcode_libdir_flag_spec='-R$libdir' - hardcode_direct=yes - hardcode_shlibpath_var=no - ;; - - newsos6) - archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' - hardcode_direct=yes - hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' - hardcode_libdir_separator=: - hardcode_shlibpath_var=no - ;; - - openbsd*) - if test -f /usr/libexec/ld.so; then - hardcode_direct=yes - hardcode_shlibpath_var=no - if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then - archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' - archive_expsym_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-retain-symbols-file,$export_symbols' - hardcode_libdir_flag_spec='${wl}-rpath,$libdir' - export_dynamic_flag_spec='${wl}-E' - else - case $host_os in - openbsd[01].* | openbsd2.[0-7] | openbsd2.[0-7].*) - archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' - hardcode_libdir_flag_spec='-R$libdir' - ;; - *) - archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' - hardcode_libdir_flag_spec='${wl}-rpath,$libdir' - ;; - esac - fi - else - ld_shlibs=no - fi - ;; - - os2*) - hardcode_libdir_flag_spec='-L$libdir' - hardcode_minus_L=yes - allow_undefined_flag=unsupported - archive_cmds='$echo "LIBRARY $libname INITINSTANCE" > $output_objdir/$libname.def~$echo "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~$echo DATA >> $output_objdir/$libname.def~$echo " SINGLE NONSHARED" >> $output_objdir/$libname.def~$echo EXPORTS >> $output_objdir/$libname.def~emxexp $libobjs >> $output_objdir/$libname.def~$CC -Zdll -Zcrtdll -o $lib $libobjs $deplibs $compiler_flags $output_objdir/$libname.def' - old_archive_From_new_cmds='emximp -o $output_objdir/$libname.a $output_objdir/$libname.def' - ;; - - osf3*) - if test "$GCC" = yes; then - allow_undefined_flag=' ${wl}-expect_unresolved ${wl}\*' - archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' - else - allow_undefined_flag=' -expect_unresolved \*' - archive_cmds='$LD -shared${allow_undefined_flag} $libobjs $deplibs $linker_flags -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib' - fi - hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' - hardcode_libdir_separator=: - ;; - - osf4* | osf5*) # as osf3* with the addition of -msym flag - if test "$GCC" = yes; then - allow_undefined_flag=' ${wl}-expect_unresolved ${wl}\*' - archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' - hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' - else - allow_undefined_flag=' -expect_unresolved \*' - archive_cmds='$LD -shared${allow_undefined_flag} $libobjs $deplibs $linker_flags -msym -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib' - archive_expsym_cmds='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done; echo "-hidden">> $lib.exp~ - $LD -shared${allow_undefined_flag} -input $lib.exp $linker_flags $libobjs $deplibs -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib~$rm $lib.exp' - - # Both c and cxx compiler support -rpath directly - hardcode_libdir_flag_spec='-rpath $libdir' - fi - hardcode_libdir_separator=: - ;; - - solaris*) - no_undefined_flag=' -z text' - if test "$GCC" = yes; then - wlarc='${wl}' - archive_cmds='$CC -shared ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' - archive_expsym_cmds='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~ - $CC -shared ${wl}-M ${wl}$lib.exp ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags~$rm $lib.exp' - else - wlarc='' - archive_cmds='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linker_flags' - archive_expsym_cmds='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~ - $LD -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$rm $lib.exp' - fi - hardcode_libdir_flag_spec='-R$libdir' - hardcode_shlibpath_var=no - case $host_os in - solaris2.[0-5] | solaris2.[0-5].*) ;; - *) - # The compiler driver will combine and reorder linker options, - # but understands `-z linker_flag'. GCC discards it without `$wl', - # but is careful enough not to reorder. - # Supported since Solaris 2.6 (maybe 2.5.1?) - if test "$GCC" = yes; then - whole_archive_flag_spec='${wl}-z ${wl}allextract$convenience ${wl}-z ${wl}defaultextract' - else - whole_archive_flag_spec='-z allextract$convenience -z defaultextract' - fi - ;; - esac - link_all_deplibs=yes - ;; - - sunos4*) - if test "x$host_vendor" = xsequent; then - # Use $CC to link under sequent, because it throws in some extra .o - # files that make .init and .fini sections work. - archive_cmds='$CC -G ${wl}-h $soname -o $lib $libobjs $deplibs $compiler_flags' - else - archive_cmds='$LD -assert pure-text -Bstatic -o $lib $libobjs $deplibs $linker_flags' - fi - hardcode_libdir_flag_spec='-L$libdir' - hardcode_direct=yes - hardcode_minus_L=yes - hardcode_shlibpath_var=no - ;; - - sysv4) - case $host_vendor in - sni) - archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' - hardcode_direct=yes # is this really true??? - ;; - siemens) - ## LD is ld it makes a PLAMLIB - ## CC just makes a GrossModule. - archive_cmds='$LD -G -o $lib $libobjs $deplibs $linker_flags' - reload_cmds='$CC -r -o $output$reload_objs' - hardcode_direct=no - ;; - motorola) - archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' - hardcode_direct=no #Motorola manual says yes, but my tests say they lie - ;; - esac - runpath_var='LD_RUN_PATH' - hardcode_shlibpath_var=no - ;; - - sysv4.3*) - archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' - hardcode_shlibpath_var=no - export_dynamic_flag_spec='-Bexport' - ;; - - sysv4*MP*) - if test -d /usr/nec; then - archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' - hardcode_shlibpath_var=no - runpath_var=LD_RUN_PATH - hardcode_runpath_var=yes - ld_shlibs=yes - fi - ;; - - sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[01].[10]* | unixware7* | sco3.2v5.0.[024]*) - no_undefined_flag='${wl}-z,text' - archive_cmds_need_lc=no - hardcode_shlibpath_var=no - runpath_var='LD_RUN_PATH' - - if test "$GCC" = yes; then - archive_cmds='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - archive_expsym_cmds='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - else - archive_cmds='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - archive_expsym_cmds='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - fi - ;; - - sysv5* | sco3.2v5* | sco5v6*) - # Note: We can NOT use -z defs as we might desire, because we do not - # link with -lc, and that would cause any symbols used from libc to - # always be unresolved, which means just about no library would - # ever link correctly. If we're not using GNU ld we use -z text - # though, which does catch some bad symbols but isn't as heavy-handed - # as -z defs. - no_undefined_flag='${wl}-z,text' - allow_undefined_flag='${wl}-z,nodefs' - archive_cmds_need_lc=no - hardcode_shlibpath_var=no - hardcode_libdir_flag_spec='`test -z "$SCOABSPATH" && echo ${wl}-R,$libdir`' - hardcode_libdir_separator=':' - link_all_deplibs=yes - export_dynamic_flag_spec='${wl}-Bexport' - runpath_var='LD_RUN_PATH' - - if test "$GCC" = yes; then - archive_cmds='$CC -shared ${wl}-h,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags' - archive_expsym_cmds='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags' - else - archive_cmds='$CC -G ${wl}-h,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags' - archive_expsym_cmds='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags' - fi - ;; - - uts4*) - archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' - hardcode_libdir_flag_spec='-L$libdir' - hardcode_shlibpath_var=no - ;; - - *) - ld_shlibs=no - ;; - esac - fi - -{ echo "$as_me:$LINENO: result: $ld_shlibs" >&5 -echo "${ECHO_T}$ld_shlibs" >&6; } -test "$ld_shlibs" = no && can_build_shared=no - -# -# Do we need to explicitly link libc? -# -case "x$archive_cmds_need_lc" in -x|xyes) - # Assume -lc should be added - archive_cmds_need_lc=yes - - if test "$enable_shared" = yes && test "$GCC" = yes; then - case $archive_cmds in - *'~'*) - # FIXME: we may have to deal with multi-command sequences. - ;; - '$CC '*) - # Test whether the compiler implicitly links with -lc since on some - # systems, -lgcc has to come before -lc. If gcc already passes -lc - # to ld, don't add -lc before -lgcc. - { echo "$as_me:$LINENO: checking whether -lc should be explicitly linked in" >&5 -echo $ECHO_N "checking whether -lc should be explicitly linked in... $ECHO_C" >&6; } - $rm conftest* - echo "$lt_simple_compile_test_code" > conftest.$ac_ext - - if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } 2>conftest.err; then - soname=conftest - lib=conftest - libobjs=conftest.$ac_objext - deplibs= - wl=$lt_prog_compiler_wl - pic_flag=$lt_prog_compiler_pic - compiler_flags=-v - linker_flags=-v - verstring= - output_objdir=. - libname=conftest - lt_save_allow_undefined_flag=$allow_undefined_flag - allow_undefined_flag= - if { (eval echo "$as_me:$LINENO: \"$archive_cmds 2\>\&1 \| grep \" -lc \" \>/dev/null 2\>\&1\"") >&5 - (eval $archive_cmds 2\>\&1 \| grep \" -lc \" \>/dev/null 2\>\&1) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } - then - archive_cmds_need_lc=no - else - archive_cmds_need_lc=yes - fi - allow_undefined_flag=$lt_save_allow_undefined_flag - else - cat conftest.err 1>&5 - fi - $rm conftest* - { echo "$as_me:$LINENO: result: $archive_cmds_need_lc" >&5 -echo "${ECHO_T}$archive_cmds_need_lc" >&6; } - ;; - esac - fi - ;; -esac - -{ echo "$as_me:$LINENO: checking dynamic linker characteristics" >&5 -echo $ECHO_N "checking dynamic linker characteristics... $ECHO_C" >&6; } -library_names_spec= -libname_spec='lib$name' -soname_spec= -shrext_cmds=".so" -postinstall_cmds= -postuninstall_cmds= -finish_cmds= -finish_eval= -shlibpath_var= -shlibpath_overrides_runpath=unknown -version_type=none -dynamic_linker="$host_os ld.so" -sys_lib_dlsearch_path_spec="/lib /usr/lib" - -if test "$GCC" = yes; then - case $host_os in - darwin*) lt_awk_arg="/^libraries:/,/LR/" ;; - *) lt_awk_arg="/^libraries:/" ;; - esac - lt_search_path_spec=`$CC -print-search-dirs | awk $lt_awk_arg | $SED -e "s/^libraries://" -e "s,=/,/,g"` - if echo "$lt_search_path_spec" | grep ';' >/dev/null ; then - # if the path contains ";" then we assume it to be the separator - # otherwise default to the standard path separator (i.e. ":") - it is - # assumed that no part of a normal pathname contains ";" but that should - # okay in the real world where ";" in dirpaths is itself problematic. - lt_search_path_spec=`echo "$lt_search_path_spec" | $SED -e 's/;/ /g'` - else - lt_search_path_spec=`echo "$lt_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` - fi - # Ok, now we have the path, separated by spaces, we can step through it - # and add multilib dir if necessary. - lt_tmp_lt_search_path_spec= - lt_multi_os_dir=`$CC $CPPFLAGS $CFLAGS $LDFLAGS -print-multi-os-directory 2>/dev/null` - for lt_sys_path in $lt_search_path_spec; do - if test -d "$lt_sys_path/$lt_multi_os_dir"; then - lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path/$lt_multi_os_dir" - else - test -d "$lt_sys_path" && \ - lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path" - fi - done - lt_search_path_spec=`echo $lt_tmp_lt_search_path_spec | awk ' -BEGIN {RS=" "; FS="/|\n";} { - lt_foo=""; - lt_count=0; - for (lt_i = NF; lt_i > 0; lt_i--) { - if ($lt_i != "" && $lt_i != ".") { - if ($lt_i == "..") { - lt_count++; - } else { - if (lt_count == 0) { - lt_foo="/" $lt_i lt_foo; - } else { - lt_count--; - } - } - } - } - if (lt_foo != "") { lt_freq[lt_foo]++; } - if (lt_freq[lt_foo] == 1) { print lt_foo; } -}'` - sys_lib_search_path_spec=`echo $lt_search_path_spec` -else - sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib" -fi -need_lib_prefix=unknown -hardcode_into_libs=no - -# when you set need_version to no, make sure it does not cause -set_version -# flags to be left without arguments -need_version=unknown - -case $host_os in -aix3*) - version_type=linux - library_names_spec='${libname}${release}${shared_ext}$versuffix $libname.a' - shlibpath_var=LIBPATH - - # AIX 3 has no versioning support, so we append a major version to the name. - soname_spec='${libname}${release}${shared_ext}$major' - ;; - -aix4* | aix5*) - version_type=linux - need_lib_prefix=no - need_version=no - hardcode_into_libs=yes - if test "$host_cpu" = ia64; then - # AIX 5 supports IA64 - library_names_spec='${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext}$versuffix $libname${shared_ext}' - shlibpath_var=LD_LIBRARY_PATH - else - # With GCC up to 2.95.x, collect2 would create an import file - # for dependence libraries. The import file would start with - # the line `#! .'. This would cause the generated library to - # depend on `.', always an invalid library. This was fixed in - # development snapshots of GCC prior to 3.0. - case $host_os in - aix4 | aix4.[01] | aix4.[01].*) - if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)' - echo ' yes ' - echo '#endif'; } | ${CC} -E - | grep yes > /dev/null; then - : - else - can_build_shared=no - fi - ;; - esac - # AIX (on Power*) has no versioning support, so currently we can not hardcode correct - # soname into executable. Probably we can add versioning support to - # collect2, so additional links can be useful in future. - if test "$aix_use_runtimelinking" = yes; then - # If using run time linking (on AIX 4.2 or later) use lib.so - # instead of lib.a to let people know that these are not - # typical AIX shared libraries. - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - else - # We preserve .a as extension for shared libraries through AIX4.2 - # and later when we are not doing run time linking. - library_names_spec='${libname}${release}.a $libname.a' - soname_spec='${libname}${release}${shared_ext}$major' - fi - shlibpath_var=LIBPATH - fi - ;; - -amigaos*) - library_names_spec='$libname.ixlibrary $libname.a' - # Create ${libname}_ixlibrary.a entries in /sys/libs. - finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`$echo "X$lib" | $Xsed -e '\''s%^.*/\([^/]*\)\.ixlibrary$%\1%'\''`; test $rm /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done' - ;; - -beos*) - library_names_spec='${libname}${shared_ext}' - dynamic_linker="$host_os ld.so" - shlibpath_var=LIBRARY_PATH - ;; - -bsdi[45]*) - version_type=linux - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir' - shlibpath_var=LD_LIBRARY_PATH - sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib" - sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib" - # the default ld.so.conf also contains /usr/contrib/lib and - # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow - # libtool to hard-code these into programs - ;; - -cygwin* | mingw* | pw32*) - version_type=windows - shrext_cmds=".dll" - need_version=no - need_lib_prefix=no - - case $GCC,$host_os in - yes,cygwin* | yes,mingw* | yes,pw32*) - library_names_spec='$libname.dll.a' - # DLL is installed to $(libdir)/../bin by postinstall_cmds - postinstall_cmds='base_file=`basename \${file}`~ - dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i;echo \$dlname'\''`~ - dldir=$destdir/`dirname \$dlpath`~ - test -d \$dldir || mkdir -p \$dldir~ - $install_prog $dir/$dlname \$dldir/$dlname~ - chmod a+x \$dldir/$dlname' - postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ - dlpath=$dir/\$dldll~ - $rm \$dlpath' - shlibpath_overrides_runpath=yes - - case $host_os in - cygwin*) - # Cygwin DLLs use 'cyg' prefix rather than 'lib' - soname_spec='`echo ${libname} | sed -e 's/^lib/cyg/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' - sys_lib_search_path_spec="/usr/lib /lib/w32api /lib /usr/local/lib" - ;; - mingw*) - # MinGW DLLs use traditional 'lib' prefix - soname_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' - sys_lib_search_path_spec=`$CC -print-search-dirs | grep "^libraries:" | $SED -e "s/^libraries://" -e "s,=/,/,g"` - if echo "$sys_lib_search_path_spec" | grep ';[c-zC-Z]:/' >/dev/null; then - # It is most probably a Windows format PATH printed by - # mingw gcc, but we are running on Cygwin. Gcc prints its search - # path with ; separators, and with drive letters. We can handle the - # drive letters (cygwin fileutils understands them), so leave them, - # especially as we might pass files found there to a mingw objdump, - # which wouldn't understand a cygwinified path. Ahh. - sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'` - else - sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` - fi - ;; - pw32*) - # pw32 DLLs use 'pw' prefix rather than 'lib' - library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' - ;; - esac - ;; - - *) - library_names_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext} $libname.lib' - ;; - esac - dynamic_linker='Win32 ld.exe' - # FIXME: first we should search . and the directory the executable is in - shlibpath_var=PATH - ;; - -darwin* | rhapsody*) - dynamic_linker="$host_os dyld" - version_type=darwin - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${versuffix}$shared_ext ${libname}${release}${major}$shared_ext ${libname}$shared_ext' - soname_spec='${libname}${release}${major}$shared_ext' - shlibpath_overrides_runpath=yes - shlibpath_var=DYLD_LIBRARY_PATH - shrext_cmds='`test .$module = .yes && echo .so || echo .dylib`' - - sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/local/lib" - sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib' - ;; - -dgux*) - version_type=linux - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname$shared_ext' - soname_spec='${libname}${release}${shared_ext}$major' - shlibpath_var=LD_LIBRARY_PATH - ;; - -freebsd1*) - dynamic_linker=no - ;; - -freebsd* | dragonfly*) - # DragonFly does not have aout. When/if they implement a new - # versioning mechanism, adjust this. - if test -x /usr/bin/objformat; then - objformat=`/usr/bin/objformat` - else - case $host_os in - freebsd[123]*) objformat=aout ;; - *) objformat=elf ;; - esac - fi - version_type=freebsd-$objformat - case $version_type in - freebsd-elf*) - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' - need_version=no - need_lib_prefix=no - ;; - freebsd-*) - library_names_spec='${libname}${release}${shared_ext}$versuffix $libname${shared_ext}$versuffix' - need_version=yes - ;; - esac - shlibpath_var=LD_LIBRARY_PATH - case $host_os in - freebsd2*) - shlibpath_overrides_runpath=yes - ;; - freebsd3.[01]* | freebsdelf3.[01]*) - shlibpath_overrides_runpath=yes - hardcode_into_libs=yes - ;; - freebsd3.[2-9]* | freebsdelf3.[2-9]* | \ - freebsd4.[0-5] | freebsdelf4.[0-5] | freebsd4.1.1 | freebsdelf4.1.1) - shlibpath_overrides_runpath=no - hardcode_into_libs=yes - ;; - *) # from 4.6 on, and DragonFly - shlibpath_overrides_runpath=yes - hardcode_into_libs=yes - ;; - esac - ;; - -gnu*) - version_type=linux - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - shlibpath_var=LD_LIBRARY_PATH - hardcode_into_libs=yes - ;; - -hpux9* | hpux10* | hpux11*) - # Give a soname corresponding to the major version so that dld.sl refuses to - # link against other versions. - version_type=sunos - need_lib_prefix=no - need_version=no - case $host_cpu in - ia64*) - shrext_cmds='.so' - hardcode_into_libs=yes - dynamic_linker="$host_os dld.so" - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - if test "X$HPUX_IA64_MODE" = X32; then - sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib" - else - sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64" - fi - sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec - ;; - hppa*64*) - shrext_cmds='.sl' - hardcode_into_libs=yes - dynamic_linker="$host_os dld.sl" - shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH - shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64" - sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec - ;; - *) - shrext_cmds='.sl' - dynamic_linker="$host_os dld.sl" - shlibpath_var=SHLIB_PATH - shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - ;; - esac - # HP-UX runs *really* slowly unless shared libraries are mode 555. - postinstall_cmds='chmod 555 $lib' - ;; - -interix[3-9]*) - version_type=linux - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - dynamic_linker='Interix 3.x ld.so.1 (PE, like ELF)' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=no - hardcode_into_libs=yes - ;; - -irix5* | irix6* | nonstopux*) - case $host_os in - nonstopux*) version_type=nonstopux ;; - *) - if test "$lt_cv_prog_gnu_ld" = yes; then - version_type=linux - else - version_type=irix - fi ;; - esac - need_lib_prefix=no - need_version=no - soname_spec='${libname}${release}${shared_ext}$major' - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext} $libname${shared_ext}' - case $host_os in - irix5* | nonstopux*) - libsuff= shlibsuff= - ;; - *) - case $LD in # libtool.m4 will add one of these switches to LD - *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ") - libsuff= shlibsuff= libmagic=32-bit;; - *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ") - libsuff=32 shlibsuff=N32 libmagic=N32;; - *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ") - libsuff=64 shlibsuff=64 libmagic=64-bit;; - *) libsuff= shlibsuff= libmagic=never-match;; - esac - ;; - esac - shlibpath_var=LD_LIBRARY${shlibsuff}_PATH - shlibpath_overrides_runpath=no - sys_lib_search_path_spec="/usr/lib${libsuff} /lib${libsuff} /usr/local/lib${libsuff}" - sys_lib_dlsearch_path_spec="/usr/lib${libsuff} /lib${libsuff}" - hardcode_into_libs=yes - ;; - -# No shared lib support for Linux oldld, aout, or coff. -linux*oldld* | linux*aout* | linux*coff*) - dynamic_linker=no - ;; - -# This must be Linux ELF. -linux* | k*bsd*-gnu) - version_type=linux - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=no - # This implies no fast_install, which is unacceptable. - # Some rework will be needed to allow for fast_install - # before this can be enabled. - hardcode_into_libs=yes - sys_lib_search_path_spec="/usr/lib${libsuff} /lib${libsuff} /usr/local/lib${libsuff}" - sys_lib_dlsearch_path_spec="/usr/lib${libsuff} /lib${libsuff}" - - # Append ld.so.conf contents to the search path - if test -f /etc/ld.so.conf; then - lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s 2>/dev/null", \$2)); skip = 1; } { if (!skip) print \$0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;/^[ ]*hwcap[ ]/d;s/[:, ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;/^$/d' | tr '\n' ' '` - sys_lib_dlsearch_path_spec="$sys_lib_dlsearch_path_spec $lt_ld_extra" - fi - - # We used to test for /lib/ld.so.1 and disable shared libraries on - # powerpc, because MkLinux only supported shared libraries with the - # GNU dynamic linker. Since this was broken with cross compilers, - # most powerpc-linux boxes support dynamic linking these days and - # people can always --disable-shared, the test was removed, and we - # assume the GNU/Linux dynamic linker is in use. - dynamic_linker='GNU/Linux ld.so' - ;; - -netbsd*) - version_type=sunos - need_lib_prefix=no - need_version=no - if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' - finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' - dynamic_linker='NetBSD (a.out) ld.so' - else - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - dynamic_linker='NetBSD ld.elf_so' - fi - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=yes - hardcode_into_libs=yes - ;; - -newsos6) - version_type=linux - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=yes - ;; - -nto-qnx*) - version_type=linux - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=yes - ;; - -openbsd*) - version_type=sunos - sys_lib_dlsearch_path_spec="/usr/lib" - need_lib_prefix=no - # Some older versions of OpenBSD (3.3 at least) *do* need versioned libs. - case $host_os in - openbsd3.3 | openbsd3.3.*) need_version=yes ;; - *) need_version=no ;; - esac - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' - finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' - shlibpath_var=LD_LIBRARY_PATH - if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then - case $host_os in - openbsd2.[89] | openbsd2.[89].*) - shlibpath_overrides_runpath=no - ;; - *) - shlibpath_overrides_runpath=yes - ;; - esac - else - shlibpath_overrides_runpath=yes - fi - ;; - -os2*) - libname_spec='$name' - shrext_cmds=".dll" - need_lib_prefix=no - library_names_spec='$libname${shared_ext} $libname.a' - dynamic_linker='OS/2 ld.exe' - shlibpath_var=LIBPATH - ;; - -osf3* | osf4* | osf5*) - version_type=osf - need_lib_prefix=no - need_version=no - soname_spec='${libname}${release}${shared_ext}$major' - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - shlibpath_var=LD_LIBRARY_PATH - sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib" - sys_lib_dlsearch_path_spec="$sys_lib_search_path_spec" - ;; - -rdos*) - dynamic_linker=no - ;; - -solaris*) - version_type=linux - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=yes - hardcode_into_libs=yes - # ldd complains unless libraries are executable - postinstall_cmds='chmod +x $lib' - ;; - -sunos4*) - version_type=sunos - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' - finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=yes - if test "$with_gnu_ld" = yes; then - need_lib_prefix=no - fi - need_version=yes - ;; - -sysv4 | sysv4.3*) - version_type=linux - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - shlibpath_var=LD_LIBRARY_PATH - case $host_vendor in - sni) - shlibpath_overrides_runpath=no - need_lib_prefix=no - export_dynamic_flag_spec='${wl}-Blargedynsym' - runpath_var=LD_RUN_PATH - ;; - siemens) - need_lib_prefix=no - ;; - motorola) - need_lib_prefix=no - need_version=no - shlibpath_overrides_runpath=no - sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib' - ;; - esac - ;; - -sysv4*MP*) - if test -d /usr/nec ;then - version_type=linux - library_names_spec='$libname${shared_ext}.$versuffix $libname${shared_ext}.$major $libname${shared_ext}' - soname_spec='$libname${shared_ext}.$major' - shlibpath_var=LD_LIBRARY_PATH - fi - ;; - -sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) - version_type=freebsd-elf - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - shlibpath_var=LD_LIBRARY_PATH - hardcode_into_libs=yes - if test "$with_gnu_ld" = yes; then - sys_lib_search_path_spec='/usr/local/lib /usr/gnu/lib /usr/ccs/lib /usr/lib /lib' - shlibpath_overrides_runpath=no - else - sys_lib_search_path_spec='/usr/ccs/lib /usr/lib' - shlibpath_overrides_runpath=yes - case $host_os in - sco3.2v5*) - sys_lib_search_path_spec="$sys_lib_search_path_spec /lib" - ;; - esac - fi - sys_lib_dlsearch_path_spec='/usr/lib' - ;; - -uts4*) - version_type=linux - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - shlibpath_var=LD_LIBRARY_PATH - ;; - -*) - dynamic_linker=no - ;; -esac -{ echo "$as_me:$LINENO: result: $dynamic_linker" >&5 -echo "${ECHO_T}$dynamic_linker" >&6; } -test "$dynamic_linker" = no && can_build_shared=no - -variables_saved_for_relink="PATH $shlibpath_var $runpath_var" -if test "$GCC" = yes; then - variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH" -fi - -{ echo "$as_me:$LINENO: checking how to hardcode library paths into programs" >&5 -echo $ECHO_N "checking how to hardcode library paths into programs... $ECHO_C" >&6; } -hardcode_action= -if test -n "$hardcode_libdir_flag_spec" || \ - test -n "$runpath_var" || \ - test "X$hardcode_automatic" = "Xyes" ; then - - # We can hardcode non-existent directories. - if test "$hardcode_direct" != no && - # If the only mechanism to avoid hardcoding is shlibpath_var, we - # have to relink, otherwise we might link with an installed library - # when we should be linking with a yet-to-be-installed one - ## test "$_LT_AC_TAGVAR(hardcode_shlibpath_var, )" != no && - test "$hardcode_minus_L" != no; then - # Linking always hardcodes the temporary library directory. - hardcode_action=relink - else - # We can link without hardcoding, and we can hardcode nonexisting dirs. - hardcode_action=immediate - fi -else - # We cannot hardcode anything, or else we can only hardcode existing - # directories. - hardcode_action=unsupported -fi -{ echo "$as_me:$LINENO: result: $hardcode_action" >&5 -echo "${ECHO_T}$hardcode_action" >&6; } - -if test "$hardcode_action" = relink; then - # Fast installation is not supported - enable_fast_install=no -elif test "$shlibpath_overrides_runpath" = yes || - test "$enable_shared" = no; then - # Fast installation is not necessary - enable_fast_install=needless -fi - -striplib= -old_striplib= -{ echo "$as_me:$LINENO: checking whether stripping libraries is possible" >&5 -echo $ECHO_N "checking whether stripping libraries is possible... $ECHO_C" >&6; } -if test -n "$STRIP" && $STRIP -V 2>&1 | grep "GNU strip" >/dev/null; then - test -z "$old_striplib" && old_striplib="$STRIP --strip-debug" - test -z "$striplib" && striplib="$STRIP --strip-unneeded" - { echo "$as_me:$LINENO: result: yes" >&5 -echo "${ECHO_T}yes" >&6; } -else -# FIXME - insert some real tests, host_os isn't really good enough - case $host_os in - darwin*) - if test -n "$STRIP" ; then - striplib="$STRIP -x" - old_striplib="$STRIP -S" - { echo "$as_me:$LINENO: result: yes" >&5 -echo "${ECHO_T}yes" >&6; } - else - { echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6; } -fi - ;; - *) - { echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6; } - ;; - esac -fi - -if test "x$enable_dlopen" != xyes; then - enable_dlopen=unknown - enable_dlopen_self=unknown - enable_dlopen_self_static=unknown -else - lt_cv_dlopen=no - lt_cv_dlopen_libs= - - case $host_os in - beos*) - lt_cv_dlopen="load_add_on" - lt_cv_dlopen_libs= - lt_cv_dlopen_self=yes - ;; - - mingw* | pw32*) - lt_cv_dlopen="LoadLibrary" - lt_cv_dlopen_libs= - ;; - - cygwin*) - lt_cv_dlopen="dlopen" - lt_cv_dlopen_libs= - ;; - - darwin*) - # if libdl is installed we need to link against it - { echo "$as_me:$LINENO: checking for dlopen in -ldl" >&5 -echo $ECHO_N "checking for dlopen in -ldl... $ECHO_C" >&6; } -if test "${ac_cv_lib_dl_dlopen+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - ac_check_lib_save_LIBS=$LIBS -LIBS="-ldl $LIBS" -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ - -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char dlopen (); -int -main () -{ -return dlopen (); - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext conftest$ac_exeext -if { (ac_try="$ac_link" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_link") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest$ac_exeext && - $as_test_x conftest$ac_exeext; then - ac_cv_lib_dl_dlopen=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_cv_lib_dl_dlopen=no -fi - -rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ - conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS -fi -{ echo "$as_me:$LINENO: result: $ac_cv_lib_dl_dlopen" >&5 -echo "${ECHO_T}$ac_cv_lib_dl_dlopen" >&6; } -if test $ac_cv_lib_dl_dlopen = yes; then - lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl" -else - - lt_cv_dlopen="dyld" - lt_cv_dlopen_libs= - lt_cv_dlopen_self=yes - -fi - - ;; - - *) - { echo "$as_me:$LINENO: checking for shl_load" >&5 -echo $ECHO_N "checking for shl_load... $ECHO_C" >&6; } -if test "${ac_cv_func_shl_load+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -/* Define shl_load to an innocuous variant, in case declares shl_load. - For example, HP-UX 11i declares gettimeofday. */ -#define shl_load innocuous_shl_load - -/* System header to define __stub macros and hopefully few prototypes, - which can conflict with char shl_load (); below. - Prefer to if __STDC__ is defined, since - exists even on freestanding compilers. */ - -#ifdef __STDC__ -# include -#else -# include -#endif - -#undef shl_load - -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char shl_load (); -/* The GNU C library defines this for functions which it implements - to always fail with ENOSYS. Some functions are actually named - something starting with __ and the normal name is an alias. */ -#if defined __stub_shl_load || defined __stub___shl_load -choke me -#endif - -int -main () -{ -return shl_load (); - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext conftest$ac_exeext -if { (ac_try="$ac_link" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_link") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest$ac_exeext && - $as_test_x conftest$ac_exeext; then - ac_cv_func_shl_load=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_cv_func_shl_load=no -fi - -rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ - conftest$ac_exeext conftest.$ac_ext -fi -{ echo "$as_me:$LINENO: result: $ac_cv_func_shl_load" >&5 -echo "${ECHO_T}$ac_cv_func_shl_load" >&6; } -if test $ac_cv_func_shl_load = yes; then - lt_cv_dlopen="shl_load" -else - { echo "$as_me:$LINENO: checking for shl_load in -ldld" >&5 -echo $ECHO_N "checking for shl_load in -ldld... $ECHO_C" >&6; } -if test "${ac_cv_lib_dld_shl_load+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - ac_check_lib_save_LIBS=$LIBS -LIBS="-ldld $LIBS" -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ - -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char shl_load (); -int -main () -{ -return shl_load (); - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext conftest$ac_exeext -if { (ac_try="$ac_link" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_link") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest$ac_exeext && - $as_test_x conftest$ac_exeext; then - ac_cv_lib_dld_shl_load=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_cv_lib_dld_shl_load=no -fi - -rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ - conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS -fi -{ echo "$as_me:$LINENO: result: $ac_cv_lib_dld_shl_load" >&5 -echo "${ECHO_T}$ac_cv_lib_dld_shl_load" >&6; } -if test $ac_cv_lib_dld_shl_load = yes; then - lt_cv_dlopen="shl_load" lt_cv_dlopen_libs="-dld" -else - { echo "$as_me:$LINENO: checking for dlopen" >&5 -echo $ECHO_N "checking for dlopen... $ECHO_C" >&6; } -if test "${ac_cv_func_dlopen+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -/* Define dlopen to an innocuous variant, in case declares dlopen. - For example, HP-UX 11i declares gettimeofday. */ -#define dlopen innocuous_dlopen - -/* System header to define __stub macros and hopefully few prototypes, - which can conflict with char dlopen (); below. - Prefer to if __STDC__ is defined, since - exists even on freestanding compilers. */ - -#ifdef __STDC__ -# include -#else -# include -#endif - -#undef dlopen - -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char dlopen (); -/* The GNU C library defines this for functions which it implements - to always fail with ENOSYS. Some functions are actually named - something starting with __ and the normal name is an alias. */ -#if defined __stub_dlopen || defined __stub___dlopen -choke me -#endif - -int -main () -{ -return dlopen (); - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext conftest$ac_exeext -if { (ac_try="$ac_link" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_link") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest$ac_exeext && - $as_test_x conftest$ac_exeext; then - ac_cv_func_dlopen=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_cv_func_dlopen=no -fi - -rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ - conftest$ac_exeext conftest.$ac_ext -fi -{ echo "$as_me:$LINENO: result: $ac_cv_func_dlopen" >&5 -echo "${ECHO_T}$ac_cv_func_dlopen" >&6; } -if test $ac_cv_func_dlopen = yes; then - lt_cv_dlopen="dlopen" -else - { echo "$as_me:$LINENO: checking for dlopen in -ldl" >&5 -echo $ECHO_N "checking for dlopen in -ldl... $ECHO_C" >&6; } -if test "${ac_cv_lib_dl_dlopen+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - ac_check_lib_save_LIBS=$LIBS -LIBS="-ldl $LIBS" -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ - -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char dlopen (); -int -main () -{ -return dlopen (); - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext conftest$ac_exeext -if { (ac_try="$ac_link" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_link") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest$ac_exeext && - $as_test_x conftest$ac_exeext; then - ac_cv_lib_dl_dlopen=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_cv_lib_dl_dlopen=no -fi - -rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ - conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS -fi -{ echo "$as_me:$LINENO: result: $ac_cv_lib_dl_dlopen" >&5 -echo "${ECHO_T}$ac_cv_lib_dl_dlopen" >&6; } -if test $ac_cv_lib_dl_dlopen = yes; then - lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl" -else - { echo "$as_me:$LINENO: checking for dlopen in -lsvld" >&5 -echo $ECHO_N "checking for dlopen in -lsvld... $ECHO_C" >&6; } -if test "${ac_cv_lib_svld_dlopen+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - ac_check_lib_save_LIBS=$LIBS -LIBS="-lsvld $LIBS" -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ - -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char dlopen (); -int -main () -{ -return dlopen (); - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext conftest$ac_exeext -if { (ac_try="$ac_link" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_link") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest$ac_exeext && - $as_test_x conftest$ac_exeext; then - ac_cv_lib_svld_dlopen=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_cv_lib_svld_dlopen=no -fi - -rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ - conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS -fi -{ echo "$as_me:$LINENO: result: $ac_cv_lib_svld_dlopen" >&5 -echo "${ECHO_T}$ac_cv_lib_svld_dlopen" >&6; } -if test $ac_cv_lib_svld_dlopen = yes; then - lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-lsvld" -else - { echo "$as_me:$LINENO: checking for dld_link in -ldld" >&5 -echo $ECHO_N "checking for dld_link in -ldld... $ECHO_C" >&6; } -if test "${ac_cv_lib_dld_dld_link+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - ac_check_lib_save_LIBS=$LIBS -LIBS="-ldld $LIBS" -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ - -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char dld_link (); -int -main () -{ -return dld_link (); - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext conftest$ac_exeext -if { (ac_try="$ac_link" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_link") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest$ac_exeext && - $as_test_x conftest$ac_exeext; then - ac_cv_lib_dld_dld_link=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_cv_lib_dld_dld_link=no -fi - -rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ - conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS -fi -{ echo "$as_me:$LINENO: result: $ac_cv_lib_dld_dld_link" >&5 -echo "${ECHO_T}$ac_cv_lib_dld_dld_link" >&6; } -if test $ac_cv_lib_dld_dld_link = yes; then - lt_cv_dlopen="dld_link" lt_cv_dlopen_libs="-dld" -fi - - -fi - - -fi - - -fi - - -fi - - -fi - - ;; - esac - - if test "x$lt_cv_dlopen" != xno; then - enable_dlopen=yes - else - enable_dlopen=no - fi - - case $lt_cv_dlopen in - dlopen) - save_CPPFLAGS="$CPPFLAGS" - test "x$ac_cv_header_dlfcn_h" = xyes && CPPFLAGS="$CPPFLAGS -DHAVE_DLFCN_H" - - save_LDFLAGS="$LDFLAGS" - wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $export_dynamic_flag_spec\" - - save_LIBS="$LIBS" - LIBS="$lt_cv_dlopen_libs $LIBS" - - { echo "$as_me:$LINENO: checking whether a program can dlopen itself" >&5 -echo $ECHO_N "checking whether a program can dlopen itself... $ECHO_C" >&6; } -if test "${lt_cv_dlopen_self+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - if test "$cross_compiling" = yes; then : - lt_cv_dlopen_self=cross -else - lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 - lt_status=$lt_dlunknown - cat > conftest.$ac_ext < -#endif - -#include - -#ifdef RTLD_GLOBAL -# define LT_DLGLOBAL RTLD_GLOBAL -#else -# ifdef DL_GLOBAL -# define LT_DLGLOBAL DL_GLOBAL -# else -# define LT_DLGLOBAL 0 -# endif -#endif - -/* We may have to define LT_DLLAZY_OR_NOW in the command line if we - find out it does not work in some platform. */ -#ifndef LT_DLLAZY_OR_NOW -# ifdef RTLD_LAZY -# define LT_DLLAZY_OR_NOW RTLD_LAZY -# else -# ifdef DL_LAZY -# define LT_DLLAZY_OR_NOW DL_LAZY -# else -# ifdef RTLD_NOW -# define LT_DLLAZY_OR_NOW RTLD_NOW -# else -# ifdef DL_NOW -# define LT_DLLAZY_OR_NOW DL_NOW -# else -# define LT_DLLAZY_OR_NOW 0 -# endif -# endif -# endif -# endif -#endif - -#ifdef __cplusplus -extern "C" void exit (int); -#endif - -void fnord() { int i=42;} -int main () -{ - void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW); - int status = $lt_dlunknown; - - if (self) - { - if (dlsym (self,"fnord")) status = $lt_dlno_uscore; - else if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore; - /* dlclose (self); */ - } - else - puts (dlerror ()); - - exit (status); -} -EOF - if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 - (eval $ac_link) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && test -s conftest${ac_exeext} 2>/dev/null; then - (./conftest; exit; ) >&5 2>/dev/null - lt_status=$? - case x$lt_status in - x$lt_dlno_uscore) lt_cv_dlopen_self=yes ;; - x$lt_dlneed_uscore) lt_cv_dlopen_self=yes ;; - x$lt_dlunknown|x*) lt_cv_dlopen_self=no ;; - esac - else : - # compilation failed - lt_cv_dlopen_self=no - fi -fi -rm -fr conftest* - - -fi -{ echo "$as_me:$LINENO: result: $lt_cv_dlopen_self" >&5 -echo "${ECHO_T}$lt_cv_dlopen_self" >&6; } - - if test "x$lt_cv_dlopen_self" = xyes; then - wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $lt_prog_compiler_static\" - { echo "$as_me:$LINENO: checking whether a statically linked program can dlopen itself" >&5 -echo $ECHO_N "checking whether a statically linked program can dlopen itself... $ECHO_C" >&6; } -if test "${lt_cv_dlopen_self_static+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - if test "$cross_compiling" = yes; then : - lt_cv_dlopen_self_static=cross -else - lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 - lt_status=$lt_dlunknown - cat > conftest.$ac_ext < -#endif - -#include - -#ifdef RTLD_GLOBAL -# define LT_DLGLOBAL RTLD_GLOBAL -#else -# ifdef DL_GLOBAL -# define LT_DLGLOBAL DL_GLOBAL -# else -# define LT_DLGLOBAL 0 -# endif -#endif - -/* We may have to define LT_DLLAZY_OR_NOW in the command line if we - find out it does not work in some platform. */ -#ifndef LT_DLLAZY_OR_NOW -# ifdef RTLD_LAZY -# define LT_DLLAZY_OR_NOW RTLD_LAZY -# else -# ifdef DL_LAZY -# define LT_DLLAZY_OR_NOW DL_LAZY -# else -# ifdef RTLD_NOW -# define LT_DLLAZY_OR_NOW RTLD_NOW -# else -# ifdef DL_NOW -# define LT_DLLAZY_OR_NOW DL_NOW -# else -# define LT_DLLAZY_OR_NOW 0 -# endif -# endif -# endif -# endif -#endif - -#ifdef __cplusplus -extern "C" void exit (int); -#endif - -void fnord() { int i=42;} -int main () -{ - void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW); - int status = $lt_dlunknown; - - if (self) - { - if (dlsym (self,"fnord")) status = $lt_dlno_uscore; - else if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore; - /* dlclose (self); */ - } - else - puts (dlerror ()); - - exit (status); -} -EOF - if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 - (eval $ac_link) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && test -s conftest${ac_exeext} 2>/dev/null; then - (./conftest; exit; ) >&5 2>/dev/null - lt_status=$? - case x$lt_status in - x$lt_dlno_uscore) lt_cv_dlopen_self_static=yes ;; - x$lt_dlneed_uscore) lt_cv_dlopen_self_static=yes ;; - x$lt_dlunknown|x*) lt_cv_dlopen_self_static=no ;; - esac - else : - # compilation failed - lt_cv_dlopen_self_static=no - fi -fi -rm -fr conftest* - - -fi -{ echo "$as_me:$LINENO: result: $lt_cv_dlopen_self_static" >&5 -echo "${ECHO_T}$lt_cv_dlopen_self_static" >&6; } - fi - - CPPFLAGS="$save_CPPFLAGS" - LDFLAGS="$save_LDFLAGS" - LIBS="$save_LIBS" - ;; - esac - - case $lt_cv_dlopen_self in - yes|no) enable_dlopen_self=$lt_cv_dlopen_self ;; - *) enable_dlopen_self=unknown ;; - esac - - case $lt_cv_dlopen_self_static in - yes|no) enable_dlopen_self_static=$lt_cv_dlopen_self_static ;; - *) enable_dlopen_self_static=unknown ;; - esac -fi - - -# Report which library types will actually be built -{ echo "$as_me:$LINENO: checking if libtool supports shared libraries" >&5 -echo $ECHO_N "checking if libtool supports shared libraries... $ECHO_C" >&6; } -{ echo "$as_me:$LINENO: result: $can_build_shared" >&5 -echo "${ECHO_T}$can_build_shared" >&6; } - -{ echo "$as_me:$LINENO: checking whether to build shared libraries" >&5 -echo $ECHO_N "checking whether to build shared libraries... $ECHO_C" >&6; } -test "$can_build_shared" = "no" && enable_shared=no - -# On AIX, shared libraries and static libraries use the same namespace, and -# are all built from PIC. -case $host_os in -aix3*) - test "$enable_shared" = yes && enable_static=no - if test -n "$RANLIB"; then - archive_cmds="$archive_cmds~\$RANLIB \$lib" - postinstall_cmds='$RANLIB $lib' - fi - ;; - -aix4* | aix5*) - if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then - test "$enable_shared" = yes && enable_static=no - fi - ;; -esac -{ echo "$as_me:$LINENO: result: $enable_shared" >&5 -echo "${ECHO_T}$enable_shared" >&6; } - -{ echo "$as_me:$LINENO: checking whether to build static libraries" >&5 -echo $ECHO_N "checking whether to build static libraries... $ECHO_C" >&6; } -# Make sure either enable_shared or enable_static is yes. -test "$enable_shared" = yes || enable_static=yes -{ echo "$as_me:$LINENO: result: $enable_static" >&5 -echo "${ECHO_T}$enable_static" >&6; } - -# The else clause should only fire when bootstrapping the -# libtool distribution, otherwise you forgot to ship ltmain.sh -# with your package, and you will get complaints that there are -# no rules to generate ltmain.sh. -if test -f "$ltmain"; then - # See if we are running on zsh, and set the options which allow our commands through - # without removal of \ escapes. - if test -n "${ZSH_VERSION+set}" ; then - setopt NO_GLOB_SUBST - fi - # Now quote all the things that may contain metacharacters while being - # careful not to overquote the AC_SUBSTed values. We take copies of the - # variables and quote the copies for generation of the libtool script. - for var in echo old_CC old_CFLAGS AR AR_FLAGS EGREP RANLIB LN_S LTCC LTCFLAGS NM \ - SED SHELL STRIP \ - libname_spec library_names_spec soname_spec extract_expsyms_cmds \ - old_striplib striplib file_magic_cmd finish_cmds finish_eval \ - deplibs_check_method reload_flag reload_cmds need_locks \ - lt_cv_sys_global_symbol_pipe lt_cv_sys_global_symbol_to_cdecl \ - lt_cv_sys_global_symbol_to_c_name_address \ - sys_lib_search_path_spec sys_lib_dlsearch_path_spec \ - old_postinstall_cmds old_postuninstall_cmds \ - compiler \ - CC \ - LD \ - lt_prog_compiler_wl \ - lt_prog_compiler_pic \ - lt_prog_compiler_static \ - lt_prog_compiler_no_builtin_flag \ - export_dynamic_flag_spec \ - thread_safe_flag_spec \ - whole_archive_flag_spec \ - enable_shared_with_static_runtimes \ - old_archive_cmds \ - old_archive_from_new_cmds \ - predep_objects \ - postdep_objects \ - predeps \ - postdeps \ - compiler_lib_search_path \ - archive_cmds \ - archive_expsym_cmds \ - postinstall_cmds \ - postuninstall_cmds \ - old_archive_from_expsyms_cmds \ - allow_undefined_flag \ - no_undefined_flag \ - export_symbols_cmds \ - hardcode_libdir_flag_spec \ - hardcode_libdir_flag_spec_ld \ - hardcode_libdir_separator \ - hardcode_automatic \ - module_cmds \ - module_expsym_cmds \ - lt_cv_prog_compiler_c_o \ - fix_srcfile_path \ - exclude_expsyms \ - include_expsyms; do - - case $var in - old_archive_cmds | \ - old_archive_from_new_cmds | \ - archive_cmds | \ - archive_expsym_cmds | \ - module_cmds | \ - module_expsym_cmds | \ - old_archive_from_expsyms_cmds | \ - export_symbols_cmds | \ - extract_expsyms_cmds | reload_cmds | finish_cmds | \ - postinstall_cmds | postuninstall_cmds | \ - old_postinstall_cmds | old_postuninstall_cmds | \ - sys_lib_search_path_spec | sys_lib_dlsearch_path_spec) - # Double-quote double-evaled strings. - eval "lt_$var=\\\"\`\$echo \"X\$$var\" | \$Xsed -e \"\$double_quote_subst\" -e \"\$sed_quote_subst\" -e \"\$delay_variable_subst\"\`\\\"" - ;; - *) - eval "lt_$var=\\\"\`\$echo \"X\$$var\" | \$Xsed -e \"\$sed_quote_subst\"\`\\\"" - ;; - esac - done - - case $lt_echo in - *'\$0 --fallback-echo"') - lt_echo=`$echo "X$lt_echo" | $Xsed -e 's/\\\\\\\$0 --fallback-echo"$/$0 --fallback-echo"/'` - ;; - esac - -cfgfile="${ofile}T" - trap "$rm \"$cfgfile\"; exit 1" 1 2 15 - $rm -f "$cfgfile" - { echo "$as_me:$LINENO: creating $ofile" >&5 -echo "$as_me: creating $ofile" >&6;} - - cat <<__EOF__ >> "$cfgfile" -#! $SHELL - -# `$echo "$cfgfile" | sed 's%^.*/%%'` - Provide generalized library-building support services. -# Generated automatically by $PROGRAM (GNU $PACKAGE $VERSION$TIMESTAMP) -# NOTE: Changes made to this file will be lost: look at ltmain.sh. -# -# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007 -# Free Software Foundation, Inc. -# -# This file is part of GNU Libtool: -# Originally by Gordon Matzigkeit , 1996 -# -# This program is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 2 of the License, or -# (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, but -# WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. -# -# As a special exception to the GNU General Public License, if you -# distribute this file as part of a program that contains a -# configuration script generated by Autoconf, you may include it under -# the same distribution terms that you use for the rest of that program. - -# A sed program that does not truncate output. -SED=$lt_SED - -# Sed that helps us avoid accidentally triggering echo(1) options like -n. -Xsed="$SED -e 1s/^X//" - -# The HP-UX ksh and POSIX shell print the target directory to stdout -# if CDPATH is set. -(unset CDPATH) >/dev/null 2>&1 && unset CDPATH - -# The names of the tagged configurations supported by this script. -available_tags= - -# ### BEGIN LIBTOOL CONFIG - -# Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`: - -# Shell to use when invoking shell scripts. -SHELL=$lt_SHELL - -# Whether or not to build shared libraries. -build_libtool_libs=$enable_shared - -# Whether or not to build static libraries. -build_old_libs=$enable_static - -# Whether or not to add -lc for building shared libraries. -build_libtool_need_lc=$archive_cmds_need_lc - -# Whether or not to disallow shared libs when runtime libs are static -allow_libtool_libs_with_static_runtimes=$enable_shared_with_static_runtimes - -# Whether or not to optimize for fast installation. -fast_install=$enable_fast_install - -# The host system. -host_alias=$host_alias -host=$host -host_os=$host_os - -# The build system. -build_alias=$build_alias -build=$build -build_os=$build_os - -# An echo program that does not interpret backslashes. -echo=$lt_echo - -# The archiver. -AR=$lt_AR -AR_FLAGS=$lt_AR_FLAGS - -# A C compiler. -LTCC=$lt_LTCC - -# LTCC compiler flags. -LTCFLAGS=$lt_LTCFLAGS - -# A language-specific compiler. -CC=$lt_compiler - -# Is the compiler the GNU C compiler? -with_gcc=$GCC - -# An ERE matcher. -EGREP=$lt_EGREP - -# The linker used to build libraries. -LD=$lt_LD - -# Whether we need hard or soft links. -LN_S=$lt_LN_S - -# A BSD-compatible nm program. -NM=$lt_NM - -# A symbol stripping program -STRIP=$lt_STRIP - -# Used to examine libraries when file_magic_cmd begins "file" -MAGIC_CMD=$MAGIC_CMD - -# Used on cygwin: DLL creation program. -DLLTOOL="$DLLTOOL" - -# Used on cygwin: object dumper. -OBJDUMP="$OBJDUMP" - -# Used on cygwin: assembler. -AS="$AS" - -# The name of the directory that contains temporary libtool files. -objdir=$objdir - -# How to create reloadable object files. -reload_flag=$lt_reload_flag -reload_cmds=$lt_reload_cmds - -# How to pass a linker flag through the compiler. -wl=$lt_lt_prog_compiler_wl - -# Object file suffix (normally "o"). -objext="$ac_objext" - -# Old archive suffix (normally "a"). -libext="$libext" - -# Shared library suffix (normally ".so"). -shrext_cmds='$shrext_cmds' - -# Executable file suffix (normally ""). -exeext="$exeext" - -# Additional compiler flags for building library objects. -pic_flag=$lt_lt_prog_compiler_pic -pic_mode=$pic_mode - -# What is the maximum length of a command? -max_cmd_len=$lt_cv_sys_max_cmd_len - -# Does compiler simultaneously support -c and -o options? -compiler_c_o=$lt_lt_cv_prog_compiler_c_o - -# Must we lock files when doing compilation? -need_locks=$lt_need_locks - -# Do we need the lib prefix for modules? -need_lib_prefix=$need_lib_prefix - -# Do we need a version for libraries? -need_version=$need_version - -# Whether dlopen is supported. -dlopen_support=$enable_dlopen - -# Whether dlopen of programs is supported. -dlopen_self=$enable_dlopen_self - -# Whether dlopen of statically linked programs is supported. -dlopen_self_static=$enable_dlopen_self_static - -# Compiler flag to prevent dynamic linking. -link_static_flag=$lt_lt_prog_compiler_static - -# Compiler flag to turn off builtin functions. -no_builtin_flag=$lt_lt_prog_compiler_no_builtin_flag - -# Compiler flag to allow reflexive dlopens. -export_dynamic_flag_spec=$lt_export_dynamic_flag_spec - -# Compiler flag to generate shared objects directly from archives. -whole_archive_flag_spec=$lt_whole_archive_flag_spec - -# Compiler flag to generate thread-safe objects. -thread_safe_flag_spec=$lt_thread_safe_flag_spec - -# Library versioning type. -version_type=$version_type - -# Format of library name prefix. -libname_spec=$lt_libname_spec - -# List of archive names. First name is the real one, the rest are links. -# The last name is the one that the linker finds with -lNAME. -library_names_spec=$lt_library_names_spec - -# The coded name of the library, if different from the real name. -soname_spec=$lt_soname_spec - -# Commands used to build and install an old-style archive. -RANLIB=$lt_RANLIB -old_archive_cmds=$lt_old_archive_cmds -old_postinstall_cmds=$lt_old_postinstall_cmds -old_postuninstall_cmds=$lt_old_postuninstall_cmds - -# Create an old-style archive from a shared archive. -old_archive_from_new_cmds=$lt_old_archive_from_new_cmds - -# Create a temporary old-style archive to link instead of a shared archive. -old_archive_from_expsyms_cmds=$lt_old_archive_from_expsyms_cmds - -# Commands used to build and install a shared archive. -archive_cmds=$lt_archive_cmds -archive_expsym_cmds=$lt_archive_expsym_cmds -postinstall_cmds=$lt_postinstall_cmds -postuninstall_cmds=$lt_postuninstall_cmds - -# Commands used to build a loadable module (assumed same as above if empty) -module_cmds=$lt_module_cmds -module_expsym_cmds=$lt_module_expsym_cmds - -# Commands to strip libraries. -old_striplib=$lt_old_striplib -striplib=$lt_striplib - -# Dependencies to place before the objects being linked to create a -# shared library. -predep_objects=$lt_predep_objects - -# Dependencies to place after the objects being linked to create a -# shared library. -postdep_objects=$lt_postdep_objects - -# Dependencies to place before the objects being linked to create a -# shared library. -predeps=$lt_predeps - -# Dependencies to place after the objects being linked to create a -# shared library. -postdeps=$lt_postdeps - -# The library search path used internally by the compiler when linking -# a shared library. -compiler_lib_search_path=$lt_compiler_lib_search_path - -# Method to check whether dependent libraries are shared objects. -deplibs_check_method=$lt_deplibs_check_method - -# Command to use when deplibs_check_method == file_magic. -file_magic_cmd=$lt_file_magic_cmd - -# Flag that allows shared libraries with undefined symbols to be built. -allow_undefined_flag=$lt_allow_undefined_flag - -# Flag that forces no undefined symbols. -no_undefined_flag=$lt_no_undefined_flag - -# Commands used to finish a libtool library installation in a directory. -finish_cmds=$lt_finish_cmds - -# Same as above, but a single script fragment to be evaled but not shown. -finish_eval=$lt_finish_eval - -# Take the output of nm and produce a listing of raw symbols and C names. -global_symbol_pipe=$lt_lt_cv_sys_global_symbol_pipe - -# Transform the output of nm in a proper C declaration -global_symbol_to_cdecl=$lt_lt_cv_sys_global_symbol_to_cdecl - -# Transform the output of nm in a C name address pair -global_symbol_to_c_name_address=$lt_lt_cv_sys_global_symbol_to_c_name_address - -# This is the shared library runtime path variable. -runpath_var=$runpath_var - -# This is the shared library path variable. -shlibpath_var=$shlibpath_var - -# Is shlibpath searched before the hard-coded library search path? -shlibpath_overrides_runpath=$shlibpath_overrides_runpath - -# How to hardcode a shared library path into an executable. -hardcode_action=$hardcode_action - -# Whether we should hardcode library paths into libraries. -hardcode_into_libs=$hardcode_into_libs - -# Flag to hardcode \$libdir into a binary during linking. -# This must work even if \$libdir does not exist. -hardcode_libdir_flag_spec=$lt_hardcode_libdir_flag_spec - -# If ld is used when linking, flag to hardcode \$libdir into -# a binary during linking. This must work even if \$libdir does -# not exist. -hardcode_libdir_flag_spec_ld=$lt_hardcode_libdir_flag_spec_ld - -# Whether we need a single -rpath flag with a separated argument. -hardcode_libdir_separator=$lt_hardcode_libdir_separator - -# Set to yes if using DIR/libNAME${shared_ext} during linking hardcodes DIR into the -# resulting binary. -hardcode_direct=$hardcode_direct - -# Set to yes if using the -LDIR flag during linking hardcodes DIR into the -# resulting binary. -hardcode_minus_L=$hardcode_minus_L - -# Set to yes if using SHLIBPATH_VAR=DIR during linking hardcodes DIR into -# the resulting binary. -hardcode_shlibpath_var=$hardcode_shlibpath_var - -# Set to yes if building a shared library automatically hardcodes DIR into the library -# and all subsequent libraries and executables linked against it. -hardcode_automatic=$hardcode_automatic - -# Variables whose values should be saved in libtool wrapper scripts and -# restored at relink time. -variables_saved_for_relink="$variables_saved_for_relink" - -# Whether libtool must link a program against all its dependency libraries. -link_all_deplibs=$link_all_deplibs - -# Compile-time system search path for libraries -sys_lib_search_path_spec=$lt_sys_lib_search_path_spec - -# Run-time system search path for libraries -sys_lib_dlsearch_path_spec=$lt_sys_lib_dlsearch_path_spec - -# Fix the shell variable \$srcfile for the compiler. -fix_srcfile_path=$lt_fix_srcfile_path - -# Set to yes if exported symbols are required. -always_export_symbols=$always_export_symbols - -# The commands to list exported symbols. -export_symbols_cmds=$lt_export_symbols_cmds - -# The commands to extract the exported symbol list from a shared archive. -extract_expsyms_cmds=$lt_extract_expsyms_cmds - -# Symbols that should not be listed in the preloaded symbols. -exclude_expsyms=$lt_exclude_expsyms - -# Symbols that must always be exported. -include_expsyms=$lt_include_expsyms - -# ### END LIBTOOL CONFIG - -__EOF__ - - - case $host_os in - aix3*) - cat <<\EOF >> "$cfgfile" - -# AIX sometimes has problems with the GCC collect2 program. For some -# reason, if we set the COLLECT_NAMES environment variable, the problems -# vanish in a puff of smoke. -if test "X${COLLECT_NAMES+set}" != Xset; then - COLLECT_NAMES= - export COLLECT_NAMES -fi -EOF - ;; - esac - - # We use sed instead of cat because bash on DJGPP gets confused if - # if finds mixed CR/LF and LF-only lines. Since sed operates in - # text mode, it properly converts lines to CR/LF. This bash problem - # is reportedly fixed, but why not run on old versions too? - sed '$q' "$ltmain" >> "$cfgfile" || (rm -f "$cfgfile"; exit 1) - - mv -f "$cfgfile" "$ofile" || \ - (rm -f "$ofile" && cp "$cfgfile" "$ofile" && rm -f "$cfgfile") - chmod +x "$ofile" - -else - # If there is no Makefile yet, we rely on a make rule to execute - # `config.status --recheck' to rerun these tests and create the - # libtool script then. - ltmain_in=`echo $ltmain | sed -e 's/\.sh$/.in/'` - if test -f "$ltmain_in"; then - test -f Makefile && make "$ltmain" - fi -fi - - -ac_ext=c -ac_cpp='$CPP $CPPFLAGS' -ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_c_compiler_gnu - -CC="$lt_save_CC" - - -# Check whether --with-tags was given. -if test "${with_tags+set}" = set; then - withval=$with_tags; tagnames="$withval" -fi - - -if test -f "$ltmain" && test -n "$tagnames"; then - if test ! -f "${ofile}"; then - { echo "$as_me:$LINENO: WARNING: output file \`$ofile' does not exist" >&5 -echo "$as_me: WARNING: output file \`$ofile' does not exist" >&2;} - fi - - if test -z "$LTCC"; then - eval "`$SHELL ${ofile} --config | grep '^LTCC='`" - if test -z "$LTCC"; then - { echo "$as_me:$LINENO: WARNING: output file \`$ofile' does not look like a libtool script" >&5 -echo "$as_me: WARNING: output file \`$ofile' does not look like a libtool script" >&2;} - else - { echo "$as_me:$LINENO: WARNING: using \`LTCC=$LTCC', extracted from \`$ofile'" >&5 -echo "$as_me: WARNING: using \`LTCC=$LTCC', extracted from \`$ofile'" >&2;} - fi - fi - if test -z "$LTCFLAGS"; then - eval "`$SHELL ${ofile} --config | grep '^LTCFLAGS='`" - fi - - # Extract list of available tagged configurations in $ofile. - # Note that this assumes the entire list is on one line. - available_tags=`grep "^available_tags=" "${ofile}" | $SED -e 's/available_tags=\(.*$\)/\1/' -e 's/\"//g'` - - lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," - for tagname in $tagnames; do - IFS="$lt_save_ifs" - # Check whether tagname contains only valid characters - case `$echo "X$tagname" | $Xsed -e 's:[-_ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz1234567890,/]::g'` in - "") ;; - *) { { echo "$as_me:$LINENO: error: invalid tag name: $tagname" >&5 -echo "$as_me: error: invalid tag name: $tagname" >&2;} - { (exit 1); exit 1; }; } - ;; - esac - - if grep "^# ### BEGIN LIBTOOL TAG CONFIG: $tagname$" < "${ofile}" > /dev/null - then - { { echo "$as_me:$LINENO: error: tag name \"$tagname\" already exists" >&5 -echo "$as_me: error: tag name \"$tagname\" already exists" >&2;} - { (exit 1); exit 1; }; } - fi - - # Update the list of available tags. - if test -n "$tagname"; then - echo appending configuration tag \"$tagname\" to $ofile - - case $tagname in - CXX) - if test -n "$CXX" && ( test "X$CXX" != "Xno" && - ( (test "X$CXX" = "Xg++" && `g++ -v >/dev/null 2>&1` ) || - (test "X$CXX" != "Xg++"))) ; then - ac_ext=cpp -ac_cpp='$CXXCPP $CPPFLAGS' -ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_cxx_compiler_gnu - - - - -archive_cmds_need_lc_CXX=no -allow_undefined_flag_CXX= -always_export_symbols_CXX=no -archive_expsym_cmds_CXX= -export_dynamic_flag_spec_CXX= -hardcode_direct_CXX=no -hardcode_libdir_flag_spec_CXX= -hardcode_libdir_flag_spec_ld_CXX= -hardcode_libdir_separator_CXX= -hardcode_minus_L_CXX=no -hardcode_shlibpath_var_CXX=unsupported -hardcode_automatic_CXX=no -module_cmds_CXX= -module_expsym_cmds_CXX= -link_all_deplibs_CXX=unknown -old_archive_cmds_CXX=$old_archive_cmds -no_undefined_flag_CXX= -whole_archive_flag_spec_CXX= -enable_shared_with_static_runtimes_CXX=no - -# Dependencies to place before and after the object being linked: -predep_objects_CXX= -postdep_objects_CXX= -predeps_CXX= -postdeps_CXX= -compiler_lib_search_path_CXX= - -# Source file extension for C++ test sources. -ac_ext=cpp - -# Object file extension for compiled C++ test sources. -objext=o -objext_CXX=$objext - -# Code to be used in simple compile tests -lt_simple_compile_test_code="int some_variable = 0;" - -# Code to be used in simple link tests -lt_simple_link_test_code='int main(int, char *[]) { return(0); }' - -# ltmain only uses $CC for tagged configurations so make sure $CC is set. - -# If no C compiler was specified, use CC. -LTCC=${LTCC-"$CC"} - -# If no C compiler flags were specified, use CFLAGS. -LTCFLAGS=${LTCFLAGS-"$CFLAGS"} - -# Allow CC to be a program name with arguments. -compiler=$CC - - -# save warnings/boilerplate of simple test code -ac_outfile=conftest.$ac_objext -echo "$lt_simple_compile_test_code" >conftest.$ac_ext -eval "$ac_compile" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err -_lt_compiler_boilerplate=`cat conftest.err` -$rm conftest* - -ac_outfile=conftest.$ac_objext -echo "$lt_simple_link_test_code" >conftest.$ac_ext -eval "$ac_link" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err -_lt_linker_boilerplate=`cat conftest.err` -$rm conftest* - - -# Allow CC to be a program name with arguments. -lt_save_CC=$CC -lt_save_LD=$LD -lt_save_GCC=$GCC -GCC=$GXX -lt_save_with_gnu_ld=$with_gnu_ld -lt_save_path_LD=$lt_cv_path_LD -if test -n "${lt_cv_prog_gnu_ldcxx+set}"; then - lt_cv_prog_gnu_ld=$lt_cv_prog_gnu_ldcxx -else - $as_unset lt_cv_prog_gnu_ld -fi -if test -n "${lt_cv_path_LDCXX+set}"; then - lt_cv_path_LD=$lt_cv_path_LDCXX -else - $as_unset lt_cv_path_LD -fi -test -z "${LDCXX+set}" || LD=$LDCXX -CC=${CXX-"c++"} -compiler=$CC -compiler_CXX=$CC -for cc_temp in $compiler""; do - case $cc_temp in - compile | *[\\/]compile | ccache | *[\\/]ccache ) ;; - distcc | *[\\/]distcc | purify | *[\\/]purify ) ;; - \-*) ;; - *) break;; - esac -done -cc_basename=`$echo "X$cc_temp" | $Xsed -e 's%.*/%%' -e "s%^$host_alias-%%"` - - -# We don't want -fno-exception wen compiling C++ code, so set the -# no_builtin_flag separately -if test "$GXX" = yes; then - lt_prog_compiler_no_builtin_flag_CXX=' -fno-builtin' -else - lt_prog_compiler_no_builtin_flag_CXX= -fi - -if test "$GXX" = yes; then - # Set up default GNU C++ configuration - - -# Check whether --with-gnu-ld was given. -if test "${with_gnu_ld+set}" = set; then - withval=$with_gnu_ld; test "$withval" = no || with_gnu_ld=yes -else - with_gnu_ld=no -fi - -ac_prog=ld -if test "$GCC" = yes; then - # Check if gcc -print-prog-name=ld gives a path. - { echo "$as_me:$LINENO: checking for ld used by $CC" >&5 -echo $ECHO_N "checking for ld used by $CC... $ECHO_C" >&6; } - case $host in - *-*-mingw*) - # gcc leaves a trailing carriage return which upsets mingw - ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;; - *) - ac_prog=`($CC -print-prog-name=ld) 2>&5` ;; - esac - case $ac_prog in - # Accept absolute paths. - [\\/]* | ?:[\\/]*) - re_direlt='/[^/][^/]*/\.\./' - # Canonicalize the pathname of ld - ac_prog=`echo $ac_prog| $SED 's%\\\\%/%g'` - while echo $ac_prog | grep "$re_direlt" > /dev/null 2>&1; do - ac_prog=`echo $ac_prog| $SED "s%$re_direlt%/%"` - done - test -z "$LD" && LD="$ac_prog" - ;; - "") - # If it fails, then pretend we aren't using GCC. - ac_prog=ld - ;; - *) - # If it is relative, then search for the first ld in PATH. - with_gnu_ld=unknown - ;; - esac -elif test "$with_gnu_ld" = yes; then - { echo "$as_me:$LINENO: checking for GNU ld" >&5 -echo $ECHO_N "checking for GNU ld... $ECHO_C" >&6; } -else - { echo "$as_me:$LINENO: checking for non-GNU ld" >&5 -echo $ECHO_N "checking for non-GNU ld... $ECHO_C" >&6; } -fi -if test "${lt_cv_path_LD+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - if test -z "$LD"; then - lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR - for ac_dir in $PATH; do - IFS="$lt_save_ifs" - test -z "$ac_dir" && ac_dir=. - if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then - lt_cv_path_LD="$ac_dir/$ac_prog" - # Check to see if the program is GNU ld. I'd rather use --version, - # but apparently some variants of GNU ld only accept -v. - # Break only if it was the GNU/non-GNU ld that we prefer. - case `"$lt_cv_path_LD" -v 2>&1 &5 -echo "${ECHO_T}$LD" >&6; } -else - { echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6; } -fi -test -z "$LD" && { { echo "$as_me:$LINENO: error: no acceptable ld found in \$PATH" >&5 -echo "$as_me: error: no acceptable ld found in \$PATH" >&2;} - { (exit 1); exit 1; }; } -{ echo "$as_me:$LINENO: checking if the linker ($LD) is GNU ld" >&5 -echo $ECHO_N "checking if the linker ($LD) is GNU ld... $ECHO_C" >&6; } -if test "${lt_cv_prog_gnu_ld+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - # I'd rather use --version here, but apparently some GNU lds only accept -v. -case `$LD -v 2>&1 &5 -echo "${ECHO_T}$lt_cv_prog_gnu_ld" >&6; } -with_gnu_ld=$lt_cv_prog_gnu_ld - - - - # Check if GNU C++ uses GNU ld as the underlying linker, since the - # archiving commands below assume that GNU ld is being used. - if test "$with_gnu_ld" = yes; then - archive_cmds_CXX='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib' - archive_expsym_cmds_CXX='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' - - hardcode_libdir_flag_spec_CXX='${wl}--rpath ${wl}$libdir' - export_dynamic_flag_spec_CXX='${wl}--export-dynamic' - - # If archive_cmds runs LD, not CC, wlarc should be empty - # XXX I think wlarc can be eliminated in ltcf-cxx, but I need to - # investigate it a little bit more. (MM) - wlarc='${wl}' - - # ancient GNU ld didn't support --whole-archive et. al. - if eval "`$CC -print-prog-name=ld` --help 2>&1" | \ - grep 'no-whole-archive' > /dev/null; then - whole_archive_flag_spec_CXX="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' - else - whole_archive_flag_spec_CXX= - fi - else - with_gnu_ld=no - wlarc= - - # A generic and very simple default shared library creation - # command for GNU C++ for the case where it uses the native - # linker, instead of GNU ld. If possible, this setting should - # overridden to take advantage of the native linker features on - # the platform it is being used on. - archive_cmds_CXX='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib' - fi - - # Commands to make compiler produce verbose output that lists - # what "hidden" libraries, object files and flags are used when - # linking a shared library. - output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep "\-L"' - -else - GXX=no - with_gnu_ld=no - wlarc= -fi - -# PORTME: fill in a description of your system's C++ link characteristics -{ echo "$as_me:$LINENO: checking whether the $compiler linker ($LD) supports shared libraries" >&5 -echo $ECHO_N "checking whether the $compiler linker ($LD) supports shared libraries... $ECHO_C" >&6; } -ld_shlibs_CXX=yes -case $host_os in - aix3*) - # FIXME: insert proper C++ library support - ld_shlibs_CXX=no - ;; - aix4* | aix5*) - if test "$host_cpu" = ia64; then - # On IA64, the linker does run time linking by default, so we don't - # have to do anything special. - aix_use_runtimelinking=no - exp_sym_flag='-Bexport' - no_entry_flag="" - else - aix_use_runtimelinking=no - - # Test if we are trying to use run time linking or normal - # AIX style linking. If -brtl is somewhere in LDFLAGS, we - # need to do runtime linking. - case $host_os in aix4.[23]|aix4.[23].*|aix5*) - for ld_flag in $LDFLAGS; do - case $ld_flag in - *-brtl*) - aix_use_runtimelinking=yes - break - ;; - esac - done - ;; - esac - - exp_sym_flag='-bexport' - no_entry_flag='-bnoentry' - fi - - # When large executables or shared objects are built, AIX ld can - # have problems creating the table of contents. If linking a library - # or program results in "error TOC overflow" add -mminimal-toc to - # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not - # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS. - - archive_cmds_CXX='' - hardcode_direct_CXX=yes - hardcode_libdir_separator_CXX=':' - link_all_deplibs_CXX=yes - - if test "$GXX" = yes; then - case $host_os in aix4.[012]|aix4.[012].*) - # We only want to do this on AIX 4.2 and lower, the check - # below for broken collect2 doesn't work under 4.3+ - collect2name=`${CC} -print-prog-name=collect2` - if test -f "$collect2name" && \ - strings "$collect2name" | grep resolve_lib_name >/dev/null - then - # We have reworked collect2 - : - else - # We have old collect2 - hardcode_direct_CXX=unsupported - # It fails to find uninstalled libraries when the uninstalled - # path is not listed in the libpath. Setting hardcode_minus_L - # to unsupported forces relinking - hardcode_minus_L_CXX=yes - hardcode_libdir_flag_spec_CXX='-L$libdir' - hardcode_libdir_separator_CXX= - fi - ;; - esac - shared_flag='-shared' - if test "$aix_use_runtimelinking" = yes; then - shared_flag="$shared_flag "'${wl}-G' - fi - else - # not using gcc - if test "$host_cpu" = ia64; then - # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release - # chokes on -Wl,-G. The following line is correct: - shared_flag='-G' - else - if test "$aix_use_runtimelinking" = yes; then - shared_flag='${wl}-G' - else - shared_flag='${wl}-bM:SRE' - fi - fi - fi - - # It seems that -bexpall does not export symbols beginning with - # underscore (_), so it is better to generate a list of symbols to export. - always_export_symbols_CXX=yes - if test "$aix_use_runtimelinking" = yes; then - # Warning - without using the other runtime loading flags (-brtl), - # -berok will link without error, but may produce a broken library. - allow_undefined_flag_CXX='-berok' - # Determine the default libpath from the value encoded in an empty executable. - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ - -int -main () -{ - - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext conftest$ac_exeext -if { (ac_try="$ac_link" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_link") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_cxx_werror_flag" || - test ! -s conftest.err - } && test -s conftest$ac_exeext && - $as_test_x conftest$ac_exeext; then - -lt_aix_libpath_sed=' - /Import File Strings/,/^$/ { - /^0/ { - s/^0 *\(.*\)$/\1/ - p - } - }' -aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` -# Check for a 64-bit object if we didn't find anything. -if test -z "$aix_libpath"; then - aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` -fi -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - -fi - -rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ - conftest$ac_exeext conftest.$ac_ext -if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi - - hardcode_libdir_flag_spec_CXX='${wl}-blibpath:$libdir:'"$aix_libpath" - - archive_expsym_cmds_CXX="\$CC"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then echo "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag" - else - if test "$host_cpu" = ia64; then - hardcode_libdir_flag_spec_CXX='${wl}-R $libdir:/usr/lib:/lib' - allow_undefined_flag_CXX="-z nodefs" - archive_expsym_cmds_CXX="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$exp_sym_flag:\$export_symbols" - else - # Determine the default libpath from the value encoded in an empty executable. - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ - -int -main () -{ - - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext conftest$ac_exeext -if { (ac_try="$ac_link" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_link") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_cxx_werror_flag" || - test ! -s conftest.err - } && test -s conftest$ac_exeext && - $as_test_x conftest$ac_exeext; then - -lt_aix_libpath_sed=' - /Import File Strings/,/^$/ { - /^0/ { - s/^0 *\(.*\)$/\1/ - p - } - }' -aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` -# Check for a 64-bit object if we didn't find anything. -if test -z "$aix_libpath"; then - aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` -fi -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - -fi - -rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ - conftest$ac_exeext conftest.$ac_ext -if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi - - hardcode_libdir_flag_spec_CXX='${wl}-blibpath:$libdir:'"$aix_libpath" - # Warning - without using the other run time loading flags, - # -berok will link without error, but may produce a broken library. - no_undefined_flag_CXX=' ${wl}-bernotok' - allow_undefined_flag_CXX=' ${wl}-berok' - # Exported symbols can be pulled into shared objects from archives - whole_archive_flag_spec_CXX='$convenience' - archive_cmds_need_lc_CXX=yes - # This is similar to how AIX traditionally builds its shared libraries. - archive_expsym_cmds_CXX="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs ${wl}-bnoentry $compiler_flags ${wl}-bE:$export_symbols${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname' - fi - fi - ;; - - beos*) - if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then - allow_undefined_flag_CXX=unsupported - # Joseph Beckenbach says some releases of gcc - # support --undefined. This deserves some investigation. FIXME - archive_cmds_CXX='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' - else - ld_shlibs_CXX=no - fi - ;; - - chorus*) - case $cc_basename in - *) - # FIXME: insert proper C++ library support - ld_shlibs_CXX=no - ;; - esac - ;; - - cygwin* | mingw* | pw32*) - # _LT_AC_TAGVAR(hardcode_libdir_flag_spec, CXX) is actually meaningless, - # as there is no search path for DLLs. - hardcode_libdir_flag_spec_CXX='-L$libdir' - allow_undefined_flag_CXX=unsupported - always_export_symbols_CXX=no - enable_shared_with_static_runtimes_CXX=yes - - if $LD --help 2>&1 | grep 'auto-import' > /dev/null; then - archive_cmds_CXX='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' - # If the export-symbols file already is a .def file (1st line - # is EXPORTS), use it as is; otherwise, prepend... - archive_expsym_cmds_CXX='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then - cp $export_symbols $output_objdir/$soname.def; - else - echo EXPORTS > $output_objdir/$soname.def; - cat $export_symbols >> $output_objdir/$soname.def; - fi~ - $CC -shared -nostdlib $output_objdir/$soname.def $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' - else - ld_shlibs_CXX=no - fi - ;; - darwin* | rhapsody*) - case $host_os in - rhapsody* | darwin1.[012]) - allow_undefined_flag_CXX='${wl}-undefined ${wl}suppress' - ;; - *) # Darwin 1.3 on - if test -z ${MACOSX_DEPLOYMENT_TARGET} ; then - allow_undefined_flag_CXX='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' - else - case ${MACOSX_DEPLOYMENT_TARGET} in - 10.[012]) - allow_undefined_flag_CXX='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' - ;; - 10.*) - allow_undefined_flag_CXX='${wl}-undefined ${wl}dynamic_lookup' - ;; - esac - fi - ;; - esac - archive_cmds_need_lc_CXX=no - hardcode_direct_CXX=no - hardcode_automatic_CXX=yes - hardcode_shlibpath_var_CXX=unsupported - whole_archive_flag_spec_CXX='' - link_all_deplibs_CXX=yes - - if test "$GXX" = yes ; then - lt_int_apple_cc_single_mod=no - output_verbose_link_cmd='echo' - if $CC -dumpspecs 2>&1 | $EGREP 'single_module' >/dev/null ; then - lt_int_apple_cc_single_mod=yes - fi - if test "X$lt_int_apple_cc_single_mod" = Xyes ; then - archive_cmds_CXX='$CC -dynamiclib -single_module $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags -install_name $rpath/$soname $verstring' - else - archive_cmds_CXX='$CC -r -keep_private_externs -nostdlib -o ${lib}-master.o $libobjs~$CC -dynamiclib $allow_undefined_flag -o $lib ${lib}-master.o $deplibs $compiler_flags -install_name $rpath/$soname $verstring' - fi - module_cmds_CXX='$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags' - # Don't fix this by using the ld -exported_symbols_list flag, it doesn't exist in older darwin lds - if test "X$lt_int_apple_cc_single_mod" = Xyes ; then - archive_expsym_cmds_CXX='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -dynamiclib -single_module $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags -install_name $rpath/$soname $verstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' - else - archive_expsym_cmds_CXX='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -r -keep_private_externs -nostdlib -o ${lib}-master.o $libobjs~$CC -dynamiclib $allow_undefined_flag -o $lib ${lib}-master.o $deplibs $compiler_flags -install_name $rpath/$soname $verstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' - fi - module_expsym_cmds_CXX='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' - else - case $cc_basename in - xlc*) - output_verbose_link_cmd='echo' - archive_cmds_CXX='$CC -qmkshrobj ${wl}-single_module $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-install_name ${wl}`echo $rpath/$soname` $xlcverstring' - module_cmds_CXX='$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags' - # Don't fix this by using the ld -exported_symbols_list flag, it doesn't exist in older darwin lds - archive_expsym_cmds_CXX='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -qmkshrobj ${wl}-single_module $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-install_name ${wl}$rpath/$soname $xlcverstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' - module_expsym_cmds_CXX='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' - ;; - *) - ld_shlibs_CXX=no - ;; - esac - fi - ;; - - dgux*) - case $cc_basename in - ec++*) - # FIXME: insert proper C++ library support - ld_shlibs_CXX=no - ;; - ghcx*) - # Green Hills C++ Compiler - # FIXME: insert proper C++ library support - ld_shlibs_CXX=no - ;; - *) - # FIXME: insert proper C++ library support - ld_shlibs_CXX=no - ;; - esac - ;; - freebsd[12]*) - # C++ shared libraries reported to be fairly broken before switch to ELF - ld_shlibs_CXX=no - ;; - freebsd-elf*) - archive_cmds_need_lc_CXX=no - ;; - freebsd* | dragonfly*) - # FreeBSD 3 and later use GNU C++ and GNU ld with standard ELF - # conventions - ld_shlibs_CXX=yes - ;; - gnu*) - ;; - hpux9*) - hardcode_libdir_flag_spec_CXX='${wl}+b ${wl}$libdir' - hardcode_libdir_separator_CXX=: - export_dynamic_flag_spec_CXX='${wl}-E' - hardcode_direct_CXX=yes - hardcode_minus_L_CXX=yes # Not in the search PATH, - # but as the default - # location of the library. - - case $cc_basename in - CC*) - # FIXME: insert proper C++ library support - ld_shlibs_CXX=no - ;; - aCC*) - archive_cmds_CXX='$rm $output_objdir/$soname~$CC -b ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' - # Commands to make compiler produce verbose output that lists - # what "hidden" libraries, object files and flags are used when - # linking a shared library. - # - # There doesn't appear to be a way to prevent this compiler from - # explicitly linking system object files so we need to strip them - # from the output so that they don't get included in the library - # dependencies. - output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | grep "[-]L"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; echo $list' - ;; - *) - if test "$GXX" = yes; then - archive_cmds_CXX='$rm $output_objdir/$soname~$CC -shared -nostdlib -fPIC ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' - else - # FIXME: insert proper C++ library support - ld_shlibs_CXX=no - fi - ;; - esac - ;; - hpux10*|hpux11*) - if test $with_gnu_ld = no; then - hardcode_libdir_flag_spec_CXX='${wl}+b ${wl}$libdir' - hardcode_libdir_separator_CXX=: - - case $host_cpu in - hppa*64*|ia64*) ;; - *) - export_dynamic_flag_spec_CXX='${wl}-E' - ;; - esac - fi - case $host_cpu in - hppa*64*|ia64*) - hardcode_direct_CXX=no - hardcode_shlibpath_var_CXX=no - ;; - *) - hardcode_direct_CXX=yes - hardcode_minus_L_CXX=yes # Not in the search PATH, - # but as the default - # location of the library. - ;; - esac - - case $cc_basename in - CC*) - # FIXME: insert proper C++ library support - ld_shlibs_CXX=no - ;; - aCC*) - case $host_cpu in - hppa*64*) - archive_cmds_CXX='$CC -b ${wl}+h ${wl}$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' - ;; - ia64*) - archive_cmds_CXX='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' - ;; - *) - archive_cmds_CXX='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' - ;; - esac - # Commands to make compiler produce verbose output that lists - # what "hidden" libraries, object files and flags are used when - # linking a shared library. - # - # There doesn't appear to be a way to prevent this compiler from - # explicitly linking system object files so we need to strip them - # from the output so that they don't get included in the library - # dependencies. - output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | grep "\-L"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; echo $list' - ;; - *) - if test "$GXX" = yes; then - if test $with_gnu_ld = no; then - case $host_cpu in - hppa*64*) - archive_cmds_CXX='$CC -shared -nostdlib -fPIC ${wl}+h ${wl}$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' - ;; - ia64*) - archive_cmds_CXX='$CC -shared -nostdlib -fPIC ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' - ;; - *) - archive_cmds_CXX='$CC -shared -nostdlib -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' - ;; - esac - fi - else - # FIXME: insert proper C++ library support - ld_shlibs_CXX=no - fi - ;; - esac - ;; - interix[3-9]*) - hardcode_direct_CXX=no - hardcode_shlibpath_var_CXX=no - hardcode_libdir_flag_spec_CXX='${wl}-rpath,$libdir' - export_dynamic_flag_spec_CXX='${wl}-E' - # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc. - # Instead, shared libraries are loaded at an image base (0x10000000 by - # default) and relocated if they conflict, which is a slow very memory - # consuming and fragmenting process. To avoid this, we pick a random, - # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link - # time. Moving up from 0x10000000 also allows more sbrk(2) space. - archive_cmds_CXX='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' - archive_expsym_cmds_CXX='sed "s,^,_," $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--retain-symbols-file,$output_objdir/$soname.expsym ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' - ;; - irix5* | irix6*) - case $cc_basename in - CC*) - # SGI C++ - archive_cmds_CXX='$CC -shared -all -multigot $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib' - - # Archives containing C++ object files must be created using - # "CC -ar", where "CC" is the IRIX C++ compiler. This is - # necessary to make sure instantiated templates are included - # in the archive. - old_archive_cmds_CXX='$CC -ar -WR,-u -o $oldlib $oldobjs' - ;; - *) - if test "$GXX" = yes; then - if test "$with_gnu_ld" = no; then - archive_cmds_CXX='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' - else - archive_cmds_CXX='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` -o $lib' - fi - fi - link_all_deplibs_CXX=yes - ;; - esac - hardcode_libdir_flag_spec_CXX='${wl}-rpath ${wl}$libdir' - hardcode_libdir_separator_CXX=: - ;; - linux* | k*bsd*-gnu) - case $cc_basename in - KCC*) - # Kuck and Associates, Inc. (KAI) C++ Compiler - - # KCC will only create a shared library if the output file - # ends with ".so" (or ".sl" for HP-UX), so rename the library - # to its proper name (with version) after linking. - archive_cmds_CXX='tempext=`echo $shared_ext | $SED -e '\''s/\([^()0-9A-Za-z{}]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib' - archive_expsym_cmds_CXX='tempext=`echo $shared_ext | $SED -e '\''s/\([^()0-9A-Za-z{}]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib ${wl}-retain-symbols-file,$export_symbols; mv \$templib $lib' - # Commands to make compiler produce verbose output that lists - # what "hidden" libraries, object files and flags are used when - # linking a shared library. - # - # There doesn't appear to be a way to prevent this compiler from - # explicitly linking system object files so we need to strip them - # from the output so that they don't get included in the library - # dependencies. - output_verbose_link_cmd='templist=`$CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1 | grep "ld"`; rm -f libconftest$shared_ext; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; echo $list' - - hardcode_libdir_flag_spec_CXX='${wl}--rpath,$libdir' - export_dynamic_flag_spec_CXX='${wl}--export-dynamic' - - # Archives containing C++ object files must be created using - # "CC -Bstatic", where "CC" is the KAI C++ compiler. - old_archive_cmds_CXX='$CC -Bstatic -o $oldlib $oldobjs' - ;; - icpc*) - # Intel C++ - with_gnu_ld=yes - # version 8.0 and above of icpc choke on multiply defined symbols - # if we add $predep_objects and $postdep_objects, however 7.1 and - # earlier do not add the objects themselves. - case `$CC -V 2>&1` in - *"Version 7."*) - archive_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib' - archive_expsym_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' - ;; - *) # Version 8.0 or newer - tmp_idyn= - case $host_cpu in - ia64*) tmp_idyn=' -i_dynamic';; - esac - archive_cmds_CXX='$CC -shared'"$tmp_idyn"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' - archive_expsym_cmds_CXX='$CC -shared'"$tmp_idyn"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' - ;; - esac - archive_cmds_need_lc_CXX=no - hardcode_libdir_flag_spec_CXX='${wl}-rpath,$libdir' - export_dynamic_flag_spec_CXX='${wl}--export-dynamic' - whole_archive_flag_spec_CXX='${wl}--whole-archive$convenience ${wl}--no-whole-archive' - ;; - pgCC*) - # Portland Group C++ compiler - archive_cmds_CXX='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname -o $lib' - archive_expsym_cmds_CXX='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname ${wl}-retain-symbols-file ${wl}$export_symbols -o $lib' - - hardcode_libdir_flag_spec_CXX='${wl}--rpath ${wl}$libdir' - export_dynamic_flag_spec_CXX='${wl}--export-dynamic' - whole_archive_flag_spec_CXX='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $echo \"$new_convenience\"` ${wl}--no-whole-archive' - ;; - cxx*) - # Compaq C++ - archive_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib' - archive_expsym_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib ${wl}-retain-symbols-file $wl$export_symbols' - - runpath_var=LD_RUN_PATH - hardcode_libdir_flag_spec_CXX='-rpath $libdir' - hardcode_libdir_separator_CXX=: - - # Commands to make compiler produce verbose output that lists - # what "hidden" libraries, object files and flags are used when - # linking a shared library. - # - # There doesn't appear to be a way to prevent this compiler from - # explicitly linking system object files so we need to strip them - # from the output so that they don't get included in the library - # dependencies. - output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep "ld"`; templist=`echo $templist | $SED "s/\(^.*ld.*\)\( .*ld .*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; echo $list' - ;; - *) - case `$CC -V 2>&1 | sed 5q` in - *Sun\ C*) - # Sun C++ 5.9 - no_undefined_flag_CXX=' -zdefs' - archive_cmds_CXX='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' - archive_expsym_cmds_CXX='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-retain-symbols-file ${wl}$export_symbols' - hardcode_libdir_flag_spec_CXX='-R$libdir' - whole_archive_flag_spec_CXX='${wl}--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; $echo \"$new_convenience\"` ${wl}--no-whole-archive' - - # Not sure whether something based on - # $CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1 - # would be better. - output_verbose_link_cmd='echo' - - # Archives containing C++ object files must be created using - # "CC -xar", where "CC" is the Sun C++ compiler. This is - # necessary to make sure instantiated templates are included - # in the archive. - old_archive_cmds_CXX='$CC -xar -o $oldlib $oldobjs' - ;; - esac - ;; - esac - ;; - lynxos*) - # FIXME: insert proper C++ library support - ld_shlibs_CXX=no - ;; - m88k*) - # FIXME: insert proper C++ library support - ld_shlibs_CXX=no - ;; - mvs*) - case $cc_basename in - cxx*) - # FIXME: insert proper C++ library support - ld_shlibs_CXX=no - ;; - *) - # FIXME: insert proper C++ library support - ld_shlibs_CXX=no - ;; - esac - ;; - netbsd*) - if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then - archive_cmds_CXX='$LD -Bshareable -o $lib $predep_objects $libobjs $deplibs $postdep_objects $linker_flags' - wlarc= - hardcode_libdir_flag_spec_CXX='-R$libdir' - hardcode_direct_CXX=yes - hardcode_shlibpath_var_CXX=no - fi - # Workaround some broken pre-1.5 toolchains - output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep conftest.$objext | $SED -e "s:-lgcc -lc -lgcc::"' - ;; - openbsd2*) - # C++ shared libraries are fairly broken - ld_shlibs_CXX=no - ;; - openbsd*) - if test -f /usr/libexec/ld.so; then - hardcode_direct_CXX=yes - hardcode_shlibpath_var_CXX=no - archive_cmds_CXX='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib' - hardcode_libdir_flag_spec_CXX='${wl}-rpath,$libdir' - if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then - archive_expsym_cmds_CXX='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-retain-symbols-file,$export_symbols -o $lib' - export_dynamic_flag_spec_CXX='${wl}-E' - whole_archive_flag_spec_CXX="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' - fi - output_verbose_link_cmd='echo' - else - ld_shlibs_CXX=no - fi - ;; - osf3*) - case $cc_basename in - KCC*) - # Kuck and Associates, Inc. (KAI) C++ Compiler - - # KCC will only create a shared library if the output file - # ends with ".so" (or ".sl" for HP-UX), so rename the library - # to its proper name (with version) after linking. - archive_cmds_CXX='tempext=`echo $shared_ext | $SED -e '\''s/\([^()0-9A-Za-z{}]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib' - - hardcode_libdir_flag_spec_CXX='${wl}-rpath,$libdir' - hardcode_libdir_separator_CXX=: - - # Archives containing C++ object files must be created using - # "CC -Bstatic", where "CC" is the KAI C++ compiler. - old_archive_cmds_CXX='$CC -Bstatic -o $oldlib $oldobjs' - - ;; - RCC*) - # Rational C++ 2.4.1 - # FIXME: insert proper C++ library support - ld_shlibs_CXX=no - ;; - cxx*) - allow_undefined_flag_CXX=' ${wl}-expect_unresolved ${wl}\*' - archive_cmds_CXX='$CC -shared${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $soname `test -n "$verstring" && echo ${wl}-set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib' - - hardcode_libdir_flag_spec_CXX='${wl}-rpath ${wl}$libdir' - hardcode_libdir_separator_CXX=: - - # Commands to make compiler produce verbose output that lists - # what "hidden" libraries, object files and flags are used when - # linking a shared library. - # - # There doesn't appear to be a way to prevent this compiler from - # explicitly linking system object files so we need to strip them - # from the output so that they don't get included in the library - # dependencies. - output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep "ld" | grep -v "ld:"`; templist=`echo $templist | $SED "s/\(^.*ld.*\)\( .*ld.*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; echo $list' - ;; - *) - if test "$GXX" = yes && test "$with_gnu_ld" = no; then - allow_undefined_flag_CXX=' ${wl}-expect_unresolved ${wl}\*' - archive_cmds_CXX='$CC -shared -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' - - hardcode_libdir_flag_spec_CXX='${wl}-rpath ${wl}$libdir' - hardcode_libdir_separator_CXX=: - - # Commands to make compiler produce verbose output that lists - # what "hidden" libraries, object files and flags are used when - # linking a shared library. - output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep "\-L"' - - else - # FIXME: insert proper C++ library support - ld_shlibs_CXX=no - fi - ;; - esac - ;; - osf4* | osf5*) - case $cc_basename in - KCC*) - # Kuck and Associates, Inc. (KAI) C++ Compiler - - # KCC will only create a shared library if the output file - # ends with ".so" (or ".sl" for HP-UX), so rename the library - # to its proper name (with version) after linking. - archive_cmds_CXX='tempext=`echo $shared_ext | $SED -e '\''s/\([^()0-9A-Za-z{}]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib' - - hardcode_libdir_flag_spec_CXX='${wl}-rpath,$libdir' - hardcode_libdir_separator_CXX=: - - # Archives containing C++ object files must be created using - # the KAI C++ compiler. - old_archive_cmds_CXX='$CC -o $oldlib $oldobjs' - ;; - RCC*) - # Rational C++ 2.4.1 - # FIXME: insert proper C++ library support - ld_shlibs_CXX=no - ;; - cxx*) - allow_undefined_flag_CXX=' -expect_unresolved \*' - archive_cmds_CXX='$CC -shared${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib' - archive_expsym_cmds_CXX='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done~ - echo "-hidden">> $lib.exp~ - $CC -shared$allow_undefined_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname -Wl,-input -Wl,$lib.exp `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib~ - $rm $lib.exp' - - hardcode_libdir_flag_spec_CXX='-rpath $libdir' - hardcode_libdir_separator_CXX=: - - # Commands to make compiler produce verbose output that lists - # what "hidden" libraries, object files and flags are used when - # linking a shared library. - # - # There doesn't appear to be a way to prevent this compiler from - # explicitly linking system object files so we need to strip them - # from the output so that they don't get included in the library - # dependencies. - output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep "ld" | grep -v "ld:"`; templist=`echo $templist | $SED "s/\(^.*ld.*\)\( .*ld.*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; echo $list' - ;; - *) - if test "$GXX" = yes && test "$with_gnu_ld" = no; then - allow_undefined_flag_CXX=' ${wl}-expect_unresolved ${wl}\*' - archive_cmds_CXX='$CC -shared -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' - - hardcode_libdir_flag_spec_CXX='${wl}-rpath ${wl}$libdir' - hardcode_libdir_separator_CXX=: - - # Commands to make compiler produce verbose output that lists - # what "hidden" libraries, object files and flags are used when - # linking a shared library. - output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep "\-L"' - - else - # FIXME: insert proper C++ library support - ld_shlibs_CXX=no - fi - ;; - esac - ;; - psos*) - # FIXME: insert proper C++ library support - ld_shlibs_CXX=no - ;; - sunos4*) - case $cc_basename in - CC*) - # Sun C++ 4.x - # FIXME: insert proper C++ library support - ld_shlibs_CXX=no - ;; - lcc*) - # Lucid - # FIXME: insert proper C++ library support - ld_shlibs_CXX=no - ;; - *) - # FIXME: insert proper C++ library support - ld_shlibs_CXX=no - ;; - esac - ;; - solaris*) - case $cc_basename in - CC*) - # Sun C++ 4.2, 5.x and Centerline C++ - archive_cmds_need_lc_CXX=yes - no_undefined_flag_CXX=' -zdefs' - archive_cmds_CXX='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' - archive_expsym_cmds_CXX='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~ - $CC -G${allow_undefined_flag} ${wl}-M ${wl}$lib.exp -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$rm $lib.exp' - - hardcode_libdir_flag_spec_CXX='-R$libdir' - hardcode_shlibpath_var_CXX=no - case $host_os in - solaris2.[0-5] | solaris2.[0-5].*) ;; - *) - # The compiler driver will combine and reorder linker options, - # but understands `-z linker_flag'. - # Supported since Solaris 2.6 (maybe 2.5.1?) - whole_archive_flag_spec_CXX='-z allextract$convenience -z defaultextract' - ;; - esac - link_all_deplibs_CXX=yes - - output_verbose_link_cmd='echo' - - # Archives containing C++ object files must be created using - # "CC -xar", where "CC" is the Sun C++ compiler. This is - # necessary to make sure instantiated templates are included - # in the archive. - old_archive_cmds_CXX='$CC -xar -o $oldlib $oldobjs' - ;; - gcx*) - # Green Hills C++ Compiler - archive_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib' - - # The C++ compiler must be used to create the archive. - old_archive_cmds_CXX='$CC $LDFLAGS -archive -o $oldlib $oldobjs' - ;; - *) - # GNU C++ compiler with Solaris linker - if test "$GXX" = yes && test "$with_gnu_ld" = no; then - no_undefined_flag_CXX=' ${wl}-z ${wl}defs' - if $CC --version | grep -v '^2\.7' > /dev/null; then - archive_cmds_CXX='$CC -shared -nostdlib $LDFLAGS $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib' - archive_expsym_cmds_CXX='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~ - $CC -shared -nostdlib ${wl}-M $wl$lib.exp -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$rm $lib.exp' - - # Commands to make compiler produce verbose output that lists - # what "hidden" libraries, object files and flags are used when - # linking a shared library. - output_verbose_link_cmd="$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep \"\-L\"" - else - # g++ 2.7 appears to require `-G' NOT `-shared' on this - # platform. - archive_cmds_CXX='$CC -G -nostdlib $LDFLAGS $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib' - archive_expsym_cmds_CXX='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~ - $CC -G -nostdlib ${wl}-M $wl$lib.exp -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$rm $lib.exp' - - # Commands to make compiler produce verbose output that lists - # what "hidden" libraries, object files and flags are used when - # linking a shared library. - output_verbose_link_cmd="$CC -G $CFLAGS -v conftest.$objext 2>&1 | grep \"\-L\"" - fi - - hardcode_libdir_flag_spec_CXX='${wl}-R $wl$libdir' - case $host_os in - solaris2.[0-5] | solaris2.[0-5].*) ;; - *) - whole_archive_flag_spec_CXX='${wl}-z ${wl}allextract$convenience ${wl}-z ${wl}defaultextract' - ;; - esac - fi - ;; - esac - ;; - sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[01].[10]* | unixware7* | sco3.2v5.0.[024]*) - no_undefined_flag_CXX='${wl}-z,text' - archive_cmds_need_lc_CXX=no - hardcode_shlibpath_var_CXX=no - runpath_var='LD_RUN_PATH' - - case $cc_basename in - CC*) - archive_cmds_CXX='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - archive_expsym_cmds_CXX='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - ;; - *) - archive_cmds_CXX='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - archive_expsym_cmds_CXX='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - ;; - esac - ;; - sysv5* | sco3.2v5* | sco5v6*) - # Note: We can NOT use -z defs as we might desire, because we do not - # link with -lc, and that would cause any symbols used from libc to - # always be unresolved, which means just about no library would - # ever link correctly. If we're not using GNU ld we use -z text - # though, which does catch some bad symbols but isn't as heavy-handed - # as -z defs. - # For security reasons, it is highly recommended that you always - # use absolute paths for naming shared libraries, and exclude the - # DT_RUNPATH tag from executables and libraries. But doing so - # requires that you compile everything twice, which is a pain. - # So that behaviour is only enabled if SCOABSPATH is set to a - # non-empty value in the environment. Most likely only useful for - # creating official distributions of packages. - # This is a hack until libtool officially supports absolute path - # names for shared libraries. - no_undefined_flag_CXX='${wl}-z,text' - allow_undefined_flag_CXX='${wl}-z,nodefs' - archive_cmds_need_lc_CXX=no - hardcode_shlibpath_var_CXX=no - hardcode_libdir_flag_spec_CXX='`test -z "$SCOABSPATH" && echo ${wl}-R,$libdir`' - hardcode_libdir_separator_CXX=':' - link_all_deplibs_CXX=yes - export_dynamic_flag_spec_CXX='${wl}-Bexport' - runpath_var='LD_RUN_PATH' - - case $cc_basename in - CC*) - archive_cmds_CXX='$CC -G ${wl}-h,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags' - archive_expsym_cmds_CXX='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags' - ;; - *) - archive_cmds_CXX='$CC -shared ${wl}-h,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags' - archive_expsym_cmds_CXX='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags' - ;; - esac - ;; - tandem*) - case $cc_basename in - NCC*) - # NonStop-UX NCC 3.20 - # FIXME: insert proper C++ library support - ld_shlibs_CXX=no - ;; - *) - # FIXME: insert proper C++ library support - ld_shlibs_CXX=no - ;; - esac - ;; - vxworks*) - # FIXME: insert proper C++ library support - ld_shlibs_CXX=no - ;; - *) - # FIXME: insert proper C++ library support - ld_shlibs_CXX=no - ;; -esac -{ echo "$as_me:$LINENO: result: $ld_shlibs_CXX" >&5 -echo "${ECHO_T}$ld_shlibs_CXX" >&6; } -test "$ld_shlibs_CXX" = no && can_build_shared=no - -GCC_CXX="$GXX" -LD_CXX="$LD" - - -cat > conftest.$ac_ext <&5 - (eval $ac_compile) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; then - # Parse the compiler output and extract the necessary - # objects, libraries and library flags. - - # Sentinel used to keep track of whether or not we are before - # the conftest object file. - pre_test_object_deps_done=no - - # The `*' in the case matches for architectures that use `case' in - # $output_verbose_cmd can trigger glob expansion during the loop - # eval without this substitution. - output_verbose_link_cmd=`$echo "X$output_verbose_link_cmd" | $Xsed -e "$no_glob_subst"` - - for p in `eval $output_verbose_link_cmd`; do - case $p in - - -L* | -R* | -l*) - # Some compilers place space between "-{L,R}" and the path. - # Remove the space. - if test $p = "-L" \ - || test $p = "-R"; then - prev=$p - continue - else - prev= - fi - - if test "$pre_test_object_deps_done" = no; then - case $p in - -L* | -R*) - # Internal compiler library paths should come after those - # provided the user. The postdeps already come after the - # user supplied libs so there is no need to process them. - if test -z "$compiler_lib_search_path_CXX"; then - compiler_lib_search_path_CXX="${prev}${p}" - else - compiler_lib_search_path_CXX="${compiler_lib_search_path_CXX} ${prev}${p}" - fi - ;; - # The "-l" case would never come before the object being - # linked, so don't bother handling this case. - esac - else - if test -z "$postdeps_CXX"; then - postdeps_CXX="${prev}${p}" - else - postdeps_CXX="${postdeps_CXX} ${prev}${p}" - fi - fi - ;; - - *.$objext) - # This assumes that the test object file only shows up - # once in the compiler output. - if test "$p" = "conftest.$objext"; then - pre_test_object_deps_done=yes - continue - fi - - if test "$pre_test_object_deps_done" = no; then - if test -z "$predep_objects_CXX"; then - predep_objects_CXX="$p" - else - predep_objects_CXX="$predep_objects_CXX $p" - fi - else - if test -z "$postdep_objects_CXX"; then - postdep_objects_CXX="$p" - else - postdep_objects_CXX="$postdep_objects_CXX $p" - fi - fi - ;; - - *) ;; # Ignore the rest. - - esac - done - - # Clean up. - rm -f a.out a.exe -else - echo "libtool.m4: error: problem compiling CXX test program" -fi - -$rm -f confest.$objext - -# PORTME: override above test on systems where it is broken -case $host_os in -interix[3-9]*) - # Interix 3.5 installs completely hosed .la files for C++, so rather than - # hack all around it, let's just trust "g++" to DTRT. - predep_objects_CXX= - postdep_objects_CXX= - postdeps_CXX= - ;; - -linux*) - case `$CC -V 2>&1 | sed 5q` in - *Sun\ C*) - # Sun C++ 5.9 - # - # The more standards-conforming stlport4 library is - # incompatible with the Cstd library. Avoid specifying - # it if it's in CXXFLAGS. Ignore libCrun as - # -library=stlport4 depends on it. - case " $CXX $CXXFLAGS " in - *" -library=stlport4 "*) - solaris_use_stlport4=yes - ;; - esac - if test "$solaris_use_stlport4" != yes; then - postdeps_CXX='-library=Cstd -library=Crun' - fi - ;; - esac - ;; - -solaris*) - case $cc_basename in - CC*) - # The more standards-conforming stlport4 library is - # incompatible with the Cstd library. Avoid specifying - # it if it's in CXXFLAGS. Ignore libCrun as - # -library=stlport4 depends on it. - case " $CXX $CXXFLAGS " in - *" -library=stlport4 "*) - solaris_use_stlport4=yes - ;; - esac - - # Adding this requires a known-good setup of shared libraries for - # Sun compiler versions before 5.6, else PIC objects from an old - # archive will be linked into the output, leading to subtle bugs. - if test "$solaris_use_stlport4" != yes; then - postdeps_CXX='-library=Cstd -library=Crun' - fi - ;; - esac - ;; -esac - - -case " $postdeps_CXX " in -*" -lc "*) archive_cmds_need_lc_CXX=no ;; -esac - -lt_prog_compiler_wl_CXX= -lt_prog_compiler_pic_CXX= -lt_prog_compiler_static_CXX= - -{ echo "$as_me:$LINENO: checking for $compiler option to produce PIC" >&5 -echo $ECHO_N "checking for $compiler option to produce PIC... $ECHO_C" >&6; } - - # C++ specific cases for pic, static, wl, etc. - if test "$GXX" = yes; then - lt_prog_compiler_wl_CXX='-Wl,' - lt_prog_compiler_static_CXX='-static' - - case $host_os in - aix*) - # All AIX code is PIC. - if test "$host_cpu" = ia64; then - # AIX 5 now supports IA64 processor - lt_prog_compiler_static_CXX='-Bstatic' - fi - ;; - amigaos*) - # FIXME: we need at least 68020 code to build shared libraries, but - # adding the `-m68020' flag to GCC prevents building anything better, - # like `-m68040'. - lt_prog_compiler_pic_CXX='-m68020 -resident32 -malways-restore-a4' - ;; - beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) - # PIC is the default for these OSes. - ;; - mingw* | cygwin* | os2* | pw32*) - # This hack is so that the source file can tell whether it is being - # built for inclusion in a dll (and should export symbols for example). - # Although the cygwin gcc ignores -fPIC, still need this for old-style - # (--disable-auto-import) libraries - lt_prog_compiler_pic_CXX='-DDLL_EXPORT' - ;; - darwin* | rhapsody*) - # PIC is the default on this platform - # Common symbols not allowed in MH_DYLIB files - lt_prog_compiler_pic_CXX='-fno-common' - ;; - *djgpp*) - # DJGPP does not support shared libraries at all - lt_prog_compiler_pic_CXX= - ;; - interix[3-9]*) - # Interix 3.x gcc -fpic/-fPIC options generate broken code. - # Instead, we relocate shared libraries at runtime. - ;; - sysv4*MP*) - if test -d /usr/nec; then - lt_prog_compiler_pic_CXX=-Kconform_pic - fi - ;; - hpux*) - # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but - # not for PA HP-UX. - case $host_cpu in - hppa*64*|ia64*) - ;; - *) - lt_prog_compiler_pic_CXX='-fPIC' - ;; - esac - ;; - *) - lt_prog_compiler_pic_CXX='-fPIC' - ;; - esac - else - case $host_os in - aix4* | aix5*) - # All AIX code is PIC. - if test "$host_cpu" = ia64; then - # AIX 5 now supports IA64 processor - lt_prog_compiler_static_CXX='-Bstatic' - else - lt_prog_compiler_static_CXX='-bnso -bI:/lib/syscalls.exp' - fi - ;; - chorus*) - case $cc_basename in - cxch68*) - # Green Hills C++ Compiler - # _LT_AC_TAGVAR(lt_prog_compiler_static, CXX)="--no_auto_instantiation -u __main -u __premain -u _abort -r $COOL_DIR/lib/libOrb.a $MVME_DIR/lib/CC/libC.a $MVME_DIR/lib/classix/libcx.s.a" - ;; - esac - ;; - darwin*) - # PIC is the default on this platform - # Common symbols not allowed in MH_DYLIB files - case $cc_basename in - xlc*) - lt_prog_compiler_pic_CXX='-qnocommon' - lt_prog_compiler_wl_CXX='-Wl,' - ;; - esac - ;; - dgux*) - case $cc_basename in - ec++*) - lt_prog_compiler_pic_CXX='-KPIC' - ;; - ghcx*) - # Green Hills C++ Compiler - lt_prog_compiler_pic_CXX='-pic' - ;; - *) - ;; - esac - ;; - freebsd* | dragonfly*) - # FreeBSD uses GNU C++ - ;; - hpux9* | hpux10* | hpux11*) - case $cc_basename in - CC*) - lt_prog_compiler_wl_CXX='-Wl,' - lt_prog_compiler_static_CXX='${wl}-a ${wl}archive' - if test "$host_cpu" != ia64; then - lt_prog_compiler_pic_CXX='+Z' - fi - ;; - aCC*) - lt_prog_compiler_wl_CXX='-Wl,' - lt_prog_compiler_static_CXX='${wl}-a ${wl}archive' - case $host_cpu in - hppa*64*|ia64*) - # +Z the default - ;; - *) - lt_prog_compiler_pic_CXX='+Z' - ;; - esac - ;; - *) - ;; - esac - ;; - interix*) - # This is c89, which is MS Visual C++ (no shared libs) - # Anyone wants to do a port? - ;; - irix5* | irix6* | nonstopux*) - case $cc_basename in - CC*) - lt_prog_compiler_wl_CXX='-Wl,' - lt_prog_compiler_static_CXX='-non_shared' - # CC pic flag -KPIC is the default. - ;; - *) - ;; - esac - ;; - linux* | k*bsd*-gnu) - case $cc_basename in - KCC*) - # KAI C++ Compiler - lt_prog_compiler_wl_CXX='--backend -Wl,' - lt_prog_compiler_pic_CXX='-fPIC' - ;; - icpc* | ecpc*) - # Intel C++ - lt_prog_compiler_wl_CXX='-Wl,' - lt_prog_compiler_pic_CXX='-KPIC' - lt_prog_compiler_static_CXX='-static' - ;; - pgCC*) - # Portland Group C++ compiler. - lt_prog_compiler_wl_CXX='-Wl,' - lt_prog_compiler_pic_CXX='-fpic' - lt_prog_compiler_static_CXX='-Bstatic' - ;; - cxx*) - # Compaq C++ - # Make sure the PIC flag is empty. It appears that all Alpha - # Linux and Compaq Tru64 Unix objects are PIC. - lt_prog_compiler_pic_CXX= - lt_prog_compiler_static_CXX='-non_shared' - ;; - *) - case `$CC -V 2>&1 | sed 5q` in - *Sun\ C*) - # Sun C++ 5.9 - lt_prog_compiler_pic_CXX='-KPIC' - lt_prog_compiler_static_CXX='-Bstatic' - lt_prog_compiler_wl_CXX='-Qoption ld ' - ;; - esac - ;; - esac - ;; - lynxos*) - ;; - m88k*) - ;; - mvs*) - case $cc_basename in - cxx*) - lt_prog_compiler_pic_CXX='-W c,exportall' - ;; - *) - ;; - esac - ;; - netbsd*) - ;; - osf3* | osf4* | osf5*) - case $cc_basename in - KCC*) - lt_prog_compiler_wl_CXX='--backend -Wl,' - ;; - RCC*) - # Rational C++ 2.4.1 - lt_prog_compiler_pic_CXX='-pic' - ;; - cxx*) - # Digital/Compaq C++ - lt_prog_compiler_wl_CXX='-Wl,' - # Make sure the PIC flag is empty. It appears that all Alpha - # Linux and Compaq Tru64 Unix objects are PIC. - lt_prog_compiler_pic_CXX= - lt_prog_compiler_static_CXX='-non_shared' - ;; - *) - ;; - esac - ;; - psos*) - ;; - solaris*) - case $cc_basename in - CC*) - # Sun C++ 4.2, 5.x and Centerline C++ - lt_prog_compiler_pic_CXX='-KPIC' - lt_prog_compiler_static_CXX='-Bstatic' - lt_prog_compiler_wl_CXX='-Qoption ld ' - ;; - gcx*) - # Green Hills C++ Compiler - lt_prog_compiler_pic_CXX='-PIC' - ;; - *) - ;; - esac - ;; - sunos4*) - case $cc_basename in - CC*) - # Sun C++ 4.x - lt_prog_compiler_pic_CXX='-pic' - lt_prog_compiler_static_CXX='-Bstatic' - ;; - lcc*) - # Lucid - lt_prog_compiler_pic_CXX='-pic' - ;; - *) - ;; - esac - ;; - tandem*) - case $cc_basename in - NCC*) - # NonStop-UX NCC 3.20 - lt_prog_compiler_pic_CXX='-KPIC' - ;; - *) - ;; - esac - ;; - sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*) - case $cc_basename in - CC*) - lt_prog_compiler_wl_CXX='-Wl,' - lt_prog_compiler_pic_CXX='-KPIC' - lt_prog_compiler_static_CXX='-Bstatic' - ;; - esac - ;; - vxworks*) - ;; - *) - lt_prog_compiler_can_build_shared_CXX=no - ;; - esac - fi - -{ echo "$as_me:$LINENO: result: $lt_prog_compiler_pic_CXX" >&5 -echo "${ECHO_T}$lt_prog_compiler_pic_CXX" >&6; } - -# -# Check to make sure the PIC flag actually works. -# -if test -n "$lt_prog_compiler_pic_CXX"; then - -{ echo "$as_me:$LINENO: checking if $compiler PIC flag $lt_prog_compiler_pic_CXX works" >&5 -echo $ECHO_N "checking if $compiler PIC flag $lt_prog_compiler_pic_CXX works... $ECHO_C" >&6; } -if test "${lt_prog_compiler_pic_works_CXX+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - lt_prog_compiler_pic_works_CXX=no - ac_outfile=conftest.$ac_objext - echo "$lt_simple_compile_test_code" > conftest.$ac_ext - lt_compiler_flag="$lt_prog_compiler_pic_CXX -DPIC" - # Insert the option either (1) after the last *FLAGS variable, or - # (2) before a word containing "conftest.", or (3) at the end. - # Note that $ac_compile itself does not contain backslashes and begins - # with a dollar sign (not a hyphen), so the echo should work correctly. - # The option is referenced via a variable to avoid confusing sed. - lt_compile=`echo "$ac_compile" | $SED \ - -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ - -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ - -e 's:$: $lt_compiler_flag:'` - (eval echo "\"\$as_me:12701: $lt_compile\"" >&5) - (eval "$lt_compile" 2>conftest.err) - ac_status=$? - cat conftest.err >&5 - echo "$as_me:12705: \$? = $ac_status" >&5 - if (exit $ac_status) && test -s "$ac_outfile"; then - # The compiler can only warn and ignore the option if not recognized - # So say no if there are warnings other than the usual output. - $echo "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' >conftest.exp - $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 - if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then - lt_prog_compiler_pic_works_CXX=yes - fi - fi - $rm conftest* - -fi -{ echo "$as_me:$LINENO: result: $lt_prog_compiler_pic_works_CXX" >&5 -echo "${ECHO_T}$lt_prog_compiler_pic_works_CXX" >&6; } - -if test x"$lt_prog_compiler_pic_works_CXX" = xyes; then - case $lt_prog_compiler_pic_CXX in - "" | " "*) ;; - *) lt_prog_compiler_pic_CXX=" $lt_prog_compiler_pic_CXX" ;; - esac -else - lt_prog_compiler_pic_CXX= - lt_prog_compiler_can_build_shared_CXX=no -fi - -fi -case $host_os in - # For platforms which do not support PIC, -DPIC is meaningless: - *djgpp*) - lt_prog_compiler_pic_CXX= - ;; - *) - lt_prog_compiler_pic_CXX="$lt_prog_compiler_pic_CXX -DPIC" - ;; -esac - -# -# Check to make sure the static flag actually works. -# -wl=$lt_prog_compiler_wl_CXX eval lt_tmp_static_flag=\"$lt_prog_compiler_static_CXX\" -{ echo "$as_me:$LINENO: checking if $compiler static flag $lt_tmp_static_flag works" >&5 -echo $ECHO_N "checking if $compiler static flag $lt_tmp_static_flag works... $ECHO_C" >&6; } -if test "${lt_prog_compiler_static_works_CXX+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - lt_prog_compiler_static_works_CXX=no - save_LDFLAGS="$LDFLAGS" - LDFLAGS="$LDFLAGS $lt_tmp_static_flag" - echo "$lt_simple_link_test_code" > conftest.$ac_ext - if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then - # The linker can only warn and ignore the option if not recognized - # So say no if there are warnings - if test -s conftest.err; then - # Append any errors to the config.log. - cat conftest.err 1>&5 - $echo "X$_lt_linker_boilerplate" | $Xsed -e '/^$/d' > conftest.exp - $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 - if diff conftest.exp conftest.er2 >/dev/null; then - lt_prog_compiler_static_works_CXX=yes - fi - else - lt_prog_compiler_static_works_CXX=yes - fi - fi - $rm conftest* - LDFLAGS="$save_LDFLAGS" - -fi -{ echo "$as_me:$LINENO: result: $lt_prog_compiler_static_works_CXX" >&5 -echo "${ECHO_T}$lt_prog_compiler_static_works_CXX" >&6; } - -if test x"$lt_prog_compiler_static_works_CXX" = xyes; then - : -else - lt_prog_compiler_static_CXX= -fi - - -{ echo "$as_me:$LINENO: checking if $compiler supports -c -o file.$ac_objext" >&5 -echo $ECHO_N "checking if $compiler supports -c -o file.$ac_objext... $ECHO_C" >&6; } -if test "${lt_cv_prog_compiler_c_o_CXX+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - lt_cv_prog_compiler_c_o_CXX=no - $rm -r conftest 2>/dev/null - mkdir conftest - cd conftest - mkdir out - echo "$lt_simple_compile_test_code" > conftest.$ac_ext - - lt_compiler_flag="-o out/conftest2.$ac_objext" - # Insert the option either (1) after the last *FLAGS variable, or - # (2) before a word containing "conftest.", or (3) at the end. - # Note that $ac_compile itself does not contain backslashes and begins - # with a dollar sign (not a hyphen), so the echo should work correctly. - lt_compile=`echo "$ac_compile" | $SED \ - -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ - -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ - -e 's:$: $lt_compiler_flag:'` - (eval echo "\"\$as_me:12805: $lt_compile\"" >&5) - (eval "$lt_compile" 2>out/conftest.err) - ac_status=$? - cat out/conftest.err >&5 - echo "$as_me:12809: \$? = $ac_status" >&5 - if (exit $ac_status) && test -s out/conftest2.$ac_objext - then - # The compiler can only warn and ignore the option if not recognized - # So say no if there are warnings - $echo "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' > out/conftest.exp - $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2 - if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then - lt_cv_prog_compiler_c_o_CXX=yes - fi - fi - chmod u+w . 2>&5 - $rm conftest* - # SGI C++ compiler will create directory out/ii_files/ for - # template instantiation - test -d out/ii_files && $rm out/ii_files/* && rmdir out/ii_files - $rm out/* && rmdir out - cd .. - rmdir conftest - $rm conftest* - -fi -{ echo "$as_me:$LINENO: result: $lt_cv_prog_compiler_c_o_CXX" >&5 -echo "${ECHO_T}$lt_cv_prog_compiler_c_o_CXX" >&6; } - - -hard_links="nottested" -if test "$lt_cv_prog_compiler_c_o_CXX" = no && test "$need_locks" != no; then - # do not overwrite the value of need_locks provided by the user - { echo "$as_me:$LINENO: checking if we can lock with hard links" >&5 -echo $ECHO_N "checking if we can lock with hard links... $ECHO_C" >&6; } - hard_links=yes - $rm conftest* - ln conftest.a conftest.b 2>/dev/null && hard_links=no - touch conftest.a - ln conftest.a conftest.b 2>&5 || hard_links=no - ln conftest.a conftest.b 2>/dev/null && hard_links=no - { echo "$as_me:$LINENO: result: $hard_links" >&5 -echo "${ECHO_T}$hard_links" >&6; } - if test "$hard_links" = no; then - { echo "$as_me:$LINENO: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&5 -echo "$as_me: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&2;} - need_locks=warn - fi -else - need_locks=no -fi - -{ echo "$as_me:$LINENO: checking whether the $compiler linker ($LD) supports shared libraries" >&5 -echo $ECHO_N "checking whether the $compiler linker ($LD) supports shared libraries... $ECHO_C" >&6; } - - export_symbols_cmds_CXX='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' - case $host_os in - aix4* | aix5*) - # If we're using GNU nm, then we don't want the "-C" option. - # -C means demangle to AIX nm, but means don't demangle with GNU nm - if $NM -V 2>&1 | grep 'GNU' > /dev/null; then - export_symbols_cmds_CXX='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$2 == "T") || (\$2 == "D") || (\$2 == "B")) && (substr(\$3,1,1) != ".")) { print \$3 } }'\'' | sort -u > $export_symbols' - else - export_symbols_cmds_CXX='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$2 == "T") || (\$2 == "D") || (\$2 == "B")) && (substr(\$3,1,1) != ".")) { print \$3 } }'\'' | sort -u > $export_symbols' - fi - ;; - pw32*) - export_symbols_cmds_CXX="$ltdll_cmds" - ;; - cygwin* | mingw*) - export_symbols_cmds_CXX='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS][ ]/s/.*[ ]\([^ ]*\)/\1 DATA/;/^.*[ ]__nm__/s/^.*[ ]__nm__\([^ ]*\)[ ][^ ]*/\1 DATA/;/^I[ ]/d;/^[AITW][ ]/s/.*[ ]//'\'' | sort | uniq > $export_symbols' - ;; - *) - export_symbols_cmds_CXX='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' - ;; - esac - -{ echo "$as_me:$LINENO: result: $ld_shlibs_CXX" >&5 -echo "${ECHO_T}$ld_shlibs_CXX" >&6; } -test "$ld_shlibs_CXX" = no && can_build_shared=no - -# -# Do we need to explicitly link libc? -# -case "x$archive_cmds_need_lc_CXX" in -x|xyes) - # Assume -lc should be added - archive_cmds_need_lc_CXX=yes - - if test "$enable_shared" = yes && test "$GCC" = yes; then - case $archive_cmds_CXX in - *'~'*) - # FIXME: we may have to deal with multi-command sequences. - ;; - '$CC '*) - # Test whether the compiler implicitly links with -lc since on some - # systems, -lgcc has to come before -lc. If gcc already passes -lc - # to ld, don't add -lc before -lgcc. - { echo "$as_me:$LINENO: checking whether -lc should be explicitly linked in" >&5 -echo $ECHO_N "checking whether -lc should be explicitly linked in... $ECHO_C" >&6; } - $rm conftest* - echo "$lt_simple_compile_test_code" > conftest.$ac_ext - - if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } 2>conftest.err; then - soname=conftest - lib=conftest - libobjs=conftest.$ac_objext - deplibs= - wl=$lt_prog_compiler_wl_CXX - pic_flag=$lt_prog_compiler_pic_CXX - compiler_flags=-v - linker_flags=-v - verstring= - output_objdir=. - libname=conftest - lt_save_allow_undefined_flag=$allow_undefined_flag_CXX - allow_undefined_flag_CXX= - if { (eval echo "$as_me:$LINENO: \"$archive_cmds_CXX 2\>\&1 \| grep \" -lc \" \>/dev/null 2\>\&1\"") >&5 - (eval $archive_cmds_CXX 2\>\&1 \| grep \" -lc \" \>/dev/null 2\>\&1) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } - then - archive_cmds_need_lc_CXX=no - else - archive_cmds_need_lc_CXX=yes - fi - allow_undefined_flag_CXX=$lt_save_allow_undefined_flag - else - cat conftest.err 1>&5 - fi - $rm conftest* - { echo "$as_me:$LINENO: result: $archive_cmds_need_lc_CXX" >&5 -echo "${ECHO_T}$archive_cmds_need_lc_CXX" >&6; } - ;; - esac - fi - ;; -esac - -{ echo "$as_me:$LINENO: checking dynamic linker characteristics" >&5 -echo $ECHO_N "checking dynamic linker characteristics... $ECHO_C" >&6; } -library_names_spec= -libname_spec='lib$name' -soname_spec= -shrext_cmds=".so" -postinstall_cmds= -postuninstall_cmds= -finish_cmds= -finish_eval= -shlibpath_var= -shlibpath_overrides_runpath=unknown -version_type=none -dynamic_linker="$host_os ld.so" -sys_lib_dlsearch_path_spec="/lib /usr/lib" - -need_lib_prefix=unknown -hardcode_into_libs=no - -# when you set need_version to no, make sure it does not cause -set_version -# flags to be left without arguments -need_version=unknown - -case $host_os in -aix3*) - version_type=linux - library_names_spec='${libname}${release}${shared_ext}$versuffix $libname.a' - shlibpath_var=LIBPATH - - # AIX 3 has no versioning support, so we append a major version to the name. - soname_spec='${libname}${release}${shared_ext}$major' - ;; - -aix4* | aix5*) - version_type=linux - need_lib_prefix=no - need_version=no - hardcode_into_libs=yes - if test "$host_cpu" = ia64; then - # AIX 5 supports IA64 - library_names_spec='${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext}$versuffix $libname${shared_ext}' - shlibpath_var=LD_LIBRARY_PATH - else - # With GCC up to 2.95.x, collect2 would create an import file - # for dependence libraries. The import file would start with - # the line `#! .'. This would cause the generated library to - # depend on `.', always an invalid library. This was fixed in - # development snapshots of GCC prior to 3.0. - case $host_os in - aix4 | aix4.[01] | aix4.[01].*) - if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)' - echo ' yes ' - echo '#endif'; } | ${CC} -E - | grep yes > /dev/null; then - : - else - can_build_shared=no - fi - ;; - esac - # AIX (on Power*) has no versioning support, so currently we can not hardcode correct - # soname into executable. Probably we can add versioning support to - # collect2, so additional links can be useful in future. - if test "$aix_use_runtimelinking" = yes; then - # If using run time linking (on AIX 4.2 or later) use lib.so - # instead of lib.a to let people know that these are not - # typical AIX shared libraries. - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - else - # We preserve .a as extension for shared libraries through AIX4.2 - # and later when we are not doing run time linking. - library_names_spec='${libname}${release}.a $libname.a' - soname_spec='${libname}${release}${shared_ext}$major' - fi - shlibpath_var=LIBPATH - fi - ;; - -amigaos*) - library_names_spec='$libname.ixlibrary $libname.a' - # Create ${libname}_ixlibrary.a entries in /sys/libs. - finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`$echo "X$lib" | $Xsed -e '\''s%^.*/\([^/]*\)\.ixlibrary$%\1%'\''`; test $rm /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done' - ;; - -beos*) - library_names_spec='${libname}${shared_ext}' - dynamic_linker="$host_os ld.so" - shlibpath_var=LIBRARY_PATH - ;; - -bsdi[45]*) - version_type=linux - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir' - shlibpath_var=LD_LIBRARY_PATH - sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib" - sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib" - # the default ld.so.conf also contains /usr/contrib/lib and - # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow - # libtool to hard-code these into programs - ;; - -cygwin* | mingw* | pw32*) - version_type=windows - shrext_cmds=".dll" - need_version=no - need_lib_prefix=no - - case $GCC,$host_os in - yes,cygwin* | yes,mingw* | yes,pw32*) - library_names_spec='$libname.dll.a' - # DLL is installed to $(libdir)/../bin by postinstall_cmds - postinstall_cmds='base_file=`basename \${file}`~ - dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i;echo \$dlname'\''`~ - dldir=$destdir/`dirname \$dlpath`~ - test -d \$dldir || mkdir -p \$dldir~ - $install_prog $dir/$dlname \$dldir/$dlname~ - chmod a+x \$dldir/$dlname' - postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ - dlpath=$dir/\$dldll~ - $rm \$dlpath' - shlibpath_overrides_runpath=yes - - case $host_os in - cygwin*) - # Cygwin DLLs use 'cyg' prefix rather than 'lib' - soname_spec='`echo ${libname} | sed -e 's/^lib/cyg/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' - sys_lib_search_path_spec="/usr/lib /lib/w32api /lib /usr/local/lib" - ;; - mingw*) - # MinGW DLLs use traditional 'lib' prefix - soname_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' - sys_lib_search_path_spec=`$CC -print-search-dirs | grep "^libraries:" | $SED -e "s/^libraries://" -e "s,=/,/,g"` - if echo "$sys_lib_search_path_spec" | grep ';[c-zC-Z]:/' >/dev/null; then - # It is most probably a Windows format PATH printed by - # mingw gcc, but we are running on Cygwin. Gcc prints its search - # path with ; separators, and with drive letters. We can handle the - # drive letters (cygwin fileutils understands them), so leave them, - # especially as we might pass files found there to a mingw objdump, - # which wouldn't understand a cygwinified path. Ahh. - sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'` - else - sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` - fi - ;; - pw32*) - # pw32 DLLs use 'pw' prefix rather than 'lib' - library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' - ;; - esac - ;; - - *) - library_names_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext} $libname.lib' - ;; - esac - dynamic_linker='Win32 ld.exe' - # FIXME: first we should search . and the directory the executable is in - shlibpath_var=PATH - ;; - -darwin* | rhapsody*) - dynamic_linker="$host_os dyld" - version_type=darwin - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${versuffix}$shared_ext ${libname}${release}${major}$shared_ext ${libname}$shared_ext' - soname_spec='${libname}${release}${major}$shared_ext' - shlibpath_overrides_runpath=yes - shlibpath_var=DYLD_LIBRARY_PATH - shrext_cmds='`test .$module = .yes && echo .so || echo .dylib`' - - sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib' - ;; - -dgux*) - version_type=linux - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname$shared_ext' - soname_spec='${libname}${release}${shared_ext}$major' - shlibpath_var=LD_LIBRARY_PATH - ;; - -freebsd1*) - dynamic_linker=no - ;; - -freebsd* | dragonfly*) - # DragonFly does not have aout. When/if they implement a new - # versioning mechanism, adjust this. - if test -x /usr/bin/objformat; then - objformat=`/usr/bin/objformat` - else - case $host_os in - freebsd[123]*) objformat=aout ;; - *) objformat=elf ;; - esac - fi - version_type=freebsd-$objformat - case $version_type in - freebsd-elf*) - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' - need_version=no - need_lib_prefix=no - ;; - freebsd-*) - library_names_spec='${libname}${release}${shared_ext}$versuffix $libname${shared_ext}$versuffix' - need_version=yes - ;; - esac - shlibpath_var=LD_LIBRARY_PATH - case $host_os in - freebsd2*) - shlibpath_overrides_runpath=yes - ;; - freebsd3.[01]* | freebsdelf3.[01]*) - shlibpath_overrides_runpath=yes - hardcode_into_libs=yes - ;; - freebsd3.[2-9]* | freebsdelf3.[2-9]* | \ - freebsd4.[0-5] | freebsdelf4.[0-5] | freebsd4.1.1 | freebsdelf4.1.1) - shlibpath_overrides_runpath=no - hardcode_into_libs=yes - ;; - *) # from 4.6 on, and DragonFly - shlibpath_overrides_runpath=yes - hardcode_into_libs=yes - ;; - esac - ;; - -gnu*) - version_type=linux - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - shlibpath_var=LD_LIBRARY_PATH - hardcode_into_libs=yes - ;; - -hpux9* | hpux10* | hpux11*) - # Give a soname corresponding to the major version so that dld.sl refuses to - # link against other versions. - version_type=sunos - need_lib_prefix=no - need_version=no - case $host_cpu in - ia64*) - shrext_cmds='.so' - hardcode_into_libs=yes - dynamic_linker="$host_os dld.so" - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - if test "X$HPUX_IA64_MODE" = X32; then - sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib" - else - sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64" - fi - sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec - ;; - hppa*64*) - shrext_cmds='.sl' - hardcode_into_libs=yes - dynamic_linker="$host_os dld.sl" - shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH - shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64" - sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec - ;; - *) - shrext_cmds='.sl' - dynamic_linker="$host_os dld.sl" - shlibpath_var=SHLIB_PATH - shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - ;; - esac - # HP-UX runs *really* slowly unless shared libraries are mode 555. - postinstall_cmds='chmod 555 $lib' - ;; - -interix[3-9]*) - version_type=linux - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - dynamic_linker='Interix 3.x ld.so.1 (PE, like ELF)' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=no - hardcode_into_libs=yes - ;; - -irix5* | irix6* | nonstopux*) - case $host_os in - nonstopux*) version_type=nonstopux ;; - *) - if test "$lt_cv_prog_gnu_ld" = yes; then - version_type=linux - else - version_type=irix - fi ;; - esac - need_lib_prefix=no - need_version=no - soname_spec='${libname}${release}${shared_ext}$major' - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext} $libname${shared_ext}' - case $host_os in - irix5* | nonstopux*) - libsuff= shlibsuff= - ;; - *) - case $LD in # libtool.m4 will add one of these switches to LD - *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ") - libsuff= shlibsuff= libmagic=32-bit;; - *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ") - libsuff=32 shlibsuff=N32 libmagic=N32;; - *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ") - libsuff=64 shlibsuff=64 libmagic=64-bit;; - *) libsuff= shlibsuff= libmagic=never-match;; - esac - ;; - esac - shlibpath_var=LD_LIBRARY${shlibsuff}_PATH - shlibpath_overrides_runpath=no - sys_lib_search_path_spec="/usr/lib${libsuff} /lib${libsuff} /usr/local/lib${libsuff}" - sys_lib_dlsearch_path_spec="/usr/lib${libsuff} /lib${libsuff}" - hardcode_into_libs=yes - ;; - -# No shared lib support for Linux oldld, aout, or coff. -linux*oldld* | linux*aout* | linux*coff*) - dynamic_linker=no - ;; - -# This must be Linux ELF. -linux* | k*bsd*-gnu) - version_type=linux - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=no - # This implies no fast_install, which is unacceptable. - # Some rework will be needed to allow for fast_install - # before this can be enabled. - hardcode_into_libs=yes - sys_lib_search_path_spec="/usr/lib${libsuff} /lib${libsuff} /usr/local/lib${libsuff}" - sys_lib_dlsearch_path_spec="/usr/lib${libsuff} /lib${libsuff}" - - # Append ld.so.conf contents to the search path - if test -f /etc/ld.so.conf; then - lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s 2>/dev/null", \$2)); skip = 1; } { if (!skip) print \$0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;/^[ ]*hwcap[ ]/d;s/[:, ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;/^$/d' | tr '\n' ' '` - sys_lib_dlsearch_path_spec="$sys_lib_dlsearch_path_spec $lt_ld_extra" - fi - - # We used to test for /lib/ld.so.1 and disable shared libraries on - # powerpc, because MkLinux only supported shared libraries with the - # GNU dynamic linker. Since this was broken with cross compilers, - # most powerpc-linux boxes support dynamic linking these days and - # people can always --disable-shared, the test was removed, and we - # assume the GNU/Linux dynamic linker is in use. - dynamic_linker='GNU/Linux ld.so' - ;; - -netbsd*) - version_type=sunos - need_lib_prefix=no - need_version=no - if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' - finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' - dynamic_linker='NetBSD (a.out) ld.so' - else - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - dynamic_linker='NetBSD ld.elf_so' - fi - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=yes - hardcode_into_libs=yes - ;; - -newsos6) - version_type=linux - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=yes - ;; - -nto-qnx*) - version_type=linux - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=yes - ;; - -openbsd*) - version_type=sunos - sys_lib_dlsearch_path_spec="/usr/lib" - need_lib_prefix=no - # Some older versions of OpenBSD (3.3 at least) *do* need versioned libs. - case $host_os in - openbsd3.3 | openbsd3.3.*) need_version=yes ;; - *) need_version=no ;; - esac - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' - finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' - shlibpath_var=LD_LIBRARY_PATH - if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then - case $host_os in - openbsd2.[89] | openbsd2.[89].*) - shlibpath_overrides_runpath=no - ;; - *) - shlibpath_overrides_runpath=yes - ;; - esac - else - shlibpath_overrides_runpath=yes - fi - ;; - -os2*) - libname_spec='$name' - shrext_cmds=".dll" - need_lib_prefix=no - library_names_spec='$libname${shared_ext} $libname.a' - dynamic_linker='OS/2 ld.exe' - shlibpath_var=LIBPATH - ;; - -osf3* | osf4* | osf5*) - version_type=osf - need_lib_prefix=no - need_version=no - soname_spec='${libname}${release}${shared_ext}$major' - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - shlibpath_var=LD_LIBRARY_PATH - sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib" - sys_lib_dlsearch_path_spec="$sys_lib_search_path_spec" - ;; - -rdos*) - dynamic_linker=no - ;; - -solaris*) - version_type=linux - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=yes - hardcode_into_libs=yes - # ldd complains unless libraries are executable - postinstall_cmds='chmod +x $lib' - ;; - -sunos4*) - version_type=sunos - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' - finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=yes - if test "$with_gnu_ld" = yes; then - need_lib_prefix=no - fi - need_version=yes - ;; - -sysv4 | sysv4.3*) - version_type=linux - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - shlibpath_var=LD_LIBRARY_PATH - case $host_vendor in - sni) - shlibpath_overrides_runpath=no - need_lib_prefix=no - export_dynamic_flag_spec='${wl}-Blargedynsym' - runpath_var=LD_RUN_PATH - ;; - siemens) - need_lib_prefix=no - ;; - motorola) - need_lib_prefix=no - need_version=no - shlibpath_overrides_runpath=no - sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib' - ;; - esac - ;; - -sysv4*MP*) - if test -d /usr/nec ;then - version_type=linux - library_names_spec='$libname${shared_ext}.$versuffix $libname${shared_ext}.$major $libname${shared_ext}' - soname_spec='$libname${shared_ext}.$major' - shlibpath_var=LD_LIBRARY_PATH - fi - ;; - -sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) - version_type=freebsd-elf - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - shlibpath_var=LD_LIBRARY_PATH - hardcode_into_libs=yes - if test "$with_gnu_ld" = yes; then - sys_lib_search_path_spec='/usr/local/lib /usr/gnu/lib /usr/ccs/lib /usr/lib /lib' - shlibpath_overrides_runpath=no - else - sys_lib_search_path_spec='/usr/ccs/lib /usr/lib' - shlibpath_overrides_runpath=yes - case $host_os in - sco3.2v5*) - sys_lib_search_path_spec="$sys_lib_search_path_spec /lib" - ;; - esac - fi - sys_lib_dlsearch_path_spec='/usr/lib' - ;; - -uts4*) - version_type=linux - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - shlibpath_var=LD_LIBRARY_PATH - ;; - -*) - dynamic_linker=no - ;; -esac -{ echo "$as_me:$LINENO: result: $dynamic_linker" >&5 -echo "${ECHO_T}$dynamic_linker" >&6; } -test "$dynamic_linker" = no && can_build_shared=no - -variables_saved_for_relink="PATH $shlibpath_var $runpath_var" -if test "$GCC" = yes; then - variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH" -fi - -{ echo "$as_me:$LINENO: checking how to hardcode library paths into programs" >&5 -echo $ECHO_N "checking how to hardcode library paths into programs... $ECHO_C" >&6; } -hardcode_action_CXX= -if test -n "$hardcode_libdir_flag_spec_CXX" || \ - test -n "$runpath_var_CXX" || \ - test "X$hardcode_automatic_CXX" = "Xyes" ; then - - # We can hardcode non-existent directories. - if test "$hardcode_direct_CXX" != no && - # If the only mechanism to avoid hardcoding is shlibpath_var, we - # have to relink, otherwise we might link with an installed library - # when we should be linking with a yet-to-be-installed one - ## test "$_LT_AC_TAGVAR(hardcode_shlibpath_var, CXX)" != no && - test "$hardcode_minus_L_CXX" != no; then - # Linking always hardcodes the temporary library directory. - hardcode_action_CXX=relink - else - # We can link without hardcoding, and we can hardcode nonexisting dirs. - hardcode_action_CXX=immediate - fi -else - # We cannot hardcode anything, or else we can only hardcode existing - # directories. - hardcode_action_CXX=unsupported -fi -{ echo "$as_me:$LINENO: result: $hardcode_action_CXX" >&5 -echo "${ECHO_T}$hardcode_action_CXX" >&6; } - -if test "$hardcode_action_CXX" = relink; then - # Fast installation is not supported - enable_fast_install=no -elif test "$shlibpath_overrides_runpath" = yes || - test "$enable_shared" = no; then - # Fast installation is not necessary - enable_fast_install=needless -fi - - -# The else clause should only fire when bootstrapping the -# libtool distribution, otherwise you forgot to ship ltmain.sh -# with your package, and you will get complaints that there are -# no rules to generate ltmain.sh. -if test -f "$ltmain"; then - # See if we are running on zsh, and set the options which allow our commands through - # without removal of \ escapes. - if test -n "${ZSH_VERSION+set}" ; then - setopt NO_GLOB_SUBST - fi - # Now quote all the things that may contain metacharacters while being - # careful not to overquote the AC_SUBSTed values. We take copies of the - # variables and quote the copies for generation of the libtool script. - for var in echo old_CC old_CFLAGS AR AR_FLAGS EGREP RANLIB LN_S LTCC LTCFLAGS NM \ - SED SHELL STRIP \ - libname_spec library_names_spec soname_spec extract_expsyms_cmds \ - old_striplib striplib file_magic_cmd finish_cmds finish_eval \ - deplibs_check_method reload_flag reload_cmds need_locks \ - lt_cv_sys_global_symbol_pipe lt_cv_sys_global_symbol_to_cdecl \ - lt_cv_sys_global_symbol_to_c_name_address \ - sys_lib_search_path_spec sys_lib_dlsearch_path_spec \ - old_postinstall_cmds old_postuninstall_cmds \ - compiler_CXX \ - CC_CXX \ - LD_CXX \ - lt_prog_compiler_wl_CXX \ - lt_prog_compiler_pic_CXX \ - lt_prog_compiler_static_CXX \ - lt_prog_compiler_no_builtin_flag_CXX \ - export_dynamic_flag_spec_CXX \ - thread_safe_flag_spec_CXX \ - whole_archive_flag_spec_CXX \ - enable_shared_with_static_runtimes_CXX \ - old_archive_cmds_CXX \ - old_archive_from_new_cmds_CXX \ - predep_objects_CXX \ - postdep_objects_CXX \ - predeps_CXX \ - postdeps_CXX \ - compiler_lib_search_path_CXX \ - archive_cmds_CXX \ - archive_expsym_cmds_CXX \ - postinstall_cmds_CXX \ - postuninstall_cmds_CXX \ - old_archive_from_expsyms_cmds_CXX \ - allow_undefined_flag_CXX \ - no_undefined_flag_CXX \ - export_symbols_cmds_CXX \ - hardcode_libdir_flag_spec_CXX \ - hardcode_libdir_flag_spec_ld_CXX \ - hardcode_libdir_separator_CXX \ - hardcode_automatic_CXX \ - module_cmds_CXX \ - module_expsym_cmds_CXX \ - lt_cv_prog_compiler_c_o_CXX \ - fix_srcfile_path_CXX \ - exclude_expsyms_CXX \ - include_expsyms_CXX; do - - case $var in - old_archive_cmds_CXX | \ - old_archive_from_new_cmds_CXX | \ - archive_cmds_CXX | \ - archive_expsym_cmds_CXX | \ - module_cmds_CXX | \ - module_expsym_cmds_CXX | \ - old_archive_from_expsyms_cmds_CXX | \ - export_symbols_cmds_CXX | \ - extract_expsyms_cmds | reload_cmds | finish_cmds | \ - postinstall_cmds | postuninstall_cmds | \ - old_postinstall_cmds | old_postuninstall_cmds | \ - sys_lib_search_path_spec | sys_lib_dlsearch_path_spec) - # Double-quote double-evaled strings. - eval "lt_$var=\\\"\`\$echo \"X\$$var\" | \$Xsed -e \"\$double_quote_subst\" -e \"\$sed_quote_subst\" -e \"\$delay_variable_subst\"\`\\\"" - ;; - *) - eval "lt_$var=\\\"\`\$echo \"X\$$var\" | \$Xsed -e \"\$sed_quote_subst\"\`\\\"" - ;; - esac - done - - case $lt_echo in - *'\$0 --fallback-echo"') - lt_echo=`$echo "X$lt_echo" | $Xsed -e 's/\\\\\\\$0 --fallback-echo"$/$0 --fallback-echo"/'` - ;; - esac - -cfgfile="$ofile" - - cat <<__EOF__ >> "$cfgfile" -# ### BEGIN LIBTOOL TAG CONFIG: $tagname - -# Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`: - -# Shell to use when invoking shell scripts. -SHELL=$lt_SHELL - -# Whether or not to build shared libraries. -build_libtool_libs=$enable_shared - -# Whether or not to build static libraries. -build_old_libs=$enable_static - -# Whether or not to add -lc for building shared libraries. -build_libtool_need_lc=$archive_cmds_need_lc_CXX - -# Whether or not to disallow shared libs when runtime libs are static -allow_libtool_libs_with_static_runtimes=$enable_shared_with_static_runtimes_CXX - -# Whether or not to optimize for fast installation. -fast_install=$enable_fast_install - -# The host system. -host_alias=$host_alias -host=$host -host_os=$host_os - -# The build system. -build_alias=$build_alias -build=$build -build_os=$build_os - -# An echo program that does not interpret backslashes. -echo=$lt_echo - -# The archiver. -AR=$lt_AR -AR_FLAGS=$lt_AR_FLAGS - -# A C compiler. -LTCC=$lt_LTCC - -# LTCC compiler flags. -LTCFLAGS=$lt_LTCFLAGS - -# A language-specific compiler. -CC=$lt_compiler_CXX - -# Is the compiler the GNU C compiler? -with_gcc=$GCC_CXX - -# An ERE matcher. -EGREP=$lt_EGREP - -# The linker used to build libraries. -LD=$lt_LD_CXX - -# Whether we need hard or soft links. -LN_S=$lt_LN_S - -# A BSD-compatible nm program. -NM=$lt_NM - -# A symbol stripping program -STRIP=$lt_STRIP - -# Used to examine libraries when file_magic_cmd begins "file" -MAGIC_CMD=$MAGIC_CMD - -# Used on cygwin: DLL creation program. -DLLTOOL="$DLLTOOL" - -# Used on cygwin: object dumper. -OBJDUMP="$OBJDUMP" - -# Used on cygwin: assembler. -AS="$AS" - -# The name of the directory that contains temporary libtool files. -objdir=$objdir - -# How to create reloadable object files. -reload_flag=$lt_reload_flag -reload_cmds=$lt_reload_cmds - -# How to pass a linker flag through the compiler. -wl=$lt_lt_prog_compiler_wl_CXX - -# Object file suffix (normally "o"). -objext="$ac_objext" - -# Old archive suffix (normally "a"). -libext="$libext" - -# Shared library suffix (normally ".so"). -shrext_cmds='$shrext_cmds' - -# Executable file suffix (normally ""). -exeext="$exeext" - -# Additional compiler flags for building library objects. -pic_flag=$lt_lt_prog_compiler_pic_CXX -pic_mode=$pic_mode - -# What is the maximum length of a command? -max_cmd_len=$lt_cv_sys_max_cmd_len - -# Does compiler simultaneously support -c and -o options? -compiler_c_o=$lt_lt_cv_prog_compiler_c_o_CXX - -# Must we lock files when doing compilation? -need_locks=$lt_need_locks - -# Do we need the lib prefix for modules? -need_lib_prefix=$need_lib_prefix - -# Do we need a version for libraries? -need_version=$need_version - -# Whether dlopen is supported. -dlopen_support=$enable_dlopen - -# Whether dlopen of programs is supported. -dlopen_self=$enable_dlopen_self - -# Whether dlopen of statically linked programs is supported. -dlopen_self_static=$enable_dlopen_self_static - -# Compiler flag to prevent dynamic linking. -link_static_flag=$lt_lt_prog_compiler_static_CXX - -# Compiler flag to turn off builtin functions. -no_builtin_flag=$lt_lt_prog_compiler_no_builtin_flag_CXX - -# Compiler flag to allow reflexive dlopens. -export_dynamic_flag_spec=$lt_export_dynamic_flag_spec_CXX - -# Compiler flag to generate shared objects directly from archives. -whole_archive_flag_spec=$lt_whole_archive_flag_spec_CXX - -# Compiler flag to generate thread-safe objects. -thread_safe_flag_spec=$lt_thread_safe_flag_spec_CXX - -# Library versioning type. -version_type=$version_type - -# Format of library name prefix. -libname_spec=$lt_libname_spec - -# List of archive names. First name is the real one, the rest are links. -# The last name is the one that the linker finds with -lNAME. -library_names_spec=$lt_library_names_spec - -# The coded name of the library, if different from the real name. -soname_spec=$lt_soname_spec - -# Commands used to build and install an old-style archive. -RANLIB=$lt_RANLIB -old_archive_cmds=$lt_old_archive_cmds_CXX -old_postinstall_cmds=$lt_old_postinstall_cmds -old_postuninstall_cmds=$lt_old_postuninstall_cmds - -# Create an old-style archive from a shared archive. -old_archive_from_new_cmds=$lt_old_archive_from_new_cmds_CXX - -# Create a temporary old-style archive to link instead of a shared archive. -old_archive_from_expsyms_cmds=$lt_old_archive_from_expsyms_cmds_CXX - -# Commands used to build and install a shared archive. -archive_cmds=$lt_archive_cmds_CXX -archive_expsym_cmds=$lt_archive_expsym_cmds_CXX -postinstall_cmds=$lt_postinstall_cmds -postuninstall_cmds=$lt_postuninstall_cmds - -# Commands used to build a loadable module (assumed same as above if empty) -module_cmds=$lt_module_cmds_CXX -module_expsym_cmds=$lt_module_expsym_cmds_CXX - -# Commands to strip libraries. -old_striplib=$lt_old_striplib -striplib=$lt_striplib - -# Dependencies to place before the objects being linked to create a -# shared library. -predep_objects=$lt_predep_objects_CXX - -# Dependencies to place after the objects being linked to create a -# shared library. -postdep_objects=$lt_postdep_objects_CXX - -# Dependencies to place before the objects being linked to create a -# shared library. -predeps=$lt_predeps_CXX - -# Dependencies to place after the objects being linked to create a -# shared library. -postdeps=$lt_postdeps_CXX - -# The library search path used internally by the compiler when linking -# a shared library. -compiler_lib_search_path=$lt_compiler_lib_search_path_CXX - -# Method to check whether dependent libraries are shared objects. -deplibs_check_method=$lt_deplibs_check_method - -# Command to use when deplibs_check_method == file_magic. -file_magic_cmd=$lt_file_magic_cmd - -# Flag that allows shared libraries with undefined symbols to be built. -allow_undefined_flag=$lt_allow_undefined_flag_CXX - -# Flag that forces no undefined symbols. -no_undefined_flag=$lt_no_undefined_flag_CXX - -# Commands used to finish a libtool library installation in a directory. -finish_cmds=$lt_finish_cmds - -# Same as above, but a single script fragment to be evaled but not shown. -finish_eval=$lt_finish_eval - -# Take the output of nm and produce a listing of raw symbols and C names. -global_symbol_pipe=$lt_lt_cv_sys_global_symbol_pipe - -# Transform the output of nm in a proper C declaration -global_symbol_to_cdecl=$lt_lt_cv_sys_global_symbol_to_cdecl - -# Transform the output of nm in a C name address pair -global_symbol_to_c_name_address=$lt_lt_cv_sys_global_symbol_to_c_name_address - -# This is the shared library runtime path variable. -runpath_var=$runpath_var - -# This is the shared library path variable. -shlibpath_var=$shlibpath_var - -# Is shlibpath searched before the hard-coded library search path? -shlibpath_overrides_runpath=$shlibpath_overrides_runpath - -# How to hardcode a shared library path into an executable. -hardcode_action=$hardcode_action_CXX - -# Whether we should hardcode library paths into libraries. -hardcode_into_libs=$hardcode_into_libs - -# Flag to hardcode \$libdir into a binary during linking. -# This must work even if \$libdir does not exist. -hardcode_libdir_flag_spec=$lt_hardcode_libdir_flag_spec_CXX - -# If ld is used when linking, flag to hardcode \$libdir into -# a binary during linking. This must work even if \$libdir does -# not exist. -hardcode_libdir_flag_spec_ld=$lt_hardcode_libdir_flag_spec_ld_CXX - -# Whether we need a single -rpath flag with a separated argument. -hardcode_libdir_separator=$lt_hardcode_libdir_separator_CXX - -# Set to yes if using DIR/libNAME${shared_ext} during linking hardcodes DIR into the -# resulting binary. -hardcode_direct=$hardcode_direct_CXX - -# Set to yes if using the -LDIR flag during linking hardcodes DIR into the -# resulting binary. -hardcode_minus_L=$hardcode_minus_L_CXX - -# Set to yes if using SHLIBPATH_VAR=DIR during linking hardcodes DIR into -# the resulting binary. -hardcode_shlibpath_var=$hardcode_shlibpath_var_CXX - -# Set to yes if building a shared library automatically hardcodes DIR into the library -# and all subsequent libraries and executables linked against it. -hardcode_automatic=$hardcode_automatic_CXX - -# Variables whose values should be saved in libtool wrapper scripts and -# restored at relink time. -variables_saved_for_relink="$variables_saved_for_relink" - -# Whether libtool must link a program against all its dependency libraries. -link_all_deplibs=$link_all_deplibs_CXX - -# Compile-time system search path for libraries -sys_lib_search_path_spec=$lt_sys_lib_search_path_spec - -# Run-time system search path for libraries -sys_lib_dlsearch_path_spec=$lt_sys_lib_dlsearch_path_spec - -# Fix the shell variable \$srcfile for the compiler. -fix_srcfile_path=$lt_fix_srcfile_path - -# Set to yes if exported symbols are required. -always_export_symbols=$always_export_symbols_CXX - -# The commands to list exported symbols. -export_symbols_cmds=$lt_export_symbols_cmds_CXX - -# The commands to extract the exported symbol list from a shared archive. -extract_expsyms_cmds=$lt_extract_expsyms_cmds - -# Symbols that should not be listed in the preloaded symbols. -exclude_expsyms=$lt_exclude_expsyms_CXX - -# Symbols that must always be exported. -include_expsyms=$lt_include_expsyms_CXX - -# ### END LIBTOOL TAG CONFIG: $tagname - -__EOF__ - - -else - # If there is no Makefile yet, we rely on a make rule to execute - # `config.status --recheck' to rerun these tests and create the - # libtool script then. - ltmain_in=`echo $ltmain | sed -e 's/\.sh$/.in/'` - if test -f "$ltmain_in"; then - test -f Makefile && make "$ltmain" - fi -fi - - -ac_ext=c -ac_cpp='$CPP $CPPFLAGS' -ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_c_compiler_gnu - -CC=$lt_save_CC -LDCXX=$LD -LD=$lt_save_LD -GCC=$lt_save_GCC -with_gnu_ldcxx=$with_gnu_ld -with_gnu_ld=$lt_save_with_gnu_ld -lt_cv_path_LDCXX=$lt_cv_path_LD -lt_cv_path_LD=$lt_save_path_LD -lt_cv_prog_gnu_ldcxx=$lt_cv_prog_gnu_ld -lt_cv_prog_gnu_ld=$lt_save_with_gnu_ld - - else - tagname="" - fi - ;; - - F77) - if test -n "$F77" && test "X$F77" != "Xno"; then - -ac_ext=f -ac_compile='$F77 -c $FFLAGS conftest.$ac_ext >&5' -ac_link='$F77 -o conftest$ac_exeext $FFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_f77_compiler_gnu - - -archive_cmds_need_lc_F77=no -allow_undefined_flag_F77= -always_export_symbols_F77=no -archive_expsym_cmds_F77= -export_dynamic_flag_spec_F77= -hardcode_direct_F77=no -hardcode_libdir_flag_spec_F77= -hardcode_libdir_flag_spec_ld_F77= -hardcode_libdir_separator_F77= -hardcode_minus_L_F77=no -hardcode_automatic_F77=no -module_cmds_F77= -module_expsym_cmds_F77= -link_all_deplibs_F77=unknown -old_archive_cmds_F77=$old_archive_cmds -no_undefined_flag_F77= -whole_archive_flag_spec_F77= -enable_shared_with_static_runtimes_F77=no - -# Source file extension for f77 test sources. -ac_ext=f - -# Object file extension for compiled f77 test sources. -objext=o -objext_F77=$objext - -# Code to be used in simple compile tests -lt_simple_compile_test_code="\ - subroutine t - return - end -" - -# Code to be used in simple link tests -lt_simple_link_test_code="\ - program t - end -" - -# ltmain only uses $CC for tagged configurations so make sure $CC is set. - -# If no C compiler was specified, use CC. -LTCC=${LTCC-"$CC"} - -# If no C compiler flags were specified, use CFLAGS. -LTCFLAGS=${LTCFLAGS-"$CFLAGS"} - -# Allow CC to be a program name with arguments. -compiler=$CC - - -# save warnings/boilerplate of simple test code -ac_outfile=conftest.$ac_objext -echo "$lt_simple_compile_test_code" >conftest.$ac_ext -eval "$ac_compile" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err -_lt_compiler_boilerplate=`cat conftest.err` -$rm conftest* - -ac_outfile=conftest.$ac_objext -echo "$lt_simple_link_test_code" >conftest.$ac_ext -eval "$ac_link" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err -_lt_linker_boilerplate=`cat conftest.err` -$rm conftest* - - -# Allow CC to be a program name with arguments. -lt_save_CC="$CC" -CC=${F77-"f77"} -compiler=$CC -compiler_F77=$CC -for cc_temp in $compiler""; do - case $cc_temp in - compile | *[\\/]compile | ccache | *[\\/]ccache ) ;; - distcc | *[\\/]distcc | purify | *[\\/]purify ) ;; - \-*) ;; - *) break;; - esac -done -cc_basename=`$echo "X$cc_temp" | $Xsed -e 's%.*/%%' -e "s%^$host_alias-%%"` - - -{ echo "$as_me:$LINENO: checking if libtool supports shared libraries" >&5 -echo $ECHO_N "checking if libtool supports shared libraries... $ECHO_C" >&6; } -{ echo "$as_me:$LINENO: result: $can_build_shared" >&5 -echo "${ECHO_T}$can_build_shared" >&6; } - -{ echo "$as_me:$LINENO: checking whether to build shared libraries" >&5 -echo $ECHO_N "checking whether to build shared libraries... $ECHO_C" >&6; } -test "$can_build_shared" = "no" && enable_shared=no - -# On AIX, shared libraries and static libraries use the same namespace, and -# are all built from PIC. -case $host_os in -aix3*) - test "$enable_shared" = yes && enable_static=no - if test -n "$RANLIB"; then - archive_cmds="$archive_cmds~\$RANLIB \$lib" - postinstall_cmds='$RANLIB $lib' - fi - ;; -aix4* | aix5*) - if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then - test "$enable_shared" = yes && enable_static=no - fi - ;; -esac -{ echo "$as_me:$LINENO: result: $enable_shared" >&5 -echo "${ECHO_T}$enable_shared" >&6; } - -{ echo "$as_me:$LINENO: checking whether to build static libraries" >&5 -echo $ECHO_N "checking whether to build static libraries... $ECHO_C" >&6; } -# Make sure either enable_shared or enable_static is yes. -test "$enable_shared" = yes || enable_static=yes -{ echo "$as_me:$LINENO: result: $enable_static" >&5 -echo "${ECHO_T}$enable_static" >&6; } - -GCC_F77="$G77" -LD_F77="$LD" - -lt_prog_compiler_wl_F77= -lt_prog_compiler_pic_F77= -lt_prog_compiler_static_F77= - -{ echo "$as_me:$LINENO: checking for $compiler option to produce PIC" >&5 -echo $ECHO_N "checking for $compiler option to produce PIC... $ECHO_C" >&6; } - - if test "$GCC" = yes; then - lt_prog_compiler_wl_F77='-Wl,' - lt_prog_compiler_static_F77='-static' - - case $host_os in - aix*) - # All AIX code is PIC. - if test "$host_cpu" = ia64; then - # AIX 5 now supports IA64 processor - lt_prog_compiler_static_F77='-Bstatic' - fi - ;; - - amigaos*) - # FIXME: we need at least 68020 code to build shared libraries, but - # adding the `-m68020' flag to GCC prevents building anything better, - # like `-m68040'. - lt_prog_compiler_pic_F77='-m68020 -resident32 -malways-restore-a4' - ;; - - beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) - # PIC is the default for these OSes. - ;; - - mingw* | cygwin* | pw32* | os2*) - # This hack is so that the source file can tell whether it is being - # built for inclusion in a dll (and should export symbols for example). - # Although the cygwin gcc ignores -fPIC, still need this for old-style - # (--disable-auto-import) libraries - lt_prog_compiler_pic_F77='-DDLL_EXPORT' - ;; - - darwin* | rhapsody*) - # PIC is the default on this platform - # Common symbols not allowed in MH_DYLIB files - lt_prog_compiler_pic_F77='-fno-common' - ;; - - interix[3-9]*) - # Interix 3.x gcc -fpic/-fPIC options generate broken code. - # Instead, we relocate shared libraries at runtime. - ;; - - msdosdjgpp*) - # Just because we use GCC doesn't mean we suddenly get shared libraries - # on systems that don't support them. - lt_prog_compiler_can_build_shared_F77=no - enable_shared=no - ;; - - sysv4*MP*) - if test -d /usr/nec; then - lt_prog_compiler_pic_F77=-Kconform_pic - fi - ;; - - hpux*) - # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but - # not for PA HP-UX. - case $host_cpu in - hppa*64*|ia64*) - # +Z the default - ;; - *) - lt_prog_compiler_pic_F77='-fPIC' - ;; - esac - ;; - - *) - lt_prog_compiler_pic_F77='-fPIC' - ;; - esac - else - # PORTME Check for flag to pass linker flags through the system compiler. - case $host_os in - aix*) - lt_prog_compiler_wl_F77='-Wl,' - if test "$host_cpu" = ia64; then - # AIX 5 now supports IA64 processor - lt_prog_compiler_static_F77='-Bstatic' - else - lt_prog_compiler_static_F77='-bnso -bI:/lib/syscalls.exp' - fi - ;; - darwin*) - # PIC is the default on this platform - # Common symbols not allowed in MH_DYLIB files - case $cc_basename in - xlc*) - lt_prog_compiler_pic_F77='-qnocommon' - lt_prog_compiler_wl_F77='-Wl,' - ;; - esac - ;; - - mingw* | cygwin* | pw32* | os2*) - # This hack is so that the source file can tell whether it is being - # built for inclusion in a dll (and should export symbols for example). - lt_prog_compiler_pic_F77='-DDLL_EXPORT' - ;; - - hpux9* | hpux10* | hpux11*) - lt_prog_compiler_wl_F77='-Wl,' - # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but - # not for PA HP-UX. - case $host_cpu in - hppa*64*|ia64*) - # +Z the default - ;; - *) - lt_prog_compiler_pic_F77='+Z' - ;; - esac - # Is there a better lt_prog_compiler_static that works with the bundled CC? - lt_prog_compiler_static_F77='${wl}-a ${wl}archive' - ;; - - irix5* | irix6* | nonstopux*) - lt_prog_compiler_wl_F77='-Wl,' - # PIC (with -KPIC) is the default. - lt_prog_compiler_static_F77='-non_shared' - ;; - - newsos6) - lt_prog_compiler_pic_F77='-KPIC' - lt_prog_compiler_static_F77='-Bstatic' - ;; - - linux* | k*bsd*-gnu) - case $cc_basename in - icc* | ecc*) - lt_prog_compiler_wl_F77='-Wl,' - lt_prog_compiler_pic_F77='-KPIC' - lt_prog_compiler_static_F77='-static' - ;; - pgcc* | pgf77* | pgf90* | pgf95*) - # Portland Group compilers (*not* the Pentium gcc compiler, - # which looks to be a dead project) - lt_prog_compiler_wl_F77='-Wl,' - lt_prog_compiler_pic_F77='-fpic' - lt_prog_compiler_static_F77='-Bstatic' - ;; - ccc*) - lt_prog_compiler_wl_F77='-Wl,' - # All Alpha code is PIC. - lt_prog_compiler_static_F77='-non_shared' - ;; - *) - case `$CC -V 2>&1 | sed 5q` in - *Sun\ C*) - # Sun C 5.9 - lt_prog_compiler_pic_F77='-KPIC' - lt_prog_compiler_static_F77='-Bstatic' - lt_prog_compiler_wl_F77='-Wl,' - ;; - *Sun\ F*) - # Sun Fortran 8.3 passes all unrecognized flags to the linker - lt_prog_compiler_pic_F77='-KPIC' - lt_prog_compiler_static_F77='-Bstatic' - lt_prog_compiler_wl_F77='' - ;; - esac - ;; - esac - ;; - - osf3* | osf4* | osf5*) - lt_prog_compiler_wl_F77='-Wl,' - # All OSF/1 code is PIC. - lt_prog_compiler_static_F77='-non_shared' - ;; - - rdos*) - lt_prog_compiler_static_F77='-non_shared' - ;; - - solaris*) - lt_prog_compiler_pic_F77='-KPIC' - lt_prog_compiler_static_F77='-Bstatic' - case $cc_basename in - f77* | f90* | f95*) - lt_prog_compiler_wl_F77='-Qoption ld ';; - *) - lt_prog_compiler_wl_F77='-Wl,';; - esac - ;; - - sunos4*) - lt_prog_compiler_wl_F77='-Qoption ld ' - lt_prog_compiler_pic_F77='-PIC' - lt_prog_compiler_static_F77='-Bstatic' - ;; - - sysv4 | sysv4.2uw2* | sysv4.3*) - lt_prog_compiler_wl_F77='-Wl,' - lt_prog_compiler_pic_F77='-KPIC' - lt_prog_compiler_static_F77='-Bstatic' - ;; - - sysv4*MP*) - if test -d /usr/nec ;then - lt_prog_compiler_pic_F77='-Kconform_pic' - lt_prog_compiler_static_F77='-Bstatic' - fi - ;; - - sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*) - lt_prog_compiler_wl_F77='-Wl,' - lt_prog_compiler_pic_F77='-KPIC' - lt_prog_compiler_static_F77='-Bstatic' - ;; - - unicos*) - lt_prog_compiler_wl_F77='-Wl,' - lt_prog_compiler_can_build_shared_F77=no - ;; - - uts4*) - lt_prog_compiler_pic_F77='-pic' - lt_prog_compiler_static_F77='-Bstatic' - ;; - - *) - lt_prog_compiler_can_build_shared_F77=no - ;; - esac - fi - -{ echo "$as_me:$LINENO: result: $lt_prog_compiler_pic_F77" >&5 -echo "${ECHO_T}$lt_prog_compiler_pic_F77" >&6; } - -# -# Check to make sure the PIC flag actually works. -# -if test -n "$lt_prog_compiler_pic_F77"; then - -{ echo "$as_me:$LINENO: checking if $compiler PIC flag $lt_prog_compiler_pic_F77 works" >&5 -echo $ECHO_N "checking if $compiler PIC flag $lt_prog_compiler_pic_F77 works... $ECHO_C" >&6; } -if test "${lt_prog_compiler_pic_works_F77+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - lt_prog_compiler_pic_works_F77=no - ac_outfile=conftest.$ac_objext - echo "$lt_simple_compile_test_code" > conftest.$ac_ext - lt_compiler_flag="$lt_prog_compiler_pic_F77" - # Insert the option either (1) after the last *FLAGS variable, or - # (2) before a word containing "conftest.", or (3) at the end. - # Note that $ac_compile itself does not contain backslashes and begins - # with a dollar sign (not a hyphen), so the echo should work correctly. - # The option is referenced via a variable to avoid confusing sed. - lt_compile=`echo "$ac_compile" | $SED \ - -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ - -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ - -e 's:$: $lt_compiler_flag:'` - (eval echo "\"\$as_me:14369: $lt_compile\"" >&5) - (eval "$lt_compile" 2>conftest.err) - ac_status=$? - cat conftest.err >&5 - echo "$as_me:14373: \$? = $ac_status" >&5 - if (exit $ac_status) && test -s "$ac_outfile"; then - # The compiler can only warn and ignore the option if not recognized - # So say no if there are warnings other than the usual output. - $echo "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' >conftest.exp - $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 - if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then - lt_prog_compiler_pic_works_F77=yes - fi - fi - $rm conftest* - -fi -{ echo "$as_me:$LINENO: result: $lt_prog_compiler_pic_works_F77" >&5 -echo "${ECHO_T}$lt_prog_compiler_pic_works_F77" >&6; } - -if test x"$lt_prog_compiler_pic_works_F77" = xyes; then - case $lt_prog_compiler_pic_F77 in - "" | " "*) ;; - *) lt_prog_compiler_pic_F77=" $lt_prog_compiler_pic_F77" ;; - esac -else - lt_prog_compiler_pic_F77= - lt_prog_compiler_can_build_shared_F77=no -fi - -fi -case $host_os in - # For platforms which do not support PIC, -DPIC is meaningless: - *djgpp*) - lt_prog_compiler_pic_F77= - ;; - *) - lt_prog_compiler_pic_F77="$lt_prog_compiler_pic_F77" - ;; -esac - -# -# Check to make sure the static flag actually works. -# -wl=$lt_prog_compiler_wl_F77 eval lt_tmp_static_flag=\"$lt_prog_compiler_static_F77\" -{ echo "$as_me:$LINENO: checking if $compiler static flag $lt_tmp_static_flag works" >&5 -echo $ECHO_N "checking if $compiler static flag $lt_tmp_static_flag works... $ECHO_C" >&6; } -if test "${lt_prog_compiler_static_works_F77+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - lt_prog_compiler_static_works_F77=no - save_LDFLAGS="$LDFLAGS" - LDFLAGS="$LDFLAGS $lt_tmp_static_flag" - echo "$lt_simple_link_test_code" > conftest.$ac_ext - if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then - # The linker can only warn and ignore the option if not recognized - # So say no if there are warnings - if test -s conftest.err; then - # Append any errors to the config.log. - cat conftest.err 1>&5 - $echo "X$_lt_linker_boilerplate" | $Xsed -e '/^$/d' > conftest.exp - $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 - if diff conftest.exp conftest.er2 >/dev/null; then - lt_prog_compiler_static_works_F77=yes - fi - else - lt_prog_compiler_static_works_F77=yes - fi - fi - $rm conftest* - LDFLAGS="$save_LDFLAGS" - -fi -{ echo "$as_me:$LINENO: result: $lt_prog_compiler_static_works_F77" >&5 -echo "${ECHO_T}$lt_prog_compiler_static_works_F77" >&6; } - -if test x"$lt_prog_compiler_static_works_F77" = xyes; then - : -else - lt_prog_compiler_static_F77= -fi - - -{ echo "$as_me:$LINENO: checking if $compiler supports -c -o file.$ac_objext" >&5 -echo $ECHO_N "checking if $compiler supports -c -o file.$ac_objext... $ECHO_C" >&6; } -if test "${lt_cv_prog_compiler_c_o_F77+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - lt_cv_prog_compiler_c_o_F77=no - $rm -r conftest 2>/dev/null - mkdir conftest - cd conftest - mkdir out - echo "$lt_simple_compile_test_code" > conftest.$ac_ext - - lt_compiler_flag="-o out/conftest2.$ac_objext" - # Insert the option either (1) after the last *FLAGS variable, or - # (2) before a word containing "conftest.", or (3) at the end. - # Note that $ac_compile itself does not contain backslashes and begins - # with a dollar sign (not a hyphen), so the echo should work correctly. - lt_compile=`echo "$ac_compile" | $SED \ - -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ - -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ - -e 's:$: $lt_compiler_flag:'` - (eval echo "\"\$as_me:14473: $lt_compile\"" >&5) - (eval "$lt_compile" 2>out/conftest.err) - ac_status=$? - cat out/conftest.err >&5 - echo "$as_me:14477: \$? = $ac_status" >&5 - if (exit $ac_status) && test -s out/conftest2.$ac_objext - then - # The compiler can only warn and ignore the option if not recognized - # So say no if there are warnings - $echo "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' > out/conftest.exp - $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2 - if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then - lt_cv_prog_compiler_c_o_F77=yes - fi - fi - chmod u+w . 2>&5 - $rm conftest* - # SGI C++ compiler will create directory out/ii_files/ for - # template instantiation - test -d out/ii_files && $rm out/ii_files/* && rmdir out/ii_files - $rm out/* && rmdir out - cd .. - rmdir conftest - $rm conftest* - -fi -{ echo "$as_me:$LINENO: result: $lt_cv_prog_compiler_c_o_F77" >&5 -echo "${ECHO_T}$lt_cv_prog_compiler_c_o_F77" >&6; } - - -hard_links="nottested" -if test "$lt_cv_prog_compiler_c_o_F77" = no && test "$need_locks" != no; then - # do not overwrite the value of need_locks provided by the user - { echo "$as_me:$LINENO: checking if we can lock with hard links" >&5 -echo $ECHO_N "checking if we can lock with hard links... $ECHO_C" >&6; } - hard_links=yes - $rm conftest* - ln conftest.a conftest.b 2>/dev/null && hard_links=no - touch conftest.a - ln conftest.a conftest.b 2>&5 || hard_links=no - ln conftest.a conftest.b 2>/dev/null && hard_links=no - { echo "$as_me:$LINENO: result: $hard_links" >&5 -echo "${ECHO_T}$hard_links" >&6; } - if test "$hard_links" = no; then - { echo "$as_me:$LINENO: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&5 -echo "$as_me: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&2;} - need_locks=warn - fi -else - need_locks=no -fi - -{ echo "$as_me:$LINENO: checking whether the $compiler linker ($LD) supports shared libraries" >&5 -echo $ECHO_N "checking whether the $compiler linker ($LD) supports shared libraries... $ECHO_C" >&6; } - - runpath_var= - allow_undefined_flag_F77= - enable_shared_with_static_runtimes_F77=no - archive_cmds_F77= - archive_expsym_cmds_F77= - old_archive_From_new_cmds_F77= - old_archive_from_expsyms_cmds_F77= - export_dynamic_flag_spec_F77= - whole_archive_flag_spec_F77= - thread_safe_flag_spec_F77= - hardcode_libdir_flag_spec_F77= - hardcode_libdir_flag_spec_ld_F77= - hardcode_libdir_separator_F77= - hardcode_direct_F77=no - hardcode_minus_L_F77=no - hardcode_shlibpath_var_F77=unsupported - link_all_deplibs_F77=unknown - hardcode_automatic_F77=no - module_cmds_F77= - module_expsym_cmds_F77= - always_export_symbols_F77=no - export_symbols_cmds_F77='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' - # include_expsyms should be a list of space-separated symbols to be *always* - # included in the symbol list - include_expsyms_F77= - # exclude_expsyms can be an extended regexp of symbols to exclude - # it will be wrapped by ` (' and `)$', so one must not match beginning or - # end of line. Example: `a|bc|.*d.*' will exclude the symbols `a' and `bc', - # as well as any symbol that contains `d'. - exclude_expsyms_F77="_GLOBAL_OFFSET_TABLE_" - # Although _GLOBAL_OFFSET_TABLE_ is a valid symbol C name, most a.out - # platforms (ab)use it in PIC code, but their linkers get confused if - # the symbol is explicitly referenced. Since portable code cannot - # rely on this symbol name, it's probably fine to never include it in - # preloaded symbol tables. - extract_expsyms_cmds= - # Just being paranoid about ensuring that cc_basename is set. - for cc_temp in $compiler""; do - case $cc_temp in - compile | *[\\/]compile | ccache | *[\\/]ccache ) ;; - distcc | *[\\/]distcc | purify | *[\\/]purify ) ;; - \-*) ;; - *) break;; - esac -done -cc_basename=`$echo "X$cc_temp" | $Xsed -e 's%.*/%%' -e "s%^$host_alias-%%"` - - case $host_os in - cygwin* | mingw* | pw32*) - # FIXME: the MSVC++ port hasn't been tested in a loooong time - # When not using gcc, we currently assume that we are using - # Microsoft Visual C++. - if test "$GCC" != yes; then - with_gnu_ld=no - fi - ;; - interix*) - # we just hope/assume this is gcc and not c89 (= MSVC++) - with_gnu_ld=yes - ;; - openbsd*) - with_gnu_ld=no - ;; - esac - - ld_shlibs_F77=yes - if test "$with_gnu_ld" = yes; then - # If archive_cmds runs LD, not CC, wlarc should be empty - wlarc='${wl}' - - # Set some defaults for GNU ld with shared library support. These - # are reset later if shared libraries are not supported. Putting them - # here allows them to be overridden if necessary. - runpath_var=LD_RUN_PATH - hardcode_libdir_flag_spec_F77='${wl}--rpath ${wl}$libdir' - export_dynamic_flag_spec_F77='${wl}--export-dynamic' - # ancient GNU ld didn't support --whole-archive et. al. - if $LD --help 2>&1 | grep 'no-whole-archive' > /dev/null; then - whole_archive_flag_spec_F77="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' - else - whole_archive_flag_spec_F77= - fi - supports_anon_versioning=no - case `$LD -v 2>/dev/null` in - *\ [01].* | *\ 2.[0-9].* | *\ 2.10.*) ;; # catch versions < 2.11 - *\ 2.11.93.0.2\ *) supports_anon_versioning=yes ;; # RH7.3 ... - *\ 2.11.92.0.12\ *) supports_anon_versioning=yes ;; # Mandrake 8.2 ... - *\ 2.11.*) ;; # other 2.11 versions - *) supports_anon_versioning=yes ;; - esac - - # See if GNU ld supports shared libraries. - case $host_os in - aix3* | aix4* | aix5*) - # On AIX/PPC, the GNU linker is very broken - if test "$host_cpu" != ia64; then - ld_shlibs_F77=no - cat <&2 - -*** Warning: the GNU linker, at least up to release 2.9.1, is reported -*** to be unable to reliably create shared libraries on AIX. -*** Therefore, libtool is disabling shared libraries support. If you -*** really care for shared libraries, you may want to modify your PATH -*** so that a non-GNU linker is found, and then restart. - -EOF - fi - ;; - - amigaos*) - archive_cmds_F77='$rm $output_objdir/a2ixlibrary.data~$echo "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$echo "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$echo "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$echo "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' - hardcode_libdir_flag_spec_F77='-L$libdir' - hardcode_minus_L_F77=yes - - # Samuel A. Falvo II reports - # that the semantics of dynamic libraries on AmigaOS, at least up - # to version 4, is to share data among multiple programs linked - # with the same dynamic library. Since this doesn't match the - # behavior of shared libraries on other platforms, we can't use - # them. - ld_shlibs_F77=no - ;; - - beos*) - if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then - allow_undefined_flag_F77=unsupported - # Joseph Beckenbach says some releases of gcc - # support --undefined. This deserves some investigation. FIXME - archive_cmds_F77='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' - else - ld_shlibs_F77=no - fi - ;; - - cygwin* | mingw* | pw32*) - # _LT_AC_TAGVAR(hardcode_libdir_flag_spec, F77) is actually meaningless, - # as there is no search path for DLLs. - hardcode_libdir_flag_spec_F77='-L$libdir' - allow_undefined_flag_F77=unsupported - always_export_symbols_F77=no - enable_shared_with_static_runtimes_F77=yes - export_symbols_cmds_F77='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS][ ]/s/.*[ ]\([^ ]*\)/\1 DATA/'\'' -e '\''/^[AITW][ ]/s/.*[ ]//'\'' | sort | uniq > $export_symbols' - - if $LD --help 2>&1 | grep 'auto-import' > /dev/null; then - archive_cmds_F77='$CC -shared $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' - # If the export-symbols file already is a .def file (1st line - # is EXPORTS), use it as is; otherwise, prepend... - archive_expsym_cmds_F77='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then - cp $export_symbols $output_objdir/$soname.def; - else - echo EXPORTS > $output_objdir/$soname.def; - cat $export_symbols >> $output_objdir/$soname.def; - fi~ - $CC -shared $output_objdir/$soname.def $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' - else - ld_shlibs_F77=no - fi - ;; - - interix[3-9]*) - hardcode_direct_F77=no - hardcode_shlibpath_var_F77=no - hardcode_libdir_flag_spec_F77='${wl}-rpath,$libdir' - export_dynamic_flag_spec_F77='${wl}-E' - # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc. - # Instead, shared libraries are loaded at an image base (0x10000000 by - # default) and relocated if they conflict, which is a slow very memory - # consuming and fragmenting process. To avoid this, we pick a random, - # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link - # time. Moving up from 0x10000000 also allows more sbrk(2) space. - archive_cmds_F77='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' - archive_expsym_cmds_F77='sed "s,^,_," $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--retain-symbols-file,$output_objdir/$soname.expsym ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' - ;; - - gnu* | linux* | k*bsd*-gnu) - if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then - tmp_addflag= - case $cc_basename,$host_cpu in - pgcc*) # Portland Group C compiler - whole_archive_flag_spec_F77='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $echo \"$new_convenience\"` ${wl}--no-whole-archive' - tmp_addflag=' $pic_flag' - ;; - pgf77* | pgf90* | pgf95*) # Portland Group f77 and f90 compilers - whole_archive_flag_spec_F77='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $echo \"$new_convenience\"` ${wl}--no-whole-archive' - tmp_addflag=' $pic_flag -Mnomain' ;; - ecc*,ia64* | icc*,ia64*) # Intel C compiler on ia64 - tmp_addflag=' -i_dynamic' ;; - efc*,ia64* | ifort*,ia64*) # Intel Fortran compiler on ia64 - tmp_addflag=' -i_dynamic -nofor_main' ;; - ifc* | ifort*) # Intel Fortran compiler - tmp_addflag=' -nofor_main' ;; - esac - case `$CC -V 2>&1 | sed 5q` in - *Sun\ C*) # Sun C 5.9 - whole_archive_flag_spec_F77='${wl}--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; $echo \"$new_convenience\"` ${wl}--no-whole-archive' - tmp_sharedflag='-G' ;; - *Sun\ F*) # Sun Fortran 8.3 - tmp_sharedflag='-G' ;; - *) - tmp_sharedflag='-shared' ;; - esac - archive_cmds_F77='$CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' - - if test $supports_anon_versioning = yes; then - archive_expsym_cmds_F77='$echo "{ global:" > $output_objdir/$libname.ver~ - cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ - $echo "local: *; };" >> $output_objdir/$libname.ver~ - $CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib' - fi - else - ld_shlibs_F77=no - fi - ;; - - netbsd*) - if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then - archive_cmds_F77='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib' - wlarc= - else - archive_cmds_F77='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' - archive_expsym_cmds_F77='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' - fi - ;; - - solaris*) - if $LD -v 2>&1 | grep 'BFD 2\.8' > /dev/null; then - ld_shlibs_F77=no - cat <&2 - -*** Warning: The releases 2.8.* of the GNU linker cannot reliably -*** create shared libraries on Solaris systems. Therefore, libtool -*** is disabling shared libraries support. We urge you to upgrade GNU -*** binutils to release 2.9.1 or newer. Another option is to modify -*** your PATH or compiler configuration so that the native linker is -*** used, and then restart. - -EOF - elif $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then - archive_cmds_F77='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' - archive_expsym_cmds_F77='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' - else - ld_shlibs_F77=no - fi - ;; - - sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX*) - case `$LD -v 2>&1` in - *\ [01].* | *\ 2.[0-9].* | *\ 2.1[0-5].*) - ld_shlibs_F77=no - cat <<_LT_EOF 1>&2 - -*** Warning: Releases of the GNU linker prior to 2.16.91.0.3 can not -*** reliably create shared libraries on SCO systems. Therefore, libtool -*** is disabling shared libraries support. We urge you to upgrade GNU -*** binutils to release 2.16.91.0.3 or newer. Another option is to modify -*** your PATH or compiler configuration so that the native linker is -*** used, and then restart. - -_LT_EOF - ;; - *) - if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then - hardcode_libdir_flag_spec_F77='`test -z "$SCOABSPATH" && echo ${wl}-rpath,$libdir`' - archive_cmds_F77='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib' - archive_expsym_cmds_F77='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname,\${SCOABSPATH:+${install_libdir}/}$soname,-retain-symbols-file,$export_symbols -o $lib' - else - ld_shlibs_F77=no - fi - ;; - esac - ;; - - sunos4*) - archive_cmds_F77='$LD -assert pure-text -Bshareable -o $lib $libobjs $deplibs $linker_flags' - wlarc= - hardcode_direct_F77=yes - hardcode_shlibpath_var_F77=no - ;; - - *) - if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then - archive_cmds_F77='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' - archive_expsym_cmds_F77='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' - else - ld_shlibs_F77=no - fi - ;; - esac - - if test "$ld_shlibs_F77" = no; then - runpath_var= - hardcode_libdir_flag_spec_F77= - export_dynamic_flag_spec_F77= - whole_archive_flag_spec_F77= - fi - else - # PORTME fill in a description of your system's linker (not GNU ld) - case $host_os in - aix3*) - allow_undefined_flag_F77=unsupported - always_export_symbols_F77=yes - archive_expsym_cmds_F77='$LD -o $output_objdir/$soname $libobjs $deplibs $linker_flags -bE:$export_symbols -T512 -H512 -bM:SRE~$AR $AR_FLAGS $lib $output_objdir/$soname' - # Note: this linker hardcodes the directories in LIBPATH if there - # are no directories specified by -L. - hardcode_minus_L_F77=yes - if test "$GCC" = yes && test -z "$lt_prog_compiler_static"; then - # Neither direct hardcoding nor static linking is supported with a - # broken collect2. - hardcode_direct_F77=unsupported - fi - ;; - - aix4* | aix5*) - if test "$host_cpu" = ia64; then - # On IA64, the linker does run time linking by default, so we don't - # have to do anything special. - aix_use_runtimelinking=no - exp_sym_flag='-Bexport' - no_entry_flag="" - else - # If we're using GNU nm, then we don't want the "-C" option. - # -C means demangle to AIX nm, but means don't demangle with GNU nm - if $NM -V 2>&1 | grep 'GNU' > /dev/null; then - export_symbols_cmds_F77='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$2 == "T") || (\$2 == "D") || (\$2 == "B")) && (substr(\$3,1,1) != ".")) { print \$3 } }'\'' | sort -u > $export_symbols' - else - export_symbols_cmds_F77='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$2 == "T") || (\$2 == "D") || (\$2 == "B")) && (substr(\$3,1,1) != ".")) { print \$3 } }'\'' | sort -u > $export_symbols' - fi - aix_use_runtimelinking=no - - # Test if we are trying to use run time linking or normal - # AIX style linking. If -brtl is somewhere in LDFLAGS, we - # need to do runtime linking. - case $host_os in aix4.[23]|aix4.[23].*|aix5*) - for ld_flag in $LDFLAGS; do - if (test $ld_flag = "-brtl" || test $ld_flag = "-Wl,-brtl"); then - aix_use_runtimelinking=yes - break - fi - done - ;; - esac - - exp_sym_flag='-bexport' - no_entry_flag='-bnoentry' - fi - - # When large executables or shared objects are built, AIX ld can - # have problems creating the table of contents. If linking a library - # or program results in "error TOC overflow" add -mminimal-toc to - # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not - # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS. - - archive_cmds_F77='' - hardcode_direct_F77=yes - hardcode_libdir_separator_F77=':' - link_all_deplibs_F77=yes - - if test "$GCC" = yes; then - case $host_os in aix4.[012]|aix4.[012].*) - # We only want to do this on AIX 4.2 and lower, the check - # below for broken collect2 doesn't work under 4.3+ - collect2name=`${CC} -print-prog-name=collect2` - if test -f "$collect2name" && \ - strings "$collect2name" | grep resolve_lib_name >/dev/null - then - # We have reworked collect2 - : - else - # We have old collect2 - hardcode_direct_F77=unsupported - # It fails to find uninstalled libraries when the uninstalled - # path is not listed in the libpath. Setting hardcode_minus_L - # to unsupported forces relinking - hardcode_minus_L_F77=yes - hardcode_libdir_flag_spec_F77='-L$libdir' - hardcode_libdir_separator_F77= - fi - ;; - esac - shared_flag='-shared' - if test "$aix_use_runtimelinking" = yes; then - shared_flag="$shared_flag "'${wl}-G' - fi - else - # not using gcc - if test "$host_cpu" = ia64; then - # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release - # chokes on -Wl,-G. The following line is correct: - shared_flag='-G' - else - if test "$aix_use_runtimelinking" = yes; then - shared_flag='${wl}-G' - else - shared_flag='${wl}-bM:SRE' - fi - fi - fi - - # It seems that -bexpall does not export symbols beginning with - # underscore (_), so it is better to generate a list of symbols to export. - always_export_symbols_F77=yes - if test "$aix_use_runtimelinking" = yes; then - # Warning - without using the other runtime loading flags (-brtl), - # -berok will link without error, but may produce a broken library. - allow_undefined_flag_F77='-berok' - # Determine the default libpath from the value encoded in an empty executable. - cat >conftest.$ac_ext <<_ACEOF - program main - - end -_ACEOF -rm -f conftest.$ac_objext conftest$ac_exeext -if { (ac_try="$ac_link" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_link") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_f77_werror_flag" || - test ! -s conftest.err - } && test -s conftest$ac_exeext && - $as_test_x conftest$ac_exeext; then - -lt_aix_libpath_sed=' - /Import File Strings/,/^$/ { - /^0/ { - s/^0 *\(.*\)$/\1/ - p - } - }' -aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` -# Check for a 64-bit object if we didn't find anything. -if test -z "$aix_libpath"; then - aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` -fi -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - -fi - -rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ - conftest$ac_exeext conftest.$ac_ext -if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi - - hardcode_libdir_flag_spec_F77='${wl}-blibpath:$libdir:'"$aix_libpath" - archive_expsym_cmds_F77="\$CC"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then echo "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag" - else - if test "$host_cpu" = ia64; then - hardcode_libdir_flag_spec_F77='${wl}-R $libdir:/usr/lib:/lib' - allow_undefined_flag_F77="-z nodefs" - archive_expsym_cmds_F77="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$exp_sym_flag:\$export_symbols" - else - # Determine the default libpath from the value encoded in an empty executable. - cat >conftest.$ac_ext <<_ACEOF - program main - - end -_ACEOF -rm -f conftest.$ac_objext conftest$ac_exeext -if { (ac_try="$ac_link" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_link") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_f77_werror_flag" || - test ! -s conftest.err - } && test -s conftest$ac_exeext && - $as_test_x conftest$ac_exeext; then - -lt_aix_libpath_sed=' - /Import File Strings/,/^$/ { - /^0/ { - s/^0 *\(.*\)$/\1/ - p - } - }' -aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` -# Check for a 64-bit object if we didn't find anything. -if test -z "$aix_libpath"; then - aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` -fi -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - -fi - -rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ - conftest$ac_exeext conftest.$ac_ext -if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi - - hardcode_libdir_flag_spec_F77='${wl}-blibpath:$libdir:'"$aix_libpath" - # Warning - without using the other run time loading flags, - # -berok will link without error, but may produce a broken library. - no_undefined_flag_F77=' ${wl}-bernotok' - allow_undefined_flag_F77=' ${wl}-berok' - # Exported symbols can be pulled into shared objects from archives - whole_archive_flag_spec_F77='$convenience' - archive_cmds_need_lc_F77=yes - # This is similar to how AIX traditionally builds its shared libraries. - archive_expsym_cmds_F77="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs ${wl}-bnoentry $compiler_flags ${wl}-bE:$export_symbols${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname' - fi - fi - ;; - - amigaos*) - archive_cmds_F77='$rm $output_objdir/a2ixlibrary.data~$echo "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$echo "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$echo "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$echo "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' - hardcode_libdir_flag_spec_F77='-L$libdir' - hardcode_minus_L_F77=yes - # see comment about different semantics on the GNU ld section - ld_shlibs_F77=no - ;; - - bsdi[45]*) - export_dynamic_flag_spec_F77=-rdynamic - ;; - - cygwin* | mingw* | pw32*) - # When not using gcc, we currently assume that we are using - # Microsoft Visual C++. - # hardcode_libdir_flag_spec is actually meaningless, as there is - # no search path for DLLs. - hardcode_libdir_flag_spec_F77=' ' - allow_undefined_flag_F77=unsupported - # Tell ltmain to make .lib files, not .a files. - libext=lib - # Tell ltmain to make .dll files, not .so files. - shrext_cmds=".dll" - # FIXME: Setting linknames here is a bad hack. - archive_cmds_F77='$CC -o $lib $libobjs $compiler_flags `echo "$deplibs" | $SED -e '\''s/ -lc$//'\''` -link -dll~linknames=' - # The linker will automatically build a .lib file if we build a DLL. - old_archive_From_new_cmds_F77='true' - # FIXME: Should let the user specify the lib program. - old_archive_cmds_F77='lib -OUT:$oldlib$oldobjs$old_deplibs' - fix_srcfile_path_F77='`cygpath -w "$srcfile"`' - enable_shared_with_static_runtimes_F77=yes - ;; - - darwin* | rhapsody*) - case $host_os in - rhapsody* | darwin1.[012]) - allow_undefined_flag_F77='${wl}-undefined ${wl}suppress' - ;; - *) # Darwin 1.3 on - if test -z ${MACOSX_DEPLOYMENT_TARGET} ; then - allow_undefined_flag_F77='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' - else - case ${MACOSX_DEPLOYMENT_TARGET} in - 10.[012]) - allow_undefined_flag_F77='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' - ;; - 10.*) - allow_undefined_flag_F77='${wl}-undefined ${wl}dynamic_lookup' - ;; - esac - fi - ;; - esac - archive_cmds_need_lc_F77=no - hardcode_direct_F77=no - hardcode_automatic_F77=yes - hardcode_shlibpath_var_F77=unsupported - whole_archive_flag_spec_F77='' - link_all_deplibs_F77=yes - if test "$GCC" = yes ; then - output_verbose_link_cmd='echo' - archive_cmds_F77='$CC -dynamiclib $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags -install_name $rpath/$soname $verstring' - module_cmds_F77='$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags' - # Don't fix this by using the ld -exported_symbols_list flag, it doesn't exist in older darwin lds - archive_expsym_cmds_F77='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -dynamiclib $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags -install_name $rpath/$soname $verstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' - module_expsym_cmds_F77='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' - else - case $cc_basename in - xlc*) - output_verbose_link_cmd='echo' - archive_cmds_F77='$CC -qmkshrobj $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-install_name ${wl}`echo $rpath/$soname` $xlcverstring' - module_cmds_F77='$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags' - # Don't fix this by using the ld -exported_symbols_list flag, it doesn't exist in older darwin lds - archive_expsym_cmds_F77='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -qmkshrobj $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-install_name ${wl}$rpath/$soname $xlcverstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' - module_expsym_cmds_F77='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' - ;; - *) - ld_shlibs_F77=no - ;; - esac - fi - ;; - - dgux*) - archive_cmds_F77='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' - hardcode_libdir_flag_spec_F77='-L$libdir' - hardcode_shlibpath_var_F77=no - ;; - - freebsd1*) - ld_shlibs_F77=no - ;; - - # FreeBSD 2.2.[012] allows us to include c++rt0.o to get C++ constructor - # support. Future versions do this automatically, but an explicit c++rt0.o - # does not break anything, and helps significantly (at the cost of a little - # extra space). - freebsd2.2*) - archive_cmds_F77='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags /usr/lib/c++rt0.o' - hardcode_libdir_flag_spec_F77='-R$libdir' - hardcode_direct_F77=yes - hardcode_shlibpath_var_F77=no - ;; - - # Unfortunately, older versions of FreeBSD 2 do not have this feature. - freebsd2*) - archive_cmds_F77='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' - hardcode_direct_F77=yes - hardcode_minus_L_F77=yes - hardcode_shlibpath_var_F77=no - ;; - - # FreeBSD 3 and greater uses gcc -shared to do shared libraries. - freebsd* | dragonfly*) - archive_cmds_F77='$CC -shared -o $lib $libobjs $deplibs $compiler_flags' - hardcode_libdir_flag_spec_F77='-R$libdir' - hardcode_direct_F77=yes - hardcode_shlibpath_var_F77=no - ;; - - hpux9*) - if test "$GCC" = yes; then - archive_cmds_F77='$rm $output_objdir/$soname~$CC -shared -fPIC ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' - else - archive_cmds_F77='$rm $output_objdir/$soname~$LD -b +b $install_libdir -o $output_objdir/$soname $libobjs $deplibs $linker_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' - fi - hardcode_libdir_flag_spec_F77='${wl}+b ${wl}$libdir' - hardcode_libdir_separator_F77=: - hardcode_direct_F77=yes - - # hardcode_minus_L: Not really in the search PATH, - # but as the default location of the library. - hardcode_minus_L_F77=yes - export_dynamic_flag_spec_F77='${wl}-E' - ;; - - hpux10*) - if test "$GCC" = yes -a "$with_gnu_ld" = no; then - archive_cmds_F77='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' - else - archive_cmds_F77='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags' - fi - if test "$with_gnu_ld" = no; then - hardcode_libdir_flag_spec_F77='${wl}+b ${wl}$libdir' - hardcode_libdir_separator_F77=: - - hardcode_direct_F77=yes - export_dynamic_flag_spec_F77='${wl}-E' - - # hardcode_minus_L: Not really in the search PATH, - # but as the default location of the library. - hardcode_minus_L_F77=yes - fi - ;; - - hpux11*) - if test "$GCC" = yes -a "$with_gnu_ld" = no; then - case $host_cpu in - hppa*64*) - archive_cmds_F77='$CC -shared ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' - ;; - ia64*) - archive_cmds_F77='$CC -shared ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' - ;; - *) - archive_cmds_F77='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' - ;; - esac - else - case $host_cpu in - hppa*64*) - archive_cmds_F77='$CC -b ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' - ;; - ia64*) - archive_cmds_F77='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' - ;; - *) - archive_cmds_F77='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' - ;; - esac - fi - if test "$with_gnu_ld" = no; then - hardcode_libdir_flag_spec_F77='${wl}+b ${wl}$libdir' - hardcode_libdir_separator_F77=: - - case $host_cpu in - hppa*64*|ia64*) - hardcode_libdir_flag_spec_ld_F77='+b $libdir' - hardcode_direct_F77=no - hardcode_shlibpath_var_F77=no - ;; - *) - hardcode_direct_F77=yes - export_dynamic_flag_spec_F77='${wl}-E' - - # hardcode_minus_L: Not really in the search PATH, - # but as the default location of the library. - hardcode_minus_L_F77=yes - ;; - esac - fi - ;; - - irix5* | irix6* | nonstopux*) - if test "$GCC" = yes; then - archive_cmds_F77='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' - else - archive_cmds_F77='$LD -shared $libobjs $deplibs $linker_flags -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib' - hardcode_libdir_flag_spec_ld_F77='-rpath $libdir' - fi - hardcode_libdir_flag_spec_F77='${wl}-rpath ${wl}$libdir' - hardcode_libdir_separator_F77=: - link_all_deplibs_F77=yes - ;; - - netbsd*) - if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then - archive_cmds_F77='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' # a.out - else - archive_cmds_F77='$LD -shared -o $lib $libobjs $deplibs $linker_flags' # ELF - fi - hardcode_libdir_flag_spec_F77='-R$libdir' - hardcode_direct_F77=yes - hardcode_shlibpath_var_F77=no - ;; - - newsos6) - archive_cmds_F77='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' - hardcode_direct_F77=yes - hardcode_libdir_flag_spec_F77='${wl}-rpath ${wl}$libdir' - hardcode_libdir_separator_F77=: - hardcode_shlibpath_var_F77=no - ;; - - openbsd*) - if test -f /usr/libexec/ld.so; then - hardcode_direct_F77=yes - hardcode_shlibpath_var_F77=no - if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then - archive_cmds_F77='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' - archive_expsym_cmds_F77='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-retain-symbols-file,$export_symbols' - hardcode_libdir_flag_spec_F77='${wl}-rpath,$libdir' - export_dynamic_flag_spec_F77='${wl}-E' - else - case $host_os in - openbsd[01].* | openbsd2.[0-7] | openbsd2.[0-7].*) - archive_cmds_F77='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' - hardcode_libdir_flag_spec_F77='-R$libdir' - ;; - *) - archive_cmds_F77='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' - hardcode_libdir_flag_spec_F77='${wl}-rpath,$libdir' - ;; - esac - fi - else - ld_shlibs_F77=no - fi - ;; - - os2*) - hardcode_libdir_flag_spec_F77='-L$libdir' - hardcode_minus_L_F77=yes - allow_undefined_flag_F77=unsupported - archive_cmds_F77='$echo "LIBRARY $libname INITINSTANCE" > $output_objdir/$libname.def~$echo "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~$echo DATA >> $output_objdir/$libname.def~$echo " SINGLE NONSHARED" >> $output_objdir/$libname.def~$echo EXPORTS >> $output_objdir/$libname.def~emxexp $libobjs >> $output_objdir/$libname.def~$CC -Zdll -Zcrtdll -o $lib $libobjs $deplibs $compiler_flags $output_objdir/$libname.def' - old_archive_From_new_cmds_F77='emximp -o $output_objdir/$libname.a $output_objdir/$libname.def' - ;; - - osf3*) - if test "$GCC" = yes; then - allow_undefined_flag_F77=' ${wl}-expect_unresolved ${wl}\*' - archive_cmds_F77='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' - else - allow_undefined_flag_F77=' -expect_unresolved \*' - archive_cmds_F77='$LD -shared${allow_undefined_flag} $libobjs $deplibs $linker_flags -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib' - fi - hardcode_libdir_flag_spec_F77='${wl}-rpath ${wl}$libdir' - hardcode_libdir_separator_F77=: - ;; - - osf4* | osf5*) # as osf3* with the addition of -msym flag - if test "$GCC" = yes; then - allow_undefined_flag_F77=' ${wl}-expect_unresolved ${wl}\*' - archive_cmds_F77='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' - hardcode_libdir_flag_spec_F77='${wl}-rpath ${wl}$libdir' - else - allow_undefined_flag_F77=' -expect_unresolved \*' - archive_cmds_F77='$LD -shared${allow_undefined_flag} $libobjs $deplibs $linker_flags -msym -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib' - archive_expsym_cmds_F77='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done; echo "-hidden">> $lib.exp~ - $LD -shared${allow_undefined_flag} -input $lib.exp $linker_flags $libobjs $deplibs -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib~$rm $lib.exp' - - # Both c and cxx compiler support -rpath directly - hardcode_libdir_flag_spec_F77='-rpath $libdir' - fi - hardcode_libdir_separator_F77=: - ;; - - solaris*) - no_undefined_flag_F77=' -z text' - if test "$GCC" = yes; then - wlarc='${wl}' - archive_cmds_F77='$CC -shared ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' - archive_expsym_cmds_F77='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~ - $CC -shared ${wl}-M ${wl}$lib.exp ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags~$rm $lib.exp' - else - wlarc='' - archive_cmds_F77='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linker_flags' - archive_expsym_cmds_F77='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~ - $LD -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$rm $lib.exp' - fi - hardcode_libdir_flag_spec_F77='-R$libdir' - hardcode_shlibpath_var_F77=no - case $host_os in - solaris2.[0-5] | solaris2.[0-5].*) ;; - *) - # The compiler driver will combine and reorder linker options, - # but understands `-z linker_flag'. GCC discards it without `$wl', - # but is careful enough not to reorder. - # Supported since Solaris 2.6 (maybe 2.5.1?) - if test "$GCC" = yes; then - whole_archive_flag_spec_F77='${wl}-z ${wl}allextract$convenience ${wl}-z ${wl}defaultextract' - else - whole_archive_flag_spec_F77='-z allextract$convenience -z defaultextract' - fi - ;; - esac - link_all_deplibs_F77=yes - ;; - - sunos4*) - if test "x$host_vendor" = xsequent; then - # Use $CC to link under sequent, because it throws in some extra .o - # files that make .init and .fini sections work. - archive_cmds_F77='$CC -G ${wl}-h $soname -o $lib $libobjs $deplibs $compiler_flags' - else - archive_cmds_F77='$LD -assert pure-text -Bstatic -o $lib $libobjs $deplibs $linker_flags' - fi - hardcode_libdir_flag_spec_F77='-L$libdir' - hardcode_direct_F77=yes - hardcode_minus_L_F77=yes - hardcode_shlibpath_var_F77=no - ;; - - sysv4) - case $host_vendor in - sni) - archive_cmds_F77='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' - hardcode_direct_F77=yes # is this really true??? - ;; - siemens) - ## LD is ld it makes a PLAMLIB - ## CC just makes a GrossModule. - archive_cmds_F77='$LD -G -o $lib $libobjs $deplibs $linker_flags' - reload_cmds_F77='$CC -r -o $output$reload_objs' - hardcode_direct_F77=no - ;; - motorola) - archive_cmds_F77='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' - hardcode_direct_F77=no #Motorola manual says yes, but my tests say they lie - ;; - esac - runpath_var='LD_RUN_PATH' - hardcode_shlibpath_var_F77=no - ;; - - sysv4.3*) - archive_cmds_F77='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' - hardcode_shlibpath_var_F77=no - export_dynamic_flag_spec_F77='-Bexport' - ;; - - sysv4*MP*) - if test -d /usr/nec; then - archive_cmds_F77='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' - hardcode_shlibpath_var_F77=no - runpath_var=LD_RUN_PATH - hardcode_runpath_var=yes - ld_shlibs_F77=yes - fi - ;; - - sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[01].[10]* | unixware7* | sco3.2v5.0.[024]*) - no_undefined_flag_F77='${wl}-z,text' - archive_cmds_need_lc_F77=no - hardcode_shlibpath_var_F77=no - runpath_var='LD_RUN_PATH' - - if test "$GCC" = yes; then - archive_cmds_F77='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - archive_expsym_cmds_F77='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - else - archive_cmds_F77='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - archive_expsym_cmds_F77='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - fi - ;; - - sysv5* | sco3.2v5* | sco5v6*) - # Note: We can NOT use -z defs as we might desire, because we do not - # link with -lc, and that would cause any symbols used from libc to - # always be unresolved, which means just about no library would - # ever link correctly. If we're not using GNU ld we use -z text - # though, which does catch some bad symbols but isn't as heavy-handed - # as -z defs. - no_undefined_flag_F77='${wl}-z,text' - allow_undefined_flag_F77='${wl}-z,nodefs' - archive_cmds_need_lc_F77=no - hardcode_shlibpath_var_F77=no - hardcode_libdir_flag_spec_F77='`test -z "$SCOABSPATH" && echo ${wl}-R,$libdir`' - hardcode_libdir_separator_F77=':' - link_all_deplibs_F77=yes - export_dynamic_flag_spec_F77='${wl}-Bexport' - runpath_var='LD_RUN_PATH' - - if test "$GCC" = yes; then - archive_cmds_F77='$CC -shared ${wl}-h,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags' - archive_expsym_cmds_F77='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags' - else - archive_cmds_F77='$CC -G ${wl}-h,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags' - archive_expsym_cmds_F77='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags' - fi - ;; - - uts4*) - archive_cmds_F77='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' - hardcode_libdir_flag_spec_F77='-L$libdir' - hardcode_shlibpath_var_F77=no - ;; - - *) - ld_shlibs_F77=no - ;; - esac - fi - -{ echo "$as_me:$LINENO: result: $ld_shlibs_F77" >&5 -echo "${ECHO_T}$ld_shlibs_F77" >&6; } -test "$ld_shlibs_F77" = no && can_build_shared=no - -# -# Do we need to explicitly link libc? -# -case "x$archive_cmds_need_lc_F77" in -x|xyes) - # Assume -lc should be added - archive_cmds_need_lc_F77=yes - - if test "$enable_shared" = yes && test "$GCC" = yes; then - case $archive_cmds_F77 in - *'~'*) - # FIXME: we may have to deal with multi-command sequences. - ;; - '$CC '*) - # Test whether the compiler implicitly links with -lc since on some - # systems, -lgcc has to come before -lc. If gcc already passes -lc - # to ld, don't add -lc before -lgcc. - { echo "$as_me:$LINENO: checking whether -lc should be explicitly linked in" >&5 -echo $ECHO_N "checking whether -lc should be explicitly linked in... $ECHO_C" >&6; } - $rm conftest* - echo "$lt_simple_compile_test_code" > conftest.$ac_ext - - if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } 2>conftest.err; then - soname=conftest - lib=conftest - libobjs=conftest.$ac_objext - deplibs= - wl=$lt_prog_compiler_wl_F77 - pic_flag=$lt_prog_compiler_pic_F77 - compiler_flags=-v - linker_flags=-v - verstring= - output_objdir=. - libname=conftest - lt_save_allow_undefined_flag=$allow_undefined_flag_F77 - allow_undefined_flag_F77= - if { (eval echo "$as_me:$LINENO: \"$archive_cmds_F77 2\>\&1 \| grep \" -lc \" \>/dev/null 2\>\&1\"") >&5 - (eval $archive_cmds_F77 2\>\&1 \| grep \" -lc \" \>/dev/null 2\>\&1) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } - then - archive_cmds_need_lc_F77=no - else - archive_cmds_need_lc_F77=yes - fi - allow_undefined_flag_F77=$lt_save_allow_undefined_flag - else - cat conftest.err 1>&5 - fi - $rm conftest* - { echo "$as_me:$LINENO: result: $archive_cmds_need_lc_F77" >&5 -echo "${ECHO_T}$archive_cmds_need_lc_F77" >&6; } - ;; - esac - fi - ;; -esac - -{ echo "$as_me:$LINENO: checking dynamic linker characteristics" >&5 -echo $ECHO_N "checking dynamic linker characteristics... $ECHO_C" >&6; } -library_names_spec= -libname_spec='lib$name' -soname_spec= -shrext_cmds=".so" -postinstall_cmds= -postuninstall_cmds= -finish_cmds= -finish_eval= -shlibpath_var= -shlibpath_overrides_runpath=unknown -version_type=none -dynamic_linker="$host_os ld.so" -sys_lib_dlsearch_path_spec="/lib /usr/lib" - -need_lib_prefix=unknown -hardcode_into_libs=no - -# when you set need_version to no, make sure it does not cause -set_version -# flags to be left without arguments -need_version=unknown - -case $host_os in -aix3*) - version_type=linux - library_names_spec='${libname}${release}${shared_ext}$versuffix $libname.a' - shlibpath_var=LIBPATH - - # AIX 3 has no versioning support, so we append a major version to the name. - soname_spec='${libname}${release}${shared_ext}$major' - ;; - -aix4* | aix5*) - version_type=linux - need_lib_prefix=no - need_version=no - hardcode_into_libs=yes - if test "$host_cpu" = ia64; then - # AIX 5 supports IA64 - library_names_spec='${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext}$versuffix $libname${shared_ext}' - shlibpath_var=LD_LIBRARY_PATH - else - # With GCC up to 2.95.x, collect2 would create an import file - # for dependence libraries. The import file would start with - # the line `#! .'. This would cause the generated library to - # depend on `.', always an invalid library. This was fixed in - # development snapshots of GCC prior to 3.0. - case $host_os in - aix4 | aix4.[01] | aix4.[01].*) - if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)' - echo ' yes ' - echo '#endif'; } | ${CC} -E - | grep yes > /dev/null; then - : - else - can_build_shared=no - fi - ;; - esac - # AIX (on Power*) has no versioning support, so currently we can not hardcode correct - # soname into executable. Probably we can add versioning support to - # collect2, so additional links can be useful in future. - if test "$aix_use_runtimelinking" = yes; then - # If using run time linking (on AIX 4.2 or later) use lib.so - # instead of lib.a to let people know that these are not - # typical AIX shared libraries. - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - else - # We preserve .a as extension for shared libraries through AIX4.2 - # and later when we are not doing run time linking. - library_names_spec='${libname}${release}.a $libname.a' - soname_spec='${libname}${release}${shared_ext}$major' - fi - shlibpath_var=LIBPATH - fi - ;; - -amigaos*) - library_names_spec='$libname.ixlibrary $libname.a' - # Create ${libname}_ixlibrary.a entries in /sys/libs. - finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`$echo "X$lib" | $Xsed -e '\''s%^.*/\([^/]*\)\.ixlibrary$%\1%'\''`; test $rm /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done' - ;; - -beos*) - library_names_spec='${libname}${shared_ext}' - dynamic_linker="$host_os ld.so" - shlibpath_var=LIBRARY_PATH - ;; - -bsdi[45]*) - version_type=linux - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir' - shlibpath_var=LD_LIBRARY_PATH - sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib" - sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib" - # the default ld.so.conf also contains /usr/contrib/lib and - # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow - # libtool to hard-code these into programs - ;; - -cygwin* | mingw* | pw32*) - version_type=windows - shrext_cmds=".dll" - need_version=no - need_lib_prefix=no - - case $GCC,$host_os in - yes,cygwin* | yes,mingw* | yes,pw32*) - library_names_spec='$libname.dll.a' - # DLL is installed to $(libdir)/../bin by postinstall_cmds - postinstall_cmds='base_file=`basename \${file}`~ - dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i;echo \$dlname'\''`~ - dldir=$destdir/`dirname \$dlpath`~ - test -d \$dldir || mkdir -p \$dldir~ - $install_prog $dir/$dlname \$dldir/$dlname~ - chmod a+x \$dldir/$dlname' - postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ - dlpath=$dir/\$dldll~ - $rm \$dlpath' - shlibpath_overrides_runpath=yes - - case $host_os in - cygwin*) - # Cygwin DLLs use 'cyg' prefix rather than 'lib' - soname_spec='`echo ${libname} | sed -e 's/^lib/cyg/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' - sys_lib_search_path_spec="/usr/lib /lib/w32api /lib /usr/local/lib" - ;; - mingw*) - # MinGW DLLs use traditional 'lib' prefix - soname_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' - sys_lib_search_path_spec=`$CC -print-search-dirs | grep "^libraries:" | $SED -e "s/^libraries://" -e "s,=/,/,g"` - if echo "$sys_lib_search_path_spec" | grep ';[c-zC-Z]:/' >/dev/null; then - # It is most probably a Windows format PATH printed by - # mingw gcc, but we are running on Cygwin. Gcc prints its search - # path with ; separators, and with drive letters. We can handle the - # drive letters (cygwin fileutils understands them), so leave them, - # especially as we might pass files found there to a mingw objdump, - # which wouldn't understand a cygwinified path. Ahh. - sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'` - else - sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` - fi - ;; - pw32*) - # pw32 DLLs use 'pw' prefix rather than 'lib' - library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' - ;; - esac - ;; - - *) - library_names_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext} $libname.lib' - ;; - esac - dynamic_linker='Win32 ld.exe' - # FIXME: first we should search . and the directory the executable is in - shlibpath_var=PATH - ;; - -darwin* | rhapsody*) - dynamic_linker="$host_os dyld" - version_type=darwin - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${versuffix}$shared_ext ${libname}${release}${major}$shared_ext ${libname}$shared_ext' - soname_spec='${libname}${release}${major}$shared_ext' - shlibpath_overrides_runpath=yes - shlibpath_var=DYLD_LIBRARY_PATH - shrext_cmds='`test .$module = .yes && echo .so || echo .dylib`' - - sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib' - ;; - -dgux*) - version_type=linux - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname$shared_ext' - soname_spec='${libname}${release}${shared_ext}$major' - shlibpath_var=LD_LIBRARY_PATH - ;; - -freebsd1*) - dynamic_linker=no - ;; - -freebsd* | dragonfly*) - # DragonFly does not have aout. When/if they implement a new - # versioning mechanism, adjust this. - if test -x /usr/bin/objformat; then - objformat=`/usr/bin/objformat` - else - case $host_os in - freebsd[123]*) objformat=aout ;; - *) objformat=elf ;; - esac - fi - version_type=freebsd-$objformat - case $version_type in - freebsd-elf*) - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' - need_version=no - need_lib_prefix=no - ;; - freebsd-*) - library_names_spec='${libname}${release}${shared_ext}$versuffix $libname${shared_ext}$versuffix' - need_version=yes - ;; - esac - shlibpath_var=LD_LIBRARY_PATH - case $host_os in - freebsd2*) - shlibpath_overrides_runpath=yes - ;; - freebsd3.[01]* | freebsdelf3.[01]*) - shlibpath_overrides_runpath=yes - hardcode_into_libs=yes - ;; - freebsd3.[2-9]* | freebsdelf3.[2-9]* | \ - freebsd4.[0-5] | freebsdelf4.[0-5] | freebsd4.1.1 | freebsdelf4.1.1) - shlibpath_overrides_runpath=no - hardcode_into_libs=yes - ;; - *) # from 4.6 on, and DragonFly - shlibpath_overrides_runpath=yes - hardcode_into_libs=yes - ;; - esac - ;; - -gnu*) - version_type=linux - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - shlibpath_var=LD_LIBRARY_PATH - hardcode_into_libs=yes - ;; - -hpux9* | hpux10* | hpux11*) - # Give a soname corresponding to the major version so that dld.sl refuses to - # link against other versions. - version_type=sunos - need_lib_prefix=no - need_version=no - case $host_cpu in - ia64*) - shrext_cmds='.so' - hardcode_into_libs=yes - dynamic_linker="$host_os dld.so" - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - if test "X$HPUX_IA64_MODE" = X32; then - sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib" - else - sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64" - fi - sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec - ;; - hppa*64*) - shrext_cmds='.sl' - hardcode_into_libs=yes - dynamic_linker="$host_os dld.sl" - shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH - shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64" - sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec - ;; - *) - shrext_cmds='.sl' - dynamic_linker="$host_os dld.sl" - shlibpath_var=SHLIB_PATH - shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - ;; - esac - # HP-UX runs *really* slowly unless shared libraries are mode 555. - postinstall_cmds='chmod 555 $lib' - ;; - -interix[3-9]*) - version_type=linux - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - dynamic_linker='Interix 3.x ld.so.1 (PE, like ELF)' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=no - hardcode_into_libs=yes - ;; - -irix5* | irix6* | nonstopux*) - case $host_os in - nonstopux*) version_type=nonstopux ;; - *) - if test "$lt_cv_prog_gnu_ld" = yes; then - version_type=linux - else - version_type=irix - fi ;; - esac - need_lib_prefix=no - need_version=no - soname_spec='${libname}${release}${shared_ext}$major' - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext} $libname${shared_ext}' - case $host_os in - irix5* | nonstopux*) - libsuff= shlibsuff= - ;; - *) - case $LD in # libtool.m4 will add one of these switches to LD - *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ") - libsuff= shlibsuff= libmagic=32-bit;; - *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ") - libsuff=32 shlibsuff=N32 libmagic=N32;; - *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ") - libsuff=64 shlibsuff=64 libmagic=64-bit;; - *) libsuff= shlibsuff= libmagic=never-match;; - esac - ;; - esac - shlibpath_var=LD_LIBRARY${shlibsuff}_PATH - shlibpath_overrides_runpath=no - sys_lib_search_path_spec="/usr/lib${libsuff} /lib${libsuff} /usr/local/lib${libsuff}" - sys_lib_dlsearch_path_spec="/usr/lib${libsuff} /lib${libsuff}" - hardcode_into_libs=yes - ;; - -# No shared lib support for Linux oldld, aout, or coff. -linux*oldld* | linux*aout* | linux*coff*) - dynamic_linker=no - ;; - -# This must be Linux ELF. -linux* | k*bsd*-gnu) - version_type=linux - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=no - # This implies no fast_install, which is unacceptable. - # Some rework will be needed to allow for fast_install - # before this can be enabled. - hardcode_into_libs=yes - sys_lib_search_path_spec="/usr/lib${libsuff} /lib${libsuff} /usr/local/lib${libsuff}" - sys_lib_dlsearch_path_spec="/usr/lib${libsuff} /lib${libsuff}" - - # Append ld.so.conf contents to the search path - if test -f /etc/ld.so.conf; then - lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s 2>/dev/null", \$2)); skip = 1; } { if (!skip) print \$0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;/^[ ]*hwcap[ ]/d;s/[:, ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;/^$/d' | tr '\n' ' '` - sys_lib_dlsearch_path_spec="$sys_lib_dlsearch_path_spec $lt_ld_extra" - fi - - # We used to test for /lib/ld.so.1 and disable shared libraries on - # powerpc, because MkLinux only supported shared libraries with the - # GNU dynamic linker. Since this was broken with cross compilers, - # most powerpc-linux boxes support dynamic linking these days and - # people can always --disable-shared, the test was removed, and we - # assume the GNU/Linux dynamic linker is in use. - dynamic_linker='GNU/Linux ld.so' - ;; - -netbsd*) - version_type=sunos - need_lib_prefix=no - need_version=no - if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' - finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' - dynamic_linker='NetBSD (a.out) ld.so' - else - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - dynamic_linker='NetBSD ld.elf_so' - fi - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=yes - hardcode_into_libs=yes - ;; - -newsos6) - version_type=linux - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=yes - ;; - -nto-qnx*) - version_type=linux - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=yes - ;; - -openbsd*) - version_type=sunos - sys_lib_dlsearch_path_spec="/usr/lib" - need_lib_prefix=no - # Some older versions of OpenBSD (3.3 at least) *do* need versioned libs. - case $host_os in - openbsd3.3 | openbsd3.3.*) need_version=yes ;; - *) need_version=no ;; - esac - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' - finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' - shlibpath_var=LD_LIBRARY_PATH - if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then - case $host_os in - openbsd2.[89] | openbsd2.[89].*) - shlibpath_overrides_runpath=no - ;; - *) - shlibpath_overrides_runpath=yes - ;; - esac - else - shlibpath_overrides_runpath=yes - fi - ;; - -os2*) - libname_spec='$name' - shrext_cmds=".dll" - need_lib_prefix=no - library_names_spec='$libname${shared_ext} $libname.a' - dynamic_linker='OS/2 ld.exe' - shlibpath_var=LIBPATH - ;; - -osf3* | osf4* | osf5*) - version_type=osf - need_lib_prefix=no - need_version=no - soname_spec='${libname}${release}${shared_ext}$major' - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - shlibpath_var=LD_LIBRARY_PATH - sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib" - sys_lib_dlsearch_path_spec="$sys_lib_search_path_spec" - ;; - -rdos*) - dynamic_linker=no - ;; - -solaris*) - version_type=linux - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=yes - hardcode_into_libs=yes - # ldd complains unless libraries are executable - postinstall_cmds='chmod +x $lib' - ;; - -sunos4*) - version_type=sunos - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' - finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=yes - if test "$with_gnu_ld" = yes; then - need_lib_prefix=no - fi - need_version=yes - ;; - -sysv4 | sysv4.3*) - version_type=linux - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - shlibpath_var=LD_LIBRARY_PATH - case $host_vendor in - sni) - shlibpath_overrides_runpath=no - need_lib_prefix=no - export_dynamic_flag_spec='${wl}-Blargedynsym' - runpath_var=LD_RUN_PATH - ;; - siemens) - need_lib_prefix=no - ;; - motorola) - need_lib_prefix=no - need_version=no - shlibpath_overrides_runpath=no - sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib' - ;; - esac - ;; - -sysv4*MP*) - if test -d /usr/nec ;then - version_type=linux - library_names_spec='$libname${shared_ext}.$versuffix $libname${shared_ext}.$major $libname${shared_ext}' - soname_spec='$libname${shared_ext}.$major' - shlibpath_var=LD_LIBRARY_PATH - fi - ;; - -sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) - version_type=freebsd-elf - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - shlibpath_var=LD_LIBRARY_PATH - hardcode_into_libs=yes - if test "$with_gnu_ld" = yes; then - sys_lib_search_path_spec='/usr/local/lib /usr/gnu/lib /usr/ccs/lib /usr/lib /lib' - shlibpath_overrides_runpath=no - else - sys_lib_search_path_spec='/usr/ccs/lib /usr/lib' - shlibpath_overrides_runpath=yes - case $host_os in - sco3.2v5*) - sys_lib_search_path_spec="$sys_lib_search_path_spec /lib" - ;; - esac - fi - sys_lib_dlsearch_path_spec='/usr/lib' - ;; - -uts4*) - version_type=linux - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - shlibpath_var=LD_LIBRARY_PATH - ;; - -*) - dynamic_linker=no - ;; -esac -{ echo "$as_me:$LINENO: result: $dynamic_linker" >&5 -echo "${ECHO_T}$dynamic_linker" >&6; } -test "$dynamic_linker" = no && can_build_shared=no - -variables_saved_for_relink="PATH $shlibpath_var $runpath_var" -if test "$GCC" = yes; then - variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH" -fi - -{ echo "$as_me:$LINENO: checking how to hardcode library paths into programs" >&5 -echo $ECHO_N "checking how to hardcode library paths into programs... $ECHO_C" >&6; } -hardcode_action_F77= -if test -n "$hardcode_libdir_flag_spec_F77" || \ - test -n "$runpath_var_F77" || \ - test "X$hardcode_automatic_F77" = "Xyes" ; then - - # We can hardcode non-existent directories. - if test "$hardcode_direct_F77" != no && - # If the only mechanism to avoid hardcoding is shlibpath_var, we - # have to relink, otherwise we might link with an installed library - # when we should be linking with a yet-to-be-installed one - ## test "$_LT_AC_TAGVAR(hardcode_shlibpath_var, F77)" != no && - test "$hardcode_minus_L_F77" != no; then - # Linking always hardcodes the temporary library directory. - hardcode_action_F77=relink - else - # We can link without hardcoding, and we can hardcode nonexisting dirs. - hardcode_action_F77=immediate - fi -else - # We cannot hardcode anything, or else we can only hardcode existing - # directories. - hardcode_action_F77=unsupported -fi -{ echo "$as_me:$LINENO: result: $hardcode_action_F77" >&5 -echo "${ECHO_T}$hardcode_action_F77" >&6; } - -if test "$hardcode_action_F77" = relink; then - # Fast installation is not supported - enable_fast_install=no -elif test "$shlibpath_overrides_runpath" = yes || - test "$enable_shared" = no; then - # Fast installation is not necessary - enable_fast_install=needless -fi - - -# The else clause should only fire when bootstrapping the -# libtool distribution, otherwise you forgot to ship ltmain.sh -# with your package, and you will get complaints that there are -# no rules to generate ltmain.sh. -if test -f "$ltmain"; then - # See if we are running on zsh, and set the options which allow our commands through - # without removal of \ escapes. - if test -n "${ZSH_VERSION+set}" ; then - setopt NO_GLOB_SUBST - fi - # Now quote all the things that may contain metacharacters while being - # careful not to overquote the AC_SUBSTed values. We take copies of the - # variables and quote the copies for generation of the libtool script. - for var in echo old_CC old_CFLAGS AR AR_FLAGS EGREP RANLIB LN_S LTCC LTCFLAGS NM \ - SED SHELL STRIP \ - libname_spec library_names_spec soname_spec extract_expsyms_cmds \ - old_striplib striplib file_magic_cmd finish_cmds finish_eval \ - deplibs_check_method reload_flag reload_cmds need_locks \ - lt_cv_sys_global_symbol_pipe lt_cv_sys_global_symbol_to_cdecl \ - lt_cv_sys_global_symbol_to_c_name_address \ - sys_lib_search_path_spec sys_lib_dlsearch_path_spec \ - old_postinstall_cmds old_postuninstall_cmds \ - compiler_F77 \ - CC_F77 \ - LD_F77 \ - lt_prog_compiler_wl_F77 \ - lt_prog_compiler_pic_F77 \ - lt_prog_compiler_static_F77 \ - lt_prog_compiler_no_builtin_flag_F77 \ - export_dynamic_flag_spec_F77 \ - thread_safe_flag_spec_F77 \ - whole_archive_flag_spec_F77 \ - enable_shared_with_static_runtimes_F77 \ - old_archive_cmds_F77 \ - old_archive_from_new_cmds_F77 \ - predep_objects_F77 \ - postdep_objects_F77 \ - predeps_F77 \ - postdeps_F77 \ - compiler_lib_search_path_F77 \ - archive_cmds_F77 \ - archive_expsym_cmds_F77 \ - postinstall_cmds_F77 \ - postuninstall_cmds_F77 \ - old_archive_from_expsyms_cmds_F77 \ - allow_undefined_flag_F77 \ - no_undefined_flag_F77 \ - export_symbols_cmds_F77 \ - hardcode_libdir_flag_spec_F77 \ - hardcode_libdir_flag_spec_ld_F77 \ - hardcode_libdir_separator_F77 \ - hardcode_automatic_F77 \ - module_cmds_F77 \ - module_expsym_cmds_F77 \ - lt_cv_prog_compiler_c_o_F77 \ - fix_srcfile_path_F77 \ - exclude_expsyms_F77 \ - include_expsyms_F77; do - - case $var in - old_archive_cmds_F77 | \ - old_archive_from_new_cmds_F77 | \ - archive_cmds_F77 | \ - archive_expsym_cmds_F77 | \ - module_cmds_F77 | \ - module_expsym_cmds_F77 | \ - old_archive_from_expsyms_cmds_F77 | \ - export_symbols_cmds_F77 | \ - extract_expsyms_cmds | reload_cmds | finish_cmds | \ - postinstall_cmds | postuninstall_cmds | \ - old_postinstall_cmds | old_postuninstall_cmds | \ - sys_lib_search_path_spec | sys_lib_dlsearch_path_spec) - # Double-quote double-evaled strings. - eval "lt_$var=\\\"\`\$echo \"X\$$var\" | \$Xsed -e \"\$double_quote_subst\" -e \"\$sed_quote_subst\" -e \"\$delay_variable_subst\"\`\\\"" - ;; - *) - eval "lt_$var=\\\"\`\$echo \"X\$$var\" | \$Xsed -e \"\$sed_quote_subst\"\`\\\"" - ;; - esac - done - - case $lt_echo in - *'\$0 --fallback-echo"') - lt_echo=`$echo "X$lt_echo" | $Xsed -e 's/\\\\\\\$0 --fallback-echo"$/$0 --fallback-echo"/'` - ;; - esac - -cfgfile="$ofile" - - cat <<__EOF__ >> "$cfgfile" -# ### BEGIN LIBTOOL TAG CONFIG: $tagname - -# Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`: - -# Shell to use when invoking shell scripts. -SHELL=$lt_SHELL - -# Whether or not to build shared libraries. -build_libtool_libs=$enable_shared - -# Whether or not to build static libraries. -build_old_libs=$enable_static - -# Whether or not to add -lc for building shared libraries. -build_libtool_need_lc=$archive_cmds_need_lc_F77 - -# Whether or not to disallow shared libs when runtime libs are static -allow_libtool_libs_with_static_runtimes=$enable_shared_with_static_runtimes_F77 - -# Whether or not to optimize for fast installation. -fast_install=$enable_fast_install - -# The host system. -host_alias=$host_alias -host=$host -host_os=$host_os - -# The build system. -build_alias=$build_alias -build=$build -build_os=$build_os - -# An echo program that does not interpret backslashes. -echo=$lt_echo - -# The archiver. -AR=$lt_AR -AR_FLAGS=$lt_AR_FLAGS - -# A C compiler. -LTCC=$lt_LTCC - -# LTCC compiler flags. -LTCFLAGS=$lt_LTCFLAGS - -# A language-specific compiler. -CC=$lt_compiler_F77 - -# Is the compiler the GNU C compiler? -with_gcc=$GCC_F77 - -# An ERE matcher. -EGREP=$lt_EGREP - -# The linker used to build libraries. -LD=$lt_LD_F77 - -# Whether we need hard or soft links. -LN_S=$lt_LN_S - -# A BSD-compatible nm program. -NM=$lt_NM - -# A symbol stripping program -STRIP=$lt_STRIP - -# Used to examine libraries when file_magic_cmd begins "file" -MAGIC_CMD=$MAGIC_CMD - -# Used on cygwin: DLL creation program. -DLLTOOL="$DLLTOOL" - -# Used on cygwin: object dumper. -OBJDUMP="$OBJDUMP" - -# Used on cygwin: assembler. -AS="$AS" - -# The name of the directory that contains temporary libtool files. -objdir=$objdir - -# How to create reloadable object files. -reload_flag=$lt_reload_flag -reload_cmds=$lt_reload_cmds - -# How to pass a linker flag through the compiler. -wl=$lt_lt_prog_compiler_wl_F77 - -# Object file suffix (normally "o"). -objext="$ac_objext" - -# Old archive suffix (normally "a"). -libext="$libext" - -# Shared library suffix (normally ".so"). -shrext_cmds='$shrext_cmds' - -# Executable file suffix (normally ""). -exeext="$exeext" - -# Additional compiler flags for building library objects. -pic_flag=$lt_lt_prog_compiler_pic_F77 -pic_mode=$pic_mode - -# What is the maximum length of a command? -max_cmd_len=$lt_cv_sys_max_cmd_len - -# Does compiler simultaneously support -c and -o options? -compiler_c_o=$lt_lt_cv_prog_compiler_c_o_F77 - -# Must we lock files when doing compilation? -need_locks=$lt_need_locks - -# Do we need the lib prefix for modules? -need_lib_prefix=$need_lib_prefix - -# Do we need a version for libraries? -need_version=$need_version - -# Whether dlopen is supported. -dlopen_support=$enable_dlopen - -# Whether dlopen of programs is supported. -dlopen_self=$enable_dlopen_self - -# Whether dlopen of statically linked programs is supported. -dlopen_self_static=$enable_dlopen_self_static - -# Compiler flag to prevent dynamic linking. -link_static_flag=$lt_lt_prog_compiler_static_F77 - -# Compiler flag to turn off builtin functions. -no_builtin_flag=$lt_lt_prog_compiler_no_builtin_flag_F77 - -# Compiler flag to allow reflexive dlopens. -export_dynamic_flag_spec=$lt_export_dynamic_flag_spec_F77 - -# Compiler flag to generate shared objects directly from archives. -whole_archive_flag_spec=$lt_whole_archive_flag_spec_F77 - -# Compiler flag to generate thread-safe objects. -thread_safe_flag_spec=$lt_thread_safe_flag_spec_F77 - -# Library versioning type. -version_type=$version_type - -# Format of library name prefix. -libname_spec=$lt_libname_spec - -# List of archive names. First name is the real one, the rest are links. -# The last name is the one that the linker finds with -lNAME. -library_names_spec=$lt_library_names_spec - -# The coded name of the library, if different from the real name. -soname_spec=$lt_soname_spec - -# Commands used to build and install an old-style archive. -RANLIB=$lt_RANLIB -old_archive_cmds=$lt_old_archive_cmds_F77 -old_postinstall_cmds=$lt_old_postinstall_cmds -old_postuninstall_cmds=$lt_old_postuninstall_cmds - -# Create an old-style archive from a shared archive. -old_archive_from_new_cmds=$lt_old_archive_from_new_cmds_F77 - -# Create a temporary old-style archive to link instead of a shared archive. -old_archive_from_expsyms_cmds=$lt_old_archive_from_expsyms_cmds_F77 - -# Commands used to build and install a shared archive. -archive_cmds=$lt_archive_cmds_F77 -archive_expsym_cmds=$lt_archive_expsym_cmds_F77 -postinstall_cmds=$lt_postinstall_cmds -postuninstall_cmds=$lt_postuninstall_cmds - -# Commands used to build a loadable module (assumed same as above if empty) -module_cmds=$lt_module_cmds_F77 -module_expsym_cmds=$lt_module_expsym_cmds_F77 - -# Commands to strip libraries. -old_striplib=$lt_old_striplib -striplib=$lt_striplib - -# Dependencies to place before the objects being linked to create a -# shared library. -predep_objects=$lt_predep_objects_F77 - -# Dependencies to place after the objects being linked to create a -# shared library. -postdep_objects=$lt_postdep_objects_F77 - -# Dependencies to place before the objects being linked to create a -# shared library. -predeps=$lt_predeps_F77 - -# Dependencies to place after the objects being linked to create a -# shared library. -postdeps=$lt_postdeps_F77 - -# The library search path used internally by the compiler when linking -# a shared library. -compiler_lib_search_path=$lt_compiler_lib_search_path_F77 - -# Method to check whether dependent libraries are shared objects. -deplibs_check_method=$lt_deplibs_check_method - -# Command to use when deplibs_check_method == file_magic. -file_magic_cmd=$lt_file_magic_cmd - -# Flag that allows shared libraries with undefined symbols to be built. -allow_undefined_flag=$lt_allow_undefined_flag_F77 - -# Flag that forces no undefined symbols. -no_undefined_flag=$lt_no_undefined_flag_F77 - -# Commands used to finish a libtool library installation in a directory. -finish_cmds=$lt_finish_cmds - -# Same as above, but a single script fragment to be evaled but not shown. -finish_eval=$lt_finish_eval - -# Take the output of nm and produce a listing of raw symbols and C names. -global_symbol_pipe=$lt_lt_cv_sys_global_symbol_pipe - -# Transform the output of nm in a proper C declaration -global_symbol_to_cdecl=$lt_lt_cv_sys_global_symbol_to_cdecl - -# Transform the output of nm in a C name address pair -global_symbol_to_c_name_address=$lt_lt_cv_sys_global_symbol_to_c_name_address - -# This is the shared library runtime path variable. -runpath_var=$runpath_var - -# This is the shared library path variable. -shlibpath_var=$shlibpath_var - -# Is shlibpath searched before the hard-coded library search path? -shlibpath_overrides_runpath=$shlibpath_overrides_runpath - -# How to hardcode a shared library path into an executable. -hardcode_action=$hardcode_action_F77 - -# Whether we should hardcode library paths into libraries. -hardcode_into_libs=$hardcode_into_libs - -# Flag to hardcode \$libdir into a binary during linking. -# This must work even if \$libdir does not exist. -hardcode_libdir_flag_spec=$lt_hardcode_libdir_flag_spec_F77 - -# If ld is used when linking, flag to hardcode \$libdir into -# a binary during linking. This must work even if \$libdir does -# not exist. -hardcode_libdir_flag_spec_ld=$lt_hardcode_libdir_flag_spec_ld_F77 - -# Whether we need a single -rpath flag with a separated argument. -hardcode_libdir_separator=$lt_hardcode_libdir_separator_F77 - -# Set to yes if using DIR/libNAME${shared_ext} during linking hardcodes DIR into the -# resulting binary. -hardcode_direct=$hardcode_direct_F77 - -# Set to yes if using the -LDIR flag during linking hardcodes DIR into the -# resulting binary. -hardcode_minus_L=$hardcode_minus_L_F77 - -# Set to yes if using SHLIBPATH_VAR=DIR during linking hardcodes DIR into -# the resulting binary. -hardcode_shlibpath_var=$hardcode_shlibpath_var_F77 - -# Set to yes if building a shared library automatically hardcodes DIR into the library -# and all subsequent libraries and executables linked against it. -hardcode_automatic=$hardcode_automatic_F77 - -# Variables whose values should be saved in libtool wrapper scripts and -# restored at relink time. -variables_saved_for_relink="$variables_saved_for_relink" - -# Whether libtool must link a program against all its dependency libraries. -link_all_deplibs=$link_all_deplibs_F77 - -# Compile-time system search path for libraries -sys_lib_search_path_spec=$lt_sys_lib_search_path_spec - -# Run-time system search path for libraries -sys_lib_dlsearch_path_spec=$lt_sys_lib_dlsearch_path_spec - -# Fix the shell variable \$srcfile for the compiler. -fix_srcfile_path=$lt_fix_srcfile_path - -# Set to yes if exported symbols are required. -always_export_symbols=$always_export_symbols_F77 - -# The commands to list exported symbols. -export_symbols_cmds=$lt_export_symbols_cmds_F77 - -# The commands to extract the exported symbol list from a shared archive. -extract_expsyms_cmds=$lt_extract_expsyms_cmds - -# Symbols that should not be listed in the preloaded symbols. -exclude_expsyms=$lt_exclude_expsyms_F77 - -# Symbols that must always be exported. -include_expsyms=$lt_include_expsyms_F77 - -# ### END LIBTOOL TAG CONFIG: $tagname - -__EOF__ - - -else - # If there is no Makefile yet, we rely on a make rule to execute - # `config.status --recheck' to rerun these tests and create the - # libtool script then. - ltmain_in=`echo $ltmain | sed -e 's/\.sh$/.in/'` - if test -f "$ltmain_in"; then - test -f Makefile && make "$ltmain" - fi -fi - - -ac_ext=c -ac_cpp='$CPP $CPPFLAGS' -ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_c_compiler_gnu - -CC="$lt_save_CC" - - else - tagname="" - fi - ;; - - GCJ) - if test -n "$GCJ" && test "X$GCJ" != "Xno"; then - - -# Source file extension for Java test sources. -ac_ext=java - -# Object file extension for compiled Java test sources. -objext=o -objext_GCJ=$objext - -# Code to be used in simple compile tests -lt_simple_compile_test_code="class foo {}" - -# Code to be used in simple link tests -lt_simple_link_test_code='public class conftest { public static void main(String[] argv) {}; }' - -# ltmain only uses $CC for tagged configurations so make sure $CC is set. - -# If no C compiler was specified, use CC. -LTCC=${LTCC-"$CC"} - -# If no C compiler flags were specified, use CFLAGS. -LTCFLAGS=${LTCFLAGS-"$CFLAGS"} - -# Allow CC to be a program name with arguments. -compiler=$CC - - -# save warnings/boilerplate of simple test code -ac_outfile=conftest.$ac_objext -echo "$lt_simple_compile_test_code" >conftest.$ac_ext -eval "$ac_compile" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err -_lt_compiler_boilerplate=`cat conftest.err` -$rm conftest* - -ac_outfile=conftest.$ac_objext -echo "$lt_simple_link_test_code" >conftest.$ac_ext -eval "$ac_link" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err -_lt_linker_boilerplate=`cat conftest.err` -$rm conftest* - - -# Allow CC to be a program name with arguments. -lt_save_CC="$CC" -CC=${GCJ-"gcj"} -compiler=$CC -compiler_GCJ=$CC -for cc_temp in $compiler""; do - case $cc_temp in - compile | *[\\/]compile | ccache | *[\\/]ccache ) ;; - distcc | *[\\/]distcc | purify | *[\\/]purify ) ;; - \-*) ;; - *) break;; - esac -done -cc_basename=`$echo "X$cc_temp" | $Xsed -e 's%.*/%%' -e "s%^$host_alias-%%"` - - -# GCJ did not exist at the time GCC didn't implicitly link libc in. -archive_cmds_need_lc_GCJ=no - -old_archive_cmds_GCJ=$old_archive_cmds - - -lt_prog_compiler_no_builtin_flag_GCJ= - -if test "$GCC" = yes; then - lt_prog_compiler_no_builtin_flag_GCJ=' -fno-builtin' - - -{ echo "$as_me:$LINENO: checking if $compiler supports -fno-rtti -fno-exceptions" >&5 -echo $ECHO_N "checking if $compiler supports -fno-rtti -fno-exceptions... $ECHO_C" >&6; } -if test "${lt_cv_prog_compiler_rtti_exceptions+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - lt_cv_prog_compiler_rtti_exceptions=no - ac_outfile=conftest.$ac_objext - echo "$lt_simple_compile_test_code" > conftest.$ac_ext - lt_compiler_flag="-fno-rtti -fno-exceptions" - # Insert the option either (1) after the last *FLAGS variable, or - # (2) before a word containing "conftest.", or (3) at the end. - # Note that $ac_compile itself does not contain backslashes and begins - # with a dollar sign (not a hyphen), so the echo should work correctly. - # The option is referenced via a variable to avoid confusing sed. - lt_compile=`echo "$ac_compile" | $SED \ - -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ - -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ - -e 's:$: $lt_compiler_flag:'` - (eval echo "\"\$as_me:16662: $lt_compile\"" >&5) - (eval "$lt_compile" 2>conftest.err) - ac_status=$? - cat conftest.err >&5 - echo "$as_me:16666: \$? = $ac_status" >&5 - if (exit $ac_status) && test -s "$ac_outfile"; then - # The compiler can only warn and ignore the option if not recognized - # So say no if there are warnings other than the usual output. - $echo "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' >conftest.exp - $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 - if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then - lt_cv_prog_compiler_rtti_exceptions=yes - fi - fi - $rm conftest* - -fi -{ echo "$as_me:$LINENO: result: $lt_cv_prog_compiler_rtti_exceptions" >&5 -echo "${ECHO_T}$lt_cv_prog_compiler_rtti_exceptions" >&6; } - -if test x"$lt_cv_prog_compiler_rtti_exceptions" = xyes; then - lt_prog_compiler_no_builtin_flag_GCJ="$lt_prog_compiler_no_builtin_flag_GCJ -fno-rtti -fno-exceptions" -else - : -fi - -fi - -lt_prog_compiler_wl_GCJ= -lt_prog_compiler_pic_GCJ= -lt_prog_compiler_static_GCJ= - -{ echo "$as_me:$LINENO: checking for $compiler option to produce PIC" >&5 -echo $ECHO_N "checking for $compiler option to produce PIC... $ECHO_C" >&6; } - - if test "$GCC" = yes; then - lt_prog_compiler_wl_GCJ='-Wl,' - lt_prog_compiler_static_GCJ='-static' - - case $host_os in - aix*) - # All AIX code is PIC. - if test "$host_cpu" = ia64; then - # AIX 5 now supports IA64 processor - lt_prog_compiler_static_GCJ='-Bstatic' - fi - ;; - - amigaos*) - # FIXME: we need at least 68020 code to build shared libraries, but - # adding the `-m68020' flag to GCC prevents building anything better, - # like `-m68040'. - lt_prog_compiler_pic_GCJ='-m68020 -resident32 -malways-restore-a4' - ;; - - beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) - # PIC is the default for these OSes. - ;; - - mingw* | cygwin* | pw32* | os2*) - # This hack is so that the source file can tell whether it is being - # built for inclusion in a dll (and should export symbols for example). - # Although the cygwin gcc ignores -fPIC, still need this for old-style - # (--disable-auto-import) libraries - lt_prog_compiler_pic_GCJ='-DDLL_EXPORT' - ;; - - darwin* | rhapsody*) - # PIC is the default on this platform - # Common symbols not allowed in MH_DYLIB files - lt_prog_compiler_pic_GCJ='-fno-common' - ;; - - interix[3-9]*) - # Interix 3.x gcc -fpic/-fPIC options generate broken code. - # Instead, we relocate shared libraries at runtime. - ;; - - msdosdjgpp*) - # Just because we use GCC doesn't mean we suddenly get shared libraries - # on systems that don't support them. - lt_prog_compiler_can_build_shared_GCJ=no - enable_shared=no - ;; - - sysv4*MP*) - if test -d /usr/nec; then - lt_prog_compiler_pic_GCJ=-Kconform_pic - fi - ;; - - hpux*) - # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but - # not for PA HP-UX. - case $host_cpu in - hppa*64*|ia64*) - # +Z the default - ;; - *) - lt_prog_compiler_pic_GCJ='-fPIC' - ;; - esac - ;; - - *) - lt_prog_compiler_pic_GCJ='-fPIC' - ;; - esac - else - # PORTME Check for flag to pass linker flags through the system compiler. - case $host_os in - aix*) - lt_prog_compiler_wl_GCJ='-Wl,' - if test "$host_cpu" = ia64; then - # AIX 5 now supports IA64 processor - lt_prog_compiler_static_GCJ='-Bstatic' - else - lt_prog_compiler_static_GCJ='-bnso -bI:/lib/syscalls.exp' - fi - ;; - darwin*) - # PIC is the default on this platform - # Common symbols not allowed in MH_DYLIB files - case $cc_basename in - xlc*) - lt_prog_compiler_pic_GCJ='-qnocommon' - lt_prog_compiler_wl_GCJ='-Wl,' - ;; - esac - ;; - - mingw* | cygwin* | pw32* | os2*) - # This hack is so that the source file can tell whether it is being - # built for inclusion in a dll (and should export symbols for example). - lt_prog_compiler_pic_GCJ='-DDLL_EXPORT' - ;; - - hpux9* | hpux10* | hpux11*) - lt_prog_compiler_wl_GCJ='-Wl,' - # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but - # not for PA HP-UX. - case $host_cpu in - hppa*64*|ia64*) - # +Z the default - ;; - *) - lt_prog_compiler_pic_GCJ='+Z' - ;; - esac - # Is there a better lt_prog_compiler_static that works with the bundled CC? - lt_prog_compiler_static_GCJ='${wl}-a ${wl}archive' - ;; - - irix5* | irix6* | nonstopux*) - lt_prog_compiler_wl_GCJ='-Wl,' - # PIC (with -KPIC) is the default. - lt_prog_compiler_static_GCJ='-non_shared' - ;; - - newsos6) - lt_prog_compiler_pic_GCJ='-KPIC' - lt_prog_compiler_static_GCJ='-Bstatic' - ;; - - linux* | k*bsd*-gnu) - case $cc_basename in - icc* | ecc*) - lt_prog_compiler_wl_GCJ='-Wl,' - lt_prog_compiler_pic_GCJ='-KPIC' - lt_prog_compiler_static_GCJ='-static' - ;; - pgcc* | pgf77* | pgf90* | pgf95*) - # Portland Group compilers (*not* the Pentium gcc compiler, - # which looks to be a dead project) - lt_prog_compiler_wl_GCJ='-Wl,' - lt_prog_compiler_pic_GCJ='-fpic' - lt_prog_compiler_static_GCJ='-Bstatic' - ;; - ccc*) - lt_prog_compiler_wl_GCJ='-Wl,' - # All Alpha code is PIC. - lt_prog_compiler_static_GCJ='-non_shared' - ;; - *) - case `$CC -V 2>&1 | sed 5q` in - *Sun\ C*) - # Sun C 5.9 - lt_prog_compiler_pic_GCJ='-KPIC' - lt_prog_compiler_static_GCJ='-Bstatic' - lt_prog_compiler_wl_GCJ='-Wl,' - ;; - *Sun\ F*) - # Sun Fortran 8.3 passes all unrecognized flags to the linker - lt_prog_compiler_pic_GCJ='-KPIC' - lt_prog_compiler_static_GCJ='-Bstatic' - lt_prog_compiler_wl_GCJ='' - ;; - esac - ;; - esac - ;; - - osf3* | osf4* | osf5*) - lt_prog_compiler_wl_GCJ='-Wl,' - # All OSF/1 code is PIC. - lt_prog_compiler_static_GCJ='-non_shared' - ;; - - rdos*) - lt_prog_compiler_static_GCJ='-non_shared' - ;; - - solaris*) - lt_prog_compiler_pic_GCJ='-KPIC' - lt_prog_compiler_static_GCJ='-Bstatic' - case $cc_basename in - f77* | f90* | f95*) - lt_prog_compiler_wl_GCJ='-Qoption ld ';; - *) - lt_prog_compiler_wl_GCJ='-Wl,';; - esac - ;; - - sunos4*) - lt_prog_compiler_wl_GCJ='-Qoption ld ' - lt_prog_compiler_pic_GCJ='-PIC' - lt_prog_compiler_static_GCJ='-Bstatic' - ;; - - sysv4 | sysv4.2uw2* | sysv4.3*) - lt_prog_compiler_wl_GCJ='-Wl,' - lt_prog_compiler_pic_GCJ='-KPIC' - lt_prog_compiler_static_GCJ='-Bstatic' - ;; - - sysv4*MP*) - if test -d /usr/nec ;then - lt_prog_compiler_pic_GCJ='-Kconform_pic' - lt_prog_compiler_static_GCJ='-Bstatic' - fi - ;; - - sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*) - lt_prog_compiler_wl_GCJ='-Wl,' - lt_prog_compiler_pic_GCJ='-KPIC' - lt_prog_compiler_static_GCJ='-Bstatic' - ;; - - unicos*) - lt_prog_compiler_wl_GCJ='-Wl,' - lt_prog_compiler_can_build_shared_GCJ=no - ;; - - uts4*) - lt_prog_compiler_pic_GCJ='-pic' - lt_prog_compiler_static_GCJ='-Bstatic' - ;; - - *) - lt_prog_compiler_can_build_shared_GCJ=no - ;; - esac - fi - -{ echo "$as_me:$LINENO: result: $lt_prog_compiler_pic_GCJ" >&5 -echo "${ECHO_T}$lt_prog_compiler_pic_GCJ" >&6; } - -# -# Check to make sure the PIC flag actually works. -# -if test -n "$lt_prog_compiler_pic_GCJ"; then - -{ echo "$as_me:$LINENO: checking if $compiler PIC flag $lt_prog_compiler_pic_GCJ works" >&5 -echo $ECHO_N "checking if $compiler PIC flag $lt_prog_compiler_pic_GCJ works... $ECHO_C" >&6; } -if test "${lt_prog_compiler_pic_works_GCJ+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - lt_prog_compiler_pic_works_GCJ=no - ac_outfile=conftest.$ac_objext - echo "$lt_simple_compile_test_code" > conftest.$ac_ext - lt_compiler_flag="$lt_prog_compiler_pic_GCJ" - # Insert the option either (1) after the last *FLAGS variable, or - # (2) before a word containing "conftest.", or (3) at the end. - # Note that $ac_compile itself does not contain backslashes and begins - # with a dollar sign (not a hyphen), so the echo should work correctly. - # The option is referenced via a variable to avoid confusing sed. - lt_compile=`echo "$ac_compile" | $SED \ - -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ - -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ - -e 's:$: $lt_compiler_flag:'` - (eval echo "\"\$as_me:16952: $lt_compile\"" >&5) - (eval "$lt_compile" 2>conftest.err) - ac_status=$? - cat conftest.err >&5 - echo "$as_me:16956: \$? = $ac_status" >&5 - if (exit $ac_status) && test -s "$ac_outfile"; then - # The compiler can only warn and ignore the option if not recognized - # So say no if there are warnings other than the usual output. - $echo "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' >conftest.exp - $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 - if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then - lt_prog_compiler_pic_works_GCJ=yes - fi - fi - $rm conftest* - -fi -{ echo "$as_me:$LINENO: result: $lt_prog_compiler_pic_works_GCJ" >&5 -echo "${ECHO_T}$lt_prog_compiler_pic_works_GCJ" >&6; } - -if test x"$lt_prog_compiler_pic_works_GCJ" = xyes; then - case $lt_prog_compiler_pic_GCJ in - "" | " "*) ;; - *) lt_prog_compiler_pic_GCJ=" $lt_prog_compiler_pic_GCJ" ;; - esac -else - lt_prog_compiler_pic_GCJ= - lt_prog_compiler_can_build_shared_GCJ=no -fi - -fi -case $host_os in - # For platforms which do not support PIC, -DPIC is meaningless: - *djgpp*) - lt_prog_compiler_pic_GCJ= - ;; - *) - lt_prog_compiler_pic_GCJ="$lt_prog_compiler_pic_GCJ" - ;; -esac - -# -# Check to make sure the static flag actually works. -# -wl=$lt_prog_compiler_wl_GCJ eval lt_tmp_static_flag=\"$lt_prog_compiler_static_GCJ\" -{ echo "$as_me:$LINENO: checking if $compiler static flag $lt_tmp_static_flag works" >&5 -echo $ECHO_N "checking if $compiler static flag $lt_tmp_static_flag works... $ECHO_C" >&6; } -if test "${lt_prog_compiler_static_works_GCJ+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - lt_prog_compiler_static_works_GCJ=no - save_LDFLAGS="$LDFLAGS" - LDFLAGS="$LDFLAGS $lt_tmp_static_flag" - echo "$lt_simple_link_test_code" > conftest.$ac_ext - if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then - # The linker can only warn and ignore the option if not recognized - # So say no if there are warnings - if test -s conftest.err; then - # Append any errors to the config.log. - cat conftest.err 1>&5 - $echo "X$_lt_linker_boilerplate" | $Xsed -e '/^$/d' > conftest.exp - $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 - if diff conftest.exp conftest.er2 >/dev/null; then - lt_prog_compiler_static_works_GCJ=yes - fi - else - lt_prog_compiler_static_works_GCJ=yes - fi - fi - $rm conftest* - LDFLAGS="$save_LDFLAGS" - -fi -{ echo "$as_me:$LINENO: result: $lt_prog_compiler_static_works_GCJ" >&5 -echo "${ECHO_T}$lt_prog_compiler_static_works_GCJ" >&6; } - -if test x"$lt_prog_compiler_static_works_GCJ" = xyes; then - : -else - lt_prog_compiler_static_GCJ= -fi - - -{ echo "$as_me:$LINENO: checking if $compiler supports -c -o file.$ac_objext" >&5 -echo $ECHO_N "checking if $compiler supports -c -o file.$ac_objext... $ECHO_C" >&6; } -if test "${lt_cv_prog_compiler_c_o_GCJ+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - lt_cv_prog_compiler_c_o_GCJ=no - $rm -r conftest 2>/dev/null - mkdir conftest - cd conftest - mkdir out - echo "$lt_simple_compile_test_code" > conftest.$ac_ext - - lt_compiler_flag="-o out/conftest2.$ac_objext" - # Insert the option either (1) after the last *FLAGS variable, or - # (2) before a word containing "conftest.", or (3) at the end. - # Note that $ac_compile itself does not contain backslashes and begins - # with a dollar sign (not a hyphen), so the echo should work correctly. - lt_compile=`echo "$ac_compile" | $SED \ - -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ - -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ - -e 's:$: $lt_compiler_flag:'` - (eval echo "\"\$as_me:17056: $lt_compile\"" >&5) - (eval "$lt_compile" 2>out/conftest.err) - ac_status=$? - cat out/conftest.err >&5 - echo "$as_me:17060: \$? = $ac_status" >&5 - if (exit $ac_status) && test -s out/conftest2.$ac_objext - then - # The compiler can only warn and ignore the option if not recognized - # So say no if there are warnings - $echo "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' > out/conftest.exp - $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2 - if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then - lt_cv_prog_compiler_c_o_GCJ=yes - fi - fi - chmod u+w . 2>&5 - $rm conftest* - # SGI C++ compiler will create directory out/ii_files/ for - # template instantiation - test -d out/ii_files && $rm out/ii_files/* && rmdir out/ii_files - $rm out/* && rmdir out - cd .. - rmdir conftest - $rm conftest* - -fi -{ echo "$as_me:$LINENO: result: $lt_cv_prog_compiler_c_o_GCJ" >&5 -echo "${ECHO_T}$lt_cv_prog_compiler_c_o_GCJ" >&6; } - - -hard_links="nottested" -if test "$lt_cv_prog_compiler_c_o_GCJ" = no && test "$need_locks" != no; then - # do not overwrite the value of need_locks provided by the user - { echo "$as_me:$LINENO: checking if we can lock with hard links" >&5 -echo $ECHO_N "checking if we can lock with hard links... $ECHO_C" >&6; } - hard_links=yes - $rm conftest* - ln conftest.a conftest.b 2>/dev/null && hard_links=no - touch conftest.a - ln conftest.a conftest.b 2>&5 || hard_links=no - ln conftest.a conftest.b 2>/dev/null && hard_links=no - { echo "$as_me:$LINENO: result: $hard_links" >&5 -echo "${ECHO_T}$hard_links" >&6; } - if test "$hard_links" = no; then - { echo "$as_me:$LINENO: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&5 -echo "$as_me: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&2;} - need_locks=warn - fi -else - need_locks=no -fi - -{ echo "$as_me:$LINENO: checking whether the $compiler linker ($LD) supports shared libraries" >&5 -echo $ECHO_N "checking whether the $compiler linker ($LD) supports shared libraries... $ECHO_C" >&6; } - - runpath_var= - allow_undefined_flag_GCJ= - enable_shared_with_static_runtimes_GCJ=no - archive_cmds_GCJ= - archive_expsym_cmds_GCJ= - old_archive_From_new_cmds_GCJ= - old_archive_from_expsyms_cmds_GCJ= - export_dynamic_flag_spec_GCJ= - whole_archive_flag_spec_GCJ= - thread_safe_flag_spec_GCJ= - hardcode_libdir_flag_spec_GCJ= - hardcode_libdir_flag_spec_ld_GCJ= - hardcode_libdir_separator_GCJ= - hardcode_direct_GCJ=no - hardcode_minus_L_GCJ=no - hardcode_shlibpath_var_GCJ=unsupported - link_all_deplibs_GCJ=unknown - hardcode_automatic_GCJ=no - module_cmds_GCJ= - module_expsym_cmds_GCJ= - always_export_symbols_GCJ=no - export_symbols_cmds_GCJ='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' - # include_expsyms should be a list of space-separated symbols to be *always* - # included in the symbol list - include_expsyms_GCJ= - # exclude_expsyms can be an extended regexp of symbols to exclude - # it will be wrapped by ` (' and `)$', so one must not match beginning or - # end of line. Example: `a|bc|.*d.*' will exclude the symbols `a' and `bc', - # as well as any symbol that contains `d'. - exclude_expsyms_GCJ="_GLOBAL_OFFSET_TABLE_" - # Although _GLOBAL_OFFSET_TABLE_ is a valid symbol C name, most a.out - # platforms (ab)use it in PIC code, but their linkers get confused if - # the symbol is explicitly referenced. Since portable code cannot - # rely on this symbol name, it's probably fine to never include it in - # preloaded symbol tables. - extract_expsyms_cmds= - # Just being paranoid about ensuring that cc_basename is set. - for cc_temp in $compiler""; do - case $cc_temp in - compile | *[\\/]compile | ccache | *[\\/]ccache ) ;; - distcc | *[\\/]distcc | purify | *[\\/]purify ) ;; - \-*) ;; - *) break;; - esac -done -cc_basename=`$echo "X$cc_temp" | $Xsed -e 's%.*/%%' -e "s%^$host_alias-%%"` - - case $host_os in - cygwin* | mingw* | pw32*) - # FIXME: the MSVC++ port hasn't been tested in a loooong time - # When not using gcc, we currently assume that we are using - # Microsoft Visual C++. - if test "$GCC" != yes; then - with_gnu_ld=no - fi - ;; - interix*) - # we just hope/assume this is gcc and not c89 (= MSVC++) - with_gnu_ld=yes - ;; - openbsd*) - with_gnu_ld=no - ;; - esac - - ld_shlibs_GCJ=yes - if test "$with_gnu_ld" = yes; then - # If archive_cmds runs LD, not CC, wlarc should be empty - wlarc='${wl}' - - # Set some defaults for GNU ld with shared library support. These - # are reset later if shared libraries are not supported. Putting them - # here allows them to be overridden if necessary. - runpath_var=LD_RUN_PATH - hardcode_libdir_flag_spec_GCJ='${wl}--rpath ${wl}$libdir' - export_dynamic_flag_spec_GCJ='${wl}--export-dynamic' - # ancient GNU ld didn't support --whole-archive et. al. - if $LD --help 2>&1 | grep 'no-whole-archive' > /dev/null; then - whole_archive_flag_spec_GCJ="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' - else - whole_archive_flag_spec_GCJ= - fi - supports_anon_versioning=no - case `$LD -v 2>/dev/null` in - *\ [01].* | *\ 2.[0-9].* | *\ 2.10.*) ;; # catch versions < 2.11 - *\ 2.11.93.0.2\ *) supports_anon_versioning=yes ;; # RH7.3 ... - *\ 2.11.92.0.12\ *) supports_anon_versioning=yes ;; # Mandrake 8.2 ... - *\ 2.11.*) ;; # other 2.11 versions - *) supports_anon_versioning=yes ;; - esac - - # See if GNU ld supports shared libraries. - case $host_os in - aix3* | aix4* | aix5*) - # On AIX/PPC, the GNU linker is very broken - if test "$host_cpu" != ia64; then - ld_shlibs_GCJ=no - cat <&2 - -*** Warning: the GNU linker, at least up to release 2.9.1, is reported -*** to be unable to reliably create shared libraries on AIX. -*** Therefore, libtool is disabling shared libraries support. If you -*** really care for shared libraries, you may want to modify your PATH -*** so that a non-GNU linker is found, and then restart. - -EOF - fi - ;; - - amigaos*) - archive_cmds_GCJ='$rm $output_objdir/a2ixlibrary.data~$echo "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$echo "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$echo "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$echo "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' - hardcode_libdir_flag_spec_GCJ='-L$libdir' - hardcode_minus_L_GCJ=yes - - # Samuel A. Falvo II reports - # that the semantics of dynamic libraries on AmigaOS, at least up - # to version 4, is to share data among multiple programs linked - # with the same dynamic library. Since this doesn't match the - # behavior of shared libraries on other platforms, we can't use - # them. - ld_shlibs_GCJ=no - ;; - - beos*) - if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then - allow_undefined_flag_GCJ=unsupported - # Joseph Beckenbach says some releases of gcc - # support --undefined. This deserves some investigation. FIXME - archive_cmds_GCJ='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' - else - ld_shlibs_GCJ=no - fi - ;; - - cygwin* | mingw* | pw32*) - # _LT_AC_TAGVAR(hardcode_libdir_flag_spec, GCJ) is actually meaningless, - # as there is no search path for DLLs. - hardcode_libdir_flag_spec_GCJ='-L$libdir' - allow_undefined_flag_GCJ=unsupported - always_export_symbols_GCJ=no - enable_shared_with_static_runtimes_GCJ=yes - export_symbols_cmds_GCJ='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS][ ]/s/.*[ ]\([^ ]*\)/\1 DATA/'\'' -e '\''/^[AITW][ ]/s/.*[ ]//'\'' | sort | uniq > $export_symbols' - - if $LD --help 2>&1 | grep 'auto-import' > /dev/null; then - archive_cmds_GCJ='$CC -shared $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' - # If the export-symbols file already is a .def file (1st line - # is EXPORTS), use it as is; otherwise, prepend... - archive_expsym_cmds_GCJ='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then - cp $export_symbols $output_objdir/$soname.def; - else - echo EXPORTS > $output_objdir/$soname.def; - cat $export_symbols >> $output_objdir/$soname.def; - fi~ - $CC -shared $output_objdir/$soname.def $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' - else - ld_shlibs_GCJ=no - fi - ;; - - interix[3-9]*) - hardcode_direct_GCJ=no - hardcode_shlibpath_var_GCJ=no - hardcode_libdir_flag_spec_GCJ='${wl}-rpath,$libdir' - export_dynamic_flag_spec_GCJ='${wl}-E' - # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc. - # Instead, shared libraries are loaded at an image base (0x10000000 by - # default) and relocated if they conflict, which is a slow very memory - # consuming and fragmenting process. To avoid this, we pick a random, - # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link - # time. Moving up from 0x10000000 also allows more sbrk(2) space. - archive_cmds_GCJ='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' - archive_expsym_cmds_GCJ='sed "s,^,_," $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--retain-symbols-file,$output_objdir/$soname.expsym ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' - ;; - - gnu* | linux* | k*bsd*-gnu) - if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then - tmp_addflag= - case $cc_basename,$host_cpu in - pgcc*) # Portland Group C compiler - whole_archive_flag_spec_GCJ='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $echo \"$new_convenience\"` ${wl}--no-whole-archive' - tmp_addflag=' $pic_flag' - ;; - pgf77* | pgf90* | pgf95*) # Portland Group f77 and f90 compilers - whole_archive_flag_spec_GCJ='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $echo \"$new_convenience\"` ${wl}--no-whole-archive' - tmp_addflag=' $pic_flag -Mnomain' ;; - ecc*,ia64* | icc*,ia64*) # Intel C compiler on ia64 - tmp_addflag=' -i_dynamic' ;; - efc*,ia64* | ifort*,ia64*) # Intel Fortran compiler on ia64 - tmp_addflag=' -i_dynamic -nofor_main' ;; - ifc* | ifort*) # Intel Fortran compiler - tmp_addflag=' -nofor_main' ;; - esac - case `$CC -V 2>&1 | sed 5q` in - *Sun\ C*) # Sun C 5.9 - whole_archive_flag_spec_GCJ='${wl}--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; $echo \"$new_convenience\"` ${wl}--no-whole-archive' - tmp_sharedflag='-G' ;; - *Sun\ F*) # Sun Fortran 8.3 - tmp_sharedflag='-G' ;; - *) - tmp_sharedflag='-shared' ;; - esac - archive_cmds_GCJ='$CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' - - if test $supports_anon_versioning = yes; then - archive_expsym_cmds_GCJ='$echo "{ global:" > $output_objdir/$libname.ver~ - cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ - $echo "local: *; };" >> $output_objdir/$libname.ver~ - $CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib' - fi - else - ld_shlibs_GCJ=no - fi - ;; - - netbsd*) - if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then - archive_cmds_GCJ='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib' - wlarc= - else - archive_cmds_GCJ='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' - archive_expsym_cmds_GCJ='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' - fi - ;; - - solaris*) - if $LD -v 2>&1 | grep 'BFD 2\.8' > /dev/null; then - ld_shlibs_GCJ=no - cat <&2 - -*** Warning: The releases 2.8.* of the GNU linker cannot reliably -*** create shared libraries on Solaris systems. Therefore, libtool -*** is disabling shared libraries support. We urge you to upgrade GNU -*** binutils to release 2.9.1 or newer. Another option is to modify -*** your PATH or compiler configuration so that the native linker is -*** used, and then restart. - -EOF - elif $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then - archive_cmds_GCJ='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' - archive_expsym_cmds_GCJ='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' - else - ld_shlibs_GCJ=no - fi - ;; - - sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX*) - case `$LD -v 2>&1` in - *\ [01].* | *\ 2.[0-9].* | *\ 2.1[0-5].*) - ld_shlibs_GCJ=no - cat <<_LT_EOF 1>&2 - -*** Warning: Releases of the GNU linker prior to 2.16.91.0.3 can not -*** reliably create shared libraries on SCO systems. Therefore, libtool -*** is disabling shared libraries support. We urge you to upgrade GNU -*** binutils to release 2.16.91.0.3 or newer. Another option is to modify -*** your PATH or compiler configuration so that the native linker is -*** used, and then restart. - -_LT_EOF - ;; - *) - if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then - hardcode_libdir_flag_spec_GCJ='`test -z "$SCOABSPATH" && echo ${wl}-rpath,$libdir`' - archive_cmds_GCJ='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib' - archive_expsym_cmds_GCJ='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname,\${SCOABSPATH:+${install_libdir}/}$soname,-retain-symbols-file,$export_symbols -o $lib' - else - ld_shlibs_GCJ=no - fi - ;; - esac - ;; - - sunos4*) - archive_cmds_GCJ='$LD -assert pure-text -Bshareable -o $lib $libobjs $deplibs $linker_flags' - wlarc= - hardcode_direct_GCJ=yes - hardcode_shlibpath_var_GCJ=no - ;; - - *) - if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then - archive_cmds_GCJ='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' - archive_expsym_cmds_GCJ='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' - else - ld_shlibs_GCJ=no - fi - ;; - esac - - if test "$ld_shlibs_GCJ" = no; then - runpath_var= - hardcode_libdir_flag_spec_GCJ= - export_dynamic_flag_spec_GCJ= - whole_archive_flag_spec_GCJ= - fi - else - # PORTME fill in a description of your system's linker (not GNU ld) - case $host_os in - aix3*) - allow_undefined_flag_GCJ=unsupported - always_export_symbols_GCJ=yes - archive_expsym_cmds_GCJ='$LD -o $output_objdir/$soname $libobjs $deplibs $linker_flags -bE:$export_symbols -T512 -H512 -bM:SRE~$AR $AR_FLAGS $lib $output_objdir/$soname' - # Note: this linker hardcodes the directories in LIBPATH if there - # are no directories specified by -L. - hardcode_minus_L_GCJ=yes - if test "$GCC" = yes && test -z "$lt_prog_compiler_static"; then - # Neither direct hardcoding nor static linking is supported with a - # broken collect2. - hardcode_direct_GCJ=unsupported - fi - ;; - - aix4* | aix5*) - if test "$host_cpu" = ia64; then - # On IA64, the linker does run time linking by default, so we don't - # have to do anything special. - aix_use_runtimelinking=no - exp_sym_flag='-Bexport' - no_entry_flag="" - else - # If we're using GNU nm, then we don't want the "-C" option. - # -C means demangle to AIX nm, but means don't demangle with GNU nm - if $NM -V 2>&1 | grep 'GNU' > /dev/null; then - export_symbols_cmds_GCJ='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$2 == "T") || (\$2 == "D") || (\$2 == "B")) && (substr(\$3,1,1) != ".")) { print \$3 } }'\'' | sort -u > $export_symbols' - else - export_symbols_cmds_GCJ='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$2 == "T") || (\$2 == "D") || (\$2 == "B")) && (substr(\$3,1,1) != ".")) { print \$3 } }'\'' | sort -u > $export_symbols' - fi - aix_use_runtimelinking=no - - # Test if we are trying to use run time linking or normal - # AIX style linking. If -brtl is somewhere in LDFLAGS, we - # need to do runtime linking. - case $host_os in aix4.[23]|aix4.[23].*|aix5*) - for ld_flag in $LDFLAGS; do - if (test $ld_flag = "-brtl" || test $ld_flag = "-Wl,-brtl"); then - aix_use_runtimelinking=yes - break - fi - done - ;; - esac - - exp_sym_flag='-bexport' - no_entry_flag='-bnoentry' - fi - - # When large executables or shared objects are built, AIX ld can - # have problems creating the table of contents. If linking a library - # or program results in "error TOC overflow" add -mminimal-toc to - # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not - # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS. - - archive_cmds_GCJ='' - hardcode_direct_GCJ=yes - hardcode_libdir_separator_GCJ=':' - link_all_deplibs_GCJ=yes - - if test "$GCC" = yes; then - case $host_os in aix4.[012]|aix4.[012].*) - # We only want to do this on AIX 4.2 and lower, the check - # below for broken collect2 doesn't work under 4.3+ - collect2name=`${CC} -print-prog-name=collect2` - if test -f "$collect2name" && \ - strings "$collect2name" | grep resolve_lib_name >/dev/null - then - # We have reworked collect2 - : - else - # We have old collect2 - hardcode_direct_GCJ=unsupported - # It fails to find uninstalled libraries when the uninstalled - # path is not listed in the libpath. Setting hardcode_minus_L - # to unsupported forces relinking - hardcode_minus_L_GCJ=yes - hardcode_libdir_flag_spec_GCJ='-L$libdir' - hardcode_libdir_separator_GCJ= - fi - ;; - esac - shared_flag='-shared' - if test "$aix_use_runtimelinking" = yes; then - shared_flag="$shared_flag "'${wl}-G' - fi - else - # not using gcc - if test "$host_cpu" = ia64; then - # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release - # chokes on -Wl,-G. The following line is correct: - shared_flag='-G' - else - if test "$aix_use_runtimelinking" = yes; then - shared_flag='${wl}-G' - else - shared_flag='${wl}-bM:SRE' - fi - fi - fi - - # It seems that -bexpall does not export symbols beginning with - # underscore (_), so it is better to generate a list of symbols to export. - always_export_symbols_GCJ=yes - if test "$aix_use_runtimelinking" = yes; then - # Warning - without using the other runtime loading flags (-brtl), - # -berok will link without error, but may produce a broken library. - allow_undefined_flag_GCJ='-berok' - # Determine the default libpath from the value encoded in an empty executable. - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ - -int -main () -{ - - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext conftest$ac_exeext -if { (ac_try="$ac_link" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_link") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest$ac_exeext && - $as_test_x conftest$ac_exeext; then - -lt_aix_libpath_sed=' - /Import File Strings/,/^$/ { - /^0/ { - s/^0 *\(.*\)$/\1/ - p - } - }' -aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` -# Check for a 64-bit object if we didn't find anything. -if test -z "$aix_libpath"; then - aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` -fi -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - -fi - -rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ - conftest$ac_exeext conftest.$ac_ext -if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi - - hardcode_libdir_flag_spec_GCJ='${wl}-blibpath:$libdir:'"$aix_libpath" - archive_expsym_cmds_GCJ="\$CC"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then echo "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag" - else - if test "$host_cpu" = ia64; then - hardcode_libdir_flag_spec_GCJ='${wl}-R $libdir:/usr/lib:/lib' - allow_undefined_flag_GCJ="-z nodefs" - archive_expsym_cmds_GCJ="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$exp_sym_flag:\$export_symbols" - else - # Determine the default libpath from the value encoded in an empty executable. - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ - -int -main () -{ - - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext conftest$ac_exeext -if { (ac_try="$ac_link" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_link") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest$ac_exeext && - $as_test_x conftest$ac_exeext; then - -lt_aix_libpath_sed=' - /Import File Strings/,/^$/ { - /^0/ { - s/^0 *\(.*\)$/\1/ - p - } - }' -aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` -# Check for a 64-bit object if we didn't find anything. -if test -z "$aix_libpath"; then - aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` -fi -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - -fi - -rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ - conftest$ac_exeext conftest.$ac_ext -if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi - - hardcode_libdir_flag_spec_GCJ='${wl}-blibpath:$libdir:'"$aix_libpath" - # Warning - without using the other run time loading flags, - # -berok will link without error, but may produce a broken library. - no_undefined_flag_GCJ=' ${wl}-bernotok' - allow_undefined_flag_GCJ=' ${wl}-berok' - # Exported symbols can be pulled into shared objects from archives - whole_archive_flag_spec_GCJ='$convenience' - archive_cmds_need_lc_GCJ=yes - # This is similar to how AIX traditionally builds its shared libraries. - archive_expsym_cmds_GCJ="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs ${wl}-bnoentry $compiler_flags ${wl}-bE:$export_symbols${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname' - fi - fi - ;; - - amigaos*) - archive_cmds_GCJ='$rm $output_objdir/a2ixlibrary.data~$echo "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$echo "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$echo "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$echo "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' - hardcode_libdir_flag_spec_GCJ='-L$libdir' - hardcode_minus_L_GCJ=yes - # see comment about different semantics on the GNU ld section - ld_shlibs_GCJ=no - ;; - - bsdi[45]*) - export_dynamic_flag_spec_GCJ=-rdynamic - ;; - - cygwin* | mingw* | pw32*) - # When not using gcc, we currently assume that we are using - # Microsoft Visual C++. - # hardcode_libdir_flag_spec is actually meaningless, as there is - # no search path for DLLs. - hardcode_libdir_flag_spec_GCJ=' ' - allow_undefined_flag_GCJ=unsupported - # Tell ltmain to make .lib files, not .a files. - libext=lib - # Tell ltmain to make .dll files, not .so files. - shrext_cmds=".dll" - # FIXME: Setting linknames here is a bad hack. - archive_cmds_GCJ='$CC -o $lib $libobjs $compiler_flags `echo "$deplibs" | $SED -e '\''s/ -lc$//'\''` -link -dll~linknames=' - # The linker will automatically build a .lib file if we build a DLL. - old_archive_From_new_cmds_GCJ='true' - # FIXME: Should let the user specify the lib program. - old_archive_cmds_GCJ='lib -OUT:$oldlib$oldobjs$old_deplibs' - fix_srcfile_path_GCJ='`cygpath -w "$srcfile"`' - enable_shared_with_static_runtimes_GCJ=yes - ;; - - darwin* | rhapsody*) - case $host_os in - rhapsody* | darwin1.[012]) - allow_undefined_flag_GCJ='${wl}-undefined ${wl}suppress' - ;; - *) # Darwin 1.3 on - if test -z ${MACOSX_DEPLOYMENT_TARGET} ; then - allow_undefined_flag_GCJ='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' - else - case ${MACOSX_DEPLOYMENT_TARGET} in - 10.[012]) - allow_undefined_flag_GCJ='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' - ;; - 10.*) - allow_undefined_flag_GCJ='${wl}-undefined ${wl}dynamic_lookup' - ;; - esac - fi - ;; - esac - archive_cmds_need_lc_GCJ=no - hardcode_direct_GCJ=no - hardcode_automatic_GCJ=yes - hardcode_shlibpath_var_GCJ=unsupported - whole_archive_flag_spec_GCJ='' - link_all_deplibs_GCJ=yes - if test "$GCC" = yes ; then - output_verbose_link_cmd='echo' - archive_cmds_GCJ='$CC -dynamiclib $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags -install_name $rpath/$soname $verstring' - module_cmds_GCJ='$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags' - # Don't fix this by using the ld -exported_symbols_list flag, it doesn't exist in older darwin lds - archive_expsym_cmds_GCJ='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -dynamiclib $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags -install_name $rpath/$soname $verstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' - module_expsym_cmds_GCJ='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' - else - case $cc_basename in - xlc*) - output_verbose_link_cmd='echo' - archive_cmds_GCJ='$CC -qmkshrobj $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-install_name ${wl}`echo $rpath/$soname` $xlcverstring' - module_cmds_GCJ='$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags' - # Don't fix this by using the ld -exported_symbols_list flag, it doesn't exist in older darwin lds - archive_expsym_cmds_GCJ='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -qmkshrobj $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-install_name ${wl}$rpath/$soname $xlcverstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' - module_expsym_cmds_GCJ='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' - ;; - *) - ld_shlibs_GCJ=no - ;; - esac - fi - ;; - - dgux*) - archive_cmds_GCJ='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' - hardcode_libdir_flag_spec_GCJ='-L$libdir' - hardcode_shlibpath_var_GCJ=no - ;; - - freebsd1*) - ld_shlibs_GCJ=no - ;; - - # FreeBSD 2.2.[012] allows us to include c++rt0.o to get C++ constructor - # support. Future versions do this automatically, but an explicit c++rt0.o - # does not break anything, and helps significantly (at the cost of a little - # extra space). - freebsd2.2*) - archive_cmds_GCJ='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags /usr/lib/c++rt0.o' - hardcode_libdir_flag_spec_GCJ='-R$libdir' - hardcode_direct_GCJ=yes - hardcode_shlibpath_var_GCJ=no - ;; - - # Unfortunately, older versions of FreeBSD 2 do not have this feature. - freebsd2*) - archive_cmds_GCJ='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' - hardcode_direct_GCJ=yes - hardcode_minus_L_GCJ=yes - hardcode_shlibpath_var_GCJ=no - ;; - - # FreeBSD 3 and greater uses gcc -shared to do shared libraries. - freebsd* | dragonfly*) - archive_cmds_GCJ='$CC -shared -o $lib $libobjs $deplibs $compiler_flags' - hardcode_libdir_flag_spec_GCJ='-R$libdir' - hardcode_direct_GCJ=yes - hardcode_shlibpath_var_GCJ=no - ;; - - hpux9*) - if test "$GCC" = yes; then - archive_cmds_GCJ='$rm $output_objdir/$soname~$CC -shared -fPIC ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' - else - archive_cmds_GCJ='$rm $output_objdir/$soname~$LD -b +b $install_libdir -o $output_objdir/$soname $libobjs $deplibs $linker_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' - fi - hardcode_libdir_flag_spec_GCJ='${wl}+b ${wl}$libdir' - hardcode_libdir_separator_GCJ=: - hardcode_direct_GCJ=yes - - # hardcode_minus_L: Not really in the search PATH, - # but as the default location of the library. - hardcode_minus_L_GCJ=yes - export_dynamic_flag_spec_GCJ='${wl}-E' - ;; - - hpux10*) - if test "$GCC" = yes -a "$with_gnu_ld" = no; then - archive_cmds_GCJ='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' - else - archive_cmds_GCJ='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags' - fi - if test "$with_gnu_ld" = no; then - hardcode_libdir_flag_spec_GCJ='${wl}+b ${wl}$libdir' - hardcode_libdir_separator_GCJ=: - - hardcode_direct_GCJ=yes - export_dynamic_flag_spec_GCJ='${wl}-E' - - # hardcode_minus_L: Not really in the search PATH, - # but as the default location of the library. - hardcode_minus_L_GCJ=yes - fi - ;; - - hpux11*) - if test "$GCC" = yes -a "$with_gnu_ld" = no; then - case $host_cpu in - hppa*64*) - archive_cmds_GCJ='$CC -shared ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' - ;; - ia64*) - archive_cmds_GCJ='$CC -shared ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' - ;; - *) - archive_cmds_GCJ='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' - ;; - esac - else - case $host_cpu in - hppa*64*) - archive_cmds_GCJ='$CC -b ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' - ;; - ia64*) - archive_cmds_GCJ='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' - ;; - *) - archive_cmds_GCJ='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' - ;; - esac - fi - if test "$with_gnu_ld" = no; then - hardcode_libdir_flag_spec_GCJ='${wl}+b ${wl}$libdir' - hardcode_libdir_separator_GCJ=: - - case $host_cpu in - hppa*64*|ia64*) - hardcode_libdir_flag_spec_ld_GCJ='+b $libdir' - hardcode_direct_GCJ=no - hardcode_shlibpath_var_GCJ=no - ;; - *) - hardcode_direct_GCJ=yes - export_dynamic_flag_spec_GCJ='${wl}-E' - - # hardcode_minus_L: Not really in the search PATH, - # but as the default location of the library. - hardcode_minus_L_GCJ=yes - ;; - esac - fi - ;; - - irix5* | irix6* | nonstopux*) - if test "$GCC" = yes; then - archive_cmds_GCJ='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' - else - archive_cmds_GCJ='$LD -shared $libobjs $deplibs $linker_flags -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib' - hardcode_libdir_flag_spec_ld_GCJ='-rpath $libdir' - fi - hardcode_libdir_flag_spec_GCJ='${wl}-rpath ${wl}$libdir' - hardcode_libdir_separator_GCJ=: - link_all_deplibs_GCJ=yes - ;; - - netbsd*) - if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then - archive_cmds_GCJ='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' # a.out - else - archive_cmds_GCJ='$LD -shared -o $lib $libobjs $deplibs $linker_flags' # ELF - fi - hardcode_libdir_flag_spec_GCJ='-R$libdir' - hardcode_direct_GCJ=yes - hardcode_shlibpath_var_GCJ=no - ;; - - newsos6) - archive_cmds_GCJ='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' - hardcode_direct_GCJ=yes - hardcode_libdir_flag_spec_GCJ='${wl}-rpath ${wl}$libdir' - hardcode_libdir_separator_GCJ=: - hardcode_shlibpath_var_GCJ=no - ;; - - openbsd*) - if test -f /usr/libexec/ld.so; then - hardcode_direct_GCJ=yes - hardcode_shlibpath_var_GCJ=no - if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then - archive_cmds_GCJ='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' - archive_expsym_cmds_GCJ='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-retain-symbols-file,$export_symbols' - hardcode_libdir_flag_spec_GCJ='${wl}-rpath,$libdir' - export_dynamic_flag_spec_GCJ='${wl}-E' - else - case $host_os in - openbsd[01].* | openbsd2.[0-7] | openbsd2.[0-7].*) - archive_cmds_GCJ='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' - hardcode_libdir_flag_spec_GCJ='-R$libdir' - ;; - *) - archive_cmds_GCJ='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' - hardcode_libdir_flag_spec_GCJ='${wl}-rpath,$libdir' - ;; - esac - fi - else - ld_shlibs_GCJ=no - fi - ;; - - os2*) - hardcode_libdir_flag_spec_GCJ='-L$libdir' - hardcode_minus_L_GCJ=yes - allow_undefined_flag_GCJ=unsupported - archive_cmds_GCJ='$echo "LIBRARY $libname INITINSTANCE" > $output_objdir/$libname.def~$echo "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~$echo DATA >> $output_objdir/$libname.def~$echo " SINGLE NONSHARED" >> $output_objdir/$libname.def~$echo EXPORTS >> $output_objdir/$libname.def~emxexp $libobjs >> $output_objdir/$libname.def~$CC -Zdll -Zcrtdll -o $lib $libobjs $deplibs $compiler_flags $output_objdir/$libname.def' - old_archive_From_new_cmds_GCJ='emximp -o $output_objdir/$libname.a $output_objdir/$libname.def' - ;; - - osf3*) - if test "$GCC" = yes; then - allow_undefined_flag_GCJ=' ${wl}-expect_unresolved ${wl}\*' - archive_cmds_GCJ='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' - else - allow_undefined_flag_GCJ=' -expect_unresolved \*' - archive_cmds_GCJ='$LD -shared${allow_undefined_flag} $libobjs $deplibs $linker_flags -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib' - fi - hardcode_libdir_flag_spec_GCJ='${wl}-rpath ${wl}$libdir' - hardcode_libdir_separator_GCJ=: - ;; - - osf4* | osf5*) # as osf3* with the addition of -msym flag - if test "$GCC" = yes; then - allow_undefined_flag_GCJ=' ${wl}-expect_unresolved ${wl}\*' - archive_cmds_GCJ='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' - hardcode_libdir_flag_spec_GCJ='${wl}-rpath ${wl}$libdir' - else - allow_undefined_flag_GCJ=' -expect_unresolved \*' - archive_cmds_GCJ='$LD -shared${allow_undefined_flag} $libobjs $deplibs $linker_flags -msym -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib' - archive_expsym_cmds_GCJ='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done; echo "-hidden">> $lib.exp~ - $LD -shared${allow_undefined_flag} -input $lib.exp $linker_flags $libobjs $deplibs -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib~$rm $lib.exp' - - # Both c and cxx compiler support -rpath directly - hardcode_libdir_flag_spec_GCJ='-rpath $libdir' - fi - hardcode_libdir_separator_GCJ=: - ;; - - solaris*) - no_undefined_flag_GCJ=' -z text' - if test "$GCC" = yes; then - wlarc='${wl}' - archive_cmds_GCJ='$CC -shared ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' - archive_expsym_cmds_GCJ='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~ - $CC -shared ${wl}-M ${wl}$lib.exp ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags~$rm $lib.exp' - else - wlarc='' - archive_cmds_GCJ='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linker_flags' - archive_expsym_cmds_GCJ='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~ - $LD -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$rm $lib.exp' - fi - hardcode_libdir_flag_spec_GCJ='-R$libdir' - hardcode_shlibpath_var_GCJ=no - case $host_os in - solaris2.[0-5] | solaris2.[0-5].*) ;; - *) - # The compiler driver will combine and reorder linker options, - # but understands `-z linker_flag'. GCC discards it without `$wl', - # but is careful enough not to reorder. - # Supported since Solaris 2.6 (maybe 2.5.1?) - if test "$GCC" = yes; then - whole_archive_flag_spec_GCJ='${wl}-z ${wl}allextract$convenience ${wl}-z ${wl}defaultextract' - else - whole_archive_flag_spec_GCJ='-z allextract$convenience -z defaultextract' - fi - ;; - esac - link_all_deplibs_GCJ=yes - ;; - - sunos4*) - if test "x$host_vendor" = xsequent; then - # Use $CC to link under sequent, because it throws in some extra .o - # files that make .init and .fini sections work. - archive_cmds_GCJ='$CC -G ${wl}-h $soname -o $lib $libobjs $deplibs $compiler_flags' - else - archive_cmds_GCJ='$LD -assert pure-text -Bstatic -o $lib $libobjs $deplibs $linker_flags' - fi - hardcode_libdir_flag_spec_GCJ='-L$libdir' - hardcode_direct_GCJ=yes - hardcode_minus_L_GCJ=yes - hardcode_shlibpath_var_GCJ=no - ;; - - sysv4) - case $host_vendor in - sni) - archive_cmds_GCJ='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' - hardcode_direct_GCJ=yes # is this really true??? - ;; - siemens) - ## LD is ld it makes a PLAMLIB - ## CC just makes a GrossModule. - archive_cmds_GCJ='$LD -G -o $lib $libobjs $deplibs $linker_flags' - reload_cmds_GCJ='$CC -r -o $output$reload_objs' - hardcode_direct_GCJ=no - ;; - motorola) - archive_cmds_GCJ='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' - hardcode_direct_GCJ=no #Motorola manual says yes, but my tests say they lie - ;; - esac - runpath_var='LD_RUN_PATH' - hardcode_shlibpath_var_GCJ=no - ;; - - sysv4.3*) - archive_cmds_GCJ='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' - hardcode_shlibpath_var_GCJ=no - export_dynamic_flag_spec_GCJ='-Bexport' - ;; - - sysv4*MP*) - if test -d /usr/nec; then - archive_cmds_GCJ='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' - hardcode_shlibpath_var_GCJ=no - runpath_var=LD_RUN_PATH - hardcode_runpath_var=yes - ld_shlibs_GCJ=yes - fi - ;; - - sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[01].[10]* | unixware7* | sco3.2v5.0.[024]*) - no_undefined_flag_GCJ='${wl}-z,text' - archive_cmds_need_lc_GCJ=no - hardcode_shlibpath_var_GCJ=no - runpath_var='LD_RUN_PATH' - - if test "$GCC" = yes; then - archive_cmds_GCJ='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - archive_expsym_cmds_GCJ='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - else - archive_cmds_GCJ='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - archive_expsym_cmds_GCJ='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - fi - ;; - - sysv5* | sco3.2v5* | sco5v6*) - # Note: We can NOT use -z defs as we might desire, because we do not - # link with -lc, and that would cause any symbols used from libc to - # always be unresolved, which means just about no library would - # ever link correctly. If we're not using GNU ld we use -z text - # though, which does catch some bad symbols but isn't as heavy-handed - # as -z defs. - no_undefined_flag_GCJ='${wl}-z,text' - allow_undefined_flag_GCJ='${wl}-z,nodefs' - archive_cmds_need_lc_GCJ=no - hardcode_shlibpath_var_GCJ=no - hardcode_libdir_flag_spec_GCJ='`test -z "$SCOABSPATH" && echo ${wl}-R,$libdir`' - hardcode_libdir_separator_GCJ=':' - link_all_deplibs_GCJ=yes - export_dynamic_flag_spec_GCJ='${wl}-Bexport' - runpath_var='LD_RUN_PATH' - - if test "$GCC" = yes; then - archive_cmds_GCJ='$CC -shared ${wl}-h,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags' - archive_expsym_cmds_GCJ='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags' - else - archive_cmds_GCJ='$CC -G ${wl}-h,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags' - archive_expsym_cmds_GCJ='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags' - fi - ;; - - uts4*) - archive_cmds_GCJ='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' - hardcode_libdir_flag_spec_GCJ='-L$libdir' - hardcode_shlibpath_var_GCJ=no - ;; - - *) - ld_shlibs_GCJ=no - ;; - esac - fi - -{ echo "$as_me:$LINENO: result: $ld_shlibs_GCJ" >&5 -echo "${ECHO_T}$ld_shlibs_GCJ" >&6; } -test "$ld_shlibs_GCJ" = no && can_build_shared=no - -# -# Do we need to explicitly link libc? -# -case "x$archive_cmds_need_lc_GCJ" in -x|xyes) - # Assume -lc should be added - archive_cmds_need_lc_GCJ=yes - - if test "$enable_shared" = yes && test "$GCC" = yes; then - case $archive_cmds_GCJ in - *'~'*) - # FIXME: we may have to deal with multi-command sequences. - ;; - '$CC '*) - # Test whether the compiler implicitly links with -lc since on some - # systems, -lgcc has to come before -lc. If gcc already passes -lc - # to ld, don't add -lc before -lgcc. - { echo "$as_me:$LINENO: checking whether -lc should be explicitly linked in" >&5 -echo $ECHO_N "checking whether -lc should be explicitly linked in... $ECHO_C" >&6; } - $rm conftest* - echo "$lt_simple_compile_test_code" > conftest.$ac_ext - - if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } 2>conftest.err; then - soname=conftest - lib=conftest - libobjs=conftest.$ac_objext - deplibs= - wl=$lt_prog_compiler_wl_GCJ - pic_flag=$lt_prog_compiler_pic_GCJ - compiler_flags=-v - linker_flags=-v - verstring= - output_objdir=. - libname=conftest - lt_save_allow_undefined_flag=$allow_undefined_flag_GCJ - allow_undefined_flag_GCJ= - if { (eval echo "$as_me:$LINENO: \"$archive_cmds_GCJ 2\>\&1 \| grep \" -lc \" \>/dev/null 2\>\&1\"") >&5 - (eval $archive_cmds_GCJ 2\>\&1 \| grep \" -lc \" \>/dev/null 2\>\&1) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } - then - archive_cmds_need_lc_GCJ=no - else - archive_cmds_need_lc_GCJ=yes - fi - allow_undefined_flag_GCJ=$lt_save_allow_undefined_flag - else - cat conftest.err 1>&5 - fi - $rm conftest* - { echo "$as_me:$LINENO: result: $archive_cmds_need_lc_GCJ" >&5 -echo "${ECHO_T}$archive_cmds_need_lc_GCJ" >&6; } - ;; - esac - fi - ;; -esac - -{ echo "$as_me:$LINENO: checking dynamic linker characteristics" >&5 -echo $ECHO_N "checking dynamic linker characteristics... $ECHO_C" >&6; } -library_names_spec= -libname_spec='lib$name' -soname_spec= -shrext_cmds=".so" -postinstall_cmds= -postuninstall_cmds= -finish_cmds= -finish_eval= -shlibpath_var= -shlibpath_overrides_runpath=unknown -version_type=none -dynamic_linker="$host_os ld.so" -sys_lib_dlsearch_path_spec="/lib /usr/lib" - -need_lib_prefix=unknown -hardcode_into_libs=no - -# when you set need_version to no, make sure it does not cause -set_version -# flags to be left without arguments -need_version=unknown - -case $host_os in -aix3*) - version_type=linux - library_names_spec='${libname}${release}${shared_ext}$versuffix $libname.a' - shlibpath_var=LIBPATH - - # AIX 3 has no versioning support, so we append a major version to the name. - soname_spec='${libname}${release}${shared_ext}$major' - ;; - -aix4* | aix5*) - version_type=linux - need_lib_prefix=no - need_version=no - hardcode_into_libs=yes - if test "$host_cpu" = ia64; then - # AIX 5 supports IA64 - library_names_spec='${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext}$versuffix $libname${shared_ext}' - shlibpath_var=LD_LIBRARY_PATH - else - # With GCC up to 2.95.x, collect2 would create an import file - # for dependence libraries. The import file would start with - # the line `#! .'. This would cause the generated library to - # depend on `.', always an invalid library. This was fixed in - # development snapshots of GCC prior to 3.0. - case $host_os in - aix4 | aix4.[01] | aix4.[01].*) - if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)' - echo ' yes ' - echo '#endif'; } | ${CC} -E - | grep yes > /dev/null; then - : - else - can_build_shared=no - fi - ;; - esac - # AIX (on Power*) has no versioning support, so currently we can not hardcode correct - # soname into executable. Probably we can add versioning support to - # collect2, so additional links can be useful in future. - if test "$aix_use_runtimelinking" = yes; then - # If using run time linking (on AIX 4.2 or later) use lib.so - # instead of lib.a to let people know that these are not - # typical AIX shared libraries. - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - else - # We preserve .a as extension for shared libraries through AIX4.2 - # and later when we are not doing run time linking. - library_names_spec='${libname}${release}.a $libname.a' - soname_spec='${libname}${release}${shared_ext}$major' - fi - shlibpath_var=LIBPATH - fi - ;; - -amigaos*) - library_names_spec='$libname.ixlibrary $libname.a' - # Create ${libname}_ixlibrary.a entries in /sys/libs. - finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`$echo "X$lib" | $Xsed -e '\''s%^.*/\([^/]*\)\.ixlibrary$%\1%'\''`; test $rm /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done' - ;; - -beos*) - library_names_spec='${libname}${shared_ext}' - dynamic_linker="$host_os ld.so" - shlibpath_var=LIBRARY_PATH - ;; - -bsdi[45]*) - version_type=linux - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir' - shlibpath_var=LD_LIBRARY_PATH - sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib" - sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib" - # the default ld.so.conf also contains /usr/contrib/lib and - # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow - # libtool to hard-code these into programs - ;; - -cygwin* | mingw* | pw32*) - version_type=windows - shrext_cmds=".dll" - need_version=no - need_lib_prefix=no - - case $GCC,$host_os in - yes,cygwin* | yes,mingw* | yes,pw32*) - library_names_spec='$libname.dll.a' - # DLL is installed to $(libdir)/../bin by postinstall_cmds - postinstall_cmds='base_file=`basename \${file}`~ - dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i;echo \$dlname'\''`~ - dldir=$destdir/`dirname \$dlpath`~ - test -d \$dldir || mkdir -p \$dldir~ - $install_prog $dir/$dlname \$dldir/$dlname~ - chmod a+x \$dldir/$dlname' - postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ - dlpath=$dir/\$dldll~ - $rm \$dlpath' - shlibpath_overrides_runpath=yes - - case $host_os in - cygwin*) - # Cygwin DLLs use 'cyg' prefix rather than 'lib' - soname_spec='`echo ${libname} | sed -e 's/^lib/cyg/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' - sys_lib_search_path_spec="/usr/lib /lib/w32api /lib /usr/local/lib" - ;; - mingw*) - # MinGW DLLs use traditional 'lib' prefix - soname_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' - sys_lib_search_path_spec=`$CC -print-search-dirs | grep "^libraries:" | $SED -e "s/^libraries://" -e "s,=/,/,g"` - if echo "$sys_lib_search_path_spec" | grep ';[c-zC-Z]:/' >/dev/null; then - # It is most probably a Windows format PATH printed by - # mingw gcc, but we are running on Cygwin. Gcc prints its search - # path with ; separators, and with drive letters. We can handle the - # drive letters (cygwin fileutils understands them), so leave them, - # especially as we might pass files found there to a mingw objdump, - # which wouldn't understand a cygwinified path. Ahh. - sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'` - else - sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` - fi - ;; - pw32*) - # pw32 DLLs use 'pw' prefix rather than 'lib' - library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' - ;; - esac - ;; - - *) - library_names_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext} $libname.lib' - ;; - esac - dynamic_linker='Win32 ld.exe' - # FIXME: first we should search . and the directory the executable is in - shlibpath_var=PATH - ;; - -darwin* | rhapsody*) - dynamic_linker="$host_os dyld" - version_type=darwin - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${versuffix}$shared_ext ${libname}${release}${major}$shared_ext ${libname}$shared_ext' - soname_spec='${libname}${release}${major}$shared_ext' - shlibpath_overrides_runpath=yes - shlibpath_var=DYLD_LIBRARY_PATH - shrext_cmds='`test .$module = .yes && echo .so || echo .dylib`' - - sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib' - ;; - -dgux*) - version_type=linux - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname$shared_ext' - soname_spec='${libname}${release}${shared_ext}$major' - shlibpath_var=LD_LIBRARY_PATH - ;; - -freebsd1*) - dynamic_linker=no - ;; - -freebsd* | dragonfly*) - # DragonFly does not have aout. When/if they implement a new - # versioning mechanism, adjust this. - if test -x /usr/bin/objformat; then - objformat=`/usr/bin/objformat` - else - case $host_os in - freebsd[123]*) objformat=aout ;; - *) objformat=elf ;; - esac - fi - version_type=freebsd-$objformat - case $version_type in - freebsd-elf*) - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' - need_version=no - need_lib_prefix=no - ;; - freebsd-*) - library_names_spec='${libname}${release}${shared_ext}$versuffix $libname${shared_ext}$versuffix' - need_version=yes - ;; - esac - shlibpath_var=LD_LIBRARY_PATH - case $host_os in - freebsd2*) - shlibpath_overrides_runpath=yes - ;; - freebsd3.[01]* | freebsdelf3.[01]*) - shlibpath_overrides_runpath=yes - hardcode_into_libs=yes - ;; - freebsd3.[2-9]* | freebsdelf3.[2-9]* | \ - freebsd4.[0-5] | freebsdelf4.[0-5] | freebsd4.1.1 | freebsdelf4.1.1) - shlibpath_overrides_runpath=no - hardcode_into_libs=yes - ;; - *) # from 4.6 on, and DragonFly - shlibpath_overrides_runpath=yes - hardcode_into_libs=yes - ;; - esac - ;; - -gnu*) - version_type=linux - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - shlibpath_var=LD_LIBRARY_PATH - hardcode_into_libs=yes - ;; - -hpux9* | hpux10* | hpux11*) - # Give a soname corresponding to the major version so that dld.sl refuses to - # link against other versions. - version_type=sunos - need_lib_prefix=no - need_version=no - case $host_cpu in - ia64*) - shrext_cmds='.so' - hardcode_into_libs=yes - dynamic_linker="$host_os dld.so" - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - if test "X$HPUX_IA64_MODE" = X32; then - sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib" - else - sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64" - fi - sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec - ;; - hppa*64*) - shrext_cmds='.sl' - hardcode_into_libs=yes - dynamic_linker="$host_os dld.sl" - shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH - shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64" - sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec - ;; - *) - shrext_cmds='.sl' - dynamic_linker="$host_os dld.sl" - shlibpath_var=SHLIB_PATH - shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - ;; - esac - # HP-UX runs *really* slowly unless shared libraries are mode 555. - postinstall_cmds='chmod 555 $lib' - ;; - -interix[3-9]*) - version_type=linux - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - dynamic_linker='Interix 3.x ld.so.1 (PE, like ELF)' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=no - hardcode_into_libs=yes - ;; - -irix5* | irix6* | nonstopux*) - case $host_os in - nonstopux*) version_type=nonstopux ;; - *) - if test "$lt_cv_prog_gnu_ld" = yes; then - version_type=linux - else - version_type=irix - fi ;; - esac - need_lib_prefix=no - need_version=no - soname_spec='${libname}${release}${shared_ext}$major' - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext} $libname${shared_ext}' - case $host_os in - irix5* | nonstopux*) - libsuff= shlibsuff= - ;; - *) - case $LD in # libtool.m4 will add one of these switches to LD - *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ") - libsuff= shlibsuff= libmagic=32-bit;; - *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ") - libsuff=32 shlibsuff=N32 libmagic=N32;; - *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ") - libsuff=64 shlibsuff=64 libmagic=64-bit;; - *) libsuff= shlibsuff= libmagic=never-match;; - esac - ;; - esac - shlibpath_var=LD_LIBRARY${shlibsuff}_PATH - shlibpath_overrides_runpath=no - sys_lib_search_path_spec="/usr/lib${libsuff} /lib${libsuff} /usr/local/lib${libsuff}" - sys_lib_dlsearch_path_spec="/usr/lib${libsuff} /lib${libsuff}" - hardcode_into_libs=yes - ;; - -# No shared lib support for Linux oldld, aout, or coff. -linux*oldld* | linux*aout* | linux*coff*) - dynamic_linker=no - ;; - -# This must be Linux ELF. -linux* | k*bsd*-gnu) - version_type=linux - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=no - # This implies no fast_install, which is unacceptable. - # Some rework will be needed to allow for fast_install - # before this can be enabled. - hardcode_into_libs=yes - sys_lib_search_path_spec="/usr/lib${libsuff} /lib${libsuff} /usr/local/lib${libsuff}" - sys_lib_dlsearch_path_spec="/usr/lib${libsuff} /lib${libsuff}" - - # Append ld.so.conf contents to the search path - if test -f /etc/ld.so.conf; then - lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s 2>/dev/null", \$2)); skip = 1; } { if (!skip) print \$0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;/^[ ]*hwcap[ ]/d;s/[:, ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;/^$/d' | tr '\n' ' '` - sys_lib_dlsearch_path_spec="$sys_lib_dlsearch_path_spec $lt_ld_extra" - fi - - # We used to test for /lib/ld.so.1 and disable shared libraries on - # powerpc, because MkLinux only supported shared libraries with the - # GNU dynamic linker. Since this was broken with cross compilers, - # most powerpc-linux boxes support dynamic linking these days and - # people can always --disable-shared, the test was removed, and we - # assume the GNU/Linux dynamic linker is in use. - dynamic_linker='GNU/Linux ld.so' - ;; - -netbsd*) - version_type=sunos - need_lib_prefix=no - need_version=no - if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' - finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' - dynamic_linker='NetBSD (a.out) ld.so' - else - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - dynamic_linker='NetBSD ld.elf_so' - fi - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=yes - hardcode_into_libs=yes - ;; - -newsos6) - version_type=linux - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=yes - ;; - -nto-qnx*) - version_type=linux - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=yes - ;; - -openbsd*) - version_type=sunos - sys_lib_dlsearch_path_spec="/usr/lib" - need_lib_prefix=no - # Some older versions of OpenBSD (3.3 at least) *do* need versioned libs. - case $host_os in - openbsd3.3 | openbsd3.3.*) need_version=yes ;; - *) need_version=no ;; - esac - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' - finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' - shlibpath_var=LD_LIBRARY_PATH - if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then - case $host_os in - openbsd2.[89] | openbsd2.[89].*) - shlibpath_overrides_runpath=no - ;; - *) - shlibpath_overrides_runpath=yes - ;; - esac - else - shlibpath_overrides_runpath=yes - fi - ;; - -os2*) - libname_spec='$name' - shrext_cmds=".dll" - need_lib_prefix=no - library_names_spec='$libname${shared_ext} $libname.a' - dynamic_linker='OS/2 ld.exe' - shlibpath_var=LIBPATH - ;; - -osf3* | osf4* | osf5*) - version_type=osf - need_lib_prefix=no - need_version=no - soname_spec='${libname}${release}${shared_ext}$major' - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - shlibpath_var=LD_LIBRARY_PATH - sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib" - sys_lib_dlsearch_path_spec="$sys_lib_search_path_spec" - ;; - -rdos*) - dynamic_linker=no - ;; - -solaris*) - version_type=linux - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=yes - hardcode_into_libs=yes - # ldd complains unless libraries are executable - postinstall_cmds='chmod +x $lib' - ;; - -sunos4*) - version_type=sunos - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' - finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=yes - if test "$with_gnu_ld" = yes; then - need_lib_prefix=no - fi - need_version=yes - ;; - -sysv4 | sysv4.3*) - version_type=linux - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - shlibpath_var=LD_LIBRARY_PATH - case $host_vendor in - sni) - shlibpath_overrides_runpath=no - need_lib_prefix=no - export_dynamic_flag_spec='${wl}-Blargedynsym' - runpath_var=LD_RUN_PATH - ;; - siemens) - need_lib_prefix=no - ;; - motorola) - need_lib_prefix=no - need_version=no - shlibpath_overrides_runpath=no - sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib' - ;; - esac - ;; - -sysv4*MP*) - if test -d /usr/nec ;then - version_type=linux - library_names_spec='$libname${shared_ext}.$versuffix $libname${shared_ext}.$major $libname${shared_ext}' - soname_spec='$libname${shared_ext}.$major' - shlibpath_var=LD_LIBRARY_PATH - fi - ;; - -sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) - version_type=freebsd-elf - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - shlibpath_var=LD_LIBRARY_PATH - hardcode_into_libs=yes - if test "$with_gnu_ld" = yes; then - sys_lib_search_path_spec='/usr/local/lib /usr/gnu/lib /usr/ccs/lib /usr/lib /lib' - shlibpath_overrides_runpath=no - else - sys_lib_search_path_spec='/usr/ccs/lib /usr/lib' - shlibpath_overrides_runpath=yes - case $host_os in - sco3.2v5*) - sys_lib_search_path_spec="$sys_lib_search_path_spec /lib" - ;; - esac - fi - sys_lib_dlsearch_path_spec='/usr/lib' - ;; - -uts4*) - version_type=linux - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - shlibpath_var=LD_LIBRARY_PATH - ;; - -*) - dynamic_linker=no - ;; -esac -{ echo "$as_me:$LINENO: result: $dynamic_linker" >&5 -echo "${ECHO_T}$dynamic_linker" >&6; } -test "$dynamic_linker" = no && can_build_shared=no - -variables_saved_for_relink="PATH $shlibpath_var $runpath_var" -if test "$GCC" = yes; then - variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH" -fi - -{ echo "$as_me:$LINENO: checking how to hardcode library paths into programs" >&5 -echo $ECHO_N "checking how to hardcode library paths into programs... $ECHO_C" >&6; } -hardcode_action_GCJ= -if test -n "$hardcode_libdir_flag_spec_GCJ" || \ - test -n "$runpath_var_GCJ" || \ - test "X$hardcode_automatic_GCJ" = "Xyes" ; then - - # We can hardcode non-existent directories. - if test "$hardcode_direct_GCJ" != no && - # If the only mechanism to avoid hardcoding is shlibpath_var, we - # have to relink, otherwise we might link with an installed library - # when we should be linking with a yet-to-be-installed one - ## test "$_LT_AC_TAGVAR(hardcode_shlibpath_var, GCJ)" != no && - test "$hardcode_minus_L_GCJ" != no; then - # Linking always hardcodes the temporary library directory. - hardcode_action_GCJ=relink - else - # We can link without hardcoding, and we can hardcode nonexisting dirs. - hardcode_action_GCJ=immediate - fi -else - # We cannot hardcode anything, or else we can only hardcode existing - # directories. - hardcode_action_GCJ=unsupported -fi -{ echo "$as_me:$LINENO: result: $hardcode_action_GCJ" >&5 -echo "${ECHO_T}$hardcode_action_GCJ" >&6; } - -if test "$hardcode_action_GCJ" = relink; then - # Fast installation is not supported - enable_fast_install=no -elif test "$shlibpath_overrides_runpath" = yes || - test "$enable_shared" = no; then - # Fast installation is not necessary - enable_fast_install=needless -fi - - -# The else clause should only fire when bootstrapping the -# libtool distribution, otherwise you forgot to ship ltmain.sh -# with your package, and you will get complaints that there are -# no rules to generate ltmain.sh. -if test -f "$ltmain"; then - # See if we are running on zsh, and set the options which allow our commands through - # without removal of \ escapes. - if test -n "${ZSH_VERSION+set}" ; then - setopt NO_GLOB_SUBST - fi - # Now quote all the things that may contain metacharacters while being - # careful not to overquote the AC_SUBSTed values. We take copies of the - # variables and quote the copies for generation of the libtool script. - for var in echo old_CC old_CFLAGS AR AR_FLAGS EGREP RANLIB LN_S LTCC LTCFLAGS NM \ - SED SHELL STRIP \ - libname_spec library_names_spec soname_spec extract_expsyms_cmds \ - old_striplib striplib file_magic_cmd finish_cmds finish_eval \ - deplibs_check_method reload_flag reload_cmds need_locks \ - lt_cv_sys_global_symbol_pipe lt_cv_sys_global_symbol_to_cdecl \ - lt_cv_sys_global_symbol_to_c_name_address \ - sys_lib_search_path_spec sys_lib_dlsearch_path_spec \ - old_postinstall_cmds old_postuninstall_cmds \ - compiler_GCJ \ - CC_GCJ \ - LD_GCJ \ - lt_prog_compiler_wl_GCJ \ - lt_prog_compiler_pic_GCJ \ - lt_prog_compiler_static_GCJ \ - lt_prog_compiler_no_builtin_flag_GCJ \ - export_dynamic_flag_spec_GCJ \ - thread_safe_flag_spec_GCJ \ - whole_archive_flag_spec_GCJ \ - enable_shared_with_static_runtimes_GCJ \ - old_archive_cmds_GCJ \ - old_archive_from_new_cmds_GCJ \ - predep_objects_GCJ \ - postdep_objects_GCJ \ - predeps_GCJ \ - postdeps_GCJ \ - compiler_lib_search_path_GCJ \ - archive_cmds_GCJ \ - archive_expsym_cmds_GCJ \ - postinstall_cmds_GCJ \ - postuninstall_cmds_GCJ \ - old_archive_from_expsyms_cmds_GCJ \ - allow_undefined_flag_GCJ \ - no_undefined_flag_GCJ \ - export_symbols_cmds_GCJ \ - hardcode_libdir_flag_spec_GCJ \ - hardcode_libdir_flag_spec_ld_GCJ \ - hardcode_libdir_separator_GCJ \ - hardcode_automatic_GCJ \ - module_cmds_GCJ \ - module_expsym_cmds_GCJ \ - lt_cv_prog_compiler_c_o_GCJ \ - fix_srcfile_path_GCJ \ - exclude_expsyms_GCJ \ - include_expsyms_GCJ; do - - case $var in - old_archive_cmds_GCJ | \ - old_archive_from_new_cmds_GCJ | \ - archive_cmds_GCJ | \ - archive_expsym_cmds_GCJ | \ - module_cmds_GCJ | \ - module_expsym_cmds_GCJ | \ - old_archive_from_expsyms_cmds_GCJ | \ - export_symbols_cmds_GCJ | \ - extract_expsyms_cmds | reload_cmds | finish_cmds | \ - postinstall_cmds | postuninstall_cmds | \ - old_postinstall_cmds | old_postuninstall_cmds | \ - sys_lib_search_path_spec | sys_lib_dlsearch_path_spec) - # Double-quote double-evaled strings. - eval "lt_$var=\\\"\`\$echo \"X\$$var\" | \$Xsed -e \"\$double_quote_subst\" -e \"\$sed_quote_subst\" -e \"\$delay_variable_subst\"\`\\\"" - ;; - *) - eval "lt_$var=\\\"\`\$echo \"X\$$var\" | \$Xsed -e \"\$sed_quote_subst\"\`\\\"" - ;; - esac - done - - case $lt_echo in - *'\$0 --fallback-echo"') - lt_echo=`$echo "X$lt_echo" | $Xsed -e 's/\\\\\\\$0 --fallback-echo"$/$0 --fallback-echo"/'` - ;; - esac - -cfgfile="$ofile" - - cat <<__EOF__ >> "$cfgfile" -# ### BEGIN LIBTOOL TAG CONFIG: $tagname - -# Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`: - -# Shell to use when invoking shell scripts. -SHELL=$lt_SHELL - -# Whether or not to build shared libraries. -build_libtool_libs=$enable_shared - -# Whether or not to build static libraries. -build_old_libs=$enable_static - -# Whether or not to add -lc for building shared libraries. -build_libtool_need_lc=$archive_cmds_need_lc_GCJ - -# Whether or not to disallow shared libs when runtime libs are static -allow_libtool_libs_with_static_runtimes=$enable_shared_with_static_runtimes_GCJ - -# Whether or not to optimize for fast installation. -fast_install=$enable_fast_install - -# The host system. -host_alias=$host_alias -host=$host -host_os=$host_os - -# The build system. -build_alias=$build_alias -build=$build -build_os=$build_os - -# An echo program that does not interpret backslashes. -echo=$lt_echo - -# The archiver. -AR=$lt_AR -AR_FLAGS=$lt_AR_FLAGS - -# A C compiler. -LTCC=$lt_LTCC - -# LTCC compiler flags. -LTCFLAGS=$lt_LTCFLAGS - -# A language-specific compiler. -CC=$lt_compiler_GCJ - -# Is the compiler the GNU C compiler? -with_gcc=$GCC_GCJ - -# An ERE matcher. -EGREP=$lt_EGREP - -# The linker used to build libraries. -LD=$lt_LD_GCJ - -# Whether we need hard or soft links. -LN_S=$lt_LN_S - -# A BSD-compatible nm program. -NM=$lt_NM - -# A symbol stripping program -STRIP=$lt_STRIP - -# Used to examine libraries when file_magic_cmd begins "file" -MAGIC_CMD=$MAGIC_CMD - -# Used on cygwin: DLL creation program. -DLLTOOL="$DLLTOOL" - -# Used on cygwin: object dumper. -OBJDUMP="$OBJDUMP" - -# Used on cygwin: assembler. -AS="$AS" - -# The name of the directory that contains temporary libtool files. -objdir=$objdir - -# How to create reloadable object files. -reload_flag=$lt_reload_flag -reload_cmds=$lt_reload_cmds - -# How to pass a linker flag through the compiler. -wl=$lt_lt_prog_compiler_wl_GCJ - -# Object file suffix (normally "o"). -objext="$ac_objext" - -# Old archive suffix (normally "a"). -libext="$libext" - -# Shared library suffix (normally ".so"). -shrext_cmds='$shrext_cmds' - -# Executable file suffix (normally ""). -exeext="$exeext" - -# Additional compiler flags for building library objects. -pic_flag=$lt_lt_prog_compiler_pic_GCJ -pic_mode=$pic_mode - -# What is the maximum length of a command? -max_cmd_len=$lt_cv_sys_max_cmd_len - -# Does compiler simultaneously support -c and -o options? -compiler_c_o=$lt_lt_cv_prog_compiler_c_o_GCJ - -# Must we lock files when doing compilation? -need_locks=$lt_need_locks - -# Do we need the lib prefix for modules? -need_lib_prefix=$need_lib_prefix - -# Do we need a version for libraries? -need_version=$need_version - -# Whether dlopen is supported. -dlopen_support=$enable_dlopen - -# Whether dlopen of programs is supported. -dlopen_self=$enable_dlopen_self - -# Whether dlopen of statically linked programs is supported. -dlopen_self_static=$enable_dlopen_self_static - -# Compiler flag to prevent dynamic linking. -link_static_flag=$lt_lt_prog_compiler_static_GCJ - -# Compiler flag to turn off builtin functions. -no_builtin_flag=$lt_lt_prog_compiler_no_builtin_flag_GCJ - -# Compiler flag to allow reflexive dlopens. -export_dynamic_flag_spec=$lt_export_dynamic_flag_spec_GCJ - -# Compiler flag to generate shared objects directly from archives. -whole_archive_flag_spec=$lt_whole_archive_flag_spec_GCJ - -# Compiler flag to generate thread-safe objects. -thread_safe_flag_spec=$lt_thread_safe_flag_spec_GCJ - -# Library versioning type. -version_type=$version_type - -# Format of library name prefix. -libname_spec=$lt_libname_spec - -# List of archive names. First name is the real one, the rest are links. -# The last name is the one that the linker finds with -lNAME. -library_names_spec=$lt_library_names_spec - -# The coded name of the library, if different from the real name. -soname_spec=$lt_soname_spec - -# Commands used to build and install an old-style archive. -RANLIB=$lt_RANLIB -old_archive_cmds=$lt_old_archive_cmds_GCJ -old_postinstall_cmds=$lt_old_postinstall_cmds -old_postuninstall_cmds=$lt_old_postuninstall_cmds - -# Create an old-style archive from a shared archive. -old_archive_from_new_cmds=$lt_old_archive_from_new_cmds_GCJ - -# Create a temporary old-style archive to link instead of a shared archive. -old_archive_from_expsyms_cmds=$lt_old_archive_from_expsyms_cmds_GCJ - -# Commands used to build and install a shared archive. -archive_cmds=$lt_archive_cmds_GCJ -archive_expsym_cmds=$lt_archive_expsym_cmds_GCJ -postinstall_cmds=$lt_postinstall_cmds -postuninstall_cmds=$lt_postuninstall_cmds - -# Commands used to build a loadable module (assumed same as above if empty) -module_cmds=$lt_module_cmds_GCJ -module_expsym_cmds=$lt_module_expsym_cmds_GCJ - -# Commands to strip libraries. -old_striplib=$lt_old_striplib -striplib=$lt_striplib - -# Dependencies to place before the objects being linked to create a -# shared library. -predep_objects=$lt_predep_objects_GCJ - -# Dependencies to place after the objects being linked to create a -# shared library. -postdep_objects=$lt_postdep_objects_GCJ - -# Dependencies to place before the objects being linked to create a -# shared library. -predeps=$lt_predeps_GCJ - -# Dependencies to place after the objects being linked to create a -# shared library. -postdeps=$lt_postdeps_GCJ - -# The library search path used internally by the compiler when linking -# a shared library. -compiler_lib_search_path=$lt_compiler_lib_search_path_GCJ - -# Method to check whether dependent libraries are shared objects. -deplibs_check_method=$lt_deplibs_check_method - -# Command to use when deplibs_check_method == file_magic. -file_magic_cmd=$lt_file_magic_cmd - -# Flag that allows shared libraries with undefined symbols to be built. -allow_undefined_flag=$lt_allow_undefined_flag_GCJ - -# Flag that forces no undefined symbols. -no_undefined_flag=$lt_no_undefined_flag_GCJ - -# Commands used to finish a libtool library installation in a directory. -finish_cmds=$lt_finish_cmds - -# Same as above, but a single script fragment to be evaled but not shown. -finish_eval=$lt_finish_eval - -# Take the output of nm and produce a listing of raw symbols and C names. -global_symbol_pipe=$lt_lt_cv_sys_global_symbol_pipe - -# Transform the output of nm in a proper C declaration -global_symbol_to_cdecl=$lt_lt_cv_sys_global_symbol_to_cdecl - -# Transform the output of nm in a C name address pair -global_symbol_to_c_name_address=$lt_lt_cv_sys_global_symbol_to_c_name_address - -# This is the shared library runtime path variable. -runpath_var=$runpath_var - -# This is the shared library path variable. -shlibpath_var=$shlibpath_var - -# Is shlibpath searched before the hard-coded library search path? -shlibpath_overrides_runpath=$shlibpath_overrides_runpath - -# How to hardcode a shared library path into an executable. -hardcode_action=$hardcode_action_GCJ - -# Whether we should hardcode library paths into libraries. -hardcode_into_libs=$hardcode_into_libs - -# Flag to hardcode \$libdir into a binary during linking. -# This must work even if \$libdir does not exist. -hardcode_libdir_flag_spec=$lt_hardcode_libdir_flag_spec_GCJ - -# If ld is used when linking, flag to hardcode \$libdir into -# a binary during linking. This must work even if \$libdir does -# not exist. -hardcode_libdir_flag_spec_ld=$lt_hardcode_libdir_flag_spec_ld_GCJ - -# Whether we need a single -rpath flag with a separated argument. -hardcode_libdir_separator=$lt_hardcode_libdir_separator_GCJ - -# Set to yes if using DIR/libNAME${shared_ext} during linking hardcodes DIR into the -# resulting binary. -hardcode_direct=$hardcode_direct_GCJ - -# Set to yes if using the -LDIR flag during linking hardcodes DIR into the -# resulting binary. -hardcode_minus_L=$hardcode_minus_L_GCJ - -# Set to yes if using SHLIBPATH_VAR=DIR during linking hardcodes DIR into -# the resulting binary. -hardcode_shlibpath_var=$hardcode_shlibpath_var_GCJ - -# Set to yes if building a shared library automatically hardcodes DIR into the library -# and all subsequent libraries and executables linked against it. -hardcode_automatic=$hardcode_automatic_GCJ - -# Variables whose values should be saved in libtool wrapper scripts and -# restored at relink time. -variables_saved_for_relink="$variables_saved_for_relink" - -# Whether libtool must link a program against all its dependency libraries. -link_all_deplibs=$link_all_deplibs_GCJ - -# Compile-time system search path for libraries -sys_lib_search_path_spec=$lt_sys_lib_search_path_spec - -# Run-time system search path for libraries -sys_lib_dlsearch_path_spec=$lt_sys_lib_dlsearch_path_spec - -# Fix the shell variable \$srcfile for the compiler. -fix_srcfile_path=$lt_fix_srcfile_path - -# Set to yes if exported symbols are required. -always_export_symbols=$always_export_symbols_GCJ - -# The commands to list exported symbols. -export_symbols_cmds=$lt_export_symbols_cmds_GCJ - -# The commands to extract the exported symbol list from a shared archive. -extract_expsyms_cmds=$lt_extract_expsyms_cmds - -# Symbols that should not be listed in the preloaded symbols. -exclude_expsyms=$lt_exclude_expsyms_GCJ - -# Symbols that must always be exported. -include_expsyms=$lt_include_expsyms_GCJ - -# ### END LIBTOOL TAG CONFIG: $tagname - -__EOF__ - - -else - # If there is no Makefile yet, we rely on a make rule to execute - # `config.status --recheck' to rerun these tests and create the - # libtool script then. - ltmain_in=`echo $ltmain | sed -e 's/\.sh$/.in/'` - if test -f "$ltmain_in"; then - test -f Makefile && make "$ltmain" - fi -fi - - -ac_ext=c -ac_cpp='$CPP $CPPFLAGS' -ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_c_compiler_gnu - -CC="$lt_save_CC" - - else - tagname="" - fi - ;; - - RC) - - -# Source file extension for RC test sources. -ac_ext=rc - -# Object file extension for compiled RC test sources. -objext=o -objext_RC=$objext - -# Code to be used in simple compile tests -lt_simple_compile_test_code='sample MENU { MENUITEM "&Soup", 100, CHECKED }' - -# Code to be used in simple link tests -lt_simple_link_test_code="$lt_simple_compile_test_code" - -# ltmain only uses $CC for tagged configurations so make sure $CC is set. - -# If no C compiler was specified, use CC. -LTCC=${LTCC-"$CC"} - -# If no C compiler flags were specified, use CFLAGS. -LTCFLAGS=${LTCFLAGS-"$CFLAGS"} - -# Allow CC to be a program name with arguments. -compiler=$CC - - -# save warnings/boilerplate of simple test code -ac_outfile=conftest.$ac_objext -echo "$lt_simple_compile_test_code" >conftest.$ac_ext -eval "$ac_compile" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err -_lt_compiler_boilerplate=`cat conftest.err` -$rm conftest* - -ac_outfile=conftest.$ac_objext -echo "$lt_simple_link_test_code" >conftest.$ac_ext -eval "$ac_link" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err -_lt_linker_boilerplate=`cat conftest.err` -$rm conftest* - - -# Allow CC to be a program name with arguments. -lt_save_CC="$CC" -CC=${RC-"windres"} -compiler=$CC -compiler_RC=$CC -for cc_temp in $compiler""; do - case $cc_temp in - compile | *[\\/]compile | ccache | *[\\/]ccache ) ;; - distcc | *[\\/]distcc | purify | *[\\/]purify ) ;; - \-*) ;; - *) break;; - esac -done -cc_basename=`$echo "X$cc_temp" | $Xsed -e 's%.*/%%' -e "s%^$host_alias-%%"` - -lt_cv_prog_compiler_c_o_RC=yes - -# The else clause should only fire when bootstrapping the -# libtool distribution, otherwise you forgot to ship ltmain.sh -# with your package, and you will get complaints that there are -# no rules to generate ltmain.sh. -if test -f "$ltmain"; then - # See if we are running on zsh, and set the options which allow our commands through - # without removal of \ escapes. - if test -n "${ZSH_VERSION+set}" ; then - setopt NO_GLOB_SUBST - fi - # Now quote all the things that may contain metacharacters while being - # careful not to overquote the AC_SUBSTed values. We take copies of the - # variables and quote the copies for generation of the libtool script. - for var in echo old_CC old_CFLAGS AR AR_FLAGS EGREP RANLIB LN_S LTCC LTCFLAGS NM \ - SED SHELL STRIP \ - libname_spec library_names_spec soname_spec extract_expsyms_cmds \ - old_striplib striplib file_magic_cmd finish_cmds finish_eval \ - deplibs_check_method reload_flag reload_cmds need_locks \ - lt_cv_sys_global_symbol_pipe lt_cv_sys_global_symbol_to_cdecl \ - lt_cv_sys_global_symbol_to_c_name_address \ - sys_lib_search_path_spec sys_lib_dlsearch_path_spec \ - old_postinstall_cmds old_postuninstall_cmds \ - compiler_RC \ - CC_RC \ - LD_RC \ - lt_prog_compiler_wl_RC \ - lt_prog_compiler_pic_RC \ - lt_prog_compiler_static_RC \ - lt_prog_compiler_no_builtin_flag_RC \ - export_dynamic_flag_spec_RC \ - thread_safe_flag_spec_RC \ - whole_archive_flag_spec_RC \ - enable_shared_with_static_runtimes_RC \ - old_archive_cmds_RC \ - old_archive_from_new_cmds_RC \ - predep_objects_RC \ - postdep_objects_RC \ - predeps_RC \ - postdeps_RC \ - compiler_lib_search_path_RC \ - archive_cmds_RC \ - archive_expsym_cmds_RC \ - postinstall_cmds_RC \ - postuninstall_cmds_RC \ - old_archive_from_expsyms_cmds_RC \ - allow_undefined_flag_RC \ - no_undefined_flag_RC \ - export_symbols_cmds_RC \ - hardcode_libdir_flag_spec_RC \ - hardcode_libdir_flag_spec_ld_RC \ - hardcode_libdir_separator_RC \ - hardcode_automatic_RC \ - module_cmds_RC \ - module_expsym_cmds_RC \ - lt_cv_prog_compiler_c_o_RC \ - fix_srcfile_path_RC \ - exclude_expsyms_RC \ - include_expsyms_RC; do - - case $var in - old_archive_cmds_RC | \ - old_archive_from_new_cmds_RC | \ - archive_cmds_RC | \ - archive_expsym_cmds_RC | \ - module_cmds_RC | \ - module_expsym_cmds_RC | \ - old_archive_from_expsyms_cmds_RC | \ - export_symbols_cmds_RC | \ - extract_expsyms_cmds | reload_cmds | finish_cmds | \ - postinstall_cmds | postuninstall_cmds | \ - old_postinstall_cmds | old_postuninstall_cmds | \ - sys_lib_search_path_spec | sys_lib_dlsearch_path_spec) - # Double-quote double-evaled strings. - eval "lt_$var=\\\"\`\$echo \"X\$$var\" | \$Xsed -e \"\$double_quote_subst\" -e \"\$sed_quote_subst\" -e \"\$delay_variable_subst\"\`\\\"" - ;; - *) - eval "lt_$var=\\\"\`\$echo \"X\$$var\" | \$Xsed -e \"\$sed_quote_subst\"\`\\\"" - ;; - esac - done - - case $lt_echo in - *'\$0 --fallback-echo"') - lt_echo=`$echo "X$lt_echo" | $Xsed -e 's/\\\\\\\$0 --fallback-echo"$/$0 --fallback-echo"/'` - ;; - esac - -cfgfile="$ofile" - - cat <<__EOF__ >> "$cfgfile" -# ### BEGIN LIBTOOL TAG CONFIG: $tagname - -# Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`: - -# Shell to use when invoking shell scripts. -SHELL=$lt_SHELL - -# Whether or not to build shared libraries. -build_libtool_libs=$enable_shared - -# Whether or not to build static libraries. -build_old_libs=$enable_static - -# Whether or not to add -lc for building shared libraries. -build_libtool_need_lc=$archive_cmds_need_lc_RC - -# Whether or not to disallow shared libs when runtime libs are static -allow_libtool_libs_with_static_runtimes=$enable_shared_with_static_runtimes_RC - -# Whether or not to optimize for fast installation. -fast_install=$enable_fast_install - -# The host system. -host_alias=$host_alias -host=$host -host_os=$host_os - -# The build system. -build_alias=$build_alias -build=$build -build_os=$build_os - -# An echo program that does not interpret backslashes. -echo=$lt_echo - -# The archiver. -AR=$lt_AR -AR_FLAGS=$lt_AR_FLAGS - -# A C compiler. -LTCC=$lt_LTCC - -# LTCC compiler flags. -LTCFLAGS=$lt_LTCFLAGS - -# A language-specific compiler. -CC=$lt_compiler_RC - -# Is the compiler the GNU C compiler? -with_gcc=$GCC_RC - -# An ERE matcher. -EGREP=$lt_EGREP - -# The linker used to build libraries. -LD=$lt_LD_RC - -# Whether we need hard or soft links. -LN_S=$lt_LN_S - -# A BSD-compatible nm program. -NM=$lt_NM - -# A symbol stripping program -STRIP=$lt_STRIP - -# Used to examine libraries when file_magic_cmd begins "file" -MAGIC_CMD=$MAGIC_CMD - -# Used on cygwin: DLL creation program. -DLLTOOL="$DLLTOOL" - -# Used on cygwin: object dumper. -OBJDUMP="$OBJDUMP" - -# Used on cygwin: assembler. -AS="$AS" - -# The name of the directory that contains temporary libtool files. -objdir=$objdir - -# How to create reloadable object files. -reload_flag=$lt_reload_flag -reload_cmds=$lt_reload_cmds - -# How to pass a linker flag through the compiler. -wl=$lt_lt_prog_compiler_wl_RC - -# Object file suffix (normally "o"). -objext="$ac_objext" - -# Old archive suffix (normally "a"). -libext="$libext" - -# Shared library suffix (normally ".so"). -shrext_cmds='$shrext_cmds' - -# Executable file suffix (normally ""). -exeext="$exeext" - -# Additional compiler flags for building library objects. -pic_flag=$lt_lt_prog_compiler_pic_RC -pic_mode=$pic_mode - -# What is the maximum length of a command? -max_cmd_len=$lt_cv_sys_max_cmd_len - -# Does compiler simultaneously support -c and -o options? -compiler_c_o=$lt_lt_cv_prog_compiler_c_o_RC - -# Must we lock files when doing compilation? -need_locks=$lt_need_locks - -# Do we need the lib prefix for modules? -need_lib_prefix=$need_lib_prefix - -# Do we need a version for libraries? -need_version=$need_version - -# Whether dlopen is supported. -dlopen_support=$enable_dlopen - -# Whether dlopen of programs is supported. -dlopen_self=$enable_dlopen_self - -# Whether dlopen of statically linked programs is supported. -dlopen_self_static=$enable_dlopen_self_static - -# Compiler flag to prevent dynamic linking. -link_static_flag=$lt_lt_prog_compiler_static_RC - -# Compiler flag to turn off builtin functions. -no_builtin_flag=$lt_lt_prog_compiler_no_builtin_flag_RC - -# Compiler flag to allow reflexive dlopens. -export_dynamic_flag_spec=$lt_export_dynamic_flag_spec_RC - -# Compiler flag to generate shared objects directly from archives. -whole_archive_flag_spec=$lt_whole_archive_flag_spec_RC - -# Compiler flag to generate thread-safe objects. -thread_safe_flag_spec=$lt_thread_safe_flag_spec_RC - -# Library versioning type. -version_type=$version_type - -# Format of library name prefix. -libname_spec=$lt_libname_spec - -# List of archive names. First name is the real one, the rest are links. -# The last name is the one that the linker finds with -lNAME. -library_names_spec=$lt_library_names_spec - -# The coded name of the library, if different from the real name. -soname_spec=$lt_soname_spec - -# Commands used to build and install an old-style archive. -RANLIB=$lt_RANLIB -old_archive_cmds=$lt_old_archive_cmds_RC -old_postinstall_cmds=$lt_old_postinstall_cmds -old_postuninstall_cmds=$lt_old_postuninstall_cmds - -# Create an old-style archive from a shared archive. -old_archive_from_new_cmds=$lt_old_archive_from_new_cmds_RC - -# Create a temporary old-style archive to link instead of a shared archive. -old_archive_from_expsyms_cmds=$lt_old_archive_from_expsyms_cmds_RC - -# Commands used to build and install a shared archive. -archive_cmds=$lt_archive_cmds_RC -archive_expsym_cmds=$lt_archive_expsym_cmds_RC -postinstall_cmds=$lt_postinstall_cmds -postuninstall_cmds=$lt_postuninstall_cmds - -# Commands used to build a loadable module (assumed same as above if empty) -module_cmds=$lt_module_cmds_RC -module_expsym_cmds=$lt_module_expsym_cmds_RC - -# Commands to strip libraries. -old_striplib=$lt_old_striplib -striplib=$lt_striplib - -# Dependencies to place before the objects being linked to create a -# shared library. -predep_objects=$lt_predep_objects_RC - -# Dependencies to place after the objects being linked to create a -# shared library. -postdep_objects=$lt_postdep_objects_RC - -# Dependencies to place before the objects being linked to create a -# shared library. -predeps=$lt_predeps_RC - -# Dependencies to place after the objects being linked to create a -# shared library. -postdeps=$lt_postdeps_RC - -# The library search path used internally by the compiler when linking -# a shared library. -compiler_lib_search_path=$lt_compiler_lib_search_path_RC - -# Method to check whether dependent libraries are shared objects. -deplibs_check_method=$lt_deplibs_check_method - -# Command to use when deplibs_check_method == file_magic. -file_magic_cmd=$lt_file_magic_cmd - -# Flag that allows shared libraries with undefined symbols to be built. -allow_undefined_flag=$lt_allow_undefined_flag_RC - -# Flag that forces no undefined symbols. -no_undefined_flag=$lt_no_undefined_flag_RC - -# Commands used to finish a libtool library installation in a directory. -finish_cmds=$lt_finish_cmds - -# Same as above, but a single script fragment to be evaled but not shown. -finish_eval=$lt_finish_eval - -# Take the output of nm and produce a listing of raw symbols and C names. -global_symbol_pipe=$lt_lt_cv_sys_global_symbol_pipe - -# Transform the output of nm in a proper C declaration -global_symbol_to_cdecl=$lt_lt_cv_sys_global_symbol_to_cdecl - -# Transform the output of nm in a C name address pair -global_symbol_to_c_name_address=$lt_lt_cv_sys_global_symbol_to_c_name_address - -# This is the shared library runtime path variable. -runpath_var=$runpath_var - -# This is the shared library path variable. -shlibpath_var=$shlibpath_var - -# Is shlibpath searched before the hard-coded library search path? -shlibpath_overrides_runpath=$shlibpath_overrides_runpath - -# How to hardcode a shared library path into an executable. -hardcode_action=$hardcode_action_RC - -# Whether we should hardcode library paths into libraries. -hardcode_into_libs=$hardcode_into_libs - -# Flag to hardcode \$libdir into a binary during linking. -# This must work even if \$libdir does not exist. -hardcode_libdir_flag_spec=$lt_hardcode_libdir_flag_spec_RC - -# If ld is used when linking, flag to hardcode \$libdir into -# a binary during linking. This must work even if \$libdir does -# not exist. -hardcode_libdir_flag_spec_ld=$lt_hardcode_libdir_flag_spec_ld_RC - -# Whether we need a single -rpath flag with a separated argument. -hardcode_libdir_separator=$lt_hardcode_libdir_separator_RC - -# Set to yes if using DIR/libNAME${shared_ext} during linking hardcodes DIR into the -# resulting binary. -hardcode_direct=$hardcode_direct_RC - -# Set to yes if using the -LDIR flag during linking hardcodes DIR into the -# resulting binary. -hardcode_minus_L=$hardcode_minus_L_RC - -# Set to yes if using SHLIBPATH_VAR=DIR during linking hardcodes DIR into -# the resulting binary. -hardcode_shlibpath_var=$hardcode_shlibpath_var_RC - -# Set to yes if building a shared library automatically hardcodes DIR into the library -# and all subsequent libraries and executables linked against it. -hardcode_automatic=$hardcode_automatic_RC - -# Variables whose values should be saved in libtool wrapper scripts and -# restored at relink time. -variables_saved_for_relink="$variables_saved_for_relink" - -# Whether libtool must link a program against all its dependency libraries. -link_all_deplibs=$link_all_deplibs_RC - -# Compile-time system search path for libraries -sys_lib_search_path_spec=$lt_sys_lib_search_path_spec - -# Run-time system search path for libraries -sys_lib_dlsearch_path_spec=$lt_sys_lib_dlsearch_path_spec - -# Fix the shell variable \$srcfile for the compiler. -fix_srcfile_path=$lt_fix_srcfile_path - -# Set to yes if exported symbols are required. -always_export_symbols=$always_export_symbols_RC - -# The commands to list exported symbols. -export_symbols_cmds=$lt_export_symbols_cmds_RC - -# The commands to extract the exported symbol list from a shared archive. -extract_expsyms_cmds=$lt_extract_expsyms_cmds - -# Symbols that should not be listed in the preloaded symbols. -exclude_expsyms=$lt_exclude_expsyms_RC - -# Symbols that must always be exported. -include_expsyms=$lt_include_expsyms_RC - -# ### END LIBTOOL TAG CONFIG: $tagname - -__EOF__ - - -else - # If there is no Makefile yet, we rely on a make rule to execute - # `config.status --recheck' to rerun these tests and create the - # libtool script then. - ltmain_in=`echo $ltmain | sed -e 's/\.sh$/.in/'` - if test -f "$ltmain_in"; then - test -f Makefile && make "$ltmain" - fi -fi - - -ac_ext=c -ac_cpp='$CPP $CPPFLAGS' -ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_c_compiler_gnu - -CC="$lt_save_CC" - - ;; - - *) - { { echo "$as_me:$LINENO: error: Unsupported tag name: $tagname" >&5 -echo "$as_me: error: Unsupported tag name: $tagname" >&2;} - { (exit 1); exit 1; }; } - ;; - esac - - # Append the new tag name to the list of available tags. - if test -n "$tagname" ; then - available_tags="$available_tags $tagname" - fi - fi - done - IFS="$lt_save_ifs" - - # Now substitute the updated list of available tags. - if eval "sed -e 's/^available_tags=.*\$/available_tags=\"$available_tags\"/' \"$ofile\" > \"${ofile}T\""; then - mv "${ofile}T" "$ofile" - chmod +x "$ofile" - else - rm -f "${ofile}T" - { { echo "$as_me:$LINENO: error: unable to update list of available tagged configurations." >&5 -echo "$as_me: error: unable to update list of available tagged configurations." >&2;} - { (exit 1); exit 1; }; } - fi -fi - - - -# This can be used to rebuild libtool when needed -LIBTOOL_DEPS="$ac_aux_dir/ltmain.sh" - -# Always use our own libtool. -LIBTOOL='$(SHELL) $(top_builddir)/libtool' - -# Prevent multiple expansion - - - - - - - - - - - - - - - - - - - - - -{ echo "$as_me:$LINENO: checking whether to enable maintainer-specific portions of Makefiles" >&5 -echo $ECHO_N "checking whether to enable maintainer-specific portions of Makefiles... $ECHO_C" >&6; } - # Check whether --enable-maintainer-mode was given. -if test "${enable_maintainer_mode+set}" = set; then - enableval=$enable_maintainer_mode; USE_MAINTAINER_MODE=$enableval -else - USE_MAINTAINER_MODE=no -fi - - { echo "$as_me:$LINENO: result: $USE_MAINTAINER_MODE" >&5 -echo "${ECHO_T}$USE_MAINTAINER_MODE" >&6; } - if test $USE_MAINTAINER_MODE = yes; then - MAINTAINER_MODE_TRUE= - MAINTAINER_MODE_FALSE='#' -else - MAINTAINER_MODE_TRUE='#' - MAINTAINER_MODE_FALSE= -fi - - MAINT=$MAINTAINER_MODE_TRUE - - - - -for ac_header in sys/mman.h -do -as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh` -if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then - { echo "$as_me:$LINENO: checking for $ac_header" >&5 -echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6; } -if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -fi -ac_res=`eval echo '${'$as_ac_Header'}'` - { echo "$as_me:$LINENO: result: $ac_res" >&5 -echo "${ECHO_T}$ac_res" >&6; } -else - # Is the header compilable? -{ echo "$as_me:$LINENO: checking $ac_header usability" >&5 -echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6; } -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default -#include <$ac_header> -_ACEOF -rm -f conftest.$ac_objext -if { (ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then - ac_header_compiler=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_header_compiler=no -fi - -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -{ echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 -echo "${ECHO_T}$ac_header_compiler" >&6; } - -# Is the header present? -{ echo "$as_me:$LINENO: checking $ac_header presence" >&5 -echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6; } -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -#include <$ac_header> -_ACEOF -if { (ac_try="$ac_cpp conftest.$ac_ext" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } >/dev/null && { - test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || - test ! -s conftest.err - }; then - ac_header_preproc=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_header_preproc=no -fi - -rm -f conftest.err conftest.$ac_ext -{ echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 -echo "${ECHO_T}$ac_header_preproc" >&6; } - -# So? What about this header? -case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in - yes:no: ) - { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5 -echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5 -echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;} - ac_header_preproc=yes - ;; - no:yes:* ) - { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5 -echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: check for missing prerequisite headers?" >&5 -echo "$as_me: WARNING: $ac_header: check for missing prerequisite headers?" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5 -echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&5 -echo "$as_me: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5 -echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5 -echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;} - ( cat <<\_ASBOX -## ------------------------------------------- ## -## Report this to http://gcc.gnu.org/bugs.html ## -## ------------------------------------------- ## -_ASBOX - ) | sed "s/^/$as_me: WARNING: /" >&2 - ;; -esac -{ echo "$as_me:$LINENO: checking for $ac_header" >&5 -echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6; } -if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - eval "$as_ac_Header=\$ac_header_preproc" -fi -ac_res=`eval echo '${'$as_ac_Header'}'` - { echo "$as_me:$LINENO: result: $ac_res" >&5 -echo "${ECHO_T}$ac_res" >&6; } - -fi -if test `eval echo '${'$as_ac_Header'}'` = yes; then - cat >>confdefs.h <<_ACEOF -#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1 -_ACEOF - -fi - -done - - -for ac_func in mmap -do -as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh` -{ echo "$as_me:$LINENO: checking for $ac_func" >&5 -echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6; } -if { as_var=$as_ac_var; eval "test \"\${$as_var+set}\" = set"; }; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -/* Define $ac_func to an innocuous variant, in case declares $ac_func. - For example, HP-UX 11i declares gettimeofday. */ -#define $ac_func innocuous_$ac_func - -/* System header to define __stub macros and hopefully few prototypes, - which can conflict with char $ac_func (); below. - Prefer to if __STDC__ is defined, since - exists even on freestanding compilers. */ - -#ifdef __STDC__ -# include -#else -# include -#endif - -#undef $ac_func - -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char $ac_func (); -/* The GNU C library defines this for functions which it implements - to always fail with ENOSYS. Some functions are actually named - something starting with __ and the normal name is an alias. */ -#if defined __stub_$ac_func || defined __stub___$ac_func -choke me -#endif - -int -main () -{ -return $ac_func (); - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext conftest$ac_exeext -if { (ac_try="$ac_link" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_link") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest$ac_exeext && - $as_test_x conftest$ac_exeext; then - eval "$as_ac_var=yes" -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - eval "$as_ac_var=no" -fi - -rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ - conftest$ac_exeext conftest.$ac_ext -fi -ac_res=`eval echo '${'$as_ac_var'}'` - { echo "$as_me:$LINENO: result: $ac_res" >&5 -echo "${ECHO_T}$ac_res" >&6; } -if test `eval echo '${'$as_ac_var'}'` = yes; then - cat >>confdefs.h <<_ACEOF -#define `echo "HAVE_$ac_func" | $as_tr_cpp` 1 -_ACEOF - -fi -done - - -if test "${ac_cv_header_sys_mman_h+set}" = set; then - { echo "$as_me:$LINENO: checking for sys/mman.h" >&5 -echo $ECHO_N "checking for sys/mman.h... $ECHO_C" >&6; } -if test "${ac_cv_header_sys_mman_h+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -fi -{ echo "$as_me:$LINENO: result: $ac_cv_header_sys_mman_h" >&5 -echo "${ECHO_T}$ac_cv_header_sys_mman_h" >&6; } -else - # Is the header compilable? -{ echo "$as_me:$LINENO: checking sys/mman.h usability" >&5 -echo $ECHO_N "checking sys/mman.h usability... $ECHO_C" >&6; } -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default -#include -_ACEOF -rm -f conftest.$ac_objext -if { (ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then - ac_header_compiler=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_header_compiler=no -fi - -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -{ echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 -echo "${ECHO_T}$ac_header_compiler" >&6; } - -# Is the header present? -{ echo "$as_me:$LINENO: checking sys/mman.h presence" >&5 -echo $ECHO_N "checking sys/mman.h presence... $ECHO_C" >&6; } -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -#include -_ACEOF -if { (ac_try="$ac_cpp conftest.$ac_ext" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } >/dev/null && { - test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || - test ! -s conftest.err - }; then - ac_header_preproc=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_header_preproc=no -fi - -rm -f conftest.err conftest.$ac_ext -{ echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 -echo "${ECHO_T}$ac_header_preproc" >&6; } - -# So? What about this header? -case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in - yes:no: ) - { echo "$as_me:$LINENO: WARNING: sys/mman.h: accepted by the compiler, rejected by the preprocessor!" >&5 -echo "$as_me: WARNING: sys/mman.h: accepted by the compiler, rejected by the preprocessor!" >&2;} - { echo "$as_me:$LINENO: WARNING: sys/mman.h: proceeding with the compiler's result" >&5 -echo "$as_me: WARNING: sys/mman.h: proceeding with the compiler's result" >&2;} - ac_header_preproc=yes - ;; - no:yes:* ) - { echo "$as_me:$LINENO: WARNING: sys/mman.h: present but cannot be compiled" >&5 -echo "$as_me: WARNING: sys/mman.h: present but cannot be compiled" >&2;} - { echo "$as_me:$LINENO: WARNING: sys/mman.h: check for missing prerequisite headers?" >&5 -echo "$as_me: WARNING: sys/mman.h: check for missing prerequisite headers?" >&2;} - { echo "$as_me:$LINENO: WARNING: sys/mman.h: see the Autoconf documentation" >&5 -echo "$as_me: WARNING: sys/mman.h: see the Autoconf documentation" >&2;} - { echo "$as_me:$LINENO: WARNING: sys/mman.h: section \"Present But Cannot Be Compiled\"" >&5 -echo "$as_me: WARNING: sys/mman.h: section \"Present But Cannot Be Compiled\"" >&2;} - { echo "$as_me:$LINENO: WARNING: sys/mman.h: proceeding with the preprocessor's result" >&5 -echo "$as_me: WARNING: sys/mman.h: proceeding with the preprocessor's result" >&2;} - { echo "$as_me:$LINENO: WARNING: sys/mman.h: in the future, the compiler will take precedence" >&5 -echo "$as_me: WARNING: sys/mman.h: in the future, the compiler will take precedence" >&2;} - ( cat <<\_ASBOX -## ------------------------------------------- ## -## Report this to http://gcc.gnu.org/bugs.html ## -## ------------------------------------------- ## -_ASBOX - ) | sed "s/^/$as_me: WARNING: /" >&2 - ;; -esac -{ echo "$as_me:$LINENO: checking for sys/mman.h" >&5 -echo $ECHO_N "checking for sys/mman.h... $ECHO_C" >&6; } -if test "${ac_cv_header_sys_mman_h+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - ac_cv_header_sys_mman_h=$ac_header_preproc -fi -{ echo "$as_me:$LINENO: result: $ac_cv_header_sys_mman_h" >&5 -echo "${ECHO_T}$ac_cv_header_sys_mman_h" >&6; } - -fi -if test $ac_cv_header_sys_mman_h = yes; then - libffi_header_sys_mman_h=yes -else - libffi_header_sys_mman_h=no -fi - - -{ echo "$as_me:$LINENO: checking for mmap" >&5 -echo $ECHO_N "checking for mmap... $ECHO_C" >&6; } -if test "${ac_cv_func_mmap+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -/* Define mmap to an innocuous variant, in case declares mmap. - For example, HP-UX 11i declares gettimeofday. */ -#define mmap innocuous_mmap - -/* System header to define __stub macros and hopefully few prototypes, - which can conflict with char mmap (); below. - Prefer to if __STDC__ is defined, since - exists even on freestanding compilers. */ - -#ifdef __STDC__ -# include -#else -# include -#endif - -#undef mmap - -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char mmap (); -/* The GNU C library defines this for functions which it implements - to always fail with ENOSYS. Some functions are actually named - something starting with __ and the normal name is an alias. */ -#if defined __stub_mmap || defined __stub___mmap -choke me -#endif - -int -main () -{ -return mmap (); - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext conftest$ac_exeext -if { (ac_try="$ac_link" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_link") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest$ac_exeext && - $as_test_x conftest$ac_exeext; then - ac_cv_func_mmap=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_cv_func_mmap=no -fi - -rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ - conftest$ac_exeext conftest.$ac_ext -fi -{ echo "$as_me:$LINENO: result: $ac_cv_func_mmap" >&5 -echo "${ECHO_T}$ac_cv_func_mmap" >&6; } -if test $ac_cv_func_mmap = yes; then - libffi_func_mmap=yes -else - libffi_func_mmap=no -fi - -if test "$libffi_header_sys_mman_h" != yes \ - || test "$libffi_func_mmap" != yes; then - ac_cv_func_mmap_file=no - ac_cv_func_mmap_dev_zero=no - ac_cv_func_mmap_anon=no -else - { echo "$as_me:$LINENO: checking whether read-only mmap of a plain file works" >&5 -echo $ECHO_N "checking whether read-only mmap of a plain file works... $ECHO_C" >&6; } -if test "${ac_cv_func_mmap_file+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - # Add a system to this blacklist if - # mmap(0, stat_size, PROT_READ, MAP_PRIVATE, fd, 0) doesn't return a - # memory area containing the same data that you'd get if you applied - # read() to the same fd. The only system known to have a problem here - # is VMS, where text files have record structure. - case "$host_os" in - vms* | ultrix*) - ac_cv_func_mmap_file=no ;; - *) - ac_cv_func_mmap_file=yes;; - esac -fi -{ echo "$as_me:$LINENO: result: $ac_cv_func_mmap_file" >&5 -echo "${ECHO_T}$ac_cv_func_mmap_file" >&6; } - { echo "$as_me:$LINENO: checking whether mmap from /dev/zero works" >&5 -echo $ECHO_N "checking whether mmap from /dev/zero works... $ECHO_C" >&6; } -if test "${ac_cv_func_mmap_dev_zero+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - # Add a system to this blacklist if it has mmap() but /dev/zero - # does not exist, or if mmapping /dev/zero does not give anonymous - # zeroed pages with both the following properties: - # 1. If you map N consecutive pages in with one call, and then - # unmap any subset of those pages, the pages that were not - # explicitly unmapped remain accessible. - # 2. If you map two adjacent blocks of memory and then unmap them - # both at once, they must both go away. - # Systems known to be in this category are Windows (all variants), - # VMS, and Darwin. - case "$host_os" in - vms* | cygwin* | pe | mingw* | darwin* | ultrix* | hpux10* | hpux11.00) - ac_cv_func_mmap_dev_zero=no ;; - *) - ac_cv_func_mmap_dev_zero=yes;; - esac -fi -{ echo "$as_me:$LINENO: result: $ac_cv_func_mmap_dev_zero" >&5 -echo "${ECHO_T}$ac_cv_func_mmap_dev_zero" >&6; } - - # Unlike /dev/zero, the MAP_ANON(YMOUS) defines can be probed for. - { echo "$as_me:$LINENO: checking for MAP_ANON(YMOUS)" >&5 -echo $ECHO_N "checking for MAP_ANON(YMOUS)... $ECHO_C" >&6; } -if test "${ac_cv_decl_map_anon+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -#include -#include -#include - -#ifndef MAP_ANONYMOUS -#define MAP_ANONYMOUS MAP_ANON -#endif - -int -main () -{ -int n = MAP_ANONYMOUS; - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then - ac_cv_decl_map_anon=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_cv_decl_map_anon=no -fi - -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -fi -{ echo "$as_me:$LINENO: result: $ac_cv_decl_map_anon" >&5 -echo "${ECHO_T}$ac_cv_decl_map_anon" >&6; } - - if test $ac_cv_decl_map_anon = no; then - ac_cv_func_mmap_anon=no - else - { echo "$as_me:$LINENO: checking whether mmap with MAP_ANON(YMOUS) works" >&5 -echo $ECHO_N "checking whether mmap with MAP_ANON(YMOUS) works... $ECHO_C" >&6; } -if test "${ac_cv_func_mmap_anon+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - # Add a system to this blacklist if it has mmap() and MAP_ANON or - # MAP_ANONYMOUS, but using mmap(..., MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) - # doesn't give anonymous zeroed pages with the same properties listed - # above for use of /dev/zero. - # Systems known to be in this category are Windows, VMS, and SCO Unix. - case "$host_os" in - vms* | cygwin* | pe | mingw* | sco* | udk* ) - ac_cv_func_mmap_anon=no ;; - *) - ac_cv_func_mmap_anon=yes;; - esac -fi -{ echo "$as_me:$LINENO: result: $ac_cv_func_mmap_anon" >&5 -echo "${ECHO_T}$ac_cv_func_mmap_anon" >&6; } - fi -fi - -if test $ac_cv_func_mmap_file = yes; then - -cat >>confdefs.h <<\_ACEOF -#define HAVE_MMAP_FILE 1 -_ACEOF - -fi -if test $ac_cv_func_mmap_dev_zero = yes; then - -cat >>confdefs.h <<\_ACEOF -#define HAVE_MMAP_DEV_ZERO 1 -_ACEOF - -fi -if test $ac_cv_func_mmap_anon = yes; then - -cat >>confdefs.h <<\_ACEOF -#define HAVE_MMAP_ANON 1 -_ACEOF - -fi - - - if test -d $srcdir/testsuite; then - TESTSUBDIR_TRUE= - TESTSUBDIR_FALSE='#' -else - TESTSUBDIR_TRUE='#' - TESTSUBDIR_FALSE= -fi - - -TARGETDIR="unknown" -case "$host" in - alpha*-*-*) - TARGET=ALPHA; TARGETDIR=alpha; - # Support 128-bit long double, changable via command-line switch. - HAVE_LONG_DOUBLE='defined(__LONG_DOUBLE_128__)' - ;; - - arm*-*-*) - TARGET=ARM; TARGETDIR=arm - ;; - - amd64-*-freebsd*) - TARGET=X86_64; TARGETDIR=x86 - ;; - - cris-*-*) - TARGET=LIBFFI_CRIS; TARGETDIR=cris - ;; - - frv-*-*) - TARGET=FRV; TARGETDIR=frv - ;; - - hppa*-*-linux* | parisc*-*-linux*) - TARGET=PA_LINUX; TARGETDIR=pa - ;; - hppa*64-*-hpux*) - TARGET=PA64_HPUX; TARGETDIR=pa - ;; - hppa*-*-hpux*) - TARGET=PA_HPUX; TARGETDIR=pa - ;; - - i386-*-freebsd* | i386-*-openbsd*) - TARGET=X86_FREEBSD; TARGETDIR=x86 - ;; - i?86-win32* | i?86-*-cygwin* | i?86-*-mingw*) - TARGET=X86_WIN32; TARGETDIR=x86 - ;; - i?86-*-darwin*) - TARGET=X86_DARWIN; TARGETDIR=x86 - ;; - i?86-*-solaris2.1[0-9]*) - TARGET=X86_64; TARGETDIR=x86 - ;; - i*86-*-nto-qnx*) - TARGET=X86; TARGETDIR=x86 - ;; - i?86-*-*) - TARGET=X86; TARGETDIR=x86 - ;; - - ia64*-*-*) - TARGET=IA64; TARGETDIR=ia64 - ;; - - m32r*-*-*) - TARGET=M32R; TARGETDIR=m32r - ;; - - m68k-*-*) - TARGET=M68K; TARGETDIR=m68k - ;; - - mips-sgi-irix5.* | mips-sgi-irix6.*) - TARGET=MIPS_IRIX; TARGETDIR=mips - ;; - mips*-*-linux*) - TARGET=MIPS_LINUX; TARGETDIR=mips - ;; - - powerpc*-*-linux* | powerpc-*-sysv*) - TARGET=POWERPC; TARGETDIR=powerpc - ;; - powerpc-*-beos*) - TARGET=POWERPC; TARGETDIR=powerpc - ;; - powerpc-*-darwin*) - TARGET=POWERPC_DARWIN; TARGETDIR=powerpc - ;; - powerpc-*-aix* | rs6000-*-aix*) - TARGET=POWERPC_AIX; TARGETDIR=powerpc - ;; - powerpc-*-freebsd*) - TARGET=POWERPC_FREEBSD; TARGETDIR=powerpc - ;; - powerpc*-*-rtems*) - TARGET=POWERPC; TARGETDIR=powerpc - ;; - - s390-*-* | s390x-*-*) - TARGET=S390; TARGETDIR=s390 - ;; - - sh-*-* | sh[34]*-*-*) - TARGET=SH; TARGETDIR=sh - ;; - sh64-*-* | sh5*-*-*) - TARGET=SH64; TARGETDIR=sh64 - ;; - - sparc*-*-*) - TARGET=SPARC; TARGETDIR=sparc - ;; - - x86_64-*-darwin*) - TARGET=X86_DARWIN; TARGETDIR=x86 - ;; - x86_64-*-cygwin* | x86_64-*-mingw*) - ;; - x86_64-*-*) - TARGET=X86_64; TARGETDIR=x86 - ;; -esac - - - -if test $TARGETDIR = unknown; then - { { echo "$as_me:$LINENO: error: \"libffi has not been ported to $host.\"" >&5 -echo "$as_me: error: \"libffi has not been ported to $host.\"" >&2;} - { (exit 1); exit 1; }; } -fi - - if expr x$TARGET : 'xMIPS' > /dev/null; then - MIPS_TRUE= - MIPS_FALSE='#' -else - MIPS_TRUE='#' - MIPS_FALSE= -fi - - if test x$TARGET = xSPARC; then - SPARC_TRUE= - SPARC_FALSE='#' -else - SPARC_TRUE='#' - SPARC_FALSE= -fi - - if test x$TARGET = xX86; then - X86_TRUE= - X86_FALSE='#' -else - X86_TRUE='#' - X86_FALSE= -fi - - if test x$TARGET = xX86_FREEBSD; then - X86_FREEBSD_TRUE= - X86_FREEBSD_FALSE='#' -else - X86_FREEBSD_TRUE='#' - X86_FREEBSD_FALSE= -fi - - if test x$TARGET = xX86_WIN32; then - X86_WIN32_TRUE= - X86_WIN32_FALSE='#' -else - X86_WIN32_TRUE='#' - X86_WIN32_FALSE= -fi - - if test x$TARGET = xX86_DARWIN; then - X86_DARWIN_TRUE= - X86_DARWIN_FALSE='#' -else - X86_DARWIN_TRUE='#' - X86_DARWIN_FALSE= -fi - - if test x$TARGET = xALPHA; then - ALPHA_TRUE= - ALPHA_FALSE='#' -else - ALPHA_TRUE='#' - ALPHA_FALSE= -fi - - if test x$TARGET = xIA64; then - IA64_TRUE= - IA64_FALSE='#' -else - IA64_TRUE='#' - IA64_FALSE= -fi - - if test x$TARGET = xM32R; then - M32R_TRUE= - M32R_FALSE='#' -else - M32R_TRUE='#' - M32R_FALSE= -fi - - if test x$TARGET = xM68K; then - M68K_TRUE= - M68K_FALSE='#' -else - M68K_TRUE='#' - M68K_FALSE= -fi - - if test x$TARGET = xPOWERPC; then - POWERPC_TRUE= - POWERPC_FALSE='#' -else - POWERPC_TRUE='#' - POWERPC_FALSE= -fi - - if test x$TARGET = xPOWERPC_AIX; then - POWERPC_AIX_TRUE= - POWERPC_AIX_FALSE='#' -else - POWERPC_AIX_TRUE='#' - POWERPC_AIX_FALSE= -fi - - if test x$TARGET = xPOWERPC_DARWIN; then - POWERPC_DARWIN_TRUE= - POWERPC_DARWIN_FALSE='#' -else - POWERPC_DARWIN_TRUE='#' - POWERPC_DARWIN_FALSE= -fi - - if test x$TARGET = xPOWERPC_FREEBSD; then - POWERPC_FREEBSD_TRUE= - POWERPC_FREEBSD_FALSE='#' -else - POWERPC_FREEBSD_TRUE='#' - POWERPC_FREEBSD_FALSE= -fi - - if test x$TARGET = xARM; then - ARM_TRUE= - ARM_FALSE='#' -else - ARM_TRUE='#' - ARM_FALSE= -fi - - if test x$TARGET = xLIBFFI_CRIS; then - LIBFFI_CRIS_TRUE= - LIBFFI_CRIS_FALSE='#' -else - LIBFFI_CRIS_TRUE='#' - LIBFFI_CRIS_FALSE= -fi - - if test x$TARGET = xFRV; then - FRV_TRUE= - FRV_FALSE='#' -else - FRV_TRUE='#' - FRV_FALSE= -fi - - if test x$TARGET = xS390; then - S390_TRUE= - S390_FALSE='#' -else - S390_TRUE='#' - S390_FALSE= -fi - - if test x$TARGET = xX86_64; then - X86_64_TRUE= - X86_64_FALSE='#' -else - X86_64_TRUE='#' - X86_64_FALSE= -fi - - if test x$TARGET = xSH; then - SH_TRUE= - SH_FALSE='#' -else - SH_TRUE='#' - SH_FALSE= -fi - - if test x$TARGET = xSH64; then - SH64_TRUE= - SH64_FALSE='#' -else - SH64_TRUE='#' - SH64_FALSE= -fi - - if test x$TARGET = xPA_LINUX; then - PA_LINUX_TRUE= - PA_LINUX_FALSE='#' -else - PA_LINUX_TRUE='#' - PA_LINUX_FALSE= -fi - - if test x$TARGET = xPA_HPUX; then - PA_HPUX_TRUE= - PA_HPUX_FALSE='#' -else - PA_HPUX_TRUE='#' - PA_HPUX_FALSE= -fi - - if test x$TARGET = xPA64_HPUX; then - PA64_HPUX_TRUE= - PA64_HPUX_FALSE='#' -else - PA64_HPUX_TRUE='#' - PA64_HPUX_FALSE= -fi - - -{ echo "$as_me:$LINENO: checking for ANSI C header files" >&5 -echo $ECHO_N "checking for ANSI C header files... $ECHO_C" >&6; } -if test "${ac_cv_header_stdc+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -#include -#include -#include -#include - -int -main () -{ - - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then - ac_cv_header_stdc=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_cv_header_stdc=no -fi - -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - -if test $ac_cv_header_stdc = yes; then - # SunOS 4.x string.h does not declare mem*, contrary to ANSI. - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -#include - -_ACEOF -if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | - $EGREP "memchr" >/dev/null 2>&1; then - : -else - ac_cv_header_stdc=no -fi -rm -f conftest* - -fi - -if test $ac_cv_header_stdc = yes; then - # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI. - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -#include - -_ACEOF -if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | - $EGREP "free" >/dev/null 2>&1; then - : +ac_fn_c_check_func "$LINENO" "mmap" "ac_cv_func_mmap" +if test "x$ac_cv_func_mmap" = x""yes; then : + libffi_func_mmap=yes else - ac_cv_header_stdc=no -fi -rm -f conftest* - + libffi_func_mmap=no fi -if test $ac_cv_header_stdc = yes; then - # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi. - if test "$cross_compiling" = yes; then - : +if test "$libffi_header_sys_mman_h" != yes \ + || test "$libffi_func_mmap" != yes; then + ac_cv_func_mmap_file=no + ac_cv_func_mmap_dev_zero=no + ac_cv_func_mmap_anon=no else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -#include -#include -#if ((' ' & 0x0FF) == 0x020) -# define ISLOWER(c) ('a' <= (c) && (c) <= 'z') -# define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c)) -#else -# define ISLOWER(c) \ - (('a' <= (c) && (c) <= 'i') \ - || ('j' <= (c) && (c) <= 'r') \ - || ('s' <= (c) && (c) <= 'z')) -# define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c)) -#endif - -#define XOR(e, f) (((e) && !(f)) || (!(e) && (f))) -int -main () -{ - int i; - for (i = 0; i < 256; i++) - if (XOR (islower (i), ISLOWER (i)) - || toupper (i) != TOUPPER (i)) - return 2; - return 0; -} -_ACEOF -rm -f conftest$ac_exeext -if { (ac_try="$ac_link" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_link") 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { ac_try='./conftest$ac_exeext' - { (case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_try") 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - : + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether read-only mmap of a plain file works" >&5 +$as_echo_n "checking whether read-only mmap of a plain file works... " >&6; } +if test "${ac_cv_func_mmap_file+set}" = set; then : + $as_echo_n "(cached) " >&6 else - echo "$as_me: program exited with status $ac_status" >&5 -echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -( exit $ac_status ) -ac_cv_header_stdc=no -fi -rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext -fi - - -fi -fi -{ echo "$as_me:$LINENO: result: $ac_cv_header_stdc" >&5 -echo "${ECHO_T}$ac_cv_header_stdc" >&6; } -if test $ac_cv_header_stdc = yes; then - -cat >>confdefs.h <<\_ACEOF -#define STDC_HEADERS 1 -_ACEOF - + # Add a system to this blacklist if + # mmap(0, stat_size, PROT_READ, MAP_PRIVATE, fd, 0) doesn't return a + # memory area containing the same data that you'd get if you applied + # read() to the same fd. The only system known to have a problem here + # is VMS, where text files have record structure. + case "$host_os" in + vms* | ultrix*) + ac_cv_func_mmap_file=no ;; + *) + ac_cv_func_mmap_file=yes;; + esac fi - - -for ac_func in memcpy -do -as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh` -{ echo "$as_me:$LINENO: checking for $ac_func" >&5 -echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6; } -if { as_var=$as_ac_var; eval "test \"\${$as_var+set}\" = set"; }; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -/* Define $ac_func to an innocuous variant, in case declares $ac_func. - For example, HP-UX 11i declares gettimeofday. */ -#define $ac_func innocuous_$ac_func - -/* System header to define __stub macros and hopefully few prototypes, - which can conflict with char $ac_func (); below. - Prefer to if __STDC__ is defined, since - exists even on freestanding compilers. */ - -#ifdef __STDC__ -# include -#else -# include -#endif - -#undef $ac_func - -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char $ac_func (); -/* The GNU C library defines this for functions which it implements - to always fail with ENOSYS. Some functions are actually named - something starting with __ and the normal name is an alias. */ -#if defined __stub_$ac_func || defined __stub___$ac_func -choke me -#endif - -int -main () -{ -return $ac_func (); - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext conftest$ac_exeext -if { (ac_try="$ac_link" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_link") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest$ac_exeext && - $as_test_x conftest$ac_exeext; then - eval "$as_ac_var=yes" +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_func_mmap_file" >&5 +$as_echo "$ac_cv_func_mmap_file" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether mmap from /dev/zero works" >&5 +$as_echo_n "checking whether mmap from /dev/zero works... " >&6; } +if test "${ac_cv_func_mmap_dev_zero+set}" = set; then : + $as_echo_n "(cached) " >&6 else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - eval "$as_ac_var=no" -fi - -rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ - conftest$ac_exeext conftest.$ac_ext -fi -ac_res=`eval echo '${'$as_ac_var'}'` - { echo "$as_me:$LINENO: result: $ac_res" >&5 -echo "${ECHO_T}$ac_res" >&6; } -if test `eval echo '${'$as_ac_var'}'` = yes; then - cat >>confdefs.h <<_ACEOF -#define `echo "HAVE_$ac_func" | $as_tr_cpp` 1 -_ACEOF - + # Add a system to this blacklist if it has mmap() but /dev/zero + # does not exist, or if mmapping /dev/zero does not give anonymous + # zeroed pages with both the following properties: + # 1. If you map N consecutive pages in with one call, and then + # unmap any subset of those pages, the pages that were not + # explicitly unmapped remain accessible. + # 2. If you map two adjacent blocks of memory and then unmap them + # both at once, they must both go away. + # Systems known to be in this category are Windows (all variants), + # VMS, and Darwin. + case "$host_os" in + vms* | cygwin* | pe | mingw* | darwin* | ultrix* | hpux10* | hpux11.00) + ac_cv_func_mmap_dev_zero=no ;; + *) + ac_cv_func_mmap_dev_zero=yes;; + esac fi -done +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_func_mmap_dev_zero" >&5 +$as_echo "$ac_cv_func_mmap_dev_zero" >&6; } -# The Ultrix 4.2 mips builtin alloca declared by alloca.h only works -# for constant arguments. Useless! -{ echo "$as_me:$LINENO: checking for working alloca.h" >&5 -echo $ECHO_N "checking for working alloca.h... $ECHO_C" >&6; } -if test "${ac_cv_working_alloca_h+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 + # Unlike /dev/zero, the MAP_ANON(YMOUS) defines can be probed for. + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for MAP_ANON(YMOUS)" >&5 +$as_echo_n "checking for MAP_ANON(YMOUS)... " >&6; } +if test "${ac_cv_decl_map_anon+set}" = set; then : + $as_echo_n "(cached) " >&6 else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ -#include +#include +#include +#include + +#ifndef MAP_ANONYMOUS +#define MAP_ANONYMOUS MAP_ANON +#endif + int main () { -char *p = (char *) alloca (2 * sizeof (int)); - if (p) return 0; +int n = MAP_ANONYMOUS; ; return 0; } _ACEOF -rm -f conftest.$ac_objext conftest$ac_exeext -if { (ac_try="$ac_link" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_link") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest$ac_exeext && - $as_test_x conftest$ac_exeext; then - ac_cv_working_alloca_h=yes +if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_decl_map_anon=yes else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_cv_working_alloca_h=no + ac_cv_decl_map_anon=no fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_decl_map_anon" >&5 +$as_echo "$ac_cv_decl_map_anon" >&6; } -rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ - conftest$ac_exeext conftest.$ac_ext + if test $ac_cv_decl_map_anon = no; then + ac_cv_func_mmap_anon=no + else + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether mmap with MAP_ANON(YMOUS) works" >&5 +$as_echo_n "checking whether mmap with MAP_ANON(YMOUS) works... " >&6; } +if test "${ac_cv_func_mmap_anon+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + # Add a system to this blacklist if it has mmap() and MAP_ANON or + # MAP_ANONYMOUS, but using mmap(..., MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) + # doesn't give anonymous zeroed pages with the same properties listed + # above for use of /dev/zero. + # Systems known to be in this category are Windows, VMS, and SCO Unix. + case "$host_os" in + vms* | cygwin* | pe | mingw* | sco* | udk* ) + ac_cv_func_mmap_anon=no ;; + *) + ac_cv_func_mmap_anon=yes;; + esac +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_func_mmap_anon" >&5 +$as_echo "$ac_cv_func_mmap_anon" >&6; } + fi fi -{ echo "$as_me:$LINENO: result: $ac_cv_working_alloca_h" >&5 -echo "${ECHO_T}$ac_cv_working_alloca_h" >&6; } -if test $ac_cv_working_alloca_h = yes; then -cat >>confdefs.h <<\_ACEOF -#define HAVE_ALLOCA_H 1 -_ACEOF +if test $ac_cv_func_mmap_file = yes; then + +$as_echo "#define HAVE_MMAP_FILE 1" >>confdefs.h fi +if test $ac_cv_func_mmap_dev_zero = yes; then -{ echo "$as_me:$LINENO: checking for alloca" >&5 -echo $ECHO_N "checking for alloca... $ECHO_C" >&6; } -if test "${ac_cv_func_alloca_works+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -#ifdef __GNUC__ -# define alloca __builtin_alloca -#else -# ifdef _MSC_VER -# include -# define alloca _alloca -# else -# ifdef HAVE_ALLOCA_H -# include -# else -# ifdef _AIX - #pragma alloca -# else -# ifndef alloca /* predefined by HP cc +Olibcalls */ -char *alloca (); -# endif -# endif -# endif -# endif -#endif +$as_echo "#define HAVE_MMAP_DEV_ZERO 1" >>confdefs.h -int -main () -{ -char *p = (char *) alloca (1); - if (p) return 0; - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext conftest$ac_exeext -if { (ac_try="$ac_link" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_link") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest$ac_exeext && - $as_test_x conftest$ac_exeext; then - ac_cv_func_alloca_works=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 +fi +if test $ac_cv_func_mmap_anon = yes; then + +$as_echo "#define HAVE_MMAP_ANON 1" >>confdefs.h - ac_cv_func_alloca_works=no fi -rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ - conftest$ac_exeext conftest.$ac_ext + + if test -d $srcdir/testsuite; then + TESTSUBDIR_TRUE= + TESTSUBDIR_FALSE='#' +else + TESTSUBDIR_TRUE='#' + TESTSUBDIR_FALSE= fi -{ echo "$as_me:$LINENO: result: $ac_cv_func_alloca_works" >&5 -echo "${ECHO_T}$ac_cv_func_alloca_works" >&6; } -if test $ac_cv_func_alloca_works = yes; then -cat >>confdefs.h <<\_ACEOF -#define HAVE_ALLOCA 1 -_ACEOF +TARGETDIR="unknown" +case "$host" in + alpha*-*-*) + TARGET=ALPHA; TARGETDIR=alpha; + # Support 128-bit long double, changable via command-line switch. + HAVE_LONG_DOUBLE='defined(__LONG_DOUBLE_128__)' + ;; -else - # The SVR3 libPW and SVR4 libucb both contain incompatible functions -# that cause trouble. Some versions do not even contain alloca or -# contain a buggy version. If you still want to use their alloca, -# use ar to extract alloca.o from them instead of compiling alloca.c. + arm*-*-*) + TARGET=ARM; TARGETDIR=arm + ;; -ALLOCA=\${LIBOBJDIR}alloca.$ac_objext + amd64-*-freebsd* | amd64-*-openbsd*) + TARGET=X86_64; TARGETDIR=x86 + ;; -cat >>confdefs.h <<\_ACEOF -#define C_ALLOCA 1 -_ACEOF + avr32*-*-*) + TARGET=AVR32; TARGETDIR=avr32 + ;; + cris-*-*) + TARGET=LIBFFI_CRIS; TARGETDIR=cris + ;; -{ echo "$as_me:$LINENO: checking whether \`alloca.c' needs Cray hooks" >&5 -echo $ECHO_N "checking whether \`alloca.c' needs Cray hooks... $ECHO_C" >&6; } -if test "${ac_cv_os_cray+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -#if defined CRAY && ! defined CRAY2 -webecray -#else -wenotbecray -#endif + frv-*-*) + TARGET=FRV; TARGETDIR=frv + ;; -_ACEOF -if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | - $EGREP "webecray" >/dev/null 2>&1; then - ac_cv_os_cray=yes -else - ac_cv_os_cray=no -fi -rm -f conftest* + hppa*-*-linux* | parisc*-*-linux*) + TARGET=PA_LINUX; TARGETDIR=pa + ;; + hppa*64-*-hpux*) + TARGET=PA64_HPUX; TARGETDIR=pa + ;; + hppa*-*-hpux*) + TARGET=PA_HPUX; TARGETDIR=pa + ;; -fi -{ echo "$as_me:$LINENO: result: $ac_cv_os_cray" >&5 -echo "${ECHO_T}$ac_cv_os_cray" >&6; } -if test $ac_cv_os_cray = yes; then - for ac_func in _getb67 GETB67 getb67; do - as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh` -{ echo "$as_me:$LINENO: checking for $ac_func" >&5 -echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6; } -if { as_var=$as_ac_var; eval "test \"\${$as_var+set}\" = set"; }; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -/* Define $ac_func to an innocuous variant, in case declares $ac_func. - For example, HP-UX 11i declares gettimeofday. */ -#define $ac_func innocuous_$ac_func + i?86-*-freebsd* | i?86-*-openbsd*) + TARGET=X86_FREEBSD; TARGETDIR=x86 + ;; + i?86-win32* | i?86-*-cygwin* | i?86-*-mingw*) + TARGET=X86_WIN32; TARGETDIR=x86 + # All mingw/cygwin/win32 builds require this for sharedlib + AM_LTLDFLAGS="-no-undefined" + ;; + i?86-*-darwin*) + TARGET=X86_DARWIN; TARGETDIR=x86 + ;; + i?86-*-solaris2.1[0-9]*) + TARGET=X86_64; TARGETDIR=x86 + ;; + i*86-*-nto-qnx*) + TARGET=X86; TARGETDIR=x86 + ;; + i?86-*-*) + TARGET=X86; TARGETDIR=x86 + ;; -/* System header to define __stub macros and hopefully few prototypes, - which can conflict with char $ac_func (); below. - Prefer to if __STDC__ is defined, since - exists even on freestanding compilers. */ + ia64*-*-*) + TARGET=IA64; TARGETDIR=ia64 + ;; -#ifdef __STDC__ -# include -#else -# include -#endif + m32r*-*-*) + TARGET=M32R; TARGETDIR=m32r + ;; + + m68k-*-*) + TARGET=M68K; TARGETDIR=m68k + ;; -#undef $ac_func + mips-sgi-irix5.* | mips-sgi-irix6.*) + TARGET=MIPS_IRIX; TARGETDIR=mips + ;; + mips*-*-linux*) + # Support 128-bit long double for NewABI. + HAVE_LONG_DOUBLE='defined(__mips64)' + TARGET=MIPS_IRIX; TARGETDIR=mips + ;; -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char $ac_func (); -/* The GNU C library defines this for functions which it implements - to always fail with ENOSYS. Some functions are actually named - something starting with __ and the normal name is an alias. */ -#if defined __stub_$ac_func || defined __stub___$ac_func -choke me -#endif + powerpc*-*-linux* | powerpc-*-sysv*) + TARGET=POWERPC; TARGETDIR=powerpc + ;; + powerpc-*-beos*) + TARGET=POWERPC; TARGETDIR=powerpc + ;; + powerpc-*-darwin*) + TARGET=POWERPC_DARWIN; TARGETDIR=powerpc + ;; + powerpc-*-aix* | rs6000-*-aix*) + TARGET=POWERPC_AIX; TARGETDIR=powerpc + ;; + powerpc-*-freebsd*) + TARGET=POWERPC_FREEBSD; TARGETDIR=powerpc + ;; + powerpc*-*-rtems*) + TARGET=POWERPC; TARGETDIR=powerpc + ;; -int -main () -{ -return $ac_func (); - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext conftest$ac_exeext -if { (ac_try="$ac_link" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; + s390-*-* | s390x-*-*) + TARGET=S390; TARGETDIR=s390 + ;; + + sh-*-* | sh[34]*-*-*) + TARGET=SH; TARGETDIR=sh + ;; + sh64-*-* | sh5*-*-*) + TARGET=SH64; TARGETDIR=sh64 + ;; + + sparc*-*-*) + TARGET=SPARC; TARGETDIR=sparc + ;; + + x86_64-*-darwin*) + TARGET=X86_DARWIN; TARGETDIR=x86 + ;; + + x86_64-*-cygwin* | x86_64-*-mingw*) + TARGET=X86_WIN64; TARGETDIR=x86 + ;; + + x86_64-*-*) + TARGET=X86_64; TARGETDIR=x86 + ;; esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_link") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest$ac_exeext && - $as_test_x conftest$ac_exeext; then - eval "$as_ac_var=yes" -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - eval "$as_ac_var=no" -fi -rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ - conftest$ac_exeext conftest.$ac_ext -fi -ac_res=`eval echo '${'$as_ac_var'}'` - { echo "$as_me:$LINENO: result: $ac_res" >&5 -echo "${ECHO_T}$ac_res" >&6; } -if test `eval echo '${'$as_ac_var'}'` = yes; then -cat >>confdefs.h <<_ACEOF -#define CRAY_STACKSEG_END $ac_func -_ACEOF - break +if test $TARGETDIR = unknown; then + as_fn_error "\"libffi has not been ported to $host.\"" "$LINENO" 5 fi - done + if expr x$TARGET : 'xMIPS' > /dev/null; then + MIPS_TRUE= + MIPS_FALSE='#' +else + MIPS_TRUE='#' + MIPS_FALSE= fi -{ echo "$as_me:$LINENO: checking stack direction for C alloca" >&5 -echo $ECHO_N "checking stack direction for C alloca... $ECHO_C" >&6; } -if test "${ac_cv_c_stack_direction+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - if test "$cross_compiling" = yes; then - ac_cv_c_stack_direction=0 + if test x$TARGET = xSPARC; then + SPARC_TRUE= + SPARC_FALSE='#' else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default -int -find_stack_direction () -{ - static char *addr = 0; - auto char dummy; - if (addr == 0) - { - addr = &dummy; - return find_stack_direction (); - } - else - return (&dummy > addr) ? 1 : -1; -} + SPARC_TRUE='#' + SPARC_FALSE= +fi -int -main () -{ - return find_stack_direction () < 0; -} -_ACEOF -rm -f conftest$ac_exeext -if { (ac_try="$ac_link" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_link") 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { ac_try='./conftest$ac_exeext' - { (case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_try") 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_cv_c_stack_direction=1 + if test x$TARGET = xX86; then + X86_TRUE= + X86_FALSE='#' else - echo "$as_me: program exited with status $ac_status" >&5 -echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -( exit $ac_status ) -ac_cv_c_stack_direction=-1 -fi -rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext + X86_TRUE='#' + X86_FALSE= fi - + if test x$TARGET = xX86_FREEBSD; then + X86_FREEBSD_TRUE= + X86_FREEBSD_FALSE='#' +else + X86_FREEBSD_TRUE='#' + X86_FREEBSD_FALSE= fi -{ echo "$as_me:$LINENO: result: $ac_cv_c_stack_direction" >&5 -echo "${ECHO_T}$ac_cv_c_stack_direction" >&6; } - -cat >>confdefs.h <<_ACEOF -#define STACK_DIRECTION $ac_cv_c_stack_direction -_ACEOF - + if test x$TARGET = xX86_WIN32; then + X86_WIN32_TRUE= + X86_WIN32_FALSE='#' +else + X86_WIN32_TRUE='#' + X86_WIN32_FALSE= fi - -{ echo "$as_me:$LINENO: checking for double" >&5 -echo $ECHO_N "checking for double... $ECHO_C" >&6; } -if test "${ac_cv_type_double+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 + if test x$TARGET = xX86_WIN64; then + X86_WIN64_TRUE= + X86_WIN64_FALSE='#' else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default -typedef double ac__type_new_; -int -main () -{ -if ((ac__type_new_ *) 0) - return 0; -if (sizeof (ac__type_new_)) - return 0; - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then - ac_cv_type_double=yes + X86_WIN64_TRUE='#' + X86_WIN64_FALSE= +fi + + if test x$TARGET = xX86_DARWIN; then + X86_DARWIN_TRUE= + X86_DARWIN_FALSE='#' else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 + X86_DARWIN_TRUE='#' + X86_DARWIN_FALSE= +fi - ac_cv_type_double=no + if test x$TARGET = xALPHA; then + ALPHA_TRUE= + ALPHA_FALSE='#' +else + ALPHA_TRUE='#' + ALPHA_FALSE= fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + if test x$TARGET = xIA64; then + IA64_TRUE= + IA64_FALSE='#' +else + IA64_TRUE='#' + IA64_FALSE= fi -{ echo "$as_me:$LINENO: result: $ac_cv_type_double" >&5 -echo "${ECHO_T}$ac_cv_type_double" >&6; } -# The cast to long int works around a bug in the HP C Compiler -# version HP92453-01 B.11.11.23709.GP, which incorrectly rejects -# declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'. -# This bug is HP SR number 8606223364. -{ echo "$as_me:$LINENO: checking size of double" >&5 -echo $ECHO_N "checking size of double... $ECHO_C" >&6; } -if test "${ac_cv_sizeof_double+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 + if test x$TARGET = xM32R; then + M32R_TRUE= + M32R_FALSE='#' else - if test "$cross_compiling" = yes; then - # Depending upon the size, compute the lo and hi bounds. -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default - typedef double ac__type_sizeof_; -int -main () -{ -static int test_array [1 - 2 * !(((long int) (sizeof (ac__type_sizeof_))) >= 0)]; -test_array [0] = 0 + M32R_TRUE='#' + M32R_FALSE= +fi - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then - ac_lo=0 ac_mid=0 - while :; do - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default - typedef double ac__type_sizeof_; -int -main () -{ -static int test_array [1 - 2 * !(((long int) (sizeof (ac__type_sizeof_))) <= $ac_mid)]; -test_array [0] = 0 + if test x$TARGET = xM68K; then + M68K_TRUE= + M68K_FALSE='#' +else + M68K_TRUE='#' + M68K_FALSE= +fi - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then - ac_hi=$ac_mid; break + if test x$TARGET = xPOWERPC; then + POWERPC_TRUE= + POWERPC_FALSE='#' else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 + POWERPC_TRUE='#' + POWERPC_FALSE= +fi - ac_lo=`expr $ac_mid + 1` - if test $ac_lo -le $ac_mid; then - ac_lo= ac_hi= - break - fi - ac_mid=`expr 2 '*' $ac_mid + 1` + if test x$TARGET = xPOWERPC_AIX; then + POWERPC_AIX_TRUE= + POWERPC_AIX_FALSE='#' +else + POWERPC_AIX_TRUE='#' + POWERPC_AIX_FALSE= fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - done + if test x$TARGET = xPOWERPC_DARWIN; then + POWERPC_DARWIN_TRUE= + POWERPC_DARWIN_FALSE='#' else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 + POWERPC_DARWIN_TRUE='#' + POWERPC_DARWIN_FALSE= +fi - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default - typedef double ac__type_sizeof_; -int -main () -{ -static int test_array [1 - 2 * !(((long int) (sizeof (ac__type_sizeof_))) < 0)]; -test_array [0] = 0 + if test x$TARGET = xPOWERPC_FREEBSD; then + POWERPC_FREEBSD_TRUE= + POWERPC_FREEBSD_FALSE='#' +else + POWERPC_FREEBSD_TRUE='#' + POWERPC_FREEBSD_FALSE= +fi - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then - ac_hi=-1 ac_mid=-1 - while :; do - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default - typedef double ac__type_sizeof_; -int -main () -{ -static int test_array [1 - 2 * !(((long int) (sizeof (ac__type_sizeof_))) >= $ac_mid)]; -test_array [0] = 0 + if test x$TARGET = xARM; then + ARM_TRUE= + ARM_FALSE='#' +else + ARM_TRUE='#' + ARM_FALSE= +fi - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then - ac_lo=$ac_mid; break + if test x$TARGET = xAVR32; then + AVR32_TRUE= + AVR32_FALSE='#' else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 + AVR32_TRUE='#' + AVR32_FALSE= +fi - ac_hi=`expr '(' $ac_mid ')' - 1` - if test $ac_mid -le $ac_hi; then - ac_lo= ac_hi= - break - fi - ac_mid=`expr 2 '*' $ac_mid` + if test x$TARGET = xLIBFFI_CRIS; then + LIBFFI_CRIS_TRUE= + LIBFFI_CRIS_FALSE='#' +else + LIBFFI_CRIS_TRUE='#' + LIBFFI_CRIS_FALSE= fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - done + if test x$TARGET = xFRV; then + FRV_TRUE= + FRV_FALSE='#' else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 + FRV_TRUE='#' + FRV_FALSE= +fi - ac_lo= ac_hi= + if test x$TARGET = xS390; then + S390_TRUE= + S390_FALSE='#' +else + S390_TRUE='#' + S390_FALSE= fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + if test x$TARGET = xX86_64; then + X86_64_TRUE= + X86_64_FALSE='#' +else + X86_64_TRUE='#' + X86_64_FALSE= fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -# Binary search between lo and hi bounds. -while test "x$ac_lo" != "x$ac_hi"; do - ac_mid=`expr '(' $ac_hi - $ac_lo ')' / 2 + $ac_lo` - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default - typedef double ac__type_sizeof_; -int -main () -{ -static int test_array [1 - 2 * !(((long int) (sizeof (ac__type_sizeof_))) <= $ac_mid)]; -test_array [0] = 0 + if test x$TARGET = xSH; then + SH_TRUE= + SH_FALSE='#' +else + SH_TRUE='#' + SH_FALSE= +fi - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then - ac_hi=$ac_mid + if test x$TARGET = xSH64; then + SH64_TRUE= + SH64_FALSE='#' else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 + SH64_TRUE='#' + SH64_FALSE= +fi - ac_lo=`expr '(' $ac_mid ')' + 1` + if test x$TARGET = xPA_LINUX; then + PA_LINUX_TRUE= + PA_LINUX_FALSE='#' +else + PA_LINUX_TRUE='#' + PA_LINUX_FALSE= fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -done -case $ac_lo in -?*) ac_cv_sizeof_double=$ac_lo;; -'') if test "$ac_cv_type_double" = yes; then - { { echo "$as_me:$LINENO: error: cannot compute sizeof (double) -See \`config.log' for more details." >&5 -echo "$as_me: error: cannot compute sizeof (double) -See \`config.log' for more details." >&2;} - { (exit 77); exit 77; }; } - else - ac_cv_sizeof_double=0 - fi ;; -esac + if test x$TARGET = xPA_HPUX; then + PA_HPUX_TRUE= + PA_HPUX_FALSE='#' else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF + PA_HPUX_TRUE='#' + PA_HPUX_FALSE= +fi + + if test x$TARGET = xPA64_HPUX; then + PA64_HPUX_TRUE= + PA64_HPUX_FALSE='#' +else + PA64_HPUX_TRUE='#' + PA64_HPUX_FALSE= +fi + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for ANSI C header files" >&5 +$as_echo_n "checking for ANSI C header files... " >&6; } +if test "${ac_cv_header_stdc+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ -$ac_includes_default - typedef double ac__type_sizeof_; -static long int longval () { return (long int) (sizeof (ac__type_sizeof_)); } -static unsigned long int ulongval () { return (long int) (sizeof (ac__type_sizeof_)); } -#include #include +#include +#include +#include + int main () { - FILE *f = fopen ("conftest.val", "w"); - if (! f) - return 1; - if (((long int) (sizeof (ac__type_sizeof_))) < 0) - { - long int i = longval (); - if (i != ((long int) (sizeof (ac__type_sizeof_)))) - return 1; - fprintf (f, "%ld\n", i); - } - else - { - unsigned long int i = ulongval (); - if (i != ((long int) (sizeof (ac__type_sizeof_)))) - return 1; - fprintf (f, "%lu\n", i); - } - return ferror (f) || fclose (f) != 0; - ; return 0; } _ACEOF -rm -f conftest$ac_exeext -if { (ac_try="$ac_link" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_link") 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { ac_try='./conftest$ac_exeext' - { (case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_try") 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_cv_sizeof_double=`cat conftest.val` +if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_header_stdc=yes else - echo "$as_me: program exited with status $ac_status" >&5 -echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -( exit $ac_status ) -if test "$ac_cv_type_double" = yes; then - { { echo "$as_me:$LINENO: error: cannot compute sizeof (double) -See \`config.log' for more details." >&5 -echo "$as_me: error: cannot compute sizeof (double) -See \`config.log' for more details." >&2;} - { (exit 77); exit 77; }; } - else - ac_cv_sizeof_double=0 - fi -fi -rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext + ac_cv_header_stdc=no fi -rm -f conftest.val +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + +if test $ac_cv_header_stdc = yes; then + # SunOS 4.x string.h does not declare mem*, contrary to ANSI. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include + +_ACEOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP "memchr" >/dev/null 2>&1; then : + +else + ac_cv_header_stdc=no fi -{ echo "$as_me:$LINENO: result: $ac_cv_sizeof_double" >&5 -echo "${ECHO_T}$ac_cv_sizeof_double" >&6; } +rm -f conftest* +fi +if test $ac_cv_header_stdc = yes; then + # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include -cat >>confdefs.h <<_ACEOF -#define SIZEOF_DOUBLE $ac_cv_sizeof_double _ACEOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP "free" >/dev/null 2>&1; then : + +else + ac_cv_header_stdc=no +fi +rm -f conftest* +fi -{ echo "$as_me:$LINENO: checking for long double" >&5 -echo $ECHO_N "checking for long double... $ECHO_C" >&6; } -if test "${ac_cv_type_long_double+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 +if test $ac_cv_header_stdc = yes; then + # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi. + if test "$cross_compiling" = yes; then : + : else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ -$ac_includes_default -typedef long double ac__type_new_; +#include +#include +#if ((' ' & 0x0FF) == 0x020) +# define ISLOWER(c) ('a' <= (c) && (c) <= 'z') +# define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c)) +#else +# define ISLOWER(c) \ + (('a' <= (c) && (c) <= 'i') \ + || ('j' <= (c) && (c) <= 'r') \ + || ('s' <= (c) && (c) <= 'z')) +# define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c)) +#endif + +#define XOR(e, f) (((e) && !(f)) || (!(e) && (f))) int main () { -if ((ac__type_new_ *) 0) - return 0; -if (sizeof (ac__type_new_)) - return 0; - ; + int i; + for (i = 0; i < 256; i++) + if (XOR (islower (i), ISLOWER (i)) + || toupper (i) != TOUPPER (i)) + return 2; return 0; } _ACEOF -rm -f conftest.$ac_objext -if { (ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then - ac_cv_type_long_double=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 +if ac_fn_c_try_run "$LINENO"; then : - ac_cv_type_long_double=no +else + ac_cv_header_stdc=no +fi +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest.beam conftest.$ac_ext fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi -{ echo "$as_me:$LINENO: result: $ac_cv_type_long_double" >&5 -echo "${ECHO_T}$ac_cv_type_long_double" >&6; } +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_stdc" >&5 +$as_echo "$ac_cv_header_stdc" >&6; } +if test $ac_cv_header_stdc = yes; then -# The cast to long int works around a bug in the HP C Compiler -# version HP92453-01 B.11.11.23709.GP, which incorrectly rejects -# declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'. -# This bug is HP SR number 8606223364. -{ echo "$as_me:$LINENO: checking size of long double" >&5 -echo $ECHO_N "checking size of long double... $ECHO_C" >&6; } -if test "${ac_cv_sizeof_long_double+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - if test "$cross_compiling" = yes; then - # Depending upon the size, compute the lo and hi bounds. -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default - typedef long double ac__type_sizeof_; -int -main () -{ -static int test_array [1 - 2 * !(((long int) (sizeof (ac__type_sizeof_))) >= 0)]; -test_array [0] = 0 +$as_echo "#define STDC_HEADERS 1" >>confdefs.h - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then - ac_lo=0 ac_mid=0 - while :; do - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ +fi + +for ac_func in memcpy +do : + ac_fn_c_check_func "$LINENO" "memcpy" "ac_cv_func_memcpy" +if test "x$ac_cv_func_memcpy" = x""yes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE_MEMCPY 1 _ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF + +fi +done + +# The Ultrix 4.2 mips builtin alloca declared by alloca.h only works +# for constant arguments. Useless! +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for working alloca.h" >&5 +$as_echo_n "checking for working alloca.h... " >&6; } +if test "${ac_cv_working_alloca_h+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ -$ac_includes_default - typedef long double ac__type_sizeof_; +#include int main () { -static int test_array [1 - 2 * !(((long int) (sizeof (ac__type_sizeof_))) <= $ac_mid)]; -test_array [0] = 0 - +char *p = (char *) alloca (2 * sizeof (int)); + if (p) return 0; ; return 0; } _ACEOF -rm -f conftest.$ac_objext -if { (ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then - ac_hi=$ac_mid; break +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_working_alloca_h=yes else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 + ac_cv_working_alloca_h=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_working_alloca_h" >&5 +$as_echo "$ac_cv_working_alloca_h" >&6; } +if test $ac_cv_working_alloca_h = yes; then + +$as_echo "#define HAVE_ALLOCA_H 1" >>confdefs.h - ac_lo=`expr $ac_mid + 1` - if test $ac_lo -le $ac_mid; then - ac_lo= ac_hi= - break - fi - ac_mid=`expr 2 '*' $ac_mid + 1` fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - done +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for alloca" >&5 +$as_echo_n "checking for alloca... " >&6; } +if test "${ac_cv_func_alloca_works+set}" = set; then : + $as_echo_n "(cached) " >&6 else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ -$ac_includes_default - typedef long double ac__type_sizeof_; -int -main () -{ -static int test_array [1 - 2 * !(((long int) (sizeof (ac__type_sizeof_))) < 0)]; -test_array [0] = 0 +#ifdef __GNUC__ +# define alloca __builtin_alloca +#else +# ifdef _MSC_VER +# include +# define alloca _alloca +# else +# ifdef HAVE_ALLOCA_H +# include +# else +# ifdef _AIX + #pragma alloca +# else +# ifndef alloca /* predefined by HP cc +Olibcalls */ +char *alloca (); +# endif +# endif +# endif +# endif +#endif - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then - ac_hi=-1 ac_mid=-1 - while :; do - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default - typedef long double ac__type_sizeof_; int main () { -static int test_array [1 - 2 * !(((long int) (sizeof (ac__type_sizeof_))) >= $ac_mid)]; -test_array [0] = 0 - +char *p = (char *) alloca (1); + if (p) return 0; ; return 0; } _ACEOF -rm -f conftest.$ac_objext -if { (ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then - ac_lo=$ac_mid; break +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_func_alloca_works=yes else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_hi=`expr '(' $ac_mid ')' - 1` - if test $ac_mid -le $ac_hi; then - ac_lo= ac_hi= - break - fi - ac_mid=`expr 2 '*' $ac_mid` + ac_cv_func_alloca_works=no fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_func_alloca_works" >&5 +$as_echo "$ac_cv_func_alloca_works" >&6; } + +if test $ac_cv_func_alloca_works = yes; then + +$as_echo "#define HAVE_ALLOCA 1" >>confdefs.h -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - done else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 + # The SVR3 libPW and SVR4 libucb both contain incompatible functions +# that cause trouble. Some versions do not even contain alloca or +# contain a buggy version. If you still want to use their alloca, +# use ar to extract alloca.o from them instead of compiling alloca.c. - ac_lo= ac_hi= -fi +ALLOCA=\${LIBOBJDIR}alloca.$ac_objext -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -fi +$as_echo "#define C_ALLOCA 1" >>confdefs.h -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -# Binary search between lo and hi bounds. -while test "x$ac_lo" != "x$ac_hi"; do - ac_mid=`expr '(' $ac_hi - $ac_lo ')' / 2 + $ac_lo` - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether \`alloca.c' needs Cray hooks" >&5 +$as_echo_n "checking whether \`alloca.c' needs Cray hooks... " >&6; } +if test "${ac_cv_os_cray+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ -$ac_includes_default - typedef long double ac__type_sizeof_; -int -main () -{ -static int test_array [1 - 2 * !(((long int) (sizeof (ac__type_sizeof_))) <= $ac_mid)]; -test_array [0] = 0 +#if defined CRAY && ! defined CRAY2 +webecray +#else +wenotbecray +#endif - ; - return 0; -} _ACEOF -rm -f conftest.$ac_objext -if { (ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then - ac_hi=$ac_mid +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP "webecray" >/dev/null 2>&1; then : + ac_cv_os_cray=yes else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 + ac_cv_os_cray=no +fi +rm -f conftest* - ac_lo=`expr '(' $ac_mid ')' + 1` fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_os_cray" >&5 +$as_echo "$ac_cv_os_cray" >&6; } +if test $ac_cv_os_cray = yes; then + for ac_func in _getb67 GETB67 getb67; do + as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh` +ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var" +eval as_val=\$$as_ac_var + if test "x$as_val" = x""yes; then : -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -done -case $ac_lo in -?*) ac_cv_sizeof_long_double=$ac_lo;; -'') if test "$ac_cv_type_long_double" = yes; then - { { echo "$as_me:$LINENO: error: cannot compute sizeof (long double) -See \`config.log' for more details." >&5 -echo "$as_me: error: cannot compute sizeof (long double) -See \`config.log' for more details." >&2;} - { (exit 77); exit 77; }; } - else - ac_cv_sizeof_long_double=0 - fi ;; -esac -else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ +cat >>confdefs.h <<_ACEOF +#define CRAY_STACKSEG_END $ac_func _ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF + + break +fi + + done +fi + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking stack direction for C alloca" >&5 +$as_echo_n "checking stack direction for C alloca... " >&6; } +if test "${ac_cv_c_stack_direction+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test "$cross_compiling" = yes; then : + ac_cv_c_stack_direction=0 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $ac_includes_default - typedef long double ac__type_sizeof_; -static long int longval () { return (long int) (sizeof (ac__type_sizeof_)); } -static unsigned long int ulongval () { return (long int) (sizeof (ac__type_sizeof_)); } -#include -#include int -main () +find_stack_direction () { - - FILE *f = fopen ("conftest.val", "w"); - if (! f) - return 1; - if (((long int) (sizeof (ac__type_sizeof_))) < 0) + static char *addr = 0; + auto char dummy; + if (addr == 0) { - long int i = longval (); - if (i != ((long int) (sizeof (ac__type_sizeof_)))) - return 1; - fprintf (f, "%ld\n", i); + addr = &dummy; + return find_stack_direction (); } else - { - unsigned long int i = ulongval (); - if (i != ((long int) (sizeof (ac__type_sizeof_)))) - return 1; - fprintf (f, "%lu\n", i); - } - return ferror (f) || fclose (f) != 0; + return (&dummy > addr) ? 1 : -1; +} - ; - return 0; +int +main () +{ + return find_stack_direction () < 0; } _ACEOF -rm -f conftest$ac_exeext -if { (ac_try="$ac_link" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_link") 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { ac_try='./conftest$ac_exeext' - { (case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_try") 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_cv_sizeof_long_double=`cat conftest.val` +if ac_fn_c_try_run "$LINENO"; then : + ac_cv_c_stack_direction=1 else - echo "$as_me: program exited with status $ac_status" >&5 -echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 + ac_cv_c_stack_direction=-1 +fi +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest.beam conftest.$ac_ext +fi + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_stack_direction" >&5 +$as_echo "$ac_cv_c_stack_direction" >&6; } +cat >>confdefs.h <<_ACEOF +#define STACK_DIRECTION $ac_cv_c_stack_direction +_ACEOF + + +fi + -( exit $ac_status ) -if test "$ac_cv_type_long_double" = yes; then - { { echo "$as_me:$LINENO: error: cannot compute sizeof (long double) -See \`config.log' for more details." >&5 -echo "$as_me: error: cannot compute sizeof (long double) -See \`config.log' for more details." >&2;} - { (exit 77); exit 77; }; } +# The cast to long int works around a bug in the HP C Compiler +# version HP92453-01 B.11.11.23709.GP, which incorrectly rejects +# declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'. +# This bug is HP SR number 8606223364. +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking size of double" >&5 +$as_echo_n "checking size of double... " >&6; } +if test "${ac_cv_sizeof_double+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (double))" "ac_cv_sizeof_double" "$ac_includes_default"; then : + +else + if test "$ac_cv_type_double" = yes; then + { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +{ as_fn_set_status 77 +as_fn_error "cannot compute sizeof (double) +See \`config.log' for more details." "$LINENO" 5; }; } else - ac_cv_sizeof_long_double=0 + ac_cv_sizeof_double=0 fi fi -rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext + fi -rm -f conftest.val +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_double" >&5 +$as_echo "$ac_cv_sizeof_double" >&6; } + + + +cat >>confdefs.h <<_ACEOF +#define SIZEOF_DOUBLE $ac_cv_sizeof_double +_ACEOF + + +# The cast to long int works around a bug in the HP C Compiler +# version HP92453-01 B.11.11.23709.GP, which incorrectly rejects +# declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'. +# This bug is HP SR number 8606223364. +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking size of long double" >&5 +$as_echo_n "checking size of long double... " >&6; } +if test "${ac_cv_sizeof_long_double+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (long double))" "ac_cv_sizeof_long_double" "$ac_includes_default"; then : + +else + if test "$ac_cv_type_long_double" = yes; then + { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +{ as_fn_set_status 77 +as_fn_error "cannot compute sizeof (long double) +See \`config.log' for more details." "$LINENO" 5; }; } + else + ac_cv_sizeof_long_double=0 + fi +fi + fi -{ echo "$as_me:$LINENO: result: $ac_cv_sizeof_long_double" >&5 -echo "${ECHO_T}$ac_cv_sizeof_long_double" >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_long_double" >&5 +$as_echo "$ac_cv_sizeof_long_double" >&6; } @@ -22123,264 +5582,246 @@ if test $ac_cv_sizeof_long_double != 0; then HAVE_LONG_DOUBLE=1 -cat >>confdefs.h <<\_ACEOF -#define HAVE_LONG_DOUBLE 1 -_ACEOF +$as_echo "#define HAVE_LONG_DOUBLE 1" >>confdefs.h fi fi fi -{ echo "$as_me:$LINENO: checking whether byte ordering is bigendian" >&5 -echo $ECHO_N "checking whether byte ordering is bigendian... $ECHO_C" >&6; } -if test "${ac_cv_c_bigendian+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - # See if sys/param.h defines the BYTE_ORDER macro. -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether byte ordering is bigendian" >&5 +$as_echo_n "checking whether byte ordering is bigendian... " >&6; } +if test "${ac_cv_c_bigendian+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + ac_cv_c_bigendian=unknown + # See if we're dealing with a universal compiler. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#ifndef __APPLE_CC__ + not a universal capable compiler + #endif + typedef int dummy; + +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + + # Check for potential -arch flags. It is not universal unless + # there are at least two -arch flags with different values. + ac_arch= + ac_prev= + for ac_word in $CC $CFLAGS $CPPFLAGS $LDFLAGS; do + if test -n "$ac_prev"; then + case $ac_word in + i?86 | x86_64 | ppc | ppc64) + if test -z "$ac_arch" || test "$ac_arch" = "$ac_word"; then + ac_arch=$ac_word + else + ac_cv_c_bigendian=universal + break + fi + ;; + esac + ac_prev= + elif test "x$ac_word" = "x-arch"; then + ac_prev=arch + fi + done +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + if test $ac_cv_c_bigendian = unknown; then + # See if sys/param.h defines the BYTE_ORDER macro. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include -#include + #include int main () { -#if ! (defined BYTE_ORDER && defined BIG_ENDIAN && defined LITTLE_ENDIAN \ - && BYTE_ORDER && BIG_ENDIAN && LITTLE_ENDIAN) - bogus endian macros -#endif +#if ! (defined BYTE_ORDER && defined BIG_ENDIAN \ + && defined LITTLE_ENDIAN && BYTE_ORDER && BIG_ENDIAN \ + && LITTLE_ENDIAN) + bogus endian macros + #endif ; return 0; } _ACEOF -rm -f conftest.$ac_objext -if { (ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then +if ac_fn_c_try_compile "$LINENO"; then : # It does; now see whether it defined to BIG_ENDIAN or not. -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include -#include + #include int main () { #if BYTE_ORDER != BIG_ENDIAN - not big endian -#endif + not big endian + #endif ; return 0; } _ACEOF -rm -f conftest.$ac_objext -if { (ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then +if ac_fn_c_try_compile "$LINENO"; then : ac_cv_c_bigendian=yes else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_cv_c_bigendian=no + ac_cv_c_bigendian=no fi - rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + fi + if test $ac_cv_c_bigendian = unknown; then + # See if defines _LITTLE_ENDIAN or _BIG_ENDIAN (e.g., Solaris). + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include - # It does not; compile a test program. -if test "$cross_compiling" = yes; then - # try to guess the endianness by grepping values into an object file - ac_cv_c_bigendian=unknown - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ +int +main () +{ +#if ! (defined _LITTLE_ENDIAN || defined _BIG_ENDIAN) + bogus endian macros + #endif + + ; + return 0; +} _ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + # It does; now see whether it defined to _BIG_ENDIAN or not. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ -short int ascii_mm[] = { 0x4249, 0x4765, 0x6E44, 0x6961, 0x6E53, 0x7953, 0 }; -short int ascii_ii[] = { 0x694C, 0x5454, 0x656C, 0x6E45, 0x6944, 0x6E61, 0 }; -void _ascii () { char *s = (char *) ascii_mm; s = (char *) ascii_ii; } -short int ebcdic_ii[] = { 0x89D3, 0xE3E3, 0x8593, 0x95C5, 0x89C4, 0x9581, 0 }; -short int ebcdic_mm[] = { 0xC2C9, 0xC785, 0x95C4, 0x8981, 0x95E2, 0xA8E2, 0 }; -void _ebcdic () { char *s = (char *) ebcdic_mm; s = (char *) ebcdic_ii; } +#include + int main () { - _ascii (); _ebcdic (); +#ifndef _BIG_ENDIAN + not big endian + #endif + ; return 0; } _ACEOF -rm -f conftest.$ac_objext -if { (ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then - if grep BIGenDianSyS conftest.$ac_objext >/dev/null ; then +if ac_fn_c_try_compile "$LINENO"; then : ac_cv_c_bigendian=yes +else + ac_cv_c_bigendian=no fi -if grep LiTTleEnDian conftest.$ac_objext >/dev/null ; then - if test "$ac_cv_c_bigendian" = unknown; then - ac_cv_c_bigendian=no - else - # finding both strings is unlikely to happen, but who knows? - ac_cv_c_bigendian=unknown - fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + fi + if test $ac_cv_c_bigendian = unknown; then + # Compile a test program. + if test "$cross_compiling" = yes; then : + # Try to guess by grepping values from an object file. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +short int ascii_mm[] = + { 0x4249, 0x4765, 0x6E44, 0x6961, 0x6E53, 0x7953, 0 }; + short int ascii_ii[] = + { 0x694C, 0x5454, 0x656C, 0x6E45, 0x6944, 0x6E61, 0 }; + int use_ascii (int i) { + return ascii_mm[i] + ascii_ii[i]; + } + short int ebcdic_ii[] = + { 0x89D3, 0xE3E3, 0x8593, 0x95C5, 0x89C4, 0x9581, 0 }; + short int ebcdic_mm[] = + { 0xC2C9, 0xC785, 0x95C4, 0x8981, 0x95E2, 0xA8E2, 0 }; + int use_ebcdic (int i) { + return ebcdic_mm[i] + ebcdic_ii[i]; + } + extern int foo; +int +main () +{ +return use_ascii (foo) == use_ebcdic (foo); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + if grep BIGenDianSyS conftest.$ac_objext >/dev/null; then + ac_cv_c_bigendian=yes + fi + if grep LiTTleEnDian conftest.$ac_objext >/dev/null ; then + if test "$ac_cv_c_bigendian" = unknown; then + ac_cv_c_bigendian=no + else + # finding both strings is unlikely to happen, but who knows? + ac_cv_c_bigendian=unknown + fi + fi fi - rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $ac_includes_default int main () { - /* Are we little or big endian? From Harbison&Steele. */ - union - { - long int l; - char c[sizeof (long int)]; - } u; - u.l = 1; - return u.c[sizeof (long int) - 1] == 1; + /* Are we little or big endian? From Harbison&Steele. */ + union + { + long int l; + char c[sizeof (long int)]; + } u; + u.l = 1; + return u.c[sizeof (long int) - 1] == 1; ; return 0; } _ACEOF -rm -f conftest$ac_exeext -if { (ac_try="$ac_link" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_link") 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { ac_try='./conftest$ac_exeext' - { (case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_try") 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then +if ac_fn_c_try_run "$LINENO"; then : ac_cv_c_bigendian=no else - echo "$as_me: program exited with status $ac_status" >&5 -echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -( exit $ac_status ) -ac_cv_c_bigendian=yes + ac_cv_c_bigendian=yes fi -rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest.beam conftest.$ac_ext fi - + fi fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_bigendian" >&5 +$as_echo "$ac_cv_c_bigendian" >&6; } + case $ac_cv_c_bigendian in #( + yes) + $as_echo "#define WORDS_BIGENDIAN 1" >>confdefs.h +;; #( + no) + ;; #( + universal) -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -fi -{ echo "$as_me:$LINENO: result: $ac_cv_c_bigendian" >&5 -echo "${ECHO_T}$ac_cv_c_bigendian" >&6; } -case $ac_cv_c_bigendian in - yes) +$as_echo "#define AC_APPLE_UNIVERSAL_BUILD 1" >>confdefs.h -cat >>confdefs.h <<\_ACEOF -#define WORDS_BIGENDIAN 1 -_ACEOF - ;; - no) - ;; - *) - { { echo "$as_me:$LINENO: error: unknown endianness -presetting ac_cv_c_bigendian=no (or yes) will help" >&5 -echo "$as_me: error: unknown endianness -presetting ac_cv_c_bigendian=no (or yes) will help" >&2;} - { (exit 1); exit 1; }; } ;; -esac + ;; #( + *) + as_fn_error "unknown endianness + presetting ac_cv_c_bigendian=no (or yes) will help" "$LINENO" 5 ;; + esac -{ echo "$as_me:$LINENO: checking assembler .cfi pseudo-op support" >&5 -echo $ECHO_N "checking assembler .cfi pseudo-op support... $ECHO_C" >&6; } -if test "${libffi_cv_as_cfi_pseudo_op+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking assembler .cfi pseudo-op support" >&5 +$as_echo_n "checking assembler .cfi pseudo-op support... " >&6; } +if test "${libffi_cv_as_cfi_pseudo_op+set}" = set; then : + $as_echo_n "(cached) " >&6 else libffi_cv_as_cfi_pseudo_op=unknown - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ asm (".cfi_startproc\n\t.cfi_endproc"); int @@ -22391,60 +5832,34 @@ return 0; } _ACEOF -rm -f conftest.$ac_objext -if { (ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then +if ac_fn_c_try_compile "$LINENO"; then : libffi_cv_as_cfi_pseudo_op=yes else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - libffi_cv_as_cfi_pseudo_op=no + libffi_cv_as_cfi_pseudo_op=no fi - rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi -{ echo "$as_me:$LINENO: result: $libffi_cv_as_cfi_pseudo_op" >&5 -echo "${ECHO_T}$libffi_cv_as_cfi_pseudo_op" >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $libffi_cv_as_cfi_pseudo_op" >&5 +$as_echo "$libffi_cv_as_cfi_pseudo_op" >&6; } if test "x$libffi_cv_as_cfi_pseudo_op" = xyes; then -cat >>confdefs.h <<\_ACEOF -#define HAVE_AS_CFI_PSEUDO_OP 1 -_ACEOF +$as_echo "#define HAVE_AS_CFI_PSEUDO_OP 1" >>confdefs.h fi if test x$TARGET = xSPARC; then - { echo "$as_me:$LINENO: checking assembler and linker support unaligned pc related relocs" >&5 -echo $ECHO_N "checking assembler and linker support unaligned pc related relocs... $ECHO_C" >&6; } -if test "${libffi_cv_as_sparc_ua_pcrel+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: checking assembler and linker support unaligned pc related relocs" >&5 +$as_echo_n "checking assembler and linker support unaligned pc related relocs... " >&6; } +if test "${libffi_cv_as_sparc_ua_pcrel+set}" = set; then : + $as_echo_n "(cached) " >&6 else save_CFLAGS="$CFLAGS" save_LDFLAGS="$LDFLAGS" CFLAGS="$CFLAGS -fpic" LDFLAGS="$LDFLAGS -shared" - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ asm (".text; foo: nop; .data; .align 4; .byte 0; .uaword %r_disp32(foo); .text"); int @@ -22455,60 +5870,33 @@ return 0; } _ACEOF -rm -f conftest.$ac_objext conftest$ac_exeext -if { (ac_try="$ac_link" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_link") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest$ac_exeext && - $as_test_x conftest$ac_exeext; then +if ac_fn_c_try_link "$LINENO"; then : libffi_cv_as_sparc_ua_pcrel=yes else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - libffi_cv_as_sparc_ua_pcrel=no + libffi_cv_as_sparc_ua_pcrel=no fi - -rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ - conftest$ac_exeext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext CFLAGS="$save_CFLAGS" LDFLAGS="$save_LDFLAGS" fi -{ echo "$as_me:$LINENO: result: $libffi_cv_as_sparc_ua_pcrel" >&5 -echo "${ECHO_T}$libffi_cv_as_sparc_ua_pcrel" >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $libffi_cv_as_sparc_ua_pcrel" >&5 +$as_echo "$libffi_cv_as_sparc_ua_pcrel" >&6; } if test "x$libffi_cv_as_sparc_ua_pcrel" = xyes; then -cat >>confdefs.h <<\_ACEOF -#define HAVE_AS_SPARC_UA_PCREL 1 -_ACEOF +$as_echo "#define HAVE_AS_SPARC_UA_PCREL 1" >>confdefs.h fi - { echo "$as_me:$LINENO: checking assembler .register pseudo-op support" >&5 -echo $ECHO_N "checking assembler .register pseudo-op support... $ECHO_C" >&6; } -if test "${libffi_cv_as_register_pseudo_op+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: checking assembler .register pseudo-op support" >&5 +$as_echo_n "checking assembler .register pseudo-op support... " >&6; } +if test "${libffi_cv_as_register_pseudo_op+set}" = set; then : + $as_echo_n "(cached) " >&6 else libffi_cv_as_register_pseudo_op=unknown # Check if we have .register - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ asm (".register %g2, #scratch"); int @@ -22519,49 +5907,58 @@ return 0; } _ACEOF -rm -f conftest.$ac_objext -if { (ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then +if ac_fn_c_try_compile "$LINENO"; then : libffi_cv_as_register_pseudo_op=yes else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - libffi_cv_as_register_pseudo_op=no + libffi_cv_as_register_pseudo_op=no fi - rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi -{ echo "$as_me:$LINENO: result: $libffi_cv_as_register_pseudo_op" >&5 -echo "${ECHO_T}$libffi_cv_as_register_pseudo_op" >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $libffi_cv_as_register_pseudo_op" >&5 +$as_echo "$libffi_cv_as_register_pseudo_op" >&6; } if test "x$libffi_cv_as_register_pseudo_op" = xyes; then -cat >>confdefs.h <<\_ACEOF -#define HAVE_AS_REGISTER_PSEUDO_OP 1 -_ACEOF +$as_echo "#define HAVE_AS_REGISTER_PSEUDO_OP 1" >>confdefs.h + + fi +fi + +if test x$TARGET = xX86 || test x$TARGET = xX86_WIN32 || test x$TARGET = xX86_64; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking assembler supports pc related relocs" >&5 +$as_echo_n "checking assembler supports pc related relocs... " >&6; } +if test "${libffi_cv_as_x86_pcrel+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + + libffi_cv_as_x86_pcrel=yes + echo '.text; foo: nop; .data; .long foo-.; .text' > conftest.s + if $CC $CFLAGS -c conftest.s 2>&1 | grep -i warning > /dev/null; then + libffi_cv_as_x86_pcrel=no + fi + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $libffi_cv_as_x86_pcrel" >&5 +$as_echo "$libffi_cv_as_x86_pcrel" >&6; } + if test "x$libffi_cv_as_x86_pcrel" = xyes; then + +$as_echo "#define HAVE_AS_X86_PCREL 1" >>confdefs.h fi fi -{ echo "$as_me:$LINENO: checking whether .eh_frame section should be read-only" >&5 -echo $ECHO_N "checking whether .eh_frame section should be read-only... $ECHO_C" >&6; } -if test "${libffi_cv_ro_eh_frame+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 +case "$target" in + *-apple-darwin10* | *-*-freebsd* | *-*-openbsd* | *-pc-solaris*) + +$as_echo "#define FFI_MMAP_EXEC_WRIT 1" >>confdefs.h + + ;; +esac + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether .eh_frame section should be read-only" >&5 +$as_echo_n "checking whether .eh_frame section should be read-only... " >&6; } +if test "${libffi_cv_ro_eh_frame+set}" = set; then : + $as_echo_n "(cached) " >&6 else libffi_cv_ro_eh_frame=no @@ -22577,41 +5974,35 @@ rm -f conftest.* fi -{ echo "$as_me:$LINENO: result: $libffi_cv_ro_eh_frame" >&5 -echo "${ECHO_T}$libffi_cv_ro_eh_frame" >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $libffi_cv_ro_eh_frame" >&5 +$as_echo "$libffi_cv_ro_eh_frame" >&6; } if test "x$libffi_cv_ro_eh_frame" = xyes; then -cat >>confdefs.h <<\_ACEOF -#define HAVE_RO_EH_FRAME 1 -_ACEOF +$as_echo "#define HAVE_RO_EH_FRAME 1" >>confdefs.h -cat >>confdefs.h <<\_ACEOF -#define EH_FRAME_FLAGS "a" -_ACEOF +$as_echo "#define EH_FRAME_FLAGS \"a\"" >>confdefs.h else -cat >>confdefs.h <<\_ACEOF -#define EH_FRAME_FLAGS "aw" -_ACEOF +$as_echo "#define EH_FRAME_FLAGS \"aw\"" >>confdefs.h fi -{ echo "$as_me:$LINENO: checking for __attribute__((visibility(\"hidden\")))" >&5 -echo $ECHO_N "checking for __attribute__((visibility(\"hidden\")))... $ECHO_C" >&6; } -if test "${libffi_cv_hidden_visibility_attribute+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for __attribute__((visibility(\"hidden\")))" >&5 +$as_echo_n "checking for __attribute__((visibility(\"hidden\")))... " >&6; } +if test "${libffi_cv_hidden_visibility_attribute+set}" = set; then : + $as_echo_n "(cached) " >&6 else echo 'int __attribute__ ((visibility ("hidden"))) foo (void) { return 1; }' > conftest.c libffi_cv_hidden_visibility_attribute=no if { ac_try='${CC-cc} -Werror -S conftest.c -o conftest.s 1>&5' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 (eval $ac_try) 2>&5 ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then if grep '\.hidden.*foo' conftest.s >/dev/null; then libffi_cv_hidden_visibility_attribute=yes fi @@ -22619,13 +6010,11 @@ rm -f conftest.* fi -{ echo "$as_me:$LINENO: result: $libffi_cv_hidden_visibility_attribute" >&5 -echo "${ECHO_T}$libffi_cv_hidden_visibility_attribute" >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $libffi_cv_hidden_visibility_attribute" >&5 +$as_echo "$libffi_cv_hidden_visibility_attribute" >&6; } if test $libffi_cv_hidden_visibility_attribute = yes; then -cat >>confdefs.h <<\_ACEOF -#define HAVE_HIDDEN_VISIBILITY_ATTRIBUTE 1 -_ACEOF +$as_echo "#define HAVE_HIDDEN_VISIBILITY_ATTRIBUTE 1" >>confdefs.h fi @@ -22636,50 +6025,41 @@ - # Check whether --enable-debug was given. -if test "${enable_debug+set}" = set; then +if test "${enable_debug+set}" = set; then : enableval=$enable_debug; if test "$enable_debug" = "yes"; then -cat >>confdefs.h <<\_ACEOF -#define FFI_DEBUG 1 -_ACEOF +$as_echo "#define FFI_DEBUG 1" >>confdefs.h fi fi # Check whether --enable-structs was given. -if test "${enable_structs+set}" = set; then +if test "${enable_structs+set}" = set; then : enableval=$enable_structs; if test "$enable_structs" = "no"; then -cat >>confdefs.h <<\_ACEOF -#define FFI_NO_STRUCTS 1 -_ACEOF +$as_echo "#define FFI_NO_STRUCTS 1" >>confdefs.h fi fi # Check whether --enable-raw-api was given. -if test "${enable_raw_api+set}" = set; then +if test "${enable_raw_api+set}" = set; then : enableval=$enable_raw_api; if test "$enable_raw_api" = "no"; then -cat >>confdefs.h <<\_ACEOF -#define FFI_NO_RAW_API 1 -_ACEOF +$as_echo "#define FFI_NO_RAW_API 1" >>confdefs.h fi fi # Check whether --enable-purify-safety was given. -if test "${enable_purify_safety+set}" = set; then +if test "${enable_purify_safety+set}" = set; then : enableval=$enable_purify_safety; if test "$enable_purify_safety" = "yes"; then -cat >>confdefs.h <<\_ACEOF -#define USING_PURIFY 1 -_ACEOF +$as_echo "#define USING_PURIFY 1" >>confdefs.h fi fi @@ -22751,12 +6131,13 @@ case $ac_val in #( *${as_nl}*) case $ac_var in #( - *_cv_*) { echo "$as_me:$LINENO: WARNING: Cache variable $ac_var contains a newline." >&5 -echo "$as_me: WARNING: Cache variable $ac_var contains a newline." >&2;} ;; + *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 +$as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; esac case $ac_var in #( _ | IFS | as_nl) ;; #( - *) $as_unset $ac_var ;; + BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #( + *) { eval $ac_var=; unset $ac_var;} ;; esac ;; esac done @@ -22764,8 +6145,8 @@ (set) 2>&1 | case $as_nl`(ac_space=' '; set) 2>&1` in #( *${as_nl}ac_space=\ *) - # `set' does not quote correctly, so add quotes (double-quote - # substitution turns \\\\ into \\, and sed turns \\ into \). + # `set' does not quote correctly, so add quotes: double-quote + # substitution turns \\\\ into \\, and sed turns \\ into \. sed -n \ "s/'/'\\\\''/g; s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\\2'/p" @@ -22788,12 +6169,12 @@ if diff "$cache_file" confcache >/dev/null 2>&1; then :; else if test -w "$cache_file"; then test "x$cache_file" != "x/dev/null" && - { echo "$as_me:$LINENO: updating cache $cache_file" >&5 -echo "$as_me: updating cache $cache_file" >&6;} + { $as_echo "$as_me:${as_lineno-$LINENO}: updating cache $cache_file" >&5 +$as_echo "$as_me: updating cache $cache_file" >&6;} cat confcache >$cache_file else - { echo "$as_me:$LINENO: not updating unwritable cache $cache_file" >&5 -echo "$as_me: not updating unwritable cache $cache_file" >&6;} + { $as_echo "$as_me:${as_lineno-$LINENO}: not updating unwritable cache $cache_file" >&5 +$as_echo "$as_me: not updating unwritable cache $cache_file" >&6;} fi fi rm -f confcache @@ -22809,234 +6190,159 @@ for ac_i in : $LIBOBJS; do test "x$ac_i" = x: && continue # 1. Remove the extension, and $U if already installed. ac_script='s/\$U\././;s/\.o$//;s/\.obj$//' - ac_i=`echo "$ac_i" | sed "$ac_script"` + ac_i=`$as_echo "$ac_i" | sed "$ac_script"` # 2. Prepend LIBOBJDIR. When used with automake>=1.10 LIBOBJDIR # will be set to the directory where LIBOBJS objects are built. - ac_libobjs="$ac_libobjs \${LIBOBJDIR}$ac_i\$U.$ac_objext" - ac_ltlibobjs="$ac_ltlibobjs \${LIBOBJDIR}$ac_i"'$U.lo' + as_fn_append ac_libobjs " \${LIBOBJDIR}$ac_i\$U.$ac_objext" + as_fn_append ac_ltlibobjs " \${LIBOBJDIR}$ac_i"'$U.lo' done LIBOBJS=$ac_libobjs LTLIBOBJS=$ac_ltlibobjs + if test -n "$EXEEXT"; then + am__EXEEXT_TRUE= + am__EXEEXT_FALSE='#' +else + am__EXEEXT_TRUE='#' + am__EXEEXT_FALSE= +fi + if test -z "${AMDEP_TRUE}" && test -z "${AMDEP_FALSE}"; then - { { echo "$as_me:$LINENO: error: conditional \"AMDEP\" was never defined. -Usually this means the macro was only invoked conditionally." >&5 -echo "$as_me: error: conditional \"AMDEP\" was never defined. -Usually this means the macro was only invoked conditionally." >&2;} - { (exit 1); exit 1; }; } + as_fn_error "conditional \"AMDEP\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${am__fastdepCC_TRUE}" && test -z "${am__fastdepCC_FALSE}"; then - { { echo "$as_me:$LINENO: error: conditional \"am__fastdepCC\" was never defined. -Usually this means the macro was only invoked conditionally." >&5 -echo "$as_me: error: conditional \"am__fastdepCC\" was never defined. -Usually this means the macro was only invoked conditionally." >&2;} - { (exit 1); exit 1; }; } + as_fn_error "conditional \"am__fastdepCC\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${am__fastdepCCAS_TRUE}" && test -z "${am__fastdepCCAS_FALSE}"; then - { { echo "$as_me:$LINENO: error: conditional \"am__fastdepCCAS\" was never defined. -Usually this means the macro was only invoked conditionally." >&5 -echo "$as_me: error: conditional \"am__fastdepCCAS\" was never defined. -Usually this means the macro was only invoked conditionally." >&2;} - { (exit 1); exit 1; }; } -fi -if test -z "${am__fastdepCXX_TRUE}" && test -z "${am__fastdepCXX_FALSE}"; then - { { echo "$as_me:$LINENO: error: conditional \"am__fastdepCXX\" was never defined. -Usually this means the macro was only invoked conditionally." >&5 -echo "$as_me: error: conditional \"am__fastdepCXX\" was never defined. -Usually this means the macro was only invoked conditionally." >&2;} - { (exit 1); exit 1; }; } + as_fn_error "conditional \"am__fastdepCCAS\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${MAINTAINER_MODE_TRUE}" && test -z "${MAINTAINER_MODE_FALSE}"; then - { { echo "$as_me:$LINENO: error: conditional \"MAINTAINER_MODE\" was never defined. -Usually this means the macro was only invoked conditionally." >&5 -echo "$as_me: error: conditional \"MAINTAINER_MODE\" was never defined. -Usually this means the macro was only invoked conditionally." >&2;} - { (exit 1); exit 1; }; } + as_fn_error "conditional \"MAINTAINER_MODE\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${TESTSUBDIR_TRUE}" && test -z "${TESTSUBDIR_FALSE}"; then - { { echo "$as_me:$LINENO: error: conditional \"TESTSUBDIR\" was never defined. -Usually this means the macro was only invoked conditionally." >&5 -echo "$as_me: error: conditional \"TESTSUBDIR\" was never defined. -Usually this means the macro was only invoked conditionally." >&2;} - { (exit 1); exit 1; }; } + as_fn_error "conditional \"TESTSUBDIR\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${MIPS_TRUE}" && test -z "${MIPS_FALSE}"; then - { { echo "$as_me:$LINENO: error: conditional \"MIPS\" was never defined. -Usually this means the macro was only invoked conditionally." >&5 -echo "$as_me: error: conditional \"MIPS\" was never defined. -Usually this means the macro was only invoked conditionally." >&2;} - { (exit 1); exit 1; }; } + as_fn_error "conditional \"MIPS\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${SPARC_TRUE}" && test -z "${SPARC_FALSE}"; then - { { echo "$as_me:$LINENO: error: conditional \"SPARC\" was never defined. -Usually this means the macro was only invoked conditionally." >&5 -echo "$as_me: error: conditional \"SPARC\" was never defined. -Usually this means the macro was only invoked conditionally." >&2;} - { (exit 1); exit 1; }; } + as_fn_error "conditional \"SPARC\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${X86_TRUE}" && test -z "${X86_FALSE}"; then - { { echo "$as_me:$LINENO: error: conditional \"X86\" was never defined. -Usually this means the macro was only invoked conditionally." >&5 -echo "$as_me: error: conditional \"X86\" was never defined. -Usually this means the macro was only invoked conditionally." >&2;} - { (exit 1); exit 1; }; } + as_fn_error "conditional \"X86\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${X86_FREEBSD_TRUE}" && test -z "${X86_FREEBSD_FALSE}"; then - { { echo "$as_me:$LINENO: error: conditional \"X86_FREEBSD\" was never defined. -Usually this means the macro was only invoked conditionally." >&5 -echo "$as_me: error: conditional \"X86_FREEBSD\" was never defined. -Usually this means the macro was only invoked conditionally." >&2;} - { (exit 1); exit 1; }; } + as_fn_error "conditional \"X86_FREEBSD\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${X86_WIN32_TRUE}" && test -z "${X86_WIN32_FALSE}"; then - { { echo "$as_me:$LINENO: error: conditional \"X86_WIN32\" was never defined. -Usually this means the macro was only invoked conditionally." >&5 -echo "$as_me: error: conditional \"X86_WIN32\" was never defined. -Usually this means the macro was only invoked conditionally." >&2;} - { (exit 1); exit 1; }; } + as_fn_error "conditional \"X86_WIN32\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${X86_WIN64_TRUE}" && test -z "${X86_WIN64_FALSE}"; then + as_fn_error "conditional \"X86_WIN64\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${X86_DARWIN_TRUE}" && test -z "${X86_DARWIN_FALSE}"; then - { { echo "$as_me:$LINENO: error: conditional \"X86_DARWIN\" was never defined. -Usually this means the macro was only invoked conditionally." >&5 -echo "$as_me: error: conditional \"X86_DARWIN\" was never defined. -Usually this means the macro was only invoked conditionally." >&2;} - { (exit 1); exit 1; }; } + as_fn_error "conditional \"X86_DARWIN\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${ALPHA_TRUE}" && test -z "${ALPHA_FALSE}"; then - { { echo "$as_me:$LINENO: error: conditional \"ALPHA\" was never defined. -Usually this means the macro was only invoked conditionally." >&5 -echo "$as_me: error: conditional \"ALPHA\" was never defined. -Usually this means the macro was only invoked conditionally." >&2;} - { (exit 1); exit 1; }; } + as_fn_error "conditional \"ALPHA\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${IA64_TRUE}" && test -z "${IA64_FALSE}"; then - { { echo "$as_me:$LINENO: error: conditional \"IA64\" was never defined. -Usually this means the macro was only invoked conditionally." >&5 -echo "$as_me: error: conditional \"IA64\" was never defined. -Usually this means the macro was only invoked conditionally." >&2;} - { (exit 1); exit 1; }; } + as_fn_error "conditional \"IA64\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${M32R_TRUE}" && test -z "${M32R_FALSE}"; then - { { echo "$as_me:$LINENO: error: conditional \"M32R\" was never defined. -Usually this means the macro was only invoked conditionally." >&5 -echo "$as_me: error: conditional \"M32R\" was never defined. -Usually this means the macro was only invoked conditionally." >&2;} - { (exit 1); exit 1; }; } + as_fn_error "conditional \"M32R\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${M68K_TRUE}" && test -z "${M68K_FALSE}"; then - { { echo "$as_me:$LINENO: error: conditional \"M68K\" was never defined. -Usually this means the macro was only invoked conditionally." >&5 -echo "$as_me: error: conditional \"M68K\" was never defined. -Usually this means the macro was only invoked conditionally." >&2;} - { (exit 1); exit 1; }; } + as_fn_error "conditional \"M68K\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${POWERPC_TRUE}" && test -z "${POWERPC_FALSE}"; then - { { echo "$as_me:$LINENO: error: conditional \"POWERPC\" was never defined. -Usually this means the macro was only invoked conditionally." >&5 -echo "$as_me: error: conditional \"POWERPC\" was never defined. -Usually this means the macro was only invoked conditionally." >&2;} - { (exit 1); exit 1; }; } + as_fn_error "conditional \"POWERPC\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${POWERPC_AIX_TRUE}" && test -z "${POWERPC_AIX_FALSE}"; then - { { echo "$as_me:$LINENO: error: conditional \"POWERPC_AIX\" was never defined. -Usually this means the macro was only invoked conditionally." >&5 -echo "$as_me: error: conditional \"POWERPC_AIX\" was never defined. -Usually this means the macro was only invoked conditionally." >&2;} - { (exit 1); exit 1; }; } + as_fn_error "conditional \"POWERPC_AIX\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${POWERPC_DARWIN_TRUE}" && test -z "${POWERPC_DARWIN_FALSE}"; then - { { echo "$as_me:$LINENO: error: conditional \"POWERPC_DARWIN\" was never defined. -Usually this means the macro was only invoked conditionally." >&5 -echo "$as_me: error: conditional \"POWERPC_DARWIN\" was never defined. -Usually this means the macro was only invoked conditionally." >&2;} - { (exit 1); exit 1; }; } + as_fn_error "conditional \"POWERPC_DARWIN\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${POWERPC_FREEBSD_TRUE}" && test -z "${POWERPC_FREEBSD_FALSE}"; then - { { echo "$as_me:$LINENO: error: conditional \"POWERPC_FREEBSD\" was never defined. -Usually this means the macro was only invoked conditionally." >&5 -echo "$as_me: error: conditional \"POWERPC_FREEBSD\" was never defined. -Usually this means the macro was only invoked conditionally." >&2;} - { (exit 1); exit 1; }; } + as_fn_error "conditional \"POWERPC_FREEBSD\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${ARM_TRUE}" && test -z "${ARM_FALSE}"; then - { { echo "$as_me:$LINENO: error: conditional \"ARM\" was never defined. -Usually this means the macro was only invoked conditionally." >&5 -echo "$as_me: error: conditional \"ARM\" was never defined. -Usually this means the macro was only invoked conditionally." >&2;} - { (exit 1); exit 1; }; } + as_fn_error "conditional \"ARM\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${AVR32_TRUE}" && test -z "${AVR32_FALSE}"; then + as_fn_error "conditional \"AVR32\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${LIBFFI_CRIS_TRUE}" && test -z "${LIBFFI_CRIS_FALSE}"; then - { { echo "$as_me:$LINENO: error: conditional \"LIBFFI_CRIS\" was never defined. -Usually this means the macro was only invoked conditionally." >&5 -echo "$as_me: error: conditional \"LIBFFI_CRIS\" was never defined. -Usually this means the macro was only invoked conditionally." >&2;} - { (exit 1); exit 1; }; } + as_fn_error "conditional \"LIBFFI_CRIS\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${FRV_TRUE}" && test -z "${FRV_FALSE}"; then - { { echo "$as_me:$LINENO: error: conditional \"FRV\" was never defined. -Usually this means the macro was only invoked conditionally." >&5 -echo "$as_me: error: conditional \"FRV\" was never defined. -Usually this means the macro was only invoked conditionally." >&2;} - { (exit 1); exit 1; }; } + as_fn_error "conditional \"FRV\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${S390_TRUE}" && test -z "${S390_FALSE}"; then - { { echo "$as_me:$LINENO: error: conditional \"S390\" was never defined. -Usually this means the macro was only invoked conditionally." >&5 -echo "$as_me: error: conditional \"S390\" was never defined. -Usually this means the macro was only invoked conditionally." >&2;} - { (exit 1); exit 1; }; } + as_fn_error "conditional \"S390\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${X86_64_TRUE}" && test -z "${X86_64_FALSE}"; then - { { echo "$as_me:$LINENO: error: conditional \"X86_64\" was never defined. -Usually this means the macro was only invoked conditionally." >&5 -echo "$as_me: error: conditional \"X86_64\" was never defined. -Usually this means the macro was only invoked conditionally." >&2;} - { (exit 1); exit 1; }; } + as_fn_error "conditional \"X86_64\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${SH_TRUE}" && test -z "${SH_FALSE}"; then - { { echo "$as_me:$LINENO: error: conditional \"SH\" was never defined. -Usually this means the macro was only invoked conditionally." >&5 -echo "$as_me: error: conditional \"SH\" was never defined. -Usually this means the macro was only invoked conditionally." >&2;} - { (exit 1); exit 1; }; } + as_fn_error "conditional \"SH\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${SH64_TRUE}" && test -z "${SH64_FALSE}"; then - { { echo "$as_me:$LINENO: error: conditional \"SH64\" was never defined. -Usually this means the macro was only invoked conditionally." >&5 -echo "$as_me: error: conditional \"SH64\" was never defined. -Usually this means the macro was only invoked conditionally." >&2;} - { (exit 1); exit 1; }; } + as_fn_error "conditional \"SH64\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${PA_LINUX_TRUE}" && test -z "${PA_LINUX_FALSE}"; then - { { echo "$as_me:$LINENO: error: conditional \"PA_LINUX\" was never defined. -Usually this means the macro was only invoked conditionally." >&5 -echo "$as_me: error: conditional \"PA_LINUX\" was never defined. -Usually this means the macro was only invoked conditionally." >&2;} - { (exit 1); exit 1; }; } + as_fn_error "conditional \"PA_LINUX\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${PA_HPUX_TRUE}" && test -z "${PA_HPUX_FALSE}"; then - { { echo "$as_me:$LINENO: error: conditional \"PA_HPUX\" was never defined. -Usually this means the macro was only invoked conditionally." >&5 -echo "$as_me: error: conditional \"PA_HPUX\" was never defined. -Usually this means the macro was only invoked conditionally." >&2;} - { (exit 1); exit 1; }; } + as_fn_error "conditional \"PA_HPUX\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${PA64_HPUX_TRUE}" && test -z "${PA64_HPUX_FALSE}"; then - { { echo "$as_me:$LINENO: error: conditional \"PA64_HPUX\" was never defined. -Usually this means the macro was only invoked conditionally." >&5 -echo "$as_me: error: conditional \"PA64_HPUX\" was never defined. -Usually this means the macro was only invoked conditionally." >&2;} - { (exit 1); exit 1; }; } + as_fn_error "conditional \"PA64_HPUX\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi + : ${CONFIG_STATUS=./config.status} +ac_write_fail=0 ac_clean_files_save=$ac_clean_files ac_clean_files="$ac_clean_files $CONFIG_STATUS" -{ echo "$as_me:$LINENO: creating $CONFIG_STATUS" >&5 -echo "$as_me: creating $CONFIG_STATUS" >&6;} -cat >$CONFIG_STATUS <<_ACEOF +{ $as_echo "$as_me:${as_lineno-$LINENO}: creating $CONFIG_STATUS" >&5 +$as_echo "$as_me: creating $CONFIG_STATUS" >&6;} +as_write_fail=0 +cat >$CONFIG_STATUS <<_ASEOF || as_write_fail=1 #! $SHELL # Generated by $as_me. # Run this file to recreate the current configuration. @@ -23046,59 +6352,79 @@ debug=false ac_cs_recheck=false ac_cs_silent=false -SHELL=\${CONFIG_SHELL-$SHELL} -_ACEOF -cat >>$CONFIG_STATUS <<\_ACEOF -## --------------------- ## -## M4sh Initialization. ## -## --------------------- ## +SHELL=\${CONFIG_SHELL-$SHELL} +export SHELL +_ASEOF +cat >>$CONFIG_STATUS <<\_ASEOF || as_write_fail=1 +## -------------------- ## +## M4sh Initialization. ## +## -------------------- ## # Be more Bourne compatible DUALCASE=1; export DUALCASE # for MKS sh -if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then +if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then : emulate sh NULLCMD=: - # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which + # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which # is contrary to our usage. Disable this feature. alias -g '${1+"$@"}'='"$@"' setopt NO_GLOB_SUBST else - case `(set -o) 2>/dev/null` in - *posix*) set -o posix ;; + case `(set -o) 2>/dev/null` in #( + *posix*) : + set -o posix ;; #( + *) : + ;; esac - fi - - -# PATH needs CR -# Avoid depending upon Character Ranges. -as_cr_letters='abcdefghijklmnopqrstuvwxyz' -as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' -as_cr_Letters=$as_cr_letters$as_cr_LETTERS -as_cr_digits='0123456789' -as_cr_alnum=$as_cr_Letters$as_cr_digits - -# The user is always right. -if test "${PATH_SEPARATOR+set}" != set; then - echo "#! /bin/sh" >conf$$.sh - echo "exit 0" >>conf$$.sh - chmod +x conf$$.sh - if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then - PATH_SEPARATOR=';' - else - PATH_SEPARATOR=: +as_nl=' +' +export as_nl +# Printing a long string crashes Solaris 7 /usr/bin/printf. +as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' +as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo +as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo +# Prefer a ksh shell builtin over an external printf program on Solaris, +# but without wasting forks for bash or zsh. +if test -z "$BASH_VERSION$ZSH_VERSION" \ + && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then + as_echo='print -r --' + as_echo_n='print -rn --' +elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then + as_echo='printf %s\n' + as_echo_n='printf %s' +else + if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then + as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"' + as_echo_n='/usr/ucb/echo -n' + else + as_echo_body='eval expr "X$1" : "X\\(.*\\)"' + as_echo_n_body='eval + arg=$1; + case $arg in #( + *"$as_nl"*) + expr "X$arg" : "X\\(.*\\)$as_nl"; + arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;; + esac; + expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl" + ' + export as_echo_n_body + as_echo_n='sh -c $as_echo_n_body as_echo' fi - rm -f conf$$.sh + export as_echo_body + as_echo='sh -c $as_echo_body as_echo' fi -# Support unset when possible. -if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then - as_unset=unset -else - as_unset=false +# The user is always right. +if test "${PATH_SEPARATOR+set}" != set; then + PATH_SEPARATOR=: + (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { + (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || + PATH_SEPARATOR=';' + } fi @@ -23107,20 +6433,18 @@ # there to prevent editors from complaining about space-tab. # (If _AS_PATH_WALK were called with IFS unset, it would disable word # splitting by setting IFS to empty value.) -as_nl=' -' IFS=" "" $as_nl" # Find who we are. Look in the path if we contain no directory separator. -case $0 in +case $0 in #(( *[\\/]* ) as_myself=$0 ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. - test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break -done + test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break + done IFS=$as_save_IFS ;; @@ -23131,164 +6455,246 @@ as_myself=$0 fi if test ! -f "$as_myself"; then - echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 - { (exit 1); exit 1; } + $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 + exit 1 fi -# Work around bugs in pre-3.0 UWIN ksh. -for as_var in ENV MAIL MAILPATH -do ($as_unset $as_var) >/dev/null 2>&1 && $as_unset $as_var +# Unset variables that we do not need and which cause bugs (e.g. in +# pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1" +# suppresses any "Segmentation fault" message there. '((' could +# trigger a bug in pdksh 5.2.14. +for as_var in BASH_ENV ENV MAIL MAILPATH +do eval test x\${$as_var+set} = xset \ + && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : done PS1='$ ' PS2='> ' PS4='+ ' # NLS nuisances. -for as_var in \ - LANG LANGUAGE LC_ADDRESS LC_ALL LC_COLLATE LC_CTYPE LC_IDENTIFICATION \ - LC_MEASUREMENT LC_MESSAGES LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER \ - LC_TELEPHONE LC_TIME -do - if (set +x; test -z "`(eval $as_var=C; export $as_var) 2>&1`"); then - eval $as_var=C; export $as_var - else - ($as_unset $as_var) >/dev/null 2>&1 && $as_unset $as_var - fi -done - -# Required to use basename. -if expr a : '\(a\)' >/dev/null 2>&1 && - test "X`expr 00001 : '.*\(...\)'`" = X001; then - as_expr=expr -else - as_expr=false -fi - -if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then - as_basename=basename -else - as_basename=false -fi - - -# Name of the executable. -as_me=`$as_basename -- "$0" || -$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ - X"$0" : 'X\(//\)$' \| \ - X"$0" : 'X\(/\)' \| . 2>/dev/null || -echo X/"$0" | - sed '/^.*\/\([^/][^/]*\)\/*$/{ - s//\1/ - q - } - /^X\/\(\/\/\)$/{ - s//\1/ - q - } - /^X\/\(\/\).*/{ - s//\1/ - q - } - s/.*/./; q'` +LC_ALL=C +export LC_ALL +LANGUAGE=C +export LANGUAGE # CDPATH. -$as_unset CDPATH - +(unset CDPATH) >/dev/null 2>&1 && unset CDPATH - as_lineno_1=$LINENO - as_lineno_2=$LINENO - test "x$as_lineno_1" != "x$as_lineno_2" && - test "x`expr $as_lineno_1 + 1`" = "x$as_lineno_2" || { - - # Create $as_me.lineno as a copy of $as_myself, but with $LINENO - # uniformly replaced by the line number. The first 'sed' inserts a - # line-number line after each line using $LINENO; the second 'sed' - # does the real work. The second script uses 'N' to pair each - # line-number line with the line containing $LINENO, and appends - # trailing '-' during substitution so that $LINENO is not a special - # case at line end. - # (Raja R Harinath suggested sed '=', and Paul Eggert wrote the - # scripts with optimization help from Paolo Bonzini. Blame Lee - # E. McMahon (1931-1989) for sed's syntax. :-) - sed -n ' - p - /[$]LINENO/= - ' <$as_myself | - sed ' - s/[$]LINENO.*/&-/ - t lineno - b - :lineno - N - :loop - s/[$]LINENO\([^'$as_cr_alnum'_].*\n\)\(.*\)/\2\1\2/ - t loop - s/-\n.*// - ' >$as_me.lineno && - chmod +x "$as_me.lineno" || - { echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2 - { (exit 1); exit 1; }; } +# as_fn_error ERROR [LINENO LOG_FD] +# --------------------------------- +# Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are +# provided, also output the error to LOG_FD, referencing LINENO. Then exit the +# script with status $?, using 1 if that was 0. +as_fn_error () +{ + as_status=$?; test $as_status -eq 0 && as_status=1 + if test "$3"; then + as_lineno=${as_lineno-"$2"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + $as_echo "$as_me:${as_lineno-$LINENO}: error: $1" >&$3 + fi + $as_echo "$as_me: error: $1" >&2 + as_fn_exit $as_status +} # as_fn_error + + +# as_fn_set_status STATUS +# ----------------------- +# Set $? to STATUS, without forking. +as_fn_set_status () +{ + return $1 +} # as_fn_set_status + +# as_fn_exit STATUS +# ----------------- +# Exit the shell with STATUS, even in a "trap 0" or "set -e" context. +as_fn_exit () +{ + set +e + as_fn_set_status $1 + exit $1 +} # as_fn_exit + +# as_fn_unset VAR +# --------------- +# Portably unset VAR. +as_fn_unset () +{ + { eval $1=; unset $1;} +} +as_unset=as_fn_unset +# as_fn_append VAR VALUE +# ---------------------- +# Append the text in VALUE to the end of the definition contained in VAR. Take +# advantage of any shell optimizations that allow amortized linear growth over +# repeated appends, instead of the typical quadratic growth present in naive +# implementations. +if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then : + eval 'as_fn_append () + { + eval $1+=\$2 + }' +else + as_fn_append () + { + eval $1=\$$1\$2 + } +fi # as_fn_append - # Don't try to exec as it changes $[0], causing all sort of problems - # (the dirname of $[0] is not the place where we might find the - # original and so on. Autoconf is especially sensitive to this). - . "./$as_me.lineno" - # Exit status is that of the last command. - exit -} +# as_fn_arith ARG... +# ------------------ +# Perform arithmetic evaluation on the ARGs, and store the result in the +# global $as_val. Take advantage of shells that can avoid forks. The arguments +# must be portable across $(()) and expr. +if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then : + eval 'as_fn_arith () + { + as_val=$(( $* )) + }' +else + as_fn_arith () + { + as_val=`expr "$@" || test $? -eq 1` + } +fi # as_fn_arith +if expr a : '\(a\)' >/dev/null 2>&1 && + test "X`expr 00001 : '.*\(...\)'`" = X001; then + as_expr=expr +else + as_expr=false +fi + +if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then + as_basename=basename +else + as_basename=false +fi + if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then as_dirname=dirname else as_dirname=false fi +as_me=`$as_basename -- "$0" || +$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ + X"$0" : 'X\(//\)$' \| \ + X"$0" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X/"$0" | + sed '/^.*\/\([^/][^/]*\)\/*$/{ + s//\1/ + q + } + /^X\/\(\/\/\)$/{ + s//\1/ + q + } + /^X\/\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + +# Avoid depending upon Character Ranges. +as_cr_letters='abcdefghijklmnopqrstuvwxyz' +as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' +as_cr_Letters=$as_cr_letters$as_cr_LETTERS +as_cr_digits='0123456789' +as_cr_alnum=$as_cr_Letters$as_cr_digits + ECHO_C= ECHO_N= ECHO_T= -case `echo -n x` in +case `echo -n x` in #((((( -n*) - case `echo 'x\c'` in + case `echo 'xy\c'` in *c*) ECHO_T=' ';; # ECHO_T is single tab character. - *) ECHO_C='\c';; + xy) ECHO_C='\c';; + *) echo `echo ksh88 bug on AIX 6.1` > /dev/null + ECHO_T=' ';; esac;; *) ECHO_N='-n';; esac -if expr a : '\(a\)' >/dev/null 2>&1 && - test "X`expr 00001 : '.*\(...\)'`" = X001; then - as_expr=expr -else - as_expr=false -fi - rm -f conf$$ conf$$.exe conf$$.file if test -d conf$$.dir; then rm -f conf$$.dir/conf$$.file else rm -f conf$$.dir - mkdir conf$$.dir + mkdir conf$$.dir 2>/dev/null fi -echo >conf$$.file -if ln -s conf$$.file conf$$ 2>/dev/null; then - as_ln_s='ln -s' - # ... but there are two gotchas: - # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. - # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. - # In both cases, we have to default to `cp -p'. - ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || +if (echo >conf$$.file) 2>/dev/null; then + if ln -s conf$$.file conf$$ 2>/dev/null; then + as_ln_s='ln -s' + # ... but there are two gotchas: + # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. + # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. + # In both cases, we have to default to `cp -p'. + ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || + as_ln_s='cp -p' + elif ln conf$$.file conf$$ 2>/dev/null; then + as_ln_s=ln + else as_ln_s='cp -p' -elif ln conf$$.file conf$$ 2>/dev/null; then - as_ln_s=ln + fi else as_ln_s='cp -p' fi rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file rmdir conf$$.dir 2>/dev/null + +# as_fn_mkdir_p +# ------------- +# Create "$as_dir" as a directory, including parents if necessary. +as_fn_mkdir_p () +{ + + case $as_dir in #( + -*) as_dir=./$as_dir;; + esac + test -d "$as_dir" || eval $as_mkdir_p || { + as_dirs= + while :; do + case $as_dir in #( + *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( + *) as_qdir=$as_dir;; + esac + as_dirs="'$as_qdir' $as_dirs" + as_dir=`$as_dirname -- "$as_dir" || +$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$as_dir" : 'X\(//\)[^/]' \| \ + X"$as_dir" : 'X\(//\)$' \| \ + X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X"$as_dir" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + test -d "$as_dir" && break + done + test -z "$as_dirs" || eval "mkdir $as_dirs" + } || test -d "$as_dir" || as_fn_error "cannot create directory $as_dir" + + +} # as_fn_mkdir_p if mkdir -p . 2>/dev/null; then - as_mkdir_p=: + as_mkdir_p='mkdir -p "$as_dir"' else test -d ./-p && rmdir ./-p as_mkdir_p=false @@ -23305,12 +6711,12 @@ as_test_x=' eval sh -c '\'' if test -d "$1"; then - test -d "$1/."; + test -d "$1/."; else - case $1 in - -*)set "./$1";; + case $1 in #( + -*)set "./$1";; esac; - case `ls -ld'$as_ls_L_option' "$1" 2>/dev/null` in + case `ls -ld'$as_ls_L_option' "$1" 2>/dev/null` in #(( ???[sx]*):;;*)false;;esac;fi '\'' sh ' @@ -23325,13 +6731,19 @@ exec 6>&1 +## ----------------------------------- ## +## Main body of $CONFIG_STATUS script. ## +## ----------------------------------- ## +_ASEOF +test $as_write_fail = 0 && chmod +x $CONFIG_STATUS || ac_write_fail=1 -# Save the log message, to keep $[0] and so on meaningful, and to +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +# Save the log message, to keep $0 and so on meaningful, and to # report actual input values of CONFIG_FILES etc. instead of their # values after options handling. ac_log=" -This file was extended by libffi $as_me 3.0.5, which was -generated by GNU Autoconf 2.61. Invocation command line was +This file was extended by libffi $as_me 3.0.9, which was +generated by GNU Autoconf 2.65. Invocation command line was CONFIG_FILES = $CONFIG_FILES CONFIG_HEADERS = $CONFIG_HEADERS @@ -23344,7 +6756,16 @@ _ACEOF -cat >>$CONFIG_STATUS <<_ACEOF +case $ac_config_files in *" +"*) set x $ac_config_files; shift; ac_config_files=$*;; +esac + +case $ac_config_headers in *" +"*) set x $ac_config_headers; shift; ac_config_headers=$*;; +esac + + +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 # Files that config.status was made for. config_files="$ac_config_files" config_headers="$ac_config_headers" @@ -23353,22 +6774,25 @@ _ACEOF -cat >>$CONFIG_STATUS <<\_ACEOF +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 ac_cs_usage="\ -\`$as_me' instantiates files from templates according to the -current configuration. +\`$as_me' instantiates files and other configuration actions +from templates according to the current configuration. Unless the files +and actions are specified as TAGs, all are instantiated by default. -Usage: $0 [OPTIONS] [FILE]... +Usage: $0 [OPTION]... [TAG]... -h, --help print this help, then exit -V, --version print version number and configuration settings, then exit - -q, --quiet do not print progress messages + --config print configuration, then exit + -q, --quiet, --silent + do not print progress messages -d, --debug don't remove temporary files --recheck update $as_me by reconfiguring in the same conditions - --file=FILE[:TEMPLATE] - instantiate the configuration file FILE - --header=FILE[:TEMPLATE] - instantiate the configuration header FILE + --file=FILE[:TEMPLATE] + instantiate the configuration file FILE + --header=FILE[:TEMPLATE] + instantiate the configuration header FILE Configuration files: $config_files @@ -23382,16 +6806,17 @@ Configuration commands: $config_commands -Report bugs to ." +Report bugs to ." _ACEOF -cat >>$CONFIG_STATUS <<_ACEOF +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 +ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`" ac_cs_version="\\ -libffi config.status 3.0.5 -configured by $0, generated by GNU Autoconf 2.61, - with options \\"`echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`\\" +libffi config.status 3.0.9 +configured by $0, generated by GNU Autoconf 2.65, + with options \\"\$ac_cs_config\\" -Copyright (C) 2006 Free Software Foundation, Inc. +Copyright (C) 2009 Free Software Foundation, Inc. This config.status script is free software; the Free Software Foundation gives unlimited permission to copy, distribute and modify it." @@ -23399,11 +6824,12 @@ srcdir='$srcdir' INSTALL='$INSTALL' MKDIR_P='$MKDIR_P' +AWK='$AWK' +test -n "\$AWK" || AWK=awk _ACEOF -cat >>$CONFIG_STATUS <<\_ACEOF -# If no file are specified by the user, then we need to provide default -# value. By we need to know if files were specified by the user. +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +# The default lists apply if the user does not specify any file. ac_need_defaults=: while test $# != 0 do @@ -23425,34 +6851,40 @@ -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r) ac_cs_recheck=: ;; --version | --versio | --versi | --vers | --ver | --ve | --v | -V ) - echo "$ac_cs_version"; exit ;; + $as_echo "$ac_cs_version"; exit ;; + --config | --confi | --conf | --con | --co | --c ) + $as_echo "$ac_cs_config"; exit ;; --debug | --debu | --deb | --de | --d | -d ) debug=: ;; --file | --fil | --fi | --f ) $ac_shift - CONFIG_FILES="$CONFIG_FILES $ac_optarg" + case $ac_optarg in + *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; + esac + as_fn_append CONFIG_FILES " '$ac_optarg'" ac_need_defaults=false;; --header | --heade | --head | --hea ) $ac_shift - CONFIG_HEADERS="$CONFIG_HEADERS $ac_optarg" + case $ac_optarg in + *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; + esac + as_fn_append CONFIG_HEADERS " '$ac_optarg'" ac_need_defaults=false;; --he | --h) # Conflict between --help and --header - { echo "$as_me: error: ambiguous option: $1 -Try \`$0 --help' for more information." >&2 - { (exit 1); exit 1; }; };; + as_fn_error "ambiguous option: \`$1' +Try \`$0 --help' for more information.";; --help | --hel | -h ) - echo "$ac_cs_usage"; exit ;; + $as_echo "$ac_cs_usage"; exit ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil | --si | --s) ac_cs_silent=: ;; # This is an error. - -*) { echo "$as_me: error: unrecognized option: $1 -Try \`$0 --help' for more information." >&2 - { (exit 1); exit 1; }; } ;; + -*) as_fn_error "unrecognized option: \`$1' +Try \`$0 --help' for more information." ;; - *) ac_config_targets="$ac_config_targets $1" + *) as_fn_append ac_config_targets " $1" ac_need_defaults=false ;; esac @@ -23467,27 +6899,29 @@ fi _ACEOF -cat >>$CONFIG_STATUS <<_ACEOF +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 if \$ac_cs_recheck; then - echo "running CONFIG_SHELL=$SHELL $SHELL $0 "$ac_configure_args \$ac_configure_extra_args " --no-create --no-recursion" >&6 - CONFIG_SHELL=$SHELL + set X '$SHELL' '$0' $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion + shift + \$as_echo "running CONFIG_SHELL=$SHELL \$*" >&6 + CONFIG_SHELL='$SHELL' export CONFIG_SHELL - exec $SHELL "$0"$ac_configure_args \$ac_configure_extra_args --no-create --no-recursion + exec "\$@" fi _ACEOF -cat >>$CONFIG_STATUS <<\_ACEOF +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 exec 5>>config.log { echo sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX ## Running $as_me. ## _ASBOX - echo "$ac_log" + $as_echo "$ac_log" } >&5 _ACEOF -cat >>$CONFIG_STATUS <<_ACEOF +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 # # INIT-COMMANDS # @@ -23496,7 +6930,7 @@ _ACEOF -cat >>$CONFIG_STATUS <<\_ACEOF +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # Handling of arguments. for ac_config_target in $ac_config_targets @@ -23511,9 +6945,7 @@ "include/ffi_common.h") CONFIG_LINKS="$CONFIG_LINKS include/ffi_common.h:include/ffi_common.h" ;; "fficonfig.py") CONFIG_FILES="$CONFIG_FILES fficonfig.py" ;; - *) { { echo "$as_me:$LINENO: error: invalid argument: $ac_config_target" >&5 -echo "$as_me: error: invalid argument: $ac_config_target" >&2;} - { (exit 1); exit 1; }; };; + *) as_fn_error "invalid argument: \`$ac_config_target'" "$LINENO" 5;; esac done @@ -23541,7 +6973,7 @@ trap 'exit_status=$? { test -z "$tmp" || test ! -d "$tmp" || rm -fr "$tmp"; } && exit $exit_status ' 0 - trap '{ (exit 1); exit 1; }' 1 2 13 15 + trap 'as_fn_exit 1' 1 2 13 15 } # Create a (secure) tmp directory for tmp files. @@ -23552,280 +6984,139 @@ { tmp=./conf$$-$RANDOM (umask 077 && mkdir "$tmp") -} || -{ - echo "$me: cannot create a temporary directory in ." >&2 - { (exit 1); exit 1; } -} - -# -# Set up the sed scripts for CONFIG_FILES section. -# +} || as_fn_error "cannot create a temporary directory in ." "$LINENO" 5 -# No need to generate the scripts if there are no CONFIG_FILES. -# This happens for instance when ./config.status config.h +# Set up the scripts for CONFIG_FILES section. +# No need to generate them if there are no CONFIG_FILES. +# This happens for instance with `./config.status config.h'. if test -n "$CONFIG_FILES"; then -_ACEOF - - - -ac_delim='%!_!# ' -for ac_last_try in false false false false false :; do - cat >conf$$subs.sed <<_ACEOF -SHELL!$SHELL$ac_delim -PATH_SEPARATOR!$PATH_SEPARATOR$ac_delim -PACKAGE_NAME!$PACKAGE_NAME$ac_delim -PACKAGE_TARNAME!$PACKAGE_TARNAME$ac_delim -PACKAGE_VERSION!$PACKAGE_VERSION$ac_delim -PACKAGE_STRING!$PACKAGE_STRING$ac_delim -PACKAGE_BUGREPORT!$PACKAGE_BUGREPORT$ac_delim -exec_prefix!$exec_prefix$ac_delim -prefix!$prefix$ac_delim -program_transform_name!$program_transform_name$ac_delim -bindir!$bindir$ac_delim -sbindir!$sbindir$ac_delim -libexecdir!$libexecdir$ac_delim -datarootdir!$datarootdir$ac_delim -datadir!$datadir$ac_delim -sysconfdir!$sysconfdir$ac_delim -sharedstatedir!$sharedstatedir$ac_delim -localstatedir!$localstatedir$ac_delim -includedir!$includedir$ac_delim -oldincludedir!$oldincludedir$ac_delim -docdir!$docdir$ac_delim -infodir!$infodir$ac_delim -htmldir!$htmldir$ac_delim -dvidir!$dvidir$ac_delim -pdfdir!$pdfdir$ac_delim -psdir!$psdir$ac_delim -libdir!$libdir$ac_delim -localedir!$localedir$ac_delim -mandir!$mandir$ac_delim -DEFS!$DEFS$ac_delim -ECHO_C!$ECHO_C$ac_delim -ECHO_N!$ECHO_N$ac_delim -ECHO_T!$ECHO_T$ac_delim -LIBS!$LIBS$ac_delim -build_alias!$build_alias$ac_delim -host_alias!$host_alias$ac_delim -target_alias!$target_alias$ac_delim -build!$build$ac_delim -build_cpu!$build_cpu$ac_delim -build_vendor!$build_vendor$ac_delim -build_os!$build_os$ac_delim -host!$host$ac_delim -host_cpu!$host_cpu$ac_delim -host_vendor!$host_vendor$ac_delim -host_os!$host_os$ac_delim -target!$target$ac_delim -target_cpu!$target_cpu$ac_delim -target_vendor!$target_vendor$ac_delim -target_os!$target_os$ac_delim -INSTALL_PROGRAM!$INSTALL_PROGRAM$ac_delim -INSTALL_SCRIPT!$INSTALL_SCRIPT$ac_delim -INSTALL_DATA!$INSTALL_DATA$ac_delim -am__isrc!$am__isrc$ac_delim -CYGPATH_W!$CYGPATH_W$ac_delim -PACKAGE!$PACKAGE$ac_delim -VERSION!$VERSION$ac_delim -ACLOCAL!$ACLOCAL$ac_delim -AUTOCONF!$AUTOCONF$ac_delim -AUTOMAKE!$AUTOMAKE$ac_delim -AUTOHEADER!$AUTOHEADER$ac_delim -MAKEINFO!$MAKEINFO$ac_delim -install_sh!$install_sh$ac_delim -STRIP!$STRIP$ac_delim -INSTALL_STRIP_PROGRAM!$INSTALL_STRIP_PROGRAM$ac_delim -mkdir_p!$mkdir_p$ac_delim -AWK!$AWK$ac_delim -SET_MAKE!$SET_MAKE$ac_delim -am__leading_dot!$am__leading_dot$ac_delim -AMTAR!$AMTAR$ac_delim -am__tar!$am__tar$ac_delim -am__untar!$am__untar$ac_delim -CC!$CC$ac_delim -CFLAGS!$CFLAGS$ac_delim -LDFLAGS!$LDFLAGS$ac_delim -CPPFLAGS!$CPPFLAGS$ac_delim -ac_ct_CC!$ac_ct_CC$ac_delim -EXEEXT!$EXEEXT$ac_delim -OBJEXT!$OBJEXT$ac_delim -DEPDIR!$DEPDIR$ac_delim -am__include!$am__include$ac_delim -am__quote!$am__quote$ac_delim -AMDEP_TRUE!$AMDEP_TRUE$ac_delim -AMDEP_FALSE!$AMDEP_FALSE$ac_delim -AMDEPBACKSLASH!$AMDEPBACKSLASH$ac_delim -CCDEPMODE!$CCDEPMODE$ac_delim -am__fastdepCC_TRUE!$am__fastdepCC_TRUE$ac_delim -am__fastdepCC_FALSE!$am__fastdepCC_FALSE$ac_delim -CCAS!$CCAS$ac_delim -CCASFLAGS!$CCASFLAGS$ac_delim -CCASDEPMODE!$CCASDEPMODE$ac_delim -am__fastdepCCAS_TRUE!$am__fastdepCCAS_TRUE$ac_delim -am__fastdepCCAS_FALSE!$am__fastdepCCAS_FALSE$ac_delim -SED!$SED$ac_delim -GREP!$GREP$ac_delim -EGREP!$EGREP$ac_delim -LN_S!$LN_S$ac_delim -ECHO!$ECHO$ac_delim -_ACEOF - - if test `sed -n "s/.*$ac_delim\$/X/p" conf$$subs.sed | grep -c X` = 97; then - break - elif $ac_last_try; then - { { echo "$as_me:$LINENO: error: could not make $CONFIG_STATUS" >&5 -echo "$as_me: error: could not make $CONFIG_STATUS" >&2;} - { (exit 1); exit 1; }; } - else - ac_delim="$ac_delim!$ac_delim _$ac_delim!! " - fi -done -ac_eof=`sed -n '/^CEOF[0-9]*$/s/CEOF/0/p' conf$$subs.sed` -if test -n "$ac_eof"; then - ac_eof=`echo "$ac_eof" | sort -nru | sed 1q` - ac_eof=`expr $ac_eof + 1` +ac_cr=`echo X | tr X '\015'` +# On cygwin, bash can eat \r inside `` if the user requested igncr. +# But we know of no other shell where ac_cr would be empty at this +# point, so we can use a bashism as a fallback. +if test "x$ac_cr" = x; then + eval ac_cr=\$\'\\r\' +fi +ac_cs_awk_cr=`$AWK 'BEGIN { print "a\rb" }' /dev/null` +if test "$ac_cs_awk_cr" = "a${ac_cr}b"; then + ac_cs_awk_cr='\r' +else + ac_cs_awk_cr=$ac_cr fi -cat >>$CONFIG_STATUS <<_ACEOF -cat >"\$tmp/subs-1.sed" <<\CEOF$ac_eof -/@[a-zA-Z_][a-zA-Z_0-9]*@/!b -_ACEOF -sed ' -s/[,\\&]/\\&/g; s/@/@|#_!!_#|/g -s/^/s,@/; s/!/@,|#_!!_#|/ -:n -t n -s/'"$ac_delim"'$/,g/; t -s/$/\\/; p -N; s/^.*\n//; s/[,\\&]/\\&/g; s/@/@|#_!!_#|/g; b n -' >>$CONFIG_STATUS >$CONFIG_STATUS <<_ACEOF -CEOF$ac_eof +echo 'BEGIN {' >"$tmp/subs1.awk" && _ACEOF +{ + echo "cat >conf$$subs.awk <<_ACEOF" && + echo "$ac_subst_vars" | sed 's/.*/&!$&$ac_delim/' && + echo "_ACEOF" +} >conf$$subs.sh || + as_fn_error "could not make $CONFIG_STATUS" "$LINENO" 5 +ac_delim_num=`echo "$ac_subst_vars" | grep -c '$'` ac_delim='%!_!# ' for ac_last_try in false false false false false :; do - cat >conf$$subs.sed <<_ACEOF -AR!$AR$ac_delim -RANLIB!$RANLIB$ac_delim -CPP!$CPP$ac_delim -CXX!$CXX$ac_delim -CXXFLAGS!$CXXFLAGS$ac_delim -ac_ct_CXX!$ac_ct_CXX$ac_delim -CXXDEPMODE!$CXXDEPMODE$ac_delim -am__fastdepCXX_TRUE!$am__fastdepCXX_TRUE$ac_delim -am__fastdepCXX_FALSE!$am__fastdepCXX_FALSE$ac_delim -CXXCPP!$CXXCPP$ac_delim -F77!$F77$ac_delim -FFLAGS!$FFLAGS$ac_delim -ac_ct_F77!$ac_ct_F77$ac_delim -LIBTOOL!$LIBTOOL$ac_delim -MAINTAINER_MODE_TRUE!$MAINTAINER_MODE_TRUE$ac_delim -MAINTAINER_MODE_FALSE!$MAINTAINER_MODE_FALSE$ac_delim -MAINT!$MAINT$ac_delim -TESTSUBDIR_TRUE!$TESTSUBDIR_TRUE$ac_delim -TESTSUBDIR_FALSE!$TESTSUBDIR_FALSE$ac_delim -AM_RUNTESTFLAGS!$AM_RUNTESTFLAGS$ac_delim -MIPS_TRUE!$MIPS_TRUE$ac_delim -MIPS_FALSE!$MIPS_FALSE$ac_delim -SPARC_TRUE!$SPARC_TRUE$ac_delim -SPARC_FALSE!$SPARC_FALSE$ac_delim -X86_TRUE!$X86_TRUE$ac_delim -X86_FALSE!$X86_FALSE$ac_delim -X86_FREEBSD_TRUE!$X86_FREEBSD_TRUE$ac_delim -X86_FREEBSD_FALSE!$X86_FREEBSD_FALSE$ac_delim -X86_WIN32_TRUE!$X86_WIN32_TRUE$ac_delim -X86_WIN32_FALSE!$X86_WIN32_FALSE$ac_delim -X86_DARWIN_TRUE!$X86_DARWIN_TRUE$ac_delim -X86_DARWIN_FALSE!$X86_DARWIN_FALSE$ac_delim -ALPHA_TRUE!$ALPHA_TRUE$ac_delim -ALPHA_FALSE!$ALPHA_FALSE$ac_delim -IA64_TRUE!$IA64_TRUE$ac_delim -IA64_FALSE!$IA64_FALSE$ac_delim -M32R_TRUE!$M32R_TRUE$ac_delim -M32R_FALSE!$M32R_FALSE$ac_delim -M68K_TRUE!$M68K_TRUE$ac_delim -M68K_FALSE!$M68K_FALSE$ac_delim -POWERPC_TRUE!$POWERPC_TRUE$ac_delim -POWERPC_FALSE!$POWERPC_FALSE$ac_delim -POWERPC_AIX_TRUE!$POWERPC_AIX_TRUE$ac_delim -POWERPC_AIX_FALSE!$POWERPC_AIX_FALSE$ac_delim -POWERPC_DARWIN_TRUE!$POWERPC_DARWIN_TRUE$ac_delim -POWERPC_DARWIN_FALSE!$POWERPC_DARWIN_FALSE$ac_delim -POWERPC_FREEBSD_TRUE!$POWERPC_FREEBSD_TRUE$ac_delim -POWERPC_FREEBSD_FALSE!$POWERPC_FREEBSD_FALSE$ac_delim -ARM_TRUE!$ARM_TRUE$ac_delim -ARM_FALSE!$ARM_FALSE$ac_delim -LIBFFI_CRIS_TRUE!$LIBFFI_CRIS_TRUE$ac_delim -LIBFFI_CRIS_FALSE!$LIBFFI_CRIS_FALSE$ac_delim -FRV_TRUE!$FRV_TRUE$ac_delim -FRV_FALSE!$FRV_FALSE$ac_delim -S390_TRUE!$S390_TRUE$ac_delim -S390_FALSE!$S390_FALSE$ac_delim -X86_64_TRUE!$X86_64_TRUE$ac_delim -X86_64_FALSE!$X86_64_FALSE$ac_delim -SH_TRUE!$SH_TRUE$ac_delim -SH_FALSE!$SH_FALSE$ac_delim -SH64_TRUE!$SH64_TRUE$ac_delim -SH64_FALSE!$SH64_FALSE$ac_delim -PA_LINUX_TRUE!$PA_LINUX_TRUE$ac_delim -PA_LINUX_FALSE!$PA_LINUX_FALSE$ac_delim -PA_HPUX_TRUE!$PA_HPUX_TRUE$ac_delim -PA_HPUX_FALSE!$PA_HPUX_FALSE$ac_delim -PA64_HPUX_TRUE!$PA64_HPUX_TRUE$ac_delim -PA64_HPUX_FALSE!$PA64_HPUX_FALSE$ac_delim -ALLOCA!$ALLOCA$ac_delim -HAVE_LONG_DOUBLE!$HAVE_LONG_DOUBLE$ac_delim -TARGET!$TARGET$ac_delim -TARGETDIR!$TARGETDIR$ac_delim -toolexecdir!$toolexecdir$ac_delim -toolexeclibdir!$toolexeclibdir$ac_delim -LIBOBJS!$LIBOBJS$ac_delim -LTLIBOBJS!$LTLIBOBJS$ac_delim -_ACEOF + . ./conf$$subs.sh || + as_fn_error "could not make $CONFIG_STATUS" "$LINENO" 5 - if test `sed -n "s/.*$ac_delim\$/X/p" conf$$subs.sed | grep -c X` = 76; then + ac_delim_n=`sed -n "s/.*$ac_delim\$/X/p" conf$$subs.awk | grep -c X` + if test $ac_delim_n = $ac_delim_num; then break elif $ac_last_try; then - { { echo "$as_me:$LINENO: error: could not make $CONFIG_STATUS" >&5 -echo "$as_me: error: could not make $CONFIG_STATUS" >&2;} - { (exit 1); exit 1; }; } + as_fn_error "could not make $CONFIG_STATUS" "$LINENO" 5 else ac_delim="$ac_delim!$ac_delim _$ac_delim!! " fi done +rm -f conf$$subs.sh -ac_eof=`sed -n '/^CEOF[0-9]*$/s/CEOF/0/p' conf$$subs.sed` -if test -n "$ac_eof"; then - ac_eof=`echo "$ac_eof" | sort -nru | sed 1q` - ac_eof=`expr $ac_eof + 1` -fi - -cat >>$CONFIG_STATUS <<_ACEOF -cat >"\$tmp/subs-2.sed" <<\CEOF$ac_eof -/@[a-zA-Z_][a-zA-Z_0-9]*@/!b end -_ACEOF -sed ' -s/[,\\&]/\\&/g; s/@/@|#_!!_#|/g -s/^/s,@/; s/!/@,|#_!!_#|/ -:n -t n -s/'"$ac_delim"'$/,g/; t -s/$/\\/; p -N; s/^.*\n//; s/[,\\&]/\\&/g; s/@/@|#_!!_#|/g; b n -' >>$CONFIG_STATUS >$CONFIG_STATUS <<_ACEOF -:end -s/|#_!!_#|//g -CEOF$ac_eof +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 +cat >>"\$tmp/subs1.awk" <<\\_ACAWK && _ACEOF +sed -n ' +h +s/^/S["/; s/!.*/"]=/ +p +g +s/^[^!]*!// +:repl +t repl +s/'"$ac_delim"'$// +t delim +:nl +h +s/\(.\{148\}\)..*/\1/ +t more1 +s/["\\]/\\&/g; s/^/"/; s/$/\\n"\\/ +p +n +b repl +:more1 +s/["\\]/\\&/g; s/^/"/; s/$/"\\/ +p +g +s/.\{148\}// +t nl +:delim +h +s/\(.\{148\}\)..*/\1/ +t more2 +s/["\\]/\\&/g; s/^/"/; s/$/"/ +p +b +:more2 +s/["\\]/\\&/g; s/^/"/; s/$/"\\/ +p +g +s/.\{148\}// +t delim +' >$CONFIG_STATUS || ac_write_fail=1 +rm -f conf$$subs.awk +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 +_ACAWK +cat >>"\$tmp/subs1.awk" <<_ACAWK && + for (key in S) S_is_set[key] = 1 + FS = "" + +} +{ + line = $ 0 + nfields = split(line, field, "@") + substed = 0 + len = length(field[1]) + for (i = 2; i < nfields; i++) { + key = field[i] + keylen = length(key) + if (S_is_set[key]) { + value = S[key] + line = substr(line, 1, len) "" value "" substr(line, len + keylen + 3) + len += length(value) + length(field[++i]) + substed = 1 + } else + len += 1 + keylen + } + + print line +} +_ACAWK +_ACEOF +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +if sed "s/$ac_cr//" < /dev/null > /dev/null 2>&1; then + sed "s/$ac_cr\$//; s/$ac_cr/$ac_cs_awk_cr/g" +else + cat +fi < "$tmp/subs1.awk" > "$tmp/subs.awk" \ + || as_fn_error "could not setup config files machinery" "$LINENO" 5 +_ACEOF # VPATH may cause trouble with some makes, so we remove $(srcdir), # ${srcdir} and @srcdir@ from VPATH if srcdir is ".", strip leading and @@ -23842,20 +7133,128 @@ }' fi -cat >>$CONFIG_STATUS <<\_ACEOF +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 fi # test -n "$CONFIG_FILES" +# Set up the scripts for CONFIG_HEADERS section. +# No need to generate them if there are no CONFIG_HEADERS. +# This happens for instance with `./config.status Makefile'. +if test -n "$CONFIG_HEADERS"; then +cat >"$tmp/defines.awk" <<\_ACAWK || +BEGIN { +_ACEOF + +# Transform confdefs.h into an awk script `defines.awk', embedded as +# here-document in config.status, that substitutes the proper values into +# config.h.in to produce config.h. + +# Create a delimiter string that does not exist in confdefs.h, to ease +# handling of long lines. +ac_delim='%!_!# ' +for ac_last_try in false false :; do + ac_t=`sed -n "/$ac_delim/p" confdefs.h` + if test -z "$ac_t"; then + break + elif $ac_last_try; then + as_fn_error "could not make $CONFIG_HEADERS" "$LINENO" 5 + else + ac_delim="$ac_delim!$ac_delim _$ac_delim!! " + fi +done + +# For the awk script, D is an array of macro values keyed by name, +# likewise P contains macro parameters if any. Preserve backslash +# newline sequences. + +ac_word_re=[_$as_cr_Letters][_$as_cr_alnum]* +sed -n ' +s/.\{148\}/&'"$ac_delim"'/g +t rset +:rset +s/^[ ]*#[ ]*define[ ][ ]*/ / +t def +d +:def +s/\\$// +t bsnl +s/["\\]/\\&/g +s/^ \('"$ac_word_re"'\)\(([^()]*)\)[ ]*\(.*\)/P["\1"]="\2"\ +D["\1"]=" \3"/p +s/^ \('"$ac_word_re"'\)[ ]*\(.*\)/D["\1"]=" \2"/p +d +:bsnl +s/["\\]/\\&/g +s/^ \('"$ac_word_re"'\)\(([^()]*)\)[ ]*\(.*\)/P["\1"]="\2"\ +D["\1"]=" \3\\\\\\n"\\/p +t cont +s/^ \('"$ac_word_re"'\)[ ]*\(.*\)/D["\1"]=" \2\\\\\\n"\\/p +t cont +d +:cont +n +s/.\{148\}/&'"$ac_delim"'/g +t clear +:clear +s/\\$// +t bsnlc +s/["\\]/\\&/g; s/^/"/; s/$/"/p +d +:bsnlc +s/["\\]/\\&/g; s/^/"/; s/$/\\\\\\n"\\/p +b cont +' >$CONFIG_STATUS || ac_write_fail=1 + +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 + for (key in D) D_is_set[key] = 1 + FS = "" +} +/^[\t ]*#[\t ]*(define|undef)[\t ]+$ac_word_re([\t (]|\$)/ { + line = \$ 0 + split(line, arg, " ") + if (arg[1] == "#") { + defundef = arg[2] + mac1 = arg[3] + } else { + defundef = substr(arg[1], 2) + mac1 = arg[2] + } + split(mac1, mac2, "(") #) + macro = mac2[1] + prefix = substr(line, 1, index(line, defundef) - 1) + if (D_is_set[macro]) { + # Preserve the white space surrounding the "#". + print prefix "define", macro P[macro] D[macro] + next + } else { + # Replace #undef with comments. This is necessary, for example, + # in the case of _POSIX_SOURCE, which is predefined and required + # on some systems where configure will not decide to define it. + if (defundef == "undef") { + print "/*", prefix defundef, macro, "*/" + next + } + } +} +{ print } +_ACAWK +_ACEOF +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 + as_fn_error "could not setup config headers machinery" "$LINENO" 5 +fi # test -n "$CONFIG_HEADERS" + -for ac_tag in :F $CONFIG_FILES :H $CONFIG_HEADERS :L $CONFIG_LINKS :C $CONFIG_COMMANDS +eval set X " :F $CONFIG_FILES :H $CONFIG_HEADERS :L $CONFIG_LINKS :C $CONFIG_COMMANDS" +shift +for ac_tag do case $ac_tag in :[FHLC]) ac_mode=$ac_tag; continue;; esac case $ac_mode$ac_tag in :[FHL]*:*);; - :L* | :C*:*) { { echo "$as_me:$LINENO: error: Invalid tag $ac_tag." >&5 -echo "$as_me: error: Invalid tag $ac_tag." >&2;} - { (exit 1); exit 1; }; };; + :L* | :C*:*) as_fn_error "invalid tag \`$ac_tag'" "$LINENO" 5;; :[FH]-) ac_tag=-:-;; :[FH]*) ac_tag=$ac_tag:$ac_tag.in;; esac @@ -23883,26 +7282,34 @@ [\\/$]*) false;; *) test -f "$srcdir/$ac_f" && ac_f="$srcdir/$ac_f";; esac || - { { echo "$as_me:$LINENO: error: cannot find input file: $ac_f" >&5 -echo "$as_me: error: cannot find input file: $ac_f" >&2;} - { (exit 1); exit 1; }; };; + as_fn_error "cannot find input file: \`$ac_f'" "$LINENO" 5;; esac - ac_file_inputs="$ac_file_inputs $ac_f" + case $ac_f in *\'*) ac_f=`$as_echo "$ac_f" | sed "s/'/'\\\\\\\\''/g"`;; esac + as_fn_append ac_file_inputs " '$ac_f'" done # Let's still pretend it is `configure' which instantiates (i.e., don't # use $as_me), people would be surprised to read: # /* config.h. Generated by config.status. */ - configure_input="Generated from "`IFS=: - echo $* | sed 's|^[^:]*/||;s|:[^:]*/|, |g'`" by configure." + configure_input='Generated from '` + $as_echo "$*" | sed 's|^[^:]*/||;s|:[^:]*/|, |g' + `' by configure.' if test x"$ac_file" != x-; then configure_input="$ac_file. $configure_input" - { echo "$as_me:$LINENO: creating $ac_file" >&5 -echo "$as_me: creating $ac_file" >&6;} + { $as_echo "$as_me:${as_lineno-$LINENO}: creating $ac_file" >&5 +$as_echo "$as_me: creating $ac_file" >&6;} fi + # Neutralize special characters interpreted by sed in replacement strings. + case $configure_input in #( + *\&* | *\|* | *\\* ) + ac_sed_conf_input=`$as_echo "$configure_input" | + sed 's/[\\\\&|]/\\\\&/g'`;; #( + *) ac_sed_conf_input=$configure_input;; + esac case $ac_tag in - *:-:* | *:-) cat >"$tmp/stdin";; + *:-:* | *:-) cat >"$tmp/stdin" \ + || as_fn_error "could not create $ac_file" "$LINENO" 5 ;; esac ;; esac @@ -23912,42 +7319,7 @@ X"$ac_file" : 'X\(//\)[^/]' \| \ X"$ac_file" : 'X\(//\)$' \| \ X"$ac_file" : 'X\(/\)' \| . 2>/dev/null || -echo X"$ac_file" | - sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ - s//\1/ - q - } - /^X\(\/\/\)[^/].*/{ - s//\1/ - q - } - /^X\(\/\/\)$/{ - s//\1/ - q - } - /^X\(\/\).*/{ - s//\1/ - q - } - s/.*/./; q'` - { as_dir="$ac_dir" - case $as_dir in #( - -*) as_dir=./$as_dir;; - esac - test -d "$as_dir" || { $as_mkdir_p && mkdir -p "$as_dir"; } || { - as_dirs= - while :; do - case $as_dir in #( - *\'*) as_qdir=`echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #( - *) as_qdir=$as_dir;; - esac - as_dirs="'$as_qdir' $as_dirs" - as_dir=`$as_dirname -- "$as_dir" || -$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ - X"$as_dir" : 'X\(//\)[^/]' \| \ - X"$as_dir" : 'X\(//\)$' \| \ - X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || -echo X"$as_dir" | +$as_echo X"$ac_file" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q @@ -23965,20 +7337,15 @@ q } s/.*/./; q'` - test -d "$as_dir" && break - done - test -z "$as_dirs" || eval "mkdir $as_dirs" - } || test -d "$as_dir" || { { echo "$as_me:$LINENO: error: cannot create directory $as_dir" >&5 -echo "$as_me: error: cannot create directory $as_dir" >&2;} - { (exit 1); exit 1; }; }; } + as_dir="$ac_dir"; as_fn_mkdir_p ac_builddir=. case "$ac_dir" in .) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; *) - ac_dir_suffix=/`echo "$ac_dir" | sed 's,^\.[\\/],,'` + ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'` # A ".." for each directory in $ac_dir_suffix. - ac_top_builddir_sub=`echo "$ac_dir_suffix" | sed 's,/[^\\/]*,/..,g;s,/,,'` + ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` case $ac_top_builddir_sub in "") ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; @@ -24023,12 +7390,12 @@ esac _ACEOF -cat >>$CONFIG_STATUS <<\_ACEOF +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # If the template does not know about datarootdir, expand it. # FIXME: This hack should be removed a few years after 2.60. ac_datarootdir_hack=; ac_datarootdir_seen= - -case `sed -n '/datarootdir/ { +ac_sed_dataroot=' +/datarootdir/ { p q } @@ -24036,36 +7403,37 @@ /@docdir@/p /@infodir@/p /@localedir@/p -/@mandir@/p -' $ac_file_inputs` in +/@mandir@/p' +case `eval "sed -n \"\$ac_sed_dataroot\" $ac_file_inputs"` in *datarootdir*) ac_datarootdir_seen=yes;; *@datadir@*|*@docdir@*|*@infodir@*|*@localedir@*|*@mandir@*) - { echo "$as_me:$LINENO: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&5 -echo "$as_me: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&5 +$as_echo "$as_me: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&2;} _ACEOF -cat >>$CONFIG_STATUS <<_ACEOF +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_datarootdir_hack=' s&@datadir@&$datadir&g s&@docdir@&$docdir&g s&@infodir@&$infodir&g s&@localedir@&$localedir&g s&@mandir@&$mandir&g - s&\\\${datarootdir}&$datarootdir&g' ;; + s&\\\${datarootdir}&$datarootdir&g' ;; esac _ACEOF # Neutralize VPATH when `$srcdir' = `.'. # Shell code in configure.ac might set extrasub. # FIXME: do we really want to maintain this feature? -cat >>$CONFIG_STATUS <<_ACEOF - sed "$ac_vpsub +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 +ac_sed_extra="$ac_vpsub $extrasub _ACEOF -cat >>$CONFIG_STATUS <<\_ACEOF +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 :t /@[a-zA-Z_][a-zA-Z_0-9]*@/!b -s&@configure_input@&$configure_input&;t t +s|@configure_input@|$ac_sed_conf_input|;t t s&@top_builddir@&$ac_top_builddir_sub&;t t +s&@top_build_prefix@&$ac_top_build_prefix&;t t s&@srcdir@&$ac_srcdir&;t t s&@abs_srcdir@&$ac_abs_srcdir&;t t s&@top_srcdir@&$ac_top_srcdir&;t t @@ -24076,135 +7444,65 @@ s&@INSTALL@&$ac_INSTALL&;t t s&@MKDIR_P@&$ac_MKDIR_P&;t t $ac_datarootdir_hack -" $ac_file_inputs | sed -f "$tmp/subs-1.sed" | sed -f "$tmp/subs-2.sed" >$tmp/out +" +eval sed \"\$ac_sed_extra\" "$ac_file_inputs" | $AWK -f "$tmp/subs.awk" >$tmp/out \ + || as_fn_error "could not create $ac_file" "$LINENO" 5 test -z "$ac_datarootdir_hack$ac_datarootdir_seen" && { ac_out=`sed -n '/\${datarootdir}/p' "$tmp/out"`; test -n "$ac_out"; } && { ac_out=`sed -n '/^[ ]*datarootdir[ ]*:*=/p' "$tmp/out"`; test -z "$ac_out"; } && - { echo "$as_me:$LINENO: WARNING: $ac_file contains a reference to the variable \`datarootdir' + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file contains a reference to the variable \`datarootdir' which seems to be undefined. Please make sure it is defined." >&5 -echo "$as_me: WARNING: $ac_file contains a reference to the variable \`datarootdir' +$as_echo "$as_me: WARNING: $ac_file contains a reference to the variable \`datarootdir' which seems to be undefined. Please make sure it is defined." >&2;} rm -f "$tmp/stdin" case $ac_file in - -) cat "$tmp/out"; rm -f "$tmp/out";; - *) rm -f "$ac_file"; mv "$tmp/out" $ac_file;; - esac + -) cat "$tmp/out" && rm -f "$tmp/out";; + *) rm -f "$ac_file" && mv "$tmp/out" "$ac_file";; + esac \ + || as_fn_error "could not create $ac_file" "$LINENO" 5 ;; :H) # # CONFIG_HEADER # -_ACEOF - -# Transform confdefs.h into a sed script `conftest.defines', that -# substitutes the proper values into config.h.in to produce config.h. -rm -f conftest.defines conftest.tail -# First, append a space to every undef/define line, to ease matching. -echo 's/$/ /' >conftest.defines -# Then, protect against being on the right side of a sed subst, or in -# an unquoted here document, in config.status. If some macros were -# called several times there might be several #defines for the same -# symbol, which is useless. But do not sort them, since the last -# AC_DEFINE must be honored. -ac_word_re=[_$as_cr_Letters][_$as_cr_alnum]* -# These sed commands are passed to sed as "A NAME B PARAMS C VALUE D", where -# NAME is the cpp macro being defined, VALUE is the value it is being given. -# PARAMS is the parameter list in the macro definition--in most cases, it's -# just an empty string. -ac_dA='s,^\\([ #]*\\)[^ ]*\\([ ]*' -ac_dB='\\)[ (].*,\\1define\\2' -ac_dC=' ' -ac_dD=' ,' - -uniq confdefs.h | - sed -n ' - t rset - :rset - s/^[ ]*#[ ]*define[ ][ ]*// - t ok - d - :ok - s/[\\&,]/\\&/g - s/^\('"$ac_word_re"'\)\(([^()]*)\)[ ]*\(.*\)/ '"$ac_dA"'\1'"$ac_dB"'\2'"${ac_dC}"'\3'"$ac_dD"'/p - s/^\('"$ac_word_re"'\)[ ]*\(.*\)/'"$ac_dA"'\1'"$ac_dB$ac_dC"'\2'"$ac_dD"'/p - ' >>conftest.defines - -# Remove the space that was appended to ease matching. -# Then replace #undef with comments. This is necessary, for -# example, in the case of _POSIX_SOURCE, which is predefined and required -# on some systems where configure will not decide to define it. -# (The regexp can be short, since the line contains either #define or #undef.) -echo 's/ $// -s,^[ #]*u.*,/* & */,' >>conftest.defines - -# Break up conftest.defines: -ac_max_sed_lines=50 - -# First sed command is: sed -f defines.sed $ac_file_inputs >"$tmp/out1" -# Second one is: sed -f defines.sed "$tmp/out1" >"$tmp/out2" -# Third one will be: sed -f defines.sed "$tmp/out2" >"$tmp/out1" -# et cetera. -ac_in='$ac_file_inputs' -ac_out='"$tmp/out1"' -ac_nxt='"$tmp/out2"' - -while : -do - # Write a here document: - cat >>$CONFIG_STATUS <<_ACEOF - # First, check the format of the line: - cat >"\$tmp/defines.sed" <<\\CEOF -/^[ ]*#[ ]*undef[ ][ ]*$ac_word_re[ ]*\$/b def -/^[ ]*#[ ]*define[ ][ ]*$ac_word_re[( ]/b def -b -:def -_ACEOF - sed ${ac_max_sed_lines}q conftest.defines >>$CONFIG_STATUS - echo 'CEOF - sed -f "$tmp/defines.sed"' "$ac_in >$ac_out" >>$CONFIG_STATUS - ac_in=$ac_out; ac_out=$ac_nxt; ac_nxt=$ac_in - sed 1,${ac_max_sed_lines}d conftest.defines >conftest.tail - grep . conftest.tail >/dev/null || break - rm -f conftest.defines - mv conftest.tail conftest.defines -done -rm -f conftest.defines conftest.tail - -echo "ac_result=$ac_in" >>$CONFIG_STATUS -cat >>$CONFIG_STATUS <<\_ACEOF if test x"$ac_file" != x-; then - echo "/* $configure_input */" >"$tmp/config.h" - cat "$ac_result" >>"$tmp/config.h" - if diff $ac_file "$tmp/config.h" >/dev/null 2>&1; then - { echo "$as_me:$LINENO: $ac_file is unchanged" >&5 -echo "$as_me: $ac_file is unchanged" >&6;} + { + $as_echo "/* $configure_input */" \ + && eval '$AWK -f "$tmp/defines.awk"' "$ac_file_inputs" + } >"$tmp/config.h" \ + || as_fn_error "could not create $ac_file" "$LINENO" 5 + if diff "$ac_file" "$tmp/config.h" >/dev/null 2>&1; then + { $as_echo "$as_me:${as_lineno-$LINENO}: $ac_file is unchanged" >&5 +$as_echo "$as_me: $ac_file is unchanged" >&6;} else - rm -f $ac_file - mv "$tmp/config.h" $ac_file + rm -f "$ac_file" + mv "$tmp/config.h" "$ac_file" \ + || as_fn_error "could not create $ac_file" "$LINENO" 5 fi else - echo "/* $configure_input */" - cat "$ac_result" + $as_echo "/* $configure_input */" \ + && eval '$AWK -f "$tmp/defines.awk"' "$ac_file_inputs" \ + || as_fn_error "could not create -" "$LINENO" 5 fi - rm -f "$tmp/out12" -# Compute $ac_file's index in $config_headers. +# Compute "$ac_file"'s index in $config_headers. +_am_arg="$ac_file" _am_stamp_count=1 for _am_header in $config_headers :; do case $_am_header in - $ac_file | $ac_file:* ) + $_am_arg | $_am_arg:* ) break ;; * ) _am_stamp_count=`expr $_am_stamp_count + 1` ;; esac done -echo "timestamp for $ac_file" >`$as_dirname -- $ac_file || -$as_expr X$ac_file : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ - X$ac_file : 'X\(//\)[^/]' \| \ - X$ac_file : 'X\(//\)$' \| \ - X$ac_file : 'X\(/\)' \| . 2>/dev/null || -echo X$ac_file | +echo "timestamp for $_am_arg" >`$as_dirname -- "$_am_arg" || +$as_expr X"$_am_arg" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$_am_arg" : 'X\(//\)[^/]' \| \ + X"$_am_arg" : 'X\(//\)$' \| \ + X"$_am_arg" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X"$_am_arg" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q @@ -24228,52 +7526,67 @@ # CONFIG_LINK # - { echo "$as_me:$LINENO: linking $srcdir/$ac_source to $ac_file" >&5 -echo "$as_me: linking $srcdir/$ac_source to $ac_file" >&6;} + if test "$ac_source" = "$ac_file" && test "$srcdir" = '.'; then + : + else + # Prefer the file from the source tree if names are identical. + if test "$ac_source" = "$ac_file" || test ! -r "$ac_source"; then + ac_source=$srcdir/$ac_source + fi - if test ! -r "$srcdir/$ac_source"; then - { { echo "$as_me:$LINENO: error: $srcdir/$ac_source: file not found" >&5 -echo "$as_me: error: $srcdir/$ac_source: file not found" >&2;} - { (exit 1); exit 1; }; } - fi - rm -f "$ac_file" + { $as_echo "$as_me:${as_lineno-$LINENO}: linking $ac_source to $ac_file" >&5 +$as_echo "$as_me: linking $ac_source to $ac_file" >&6;} - # Try a relative symlink, then a hard link, then a copy. - case $srcdir in - [\\/$]* | ?:[\\/]* ) ac_rel_source=$srcdir/$ac_source ;; - *) ac_rel_source=$ac_top_build_prefix$srcdir/$ac_source ;; - esac - ln -s "$ac_rel_source" "$ac_file" 2>/dev/null || - ln "$srcdir/$ac_source" "$ac_file" 2>/dev/null || - cp -p "$srcdir/$ac_source" "$ac_file" || - { { echo "$as_me:$LINENO: error: cannot link or copy $srcdir/$ac_source to $ac_file" >&5 -echo "$as_me: error: cannot link or copy $srcdir/$ac_source to $ac_file" >&2;} - { (exit 1); exit 1; }; } + if test ! -r "$ac_source"; then + as_fn_error "$ac_source: file not found" "$LINENO" 5 + fi + rm -f "$ac_file" + + # Try a relative symlink, then a hard link, then a copy. + case $srcdir in + [\\/$]* | ?:[\\/]* ) ac_rel_source=$ac_source ;; + *) ac_rel_source=$ac_top_build_prefix$ac_source ;; + esac + ln -s "$ac_rel_source" "$ac_file" 2>/dev/null || + ln "$ac_source" "$ac_file" 2>/dev/null || + cp -p "$ac_source" "$ac_file" || + as_fn_error "cannot link or copy $ac_source to $ac_file" "$LINENO" 5 + fi ;; - :C) { echo "$as_me:$LINENO: executing $ac_file commands" >&5 -echo "$as_me: executing $ac_file commands" >&6;} + :C) { $as_echo "$as_me:${as_lineno-$LINENO}: executing $ac_file commands" >&5 +$as_echo "$as_me: executing $ac_file commands" >&6;} ;; esac case $ac_file$ac_mode in - "depfiles":C) test x"$AMDEP_TRUE" != x"" || for mf in $CONFIG_FILES; do - # Strip MF so we end up with the name of the file. - mf=`echo "$mf" | sed -e 's/:.*$//'` - # Check whether this is an Automake generated Makefile or not. - # We used to match only the files named `Makefile.in', but - # some people rename them; so instead we look at the file content. - # Grep'ing the first line is not enough: some people post-process - # each Makefile.in and add a new line on top of each file to say so. - # Grep'ing the whole file is not good either: AIX grep has a line - # limit of 2048, but all sed's we know have understand at least 4000. - if sed 10q "$mf" | grep '^#.*generated by automake' > /dev/null 2>&1; then - dirpart=`$as_dirname -- "$mf" || + "depfiles":C) test x"$AMDEP_TRUE" != x"" || { + # Autoconf 2.62 quotes --file arguments for eval, but not when files + # are listed without --file. Let's play safe and only enable the eval + # if we detect the quoting. + case $CONFIG_FILES in + *\'*) eval set x "$CONFIG_FILES" ;; + *) set x $CONFIG_FILES ;; + esac + shift + for mf + do + # Strip MF so we end up with the name of the file. + mf=`echo "$mf" | sed -e 's/:.*$//'` + # Check whether this is an Automake generated Makefile or not. + # We used to match only the files named `Makefile.in', but + # some people rename them; so instead we look at the file content. + # Grep'ing the first line is not enough: some people post-process + # each Makefile.in and add a new line on top of each file to say so. + # Grep'ing the whole file is not good either: AIX grep has a line + # limit of 2048, but all sed's we know have understand at least 4000. + if sed -n 's,^#.*generated by automake.*,X,p' "$mf" | grep X >/dev/null 2>&1; then + dirpart=`$as_dirname -- "$mf" || $as_expr X"$mf" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$mf" : 'X\(//\)[^/]' \| \ X"$mf" : 'X\(//\)$' \| \ X"$mf" : 'X\(/\)' \| . 2>/dev/null || -echo X"$mf" | +$as_echo X"$mf" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q @@ -24291,68 +7604,33 @@ q } s/.*/./; q'` - else - continue - fi - # Extract the definition of DEPDIR, am__include, and am__quote - # from the Makefile without running `make'. - DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"` - test -z "$DEPDIR" && continue - am__include=`sed -n 's/^am__include = //p' < "$mf"` - test -z "am__include" && continue - am__quote=`sed -n 's/^am__quote = //p' < "$mf"` - # When using ansi2knr, U may be empty or an underscore; expand it - U=`sed -n 's/^U = //p' < "$mf"` - # Find all dependency output files, they are included files with - # $(DEPDIR) in their names. We invoke sed twice because it is the - # simplest approach to changing $(DEPDIR) to its actual value in the - # expansion. - for file in `sed -n " - s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \ - sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g' -e 's/\$U/'"$U"'/g'`; do - # Make sure the directory exists. - test -f "$dirpart/$file" && continue - fdir=`$as_dirname -- "$file" || + else + continue + fi + # Extract the definition of DEPDIR, am__include, and am__quote + # from the Makefile without running `make'. + DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"` + test -z "$DEPDIR" && continue + am__include=`sed -n 's/^am__include = //p' < "$mf"` + test -z "am__include" && continue + am__quote=`sed -n 's/^am__quote = //p' < "$mf"` + # When using ansi2knr, U may be empty or an underscore; expand it + U=`sed -n 's/^U = //p' < "$mf"` + # Find all dependency output files, they are included files with + # $(DEPDIR) in their names. We invoke sed twice because it is the + # simplest approach to changing $(DEPDIR) to its actual value in the + # expansion. + for file in `sed -n " + s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \ + sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g' -e 's/\$U/'"$U"'/g'`; do + # Make sure the directory exists. + test -f "$dirpart/$file" && continue + fdir=`$as_dirname -- "$file" || $as_expr X"$file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$file" : 'X\(//\)[^/]' \| \ X"$file" : 'X\(//\)$' \| \ X"$file" : 'X\(/\)' \| . 2>/dev/null || -echo X"$file" | - sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ - s//\1/ - q - } - /^X\(\/\/\)[^/].*/{ - s//\1/ - q - } - /^X\(\/\/\)$/{ - s//\1/ - q - } - /^X\(\/\).*/{ - s//\1/ - q - } - s/.*/./; q'` - { as_dir=$dirpart/$fdir - case $as_dir in #( - -*) as_dir=./$as_dir;; - esac - test -d "$as_dir" || { $as_mkdir_p && mkdir -p "$as_dir"; } || { - as_dirs= - while :; do - case $as_dir in #( - *\'*) as_qdir=`echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #( - *) as_qdir=$as_dir;; - esac - as_dirs="'$as_qdir' $as_dirs" - as_dir=`$as_dirname -- "$as_dir" || -$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ - X"$as_dir" : 'X\(//\)[^/]' \| \ - X"$as_dir" : 'X\(//\)$' \| \ - X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || -echo X"$as_dir" | +$as_echo X"$file" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q @@ -24370,16 +7648,12 @@ q } s/.*/./; q'` - test -d "$as_dir" && break + as_dir=$dirpart/$fdir; as_fn_mkdir_p + # echo "creating $dirpart/$file" + echo '# dummy' > "$dirpart/$file" done - test -z "$as_dirs" || eval "mkdir $as_dirs" - } || test -d "$as_dir" || { { echo "$as_me:$LINENO: error: cannot create directory $as_dir" >&5 -echo "$as_me: error: cannot create directory $as_dir" >&2;} - { (exit 1); exit 1; }; }; } - # echo "creating $dirpart/$file" - echo '# dummy' > "$dirpart/$file" done -done +} ;; "include":C) test -d include || mkdir include ;; "src":C) @@ -24391,11 +7665,13 @@ done # for ac_tag -{ (exit 0); exit 0; } +as_fn_exit 0 _ACEOF -chmod +x $CONFIG_STATUS ac_clean_files=$ac_clean_files_save +test $ac_write_fail = 0 || + as_fn_error "write failure creating $CONFIG_STATUS" "$LINENO" 5 + # configure is writing to config.log, and then calls config.status. # config.status does its own redirection, appending to config.log. @@ -24415,6 +7691,10 @@ exec 5>>config.log # Use ||, not &&, to avoid exiting from the if with $? = 1, which # would make configure fail if this is the last instruction. - $ac_cs_success || { (exit 1); exit 1; } + $ac_cs_success || as_fn_exit $? +fi +if test -n "$ac_unrecognized_opts" && test "$enable_option_checking" != no; then + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: unrecognized options: $ac_unrecognized_opts" >&5 +$as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2;} fi Modified: python/trunk/Modules/_ctypes/libffi/configure.ac ============================================================================== --- python/trunk/Modules/_ctypes/libffi/configure.ac (original) +++ python/trunk/Modules/_ctypes/libffi/configure.ac Mon Mar 15 01:02:36 2010 @@ -3,9 +3,9 @@ # file from libffi - slightly patched for ctypes # -AC_PREREQ(2.59) +AC_PREREQ(2.63) -AC_INIT([libffi], [3.0.5], [http://gcc.gnu.org/bugs.html]) +AC_INIT([libffi], [3.0.9], [http://gcc.gnu.org/bugs.html]) AC_CONFIG_HEADERS([fficonfig.h]) AC_CANONICAL_SYSTEM @@ -23,6 +23,7 @@ m4_rename([_AC_ARG_VAR_PRECIOUS],[real_PRECIOUS]) m4_define([_AC_ARG_VAR_PRECIOUS],[]) AC_PROG_CC +m4_undefine([_AC_ARG_VAR_PRECIOUS]) m4_rename([real_PRECIOUS],[_AC_ARG_VAR_PRECIOUS]) AC_SUBST(CFLAGS) @@ -30,6 +31,7 @@ AM_PROG_AS AM_PROG_CC_C_O AC_PROG_LIBTOOL +AC_CONFIG_MACRO_DIR([m4]) AM_MAINTAINER_MODE @@ -52,10 +54,14 @@ TARGET=ARM; TARGETDIR=arm ;; - amd64-*-freebsd*) + amd64-*-freebsd* | amd64-*-openbsd*) TARGET=X86_64; TARGETDIR=x86 ;; + avr32*-*-*) + TARGET=AVR32; TARGETDIR=avr32 + ;; + cris-*-*) TARGET=LIBFFI_CRIS; TARGETDIR=cris ;; @@ -74,11 +80,13 @@ TARGET=PA_HPUX; TARGETDIR=pa ;; - i386-*-freebsd* | i386-*-openbsd*) + i?86-*-freebsd* | i?86-*-openbsd*) TARGET=X86_FREEBSD; TARGETDIR=x86 ;; i?86-win32* | i?86-*-cygwin* | i?86-*-mingw*) TARGET=X86_WIN32; TARGETDIR=x86 + # All mingw/cygwin/win32 builds require this for sharedlib + AM_LTLDFLAGS="-no-undefined" ;; i?86-*-darwin*) TARGET=X86_DARWIN; TARGETDIR=x86 @@ -109,7 +117,9 @@ TARGET=MIPS_IRIX; TARGETDIR=mips ;; mips*-*-linux*) - TARGET=MIPS_LINUX; TARGETDIR=mips + # Support 128-bit long double for NewABI. + HAVE_LONG_DOUBLE='defined(__mips64)' + TARGET=MIPS_IRIX; TARGETDIR=mips ;; powerpc*-*-linux* | powerpc-*-sysv*) @@ -149,14 +159,18 @@ x86_64-*-darwin*) TARGET=X86_DARWIN; TARGETDIR=x86 ;; + x86_64-*-cygwin* | x86_64-*-mingw*) + TARGET=X86_WIN64; TARGETDIR=x86 ;; + x86_64-*-*) TARGET=X86_64; TARGETDIR=x86 ;; esac AC_SUBST(AM_RUNTESTFLAGS) +AC_SUBST(AM_LTLDFLAGS) if test $TARGETDIR = unknown; then AC_MSG_ERROR(["libffi has not been ported to $host."]) @@ -167,6 +181,7 @@ AM_CONDITIONAL(X86, test x$TARGET = xX86) AM_CONDITIONAL(X86_FREEBSD, test x$TARGET = xX86_FREEBSD) AM_CONDITIONAL(X86_WIN32, test x$TARGET = xX86_WIN32) +AM_CONDITIONAL(X86_WIN64, test x$TARGET = xX86_WIN64) AM_CONDITIONAL(X86_DARWIN, test x$TARGET = xX86_DARWIN) AM_CONDITIONAL(ALPHA, test x$TARGET = xALPHA) AM_CONDITIONAL(IA64, test x$TARGET = xIA64) @@ -177,6 +192,7 @@ AM_CONDITIONAL(POWERPC_DARWIN, test x$TARGET = xPOWERPC_DARWIN) AM_CONDITIONAL(POWERPC_FREEBSD, test x$TARGET = xPOWERPC_FREEBSD) AM_CONDITIONAL(ARM, test x$TARGET = xARM) +AM_CONDITIONAL(AVR32, test x$TARGET = xAVR32) AM_CONDITIONAL(LIBFFI_CRIS, test x$TARGET = xLIBFFI_CRIS) AM_CONDITIONAL(FRV, test x$TARGET = xFRV) AM_CONDITIONAL(S390, test x$TARGET = xS390) @@ -251,6 +267,29 @@ fi fi +if test x$TARGET = xX86 || test x$TARGET = xX86_WIN32 || test x$TARGET = xX86_64; then + AC_CACHE_CHECK([assembler supports pc related relocs], + libffi_cv_as_x86_pcrel, [ + libffi_cv_as_x86_pcrel=yes + echo '.text; foo: nop; .data; .long foo-.; .text' > conftest.s + if $CC $CFLAGS -c conftest.s 2>&1 | grep -i warning > /dev/null; then + libffi_cv_as_x86_pcrel=no + fi + ]) + if test "x$libffi_cv_as_x86_pcrel" = xyes; then + AC_DEFINE(HAVE_AS_X86_PCREL, 1, + [Define if your assembler supports PC relative relocs.]) + fi +fi + +case "$target" in + *-apple-darwin10* | *-*-freebsd* | *-*-openbsd* | *-pc-solaris*) + AC_DEFINE(FFI_MMAP_EXEC_WRIT, 1, + [Cannot use malloc on this target, so, we revert to + alternative means]) + ;; +esac + AC_CACHE_CHECK([whether .eh_frame section should be read-only], libffi_cv_ro_eh_frame, [ libffi_cv_ro_eh_frame=no Added: python/trunk/Modules/_ctypes/libffi/depcomp ============================================================================== --- (empty file) +++ python/trunk/Modules/_ctypes/libffi/depcomp Mon Mar 15 01:02:36 2010 @@ -0,0 +1,584 @@ +#! /bin/sh +# depcomp - compile a program generating dependencies as side-effects + +scriptversion=2006-10-15.18 + +# Copyright (C) 1999, 2000, 2003, 2004, 2005, 2006 Free Software +# Foundation, Inc. + +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2, or (at your option) +# any later version. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. + +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA +# 02110-1301, USA. + +# As a special exception to the GNU General Public License, if you +# distribute this file as part of a program that contains a +# configuration script generated by Autoconf, you may include it under +# the same distribution terms that you use for the rest of that program. + +# Originally written by Alexandre Oliva . + +case $1 in + '') + echo "$0: No command. Try \`$0 --help' for more information." 1>&2 + exit 1; + ;; + -h | --h*) + cat <<\EOF +Usage: depcomp [--help] [--version] PROGRAM [ARGS] + +Run PROGRAMS ARGS to compile a file, generating dependencies +as side-effects. + +Environment variables: + depmode Dependency tracking mode. + source Source file read by `PROGRAMS ARGS'. + object Object file output by `PROGRAMS ARGS'. + DEPDIR directory where to store dependencies. + depfile Dependency file to output. + tmpdepfile Temporary file to use when outputing dependencies. + libtool Whether libtool is used (yes/no). + +Report bugs to . +EOF + exit $? + ;; + -v | --v*) + echo "depcomp $scriptversion" + exit $? + ;; +esac + +if test -z "$depmode" || test -z "$source" || test -z "$object"; then + echo "depcomp: Variables source, object and depmode must be set" 1>&2 + exit 1 +fi + +# Dependencies for sub/bar.o or sub/bar.obj go into sub/.deps/bar.Po. +depfile=${depfile-`echo "$object" | + sed 's|[^\\/]*$|'${DEPDIR-.deps}'/&|;s|\.\([^.]*\)$|.P\1|;s|Pobj$|Po|'`} +tmpdepfile=${tmpdepfile-`echo "$depfile" | sed 's/\.\([^.]*\)$/.T\1/'`} + +rm -f "$tmpdepfile" + +# Some modes work just like other modes, but use different flags. We +# parameterize here, but still list the modes in the big case below, +# to make depend.m4 easier to write. Note that we *cannot* use a case +# here, because this file can only contain one case statement. +if test "$depmode" = hp; then + # HP compiler uses -M and no extra arg. + gccflag=-M + depmode=gcc +fi + +if test "$depmode" = dashXmstdout; then + # This is just like dashmstdout with a different argument. + dashmflag=-xM + depmode=dashmstdout +fi + +case "$depmode" in +gcc3) +## gcc 3 implements dependency tracking that does exactly what +## we want. Yay! Note: for some reason libtool 1.4 doesn't like +## it if -MD -MP comes after the -MF stuff. Hmm. +## Unfortunately, FreeBSD c89 acceptance of flags depends upon +## the command line argument order; so add the flags where they +## appear in depend2.am. Note that the slowdown incurred here +## affects only configure: in makefiles, %FASTDEP% shortcuts this. + for arg + do + case $arg in + -c) set fnord "$@" -MT "$object" -MD -MP -MF "$tmpdepfile" "$arg" ;; + *) set fnord "$@" "$arg" ;; + esac + shift # fnord + shift # $arg + done + "$@" + stat=$? + if test $stat -eq 0; then : + else + rm -f "$tmpdepfile" + exit $stat + fi + mv "$tmpdepfile" "$depfile" + ;; + +gcc) +## There are various ways to get dependency output from gcc. Here's +## why we pick this rather obscure method: +## - Don't want to use -MD because we'd like the dependencies to end +## up in a subdir. Having to rename by hand is ugly. +## (We might end up doing this anyway to support other compilers.) +## - The DEPENDENCIES_OUTPUT environment variable makes gcc act like +## -MM, not -M (despite what the docs say). +## - Using -M directly means running the compiler twice (even worse +## than renaming). + if test -z "$gccflag"; then + gccflag=-MD, + fi + "$@" -Wp,"$gccflag$tmpdepfile" + stat=$? + if test $stat -eq 0; then : + else + rm -f "$tmpdepfile" + exit $stat + fi + rm -f "$depfile" + echo "$object : \\" > "$depfile" + alpha=ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz +## The second -e expression handles DOS-style file names with drive letters. + sed -e 's/^[^:]*: / /' \ + -e 's/^['$alpha']:\/[^:]*: / /' < "$tmpdepfile" >> "$depfile" +## This next piece of magic avoids the `deleted header file' problem. +## The problem is that when a header file which appears in a .P file +## is deleted, the dependency causes make to die (because there is +## typically no way to rebuild the header). We avoid this by adding +## dummy dependencies for each header file. Too bad gcc doesn't do +## this for us directly. + tr ' ' ' +' < "$tmpdepfile" | +## Some versions of gcc put a space before the `:'. On the theory +## that the space means something, we add a space to the output as +## well. +## Some versions of the HPUX 10.20 sed can't process this invocation +## correctly. Breaking it into two sed invocations is a workaround. + sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile" + rm -f "$tmpdepfile" + ;; + +hp) + # This case exists only to let depend.m4 do its work. It works by + # looking at the text of this script. This case will never be run, + # since it is checked for above. + exit 1 + ;; + +sgi) + if test "$libtool" = yes; then + "$@" "-Wp,-MDupdate,$tmpdepfile" + else + "$@" -MDupdate "$tmpdepfile" + fi + stat=$? + if test $stat -eq 0; then : + else + rm -f "$tmpdepfile" + exit $stat + fi + rm -f "$depfile" + + if test -f "$tmpdepfile"; then # yes, the sourcefile depend on other files + echo "$object : \\" > "$depfile" + + # Clip off the initial element (the dependent). Don't try to be + # clever and replace this with sed code, as IRIX sed won't handle + # lines with more than a fixed number of characters (4096 in + # IRIX 6.2 sed, 8192 in IRIX 6.5). We also remove comment lines; + # the IRIX cc adds comments like `#:fec' to the end of the + # dependency line. + tr ' ' ' +' < "$tmpdepfile" \ + | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' | \ + tr ' +' ' ' >> $depfile + echo >> $depfile + + # The second pass generates a dummy entry for each header file. + tr ' ' ' +' < "$tmpdepfile" \ + | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' -e 's/$/:/' \ + >> $depfile + else + # The sourcefile does not contain any dependencies, so just + # store a dummy comment line, to avoid errors with the Makefile + # "include basename.Plo" scheme. + echo "#dummy" > "$depfile" + fi + rm -f "$tmpdepfile" + ;; + +aix) + # The C for AIX Compiler uses -M and outputs the dependencies + # in a .u file. In older versions, this file always lives in the + # current directory. Also, the AIX compiler puts `$object:' at the + # start of each line; $object doesn't have directory information. + # Version 6 uses the directory in both cases. + stripped=`echo "$object" | sed 's/\(.*\)\..*$/\1/'` + tmpdepfile="$stripped.u" + if test "$libtool" = yes; then + "$@" -Wc,-M + else + "$@" -M + fi + stat=$? + + if test -f "$tmpdepfile"; then : + else + stripped=`echo "$stripped" | sed 's,^.*/,,'` + tmpdepfile="$stripped.u" + fi + + if test $stat -eq 0; then : + else + rm -f "$tmpdepfile" + exit $stat + fi + + if test -f "$tmpdepfile"; then + outname="$stripped.o" + # Each line is of the form `foo.o: dependent.h'. + # Do two passes, one to just change these to + # `$object: dependent.h' and one to simply `dependent.h:'. + sed -e "s,^$outname:,$object :," < "$tmpdepfile" > "$depfile" + sed -e "s,^$outname: \(.*\)$,\1:," < "$tmpdepfile" >> "$depfile" + else + # The sourcefile does not contain any dependencies, so just + # store a dummy comment line, to avoid errors with the Makefile + # "include basename.Plo" scheme. + echo "#dummy" > "$depfile" + fi + rm -f "$tmpdepfile" + ;; + +icc) + # Intel's C compiler understands `-MD -MF file'. However on + # icc -MD -MF foo.d -c -o sub/foo.o sub/foo.c + # ICC 7.0 will fill foo.d with something like + # foo.o: sub/foo.c + # foo.o: sub/foo.h + # which is wrong. We want: + # sub/foo.o: sub/foo.c + # sub/foo.o: sub/foo.h + # sub/foo.c: + # sub/foo.h: + # ICC 7.1 will output + # foo.o: sub/foo.c sub/foo.h + # and will wrap long lines using \ : + # foo.o: sub/foo.c ... \ + # sub/foo.h ... \ + # ... + + "$@" -MD -MF "$tmpdepfile" + stat=$? + if test $stat -eq 0; then : + else + rm -f "$tmpdepfile" + exit $stat + fi + rm -f "$depfile" + # Each line is of the form `foo.o: dependent.h', + # or `foo.o: dep1.h dep2.h \', or ` dep3.h dep4.h \'. + # Do two passes, one to just change these to + # `$object: dependent.h' and one to simply `dependent.h:'. + sed "s,^[^:]*:,$object :," < "$tmpdepfile" > "$depfile" + # Some versions of the HPUX 10.20 sed can't process this invocation + # correctly. Breaking it into two sed invocations is a workaround. + sed 's,^[^:]*: \(.*\)$,\1,;s/^\\$//;/^$/d;/:$/d' < "$tmpdepfile" | + sed -e 's/$/ :/' >> "$depfile" + rm -f "$tmpdepfile" + ;; + +hp2) + # The "hp" stanza above does not work with aCC (C++) and HP's ia64 + # compilers, which have integrated preprocessors. The correct option + # to use with these is +Maked; it writes dependencies to a file named + # 'foo.d', which lands next to the object file, wherever that + # happens to be. + # Much of this is similar to the tru64 case; see comments there. + dir=`echo "$object" | sed -e 's|/[^/]*$|/|'` + test "x$dir" = "x$object" && dir= + base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'` + if test "$libtool" = yes; then + tmpdepfile1=$dir$base.d + tmpdepfile2=$dir.libs/$base.d + "$@" -Wc,+Maked + else + tmpdepfile1=$dir$base.d + tmpdepfile2=$dir$base.d + "$@" +Maked + fi + stat=$? + if test $stat -eq 0; then : + else + rm -f "$tmpdepfile1" "$tmpdepfile2" + exit $stat + fi + + for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" + do + test -f "$tmpdepfile" && break + done + if test -f "$tmpdepfile"; then + sed -e "s,^.*\.[a-z]*:,$object:," "$tmpdepfile" > "$depfile" + # Add `dependent.h:' lines. + sed -ne '2,${; s/^ *//; s/ \\*$//; s/$/:/; p;}' "$tmpdepfile" >> "$depfile" + else + echo "#dummy" > "$depfile" + fi + rm -f "$tmpdepfile" "$tmpdepfile2" + ;; + +tru64) + # The Tru64 compiler uses -MD to generate dependencies as a side + # effect. `cc -MD -o foo.o ...' puts the dependencies into `foo.o.d'. + # At least on Alpha/Redhat 6.1, Compaq CCC V6.2-504 seems to put + # dependencies in `foo.d' instead, so we check for that too. + # Subdirectories are respected. + dir=`echo "$object" | sed -e 's|/[^/]*$|/|'` + test "x$dir" = "x$object" && dir= + base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'` + + if test "$libtool" = yes; then + # With Tru64 cc, shared objects can also be used to make a + # static library. This mechanism is used in libtool 1.4 series to + # handle both shared and static libraries in a single compilation. + # With libtool 1.4, dependencies were output in $dir.libs/$base.lo.d. + # + # With libtool 1.5 this exception was removed, and libtool now + # generates 2 separate objects for the 2 libraries. These two + # compilations output dependencies in $dir.libs/$base.o.d and + # in $dir$base.o.d. We have to check for both files, because + # one of the two compilations can be disabled. We should prefer + # $dir$base.o.d over $dir.libs/$base.o.d because the latter is + # automatically cleaned when .libs/ is deleted, while ignoring + # the former would cause a distcleancheck panic. + tmpdepfile1=$dir.libs/$base.lo.d # libtool 1.4 + tmpdepfile2=$dir$base.o.d # libtool 1.5 + tmpdepfile3=$dir.libs/$base.o.d # libtool 1.5 + tmpdepfile4=$dir.libs/$base.d # Compaq CCC V6.2-504 + "$@" -Wc,-MD + else + tmpdepfile1=$dir$base.o.d + tmpdepfile2=$dir$base.d + tmpdepfile3=$dir$base.d + tmpdepfile4=$dir$base.d + "$@" -MD + fi + + stat=$? + if test $stat -eq 0; then : + else + rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4" + exit $stat + fi + + for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4" + do + test -f "$tmpdepfile" && break + done + if test -f "$tmpdepfile"; then + sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile" + # That's a tab and a space in the []. + sed -e 's,^.*\.[a-z]*:[ ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile" + else + echo "#dummy" > "$depfile" + fi + rm -f "$tmpdepfile" + ;; + +#nosideeffect) + # This comment above is used by automake to tell side-effect + # dependency tracking mechanisms from slower ones. + +dashmstdout) + # Important note: in order to support this mode, a compiler *must* + # always write the preprocessed file to stdout, regardless of -o. + "$@" || exit $? + + # Remove the call to Libtool. + if test "$libtool" = yes; then + while test $1 != '--mode=compile'; do + shift + done + shift + fi + + # Remove `-o $object'. + IFS=" " + for arg + do + case $arg in + -o) + shift + ;; + $object) + shift + ;; + *) + set fnord "$@" "$arg" + shift # fnord + shift # $arg + ;; + esac + done + + test -z "$dashmflag" && dashmflag=-M + # Require at least two characters before searching for `:' + # in the target name. This is to cope with DOS-style filenames: + # a dependency such as `c:/foo/bar' could be seen as target `c' otherwise. + "$@" $dashmflag | + sed 's:^[ ]*[^: ][^:][^:]*\:[ ]*:'"$object"'\: :' > "$tmpdepfile" + rm -f "$depfile" + cat < "$tmpdepfile" > "$depfile" + tr ' ' ' +' < "$tmpdepfile" | \ +## Some versions of the HPUX 10.20 sed can't process this invocation +## correctly. Breaking it into two sed invocations is a workaround. + sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile" + rm -f "$tmpdepfile" + ;; + +dashXmstdout) + # This case only exists to satisfy depend.m4. It is never actually + # run, as this mode is specially recognized in the preamble. + exit 1 + ;; + +makedepend) + "$@" || exit $? + # Remove any Libtool call + if test "$libtool" = yes; then + while test $1 != '--mode=compile'; do + shift + done + shift + fi + # X makedepend + shift + cleared=no + for arg in "$@"; do + case $cleared in + no) + set ""; shift + cleared=yes ;; + esac + case "$arg" in + -D*|-I*) + set fnord "$@" "$arg"; shift ;; + # Strip any option that makedepend may not understand. Remove + # the object too, otherwise makedepend will parse it as a source file. + -*|$object) + ;; + *) + set fnord "$@" "$arg"; shift ;; + esac + done + obj_suffix="`echo $object | sed 's/^.*\././'`" + touch "$tmpdepfile" + ${MAKEDEPEND-makedepend} -o"$obj_suffix" -f"$tmpdepfile" "$@" + rm -f "$depfile" + cat < "$tmpdepfile" > "$depfile" + sed '1,2d' "$tmpdepfile" | tr ' ' ' +' | \ +## Some versions of the HPUX 10.20 sed can't process this invocation +## correctly. Breaking it into two sed invocations is a workaround. + sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile" + rm -f "$tmpdepfile" "$tmpdepfile".bak + ;; + +cpp) + # Important note: in order to support this mode, a compiler *must* + # always write the preprocessed file to stdout. + "$@" || exit $? + + # Remove the call to Libtool. + if test "$libtool" = yes; then + while test $1 != '--mode=compile'; do + shift + done + shift + fi + + # Remove `-o $object'. + IFS=" " + for arg + do + case $arg in + -o) + shift + ;; + $object) + shift + ;; + *) + set fnord "$@" "$arg" + shift # fnord + shift # $arg + ;; + esac + done + + "$@" -E | + sed -n -e '/^# [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \ + -e '/^#line [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' | + sed '$ s: \\$::' > "$tmpdepfile" + rm -f "$depfile" + echo "$object : \\" > "$depfile" + cat < "$tmpdepfile" >> "$depfile" + sed < "$tmpdepfile" '/^$/d;s/^ //;s/ \\$//;s/$/ :/' >> "$depfile" + rm -f "$tmpdepfile" + ;; + +msvisualcpp) + # Important note: in order to support this mode, a compiler *must* + # always write the preprocessed file to stdout, regardless of -o, + # because we must use -o when running libtool. + "$@" || exit $? + IFS=" " + for arg + do + case "$arg" in + "-Gm"|"/Gm"|"-Gi"|"/Gi"|"-ZI"|"/ZI") + set fnord "$@" + shift + shift + ;; + *) + set fnord "$@" "$arg" + shift + shift + ;; + esac + done + "$@" -E | + sed -n '/^#line [0-9][0-9]* "\([^"]*\)"/ s::echo "`cygpath -u \\"\1\\"`":p' | sort | uniq > "$tmpdepfile" + rm -f "$depfile" + echo "$object : \\" > "$depfile" + . "$tmpdepfile" | sed 's% %\\ %g' | sed -n '/^\(.*\)$/ s:: \1 \\:p' >> "$depfile" + echo " " >> "$depfile" + . "$tmpdepfile" | sed 's% %\\ %g' | sed -n '/^\(.*\)$/ s::\1\::p' >> "$depfile" + rm -f "$tmpdepfile" + ;; + +none) + exec "$@" + ;; + +*) + echo "Unknown depmode $depmode" 1>&2 + exit 1 + ;; +esac + +exit 0 + +# Local Variables: +# mode: shell-script +# sh-indentation: 2 +# eval: (add-hook 'write-file-hooks 'time-stamp) +# time-stamp-start: "scriptversion=" +# time-stamp-format: "%:y-%02m-%02d.%02H" +# time-stamp-end: "$" +# End: Added: python/trunk/Modules/_ctypes/libffi/doc/libffi.info ============================================================================== --- (empty file) +++ python/trunk/Modules/_ctypes/libffi/doc/libffi.info Mon Mar 15 01:02:36 2010 @@ -0,0 +1,533 @@ +This is ../libffi/doc/libffi.info, produced by makeinfo version 4.13 +from ../libffi/doc/libffi.texi. + +This manual is for Libffi, a portable foreign-function interface +library. + + Copyright (C) 2008 Red Hat, Inc. + + Permission is granted to copy, distribute and/or modify this + document under the terms of the GNU General Public License as + published by the Free Software Foundation; either version 2, or + (at your option) any later version. A copy of the license is + included in the section entitled "GNU General Public License". + + +INFO-DIR-SECTION Development +START-INFO-DIR-ENTRY +* libffi: (libffi). Portable foreign-function interface library. +END-INFO-DIR-ENTRY + + +File: libffi.info, Node: Top, Next: Introduction, Up: (dir) + +libffi +****** + +This manual is for Libffi, a portable foreign-function interface +library. + + Copyright (C) 2008 Red Hat, Inc. + + Permission is granted to copy, distribute and/or modify this + document under the terms of the GNU General Public License as + published by the Free Software Foundation; either version 2, or + (at your option) any later version. A copy of the license is + included in the section entitled "GNU General Public License". + + +* Menu: + +* Introduction:: What is libffi? +* Using libffi:: How to use libffi. +* Missing Features:: Things libffi can't do. +* Index:: Index. + + +File: libffi.info, Node: Introduction, Next: Using libffi, Prev: Top, Up: Top + +1 What is libffi? +***************** + +Compilers for high level languages generate code that follow certain +conventions. These conventions are necessary, in part, for separate +compilation to work. One such convention is the "calling convention". +The calling convention is a set of assumptions made by the compiler +about where function arguments will be found on entry to a function. A +calling convention also specifies where the return value for a function +is found. The calling convention is also sometimes called the "ABI" or +"Application Binary Interface". + + Some programs may not know at the time of compilation what arguments +are to be passed to a function. For instance, an interpreter may be +told at run-time about the number and types of arguments used to call a +given function. `Libffi' can be used in such programs to provide a +bridge from the interpreter program to compiled code. + + The `libffi' library provides a portable, high level programming +interface to various calling conventions. This allows a programmer to +call any function specified by a call interface description at run time. + + FFI stands for Foreign Function Interface. A foreign function +interface is the popular name for the interface that allows code +written in one language to call code written in another language. The +`libffi' library really only provides the lowest, machine dependent +layer of a fully featured foreign function interface. A layer must +exist above `libffi' that handles type conversions for values passed +between the two languages. + + +File: libffi.info, Node: Using libffi, Next: Missing Features, Prev: Introduction, Up: Top + +2 Using libffi +************** + +* Menu: + +* The Basics:: The basic libffi API. +* Simple Example:: A simple example. +* Types:: libffi type descriptions. +* Multiple ABIs:: Different passing styles on one platform. +* The Closure API:: Writing a generic function. + + +File: libffi.info, Node: The Basics, Next: Simple Example, Up: Using libffi + +2.1 The Basics +============== + +`Libffi' assumes that you have a pointer to the function you wish to +call and that you know the number and types of arguments to pass it, as +well as the return type of the function. + + The first thing you must do is create an `ffi_cif' object that +matches the signature of the function you wish to call. This is a +separate step because it is common to make multiple calls using a +single `ffi_cif'. The "cif" in `ffi_cif' stands for Call InterFace. +To prepare a call interface object, use the function `ffi_prep_cif'. + + -- Function: ffi_status ffi_prep_cif (ffi_cif *CIF, ffi_abi ABI, + unsigned int NARGS, ffi_type *RTYPE, ffi_type **ARGTYPES) + This initializes CIF according to the given parameters. + + ABI is the ABI to use; normally `FFI_DEFAULT_ABI' is what you + want. *note Multiple ABIs:: for more information. + + NARGS is the number of arguments that this function accepts. + `libffi' does not yet handle varargs functions; see *note Missing + Features:: for more information. + + RTYPE is a pointer to an `ffi_type' structure that describes the + return type of the function. *Note Types::. + + ARGTYPES is a vector of `ffi_type' pointers. ARGTYPES must have + NARGS elements. If NARGS is 0, this argument is ignored. + + `ffi_prep_cif' returns a `libffi' status code, of type + `ffi_status'. This will be either `FFI_OK' if everything worked + properly; `FFI_BAD_TYPEDEF' if one of the `ffi_type' objects is + incorrect; or `FFI_BAD_ABI' if the ABI parameter is invalid. + + To call a function using an initialized `ffi_cif', use the +`ffi_call' function: + + -- Function: void ffi_call (ffi_cif *CIF, void *FN, void *RVALUE, void + **AVALUES) + This calls the function FN according to the description given in + CIF. CIF must have already been prepared using `ffi_prep_cif'. + + RVALUE is a pointer to a chunk of memory that will hold the result + of the function call. This must be large enough to hold the + result and must be suitably aligned; it is the caller's + responsibility to ensure this. If CIF declares that the function + returns `void' (using `ffi_type_void'), then RVALUE is ignored. + If RVALUE is `NULL', then the return value is discarded. + + AVALUES is a vector of `void *' pointers that point to the memory + locations holding the argument values for a call. If CIF declares + that the function has no arguments (i.e., NARGS was 0), then + AVALUES is ignored. + + +File: libffi.info, Node: Simple Example, Next: Types, Prev: The Basics, Up: Using libffi + +2.2 Simple Example +================== + +Here is a trivial example that calls `puts' a few times. + + #include + #include + + int main() + { + ffi_cif cif; + ffi_type *args[1]; + void *values[1]; + char *s; + int rc; + + /* Initialize the argument info vectors */ + args[0] = &ffi_type_pointer; + values[0] = &s; + + /* Initialize the cif */ + if (ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 1, + &ffi_type_uint, args) == FFI_OK) + { + s = "Hello World!"; + ffi_call(&cif, puts, &rc, values); + /* rc now holds the result of the call to puts */ + + /* values holds a pointer to the function's arg, so to + call puts() again all we need to do is change the + value of s */ + s = "This is cool!"; + ffi_call(&cif, puts, &rc, values); + } + + return 0; + } + + +File: libffi.info, Node: Types, Next: Multiple ABIs, Prev: Simple Example, Up: Using libffi + +2.3 Types +========= + +* Menu: + +* Primitive Types:: Built-in types. +* Structures:: Structure types. +* Type Example:: Structure type example. + + +File: libffi.info, Node: Primitive Types, Next: Structures, Up: Types + +2.3.1 Primitive Types +--------------------- + +`Libffi' provides a number of built-in type descriptors that can be +used to describe argument and return types: + +`ffi_type_void' + The type `void'. This cannot be used for argument types, only for + return values. + +`ffi_type_uint8' + An unsigned, 8-bit integer type. + +`ffi_type_sint8' + A signed, 8-bit integer type. + +`ffi_type_uint16' + An unsigned, 16-bit integer type. + +`ffi_type_sint16' + A signed, 16-bit integer type. + +`ffi_type_uint32' + An unsigned, 32-bit integer type. + +`ffi_type_sint32' + A signed, 32-bit integer type. + +`ffi_type_uint64' + An unsigned, 64-bit integer type. + +`ffi_type_sint64' + A signed, 64-bit integer type. + +`ffi_type_float' + The C `float' type. + +`ffi_type_double' + The C `double' type. + +`ffi_type_uchar' + The C `unsigned char' type. + +`ffi_type_schar' + The C `signed char' type. (Note that there is not an exact + equivalent to the C `char' type in `libffi'; ordinarily you should + either use `ffi_type_schar' or `ffi_type_uchar' depending on + whether `char' is signed.) + +`ffi_type_ushort' + The C `unsigned short' type. + +`ffi_type_sshort' + The C `short' type. + +`ffi_type_uint' + The C `unsigned int' type. + +`ffi_type_sint' + The C `int' type. + +`ffi_type_ulong' + The C `unsigned long' type. + +`ffi_type_slong' + The C `long' type. + +`ffi_type_longdouble' + On platforms that have a C `long double' type, this is defined. + On other platforms, it is not. + +`ffi_type_pointer' + A generic `void *' pointer. You should use this for all pointers, + regardless of their real type. + + Each of these is of type `ffi_type', so you must take the address +when passing to `ffi_prep_cif'. + + +File: libffi.info, Node: Structures, Next: Type Example, Prev: Primitive Types, Up: Types + +2.3.2 Structures +---------------- + +Although `libffi' has no special support for unions or bit-fields, it +is perfectly happy passing structures back and forth. You must first +describe the structure to `libffi' by creating a new `ffi_type' object +for it. + + -- ffi_type: + The `ffi_type' has the following members: + `size_t size' + This is set by `libffi'; you should initialize it to zero. + + `unsigned short alignment' + This is set by `libffi'; you should initialize it to zero. + + `unsigned short type' + For a structure, this should be set to `FFI_TYPE_STRUCT'. + + `ffi_type **elements' + This is a `NULL'-terminated array of pointers to `ffi_type' + objects. There is one element per field of the struct. + + +File: libffi.info, Node: Type Example, Prev: Structures, Up: Types + +2.3.3 Type Example +------------------ + +The following example initializes a `ffi_type' object representing the +`tm' struct from Linux's `time.h'. + + Here is how the struct is defined: + + struct tm { + int tm_sec; + int tm_min; + int tm_hour; + int tm_mday; + int tm_mon; + int tm_year; + int tm_wday; + int tm_yday; + int tm_isdst; + /* Those are for future use. */ + long int __tm_gmtoff__; + __const char *__tm_zone__; + }; + + Here is the corresponding code to describe this struct to `libffi': + + { + ffi_type tm_type; + ffi_type *tm_type_elements[12]; + int i; + + tm_type.size = tm_type.alignment = 0; + tm_type.elements = &tm_type_elements; + + for (i = 0; i < 9; i++) + tm_type_elements[i] = &ffi_type_sint; + + tm_type_elements[9] = &ffi_type_slong; + tm_type_elements[10] = &ffi_type_pointer; + tm_type_elements[11] = NULL; + + /* tm_type can now be used to represent tm argument types and + return types for ffi_prep_cif() */ + } + + +File: libffi.info, Node: Multiple ABIs, Next: The Closure API, Prev: Types, Up: Using libffi + +2.4 Multiple ABIs +================= + +A given platform may provide multiple different ABIs at once. For +instance, the x86 platform has both `stdcall' and `fastcall' functions. + + `libffi' provides some support for this. However, this is +necessarily platform-specific. + + +File: libffi.info, Node: The Closure API, Prev: Multiple ABIs, Up: Using libffi + +2.5 The Closure API +=================== + +`libffi' also provides a way to write a generic function - a function +that can accept and decode any combination of arguments. This can be +useful when writing an interpreter, or to provide wrappers for +arbitrary functions. + + This facility is called the "closure API". Closures are not +supported on all platforms; you can check the `FFI_CLOSURES' define to +determine whether they are supported on the current platform. + + Because closures work by assembling a tiny function at runtime, they +require special allocation on platforms that have a non-executable +heap. Memory management for closures is handled by a pair of functions: + + -- Function: void *ffi_closure_alloc (size_t SIZE, void **CODE) + Allocate a chunk of memory holding SIZE bytes. This returns a + pointer to the writable address, and sets *CODE to the + corresponding executable address. + + SIZE should be sufficient to hold a `ffi_closure' object. + + -- Function: void ffi_closure_free (void *WRITABLE) + Free memory allocated using `ffi_closure_alloc'. The argument is + the writable address that was returned. + + Once you have allocated the memory for a closure, you must construct +a `ffi_cif' describing the function call. Finally you can prepare the +closure function: + + -- Function: ffi_status ffi_prep_closure_loc (ffi_closure *CLOSURE, + ffi_cif *CIF, void (*FUN) (ffi_cif *CIF, void *RET, void + **ARGS, void *USER_DATA), void *USER_DATA, void *CODELOC) + Prepare a closure function. + + CLOSURE is the address of a `ffi_closure' object; this is the + writable address returned by `ffi_closure_alloc'. + + CIF is the `ffi_cif' describing the function parameters. + + USER_DATA is an arbitrary datum that is passed, uninterpreted, to + your closure function. + + CODELOC is the executable address returned by `ffi_closure_alloc'. + + FUN is the function which will be called when the closure is + invoked. It is called with the arguments: + CIF + The `ffi_cif' passed to `ffi_prep_closure_loc'. + + RET + A pointer to the memory used for the function's return value. + FUN must fill this, unless the function is declared as + returning `void'. + + ARGS + A vector of pointers to memory holding the arguments to the + function. + + USER_DATA + The same USER_DATA that was passed to `ffi_prep_closure_loc'. + + `ffi_prep_closure_loc' will return `FFI_OK' if everything went ok, + and something else on error. + + After calling `ffi_prep_closure_loc', you can cast CODELOC to the + appropriate pointer-to-function type. + + You may see old code referring to `ffi_prep_closure'. This function +is deprecated, as it cannot handle the need for separate writable and +executable addresses. + + +File: libffi.info, Node: Missing Features, Next: Index, Prev: Using libffi, Up: Top + +3 Missing Features +****************** + +`libffi' is missing a few features. We welcome patches to add support +for these. + + * There is no support for calling varargs functions. This may work + on some platforms, depending on how the ABI is defined, but it is + not reliable. + + * There is no support for bit fields in structures. + + * The closure API is + + * The "raw" API is undocumented. + + +File: libffi.info, Node: Index, Prev: Missing Features, Up: Top + +Index +***** + +[index] +* Menu: + +* : Structures. (line 12) +* ABI: Introduction. (line 13) +* Application Binary Interface: Introduction. (line 13) +* calling convention: Introduction. (line 13) +* cif: The Basics. (line 14) +* closure API: The Closure API. (line 13) +* closures: The Closure API. (line 13) +* FFI: Introduction. (line 31) +* ffi_call: The Basics. (line 41) +* ffi_closure_alloca: The Closure API. (line 19) +* ffi_closure_free: The Closure API. (line 26) +* FFI_CLOSURES: The Closure API. (line 13) +* ffi_prep_cif: The Basics. (line 16) +* ffi_prep_closure_loc: The Closure API. (line 34) +* ffi_status <1>: The Closure API. (line 37) +* ffi_status: The Basics. (line 18) +* ffi_type: Structures. (line 11) +* ffi_type_double: Primitive Types. (line 41) +* ffi_type_float: Primitive Types. (line 38) +* ffi_type_longdouble: Primitive Types. (line 71) +* ffi_type_pointer: Primitive Types. (line 75) +* ffi_type_schar: Primitive Types. (line 47) +* ffi_type_sint: Primitive Types. (line 62) +* ffi_type_sint16: Primitive Types. (line 23) +* ffi_type_sint32: Primitive Types. (line 29) +* ffi_type_sint64: Primitive Types. (line 35) +* ffi_type_sint8: Primitive Types. (line 17) +* ffi_type_slong: Primitive Types. (line 68) +* ffi_type_sshort: Primitive Types. (line 56) +* ffi_type_uchar: Primitive Types. (line 44) +* ffi_type_uint: Primitive Types. (line 59) +* ffi_type_uint16: Primitive Types. (line 20) +* ffi_type_uint32: Primitive Types. (line 26) +* ffi_type_uint64: Primitive Types. (line 32) +* ffi_type_uint8: Primitive Types. (line 14) +* ffi_type_ulong: Primitive Types. (line 65) +* ffi_type_ushort: Primitive Types. (line 53) +* ffi_type_void: Primitive Types. (line 10) +* Foreign Function Interface: Introduction. (line 31) +* void <1>: The Closure API. (line 20) +* void: The Basics. (line 43) + + + +Tag Table: +Node: Top700 +Node: Introduction1436 +Node: Using libffi3072 +Node: The Basics3507 +Node: Simple Example6114 +Node: Types7141 +Node: Primitive Types7424 +Node: Structures9244 +Node: Type Example10104 +Node: Multiple ABIs11327 +Node: The Closure API11698 +Node: Missing Features14618 +Node: Index15111 + +End Tag Table Added: python/trunk/Modules/_ctypes/libffi/doc/libffi.texi ============================================================================== --- (empty file) +++ python/trunk/Modules/_ctypes/libffi/doc/libffi.texi Mon Mar 15 01:02:36 2010 @@ -0,0 +1,541 @@ +\input texinfo @c -*-texinfo-*- + at c %**start of header + at setfilename libffi.info + at settitle libffi + at setchapternewpage off + at c %**end of header + + at c Merge the standard indexes into a single one. + at syncodeindex fn cp + at syncodeindex vr cp + at syncodeindex ky cp + at syncodeindex pg cp + at syncodeindex tp cp + + at include version.texi + + at copying + +This manual is for Libffi, a portable foreign-function interface +library. + +Copyright @copyright{} 2008 Red Hat, Inc. + + at quotation +Permission is granted to copy, distribute and/or modify this document +under the terms of the GNU General Public License as published by the +Free Software Foundation; either version 2, or (at your option) any +later version. A copy of the license is included in the +section entitled ``GNU General Public License''. + + at end quotation + at end copying + + at dircategory Development + at direntry +* libffi: (libffi). Portable foreign-function interface library. + at end direntry + + at titlepage + at title Libffi + at page + at vskip 0pt plus 1filll + at insertcopying + at end titlepage + + + at ifnottex + at node Top + at top libffi + + at insertcopying + + at menu +* Introduction:: What is libffi? +* Using libffi:: How to use libffi. +* Missing Features:: Things libffi can't do. +* Index:: Index. + at end menu + + at end ifnottex + + + at node Introduction + at chapter What is libffi? + +Compilers for high level languages generate code that follow certain +conventions. These conventions are necessary, in part, for separate +compilation to work. One such convention is the @dfn{calling +convention}. The calling convention is a set of assumptions made by +the compiler about where function arguments will be found on entry to +a function. A calling convention also specifies where the return +value for a function is found. The calling convention is also +sometimes called the @dfn{ABI} or @dfn{Application Binary Interface}. + at cindex calling convention + at cindex ABI + at cindex Application Binary Interface + +Some programs may not know at the time of compilation what arguments +are to be passed to a function. For instance, an interpreter may be +told at run-time about the number and types of arguments used to call +a given function. @samp{Libffi} can be used in such programs to +provide a bridge from the interpreter program to compiled code. + +The @samp{libffi} library provides a portable, high level programming +interface to various calling conventions. This allows a programmer to +call any function specified by a call interface description at run +time. + + at acronym{FFI} stands for Foreign Function Interface. A foreign +function interface is the popular name for the interface that allows +code written in one language to call code written in another language. +The @samp{libffi} library really only provides the lowest, machine +dependent layer of a fully featured foreign function interface. A +layer must exist above @samp{libffi} that handles type conversions for +values passed between the two languages. + at cindex FFI + at cindex Foreign Function Interface + + + at node Using libffi + at chapter Using libffi + + at menu +* The Basics:: The basic libffi API. +* Simple Example:: A simple example. +* Types:: libffi type descriptions. +* Multiple ABIs:: Different passing styles on one platform. +* The Closure API:: Writing a generic function. + at end menu + + + at node The Basics + at section The Basics + + at samp{Libffi} assumes that you have a pointer to the function you wish +to call and that you know the number and types of arguments to pass +it, as well as the return type of the function. + +The first thing you must do is create an @code{ffi_cif} object that +matches the signature of the function you wish to call. This is a +separate step because it is common to make multiple calls using a +single @code{ffi_cif}. The @dfn{cif} in @code{ffi_cif} stands for +Call InterFace. To prepare a call interface object, use the function + at code{ffi_prep_cif}. + at cindex cif + + at findex ffi_prep_cif + at defun ffi_status ffi_prep_cif (ffi_cif *@var{cif}, ffi_abi @var{abi}, unsigned int @var{nargs}, ffi_type *@var{rtype}, ffi_type **@var{argtypes}) +This initializes @var{cif} according to the given parameters. + + at var{abi} is the ABI to use; normally @code{FFI_DEFAULT_ABI} is what +you want. @ref{Multiple ABIs} for more information. + + at var{nargs} is the number of arguments that this function accepts. + at samp{libffi} does not yet handle varargs functions; see @ref{Missing +Features} for more information. + + at var{rtype} is a pointer to an @code{ffi_type} structure that +describes the return type of the function. @xref{Types}. + + at var{argtypes} is a vector of @code{ffi_type} pointers. + at var{argtypes} must have @var{nargs} elements. If @var{nargs} is 0, +this argument is ignored. + + at code{ffi_prep_cif} returns a @code{libffi} status code, of type + at code{ffi_status}. This will be either @code{FFI_OK} if everything +worked properly; @code{FFI_BAD_TYPEDEF} if one of the @code{ffi_type} +objects is incorrect; or @code{FFI_BAD_ABI} if the @var{abi} parameter +is invalid. + at end defun + + +To call a function using an initialized @code{ffi_cif}, use the + at code{ffi_call} function: + + at findex ffi_call + at defun void ffi_call (ffi_cif *@var{cif}, void *@var{fn}, void *@var{rvalue}, void **@var{avalues}) +This calls the function @var{fn} according to the description given in + at var{cif}. @var{cif} must have already been prepared using + at code{ffi_prep_cif}. + + at var{rvalue} is a pointer to a chunk of memory that will hold the +result of the function call. This must be large enough to hold the +result and must be suitably aligned; it is the caller's responsibility +to ensure this. If @var{cif} declares that the function returns + at code{void} (using @code{ffi_type_void}), then @var{rvalue} is +ignored. If @var{rvalue} is @samp{NULL}, then the return value is +discarded. + + at var{avalues} is a vector of @code{void *} pointers that point to the +memory locations holding the argument values for a call. If @var{cif} +declares that the function has no arguments (i.e., @var{nargs} was 0), +then @var{avalues} is ignored. + at end defun + + + at node Simple Example + at section Simple Example + +Here is a trivial example that calls @code{puts} a few times. + + at example +#include +#include + +int main() +@{ + ffi_cif cif; + ffi_type *args[1]; + void *values[1]; + char *s; + int rc; + + /* Initialize the argument info vectors */ + args[0] = &ffi_type_pointer; + values[0] = &s; + + /* Initialize the cif */ + if (ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 1, + &ffi_type_uint, args) == FFI_OK) + @{ + s = "Hello World!"; + ffi_call(&cif, puts, &rc, values); + /* rc now holds the result of the call to puts */ + + /* values holds a pointer to the function's arg, so to + call puts() again all we need to do is change the + value of s */ + s = "This is cool!"; + ffi_call(&cif, puts, &rc, values); + @} + + return 0; +@} + at end example + + + at node Types + at section Types + + at menu +* Primitive Types:: Built-in types. +* Structures:: Structure types. +* Type Example:: Structure type example. + at end menu + + at node Primitive Types + at subsection Primitive Types + + at code{Libffi} provides a number of built-in type descriptors that can +be used to describe argument and return types: + + at table @code + at item ffi_type_void + at tindex ffi_type_void +The type @code{void}. This cannot be used for argument types, only +for return values. + + at item ffi_type_uint8 + at tindex ffi_type_uint8 +An unsigned, 8-bit integer type. + + at item ffi_type_sint8 + at tindex ffi_type_sint8 +A signed, 8-bit integer type. + + at item ffi_type_uint16 + at tindex ffi_type_uint16 +An unsigned, 16-bit integer type. + + at item ffi_type_sint16 + at tindex ffi_type_sint16 +A signed, 16-bit integer type. + + at item ffi_type_uint32 + at tindex ffi_type_uint32 +An unsigned, 32-bit integer type. + + at item ffi_type_sint32 + at tindex ffi_type_sint32 +A signed, 32-bit integer type. + + at item ffi_type_uint64 + at tindex ffi_type_uint64 +An unsigned, 64-bit integer type. + + at item ffi_type_sint64 + at tindex ffi_type_sint64 +A signed, 64-bit integer type. + + at item ffi_type_float + at tindex ffi_type_float +The C @code{float} type. + + at item ffi_type_double + at tindex ffi_type_double +The C @code{double} type. + + at item ffi_type_uchar + at tindex ffi_type_uchar +The C @code{unsigned char} type. + + at item ffi_type_schar + at tindex ffi_type_schar +The C @code{signed char} type. (Note that there is not an exact +equivalent to the C @code{char} type in @code{libffi}; ordinarily you +should either use @code{ffi_type_schar} or @code{ffi_type_uchar} +depending on whether @code{char} is signed.) + + at item ffi_type_ushort + at tindex ffi_type_ushort +The C @code{unsigned short} type. + + at item ffi_type_sshort + at tindex ffi_type_sshort +The C @code{short} type. + + at item ffi_type_uint + at tindex ffi_type_uint +The C @code{unsigned int} type. + + at item ffi_type_sint + at tindex ffi_type_sint +The C @code{int} type. + + at item ffi_type_ulong + at tindex ffi_type_ulong +The C @code{unsigned long} type. + + at item ffi_type_slong + at tindex ffi_type_slong +The C @code{long} type. + + at item ffi_type_longdouble + at tindex ffi_type_longdouble +On platforms that have a C @code{long double} type, this is defined. +On other platforms, it is not. + + at item ffi_type_pointer + at tindex ffi_type_pointer +A generic @code{void *} pointer. You should use this for all +pointers, regardless of their real type. + at end table + +Each of these is of type @code{ffi_type}, so you must take the address +when passing to @code{ffi_prep_cif}. + + + at node Structures + at subsection Structures + +Although @samp{libffi} has no special support for unions or +bit-fields, it is perfectly happy passing structures back and forth. +You must first describe the structure to @samp{libffi} by creating a +new @code{ffi_type} object for it. + + at tindex ffi_type + at deftp ffi_type +The @code{ffi_type} has the following members: + at table @code + at item size_t size +This is set by @code{libffi}; you should initialize it to zero. + + at item unsigned short alignment +This is set by @code{libffi}; you should initialize it to zero. + + at item unsigned short type +For a structure, this should be set to @code{FFI_TYPE_STRUCT}. + + at item ffi_type **elements +This is a @samp{NULL}-terminated array of pointers to @code{ffi_type} +objects. There is one element per field of the struct. + at end table + at end deftp + + + at node Type Example + at subsection Type Example + +The following example initializes a @code{ffi_type} object +representing the @code{tm} struct from Linux's @file{time.h}. + +Here is how the struct is defined: + + at example +struct tm @{ + int tm_sec; + int tm_min; + int tm_hour; + int tm_mday; + int tm_mon; + int tm_year; + int tm_wday; + int tm_yday; + int tm_isdst; + /* Those are for future use. */ + long int __tm_gmtoff__; + __const char *__tm_zone__; +@}; + at end example + +Here is the corresponding code to describe this struct to + at code{libffi}: + + at example + @{ + ffi_type tm_type; + ffi_type *tm_type_elements[12]; + int i; + + tm_type.size = tm_type.alignment = 0; + tm_type.elements = &tm_type_elements; + + for (i = 0; i < 9; i++) + tm_type_elements[i] = &ffi_type_sint; + + tm_type_elements[9] = &ffi_type_slong; + tm_type_elements[10] = &ffi_type_pointer; + tm_type_elements[11] = NULL; + + /* tm_type can now be used to represent tm argument types and + return types for ffi_prep_cif() */ + @} + at end example + + + at node Multiple ABIs + at section Multiple ABIs + +A given platform may provide multiple different ABIs at once. For +instance, the x86 platform has both @samp{stdcall} and @samp{fastcall} +functions. + + at code{libffi} provides some support for this. However, this is +necessarily platform-specific. + + at c FIXME: document the platforms + + at node The Closure API + at section The Closure API + + at code{libffi} also provides a way to write a generic function -- a +function that can accept and decode any combination of arguments. +This can be useful when writing an interpreter, or to provide wrappers +for arbitrary functions. + +This facility is called the @dfn{closure API}. Closures are not +supported on all platforms; you can check the @code{FFI_CLOSURES} +define to determine whether they are supported on the current +platform. + at cindex closures + at cindex closure API + at findex FFI_CLOSURES + +Because closures work by assembling a tiny function at runtime, they +require special allocation on platforms that have a non-executable +heap. Memory management for closures is handled by a pair of +functions: + + at findex ffi_closure_alloca + at defun void *ffi_closure_alloc (size_t @var{size}, void **@var{code}) +Allocate a chunk of memory holding @var{size} bytes. This returns a +pointer to the writable address, and sets *@var{code} to the +corresponding executable address. + + at var{size} should be sufficient to hold a @code{ffi_closure} object. + at end defun + + at findex ffi_closure_free + at defun void ffi_closure_free (void *@var{writable}) +Free memory allocated using @code{ffi_closure_alloc}. The argument is +the writable address that was returned. + at end defun + + +Once you have allocated the memory for a closure, you must construct a + at code{ffi_cif} describing the function call. Finally you can prepare +the closure function: + + at findex ffi_prep_closure_loc + at defun ffi_status ffi_prep_closure_loc (ffi_closure *@var{closure}, ffi_cif *@var{cif}, void (*@var{fun}) (ffi_cif *@var{cif}, void *@var{ret}, void **@var{args}, void *@var{user_data}), void *@var{user_data}, void *@var{codeloc}) +Prepare a closure function. + + at var{closure} is the address of a @code{ffi_closure} object; this is +the writable address returned by @code{ffi_closure_alloc}. + + at var{cif} is the @code{ffi_cif} describing the function parameters. + + at var{user_data} is an arbitrary datum that is passed, uninterpreted, +to your closure function. + + at var{codeloc} is the executable address returned by + at code{ffi_closure_alloc}. + + at var{fun} is the function which will be called when the closure is +invoked. It is called with the arguments: + at table @var + at item cif +The @code{ffi_cif} passed to @code{ffi_prep_closure_loc}. + + at item ret +A pointer to the memory used for the function's return value. + at var{fun} must fill this, unless the function is declared as returning + at code{void}. + at c FIXME: is this NULL for void-returning functions? + + at item args +A vector of pointers to memory holding the arguments to the function. + + at item user_data +The same @var{user_data} that was passed to + at code{ffi_prep_closure_loc}. + at end table + + at code{ffi_prep_closure_loc} will return @code{FFI_OK} if everything +went ok, and something else on error. + at c FIXME: what? + +After calling @code{ffi_prep_closure_loc}, you can cast @var{codeloc} +to the appropriate pointer-to-function type. + at end defun + + at c FIXME: example + +You may see old code referring to @code{ffi_prep_closure}. This +function is deprecated, as it cannot handle the need for separate +writable and executable addresses. + + + at node Missing Features + at chapter Missing Features + + at code{libffi} is missing a few features. We welcome patches to add +support for these. + + at itemize @bullet + at item +There is no support for calling varargs functions. This may work on +some platforms, depending on how the ABI is defined, but it is not +reliable. + + at item +There is no support for bit fields in structures. + + at item +The closure API is + + at item +The ``raw'' API is undocumented. + at c argument promotion? + at c unions? + at c anything else? + at end itemize + + + at node Index + at unnumbered Index + + at printindex cp + + at bye Added: python/trunk/Modules/_ctypes/libffi/doc/stamp-vti ============================================================================== --- (empty file) +++ python/trunk/Modules/_ctypes/libffi/doc/stamp-vti Mon Mar 15 01:02:36 2010 @@ -0,0 +1,4 @@ + at set UPDATED 29 December 2009 + at set UPDATED-MONTH December 2009 + at set EDITION 3.0.9 + at set VERSION 3.0.9 Added: python/trunk/Modules/_ctypes/libffi/doc/version.texi ============================================================================== --- (empty file) +++ python/trunk/Modules/_ctypes/libffi/doc/version.texi Mon Mar 15 01:02:36 2010 @@ -0,0 +1,4 @@ + at set UPDATED 29 December 2009 + at set UPDATED-MONTH December 2009 + at set EDITION 3.0.9 + at set VERSION 3.0.9 Modified: python/trunk/Modules/_ctypes/libffi/fficonfig.h.in ============================================================================== --- python/trunk/Modules/_ctypes/libffi/fficonfig.h.in (original) +++ python/trunk/Modules/_ctypes/libffi/fficonfig.h.in Mon Mar 15 01:02:36 2010 @@ -1,5 +1,8 @@ /* fficonfig.h.in. Generated from configure.ac by autoheader. */ +/* Define if building universal (internal helper macro) */ +#undef AC_APPLE_UNIVERSAL_BUILD + /* 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. */ @@ -14,6 +17,9 @@ /* Define this if you want extra debugging. */ #undef FFI_DEBUG +/* Cannot use malloc on this target, so, we revert to alternative means */ +#undef FFI_MMAP_EXEC_WRIT + /* Define this is you do not want support for the raw API. */ #undef FFI_NO_RAW_API @@ -37,6 +43,9 @@ */ #undef HAVE_AS_SPARC_UA_PCREL +/* Define if your assembler supports PC relative relocs. */ +#undef HAVE_AS_X86_PCREL + /* Define to 1 if you have the header file. */ #undef HAVE_DLFCN_H @@ -94,6 +103,10 @@ /* Define to 1 if you have the header file. */ #undef HAVE_UNISTD_H +/* Define to the sub-directory in which libtool stores uninstalled libraries. + */ +#undef LT_OBJDIR + /* Define to 1 if your C compiler doesn't accept -c and -o together. */ #undef NO_MINUS_C_MINUS_O @@ -139,9 +152,17 @@ /* Version number of package */ #undef VERSION -/* Define to 1 if your processor stores words with the most significant byte - first (like Motorola and SPARC, unlike Intel and VAX). */ -#undef WORDS_BIGENDIAN +/* Define WORDS_BIGENDIAN to 1 if your processor stores words with the most + significant byte first (like Motorola and SPARC, unlike Intel). */ +#if defined AC_APPLE_UNIVERSAL_BUILD +# if defined __BIG_ENDIAN__ +# define WORDS_BIGENDIAN 1 +# endif +#else +# ifndef WORDS_BIGENDIAN +# undef WORDS_BIGENDIAN +# endif +#endif #ifdef HAVE_HIDDEN_VISIBILITY_ATTRIBUTE Modified: python/trunk/Modules/_ctypes/libffi/include/Makefile.am ============================================================================== --- python/trunk/Modules/_ctypes/libffi/include/Makefile.am (original) +++ python/trunk/Modules/_ctypes/libffi/include/Makefile.am Mon Mar 15 01:02:36 2010 @@ -6,4 +6,4 @@ EXTRA_DIST=ffi.h.in ffi_common.h includesdir = $(libdir)/@PACKAGE_NAME at -@PACKAGE_VERSION@/include -nodist_includes_HEADERS = ffi.h ffitarget.h +nodist_includes_HEADERS = ffi.h ffitarget.h Modified: python/trunk/Modules/_ctypes/libffi/include/Makefile.in ============================================================================== --- python/trunk/Modules/_ctypes/libffi/include/Makefile.in (original) +++ python/trunk/Modules/_ctypes/libffi/include/Makefile.in Mon Mar 15 01:02:36 2010 @@ -1,8 +1,9 @@ -# Makefile.in generated by automake 1.10 from Makefile.am. +# Makefile.in generated by automake 1.11 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, -# 2003, 2004, 2005, 2006 Free Software Foundation, Inc. +# 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, +# Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. @@ -16,8 +17,9 @@ VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ -pkglibdir = $(libdir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c @@ -41,9 +43,10 @@ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) -mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs +mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/fficonfig.h CONFIG_CLEAN_FILES = ffi.h ffitarget.h +CONFIG_CLEAN_VPATH_FILES = SOURCES = DIST_SOURCES = am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; @@ -51,9 +54,23 @@ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; -am__strip_dir = `echo $$p | sed -e 's|^.*/||'`; +am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; +am__install_max = 40 +am__nobase_strip_setup = \ + srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` +am__nobase_strip = \ + for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" +am__nobase_list = $(am__nobase_strip_setup); \ + for p in $$list; do echo "$$p $$p"; done | \ + sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ + $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ + if (++n[$$2] == $(am__install_max)) \ + { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ + END { for (dir in files) print dir, files[dir] }' +am__base_list = \ + sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ + sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__installdirs = "$(DESTDIR)$(includesdir)" -nodist_includesHEADERS_INSTALL = $(INSTALL_HEADER) HEADERS = $(nodist_includes_HEADERS) ETAGS = etags CTAGS = ctags @@ -75,21 +92,17 @@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ -CXX = @CXX@ -CXXCPP = @CXXCPP@ -CXXDEPMODE = @CXXDEPMODE@ -CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ -ECHO = @ECHO@ +DSYMUTIL = @DSYMUTIL@ +DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ -F77 = @F77@ -FFLAGS = @FFLAGS@ +FGREP = @FGREP@ GREP = @GREP@ HAVE_LONG_DOUBLE = @HAVE_LONG_DOUBLE@ INSTALL = @INSTALL@ @@ -97,16 +110,23 @@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +LD = @LD@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ +LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ +NM = @NM@ +NMEDIT = @NMEDIT@ +OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ +OTOOL = @OTOOL@ +OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ @@ -127,8 +147,7 @@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ -ac_ct_CXX = @ac_ct_CXX@ -ac_ct_F77 = @ac_ct_F77@ +ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ @@ -159,6 +178,7 @@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ +lt_ECHO = @lt_ECHO@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ @@ -177,13 +197,14 @@ target_vendor = @target_vendor@ toolexecdir = @toolexecdir@ toolexeclibdir = @toolexeclibdir@ +top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ AUTOMAKE_OPTIONS = foreign DISTCLEANFILES = ffitarget.h EXTRA_DIST = ffi.h.in ffi_common.h includesdir = $(libdir)/@PACKAGE_NAME at -@PACKAGE_VERSION@/include -nodist_includes_HEADERS = ffi.h ffitarget.h +nodist_includes_HEADERS = ffi.h ffitarget.h all: all-am .SUFFIXES: @@ -191,14 +212,14 @@ @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \ - && exit 0; \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ - echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign include/Makefile'; \ - cd $(top_srcdir) && \ - $(AUTOMAKE) --foreign include/Makefile + echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign include/Makefile'; \ + $(am__cd) $(top_srcdir) && \ + $(AUTOMAKE) --foreign include/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ @@ -216,6 +237,7 @@ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(am__aclocal_m4_deps): ffi.h: $(top_builddir)/config.status $(srcdir)/ffi.h.in cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ @@ -227,65 +249,72 @@ install-nodist_includesHEADERS: $(nodist_includes_HEADERS) @$(NORMAL_INSTALL) test -z "$(includesdir)" || $(MKDIR_P) "$(DESTDIR)$(includesdir)" - @list='$(nodist_includes_HEADERS)'; for p in $$list; do \ + @list='$(nodist_includes_HEADERS)'; test -n "$(includesdir)" || list=; \ + for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ - f=$(am__strip_dir) \ - echo " $(nodist_includesHEADERS_INSTALL) '$$d$$p' '$(DESTDIR)$(includesdir)/$$f'"; \ - $(nodist_includesHEADERS_INSTALL) "$$d$$p" "$(DESTDIR)$(includesdir)/$$f"; \ + echo "$$d$$p"; \ + done | $(am__base_list) | \ + while read files; do \ + echo " $(INSTALL_HEADER) $$files '$(DESTDIR)$(includesdir)'"; \ + $(INSTALL_HEADER) $$files "$(DESTDIR)$(includesdir)" || exit $$?; \ done uninstall-nodist_includesHEADERS: @$(NORMAL_UNINSTALL) - @list='$(nodist_includes_HEADERS)'; for p in $$list; do \ - f=$(am__strip_dir) \ - echo " rm -f '$(DESTDIR)$(includesdir)/$$f'"; \ - rm -f "$(DESTDIR)$(includesdir)/$$f"; \ - done + @list='$(nodist_includes_HEADERS)'; test -n "$(includesdir)" || list=; \ + files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ + test -n "$$files" || exit 0; \ + echo " ( cd '$(DESTDIR)$(includesdir)' && rm -f" $$files ")"; \ + cd "$(DESTDIR)$(includesdir)" && rm -f $$files ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ - $(AWK) ' { files[$$0] = 1; } \ - END { for (i in files) print i; }'`; \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ mkid -fID $$unique tags: TAGS TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) - tags=; \ + set x; \ here=`pwd`; \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ - $(AWK) ' { files[$$0] = 1; } \ - END { for (i in files) print i; }'`; \ - if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + shift; \ + if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ - $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ - $$tags $$unique; \ + if test $$# -gt 0; then \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + "$$@" $$unique; \ + else \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + $$unique; \ + fi; \ fi ctags: CTAGS CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) - tags=; \ - here=`pwd`; \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ - $(AWK) ' { files[$$0] = 1; } \ - END { for (i in files) print i; }'`; \ - test -z "$(CTAGS_ARGS)$$tags$$unique" \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ - $$tags $$unique + $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ - && cd $(top_srcdir) \ - && gtags -i $(GTAGS_ARGS) $$here + && $(am__cd) $(top_srcdir) \ + && gtags -i $(GTAGS_ARGS) "$$here" distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags @@ -306,13 +335,17 @@ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d "$(distdir)/$$file"; then \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ - cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ + cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ - cp -pR $$d/$$file $(distdir)$$dir || exit 1; \ + cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ - test -f $(distdir)/$$file \ - || cp -p $$d/$$file $(distdir)/$$file \ + test -f "$(distdir)/$$file" \ + || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done @@ -343,6 +376,7 @@ distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) -test -z "$(DISTCLEANFILES)" || rm -f $(DISTCLEANFILES) maintainer-clean-generic: @@ -362,6 +396,8 @@ html: html-am +html-am: + info: info-am info-am: @@ -370,18 +406,28 @@ install-dvi: install-dvi-am +install-dvi-am: + install-exec-am: install-html: install-html-am +install-html-am: + install-info: install-info-am +install-info-am: + install-man: install-pdf: install-pdf-am +install-pdf-am: + install-ps: install-ps-am +install-ps-am: + installcheck-am: maintainer-clean: maintainer-clean-am @@ -417,6 +463,7 @@ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ tags uninstall uninstall-am uninstall-nodist_includesHEADERS + # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: Modified: python/trunk/Modules/_ctypes/libffi/include/ffi.h.in ============================================================================== --- python/trunk/Modules/_ctypes/libffi/include/ffi.h.in (original) +++ python/trunk/Modules/_ctypes/libffi/include/ffi.h.in Mon Mar 15 01:02:36 2010 @@ -57,9 +57,7 @@ #endif /* Specify which architecture libffi is configured for. */ -#ifndef @TARGET@ #define @TARGET@ -#endif /* ---- System configuration information --------------------------------- */ @@ -67,6 +65,10 @@ #ifndef LIBFFI_ASM +#ifdef _MSC_VER +#define __attribute__(X) +#endif + #include #include @@ -254,7 +256,11 @@ ffi_cif *cif; void (*fun)(ffi_cif*,void*,void**,void*); void *user_data; +#ifdef __GNUC__ } ffi_closure __attribute__((aligned (8))); +#else +} ffi_closure; +#endif void *ffi_closure_alloc (size_t size, void **code); void ffi_closure_free (void *); Modified: python/trunk/Modules/_ctypes/libffi/include/ffi_common.h ============================================================================== --- python/trunk/Modules/_ctypes/libffi/include/ffi_common.h (original) +++ python/trunk/Modules/_ctypes/libffi/include/ffi_common.h Mon Mar 15 01:02:36 2010 @@ -18,7 +18,10 @@ /* Do not move this. Some versions of AIX are very picky about where this is positioned. */ #ifdef __GNUC__ +/* mingw64 defines this already in malloc.h. */ +#ifndef alloca # define alloca __builtin_alloca +#endif # define MAYBE_UNUSED __attribute__((__unused__)) #else # define MAYBE_UNUSED @@ -29,7 +32,11 @@ #pragma alloca # else # ifndef alloca /* predefined by HP cc +Olibcalls */ +# ifdef _MSC_VER +# define alloca _alloca +# else char *alloca (); +# endif # endif # endif # endif @@ -77,6 +84,22 @@ } extended_cif; /* Terse sized type definitions. */ +#if defined(_MSC_VER) || defined(__sgi) +typedef unsigned char UINT8; +typedef signed char SINT8; +typedef unsigned short UINT16; +typedef signed short SINT16; +typedef unsigned int UINT32; +typedef signed int SINT32; +# ifdef _MSC_VER +typedef unsigned __int64 UINT64; +typedef signed __int64 SINT64; +# else +# include +typedef uint64_t UINT64; +typedef int64_t SINT64; +# endif +#else typedef unsigned int UINT8 __attribute__((__mode__(__QI__))); typedef signed int SINT8 __attribute__((__mode__(__QI__))); typedef unsigned int UINT16 __attribute__((__mode__(__HI__))); @@ -85,6 +108,7 @@ typedef signed int SINT32 __attribute__((__mode__(__SI__))); typedef unsigned int UINT64 __attribute__((__mode__(__DI__))); typedef signed int SINT64 __attribute__((__mode__(__DI__))); +#endif typedef float FLOAT32; Added: python/trunk/Modules/_ctypes/libffi/libffi.pc.in ============================================================================== --- (empty file) +++ python/trunk/Modules/_ctypes/libffi/libffi.pc.in Mon Mar 15 01:02:36 2010 @@ -0,0 +1,10 @@ +prefix=@prefix@ +exec_prefix=@exec_prefix@ +libdir=@libdir@ +includedir=${libdir}/@PACKAGE_NAME at -@PACKAGE_VERSION@/include + +Name: @PACKAGE_NAME@ +Description: Library supporting Foreign Function Interfaces +Version: @PACKAGE_VERSION@ +Libs: -L${libdir} -lffi +Cflags: -I${includedir} Added: python/trunk/Modules/_ctypes/libffi/libtool-version ============================================================================== --- (empty file) +++ python/trunk/Modules/_ctypes/libffi/libtool-version Mon Mar 15 01:02:36 2010 @@ -0,0 +1,29 @@ +# This file is used to maintain libtool version info for libffi. See +# the libtool manual to understand the meaning of the fields. This is +# a separate file so that version updates don't involve re-running +# automake. +# +# Here are a set of rules to help you update your library version +# information: +# +# 1. Start with version information of `0:0:0' for each libtool library. +# +# 2. Update the version information only immediately before a public +# release of your software. More frequent updates are unnecessary, +# and only guarantee that the current interface number gets larger +# faster. +# +# 3. If the library source code has changed at all since the last +# update, then increment revision (`c:r:a' becomes `c:r+1:a'). +# +# 4. If any interfaces have been added, removed, or changed since the +# last update, increment current, and set revision to 0. +# +# 5. If any interfaces have been added since the last public release, +# then increment age. +# +# 6. If any interfaces have been removed since the last public +# release, then set age to 0. +# +# CURRENT:REVISION:AGE +5:10:0 Added: python/trunk/Modules/_ctypes/libffi/ltmain.sh ============================================================================== --- (empty file) +++ python/trunk/Modules/_ctypes/libffi/ltmain.sh Mon Mar 15 01:02:36 2010 @@ -0,0 +1,8406 @@ +# Generated from ltmain.m4sh. + +# ltmain.sh (GNU libtool) 2.2.6 +# Written by Gordon Matzigkeit , 1996 + +# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005, 2006, 2007 2008 Free Software Foundation, Inc. +# This is free software; see the source for copying conditions. There is NO +# warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + +# GNU Libtool is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# As a special exception to the GNU General Public License, +# if you distribute this file as part of a program or library that +# is built using GNU Libtool, you may include this file under the +# same distribution terms that you use for the rest of that program. +# +# GNU Libtool is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with GNU Libtool; see the file COPYING. If not, a copy +# can be downloaded from http://www.gnu.org/licenses/gpl.html, +# or obtained by writing to the Free Software Foundation, Inc., +# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + +# Usage: $progname [OPTION]... [MODE-ARG]... +# +# Provide generalized library-building support services. +# +# --config show all configuration variables +# --debug enable verbose shell tracing +# -n, --dry-run display commands without modifying any files +# --features display basic configuration information and exit +# --mode=MODE use operation mode MODE +# --preserve-dup-deps don't remove duplicate dependency libraries +# --quiet, --silent don't print informational messages +# --tag=TAG use configuration variables from tag TAG +# -v, --verbose print informational messages (default) +# --version print version information +# -h, --help print short or long help message +# +# MODE must be one of the following: +# +# clean remove files from the build directory +# compile compile a source file into a libtool object +# execute automatically set library path, then run a program +# finish complete the installation of libtool libraries +# install install libraries or executables +# link create a library or an executable +# uninstall remove libraries from an installed directory +# +# MODE-ARGS vary depending on the MODE. +# Try `$progname --help --mode=MODE' for a more detailed description of MODE. +# +# When reporting a bug, please describe a test case to reproduce it and +# include the following information: +# +# host-triplet: $host +# shell: $SHELL +# compiler: $LTCC +# compiler flags: $LTCFLAGS +# linker: $LD (gnu? $with_gnu_ld) +# $progname: (GNU libtool) 2.2.6 +# automake: $automake_version +# autoconf: $autoconf_version +# +# Report bugs to . + +PROGRAM=ltmain.sh +PACKAGE=libtool +VERSION=2.2.6 +TIMESTAMP="" +package_revision=1.3012 + +# Be Bourne compatible +if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then + emulate sh + NULLCMD=: + # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which + # is contrary to our usage. Disable this feature. + alias -g '${1+"$@"}'='"$@"' + setopt NO_GLOB_SUBST +else + case `(set -o) 2>/dev/null` in *posix*) set -o posix;; esac +fi +BIN_SH=xpg4; export BIN_SH # for Tru64 +DUALCASE=1; export DUALCASE # for MKS sh + +# NLS nuisances: We save the old values to restore during execute mode. +# Only set LANG and LC_ALL to C if already set. +# These must not be set unconditionally because not all systems understand +# e.g. LANG=C (notably SCO). +lt_user_locale= +lt_safe_locale= +for lt_var in LANG LANGUAGE LC_ALL LC_CTYPE LC_COLLATE LC_MESSAGES +do + eval "if test \"\${$lt_var+set}\" = set; then + save_$lt_var=\$$lt_var + $lt_var=C + export $lt_var + lt_user_locale=\"$lt_var=\\\$save_\$lt_var; \$lt_user_locale\" + lt_safe_locale=\"$lt_var=C; \$lt_safe_locale\" + fi" +done + +$lt_unset CDPATH + + + + + +: ${CP="cp -f"} +: ${ECHO="echo"} +: ${EGREP="/bin/grep -E"} +: ${FGREP="/bin/grep -F"} +: ${GREP="/bin/grep"} +: ${LN_S="ln -s"} +: ${MAKE="make"} +: ${MKDIR="mkdir"} +: ${MV="mv -f"} +: ${RM="rm -f"} +: ${SED="/bin/sed"} +: ${SHELL="${CONFIG_SHELL-/bin/sh}"} +: ${Xsed="$SED -e 1s/^X//"} + +# Global variables: +EXIT_SUCCESS=0 +EXIT_FAILURE=1 +EXIT_MISMATCH=63 # $? = 63 is used to indicate version mismatch to missing. +EXIT_SKIP=77 # $? = 77 is used to indicate a skipped test to automake. + +exit_status=$EXIT_SUCCESS + +# Make sure IFS has a sensible default +lt_nl=' +' +IFS=" $lt_nl" + +dirname="s,/[^/]*$,," +basename="s,^.*/,," + +# func_dirname_and_basename file append nondir_replacement +# perform func_basename and func_dirname in a single function +# call: +# dirname: Compute the dirname of FILE. If nonempty, +# add APPEND to the result, otherwise set result +# to NONDIR_REPLACEMENT. +# value returned in "$func_dirname_result" +# basename: Compute filename of FILE. +# value retuned in "$func_basename_result" +# Implementation must be kept synchronized with func_dirname +# and func_basename. For efficiency, we do not delegate to +# those functions but instead duplicate the functionality here. +func_dirname_and_basename () +{ + # Extract subdirectory from the argument. + func_dirname_result=`$ECHO "X${1}" | $Xsed -e "$dirname"` + if test "X$func_dirname_result" = "X${1}"; then + func_dirname_result="${3}" + else + func_dirname_result="$func_dirname_result${2}" + fi + func_basename_result=`$ECHO "X${1}" | $Xsed -e "$basename"` +} + +# Generated shell functions inserted here. + +# Work around backward compatibility issue on IRIX 6.5. On IRIX 6.4+, sh +# is ksh but when the shell is invoked as "sh" and the current value of +# the _XPG environment variable is not equal to 1 (one), the special +# positional parameter $0, within a function call, is the name of the +# function. +progpath="$0" + +# The name of this program: +# In the unlikely event $progname began with a '-', it would play havoc with +# func_echo (imagine progname=-n), so we prepend ./ in that case: +func_dirname_and_basename "$progpath" +progname=$func_basename_result +case $progname in + -*) progname=./$progname ;; +esac + +# Make sure we have an absolute path for reexecution: +case $progpath in + [\\/]*|[A-Za-z]:\\*) ;; + *[\\/]*) + progdir=$func_dirname_result + progdir=`cd "$progdir" && pwd` + progpath="$progdir/$progname" + ;; + *) + save_IFS="$IFS" + IFS=: + for progdir in $PATH; do + IFS="$save_IFS" + test -x "$progdir/$progname" && break + done + IFS="$save_IFS" + test -n "$progdir" || progdir=`pwd` + progpath="$progdir/$progname" + ;; +esac + +# Sed substitution that helps us do robust quoting. It backslashifies +# metacharacters that are still active within double-quoted strings. +Xsed="${SED}"' -e 1s/^X//' +sed_quote_subst='s/\([`"$\\]\)/\\\1/g' + +# Same as above, but do not quote variable references. +double_quote_subst='s/\(["`\\]\)/\\\1/g' + +# Re-`\' parameter expansions in output of double_quote_subst that were +# `\'-ed in input to the same. If an odd number of `\' preceded a '$' +# in input to double_quote_subst, that '$' was protected from expansion. +# Since each input `\' is now two `\'s, look for any number of runs of +# four `\'s followed by two `\'s and then a '$'. `\' that '$'. +bs='\\' +bs2='\\\\' +bs4='\\\\\\\\' +dollar='\$' +sed_double_backslash="\ + s/$bs4/&\\ +/g + s/^$bs2$dollar/$bs&/ + s/\\([^$bs]\\)$bs2$dollar/\\1$bs2$bs$dollar/g + s/\n//g" + +# Standard options: +opt_dry_run=false +opt_help=false +opt_quiet=false +opt_verbose=false +opt_warning=: + +# func_echo arg... +# Echo program name prefixed message, along with the current mode +# name if it has been set yet. +func_echo () +{ + $ECHO "$progname${mode+: }$mode: $*" +} + +# func_verbose arg... +# Echo program name prefixed message in verbose mode only. +func_verbose () +{ + $opt_verbose && func_echo ${1+"$@"} + + # A bug in bash halts the script if the last line of a function + # fails when set -e is in force, so we need another command to + # work around that: + : +} + +# func_error arg... +# Echo program name prefixed message to standard error. +func_error () +{ + $ECHO "$progname${mode+: }$mode: "${1+"$@"} 1>&2 +} + +# func_warning arg... +# Echo program name prefixed warning message to standard error. +func_warning () +{ + $opt_warning && $ECHO "$progname${mode+: }$mode: warning: "${1+"$@"} 1>&2 + + # bash bug again: + : +} + +# func_fatal_error arg... +# Echo program name prefixed message to standard error, and exit. +func_fatal_error () +{ + func_error ${1+"$@"} + exit $EXIT_FAILURE +} + +# func_fatal_help arg... +# Echo program name prefixed message to standard error, followed by +# a help hint, and exit. +func_fatal_help () +{ + func_error ${1+"$@"} + func_fatal_error "$help" +} +help="Try \`$progname --help' for more information." ## default + + +# func_grep expression filename +# Check whether EXPRESSION matches any line of FILENAME, without output. +func_grep () +{ + $GREP "$1" "$2" >/dev/null 2>&1 +} + + +# func_mkdir_p directory-path +# Make sure the entire path to DIRECTORY-PATH is available. +func_mkdir_p () +{ + my_directory_path="$1" + my_dir_list= + + if test -n "$my_directory_path" && test "$opt_dry_run" != ":"; then + + # Protect directory names starting with `-' + case $my_directory_path in + -*) my_directory_path="./$my_directory_path" ;; + esac + + # While some portion of DIR does not yet exist... + while test ! -d "$my_directory_path"; do + # ...make a list in topmost first order. Use a colon delimited + # list incase some portion of path contains whitespace. + my_dir_list="$my_directory_path:$my_dir_list" + + # If the last portion added has no slash in it, the list is done + case $my_directory_path in */*) ;; *) break ;; esac + + # ...otherwise throw away the child directory and loop + my_directory_path=`$ECHO "X$my_directory_path" | $Xsed -e "$dirname"` + done + my_dir_list=`$ECHO "X$my_dir_list" | $Xsed -e 's,:*$,,'` + + save_mkdir_p_IFS="$IFS"; IFS=':' + for my_dir in $my_dir_list; do + IFS="$save_mkdir_p_IFS" + # mkdir can fail with a `File exist' error if two processes + # try to create one of the directories concurrently. Don't + # stop in that case! + $MKDIR "$my_dir" 2>/dev/null || : + done + IFS="$save_mkdir_p_IFS" + + # Bail out if we (or some other process) failed to create a directory. + test -d "$my_directory_path" || \ + func_fatal_error "Failed to create \`$1'" + fi +} + + +# func_mktempdir [string] +# Make a temporary directory that won't clash with other running +# libtool processes, and avoids race conditions if possible. If +# given, STRING is the basename for that directory. +func_mktempdir () +{ + my_template="${TMPDIR-/tmp}/${1-$progname}" + + if test "$opt_dry_run" = ":"; then + # Return a directory name, but don't create it in dry-run mode + my_tmpdir="${my_template}-$$" + else + + # If mktemp works, use that first and foremost + my_tmpdir=`mktemp -d "${my_template}-XXXXXXXX" 2>/dev/null` + + if test ! -d "$my_tmpdir"; then + # Failing that, at least try and use $RANDOM to avoid a race + my_tmpdir="${my_template}-${RANDOM-0}$$" + + save_mktempdir_umask=`umask` + umask 0077 + $MKDIR "$my_tmpdir" + umask $save_mktempdir_umask + fi + + # If we're not in dry-run mode, bomb out on failure + test -d "$my_tmpdir" || \ + func_fatal_error "cannot create temporary directory \`$my_tmpdir'" + fi + + $ECHO "X$my_tmpdir" | $Xsed +} + + +# func_quote_for_eval arg +# Aesthetically quote ARG to be evaled later. +# This function returns two values: FUNC_QUOTE_FOR_EVAL_RESULT +# is double-quoted, suitable for a subsequent eval, whereas +# FUNC_QUOTE_FOR_EVAL_UNQUOTED_RESULT has merely all characters +# which are still active within double quotes backslashified. +func_quote_for_eval () +{ + case $1 in + *[\\\`\"\$]*) + func_quote_for_eval_unquoted_result=`$ECHO "X$1" | $Xsed -e "$sed_quote_subst"` ;; + *) + func_quote_for_eval_unquoted_result="$1" ;; + esac + + case $func_quote_for_eval_unquoted_result in + # Double-quote args containing shell metacharacters to delay + # word splitting, command substitution and and variable + # expansion for a subsequent eval. + # Many Bourne shells cannot handle close brackets correctly + # in scan sets, so we specify it separately. + *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") + func_quote_for_eval_result="\"$func_quote_for_eval_unquoted_result\"" + ;; + *) + func_quote_for_eval_result="$func_quote_for_eval_unquoted_result" + esac +} + + +# func_quote_for_expand arg +# Aesthetically quote ARG to be evaled later; same as above, +# but do not quote variable references. +func_quote_for_expand () +{ + case $1 in + *[\\\`\"]*) + my_arg=`$ECHO "X$1" | $Xsed \ + -e "$double_quote_subst" -e "$sed_double_backslash"` ;; + *) + my_arg="$1" ;; + esac + + case $my_arg in + # Double-quote args containing shell metacharacters to delay + # word splitting and command substitution for a subsequent eval. + # Many Bourne shells cannot handle close brackets correctly + # in scan sets, so we specify it separately. + *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") + my_arg="\"$my_arg\"" + ;; + esac + + func_quote_for_expand_result="$my_arg" +} + + +# func_show_eval cmd [fail_exp] +# Unless opt_silent is true, then output CMD. Then, if opt_dryrun is +# not true, evaluate CMD. If the evaluation of CMD fails, and FAIL_EXP +# is given, then evaluate it. +func_show_eval () +{ + my_cmd="$1" + my_fail_exp="${2-:}" + + ${opt_silent-false} || { + func_quote_for_expand "$my_cmd" + eval "func_echo $func_quote_for_expand_result" + } + + if ${opt_dry_run-false}; then :; else + eval "$my_cmd" + my_status=$? + if test "$my_status" -eq 0; then :; else + eval "(exit $my_status); $my_fail_exp" + fi + fi +} + + +# func_show_eval_locale cmd [fail_exp] +# Unless opt_silent is true, then output CMD. Then, if opt_dryrun is +# not true, evaluate CMD. If the evaluation of CMD fails, and FAIL_EXP +# is given, then evaluate it. Use the saved locale for evaluation. +func_show_eval_locale () +{ + my_cmd="$1" + my_fail_exp="${2-:}" + + ${opt_silent-false} || { + func_quote_for_expand "$my_cmd" + eval "func_echo $func_quote_for_expand_result" + } + + if ${opt_dry_run-false}; then :; else + eval "$lt_user_locale + $my_cmd" + my_status=$? + eval "$lt_safe_locale" + if test "$my_status" -eq 0; then :; else + eval "(exit $my_status); $my_fail_exp" + fi + fi +} + + + + + +# func_version +# Echo version message to standard output and exit. +func_version () +{ + $SED -n '/^# '$PROGRAM' (GNU /,/# warranty; / { + s/^# // + s/^# *$// + s/\((C)\)[ 0-9,-]*\( [1-9][0-9]*\)/\1\2/ + p + }' < "$progpath" + exit $? +} + +# func_usage +# Echo short help message to standard output and exit. +func_usage () +{ + $SED -n '/^# Usage:/,/# -h/ { + s/^# // + s/^# *$// + s/\$progname/'$progname'/ + p + }' < "$progpath" + $ECHO + $ECHO "run \`$progname --help | more' for full usage" + exit $? +} + +# func_help +# Echo long help message to standard output and exit. +func_help () +{ + $SED -n '/^# Usage:/,/# Report bugs to/ { + s/^# // + s/^# *$// + s*\$progname*'$progname'* + s*\$host*'"$host"'* + s*\$SHELL*'"$SHELL"'* + s*\$LTCC*'"$LTCC"'* + s*\$LTCFLAGS*'"$LTCFLAGS"'* + s*\$LD*'"$LD"'* + s/\$with_gnu_ld/'"$with_gnu_ld"'/ + s/\$automake_version/'"`(automake --version) 2>/dev/null |$SED 1q`"'/ + s/\$autoconf_version/'"`(autoconf --version) 2>/dev/null |$SED 1q`"'/ + p + }' < "$progpath" + exit $? +} + +# func_missing_arg argname +# Echo program name prefixed message to standard error and set global +# exit_cmd. +func_missing_arg () +{ + func_error "missing argument for $1" + exit_cmd=exit +} + +exit_cmd=: + + + + + +# Check that we have a working $ECHO. +if test "X$1" = X--no-reexec; then + # Discard the --no-reexec flag, and continue. + shift +elif test "X$1" = X--fallback-echo; then + # Avoid inline document here, it may be left over + : +elif test "X`{ $ECHO '\t'; } 2>/dev/null`" = 'X\t'; then + # Yippee, $ECHO works! + : +else + # Restart under the correct shell, and then maybe $ECHO will work. + exec $SHELL "$progpath" --no-reexec ${1+"$@"} +fi + +if test "X$1" = X--fallback-echo; then + # used as fallback echo + shift + cat </dev/null 2>&1; then + taglist="$taglist $tagname" + + # Evaluate the configuration. Be careful to quote the path + # and the sed script, to avoid splitting on whitespace, but + # also don't use non-portable quotes within backquotes within + # quotes we have to do it in 2 steps: + extractedcf=`$SED -n -e "$sed_extractcf" < "$progpath"` + eval "$extractedcf" + else + func_error "ignoring unknown tag $tagname" + fi + ;; + esac +} + +# Parse options once, thoroughly. This comes as soon as possible in +# the script to make things like `libtool --version' happen quickly. +{ + + # Shorthand for --mode=foo, only valid as the first argument + case $1 in + clean|clea|cle|cl) + shift; set dummy --mode clean ${1+"$@"}; shift + ;; + compile|compil|compi|comp|com|co|c) + shift; set dummy --mode compile ${1+"$@"}; shift + ;; + execute|execut|execu|exec|exe|ex|e) + shift; set dummy --mode execute ${1+"$@"}; shift + ;; + finish|finis|fini|fin|fi|f) + shift; set dummy --mode finish ${1+"$@"}; shift + ;; + install|instal|insta|inst|ins|in|i) + shift; set dummy --mode install ${1+"$@"}; shift + ;; + link|lin|li|l) + shift; set dummy --mode link ${1+"$@"}; shift + ;; + uninstall|uninstal|uninsta|uninst|unins|unin|uni|un|u) + shift; set dummy --mode uninstall ${1+"$@"}; shift + ;; + esac + + # Parse non-mode specific arguments: + while test "$#" -gt 0; do + opt="$1" + shift + + case $opt in + --config) func_config ;; + + --debug) preserve_args="$preserve_args $opt" + func_echo "enabling shell trace mode" + opt_debug='set -x' + $opt_debug + ;; + + -dlopen) test "$#" -eq 0 && func_missing_arg "$opt" && break + execute_dlfiles="$execute_dlfiles $1" + shift + ;; + + --dry-run | -n) opt_dry_run=: ;; + --features) func_features ;; + --finish) mode="finish" ;; + + --mode) test "$#" -eq 0 && func_missing_arg "$opt" && break + case $1 in + # Valid mode arguments: + clean) ;; + compile) ;; + execute) ;; + finish) ;; + install) ;; + link) ;; + relink) ;; + uninstall) ;; + + # Catch anything else as an error + *) func_error "invalid argument for $opt" + exit_cmd=exit + break + ;; + esac + + mode="$1" + shift + ;; + + --preserve-dup-deps) + opt_duplicate_deps=: ;; + + --quiet|--silent) preserve_args="$preserve_args $opt" + opt_silent=: + ;; + + --verbose| -v) preserve_args="$preserve_args $opt" + opt_silent=false + ;; + + --tag) test "$#" -eq 0 && func_missing_arg "$opt" && break + preserve_args="$preserve_args $opt $1" + func_enable_tag "$1" # tagname is set here + shift + ;; + + # Separate optargs to long options: + -dlopen=*|--mode=*|--tag=*) + func_opt_split "$opt" + set dummy "$func_opt_split_opt" "$func_opt_split_arg" ${1+"$@"} + shift + ;; + + -\?|-h) func_usage ;; + --help) opt_help=: ;; + --version) func_version ;; + + -*) func_fatal_help "unrecognized option \`$opt'" ;; + + *) nonopt="$opt" + break + ;; + esac + done + + + case $host in + *cygwin* | *mingw* | *pw32* | *cegcc*) + # don't eliminate duplications in $postdeps and $predeps + opt_duplicate_compiler_generated_deps=: + ;; + *) + opt_duplicate_compiler_generated_deps=$opt_duplicate_deps + ;; + esac + + # Having warned about all mis-specified options, bail out if + # anything was wrong. + $exit_cmd $EXIT_FAILURE +} + +# func_check_version_match +# Ensure that we are using m4 macros, and libtool script from the same +# release of libtool. +func_check_version_match () +{ + if test "$package_revision" != "$macro_revision"; then + if test "$VERSION" != "$macro_version"; then + if test -z "$macro_version"; then + cat >&2 <<_LT_EOF +$progname: Version mismatch error. This is $PACKAGE $VERSION, but the +$progname: definition of this LT_INIT comes from an older release. +$progname: You should recreate aclocal.m4 with macros from $PACKAGE $VERSION +$progname: and run autoconf again. +_LT_EOF + else + cat >&2 <<_LT_EOF +$progname: Version mismatch error. This is $PACKAGE $VERSION, but the +$progname: definition of this LT_INIT comes from $PACKAGE $macro_version. +$progname: You should recreate aclocal.m4 with macros from $PACKAGE $VERSION +$progname: and run autoconf again. +_LT_EOF + fi + else + cat >&2 <<_LT_EOF +$progname: Version mismatch error. This is $PACKAGE $VERSION, revision $package_revision, +$progname: but the definition of this LT_INIT comes from revision $macro_revision. +$progname: You should recreate aclocal.m4 with macros from revision $package_revision +$progname: of $PACKAGE $VERSION and run autoconf again. +_LT_EOF + fi + + exit $EXIT_MISMATCH + fi +} + + +## ----------- ## +## Main. ## +## ----------- ## + +$opt_help || { + # Sanity checks first: + func_check_version_match + + if test "$build_libtool_libs" != yes && test "$build_old_libs" != yes; then + func_fatal_configuration "not configured to build any kind of library" + fi + + test -z "$mode" && func_fatal_error "error: you must specify a MODE." + + + # Darwin sucks + eval std_shrext=\"$shrext_cmds\" + + + # Only execute mode is allowed to have -dlopen flags. + if test -n "$execute_dlfiles" && test "$mode" != execute; then + func_error "unrecognized option \`-dlopen'" + $ECHO "$help" 1>&2 + exit $EXIT_FAILURE + fi + + # Change the help message to a mode-specific one. + generic_help="$help" + help="Try \`$progname --help --mode=$mode' for more information." +} + + +# func_lalib_p file +# True iff FILE is a libtool `.la' library or `.lo' object file. +# This function is only a basic sanity check; it will hardly flush out +# determined imposters. +func_lalib_p () +{ + test -f "$1" && + $SED -e 4q "$1" 2>/dev/null \ + | $GREP "^# Generated by .*$PACKAGE" > /dev/null 2>&1 +} + +# func_lalib_unsafe_p file +# True iff FILE is a libtool `.la' library or `.lo' object file. +# This function implements the same check as func_lalib_p without +# resorting to external programs. To this end, it redirects stdin and +# closes it afterwards, without saving the original file descriptor. +# As a safety measure, use it only where a negative result would be +# fatal anyway. Works if `file' does not exist. +func_lalib_unsafe_p () +{ + lalib_p=no + if test -f "$1" && test -r "$1" && exec 5<&0 <"$1"; then + for lalib_p_l in 1 2 3 4 + do + read lalib_p_line + case "$lalib_p_line" in + \#\ Generated\ by\ *$PACKAGE* ) lalib_p=yes; break;; + esac + done + exec 0<&5 5<&- + fi + test "$lalib_p" = yes +} + +# func_ltwrapper_script_p file +# True iff FILE is a libtool wrapper script +# This function is only a basic sanity check; it will hardly flush out +# determined imposters. +func_ltwrapper_script_p () +{ + func_lalib_p "$1" +} + +# func_ltwrapper_executable_p file +# True iff FILE is a libtool wrapper executable +# This function is only a basic sanity check; it will hardly flush out +# determined imposters. +func_ltwrapper_executable_p () +{ + func_ltwrapper_exec_suffix= + case $1 in + *.exe) ;; + *) func_ltwrapper_exec_suffix=.exe ;; + esac + $GREP "$magic_exe" "$1$func_ltwrapper_exec_suffix" >/dev/null 2>&1 +} + +# func_ltwrapper_scriptname file +# Assumes file is an ltwrapper_executable +# uses $file to determine the appropriate filename for a +# temporary ltwrapper_script. +func_ltwrapper_scriptname () +{ + func_ltwrapper_scriptname_result="" + if func_ltwrapper_executable_p "$1"; then + func_dirname_and_basename "$1" "" "." + func_stripname '' '.exe' "$func_basename_result" + func_ltwrapper_scriptname_result="$func_dirname_result/$objdir/${func_stripname_result}_ltshwrapper" + fi +} + +# func_ltwrapper_p file +# True iff FILE is a libtool wrapper script or wrapper executable +# This function is only a basic sanity check; it will hardly flush out +# determined imposters. +func_ltwrapper_p () +{ + func_ltwrapper_script_p "$1" || func_ltwrapper_executable_p "$1" +} + + +# func_execute_cmds commands fail_cmd +# Execute tilde-delimited COMMANDS. +# If FAIL_CMD is given, eval that upon failure. +# FAIL_CMD may read-access the current command in variable CMD! +func_execute_cmds () +{ + $opt_debug + save_ifs=$IFS; IFS='~' + for cmd in $1; do + IFS=$save_ifs + eval cmd=\"$cmd\" + func_show_eval "$cmd" "${2-:}" + done + IFS=$save_ifs +} + + +# func_source file +# Source FILE, adding directory component if necessary. +# Note that it is not necessary on cygwin/mingw to append a dot to +# FILE even if both FILE and FILE.exe exist: automatic-append-.exe +# behavior happens only for exec(3), not for open(2)! Also, sourcing +# `FILE.' does not work on cygwin managed mounts. +func_source () +{ + $opt_debug + case $1 in + */* | *\\*) . "$1" ;; + *) . "./$1" ;; + esac +} + + +# func_infer_tag arg +# Infer tagged configuration to use if any are available and +# if one wasn't chosen via the "--tag" command line option. +# Only attempt this if the compiler in the base compile +# command doesn't match the default compiler. +# arg is usually of the form 'gcc ...' +func_infer_tag () +{ + $opt_debug + if test -n "$available_tags" && test -z "$tagname"; then + CC_quoted= + for arg in $CC; do + func_quote_for_eval "$arg" + CC_quoted="$CC_quoted $func_quote_for_eval_result" + done + case $@ in + # Blanks in the command may have been stripped by the calling shell, + # but not from the CC environment variable when configure was run. + " $CC "* | "$CC "* | " `$ECHO $CC` "* | "`$ECHO $CC` "* | " $CC_quoted"* | "$CC_quoted "* | " `$ECHO $CC_quoted` "* | "`$ECHO $CC_quoted` "*) ;; + # Blanks at the start of $base_compile will cause this to fail + # if we don't check for them as well. + *) + for z in $available_tags; do + if $GREP "^# ### BEGIN LIBTOOL TAG CONFIG: $z$" < "$progpath" > /dev/null; then + # Evaluate the configuration. + eval "`${SED} -n -e '/^# ### BEGIN LIBTOOL TAG CONFIG: '$z'$/,/^# ### END LIBTOOL TAG CONFIG: '$z'$/p' < $progpath`" + CC_quoted= + for arg in $CC; do + # Double-quote args containing other shell metacharacters. + func_quote_for_eval "$arg" + CC_quoted="$CC_quoted $func_quote_for_eval_result" + done + case "$@ " in + " $CC "* | "$CC "* | " `$ECHO $CC` "* | "`$ECHO $CC` "* | " $CC_quoted"* | "$CC_quoted "* | " `$ECHO $CC_quoted` "* | "`$ECHO $CC_quoted` "*) + # The compiler in the base compile command matches + # the one in the tagged configuration. + # Assume this is the tagged configuration we want. + tagname=$z + break + ;; + esac + fi + done + # If $tagname still isn't set, then no tagged configuration + # was found and let the user know that the "--tag" command + # line option must be used. + if test -z "$tagname"; then + func_echo "unable to infer tagged configuration" + func_fatal_error "specify a tag with \`--tag'" +# else +# func_verbose "using $tagname tagged configuration" + fi + ;; + esac + fi +} + + + +# func_write_libtool_object output_name pic_name nonpic_name +# Create a libtool object file (analogous to a ".la" file), +# but don't create it if we're doing a dry run. +func_write_libtool_object () +{ + write_libobj=${1} + if test "$build_libtool_libs" = yes; then + write_lobj=\'${2}\' + else + write_lobj=none + fi + + if test "$build_old_libs" = yes; then + write_oldobj=\'${3}\' + else + write_oldobj=none + fi + + $opt_dry_run || { + cat >${write_libobj}T <?"'"'"' &()|`$[]' \ + && func_warning "libobj name \`$libobj' may not contain shell special characters." + func_dirname_and_basename "$obj" "/" "" + objname="$func_basename_result" + xdir="$func_dirname_result" + lobj=${xdir}$objdir/$objname + + test -z "$base_compile" && \ + func_fatal_help "you must specify a compilation command" + + # Delete any leftover library objects. + if test "$build_old_libs" = yes; then + removelist="$obj $lobj $libobj ${libobj}T" + else + removelist="$lobj $libobj ${libobj}T" + fi + + # On Cygwin there's no "real" PIC flag so we must build both object types + case $host_os in + cygwin* | mingw* | pw32* | os2* | cegcc*) + pic_mode=default + ;; + esac + if test "$pic_mode" = no && test "$deplibs_check_method" != pass_all; then + # non-PIC code in shared libraries is not supported + pic_mode=default + fi + + # Calculate the filename of the output object if compiler does + # not support -o with -c + if test "$compiler_c_o" = no; then + output_obj=`$ECHO "X$srcfile" | $Xsed -e 's%^.*/%%' -e 's%\.[^.]*$%%'`.${objext} + lockfile="$output_obj.lock" + else + output_obj= + need_locks=no + lockfile= + fi + + # Lock this critical section if it is needed + # We use this script file to make the link, it avoids creating a new file + if test "$need_locks" = yes; then + until $opt_dry_run || ln "$progpath" "$lockfile" 2>/dev/null; do + func_echo "Waiting for $lockfile to be removed" + sleep 2 + done + elif test "$need_locks" = warn; then + if test -f "$lockfile"; then + $ECHO "\ +*** ERROR, $lockfile exists and contains: +`cat $lockfile 2>/dev/null` + +This indicates that another process is trying to use the same +temporary object file, and libtool could not work around it because +your compiler does not support \`-c' and \`-o' together. If you +repeat this compilation, it may succeed, by chance, but you had better +avoid parallel builds (make -j) in this platform, or get a better +compiler." + + $opt_dry_run || $RM $removelist + exit $EXIT_FAILURE + fi + removelist="$removelist $output_obj" + $ECHO "$srcfile" > "$lockfile" + fi + + $opt_dry_run || $RM $removelist + removelist="$removelist $lockfile" + trap '$opt_dry_run || $RM $removelist; exit $EXIT_FAILURE' 1 2 15 + + if test -n "$fix_srcfile_path"; then + eval srcfile=\"$fix_srcfile_path\" + fi + func_quote_for_eval "$srcfile" + qsrcfile=$func_quote_for_eval_result + + # Only build a PIC object if we are building libtool libraries. + if test "$build_libtool_libs" = yes; then + # Without this assignment, base_compile gets emptied. + fbsd_hideous_sh_bug=$base_compile + + if test "$pic_mode" != no; then + command="$base_compile $qsrcfile $pic_flag" + else + # Don't build PIC code + command="$base_compile $qsrcfile" + fi + + func_mkdir_p "$xdir$objdir" + + if test -z "$output_obj"; then + # Place PIC objects in $objdir + command="$command -o $lobj" + fi + + func_show_eval_locale "$command" \ + 'test -n "$output_obj" && $RM $removelist; exit $EXIT_FAILURE' + + if test "$need_locks" = warn && + test "X`cat $lockfile 2>/dev/null`" != "X$srcfile"; then + $ECHO "\ +*** ERROR, $lockfile contains: +`cat $lockfile 2>/dev/null` + +but it should contain: +$srcfile + +This indicates that another process is trying to use the same +temporary object file, and libtool could not work around it because +your compiler does not support \`-c' and \`-o' together. If you +repeat this compilation, it may succeed, by chance, but you had better +avoid parallel builds (make -j) in this platform, or get a better +compiler." + + $opt_dry_run || $RM $removelist + exit $EXIT_FAILURE + fi + + # Just move the object if needed, then go on to compile the next one + if test -n "$output_obj" && test "X$output_obj" != "X$lobj"; then + func_show_eval '$MV "$output_obj" "$lobj"' \ + 'error=$?; $opt_dry_run || $RM $removelist; exit $error' + fi + + # Allow error messages only from the first compilation. + if test "$suppress_opt" = yes; then + suppress_output=' >/dev/null 2>&1' + fi + fi + + # Only build a position-dependent object if we build old libraries. + if test "$build_old_libs" = yes; then + if test "$pic_mode" != yes; then + # Don't build PIC code + command="$base_compile $qsrcfile$pie_flag" + else + command="$base_compile $qsrcfile $pic_flag" + fi + if test "$compiler_c_o" = yes; then + command="$command -o $obj" + fi + + # Suppress compiler output if we already did a PIC compilation. + command="$command$suppress_output" + func_show_eval_locale "$command" \ + '$opt_dry_run || $RM $removelist; exit $EXIT_FAILURE' + + if test "$need_locks" = warn && + test "X`cat $lockfile 2>/dev/null`" != "X$srcfile"; then + $ECHO "\ +*** ERROR, $lockfile contains: +`cat $lockfile 2>/dev/null` + +but it should contain: +$srcfile + +This indicates that another process is trying to use the same +temporary object file, and libtool could not work around it because +your compiler does not support \`-c' and \`-o' together. If you +repeat this compilation, it may succeed, by chance, but you had better +avoid parallel builds (make -j) in this platform, or get a better +compiler." + + $opt_dry_run || $RM $removelist + exit $EXIT_FAILURE + fi + + # Just move the object if needed + if test -n "$output_obj" && test "X$output_obj" != "X$obj"; then + func_show_eval '$MV "$output_obj" "$obj"' \ + 'error=$?; $opt_dry_run || $RM $removelist; exit $error' + fi + fi + + $opt_dry_run || { + func_write_libtool_object "$libobj" "$objdir/$objname" "$objname" + + # Unlock the critical section if it was locked + if test "$need_locks" != no; then + removelist=$lockfile + $RM "$lockfile" + fi + } + + exit $EXIT_SUCCESS +} + +$opt_help || { +test "$mode" = compile && func_mode_compile ${1+"$@"} +} + +func_mode_help () +{ + # We need to display help for each of the modes. + case $mode in + "") + # Generic help is extracted from the usage comments + # at the start of this file. + func_help + ;; + + clean) + $ECHO \ +"Usage: $progname [OPTION]... --mode=clean RM [RM-OPTION]... FILE... + +Remove files from the build directory. + +RM is the name of the program to use to delete files associated with each FILE +(typically \`/bin/rm'). RM-OPTIONS are options (such as \`-f') to be passed +to RM. + +If FILE is a libtool library, object or program, all the files associated +with it are deleted. Otherwise, only FILE itself is deleted using RM." + ;; + + compile) + $ECHO \ +"Usage: $progname [OPTION]... --mode=compile COMPILE-COMMAND... SOURCEFILE + +Compile a source file into a libtool library object. + +This mode accepts the following additional options: + + -o OUTPUT-FILE set the output file name to OUTPUT-FILE + -no-suppress do not suppress compiler output for multiple passes + -prefer-pic try to building PIC objects only + -prefer-non-pic try to building non-PIC objects only + -shared do not build a \`.o' file suitable for static linking + -static only build a \`.o' file suitable for static linking + +COMPILE-COMMAND is a command to be used in creating a \`standard' object file +from the given SOURCEFILE. + +The output file name is determined by removing the directory component from +SOURCEFILE, then substituting the C source code suffix \`.c' with the +library object suffix, \`.lo'." + ;; + + execute) + $ECHO \ +"Usage: $progname [OPTION]... --mode=execute COMMAND [ARGS]... + +Automatically set library path, then run a program. + +This mode accepts the following additional options: + + -dlopen FILE add the directory containing FILE to the library path + +This mode sets the library path environment variable according to \`-dlopen' +flags. + +If any of the ARGS are libtool executable wrappers, then they are translated +into their corresponding uninstalled binary, and any of their required library +directories are added to the library path. + +Then, COMMAND is executed, with ARGS as arguments." + ;; + + finish) + $ECHO \ +"Usage: $progname [OPTION]... --mode=finish [LIBDIR]... + +Complete the installation of libtool libraries. + +Each LIBDIR is a directory that contains libtool libraries. + +The commands that this mode executes may require superuser privileges. Use +the \`--dry-run' option if you just want to see what would be executed." + ;; + + install) + $ECHO \ +"Usage: $progname [OPTION]... --mode=install INSTALL-COMMAND... + +Install executables or libraries. + +INSTALL-COMMAND is the installation command. The first component should be +either the \`install' or \`cp' program. + +The following components of INSTALL-COMMAND are treated specially: + + -inst-prefix PREFIX-DIR Use PREFIX-DIR as a staging area for installation + +The rest of the components are interpreted as arguments to that command (only +BSD-compatible install options are recognized)." + ;; + + link) + $ECHO \ +"Usage: $progname [OPTION]... --mode=link LINK-COMMAND... + +Link object files or libraries together to form another library, or to +create an executable program. + +LINK-COMMAND is a command using the C compiler that you would use to create +a program from several object files. + +The following components of LINK-COMMAND are treated specially: + + -all-static do not do any dynamic linking at all + -avoid-version do not add a version suffix if possible + -dlopen FILE \`-dlpreopen' FILE if it cannot be dlopened at runtime + -dlpreopen FILE link in FILE and add its symbols to lt_preloaded_symbols + -export-dynamic allow symbols from OUTPUT-FILE to be resolved with dlsym(3) + -export-symbols SYMFILE + try to export only the symbols listed in SYMFILE + -export-symbols-regex REGEX + try to export only the symbols matching REGEX + -LLIBDIR search LIBDIR for required installed libraries + -lNAME OUTPUT-FILE requires the installed library libNAME + -module build a library that can dlopened + -no-fast-install disable the fast-install mode + -no-install link a not-installable executable + -no-undefined declare that a library does not refer to external symbols + -o OUTPUT-FILE create OUTPUT-FILE from the specified objects + -objectlist FILE Use a list of object files found in FILE to specify objects + -precious-files-regex REGEX + don't remove output files matching REGEX + -release RELEASE specify package release information + -rpath LIBDIR the created library will eventually be installed in LIBDIR + -R[ ]LIBDIR add LIBDIR to the runtime path of programs and libraries + -shared only do dynamic linking of libtool libraries + -shrext SUFFIX override the standard shared library file extension + -static do not do any dynamic linking of uninstalled libtool libraries + -static-libtool-libs + do not do any dynamic linking of libtool libraries + -version-info CURRENT[:REVISION[:AGE]] + specify library version info [each variable defaults to 0] + -weak LIBNAME declare that the target provides the LIBNAME interface + +All other options (arguments beginning with \`-') are ignored. + +Every other argument is treated as a filename. Files ending in \`.la' are +treated as uninstalled libtool libraries, other files are standard or library +object files. + +If the OUTPUT-FILE ends in \`.la', then a libtool library is created, +only library objects (\`.lo' files) may be specified, and \`-rpath' is +required, except when creating a convenience library. + +If OUTPUT-FILE ends in \`.a' or \`.lib', then a standard library is created +using \`ar' and \`ranlib', or on Windows using \`lib'. + +If OUTPUT-FILE ends in \`.lo' or \`.${objext}', then a reloadable object file +is created, otherwise an executable program is created." + ;; + + uninstall) + $ECHO \ +"Usage: $progname [OPTION]... --mode=uninstall RM [RM-OPTION]... FILE... + +Remove libraries from an installation directory. + +RM is the name of the program to use to delete files associated with each FILE +(typically \`/bin/rm'). RM-OPTIONS are options (such as \`-f') to be passed +to RM. + +If FILE is a libtool library, all the files associated with it are deleted. +Otherwise, only FILE itself is deleted using RM." + ;; + + *) + func_fatal_help "invalid operation mode \`$mode'" + ;; + esac + + $ECHO + $ECHO "Try \`$progname --help' for more information about other modes." + + exit $? +} + + # Now that we've collected a possible --mode arg, show help if necessary + $opt_help && func_mode_help + + +# func_mode_execute arg... +func_mode_execute () +{ + $opt_debug + # The first argument is the command name. + cmd="$nonopt" + test -z "$cmd" && \ + func_fatal_help "you must specify a COMMAND" + + # Handle -dlopen flags immediately. + for file in $execute_dlfiles; do + test -f "$file" \ + || func_fatal_help "\`$file' is not a file" + + dir= + case $file in + *.la) + # Check to see that this really is a libtool archive. + func_lalib_unsafe_p "$file" \ + || func_fatal_help "\`$lib' is not a valid libtool archive" + + # Read the libtool library. + dlname= + library_names= + func_source "$file" + + # Skip this library if it cannot be dlopened. + if test -z "$dlname"; then + # Warn if it was a shared library. + test -n "$library_names" && \ + func_warning "\`$file' was not linked with \`-export-dynamic'" + continue + fi + + func_dirname "$file" "" "." + dir="$func_dirname_result" + + if test -f "$dir/$objdir/$dlname"; then + dir="$dir/$objdir" + else + if test ! -f "$dir/$dlname"; then + func_fatal_error "cannot find \`$dlname' in \`$dir' or \`$dir/$objdir'" + fi + fi + ;; + + *.lo) + # Just add the directory containing the .lo file. + func_dirname "$file" "" "." + dir="$func_dirname_result" + ;; + + *) + func_warning "\`-dlopen' is ignored for non-libtool libraries and objects" + continue + ;; + esac + + # Get the absolute pathname. + absdir=`cd "$dir" && pwd` + test -n "$absdir" && dir="$absdir" + + # Now add the directory to shlibpath_var. + if eval "test -z \"\$$shlibpath_var\""; then + eval "$shlibpath_var=\"\$dir\"" + else + eval "$shlibpath_var=\"\$dir:\$$shlibpath_var\"" + fi + done + + # This variable tells wrapper scripts just to set shlibpath_var + # rather than running their programs. + libtool_execute_magic="$magic" + + # Check if any of the arguments is a wrapper script. + args= + for file + do + case $file in + -*) ;; + *) + # Do a test to see if this is really a libtool program. + if func_ltwrapper_script_p "$file"; then + func_source "$file" + # Transform arg to wrapped name. + file="$progdir/$program" + elif func_ltwrapper_executable_p "$file"; then + func_ltwrapper_scriptname "$file" + func_source "$func_ltwrapper_scriptname_result" + # Transform arg to wrapped name. + file="$progdir/$program" + fi + ;; + esac + # Quote arguments (to preserve shell metacharacters). + func_quote_for_eval "$file" + args="$args $func_quote_for_eval_result" + done + + if test "X$opt_dry_run" = Xfalse; then + if test -n "$shlibpath_var"; then + # Export the shlibpath_var. + eval "export $shlibpath_var" + fi + + # Restore saved environment variables + for lt_var in LANG LANGUAGE LC_ALL LC_CTYPE LC_COLLATE LC_MESSAGES + do + eval "if test \"\${save_$lt_var+set}\" = set; then + $lt_var=\$save_$lt_var; export $lt_var + else + $lt_unset $lt_var + fi" + done + + # Now prepare to actually exec the command. + exec_cmd="\$cmd$args" + else + # Display what would be done. + if test -n "$shlibpath_var"; then + eval "\$ECHO \"\$shlibpath_var=\$$shlibpath_var\"" + $ECHO "export $shlibpath_var" + fi + $ECHO "$cmd$args" + exit $EXIT_SUCCESS + fi +} + +test "$mode" = execute && func_mode_execute ${1+"$@"} + + +# func_mode_finish arg... +func_mode_finish () +{ + $opt_debug + libdirs="$nonopt" + admincmds= + + if test -n "$finish_cmds$finish_eval" && test -n "$libdirs"; then + for dir + do + libdirs="$libdirs $dir" + done + + for libdir in $libdirs; do + if test -n "$finish_cmds"; then + # Do each command in the finish commands. + func_execute_cmds "$finish_cmds" 'admincmds="$admincmds +'"$cmd"'"' + fi + if test -n "$finish_eval"; then + # Do the single finish_eval. + eval cmds=\"$finish_eval\" + $opt_dry_run || eval "$cmds" || admincmds="$admincmds + $cmds" + fi + done + fi + + # Exit here if they wanted silent mode. + $opt_silent && exit $EXIT_SUCCESS + + $ECHO "X----------------------------------------------------------------------" | $Xsed + $ECHO "Libraries have been installed in:" + for libdir in $libdirs; do + $ECHO " $libdir" + done + $ECHO + $ECHO "If you ever happen to want to link against installed libraries" + $ECHO "in a given directory, LIBDIR, you must either use libtool, and" + $ECHO "specify the full pathname of the library, or use the \`-LLIBDIR'" + $ECHO "flag during linking and do at least one of the following:" + if test -n "$shlibpath_var"; then + $ECHO " - add LIBDIR to the \`$shlibpath_var' environment variable" + $ECHO " during execution" + fi + if test -n "$runpath_var"; then + $ECHO " - add LIBDIR to the \`$runpath_var' environment variable" + $ECHO " during linking" + fi + if test -n "$hardcode_libdir_flag_spec"; then + libdir=LIBDIR + eval flag=\"$hardcode_libdir_flag_spec\" + + $ECHO " - use the \`$flag' linker flag" + fi + if test -n "$admincmds"; then + $ECHO " - have your system administrator run these commands:$admincmds" + fi + if test -f /etc/ld.so.conf; then + $ECHO " - have your system administrator add LIBDIR to \`/etc/ld.so.conf'" + fi + $ECHO + + $ECHO "See any operating system documentation about shared libraries for" + case $host in + solaris2.[6789]|solaris2.1[0-9]) + $ECHO "more information, such as the ld(1), crle(1) and ld.so(8) manual" + $ECHO "pages." + ;; + *) + $ECHO "more information, such as the ld(1) and ld.so(8) manual pages." + ;; + esac + $ECHO "X----------------------------------------------------------------------" | $Xsed + exit $EXIT_SUCCESS +} + +test "$mode" = finish && func_mode_finish ${1+"$@"} + + +# func_mode_install arg... +func_mode_install () +{ + $opt_debug + # There may be an optional sh(1) argument at the beginning of + # install_prog (especially on Windows NT). + if test "$nonopt" = "$SHELL" || test "$nonopt" = /bin/sh || + # Allow the use of GNU shtool's install command. + $ECHO "X$nonopt" | $GREP shtool >/dev/null; then + # Aesthetically quote it. + func_quote_for_eval "$nonopt" + install_prog="$func_quote_for_eval_result " + arg=$1 + shift + else + install_prog= + arg=$nonopt + fi + + # The real first argument should be the name of the installation program. + # Aesthetically quote it. + func_quote_for_eval "$arg" + install_prog="$install_prog$func_quote_for_eval_result" + + # We need to accept at least all the BSD install flags. + dest= + files= + opts= + prev= + install_type= + isdir=no + stripme= + for arg + do + if test -n "$dest"; then + files="$files $dest" + dest=$arg + continue + fi + + case $arg in + -d) isdir=yes ;; + -f) + case " $install_prog " in + *[\\\ /]cp\ *) ;; + *) prev=$arg ;; + esac + ;; + -g | -m | -o) + prev=$arg + ;; + -s) + stripme=" -s" + continue + ;; + -*) + ;; + *) + # If the previous option needed an argument, then skip it. + if test -n "$prev"; then + prev= + else + dest=$arg + continue + fi + ;; + esac + + # Aesthetically quote the argument. + func_quote_for_eval "$arg" + install_prog="$install_prog $func_quote_for_eval_result" + done + + test -z "$install_prog" && \ + func_fatal_help "you must specify an install program" + + test -n "$prev" && \ + func_fatal_help "the \`$prev' option requires an argument" + + if test -z "$files"; then + if test -z "$dest"; then + func_fatal_help "no file or destination specified" + else + func_fatal_help "you must specify a destination" + fi + fi + + # Strip any trailing slash from the destination. + func_stripname '' '/' "$dest" + dest=$func_stripname_result + + # Check to see that the destination is a directory. + test -d "$dest" && isdir=yes + if test "$isdir" = yes; then + destdir="$dest" + destname= + else + func_dirname_and_basename "$dest" "" "." + destdir="$func_dirname_result" + destname="$func_basename_result" + + # Not a directory, so check to see that there is only one file specified. + set dummy $files; shift + test "$#" -gt 1 && \ + func_fatal_help "\`$dest' is not a directory" + fi + case $destdir in + [\\/]* | [A-Za-z]:[\\/]*) ;; + *) + for file in $files; do + case $file in + *.lo) ;; + *) + func_fatal_help "\`$destdir' must be an absolute directory name" + ;; + esac + done + ;; + esac + + # This variable tells wrapper scripts just to set variables rather + # than running their programs. + libtool_install_magic="$magic" + + staticlibs= + future_libdirs= + current_libdirs= + for file in $files; do + + # Do each installation. + case $file in + *.$libext) + # Do the static libraries later. + staticlibs="$staticlibs $file" + ;; + + *.la) + # Check to see that this really is a libtool archive. + func_lalib_unsafe_p "$file" \ + || func_fatal_help "\`$file' is not a valid libtool archive" + + library_names= + old_library= + relink_command= + func_source "$file" + + # Add the libdir to current_libdirs if it is the destination. + if test "X$destdir" = "X$libdir"; then + case "$current_libdirs " in + *" $libdir "*) ;; + *) current_libdirs="$current_libdirs $libdir" ;; + esac + else + # Note the libdir as a future libdir. + case "$future_libdirs " in + *" $libdir "*) ;; + *) future_libdirs="$future_libdirs $libdir" ;; + esac + fi + + func_dirname "$file" "/" "" + dir="$func_dirname_result" + dir="$dir$objdir" + + if test -n "$relink_command"; then + # Determine the prefix the user has applied to our future dir. + inst_prefix_dir=`$ECHO "X$destdir" | $Xsed -e "s%$libdir\$%%"` + + # Don't allow the user to place us outside of our expected + # location b/c this prevents finding dependent libraries that + # are installed to the same prefix. + # At present, this check doesn't affect windows .dll's that + # are installed into $libdir/../bin (currently, that works fine) + # but it's something to keep an eye on. + test "$inst_prefix_dir" = "$destdir" && \ + func_fatal_error "error: cannot install \`$file' to a directory not ending in $libdir" + + if test -n "$inst_prefix_dir"; then + # Stick the inst_prefix_dir data into the link command. + relink_command=`$ECHO "X$relink_command" | $Xsed -e "s%@inst_prefix_dir@%-inst-prefix-dir $inst_prefix_dir%"` + else + relink_command=`$ECHO "X$relink_command" | $Xsed -e "s%@inst_prefix_dir@%%"` + fi + + func_warning "relinking \`$file'" + func_show_eval "$relink_command" \ + 'func_fatal_error "error: relink \`$file'\'' with the above command before installing it"' + fi + + # See the names of the shared library. + set dummy $library_names; shift + if test -n "$1"; then + realname="$1" + shift + + srcname="$realname" + test -n "$relink_command" && srcname="$realname"T + + # Install the shared library and build the symlinks. + func_show_eval "$install_prog $dir/$srcname $destdir/$realname" \ + 'exit $?' + tstripme="$stripme" + case $host_os in + cygwin* | mingw* | pw32* | cegcc*) + case $realname in + *.dll.a) + tstripme="" + ;; + esac + ;; + esac + if test -n "$tstripme" && test -n "$striplib"; then + func_show_eval "$striplib $destdir/$realname" 'exit $?' + fi + + if test "$#" -gt 0; then + # Delete the old symlinks, and create new ones. + # Try `ln -sf' first, because the `ln' binary might depend on + # the symlink we replace! Solaris /bin/ln does not understand -f, + # so we also need to try rm && ln -s. + for linkname + do + test "$linkname" != "$realname" \ + && func_show_eval "(cd $destdir && { $LN_S -f $realname $linkname || { $RM $linkname && $LN_S $realname $linkname; }; })" + done + fi + + # Do each command in the postinstall commands. + lib="$destdir/$realname" + func_execute_cmds "$postinstall_cmds" 'exit $?' + fi + + # Install the pseudo-library for information purposes. + func_basename "$file" + name="$func_basename_result" + instname="$dir/$name"i + func_show_eval "$install_prog $instname $destdir/$name" 'exit $?' + + # Maybe install the static library, too. + test -n "$old_library" && staticlibs="$staticlibs $dir/$old_library" + ;; + + *.lo) + # Install (i.e. copy) a libtool object. + + # Figure out destination file name, if it wasn't already specified. + if test -n "$destname"; then + destfile="$destdir/$destname" + else + func_basename "$file" + destfile="$func_basename_result" + destfile="$destdir/$destfile" + fi + + # Deduce the name of the destination old-style object file. + case $destfile in + *.lo) + func_lo2o "$destfile" + staticdest=$func_lo2o_result + ;; + *.$objext) + staticdest="$destfile" + destfile= + ;; + *) + func_fatal_help "cannot copy a libtool object to \`$destfile'" + ;; + esac + + # Install the libtool object if requested. + test -n "$destfile" && \ + func_show_eval "$install_prog $file $destfile" 'exit $?' + + # Install the old object if enabled. + if test "$build_old_libs" = yes; then + # Deduce the name of the old-style object file. + func_lo2o "$file" + staticobj=$func_lo2o_result + func_show_eval "$install_prog \$staticobj \$staticdest" 'exit $?' + fi + exit $EXIT_SUCCESS + ;; + + *) + # Figure out destination file name, if it wasn't already specified. + if test -n "$destname"; then + destfile="$destdir/$destname" + else + func_basename "$file" + destfile="$func_basename_result" + destfile="$destdir/$destfile" + fi + + # If the file is missing, and there is a .exe on the end, strip it + # because it is most likely a libtool script we actually want to + # install + stripped_ext="" + case $file in + *.exe) + if test ! -f "$file"; then + func_stripname '' '.exe' "$file" + file=$func_stripname_result + stripped_ext=".exe" + fi + ;; + esac + + # Do a test to see if this is really a libtool program. + case $host in + *cygwin* | *mingw*) + if func_ltwrapper_executable_p "$file"; then + func_ltwrapper_scriptname "$file" + wrapper=$func_ltwrapper_scriptname_result + else + func_stripname '' '.exe' "$file" + wrapper=$func_stripname_result + fi + ;; + *) + wrapper=$file + ;; + esac + if func_ltwrapper_script_p "$wrapper"; then + notinst_deplibs= + relink_command= + + func_source "$wrapper" + + # Check the variables that should have been set. + test -z "$generated_by_libtool_version" && \ + func_fatal_error "invalid libtool wrapper script \`$wrapper'" + + finalize=yes + for lib in $notinst_deplibs; do + # Check to see that each library is installed. + libdir= + if test -f "$lib"; then + func_source "$lib" + fi + libfile="$libdir/"`$ECHO "X$lib" | $Xsed -e 's%^.*/%%g'` ### testsuite: skip nested quoting test + if test -n "$libdir" && test ! -f "$libfile"; then + func_warning "\`$lib' has not been installed in \`$libdir'" + finalize=no + fi + done + + relink_command= + func_source "$wrapper" + + outputname= + if test "$fast_install" = no && test -n "$relink_command"; then + $opt_dry_run || { + if test "$finalize" = yes; then + tmpdir=`func_mktempdir` + func_basename "$file$stripped_ext" + file="$func_basename_result" + outputname="$tmpdir/$file" + # Replace the output file specification. + relink_command=`$ECHO "X$relink_command" | $Xsed -e 's%@OUTPUT@%'"$outputname"'%g'` + + $opt_silent || { + func_quote_for_expand "$relink_command" + eval "func_echo $func_quote_for_expand_result" + } + if eval "$relink_command"; then : + else + func_error "error: relink \`$file' with the above command before installing it" + $opt_dry_run || ${RM}r "$tmpdir" + continue + fi + file="$outputname" + else + func_warning "cannot relink \`$file'" + fi + } + else + # Install the binary that we compiled earlier. + file=`$ECHO "X$file$stripped_ext" | $Xsed -e "s%\([^/]*\)$%$objdir/\1%"` + fi + fi + + # remove .exe since cygwin /usr/bin/install will append another + # one anyway + case $install_prog,$host in + */usr/bin/install*,*cygwin*) + case $file:$destfile in + *.exe:*.exe) + # this is ok + ;; + *.exe:*) + destfile=$destfile.exe + ;; + *:*.exe) + func_stripname '' '.exe' "$destfile" + destfile=$func_stripname_result + ;; + esac + ;; + esac + func_show_eval "$install_prog\$stripme \$file \$destfile" 'exit $?' + $opt_dry_run || if test -n "$outputname"; then + ${RM}r "$tmpdir" + fi + ;; + esac + done + + for file in $staticlibs; do + func_basename "$file" + name="$func_basename_result" + + # Set up the ranlib parameters. + oldlib="$destdir/$name" + + func_show_eval "$install_prog \$file \$oldlib" 'exit $?' + + if test -n "$stripme" && test -n "$old_striplib"; then + func_show_eval "$old_striplib $oldlib" 'exit $?' + fi + + # Do each command in the postinstall commands. + func_execute_cmds "$old_postinstall_cmds" 'exit $?' + done + + test -n "$future_libdirs" && \ + func_warning "remember to run \`$progname --finish$future_libdirs'" + + if test -n "$current_libdirs"; then + # Maybe just do a dry run. + $opt_dry_run && current_libdirs=" -n$current_libdirs" + exec_cmd='$SHELL $progpath $preserve_args --finish$current_libdirs' + else + exit $EXIT_SUCCESS + fi +} + +test "$mode" = install && func_mode_install ${1+"$@"} + + +# func_generate_dlsyms outputname originator pic_p +# Extract symbols from dlprefiles and create ${outputname}S.o with +# a dlpreopen symbol table. +func_generate_dlsyms () +{ + $opt_debug + my_outputname="$1" + my_originator="$2" + my_pic_p="${3-no}" + my_prefix=`$ECHO "$my_originator" | sed 's%[^a-zA-Z0-9]%_%g'` + my_dlsyms= + + if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then + if test -n "$NM" && test -n "$global_symbol_pipe"; then + my_dlsyms="${my_outputname}S.c" + else + func_error "not configured to extract global symbols from dlpreopened files" + fi + fi + + if test -n "$my_dlsyms"; then + case $my_dlsyms in + "") ;; + *.c) + # Discover the nlist of each of the dlfiles. + nlist="$output_objdir/${my_outputname}.nm" + + func_show_eval "$RM $nlist ${nlist}S ${nlist}T" + + # Parse the name list into a source file. + func_verbose "creating $output_objdir/$my_dlsyms" + + $opt_dry_run || $ECHO > "$output_objdir/$my_dlsyms" "\ +/* $my_dlsyms - symbol resolution table for \`$my_outputname' dlsym emulation. */ +/* Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION */ + +#ifdef __cplusplus +extern \"C\" { +#endif + +/* External symbol declarations for the compiler. */\ +" + + if test "$dlself" = yes; then + func_verbose "generating symbol list for \`$output'" + + $opt_dry_run || echo ': @PROGRAM@ ' > "$nlist" + + # Add our own program objects to the symbol list. + progfiles=`$ECHO "X$objs$old_deplibs" | $SP2NL | $Xsed -e "$lo2o" | $NL2SP` + for progfile in $progfiles; do + func_verbose "extracting global C symbols from \`$progfile'" + $opt_dry_run || eval "$NM $progfile | $global_symbol_pipe >> '$nlist'" + done + + if test -n "$exclude_expsyms"; then + $opt_dry_run || { + eval '$EGREP -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T' + eval '$MV "$nlist"T "$nlist"' + } + fi + + if test -n "$export_symbols_regex"; then + $opt_dry_run || { + eval '$EGREP -e "$export_symbols_regex" "$nlist" > "$nlist"T' + eval '$MV "$nlist"T "$nlist"' + } + fi + + # Prepare the list of exported symbols + if test -z "$export_symbols"; then + export_symbols="$output_objdir/$outputname.exp" + $opt_dry_run || { + $RM $export_symbols + eval "${SED} -n -e '/^: @PROGRAM@ $/d' -e 's/^.* \(.*\)$/\1/p' "'< "$nlist" > "$export_symbols"' + case $host in + *cygwin* | *mingw* | *cegcc* ) + eval "echo EXPORTS "'> "$output_objdir/$outputname.def"' + eval 'cat "$export_symbols" >> "$output_objdir/$outputname.def"' + ;; + esac + } + else + $opt_dry_run || { + eval "${SED} -e 's/\([].[*^$]\)/\\\\\1/g' -e 's/^/ /' -e 's/$/$/'"' < "$export_symbols" > "$output_objdir/$outputname.exp"' + eval '$GREP -f "$output_objdir/$outputname.exp" < "$nlist" > "$nlist"T' + eval '$MV "$nlist"T "$nlist"' + case $host in + *cygwin | *mingw* | *cegcc* ) + eval "echo EXPORTS "'> "$output_objdir/$outputname.def"' + eval 'cat "$nlist" >> "$output_objdir/$outputname.def"' + ;; + esac + } + fi + fi + + for dlprefile in $dlprefiles; do + func_verbose "extracting global C symbols from \`$dlprefile'" + func_basename "$dlprefile" + name="$func_basename_result" + $opt_dry_run || { + eval '$ECHO ": $name " >> "$nlist"' + eval "$NM $dlprefile 2>/dev/null | $global_symbol_pipe >> '$nlist'" + } + done + + $opt_dry_run || { + # Make sure we have at least an empty file. + test -f "$nlist" || : > "$nlist" + + if test -n "$exclude_expsyms"; then + $EGREP -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T + $MV "$nlist"T "$nlist" + fi + + # Try sorting and uniquifying the output. + if $GREP -v "^: " < "$nlist" | + if sort -k 3 /dev/null 2>&1; then + sort -k 3 + else + sort +2 + fi | + uniq > "$nlist"S; then + : + else + $GREP -v "^: " < "$nlist" > "$nlist"S + fi + + if test -f "$nlist"S; then + eval "$global_symbol_to_cdecl"' < "$nlist"S >> "$output_objdir/$my_dlsyms"' + else + $ECHO '/* NONE */' >> "$output_objdir/$my_dlsyms" + fi + + $ECHO >> "$output_objdir/$my_dlsyms" "\ + +/* The mapping between symbol names and symbols. */ +typedef struct { + const char *name; + void *address; +} lt_dlsymlist; +" + case $host in + *cygwin* | *mingw* | *cegcc* ) + $ECHO >> "$output_objdir/$my_dlsyms" "\ +/* DATA imports from DLLs on WIN32 con't be const, because + runtime relocations are performed -- see ld's documentation + on pseudo-relocs. */" + lt_dlsym_const= ;; + *osf5*) + echo >> "$output_objdir/$my_dlsyms" "\ +/* This system does not cope well with relocations in const data */" + lt_dlsym_const= ;; + *) + lt_dlsym_const=const ;; + esac + + $ECHO >> "$output_objdir/$my_dlsyms" "\ +extern $lt_dlsym_const lt_dlsymlist +lt_${my_prefix}_LTX_preloaded_symbols[]; +$lt_dlsym_const lt_dlsymlist +lt_${my_prefix}_LTX_preloaded_symbols[] = +{\ + { \"$my_originator\", (void *) 0 }," + + case $need_lib_prefix in + no) + eval "$global_symbol_to_c_name_address" < "$nlist" >> "$output_objdir/$my_dlsyms" + ;; + *) + eval "$global_symbol_to_c_name_address_lib_prefix" < "$nlist" >> "$output_objdir/$my_dlsyms" + ;; + esac + $ECHO >> "$output_objdir/$my_dlsyms" "\ + {0, (void *) 0} +}; + +/* This works around a problem in FreeBSD linker */ +#ifdef FREEBSD_WORKAROUND +static const void *lt_preloaded_setup() { + return lt_${my_prefix}_LTX_preloaded_symbols; +} +#endif + +#ifdef __cplusplus +} +#endif\ +" + } # !$opt_dry_run + + pic_flag_for_symtable= + case "$compile_command " in + *" -static "*) ;; + *) + case $host in + # compiling the symbol table file with pic_flag works around + # a FreeBSD bug that causes programs to crash when -lm is + # linked before any other PIC object. But we must not use + # pic_flag when linking with -static. The problem exists in + # FreeBSD 2.2.6 and is fixed in FreeBSD 3.1. + *-*-freebsd2*|*-*-freebsd3.0*|*-*-freebsdelf3.0*) + pic_flag_for_symtable=" $pic_flag -DFREEBSD_WORKAROUND" ;; + *-*-hpux*) + pic_flag_for_symtable=" $pic_flag" ;; + *) + if test "X$my_pic_p" != Xno; then + pic_flag_for_symtable=" $pic_flag" + fi + ;; + esac + ;; + esac + symtab_cflags= + for arg in $LTCFLAGS; do + case $arg in + -pie | -fpie | -fPIE) ;; + *) symtab_cflags="$symtab_cflags $arg" ;; + esac + done + + # Now compile the dynamic symbol file. + func_show_eval '(cd $output_objdir && $LTCC$symtab_cflags -c$no_builtin_flag$pic_flag_for_symtable "$my_dlsyms")' 'exit $?' + + # Clean up the generated files. + func_show_eval '$RM "$output_objdir/$my_dlsyms" "$nlist" "${nlist}S" "${nlist}T"' + + # Transform the symbol file into the correct name. + symfileobj="$output_objdir/${my_outputname}S.$objext" + case $host in + *cygwin* | *mingw* | *cegcc* ) + if test -f "$output_objdir/$my_outputname.def"; then + compile_command=`$ECHO "X$compile_command" | $Xsed -e "s%@SYMFILE@%$output_objdir/$my_outputname.def $symfileobj%"` + finalize_command=`$ECHO "X$finalize_command" | $Xsed -e "s%@SYMFILE@%$output_objdir/$my_outputname.def $symfileobj%"` + else + compile_command=`$ECHO "X$compile_command" | $Xsed -e "s%@SYMFILE@%$symfileobj%"` + finalize_command=`$ECHO "X$finalize_command" | $Xsed -e "s%@SYMFILE@%$symfileobj%"` + fi + ;; + *) + compile_command=`$ECHO "X$compile_command" | $Xsed -e "s%@SYMFILE@%$symfileobj%"` + finalize_command=`$ECHO "X$finalize_command" | $Xsed -e "s%@SYMFILE@%$symfileobj%"` + ;; + esac + ;; + *) + func_fatal_error "unknown suffix for \`$my_dlsyms'" + ;; + esac + else + # We keep going just in case the user didn't refer to + # lt_preloaded_symbols. The linker will fail if global_symbol_pipe + # really was required. + + # Nullify the symbol file. + compile_command=`$ECHO "X$compile_command" | $Xsed -e "s% @SYMFILE@%%"` + finalize_command=`$ECHO "X$finalize_command" | $Xsed -e "s% @SYMFILE@%%"` + fi +} + +# func_win32_libid arg +# return the library type of file 'arg' +# +# Need a lot of goo to handle *both* DLLs and import libs +# Has to be a shell function in order to 'eat' the argument +# that is supplied when $file_magic_command is called. +func_win32_libid () +{ + $opt_debug + win32_libid_type="unknown" + win32_fileres=`file -L $1 2>/dev/null` + case $win32_fileres in + *ar\ archive\ import\ library*) # definitely import + win32_libid_type="x86 archive import" + ;; + *ar\ archive*) # could be an import, or static + if eval $OBJDUMP -f $1 | $SED -e '10q' 2>/dev/null | + $EGREP 'file format pe-i386(.*architecture: i386)?' >/dev/null ; then + win32_nmres=`eval $NM -f posix -A $1 | + $SED -n -e ' + 1,100{ + / I /{ + s,.*,import, + p + q + } + }'` + case $win32_nmres in + import*) win32_libid_type="x86 archive import";; + *) win32_libid_type="x86 archive static";; + esac + fi + ;; + *DLL*) + win32_libid_type="x86 DLL" + ;; + *executable*) # but shell scripts are "executable" too... + case $win32_fileres in + *MS\ Windows\ PE\ Intel*) + win32_libid_type="x86 DLL" + ;; + esac + ;; + esac + $ECHO "$win32_libid_type" +} + + + +# func_extract_an_archive dir oldlib +func_extract_an_archive () +{ + $opt_debug + f_ex_an_ar_dir="$1"; shift + f_ex_an_ar_oldlib="$1" + func_show_eval "(cd \$f_ex_an_ar_dir && $AR x \"\$f_ex_an_ar_oldlib\")" 'exit $?' + if ($AR t "$f_ex_an_ar_oldlib" | sort | sort -uc >/dev/null 2>&1); then + : + else + func_fatal_error "object name conflicts in archive: $f_ex_an_ar_dir/$f_ex_an_ar_oldlib" + fi +} + + +# func_extract_archives gentop oldlib ... +func_extract_archives () +{ + $opt_debug + my_gentop="$1"; shift + my_oldlibs=${1+"$@"} + my_oldobjs="" + my_xlib="" + my_xabs="" + my_xdir="" + + for my_xlib in $my_oldlibs; do + # Extract the objects. + case $my_xlib in + [\\/]* | [A-Za-z]:[\\/]*) my_xabs="$my_xlib" ;; + *) my_xabs=`pwd`"/$my_xlib" ;; + esac + func_basename "$my_xlib" + my_xlib="$func_basename_result" + my_xlib_u=$my_xlib + while :; do + case " $extracted_archives " in + *" $my_xlib_u "*) + func_arith $extracted_serial + 1 + extracted_serial=$func_arith_result + my_xlib_u=lt$extracted_serial-$my_xlib ;; + *) break ;; + esac + done + extracted_archives="$extracted_archives $my_xlib_u" + my_xdir="$my_gentop/$my_xlib_u" + + func_mkdir_p "$my_xdir" + + case $host in + *-darwin*) + func_verbose "Extracting $my_xabs" + # Do not bother doing anything if just a dry run + $opt_dry_run || { + darwin_orig_dir=`pwd` + cd $my_xdir || exit $? + darwin_archive=$my_xabs + darwin_curdir=`pwd` + darwin_base_archive=`basename "$darwin_archive"` + darwin_arches=`$LIPO -info "$darwin_archive" 2>/dev/null | $GREP Architectures 2>/dev/null || true` + if test -n "$darwin_arches"; then + darwin_arches=`$ECHO "$darwin_arches" | $SED -e 's/.*are://'` + darwin_arch= + func_verbose "$darwin_base_archive has multiple architectures $darwin_arches" + for darwin_arch in $darwin_arches ; do + func_mkdir_p "unfat-$$/${darwin_base_archive}-${darwin_arch}" + $LIPO -thin $darwin_arch -output "unfat-$$/${darwin_base_archive}-${darwin_arch}/${darwin_base_archive}" "${darwin_archive}" + cd "unfat-$$/${darwin_base_archive}-${darwin_arch}" + func_extract_an_archive "`pwd`" "${darwin_base_archive}" + cd "$darwin_curdir" + $RM "unfat-$$/${darwin_base_archive}-${darwin_arch}/${darwin_base_archive}" + done # $darwin_arches + ## Okay now we've a bunch of thin objects, gotta fatten them up :) + darwin_filelist=`find unfat-$$ -type f -name \*.o -print -o -name \*.lo -print | $SED -e "$basename" | sort -u` + darwin_file= + darwin_files= + for darwin_file in $darwin_filelist; do + darwin_files=`find unfat-$$ -name $darwin_file -print | $NL2SP` + $LIPO -create -output "$darwin_file" $darwin_files + done # $darwin_filelist + $RM -rf unfat-$$ + cd "$darwin_orig_dir" + else + cd $darwin_orig_dir + func_extract_an_archive "$my_xdir" "$my_xabs" + fi # $darwin_arches + } # !$opt_dry_run + ;; + *) + func_extract_an_archive "$my_xdir" "$my_xabs" + ;; + esac + my_oldobjs="$my_oldobjs "`find $my_xdir -name \*.$objext -print -o -name \*.lo -print | $NL2SP` + done + + func_extract_archives_result="$my_oldobjs" +} + + + +# func_emit_wrapper_part1 [arg=no] +# +# Emit the first part of a libtool wrapper script on stdout. +# For more information, see the description associated with +# func_emit_wrapper(), below. +func_emit_wrapper_part1 () +{ + func_emit_wrapper_part1_arg1=no + if test -n "$1" ; then + func_emit_wrapper_part1_arg1=$1 + fi + + $ECHO "\ +#! $SHELL + +# $output - temporary wrapper script for $objdir/$outputname +# Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION +# +# The $output program cannot be directly executed until all the libtool +# libraries that it depends on are installed. +# +# This wrapper script should never be moved out of the build directory. +# If it is, it will not operate correctly. + +# Sed substitution that helps us do robust quoting. It backslashifies +# metacharacters that are still active within double-quoted strings. +Xsed='${SED} -e 1s/^X//' +sed_quote_subst='$sed_quote_subst' + +# Be Bourne compatible +if test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then + emulate sh + NULLCMD=: + # Zsh 3.x and 4.x performs word splitting on \${1+\"\$@\"}, which + # is contrary to our usage. Disable this feature. + alias -g '\${1+\"\$@\"}'='\"\$@\"' + setopt NO_GLOB_SUBST +else + case \`(set -o) 2>/dev/null\` in *posix*) set -o posix;; esac +fi +BIN_SH=xpg4; export BIN_SH # for Tru64 +DUALCASE=1; export DUALCASE # for MKS sh + +# The HP-UX ksh and POSIX shell print the target directory to stdout +# if CDPATH is set. +(unset CDPATH) >/dev/null 2>&1 && unset CDPATH + +relink_command=\"$relink_command\" + +# This environment variable determines our operation mode. +if test \"\$libtool_install_magic\" = \"$magic\"; then + # install mode needs the following variables: + generated_by_libtool_version='$macro_version' + notinst_deplibs='$notinst_deplibs' +else + # When we are sourced in execute mode, \$file and \$ECHO are already set. + if test \"\$libtool_execute_magic\" != \"$magic\"; then + ECHO=\"$qecho\" + file=\"\$0\" + # Make sure echo works. + if test \"X\$1\" = X--no-reexec; then + # Discard the --no-reexec flag, and continue. + shift + elif test \"X\`{ \$ECHO '\t'; } 2>/dev/null\`\" = 'X\t'; then + # Yippee, \$ECHO works! + : + else + # Restart under the correct shell, and then maybe \$ECHO will work. + exec $SHELL \"\$0\" --no-reexec \${1+\"\$@\"} + fi + fi\ +" + $ECHO "\ + + # Find the directory that this script lives in. + thisdir=\`\$ECHO \"X\$file\" | \$Xsed -e 's%/[^/]*$%%'\` + test \"x\$thisdir\" = \"x\$file\" && thisdir=. + + # Follow symbolic links until we get to the real thisdir. + file=\`ls -ld \"\$file\" | ${SED} -n 's/.*-> //p'\` + while test -n \"\$file\"; do + destdir=\`\$ECHO \"X\$file\" | \$Xsed -e 's%/[^/]*\$%%'\` + + # If there was a directory component, then change thisdir. + if test \"x\$destdir\" != \"x\$file\"; then + case \"\$destdir\" in + [\\\\/]* | [A-Za-z]:[\\\\/]*) thisdir=\"\$destdir\" ;; + *) thisdir=\"\$thisdir/\$destdir\" ;; + esac + fi + + file=\`\$ECHO \"X\$file\" | \$Xsed -e 's%^.*/%%'\` + file=\`ls -ld \"\$thisdir/\$file\" | ${SED} -n 's/.*-> //p'\` + done +" +} +# end: func_emit_wrapper_part1 + +# func_emit_wrapper_part2 [arg=no] +# +# Emit the second part of a libtool wrapper script on stdout. +# For more information, see the description associated with +# func_emit_wrapper(), below. +func_emit_wrapper_part2 () +{ + func_emit_wrapper_part2_arg1=no + if test -n "$1" ; then + func_emit_wrapper_part2_arg1=$1 + fi + + $ECHO "\ + + # Usually 'no', except on cygwin/mingw when embedded into + # the cwrapper. + WRAPPER_SCRIPT_BELONGS_IN_OBJDIR=$func_emit_wrapper_part2_arg1 + if test \"\$WRAPPER_SCRIPT_BELONGS_IN_OBJDIR\" = \"yes\"; then + # special case for '.' + if test \"\$thisdir\" = \".\"; then + thisdir=\`pwd\` + fi + # remove .libs from thisdir + case \"\$thisdir\" in + *[\\\\/]$objdir ) thisdir=\`\$ECHO \"X\$thisdir\" | \$Xsed -e 's%[\\\\/][^\\\\/]*$%%'\` ;; + $objdir ) thisdir=. ;; + esac + fi + + # Try to get the absolute directory name. + absdir=\`cd \"\$thisdir\" && pwd\` + test -n \"\$absdir\" && thisdir=\"\$absdir\" +" + + if test "$fast_install" = yes; then + $ECHO "\ + program=lt-'$outputname'$exeext + progdir=\"\$thisdir/$objdir\" + + if test ! -f \"\$progdir/\$program\" || + { file=\`ls -1dt \"\$progdir/\$program\" \"\$progdir/../\$program\" 2>/dev/null | ${SED} 1q\`; \\ + test \"X\$file\" != \"X\$progdir/\$program\"; }; then + + file=\"\$\$-\$program\" + + if test ! -d \"\$progdir\"; then + $MKDIR \"\$progdir\" + else + $RM \"\$progdir/\$file\" + fi" + + $ECHO "\ + + # relink executable if necessary + if test -n \"\$relink_command\"; then + if relink_command_output=\`eval \$relink_command 2>&1\`; then : + else + $ECHO \"\$relink_command_output\" >&2 + $RM \"\$progdir/\$file\" + exit 1 + fi + fi + + $MV \"\$progdir/\$file\" \"\$progdir/\$program\" 2>/dev/null || + { $RM \"\$progdir/\$program\"; + $MV \"\$progdir/\$file\" \"\$progdir/\$program\"; } + $RM \"\$progdir/\$file\" + fi" + else + $ECHO "\ + program='$outputname' + progdir=\"\$thisdir/$objdir\" +" + fi + + $ECHO "\ + + if test -f \"\$progdir/\$program\"; then" + + # Export our shlibpath_var if we have one. + if test "$shlibpath_overrides_runpath" = yes && test -n "$shlibpath_var" && test -n "$temp_rpath"; then + $ECHO "\ + # Add our own library path to $shlibpath_var + $shlibpath_var=\"$temp_rpath\$$shlibpath_var\" + + # Some systems cannot cope with colon-terminated $shlibpath_var + # The second colon is a workaround for a bug in BeOS R4 sed + $shlibpath_var=\`\$ECHO \"X\$$shlibpath_var\" | \$Xsed -e 's/::*\$//'\` + + export $shlibpath_var +" + fi + + # fixup the dll searchpath if we need to. + if test -n "$dllsearchpath"; then + $ECHO "\ + # Add the dll search path components to the executable PATH + PATH=$dllsearchpath:\$PATH +" + fi + + $ECHO "\ + if test \"\$libtool_execute_magic\" != \"$magic\"; then + # Run the actual program with our arguments. +" + case $host in + # Backslashes separate directories on plain windows + *-*-mingw | *-*-os2* | *-cegcc*) + $ECHO "\ + exec \"\$progdir\\\\\$program\" \${1+\"\$@\"} +" + ;; + + *) + $ECHO "\ + exec \"\$progdir/\$program\" \${1+\"\$@\"} +" + ;; + esac + $ECHO "\ + \$ECHO \"\$0: cannot exec \$program \$*\" 1>&2 + exit 1 + fi + else + # The program doesn't exist. + \$ECHO \"\$0: error: \\\`\$progdir/\$program' does not exist\" 1>&2 + \$ECHO \"This script is just a wrapper for \$program.\" 1>&2 + $ECHO \"See the $PACKAGE documentation for more information.\" 1>&2 + exit 1 + fi +fi\ +" +} +# end: func_emit_wrapper_part2 + + +# func_emit_wrapper [arg=no] +# +# Emit a libtool wrapper script on stdout. +# Don't directly open a file because we may want to +# incorporate the script contents within a cygwin/mingw +# wrapper executable. Must ONLY be called from within +# func_mode_link because it depends on a number of variables +# set therein. +# +# ARG is the value that the WRAPPER_SCRIPT_BELONGS_IN_OBJDIR +# variable will take. If 'yes', then the emitted script +# will assume that the directory in which it is stored is +# the $objdir directory. This is a cygwin/mingw-specific +# behavior. +func_emit_wrapper () +{ + func_emit_wrapper_arg1=no + if test -n "$1" ; then + func_emit_wrapper_arg1=$1 + fi + + # split this up so that func_emit_cwrapperexe_src + # can call each part independently. + func_emit_wrapper_part1 "${func_emit_wrapper_arg1}" + func_emit_wrapper_part2 "${func_emit_wrapper_arg1}" +} + + +# func_to_host_path arg +# +# Convert paths to host format when used with build tools. +# Intended for use with "native" mingw (where libtool itself +# is running under the msys shell), or in the following cross- +# build environments: +# $build $host +# mingw (msys) mingw [e.g. native] +# cygwin mingw +# *nix + wine mingw +# where wine is equipped with the `winepath' executable. +# In the native mingw case, the (msys) shell automatically +# converts paths for any non-msys applications it launches, +# but that facility isn't available from inside the cwrapper. +# Similar accommodations are necessary for $host mingw and +# $build cygwin. Calling this function does no harm for other +# $host/$build combinations not listed above. +# +# ARG is the path (on $build) that should be converted to +# the proper representation for $host. The result is stored +# in $func_to_host_path_result. +func_to_host_path () +{ + func_to_host_path_result="$1" + if test -n "$1" ; then + case $host in + *mingw* ) + lt_sed_naive_backslashify='s|\\\\*|\\|g;s|/|\\|g;s|\\|\\\\|g' + case $build in + *mingw* ) # actually, msys + # awkward: cmd appends spaces to result + lt_sed_strip_trailing_spaces="s/[ ]*\$//" + func_to_host_path_tmp1=`( cmd //c echo "$1" |\ + $SED -e "$lt_sed_strip_trailing_spaces" ) 2>/dev/null || echo ""` + func_to_host_path_result=`echo "$func_to_host_path_tmp1" |\ + $SED -e "$lt_sed_naive_backslashify"` + ;; + *cygwin* ) + func_to_host_path_tmp1=`cygpath -w "$1"` + func_to_host_path_result=`echo "$func_to_host_path_tmp1" |\ + $SED -e "$lt_sed_naive_backslashify"` + ;; + * ) + # Unfortunately, winepath does not exit with a non-zero + # error code, so we are forced to check the contents of + # stdout. On the other hand, if the command is not + # found, the shell will set an exit code of 127 and print + # *an error message* to stdout. So we must check for both + # error code of zero AND non-empty stdout, which explains + # the odd construction: + func_to_host_path_tmp1=`winepath -w "$1" 2>/dev/null` + if test "$?" -eq 0 && test -n "${func_to_host_path_tmp1}"; then + func_to_host_path_result=`echo "$func_to_host_path_tmp1" |\ + $SED -e "$lt_sed_naive_backslashify"` + else + # Allow warning below. + func_to_host_path_result="" + fi + ;; + esac + if test -z "$func_to_host_path_result" ; then + func_error "Could not determine host path corresponding to" + func_error " '$1'" + func_error "Continuing, but uninstalled executables may not work." + # Fallback: + func_to_host_path_result="$1" + fi + ;; + esac + fi +} +# end: func_to_host_path + +# func_to_host_pathlist arg +# +# Convert pathlists to host format when used with build tools. +# See func_to_host_path(), above. This function supports the +# following $build/$host combinations (but does no harm for +# combinations not listed here): +# $build $host +# mingw (msys) mingw [e.g. native] +# cygwin mingw +# *nix + wine mingw +# +# Path separators are also converted from $build format to +# $host format. If ARG begins or ends with a path separator +# character, it is preserved (but converted to $host format) +# on output. +# +# ARG is a pathlist (on $build) that should be converted to +# the proper representation on $host. The result is stored +# in $func_to_host_pathlist_result. +func_to_host_pathlist () +{ + func_to_host_pathlist_result="$1" + if test -n "$1" ; then + case $host in + *mingw* ) + lt_sed_naive_backslashify='s|\\\\*|\\|g;s|/|\\|g;s|\\|\\\\|g' + # Remove leading and trailing path separator characters from + # ARG. msys behavior is inconsistent here, cygpath turns them + # into '.;' and ';.', and winepath ignores them completely. + func_to_host_pathlist_tmp2="$1" + # Once set for this call, this variable should not be + # reassigned. It is used in tha fallback case. + func_to_host_pathlist_tmp1=`echo "$func_to_host_pathlist_tmp2" |\ + $SED -e 's|^:*||' -e 's|:*$||'` + case $build in + *mingw* ) # Actually, msys. + # Awkward: cmd appends spaces to result. + lt_sed_strip_trailing_spaces="s/[ ]*\$//" + func_to_host_pathlist_tmp2=`( cmd //c echo "$func_to_host_pathlist_tmp1" |\ + $SED -e "$lt_sed_strip_trailing_spaces" ) 2>/dev/null || echo ""` + func_to_host_pathlist_result=`echo "$func_to_host_pathlist_tmp2" |\ + $SED -e "$lt_sed_naive_backslashify"` + ;; + *cygwin* ) + func_to_host_pathlist_tmp2=`cygpath -w -p "$func_to_host_pathlist_tmp1"` + func_to_host_pathlist_result=`echo "$func_to_host_pathlist_tmp2" |\ + $SED -e "$lt_sed_naive_backslashify"` + ;; + * ) + # unfortunately, winepath doesn't convert pathlists + func_to_host_pathlist_result="" + func_to_host_pathlist_oldIFS=$IFS + IFS=: + for func_to_host_pathlist_f in $func_to_host_pathlist_tmp1 ; do + IFS=$func_to_host_pathlist_oldIFS + if test -n "$func_to_host_pathlist_f" ; then + func_to_host_path "$func_to_host_pathlist_f" + if test -n "$func_to_host_path_result" ; then + if test -z "$func_to_host_pathlist_result" ; then + func_to_host_pathlist_result="$func_to_host_path_result" + else + func_to_host_pathlist_result="$func_to_host_pathlist_result;$func_to_host_path_result" + fi + fi + fi + IFS=: + done + IFS=$func_to_host_pathlist_oldIFS + ;; + esac + if test -z "$func_to_host_pathlist_result" ; then + func_error "Could not determine the host path(s) corresponding to" + func_error " '$1'" + func_error "Continuing, but uninstalled executables may not work." + # Fallback. This may break if $1 contains DOS-style drive + # specifications. The fix is not to complicate the expression + # below, but for the user to provide a working wine installation + # with winepath so that path translation in the cross-to-mingw + # case works properly. + lt_replace_pathsep_nix_to_dos="s|:|;|g" + func_to_host_pathlist_result=`echo "$func_to_host_pathlist_tmp1" |\ + $SED -e "$lt_replace_pathsep_nix_to_dos"` + fi + # Now, add the leading and trailing path separators back + case "$1" in + :* ) func_to_host_pathlist_result=";$func_to_host_pathlist_result" + ;; + esac + case "$1" in + *: ) func_to_host_pathlist_result="$func_to_host_pathlist_result;" + ;; + esac + ;; + esac + fi +} +# end: func_to_host_pathlist + +# func_emit_cwrapperexe_src +# emit the source code for a wrapper executable on stdout +# Must ONLY be called from within func_mode_link because +# it depends on a number of variable set therein. +func_emit_cwrapperexe_src () +{ + cat < +#include +#ifdef _MSC_VER +# include +# include +# include +# define setmode _setmode +#else +# include +# include +# ifdef __CYGWIN__ +# include +# define HAVE_SETENV +# ifdef __STRICT_ANSI__ +char *realpath (const char *, char *); +int putenv (char *); +int setenv (const char *, const char *, int); +# endif +# endif +#endif +#include +#include +#include +#include +#include +#include +#include +#include + +#if defined(PATH_MAX) +# define LT_PATHMAX PATH_MAX +#elif defined(MAXPATHLEN) +# define LT_PATHMAX MAXPATHLEN +#else +# define LT_PATHMAX 1024 +#endif + +#ifndef S_IXOTH +# define S_IXOTH 0 +#endif +#ifndef S_IXGRP +# define S_IXGRP 0 +#endif + +#ifdef _MSC_VER +# define S_IXUSR _S_IEXEC +# define stat _stat +# ifndef _INTPTR_T_DEFINED +# define intptr_t int +# endif +#endif + +#ifndef DIR_SEPARATOR +# define DIR_SEPARATOR '/' +# define PATH_SEPARATOR ':' +#endif + +#if defined (_WIN32) || defined (__MSDOS__) || defined (__DJGPP__) || \ + defined (__OS2__) +# define HAVE_DOS_BASED_FILE_SYSTEM +# define FOPEN_WB "wb" +# ifndef DIR_SEPARATOR_2 +# define DIR_SEPARATOR_2 '\\' +# endif +# ifndef PATH_SEPARATOR_2 +# define PATH_SEPARATOR_2 ';' +# endif +#endif + +#ifndef DIR_SEPARATOR_2 +# define IS_DIR_SEPARATOR(ch) ((ch) == DIR_SEPARATOR) +#else /* DIR_SEPARATOR_2 */ +# define IS_DIR_SEPARATOR(ch) \ + (((ch) == DIR_SEPARATOR) || ((ch) == DIR_SEPARATOR_2)) +#endif /* DIR_SEPARATOR_2 */ + +#ifndef PATH_SEPARATOR_2 +# define IS_PATH_SEPARATOR(ch) ((ch) == PATH_SEPARATOR) +#else /* PATH_SEPARATOR_2 */ +# define IS_PATH_SEPARATOR(ch) ((ch) == PATH_SEPARATOR_2) +#endif /* PATH_SEPARATOR_2 */ + +#ifdef __CYGWIN__ +# define FOPEN_WB "wb" +#endif + +#ifndef FOPEN_WB +# define FOPEN_WB "w" +#endif +#ifndef _O_BINARY +# define _O_BINARY 0 +#endif + +#define XMALLOC(type, num) ((type *) xmalloc ((num) * sizeof(type))) +#define XFREE(stale) do { \ + if (stale) { free ((void *) stale); stale = 0; } \ +} while (0) + +#undef LTWRAPPER_DEBUGPRINTF +#if defined DEBUGWRAPPER +# define LTWRAPPER_DEBUGPRINTF(args) ltwrapper_debugprintf args +static void +ltwrapper_debugprintf (const char *fmt, ...) +{ + va_list args; + va_start (args, fmt); + (void) vfprintf (stderr, fmt, args); + va_end (args); +} +#else +# define LTWRAPPER_DEBUGPRINTF(args) +#endif + +const char *program_name = NULL; + +void *xmalloc (size_t num); +char *xstrdup (const char *string); +const char *base_name (const char *name); +char *find_executable (const char *wrapper); +char *chase_symlinks (const char *pathspec); +int make_executable (const char *path); +int check_executable (const char *path); +char *strendzap (char *str, const char *pat); +void lt_fatal (const char *message, ...); +void lt_setenv (const char *name, const char *value); +char *lt_extend_str (const char *orig_value, const char *add, int to_end); +void lt_opt_process_env_set (const char *arg); +void lt_opt_process_env_prepend (const char *arg); +void lt_opt_process_env_append (const char *arg); +int lt_split_name_value (const char *arg, char** name, char** value); +void lt_update_exe_path (const char *name, const char *value); +void lt_update_lib_path (const char *name, const char *value); + +static const char *script_text_part1 = +EOF + + func_emit_wrapper_part1 yes | + $SED -e 's/\([\\"]\)/\\\1/g' \ + -e 's/^/ "/' -e 's/$/\\n"/' + echo ";" + cat <"))); + for (i = 0; i < newargc; i++) + { + LTWRAPPER_DEBUGPRINTF (("(main) newargz[%d] : %s\n", i, (newargz[i] ? newargz[i] : ""))); + } + +EOF + + case $host_os in + mingw*) + cat <<"EOF" + /* execv doesn't actually work on mingw as expected on unix */ + rval = _spawnv (_P_WAIT, lt_argv_zero, (const char * const *) newargz); + if (rval == -1) + { + /* failed to start process */ + LTWRAPPER_DEBUGPRINTF (("(main) failed to launch target \"%s\": errno = %d\n", lt_argv_zero, errno)); + return 127; + } + return rval; +EOF + ;; + *) + cat <<"EOF" + execv (lt_argv_zero, newargz); + return rval; /* =127, but avoids unused variable warning */ +EOF + ;; + esac + + cat <<"EOF" +} + +void * +xmalloc (size_t num) +{ + void *p = (void *) malloc (num); + if (!p) + lt_fatal ("Memory exhausted"); + + return p; +} + +char * +xstrdup (const char *string) +{ + return string ? strcpy ((char *) xmalloc (strlen (string) + 1), + string) : NULL; +} + +const char * +base_name (const char *name) +{ + const char *base; + +#if defined (HAVE_DOS_BASED_FILE_SYSTEM) + /* Skip over the disk name in MSDOS pathnames. */ + if (isalpha ((unsigned char) name[0]) && name[1] == ':') + name += 2; +#endif + + for (base = name; *name; name++) + if (IS_DIR_SEPARATOR (*name)) + base = name + 1; + return base; +} + +int +check_executable (const char *path) +{ + struct stat st; + + LTWRAPPER_DEBUGPRINTF (("(check_executable) : %s\n", + path ? (*path ? path : "EMPTY!") : "NULL!")); + if ((!path) || (!*path)) + return 0; + + if ((stat (path, &st) >= 0) + && (st.st_mode & (S_IXUSR | S_IXGRP | S_IXOTH))) + return 1; + else + return 0; +} + +int +make_executable (const char *path) +{ + int rval = 0; + struct stat st; + + LTWRAPPER_DEBUGPRINTF (("(make_executable) : %s\n", + path ? (*path ? path : "EMPTY!") : "NULL!")); + if ((!path) || (!*path)) + return 0; + + if (stat (path, &st) >= 0) + { + rval = chmod (path, st.st_mode | S_IXOTH | S_IXGRP | S_IXUSR); + } + return rval; +} + +/* Searches for the full path of the wrapper. Returns + newly allocated full path name if found, NULL otherwise + Does not chase symlinks, even on platforms that support them. +*/ +char * +find_executable (const char *wrapper) +{ + int has_slash = 0; + const char *p; + const char *p_next; + /* static buffer for getcwd */ + char tmp[LT_PATHMAX + 1]; + int tmp_len; + char *concat_name; + + LTWRAPPER_DEBUGPRINTF (("(find_executable) : %s\n", + wrapper ? (*wrapper ? wrapper : "EMPTY!") : "NULL!")); + + if ((wrapper == NULL) || (*wrapper == '\0')) + return NULL; + + /* Absolute path? */ +#if defined (HAVE_DOS_BASED_FILE_SYSTEM) + if (isalpha ((unsigned char) wrapper[0]) && wrapper[1] == ':') + { + concat_name = xstrdup (wrapper); + if (check_executable (concat_name)) + return concat_name; + XFREE (concat_name); + } + else + { +#endif + if (IS_DIR_SEPARATOR (wrapper[0])) + { + concat_name = xstrdup (wrapper); + if (check_executable (concat_name)) + return concat_name; + XFREE (concat_name); + } +#if defined (HAVE_DOS_BASED_FILE_SYSTEM) + } +#endif + + for (p = wrapper; *p; p++) + if (*p == '/') + { + has_slash = 1; + break; + } + if (!has_slash) + { + /* no slashes; search PATH */ + const char *path = getenv ("PATH"); + if (path != NULL) + { + for (p = path; *p; p = p_next) + { + const char *q; + size_t p_len; + for (q = p; *q; q++) + if (IS_PATH_SEPARATOR (*q)) + break; + p_len = q - p; + p_next = (*q == '\0' ? q : q + 1); + if (p_len == 0) + { + /* empty path: current directory */ + if (getcwd (tmp, LT_PATHMAX) == NULL) + lt_fatal ("getcwd failed"); + tmp_len = strlen (tmp); + concat_name = + XMALLOC (char, tmp_len + 1 + strlen (wrapper) + 1); + memcpy (concat_name, tmp, tmp_len); + concat_name[tmp_len] = '/'; + strcpy (concat_name + tmp_len + 1, wrapper); + } + else + { + concat_name = + XMALLOC (char, p_len + 1 + strlen (wrapper) + 1); + memcpy (concat_name, p, p_len); + concat_name[p_len] = '/'; + strcpy (concat_name + p_len + 1, wrapper); + } + if (check_executable (concat_name)) + return concat_name; + XFREE (concat_name); + } + } + /* not found in PATH; assume curdir */ + } + /* Relative path | not found in path: prepend cwd */ + if (getcwd (tmp, LT_PATHMAX) == NULL) + lt_fatal ("getcwd failed"); + tmp_len = strlen (tmp); + concat_name = XMALLOC (char, tmp_len + 1 + strlen (wrapper) + 1); + memcpy (concat_name, tmp, tmp_len); + concat_name[tmp_len] = '/'; + strcpy (concat_name + tmp_len + 1, wrapper); + + if (check_executable (concat_name)) + return concat_name; + XFREE (concat_name); + return NULL; +} + +char * +chase_symlinks (const char *pathspec) +{ +#ifndef S_ISLNK + return xstrdup (pathspec); +#else + char buf[LT_PATHMAX]; + struct stat s; + char *tmp_pathspec = xstrdup (pathspec); + char *p; + int has_symlinks = 0; + while (strlen (tmp_pathspec) && !has_symlinks) + { + LTWRAPPER_DEBUGPRINTF (("checking path component for symlinks: %s\n", + tmp_pathspec)); + if (lstat (tmp_pathspec, &s) == 0) + { + if (S_ISLNK (s.st_mode) != 0) + { + has_symlinks = 1; + break; + } + + /* search backwards for last DIR_SEPARATOR */ + p = tmp_pathspec + strlen (tmp_pathspec) - 1; + while ((p > tmp_pathspec) && (!IS_DIR_SEPARATOR (*p))) + p--; + if ((p == tmp_pathspec) && (!IS_DIR_SEPARATOR (*p))) + { + /* no more DIR_SEPARATORS left */ + break; + } + *p = '\0'; + } + else + { + char *errstr = strerror (errno); + lt_fatal ("Error accessing file %s (%s)", tmp_pathspec, errstr); + } + } + XFREE (tmp_pathspec); + + if (!has_symlinks) + { + return xstrdup (pathspec); + } + + tmp_pathspec = realpath (pathspec, buf); + if (tmp_pathspec == 0) + { + lt_fatal ("Could not follow symlinks for %s", pathspec); + } + return xstrdup (tmp_pathspec); +#endif +} + +char * +strendzap (char *str, const char *pat) +{ + size_t len, patlen; + + assert (str != NULL); + assert (pat != NULL); + + len = strlen (str); + patlen = strlen (pat); + + if (patlen <= len) + { + str += len - patlen; + if (strcmp (str, pat) == 0) + *str = '\0'; + } + return str; +} + +static void +lt_error_core (int exit_status, const char *mode, + const char *message, va_list ap) +{ + fprintf (stderr, "%s: %s: ", program_name, mode); + vfprintf (stderr, message, ap); + fprintf (stderr, ".\n"); + + if (exit_status >= 0) + exit (exit_status); +} + +void +lt_fatal (const char *message, ...) +{ + va_list ap; + va_start (ap, message); + lt_error_core (EXIT_FAILURE, "FATAL", message, ap); + va_end (ap); +} + +void +lt_setenv (const char *name, const char *value) +{ + LTWRAPPER_DEBUGPRINTF (("(lt_setenv) setting '%s' to '%s'\n", + (name ? name : ""), + (value ? value : ""))); + { +#ifdef HAVE_SETENV + /* always make a copy, for consistency with !HAVE_SETENV */ + char *str = xstrdup (value); + setenv (name, str, 1); +#else + int len = strlen (name) + 1 + strlen (value) + 1; + char *str = XMALLOC (char, len); + sprintf (str, "%s=%s", name, value); + if (putenv (str) != EXIT_SUCCESS) + { + XFREE (str); + } +#endif + } +} + +char * +lt_extend_str (const char *orig_value, const char *add, int to_end) +{ + char *new_value; + if (orig_value && *orig_value) + { + int orig_value_len = strlen (orig_value); + int add_len = strlen (add); + new_value = XMALLOC (char, add_len + orig_value_len + 1); + if (to_end) + { + strcpy (new_value, orig_value); + strcpy (new_value + orig_value_len, add); + } + else + { + strcpy (new_value, add); + strcpy (new_value + add_len, orig_value); + } + } + else + { + new_value = xstrdup (add); + } + return new_value; +} + +int +lt_split_name_value (const char *arg, char** name, char** value) +{ + const char *p; + int len; + if (!arg || !*arg) + return 1; + + p = strchr (arg, (int)'='); + + if (!p) + return 1; + + *value = xstrdup (++p); + + len = strlen (arg) - strlen (*value); + *name = XMALLOC (char, len); + strncpy (*name, arg, len-1); + (*name)[len - 1] = '\0'; + + return 0; +} + +void +lt_opt_process_env_set (const char *arg) +{ + char *name = NULL; + char *value = NULL; + + if (lt_split_name_value (arg, &name, &value) != 0) + { + XFREE (name); + XFREE (value); + lt_fatal ("bad argument for %s: '%s'", env_set_opt, arg); + } + + lt_setenv (name, value); + XFREE (name); + XFREE (value); +} + +void +lt_opt_process_env_prepend (const char *arg) +{ + char *name = NULL; + char *value = NULL; + char *new_value = NULL; + + if (lt_split_name_value (arg, &name, &value) != 0) + { + XFREE (name); + XFREE (value); + lt_fatal ("bad argument for %s: '%s'", env_prepend_opt, arg); + } + + new_value = lt_extend_str (getenv (name), value, 0); + lt_setenv (name, new_value); + XFREE (new_value); + XFREE (name); + XFREE (value); +} + +void +lt_opt_process_env_append (const char *arg) +{ + char *name = NULL; + char *value = NULL; + char *new_value = NULL; + + if (lt_split_name_value (arg, &name, &value) != 0) + { + XFREE (name); + XFREE (value); + lt_fatal ("bad argument for %s: '%s'", env_append_opt, arg); + } + + new_value = lt_extend_str (getenv (name), value, 1); + lt_setenv (name, new_value); + XFREE (new_value); + XFREE (name); + XFREE (value); +} + +void +lt_update_exe_path (const char *name, const char *value) +{ + LTWRAPPER_DEBUGPRINTF (("(lt_update_exe_path) modifying '%s' by prepending '%s'\n", + (name ? name : ""), + (value ? value : ""))); + + if (name && *name && value && *value) + { + char *new_value = lt_extend_str (getenv (name), value, 0); + /* some systems can't cope with a ':'-terminated path #' */ + int len = strlen (new_value); + while (((len = strlen (new_value)) > 0) && IS_PATH_SEPARATOR (new_value[len-1])) + { + new_value[len-1] = '\0'; + } + lt_setenv (name, new_value); + XFREE (new_value); + } +} + +void +lt_update_lib_path (const char *name, const char *value) +{ + LTWRAPPER_DEBUGPRINTF (("(lt_update_lib_path) modifying '%s' by prepending '%s'\n", + (name ? name : ""), + (value ? value : ""))); + + if (name && *name && value && *value) + { + char *new_value = lt_extend_str (getenv (name), value, 0); + lt_setenv (name, new_value); + XFREE (new_value); + } +} + + +EOF +} +# end: func_emit_cwrapperexe_src + +# func_mode_link arg... +func_mode_link () +{ + $opt_debug + case $host in + *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*) + # It is impossible to link a dll without this setting, and + # we shouldn't force the makefile maintainer to figure out + # which system we are compiling for in order to pass an extra + # flag for every libtool invocation. + # allow_undefined=no + + # FIXME: Unfortunately, there are problems with the above when trying + # to make a dll which has undefined symbols, in which case not + # even a static library is built. For now, we need to specify + # -no-undefined on the libtool link line when we can be certain + # that all symbols are satisfied, otherwise we get a static library. + allow_undefined=yes + ;; + *) + allow_undefined=yes + ;; + esac + libtool_args=$nonopt + base_compile="$nonopt $@" + compile_command=$nonopt + finalize_command=$nonopt + + compile_rpath= + finalize_rpath= + compile_shlibpath= + finalize_shlibpath= + convenience= + old_convenience= + deplibs= + old_deplibs= + compiler_flags= + linker_flags= + dllsearchpath= + lib_search_path=`pwd` + inst_prefix_dir= + new_inherited_linker_flags= + + avoid_version=no + dlfiles= + dlprefiles= + dlself=no + export_dynamic=no + export_symbols= + export_symbols_regex= + generated= + libobjs= + ltlibs= + module=no + no_install=no + objs= + non_pic_objects= + precious_files_regex= + prefer_static_libs=no + preload=no + prev= + prevarg= + release= + rpath= + xrpath= + perm_rpath= + temp_rpath= + thread_safe=no + vinfo= + vinfo_number=no + weak_libs= + single_module="${wl}-single_module" + func_infer_tag $base_compile + + # We need to know -static, to get the right output filenames. + for arg + do + case $arg in + -shared) + test "$build_libtool_libs" != yes && \ + func_fatal_configuration "can not build a shared library" + build_old_libs=no + break + ;; + -all-static | -static | -static-libtool-libs) + case $arg in + -all-static) + if test "$build_libtool_libs" = yes && test -z "$link_static_flag"; then + func_warning "complete static linking is impossible in this configuration" + fi + if test -n "$link_static_flag"; then + dlopen_self=$dlopen_self_static + fi + prefer_static_libs=yes + ;; + -static) + if test -z "$pic_flag" && test -n "$link_static_flag"; then + dlopen_self=$dlopen_self_static + fi + prefer_static_libs=built + ;; + -static-libtool-libs) + if test -z "$pic_flag" && test -n "$link_static_flag"; then + dlopen_self=$dlopen_self_static + fi + prefer_static_libs=yes + ;; + esac + build_libtool_libs=no + build_old_libs=yes + break + ;; + esac + done + + # See if our shared archives depend on static archives. + test -n "$old_archive_from_new_cmds" && build_old_libs=yes + + # Go through the arguments, transforming them on the way. + while test "$#" -gt 0; do + arg="$1" + shift + func_quote_for_eval "$arg" + qarg=$func_quote_for_eval_unquoted_result + func_append libtool_args " $func_quote_for_eval_result" + + # If the previous option needs an argument, assign it. + if test -n "$prev"; then + case $prev in + output) + func_append compile_command " @OUTPUT@" + func_append finalize_command " @OUTPUT@" + ;; + esac + + case $prev in + dlfiles|dlprefiles) + if test "$preload" = no; then + # Add the symbol object into the linking commands. + func_append compile_command " @SYMFILE@" + func_append finalize_command " @SYMFILE@" + preload=yes + fi + case $arg in + *.la | *.lo) ;; # We handle these cases below. + force) + if test "$dlself" = no; then + dlself=needless + export_dynamic=yes + fi + prev= + continue + ;; + self) + if test "$prev" = dlprefiles; then + dlself=yes + elif test "$prev" = dlfiles && test "$dlopen_self" != yes; then + dlself=yes + else + dlself=needless + export_dynamic=yes + fi + prev= + continue + ;; + *) + if test "$prev" = dlfiles; then + dlfiles="$dlfiles $arg" + else + dlprefiles="$dlprefiles $arg" + fi + prev= + continue + ;; + esac + ;; + expsyms) + export_symbols="$arg" + test -f "$arg" \ + || func_fatal_error "symbol file \`$arg' does not exist" + prev= + continue + ;; + expsyms_regex) + export_symbols_regex="$arg" + prev= + continue + ;; + framework) + case $host in + *-*-darwin*) + case "$deplibs " in + *" $qarg.ltframework "*) ;; + *) deplibs="$deplibs $qarg.ltframework" # this is fixed later + ;; + esac + ;; + esac + prev= + continue + ;; + inst_prefix) + inst_prefix_dir="$arg" + prev= + continue + ;; + objectlist) + if test -f "$arg"; then + save_arg=$arg + moreargs= + for fil in `cat "$save_arg"` + do +# moreargs="$moreargs $fil" + arg=$fil + # A libtool-controlled object. + + # Check to see that this really is a libtool object. + if func_lalib_unsafe_p "$arg"; then + pic_object= + non_pic_object= + + # Read the .lo file + func_source "$arg" + + if test -z "$pic_object" || + test -z "$non_pic_object" || + test "$pic_object" = none && + test "$non_pic_object" = none; then + func_fatal_error "cannot find name of object for \`$arg'" + fi + + # Extract subdirectory from the argument. + func_dirname "$arg" "/" "" + xdir="$func_dirname_result" + + if test "$pic_object" != none; then + # Prepend the subdirectory the object is found in. + pic_object="$xdir$pic_object" + + if test "$prev" = dlfiles; then + if test "$build_libtool_libs" = yes && test "$dlopen_support" = yes; then + dlfiles="$dlfiles $pic_object" + prev= + continue + else + # If libtool objects are unsupported, then we need to preload. + prev=dlprefiles + fi + fi + + # CHECK ME: I think I busted this. -Ossama + if test "$prev" = dlprefiles; then + # Preload the old-style object. + dlprefiles="$dlprefiles $pic_object" + prev= + fi + + # A PIC object. + func_append libobjs " $pic_object" + arg="$pic_object" + fi + + # Non-PIC object. + if test "$non_pic_object" != none; then + # Prepend the subdirectory the object is found in. + non_pic_object="$xdir$non_pic_object" + + # A standard non-PIC object + func_append non_pic_objects " $non_pic_object" + if test -z "$pic_object" || test "$pic_object" = none ; then + arg="$non_pic_object" + fi + else + # If the PIC object exists, use it instead. + # $xdir was prepended to $pic_object above. + non_pic_object="$pic_object" + func_append non_pic_objects " $non_pic_object" + fi + else + # Only an error if not doing a dry-run. + if $opt_dry_run; then + # Extract subdirectory from the argument. + func_dirname "$arg" "/" "" + xdir="$func_dirname_result" + + func_lo2o "$arg" + pic_object=$xdir$objdir/$func_lo2o_result + non_pic_object=$xdir$func_lo2o_result + func_append libobjs " $pic_object" + func_append non_pic_objects " $non_pic_object" + else + func_fatal_error "\`$arg' is not a valid libtool object" + fi + fi + done + else + func_fatal_error "link input file \`$arg' does not exist" + fi + arg=$save_arg + prev= + continue + ;; + precious_regex) + precious_files_regex="$arg" + prev= + continue + ;; + release) + release="-$arg" + prev= + continue + ;; + rpath | xrpath) + # We need an absolute path. + case $arg in + [\\/]* | [A-Za-z]:[\\/]*) ;; + *) + func_fatal_error "only absolute run-paths are allowed" + ;; + esac + if test "$prev" = rpath; then + case "$rpath " in + *" $arg "*) ;; + *) rpath="$rpath $arg" ;; + esac + else + case "$xrpath " in + *" $arg "*) ;; + *) xrpath="$xrpath $arg" ;; + esac + fi + prev= + continue + ;; + shrext) + shrext_cmds="$arg" + prev= + continue + ;; + weak) + weak_libs="$weak_libs $arg" + prev= + continue + ;; + xcclinker) + linker_flags="$linker_flags $qarg" + compiler_flags="$compiler_flags $qarg" + prev= + func_append compile_command " $qarg" + func_append finalize_command " $qarg" + continue + ;; + xcompiler) + compiler_flags="$compiler_flags $qarg" + prev= + func_append compile_command " $qarg" + func_append finalize_command " $qarg" + continue + ;; + xlinker) + linker_flags="$linker_flags $qarg" + compiler_flags="$compiler_flags $wl$qarg" + prev= + func_append compile_command " $wl$qarg" + func_append finalize_command " $wl$qarg" + continue + ;; + *) + eval "$prev=\"\$arg\"" + prev= + continue + ;; + esac + fi # test -n "$prev" + + prevarg="$arg" + + case $arg in + -all-static) + if test -n "$link_static_flag"; then + # See comment for -static flag below, for more details. + func_append compile_command " $link_static_flag" + func_append finalize_command " $link_static_flag" + fi + continue + ;; + + -allow-undefined) + # FIXME: remove this flag sometime in the future. + func_fatal_error "\`-allow-undefined' must not be used because it is the default" + ;; + + -avoid-version) + avoid_version=yes + continue + ;; + + -dlopen) + prev=dlfiles + continue + ;; + + -dlpreopen) + prev=dlprefiles + continue + ;; + + -export-dynamic) + export_dynamic=yes + continue + ;; + + -export-symbols | -export-symbols-regex) + if test -n "$export_symbols" || test -n "$export_symbols_regex"; then + func_fatal_error "more than one -exported-symbols argument is not allowed" + fi + if test "X$arg" = "X-export-symbols"; then + prev=expsyms + else + prev=expsyms_regex + fi + continue + ;; + + -framework) + prev=framework + continue + ;; + + -inst-prefix-dir) + prev=inst_prefix + continue + ;; + + # The native IRIX linker understands -LANG:*, -LIST:* and -LNO:* + # so, if we see these flags be careful not to treat them like -L + -L[A-Z][A-Z]*:*) + case $with_gcc/$host in + no/*-*-irix* | /*-*-irix*) + func_append compile_command " $arg" + func_append finalize_command " $arg" + ;; + esac + continue + ;; + + -L*) + func_stripname '-L' '' "$arg" + dir=$func_stripname_result + if test -z "$dir"; then + if test "$#" -gt 0; then + func_fatal_error "require no space between \`-L' and \`$1'" + else + func_fatal_error "need path for \`-L' option" + fi + fi + # We need an absolute path. + case $dir in + [\\/]* | [A-Za-z]:[\\/]*) ;; + *) + absdir=`cd "$dir" && pwd` + test -z "$absdir" && \ + func_fatal_error "cannot determine absolute directory name of \`$dir'" + dir="$absdir" + ;; + esac + case "$deplibs " in + *" -L$dir "*) ;; + *) + deplibs="$deplibs -L$dir" + lib_search_path="$lib_search_path $dir" + ;; + esac + case $host in + *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*) + testbindir=`$ECHO "X$dir" | $Xsed -e 's*/lib$*/bin*'` + case :$dllsearchpath: in + *":$dir:"*) ;; + ::) dllsearchpath=$dir;; + *) dllsearchpath="$dllsearchpath:$dir";; + esac + case :$dllsearchpath: in + *":$testbindir:"*) ;; + ::) dllsearchpath=$testbindir;; + *) dllsearchpath="$dllsearchpath:$testbindir";; + esac + ;; + esac + continue + ;; + + -l*) + if test "X$arg" = "X-lc" || test "X$arg" = "X-lm"; then + case $host in + *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-beos* | *-cegcc*) + # These systems don't actually have a C or math library (as such) + continue + ;; + *-*-os2*) + # These systems don't actually have a C library (as such) + test "X$arg" = "X-lc" && continue + ;; + *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*) + # Do not include libc due to us having libc/libc_r. + test "X$arg" = "X-lc" && continue + ;; + *-*-rhapsody* | *-*-darwin1.[012]) + # Rhapsody C and math libraries are in the System framework + deplibs="$deplibs System.ltframework" + continue + ;; + *-*-sco3.2v5* | *-*-sco5v6*) + # Causes problems with __ctype + test "X$arg" = "X-lc" && continue + ;; + *-*-sysv4.2uw2* | *-*-sysv5* | *-*-unixware* | *-*-OpenUNIX*) + # Compiler inserts libc in the correct place for threads to work + test "X$arg" = "X-lc" && continue + ;; + esac + elif test "X$arg" = "X-lc_r"; then + case $host in + *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*) + # Do not include libc_r directly, use -pthread flag. + continue + ;; + esac + fi + deplibs="$deplibs $arg" + continue + ;; + + -module) + module=yes + continue + ;; + + # Tru64 UNIX uses -model [arg] to determine the layout of C++ + # classes, name mangling, and exception handling. + # Darwin uses the -arch flag to determine output architecture. + -model|-arch|-isysroot) + compiler_flags="$compiler_flags $arg" + func_append compile_command " $arg" + func_append finalize_command " $arg" + prev=xcompiler + continue + ;; + + -mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe|-threads) + compiler_flags="$compiler_flags $arg" + func_append compile_command " $arg" + func_append finalize_command " $arg" + case "$new_inherited_linker_flags " in + *" $arg "*) ;; + * ) new_inherited_linker_flags="$new_inherited_linker_flags $arg" ;; + esac + continue + ;; + + -multi_module) + single_module="${wl}-multi_module" + continue + ;; + + -no-fast-install) + fast_install=no + continue + ;; + + -no-install) + case $host in + *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-darwin* | *-cegcc*) + # The PATH hackery in wrapper scripts is required on Windows + # and Darwin in order for the loader to find any dlls it needs. + func_warning "\`-no-install' is ignored for $host" + func_warning "assuming \`-no-fast-install' instead" + fast_install=no + ;; + *) no_install=yes ;; + esac + continue + ;; + + -no-undefined) + allow_undefined=no + continue + ;; + + -objectlist) + prev=objectlist + continue + ;; + + -o) prev=output ;; + + -precious-files-regex) + prev=precious_regex + continue + ;; + + -release) + prev=release + continue + ;; + + -rpath) + prev=rpath + continue + ;; + + -R) + prev=xrpath + continue + ;; + + -R*) + func_stripname '-R' '' "$arg" + dir=$func_stripname_result + # We need an absolute path. + case $dir in + [\\/]* | [A-Za-z]:[\\/]*) ;; + *) + func_fatal_error "only absolute run-paths are allowed" + ;; + esac + case "$xrpath " in + *" $dir "*) ;; + *) xrpath="$xrpath $dir" ;; + esac + continue + ;; + + -shared) + # The effects of -shared are defined in a previous loop. + continue + ;; + + -shrext) + prev=shrext + continue + ;; + + -static | -static-libtool-libs) + # The effects of -static are defined in a previous loop. + # We used to do the same as -all-static on platforms that + # didn't have a PIC flag, but the assumption that the effects + # would be equivalent was wrong. It would break on at least + # Digital Unix and AIX. + continue + ;; + + -thread-safe) + thread_safe=yes + continue + ;; + + -version-info) + prev=vinfo + continue + ;; + + -version-number) + prev=vinfo + vinfo_number=yes + continue + ;; + + -weak) + prev=weak + continue + ;; + + -Wc,*) + func_stripname '-Wc,' '' "$arg" + args=$func_stripname_result + arg= + save_ifs="$IFS"; IFS=',' + for flag in $args; do + IFS="$save_ifs" + func_quote_for_eval "$flag" + arg="$arg $wl$func_quote_for_eval_result" + compiler_flags="$compiler_flags $func_quote_for_eval_result" + done + IFS="$save_ifs" + func_stripname ' ' '' "$arg" + arg=$func_stripname_result + ;; + + -Wl,*) + func_stripname '-Wl,' '' "$arg" + args=$func_stripname_result + arg= + save_ifs="$IFS"; IFS=',' + for flag in $args; do + IFS="$save_ifs" + func_quote_for_eval "$flag" + arg="$arg $wl$func_quote_for_eval_result" + compiler_flags="$compiler_flags $wl$func_quote_for_eval_result" + linker_flags="$linker_flags $func_quote_for_eval_result" + done + IFS="$save_ifs" + func_stripname ' ' '' "$arg" + arg=$func_stripname_result + ;; + + -Xcompiler) + prev=xcompiler + continue + ;; + + -Xlinker) + prev=xlinker + continue + ;; + + -XCClinker) + prev=xcclinker + continue + ;; + + # -msg_* for osf cc + -msg_*) + func_quote_for_eval "$arg" + arg="$func_quote_for_eval_result" + ;; + + # -64, -mips[0-9] enable 64-bit mode on the SGI compiler + # -r[0-9][0-9]* specifies the processor on the SGI compiler + # -xarch=*, -xtarget=* enable 64-bit mode on the Sun compiler + # +DA*, +DD* enable 64-bit mode on the HP compiler + # -q* pass through compiler args for the IBM compiler + # -m*, -t[45]*, -txscale* pass through architecture-specific + # compiler args for GCC + # -F/path gives path to uninstalled frameworks, gcc on darwin + # -p, -pg, --coverage, -fprofile-* pass through profiling flag for GCC + # @file GCC response files + -64|-mips[0-9]|-r[0-9][0-9]*|-xarch=*|-xtarget=*|+DA*|+DD*|-q*|-m*| \ + -t[45]*|-txscale*|-p|-pg|--coverage|-fprofile-*|-F*|@*) + func_quote_for_eval "$arg" + arg="$func_quote_for_eval_result" + func_append compile_command " $arg" + func_append finalize_command " $arg" + compiler_flags="$compiler_flags $arg" + continue + ;; + + # Some other compiler flag. + -* | +*) + func_quote_for_eval "$arg" + arg="$func_quote_for_eval_result" + ;; + + *.$objext) + # A standard object. + objs="$objs $arg" + ;; + + *.lo) + # A libtool-controlled object. + + # Check to see that this really is a libtool object. + if func_lalib_unsafe_p "$arg"; then + pic_object= + non_pic_object= + + # Read the .lo file + func_source "$arg" + + if test -z "$pic_object" || + test -z "$non_pic_object" || + test "$pic_object" = none && + test "$non_pic_object" = none; then + func_fatal_error "cannot find name of object for \`$arg'" + fi + + # Extract subdirectory from the argument. + func_dirname "$arg" "/" "" + xdir="$func_dirname_result" + + if test "$pic_object" != none; then + # Prepend the subdirectory the object is found in. + pic_object="$xdir$pic_object" + + if test "$prev" = dlfiles; then + if test "$build_libtool_libs" = yes && test "$dlopen_support" = yes; then + dlfiles="$dlfiles $pic_object" + prev= + continue + else + # If libtool objects are unsupported, then we need to preload. + prev=dlprefiles + fi + fi + + # CHECK ME: I think I busted this. -Ossama + if test "$prev" = dlprefiles; then + # Preload the old-style object. + dlprefiles="$dlprefiles $pic_object" + prev= + fi + + # A PIC object. + func_append libobjs " $pic_object" + arg="$pic_object" + fi + + # Non-PIC object. + if test "$non_pic_object" != none; then + # Prepend the subdirectory the object is found in. + non_pic_object="$xdir$non_pic_object" + + # A standard non-PIC object + func_append non_pic_objects " $non_pic_object" + if test -z "$pic_object" || test "$pic_object" = none ; then + arg="$non_pic_object" + fi + else + # If the PIC object exists, use it instead. + # $xdir was prepended to $pic_object above. + non_pic_object="$pic_object" + func_append non_pic_objects " $non_pic_object" + fi + else + # Only an error if not doing a dry-run. + if $opt_dry_run; then + # Extract subdirectory from the argument. + func_dirname "$arg" "/" "" + xdir="$func_dirname_result" + + func_lo2o "$arg" + pic_object=$xdir$objdir/$func_lo2o_result + non_pic_object=$xdir$func_lo2o_result + func_append libobjs " $pic_object" + func_append non_pic_objects " $non_pic_object" + else + func_fatal_error "\`$arg' is not a valid libtool object" + fi + fi + ;; + + *.$libext) + # An archive. + deplibs="$deplibs $arg" + old_deplibs="$old_deplibs $arg" + continue + ;; + + *.la) + # A libtool-controlled library. + + if test "$prev" = dlfiles; then + # This library was specified with -dlopen. + dlfiles="$dlfiles $arg" + prev= + elif test "$prev" = dlprefiles; then + # The library was specified with -dlpreopen. + dlprefiles="$dlprefiles $arg" + prev= + else + deplibs="$deplibs $arg" + fi + continue + ;; + + # Some other compiler argument. + *) + # Unknown arguments in both finalize_command and compile_command need + # to be aesthetically quoted because they are evaled later. + func_quote_for_eval "$arg" + arg="$func_quote_for_eval_result" + ;; + esac # arg + + # Now actually substitute the argument into the commands. + if test -n "$arg"; then + func_append compile_command " $arg" + func_append finalize_command " $arg" + fi + done # argument parsing loop + + test -n "$prev" && \ + func_fatal_help "the \`$prevarg' option requires an argument" + + if test "$export_dynamic" = yes && test -n "$export_dynamic_flag_spec"; then + eval arg=\"$export_dynamic_flag_spec\" + func_append compile_command " $arg" + func_append finalize_command " $arg" + fi + + oldlibs= + # calculate the name of the file, without its directory + func_basename "$output" + outputname="$func_basename_result" + libobjs_save="$libobjs" + + if test -n "$shlibpath_var"; then + # get the directories listed in $shlibpath_var + eval shlib_search_path=\`\$ECHO \"X\${$shlibpath_var}\" \| \$Xsed -e \'s/:/ /g\'\` + else + shlib_search_path= + fi + eval sys_lib_search_path=\"$sys_lib_search_path_spec\" + eval sys_lib_dlsearch_path=\"$sys_lib_dlsearch_path_spec\" + + func_dirname "$output" "/" "" + output_objdir="$func_dirname_result$objdir" + # Create the object directory. + func_mkdir_p "$output_objdir" + + # Determine the type of output + case $output in + "") + func_fatal_help "you must specify an output file" + ;; + *.$libext) linkmode=oldlib ;; + *.lo | *.$objext) linkmode=obj ;; + *.la) linkmode=lib ;; + *) linkmode=prog ;; # Anything else should be a program. + esac + + specialdeplibs= + + libs= + # Find all interdependent deplibs by searching for libraries + # that are linked more than once (e.g. -la -lb -la) + for deplib in $deplibs; do + if $opt_duplicate_deps ; then + case "$libs " in + *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;; + esac + fi + libs="$libs $deplib" + done + + if test "$linkmode" = lib; then + libs="$predeps $libs $compiler_lib_search_path $postdeps" + + # Compute libraries that are listed more than once in $predeps + # $postdeps and mark them as special (i.e., whose duplicates are + # not to be eliminated). + pre_post_deps= + if $opt_duplicate_compiler_generated_deps; then + for pre_post_dep in $predeps $postdeps; do + case "$pre_post_deps " in + *" $pre_post_dep "*) specialdeplibs="$specialdeplibs $pre_post_deps" ;; + esac + pre_post_deps="$pre_post_deps $pre_post_dep" + done + fi + pre_post_deps= + fi + + deplibs= + newdependency_libs= + newlib_search_path= + need_relink=no # whether we're linking any uninstalled libtool libraries + notinst_deplibs= # not-installed libtool libraries + notinst_path= # paths that contain not-installed libtool libraries + + case $linkmode in + lib) + passes="conv dlpreopen link" + for file in $dlfiles $dlprefiles; do + case $file in + *.la) ;; + *) + func_fatal_help "libraries can \`-dlopen' only libtool libraries: $file" + ;; + esac + done + ;; + prog) + compile_deplibs= + finalize_deplibs= + alldeplibs=no + newdlfiles= + newdlprefiles= + passes="conv scan dlopen dlpreopen link" + ;; + *) passes="conv" + ;; + esac + + for pass in $passes; do + # The preopen pass in lib mode reverses $deplibs; put it back here + # so that -L comes before libs that need it for instance... + if test "$linkmode,$pass" = "lib,link"; then + ## FIXME: Find the place where the list is rebuilt in the wrong + ## order, and fix it there properly + tmp_deplibs= + for deplib in $deplibs; do + tmp_deplibs="$deplib $tmp_deplibs" + done + deplibs="$tmp_deplibs" + fi + + if test "$linkmode,$pass" = "lib,link" || + test "$linkmode,$pass" = "prog,scan"; then + libs="$deplibs" + deplibs= + fi + if test "$linkmode" = prog; then + case $pass in + dlopen) libs="$dlfiles" ;; + dlpreopen) libs="$dlprefiles" ;; + link) libs="$deplibs %DEPLIBS% $dependency_libs" ;; + esac + fi + if test "$linkmode,$pass" = "lib,dlpreopen"; then + # Collect and forward deplibs of preopened libtool libs + for lib in $dlprefiles; do + # Ignore non-libtool-libs + dependency_libs= + case $lib in + *.la) func_source "$lib" ;; + esac + + # Collect preopened libtool deplibs, except any this library + # has declared as weak libs + for deplib in $dependency_libs; do + deplib_base=`$ECHO "X$deplib" | $Xsed -e "$basename"` + case " $weak_libs " in + *" $deplib_base "*) ;; + *) deplibs="$deplibs $deplib" ;; + esac + done + done + libs="$dlprefiles" + fi + if test "$pass" = dlopen; then + # Collect dlpreopened libraries + save_deplibs="$deplibs" + deplibs= + fi + + for deplib in $libs; do + lib= + found=no + case $deplib in + -mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe|-threads) + if test "$linkmode,$pass" = "prog,link"; then + compile_deplibs="$deplib $compile_deplibs" + finalize_deplibs="$deplib $finalize_deplibs" + else + compiler_flags="$compiler_flags $deplib" + if test "$linkmode" = lib ; then + case "$new_inherited_linker_flags " in + *" $deplib "*) ;; + * ) new_inherited_linker_flags="$new_inherited_linker_flags $deplib" ;; + esac + fi + fi + continue + ;; + -l*) + if test "$linkmode" != lib && test "$linkmode" != prog; then + func_warning "\`-l' is ignored for archives/objects" + continue + fi + func_stripname '-l' '' "$deplib" + name=$func_stripname_result + if test "$linkmode" = lib; then + searchdirs="$newlib_search_path $lib_search_path $compiler_lib_search_dirs $sys_lib_search_path $shlib_search_path" + else + searchdirs="$newlib_search_path $lib_search_path $sys_lib_search_path $shlib_search_path" + fi + for searchdir in $searchdirs; do + for search_ext in .la $std_shrext .so .a; do + # Search the libtool library + lib="$searchdir/lib${name}${search_ext}" + if test -f "$lib"; then + if test "$search_ext" = ".la"; then + found=yes + else + found=no + fi + break 2 + fi + done + done + if test "$found" != yes; then + # deplib doesn't seem to be a libtool library + if test "$linkmode,$pass" = "prog,link"; then + compile_deplibs="$deplib $compile_deplibs" + finalize_deplibs="$deplib $finalize_deplibs" + else + deplibs="$deplib $deplibs" + test "$linkmode" = lib && newdependency_libs="$deplib $newdependency_libs" + fi + continue + else # deplib is a libtool library + # If $allow_libtool_libs_with_static_runtimes && $deplib is a stdlib, + # We need to do some special things here, and not later. + if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then + case " $predeps $postdeps " in + *" $deplib "*) + if func_lalib_p "$lib"; then + library_names= + old_library= + func_source "$lib" + for l in $old_library $library_names; do + ll="$l" + done + if test "X$ll" = "X$old_library" ; then # only static version available + found=no + func_dirname "$lib" "" "." + ladir="$func_dirname_result" + lib=$ladir/$old_library + if test "$linkmode,$pass" = "prog,link"; then + compile_deplibs="$deplib $compile_deplibs" + finalize_deplibs="$deplib $finalize_deplibs" + else + deplibs="$deplib $deplibs" + test "$linkmode" = lib && newdependency_libs="$deplib $newdependency_libs" + fi + continue + fi + fi + ;; + *) ;; + esac + fi + fi + ;; # -l + *.ltframework) + if test "$linkmode,$pass" = "prog,link"; then + compile_deplibs="$deplib $compile_deplibs" + finalize_deplibs="$deplib $finalize_deplibs" + else + deplibs="$deplib $deplibs" + if test "$linkmode" = lib ; then + case "$new_inherited_linker_flags " in + *" $deplib "*) ;; + * ) new_inherited_linker_flags="$new_inherited_linker_flags $deplib" ;; + esac + fi + fi + continue + ;; + -L*) + case $linkmode in + lib) + deplibs="$deplib $deplibs" + test "$pass" = conv && continue + newdependency_libs="$deplib $newdependency_libs" + func_stripname '-L' '' "$deplib" + newlib_search_path="$newlib_search_path $func_stripname_result" + ;; + prog) + if test "$pass" = conv; then + deplibs="$deplib $deplibs" + continue + fi + if test "$pass" = scan; then + deplibs="$deplib $deplibs" + else + compile_deplibs="$deplib $compile_deplibs" + finalize_deplibs="$deplib $finalize_deplibs" + fi + func_stripname '-L' '' "$deplib" + newlib_search_path="$newlib_search_path $func_stripname_result" + ;; + *) + func_warning "\`-L' is ignored for archives/objects" + ;; + esac # linkmode + continue + ;; # -L + -R*) + if test "$pass" = link; then + func_stripname '-R' '' "$deplib" + dir=$func_stripname_result + # Make sure the xrpath contains only unique directories. + case "$xrpath " in + *" $dir "*) ;; + *) xrpath="$xrpath $dir" ;; + esac + fi + deplibs="$deplib $deplibs" + continue + ;; + *.la) lib="$deplib" ;; + *.$libext) + if test "$pass" = conv; then + deplibs="$deplib $deplibs" + continue + fi + case $linkmode in + lib) + # Linking convenience modules into shared libraries is allowed, + # but linking other static libraries is non-portable. + case " $dlpreconveniencelibs " in + *" $deplib "*) ;; + *) + valid_a_lib=no + case $deplibs_check_method in + match_pattern*) + set dummy $deplibs_check_method; shift + match_pattern_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"` + if eval "\$ECHO \"X$deplib\"" 2>/dev/null | $Xsed -e 10q \ + | $EGREP "$match_pattern_regex" > /dev/null; then + valid_a_lib=yes + fi + ;; + pass_all) + valid_a_lib=yes + ;; + esac + if test "$valid_a_lib" != yes; then + $ECHO + $ECHO "*** Warning: Trying to link with static lib archive $deplib." + $ECHO "*** I have the capability to make that library automatically link in when" + $ECHO "*** you link to this library. But I can only do this if you have a" + $ECHO "*** shared version of the library, which you do not appear to have" + $ECHO "*** because the file extensions .$libext of this argument makes me believe" + $ECHO "*** that it is just a static archive that I should not use here." + else + $ECHO + $ECHO "*** Warning: Linking the shared library $output against the" + $ECHO "*** static library $deplib is not portable!" + deplibs="$deplib $deplibs" + fi + ;; + esac + continue + ;; + prog) + if test "$pass" != link; then + deplibs="$deplib $deplibs" + else + compile_deplibs="$deplib $compile_deplibs" + finalize_deplibs="$deplib $finalize_deplibs" + fi + continue + ;; + esac # linkmode + ;; # *.$libext + *.lo | *.$objext) + if test "$pass" = conv; then + deplibs="$deplib $deplibs" + elif test "$linkmode" = prog; then + if test "$pass" = dlpreopen || test "$dlopen_support" != yes || test "$build_libtool_libs" = no; then + # If there is no dlopen support or we're linking statically, + # we need to preload. + newdlprefiles="$newdlprefiles $deplib" + compile_deplibs="$deplib $compile_deplibs" + finalize_deplibs="$deplib $finalize_deplibs" + else + newdlfiles="$newdlfiles $deplib" + fi + fi + continue + ;; + %DEPLIBS%) + alldeplibs=yes + continue + ;; + esac # case $deplib + + if test "$found" = yes || test -f "$lib"; then : + else + func_fatal_error "cannot find the library \`$lib' or unhandled argument \`$deplib'" + fi + + # Check to see that this really is a libtool archive. + func_lalib_unsafe_p "$lib" \ + || func_fatal_error "\`$lib' is not a valid libtool archive" + + func_dirname "$lib" "" "." + ladir="$func_dirname_result" + + dlname= + dlopen= + dlpreopen= + libdir= + library_names= + old_library= + inherited_linker_flags= + # If the library was installed with an old release of libtool, + # it will not redefine variables installed, or shouldnotlink + installed=yes + shouldnotlink=no + avoidtemprpath= + + + # Read the .la file + func_source "$lib" + + # Convert "-framework foo" to "foo.ltframework" + if test -n "$inherited_linker_flags"; then + tmp_inherited_linker_flags=`$ECHO "X$inherited_linker_flags" | $Xsed -e 's/-framework \([^ $]*\)/\1.ltframework/g'` + for tmp_inherited_linker_flag in $tmp_inherited_linker_flags; do + case " $new_inherited_linker_flags " in + *" $tmp_inherited_linker_flag "*) ;; + *) new_inherited_linker_flags="$new_inherited_linker_flags $tmp_inherited_linker_flag";; + esac + done + fi + dependency_libs=`$ECHO "X $dependency_libs" | $Xsed -e 's% \([^ $]*\).ltframework% -framework \1%g'` + if test "$linkmode,$pass" = "lib,link" || + test "$linkmode,$pass" = "prog,scan" || + { test "$linkmode" != prog && test "$linkmode" != lib; }; then + test -n "$dlopen" && dlfiles="$dlfiles $dlopen" + test -n "$dlpreopen" && dlprefiles="$dlprefiles $dlpreopen" + fi + + if test "$pass" = conv; then + # Only check for convenience libraries + deplibs="$lib $deplibs" + if test -z "$libdir"; then + if test -z "$old_library"; then + func_fatal_error "cannot find name of link library for \`$lib'" + fi + # It is a libtool convenience library, so add in its objects. + convenience="$convenience $ladir/$objdir/$old_library" + old_convenience="$old_convenience $ladir/$objdir/$old_library" + elif test "$linkmode" != prog && test "$linkmode" != lib; then + func_fatal_error "\`$lib' is not a convenience library" + fi + tmp_libs= + for deplib in $dependency_libs; do + deplibs="$deplib $deplibs" + if $opt_duplicate_deps ; then + case "$tmp_libs " in + *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;; + esac + fi + tmp_libs="$tmp_libs $deplib" + done + continue + fi # $pass = conv + + + # Get the name of the library we link against. + linklib= + for l in $old_library $library_names; do + linklib="$l" + done + if test -z "$linklib"; then + func_fatal_error "cannot find name of link library for \`$lib'" + fi + + # This library was specified with -dlopen. + if test "$pass" = dlopen; then + if test -z "$libdir"; then + func_fatal_error "cannot -dlopen a convenience library: \`$lib'" + fi + if test -z "$dlname" || + test "$dlopen_support" != yes || + test "$build_libtool_libs" = no; then + # If there is no dlname, no dlopen support or we're linking + # statically, we need to preload. We also need to preload any + # dependent libraries so libltdl's deplib preloader doesn't + # bomb out in the load deplibs phase. + dlprefiles="$dlprefiles $lib $dependency_libs" + else + newdlfiles="$newdlfiles $lib" + fi + continue + fi # $pass = dlopen + + # We need an absolute path. + case $ladir in + [\\/]* | [A-Za-z]:[\\/]*) abs_ladir="$ladir" ;; + *) + abs_ladir=`cd "$ladir" && pwd` + if test -z "$abs_ladir"; then + func_warning "cannot determine absolute directory name of \`$ladir'" + func_warning "passing it literally to the linker, although it might fail" + abs_ladir="$ladir" + fi + ;; + esac + func_basename "$lib" + laname="$func_basename_result" + + # Find the relevant object directory and library name. + if test "X$installed" = Xyes; then + if test ! -f "$libdir/$linklib" && test -f "$abs_ladir/$linklib"; then + func_warning "library \`$lib' was moved." + dir="$ladir" + absdir="$abs_ladir" + libdir="$abs_ladir" + else + dir="$libdir" + absdir="$libdir" + fi + test "X$hardcode_automatic" = Xyes && avoidtemprpath=yes + else + if test ! -f "$ladir/$objdir/$linklib" && test -f "$abs_ladir/$linklib"; then + dir="$ladir" + absdir="$abs_ladir" + # Remove this search path later + notinst_path="$notinst_path $abs_ladir" + else + dir="$ladir/$objdir" + absdir="$abs_ladir/$objdir" + # Remove this search path later + notinst_path="$notinst_path $abs_ladir" + fi + fi # $installed = yes + func_stripname 'lib' '.la' "$laname" + name=$func_stripname_result + + # This library was specified with -dlpreopen. + if test "$pass" = dlpreopen; then + if test -z "$libdir" && test "$linkmode" = prog; then + func_fatal_error "only libraries may -dlpreopen a convenience library: \`$lib'" + fi + # Prefer using a static library (so that no silly _DYNAMIC symbols + # are required to link). + if test -n "$old_library"; then + newdlprefiles="$newdlprefiles $dir/$old_library" + # Keep a list of preopened convenience libraries to check + # that they are being used correctly in the link pass. + test -z "$libdir" && \ + dlpreconveniencelibs="$dlpreconveniencelibs $dir/$old_library" + # Otherwise, use the dlname, so that lt_dlopen finds it. + elif test -n "$dlname"; then + newdlprefiles="$newdlprefiles $dir/$dlname" + else + newdlprefiles="$newdlprefiles $dir/$linklib" + fi + fi # $pass = dlpreopen + + if test -z "$libdir"; then + # Link the convenience library + if test "$linkmode" = lib; then + deplibs="$dir/$old_library $deplibs" + elif test "$linkmode,$pass" = "prog,link"; then + compile_deplibs="$dir/$old_library $compile_deplibs" + finalize_deplibs="$dir/$old_library $finalize_deplibs" + else + deplibs="$lib $deplibs" # used for prog,scan pass + fi + continue + fi + + + if test "$linkmode" = prog && test "$pass" != link; then + newlib_search_path="$newlib_search_path $ladir" + deplibs="$lib $deplibs" + + linkalldeplibs=no + if test "$link_all_deplibs" != no || test -z "$library_names" || + test "$build_libtool_libs" = no; then + linkalldeplibs=yes + fi + + tmp_libs= + for deplib in $dependency_libs; do + case $deplib in + -L*) func_stripname '-L' '' "$deplib" + newlib_search_path="$newlib_search_path $func_stripname_result" + ;; + esac + # Need to link against all dependency_libs? + if test "$linkalldeplibs" = yes; then + deplibs="$deplib $deplibs" + else + # Need to hardcode shared library paths + # or/and link against static libraries + newdependency_libs="$deplib $newdependency_libs" + fi + if $opt_duplicate_deps ; then + case "$tmp_libs " in + *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;; + esac + fi + tmp_libs="$tmp_libs $deplib" + done # for deplib + continue + fi # $linkmode = prog... + + if test "$linkmode,$pass" = "prog,link"; then + if test -n "$library_names" && + { { test "$prefer_static_libs" = no || + test "$prefer_static_libs,$installed" = "built,yes"; } || + test -z "$old_library"; }; then + # We need to hardcode the library path + if test -n "$shlibpath_var" && test -z "$avoidtemprpath" ; then + # Make sure the rpath contains only unique directories. + case "$temp_rpath:" in + *"$absdir:"*) ;; + *) temp_rpath="$temp_rpath$absdir:" ;; + esac + fi + + # Hardcode the library path. + # Skip directories that are in the system default run-time + # search path. + case " $sys_lib_dlsearch_path " in + *" $absdir "*) ;; + *) + case "$compile_rpath " in + *" $absdir "*) ;; + *) compile_rpath="$compile_rpath $absdir" + esac + ;; + esac + case " $sys_lib_dlsearch_path " in + *" $libdir "*) ;; + *) + case "$finalize_rpath " in + *" $libdir "*) ;; + *) finalize_rpath="$finalize_rpath $libdir" + esac + ;; + esac + fi # $linkmode,$pass = prog,link... + + if test "$alldeplibs" = yes && + { test "$deplibs_check_method" = pass_all || + { test "$build_libtool_libs" = yes && + test -n "$library_names"; }; }; then + # We only need to search for static libraries + continue + fi + fi + + link_static=no # Whether the deplib will be linked statically + use_static_libs=$prefer_static_libs + if test "$use_static_libs" = built && test "$installed" = yes; then + use_static_libs=no + fi + if test -n "$library_names" && + { test "$use_static_libs" = no || test -z "$old_library"; }; then + case $host in + *cygwin* | *mingw* | *cegcc*) + # No point in relinking DLLs because paths are not encoded + notinst_deplibs="$notinst_deplibs $lib" + need_relink=no + ;; + *) + if test "$installed" = no; then + notinst_deplibs="$notinst_deplibs $lib" + need_relink=yes + fi + ;; + esac + # This is a shared library + + # Warn about portability, can't link against -module's on some + # systems (darwin). Don't bleat about dlopened modules though! + dlopenmodule="" + for dlpremoduletest in $dlprefiles; do + if test "X$dlpremoduletest" = "X$lib"; then + dlopenmodule="$dlpremoduletest" + break + fi + done + if test -z "$dlopenmodule" && test "$shouldnotlink" = yes && test "$pass" = link; then + $ECHO + if test "$linkmode" = prog; then + $ECHO "*** Warning: Linking the executable $output against the loadable module" + else + $ECHO "*** Warning: Linking the shared library $output against the loadable module" + fi + $ECHO "*** $linklib is not portable!" + fi + if test "$linkmode" = lib && + test "$hardcode_into_libs" = yes; then + # Hardcode the library path. + # Skip directories that are in the system default run-time + # search path. + case " $sys_lib_dlsearch_path " in + *" $absdir "*) ;; + *) + case "$compile_rpath " in + *" $absdir "*) ;; + *) compile_rpath="$compile_rpath $absdir" + esac + ;; + esac + case " $sys_lib_dlsearch_path " in + *" $libdir "*) ;; + *) + case "$finalize_rpath " in + *" $libdir "*) ;; + *) finalize_rpath="$finalize_rpath $libdir" + esac + ;; + esac + fi + + if test -n "$old_archive_from_expsyms_cmds"; then + # figure out the soname + set dummy $library_names + shift + realname="$1" + shift + libname=`eval "\\$ECHO \"$libname_spec\""` + # use dlname if we got it. it's perfectly good, no? + if test -n "$dlname"; then + soname="$dlname" + elif test -n "$soname_spec"; then + # bleh windows + case $host in + *cygwin* | mingw* | *cegcc*) + func_arith $current - $age + major=$func_arith_result + versuffix="-$major" + ;; + esac + eval soname=\"$soname_spec\" + else + soname="$realname" + fi + + # Make a new name for the extract_expsyms_cmds to use + soroot="$soname" + func_basename "$soroot" + soname="$func_basename_result" + func_stripname 'lib' '.dll' "$soname" + newlib=libimp-$func_stripname_result.a + + # If the library has no export list, then create one now + if test -f "$output_objdir/$soname-def"; then : + else + func_verbose "extracting exported symbol list from \`$soname'" + func_execute_cmds "$extract_expsyms_cmds" 'exit $?' + fi + + # Create $newlib + if test -f "$output_objdir/$newlib"; then :; else + func_verbose "generating import library for \`$soname'" + func_execute_cmds "$old_archive_from_expsyms_cmds" 'exit $?' + fi + # make sure the library variables are pointing to the new library + dir=$output_objdir + linklib=$newlib + fi # test -n "$old_archive_from_expsyms_cmds" + + if test "$linkmode" = prog || test "$mode" != relink; then + add_shlibpath= + add_dir= + add= + lib_linked=yes + case $hardcode_action in + immediate | unsupported) + if test "$hardcode_direct" = no; then + add="$dir/$linklib" + case $host in + *-*-sco3.2v5.0.[024]*) add_dir="-L$dir" ;; + *-*-sysv4*uw2*) add_dir="-L$dir" ;; + *-*-sysv5OpenUNIX* | *-*-sysv5UnixWare7.[01].[10]* | \ + *-*-unixware7*) add_dir="-L$dir" ;; + *-*-darwin* ) + # if the lib is a (non-dlopened) module then we can not + # link against it, someone is ignoring the earlier warnings + if /usr/bin/file -L $add 2> /dev/null | + $GREP ": [^:]* bundle" >/dev/null ; then + if test "X$dlopenmodule" != "X$lib"; then + $ECHO "*** Warning: lib $linklib is a module, not a shared library" + if test -z "$old_library" ; then + $ECHO + $ECHO "*** And there doesn't seem to be a static archive available" + $ECHO "*** The link will probably fail, sorry" + else + add="$dir/$old_library" + fi + elif test -n "$old_library"; then + add="$dir/$old_library" + fi + fi + esac + elif test "$hardcode_minus_L" = no; then + case $host in + *-*-sunos*) add_shlibpath="$dir" ;; + esac + add_dir="-L$dir" + add="-l$name" + elif test "$hardcode_shlibpath_var" = no; then + add_shlibpath="$dir" + add="-l$name" + else + lib_linked=no + fi + ;; + relink) + if test "$hardcode_direct" = yes && + test "$hardcode_direct_absolute" = no; then + add="$dir/$linklib" + elif test "$hardcode_minus_L" = yes; then + add_dir="-L$dir" + # Try looking first in the location we're being installed to. + if test -n "$inst_prefix_dir"; then + case $libdir in + [\\/]*) + add_dir="$add_dir -L$inst_prefix_dir$libdir" + ;; + esac + fi + add="-l$name" + elif test "$hardcode_shlibpath_var" = yes; then + add_shlibpath="$dir" + add="-l$name" + else + lib_linked=no + fi + ;; + *) lib_linked=no ;; + esac + + if test "$lib_linked" != yes; then + func_fatal_configuration "unsupported hardcode properties" + fi + + if test -n "$add_shlibpath"; then + case :$compile_shlibpath: in + *":$add_shlibpath:"*) ;; + *) compile_shlibpath="$compile_shlibpath$add_shlibpath:" ;; + esac + fi + if test "$linkmode" = prog; then + test -n "$add_dir" && compile_deplibs="$add_dir $compile_deplibs" + test -n "$add" && compile_deplibs="$add $compile_deplibs" + else + test -n "$add_dir" && deplibs="$add_dir $deplibs" + test -n "$add" && deplibs="$add $deplibs" + if test "$hardcode_direct" != yes && + test "$hardcode_minus_L" != yes && + test "$hardcode_shlibpath_var" = yes; then + case :$finalize_shlibpath: in + *":$libdir:"*) ;; + *) finalize_shlibpath="$finalize_shlibpath$libdir:" ;; + esac + fi + fi + fi + + if test "$linkmode" = prog || test "$mode" = relink; then + add_shlibpath= + add_dir= + add= + # Finalize command for both is simple: just hardcode it. + if test "$hardcode_direct" = yes && + test "$hardcode_direct_absolute" = no; then + add="$libdir/$linklib" + elif test "$hardcode_minus_L" = yes; then + add_dir="-L$libdir" + add="-l$name" + elif test "$hardcode_shlibpath_var" = yes; then + case :$finalize_shlibpath: in + *":$libdir:"*) ;; + *) finalize_shlibpath="$finalize_shlibpath$libdir:" ;; + esac + add="-l$name" + elif test "$hardcode_automatic" = yes; then + if test -n "$inst_prefix_dir" && + test -f "$inst_prefix_dir$libdir/$linklib" ; then + add="$inst_prefix_dir$libdir/$linklib" + else + add="$libdir/$linklib" + fi + else + # We cannot seem to hardcode it, guess we'll fake it. + add_dir="-L$libdir" + # Try looking first in the location we're being installed to. + if test -n "$inst_prefix_dir"; then + case $libdir in + [\\/]*) + add_dir="$add_dir -L$inst_prefix_dir$libdir" + ;; + esac + fi + add="-l$name" + fi + + if test "$linkmode" = prog; then + test -n "$add_dir" && finalize_deplibs="$add_dir $finalize_deplibs" + test -n "$add" && finalize_deplibs="$add $finalize_deplibs" + else + test -n "$add_dir" && deplibs="$add_dir $deplibs" + test -n "$add" && deplibs="$add $deplibs" + fi + fi + elif test "$linkmode" = prog; then + # Here we assume that one of hardcode_direct or hardcode_minus_L + # is not unsupported. This is valid on all known static and + # shared platforms. + if test "$hardcode_direct" != unsupported; then + test -n "$old_library" && linklib="$old_library" + compile_deplibs="$dir/$linklib $compile_deplibs" + finalize_deplibs="$dir/$linklib $finalize_deplibs" + else + compile_deplibs="-l$name -L$dir $compile_deplibs" + finalize_deplibs="-l$name -L$dir $finalize_deplibs" + fi + elif test "$build_libtool_libs" = yes; then + # Not a shared library + if test "$deplibs_check_method" != pass_all; then + # We're trying link a shared library against a static one + # but the system doesn't support it. + + # Just print a warning and add the library to dependency_libs so + # that the program can be linked against the static library. + $ECHO + $ECHO "*** Warning: This system can not link to static lib archive $lib." + $ECHO "*** I have the capability to make that library automatically link in when" + $ECHO "*** you link to this library. But I can only do this if you have a" + $ECHO "*** shared version of the library, which you do not appear to have." + if test "$module" = yes; then + $ECHO "*** But as you try to build a module library, libtool will still create " + $ECHO "*** a static module, that should work as long as the dlopening application" + $ECHO "*** is linked with the -dlopen flag to resolve symbols at runtime." + if test -z "$global_symbol_pipe"; then + $ECHO + $ECHO "*** However, this would only work if libtool was able to extract symbol" + $ECHO "*** lists from a program, using \`nm' or equivalent, but libtool could" + $ECHO "*** not find such a program. So, this module is probably useless." + $ECHO "*** \`nm' from GNU binutils and a full rebuild may help." + fi + if test "$build_old_libs" = no; then + build_libtool_libs=module + build_old_libs=yes + else + build_libtool_libs=no + fi + fi + else + deplibs="$dir/$old_library $deplibs" + link_static=yes + fi + fi # link shared/static library? + + if test "$linkmode" = lib; then + if test -n "$dependency_libs" && + { test "$hardcode_into_libs" != yes || + test "$build_old_libs" = yes || + test "$link_static" = yes; }; then + # Extract -R from dependency_libs + temp_deplibs= + for libdir in $dependency_libs; do + case $libdir in + -R*) func_stripname '-R' '' "$libdir" + temp_xrpath=$func_stripname_result + case " $xrpath " in + *" $temp_xrpath "*) ;; + *) xrpath="$xrpath $temp_xrpath";; + esac;; + *) temp_deplibs="$temp_deplibs $libdir";; + esac + done + dependency_libs="$temp_deplibs" + fi + + newlib_search_path="$newlib_search_path $absdir" + # Link against this library + test "$link_static" = no && newdependency_libs="$abs_ladir/$laname $newdependency_libs" + # ... and its dependency_libs + tmp_libs= + for deplib in $dependency_libs; do + newdependency_libs="$deplib $newdependency_libs" + if $opt_duplicate_deps ; then + case "$tmp_libs " in + *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;; + esac + fi + tmp_libs="$tmp_libs $deplib" + done + + if test "$link_all_deplibs" != no; then + # Add the search paths of all dependency libraries + for deplib in $dependency_libs; do + case $deplib in + -L*) path="$deplib" ;; + *.la) + func_dirname "$deplib" "" "." + dir="$func_dirname_result" + # We need an absolute path. + case $dir in + [\\/]* | [A-Za-z]:[\\/]*) absdir="$dir" ;; + *) + absdir=`cd "$dir" && pwd` + if test -z "$absdir"; then + func_warning "cannot determine absolute directory name of \`$dir'" + absdir="$dir" + fi + ;; + esac + if $GREP "^installed=no" $deplib > /dev/null; then + case $host in + *-*-darwin*) + depdepl= + eval deplibrary_names=`${SED} -n -e 's/^library_names=\(.*\)$/\1/p' $deplib` + if test -n "$deplibrary_names" ; then + for tmp in $deplibrary_names ; do + depdepl=$tmp + done + if test -f "$absdir/$objdir/$depdepl" ; then + depdepl="$absdir/$objdir/$depdepl" + darwin_install_name=`${OTOOL} -L $depdepl | awk '{if (NR == 2) {print $1;exit}}'` + if test -z "$darwin_install_name"; then + darwin_install_name=`${OTOOL64} -L $depdepl | awk '{if (NR == 2) {print $1;exit}}'` + fi + compiler_flags="$compiler_flags ${wl}-dylib_file ${wl}${darwin_install_name}:${depdepl}" + linker_flags="$linker_flags -dylib_file ${darwin_install_name}:${depdepl}" + path= + fi + fi + ;; + *) + path="-L$absdir/$objdir" + ;; + esac + else + eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $deplib` + test -z "$libdir" && \ + func_fatal_error "\`$deplib' is not a valid libtool archive" + test "$absdir" != "$libdir" && \ + func_warning "\`$deplib' seems to be moved" + + path="-L$absdir" + fi + ;; + esac + case " $deplibs " in + *" $path "*) ;; + *) deplibs="$path $deplibs" ;; + esac + done + fi # link_all_deplibs != no + fi # linkmode = lib + done # for deplib in $libs + if test "$pass" = link; then + if test "$linkmode" = "prog"; then + compile_deplibs="$new_inherited_linker_flags $compile_deplibs" + finalize_deplibs="$new_inherited_linker_flags $finalize_deplibs" + else + compiler_flags="$compiler_flags "`$ECHO "X $new_inherited_linker_flags" | $Xsed -e 's% \([^ $]*\).ltframework% -framework \1%g'` + fi + fi + dependency_libs="$newdependency_libs" + if test "$pass" = dlpreopen; then + # Link the dlpreopened libraries before other libraries + for deplib in $save_deplibs; do + deplibs="$deplib $deplibs" + done + fi + if test "$pass" != dlopen; then + if test "$pass" != conv; then + # Make sure lib_search_path contains only unique directories. + lib_search_path= + for dir in $newlib_search_path; do + case "$lib_search_path " in + *" $dir "*) ;; + *) lib_search_path="$lib_search_path $dir" ;; + esac + done + newlib_search_path= + fi + + if test "$linkmode,$pass" != "prog,link"; then + vars="deplibs" + else + vars="compile_deplibs finalize_deplibs" + fi + for var in $vars dependency_libs; do + # Add libraries to $var in reverse order + eval tmp_libs=\"\$$var\" + new_libs= + for deplib in $tmp_libs; do + # FIXME: Pedantically, this is the right thing to do, so + # that some nasty dependency loop isn't accidentally + # broken: + #new_libs="$deplib $new_libs" + # Pragmatically, this seems to cause very few problems in + # practice: + case $deplib in + -L*) new_libs="$deplib $new_libs" ;; + -R*) ;; + *) + # And here is the reason: when a library appears more + # than once as an explicit dependence of a library, or + # is implicitly linked in more than once by the + # compiler, it is considered special, and multiple + # occurrences thereof are not removed. Compare this + # with having the same library being listed as a + # dependency of multiple other libraries: in this case, + # we know (pedantically, we assume) the library does not + # need to be listed more than once, so we keep only the + # last copy. This is not always right, but it is rare + # enough that we require users that really mean to play + # such unportable linking tricks to link the library + # using -Wl,-lname, so that libtool does not consider it + # for duplicate removal. + case " $specialdeplibs " in + *" $deplib "*) new_libs="$deplib $new_libs" ;; + *) + case " $new_libs " in + *" $deplib "*) ;; + *) new_libs="$deplib $new_libs" ;; + esac + ;; + esac + ;; + esac + done + tmp_libs= + for deplib in $new_libs; do + case $deplib in + -L*) + case " $tmp_libs " in + *" $deplib "*) ;; + *) tmp_libs="$tmp_libs $deplib" ;; + esac + ;; + *) tmp_libs="$tmp_libs $deplib" ;; + esac + done + eval $var=\"$tmp_libs\" + done # for var + fi + # Last step: remove runtime libs from dependency_libs + # (they stay in deplibs) + tmp_libs= + for i in $dependency_libs ; do + case " $predeps $postdeps $compiler_lib_search_path " in + *" $i "*) + i="" + ;; + esac + if test -n "$i" ; then + tmp_libs="$tmp_libs $i" + fi + done + dependency_libs=$tmp_libs + done # for pass + if test "$linkmode" = prog; then + dlfiles="$newdlfiles" + fi + if test "$linkmode" = prog || test "$linkmode" = lib; then + dlprefiles="$newdlprefiles" + fi + + case $linkmode in + oldlib) + if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then + func_warning "\`-dlopen' is ignored for archives" + fi + + case " $deplibs" in + *\ -l* | *\ -L*) + func_warning "\`-l' and \`-L' are ignored for archives" ;; + esac + + test -n "$rpath" && \ + func_warning "\`-rpath' is ignored for archives" + + test -n "$xrpath" && \ + func_warning "\`-R' is ignored for archives" + + test -n "$vinfo" && \ + func_warning "\`-version-info/-version-number' is ignored for archives" + + test -n "$release" && \ + func_warning "\`-release' is ignored for archives" + + test -n "$export_symbols$export_symbols_regex" && \ + func_warning "\`-export-symbols' is ignored for archives" + + # Now set the variables for building old libraries. + build_libtool_libs=no + oldlibs="$output" + objs="$objs$old_deplibs" + ;; + + lib) + # Make sure we only generate libraries of the form `libNAME.la'. + case $outputname in + lib*) + func_stripname 'lib' '.la' "$outputname" + name=$func_stripname_result + eval shared_ext=\"$shrext_cmds\" + eval libname=\"$libname_spec\" + ;; + *) + test "$module" = no && \ + func_fatal_help "libtool library \`$output' must begin with \`lib'" + + if test "$need_lib_prefix" != no; then + # Add the "lib" prefix for modules if required + func_stripname '' '.la' "$outputname" + name=$func_stripname_result + eval shared_ext=\"$shrext_cmds\" + eval libname=\"$libname_spec\" + else + func_stripname '' '.la' "$outputname" + libname=$func_stripname_result + fi + ;; + esac + + if test -n "$objs"; then + if test "$deplibs_check_method" != pass_all; then + func_fatal_error "cannot build libtool library \`$output' from non-libtool objects on this host:$objs" + else + $ECHO + $ECHO "*** Warning: Linking the shared library $output against the non-libtool" + $ECHO "*** objects $objs is not portable!" + libobjs="$libobjs $objs" + fi + fi + + test "$dlself" != no && \ + func_warning "\`-dlopen self' is ignored for libtool libraries" + + set dummy $rpath + shift + test "$#" -gt 1 && \ + func_warning "ignoring multiple \`-rpath's for a libtool library" + + install_libdir="$1" + + oldlibs= + if test -z "$rpath"; then + if test "$build_libtool_libs" = yes; then + # Building a libtool convenience library. + # Some compilers have problems with a `.al' extension so + # convenience libraries should have the same extension an + # archive normally would. + oldlibs="$output_objdir/$libname.$libext $oldlibs" + build_libtool_libs=convenience + build_old_libs=yes + fi + + test -n "$vinfo" && \ + func_warning "\`-version-info/-version-number' is ignored for convenience libraries" + + test -n "$release" && \ + func_warning "\`-release' is ignored for convenience libraries" + else + + # Parse the version information argument. + save_ifs="$IFS"; IFS=':' + set dummy $vinfo 0 0 0 + shift + IFS="$save_ifs" + + test -n "$7" && \ + func_fatal_help "too many parameters to \`-version-info'" + + # convert absolute version numbers to libtool ages + # this retains compatibility with .la files and attempts + # to make the code below a bit more comprehensible + + case $vinfo_number in + yes) + number_major="$1" + number_minor="$2" + number_revision="$3" + # + # There are really only two kinds -- those that + # use the current revision as the major version + # and those that subtract age and use age as + # a minor version. But, then there is irix + # which has an extra 1 added just for fun + # + case $version_type in + darwin|linux|osf|windows|none) + func_arith $number_major + $number_minor + current=$func_arith_result + age="$number_minor" + revision="$number_revision" + ;; + freebsd-aout|freebsd-elf|sunos) + current="$number_major" + revision="$number_minor" + age="0" + ;; + irix|nonstopux) + func_arith $number_major + $number_minor + current=$func_arith_result + age="$number_minor" + revision="$number_minor" + lt_irix_increment=no + ;; + esac + ;; + no) + current="$1" + revision="$2" + age="$3" + ;; + esac + + # Check that each of the things are valid numbers. + case $current in + 0|[1-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-9][0-9][0-9][0-9]|[1-9][0-9][0-9][0-9][0-9]) ;; + *) + func_error "CURRENT \`$current' must be a nonnegative integer" + func_fatal_error "\`$vinfo' is not valid version information" + ;; + esac + + case $revision in + 0|[1-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-9][0-9][0-9][0-9]|[1-9][0-9][0-9][0-9][0-9]) ;; + *) + func_error "REVISION \`$revision' must be a nonnegative integer" + func_fatal_error "\`$vinfo' is not valid version information" + ;; + esac + + case $age in + 0|[1-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-9][0-9][0-9][0-9]|[1-9][0-9][0-9][0-9][0-9]) ;; + *) + func_error "AGE \`$age' must be a nonnegative integer" + func_fatal_error "\`$vinfo' is not valid version information" + ;; + esac + + if test "$age" -gt "$current"; then + func_error "AGE \`$age' is greater than the current interface number \`$current'" + func_fatal_error "\`$vinfo' is not valid version information" + fi + + # Calculate the version variables. + major= + versuffix= + verstring= + case $version_type in + none) ;; + + darwin) + # Like Linux, but with the current version available in + # verstring for coding it into the library header + func_arith $current - $age + major=.$func_arith_result + versuffix="$major.$age.$revision" + # Darwin ld doesn't like 0 for these options... + func_arith $current + 1 + minor_current=$func_arith_result + xlcverstring="${wl}-compatibility_version ${wl}$minor_current ${wl}-current_version ${wl}$minor_current.$revision" + verstring="-compatibility_version $minor_current -current_version $minor_current.$revision" + ;; + + freebsd-aout) + major=".$current" + versuffix=".$current.$revision"; + ;; + + freebsd-elf) + major=".$current" + versuffix=".$current" + ;; + + irix | nonstopux) + if test "X$lt_irix_increment" = "Xno"; then + func_arith $current - $age + else + func_arith $current - $age + 1 + fi + major=$func_arith_result + + case $version_type in + nonstopux) verstring_prefix=nonstopux ;; + *) verstring_prefix=sgi ;; + esac + verstring="$verstring_prefix$major.$revision" + + # Add in all the interfaces that we are compatible with. + loop=$revision + while test "$loop" -ne 0; do + func_arith $revision - $loop + iface=$func_arith_result + func_arith $loop - 1 + loop=$func_arith_result + verstring="$verstring_prefix$major.$iface:$verstring" + done + + # Before this point, $major must not contain `.'. + major=.$major + versuffix="$major.$revision" + ;; + + linux) + func_arith $current - $age + major=.$func_arith_result + versuffix="$major.$age.$revision" + ;; + + osf) + func_arith $current - $age + major=.$func_arith_result + versuffix=".$current.$age.$revision" + verstring="$current.$age.$revision" + + # Add in all the interfaces that we are compatible with. + loop=$age + while test "$loop" -ne 0; do + func_arith $current - $loop + iface=$func_arith_result + func_arith $loop - 1 + loop=$func_arith_result + verstring="$verstring:${iface}.0" + done + + # Make executables depend on our current version. + verstring="$verstring:${current}.0" + ;; + + qnx) + major=".$current" + versuffix=".$current" + ;; + + sunos) + major=".$current" + versuffix=".$current.$revision" + ;; + + windows) + # Use '-' rather than '.', since we only want one + # extension on DOS 8.3 filesystems. + func_arith $current - $age + major=$func_arith_result + versuffix="-$major" + ;; + + *) + func_fatal_configuration "unknown library version type \`$version_type'" + ;; + esac + + # Clear the version info if we defaulted, and they specified a release. + if test -z "$vinfo" && test -n "$release"; then + major= + case $version_type in + darwin) + # we can't check for "0.0" in archive_cmds due to quoting + # problems, so we reset it completely + verstring= + ;; + *) + verstring="0.0" + ;; + esac + if test "$need_version" = no; then + versuffix= + else + versuffix=".0.0" + fi + fi + + # Remove version info from name if versioning should be avoided + if test "$avoid_version" = yes && test "$need_version" = no; then + major= + versuffix= + verstring="" + fi + + # Check to see if the archive will have undefined symbols. + if test "$allow_undefined" = yes; then + if test "$allow_undefined_flag" = unsupported; then + func_warning "undefined symbols not allowed in $host shared libraries" + build_libtool_libs=no + build_old_libs=yes + fi + else + # Don't allow undefined symbols. + allow_undefined_flag="$no_undefined_flag" + fi + + fi + + func_generate_dlsyms "$libname" "$libname" "yes" + libobjs="$libobjs $symfileobj" + test "X$libobjs" = "X " && libobjs= + + if test "$mode" != relink; then + # Remove our outputs, but don't remove object files since they + # may have been created when compiling PIC objects. + removelist= + tempremovelist=`$ECHO "$output_objdir/*"` + for p in $tempremovelist; do + case $p in + *.$objext | *.gcno) + ;; + $output_objdir/$outputname | $output_objdir/$libname.* | $output_objdir/${libname}${release}.*) + if test "X$precious_files_regex" != "X"; then + if $ECHO "$p" | $EGREP -e "$precious_files_regex" >/dev/null 2>&1 + then + continue + fi + fi + removelist="$removelist $p" + ;; + *) ;; + esac + done + test -n "$removelist" && \ + func_show_eval "${RM}r \$removelist" + fi + + # Now set the variables for building old libraries. + if test "$build_old_libs" = yes && test "$build_libtool_libs" != convenience ; then + oldlibs="$oldlibs $output_objdir/$libname.$libext" + + # Transform .lo files to .o files. + oldobjs="$objs "`$ECHO "X$libobjs" | $SP2NL | $Xsed -e '/\.'${libext}'$/d' -e "$lo2o" | $NL2SP` + fi + + # Eliminate all temporary directories. + #for path in $notinst_path; do + # lib_search_path=`$ECHO "X$lib_search_path " | $Xsed -e "s% $path % %g"` + # deplibs=`$ECHO "X$deplibs " | $Xsed -e "s% -L$path % %g"` + # dependency_libs=`$ECHO "X$dependency_libs " | $Xsed -e "s% -L$path % %g"` + #done + + if test -n "$xrpath"; then + # If the user specified any rpath flags, then add them. + temp_xrpath= + for libdir in $xrpath; do + temp_xrpath="$temp_xrpath -R$libdir" + case "$finalize_rpath " in + *" $libdir "*) ;; + *) finalize_rpath="$finalize_rpath $libdir" ;; + esac + done + if test "$hardcode_into_libs" != yes || test "$build_old_libs" = yes; then + dependency_libs="$temp_xrpath $dependency_libs" + fi + fi + + # Make sure dlfiles contains only unique files that won't be dlpreopened + old_dlfiles="$dlfiles" + dlfiles= + for lib in $old_dlfiles; do + case " $dlprefiles $dlfiles " in + *" $lib "*) ;; + *) dlfiles="$dlfiles $lib" ;; + esac + done + + # Make sure dlprefiles contains only unique files + old_dlprefiles="$dlprefiles" + dlprefiles= + for lib in $old_dlprefiles; do + case "$dlprefiles " in + *" $lib "*) ;; + *) dlprefiles="$dlprefiles $lib" ;; + esac + done + + if test "$build_libtool_libs" = yes; then + if test -n "$rpath"; then + case $host in + *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-beos* | *-cegcc*) + # these systems don't actually have a c library (as such)! + ;; + *-*-rhapsody* | *-*-darwin1.[012]) + # Rhapsody C library is in the System framework + deplibs="$deplibs System.ltframework" + ;; + *-*-netbsd*) + # Don't link with libc until the a.out ld.so is fixed. + ;; + *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*) + # Do not include libc due to us having libc/libc_r. + ;; + *-*-sco3.2v5* | *-*-sco5v6*) + # Causes problems with __ctype + ;; + *-*-sysv4.2uw2* | *-*-sysv5* | *-*-unixware* | *-*-OpenUNIX*) + # Compiler inserts libc in the correct place for threads to work + ;; + *) + # Add libc to deplibs on all other systems if necessary. + if test "$build_libtool_need_lc" = "yes"; then + deplibs="$deplibs -lc" + fi + ;; + esac + fi + + # Transform deplibs into only deplibs that can be linked in shared. + name_save=$name + libname_save=$libname + release_save=$release + versuffix_save=$versuffix + major_save=$major + # I'm not sure if I'm treating the release correctly. I think + # release should show up in the -l (ie -lgmp5) so we don't want to + # add it in twice. Is that correct? + release="" + versuffix="" + major="" + newdeplibs= + droppeddeps=no + case $deplibs_check_method in + pass_all) + # Don't check for shared/static. Everything works. + # This might be a little naive. We might want to check + # whether the library exists or not. But this is on + # osf3 & osf4 and I'm not really sure... Just + # implementing what was already the behavior. + newdeplibs=$deplibs + ;; + test_compile) + # This code stresses the "libraries are programs" paradigm to its + # limits. Maybe even breaks it. We compile a program, linking it + # against the deplibs as a proxy for the library. Then we can check + # whether they linked in statically or dynamically with ldd. + $opt_dry_run || $RM conftest.c + cat > conftest.c </dev/null` + for potent_lib in $potential_libs; do + # Follow soft links. + if ls -lLd "$potent_lib" 2>/dev/null | + $GREP " -> " >/dev/null; then + continue + fi + # The statement above tries to avoid entering an + # endless loop below, in case of cyclic links. + # We might still enter an endless loop, since a link + # loop can be closed while we follow links, + # but so what? + potlib="$potent_lib" + while test -h "$potlib" 2>/dev/null; do + potliblink=`ls -ld $potlib | ${SED} 's/.* -> //'` + case $potliblink in + [\\/]* | [A-Za-z]:[\\/]*) potlib="$potliblink";; + *) potlib=`$ECHO "X$potlib" | $Xsed -e 's,[^/]*$,,'`"$potliblink";; + esac + done + if eval $file_magic_cmd \"\$potlib\" 2>/dev/null | + $SED -e 10q | + $EGREP "$file_magic_regex" > /dev/null; then + newdeplibs="$newdeplibs $a_deplib" + a_deplib="" + break 2 + fi + done + done + fi + if test -n "$a_deplib" ; then + droppeddeps=yes + $ECHO + $ECHO "*** Warning: linker path does not have real file for library $a_deplib." + $ECHO "*** I have the capability to make that library automatically link in when" + $ECHO "*** you link to this library. But I can only do this if you have a" + $ECHO "*** shared version of the library, which you do not appear to have" + $ECHO "*** because I did check the linker path looking for a file starting" + if test -z "$potlib" ; then + $ECHO "*** with $libname but no candidates were found. (...for file magic test)" + else + $ECHO "*** with $libname and none of the candidates passed a file format test" + $ECHO "*** using a file magic. Last file checked: $potlib" + fi + fi + ;; + *) + # Add a -L argument. + newdeplibs="$newdeplibs $a_deplib" + ;; + esac + done # Gone through all deplibs. + ;; + match_pattern*) + set dummy $deplibs_check_method; shift + match_pattern_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"` + for a_deplib in $deplibs; do + case $a_deplib in + -l*) + func_stripname -l '' "$a_deplib" + name=$func_stripname_result + if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then + case " $predeps $postdeps " in + *" $a_deplib "*) + newdeplibs="$newdeplibs $a_deplib" + a_deplib="" + ;; + esac + fi + if test -n "$a_deplib" ; then + libname=`eval "\\$ECHO \"$libname_spec\""` + for i in $lib_search_path $sys_lib_search_path $shlib_search_path; do + potential_libs=`ls $i/$libname[.-]* 2>/dev/null` + for potent_lib in $potential_libs; do + potlib="$potent_lib" # see symlink-check above in file_magic test + if eval "\$ECHO \"X$potent_lib\"" 2>/dev/null | $Xsed -e 10q | \ + $EGREP "$match_pattern_regex" > /dev/null; then + newdeplibs="$newdeplibs $a_deplib" + a_deplib="" + break 2 + fi + done + done + fi + if test -n "$a_deplib" ; then + droppeddeps=yes + $ECHO + $ECHO "*** Warning: linker path does not have real file for library $a_deplib." + $ECHO "*** I have the capability to make that library automatically link in when" + $ECHO "*** you link to this library. But I can only do this if you have a" + $ECHO "*** shared version of the library, which you do not appear to have" + $ECHO "*** because I did check the linker path looking for a file starting" + if test -z "$potlib" ; then + $ECHO "*** with $libname but no candidates were found. (...for regex pattern test)" + else + $ECHO "*** with $libname and none of the candidates passed a file format test" + $ECHO "*** using a regex pattern. Last file checked: $potlib" + fi + fi + ;; + *) + # Add a -L argument. + newdeplibs="$newdeplibs $a_deplib" + ;; + esac + done # Gone through all deplibs. + ;; + none | unknown | *) + newdeplibs="" + tmp_deplibs=`$ECHO "X $deplibs" | $Xsed \ + -e 's/ -lc$//' -e 's/ -[LR][^ ]*//g'` + if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then + for i in $predeps $postdeps ; do + # can't use Xsed below, because $i might contain '/' + tmp_deplibs=`$ECHO "X $tmp_deplibs" | $Xsed -e "s,$i,,"` + done + fi + if $ECHO "X $tmp_deplibs" | $Xsed -e 's/[ ]//g' | + $GREP . >/dev/null; then + $ECHO + if test "X$deplibs_check_method" = "Xnone"; then + $ECHO "*** Warning: inter-library dependencies are not supported in this platform." + else + $ECHO "*** Warning: inter-library dependencies are not known to be supported." + fi + $ECHO "*** All declared inter-library dependencies are being dropped." + droppeddeps=yes + fi + ;; + esac + versuffix=$versuffix_save + major=$major_save + release=$release_save + libname=$libname_save + name=$name_save + + case $host in + *-*-rhapsody* | *-*-darwin1.[012]) + # On Rhapsody replace the C library with the System framework + newdeplibs=`$ECHO "X $newdeplibs" | $Xsed -e 's/ -lc / System.ltframework /'` + ;; + esac + + if test "$droppeddeps" = yes; then + if test "$module" = yes; then + $ECHO + $ECHO "*** Warning: libtool could not satisfy all declared inter-library" + $ECHO "*** dependencies of module $libname. Therefore, libtool will create" + $ECHO "*** a static module, that should work as long as the dlopening" + $ECHO "*** application is linked with the -dlopen flag." + if test -z "$global_symbol_pipe"; then + $ECHO + $ECHO "*** However, this would only work if libtool was able to extract symbol" + $ECHO "*** lists from a program, using \`nm' or equivalent, but libtool could" + $ECHO "*** not find such a program. So, this module is probably useless." + $ECHO "*** \`nm' from GNU binutils and a full rebuild may help." + fi + if test "$build_old_libs" = no; then + oldlibs="$output_objdir/$libname.$libext" + build_libtool_libs=module + build_old_libs=yes + else + build_libtool_libs=no + fi + else + $ECHO "*** The inter-library dependencies that have been dropped here will be" + $ECHO "*** automatically added whenever a program is linked with this library" + $ECHO "*** or is declared to -dlopen it." + + if test "$allow_undefined" = no; then + $ECHO + $ECHO "*** Since this library must not contain undefined symbols," + $ECHO "*** because either the platform does not support them or" + $ECHO "*** it was explicitly requested with -no-undefined," + $ECHO "*** libtool will only create a static version of it." + if test "$build_old_libs" = no; then + oldlibs="$output_objdir/$libname.$libext" + build_libtool_libs=module + build_old_libs=yes + else + build_libtool_libs=no + fi + fi + fi + fi + # Done checking deplibs! + deplibs=$newdeplibs + fi + # Time to change all our "foo.ltframework" stuff back to "-framework foo" + case $host in + *-*-darwin*) + newdeplibs=`$ECHO "X $newdeplibs" | $Xsed -e 's% \([^ $]*\).ltframework% -framework \1%g'` + new_inherited_linker_flags=`$ECHO "X $new_inherited_linker_flags" | $Xsed -e 's% \([^ $]*\).ltframework% -framework \1%g'` + deplibs=`$ECHO "X $deplibs" | $Xsed -e 's% \([^ $]*\).ltframework% -framework \1%g'` + ;; + esac + + # move library search paths that coincide with paths to not yet + # installed libraries to the beginning of the library search list + new_libs= + for path in $notinst_path; do + case " $new_libs " in + *" -L$path/$objdir "*) ;; + *) + case " $deplibs " in + *" -L$path/$objdir "*) + new_libs="$new_libs -L$path/$objdir" ;; + esac + ;; + esac + done + for deplib in $deplibs; do + case $deplib in + -L*) + case " $new_libs " in + *" $deplib "*) ;; + *) new_libs="$new_libs $deplib" ;; + esac + ;; + *) new_libs="$new_libs $deplib" ;; + esac + done + deplibs="$new_libs" + + # All the library-specific variables (install_libdir is set above). + library_names= + old_library= + dlname= + + # Test again, we may have decided not to build it any more + if test "$build_libtool_libs" = yes; then + if test "$hardcode_into_libs" = yes; then + # Hardcode the library paths + hardcode_libdirs= + dep_rpath= + rpath="$finalize_rpath" + test "$mode" != relink && rpath="$compile_rpath$rpath" + for libdir in $rpath; do + if test -n "$hardcode_libdir_flag_spec"; then + if test -n "$hardcode_libdir_separator"; then + if test -z "$hardcode_libdirs"; then + hardcode_libdirs="$libdir" + else + # Just accumulate the unique libdirs. + case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in + *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) + ;; + *) + hardcode_libdirs="$hardcode_libdirs$hardcode_libdir_separator$libdir" + ;; + esac + fi + else + eval flag=\"$hardcode_libdir_flag_spec\" + dep_rpath="$dep_rpath $flag" + fi + elif test -n "$runpath_var"; then + case "$perm_rpath " in + *" $libdir "*) ;; + *) perm_rpath="$perm_rpath $libdir" ;; + esac + fi + done + # Substitute the hardcoded libdirs into the rpath. + if test -n "$hardcode_libdir_separator" && + test -n "$hardcode_libdirs"; then + libdir="$hardcode_libdirs" + if test -n "$hardcode_libdir_flag_spec_ld"; then + eval dep_rpath=\"$hardcode_libdir_flag_spec_ld\" + else + eval dep_rpath=\"$hardcode_libdir_flag_spec\" + fi + fi + if test -n "$runpath_var" && test -n "$perm_rpath"; then + # We should set the runpath_var. + rpath= + for dir in $perm_rpath; do + rpath="$rpath$dir:" + done + eval "$runpath_var='$rpath\$$runpath_var'; export $runpath_var" + fi + test -n "$dep_rpath" && deplibs="$dep_rpath $deplibs" + fi + + shlibpath="$finalize_shlibpath" + test "$mode" != relink && shlibpath="$compile_shlibpath$shlibpath" + if test -n "$shlibpath"; then + eval "$shlibpath_var='$shlibpath\$$shlibpath_var'; export $shlibpath_var" + fi + + # Get the real and link names of the library. + eval shared_ext=\"$shrext_cmds\" + eval library_names=\"$library_names_spec\" + set dummy $library_names + shift + realname="$1" + shift + + if test -n "$soname_spec"; then + eval soname=\"$soname_spec\" + else + soname="$realname" + fi + if test -z "$dlname"; then + dlname=$soname + fi + + lib="$output_objdir/$realname" + linknames= + for link + do + linknames="$linknames $link" + done + + # Use standard objects if they are pic + test -z "$pic_flag" && libobjs=`$ECHO "X$libobjs" | $SP2NL | $Xsed -e "$lo2o" | $NL2SP` + test "X$libobjs" = "X " && libobjs= + + delfiles= + if test -n "$export_symbols" && test -n "$include_expsyms"; then + $opt_dry_run || cp "$export_symbols" "$output_objdir/$libname.uexp" + export_symbols="$output_objdir/$libname.uexp" + delfiles="$delfiles $export_symbols" + fi + + orig_export_symbols= + case $host_os in + cygwin* | mingw* | cegcc*) + if test -n "$export_symbols" && test -z "$export_symbols_regex"; then + # exporting using user supplied symfile + if test "x`$SED 1q $export_symbols`" != xEXPORTS; then + # and it's NOT already a .def file. Must figure out + # which of the given symbols are data symbols and tag + # them as such. So, trigger use of export_symbols_cmds. + # export_symbols gets reassigned inside the "prepare + # the list of exported symbols" if statement, so the + # include_expsyms logic still works. + orig_export_symbols="$export_symbols" + export_symbols= + always_export_symbols=yes + fi + fi + ;; + esac + + # Prepare the list of exported symbols + if test -z "$export_symbols"; then + if test "$always_export_symbols" = yes || test -n "$export_symbols_regex"; then + func_verbose "generating symbol list for \`$libname.la'" + export_symbols="$output_objdir/$libname.exp" + $opt_dry_run || $RM $export_symbols + cmds=$export_symbols_cmds + save_ifs="$IFS"; IFS='~' + for cmd in $cmds; do + IFS="$save_ifs" + eval cmd=\"$cmd\" + func_len " $cmd" + len=$func_len_result + if test "$len" -lt "$max_cmd_len" || test "$max_cmd_len" -le -1; then + func_show_eval "$cmd" 'exit $?' + skipped_export=false + else + # The command line is too long to execute in one step. + func_verbose "using reloadable object file for export list..." + skipped_export=: + # Break out early, otherwise skipped_export may be + # set to false by a later but shorter cmd. + break + fi + done + IFS="$save_ifs" + if test -n "$export_symbols_regex" && test "X$skipped_export" != "X:"; then + func_show_eval '$EGREP -e "$export_symbols_regex" "$export_symbols" > "${export_symbols}T"' + func_show_eval '$MV "${export_symbols}T" "$export_symbols"' + fi + fi + fi + + if test -n "$export_symbols" && test -n "$include_expsyms"; then + tmp_export_symbols="$export_symbols" + test -n "$orig_export_symbols" && tmp_export_symbols="$orig_export_symbols" + $opt_dry_run || eval '$ECHO "X$include_expsyms" | $Xsed | $SP2NL >> "$tmp_export_symbols"' + fi + + if test "X$skipped_export" != "X:" && test -n "$orig_export_symbols"; then + # The given exports_symbols file has to be filtered, so filter it. + func_verbose "filter symbol list for \`$libname.la' to tag DATA exports" + # FIXME: $output_objdir/$libname.filter potentially contains lots of + # 's' commands which not all seds can handle. GNU sed should be fine + # though. Also, the filter scales superlinearly with the number of + # global variables. join(1) would be nice here, but unfortunately + # isn't a blessed tool. + $opt_dry_run || $SED -e '/[ ,]DATA/!d;s,\(.*\)\([ \,].*\),s|^\1$|\1\2|,' < $export_symbols > $output_objdir/$libname.filter + delfiles="$delfiles $export_symbols $output_objdir/$libname.filter" + export_symbols=$output_objdir/$libname.def + $opt_dry_run || $SED -f $output_objdir/$libname.filter < $orig_export_symbols > $export_symbols + fi + + tmp_deplibs= + for test_deplib in $deplibs; do + case " $convenience " in + *" $test_deplib "*) ;; + *) + tmp_deplibs="$tmp_deplibs $test_deplib" + ;; + esac + done + deplibs="$tmp_deplibs" + + if test -n "$convenience"; then + if test -n "$whole_archive_flag_spec" && + test "$compiler_needs_object" = yes && + test -z "$libobjs"; then + # extract the archives, so we have objects to list. + # TODO: could optimize this to just extract one archive. + whole_archive_flag_spec= + fi + if test -n "$whole_archive_flag_spec"; then + save_libobjs=$libobjs + eval libobjs=\"\$libobjs $whole_archive_flag_spec\" + test "X$libobjs" = "X " && libobjs= + else + gentop="$output_objdir/${outputname}x" + generated="$generated $gentop" + + func_extract_archives $gentop $convenience + libobjs="$libobjs $func_extract_archives_result" + test "X$libobjs" = "X " && libobjs= + fi + fi + + if test "$thread_safe" = yes && test -n "$thread_safe_flag_spec"; then + eval flag=\"$thread_safe_flag_spec\" + linker_flags="$linker_flags $flag" + fi + + # Make a backup of the uninstalled library when relinking + if test "$mode" = relink; then + $opt_dry_run || eval '(cd $output_objdir && $RM ${realname}U && $MV $realname ${realname}U)' || exit $? + fi + + # Do each of the archive commands. + if test "$module" = yes && test -n "$module_cmds" ; then + if test -n "$export_symbols" && test -n "$module_expsym_cmds"; then + eval test_cmds=\"$module_expsym_cmds\" + cmds=$module_expsym_cmds + else + eval test_cmds=\"$module_cmds\" + cmds=$module_cmds + fi + else + if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then + eval test_cmds=\"$archive_expsym_cmds\" + cmds=$archive_expsym_cmds + else + eval test_cmds=\"$archive_cmds\" + cmds=$archive_cmds + fi + fi + + if test "X$skipped_export" != "X:" && + func_len " $test_cmds" && + len=$func_len_result && + test "$len" -lt "$max_cmd_len" || test "$max_cmd_len" -le -1; then + : + else + # The command line is too long to link in one step, link piecewise + # or, if using GNU ld and skipped_export is not :, use a linker + # script. + + # Save the value of $output and $libobjs because we want to + # use them later. If we have whole_archive_flag_spec, we + # want to use save_libobjs as it was before + # whole_archive_flag_spec was expanded, because we can't + # assume the linker understands whole_archive_flag_spec. + # This may have to be revisited, in case too many + # convenience libraries get linked in and end up exceeding + # the spec. + if test -z "$convenience" || test -z "$whole_archive_flag_spec"; then + save_libobjs=$libobjs + fi + save_output=$output + output_la=`$ECHO "X$output" | $Xsed -e "$basename"` + + # Clear the reloadable object creation command queue and + # initialize k to one. + test_cmds= + concat_cmds= + objlist= + last_robj= + k=1 + + if test -n "$save_libobjs" && test "X$skipped_export" != "X:" && test "$with_gnu_ld" = yes; then + output=${output_objdir}/${output_la}.lnkscript + func_verbose "creating GNU ld script: $output" + $ECHO 'INPUT (' > $output + for obj in $save_libobjs + do + $ECHO "$obj" >> $output + done + $ECHO ')' >> $output + delfiles="$delfiles $output" + elif test -n "$save_libobjs" && test "X$skipped_export" != "X:" && test "X$file_list_spec" != X; then + output=${output_objdir}/${output_la}.lnk + func_verbose "creating linker input file list: $output" + : > $output + set x $save_libobjs + shift + firstobj= + if test "$compiler_needs_object" = yes; then + firstobj="$1 " + shift + fi + for obj + do + $ECHO "$obj" >> $output + done + delfiles="$delfiles $output" + output=$firstobj\"$file_list_spec$output\" + else + if test -n "$save_libobjs"; then + func_verbose "creating reloadable object files..." + output=$output_objdir/$output_la-${k}.$objext + eval test_cmds=\"$reload_cmds\" + func_len " $test_cmds" + len0=$func_len_result + len=$len0 + + # Loop over the list of objects to be linked. + for obj in $save_libobjs + do + func_len " $obj" + func_arith $len + $func_len_result + len=$func_arith_result + if test "X$objlist" = X || + test "$len" -lt "$max_cmd_len"; then + func_append objlist " $obj" + else + # The command $test_cmds is almost too long, add a + # command to the queue. + if test "$k" -eq 1 ; then + # The first file doesn't have a previous command to add. + eval concat_cmds=\"$reload_cmds $objlist $last_robj\" + else + # All subsequent reloadable object files will link in + # the last one created. + eval concat_cmds=\"\$concat_cmds~$reload_cmds $objlist $last_robj~\$RM $last_robj\" + fi + last_robj=$output_objdir/$output_la-${k}.$objext + func_arith $k + 1 + k=$func_arith_result + output=$output_objdir/$output_la-${k}.$objext + objlist=$obj + func_len " $last_robj" + func_arith $len0 + $func_len_result + len=$func_arith_result + fi + done + # Handle the remaining objects by creating one last + # reloadable object file. All subsequent reloadable object + # files will link in the last one created. + test -z "$concat_cmds" || concat_cmds=$concat_cmds~ + eval concat_cmds=\"\${concat_cmds}$reload_cmds $objlist $last_robj\" + if test -n "$last_robj"; then + eval concat_cmds=\"\${concat_cmds}~\$RM $last_robj\" + fi + delfiles="$delfiles $output" + + else + output= + fi + + if ${skipped_export-false}; then + func_verbose "generating symbol list for \`$libname.la'" + export_symbols="$output_objdir/$libname.exp" + $opt_dry_run || $RM $export_symbols + libobjs=$output + # Append the command to create the export file. + test -z "$concat_cmds" || concat_cmds=$concat_cmds~ + eval concat_cmds=\"\$concat_cmds$export_symbols_cmds\" + if test -n "$last_robj"; then + eval concat_cmds=\"\$concat_cmds~\$RM $last_robj\" + fi + fi + + test -n "$save_libobjs" && + func_verbose "creating a temporary reloadable object file: $output" + + # Loop through the commands generated above and execute them. + save_ifs="$IFS"; IFS='~' + for cmd in $concat_cmds; do + IFS="$save_ifs" + $opt_silent || { + func_quote_for_expand "$cmd" + eval "func_echo $func_quote_for_expand_result" + } + $opt_dry_run || eval "$cmd" || { + lt_exit=$? + + # Restore the uninstalled library and exit + if test "$mode" = relink; then + ( cd "$output_objdir" && \ + $RM "${realname}T" && \ + $MV "${realname}U" "$realname" ) + fi + + exit $lt_exit + } + done + IFS="$save_ifs" + + if test -n "$export_symbols_regex" && ${skipped_export-false}; then + func_show_eval '$EGREP -e "$export_symbols_regex" "$export_symbols" > "${export_symbols}T"' + func_show_eval '$MV "${export_symbols}T" "$export_symbols"' + fi + fi + + if ${skipped_export-false}; then + if test -n "$export_symbols" && test -n "$include_expsyms"; then + tmp_export_symbols="$export_symbols" + test -n "$orig_export_symbols" && tmp_export_symbols="$orig_export_symbols" + $opt_dry_run || eval '$ECHO "X$include_expsyms" | $Xsed | $SP2NL >> "$tmp_export_symbols"' + fi + + if test -n "$orig_export_symbols"; then + # The given exports_symbols file has to be filtered, so filter it. + func_verbose "filter symbol list for \`$libname.la' to tag DATA exports" + # FIXME: $output_objdir/$libname.filter potentially contains lots of + # 's' commands which not all seds can handle. GNU sed should be fine + # though. Also, the filter scales superlinearly with the number of + # global variables. join(1) would be nice here, but unfortunately + # isn't a blessed tool. + $opt_dry_run || $SED -e '/[ ,]DATA/!d;s,\(.*\)\([ \,].*\),s|^\1$|\1\2|,' < $export_symbols > $output_objdir/$libname.filter + delfiles="$delfiles $export_symbols $output_objdir/$libname.filter" + export_symbols=$output_objdir/$libname.def + $opt_dry_run || $SED -f $output_objdir/$libname.filter < $orig_export_symbols > $export_symbols + fi + fi + + libobjs=$output + # Restore the value of output. + output=$save_output + + if test -n "$convenience" && test -n "$whole_archive_flag_spec"; then + eval libobjs=\"\$libobjs $whole_archive_flag_spec\" + test "X$libobjs" = "X " && libobjs= + fi + # Expand the library linking commands again to reset the + # value of $libobjs for piecewise linking. + + # Do each of the archive commands. + if test "$module" = yes && test -n "$module_cmds" ; then + if test -n "$export_symbols" && test -n "$module_expsym_cmds"; then + cmds=$module_expsym_cmds + else + cmds=$module_cmds + fi + else + if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then + cmds=$archive_expsym_cmds + else + cmds=$archive_cmds + fi + fi + fi + + if test -n "$delfiles"; then + # Append the command to remove temporary files to $cmds. + eval cmds=\"\$cmds~\$RM $delfiles\" + fi + + # Add any objects from preloaded convenience libraries + if test -n "$dlprefiles"; then + gentop="$output_objdir/${outputname}x" + generated="$generated $gentop" + + func_extract_archives $gentop $dlprefiles + libobjs="$libobjs $func_extract_archives_result" + test "X$libobjs" = "X " && libobjs= + fi + + save_ifs="$IFS"; IFS='~' + for cmd in $cmds; do + IFS="$save_ifs" + eval cmd=\"$cmd\" + $opt_silent || { + func_quote_for_expand "$cmd" + eval "func_echo $func_quote_for_expand_result" + } + $opt_dry_run || eval "$cmd" || { + lt_exit=$? + + # Restore the uninstalled library and exit + if test "$mode" = relink; then + ( cd "$output_objdir" && \ + $RM "${realname}T" && \ + $MV "${realname}U" "$realname" ) + fi + + exit $lt_exit + } + done + IFS="$save_ifs" + + # Restore the uninstalled library and exit + if test "$mode" = relink; then + $opt_dry_run || eval '(cd $output_objdir && $RM ${realname}T && $MV $realname ${realname}T && $MV ${realname}U $realname)' || exit $? + + if test -n "$convenience"; then + if test -z "$whole_archive_flag_spec"; then + func_show_eval '${RM}r "$gentop"' + fi + fi + + exit $EXIT_SUCCESS + fi + + # Create links to the real library. + for linkname in $linknames; do + if test "$realname" != "$linkname"; then + func_show_eval '(cd "$output_objdir" && $RM "$linkname" && $LN_S "$realname" "$linkname")' 'exit $?' + fi + done + + # If -module or -export-dynamic was specified, set the dlname. + if test "$module" = yes || test "$export_dynamic" = yes; then + # On all known operating systems, these are identical. + dlname="$soname" + fi + fi + ;; + + obj) + if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then + func_warning "\`-dlopen' is ignored for objects" + fi + + case " $deplibs" in + *\ -l* | *\ -L*) + func_warning "\`-l' and \`-L' are ignored for objects" ;; + esac + + test -n "$rpath" && \ + func_warning "\`-rpath' is ignored for objects" + + test -n "$xrpath" && \ + func_warning "\`-R' is ignored for objects" + + test -n "$vinfo" && \ + func_warning "\`-version-info' is ignored for objects" + + test -n "$release" && \ + func_warning "\`-release' is ignored for objects" + + case $output in + *.lo) + test -n "$objs$old_deplibs" && \ + func_fatal_error "cannot build library object \`$output' from non-libtool objects" + + libobj=$output + func_lo2o "$libobj" + obj=$func_lo2o_result + ;; + *) + libobj= + obj="$output" + ;; + esac + + # Delete the old objects. + $opt_dry_run || $RM $obj $libobj + + # Objects from convenience libraries. This assumes + # single-version convenience libraries. Whenever we create + # different ones for PIC/non-PIC, this we'll have to duplicate + # the extraction. + reload_conv_objs= + gentop= + # reload_cmds runs $LD directly, so let us get rid of + # -Wl from whole_archive_flag_spec and hope we can get by with + # turning comma into space.. + wl= + + if test -n "$convenience"; then + if test -n "$whole_archive_flag_spec"; then + eval tmp_whole_archive_flags=\"$whole_archive_flag_spec\" + reload_conv_objs=$reload_objs\ `$ECHO "X$tmp_whole_archive_flags" | $Xsed -e 's|,| |g'` + else + gentop="$output_objdir/${obj}x" + generated="$generated $gentop" + + func_extract_archives $gentop $convenience + reload_conv_objs="$reload_objs $func_extract_archives_result" + fi + fi + + # Create the old-style object. + reload_objs="$objs$old_deplibs "`$ECHO "X$libobjs" | $SP2NL | $Xsed -e '/\.'${libext}$'/d' -e '/\.lib$/d' -e "$lo2o" | $NL2SP`" $reload_conv_objs" ### testsuite: skip nested quoting test + + output="$obj" + func_execute_cmds "$reload_cmds" 'exit $?' + + # Exit if we aren't doing a library object file. + if test -z "$libobj"; then + if test -n "$gentop"; then + func_show_eval '${RM}r "$gentop"' + fi + + exit $EXIT_SUCCESS + fi + + if test "$build_libtool_libs" != yes; then + if test -n "$gentop"; then + func_show_eval '${RM}r "$gentop"' + fi + + # Create an invalid libtool object if no PIC, so that we don't + # accidentally link it into a program. + # $show "echo timestamp > $libobj" + # $opt_dry_run || eval "echo timestamp > $libobj" || exit $? + exit $EXIT_SUCCESS + fi + + if test -n "$pic_flag" || test "$pic_mode" != default; then + # Only do commands if we really have different PIC objects. + reload_objs="$libobjs $reload_conv_objs" + output="$libobj" + func_execute_cmds "$reload_cmds" 'exit $?' + fi + + if test -n "$gentop"; then + func_show_eval '${RM}r "$gentop"' + fi + + exit $EXIT_SUCCESS + ;; + + prog) + case $host in + *cygwin*) func_stripname '' '.exe' "$output" + output=$func_stripname_result.exe;; + esac + test -n "$vinfo" && \ + func_warning "\`-version-info' is ignored for programs" + + test -n "$release" && \ + func_warning "\`-release' is ignored for programs" + + test "$preload" = yes \ + && test "$dlopen_support" = unknown \ + && test "$dlopen_self" = unknown \ + && test "$dlopen_self_static" = unknown && \ + func_warning "\`LT_INIT([dlopen])' not used. Assuming no dlopen support." + + case $host in + *-*-rhapsody* | *-*-darwin1.[012]) + # On Rhapsody replace the C library is the System framework + compile_deplibs=`$ECHO "X $compile_deplibs" | $Xsed -e 's/ -lc / System.ltframework /'` + finalize_deplibs=`$ECHO "X $finalize_deplibs" | $Xsed -e 's/ -lc / System.ltframework /'` + ;; + esac + + case $host in + *-*-darwin*) + # Don't allow lazy linking, it breaks C++ global constructors + # But is supposedly fixed on 10.4 or later (yay!). + if test "$tagname" = CXX ; then + case ${MACOSX_DEPLOYMENT_TARGET-10.0} in + 10.[0123]) + compile_command="$compile_command ${wl}-bind_at_load" + finalize_command="$finalize_command ${wl}-bind_at_load" + ;; + esac + fi + # Time to change all our "foo.ltframework" stuff back to "-framework foo" + compile_deplibs=`$ECHO "X $compile_deplibs" | $Xsed -e 's% \([^ $]*\).ltframework% -framework \1%g'` + finalize_deplibs=`$ECHO "X $finalize_deplibs" | $Xsed -e 's% \([^ $]*\).ltframework% -framework \1%g'` + ;; + esac + + + # move library search paths that coincide with paths to not yet + # installed libraries to the beginning of the library search list + new_libs= + for path in $notinst_path; do + case " $new_libs " in + *" -L$path/$objdir "*) ;; + *) + case " $compile_deplibs " in + *" -L$path/$objdir "*) + new_libs="$new_libs -L$path/$objdir" ;; + esac + ;; + esac + done + for deplib in $compile_deplibs; do + case $deplib in + -L*) + case " $new_libs " in + *" $deplib "*) ;; + *) new_libs="$new_libs $deplib" ;; + esac + ;; + *) new_libs="$new_libs $deplib" ;; + esac + done + compile_deplibs="$new_libs" + + + compile_command="$compile_command $compile_deplibs" + finalize_command="$finalize_command $finalize_deplibs" + + if test -n "$rpath$xrpath"; then + # If the user specified any rpath flags, then add them. + for libdir in $rpath $xrpath; do + # This is the magic to use -rpath. + case "$finalize_rpath " in + *" $libdir "*) ;; + *) finalize_rpath="$finalize_rpath $libdir" ;; + esac + done + fi + + # Now hardcode the library paths + rpath= + hardcode_libdirs= + for libdir in $compile_rpath $finalize_rpath; do + if test -n "$hardcode_libdir_flag_spec"; then + if test -n "$hardcode_libdir_separator"; then + if test -z "$hardcode_libdirs"; then + hardcode_libdirs="$libdir" + else + # Just accumulate the unique libdirs. + case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in + *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) + ;; + *) + hardcode_libdirs="$hardcode_libdirs$hardcode_libdir_separator$libdir" + ;; + esac + fi + else + eval flag=\"$hardcode_libdir_flag_spec\" + rpath="$rpath $flag" + fi + elif test -n "$runpath_var"; then + case "$perm_rpath " in + *" $libdir "*) ;; + *) perm_rpath="$perm_rpath $libdir" ;; + esac + fi + case $host in + *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*) + testbindir=`${ECHO} "$libdir" | ${SED} -e 's*/lib$*/bin*'` + case :$dllsearchpath: in + *":$libdir:"*) ;; + ::) dllsearchpath=$libdir;; + *) dllsearchpath="$dllsearchpath:$libdir";; + esac + case :$dllsearchpath: in + *":$testbindir:"*) ;; + ::) dllsearchpath=$testbindir;; + *) dllsearchpath="$dllsearchpath:$testbindir";; + esac + ;; + esac + done + # Substitute the hardcoded libdirs into the rpath. + if test -n "$hardcode_libdir_separator" && + test -n "$hardcode_libdirs"; then + libdir="$hardcode_libdirs" + eval rpath=\" $hardcode_libdir_flag_spec\" + fi + compile_rpath="$rpath" + + rpath= + hardcode_libdirs= + for libdir in $finalize_rpath; do + if test -n "$hardcode_libdir_flag_spec"; then + if test -n "$hardcode_libdir_separator"; then + if test -z "$hardcode_libdirs"; then + hardcode_libdirs="$libdir" + else + # Just accumulate the unique libdirs. + case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in + *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) + ;; + *) + hardcode_libdirs="$hardcode_libdirs$hardcode_libdir_separator$libdir" + ;; + esac + fi + else + eval flag=\"$hardcode_libdir_flag_spec\" + rpath="$rpath $flag" + fi + elif test -n "$runpath_var"; then + case "$finalize_perm_rpath " in + *" $libdir "*) ;; + *) finalize_perm_rpath="$finalize_perm_rpath $libdir" ;; + esac + fi + done + # Substitute the hardcoded libdirs into the rpath. + if test -n "$hardcode_libdir_separator" && + test -n "$hardcode_libdirs"; then + libdir="$hardcode_libdirs" + eval rpath=\" $hardcode_libdir_flag_spec\" + fi + finalize_rpath="$rpath" + + if test -n "$libobjs" && test "$build_old_libs" = yes; then + # Transform all the library objects into standard objects. + compile_command=`$ECHO "X$compile_command" | $SP2NL | $Xsed -e "$lo2o" | $NL2SP` + finalize_command=`$ECHO "X$finalize_command" | $SP2NL | $Xsed -e "$lo2o" | $NL2SP` + fi + + func_generate_dlsyms "$outputname" "@PROGRAM@" "no" + + # template prelinking step + if test -n "$prelink_cmds"; then + func_execute_cmds "$prelink_cmds" 'exit $?' + fi + + wrappers_required=yes + case $host in + *cygwin* | *mingw* ) + if test "$build_libtool_libs" != yes; then + wrappers_required=no + fi + ;; + *cegcc) + # Disable wrappers for cegcc, we are cross compiling anyway. + wrappers_required=no + ;; + *) + if test "$need_relink" = no || test "$build_libtool_libs" != yes; then + wrappers_required=no + fi + ;; + esac + if test "$wrappers_required" = no; then + # Replace the output file specification. + compile_command=`$ECHO "X$compile_command" | $Xsed -e 's%@OUTPUT@%'"$output"'%g'` + link_command="$compile_command$compile_rpath" + + # We have no uninstalled library dependencies, so finalize right now. + exit_status=0 + func_show_eval "$link_command" 'exit_status=$?' + + # Delete the generated files. + if test -f "$output_objdir/${outputname}S.${objext}"; then + func_show_eval '$RM "$output_objdir/${outputname}S.${objext}"' + fi + + exit $exit_status + fi + + if test -n "$compile_shlibpath$finalize_shlibpath"; then + compile_command="$shlibpath_var=\"$compile_shlibpath$finalize_shlibpath\$$shlibpath_var\" $compile_command" + fi + if test -n "$finalize_shlibpath"; then + finalize_command="$shlibpath_var=\"$finalize_shlibpath\$$shlibpath_var\" $finalize_command" + fi + + compile_var= + finalize_var= + if test -n "$runpath_var"; then + if test -n "$perm_rpath"; then + # We should set the runpath_var. + rpath= + for dir in $perm_rpath; do + rpath="$rpath$dir:" + done + compile_var="$runpath_var=\"$rpath\$$runpath_var\" " + fi + if test -n "$finalize_perm_rpath"; then + # We should set the runpath_var. + rpath= + for dir in $finalize_perm_rpath; do + rpath="$rpath$dir:" + done + finalize_var="$runpath_var=\"$rpath\$$runpath_var\" " + fi + fi + + if test "$no_install" = yes; then + # We don't need to create a wrapper script. + link_command="$compile_var$compile_command$compile_rpath" + # Replace the output file specification. + link_command=`$ECHO "X$link_command" | $Xsed -e 's%@OUTPUT@%'"$output"'%g'` + # Delete the old output file. + $opt_dry_run || $RM $output + # Link the executable and exit + func_show_eval "$link_command" 'exit $?' + exit $EXIT_SUCCESS + fi + + if test "$hardcode_action" = relink; then + # Fast installation is not supported + link_command="$compile_var$compile_command$compile_rpath" + relink_command="$finalize_var$finalize_command$finalize_rpath" + + func_warning "this platform does not like uninstalled shared libraries" + func_warning "\`$output' will be relinked during installation" + else + if test "$fast_install" != no; then + link_command="$finalize_var$compile_command$finalize_rpath" + if test "$fast_install" = yes; then + relink_command=`$ECHO "X$compile_var$compile_command$compile_rpath" | $Xsed -e 's%@OUTPUT@%\$progdir/\$file%g'` + else + # fast_install is set to needless + relink_command= + fi + else + link_command="$compile_var$compile_command$compile_rpath" + relink_command="$finalize_var$finalize_command$finalize_rpath" + fi + fi + + # Replace the output file specification. + link_command=`$ECHO "X$link_command" | $Xsed -e 's%@OUTPUT@%'"$output_objdir/$outputname"'%g'` + + # Delete the old output files. + $opt_dry_run || $RM $output $output_objdir/$outputname $output_objdir/lt-$outputname + + func_show_eval "$link_command" 'exit $?' + + # Now create the wrapper script. + func_verbose "creating $output" + + # Quote the relink command for shipping. + if test -n "$relink_command"; then + # Preserve any variables that may affect compiler behavior + for var in $variables_saved_for_relink; do + if eval test -z \"\${$var+set}\"; then + relink_command="{ test -z \"\${$var+set}\" || $lt_unset $var || { $var=; export $var; }; }; $relink_command" + elif eval var_value=\$$var; test -z "$var_value"; then + relink_command="$var=; export $var; $relink_command" + else + func_quote_for_eval "$var_value" + relink_command="$var=$func_quote_for_eval_result; export $var; $relink_command" + fi + done + relink_command="(cd `pwd`; $relink_command)" + relink_command=`$ECHO "X$relink_command" | $Xsed -e "$sed_quote_subst"` + fi + + # Quote $ECHO for shipping. + if test "X$ECHO" = "X$SHELL $progpath --fallback-echo"; then + case $progpath in + [\\/]* | [A-Za-z]:[\\/]*) qecho="$SHELL $progpath --fallback-echo";; + *) qecho="$SHELL `pwd`/$progpath --fallback-echo";; + esac + qecho=`$ECHO "X$qecho" | $Xsed -e "$sed_quote_subst"` + else + qecho=`$ECHO "X$ECHO" | $Xsed -e "$sed_quote_subst"` + fi + + # Only actually do things if not in dry run mode. + $opt_dry_run || { + # win32 will think the script is a binary if it has + # a .exe suffix, so we strip it off here. + case $output in + *.exe) func_stripname '' '.exe' "$output" + output=$func_stripname_result ;; + esac + # test for cygwin because mv fails w/o .exe extensions + case $host in + *cygwin*) + exeext=.exe + func_stripname '' '.exe' "$outputname" + outputname=$func_stripname_result ;; + *) exeext= ;; + esac + case $host in + *cygwin* | *mingw* ) + func_dirname_and_basename "$output" "" "." + output_name=$func_basename_result + output_path=$func_dirname_result + cwrappersource="$output_path/$objdir/lt-$output_name.c" + cwrapper="$output_path/$output_name.exe" + $RM $cwrappersource $cwrapper + trap "$RM $cwrappersource $cwrapper; exit $EXIT_FAILURE" 1 2 15 + + func_emit_cwrapperexe_src > $cwrappersource + + # The wrapper executable is built using the $host compiler, + # because it contains $host paths and files. If cross- + # compiling, it, like the target executable, must be + # executed on the $host or under an emulation environment. + $opt_dry_run || { + $LTCC $LTCFLAGS -o $cwrapper $cwrappersource + $STRIP $cwrapper + } + + # Now, create the wrapper script for func_source use: + func_ltwrapper_scriptname $cwrapper + $RM $func_ltwrapper_scriptname_result + trap "$RM $func_ltwrapper_scriptname_result; exit $EXIT_FAILURE" 1 2 15 + $opt_dry_run || { + # note: this script will not be executed, so do not chmod. + if test "x$build" = "x$host" ; then + $cwrapper --lt-dump-script > $func_ltwrapper_scriptname_result + else + func_emit_wrapper no > $func_ltwrapper_scriptname_result + fi + } + ;; + * ) + $RM $output + trap "$RM $output; exit $EXIT_FAILURE" 1 2 15 + + func_emit_wrapper no > $output + chmod +x $output + ;; + esac + } + exit $EXIT_SUCCESS + ;; + esac + + # See if we need to build an old-fashioned archive. + for oldlib in $oldlibs; do + + if test "$build_libtool_libs" = convenience; then + oldobjs="$libobjs_save $symfileobj" + addlibs="$convenience" + build_libtool_libs=no + else + if test "$build_libtool_libs" = module; then + oldobjs="$libobjs_save" + build_libtool_libs=no + else + oldobjs="$old_deplibs $non_pic_objects" + if test "$preload" = yes && test -f "$symfileobj"; then + oldobjs="$oldobjs $symfileobj" + fi + fi + addlibs="$old_convenience" + fi + + if test -n "$addlibs"; then + gentop="$output_objdir/${outputname}x" + generated="$generated $gentop" + + func_extract_archives $gentop $addlibs + oldobjs="$oldobjs $func_extract_archives_result" + fi + + # Do each command in the archive commands. + if test -n "$old_archive_from_new_cmds" && test "$build_libtool_libs" = yes; then + cmds=$old_archive_from_new_cmds + else + + # Add any objects from preloaded convenience libraries + if test -n "$dlprefiles"; then + gentop="$output_objdir/${outputname}x" + generated="$generated $gentop" + + func_extract_archives $gentop $dlprefiles + oldobjs="$oldobjs $func_extract_archives_result" + fi + + # POSIX demands no paths to be encoded in archives. We have + # to avoid creating archives with duplicate basenames if we + # might have to extract them afterwards, e.g., when creating a + # static archive out of a convenience library, or when linking + # the entirety of a libtool archive into another (currently + # not supported by libtool). + if (for obj in $oldobjs + do + func_basename "$obj" + $ECHO "$func_basename_result" + done | sort | sort -uc >/dev/null 2>&1); then + : + else + $ECHO "copying selected object files to avoid basename conflicts..." + gentop="$output_objdir/${outputname}x" + generated="$generated $gentop" + func_mkdir_p "$gentop" + save_oldobjs=$oldobjs + oldobjs= + counter=1 + for obj in $save_oldobjs + do + func_basename "$obj" + objbase="$func_basename_result" + case " $oldobjs " in + " ") oldobjs=$obj ;; + *[\ /]"$objbase "*) + while :; do + # Make sure we don't pick an alternate name that also + # overlaps. + newobj=lt$counter-$objbase + func_arith $counter + 1 + counter=$func_arith_result + case " $oldobjs " in + *[\ /]"$newobj "*) ;; + *) if test ! -f "$gentop/$newobj"; then break; fi ;; + esac + done + func_show_eval "ln $obj $gentop/$newobj || cp $obj $gentop/$newobj" + oldobjs="$oldobjs $gentop/$newobj" + ;; + *) oldobjs="$oldobjs $obj" ;; + esac + done + fi + eval cmds=\"$old_archive_cmds\" + + func_len " $cmds" + len=$func_len_result + if test "$len" -lt "$max_cmd_len" || test "$max_cmd_len" -le -1; then + cmds=$old_archive_cmds + else + # the command line is too long to link in one step, link in parts + func_verbose "using piecewise archive linking..." + save_RANLIB=$RANLIB + RANLIB=: + objlist= + concat_cmds= + save_oldobjs=$oldobjs + oldobjs= + # Is there a better way of finding the last object in the list? + for obj in $save_oldobjs + do + last_oldobj=$obj + done + eval test_cmds=\"$old_archive_cmds\" + func_len " $test_cmds" + len0=$func_len_result + len=$len0 + for obj in $save_oldobjs + do + func_len " $obj" + func_arith $len + $func_len_result + len=$func_arith_result + func_append objlist " $obj" + if test "$len" -lt "$max_cmd_len"; then + : + else + # the above command should be used before it gets too long + oldobjs=$objlist + if test "$obj" = "$last_oldobj" ; then + RANLIB=$save_RANLIB + fi + test -z "$concat_cmds" || concat_cmds=$concat_cmds~ + eval concat_cmds=\"\${concat_cmds}$old_archive_cmds\" + objlist= + len=$len0 + fi + done + RANLIB=$save_RANLIB + oldobjs=$objlist + if test "X$oldobjs" = "X" ; then + eval cmds=\"\$concat_cmds\" + else + eval cmds=\"\$concat_cmds~\$old_archive_cmds\" + fi + fi + fi + func_execute_cmds "$cmds" 'exit $?' + done + + test -n "$generated" && \ + func_show_eval "${RM}r$generated" + + # Now create the libtool archive. + case $output in + *.la) + old_library= + test "$build_old_libs" = yes && old_library="$libname.$libext" + func_verbose "creating $output" + + # Preserve any variables that may affect compiler behavior + for var in $variables_saved_for_relink; do + if eval test -z \"\${$var+set}\"; then + relink_command="{ test -z \"\${$var+set}\" || $lt_unset $var || { $var=; export $var; }; }; $relink_command" + elif eval var_value=\$$var; test -z "$var_value"; then + relink_command="$var=; export $var; $relink_command" + else + func_quote_for_eval "$var_value" + relink_command="$var=$func_quote_for_eval_result; export $var; $relink_command" + fi + done + # Quote the link command for shipping. + relink_command="(cd `pwd`; $SHELL $progpath $preserve_args --mode=relink $libtool_args @inst_prefix_dir@)" + relink_command=`$ECHO "X$relink_command" | $Xsed -e "$sed_quote_subst"` + if test "$hardcode_automatic" = yes ; then + relink_command= + fi + + # Only create the output if not a dry run. + $opt_dry_run || { + for installed in no yes; do + if test "$installed" = yes; then + if test -z "$install_libdir"; then + break + fi + output="$output_objdir/$outputname"i + # Replace all uninstalled libtool libraries with the installed ones + newdependency_libs= + for deplib in $dependency_libs; do + case $deplib in + *.la) + func_basename "$deplib" + name="$func_basename_result" + eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $deplib` + test -z "$libdir" && \ + func_fatal_error "\`$deplib' is not a valid libtool archive" + newdependency_libs="$newdependency_libs $libdir/$name" + ;; + *) newdependency_libs="$newdependency_libs $deplib" ;; + esac + done + dependency_libs="$newdependency_libs" + newdlfiles= + + for lib in $dlfiles; do + case $lib in + *.la) + func_basename "$lib" + name="$func_basename_result" + eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $lib` + test -z "$libdir" && \ + func_fatal_error "\`$lib' is not a valid libtool archive" + newdlfiles="$newdlfiles $libdir/$name" + ;; + *) newdlfiles="$newdlfiles $lib" ;; + esac + done + dlfiles="$newdlfiles" + newdlprefiles= + for lib in $dlprefiles; do + case $lib in + *.la) + # Only pass preopened files to the pseudo-archive (for + # eventual linking with the app. that links it) if we + # didn't already link the preopened objects directly into + # the library: + func_basename "$lib" + name="$func_basename_result" + eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $lib` + test -z "$libdir" && \ + func_fatal_error "\`$lib' is not a valid libtool archive" + newdlprefiles="$newdlprefiles $libdir/$name" + ;; + esac + done + dlprefiles="$newdlprefiles" + else + newdlfiles= + for lib in $dlfiles; do + case $lib in + [\\/]* | [A-Za-z]:[\\/]*) abs="$lib" ;; + *) abs=`pwd`"/$lib" ;; + esac + newdlfiles="$newdlfiles $abs" + done + dlfiles="$newdlfiles" + newdlprefiles= + for lib in $dlprefiles; do + case $lib in + [\\/]* | [A-Za-z]:[\\/]*) abs="$lib" ;; + *) abs=`pwd`"/$lib" ;; + esac + newdlprefiles="$newdlprefiles $abs" + done + dlprefiles="$newdlprefiles" + fi + $RM $output + # place dlname in correct position for cygwin + tdlname=$dlname + case $host,$output,$installed,$module,$dlname in + *cygwin*,*lai,yes,no,*.dll | *mingw*,*lai,yes,no,*.dll | *cegcc*,*lai,yes,no,*.dll) tdlname=../bin/$dlname ;; + esac + $ECHO > $output "\ +# $outputname - a libtool library file +# Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION +# +# Please DO NOT delete this file! +# It is necessary for linking the library. + +# The name that we can dlopen(3). +dlname='$tdlname' + +# Names of this library. +library_names='$library_names' + +# The name of the static archive. +old_library='$old_library' + +# Linker flags that can not go in dependency_libs. +inherited_linker_flags='$new_inherited_linker_flags' + +# Libraries that this one depends upon. +dependency_libs='$dependency_libs' + +# Names of additional weak libraries provided by this library +weak_library_names='$weak_libs' + +# Version information for $libname. +current=$current +age=$age +revision=$revision + +# Is this an already installed library? +installed=$installed + +# Should we warn about portability when linking against -modules? +shouldnotlink=$module + +# Files to dlopen/dlpreopen +dlopen='$dlfiles' +dlpreopen='$dlprefiles' + +# Directory that this library needs to be installed in: +libdir='$install_libdir'" + if test "$installed" = no && test "$need_relink" = yes; then + $ECHO >> $output "\ +relink_command=\"$relink_command\"" + fi + done + } + + # Do a symbolic link so that the libtool archive can be found in + # LD_LIBRARY_PATH before the program is installed. + func_show_eval '( cd "$output_objdir" && $RM "$outputname" && $LN_S "../$outputname" "$outputname" )' 'exit $?' + ;; + esac + exit $EXIT_SUCCESS +} + +{ test "$mode" = link || test "$mode" = relink; } && + func_mode_link ${1+"$@"} + + +# func_mode_uninstall arg... +func_mode_uninstall () +{ + $opt_debug + RM="$nonopt" + files= + rmforce= + exit_status=0 + + # This variable tells wrapper scripts just to set variables rather + # than running their programs. + libtool_install_magic="$magic" + + for arg + do + case $arg in + -f) RM="$RM $arg"; rmforce=yes ;; + -*) RM="$RM $arg" ;; + *) files="$files $arg" ;; + esac + done + + test -z "$RM" && \ + func_fatal_help "you must specify an RM program" + + rmdirs= + + origobjdir="$objdir" + for file in $files; do + func_dirname "$file" "" "." + dir="$func_dirname_result" + if test "X$dir" = X.; then + objdir="$origobjdir" + else + objdir="$dir/$origobjdir" + fi + func_basename "$file" + name="$func_basename_result" + test "$mode" = uninstall && objdir="$dir" + + # Remember objdir for removal later, being careful to avoid duplicates + if test "$mode" = clean; then + case " $rmdirs " in + *" $objdir "*) ;; + *) rmdirs="$rmdirs $objdir" ;; + esac + fi + + # Don't error if the file doesn't exist and rm -f was used. + if { test -L "$file"; } >/dev/null 2>&1 || + { test -h "$file"; } >/dev/null 2>&1 || + test -f "$file"; then + : + elif test -d "$file"; then + exit_status=1 + continue + elif test "$rmforce" = yes; then + continue + fi + + rmfiles="$file" + + case $name in + *.la) + # Possibly a libtool archive, so verify it. + if func_lalib_p "$file"; then + func_source $dir/$name + + # Delete the libtool libraries and symlinks. + for n in $library_names; do + rmfiles="$rmfiles $objdir/$n" + done + test -n "$old_library" && rmfiles="$rmfiles $objdir/$old_library" + + case "$mode" in + clean) + case " $library_names " in + # " " in the beginning catches empty $dlname + *" $dlname "*) ;; + *) rmfiles="$rmfiles $objdir/$dlname" ;; + esac + test -n "$libdir" && rmfiles="$rmfiles $objdir/$name $objdir/${name}i" + ;; + uninstall) + if test -n "$library_names"; then + # Do each command in the postuninstall commands. + func_execute_cmds "$postuninstall_cmds" 'test "$rmforce" = yes || exit_status=1' + fi + + if test -n "$old_library"; then + # Do each command in the old_postuninstall commands. + func_execute_cmds "$old_postuninstall_cmds" 'test "$rmforce" = yes || exit_status=1' + fi + # FIXME: should reinstall the best remaining shared library. + ;; + esac + fi + ;; + + *.lo) + # Possibly a libtool object, so verify it. + if func_lalib_p "$file"; then + + # Read the .lo file + func_source $dir/$name + + # Add PIC object to the list of files to remove. + if test -n "$pic_object" && + test "$pic_object" != none; then + rmfiles="$rmfiles $dir/$pic_object" + fi + + # Add non-PIC object to the list of files to remove. + if test -n "$non_pic_object" && + test "$non_pic_object" != none; then + rmfiles="$rmfiles $dir/$non_pic_object" + fi + fi + ;; + + *) + if test "$mode" = clean ; then + noexename=$name + case $file in + *.exe) + func_stripname '' '.exe' "$file" + file=$func_stripname_result + func_stripname '' '.exe' "$name" + noexename=$func_stripname_result + # $file with .exe has already been added to rmfiles, + # add $file without .exe + rmfiles="$rmfiles $file" + ;; + esac + # Do a test to see if this is a libtool program. + if func_ltwrapper_p "$file"; then + if func_ltwrapper_executable_p "$file"; then + func_ltwrapper_scriptname "$file" + relink_command= + func_source $func_ltwrapper_scriptname_result + rmfiles="$rmfiles $func_ltwrapper_scriptname_result" + else + relink_command= + func_source $dir/$noexename + fi + + # note $name still contains .exe if it was in $file originally + # as does the version of $file that was added into $rmfiles + rmfiles="$rmfiles $objdir/$name $objdir/${name}S.${objext}" + if test "$fast_install" = yes && test -n "$relink_command"; then + rmfiles="$rmfiles $objdir/lt-$name" + fi + if test "X$noexename" != "X$name" ; then + rmfiles="$rmfiles $objdir/lt-${noexename}.c" + fi + fi + fi + ;; + esac + func_show_eval "$RM $rmfiles" 'exit_status=1' + done + objdir="$origobjdir" + + # Try to remove the ${objdir}s in the directories where we deleted files + for dir in $rmdirs; do + if test -d "$dir"; then + func_show_eval "rmdir $dir >/dev/null 2>&1" + fi + done + + exit $exit_status +} + +{ test "$mode" = uninstall || test "$mode" = clean; } && + func_mode_uninstall ${1+"$@"} + +test -z "$mode" && { + help="$generic_help" + func_fatal_help "you must specify a MODE" +} + +test -z "$exec_cmd" && \ + func_fatal_help "invalid operation mode \`$mode'" + +if test -n "$exec_cmd"; then + eval exec "$exec_cmd" + exit $EXIT_FAILURE +fi + +exit $exit_status + + +# The TAGs below are defined such that we never get into a situation +# in which we disable both kinds of libraries. Given conflicting +# choices, we go for a static library, that is the most portable, +# since we can't tell whether shared libraries were disabled because +# the user asked for that or because the platform doesn't support +# them. This is particularly important on AIX, because we don't +# support having both static and shared libraries enabled at the same +# time on that platform, so we default to a shared-only configuration. +# If a disable-shared tag is given, we'll fallback to a static-only +# configuration. But we'll never go from static-only to shared-only. + +# ### BEGIN LIBTOOL TAG CONFIG: disable-shared +build_libtool_libs=no +build_old_libs=yes +# ### END LIBTOOL TAG CONFIG: disable-shared + +# ### BEGIN LIBTOOL TAG CONFIG: disable-static +build_old_libs=`case $build_libtool_libs in yes) echo no;; *) echo yes;; esac` +# ### END LIBTOOL TAG CONFIG: disable-static + +# Local Variables: +# mode:shell-script +# sh-indentation:2 +# End: +# vi:sw=2 + Added: python/trunk/Modules/_ctypes/libffi/m4/libtool.m4 ============================================================================== --- (empty file) +++ python/trunk/Modules/_ctypes/libffi/m4/libtool.m4 Mon Mar 15 01:02:36 2010 @@ -0,0 +1,7360 @@ +# libtool.m4 - Configure libtool for the host system. -*-Autoconf-*- +# +# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005, +# 2006, 2007, 2008 Free Software Foundation, Inc. +# Written by Gordon Matzigkeit, 1996 +# +# This file is free software; the Free Software Foundation gives +# unlimited permission to copy and/or distribute it, with or without +# modifications, as long as this notice is preserved. + +m4_define([_LT_COPYING], [dnl +# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005, +# 2006, 2007, 2008 Free Software Foundation, Inc. +# Written by Gordon Matzigkeit, 1996 +# +# This file is part of GNU Libtool. +# +# GNU Libtool is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License as +# published by the Free Software Foundation; either version 2 of +# the License, or (at your option) any later version. +# +# As a special exception to the GNU General Public License, +# if you distribute this file as part of a program or library that +# is built using GNU Libtool, you may include this file under the +# same distribution terms that you use for the rest of that program. +# +# GNU Libtool is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with GNU Libtool; see the file COPYING. If not, a copy +# can be downloaded from http://www.gnu.org/licenses/gpl.html, or +# obtained by writing to the Free Software Foundation, Inc., +# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +]) + +# serial 56 LT_INIT + + +# LT_PREREQ(VERSION) +# ------------------ +# Complain and exit if this libtool version is less that VERSION. +m4_defun([LT_PREREQ], +[m4_if(m4_version_compare(m4_defn([LT_PACKAGE_VERSION]), [$1]), -1, + [m4_default([$3], + [m4_fatal([Libtool version $1 or higher is required], + 63)])], + [$2])]) + + +# _LT_CHECK_BUILDDIR +# ------------------ +# Complain if the absolute build directory name contains unusual characters +m4_defun([_LT_CHECK_BUILDDIR], +[case `pwd` in + *\ * | *\ *) + AC_MSG_WARN([Libtool does not cope well with whitespace in `pwd`]) ;; +esac +]) + + +# LT_INIT([OPTIONS]) +# ------------------ +AC_DEFUN([LT_INIT], +[AC_PREREQ([2.58])dnl We use AC_INCLUDES_DEFAULT +AC_BEFORE([$0], [LT_LANG])dnl +AC_BEFORE([$0], [LT_OUTPUT])dnl +AC_BEFORE([$0], [LTDL_INIT])dnl +m4_require([_LT_CHECK_BUILDDIR])dnl + +dnl Autoconf doesn't catch unexpanded LT_ macros by default: +m4_pattern_forbid([^_?LT_[A-Z_]+$])dnl +m4_pattern_allow([^(_LT_EOF|LT_DLGLOBAL|LT_DLLAZY_OR_NOW|LT_MULTI_MODULE)$])dnl +dnl aclocal doesn't pull ltoptions.m4, ltsugar.m4, or ltversion.m4 +dnl unless we require an AC_DEFUNed macro: +AC_REQUIRE([LTOPTIONS_VERSION])dnl +AC_REQUIRE([LTSUGAR_VERSION])dnl +AC_REQUIRE([LTVERSION_VERSION])dnl +AC_REQUIRE([LTOBSOLETE_VERSION])dnl +m4_require([_LT_PROG_LTMAIN])dnl + +dnl Parse OPTIONS +_LT_SET_OPTIONS([$0], [$1]) + +# This can be used to rebuild libtool when needed +LIBTOOL_DEPS="$ltmain" + +# Always use our own libtool. +LIBTOOL='$(SHELL) $(top_builddir)/libtool' +AC_SUBST(LIBTOOL)dnl + +_LT_SETUP + +# Only expand once: +m4_define([LT_INIT]) +])# LT_INIT + +# Old names: +AU_ALIAS([AC_PROG_LIBTOOL], [LT_INIT]) +AU_ALIAS([AM_PROG_LIBTOOL], [LT_INIT]) +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([AC_PROG_LIBTOOL], []) +dnl AC_DEFUN([AM_PROG_LIBTOOL], []) + + +# _LT_CC_BASENAME(CC) +# ------------------- +# Calculate cc_basename. Skip known compiler wrappers and cross-prefix. +m4_defun([_LT_CC_BASENAME], +[for cc_temp in $1""; do + case $cc_temp in + compile | *[[\\/]]compile | ccache | *[[\\/]]ccache ) ;; + distcc | *[[\\/]]distcc | purify | *[[\\/]]purify ) ;; + \-*) ;; + *) break;; + esac +done +cc_basename=`$ECHO "X$cc_temp" | $Xsed -e 's%.*/%%' -e "s%^$host_alias-%%"` +]) + + +# _LT_FILEUTILS_DEFAULTS +# ---------------------- +# It is okay to use these file commands and assume they have been set +# sensibly after `m4_require([_LT_FILEUTILS_DEFAULTS])'. +m4_defun([_LT_FILEUTILS_DEFAULTS], +[: ${CP="cp -f"} +: ${MV="mv -f"} +: ${RM="rm -f"} +])# _LT_FILEUTILS_DEFAULTS + + +# _LT_SETUP +# --------- +m4_defun([_LT_SETUP], +[AC_REQUIRE([AC_CANONICAL_HOST])dnl +AC_REQUIRE([AC_CANONICAL_BUILD])dnl +_LT_DECL([], [host_alias], [0], [The host system])dnl +_LT_DECL([], [host], [0])dnl +_LT_DECL([], [host_os], [0])dnl +dnl +_LT_DECL([], [build_alias], [0], [The build system])dnl +_LT_DECL([], [build], [0])dnl +_LT_DECL([], [build_os], [0])dnl +dnl +AC_REQUIRE([AC_PROG_CC])dnl +AC_REQUIRE([LT_PATH_LD])dnl +AC_REQUIRE([LT_PATH_NM])dnl +dnl +AC_REQUIRE([AC_PROG_LN_S])dnl +test -z "$LN_S" && LN_S="ln -s" +_LT_DECL([], [LN_S], [1], [Whether we need soft or hard links])dnl +dnl +AC_REQUIRE([LT_CMD_MAX_LEN])dnl +_LT_DECL([objext], [ac_objext], [0], [Object file suffix (normally "o")])dnl +_LT_DECL([], [exeext], [0], [Executable file suffix (normally "")])dnl +dnl +m4_require([_LT_FILEUTILS_DEFAULTS])dnl +m4_require([_LT_CHECK_SHELL_FEATURES])dnl +m4_require([_LT_CMD_RELOAD])dnl +m4_require([_LT_CHECK_MAGIC_METHOD])dnl +m4_require([_LT_CMD_OLD_ARCHIVE])dnl +m4_require([_LT_CMD_GLOBAL_SYMBOLS])dnl + +_LT_CONFIG_LIBTOOL_INIT([ +# See if we are running on zsh, and set the options which allow our +# commands through without removal of \ escapes INIT. +if test -n "\${ZSH_VERSION+set}" ; then + setopt NO_GLOB_SUBST +fi +]) +if test -n "${ZSH_VERSION+set}" ; then + setopt NO_GLOB_SUBST +fi + +_LT_CHECK_OBJDIR + +m4_require([_LT_TAG_COMPILER])dnl +_LT_PROG_ECHO_BACKSLASH + +case $host_os in +aix3*) + # AIX sometimes has problems with the GCC collect2 program. For some + # reason, if we set the COLLECT_NAMES environment variable, the problems + # vanish in a puff of smoke. + if test "X${COLLECT_NAMES+set}" != Xset; then + COLLECT_NAMES= + export COLLECT_NAMES + fi + ;; +esac + +# Sed substitution that helps us do robust quoting. It backslashifies +# metacharacters that are still active within double-quoted strings. +sed_quote_subst='s/\([["`$\\]]\)/\\\1/g' + +# Same as above, but do not quote variable references. +double_quote_subst='s/\([["`\\]]\)/\\\1/g' + +# Sed substitution to delay expansion of an escaped shell variable in a +# double_quote_subst'ed string. +delay_variable_subst='s/\\\\\\\\\\\$/\\\\\\$/g' + +# Sed substitution to delay expansion of an escaped single quote. +delay_single_quote_subst='s/'\''/'\'\\\\\\\'\''/g' + +# Sed substitution to avoid accidental globbing in evaled expressions +no_glob_subst='s/\*/\\\*/g' + +# Global variables: +ofile=libtool +can_build_shared=yes + +# All known linkers require a `.a' archive for static linking (except MSVC, +# which needs '.lib'). +libext=a + +with_gnu_ld="$lt_cv_prog_gnu_ld" + +old_CC="$CC" +old_CFLAGS="$CFLAGS" + +# Set sane defaults for various variables +test -z "$CC" && CC=cc +test -z "$LTCC" && LTCC=$CC +test -z "$LTCFLAGS" && LTCFLAGS=$CFLAGS +test -z "$LD" && LD=ld +test -z "$ac_objext" && ac_objext=o + +_LT_CC_BASENAME([$compiler]) + +# Only perform the check for file, if the check method requires it +test -z "$MAGIC_CMD" && MAGIC_CMD=file +case $deplibs_check_method in +file_magic*) + if test "$file_magic_cmd" = '$MAGIC_CMD'; then + _LT_PATH_MAGIC + fi + ;; +esac + +# Use C for the default configuration in the libtool script +LT_SUPPORTED_TAG([CC]) +_LT_LANG_C_CONFIG +_LT_LANG_DEFAULT_CONFIG +_LT_CONFIG_COMMANDS +])# _LT_SETUP + + +# _LT_PROG_LTMAIN +# --------------- +# Note that this code is called both from `configure', and `config.status' +# now that we use AC_CONFIG_COMMANDS to generate libtool. Notably, +# `config.status' has no value for ac_aux_dir unless we are using Automake, +# so we pass a copy along to make sure it has a sensible value anyway. +m4_defun([_LT_PROG_LTMAIN], +[m4_ifdef([AC_REQUIRE_AUX_FILE], [AC_REQUIRE_AUX_FILE([ltmain.sh])])dnl +_LT_CONFIG_LIBTOOL_INIT([ac_aux_dir='$ac_aux_dir']) +ltmain="$ac_aux_dir/ltmain.sh" +])# _LT_PROG_LTMAIN + + +## ------------------------------------- ## +## Accumulate code for creating libtool. ## +## ------------------------------------- ## + +# So that we can recreate a full libtool script including additional +# tags, we accumulate the chunks of code to send to AC_CONFIG_COMMANDS +# in macros and then make a single call at the end using the `libtool' +# label. + + +# _LT_CONFIG_LIBTOOL_INIT([INIT-COMMANDS]) +# ---------------------------------------- +# Register INIT-COMMANDS to be passed to AC_CONFIG_COMMANDS later. +m4_define([_LT_CONFIG_LIBTOOL_INIT], +[m4_ifval([$1], + [m4_append([_LT_OUTPUT_LIBTOOL_INIT], + [$1 +])])]) + +# Initialize. +m4_define([_LT_OUTPUT_LIBTOOL_INIT]) + + +# _LT_CONFIG_LIBTOOL([COMMANDS]) +# ------------------------------ +# Register COMMANDS to be passed to AC_CONFIG_COMMANDS later. +m4_define([_LT_CONFIG_LIBTOOL], +[m4_ifval([$1], + [m4_append([_LT_OUTPUT_LIBTOOL_COMMANDS], + [$1 +])])]) + +# Initialize. +m4_define([_LT_OUTPUT_LIBTOOL_COMMANDS]) + + +# _LT_CONFIG_SAVE_COMMANDS([COMMANDS], [INIT_COMMANDS]) +# ----------------------------------------------------- +m4_defun([_LT_CONFIG_SAVE_COMMANDS], +[_LT_CONFIG_LIBTOOL([$1]) +_LT_CONFIG_LIBTOOL_INIT([$2]) +]) + + +# _LT_FORMAT_COMMENT([COMMENT]) +# ----------------------------- +# Add leading comment marks to the start of each line, and a trailing +# full-stop to the whole comment if one is not present already. +m4_define([_LT_FORMAT_COMMENT], +[m4_ifval([$1], [ +m4_bpatsubst([m4_bpatsubst([$1], [^ *], [# ])], + [['`$\]], [\\\&])]m4_bmatch([$1], [[!?.]$], [], [.]) +)]) + + + +## ------------------------ ## +## FIXME: Eliminate VARNAME ## +## ------------------------ ## + + +# _LT_DECL([CONFIGNAME], VARNAME, VALUE, [DESCRIPTION], [IS-TAGGED?]) +# ------------------------------------------------------------------- +# CONFIGNAME is the name given to the value in the libtool script. +# VARNAME is the (base) name used in the configure script. +# VALUE may be 0, 1 or 2 for a computed quote escaped value based on +# VARNAME. Any other value will be used directly. +m4_define([_LT_DECL], +[lt_if_append_uniq([lt_decl_varnames], [$2], [, ], + [lt_dict_add_subkey([lt_decl_dict], [$2], [libtool_name], + [m4_ifval([$1], [$1], [$2])]) + lt_dict_add_subkey([lt_decl_dict], [$2], [value], [$3]) + m4_ifval([$4], + [lt_dict_add_subkey([lt_decl_dict], [$2], [description], [$4])]) + lt_dict_add_subkey([lt_decl_dict], [$2], + [tagged?], [m4_ifval([$5], [yes], [no])])]) +]) + + +# _LT_TAGDECL([CONFIGNAME], VARNAME, VALUE, [DESCRIPTION]) +# -------------------------------------------------------- +m4_define([_LT_TAGDECL], [_LT_DECL([$1], [$2], [$3], [$4], [yes])]) + + +# lt_decl_tag_varnames([SEPARATOR], [VARNAME1...]) +# ------------------------------------------------ +m4_define([lt_decl_tag_varnames], +[_lt_decl_filter([tagged?], [yes], $@)]) + + +# _lt_decl_filter(SUBKEY, VALUE, [SEPARATOR], [VARNAME1..]) +# --------------------------------------------------------- +m4_define([_lt_decl_filter], +[m4_case([$#], + [0], [m4_fatal([$0: too few arguments: $#])], + [1], [m4_fatal([$0: too few arguments: $#: $1])], + [2], [lt_dict_filter([lt_decl_dict], [$1], [$2], [], lt_decl_varnames)], + [3], [lt_dict_filter([lt_decl_dict], [$1], [$2], [$3], lt_decl_varnames)], + [lt_dict_filter([lt_decl_dict], $@)])[]dnl +]) + + +# lt_decl_quote_varnames([SEPARATOR], [VARNAME1...]) +# -------------------------------------------------- +m4_define([lt_decl_quote_varnames], +[_lt_decl_filter([value], [1], $@)]) + + +# lt_decl_dquote_varnames([SEPARATOR], [VARNAME1...]) +# --------------------------------------------------- +m4_define([lt_decl_dquote_varnames], +[_lt_decl_filter([value], [2], $@)]) + + +# lt_decl_varnames_tagged([SEPARATOR], [VARNAME1...]) +# --------------------------------------------------- +m4_define([lt_decl_varnames_tagged], +[m4_assert([$# <= 2])dnl +_$0(m4_quote(m4_default([$1], [[, ]])), + m4_ifval([$2], [[$2]], [m4_dquote(lt_decl_tag_varnames)]), + m4_split(m4_normalize(m4_quote(_LT_TAGS)), [ ]))]) +m4_define([_lt_decl_varnames_tagged], +[m4_ifval([$3], [lt_combine([$1], [$2], [_], $3)])]) + + +# lt_decl_all_varnames([SEPARATOR], [VARNAME1...]) +# ------------------------------------------------ +m4_define([lt_decl_all_varnames], +[_$0(m4_quote(m4_default([$1], [[, ]])), + m4_if([$2], [], + m4_quote(lt_decl_varnames), + m4_quote(m4_shift($@))))[]dnl +]) +m4_define([_lt_decl_all_varnames], +[lt_join($@, lt_decl_varnames_tagged([$1], + lt_decl_tag_varnames([[, ]], m4_shift($@))))dnl +]) + + +# _LT_CONFIG_STATUS_DECLARE([VARNAME]) +# ------------------------------------ +# Quote a variable value, and forward it to `config.status' so that its +# declaration there will have the same value as in `configure'. VARNAME +# must have a single quote delimited value for this to work. +m4_define([_LT_CONFIG_STATUS_DECLARE], +[$1='`$ECHO "X$][$1" | $Xsed -e "$delay_single_quote_subst"`']) + + +# _LT_CONFIG_STATUS_DECLARATIONS +# ------------------------------ +# We delimit libtool config variables with single quotes, so when +# we write them to config.status, we have to be sure to quote all +# embedded single quotes properly. In configure, this macro expands +# each variable declared with _LT_DECL (and _LT_TAGDECL) into: +# +# ='`$ECHO "X$" | $Xsed -e "$delay_single_quote_subst"`' +m4_defun([_LT_CONFIG_STATUS_DECLARATIONS], +[m4_foreach([_lt_var], m4_quote(lt_decl_all_varnames), + [m4_n([_LT_CONFIG_STATUS_DECLARE(_lt_var)])])]) + + +# _LT_LIBTOOL_TAGS +# ---------------- +# Output comment and list of tags supported by the script +m4_defun([_LT_LIBTOOL_TAGS], +[_LT_FORMAT_COMMENT([The names of the tagged configurations supported by this script])dnl +available_tags="_LT_TAGS"dnl +]) + + +# _LT_LIBTOOL_DECLARE(VARNAME, [TAG]) +# ----------------------------------- +# Extract the dictionary values for VARNAME (optionally with TAG) and +# expand to a commented shell variable setting: +# +# # Some comment about what VAR is for. +# visible_name=$lt_internal_name +m4_define([_LT_LIBTOOL_DECLARE], +[_LT_FORMAT_COMMENT(m4_quote(lt_dict_fetch([lt_decl_dict], [$1], + [description])))[]dnl +m4_pushdef([_libtool_name], + m4_quote(lt_dict_fetch([lt_decl_dict], [$1], [libtool_name])))[]dnl +m4_case(m4_quote(lt_dict_fetch([lt_decl_dict], [$1], [value])), + [0], [_libtool_name=[$]$1], + [1], [_libtool_name=$lt_[]$1], + [2], [_libtool_name=$lt_[]$1], + [_libtool_name=lt_dict_fetch([lt_decl_dict], [$1], [value])])[]dnl +m4_ifval([$2], [_$2])[]m4_popdef([_libtool_name])[]dnl +]) + + +# _LT_LIBTOOL_CONFIG_VARS +# ----------------------- +# Produce commented declarations of non-tagged libtool config variables +# suitable for insertion in the LIBTOOL CONFIG section of the `libtool' +# script. Tagged libtool config variables (even for the LIBTOOL CONFIG +# section) are produced by _LT_LIBTOOL_TAG_VARS. +m4_defun([_LT_LIBTOOL_CONFIG_VARS], +[m4_foreach([_lt_var], + m4_quote(_lt_decl_filter([tagged?], [no], [], lt_decl_varnames)), + [m4_n([_LT_LIBTOOL_DECLARE(_lt_var)])])]) + + +# _LT_LIBTOOL_TAG_VARS(TAG) +# ------------------------- +m4_define([_LT_LIBTOOL_TAG_VARS], +[m4_foreach([_lt_var], m4_quote(lt_decl_tag_varnames), + [m4_n([_LT_LIBTOOL_DECLARE(_lt_var, [$1])])])]) + + +# _LT_TAGVAR(VARNAME, [TAGNAME]) +# ------------------------------ +m4_define([_LT_TAGVAR], [m4_ifval([$2], [$1_$2], [$1])]) + + +# _LT_CONFIG_COMMANDS +# ------------------- +# Send accumulated output to $CONFIG_STATUS. Thanks to the lists of +# variables for single and double quote escaping we saved from calls +# to _LT_DECL, we can put quote escaped variables declarations +# into `config.status', and then the shell code to quote escape them in +# for loops in `config.status'. Finally, any additional code accumulated +# from calls to _LT_CONFIG_LIBTOOL_INIT is expanded. +m4_defun([_LT_CONFIG_COMMANDS], +[AC_PROVIDE_IFELSE([LT_OUTPUT], + dnl If the libtool generation code has been placed in $CONFIG_LT, + dnl instead of duplicating it all over again into config.status, + dnl then we will have config.status run $CONFIG_LT later, so it + dnl needs to know what name is stored there: + [AC_CONFIG_COMMANDS([libtool], + [$SHELL $CONFIG_LT || AS_EXIT(1)], [CONFIG_LT='$CONFIG_LT'])], + dnl If the libtool generation code is destined for config.status, + dnl expand the accumulated commands and init code now: + [AC_CONFIG_COMMANDS([libtool], + [_LT_OUTPUT_LIBTOOL_COMMANDS], [_LT_OUTPUT_LIBTOOL_COMMANDS_INIT])]) +])#_LT_CONFIG_COMMANDS + + +# Initialize. +m4_define([_LT_OUTPUT_LIBTOOL_COMMANDS_INIT], +[ + +# The HP-UX ksh and POSIX shell print the target directory to stdout +# if CDPATH is set. +(unset CDPATH) >/dev/null 2>&1 && unset CDPATH + +sed_quote_subst='$sed_quote_subst' +double_quote_subst='$double_quote_subst' +delay_variable_subst='$delay_variable_subst' +_LT_CONFIG_STATUS_DECLARATIONS +LTCC='$LTCC' +LTCFLAGS='$LTCFLAGS' +compiler='$compiler_DEFAULT' + +# Quote evaled strings. +for var in lt_decl_all_varnames([[ \ +]], lt_decl_quote_varnames); do + case \`eval \\\\\$ECHO "X\\\\\$\$var"\` in + *[[\\\\\\\`\\"\\\$]]*) + eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"X\\\$\$var\\" | \\\$Xsed -e \\"\\\$sed_quote_subst\\"\\\`\\\\\\"" + ;; + *) + eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\"" + ;; + esac +done + +# Double-quote double-evaled strings. +for var in lt_decl_all_varnames([[ \ +]], lt_decl_dquote_varnames); do + case \`eval \\\\\$ECHO "X\\\\\$\$var"\` in + *[[\\\\\\\`\\"\\\$]]*) + eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"X\\\$\$var\\" | \\\$Xsed -e \\"\\\$double_quote_subst\\" -e \\"\\\$sed_quote_subst\\" -e \\"\\\$delay_variable_subst\\"\\\`\\\\\\"" + ;; + *) + eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\"" + ;; + esac +done + +# Fix-up fallback echo if it was mangled by the above quoting rules. +case \$lt_ECHO in +*'\\\[$]0 --fallback-echo"')dnl " + lt_ECHO=\`\$ECHO "X\$lt_ECHO" | \$Xsed -e 's/\\\\\\\\\\\\\\\[$]0 --fallback-echo"\[$]/\[$]0 --fallback-echo"/'\` + ;; +esac + +_LT_OUTPUT_LIBTOOL_INIT +]) + + +# LT_OUTPUT +# --------- +# This macro allows early generation of the libtool script (before +# AC_OUTPUT is called), incase it is used in configure for compilation +# tests. +AC_DEFUN([LT_OUTPUT], +[: ${CONFIG_LT=./config.lt} +AC_MSG_NOTICE([creating $CONFIG_LT]) +cat >"$CONFIG_LT" <<_LTEOF +#! $SHELL +# Generated by $as_me. +# Run this file to recreate a libtool stub with the current configuration. + +lt_cl_silent=false +SHELL=\${CONFIG_SHELL-$SHELL} +_LTEOF + +cat >>"$CONFIG_LT" <<\_LTEOF +AS_SHELL_SANITIZE +_AS_PREPARE + +exec AS_MESSAGE_FD>&1 +exec AS_MESSAGE_LOG_FD>>config.log +{ + echo + AS_BOX([Running $as_me.]) +} >&AS_MESSAGE_LOG_FD + +lt_cl_help="\ +\`$as_me' creates a local libtool stub from the current configuration, +for use in further configure time tests before the real libtool is +generated. + +Usage: $[0] [[OPTIONS]] + + -h, --help print this help, then exit + -V, --version print version number, then exit + -q, --quiet do not print progress messages + -d, --debug don't remove temporary files + +Report bugs to ." + +lt_cl_version="\ +m4_ifset([AC_PACKAGE_NAME], [AC_PACKAGE_NAME ])config.lt[]dnl +m4_ifset([AC_PACKAGE_VERSION], [ AC_PACKAGE_VERSION]) +configured by $[0], generated by m4_PACKAGE_STRING. + +Copyright (C) 2008 Free Software Foundation, Inc. +This config.lt script is free software; the Free Software Foundation +gives unlimited permision to copy, distribute and modify it." + +while test $[#] != 0 +do + case $[1] in + --version | --v* | -V ) + echo "$lt_cl_version"; exit 0 ;; + --help | --h* | -h ) + echo "$lt_cl_help"; exit 0 ;; + --debug | --d* | -d ) + debug=: ;; + --quiet | --q* | --silent | --s* | -q ) + lt_cl_silent=: ;; + + -*) AC_MSG_ERROR([unrecognized option: $[1] +Try \`$[0] --help' for more information.]) ;; + + *) AC_MSG_ERROR([unrecognized argument: $[1] +Try \`$[0] --help' for more information.]) ;; + esac + shift +done + +if $lt_cl_silent; then + exec AS_MESSAGE_FD>/dev/null +fi +_LTEOF + +cat >>"$CONFIG_LT" <<_LTEOF +_LT_OUTPUT_LIBTOOL_COMMANDS_INIT +_LTEOF + +cat >>"$CONFIG_LT" <<\_LTEOF +AC_MSG_NOTICE([creating $ofile]) +_LT_OUTPUT_LIBTOOL_COMMANDS +AS_EXIT(0) +_LTEOF +chmod +x "$CONFIG_LT" + +# configure is writing to config.log, but config.lt does its own redirection, +# appending to config.log, which fails on DOS, as config.log is still kept +# open by configure. Here we exec the FD to /dev/null, effectively closing +# config.log, so it can be properly (re)opened and appended to by config.lt. +if test "$no_create" != yes; then + lt_cl_success=: + test "$silent" = yes && + lt_config_lt_args="$lt_config_lt_args --quiet" + exec AS_MESSAGE_LOG_FD>/dev/null + $SHELL "$CONFIG_LT" $lt_config_lt_args || lt_cl_success=false + exec AS_MESSAGE_LOG_FD>>config.log + $lt_cl_success || AS_EXIT(1) +fi +])# LT_OUTPUT + + +# _LT_CONFIG(TAG) +# --------------- +# If TAG is the built-in tag, create an initial libtool script with a +# default configuration from the untagged config vars. Otherwise add code +# to config.status for appending the configuration named by TAG from the +# matching tagged config vars. +m4_defun([_LT_CONFIG], +[m4_require([_LT_FILEUTILS_DEFAULTS])dnl +_LT_CONFIG_SAVE_COMMANDS([ + m4_define([_LT_TAG], m4_if([$1], [], [C], [$1]))dnl + m4_if(_LT_TAG, [C], [ + # See if we are running on zsh, and set the options which allow our + # commands through without removal of \ escapes. + if test -n "${ZSH_VERSION+set}" ; then + setopt NO_GLOB_SUBST + fi + + cfgfile="${ofile}T" + trap "$RM \"$cfgfile\"; exit 1" 1 2 15 + $RM "$cfgfile" + + cat <<_LT_EOF >> "$cfgfile" +#! $SHELL + +# `$ECHO "$ofile" | sed 's%^.*/%%'` - Provide generalized library-building support services. +# Generated automatically by $as_me ($PACKAGE$TIMESTAMP) $VERSION +# Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`: +# NOTE: Changes made to this file will be lost: look at ltmain.sh. +# +_LT_COPYING +_LT_LIBTOOL_TAGS + +# ### BEGIN LIBTOOL CONFIG +_LT_LIBTOOL_CONFIG_VARS +_LT_LIBTOOL_TAG_VARS +# ### END LIBTOOL CONFIG + +_LT_EOF + + case $host_os in + aix3*) + cat <<\_LT_EOF >> "$cfgfile" +# AIX sometimes has problems with the GCC collect2 program. For some +# reason, if we set the COLLECT_NAMES environment variable, the problems +# vanish in a puff of smoke. +if test "X${COLLECT_NAMES+set}" != Xset; then + COLLECT_NAMES= + export COLLECT_NAMES +fi +_LT_EOF + ;; + esac + + _LT_PROG_LTMAIN + + # We use sed instead of cat because bash on DJGPP gets confused if + # if finds mixed CR/LF and LF-only lines. Since sed operates in + # text mode, it properly converts lines to CR/LF. This bash problem + # is reportedly fixed, but why not run on old versions too? + sed '/^# Generated shell functions inserted here/q' "$ltmain" >> "$cfgfile" \ + || (rm -f "$cfgfile"; exit 1) + + _LT_PROG_XSI_SHELLFNS + + sed -n '/^# Generated shell functions inserted here/,$p' "$ltmain" >> "$cfgfile" \ + || (rm -f "$cfgfile"; exit 1) + + mv -f "$cfgfile" "$ofile" || + (rm -f "$ofile" && cp "$cfgfile" "$ofile" && rm -f "$cfgfile") + chmod +x "$ofile" +], +[cat <<_LT_EOF >> "$ofile" + +dnl Unfortunately we have to use $1 here, since _LT_TAG is not expanded +dnl in a comment (ie after a #). +# ### BEGIN LIBTOOL TAG CONFIG: $1 +_LT_LIBTOOL_TAG_VARS(_LT_TAG) +# ### END LIBTOOL TAG CONFIG: $1 +_LT_EOF +])dnl /m4_if +], +[m4_if([$1], [], [ + PACKAGE='$PACKAGE' + VERSION='$VERSION' + TIMESTAMP='$TIMESTAMP' + RM='$RM' + ofile='$ofile'], []) +])dnl /_LT_CONFIG_SAVE_COMMANDS +])# _LT_CONFIG + + +# LT_SUPPORTED_TAG(TAG) +# --------------------- +# Trace this macro to discover what tags are supported by the libtool +# --tag option, using: +# autoconf --trace 'LT_SUPPORTED_TAG:$1' +AC_DEFUN([LT_SUPPORTED_TAG], []) + + +# C support is built-in for now +m4_define([_LT_LANG_C_enabled], []) +m4_define([_LT_TAGS], []) + + +# LT_LANG(LANG) +# ------------- +# Enable libtool support for the given language if not already enabled. +AC_DEFUN([LT_LANG], +[AC_BEFORE([$0], [LT_OUTPUT])dnl +m4_case([$1], + [C], [_LT_LANG(C)], + [C++], [_LT_LANG(CXX)], + [Java], [_LT_LANG(GCJ)], + [Fortran 77], [_LT_LANG(F77)], + [Fortran], [_LT_LANG(FC)], + [Windows Resource], [_LT_LANG(RC)], + [m4_ifdef([_LT_LANG_]$1[_CONFIG], + [_LT_LANG($1)], + [m4_fatal([$0: unsupported language: "$1"])])])dnl +])# LT_LANG + + +# _LT_LANG(LANGNAME) +# ------------------ +m4_defun([_LT_LANG], +[m4_ifdef([_LT_LANG_]$1[_enabled], [], + [LT_SUPPORTED_TAG([$1])dnl + m4_append([_LT_TAGS], [$1 ])dnl + m4_define([_LT_LANG_]$1[_enabled], [])dnl + _LT_LANG_$1_CONFIG($1)])dnl +])# _LT_LANG + + +# _LT_LANG_DEFAULT_CONFIG +# ----------------------- +m4_defun([_LT_LANG_DEFAULT_CONFIG], +[AC_PROVIDE_IFELSE([AC_PROG_CXX], + [LT_LANG(CXX)], + [m4_define([AC_PROG_CXX], defn([AC_PROG_CXX])[LT_LANG(CXX)])]) + +AC_PROVIDE_IFELSE([AC_PROG_F77], + [LT_LANG(F77)], + [m4_define([AC_PROG_F77], defn([AC_PROG_F77])[LT_LANG(F77)])]) + +AC_PROVIDE_IFELSE([AC_PROG_FC], + [LT_LANG(FC)], + [m4_define([AC_PROG_FC], defn([AC_PROG_FC])[LT_LANG(FC)])]) + +dnl The call to [A][M_PROG_GCJ] is quoted like that to stop aclocal +dnl pulling things in needlessly. +AC_PROVIDE_IFELSE([AC_PROG_GCJ], + [LT_LANG(GCJ)], + [AC_PROVIDE_IFELSE([A][M_PROG_GCJ], + [LT_LANG(GCJ)], + [AC_PROVIDE_IFELSE([LT_PROG_GCJ], + [LT_LANG(GCJ)], + [m4_ifdef([AC_PROG_GCJ], + [m4_define([AC_PROG_GCJ], defn([AC_PROG_GCJ])[LT_LANG(GCJ)])]) + m4_ifdef([A][M_PROG_GCJ], + [m4_define([A][M_PROG_GCJ], defn([A][M_PROG_GCJ])[LT_LANG(GCJ)])]) + m4_ifdef([LT_PROG_GCJ], + [m4_define([LT_PROG_GCJ], defn([LT_PROG_GCJ])[LT_LANG(GCJ)])])])])]) + +AC_PROVIDE_IFELSE([LT_PROG_RC], + [LT_LANG(RC)], + [m4_define([LT_PROG_RC], defn([LT_PROG_RC])[LT_LANG(RC)])]) +])# _LT_LANG_DEFAULT_CONFIG + +# Obsolete macros: +AU_DEFUN([AC_LIBTOOL_CXX], [LT_LANG(C++)]) +AU_DEFUN([AC_LIBTOOL_F77], [LT_LANG(Fortran 77)]) +AU_DEFUN([AC_LIBTOOL_FC], [LT_LANG(Fortran)]) +AU_DEFUN([AC_LIBTOOL_GCJ], [LT_LANG(Java)]) +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([AC_LIBTOOL_CXX], []) +dnl AC_DEFUN([AC_LIBTOOL_F77], []) +dnl AC_DEFUN([AC_LIBTOOL_FC], []) +dnl AC_DEFUN([AC_LIBTOOL_GCJ], []) + + +# _LT_TAG_COMPILER +# ---------------- +m4_defun([_LT_TAG_COMPILER], +[AC_REQUIRE([AC_PROG_CC])dnl + +_LT_DECL([LTCC], [CC], [1], [A C compiler])dnl +_LT_DECL([LTCFLAGS], [CFLAGS], [1], [LTCC compiler flags])dnl +_LT_TAGDECL([CC], [compiler], [1], [A language specific compiler])dnl +_LT_TAGDECL([with_gcc], [GCC], [0], [Is the compiler the GNU compiler?])dnl + +# If no C compiler was specified, use CC. +LTCC=${LTCC-"$CC"} + +# If no C compiler flags were specified, use CFLAGS. +LTCFLAGS=${LTCFLAGS-"$CFLAGS"} + +# Allow CC to be a program name with arguments. +compiler=$CC +])# _LT_TAG_COMPILER + + +# _LT_COMPILER_BOILERPLATE +# ------------------------ +# Check for compiler boilerplate output or warnings with +# the simple compiler test code. +m4_defun([_LT_COMPILER_BOILERPLATE], +[m4_require([_LT_DECL_SED])dnl +ac_outfile=conftest.$ac_objext +echo "$lt_simple_compile_test_code" >conftest.$ac_ext +eval "$ac_compile" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err +_lt_compiler_boilerplate=`cat conftest.err` +$RM conftest* +])# _LT_COMPILER_BOILERPLATE + + +# _LT_LINKER_BOILERPLATE +# ---------------------- +# Check for linker boilerplate output or warnings with +# the simple link test code. +m4_defun([_LT_LINKER_BOILERPLATE], +[m4_require([_LT_DECL_SED])dnl +ac_outfile=conftest.$ac_objext +echo "$lt_simple_link_test_code" >conftest.$ac_ext +eval "$ac_link" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err +_lt_linker_boilerplate=`cat conftest.err` +$RM -r conftest* +])# _LT_LINKER_BOILERPLATE + +# _LT_REQUIRED_DARWIN_CHECKS +# ------------------------- +m4_defun_once([_LT_REQUIRED_DARWIN_CHECKS],[ + case $host_os in + rhapsody* | darwin*) + AC_CHECK_TOOL([DSYMUTIL], [dsymutil], [:]) + AC_CHECK_TOOL([NMEDIT], [nmedit], [:]) + AC_CHECK_TOOL([LIPO], [lipo], [:]) + AC_CHECK_TOOL([OTOOL], [otool], [:]) + AC_CHECK_TOOL([OTOOL64], [otool64], [:]) + _LT_DECL([], [DSYMUTIL], [1], + [Tool to manipulate archived DWARF debug symbol files on Mac OS X]) + _LT_DECL([], [NMEDIT], [1], + [Tool to change global to local symbols on Mac OS X]) + _LT_DECL([], [LIPO], [1], + [Tool to manipulate fat objects and archives on Mac OS X]) + _LT_DECL([], [OTOOL], [1], + [ldd/readelf like tool for Mach-O binaries on Mac OS X]) + _LT_DECL([], [OTOOL64], [1], + [ldd/readelf like tool for 64 bit Mach-O binaries on Mac OS X 10.4]) + + AC_CACHE_CHECK([for -single_module linker flag],[lt_cv_apple_cc_single_mod], + [lt_cv_apple_cc_single_mod=no + if test -z "${LT_MULTI_MODULE}"; then + # By default we will add the -single_module flag. You can override + # by either setting the environment variable LT_MULTI_MODULE + # non-empty at configure time, or by adding -multi_module to the + # link flags. + rm -rf libconftest.dylib* + echo "int foo(void){return 1;}" > conftest.c + echo "$LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \ +-dynamiclib -Wl,-single_module conftest.c" >&AS_MESSAGE_LOG_FD + $LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \ + -dynamiclib -Wl,-single_module conftest.c 2>conftest.err + _lt_result=$? + if test -f libconftest.dylib && test ! -s conftest.err && test $_lt_result = 0; then + lt_cv_apple_cc_single_mod=yes + else + cat conftest.err >&AS_MESSAGE_LOG_FD + fi + rm -rf libconftest.dylib* + rm -f conftest.* + fi]) + AC_CACHE_CHECK([for -exported_symbols_list linker flag], + [lt_cv_ld_exported_symbols_list], + [lt_cv_ld_exported_symbols_list=no + save_LDFLAGS=$LDFLAGS + echo "_main" > conftest.sym + LDFLAGS="$LDFLAGS -Wl,-exported_symbols_list,conftest.sym" + AC_LINK_IFELSE([AC_LANG_PROGRAM([],[])], + [lt_cv_ld_exported_symbols_list=yes], + [lt_cv_ld_exported_symbols_list=no]) + LDFLAGS="$save_LDFLAGS" + ]) + case $host_os in + rhapsody* | darwin1.[[012]]) + _lt_dar_allow_undefined='${wl}-undefined ${wl}suppress' ;; + darwin1.*) + _lt_dar_allow_undefined='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' ;; + darwin*) # darwin 5.x on + # if running on 10.5 or later, the deployment target defaults + # to the OS version, if on x86, and 10.4, the deployment + # target defaults to 10.4. Don't you love it? + case ${MACOSX_DEPLOYMENT_TARGET-10.0},$host in + 10.0,*86*-darwin8*|10.0,*-darwin[[91]]*) + _lt_dar_allow_undefined='${wl}-undefined ${wl}dynamic_lookup' ;; + 10.[[012]]*) + _lt_dar_allow_undefined='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' ;; + 10.*) + _lt_dar_allow_undefined='${wl}-undefined ${wl}dynamic_lookup' ;; + esac + ;; + esac + if test "$lt_cv_apple_cc_single_mod" = "yes"; then + _lt_dar_single_mod='$single_module' + fi + if test "$lt_cv_ld_exported_symbols_list" = "yes"; then + _lt_dar_export_syms=' ${wl}-exported_symbols_list,$output_objdir/${libname}-symbols.expsym' + else + _lt_dar_export_syms='~$NMEDIT -s $output_objdir/${libname}-symbols.expsym ${lib}' + fi + if test "$DSYMUTIL" != ":"; then + _lt_dsymutil='~$DSYMUTIL $lib || :' + else + _lt_dsymutil= + fi + ;; + esac +]) + + +# _LT_DARWIN_LINKER_FEATURES +# -------------------------- +# Checks for linker and compiler features on darwin +m4_defun([_LT_DARWIN_LINKER_FEATURES], +[ + m4_require([_LT_REQUIRED_DARWIN_CHECKS]) + _LT_TAGVAR(archive_cmds_need_lc, $1)=no + _LT_TAGVAR(hardcode_direct, $1)=no + _LT_TAGVAR(hardcode_automatic, $1)=yes + _LT_TAGVAR(hardcode_shlibpath_var, $1)=unsupported + _LT_TAGVAR(whole_archive_flag_spec, $1)='' + _LT_TAGVAR(link_all_deplibs, $1)=yes + _LT_TAGVAR(allow_undefined_flag, $1)="$_lt_dar_allow_undefined" + case $cc_basename in + ifort*) _lt_dar_can_shared=yes ;; + *) _lt_dar_can_shared=$GCC ;; + esac + if test "$_lt_dar_can_shared" = "yes"; then + output_verbose_link_cmd=echo + _LT_TAGVAR(archive_cmds, $1)="\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod${_lt_dsymutil}" + _LT_TAGVAR(module_cmds, $1)="\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dsymutil}" + _LT_TAGVAR(archive_expsym_cmds, $1)="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring ${_lt_dar_single_mod}${_lt_dar_export_syms}${_lt_dsymutil}" + _LT_TAGVAR(module_expsym_cmds, $1)="sed -e 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dar_export_syms}${_lt_dsymutil}" + m4_if([$1], [CXX], +[ if test "$lt_cv_apple_cc_single_mod" != "yes"; then + _LT_TAGVAR(archive_cmds, $1)="\$CC -r -keep_private_externs -nostdlib -o \${lib}-master.o \$libobjs~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \${lib}-master.o \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring${_lt_dsymutil}" + _LT_TAGVAR(archive_expsym_cmds, $1)="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -r -keep_private_externs -nostdlib -o \${lib}-master.o \$libobjs~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \${lib}-master.o \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring${_lt_dar_export_syms}${_lt_dsymutil}" + fi +],[]) + else + _LT_TAGVAR(ld_shlibs, $1)=no + fi +]) + +# _LT_SYS_MODULE_PATH_AIX +# ----------------------- +# Links a minimal program and checks the executable +# for the system default hardcoded library path. In most cases, +# this is /usr/lib:/lib, but when the MPI compilers are used +# the location of the communication and MPI libs are included too. +# If we don't find anything, use the default library path according +# to the aix ld manual. +m4_defun([_LT_SYS_MODULE_PATH_AIX], +[m4_require([_LT_DECL_SED])dnl +AC_LINK_IFELSE(AC_LANG_PROGRAM,[ +lt_aix_libpath_sed=' + /Import File Strings/,/^$/ { + /^0/ { + s/^0 *\(.*\)$/\1/ + p + } + }' +aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` +# Check for a 64-bit object if we didn't find anything. +if test -z "$aix_libpath"; then + aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` +fi],[]) +if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi +])# _LT_SYS_MODULE_PATH_AIX + + +# _LT_SHELL_INIT(ARG) +# ------------------- +m4_define([_LT_SHELL_INIT], +[ifdef([AC_DIVERSION_NOTICE], + [AC_DIVERT_PUSH(AC_DIVERSION_NOTICE)], + [AC_DIVERT_PUSH(NOTICE)]) +$1 +AC_DIVERT_POP +])# _LT_SHELL_INIT + + +# _LT_PROG_ECHO_BACKSLASH +# ----------------------- +# Add some code to the start of the generated configure script which +# will find an echo command which doesn't interpret backslashes. +m4_defun([_LT_PROG_ECHO_BACKSLASH], +[_LT_SHELL_INIT([ +# Check that we are running under the correct shell. +SHELL=${CONFIG_SHELL-/bin/sh} + +case X$lt_ECHO in +X*--fallback-echo) + # Remove one level of quotation (which was required for Make). + ECHO=`echo "$lt_ECHO" | sed 's,\\\\\[$]\\[$]0,'[$]0','` + ;; +esac + +ECHO=${lt_ECHO-echo} +if test "X[$]1" = X--no-reexec; then + # Discard the --no-reexec flag, and continue. + shift +elif test "X[$]1" = X--fallback-echo; then + # Avoid inline document here, it may be left over + : +elif test "X`{ $ECHO '\t'; } 2>/dev/null`" = 'X\t' ; then + # Yippee, $ECHO works! + : +else + # Restart under the correct shell. + exec $SHELL "[$]0" --no-reexec ${1+"[$]@"} +fi + +if test "X[$]1" = X--fallback-echo; then + # used as fallback echo + shift + cat <<_LT_EOF +[$]* +_LT_EOF + exit 0 +fi + +# The HP-UX ksh and POSIX shell print the target directory to stdout +# if CDPATH is set. +(unset CDPATH) >/dev/null 2>&1 && unset CDPATH + +if test -z "$lt_ECHO"; then + if test "X${echo_test_string+set}" != Xset; then + # find a string as large as possible, as long as the shell can cope with it + for cmd in 'sed 50q "[$]0"' 'sed 20q "[$]0"' 'sed 10q "[$]0"' 'sed 2q "[$]0"' 'echo test'; do + # expected sizes: less than 2Kb, 1Kb, 512 bytes, 16 bytes, ... + if { echo_test_string=`eval $cmd`; } 2>/dev/null && + { test "X$echo_test_string" = "X$echo_test_string"; } 2>/dev/null + then + break + fi + done + fi + + if test "X`{ $ECHO '\t'; } 2>/dev/null`" = 'X\t' && + echo_testing_string=`{ $ECHO "$echo_test_string"; } 2>/dev/null` && + test "X$echo_testing_string" = "X$echo_test_string"; then + : + else + # The Solaris, AIX, and Digital Unix default echo programs unquote + # backslashes. This makes it impossible to quote backslashes using + # echo "$something" | sed 's/\\/\\\\/g' + # + # So, first we look for a working echo in the user's PATH. + + lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR + for dir in $PATH /usr/ucb; do + IFS="$lt_save_ifs" + if (test -f $dir/echo || test -f $dir/echo$ac_exeext) && + test "X`($dir/echo '\t') 2>/dev/null`" = 'X\t' && + echo_testing_string=`($dir/echo "$echo_test_string") 2>/dev/null` && + test "X$echo_testing_string" = "X$echo_test_string"; then + ECHO="$dir/echo" + break + fi + done + IFS="$lt_save_ifs" + + if test "X$ECHO" = Xecho; then + # We didn't find a better echo, so look for alternatives. + if test "X`{ print -r '\t'; } 2>/dev/null`" = 'X\t' && + echo_testing_string=`{ print -r "$echo_test_string"; } 2>/dev/null` && + test "X$echo_testing_string" = "X$echo_test_string"; then + # This shell has a builtin print -r that does the trick. + ECHO='print -r' + elif { test -f /bin/ksh || test -f /bin/ksh$ac_exeext; } && + test "X$CONFIG_SHELL" != X/bin/ksh; then + # If we have ksh, try running configure again with it. + ORIGINAL_CONFIG_SHELL=${CONFIG_SHELL-/bin/sh} + export ORIGINAL_CONFIG_SHELL + CONFIG_SHELL=/bin/ksh + export CONFIG_SHELL + exec $CONFIG_SHELL "[$]0" --no-reexec ${1+"[$]@"} + else + # Try using printf. + ECHO='printf %s\n' + if test "X`{ $ECHO '\t'; } 2>/dev/null`" = 'X\t' && + echo_testing_string=`{ $ECHO "$echo_test_string"; } 2>/dev/null` && + test "X$echo_testing_string" = "X$echo_test_string"; then + # Cool, printf works + : + elif echo_testing_string=`($ORIGINAL_CONFIG_SHELL "[$]0" --fallback-echo '\t') 2>/dev/null` && + test "X$echo_testing_string" = 'X\t' && + echo_testing_string=`($ORIGINAL_CONFIG_SHELL "[$]0" --fallback-echo "$echo_test_string") 2>/dev/null` && + test "X$echo_testing_string" = "X$echo_test_string"; then + CONFIG_SHELL=$ORIGINAL_CONFIG_SHELL + export CONFIG_SHELL + SHELL="$CONFIG_SHELL" + export SHELL + ECHO="$CONFIG_SHELL [$]0 --fallback-echo" + elif echo_testing_string=`($CONFIG_SHELL "[$]0" --fallback-echo '\t') 2>/dev/null` && + test "X$echo_testing_string" = 'X\t' && + echo_testing_string=`($CONFIG_SHELL "[$]0" --fallback-echo "$echo_test_string") 2>/dev/null` && + test "X$echo_testing_string" = "X$echo_test_string"; then + ECHO="$CONFIG_SHELL [$]0 --fallback-echo" + else + # maybe with a smaller string... + prev=: + + for cmd in 'echo test' 'sed 2q "[$]0"' 'sed 10q "[$]0"' 'sed 20q "[$]0"' 'sed 50q "[$]0"'; do + if { test "X$echo_test_string" = "X`eval $cmd`"; } 2>/dev/null + then + break + fi + prev="$cmd" + done + + if test "$prev" != 'sed 50q "[$]0"'; then + echo_test_string=`eval $prev` + export echo_test_string + exec ${ORIGINAL_CONFIG_SHELL-${CONFIG_SHELL-/bin/sh}} "[$]0" ${1+"[$]@"} + else + # Oops. We lost completely, so just stick with echo. + ECHO=echo + fi + fi + fi + fi + fi +fi + +# Copy echo and quote the copy suitably for passing to libtool from +# the Makefile, instead of quoting the original, which is used later. +lt_ECHO=$ECHO +if test "X$lt_ECHO" = "X$CONFIG_SHELL [$]0 --fallback-echo"; then + lt_ECHO="$CONFIG_SHELL \\\$\[$]0 --fallback-echo" +fi + +AC_SUBST(lt_ECHO) +]) +_LT_DECL([], [SHELL], [1], [Shell to use when invoking shell scripts]) +_LT_DECL([], [ECHO], [1], + [An echo program that does not interpret backslashes]) +])# _LT_PROG_ECHO_BACKSLASH + + +# _LT_ENABLE_LOCK +# --------------- +m4_defun([_LT_ENABLE_LOCK], +[AC_ARG_ENABLE([libtool-lock], + [AS_HELP_STRING([--disable-libtool-lock], + [avoid locking (might break parallel builds)])]) +test "x$enable_libtool_lock" != xno && enable_libtool_lock=yes + +# Some flags need to be propagated to the compiler or linker for good +# libtool support. +case $host in +ia64-*-hpux*) + # Find out which ABI we are using. + echo 'int i;' > conftest.$ac_ext + if AC_TRY_EVAL(ac_compile); then + case `/usr/bin/file conftest.$ac_objext` in + *ELF-32*) + HPUX_IA64_MODE="32" + ;; + *ELF-64*) + HPUX_IA64_MODE="64" + ;; + esac + fi + rm -rf conftest* + ;; +*-*-irix6*) + # Find out which ABI we are using. + echo '[#]line __oline__ "configure"' > conftest.$ac_ext + if AC_TRY_EVAL(ac_compile); then + if test "$lt_cv_prog_gnu_ld" = yes; then + case `/usr/bin/file conftest.$ac_objext` in + *32-bit*) + LD="${LD-ld} -melf32bsmip" + ;; + *N32*) + LD="${LD-ld} -melf32bmipn32" + ;; + *64-bit*) + LD="${LD-ld} -melf64bmip" + ;; + esac + else + case `/usr/bin/file conftest.$ac_objext` in + *32-bit*) + LD="${LD-ld} -32" + ;; + *N32*) + LD="${LD-ld} -n32" + ;; + *64-bit*) + LD="${LD-ld} -64" + ;; + esac + fi + fi + rm -rf conftest* + ;; + +x86_64-*kfreebsd*-gnu|x86_64-*linux*|ppc*-*linux*|powerpc*-*linux*| \ +s390*-*linux*|s390*-*tpf*|sparc*-*linux*) + # Find out which ABI we are using. + echo 'int i;' > conftest.$ac_ext + if AC_TRY_EVAL(ac_compile); then + case `/usr/bin/file conftest.o` in + *32-bit*) + case $host in + x86_64-*kfreebsd*-gnu) + LD="${LD-ld} -m elf_i386_fbsd" + ;; + x86_64-*linux*) + LD="${LD-ld} -m elf_i386" + ;; + ppc64-*linux*|powerpc64-*linux*) + LD="${LD-ld} -m elf32ppclinux" + ;; + s390x-*linux*) + LD="${LD-ld} -m elf_s390" + ;; + sparc64-*linux*) + LD="${LD-ld} -m elf32_sparc" + ;; + esac + ;; + *64-bit*) + case $host in + x86_64-*kfreebsd*-gnu) + LD="${LD-ld} -m elf_x86_64_fbsd" + ;; + x86_64-*linux*) + LD="${LD-ld} -m elf_x86_64" + ;; + ppc*-*linux*|powerpc*-*linux*) + LD="${LD-ld} -m elf64ppc" + ;; + s390*-*linux*|s390*-*tpf*) + LD="${LD-ld} -m elf64_s390" + ;; + sparc*-*linux*) + LD="${LD-ld} -m elf64_sparc" + ;; + esac + ;; + esac + fi + rm -rf conftest* + ;; + +*-*-sco3.2v5*) + # On SCO OpenServer 5, we need -belf to get full-featured binaries. + SAVE_CFLAGS="$CFLAGS" + CFLAGS="$CFLAGS -belf" + AC_CACHE_CHECK([whether the C compiler needs -belf], lt_cv_cc_needs_belf, + [AC_LANG_PUSH(C) + AC_LINK_IFELSE([AC_LANG_PROGRAM([[]],[[]])],[lt_cv_cc_needs_belf=yes],[lt_cv_cc_needs_belf=no]) + AC_LANG_POP]) + if test x"$lt_cv_cc_needs_belf" != x"yes"; then + # this is probably gcc 2.8.0, egcs 1.0 or newer; no need for -belf + CFLAGS="$SAVE_CFLAGS" + fi + ;; +sparc*-*solaris*) + # Find out which ABI we are using. + echo 'int i;' > conftest.$ac_ext + if AC_TRY_EVAL(ac_compile); then + case `/usr/bin/file conftest.o` in + *64-bit*) + case $lt_cv_prog_gnu_ld in + yes*) LD="${LD-ld} -m elf64_sparc" ;; + *) + if ${LD-ld} -64 -r -o conftest2.o conftest.o >/dev/null 2>&1; then + LD="${LD-ld} -64" + fi + ;; + esac + ;; + esac + fi + rm -rf conftest* + ;; +esac + +need_locks="$enable_libtool_lock" +])# _LT_ENABLE_LOCK + + +# _LT_CMD_OLD_ARCHIVE +# ------------------- +m4_defun([_LT_CMD_OLD_ARCHIVE], +[AC_CHECK_TOOL(AR, ar, false) +test -z "$AR" && AR=ar +test -z "$AR_FLAGS" && AR_FLAGS=cru +_LT_DECL([], [AR], [1], [The archiver]) +_LT_DECL([], [AR_FLAGS], [1]) + +AC_CHECK_TOOL(STRIP, strip, :) +test -z "$STRIP" && STRIP=: +_LT_DECL([], [STRIP], [1], [A symbol stripping program]) + +AC_CHECK_TOOL(RANLIB, ranlib, :) +test -z "$RANLIB" && RANLIB=: +_LT_DECL([], [RANLIB], [1], + [Commands used to install an old-style archive]) + +# Determine commands to create old-style static archives. +old_archive_cmds='$AR $AR_FLAGS $oldlib$oldobjs' +old_postinstall_cmds='chmod 644 $oldlib' +old_postuninstall_cmds= + +if test -n "$RANLIB"; then + case $host_os in + openbsd*) + old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB -t \$oldlib" + ;; + *) + old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB \$oldlib" + ;; + esac + old_archive_cmds="$old_archive_cmds~\$RANLIB \$oldlib" +fi +_LT_DECL([], [old_postinstall_cmds], [2]) +_LT_DECL([], [old_postuninstall_cmds], [2]) +_LT_TAGDECL([], [old_archive_cmds], [2], + [Commands used to build an old-style archive]) +])# _LT_CMD_OLD_ARCHIVE + + +# _LT_COMPILER_OPTION(MESSAGE, VARIABLE-NAME, FLAGS, +# [OUTPUT-FILE], [ACTION-SUCCESS], [ACTION-FAILURE]) +# ---------------------------------------------------------------- +# Check whether the given compiler option works +AC_DEFUN([_LT_COMPILER_OPTION], +[m4_require([_LT_FILEUTILS_DEFAULTS])dnl +m4_require([_LT_DECL_SED])dnl +AC_CACHE_CHECK([$1], [$2], + [$2=no + m4_if([$4], , [ac_outfile=conftest.$ac_objext], [ac_outfile=$4]) + echo "$lt_simple_compile_test_code" > conftest.$ac_ext + lt_compiler_flag="$3" + # Insert the option either (1) after the last *FLAGS variable, or + # (2) before a word containing "conftest.", or (3) at the end. + # Note that $ac_compile itself does not contain backslashes and begins + # with a dollar sign (not a hyphen), so the echo should work correctly. + # The option is referenced via a variable to avoid confusing sed. + lt_compile=`echo "$ac_compile" | $SED \ + -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ + -e 's: [[^ ]]*conftest\.: $lt_compiler_flag&:; t' \ + -e 's:$: $lt_compiler_flag:'` + (eval echo "\"\$as_me:__oline__: $lt_compile\"" >&AS_MESSAGE_LOG_FD) + (eval "$lt_compile" 2>conftest.err) + ac_status=$? + cat conftest.err >&AS_MESSAGE_LOG_FD + echo "$as_me:__oline__: \$? = $ac_status" >&AS_MESSAGE_LOG_FD + if (exit $ac_status) && test -s "$ac_outfile"; then + # The compiler can only warn and ignore the option if not recognized + # So say no if there are warnings other than the usual output. + $ECHO "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' >conftest.exp + $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 + if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then + $2=yes + fi + fi + $RM conftest* +]) + +if test x"[$]$2" = xyes; then + m4_if([$5], , :, [$5]) +else + m4_if([$6], , :, [$6]) +fi +])# _LT_COMPILER_OPTION + +# Old name: +AU_ALIAS([AC_LIBTOOL_COMPILER_OPTION], [_LT_COMPILER_OPTION]) +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([AC_LIBTOOL_COMPILER_OPTION], []) + + +# _LT_LINKER_OPTION(MESSAGE, VARIABLE-NAME, FLAGS, +# [ACTION-SUCCESS], [ACTION-FAILURE]) +# ---------------------------------------------------- +# Check whether the given linker option works +AC_DEFUN([_LT_LINKER_OPTION], +[m4_require([_LT_FILEUTILS_DEFAULTS])dnl +m4_require([_LT_DECL_SED])dnl +AC_CACHE_CHECK([$1], [$2], + [$2=no + save_LDFLAGS="$LDFLAGS" + LDFLAGS="$LDFLAGS $3" + echo "$lt_simple_link_test_code" > conftest.$ac_ext + if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then + # The linker can only warn and ignore the option if not recognized + # So say no if there are warnings + if test -s conftest.err; then + # Append any errors to the config.log. + cat conftest.err 1>&AS_MESSAGE_LOG_FD + $ECHO "X$_lt_linker_boilerplate" | $Xsed -e '/^$/d' > conftest.exp + $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 + if diff conftest.exp conftest.er2 >/dev/null; then + $2=yes + fi + else + $2=yes + fi + fi + $RM -r conftest* + LDFLAGS="$save_LDFLAGS" +]) + +if test x"[$]$2" = xyes; then + m4_if([$4], , :, [$4]) +else + m4_if([$5], , :, [$5]) +fi +])# _LT_LINKER_OPTION + +# Old name: +AU_ALIAS([AC_LIBTOOL_LINKER_OPTION], [_LT_LINKER_OPTION]) +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([AC_LIBTOOL_LINKER_OPTION], []) + + +# LT_CMD_MAX_LEN +#--------------- +AC_DEFUN([LT_CMD_MAX_LEN], +[AC_REQUIRE([AC_CANONICAL_HOST])dnl +# find the maximum length of command line arguments +AC_MSG_CHECKING([the maximum length of command line arguments]) +AC_CACHE_VAL([lt_cv_sys_max_cmd_len], [dnl + i=0 + teststring="ABCD" + + case $build_os in + msdosdjgpp*) + # On DJGPP, this test can blow up pretty badly due to problems in libc + # (any single argument exceeding 2000 bytes causes a buffer overrun + # during glob expansion). Even if it were fixed, the result of this + # check would be larger than it should be. + lt_cv_sys_max_cmd_len=12288; # 12K is about right + ;; + + gnu*) + # Under GNU Hurd, this test is not required because there is + # no limit to the length of command line arguments. + # Libtool will interpret -1 as no limit whatsoever + lt_cv_sys_max_cmd_len=-1; + ;; + + cygwin* | mingw* | cegcc*) + # On Win9x/ME, this test blows up -- it succeeds, but takes + # about 5 minutes as the teststring grows exponentially. + # Worse, since 9x/ME are not pre-emptively multitasking, + # you end up with a "frozen" computer, even though with patience + # the test eventually succeeds (with a max line length of 256k). + # Instead, let's just punt: use the minimum linelength reported by + # all of the supported platforms: 8192 (on NT/2K/XP). + lt_cv_sys_max_cmd_len=8192; + ;; + + amigaos*) + # On AmigaOS with pdksh, this test takes hours, literally. + # So we just punt and use a minimum line length of 8192. + lt_cv_sys_max_cmd_len=8192; + ;; + + netbsd* | freebsd* | openbsd* | darwin* | dragonfly*) + # This has been around since 386BSD, at least. Likely further. + if test -x /sbin/sysctl; then + lt_cv_sys_max_cmd_len=`/sbin/sysctl -n kern.argmax` + elif test -x /usr/sbin/sysctl; then + lt_cv_sys_max_cmd_len=`/usr/sbin/sysctl -n kern.argmax` + else + lt_cv_sys_max_cmd_len=65536 # usable default for all BSDs + fi + # And add a safety zone + lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4` + lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3` + ;; + + interix*) + # We know the value 262144 and hardcode it with a safety zone (like BSD) + lt_cv_sys_max_cmd_len=196608 + ;; + + osf*) + # Dr. Hans Ekkehard Plesser reports seeing a kernel panic running configure + # due to this test when exec_disable_arg_limit is 1 on Tru64. It is not + # nice to cause kernel panics so lets avoid the loop below. + # First set a reasonable default. + lt_cv_sys_max_cmd_len=16384 + # + if test -x /sbin/sysconfig; then + case `/sbin/sysconfig -q proc exec_disable_arg_limit` in + *1*) lt_cv_sys_max_cmd_len=-1 ;; + esac + fi + ;; + sco3.2v5*) + lt_cv_sys_max_cmd_len=102400 + ;; + sysv5* | sco5v6* | sysv4.2uw2*) + kargmax=`grep ARG_MAX /etc/conf/cf.d/stune 2>/dev/null` + if test -n "$kargmax"; then + lt_cv_sys_max_cmd_len=`echo $kargmax | sed 's/.*[[ ]]//'` + else + lt_cv_sys_max_cmd_len=32768 + fi + ;; + *) + lt_cv_sys_max_cmd_len=`(getconf ARG_MAX) 2> /dev/null` + if test -n "$lt_cv_sys_max_cmd_len"; then + lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4` + lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3` + else + # Make teststring a little bigger before we do anything with it. + # a 1K string should be a reasonable start. + for i in 1 2 3 4 5 6 7 8 ; do + teststring=$teststring$teststring + done + SHELL=${SHELL-${CONFIG_SHELL-/bin/sh}} + # If test is not a shell built-in, we'll probably end up computing a + # maximum length that is only half of the actual maximum length, but + # we can't tell. + while { test "X"`$SHELL [$]0 --fallback-echo "X$teststring$teststring" 2>/dev/null` \ + = "XX$teststring$teststring"; } >/dev/null 2>&1 && + test $i != 17 # 1/2 MB should be enough + do + i=`expr $i + 1` + teststring=$teststring$teststring + done + # Only check the string length outside the loop. + lt_cv_sys_max_cmd_len=`expr "X$teststring" : ".*" 2>&1` + teststring= + # Add a significant safety factor because C++ compilers can tack on + # massive amounts of additional arguments before passing them to the + # linker. It appears as though 1/2 is a usable value. + lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 2` + fi + ;; + esac +]) +if test -n $lt_cv_sys_max_cmd_len ; then + AC_MSG_RESULT($lt_cv_sys_max_cmd_len) +else + AC_MSG_RESULT(none) +fi +max_cmd_len=$lt_cv_sys_max_cmd_len +_LT_DECL([], [max_cmd_len], [0], + [What is the maximum length of a command?]) +])# LT_CMD_MAX_LEN + +# Old name: +AU_ALIAS([AC_LIBTOOL_SYS_MAX_CMD_LEN], [LT_CMD_MAX_LEN]) +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([AC_LIBTOOL_SYS_MAX_CMD_LEN], []) + + +# _LT_HEADER_DLFCN +# ---------------- +m4_defun([_LT_HEADER_DLFCN], +[AC_CHECK_HEADERS([dlfcn.h], [], [], [AC_INCLUDES_DEFAULT])dnl +])# _LT_HEADER_DLFCN + + +# _LT_TRY_DLOPEN_SELF (ACTION-IF-TRUE, ACTION-IF-TRUE-W-USCORE, +# ACTION-IF-FALSE, ACTION-IF-CROSS-COMPILING) +# ---------------------------------------------------------------- +m4_defun([_LT_TRY_DLOPEN_SELF], +[m4_require([_LT_HEADER_DLFCN])dnl +if test "$cross_compiling" = yes; then : + [$4] +else + lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 + lt_status=$lt_dlunknown + cat > conftest.$ac_ext <<_LT_EOF +[#line __oline__ "configure" +#include "confdefs.h" + +#if HAVE_DLFCN_H +#include +#endif + +#include + +#ifdef RTLD_GLOBAL +# define LT_DLGLOBAL RTLD_GLOBAL +#else +# ifdef DL_GLOBAL +# define LT_DLGLOBAL DL_GLOBAL +# else +# define LT_DLGLOBAL 0 +# endif +#endif + +/* We may have to define LT_DLLAZY_OR_NOW in the command line if we + find out it does not work in some platform. */ +#ifndef LT_DLLAZY_OR_NOW +# ifdef RTLD_LAZY +# define LT_DLLAZY_OR_NOW RTLD_LAZY +# else +# ifdef DL_LAZY +# define LT_DLLAZY_OR_NOW DL_LAZY +# else +# ifdef RTLD_NOW +# define LT_DLLAZY_OR_NOW RTLD_NOW +# else +# ifdef DL_NOW +# define LT_DLLAZY_OR_NOW DL_NOW +# else +# define LT_DLLAZY_OR_NOW 0 +# endif +# endif +# endif +# endif +#endif + +void fnord() { int i=42;} +int main () +{ + void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW); + int status = $lt_dlunknown; + + if (self) + { + if (dlsym (self,"fnord")) status = $lt_dlno_uscore; + else if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore; + /* dlclose (self); */ + } + else + puts (dlerror ()); + + return status; +}] +_LT_EOF + if AC_TRY_EVAL(ac_link) && test -s conftest${ac_exeext} 2>/dev/null; then + (./conftest; exit; ) >&AS_MESSAGE_LOG_FD 2>/dev/null + lt_status=$? + case x$lt_status in + x$lt_dlno_uscore) $1 ;; + x$lt_dlneed_uscore) $2 ;; + x$lt_dlunknown|x*) $3 ;; + esac + else : + # compilation failed + $3 + fi +fi +rm -fr conftest* +])# _LT_TRY_DLOPEN_SELF + + +# LT_SYS_DLOPEN_SELF +# ------------------ +AC_DEFUN([LT_SYS_DLOPEN_SELF], +[m4_require([_LT_HEADER_DLFCN])dnl +if test "x$enable_dlopen" != xyes; then + enable_dlopen=unknown + enable_dlopen_self=unknown + enable_dlopen_self_static=unknown +else + lt_cv_dlopen=no + lt_cv_dlopen_libs= + + case $host_os in + beos*) + lt_cv_dlopen="load_add_on" + lt_cv_dlopen_libs= + lt_cv_dlopen_self=yes + ;; + + mingw* | pw32* | cegcc*) + lt_cv_dlopen="LoadLibrary" + lt_cv_dlopen_libs= + ;; + + cygwin*) + lt_cv_dlopen="dlopen" + lt_cv_dlopen_libs= + ;; + + darwin*) + # if libdl is installed we need to link against it + AC_CHECK_LIB([dl], [dlopen], + [lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl"],[ + lt_cv_dlopen="dyld" + lt_cv_dlopen_libs= + lt_cv_dlopen_self=yes + ]) + ;; + + *) + AC_CHECK_FUNC([shl_load], + [lt_cv_dlopen="shl_load"], + [AC_CHECK_LIB([dld], [shl_load], + [lt_cv_dlopen="shl_load" lt_cv_dlopen_libs="-ldld"], + [AC_CHECK_FUNC([dlopen], + [lt_cv_dlopen="dlopen"], + [AC_CHECK_LIB([dl], [dlopen], + [lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl"], + [AC_CHECK_LIB([svld], [dlopen], + [lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-lsvld"], + [AC_CHECK_LIB([dld], [dld_link], + [lt_cv_dlopen="dld_link" lt_cv_dlopen_libs="-ldld"]) + ]) + ]) + ]) + ]) + ]) + ;; + esac + + if test "x$lt_cv_dlopen" != xno; then + enable_dlopen=yes + else + enable_dlopen=no + fi + + case $lt_cv_dlopen in + dlopen) + save_CPPFLAGS="$CPPFLAGS" + test "x$ac_cv_header_dlfcn_h" = xyes && CPPFLAGS="$CPPFLAGS -DHAVE_DLFCN_H" + + save_LDFLAGS="$LDFLAGS" + wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $export_dynamic_flag_spec\" + + save_LIBS="$LIBS" + LIBS="$lt_cv_dlopen_libs $LIBS" + + AC_CACHE_CHECK([whether a program can dlopen itself], + lt_cv_dlopen_self, [dnl + _LT_TRY_DLOPEN_SELF( + lt_cv_dlopen_self=yes, lt_cv_dlopen_self=yes, + lt_cv_dlopen_self=no, lt_cv_dlopen_self=cross) + ]) + + if test "x$lt_cv_dlopen_self" = xyes; then + wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $lt_prog_compiler_static\" + AC_CACHE_CHECK([whether a statically linked program can dlopen itself], + lt_cv_dlopen_self_static, [dnl + _LT_TRY_DLOPEN_SELF( + lt_cv_dlopen_self_static=yes, lt_cv_dlopen_self_static=yes, + lt_cv_dlopen_self_static=no, lt_cv_dlopen_self_static=cross) + ]) + fi + + CPPFLAGS="$save_CPPFLAGS" + LDFLAGS="$save_LDFLAGS" + LIBS="$save_LIBS" + ;; + esac + + case $lt_cv_dlopen_self in + yes|no) enable_dlopen_self=$lt_cv_dlopen_self ;; + *) enable_dlopen_self=unknown ;; + esac + + case $lt_cv_dlopen_self_static in + yes|no) enable_dlopen_self_static=$lt_cv_dlopen_self_static ;; + *) enable_dlopen_self_static=unknown ;; + esac +fi +_LT_DECL([dlopen_support], [enable_dlopen], [0], + [Whether dlopen is supported]) +_LT_DECL([dlopen_self], [enable_dlopen_self], [0], + [Whether dlopen of programs is supported]) +_LT_DECL([dlopen_self_static], [enable_dlopen_self_static], [0], + [Whether dlopen of statically linked programs is supported]) +])# LT_SYS_DLOPEN_SELF + +# Old name: +AU_ALIAS([AC_LIBTOOL_DLOPEN_SELF], [LT_SYS_DLOPEN_SELF]) +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([AC_LIBTOOL_DLOPEN_SELF], []) + + +# _LT_COMPILER_C_O([TAGNAME]) +# --------------------------- +# Check to see if options -c and -o are simultaneously supported by compiler. +# This macro does not hard code the compiler like AC_PROG_CC_C_O. +m4_defun([_LT_COMPILER_C_O], +[m4_require([_LT_DECL_SED])dnl +m4_require([_LT_FILEUTILS_DEFAULTS])dnl +m4_require([_LT_TAG_COMPILER])dnl +AC_CACHE_CHECK([if $compiler supports -c -o file.$ac_objext], + [_LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)], + [_LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)=no + $RM -r conftest 2>/dev/null + mkdir conftest + cd conftest + mkdir out + echo "$lt_simple_compile_test_code" > conftest.$ac_ext + + lt_compiler_flag="-o out/conftest2.$ac_objext" + # Insert the option either (1) after the last *FLAGS variable, or + # (2) before a word containing "conftest.", or (3) at the end. + # Note that $ac_compile itself does not contain backslashes and begins + # with a dollar sign (not a hyphen), so the echo should work correctly. + lt_compile=`echo "$ac_compile" | $SED \ + -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ + -e 's: [[^ ]]*conftest\.: $lt_compiler_flag&:; t' \ + -e 's:$: $lt_compiler_flag:'` + (eval echo "\"\$as_me:__oline__: $lt_compile\"" >&AS_MESSAGE_LOG_FD) + (eval "$lt_compile" 2>out/conftest.err) + ac_status=$? + cat out/conftest.err >&AS_MESSAGE_LOG_FD + echo "$as_me:__oline__: \$? = $ac_status" >&AS_MESSAGE_LOG_FD + if (exit $ac_status) && test -s out/conftest2.$ac_objext + then + # The compiler can only warn and ignore the option if not recognized + # So say no if there are warnings + $ECHO "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' > out/conftest.exp + $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2 + if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then + _LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)=yes + fi + fi + chmod u+w . 2>&AS_MESSAGE_LOG_FD + $RM conftest* + # SGI C++ compiler will create directory out/ii_files/ for + # template instantiation + test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files + $RM out/* && rmdir out + cd .. + $RM -r conftest + $RM conftest* +]) +_LT_TAGDECL([compiler_c_o], [lt_cv_prog_compiler_c_o], [1], + [Does compiler simultaneously support -c and -o options?]) +])# _LT_COMPILER_C_O + + +# _LT_COMPILER_FILE_LOCKS([TAGNAME]) +# ---------------------------------- +# Check to see if we can do hard links to lock some files if needed +m4_defun([_LT_COMPILER_FILE_LOCKS], +[m4_require([_LT_ENABLE_LOCK])dnl +m4_require([_LT_FILEUTILS_DEFAULTS])dnl +_LT_COMPILER_C_O([$1]) + +hard_links="nottested" +if test "$_LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)" = no && test "$need_locks" != no; then + # do not overwrite the value of need_locks provided by the user + AC_MSG_CHECKING([if we can lock with hard links]) + hard_links=yes + $RM conftest* + ln conftest.a conftest.b 2>/dev/null && hard_links=no + touch conftest.a + ln conftest.a conftest.b 2>&5 || hard_links=no + ln conftest.a conftest.b 2>/dev/null && hard_links=no + AC_MSG_RESULT([$hard_links]) + if test "$hard_links" = no; then + AC_MSG_WARN([`$CC' does not support `-c -o', so `make -j' may be unsafe]) + need_locks=warn + fi +else + need_locks=no +fi +_LT_DECL([], [need_locks], [1], [Must we lock files when doing compilation?]) +])# _LT_COMPILER_FILE_LOCKS + + +# _LT_CHECK_OBJDIR +# ---------------- +m4_defun([_LT_CHECK_OBJDIR], +[AC_CACHE_CHECK([for objdir], [lt_cv_objdir], +[rm -f .libs 2>/dev/null +mkdir .libs 2>/dev/null +if test -d .libs; then + lt_cv_objdir=.libs +else + # MS-DOS does not allow filenames that begin with a dot. + lt_cv_objdir=_libs +fi +rmdir .libs 2>/dev/null]) +objdir=$lt_cv_objdir +_LT_DECL([], [objdir], [0], + [The name of the directory that contains temporary libtool files])dnl +m4_pattern_allow([LT_OBJDIR])dnl +AC_DEFINE_UNQUOTED(LT_OBJDIR, "$lt_cv_objdir/", + [Define to the sub-directory in which libtool stores uninstalled libraries.]) +])# _LT_CHECK_OBJDIR + + +# _LT_LINKER_HARDCODE_LIBPATH([TAGNAME]) +# -------------------------------------- +# Check hardcoding attributes. +m4_defun([_LT_LINKER_HARDCODE_LIBPATH], +[AC_MSG_CHECKING([how to hardcode library paths into programs]) +_LT_TAGVAR(hardcode_action, $1)= +if test -n "$_LT_TAGVAR(hardcode_libdir_flag_spec, $1)" || + test -n "$_LT_TAGVAR(runpath_var, $1)" || + test "X$_LT_TAGVAR(hardcode_automatic, $1)" = "Xyes" ; then + + # We can hardcode non-existent directories. + if test "$_LT_TAGVAR(hardcode_direct, $1)" != no && + # If the only mechanism to avoid hardcoding is shlibpath_var, we + # have to relink, otherwise we might link with an installed library + # when we should be linking with a yet-to-be-installed one + ## test "$_LT_TAGVAR(hardcode_shlibpath_var, $1)" != no && + test "$_LT_TAGVAR(hardcode_minus_L, $1)" != no; then + # Linking always hardcodes the temporary library directory. + _LT_TAGVAR(hardcode_action, $1)=relink + else + # We can link without hardcoding, and we can hardcode nonexisting dirs. + _LT_TAGVAR(hardcode_action, $1)=immediate + fi +else + # We cannot hardcode anything, or else we can only hardcode existing + # directories. + _LT_TAGVAR(hardcode_action, $1)=unsupported +fi +AC_MSG_RESULT([$_LT_TAGVAR(hardcode_action, $1)]) + +if test "$_LT_TAGVAR(hardcode_action, $1)" = relink || + test "$_LT_TAGVAR(inherit_rpath, $1)" = yes; then + # Fast installation is not supported + enable_fast_install=no +elif test "$shlibpath_overrides_runpath" = yes || + test "$enable_shared" = no; then + # Fast installation is not necessary + enable_fast_install=needless +fi +_LT_TAGDECL([], [hardcode_action], [0], + [How to hardcode a shared library path into an executable]) +])# _LT_LINKER_HARDCODE_LIBPATH + + +# _LT_CMD_STRIPLIB +# ---------------- +m4_defun([_LT_CMD_STRIPLIB], +[m4_require([_LT_DECL_EGREP]) +striplib= +old_striplib= +AC_MSG_CHECKING([whether stripping libraries is possible]) +if test -n "$STRIP" && $STRIP -V 2>&1 | $GREP "GNU strip" >/dev/null; then + test -z "$old_striplib" && old_striplib="$STRIP --strip-debug" + test -z "$striplib" && striplib="$STRIP --strip-unneeded" + AC_MSG_RESULT([yes]) +else +# FIXME - insert some real tests, host_os isn't really good enough + case $host_os in + darwin*) + if test -n "$STRIP" ; then + striplib="$STRIP -x" + old_striplib="$STRIP -S" + AC_MSG_RESULT([yes]) + else + AC_MSG_RESULT([no]) + fi + ;; + *) + AC_MSG_RESULT([no]) + ;; + esac +fi +_LT_DECL([], [old_striplib], [1], [Commands to strip libraries]) +_LT_DECL([], [striplib], [1]) +])# _LT_CMD_STRIPLIB + + +# _LT_SYS_DYNAMIC_LINKER([TAG]) +# ----------------------------- +# PORTME Fill in your ld.so characteristics +m4_defun([_LT_SYS_DYNAMIC_LINKER], +[AC_REQUIRE([AC_CANONICAL_HOST])dnl +m4_require([_LT_DECL_EGREP])dnl +m4_require([_LT_FILEUTILS_DEFAULTS])dnl +m4_require([_LT_DECL_OBJDUMP])dnl +m4_require([_LT_DECL_SED])dnl +AC_MSG_CHECKING([dynamic linker characteristics]) +m4_if([$1], + [], [ +if test "$GCC" = yes; then + case $host_os in + darwin*) lt_awk_arg="/^libraries:/,/LR/" ;; + *) lt_awk_arg="/^libraries:/" ;; + esac + lt_search_path_spec=`$CC -print-search-dirs | awk $lt_awk_arg | $SED -e "s/^libraries://" -e "s,=/,/,g"` + if $ECHO "$lt_search_path_spec" | $GREP ';' >/dev/null ; then + # if the path contains ";" then we assume it to be the separator + # otherwise default to the standard path separator (i.e. ":") - it is + # assumed that no part of a normal pathname contains ";" but that should + # okay in the real world where ";" in dirpaths is itself problematic. + lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED -e 's/;/ /g'` + else + lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` + fi + # Ok, now we have the path, separated by spaces, we can step through it + # and add multilib dir if necessary. + lt_tmp_lt_search_path_spec= + lt_multi_os_dir=`$CC $CPPFLAGS $CFLAGS $LDFLAGS -print-multi-os-directory 2>/dev/null` + for lt_sys_path in $lt_search_path_spec; do + if test -d "$lt_sys_path/$lt_multi_os_dir"; then + lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path/$lt_multi_os_dir" + else + test -d "$lt_sys_path" && \ + lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path" + fi + done + lt_search_path_spec=`$ECHO $lt_tmp_lt_search_path_spec | awk ' +BEGIN {RS=" "; FS="/|\n";} { + lt_foo=""; + lt_count=0; + for (lt_i = NF; lt_i > 0; lt_i--) { + if ($lt_i != "" && $lt_i != ".") { + if ($lt_i == "..") { + lt_count++; + } else { + if (lt_count == 0) { + lt_foo="/" $lt_i lt_foo; + } else { + lt_count--; + } + } + } + } + if (lt_foo != "") { lt_freq[[lt_foo]]++; } + if (lt_freq[[lt_foo]] == 1) { print lt_foo; } +}'` + sys_lib_search_path_spec=`$ECHO $lt_search_path_spec` +else + sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib" +fi]) +library_names_spec= +libname_spec='lib$name' +soname_spec= +shrext_cmds=".so" +postinstall_cmds= +postuninstall_cmds= +finish_cmds= +finish_eval= +shlibpath_var= +shlibpath_overrides_runpath=unknown +version_type=none +dynamic_linker="$host_os ld.so" +sys_lib_dlsearch_path_spec="/lib /usr/lib" +need_lib_prefix=unknown +hardcode_into_libs=no + +# when you set need_version to no, make sure it does not cause -set_version +# flags to be left without arguments +need_version=unknown + +case $host_os in +aix3*) + version_type=linux + library_names_spec='${libname}${release}${shared_ext}$versuffix $libname.a' + shlibpath_var=LIBPATH + + # AIX 3 has no versioning support, so we append a major version to the name. + soname_spec='${libname}${release}${shared_ext}$major' + ;; + +aix[[4-9]]*) + version_type=linux + need_lib_prefix=no + need_version=no + hardcode_into_libs=yes + if test "$host_cpu" = ia64; then + # AIX 5 supports IA64 + library_names_spec='${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext}$versuffix $libname${shared_ext}' + shlibpath_var=LD_LIBRARY_PATH + else + # With GCC up to 2.95.x, collect2 would create an import file + # for dependence libraries. The import file would start with + # the line `#! .'. This would cause the generated library to + # depend on `.', always an invalid library. This was fixed in + # development snapshots of GCC prior to 3.0. + case $host_os in + aix4 | aix4.[[01]] | aix4.[[01]].*) + if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)' + echo ' yes ' + echo '#endif'; } | ${CC} -E - | $GREP yes > /dev/null; then + : + else + can_build_shared=no + fi + ;; + esac + # AIX (on Power*) has no versioning support, so currently we can not hardcode correct + # soname into executable. Probably we can add versioning support to + # collect2, so additional links can be useful in future. + if test "$aix_use_runtimelinking" = yes; then + # If using run time linking (on AIX 4.2 or later) use lib.so + # instead of lib.a to let people know that these are not + # typical AIX shared libraries. + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + else + # We preserve .a as extension for shared libraries through AIX4.2 + # and later when we are not doing run time linking. + library_names_spec='${libname}${release}.a $libname.a' + soname_spec='${libname}${release}${shared_ext}$major' + fi + shlibpath_var=LIBPATH + fi + ;; + +amigaos*) + case $host_cpu in + powerpc) + # Since July 2007 AmigaOS4 officially supports .so libraries. + # When compiling the executable, add -use-dynld -Lsobjs: to the compileline. + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + ;; + m68k) + library_names_spec='$libname.ixlibrary $libname.a' + # Create ${libname}_ixlibrary.a entries in /sys/libs. + finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`$ECHO "X$lib" | $Xsed -e '\''s%^.*/\([[^/]]*\)\.ixlibrary$%\1%'\''`; test $RM /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done' + ;; + esac + ;; + +beos*) + library_names_spec='${libname}${shared_ext}' + dynamic_linker="$host_os ld.so" + shlibpath_var=LIBRARY_PATH + ;; + +bsdi[[45]]*) + version_type=linux + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir' + shlibpath_var=LD_LIBRARY_PATH + sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib" + sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib" + # the default ld.so.conf also contains /usr/contrib/lib and + # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow + # libtool to hard-code these into programs + ;; + +cygwin* | mingw* | pw32* | cegcc*) + version_type=windows + shrext_cmds=".dll" + need_version=no + need_lib_prefix=no + + case $GCC,$host_os in + yes,cygwin* | yes,mingw* | yes,pw32* | yes,cegcc*) + library_names_spec='$libname.dll.a' + # DLL is installed to $(libdir)/../bin by postinstall_cmds + postinstall_cmds='base_file=`basename \${file}`~ + dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i; echo \$dlname'\''`~ + dldir=$destdir/`dirname \$dlpath`~ + test -d \$dldir || mkdir -p \$dldir~ + $install_prog $dir/$dlname \$dldir/$dlname~ + chmod a+x \$dldir/$dlname~ + if test -n '\''$stripme'\'' && test -n '\''$striplib'\''; then + eval '\''$striplib \$dldir/$dlname'\'' || exit \$?; + fi' + postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ + dlpath=$dir/\$dldll~ + $RM \$dlpath' + shlibpath_overrides_runpath=yes + + case $host_os in + cygwin*) + # Cygwin DLLs use 'cyg' prefix rather than 'lib' + soname_spec='`echo ${libname} | sed -e 's/^lib/cyg/'``echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext}' + sys_lib_search_path_spec="/usr/lib /lib/w32api /lib /usr/local/lib" + ;; + mingw* | cegcc*) + # MinGW DLLs use traditional 'lib' prefix + soname_spec='${libname}`echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext}' + sys_lib_search_path_spec=`$CC -print-search-dirs | $GREP "^libraries:" | $SED -e "s/^libraries://" -e "s,=/,/,g"` + if $ECHO "$sys_lib_search_path_spec" | [$GREP ';[c-zC-Z]:/' >/dev/null]; then + # It is most probably a Windows format PATH printed by + # mingw gcc, but we are running on Cygwin. Gcc prints its search + # path with ; separators, and with drive letters. We can handle the + # drive letters (cygwin fileutils understands them), so leave them, + # especially as we might pass files found there to a mingw objdump, + # which wouldn't understand a cygwinified path. Ahh. + sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'` + else + sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` + fi + ;; + pw32*) + # pw32 DLLs use 'pw' prefix rather than 'lib' + library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext}' + ;; + esac + ;; + + *) + library_names_spec='${libname}`echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext} $libname.lib' + ;; + esac + dynamic_linker='Win32 ld.exe' + # FIXME: first we should search . and the directory the executable is in + shlibpath_var=PATH + ;; + +darwin* | rhapsody*) + dynamic_linker="$host_os dyld" + version_type=darwin + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${major}$shared_ext ${libname}$shared_ext' + soname_spec='${libname}${release}${major}$shared_ext' + shlibpath_overrides_runpath=yes + shlibpath_var=DYLD_LIBRARY_PATH + shrext_cmds='`test .$module = .yes && echo .so || echo .dylib`' +m4_if([$1], [],[ + sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/local/lib"]) + sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib' + ;; + +dgux*) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname$shared_ext' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + ;; + +freebsd1*) + dynamic_linker=no + ;; + +freebsd* | dragonfly*) + # DragonFly does not have aout. When/if they implement a new + # versioning mechanism, adjust this. + if test -x /usr/bin/objformat; then + objformat=`/usr/bin/objformat` + else + case $host_os in + freebsd[[123]]*) objformat=aout ;; + *) objformat=elf ;; + esac + fi + version_type=freebsd-$objformat + case $version_type in + freebsd-elf*) + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' + need_version=no + need_lib_prefix=no + ;; + freebsd-*) + library_names_spec='${libname}${release}${shared_ext}$versuffix $libname${shared_ext}$versuffix' + need_version=yes + ;; + esac + shlibpath_var=LD_LIBRARY_PATH + case $host_os in + freebsd2*) + shlibpath_overrides_runpath=yes + ;; + freebsd3.[[01]]* | freebsdelf3.[[01]]*) + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + ;; + freebsd3.[[2-9]]* | freebsdelf3.[[2-9]]* | \ + freebsd4.[[0-5]] | freebsdelf4.[[0-5]] | freebsd4.1.1 | freebsdelf4.1.1) + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + ;; + *) # from 4.6 on, and DragonFly + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + ;; + esac + ;; + +gnu*) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + hardcode_into_libs=yes + ;; + +hpux9* | hpux10* | hpux11*) + # Give a soname corresponding to the major version so that dld.sl refuses to + # link against other versions. + version_type=sunos + need_lib_prefix=no + need_version=no + case $host_cpu in + ia64*) + shrext_cmds='.so' + hardcode_into_libs=yes + dynamic_linker="$host_os dld.so" + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + if test "X$HPUX_IA64_MODE" = X32; then + sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib" + else + sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64" + fi + sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec + ;; + hppa*64*) + shrext_cmds='.sl' + hardcode_into_libs=yes + dynamic_linker="$host_os dld.sl" + shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH + shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64" + sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec + ;; + *) + shrext_cmds='.sl' + dynamic_linker="$host_os dld.sl" + shlibpath_var=SHLIB_PATH + shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + ;; + esac + # HP-UX runs *really* slowly unless shared libraries are mode 555. + postinstall_cmds='chmod 555 $lib' + ;; + +interix[[3-9]]*) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + dynamic_linker='Interix 3.x ld.so.1 (PE, like ELF)' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + ;; + +irix5* | irix6* | nonstopux*) + case $host_os in + nonstopux*) version_type=nonstopux ;; + *) + if test "$lt_cv_prog_gnu_ld" = yes; then + version_type=linux + else + version_type=irix + fi ;; + esac + need_lib_prefix=no + need_version=no + soname_spec='${libname}${release}${shared_ext}$major' + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext} $libname${shared_ext}' + case $host_os in + irix5* | nonstopux*) + libsuff= shlibsuff= + ;; + *) + case $LD in # libtool.m4 will add one of these switches to LD + *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ") + libsuff= shlibsuff= libmagic=32-bit;; + *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ") + libsuff=32 shlibsuff=N32 libmagic=N32;; + *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ") + libsuff=64 shlibsuff=64 libmagic=64-bit;; + *) libsuff= shlibsuff= libmagic=never-match;; + esac + ;; + esac + shlibpath_var=LD_LIBRARY${shlibsuff}_PATH + shlibpath_overrides_runpath=no + sys_lib_search_path_spec="/usr/lib${libsuff} /lib${libsuff} /usr/local/lib${libsuff}" + sys_lib_dlsearch_path_spec="/usr/lib${libsuff} /lib${libsuff}" + hardcode_into_libs=yes + ;; + +# No shared lib support for Linux oldld, aout, or coff. +linux*oldld* | linux*aout* | linux*coff*) + dynamic_linker=no + ;; + +# This must be Linux ELF. +linux* | k*bsd*-gnu) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + # Some binutils ld are patched to set DT_RUNPATH + save_LDFLAGS=$LDFLAGS + save_libdir=$libdir + eval "libdir=/foo; wl=\"$_LT_TAGVAR(lt_prog_compiler_wl, $1)\"; \ + LDFLAGS=\"\$LDFLAGS $_LT_TAGVAR(hardcode_libdir_flag_spec, $1)\"" + AC_LINK_IFELSE([AC_LANG_PROGRAM([],[])], + [AS_IF([ ($OBJDUMP -p conftest$ac_exeext) 2>/dev/null | grep "RUNPATH.*$libdir" >/dev/null], + [shlibpath_overrides_runpath=yes])]) + LDFLAGS=$save_LDFLAGS + libdir=$save_libdir + + # This implies no fast_install, which is unacceptable. + # Some rework will be needed to allow for fast_install + # before this can be enabled. + hardcode_into_libs=yes + + # Add ABI-specific directories to the system library path. + sys_lib_dlsearch_path_spec="/lib64 /usr/lib64 /lib /usr/lib" + + # Append ld.so.conf contents to the search path + if test -f /etc/ld.so.conf; then + lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s 2>/dev/null", \[$]2)); skip = 1; } { if (!skip) print \[$]0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;/^[ ]*hwcap[ ]/d;s/[:, ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;/^$/d' | tr '\n' ' '` + sys_lib_dlsearch_path_spec="$sys_lib_dlsearch_path_spec $lt_ld_extra" + fi + + # We used to test for /lib/ld.so.1 and disable shared libraries on + # powerpc, because MkLinux only supported shared libraries with the + # GNU dynamic linker. Since this was broken with cross compilers, + # most powerpc-linux boxes support dynamic linking these days and + # people can always --disable-shared, the test was removed, and we + # assume the GNU/Linux dynamic linker is in use. + dynamic_linker='GNU/Linux ld.so' + ;; + +netbsd*) + version_type=sunos + need_lib_prefix=no + need_version=no + if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' + finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' + dynamic_linker='NetBSD (a.out) ld.so' + else + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + dynamic_linker='NetBSD ld.elf_so' + fi + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + ;; + +newsos6) + version_type=linux + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + ;; + +*nto* | *qnx*) + version_type=qnx + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + dynamic_linker='ldqnx.so' + ;; + +openbsd*) + version_type=sunos + sys_lib_dlsearch_path_spec="/usr/lib" + need_lib_prefix=no + # Some older versions of OpenBSD (3.3 at least) *do* need versioned libs. + case $host_os in + openbsd3.3 | openbsd3.3.*) need_version=yes ;; + *) need_version=no ;; + esac + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' + finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' + shlibpath_var=LD_LIBRARY_PATH + if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then + case $host_os in + openbsd2.[[89]] | openbsd2.[[89]].*) + shlibpath_overrides_runpath=no + ;; + *) + shlibpath_overrides_runpath=yes + ;; + esac + else + shlibpath_overrides_runpath=yes + fi + ;; + +os2*) + libname_spec='$name' + shrext_cmds=".dll" + need_lib_prefix=no + library_names_spec='$libname${shared_ext} $libname.a' + dynamic_linker='OS/2 ld.exe' + shlibpath_var=LIBPATH + ;; + +osf3* | osf4* | osf5*) + version_type=osf + need_lib_prefix=no + need_version=no + soname_spec='${libname}${release}${shared_ext}$major' + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + shlibpath_var=LD_LIBRARY_PATH + sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib" + sys_lib_dlsearch_path_spec="$sys_lib_search_path_spec" + ;; + +rdos*) + dynamic_linker=no + ;; + +solaris*) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + # ldd complains unless libraries are executable + postinstall_cmds='chmod +x $lib' + ;; + +sunos4*) + version_type=sunos + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' + finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + if test "$with_gnu_ld" = yes; then + need_lib_prefix=no + fi + need_version=yes + ;; + +sysv4 | sysv4.3*) + version_type=linux + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + case $host_vendor in + sni) + shlibpath_overrides_runpath=no + need_lib_prefix=no + runpath_var=LD_RUN_PATH + ;; + siemens) + need_lib_prefix=no + ;; + motorola) + need_lib_prefix=no + need_version=no + shlibpath_overrides_runpath=no + sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib' + ;; + esac + ;; + +sysv4*MP*) + if test -d /usr/nec ;then + version_type=linux + library_names_spec='$libname${shared_ext}.$versuffix $libname${shared_ext}.$major $libname${shared_ext}' + soname_spec='$libname${shared_ext}.$major' + shlibpath_var=LD_LIBRARY_PATH + fi + ;; + +sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) + version_type=freebsd-elf + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + if test "$with_gnu_ld" = yes; then + sys_lib_search_path_spec='/usr/local/lib /usr/gnu/lib /usr/ccs/lib /usr/lib /lib' + else + sys_lib_search_path_spec='/usr/ccs/lib /usr/lib' + case $host_os in + sco3.2v5*) + sys_lib_search_path_spec="$sys_lib_search_path_spec /lib" + ;; + esac + fi + sys_lib_dlsearch_path_spec='/usr/lib' + ;; + +tpf*) + # TPF is a cross-target only. Preferred cross-host = GNU/Linux. + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + ;; + +uts4*) + version_type=linux + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + ;; + +*) + dynamic_linker=no + ;; +esac +AC_MSG_RESULT([$dynamic_linker]) +test "$dynamic_linker" = no && can_build_shared=no + +variables_saved_for_relink="PATH $shlibpath_var $runpath_var" +if test "$GCC" = yes; then + variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH" +fi + +if test "${lt_cv_sys_lib_search_path_spec+set}" = set; then + sys_lib_search_path_spec="$lt_cv_sys_lib_search_path_spec" +fi +if test "${lt_cv_sys_lib_dlsearch_path_spec+set}" = set; then + sys_lib_dlsearch_path_spec="$lt_cv_sys_lib_dlsearch_path_spec" +fi + +_LT_DECL([], [variables_saved_for_relink], [1], + [Variables whose values should be saved in libtool wrapper scripts and + restored at link time]) +_LT_DECL([], [need_lib_prefix], [0], + [Do we need the "lib" prefix for modules?]) +_LT_DECL([], [need_version], [0], [Do we need a version for libraries?]) +_LT_DECL([], [version_type], [0], [Library versioning type]) +_LT_DECL([], [runpath_var], [0], [Shared library runtime path variable]) +_LT_DECL([], [shlibpath_var], [0],[Shared library path variable]) +_LT_DECL([], [shlibpath_overrides_runpath], [0], + [Is shlibpath searched before the hard-coded library search path?]) +_LT_DECL([], [libname_spec], [1], [Format of library name prefix]) +_LT_DECL([], [library_names_spec], [1], + [[List of archive names. First name is the real one, the rest are links. + The last name is the one that the linker finds with -lNAME]]) +_LT_DECL([], [soname_spec], [1], + [[The coded name of the library, if different from the real name]]) +_LT_DECL([], [postinstall_cmds], [2], + [Command to use after installation of a shared archive]) +_LT_DECL([], [postuninstall_cmds], [2], + [Command to use after uninstallation of a shared archive]) +_LT_DECL([], [finish_cmds], [2], + [Commands used to finish a libtool library installation in a directory]) +_LT_DECL([], [finish_eval], [1], + [[As "finish_cmds", except a single script fragment to be evaled but + not shown]]) +_LT_DECL([], [hardcode_into_libs], [0], + [Whether we should hardcode library paths into libraries]) +_LT_DECL([], [sys_lib_search_path_spec], [2], + [Compile-time system search path for libraries]) +_LT_DECL([], [sys_lib_dlsearch_path_spec], [2], + [Run-time system search path for libraries]) +])# _LT_SYS_DYNAMIC_LINKER + + +# _LT_PATH_TOOL_PREFIX(TOOL) +# -------------------------- +# find a file program which can recognize shared library +AC_DEFUN([_LT_PATH_TOOL_PREFIX], +[m4_require([_LT_DECL_EGREP])dnl +AC_MSG_CHECKING([for $1]) +AC_CACHE_VAL(lt_cv_path_MAGIC_CMD, +[case $MAGIC_CMD in +[[\\/*] | ?:[\\/]*]) + lt_cv_path_MAGIC_CMD="$MAGIC_CMD" # Let the user override the test with a path. + ;; +*) + lt_save_MAGIC_CMD="$MAGIC_CMD" + lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR +dnl $ac_dummy forces splitting on constant user-supplied paths. +dnl POSIX.2 word splitting is done only on the output of word expansions, +dnl not every word. This closes a longstanding sh security hole. + ac_dummy="m4_if([$2], , $PATH, [$2])" + for ac_dir in $ac_dummy; do + IFS="$lt_save_ifs" + test -z "$ac_dir" && ac_dir=. + if test -f $ac_dir/$1; then + lt_cv_path_MAGIC_CMD="$ac_dir/$1" + if test -n "$file_magic_test_file"; then + case $deplibs_check_method in + "file_magic "*) + file_magic_regex=`expr "$deplibs_check_method" : "file_magic \(.*\)"` + MAGIC_CMD="$lt_cv_path_MAGIC_CMD" + if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null | + $EGREP "$file_magic_regex" > /dev/null; then + : + else + cat <<_LT_EOF 1>&2 + +*** Warning: the command libtool uses to detect shared libraries, +*** $file_magic_cmd, produces output that libtool cannot recognize. +*** The result is that libtool may fail to recognize shared libraries +*** as such. This will affect the creation of libtool libraries that +*** depend on shared libraries, but programs linked with such libtool +*** libraries will work regardless of this problem. Nevertheless, you +*** may want to report the problem to your system manager and/or to +*** bug-libtool at gnu.org + +_LT_EOF + fi ;; + esac + fi + break + fi + done + IFS="$lt_save_ifs" + MAGIC_CMD="$lt_save_MAGIC_CMD" + ;; +esac]) +MAGIC_CMD="$lt_cv_path_MAGIC_CMD" +if test -n "$MAGIC_CMD"; then + AC_MSG_RESULT($MAGIC_CMD) +else + AC_MSG_RESULT(no) +fi +_LT_DECL([], [MAGIC_CMD], [0], + [Used to examine libraries when file_magic_cmd begins with "file"])dnl +])# _LT_PATH_TOOL_PREFIX + +# Old name: +AU_ALIAS([AC_PATH_TOOL_PREFIX], [_LT_PATH_TOOL_PREFIX]) +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([AC_PATH_TOOL_PREFIX], []) + + +# _LT_PATH_MAGIC +# -------------- +# find a file program which can recognize a shared library +m4_defun([_LT_PATH_MAGIC], +[_LT_PATH_TOOL_PREFIX(${ac_tool_prefix}file, /usr/bin$PATH_SEPARATOR$PATH) +if test -z "$lt_cv_path_MAGIC_CMD"; then + if test -n "$ac_tool_prefix"; then + _LT_PATH_TOOL_PREFIX(file, /usr/bin$PATH_SEPARATOR$PATH) + else + MAGIC_CMD=: + fi +fi +])# _LT_PATH_MAGIC + + +# LT_PATH_LD +# ---------- +# find the pathname to the GNU or non-GNU linker +AC_DEFUN([LT_PATH_LD], +[AC_REQUIRE([AC_PROG_CC])dnl +AC_REQUIRE([AC_CANONICAL_HOST])dnl +AC_REQUIRE([AC_CANONICAL_BUILD])dnl +m4_require([_LT_DECL_SED])dnl +m4_require([_LT_DECL_EGREP])dnl + +AC_ARG_WITH([gnu-ld], + [AS_HELP_STRING([--with-gnu-ld], + [assume the C compiler uses GNU ld @<:@default=no@:>@])], + [test "$withval" = no || with_gnu_ld=yes], + [with_gnu_ld=no])dnl + +ac_prog=ld +if test "$GCC" = yes; then + # Check if gcc -print-prog-name=ld gives a path. + AC_MSG_CHECKING([for ld used by $CC]) + case $host in + *-*-mingw*) + # gcc leaves a trailing carriage return which upsets mingw + ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;; + *) + ac_prog=`($CC -print-prog-name=ld) 2>&5` ;; + esac + case $ac_prog in + # Accept absolute paths. + [[\\/]]* | ?:[[\\/]]*) + re_direlt='/[[^/]][[^/]]*/\.\./' + # Canonicalize the pathname of ld + ac_prog=`$ECHO "$ac_prog"| $SED 's%\\\\%/%g'` + while $ECHO "$ac_prog" | $GREP "$re_direlt" > /dev/null 2>&1; do + ac_prog=`$ECHO $ac_prog| $SED "s%$re_direlt%/%"` + done + test -z "$LD" && LD="$ac_prog" + ;; + "") + # If it fails, then pretend we aren't using GCC. + ac_prog=ld + ;; + *) + # If it is relative, then search for the first ld in PATH. + with_gnu_ld=unknown + ;; + esac +elif test "$with_gnu_ld" = yes; then + AC_MSG_CHECKING([for GNU ld]) +else + AC_MSG_CHECKING([for non-GNU ld]) +fi +AC_CACHE_VAL(lt_cv_path_LD, +[if test -z "$LD"; then + lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR + for ac_dir in $PATH; do + IFS="$lt_save_ifs" + test -z "$ac_dir" && ac_dir=. + if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then + lt_cv_path_LD="$ac_dir/$ac_prog" + # Check to see if the program is GNU ld. I'd rather use --version, + # but apparently some variants of GNU ld only accept -v. + # Break only if it was the GNU/non-GNU ld that we prefer. + case `"$lt_cv_path_LD" -v 2>&1 &1 /dev/null 2>&1; then + lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL' + lt_cv_file_magic_cmd='func_win32_libid' + else + lt_cv_deplibs_check_method='file_magic file format pei*-i386(.*architecture: i386)?' + lt_cv_file_magic_cmd='$OBJDUMP -f' + fi + ;; + +cegcc) + # use the weaker test based on 'objdump'. See mingw*. + lt_cv_deplibs_check_method='file_magic file format pe-arm-.*little(.*architecture: arm)?' + lt_cv_file_magic_cmd='$OBJDUMP -f' + ;; + +darwin* | rhapsody*) + lt_cv_deplibs_check_method=pass_all + ;; + +freebsd* | dragonfly*) + if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then + case $host_cpu in + i*86 ) + # Not sure whether the presence of OpenBSD here was a mistake. + # Let's accept both of them until this is cleared up. + lt_cv_deplibs_check_method='file_magic (FreeBSD|OpenBSD|DragonFly)/i[[3-9]]86 (compact )?demand paged shared library' + lt_cv_file_magic_cmd=/usr/bin/file + lt_cv_file_magic_test_file=`echo /usr/lib/libc.so.*` + ;; + esac + else + lt_cv_deplibs_check_method=pass_all + fi + ;; + +gnu*) + lt_cv_deplibs_check_method=pass_all + ;; + +hpux10.20* | hpux11*) + lt_cv_file_magic_cmd=/usr/bin/file + case $host_cpu in + ia64*) + lt_cv_deplibs_check_method='file_magic (s[[0-9]][[0-9]][[0-9]]|ELF-[[0-9]][[0-9]]) shared object file - IA64' + lt_cv_file_magic_test_file=/usr/lib/hpux32/libc.so + ;; + hppa*64*) + [lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF-[0-9][0-9]) shared object file - PA-RISC [0-9].[0-9]'] + lt_cv_file_magic_test_file=/usr/lib/pa20_64/libc.sl + ;; + *) + lt_cv_deplibs_check_method='file_magic (s[[0-9]][[0-9]][[0-9]]|PA-RISC[[0-9]].[[0-9]]) shared library' + lt_cv_file_magic_test_file=/usr/lib/libc.sl + ;; + esac + ;; + +interix[[3-9]]*) + # PIC code is broken on Interix 3.x, that's why |\.a not |_pic\.a here + lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so|\.a)$' + ;; + +irix5* | irix6* | nonstopux*) + case $LD in + *-32|*"-32 ") libmagic=32-bit;; + *-n32|*"-n32 ") libmagic=N32;; + *-64|*"-64 ") libmagic=64-bit;; + *) libmagic=never-match;; + esac + lt_cv_deplibs_check_method=pass_all + ;; + +# This must be Linux ELF. +linux* | k*bsd*-gnu) + lt_cv_deplibs_check_method=pass_all + ;; + +netbsd*) + if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then + lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so\.[[0-9]]+\.[[0-9]]+|_pic\.a)$' + else + lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so|_pic\.a)$' + fi + ;; + +newos6*) + lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[ML]]SB (executable|dynamic lib)' + lt_cv_file_magic_cmd=/usr/bin/file + lt_cv_file_magic_test_file=/usr/lib/libnls.so + ;; + +*nto* | *qnx*) + lt_cv_deplibs_check_method=pass_all + ;; + +openbsd*) + if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then + lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so\.[[0-9]]+\.[[0-9]]+|\.so|_pic\.a)$' + else + lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so\.[[0-9]]+\.[[0-9]]+|_pic\.a)$' + fi + ;; + +osf3* | osf4* | osf5*) + lt_cv_deplibs_check_method=pass_all + ;; + +rdos*) + lt_cv_deplibs_check_method=pass_all + ;; + +solaris*) + lt_cv_deplibs_check_method=pass_all + ;; + +sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) + lt_cv_deplibs_check_method=pass_all + ;; + +sysv4 | sysv4.3*) + case $host_vendor in + motorola) + lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[ML]]SB (shared object|dynamic lib) M[[0-9]][[0-9]]* Version [[0-9]]' + lt_cv_file_magic_test_file=`echo /usr/lib/libc.so*` + ;; + ncr) + lt_cv_deplibs_check_method=pass_all + ;; + sequent) + lt_cv_file_magic_cmd='/bin/file' + lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[LM]]SB (shared object|dynamic lib )' + ;; + sni) + lt_cv_file_magic_cmd='/bin/file' + lt_cv_deplibs_check_method="file_magic ELF [[0-9]][[0-9]]*-bit [[LM]]SB dynamic lib" + lt_cv_file_magic_test_file=/lib/libc.so + ;; + siemens) + lt_cv_deplibs_check_method=pass_all + ;; + pc) + lt_cv_deplibs_check_method=pass_all + ;; + esac + ;; + +tpf*) + lt_cv_deplibs_check_method=pass_all + ;; +esac +]) +file_magic_cmd=$lt_cv_file_magic_cmd +deplibs_check_method=$lt_cv_deplibs_check_method +test -z "$deplibs_check_method" && deplibs_check_method=unknown + +_LT_DECL([], [deplibs_check_method], [1], + [Method to check whether dependent libraries are shared objects]) +_LT_DECL([], [file_magic_cmd], [1], + [Command to use when deplibs_check_method == "file_magic"]) +])# _LT_CHECK_MAGIC_METHOD + + +# LT_PATH_NM +# ---------- +# find the pathname to a BSD- or MS-compatible name lister +AC_DEFUN([LT_PATH_NM], +[AC_REQUIRE([AC_PROG_CC])dnl +AC_CACHE_CHECK([for BSD- or MS-compatible name lister (nm)], lt_cv_path_NM, +[if test -n "$NM"; then + # Let the user override the test. + lt_cv_path_NM="$NM" +else + lt_nm_to_check="${ac_tool_prefix}nm" + if test -n "$ac_tool_prefix" && test "$build" = "$host"; then + lt_nm_to_check="$lt_nm_to_check nm" + fi + for lt_tmp_nm in $lt_nm_to_check; do + lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR + for ac_dir in $PATH /usr/ccs/bin/elf /usr/ccs/bin /usr/ucb /bin; do + IFS="$lt_save_ifs" + test -z "$ac_dir" && ac_dir=. + tmp_nm="$ac_dir/$lt_tmp_nm" + if test -f "$tmp_nm" || test -f "$tmp_nm$ac_exeext" ; then + # Check to see if the nm accepts a BSD-compat flag. + # Adding the `sed 1q' prevents false positives on HP-UX, which says: + # nm: unknown option "B" ignored + # Tru64's nm complains that /dev/null is an invalid object file + case `"$tmp_nm" -B /dev/null 2>&1 | sed '1q'` in + */dev/null* | *'Invalid file or object type'*) + lt_cv_path_NM="$tmp_nm -B" + break + ;; + *) + case `"$tmp_nm" -p /dev/null 2>&1 | sed '1q'` in + */dev/null*) + lt_cv_path_NM="$tmp_nm -p" + break + ;; + *) + lt_cv_path_NM=${lt_cv_path_NM="$tmp_nm"} # keep the first match, but + continue # so that we can try to find one that supports BSD flags + ;; + esac + ;; + esac + fi + done + IFS="$lt_save_ifs" + done + : ${lt_cv_path_NM=no} +fi]) +if test "$lt_cv_path_NM" != "no"; then + NM="$lt_cv_path_NM" +else + # Didn't find any BSD compatible name lister, look for dumpbin. + AC_CHECK_TOOLS(DUMPBIN, ["dumpbin -symbols" "link -dump -symbols"], :) + AC_SUBST([DUMPBIN]) + if test "$DUMPBIN" != ":"; then + NM="$DUMPBIN" + fi +fi +test -z "$NM" && NM=nm +AC_SUBST([NM]) +_LT_DECL([], [NM], [1], [A BSD- or MS-compatible name lister])dnl + +AC_CACHE_CHECK([the name lister ($NM) interface], [lt_cv_nm_interface], + [lt_cv_nm_interface="BSD nm" + echo "int some_variable = 0;" > conftest.$ac_ext + (eval echo "\"\$as_me:__oline__: $ac_compile\"" >&AS_MESSAGE_LOG_FD) + (eval "$ac_compile" 2>conftest.err) + cat conftest.err >&AS_MESSAGE_LOG_FD + (eval echo "\"\$as_me:__oline__: $NM \\\"conftest.$ac_objext\\\"\"" >&AS_MESSAGE_LOG_FD) + (eval "$NM \"conftest.$ac_objext\"" 2>conftest.err > conftest.out) + cat conftest.err >&AS_MESSAGE_LOG_FD + (eval echo "\"\$as_me:__oline__: output\"" >&AS_MESSAGE_LOG_FD) + cat conftest.out >&AS_MESSAGE_LOG_FD + if $GREP 'External.*some_variable' conftest.out > /dev/null; then + lt_cv_nm_interface="MS dumpbin" + fi + rm -f conftest*]) +])# LT_PATH_NM + +# Old names: +AU_ALIAS([AM_PROG_NM], [LT_PATH_NM]) +AU_ALIAS([AC_PROG_NM], [LT_PATH_NM]) +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([AM_PROG_NM], []) +dnl AC_DEFUN([AC_PROG_NM], []) + + +# LT_LIB_M +# -------- +# check for math library +AC_DEFUN([LT_LIB_M], +[AC_REQUIRE([AC_CANONICAL_HOST])dnl +LIBM= +case $host in +*-*-beos* | *-*-cygwin* | *-*-pw32* | *-*-darwin*) + # These system don't have libm, or don't need it + ;; +*-ncr-sysv4.3*) + AC_CHECK_LIB(mw, _mwvalidcheckl, LIBM="-lmw") + AC_CHECK_LIB(m, cos, LIBM="$LIBM -lm") + ;; +*) + AC_CHECK_LIB(m, cos, LIBM="-lm") + ;; +esac +AC_SUBST([LIBM]) +])# LT_LIB_M + +# Old name: +AU_ALIAS([AC_CHECK_LIBM], [LT_LIB_M]) +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([AC_CHECK_LIBM], []) + + +# _LT_COMPILER_NO_RTTI([TAGNAME]) +# ------------------------------- +m4_defun([_LT_COMPILER_NO_RTTI], +[m4_require([_LT_TAG_COMPILER])dnl + +_LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)= + +if test "$GCC" = yes; then + _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=' -fno-builtin' + + _LT_COMPILER_OPTION([if $compiler supports -fno-rtti -fno-exceptions], + lt_cv_prog_compiler_rtti_exceptions, + [-fno-rtti -fno-exceptions], [], + [_LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)="$_LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1) -fno-rtti -fno-exceptions"]) +fi +_LT_TAGDECL([no_builtin_flag], [lt_prog_compiler_no_builtin_flag], [1], + [Compiler flag to turn off builtin functions]) +])# _LT_COMPILER_NO_RTTI + + +# _LT_CMD_GLOBAL_SYMBOLS +# ---------------------- +m4_defun([_LT_CMD_GLOBAL_SYMBOLS], +[AC_REQUIRE([AC_CANONICAL_HOST])dnl +AC_REQUIRE([AC_PROG_CC])dnl +AC_REQUIRE([LT_PATH_NM])dnl +AC_REQUIRE([LT_PATH_LD])dnl +m4_require([_LT_DECL_SED])dnl +m4_require([_LT_DECL_EGREP])dnl +m4_require([_LT_TAG_COMPILER])dnl + +# Check for command to grab the raw symbol name followed by C symbol from nm. +AC_MSG_CHECKING([command to parse $NM output from $compiler object]) +AC_CACHE_VAL([lt_cv_sys_global_symbol_pipe], +[ +# These are sane defaults that work on at least a few old systems. +# [They come from Ultrix. What could be older than Ultrix?!! ;)] + +# Character class describing NM global symbol codes. +symcode='[[BCDEGRST]]' + +# Regexp to match symbols that can be accessed directly from C. +sympat='\([[_A-Za-z]][[_A-Za-z0-9]]*\)' + +# Define system-specific variables. +case $host_os in +aix*) + symcode='[[BCDT]]' + ;; +cygwin* | mingw* | pw32* | cegcc*) + symcode='[[ABCDGISTW]]' + ;; +hpux*) + if test "$host_cpu" = ia64; then + symcode='[[ABCDEGRST]]' + fi + ;; +irix* | nonstopux*) + symcode='[[BCDEGRST]]' + ;; +osf*) + symcode='[[BCDEGQRST]]' + ;; +solaris*) + symcode='[[BDRT]]' + ;; +sco3.2v5*) + symcode='[[DT]]' + ;; +sysv4.2uw2*) + symcode='[[DT]]' + ;; +sysv5* | sco5v6* | unixware* | OpenUNIX*) + symcode='[[ABDT]]' + ;; +sysv4) + symcode='[[DFNSTU]]' + ;; +esac + +# If we're using GNU nm, then use its standard symbol codes. +case `$NM -V 2>&1` in +*GNU* | *'with BFD'*) + symcode='[[ABCDGIRSTW]]' ;; +esac + +# Transform an extracted symbol line into a proper C declaration. +# Some systems (esp. on ia64) link data and code symbols differently, +# so use this general approach. +lt_cv_sys_global_symbol_to_cdecl="sed -n -e 's/^T .* \(.*\)$/extern int \1();/p' -e 's/^$symcode* .* \(.*\)$/extern char \1;/p'" + +# Transform an extracted symbol line into symbol name and symbol address +lt_cv_sys_global_symbol_to_c_name_address="sed -n -e 's/^: \([[^ ]]*\) $/ {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([[^ ]]*\) \([[^ ]]*\)$/ {\"\2\", (void *) \&\2},/p'" +lt_cv_sys_global_symbol_to_c_name_address_lib_prefix="sed -n -e 's/^: \([[^ ]]*\) $/ {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([[^ ]]*\) \(lib[[^ ]]*\)$/ {\"\2\", (void *) \&\2},/p' -e 's/^$symcode* \([[^ ]]*\) \([[^ ]]*\)$/ {\"lib\2\", (void *) \&\2},/p'" + +# Handle CRLF in mingw tool chain +opt_cr= +case $build_os in +mingw*) + opt_cr=`$ECHO 'x\{0,1\}' | tr x '\015'` # option cr in regexp + ;; +esac + +# Try without a prefix underscore, then with it. +for ac_symprfx in "" "_"; do + + # Transform symcode, sympat, and symprfx into a raw symbol and a C symbol. + symxfrm="\\1 $ac_symprfx\\2 \\2" + + # Write the raw and C identifiers. + if test "$lt_cv_nm_interface" = "MS dumpbin"; then + # Fake it for dumpbin and say T for any non-static function + # and D for any global variable. + # Also find C++ and __fastcall symbols from MSVC++, + # which start with @ or ?. + lt_cv_sys_global_symbol_pipe="$AWK ['"\ +" {last_section=section; section=\$ 3};"\ +" /Section length .*#relocs.*(pick any)/{hide[last_section]=1};"\ +" \$ 0!~/External *\|/{next};"\ +" / 0+ UNDEF /{next}; / UNDEF \([^|]\)*()/{next};"\ +" {if(hide[section]) next};"\ +" {f=0}; \$ 0~/\(\).*\|/{f=1}; {printf f ? \"T \" : \"D \"};"\ +" {split(\$ 0, a, /\||\r/); split(a[2], s)};"\ +" s[1]~/^[@?]/{print s[1], s[1]; next};"\ +" s[1]~prfx {split(s[1],t,\"@\"); print t[1], substr(t[1],length(prfx))}"\ +" ' prfx=^$ac_symprfx]" + else + lt_cv_sys_global_symbol_pipe="sed -n -e 's/^.*[[ ]]\($symcode$symcode*\)[[ ]][[ ]]*$ac_symprfx$sympat$opt_cr$/$symxfrm/p'" + fi + + # Check to see that the pipe works correctly. + pipe_works=no + + rm -f conftest* + cat > conftest.$ac_ext <<_LT_EOF +#ifdef __cplusplus +extern "C" { +#endif +char nm_test_var; +void nm_test_func(void); +void nm_test_func(void){} +#ifdef __cplusplus +} +#endif +int main(){nm_test_var='a';nm_test_func();return(0);} +_LT_EOF + + if AC_TRY_EVAL(ac_compile); then + # Now try to grab the symbols. + nlist=conftest.nm + if AC_TRY_EVAL(NM conftest.$ac_objext \| $lt_cv_sys_global_symbol_pipe \> $nlist) && test -s "$nlist"; then + # Try sorting and uniquifying the output. + if sort "$nlist" | uniq > "$nlist"T; then + mv -f "$nlist"T "$nlist" + else + rm -f "$nlist"T + fi + + # Make sure that we snagged all the symbols we need. + if $GREP ' nm_test_var$' "$nlist" >/dev/null; then + if $GREP ' nm_test_func$' "$nlist" >/dev/null; then + cat <<_LT_EOF > conftest.$ac_ext +#ifdef __cplusplus +extern "C" { +#endif + +_LT_EOF + # Now generate the symbol file. + eval "$lt_cv_sys_global_symbol_to_cdecl"' < "$nlist" | $GREP -v main >> conftest.$ac_ext' + + cat <<_LT_EOF >> conftest.$ac_ext + +/* The mapping between symbol names and symbols. */ +const struct { + const char *name; + void *address; +} +lt__PROGRAM__LTX_preloaded_symbols[[]] = +{ + { "@PROGRAM@", (void *) 0 }, +_LT_EOF + $SED "s/^$symcode$symcode* \(.*\) \(.*\)$/ {\"\2\", (void *) \&\2},/" < "$nlist" | $GREP -v main >> conftest.$ac_ext + cat <<\_LT_EOF >> conftest.$ac_ext + {0, (void *) 0} +}; + +/* This works around a problem in FreeBSD linker */ +#ifdef FREEBSD_WORKAROUND +static const void *lt_preloaded_setup() { + return lt__PROGRAM__LTX_preloaded_symbols; +} +#endif + +#ifdef __cplusplus +} +#endif +_LT_EOF + # Now try linking the two files. + mv conftest.$ac_objext conftstm.$ac_objext + lt_save_LIBS="$LIBS" + lt_save_CFLAGS="$CFLAGS" + LIBS="conftstm.$ac_objext" + CFLAGS="$CFLAGS$_LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)" + if AC_TRY_EVAL(ac_link) && test -s conftest${ac_exeext}; then + pipe_works=yes + fi + LIBS="$lt_save_LIBS" + CFLAGS="$lt_save_CFLAGS" + else + echo "cannot find nm_test_func in $nlist" >&AS_MESSAGE_LOG_FD + fi + else + echo "cannot find nm_test_var in $nlist" >&AS_MESSAGE_LOG_FD + fi + else + echo "cannot run $lt_cv_sys_global_symbol_pipe" >&AS_MESSAGE_LOG_FD + fi + else + echo "$progname: failed program was:" >&AS_MESSAGE_LOG_FD + cat conftest.$ac_ext >&5 + fi + rm -rf conftest* conftst* + + # Do not use the global_symbol_pipe unless it works. + if test "$pipe_works" = yes; then + break + else + lt_cv_sys_global_symbol_pipe= + fi +done +]) +if test -z "$lt_cv_sys_global_symbol_pipe"; then + lt_cv_sys_global_symbol_to_cdecl= +fi +if test -z "$lt_cv_sys_global_symbol_pipe$lt_cv_sys_global_symbol_to_cdecl"; then + AC_MSG_RESULT(failed) +else + AC_MSG_RESULT(ok) +fi + +_LT_DECL([global_symbol_pipe], [lt_cv_sys_global_symbol_pipe], [1], + [Take the output of nm and produce a listing of raw symbols and C names]) +_LT_DECL([global_symbol_to_cdecl], [lt_cv_sys_global_symbol_to_cdecl], [1], + [Transform the output of nm in a proper C declaration]) +_LT_DECL([global_symbol_to_c_name_address], + [lt_cv_sys_global_symbol_to_c_name_address], [1], + [Transform the output of nm in a C name address pair]) +_LT_DECL([global_symbol_to_c_name_address_lib_prefix], + [lt_cv_sys_global_symbol_to_c_name_address_lib_prefix], [1], + [Transform the output of nm in a C name address pair when lib prefix is needed]) +]) # _LT_CMD_GLOBAL_SYMBOLS + + +# _LT_COMPILER_PIC([TAGNAME]) +# --------------------------- +m4_defun([_LT_COMPILER_PIC], +[m4_require([_LT_TAG_COMPILER])dnl +_LT_TAGVAR(lt_prog_compiler_wl, $1)= +_LT_TAGVAR(lt_prog_compiler_pic, $1)= +_LT_TAGVAR(lt_prog_compiler_static, $1)= + +AC_MSG_CHECKING([for $compiler option to produce PIC]) +m4_if([$1], [CXX], [ + # C++ specific cases for pic, static, wl, etc. + if test "$GXX" = yes; then + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' + + case $host_os in + aix*) + # All AIX code is PIC. + if test "$host_cpu" = ia64; then + # AIX 5 now supports IA64 processor + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + fi + ;; + + amigaos*) + case $host_cpu in + powerpc) + # see comment about AmigaOS4 .so support + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' + ;; + m68k) + # FIXME: we need at least 68020 code to build shared libraries, but + # adding the `-m68020' flag to GCC prevents building anything better, + # like `-m68040'. + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-m68020 -resident32 -malways-restore-a4' + ;; + esac + ;; + + beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) + # PIC is the default for these OSes. + ;; + mingw* | cygwin* | os2* | pw32* | cegcc*) + # This hack is so that the source file can tell whether it is being + # built for inclusion in a dll (and should export symbols for example). + # Although the cygwin gcc ignores -fPIC, still need this for old-style + # (--disable-auto-import) libraries + m4_if([$1], [GCJ], [], + [_LT_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT']) + ;; + darwin* | rhapsody*) + # PIC is the default on this platform + # Common symbols not allowed in MH_DYLIB files + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fno-common' + ;; + *djgpp*) + # DJGPP does not support shared libraries at all + _LT_TAGVAR(lt_prog_compiler_pic, $1)= + ;; + interix[[3-9]]*) + # Interix 3.x gcc -fpic/-fPIC options generate broken code. + # Instead, we relocate shared libraries at runtime. + ;; + sysv4*MP*) + if test -d /usr/nec; then + _LT_TAGVAR(lt_prog_compiler_pic, $1)=-Kconform_pic + fi + ;; + hpux*) + # PIC is the default for 64-bit PA HP-UX, but not for 32-bit + # PA HP-UX. On IA64 HP-UX, PIC is the default but the pic flag + # sets the default TLS model and affects inlining. + case $host_cpu in + hppa*64*) + ;; + *) + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' + ;; + esac + ;; + *qnx* | *nto*) + # QNX uses GNU C++, but need to define -shared option too, otherwise + # it will coredump. + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared' + ;; + *) + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' + ;; + esac + else + case $host_os in + aix[[4-9]]*) + # All AIX code is PIC. + if test "$host_cpu" = ia64; then + # AIX 5 now supports IA64 processor + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + else + _LT_TAGVAR(lt_prog_compiler_static, $1)='-bnso -bI:/lib/syscalls.exp' + fi + ;; + chorus*) + case $cc_basename in + cxch68*) + # Green Hills C++ Compiler + # _LT_TAGVAR(lt_prog_compiler_static, $1)="--no_auto_instantiation -u __main -u __premain -u _abort -r $COOL_DIR/lib/libOrb.a $MVME_DIR/lib/CC/libC.a $MVME_DIR/lib/classix/libcx.s.a" + ;; + esac + ;; + dgux*) + case $cc_basename in + ec++*) + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' + ;; + ghcx*) + # Green Hills C++ Compiler + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic' + ;; + *) + ;; + esac + ;; + freebsd* | dragonfly*) + # FreeBSD uses GNU C++ + ;; + hpux9* | hpux10* | hpux11*) + case $cc_basename in + CC*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_static, $1)='${wl}-a ${wl}archive' + if test "$host_cpu" != ia64; then + _LT_TAGVAR(lt_prog_compiler_pic, $1)='+Z' + fi + ;; + aCC*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_static, $1)='${wl}-a ${wl}archive' + case $host_cpu in + hppa*64*|ia64*) + # +Z the default + ;; + *) + _LT_TAGVAR(lt_prog_compiler_pic, $1)='+Z' + ;; + esac + ;; + *) + ;; + esac + ;; + interix*) + # This is c89, which is MS Visual C++ (no shared libs) + # Anyone wants to do a port? + ;; + irix5* | irix6* | nonstopux*) + case $cc_basename in + CC*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' + # CC pic flag -KPIC is the default. + ;; + *) + ;; + esac + ;; + linux* | k*bsd*-gnu) + case $cc_basename in + KCC*) + # KAI C++ Compiler + _LT_TAGVAR(lt_prog_compiler_wl, $1)='--backend -Wl,' + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' + ;; + ecpc* ) + # old Intel C++ for x86_64 which still supported -KPIC. + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' + ;; + icpc* ) + # Intel C++, used to be incompatible with GCC. + # ICC 10 doesn't accept -KPIC any more. + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' + ;; + pgCC* | pgcpp*) + # Portland Group C++ compiler + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fpic' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + ;; + cxx*) + # Compaq C++ + # Make sure the PIC flag is empty. It appears that all Alpha + # Linux and Compaq Tru64 Unix objects are PIC. + _LT_TAGVAR(lt_prog_compiler_pic, $1)= + _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' + ;; + xlc* | xlC*) + # IBM XL 8.0 on PPC + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-qpic' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-qstaticlink' + ;; + *) + case `$CC -V 2>&1 | sed 5q` in + *Sun\ C*) + # Sun C++ 5.9 + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ' + ;; + esac + ;; + esac + ;; + lynxos*) + ;; + m88k*) + ;; + mvs*) + case $cc_basename in + cxx*) + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-W c,exportall' + ;; + *) + ;; + esac + ;; + netbsd*) + ;; + *qnx* | *nto*) + # QNX uses GNU C++, but need to define -shared option too, otherwise + # it will coredump. + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared' + ;; + osf3* | osf4* | osf5*) + case $cc_basename in + KCC*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='--backend -Wl,' + ;; + RCC*) + # Rational C++ 2.4.1 + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic' + ;; + cxx*) + # Digital/Compaq C++ + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + # Make sure the PIC flag is empty. It appears that all Alpha + # Linux and Compaq Tru64 Unix objects are PIC. + _LT_TAGVAR(lt_prog_compiler_pic, $1)= + _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' + ;; + *) + ;; + esac + ;; + psos*) + ;; + solaris*) + case $cc_basename in + CC*) + # Sun C++ 4.2, 5.x and Centerline C++ + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ' + ;; + gcx*) + # Green Hills C++ Compiler + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-PIC' + ;; + *) + ;; + esac + ;; + sunos4*) + case $cc_basename in + CC*) + # Sun C++ 4.x + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + ;; + lcc*) + # Lucid + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic' + ;; + *) + ;; + esac + ;; + sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*) + case $cc_basename in + CC*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + ;; + esac + ;; + tandem*) + case $cc_basename in + NCC*) + # NonStop-UX NCC 3.20 + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' + ;; + *) + ;; + esac + ;; + vxworks*) + ;; + *) + _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no + ;; + esac + fi +], +[ + if test "$GCC" = yes; then + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' + + case $host_os in + aix*) + # All AIX code is PIC. + if test "$host_cpu" = ia64; then + # AIX 5 now supports IA64 processor + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + fi + ;; + + amigaos*) + case $host_cpu in + powerpc) + # see comment about AmigaOS4 .so support + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' + ;; + m68k) + # FIXME: we need at least 68020 code to build shared libraries, but + # adding the `-m68020' flag to GCC prevents building anything better, + # like `-m68040'. + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-m68020 -resident32 -malways-restore-a4' + ;; + esac + ;; + + beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) + # PIC is the default for these OSes. + ;; + + mingw* | cygwin* | pw32* | os2* | cegcc*) + # This hack is so that the source file can tell whether it is being + # built for inclusion in a dll (and should export symbols for example). + # Although the cygwin gcc ignores -fPIC, still need this for old-style + # (--disable-auto-import) libraries + m4_if([$1], [GCJ], [], + [_LT_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT']) + ;; + + darwin* | rhapsody*) + # PIC is the default on this platform + # Common symbols not allowed in MH_DYLIB files + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fno-common' + ;; + + hpux*) + # PIC is the default for 64-bit PA HP-UX, but not for 32-bit + # PA HP-UX. On IA64 HP-UX, PIC is the default but the pic flag + # sets the default TLS model and affects inlining. + case $host_cpu in + hppa*64*) + # +Z the default + ;; + *) + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' + ;; + esac + ;; + + interix[[3-9]]*) + # Interix 3.x gcc -fpic/-fPIC options generate broken code. + # Instead, we relocate shared libraries at runtime. + ;; + + msdosdjgpp*) + # Just because we use GCC doesn't mean we suddenly get shared libraries + # on systems that don't support them. + _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no + enable_shared=no + ;; + + *nto* | *qnx*) + # QNX uses GNU C++, but need to define -shared option too, otherwise + # it will coredump. + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared' + ;; + + sysv4*MP*) + if test -d /usr/nec; then + _LT_TAGVAR(lt_prog_compiler_pic, $1)=-Kconform_pic + fi + ;; + + *) + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' + ;; + esac + else + # PORTME Check for flag to pass linker flags through the system compiler. + case $host_os in + aix*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + if test "$host_cpu" = ia64; then + # AIX 5 now supports IA64 processor + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + else + _LT_TAGVAR(lt_prog_compiler_static, $1)='-bnso -bI:/lib/syscalls.exp' + fi + ;; + + mingw* | cygwin* | pw32* | os2* | cegcc*) + # This hack is so that the source file can tell whether it is being + # built for inclusion in a dll (and should export symbols for example). + m4_if([$1], [GCJ], [], + [_LT_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT']) + ;; + + hpux9* | hpux10* | hpux11*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but + # not for PA HP-UX. + case $host_cpu in + hppa*64*|ia64*) + # +Z the default + ;; + *) + _LT_TAGVAR(lt_prog_compiler_pic, $1)='+Z' + ;; + esac + # Is there a better lt_prog_compiler_static that works with the bundled CC? + _LT_TAGVAR(lt_prog_compiler_static, $1)='${wl}-a ${wl}archive' + ;; + + irix5* | irix6* | nonstopux*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + # PIC (with -KPIC) is the default. + _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' + ;; + + linux* | k*bsd*-gnu) + case $cc_basename in + # old Intel for x86_64 which still supported -KPIC. + ecc*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' + ;; + # icc used to be incompatible with GCC. + # ICC 10 doesn't accept -KPIC any more. + icc* | ifort*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' + ;; + # Lahey Fortran 8.1. + lf95*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_pic, $1)='--shared' + _LT_TAGVAR(lt_prog_compiler_static, $1)='--static' + ;; + pgcc* | pgf77* | pgf90* | pgf95*) + # Portland Group compilers (*not* the Pentium gcc compiler, + # which looks to be a dead project) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fpic' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + ;; + ccc*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + # All Alpha code is PIC. + _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' + ;; + xl*) + # IBM XL C 8.0/Fortran 10.1 on PPC + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-qpic' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-qstaticlink' + ;; + *) + case `$CC -V 2>&1 | sed 5q` in + *Sun\ C*) + # Sun C 5.9 + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + ;; + *Sun\ F*) + # Sun Fortran 8.3 passes all unrecognized flags to the linker + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + _LT_TAGVAR(lt_prog_compiler_wl, $1)='' + ;; + esac + ;; + esac + ;; + + newsos6) + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + ;; + + *nto* | *qnx*) + # QNX uses GNU C++, but need to define -shared option too, otherwise + # it will coredump. + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared' + ;; + + osf3* | osf4* | osf5*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + # All OSF/1 code is PIC. + _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' + ;; + + rdos*) + _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' + ;; + + solaris*) + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + case $cc_basename in + f77* | f90* | f95*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ';; + *) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,';; + esac + ;; + + sunos4*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ' + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-PIC' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + ;; + + sysv4 | sysv4.2uw2* | sysv4.3*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + ;; + + sysv4*MP*) + if test -d /usr/nec ;then + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-Kconform_pic' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + fi + ;; + + sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + ;; + + unicos*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no + ;; + + uts4*) + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + ;; + + *) + _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no + ;; + esac + fi +]) +case $host_os in + # For platforms which do not support PIC, -DPIC is meaningless: + *djgpp*) + _LT_TAGVAR(lt_prog_compiler_pic, $1)= + ;; + *) + _LT_TAGVAR(lt_prog_compiler_pic, $1)="$_LT_TAGVAR(lt_prog_compiler_pic, $1)@&t at m4_if([$1],[],[ -DPIC],[m4_if([$1],[CXX],[ -DPIC],[])])" + ;; +esac +AC_MSG_RESULT([$_LT_TAGVAR(lt_prog_compiler_pic, $1)]) +_LT_TAGDECL([wl], [lt_prog_compiler_wl], [1], + [How to pass a linker flag through the compiler]) + +# +# Check to make sure the PIC flag actually works. +# +if test -n "$_LT_TAGVAR(lt_prog_compiler_pic, $1)"; then + _LT_COMPILER_OPTION([if $compiler PIC flag $_LT_TAGVAR(lt_prog_compiler_pic, $1) works], + [_LT_TAGVAR(lt_cv_prog_compiler_pic_works, $1)], + [$_LT_TAGVAR(lt_prog_compiler_pic, $1)@&t at m4_if([$1],[],[ -DPIC],[m4_if([$1],[CXX],[ -DPIC],[])])], [], + [case $_LT_TAGVAR(lt_prog_compiler_pic, $1) in + "" | " "*) ;; + *) _LT_TAGVAR(lt_prog_compiler_pic, $1)=" $_LT_TAGVAR(lt_prog_compiler_pic, $1)" ;; + esac], + [_LT_TAGVAR(lt_prog_compiler_pic, $1)= + _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no]) +fi +_LT_TAGDECL([pic_flag], [lt_prog_compiler_pic], [1], + [Additional compiler flags for building library objects]) + +# +# Check to make sure the static flag actually works. +# +wl=$_LT_TAGVAR(lt_prog_compiler_wl, $1) eval lt_tmp_static_flag=\"$_LT_TAGVAR(lt_prog_compiler_static, $1)\" +_LT_LINKER_OPTION([if $compiler static flag $lt_tmp_static_flag works], + _LT_TAGVAR(lt_cv_prog_compiler_static_works, $1), + $lt_tmp_static_flag, + [], + [_LT_TAGVAR(lt_prog_compiler_static, $1)=]) +_LT_TAGDECL([link_static_flag], [lt_prog_compiler_static], [1], + [Compiler flag to prevent dynamic linking]) +])# _LT_COMPILER_PIC + + +# _LT_LINKER_SHLIBS([TAGNAME]) +# ---------------------------- +# See if the linker supports building shared libraries. +m4_defun([_LT_LINKER_SHLIBS], +[AC_REQUIRE([LT_PATH_LD])dnl +AC_REQUIRE([LT_PATH_NM])dnl +m4_require([_LT_FILEUTILS_DEFAULTS])dnl +m4_require([_LT_DECL_EGREP])dnl +m4_require([_LT_DECL_SED])dnl +m4_require([_LT_CMD_GLOBAL_SYMBOLS])dnl +m4_require([_LT_TAG_COMPILER])dnl +AC_MSG_CHECKING([whether the $compiler linker ($LD) supports shared libraries]) +m4_if([$1], [CXX], [ + _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' + case $host_os in + aix[[4-9]]*) + # If we're using GNU nm, then we don't want the "-C" option. + # -C means demangle to AIX nm, but means don't demangle with GNU nm + if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then + _LT_TAGVAR(export_symbols_cmds, $1)='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && ([substr](\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' + else + _LT_TAGVAR(export_symbols_cmds, $1)='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && ([substr](\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' + fi + ;; + pw32*) + _LT_TAGVAR(export_symbols_cmds, $1)="$ltdll_cmds" + ;; + cygwin* | mingw* | cegcc*) + _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[[BCDGRS]][[ ]]/s/.*[[ ]]\([[^ ]]*\)/\1 DATA/;/^.*[[ ]]__nm__/s/^.*[[ ]]__nm__\([[^ ]]*\)[[ ]][[^ ]]*/\1 DATA/;/^I[[ ]]/d;/^[[AITW]][[ ]]/s/.* //'\'' | sort | uniq > $export_symbols' + ;; + *) + _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' + ;; + esac + _LT_TAGVAR(exclude_expsyms, $1)=['_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*'] +], [ + runpath_var= + _LT_TAGVAR(allow_undefined_flag, $1)= + _LT_TAGVAR(always_export_symbols, $1)=no + _LT_TAGVAR(archive_cmds, $1)= + _LT_TAGVAR(archive_expsym_cmds, $1)= + _LT_TAGVAR(compiler_needs_object, $1)=no + _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no + _LT_TAGVAR(export_dynamic_flag_spec, $1)= + _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' + _LT_TAGVAR(hardcode_automatic, $1)=no + _LT_TAGVAR(hardcode_direct, $1)=no + _LT_TAGVAR(hardcode_direct_absolute, $1)=no + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)= + _LT_TAGVAR(hardcode_libdir_flag_spec_ld, $1)= + _LT_TAGVAR(hardcode_libdir_separator, $1)= + _LT_TAGVAR(hardcode_minus_L, $1)=no + _LT_TAGVAR(hardcode_shlibpath_var, $1)=unsupported + _LT_TAGVAR(inherit_rpath, $1)=no + _LT_TAGVAR(link_all_deplibs, $1)=unknown + _LT_TAGVAR(module_cmds, $1)= + _LT_TAGVAR(module_expsym_cmds, $1)= + _LT_TAGVAR(old_archive_from_new_cmds, $1)= + _LT_TAGVAR(old_archive_from_expsyms_cmds, $1)= + _LT_TAGVAR(thread_safe_flag_spec, $1)= + _LT_TAGVAR(whole_archive_flag_spec, $1)= + # include_expsyms should be a list of space-separated symbols to be *always* + # included in the symbol list + _LT_TAGVAR(include_expsyms, $1)= + # exclude_expsyms can be an extended regexp of symbols to exclude + # it will be wrapped by ` (' and `)$', so one must not match beginning or + # end of line. Example: `a|bc|.*d.*' will exclude the symbols `a' and `bc', + # as well as any symbol that contains `d'. + _LT_TAGVAR(exclude_expsyms, $1)=['_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*'] + # Although _GLOBAL_OFFSET_TABLE_ is a valid symbol C name, most a.out + # platforms (ab)use it in PIC code, but their linkers get confused if + # the symbol is explicitly referenced. Since portable code cannot + # rely on this symbol name, it's probably fine to never include it in + # preloaded symbol tables. + # Exclude shared library initialization/finalization symbols. +dnl Note also adjust exclude_expsyms for C++ above. + extract_expsyms_cmds= + + case $host_os in + cygwin* | mingw* | pw32* | cegcc*) + # FIXME: the MSVC++ port hasn't been tested in a loooong time + # When not using gcc, we currently assume that we are using + # Microsoft Visual C++. + if test "$GCC" != yes; then + with_gnu_ld=no + fi + ;; + interix*) + # we just hope/assume this is gcc and not c89 (= MSVC++) + with_gnu_ld=yes + ;; + openbsd*) + with_gnu_ld=no + ;; + esac + + _LT_TAGVAR(ld_shlibs, $1)=yes + if test "$with_gnu_ld" = yes; then + # If archive_cmds runs LD, not CC, wlarc should be empty + wlarc='${wl}' + + # Set some defaults for GNU ld with shared library support. These + # are reset later if shared libraries are not supported. Putting them + # here allows them to be overridden if necessary. + runpath_var=LD_RUN_PATH + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' + _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic' + # ancient GNU ld didn't support --whole-archive et. al. + if $LD --help 2>&1 | $GREP 'no-whole-archive' > /dev/null; then + _LT_TAGVAR(whole_archive_flag_spec, $1)="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' + else + _LT_TAGVAR(whole_archive_flag_spec, $1)= + fi + supports_anon_versioning=no + case `$LD -v 2>&1` in + *\ [[01]].* | *\ 2.[[0-9]].* | *\ 2.10.*) ;; # catch versions < 2.11 + *\ 2.11.93.0.2\ *) supports_anon_versioning=yes ;; # RH7.3 ... + *\ 2.11.92.0.12\ *) supports_anon_versioning=yes ;; # Mandrake 8.2 ... + *\ 2.11.*) ;; # other 2.11 versions + *) supports_anon_versioning=yes ;; + esac + + # See if GNU ld supports shared libraries. + case $host_os in + aix[[3-9]]*) + # On AIX/PPC, the GNU linker is very broken + if test "$host_cpu" != ia64; then + _LT_TAGVAR(ld_shlibs, $1)=no + cat <<_LT_EOF 1>&2 + +*** Warning: the GNU linker, at least up to release 2.9.1, is reported +*** to be unable to reliably create shared libraries on AIX. +*** Therefore, libtool is disabling shared libraries support. If you +*** really care for shared libraries, you may want to modify your PATH +*** so that a non-GNU linker is found, and then restart. + +_LT_EOF + fi + ;; + + amigaos*) + case $host_cpu in + powerpc) + # see comment about AmigaOS4 .so support + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='' + ;; + m68k) + _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' + _LT_TAGVAR(hardcode_minus_L, $1)=yes + ;; + esac + ;; + + beos*) + if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then + _LT_TAGVAR(allow_undefined_flag, $1)=unsupported + # Joseph Beckenbach says some releases of gcc + # support --undefined. This deserves some investigation. FIXME + _LT_TAGVAR(archive_cmds, $1)='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + else + _LT_TAGVAR(ld_shlibs, $1)=no + fi + ;; + + cygwin* | mingw* | pw32* | cegcc*) + # _LT_TAGVAR(hardcode_libdir_flag_spec, $1) is actually meaningless, + # as there is no search path for DLLs. + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' + _LT_TAGVAR(allow_undefined_flag, $1)=unsupported + _LT_TAGVAR(always_export_symbols, $1)=no + _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes + _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[[BCDGRS]][[ ]]/s/.*[[ ]]\([[^ ]]*\)/\1 DATA/'\'' | $SED -e '\''/^[[AITW]][[ ]]/s/.*[[ ]]//'\'' | sort | uniq > $export_symbols' + + if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' + # If the export-symbols file already is a .def file (1st line + # is EXPORTS), use it as is; otherwise, prepend... + _LT_TAGVAR(archive_expsym_cmds, $1)='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then + cp $export_symbols $output_objdir/$soname.def; + else + echo EXPORTS > $output_objdir/$soname.def; + cat $export_symbols >> $output_objdir/$soname.def; + fi~ + $CC -shared $output_objdir/$soname.def $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' + else + _LT_TAGVAR(ld_shlibs, $1)=no + fi + ;; + + interix[[3-9]]*) + _LT_TAGVAR(hardcode_direct, $1)=no + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' + _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' + # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc. + # Instead, shared libraries are loaded at an image base (0x10000000 by + # default) and relocated if they conflict, which is a slow very memory + # consuming and fragmenting process. To avoid this, we pick a random, + # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link + # time. Moving up from 0x10000000 also allows more sbrk(2) space. + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='sed "s,^,_," $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--retain-symbols-file,$output_objdir/$soname.expsym ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' + ;; + + gnu* | linux* | tpf* | k*bsd*-gnu) + tmp_diet=no + if test "$host_os" = linux-dietlibc; then + case $cc_basename in + diet\ *) tmp_diet=yes;; # linux-dietlibc with static linking (!diet-dyn) + esac + fi + if $LD --help 2>&1 | $EGREP ': supported targets:.* elf' > /dev/null \ + && test "$tmp_diet" = no + then + tmp_addflag= + tmp_sharedflag='-shared' + case $cc_basename,$host_cpu in + pgcc*) # Portland Group C compiler + _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $ECHO \"$new_convenience\"` ${wl}--no-whole-archive' + tmp_addflag=' $pic_flag' + ;; + pgf77* | pgf90* | pgf95*) # Portland Group f77 and f90 compilers + _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $ECHO \"$new_convenience\"` ${wl}--no-whole-archive' + tmp_addflag=' $pic_flag -Mnomain' ;; + ecc*,ia64* | icc*,ia64*) # Intel C compiler on ia64 + tmp_addflag=' -i_dynamic' ;; + efc*,ia64* | ifort*,ia64*) # Intel Fortran compiler on ia64 + tmp_addflag=' -i_dynamic -nofor_main' ;; + ifc* | ifort*) # Intel Fortran compiler + tmp_addflag=' -nofor_main' ;; + lf95*) # Lahey Fortran 8.1 + _LT_TAGVAR(whole_archive_flag_spec, $1)= + tmp_sharedflag='--shared' ;; + xl[[cC]]*) # IBM XL C 8.0 on PPC (deal with xlf below) + tmp_sharedflag='-qmkshrobj' + tmp_addflag= ;; + esac + case `$CC -V 2>&1 | sed 5q` in + *Sun\ C*) # Sun C 5.9 + _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; $ECHO \"$new_convenience\"` ${wl}--no-whole-archive' + _LT_TAGVAR(compiler_needs_object, $1)=yes + tmp_sharedflag='-G' ;; + *Sun\ F*) # Sun Fortran 8.3 + tmp_sharedflag='-G' ;; + esac + _LT_TAGVAR(archive_cmds, $1)='$CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + + if test "x$supports_anon_versioning" = xyes; then + _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $output_objdir/$libname.ver~ + cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ + echo "local: *; };" >> $output_objdir/$libname.ver~ + $CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib' + fi + + case $cc_basename in + xlf*) + # IBM XL Fortran 10.1 on PPC cannot create shared libs itself + _LT_TAGVAR(whole_archive_flag_spec, $1)='--whole-archive$convenience --no-whole-archive' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)= + _LT_TAGVAR(hardcode_libdir_flag_spec_ld, $1)='-rpath $libdir' + _LT_TAGVAR(archive_cmds, $1)='$LD -shared $libobjs $deplibs $compiler_flags -soname $soname -o $lib' + if test "x$supports_anon_versioning" = xyes; then + _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $output_objdir/$libname.ver~ + cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ + echo "local: *; };" >> $output_objdir/$libname.ver~ + $LD -shared $libobjs $deplibs $compiler_flags -soname $soname -version-script $output_objdir/$libname.ver -o $lib' + fi + ;; + esac + else + _LT_TAGVAR(ld_shlibs, $1)=no + fi + ;; + + netbsd*) + if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then + _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib' + wlarc= + else + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' + fi + ;; + + solaris*) + if $LD -v 2>&1 | $GREP 'BFD 2\.8' > /dev/null; then + _LT_TAGVAR(ld_shlibs, $1)=no + cat <<_LT_EOF 1>&2 + +*** Warning: The releases 2.8.* of the GNU linker cannot reliably +*** create shared libraries on Solaris systems. Therefore, libtool +*** is disabling shared libraries support. We urge you to upgrade GNU +*** binutils to release 2.9.1 or newer. Another option is to modify +*** your PATH or compiler configuration so that the native linker is +*** used, and then restart. + +_LT_EOF + elif $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' + else + _LT_TAGVAR(ld_shlibs, $1)=no + fi + ;; + + sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX*) + case `$LD -v 2>&1` in + *\ [[01]].* | *\ 2.[[0-9]].* | *\ 2.1[[0-5]].*) + _LT_TAGVAR(ld_shlibs, $1)=no + cat <<_LT_EOF 1>&2 + +*** Warning: Releases of the GNU linker prior to 2.16.91.0.3 can not +*** reliably create shared libraries on SCO systems. Therefore, libtool +*** is disabling shared libraries support. We urge you to upgrade GNU +*** binutils to release 2.16.91.0.3 or newer. Another option is to modify +*** your PATH or compiler configuration so that the native linker is +*** used, and then restart. + +_LT_EOF + ;; + *) + # For security reasons, it is highly recommended that you always + # use absolute paths for naming shared libraries, and exclude the + # DT_RUNPATH tag from executables and libraries. But doing so + # requires that you compile everything twice, which is a pain. + if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' + else + _LT_TAGVAR(ld_shlibs, $1)=no + fi + ;; + esac + ;; + + sunos4*) + _LT_TAGVAR(archive_cmds, $1)='$LD -assert pure-text -Bshareable -o $lib $libobjs $deplibs $linker_flags' + wlarc= + _LT_TAGVAR(hardcode_direct, $1)=yes + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + ;; + + *) + if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' + else + _LT_TAGVAR(ld_shlibs, $1)=no + fi + ;; + esac + + if test "$_LT_TAGVAR(ld_shlibs, $1)" = no; then + runpath_var= + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)= + _LT_TAGVAR(export_dynamic_flag_spec, $1)= + _LT_TAGVAR(whole_archive_flag_spec, $1)= + fi + else + # PORTME fill in a description of your system's linker (not GNU ld) + case $host_os in + aix3*) + _LT_TAGVAR(allow_undefined_flag, $1)=unsupported + _LT_TAGVAR(always_export_symbols, $1)=yes + _LT_TAGVAR(archive_expsym_cmds, $1)='$LD -o $output_objdir/$soname $libobjs $deplibs $linker_flags -bE:$export_symbols -T512 -H512 -bM:SRE~$AR $AR_FLAGS $lib $output_objdir/$soname' + # Note: this linker hardcodes the directories in LIBPATH if there + # are no directories specified by -L. + _LT_TAGVAR(hardcode_minus_L, $1)=yes + if test "$GCC" = yes && test -z "$lt_prog_compiler_static"; then + # Neither direct hardcoding nor static linking is supported with a + # broken collect2. + _LT_TAGVAR(hardcode_direct, $1)=unsupported + fi + ;; + + aix[[4-9]]*) + if test "$host_cpu" = ia64; then + # On IA64, the linker does run time linking by default, so we don't + # have to do anything special. + aix_use_runtimelinking=no + exp_sym_flag='-Bexport' + no_entry_flag="" + else + # If we're using GNU nm, then we don't want the "-C" option. + # -C means demangle to AIX nm, but means don't demangle with GNU nm + if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then + _LT_TAGVAR(export_symbols_cmds, $1)='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && ([substr](\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' + else + _LT_TAGVAR(export_symbols_cmds, $1)='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && ([substr](\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' + fi + aix_use_runtimelinking=no + + # Test if we are trying to use run time linking or normal + # AIX style linking. If -brtl is somewhere in LDFLAGS, we + # need to do runtime linking. + case $host_os in aix4.[[23]]|aix4.[[23]].*|aix[[5-9]]*) + for ld_flag in $LDFLAGS; do + if (test $ld_flag = "-brtl" || test $ld_flag = "-Wl,-brtl"); then + aix_use_runtimelinking=yes + break + fi + done + ;; + esac + + exp_sym_flag='-bexport' + no_entry_flag='-bnoentry' + fi + + # When large executables or shared objects are built, AIX ld can + # have problems creating the table of contents. If linking a library + # or program results in "error TOC overflow" add -mminimal-toc to + # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not + # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS. + + _LT_TAGVAR(archive_cmds, $1)='' + _LT_TAGVAR(hardcode_direct, $1)=yes + _LT_TAGVAR(hardcode_direct_absolute, $1)=yes + _LT_TAGVAR(hardcode_libdir_separator, $1)=':' + _LT_TAGVAR(link_all_deplibs, $1)=yes + _LT_TAGVAR(file_list_spec, $1)='${wl}-f,' + + if test "$GCC" = yes; then + case $host_os in aix4.[[012]]|aix4.[[012]].*) + # We only want to do this on AIX 4.2 and lower, the check + # below for broken collect2 doesn't work under 4.3+ + collect2name=`${CC} -print-prog-name=collect2` + if test -f "$collect2name" && + strings "$collect2name" | $GREP resolve_lib_name >/dev/null + then + # We have reworked collect2 + : + else + # We have old collect2 + _LT_TAGVAR(hardcode_direct, $1)=unsupported + # It fails to find uninstalled libraries when the uninstalled + # path is not listed in the libpath. Setting hardcode_minus_L + # to unsupported forces relinking + _LT_TAGVAR(hardcode_minus_L, $1)=yes + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' + _LT_TAGVAR(hardcode_libdir_separator, $1)= + fi + ;; + esac + shared_flag='-shared' + if test "$aix_use_runtimelinking" = yes; then + shared_flag="$shared_flag "'${wl}-G' + fi + else + # not using gcc + if test "$host_cpu" = ia64; then + # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release + # chokes on -Wl,-G. The following line is correct: + shared_flag='-G' + else + if test "$aix_use_runtimelinking" = yes; then + shared_flag='${wl}-G' + else + shared_flag='${wl}-bM:SRE' + fi + fi + fi + + _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-bexpall' + # It seems that -bexpall does not export symbols beginning with + # underscore (_), so it is better to generate a list of symbols to export. + _LT_TAGVAR(always_export_symbols, $1)=yes + if test "$aix_use_runtimelinking" = yes; then + # Warning - without using the other runtime loading flags (-brtl), + # -berok will link without error, but may produce a broken library. + _LT_TAGVAR(allow_undefined_flag, $1)='-berok' + # Determine the default libpath from the value encoded in an + # empty executable. + _LT_SYS_MODULE_PATH_AIX + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath" + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then $ECHO "X${wl}${allow_undefined_flag}" | $Xsed; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag" + else + if test "$host_cpu" = ia64; then + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R $libdir:/usr/lib:/lib' + _LT_TAGVAR(allow_undefined_flag, $1)="-z nodefs" + _LT_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$exp_sym_flag:\$export_symbols" + else + # Determine the default libpath from the value encoded in an + # empty executable. + _LT_SYS_MODULE_PATH_AIX + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath" + # Warning - without using the other run time loading flags, + # -berok will link without error, but may produce a broken library. + _LT_TAGVAR(no_undefined_flag, $1)=' ${wl}-bernotok' + _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-berok' + # Exported symbols can be pulled into shared objects from archives + _LT_TAGVAR(whole_archive_flag_spec, $1)='$convenience' + _LT_TAGVAR(archive_cmds_need_lc, $1)=yes + # This is similar to how AIX traditionally builds its shared libraries. + _LT_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs ${wl}-bnoentry $compiler_flags ${wl}-bE:$export_symbols${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname' + fi + fi + ;; + + amigaos*) + case $host_cpu in + powerpc) + # see comment about AmigaOS4 .so support + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='' + ;; + m68k) + _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' + _LT_TAGVAR(hardcode_minus_L, $1)=yes + ;; + esac + ;; + + bsdi[[45]]*) + _LT_TAGVAR(export_dynamic_flag_spec, $1)=-rdynamic + ;; + + cygwin* | mingw* | pw32* | cegcc*) + # When not using gcc, we currently assume that we are using + # Microsoft Visual C++. + # hardcode_libdir_flag_spec is actually meaningless, as there is + # no search path for DLLs. + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)=' ' + _LT_TAGVAR(allow_undefined_flag, $1)=unsupported + # Tell ltmain to make .lib files, not .a files. + libext=lib + # Tell ltmain to make .dll files, not .so files. + shrext_cmds=".dll" + # FIXME: Setting linknames here is a bad hack. + _LT_TAGVAR(archive_cmds, $1)='$CC -o $lib $libobjs $compiler_flags `$ECHO "X$deplibs" | $Xsed -e '\''s/ -lc$//'\''` -link -dll~linknames=' + # The linker will automatically build a .lib file if we build a DLL. + _LT_TAGVAR(old_archive_from_new_cmds, $1)='true' + # FIXME: Should let the user specify the lib program. + _LT_TAGVAR(old_archive_cmds, $1)='lib -OUT:$oldlib$oldobjs$old_deplibs' + _LT_TAGVAR(fix_srcfile_path, $1)='`cygpath -w "$srcfile"`' + _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes + ;; + + darwin* | rhapsody*) + _LT_DARWIN_LINKER_FEATURES($1) + ;; + + dgux*) + _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + ;; + + freebsd1*) + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + + # FreeBSD 2.2.[012] allows us to include c++rt0.o to get C++ constructor + # support. Future versions do this automatically, but an explicit c++rt0.o + # does not break anything, and helps significantly (at the cost of a little + # extra space). + freebsd2.2*) + _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags /usr/lib/c++rt0.o' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' + _LT_TAGVAR(hardcode_direct, $1)=yes + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + ;; + + # Unfortunately, older versions of FreeBSD 2 do not have this feature. + freebsd2*) + _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' + _LT_TAGVAR(hardcode_direct, $1)=yes + _LT_TAGVAR(hardcode_minus_L, $1)=yes + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + ;; + + # FreeBSD 3 and greater uses gcc -shared to do shared libraries. + freebsd* | dragonfly*) + _LT_TAGVAR(archive_cmds, $1)='$CC -shared -o $lib $libobjs $deplibs $compiler_flags' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' + _LT_TAGVAR(hardcode_direct, $1)=yes + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + ;; + + hpux9*) + if test "$GCC" = yes; then + _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$CC -shared -fPIC ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' + else + _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$LD -b +b $install_libdir -o $output_objdir/$soname $libobjs $deplibs $linker_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' + fi + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir' + _LT_TAGVAR(hardcode_libdir_separator, $1)=: + _LT_TAGVAR(hardcode_direct, $1)=yes + + # hardcode_minus_L: Not really in the search PATH, + # but as the default location of the library. + _LT_TAGVAR(hardcode_minus_L, $1)=yes + _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' + ;; + + hpux10*) + if test "$GCC" = yes -a "$with_gnu_ld" = no; then + _LT_TAGVAR(archive_cmds, $1)='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' + else + _LT_TAGVAR(archive_cmds, $1)='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags' + fi + if test "$with_gnu_ld" = no; then + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir' + _LT_TAGVAR(hardcode_libdir_flag_spec_ld, $1)='+b $libdir' + _LT_TAGVAR(hardcode_libdir_separator, $1)=: + _LT_TAGVAR(hardcode_direct, $1)=yes + _LT_TAGVAR(hardcode_direct_absolute, $1)=yes + _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' + # hardcode_minus_L: Not really in the search PATH, + # but as the default location of the library. + _LT_TAGVAR(hardcode_minus_L, $1)=yes + fi + ;; + + hpux11*) + if test "$GCC" = yes -a "$with_gnu_ld" = no; then + case $host_cpu in + hppa*64*) + _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' + ;; + ia64*) + _LT_TAGVAR(archive_cmds, $1)='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' + ;; + *) + _LT_TAGVAR(archive_cmds, $1)='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' + ;; + esac + else + case $host_cpu in + hppa*64*) + _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' + ;; + ia64*) + _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' + ;; + *) + _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' + ;; + esac + fi + if test "$with_gnu_ld" = no; then + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir' + _LT_TAGVAR(hardcode_libdir_separator, $1)=: + + case $host_cpu in + hppa*64*|ia64*) + _LT_TAGVAR(hardcode_direct, $1)=no + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + ;; + *) + _LT_TAGVAR(hardcode_direct, $1)=yes + _LT_TAGVAR(hardcode_direct_absolute, $1)=yes + _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' + + # hardcode_minus_L: Not really in the search PATH, + # but as the default location of the library. + _LT_TAGVAR(hardcode_minus_L, $1)=yes + ;; + esac + fi + ;; + + irix5* | irix6* | nonstopux*) + if test "$GCC" = yes; then + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' + # Try to use the -exported_symbol ld option, if it does not + # work, assume that -exports_file does not work either and + # implicitly export all symbols. + save_LDFLAGS="$LDFLAGS" + LDFLAGS="$LDFLAGS -shared ${wl}-exported_symbol ${wl}foo ${wl}-update_registry ${wl}/dev/null" + AC_LINK_IFELSE(int foo(void) {}, + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations ${wl}-exports_file ${wl}$export_symbols -o $lib' + ) + LDFLAGS="$save_LDFLAGS" + else + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -exports_file $export_symbols -o $lib' + fi + _LT_TAGVAR(archive_cmds_need_lc, $1)='no' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' + _LT_TAGVAR(hardcode_libdir_separator, $1)=: + _LT_TAGVAR(inherit_rpath, $1)=yes + _LT_TAGVAR(link_all_deplibs, $1)=yes + ;; + + netbsd*) + if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then + _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' # a.out + else + _LT_TAGVAR(archive_cmds, $1)='$LD -shared -o $lib $libobjs $deplibs $linker_flags' # ELF + fi + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' + _LT_TAGVAR(hardcode_direct, $1)=yes + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + ;; + + newsos6) + _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + _LT_TAGVAR(hardcode_direct, $1)=yes + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' + _LT_TAGVAR(hardcode_libdir_separator, $1)=: + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + ;; + + *nto* | *qnx*) + ;; + + openbsd*) + if test -f /usr/libexec/ld.so; then + _LT_TAGVAR(hardcode_direct, $1)=yes + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + _LT_TAGVAR(hardcode_direct_absolute, $1)=yes + if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-retain-symbols-file,$export_symbols' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' + _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' + else + case $host_os in + openbsd[[01]].* | openbsd2.[[0-7]] | openbsd2.[[0-7]].*) + _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' + ;; + *) + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' + ;; + esac + fi + else + _LT_TAGVAR(ld_shlibs, $1)=no + fi + ;; + + os2*) + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' + _LT_TAGVAR(hardcode_minus_L, $1)=yes + _LT_TAGVAR(allow_undefined_flag, $1)=unsupported + _LT_TAGVAR(archive_cmds, $1)='$ECHO "LIBRARY $libname INITINSTANCE" > $output_objdir/$libname.def~$ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~$ECHO DATA >> $output_objdir/$libname.def~$ECHO " SINGLE NONSHARED" >> $output_objdir/$libname.def~$ECHO EXPORTS >> $output_objdir/$libname.def~emxexp $libobjs >> $output_objdir/$libname.def~$CC -Zdll -Zcrtdll -o $lib $libobjs $deplibs $compiler_flags $output_objdir/$libname.def' + _LT_TAGVAR(old_archive_from_new_cmds, $1)='emximp -o $output_objdir/$libname.a $output_objdir/$libname.def' + ;; + + osf3*) + if test "$GCC" = yes; then + _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*' + _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' + else + _LT_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*' + _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib' + fi + _LT_TAGVAR(archive_cmds_need_lc, $1)='no' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' + _LT_TAGVAR(hardcode_libdir_separator, $1)=: + ;; + + osf4* | osf5*) # as osf3* with the addition of -msym flag + if test "$GCC" = yes; then + _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*' + _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' + else + _LT_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*' + _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags -msym -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done; printf "%s\\n" "-hidden">> $lib.exp~ + $CC -shared${allow_undefined_flag} ${wl}-input ${wl}$lib.exp $compiler_flags $libobjs $deplibs -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib~$RM $lib.exp' + + # Both c and cxx compiler support -rpath directly + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir' + fi + _LT_TAGVAR(archive_cmds_need_lc, $1)='no' + _LT_TAGVAR(hardcode_libdir_separator, $1)=: + ;; + + solaris*) + _LT_TAGVAR(no_undefined_flag, $1)=' -z defs' + if test "$GCC" = yes; then + wlarc='${wl}' + _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-z ${wl}text ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' + _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ + $CC -shared ${wl}-z ${wl}text ${wl}-M ${wl}$lib.exp ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp' + else + case `$CC -V 2>&1` in + *"Compilers 5.0"*) + wlarc='' + _LT_TAGVAR(archive_cmds, $1)='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linker_flags' + _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ + $LD -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$RM $lib.exp' + ;; + *) + wlarc='${wl}' + _LT_TAGVAR(archive_cmds, $1)='$CC -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $compiler_flags' + _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ + $CC -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp' + ;; + esac + fi + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + case $host_os in + solaris2.[[0-5]] | solaris2.[[0-5]].*) ;; + *) + # The compiler driver will combine and reorder linker options, + # but understands `-z linker_flag'. GCC discards it without `$wl', + # but is careful enough not to reorder. + # Supported since Solaris 2.6 (maybe 2.5.1?) + if test "$GCC" = yes; then + _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}-z ${wl}allextract$convenience ${wl}-z ${wl}defaultextract' + else + _LT_TAGVAR(whole_archive_flag_spec, $1)='-z allextract$convenience -z defaultextract' + fi + ;; + esac + _LT_TAGVAR(link_all_deplibs, $1)=yes + ;; + + sunos4*) + if test "x$host_vendor" = xsequent; then + # Use $CC to link under sequent, because it throws in some extra .o + # files that make .init and .fini sections work. + _LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h $soname -o $lib $libobjs $deplibs $compiler_flags' + else + _LT_TAGVAR(archive_cmds, $1)='$LD -assert pure-text -Bstatic -o $lib $libobjs $deplibs $linker_flags' + fi + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' + _LT_TAGVAR(hardcode_direct, $1)=yes + _LT_TAGVAR(hardcode_minus_L, $1)=yes + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + ;; + + sysv4) + case $host_vendor in + sni) + _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + _LT_TAGVAR(hardcode_direct, $1)=yes # is this really true??? + ;; + siemens) + ## LD is ld it makes a PLAMLIB + ## CC just makes a GrossModule. + _LT_TAGVAR(archive_cmds, $1)='$LD -G -o $lib $libobjs $deplibs $linker_flags' + _LT_TAGVAR(reload_cmds, $1)='$CC -r -o $output$reload_objs' + _LT_TAGVAR(hardcode_direct, $1)=no + ;; + motorola) + _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + _LT_TAGVAR(hardcode_direct, $1)=no #Motorola manual says yes, but my tests say they lie + ;; + esac + runpath_var='LD_RUN_PATH' + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + ;; + + sysv4.3*) + _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + _LT_TAGVAR(export_dynamic_flag_spec, $1)='-Bexport' + ;; + + sysv4*MP*) + if test -d /usr/nec; then + _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + runpath_var=LD_RUN_PATH + hardcode_runpath_var=yes + _LT_TAGVAR(ld_shlibs, $1)=yes + fi + ;; + + sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[[01]].[[10]]* | unixware7* | sco3.2v5.0.[[024]]*) + _LT_TAGVAR(no_undefined_flag, $1)='${wl}-z,text' + _LT_TAGVAR(archive_cmds_need_lc, $1)=no + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + runpath_var='LD_RUN_PATH' + + if test "$GCC" = yes; then + _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + else + _LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + fi + ;; + + sysv5* | sco3.2v5* | sco5v6*) + # Note: We can NOT use -z defs as we might desire, because we do not + # link with -lc, and that would cause any symbols used from libc to + # always be unresolved, which means just about no library would + # ever link correctly. If we're not using GNU ld we use -z text + # though, which does catch some bad symbols but isn't as heavy-handed + # as -z defs. + _LT_TAGVAR(no_undefined_flag, $1)='${wl}-z,text' + _LT_TAGVAR(allow_undefined_flag, $1)='${wl}-z,nodefs' + _LT_TAGVAR(archive_cmds_need_lc, $1)=no + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R,$libdir' + _LT_TAGVAR(hardcode_libdir_separator, $1)=':' + _LT_TAGVAR(link_all_deplibs, $1)=yes + _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-Bexport' + runpath_var='LD_RUN_PATH' + + if test "$GCC" = yes; then + _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + else + _LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + fi + ;; + + uts4*) + _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + ;; + + *) + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + esac + + if test x$host_vendor = xsni; then + case $host in + sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*) + _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-Blargedynsym' + ;; + esac + fi + fi +]) +AC_MSG_RESULT([$_LT_TAGVAR(ld_shlibs, $1)]) +test "$_LT_TAGVAR(ld_shlibs, $1)" = no && can_build_shared=no + +_LT_TAGVAR(with_gnu_ld, $1)=$with_gnu_ld + +_LT_DECL([], [libext], [0], [Old archive suffix (normally "a")])dnl +_LT_DECL([], [shrext_cmds], [1], [Shared library suffix (normally ".so")])dnl +_LT_DECL([], [extract_expsyms_cmds], [2], + [The commands to extract the exported symbol list from a shared archive]) + +# +# Do we need to explicitly link libc? +# +case "x$_LT_TAGVAR(archive_cmds_need_lc, $1)" in +x|xyes) + # Assume -lc should be added + _LT_TAGVAR(archive_cmds_need_lc, $1)=yes + + if test "$enable_shared" = yes && test "$GCC" = yes; then + case $_LT_TAGVAR(archive_cmds, $1) in + *'~'*) + # FIXME: we may have to deal with multi-command sequences. + ;; + '$CC '*) + # Test whether the compiler implicitly links with -lc since on some + # systems, -lgcc has to come before -lc. If gcc already passes -lc + # to ld, don't add -lc before -lgcc. + AC_MSG_CHECKING([whether -lc should be explicitly linked in]) + $RM conftest* + echo "$lt_simple_compile_test_code" > conftest.$ac_ext + + if AC_TRY_EVAL(ac_compile) 2>conftest.err; then + soname=conftest + lib=conftest + libobjs=conftest.$ac_objext + deplibs= + wl=$_LT_TAGVAR(lt_prog_compiler_wl, $1) + pic_flag=$_LT_TAGVAR(lt_prog_compiler_pic, $1) + compiler_flags=-v + linker_flags=-v + verstring= + output_objdir=. + libname=conftest + lt_save_allow_undefined_flag=$_LT_TAGVAR(allow_undefined_flag, $1) + _LT_TAGVAR(allow_undefined_flag, $1)= + if AC_TRY_EVAL(_LT_TAGVAR(archive_cmds, $1) 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1) + then + _LT_TAGVAR(archive_cmds_need_lc, $1)=no + else + _LT_TAGVAR(archive_cmds_need_lc, $1)=yes + fi + _LT_TAGVAR(allow_undefined_flag, $1)=$lt_save_allow_undefined_flag + else + cat conftest.err 1>&5 + fi + $RM conftest* + AC_MSG_RESULT([$_LT_TAGVAR(archive_cmds_need_lc, $1)]) + ;; + esac + fi + ;; +esac + +_LT_TAGDECL([build_libtool_need_lc], [archive_cmds_need_lc], [0], + [Whether or not to add -lc for building shared libraries]) +_LT_TAGDECL([allow_libtool_libs_with_static_runtimes], + [enable_shared_with_static_runtimes], [0], + [Whether or not to disallow shared libs when runtime libs are static]) +_LT_TAGDECL([], [export_dynamic_flag_spec], [1], + [Compiler flag to allow reflexive dlopens]) +_LT_TAGDECL([], [whole_archive_flag_spec], [1], + [Compiler flag to generate shared objects directly from archives]) +_LT_TAGDECL([], [compiler_needs_object], [1], + [Whether the compiler copes with passing no objects directly]) +_LT_TAGDECL([], [old_archive_from_new_cmds], [2], + [Create an old-style archive from a shared archive]) +_LT_TAGDECL([], [old_archive_from_expsyms_cmds], [2], + [Create a temporary old-style archive to link instead of a shared archive]) +_LT_TAGDECL([], [archive_cmds], [2], [Commands used to build a shared archive]) +_LT_TAGDECL([], [archive_expsym_cmds], [2]) +_LT_TAGDECL([], [module_cmds], [2], + [Commands used to build a loadable module if different from building + a shared archive.]) +_LT_TAGDECL([], [module_expsym_cmds], [2]) +_LT_TAGDECL([], [with_gnu_ld], [1], + [Whether we are building with GNU ld or not]) +_LT_TAGDECL([], [allow_undefined_flag], [1], + [Flag that allows shared libraries with undefined symbols to be built]) +_LT_TAGDECL([], [no_undefined_flag], [1], + [Flag that enforces no undefined symbols]) +_LT_TAGDECL([], [hardcode_libdir_flag_spec], [1], + [Flag to hardcode $libdir into a binary during linking. + This must work even if $libdir does not exist]) +_LT_TAGDECL([], [hardcode_libdir_flag_spec_ld], [1], + [[If ld is used when linking, flag to hardcode $libdir into a binary + during linking. This must work even if $libdir does not exist]]) +_LT_TAGDECL([], [hardcode_libdir_separator], [1], + [Whether we need a single "-rpath" flag with a separated argument]) +_LT_TAGDECL([], [hardcode_direct], [0], + [Set to "yes" if using DIR/libNAME${shared_ext} during linking hardcodes + DIR into the resulting binary]) +_LT_TAGDECL([], [hardcode_direct_absolute], [0], + [Set to "yes" if using DIR/libNAME${shared_ext} during linking hardcodes + DIR into the resulting binary and the resulting library dependency is + "absolute", i.e impossible to change by setting ${shlibpath_var} if the + library is relocated]) +_LT_TAGDECL([], [hardcode_minus_L], [0], + [Set to "yes" if using the -LDIR flag during linking hardcodes DIR + into the resulting binary]) +_LT_TAGDECL([], [hardcode_shlibpath_var], [0], + [Set to "yes" if using SHLIBPATH_VAR=DIR during linking hardcodes DIR + into the resulting binary]) +_LT_TAGDECL([], [hardcode_automatic], [0], + [Set to "yes" if building a shared library automatically hardcodes DIR + into the library and all subsequent libraries and executables linked + against it]) +_LT_TAGDECL([], [inherit_rpath], [0], + [Set to yes if linker adds runtime paths of dependent libraries + to runtime path list]) +_LT_TAGDECL([], [link_all_deplibs], [0], + [Whether libtool must link a program against all its dependency libraries]) +_LT_TAGDECL([], [fix_srcfile_path], [1], + [Fix the shell variable $srcfile for the compiler]) +_LT_TAGDECL([], [always_export_symbols], [0], + [Set to "yes" if exported symbols are required]) +_LT_TAGDECL([], [export_symbols_cmds], [2], + [The commands to list exported symbols]) +_LT_TAGDECL([], [exclude_expsyms], [1], + [Symbols that should not be listed in the preloaded symbols]) +_LT_TAGDECL([], [include_expsyms], [1], + [Symbols that must always be exported]) +_LT_TAGDECL([], [prelink_cmds], [2], + [Commands necessary for linking programs (against libraries) with templates]) +_LT_TAGDECL([], [file_list_spec], [1], + [Specify filename containing input files]) +dnl FIXME: Not yet implemented +dnl _LT_TAGDECL([], [thread_safe_flag_spec], [1], +dnl [Compiler flag to generate thread safe objects]) +])# _LT_LINKER_SHLIBS + + +# _LT_LANG_C_CONFIG([TAG]) +# ------------------------ +# Ensure that the configuration variables for a C compiler are suitably +# defined. These variables are subsequently used by _LT_CONFIG to write +# the compiler configuration to `libtool'. +m4_defun([_LT_LANG_C_CONFIG], +[m4_require([_LT_DECL_EGREP])dnl +lt_save_CC="$CC" +AC_LANG_PUSH(C) + +# Source file extension for C test sources. +ac_ext=c + +# Object file extension for compiled C test sources. +objext=o +_LT_TAGVAR(objext, $1)=$objext + +# Code to be used in simple compile tests +lt_simple_compile_test_code="int some_variable = 0;" + +# Code to be used in simple link tests +lt_simple_link_test_code='int main(){return(0);}' + +_LT_TAG_COMPILER +# Save the default compiler, since it gets overwritten when the other +# tags are being tested, and _LT_TAGVAR(compiler, []) is a NOP. +compiler_DEFAULT=$CC + +# save warnings/boilerplate of simple test code +_LT_COMPILER_BOILERPLATE +_LT_LINKER_BOILERPLATE + +## CAVEAT EMPTOR: +## There is no encapsulation within the following macros, do not change +## the running order or otherwise move them around unless you know exactly +## what you are doing... +if test -n "$compiler"; then + _LT_COMPILER_NO_RTTI($1) + _LT_COMPILER_PIC($1) + _LT_COMPILER_C_O($1) + _LT_COMPILER_FILE_LOCKS($1) + _LT_LINKER_SHLIBS($1) + _LT_SYS_DYNAMIC_LINKER($1) + _LT_LINKER_HARDCODE_LIBPATH($1) + LT_SYS_DLOPEN_SELF + _LT_CMD_STRIPLIB + + # Report which library types will actually be built + AC_MSG_CHECKING([if libtool supports shared libraries]) + AC_MSG_RESULT([$can_build_shared]) + + AC_MSG_CHECKING([whether to build shared libraries]) + test "$can_build_shared" = "no" && enable_shared=no + + # On AIX, shared libraries and static libraries use the same namespace, and + # are all built from PIC. + case $host_os in + aix3*) + test "$enable_shared" = yes && enable_static=no + if test -n "$RANLIB"; then + archive_cmds="$archive_cmds~\$RANLIB \$lib" + postinstall_cmds='$RANLIB $lib' + fi + ;; + + aix[[4-9]]*) + if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then + test "$enable_shared" = yes && enable_static=no + fi + ;; + esac + AC_MSG_RESULT([$enable_shared]) + + AC_MSG_CHECKING([whether to build static libraries]) + # Make sure either enable_shared or enable_static is yes. + test "$enable_shared" = yes || enable_static=yes + AC_MSG_RESULT([$enable_static]) + + _LT_CONFIG($1) +fi +AC_LANG_POP +CC="$lt_save_CC" +])# _LT_LANG_C_CONFIG + + +# _LT_PROG_CXX +# ------------ +# Since AC_PROG_CXX is broken, in that it returns g++ if there is no c++ +# compiler, we have our own version here. +m4_defun([_LT_PROG_CXX], +[ +pushdef([AC_MSG_ERROR], [_lt_caught_CXX_error=yes]) +AC_PROG_CXX +if test -n "$CXX" && ( test "X$CXX" != "Xno" && + ( (test "X$CXX" = "Xg++" && `g++ -v >/dev/null 2>&1` ) || + (test "X$CXX" != "Xg++"))) ; then + AC_PROG_CXXCPP +else + _lt_caught_CXX_error=yes +fi +popdef([AC_MSG_ERROR]) +])# _LT_PROG_CXX + +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([_LT_PROG_CXX], []) + + +# _LT_LANG_CXX_CONFIG([TAG]) +# -------------------------- +# Ensure that the configuration variables for a C++ compiler are suitably +# defined. These variables are subsequently used by _LT_CONFIG to write +# the compiler configuration to `libtool'. +m4_defun([_LT_LANG_CXX_CONFIG], +[AC_REQUIRE([_LT_PROG_CXX])dnl +m4_require([_LT_FILEUTILS_DEFAULTS])dnl +m4_require([_LT_DECL_EGREP])dnl + +AC_LANG_PUSH(C++) +_LT_TAGVAR(archive_cmds_need_lc, $1)=no +_LT_TAGVAR(allow_undefined_flag, $1)= +_LT_TAGVAR(always_export_symbols, $1)=no +_LT_TAGVAR(archive_expsym_cmds, $1)= +_LT_TAGVAR(compiler_needs_object, $1)=no +_LT_TAGVAR(export_dynamic_flag_spec, $1)= +_LT_TAGVAR(hardcode_direct, $1)=no +_LT_TAGVAR(hardcode_direct_absolute, $1)=no +_LT_TAGVAR(hardcode_libdir_flag_spec, $1)= +_LT_TAGVAR(hardcode_libdir_flag_spec_ld, $1)= +_LT_TAGVAR(hardcode_libdir_separator, $1)= +_LT_TAGVAR(hardcode_minus_L, $1)=no +_LT_TAGVAR(hardcode_shlibpath_var, $1)=unsupported +_LT_TAGVAR(hardcode_automatic, $1)=no +_LT_TAGVAR(inherit_rpath, $1)=no +_LT_TAGVAR(module_cmds, $1)= +_LT_TAGVAR(module_expsym_cmds, $1)= +_LT_TAGVAR(link_all_deplibs, $1)=unknown +_LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds +_LT_TAGVAR(no_undefined_flag, $1)= +_LT_TAGVAR(whole_archive_flag_spec, $1)= +_LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no + +# Source file extension for C++ test sources. +ac_ext=cpp + +# Object file extension for compiled C++ test sources. +objext=o +_LT_TAGVAR(objext, $1)=$objext + +# No sense in running all these tests if we already determined that +# the CXX compiler isn't working. Some variables (like enable_shared) +# are currently assumed to apply to all compilers on this platform, +# and will be corrupted by setting them based on a non-working compiler. +if test "$_lt_caught_CXX_error" != yes; then + # Code to be used in simple compile tests + lt_simple_compile_test_code="int some_variable = 0;" + + # Code to be used in simple link tests + lt_simple_link_test_code='int main(int, char *[[]]) { return(0); }' + + # ltmain only uses $CC for tagged configurations so make sure $CC is set. + _LT_TAG_COMPILER + + # save warnings/boilerplate of simple test code + _LT_COMPILER_BOILERPLATE + _LT_LINKER_BOILERPLATE + + # Allow CC to be a program name with arguments. + lt_save_CC=$CC + lt_save_LD=$LD + lt_save_GCC=$GCC + GCC=$GXX + lt_save_with_gnu_ld=$with_gnu_ld + lt_save_path_LD=$lt_cv_path_LD + if test -n "${lt_cv_prog_gnu_ldcxx+set}"; then + lt_cv_prog_gnu_ld=$lt_cv_prog_gnu_ldcxx + else + $as_unset lt_cv_prog_gnu_ld + fi + if test -n "${lt_cv_path_LDCXX+set}"; then + lt_cv_path_LD=$lt_cv_path_LDCXX + else + $as_unset lt_cv_path_LD + fi + test -z "${LDCXX+set}" || LD=$LDCXX + CC=${CXX-"c++"} + compiler=$CC + _LT_TAGVAR(compiler, $1)=$CC + _LT_CC_BASENAME([$compiler]) + + if test -n "$compiler"; then + # We don't want -fno-exception when compiling C++ code, so set the + # no_builtin_flag separately + if test "$GXX" = yes; then + _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=' -fno-builtin' + else + _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)= + fi + + if test "$GXX" = yes; then + # Set up default GNU C++ configuration + + LT_PATH_LD + + # Check if GNU C++ uses GNU ld as the underlying linker, since the + # archiving commands below assume that GNU ld is being used. + if test "$with_gnu_ld" = yes; then + _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' + + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' + _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic' + + # If archive_cmds runs LD, not CC, wlarc should be empty + # XXX I think wlarc can be eliminated in ltcf-cxx, but I need to + # investigate it a little bit more. (MM) + wlarc='${wl}' + + # ancient GNU ld didn't support --whole-archive et. al. + if eval "`$CC -print-prog-name=ld` --help 2>&1" | + $GREP 'no-whole-archive' > /dev/null; then + _LT_TAGVAR(whole_archive_flag_spec, $1)="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' + else + _LT_TAGVAR(whole_archive_flag_spec, $1)= + fi + else + with_gnu_ld=no + wlarc= + + # A generic and very simple default shared library creation + # command for GNU C++ for the case where it uses the native + # linker, instead of GNU ld. If possible, this setting should + # overridden to take advantage of the native linker features on + # the platform it is being used on. + _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib' + fi + + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "\-L"' + + else + GXX=no + with_gnu_ld=no + wlarc= + fi + + # PORTME: fill in a description of your system's C++ link characteristics + AC_MSG_CHECKING([whether the $compiler linker ($LD) supports shared libraries]) + _LT_TAGVAR(ld_shlibs, $1)=yes + case $host_os in + aix3*) + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + aix[[4-9]]*) + if test "$host_cpu" = ia64; then + # On IA64, the linker does run time linking by default, so we don't + # have to do anything special. + aix_use_runtimelinking=no + exp_sym_flag='-Bexport' + no_entry_flag="" + else + aix_use_runtimelinking=no + + # Test if we are trying to use run time linking or normal + # AIX style linking. If -brtl is somewhere in LDFLAGS, we + # need to do runtime linking. + case $host_os in aix4.[[23]]|aix4.[[23]].*|aix[[5-9]]*) + for ld_flag in $LDFLAGS; do + case $ld_flag in + *-brtl*) + aix_use_runtimelinking=yes + break + ;; + esac + done + ;; + esac + + exp_sym_flag='-bexport' + no_entry_flag='-bnoentry' + fi + + # When large executables or shared objects are built, AIX ld can + # have problems creating the table of contents. If linking a library + # or program results in "error TOC overflow" add -mminimal-toc to + # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not + # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS. + + _LT_TAGVAR(archive_cmds, $1)='' + _LT_TAGVAR(hardcode_direct, $1)=yes + _LT_TAGVAR(hardcode_direct_absolute, $1)=yes + _LT_TAGVAR(hardcode_libdir_separator, $1)=':' + _LT_TAGVAR(link_all_deplibs, $1)=yes + _LT_TAGVAR(file_list_spec, $1)='${wl}-f,' + + if test "$GXX" = yes; then + case $host_os in aix4.[[012]]|aix4.[[012]].*) + # We only want to do this on AIX 4.2 and lower, the check + # below for broken collect2 doesn't work under 4.3+ + collect2name=`${CC} -print-prog-name=collect2` + if test -f "$collect2name" && + strings "$collect2name" | $GREP resolve_lib_name >/dev/null + then + # We have reworked collect2 + : + else + # We have old collect2 + _LT_TAGVAR(hardcode_direct, $1)=unsupported + # It fails to find uninstalled libraries when the uninstalled + # path is not listed in the libpath. Setting hardcode_minus_L + # to unsupported forces relinking + _LT_TAGVAR(hardcode_minus_L, $1)=yes + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' + _LT_TAGVAR(hardcode_libdir_separator, $1)= + fi + esac + shared_flag='-shared' + if test "$aix_use_runtimelinking" = yes; then + shared_flag="$shared_flag "'${wl}-G' + fi + else + # not using gcc + if test "$host_cpu" = ia64; then + # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release + # chokes on -Wl,-G. The following line is correct: + shared_flag='-G' + else + if test "$aix_use_runtimelinking" = yes; then + shared_flag='${wl}-G' + else + shared_flag='${wl}-bM:SRE' + fi + fi + fi + + _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-bexpall' + # It seems that -bexpall does not export symbols beginning with + # underscore (_), so it is better to generate a list of symbols to + # export. + _LT_TAGVAR(always_export_symbols, $1)=yes + if test "$aix_use_runtimelinking" = yes; then + # Warning - without using the other runtime loading flags (-brtl), + # -berok will link without error, but may produce a broken library. + _LT_TAGVAR(allow_undefined_flag, $1)='-berok' + # Determine the default libpath from the value encoded in an empty + # executable. + _LT_SYS_MODULE_PATH_AIX + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath" + + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then $ECHO "X${wl}${allow_undefined_flag}" | $Xsed; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag" + else + if test "$host_cpu" = ia64; then + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R $libdir:/usr/lib:/lib' + _LT_TAGVAR(allow_undefined_flag, $1)="-z nodefs" + _LT_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$exp_sym_flag:\$export_symbols" + else + # Determine the default libpath from the value encoded in an + # empty executable. + _LT_SYS_MODULE_PATH_AIX + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath" + # Warning - without using the other run time loading flags, + # -berok will link without error, but may produce a broken library. + _LT_TAGVAR(no_undefined_flag, $1)=' ${wl}-bernotok' + _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-berok' + # Exported symbols can be pulled into shared objects from archives + _LT_TAGVAR(whole_archive_flag_spec, $1)='$convenience' + _LT_TAGVAR(archive_cmds_need_lc, $1)=yes + # This is similar to how AIX traditionally builds its shared + # libraries. + _LT_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs ${wl}-bnoentry $compiler_flags ${wl}-bE:$export_symbols${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname' + fi + fi + ;; + + beos*) + if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then + _LT_TAGVAR(allow_undefined_flag, $1)=unsupported + # Joseph Beckenbach says some releases of gcc + # support --undefined. This deserves some investigation. FIXME + _LT_TAGVAR(archive_cmds, $1)='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + else + _LT_TAGVAR(ld_shlibs, $1)=no + fi + ;; + + chorus*) + case $cc_basename in + *) + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + esac + ;; + + cygwin* | mingw* | pw32* | cegcc*) + # _LT_TAGVAR(hardcode_libdir_flag_spec, $1) is actually meaningless, + # as there is no search path for DLLs. + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' + _LT_TAGVAR(allow_undefined_flag, $1)=unsupported + _LT_TAGVAR(always_export_symbols, $1)=no + _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes + + if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then + _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' + # If the export-symbols file already is a .def file (1st line + # is EXPORTS), use it as is; otherwise, prepend... + _LT_TAGVAR(archive_expsym_cmds, $1)='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then + cp $export_symbols $output_objdir/$soname.def; + else + echo EXPORTS > $output_objdir/$soname.def; + cat $export_symbols >> $output_objdir/$soname.def; + fi~ + $CC -shared -nostdlib $output_objdir/$soname.def $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' + else + _LT_TAGVAR(ld_shlibs, $1)=no + fi + ;; + darwin* | rhapsody*) + _LT_DARWIN_LINKER_FEATURES($1) + ;; + + dgux*) + case $cc_basename in + ec++*) + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + ghcx*) + # Green Hills C++ Compiler + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + *) + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + esac + ;; + + freebsd[[12]]*) + # C++ shared libraries reported to be fairly broken before + # switch to ELF + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + + freebsd-elf*) + _LT_TAGVAR(archive_cmds_need_lc, $1)=no + ;; + + freebsd* | dragonfly*) + # FreeBSD 3 and later use GNU C++ and GNU ld with standard ELF + # conventions + _LT_TAGVAR(ld_shlibs, $1)=yes + ;; + + gnu*) + ;; + + hpux9*) + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir' + _LT_TAGVAR(hardcode_libdir_separator, $1)=: + _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' + _LT_TAGVAR(hardcode_direct, $1)=yes + _LT_TAGVAR(hardcode_minus_L, $1)=yes # Not in the search PATH, + # but as the default + # location of the library. + + case $cc_basename in + CC*) + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + aCC*) + _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$CC -b ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + # + # There doesn't appear to be a way to prevent this compiler from + # explicitly linking system object files so we need to strip them + # from the output so that they don't get included in the library + # dependencies. + output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | $EGREP "\-L"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; $ECHO "X$list" | $Xsed' + ;; + *) + if test "$GXX" = yes; then + _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$CC -shared -nostdlib -fPIC ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' + else + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + fi + ;; + esac + ;; + + hpux10*|hpux11*) + if test $with_gnu_ld = no; then + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir' + _LT_TAGVAR(hardcode_libdir_separator, $1)=: + + case $host_cpu in + hppa*64*|ia64*) + ;; + *) + _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' + ;; + esac + fi + case $host_cpu in + hppa*64*|ia64*) + _LT_TAGVAR(hardcode_direct, $1)=no + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + ;; + *) + _LT_TAGVAR(hardcode_direct, $1)=yes + _LT_TAGVAR(hardcode_direct_absolute, $1)=yes + _LT_TAGVAR(hardcode_minus_L, $1)=yes # Not in the search PATH, + # but as the default + # location of the library. + ;; + esac + + case $cc_basename in + CC*) + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + aCC*) + case $host_cpu in + hppa*64*) + _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' + ;; + ia64*) + _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' + ;; + *) + _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' + ;; + esac + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + # + # There doesn't appear to be a way to prevent this compiler from + # explicitly linking system object files so we need to strip them + # from the output so that they don't get included in the library + # dependencies. + output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | $GREP "\-L"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; $ECHO "X$list" | $Xsed' + ;; + *) + if test "$GXX" = yes; then + if test $with_gnu_ld = no; then + case $host_cpu in + hppa*64*) + _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib -fPIC ${wl}+h ${wl}$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' + ;; + ia64*) + _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib -fPIC ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' + ;; + *) + _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' + ;; + esac + fi + else + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + fi + ;; + esac + ;; + + interix[[3-9]]*) + _LT_TAGVAR(hardcode_direct, $1)=no + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' + _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' + # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc. + # Instead, shared libraries are loaded at an image base (0x10000000 by + # default) and relocated if they conflict, which is a slow very memory + # consuming and fragmenting process. To avoid this, we pick a random, + # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link + # time. Moving up from 0x10000000 also allows more sbrk(2) space. + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='sed "s,^,_," $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--retain-symbols-file,$output_objdir/$soname.expsym ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' + ;; + irix5* | irix6*) + case $cc_basename in + CC*) + # SGI C++ + _LT_TAGVAR(archive_cmds, $1)='$CC -shared -all -multigot $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib' + + # Archives containing C++ object files must be created using + # "CC -ar", where "CC" is the IRIX C++ compiler. This is + # necessary to make sure instantiated templates are included + # in the archive. + _LT_TAGVAR(old_archive_cmds, $1)='$CC -ar -WR,-u -o $oldlib $oldobjs' + ;; + *) + if test "$GXX" = yes; then + if test "$with_gnu_ld" = no; then + _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' + else + _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` -o $lib' + fi + fi + _LT_TAGVAR(link_all_deplibs, $1)=yes + ;; + esac + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' + _LT_TAGVAR(hardcode_libdir_separator, $1)=: + _LT_TAGVAR(inherit_rpath, $1)=yes + ;; + + linux* | k*bsd*-gnu) + case $cc_basename in + KCC*) + # Kuck and Associates, Inc. (KAI) C++ Compiler + + # KCC will only create a shared library if the output file + # ends with ".so" (or ".sl" for HP-UX), so rename the library + # to its proper name (with version) after linking. + _LT_TAGVAR(archive_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib ${wl}-retain-symbols-file,$export_symbols; mv \$templib $lib' + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + # + # There doesn't appear to be a way to prevent this compiler from + # explicitly linking system object files so we need to strip them + # from the output so that they don't get included in the library + # dependencies. + output_verbose_link_cmd='templist=`$CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1 | $GREP "ld"`; rm -f libconftest$shared_ext; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; $ECHO "X$list" | $Xsed' + + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' + _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic' + + # Archives containing C++ object files must be created using + # "CC -Bstatic", where "CC" is the KAI C++ compiler. + _LT_TAGVAR(old_archive_cmds, $1)='$CC -Bstatic -o $oldlib $oldobjs' + ;; + icpc* | ecpc* ) + # Intel C++ + with_gnu_ld=yes + # version 8.0 and above of icpc choke on multiply defined symbols + # if we add $predep_objects and $postdep_objects, however 7.1 and + # earlier do not add the objects themselves. + case `$CC -V 2>&1` in + *"Version 7."*) + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' + ;; + *) # Version 8.0 or newer + tmp_idyn= + case $host_cpu in + ia64*) tmp_idyn=' -i_dynamic';; + esac + _LT_TAGVAR(archive_cmds, $1)='$CC -shared'"$tmp_idyn"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared'"$tmp_idyn"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' + ;; + esac + _LT_TAGVAR(archive_cmds_need_lc, $1)=no + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' + _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic' + _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive$convenience ${wl}--no-whole-archive' + ;; + pgCC* | pgcpp*) + # Portland Group C++ compiler + case `$CC -V` in + *pgCC\ [[1-5]]* | *pgcpp\ [[1-5]]*) + _LT_TAGVAR(prelink_cmds, $1)='tpldir=Template.dir~ + rm -rf $tpldir~ + $CC --prelink_objects --instantiation_dir $tpldir $objs $libobjs $compile_deplibs~ + compile_command="$compile_command `find $tpldir -name \*.o | $NL2SP`"' + _LT_TAGVAR(old_archive_cmds, $1)='tpldir=Template.dir~ + rm -rf $tpldir~ + $CC --prelink_objects --instantiation_dir $tpldir $oldobjs$old_deplibs~ + $AR $AR_FLAGS $oldlib$oldobjs$old_deplibs `find $tpldir -name \*.o | $NL2SP`~ + $RANLIB $oldlib' + _LT_TAGVAR(archive_cmds, $1)='tpldir=Template.dir~ + rm -rf $tpldir~ + $CC --prelink_objects --instantiation_dir $tpldir $predep_objects $libobjs $deplibs $convenience $postdep_objects~ + $CC -shared $pic_flag $predep_objects $libobjs $deplibs `find $tpldir -name \*.o | $NL2SP` $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='tpldir=Template.dir~ + rm -rf $tpldir~ + $CC --prelink_objects --instantiation_dir $tpldir $predep_objects $libobjs $deplibs $convenience $postdep_objects~ + $CC -shared $pic_flag $predep_objects $libobjs $deplibs `find $tpldir -name \*.o | $NL2SP` $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname ${wl}-retain-symbols-file ${wl}$export_symbols -o $lib' + ;; + *) # Version 6 will use weak symbols + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname ${wl}-retain-symbols-file ${wl}$export_symbols -o $lib' + ;; + esac + + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}--rpath ${wl}$libdir' + _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic' + _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $ECHO \"$new_convenience\"` ${wl}--no-whole-archive' + ;; + cxx*) + # Compaq C++ + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib ${wl}-retain-symbols-file $wl$export_symbols' + + runpath_var=LD_RUN_PATH + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir' + _LT_TAGVAR(hardcode_libdir_separator, $1)=: + + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + # + # There doesn't appear to be a way to prevent this compiler from + # explicitly linking system object files so we need to strip them + # from the output so that they don't get included in the library + # dependencies. + output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "ld"`; templist=`$ECHO "X$templist" | $Xsed -e "s/\(^.*ld.*\)\( .*ld .*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; $ECHO "X$list" | $Xsed' + ;; + xl*) + # IBM XL 8.0 on PPC, with GNU ld + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' + _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic' + _LT_TAGVAR(archive_cmds, $1)='$CC -qmkshrobj $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + if test "x$supports_anon_versioning" = xyes; then + _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $output_objdir/$libname.ver~ + cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ + echo "local: *; };" >> $output_objdir/$libname.ver~ + $CC -qmkshrobj $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib' + fi + ;; + *) + case `$CC -V 2>&1 | sed 5q` in + *Sun\ C*) + # Sun C++ 5.9 + _LT_TAGVAR(no_undefined_flag, $1)=' -zdefs' + _LT_TAGVAR(archive_cmds, $1)='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-retain-symbols-file ${wl}$export_symbols' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' + _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; $ECHO \"$new_convenience\"` ${wl}--no-whole-archive' + _LT_TAGVAR(compiler_needs_object, $1)=yes + + # Not sure whether something based on + # $CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1 + # would be better. + output_verbose_link_cmd='echo' + + # Archives containing C++ object files must be created using + # "CC -xar", where "CC" is the Sun C++ compiler. This is + # necessary to make sure instantiated templates are included + # in the archive. + _LT_TAGVAR(old_archive_cmds, $1)='$CC -xar -o $oldlib $oldobjs' + ;; + esac + ;; + esac + ;; + + lynxos*) + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + + m88k*) + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + + mvs*) + case $cc_basename in + cxx*) + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + *) + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + esac + ;; + + netbsd*) + if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then + _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $predep_objects $libobjs $deplibs $postdep_objects $linker_flags' + wlarc= + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' + _LT_TAGVAR(hardcode_direct, $1)=yes + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + fi + # Workaround some broken pre-1.5 toolchains + output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP conftest.$objext | $SED -e "s:-lgcc -lc -lgcc::"' + ;; + + *nto* | *qnx*) + _LT_TAGVAR(ld_shlibs, $1)=yes + ;; + + openbsd2*) + # C++ shared libraries are fairly broken + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + + openbsd*) + if test -f /usr/libexec/ld.so; then + _LT_TAGVAR(hardcode_direct, $1)=yes + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + _LT_TAGVAR(hardcode_direct_absolute, $1)=yes + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' + if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-retain-symbols-file,$export_symbols -o $lib' + _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' + _LT_TAGVAR(whole_archive_flag_spec, $1)="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' + fi + output_verbose_link_cmd=echo + else + _LT_TAGVAR(ld_shlibs, $1)=no + fi + ;; + + osf3* | osf4* | osf5*) + case $cc_basename in + KCC*) + # Kuck and Associates, Inc. (KAI) C++ Compiler + + # KCC will only create a shared library if the output file + # ends with ".so" (or ".sl" for HP-UX), so rename the library + # to its proper name (with version) after linking. + _LT_TAGVAR(archive_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo "$lib" | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib' + + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' + _LT_TAGVAR(hardcode_libdir_separator, $1)=: + + # Archives containing C++ object files must be created using + # the KAI C++ compiler. + case $host in + osf3*) _LT_TAGVAR(old_archive_cmds, $1)='$CC -Bstatic -o $oldlib $oldobjs' ;; + *) _LT_TAGVAR(old_archive_cmds, $1)='$CC -o $oldlib $oldobjs' ;; + esac + ;; + RCC*) + # Rational C++ 2.4.1 + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + cxx*) + case $host in + osf3*) + _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*' + _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $soname `test -n "$verstring" && $ECHO "X${wl}-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' + ;; + *) + _LT_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*' + _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done~ + echo "-hidden">> $lib.exp~ + $CC -shared$allow_undefined_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname ${wl}-input ${wl}$lib.exp `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib~ + $RM $lib.exp' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir' + ;; + esac + + _LT_TAGVAR(hardcode_libdir_separator, $1)=: + + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + # + # There doesn't appear to be a way to prevent this compiler from + # explicitly linking system object files so we need to strip them + # from the output so that they don't get included in the library + # dependencies. + output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "ld" | $GREP -v "ld:"`; templist=`$ECHO "X$templist" | $Xsed -e "s/\(^.*ld.*\)\( .*ld.*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; $ECHO "X$list" | $Xsed' + ;; + *) + if test "$GXX" = yes && test "$with_gnu_ld" = no; then + _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*' + case $host in + osf3*) + _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' + ;; + *) + _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' + ;; + esac + + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' + _LT_TAGVAR(hardcode_libdir_separator, $1)=: + + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "\-L"' + + else + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + fi + ;; + esac + ;; + + psos*) + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + + sunos4*) + case $cc_basename in + CC*) + # Sun C++ 4.x + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + lcc*) + # Lucid + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + *) + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + esac + ;; + + solaris*) + case $cc_basename in + CC*) + # Sun C++ 4.2, 5.x and Centerline C++ + _LT_TAGVAR(archive_cmds_need_lc,$1)=yes + _LT_TAGVAR(no_undefined_flag, $1)=' -zdefs' + _LT_TAGVAR(archive_cmds, $1)='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' + _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ + $CC -G${allow_undefined_flag} ${wl}-M ${wl}$lib.exp -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp' + + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + case $host_os in + solaris2.[[0-5]] | solaris2.[[0-5]].*) ;; + *) + # The compiler driver will combine and reorder linker options, + # but understands `-z linker_flag'. + # Supported since Solaris 2.6 (maybe 2.5.1?) + _LT_TAGVAR(whole_archive_flag_spec, $1)='-z allextract$convenience -z defaultextract' + ;; + esac + _LT_TAGVAR(link_all_deplibs, $1)=yes + + output_verbose_link_cmd='echo' + + # Archives containing C++ object files must be created using + # "CC -xar", where "CC" is the Sun C++ compiler. This is + # necessary to make sure instantiated templates are included + # in the archive. + _LT_TAGVAR(old_archive_cmds, $1)='$CC -xar -o $oldlib $oldobjs' + ;; + gcx*) + # Green Hills C++ Compiler + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib' + + # The C++ compiler must be used to create the archive. + _LT_TAGVAR(old_archive_cmds, $1)='$CC $LDFLAGS -archive -o $oldlib $oldobjs' + ;; + *) + # GNU C++ compiler with Solaris linker + if test "$GXX" = yes && test "$with_gnu_ld" = no; then + _LT_TAGVAR(no_undefined_flag, $1)=' ${wl}-z ${wl}defs' + if $CC --version | $GREP -v '^2\.7' > /dev/null; then + _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $LDFLAGS $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ + $CC -shared -nostdlib ${wl}-M $wl$lib.exp -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp' + + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "\-L"' + else + # g++ 2.7 appears to require `-G' NOT `-shared' on this + # platform. + _LT_TAGVAR(archive_cmds, $1)='$CC -G -nostdlib $LDFLAGS $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ + $CC -G -nostdlib ${wl}-M $wl$lib.exp -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp' + + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + output_verbose_link_cmd='$CC -G $CFLAGS -v conftest.$objext 2>&1 | $GREP "\-L"' + fi + + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R $wl$libdir' + case $host_os in + solaris2.[[0-5]] | solaris2.[[0-5]].*) ;; + *) + _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}-z ${wl}allextract$convenience ${wl}-z ${wl}defaultextract' + ;; + esac + fi + ;; + esac + ;; + + sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[[01]].[[10]]* | unixware7* | sco3.2v5.0.[[024]]*) + _LT_TAGVAR(no_undefined_flag, $1)='${wl}-z,text' + _LT_TAGVAR(archive_cmds_need_lc, $1)=no + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + runpath_var='LD_RUN_PATH' + + case $cc_basename in + CC*) + _LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + ;; + *) + _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + ;; + esac + ;; + + sysv5* | sco3.2v5* | sco5v6*) + # Note: We can NOT use -z defs as we might desire, because we do not + # link with -lc, and that would cause any symbols used from libc to + # always be unresolved, which means just about no library would + # ever link correctly. If we're not using GNU ld we use -z text + # though, which does catch some bad symbols but isn't as heavy-handed + # as -z defs. + _LT_TAGVAR(no_undefined_flag, $1)='${wl}-z,text' + _LT_TAGVAR(allow_undefined_flag, $1)='${wl}-z,nodefs' + _LT_TAGVAR(archive_cmds_need_lc, $1)=no + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R,$libdir' + _LT_TAGVAR(hardcode_libdir_separator, $1)=':' + _LT_TAGVAR(link_all_deplibs, $1)=yes + _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-Bexport' + runpath_var='LD_RUN_PATH' + + case $cc_basename in + CC*) + _LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + ;; + *) + _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + ;; + esac + ;; + + tandem*) + case $cc_basename in + NCC*) + # NonStop-UX NCC 3.20 + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + *) + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + esac + ;; + + vxworks*) + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + + *) + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + esac + + AC_MSG_RESULT([$_LT_TAGVAR(ld_shlibs, $1)]) + test "$_LT_TAGVAR(ld_shlibs, $1)" = no && can_build_shared=no + + _LT_TAGVAR(GCC, $1)="$GXX" + _LT_TAGVAR(LD, $1)="$LD" + + ## CAVEAT EMPTOR: + ## There is no encapsulation within the following macros, do not change + ## the running order or otherwise move them around unless you know exactly + ## what you are doing... + _LT_SYS_HIDDEN_LIBDEPS($1) + _LT_COMPILER_PIC($1) + _LT_COMPILER_C_O($1) + _LT_COMPILER_FILE_LOCKS($1) + _LT_LINKER_SHLIBS($1) + _LT_SYS_DYNAMIC_LINKER($1) + _LT_LINKER_HARDCODE_LIBPATH($1) + + _LT_CONFIG($1) + fi # test -n "$compiler" + + CC=$lt_save_CC + LDCXX=$LD + LD=$lt_save_LD + GCC=$lt_save_GCC + with_gnu_ld=$lt_save_with_gnu_ld + lt_cv_path_LDCXX=$lt_cv_path_LD + lt_cv_path_LD=$lt_save_path_LD + lt_cv_prog_gnu_ldcxx=$lt_cv_prog_gnu_ld + lt_cv_prog_gnu_ld=$lt_save_with_gnu_ld +fi # test "$_lt_caught_CXX_error" != yes + +AC_LANG_POP +])# _LT_LANG_CXX_CONFIG + + +# _LT_SYS_HIDDEN_LIBDEPS([TAGNAME]) +# --------------------------------- +# Figure out "hidden" library dependencies from verbose +# compiler output when linking a shared library. +# Parse the compiler output and extract the necessary +# objects, libraries and library flags. +m4_defun([_LT_SYS_HIDDEN_LIBDEPS], +[m4_require([_LT_FILEUTILS_DEFAULTS])dnl +# Dependencies to place before and after the object being linked: +_LT_TAGVAR(predep_objects, $1)= +_LT_TAGVAR(postdep_objects, $1)= +_LT_TAGVAR(predeps, $1)= +_LT_TAGVAR(postdeps, $1)= +_LT_TAGVAR(compiler_lib_search_path, $1)= + +dnl we can't use the lt_simple_compile_test_code here, +dnl because it contains code intended for an executable, +dnl not a library. It's possible we should let each +dnl tag define a new lt_????_link_test_code variable, +dnl but it's only used here... +m4_if([$1], [], [cat > conftest.$ac_ext <<_LT_EOF +int a; +void foo (void) { a = 0; } +_LT_EOF +], [$1], [CXX], [cat > conftest.$ac_ext <<_LT_EOF +class Foo +{ +public: + Foo (void) { a = 0; } +private: + int a; +}; +_LT_EOF +], [$1], [F77], [cat > conftest.$ac_ext <<_LT_EOF + subroutine foo + implicit none + integer*4 a + a=0 + return + end +_LT_EOF +], [$1], [FC], [cat > conftest.$ac_ext <<_LT_EOF + subroutine foo + implicit none + integer a + a=0 + return + end +_LT_EOF +], [$1], [GCJ], [cat > conftest.$ac_ext <<_LT_EOF +public class foo { + private int a; + public void bar (void) { + a = 0; + } +}; +_LT_EOF +]) +dnl Parse the compiler output and extract the necessary +dnl objects, libraries and library flags. +if AC_TRY_EVAL(ac_compile); then + # Parse the compiler output and extract the necessary + # objects, libraries and library flags. + + # Sentinel used to keep track of whether or not we are before + # the conftest object file. + pre_test_object_deps_done=no + + for p in `eval "$output_verbose_link_cmd"`; do + case $p in + + -L* | -R* | -l*) + # Some compilers place space between "-{L,R}" and the path. + # Remove the space. + if test $p = "-L" || + test $p = "-R"; then + prev=$p + continue + else + prev= + fi + + if test "$pre_test_object_deps_done" = no; then + case $p in + -L* | -R*) + # Internal compiler library paths should come after those + # provided the user. The postdeps already come after the + # user supplied libs so there is no need to process them. + if test -z "$_LT_TAGVAR(compiler_lib_search_path, $1)"; then + _LT_TAGVAR(compiler_lib_search_path, $1)="${prev}${p}" + else + _LT_TAGVAR(compiler_lib_search_path, $1)="${_LT_TAGVAR(compiler_lib_search_path, $1)} ${prev}${p}" + fi + ;; + # The "-l" case would never come before the object being + # linked, so don't bother handling this case. + esac + else + if test -z "$_LT_TAGVAR(postdeps, $1)"; then + _LT_TAGVAR(postdeps, $1)="${prev}${p}" + else + _LT_TAGVAR(postdeps, $1)="${_LT_TAGVAR(postdeps, $1)} ${prev}${p}" + fi + fi + ;; + + *.$objext) + # This assumes that the test object file only shows up + # once in the compiler output. + if test "$p" = "conftest.$objext"; then + pre_test_object_deps_done=yes + continue + fi + + if test "$pre_test_object_deps_done" = no; then + if test -z "$_LT_TAGVAR(predep_objects, $1)"; then + _LT_TAGVAR(predep_objects, $1)="$p" + else + _LT_TAGVAR(predep_objects, $1)="$_LT_TAGVAR(predep_objects, $1) $p" + fi + else + if test -z "$_LT_TAGVAR(postdep_objects, $1)"; then + _LT_TAGVAR(postdep_objects, $1)="$p" + else + _LT_TAGVAR(postdep_objects, $1)="$_LT_TAGVAR(postdep_objects, $1) $p" + fi + fi + ;; + + *) ;; # Ignore the rest. + + esac + done + + # Clean up. + rm -f a.out a.exe +else + echo "libtool.m4: error: problem compiling $1 test program" +fi + +$RM -f confest.$objext + +# PORTME: override above test on systems where it is broken +m4_if([$1], [CXX], +[case $host_os in +interix[[3-9]]*) + # Interix 3.5 installs completely hosed .la files for C++, so rather than + # hack all around it, let's just trust "g++" to DTRT. + _LT_TAGVAR(predep_objects,$1)= + _LT_TAGVAR(postdep_objects,$1)= + _LT_TAGVAR(postdeps,$1)= + ;; + +linux*) + case `$CC -V 2>&1 | sed 5q` in + *Sun\ C*) + # Sun C++ 5.9 + + # The more standards-conforming stlport4 library is + # incompatible with the Cstd library. Avoid specifying + # it if it's in CXXFLAGS. Ignore libCrun as + # -library=stlport4 depends on it. + case " $CXX $CXXFLAGS " in + *" -library=stlport4 "*) + solaris_use_stlport4=yes + ;; + esac + + if test "$solaris_use_stlport4" != yes; then + _LT_TAGVAR(postdeps,$1)='-library=Cstd -library=Crun' + fi + ;; + esac + ;; + +solaris*) + case $cc_basename in + CC*) + # The more standards-conforming stlport4 library is + # incompatible with the Cstd library. Avoid specifying + # it if it's in CXXFLAGS. Ignore libCrun as + # -library=stlport4 depends on it. + case " $CXX $CXXFLAGS " in + *" -library=stlport4 "*) + solaris_use_stlport4=yes + ;; + esac + + # Adding this requires a known-good setup of shared libraries for + # Sun compiler versions before 5.6, else PIC objects from an old + # archive will be linked into the output, leading to subtle bugs. + if test "$solaris_use_stlport4" != yes; then + _LT_TAGVAR(postdeps,$1)='-library=Cstd -library=Crun' + fi + ;; + esac + ;; +esac +]) + +case " $_LT_TAGVAR(postdeps, $1) " in +*" -lc "*) _LT_TAGVAR(archive_cmds_need_lc, $1)=no ;; +esac + _LT_TAGVAR(compiler_lib_search_dirs, $1)= +if test -n "${_LT_TAGVAR(compiler_lib_search_path, $1)}"; then + _LT_TAGVAR(compiler_lib_search_dirs, $1)=`echo " ${_LT_TAGVAR(compiler_lib_search_path, $1)}" | ${SED} -e 's! -L! !g' -e 's!^ !!'` +fi +_LT_TAGDECL([], [compiler_lib_search_dirs], [1], + [The directories searched by this compiler when creating a shared library]) +_LT_TAGDECL([], [predep_objects], [1], + [Dependencies to place before and after the objects being linked to + create a shared library]) +_LT_TAGDECL([], [postdep_objects], [1]) +_LT_TAGDECL([], [predeps], [1]) +_LT_TAGDECL([], [postdeps], [1]) +_LT_TAGDECL([], [compiler_lib_search_path], [1], + [The library search path used internally by the compiler when linking + a shared library]) +])# _LT_SYS_HIDDEN_LIBDEPS + + +# _LT_PROG_F77 +# ------------ +# Since AC_PROG_F77 is broken, in that it returns the empty string +# if there is no fortran compiler, we have our own version here. +m4_defun([_LT_PROG_F77], +[ +pushdef([AC_MSG_ERROR], [_lt_disable_F77=yes]) +AC_PROG_F77 +if test -z "$F77" || test "X$F77" = "Xno"; then + _lt_disable_F77=yes +fi +popdef([AC_MSG_ERROR]) +])# _LT_PROG_F77 + +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([_LT_PROG_F77], []) + + +# _LT_LANG_F77_CONFIG([TAG]) +# -------------------------- +# Ensure that the configuration variables for a Fortran 77 compiler are +# suitably defined. These variables are subsequently used by _LT_CONFIG +# to write the compiler configuration to `libtool'. +m4_defun([_LT_LANG_F77_CONFIG], +[AC_REQUIRE([_LT_PROG_F77])dnl +AC_LANG_PUSH(Fortran 77) + +_LT_TAGVAR(archive_cmds_need_lc, $1)=no +_LT_TAGVAR(allow_undefined_flag, $1)= +_LT_TAGVAR(always_export_symbols, $1)=no +_LT_TAGVAR(archive_expsym_cmds, $1)= +_LT_TAGVAR(export_dynamic_flag_spec, $1)= +_LT_TAGVAR(hardcode_direct, $1)=no +_LT_TAGVAR(hardcode_direct_absolute, $1)=no +_LT_TAGVAR(hardcode_libdir_flag_spec, $1)= +_LT_TAGVAR(hardcode_libdir_flag_spec_ld, $1)= +_LT_TAGVAR(hardcode_libdir_separator, $1)= +_LT_TAGVAR(hardcode_minus_L, $1)=no +_LT_TAGVAR(hardcode_automatic, $1)=no +_LT_TAGVAR(inherit_rpath, $1)=no +_LT_TAGVAR(module_cmds, $1)= +_LT_TAGVAR(module_expsym_cmds, $1)= +_LT_TAGVAR(link_all_deplibs, $1)=unknown +_LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds +_LT_TAGVAR(no_undefined_flag, $1)= +_LT_TAGVAR(whole_archive_flag_spec, $1)= +_LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no + +# Source file extension for f77 test sources. +ac_ext=f + +# Object file extension for compiled f77 test sources. +objext=o +_LT_TAGVAR(objext, $1)=$objext + +# No sense in running all these tests if we already determined that +# the F77 compiler isn't working. Some variables (like enable_shared) +# are currently assumed to apply to all compilers on this platform, +# and will be corrupted by setting them based on a non-working compiler. +if test "$_lt_disable_F77" != yes; then + # Code to be used in simple compile tests + lt_simple_compile_test_code="\ + subroutine t + return + end +" + + # Code to be used in simple link tests + lt_simple_link_test_code="\ + program t + end +" + + # ltmain only uses $CC for tagged configurations so make sure $CC is set. + _LT_TAG_COMPILER + + # save warnings/boilerplate of simple test code + _LT_COMPILER_BOILERPLATE + _LT_LINKER_BOILERPLATE + + # Allow CC to be a program name with arguments. + lt_save_CC="$CC" + lt_save_GCC=$GCC + CC=${F77-"f77"} + compiler=$CC + _LT_TAGVAR(compiler, $1)=$CC + _LT_CC_BASENAME([$compiler]) + GCC=$G77 + if test -n "$compiler"; then + AC_MSG_CHECKING([if libtool supports shared libraries]) + AC_MSG_RESULT([$can_build_shared]) + + AC_MSG_CHECKING([whether to build shared libraries]) + test "$can_build_shared" = "no" && enable_shared=no + + # On AIX, shared libraries and static libraries use the same namespace, and + # are all built from PIC. + case $host_os in + aix3*) + test "$enable_shared" = yes && enable_static=no + if test -n "$RANLIB"; then + archive_cmds="$archive_cmds~\$RANLIB \$lib" + postinstall_cmds='$RANLIB $lib' + fi + ;; + aix[[4-9]]*) + if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then + test "$enable_shared" = yes && enable_static=no + fi + ;; + esac + AC_MSG_RESULT([$enable_shared]) + + AC_MSG_CHECKING([whether to build static libraries]) + # Make sure either enable_shared or enable_static is yes. + test "$enable_shared" = yes || enable_static=yes + AC_MSG_RESULT([$enable_static]) + + _LT_TAGVAR(GCC, $1)="$G77" + _LT_TAGVAR(LD, $1)="$LD" + + ## CAVEAT EMPTOR: + ## There is no encapsulation within the following macros, do not change + ## the running order or otherwise move them around unless you know exactly + ## what you are doing... + _LT_COMPILER_PIC($1) + _LT_COMPILER_C_O($1) + _LT_COMPILER_FILE_LOCKS($1) + _LT_LINKER_SHLIBS($1) + _LT_SYS_DYNAMIC_LINKER($1) + _LT_LINKER_HARDCODE_LIBPATH($1) + + _LT_CONFIG($1) + fi # test -n "$compiler" + + GCC=$lt_save_GCC + CC="$lt_save_CC" +fi # test "$_lt_disable_F77" != yes + +AC_LANG_POP +])# _LT_LANG_F77_CONFIG + + +# _LT_PROG_FC +# ----------- +# Since AC_PROG_FC is broken, in that it returns the empty string +# if there is no fortran compiler, we have our own version here. +m4_defun([_LT_PROG_FC], +[ +pushdef([AC_MSG_ERROR], [_lt_disable_FC=yes]) +AC_PROG_FC +if test -z "$FC" || test "X$FC" = "Xno"; then + _lt_disable_FC=yes +fi +popdef([AC_MSG_ERROR]) +])# _LT_PROG_FC + +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([_LT_PROG_FC], []) + + +# _LT_LANG_FC_CONFIG([TAG]) +# ------------------------- +# Ensure that the configuration variables for a Fortran compiler are +# suitably defined. These variables are subsequently used by _LT_CONFIG +# to write the compiler configuration to `libtool'. +m4_defun([_LT_LANG_FC_CONFIG], +[AC_REQUIRE([_LT_PROG_FC])dnl +AC_LANG_PUSH(Fortran) + +_LT_TAGVAR(archive_cmds_need_lc, $1)=no +_LT_TAGVAR(allow_undefined_flag, $1)= +_LT_TAGVAR(always_export_symbols, $1)=no +_LT_TAGVAR(archive_expsym_cmds, $1)= +_LT_TAGVAR(export_dynamic_flag_spec, $1)= +_LT_TAGVAR(hardcode_direct, $1)=no +_LT_TAGVAR(hardcode_direct_absolute, $1)=no +_LT_TAGVAR(hardcode_libdir_flag_spec, $1)= +_LT_TAGVAR(hardcode_libdir_flag_spec_ld, $1)= +_LT_TAGVAR(hardcode_libdir_separator, $1)= +_LT_TAGVAR(hardcode_minus_L, $1)=no +_LT_TAGVAR(hardcode_automatic, $1)=no +_LT_TAGVAR(inherit_rpath, $1)=no +_LT_TAGVAR(module_cmds, $1)= +_LT_TAGVAR(module_expsym_cmds, $1)= +_LT_TAGVAR(link_all_deplibs, $1)=unknown +_LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds +_LT_TAGVAR(no_undefined_flag, $1)= +_LT_TAGVAR(whole_archive_flag_spec, $1)= +_LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no + +# Source file extension for fc test sources. +ac_ext=${ac_fc_srcext-f} + +# Object file extension for compiled fc test sources. +objext=o +_LT_TAGVAR(objext, $1)=$objext + +# No sense in running all these tests if we already determined that +# the FC compiler isn't working. Some variables (like enable_shared) +# are currently assumed to apply to all compilers on this platform, +# and will be corrupted by setting them based on a non-working compiler. +if test "$_lt_disable_FC" != yes; then + # Code to be used in simple compile tests + lt_simple_compile_test_code="\ + subroutine t + return + end +" + + # Code to be used in simple link tests + lt_simple_link_test_code="\ + program t + end +" + + # ltmain only uses $CC for tagged configurations so make sure $CC is set. + _LT_TAG_COMPILER + + # save warnings/boilerplate of simple test code + _LT_COMPILER_BOILERPLATE + _LT_LINKER_BOILERPLATE + + # Allow CC to be a program name with arguments. + lt_save_CC="$CC" + lt_save_GCC=$GCC + CC=${FC-"f95"} + compiler=$CC + GCC=$ac_cv_fc_compiler_gnu + + _LT_TAGVAR(compiler, $1)=$CC + _LT_CC_BASENAME([$compiler]) + + if test -n "$compiler"; then + AC_MSG_CHECKING([if libtool supports shared libraries]) + AC_MSG_RESULT([$can_build_shared]) + + AC_MSG_CHECKING([whether to build shared libraries]) + test "$can_build_shared" = "no" && enable_shared=no + + # On AIX, shared libraries and static libraries use the same namespace, and + # are all built from PIC. + case $host_os in + aix3*) + test "$enable_shared" = yes && enable_static=no + if test -n "$RANLIB"; then + archive_cmds="$archive_cmds~\$RANLIB \$lib" + postinstall_cmds='$RANLIB $lib' + fi + ;; + aix[[4-9]]*) + if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then + test "$enable_shared" = yes && enable_static=no + fi + ;; + esac + AC_MSG_RESULT([$enable_shared]) + + AC_MSG_CHECKING([whether to build static libraries]) + # Make sure either enable_shared or enable_static is yes. + test "$enable_shared" = yes || enable_static=yes + AC_MSG_RESULT([$enable_static]) + + _LT_TAGVAR(GCC, $1)="$ac_cv_fc_compiler_gnu" + _LT_TAGVAR(LD, $1)="$LD" + + ## CAVEAT EMPTOR: + ## There is no encapsulation within the following macros, do not change + ## the running order or otherwise move them around unless you know exactly + ## what you are doing... + _LT_SYS_HIDDEN_LIBDEPS($1) + _LT_COMPILER_PIC($1) + _LT_COMPILER_C_O($1) + _LT_COMPILER_FILE_LOCKS($1) + _LT_LINKER_SHLIBS($1) + _LT_SYS_DYNAMIC_LINKER($1) + _LT_LINKER_HARDCODE_LIBPATH($1) + + _LT_CONFIG($1) + fi # test -n "$compiler" + + GCC=$lt_save_GCC + CC="$lt_save_CC" +fi # test "$_lt_disable_FC" != yes + +AC_LANG_POP +])# _LT_LANG_FC_CONFIG + + +# _LT_LANG_GCJ_CONFIG([TAG]) +# -------------------------- +# Ensure that the configuration variables for the GNU Java Compiler compiler +# are suitably defined. These variables are subsequently used by _LT_CONFIG +# to write the compiler configuration to `libtool'. +m4_defun([_LT_LANG_GCJ_CONFIG], +[AC_REQUIRE([LT_PROG_GCJ])dnl +AC_LANG_SAVE + +# Source file extension for Java test sources. +ac_ext=java + +# Object file extension for compiled Java test sources. +objext=o +_LT_TAGVAR(objext, $1)=$objext + +# Code to be used in simple compile tests +lt_simple_compile_test_code="class foo {}" + +# Code to be used in simple link tests +lt_simple_link_test_code='public class conftest { public static void main(String[[]] argv) {}; }' + +# ltmain only uses $CC for tagged configurations so make sure $CC is set. +_LT_TAG_COMPILER + +# save warnings/boilerplate of simple test code +_LT_COMPILER_BOILERPLATE +_LT_LINKER_BOILERPLATE + +# Allow CC to be a program name with arguments. +lt_save_CC="$CC" +lt_save_GCC=$GCC +GCC=yes +CC=${GCJ-"gcj"} +compiler=$CC +_LT_TAGVAR(compiler, $1)=$CC +_LT_TAGVAR(LD, $1)="$LD" +_LT_CC_BASENAME([$compiler]) + +# GCJ did not exist at the time GCC didn't implicitly link libc in. +_LT_TAGVAR(archive_cmds_need_lc, $1)=no + +_LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds + +## CAVEAT EMPTOR: +## There is no encapsulation within the following macros, do not change +## the running order or otherwise move them around unless you know exactly +## what you are doing... +if test -n "$compiler"; then + _LT_COMPILER_NO_RTTI($1) + _LT_COMPILER_PIC($1) + _LT_COMPILER_C_O($1) + _LT_COMPILER_FILE_LOCKS($1) + _LT_LINKER_SHLIBS($1) + _LT_LINKER_HARDCODE_LIBPATH($1) + + _LT_CONFIG($1) +fi + +AC_LANG_RESTORE + +GCC=$lt_save_GCC +CC="$lt_save_CC" +])# _LT_LANG_GCJ_CONFIG + + +# _LT_LANG_RC_CONFIG([TAG]) +# ------------------------- +# Ensure that the configuration variables for the Windows resource compiler +# are suitably defined. These variables are subsequently used by _LT_CONFIG +# to write the compiler configuration to `libtool'. +m4_defun([_LT_LANG_RC_CONFIG], +[AC_REQUIRE([LT_PROG_RC])dnl +AC_LANG_SAVE + +# Source file extension for RC test sources. +ac_ext=rc + +# Object file extension for compiled RC test sources. +objext=o +_LT_TAGVAR(objext, $1)=$objext + +# Code to be used in simple compile tests +lt_simple_compile_test_code='sample MENU { MENUITEM "&Soup", 100, CHECKED }' + +# Code to be used in simple link tests +lt_simple_link_test_code="$lt_simple_compile_test_code" + +# ltmain only uses $CC for tagged configurations so make sure $CC is set. +_LT_TAG_COMPILER + +# save warnings/boilerplate of simple test code +_LT_COMPILER_BOILERPLATE +_LT_LINKER_BOILERPLATE + +# Allow CC to be a program name with arguments. +lt_save_CC="$CC" +lt_save_GCC=$GCC +GCC= +CC=${RC-"windres"} +compiler=$CC +_LT_TAGVAR(compiler, $1)=$CC +_LT_CC_BASENAME([$compiler]) +_LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)=yes + +if test -n "$compiler"; then + : + _LT_CONFIG($1) +fi + +GCC=$lt_save_GCC +AC_LANG_RESTORE +CC="$lt_save_CC" +])# _LT_LANG_RC_CONFIG + + +# LT_PROG_GCJ +# ----------- +AC_DEFUN([LT_PROG_GCJ], +[m4_ifdef([AC_PROG_GCJ], [AC_PROG_GCJ], + [m4_ifdef([A][M_PROG_GCJ], [A][M_PROG_GCJ], + [AC_CHECK_TOOL(GCJ, gcj,) + test "x${GCJFLAGS+set}" = xset || GCJFLAGS="-g -O2" + AC_SUBST(GCJFLAGS)])])[]dnl +]) + +# Old name: +AU_ALIAS([LT_AC_PROG_GCJ], [LT_PROG_GCJ]) +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([LT_AC_PROG_GCJ], []) + + +# LT_PROG_RC +# ---------- +AC_DEFUN([LT_PROG_RC], +[AC_CHECK_TOOL(RC, windres,) +]) + +# Old name: +AU_ALIAS([LT_AC_PROG_RC], [LT_PROG_RC]) +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([LT_AC_PROG_RC], []) + + +# _LT_DECL_EGREP +# -------------- +# If we don't have a new enough Autoconf to choose the best grep +# available, choose the one first in the user's PATH. +m4_defun([_LT_DECL_EGREP], +[AC_REQUIRE([AC_PROG_EGREP])dnl +AC_REQUIRE([AC_PROG_FGREP])dnl +test -z "$GREP" && GREP=grep +_LT_DECL([], [GREP], [1], [A grep program that handles long lines]) +_LT_DECL([], [EGREP], [1], [An ERE matcher]) +_LT_DECL([], [FGREP], [1], [A literal string matcher]) +dnl Non-bleeding-edge autoconf doesn't subst GREP, so do it here too +AC_SUBST([GREP]) +]) + + +# _LT_DECL_OBJDUMP +# -------------- +# If we don't have a new enough Autoconf to choose the best objdump +# available, choose the one first in the user's PATH. +m4_defun([_LT_DECL_OBJDUMP], +[AC_CHECK_TOOL(OBJDUMP, objdump, false) +test -z "$OBJDUMP" && OBJDUMP=objdump +_LT_DECL([], [OBJDUMP], [1], [An object symbol dumper]) +AC_SUBST([OBJDUMP]) +]) + + +# _LT_DECL_SED +# ------------ +# Check for a fully-functional sed program, that truncates +# as few characters as possible. Prefer GNU sed if found. +m4_defun([_LT_DECL_SED], +[AC_PROG_SED +test -z "$SED" && SED=sed +Xsed="$SED -e 1s/^X//" +_LT_DECL([], [SED], [1], [A sed program that does not truncate output]) +_LT_DECL([], [Xsed], ["\$SED -e 1s/^X//"], + [Sed that helps us avoid accidentally triggering echo(1) options like -n]) +])# _LT_DECL_SED + +m4_ifndef([AC_PROG_SED], [ +############################################################ +# NOTE: This macro has been submitted for inclusion into # +# GNU Autoconf as AC_PROG_SED. When it is available in # +# a released version of Autoconf we should remove this # +# macro and use it instead. # +############################################################ + +m4_defun([AC_PROG_SED], +[AC_MSG_CHECKING([for a sed that does not truncate output]) +AC_CACHE_VAL(lt_cv_path_SED, +[# Loop through the user's path and test for sed and gsed. +# Then use that list of sed's as ones to test for truncation. +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for lt_ac_prog in sed gsed; do + for ac_exec_ext in '' $ac_executable_extensions; do + if $as_executable_p "$as_dir/$lt_ac_prog$ac_exec_ext"; then + lt_ac_sed_list="$lt_ac_sed_list $as_dir/$lt_ac_prog$ac_exec_ext" + fi + done + done +done +IFS=$as_save_IFS +lt_ac_max=0 +lt_ac_count=0 +# Add /usr/xpg4/bin/sed as it is typically found on Solaris +# along with /bin/sed that truncates output. +for lt_ac_sed in $lt_ac_sed_list /usr/xpg4/bin/sed; do + test ! -f $lt_ac_sed && continue + cat /dev/null > conftest.in + lt_ac_count=0 + echo $ECHO_N "0123456789$ECHO_C" >conftest.in + # Check for GNU sed and select it if it is found. + if "$lt_ac_sed" --version 2>&1 < /dev/null | grep 'GNU' > /dev/null; then + lt_cv_path_SED=$lt_ac_sed + break + fi + while true; do + cat conftest.in conftest.in >conftest.tmp + mv conftest.tmp conftest.in + cp conftest.in conftest.nl + echo >>conftest.nl + $lt_ac_sed -e 's/a$//' < conftest.nl >conftest.out || break + cmp -s conftest.out conftest.nl || break + # 10000 chars as input seems more than enough + test $lt_ac_count -gt 10 && break + lt_ac_count=`expr $lt_ac_count + 1` + if test $lt_ac_count -gt $lt_ac_max; then + lt_ac_max=$lt_ac_count + lt_cv_path_SED=$lt_ac_sed + fi + done +done +]) +SED=$lt_cv_path_SED +AC_SUBST([SED]) +AC_MSG_RESULT([$SED]) +])#AC_PROG_SED +])#m4_ifndef + +# Old name: +AU_ALIAS([LT_AC_PROG_SED], [AC_PROG_SED]) +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([LT_AC_PROG_SED], []) + + +# _LT_CHECK_SHELL_FEATURES +# ------------------------ +# Find out whether the shell is Bourne or XSI compatible, +# or has some other useful features. +m4_defun([_LT_CHECK_SHELL_FEATURES], +[AC_MSG_CHECKING([whether the shell understands some XSI constructs]) +# Try some XSI features +xsi_shell=no +( _lt_dummy="a/b/c" + test "${_lt_dummy##*/},${_lt_dummy%/*},"${_lt_dummy%"$_lt_dummy"}, \ + = c,a/b,, \ + && eval 'test $(( 1 + 1 )) -eq 2 \ + && test "${#_lt_dummy}" -eq 5' ) >/dev/null 2>&1 \ + && xsi_shell=yes +AC_MSG_RESULT([$xsi_shell]) +_LT_CONFIG_LIBTOOL_INIT([xsi_shell='$xsi_shell']) + +AC_MSG_CHECKING([whether the shell understands "+="]) +lt_shell_append=no +( foo=bar; set foo baz; eval "$[1]+=\$[2]" && test "$foo" = barbaz ) \ + >/dev/null 2>&1 \ + && lt_shell_append=yes +AC_MSG_RESULT([$lt_shell_append]) +_LT_CONFIG_LIBTOOL_INIT([lt_shell_append='$lt_shell_append']) + +if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then + lt_unset=unset +else + lt_unset=false +fi +_LT_DECL([], [lt_unset], [0], [whether the shell understands "unset"])dnl + +# test EBCDIC or ASCII +case `echo X|tr X '\101'` in + A) # ASCII based system + # \n is not interpreted correctly by Solaris 8 /usr/ucb/tr + lt_SP2NL='tr \040 \012' + lt_NL2SP='tr \015\012 \040\040' + ;; + *) # EBCDIC based system + lt_SP2NL='tr \100 \n' + lt_NL2SP='tr \r\n \100\100' + ;; +esac +_LT_DECL([SP2NL], [lt_SP2NL], [1], [turn spaces into newlines])dnl +_LT_DECL([NL2SP], [lt_NL2SP], [1], [turn newlines into spaces])dnl +])# _LT_CHECK_SHELL_FEATURES + + +# _LT_PROG_XSI_SHELLFNS +# --------------------- +# Bourne and XSI compatible variants of some useful shell functions. +m4_defun([_LT_PROG_XSI_SHELLFNS], +[case $xsi_shell in + yes) + cat << \_LT_EOF >> "$cfgfile" + +# func_dirname file append nondir_replacement +# Compute the dirname of FILE. If nonempty, add APPEND to the result, +# otherwise set result to NONDIR_REPLACEMENT. +func_dirname () +{ + case ${1} in + */*) func_dirname_result="${1%/*}${2}" ;; + * ) func_dirname_result="${3}" ;; + esac +} + +# func_basename file +func_basename () +{ + func_basename_result="${1##*/}" +} + +# func_dirname_and_basename file append nondir_replacement +# perform func_basename and func_dirname in a single function +# call: +# dirname: Compute the dirname of FILE. If nonempty, +# add APPEND to the result, otherwise set result +# to NONDIR_REPLACEMENT. +# value returned in "$func_dirname_result" +# basename: Compute filename of FILE. +# value retuned in "$func_basename_result" +# Implementation must be kept synchronized with func_dirname +# and func_basename. For efficiency, we do not delegate to +# those functions but instead duplicate the functionality here. +func_dirname_and_basename () +{ + case ${1} in + */*) func_dirname_result="${1%/*}${2}" ;; + * ) func_dirname_result="${3}" ;; + esac + func_basename_result="${1##*/}" +} + +# func_stripname prefix suffix name +# strip PREFIX and SUFFIX off of NAME. +# PREFIX and SUFFIX must not contain globbing or regex special +# characters, hashes, percent signs, but SUFFIX may contain a leading +# dot (in which case that matches only a dot). +func_stripname () +{ + # pdksh 5.2.14 does not do ${X%$Y} correctly if both X and Y are + # positional parameters, so assign one to ordinary parameter first. + func_stripname_result=${3} + func_stripname_result=${func_stripname_result#"${1}"} + func_stripname_result=${func_stripname_result%"${2}"} +} + +# func_opt_split +func_opt_split () +{ + func_opt_split_opt=${1%%=*} + func_opt_split_arg=${1#*=} +} + +# func_lo2o object +func_lo2o () +{ + case ${1} in + *.lo) func_lo2o_result=${1%.lo}.${objext} ;; + *) func_lo2o_result=${1} ;; + esac +} + +# func_xform libobj-or-source +func_xform () +{ + func_xform_result=${1%.*}.lo +} + +# func_arith arithmetic-term... +func_arith () +{ + func_arith_result=$(( $[*] )) +} + +# func_len string +# STRING may not start with a hyphen. +func_len () +{ + func_len_result=${#1} +} + +_LT_EOF + ;; + *) # Bourne compatible functions. + cat << \_LT_EOF >> "$cfgfile" + +# func_dirname file append nondir_replacement +# Compute the dirname of FILE. If nonempty, add APPEND to the result, +# otherwise set result to NONDIR_REPLACEMENT. +func_dirname () +{ + # Extract subdirectory from the argument. + func_dirname_result=`$ECHO "X${1}" | $Xsed -e "$dirname"` + if test "X$func_dirname_result" = "X${1}"; then + func_dirname_result="${3}" + else + func_dirname_result="$func_dirname_result${2}" + fi +} + +# func_basename file +func_basename () +{ + func_basename_result=`$ECHO "X${1}" | $Xsed -e "$basename"` +} + +dnl func_dirname_and_basename +dnl A portable version of this function is already defined in general.m4sh +dnl so there is no need for it here. + +# func_stripname prefix suffix name +# strip PREFIX and SUFFIX off of NAME. +# PREFIX and SUFFIX must not contain globbing or regex special +# characters, hashes, percent signs, but SUFFIX may contain a leading +# dot (in which case that matches only a dot). +# func_strip_suffix prefix name +func_stripname () +{ + case ${2} in + .*) func_stripname_result=`$ECHO "X${3}" \ + | $Xsed -e "s%^${1}%%" -e "s%\\\\${2}\$%%"`;; + *) func_stripname_result=`$ECHO "X${3}" \ + | $Xsed -e "s%^${1}%%" -e "s%${2}\$%%"`;; + esac +} + +# sed scripts: +my_sed_long_opt='1s/^\(-[[^=]]*\)=.*/\1/;q' +my_sed_long_arg='1s/^-[[^=]]*=//' + +# func_opt_split +func_opt_split () +{ + func_opt_split_opt=`$ECHO "X${1}" | $Xsed -e "$my_sed_long_opt"` + func_opt_split_arg=`$ECHO "X${1}" | $Xsed -e "$my_sed_long_arg"` +} + +# func_lo2o object +func_lo2o () +{ + func_lo2o_result=`$ECHO "X${1}" | $Xsed -e "$lo2o"` +} + +# func_xform libobj-or-source +func_xform () +{ + func_xform_result=`$ECHO "X${1}" | $Xsed -e 's/\.[[^.]]*$/.lo/'` +} + +# func_arith arithmetic-term... +func_arith () +{ + func_arith_result=`expr "$[@]"` +} + +# func_len string +# STRING may not start with a hyphen. +func_len () +{ + func_len_result=`expr "$[1]" : ".*" 2>/dev/null || echo $max_cmd_len` +} + +_LT_EOF +esac + +case $lt_shell_append in + yes) + cat << \_LT_EOF >> "$cfgfile" + +# func_append var value +# Append VALUE to the end of shell variable VAR. +func_append () +{ + eval "$[1]+=\$[2]" +} +_LT_EOF + ;; + *) + cat << \_LT_EOF >> "$cfgfile" + +# func_append var value +# Append VALUE to the end of shell variable VAR. +func_append () +{ + eval "$[1]=\$$[1]\$[2]" +} + +_LT_EOF + ;; + esac +]) Added: python/trunk/Modules/_ctypes/libffi/m4/ltoptions.m4 ============================================================================== --- (empty file) +++ python/trunk/Modules/_ctypes/libffi/m4/ltoptions.m4 Mon Mar 15 01:02:36 2010 @@ -0,0 +1,368 @@ +# Helper functions for option handling. -*- Autoconf -*- +# +# Copyright (C) 2004, 2005, 2007, 2008 Free Software Foundation, Inc. +# Written by Gary V. Vaughan, 2004 +# +# This file is free software; the Free Software Foundation gives +# unlimited permission to copy and/or distribute it, with or without +# modifications, as long as this notice is preserved. + +# serial 6 ltoptions.m4 + +# This is to help aclocal find these macros, as it can't see m4_define. +AC_DEFUN([LTOPTIONS_VERSION], [m4_if([1])]) + + +# _LT_MANGLE_OPTION(MACRO-NAME, OPTION-NAME) +# ------------------------------------------ +m4_define([_LT_MANGLE_OPTION], +[[_LT_OPTION_]m4_bpatsubst($1__$2, [[^a-zA-Z0-9_]], [_])]) + + +# _LT_SET_OPTION(MACRO-NAME, OPTION-NAME) +# --------------------------------------- +# Set option OPTION-NAME for macro MACRO-NAME, and if there is a +# matching handler defined, dispatch to it. Other OPTION-NAMEs are +# saved as a flag. +m4_define([_LT_SET_OPTION], +[m4_define(_LT_MANGLE_OPTION([$1], [$2]))dnl +m4_ifdef(_LT_MANGLE_DEFUN([$1], [$2]), + _LT_MANGLE_DEFUN([$1], [$2]), + [m4_warning([Unknown $1 option `$2'])])[]dnl +]) + + +# _LT_IF_OPTION(MACRO-NAME, OPTION-NAME, IF-SET, [IF-NOT-SET]) +# ------------------------------------------------------------ +# Execute IF-SET if OPTION is set, IF-NOT-SET otherwise. +m4_define([_LT_IF_OPTION], +[m4_ifdef(_LT_MANGLE_OPTION([$1], [$2]), [$3], [$4])]) + + +# _LT_UNLESS_OPTIONS(MACRO-NAME, OPTION-LIST, IF-NOT-SET) +# ------------------------------------------------------- +# Execute IF-NOT-SET unless all options in OPTION-LIST for MACRO-NAME +# are set. +m4_define([_LT_UNLESS_OPTIONS], +[m4_foreach([_LT_Option], m4_split(m4_normalize([$2])), + [m4_ifdef(_LT_MANGLE_OPTION([$1], _LT_Option), + [m4_define([$0_found])])])[]dnl +m4_ifdef([$0_found], [m4_undefine([$0_found])], [$3 +])[]dnl +]) + + +# _LT_SET_OPTIONS(MACRO-NAME, OPTION-LIST) +# ---------------------------------------- +# OPTION-LIST is a space-separated list of Libtool options associated +# with MACRO-NAME. If any OPTION has a matching handler declared with +# LT_OPTION_DEFINE, dispatch to that macro; otherwise complain about +# the unknown option and exit. +m4_defun([_LT_SET_OPTIONS], +[# Set options +m4_foreach([_LT_Option], m4_split(m4_normalize([$2])), + [_LT_SET_OPTION([$1], _LT_Option)]) + +m4_if([$1],[LT_INIT],[ + dnl + dnl Simply set some default values (i.e off) if boolean options were not + dnl specified: + _LT_UNLESS_OPTIONS([LT_INIT], [dlopen], [enable_dlopen=no + ]) + _LT_UNLESS_OPTIONS([LT_INIT], [win32-dll], [enable_win32_dll=no + ]) + dnl + dnl If no reference was made to various pairs of opposing options, then + dnl we run the default mode handler for the pair. For example, if neither + dnl `shared' nor `disable-shared' was passed, we enable building of shared + dnl archives by default: + _LT_UNLESS_OPTIONS([LT_INIT], [shared disable-shared], [_LT_ENABLE_SHARED]) + _LT_UNLESS_OPTIONS([LT_INIT], [static disable-static], [_LT_ENABLE_STATIC]) + _LT_UNLESS_OPTIONS([LT_INIT], [pic-only no-pic], [_LT_WITH_PIC]) + _LT_UNLESS_OPTIONS([LT_INIT], [fast-install disable-fast-install], + [_LT_ENABLE_FAST_INSTALL]) + ]) +])# _LT_SET_OPTIONS + + +## --------------------------------- ## +## Macros to handle LT_INIT options. ## +## --------------------------------- ## + +# _LT_MANGLE_DEFUN(MACRO-NAME, OPTION-NAME) +# ----------------------------------------- +m4_define([_LT_MANGLE_DEFUN], +[[_LT_OPTION_DEFUN_]m4_bpatsubst(m4_toupper([$1__$2]), [[^A-Z0-9_]], [_])]) + + +# LT_OPTION_DEFINE(MACRO-NAME, OPTION-NAME, CODE) +# ----------------------------------------------- +m4_define([LT_OPTION_DEFINE], +[m4_define(_LT_MANGLE_DEFUN([$1], [$2]), [$3])[]dnl +])# LT_OPTION_DEFINE + + +# dlopen +# ------ +LT_OPTION_DEFINE([LT_INIT], [dlopen], [enable_dlopen=yes +]) + +AU_DEFUN([AC_LIBTOOL_DLOPEN], +[_LT_SET_OPTION([LT_INIT], [dlopen]) +AC_DIAGNOSE([obsolete], +[$0: Remove this warning and the call to _LT_SET_OPTION when you +put the `dlopen' option into LT_INIT's first parameter.]) +]) + +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([AC_LIBTOOL_DLOPEN], []) + + +# win32-dll +# --------- +# Declare package support for building win32 dll's. +LT_OPTION_DEFINE([LT_INIT], [win32-dll], +[enable_win32_dll=yes + +case $host in +*-*-cygwin* | *-*-mingw* | *-*-pw32* | *-cegcc*) + AC_CHECK_TOOL(AS, as, false) + AC_CHECK_TOOL(DLLTOOL, dlltool, false) + AC_CHECK_TOOL(OBJDUMP, objdump, false) + ;; +esac + +test -z "$AS" && AS=as +_LT_DECL([], [AS], [0], [Assembler program])dnl + +test -z "$DLLTOOL" && DLLTOOL=dlltool +_LT_DECL([], [DLLTOOL], [0], [DLL creation program])dnl + +test -z "$OBJDUMP" && OBJDUMP=objdump +_LT_DECL([], [OBJDUMP], [0], [Object dumper program])dnl +])# win32-dll + +AU_DEFUN([AC_LIBTOOL_WIN32_DLL], +[AC_REQUIRE([AC_CANONICAL_HOST])dnl +_LT_SET_OPTION([LT_INIT], [win32-dll]) +AC_DIAGNOSE([obsolete], +[$0: Remove this warning and the call to _LT_SET_OPTION when you +put the `win32-dll' option into LT_INIT's first parameter.]) +]) + +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([AC_LIBTOOL_WIN32_DLL], []) + + +# _LT_ENABLE_SHARED([DEFAULT]) +# ---------------------------- +# implement the --enable-shared flag, and supports the `shared' and +# `disable-shared' LT_INIT options. +# DEFAULT is either `yes' or `no'. If omitted, it defaults to `yes'. +m4_define([_LT_ENABLE_SHARED], +[m4_define([_LT_ENABLE_SHARED_DEFAULT], [m4_if($1, no, no, yes)])dnl +AC_ARG_ENABLE([shared], + [AS_HELP_STRING([--enable-shared@<:@=PKGS@:>@], + [build shared libraries @<:@default=]_LT_ENABLE_SHARED_DEFAULT[@:>@])], + [p=${PACKAGE-default} + case $enableval in + yes) enable_shared=yes ;; + no) enable_shared=no ;; + *) + enable_shared=no + # Look at the argument we got. We use all the common list separators. + lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," + for pkg in $enableval; do + IFS="$lt_save_ifs" + if test "X$pkg" = "X$p"; then + enable_shared=yes + fi + done + IFS="$lt_save_ifs" + ;; + esac], + [enable_shared=]_LT_ENABLE_SHARED_DEFAULT) + + _LT_DECL([build_libtool_libs], [enable_shared], [0], + [Whether or not to build shared libraries]) +])# _LT_ENABLE_SHARED + +LT_OPTION_DEFINE([LT_INIT], [shared], [_LT_ENABLE_SHARED([yes])]) +LT_OPTION_DEFINE([LT_INIT], [disable-shared], [_LT_ENABLE_SHARED([no])]) + +# Old names: +AC_DEFUN([AC_ENABLE_SHARED], +[_LT_SET_OPTION([LT_INIT], m4_if([$1], [no], [disable-])[shared]) +]) + +AC_DEFUN([AC_DISABLE_SHARED], +[_LT_SET_OPTION([LT_INIT], [disable-shared]) +]) + +AU_DEFUN([AM_ENABLE_SHARED], [AC_ENABLE_SHARED($@)]) +AU_DEFUN([AM_DISABLE_SHARED], [AC_DISABLE_SHARED($@)]) + +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([AM_ENABLE_SHARED], []) +dnl AC_DEFUN([AM_DISABLE_SHARED], []) + + + +# _LT_ENABLE_STATIC([DEFAULT]) +# ---------------------------- +# implement the --enable-static flag, and support the `static' and +# `disable-static' LT_INIT options. +# DEFAULT is either `yes' or `no'. If omitted, it defaults to `yes'. +m4_define([_LT_ENABLE_STATIC], +[m4_define([_LT_ENABLE_STATIC_DEFAULT], [m4_if($1, no, no, yes)])dnl +AC_ARG_ENABLE([static], + [AS_HELP_STRING([--enable-static@<:@=PKGS@:>@], + [build static libraries @<:@default=]_LT_ENABLE_STATIC_DEFAULT[@:>@])], + [p=${PACKAGE-default} + case $enableval in + yes) enable_static=yes ;; + no) enable_static=no ;; + *) + enable_static=no + # Look at the argument we got. We use all the common list separators. + lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," + for pkg in $enableval; do + IFS="$lt_save_ifs" + if test "X$pkg" = "X$p"; then + enable_static=yes + fi + done + IFS="$lt_save_ifs" + ;; + esac], + [enable_static=]_LT_ENABLE_STATIC_DEFAULT) + + _LT_DECL([build_old_libs], [enable_static], [0], + [Whether or not to build static libraries]) +])# _LT_ENABLE_STATIC + +LT_OPTION_DEFINE([LT_INIT], [static], [_LT_ENABLE_STATIC([yes])]) +LT_OPTION_DEFINE([LT_INIT], [disable-static], [_LT_ENABLE_STATIC([no])]) + +# Old names: +AC_DEFUN([AC_ENABLE_STATIC], +[_LT_SET_OPTION([LT_INIT], m4_if([$1], [no], [disable-])[static]) +]) + +AC_DEFUN([AC_DISABLE_STATIC], +[_LT_SET_OPTION([LT_INIT], [disable-static]) +]) + +AU_DEFUN([AM_ENABLE_STATIC], [AC_ENABLE_STATIC($@)]) +AU_DEFUN([AM_DISABLE_STATIC], [AC_DISABLE_STATIC($@)]) + +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([AM_ENABLE_STATIC], []) +dnl AC_DEFUN([AM_DISABLE_STATIC], []) + + + +# _LT_ENABLE_FAST_INSTALL([DEFAULT]) +# ---------------------------------- +# implement the --enable-fast-install flag, and support the `fast-install' +# and `disable-fast-install' LT_INIT options. +# DEFAULT is either `yes' or `no'. If omitted, it defaults to `yes'. +m4_define([_LT_ENABLE_FAST_INSTALL], +[m4_define([_LT_ENABLE_FAST_INSTALL_DEFAULT], [m4_if($1, no, no, yes)])dnl +AC_ARG_ENABLE([fast-install], + [AS_HELP_STRING([--enable-fast-install@<:@=PKGS@:>@], + [optimize for fast installation @<:@default=]_LT_ENABLE_FAST_INSTALL_DEFAULT[@:>@])], + [p=${PACKAGE-default} + case $enableval in + yes) enable_fast_install=yes ;; + no) enable_fast_install=no ;; + *) + enable_fast_install=no + # Look at the argument we got. We use all the common list separators. + lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," + for pkg in $enableval; do + IFS="$lt_save_ifs" + if test "X$pkg" = "X$p"; then + enable_fast_install=yes + fi + done + IFS="$lt_save_ifs" + ;; + esac], + [enable_fast_install=]_LT_ENABLE_FAST_INSTALL_DEFAULT) + +_LT_DECL([fast_install], [enable_fast_install], [0], + [Whether or not to optimize for fast installation])dnl +])# _LT_ENABLE_FAST_INSTALL + +LT_OPTION_DEFINE([LT_INIT], [fast-install], [_LT_ENABLE_FAST_INSTALL([yes])]) +LT_OPTION_DEFINE([LT_INIT], [disable-fast-install], [_LT_ENABLE_FAST_INSTALL([no])]) + +# Old names: +AU_DEFUN([AC_ENABLE_FAST_INSTALL], +[_LT_SET_OPTION([LT_INIT], m4_if([$1], [no], [disable-])[fast-install]) +AC_DIAGNOSE([obsolete], +[$0: Remove this warning and the call to _LT_SET_OPTION when you put +the `fast-install' option into LT_INIT's first parameter.]) +]) + +AU_DEFUN([AC_DISABLE_FAST_INSTALL], +[_LT_SET_OPTION([LT_INIT], [disable-fast-install]) +AC_DIAGNOSE([obsolete], +[$0: Remove this warning and the call to _LT_SET_OPTION when you put +the `disable-fast-install' option into LT_INIT's first parameter.]) +]) + +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([AC_ENABLE_FAST_INSTALL], []) +dnl AC_DEFUN([AM_DISABLE_FAST_INSTALL], []) + + +# _LT_WITH_PIC([MODE]) +# -------------------- +# implement the --with-pic flag, and support the `pic-only' and `no-pic' +# LT_INIT options. +# MODE is either `yes' or `no'. If omitted, it defaults to `both'. +m4_define([_LT_WITH_PIC], +[AC_ARG_WITH([pic], + [AS_HELP_STRING([--with-pic], + [try to use only PIC/non-PIC objects @<:@default=use both@:>@])], + [pic_mode="$withval"], + [pic_mode=default]) + +test -z "$pic_mode" && pic_mode=m4_default([$1], [default]) + +_LT_DECL([], [pic_mode], [0], [What type of objects to build])dnl +])# _LT_WITH_PIC + +LT_OPTION_DEFINE([LT_INIT], [pic-only], [_LT_WITH_PIC([yes])]) +LT_OPTION_DEFINE([LT_INIT], [no-pic], [_LT_WITH_PIC([no])]) + +# Old name: +AU_DEFUN([AC_LIBTOOL_PICMODE], +[_LT_SET_OPTION([LT_INIT], [pic-only]) +AC_DIAGNOSE([obsolete], +[$0: Remove this warning and the call to _LT_SET_OPTION when you +put the `pic-only' option into LT_INIT's first parameter.]) +]) + +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([AC_LIBTOOL_PICMODE], []) + +## ----------------- ## +## LTDL_INIT Options ## +## ----------------- ## + +m4_define([_LTDL_MODE], []) +LT_OPTION_DEFINE([LTDL_INIT], [nonrecursive], + [m4_define([_LTDL_MODE], [nonrecursive])]) +LT_OPTION_DEFINE([LTDL_INIT], [recursive], + [m4_define([_LTDL_MODE], [recursive])]) +LT_OPTION_DEFINE([LTDL_INIT], [subproject], + [m4_define([_LTDL_MODE], [subproject])]) + +m4_define([_LTDL_TYPE], []) +LT_OPTION_DEFINE([LTDL_INIT], [installable], + [m4_define([_LTDL_TYPE], [installable])]) +LT_OPTION_DEFINE([LTDL_INIT], [convenience], + [m4_define([_LTDL_TYPE], [convenience])]) Added: python/trunk/Modules/_ctypes/libffi/m4/ltsugar.m4 ============================================================================== --- (empty file) +++ python/trunk/Modules/_ctypes/libffi/m4/ltsugar.m4 Mon Mar 15 01:02:36 2010 @@ -0,0 +1,123 @@ +# ltsugar.m4 -- libtool m4 base layer. -*-Autoconf-*- +# +# Copyright (C) 2004, 2005, 2007, 2008 Free Software Foundation, Inc. +# Written by Gary V. Vaughan, 2004 +# +# This file is free software; the Free Software Foundation gives +# unlimited permission to copy and/or distribute it, with or without +# modifications, as long as this notice is preserved. + +# serial 6 ltsugar.m4 + +# This is to help aclocal find these macros, as it can't see m4_define. +AC_DEFUN([LTSUGAR_VERSION], [m4_if([0.1])]) + + +# lt_join(SEP, ARG1, [ARG2...]) +# ----------------------------- +# Produce ARG1SEPARG2...SEPARGn, omitting [] arguments and their +# associated separator. +# Needed until we can rely on m4_join from Autoconf 2.62, since all earlier +# versions in m4sugar had bugs. +m4_define([lt_join], +[m4_if([$#], [1], [], + [$#], [2], [[$2]], + [m4_if([$2], [], [], [[$2]_])$0([$1], m4_shift(m4_shift($@)))])]) +m4_define([_lt_join], +[m4_if([$#$2], [2], [], + [m4_if([$2], [], [], [[$1$2]])$0([$1], m4_shift(m4_shift($@)))])]) + + +# lt_car(LIST) +# lt_cdr(LIST) +# ------------ +# Manipulate m4 lists. +# These macros are necessary as long as will still need to support +# Autoconf-2.59 which quotes differently. +m4_define([lt_car], [[$1]]) +m4_define([lt_cdr], +[m4_if([$#], 0, [m4_fatal([$0: cannot be called without arguments])], + [$#], 1, [], + [m4_dquote(m4_shift($@))])]) +m4_define([lt_unquote], $1) + + +# lt_append(MACRO-NAME, STRING, [SEPARATOR]) +# ------------------------------------------ +# Redefine MACRO-NAME to hold its former content plus `SEPARATOR'`STRING'. +# Note that neither SEPARATOR nor STRING are expanded; they are appended +# to MACRO-NAME as is (leaving the expansion for when MACRO-NAME is invoked). +# No SEPARATOR is output if MACRO-NAME was previously undefined (different +# than defined and empty). +# +# This macro is needed until we can rely on Autoconf 2.62, since earlier +# versions of m4sugar mistakenly expanded SEPARATOR but not STRING. +m4_define([lt_append], +[m4_define([$1], + m4_ifdef([$1], [m4_defn([$1])[$3]])[$2])]) + + + +# lt_combine(SEP, PREFIX-LIST, INFIX, SUFFIX1, [SUFFIX2...]) +# ---------------------------------------------------------- +# Produce a SEP delimited list of all paired combinations of elements of +# PREFIX-LIST with SUFFIX1 through SUFFIXn. Each element of the list +# has the form PREFIXmINFIXSUFFIXn. +# Needed until we can rely on m4_combine added in Autoconf 2.62. +m4_define([lt_combine], +[m4_if(m4_eval([$# > 3]), [1], + [m4_pushdef([_Lt_sep], [m4_define([_Lt_sep], m4_defn([lt_car]))])]]dnl +[[m4_foreach([_Lt_prefix], [$2], + [m4_foreach([_Lt_suffix], + ]m4_dquote(m4_dquote(m4_shift(m4_shift(m4_shift($@)))))[, + [_Lt_sep([$1])[]m4_defn([_Lt_prefix])[$3]m4_defn([_Lt_suffix])])])])]) + + +# lt_if_append_uniq(MACRO-NAME, VARNAME, [SEPARATOR], [UNIQ], [NOT-UNIQ]) +# ----------------------------------------------------------------------- +# Iff MACRO-NAME does not yet contain VARNAME, then append it (delimited +# by SEPARATOR if supplied) and expand UNIQ, else NOT-UNIQ. +m4_define([lt_if_append_uniq], +[m4_ifdef([$1], + [m4_if(m4_index([$3]m4_defn([$1])[$3], [$3$2$3]), [-1], + [lt_append([$1], [$2], [$3])$4], + [$5])], + [lt_append([$1], [$2], [$3])$4])]) + + +# lt_dict_add(DICT, KEY, VALUE) +# ----------------------------- +m4_define([lt_dict_add], +[m4_define([$1($2)], [$3])]) + + +# lt_dict_add_subkey(DICT, KEY, SUBKEY, VALUE) +# -------------------------------------------- +m4_define([lt_dict_add_subkey], +[m4_define([$1($2:$3)], [$4])]) + + +# lt_dict_fetch(DICT, KEY, [SUBKEY]) +# ---------------------------------- +m4_define([lt_dict_fetch], +[m4_ifval([$3], + m4_ifdef([$1($2:$3)], [m4_defn([$1($2:$3)])]), + m4_ifdef([$1($2)], [m4_defn([$1($2)])]))]) + + +# lt_if_dict_fetch(DICT, KEY, [SUBKEY], VALUE, IF-TRUE, [IF-FALSE]) +# ----------------------------------------------------------------- +m4_define([lt_if_dict_fetch], +[m4_if(lt_dict_fetch([$1], [$2], [$3]), [$4], + [$5], + [$6])]) + + +# lt_dict_filter(DICT, [SUBKEY], VALUE, [SEPARATOR], KEY, [...]) +# -------------------------------------------------------------- +m4_define([lt_dict_filter], +[m4_if([$5], [], [], + [lt_join(m4_quote(m4_default([$4], [[, ]])), + lt_unquote(m4_split(m4_normalize(m4_foreach(_Lt_key, lt_car([m4_shiftn(4, $@)]), + [lt_if_dict_fetch([$1], _Lt_key, [$2], [$3], [_Lt_key ])])))))])[]dnl +]) Added: python/trunk/Modules/_ctypes/libffi/m4/ltversion.m4 ============================================================================== --- (empty file) +++ python/trunk/Modules/_ctypes/libffi/m4/ltversion.m4 Mon Mar 15 01:02:36 2010 @@ -0,0 +1,23 @@ +# ltversion.m4 -- version numbers -*- Autoconf -*- +# +# Copyright (C) 2004 Free Software Foundation, Inc. +# Written by Scott James Remnant, 2004 +# +# This file is free software; the Free Software Foundation gives +# unlimited permission to copy and/or distribute it, with or without +# modifications, as long as this notice is preserved. + +# Generated from ltversion.in. + +# serial 3012 ltversion.m4 +# This file is part of GNU Libtool + +m4_define([LT_PACKAGE_VERSION], [2.2.6]) +m4_define([LT_PACKAGE_REVISION], [1.3012]) + +AC_DEFUN([LTVERSION_VERSION], +[macro_version='2.2.6' +macro_revision='1.3012' +_LT_DECL(, macro_version, 0, [Which release of libtool.m4 was used?]) +_LT_DECL(, macro_revision, 0) +]) Added: python/trunk/Modules/_ctypes/libffi/m4/lt~obsolete.m4 ============================================================================== --- (empty file) +++ python/trunk/Modules/_ctypes/libffi/m4/lt~obsolete.m4 Mon Mar 15 01:02:36 2010 @@ -0,0 +1,92 @@ +# lt~obsolete.m4 -- aclocal satisfying obsolete definitions. -*-Autoconf-*- +# +# Copyright (C) 2004, 2005, 2007 Free Software Foundation, Inc. +# Written by Scott James Remnant, 2004. +# +# This file is free software; the Free Software Foundation gives +# unlimited permission to copy and/or distribute it, with or without +# modifications, as long as this notice is preserved. + +# serial 4 lt~obsolete.m4 + +# These exist entirely to fool aclocal when bootstrapping libtool. +# +# In the past libtool.m4 has provided macros via AC_DEFUN (or AU_DEFUN) +# which have later been changed to m4_define as they aren't part of the +# exported API, or moved to Autoconf or Automake where they belong. +# +# The trouble is, aclocal is a bit thick. It'll see the old AC_DEFUN +# in /usr/share/aclocal/libtool.m4 and remember it, then when it sees us +# using a macro with the same name in our local m4/libtool.m4 it'll +# pull the old libtool.m4 in (it doesn't see our shiny new m4_define +# and doesn't know about Autoconf macros at all.) +# +# So we provide this file, which has a silly filename so it's always +# included after everything else. This provides aclocal with the +# AC_DEFUNs it wants, but when m4 processes it, it doesn't do anything +# because those macros already exist, or will be overwritten later. +# We use AC_DEFUN over AU_DEFUN for compatibility with aclocal-1.6. +# +# Anytime we withdraw an AC_DEFUN or AU_DEFUN, remember to add it here. +# Yes, that means every name once taken will need to remain here until +# we give up compatibility with versions before 1.7, at which point +# we need to keep only those names which we still refer to. + +# This is to help aclocal find these macros, as it can't see m4_define. +AC_DEFUN([LTOBSOLETE_VERSION], [m4_if([1])]) + +m4_ifndef([AC_LIBTOOL_LINKER_OPTION], [AC_DEFUN([AC_LIBTOOL_LINKER_OPTION])]) +m4_ifndef([AC_PROG_EGREP], [AC_DEFUN([AC_PROG_EGREP])]) +m4_ifndef([_LT_AC_PROG_ECHO_BACKSLASH], [AC_DEFUN([_LT_AC_PROG_ECHO_BACKSLASH])]) +m4_ifndef([_LT_AC_SHELL_INIT], [AC_DEFUN([_LT_AC_SHELL_INIT])]) +m4_ifndef([_LT_AC_SYS_LIBPATH_AIX], [AC_DEFUN([_LT_AC_SYS_LIBPATH_AIX])]) +m4_ifndef([_LT_PROG_LTMAIN], [AC_DEFUN([_LT_PROG_LTMAIN])]) +m4_ifndef([_LT_AC_TAGVAR], [AC_DEFUN([_LT_AC_TAGVAR])]) +m4_ifndef([AC_LTDL_ENABLE_INSTALL], [AC_DEFUN([AC_LTDL_ENABLE_INSTALL])]) +m4_ifndef([AC_LTDL_PREOPEN], [AC_DEFUN([AC_LTDL_PREOPEN])]) +m4_ifndef([_LT_AC_SYS_COMPILER], [AC_DEFUN([_LT_AC_SYS_COMPILER])]) +m4_ifndef([_LT_AC_LOCK], [AC_DEFUN([_LT_AC_LOCK])]) +m4_ifndef([AC_LIBTOOL_SYS_OLD_ARCHIVE], [AC_DEFUN([AC_LIBTOOL_SYS_OLD_ARCHIVE])]) +m4_ifndef([_LT_AC_TRY_DLOPEN_SELF], [AC_DEFUN([_LT_AC_TRY_DLOPEN_SELF])]) +m4_ifndef([AC_LIBTOOL_PROG_CC_C_O], [AC_DEFUN([AC_LIBTOOL_PROG_CC_C_O])]) +m4_ifndef([AC_LIBTOOL_SYS_HARD_LINK_LOCKS], [AC_DEFUN([AC_LIBTOOL_SYS_HARD_LINK_LOCKS])]) +m4_ifndef([AC_LIBTOOL_OBJDIR], [AC_DEFUN([AC_LIBTOOL_OBJDIR])]) +m4_ifndef([AC_LTDL_OBJDIR], [AC_DEFUN([AC_LTDL_OBJDIR])]) +m4_ifndef([AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH], [AC_DEFUN([AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH])]) +m4_ifndef([AC_LIBTOOL_SYS_LIB_STRIP], [AC_DEFUN([AC_LIBTOOL_SYS_LIB_STRIP])]) +m4_ifndef([AC_PATH_MAGIC], [AC_DEFUN([AC_PATH_MAGIC])]) +m4_ifndef([AC_PROG_LD_GNU], [AC_DEFUN([AC_PROG_LD_GNU])]) +m4_ifndef([AC_PROG_LD_RELOAD_FLAG], [AC_DEFUN([AC_PROG_LD_RELOAD_FLAG])]) +m4_ifndef([AC_DEPLIBS_CHECK_METHOD], [AC_DEFUN([AC_DEPLIBS_CHECK_METHOD])]) +m4_ifndef([AC_LIBTOOL_PROG_COMPILER_NO_RTTI], [AC_DEFUN([AC_LIBTOOL_PROG_COMPILER_NO_RTTI])]) +m4_ifndef([AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE], [AC_DEFUN([AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE])]) +m4_ifndef([AC_LIBTOOL_PROG_COMPILER_PIC], [AC_DEFUN([AC_LIBTOOL_PROG_COMPILER_PIC])]) +m4_ifndef([AC_LIBTOOL_PROG_LD_SHLIBS], [AC_DEFUN([AC_LIBTOOL_PROG_LD_SHLIBS])]) +m4_ifndef([AC_LIBTOOL_POSTDEP_PREDEP], [AC_DEFUN([AC_LIBTOOL_POSTDEP_PREDEP])]) +m4_ifndef([LT_AC_PROG_EGREP], [AC_DEFUN([LT_AC_PROG_EGREP])]) +m4_ifndef([LT_AC_PROG_SED], [AC_DEFUN([LT_AC_PROG_SED])]) +m4_ifndef([_LT_CC_BASENAME], [AC_DEFUN([_LT_CC_BASENAME])]) +m4_ifndef([_LT_COMPILER_BOILERPLATE], [AC_DEFUN([_LT_COMPILER_BOILERPLATE])]) +m4_ifndef([_LT_LINKER_BOILERPLATE], [AC_DEFUN([_LT_LINKER_BOILERPLATE])]) +m4_ifndef([_AC_PROG_LIBTOOL], [AC_DEFUN([_AC_PROG_LIBTOOL])]) +m4_ifndef([AC_LIBTOOL_SETUP], [AC_DEFUN([AC_LIBTOOL_SETUP])]) +m4_ifndef([_LT_AC_CHECK_DLFCN], [AC_DEFUN([_LT_AC_CHECK_DLFCN])]) +m4_ifndef([AC_LIBTOOL_SYS_DYNAMIC_LINKER], [AC_DEFUN([AC_LIBTOOL_SYS_DYNAMIC_LINKER])]) +m4_ifndef([_LT_AC_TAGCONFIG], [AC_DEFUN([_LT_AC_TAGCONFIG])]) +m4_ifndef([AC_DISABLE_FAST_INSTALL], [AC_DEFUN([AC_DISABLE_FAST_INSTALL])]) +m4_ifndef([_LT_AC_LANG_CXX], [AC_DEFUN([_LT_AC_LANG_CXX])]) +m4_ifndef([_LT_AC_LANG_F77], [AC_DEFUN([_LT_AC_LANG_F77])]) +m4_ifndef([_LT_AC_LANG_GCJ], [AC_DEFUN([_LT_AC_LANG_GCJ])]) +m4_ifndef([AC_LIBTOOL_RC], [AC_DEFUN([AC_LIBTOOL_RC])]) +m4_ifndef([AC_LIBTOOL_LANG_C_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_C_CONFIG])]) +m4_ifndef([_LT_AC_LANG_C_CONFIG], [AC_DEFUN([_LT_AC_LANG_C_CONFIG])]) +m4_ifndef([AC_LIBTOOL_LANG_CXX_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_CXX_CONFIG])]) +m4_ifndef([_LT_AC_LANG_CXX_CONFIG], [AC_DEFUN([_LT_AC_LANG_CXX_CONFIG])]) +m4_ifndef([AC_LIBTOOL_LANG_F77_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_F77_CONFIG])]) +m4_ifndef([_LT_AC_LANG_F77_CONFIG], [AC_DEFUN([_LT_AC_LANG_F77_CONFIG])]) +m4_ifndef([AC_LIBTOOL_LANG_GCJ_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_GCJ_CONFIG])]) +m4_ifndef([_LT_AC_LANG_GCJ_CONFIG], [AC_DEFUN([_LT_AC_LANG_GCJ_CONFIG])]) +m4_ifndef([AC_LIBTOOL_LANG_RC_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_RC_CONFIG])]) +m4_ifndef([_LT_AC_LANG_RC_CONFIG], [AC_DEFUN([_LT_AC_LANG_RC_CONFIG])]) +m4_ifndef([AC_LIBTOOL_CONFIG], [AC_DEFUN([AC_LIBTOOL_CONFIG])]) +m4_ifndef([_LT_AC_FILE_LTDLL_C], [AC_DEFUN([_LT_AC_FILE_LTDLL_C])]) Added: python/trunk/Modules/_ctypes/libffi/man/Makefile.am ============================================================================== --- (empty file) +++ python/trunk/Modules/_ctypes/libffi/man/Makefile.am Mon Mar 15 01:02:36 2010 @@ -0,0 +1,8 @@ +## Process this with automake to create Makefile.in + +AUTOMAKE_OPTIONS=foreign + +EXTRA_DIST = ffi.3 ffi_call.3 ffi_prep_cif.3 + +man_MANS = ffi.3 ffi_call.3 ffi_prep_cif.3 + Added: python/trunk/Modules/_ctypes/libffi/man/Makefile.in ============================================================================== --- (empty file) +++ python/trunk/Modules/_ctypes/libffi/man/Makefile.in Mon Mar 15 01:02:36 2010 @@ -0,0 +1,448 @@ +# Makefile.in generated by automake 1.11 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +# 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, +# Inc. +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + + at SET_MAKE@ +VPATH = @srcdir@ +pkgdatadir = $(datadir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkglibexecdir = $(libexecdir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = @build@ +host_triplet = @host@ +target_triplet = @target@ +subdir = man +DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/acinclude.m4 \ + $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +mkinstalldirs = $(install_sh) -d +CONFIG_HEADER = $(top_builddir)/fficonfig.h +CONFIG_CLEAN_FILES = +CONFIG_CLEAN_VPATH_FILES = +SOURCES = +DIST_SOURCES = +am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; +am__vpath_adj = case $$p in \ + $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ + *) f=$$p;; \ + esac; +am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; +am__install_max = 40 +am__nobase_strip_setup = \ + srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` +am__nobase_strip = \ + for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" +am__nobase_list = $(am__nobase_strip_setup); \ + for p in $$list; do echo "$$p $$p"; done | \ + sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ + $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ + if (++n[$$2] == $(am__install_max)) \ + { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ + END { for (dir in files) print dir, files[dir] }' +am__base_list = \ + sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ + sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' +man3dir = $(mandir)/man3 +am__installdirs = "$(DESTDIR)$(man3dir)" +NROFF = nroff +MANS = $(man_MANS) +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +ACLOCAL = @ACLOCAL@ +ALLOCA = @ALLOCA@ +AMTAR = @AMTAR@ +AM_RUNTESTFLAGS = @AM_RUNTESTFLAGS@ +AR = @AR@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +CC = @CC@ +CCAS = @CCAS@ +CCASDEPMODE = @CCASDEPMODE@ +CCASFLAGS = @CCASFLAGS@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CYGPATH_W = @CYGPATH_W@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +DSYMUTIL = @DSYMUTIL@ +DUMPBIN = @DUMPBIN@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +EXEEXT = @EXEEXT@ +FGREP = @FGREP@ +GREP = @GREP@ +HAVE_LONG_DOUBLE = @HAVE_LONG_DOUBLE@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +LD = @LD@ +LDFLAGS = @LDFLAGS@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LIBTOOL = @LIBTOOL@ +LIPO = @LIPO@ +LN_S = @LN_S@ +LTLIBOBJS = @LTLIBOBJS@ +MAINT = @MAINT@ +MAKEINFO = @MAKEINFO@ +MKDIR_P = @MKDIR_P@ +NM = @NM@ +NMEDIT = @NMEDIT@ +OBJDUMP = @OBJDUMP@ +OBJEXT = @OBJEXT@ +OTOOL = @OTOOL@ +OTOOL64 = @OTOOL64@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +RANLIB = @RANLIB@ +SED = @SED@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +STRIP = @STRIP@ +TARGET = @TARGET@ +TARGETDIR = @TARGETDIR@ +VERSION = @VERSION@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_os = @build_os@ +build_vendor = @build_vendor@ +builddir = @builddir@ +datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +dvidir = @dvidir@ +exec_prefix = @exec_prefix@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +htmldir = @htmldir@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +lt_ECHO = @lt_ECHO@ +mandir = @mandir@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +pdfdir = @pdfdir@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +srcdir = @srcdir@ +sysconfdir = @sysconfdir@ +target = @target@ +target_alias = @target_alias@ +target_cpu = @target_cpu@ +target_os = @target_os@ +target_vendor = @target_vendor@ +toolexecdir = @toolexecdir@ +toolexeclibdir = @toolexeclibdir@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +AUTOMAKE_OPTIONS = foreign +EXTRA_DIST = ffi.3 ffi_call.3 ffi_prep_cif.3 +man_MANS = ffi.3 ffi_call.3 ffi_prep_cif.3 +all: all-am + +.SUFFIXES: +$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign man/Makefile'; \ + $(am__cd) $(top_srcdir) && \ + $(AUTOMAKE) --foreign man/Makefile +.PRECIOUS: Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(am__aclocal_m4_deps): + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs +install-man3: $(man_MANS) + @$(NORMAL_INSTALL) + test -z "$(man3dir)" || $(MKDIR_P) "$(DESTDIR)$(man3dir)" + @list=''; test -n "$(man3dir)" || exit 0; \ + { for i in $$list; do echo "$$i"; done; \ + l2='$(man_MANS)'; for i in $$l2; do echo "$$i"; done | \ + sed -n '/\.3[a-z]*$$/p'; \ + } | while read p; do \ + if test -f $$p; then d=; else d="$(srcdir)/"; fi; \ + echo "$$d$$p"; echo "$$p"; \ + done | \ + sed -e 'n;s,.*/,,;p;h;s,.*\.,,;s,^[^3][0-9a-z]*$$,3,;x' \ + -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,' | \ + sed 'N;N;s,\n, ,g' | { \ + list=; while read file base inst; do \ + if test "$$base" = "$$inst"; then list="$$list $$file"; else \ + echo " $(INSTALL_DATA) '$$file' '$(DESTDIR)$(man3dir)/$$inst'"; \ + $(INSTALL_DATA) "$$file" "$(DESTDIR)$(man3dir)/$$inst" || exit $$?; \ + fi; \ + done; \ + for i in $$list; do echo "$$i"; done | $(am__base_list) | \ + while read files; do \ + test -z "$$files" || { \ + echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(man3dir)'"; \ + $(INSTALL_DATA) $$files "$(DESTDIR)$(man3dir)" || exit $$?; }; \ + done; } + +uninstall-man3: + @$(NORMAL_UNINSTALL) + @list=''; test -n "$(man3dir)" || exit 0; \ + files=`{ for i in $$list; do echo "$$i"; done; \ + l2='$(man_MANS)'; for i in $$l2; do echo "$$i"; done | \ + sed -n '/\.3[a-z]*$$/p'; \ + } | sed -e 's,.*/,,;h;s,.*\.,,;s,^[^3][0-9a-z]*$$,3,;x' \ + -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,'`; \ + test -z "$$files" || { \ + echo " ( cd '$(DESTDIR)$(man3dir)' && rm -f" $$files ")"; \ + cd "$(DESTDIR)$(man3dir)" && rm -f $$files; } +tags: TAGS +TAGS: + +ctags: CTAGS +CTAGS: + + +distdir: $(DISTFILES) + @list='$(MANS)'; if test -n "$$list"; then \ + list=`for p in $$list; do \ + if test -f $$p; then d=; else d="$(srcdir)/"; fi; \ + if test -f "$$d$$p"; then echo "$$d$$p"; else :; fi; done`; \ + if test -n "$$list" && \ + grep 'ab help2man is required to generate this page' $$list >/dev/null; then \ + echo "error: found man pages containing the \`missing help2man' replacement text:" >&2; \ + grep -l 'ab help2man is required to generate this page' $$list | sed 's/^/ /' >&2; \ + echo " to fix them, install help2man, remove and regenerate the man pages;" >&2; \ + echo " typically \`make maintainer-clean' will remove them" >&2; \ + exit 1; \ + else :; fi; \ + else :; fi + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d "$(distdir)/$$file"; then \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ + else \ + test -f "$(distdir)/$$file" \ + || cp -p $$d/$$file "$(distdir)/$$file" \ + || exit 1; \ + fi; \ + done +check-am: all-am +check: check-am +all-am: Makefile $(MANS) +installdirs: + for dir in "$(DESTDIR)$(man3dir)"; do \ + test -z "$$dir" || $(MKDIR_P) "$$dir"; \ + done +install: install-am +install-exec: install-exec-am +install-data: install-data-am +uninstall: uninstall-am + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-am +install-strip: + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + `test -z '$(STRIP)' || \ + echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install +mostlyclean-generic: + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." +clean: clean-am + +clean-am: clean-generic clean-libtool mostlyclean-am + +distclean: distclean-am + -rm -f Makefile +distclean-am: clean-am distclean-generic + +dvi: dvi-am + +dvi-am: + +html: html-am + +html-am: + +info: info-am + +info-am: + +install-data-am: install-man + +install-dvi: install-dvi-am + +install-dvi-am: + +install-exec-am: + +install-html: install-html-am + +install-html-am: + +install-info: install-info-am + +install-info-am: + +install-man: install-man3 + +install-pdf: install-pdf-am + +install-pdf-am: + +install-ps: install-ps-am + +install-ps-am: + +installcheck-am: + +maintainer-clean: maintainer-clean-am + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-am + +mostlyclean-am: mostlyclean-generic mostlyclean-libtool + +pdf: pdf-am + +pdf-am: + +ps: ps-am + +ps-am: + +uninstall-am: uninstall-man + +uninstall-man: uninstall-man3 + +.MAKE: install-am install-strip + +.PHONY: all all-am check check-am clean clean-generic clean-libtool \ + distclean distclean-generic distclean-libtool distdir dvi \ + dvi-am html html-am info info-am install install-am \ + install-data install-data-am install-dvi install-dvi-am \ + install-exec install-exec-am install-html install-html-am \ + install-info install-info-am install-man install-man3 \ + install-pdf install-pdf-am install-ps install-ps-am \ + install-strip installcheck installcheck-am installdirs \ + maintainer-clean maintainer-clean-generic mostlyclean \ + mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ + uninstall uninstall-am uninstall-man uninstall-man3 + + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: Added: python/trunk/Modules/_ctypes/libffi/man/ffi.3 ============================================================================== --- (empty file) +++ python/trunk/Modules/_ctypes/libffi/man/ffi.3 Mon Mar 15 01:02:36 2010 @@ -0,0 +1,31 @@ +.Dd February 15, 2008 +.Dt FFI 3 +.Sh NAME +.Nm FFI +.Nd Foreign Function Interface +.Sh LIBRARY +libffi, -lffi +.Sh SYNOPSIS +.In ffi.h +.Ft ffi_status +.Fo ffi_prep_cif +.Fa "ffi_cif *cif" +.Fa "ffi_abi abi" +.Fa "unsigned int nargs" +.Fa "ffi_type *rtype" +.Fa "ffi_type **atypes" +.Fc +.Ft void +.Fo ffi_call +.Fa "ffi_cif *cif" +.Fa "void (*fn)(void)" +.Fa "void *rvalue" +.Fa "void **avalue" +.Fc +.Sh DESCRIPTION +The foreign function interface provides a mechanism by which a function can +generate a call to another function at runtime without requiring knowledge of +the called function's interface at compile time. +.Sh SEE ALSO +.Xr ffi_prep_cif 3 , +.Xr ffi_call 3 Added: python/trunk/Modules/_ctypes/libffi/man/ffi_call.3 ============================================================================== --- (empty file) +++ python/trunk/Modules/_ctypes/libffi/man/ffi_call.3 Mon Mar 15 01:02:36 2010 @@ -0,0 +1,103 @@ +.Dd February 15, 2008 +.Dt ffi_call 3 +.Sh NAME +.Nm ffi_call +.Nd Invoke a foreign function. +.Sh SYNOPSIS +.In ffi.h +.Ft void +.Fo ffi_call +.Fa "ffi_cif *cif" +.Fa "void (*fn)(void)" +.Fa "void *rvalue" +.Fa "void **avalue" +.Fc +.Sh DESCRIPTION +The +.Nm ffi_call +function provides a simple mechanism for invoking a function without +requiring knowledge of the function's interface at compile time. +.Fa fn +is called with the values retrieved from the pointers in the +.Fa avalue +array. The return value from +.Fa fn +is placed in storage pointed to by +.Fa rvalue . +.Fa cif +contains information describing the data types, sizes and alignments of the +arguments to and return value from +.Fa fn , +and must be initialized with +.Nm ffi_prep_cif +before it is used with +.Nm ffi_call . +.Pp +.Fa rvalue +must point to storage that is sizeof(ffi_arg) or larger for non-floating point +types. For smaller-sized return value types, the +.Nm ffi_arg +or +.Nm ffi_sarg +integral type must be used to hold +the return value. +.Sh EXAMPLES +.Bd -literal +#include +#include + +unsigned char +foo(unsigned int, float); + +int +main(int argc, const char **argv) +{ + ffi_cif cif; + ffi_type *arg_types[2]; + void *arg_values[2]; + ffi_status status; + + // Because the return value from foo() is smaller than sizeof(long), it + // must be passed as ffi_arg or ffi_sarg. + ffi_arg result; + + // Specify the data type of each argument. Available types are defined + // in . + arg_types[0] = &ffi_type_uint; + arg_types[1] = &ffi_type_float; + + // Prepare the ffi_cif structure. + if ((status = ffi_prep_cif(&cif, FFI_DEFAULT_ABI, + 2, &ffi_type_uint8, arg_types)) != FFI_OK) + { + // Handle the ffi_status error. + } + + // Specify the values of each argument. + unsigned int arg1 = 42; + float arg2 = 5.1; + + arg_values[0] = &arg1; + arg_values[1] = &arg2; + + // Invoke the function. + ffi_call(&cif, FFI_FN(foo), &result, arg_values); + + // The ffi_arg 'result' now contains the unsigned char returned from foo(), + // which can be accessed by a typecast. + printf("result is %hhu", (unsigned char)result); + + return 0; +} + +// The target function. +unsigned char +foo(unsigned int x, float y) +{ + unsigned char result = x - y; + return result; +} +.Ed +.Sh SEE ALSO +.Xr ffi 3 , +.Xr ffi_prep_cif 3 Added: python/trunk/Modules/_ctypes/libffi/man/ffi_prep_cif.3 ============================================================================== --- (empty file) +++ python/trunk/Modules/_ctypes/libffi/man/ffi_prep_cif.3 Mon Mar 15 01:02:36 2010 @@ -0,0 +1,66 @@ +.Dd February 15, 2008 +.Dt ffi_prep_cif 3 +.Sh NAME +.Nm ffi_prep_cif +.Nd Prepare a +.Nm ffi_cif +structure for use with +.Nm ffi_call +. +.Sh SYNOPSIS +.In ffi.h +.Ft ffi_status +.Fo ffi_prep_cif +.Fa "ffi_cif *cif" +.Fa "ffi_abi abi" +.Fa "unsigned int nargs" +.Fa "ffi_type *rtype" +.Fa "ffi_type **atypes" +.Fc +.Sh DESCRIPTION +The +.Nm ffi_prep_cif +function prepares a +.Nm ffi_cif +structure for use with +.Nm ffi_call +. +.Fa abi +specifies a set of calling conventions to use. +.Fa atypes +is an array of +.Fa nargs +pointers to +.Nm ffi_type +structs that describe the data type, size and alignment of each argument. +.Fa rtype +points to an +.Nm ffi_type +that describes the data type, size and alignment of the +return value. +.Sh RETURN VALUES +Upon successful completion, +.Nm ffi_prep_cif +returns +.Nm FFI_OK . +It will return +.Nm FFI_BAD_TYPEDEF +if +.Fa cif +is +.Nm NULL +or +.Fa atypes +or +.Fa rtype +is malformed. If +.Fa abi +does not refer to a valid ABI, +.Nm FFI_BAD_ABI +will be returned. Available ABIs are +defined in +.Nm +. +.Sh SEE ALSO +.Xr ffi 3 , +.Xr ffi_call 3 Added: python/trunk/Modules/_ctypes/libffi/mdate-sh ============================================================================== --- (empty file) +++ python/trunk/Modules/_ctypes/libffi/mdate-sh Mon Mar 15 01:02:36 2010 @@ -0,0 +1,201 @@ +#!/bin/sh +# Get modification time of a file or directory and pretty-print it. + +scriptversion=2005-06-29.22 + +# Copyright (C) 1995, 1996, 1997, 2003, 2004, 2005 Free Software +# Foundation, Inc. +# written by Ulrich Drepper , June 1995 +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2, or (at your option) +# any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software Foundation, +# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + +# As a special exception to the GNU General Public License, if you +# distribute this file as part of a program that contains a +# configuration script generated by Autoconf, you may include it under +# the same distribution terms that you use for the rest of that program. + +# This file is maintained in Automake, please report +# bugs to or send patches to +# . + +case $1 in + '') + echo "$0: No file. Try \`$0 --help' for more information." 1>&2 + exit 1; + ;; + -h | --h*) + cat <<\EOF +Usage: mdate-sh [--help] [--version] FILE + +Pretty-print the modification time of FILE. + +Report bugs to . +EOF + exit $? + ;; + -v | --v*) + echo "mdate-sh $scriptversion" + exit $? + ;; +esac + +# Prevent date giving response in another language. +LANG=C +export LANG +LC_ALL=C +export LC_ALL +LC_TIME=C +export LC_TIME + +# GNU ls changes its time format in response to the TIME_STYLE +# variable. Since we cannot assume `unset' works, revert this +# variable to its documented default. +if test "${TIME_STYLE+set}" = set; then + TIME_STYLE=posix-long-iso + export TIME_STYLE +fi + +save_arg1=$1 + +# Find out how to get the extended ls output of a file or directory. +if ls -L /dev/null 1>/dev/null 2>&1; then + ls_command='ls -L -l -d' +else + ls_command='ls -l -d' +fi + +# A `ls -l' line looks as follows on OS/2. +# drwxrwx--- 0 Aug 11 2001 foo +# This differs from Unix, which adds ownership information. +# drwxrwx--- 2 root root 4096 Aug 11 2001 foo +# +# To find the date, we split the line on spaces and iterate on words +# until we find a month. This cannot work with files whose owner is a +# user named `Jan', or `Feb', etc. However, it's unlikely that `/' +# will be owned by a user whose name is a month. So we first look at +# the extended ls output of the root directory to decide how many +# words should be skipped to get the date. + +# On HPUX /bin/sh, "set" interprets "-rw-r--r--" as options, so the "x" below. +set x`ls -l -d /` + +# Find which argument is the month. +month= +command= +until test $month +do + shift + # Add another shift to the command. + command="$command shift;" + case $1 in + Jan) month=January; nummonth=1;; + Feb) month=February; nummonth=2;; + Mar) month=March; nummonth=3;; + Apr) month=April; nummonth=4;; + May) month=May; nummonth=5;; + Jun) month=June; nummonth=6;; + Jul) month=July; nummonth=7;; + Aug) month=August; nummonth=8;; + Sep) month=September; nummonth=9;; + Oct) month=October; nummonth=10;; + Nov) month=November; nummonth=11;; + Dec) month=December; nummonth=12;; + esac +done + +# Get the extended ls output of the file or directory. +set dummy x`eval "$ls_command \"\$save_arg1\""` + +# Remove all preceding arguments +eval $command + +# Because of the dummy argument above, month is in $2. +# +# On a POSIX system, we should have +# +# $# = 5 +# $1 = file size +# $2 = month +# $3 = day +# $4 = year or time +# $5 = filename +# +# On Darwin 7.7.0 and 7.6.0, we have +# +# $# = 4 +# $1 = day +# $2 = month +# $3 = year or time +# $4 = filename + +# Get the month. +case $2 in + Jan) month=January; nummonth=1;; + Feb) month=February; nummonth=2;; + Mar) month=March; nummonth=3;; + Apr) month=April; nummonth=4;; + May) month=May; nummonth=5;; + Jun) month=June; nummonth=6;; + Jul) month=July; nummonth=7;; + Aug) month=August; nummonth=8;; + Sep) month=September; nummonth=9;; + Oct) month=October; nummonth=10;; + Nov) month=November; nummonth=11;; + Dec) month=December; nummonth=12;; +esac + +case $3 in + ???*) day=$1;; + *) day=$3; shift;; +esac + +# Here we have to deal with the problem that the ls output gives either +# the time of day or the year. +case $3 in + *:*) set `date`; eval year=\$$# + case $2 in + Jan) nummonthtod=1;; + Feb) nummonthtod=2;; + Mar) nummonthtod=3;; + Apr) nummonthtod=4;; + May) nummonthtod=5;; + Jun) nummonthtod=6;; + Jul) nummonthtod=7;; + Aug) nummonthtod=8;; + Sep) nummonthtod=9;; + Oct) nummonthtod=10;; + Nov) nummonthtod=11;; + Dec) nummonthtod=12;; + esac + # For the first six month of the year the time notation can also + # be used for files modified in the last year. + if (expr $nummonth \> $nummonthtod) > /dev/null; + then + year=`expr $year - 1` + fi;; + *) year=$3;; +esac + +# The result. +echo $day $month $year + +# Local Variables: +# mode: shell-script +# sh-indentation: 2 +# eval: (add-hook 'write-file-hooks 'time-stamp) +# time-stamp-start: "scriptversion=" +# time-stamp-format: "%:y-%02m-%02d.%02H" +# time-stamp-end: "$" +# End: Modified: python/trunk/Modules/_ctypes/libffi/missing ============================================================================== --- python/trunk/Modules/_ctypes/libffi/missing (original) +++ python/trunk/Modules/_ctypes/libffi/missing Mon Mar 15 01:02:36 2010 @@ -1,9 +1,9 @@ #! /bin/sh # Common stub for a few missing GNU programs while installing. -scriptversion=2004-09-07.08 +scriptversion=2005-06-08.21 -# Copyright (C) 1996, 1997, 1999, 2000, 2002, 2003, 2004 +# Copyright (C) 1996, 1997, 1999, 2000, 2002, 2003, 2004, 2005 # Free Software Foundation, Inc. # Originally by Fran,cois Pinard , 1996. @@ -19,8 +19,8 @@ # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software -# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA -# 02111-1307, USA. +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA +# 02110-1301, USA. # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a @@ -87,12 +87,12 @@ yacc create \`y.tab.[ch]', if possible, from existing .[ch] Send bug reports to ." - exit 0 + exit $? ;; -v|--v|--ve|--ver|--vers|--versi|--versio|--version) echo "missing $scriptversion (GNU Automake)" - exit 0 + exit $? ;; -*) @@ -288,11 +288,18 @@ call might also be the consequence of using a buggy \`make' (AIX, DU, IRIX). You might want to install the \`Texinfo' package or the \`GNU make' package. Grab either from any GNU archive site." + # The file to touch is that specified with -o ... file=`echo "$*" | sed -n 's/.*-o \([^ ]*\).*/\1/p'` if test -z "$file"; then - file=`echo "$*" | sed 's/.* \([^ ]*\) *$/\1/'` - file=`sed -n '/^@setfilename/ { s/.* \([^ ]*\) *$/\1/; p; q; }' $file` - fi + # ... or it is the one specified with @setfilename ... + infile=`echo "$*" | sed 's/.* \([^ ]*\) *$/\1/'` + file=`sed -n '/^@setfilename/ { s/.* \([^ ]*\) *$/\1/; p; q; }' $infile` + # ... or it is derived from the source name (dir/f.texi becomes f.info) + test -z "$file" && file=`echo "$infile" | sed 's,.*/,,;s,.[^.]*$,,'`.info + fi + # If the file does not exist, the user really needs makeinfo; + # let's fail without touching anything. + test -f $file || exit 1 touch $file ;; Modified: python/trunk/Modules/_ctypes/libffi/src/arm/sysv.S ============================================================================== --- python/trunk/Modules/_ctypes/libffi/src/arm/sysv.S (original) +++ python/trunk/Modules/_ctypes/libffi/src/arm/sysv.S Mon Mar 15 01:02:36 2010 @@ -67,11 +67,18 @@ #if defined(__ARM_ARCH_6__) || defined(__ARM_ARCH_6J__) \ || defined(__ARM_ARCH_6K__) || defined(__ARM_ARCH_6Z__) \ - || defined(__ARM_ARCH_6ZK__) + || defined(__ARM_ARCH_6ZK__) || defined(__ARM_ARCH_6T2__) \ + || defined(__ARM_ARCH_6M__) # undef __ARM_ARCH__ # define __ARM_ARCH__ 6 #endif +#if defined(__ARM_ARCH_7__) || defined(__ARM_ARCH_7A__) \ + || defined(__ARM_ARCH_7R__) || defined(__ARM_ARCH_7M__) +# undef __ARM_ARCH__ +# define __ARM_ARCH__ 7 +#endif + #if __ARM_ARCH__ >= 5 # define call_reg(x) blx x #elif defined (__ARM_ARCH_4T__) @@ -189,7 +196,7 @@ @ return INT cmp r3, #FFI_TYPE_INT -#ifdef __SOFTFP__ +#if defined(__SOFTFP__) || defined(__ARM_EABI__) cmpne r3, #FFI_TYPE_FLOAT #endif streq r0, [r2] @@ -197,12 +204,12 @@ @ return INT64 cmp r3, #FFI_TYPE_SINT64 -#ifdef __SOFTFP__ +#if defined(__SOFTFP__) || defined(__ARM_EABI__) cmpne r3, #FFI_TYPE_DOUBLE #endif stmeqia r2, {r0, r1} -#ifndef __SOFTFP__ +#if !defined(__SOFTFP__) && !defined(__ARM_EABI__) beq LSYM(Lepilogue) @ return FLOAT @@ -245,21 +252,21 @@ beq .Lretint cmp r0, #FFI_TYPE_FLOAT -#ifdef __SOFTFP__ +#if defined(__SOFTFP__) || defined(__ARM_EABI__) beq .Lretint #else beq .Lretfloat #endif cmp r0, #FFI_TYPE_DOUBLE -#ifdef __SOFTFP__ +#if defined(__SOFTFP__) || defined(__ARM_EABI__) beq .Lretlonglong #else beq .Lretdouble #endif cmp r0, #FFI_TYPE_LONGDOUBLE -#ifdef __SOFTFP__ +#if defined(__SOFTFP__) || defined(__ARM_EABI__) beq .Lretlonglong #else beq .Lretlongdouble @@ -278,7 +285,7 @@ ldr r1, [sp, #4] b .Lclosure_epilogue -#ifndef __SOFTFP__ +#if !defined(__SOFTFP__) && !defined(__ARM_EABI__) .Lretfloat: ldfs f0, [sp] b .Lclosure_epilogue Added: python/trunk/Modules/_ctypes/libffi/src/avr32/ffi.c ============================================================================== --- (empty file) +++ python/trunk/Modules/_ctypes/libffi/src/avr32/ffi.c Mon Mar 15 01:02:36 2010 @@ -0,0 +1,421 @@ +/* ----------------------------------------------------------------------- + ffi.c - Copyright (c) 2009 Bradley Smith + + AVR32 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 THE AUTHORS OR COPYRIGHT + HOLDERS 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 +#include +#include + +/* #define DEBUG */ + +extern void ffi_call_SYSV(void (*)(char *, extended_cif *), extended_cif *, + unsigned int, unsigned int, unsigned int*, unsigned int, + void (*fn)(void)); +extern void ffi_closure_SYSV (ffi_closure *); + +unsigned int pass_struct_on_stack(ffi_type *type) +{ + if(type->type != FFI_TYPE_STRUCT) + return 0; + + if(type->alignment < type->size && + !(type->size == 4 || type->size == 8) && + !(type->size == 8 && type->alignment >= 4)) + return 1; + + if(type->size == 3 || type->size == 5 || type->size == 6 || + type->size == 7) + return 1; + + return 0; +} + +/* ffi_prep_args is called by the assembly routine once stack space + * has been allocated for the function's arguments + * + * This is annoyingly complex since we need to keep track of used + * registers. + */ + +void ffi_prep_args(char *stack, extended_cif *ecif) +{ + unsigned int i; + void **p_argv; + ffi_type **p_arg; + char *reg_base = stack; + char *stack_base = stack + 20; + unsigned int stack_offset = 0; + unsigned int reg_mask = 0; + + p_argv = ecif->avalue; + + /* If cif->flags is struct then we know it's not passed in registers */ + if(ecif->cif->flags == FFI_TYPE_STRUCT) + { + *(void**)reg_base = ecif->rvalue; + reg_mask |= 1; + } + + for(i = 0, p_arg = ecif->cif->arg_types; i < ecif->cif->nargs; + i++, p_arg++) + { + size_t z = (*p_arg)->size; + int alignment = (*p_arg)->alignment; + int type = (*p_arg)->type; + char *addr = 0; + + if(z % 4 != 0) + z += (4 - z % 4); + + if(reg_mask != 0x1f) + { + if(pass_struct_on_stack(*p_arg)) + { + addr = stack_base + stack_offset; + stack_offset += z; + } + else if(z == sizeof(int)) + { + char index = 0; + + while((reg_mask >> index) & 1) + index++; + + addr = reg_base + (index * 4); + reg_mask |= (1 << index); + } + else if(z == 2 * sizeof(int)) + { + if(!((reg_mask >> 1) & 1)) + { + addr = reg_base + 4; + reg_mask |= (3 << 1); + } + else if(!((reg_mask >> 3) & 1)) + { + addr = reg_base + 12; + reg_mask |= (3 << 3); + } + } + } + + if(!addr) + { + addr = stack_base + stack_offset; + stack_offset += z; + } + + if(type == FFI_TYPE_STRUCT && (*p_arg)->elements[1] == NULL) + type = (*p_arg)->elements[0]->type; + + switch(type) + { + case FFI_TYPE_UINT8: + *(unsigned int *)addr = (unsigned int)*(UINT8 *)(*p_argv); + break; + case FFI_TYPE_SINT8: + *(signed int *)addr = (signed int)*(SINT8 *)(*p_argv); + break; + case FFI_TYPE_UINT16: + *(unsigned int *)addr = (unsigned int)*(UINT16 *)(*p_argv); + break; + case FFI_TYPE_SINT16: + *(signed int *)addr = (signed int)*(SINT16 *)(*p_argv); + break; + default: + memcpy(addr, *p_argv, z); + } + + p_argv++; + } + +#ifdef DEBUG + /* Debugging */ + for(i = 0; i < 5; i++) + { + if((reg_mask & (1 << i)) == 0) + printf("r%d: (unused)\n", 12 - i); + else + printf("r%d: 0x%08x\n", 12 - i, ((unsigned int*)reg_base)[i]); + } + + for(i = 0; i < stack_offset / 4; i++) + { + printf("sp+%d: 0x%08x\n", i*4, ((unsigned int*)stack_base)[i]); + } +#endif +} + +/* Perform machine dependent cif processing */ +ffi_status ffi_prep_cif_machdep(ffi_cif *cif) +{ + /* Round the stack up to a multiple of 8 bytes. This isn't needed + * everywhere, but it is on some platforms, and it doesn't harm + * anything when it isn't needed. */ + cif->bytes = (cif->bytes + 7) & ~7; + + /* Flag to indicate that he return value is in fact a struct */ + cif->rstruct_flag = 0; + + /* Set the return type flag */ + switch(cif->rtype->type) + { + case FFI_TYPE_SINT8: + case FFI_TYPE_UINT8: + cif->flags = (unsigned)FFI_TYPE_UINT8; + break; + case FFI_TYPE_SINT16: + case FFI_TYPE_UINT16: + cif->flags = (unsigned)FFI_TYPE_UINT16; + break; + case FFI_TYPE_FLOAT: + case FFI_TYPE_SINT32: + case FFI_TYPE_UINT32: + case FFI_TYPE_POINTER: + cif->flags = (unsigned)FFI_TYPE_UINT32; + break; + case FFI_TYPE_DOUBLE: + case FFI_TYPE_SINT64: + case FFI_TYPE_UINT64: + cif->flags = (unsigned)FFI_TYPE_UINT64; + break; + case FFI_TYPE_STRUCT: + cif->rstruct_flag = 1; + if(!pass_struct_on_stack(cif->rtype)) + { + if(cif->rtype->size <= 1) + cif->flags = (unsigned)FFI_TYPE_UINT8; + else if(cif->rtype->size <= 2) + cif->flags = (unsigned)FFI_TYPE_UINT16; + else if(cif->rtype->size <= 4) + cif->flags = (unsigned)FFI_TYPE_UINT32; + else if(cif->rtype->size <= 8) + cif->flags = (unsigned)FFI_TYPE_UINT64; + else + cif->flags = (unsigned)cif->rtype->type; + } + else + cif->flags = (unsigned)cif->rtype->type; + break; + default: + cif->flags = (unsigned)cif->rtype->type; + break; + } + + return FFI_OK; +} + +void ffi_call(ffi_cif *cif, void (*fn)(void), void *rvalue, void **avalue) +{ + extended_cif ecif; + + unsigned int size = 0, i = 0; + ffi_type **p_arg; + + ecif.cif = cif; + ecif.avalue = avalue; + + for(i = 0, p_arg = cif->arg_types; i < cif->nargs; i++, p_arg++) + size += (*p_arg)->size + (4 - (*p_arg)->size % 4); + + /* If the return value is a struct and we don't have a return value + * address then we need to make one */ + + /* If cif->flags is struct then it's not suitable for registers */ + if((rvalue == NULL) && (cif->flags == FFI_TYPE_STRUCT)) + ecif.rvalue = alloca(cif->rtype->size); + else + ecif.rvalue = rvalue; + + switch(cif->abi) + { + case FFI_SYSV: + ffi_call_SYSV(ffi_prep_args, &ecif, size, cif->flags, + ecif.rvalue, cif->rstruct_flag, fn); + break; + default: + FFI_ASSERT(0); + break; + } +} + +static void ffi_prep_incoming_args_SYSV(char *stack, void **rvalue, + void **avalue, ffi_cif *cif) +{ + register unsigned int i, reg_mask = 0; + register void **p_argv; + register ffi_type **p_arg; + register char *reg_base = stack; + register char *stack_base = stack + 20; + register unsigned int stack_offset = 0; + +#ifdef DEBUG + /* Debugging */ + for(i = 0; i < cif->nargs + 7; i++) + { + printf("sp+%d: 0x%08x\n", i*4, ((unsigned int*)stack)[i]); + } +#endif + + /* If cif->flags is struct then we know it's not passed in registers */ + if(cif->flags == FFI_TYPE_STRUCT) + { + *rvalue = *(void **)reg_base; + reg_mask |= 1; + } + + p_argv = avalue; + + for(i = 0, p_arg = cif->arg_types; i < cif->nargs; i++, p_arg++) + { + size_t z = (*p_arg)->size; + int alignment = (*p_arg)->alignment; + + *p_argv = 0; + + if(z % 4 != 0) + z += (4 - z % 4); + + if(reg_mask != 0x1f) + { + if(pass_struct_on_stack(*p_arg)) + { + *p_argv = (void*)stack_base + stack_offset; + stack_offset += z; + } + else if(z <= sizeof(int)) + { + char index = 0; + + while((reg_mask >> index) & 1) + index++; + + *p_argv = (void*)reg_base + (index * 4); + reg_mask |= (1 << index); + } + else if(z == 2 * sizeof(int)) + { + if(!((reg_mask >> 1) & 1)) + { + *p_argv = (void*)reg_base + 4; + reg_mask |= (3 << 1); + } + else if(!((reg_mask >> 3) & 1)) + { + *p_argv = (void*)reg_base + 12; + reg_mask |= (3 << 3); + } + } + } + + if(!*p_argv) + { + *p_argv = (void*)stack_base + stack_offset; + stack_offset += z; + } + + if((*p_arg)->type != FFI_TYPE_STRUCT || + (*p_arg)->elements[1] == NULL) + { + if(alignment == 1) + **(unsigned int**)p_argv <<= 24; + else if(alignment == 2) + **(unsigned int**)p_argv <<= 16; + } + + p_argv++; + } + +#ifdef DEBUG + /* Debugging */ + for(i = 0; i < cif->nargs; i++) + { + printf("sp+%d: 0x%08x\n", i*4, *(((unsigned int**)avalue)[i])); + } +#endif +} + +/* This function is jumped to by the trampoline */ + +unsigned int ffi_closure_SYSV_inner(ffi_closure *closure, void **respp, + void *args) +{ + ffi_cif *cif; + void **arg_area; + unsigned int i, size = 0; + ffi_type **p_arg; + + cif = closure->cif; + + for(i = 0, p_arg = cif->arg_types; i < cif->nargs; i++, p_arg++) + size += (*p_arg)->size + (4 - (*p_arg)->size % 4); + + arg_area = (void **)alloca(size); + + /* this call will initialize ARG_AREA, 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 RESP to point to the + * structure return address. */ + + ffi_prep_incoming_args_SYSV(args, respp, arg_area, cif); + + (closure->fun)(cif, *respp, arg_area, closure->user_data); + + return cif->flags; +} + +ffi_status ffi_prep_closure_loc(ffi_closure* closure, ffi_cif* cif, + void (*fun)(ffi_cif*, void*, void**, void*), void *user_data, + void *codeloc) +{ + FFI_ASSERT(cif->abi == FFI_SYSV); + + unsigned char *__tramp = (unsigned char*)(&closure->tramp[0]); + unsigned int __fun = (unsigned int)(&ffi_closure_SYSV); + unsigned int __ctx = (unsigned int)(codeloc); + unsigned int __rstruct_flag = (unsigned int)(cif->rstruct_flag); + unsigned int __inner = (unsigned int)(&ffi_closure_SYSV_inner); + *(unsigned int*) &__tramp[0] = 0xebcd1f00; /* pushm r8-r12 */ + *(unsigned int*) &__tramp[4] = 0xfefc0010; /* ld.w r12, pc[16] */ + *(unsigned int*) &__tramp[8] = 0xfefb0010; /* ld.w r11, pc[16] */ + *(unsigned int*) &__tramp[12] = 0xfefa0010; /* ld.w r10, pc[16] */ + *(unsigned int*) &__tramp[16] = 0xfeff0010; /* ld.w pc, pc[16] */ + *(unsigned int*) &__tramp[20] = __ctx; + *(unsigned int*) &__tramp[24] = __rstruct_flag; + *(unsigned int*) &__tramp[28] = __inner; + *(unsigned int*) &__tramp[32] = __fun; + syscall(__NR_cacheflush, 0, (&__tramp[0]), 36); + + closure->cif = cif; + closure->user_data = user_data; + closure->fun = fun; + + return FFI_OK; +} + Added: python/trunk/Modules/_ctypes/libffi/src/avr32/ffitarget.h ============================================================================== --- (empty file) +++ python/trunk/Modules/_ctypes/libffi/src/avr32/ffitarget.h Mon Mar 15 01:02:36 2010 @@ -0,0 +1,50 @@ +/* -----------------------------------------------------------------*-C-*- + ffitarget.h - Copyright (c) 2009 Bradley Smith + Target configuration macros for AVR32. + + 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 THE AUTHORS OR COPYRIGHT + HOLDERS 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 + +#define FFI_EXTRA_CIF_FIELDS unsigned int rstruct_flag + +/* Definitions for closures */ + +#define FFI_CLOSURES 1 +#define FFI_TRAMPOLINE_SIZE 36 +#define FFI_NATIVE_RAW_API 0 + +#endif Added: python/trunk/Modules/_ctypes/libffi/src/avr32/sysv.S ============================================================================== --- (empty file) +++ python/trunk/Modules/_ctypes/libffi/src/avr32/sysv.S Mon Mar 15 01:02:36 2010 @@ -0,0 +1,208 @@ +/* ----------------------------------------------------------------------- + sysv.S - Copyright (c) 2009 Bradley Smith + + AVR32 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 THE AUTHORS OR COPYRIGHT HOLDERS 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 + + /* r12: ffi_prep_args + * r11: &ecif + * r10: size + * r9: cif->flags + * r8: ecif.rvalue + * sp+0: cif->rstruct_flag + * sp+4: fn */ + + .text + .align 1 + .globl ffi_call_SYSV + .type ffi_call_SYSV, @function +ffi_call_SYSV: + stm --sp, r0,r1,lr + stm --sp, r8-r12 + mov r0, sp + + /* Make room for all of the new args. */ + sub sp, r10 + /* Pad to make way for potential skipped registers */ + sub sp, 20 + + /* Call ffi_prep_args(stack, &ecif). */ + /* r11 already set */ + mov r1, r12 + mov r12, sp + icall r1 + + /* Save new argument size */ + mov r1, r12 + + /* Move first 5 parameters in registers. */ + ldm sp++, r8-r12 + + /* call (fn) (...). */ + ld.w r1, r0[36] + icall r1 + + /* Remove the space we pushed for the args. */ + mov sp, r0 + + /* Load r1 with the rstruct flag. */ + ld.w r1, sp[32] + + /* Load r9 with the return type code. */ + ld.w r9, sp[12] + + /* Load r8 with the return value pointer. */ + ld.w r8, sp[16] + + /* If the return value pointer is NULL, assume no return value. */ + cp.w r8, 0 + breq .Lend + + /* Check if return type is actually a struct */ + cp.w r1, 0 + breq 1f + + /* Return 8bit */ + cp.w r9, FFI_TYPE_UINT8 + breq .Lstore8 + + /* Return 16bit */ + cp.w r9, FFI_TYPE_UINT16 + breq .Lstore16 + +1: + /* Return 32bit */ + cp.w r9, FFI_TYPE_UINT32 + breq .Lstore32 + cp.w r9, FFI_TYPE_UINT16 + breq .Lstore32 + cp.w r9, FFI_TYPE_UINT8 + breq .Lstore32 + + /* Return 64bit */ + cp.w r9, FFI_TYPE_UINT64 + breq .Lstore64 + + /* Didn't match anything */ + bral .Lend + +.Lstore64: + st.w r8[0], r11 + st.w r8[4], r10 + bral .Lend + +.Lstore32: + st.w r8[0], r12 + bral .Lend + +.Lstore16: + st.h r8[0], r12 + bral .Lend + +.Lstore8: + st.b r8[0], r12 + bral .Lend + +.Lend: + sub sp, -20 + ldm sp++, r0,r1,pc + + .size ffi_call_SYSV, . - ffi_call_SYSV + + + /* r12: __ctx + * r11: __rstruct_flag + * r10: __inner */ + + .align 1 + .globl ffi_closure_SYSV + .type ffi_closure_SYSV, @function +ffi_closure_SYSV: + stm --sp, r0,lr + mov r0, r11 + mov r8, r10 + sub r10, sp, -8 + sub sp, 12 + st.w sp[8], sp + sub r11, sp, -8 + icall r8 + + /* Check if return type is actually a struct */ + cp.w r0, 0 + breq 1f + + /* Return 8bit */ + cp.w r12, FFI_TYPE_UINT8 + breq .Lget8 + + /* Return 16bit */ + cp.w r12, FFI_TYPE_UINT16 + breq .Lget16 + +1: + /* Return 32bit */ + cp.w r12, FFI_TYPE_UINT32 + breq .Lget32 + cp.w r12, FFI_TYPE_UINT16 + breq .Lget32 + cp.w r12, FFI_TYPE_UINT8 + breq .Lget32 + + /* Return 64bit */ + cp.w r12, FFI_TYPE_UINT64 + breq .Lget64 + + /* Didn't match anything */ + bral .Lclend + +.Lget64: + ld.w r11, sp[0] + ld.w r10, sp[4] + bral .Lclend + +.Lget32: + ld.w r12, sp[0] + bral .Lclend + +.Lget16: + ld.uh r12, sp[0] + bral .Lclend + +.Lget8: + ld.ub r12, sp[0] + bral .Lclend + +.Lclend: + sub sp, -12 + ldm sp++, r0,lr + sub sp, -20 + mov pc, lr + + .size ffi_closure_SYSV, . - ffi_closure_SYSV + +#if defined __ELF__ && defined __linux__ + .section .note.GNU-stack,"", at progbits +#endif Added: python/trunk/Modules/_ctypes/libffi/src/closures.c ============================================================================== --- (empty file) +++ python/trunk/Modules/_ctypes/libffi/src/closures.c Mon Mar 15 01:02:36 2010 @@ -0,0 +1,633 @@ +/* ----------------------------------------------------------------------- + closures.c - Copyright (c) 2007, 2009 Red Hat, Inc. + Copyright (C) 2007, 2009 Free Software Foundation, Inc + + Code to allocate and deallocate memory for closures. + + 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 THE AUTHORS OR COPYRIGHT + HOLDERS 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. + ----------------------------------------------------------------------- */ + +#if defined __linux__ && !defined _GNU_SOURCE +#define _GNU_SOURCE 1 +#endif + +#include +#include + +#ifndef FFI_MMAP_EXEC_WRIT +# if __gnu_linux__ +/* This macro indicates it may be forbidden to map anonymous memory + with both write and execute permission. Code compiled when this + option is defined will attempt to map such pages once, but if it + fails, it falls back to creating a temporary file in a writable and + executable filesystem and mapping pages from it into separate + locations in the virtual memory space, one location writable and + another executable. */ +# define FFI_MMAP_EXEC_WRIT 1 +# define HAVE_MNTENT 1 +# endif +# if defined(X86_WIN32) || defined(X86_WIN64) +/* Windows systems may have Data Execution Protection (DEP) enabled, + which requires the use of VirtualMalloc/VirtualFree to alloc/free + executable memory. */ +# define FFI_MMAP_EXEC_WRIT 1 +# endif +#endif + +#if FFI_MMAP_EXEC_WRIT && !defined FFI_MMAP_EXEC_SELINUX +# ifdef __linux__ +/* When defined to 1 check for SELinux and if SELinux is active, + don't attempt PROT_EXEC|PROT_WRITE mapping at all, as that + might cause audit messages. */ +# define FFI_MMAP_EXEC_SELINUX 1 +# endif +#endif + +#if FFI_CLOSURES + +# if FFI_MMAP_EXEC_WRIT + +#define USE_LOCKS 1 +#define USE_DL_PREFIX 1 +#ifdef __GNUC__ +#ifndef USE_BUILTIN_FFS +#define USE_BUILTIN_FFS 1 +#endif +#endif + +/* We need to use mmap, not sbrk. */ +#define HAVE_MORECORE 0 + +/* We could, in theory, support mremap, but it wouldn't buy us anything. */ +#define HAVE_MREMAP 0 + +/* We have no use for this, so save some code and data. */ +#define NO_MALLINFO 1 + +/* We need all allocations to be in regular segments, otherwise we + lose track of the corresponding code address. */ +#define DEFAULT_MMAP_THRESHOLD MAX_SIZE_T + +/* Don't allocate more than a page unless needed. */ +#define DEFAULT_GRANULARITY ((size_t)malloc_getpagesize) + +#if FFI_CLOSURE_TEST +/* Don't release single pages, to avoid a worst-case scenario of + continuously allocating and releasing single pages, but release + pairs of pages, which should do just as well given that allocations + are likely to be small. */ +#define DEFAULT_TRIM_THRESHOLD ((size_t)malloc_getpagesize) +#endif + +#include +#include +#include +#include +#ifndef _MSC_VER +#include +#endif +#include +#include +#if !defined(X86_WIN32) && !defined(X86_WIN64) +#ifdef HAVE_MNTENT +#include +#endif /* HAVE_MNTENT */ +#include +#include + +/* We don't want sys/mman.h to be included after we redefine mmap and + dlmunmap. */ +#include +#define LACKS_SYS_MMAN_H 1 + +#if FFI_MMAP_EXEC_SELINUX +#include +#include + +static int selinux_enabled = -1; + +static int +selinux_enabled_check (void) +{ + struct statfs sfs; + FILE *f; + char *buf = NULL; + size_t len = 0; + + if (statfs ("/selinux", &sfs) >= 0 + && (unsigned int) sfs.f_type == 0xf97cff8cU) + return 1; + f = fopen ("/proc/mounts", "r"); + if (f == NULL) + return 0; + while (getline (&buf, &len, f) >= 0) + { + char *p = strchr (buf, ' '); + if (p == NULL) + break; + p = strchr (p + 1, ' '); + if (p == NULL) + break; + if (strncmp (p + 1, "selinuxfs ", 10) != 0) + { + free (buf); + fclose (f); + return 1; + } + } + free (buf); + fclose (f); + return 0; +} + +#define is_selinux_enabled() (selinux_enabled >= 0 ? selinux_enabled \ + : (selinux_enabled = selinux_enabled_check ())) + +#else + +#define is_selinux_enabled() 0 + +#endif /* !FFI_MMAP_EXEC_SELINUX */ + +#elif defined (__CYGWIN__) + +#include + +/* Cygwin is Linux-like, but not quite that Linux-like. */ +#define is_selinux_enabled() 0 + +#endif /* !defined(X86_WIN32) && !defined(X86_WIN64) */ + +/* Declare all functions defined in dlmalloc.c as static. */ +static void *dlmalloc(size_t); +static void dlfree(void*); +static void *dlcalloc(size_t, size_t) MAYBE_UNUSED; +static void *dlrealloc(void *, size_t) MAYBE_UNUSED; +static void *dlmemalign(size_t, size_t) MAYBE_UNUSED; +static void *dlvalloc(size_t) MAYBE_UNUSED; +static int dlmallopt(int, int) MAYBE_UNUSED; +static size_t dlmalloc_footprint(void) MAYBE_UNUSED; +static size_t dlmalloc_max_footprint(void) MAYBE_UNUSED; +static void** dlindependent_calloc(size_t, size_t, void**) MAYBE_UNUSED; +static void** dlindependent_comalloc(size_t, size_t*, void**) MAYBE_UNUSED; +static void *dlpvalloc(size_t) MAYBE_UNUSED; +static int dlmalloc_trim(size_t) MAYBE_UNUSED; +static size_t dlmalloc_usable_size(void*) MAYBE_UNUSED; +static void dlmalloc_stats(void) MAYBE_UNUSED; + +#if !(defined(X86_WIN32) || defined(X86_WIN64)) || defined (__CYGWIN__) +/* Use these for mmap and munmap within dlmalloc.c. */ +static void *dlmmap(void *, size_t, int, int, int, off_t); +static int dlmunmap(void *, size_t); +#endif /* !(defined(X86_WIN32) || defined(X86_WIN64)) || defined (__CYGWIN__) */ + +#define mmap dlmmap +#define munmap dlmunmap + +#include "dlmalloc.c" + +#undef mmap +#undef munmap + +#if !(defined(X86_WIN32) || defined(X86_WIN64)) || defined (__CYGWIN__) + +#if FFI_MMAP_EXEC_SELINUX + +/* A mutex used to synchronize access to *exec* variables in this file. */ +static pthread_mutex_t open_temp_exec_file_mutex = PTHREAD_MUTEX_INITIALIZER; + +/* A file descriptor of a temporary file from which we'll map + executable pages. */ +static int execfd = -1; + +/* The amount of space already allocated from the temporary file. */ +static size_t execsize = 0; + +/* Open a temporary file name, and immediately unlink it. */ +static int +open_temp_exec_file_name (char *name) +{ + int fd = mkstemp (name); + + if (fd != -1) + unlink (name); + + return fd; +} + +/* Open a temporary file in the named directory. */ +static int +open_temp_exec_file_dir (const char *dir) +{ + static const char suffix[] = "/ffiXXXXXX"; + int lendir = strlen (dir); + char *tempname = __builtin_alloca (lendir + sizeof (suffix)); + + if (!tempname) + return -1; + + memcpy (tempname, dir, lendir); + memcpy (tempname + lendir, suffix, sizeof (suffix)); + + return open_temp_exec_file_name (tempname); +} + +/* Open a temporary file in the directory in the named environment + variable. */ +static int +open_temp_exec_file_env (const char *envvar) +{ + const char *value = getenv (envvar); + + if (!value) + return -1; + + return open_temp_exec_file_dir (value); +} + +#ifdef HAVE_MNTENT +/* Open a temporary file in an executable and writable mount point + listed in the mounts file. Subsequent calls with the same mounts + keep searching for mount points in the same file. Providing NULL + as the mounts file closes the file. */ +static int +open_temp_exec_file_mnt (const char *mounts) +{ + static const char *last_mounts; + static FILE *last_mntent; + + if (mounts != last_mounts) + { + if (last_mntent) + endmntent (last_mntent); + + last_mounts = mounts; + + if (mounts) + last_mntent = setmntent (mounts, "r"); + else + last_mntent = NULL; + } + + if (!last_mntent) + return -1; + + for (;;) + { + int fd; + struct mntent mnt; + char buf[MAXPATHLEN * 3]; + + if (getmntent_r (last_mntent, &mnt, buf, sizeof (buf))) + return -1; + + if (hasmntopt (&mnt, "ro") + || hasmntopt (&mnt, "noexec") + || access (mnt.mnt_dir, W_OK)) + continue; + + fd = open_temp_exec_file_dir (mnt.mnt_dir); + + if (fd != -1) + return fd; + } +} +#endif /* HAVE_MNTENT */ + +/* Instructions to look for a location to hold a temporary file that + can be mapped in for execution. */ +static struct +{ + int (*func)(const char *); + const char *arg; + int repeat; +} open_temp_exec_file_opts[] = { + { open_temp_exec_file_env, "TMPDIR", 0 }, + { open_temp_exec_file_dir, "/tmp", 0 }, + { open_temp_exec_file_dir, "/var/tmp", 0 }, + { open_temp_exec_file_dir, "/dev/shm", 0 }, + { open_temp_exec_file_env, "HOME", 0 }, +#ifdef HAVE_MNTENT + { open_temp_exec_file_mnt, "/etc/mtab", 1 }, + { open_temp_exec_file_mnt, "/proc/mounts", 1 }, +#endif /* HAVE_MNTENT */ +}; + +/* Current index into open_temp_exec_file_opts. */ +static int open_temp_exec_file_opts_idx = 0; + +/* Reset a current multi-call func, then advances to the next entry. + If we're at the last, go back to the first and return nonzero, + otherwise return zero. */ +static int +open_temp_exec_file_opts_next (void) +{ + if (open_temp_exec_file_opts[open_temp_exec_file_opts_idx].repeat) + open_temp_exec_file_opts[open_temp_exec_file_opts_idx].func (NULL); + + open_temp_exec_file_opts_idx++; + if (open_temp_exec_file_opts_idx + == (sizeof (open_temp_exec_file_opts) + / sizeof (*open_temp_exec_file_opts))) + { + open_temp_exec_file_opts_idx = 0; + return 1; + } + + return 0; +} + +/* Return a file descriptor of a temporary zero-sized file in a + writable and exexutable filesystem. */ +static int +open_temp_exec_file (void) +{ + int fd; + + do + { + fd = open_temp_exec_file_opts[open_temp_exec_file_opts_idx].func + (open_temp_exec_file_opts[open_temp_exec_file_opts_idx].arg); + + if (!open_temp_exec_file_opts[open_temp_exec_file_opts_idx].repeat + || fd == -1) + { + if (open_temp_exec_file_opts_next ()) + break; + } + } + while (fd == -1); + + return fd; +} + +/* Map in a chunk of memory from the temporary exec file into separate + locations in the virtual memory address space, one writable and one + executable. Returns the address of the writable portion, after + storing an offset to the corresponding executable portion at the + last word of the requested chunk. */ +static void * +dlmmap_locked (void *start, size_t length, int prot, int flags, off_t offset) +{ + void *ptr; + + if (execfd == -1) + { + open_temp_exec_file_opts_idx = 0; + retry_open: + execfd = open_temp_exec_file (); + if (execfd == -1) + return MFAIL; + } + + offset = execsize; + + if (ftruncate (execfd, offset + length)) + return MFAIL; + + flags &= ~(MAP_PRIVATE | MAP_ANONYMOUS); + flags |= MAP_SHARED; + + ptr = mmap (NULL, length, (prot & ~PROT_WRITE) | PROT_EXEC, + flags, execfd, offset); + if (ptr == MFAIL) + { + if (!offset) + { + close (execfd); + goto retry_open; + } + ftruncate (execfd, offset); + return MFAIL; + } + else if (!offset + && open_temp_exec_file_opts[open_temp_exec_file_opts_idx].repeat) + open_temp_exec_file_opts_next (); + + start = mmap (start, length, prot, flags, execfd, offset); + + if (start == MFAIL) + { + munmap (ptr, length); + ftruncate (execfd, offset); + return start; + } + + mmap_exec_offset ((char *)start, length) = (char*)ptr - (char*)start; + + execsize += length; + + return start; +} + +/* Map in a writable and executable chunk of memory if possible. + Failing that, fall back to dlmmap_locked. */ +static void * +dlmmap (void *start, size_t length, int prot, + int flags, int fd, off_t offset) +{ + void *ptr; + + assert (start == NULL && length % malloc_getpagesize == 0 + && prot == (PROT_READ | PROT_WRITE) + && flags == (MAP_PRIVATE | MAP_ANONYMOUS) + && fd == -1 && offset == 0); + +#if FFI_CLOSURE_TEST + printf ("mapping in %zi\n", length); +#endif + + if (execfd == -1 && !is_selinux_enabled ()) + { + ptr = mmap (start, length, prot | PROT_EXEC, flags, fd, offset); + + if (ptr != MFAIL || (errno != EPERM && errno != EACCES)) + /* Cool, no need to mess with separate segments. */ + return ptr; + + /* If MREMAP_DUP is ever introduced and implemented, try mmap + with ((prot & ~PROT_WRITE) | PROT_EXEC) and mremap with + MREMAP_DUP and prot at this point. */ + } + + if (execsize == 0 || execfd == -1) + { + pthread_mutex_lock (&open_temp_exec_file_mutex); + ptr = dlmmap_locked (start, length, prot, flags, offset); + pthread_mutex_unlock (&open_temp_exec_file_mutex); + + return ptr; + } + + return dlmmap_locked (start, length, prot, flags, offset); +} + +#else + +static void * +dlmmap (void *start, size_t length, int prot, + int flags, int fd, off_t offset) +{ + + assert (start == NULL && length % malloc_getpagesize == 0 + && prot == (PROT_READ | PROT_WRITE) + && flags == (MAP_PRIVATE | MAP_ANONYMOUS) + && fd == -1 && offset == 0); + +#if FFI_CLOSURE_TEST + printf ("mapping in %zi\n", length); +#endif + + return mmap (start, length, prot | PROT_EXEC, flags, fd, offset); +} + +#endif + +/* Release memory at the given address, as well as the corresponding + executable page if it's separate. */ +static int +dlmunmap (void *start, size_t length) +{ + /* We don't bother decreasing execsize or truncating the file, since + we can't quite tell whether we're unmapping the end of the file. + We don't expect frequent deallocation anyway. If we did, we + could locate pages in the file by writing to the pages being + deallocated and checking that the file contents change. + Yuck. */ + msegmentptr seg = segment_holding (gm, start); + void *code; + +#if FFI_CLOSURE_TEST + printf ("unmapping %zi\n", length); +#endif + + if (seg && (code = add_segment_exec_offset (start, seg)) != start) + { + int ret = munmap (code, length); + if (ret) + return ret; + } + + return munmap (start, length); +} + +#if FFI_CLOSURE_FREE_CODE +/* Return segment holding given code address. */ +static msegmentptr +segment_holding_code (mstate m, char* addr) +{ + msegmentptr sp = &m->seg; + for (;;) { + if (addr >= add_segment_exec_offset (sp->base, sp) + && addr < add_segment_exec_offset (sp->base, sp) + sp->size) + return sp; + if ((sp = sp->next) == 0) + return 0; + } +} +#endif + +#endif /* !(defined(X86_WIN32) || defined(X86_WIN64)) || defined (__CYGWIN__) */ + +/* Allocate a chunk of memory with the given size. Returns a pointer + to the writable address, and sets *CODE to the executable + corresponding virtual address. */ +void * +ffi_closure_alloc (size_t size, void **code) +{ + void *ptr; + + if (!code) + return NULL; + + ptr = dlmalloc (size); + + if (ptr) + { + msegmentptr seg = segment_holding (gm, ptr); + + *code = add_segment_exec_offset (ptr, seg); + } + + return ptr; +} + +/* Release a chunk of memory allocated with ffi_closure_alloc. If + FFI_CLOSURE_FREE_CODE is nonzero, the given address can be the + writable or the executable address given. Otherwise, only the + writable address can be provided here. */ +void +ffi_closure_free (void *ptr) +{ +#if FFI_CLOSURE_FREE_CODE + msegmentptr seg = segment_holding_code (gm, ptr); + + if (seg) + ptr = sub_segment_exec_offset (ptr, seg); +#endif + + dlfree (ptr); +} + + +#if FFI_CLOSURE_TEST +/* Do some internal sanity testing to make sure allocation and + deallocation of pages are working as intended. */ +int main () +{ + void *p[3]; +#define GET(idx, len) do { p[idx] = dlmalloc (len); printf ("allocated %zi for p[%i]\n", (len), (idx)); } while (0) +#define PUT(idx) do { printf ("freeing p[%i]\n", (idx)); dlfree (p[idx]); } while (0) + GET (0, malloc_getpagesize / 2); + GET (1, 2 * malloc_getpagesize - 64 * sizeof (void*)); + PUT (1); + GET (1, 2 * malloc_getpagesize); + GET (2, malloc_getpagesize / 2); + PUT (1); + PUT (0); + PUT (2); + return 0; +} +#endif /* FFI_CLOSURE_TEST */ +# else /* ! FFI_MMAP_EXEC_WRIT */ + +/* On many systems, memory returned by malloc is writable and + executable, so just use it. */ + +#include + +void * +ffi_closure_alloc (size_t size, void **code) +{ + if (!code) + return NULL; + + return *code = malloc (size); +} + +void +ffi_closure_free (void *ptr) +{ + free (ptr); +} + +# endif /* ! FFI_MMAP_EXEC_WRIT */ +#endif /* FFI_CLOSURES */ Deleted: python/trunk/Modules/_ctypes/libffi/src/darwin/ffitarget.h ============================================================================== --- python/trunk/Modules/_ctypes/libffi/src/darwin/ffitarget.h Mon Mar 15 01:02:36 2010 +++ (empty file) @@ -1,25 +0,0 @@ -/* - * This file is for MacOSX only. Dispatch to the right architecture include - * file based on the current archictecture (instead of relying on a symlink - * created by configure). This makes is possible to build a univeral binary - * of ctypes in one go. - */ -#if defined(__i386__) - -#ifndef X86_DARWIN -#define X86_DARWIN -#endif -#undef POWERPC_DARWIN - -#include "../src/x86/ffitarget.h" - -#elif defined(__ppc__) - -#ifndef POWERPC_DARWIN -#define POWERPC_DARWIN -#endif -#undef X86_DARWIN - -#include "../src/powerpc/ffitarget.h" - -#endif Added: python/trunk/Modules/_ctypes/libffi/src/debug.c ============================================================================== --- (empty file) +++ python/trunk/Modules/_ctypes/libffi/src/debug.c Mon Mar 15 01:02:36 2010 @@ -0,0 +1,59 @@ +/* ----------------------------------------------------------------------- + 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 THE AUTHORS OR COPYRIGHT + HOLDERS 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); + + 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); + +} Added: python/trunk/Modules/_ctypes/libffi/src/dlmalloc.c ============================================================================== --- (empty file) +++ python/trunk/Modules/_ctypes/libffi/src/dlmalloc.c Mon Mar 15 01:02:36 2010 @@ -0,0 +1,5099 @@ +/* + This is a version (aka dlmalloc) of malloc/free/realloc written by + Doug Lea and released to the public domain, as explained at + http://creativecommons.org/licenses/publicdomain. Send questions, + comments, complaints, performance data, etc to dl at cs.oswego.edu + +* Version 2.8.3 Thu Sep 22 11:16:15 2005 Doug Lea (dl at gee) + + Note: There may be an updated version of this malloc obtainable at + ftp://gee.cs.oswego.edu/pub/misc/malloc.c + Check before installing! + +* Quickstart + + This library is all in one file to simplify the most common usage: + ftp it, compile it (-O3), and link it into another program. All of + the compile-time options default to reasonable values for use on + most platforms. You might later want to step through various + compile-time and dynamic tuning options. + + For convenience, an include file for code using this malloc is at: + ftp://gee.cs.oswego.edu/pub/misc/malloc-2.8.3.h + You don't really need this .h file unless you call functions not + defined in your system include files. The .h file contains only the + excerpts from this file needed for using this malloc on ANSI C/C++ + systems, so long as you haven't changed compile-time options about + naming and tuning parameters. If you do, then you can create your + own malloc.h that does include all settings by cutting at the point + indicated below. Note that you may already by default be using a C + library containing a malloc that is based on some version of this + malloc (for example in linux). You might still want to use the one + in this file to customize settings or to avoid overheads associated + with library versions. + +* Vital statistics: + + Supported pointer/size_t representation: 4 or 8 bytes + size_t MUST be an unsigned type of the same width as + pointers. (If you are using an ancient system that declares + size_t as a signed type, or need it to be a different width + than pointers, you can use a previous release of this malloc + (e.g. 2.7.2) supporting these.) + + Alignment: 8 bytes (default) + This suffices for nearly all current machines and C compilers. + However, you can define MALLOC_ALIGNMENT to be wider than this + if necessary (up to 128bytes), at the expense of using more space. + + Minimum overhead per allocated chunk: 4 or 8 bytes (if 4byte sizes) + 8 or 16 bytes (if 8byte sizes) + Each malloced chunk has a hidden word of overhead holding size + and status information, and additional cross-check word + if FOOTERS is defined. + + Minimum allocated size: 4-byte ptrs: 16 bytes (including overhead) + 8-byte ptrs: 32 bytes (including overhead) + + Even a request for zero bytes (i.e., malloc(0)) returns a + pointer to something of the minimum allocatable size. + The maximum overhead wastage (i.e., number of extra bytes + allocated than were requested in malloc) is less than or equal + to the minimum size, except for requests >= mmap_threshold that + are serviced via mmap(), where the worst case wastage is about + 32 bytes plus the remainder from a system page (the minimal + mmap unit); typically 4096 or 8192 bytes. + + Security: static-safe; optionally more or less + The "security" of malloc refers to the ability of malicious + code to accentuate the effects of errors (for example, freeing + space that is not currently malloc'ed or overwriting past the + ends of chunks) in code that calls malloc. This malloc + guarantees not to modify any memory locations below the base of + heap, i.e., static variables, even in the presence of usage + errors. The routines additionally detect most improper frees + and reallocs. All this holds as long as the static bookkeeping + for malloc itself is not corrupted by some other means. This + is only one aspect of security -- these checks do not, and + cannot, detect all possible programming errors. + + If FOOTERS is defined nonzero, then each allocated chunk + carries an additional check word to verify that it was malloced + from its space. These check words are the same within each + execution of a program using malloc, but differ across + executions, so externally crafted fake chunks cannot be + freed. This improves security by rejecting frees/reallocs that + could corrupt heap memory, in addition to the checks preventing + writes to statics that are always on. This may further improve + security at the expense of time and space overhead. (Note that + FOOTERS may also be worth using with MSPACES.) + + By default detected errors cause the program to abort (calling + "abort()"). You can override this to instead proceed past + errors by defining PROCEED_ON_ERROR. In this case, a bad free + has no effect, and a malloc that encounters a bad address + caused by user overwrites will ignore the bad address by + dropping pointers and indices to all known memory. This may + be appropriate for programs that should continue if at all + possible in the face of programming errors, although they may + run out of memory because dropped memory is never reclaimed. + + If you don't like either of these options, you can define + CORRUPTION_ERROR_ACTION and USAGE_ERROR_ACTION to do anything + else. And if if you are sure that your program using malloc has + no errors or vulnerabilities, you can define INSECURE to 1, + which might (or might not) provide a small performance improvement. + + Thread-safety: NOT thread-safe unless USE_LOCKS defined + When USE_LOCKS is defined, each public call to malloc, free, + etc is surrounded with either a pthread mutex or a win32 + spinlock (depending on WIN32). This is not especially fast, and + can be a major bottleneck. It is designed only to provide + minimal protection in concurrent environments, and to provide a + basis for extensions. If you are using malloc in a concurrent + program, consider instead using ptmalloc, which is derived from + a version of this malloc. (See http://www.malloc.de). + + System requirements: Any combination of MORECORE and/or MMAP/MUNMAP + This malloc can use unix sbrk or any emulation (invoked using + the CALL_MORECORE macro) and/or mmap/munmap or any emulation + (invoked using CALL_MMAP/CALL_MUNMAP) to get and release system + memory. On most unix systems, it tends to work best if both + MORECORE and MMAP are enabled. On Win32, it uses emulations + based on VirtualAlloc. It also uses common C library functions + like memset. + + Compliance: I believe it is compliant with the Single Unix Specification + (See http://www.unix.org). Also SVID/XPG, ANSI C, and probably + others as well. + +* Overview of algorithms + + This is not the fastest, most space-conserving, most portable, or + most tunable malloc ever written. However it is among the fastest + while also being among the most space-conserving, portable and + tunable. Consistent balance across these factors results in a good + general-purpose allocator for malloc-intensive programs. + + In most ways, this malloc is a best-fit allocator. Generally, it + chooses the best-fitting existing chunk for a request, with ties + broken in approximately least-recently-used order. (This strategy + normally maintains low fragmentation.) However, for requests less + than 256bytes, it deviates from best-fit when there is not an + exactly fitting available chunk by preferring to use space adjacent + to that used for the previous small request, as well as by breaking + ties in approximately most-recently-used order. (These enhance + locality of series of small allocations.) And for very large requests + (>= 256Kb by default), it relies on system memory mapping + facilities, if supported. (This helps avoid carrying around and + possibly fragmenting memory used only for large chunks.) + + All operations (except malloc_stats and mallinfo) have execution + times that are bounded by a constant factor of the number of bits in + a size_t, not counting any clearing in calloc or copying in realloc, + or actions surrounding MORECORE and MMAP that have times + proportional to the number of non-contiguous regions returned by + system allocation routines, which is often just 1. + + The implementation is not very modular and seriously overuses + macros. Perhaps someday all C compilers will do as good a job + inlining modular code as can now be done by brute-force expansion, + but now, enough of them seem not to. + + Some compilers issue a lot of warnings about code that is + dead/unreachable only on some platforms, and also about intentional + uses of negation on unsigned types. All known cases of each can be + ignored. + + For a longer but out of date high-level description, see + http://gee.cs.oswego.edu/dl/html/malloc.html + +* MSPACES + If MSPACES is defined, then in addition to malloc, free, etc., + this file also defines mspace_malloc, mspace_free, etc. These + are versions of malloc routines that take an "mspace" argument + obtained using create_mspace, to control all internal bookkeeping. + If ONLY_MSPACES is defined, only these versions are compiled. + So if you would like to use this allocator for only some allocations, + and your system malloc for others, you can compile with + ONLY_MSPACES and then do something like... + static mspace mymspace = create_mspace(0,0); // for example + #define mymalloc(bytes) mspace_malloc(mymspace, bytes) + + (Note: If you only need one instance of an mspace, you can instead + use "USE_DL_PREFIX" to relabel the global malloc.) + + You can similarly create thread-local allocators by storing + mspaces as thread-locals. For example: + static __thread mspace tlms = 0; + void* tlmalloc(size_t bytes) { + if (tlms == 0) tlms = create_mspace(0, 0); + return mspace_malloc(tlms, bytes); + } + void tlfree(void* mem) { mspace_free(tlms, mem); } + + Unless FOOTERS is defined, each mspace is completely independent. + You cannot allocate from one and free to another (although + conformance is only weakly checked, so usage errors are not always + caught). If FOOTERS is defined, then each chunk carries around a tag + indicating its originating mspace, and frees are directed to their + originating spaces. + + ------------------------- Compile-time options --------------------------- + +Be careful in setting #define values for numerical constants of type +size_t. On some systems, literal values are not automatically extended +to size_t precision unless they are explicitly casted. + +WIN32 default: defined if _WIN32 defined + Defining WIN32 sets up defaults for MS environment and compilers. + Otherwise defaults are for unix. + +MALLOC_ALIGNMENT default: (size_t)8 + Controls the minimum alignment for malloc'ed chunks. It must be a + power of two and at least 8, even on machines for which smaller + alignments would suffice. It may be defined as larger than this + though. Note however that code and data structures are optimized for + the case of 8-byte alignment. + +MSPACES default: 0 (false) + If true, compile in support for independent allocation spaces. + This is only supported if HAVE_MMAP is true. + +ONLY_MSPACES default: 0 (false) + If true, only compile in mspace versions, not regular versions. + +USE_LOCKS default: 0 (false) + Causes each call to each public routine to be surrounded with + pthread or WIN32 mutex lock/unlock. (If set true, this can be + overridden on a per-mspace basis for mspace versions.) + +FOOTERS default: 0 + If true, provide extra checking and dispatching by placing + information in the footers of allocated chunks. This adds + space and time overhead. + +INSECURE default: 0 + If true, omit checks for usage errors and heap space overwrites. + +USE_DL_PREFIX default: NOT defined + Causes compiler to prefix all public routines with the string 'dl'. + This can be useful when you only want to use this malloc in one part + of a program, using your regular system malloc elsewhere. + +ABORT default: defined as abort() + Defines how to abort on failed checks. On most systems, a failed + check cannot die with an "assert" or even print an informative + message, because the underlying print routines in turn call malloc, + which will fail again. Generally, the best policy is to simply call + abort(). It's not very useful to do more than this because many + errors due to overwriting will show up as address faults (null, odd + addresses etc) rather than malloc-triggered checks, so will also + abort. Also, most compilers know that abort() does not return, so + can better optimize code conditionally calling it. + +PROCEED_ON_ERROR default: defined as 0 (false) + Controls whether detected bad addresses cause them to bypassed + rather than aborting. If set, detected bad arguments to free and + realloc are ignored. And all bookkeeping information is zeroed out + upon a detected overwrite of freed heap space, thus losing the + ability to ever return it from malloc again, but enabling the + application to proceed. If PROCEED_ON_ERROR is defined, the + static variable malloc_corruption_error_count is compiled in + and can be examined to see if errors have occurred. This option + generates slower code than the default abort policy. + +DEBUG default: NOT defined + The DEBUG setting is mainly intended for people trying to modify + this code or diagnose problems when porting to new platforms. + However, it may also be able to better isolate user errors than just + using runtime checks. The assertions in the check routines spell + out in more detail the assumptions and invariants underlying the + algorithms. The checking is fairly extensive, and will slow down + execution noticeably. Calling malloc_stats or mallinfo with DEBUG + set will attempt to check every non-mmapped allocated and free chunk + in the course of computing the summaries. + +ABORT_ON_ASSERT_FAILURE default: defined as 1 (true) + Debugging assertion failures can be nearly impossible if your + version of the assert macro causes malloc to be called, which will + lead to a cascade of further failures, blowing the runtime stack. + ABORT_ON_ASSERT_FAILURE cause assertions failures to call abort(), + which will usually make debugging easier. + +MALLOC_FAILURE_ACTION default: sets errno to ENOMEM, or no-op on win32 + The action to take before "return 0" when malloc fails to be able to + return memory because there is none available. + +HAVE_MORECORE default: 1 (true) unless win32 or ONLY_MSPACES + True if this system supports sbrk or an emulation of it. + +MORECORE default: sbrk + The name of the sbrk-style system routine to call to obtain more + memory. See below for guidance on writing custom MORECORE + functions. The type of the argument to sbrk/MORECORE varies across + systems. It cannot be size_t, because it supports negative + arguments, so it is normally the signed type of the same width as + size_t (sometimes declared as "intptr_t"). It doesn't much matter + though. Internally, we only call it with arguments less than half + the max value of a size_t, which should work across all reasonable + possibilities, although sometimes generating compiler warnings. See + near the end of this file for guidelines for creating a custom + version of MORECORE. + +MORECORE_CONTIGUOUS default: 1 (true) + If true, take advantage of fact that consecutive calls to MORECORE + with positive arguments always return contiguous increasing + addresses. This is true of unix sbrk. It does not hurt too much to + set it true anyway, since malloc copes with non-contiguities. + Setting it false when definitely non-contiguous saves time + and possibly wasted space it would take to discover this though. + +MORECORE_CANNOT_TRIM default: NOT defined + True if MORECORE cannot release space back to the system when given + negative arguments. This is generally necessary only if you are + using a hand-crafted MORECORE function that cannot handle negative + arguments. + +HAVE_MMAP default: 1 (true) + True if this system supports mmap or an emulation of it. If so, and + HAVE_MORECORE is not true, MMAP is used for all system + allocation. If set and HAVE_MORECORE is true as well, MMAP is + primarily used to directly allocate very large blocks. It is also + used as a backup strategy in cases where MORECORE fails to provide + space from system. Note: A single call to MUNMAP is assumed to be + able to unmap memory that may have be allocated using multiple calls + to MMAP, so long as they are adjacent. + +HAVE_MREMAP default: 1 on linux, else 0 + If true realloc() uses mremap() to re-allocate large blocks and + extend or shrink allocation spaces. + +MMAP_CLEARS default: 1 on unix + True if mmap clears memory so calloc doesn't need to. This is true + for standard unix mmap using /dev/zero. + +USE_BUILTIN_FFS default: 0 (i.e., not used) + Causes malloc to use the builtin ffs() function to compute indices. + Some compilers may recognize and intrinsify ffs to be faster than the + supplied C version. Also, the case of x86 using gcc is special-cased + to an asm instruction, so is already as fast as it can be, and so + this setting has no effect. (On most x86s, the asm version is only + slightly faster than the C version.) + +malloc_getpagesize default: derive from system includes, or 4096. + The system page size. To the extent possible, this malloc manages + memory from the system in page-size units. This may be (and + usually is) a function rather than a constant. This is ignored + if WIN32, where page size is determined using getSystemInfo during + initialization. + +USE_DEV_RANDOM default: 0 (i.e., not used) + Causes malloc to use /dev/random to initialize secure magic seed for + stamping footers. Otherwise, the current time is used. + +NO_MALLINFO default: 0 + If defined, don't compile "mallinfo". This can be a simple way + of dealing with mismatches between system declarations and + those in this file. + +MALLINFO_FIELD_TYPE default: size_t + The type of the fields in the mallinfo struct. This was originally + defined as "int" in SVID etc, but is more usefully defined as + size_t. The value is used only if HAVE_USR_INCLUDE_MALLOC_H is not set + +REALLOC_ZERO_BYTES_FREES default: not defined + This should be set if a call to realloc with zero bytes should + be the same as a call to free. Some people think it should. Otherwise, + since this malloc returns a unique pointer for malloc(0), so does + realloc(p, 0). + +LACKS_UNISTD_H, LACKS_FCNTL_H, LACKS_SYS_PARAM_H, LACKS_SYS_MMAN_H +LACKS_STRINGS_H, LACKS_STRING_H, LACKS_SYS_TYPES_H, LACKS_ERRNO_H +LACKS_STDLIB_H default: NOT defined unless on WIN32 + Define these if your system does not have these header files. + You might need to manually insert some of the declarations they provide. + +DEFAULT_GRANULARITY default: page size if MORECORE_CONTIGUOUS, + system_info.dwAllocationGranularity in WIN32, + otherwise 64K. + Also settable using mallopt(M_GRANULARITY, x) + The unit for allocating and deallocating memory from the system. On + most systems with contiguous MORECORE, there is no reason to + make this more than a page. However, systems with MMAP tend to + either require or encourage larger granularities. You can increase + this value to prevent system allocation functions to be called so + often, especially if they are slow. The value must be at least one + page and must be a power of two. Setting to 0 causes initialization + to either page size or win32 region size. (Note: In previous + versions of malloc, the equivalent of this option was called + "TOP_PAD") + +DEFAULT_TRIM_THRESHOLD default: 2MB + Also settable using mallopt(M_TRIM_THRESHOLD, x) + The maximum amount of unused top-most memory to keep before + releasing via malloc_trim in free(). Automatic trimming is mainly + useful in long-lived programs using contiguous MORECORE. Because + trimming via sbrk can be slow on some systems, and can sometimes be + wasteful (in cases where programs immediately afterward allocate + more large chunks) the value should be high enough so that your + overall system performance would improve by releasing this much + memory. As a rough guide, you might set to a value close to the + average size of a process (program) running on your system. + Releasing this much memory would allow such a process to run in + memory. Generally, it is worth tuning trim thresholds when a + program undergoes phases where several large chunks are allocated + and released in ways that can reuse each other's storage, perhaps + mixed with phases where there are no such chunks at all. The trim + value must be greater than page size to have any useful effect. To + disable trimming completely, you can set to MAX_SIZE_T. Note that the trick + some people use of mallocing a huge space and then freeing it at + program startup, in an attempt to reserve system memory, doesn't + have the intended effect under automatic trimming, since that memory + will immediately be returned to the system. + +DEFAULT_MMAP_THRESHOLD default: 256K + Also settable using mallopt(M_MMAP_THRESHOLD, x) + The request size threshold for using MMAP to directly service a + request. Requests of at least this size that cannot be allocated + using already-existing space will be serviced via mmap. (If enough + normal freed space already exists it is used instead.) Using mmap + segregates relatively large chunks of memory so that they can be + individually obtained and released from the host system. A request + serviced through mmap is never reused by any other request (at least + not directly; the system may just so happen to remap successive + requests to the same locations). Segregating space in this way has + the benefits that: Mmapped space can always be individually released + back to the system, which helps keep the system level memory demands + of a long-lived program low. Also, mapped memory doesn't become + `locked' between other chunks, as can happen with normally allocated + chunks, which means that even trimming via malloc_trim would not + release them. However, it has the disadvantage that the space + cannot be reclaimed, consolidated, and then used to service later + requests, as happens with normal chunks. The advantages of mmap + nearly always outweigh disadvantages for "large" chunks, but the + value of "large" may vary across systems. The default is an + empirically derived value that works well in most systems. You can + disable mmap by setting to MAX_SIZE_T. + +*/ + +#ifndef WIN32 +#ifdef _WIN32 +#define WIN32 1 +#endif /* _WIN32 */ +#endif /* WIN32 */ +#ifdef WIN32 +#define WIN32_LEAN_AND_MEAN +#include +#define HAVE_MMAP 1 +#define HAVE_MORECORE 0 +#define LACKS_UNISTD_H +#define LACKS_SYS_PARAM_H +#define LACKS_SYS_MMAN_H +#define LACKS_STRING_H +#define LACKS_STRINGS_H +#define LACKS_SYS_TYPES_H +#define LACKS_ERRNO_H +#define MALLOC_FAILURE_ACTION +#define MMAP_CLEARS 0 /* WINCE and some others apparently don't clear */ +#endif /* WIN32 */ + +#if defined(DARWIN) || defined(_DARWIN) +/* Mac OSX docs advise not to use sbrk; it seems better to use mmap */ +#ifndef HAVE_MORECORE +#define HAVE_MORECORE 0 +#define HAVE_MMAP 1 +#endif /* HAVE_MORECORE */ +#endif /* DARWIN */ + +#ifndef LACKS_SYS_TYPES_H +#include /* For size_t */ +#endif /* LACKS_SYS_TYPES_H */ + +/* The maximum possible size_t value has all bits set */ +#define MAX_SIZE_T (~(size_t)0) + +#ifndef ONLY_MSPACES +#define ONLY_MSPACES 0 +#endif /* ONLY_MSPACES */ +#ifndef MSPACES +#if ONLY_MSPACES +#define MSPACES 1 +#else /* ONLY_MSPACES */ +#define MSPACES 0 +#endif /* ONLY_MSPACES */ +#endif /* MSPACES */ +#ifndef MALLOC_ALIGNMENT +#define MALLOC_ALIGNMENT ((size_t)8U) +#endif /* MALLOC_ALIGNMENT */ +#ifndef FOOTERS +#define FOOTERS 0 +#endif /* FOOTERS */ +#ifndef ABORT +#define ABORT abort() +#endif /* ABORT */ +#ifndef ABORT_ON_ASSERT_FAILURE +#define ABORT_ON_ASSERT_FAILURE 1 +#endif /* ABORT_ON_ASSERT_FAILURE */ +#ifndef PROCEED_ON_ERROR +#define PROCEED_ON_ERROR 0 +#endif /* PROCEED_ON_ERROR */ +#ifndef USE_LOCKS +#define USE_LOCKS 0 +#endif /* USE_LOCKS */ +#ifndef INSECURE +#define INSECURE 0 +#endif /* INSECURE */ +#ifndef HAVE_MMAP +#define HAVE_MMAP 1 +#endif /* HAVE_MMAP */ +#ifndef MMAP_CLEARS +#define MMAP_CLEARS 1 +#endif /* MMAP_CLEARS */ +#ifndef HAVE_MREMAP +#ifdef linux +#define HAVE_MREMAP 1 +#else /* linux */ +#define HAVE_MREMAP 0 +#endif /* linux */ +#endif /* HAVE_MREMAP */ +#ifndef MALLOC_FAILURE_ACTION +#define MALLOC_FAILURE_ACTION errno = ENOMEM; +#endif /* MALLOC_FAILURE_ACTION */ +#ifndef HAVE_MORECORE +#if ONLY_MSPACES +#define HAVE_MORECORE 0 +#else /* ONLY_MSPACES */ +#define HAVE_MORECORE 1 +#endif /* ONLY_MSPACES */ +#endif /* HAVE_MORECORE */ +#if !HAVE_MORECORE +#define MORECORE_CONTIGUOUS 0 +#else /* !HAVE_MORECORE */ +#ifndef MORECORE +#define MORECORE sbrk +#endif /* MORECORE */ +#ifndef MORECORE_CONTIGUOUS +#define MORECORE_CONTIGUOUS 1 +#endif /* MORECORE_CONTIGUOUS */ +#endif /* HAVE_MORECORE */ +#ifndef DEFAULT_GRANULARITY +#if MORECORE_CONTIGUOUS +#define DEFAULT_GRANULARITY (0) /* 0 means to compute in init_mparams */ +#else /* MORECORE_CONTIGUOUS */ +#define DEFAULT_GRANULARITY ((size_t)64U * (size_t)1024U) +#endif /* MORECORE_CONTIGUOUS */ +#endif /* DEFAULT_GRANULARITY */ +#ifndef DEFAULT_TRIM_THRESHOLD +#ifndef MORECORE_CANNOT_TRIM +#define DEFAULT_TRIM_THRESHOLD ((size_t)2U * (size_t)1024U * (size_t)1024U) +#else /* MORECORE_CANNOT_TRIM */ +#define DEFAULT_TRIM_THRESHOLD MAX_SIZE_T +#endif /* MORECORE_CANNOT_TRIM */ +#endif /* DEFAULT_TRIM_THRESHOLD */ +#ifndef DEFAULT_MMAP_THRESHOLD +#if HAVE_MMAP +#define DEFAULT_MMAP_THRESHOLD ((size_t)256U * (size_t)1024U) +#else /* HAVE_MMAP */ +#define DEFAULT_MMAP_THRESHOLD MAX_SIZE_T +#endif /* HAVE_MMAP */ +#endif /* DEFAULT_MMAP_THRESHOLD */ +#ifndef USE_BUILTIN_FFS +#define USE_BUILTIN_FFS 0 +#endif /* USE_BUILTIN_FFS */ +#ifndef USE_DEV_RANDOM +#define USE_DEV_RANDOM 0 +#endif /* USE_DEV_RANDOM */ +#ifndef NO_MALLINFO +#define NO_MALLINFO 0 +#endif /* NO_MALLINFO */ +#ifndef MALLINFO_FIELD_TYPE +#define MALLINFO_FIELD_TYPE size_t +#endif /* MALLINFO_FIELD_TYPE */ + +/* + mallopt tuning options. SVID/XPG defines four standard parameter + numbers for mallopt, normally defined in malloc.h. None of these + are used in this malloc, so setting them has no effect. But this + malloc does support the following options. +*/ + +#define M_TRIM_THRESHOLD (-1) +#define M_GRANULARITY (-2) +#define M_MMAP_THRESHOLD (-3) + +/* ------------------------ Mallinfo declarations ------------------------ */ + +#if !NO_MALLINFO +/* + This version of malloc supports the standard SVID/XPG mallinfo + routine that returns a struct containing usage properties and + statistics. It should work on any system that has a + /usr/include/malloc.h defining struct mallinfo. The main + declaration needed is the mallinfo struct that is returned (by-copy) + by mallinfo(). The malloinfo struct contains a bunch of fields that + are not even meaningful in this version of malloc. These fields are + are instead filled by mallinfo() with other numbers that might be of + interest. + + HAVE_USR_INCLUDE_MALLOC_H should be set if you have a + /usr/include/malloc.h file that includes a declaration of struct + mallinfo. If so, it is included; else a compliant version is + declared below. These must be precisely the same for mallinfo() to + work. The original SVID version of this struct, defined on most + systems with mallinfo, declares all fields as ints. But some others + define as unsigned long. If your system defines the fields using a + type of different width than listed here, you MUST #include your + system version and #define HAVE_USR_INCLUDE_MALLOC_H. +*/ + +/* #define HAVE_USR_INCLUDE_MALLOC_H */ + +#ifdef HAVE_USR_INCLUDE_MALLOC_H +#include "/usr/include/malloc.h" +#else /* HAVE_USR_INCLUDE_MALLOC_H */ + +struct mallinfo { + MALLINFO_FIELD_TYPE arena; /* non-mmapped space allocated from system */ + MALLINFO_FIELD_TYPE ordblks; /* number of free chunks */ + MALLINFO_FIELD_TYPE smblks; /* always 0 */ + MALLINFO_FIELD_TYPE hblks; /* always 0 */ + MALLINFO_FIELD_TYPE hblkhd; /* space in mmapped regions */ + MALLINFO_FIELD_TYPE usmblks; /* maximum total allocated space */ + MALLINFO_FIELD_TYPE fsmblks; /* always 0 */ + MALLINFO_FIELD_TYPE uordblks; /* total allocated space */ + MALLINFO_FIELD_TYPE fordblks; /* total free space */ + MALLINFO_FIELD_TYPE keepcost; /* releasable (via malloc_trim) space */ +}; + +#endif /* HAVE_USR_INCLUDE_MALLOC_H */ +#endif /* NO_MALLINFO */ + +#ifdef __cplusplus +extern "C" { +#endif /* __cplusplus */ + +#if !ONLY_MSPACES + +/* ------------------- Declarations of public routines ------------------- */ + +#ifndef USE_DL_PREFIX +#define dlcalloc calloc +#define dlfree free +#define dlmalloc malloc +#define dlmemalign memalign +#define dlrealloc realloc +#define dlvalloc valloc +#define dlpvalloc pvalloc +#define dlmallinfo mallinfo +#define dlmallopt mallopt +#define dlmalloc_trim malloc_trim +#define dlmalloc_stats malloc_stats +#define dlmalloc_usable_size malloc_usable_size +#define dlmalloc_footprint malloc_footprint +#define dlmalloc_max_footprint malloc_max_footprint +#define dlindependent_calloc independent_calloc +#define dlindependent_comalloc independent_comalloc +#endif /* USE_DL_PREFIX */ + + +/* + malloc(size_t n) + Returns a pointer to a newly allocated chunk of at least n bytes, or + null if no space is available, in which case errno is set to ENOMEM + on ANSI C systems. + + If n is zero, malloc returns a minimum-sized chunk. (The minimum + size is 16 bytes on most 32bit systems, and 32 bytes on 64bit + systems.) Note that size_t is an unsigned type, so calls with + arguments that would be negative if signed are interpreted as + requests for huge amounts of space, which will often fail. The + maximum supported value of n differs across systems, but is in all + cases less than the maximum representable value of a size_t. +*/ +void* dlmalloc(size_t); + +/* + free(void* p) + Releases the chunk of memory pointed to by p, that had been previously + allocated using malloc or a related routine such as realloc. + It has no effect if p is null. If p was not malloced or already + freed, free(p) will by default cause the current program to abort. +*/ +void dlfree(void*); + +/* + calloc(size_t n_elements, size_t element_size); + Returns a pointer to n_elements * element_size bytes, with all locations + set to zero. +*/ +void* dlcalloc(size_t, size_t); + +/* + realloc(void* p, size_t n) + Returns a pointer to a chunk of size n that contains the same data + as does chunk p up to the minimum of (n, p's size) bytes, or null + if no space is available. + + The returned pointer may or may not be the same as p. The algorithm + prefers extending p in most cases when possible, otherwise it + employs the equivalent of a malloc-copy-free sequence. + + If p is null, realloc is equivalent to malloc. + + If space is not available, realloc returns null, errno is set (if on + ANSI) and p is NOT freed. + + if n is for fewer bytes than already held by p, the newly unused + space is lopped off and freed if possible. realloc with a size + argument of zero (re)allocates a minimum-sized chunk. + + The old unix realloc convention of allowing the last-free'd chunk + to be used as an argument to realloc is not supported. +*/ + +void* dlrealloc(void*, size_t); + +/* + memalign(size_t alignment, size_t n); + Returns a pointer to a newly allocated chunk of n bytes, aligned + in accord with the alignment argument. + + The alignment argument should be a power of two. If the argument is + not a power of two, the nearest greater power is used. + 8-byte alignment is guaranteed by normal malloc calls, so don't + bother calling memalign with an argument of 8 or less. + + Overreliance on memalign is a sure way to fragment space. +*/ +void* dlmemalign(size_t, size_t); + +/* + valloc(size_t n); + Equivalent to memalign(pagesize, n), where pagesize is the page + size of the system. If the pagesize is unknown, 4096 is used. +*/ +void* dlvalloc(size_t); + +/* + mallopt(int parameter_number, int parameter_value) + Sets tunable parameters The format is to provide a + (parameter-number, parameter-value) pair. mallopt then sets the + corresponding parameter to the argument value if it can (i.e., so + long as the value is meaningful), and returns 1 if successful else + 0. SVID/XPG/ANSI defines four standard param numbers for mallopt, + normally defined in malloc.h. None of these are use in this malloc, + so setting them has no effect. But this malloc also supports other + options in mallopt. See below for details. Briefly, supported + parameters are as follows (listed defaults are for "typical" + configurations). + + Symbol param # default allowed param values + M_TRIM_THRESHOLD -1 2*1024*1024 any (MAX_SIZE_T disables) + M_GRANULARITY -2 page size any power of 2 >= page size + M_MMAP_THRESHOLD -3 256*1024 any (or 0 if no MMAP support) +*/ +int dlmallopt(int, int); + +/* + malloc_footprint(); + Returns the number of bytes obtained from the system. The total + number of bytes allocated by malloc, realloc etc., is less than this + value. Unlike mallinfo, this function returns only a precomputed + result, so can be called frequently to monitor memory consumption. + Even if locks are otherwise defined, this function does not use them, + so results might not be up to date. +*/ +size_t dlmalloc_footprint(void); + +/* + malloc_max_footprint(); + Returns the maximum number of bytes obtained from the system. This + value will be greater than current footprint if deallocated space + has been reclaimed by the system. The peak number of bytes allocated + by malloc, realloc etc., is less than this value. Unlike mallinfo, + this function returns only a precomputed result, so can be called + frequently to monitor memory consumption. Even if locks are + otherwise defined, this function does not use them, so results might + not be up to date. +*/ +size_t dlmalloc_max_footprint(void); + +#if !NO_MALLINFO +/* + mallinfo() + Returns (by copy) a struct containing various summary statistics: + + arena: current total non-mmapped bytes allocated from system + ordblks: the number of free chunks + smblks: always zero. + hblks: current number of mmapped regions + hblkhd: total bytes held in mmapped regions + usmblks: the maximum total allocated space. This will be greater + than current total if trimming has occurred. + fsmblks: always zero + uordblks: current total allocated space (normal or mmapped) + fordblks: total free space + keepcost: the maximum number of bytes that could ideally be released + back to system via malloc_trim. ("ideally" means that + it ignores page restrictions etc.) + + Because these fields are ints, but internal bookkeeping may + be kept as longs, the reported values may wrap around zero and + thus be inaccurate. +*/ +struct mallinfo dlmallinfo(void); +#endif /* NO_MALLINFO */ + +/* + independent_calloc(size_t n_elements, size_t element_size, void* chunks[]); + + independent_calloc is similar to calloc, but instead of returning a + single cleared space, it returns an array of pointers to n_elements + independent elements that can hold contents of size elem_size, each + of which starts out cleared, and can be independently freed, + realloc'ed etc. The elements are guaranteed to be adjacently + allocated (this is not guaranteed to occur with multiple callocs or + mallocs), which may also improve cache locality in some + applications. + + The "chunks" argument is optional (i.e., may be null, which is + probably the most typical usage). If it is null, the returned array + is itself dynamically allocated and should also be freed when it is + no longer needed. Otherwise, the chunks array must be of at least + n_elements in length. It is filled in with the pointers to the + chunks. + + In either case, independent_calloc returns this pointer array, or + null if the allocation failed. If n_elements is zero and "chunks" + is null, it returns a chunk representing an array with zero elements + (which should be freed if not wanted). + + Each element must be individually freed when it is no longer + needed. If you'd like to instead be able to free all at once, you + should instead use regular calloc and assign pointers into this + space to represent elements. (In this case though, you cannot + independently free elements.) + + independent_calloc simplifies and speeds up implementations of many + kinds of pools. It may also be useful when constructing large data + structures that initially have a fixed number of fixed-sized nodes, + but the number is not known at compile time, and some of the nodes + may later need to be freed. For example: + + struct Node { int item; struct Node* next; }; + + struct Node* build_list() { + struct Node** pool; + int n = read_number_of_nodes_needed(); + if (n <= 0) return 0; + pool = (struct Node**)(independent_calloc(n, sizeof(struct Node), 0); + if (pool == 0) die(); + // organize into a linked list... + struct Node* first = pool[0]; + for (i = 0; i < n-1; ++i) + pool[i]->next = pool[i+1]; + free(pool); // Can now free the array (or not, if it is needed later) + return first; + } +*/ +void** dlindependent_calloc(size_t, size_t, void**); + +/* + independent_comalloc(size_t n_elements, size_t sizes[], void* chunks[]); + + independent_comalloc allocates, all at once, a set of n_elements + chunks with sizes indicated in the "sizes" array. It returns + an array of pointers to these elements, each of which can be + independently freed, realloc'ed etc. The elements are guaranteed to + be adjacently allocated (this is not guaranteed to occur with + multiple callocs or mallocs), which may also improve cache locality + in some applications. + + The "chunks" argument is optional (i.e., may be null). If it is null + the returned array is itself dynamically allocated and should also + be freed when it is no longer needed. Otherwise, the chunks array + must be of at least n_elements in length. It is filled in with the + pointers to the chunks. + + In either case, independent_comalloc returns this pointer array, or + null if the allocation failed. If n_elements is zero and chunks is + null, it returns a chunk representing an array with zero elements + (which should be freed if not wanted). + + Each element must be individually freed when it is no longer + needed. If you'd like to instead be able to free all at once, you + should instead use a single regular malloc, and assign pointers at + particular offsets in the aggregate space. (In this case though, you + cannot independently free elements.) + + independent_comallac differs from independent_calloc in that each + element may have a different size, and also that it does not + automatically clear elements. + + independent_comalloc can be used to speed up allocation in cases + where several structs or objects must always be allocated at the + same time. For example: + + struct Head { ... } + struct Foot { ... } + + void send_message(char* msg) { + int msglen = strlen(msg); + size_t sizes[3] = { sizeof(struct Head), msglen, sizeof(struct Foot) }; + void* chunks[3]; + if (independent_comalloc(3, sizes, chunks) == 0) + die(); + struct Head* head = (struct Head*)(chunks[0]); + char* body = (char*)(chunks[1]); + struct Foot* foot = (struct Foot*)(chunks[2]); + // ... + } + + In general though, independent_comalloc is worth using only for + larger values of n_elements. For small values, you probably won't + detect enough difference from series of malloc calls to bother. + + Overuse of independent_comalloc can increase overall memory usage, + since it cannot reuse existing noncontiguous small chunks that + might be available for some of the elements. +*/ +void** dlindependent_comalloc(size_t, size_t*, void**); + + +/* + pvalloc(size_t n); + Equivalent to valloc(minimum-page-that-holds(n)), that is, + round up n to nearest pagesize. + */ +void* dlpvalloc(size_t); + +/* + malloc_trim(size_t pad); + + If possible, gives memory back to the system (via negative arguments + to sbrk) if there is unused memory at the `high' end of the malloc + pool or in unused MMAP segments. You can call this after freeing + large blocks of memory to potentially reduce the system-level memory + requirements of a program. However, it cannot guarantee to reduce + memory. Under some allocation patterns, some large free blocks of + memory will be locked between two used chunks, so they cannot be + given back to the system. + + The `pad' argument to malloc_trim represents the amount of free + trailing space to leave untrimmed. If this argument is zero, only + the minimum amount of memory to maintain internal data structures + will be left. Non-zero arguments can be supplied to maintain enough + trailing space to service future expected allocations without having + to re-obtain memory from the system. + + Malloc_trim returns 1 if it actually released any memory, else 0. +*/ +int dlmalloc_trim(size_t); + +/* + malloc_usable_size(void* p); + + Returns the number of bytes you can actually use in + an allocated chunk, which may be more than you requested (although + often not) due to alignment and minimum size constraints. + You can use this many bytes without worrying about + overwriting other allocated objects. This is not a particularly great + programming practice. malloc_usable_size can be more useful in + debugging and assertions, for example: + + p = malloc(n); + assert(malloc_usable_size(p) >= 256); +*/ +size_t dlmalloc_usable_size(void*); + +/* + malloc_stats(); + Prints on stderr the amount of space obtained from the system (both + via sbrk and mmap), the maximum amount (which may be more than + current if malloc_trim and/or munmap got called), and the current + number of bytes allocated via malloc (or realloc, etc) but not yet + freed. Note that this is the number of bytes allocated, not the + number requested. It will be larger than the number requested + because of alignment and bookkeeping overhead. Because it includes + alignment wastage as being in use, this figure may be greater than + zero even when no user-level chunks are allocated. + + The reported current and maximum system memory can be inaccurate if + a program makes other calls to system memory allocation functions + (normally sbrk) outside of malloc. + + malloc_stats prints only the most commonly interesting statistics. + More information can be obtained by calling mallinfo. +*/ +void dlmalloc_stats(void); + +#endif /* ONLY_MSPACES */ + +#if MSPACES + +/* + mspace is an opaque type representing an independent + region of space that supports mspace_malloc, etc. +*/ +typedef void* mspace; + +/* + create_mspace creates and returns a new independent space with the + given initial capacity, or, if 0, the default granularity size. It + returns null if there is no system memory available to create the + space. If argument locked is non-zero, the space uses a separate + lock to control access. The capacity of the space will grow + dynamically as needed to service mspace_malloc requests. You can + control the sizes of incremental increases of this space by + compiling with a different DEFAULT_GRANULARITY or dynamically + setting with mallopt(M_GRANULARITY, value). +*/ +mspace create_mspace(size_t capacity, int locked); + +/* + destroy_mspace destroys the given space, and attempts to return all + of its memory back to the system, returning the total number of + bytes freed. After destruction, the results of access to all memory + used by the space become undefined. +*/ +size_t destroy_mspace(mspace msp); + +/* + create_mspace_with_base uses the memory supplied as the initial base + of a new mspace. Part (less than 128*sizeof(size_t) bytes) of this + space is used for bookkeeping, so the capacity must be at least this + large. (Otherwise 0 is returned.) When this initial space is + exhausted, additional memory will be obtained from the system. + Destroying this space will deallocate all additionally allocated + space (if possible) but not the initial base. +*/ +mspace create_mspace_with_base(void* base, size_t capacity, int locked); + +/* + mspace_malloc behaves as malloc, but operates within + the given space. +*/ +void* mspace_malloc(mspace msp, size_t bytes); + +/* + mspace_free behaves as free, but operates within + the given space. + + If compiled with FOOTERS==1, mspace_free is not actually needed. + free may be called instead of mspace_free because freed chunks from + any space are handled by their originating spaces. +*/ +void mspace_free(mspace msp, void* mem); + +/* + mspace_realloc behaves as realloc, but operates within + the given space. + + If compiled with FOOTERS==1, mspace_realloc is not actually + needed. realloc may be called instead of mspace_realloc because + realloced chunks from any space are handled by their originating + spaces. +*/ +void* mspace_realloc(mspace msp, void* mem, size_t newsize); + +/* + mspace_calloc behaves as calloc, but operates within + the given space. +*/ +void* mspace_calloc(mspace msp, size_t n_elements, size_t elem_size); + +/* + mspace_memalign behaves as memalign, but operates within + the given space. +*/ +void* mspace_memalign(mspace msp, size_t alignment, size_t bytes); + +/* + mspace_independent_calloc behaves as independent_calloc, but + operates within the given space. +*/ +void** mspace_independent_calloc(mspace msp, size_t n_elements, + size_t elem_size, void* chunks[]); + +/* + mspace_independent_comalloc behaves as independent_comalloc, but + operates within the given space. +*/ +void** mspace_independent_comalloc(mspace msp, size_t n_elements, + size_t sizes[], void* chunks[]); + +/* + mspace_footprint() returns the number of bytes obtained from the + system for this space. +*/ +size_t mspace_footprint(mspace msp); + +/* + mspace_max_footprint() returns the peak number of bytes obtained from the + system for this space. +*/ +size_t mspace_max_footprint(mspace msp); + + +#if !NO_MALLINFO +/* + mspace_mallinfo behaves as mallinfo, but reports properties of + the given space. +*/ +struct mallinfo mspace_mallinfo(mspace msp); +#endif /* NO_MALLINFO */ + +/* + mspace_malloc_stats behaves as malloc_stats, but reports + properties of the given space. +*/ +void mspace_malloc_stats(mspace msp); + +/* + mspace_trim behaves as malloc_trim, but + operates within the given space. +*/ +int mspace_trim(mspace msp, size_t pad); + +/* + An alias for mallopt. +*/ +int mspace_mallopt(int, int); + +#endif /* MSPACES */ + +#ifdef __cplusplus +}; /* end of extern "C" */ +#endif /* __cplusplus */ + +/* + ======================================================================== + To make a fully customizable malloc.h header file, cut everything + above this line, put into file malloc.h, edit to suit, and #include it + on the next line, as well as in programs that use this malloc. + ======================================================================== +*/ + +/* #include "malloc.h" */ + +/*------------------------------ internal #includes ---------------------- */ + +#ifdef _MSC_VER +#pragma warning( disable : 4146 ) /* no "unsigned" warnings */ +#endif /* _MSC_VER */ + +#include /* for printing in malloc_stats */ + +#ifndef LACKS_ERRNO_H +#include /* for MALLOC_FAILURE_ACTION */ +#endif /* LACKS_ERRNO_H */ +#if FOOTERS +#include /* for magic initialization */ +#endif /* FOOTERS */ +#ifndef LACKS_STDLIB_H +#include /* for abort() */ +#endif /* LACKS_STDLIB_H */ +#ifdef DEBUG +#if ABORT_ON_ASSERT_FAILURE +#define assert(x) if(!(x)) ABORT +#else /* ABORT_ON_ASSERT_FAILURE */ +#include +#endif /* ABORT_ON_ASSERT_FAILURE */ +#else /* DEBUG */ +#define assert(x) +#endif /* DEBUG */ +#ifndef LACKS_STRING_H +#include /* for memset etc */ +#endif /* LACKS_STRING_H */ +#if USE_BUILTIN_FFS +#ifndef LACKS_STRINGS_H +#include /* for ffs */ +#endif /* LACKS_STRINGS_H */ +#endif /* USE_BUILTIN_FFS */ +#if HAVE_MMAP +#ifndef LACKS_SYS_MMAN_H +#include /* for mmap */ +#endif /* LACKS_SYS_MMAN_H */ +#ifndef LACKS_FCNTL_H +#include +#endif /* LACKS_FCNTL_H */ +#endif /* HAVE_MMAP */ +#if HAVE_MORECORE +#ifndef LACKS_UNISTD_H +#include /* for sbrk */ +#else /* LACKS_UNISTD_H */ +#if !defined(__FreeBSD__) && !defined(__OpenBSD__) && !defined(__NetBSD__) +extern void* sbrk(ptrdiff_t); +#endif /* FreeBSD etc */ +#endif /* LACKS_UNISTD_H */ +#endif /* HAVE_MMAP */ + +#ifndef WIN32 +#ifndef malloc_getpagesize +# ifdef _SC_PAGESIZE /* some SVR4 systems omit an underscore */ +# ifndef _SC_PAGE_SIZE +# define _SC_PAGE_SIZE _SC_PAGESIZE +# endif +# endif +# ifdef _SC_PAGE_SIZE +# define malloc_getpagesize sysconf(_SC_PAGE_SIZE) +# else +# if defined(BSD) || defined(DGUX) || defined(HAVE_GETPAGESIZE) + extern size_t getpagesize(); +# define malloc_getpagesize getpagesize() +# else +# ifdef WIN32 /* use supplied emulation of getpagesize */ +# define malloc_getpagesize getpagesize() +# else +# ifndef LACKS_SYS_PARAM_H +# include +# endif +# ifdef EXEC_PAGESIZE +# define malloc_getpagesize EXEC_PAGESIZE +# else +# ifdef NBPG +# ifndef CLSIZE +# define malloc_getpagesize NBPG +# else +# define malloc_getpagesize (NBPG * CLSIZE) +# endif +# else +# ifdef NBPC +# define malloc_getpagesize NBPC +# else +# ifdef PAGESIZE +# define malloc_getpagesize PAGESIZE +# else /* just guess */ +# define malloc_getpagesize ((size_t)4096U) +# endif +# endif +# endif +# endif +# endif +# endif +# endif +#endif +#endif + +/* ------------------- size_t and alignment properties -------------------- */ + +/* The byte and bit size of a size_t */ +#define SIZE_T_SIZE (sizeof(size_t)) +#define SIZE_T_BITSIZE (sizeof(size_t) << 3) + +/* Some constants coerced to size_t */ +/* Annoying but necessary to avoid errors on some plaftorms */ +#define SIZE_T_ZERO ((size_t)0) +#define SIZE_T_ONE ((size_t)1) +#define SIZE_T_TWO ((size_t)2) +#define TWO_SIZE_T_SIZES (SIZE_T_SIZE<<1) +#define FOUR_SIZE_T_SIZES (SIZE_T_SIZE<<2) +#define SIX_SIZE_T_SIZES (FOUR_SIZE_T_SIZES+TWO_SIZE_T_SIZES) +#define HALF_MAX_SIZE_T (MAX_SIZE_T / 2U) + +/* The bit mask value corresponding to MALLOC_ALIGNMENT */ +#define CHUNK_ALIGN_MASK (MALLOC_ALIGNMENT - SIZE_T_ONE) + +/* True if address a has acceptable alignment */ +#define is_aligned(A) (((size_t)((A)) & (CHUNK_ALIGN_MASK)) == 0) + +/* the number of bytes to offset an address to align it */ +#define align_offset(A)\ + ((((size_t)(A) & CHUNK_ALIGN_MASK) == 0)? 0 :\ + ((MALLOC_ALIGNMENT - ((size_t)(A) & CHUNK_ALIGN_MASK)) & CHUNK_ALIGN_MASK)) + +/* -------------------------- MMAP preliminaries ------------------------- */ + +/* + If HAVE_MORECORE or HAVE_MMAP are false, we just define calls and + checks to fail so compiler optimizer can delete code rather than + using so many "#if"s. +*/ + + +/* MORECORE and MMAP must return MFAIL on failure */ +#define MFAIL ((void*)(MAX_SIZE_T)) +#define CMFAIL ((char*)(MFAIL)) /* defined for convenience */ + +#if !HAVE_MMAP +#define IS_MMAPPED_BIT (SIZE_T_ZERO) +#define USE_MMAP_BIT (SIZE_T_ZERO) +#define CALL_MMAP(s) MFAIL +#define CALL_MUNMAP(a, s) (-1) +#define DIRECT_MMAP(s) MFAIL + +#else /* HAVE_MMAP */ +#define IS_MMAPPED_BIT (SIZE_T_ONE) +#define USE_MMAP_BIT (SIZE_T_ONE) + +#ifndef WIN32 +#define CALL_MUNMAP(a, s) munmap((a), (s)) +#define MMAP_PROT (PROT_READ|PROT_WRITE) +#if !defined(MAP_ANONYMOUS) && defined(MAP_ANON) +#define MAP_ANONYMOUS MAP_ANON +#endif /* MAP_ANON */ +#ifdef MAP_ANONYMOUS +#define MMAP_FLAGS (MAP_PRIVATE|MAP_ANONYMOUS) +#define CALL_MMAP(s) mmap(0, (s), MMAP_PROT, MMAP_FLAGS, -1, 0) +#else /* MAP_ANONYMOUS */ +/* + Nearly all versions of mmap support MAP_ANONYMOUS, so the following + is unlikely to be needed, but is supplied just in case. +*/ +#define MMAP_FLAGS (MAP_PRIVATE) +static int dev_zero_fd = -1; /* Cached file descriptor for /dev/zero. */ +#define CALL_MMAP(s) ((dev_zero_fd < 0) ? \ + (dev_zero_fd = open("/dev/zero", O_RDWR), \ + mmap(0, (s), MMAP_PROT, MMAP_FLAGS, dev_zero_fd, 0)) : \ + mmap(0, (s), MMAP_PROT, MMAP_FLAGS, dev_zero_fd, 0)) +#endif /* MAP_ANONYMOUS */ + +#define DIRECT_MMAP(s) CALL_MMAP(s) +#else /* WIN32 */ + +/* Win32 MMAP via VirtualAlloc */ +static void* win32mmap(size_t size) { + void* ptr = VirtualAlloc(0, size, MEM_RESERVE|MEM_COMMIT, PAGE_EXECUTE_READWRITE); + return (ptr != 0)? ptr: MFAIL; +} + +/* For direct MMAP, use MEM_TOP_DOWN to minimize interference */ +static void* win32direct_mmap(size_t size) { + void* ptr = VirtualAlloc(0, size, MEM_RESERVE|MEM_COMMIT|MEM_TOP_DOWN, + PAGE_EXECUTE_READWRITE); + return (ptr != 0)? ptr: MFAIL; +} + +/* This function supports releasing coalesed segments */ +static int win32munmap(void* ptr, size_t size) { + MEMORY_BASIC_INFORMATION minfo; + char* cptr = ptr; + while (size) { + if (VirtualQuery(cptr, &minfo, sizeof(minfo)) == 0) + return -1; + if (minfo.BaseAddress != cptr || minfo.AllocationBase != cptr || + minfo.State != MEM_COMMIT || minfo.RegionSize > size) + return -1; + if (VirtualFree(cptr, 0, MEM_RELEASE) == 0) + return -1; + cptr += minfo.RegionSize; + size -= minfo.RegionSize; + } + return 0; +} + +#define CALL_MMAP(s) win32mmap(s) +#define CALL_MUNMAP(a, s) win32munmap((a), (s)) +#define DIRECT_MMAP(s) win32direct_mmap(s) +#endif /* WIN32 */ +#endif /* HAVE_MMAP */ + +#if HAVE_MMAP && HAVE_MREMAP +#define CALL_MREMAP(addr, osz, nsz, mv) mremap((addr), (osz), (nsz), (mv)) +#else /* HAVE_MMAP && HAVE_MREMAP */ +#define CALL_MREMAP(addr, osz, nsz, mv) MFAIL +#endif /* HAVE_MMAP && HAVE_MREMAP */ + +#if HAVE_MORECORE +#define CALL_MORECORE(S) MORECORE(S) +#else /* HAVE_MORECORE */ +#define CALL_MORECORE(S) MFAIL +#endif /* HAVE_MORECORE */ + +/* mstate bit set if continguous morecore disabled or failed */ +#define USE_NONCONTIGUOUS_BIT (4U) + +/* segment bit set in create_mspace_with_base */ +#define EXTERN_BIT (8U) + + +/* --------------------------- Lock preliminaries ------------------------ */ + +#if USE_LOCKS + +/* + When locks are defined, there are up to two global locks: + + * If HAVE_MORECORE, morecore_mutex protects sequences of calls to + MORECORE. In many cases sys_alloc requires two calls, that should + not be interleaved with calls by other threads. This does not + protect against direct calls to MORECORE by other threads not + using this lock, so there is still code to cope the best we can on + interference. + + * magic_init_mutex ensures that mparams.magic and other + unique mparams values are initialized only once. +*/ + +#ifndef WIN32 +/* By default use posix locks */ +#include +#define MLOCK_T pthread_mutex_t +#define INITIAL_LOCK(l) pthread_mutex_init(l, NULL) +#define ACQUIRE_LOCK(l) pthread_mutex_lock(l) +#define RELEASE_LOCK(l) pthread_mutex_unlock(l) + +#if HAVE_MORECORE +static MLOCK_T morecore_mutex = PTHREAD_MUTEX_INITIALIZER; +#endif /* HAVE_MORECORE */ + +static MLOCK_T magic_init_mutex = PTHREAD_MUTEX_INITIALIZER; + +#else /* WIN32 */ +/* + Because lock-protected regions have bounded times, and there + are no recursive lock calls, we can use simple spinlocks. +*/ + +#define MLOCK_T long +static int win32_acquire_lock (MLOCK_T *sl) { + for (;;) { +#ifdef InterlockedCompareExchangePointer + if (!InterlockedCompareExchange(sl, 1, 0)) + return 0; +#else /* Use older void* version */ + if (!InterlockedCompareExchange((void**)sl, (void*)1, (void*)0)) + return 0; +#endif /* InterlockedCompareExchangePointer */ + Sleep (0); + } +} + +static void win32_release_lock (MLOCK_T *sl) { + InterlockedExchange (sl, 0); +} + +#define INITIAL_LOCK(l) *(l)=0 +#define ACQUIRE_LOCK(l) win32_acquire_lock(l) +#define RELEASE_LOCK(l) win32_release_lock(l) +#if HAVE_MORECORE +static MLOCK_T morecore_mutex; +#endif /* HAVE_MORECORE */ +static MLOCK_T magic_init_mutex; +#endif /* WIN32 */ + +#define USE_LOCK_BIT (2U) +#else /* USE_LOCKS */ +#define USE_LOCK_BIT (0U) +#define INITIAL_LOCK(l) +#endif /* USE_LOCKS */ + +#if USE_LOCKS && HAVE_MORECORE +#define ACQUIRE_MORECORE_LOCK() ACQUIRE_LOCK(&morecore_mutex); +#define RELEASE_MORECORE_LOCK() RELEASE_LOCK(&morecore_mutex); +#else /* USE_LOCKS && HAVE_MORECORE */ +#define ACQUIRE_MORECORE_LOCK() +#define RELEASE_MORECORE_LOCK() +#endif /* USE_LOCKS && HAVE_MORECORE */ + +#if USE_LOCKS +#define ACQUIRE_MAGIC_INIT_LOCK() ACQUIRE_LOCK(&magic_init_mutex); +#define RELEASE_MAGIC_INIT_LOCK() RELEASE_LOCK(&magic_init_mutex); +#else /* USE_LOCKS */ +#define ACQUIRE_MAGIC_INIT_LOCK() +#define RELEASE_MAGIC_INIT_LOCK() +#endif /* USE_LOCKS */ + + +/* ----------------------- Chunk representations ------------------------ */ + +/* + (The following includes lightly edited explanations by Colin Plumb.) + + The malloc_chunk declaration below is misleading (but accurate and + necessary). It declares a "view" into memory allowing access to + necessary fields at known offsets from a given base. + + Chunks of memory are maintained using a `boundary tag' method as + originally described by Knuth. (See the paper by Paul Wilson + ftp://ftp.cs.utexas.edu/pub/garbage/allocsrv.ps for a survey of such + techniques.) Sizes of free chunks are stored both in the front of + each chunk and at the end. This makes consolidating fragmented + chunks into bigger chunks fast. The head fields also hold bits + representing whether chunks are free or in use. + + Here are some pictures to make it clearer. They are "exploded" to + show that the state of a chunk can be thought of as extending from + the high 31 bits of the head field of its header through the + prev_foot and PINUSE_BIT bit of the following chunk header. + + A chunk that's in use looks like: + + chunk-> +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | Size of previous chunk (if P = 1) | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ |P| + | Size of this chunk 1| +-+ + mem-> +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | | + +- -+ + | | + +- -+ + | : + +- size - sizeof(size_t) available payload bytes -+ + : | + chunk-> +- -+ + | | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ |1| + | Size of next chunk (may or may not be in use) | +-+ + mem-> +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + + And if it's free, it looks like this: + + chunk-> +- -+ + | User payload (must be in use, or we would have merged!) | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ |P| + | Size of this chunk 0| +-+ + mem-> +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | Next pointer | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | Prev pointer | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | : + +- size - sizeof(struct chunk) unused bytes -+ + : | + chunk-> +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | Size of this chunk | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ |0| + | Size of next chunk (must be in use, or we would have merged)| +-+ + mem-> +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | : + +- User payload -+ + : | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + |0| + +-+ + Note that since we always merge adjacent free chunks, the chunks + adjacent to a free chunk must be in use. + + Given a pointer to a chunk (which can be derived trivially from the + payload pointer) we can, in O(1) time, find out whether the adjacent + chunks are free, and if so, unlink them from the lists that they + are on and merge them with the current chunk. + + Chunks always begin on even word boundaries, so the mem portion + (which is returned to the user) is also on an even word boundary, and + thus at least double-word aligned. + + The P (PINUSE_BIT) bit, stored in the unused low-order bit of the + chunk size (which is always a multiple of two words), is an in-use + bit for the *previous* chunk. If that bit is *clear*, then the + word before the current chunk size contains the previous chunk + size, and can be used to find the front of the previous chunk. + The very first chunk allocated always has this bit set, preventing + access to non-existent (or non-owned) memory. If pinuse is set for + any given chunk, then you CANNOT determine the size of the + previous chunk, and might even get a memory addressing fault when + trying to do so. + + The C (CINUSE_BIT) bit, stored in the unused second-lowest bit of + the chunk size redundantly records whether the current chunk is + inuse. This redundancy enables usage checks within free and realloc, + and reduces indirection when freeing and consolidating chunks. + + Each freshly allocated chunk must have both cinuse and pinuse set. + That is, each allocated chunk borders either a previously allocated + and still in-use chunk, or the base of its memory arena. This is + ensured by making all allocations from the the `lowest' part of any + found chunk. Further, no free chunk physically borders another one, + so each free chunk is known to be preceded and followed by either + inuse chunks or the ends of memory. + + Note that the `foot' of the current chunk is actually represented + as the prev_foot of the NEXT chunk. This makes it easier to + deal with alignments etc but can be very confusing when trying + to extend or adapt this code. + + The exceptions to all this are + + 1. The special chunk `top' is the top-most available chunk (i.e., + the one bordering the end of available memory). It is treated + specially. Top is never included in any bin, is used only if + no other chunk is available, and is released back to the + system if it is very large (see M_TRIM_THRESHOLD). In effect, + the top chunk is treated as larger (and thus less well + fitting) than any other available chunk. The top chunk + doesn't update its trailing size field since there is no next + contiguous chunk that would have to index off it. However, + space is still allocated for it (TOP_FOOT_SIZE) to enable + separation or merging when space is extended. + + 3. Chunks allocated via mmap, which have the lowest-order bit + (IS_MMAPPED_BIT) set in their prev_foot fields, and do not set + PINUSE_BIT in their head fields. Because they are allocated + one-by-one, each must carry its own prev_foot field, which is + also used to hold the offset this chunk has within its mmapped + region, which is needed to preserve alignment. Each mmapped + chunk is trailed by the first two fields of a fake next-chunk + for sake of usage checks. + +*/ + +struct malloc_chunk { + size_t prev_foot; /* Size of previous chunk (if free). */ + size_t head; /* Size and inuse bits. */ + struct malloc_chunk* fd; /* double links -- used only if free. */ + struct malloc_chunk* bk; +}; + +typedef struct malloc_chunk mchunk; +typedef struct malloc_chunk* mchunkptr; +typedef struct malloc_chunk* sbinptr; /* The type of bins of chunks */ +typedef unsigned int bindex_t; /* Described below */ +typedef unsigned int binmap_t; /* Described below */ +typedef unsigned int flag_t; /* The type of various bit flag sets */ + +/* ------------------- Chunks sizes and alignments ----------------------- */ + +#define MCHUNK_SIZE (sizeof(mchunk)) + +#if FOOTERS +#define CHUNK_OVERHEAD (TWO_SIZE_T_SIZES) +#else /* FOOTERS */ +#define CHUNK_OVERHEAD (SIZE_T_SIZE) +#endif /* FOOTERS */ + +/* MMapped chunks need a second word of overhead ... */ +#define MMAP_CHUNK_OVERHEAD (TWO_SIZE_T_SIZES) +/* ... and additional padding for fake next-chunk at foot */ +#define MMAP_FOOT_PAD (FOUR_SIZE_T_SIZES) + +/* The smallest size we can malloc is an aligned minimal chunk */ +#define MIN_CHUNK_SIZE\ + ((MCHUNK_SIZE + CHUNK_ALIGN_MASK) & ~CHUNK_ALIGN_MASK) + +/* conversion from malloc headers to user pointers, and back */ +#define chunk2mem(p) ((void*)((char*)(p) + TWO_SIZE_T_SIZES)) +#define mem2chunk(mem) ((mchunkptr)((char*)(mem) - TWO_SIZE_T_SIZES)) +/* chunk associated with aligned address A */ +#define align_as_chunk(A) (mchunkptr)((A) + align_offset(chunk2mem(A))) + +/* Bounds on request (not chunk) sizes. */ +#define MAX_REQUEST ((-MIN_CHUNK_SIZE) << 2) +#define MIN_REQUEST (MIN_CHUNK_SIZE - CHUNK_OVERHEAD - SIZE_T_ONE) + +/* pad request bytes into a usable size */ +#define pad_request(req) \ + (((req) + CHUNK_OVERHEAD + CHUNK_ALIGN_MASK) & ~CHUNK_ALIGN_MASK) + +/* pad request, checking for minimum (but not maximum) */ +#define request2size(req) \ + (((req) < MIN_REQUEST)? MIN_CHUNK_SIZE : pad_request(req)) + + +/* ------------------ Operations on head and foot fields ----------------- */ + +/* + The head field of a chunk is or'ed with PINUSE_BIT when previous + adjacent chunk in use, and or'ed with CINUSE_BIT if this chunk is in + use. If the chunk was obtained with mmap, the prev_foot field has + IS_MMAPPED_BIT set, otherwise holding the offset of the base of the + mmapped region to the base of the chunk. +*/ + +#define PINUSE_BIT (SIZE_T_ONE) +#define CINUSE_BIT (SIZE_T_TWO) +#define INUSE_BITS (PINUSE_BIT|CINUSE_BIT) + +/* Head value for fenceposts */ +#define FENCEPOST_HEAD (INUSE_BITS|SIZE_T_SIZE) + +/* extraction of fields from head words */ +#define cinuse(p) ((p)->head & CINUSE_BIT) +#define pinuse(p) ((p)->head & PINUSE_BIT) +#define chunksize(p) ((p)->head & ~(INUSE_BITS)) + +#define clear_pinuse(p) ((p)->head &= ~PINUSE_BIT) +#define clear_cinuse(p) ((p)->head &= ~CINUSE_BIT) + +/* Treat space at ptr +/- offset as a chunk */ +#define chunk_plus_offset(p, s) ((mchunkptr)(((char*)(p)) + (s))) +#define chunk_minus_offset(p, s) ((mchunkptr)(((char*)(p)) - (s))) + +/* Ptr to next or previous physical malloc_chunk. */ +#define next_chunk(p) ((mchunkptr)( ((char*)(p)) + ((p)->head & ~INUSE_BITS))) +#define prev_chunk(p) ((mchunkptr)( ((char*)(p)) - ((p)->prev_foot) )) + +/* extract next chunk's pinuse bit */ +#define next_pinuse(p) ((next_chunk(p)->head) & PINUSE_BIT) + +/* Get/set size at footer */ +#define get_foot(p, s) (((mchunkptr)((char*)(p) + (s)))->prev_foot) +#define set_foot(p, s) (((mchunkptr)((char*)(p) + (s)))->prev_foot = (s)) + +/* Set size, pinuse bit, and foot */ +#define set_size_and_pinuse_of_free_chunk(p, s)\ + ((p)->head = (s|PINUSE_BIT), set_foot(p, s)) + +/* Set size, pinuse bit, foot, and clear next pinuse */ +#define set_free_with_pinuse(p, s, n)\ + (clear_pinuse(n), set_size_and_pinuse_of_free_chunk(p, s)) + +#define is_mmapped(p)\ + (!((p)->head & PINUSE_BIT) && ((p)->prev_foot & IS_MMAPPED_BIT)) + +/* Get the internal overhead associated with chunk p */ +#define overhead_for(p)\ + (is_mmapped(p)? MMAP_CHUNK_OVERHEAD : CHUNK_OVERHEAD) + +/* Return true if malloced space is not necessarily cleared */ +#if MMAP_CLEARS +#define calloc_must_clear(p) (!is_mmapped(p)) +#else /* MMAP_CLEARS */ +#define calloc_must_clear(p) (1) +#endif /* MMAP_CLEARS */ + +/* ---------------------- Overlaid data structures ----------------------- */ + +/* + When chunks are not in use, they are treated as nodes of either + lists or trees. + + "Small" chunks are stored in circular doubly-linked lists, and look + like this: + + chunk-> +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | Size of previous chunk | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + `head:' | Size of chunk, in bytes |P| + mem-> +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | Forward pointer to next chunk in list | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | Back pointer to previous chunk in list | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | Unused space (may be 0 bytes long) . + . . + . | +nextchunk-> +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + `foot:' | Size of chunk, in bytes | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + + Larger chunks are kept in a form of bitwise digital trees (aka + tries) keyed on chunksizes. Because malloc_tree_chunks are only for + free chunks greater than 256 bytes, their size doesn't impose any + constraints on user chunk sizes. Each node looks like: + + chunk-> +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | Size of previous chunk | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + `head:' | Size of chunk, in bytes |P| + mem-> +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | Forward pointer to next chunk of same size | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | Back pointer to previous chunk of same size | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | Pointer to left child (child[0]) | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | Pointer to right child (child[1]) | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | Pointer to parent | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | bin index of this chunk | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | Unused space . + . | +nextchunk-> +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + `foot:' | Size of chunk, in bytes | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + + Each tree holding treenodes is a tree of unique chunk sizes. Chunks + of the same size are arranged in a circularly-linked list, with only + the oldest chunk (the next to be used, in our FIFO ordering) + actually in the tree. (Tree members are distinguished by a non-null + parent pointer.) If a chunk with the same size an an existing node + is inserted, it is linked off the existing node using pointers that + work in the same way as fd/bk pointers of small chunks. + + Each tree contains a power of 2 sized range of chunk sizes (the + smallest is 0x100 <= x < 0x180), which is is divided in half at each + tree level, with the chunks in the smaller half of the range (0x100 + <= x < 0x140 for the top nose) in the left subtree and the larger + half (0x140 <= x < 0x180) in the right subtree. This is, of course, + done by inspecting individual bits. + + Using these rules, each node's left subtree contains all smaller + sizes than its right subtree. However, the node at the root of each + subtree has no particular ordering relationship to either. (The + dividing line between the subtree sizes is based on trie relation.) + If we remove the last chunk of a given size from the interior of the + tree, we need to replace it with a leaf node. The tree ordering + rules permit a node to be replaced by any leaf below it. + + The smallest chunk in a tree (a common operation in a best-fit + allocator) can be found by walking a path to the leftmost leaf in + the tree. Unlike a usual binary tree, where we follow left child + pointers until we reach a null, here we follow the right child + pointer any time the left one is null, until we reach a leaf with + both child pointers null. The smallest chunk in the tree will be + somewhere along that path. + + The worst case number of steps to add, find, or remove a node is + bounded by the number of bits differentiating chunks within + bins. Under current bin calculations, this ranges from 6 up to 21 + (for 32 bit sizes) or up to 53 (for 64 bit sizes). The typical case + is of course much better. +*/ + +struct malloc_tree_chunk { + /* The first four fields must be compatible with malloc_chunk */ + size_t prev_foot; + size_t head; + struct malloc_tree_chunk* fd; + struct malloc_tree_chunk* bk; + + struct malloc_tree_chunk* child[2]; + struct malloc_tree_chunk* parent; + bindex_t index; +}; + +typedef struct malloc_tree_chunk tchunk; +typedef struct malloc_tree_chunk* tchunkptr; +typedef struct malloc_tree_chunk* tbinptr; /* The type of bins of trees */ + +/* A little helper macro for trees */ +#define leftmost_child(t) ((t)->child[0] != 0? (t)->child[0] : (t)->child[1]) + +/* ----------------------------- Segments -------------------------------- */ + +/* + Each malloc space may include non-contiguous segments, held in a + list headed by an embedded malloc_segment record representing the + top-most space. Segments also include flags holding properties of + the space. Large chunks that are directly allocated by mmap are not + included in this list. They are instead independently created and + destroyed without otherwise keeping track of them. + + Segment management mainly comes into play for spaces allocated by + MMAP. Any call to MMAP might or might not return memory that is + adjacent to an existing segment. MORECORE normally contiguously + extends the current space, so this space is almost always adjacent, + which is simpler and faster to deal with. (This is why MORECORE is + used preferentially to MMAP when both are available -- see + sys_alloc.) When allocating using MMAP, we don't use any of the + hinting mechanisms (inconsistently) supported in various + implementations of unix mmap, or distinguish reserving from + committing memory. Instead, we just ask for space, and exploit + contiguity when we get it. It is probably possible to do + better than this on some systems, but no general scheme seems + to be significantly better. + + Management entails a simpler variant of the consolidation scheme + used for chunks to reduce fragmentation -- new adjacent memory is + normally prepended or appended to an existing segment. However, + there are limitations compared to chunk consolidation that mostly + reflect the fact that segment processing is relatively infrequent + (occurring only when getting memory from system) and that we + don't expect to have huge numbers of segments: + + * Segments are not indexed, so traversal requires linear scans. (It + would be possible to index these, but is not worth the extra + overhead and complexity for most programs on most platforms.) + * New segments are only appended to old ones when holding top-most + memory; if they cannot be prepended to others, they are held in + different segments. + + Except for the top-most segment of an mstate, each segment record + is kept at the tail of its segment. Segments are added by pushing + segment records onto the list headed by &mstate.seg for the + containing mstate. + + Segment flags control allocation/merge/deallocation policies: + * If EXTERN_BIT set, then we did not allocate this segment, + and so should not try to deallocate or merge with others. + (This currently holds only for the initial segment passed + into create_mspace_with_base.) + * If IS_MMAPPED_BIT set, the segment may be merged with + other surrounding mmapped segments and trimmed/de-allocated + using munmap. + * If neither bit is set, then the segment was obtained using + MORECORE so can be merged with surrounding MORECORE'd segments + and deallocated/trimmed using MORECORE with negative arguments. +*/ + +struct malloc_segment { + char* base; /* base address */ + size_t size; /* allocated size */ + struct malloc_segment* next; /* ptr to next segment */ +#if FFI_MMAP_EXEC_WRIT + /* The mmap magic is supposed to store the address of the executable + segment at the very end of the requested block. */ + +# define mmap_exec_offset(b,s) (*(ptrdiff_t*)((b)+(s)-sizeof(ptrdiff_t))) + + /* We can only merge segments if their corresponding executable + segments are at identical offsets. */ +# define check_segment_merge(S,b,s) \ + (mmap_exec_offset((b),(s)) == (S)->exec_offset) + +# define add_segment_exec_offset(p,S) ((char*)(p) + (S)->exec_offset) +# define sub_segment_exec_offset(p,S) ((char*)(p) - (S)->exec_offset) + + /* The removal of sflags only works with HAVE_MORECORE == 0. */ + +# define get_segment_flags(S) (IS_MMAPPED_BIT) +# define set_segment_flags(S,v) \ + (((v) != IS_MMAPPED_BIT) ? (ABORT, (v)) : \ + (((S)->exec_offset = \ + mmap_exec_offset((S)->base, (S)->size)), \ + (mmap_exec_offset((S)->base + (S)->exec_offset, (S)->size) != \ + (S)->exec_offset) ? (ABORT, (v)) : \ + (mmap_exec_offset((S)->base, (S)->size) = 0), (v))) + + /* We use an offset here, instead of a pointer, because then, when + base changes, we don't have to modify this. On architectures + with segmented addresses, this might not work. */ + ptrdiff_t exec_offset; +#else + +# define get_segment_flags(S) ((S)->sflags) +# define set_segment_flags(S,v) ((S)->sflags = (v)) +# define check_segment_merge(S,b,s) (1) + + flag_t sflags; /* mmap and extern flag */ +#endif +}; + +#define is_mmapped_segment(S) (get_segment_flags(S) & IS_MMAPPED_BIT) +#define is_extern_segment(S) (get_segment_flags(S) & EXTERN_BIT) + +typedef struct malloc_segment msegment; +typedef struct malloc_segment* msegmentptr; + +/* ---------------------------- malloc_state ----------------------------- */ + +/* + A malloc_state holds all of the bookkeeping for a space. + The main fields are: + + Top + The topmost chunk of the currently active segment. Its size is + cached in topsize. The actual size of topmost space is + topsize+TOP_FOOT_SIZE, which includes space reserved for adding + fenceposts and segment records if necessary when getting more + space from the system. The size at which to autotrim top is + cached from mparams in trim_check, except that it is disabled if + an autotrim fails. + + Designated victim (dv) + This is the preferred chunk for servicing small requests that + don't have exact fits. It is normally the chunk split off most + recently to service another small request. Its size is cached in + dvsize. The link fields of this chunk are not maintained since it + is not kept in a bin. + + SmallBins + An array of bin headers for free chunks. These bins hold chunks + with sizes less than MIN_LARGE_SIZE bytes. Each bin contains + chunks of all the same size, spaced 8 bytes apart. To simplify + use in double-linked lists, each bin header acts as a malloc_chunk + pointing to the real first node, if it exists (else pointing to + itself). This avoids special-casing for headers. But to avoid + waste, we allocate only the fd/bk pointers of bins, and then use + repositioning tricks to treat these as the fields of a chunk. + + TreeBins + Treebins are pointers to the roots of trees holding a range of + sizes. There are 2 equally spaced treebins for each power of two + from TREE_SHIFT to TREE_SHIFT+16. The last bin holds anything + larger. + + Bin maps + There is one bit map for small bins ("smallmap") and one for + treebins ("treemap). Each bin sets its bit when non-empty, and + clears the bit when empty. Bit operations are then used to avoid + bin-by-bin searching -- nearly all "search" is done without ever + looking at bins that won't be selected. The bit maps + conservatively use 32 bits per map word, even if on 64bit system. + For a good description of some of the bit-based techniques used + here, see Henry S. Warren Jr's book "Hacker's Delight" (and + supplement at http://hackersdelight.org/). Many of these are + intended to reduce the branchiness of paths through malloc etc, as + well as to reduce the number of memory locations read or written. + + Segments + A list of segments headed by an embedded malloc_segment record + representing the initial space. + + Address check support + The least_addr field is the least address ever obtained from + MORECORE or MMAP. Attempted frees and reallocs of any address less + than this are trapped (unless INSECURE is defined). + + Magic tag + A cross-check field that should always hold same value as mparams.magic. + + Flags + Bits recording whether to use MMAP, locks, or contiguous MORECORE + + Statistics + Each space keeps track of current and maximum system memory + obtained via MORECORE or MMAP. + + Locking + If USE_LOCKS is defined, the "mutex" lock is acquired and released + around every public call using this mspace. +*/ + +/* Bin types, widths and sizes */ +#define NSMALLBINS (32U) +#define NTREEBINS (32U) +#define SMALLBIN_SHIFT (3U) +#define SMALLBIN_WIDTH (SIZE_T_ONE << SMALLBIN_SHIFT) +#define TREEBIN_SHIFT (8U) +#define MIN_LARGE_SIZE (SIZE_T_ONE << TREEBIN_SHIFT) +#define MAX_SMALL_SIZE (MIN_LARGE_SIZE - SIZE_T_ONE) +#define MAX_SMALL_REQUEST (MAX_SMALL_SIZE - CHUNK_ALIGN_MASK - CHUNK_OVERHEAD) + +struct malloc_state { + binmap_t smallmap; + binmap_t treemap; + size_t dvsize; + size_t topsize; + char* least_addr; + mchunkptr dv; + mchunkptr top; + size_t trim_check; + size_t magic; + mchunkptr smallbins[(NSMALLBINS+1)*2]; + tbinptr treebins[NTREEBINS]; + size_t footprint; + size_t max_footprint; + flag_t mflags; +#if USE_LOCKS + MLOCK_T mutex; /* locate lock among fields that rarely change */ +#endif /* USE_LOCKS */ + msegment seg; +}; + +typedef struct malloc_state* mstate; + +/* ------------- Global malloc_state and malloc_params ------------------- */ + +/* + malloc_params holds global properties, including those that can be + dynamically set using mallopt. There is a single instance, mparams, + initialized in init_mparams. +*/ + +struct malloc_params { + size_t magic; + size_t page_size; + size_t granularity; + size_t mmap_threshold; + size_t trim_threshold; + flag_t default_mflags; +}; + +static struct malloc_params mparams; + +/* The global malloc_state used for all non-"mspace" calls */ +static struct malloc_state _gm_; +#define gm (&_gm_) +#define is_global(M) ((M) == &_gm_) +#define is_initialized(M) ((M)->top != 0) + +/* -------------------------- system alloc setup ------------------------- */ + +/* Operations on mflags */ + +#define use_lock(M) ((M)->mflags & USE_LOCK_BIT) +#define enable_lock(M) ((M)->mflags |= USE_LOCK_BIT) +#define disable_lock(M) ((M)->mflags &= ~USE_LOCK_BIT) + +#define use_mmap(M) ((M)->mflags & USE_MMAP_BIT) +#define enable_mmap(M) ((M)->mflags |= USE_MMAP_BIT) +#define disable_mmap(M) ((M)->mflags &= ~USE_MMAP_BIT) + +#define use_noncontiguous(M) ((M)->mflags & USE_NONCONTIGUOUS_BIT) +#define disable_contiguous(M) ((M)->mflags |= USE_NONCONTIGUOUS_BIT) + +#define set_lock(M,L)\ + ((M)->mflags = (L)?\ + ((M)->mflags | USE_LOCK_BIT) :\ + ((M)->mflags & ~USE_LOCK_BIT)) + +/* page-align a size */ +#define page_align(S)\ + (((S) + (mparams.page_size)) & ~(mparams.page_size - SIZE_T_ONE)) + +/* granularity-align a size */ +#define granularity_align(S)\ + (((S) + (mparams.granularity)) & ~(mparams.granularity - SIZE_T_ONE)) + +#define is_page_aligned(S)\ + (((size_t)(S) & (mparams.page_size - SIZE_T_ONE)) == 0) +#define is_granularity_aligned(S)\ + (((size_t)(S) & (mparams.granularity - SIZE_T_ONE)) == 0) + +/* True if segment S holds address A */ +#define segment_holds(S, A)\ + ((char*)(A) >= S->base && (char*)(A) < S->base + S->size) + +/* Return segment holding given address */ +static msegmentptr segment_holding(mstate m, char* addr) { + msegmentptr sp = &m->seg; + for (;;) { + if (addr >= sp->base && addr < sp->base + sp->size) + return sp; + if ((sp = sp->next) == 0) + return 0; + } +} + +/* Return true if segment contains a segment link */ +static int has_segment_link(mstate m, msegmentptr ss) { + msegmentptr sp = &m->seg; + for (;;) { + if ((char*)sp >= ss->base && (char*)sp < ss->base + ss->size) + return 1; + if ((sp = sp->next) == 0) + return 0; + } +} + +#ifndef MORECORE_CANNOT_TRIM +#define should_trim(M,s) ((s) > (M)->trim_check) +#else /* MORECORE_CANNOT_TRIM */ +#define should_trim(M,s) (0) +#endif /* MORECORE_CANNOT_TRIM */ + +/* + TOP_FOOT_SIZE is padding at the end of a segment, including space + that may be needed to place segment records and fenceposts when new + noncontiguous segments are added. +*/ +#define TOP_FOOT_SIZE\ + (align_offset(chunk2mem(0))+pad_request(sizeof(struct malloc_segment))+MIN_CHUNK_SIZE) + + +/* ------------------------------- Hooks -------------------------------- */ + +/* + PREACTION should be defined to return 0 on success, and nonzero on + failure. If you are not using locking, you can redefine these to do + anything you like. +*/ + +#if USE_LOCKS + +/* Ensure locks are initialized */ +#define GLOBALLY_INITIALIZE() (mparams.page_size == 0 && init_mparams()) + +#define PREACTION(M) ((GLOBALLY_INITIALIZE() || use_lock(M))? ACQUIRE_LOCK(&(M)->mutex) : 0) +#define POSTACTION(M) { if (use_lock(M)) RELEASE_LOCK(&(M)->mutex); } +#else /* USE_LOCKS */ + +#ifndef PREACTION +#define PREACTION(M) (0) +#endif /* PREACTION */ + +#ifndef POSTACTION +#define POSTACTION(M) +#endif /* POSTACTION */ + +#endif /* USE_LOCKS */ + +/* + CORRUPTION_ERROR_ACTION is triggered upon detected bad addresses. + USAGE_ERROR_ACTION is triggered on detected bad frees and + reallocs. The argument p is an address that might have triggered the + fault. It is ignored by the two predefined actions, but might be + useful in custom actions that try to help diagnose errors. +*/ + +#if PROCEED_ON_ERROR + +/* A count of the number of corruption errors causing resets */ +int malloc_corruption_error_count; + +/* default corruption action */ +static void reset_on_error(mstate m); + +#define CORRUPTION_ERROR_ACTION(m) reset_on_error(m) +#define USAGE_ERROR_ACTION(m, p) + +#else /* PROCEED_ON_ERROR */ + +#ifndef CORRUPTION_ERROR_ACTION +#define CORRUPTION_ERROR_ACTION(m) ABORT +#endif /* CORRUPTION_ERROR_ACTION */ + +#ifndef USAGE_ERROR_ACTION +#define USAGE_ERROR_ACTION(m,p) ABORT +#endif /* USAGE_ERROR_ACTION */ + +#endif /* PROCEED_ON_ERROR */ + +/* -------------------------- Debugging setup ---------------------------- */ + +#if ! DEBUG + +#define check_free_chunk(M,P) +#define check_inuse_chunk(M,P) +#define check_malloced_chunk(M,P,N) +#define check_mmapped_chunk(M,P) +#define check_malloc_state(M) +#define check_top_chunk(M,P) + +#else /* DEBUG */ +#define check_free_chunk(M,P) do_check_free_chunk(M,P) +#define check_inuse_chunk(M,P) do_check_inuse_chunk(M,P) +#define check_top_chunk(M,P) do_check_top_chunk(M,P) +#define check_malloced_chunk(M,P,N) do_check_malloced_chunk(M,P,N) +#define check_mmapped_chunk(M,P) do_check_mmapped_chunk(M,P) +#define check_malloc_state(M) do_check_malloc_state(M) + +static void do_check_any_chunk(mstate m, mchunkptr p); +static void do_check_top_chunk(mstate m, mchunkptr p); +static void do_check_mmapped_chunk(mstate m, mchunkptr p); +static void do_check_inuse_chunk(mstate m, mchunkptr p); +static void do_check_free_chunk(mstate m, mchunkptr p); +static void do_check_malloced_chunk(mstate m, void* mem, size_t s); +static void do_check_tree(mstate m, tchunkptr t); +static void do_check_treebin(mstate m, bindex_t i); +static void do_check_smallbin(mstate m, bindex_t i); +static void do_check_malloc_state(mstate m); +static int bin_find(mstate m, mchunkptr x); +static size_t traverse_and_check(mstate m); +#endif /* DEBUG */ + +/* ---------------------------- Indexing Bins ---------------------------- */ + +#define is_small(s) (((s) >> SMALLBIN_SHIFT) < NSMALLBINS) +#define small_index(s) ((s) >> SMALLBIN_SHIFT) +#define small_index2size(i) ((i) << SMALLBIN_SHIFT) +#define MIN_SMALL_INDEX (small_index(MIN_CHUNK_SIZE)) + +/* addressing by index. See above about smallbin repositioning */ +#define smallbin_at(M, i) ((sbinptr)((char*)&((M)->smallbins[(i)<<1]))) +#define treebin_at(M,i) (&((M)->treebins[i])) + +/* assign tree index for size S to variable I */ +#if defined(__GNUC__) && defined(i386) +#define compute_tree_index(S, I)\ +{\ + size_t X = S >> TREEBIN_SHIFT;\ + if (X == 0)\ + I = 0;\ + else if (X > 0xFFFF)\ + I = NTREEBINS-1;\ + else {\ + unsigned int K;\ + __asm__("bsrl %1,%0\n\t" : "=r" (K) : "rm" (X));\ + I = (bindex_t)((K << 1) + ((S >> (K + (TREEBIN_SHIFT-1)) & 1)));\ + }\ +} +#else /* GNUC */ +#define compute_tree_index(S, I)\ +{\ + size_t X = S >> TREEBIN_SHIFT;\ + if (X == 0)\ + I = 0;\ + else if (X > 0xFFFF)\ + I = NTREEBINS-1;\ + else {\ + unsigned int Y = (unsigned int)X;\ + unsigned int N = ((Y - 0x100) >> 16) & 8;\ + unsigned int K = (((Y <<= N) - 0x1000) >> 16) & 4;\ + N += K;\ + N += K = (((Y <<= K) - 0x4000) >> 16) & 2;\ + K = 14 - N + ((Y <<= K) >> 15);\ + I = (K << 1) + ((S >> (K + (TREEBIN_SHIFT-1)) & 1));\ + }\ +} +#endif /* GNUC */ + +/* Bit representing maximum resolved size in a treebin at i */ +#define bit_for_tree_index(i) \ + (i == NTREEBINS-1)? (SIZE_T_BITSIZE-1) : (((i) >> 1) + TREEBIN_SHIFT - 2) + +/* Shift placing maximum resolved bit in a treebin at i as sign bit */ +#define leftshift_for_tree_index(i) \ + ((i == NTREEBINS-1)? 0 : \ + ((SIZE_T_BITSIZE-SIZE_T_ONE) - (((i) >> 1) + TREEBIN_SHIFT - 2))) + +/* The size of the smallest chunk held in bin with index i */ +#define minsize_for_tree_index(i) \ + ((SIZE_T_ONE << (((i) >> 1) + TREEBIN_SHIFT)) | \ + (((size_t)((i) & SIZE_T_ONE)) << (((i) >> 1) + TREEBIN_SHIFT - 1))) + + +/* ------------------------ Operations on bin maps ----------------------- */ + +/* bit corresponding to given index */ +#define idx2bit(i) ((binmap_t)(1) << (i)) + +/* Mark/Clear bits with given index */ +#define mark_smallmap(M,i) ((M)->smallmap |= idx2bit(i)) +#define clear_smallmap(M,i) ((M)->smallmap &= ~idx2bit(i)) +#define smallmap_is_marked(M,i) ((M)->smallmap & idx2bit(i)) + +#define mark_treemap(M,i) ((M)->treemap |= idx2bit(i)) +#define clear_treemap(M,i) ((M)->treemap &= ~idx2bit(i)) +#define treemap_is_marked(M,i) ((M)->treemap & idx2bit(i)) + +/* index corresponding to given bit */ + +#if defined(__GNUC__) && defined(i386) +#define compute_bit2idx(X, I)\ +{\ + unsigned int J;\ + __asm__("bsfl %1,%0\n\t" : "=r" (J) : "rm" (X));\ + I = (bindex_t)J;\ +} + +#else /* GNUC */ +#if USE_BUILTIN_FFS +#define compute_bit2idx(X, I) I = ffs(X)-1 + +#else /* USE_BUILTIN_FFS */ +#define compute_bit2idx(X, I)\ +{\ + unsigned int Y = X - 1;\ + unsigned int K = Y >> (16-4) & 16;\ + unsigned int N = K; Y >>= K;\ + N += K = Y >> (8-3) & 8; Y >>= K;\ + N += K = Y >> (4-2) & 4; Y >>= K;\ + N += K = Y >> (2-1) & 2; Y >>= K;\ + N += K = Y >> (1-0) & 1; Y >>= K;\ + I = (bindex_t)(N + Y);\ +} +#endif /* USE_BUILTIN_FFS */ +#endif /* GNUC */ + +/* isolate the least set bit of a bitmap */ +#define least_bit(x) ((x) & -(x)) + +/* mask with all bits to left of least bit of x on */ +#define left_bits(x) ((x<<1) | -(x<<1)) + +/* mask with all bits to left of or equal to least bit of x on */ +#define same_or_left_bits(x) ((x) | -(x)) + + +/* ----------------------- Runtime Check Support ------------------------- */ + +/* + For security, the main invariant is that malloc/free/etc never + writes to a static address other than malloc_state, unless static + malloc_state itself has been corrupted, which cannot occur via + malloc (because of these checks). In essence this means that we + believe all pointers, sizes, maps etc held in malloc_state, but + check all of those linked or offsetted from other embedded data + structures. These checks are interspersed with main code in a way + that tends to minimize their run-time cost. + + When FOOTERS is defined, in addition to range checking, we also + verify footer fields of inuse chunks, which can be used guarantee + that the mstate controlling malloc/free is intact. This is a + streamlined version of the approach described by William Robertson + et al in "Run-time Detection of Heap-based Overflows" LISA'03 + http://www.usenix.org/events/lisa03/tech/robertson.html The footer + of an inuse chunk holds the xor of its mstate and a random seed, + that is checked upon calls to free() and realloc(). This is + (probablistically) unguessable from outside the program, but can be + computed by any code successfully malloc'ing any chunk, so does not + itself provide protection against code that has already broken + security through some other means. Unlike Robertson et al, we + always dynamically check addresses of all offset chunks (previous, + next, etc). This turns out to be cheaper than relying on hashes. +*/ + +#if !INSECURE +/* Check if address a is at least as high as any from MORECORE or MMAP */ +#define ok_address(M, a) ((char*)(a) >= (M)->least_addr) +/* Check if address of next chunk n is higher than base chunk p */ +#define ok_next(p, n) ((char*)(p) < (char*)(n)) +/* Check if p has its cinuse bit on */ +#define ok_cinuse(p) cinuse(p) +/* Check if p has its pinuse bit on */ +#define ok_pinuse(p) pinuse(p) + +#else /* !INSECURE */ +#define ok_address(M, a) (1) +#define ok_next(b, n) (1) +#define ok_cinuse(p) (1) +#define ok_pinuse(p) (1) +#endif /* !INSECURE */ + +#if (FOOTERS && !INSECURE) +/* Check if (alleged) mstate m has expected magic field */ +#define ok_magic(M) ((M)->magic == mparams.magic) +#else /* (FOOTERS && !INSECURE) */ +#define ok_magic(M) (1) +#endif /* (FOOTERS && !INSECURE) */ + + +/* In gcc, use __builtin_expect to minimize impact of checks */ +#if !INSECURE +#if defined(__GNUC__) && __GNUC__ >= 3 +#define RTCHECK(e) __builtin_expect(e, 1) +#else /* GNUC */ +#define RTCHECK(e) (e) +#endif /* GNUC */ +#else /* !INSECURE */ +#define RTCHECK(e) (1) +#endif /* !INSECURE */ + +/* macros to set up inuse chunks with or without footers */ + +#if !FOOTERS + +#define mark_inuse_foot(M,p,s) + +/* Set cinuse bit and pinuse bit of next chunk */ +#define set_inuse(M,p,s)\ + ((p)->head = (((p)->head & PINUSE_BIT)|s|CINUSE_BIT),\ + ((mchunkptr)(((char*)(p)) + (s)))->head |= PINUSE_BIT) + +/* Set cinuse and pinuse of this chunk and pinuse of next chunk */ +#define set_inuse_and_pinuse(M,p,s)\ + ((p)->head = (s|PINUSE_BIT|CINUSE_BIT),\ + ((mchunkptr)(((char*)(p)) + (s)))->head |= PINUSE_BIT) + +/* Set size, cinuse and pinuse bit of this chunk */ +#define set_size_and_pinuse_of_inuse_chunk(M, p, s)\ + ((p)->head = (s|PINUSE_BIT|CINUSE_BIT)) + +#else /* FOOTERS */ + +/* Set foot of inuse chunk to be xor of mstate and seed */ +#define mark_inuse_foot(M,p,s)\ + (((mchunkptr)((char*)(p) + (s)))->prev_foot = ((size_t)(M) ^ mparams.magic)) + +#define get_mstate_for(p)\ + ((mstate)(((mchunkptr)((char*)(p) +\ + (chunksize(p))))->prev_foot ^ mparams.magic)) + +#define set_inuse(M,p,s)\ + ((p)->head = (((p)->head & PINUSE_BIT)|s|CINUSE_BIT),\ + (((mchunkptr)(((char*)(p)) + (s)))->head |= PINUSE_BIT), \ + mark_inuse_foot(M,p,s)) + +#define set_inuse_and_pinuse(M,p,s)\ + ((p)->head = (s|PINUSE_BIT|CINUSE_BIT),\ + (((mchunkptr)(((char*)(p)) + (s)))->head |= PINUSE_BIT),\ + mark_inuse_foot(M,p,s)) + +#define set_size_and_pinuse_of_inuse_chunk(M, p, s)\ + ((p)->head = (s|PINUSE_BIT|CINUSE_BIT),\ + mark_inuse_foot(M, p, s)) + +#endif /* !FOOTERS */ + +/* ---------------------------- setting mparams -------------------------- */ + +/* Initialize mparams */ +static int init_mparams(void) { + if (mparams.page_size == 0) { + size_t s; + + mparams.mmap_threshold = DEFAULT_MMAP_THRESHOLD; + mparams.trim_threshold = DEFAULT_TRIM_THRESHOLD; +#if MORECORE_CONTIGUOUS + mparams.default_mflags = USE_LOCK_BIT|USE_MMAP_BIT; +#else /* MORECORE_CONTIGUOUS */ + mparams.default_mflags = USE_LOCK_BIT|USE_MMAP_BIT|USE_NONCONTIGUOUS_BIT; +#endif /* MORECORE_CONTIGUOUS */ + +#if (FOOTERS && !INSECURE) + { +#if USE_DEV_RANDOM + int fd; + unsigned char buf[sizeof(size_t)]; + /* Try to use /dev/urandom, else fall back on using time */ + if ((fd = open("/dev/urandom", O_RDONLY)) >= 0 && + read(fd, buf, sizeof(buf)) == sizeof(buf)) { + s = *((size_t *) buf); + close(fd); + } + else +#endif /* USE_DEV_RANDOM */ + s = (size_t)(time(0) ^ (size_t)0x55555555U); + + s |= (size_t)8U; /* ensure nonzero */ + s &= ~(size_t)7U; /* improve chances of fault for bad values */ + + } +#else /* (FOOTERS && !INSECURE) */ + s = (size_t)0x58585858U; +#endif /* (FOOTERS && !INSECURE) */ + ACQUIRE_MAGIC_INIT_LOCK(); + if (mparams.magic == 0) { + mparams.magic = s; + /* Set up lock for main malloc area */ + INITIAL_LOCK(&gm->mutex); + gm->mflags = mparams.default_mflags; + } + RELEASE_MAGIC_INIT_LOCK(); + +#ifndef WIN32 + mparams.page_size = malloc_getpagesize; + mparams.granularity = ((DEFAULT_GRANULARITY != 0)? + DEFAULT_GRANULARITY : mparams.page_size); +#else /* WIN32 */ + { + SYSTEM_INFO system_info; + GetSystemInfo(&system_info); + mparams.page_size = system_info.dwPageSize; + mparams.granularity = system_info.dwAllocationGranularity; + } +#endif /* WIN32 */ + + /* Sanity-check configuration: + size_t must be unsigned and as wide as pointer type. + ints must be at least 4 bytes. + alignment must be at least 8. + Alignment, min chunk size, and page size must all be powers of 2. + */ + if ((sizeof(size_t) != sizeof(char*)) || + (MAX_SIZE_T < MIN_CHUNK_SIZE) || + (sizeof(int) < 4) || + (MALLOC_ALIGNMENT < (size_t)8U) || + ((MALLOC_ALIGNMENT & (MALLOC_ALIGNMENT-SIZE_T_ONE)) != 0) || + ((MCHUNK_SIZE & (MCHUNK_SIZE-SIZE_T_ONE)) != 0) || + ((mparams.granularity & (mparams.granularity-SIZE_T_ONE)) != 0) || + ((mparams.page_size & (mparams.page_size-SIZE_T_ONE)) != 0)) + ABORT; + } + return 0; +} + +/* support for mallopt */ +static int change_mparam(int param_number, int value) { + size_t val = (size_t)value; + init_mparams(); + switch(param_number) { + case M_TRIM_THRESHOLD: + mparams.trim_threshold = val; + return 1; + case M_GRANULARITY: + if (val >= mparams.page_size && ((val & (val-1)) == 0)) { + mparams.granularity = val; + return 1; + } + else + return 0; + case M_MMAP_THRESHOLD: + mparams.mmap_threshold = val; + return 1; + default: + return 0; + } +} + +#if DEBUG +/* ------------------------- Debugging Support --------------------------- */ + +/* Check properties of any chunk, whether free, inuse, mmapped etc */ +static void do_check_any_chunk(mstate m, mchunkptr p) { + assert((is_aligned(chunk2mem(p))) || (p->head == FENCEPOST_HEAD)); + assert(ok_address(m, p)); +} + +/* Check properties of top chunk */ +static void do_check_top_chunk(mstate m, mchunkptr p) { + msegmentptr sp = segment_holding(m, (char*)p); + size_t sz = chunksize(p); + assert(sp != 0); + assert((is_aligned(chunk2mem(p))) || (p->head == FENCEPOST_HEAD)); + assert(ok_address(m, p)); + assert(sz == m->topsize); + assert(sz > 0); + assert(sz == ((sp->base + sp->size) - (char*)p) - TOP_FOOT_SIZE); + assert(pinuse(p)); + assert(!next_pinuse(p)); +} + +/* Check properties of (inuse) mmapped chunks */ +static void do_check_mmapped_chunk(mstate m, mchunkptr p) { + size_t sz = chunksize(p); + size_t len = (sz + (p->prev_foot & ~IS_MMAPPED_BIT) + MMAP_FOOT_PAD); + assert(is_mmapped(p)); + assert(use_mmap(m)); + assert((is_aligned(chunk2mem(p))) || (p->head == FENCEPOST_HEAD)); + assert(ok_address(m, p)); + assert(!is_small(sz)); + assert((len & (mparams.page_size-SIZE_T_ONE)) == 0); + assert(chunk_plus_offset(p, sz)->head == FENCEPOST_HEAD); + assert(chunk_plus_offset(p, sz+SIZE_T_SIZE)->head == 0); +} + +/* Check properties of inuse chunks */ +static void do_check_inuse_chunk(mstate m, mchunkptr p) { + do_check_any_chunk(m, p); + assert(cinuse(p)); + assert(next_pinuse(p)); + /* If not pinuse and not mmapped, previous chunk has OK offset */ + assert(is_mmapped(p) || pinuse(p) || next_chunk(prev_chunk(p)) == p); + if (is_mmapped(p)) + do_check_mmapped_chunk(m, p); +} + +/* Check properties of free chunks */ +static void do_check_free_chunk(mstate m, mchunkptr p) { + size_t sz = p->head & ~(PINUSE_BIT|CINUSE_BIT); + mchunkptr next = chunk_plus_offset(p, sz); + do_check_any_chunk(m, p); + assert(!cinuse(p)); + assert(!next_pinuse(p)); + assert (!is_mmapped(p)); + if (p != m->dv && p != m->top) { + if (sz >= MIN_CHUNK_SIZE) { + assert((sz & CHUNK_ALIGN_MASK) == 0); + assert(is_aligned(chunk2mem(p))); + assert(next->prev_foot == sz); + assert(pinuse(p)); + assert (next == m->top || cinuse(next)); + assert(p->fd->bk == p); + assert(p->bk->fd == p); + } + else /* markers are always of size SIZE_T_SIZE */ + assert(sz == SIZE_T_SIZE); + } +} + +/* Check properties of malloced chunks at the point they are malloced */ +static void do_check_malloced_chunk(mstate m, void* mem, size_t s) { + if (mem != 0) { + mchunkptr p = mem2chunk(mem); + size_t sz = p->head & ~(PINUSE_BIT|CINUSE_BIT); + do_check_inuse_chunk(m, p); + assert((sz & CHUNK_ALIGN_MASK) == 0); + assert(sz >= MIN_CHUNK_SIZE); + assert(sz >= s); + /* unless mmapped, size is less than MIN_CHUNK_SIZE more than request */ + assert(is_mmapped(p) || sz < (s + MIN_CHUNK_SIZE)); + } +} + +/* Check a tree and its subtrees. */ +static void do_check_tree(mstate m, tchunkptr t) { + tchunkptr head = 0; + tchunkptr u = t; + bindex_t tindex = t->index; + size_t tsize = chunksize(t); + bindex_t idx; + compute_tree_index(tsize, idx); + assert(tindex == idx); + assert(tsize >= MIN_LARGE_SIZE); + assert(tsize >= minsize_for_tree_index(idx)); + assert((idx == NTREEBINS-1) || (tsize < minsize_for_tree_index((idx+1)))); + + do { /* traverse through chain of same-sized nodes */ + do_check_any_chunk(m, ((mchunkptr)u)); + assert(u->index == tindex); + assert(chunksize(u) == tsize); + assert(!cinuse(u)); + assert(!next_pinuse(u)); + assert(u->fd->bk == u); + assert(u->bk->fd == u); + if (u->parent == 0) { + assert(u->child[0] == 0); + assert(u->child[1] == 0); + } + else { + assert(head == 0); /* only one node on chain has parent */ + head = u; + assert(u->parent != u); + assert (u->parent->child[0] == u || + u->parent->child[1] == u || + *((tbinptr*)(u->parent)) == u); + if (u->child[0] != 0) { + assert(u->child[0]->parent == u); + assert(u->child[0] != u); + do_check_tree(m, u->child[0]); + } + if (u->child[1] != 0) { + assert(u->child[1]->parent == u); + assert(u->child[1] != u); + do_check_tree(m, u->child[1]); + } + if (u->child[0] != 0 && u->child[1] != 0) { + assert(chunksize(u->child[0]) < chunksize(u->child[1])); + } + } + u = u->fd; + } while (u != t); + assert(head != 0); +} + +/* Check all the chunks in a treebin. */ +static void do_check_treebin(mstate m, bindex_t i) { + tbinptr* tb = treebin_at(m, i); + tchunkptr t = *tb; + int empty = (m->treemap & (1U << i)) == 0; + if (t == 0) + assert(empty); + if (!empty) + do_check_tree(m, t); +} + +/* Check all the chunks in a smallbin. */ +static void do_check_smallbin(mstate m, bindex_t i) { + sbinptr b = smallbin_at(m, i); + mchunkptr p = b->bk; + unsigned int empty = (m->smallmap & (1U << i)) == 0; + if (p == b) + assert(empty); + if (!empty) { + for (; p != b; p = p->bk) { + size_t size = chunksize(p); + mchunkptr q; + /* each chunk claims to be free */ + do_check_free_chunk(m, p); + /* chunk belongs in bin */ + assert(small_index(size) == i); + assert(p->bk == b || chunksize(p->bk) == chunksize(p)); + /* chunk is followed by an inuse chunk */ + q = next_chunk(p); + if (q->head != FENCEPOST_HEAD) + do_check_inuse_chunk(m, q); + } + } +} + +/* Find x in a bin. Used in other check functions. */ +static int bin_find(mstate m, mchunkptr x) { + size_t size = chunksize(x); + if (is_small(size)) { + bindex_t sidx = small_index(size); + sbinptr b = smallbin_at(m, sidx); + if (smallmap_is_marked(m, sidx)) { + mchunkptr p = b; + do { + if (p == x) + return 1; + } while ((p = p->fd) != b); + } + } + else { + bindex_t tidx; + compute_tree_index(size, tidx); + if (treemap_is_marked(m, tidx)) { + tchunkptr t = *treebin_at(m, tidx); + size_t sizebits = size << leftshift_for_tree_index(tidx); + while (t != 0 && chunksize(t) != size) { + t = t->child[(sizebits >> (SIZE_T_BITSIZE-SIZE_T_ONE)) & 1]; + sizebits <<= 1; + } + if (t != 0) { + tchunkptr u = t; + do { + if (u == (tchunkptr)x) + return 1; + } while ((u = u->fd) != t); + } + } + } + return 0; +} + +/* Traverse each chunk and check it; return total */ +static size_t traverse_and_check(mstate m) { + size_t sum = 0; + if (is_initialized(m)) { + msegmentptr s = &m->seg; + sum += m->topsize + TOP_FOOT_SIZE; + while (s != 0) { + mchunkptr q = align_as_chunk(s->base); + mchunkptr lastq = 0; + assert(pinuse(q)); + while (segment_holds(s, q) && + q != m->top && q->head != FENCEPOST_HEAD) { + sum += chunksize(q); + if (cinuse(q)) { + assert(!bin_find(m, q)); + do_check_inuse_chunk(m, q); + } + else { + assert(q == m->dv || bin_find(m, q)); + assert(lastq == 0 || cinuse(lastq)); /* Not 2 consecutive free */ + do_check_free_chunk(m, q); + } + lastq = q; + q = next_chunk(q); + } + s = s->next; + } + } + return sum; +} + +/* Check all properties of malloc_state. */ +static void do_check_malloc_state(mstate m) { + bindex_t i; + size_t total; + /* check bins */ + for (i = 0; i < NSMALLBINS; ++i) + do_check_smallbin(m, i); + for (i = 0; i < NTREEBINS; ++i) + do_check_treebin(m, i); + + if (m->dvsize != 0) { /* check dv chunk */ + do_check_any_chunk(m, m->dv); + assert(m->dvsize == chunksize(m->dv)); + assert(m->dvsize >= MIN_CHUNK_SIZE); + assert(bin_find(m, m->dv) == 0); + } + + if (m->top != 0) { /* check top chunk */ + do_check_top_chunk(m, m->top); + assert(m->topsize == chunksize(m->top)); + assert(m->topsize > 0); + assert(bin_find(m, m->top) == 0); + } + + total = traverse_and_check(m); + assert(total <= m->footprint); + assert(m->footprint <= m->max_footprint); +} +#endif /* DEBUG */ + +/* ----------------------------- statistics ------------------------------ */ + +#if !NO_MALLINFO +static struct mallinfo internal_mallinfo(mstate m) { + struct mallinfo nm = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }; + if (!PREACTION(m)) { + check_malloc_state(m); + if (is_initialized(m)) { + size_t nfree = SIZE_T_ONE; /* top always free */ + size_t mfree = m->topsize + TOP_FOOT_SIZE; + size_t sum = mfree; + msegmentptr s = &m->seg; + while (s != 0) { + mchunkptr q = align_as_chunk(s->base); + while (segment_holds(s, q) && + q != m->top && q->head != FENCEPOST_HEAD) { + size_t sz = chunksize(q); + sum += sz; + if (!cinuse(q)) { + mfree += sz; + ++nfree; + } + q = next_chunk(q); + } + s = s->next; + } + + nm.arena = sum; + nm.ordblks = nfree; + nm.hblkhd = m->footprint - sum; + nm.usmblks = m->max_footprint; + nm.uordblks = m->footprint - mfree; + nm.fordblks = mfree; + nm.keepcost = m->topsize; + } + + POSTACTION(m); + } + return nm; +} +#endif /* !NO_MALLINFO */ + +static void internal_malloc_stats(mstate m) { + if (!PREACTION(m)) { + size_t maxfp = 0; + size_t fp = 0; + size_t used = 0; + check_malloc_state(m); + if (is_initialized(m)) { + msegmentptr s = &m->seg; + maxfp = m->max_footprint; + fp = m->footprint; + used = fp - (m->topsize + TOP_FOOT_SIZE); + + while (s != 0) { + mchunkptr q = align_as_chunk(s->base); + while (segment_holds(s, q) && + q != m->top && q->head != FENCEPOST_HEAD) { + if (!cinuse(q)) + used -= chunksize(q); + q = next_chunk(q); + } + s = s->next; + } + } + + fprintf(stderr, "max system bytes = %10lu\n", (unsigned long)(maxfp)); + fprintf(stderr, "system bytes = %10lu\n", (unsigned long)(fp)); + fprintf(stderr, "in use bytes = %10lu\n", (unsigned long)(used)); + + POSTACTION(m); + } +} + +/* ----------------------- Operations on smallbins ----------------------- */ + +/* + Various forms of linking and unlinking are defined as macros. Even + the ones for trees, which are very long but have very short typical + paths. This is ugly but reduces reliance on inlining support of + compilers. +*/ + +/* Link a free chunk into a smallbin */ +#define insert_small_chunk(M, P, S) {\ + bindex_t I = small_index(S);\ + mchunkptr B = smallbin_at(M, I);\ + mchunkptr F = B;\ + assert(S >= MIN_CHUNK_SIZE);\ + if (!smallmap_is_marked(M, I))\ + mark_smallmap(M, I);\ + else if (RTCHECK(ok_address(M, B->fd)))\ + F = B->fd;\ + else {\ + CORRUPTION_ERROR_ACTION(M);\ + }\ + B->fd = P;\ + F->bk = P;\ + P->fd = F;\ + P->bk = B;\ +} + +/* Unlink a chunk from a smallbin */ +#define unlink_small_chunk(M, P, S) {\ + mchunkptr F = P->fd;\ + mchunkptr B = P->bk;\ + bindex_t I = small_index(S);\ + assert(P != B);\ + assert(P != F);\ + assert(chunksize(P) == small_index2size(I));\ + if (F == B)\ + clear_smallmap(M, I);\ + else if (RTCHECK((F == smallbin_at(M,I) || ok_address(M, F)) &&\ + (B == smallbin_at(M,I) || ok_address(M, B)))) {\ + F->bk = B;\ + B->fd = F;\ + }\ + else {\ + CORRUPTION_ERROR_ACTION(M);\ + }\ +} + +/* Unlink the first chunk from a smallbin */ +#define unlink_first_small_chunk(M, B, P, I) {\ + mchunkptr F = P->fd;\ + assert(P != B);\ + assert(P != F);\ + assert(chunksize(P) == small_index2size(I));\ + if (B == F)\ + clear_smallmap(M, I);\ + else if (RTCHECK(ok_address(M, F))) {\ + B->fd = F;\ + F->bk = B;\ + }\ + else {\ + CORRUPTION_ERROR_ACTION(M);\ + }\ +} + +/* Replace dv node, binning the old one */ +/* Used only when dvsize known to be small */ +#define replace_dv(M, P, S) {\ + size_t DVS = M->dvsize;\ + if (DVS != 0) {\ + mchunkptr DV = M->dv;\ + assert(is_small(DVS));\ + insert_small_chunk(M, DV, DVS);\ + }\ + M->dvsize = S;\ + M->dv = P;\ +} + +/* ------------------------- Operations on trees ------------------------- */ + +/* Insert chunk into tree */ +#define insert_large_chunk(M, X, S) {\ + tbinptr* H;\ + bindex_t I;\ + compute_tree_index(S, I);\ + H = treebin_at(M, I);\ + X->index = I;\ + X->child[0] = X->child[1] = 0;\ + if (!treemap_is_marked(M, I)) {\ + mark_treemap(M, I);\ + *H = X;\ + X->parent = (tchunkptr)H;\ + X->fd = X->bk = X;\ + }\ + else {\ + tchunkptr T = *H;\ + size_t K = S << leftshift_for_tree_index(I);\ + for (;;) {\ + if (chunksize(T) != S) {\ + tchunkptr* C = &(T->child[(K >> (SIZE_T_BITSIZE-SIZE_T_ONE)) & 1]);\ + K <<= 1;\ + if (*C != 0)\ + T = *C;\ + else if (RTCHECK(ok_address(M, C))) {\ + *C = X;\ + X->parent = T;\ + X->fd = X->bk = X;\ + break;\ + }\ + else {\ + CORRUPTION_ERROR_ACTION(M);\ + break;\ + }\ + }\ + else {\ + tchunkptr F = T->fd;\ + if (RTCHECK(ok_address(M, T) && ok_address(M, F))) {\ + T->fd = F->bk = X;\ + X->fd = F;\ + X->bk = T;\ + X->parent = 0;\ + break;\ + }\ + else {\ + CORRUPTION_ERROR_ACTION(M);\ + break;\ + }\ + }\ + }\ + }\ +} + +/* + Unlink steps: + + 1. If x is a chained node, unlink it from its same-sized fd/bk links + and choose its bk node as its replacement. + 2. If x was the last node of its size, but not a leaf node, it must + be replaced with a leaf node (not merely one with an open left or + right), to make sure that lefts and rights of descendents + correspond properly to bit masks. We use the rightmost descendent + of x. We could use any other leaf, but this is easy to locate and + tends to counteract removal of leftmosts elsewhere, and so keeps + paths shorter than minimally guaranteed. This doesn't loop much + because on average a node in a tree is near the bottom. + 3. If x is the base of a chain (i.e., has parent links) relink + x's parent and children to x's replacement (or null if none). +*/ + +#define unlink_large_chunk(M, X) {\ + tchunkptr XP = X->parent;\ + tchunkptr R;\ + if (X->bk != X) {\ + tchunkptr F = X->fd;\ + R = X->bk;\ + if (RTCHECK(ok_address(M, F))) {\ + F->bk = R;\ + R->fd = F;\ + }\ + else {\ + CORRUPTION_ERROR_ACTION(M);\ + }\ + }\ + else {\ + tchunkptr* RP;\ + if (((R = *(RP = &(X->child[1]))) != 0) ||\ + ((R = *(RP = &(X->child[0]))) != 0)) {\ + tchunkptr* CP;\ + while ((*(CP = &(R->child[1])) != 0) ||\ + (*(CP = &(R->child[0])) != 0)) {\ + R = *(RP = CP);\ + }\ + if (RTCHECK(ok_address(M, RP)))\ + *RP = 0;\ + else {\ + CORRUPTION_ERROR_ACTION(M);\ + }\ + }\ + }\ + if (XP != 0) {\ + tbinptr* H = treebin_at(M, X->index);\ + if (X == *H) {\ + if ((*H = R) == 0) \ + clear_treemap(M, X->index);\ + }\ + else if (RTCHECK(ok_address(M, XP))) {\ + if (XP->child[0] == X) \ + XP->child[0] = R;\ + else \ + XP->child[1] = R;\ + }\ + else\ + CORRUPTION_ERROR_ACTION(M);\ + if (R != 0) {\ + if (RTCHECK(ok_address(M, R))) {\ + tchunkptr C0, C1;\ + R->parent = XP;\ + if ((C0 = X->child[0]) != 0) {\ + if (RTCHECK(ok_address(M, C0))) {\ + R->child[0] = C0;\ + C0->parent = R;\ + }\ + else\ + CORRUPTION_ERROR_ACTION(M);\ + }\ + if ((C1 = X->child[1]) != 0) {\ + if (RTCHECK(ok_address(M, C1))) {\ + R->child[1] = C1;\ + C1->parent = R;\ + }\ + else\ + CORRUPTION_ERROR_ACTION(M);\ + }\ + }\ + else\ + CORRUPTION_ERROR_ACTION(M);\ + }\ + }\ +} + +/* Relays to large vs small bin operations */ + +#define insert_chunk(M, P, S)\ + if (is_small(S)) insert_small_chunk(M, P, S)\ + else { tchunkptr TP = (tchunkptr)(P); insert_large_chunk(M, TP, S); } + +#define unlink_chunk(M, P, S)\ + if (is_small(S)) unlink_small_chunk(M, P, S)\ + else { tchunkptr TP = (tchunkptr)(P); unlink_large_chunk(M, TP); } + + +/* Relays to internal calls to malloc/free from realloc, memalign etc */ + +#if ONLY_MSPACES +#define internal_malloc(m, b) mspace_malloc(m, b) +#define internal_free(m, mem) mspace_free(m,mem); +#else /* ONLY_MSPACES */ +#if MSPACES +#define internal_malloc(m, b)\ + (m == gm)? dlmalloc(b) : mspace_malloc(m, b) +#define internal_free(m, mem)\ + if (m == gm) dlfree(mem); else mspace_free(m,mem); +#else /* MSPACES */ +#define internal_malloc(m, b) dlmalloc(b) +#define internal_free(m, mem) dlfree(mem) +#endif /* MSPACES */ +#endif /* ONLY_MSPACES */ + +/* ----------------------- Direct-mmapping chunks ----------------------- */ + +/* + Directly mmapped chunks are set up with an offset to the start of + the mmapped region stored in the prev_foot field of the chunk. This + allows reconstruction of the required argument to MUNMAP when freed, + and also allows adjustment of the returned chunk to meet alignment + requirements (especially in memalign). There is also enough space + allocated to hold a fake next chunk of size SIZE_T_SIZE to maintain + the PINUSE bit so frees can be checked. +*/ + +/* Malloc using mmap */ +static void* mmap_alloc(mstate m, size_t nb) { + size_t mmsize = granularity_align(nb + SIX_SIZE_T_SIZES + CHUNK_ALIGN_MASK); + if (mmsize > nb) { /* Check for wrap around 0 */ + char* mm = (char*)(DIRECT_MMAP(mmsize)); + if (mm != CMFAIL) { + size_t offset = align_offset(chunk2mem(mm)); + size_t psize = mmsize - offset - MMAP_FOOT_PAD; + mchunkptr p = (mchunkptr)(mm + offset); + p->prev_foot = offset | IS_MMAPPED_BIT; + (p)->head = (psize|CINUSE_BIT); + mark_inuse_foot(m, p, psize); + chunk_plus_offset(p, psize)->head = FENCEPOST_HEAD; + chunk_plus_offset(p, psize+SIZE_T_SIZE)->head = 0; + + if (mm < m->least_addr) + m->least_addr = mm; + if ((m->footprint += mmsize) > m->max_footprint) + m->max_footprint = m->footprint; + assert(is_aligned(chunk2mem(p))); + check_mmapped_chunk(m, p); + return chunk2mem(p); + } + } + return 0; +} + +/* Realloc using mmap */ +static mchunkptr mmap_resize(mstate m, mchunkptr oldp, size_t nb) { + size_t oldsize = chunksize(oldp); + if (is_small(nb)) /* Can't shrink mmap regions below small size */ + return 0; + /* Keep old chunk if big enough but not too big */ + if (oldsize >= nb + SIZE_T_SIZE && + (oldsize - nb) <= (mparams.granularity << 1)) + return oldp; + else { + size_t offset = oldp->prev_foot & ~IS_MMAPPED_BIT; + size_t oldmmsize = oldsize + offset + MMAP_FOOT_PAD; + size_t newmmsize = granularity_align(nb + SIX_SIZE_T_SIZES + + CHUNK_ALIGN_MASK); + char* cp = (char*)CALL_MREMAP((char*)oldp - offset, + oldmmsize, newmmsize, 1); + if (cp != CMFAIL) { + mchunkptr newp = (mchunkptr)(cp + offset); + size_t psize = newmmsize - offset - MMAP_FOOT_PAD; + newp->head = (psize|CINUSE_BIT); + mark_inuse_foot(m, newp, psize); + chunk_plus_offset(newp, psize)->head = FENCEPOST_HEAD; + chunk_plus_offset(newp, psize+SIZE_T_SIZE)->head = 0; + + if (cp < m->least_addr) + m->least_addr = cp; + if ((m->footprint += newmmsize - oldmmsize) > m->max_footprint) + m->max_footprint = m->footprint; + check_mmapped_chunk(m, newp); + return newp; + } + } + return 0; +} + +/* -------------------------- mspace management -------------------------- */ + +/* Initialize top chunk and its size */ +static void init_top(mstate m, mchunkptr p, size_t psize) { + /* Ensure alignment */ + size_t offset = align_offset(chunk2mem(p)); + p = (mchunkptr)((char*)p + offset); + psize -= offset; + + m->top = p; + m->topsize = psize; + p->head = psize | PINUSE_BIT; + /* set size of fake trailing chunk holding overhead space only once */ + chunk_plus_offset(p, psize)->head = TOP_FOOT_SIZE; + m->trim_check = mparams.trim_threshold; /* reset on each update */ +} + +/* Initialize bins for a new mstate that is otherwise zeroed out */ +static void init_bins(mstate m) { + /* Establish circular links for smallbins */ + bindex_t i; + for (i = 0; i < NSMALLBINS; ++i) { + sbinptr bin = smallbin_at(m,i); + bin->fd = bin->bk = bin; + } +} + +#if PROCEED_ON_ERROR + +/* default corruption action */ +static void reset_on_error(mstate m) { + int i; + ++malloc_corruption_error_count; + /* Reinitialize fields to forget about all memory */ + m->smallbins = m->treebins = 0; + m->dvsize = m->topsize = 0; + m->seg.base = 0; + m->seg.size = 0; + m->seg.next = 0; + m->top = m->dv = 0; + for (i = 0; i < NTREEBINS; ++i) + *treebin_at(m, i) = 0; + init_bins(m); +} +#endif /* PROCEED_ON_ERROR */ + +/* Allocate chunk and prepend remainder with chunk in successor base. */ +static void* prepend_alloc(mstate m, char* newbase, char* oldbase, + size_t nb) { + mchunkptr p = align_as_chunk(newbase); + mchunkptr oldfirst = align_as_chunk(oldbase); + size_t psize = (char*)oldfirst - (char*)p; + mchunkptr q = chunk_plus_offset(p, nb); + size_t qsize = psize - nb; + set_size_and_pinuse_of_inuse_chunk(m, p, nb); + + assert((char*)oldfirst > (char*)q); + assert(pinuse(oldfirst)); + assert(qsize >= MIN_CHUNK_SIZE); + + /* consolidate remainder with first chunk of old base */ + if (oldfirst == m->top) { + size_t tsize = m->topsize += qsize; + m->top = q; + q->head = tsize | PINUSE_BIT; + check_top_chunk(m, q); + } + else if (oldfirst == m->dv) { + size_t dsize = m->dvsize += qsize; + m->dv = q; + set_size_and_pinuse_of_free_chunk(q, dsize); + } + else { + if (!cinuse(oldfirst)) { + size_t nsize = chunksize(oldfirst); + unlink_chunk(m, oldfirst, nsize); + oldfirst = chunk_plus_offset(oldfirst, nsize); + qsize += nsize; + } + set_free_with_pinuse(q, qsize, oldfirst); + insert_chunk(m, q, qsize); + check_free_chunk(m, q); + } + + check_malloced_chunk(m, chunk2mem(p), nb); + return chunk2mem(p); +} + + +/* Add a segment to hold a new noncontiguous region */ +static void add_segment(mstate m, char* tbase, size_t tsize, flag_t mmapped) { + /* Determine locations and sizes of segment, fenceposts, old top */ + char* old_top = (char*)m->top; + msegmentptr oldsp = segment_holding(m, old_top); + char* old_end = oldsp->base + oldsp->size; + size_t ssize = pad_request(sizeof(struct malloc_segment)); + char* rawsp = old_end - (ssize + FOUR_SIZE_T_SIZES + CHUNK_ALIGN_MASK); + size_t offset = align_offset(chunk2mem(rawsp)); + char* asp = rawsp + offset; + char* csp = (asp < (old_top + MIN_CHUNK_SIZE))? old_top : asp; + mchunkptr sp = (mchunkptr)csp; + msegmentptr ss = (msegmentptr)(chunk2mem(sp)); + mchunkptr tnext = chunk_plus_offset(sp, ssize); + mchunkptr p = tnext; + int nfences = 0; + + /* reset top to new space */ + init_top(m, (mchunkptr)tbase, tsize - TOP_FOOT_SIZE); + + /* Set up segment record */ + assert(is_aligned(ss)); + set_size_and_pinuse_of_inuse_chunk(m, sp, ssize); + *ss = m->seg; /* Push current record */ + m->seg.base = tbase; + m->seg.size = tsize; + set_segment_flags(&m->seg, mmapped); + m->seg.next = ss; + + /* Insert trailing fenceposts */ + for (;;) { + mchunkptr nextp = chunk_plus_offset(p, SIZE_T_SIZE); + p->head = FENCEPOST_HEAD; + ++nfences; + if ((char*)(&(nextp->head)) < old_end) + p = nextp; + else + break; + } + assert(nfences >= 2); + + /* Insert the rest of old top into a bin as an ordinary free chunk */ + if (csp != old_top) { + mchunkptr q = (mchunkptr)old_top; + size_t psize = csp - old_top; + mchunkptr tn = chunk_plus_offset(q, psize); + set_free_with_pinuse(q, psize, tn); + insert_chunk(m, q, psize); + } + + check_top_chunk(m, m->top); +} + +/* -------------------------- System allocation -------------------------- */ + +/* Get memory from system using MORECORE or MMAP */ +static void* sys_alloc(mstate m, size_t nb) { + char* tbase = CMFAIL; + size_t tsize = 0; + flag_t mmap_flag = 0; + + init_mparams(); + + /* Directly map large chunks */ + if (use_mmap(m) && nb >= mparams.mmap_threshold) { + void* mem = mmap_alloc(m, nb); + if (mem != 0) + return mem; + } + + /* + Try getting memory in any of three ways (in most-preferred to + least-preferred order): + 1. A call to MORECORE that can normally contiguously extend memory. + (disabled if not MORECORE_CONTIGUOUS or not HAVE_MORECORE or + or main space is mmapped or a previous contiguous call failed) + 2. A call to MMAP new space (disabled if not HAVE_MMAP). + Note that under the default settings, if MORECORE is unable to + fulfill a request, and HAVE_MMAP is true, then mmap is + used as a noncontiguous system allocator. This is a useful backup + strategy for systems with holes in address spaces -- in this case + sbrk cannot contiguously expand the heap, but mmap may be able to + find space. + 3. A call to MORECORE that cannot usually contiguously extend memory. + (disabled if not HAVE_MORECORE) + */ + + if (MORECORE_CONTIGUOUS && !use_noncontiguous(m)) { + char* br = CMFAIL; + msegmentptr ss = (m->top == 0)? 0 : segment_holding(m, (char*)m->top); + size_t asize = 0; + ACQUIRE_MORECORE_LOCK(); + + if (ss == 0) { /* First time through or recovery */ + char* base = (char*)CALL_MORECORE(0); + if (base != CMFAIL) { + asize = granularity_align(nb + TOP_FOOT_SIZE + SIZE_T_ONE); + /* Adjust to end on a page boundary */ + if (!is_page_aligned(base)) + asize += (page_align((size_t)base) - (size_t)base); + /* Can't call MORECORE if size is negative when treated as signed */ + if (asize < HALF_MAX_SIZE_T && + (br = (char*)(CALL_MORECORE(asize))) == base) { + tbase = base; + tsize = asize; + } + } + } + else { + /* Subtract out existing available top space from MORECORE request. */ + asize = granularity_align(nb - m->topsize + TOP_FOOT_SIZE + SIZE_T_ONE); + /* Use mem here only if it did continuously extend old space */ + if (asize < HALF_MAX_SIZE_T && + (br = (char*)(CALL_MORECORE(asize))) == ss->base+ss->size) { + tbase = br; + tsize = asize; + } + } + + if (tbase == CMFAIL) { /* Cope with partial failure */ + if (br != CMFAIL) { /* Try to use/extend the space we did get */ + if (asize < HALF_MAX_SIZE_T && + asize < nb + TOP_FOOT_SIZE + SIZE_T_ONE) { + size_t esize = granularity_align(nb + TOP_FOOT_SIZE + SIZE_T_ONE - asize); + if (esize < HALF_MAX_SIZE_T) { + char* end = (char*)CALL_MORECORE(esize); + if (end != CMFAIL) + asize += esize; + else { /* Can't use; try to release */ + (void)CALL_MORECORE(-asize); + br = CMFAIL; + } + } + } + } + if (br != CMFAIL) { /* Use the space we did get */ + tbase = br; + tsize = asize; + } + else + disable_contiguous(m); /* Don't try contiguous path in the future */ + } + + RELEASE_MORECORE_LOCK(); + } + + if (HAVE_MMAP && tbase == CMFAIL) { /* Try MMAP */ + size_t req = nb + TOP_FOOT_SIZE + SIZE_T_ONE; + size_t rsize = granularity_align(req); + if (rsize > nb) { /* Fail if wraps around zero */ + char* mp = (char*)(CALL_MMAP(rsize)); + if (mp != CMFAIL) { + tbase = mp; + tsize = rsize; + mmap_flag = IS_MMAPPED_BIT; + } + } + } + + if (HAVE_MORECORE && tbase == CMFAIL) { /* Try noncontiguous MORECORE */ + size_t asize = granularity_align(nb + TOP_FOOT_SIZE + SIZE_T_ONE); + if (asize < HALF_MAX_SIZE_T) { + char* br = CMFAIL; + char* end = CMFAIL; + ACQUIRE_MORECORE_LOCK(); + br = (char*)(CALL_MORECORE(asize)); + end = (char*)(CALL_MORECORE(0)); + RELEASE_MORECORE_LOCK(); + if (br != CMFAIL && end != CMFAIL && br < end) { + size_t ssize = end - br; + if (ssize > nb + TOP_FOOT_SIZE) { + tbase = br; + tsize = ssize; + } + } + } + } + + if (tbase != CMFAIL) { + + if ((m->footprint += tsize) > m->max_footprint) + m->max_footprint = m->footprint; + + if (!is_initialized(m)) { /* first-time initialization */ + m->seg.base = m->least_addr = tbase; + m->seg.size = tsize; + set_segment_flags(&m->seg, mmap_flag); + m->magic = mparams.magic; + init_bins(m); + if (is_global(m)) + init_top(m, (mchunkptr)tbase, tsize - TOP_FOOT_SIZE); + else { + /* Offset top by embedded malloc_state */ + mchunkptr mn = next_chunk(mem2chunk(m)); + init_top(m, mn, (size_t)((tbase + tsize) - (char*)mn) -TOP_FOOT_SIZE); + } + } + + else { + /* Try to merge with an existing segment */ + msegmentptr sp = &m->seg; + while (sp != 0 && tbase != sp->base + sp->size) + sp = sp->next; + if (sp != 0 && + !is_extern_segment(sp) && + check_segment_merge(sp, tbase, tsize) && + (get_segment_flags(sp) & IS_MMAPPED_BIT) == mmap_flag && + segment_holds(sp, m->top)) { /* append */ + sp->size += tsize; + init_top(m, m->top, m->topsize + tsize); + } + else { + if (tbase < m->least_addr) + m->least_addr = tbase; + sp = &m->seg; + while (sp != 0 && sp->base != tbase + tsize) + sp = sp->next; + if (sp != 0 && + !is_extern_segment(sp) && + check_segment_merge(sp, tbase, tsize) && + (get_segment_flags(sp) & IS_MMAPPED_BIT) == mmap_flag) { + char* oldbase = sp->base; + sp->base = tbase; + sp->size += tsize; + return prepend_alloc(m, tbase, oldbase, nb); + } + else + add_segment(m, tbase, tsize, mmap_flag); + } + } + + if (nb < m->topsize) { /* Allocate from new or extended top space */ + size_t rsize = m->topsize -= nb; + mchunkptr p = m->top; + mchunkptr r = m->top = chunk_plus_offset(p, nb); + r->head = rsize | PINUSE_BIT; + set_size_and_pinuse_of_inuse_chunk(m, p, nb); + check_top_chunk(m, m->top); + check_malloced_chunk(m, chunk2mem(p), nb); + return chunk2mem(p); + } + } + + MALLOC_FAILURE_ACTION; + return 0; +} + +/* ----------------------- system deallocation -------------------------- */ + +/* Unmap and unlink any mmapped segments that don't contain used chunks */ +static size_t release_unused_segments(mstate m) { + size_t released = 0; + msegmentptr pred = &m->seg; + msegmentptr sp = pred->next; + while (sp != 0) { + char* base = sp->base; + size_t size = sp->size; + msegmentptr next = sp->next; + if (is_mmapped_segment(sp) && !is_extern_segment(sp)) { + mchunkptr p = align_as_chunk(base); + size_t psize = chunksize(p); + /* Can unmap if first chunk holds entire segment and not pinned */ + if (!cinuse(p) && (char*)p + psize >= base + size - TOP_FOOT_SIZE) { + tchunkptr tp = (tchunkptr)p; + assert(segment_holds(sp, (char*)sp)); + if (p == m->dv) { + m->dv = 0; + m->dvsize = 0; + } + else { + unlink_large_chunk(m, tp); + } + if (CALL_MUNMAP(base, size) == 0) { + released += size; + m->footprint -= size; + /* unlink obsoleted record */ + sp = pred; + sp->next = next; + } + else { /* back out if cannot unmap */ + insert_large_chunk(m, tp, psize); + } + } + } + pred = sp; + sp = next; + } + return released; +} + +static int sys_trim(mstate m, size_t pad) { + size_t released = 0; + if (pad < MAX_REQUEST && is_initialized(m)) { + pad += TOP_FOOT_SIZE; /* ensure enough room for segment overhead */ + + if (m->topsize > pad) { + /* Shrink top space in granularity-size units, keeping at least one */ + size_t unit = mparams.granularity; + size_t extra = ((m->topsize - pad + (unit - SIZE_T_ONE)) / unit - + SIZE_T_ONE) * unit; + msegmentptr sp = segment_holding(m, (char*)m->top); + + if (!is_extern_segment(sp)) { + if (is_mmapped_segment(sp)) { + if (HAVE_MMAP && + sp->size >= extra && + !has_segment_link(m, sp)) { /* can't shrink if pinned */ + size_t newsize = sp->size - extra; + /* Prefer mremap, fall back to munmap */ + if ((CALL_MREMAP(sp->base, sp->size, newsize, 0) != MFAIL) || + (CALL_MUNMAP(sp->base + newsize, extra) == 0)) { + released = extra; + } + } + } + else if (HAVE_MORECORE) { + if (extra >= HALF_MAX_SIZE_T) /* Avoid wrapping negative */ + extra = (HALF_MAX_SIZE_T) + SIZE_T_ONE - unit; + ACQUIRE_MORECORE_LOCK(); + { + /* Make sure end of memory is where we last set it. */ + char* old_br = (char*)(CALL_MORECORE(0)); + if (old_br == sp->base + sp->size) { + char* rel_br = (char*)(CALL_MORECORE(-extra)); + char* new_br = (char*)(CALL_MORECORE(0)); + if (rel_br != CMFAIL && new_br < old_br) + released = old_br - new_br; + } + } + RELEASE_MORECORE_LOCK(); + } + } + + if (released != 0) { + sp->size -= released; + m->footprint -= released; + init_top(m, m->top, m->topsize - released); + check_top_chunk(m, m->top); + } + } + + /* Unmap any unused mmapped segments */ + if (HAVE_MMAP) + released += release_unused_segments(m); + + /* On failure, disable autotrim to avoid repeated failed future calls */ + if (released == 0) + m->trim_check = MAX_SIZE_T; + } + + return (released != 0)? 1 : 0; +} + +/* ---------------------------- malloc support --------------------------- */ + +/* allocate a large request from the best fitting chunk in a treebin */ +static void* tmalloc_large(mstate m, size_t nb) { + tchunkptr v = 0; + size_t rsize = -nb; /* Unsigned negation */ + tchunkptr t; + bindex_t idx; + compute_tree_index(nb, idx); + + if ((t = *treebin_at(m, idx)) != 0) { + /* Traverse tree for this bin looking for node with size == nb */ + size_t sizebits = nb << leftshift_for_tree_index(idx); + tchunkptr rst = 0; /* The deepest untaken right subtree */ + for (;;) { + tchunkptr rt; + size_t trem = chunksize(t) - nb; + if (trem < rsize) { + v = t; + if ((rsize = trem) == 0) + break; + } + rt = t->child[1]; + t = t->child[(sizebits >> (SIZE_T_BITSIZE-SIZE_T_ONE)) & 1]; + if (rt != 0 && rt != t) + rst = rt; + if (t == 0) { + t = rst; /* set t to least subtree holding sizes > nb */ + break; + } + sizebits <<= 1; + } + } + + if (t == 0 && v == 0) { /* set t to root of next non-empty treebin */ + binmap_t leftbits = left_bits(idx2bit(idx)) & m->treemap; + if (leftbits != 0) { + bindex_t i; + binmap_t leastbit = least_bit(leftbits); + compute_bit2idx(leastbit, i); + t = *treebin_at(m, i); + } + } + + while (t != 0) { /* find smallest of tree or subtree */ + size_t trem = chunksize(t) - nb; + if (trem < rsize) { + rsize = trem; + v = t; + } + t = leftmost_child(t); + } + + /* If dv is a better fit, return 0 so malloc will use it */ + if (v != 0 && rsize < (size_t)(m->dvsize - nb)) { + if (RTCHECK(ok_address(m, v))) { /* split */ + mchunkptr r = chunk_plus_offset(v, nb); + assert(chunksize(v) == rsize + nb); + if (RTCHECK(ok_next(v, r))) { + unlink_large_chunk(m, v); + if (rsize < MIN_CHUNK_SIZE) + set_inuse_and_pinuse(m, v, (rsize + nb)); + else { + set_size_and_pinuse_of_inuse_chunk(m, v, nb); + set_size_and_pinuse_of_free_chunk(r, rsize); + insert_chunk(m, r, rsize); + } + return chunk2mem(v); + } + } + CORRUPTION_ERROR_ACTION(m); + } + return 0; +} + +/* allocate a small request from the best fitting chunk in a treebin */ +static void* tmalloc_small(mstate m, size_t nb) { + tchunkptr t, v; + size_t rsize; + bindex_t i; + binmap_t leastbit = least_bit(m->treemap); + compute_bit2idx(leastbit, i); + + v = t = *treebin_at(m, i); + rsize = chunksize(t) - nb; + + while ((t = leftmost_child(t)) != 0) { + size_t trem = chunksize(t) - nb; + if (trem < rsize) { + rsize = trem; + v = t; + } + } + + if (RTCHECK(ok_address(m, v))) { + mchunkptr r = chunk_plus_offset(v, nb); + assert(chunksize(v) == rsize + nb); + if (RTCHECK(ok_next(v, r))) { + unlink_large_chunk(m, v); + if (rsize < MIN_CHUNK_SIZE) + set_inuse_and_pinuse(m, v, (rsize + nb)); + else { + set_size_and_pinuse_of_inuse_chunk(m, v, nb); + set_size_and_pinuse_of_free_chunk(r, rsize); + replace_dv(m, r, rsize); + } + return chunk2mem(v); + } + } + + CORRUPTION_ERROR_ACTION(m); + return 0; +} + +/* --------------------------- realloc support --------------------------- */ + +static void* internal_realloc(mstate m, void* oldmem, size_t bytes) { + if (bytes >= MAX_REQUEST) { + MALLOC_FAILURE_ACTION; + return 0; + } + if (!PREACTION(m)) { + mchunkptr oldp = mem2chunk(oldmem); + size_t oldsize = chunksize(oldp); + mchunkptr next = chunk_plus_offset(oldp, oldsize); + mchunkptr newp = 0; + void* extra = 0; + + /* Try to either shrink or extend into top. Else malloc-copy-free */ + + if (RTCHECK(ok_address(m, oldp) && ok_cinuse(oldp) && + ok_next(oldp, next) && ok_pinuse(next))) { + size_t nb = request2size(bytes); + if (is_mmapped(oldp)) + newp = mmap_resize(m, oldp, nb); + else if (oldsize >= nb) { /* already big enough */ + size_t rsize = oldsize - nb; + newp = oldp; + if (rsize >= MIN_CHUNK_SIZE) { + mchunkptr remainder = chunk_plus_offset(newp, nb); + set_inuse(m, newp, nb); + set_inuse(m, remainder, rsize); + extra = chunk2mem(remainder); + } + } + else if (next == m->top && oldsize + m->topsize > nb) { + /* Expand into top */ + size_t newsize = oldsize + m->topsize; + size_t newtopsize = newsize - nb; + mchunkptr newtop = chunk_plus_offset(oldp, nb); + set_inuse(m, oldp, nb); + newtop->head = newtopsize |PINUSE_BIT; + m->top = newtop; + m->topsize = newtopsize; + newp = oldp; + } + } + else { + USAGE_ERROR_ACTION(m, oldmem); + POSTACTION(m); + return 0; + } + + POSTACTION(m); + + if (newp != 0) { + if (extra != 0) { + internal_free(m, extra); + } + check_inuse_chunk(m, newp); + return chunk2mem(newp); + } + else { + void* newmem = internal_malloc(m, bytes); + if (newmem != 0) { + size_t oc = oldsize - overhead_for(oldp); + memcpy(newmem, oldmem, (oc < bytes)? oc : bytes); + internal_free(m, oldmem); + } + return newmem; + } + } + return 0; +} + +/* --------------------------- memalign support -------------------------- */ + +static void* internal_memalign(mstate m, size_t alignment, size_t bytes) { + if (alignment <= MALLOC_ALIGNMENT) /* Can just use malloc */ + return internal_malloc(m, bytes); + if (alignment < MIN_CHUNK_SIZE) /* must be at least a minimum chunk size */ + alignment = MIN_CHUNK_SIZE; + if ((alignment & (alignment-SIZE_T_ONE)) != 0) {/* Ensure a power of 2 */ + size_t a = MALLOC_ALIGNMENT << 1; + while (a < alignment) a <<= 1; + alignment = a; + } + + if (bytes >= MAX_REQUEST - alignment) { + if (m != 0) { /* Test isn't needed but avoids compiler warning */ + MALLOC_FAILURE_ACTION; + } + } + else { + size_t nb = request2size(bytes); + size_t req = nb + alignment + MIN_CHUNK_SIZE - CHUNK_OVERHEAD; + char* mem = (char*)internal_malloc(m, req); + if (mem != 0) { + void* leader = 0; + void* trailer = 0; + mchunkptr p = mem2chunk(mem); + + if (PREACTION(m)) return 0; + if ((((size_t)(mem)) % alignment) != 0) { /* misaligned */ + /* + Find an aligned spot inside chunk. Since we need to give + back leading space in a chunk of at least MIN_CHUNK_SIZE, if + the first calculation places us at a spot with less than + MIN_CHUNK_SIZE leader, we can move to the next aligned spot. + We've allocated enough total room so that this is always + possible. + */ + char* br = (char*)mem2chunk((size_t)(((size_t)(mem + + alignment - + SIZE_T_ONE)) & + -alignment)); + char* pos = ((size_t)(br - (char*)(p)) >= MIN_CHUNK_SIZE)? + br : br+alignment; + mchunkptr newp = (mchunkptr)pos; + size_t leadsize = pos - (char*)(p); + size_t newsize = chunksize(p) - leadsize; + + if (is_mmapped(p)) { /* For mmapped chunks, just adjust offset */ + newp->prev_foot = p->prev_foot + leadsize; + newp->head = (newsize|CINUSE_BIT); + } + else { /* Otherwise, give back leader, use the rest */ + set_inuse(m, newp, newsize); + set_inuse(m, p, leadsize); + leader = chunk2mem(p); + } + p = newp; + } + + /* Give back spare room at the end */ + if (!is_mmapped(p)) { + size_t size = chunksize(p); + if (size > nb + MIN_CHUNK_SIZE) { + size_t remainder_size = size - nb; + mchunkptr remainder = chunk_plus_offset(p, nb); + set_inuse(m, p, nb); + set_inuse(m, remainder, remainder_size); + trailer = chunk2mem(remainder); + } + } + + assert (chunksize(p) >= nb); + assert((((size_t)(chunk2mem(p))) % alignment) == 0); + check_inuse_chunk(m, p); + POSTACTION(m); + if (leader != 0) { + internal_free(m, leader); + } + if (trailer != 0) { + internal_free(m, trailer); + } + return chunk2mem(p); + } + } + return 0; +} + +/* ------------------------ comalloc/coalloc support --------------------- */ + +static void** ialloc(mstate m, + size_t n_elements, + size_t* sizes, + int opts, + void* chunks[]) { + /* + This provides common support for independent_X routines, handling + all of the combinations that can result. + + The opts arg has: + bit 0 set if all elements are same size (using sizes[0]) + bit 1 set if elements should be zeroed + */ + + size_t element_size; /* chunksize of each element, if all same */ + size_t contents_size; /* total size of elements */ + size_t array_size; /* request size of pointer array */ + void* mem; /* malloced aggregate space */ + mchunkptr p; /* corresponding chunk */ + size_t remainder_size; /* remaining bytes while splitting */ + void** marray; /* either "chunks" or malloced ptr array */ + mchunkptr array_chunk; /* chunk for malloced ptr array */ + flag_t was_enabled; /* to disable mmap */ + size_t size; + size_t i; + + /* compute array length, if needed */ + if (chunks != 0) { + if (n_elements == 0) + return chunks; /* nothing to do */ + marray = chunks; + array_size = 0; + } + else { + /* if empty req, must still return chunk representing empty array */ + if (n_elements == 0) + return (void**)internal_malloc(m, 0); + marray = 0; + array_size = request2size(n_elements * (sizeof(void*))); + } + + /* compute total element size */ + if (opts & 0x1) { /* all-same-size */ + element_size = request2size(*sizes); + contents_size = n_elements * element_size; + } + else { /* add up all the sizes */ + element_size = 0; + contents_size = 0; + for (i = 0; i != n_elements; ++i) + contents_size += request2size(sizes[i]); + } + + size = contents_size + array_size; + + /* + Allocate the aggregate chunk. First disable direct-mmapping so + malloc won't use it, since we would not be able to later + free/realloc space internal to a segregated mmap region. + */ + was_enabled = use_mmap(m); + disable_mmap(m); + mem = internal_malloc(m, size - CHUNK_OVERHEAD); + if (was_enabled) + enable_mmap(m); + if (mem == 0) + return 0; + + if (PREACTION(m)) return 0; + p = mem2chunk(mem); + remainder_size = chunksize(p); + + assert(!is_mmapped(p)); + + if (opts & 0x2) { /* optionally clear the elements */ + memset((size_t*)mem, 0, remainder_size - SIZE_T_SIZE - array_size); + } + + /* If not provided, allocate the pointer array as final part of chunk */ + if (marray == 0) { + size_t array_chunk_size; + array_chunk = chunk_plus_offset(p, contents_size); + array_chunk_size = remainder_size - contents_size; + marray = (void**) (chunk2mem(array_chunk)); + set_size_and_pinuse_of_inuse_chunk(m, array_chunk, array_chunk_size); + remainder_size = contents_size; + } + + /* split out elements */ + for (i = 0; ; ++i) { + marray[i] = chunk2mem(p); + if (i != n_elements-1) { + if (element_size != 0) + size = element_size; + else + size = request2size(sizes[i]); + remainder_size -= size; + set_size_and_pinuse_of_inuse_chunk(m, p, size); + p = chunk_plus_offset(p, size); + } + else { /* the final element absorbs any overallocation slop */ + set_size_and_pinuse_of_inuse_chunk(m, p, remainder_size); + break; + } + } + +#if DEBUG + if (marray != chunks) { + /* final element must have exactly exhausted chunk */ + if (element_size != 0) { + assert(remainder_size == element_size); + } + else { + assert(remainder_size == request2size(sizes[i])); + } + check_inuse_chunk(m, mem2chunk(marray)); + } + for (i = 0; i != n_elements; ++i) + check_inuse_chunk(m, mem2chunk(marray[i])); + +#endif /* DEBUG */ + + POSTACTION(m); + return marray; +} + + +/* -------------------------- public routines ---------------------------- */ + +#if !ONLY_MSPACES + +void* dlmalloc(size_t bytes) { + /* + Basic algorithm: + If a small request (< 256 bytes minus per-chunk overhead): + 1. If one exists, use a remainderless chunk in associated smallbin. + (Remainderless means that there are too few excess bytes to + represent as a chunk.) + 2. If it is big enough, use the dv chunk, which is normally the + chunk adjacent to the one used for the most recent small request. + 3. If one exists, split the smallest available chunk in a bin, + saving remainder in dv. + 4. If it is big enough, use the top chunk. + 5. If available, get memory from system and use it + Otherwise, for a large request: + 1. Find the smallest available binned chunk that fits, and use it + if it is better fitting than dv chunk, splitting if necessary. + 2. If better fitting than any binned chunk, use the dv chunk. + 3. If it is big enough, use the top chunk. + 4. If request size >= mmap threshold, try to directly mmap this chunk. + 5. If available, get memory from system and use it + + The ugly goto's here ensure that postaction occurs along all paths. + */ + + if (!PREACTION(gm)) { + void* mem; + size_t nb; + if (bytes <= MAX_SMALL_REQUEST) { + bindex_t idx; + binmap_t smallbits; + nb = (bytes < MIN_REQUEST)? MIN_CHUNK_SIZE : pad_request(bytes); + idx = small_index(nb); + smallbits = gm->smallmap >> idx; + + if ((smallbits & 0x3U) != 0) { /* Remainderless fit to a smallbin. */ + mchunkptr b, p; + idx += ~smallbits & 1; /* Uses next bin if idx empty */ + b = smallbin_at(gm, idx); + p = b->fd; + assert(chunksize(p) == small_index2size(idx)); + unlink_first_small_chunk(gm, b, p, idx); + set_inuse_and_pinuse(gm, p, small_index2size(idx)); + mem = chunk2mem(p); + check_malloced_chunk(gm, mem, nb); + goto postaction; + } + + else if (nb > gm->dvsize) { + if (smallbits != 0) { /* Use chunk in next nonempty smallbin */ + mchunkptr b, p, r; + size_t rsize; + bindex_t i; + binmap_t leftbits = (smallbits << idx) & left_bits(idx2bit(idx)); + binmap_t leastbit = least_bit(leftbits); + compute_bit2idx(leastbit, i); + b = smallbin_at(gm, i); + p = b->fd; + assert(chunksize(p) == small_index2size(i)); + unlink_first_small_chunk(gm, b, p, i); + rsize = small_index2size(i) - nb; + /* Fit here cannot be remainderless if 4byte sizes */ + if (SIZE_T_SIZE != 4 && rsize < MIN_CHUNK_SIZE) + set_inuse_and_pinuse(gm, p, small_index2size(i)); + else { + set_size_and_pinuse_of_inuse_chunk(gm, p, nb); + r = chunk_plus_offset(p, nb); + set_size_and_pinuse_of_free_chunk(r, rsize); + replace_dv(gm, r, rsize); + } + mem = chunk2mem(p); + check_malloced_chunk(gm, mem, nb); + goto postaction; + } + + else if (gm->treemap != 0 && (mem = tmalloc_small(gm, nb)) != 0) { + check_malloced_chunk(gm, mem, nb); + goto postaction; + } + } + } + else if (bytes >= MAX_REQUEST) + nb = MAX_SIZE_T; /* Too big to allocate. Force failure (in sys alloc) */ + else { + nb = pad_request(bytes); + if (gm->treemap != 0 && (mem = tmalloc_large(gm, nb)) != 0) { + check_malloced_chunk(gm, mem, nb); + goto postaction; + } + } + + if (nb <= gm->dvsize) { + size_t rsize = gm->dvsize - nb; + mchunkptr p = gm->dv; + if (rsize >= MIN_CHUNK_SIZE) { /* split dv */ + mchunkptr r = gm->dv = chunk_plus_offset(p, nb); + gm->dvsize = rsize; + set_size_and_pinuse_of_free_chunk(r, rsize); + set_size_and_pinuse_of_inuse_chunk(gm, p, nb); + } + else { /* exhaust dv */ + size_t dvs = gm->dvsize; + gm->dvsize = 0; + gm->dv = 0; + set_inuse_and_pinuse(gm, p, dvs); + } + mem = chunk2mem(p); + check_malloced_chunk(gm, mem, nb); + goto postaction; + } + + else if (nb < gm->topsize) { /* Split top */ + size_t rsize = gm->topsize -= nb; + mchunkptr p = gm->top; + mchunkptr r = gm->top = chunk_plus_offset(p, nb); + r->head = rsize | PINUSE_BIT; + set_size_and_pinuse_of_inuse_chunk(gm, p, nb); + mem = chunk2mem(p); + check_top_chunk(gm, gm->top); + check_malloced_chunk(gm, mem, nb); + goto postaction; + } + + mem = sys_alloc(gm, nb); + + postaction: + POSTACTION(gm); + return mem; + } + + return 0; +} + +void dlfree(void* mem) { + /* + Consolidate freed chunks with preceeding or succeeding bordering + free chunks, if they exist, and then place in a bin. Intermixed + with special cases for top, dv, mmapped chunks, and usage errors. + */ + + if (mem != 0) { + mchunkptr p = mem2chunk(mem); +#if FOOTERS + mstate fm = get_mstate_for(p); + if (!ok_magic(fm)) { + USAGE_ERROR_ACTION(fm, p); + return; + } +#else /* FOOTERS */ +#define fm gm +#endif /* FOOTERS */ + if (!PREACTION(fm)) { + check_inuse_chunk(fm, p); + if (RTCHECK(ok_address(fm, p) && ok_cinuse(p))) { + size_t psize = chunksize(p); + mchunkptr next = chunk_plus_offset(p, psize); + if (!pinuse(p)) { + size_t prevsize = p->prev_foot; + if ((prevsize & IS_MMAPPED_BIT) != 0) { + prevsize &= ~IS_MMAPPED_BIT; + psize += prevsize + MMAP_FOOT_PAD; + if (CALL_MUNMAP((char*)p - prevsize, psize) == 0) + fm->footprint -= psize; + goto postaction; + } + else { + mchunkptr prev = chunk_minus_offset(p, prevsize); + psize += prevsize; + p = prev; + if (RTCHECK(ok_address(fm, prev))) { /* consolidate backward */ + if (p != fm->dv) { + unlink_chunk(fm, p, prevsize); + } + else if ((next->head & INUSE_BITS) == INUSE_BITS) { + fm->dvsize = psize; + set_free_with_pinuse(p, psize, next); + goto postaction; + } + } + else + goto erroraction; + } + } + + if (RTCHECK(ok_next(p, next) && ok_pinuse(next))) { + if (!cinuse(next)) { /* consolidate forward */ + if (next == fm->top) { + size_t tsize = fm->topsize += psize; + fm->top = p; + p->head = tsize | PINUSE_BIT; + if (p == fm->dv) { + fm->dv = 0; + fm->dvsize = 0; + } + if (should_trim(fm, tsize)) + sys_trim(fm, 0); + goto postaction; + } + else if (next == fm->dv) { + size_t dsize = fm->dvsize += psize; + fm->dv = p; + set_size_and_pinuse_of_free_chunk(p, dsize); + goto postaction; + } + else { + size_t nsize = chunksize(next); + psize += nsize; + unlink_chunk(fm, next, nsize); + set_size_and_pinuse_of_free_chunk(p, psize); + if (p == fm->dv) { + fm->dvsize = psize; + goto postaction; + } + } + } + else + set_free_with_pinuse(p, psize, next); + insert_chunk(fm, p, psize); + check_free_chunk(fm, p); + goto postaction; + } + } + erroraction: + USAGE_ERROR_ACTION(fm, p); + postaction: + POSTACTION(fm); + } + } +#if !FOOTERS +#undef fm +#endif /* FOOTERS */ +} + +void* dlcalloc(size_t n_elements, size_t elem_size) { + void* mem; + size_t req = 0; + if (n_elements != 0) { + req = n_elements * elem_size; + if (((n_elements | elem_size) & ~(size_t)0xffff) && + (req / n_elements != elem_size)) + req = MAX_SIZE_T; /* force downstream failure on overflow */ + } + mem = dlmalloc(req); + if (mem != 0 && calloc_must_clear(mem2chunk(mem))) + memset(mem, 0, req); + return mem; +} + +void* dlrealloc(void* oldmem, size_t bytes) { + if (oldmem == 0) + return dlmalloc(bytes); +#ifdef REALLOC_ZERO_BYTES_FREES + if (bytes == 0) { + dlfree(oldmem); + return 0; + } +#endif /* REALLOC_ZERO_BYTES_FREES */ + else { +#if ! FOOTERS + mstate m = gm; +#else /* FOOTERS */ + mstate m = get_mstate_for(mem2chunk(oldmem)); + if (!ok_magic(m)) { + USAGE_ERROR_ACTION(m, oldmem); + return 0; + } +#endif /* FOOTERS */ + return internal_realloc(m, oldmem, bytes); + } +} + +void* dlmemalign(size_t alignment, size_t bytes) { + return internal_memalign(gm, alignment, bytes); +} + +void** dlindependent_calloc(size_t n_elements, size_t elem_size, + void* chunks[]) { + size_t sz = elem_size; /* serves as 1-element array */ + return ialloc(gm, n_elements, &sz, 3, chunks); +} + +void** dlindependent_comalloc(size_t n_elements, size_t sizes[], + void* chunks[]) { + return ialloc(gm, n_elements, sizes, 0, chunks); +} + +void* dlvalloc(size_t bytes) { + size_t pagesz; + init_mparams(); + pagesz = mparams.page_size; + return dlmemalign(pagesz, bytes); +} + +void* dlpvalloc(size_t bytes) { + size_t pagesz; + init_mparams(); + pagesz = mparams.page_size; + return dlmemalign(pagesz, (bytes + pagesz - SIZE_T_ONE) & ~(pagesz - SIZE_T_ONE)); +} + +int dlmalloc_trim(size_t pad) { + int result = 0; + if (!PREACTION(gm)) { + result = sys_trim(gm, pad); + POSTACTION(gm); + } + return result; +} + +size_t dlmalloc_footprint(void) { + return gm->footprint; +} + +size_t dlmalloc_max_footprint(void) { + return gm->max_footprint; +} + +#if !NO_MALLINFO +struct mallinfo dlmallinfo(void) { + return internal_mallinfo(gm); +} +#endif /* NO_MALLINFO */ + +void dlmalloc_stats() { + internal_malloc_stats(gm); +} + +size_t dlmalloc_usable_size(void* mem) { + if (mem != 0) { + mchunkptr p = mem2chunk(mem); + if (cinuse(p)) + return chunksize(p) - overhead_for(p); + } + return 0; +} + +int dlmallopt(int param_number, int value) { + return change_mparam(param_number, value); +} + +#endif /* !ONLY_MSPACES */ + +/* ----------------------------- user mspaces ---------------------------- */ + +#if MSPACES + +static mstate init_user_mstate(char* tbase, size_t tsize) { + size_t msize = pad_request(sizeof(struct malloc_state)); + mchunkptr mn; + mchunkptr msp = align_as_chunk(tbase); + mstate m = (mstate)(chunk2mem(msp)); + memset(m, 0, msize); + INITIAL_LOCK(&m->mutex); + msp->head = (msize|PINUSE_BIT|CINUSE_BIT); + m->seg.base = m->least_addr = tbase; + m->seg.size = m->footprint = m->max_footprint = tsize; + m->magic = mparams.magic; + m->mflags = mparams.default_mflags; + disable_contiguous(m); + init_bins(m); + mn = next_chunk(mem2chunk(m)); + init_top(m, mn, (size_t)((tbase + tsize) - (char*)mn) - TOP_FOOT_SIZE); + check_top_chunk(m, m->top); + return m; +} + +mspace create_mspace(size_t capacity, int locked) { + mstate m = 0; + size_t msize = pad_request(sizeof(struct malloc_state)); + init_mparams(); /* Ensure pagesize etc initialized */ + + if (capacity < (size_t) -(msize + TOP_FOOT_SIZE + mparams.page_size)) { + size_t rs = ((capacity == 0)? mparams.granularity : + (capacity + TOP_FOOT_SIZE + msize)); + size_t tsize = granularity_align(rs); + char* tbase = (char*)(CALL_MMAP(tsize)); + if (tbase != CMFAIL) { + m = init_user_mstate(tbase, tsize); + set_segment_flags(&m->seg, IS_MMAPPED_BIT); + set_lock(m, locked); + } + } + return (mspace)m; +} + +mspace create_mspace_with_base(void* base, size_t capacity, int locked) { + mstate m = 0; + size_t msize = pad_request(sizeof(struct malloc_state)); + init_mparams(); /* Ensure pagesize etc initialized */ + + if (capacity > msize + TOP_FOOT_SIZE && + capacity < (size_t) -(msize + TOP_FOOT_SIZE + mparams.page_size)) { + m = init_user_mstate((char*)base, capacity); + set_segment_flags(&m->seg, EXTERN_BIT); + set_lock(m, locked); + } + return (mspace)m; +} + +size_t destroy_mspace(mspace msp) { + size_t freed = 0; + mstate ms = (mstate)msp; + if (ok_magic(ms)) { + msegmentptr sp = &ms->seg; + while (sp != 0) { + char* base = sp->base; + size_t size = sp->size; + flag_t flag = get_segment_flags(sp); + sp = sp->next; + if ((flag & IS_MMAPPED_BIT) && !(flag & EXTERN_BIT) && + CALL_MUNMAP(base, size) == 0) + freed += size; + } + } + else { + USAGE_ERROR_ACTION(ms,ms); + } + return freed; +} + +/* + mspace versions of routines are near-clones of the global + versions. This is not so nice but better than the alternatives. +*/ + + +void* mspace_malloc(mspace msp, size_t bytes) { + mstate ms = (mstate)msp; + if (!ok_magic(ms)) { + USAGE_ERROR_ACTION(ms,ms); + return 0; + } + if (!PREACTION(ms)) { + void* mem; + size_t nb; + if (bytes <= MAX_SMALL_REQUEST) { + bindex_t idx; + binmap_t smallbits; + nb = (bytes < MIN_REQUEST)? MIN_CHUNK_SIZE : pad_request(bytes); + idx = small_index(nb); + smallbits = ms->smallmap >> idx; + + if ((smallbits & 0x3U) != 0) { /* Remainderless fit to a smallbin. */ + mchunkptr b, p; + idx += ~smallbits & 1; /* Uses next bin if idx empty */ + b = smallbin_at(ms, idx); + p = b->fd; + assert(chunksize(p) == small_index2size(idx)); + unlink_first_small_chunk(ms, b, p, idx); + set_inuse_and_pinuse(ms, p, small_index2size(idx)); + mem = chunk2mem(p); + check_malloced_chunk(ms, mem, nb); + goto postaction; + } + + else if (nb > ms->dvsize) { + if (smallbits != 0) { /* Use chunk in next nonempty smallbin */ + mchunkptr b, p, r; + size_t rsize; + bindex_t i; + binmap_t leftbits = (smallbits << idx) & left_bits(idx2bit(idx)); + binmap_t leastbit = least_bit(leftbits); + compute_bit2idx(leastbit, i); + b = smallbin_at(ms, i); + p = b->fd; + assert(chunksize(p) == small_index2size(i)); + unlink_first_small_chunk(ms, b, p, i); + rsize = small_index2size(i) - nb; + /* Fit here cannot be remainderless if 4byte sizes */ + if (SIZE_T_SIZE != 4 && rsize < MIN_CHUNK_SIZE) + set_inuse_and_pinuse(ms, p, small_index2size(i)); + else { + set_size_and_pinuse_of_inuse_chunk(ms, p, nb); + r = chunk_plus_offset(p, nb); + set_size_and_pinuse_of_free_chunk(r, rsize); + replace_dv(ms, r, rsize); + } + mem = chunk2mem(p); + check_malloced_chunk(ms, mem, nb); + goto postaction; + } + + else if (ms->treemap != 0 && (mem = tmalloc_small(ms, nb)) != 0) { + check_malloced_chunk(ms, mem, nb); + goto postaction; + } + } + } + else if (bytes >= MAX_REQUEST) + nb = MAX_SIZE_T; /* Too big to allocate. Force failure (in sys alloc) */ + else { + nb = pad_request(bytes); + if (ms->treemap != 0 && (mem = tmalloc_large(ms, nb)) != 0) { + check_malloced_chunk(ms, mem, nb); + goto postaction; + } + } + + if (nb <= ms->dvsize) { + size_t rsize = ms->dvsize - nb; + mchunkptr p = ms->dv; + if (rsize >= MIN_CHUNK_SIZE) { /* split dv */ + mchunkptr r = ms->dv = chunk_plus_offset(p, nb); + ms->dvsize = rsize; + set_size_and_pinuse_of_free_chunk(r, rsize); + set_size_and_pinuse_of_inuse_chunk(ms, p, nb); + } + else { /* exhaust dv */ + size_t dvs = ms->dvsize; + ms->dvsize = 0; + ms->dv = 0; + set_inuse_and_pinuse(ms, p, dvs); + } + mem = chunk2mem(p); + check_malloced_chunk(ms, mem, nb); + goto postaction; + } + + else if (nb < ms->topsize) { /* Split top */ + size_t rsize = ms->topsize -= nb; + mchunkptr p = ms->top; + mchunkptr r = ms->top = chunk_plus_offset(p, nb); + r->head = rsize | PINUSE_BIT; + set_size_and_pinuse_of_inuse_chunk(ms, p, nb); + mem = chunk2mem(p); + check_top_chunk(ms, ms->top); + check_malloced_chunk(ms, mem, nb); + goto postaction; + } + + mem = sys_alloc(ms, nb); + + postaction: + POSTACTION(ms); + return mem; + } + + return 0; +} + +void mspace_free(mspace msp, void* mem) { + if (mem != 0) { + mchunkptr p = mem2chunk(mem); +#if FOOTERS + mstate fm = get_mstate_for(p); +#else /* FOOTERS */ + mstate fm = (mstate)msp; +#endif /* FOOTERS */ + if (!ok_magic(fm)) { + USAGE_ERROR_ACTION(fm, p); + return; + } + if (!PREACTION(fm)) { + check_inuse_chunk(fm, p); + if (RTCHECK(ok_address(fm, p) && ok_cinuse(p))) { + size_t psize = chunksize(p); + mchunkptr next = chunk_plus_offset(p, psize); + if (!pinuse(p)) { + size_t prevsize = p->prev_foot; + if ((prevsize & IS_MMAPPED_BIT) != 0) { + prevsize &= ~IS_MMAPPED_BIT; + psize += prevsize + MMAP_FOOT_PAD; + if (CALL_MUNMAP((char*)p - prevsize, psize) == 0) + fm->footprint -= psize; + goto postaction; + } + else { + mchunkptr prev = chunk_minus_offset(p, prevsize); + psize += prevsize; + p = prev; + if (RTCHECK(ok_address(fm, prev))) { /* consolidate backward */ + if (p != fm->dv) { + unlink_chunk(fm, p, prevsize); + } + else if ((next->head & INUSE_BITS) == INUSE_BITS) { + fm->dvsize = psize; + set_free_with_pinuse(p, psize, next); + goto postaction; + } + } + else + goto erroraction; + } + } + + if (RTCHECK(ok_next(p, next) && ok_pinuse(next))) { + if (!cinuse(next)) { /* consolidate forward */ + if (next == fm->top) { + size_t tsize = fm->topsize += psize; + fm->top = p; + p->head = tsize | PINUSE_BIT; + if (p == fm->dv) { + fm->dv = 0; + fm->dvsize = 0; + } + if (should_trim(fm, tsize)) + sys_trim(fm, 0); + goto postaction; + } + else if (next == fm->dv) { + size_t dsize = fm->dvsize += psize; + fm->dv = p; + set_size_and_pinuse_of_free_chunk(p, dsize); + goto postaction; + } + else { + size_t nsize = chunksize(next); + psize += nsize; + unlink_chunk(fm, next, nsize); + set_size_and_pinuse_of_free_chunk(p, psize); + if (p == fm->dv) { + fm->dvsize = psize; + goto postaction; + } + } + } + else + set_free_with_pinuse(p, psize, next); + insert_chunk(fm, p, psize); + check_free_chunk(fm, p); + goto postaction; + } + } + erroraction: + USAGE_ERROR_ACTION(fm, p); + postaction: + POSTACTION(fm); + } + } +} + +void* mspace_calloc(mspace msp, size_t n_elements, size_t elem_size) { + void* mem; + size_t req = 0; + mstate ms = (mstate)msp; + if (!ok_magic(ms)) { + USAGE_ERROR_ACTION(ms,ms); + return 0; + } + if (n_elements != 0) { + req = n_elements * elem_size; + if (((n_elements | elem_size) & ~(size_t)0xffff) && + (req / n_elements != elem_size)) + req = MAX_SIZE_T; /* force downstream failure on overflow */ + } + mem = internal_malloc(ms, req); + if (mem != 0 && calloc_must_clear(mem2chunk(mem))) + memset(mem, 0, req); + return mem; +} + +void* mspace_realloc(mspace msp, void* oldmem, size_t bytes) { + if (oldmem == 0) + return mspace_malloc(msp, bytes); +#ifdef REALLOC_ZERO_BYTES_FREES + if (bytes == 0) { + mspace_free(msp, oldmem); + return 0; + } +#endif /* REALLOC_ZERO_BYTES_FREES */ + else { +#if FOOTERS + mchunkptr p = mem2chunk(oldmem); + mstate ms = get_mstate_for(p); +#else /* FOOTERS */ + mstate ms = (mstate)msp; +#endif /* FOOTERS */ + if (!ok_magic(ms)) { + USAGE_ERROR_ACTION(ms,ms); + return 0; + } + return internal_realloc(ms, oldmem, bytes); + } +} + +void* mspace_memalign(mspace msp, size_t alignment, size_t bytes) { + mstate ms = (mstate)msp; + if (!ok_magic(ms)) { + USAGE_ERROR_ACTION(ms,ms); + return 0; + } + return internal_memalign(ms, alignment, bytes); +} + +void** mspace_independent_calloc(mspace msp, size_t n_elements, + size_t elem_size, void* chunks[]) { + size_t sz = elem_size; /* serves as 1-element array */ + mstate ms = (mstate)msp; + if (!ok_magic(ms)) { + USAGE_ERROR_ACTION(ms,ms); + return 0; + } + return ialloc(ms, n_elements, &sz, 3, chunks); +} + +void** mspace_independent_comalloc(mspace msp, size_t n_elements, + size_t sizes[], void* chunks[]) { + mstate ms = (mstate)msp; + if (!ok_magic(ms)) { + USAGE_ERROR_ACTION(ms,ms); + return 0; + } + return ialloc(ms, n_elements, sizes, 0, chunks); +} + +int mspace_trim(mspace msp, size_t pad) { + int result = 0; + mstate ms = (mstate)msp; + if (ok_magic(ms)) { + if (!PREACTION(ms)) { + result = sys_trim(ms, pad); + POSTACTION(ms); + } + } + else { + USAGE_ERROR_ACTION(ms,ms); + } + return result; +} + +void mspace_malloc_stats(mspace msp) { + mstate ms = (mstate)msp; + if (ok_magic(ms)) { + internal_malloc_stats(ms); + } + else { + USAGE_ERROR_ACTION(ms,ms); + } +} + +size_t mspace_footprint(mspace msp) { + size_t result; + mstate ms = (mstate)msp; + if (ok_magic(ms)) { + result = ms->footprint; + } + USAGE_ERROR_ACTION(ms,ms); + return result; +} + + +size_t mspace_max_footprint(mspace msp) { + size_t result; + mstate ms = (mstate)msp; + if (ok_magic(ms)) { + result = ms->max_footprint; + } + USAGE_ERROR_ACTION(ms,ms); + return result; +} + + +#if !NO_MALLINFO +struct mallinfo mspace_mallinfo(mspace msp) { + mstate ms = (mstate)msp; + if (!ok_magic(ms)) { + USAGE_ERROR_ACTION(ms,ms); + } + return internal_mallinfo(ms); +} +#endif /* NO_MALLINFO */ + +int mspace_mallopt(int param_number, int value) { + return change_mparam(param_number, value); +} + +#endif /* MSPACES */ + +/* -------------------- Alternative MORECORE functions ------------------- */ + +/* + Guidelines for creating a custom version of MORECORE: + + * For best performance, MORECORE should allocate in multiples of pagesize. + * MORECORE may allocate more memory than requested. (Or even less, + but this will usually result in a malloc failure.) + * MORECORE must not allocate memory when given argument zero, but + instead return one past the end address of memory from previous + nonzero call. + * For best performance, consecutive calls to MORECORE with positive + arguments should return increasing addresses, indicating that + space has been contiguously extended. + * Even though consecutive calls to MORECORE need not return contiguous + addresses, it must be OK for malloc'ed chunks to span multiple + regions in those cases where they do happen to be contiguous. + * MORECORE need not handle negative arguments -- it may instead + just return MFAIL when given negative arguments. + Negative arguments are always multiples of pagesize. MORECORE + must not misinterpret negative args as large positive unsigned + args. You can suppress all such calls from even occurring by defining + MORECORE_CANNOT_TRIM, + + As an example alternative MORECORE, here is a custom allocator + kindly contributed for pre-OSX macOS. It uses virtually but not + necessarily physically contiguous non-paged memory (locked in, + present and won't get swapped out). You can use it by uncommenting + this section, adding some #includes, and setting up the appropriate + defines above: + + #define MORECORE osMoreCore + + There is also a shutdown routine that should somehow be called for + cleanup upon program exit. + + #define MAX_POOL_ENTRIES 100 + #define MINIMUM_MORECORE_SIZE (64 * 1024U) + static int next_os_pool; + void *our_os_pools[MAX_POOL_ENTRIES]; + + void *osMoreCore(int size) + { + void *ptr = 0; + static void *sbrk_top = 0; + + if (size > 0) + { + if (size < MINIMUM_MORECORE_SIZE) + size = MINIMUM_MORECORE_SIZE; + if (CurrentExecutionLevel() == kTaskLevel) + ptr = PoolAllocateResident(size + RM_PAGE_SIZE, 0); + if (ptr == 0) + { + return (void *) MFAIL; + } + // save ptrs so they can be freed during cleanup + our_os_pools[next_os_pool] = ptr; + next_os_pool++; + ptr = (void *) ((((size_t) ptr) + RM_PAGE_MASK) & ~RM_PAGE_MASK); + sbrk_top = (char *) ptr + size; + return ptr; + } + else if (size < 0) + { + // we don't currently support shrink behavior + return (void *) MFAIL; + } + else + { + return sbrk_top; + } + } + + // cleanup any allocated memory pools + // called as last thing before shutting down driver + + void osCleanupMem(void) + { + void **ptr; + + for (ptr = our_os_pools; ptr < &our_os_pools[MAX_POOL_ENTRIES]; ptr++) + if (*ptr) + { + PoolDeallocate(*ptr); + *ptr = 0; + } + } + +*/ + + +/* ----------------------------------------------------------------------- +History: + V2.8.3 Thu Sep 22 11:16:32 2005 Doug Lea (dl at gee) + * Add max_footprint functions + * Ensure all appropriate literals are size_t + * Fix conditional compilation problem for some #define settings + * Avoid concatenating segments with the one provided + in create_mspace_with_base + * Rename some variables to avoid compiler shadowing warnings + * Use explicit lock initialization. + * Better handling of sbrk interference. + * Simplify and fix segment insertion, trimming and mspace_destroy + * Reinstate REALLOC_ZERO_BYTES_FREES option from 2.7.x + * Thanks especially to Dennis Flanagan for help on these. + + V2.8.2 Sun Jun 12 16:01:10 2005 Doug Lea (dl at gee) + * Fix memalign brace error. + + V2.8.1 Wed Jun 8 16:11:46 2005 Doug Lea (dl at gee) + * Fix improper #endif nesting in C++ + * Add explicit casts needed for C++ + + V2.8.0 Mon May 30 14:09:02 2005 Doug Lea (dl at gee) + * Use trees for large bins + * Support mspaces + * Use segments to unify sbrk-based and mmap-based system allocation, + removing need for emulation on most platforms without sbrk. + * Default safety checks + * Optional footer checks. Thanks to William Robertson for the idea. + * Internal code refactoring + * Incorporate suggestions and platform-specific changes. + Thanks to Dennis Flanagan, Colin Plumb, Niall Douglas, + Aaron Bachmann, Emery Berger, and others. + * Speed up non-fastbin processing enough to remove fastbins. + * Remove useless cfree() to avoid conflicts with other apps. + * Remove internal memcpy, memset. Compilers handle builtins better. + * Remove some options that no one ever used and rename others. + + V2.7.2 Sat Aug 17 09:07:30 2002 Doug Lea (dl at gee) + * Fix malloc_state bitmap array misdeclaration + + V2.7.1 Thu Jul 25 10:58:03 2002 Doug Lea (dl at gee) + * Allow tuning of FIRST_SORTED_BIN_SIZE + * Use PTR_UINT as type for all ptr->int casts. Thanks to John Belmonte. + * Better detection and support for non-contiguousness of MORECORE. + Thanks to Andreas Mueller, Conal Walsh, and Wolfram Gloger + * Bypass most of malloc if no frees. Thanks To Emery Berger. + * Fix freeing of old top non-contiguous chunk im sysmalloc. + * Raised default trim and map thresholds to 256K. + * Fix mmap-related #defines. Thanks to Lubos Lunak. + * Fix copy macros; added LACKS_FCNTL_H. Thanks to Neal Walfield. + * Branch-free bin calculation + * Default trim and mmap thresholds now 256K. + + V2.7.0 Sun Mar 11 14:14:06 2001 Doug Lea (dl at gee) + * Introduce independent_comalloc and independent_calloc. + Thanks to Michael Pachos for motivation and help. + * Make optional .h file available + * Allow > 2GB requests on 32bit systems. + * new WIN32 sbrk, mmap, munmap, lock code from . + Thanks also to Andreas Mueller , + and Anonymous. + * Allow override of MALLOC_ALIGNMENT (Thanks to Ruud Waij for + helping test this.) + * memalign: check alignment arg + * realloc: don't try to shift chunks backwards, since this + leads to more fragmentation in some programs and doesn't + seem to help in any others. + * Collect all cases in malloc requiring system memory into sysmalloc + * Use mmap as backup to sbrk + * Place all internal state in malloc_state + * Introduce fastbins (although similar to 2.5.1) + * Many minor tunings and cosmetic improvements + * Introduce USE_PUBLIC_MALLOC_WRAPPERS, USE_MALLOC_LOCK + * Introduce MALLOC_FAILURE_ACTION, MORECORE_CONTIGUOUS + Thanks to Tony E. Bennett and others. + * Include errno.h to support default failure action. + + V2.6.6 Sun Dec 5 07:42:19 1999 Doug Lea (dl at gee) + * return null for negative arguments + * Added Several WIN32 cleanups from Martin C. Fong + * Add 'LACKS_SYS_PARAM_H' for those systems without 'sys/param.h' + (e.g. WIN32 platforms) + * Cleanup header file inclusion for WIN32 platforms + * Cleanup code to avoid Microsoft Visual C++ compiler complaints + * Add 'USE_DL_PREFIX' to quickly allow co-existence with existing + memory allocation routines + * Set 'malloc_getpagesize' for WIN32 platforms (needs more work) + * Use 'assert' rather than 'ASSERT' in WIN32 code to conform to + usage of 'assert' in non-WIN32 code + * Improve WIN32 'sbrk()' emulation's 'findRegion()' routine to + avoid infinite loop + * Always call 'fREe()' rather than 'free()' + + V2.6.5 Wed Jun 17 15:57:31 1998 Doug Lea (dl at gee) + * Fixed ordering problem with boundary-stamping + + V2.6.3 Sun May 19 08:17:58 1996 Doug Lea (dl at gee) + * Added pvalloc, as recommended by H.J. Liu + * Added 64bit pointer support mainly from Wolfram Gloger + * Added anonymously donated WIN32 sbrk emulation + * Malloc, calloc, getpagesize: add optimizations from Raymond Nijssen + * malloc_extend_top: fix mask error that caused wastage after + foreign sbrks + * Add linux mremap support code from HJ Liu + + V2.6.2 Tue Dec 5 06:52:55 1995 Doug Lea (dl at gee) + * Integrated most documentation with the code. + * Add support for mmap, with help from + Wolfram Gloger (Gloger at lrz.uni-muenchen.de). + * Use last_remainder in more cases. + * Pack bins using idea from colin at nyx10.cs.du.edu + * Use ordered bins instead of best-fit threshhold + * Eliminate block-local decls to simplify tracing and debugging. + * Support another case of realloc via move into top + * Fix error occuring when initial sbrk_base not word-aligned. + * Rely on page size for units instead of SBRK_UNIT to + avoid surprises about sbrk alignment conventions. + * Add mallinfo, mallopt. Thanks to Raymond Nijssen + (raymond at es.ele.tue.nl) for the suggestion. + * Add `pad' argument to malloc_trim and top_pad mallopt parameter. + * More precautions for cases where other routines call sbrk, + courtesy of Wolfram Gloger (Gloger at lrz.uni-muenchen.de). + * Added macros etc., allowing use in linux libc from + H.J. Lu (hjl at gnu.ai.mit.edu) + * Inverted this history list + + V2.6.1 Sat Dec 2 14:10:57 1995 Doug Lea (dl at gee) + * Re-tuned and fixed to behave more nicely with V2.6.0 changes. + * Removed all preallocation code since under current scheme + the work required to undo bad preallocations exceeds + the work saved in good cases for most test programs. + * No longer use return list or unconsolidated bins since + no scheme using them consistently outperforms those that don't + given above changes. + * Use best fit for very large chunks to prevent some worst-cases. + * Added some support for debugging + + V2.6.0 Sat Nov 4 07:05:23 1995 Doug Lea (dl at gee) + * Removed footers when chunks are in use. Thanks to + Paul Wilson (wilson at cs.texas.edu) for the suggestion. + + V2.5.4 Wed Nov 1 07:54:51 1995 Doug Lea (dl at gee) + * Added malloc_trim, with help from Wolfram Gloger + (wmglo at Dent.MED.Uni-Muenchen.DE). + + V2.5.3 Tue Apr 26 10:16:01 1994 Doug Lea (dl at g) + + V2.5.2 Tue Apr 5 16:20:40 1994 Doug Lea (dl at g) + * realloc: try to expand in both directions + * malloc: swap order of clean-bin strategy; + * realloc: only conditionally expand backwards + * Try not to scavenge used bins + * Use bin counts as a guide to preallocation + * Occasionally bin return list chunks in first scan + * Add a few optimizations from colin at nyx10.cs.du.edu + + V2.5.1 Sat Aug 14 15:40:43 1993 Doug Lea (dl at g) + * faster bin computation & slightly different binning + * merged all consolidations to one part of malloc proper + (eliminating old malloc_find_space & malloc_clean_bin) + * Scan 2 returns chunks (not just 1) + * Propagate failure in realloc if malloc returns 0 + * Add stuff to allow compilation on non-ANSI compilers + from kpv at research.att.com + + V2.5 Sat Aug 7 07:41:59 1993 Doug Lea (dl at g.oswego.edu) + * removed potential for odd address access in prev_chunk + * removed dependency on getpagesize.h + * misc cosmetics and a bit more internal documentation + * anticosmetics: mangled names in macros to evade debugger strangeness + * tested on sparc, hp-700, dec-mips, rs6000 + with gcc & native cc (hp, dec only) allowing + Detlefs & Zorn comparison study (in SIGPLAN Notices.) + + Trial version Fri Aug 28 13:14:29 1992 Doug Lea (dl at g.oswego.edu) + * Based loosely on libg++-1.2X malloc. (It retains some of the overall + structure of old version, but most details differ.) + +*/ Modified: python/trunk/Modules/_ctypes/libffi/src/frv/ffi.c ============================================================================== --- python/trunk/Modules/_ctypes/libffi/src/frv/ffi.c (original) +++ python/trunk/Modules/_ctypes/libffi/src/frv/ffi.c Mon Mar 15 01:02:36 2010 @@ -1,6 +1,6 @@ /* ----------------------------------------------------------------------- ffi.c - Copyright (C) 2004 Anthony Green - Copyright (C) 2007 Free Software Foundation, Inc. + Copyright (C) 2007 Free Software Foundation, Inc. Copyright (C) 2008 Red Hat, Inc. FR-V Foreign Function Interface Added: python/trunk/Modules/_ctypes/libffi/src/java_raw_api.c ============================================================================== --- (empty file) +++ python/trunk/Modules/_ctypes/libffi/src/java_raw_api.c Mon Mar 15 01:02:36 2010 @@ -0,0 +1,356 @@ +/* ----------------------------------------------------------------------- + java_raw_api.c - Copyright (c) 1999, 2007, 2008 Red Hat, Inc. + + Cloned from raw_api.c + + Raw_api.c author: Kresten Krab Thorup + Java_raw_api.c author: Hans-J. Boehm + + $Id $ + + 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 THE AUTHORS OR COPYRIGHT + HOLDERS 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. + ----------------------------------------------------------------------- */ + +/* This defines a Java- and 64-bit specific variant of the raw API. */ +/* It assumes that "raw" argument blocks look like Java stacks on a */ +/* 64-bit machine. Arguments that can be stored in a single stack */ +/* stack slots (longs, doubles) occupy 128 bits, but only the first */ +/* 64 bits are actually used. */ + +#include +#include +#include + +#if !defined(NO_JAVA_RAW_API) && !defined(FFI_NO_RAW_API) + +size_t +ffi_java_raw_size (ffi_cif *cif) +{ + size_t result = 0; + int i; + + ffi_type **at = cif->arg_types; + + for (i = cif->nargs-1; i >= 0; i--, at++) + { + switch((*at) -> type) { + case FFI_TYPE_UINT64: + case FFI_TYPE_SINT64: + case FFI_TYPE_DOUBLE: + result += 2 * FFI_SIZEOF_JAVA_RAW; + break; + case FFI_TYPE_STRUCT: + /* No structure parameters in Java. */ + abort(); + default: + result += FFI_SIZEOF_JAVA_RAW; + } + } + + return result; +} + + +void +ffi_java_raw_to_ptrarray (ffi_cif *cif, ffi_java_raw *raw, void **args) +{ + unsigned i; + ffi_type **tp = cif->arg_types; + +#if WORDS_BIGENDIAN + + for (i = 0; i < cif->nargs; i++, tp++, args++) + { + switch ((*tp)->type) + { + case FFI_TYPE_UINT8: + case FFI_TYPE_SINT8: + *args = (void*) ((char*)(raw++) + 3); + break; + + case FFI_TYPE_UINT16: + case FFI_TYPE_SINT16: + *args = (void*) ((char*)(raw++) + 2); + break; + +#if FFI_SIZEOF_JAVA_RAW == 8 + case FFI_TYPE_UINT64: + case FFI_TYPE_SINT64: + case FFI_TYPE_DOUBLE: + *args = (void *)raw; + raw += 2; + break; +#endif + + case FFI_TYPE_POINTER: + *args = (void*) &(raw++)->ptr; + break; + + default: + *args = raw; + raw += + ALIGN ((*tp)->size, sizeof(ffi_java_raw)) / sizeof(ffi_java_raw); + } + } + +#else /* WORDS_BIGENDIAN */ + +#if !PDP + + /* then assume little endian */ + for (i = 0; i < cif->nargs; i++, tp++, args++) + { +#if FFI_SIZEOF_JAVA_RAW == 8 + switch((*tp)->type) { + case FFI_TYPE_UINT64: + case FFI_TYPE_SINT64: + case FFI_TYPE_DOUBLE: + *args = (void*) raw; + raw += 2; + break; + default: + *args = (void*) raw++; + } +#else /* FFI_SIZEOF_JAVA_RAW != 8 */ + *args = (void*) raw; + raw += + ALIGN ((*tp)->size, sizeof(ffi_java_raw)) / sizeof(ffi_java_raw); +#endif /* FFI_SIZEOF_JAVA_RAW == 8 */ + } + +#else +#error "pdp endian not supported" +#endif /* ! PDP */ + +#endif /* WORDS_BIGENDIAN */ +} + +void +ffi_java_ptrarray_to_raw (ffi_cif *cif, void **args, ffi_java_raw *raw) +{ + unsigned i; + ffi_type **tp = cif->arg_types; + + for (i = 0; i < cif->nargs; i++, tp++, args++) + { + switch ((*tp)->type) + { + case FFI_TYPE_UINT8: +#if WORDS_BIGENDIAN + *(UINT32*)(raw++) = *(UINT8*) (*args); +#else + (raw++)->uint = *(UINT8*) (*args); +#endif + break; + + case FFI_TYPE_SINT8: +#if WORDS_BIGENDIAN + *(SINT32*)(raw++) = *(SINT8*) (*args); +#else + (raw++)->sint = *(SINT8*) (*args); +#endif + break; + + case FFI_TYPE_UINT16: +#if WORDS_BIGENDIAN + *(UINT32*)(raw++) = *(UINT16*) (*args); +#else + (raw++)->uint = *(UINT16*) (*args); +#endif + break; + + case FFI_TYPE_SINT16: +#if WORDS_BIGENDIAN + *(SINT32*)(raw++) = *(SINT16*) (*args); +#else + (raw++)->sint = *(SINT16*) (*args); +#endif + break; + + case FFI_TYPE_UINT32: +#if WORDS_BIGENDIAN + *(UINT32*)(raw++) = *(UINT32*) (*args); +#else + (raw++)->uint = *(UINT32*) (*args); +#endif + break; + + case FFI_TYPE_SINT32: +#if WORDS_BIGENDIAN + *(SINT32*)(raw++) = *(SINT32*) (*args); +#else + (raw++)->sint = *(SINT32*) (*args); +#endif + break; + + case FFI_TYPE_FLOAT: + (raw++)->flt = *(FLOAT32*) (*args); + break; + +#if FFI_SIZEOF_JAVA_RAW == 8 + case FFI_TYPE_UINT64: + case FFI_TYPE_SINT64: + case FFI_TYPE_DOUBLE: + raw->uint = *(UINT64*) (*args); + raw += 2; + break; +#endif + + case FFI_TYPE_POINTER: + (raw++)->ptr = **(void***) args; + break; + + default: +#if FFI_SIZEOF_JAVA_RAW == 8 + FFI_ASSERT(0); /* Should have covered all cases */ +#else + memcpy ((void*) raw->data, (void*)*args, (*tp)->size); + raw += + ALIGN ((*tp)->size, sizeof(ffi_java_raw)) / sizeof(ffi_java_raw); +#endif + } + } +} + +#if !FFI_NATIVE_RAW_API + +static void +ffi_java_rvalue_to_raw (ffi_cif *cif, void *rvalue) +{ +#if WORDS_BIGENDIAN && FFI_SIZEOF_ARG == 8 + switch (cif->rtype->type) + { + case FFI_TYPE_UINT8: + case FFI_TYPE_UINT16: + case FFI_TYPE_UINT32: + *(UINT64 *)rvalue <<= 32; + break; + + case FFI_TYPE_SINT8: + case FFI_TYPE_SINT16: + case FFI_TYPE_SINT32: + case FFI_TYPE_INT: +#if FFI_SIZEOF_JAVA_RAW == 4 + case FFI_TYPE_POINTER: +#endif + *(SINT64 *)rvalue <<= 32; + break; + + default: + break; + } +#endif +} + +static void +ffi_java_raw_to_rvalue (ffi_cif *cif, void *rvalue) +{ +#if WORDS_BIGENDIAN && FFI_SIZEOF_ARG == 8 + switch (cif->rtype->type) + { + case FFI_TYPE_UINT8: + case FFI_TYPE_UINT16: + case FFI_TYPE_UINT32: + *(UINT64 *)rvalue >>= 32; + break; + + case FFI_TYPE_SINT8: + case FFI_TYPE_SINT16: + case FFI_TYPE_SINT32: + case FFI_TYPE_INT: + *(SINT64 *)rvalue >>= 32; + break; + + default: + break; + } +#endif +} + +/* This is a generic definition of ffi_raw_call, to be used if the + * native system does not provide a machine-specific implementation. + * Having this, allows code to be written for the raw API, without + * the need for system-specific code to handle input in that format; + * these following couple of functions will handle the translation forth + * and back automatically. */ + +void ffi_java_raw_call (ffi_cif *cif, void (*fn)(void), void *rvalue, + ffi_java_raw *raw) +{ + void **avalue = (void**) alloca (cif->nargs * sizeof (void*)); + ffi_java_raw_to_ptrarray (cif, raw, avalue); + ffi_call (cif, fn, rvalue, avalue); + ffi_java_rvalue_to_raw (cif, rvalue); +} + +#if FFI_CLOSURES /* base system provides closures */ + +static void +ffi_java_translate_args (ffi_cif *cif, void *rvalue, + void **avalue, void *user_data) +{ + ffi_java_raw *raw = (ffi_java_raw*)alloca (ffi_java_raw_size (cif)); + ffi_raw_closure *cl = (ffi_raw_closure*)user_data; + + ffi_java_ptrarray_to_raw (cif, avalue, raw); + (*cl->fun) (cif, rvalue, raw, cl->user_data); + ffi_java_raw_to_rvalue (cif, rvalue); +} + +ffi_status +ffi_prep_java_raw_closure_loc (ffi_java_raw_closure* cl, + ffi_cif *cif, + void (*fun)(ffi_cif*,void*,ffi_java_raw*,void*), + void *user_data, + void *codeloc) +{ + ffi_status status; + + status = ffi_prep_closure_loc ((ffi_closure*) cl, + cif, + &ffi_java_translate_args, + codeloc, + codeloc); + if (status == FFI_OK) + { + cl->fun = fun; + cl->user_data = user_data; + } + + return status; +} + +/* Again, here is the generic version of ffi_prep_raw_closure, which + * will install an intermediate "hub" for translation of arguments from + * the pointer-array format, to the raw format */ + +ffi_status +ffi_prep_java_raw_closure (ffi_java_raw_closure* cl, + ffi_cif *cif, + void (*fun)(ffi_cif*,void*,ffi_java_raw*,void*), + void *user_data) +{ + return ffi_prep_java_raw_closure_loc (cl, cif, fun, user_data, cl); +} + +#endif /* FFI_CLOSURES */ +#endif /* !FFI_NATIVE_RAW_API */ +#endif /* !FFI_NO_RAW_API */ Modified: python/trunk/Modules/_ctypes/libffi/src/mips/ffi.c ============================================================================== --- python/trunk/Modules/_ctypes/libffi/src/mips/ffi.c (original) +++ python/trunk/Modules/_ctypes/libffi/src/mips/ffi.c Mon Mar 15 01:02:36 2010 @@ -99,7 +99,7 @@ p_argv = ecif->avalue; - for (i = ecif->cif->nargs, p_arg = ecif->cif->arg_types; i; i--, p_arg++) + for (i = 0, p_arg = ecif->cif->arg_types; i < ecif->cif->nargs; i++, p_arg++) { size_t z; unsigned int a; @@ -123,9 +123,25 @@ /* The size of a pointer depends on the ABI */ if (type == FFI_TYPE_POINTER) - type = - (ecif->cif->abi == FFI_N64) ? FFI_TYPE_SINT64 : FFI_TYPE_SINT32; + type = (ecif->cif->abi == FFI_N64 + || ecif->cif->abi == FFI_N64_SOFT_FLOAT) + ? FFI_TYPE_SINT64 : FFI_TYPE_SINT32; + if (i < 8 && (ecif->cif->abi == FFI_N32_SOFT_FLOAT + || ecif->cif->abi == FFI_N64_SOFT_FLOAT)) + { + switch (type) + { + case FFI_TYPE_FLOAT: + type = FFI_TYPE_UINT32; + break; + case FFI_TYPE_DOUBLE: + type = FFI_TYPE_UINT64; + break; + default: + break; + } + } switch (type) { case FFI_TYPE_SINT8: @@ -205,13 +221,17 @@ definitions and generates the appropriate flags. */ static unsigned -calc_n32_struct_flags(ffi_type *arg, unsigned *loc, unsigned *arg_reg) +calc_n32_struct_flags(int soft_float, ffi_type *arg, + unsigned *loc, unsigned *arg_reg) { unsigned flags = 0; unsigned index = 0; ffi_type *e; + if (soft_float) + return 0; + while ((e = arg->elements[index])) { /* Align this object. */ @@ -236,7 +256,7 @@ } static unsigned -calc_n32_return_struct_flags(ffi_type *arg) +calc_n32_return_struct_flags(int soft_float, ffi_type *arg) { unsigned flags = 0; unsigned small = FFI_TYPE_SMALLSTRUCT; @@ -256,6 +276,7 @@ small = FFI_TYPE_SMALLSTRUCT2; e = arg->elements[0]; + if (e->type == FFI_TYPE_DOUBLE) flags = FFI_TYPE_DOUBLE; else if (e->type == FFI_TYPE_FLOAT) @@ -276,6 +297,8 @@ floats! This must be passed the old way. */ return small; } + if (soft_float) + flags += FFI_TYPE_STRUCT_SOFT; } else if (!flags) @@ -382,16 +405,19 @@ #ifdef FFI_MIPS_N32 /* Set the flags necessary for N32 processing */ { + int type; unsigned arg_reg = 0; unsigned loc = 0; unsigned count = (cif->nargs < 8) ? cif->nargs : 8; unsigned index = 0; unsigned struct_flags = 0; + int soft_float = (cif->abi == FFI_N32_SOFT_FLOAT + || cif->abi == FFI_N64_SOFT_FLOAT); if (cif->rtype->type == FFI_TYPE_STRUCT) { - struct_flags = calc_n32_return_struct_flags(cif->rtype); + struct_flags = calc_n32_return_struct_flags(soft_float, cif->rtype); if (struct_flags == 0) { @@ -411,7 +437,22 @@ while (count-- > 0 && arg_reg < 8) { - switch ((cif->arg_types)[index]->type) + type = (cif->arg_types)[index]->type; + if (soft_float) + { + switch (type) + { + case FFI_TYPE_FLOAT: + type = FFI_TYPE_UINT32; + break; + case FFI_TYPE_DOUBLE: + type = FFI_TYPE_UINT64; + break; + default: + break; + } + } + switch (type) { case FFI_TYPE_FLOAT: case FFI_TYPE_DOUBLE: @@ -423,17 +464,25 @@ /* Align it. */ arg_reg = ALIGN(arg_reg, 2); /* Treat it as two adjacent doubles. */ - cif->flags += - (FFI_TYPE_DOUBLE << (arg_reg * FFI_FLAG_BITS)); - arg_reg++; - cif->flags += - (FFI_TYPE_DOUBLE << (arg_reg * FFI_FLAG_BITS)); - arg_reg++; + if (soft_float) + { + arg_reg += 2; + } + else + { + cif->flags += + (FFI_TYPE_DOUBLE << (arg_reg * FFI_FLAG_BITS)); + arg_reg++; + cif->flags += + (FFI_TYPE_DOUBLE << (arg_reg * FFI_FLAG_BITS)); + arg_reg++; + } break; case FFI_TYPE_STRUCT: loc = arg_reg * FFI_SIZEOF_ARG; - cif->flags += calc_n32_struct_flags((cif->arg_types)[index], + cif->flags += calc_n32_struct_flags(soft_float, + (cif->arg_types)[index], &loc, &arg_reg); break; @@ -469,17 +518,43 @@ case FFI_TYPE_VOID: /* Do nothing, 'cause FFI_TYPE_VOID is 0 */ break; - + + case FFI_TYPE_POINTER: + if (cif->abi == FFI_N32_SOFT_FLOAT || cif->abi == FFI_N32) + cif->flags += FFI_TYPE_SINT32 << (FFI_FLAG_BITS * 8); + else + cif->flags += FFI_TYPE_INT << (FFI_FLAG_BITS * 8); + break; + case FFI_TYPE_FLOAT: + if (soft_float) + { + cif->flags += FFI_TYPE_SINT32 << (FFI_FLAG_BITS * 8); + break; + } + /* else fall through */ case FFI_TYPE_DOUBLE: - cif->flags += cif->rtype->type << (FFI_FLAG_BITS * 8); + if (soft_float) + cif->flags += FFI_TYPE_INT << (FFI_FLAG_BITS * 8); + else + cif->flags += cif->rtype->type << (FFI_FLAG_BITS * 8); break; + case FFI_TYPE_LONGDOUBLE: /* Long double is returned as if it were a struct containing two doubles. */ - cif->flags += FFI_TYPE_STRUCT << (FFI_FLAG_BITS * 8); - cif->flags += (FFI_TYPE_DOUBLE + (FFI_TYPE_DOUBLE << FFI_FLAG_BITS)) - << (4 + (FFI_FLAG_BITS * 8)); + if (soft_float) + { + cif->flags += FFI_TYPE_STRUCT << (FFI_FLAG_BITS * 8); + cif->flags += FFI_TYPE_SMALLSTRUCT2 << (4 + (FFI_FLAG_BITS * 8)); + } + else + { + cif->flags += FFI_TYPE_STRUCT << (FFI_FLAG_BITS * 8); + cif->flags += (FFI_TYPE_DOUBLE + + (FFI_TYPE_DOUBLE << FFI_FLAG_BITS)) + << (4 + (FFI_FLAG_BITS * 8)); + } break; default: cif->flags += FFI_TYPE_INT << (FFI_FLAG_BITS * 8); @@ -499,7 +574,7 @@ /* Low level routine for calling N32 functions */ extern int ffi_call_N32(void (*)(char *, extended_cif *, int, int), extended_cif *, unsigned, - unsigned, unsigned *, void (*)(void)); + unsigned, void *, void (*)(void)); void ffi_call(ffi_cif *cif, void (*fn)(void), void *rvalue, void **avalue) { @@ -529,10 +604,13 @@ #ifdef FFI_MIPS_N32 case FFI_N32: + case FFI_N32_SOFT_FLOAT: case FFI_N64: + case FFI_N64_SOFT_FLOAT: { int copy_rvalue = 0; - void *rvalue_copy = ecif.rvalue; + int copy_offset = 0; + char *rvalue_copy = ecif.rvalue; if (cif->rtype->type == FFI_TYPE_STRUCT && cif->rtype->size < 16) { /* For structures smaller than 16 bytes we clobber memory @@ -541,10 +619,20 @@ rvalue_copy = alloca(16); copy_rvalue = 1; } + else if (cif->rtype->type == FFI_TYPE_FLOAT + && (cif->abi == FFI_N64_SOFT_FLOAT + || cif->abi == FFI_N32_SOFT_FLOAT)) + { + rvalue_copy = alloca (8); + copy_rvalue = 1; +#if defined(__MIPSEB__) || defined(_MIPSEB) + copy_offset = 4; +#endif + } ffi_call_N32(ffi_prep_args, &ecif, cif->bytes, cif->flags, rvalue_copy, fn); if (copy_rvalue) - memcpy(ecif.rvalue, rvalue_copy, cif->rtype->size); + memcpy(ecif.rvalue, rvalue_copy + copy_offset, cif->rtype->size); } break; #endif @@ -684,9 +772,10 @@ { if (i < 2 && !seen_int && (arg_types[i]->type == FFI_TYPE_FLOAT || - arg_types[i]->type == FFI_TYPE_DOUBLE)) + arg_types[i]->type == FFI_TYPE_DOUBLE || + arg_types[i]->type == FFI_TYPE_LONGDOUBLE)) { -#ifdef __MIPSEB__ +#if defined(__MIPSEB__) || defined(_MIPSEB) if (arg_types[i]->type == FFI_TYPE_FLOAT) avaluep[i] = ((char *) &fpr[i]) + sizeof (float); else @@ -755,7 +844,7 @@ static void copy_struct_N32(char *target, unsigned offset, ffi_abi abi, ffi_type *type, int argn, unsigned arg_offset, ffi_arg *ar, - ffi_arg *fpr) + ffi_arg *fpr, int soft_float) { ffi_type **elt_typep = type->elements; while(*elt_typep) @@ -777,7 +866,7 @@ tp = target + offset; - if (elt_type->type == FFI_TYPE_DOUBLE) + if (elt_type->type == FFI_TYPE_DOUBLE && !soft_float) *(double *)tp = *(double *)fpp; else memcpy(tp, argp + arg_offset, elt_type->size); @@ -815,8 +904,12 @@ ffi_arg *avalue; ffi_type **arg_types; int i, avn, argn; + int soft_float; + ffi_arg *argp; cif = closure->cif; + soft_float = cif->abi == FFI_N64_SOFT_FLOAT + || cif->abi == FFI_N32_SOFT_FLOAT; avalue = alloca (cif->nargs * sizeof (ffi_arg)); avaluep = alloca (cif->nargs * sizeof (ffi_arg)); @@ -839,10 +932,16 @@ while (i < avn) { if (arg_types[i]->type == FFI_TYPE_FLOAT - || arg_types[i]->type == FFI_TYPE_DOUBLE) + || arg_types[i]->type == FFI_TYPE_DOUBLE + || arg_types[i]->type == FFI_TYPE_LONGDOUBLE) { - ffi_arg *argp = argn >= 8 ? ar + argn : fpr + argn; -#ifdef __MIPSEB__ + argp = (argn >= 8 || soft_float) ? ar + argn : fpr + argn; + if ((arg_types[i]->type == FFI_TYPE_LONGDOUBLE) && ((unsigned)argp & (arg_types[i]->alignment-1))) + { + argp=(ffi_arg*)ALIGN(argp,arg_types[i]->alignment); + argn++; + } +#if defined(__MIPSEB__) || defined(_MIPSEB) if (arg_types[i]->type == FFI_TYPE_FLOAT && argn < 8) avaluep[i] = ((char *) argp) + sizeof (float); else @@ -856,11 +955,15 @@ if (arg_types[i]->alignment > sizeof(ffi_arg)) argn = ALIGN(argn, arg_types[i]->alignment / sizeof(ffi_arg)); - ffi_arg *argp = ar + argn; + argp = ar + argn; /* The size of a pointer depends on the ABI */ if (type == FFI_TYPE_POINTER) - type = (cif->abi == FFI_N64) ? FFI_TYPE_SINT64 : FFI_TYPE_SINT32; + type = (cif->abi == FFI_N64 || cif->abi == FFI_N64_SOFT_FLOAT) + ? FFI_TYPE_SINT64 : FFI_TYPE_SINT32; + + if (soft_float && type == FFI_TYPE_FLOAT) + type = FFI_TYPE_UINT32; switch (type) { @@ -901,7 +1004,7 @@ it was passed in registers. */ avaluep[i] = alloca(arg_types[i]->size); copy_struct_N32(avaluep[i], 0, cif->abi, arg_types[i], - argn, 0, ar, fpr); + argn, 0, ar, fpr, soft_float); break; } Modified: python/trunk/Modules/_ctypes/libffi/src/mips/ffitarget.h ============================================================================== --- python/trunk/Modules/_ctypes/libffi/src/mips/ffitarget.h (original) +++ python/trunk/Modules/_ctypes/libffi/src/mips/ffitarget.h Mon Mar 15 01:02:36 2010 @@ -28,7 +28,10 @@ #define LIBFFI_TARGET_H #ifdef linux -#include +# include +#else +# include +#endif # ifndef _ABIN32 # define _ABIN32 _MIPS_SIM_NABI32 # endif @@ -38,7 +41,6 @@ # ifndef _ABIO32 # define _ABIO32 _MIPS_SIM_ABI32 # endif -#endif #if !defined(_MIPS_SIM) -- something is very wrong -- @@ -95,6 +97,15 @@ #define FFI_TYPE_STRUCT_DF 189 #define FFI_TYPE_STRUCT_SMALL 93 #define FFI_TYPE_STRUCT_SMALL2 109 + +/* and for n32 soft float, add 16 * 2^4 */ +#define FFI_TYPE_STRUCT_D_SOFT 317 +#define FFI_TYPE_STRUCT_F_SOFT 301 +#define FFI_TYPE_STRUCT_DD_SOFT 509 +#define FFI_TYPE_STRUCT_FF_SOFT 429 +#define FFI_TYPE_STRUCT_FD_SOFT 493 +#define FFI_TYPE_STRUCT_DF_SOFT 445 +#define FFI_TYPE_STRUCT_SOFT 16 #endif #ifdef LIBFFI_ASM @@ -145,7 +156,8 @@ # endif /* _MIPS_SIM==_ABI64 */ #endif /* !FFI_MIPS_O32 */ #else /* !LIBFFI_ASM */ -#ifdef FFI_MIPS_O32 +# ifdef __GNUC__ +# ifdef FFI_MIPS_O32 /* O32 stack frames have 32bit integer args */ typedef unsigned int ffi_arg __attribute__((__mode__(__SI__))); typedef signed int ffi_sarg __attribute__((__mode__(__SI__))); @@ -153,7 +165,18 @@ /* N32 and N64 frames have 64bit integer args */ typedef unsigned int ffi_arg __attribute__((__mode__(__DI__))); typedef signed int ffi_sarg __attribute__((__mode__(__DI__))); -#endif +# endif +# else +# ifdef FFI_MIPS_O32 +/* O32 stack frames have 32bit integer args */ +typedef __uint32_t ffi_arg; +typedef __int32_t ffi_sarg; +# else +/* N32 and N64 frames have 64bit integer args */ +typedef __uint64_t ffi_arg; +typedef __int64_t ffi_sarg; +# endif +# endif /* __GNUC__ */ typedef enum ffi_abi { FFI_FIRST_ABI = 0, @@ -161,6 +184,8 @@ FFI_N32, FFI_N64, FFI_O32_SOFT_FLOAT, + FFI_N32_SOFT_FLOAT, + FFI_N64_SOFT_FLOAT, #ifdef FFI_MIPS_O32 #ifdef __mips_soft_float @@ -170,9 +195,17 @@ #endif #else # if _MIPS_SIM==_ABI64 +# ifdef __mips_soft_float + FFI_DEFAULT_ABI = FFI_N64_SOFT_FLOAT, +# else FFI_DEFAULT_ABI = FFI_N64, +# endif # else +# ifdef __mips_soft_float + FFI_DEFAULT_ABI = FFI_N32_SOFT_FLOAT, +# else FFI_DEFAULT_ABI = FFI_N32, +# endif # endif #endif Modified: python/trunk/Modules/_ctypes/libffi/src/mips/n32.S ============================================================================== --- python/trunk/Modules/_ctypes/libffi/src/mips/n32.S (original) +++ python/trunk/Modules/_ctypes/libffi/src/mips/n32.S Mon Mar 15 01:02:36 2010 @@ -14,14 +14,14 @@ 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 THE AUTHORS OR COPYRIGHT HOLDERS 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 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 THE AUTHORS OR COPYRIGHT + HOLDERS 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 @@ -40,7 +40,9 @@ #define SIZEOF_FRAME ( 8 * FFI_SIZEOF_ARG ) +#ifdef linux .abicalls +#endif .text .align 2 .globl ffi_call_N32 @@ -217,8 +219,10 @@ # Shift the return type flag over SRL t6, 8*FFI_FLAG_BITS - + + beq t6, FFI_TYPE_SINT32, retint bne t6, FFI_TYPE_INT, retfloat +retint: jal t9 REG_L t4, 4*FFI_SIZEOF_ARG($fp) REG_S v0, 0(t4) @@ -277,12 +281,58 @@ b epilogue retstruct_f_d: - bne t6, FFI_TYPE_STRUCT_FD, retstruct_small + bne t6, FFI_TYPE_STRUCT_FD, retstruct_d_soft jal t9 REG_L t4, 4*FFI_SIZEOF_ARG($fp) s.s $f0, 0(t4) s.d $f2, 8(t4) b epilogue + +retstruct_d_soft: + bne t6, FFI_TYPE_STRUCT_D_SOFT, retstruct_f_soft + jal t9 + REG_L t4, 4*FFI_SIZEOF_ARG($fp) + sd v0, 0(t4) + b epilogue + +retstruct_f_soft: + bne t6, FFI_TYPE_STRUCT_F_SOFT, retstruct_d_d_soft + jal t9 + REG_L t4, 4*FFI_SIZEOF_ARG($fp) + sw v0, 0(t4) + b epilogue + +retstruct_d_d_soft: + bne t6, FFI_TYPE_STRUCT_DD_SOFT, retstruct_f_f_soft + jal t9 + REG_L t4, 4*FFI_SIZEOF_ARG($fp) + sd v0, 0(t4) + sd v1, 8(t4) + b epilogue + +retstruct_f_f_soft: + bne t6, FFI_TYPE_STRUCT_FF_SOFT, retstruct_d_f_soft + jal t9 + REG_L t4, 4*FFI_SIZEOF_ARG($fp) + sw v0, 0(t4) + sw v1, 4(t4) + b epilogue + +retstruct_d_f_soft: + bne t6, FFI_TYPE_STRUCT_DF_SOFT, retstruct_f_d_soft + jal t9 + REG_L t4, 4*FFI_SIZEOF_ARG($fp) + sd v0, 0(t4) + sw v1, 8(t4) + b epilogue + +retstruct_f_d_soft: + bne t6, FFI_TYPE_STRUCT_FD_SOFT, retstruct_small + jal t9 + REG_L t4, 4*FFI_SIZEOF_ARG($fp) + sw v0, 0(t4) + sd v1, 8(t4) + b epilogue retstruct_small: bne t6, FFI_TYPE_STRUCT_SMALL, retstruct_small2 @@ -413,6 +463,11 @@ jalr t9 # Return flags are in v0 + bne v0, FFI_TYPE_SINT32, cls_retint + lw v0, V0_OFF2($sp) + b cls_epilogue + +cls_retint: bne v0, FFI_TYPE_INT, cls_retfloat REG_L v0, V0_OFF2($sp) b cls_epilogue @@ -474,6 +529,7 @@ .LFE2: .end ffi_closure_N32 +#ifdef linux .section .eh_frame,"aw", at progbits .Lframe1: .4byte .LECIE1-.LSCIE1 # length @@ -530,5 +586,6 @@ .uleb128 (SIZEOF_FRAME2 - RA_OFF2)/4 .align EH_FRAME_ALIGN .LEFDE3: +#endif /* linux */ #endif Modified: python/trunk/Modules/_ctypes/libffi/src/mips/o32.S ============================================================================== --- python/trunk/Modules/_ctypes/libffi/src/mips/o32.S (original) +++ python/trunk/Modules/_ctypes/libffi/src/mips/o32.S Mon Mar 15 01:02:36 2010 @@ -14,14 +14,14 @@ 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 THE AUTHORS OR COPYRIGHT HOLDERS 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 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 THE AUTHORS OR COPYRIGHT + HOLDERS 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 Modified: python/trunk/Modules/_ctypes/libffi/src/pa/ffi.c ============================================================================== --- python/trunk/Modules/_ctypes/libffi/src/pa/ffi.c (original) +++ python/trunk/Modules/_ctypes/libffi/src/pa/ffi.c Mon Mar 15 01:02:36 2010 @@ -492,6 +492,13 @@ avalue[i] = (void *)(stack - slot); break; +#ifdef PA_HPUX + case FFI_TYPE_LONGDOUBLE: + /* Long doubles are treated like a big structure. */ + avalue[i] = (void *) *(stack - slot); + break; +#endif + case FFI_TYPE_STRUCT: /* Structs smaller or equal than 4 bytes are passed in one register. Structs smaller or equal 8 bytes are passed in two Modified: python/trunk/Modules/_ctypes/libffi/src/powerpc/aix.S ============================================================================== --- python/trunk/Modules/_ctypes/libffi/src/powerpc/aix.S (original) +++ python/trunk/Modules/_ctypes/libffi/src/powerpc/aix.S Mon Mar 15 01:02:36 2010 @@ -1,5 +1,5 @@ /* ----------------------------------------------------------------------- - aix.S - Copyright (c) 2002 Free Software Foundation, Inc. + aix.S - Copyright (c) 2002,2009 Free Software Foundation, Inc. based on darwin.S by John Hornkvist PowerPC Assembly glue. @@ -86,9 +86,13 @@ #define L(x) x .file "aix.S" .toc - .csect .text[PR] - .align 2 -.globl ffi_prep_args + + /* void ffi_call_AIX(extended_cif *ecif, unsigned long bytes, + * unsigned int flags, unsigned int *rvalue, + * void (*fn)(), + * void (*prep_args)(extended_cif*, unsigned *const)); + * r3=ecif, r4=bytes, r5=flags, r6=rvalue, r7=fn, r8=prep_args + */ .csect .text[PR] .align 2 @@ -96,61 +100,151 @@ .globl .ffi_call_AIX .csect ffi_call_AIX[DS] ffi_call_AIX: - .long .ffi_call_AIX, TOC[tc0], 0 +#ifdef __64BIT__ + .llong .ffi_call_AIX, TOC[tc0], 0 .csect .text[PR] .ffi_call_AIX: - mr r12,r8 // We only need r12 until the call, so it doesn't have to be saved... - /* Save the old stack pointer as AP. */ - mr r8,r1 - - /* Allocate the stack space we need. */ - stwux r1,r1,r4 - /* Save registers we use. */ - mflr r9 + mflr r0 - stw r28,-16(r8) - stw r29,-12(r8) - stw r30, -8(r8) - stw r31, -4(r8) - - stw r9, 8(r8) - stw r2, 20(r1) + std r28,-32(r1) + std r29,-24(r1) + std r30,-16(r1) + std r31, -8(r1) + + std r0, 16(r1) + mr r28, r1 /* our AP. */ + stdux r1, r1, r4 /* Save arguments over call... */ - mr r31,r5 /* flags, */ - mr r30,r6 /* rvalue, */ - mr r29,r7 /* function address, */ - mr r28,r8 /* our AP. */ + mr r31, r5 /* flags, */ + mr r30, r6 /* rvalue, */ + mr r29, r7 /* function address. */ + std r2, 40(r1) /* Call ffi_prep_args. */ - mr r4,r1 - li r9,0 + mr r4, r1 + bl .ffi_prep_args - lwz r2,4(r12) - lwz r12,0(r12) - mtctr r12 // r12 holds address of _ffi_prep_args + /* Now do the call. */ + ld r0, 0(r29) + ld r2, 8(r29) + ld r11, 16(r29) + /* Set up cr1 with bits 4-7 of the flags. */ + mtcrf 0x40, r31 + mtctr r0 + /* Load all those argument registers. */ + // We have set up a nice stack frame, just load it into registers. + ld r3, 40+(1*8)(r1) + ld r4, 40+(2*8)(r1) + ld r5, 40+(3*8)(r1) + ld r6, 40+(4*8)(r1) + nop + ld r7, 40+(5*8)(r1) + ld r8, 40+(6*8)(r1) + ld r9, 40+(7*8)(r1) + ld r10,40+(8*8)(r1) + +L1: + /* Load all the FP registers. */ + bf 6,L2 // 2f + 0x18 + lfd f1,-32-(13*8)(r28) + lfd f2,-32-(12*8)(r28) + lfd f3,-32-(11*8)(r28) + lfd f4,-32-(10*8)(r28) + nop + lfd f5,-32-(9*8)(r28) + lfd f6,-32-(8*8)(r28) + lfd f7,-32-(7*8)(r28) + lfd f8,-32-(6*8)(r28) + nop + lfd f9,-32-(5*8)(r28) + lfd f10,-32-(4*8)(r28) + lfd f11,-32-(3*8)(r28) + lfd f12,-32-(2*8)(r28) + nop + lfd f13,-32-(1*8)(r28) + +L2: + /* Make the call. */ bctrl - lwz r2,20(r1) + ld r2, 40(r1) + + /* Now, deal with the return value. */ + mtcrf 0x01, r31 + + bt 30, L(done_return_value) + bt 29, L(fp_return_value) + std r3, 0(r30) + + /* Fall through... */ + +L(done_return_value): + /* Restore the registers we used and return. */ + mr r1, r28 + ld r0, 16(r28) + ld r28, -32(r1) + mtlr r0 + ld r29, -24(r1) + ld r30, -16(r1) + ld r31, -8(r1) + blr + +L(fp_return_value): + bf 28, L(float_return_value) + stfd f1, 0(r30) + bf 31, L(done_return_value) + stfd f2, 8(r30) + b L(done_return_value) +L(float_return_value): + stfs f1, 0(r30) + b L(done_return_value) + +#else /* ! __64BIT__ */ + + .long .ffi_call_AIX, TOC[tc0], 0 + .csect .text[PR] +.ffi_call_AIX: + /* Save registers we use. */ + mflr r0 + + stw r28,-16(r1) + stw r29,-12(r1) + stw r30, -8(r1) + stw r31, -4(r1) + + stw r0, 8(r1) + mr r28, r1 /* out AP. */ + stwux r1, r1, r4 + + /* Save arguments over call... */ + mr r31, r5 /* flags, */ + mr r30, r6 /* rvalue, */ + mr r29, r7 /* function address, */ + stw r2, 20(r1) + + /* Call ffi_prep_args. */ + mr r4, r1 + bl .ffi_prep_args /* Now do the call. */ - lwz r12,0(r29) + lwz r0, 0(r29) + lwz r2, 4(r29) + lwz r11, 8(r29) /* Set up cr1 with bits 4-7 of the flags. */ - mtcrf 0x40,r31 - stw r2,20(r1) - mtctr r12 - lwz r2,4(r29) + mtcrf 0x40, r31 + mtctr r0 /* Load all those argument registers. */ // We have set up a nice stack frame, just load it into registers. - lwz r3, 20+(1*4)(r1) - lwz r4, 20+(2*4)(r1) - lwz r5, 20+(3*4)(r1) - lwz r6, 20+(4*4)(r1) - nop - lwz r7, 20+(5*4)(r1) - lwz r8, 20+(6*4)(r1) - lwz r9, 20+(7*4)(r1) - lwz r10,20+(8*4)(r1) + lwz r3, 20+(1*4)(r1) + lwz r4, 20+(2*4)(r1) + lwz r5, 20+(3*4)(r1) + lwz r6, 20+(4*4)(r1) + nop + lwz r7, 20+(5*4)(r1) + lwz r8, 20+(6*4)(r1) + lwz r9, 20+(7*4)(r1) + lwz r10,20+(8*4)(r1) L1: /* Load all the FP registers. */ @@ -165,47 +259,48 @@ lfd f7,-16-(7*8)(r28) lfd f8,-16-(6*8)(r28) nop - lfd f9,-16-(5*8)(r28) - lfd f10,-16-(4*8)(r28) - lfd f11,-16-(3*8)(r28) - lfd f12,-16-(2*8)(r28) + lfd f9,-16-(5*8)(r28) + lfd f10,-16-(4*8)(r28) + lfd f11,-16-(3*8)(r28) + lfd f12,-16-(2*8)(r28) nop - lfd f13,-16-(1*8)(r28) + lfd f13,-16-(1*8)(r28) L2: /* Make the call. */ bctrl - lwz r2,20(r1) + lwz r2, 20(r1) /* Now, deal with the return value. */ - mtcrf 0x01,r31 + mtcrf 0x01, r31 - bt 30,L(done_return_value) - bt 29,L(fp_return_value) - stw r3,0(r30) - bf 28,L(done_return_value) - stw r4,4(r30) + bt 30, L(done_return_value) + bt 29, L(fp_return_value) + stw r3, 0(r30) + bf 28, L(done_return_value) + stw r4, 4(r30) /* Fall through... */ L(done_return_value): /* Restore the registers we used and return. */ - lwz r9, 8(r28) - lwz r31, -4(r28) - mtlr r9 - lwz r30, -8(r28) - lwz r29,-12(r28) - lwz r28,-16(r28) - lwz r1,0(r1) + mr r1, r28 + lwz r0, 8(r28) + lwz r28,-16(r1) + mtlr r0 + lwz r29,-12(r1) + lwz r30, -8(r1) + lwz r31, -4(r1) blr L(fp_return_value): - bf 28,L(float_return_value) - stfd f1,0(r30) + bf 28, L(float_return_value) + stfd f1, 0(r30) b L(done_return_value) L(float_return_value): - stfs f1,0(r30) + stfs f1, 0(r30) b L(done_return_value) +#endif .long 0 .byte 0,0,0,1,128,4,0,0 //END(ffi_call_AIX) @@ -216,7 +311,11 @@ .globl .ffi_call_DARWIN .csect ffi_call_DARWIN[DS] ffi_call_DARWIN: +#ifdef __64BIT__ + .llong .ffi_call_DARWIN, TOC[tc0], 0 +#else .long .ffi_call_DARWIN, TOC[tc0], 0 +#endif .csect .text[PR] .ffi_call_DARWIN: blr Modified: python/trunk/Modules/_ctypes/libffi/src/powerpc/aix_closure.S ============================================================================== --- python/trunk/Modules/_ctypes/libffi/src/powerpc/aix_closure.S (original) +++ python/trunk/Modules/_ctypes/libffi/src/powerpc/aix_closure.S Mon Mar 15 01:02:36 2010 @@ -1,5 +1,5 @@ /* ----------------------------------------------------------------------- - aix_closure.S - Copyright (c) 2002 2003 Free Software Foundation, Inc. + aix_closure.S - Copyright (c) 2002, 2003, 2009 Free Software Foundation, Inc. based on darwin_closure.S PowerPC Assembly glue. @@ -94,65 +94,238 @@ .globl ffi_closure_ASM .globl .ffi_closure_ASM .csect ffi_closure_ASM[DS] - ffi_closure_ASM: - .long .ffi_closure_ASM, TOC[tc0], 0 +#ifdef __64BIT__ + .llong .ffi_closure_ASM, TOC[tc0], 0 .csect .text[PR] .ffi_closure_ASM: +/* we want to build up an area for the parameters passed */ +/* in registers (both floating point and integer) */ - mflr r0 /* extract return address */ - stw r0, 8(r1) /* save the return address */ - - /* 24 Bytes (Linkage Area) */ - /* 32 Bytes (params) */ + /* we store gpr 3 to gpr 10 (aligned to 4) + in the parents outgoing area */ + std r3, 48+(0*8)(r1) + std r4, 48+(1*8)(r1) + std r5, 48+(2*8)(r1) + std r6, 48+(3*8)(r1) + mflr r0 + + std r7, 48+(4*8)(r1) + std r8, 48+(5*8)(r1) + std r9, 48+(6*8)(r1) + std r10, 48+(7*8)(r1) + std r0, 16(r1) /* save the return address */ + + + /* 48 Bytes (Linkage Area) */ + /* 64 Bytes (params) */ + /* 16 Bytes (result) */ /* 104 Bytes (13*8 from FPR) */ - /* 8 Bytes (result) */ - /* 168 Bytes */ + /* 8 Bytes (alignment) */ + /* 240 Bytes */ + + stdu r1, -240(r1) /* skip over caller save area + keep stack aligned to 16 */ + + /* next save fpr 1 to fpr 13 (aligned to 8) */ + stfd f1, 128+(0*8)(r1) + stfd f2, 128+(1*8)(r1) + stfd f3, 128+(2*8)(r1) + stfd f4, 128+(3*8)(r1) + stfd f5, 128+(4*8)(r1) + stfd f6, 128+(5*8)(r1) + stfd f7, 128+(6*8)(r1) + stfd f8, 128+(7*8)(r1) + stfd f9, 128+(8*8)(r1) + stfd f10, 128+(9*8)(r1) + stfd f11, 128+(10*8)(r1) + stfd f12, 128+(11*8)(r1) + stfd f13, 128+(12*8)(r1) + + /* set up registers for the routine that actually does the work */ + /* get the context pointer from the trampoline */ + mr r3, r11 + + /* now load up the pointer to the result storage */ + addi r4, r1, 112 + + /* now load up the pointer to the saved gpr registers */ + addi r5, r1, 288 + + /* now load up the pointer to the saved fpr registers */ + addi r6, r1, 128 + + /* make the call */ + bl .ffi_closure_helper_DARWIN + nop + + /* now r3 contains the return type */ + /* so use it to look up in a table */ + /* so we know how to deal with each type */ + + /* look up the proper starting point in table */ + /* by using return type as offset */ + ld r4, LC..60(2) /* get address of jump table */ + sldi r3, r3, 4 /* now multiply return type by 16 */ + ld r0, 240+16(r1) /* load return address */ + add r3, r3, r4 /* add contents of table to table address */ + mtctr r3 + bctr /* jump to it */ + +/* Each fragment must be exactly 16 bytes long (4 instructions). + Align to 16 byte boundary for cache and dispatch efficiency. */ + .align 4 + +L..60: +/* case FFI_TYPE_VOID */ + mtlr r0 + addi r1, r1, 240 + blr + nop + +/* case FFI_TYPE_INT */ + lwa r3, 112+4(r1) + mtlr r0 + addi r1, r1, 240 + blr + +/* case FFI_TYPE_FLOAT */ + lfs f1, 112+0(r1) + mtlr r0 + addi r1, r1, 240 + blr + +/* case FFI_TYPE_DOUBLE */ + lfd f1, 112+0(r1) + mtlr r0 + addi r1, r1, 240 + blr + +/* case FFI_TYPE_LONGDOUBLE */ + lfd f1, 112+0(r1) + mtlr r0 + lfd f2, 112+8(r1) + b L..finish + +/* case FFI_TYPE_UINT8 */ + lbz r3, 112+7(r1) + mtlr r0 + addi r1, r1, 240 + blr - stwu r1,-176(r1) /* skip over caller save area - keep stack aligned to 16 */ +/* case FFI_TYPE_SINT8 */ + lbz r3, 112+7(r1) + mtlr r0 + extsb r3, r3 + b L..finish + +/* case FFI_TYPE_UINT16 */ + lhz r3, 112+6(r1) + mtlr r0 +L..finish: + addi r1, r1, 240 + blr + +/* case FFI_TYPE_SINT16 */ + lha r3, 112+6(r1) + mtlr r0 + addi r1, r1, 240 + blr + +/* case FFI_TYPE_UINT32 */ + lwz r3, 112+4(r1) + mtlr r0 + addi r1, r1, 240 + blr + +/* case FFI_TYPE_SINT32 */ + lwa r3, 112+4(r1) + mtlr r0 + addi r1, r1, 240 + blr + +/* case FFI_TYPE_UINT64 */ + ld r3, 112+0(r1) + mtlr r0 + addi r1, r1, 240 + blr +/* case FFI_TYPE_SINT64 */ + ld r3, 112+0(r1) + mtlr r0 + addi r1, r1, 240 + blr + +/* case FFI_TYPE_STRUCT */ + mtlr r0 + addi r1, r1, 240 + blr + nop + +/* case FFI_TYPE_POINTER */ + ld r3, 112+0(r1) + mtlr r0 + addi r1, r1, 240 + blr + +#else /* ! __64BIT__ */ + + .long .ffi_closure_ASM, TOC[tc0], 0 + .csect .text[PR] +.ffi_closure_ASM: /* we want to build up an area for the parameters passed */ /* in registers (both floating point and integer) */ /* we store gpr 3 to gpr 10 (aligned to 4) in the parents outgoing area */ - stw r3, 200(r1) - stw r4, 204(r1) - stw r5, 208(r1) - stw r6, 212(r1) - stw r7, 216(r1) - stw r8, 220(r1) - stw r9, 224(r1) - stw r10, 228(r1) + stw r3, 24+(0*4)(r1) + stw r4, 24+(1*4)(r1) + stw r5, 24+(2*4)(r1) + stw r6, 24+(3*4)(r1) + mflr r0 + + stw r7, 24+(4*4)(r1) + stw r8, 24+(5*4)(r1) + stw r9, 24+(6*4)(r1) + stw r10, 24+(7*4)(r1) + stw r0, 8(r1) + + /* 24 Bytes (Linkage Area) */ + /* 32 Bytes (params) */ + /* 16 Bytes (result) */ + /* 104 Bytes (13*8 from FPR) */ + /* 176 Bytes */ + + stwu r1, -176(r1) /* skip over caller save area + keep stack aligned to 16 */ /* next save fpr 1 to fpr 13 (aligned to 8) */ - stfd f1, 56(r1) - stfd f2, 64(r1) - stfd f3, 72(r1) - stfd f4, 80(r1) - stfd f5, 88(r1) - stfd f6, 96(r1) - stfd f7, 104(r1) - stfd f8, 112(r1) - stfd f9, 120(r1) - stfd f10, 128(r1) - stfd f11, 136(r1) - stfd f12, 144(r1) - stfd f13, 152(r1) + stfd f1, 72+(0*8)(r1) + stfd f2, 72+(1*8)(r1) + stfd f3, 72+(2*8)(r1) + stfd f4, 72+(3*8)(r1) + stfd f5, 72+(4*8)(r1) + stfd f6, 72+(5*8)(r1) + stfd f7, 72+(6*8)(r1) + stfd f8, 72+(7*8)(r1) + stfd f9, 72+(8*8)(r1) + stfd f10, 72+(9*8)(r1) + stfd f11, 72+(10*8)(r1) + stfd f12, 72+(11*8)(r1) + stfd f13, 72+(12*8)(r1) /* set up registers for the routine that actually does the work */ /* get the context pointer from the trampoline */ - mr r3,r11 + mr r3, r11 /* now load up the pointer to the result storage */ - addi r4,r1,160 + addi r4, r1, 56 /* now load up the pointer to the saved gpr registers */ - addi r5,r1,200 + addi r5, r1, 200 /* now load up the pointer to the saved fpr registers */ - addi r6,r1,56 + addi r6, r1, 72 /* make the call */ bl .ffi_closure_helper_DARWIN @@ -164,84 +337,107 @@ /* look up the proper starting point in table */ /* by using return type as offset */ - addi r5,r1,160 /* get pointer to results area */ - lwz r4,LC..60(2) /* get address of jump table */ - slwi r3,r3,2 /* now multiply return type by 4 */ - lwzx r3,r4,r3 /* get the contents of that table value */ - add r3,r3,r4 /* add contents of table to table address */ - mtctr r3 + lwz r4, LC..60(2) /* get address of jump table */ + slwi r3, r3, 4 /* now multiply return type by 4 */ + lwz r0, 176+8(r1) /* load return address */ + add r3, r3, r4 /* add contents of table to table address */ + mtctr r3 bctr /* jump to it */ +/* Each fragment must be exactly 16 bytes long (4 instructions). + Align to 16 byte boundary for cache and dispatch efficiency. */ + .align 4 + L..60: - .long L..44-L..60 /* FFI_TYPE_VOID */ - .long L..50-L..60 /* FFI_TYPE_INT */ - .long L..47-L..60 /* FFI_TYPE_FLOAT */ - .long L..46-L..60 /* FFI_TYPE_DOUBLE */ - .long L..46-L..60 /* FFI_TYPE_LONGDOUBLE */ - .long L..56-L..60 /* FFI_TYPE_UINT8 */ - .long L..55-L..60 /* FFI_TYPE_SINT8 */ - .long L..58-L..60 /* FFI_TYPE_UINT16 */ - .long L..57-L..60 /* FFI_TYPE_SINT16 */ - .long L..50-L..60 /* FFI_TYPE_UINT32 */ - .long L..50-L..60 /* FFI_TYPE_SINT32 */ - .long L..48-L..60 /* FFI_TYPE_UINT64 */ - .long L..48-L..60 /* FFI_TYPE_SINT64 */ - .long L..44-L..60 /* FFI_TYPE_STRUCT */ - .long L..50-L..60 /* FFI_TYPE_POINTER */ - - -/* case double */ -L..46: - lfd f1,0(r5) - b L..44 - -/* case float */ -L..47: - lfs f1,0(r5) - b L..44 - -/* case long long */ -L..48: - lwz r3,0(r5) - lwz r4,4(r5) - b L..44 - -/* case default / int32 / pointer */ -L..50: - lwz r3,0(r5) - b L..44 - -/* case signed int8 */ -L..55: - addi r5,r5,3 - lbz r3,0(r5) - slwi r3,r3,24 - srawi r3,r3,24 - b L..44 - -/* case unsigned int8 */ -L..56: - addi r5,r5,3 - lbz r3,0(r5) - b L..44 - -/* case signed int16 */ -L..57: - addi r5,r5,2 - lhz r3,0(r5) - extsh r3,r3 - b L..44 - -/* case unsigned int16 */ -L..58: - addi r5,r5,2 - lhz r3,0(r5) - -/* case void / done */ -L..44: - addi r1,r1,176 /* restore stack pointer */ - lwz r0,8(r1) /* get return address */ - mtlr r0 /* reset link register */ +/* case FFI_TYPE_VOID */ + mtlr r0 + addi r1, r1, 176 + blr + nop + +/* case FFI_TYPE_INT */ + lwz r3, 56+0(r1) + mtlr r0 + addi r1, r1, 176 + blr + +/* case FFI_TYPE_FLOAT */ + lfs f1, 56+0(r1) + mtlr r0 + addi r1, r1, 176 + blr + +/* case FFI_TYPE_DOUBLE */ + lfd f1, 56+0(r1) + mtlr r0 + addi r1, r1, 176 blr +/* case FFI_TYPE_LONGDOUBLE */ + lfd f1, 56+0(r1) + mtlr r0 + lfd f2, 56+8(r1) + b L..finish + +/* case FFI_TYPE_UINT8 */ + lbz r3, 56+3(r1) + mtlr r0 + addi r1, r1, 176 + blr + +/* case FFI_TYPE_SINT8 */ + lbz r3, 56+3(r1) + mtlr r0 + extsb r3, r3 + b L..finish + +/* case FFI_TYPE_UINT16 */ + lhz r3, 56+2(r1) + mtlr r0 + addi r1, r1, 176 + blr + +/* case FFI_TYPE_SINT16 */ + lha r3, 56+2(r1) + mtlr r0 + addi r1, r1, 176 + blr + +/* case FFI_TYPE_UINT32 */ + lwz r3, 56+0(r1) + mtlr r0 + addi r1, r1, 176 + blr + +/* case FFI_TYPE_SINT32 */ + lwz r3, 56+0(r1) + mtlr r0 + addi r1, r1, 176 + blr + +/* case FFI_TYPE_UINT64 */ + lwz r3, 56+0(r1) + mtlr r0 + lwz r4, 56+4(r1) + b L..finish + +/* case FFI_TYPE_SINT64 */ + lwz r3, 56+0(r1) + mtlr r0 + lwz r4, 56+4(r1) + b L..finish + +/* case FFI_TYPE_STRUCT */ + mtlr r0 + addi r1, r1, 176 + blr + nop + +/* case FFI_TYPE_POINTER */ + lwz r3, 56+0(r1) + mtlr r0 +L..finish: + addi r1, r1, 176 + blr +#endif /* END(ffi_closure_ASM) */ Modified: python/trunk/Modules/_ctypes/libffi/src/powerpc/ffi.c ============================================================================== --- python/trunk/Modules/_ctypes/libffi/src/powerpc/ffi.c (original) +++ python/trunk/Modules/_ctypes/libffi/src/powerpc/ffi.c Mon Mar 15 01:02:36 2010 @@ -1,6 +1,6 @@ /* ----------------------------------------------------------------------- ffi.c - Copyright (c) 1998 Geoffrey Keating - Copyright (C) 2007 Free Software Foundation, Inc + Copyright (C) 2007, 2008 Free Software Foundation, Inc Copyright (C) 2008 Red Hat, Inc PowerPC Foreign Function Interface @@ -43,6 +43,11 @@ FLAG_RETURNS_64BITS = 1 << (31-28), FLAG_RETURNS_128BITS = 1 << (31-27), /* cr6 */ + FLAG_SYSV_SMST_R4 = 1 << (31-26), /* use r4 for FFI_SYSV 8 byte + structs. */ + FLAG_SYSV_SMST_R3 = 1 << (31-25), /* use r3 for FFI_SYSV 4 byte + structs. */ + /* Bits (31-24) through (31-19) store shift value for SMST */ FLAG_ARG_NEEDS_COPY = 1 << (31- 7), FLAG_FP_ARGUMENTS = 1 << (31- 6), /* cr1.eq; specified by ABI */ @@ -180,6 +185,7 @@ { *next_arg.f = (float) double_tmp; next_arg.u += 1; + intarg_count++; } else *fpr_base.d++ = double_tmp; @@ -680,15 +686,15 @@ The same applies for the structs returned in r3/r4. */ if (size <= 4) { - flags |= 1 << (31 - FFI_SYSV_TYPE_SMALL_STRUCT - 1); - flags |= 8 * (4 - size) << 4; + flags |= FLAG_SYSV_SMST_R3; + flags |= 8 * (4 - size) << 8; break; } /* These structs are returned in r3 and r4. See above. */ if (size <= 8) { - flags |= 1 << (31 - FFI_SYSV_TYPE_SMALL_STRUCT - 2); - flags |= 8 * (8 - size) << 4; + flags |= FLAG_SYSV_SMST_R3 | FLAG_SYSV_SMST_R4; + flags |= 8 * (8 - size) << 8; break; } } @@ -1144,6 +1150,7 @@ pst++; avalue[i] = pst; pst += 2; + ng = 8; } break; @@ -1217,6 +1224,7 @@ { avalue[i] = pst; pst += 4; + ng = 8; } break; } @@ -1249,10 +1257,15 @@ /* Tell ffi_closure_SYSV how to perform return type promotions. Because the FFI_SYSV ABI returns the structures <= 8 bytes in r3/r4 - we have to tell ffi_closure_SYSV how to treat them. */ + we have to tell ffi_closure_SYSV how to treat them. We combine the base + type FFI_SYSV_TYPE_SMALL_STRUCT - 1 with the size of the struct. + So a one byte struct gets the return type 16. Return type 1 to 15 are + already used and we never have a struct with size zero. That is the reason + for the subtraction of 1. See the comment in ffitarget.h about ordering. + */ if (cif->abi == FFI_SYSV && cif->rtype->type == FFI_TYPE_STRUCT && size <= 8) - return FFI_SYSV_TYPE_SMALL_STRUCT + size; + return (FFI_SYSV_TYPE_SMALL_STRUCT - 1) + size; #if FFI_TYPE_LONGDOUBLE != FFI_TYPE_DOUBLE else if (cif->rtype->type == FFI_TYPE_LONGDOUBLE && cif->abi != FFI_LINUX && cif->abi != FFI_LINUX_SOFT_FLOAT) Modified: python/trunk/Modules/_ctypes/libffi/src/powerpc/ffi_darwin.c ============================================================================== --- python/trunk/Modules/_ctypes/libffi/src/powerpc/ffi_darwin.c (original) +++ python/trunk/Modules/_ctypes/libffi/src/powerpc/ffi_darwin.c Mon Mar 15 01:02:36 2010 @@ -3,7 +3,7 @@ Copyright (C) 1998 Geoffrey Keating Copyright (C) 2001 John Hornkvist - Copyright (C) 2002, 2006, 2007 Free Software Foundation, Inc. + Copyright (C) 2002, 2006, 2007, 2009 Free Software Foundation, Inc. FFI support for Darwin and AIX. @@ -32,7 +32,7 @@ #include -extern void ffi_closure_ASM(void); +extern void ffi_closure_ASM (void); enum { /* The assembly depends on these exact flags. */ @@ -80,34 +80,37 @@ */ -void ffi_prep_args(extended_cif *ecif, unsigned *const stack) +void +ffi_prep_args (extended_cif *ecif, unsigned long *const stack) { const unsigned bytes = ecif->cif->bytes; const unsigned flags = ecif->cif->flags; + const unsigned nargs = ecif->cif->nargs; + const ffi_abi abi = ecif->cif->abi; /* 'stacktop' points at the previous backchain pointer. */ - unsigned *const stacktop = stack + (bytes / sizeof(unsigned)); + unsigned long *const stacktop = stack + (bytes / sizeof(unsigned long)); /* 'fpr_base' points at the space for fpr1, and grows upwards as we use FPR registers. */ - double *fpr_base = (double*) (stacktop - ASM_NEEDS_REGISTERS) - NUM_FPR_ARG_REGISTERS; + double *fpr_base = (double *) (stacktop - ASM_NEEDS_REGISTERS) - NUM_FPR_ARG_REGISTERS; int fparg_count = 0; /* 'next_arg' grows up as we put parameters in it. */ - unsigned *next_arg = stack + 6; /* 6 reserved positions. */ + unsigned long *next_arg = stack + 6; /* 6 reserved positions. */ - int i = ecif->cif->nargs; + int i; double double_tmp; void **p_argv = ecif->avalue; - unsigned gprvalue; + unsigned long gprvalue; ffi_type** ptr = ecif->cif->arg_types; char *dest_cpy; unsigned size_al = 0; /* Check that everything starts aligned properly. */ - FFI_ASSERT(((unsigned)(char *)stack & 0xF) == 0); - FFI_ASSERT(((unsigned)(char *)stacktop & 0xF) == 0); + FFI_ASSERT(((unsigned) (char *) stack & 0xF) == 0); + FFI_ASSERT(((unsigned) (char *) stacktop & 0xF) == 0); FFI_ASSERT((bytes & 0xF) == 0); /* Deal with return values that are actually pass-by-reference. @@ -115,12 +118,10 @@ Return values are referenced by r3, so r4 is the first parameter. */ if (flags & FLAG_RETVAL_REFERENCE) - *next_arg++ = (unsigned)(char *)ecif->rvalue; + *next_arg++ = (unsigned long) (char *) ecif->rvalue; /* Now for the arguments. */ - for (; - i > 0; - i--, ptr++, p_argv++) + for (i = nargs; i > 0; i--, ptr++, p_argv++) { switch ((*ptr)->type) { @@ -128,7 +129,7 @@ purpose registers are filled, the corresponding GPRs that match the size of the floating-point parameter are skipped. */ case FFI_TYPE_FLOAT: - double_tmp = *(float *)*p_argv; + double_tmp = *(float *) *p_argv; if (fparg_count >= NUM_FPR_ARG_REGISTERS) *(double *)next_arg = double_tmp; else @@ -139,12 +140,16 @@ break; case FFI_TYPE_DOUBLE: - double_tmp = *(double *)*p_argv; + double_tmp = *(double *) *p_argv; if (fparg_count >= NUM_FPR_ARG_REGISTERS) *(double *)next_arg = double_tmp; else *fpr_base++ = double_tmp; +#ifdef POWERPC64 + next_arg++; +#else next_arg += 2; +#endif fparg_count++; FFI_ASSERT(flags & FLAG_FP_ARGUMENTS); break; @@ -152,42 +157,71 @@ #if FFI_TYPE_LONGDOUBLE != FFI_TYPE_DOUBLE case FFI_TYPE_LONGDOUBLE: - double_tmp = ((double *)*p_argv)[0]; - if (fparg_count >= NUM_FPR_ARG_REGISTERS) - *(double *)next_arg = double_tmp; +#ifdef POWERPC64 + if (fparg_count < NUM_FPR_ARG_REGISTERS) + *(long double *) fpr_base++ = *(long double *) *p_argv; else + *(long double *) next_arg = *(long double *) *p_argv; + next_arg += 2; + fparg_count += 2; +#else + double_tmp = ((double *) *p_argv)[0]; + if (fparg_count < NUM_FPR_ARG_REGISTERS) *fpr_base++ = double_tmp; + else + *(double *) next_arg = double_tmp; next_arg += 2; fparg_count++; - double_tmp = ((double *)*p_argv)[1]; - if (fparg_count >= NUM_FPR_ARG_REGISTERS) - *(double *)next_arg = double_tmp; - else + + double_tmp = ((double *) *p_argv)[1]; + if (fparg_count < NUM_FPR_ARG_REGISTERS) *fpr_base++ = double_tmp; + else + *(double *) next_arg = double_tmp; next_arg += 2; fparg_count++; +#endif FFI_ASSERT(flags & FLAG_FP_ARGUMENTS); break; #endif case FFI_TYPE_UINT64: case FFI_TYPE_SINT64: - *(long long *)next_arg = *(long long *)*p_argv; - next_arg+=2; +#ifdef POWERPC64 + gprvalue = *(long long *) *p_argv; + goto putgpr; +#else + *(long long *) next_arg = *(long long *) *p_argv; + next_arg += 2; +#endif break; + case FFI_TYPE_POINTER: + gprvalue = *(unsigned long *) *p_argv; + goto putgpr; case FFI_TYPE_UINT8: - gprvalue = *(unsigned char *)*p_argv; + gprvalue = *(unsigned char *) *p_argv; goto putgpr; case FFI_TYPE_SINT8: - gprvalue = *(signed char *)*p_argv; + gprvalue = *(signed char *) *p_argv; goto putgpr; case FFI_TYPE_UINT16: - gprvalue = *(unsigned short *)*p_argv; + gprvalue = *(unsigned short *) *p_argv; goto putgpr; case FFI_TYPE_SINT16: - gprvalue = *(signed short *)*p_argv; + gprvalue = *(signed short *) *p_argv; goto putgpr; case FFI_TYPE_STRUCT: +#ifdef POWERPC64 + dest_cpy = (char *) next_arg; + size_al = (*ptr)->size; + if ((*ptr)->elements[0]->type == 3) + size_al = ALIGN((*ptr)->size, 8); + if (size_al < 3 && abi == FFI_DARWIN) + dest_cpy += 4 - size_al; + + memcpy ((char *) dest_cpy, (char *) *p_argv, size_al); + next_arg += (size_al + 7) / 8; +#else dest_cpy = (char *) next_arg; /* Structures that match the basic modes (QI 1 byte, HI 2 bytes, @@ -195,22 +229,24 @@ Structures with 3 byte in size are padded upwards. */ size_al = (*ptr)->size; /* If the first member of the struct is a double, then align - the struct to double-word. - Type 3 is defined in include/ffi.h. #define FFI_TYPE_DOUBLE 3. */ - if ((*ptr)->elements[0]->type == 3) + the struct to double-word. */ + if ((*ptr)->elements[0]->type == FFI_TYPE_DOUBLE) size_al = ALIGN((*ptr)->size, 8); - if (size_al < 3 && ecif->cif->abi == FFI_DARWIN) + if (size_al < 3 && abi == FFI_DARWIN) dest_cpy += 4 - size_al; - memcpy((char *)dest_cpy, (char *)*p_argv, size_al); + memcpy((char *) dest_cpy, (char *) *p_argv, size_al); next_arg += (size_al + 3) / 4; +#endif break; case FFI_TYPE_INT: - case FFI_TYPE_UINT32: case FFI_TYPE_SINT32: - case FFI_TYPE_POINTER: - gprvalue = *(unsigned *)*p_argv; + gprvalue = *(signed int *) *p_argv; + goto putgpr; + + case FFI_TYPE_UINT32: + gprvalue = *(unsigned int *) *p_argv; putgpr: *next_arg++ = gprvalue; break; @@ -268,8 +304,44 @@ /* Do not add additional tail padding. */ } +/* Adjust the size of S to be correct for AIX. + Word-align double unless it is the first member of a structure. */ + +static void +aix_adjust_aggregate_sizes (ffi_type *s) +{ + int i; + + if (s->type != FFI_TYPE_STRUCT) + return; + + s->size = 0; + for (i = 0; s->elements[i] != NULL; i++) + { + ffi_type *p; + int align; + + p = s->elements[i]; + aix_adjust_aggregate_sizes (p); + align = p->alignment; + if (i != 0 && p->type == FFI_TYPE_DOUBLE) + align = 4; + s->size = ALIGN(s->size, align) + p->size; + } + + s->size = ALIGN(s->size, s->alignment); + + if (s->elements[0]->type == FFI_TYPE_UINT64 + || s->elements[0]->type == FFI_TYPE_SINT64 + || s->elements[0]->type == FFI_TYPE_DOUBLE + || s->elements[0]->alignment == 8) + s->alignment = s->alignment > 8 ? s->alignment : 8; + /* Do not add additional tail padding. */ +} + /* Perform machine dependent cif processing. */ -ffi_status ffi_prep_cif_machdep(ffi_cif *cif) +ffi_status +ffi_prep_cif_machdep (ffi_cif *cif) { /* All this is for the DARWIN ABI. */ int i; @@ -290,6 +362,13 @@ darwin_adjust_aggregate_sizes (cif->arg_types[i]); } + if (cif->abi == FFI_AIX) + { + aix_adjust_aggregate_sizes (cif->rtype); + for (i = 0; i < cif->nargs; i++) + aix_adjust_aggregate_sizes (cif->arg_types[i]); + } + /* Space for the frame pointer, callee's LR, CR, etc, and for the asm's temp regs. */ @@ -324,6 +403,9 @@ case FFI_TYPE_UINT64: case FFI_TYPE_SINT64: +#ifdef POWERPC64 + case FFI_TYPE_POINTER: +#endif flags |= FLAG_RETURNS_64BITS; break; @@ -387,11 +469,14 @@ case FFI_TYPE_STRUCT: size_al = (*ptr)->size; /* If the first member of the struct is a double, then align - the struct to double-word. - Type 3 is defined in include/ffi.h. #define FFI_TYPE_DOUBLE 3. */ - if ((*ptr)->elements[0]->type == 3) + the struct to double-word. */ + if ((*ptr)->elements[0]->type == FFI_TYPE_DOUBLE) size_al = ALIGN((*ptr)->size, 8); +#ifdef POWERPC64 + intarg_count += (size_al + 7) / 8; +#else intarg_count += (size_al + 3) / 4; +#endif break; default: @@ -410,8 +495,13 @@ bytes += NUM_FPR_ARG_REGISTERS * sizeof(double); /* Stack space. */ +#ifdef POWERPC64 + if ((intarg_count + fparg_count) > NUM_GPR_ARG_REGISTERS) + bytes += (intarg_count + fparg_count) * sizeof(long); +#else if ((intarg_count + 2 * fparg_count) > NUM_GPR_ARG_REGISTERS) bytes += (intarg_count + 2 * fparg_count) * sizeof(long); +#endif else bytes += NUM_GPR_ARG_REGISTERS * sizeof(long); @@ -424,12 +514,13 @@ return FFI_OK; } -extern void ffi_call_AIX(extended_cif *, unsigned, unsigned, unsigned *, +extern void ffi_call_AIX(extended_cif *, long, unsigned, unsigned *, void (*fn)(void), void (*fn2)(void)); -extern void ffi_call_DARWIN(extended_cif *, unsigned, unsigned, unsigned *, +extern void ffi_call_DARWIN(extended_cif *, long, unsigned, unsigned *, void (*fn)(void), void (*fn2)(void)); -void ffi_call(ffi_cif *cif, void (*fn)(void), void *rvalue, void **avalue) +void +ffi_call (ffi_cif *cif, void (*fn)(void), void *rvalue, void **avalue) { extended_cif ecif; @@ -442,7 +533,7 @@ if ((rvalue == NULL) && (cif->rtype->type == FFI_TYPE_STRUCT)) { - ecif.rvalue = alloca(cif->rtype->size); + ecif.rvalue = alloca (cif->rtype->size); } else ecif.rvalue = rvalue; @@ -450,11 +541,11 @@ switch (cif->abi) { case FFI_AIX: - ffi_call_AIX(&ecif, -cif->bytes, cif->flags, ecif.rvalue, fn, + ffi_call_AIX(&ecif, -(long)cif->bytes, cif->flags, ecif.rvalue, fn, ffi_prep_args); break; case FFI_DARWIN: - ffi_call_DARWIN(&ecif, -cif->bytes, cif->flags, ecif.rvalue, fn, + ffi_call_DARWIN(&ecif, -(long)cif->bytes, cif->flags, ecif.rvalue, fn, ffi_prep_args); break; default: @@ -617,8 +708,9 @@ double d; } ffi_dblfl; -int ffi_closure_helper_DARWIN (ffi_closure*, void*, - unsigned long*, ffi_dblfl*); +int +ffi_closure_helper_DARWIN (ffi_closure *, void *, + unsigned long *, ffi_dblfl *); /* Basically the trampoline invokes ffi_closure_ASM, and on entry, r11 holds the address of the closure. @@ -627,8 +719,9 @@ up space for a return value, ffi_closure_ASM invokes the following helper function to do most of the work. */ -int ffi_closure_helper_DARWIN (ffi_closure* closure, void * rvalue, - unsigned long * pgr, ffi_dblfl * pfr) +int +ffi_closure_helper_DARWIN (ffi_closure *closure, void *rvalue, + unsigned long *pgr, ffi_dblfl *pfr) { /* rvalue is the pointer to space for return value in closure assembly pgr is the pointer to where r3-r10 are stored in ffi_closure_ASM @@ -645,18 +738,12 @@ void ** avalue; ffi_type ** arg_types; long i, avn; - long nf; /* number of floating registers already used. */ - long ng; /* number of general registers already used. */ ffi_cif * cif; - double temp; + ffi_dblfl * end_pfr = pfr + NUM_FPR_ARG_REGISTERS; unsigned size_al; - union ldu temp_ld; cif = closure->cif; - avalue = alloca(cif->nargs * sizeof(void *)); - - nf = 0; - ng = 0; + avalue = alloca (cif->nargs * sizeof(void *)); /* Copy the caller's structure return value address so that the closure returns the data directly to the caller. */ @@ -664,7 +751,6 @@ { rvalue = (void *) *pgr; pgr++; - ng++; } i = 0; @@ -678,58 +764,82 @@ { case FFI_TYPE_SINT8: case FFI_TYPE_UINT8: +#ifdef POWERPC64 + avalue[i] = (char *) pgr + 7; +#else avalue[i] = (char *) pgr + 3; - ng++; +#endif pgr++; break; case FFI_TYPE_SINT16: case FFI_TYPE_UINT16: +#ifdef POWERPC64 + avalue[i] = (char *) pgr + 6; +#else avalue[i] = (char *) pgr + 2; - ng++; +#endif pgr++; break; case FFI_TYPE_SINT32: case FFI_TYPE_UINT32: +#ifdef POWERPC64 + avalue[i] = (char *) pgr + 4; +#else case FFI_TYPE_POINTER: avalue[i] = pgr; - ng++; +#endif pgr++; break; case FFI_TYPE_STRUCT: +#ifdef POWERPC64 + size_al = arg_types[i]->size; + if (arg_types[i]->elements[0]->type == FFI_TYPE_DOUBLE) + size_al = ALIGN (arg_types[i]->size, 8); + if (size_al < 3 && cif->abi == FFI_DARWIN) + avalue[i] = (void *) pgr + 8 - size_al; + else + avalue[i] = (void *) pgr; + pgr += (size_al + 7) / 8; +#else /* Structures that match the basic modes (QI 1 byte, HI 2 bytes, SI 4 bytes) are aligned as if they were those modes. */ size_al = arg_types[i]->size; /* If the first member of the struct is a double, then align - the struct to double-word. - Type 3 is defined in include/ffi.h. #define FFI_TYPE_DOUBLE 3. */ - if (arg_types[i]->elements[0]->type == 3) + the struct to double-word. */ + if (arg_types[i]->elements[0]->type == FFI_TYPE_DOUBLE) size_al = ALIGN(arg_types[i]->size, 8); if (size_al < 3 && cif->abi == FFI_DARWIN) avalue[i] = (void*) pgr + 4 - size_al; else avalue[i] = (void*) pgr; - ng += (size_al + 3) / 4; pgr += (size_al + 3) / 4; +#endif break; case FFI_TYPE_SINT64: case FFI_TYPE_UINT64: +#ifdef POWERPC64 + case FFI_TYPE_POINTER: + avalue[i] = pgr; + pgr++; + break; +#else /* Long long ints are passed in two gpr's. */ avalue[i] = pgr; - ng += 2; pgr += 2; break; +#endif case FFI_TYPE_FLOAT: /* A float value consumes a GPR. There are 13 64bit floating point registers. */ - if (nf < NUM_FPR_ARG_REGISTERS) + if (pfr < end_pfr) { - temp = pfr->d; - pfr->f = (float)temp; + double temp = pfr->d; + pfr->f = (float) temp; avalue[i] = pfr; pfr++; } @@ -737,15 +847,13 @@ { avalue[i] = pgr; } - nf++; - ng++; pgr++; break; case FFI_TYPE_DOUBLE: /* A double value consumes two GPRs. There are 13 64bit floating point registers. */ - if (nf < NUM_FPR_ARG_REGISTERS) + if (pfr < end_pfr) { avalue[i] = pfr; pfr++; @@ -754,17 +862,36 @@ { avalue[i] = pgr; } - nf++; - ng += 2; +#ifdef POWERPC64 + pgr++; +#else pgr += 2; +#endif break; #if FFI_TYPE_LONGDOUBLE != FFI_TYPE_DOUBLE case FFI_TYPE_LONGDOUBLE: +#ifdef POWERPC64 + if (pfr + 1 < end_pfr) + { + avalue[i] = pfr; + pfr += 2; + } + else + { + if (pfr < end_pfr) + { + *pgr = *(unsigned long *) pfr; + pfr++; + } + avalue[i] = pgr; + } + pgr += 2; +#else /* POWERPC64 */ /* A long double value consumes four GPRs and two FPRs. There are 13 64bit floating point registers. */ - if (nf < NUM_FPR_ARG_REGISTERS - 1) + if (pfr + 1 < end_pfr) { avalue[i] = pfr; pfr += 2; @@ -772,19 +899,20 @@ /* Here we have the situation where one part of the long double is stored in fpr13 and the other part is already on the stack. We use a union to pass the long double to avalue[i]. */ - else if (nf == NUM_FPR_ARG_REGISTERS - 1) + else if (pfr + 1 == end_pfr) { + union ldu temp_ld; memcpy (&temp_ld.lb[0], pfr, sizeof(ldbits)); memcpy (&temp_ld.lb[1], pgr + 2, sizeof(ldbits)); avalue[i] = &temp_ld.ld; + pfr++; } else { avalue[i] = pgr; } - nf += 2; - ng += 4; pgr += 4; +#endif /* POWERPC64 */ break; #endif default: Modified: python/trunk/Modules/_ctypes/libffi/src/powerpc/ffitarget.h ============================================================================== --- python/trunk/Modules/_ctypes/libffi/src/powerpc/ffitarget.h (original) +++ python/trunk/Modules/_ctypes/libffi/src/powerpc/ffitarget.h Mon Mar 15 01:02:36 2010 @@ -1,6 +1,6 @@ /* -----------------------------------------------------------------*-C-*- ffitarget.h - Copyright (c) 1996-2003 Red Hat, Inc. - Copyright (C) 2007 Free Software Foundation, Inc + Copyright (C) 2007, 2008 Free Software Foundation, Inc Target configuration macros for PowerPC. Permission is hereby granted, free of charge, to any person obtaining @@ -30,7 +30,11 @@ /* ---- System specific configurations ----------------------------------- */ -#if defined (POWERPC) && defined (__powerpc64__) +#if defined (POWERPC) && defined (__powerpc64__) /* linux64 */ +#define POWERPC64 +#elif defined (POWERPC_DARWIN) && defined (__ppc64__) /* Darwin */ +#define POWERPC64 +#elif defined (POWERPC_AIX) && defined (__64BIT__) /* AIX64 */ #define POWERPC64 #endif @@ -78,6 +82,8 @@ FFI_SYSV, FFI_GCC_SYSV, FFI_LINUX64, + FFI_LINUX, + FFI_LINUX_SOFT_FLOAT, FFI_DEFAULT_ABI = FFI_SYSV, #endif @@ -96,7 +102,9 @@ /* Needed for soft-float long-double-128 support. */ #define FFI_TYPE_UINT128 (FFI_TYPE_LAST + 1) -/* Needed for FFI_SYSV small structure returns. */ +/* Needed for FFI_SYSV small structure returns. + We use two flag bits, (FLAG_SYSV_SMST_R3, FLAG_SYSV_SMST_R4) which are + defined in ffi.c, to determine the exact return type and its size. */ #define FFI_SYSV_TYPE_SMALL_STRUCT (FFI_TYPE_LAST + 2) #if defined(POWERPC64) || defined(POWERPC_AIX) Modified: python/trunk/Modules/_ctypes/libffi/src/powerpc/sysv.S ============================================================================== --- python/trunk/Modules/_ctypes/libffi/src/powerpc/sysv.S (original) +++ python/trunk/Modules/_ctypes/libffi/src/powerpc/sysv.S Mon Mar 15 01:02:36 2010 @@ -136,29 +136,18 @@ b L(done_return_value) L(small_struct_return_value): - mtcrf 0x10,%r31 /* cr3 */ - bt- 15,L(smst_one_register) - mtcrf 0x08,%r31 /* cr4 */ - bt- 16,L(smst_two_register) - b L(done_return_value) - -L(smst_one_register): - rlwinm %r5,%r31,5+23,32-5,31 /* Extract the value to shift. */ - slw %r3,%r3,%r5 - stw %r3,0(%r30) - b L(done_return_value) -L(smst_two_register): - rlwinm %r5,%r31,5+23,32-5,31 /* Extract the value to shift. */ - cmpwi %r5,0 - subfic %r9,%r5,32 - slw %r29,%r3,%r5 - srw %r9,%r4,%r9 - beq- L(smst_8byte) - or %r3,%r9,%r29 - slw %r4,%r4,%r5 -L(smst_8byte): - stw %r3,0(%r30) - stw %r4,4(%r30) + extrwi %r6,%r31,2,19 /* number of bytes padding = shift/8 */ + mtcrf 0x02,%r31 /* copy flags to cr[24:27] (cr6) */ + extrwi %r5,%r31,5,19 /* r5 <- number of bits of padding */ + subfic %r6,%r6,4 /* r6 <- number of useful bytes in r3 */ + bf- 25,L(done_return_value) /* struct in r3 ? if not, done. */ +/* smst_one_register: */ + slw %r3,%r3,%r5 /* Left-justify value in r3 */ + mtxer %r6 /* move byte count to XER ... */ + stswx %r3,0,%r30 /* ... and store that many bytes */ + bf+ 26,L(done_return_value) /* struct in r3:r4 ? */ + add %r6,%r6,%r30 /* adjust pointer */ + stswi %r4,%r6,4 /* store last four bytes */ b L(done_return_value) .LFE1: Added: python/trunk/Modules/_ctypes/libffi/src/raw_api.c ============================================================================== --- (empty file) +++ python/trunk/Modules/_ctypes/libffi/src/raw_api.c Mon Mar 15 01:02:36 2010 @@ -0,0 +1,254 @@ +/* ----------------------------------------------------------------------- + raw_api.c - Copyright (c) 1999, 2008 Red Hat, Inc. + + Author: Kresten Krab Thorup + + 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 THE AUTHORS OR COPYRIGHT + HOLDERS 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. + ----------------------------------------------------------------------- */ + +/* This file defines generic functions for use with the raw api. */ + +#include +#include + +#if !FFI_NO_RAW_API + +size_t +ffi_raw_size (ffi_cif *cif) +{ + size_t result = 0; + int i; + + ffi_type **at = cif->arg_types; + + for (i = cif->nargs-1; i >= 0; i--, at++) + { +#if !FFI_NO_STRUCTS + if ((*at)->type == FFI_TYPE_STRUCT) + result += ALIGN (sizeof (void*), FFI_SIZEOF_ARG); + else +#endif + result += ALIGN ((*at)->size, FFI_SIZEOF_ARG); + } + + return result; +} + + +void +ffi_raw_to_ptrarray (ffi_cif *cif, ffi_raw *raw, void **args) +{ + unsigned i; + ffi_type **tp = cif->arg_types; + +#if WORDS_BIGENDIAN + + for (i = 0; i < cif->nargs; i++, tp++, args++) + { + switch ((*tp)->type) + { + case FFI_TYPE_UINT8: + case FFI_TYPE_SINT8: + *args = (void*) ((char*)(raw++) + FFI_SIZEOF_ARG - 1); + break; + + case FFI_TYPE_UINT16: + case FFI_TYPE_SINT16: + *args = (void*) ((char*)(raw++) + FFI_SIZEOF_ARG - 2); + break; + +#if FFI_SIZEOF_ARG >= 4 + case FFI_TYPE_UINT32: + case FFI_TYPE_SINT32: + *args = (void*) ((char*)(raw++) + FFI_SIZEOF_ARG - 4); + break; +#endif + +#if !FFI_NO_STRUCTS + case FFI_TYPE_STRUCT: + *args = (raw++)->ptr; + break; +#endif + + case FFI_TYPE_POINTER: + *args = (void*) &(raw++)->ptr; + break; + + default: + *args = raw; + raw += ALIGN ((*tp)->size, FFI_SIZEOF_ARG) / FFI_SIZEOF_ARG; + } + } + +#else /* WORDS_BIGENDIAN */ + +#if !PDP + + /* then assume little endian */ + for (i = 0; i < cif->nargs; i++, tp++, args++) + { +#if !FFI_NO_STRUCTS + if ((*tp)->type == FFI_TYPE_STRUCT) + { + *args = (raw++)->ptr; + } + else +#endif + { + *args = (void*) raw; + raw += ALIGN ((*tp)->size, sizeof (void*)) / sizeof (void*); + } + } + +#else +#error "pdp endian not supported" +#endif /* ! PDP */ + +#endif /* WORDS_BIGENDIAN */ +} + +void +ffi_ptrarray_to_raw (ffi_cif *cif, void **args, ffi_raw *raw) +{ + unsigned i; + ffi_type **tp = cif->arg_types; + + for (i = 0; i < cif->nargs; i++, tp++, args++) + { + switch ((*tp)->type) + { + case FFI_TYPE_UINT8: + (raw++)->uint = *(UINT8*) (*args); + break; + + case FFI_TYPE_SINT8: + (raw++)->sint = *(SINT8*) (*args); + break; + + case FFI_TYPE_UINT16: + (raw++)->uint = *(UINT16*) (*args); + break; + + case FFI_TYPE_SINT16: + (raw++)->sint = *(SINT16*) (*args); + break; + +#if FFI_SIZEOF_ARG >= 4 + case FFI_TYPE_UINT32: + (raw++)->uint = *(UINT32*) (*args); + break; + + case FFI_TYPE_SINT32: + (raw++)->sint = *(SINT32*) (*args); + break; +#endif + +#if !FFI_NO_STRUCTS + case FFI_TYPE_STRUCT: + (raw++)->ptr = *args; + break; +#endif + + case FFI_TYPE_POINTER: + (raw++)->ptr = **(void***) args; + break; + + default: + memcpy ((void*) raw->data, (void*)*args, (*tp)->size); + raw += ALIGN ((*tp)->size, FFI_SIZEOF_ARG) / FFI_SIZEOF_ARG; + } + } +} + +#if !FFI_NATIVE_RAW_API + + +/* This is a generic definition of ffi_raw_call, to be used if the + * native system does not provide a machine-specific implementation. + * Having this, allows code to be written for the raw API, without + * the need for system-specific code to handle input in that format; + * these following couple of functions will handle the translation forth + * and back automatically. */ + +void ffi_raw_call (ffi_cif *cif, void (*fn)(void), void *rvalue, ffi_raw *raw) +{ + void **avalue = (void**) alloca (cif->nargs * sizeof (void*)); + ffi_raw_to_ptrarray (cif, raw, avalue); + ffi_call (cif, fn, rvalue, avalue); +} + +#if FFI_CLOSURES /* base system provides closures */ + +static void +ffi_translate_args (ffi_cif *cif, void *rvalue, + void **avalue, void *user_data) +{ + ffi_raw *raw = (ffi_raw*)alloca (ffi_raw_size (cif)); + ffi_raw_closure *cl = (ffi_raw_closure*)user_data; + + ffi_ptrarray_to_raw (cif, avalue, raw); + (*cl->fun) (cif, rvalue, raw, cl->user_data); +} + +ffi_status +ffi_prep_raw_closure_loc (ffi_raw_closure* cl, + ffi_cif *cif, + void (*fun)(ffi_cif*,void*,ffi_raw*,void*), + void *user_data, + void *codeloc) +{ + ffi_status status; + + status = ffi_prep_closure_loc ((ffi_closure*) cl, + cif, + &ffi_translate_args, + codeloc, + codeloc); + if (status == FFI_OK) + { + cl->fun = fun; + cl->user_data = user_data; + } + + return status; +} + +#endif /* FFI_CLOSURES */ +#endif /* !FFI_NATIVE_RAW_API */ + +#if FFI_CLOSURES + +/* Again, here is the generic version of ffi_prep_raw_closure, which + * will install an intermediate "hub" for translation of arguments from + * the pointer-array format, to the raw format */ + +ffi_status +ffi_prep_raw_closure (ffi_raw_closure* cl, + ffi_cif *cif, + void (*fun)(ffi_cif*,void*,ffi_raw*,void*), + void *user_data) +{ + return ffi_prep_raw_closure_loc (cl, cif, fun, user_data, cl); +} + +#endif /* FFI_CLOSURES */ + +#endif /* !FFI_NO_RAW_API */ Modified: python/trunk/Modules/_ctypes/libffi/src/s390/sysv.S ============================================================================== --- python/trunk/Modules/_ctypes/libffi/src/s390/sysv.S (original) +++ python/trunk/Modules/_ctypes/libffi/src/s390/sysv.S Mon Mar 15 01:02:36 2010 @@ -1,7 +1,7 @@ /* ----------------------------------------------------------------------- sysv.S - Copyright (c) 2000 Software AG Copyright (c) 2008 Red Hat, Inc. - + S390 Foreign Function Interface Permission is hereby granted, free of charge, to any person obtaining Modified: python/trunk/Modules/_ctypes/libffi/src/sh/ffi.c ============================================================================== --- python/trunk/Modules/_ctypes/libffi/src/sh/ffi.c (original) +++ python/trunk/Modules/_ctypes/libffi/src/sh/ffi.c Mon Mar 15 01:02:36 2010 @@ -1,5 +1,5 @@ /* ----------------------------------------------------------------------- - ffi.c - Copyright (c) 2002, 2003, 2004, 2005, 2006, 2007 Kaz Kojima + ffi.c - Copyright (c) 2002, 2003, 2004, 2005, 2006, 2007, 2008 Kaz Kojima Copyright (c) 2008 Red Hat, Inc. SuperH Foreign Function Interface @@ -461,7 +461,7 @@ void *codeloc) { unsigned int *tramp; - unsigned short insn; + unsigned int insn; FFI_ASSERT (cif->abi == FFI_GCC_SYSV); Modified: python/trunk/Modules/_ctypes/libffi/src/sh/sysv.S ============================================================================== --- python/trunk/Modules/_ctypes/libffi/src/sh/sysv.S (original) +++ python/trunk/Modules/_ctypes/libffi/src/sh/sysv.S Mon Mar 15 01:02:36 2010 @@ -1,5 +1,5 @@ /* ----------------------------------------------------------------------- - sysv.S - Copyright (c) 2002, 2003, 2004, 2006 Kaz Kojima + sysv.S - Copyright (c) 2002, 2003, 2004, 2006, 2008 Kaz Kojima SuperH Foreign Function Interface @@ -14,14 +14,14 @@ 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 THE AUTHORS OR COPYRIGHT HOLDERS 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 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 THE AUTHORS OR COPYRIGHT + HOLDERS 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 @@ -702,6 +702,10 @@ .ffi_closure_SYSV_end: .size CNAME(ffi_closure_SYSV),.ffi_closure_SYSV_end-CNAME(ffi_closure_SYSV) +#if defined __ELF__ && defined __linux__ + .section .note.GNU-stack,"", at progbits +#endif + .section ".eh_frame","aw", at progbits __FRAME_BEGIN__: .4byte .LECIE1-.LSCIE1 /* Length of Common Information Entry */ Modified: python/trunk/Modules/_ctypes/libffi/src/sh64/ffi.c ============================================================================== --- python/trunk/Modules/_ctypes/libffi/src/sh64/ffi.c (original) +++ python/trunk/Modules/_ctypes/libffi/src/sh64/ffi.c Mon Mar 15 01:02:36 2010 @@ -1,5 +1,5 @@ /* ----------------------------------------------------------------------- - ffi.c - Copyright (c) 2003, 2004 Kaz Kojima + ffi.c - Copyright (c) 2003, 2004, 2006, 2007 Kaz Kojima Copyright (c) 2008 Anthony Green SuperH SHmedia Foreign Function Interface @@ -56,9 +56,7 @@ /* 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 unsigned int avn; @@ -162,6 +160,7 @@ int n, m; int greg; int freg; + int fpair = -1; greg = (return_type (cif->rtype) == FFI_TYPE_STRUCT ? 1 : 0); freg = 0; @@ -177,7 +176,13 @@ cif->bytes += sizeof (UINT64) - sizeof (float); if (freg >= NFREGARG - 1) continue; - freg++; + if (fpair < 0) + { + fpair = freg; + freg += 2; + } + else + fpair = -1; cif->flags2 += ((cif->arg_types)[i]->type) << (2 * j++); break; @@ -186,7 +191,6 @@ continue; if ((freg + 1) < NFREGARG) { - freg = (freg + 1) & ~1; freg += 2; cif->flags2 += ((cif->arg_types)[i]->type) << (2 * j++); } @@ -264,9 +268,7 @@ else if ((rvalue == NULL) && (cif->rtype->type == FFI_TYPE_STRUCT)) { - /*@-sysunrecog@*/ ecif.rvalue = alloca(cif->rtype->size); - /*@=sysunrecog@*/ } else ecif.rvalue = rvalue; @@ -274,10 +276,8 @@ switch (cif->abi) { case FFI_SYSV: - /*@-usedef@*/ - ffi_call_SYSV(ffi_prep_args, &ecif, cif->bytes, - cif->flags, cif->flags2, ecif.rvalue, fn); - /*@=usedef@*/ + ffi_call_SYSV(ffi_prep_args, &ecif, cif->bytes, cif->flags, cif->flags2, + ecif.rvalue, fn); break; default: FFI_ASSERT(0); @@ -294,10 +294,11 @@ extern void __ic_invalidate (void *line); ffi_status -ffi_prep_closure (ffi_closure *closure, - ffi_cif *cif, - void (*fun)(ffi_cif*, void*, void**, void*), - void *user_data) +ffi_prep_closure_loc (ffi_closure *closure, + ffi_cif *cif, + void (*fun)(ffi_cif*, void*, void**, void*), + void *user_data, + void *codeloc) { unsigned int *tramp; @@ -321,8 +322,8 @@ tramp[2] = 0xcc000010 | (((UINT32) ffi_closure_SYSV) >> 16) << 10; tramp[3] = 0xc8000010 | (((UINT32) ffi_closure_SYSV) & 0xffff) << 10; tramp[4] = 0x6bf10600; - tramp[5] = 0xcc000010 | (((UINT32) closure) >> 16) << 10; - tramp[6] = 0xc8000010 | (((UINT32) closure) & 0xffff) << 10; + tramp[5] = 0xcc000010 | (((UINT32) codeloc) >> 16) << 10; + tramp[6] = 0xc8000010 | (((UINT32) codeloc) & 0xffff) << 10; tramp[7] = 0x4401fff0; closure->cif = cif; @@ -330,7 +331,8 @@ closure->user_data = user_data; /* Flush the icache. */ - asm volatile ("ocbwb %0,0; synco; icbi %0,0; synci" : : "r" (tramp)); + asm volatile ("ocbwb %0,0; synco; icbi %1,0; synci" : : "r" (tramp), + "r"(codeloc)); return FFI_OK; } @@ -352,6 +354,7 @@ int i, avn; int greg, freg; ffi_cif *cif; + int fpair = -1; cif = closure->cif; avalue = alloca (cif->nargs * sizeof (void *)); @@ -360,7 +363,7 @@ returns the data directly to the caller. */ if (return_type (cif->rtype) == FFI_TYPE_STRUCT) { - rvalue = *pgr; + rvalue = (UINT64 *) *pgr; greg = 1; } else @@ -404,11 +407,24 @@ if ((*p_arg)->type == FFI_TYPE_FLOAT) { if (freg < NFREGARG - 1) + { + if (fpair >= 0) + { + avalue[i] = (UINT32 *) pfr + fpair; + fpair = -1; + } + else + { #ifdef __LITTLE_ENDIAN__ - avalue[i] = (UINT32 *) pfr + (1 ^ freg++); + fpair = freg; + avalue[i] = (UINT32 *) pfr + (1 ^ freg); #else - avalue[i] = (UINT32 *) pfr + freg++; + fpair = 1 ^ freg; + avalue[i] = (UINT32 *) pfr + freg; #endif + freg += 2; + } + } else #ifdef __LITTLE_ENDIAN__ avalue[i] = pgr + greg; @@ -430,7 +446,6 @@ avalue[i] = pgr + greg; else { - freg = (freg + 1) & ~1; avalue[i] = pfr + (freg >> 1); freg += 2; } Modified: python/trunk/Modules/_ctypes/libffi/src/sh64/sysv.S ============================================================================== --- python/trunk/Modules/_ctypes/libffi/src/sh64/sysv.S (original) +++ python/trunk/Modules/_ctypes/libffi/src/sh64/sysv.S Mon Mar 15 01:02:36 2010 @@ -1,5 +1,5 @@ /* ----------------------------------------------------------------------- - sysv.S - Copyright (c) 2003, 2004 Kaz Kojima + sysv.S - Copyright (c) 2003, 2004, 2006, 2008 Kaz Kojima SuperH SHmedia Foreign Function Interface @@ -14,14 +14,15 @@ 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 THE AUTHORS OR COPYRIGHT HOLDERS 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 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 THE AUTHORS OR COPYRIGHT + HOLDERS 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 @@ -85,6 +86,7 @@ addi r15, 64, r22 movi 0, r0 movi 0, r1 + movi -1, r23 pt/l 1f, tr1 bnei/l r29, FFI_TYPE_STRUCT, tr1 @@ -107,9 +109,6 @@ .L_pass_d: addi r0, 1, r0 - addi r1, 1, r1 - andi r1, ~1, r1 - pt/l 3f, tr0 movi 12, r20 bge/l r1, r20, tr0 @@ -159,13 +158,23 @@ addi.l r15, 8, r15 3: pt/l .L_pass, tr0 - addi r1, 1, r1 blink tr0, r63 .L_pop_f: pt/l .L_pop_f_tbl, tr1 + pt/l 5f, tr2 gettr tr1, r20 + bge/l r23, r63, tr2 + add r1, r63, r23 shlli r1, 3, r21 + addi r1, 2, r1 + add r20, r21, r20 + ptabs/l r20, tr1 + blink tr1, r63 +5: + addi r23, 1, r21 + movi -1, r23 + shlli r21, 3, r21 add r20, r21, r20 ptabs/l r20, tr1 blink tr1, r63 @@ -430,6 +439,10 @@ .ffi_closure_SYSV_end: .size CNAME(ffi_closure_SYSV),.ffi_closure_SYSV_end-CNAME(ffi_closure_SYSV) +#if defined __ELF__ && defined __linux__ + .section .note.GNU-stack,"", at progbits +#endif + .section ".eh_frame","aw", at progbits __FRAME_BEGIN__: .4byte .LECIE1-.LSCIE1 /* Length of Common Information Entry */ Modified: python/trunk/Modules/_ctypes/libffi/src/sparc/ffi.c ============================================================================== --- python/trunk/Modules/_ctypes/libffi/src/sparc/ffi.c (original) +++ python/trunk/Modules/_ctypes/libffi/src/sparc/ffi.c Mon Mar 15 01:02:36 2010 @@ -308,14 +308,24 @@ cif->flags = FFI_TYPE_STRUCT; break; + case FFI_TYPE_SINT8: + case FFI_TYPE_UINT8: + case FFI_TYPE_SINT16: + case FFI_TYPE_UINT16: + if (cif->abi == FFI_V9) + cif->flags = FFI_TYPE_INT; + else + cif->flags = cif->rtype->type; + break; + case FFI_TYPE_SINT64: case FFI_TYPE_UINT64: - if (cif->abi != FFI_V9) - { - cif->flags = FFI_TYPE_SINT64; - break; - } - /* FALLTHROUGH */ + if (cif->abi == FFI_V9) + cif->flags = FFI_TYPE_INT; + else + cif->flags = FFI_TYPE_SINT64; + break; + default: cif->flags = FFI_TYPE_INT; break; @@ -589,6 +599,11 @@ /* Right-justify. */ argn += ALIGN(arg_types[i]->size, FFI_SIZEOF_ARG) / FFI_SIZEOF_ARG; + /* Align on a 16-byte boundary. */ +#if FFI_TYPE_LONGDOUBLE != FFI_TYPE_DOUBLE + if (arg_types[i]->type == FFI_TYPE_LONGDOUBLE && (argn % 2) != 0) + argn++; +#endif if (i < fp_slot_max && (arg_types[i]->type == FFI_TYPE_FLOAT || arg_types[i]->type == FFI_TYPE_DOUBLE Modified: python/trunk/Modules/_ctypes/libffi/src/sparc/v8.S ============================================================================== --- python/trunk/Modules/_ctypes/libffi/src/sparc/v8.S (original) +++ python/trunk/Modules/_ctypes/libffi/src/sparc/v8.S Mon Mar 15 01:02:36 2010 @@ -73,21 +73,63 @@ be,a done st %f0, [%i4+0] ! (delay) + cmp %i3, FFI_TYPE_DOUBLE + be,a double + st %f0, [%i4+0] ! (delay) + + cmp %i3, FFI_TYPE_SINT8 + be,a sint8 + sll %o0, 24, %o0 ! (delay) + + cmp %i3, FFI_TYPE_UINT8 + be,a uint8 + sll %o0, 24, %o0 ! (delay) + + cmp %i3, FFI_TYPE_SINT16 + be,a sint16 + sll %o0, 16, %o0 ! (delay) + + cmp %i3, FFI_TYPE_UINT16 + be,a uint16 + sll %o0, 16, %o0 ! (delay) + cmp %i3, FFI_TYPE_SINT64 - be longlong + be,a longlong + st %o0, [%i4+0] ! (delay) +done: + ret + restore - cmp %i3, FFI_TYPE_DOUBLE - bne done - nop - st %f0, [%i4+0] +double: st %f1, [%i4+4] - -done: ret restore -longlong: +sint8: + sra %o0, 24, %o0 st %o0, [%i4+0] + ret + restore + +uint8: + srl %o0, 24, %o0 + st %o0, [%i4+0] + ret + restore + +sint16: + sra %o0, 16, %o0 + st %o0, [%i4+0] + ret + restore + +uint16: + srl %o0, 16, %o0 + st %o0, [%i4+0] + ret + restore + +longlong: st %o1, [%i4+4] ret restore @@ -148,7 +190,8 @@ be done1 cmp %o0, FFI_TYPE_INT - be integer + be done1 + ld [%fp-8], %i0 cmp %o0, FFI_TYPE_FLOAT be,a done1 @@ -166,13 +209,11 @@ cmp %o0, FFI_TYPE_STRUCT be done2 - ! FFI_TYPE_SINT64 - ! FFI_TYPE_UINT64 - ld [%fp-4], %i1 + cmp %o0, FFI_TYPE_SINT64 + be,a done1 + ldd [%fp-8], %i0 -integer: ld [%fp-8], %i0 - done1: jmp %i7+8 restore Added: python/trunk/Modules/_ctypes/libffi/src/types.c ============================================================================== --- (empty file) +++ python/trunk/Modules/_ctypes/libffi/src/types.c Mon Mar 15 01:02:36 2010 @@ -0,0 +1,77 @@ +/* ----------------------------------------------------------------------- + types.c - Copyright (c) 1996, 1998 Red Hat, Inc. + + Predefined ffi_types needed by libffi. + + 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 THE AUTHORS OR COPYRIGHT + HOLDERS 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. + ----------------------------------------------------------------------- */ + +/* Hide the basic type definitions from the header file, so that we + can redefine them here as "const". */ +#define LIBFFI_HIDE_BASIC_TYPES + +#include +#include + +/* Type definitions */ + +#define FFI_TYPEDEF(name, type, id) \ +struct struct_align_##name { \ + char c; \ + type x; \ +}; \ +const ffi_type ffi_type_##name = { \ + sizeof(type), \ + offsetof(struct struct_align_##name, x), \ + id, NULL \ +} + +/* Size and alignment are fake here. They must not be 0. */ +const ffi_type ffi_type_void = { + 1, 1, FFI_TYPE_VOID, NULL +}; + +FFI_TYPEDEF(uint8, UINT8, FFI_TYPE_UINT8); +FFI_TYPEDEF(sint8, SINT8, FFI_TYPE_SINT8); +FFI_TYPEDEF(uint16, UINT16, FFI_TYPE_UINT16); +FFI_TYPEDEF(sint16, SINT16, FFI_TYPE_SINT16); +FFI_TYPEDEF(uint32, UINT32, FFI_TYPE_UINT32); +FFI_TYPEDEF(sint32, SINT32, FFI_TYPE_SINT32); +FFI_TYPEDEF(uint64, UINT64, FFI_TYPE_UINT64); +FFI_TYPEDEF(sint64, SINT64, FFI_TYPE_SINT64); + +FFI_TYPEDEF(pointer, void*, FFI_TYPE_POINTER); + +FFI_TYPEDEF(float, float, FFI_TYPE_FLOAT); +FFI_TYPEDEF(double, double, FFI_TYPE_DOUBLE); + +#ifdef __alpha__ +/* Even if we're not configured to default to 128-bit long double, + maintain binary compatibility, as -mlong-double-128 can be used + at any time. */ +/* Validate the hard-coded number below. */ +# if defined(__LONG_DOUBLE_128__) && FFI_TYPE_LONGDOUBLE != 4 +# error FFI_TYPE_LONGDOUBLE out of date +# endif +const ffi_type ffi_type_longdouble = { 16, 16, 4, NULL }; +#elif FFI_TYPE_LONGDOUBLE != FFI_TYPE_DOUBLE +FFI_TYPEDEF(longdouble, long double, FFI_TYPE_LONGDOUBLE); +#endif Modified: python/trunk/Modules/_ctypes/libffi/src/x86/darwin.S ============================================================================== --- python/trunk/Modules/_ctypes/libffi/src/x86/darwin.S (original) +++ python/trunk/Modules/_ctypes/libffi/src/x86/darwin.S Mon Mar 15 01:02:36 2010 @@ -15,15 +15,16 @@ 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 THE AUTHORS OR COPYRIGHT HOLDERS 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 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 THE AUTHORS OR COPYRIGHT + HOLDERS 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 __x86_64__ Modified: python/trunk/Modules/_ctypes/libffi/src/x86/ffi.c ============================================================================== --- python/trunk/Modules/_ctypes/libffi/src/x86/ffi.c (original) +++ python/trunk/Modules/_ctypes/libffi/src/x86/ffi.c Mon Mar 15 01:02:36 2010 @@ -3,7 +3,7 @@ Copyright (c) 2002 Ranjit Mathew Copyright (c) 2002 Bo Thorsen Copyright (c) 2002 Roger Sayle - Copyright (C) 2008 Free Software Foundation, Inc. + Copyright (C) 2008 Free Software Foundation, Inc. x86 Foreign Function Interface @@ -28,7 +28,11 @@ DEALINGS IN THE SOFTWARE. ----------------------------------------------------------------------- */ -#ifndef __x86_64__ +#if !defined(__x86_64__) || defined(_WIN64) + +#ifdef _WIN64 +#include +#endif #include #include @@ -47,10 +51,15 @@ argp = stack; - if (ecif->cif->flags == FFI_TYPE_STRUCT) + if (ecif->cif->flags == FFI_TYPE_STRUCT +#ifdef X86_WIN64 + && (ecif->cif->rtype->size != 1 && ecif->cif->rtype->size != 2 + && ecif->cif->rtype->size != 4 && ecif->cif->rtype->size != 8) +#endif + ) { *(void **) argp = ecif->rvalue; - argp += 4; + argp += sizeof(void*); } p_argv = ecif->avalue; @@ -62,53 +71,75 @@ size_t z; /* Align if necessary */ - if ((sizeof(int) - 1) & (unsigned) argp) - argp = (char *) ALIGN(argp, sizeof(int)); + if ((sizeof(void*) - 1) & (size_t) argp) + argp = (char *) ALIGN(argp, sizeof(void*)); 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_SINT32: - *(signed int *) argp = (signed int)*(SINT32 *)(* p_argv); - break; - - case FFI_TYPE_UINT32: - *(unsigned int *) argp = (unsigned int)*(UINT32 *)(* p_argv); - break; - - case FFI_TYPE_STRUCT: - *(unsigned int *) argp = (unsigned int)*(UINT32 *)(* p_argv); - break; - - default: - FFI_ASSERT(0); - } - } +#ifdef X86_WIN64 + if (z > sizeof(ffi_arg) + || ((*p_arg)->type == FFI_TYPE_STRUCT + && (z != 1 && z != 2 && z != 4 && z != 8)) +#if FFI_TYPE_DOUBLE != FFI_TYPE_LONGDOUBLE + || ((*p_arg)->type == FFI_TYPE_LONGDOUBLE) +#endif + ) + { + z = sizeof(ffi_arg); + *(void **)argp = *p_argv; + } + else if ((*p_arg)->type == FFI_TYPE_FLOAT) + { + memcpy(argp, *p_argv, z); + } + else +#endif + if (z < sizeof(ffi_arg)) + { + z = sizeof(ffi_arg); + switch ((*p_arg)->type) + { + case FFI_TYPE_SINT8: + *(ffi_sarg *) argp = (ffi_sarg)*(SINT8 *)(* p_argv); + break; + + case FFI_TYPE_UINT8: + *(ffi_arg *) argp = (ffi_arg)*(UINT8 *)(* p_argv); + break; + + case FFI_TYPE_SINT16: + *(ffi_sarg *) argp = (ffi_sarg)*(SINT16 *)(* p_argv); + break; + + case FFI_TYPE_UINT16: + *(ffi_arg *) argp = (ffi_arg)*(UINT16 *)(* p_argv); + break; + + case FFI_TYPE_SINT32: + *(ffi_sarg *) argp = (ffi_sarg)*(SINT32 *)(* p_argv); + break; + + case FFI_TYPE_UINT32: + *(ffi_arg *) argp = (ffi_arg)*(UINT32 *)(* p_argv); + break; + + case FFI_TYPE_STRUCT: + *(ffi_arg *) argp = *(ffi_arg *)(* p_argv); + break; + + default: + FFI_ASSERT(0); + } + } else - { - memcpy(argp, *p_argv, z); - } + { + memcpy(argp, *p_argv, z); + } p_argv++; +#ifdef X86_WIN64 + argp += (z + sizeof(void*) - 1) & ~(sizeof(void*) - 1); +#else argp += z; +#endif } return; @@ -124,21 +155,32 @@ #ifdef X86 case FFI_TYPE_STRUCT: #endif -#if defined(X86) || defined(X86_DARWIN) +#if defined(X86) || defined (X86_WIN32) || defined(X86_FREEBSD) || defined(X86_DARWIN) || defined(X86_WIN64) case FFI_TYPE_UINT8: case FFI_TYPE_UINT16: case FFI_TYPE_SINT8: case FFI_TYPE_SINT16: #endif +#ifdef X86_WIN64 + case FFI_TYPE_UINT32: + case FFI_TYPE_SINT32: +#endif case FFI_TYPE_SINT64: case FFI_TYPE_FLOAT: case FFI_TYPE_DOUBLE: +#ifndef X86_WIN64 +#if FFI_TYPE_DOUBLE != FFI_TYPE_LONGDOUBLE case FFI_TYPE_LONGDOUBLE: +#endif +#endif cif->flags = (unsigned) cif->rtype->type; break; case FFI_TYPE_UINT64: +#ifdef X86_WIN64 + case FFI_TYPE_POINTER: +#endif cif->flags = FFI_TYPE_SINT64; break; @@ -154,7 +196,11 @@ } else if (cif->rtype->size == 4) { +#ifdef X86_WIN64 + cif->flags = FFI_TYPE_SMALL_STRUCT_4B; +#else cif->flags = FFI_TYPE_INT; /* same as int type */ +#endif } else if (cif->rtype->size == 8) { @@ -163,12 +209,23 @@ else { cif->flags = FFI_TYPE_STRUCT; +#ifdef X86_WIN64 + // allocate space for return value pointer + cif->bytes += ALIGN(sizeof(void*), FFI_SIZEOF_ARG); +#endif } break; #endif default: +#ifdef X86_WIN64 + cif->flags = FFI_TYPE_SINT64; + break; + case FFI_TYPE_INT: + cif->flags = FFI_TYPE_SINT32; +#else cif->flags = FFI_TYPE_INT; +#endif break; } @@ -176,17 +233,38 @@ cif->bytes = (cif->bytes + 15) & ~0xF; #endif +#ifdef X86_WIN64 + { + unsigned int i; + ffi_type **ptr; + + for (ptr = cif->arg_types, i = cif->nargs; i > 0; i--, ptr++) + { + if (((*ptr)->alignment - 1) & cif->bytes) + cif->bytes = ALIGN(cif->bytes, (*ptr)->alignment); + cif->bytes += ALIGN((*ptr)->size, FFI_SIZEOF_ARG); + } + } + // ensure space for storing four registers + cif->bytes += 4 * sizeof(ffi_arg); +#endif + return FFI_OK; } extern void ffi_call_SYSV(void (*)(char *, extended_cif *), extended_cif *, - unsigned, unsigned, unsigned *, void (*fn)(void)); + unsigned, unsigned, unsigned *, void (*fn)(void)); #ifdef X86_WIN32 extern void ffi_call_STDCALL(void (*)(char *, extended_cif *), extended_cif *, - unsigned, unsigned, unsigned *, void (*fn)(void)); + unsigned, unsigned, unsigned *, void (*fn)(void)); #endif /* X86_WIN32 */ +#ifdef X86_WIN64 +extern int +ffi_call_win64(void (*)(char *, extended_cif *), extended_cif *, + unsigned, unsigned, unsigned *, void (*fn)(void)); +#endif void ffi_call(ffi_cif *cif, void (*fn)(void), void *rvalue, void **avalue) { @@ -195,30 +273,66 @@ 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 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->flags == FFI_TYPE_STRUCT)) +#ifdef X86_WIN64 + if (rvalue == NULL + && cif->flags == FFI_TYPE_STRUCT + && cif->rtype->size != 1 && cif->rtype->size != 2 + && cif->rtype->size != 4 && cif->rtype->size != 8) + { + ecif.rvalue = alloca((cif->rtype->size + 0xF) & ~0xF); + } +#else + if (rvalue == NULL + && cif->flags == FFI_TYPE_STRUCT) { ecif.rvalue = alloca(cif->rtype->size); } +#endif else ecif.rvalue = rvalue; switch (cif->abi) { +#ifdef X86_WIN64 + case FFI_WIN64: + { + // Make copies of all struct arguments + // NOTE: not sure if responsibility should be here or in caller + unsigned int i; + for (i=0; i < cif->nargs;i++) { + size_t size = cif->arg_types[i]->size; + if ((cif->arg_types[i]->type == FFI_TYPE_STRUCT + && (size != 1 && size != 2 && size != 4 && size != 8)) +#if FFI_TYPE_LONGDOUBLE != FFI_TYPE_DOUBLE + || cif->arg_types[i]->type == FFI_TYPE_LONGDOUBLE +#endif + ) + { + void *local = alloca(size); + memcpy(local, avalue[i], size); + avalue[i] = local; + } + } + ffi_call_win64(ffi_prep_args, &ecif, cif->bytes, + cif->flags, ecif.rvalue, fn); + } + break; +#else case FFI_SYSV: ffi_call_SYSV(ffi_prep_args, &ecif, cif->bytes, cif->flags, ecif.rvalue, - fn); + fn); break; #ifdef X86_WIN32 case FFI_STDCALL: ffi_call_STDCALL(ffi_prep_args, &ecif, cif->bytes, cif->flags, - ecif.rvalue, fn); + ecif.rvalue, fn); break; #endif /* X86_WIN32 */ +#endif /* X86_WIN64 */ default: FFI_ASSERT(0); break; @@ -229,7 +343,7 @@ /** private members **/ static void ffi_prep_incoming_args_SYSV (char *stack, void **ret, - void** args, ffi_cif* cif); + void** args, ffi_cif* cif); void FFI_HIDDEN ffi_closure_SYSV (ffi_closure *) __attribute__ ((regparm(1))); unsigned int FFI_HIDDEN ffi_closure_SYSV_inner (ffi_closure *, void **, void *) @@ -240,9 +354,42 @@ void FFI_HIDDEN ffi_closure_STDCALL (ffi_closure *) __attribute__ ((regparm(1))); #endif +#ifdef X86_WIN64 +void FFI_HIDDEN ffi_closure_win64 (ffi_closure *); +#endif /* This function is jumped to by the trampoline */ +#ifdef X86_WIN64 +void * FFI_HIDDEN +ffi_closure_win64_inner (ffi_closure *closure, void *args) { + ffi_cif *cif; + void **arg_area; + void *result; + void *resp = &result; + + cif = closure->cif; + arg_area = (void**) alloca (cif->nargs * sizeof (void*)); + + /* this call will initialize ARG_AREA, such that each + * element in that array points to the corresponding + * value on the stack; and if the function returns + * a structure, it will change RESP to point to the + * structure return address. */ + + ffi_prep_incoming_args_SYSV(args, &resp, arg_area, cif); + + (closure->fun) (cif, resp, arg_area, closure->user_data); + + /* The result is returned in rax. This does the right thing for + result types except for floats; we have to 'mov xmm0, rax' in the + caller to correct this. + TODO: structure sizes of 3 5 6 7 are returned by reference, too!!! + */ + return cif->rtype->size > sizeof(void *) ? resp : *(void **)resp; +} + +#else unsigned int FFI_HIDDEN ffi_closure_SYSV_inner (closure, respp, args) ffi_closure *closure; @@ -259,7 +406,7 @@ /* this call will initialize ARG_AREA, 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 RESP to point to the + * a structure, it will change RESP to point to the * structure return address. */ ffi_prep_incoming_args_SYSV(args, respp, arg_area, cif); @@ -268,10 +415,11 @@ return cif->flags; } +#endif /* !X86_WIN64 */ static void ffi_prep_incoming_args_SYSV(char *stack, void **rvalue, void **avalue, - ffi_cif *cif) + ffi_cif *cif) { register unsigned int i; register void **p_argv; @@ -280,10 +428,20 @@ argp = stack; +#ifdef X86_WIN64 + if (cif->rtype->size > sizeof(ffi_arg) + || (cif->flags == FFI_TYPE_STRUCT + && (cif->rtype->size != 1 && cif->rtype->size != 2 + && cif->rtype->size != 4 && cif->rtype->size != 8))) { + *rvalue = *(void **) argp; + argp += sizeof(void *); + } +#else if ( cif->flags == FFI_TYPE_STRUCT ) { *rvalue = *(void **) argp; - argp += 4; + argp += sizeof(void *); } +#endif p_argv = avalue; @@ -292,30 +450,65 @@ size_t z; /* Align if necessary */ - if ((sizeof(int) - 1) & (unsigned) argp) { - argp = (char *) ALIGN(argp, sizeof(int)); + if ((sizeof(void*) - 1) & (size_t) argp) { + argp = (char *) ALIGN(argp, sizeof(void*)); } - z = (*p_arg)->size; - - /* because we're little endian, this is what it turns into. */ - - *p_argv = (void*) argp; - +#ifdef X86_WIN64 + if ((*p_arg)->size > sizeof(ffi_arg) + || ((*p_arg)->type == FFI_TYPE_STRUCT + && ((*p_arg)->size != 1 && (*p_arg)->size != 2 + && (*p_arg)->size != 4 && (*p_arg)->size != 8))) + { + z = sizeof(void *); + *p_argv = *(void **)argp; + } + else +#endif + { + z = (*p_arg)->size; + + /* because we're little endian, this is what it turns into. */ + + *p_argv = (void*) argp; + } + p_argv++; +#ifdef X86_WIN64 + argp += (z + sizeof(void*) - 1) & ~(sizeof(void*) - 1); +#else argp += z; +#endif } return; } +#define FFI_INIT_TRAMPOLINE_WIN64(TRAMP,FUN,CTX,MASK) \ +{ unsigned char *__tramp = (unsigned char*)(TRAMP); \ + void* __fun = (void*)(FUN); \ + void* __ctx = (void*)(CTX); \ + *(unsigned char*) &__tramp[0] = 0x41; \ + *(unsigned char*) &__tramp[1] = 0xbb; \ + *(unsigned int*) &__tramp[2] = MASK; /* mov $mask, %r11 */ \ + *(unsigned char*) &__tramp[6] = 0x48; \ + *(unsigned char*) &__tramp[7] = 0xb8; \ + *(void**) &__tramp[8] = __ctx; /* mov __ctx, %rax */ \ + *(unsigned char *) &__tramp[16] = 0x49; \ + *(unsigned char *) &__tramp[17] = 0xba; \ + *(void**) &__tramp[18] = __fun; /* mov __fun, %r10 */ \ + *(unsigned char *) &__tramp[26] = 0x41; \ + *(unsigned char *) &__tramp[27] = 0xff; \ + *(unsigned char *) &__tramp[28] = 0xe2; /* jmp %r10 */ \ + } + /* How to make a trampoline. Derived from gcc/config/i386/i386.c. */ #define FFI_INIT_TRAMPOLINE(TRAMP,FUN,CTX) \ ({ unsigned char *__tramp = (unsigned char*)(TRAMP); \ unsigned int __fun = (unsigned int)(FUN); \ unsigned int __ctx = (unsigned int)(CTX); \ - unsigned int __dis = __fun - (__ctx + 10); \ + unsigned int __dis = __fun - (__ctx + 10); \ *(unsigned char*) &__tramp[0] = 0xb8; \ *(unsigned int*) &__tramp[1] = __ctx; /* movl __ctx, %eax */ \ *(unsigned char *) &__tramp[5] = 0xe9; \ @@ -340,11 +533,23 @@ ffi_status ffi_prep_closure_loc (ffi_closure* closure, - ffi_cif* cif, - void (*fun)(ffi_cif*,void*,void**,void*), - void *user_data, - void *codeloc) + ffi_cif* cif, + void (*fun)(ffi_cif*,void*,void**,void*), + void *user_data, + void *codeloc) { +#ifdef X86_WIN64 +#define ISFLOAT(IDX) (cif->arg_types[IDX]->type == FFI_TYPE_FLOAT || cif->arg_types[IDX]->type == FFI_TYPE_DOUBLE) +#define FLAG(IDX) (cif->nargs>(IDX)&&ISFLOAT(IDX)?(1<<(IDX)):0) + if (cif->abi == FFI_WIN64) + { + int mask = FLAG(0)|FLAG(1)|FLAG(2)|FLAG(3); + FFI_INIT_TRAMPOLINE_WIN64 (&closure->tramp[0], + &ffi_closure_win64, + codeloc, mask); + /* make sure we can execute here */ + } +#else if (cif->abi == FFI_SYSV) { FFI_INIT_TRAMPOLINE (&closure->tramp[0], @@ -358,7 +563,8 @@ &ffi_closure_STDCALL, (void*)codeloc, cif->bytes); } -#endif +#endif /* X86_WIN32 */ +#endif /* !X86_WIN64 */ else { return FFI_BAD_ABI; @@ -377,10 +583,10 @@ ffi_status ffi_prep_raw_closure_loc (ffi_raw_closure* closure, - ffi_cif* cif, - void (*fun)(ffi_cif*,void*,ffi_raw*,void*), - void *user_data, - void *codeloc) + ffi_cif* cif, + void (*fun)(ffi_cif*,void*,ffi_raw*,void*), + void *user_data, + void *codeloc) { int i; @@ -401,7 +607,7 @@ FFI_INIT_TRAMPOLINE (&closure->tramp[0], &ffi_closure_raw_SYSV, - codeloc); + codeloc); closure->cif = cif; closure->user_data = user_data; @@ -423,12 +629,12 @@ extern void ffi_call_SYSV(void (*)(char *, extended_cif *), extended_cif *, unsigned, - unsigned, unsigned *, void (*fn)(void)); + unsigned, unsigned *, void (*fn)(void)); #ifdef X86_WIN32 extern void ffi_call_STDCALL(void (*)(char *, extended_cif *), extended_cif *, unsigned, - unsigned, unsigned *, void (*fn)(void)); + unsigned, unsigned *, void (*fn)(void)); #endif /* X86_WIN32 */ void @@ -440,8 +646,8 @@ 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 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)) @@ -456,12 +662,12 @@ { case FFI_SYSV: ffi_call_SYSV(ffi_prep_args_raw, &ecif, cif->bytes, cif->flags, - ecif.rvalue, fn); + ecif.rvalue, fn); break; #ifdef X86_WIN32 case FFI_STDCALL: ffi_call_STDCALL(ffi_prep_args_raw, &ecif, cif->bytes, cif->flags, - ecif.rvalue, fn); + ecif.rvalue, fn); break; #endif /* X86_WIN32 */ default: @@ -472,4 +678,5 @@ #endif -#endif /* __x86_64__ */ +#endif /* !__x86_64__ || X86_WIN64 */ + Modified: python/trunk/Modules/_ctypes/libffi/src/x86/ffi64.c ============================================================================== --- python/trunk/Modules/_ctypes/libffi/src/x86/ffi64.c (original) +++ python/trunk/Modules/_ctypes/libffi/src/x86/ffi64.c Mon Mar 15 01:02:36 2010 @@ -1,6 +1,6 @@ /* ----------------------------------------------------------------------- - ffi.c - Copyright (c) 2002, 2007 Bo Thorsen - Copyright (c) 2008 Red Hat, Inc. + ffi64.c - Copyright (c) 2002, 2007 Bo Thorsen + Copyright (c) 2008 Red Hat, Inc. x86-64 Foreign Function Interface @@ -145,13 +145,35 @@ case FFI_TYPE_UINT64: case FFI_TYPE_SINT64: case FFI_TYPE_POINTER: - if (byte_offset + type->size <= 4) - classes[0] = X86_64_INTEGERSI_CLASS; - else - classes[0] = X86_64_INTEGER_CLASS; - return 1; + { + int size = byte_offset + type->size; + + if (size <= 4) + { + classes[0] = X86_64_INTEGERSI_CLASS; + return 1; + } + else if (size <= 8) + { + classes[0] = X86_64_INTEGER_CLASS; + return 1; + } + else if (size <= 12) + { + classes[0] = X86_64_INTEGER_CLASS; + classes[1] = X86_64_INTEGERSI_CLASS; + return 2; + } + else if (size <= 16) + { + classes[0] = classes[1] = X86_64_INTEGERSI_CLASS; + return 2; + } + else + FFI_ASSERT (0); + } case FFI_TYPE_FLOAT: - if (byte_offset == 0) + if (!(byte_offset % 8)) classes[0] = X86_64_SSESF_CLASS; else classes[0] = X86_64_SSE_CLASS; @@ -171,13 +193,21 @@ int i; enum x86_64_reg_class subclasses[MAX_CLASSES]; - /* If the struct is larger than 16 bytes, pass it on the stack. */ - if (type->size > 16) + /* If the struct is larger than 32 bytes, pass it on the stack. */ + if (type->size > 32) return 0; for (i = 0; i < words; i++) classes[i] = X86_64_NO_CLASS; + /* Zero sized arrays or structures are NO_CLASS. We return 0 to + signalize memory class, so handle it as special case. */ + if (!words) + { + classes[0] = X86_64_NO_CLASS; + return 1; + } + /* Merge the fields of structure. */ for (ptr = type->elements; *ptr != NULL; ptr++) { @@ -198,6 +228,20 @@ byte_offset += (*ptr)->size; } + if (words > 2) + { + /* When size > 16 bytes, if the first one isn't + X86_64_SSE_CLASS or any other ones aren't + X86_64_SSEUP_CLASS, everything should be passed in + memory. */ + if (classes[0] != X86_64_SSE_CLASS) + return 0; + + for (i = 1; i < words; i++) + if (classes[i] != X86_64_SSEUP_CLASS) + return 0; + } + /* Final merger cleanup. */ for (i = 0; i < words; i++) { @@ -207,15 +251,25 @@ return 0; /* The X86_64_SSEUP_CLASS should be always preceded by - X86_64_SSE_CLASS. */ + X86_64_SSE_CLASS or X86_64_SSEUP_CLASS. */ if (classes[i] == X86_64_SSEUP_CLASS - && (i == 0 || classes[i - 1] != X86_64_SSE_CLASS)) - classes[i] = X86_64_SSE_CLASS; + && classes[i - 1] != X86_64_SSE_CLASS + && classes[i - 1] != X86_64_SSEUP_CLASS) + { + /* The first one should never be X86_64_SSEUP_CLASS. */ + FFI_ASSERT (i != 0); + classes[i] = X86_64_SSE_CLASS; + } - /* X86_64_X87UP_CLASS should be preceded by X86_64_X87_CLASS. */ + /* If X86_64_X87UP_CLASS isn't preceded by X86_64_X87_CLASS, + everything should be passed in memory. */ if (classes[i] == X86_64_X87UP_CLASS - && (i == 0 || classes[i - 1] != X86_64_X87_CLASS)) - classes[i] = X86_64_SSE_CLASS; + && (classes[i - 1] != X86_64_X87_CLASS)) + { + /* The first one should never be X86_64_X87UP_CLASS. */ + FFI_ASSERT (i != 0); + return 0; + } } return words; } @@ -528,10 +582,10 @@ argp += arg_types[i]->size; } /* If the argument is in a single register, or two consecutive - registers, then we can use that address directly. */ + integer registers, then we can use that address directly. */ else if (n == 1 - || (n == 2 - && SSE_CLASS_P (classes[0]) == SSE_CLASS_P (classes[1]))) + || (n == 2 && !(SSE_CLASS_P (classes[0]) + || SSE_CLASS_P (classes[1])))) { /* The argument is in a single register. */ if (SSE_CLASS_P (classes[0])) Modified: python/trunk/Modules/_ctypes/libffi/src/x86/ffitarget.h ============================================================================== --- python/trunk/Modules/_ctypes/libffi/src/x86/ffitarget.h (original) +++ python/trunk/Modules/_ctypes/libffi/src/x86/ffitarget.h Mon Mar 15 01:02:36 2010 @@ -36,11 +36,26 @@ #define X86 #endif +#ifdef X86_WIN64 +#define FFI_SIZEOF_ARG 8 +#define USE_BUILTIN_FFS 0 // not yet implemented in mingw-64 +#endif + /* ---- Generic type definitions ----------------------------------------- */ #ifndef LIBFFI_ASM +#ifdef X86_WIN64 +#ifdef _MSC_VER +typedef unsigned __int64 ffi_arg; +typedef __int64 ffi_sarg; +#else +typedef unsigned long long ffi_arg; +typedef long long ffi_sarg; +#endif +#else typedef unsigned long ffi_arg; typedef signed long ffi_sarg; +#endif typedef enum ffi_abi { FFI_FIRST_ABI = 0, @@ -53,6 +68,11 @@ FFI_DEFAULT_ABI = FFI_SYSV, #endif +#ifdef X86_WIN64 + FFI_WIN64, + FFI_DEFAULT_ABI = FFI_WIN64, +#else + /* ---- Intel x86 and AMD x86-64 - */ #if !defined(X86_WIN32) && (defined(__i386__) || defined(__x86_64__)) FFI_SYSV, @@ -63,6 +83,7 @@ FFI_DEFAULT_ABI = FFI_UNIX64, #endif #endif +#endif /* X86_WIN64 */ FFI_LAST_ABI = FFI_DEFAULT_ABI + 1 } ffi_abi; @@ -73,6 +94,7 @@ #define FFI_CLOSURES 1 #define FFI_TYPE_SMALL_STRUCT_1B (FFI_TYPE_LAST + 1) #define FFI_TYPE_SMALL_STRUCT_2B (FFI_TYPE_LAST + 2) +#define FFI_TYPE_SMALL_STRUCT_4B (FFI_TYPE_LAST + 3) #if defined (X86_64) || (defined (__x86_64__) && defined (X86_DARWIN)) #define FFI_TRAMPOLINE_SIZE 24 @@ -81,10 +103,18 @@ #ifdef X86_WIN32 #define FFI_TRAMPOLINE_SIZE 13 #else +#ifdef X86_WIN64 +#define FFI_TRAMPOLINE_SIZE 29 +#define FFI_NATIVE_RAW_API 0 +#define FFI_NO_RAW_API 1 +#else #define FFI_TRAMPOLINE_SIZE 10 #endif +#endif +#ifndef X86_WIN64 #define FFI_NATIVE_RAW_API 1 /* x86 has native raw api support */ #endif +#endif #endif Modified: python/trunk/Modules/_ctypes/libffi/src/x86/sysv.S ============================================================================== --- python/trunk/Modules/_ctypes/libffi/src/x86/sysv.S (original) +++ python/trunk/Modules/_ctypes/libffi/src/x86/sysv.S Mon Mar 15 01:02:36 2010 @@ -242,9 +242,20 @@ #if !FFI_NO_RAW_API +/* Precalculate for e.g. the Solaris 10/x86 assembler. */ +#if FFI_TRAMPOLINE_SIZE == 10 +#define RAW_CLOSURE_CIF_OFFSET 12 +#define RAW_CLOSURE_FUN_OFFSET 16 +#define RAW_CLOSURE_USER_DATA_OFFSET 20 +#elif FFI_TRAMPOLINE_SIZE == 24 +#define RAW_CLOSURE_CIF_OFFSET 24 +#define RAW_CLOSURE_FUN_OFFSET 28 +#define RAW_CLOSURE_USER_DATA_OFFSET 32 +#else #define RAW_CLOSURE_CIF_OFFSET ((FFI_TRAMPOLINE_SIZE + 3) & ~3) #define RAW_CLOSURE_FUN_OFFSET (RAW_CLOSURE_CIF_OFFSET + 4) #define RAW_CLOSURE_USER_DATA_OFFSET (RAW_CLOSURE_FUN_OFFSET + 4) +#endif #define CIF_FLAGS_OFFSET 20 .align 4 @@ -343,10 +354,12 @@ .long .LEFDE1-.LASFDE1 /* FDE Length */ .LASFDE1: .long .LASFDE1-.Lframe1 /* FDE CIE offset */ -#ifdef __PIC__ +#if defined __PIC__ && defined HAVE_AS_X86_PCREL .long .LFB1-. /* FDE initial location */ +#elif defined __PIC__ + .long .LFB1 at rel #else - .long .LFB1 /* FDE initial location */ + .long .LFB1 #endif .long .LFE1-.LFB1 /* FDE address range */ #ifdef __PIC__ @@ -368,8 +381,10 @@ .long .LEFDE2-.LASFDE2 /* FDE Length */ .LASFDE2: .long .LASFDE2-.Lframe1 /* FDE CIE offset */ -#ifdef __PIC__ +#if defined __PIC__ && defined HAVE_AS_X86_PCREL .long .LFB2-. /* FDE initial location */ +#elif defined __PIC__ + .long .LFB2 at rel #else .long .LFB2 #endif @@ -402,8 +417,10 @@ .long .LEFDE3-.LASFDE3 /* FDE Length */ .LASFDE3: .long .LASFDE3-.Lframe1 /* FDE CIE offset */ -#ifdef __PIC__ +#if defined __PIC__ && defined HAVE_AS_X86_PCREL .long .LFB3-. /* FDE initial location */ +#elif defined __PIC__ + .long .LFB3 at rel #else .long .LFB3 #endif Modified: python/trunk/Modules/_ctypes/libffi/src/x86/unix64.S ============================================================================== --- python/trunk/Modules/_ctypes/libffi/src/x86/unix64.S (original) +++ python/trunk/Modules/_ctypes/libffi/src/x86/unix64.S Mon Mar 15 01:02:36 2010 @@ -89,7 +89,6 @@ addq %r11, %r10 jmp *%r10 - .section .rodata .Lstore_table: .long .Lst_void-.Lstore_table /* FFI_TYPE_VOID */ .long .Lst_sint32-.Lstore_table /* FFI_TYPE_INT */ @@ -107,7 +106,6 @@ .long .Lst_struct-.Lstore_table /* FFI_TYPE_STRUCT */ .long .Lst_int64-.Lstore_table /* FFI_TYPE_POINTER */ - .text .align 2 .Lst_void: ret @@ -240,7 +238,6 @@ addq %r11, %r10 jmp *%r10 - .section .rodata .Lload_table: .long .Lld_void-.Lload_table /* FFI_TYPE_VOID */ .long .Lld_int32-.Lload_table /* FFI_TYPE_INT */ @@ -258,7 +255,6 @@ .long .Lld_struct-.Lload_table /* FFI_TYPE_STRUCT */ .long .Lld_int64-.Lload_table /* FFI_TYPE_POINTER */ - .text .align 2 .Lld_void: ret @@ -351,7 +347,11 @@ .long .LEFDE1-.LASFDE1 /* FDE Length */ .LASFDE1: .long .LASFDE1-.Lframe1 /* FDE CIE offset */ +#if HAVE_AS_X86_PCREL .long .LUW0-. /* FDE initial location */ +#else + .long .LUW0 at rel +#endif .long .LUW4-.LUW0 /* FDE address range */ .uleb128 0x0 /* Augmentation size */ @@ -389,7 +389,11 @@ .long .LEFDE3-.LASFDE3 /* FDE Length */ .LASFDE3: .long .LASFDE3-.Lframe1 /* FDE CIE offset */ +#if HAVE_AS_X86_PCREL .long .LUW5-. /* FDE initial location */ +#else + .long .LUW5 at rel +#endif .long .LUW9-.LUW5 /* FDE address range */ .uleb128 0x0 /* Augmentation size */ Modified: python/trunk/Modules/_ctypes/libffi/src/x86/win32.S ============================================================================== --- python/trunk/Modules/_ctypes/libffi/src/x86/win32.S (original) +++ python/trunk/Modules/_ctypes/libffi/src/x86/win32.S Mon Mar 15 01:02:36 2010 @@ -1,5 +1,5 @@ /* ----------------------------------------------------------------------- - win32.S - Copyright (c) 1996, 1998, 2001, 2002 Red Hat, Inc. + win32.S - Copyright (c) 1996, 1998, 2001, 2002, 2009 Red Hat, Inc. Copyright (c) 2001 John Beniton Copyright (c) 2002 Ranjit Mathew @@ -17,32 +17,33 @@ 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 THE AUTHORS OR COPYRIGHT HOLDERS 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 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 THE AUTHORS OR COPYRIGHT + HOLDERS 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 -.text - -.globl ffi_prep_args + .text # This assumes we are using gas. .balign 16 -.globl _ffi_call_SYSV - + .globl _ffi_call_SYSV + .def _ffi_call_SYSV; .scl 2; .type 32; .endef _ffi_call_SYSV: +.LFB1: pushl %ebp +.LCFI0: movl %esp,%ebp - +.LCFI1: # Make room for all of the new args. movl 16(%ebp),%ecx subl %ecx,%esp @@ -62,100 +63,137 @@ call *28(%ebp) - # Remove the space we pushed for the args - movl 16(%ebp),%ecx - addl %ecx,%esp - # Load %ecx with the return type code movl 20(%ebp),%ecx # If the return value pointer is NULL, assume no return value. cmpl $0,24(%ebp) - jne retint + jne 0f # Even if there is no space for the return value, we are # obliged to handle floating-point values. cmpl $FFI_TYPE_FLOAT,%ecx - jne noretval + jne .Lnoretval fstp %st(0) - jmp epilogue - -retint: - cmpl $FFI_TYPE_INT,%ecx - jne retfloat + jmp .Lepilogue + +0: + call 1f + # Do not insert anything here between the call and the jump table. +.Lstore_table: + .long .Lnoretval /* FFI_TYPE_VOID */ + .long .Lretint /* FFI_TYPE_INT */ + .long .Lretfloat /* FFI_TYPE_FLOAT */ + .long .Lretdouble /* FFI_TYPE_DOUBLE */ + .long .Lretlongdouble /* FFI_TYPE_LONGDOUBLE */ + .long .Lretuint8 /* FFI_TYPE_UINT8 */ + .long .Lretsint8 /* FFI_TYPE_SINT8 */ + .long .Lretuint16 /* FFI_TYPE_UINT16 */ + .long .Lretsint16 /* FFI_TYPE_SINT16 */ + .long .Lretint /* FFI_TYPE_UINT32 */ + .long .Lretint /* FFI_TYPE_SINT32 */ + .long .Lretint64 /* FFI_TYPE_UINT64 */ + .long .Lretint64 /* FFI_TYPE_SINT64 */ + .long .Lretstruct /* FFI_TYPE_STRUCT */ + .long .Lretint /* FFI_TYPE_POINTER */ + .long .Lretstruct1b /* FFI_TYPE_SMALL_STRUCT_1B */ + .long .Lretstruct2b /* FFI_TYPE_SMALL_STRUCT_2B */ + .long .Lretstruct4b /* FFI_TYPE_SMALL_STRUCT_4B */ +1: + add %ecx, %ecx + add %ecx, %ecx + add (%esp),%ecx + add $4, %esp + jmp *(%ecx) + + /* Sign/zero extend as appropriate. */ +.Lretsint8: + movsbl %al, %eax + jmp .Lretint + +.Lretsint16: + movswl %ax, %eax + jmp .Lretint + +.Lretuint8: + movzbl %al, %eax + jmp .Lretint + +.Lretuint16: + movzwl %ax, %eax + jmp .Lretint + +.Lretint: # Load %ecx with the pointer to storage for the return value movl 24(%ebp),%ecx movl %eax,0(%ecx) - jmp epilogue + jmp .Lepilogue -retfloat: - cmpl $FFI_TYPE_FLOAT,%ecx - jne retdouble +.Lretfloat: # Load %ecx with the pointer to storage for the return value movl 24(%ebp),%ecx fstps (%ecx) - jmp epilogue + jmp .Lepilogue -retdouble: - cmpl $FFI_TYPE_DOUBLE,%ecx - jne retlongdouble +.Lretdouble: # Load %ecx with the pointer to storage for the return value movl 24(%ebp),%ecx fstpl (%ecx) - jmp epilogue + jmp .Lepilogue -retlongdouble: - cmpl $FFI_TYPE_LONGDOUBLE,%ecx - jne retint64 +.Lretlongdouble: # Load %ecx with the pointer to storage for the return value movl 24(%ebp),%ecx fstpt (%ecx) - jmp epilogue + jmp .Lepilogue -retint64: - cmpl $FFI_TYPE_SINT64,%ecx - jne retstruct1b +.Lretint64: # Load %ecx with the pointer to storage for the return value movl 24(%ebp),%ecx movl %eax,0(%ecx) movl %edx,4(%ecx) - -retstruct1b: - cmpl $FFI_TYPE_SINT8,%ecx - jne retstruct2b + jmp .Lepilogue + +.Lretstruct1b: # Load %ecx with the pointer to storage for the return value movl 24(%ebp),%ecx movb %al,0(%ecx) - jmp epilogue + jmp .Lepilogue -retstruct2b: - cmpl $FFI_TYPE_SINT16,%ecx - jne retstruct +.Lretstruct2b: # Load %ecx with the pointer to storage for the return value movl 24(%ebp),%ecx movw %ax,0(%ecx) - jmp epilogue - -retstruct: + jmp .Lepilogue + +.Lretstruct4b: + # Load %ecx with the pointer to storage for the return value + movl 24(%ebp),%ecx + movl %eax,0(%ecx) + jmp .Lepilogue + +.Lretstruct: # Nothing to do! -noretval: -epilogue: +.Lnoretval: +.Lepilogue: movl %ebp,%esp popl %ebp ret - .ffi_call_SYSV_end: +.LFE1: # This assumes we are using gas. .balign 16 -.globl _ffi_call_STDCALL - + .globl _ffi_call_STDCALL + .def _ffi_call_STDCALL; .scl 2; .type 32; .endef _ffi_call_STDCALL: +.LFB2: pushl %ebp +.LCFI2: movl %esp,%ebp - +.LCFI3: # Make room for all of the new args. movl 16(%ebp),%ecx subl %ecx,%esp @@ -182,103 +220,133 @@ # If the return value pointer is NULL, assume no return value. cmpl $0,24(%ebp) - jne sc_retint + jne 0f # Even if there is no space for the return value, we are # obliged to handle floating-point values. cmpl $FFI_TYPE_FLOAT,%ecx - jne sc_noretval + jne .Lsc_noretval fstp %st(0) - jmp sc_epilogue + jmp .Lsc_epilogue + +0: + call 1f + # Do not insert anything here between the call and the jump table. +.Lsc_store_table: + .long .Lsc_noretval /* FFI_TYPE_VOID */ + .long .Lsc_retint /* FFI_TYPE_INT */ + .long .Lsc_retfloat /* FFI_TYPE_FLOAT */ + .long .Lsc_retdouble /* FFI_TYPE_DOUBLE */ + .long .Lsc_retlongdouble /* FFI_TYPE_LONGDOUBLE */ + .long .Lsc_retuint8 /* FFI_TYPE_UINT8 */ + .long .Lsc_retsint8 /* FFI_TYPE_SINT8 */ + .long .Lsc_retuint16 /* FFI_TYPE_UINT16 */ + .long .Lsc_retsint16 /* FFI_TYPE_SINT16 */ + .long .Lsc_retint /* FFI_TYPE_UINT32 */ + .long .Lsc_retint /* FFI_TYPE_SINT32 */ + .long .Lsc_retint64 /* FFI_TYPE_UINT64 */ + .long .Lsc_retint64 /* FFI_TYPE_SINT64 */ + .long .Lsc_retstruct /* FFI_TYPE_STRUCT */ + .long .Lsc_retint /* FFI_TYPE_POINTER */ + .long .Lsc_retstruct1b /* FFI_TYPE_SMALL_STRUCT_1B */ + .long .Lsc_retstruct2b /* FFI_TYPE_SMALL_STRUCT_2B */ + .long .Lsc_retstruct4b /* FFI_TYPE_SMALL_STRUCT_4B */ + +1: + add %ecx, %ecx + add %ecx, %ecx + add (%esp),%ecx + add $4, %esp + jmp *(%ecx) + + /* Sign/zero extend as appropriate. */ +.Lsc_retsint8: + movsbl %al, %eax + jmp .Lsc_retint + +.Lsc_retsint16: + movswl %ax, %eax + jmp .Lsc_retint + +.Lsc_retuint8: + movzbl %al, %eax + jmp .Lsc_retint + +.Lsc_retuint16: + movzwl %ax, %eax + jmp .Lsc_retint -sc_retint: - cmpl $FFI_TYPE_INT,%ecx - jne sc_retfloat +.Lsc_retint: # Load %ecx with the pointer to storage for the return value movl 24(%ebp),%ecx movl %eax,0(%ecx) - jmp sc_epilogue + jmp .Lsc_epilogue -sc_retfloat: - cmpl $FFI_TYPE_FLOAT,%ecx - jne sc_retdouble +.Lsc_retfloat: # Load %ecx with the pointer to storage for the return value movl 24(%ebp),%ecx fstps (%ecx) - jmp sc_epilogue + jmp .Lsc_epilogue -sc_retdouble: - cmpl $FFI_TYPE_DOUBLE,%ecx - jne sc_retlongdouble +.Lsc_retdouble: # Load %ecx with the pointer to storage for the return value movl 24(%ebp),%ecx fstpl (%ecx) - jmp sc_epilogue + jmp .Lsc_epilogue -sc_retlongdouble: - cmpl $FFI_TYPE_LONGDOUBLE,%ecx - jne sc_retint64 +.Lsc_retlongdouble: # Load %ecx with the pointer to storage for the return value movl 24(%ebp),%ecx fstpt (%ecx) - jmp sc_epilogue + jmp .Lsc_epilogue -sc_retint64: - cmpl $FFI_TYPE_SINT64,%ecx - jne sc_retstruct1b +.Lsc_retint64: # Load %ecx with the pointer to storage for the return value movl 24(%ebp),%ecx movl %eax,0(%ecx) movl %edx,4(%ecx) + jmp .Lsc_epilogue -sc_retstruct1b: - cmpl $FFI_TYPE_SINT8,%ecx - jne sc_retstruct2b +.Lsc_retstruct1b: # Load %ecx with the pointer to storage for the return value movl 24(%ebp),%ecx movb %al,0(%ecx) - jmp sc_epilogue + jmp .Lsc_epilogue -sc_retstruct2b: - cmpl $FFI_TYPE_SINT16,%ecx - jne sc_retstruct +.Lsc_retstruct2b: # Load %ecx with the pointer to storage for the return value movl 24(%ebp),%ecx movw %ax,0(%ecx) - jmp sc_epilogue + jmp .Lsc_epilogue + +.Lsc_retstruct4b: + # Load %ecx with the pointer to storage for the return value + movl 24(%ebp),%ecx + movl %eax,0(%ecx) + jmp .Lsc_epilogue -sc_retstruct: +.Lsc_retstruct: # Nothing to do! -sc_noretval: -sc_epilogue: +.Lsc_noretval: +.Lsc_epilogue: movl %ebp,%esp popl %ebp ret - .ffi_call_STDCALL_end: +.LFE2: - .globl _ffi_closure_STDCALL -_ffi_closure_STDCALL: - pushl %ebp - movl %esp, %ebp - subl $40, %esp - leal -24(%ebp), %edx - movl %edx, -12(%ebp) /* resp */ - leal 12(%ebp), %edx /* account for stub return address on stack */ - movl %edx, 4(%esp) /* args */ - leal -12(%ebp), %edx - movl %edx, (%esp) /* &resp */ - call _ffi_closure_SYSV_inner - movl -12(%ebp), %ecx - jmp .Lcls_return_result -.ffi_closure_STDCALL_end: - - .globl _ffi_closure_SYSV + # This assumes we are using gas. + .balign 16 + .globl _ffi_closure_SYSV + .def _ffi_closure_SYSV; .scl 2; .type 32; .endef _ffi_closure_SYSV: +.LFB3: pushl %ebp +.LCFI4: movl %esp, %ebp +.LCFI5: subl $40, %esp leal -24(%ebp), %edx movl %edx, -12(%ebp) /* resp */ @@ -288,48 +356,100 @@ movl %edx, (%esp) /* &resp */ call _ffi_closure_SYSV_inner movl -12(%ebp), %ecx -.Lcls_return_result: - cmpl $FFI_TYPE_INT, %eax - je .Lcls_retint - cmpl $FFI_TYPE_FLOAT, %eax - je .Lcls_retfloat - cmpl $FFI_TYPE_DOUBLE, %eax - je .Lcls_retdouble - cmpl $FFI_TYPE_LONGDOUBLE, %eax - je .Lcls_retldouble - cmpl $FFI_TYPE_SINT64, %eax - je .Lcls_retllong - cmpl $FFI_TYPE_SINT8, %eax /* 1-byte struct */ - je .Lcls_retstruct1 - cmpl $FFI_TYPE_SINT16, %eax /* 2-bytes struct */ - je .Lcls_retstruct2 -.Lcls_epilogue: - movl %ebp, %esp - popl %ebp - ret + +0: + call 1f + # Do not insert anything here between the call and the jump table. +.Lcls_store_table: + .long .Lcls_noretval /* FFI_TYPE_VOID */ + .long .Lcls_retint /* FFI_TYPE_INT */ + .long .Lcls_retfloat /* FFI_TYPE_FLOAT */ + .long .Lcls_retdouble /* FFI_TYPE_DOUBLE */ + .long .Lcls_retldouble /* FFI_TYPE_LONGDOUBLE */ + .long .Lcls_retuint8 /* FFI_TYPE_UINT8 */ + .long .Lcls_retsint8 /* FFI_TYPE_SINT8 */ + .long .Lcls_retuint16 /* FFI_TYPE_UINT16 */ + .long .Lcls_retsint16 /* FFI_TYPE_SINT16 */ + .long .Lcls_retint /* FFI_TYPE_UINT32 */ + .long .Lcls_retint /* FFI_TYPE_SINT32 */ + .long .Lcls_retllong /* FFI_TYPE_UINT64 */ + .long .Lcls_retllong /* FFI_TYPE_SINT64 */ + .long .Lcls_retstruct /* FFI_TYPE_STRUCT */ + .long .Lcls_retint /* FFI_TYPE_POINTER */ + .long .Lcls_retstruct1 /* FFI_TYPE_SMALL_STRUCT_1B */ + .long .Lcls_retstruct2 /* FFI_TYPE_SMALL_STRUCT_2B */ + .long .Lcls_retstruct4 /* FFI_TYPE_SMALL_STRUCT_4B */ + +1: + add %eax, %eax + add %eax, %eax + add (%esp),%eax + add $4, %esp + jmp *(%eax) + + /* Sign/zero extend as appropriate. */ +.Lcls_retsint8: + movsbl (%ecx), %eax + jmp .Lcls_epilogue + +.Lcls_retsint16: + movswl (%ecx), %eax + jmp .Lcls_epilogue + +.Lcls_retuint8: + movzbl (%ecx), %eax + jmp .Lcls_epilogue + +.Lcls_retuint16: + movzwl (%ecx), %eax + jmp .Lcls_epilogue + .Lcls_retint: movl (%ecx), %eax jmp .Lcls_epilogue + .Lcls_retfloat: flds (%ecx) jmp .Lcls_epilogue + .Lcls_retdouble: fldl (%ecx) jmp .Lcls_epilogue + .Lcls_retldouble: fldt (%ecx) jmp .Lcls_epilogue + .Lcls_retllong: movl (%ecx), %eax movl 4(%ecx), %edx jmp .Lcls_epilogue + .Lcls_retstruct1: movsbl (%ecx), %eax jmp .Lcls_epilogue + .Lcls_retstruct2: movswl (%ecx), %eax jmp .Lcls_epilogue + +.Lcls_retstruct4: + movl (%ecx), %eax + jmp .Lcls_epilogue + +.Lcls_retstruct: + # Caller expects us to pop struct return value pointer hidden arg. + movl %ebp, %esp + popl %ebp + ret $0x4 + +.Lcls_noretval: +.Lcls_epilogue: + movl %ebp, %esp + popl %ebp + ret .ffi_closure_SYSV_end: +.LFE3: #if !FFI_NO_RAW_API @@ -338,12 +458,18 @@ #define RAW_CLOSURE_USER_DATA_OFFSET (RAW_CLOSURE_FUN_OFFSET + 4) #define CIF_FLAGS_OFFSET 20 - .balign 16 - .globl _ffi_closure_raw_SYSV + # This assumes we are using gas. + .balign 16 + .globl _ffi_closure_raw_SYSV + .def _ffi_closure_raw_SYSV; .scl 2; .type 32; .endef _ffi_closure_raw_SYSV: +.LFB4: pushl %ebp +.LCFI6: movl %esp, %ebp +.LCFI7: pushl %esi +.LCFI8: subl $36, %esp movl RAW_CLOSURE_CIF_OFFSET(%eax), %esi /* closure->cif */ movl RAW_CLOSURE_USER_DATA_OFFSET(%eax), %edx /* closure->user_data */ @@ -355,37 +481,397 @@ movl %esi, (%esp) /* cif */ call *RAW_CLOSURE_FUN_OFFSET(%eax) /* closure->fun */ movl CIF_FLAGS_OFFSET(%esi), %eax /* rtype */ - cmpl $FFI_TYPE_INT, %eax - je .Lrcls_retint - cmpl $FFI_TYPE_FLOAT, %eax - je .Lrcls_retfloat - cmpl $FFI_TYPE_DOUBLE, %eax - je .Lrcls_retdouble - cmpl $FFI_TYPE_LONGDOUBLE, %eax - je .Lrcls_retldouble - cmpl $FFI_TYPE_SINT64, %eax - je .Lrcls_retllong -.Lrcls_epilogue: - addl $36, %esp - popl %esi - popl %ebp - ret +0: + call 1f + # Do not insert anything here between the call and the jump table. +.Lrcls_store_table: + .long .Lrcls_noretval /* FFI_TYPE_VOID */ + .long .Lrcls_retint /* FFI_TYPE_INT */ + .long .Lrcls_retfloat /* FFI_TYPE_FLOAT */ + .long .Lrcls_retdouble /* FFI_TYPE_DOUBLE */ + .long .Lrcls_retldouble /* FFI_TYPE_LONGDOUBLE */ + .long .Lrcls_retuint8 /* FFI_TYPE_UINT8 */ + .long .Lrcls_retsint8 /* FFI_TYPE_SINT8 */ + .long .Lrcls_retuint16 /* FFI_TYPE_UINT16 */ + .long .Lrcls_retsint16 /* FFI_TYPE_SINT16 */ + .long .Lrcls_retint /* FFI_TYPE_UINT32 */ + .long .Lrcls_retint /* FFI_TYPE_SINT32 */ + .long .Lrcls_retllong /* FFI_TYPE_UINT64 */ + .long .Lrcls_retllong /* FFI_TYPE_SINT64 */ + .long .Lrcls_retstruct /* FFI_TYPE_STRUCT */ + .long .Lrcls_retint /* FFI_TYPE_POINTER */ + .long .Lrcls_retstruct1 /* FFI_TYPE_SMALL_STRUCT_1B */ + .long .Lrcls_retstruct2 /* FFI_TYPE_SMALL_STRUCT_2B */ + .long .Lrcls_retstruct4 /* FFI_TYPE_SMALL_STRUCT_4B */ +1: + add %eax, %eax + add %eax, %eax + add (%esp),%eax + add $4, %esp + jmp *(%eax) + + /* Sign/zero extend as appropriate. */ +.Lrcls_retsint8: + movsbl -24(%ebp), %eax + jmp .Lrcls_epilogue + +.Lrcls_retsint16: + movswl -24(%ebp), %eax + jmp .Lrcls_epilogue + +.Lrcls_retuint8: + movzbl -24(%ebp), %eax + jmp .Lrcls_epilogue + +.Lrcls_retuint16: + movzwl -24(%ebp), %eax + jmp .Lrcls_epilogue + .Lrcls_retint: movl -24(%ebp), %eax jmp .Lrcls_epilogue + .Lrcls_retfloat: flds -24(%ebp) jmp .Lrcls_epilogue + .Lrcls_retdouble: fldl -24(%ebp) jmp .Lrcls_epilogue + .Lrcls_retldouble: fldt -24(%ebp) jmp .Lrcls_epilogue + .Lrcls_retllong: movl -24(%ebp), %eax movl -20(%ebp), %edx jmp .Lrcls_epilogue + +.Lrcls_retstruct1: + movsbl -24(%ebp), %eax + jmp .Lrcls_epilogue + +.Lrcls_retstruct2: + movswl -24(%ebp), %eax + jmp .Lrcls_epilogue + +.Lrcls_retstruct4: + movl -24(%ebp), %eax + jmp .Lrcls_epilogue + +.Lrcls_retstruct: + # Nothing to do! + +.Lrcls_noretval: +.Lrcls_epilogue: + addl $36, %esp + popl %esi + popl %ebp + ret .ffi_closure_raw_SYSV_end: +.LFE4: + +#endif /* !FFI_NO_RAW_API */ + + # This assumes we are using gas. + .balign 16 + .globl _ffi_closure_STDCALL + .def _ffi_closure_STDCALL; .scl 2; .type 32; .endef +_ffi_closure_STDCALL: +.LFB5: + pushl %ebp +.LCFI9: + movl %esp, %ebp +.LCFI10: + subl $40, %esp + leal -24(%ebp), %edx + movl %edx, -12(%ebp) /* resp */ + leal 12(%ebp), %edx /* account for stub return address on stack */ + movl %edx, 4(%esp) /* args */ + leal -12(%ebp), %edx + movl %edx, (%esp) /* &resp */ + call _ffi_closure_SYSV_inner + movl -12(%ebp), %ecx +0: + call 1f + # Do not insert anything here between the call and the jump table. +.Lscls_store_table: + .long .Lscls_noretval /* FFI_TYPE_VOID */ + .long .Lscls_retint /* FFI_TYPE_INT */ + .long .Lscls_retfloat /* FFI_TYPE_FLOAT */ + .long .Lscls_retdouble /* FFI_TYPE_DOUBLE */ + .long .Lscls_retldouble /* FFI_TYPE_LONGDOUBLE */ + .long .Lscls_retuint8 /* FFI_TYPE_UINT8 */ + .long .Lscls_retsint8 /* FFI_TYPE_SINT8 */ + .long .Lscls_retuint16 /* FFI_TYPE_UINT16 */ + .long .Lscls_retsint16 /* FFI_TYPE_SINT16 */ + .long .Lscls_retint /* FFI_TYPE_UINT32 */ + .long .Lscls_retint /* FFI_TYPE_SINT32 */ + .long .Lscls_retllong /* FFI_TYPE_UINT64 */ + .long .Lscls_retllong /* FFI_TYPE_SINT64 */ + .long .Lscls_retstruct /* FFI_TYPE_STRUCT */ + .long .Lscls_retint /* FFI_TYPE_POINTER */ + .long .Lscls_retstruct1 /* FFI_TYPE_SMALL_STRUCT_1B */ + .long .Lscls_retstruct2 /* FFI_TYPE_SMALL_STRUCT_2B */ + .long .Lscls_retstruct4 /* FFI_TYPE_SMALL_STRUCT_4B */ +1: + add %eax, %eax + add %eax, %eax + add (%esp),%eax + add $4, %esp + jmp *(%eax) + + /* Sign/zero extend as appropriate. */ +.Lscls_retsint8: + movsbl (%ecx), %eax + jmp .Lscls_epilogue + +.Lscls_retsint16: + movswl (%ecx), %eax + jmp .Lscls_epilogue + +.Lscls_retuint8: + movzbl (%ecx), %eax + jmp .Lscls_epilogue +.Lscls_retuint16: + movzwl (%ecx), %eax + jmp .Lscls_epilogue + +.Lscls_retint: + movl (%ecx), %eax + jmp .Lscls_epilogue + +.Lscls_retfloat: + flds (%ecx) + jmp .Lscls_epilogue + +.Lscls_retdouble: + fldl (%ecx) + jmp .Lscls_epilogue + +.Lscls_retldouble: + fldt (%ecx) + jmp .Lscls_epilogue + +.Lscls_retllong: + movl (%ecx), %eax + movl 4(%ecx), %edx + jmp .Lscls_epilogue + +.Lscls_retstruct1: + movsbl (%ecx), %eax + jmp .Lscls_epilogue + +.Lscls_retstruct2: + movswl (%ecx), %eax + jmp .Lscls_epilogue + +.Lscls_retstruct4: + movl (%ecx), %eax + jmp .Lscls_epilogue + +.Lscls_retstruct: + # Nothing to do! + +.Lscls_noretval: +.Lscls_epilogue: + movl %ebp, %esp + popl %ebp + ret +.ffi_closure_STDCALL_end: +.LFE5: + + .section .eh_frame,"w" +.Lframe1: +.LSCIE1: + .long .LECIE1-.LASCIE1 /* Length of Common Information Entry */ +.LASCIE1: + .long 0x0 /* CIE Identifier Tag */ + .byte 0x1 /* CIE Version */ +#ifdef __PIC__ + .ascii "zR\0" /* CIE Augmentation */ +#else + .ascii "\0" /* CIE Augmentation */ +#endif + .byte 0x1 /* .uleb128 0x1; CIE Code Alignment Factor */ + .byte 0x7c /* .sleb128 -4; CIE Data Alignment Factor */ + .byte 0x8 /* CIE RA Column */ +#ifdef __PIC__ + .byte 0x1 /* .uleb128 0x1; Augmentation size */ + .byte 0x1b /* FDE Encoding (pcrel sdata4) */ +#endif + .byte 0xc /* DW_CFA_def_cfa CFA = r4 + 4 = 4(%esp) */ + .byte 0x4 /* .uleb128 0x4 */ + .byte 0x4 /* .uleb128 0x4 */ + .byte 0x88 /* DW_CFA_offset, column 0x8 %eip at CFA + 1 * -4 */ + .byte 0x1 /* .uleb128 0x1 */ + .align 4 +.LECIE1: + +.LSFDE1: + .long .LEFDE1-.LASFDE1 /* FDE Length */ +.LASFDE1: + .long .LASFDE1-.Lframe1 /* FDE CIE offset */ +#if defined __PIC__ && defined HAVE_AS_X86_PCREL + .long .LFB1-. /* FDE initial location */ +#else + .long .LFB1 +#endif + .long .LFE1-.LFB1 /* FDE address range */ +#ifdef __PIC__ + .byte 0x0 /* .uleb128 0x0; Augmentation size */ +#endif + /* DW_CFA_xxx CFI instructions go here. */ + + .byte 0x4 /* DW_CFA_advance_loc4 */ + .long .LCFI0-.LFB1 + .byte 0xe /* DW_CFA_def_cfa_offset CFA = r4 + 8 = 8(%esp) */ + .byte 0x8 /* .uleb128 0x8 */ + .byte 0x85 /* DW_CFA_offset, column 0x5 %ebp at CFA + 2 * -4 */ + .byte 0x2 /* .uleb128 0x2 */ + + .byte 0x4 /* DW_CFA_advance_loc4 */ + .long .LCFI1-.LCFI0 + .byte 0xd /* DW_CFA_def_cfa_register CFA = r5 = %ebp */ + .byte 0x5 /* .uleb128 0x5 */ + + /* End of DW_CFA_xxx CFI instructions. */ + .align 4 +.LEFDE1: + + +.LSFDE2: + .long .LEFDE2-.LASFDE2 /* FDE Length */ +.LASFDE2: + .long .LASFDE2-.Lframe1 /* FDE CIE offset */ +#if defined __PIC__ && defined HAVE_AS_X86_PCREL + .long .LFB2-. /* FDE initial location */ +#else + .long .LFB2 +#endif + .long .LFE2-.LFB2 /* FDE address range */ +#ifdef __PIC__ + .byte 0x0 /* .uleb128 0x0; Augmentation size */ +#endif + /* DW_CFA_xxx CFI instructions go here. */ + + .byte 0x4 /* DW_CFA_advance_loc4 */ + .long .LCFI2-.LFB2 + .byte 0xe /* DW_CFA_def_cfa_offset CFA = r4 + 8 = 8(%esp) */ + .byte 0x8 /* .uleb128 0x8 */ + .byte 0x85 /* DW_CFA_offset, column 0x5 %ebp at CFA + 2 * -4 */ + .byte 0x2 /* .uleb128 0x2 */ + + .byte 0x4 /* DW_CFA_advance_loc4 */ + .long .LCFI3-.LCFI2 + .byte 0xd /* DW_CFA_def_cfa_register CFA = r5 = %ebp */ + .byte 0x5 /* .uleb128 0x5 */ + + /* End of DW_CFA_xxx CFI instructions. */ + .align 4 +.LEFDE2: + + +.LSFDE3: + .long .LEFDE3-.LASFDE3 /* FDE Length */ +.LASFDE3: + .long .LASFDE3-.Lframe1 /* FDE CIE offset */ +#if defined __PIC__ && defined HAVE_AS_X86_PCREL + .long .LFB3-. /* FDE initial location */ +#else + .long .LFB3 +#endif + .long .LFE3-.LFB3 /* FDE address range */ +#ifdef __PIC__ + .byte 0x0 /* .uleb128 0x0; Augmentation size */ #endif + /* DW_CFA_xxx CFI instructions go here. */ + + .byte 0x4 /* DW_CFA_advance_loc4 */ + .long .LCFI4-.LFB3 + .byte 0xe /* DW_CFA_def_cfa_offset CFA = r4 + 8 = 8(%esp) */ + .byte 0x8 /* .uleb128 0x8 */ + .byte 0x85 /* DW_CFA_offset, column 0x5 %ebp at CFA + 2 * -4 */ + .byte 0x2 /* .uleb128 0x2 */ + + .byte 0x4 /* DW_CFA_advance_loc4 */ + .long .LCFI5-.LCFI4 + .byte 0xd /* DW_CFA_def_cfa_register CFA = r5 = %ebp */ + .byte 0x5 /* .uleb128 0x5 */ + + /* End of DW_CFA_xxx CFI instructions. */ + .align 4 +.LEFDE3: + +#if !FFI_NO_RAW_API + +.LSFDE4: + .long .LEFDE4-.LASFDE4 /* FDE Length */ +.LASFDE4: + .long .LASFDE4-.Lframe1 /* FDE CIE offset */ +#if defined __PIC__ && defined HAVE_AS_X86_PCREL + .long .LFB4-. /* FDE initial location */ +#else + .long .LFB4 +#endif + .long .LFE4-.LFB4 /* FDE address range */ +#ifdef __PIC__ + .byte 0x0 /* .uleb128 0x0; Augmentation size */ +#endif + /* DW_CFA_xxx CFI instructions go here. */ + + .byte 0x4 /* DW_CFA_advance_loc4 */ + .long .LCFI6-.LFB4 + .byte 0xe /* DW_CFA_def_cfa_offset CFA = r4 + 8 = 8(%esp) */ + .byte 0x8 /* .uleb128 0x8 */ + .byte 0x85 /* DW_CFA_offset, column 0x5 %ebp at CFA + 2 * -4 */ + .byte 0x2 /* .uleb128 0x2 */ + + .byte 0x4 /* DW_CFA_advance_loc4 */ + .long .LCFI7-.LCFI6 + .byte 0xd /* DW_CFA_def_cfa_register CFA = r5 = %ebp */ + .byte 0x5 /* .uleb128 0x5 */ + + .byte 0x4 /* DW_CFA_advance_loc4 */ + .long .LCFI8-.LCFI7 + .byte 0x86 /* DW_CFA_offset, column 0x6 %esi at CFA + 3 * -4 */ + .byte 0x3 /* .uleb128 0x3 */ + + /* End of DW_CFA_xxx CFI instructions. */ + .align 4 +.LEFDE4: + +#endif /* !FFI_NO_RAW_API */ + +.LSFDE5: + .long .LEFDE5-.LASFDE5 /* FDE Length */ +.LASFDE5: + .long .LASFDE5-.Lframe1 /* FDE CIE offset */ +#if defined __PIC__ && defined HAVE_AS_X86_PCREL + .long .LFB5-. /* FDE initial location */ +#else + .long .LFB5 +#endif + .long .LFE5-.LFB5 /* FDE address range */ +#ifdef __PIC__ + .byte 0x0 /* .uleb128 0x0; Augmentation size */ +#endif + /* DW_CFA_xxx CFI instructions go here. */ + + .byte 0x4 /* DW_CFA_advance_loc4 */ + .long .LCFI9-.LFB5 + .byte 0xe /* DW_CFA_def_cfa_offset CFA = r4 + 8 = 8(%esp) */ + .byte 0x8 /* .uleb128 0x8 */ + .byte 0x85 /* DW_CFA_offset, column 0x5 %ebp at CFA + 2 * -4 */ + .byte 0x2 /* .uleb128 0x2 */ + + .byte 0x4 /* DW_CFA_advance_loc4 */ + .long .LCFI10-.LCFI9 + .byte 0xd /* DW_CFA_def_cfa_register CFA = r5 = %ebp */ + .byte 0x5 /* .uleb128 0x5 */ + + /* End of DW_CFA_xxx CFI instructions. */ + .align 4 +.LEFDE5: Added: python/trunk/Modules/_ctypes/libffi/src/x86/win64.S ============================================================================== --- (empty file) +++ python/trunk/Modules/_ctypes/libffi/src/x86/win64.S Mon Mar 15 01:02:36 2010 @@ -0,0 +1,460 @@ +#define LIBFFI_ASM +#include +#include + +/* Constants for ffi_call_win64 */ +#define STACK 0 +#define PREP_ARGS_FN 32 +#define ECIF 40 +#define CIF_BYTES 48 +#define CIF_FLAGS 56 +#define RVALUE 64 +#define FN 72 + +/* ffi_call_win64 (void (*prep_args_fn)(char *, extended_cif *), + extended_cif *ecif, unsigned bytes, unsigned flags, + unsigned *rvalue, void (*fn)()); + */ + +#ifdef _MSC_VER +PUBLIC ffi_call_win64 + +EXTRN __chkstk:NEAR +EXTRN ffi_closure_win64_inner:NEAR + +_TEXT SEGMENT + +;;; ffi_closure_win64 will be called with these registers set: +;;; rax points to 'closure' +;;; r11 contains a bit mask that specifies which of the +;;; first four parameters are float or double +;;; +;;; It must move the parameters passed in registers to their stack location, +;;; call ffi_closure_win64_inner for the actual work, then return the result. +;;; +ffi_closure_win64 PROC FRAME + ;; copy register arguments onto stack + test r11, 1 + jne first_is_float + mov QWORD PTR [rsp+8], rcx + jmp second +first_is_float: + movlpd QWORD PTR [rsp+8], xmm0 + +second: + test r11, 2 + jne second_is_float + mov QWORD PTR [rsp+16], rdx + jmp third +second_is_float: + movlpd QWORD PTR [rsp+16], xmm1 + +third: + test r11, 4 + jne third_is_float + mov QWORD PTR [rsp+24], r8 + jmp fourth +third_is_float: + movlpd QWORD PTR [rsp+24], xmm2 + +fourth: + test r11, 8 + jne fourth_is_float + mov QWORD PTR [rsp+32], r9 + jmp done +fourth_is_float: + movlpd QWORD PTR [rsp+32], xmm3 + +done: + .ALLOCSTACK 40 + sub rsp, 40 + .ENDPROLOG + mov rcx, rax ; context is first parameter + mov rdx, rsp ; stack is second parameter + add rdx, 48 ; point to start of arguments + mov rax, ffi_closure_win64_inner + call rax ; call the real closure function + add rsp, 40 + movd xmm0, rax ; If the closure returned a float, + ; ffi_closure_win64_inner wrote it to rax + ret 0 +ffi_closure_win64 ENDP + +ffi_call_win64 PROC FRAME + ;; copy registers onto stack + mov QWORD PTR [rsp+32], r9 + mov QWORD PTR [rsp+24], r8 + mov QWORD PTR [rsp+16], rdx + mov QWORD PTR [rsp+8], rcx + .PUSHREG rbp + push rbp + .ALLOCSTACK 48 + sub rsp, 48 ; 00000030H + .SETFRAME rbp, 32 + lea rbp, QWORD PTR [rsp+32] + .ENDPROLOG + + mov eax, DWORD PTR CIF_BYTES[rbp] + add rax, 15 + and rax, -16 + call __chkstk + sub rsp, rax + lea rax, QWORD PTR [rsp+32] + mov QWORD PTR STACK[rbp], rax + + mov rdx, QWORD PTR ECIF[rbp] + mov rcx, QWORD PTR STACK[rbp] + call QWORD PTR PREP_ARGS_FN[rbp] + + mov rsp, QWORD PTR STACK[rbp] + + movlpd xmm3, QWORD PTR [rsp+24] + movd r9, xmm3 + + movlpd xmm2, QWORD PTR [rsp+16] + movd r8, xmm2 + + movlpd xmm1, QWORD PTR [rsp+8] + movd rdx, xmm1 + + movlpd xmm0, QWORD PTR [rsp] + movd rcx, xmm0 + + call QWORD PTR FN[rbp] +ret_struct4b$: + cmp DWORD PTR CIF_FLAGS[rbp], FFI_TYPE_SMALL_STRUCT_4B + jne ret_struct2b$ + + mov rcx, QWORD PTR RVALUE[rbp] + mov DWORD PTR [rcx], eax + jmp ret_void$ + +ret_struct2b$: + cmp DWORD PTR CIF_FLAGS[rbp], FFI_TYPE_SMALL_STRUCT_2B + jne ret_struct1b$ + + mov rcx, QWORD PTR RVALUE[rbp] + mov WORD PTR [rcx], ax + jmp ret_void$ + +ret_struct1b$: + cmp DWORD PTR CIF_FLAGS[rbp], FFI_TYPE_SMALL_STRUCT_1B + jne ret_uint8$ + + mov rcx, QWORD PTR RVALUE[rbp] + mov BYTE PTR [rcx], al + jmp ret_void$ + +ret_uint8$: + cmp DWORD PTR CIF_FLAGS[rbp], FFI_TYPE_UINT8 + jne ret_sint8$ + + mov rcx, QWORD PTR RVALUE[rbp] + movzx rax, al + mov QWORD PTR [rcx], rax + jmp ret_void$ + +ret_sint8$: + cmp DWORD PTR CIF_FLAGS[rbp], FFI_TYPE_SINT8 + jne ret_uint16$ + + mov rcx, QWORD PTR RVALUE[rbp] + movsx rax, al + mov QWORD PTR [rcx], rax + jmp ret_void$ + +ret_uint16$: + cmp DWORD PTR CIF_FLAGS[rbp], FFI_TYPE_UINT16 + jne ret_sint16$ + + mov rcx, QWORD PTR RVALUE[rbp] + movzx rax, ax + mov QWORD PTR [rcx], rax + jmp SHORT ret_void$ + +ret_sint16$: + cmp DWORD PTR CIF_FLAGS[rbp], FFI_TYPE_SINT16 + jne ret_uint32$ + + mov rcx, QWORD PTR RVALUE[rbp] + movsx rax, ax + mov QWORD PTR [rcx], rax + jmp SHORT ret_void$ + +ret_uint32$: + cmp DWORD PTR CIF_FLAGS[rbp], FFI_TYPE_UINT32 + jne ret_sint32$ + + mov rcx, QWORD PTR RVALUE[rbp] + mov eax, eax + mov QWORD PTR [rcx], rax + jmp SHORT ret_void$ + +ret_sint32$: + cmp DWORD PTR CIF_FLAGS[rbp], FFI_TYPE_SINT32 + jne ret_float$ + + mov rcx, QWORD PTR RVALUE[rbp] + cdqe + mov QWORD PTR [rcx], rax + jmp SHORT ret_void$ + +ret_float$: + cmp DWORD PTR CIF_FLAGS[rbp], FFI_TYPE_FLOAT + jne SHORT ret_double$ + + mov rax, QWORD PTR RVALUE[rbp] + movss DWORD PTR [rax], xmm0 + jmp SHORT ret_void$ + +ret_double$: + cmp DWORD PTR CIF_FLAGS[rbp], FFI_TYPE_DOUBLE + jne SHORT ret_sint64$ + + mov rax, QWORD PTR RVALUE[rbp] + movlpd QWORD PTR [rax], xmm0 + jmp SHORT ret_void$ + +ret_sint64$: + cmp DWORD PTR CIF_FLAGS[rbp], FFI_TYPE_SINT64 + jne ret_void$ + + mov rcx, QWORD PTR RVALUE[rbp] + mov QWORD PTR [rcx], rax + jmp SHORT ret_void$ + +ret_void$: + xor rax, rax + + lea rsp, QWORD PTR [rbp+16] + pop rbp + ret 0 +ffi_call_win64 ENDP +_TEXT ENDS +END +#else +.text + +.extern _ffi_closure_win64_inner + +# ffi_closure_win64 will be called with these registers set: +# rax points to 'closure' +# r11 contains a bit mask that specifies which of the +# first four parameters are float or double +# +# It must move the parameters passed in registers to their stack location, +# call ffi_closure_win64_inner for the actual work, then return the result. +# + .balign 16 + .globl _ffi_closure_win64 +_ffi_closure_win64: + # copy register arguments onto stack + test $1,%r11 + jne .Lfirst_is_float + mov %rcx, 8(%rsp) + jmp .Lsecond +.Lfirst_is_float: + movlpd %xmm0, 8(%rsp) + +.Lsecond: + test $2, %r11 + jne .Lsecond_is_float + mov %rdx, 16(%rsp) + jmp .Lthird +.Lsecond_is_float: + movlpd %xmm1, 16(%rsp) + +.Lthird: + test $4, %r11 + jne .Lthird_is_float + mov %r8,24(%rsp) + jmp .Lfourth +.Lthird_is_float: + movlpd %xmm2, 24(%rsp) + +.Lfourth: + test $8, %r11 + jne .Lfourth_is_float + mov %r9, 32(%rsp) + jmp .Ldone +.Lfourth_is_float: + movlpd %xmm3, 32(%rsp) + +.Ldone: +#.ALLOCSTACK 40 + sub $40, %rsp +#.ENDPROLOG + mov %rax, %rcx # context is first parameter + mov %rsp, %rdx # stack is second parameter + add $48, %rdx # point to start of arguments + mov $_ffi_closure_win64_inner, %rax + callq *%rax # call the real closure function + add $40, %rsp + movq %rax, %xmm0 # If the closure returned a float, + # ffi_closure_win64_inner wrote it to rax + retq +.ffi_closure_win64_end: + + .balign 16 + .globl _ffi_call_win64 +_ffi_call_win64: + # copy registers onto stack + mov %r9,32(%rsp) + mov %r8,24(%rsp) + mov %rdx,16(%rsp) + mov %rcx,8(%rsp) + #.PUSHREG rbp + push %rbp + #.ALLOCSTACK 48 + sub $48,%rsp + #.SETFRAME rbp, 32 + lea 32(%rsp),%rbp + #.ENDPROLOG + + mov CIF_BYTES(%rbp),%eax + add $15, %rax + and $-16, %rax + cmpq $0x1000, %rax + jb Lch_done +Lch_probe: + subq $0x1000,%rsp + orl $0x0, (%rsp) + subq $0x1000,%rax + cmpq $0x1000,%rax + ja Lch_probe +Lch_done: + subq %rax, %rsp + orl $0x0, (%rsp) + lea 32(%rsp), %rax + mov %rax, STACK(%rbp) + + mov ECIF(%rbp), %rdx + mov STACK(%rbp), %rcx + callq *PREP_ARGS_FN(%rbp) + + mov STACK(%rbp), %rsp + + movlpd 24(%rsp), %xmm3 + movd %xmm3, %r9 + + movlpd 16(%rsp), %xmm2 + movd %xmm2, %r8 + + movlpd 8(%rsp), %xmm1 + movd %xmm1, %rdx + + movlpd (%rsp), %xmm0 + movd %xmm0, %rcx + + callq *FN(%rbp) +.Lret_struct4b: + cmpl $FFI_TYPE_SMALL_STRUCT_4B, CIF_FLAGS(%rbp) + jne .Lret_struct2b + + mov RVALUE(%rbp), %rcx + mov %eax, (%rcx) + jmp .Lret_void + +.Lret_struct2b: + cmpl $FFI_TYPE_SMALL_STRUCT_2B, CIF_FLAGS(%rbp) + jne .Lret_struct1b + + mov RVALUE(%rbp), %rcx + mov %ax, (%rcx) + jmp .Lret_void + +.Lret_struct1b: + cmpl $FFI_TYPE_SMALL_STRUCT_1B, CIF_FLAGS(%rbp) + jne .Lret_uint8 + + mov RVALUE(%rbp), %rcx + mov %al, (%rcx) + jmp .Lret_void + +.Lret_uint8: + cmpl $FFI_TYPE_UINT8, CIF_FLAGS(%rbp) + jne .Lret_sint8 + + mov RVALUE(%rbp), %rcx + movzbq %al, %rax + movq %rax, (%rcx) + jmp .Lret_void + +.Lret_sint8: + cmpl $FFI_TYPE_SINT8, CIF_FLAGS(%rbp) + jne .Lret_uint16 + + mov RVALUE(%rbp), %rcx + movsbq %al, %rax + movq %rax, (%rcx) + jmp .Lret_void + +.Lret_uint16: + cmpl $FFI_TYPE_UINT16, CIF_FLAGS(%rbp) + jne .Lret_sint16 + + mov RVALUE(%rbp), %rcx + movzwq %ax, %rax + movq %rax, (%rcx) + jmp .Lret_void + +.Lret_sint16: + cmpl $FFI_TYPE_SINT16, CIF_FLAGS(%rbp) + jne .Lret_uint32 + + mov RVALUE(%rbp), %rcx + movswq %ax, %rax + movq %rax, (%rcx) + jmp .Lret_void + +.Lret_uint32: + cmpl $FFI_TYPE_UINT32, CIF_FLAGS(%rbp) + jne .Lret_sint32 + + mov RVALUE(%rbp), %rcx + movl %eax, %eax + movq %rax, (%rcx) + jmp .Lret_void + +.Lret_sint32: + cmpl $FFI_TYPE_SINT32, CIF_FLAGS(%rbp) + jne .Lret_float + + mov RVALUE(%rbp), %rcx + cltq + movq %rax, (%rcx) + jmp .Lret_void + +.Lret_float: + cmpl $FFI_TYPE_FLOAT, CIF_FLAGS(%rbp) + jne .Lret_double + + mov RVALUE(%rbp), %rax + movss %xmm0, (%rax) + jmp .Lret_void + +.Lret_double: + cmpl $FFI_TYPE_DOUBLE, CIF_FLAGS(%rbp) + jne .Lret_sint64 + + mov RVALUE(%rbp), %rax + movlpd %xmm0, (%rax) + jmp .Lret_void + +.Lret_sint64: + cmpl $FFI_TYPE_SINT64, CIF_FLAGS(%rbp) + jne .Lret_void + + mov RVALUE(%rbp), %rcx + mov %rax, (%rcx) + jmp .Lret_void + +.Lret_void: + xor %rax, %rax + + lea 16(%rbp), %rsp + pop %rbp + retq +.ffi_call_win64_end: +#endif /* !_MSC_VER */ + Added: python/trunk/Modules/_ctypes/libffi/testsuite/Makefile.am ============================================================================== --- (empty file) +++ python/trunk/Modules/_ctypes/libffi/testsuite/Makefile.am Mon Mar 15 01:02:36 2010 @@ -0,0 +1,80 @@ +## Process this file with automake to produce Makefile.in. + +AUTOMAKE_OPTIONS = foreign dejagnu + +# Setup the testing framework, if you have one +EXPECT = `if [ -f $(top_builddir)/../expect/expect ] ; then \ + echo $(top_builddir)/../expect/expect ; \ + else echo expect ; fi` + +RUNTEST = `if [ -f $(top_srcdir)/../dejagnu/runtest ] ; then \ + echo $(top_srcdir)/../dejagnu/runtest ; \ + else echo runtest; fi` + +AM_RUNTESTFLAGS = + +CLEANFILES = *.exe core* *.log *.sum + +EXTRA_DIST = libffi.special/special.exp \ +libffi.special/unwindtest_ffi_call.cc libffi.special/unwindtest.cc \ +libffi.special/ffitestcxx.h config/default.exp lib/target-libpath.exp \ +lib/libffi-dg.exp lib/wrapper.exp libffi.call/float.c \ +libffi.call/cls_multi_schar.c libffi.call/float3.c \ +libffi.call/cls_3_1byte.c libffi.call/stret_large2.c \ +libffi.call/cls_5_1_byte.c libffi.call/stret_medium.c \ +libffi.call/promotion.c libffi.call/cls_dbls_struct.c \ +libffi.call/nested_struct.c libffi.call/closure_fn1.c \ +libffi.call/cls_4_1byte.c libffi.call/cls_float.c \ +libffi.call/cls_2byte.c libffi.call/closure_fn4.c \ +libffi.call/return_fl2.c libffi.call/nested_struct7.c \ +libffi.call/cls_uint.c libffi.call/cls_align_sint64.c \ +libffi.call/float1.c libffi.call/cls_19byte.c \ +libffi.call/nested_struct1.c libffi.call/cls_4byte.c \ +libffi.call/return_fl1.c libffi.call/cls_align_pointer.c \ +libffi.call/nested_struct4.c libffi.call/nested_struct3.c \ +libffi.call/struct7.c libffi.call/nested_struct9.c \ +libffi.call/cls_sshort.c libffi.call/cls_ulonglong.c \ +libffi.call/cls_pointer_stack.c libffi.call/cls_multi_uchar.c \ +libffi.call/testclosure.c libffi.call/cls_3byte1.c \ +libffi.call/struct6.c libffi.call/return_uc.c libffi.call/return_ll1.c \ +libffi.call/cls_ushort.c libffi.call/stret_medium2.c \ +libffi.call/cls_multi_ushortchar.c libffi.call/return_dbl2.c \ +libffi.call/closure_loc_fn0.c libffi.call/return_sc.c \ +libffi.call/nested_struct8.c libffi.call/cls_7_1_byte.c \ +libffi.call/return_ll.c libffi.call/cls_pointer.c \ +libffi.call/err_bad_abi.c libffi.call/return_dbl1.c \ +libffi.call/call.exp libffi.call/ffitest.h libffi.call/strlen.c \ +libffi.call/return_sl.c libffi.call/cls_1_1byte.c \ +libffi.call/struct1.c libffi.call/cls_64byte.c libffi.call/return_ul.c \ +libffi.call/cls_double.c libffi.call/many_win32.c \ +libffi.call/cls_16byte.c libffi.call/cls_align_double.c \ +libffi.call/cls_align_uint16.c libffi.call/cls_9byte1.c \ +libffi.call/cls_multi_sshortchar.c libffi.call/cls_multi_ushort.c \ +libffi.call/closure_stdcall.c libffi.call/return_fl.c \ +libffi.call/strlen_win32.c libffi.call/return_ldl.c \ +libffi.call/cls_align_float.c libffi.call/struct3.c \ +libffi.call/cls_uchar.c libffi.call/cls_sint.c libffi.call/float2.c \ +libffi.call/cls_align_longdouble_split.c \ +libffi.call/cls_longdouble_va.c libffi.call/cls_multi_sshort.c \ +libffi.call/stret_large.c libffi.call/cls_align_sint16.c \ +libffi.call/nested_struct6.c libffi.call/cls_5byte.c \ +libffi.call/return_dbl.c libffi.call/cls_20byte.c \ +libffi.call/cls_8byte.c libffi.call/pyobjc-tc.c \ +libffi.call/cls_24byte.c libffi.call/cls_align_longdouble_split2.c \ +libffi.call/cls_6_1_byte.c libffi.call/cls_schar.c \ +libffi.call/cls_18byte.c libffi.call/closure_fn3.c \ +libffi.call/err_bad_typedef.c libffi.call/closure_fn2.c \ +libffi.call/struct2.c libffi.call/cls_3byte2.c \ +libffi.call/cls_align_longdouble.c libffi.call/cls_20byte1.c \ +libffi.call/return_fl3.c libffi.call/cls_align_uint32.c \ +libffi.call/problem1.c libffi.call/float4.c \ +libffi.call/cls_align_uint64.c libffi.call/struct9.c \ +libffi.call/closure_fn5.c libffi.call/cls_align_sint32.c \ +libffi.call/closure_fn0.c libffi.call/closure_fn6.c \ +libffi.call/struct4.c libffi.call/nested_struct2.c \ +libffi.call/cls_6byte.c libffi.call/cls_7byte.c libffi.call/many.c \ +libffi.call/struct8.c libffi.call/negint.c libffi.call/struct5.c \ +libffi.call/cls_12byte.c libffi.call/cls_double_va.c \ +libffi.call/cls_longdouble.c libffi.call/cls_9byte2.c \ +libffi.call/nested_struct10.c libffi.call/nested_struct5.c \ +libffi.call/huge_struct.c Added: python/trunk/Modules/_ctypes/libffi/testsuite/Makefile.in ============================================================================== --- (empty file) +++ python/trunk/Modules/_ctypes/libffi/testsuite/Makefile.in Mon Mar 15 01:02:36 2010 @@ -0,0 +1,482 @@ +# Makefile.in generated by automake 1.11 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +# 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, +# Inc. +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + + at SET_MAKE@ +VPATH = @srcdir@ +pkgdatadir = $(datadir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkglibexecdir = $(libexecdir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = @build@ +host_triplet = @host@ +target_triplet = @target@ +subdir = testsuite +DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/acinclude.m4 \ + $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +mkinstalldirs = $(install_sh) -d +CONFIG_HEADER = $(top_builddir)/fficonfig.h +CONFIG_CLEAN_FILES = +CONFIG_CLEAN_VPATH_FILES = +SOURCES = +DIST_SOURCES = +DEJATOOL = $(PACKAGE) +RUNTESTDEFAULTFLAGS = --tool $$tool --srcdir $$srcdir +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +ACLOCAL = @ACLOCAL@ +ALLOCA = @ALLOCA@ +AMTAR = @AMTAR@ +AM_RUNTESTFLAGS = +AR = @AR@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +CC = @CC@ +CCAS = @CCAS@ +CCASDEPMODE = @CCASDEPMODE@ +CCASFLAGS = @CCASFLAGS@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CYGPATH_W = @CYGPATH_W@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +DSYMUTIL = @DSYMUTIL@ +DUMPBIN = @DUMPBIN@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +EXEEXT = @EXEEXT@ +FGREP = @FGREP@ +GREP = @GREP@ +HAVE_LONG_DOUBLE = @HAVE_LONG_DOUBLE@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +LD = @LD@ +LDFLAGS = @LDFLAGS@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LIBTOOL = @LIBTOOL@ +LIPO = @LIPO@ +LN_S = @LN_S@ +LTLIBOBJS = @LTLIBOBJS@ +MAINT = @MAINT@ +MAKEINFO = @MAKEINFO@ +MKDIR_P = @MKDIR_P@ +NM = @NM@ +NMEDIT = @NMEDIT@ +OBJDUMP = @OBJDUMP@ +OBJEXT = @OBJEXT@ +OTOOL = @OTOOL@ +OTOOL64 = @OTOOL64@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +RANLIB = @RANLIB@ +SED = @SED@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +STRIP = @STRIP@ +TARGET = @TARGET@ +TARGETDIR = @TARGETDIR@ +VERSION = @VERSION@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_os = @build_os@ +build_vendor = @build_vendor@ +builddir = @builddir@ +datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +dvidir = @dvidir@ +exec_prefix = @exec_prefix@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +htmldir = @htmldir@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +lt_ECHO = @lt_ECHO@ +mandir = @mandir@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +pdfdir = @pdfdir@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +srcdir = @srcdir@ +sysconfdir = @sysconfdir@ +target = @target@ +target_alias = @target_alias@ +target_cpu = @target_cpu@ +target_os = @target_os@ +target_vendor = @target_vendor@ +toolexecdir = @toolexecdir@ +toolexeclibdir = @toolexeclibdir@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +AUTOMAKE_OPTIONS = foreign dejagnu + +# Setup the testing framework, if you have one +EXPECT = `if [ -f $(top_builddir)/../expect/expect ] ; then \ + echo $(top_builddir)/../expect/expect ; \ + else echo expect ; fi` + +RUNTEST = `if [ -f $(top_srcdir)/../dejagnu/runtest ] ; then \ + echo $(top_srcdir)/../dejagnu/runtest ; \ + else echo runtest; fi` + +CLEANFILES = *.exe core* *.log *.sum +EXTRA_DIST = libffi.special/special.exp \ +libffi.special/unwindtest_ffi_call.cc libffi.special/unwindtest.cc \ +libffi.special/ffitestcxx.h config/default.exp lib/target-libpath.exp \ +lib/libffi-dg.exp lib/wrapper.exp libffi.call/float.c \ +libffi.call/cls_multi_schar.c libffi.call/float3.c \ +libffi.call/cls_3_1byte.c libffi.call/stret_large2.c \ +libffi.call/cls_5_1_byte.c libffi.call/stret_medium.c \ +libffi.call/promotion.c libffi.call/cls_dbls_struct.c \ +libffi.call/nested_struct.c libffi.call/closure_fn1.c \ +libffi.call/cls_4_1byte.c libffi.call/cls_float.c \ +libffi.call/cls_2byte.c libffi.call/closure_fn4.c \ +libffi.call/return_fl2.c libffi.call/nested_struct7.c \ +libffi.call/cls_uint.c libffi.call/cls_align_sint64.c \ +libffi.call/float1.c libffi.call/cls_19byte.c \ +libffi.call/nested_struct1.c libffi.call/cls_4byte.c \ +libffi.call/return_fl1.c libffi.call/cls_align_pointer.c \ +libffi.call/nested_struct4.c libffi.call/nested_struct3.c \ +libffi.call/struct7.c libffi.call/nested_struct9.c \ +libffi.call/cls_sshort.c libffi.call/cls_ulonglong.c \ +libffi.call/cls_pointer_stack.c libffi.call/cls_multi_uchar.c \ +libffi.call/testclosure.c libffi.call/cls_3byte1.c \ +libffi.call/struct6.c libffi.call/return_uc.c libffi.call/return_ll1.c \ +libffi.call/cls_ushort.c libffi.call/stret_medium2.c \ +libffi.call/cls_multi_ushortchar.c libffi.call/return_dbl2.c \ +libffi.call/closure_loc_fn0.c libffi.call/return_sc.c \ +libffi.call/nested_struct8.c libffi.call/cls_7_1_byte.c \ +libffi.call/return_ll.c libffi.call/cls_pointer.c \ +libffi.call/err_bad_abi.c libffi.call/return_dbl1.c \ +libffi.call/call.exp libffi.call/ffitest.h libffi.call/strlen.c \ +libffi.call/return_sl.c libffi.call/cls_1_1byte.c \ +libffi.call/struct1.c libffi.call/cls_64byte.c libffi.call/return_ul.c \ +libffi.call/cls_double.c libffi.call/many_win32.c \ +libffi.call/cls_16byte.c libffi.call/cls_align_double.c \ +libffi.call/cls_align_uint16.c libffi.call/cls_9byte1.c \ +libffi.call/cls_multi_sshortchar.c libffi.call/cls_multi_ushort.c \ +libffi.call/closure_stdcall.c libffi.call/return_fl.c \ +libffi.call/strlen_win32.c libffi.call/return_ldl.c \ +libffi.call/cls_align_float.c libffi.call/struct3.c \ +libffi.call/cls_uchar.c libffi.call/cls_sint.c libffi.call/float2.c \ +libffi.call/cls_align_longdouble_split.c \ +libffi.call/cls_longdouble_va.c libffi.call/cls_multi_sshort.c \ +libffi.call/stret_large.c libffi.call/cls_align_sint16.c \ +libffi.call/nested_struct6.c libffi.call/cls_5byte.c \ +libffi.call/return_dbl.c libffi.call/cls_20byte.c \ +libffi.call/cls_8byte.c libffi.call/pyobjc-tc.c \ +libffi.call/cls_24byte.c libffi.call/cls_align_longdouble_split2.c \ +libffi.call/cls_6_1_byte.c libffi.call/cls_schar.c \ +libffi.call/cls_18byte.c libffi.call/closure_fn3.c \ +libffi.call/err_bad_typedef.c libffi.call/closure_fn2.c \ +libffi.call/struct2.c libffi.call/cls_3byte2.c \ +libffi.call/cls_align_longdouble.c libffi.call/cls_20byte1.c \ +libffi.call/return_fl3.c libffi.call/cls_align_uint32.c \ +libffi.call/problem1.c libffi.call/float4.c \ +libffi.call/cls_align_uint64.c libffi.call/struct9.c \ +libffi.call/closure_fn5.c libffi.call/cls_align_sint32.c \ +libffi.call/closure_fn0.c libffi.call/closure_fn6.c \ +libffi.call/struct4.c libffi.call/nested_struct2.c \ +libffi.call/cls_6byte.c libffi.call/cls_7byte.c libffi.call/many.c \ +libffi.call/struct8.c libffi.call/negint.c libffi.call/struct5.c \ +libffi.call/cls_12byte.c libffi.call/cls_double_va.c \ +libffi.call/cls_longdouble.c libffi.call/cls_9byte2.c \ +libffi.call/nested_struct10.c libffi.call/nested_struct5.c \ +libffi.call/huge_struct.c + +all: all-am + +.SUFFIXES: +$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign testsuite/Makefile'; \ + $(am__cd) $(top_srcdir) && \ + $(AUTOMAKE) --foreign testsuite/Makefile +.PRECIOUS: Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(am__aclocal_m4_deps): + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs +tags: TAGS +TAGS: + +ctags: CTAGS +CTAGS: + + +check-DEJAGNU: site.exp + srcdir=`$(am__cd) $(srcdir) && pwd`; export srcdir; \ + EXPECT=$(EXPECT); export EXPECT; \ + runtest=$(RUNTEST); \ + if $(SHELL) -c "$$runtest --version" > /dev/null 2>&1; then \ + exit_status=0; l='$(DEJATOOL)'; for tool in $$l; do \ + if $$runtest $(AM_RUNTESTFLAGS) $(RUNTESTDEFAULTFLAGS) $(RUNTESTFLAGS); \ + then :; else exit_status=1; fi; \ + done; \ + else echo "WARNING: could not find \`runtest'" 1>&2; :;\ + fi; \ + exit $$exit_status +site.exp: Makefile + @echo 'Making a new site.exp file...' + @echo '## these variables are automatically generated by make ##' >site.tmp + @echo '# Do not edit here. If you wish to override these values' >>site.tmp + @echo '# edit the last section' >>site.tmp + @echo 'set srcdir $(srcdir)' >>site.tmp + @echo "set objdir `pwd`" >>site.tmp + @echo 'set build_alias "$(build_alias)"' >>site.tmp + @echo 'set build_triplet $(build_triplet)' >>site.tmp + @echo 'set host_alias "$(host_alias)"' >>site.tmp + @echo 'set host_triplet $(host_triplet)' >>site.tmp + @echo 'set target_alias "$(target_alias)"' >>site.tmp + @echo 'set target_triplet $(target_triplet)' >>site.tmp + @echo '## All variables above are generated by configure. Do Not Edit ##' >>site.tmp + @test ! -f site.exp || \ + sed '1,/^## All variables above are.*##/ d' site.exp >> site.tmp + @-rm -f site.bak + @test ! -f site.exp || mv site.exp site.bak + @mv site.tmp site.exp + +distclean-DEJAGNU: + -rm -f site.exp site.bak + -l='$(DEJATOOL)'; for tool in $$l; do \ + rm -f $$tool.sum $$tool.log; \ + done + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d "$(distdir)/$$file"; then \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ + else \ + test -f "$(distdir)/$$file" \ + || cp -p $$d/$$file "$(distdir)/$$file" \ + || exit 1; \ + fi; \ + done +check-am: all-am + $(MAKE) $(AM_MAKEFLAGS) check-DEJAGNU +check: check-am +all-am: Makefile +installdirs: +install: install-am +install-exec: install-exec-am +install-data: install-data-am +uninstall: uninstall-am + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-am +install-strip: + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + `test -z '$(STRIP)' || \ + echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install +mostlyclean-generic: + +clean-generic: + -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES) + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." +clean: clean-am + +clean-am: clean-generic clean-libtool mostlyclean-am + +distclean: distclean-am + -rm -f Makefile +distclean-am: clean-am distclean-DEJAGNU distclean-generic + +dvi: dvi-am + +dvi-am: + +html: html-am + +html-am: + +info: info-am + +info-am: + +install-data-am: + +install-dvi: install-dvi-am + +install-dvi-am: + +install-exec-am: + +install-html: install-html-am + +install-html-am: + +install-info: install-info-am + +install-info-am: + +install-man: + +install-pdf: install-pdf-am + +install-pdf-am: + +install-ps: install-ps-am + +install-ps-am: + +installcheck-am: + +maintainer-clean: maintainer-clean-am + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-am + +mostlyclean-am: mostlyclean-generic mostlyclean-libtool + +pdf: pdf-am + +pdf-am: + +ps: ps-am + +ps-am: + +uninstall-am: + +.MAKE: check-am install-am install-strip + +.PHONY: all all-am check check-DEJAGNU check-am clean clean-generic \ + clean-libtool distclean distclean-DEJAGNU distclean-generic \ + distclean-libtool distdir dvi dvi-am html html-am info info-am \ + install install-am install-data install-data-am install-dvi \ + install-dvi-am install-exec install-exec-am install-html \ + install-html-am install-info install-info-am install-man \ + install-pdf install-pdf-am install-ps install-ps-am \ + install-strip installcheck installcheck-am installdirs \ + maintainer-clean maintainer-clean-generic mostlyclean \ + mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ + uninstall uninstall-am + + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: Added: python/trunk/Modules/_ctypes/libffi/testsuite/config/default.exp ============================================================================== --- (empty file) +++ python/trunk/Modules/_ctypes/libffi/testsuite/config/default.exp Mon Mar 15 01:02:36 2010 @@ -0,0 +1 @@ +load_lib "standard.exp" Added: python/trunk/Modules/_ctypes/libffi/testsuite/lib/libffi-dg.exp ============================================================================== --- (empty file) +++ python/trunk/Modules/_ctypes/libffi/testsuite/lib/libffi-dg.exp Mon Mar 15 01:02:36 2010 @@ -0,0 +1,300 @@ +# Copyright (C) 2003, 2005, 2008, 2009 Free Software Foundation, Inc. + +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + +proc load_gcc_lib { filename } { + global srcdir + load_file $srcdir/lib/$filename +} + +load_lib dg.exp +load_lib libgloss.exp +load_gcc_lib target-libpath.exp +load_gcc_lib wrapper.exp + + +# Define libffi callbacks for dg.exp. + +proc libffi-dg-test-1 { target_compile prog do_what extra_tool_flags } { + + # To get all \n in dg-output test strings to match printf output + # in a system that outputs it as \015\012 (i.e. not just \012), we + # need to change all \n into \r?\n. As there is no dejagnu flag + # or hook to do that, we simply change the text being tested. + # Unfortunately, we have to know that the variable is called + # dg-output-text and lives in the caller of libffi-dg-test, which + # is two calls up. Overriding proc dg-output would be longer and + # would necessarily have the same assumption. + upvar 2 dg-output-text output_match + + if { [llength $output_match] > 1 } { + regsub -all "\n" [lindex $output_match 1] "\r?\n" x + set output_match [lreplace $output_match 1 1 $x] + } + + # Set up the compiler flags, based on what we're going to do. + + set options [list] + switch $do_what { + "compile" { + set compile_type "assembly" + set output_file "[file rootname [file tail $prog]].s" + } + "link" { + set compile_type "executable" + set output_file "[file rootname [file tail $prog]].exe" + # The following line is needed for targets like the i960 where + # the default output file is b.out. Sigh. + } + "run" { + set compile_type "executable" + # FIXME: "./" is to cope with "." not being in $PATH. + # Should this be handled elsewhere? + # YES. + set output_file "./[file rootname [file tail $prog]].exe" + # This is the only place where we care if an executable was + # created or not. If it was, dg.exp will try to run it. + remote_file build delete $output_file; + } + default { + perror "$do_what: not a valid dg-do keyword" + return "" + } + } + + if { $extra_tool_flags != "" } { + lappend options "additional_flags=$extra_tool_flags" + } + + set comp_output [libffi_target_compile "$prog" "$output_file" "$compile_type" $options]; + + + return [list $comp_output $output_file] +} + + +proc libffi-dg-test { prog do_what extra_tool_flags } { + return [libffi-dg-test-1 target_compile $prog $do_what $extra_tool_flags] +} + +proc libffi-init { args } { + global gluefile wrap_flags; + global srcdir + global blddirffi + global objdir + global TOOL_OPTIONS + global tool + global libffi_include + global libffi_link_flags + global tool_root_dir + global ld_library_path + + set blddirffi [pwd]/.. + verbose "libffi $blddirffi" + + set gccdir [lookfor_file $tool_root_dir gcc/libgcc.a] + if {$gccdir != ""} { + set gccdir [file dirname $gccdir] + } + verbose "gccdir $gccdir" + + set ld_library_path "." + append ld_library_path ":${gccdir}" + + set compiler "${gccdir}/xgcc" + if { [is_remote host] == 0 && [which $compiler] != 0 } { + foreach i "[exec $compiler --print-multi-lib]" { + set mldir "" + regexp -- "\[a-z0-9=_/\.-\]*;" $i mldir + set mldir [string trimright $mldir "\;@"] + if { "$mldir" == "." } { + continue + } + if { [llength [glob -nocomplain ${gccdir}/${mldir}/libgcc_s*.so.*]] >= 1 } { + append ld_library_path ":${gccdir}/${mldir}" + } + } + } + # add the library path for libffi. + append ld_library_path ":${blddirffi}/.libs" + + verbose "ld_library_path: $ld_library_path" + + # Point to the Libffi headers in libffi. + set libffi_include "${blddirffi}/include" + verbose "libffi_include $libffi_include" + + set libffi_dir "${blddirffi}/.libs" + verbose "libffi_dir $libffi_dir" + if { $libffi_dir != "" } { + set libffi_dir [file dirname ${libffi_dir}] + set libffi_link_flags "-L${libffi_dir}/.libs" + } + + set_ld_library_path_env_vars + libffi_maybe_build_wrapper "${objdir}/testglue.o" +} + +proc libffi_exit { } { + global gluefile; + + if [info exists gluefile] { + file_on_build delete $gluefile; + unset gluefile; + } +} + +proc libffi_target_compile { source dest type options } { + global gluefile wrap_flags; + global srcdir + global blddirffi + global TOOL_OPTIONS + global libffi_link_flags + global libffi_include + global target_triplet + + + if { [target_info needs_status_wrapper]!="" && [info exists gluefile] } { + lappend options "libs=${gluefile}" + lappend options "ldflags=$wrap_flags" + } + + # TOOL_OPTIONS must come first, so that it doesn't override testcase + # specific options. + if [info exists TOOL_OPTIONS] { + lappend options [concat "additional_flags=$TOOL_OPTIONS" $options]; + } + + # search for ffi_mips.h in srcdir, too + lappend options "additional_flags=-I${libffi_include} -I${srcdir}/../include -I${libffi_include}/.." + lappend options "additional_flags=${libffi_link_flags}" + + # Darwin needs a stack execution allowed flag. + + if { [istarget "*-*-darwin9*"] || [istarget "*-*-darwin1*"] + || [istarget "*-*-darwin2*"] } { + lappend options "additional_flags=-Wl,-allow_stack_execute" + } + + # If you're building the compiler with --prefix set to a place + # where it's not yet installed, then the linker won't be able to + # find the libgcc used by libffi.dylib. We could pass the + # -dylib_file option, but that's complicated, and it's much easier + # to just make the linker find libgcc using -L options. + if { [string match "*-*-darwin*" $target_triplet] } { + lappend options "libs= -shared-libgcc" + } + + if { [string match "*-*-openbsd*" $target_triplet] } { + lappend options "libs= -lpthread" + } + + lappend options "libs= -lffi" + + verbose "options: $options" + return [target_compile $source $dest $type $options] +} + +# Utility routines. + +# +# search_for -- looks for a string match in a file +# +proc search_for { file pattern } { + set fd [open $file r] + while { [gets $fd cur_line]>=0 } { + if [string match "*$pattern*" $cur_line] then { + close $fd + return 1 + } + } + close $fd + return 0 +} + +# Modified dg-runtest that can cycle through a list of optimization options +# as c-torture does. +proc libffi-dg-runtest { testcases default-extra-flags } { + global runtests + + foreach test $testcases { + # If we're only testing specific files and this isn't one of + # them, skip it. + if ![runtest_file_p $runtests $test] { + continue + } + + # Look for a loop within the source code - if we don't find one, + # don't pass -funroll[-all]-loops. + global torture_with_loops torture_without_loops + if [expr [search_for $test "for*("]+[search_for $test "while*("]] { + set option_list $torture_with_loops + } else { + set option_list $torture_without_loops + } + + set nshort [file tail [file dirname $test]]/[file tail $test] + + foreach flags $option_list { + verbose "Testing $nshort, $flags" 1 + dg-test $test $flags ${default-extra-flags} + } + } +} + + +# Like check_conditional_xfail, but callable from a dg test. + +proc dg-xfail-if { args } { + set args [lreplace $args 0 0] + set selector "target [join [lindex $args 1]]" + if { [dg-process-target $selector] == "S" } { + global compiler_conditional_xfail_data + set compiler_conditional_xfail_data $args + } +} + + +# We need to make sure that additional_files and additional_sources +# are both cleared out after every test. It is not enough to clear +# them out *before* the next test run because gcc-target-compile gets +# run directly from some .exp files (outside of any test). (Those +# uses should eventually be eliminated.) + +# Because the DG framework doesn't provide a hook that is run at the +# end of a test, we must replace dg-test with a wrapper. + +if { [info procs saved-dg-test] == [list] } { + rename dg-test saved-dg-test + + proc dg-test { args } { + global additional_files + global additional_sources + global errorInfo + + if { [ catch { eval saved-dg-test $args } errmsg ] } { + set saved_info $errorInfo + set additional_files "" + set additional_sources "" + error $errmsg $saved_info + } + set additional_files "" + set additional_sources "" + } +} + +# Local Variables: +# tcl-indent-level:4 +# End: Added: python/trunk/Modules/_ctypes/libffi/testsuite/lib/target-libpath.exp ============================================================================== --- (empty file) +++ python/trunk/Modules/_ctypes/libffi/testsuite/lib/target-libpath.exp Mon Mar 15 01:02:36 2010 @@ -0,0 +1,263 @@ +# Copyright (C) 2004, 2005, 2007 Free Software Foundation, Inc. + +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with GCC; see the file COPYING3. If not see +# . + +# This file was contributed by John David Anglin (dave.anglin at nrc-cnrc.gc.ca) + +set orig_environment_saved 0 +set orig_ld_library_path_saved 0 +set orig_ld_run_path_saved 0 +set orig_shlib_path_saved 0 +set orig_ld_libraryn32_path_saved 0 +set orig_ld_library64_path_saved 0 +set orig_ld_library_path_32_saved 0 +set orig_ld_library_path_64_saved 0 +set orig_dyld_library_path_saved 0 + + +####################################### +# proc set_ld_library_path_env_vars { } +####################################### + +proc set_ld_library_path_env_vars { } { + global ld_library_path + global orig_environment_saved + global orig_ld_library_path_saved + global orig_ld_run_path_saved + global orig_shlib_path_saved + global orig_ld_libraryn32_path_saved + global orig_ld_library64_path_saved + global orig_ld_library_path_32_saved + global orig_ld_library_path_64_saved + global orig_dyld_library_path_saved + global orig_ld_library_path + global orig_ld_run_path + global orig_shlib_path + global orig_ld_libraryn32_path + global orig_ld_library64_path + global orig_ld_library_path_32 + global orig_ld_library_path_64 + global orig_dyld_library_path + global GCC_EXEC_PREFIX + + # Set the relocated compiler prefix, but only if the user hasn't specified one. + if { [info exists GCC_EXEC_PREFIX] && ![info exists env(GCC_EXEC_PREFIX)] } { + setenv GCC_EXEC_PREFIX "$GCC_EXEC_PREFIX" + } + + # Setting the ld library path causes trouble when testing cross-compilers. + if { [is_remote target] } { + return + } + + if { $orig_environment_saved == 0 } { + global env + + set orig_environment_saved 1 + + # Save the original environment. + if [info exists env(LD_LIBRARY_PATH)] { + set orig_ld_library_path "$env(LD_LIBRARY_PATH)" + set orig_ld_library_path_saved 1 + } + if [info exists env(LD_RUN_PATH)] { + set orig_ld_run_path "$env(LD_RUN_PATH)" + set orig_ld_run_path_saved 1 + } + if [info exists env(SHLIB_PATH)] { + set orig_shlib_path "$env(SHLIB_PATH)" + set orig_shlib_path_saved 1 + } + if [info exists env(LD_LIBRARYN32_PATH)] { + set orig_ld_libraryn32_path "$env(LD_LIBRARYN32_PATH)" + set orig_ld_libraryn32_path_saved 1 + } + if [info exists env(LD_LIBRARY64_PATH)] { + set orig_ld_library64_path "$env(LD_LIBRARY64_PATH)" + set orig_ld_library64_path_saved 1 + } + if [info exists env(LD_LIBRARY_PATH_32)] { + set orig_ld_library_path_32 "$env(LD_LIBRARY_PATH_32)" + set orig_ld_library_path_32_saved 1 + } + if [info exists env(LD_LIBRARY_PATH_64)] { + set orig_ld_library_path_64 "$env(LD_LIBRARY_PATH_64)" + set orig_ld_library_path_64_saved 1 + } + if [info exists env(DYLD_LIBRARY_PATH)] { + set orig_dyld_library_path "$env(DYLD_LIBRARY_PATH)" + set orig_dyld_library_path_saved 1 + } + } + + # We need to set ld library path in the environment. Currently, + # unix.exp doesn't set the environment correctly for all systems. + # It only sets SHLIB_PATH and LD_LIBRARY_PATH when it executes a + # program. We also need the environment set for compilations, etc. + # + # On IRIX 6, we have to set variables akin to LD_LIBRARY_PATH, but + # called LD_LIBRARYN32_PATH (for the N32 ABI) and LD_LIBRARY64_PATH + # (for the 64-bit ABI). The same applies to Darwin (DYLD_LIBRARY_PATH), + # Solaris 32 bit (LD_LIBRARY_PATH_32), Solaris 64 bit (LD_LIBRARY_PATH_64), + # and HP-UX (SHLIB_PATH). In some cases, the variables are independent + # of LD_LIBRARY_PATH, and in other cases LD_LIBRARY_PATH is used if the + # variable is not defined. + # + # Doing this is somewhat of a hack as ld_library_path gets repeated in + # SHLIB_PATH and LD_LIBRARY_PATH when unix_load sets these variables. + if { $orig_ld_library_path_saved } { + setenv LD_LIBRARY_PATH "$ld_library_path:$orig_ld_library_path" + } else { + setenv LD_LIBRARY_PATH "$ld_library_path" + } + if { $orig_ld_run_path_saved } { + setenv LD_RUN_PATH "$ld_library_path:$orig_ld_run_path" + } else { + setenv LD_RUN_PATH "$ld_library_path" + } + # The default shared library dynamic path search for 64-bit + # HP-UX executables searches LD_LIBRARY_PATH before SHLIB_PATH. + # LD_LIBRARY_PATH isn't used for 32-bit executables. Thus, we + # set LD_LIBRARY_PATH and SHLIB_PATH as if they were independent. + if { $orig_shlib_path_saved } { + setenv SHLIB_PATH "$ld_library_path:$orig_shlib_path" + } else { + setenv SHLIB_PATH "$ld_library_path" + } + if { $orig_ld_libraryn32_path_saved } { + setenv LD_LIBRARYN32_PATH "$ld_library_path:$orig_ld_libraryn32_path" + } elseif { $orig_ld_library_path_saved } { + setenv LD_LIBRARYN32_PATH "$ld_library_path:$orig_ld_library_path" + } else { + setenv LD_LIBRARYN32_PATH "$ld_library_path" + } + if { $orig_ld_library64_path_saved } { + setenv LD_LIBRARY64_PATH "$ld_library_path:$orig_ld_library64_path" + } elseif { $orig_ld_library_path_saved } { + setenv LD_LIBRARY64_PATH "$ld_library_path:$orig_ld_library_path" + } else { + setenv LD_LIBRARY64_PATH "$ld_library_path" + } + if { $orig_ld_library_path_32_saved } { + setenv LD_LIBRARY_PATH_32 "$ld_library_path:$orig_ld_library_path_32" + } elseif { $orig_ld_library_path_saved } { + setenv LD_LIBRARY_PATH_32 "$ld_library_path:$orig_ld_library_path" + } else { + setenv LD_LIBRARY_PATH_32 "$ld_library_path" + } + if { $orig_ld_library_path_64_saved } { + setenv LD_LIBRARY_PATH_64 "$ld_library_path:$orig_ld_library_path_64" + } elseif { $orig_ld_library_path_saved } { + setenv LD_LIBRARY_PATH_64 "$ld_library_path:$orig_ld_library_path" + } else { + setenv LD_LIBRARY_PATH_64 "$ld_library_path" + } + if { $orig_dyld_library_path_saved } { + setenv DYLD_LIBRARY_PATH "$ld_library_path:$orig_dyld_library_path" + } else { + setenv DYLD_LIBRARY_PATH "$ld_library_path" + } + + verbose -log "set_ld_library_path_env_vars: ld_library_path=$ld_library_path" +} + +####################################### +# proc restore_ld_library_path_env_vars { } +####################################### + +proc restore_ld_library_path_env_vars { } { + global orig_environment_saved + global orig_ld_library_path_saved + global orig_ld_run_path_saved + global orig_shlib_path_saved + global orig_ld_libraryn32_path_saved + global orig_ld_library64_path_saved + global orig_ld_library_path_32_saved + global orig_ld_library_path_64_saved + global orig_dyld_library_path_saved + global orig_ld_library_path + global orig_ld_run_path + global orig_shlib_path + global orig_ld_libraryn32_path + global orig_ld_library64_path + global orig_ld_library_path_32 + global orig_ld_library_path_64 + global orig_dyld_library_path + + if { $orig_environment_saved == 0 } { + return + } + + if { $orig_ld_library_path_saved } { + setenv LD_LIBRARY_PATH "$orig_ld_library_path" + } elseif [info exists env(LD_LIBRARY_PATH)] { + unsetenv LD_LIBRARY_PATH + } + if { $orig_ld_run_path_saved } { + setenv LD_RUN_PATH "$orig_ld_run_path" + } elseif [info exists env(LD_RUN_PATH)] { + unsetenv LD_RUN_PATH + } + if { $orig_shlib_path_saved } { + setenv SHLIB_PATH "$orig_shlib_path" + } elseif [info exists env(SHLIB_PATH)] { + unsetenv SHLIB_PATH + } + if { $orig_ld_libraryn32_path_saved } { + setenv LD_LIBRARYN32_PATH "$orig_ld_libraryn32_path" + } elseif [info exists env(LD_LIBRARYN32_PATH)] { + unsetenv LD_LIBRARYN32_PATH + } + if { $orig_ld_library64_path_saved } { + setenv LD_LIBRARY64_PATH "$orig_ld_library64_path" + } elseif [info exists env(LD_LIBRARY64_PATH)] { + unsetenv LD_LIBRARY64_PATH + } + if { $orig_ld_library_path_32_saved } { + setenv LD_LIBRARY_PATH_32 "$orig_ld_library_path_32" + } elseif [info exists env(LD_LIBRARY_PATH_32)] { + unsetenv LD_LIBRARY_PATH_32 + } + if { $orig_ld_library_path_64_saved } { + setenv LD_LIBRARY_PATH_64 "$orig_ld_library_path_64" + } elseif [info exists env(LD_LIBRARY_PATH_64)] { + unsetenv LD_LIBRARY_PATH_64 + } + if { $orig_dyld_library_path_saved } { + setenv DYLD_LIBRARY_PATH "$orig_dyld_library_path" + } elseif [info exists env(DYLD_LIBRARY_PATH)] { + unsetenv DYLD_LIBRARY_PATH + } +} + +####################################### +# proc get_shlib_extension { } +####################################### + +proc get_shlib_extension { } { + global shlib_ext + + if { [ istarget *-*-darwin* ] } { + set shlib_ext "dylib" + } elseif { [ istarget *-*-cygwin* ] || [ istarget *-*-mingw* ] } { + set shlib_ext "dll" + } elseif { [ istarget hppa*-*-hpux* ] } { + set shlib_ext "sl" + } else { + set shlib_ext "so" + } + return $shlib_ext +} + Added: python/trunk/Modules/_ctypes/libffi/testsuite/lib/wrapper.exp ============================================================================== --- (empty file) +++ python/trunk/Modules/_ctypes/libffi/testsuite/lib/wrapper.exp Mon Mar 15 01:02:36 2010 @@ -0,0 +1,45 @@ +# Copyright (C) 2004, 2007 Free Software Foundation, Inc. + +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with GCC; see the file COPYING3. If not see +# . + +# This file contains GCC-specifics for status wrappers for test programs. + +# ${tool}_maybe_build_wrapper -- Build wrapper object if the target +# needs it. FILENAME is the path to the wrapper file. If there are +# additional arguments, they are command-line options to provide to +# the compiler when compiling FILENAME. + +proc ${tool}_maybe_build_wrapper { filename args } { + global gluefile wrap_flags + + if { [target_info needs_status_wrapper] != "" \ + && [target_info needs_status_wrapper] != "0" \ + && ![info exists gluefile] } { + set saved_wrap_compile_flags [target_info wrap_compile_flags] + set flags [join $args " "] + # The wrapper code may contain code that gcc objects on. This + # became true for dejagnu-1.4.4. The set of warnings and code + # that gcc objects on may change, so just make sure -w is always + # passed to turn off all warnings. + set_currtarget_info wrap_compile_flags \ + "$saved_wrap_compile_flags -w $flags" + set result [build_wrapper $filename] + set_currtarget_info wrap_compile_flags "$saved_wrap_compile_flags" + if { $result != "" } { + set gluefile [lindex $result 0] + set wrap_flags [lindex $result 1] + } + } +} Added: python/trunk/Modules/_ctypes/libffi/testsuite/libffi.call/call.exp ============================================================================== --- (empty file) +++ python/trunk/Modules/_ctypes/libffi/testsuite/libffi.call/call.exp Mon Mar 15 01:02:36 2010 @@ -0,0 +1,36 @@ +# Copyright (C) 2003, 2006, 2009 Free Software Foundation, Inc. + +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; see the file COPYING3. If not see +# . + +# libffi testsuite that uses the 'dg.exp' driver. + +load_lib libffi-dg.exp + +dg-init +libffi-init + +global srcdir subdir + +dg-runtest [lsort [glob -nocomplain $srcdir/$subdir/*.\[cS\]]] "-O0 -W -Wall" "" +dg-runtest [lsort [glob -nocomplain $srcdir/$subdir/*.\[cS\]]] "-O2" "" +dg-runtest [lsort [glob -nocomplain $srcdir/$subdir/*.\[cS\]]] "-O3" "" +dg-runtest [lsort [glob -nocomplain $srcdir/$subdir/*.\[cS\]]] "-Os" "" +dg-runtest [lsort [glob -nocomplain $srcdir/$subdir/*.\[cS\]]] "-O2 -fomit-frame-pointer" "" + +dg-finish + +# Local Variables: +# tcl-indent-level:4 +# End: Added: python/trunk/Modules/_ctypes/libffi/testsuite/libffi.call/closure_fn0.c ============================================================================== --- (empty file) +++ python/trunk/Modules/_ctypes/libffi/testsuite/libffi.call/closure_fn0.c Mon Mar 15 01:02:36 2010 @@ -0,0 +1,89 @@ +/* Area: closure_call + Purpose: Check multiple values passing from different type. + Also, exceed the limit of gpr and fpr registers on PowerPC + Darwin. + Limitations: none. + PR: none. + Originator: 20030828 */ + + + + +/* { dg-do run } */ +#include "ffitest.h" + +static void +closure_test_fn0(ffi_cif* cif __UNUSED__, void* resp, void** args, + void* userdata) +{ + *(ffi_arg*)resp = + (int)*(unsigned long long *)args[0] + (int)(*(int *)args[1]) + + (int)(*(unsigned long long *)args[2]) + (int)*(int *)args[3] + + (int)(*(signed short *)args[4]) + + (int)(*(unsigned long long *)args[5]) + + (int)*(int *)args[6] + (int)(*(int *)args[7]) + + (int)(*(double *)args[8]) + (int)*(int *)args[9] + + (int)(*(int *)args[10]) + (int)(*(float *)args[11]) + + (int)*(int *)args[12] + (int)(*(int *)args[13]) + + (int)(*(int *)args[14]) + *(int *)args[15] + (intptr_t)userdata; + + printf("%d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d: %d\n", + (int)*(unsigned long long *)args[0], (int)(*(int *)args[1]), + (int)(*(unsigned long long *)args[2]), + (int)*(int *)args[3], (int)(*(signed short *)args[4]), + (int)(*(unsigned long long *)args[5]), + (int)*(int *)args[6], (int)(*(int *)args[7]), + (int)(*(double *)args[8]), (int)*(int *)args[9], + (int)(*(int *)args[10]), (int)(*(float *)args[11]), + (int)*(int *)args[12], (int)(*(int *)args[13]), + (int)(*(int *)args[14]),*(int *)args[15], + (int)(intptr_t)userdata, (int)*(ffi_arg *)resp); + +} + +typedef int (*closure_test_type0)(unsigned long long, int, unsigned long long, + int, signed short, unsigned long long, int, + int, double, int, int, float, int, int, + int, int); + +int main (void) +{ + ffi_cif cif; + void * code; + ffi_closure *pcl = ffi_closure_alloc(sizeof(ffi_closure), &code); + ffi_type * cl_arg_types[17]; + int res; + + cl_arg_types[0] = &ffi_type_uint64; + cl_arg_types[1] = &ffi_type_sint; + cl_arg_types[2] = &ffi_type_uint64; + cl_arg_types[3] = &ffi_type_sint; + cl_arg_types[4] = &ffi_type_sshort; + cl_arg_types[5] = &ffi_type_uint64; + cl_arg_types[6] = &ffi_type_sint; + cl_arg_types[7] = &ffi_type_sint; + cl_arg_types[8] = &ffi_type_double; + cl_arg_types[9] = &ffi_type_sint; + cl_arg_types[10] = &ffi_type_sint; + cl_arg_types[11] = &ffi_type_float; + cl_arg_types[12] = &ffi_type_sint; + cl_arg_types[13] = &ffi_type_sint; + cl_arg_types[14] = &ffi_type_sint; + cl_arg_types[15] = &ffi_type_sint; + cl_arg_types[16] = NULL; + + /* Initialize the cif */ + CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 16, + &ffi_type_sint, cl_arg_types) == FFI_OK); + + CHECK(ffi_prep_closure_loc(pcl, &cif, closure_test_fn0, + (void *) 3 /* userdata */, code) == FFI_OK); + + res = (*((closure_test_type0)code)) + (1LL, 2, 3LL, 4, 127, 429LL, 7, 8, 9.5, 10, 11, 12, 13, + 19, 21, 1); + /* { dg-output "1 2 3 4 127 429 7 8 9 10 11 12 13 19 21 1 3: 680" } */ + printf("res: %d\n",res); + /* { dg-output "\nres: 680" } */ + exit(0); +} Added: python/trunk/Modules/_ctypes/libffi/testsuite/libffi.call/closure_fn1.c ============================================================================== --- (empty file) +++ python/trunk/Modules/_ctypes/libffi/testsuite/libffi.call/closure_fn1.c Mon Mar 15 01:02:36 2010 @@ -0,0 +1,81 @@ +/* Area: closure_call. + Purpose: Check multiple values passing from different type. + Also, exceed the limit of gpr and fpr registers on PowerPC + Darwin. + Limitations: none. + PR: none. + Originator: 20030828 */ + +/* { dg-do run } */ +#include "ffitest.h" + + +static void closure_test_fn1(ffi_cif* cif __UNUSED__, void* resp, void** args, + void* userdata) +{ + *(ffi_arg*)resp = + (int)*(float *)args[0] +(int)(*(float *)args[1]) + + (int)(*(float *)args[2]) + (int)*(float *)args[3] + + (int)(*(signed short *)args[4]) + (int)(*(float *)args[5]) + + (int)*(float *)args[6] + (int)(*(int *)args[7]) + + (int)(*(double*)args[8]) + (int)*(int *)args[9] + + (int)(*(int *)args[10]) + (int)(*(float *)args[11]) + + (int)*(int *)args[12] + (int)(*(int *)args[13]) + + (int)(*(int *)args[14]) + *(int *)args[15] + (intptr_t)userdata; + + printf("%d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d: %d\n", + (int)*(float *)args[0], (int)(*(float *)args[1]), + (int)(*(float *)args[2]), (int)*(float *)args[3], + (int)(*(signed short *)args[4]), (int)(*(float *)args[5]), + (int)*(float *)args[6], (int)(*(int *)args[7]), + (int)(*(double *)args[8]), (int)*(int *)args[9], + (int)(*(int *)args[10]), (int)(*(float *)args[11]), + (int)*(int *)args[12], (int)(*(int *)args[13]), + (int)(*(int *)args[14]), *(int *)args[15], + (int)(intptr_t)userdata, (int)*(ffi_arg *)resp); +} + +typedef int (*closure_test_type1)(float, float, float, float, signed short, + float, float, int, double, int, int, float, + int, int, int, int); +int main (void) +{ + ffi_cif cif; + void *code; + ffi_closure *pcl = ffi_closure_alloc(sizeof(ffi_closure), &code); + ffi_type * cl_arg_types[17]; + int res; + + cl_arg_types[0] = &ffi_type_float; + cl_arg_types[1] = &ffi_type_float; + cl_arg_types[2] = &ffi_type_float; + cl_arg_types[3] = &ffi_type_float; + cl_arg_types[4] = &ffi_type_sshort; + cl_arg_types[5] = &ffi_type_float; + cl_arg_types[6] = &ffi_type_float; + cl_arg_types[7] = &ffi_type_sint; + cl_arg_types[8] = &ffi_type_double; + cl_arg_types[9] = &ffi_type_sint; + cl_arg_types[10] = &ffi_type_sint; + cl_arg_types[11] = &ffi_type_float; + cl_arg_types[12] = &ffi_type_sint; + cl_arg_types[13] = &ffi_type_sint; + cl_arg_types[14] = &ffi_type_sint; + cl_arg_types[15] = &ffi_type_sint; + cl_arg_types[16] = NULL; + + /* Initialize the cif */ + CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 16, + &ffi_type_sint, cl_arg_types) == FFI_OK); + + CHECK(ffi_prep_closure_loc(pcl, &cif, closure_test_fn1, + (void *) 3 /* userdata */, code) == FFI_OK); + + res = (*((closure_test_type1)code)) + (1.1, 2.2, 3.3, 4.4, 127, 5.5, 6.6, 8, 9, 10, 11, 12.0, 13, + 19, 21, 1); + /* { dg-output "1 2 3 4 127 5 6 8 9 10 11 12 13 19 21 1 3: 255" } */ + printf("res: %d\n",res); + /* { dg-output "\nres: 255" } */ + exit(0); +} Added: python/trunk/Modules/_ctypes/libffi/testsuite/libffi.call/closure_fn2.c ============================================================================== --- (empty file) +++ python/trunk/Modules/_ctypes/libffi/testsuite/libffi.call/closure_fn2.c Mon Mar 15 01:02:36 2010 @@ -0,0 +1,81 @@ +/* Area: closure_call + Purpose: Check multiple values passing from different type. + Also, exceed the limit of gpr and fpr registers on PowerPC + Darwin. + Limitations: none. + PR: none. + Originator: 20030828 */ + +/* { dg-do run } */ +#include "ffitest.h" + +static void closure_test_fn2(ffi_cif* cif __UNUSED__, void* resp, void** args, + void* userdata) +{ + *(ffi_arg*)resp = + (int)*(double *)args[0] +(int)(*(double *)args[1]) + + (int)(*(double *)args[2]) + (int)*(double *)args[3] + + (int)(*(signed short *)args[4]) + (int)(*(double *)args[5]) + + (int)*(double *)args[6] + (int)(*(int *)args[7]) + + (int)(*(double *)args[8]) + (int)*(int *)args[9] + + (int)(*(int *)args[10]) + (int)(*(float *)args[11]) + + (int)*(int *)args[12] + (int)(*(float *)args[13]) + + (int)(*(int *)args[14]) + *(int *)args[15] + (intptr_t)userdata; + + printf("%d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d: %d\n", + (int)*(double *)args[0], (int)(*(double *)args[1]), + (int)(*(double *)args[2]), (int)*(double *)args[3], + (int)(*(signed short *)args[4]), (int)(*(double *)args[5]), + (int)*(double *)args[6], (int)(*(int *)args[7]), + (int)(*(double*)args[8]), (int)*(int *)args[9], + (int)(*(int *)args[10]), (int)(*(float *)args[11]), + (int)*(int *)args[12], (int)(*(float *)args[13]), + (int)(*(int *)args[14]), *(int *)args[15], (int)(intptr_t)userdata, + (int)*(ffi_arg *)resp); +} + +typedef int (*closure_test_type2)(double, double, double, double, signed short, + double, double, int, double, int, int, float, + int, float, int, int); + +int main (void) +{ + ffi_cif cif; + void *code; + ffi_closure *pcl = ffi_closure_alloc(sizeof(ffi_closure), &code); + ffi_type * cl_arg_types[17]; + int res; + + cl_arg_types[0] = &ffi_type_double; + cl_arg_types[1] = &ffi_type_double; + cl_arg_types[2] = &ffi_type_double; + cl_arg_types[3] = &ffi_type_double; + cl_arg_types[4] = &ffi_type_sshort; + cl_arg_types[5] = &ffi_type_double; + cl_arg_types[6] = &ffi_type_double; + cl_arg_types[7] = &ffi_type_sint; + cl_arg_types[8] = &ffi_type_double; + cl_arg_types[9] = &ffi_type_sint; + cl_arg_types[10] = &ffi_type_sint; + cl_arg_types[11] = &ffi_type_float; + cl_arg_types[12] = &ffi_type_sint; + cl_arg_types[13] = &ffi_type_float; + cl_arg_types[14] = &ffi_type_sint; + cl_arg_types[15] = &ffi_type_sint; + cl_arg_types[16] = NULL; + + /* Initialize the cif */ + CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 16, + &ffi_type_sint, cl_arg_types) == FFI_OK); + + CHECK(ffi_prep_closure_loc(pcl, &cif, closure_test_fn2, + (void *) 3 /* userdata */, code) == FFI_OK); + + res = (*((closure_test_type2)code)) + (1, 2, 3, 4, 127, 5, 6, 8, 9, 10, 11, 12.0, 13, + 19.0, 21, 1); + /* { dg-output "1 2 3 4 127 5 6 8 9 10 11 12 13 19 21 1 3: 255" } */ + printf("res: %d\n",res); + /* { dg-output "\nres: 255" } */ + exit(0); +} Added: python/trunk/Modules/_ctypes/libffi/testsuite/libffi.call/closure_fn3.c ============================================================================== --- (empty file) +++ python/trunk/Modules/_ctypes/libffi/testsuite/libffi.call/closure_fn3.c Mon Mar 15 01:02:36 2010 @@ -0,0 +1,82 @@ +/* Area: closure_call + Purpose: Check multiple values passing from different type. + Also, exceed the limit of gpr and fpr registers on PowerPC + Darwin. + Limitations: none. + PR: none. + Originator: 20030828 */ + +/* { dg-do run } */ +#include "ffitest.h" + +static void closure_test_fn3(ffi_cif* cif __UNUSED__, void* resp, void** args, + void* userdata) + { + *(ffi_arg*)resp = + (int)*(float *)args[0] +(int)(*(float *)args[1]) + + (int)(*(float *)args[2]) + (int)*(float *)args[3] + + (int)(*(float *)args[4]) + (int)(*(float *)args[5]) + + (int)*(float *)args[6] + (int)(*(float *)args[7]) + + (int)(*(double *)args[8]) + (int)*(int *)args[9] + + (int)(*(float *)args[10]) + (int)(*(float *)args[11]) + + (int)*(int *)args[12] + (int)(*(float *)args[13]) + + (int)(*(float *)args[14]) + *(int *)args[15] + (intptr_t)userdata; + + printf("%d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d: %d\n", + (int)*(float *)args[0], (int)(*(float *)args[1]), + (int)(*(float *)args[2]), (int)*(float *)args[3], + (int)(*(float *)args[4]), (int)(*(float *)args[5]), + (int)*(float *)args[6], (int)(*(float *)args[7]), + (int)(*(double *)args[8]), (int)*(int *)args[9], + (int)(*(float *)args[10]), (int)(*(float *)args[11]), + (int)*(int *)args[12], (int)(*(float *)args[13]), + (int)(*(float *)args[14]), *(int *)args[15], (int)(intptr_t)userdata, + (int)*(ffi_arg *)resp); + + } + +typedef int (*closure_test_type3)(float, float, float, float, float, float, + float, float, double, int, float, float, int, + float, float, int); + +int main (void) +{ + ffi_cif cif; + void *code; + ffi_closure *pcl = ffi_closure_alloc(sizeof(ffi_closure), &code); + ffi_type * cl_arg_types[17]; + int res; + + cl_arg_types[0] = &ffi_type_float; + cl_arg_types[1] = &ffi_type_float; + cl_arg_types[2] = &ffi_type_float; + cl_arg_types[3] = &ffi_type_float; + cl_arg_types[4] = &ffi_type_float; + cl_arg_types[5] = &ffi_type_float; + cl_arg_types[6] = &ffi_type_float; + cl_arg_types[7] = &ffi_type_float; + cl_arg_types[8] = &ffi_type_double; + cl_arg_types[9] = &ffi_type_sint; + cl_arg_types[10] = &ffi_type_float; + cl_arg_types[11] = &ffi_type_float; + cl_arg_types[12] = &ffi_type_sint; + cl_arg_types[13] = &ffi_type_float; + cl_arg_types[14] = &ffi_type_float; + cl_arg_types[15] = &ffi_type_sint; + cl_arg_types[16] = NULL; + + /* Initialize the cif */ + CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 16, + &ffi_type_sint, cl_arg_types) == FFI_OK); + + CHECK(ffi_prep_closure_loc(pcl, &cif, closure_test_fn3, + (void *) 3 /* userdata */, code) == FFI_OK); + + res = (*((closure_test_type3)code)) + (1.1, 2.2, 3.3, 4.4, 5.5, 6.6, 7.7, 8.8, 9, 10, 11.11, 12.0, 13, + 19.19, 21.21, 1); + /* { dg-output "1 2 3 4 5 6 7 8 9 10 11 12 13 19 21 1 3: 135" } */ + printf("res: %d\n",res); + /* { dg-output "\nres: 135" } */ + exit(0); +} Added: python/trunk/Modules/_ctypes/libffi/testsuite/libffi.call/closure_fn4.c ============================================================================== --- (empty file) +++ python/trunk/Modules/_ctypes/libffi/testsuite/libffi.call/closure_fn4.c Mon Mar 15 01:02:36 2010 @@ -0,0 +1,89 @@ +/* Area: closure_call + Purpose: Check multiple long long values passing. + Also, exceed the limit of gpr and fpr registers on PowerPC + Darwin. + Limitations: none. + PR: none. + Originator: 20031026 */ + +/* { dg-do run } */ + +#include "ffitest.h" + +static void +closure_test_fn0(ffi_cif* cif __UNUSED__, void* resp, void** args, + void* userdata) +{ + *(ffi_arg*)resp = + (int)*(unsigned long long *)args[0] + (int)*(unsigned long long *)args[1] + + (int)*(unsigned long long *)args[2] + (int)*(unsigned long long *)args[3] + + (int)*(unsigned long long *)args[4] + (int)*(unsigned long long *)args[5] + + (int)*(unsigned long long *)args[6] + (int)*(unsigned long long *)args[7] + + (int)*(unsigned long long *)args[8] + (int)*(unsigned long long *)args[9] + + (int)*(unsigned long long *)args[10] + + (int)*(unsigned long long *)args[11] + + (int)*(unsigned long long *)args[12] + + (int)*(unsigned long long *)args[13] + + (int)*(unsigned long long *)args[14] + + *(int *)args[15] + (intptr_t)userdata; + + printf("%d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d: %d\n", + (int)*(unsigned long long *)args[0], + (int)*(unsigned long long *)args[1], + (int)*(unsigned long long *)args[2], + (int)*(unsigned long long *)args[3], + (int)*(unsigned long long *)args[4], + (int)*(unsigned long long *)args[5], + (int)*(unsigned long long *)args[6], + (int)*(unsigned long long *)args[7], + (int)*(unsigned long long *)args[8], + (int)*(unsigned long long *)args[9], + (int)*(unsigned long long *)args[10], + (int)*(unsigned long long *)args[11], + (int)*(unsigned long long *)args[12], + (int)*(unsigned long long *)args[13], + (int)*(unsigned long long *)args[14], + *(int *)args[15], + (int)(intptr_t)userdata, (int)*(ffi_arg *)resp); + +} + +typedef int (*closure_test_type0)(unsigned long long, unsigned long long, + unsigned long long, unsigned long long, + unsigned long long, unsigned long long, + unsigned long long, unsigned long long, + unsigned long long, unsigned long long, + unsigned long long, unsigned long long, + unsigned long long, unsigned long long, + unsigned long long, int); + +int main (void) +{ + ffi_cif cif; + void *code; + ffi_closure *pcl = ffi_closure_alloc(sizeof(ffi_closure), &code); + ffi_type * cl_arg_types[17]; + int i, res; + + for (i = 0; i < 15; i++) { + cl_arg_types[i] = &ffi_type_uint64; + } + cl_arg_types[15] = &ffi_type_sint; + cl_arg_types[16] = NULL; + + /* Initialize the cif */ + CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 16, + &ffi_type_sint, cl_arg_types) == FFI_OK); + + CHECK(ffi_prep_closure_loc(pcl, &cif, closure_test_fn0, + (void *) 3 /* userdata */, code) == FFI_OK); + + res = (*((closure_test_type0)code)) + (1LL, 2LL, 3LL, 4LL, 127LL, 429LL, 7LL, 8LL, 9LL, 10LL, 11LL, 12LL, + 13LL, 19LL, 21LL, 1); + /* { dg-output "1 2 3 4 127 429 7 8 9 10 11 12 13 19 21 1 3: 680" } */ + printf("res: %d\n",res); + /* { dg-output "\nres: 680" } */ + + exit(0); +} Added: python/trunk/Modules/_ctypes/libffi/testsuite/libffi.call/closure_fn5.c ============================================================================== --- (empty file) +++ python/trunk/Modules/_ctypes/libffi/testsuite/libffi.call/closure_fn5.c Mon Mar 15 01:02:36 2010 @@ -0,0 +1,92 @@ +/* Area: closure_call + Purpose: Check multiple long long values passing. + Exceed the limit of gpr registers on PowerPC + Darwin. + Limitations: none. + PR: none. + Originator: 20031026 */ + +/* { dg-do run } */ +#include "ffitest.h" + +static void +closure_test_fn5(ffi_cif* cif __UNUSED__, void* resp, void** args, + void* userdata) +{ + *(ffi_arg*)resp = + (int)*(unsigned long long *)args[0] + (int)*(unsigned long long *)args[1] + + (int)*(unsigned long long *)args[2] + (int)*(unsigned long long *)args[3] + + (int)*(unsigned long long *)args[4] + (int)*(unsigned long long *)args[5] + + (int)*(unsigned long long *)args[6] + (int)*(unsigned long long *)args[7] + + (int)*(unsigned long long *)args[8] + (int)*(unsigned long long *)args[9] + + (int)*(int *)args[10] + + (int)*(unsigned long long *)args[11] + + (int)*(unsigned long long *)args[12] + + (int)*(unsigned long long *)args[13] + + (int)*(unsigned long long *)args[14] + + *(int *)args[15] + (intptr_t)userdata; + + printf("%d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d: %d\n", + (int)*(unsigned long long *)args[0], + (int)*(unsigned long long *)args[1], + (int)*(unsigned long long *)args[2], + (int)*(unsigned long long *)args[3], + (int)*(unsigned long long *)args[4], + (int)*(unsigned long long *)args[5], + (int)*(unsigned long long *)args[6], + (int)*(unsigned long long *)args[7], + (int)*(unsigned long long *)args[8], + (int)*(unsigned long long *)args[9], + (int)*(int *)args[10], + (int)*(unsigned long long *)args[11], + (int)*(unsigned long long *)args[12], + (int)*(unsigned long long *)args[13], + (int)*(unsigned long long *)args[14], + *(int *)args[15], + (int)(intptr_t)userdata, (int)*(ffi_arg *)resp); + +} + +typedef int (*closure_test_type0)(unsigned long long, unsigned long long, + unsigned long long, unsigned long long, + unsigned long long, unsigned long long, + unsigned long long, unsigned long long, + unsigned long long, unsigned long long, + int, unsigned long long, + unsigned long long, unsigned long long, + unsigned long long, int); + +int main (void) +{ + ffi_cif cif; + void *code; + ffi_closure *pcl = ffi_closure_alloc(sizeof(ffi_closure), &code); + ffi_type * cl_arg_types[17]; + int i, res; + + for (i = 0; i < 10; i++) { + cl_arg_types[i] = &ffi_type_uint64; + } + cl_arg_types[10] = &ffi_type_sint; + for (i = 11; i < 15; i++) { + cl_arg_types[i] = &ffi_type_uint64; + } + cl_arg_types[15] = &ffi_type_sint; + cl_arg_types[16] = NULL; + + /* Initialize the cif */ + CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 16, + &ffi_type_sint, cl_arg_types) == FFI_OK); + + CHECK(ffi_prep_closure_loc(pcl, &cif, closure_test_fn5, + (void *) 3 /* userdata */, code) == FFI_OK); + + res = (*((closure_test_type0)code)) + (1LL, 2LL, 3LL, 4LL, 127LL, 429LL, 7LL, 8LL, 9LL, 10LL, 11, 12LL, + 13LL, 19LL, 21LL, 1); + /* { dg-output "1 2 3 4 127 429 7 8 9 10 11 12 13 19 21 1 3: 680" } */ + printf("res: %d\n",res); + /* { dg-output "\nres: 680" } */ + + exit(0); +} Added: python/trunk/Modules/_ctypes/libffi/testsuite/libffi.call/closure_fn6.c ============================================================================== --- (empty file) +++ python/trunk/Modules/_ctypes/libffi/testsuite/libffi.call/closure_fn6.c Mon Mar 15 01:02:36 2010 @@ -0,0 +1,90 @@ +/* Area: closure_call + Purpose: Check multiple values passing from different type. + Also, exceed the limit of gpr and fpr registers on PowerPC. + Limitations: none. + PR: PR23404 + Originator: 20050830 */ + +/* { dg-do run } */ +#include "ffitest.h" + +static void +closure_test_fn0(ffi_cif* cif __UNUSED__, void* resp, void** args, + void* userdata) +{ + *(ffi_arg*)resp = + (int)*(unsigned long long *)args[0] + + (int)(*(unsigned long long *)args[1]) + + (int)(*(unsigned long long *)args[2]) + + (int)*(unsigned long long *)args[3] + + (int)(*(int *)args[4]) + (int)(*(double *)args[5]) + + (int)*(double *)args[6] + (int)(*(float *)args[7]) + + (int)(*(double *)args[8]) + (int)*(double *)args[9] + + (int)(*(int *)args[10]) + (int)(*(float *)args[11]) + + (int)*(int *)args[12] + (int)(*(int *)args[13]) + + (int)(*(double *)args[14]) + (int)*(double *)args[15] + + (intptr_t)userdata; + + printf("%d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d: %d\n", + (int)*(unsigned long long *)args[0], + (int)(*(unsigned long long *)args[1]), + (int)(*(unsigned long long *)args[2]), + (int)*(unsigned long long *)args[3], + (int)(*(int *)args[4]), (int)(*(double *)args[5]), + (int)*(double *)args[6], (int)(*(float *)args[7]), + (int)(*(double *)args[8]), (int)*(double *)args[9], + (int)(*(int *)args[10]), (int)(*(float *)args[11]), + (int)*(int *)args[12], (int)(*(int *)args[13]), + (int)(*(double *)args[14]), (int)(*(double *)args[15]), + (int)(intptr_t)userdata, (int)*(ffi_arg *)resp); + +} + +typedef int (*closure_test_type0)(unsigned long long, + unsigned long long, + unsigned long long, + unsigned long long, + int, double, double, float, double, double, + int, float, int, int, double, double); + +int main (void) +{ + ffi_cif cif; + void *code; + ffi_closure *pcl = ffi_closure_alloc(sizeof(ffi_closure), &code); + ffi_type * cl_arg_types[17]; + int res; + + cl_arg_types[0] = &ffi_type_uint64; + cl_arg_types[1] = &ffi_type_uint64; + cl_arg_types[2] = &ffi_type_uint64; + cl_arg_types[3] = &ffi_type_uint64; + cl_arg_types[4] = &ffi_type_sint; + cl_arg_types[5] = &ffi_type_double; + cl_arg_types[6] = &ffi_type_double; + cl_arg_types[7] = &ffi_type_float; + cl_arg_types[8] = &ffi_type_double; + cl_arg_types[9] = &ffi_type_double; + cl_arg_types[10] = &ffi_type_sint; + cl_arg_types[11] = &ffi_type_float; + cl_arg_types[12] = &ffi_type_sint; + cl_arg_types[13] = &ffi_type_sint; + cl_arg_types[14] = &ffi_type_double; + cl_arg_types[15] = &ffi_type_double; + cl_arg_types[16] = NULL; + + /* Initialize the cif */ + CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 16, + &ffi_type_sint, cl_arg_types) == FFI_OK); + + CHECK(ffi_prep_closure_loc(pcl, &cif, closure_test_fn0, + (void *) 3 /* userdata */, code) == FFI_OK); + + res = (*((closure_test_type0)code)) + (1, 2, 3, 4, 127, 429., 7., 8., 9.5, 10., 11, 12., 13, + 19, 21., 1.); + /* { dg-output "1 2 3 4 127 429 7 8 9 10 11 12 13 19 21 1 3: 680" } */ + printf("res: %d\n",res); + /* { dg-output "\nres: 680" } */ + exit(0); +} Added: python/trunk/Modules/_ctypes/libffi/testsuite/libffi.call/closure_loc_fn0.c ============================================================================== --- (empty file) +++ python/trunk/Modules/_ctypes/libffi/testsuite/libffi.call/closure_loc_fn0.c Mon Mar 15 01:02:36 2010 @@ -0,0 +1,95 @@ +/* Area: closure_call + Purpose: Check multiple values passing from different type. + Also, exceed the limit of gpr and fpr registers on PowerPC + Darwin. + Limitations: none. + PR: none. + Originator: 20030828 */ + + + + +/* { dg-do run } */ +#include "ffitest.h" + +static void +closure_loc_test_fn0(ffi_cif* cif __UNUSED__, void* resp, void** args, + void* userdata) +{ + *(ffi_arg*)resp = + (int)*(unsigned long long *)args[0] + (int)(*(int *)args[1]) + + (int)(*(unsigned long long *)args[2]) + (int)*(int *)args[3] + + (int)(*(signed short *)args[4]) + + (int)(*(unsigned long long *)args[5]) + + (int)*(int *)args[6] + (int)(*(int *)args[7]) + + (int)(*(double *)args[8]) + (int)*(int *)args[9] + + (int)(*(int *)args[10]) + (int)(*(float *)args[11]) + + (int)*(int *)args[12] + (int)(*(int *)args[13]) + + (int)(*(int *)args[14]) + *(int *)args[15] + (intptr_t)userdata; + + printf("%d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d: %d\n", + (int)*(unsigned long long *)args[0], (int)(*(int *)args[1]), + (int)(*(unsigned long long *)args[2]), + (int)*(int *)args[3], (int)(*(signed short *)args[4]), + (int)(*(unsigned long long *)args[5]), + (int)*(int *)args[6], (int)(*(int *)args[7]), + (int)(*(double *)args[8]), (int)*(int *)args[9], + (int)(*(int *)args[10]), (int)(*(float *)args[11]), + (int)*(int *)args[12], (int)(*(int *)args[13]), + (int)(*(int *)args[14]),*(int *)args[15], + (int)(intptr_t)userdata, (int)*(ffi_arg *)resp); + +} + +typedef int (*closure_loc_test_type0)(unsigned long long, int, unsigned long long, + int, signed short, unsigned long long, int, + int, double, int, int, float, int, int, + int, int); + +int main (void) +{ + ffi_cif cif; + ffi_closure *pcl; + ffi_type * cl_arg_types[17]; + int res; + void *codeloc; + + cl_arg_types[0] = &ffi_type_uint64; + cl_arg_types[1] = &ffi_type_sint; + cl_arg_types[2] = &ffi_type_uint64; + cl_arg_types[3] = &ffi_type_sint; + cl_arg_types[4] = &ffi_type_sshort; + cl_arg_types[5] = &ffi_type_uint64; + cl_arg_types[6] = &ffi_type_sint; + cl_arg_types[7] = &ffi_type_sint; + cl_arg_types[8] = &ffi_type_double; + cl_arg_types[9] = &ffi_type_sint; + cl_arg_types[10] = &ffi_type_sint; + cl_arg_types[11] = &ffi_type_float; + cl_arg_types[12] = &ffi_type_sint; + cl_arg_types[13] = &ffi_type_sint; + cl_arg_types[14] = &ffi_type_sint; + cl_arg_types[15] = &ffi_type_sint; + cl_arg_types[16] = NULL; + + /* Initialize the cif */ + CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 16, + &ffi_type_sint, cl_arg_types) == FFI_OK); + + pcl = ffi_closure_alloc(sizeof(ffi_closure), &codeloc); + CHECK(pcl != NULL); + CHECK(codeloc != NULL); + + CHECK(ffi_prep_closure_loc(pcl, &cif, closure_loc_test_fn0, + (void *) 3 /* userdata */, codeloc) == FFI_OK); + + CHECK(memcmp(pcl, codeloc, sizeof(*pcl)) == 0); + + res = (*((closure_loc_test_type0)codeloc)) + (1LL, 2, 3LL, 4, 127, 429LL, 7, 8, 9.5, 10, 11, 12, 13, + 19, 21, 1); + /* { dg-output "1 2 3 4 127 429 7 8 9 10 11 12 13 19 21 1 3: 680" } */ + printf("res: %d\n",res); + /* { dg-output "\nres: 680" } */ + exit(0); +} Added: python/trunk/Modules/_ctypes/libffi/testsuite/libffi.call/closure_stdcall.c ============================================================================== --- (empty file) +++ python/trunk/Modules/_ctypes/libffi/testsuite/libffi.call/closure_stdcall.c Mon Mar 15 01:02:36 2010 @@ -0,0 +1,64 @@ +/* Area: closure_call (stdcall convention) + Purpose: Check handling when caller expects stdcall callee + Limitations: none. + PR: none. + Originator: */ + +/* { dg-do run { target i?86-*-cygwin* i?86-*-mingw* } } */ +#include "ffitest.h" + +static void +closure_test_stdcall(ffi_cif* cif __UNUSED__, void* resp, void** args, + void* userdata) +{ + *(ffi_arg*)resp = + (int)*(int *)args[0] + (int)(*(int *)args[1]) + + (int)(*(int *)args[2]) + (int)(*(int *)args[3]) + + (int)(intptr_t)userdata; + + printf("%d %d %d %d: %d\n", + (int)*(int *)args[0], (int)(*(int *)args[1]), + (int)(*(int *)args[2]), (int)(*(int *)args[3]), + (int)*(ffi_arg *)resp); + +} + +typedef int (__stdcall *closure_test_type0)(int, int, int, int); + +int main (void) +{ + ffi_cif cif; + void *code; + ffi_closure *pcl = ffi_closure_alloc(sizeof(ffi_closure), &code); + ffi_type * cl_arg_types[17]; + int res; + void* sp_pre; + void* sp_post; + char buf[1024]; + + cl_arg_types[0] = &ffi_type_uint; + cl_arg_types[1] = &ffi_type_uint; + cl_arg_types[2] = &ffi_type_uint; + cl_arg_types[3] = &ffi_type_uint; + cl_arg_types[4] = NULL; + + /* Initialize the cif */ + CHECK(ffi_prep_cif(&cif, FFI_STDCALL, 4, + &ffi_type_sint, cl_arg_types) == FFI_OK); + + CHECK(ffi_prep_closure_loc(pcl, &cif, closure_test_stdcall, + (void *) 3 /* userdata */, code) == FFI_OK); + + asm volatile (" movl %%esp,%0" : "=g" (sp_pre)); + res = (*(closure_test_type0)code)(0, 1, 2, 3); + asm volatile (" movl %%esp,%0" : "=g" (sp_post)); + /* { dg-output "0 1 2 3: 9" } */ + + printf("res: %d\n",res); + /* { dg-output "\nres: 9" } */ + + sprintf(buf, "mismatch: pre=%p vs post=%p", sp_pre, sp_post); + printf("stack pointer %s\n", (sp_pre == sp_post ? "match" : buf)); + /* { dg-output "\nstack pointer match" } */ + exit(0); +} Added: python/trunk/Modules/_ctypes/libffi/testsuite/libffi.call/cls_12byte.c ============================================================================== --- (empty file) +++ python/trunk/Modules/_ctypes/libffi/testsuite/libffi.call/cls_12byte.c Mon Mar 15 01:02:36 2010 @@ -0,0 +1,94 @@ +/* Area: ffi_call, closure_call + Purpose: Check structure passing with different structure size. + Limitations: none. + PR: none. + Originator: 20030828 */ + +/* { dg-do run } */ +#include "ffitest.h" + +typedef struct cls_struct_12byte { + int a; + int b; + int c; +} cls_struct_12byte; + +cls_struct_12byte cls_struct_12byte_fn(struct cls_struct_12byte b1, + struct cls_struct_12byte b2) +{ + struct cls_struct_12byte result; + + result.a = b1.a + b2.a; + result.b = b1.b + b2.b; + result.c = b1.c + b2.c; + + printf("%d %d %d %d %d %d: %d %d %d\n", b1.a, b1.b, b1.c, b2.a, b2.b, b2.c, + result.a, result.b, result.c); + + return result; +} + +static void cls_struct_12byte_gn(ffi_cif* cif __UNUSED__, void* resp, + void** args , void* userdata __UNUSED__) +{ + struct cls_struct_12byte b1, b2; + + b1 = *(struct cls_struct_12byte*)(args[0]); + b2 = *(struct cls_struct_12byte*)(args[1]); + + *(cls_struct_12byte*)resp = cls_struct_12byte_fn(b1, b2); +} + +int main (void) +{ + ffi_cif cif; + void *code; + ffi_closure *pcl = ffi_closure_alloc(sizeof(ffi_closure), &code); + void* args_dbl[5]; + ffi_type* cls_struct_fields[4]; + ffi_type cls_struct_type; + ffi_type* dbl_arg_types[5]; + + cls_struct_type.size = 0; + cls_struct_type.alignment = 0; + cls_struct_type.type = FFI_TYPE_STRUCT; + cls_struct_type.elements = cls_struct_fields; + + struct cls_struct_12byte h_dbl = { 7, 4, 9 }; + struct cls_struct_12byte j_dbl = { 1, 5, 3 }; + struct cls_struct_12byte res_dbl; + + cls_struct_fields[0] = &ffi_type_sint; + cls_struct_fields[1] = &ffi_type_sint; + cls_struct_fields[2] = &ffi_type_sint; + cls_struct_fields[3] = NULL; + + dbl_arg_types[0] = &cls_struct_type; + dbl_arg_types[1] = &cls_struct_type; + dbl_arg_types[2] = NULL; + + CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 2, &cls_struct_type, + dbl_arg_types) == FFI_OK); + + args_dbl[0] = &h_dbl; + args_dbl[1] = &j_dbl; + args_dbl[2] = NULL; + + ffi_call(&cif, FFI_FN(cls_struct_12byte_fn), &res_dbl, args_dbl); + /* { dg-output "7 4 9 1 5 3: 8 9 12" } */ + printf("res: %d %d %d\n", res_dbl.a, res_dbl.b, res_dbl.c); + /* { dg-output "\nres: 8 9 12" } */ + + CHECK(ffi_prep_closure_loc(pcl, &cif, cls_struct_12byte_gn, NULL, code) == FFI_OK); + + res_dbl.a = 0; + res_dbl.b = 0; + res_dbl.c = 0; + + res_dbl = ((cls_struct_12byte(*)(cls_struct_12byte, cls_struct_12byte))(code))(h_dbl, j_dbl); + /* { dg-output "\n7 4 9 1 5 3: 8 9 12" } */ + printf("res: %d %d %d\n", res_dbl.a, res_dbl.b, res_dbl.c); + /* { dg-output "\nres: 8 9 12" } */ + + exit(0); +} Added: python/trunk/Modules/_ctypes/libffi/testsuite/libffi.call/cls_16byte.c ============================================================================== --- (empty file) +++ python/trunk/Modules/_ctypes/libffi/testsuite/libffi.call/cls_16byte.c Mon Mar 15 01:02:36 2010 @@ -0,0 +1,95 @@ +/* Area: ffi_call, closure_call + Purpose: Check structure passing with different structure size. + Depending on the ABI. Check overlapping. + Limitations: none. + PR: none. + Originator: 20030828 */ + +/* { dg-do run } */ +#include "ffitest.h" + +typedef struct cls_struct_16byte { + int a; + double b; + int c; +} cls_struct_16byte; + +cls_struct_16byte cls_struct_16byte_fn(struct cls_struct_16byte b1, + struct cls_struct_16byte b2) +{ + struct cls_struct_16byte result; + + result.a = b1.a + b2.a; + result.b = b1.b + b2.b; + result.c = b1.c + b2.c; + + printf("%d %g %d %d %g %d: %d %g %d\n", b1.a, b1.b, b1.c, b2.a, b2.b, b2.c, + result.a, result.b, result.c); + + return result; +} + +static void cls_struct_16byte_gn(ffi_cif* cif __UNUSED__, void* resp, + void** args, void* userdata __UNUSED__) +{ + struct cls_struct_16byte b1, b2; + + b1 = *(struct cls_struct_16byte*)(args[0]); + b2 = *(struct cls_struct_16byte*)(args[1]); + + *(cls_struct_16byte*)resp = cls_struct_16byte_fn(b1, b2); +} + +int main (void) +{ + ffi_cif cif; + void *code; + ffi_closure *pcl = ffi_closure_alloc(sizeof(ffi_closure), &code); + void* args_dbl[5]; + ffi_type* cls_struct_fields[4]; + ffi_type cls_struct_type; + ffi_type* dbl_arg_types[5]; + + cls_struct_type.size = 0; + cls_struct_type.alignment = 0; + cls_struct_type.type = FFI_TYPE_STRUCT; + cls_struct_type.elements = cls_struct_fields; + + struct cls_struct_16byte h_dbl = { 7, 8.0, 9 }; + struct cls_struct_16byte j_dbl = { 1, 9.0, 3 }; + struct cls_struct_16byte res_dbl; + + cls_struct_fields[0] = &ffi_type_sint; + cls_struct_fields[1] = &ffi_type_double; + cls_struct_fields[2] = &ffi_type_sint; + cls_struct_fields[3] = NULL; + + dbl_arg_types[0] = &cls_struct_type; + dbl_arg_types[1] = &cls_struct_type; + dbl_arg_types[2] = NULL; + + CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 2, &cls_struct_type, + dbl_arg_types) == FFI_OK); + + args_dbl[0] = &h_dbl; + args_dbl[1] = &j_dbl; + args_dbl[2] = NULL; + + ffi_call(&cif, FFI_FN(cls_struct_16byte_fn), &res_dbl, args_dbl); + /* { dg-output "7 8 9 1 9 3: 8 17 12" } */ + printf("res: %d %g %d\n", res_dbl.a, res_dbl.b, res_dbl.c); + /* { dg-output "\nres: 8 17 12" } */ + + res_dbl.a = 0; + res_dbl.b = 0.0; + res_dbl.c = 0; + + CHECK(ffi_prep_closure_loc(pcl, &cif, cls_struct_16byte_gn, NULL, code) == FFI_OK); + + res_dbl = ((cls_struct_16byte(*)(cls_struct_16byte, cls_struct_16byte))(code))(h_dbl, j_dbl); + /* { dg-output "\n7 8 9 1 9 3: 8 17 12" } */ + printf("res: %d %g %d\n", res_dbl.a, res_dbl.b, res_dbl.c); + /* { dg-output "\nres: 8 17 12" } */ + + exit(0); +} Added: python/trunk/Modules/_ctypes/libffi/testsuite/libffi.call/cls_18byte.c ============================================================================== --- (empty file) +++ python/trunk/Modules/_ctypes/libffi/testsuite/libffi.call/cls_18byte.c Mon Mar 15 01:02:36 2010 @@ -0,0 +1,96 @@ +/* Area: ffi_call, closure_call + Purpose: Check structure passing with different structure size. + Depending on the ABI. Double alignment check on darwin. + Limitations: none. + PR: none. + Originator: 20030915 */ + +/* { dg-do run } */ +#include "ffitest.h" + +typedef struct cls_struct_18byte { + double a; + unsigned char b; + unsigned char c; + double d; +} cls_struct_18byte; + +cls_struct_18byte cls_struct_18byte_fn(struct cls_struct_18byte a1, + struct cls_struct_18byte a2) +{ + struct cls_struct_18byte result; + + result.a = a1.a + a2.a; + result.b = a1.b + a2.b; + result.c = a1.c + a2.c; + result.d = a1.d + a2.d; + + + printf("%g %d %d %g %g %d %d %g: %g %d %d %g\n", a1.a, a1.b, a1.c, a1.d, + a2.a, a2.b, a2.c, a2.d, + result.a, result.b, result.c, result.d); + return result; +} + +static void +cls_struct_18byte_gn(ffi_cif* cif __UNUSED__, void* resp, void** args, + void* userdata __UNUSED__) +{ + struct cls_struct_18byte a1, a2; + + a1 = *(struct cls_struct_18byte*)(args[0]); + a2 = *(struct cls_struct_18byte*)(args[1]); + + *(cls_struct_18byte*)resp = cls_struct_18byte_fn(a1, a2); +} + +int main (void) +{ + ffi_cif cif; + void *code; + ffi_closure *pcl = ffi_closure_alloc(sizeof(ffi_closure), &code); + void* args_dbl[3]; + ffi_type* cls_struct_fields[5]; + ffi_type cls_struct_type; + ffi_type* dbl_arg_types[3]; + + cls_struct_type.size = 0; + cls_struct_type.alignment = 0; + cls_struct_type.type = FFI_TYPE_STRUCT; + cls_struct_type.elements = cls_struct_fields; + + struct cls_struct_18byte g_dbl = { 1.0, 127, 126, 3.0 }; + struct cls_struct_18byte f_dbl = { 4.0, 125, 124, 5.0 }; + struct cls_struct_18byte res_dbl; + + cls_struct_fields[0] = &ffi_type_double; + cls_struct_fields[1] = &ffi_type_uchar; + cls_struct_fields[2] = &ffi_type_uchar; + cls_struct_fields[3] = &ffi_type_double; + cls_struct_fields[4] = NULL; + + dbl_arg_types[0] = &cls_struct_type; + dbl_arg_types[1] = &cls_struct_type; + dbl_arg_types[2] = NULL; + + CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 2, &cls_struct_type, + dbl_arg_types) == FFI_OK); + + args_dbl[0] = &g_dbl; + args_dbl[1] = &f_dbl; + args_dbl[2] = NULL; + + ffi_call(&cif, FFI_FN(cls_struct_18byte_fn), &res_dbl, args_dbl); + /* { dg-output "1 127 126 3 4 125 124 5: 5 252 250 8" } */ + printf("res: %g %d %d %g\n", res_dbl.a, res_dbl.b, res_dbl.c, res_dbl.d); + /* { dg-output "\nres: 5 252 250 8" } */ + + CHECK(ffi_prep_closure_loc(pcl, &cif, cls_struct_18byte_gn, NULL, code) == FFI_OK); + + res_dbl = ((cls_struct_18byte(*)(cls_struct_18byte, cls_struct_18byte))(code))(g_dbl, f_dbl); + /* { dg-output "\n1 127 126 3 4 125 124 5: 5 252 250 8" } */ + printf("res: %g %d %d %g\n", res_dbl.a, res_dbl.b, res_dbl.c, res_dbl.d); + /* { dg-output "\nres: 5 252 250 8" } */ + + exit(0); +} Added: python/trunk/Modules/_ctypes/libffi/testsuite/libffi.call/cls_19byte.c ============================================================================== --- (empty file) +++ python/trunk/Modules/_ctypes/libffi/testsuite/libffi.call/cls_19byte.c Mon Mar 15 01:02:36 2010 @@ -0,0 +1,102 @@ +/* Area: ffi_call, closure_call + Purpose: Check structure passing with different structure size. + Depending on the ABI. Double alignment check on darwin. + Limitations: none. + PR: none. + Originator: 20030915 */ + +/* { dg-do run } */ +#include "ffitest.h" + +typedef struct cls_struct_19byte { + double a; + unsigned char b; + unsigned char c; + double d; + unsigned char e; +} cls_struct_19byte; + +cls_struct_19byte cls_struct_19byte_fn(struct cls_struct_19byte a1, + struct cls_struct_19byte a2) +{ + struct cls_struct_19byte result; + + result.a = a1.a + a2.a; + result.b = a1.b + a2.b; + result.c = a1.c + a2.c; + result.d = a1.d + a2.d; + result.e = a1.e + a2.e; + + + printf("%g %d %d %g %d %g %d %d %g %d: %g %d %d %g %d\n", + a1.a, a1.b, a1.c, a1.d, a1.e, + a2.a, a2.b, a2.c, a2.d, a2.e, + result.a, result.b, result.c, result.d, result.e); + return result; +} + +static void +cls_struct_19byte_gn(ffi_cif* cif __UNUSED__, void* resp, void** args, + void* userdata __UNUSED__) +{ + struct cls_struct_19byte a1, a2; + + a1 = *(struct cls_struct_19byte*)(args[0]); + a2 = *(struct cls_struct_19byte*)(args[1]); + + *(cls_struct_19byte*)resp = cls_struct_19byte_fn(a1, a2); +} + +int main (void) +{ + ffi_cif cif; + void *code; + ffi_closure *pcl = ffi_closure_alloc(sizeof(ffi_closure), &code); + void* args_dbl[3]; + ffi_type* cls_struct_fields[6]; + ffi_type cls_struct_type; + ffi_type* dbl_arg_types[3]; + + cls_struct_type.size = 0; + cls_struct_type.alignment = 0; + cls_struct_type.type = FFI_TYPE_STRUCT; + cls_struct_type.elements = cls_struct_fields; + + struct cls_struct_19byte g_dbl = { 1.0, 127, 126, 3.0, 120 }; + struct cls_struct_19byte f_dbl = { 4.0, 125, 124, 5.0, 119 }; + struct cls_struct_19byte res_dbl; + + cls_struct_fields[0] = &ffi_type_double; + cls_struct_fields[1] = &ffi_type_uchar; + cls_struct_fields[2] = &ffi_type_uchar; + cls_struct_fields[3] = &ffi_type_double; + cls_struct_fields[4] = &ffi_type_uchar; + cls_struct_fields[5] = NULL; + + dbl_arg_types[0] = &cls_struct_type; + dbl_arg_types[1] = &cls_struct_type; + dbl_arg_types[2] = NULL; + + CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 2, &cls_struct_type, + dbl_arg_types) == FFI_OK); + + args_dbl[0] = &g_dbl; + args_dbl[1] = &f_dbl; + args_dbl[2] = NULL; + + ffi_call(&cif, FFI_FN(cls_struct_19byte_fn), &res_dbl, args_dbl); + /* { dg-output "1 127 126 3 120 4 125 124 5 119: 5 252 250 8 239" } */ + printf("res: %g %d %d %g %d\n", res_dbl.a, res_dbl.b, res_dbl.c, + res_dbl.d, res_dbl.e); + /* { dg-output "\nres: 5 252 250 8 239" } */ + + CHECK(ffi_prep_closure_loc(pcl, &cif, cls_struct_19byte_gn, NULL, code) == FFI_OK); + + res_dbl = ((cls_struct_19byte(*)(cls_struct_19byte, cls_struct_19byte))(code))(g_dbl, f_dbl); + /* { dg-output "\n1 127 126 3 120 4 125 124 5 119: 5 252 250 8 239" } */ + printf("res: %g %d %d %g %d\n", res_dbl.a, res_dbl.b, res_dbl.c, + res_dbl.d, res_dbl.e); + /* { dg-output "\nres: 5 252 250 8 239" } */ + + exit(0); +} Added: python/trunk/Modules/_ctypes/libffi/testsuite/libffi.call/cls_1_1byte.c ============================================================================== --- (empty file) +++ python/trunk/Modules/_ctypes/libffi/testsuite/libffi.call/cls_1_1byte.c Mon Mar 15 01:02:36 2010 @@ -0,0 +1,89 @@ +/* Area: ffi_call, closure_call + Purpose: Check structure passing with different structure size. + Especially with small structures which may fit in one + register. Depending on the ABI. + Limitations: none. + PR: none. + Originator: 20030902 */ + + + +/* { dg-do run } */ +#include "ffitest.h" + +typedef struct cls_struct_1_1byte { + unsigned char a; +} cls_struct_1_1byte; + +cls_struct_1_1byte cls_struct_1_1byte_fn(struct cls_struct_1_1byte a1, + struct cls_struct_1_1byte a2) +{ + struct cls_struct_1_1byte result; + + result.a = a1.a + a2.a; + + printf("%d %d: %d\n", a1.a, a2.a, result.a); + + return result; +} + +static void +cls_struct_1_1byte_gn(ffi_cif* cif __UNUSED__, void* resp, void** args, + void* userdata __UNUSED__) +{ + + struct cls_struct_1_1byte a1, a2; + + a1 = *(struct cls_struct_1_1byte*)(args[0]); + a2 = *(struct cls_struct_1_1byte*)(args[1]); + + *(cls_struct_1_1byte*)resp = cls_struct_1_1byte_fn(a1, a2); +} + +int main (void) +{ + ffi_cif cif; + void *code; + ffi_closure *pcl = ffi_closure_alloc(sizeof(ffi_closure), &code); + void* args_dbl[5]; + ffi_type* cls_struct_fields[2]; + ffi_type cls_struct_type; + ffi_type* dbl_arg_types[5]; + + cls_struct_type.size = 0; + cls_struct_type.alignment = 0; + cls_struct_type.type = FFI_TYPE_STRUCT; + cls_struct_type.elements = cls_struct_fields; + + struct cls_struct_1_1byte g_dbl = { 12 }; + struct cls_struct_1_1byte f_dbl = { 178 }; + struct cls_struct_1_1byte res_dbl; + + cls_struct_fields[0] = &ffi_type_uchar; + cls_struct_fields[1] = NULL; + + dbl_arg_types[0] = &cls_struct_type; + dbl_arg_types[1] = &cls_struct_type; + dbl_arg_types[2] = NULL; + + CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 2, &cls_struct_type, + dbl_arg_types) == FFI_OK); + + args_dbl[0] = &g_dbl; + args_dbl[1] = &f_dbl; + args_dbl[2] = NULL; + + ffi_call(&cif, FFI_FN(cls_struct_1_1byte_fn), &res_dbl, args_dbl); + /* { dg-output "12 178: 190" } */ + printf("res: %d\n", res_dbl.a); + /* { dg-output "\nres: 190" } */ + + CHECK(ffi_prep_closure_loc(pcl, &cif, cls_struct_1_1byte_gn, NULL, code) == FFI_OK); + + res_dbl = ((cls_struct_1_1byte(*)(cls_struct_1_1byte, cls_struct_1_1byte))(code))(g_dbl, f_dbl); + /* { dg-output "\n12 178: 190" } */ + printf("res: %d\n", res_dbl.a); + /* { dg-output "\nres: 190" } */ + + exit(0); +} Added: python/trunk/Modules/_ctypes/libffi/testsuite/libffi.call/cls_20byte.c ============================================================================== --- (empty file) +++ python/trunk/Modules/_ctypes/libffi/testsuite/libffi.call/cls_20byte.c Mon Mar 15 01:02:36 2010 @@ -0,0 +1,91 @@ +/* Area: ffi_call, closure_call + Purpose: Check structure passing with different structure size. + Depending on the ABI. Check overlapping. + Limitations: none. + PR: none. + Originator: 20030828 */ + +/* { dg-do run } */ +#include "ffitest.h" + +typedef struct cls_struct_20byte { + double a; + double b; + int c; +} cls_struct_20byte; + +cls_struct_20byte cls_struct_20byte_fn(struct cls_struct_20byte a1, + struct cls_struct_20byte a2) +{ + struct cls_struct_20byte result; + + result.a = a1.a + a2.a; + result.b = a1.b + a2.b; + result.c = a1.c + a2.c; + + printf("%g %g %d %g %g %d: %g %g %d\n", a1.a, a1.b, a1.c, a2.a, a2.b, a2.c, + result.a, result.b, result.c); + return result; +} + +static void +cls_struct_20byte_gn(ffi_cif* cif __UNUSED__, void* resp, void** args, + void* userdata __UNUSED__) +{ + struct cls_struct_20byte a1, a2; + + a1 = *(struct cls_struct_20byte*)(args[0]); + a2 = *(struct cls_struct_20byte*)(args[1]); + + *(cls_struct_20byte*)resp = cls_struct_20byte_fn(a1, a2); +} + +int main (void) +{ + ffi_cif cif; + void *code; + ffi_closure *pcl = ffi_closure_alloc(sizeof(ffi_closure), &code); + void* args_dbl[5]; + ffi_type* cls_struct_fields[4]; + ffi_type cls_struct_type; + ffi_type* dbl_arg_types[5]; + + cls_struct_type.size = 0; + cls_struct_type.alignment = 0; + cls_struct_type.type = FFI_TYPE_STRUCT; + cls_struct_type.elements = cls_struct_fields; + + struct cls_struct_20byte g_dbl = { 1.0, 2.0, 3 }; + struct cls_struct_20byte f_dbl = { 4.0, 5.0, 7 }; + struct cls_struct_20byte res_dbl; + + cls_struct_fields[0] = &ffi_type_double; + cls_struct_fields[1] = &ffi_type_double; + cls_struct_fields[2] = &ffi_type_sint; + cls_struct_fields[3] = NULL; + + dbl_arg_types[0] = &cls_struct_type; + dbl_arg_types[1] = &cls_struct_type; + dbl_arg_types[2] = NULL; + + CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 2, &cls_struct_type, + dbl_arg_types) == FFI_OK); + + args_dbl[0] = &g_dbl; + args_dbl[1] = &f_dbl; + args_dbl[2] = NULL; + + ffi_call(&cif, FFI_FN(cls_struct_20byte_fn), &res_dbl, args_dbl); + /* { dg-output "1 2 3 4 5 7: 5 7 10" } */ + printf("res: %g %g %d\n", res_dbl.a, res_dbl.b, res_dbl.c); + /* { dg-output "\nres: 5 7 10" } */ + + CHECK(ffi_prep_closure_loc(pcl, &cif, cls_struct_20byte_gn, NULL, code) == FFI_OK); + + res_dbl = ((cls_struct_20byte(*)(cls_struct_20byte, cls_struct_20byte))(code))(g_dbl, f_dbl); + /* { dg-output "\n1 2 3 4 5 7: 5 7 10" } */ + printf("res: %g %g %d\n", res_dbl.a, res_dbl.b, res_dbl.c); + /* { dg-output "\nres: 5 7 10" } */ + + exit(0); +} Added: python/trunk/Modules/_ctypes/libffi/testsuite/libffi.call/cls_20byte1.c ============================================================================== --- (empty file) +++ python/trunk/Modules/_ctypes/libffi/testsuite/libffi.call/cls_20byte1.c Mon Mar 15 01:02:36 2010 @@ -0,0 +1,93 @@ +/* Area: ffi_call, closure_call + Purpose: Check structure passing with different structure size. + Depending on the ABI. Check overlapping. + Limitations: none. + PR: none. + Originator: 20030828 */ + + + +/* { dg-do run } */ +#include "ffitest.h" + +typedef struct cls_struct_20byte { + int a; + double b; + double c; +} cls_struct_20byte; + +cls_struct_20byte cls_struct_20byte_fn(struct cls_struct_20byte a1, + struct cls_struct_20byte a2) +{ + struct cls_struct_20byte result; + + result.a = a1.a + a2.a; + result.b = a1.b + a2.b; + result.c = a1.c + a2.c; + + printf("%d %g %g %d %g %g: %d %g %g\n", a1.a, a1.b, a1.c, a2.a, a2.b, a2.c, + result.a, result.b, result.c); + return result; +} + +static void +cls_struct_20byte_gn(ffi_cif* cif __UNUSED__, void* resp, void** args, + void* userdata __UNUSED__) +{ + struct cls_struct_20byte a1, a2; + + a1 = *(struct cls_struct_20byte*)(args[0]); + a2 = *(struct cls_struct_20byte*)(args[1]); + + *(cls_struct_20byte*)resp = cls_struct_20byte_fn(a1, a2); +} + +int main (void) +{ + ffi_cif cif; + void *code; + ffi_closure *pcl = ffi_closure_alloc(sizeof(ffi_closure), &code); + void* args_dbl[3]; + ffi_type* cls_struct_fields[4]; + ffi_type cls_struct_type; + ffi_type* dbl_arg_types[3]; + + cls_struct_type.size = 0; + cls_struct_type.alignment = 0; + cls_struct_type.type = FFI_TYPE_STRUCT; + cls_struct_type.elements = cls_struct_fields; + + struct cls_struct_20byte g_dbl = { 1, 2.0, 3.0 }; + struct cls_struct_20byte f_dbl = { 4, 5.0, 7.0 }; + struct cls_struct_20byte res_dbl; + + cls_struct_fields[0] = &ffi_type_sint; + cls_struct_fields[1] = &ffi_type_double; + cls_struct_fields[2] = &ffi_type_double; + cls_struct_fields[3] = NULL; + + dbl_arg_types[0] = &cls_struct_type; + dbl_arg_types[1] = &cls_struct_type; + dbl_arg_types[2] = NULL; + + CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 2, &cls_struct_type, + dbl_arg_types) == FFI_OK); + + args_dbl[0] = &g_dbl; + args_dbl[1] = &f_dbl; + args_dbl[2] = NULL; + + ffi_call(&cif, FFI_FN(cls_struct_20byte_fn), &res_dbl, args_dbl); + /* { dg-output "1 2 3 4 5 7: 5 7 10" } */ + printf("res: %d %g %g\n", res_dbl.a, res_dbl.b, res_dbl.c); + /* { dg-output "\nres: 5 7 10" } */ + + CHECK(ffi_prep_closure_loc(pcl, &cif, cls_struct_20byte_gn, NULL, code) == FFI_OK); + + res_dbl = ((cls_struct_20byte(*)(cls_struct_20byte, cls_struct_20byte))(code))(g_dbl, f_dbl); + /* { dg-output "\n1 2 3 4 5 7: 5 7 10" } */ + printf("res: %d %g %g\n", res_dbl.a, res_dbl.b, res_dbl.c); + /* { dg-output "\nres: 5 7 10" } */ + + exit(0); +} Added: python/trunk/Modules/_ctypes/libffi/testsuite/libffi.call/cls_24byte.c ============================================================================== --- (empty file) +++ python/trunk/Modules/_ctypes/libffi/testsuite/libffi.call/cls_24byte.c Mon Mar 15 01:02:36 2010 @@ -0,0 +1,113 @@ +/* Area: ffi_call, closure_call + Purpose: Check structure passing with different structure size. + Depending on the ABI. Check overlapping. + Limitations: none. + PR: none. + Originator: 20030828 */ + +/* { dg-do run } */ +#include "ffitest.h" + +typedef struct cls_struct_24byte { + double a; + double b; + int c; + float d; +} cls_struct_24byte; + +cls_struct_24byte cls_struct_24byte_fn(struct cls_struct_24byte b0, + struct cls_struct_24byte b1, + struct cls_struct_24byte b2, + struct cls_struct_24byte b3) +{ + struct cls_struct_24byte result; + + result.a = b0.a + b1.a + b2.a + b3.a; + result.b = b0.b + b1.b + b2.b + b3.b; + result.c = b0.c + b1.c + b2.c + b3.c; + result.d = b0.d + b1.d + b2.d + b3.d; + + printf("%g %g %d %g %g %g %d %g %g %g %d %g %g %g %d %g: %g %g %d %g\n", + b0.a, b0.b, b0.c, b0.d, + b1.a, b1.b, b1.c, b1.d, + b2.a, b2.b, b2.c, b2.d, + b3.a, b3.b, b3.c, b2.d, + result.a, result.b, result.c, result.d); + + return result; +} + +static void +cls_struct_24byte_gn(ffi_cif* cif __UNUSED__, void* resp, void** args, + void* userdata __UNUSED__) +{ + struct cls_struct_24byte b0, b1, b2, b3; + + b0 = *(struct cls_struct_24byte*)(args[0]); + b1 = *(struct cls_struct_24byte*)(args[1]); + b2 = *(struct cls_struct_24byte*)(args[2]); + b3 = *(struct cls_struct_24byte*)(args[3]); + + *(cls_struct_24byte*)resp = cls_struct_24byte_fn(b0, b1, b2, b3); +} + +int main (void) +{ + ffi_cif cif; + void *code; + ffi_closure *pcl = ffi_closure_alloc(sizeof(ffi_closure), &code); + void* args_dbl[5]; + ffi_type* cls_struct_fields[5]; + ffi_type cls_struct_type; + ffi_type* dbl_arg_types[5]; + + cls_struct_type.size = 0; + cls_struct_type.alignment = 0; + cls_struct_type.type = FFI_TYPE_STRUCT; + cls_struct_type.elements = cls_struct_fields; + + struct cls_struct_24byte e_dbl = { 9.0, 2.0, 6, 5.0 }; + struct cls_struct_24byte f_dbl = { 1.0, 2.0, 3, 7.0 }; + struct cls_struct_24byte g_dbl = { 4.0, 5.0, 7, 9.0 }; + struct cls_struct_24byte h_dbl = { 8.0, 6.0, 1, 4.0 }; + struct cls_struct_24byte res_dbl; + + cls_struct_fields[0] = &ffi_type_double; + cls_struct_fields[1] = &ffi_type_double; + cls_struct_fields[2] = &ffi_type_sint; + cls_struct_fields[3] = &ffi_type_float; + cls_struct_fields[4] = NULL; + + dbl_arg_types[0] = &cls_struct_type; + dbl_arg_types[1] = &cls_struct_type; + dbl_arg_types[2] = &cls_struct_type; + dbl_arg_types[3] = &cls_struct_type; + dbl_arg_types[4] = NULL; + + CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 4, &cls_struct_type, + dbl_arg_types) == FFI_OK); + + args_dbl[0] = &e_dbl; + args_dbl[1] = &f_dbl; + args_dbl[2] = &g_dbl; + args_dbl[3] = &h_dbl; + args_dbl[4] = NULL; + + ffi_call(&cif, FFI_FN(cls_struct_24byte_fn), &res_dbl, args_dbl); + /* { dg-output "9 2 6 5 1 2 3 7 4 5 7 9 8 6 1 9: 22 15 17 25" } */ + printf("res: %g %g %d %g\n", res_dbl.a, res_dbl.b, res_dbl.c, res_dbl.d); + /* { dg-output "\nres: 22 15 17 25" } */ + + CHECK(ffi_prep_closure_loc(pcl, &cif, cls_struct_24byte_gn, NULL, code) == FFI_OK); + + res_dbl = ((cls_struct_24byte(*)(cls_struct_24byte, + cls_struct_24byte, + cls_struct_24byte, + cls_struct_24byte)) + (code))(e_dbl, f_dbl, g_dbl, h_dbl); + /* { dg-output "\n9 2 6 5 1 2 3 7 4 5 7 9 8 6 1 9: 22 15 17 25" } */ + printf("res: %g %g %d %g\n", res_dbl.a, res_dbl.b, res_dbl.c, res_dbl.d); + /* { dg-output "\nres: 22 15 17 25" } */ + + exit(0); +} Added: python/trunk/Modules/_ctypes/libffi/testsuite/libffi.call/cls_2byte.c ============================================================================== --- (empty file) +++ python/trunk/Modules/_ctypes/libffi/testsuite/libffi.call/cls_2byte.c Mon Mar 15 01:02:36 2010 @@ -0,0 +1,90 @@ +/* Area: ffi_call, closure_call + Purpose: Check structure passing with different structure size. + Especially with small structures which may fit in one + register. Depending on the ABI. + Limitations: none. + PR: none. + Originator: 20030828 */ + +/* { dg-do run } */ +#include "ffitest.h" + +typedef struct cls_struct_2byte { + unsigned char a; + unsigned char b; +} cls_struct_2byte; + +cls_struct_2byte cls_struct_2byte_fn(struct cls_struct_2byte a1, + struct cls_struct_2byte a2) +{ + struct cls_struct_2byte result; + + result.a = a1.a + a2.a; + result.b = a1.b + a2.b; + + printf("%d %d %d %d: %d %d\n", a1.a, a1.b, a2.a, a2.b, result.a, result.b); + + return result; +} + +static void +cls_struct_2byte_gn(ffi_cif* cif __UNUSED__, void* resp, void** args, + void* userdata __UNUSED__) +{ + + struct cls_struct_2byte a1, a2; + + a1 = *(struct cls_struct_2byte*)(args[0]); + a2 = *(struct cls_struct_2byte*)(args[1]); + + *(cls_struct_2byte*)resp = cls_struct_2byte_fn(a1, a2); +} + +int main (void) +{ + ffi_cif cif; + void *code; + ffi_closure *pcl = ffi_closure_alloc(sizeof(ffi_closure), &code); + void* args_dbl[5]; + ffi_type* cls_struct_fields[4]; + ffi_type cls_struct_type; + ffi_type* dbl_arg_types[5]; + + cls_struct_type.size = 0; + cls_struct_type.alignment = 0; + cls_struct_type.type = FFI_TYPE_STRUCT; + cls_struct_type.elements = cls_struct_fields; + + struct cls_struct_2byte g_dbl = { 12, 127 }; + struct cls_struct_2byte f_dbl = { 1, 13 }; + struct cls_struct_2byte res_dbl; + + cls_struct_fields[0] = &ffi_type_uchar; + cls_struct_fields[1] = &ffi_type_uchar; + cls_struct_fields[2] = NULL; + + dbl_arg_types[0] = &cls_struct_type; + dbl_arg_types[1] = &cls_struct_type; + dbl_arg_types[2] = NULL; + + CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 2, &cls_struct_type, + dbl_arg_types) == FFI_OK); + + args_dbl[0] = &g_dbl; + args_dbl[1] = &f_dbl; + args_dbl[2] = NULL; + + ffi_call(&cif, FFI_FN(cls_struct_2byte_fn), &res_dbl, args_dbl); + /* { dg-output "12 127 1 13: 13 140" } */ + printf("res: %d %d\n", res_dbl.a, res_dbl.b); + /* { dg-output "\nres: 13 140" } */ + + CHECK(ffi_prep_closure_loc(pcl, &cif, cls_struct_2byte_gn, NULL, code) == FFI_OK); + + res_dbl = ((cls_struct_2byte(*)(cls_struct_2byte, cls_struct_2byte))(code))(g_dbl, f_dbl); + /* { dg-output "\n12 127 1 13: 13 140" } */ + printf("res: %d %d\n", res_dbl.a, res_dbl.b); + /* { dg-output "\nres: 13 140" } */ + + exit(0); +} Added: python/trunk/Modules/_ctypes/libffi/testsuite/libffi.call/cls_3_1byte.c ============================================================================== --- (empty file) +++ python/trunk/Modules/_ctypes/libffi/testsuite/libffi.call/cls_3_1byte.c Mon Mar 15 01:02:36 2010 @@ -0,0 +1,95 @@ +/* Area: ffi_call, closure_call + Purpose: Check structure passing with different structure size. + Especially with small structures which may fit in one + register. Depending on the ABI. + Limitations: none. + PR: none. + Originator: 20030902 */ + +/* { dg-do run } */ +#include "ffitest.h" + +typedef struct cls_struct_3_1byte { + unsigned char a; + unsigned char b; + unsigned char c; +} cls_struct_3_1byte; + +cls_struct_3_1byte cls_struct_3_1byte_fn(struct cls_struct_3_1byte a1, + struct cls_struct_3_1byte a2) +{ + struct cls_struct_3_1byte result; + + result.a = a1.a + a2.a; + result.b = a1.b + a2.b; + result.c = a1.c + a2.c; + + printf("%d %d %d %d %d %d: %d %d %d\n", a1.a, a1.b, a1.c, + a2.a, a2.b, a2.c, + result.a, result.b, result.c); + + return result; +} + +static void +cls_struct_3_1byte_gn(ffi_cif* cif __UNUSED__, void* resp, void** args, + void* userdata __UNUSED__) +{ + + struct cls_struct_3_1byte a1, a2; + + a1 = *(struct cls_struct_3_1byte*)(args[0]); + a2 = *(struct cls_struct_3_1byte*)(args[1]); + + *(cls_struct_3_1byte*)resp = cls_struct_3_1byte_fn(a1, a2); +} + +int main (void) +{ + ffi_cif cif; + void *code; + ffi_closure *pcl = ffi_closure_alloc(sizeof(ffi_closure), &code); + void* args_dbl[5]; + ffi_type* cls_struct_fields[4]; + ffi_type cls_struct_type; + ffi_type* dbl_arg_types[5]; + + cls_struct_type.size = 0; + cls_struct_type.alignment = 0; + cls_struct_type.type = FFI_TYPE_STRUCT; + cls_struct_type.elements = cls_struct_fields; + + struct cls_struct_3_1byte g_dbl = { 12, 13, 14 }; + struct cls_struct_3_1byte f_dbl = { 178, 179, 180 }; + struct cls_struct_3_1byte res_dbl; + + cls_struct_fields[0] = &ffi_type_uchar; + cls_struct_fields[1] = &ffi_type_uchar; + cls_struct_fields[2] = &ffi_type_uchar; + cls_struct_fields[3] = NULL; + + dbl_arg_types[0] = &cls_struct_type; + dbl_arg_types[1] = &cls_struct_type; + dbl_arg_types[2] = NULL; + + CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 2, &cls_struct_type, + dbl_arg_types) == FFI_OK); + + args_dbl[0] = &g_dbl; + args_dbl[1] = &f_dbl; + args_dbl[2] = NULL; + + ffi_call(&cif, FFI_FN(cls_struct_3_1byte_fn), &res_dbl, args_dbl); + /* { dg-output "12 13 14 178 179 180: 190 192 194" } */ + printf("res: %d %d %d\n", res_dbl.a, res_dbl.b, res_dbl.c); + /* { dg-output "\nres: 190 192 194" } */ + + CHECK(ffi_prep_closure_loc(pcl, &cif, cls_struct_3_1byte_gn, NULL, code) == FFI_OK); + + res_dbl = ((cls_struct_3_1byte(*)(cls_struct_3_1byte, cls_struct_3_1byte))(code))(g_dbl, f_dbl); + /* { dg-output "\n12 13 14 178 179 180: 190 192 194" } */ + printf("res: %d %d %d\n", res_dbl.a, res_dbl.b, res_dbl.c); + /* { dg-output "\nres: 190 192 194" } */ + + exit(0); +} Added: python/trunk/Modules/_ctypes/libffi/testsuite/libffi.call/cls_3byte1.c ============================================================================== --- (empty file) +++ python/trunk/Modules/_ctypes/libffi/testsuite/libffi.call/cls_3byte1.c Mon Mar 15 01:02:36 2010 @@ -0,0 +1,90 @@ +/* Area: ffi_call, closure_call + Purpose: Check structure passing with different structure size. + Especially with small structures which may fit in one + register. Depending on the ABI. Check overlapping. + Limitations: none. + PR: none. + Originator: 20030828 */ + +/* { dg-do run } */ +#include "ffitest.h" + +typedef struct cls_struct_3byte { + unsigned short a; + unsigned char b; +} cls_struct_3byte; + +cls_struct_3byte cls_struct_3byte_fn(struct cls_struct_3byte a1, + struct cls_struct_3byte a2) +{ + struct cls_struct_3byte result; + + result.a = a1.a + a2.a; + result.b = a1.b + a2.b; + + printf("%d %d %d %d: %d %d\n", a1.a, a1.b, a2.a, a2.b, result.a, result.b); + + return result; +} + +static void +cls_struct_3byte_gn(ffi_cif* cif __UNUSED__, void* resp, void** args, + void* userdata __UNUSED__) +{ + + struct cls_struct_3byte a1, a2; + + a1 = *(struct cls_struct_3byte*)(args[0]); + a2 = *(struct cls_struct_3byte*)(args[1]); + + *(cls_struct_3byte*)resp = cls_struct_3byte_fn(a1, a2); +} + +int main (void) +{ + ffi_cif cif; + void *code; + ffi_closure *pcl = ffi_closure_alloc(sizeof(ffi_closure), &code); + void* args_dbl[5]; + ffi_type* cls_struct_fields[4]; + ffi_type cls_struct_type; + ffi_type* dbl_arg_types[5]; + + cls_struct_type.size = 0; + cls_struct_type.alignment = 0; + cls_struct_type.type = FFI_TYPE_STRUCT; + cls_struct_type.elements = cls_struct_fields; + + struct cls_struct_3byte g_dbl = { 12, 119 }; + struct cls_struct_3byte f_dbl = { 1, 15 }; + struct cls_struct_3byte res_dbl; + + cls_struct_fields[0] = &ffi_type_ushort; + cls_struct_fields[1] = &ffi_type_uchar; + cls_struct_fields[2] = NULL; + + dbl_arg_types[0] = &cls_struct_type; + dbl_arg_types[1] = &cls_struct_type; + dbl_arg_types[2] = NULL; + + CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 2, &cls_struct_type, + dbl_arg_types) == FFI_OK); + + args_dbl[0] = &g_dbl; + args_dbl[1] = &f_dbl; + args_dbl[2] = NULL; + + ffi_call(&cif, FFI_FN(cls_struct_3byte_fn), &res_dbl, args_dbl); + /* { dg-output "12 119 1 15: 13 134" } */ + printf("res: %d %d\n", res_dbl.a, res_dbl.b); + /* { dg-output "\nres: 13 134" } */ + + CHECK(ffi_prep_closure_loc(pcl, &cif, cls_struct_3byte_gn, NULL, code) == FFI_OK); + + res_dbl = ((cls_struct_3byte(*)(cls_struct_3byte, cls_struct_3byte))(code))(g_dbl, f_dbl); + /* { dg-output "\n12 119 1 15: 13 134" } */ + printf("res: %d %d\n", res_dbl.a, res_dbl.b); + /* { dg-output "\nres: 13 134" } */ + + exit(0); +} Added: python/trunk/Modules/_ctypes/libffi/testsuite/libffi.call/cls_3byte2.c ============================================================================== --- (empty file) +++ python/trunk/Modules/_ctypes/libffi/testsuite/libffi.call/cls_3byte2.c Mon Mar 15 01:02:36 2010 @@ -0,0 +1,90 @@ +/* Area: ffi_call, closure_call + Purpose: Check structure passing with different structure size. + Especially with small structures which may fit in one + register. Depending on the ABI. Check overlapping. + Limitations: none. + PR: none. + Originator: 20030828 */ + +/* { dg-do run } */ +#include "ffitest.h" + +typedef struct cls_struct_3byte_1 { + unsigned char a; + unsigned short b; +} cls_struct_3byte_1; + +cls_struct_3byte_1 cls_struct_3byte_fn1(struct cls_struct_3byte_1 a1, + struct cls_struct_3byte_1 a2) +{ + struct cls_struct_3byte_1 result; + + result.a = a1.a + a2.a; + result.b = a1.b + a2.b; + + printf("%d %d %d %d: %d %d\n", a1.a, a1.b, a2.a, a2.b, result.a, result.b); + + return result; +} + +static void +cls_struct_3byte_gn1(ffi_cif* cif __UNUSED__, void* resp, void** args, + void* userdata __UNUSED__) +{ + + struct cls_struct_3byte_1 a1, a2; + + a1 = *(struct cls_struct_3byte_1*)(args[0]); + a2 = *(struct cls_struct_3byte_1*)(args[1]); + + *(cls_struct_3byte_1*)resp = cls_struct_3byte_fn1(a1, a2); +} + +int main (void) +{ + ffi_cif cif; + void *code; + ffi_closure *pcl = ffi_closure_alloc(sizeof(ffi_closure), &code); + void* args_dbl[5]; + ffi_type* cls_struct_fields[4]; + ffi_type cls_struct_type; + ffi_type* dbl_arg_types[5]; + + cls_struct_type.size = 0; + cls_struct_type.alignment = 0; + cls_struct_type.type = FFI_TYPE_STRUCT; + cls_struct_type.elements = cls_struct_fields; + + struct cls_struct_3byte_1 g_dbl = { 15, 125 }; + struct cls_struct_3byte_1 f_dbl = { 9, 19 }; + struct cls_struct_3byte_1 res_dbl; + + cls_struct_fields[0] = &ffi_type_uchar; + cls_struct_fields[1] = &ffi_type_ushort; + cls_struct_fields[2] = NULL; + + dbl_arg_types[0] = &cls_struct_type; + dbl_arg_types[1] = &cls_struct_type; + dbl_arg_types[2] = NULL; + + CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 2, &cls_struct_type, + dbl_arg_types) == FFI_OK); + + args_dbl[0] = &g_dbl; + args_dbl[1] = &f_dbl; + args_dbl[2] = NULL; + + ffi_call(&cif, FFI_FN(cls_struct_3byte_fn1), &res_dbl, args_dbl); + /* { dg-output "15 125 9 19: 24 144" } */ + printf("res: %d %d\n", res_dbl.a, res_dbl.b); + /* { dg-output "\nres: 24 144" } */ + + CHECK(ffi_prep_closure_loc(pcl, &cif, cls_struct_3byte_gn1, NULL, code) == FFI_OK); + + res_dbl = ((cls_struct_3byte_1(*)(cls_struct_3byte_1, cls_struct_3byte_1))(code))(g_dbl, f_dbl); + /* { dg-output "\n15 125 9 19: 24 144" } */ + printf("res: %d %d\n", res_dbl.a, res_dbl.b); + /* { dg-output "\nres: 24 144" } */ + + exit(0); +} Added: python/trunk/Modules/_ctypes/libffi/testsuite/libffi.call/cls_4_1byte.c ============================================================================== --- (empty file) +++ python/trunk/Modules/_ctypes/libffi/testsuite/libffi.call/cls_4_1byte.c Mon Mar 15 01:02:36 2010 @@ -0,0 +1,98 @@ +/* Area: ffi_call, closure_call + Purpose: Check structure passing with different structure size. + Especially with small structures which may fit in one + register. Depending on the ABI. + Limitations: none. + PR: none. + Originator: 20030902 */ + +/* { dg-do run } */ +#include "ffitest.h" + +typedef struct cls_struct_4_1byte { + unsigned char a; + unsigned char b; + unsigned char c; + unsigned char d; +} cls_struct_4_1byte; + +cls_struct_4_1byte cls_struct_4_1byte_fn(struct cls_struct_4_1byte a1, + struct cls_struct_4_1byte a2) +{ + struct cls_struct_4_1byte result; + + result.a = a1.a + a2.a; + result.b = a1.b + a2.b; + result.c = a1.c + a2.c; + result.d = a1.d + a2.d; + + printf("%d %d %d %d %d %d %d %d: %d %d %d %d\n", a1.a, a1.b, a1.c, a1.d, + a2.a, a2.b, a2.c, a2.d, + result.a, result.b, result.c, result.d); + + return result; +} + +static void +cls_struct_4_1byte_gn(ffi_cif* cif __UNUSED__, void* resp, void** args, + void* userdata __UNUSED__) +{ + + struct cls_struct_4_1byte a1, a2; + + a1 = *(struct cls_struct_4_1byte*)(args[0]); + a2 = *(struct cls_struct_4_1byte*)(args[1]); + + *(cls_struct_4_1byte*)resp = cls_struct_4_1byte_fn(a1, a2); +} + +int main (void) +{ + ffi_cif cif; + void *code; + ffi_closure *pcl = ffi_closure_alloc(sizeof(ffi_closure), &code); + void* args_dbl[5]; + ffi_type* cls_struct_fields[5]; + ffi_type cls_struct_type; + ffi_type* dbl_arg_types[5]; + + cls_struct_type.size = 0; + cls_struct_type.alignment = 0; + cls_struct_type.type = FFI_TYPE_STRUCT; + cls_struct_type.elements = cls_struct_fields; + + struct cls_struct_4_1byte g_dbl = { 12, 13, 14, 15 }; + struct cls_struct_4_1byte f_dbl = { 178, 179, 180, 181 }; + struct cls_struct_4_1byte res_dbl; + + cls_struct_fields[0] = &ffi_type_uchar; + cls_struct_fields[1] = &ffi_type_uchar; + cls_struct_fields[2] = &ffi_type_uchar; + cls_struct_fields[3] = &ffi_type_uchar; + cls_struct_fields[4] = NULL; + + dbl_arg_types[0] = &cls_struct_type; + dbl_arg_types[1] = &cls_struct_type; + dbl_arg_types[2] = NULL; + + CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 2, &cls_struct_type, + dbl_arg_types) == FFI_OK); + + args_dbl[0] = &g_dbl; + args_dbl[1] = &f_dbl; + args_dbl[2] = NULL; + + ffi_call(&cif, FFI_FN(cls_struct_4_1byte_fn), &res_dbl, args_dbl); + /* { dg-output "12 13 14 15 178 179 180 181: 190 192 194 196" } */ + printf("res: %d %d %d %d\n", res_dbl.a, res_dbl.b, res_dbl.c, res_dbl.d); + /* { dg-output "\nres: 190 192 194 196" } */ + + CHECK(ffi_prep_closure_loc(pcl, &cif, cls_struct_4_1byte_gn, NULL, code) == FFI_OK); + + res_dbl = ((cls_struct_4_1byte(*)(cls_struct_4_1byte, cls_struct_4_1byte))(code))(g_dbl, f_dbl); + /* { dg-output "\n12 13 14 15 178 179 180 181: 190 192 194 196" } */ + printf("res: %d %d %d %d\n", res_dbl.a, res_dbl.b, res_dbl.c, res_dbl.d); + /* { dg-output "\nres: 190 192 194 196" } */ + + exit(0); +} Added: python/trunk/Modules/_ctypes/libffi/testsuite/libffi.call/cls_4byte.c ============================================================================== --- (empty file) +++ python/trunk/Modules/_ctypes/libffi/testsuite/libffi.call/cls_4byte.c Mon Mar 15 01:02:36 2010 @@ -0,0 +1,90 @@ +/* Area: ffi_call, closure_call + Purpose: Check structure passing with different structure size. + Depending on the ABI. Check overlapping. + Limitations: none. + PR: none. + Originator: 20030828 */ + +/* { dg-do run } */ + +#include "ffitest.h" + +typedef struct cls_struct_4byte { + unsigned short a; + unsigned short b; +} cls_struct_4byte; + +cls_struct_4byte cls_struct_4byte_fn(struct cls_struct_4byte a1, + struct cls_struct_4byte a2) +{ + struct cls_struct_4byte result; + + result.a = a1.a + a2.a; + result.b = a1.b + a2.b; + + printf("%d %d %d %d: %d %d\n", a1.a, a1.b, a2.a, a2.b, result.a, result.b); + + return result; +} + +static void +cls_struct_4byte_gn(ffi_cif* cif __UNUSED__, void* resp, void** args, + void* userdata __UNUSED__) +{ + + struct cls_struct_4byte a1, a2; + + a1 = *(struct cls_struct_4byte*)(args[0]); + a2 = *(struct cls_struct_4byte*)(args[1]); + + *(cls_struct_4byte*)resp = cls_struct_4byte_fn(a1, a2); +} + +int main (void) +{ + ffi_cif cif; + void *code; + ffi_closure *pcl = ffi_closure_alloc(sizeof(ffi_closure), &code); + void* args_dbl[5]; + ffi_type* cls_struct_fields[4]; + ffi_type cls_struct_type; + ffi_type* dbl_arg_types[5]; + + cls_struct_type.size = 0; + cls_struct_type.alignment = 0; + cls_struct_type.type = FFI_TYPE_STRUCT; + cls_struct_type.elements = cls_struct_fields; + + struct cls_struct_4byte g_dbl = { 127, 120 }; + struct cls_struct_4byte f_dbl = { 12, 128 }; + struct cls_struct_4byte res_dbl; + + cls_struct_fields[0] = &ffi_type_ushort; + cls_struct_fields[1] = &ffi_type_ushort; + cls_struct_fields[2] = NULL; + + dbl_arg_types[0] = &cls_struct_type; + dbl_arg_types[1] = &cls_struct_type; + dbl_arg_types[2] = NULL; + + CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 2, &cls_struct_type, + dbl_arg_types) == FFI_OK); + + args_dbl[0] = &g_dbl; + args_dbl[1] = &f_dbl; + args_dbl[2] = NULL; + + ffi_call(&cif, FFI_FN(cls_struct_4byte_fn), &res_dbl, args_dbl); + /* { dg-output "127 120 12 128: 139 248" } */ + printf("res: %d %d\n", res_dbl.a, res_dbl.b); + /* { dg-output "\nres: 139 248" } */ + + CHECK(ffi_prep_closure_loc(pcl, &cif, cls_struct_4byte_gn, NULL, code) == FFI_OK); + + res_dbl = ((cls_struct_4byte(*)(cls_struct_4byte, cls_struct_4byte))(code))(g_dbl, f_dbl); + /* { dg-output "\n127 120 12 128: 139 248" } */ + printf("res: %d %d\n", res_dbl.a, res_dbl.b); + /* { dg-output "\nres: 139 248" } */ + + exit(0); +} Added: python/trunk/Modules/_ctypes/libffi/testsuite/libffi.call/cls_5_1_byte.c ============================================================================== --- (empty file) +++ python/trunk/Modules/_ctypes/libffi/testsuite/libffi.call/cls_5_1_byte.c Mon Mar 15 01:02:36 2010 @@ -0,0 +1,109 @@ +/* Area: ffi_call, closure_call + Purpose: Check structure passing with different structure size. + Depending on the ABI. Check overlapping. + Limitations: none. + PR: none. + Originator: 20050708 */ + +/* { dg-do run } */ +#include "ffitest.h" + +typedef struct cls_struct_5byte { + unsigned char a; + unsigned char b; + unsigned char c; + unsigned char d; + unsigned char e; +} cls_struct_5byte; + +cls_struct_5byte cls_struct_5byte_fn(struct cls_struct_5byte a1, + struct cls_struct_5byte a2) +{ + struct cls_struct_5byte result; + + result.a = a1.a + a2.a; + result.b = a1.b + a2.b; + result.c = a1.c + a2.c; + result.d = a1.d + a2.d; + result.e = a1.e + a2.e; + + printf("%d %d %d %d %d %d %d %d %d %d: %d %d %d %d %d\n", + a1.a, a1.b, a1.c, a1.d, a1.e, + a2.a, a2.b, a2.c, a2.d, a2.e, + result.a, result.b, result.c, result.d, result.e); + + return result; +} + +static void +cls_struct_5byte_gn(ffi_cif* cif __UNUSED__, void* resp, void** args, + void* userdata __UNUSED__) +{ + + struct cls_struct_5byte a1, a2; + + a1 = *(struct cls_struct_5byte*)(args[0]); + a2 = *(struct cls_struct_5byte*)(args[1]); + + *(cls_struct_5byte*)resp = cls_struct_5byte_fn(a1, a2); +} + +int main (void) +{ + ffi_cif cif; + void *code; + ffi_closure *pcl = ffi_closure_alloc(sizeof(ffi_closure), &code); + void* args_dbl[5]; + ffi_type* cls_struct_fields[6]; + ffi_type cls_struct_type; + ffi_type* dbl_arg_types[5]; + + cls_struct_type.size = 0; + cls_struct_type.alignment = 0; + cls_struct_type.type = FFI_TYPE_STRUCT; + cls_struct_type.elements = cls_struct_fields; + + struct cls_struct_5byte g_dbl = { 127, 120, 1, 3, 4 }; + struct cls_struct_5byte f_dbl = { 12, 128, 9, 3, 4 }; + struct cls_struct_5byte res_dbl = { 0, 0, 0, 0, 0 }; + + cls_struct_fields[0] = &ffi_type_uchar; + cls_struct_fields[1] = &ffi_type_uchar; + cls_struct_fields[2] = &ffi_type_uchar; + cls_struct_fields[3] = &ffi_type_uchar; + cls_struct_fields[4] = &ffi_type_uchar; + cls_struct_fields[5] = NULL; + + dbl_arg_types[0] = &cls_struct_type; + dbl_arg_types[1] = &cls_struct_type; + dbl_arg_types[2] = NULL; + + CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 2, &cls_struct_type, + dbl_arg_types) == FFI_OK); + + args_dbl[0] = &g_dbl; + args_dbl[1] = &f_dbl; + args_dbl[2] = NULL; + + ffi_call(&cif, FFI_FN(cls_struct_5byte_fn), &res_dbl, args_dbl); + /* { dg-output "127 120 1 3 4 12 128 9 3 4: 139 248 10 6 8" } */ + printf("res: %d %d %d %d %d\n", res_dbl.a, res_dbl.b, res_dbl.c, + res_dbl.d, res_dbl.e); + /* { dg-output "\nres: 139 248 10 6 8" } */ + + res_dbl.a = 0; + res_dbl.b = 0; + res_dbl.c = 0; + res_dbl.d = 0; + res_dbl.e = 0; + + CHECK(ffi_prep_closure_loc(pcl, &cif, cls_struct_5byte_gn, NULL, code) == FFI_OK); + + res_dbl = ((cls_struct_5byte(*)(cls_struct_5byte, cls_struct_5byte))(code))(g_dbl, f_dbl); + /* { dg-output "\n127 120 1 3 4 12 128 9 3 4: 139 248 10 6 8" } */ + printf("res: %d %d %d %d %d\n", res_dbl.a, res_dbl.b, res_dbl.c, + res_dbl.d, res_dbl.e); + /* { dg-output "\nres: 139 248 10 6 8" } */ + + exit(0); +} Added: python/trunk/Modules/_ctypes/libffi/testsuite/libffi.call/cls_5byte.c ============================================================================== --- (empty file) +++ python/trunk/Modules/_ctypes/libffi/testsuite/libffi.call/cls_5byte.c Mon Mar 15 01:02:36 2010 @@ -0,0 +1,98 @@ +/* Area: ffi_call, closure_call + Purpose: Check structure passing with different structure size. + Depending on the ABI. Check overlapping. + Limitations: none. + PR: none. + Originator: 20030828 */ + +/* { dg-do run } */ +#include "ffitest.h" + +typedef struct cls_struct_5byte { + unsigned short a; + unsigned short b; + unsigned char c; +} cls_struct_5byte; + +cls_struct_5byte cls_struct_5byte_fn(struct cls_struct_5byte a1, + struct cls_struct_5byte a2) +{ + struct cls_struct_5byte result; + + result.a = a1.a + a2.a; + result.b = a1.b + a2.b; + result.c = a1.c + a2.c; + + printf("%d %d %d %d %d %d: %d %d %d\n", a1.a, a1.b, a1.c, + a2.a, a2.b, a2.c, + result.a, result.b, result.c); + + return result; +} + +static void +cls_struct_5byte_gn(ffi_cif* cif __UNUSED__, void* resp, void** args, + void* userdata __UNUSED__) +{ + + struct cls_struct_5byte a1, a2; + + a1 = *(struct cls_struct_5byte*)(args[0]); + a2 = *(struct cls_struct_5byte*)(args[1]); + + *(cls_struct_5byte*)resp = cls_struct_5byte_fn(a1, a2); +} + +int main (void) +{ + ffi_cif cif; + void *code; + ffi_closure *pcl = ffi_closure_alloc(sizeof(ffi_closure), &code); + void* args_dbl[5]; + ffi_type* cls_struct_fields[4]; + ffi_type cls_struct_type; + ffi_type* dbl_arg_types[5]; + + cls_struct_type.size = 0; + cls_struct_type.alignment = 0; + cls_struct_type.type = FFI_TYPE_STRUCT; + cls_struct_type.elements = cls_struct_fields; + + struct cls_struct_5byte g_dbl = { 127, 120, 1 }; + struct cls_struct_5byte f_dbl = { 12, 128, 9 }; + struct cls_struct_5byte res_dbl = { 0, 0, 0 }; + + cls_struct_fields[0] = &ffi_type_ushort; + cls_struct_fields[1] = &ffi_type_ushort; + cls_struct_fields[2] = &ffi_type_uchar; + cls_struct_fields[3] = NULL; + + dbl_arg_types[0] = &cls_struct_type; + dbl_arg_types[1] = &cls_struct_type; + dbl_arg_types[2] = NULL; + + CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 2, &cls_struct_type, + dbl_arg_types) == FFI_OK); + + args_dbl[0] = &g_dbl; + args_dbl[1] = &f_dbl; + args_dbl[2] = NULL; + + ffi_call(&cif, FFI_FN(cls_struct_5byte_fn), &res_dbl, args_dbl); + /* { dg-output "127 120 1 12 128 9: 139 248 10" } */ + printf("res: %d %d %d\n", res_dbl.a, res_dbl.b, res_dbl.c); + /* { dg-output "\nres: 139 248 10" } */ + + res_dbl.a = 0; + res_dbl.b = 0; + res_dbl.c = 0; + + CHECK(ffi_prep_closure_loc(pcl, &cif, cls_struct_5byte_gn, NULL, code) == FFI_OK); + + res_dbl = ((cls_struct_5byte(*)(cls_struct_5byte, cls_struct_5byte))(code))(g_dbl, f_dbl); + /* { dg-output "\n127 120 1 12 128 9: 139 248 10" } */ + printf("res: %d %d %d\n", res_dbl.a, res_dbl.b, res_dbl.c); + /* { dg-output "\nres: 139 248 10" } */ + + exit(0); +} Added: python/trunk/Modules/_ctypes/libffi/testsuite/libffi.call/cls_64byte.c ============================================================================== --- (empty file) +++ python/trunk/Modules/_ctypes/libffi/testsuite/libffi.call/cls_64byte.c Mon Mar 15 01:02:36 2010 @@ -0,0 +1,124 @@ +/* Area: ffi_call, closure_call + Purpose: Check structure passing with different structure size. + Depending on the ABI. Check bigger struct which overlaps + the gp and fp register count on Darwin/AIX/ppc64. + Limitations: none. + PR: none. + Originator: 20030828 */ + +/* { dg-do run } */ +#include "ffitest.h" + +typedef struct cls_struct_64byte { + double a; + double b; + double c; + double d; + double e; + double f; + double g; + double h; +} cls_struct_64byte; + +cls_struct_64byte cls_struct_64byte_fn(struct cls_struct_64byte b0, + struct cls_struct_64byte b1, + struct cls_struct_64byte b2, + struct cls_struct_64byte b3) +{ + struct cls_struct_64byte result; + + result.a = b0.a + b1.a + b2.a + b3.a; + result.b = b0.b + b1.b + b2.b + b3.b; + result.c = b0.c + b1.c + b2.c + b3.c; + result.d = b0.d + b1.d + b2.d + b3.d; + result.e = b0.e + b1.e + b2.e + b3.e; + result.f = b0.f + b1.f + b2.f + b3.f; + result.g = b0.g + b1.g + b2.g + b3.g; + result.h = b0.h + b1.h + b2.h + b3.h; + + printf("%g %g %g %g %g %g %g %g\n", result.a, result.b, result.c, + result.d, result.e, result.f, result.g, result.h); + + return result; +} + +static void +cls_struct_64byte_gn(ffi_cif* cif __UNUSED__, void* resp, void** args, + void* userdata __UNUSED__) +{ + struct cls_struct_64byte b0, b1, b2, b3; + + b0 = *(struct cls_struct_64byte*)(args[0]); + b1 = *(struct cls_struct_64byte*)(args[1]); + b2 = *(struct cls_struct_64byte*)(args[2]); + b3 = *(struct cls_struct_64byte*)(args[3]); + + *(cls_struct_64byte*)resp = cls_struct_64byte_fn(b0, b1, b2, b3); +} + +int main (void) +{ + ffi_cif cif; + void *code; + ffi_closure *pcl = ffi_closure_alloc(sizeof(ffi_closure), &code); + void* args_dbl[5]; + ffi_type* cls_struct_fields[9]; + ffi_type cls_struct_type; + ffi_type* dbl_arg_types[5]; + + cls_struct_type.size = 0; + cls_struct_type.alignment = 0; + cls_struct_type.type = FFI_TYPE_STRUCT; + cls_struct_type.elements = cls_struct_fields; + + struct cls_struct_64byte e_dbl = { 9.0, 2.0, 6.0, 5.0, 3.0, 4.0, 8.0, 1.0 }; + struct cls_struct_64byte f_dbl = { 1.0, 2.0, 3.0, 7.0, 2.0, 5.0, 6.0, 7.0 }; + struct cls_struct_64byte g_dbl = { 4.0, 5.0, 7.0, 9.0, 1.0, 1.0, 2.0, 9.0 }; + struct cls_struct_64byte h_dbl = { 8.0, 6.0, 1.0, 4.0, 0.0, 3.0, 3.0, 1.0 }; + struct cls_struct_64byte res_dbl; + + cls_struct_fields[0] = &ffi_type_double; + cls_struct_fields[1] = &ffi_type_double; + cls_struct_fields[2] = &ffi_type_double; + cls_struct_fields[3] = &ffi_type_double; + cls_struct_fields[4] = &ffi_type_double; + cls_struct_fields[5] = &ffi_type_double; + cls_struct_fields[6] = &ffi_type_double; + cls_struct_fields[7] = &ffi_type_double; + cls_struct_fields[8] = NULL; + + dbl_arg_types[0] = &cls_struct_type; + dbl_arg_types[1] = &cls_struct_type; + dbl_arg_types[2] = &cls_struct_type; + dbl_arg_types[3] = &cls_struct_type; + dbl_arg_types[4] = NULL; + + CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 4, &cls_struct_type, + dbl_arg_types) == FFI_OK); + + args_dbl[0] = &e_dbl; + args_dbl[1] = &f_dbl; + args_dbl[2] = &g_dbl; + args_dbl[3] = &h_dbl; + args_dbl[4] = NULL; + + ffi_call(&cif, FFI_FN(cls_struct_64byte_fn), &res_dbl, args_dbl); + /* { dg-output "22 15 17 25 6 13 19 18" } */ + printf("res: %g %g %g %g %g %g %g %g\n", res_dbl.a, res_dbl.b, res_dbl.c, + res_dbl.d, res_dbl.e, res_dbl.f, res_dbl.g, res_dbl.h); + /* { dg-output "\nres: 22 15 17 25 6 13 19 18" } */ + + CHECK(ffi_prep_closure_loc(pcl, &cif, cls_struct_64byte_gn, NULL, code) == FFI_OK); + + res_dbl = ((cls_struct_64byte(*)(cls_struct_64byte, + cls_struct_64byte, + cls_struct_64byte, + cls_struct_64byte)) + (code))(e_dbl, f_dbl, g_dbl, h_dbl); + /* { dg-output "\n22 15 17 25 6 13 19 18" } */ + printf("res: %g %g %g %g %g %g %g %g\n", res_dbl.a, res_dbl.b, res_dbl.c, + res_dbl.d, res_dbl.e, res_dbl.f, res_dbl.g, res_dbl.h); + /* { dg-output "\nres: 22 15 17 25 6 13 19 18" } */ + + exit(0); +} Added: python/trunk/Modules/_ctypes/libffi/testsuite/libffi.call/cls_6_1_byte.c ============================================================================== --- (empty file) +++ python/trunk/Modules/_ctypes/libffi/testsuite/libffi.call/cls_6_1_byte.c Mon Mar 15 01:02:36 2010 @@ -0,0 +1,113 @@ +/* Area: ffi_call, closure_call + Purpose: Check structure passing with different structure size. + Depending on the ABI. Check overlapping. + Limitations: none. + PR: none. + Originator: 20050708 */ + +/* { dg-do run } */ +#include "ffitest.h" + +typedef struct cls_struct_6byte { + unsigned char a; + unsigned char b; + unsigned char c; + unsigned char d; + unsigned char e; + unsigned char f; +} cls_struct_6byte; + +cls_struct_6byte cls_struct_6byte_fn(struct cls_struct_6byte a1, + struct cls_struct_6byte a2) +{ + struct cls_struct_6byte result; + + result.a = a1.a + a2.a; + result.b = a1.b + a2.b; + result.c = a1.c + a2.c; + result.d = a1.d + a2.d; + result.e = a1.e + a2.e; + result.f = a1.f + a2.f; + + printf("%d %d %d %d %d %d %d %d %d %d %d %d: %d %d %d %d %d %d\n", + a1.a, a1.b, a1.c, a1.d, a1.e, a1.f, + a2.a, a2.b, a2.c, a2.d, a2.e, a2.f, + result.a, result.b, result.c, result.d, result.e, result.f); + + return result; +} + +static void +cls_struct_6byte_gn(ffi_cif* cif __UNUSED__, void* resp, void** args, + void* userdata __UNUSED__) +{ + + struct cls_struct_6byte a1, a2; + + a1 = *(struct cls_struct_6byte*)(args[0]); + a2 = *(struct cls_struct_6byte*)(args[1]); + + *(cls_struct_6byte*)resp = cls_struct_6byte_fn(a1, a2); +} + +int main (void) +{ + ffi_cif cif; + void *code; + ffi_closure *pcl = ffi_closure_alloc(sizeof(ffi_closure), &code); + void* args_dbl[5]; + ffi_type* cls_struct_fields[7]; + ffi_type cls_struct_type; + ffi_type* dbl_arg_types[5]; + + cls_struct_type.size = 0; + cls_struct_type.alignment = 0; + cls_struct_type.type = FFI_TYPE_STRUCT; + cls_struct_type.elements = cls_struct_fields; + + struct cls_struct_6byte g_dbl = { 127, 120, 1, 3, 4, 5 }; + struct cls_struct_6byte f_dbl = { 12, 128, 9, 3, 4, 5 }; + struct cls_struct_6byte res_dbl = { 0, 0, 0, 0, 0, 0 }; + + cls_struct_fields[0] = &ffi_type_uchar; + cls_struct_fields[1] = &ffi_type_uchar; + cls_struct_fields[2] = &ffi_type_uchar; + cls_struct_fields[3] = &ffi_type_uchar; + cls_struct_fields[4] = &ffi_type_uchar; + cls_struct_fields[5] = &ffi_type_uchar; + cls_struct_fields[6] = NULL; + + dbl_arg_types[0] = &cls_struct_type; + dbl_arg_types[1] = &cls_struct_type; + dbl_arg_types[2] = NULL; + + CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 2, &cls_struct_type, + dbl_arg_types) == FFI_OK); + + args_dbl[0] = &g_dbl; + args_dbl[1] = &f_dbl; + args_dbl[2] = NULL; + + ffi_call(&cif, FFI_FN(cls_struct_6byte_fn), &res_dbl, args_dbl); + /* { dg-output "127 120 1 3 4 5 12 128 9 3 4 5: 139 248 10 6 8 10" } */ + printf("res: %d %d %d %d %d %d\n", res_dbl.a, res_dbl.b, res_dbl.c, + res_dbl.d, res_dbl.e, res_dbl.f); + /* { dg-output "\nres: 139 248 10 6 8 10" } */ + + res_dbl.a = 0; + res_dbl.b = 0; + res_dbl.c = 0; + res_dbl.d = 0; + res_dbl.e = 0; + res_dbl.f = 0; + + CHECK(ffi_prep_closure_loc(pcl, &cif, cls_struct_6byte_gn, NULL, code) == FFI_OK); + + res_dbl = ((cls_struct_6byte(*)(cls_struct_6byte, cls_struct_6byte))(code))(g_dbl, f_dbl); + /* { dg-output "\n127 120 1 3 4 5 12 128 9 3 4 5: 139 248 10 6 8 10" } */ + printf("res: %d %d %d %d %d %d\n", res_dbl.a, res_dbl.b, res_dbl.c, + res_dbl.d, res_dbl.e, res_dbl.f); + /* { dg-output "\nres: 139 248 10 6 8 10" } */ + + exit(0); +} Added: python/trunk/Modules/_ctypes/libffi/testsuite/libffi.call/cls_6byte.c ============================================================================== --- (empty file) +++ python/trunk/Modules/_ctypes/libffi/testsuite/libffi.call/cls_6byte.c Mon Mar 15 01:02:36 2010 @@ -0,0 +1,99 @@ +/* Area: ffi_call, closure_call + Purpose: Check structure passing with different structure size. + Depending on the ABI. Check overlapping. + Limitations: none. + PR: none. + Originator: 20030828 */ + + +/* { dg-do run } */ +#include "ffitest.h" + +typedef struct cls_struct_6byte { + unsigned short a; + unsigned short b; + unsigned char c; + unsigned char d; +} cls_struct_6byte; + +cls_struct_6byte cls_struct_6byte_fn(struct cls_struct_6byte a1, + struct cls_struct_6byte a2) +{ + struct cls_struct_6byte result; + + result.a = a1.a + a2.a; + result.b = a1.b + a2.b; + result.c = a1.c + a2.c; + result.d = a1.d + a2.d; + + printf("%d %d %d %d %d %d %d %d: %d %d %d %d\n", a1.a, a1.b, a1.c, a1.d, + a2.a, a2.b, a2.c, a2.d, + result.a, result.b, result.c, result.d); + + return result; +} + +static void +cls_struct_6byte_gn(ffi_cif* cif __UNUSED__, void* resp, void** args, + void* userdata __UNUSED__) +{ + + struct cls_struct_6byte a1, a2; + + a1 = *(struct cls_struct_6byte*)(args[0]); + a2 = *(struct cls_struct_6byte*)(args[1]); + + *(cls_struct_6byte*)resp = cls_struct_6byte_fn(a1, a2); +} + +int main (void) +{ + ffi_cif cif; + void *code; + ffi_closure *pcl = ffi_closure_alloc(sizeof(ffi_closure), &code); + void* args_dbl[5]; + ffi_type* cls_struct_fields[5]; + ffi_type cls_struct_type; + ffi_type* dbl_arg_types[5]; + + cls_struct_type.size = 0; + cls_struct_type.alignment = 0; + cls_struct_type.type = FFI_TYPE_STRUCT; + cls_struct_type.elements = cls_struct_fields; + + struct cls_struct_6byte g_dbl = { 127, 120, 1, 128 }; + struct cls_struct_6byte f_dbl = { 12, 128, 9, 127 }; + struct cls_struct_6byte res_dbl; + + cls_struct_fields[0] = &ffi_type_ushort; + cls_struct_fields[1] = &ffi_type_ushort; + cls_struct_fields[2] = &ffi_type_uchar; + cls_struct_fields[3] = &ffi_type_uchar; + cls_struct_fields[4] = NULL; + + dbl_arg_types[0] = &cls_struct_type; + dbl_arg_types[1] = &cls_struct_type; + dbl_arg_types[2] = NULL; + + CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 2, &cls_struct_type, + dbl_arg_types) == FFI_OK); + + args_dbl[0] = &g_dbl; + args_dbl[1] = &f_dbl; + args_dbl[2] = NULL; + + ffi_call(&cif, FFI_FN(cls_struct_6byte_fn), &res_dbl, args_dbl); + /* { dg-output "127 120 1 128 12 128 9 127: 139 248 10 255" } */ + printf("res: %d %d %d %d\n", res_dbl.a, res_dbl.b, res_dbl.c, res_dbl.d); + /* { dg-output "\nres: 139 248 10 255" } */ + + CHECK(ffi_prep_closure_loc(pcl, &cif, cls_struct_6byte_gn, NULL, code) == FFI_OK); + + res_dbl = ((cls_struct_6byte(*)(cls_struct_6byte, cls_struct_6byte))(code))(g_dbl, f_dbl); + /* { dg-output "\n127 120 1 128 12 128 9 127: 139 248 10 255" } */ + printf("res: %d %d %d %d\n", res_dbl.a, res_dbl.b, res_dbl.c, res_dbl.d); + /* { dg-output "\nres: 139 248 10 255" } */ + + + exit(0); +} Added: python/trunk/Modules/_ctypes/libffi/testsuite/libffi.call/cls_7_1_byte.c ============================================================================== --- (empty file) +++ python/trunk/Modules/_ctypes/libffi/testsuite/libffi.call/cls_7_1_byte.c Mon Mar 15 01:02:36 2010 @@ -0,0 +1,117 @@ +/* Area: ffi_call, closure_call + Purpose: Check structure passing with different structure size. + Depending on the ABI. Check overlapping. + Limitations: none. + PR: none. + Originator: 20050708 */ + +/* { dg-do run } */ +#include "ffitest.h" + +typedef struct cls_struct_7byte { + unsigned char a; + unsigned char b; + unsigned char c; + unsigned char d; + unsigned char e; + unsigned char f; + unsigned char g; +} cls_struct_7byte; + +cls_struct_7byte cls_struct_7byte_fn(struct cls_struct_7byte a1, + struct cls_struct_7byte a2) +{ + struct cls_struct_7byte result; + + result.a = a1.a + a2.a; + result.b = a1.b + a2.b; + result.c = a1.c + a2.c; + result.d = a1.d + a2.d; + result.e = a1.e + a2.e; + result.f = a1.f + a2.f; + result.g = a1.g + a2.g; + + printf("%d %d %d %d %d %d %d %d %d %d %d %d %d %d: %d %d %d %d %d %d %d\n", + a1.a, a1.b, a1.c, a1.d, a1.e, a1.f, a1.g, + a2.a, a2.b, a2.c, a2.d, a2.e, a2.f, a2.g, + result.a, result.b, result.c, result.d, result.e, result.f, result.g); + + return result; +} + +static void +cls_struct_7byte_gn(ffi_cif* cif __UNUSED__, void* resp, void** args, + void* userdata __UNUSED__) +{ + + struct cls_struct_7byte a1, a2; + + a1 = *(struct cls_struct_7byte*)(args[0]); + a2 = *(struct cls_struct_7byte*)(args[1]); + + *(cls_struct_7byte*)resp = cls_struct_7byte_fn(a1, a2); +} + +int main (void) +{ + ffi_cif cif; + void *code; + ffi_closure *pcl = ffi_closure_alloc(sizeof(ffi_closure), &code); + void* args_dbl[5]; + ffi_type* cls_struct_fields[8]; + ffi_type cls_struct_type; + ffi_type* dbl_arg_types[5]; + + cls_struct_type.size = 0; + cls_struct_type.alignment = 0; + cls_struct_type.type = FFI_TYPE_STRUCT; + cls_struct_type.elements = cls_struct_fields; + + struct cls_struct_7byte g_dbl = { 127, 120, 1, 3, 4, 5, 6 }; + struct cls_struct_7byte f_dbl = { 12, 128, 9, 3, 4, 5, 6 }; + struct cls_struct_7byte res_dbl = { 0, 0, 0, 0, 0, 0, 0 }; + + cls_struct_fields[0] = &ffi_type_uchar; + cls_struct_fields[1] = &ffi_type_uchar; + cls_struct_fields[2] = &ffi_type_uchar; + cls_struct_fields[3] = &ffi_type_uchar; + cls_struct_fields[4] = &ffi_type_uchar; + cls_struct_fields[5] = &ffi_type_uchar; + cls_struct_fields[6] = &ffi_type_uchar; + cls_struct_fields[7] = NULL; + + dbl_arg_types[0] = &cls_struct_type; + dbl_arg_types[1] = &cls_struct_type; + dbl_arg_types[2] = NULL; + + CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 2, &cls_struct_type, + dbl_arg_types) == FFI_OK); + + args_dbl[0] = &g_dbl; + args_dbl[1] = &f_dbl; + args_dbl[2] = NULL; + + ffi_call(&cif, FFI_FN(cls_struct_7byte_fn), &res_dbl, args_dbl); + /* { dg-output "127 120 1 3 4 5 6 12 128 9 3 4 5 6: 139 248 10 6 8 10 12" } */ + printf("res: %d %d %d %d %d %d %d\n", res_dbl.a, res_dbl.b, res_dbl.c, + res_dbl.d, res_dbl.e, res_dbl.f, res_dbl.g); + /* { dg-output "\nres: 139 248 10 6 8 10 12" } */ + + res_dbl.a = 0; + res_dbl.b = 0; + res_dbl.c = 0; + res_dbl.d = 0; + res_dbl.e = 0; + res_dbl.f = 0; + res_dbl.g = 0; + + CHECK(ffi_prep_closure_loc(pcl, &cif, cls_struct_7byte_gn, NULL, code) == FFI_OK); + + res_dbl = ((cls_struct_7byte(*)(cls_struct_7byte, cls_struct_7byte))(code))(g_dbl, f_dbl); + /* { dg-output "\n127 120 1 3 4 5 6 12 128 9 3 4 5 6: 139 248 10 6 8 10 12" } */ + printf("res: %d %d %d %d %d %d %d\n", res_dbl.a, res_dbl.b, res_dbl.c, + res_dbl.d, res_dbl.e, res_dbl.f, res_dbl.g); + /* { dg-output "\nres: 139 248 10 6 8 10 12" } */ + + exit(0); +} Added: python/trunk/Modules/_ctypes/libffi/testsuite/libffi.call/cls_7byte.c ============================================================================== --- (empty file) +++ python/trunk/Modules/_ctypes/libffi/testsuite/libffi.call/cls_7byte.c Mon Mar 15 01:02:36 2010 @@ -0,0 +1,97 @@ +/* Area: ffi_call, closure_call + Purpose: Check structure passing with different structure size. + Depending on the ABI. Check overlapping. + Limitations: none. + PR: none. + Originator: 20030828 */ + +/* { dg-do run } */ +#include "ffitest.h" + +typedef struct cls_struct_7byte { + unsigned short a; + unsigned short b; + unsigned char c; + unsigned short d; +} cls_struct_7byte; + +cls_struct_7byte cls_struct_7byte_fn(struct cls_struct_7byte a1, + struct cls_struct_7byte a2) +{ + struct cls_struct_7byte result; + + result.a = a1.a + a2.a; + result.b = a1.b + a2.b; + result.c = a1.c + a2.c; + result.d = a1.d + a2.d; + + printf("%d %d %d %d %d %d %d %d: %d %d %d %d\n", a1.a, a1.b, a1.c, a1.d, + a2.a, a2.b, a2.c, a2.d, + result.a, result.b, result.c, result.d); + + return result; +} + +static void +cls_struct_7byte_gn(ffi_cif* cif __UNUSED__, void* resp, void** args, + void* userdata __UNUSED__) +{ + + struct cls_struct_7byte a1, a2; + + a1 = *(struct cls_struct_7byte*)(args[0]); + a2 = *(struct cls_struct_7byte*)(args[1]); + + *(cls_struct_7byte*)resp = cls_struct_7byte_fn(a1, a2); +} + +int main (void) +{ + ffi_cif cif; + void *code; + ffi_closure *pcl = ffi_closure_alloc(sizeof(ffi_closure), &code); + void* args_dbl[5]; + ffi_type* cls_struct_fields[5]; + ffi_type cls_struct_type; + ffi_type* dbl_arg_types[5]; + + cls_struct_type.size = 0; + cls_struct_type.alignment = 0; + cls_struct_type.type = FFI_TYPE_STRUCT; + cls_struct_type.elements = cls_struct_fields; + + struct cls_struct_7byte g_dbl = { 127, 120, 1, 254 }; + struct cls_struct_7byte f_dbl = { 12, 128, 9, 255 }; + struct cls_struct_7byte res_dbl; + + cls_struct_fields[0] = &ffi_type_ushort; + cls_struct_fields[1] = &ffi_type_ushort; + cls_struct_fields[2] = &ffi_type_uchar; + cls_struct_fields[3] = &ffi_type_ushort; + cls_struct_fields[4] = NULL; + + dbl_arg_types[0] = &cls_struct_type; + dbl_arg_types[1] = &cls_struct_type; + dbl_arg_types[2] = NULL; + + CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 2, &cls_struct_type, + dbl_arg_types) == FFI_OK); + + args_dbl[0] = &g_dbl; + args_dbl[1] = &f_dbl; + args_dbl[2] = NULL; + + ffi_call(&cif, FFI_FN(cls_struct_7byte_fn), &res_dbl, args_dbl); + /* { dg-output "127 120 1 254 12 128 9 255: 139 248 10 509" } */ + printf("res: %d %d %d %d\n", res_dbl.a, res_dbl.b, res_dbl.c, res_dbl.d); + /* { dg-output "\nres: 139 248 10 509" } */ + + CHECK(ffi_prep_closure_loc(pcl, &cif, cls_struct_7byte_gn, NULL, code) == FFI_OK); + + res_dbl = ((cls_struct_7byte(*)(cls_struct_7byte, cls_struct_7byte))(code))(g_dbl, f_dbl); + /* { dg-output "\n127 120 1 254 12 128 9 255: 139 248 10 509" } */ + printf("res: %d %d %d %d\n", res_dbl.a, res_dbl.b, res_dbl.c, res_dbl.d); + /* { dg-output "\nres: 139 248 10 509" } */ + + exit(0); +} Added: python/trunk/Modules/_ctypes/libffi/testsuite/libffi.call/cls_8byte.c ============================================================================== --- (empty file) +++ python/trunk/Modules/_ctypes/libffi/testsuite/libffi.call/cls_8byte.c Mon Mar 15 01:02:36 2010 @@ -0,0 +1,88 @@ +/* Area: ffi_call, closure_call + Purpose: Check structure passing with different structure size. + Depending on the ABI. Check overlapping. + Limitations: none. + PR: none. + Originator: 20030828 */ + +/* { dg-do run } */ +#include "ffitest.h" + +typedef struct cls_struct_8byte { + int a; + float b; +} cls_struct_8byte; + +cls_struct_8byte cls_struct_8byte_fn(struct cls_struct_8byte a1, + struct cls_struct_8byte a2) +{ + struct cls_struct_8byte result; + + result.a = a1.a + a2.a; + result.b = a1.b + a2.b; + + printf("%d %g %d %g: %d %g\n", a1.a, a1.b, a2.a, a2.b, result.a, result.b); + + return result; +} + +static void +cls_struct_8byte_gn(ffi_cif* cif __UNUSED__, void* resp, void** args, + void* userdata __UNUSED__) +{ + + struct cls_struct_8byte a1, a2; + + a1 = *(struct cls_struct_8byte*)(args[0]); + a2 = *(struct cls_struct_8byte*)(args[1]); + + *(cls_struct_8byte*)resp = cls_struct_8byte_fn(a1, a2); +} + +int main (void) +{ + ffi_cif cif; + void *code; + ffi_closure *pcl = ffi_closure_alloc(sizeof(ffi_closure), &code); + void* args_dbl[5]; + ffi_type* cls_struct_fields[4]; + ffi_type cls_struct_type; + ffi_type* dbl_arg_types[5]; + + cls_struct_type.size = 0; + cls_struct_type.alignment = 0; + cls_struct_type.type = FFI_TYPE_STRUCT; + cls_struct_type.elements = cls_struct_fields; + + struct cls_struct_8byte g_dbl = { 1, 2.0 }; + struct cls_struct_8byte f_dbl = { 4, 5.0 }; + struct cls_struct_8byte res_dbl; + + cls_struct_fields[0] = &ffi_type_sint; + cls_struct_fields[1] = &ffi_type_float; + cls_struct_fields[2] = NULL; + + dbl_arg_types[0] = &cls_struct_type; + dbl_arg_types[1] = &cls_struct_type; + dbl_arg_types[2] = NULL; + + CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 2, &cls_struct_type, + dbl_arg_types) == FFI_OK); + + args_dbl[0] = &g_dbl; + args_dbl[1] = &f_dbl; + args_dbl[2] = NULL; + + ffi_call(&cif, FFI_FN(cls_struct_8byte_fn), &res_dbl, args_dbl); + /* { dg-output "1 2 4 5: 5 7" } */ + printf("res: %d %g\n", res_dbl.a, res_dbl.b); + /* { dg-output "\nres: 5 7" } */ + CHECK(ffi_prep_closure_loc(pcl, &cif, cls_struct_8byte_gn, NULL, code) == FFI_OK); + + res_dbl = ((cls_struct_8byte(*)(cls_struct_8byte, cls_struct_8byte))(code))(g_dbl, f_dbl); + /* { dg-output "\n1 2 4 5: 5 7" } */ + printf("res: %d %g\n", res_dbl.a, res_dbl.b); + /* { dg-output "\nres: 5 7" } */ + + exit(0); +} Added: python/trunk/Modules/_ctypes/libffi/testsuite/libffi.call/cls_9byte1.c ============================================================================== --- (empty file) +++ python/trunk/Modules/_ctypes/libffi/testsuite/libffi.call/cls_9byte1.c Mon Mar 15 01:02:36 2010 @@ -0,0 +1,90 @@ +/* Area: ffi_call, closure_call + Purpose: Check structure passing with different structure size. + Depending on the ABI. Darwin/AIX do double-word + alignment of the struct if the first element is a double. + Check that it does not here. + Limitations: none. + PR: none. + Originator: 20030914 */ + +/* { dg-do run } */ +#include "ffitest.h" + +typedef struct cls_struct_9byte { + int a; + double b; +} cls_struct_9byte; + +cls_struct_9byte cls_struct_9byte_fn(struct cls_struct_9byte b1, + struct cls_struct_9byte b2) +{ + struct cls_struct_9byte result; + + result.a = b1.a + b2.a; + result.b = b1.b + b2.b; + + printf("%d %g %d %g: %d %g\n", b1.a, b1.b, b2.a, b2.b, + result.a, result.b); + + return result; +} + +static void cls_struct_9byte_gn(ffi_cif* cif __UNUSED__, void* resp, + void** args, void* userdata __UNUSED__) +{ + struct cls_struct_9byte b1, b2; + + b1 = *(struct cls_struct_9byte*)(args[0]); + b2 = *(struct cls_struct_9byte*)(args[1]); + + *(cls_struct_9byte*)resp = cls_struct_9byte_fn(b1, b2); +} + +int main (void) +{ + ffi_cif cif; + void *code; + ffi_closure *pcl = ffi_closure_alloc(sizeof(ffi_closure), &code); + void* args_dbl[3]; + ffi_type* cls_struct_fields[3]; + ffi_type cls_struct_type; + ffi_type* dbl_arg_types[3]; + + cls_struct_type.size = 0; + cls_struct_type.alignment = 0; + cls_struct_type.type = FFI_TYPE_STRUCT; + cls_struct_type.elements = cls_struct_fields; + + struct cls_struct_9byte h_dbl = { 7, 8.0}; + struct cls_struct_9byte j_dbl = { 1, 9.0}; + struct cls_struct_9byte res_dbl; + + cls_struct_fields[0] = &ffi_type_sint; + cls_struct_fields[1] = &ffi_type_double; + cls_struct_fields[2] = NULL; + + dbl_arg_types[0] = &cls_struct_type; + dbl_arg_types[1] = &cls_struct_type; + dbl_arg_types[2] = NULL; + + CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 2, &cls_struct_type, + dbl_arg_types) == FFI_OK); + + args_dbl[0] = &h_dbl; + args_dbl[1] = &j_dbl; + args_dbl[2] = NULL; + + ffi_call(&cif, FFI_FN(cls_struct_9byte_fn), &res_dbl, args_dbl); + /* { dg-output "7 8 1 9: 8 17" } */ + printf("res: %d %g\n", res_dbl.a, res_dbl.b); + /* { dg-output "\nres: 8 17" } */ + + CHECK(ffi_prep_closure_loc(pcl, &cif, cls_struct_9byte_gn, NULL, code) == FFI_OK); + + res_dbl = ((cls_struct_9byte(*)(cls_struct_9byte, cls_struct_9byte))(code))(h_dbl, j_dbl); + /* { dg-output "\n7 8 1 9: 8 17" } */ + printf("res: %d %g\n", res_dbl.a, res_dbl.b); + /* { dg-output "\nres: 8 17" } */ + + exit(0); +} Added: python/trunk/Modules/_ctypes/libffi/testsuite/libffi.call/cls_9byte2.c ============================================================================== --- (empty file) +++ python/trunk/Modules/_ctypes/libffi/testsuite/libffi.call/cls_9byte2.c Mon Mar 15 01:02:36 2010 @@ -0,0 +1,91 @@ +/* Area: ffi_call, closure_call + Purpose: Check structure passing with different structure size. + Depending on the ABI. Darwin/AIX do double-word + alignment of the struct if the first element is a double. + Check that it does here. + Limitations: none. + PR: none. + Originator: 20030914 */ + +/* { dg-do run } */ +#include "ffitest.h" + +typedef struct cls_struct_9byte { + double a; + int b; +} cls_struct_9byte; + +cls_struct_9byte cls_struct_9byte_fn(struct cls_struct_9byte b1, + struct cls_struct_9byte b2) +{ + struct cls_struct_9byte result; + + result.a = b1.a + b2.a; + result.b = b1.b + b2.b; + + printf("%g %d %g %d: %g %d\n", b1.a, b1.b, b2.a, b2.b, + result.a, result.b); + + return result; +} + +static void cls_struct_9byte_gn(ffi_cif* cif __UNUSED__, void* resp, + void** args, void* userdata __UNUSED__) +{ + struct cls_struct_9byte b1, b2; + + b1 = *(struct cls_struct_9byte*)(args[0]); + b2 = *(struct cls_struct_9byte*)(args[1]); + + *(cls_struct_9byte*)resp = cls_struct_9byte_fn(b1, b2); +} + +int main (void) +{ + ffi_cif cif; + void *code; + ffi_closure *pcl = ffi_closure_alloc(sizeof(ffi_closure), &code); + void* args_dbl[3]; + ffi_type* cls_struct_fields[3]; + ffi_type cls_struct_type; + ffi_type* dbl_arg_types[3]; + + cls_struct_type.size = 0; + cls_struct_type.alignment = 0; + cls_struct_type.type = FFI_TYPE_STRUCT; + cls_struct_type.elements = cls_struct_fields; + + struct cls_struct_9byte h_dbl = { 7.0, 8}; + struct cls_struct_9byte j_dbl = { 1.0, 9}; + struct cls_struct_9byte res_dbl; + + cls_struct_fields[0] = &ffi_type_double; + cls_struct_fields[1] = &ffi_type_sint; + cls_struct_fields[2] = NULL; + + dbl_arg_types[0] = &cls_struct_type; + dbl_arg_types[1] = &cls_struct_type; + dbl_arg_types[2] = NULL; + + CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 2, &cls_struct_type, + dbl_arg_types) == FFI_OK); + + args_dbl[0] = &h_dbl; + args_dbl[1] = &j_dbl; + args_dbl[2] = NULL; + + ffi_call(&cif, FFI_FN(cls_struct_9byte_fn), &res_dbl, args_dbl); + /* { dg-output "7 8 1 9: 8 17" } */ + printf("res: %g %d\n", res_dbl.a, res_dbl.b); + /* { dg-output "\nres: 8 17" } */ + + + CHECK(ffi_prep_closure_loc(pcl, &cif, cls_struct_9byte_gn, NULL, code) == FFI_OK); + + res_dbl = ((cls_struct_9byte(*)(cls_struct_9byte, cls_struct_9byte))(code))(h_dbl, j_dbl); + /* { dg-output "\n7 8 1 9: 8 17" } */ + printf("res: %g %d\n", res_dbl.a, res_dbl.b); + /* { dg-output "\nres: 8 17" } */ + + exit(0); +} Added: python/trunk/Modules/_ctypes/libffi/testsuite/libffi.call/cls_align_double.c ============================================================================== --- (empty file) +++ python/trunk/Modules/_ctypes/libffi/testsuite/libffi.call/cls_align_double.c Mon Mar 15 01:02:36 2010 @@ -0,0 +1,93 @@ +/* Area: ffi_call, closure_call + Purpose: Check structure alignment of double. + Limitations: none. + PR: none. + Originator: 20031203 */ + + + +/* { dg-do run } */ +#include "ffitest.h" + +typedef struct cls_struct_align { + unsigned char a; + double b; + unsigned char c; +} cls_struct_align; + +cls_struct_align cls_struct_align_fn(struct cls_struct_align a1, + struct cls_struct_align a2) +{ + struct cls_struct_align result; + + result.a = a1.a + a2.a; + result.b = a1.b + a2.b; + result.c = a1.c + a2.c; + + printf("%d %g %d %d %g %d: %d %g %d\n", a1.a, a1.b, a1.c, a2.a, a2.b, a2.c, result.a, result.b, result.c); + + return result; +} + +static void +cls_struct_align_gn(ffi_cif* cif __UNUSED__, void* resp, void** args, + void* userdata __UNUSED__) +{ + + struct cls_struct_align a1, a2; + + a1 = *(struct cls_struct_align*)(args[0]); + a2 = *(struct cls_struct_align*)(args[1]); + + *(cls_struct_align*)resp = cls_struct_align_fn(a1, a2); +} + +int main (void) +{ + ffi_cif cif; + void *code; + ffi_closure *pcl = ffi_closure_alloc(sizeof(ffi_closure), &code); + void* args_dbl[5]; + ffi_type* cls_struct_fields[4]; + ffi_type cls_struct_type; + ffi_type* dbl_arg_types[5]; + + cls_struct_type.size = 0; + cls_struct_type.alignment = 0; + cls_struct_type.type = FFI_TYPE_STRUCT; + cls_struct_type.elements = cls_struct_fields; + + struct cls_struct_align g_dbl = { 12, 4951, 127 }; + struct cls_struct_align f_dbl = { 1, 9320, 13 }; + struct cls_struct_align res_dbl; + + cls_struct_fields[0] = &ffi_type_uchar; + cls_struct_fields[1] = &ffi_type_double; + cls_struct_fields[2] = &ffi_type_uchar; + cls_struct_fields[3] = NULL; + + dbl_arg_types[0] = &cls_struct_type; + dbl_arg_types[1] = &cls_struct_type; + dbl_arg_types[2] = NULL; + + CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 2, &cls_struct_type, + dbl_arg_types) == FFI_OK); + + args_dbl[0] = &g_dbl; + args_dbl[1] = &f_dbl; + args_dbl[2] = NULL; + + ffi_call(&cif, FFI_FN(cls_struct_align_fn), &res_dbl, args_dbl); + /* { dg-output "12 4951 127 1 9320 13: 13 14271 140" } */ + printf("res: %d %g %d\n", res_dbl.a, res_dbl.b, res_dbl.c); + /* { dg-output "\nres: 13 14271 140" } */ + + CHECK(ffi_prep_closure_loc(pcl, &cif, cls_struct_align_gn, NULL, code) == FFI_OK); + + res_dbl = ((cls_struct_align(*)(cls_struct_align, cls_struct_align))(code))(g_dbl, f_dbl); + /* { dg-output "\n12 4951 127 1 9320 13: 13 14271 140" } */ + printf("res: %d %g %d\n", res_dbl.a, res_dbl.b, res_dbl.c); + /* { dg-output "\nres: 13 14271 140" } */ + + exit(0); +} Added: python/trunk/Modules/_ctypes/libffi/testsuite/libffi.call/cls_align_float.c ============================================================================== --- (empty file) +++ python/trunk/Modules/_ctypes/libffi/testsuite/libffi.call/cls_align_float.c Mon Mar 15 01:02:36 2010 @@ -0,0 +1,91 @@ +/* Area: ffi_call, closure_call + Purpose: Check structure alignment of float. + Limitations: none. + PR: none. + Originator: 20031203 */ + +/* { dg-do run } */ +#include "ffitest.h" + +typedef struct cls_struct_align { + unsigned char a; + float b; + unsigned char c; +} cls_struct_align; + +cls_struct_align cls_struct_align_fn(struct cls_struct_align a1, + struct cls_struct_align a2) +{ + struct cls_struct_align result; + + result.a = a1.a + a2.a; + result.b = a1.b + a2.b; + result.c = a1.c + a2.c; + + printf("%d %g %d %d %g %d: %d %g %d\n", a1.a, (double)a1.b, a1.c, a2.a, (double)a2.b, a2.c, result.a, (double)result.b, result.c); + + return result; +} + +static void +cls_struct_align_gn(ffi_cif* cif __UNUSED__, void* resp, void** args, + void* userdata __UNUSED__) +{ + + struct cls_struct_align a1, a2; + + a1 = *(struct cls_struct_align*)(args[0]); + a2 = *(struct cls_struct_align*)(args[1]); + + *(cls_struct_align*)resp = cls_struct_align_fn(a1, a2); +} + +int main (void) +{ + ffi_cif cif; + void *code; + ffi_closure *pcl = ffi_closure_alloc(sizeof(ffi_closure), &code); + void* args_dbl[5]; + ffi_type* cls_struct_fields[4]; + ffi_type cls_struct_type; + ffi_type* dbl_arg_types[5]; + + cls_struct_type.size = 0; + cls_struct_type.alignment = 0; + cls_struct_type.type = FFI_TYPE_STRUCT; + cls_struct_type.elements = cls_struct_fields; + + struct cls_struct_align g_dbl = { 12, 4951, 127 }; + struct cls_struct_align f_dbl = { 1, 9320, 13 }; + struct cls_struct_align res_dbl; + + cls_struct_fields[0] = &ffi_type_uchar; + cls_struct_fields[1] = &ffi_type_float; + cls_struct_fields[2] = &ffi_type_uchar; + cls_struct_fields[3] = NULL; + + dbl_arg_types[0] = &cls_struct_type; + dbl_arg_types[1] = &cls_struct_type; + dbl_arg_types[2] = NULL; + + CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 2, &cls_struct_type, + dbl_arg_types) == FFI_OK); + + args_dbl[0] = &g_dbl; + args_dbl[1] = &f_dbl; + args_dbl[2] = NULL; + + ffi_call(&cif, FFI_FN(cls_struct_align_fn), &res_dbl, args_dbl); + /* { dg-output "12 4951 127 1 9320 13: 13 14271 140" } */ + printf("res: %d %g %d\n", res_dbl.a, (double)res_dbl.b, res_dbl.c); + /* { dg-output "\nres: 13 14271 140" } */ + + CHECK(ffi_prep_closure_loc(pcl, &cif, cls_struct_align_gn, NULL, code) == FFI_OK); + + res_dbl = ((cls_struct_align(*)(cls_struct_align, cls_struct_align))(code))(g_dbl, f_dbl); + /* { dg-output "\n12 4951 127 1 9320 13: 13 14271 140" } */ + printf("res: %d %g %d\n", res_dbl.a, (double)res_dbl.b, res_dbl.c); + /* { dg-output "\nres: 13 14271 140" } */ + + exit(0); +} Added: python/trunk/Modules/_ctypes/libffi/testsuite/libffi.call/cls_align_longdouble.c ============================================================================== --- (empty file) +++ python/trunk/Modules/_ctypes/libffi/testsuite/libffi.call/cls_align_longdouble.c Mon Mar 15 01:02:36 2010 @@ -0,0 +1,92 @@ +/* Area: ffi_call, closure_call + Purpose: Check structure alignment of long double. + Limitations: none. + PR: none. + Originator: 20031203 */ + +/* { dg-do run } */ + +#include "ffitest.h" + +typedef struct cls_struct_align { + unsigned char a; + long double b; + unsigned char c; +} cls_struct_align; + +cls_struct_align cls_struct_align_fn(struct cls_struct_align a1, + struct cls_struct_align a2) +{ + struct cls_struct_align result; + + result.a = a1.a + a2.a; + result.b = a1.b + a2.b; + result.c = a1.c + a2.c; + + printf("%d %g %d %d %g %d: %d %g %d\n", a1.a, (double)a1.b, a1.c, a2.a, (double)a2.b, a2.c, result.a, (double)result.b, result.c); + + return result; +} + +static void +cls_struct_align_gn(ffi_cif* cif __UNUSED__, void* resp, void** args, + void* userdata __UNUSED__) +{ + + struct cls_struct_align a1, a2; + + a1 = *(struct cls_struct_align*)(args[0]); + a2 = *(struct cls_struct_align*)(args[1]); + + *(cls_struct_align*)resp = cls_struct_align_fn(a1, a2); +} + +int main (void) +{ + ffi_cif cif; + void *code; + ffi_closure *pcl = ffi_closure_alloc(sizeof(ffi_closure), &code); + void* args_dbl[5]; + ffi_type* cls_struct_fields[4]; + ffi_type cls_struct_type; + ffi_type* dbl_arg_types[5]; + + cls_struct_type.size = 0; + cls_struct_type.alignment = 0; + cls_struct_type.type = FFI_TYPE_STRUCT; + cls_struct_type.elements = cls_struct_fields; + + struct cls_struct_align g_dbl = { 12, 4951, 127 }; + struct cls_struct_align f_dbl = { 1, 9320, 13 }; + struct cls_struct_align res_dbl; + + cls_struct_fields[0] = &ffi_type_uchar; + cls_struct_fields[1] = &ffi_type_longdouble; + cls_struct_fields[2] = &ffi_type_uchar; + cls_struct_fields[3] = NULL; + + dbl_arg_types[0] = &cls_struct_type; + dbl_arg_types[1] = &cls_struct_type; + dbl_arg_types[2] = NULL; + + CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 2, &cls_struct_type, + dbl_arg_types) == FFI_OK); + + args_dbl[0] = &g_dbl; + args_dbl[1] = &f_dbl; + args_dbl[2] = NULL; + + ffi_call(&cif, FFI_FN(cls_struct_align_fn), &res_dbl, args_dbl); + /* { dg-output "12 4951 127 1 9320 13: 13 14271 140" } */ + printf("res: %d %g %d\n", res_dbl.a, (double)res_dbl.b, res_dbl.c); + /* { dg-output "\nres: 13 14271 140" } */ + + CHECK(ffi_prep_closure_loc(pcl, &cif, cls_struct_align_gn, NULL, code) == FFI_OK); + + res_dbl = ((cls_struct_align(*)(cls_struct_align, cls_struct_align))(code))(g_dbl, f_dbl); + /* { dg-output "\n12 4951 127 1 9320 13: 13 14271 140" } */ + printf("res: %d %g %d\n", res_dbl.a, (double)res_dbl.b, res_dbl.c); + /* { dg-output "\nres: 13 14271 140" } */ + + exit(0); +} Added: python/trunk/Modules/_ctypes/libffi/testsuite/libffi.call/cls_align_longdouble_split.c ============================================================================== --- (empty file) +++ python/trunk/Modules/_ctypes/libffi/testsuite/libffi.call/cls_align_longdouble_split.c Mon Mar 15 01:02:36 2010 @@ -0,0 +1,134 @@ +/* Area: ffi_call, closure_call + Purpose: Check structure alignment of long double. + Limitations: none. + PR: none. + Originator: 20031203 */ + +/* { dg-excess-errors "no long double format" { xfail x86_64-*-mingw* x86_64-*-cygwin* } } */ +/* { dg-do run { xfail strongarm*-*-* xscale*-*-* } } */ +/* { dg-options -mlong-double-128 { target powerpc64*-*-* } } */ +/* { dg-output "" { xfail x86_64-*-mingw* x86_64-*-cygwin* } } */ + +#include "ffitest.h" + +typedef struct cls_struct_align { + long double a; + long double b; + long double c; + long double d; + long double e; + long double f; + long double g; +} cls_struct_align; + +cls_struct_align cls_struct_align_fn( + cls_struct_align a1, + cls_struct_align a2) +{ + struct cls_struct_align r; + + r.a = a1.a + a2.a; + r.b = a1.b + a2.b; + r.c = a1.c + a2.c; + r.d = a1.d + a2.d; + r.e = a1.e + a2.e; + r.f = a1.f + a2.f; + r.g = a1.g + a2.g; + + printf("%Lg %Lg %Lg %Lg %Lg %Lg %Lg %Lg %Lg %Lg %Lg %Lg %Lg %Lg: " + "%Lg %Lg %Lg %Lg %Lg %Lg %Lg\n", + a1.a, a1.b, a1.c, a1.d, a1.e, a1.f, a1.g, + a2.a, a2.b, a2.c, a2.d, a2.e, a2.f, a2.g, + r.a, r.b, r.c, r.d, r.e, r.f, r.g); + + return r; +} + +cls_struct_align cls_struct_align_fn2( + cls_struct_align a1) +{ + struct cls_struct_align r; + + r.a = a1.a + 1; + r.b = a1.b + 1; + r.c = a1.c + 1; + r.d = a1.d + 1; + r.e = a1.e + 1; + r.f = a1.f + 1; + r.g = a1.g + 1; + + printf("%Lg %Lg %Lg %Lg %Lg %Lg %Lg: " + "%Lg %Lg %Lg %Lg %Lg %Lg %Lg\n", + a1.a, a1.b, a1.c, a1.d, a1.e, a1.f, a1.g, + r.a, r.b, r.c, r.d, r.e, r.f, r.g); + + return r; +} + +static void +cls_struct_align_gn(ffi_cif* cif __UNUSED__, void* resp, void** args, + void* userdata __UNUSED__) +{ + struct cls_struct_align a1, a2; + + a1 = *(struct cls_struct_align*)(args[0]); + a2 = *(struct cls_struct_align*)(args[1]); + + *(cls_struct_align*)resp = cls_struct_align_fn(a1, a2); +} + +int main (void) +{ + ffi_cif cif; + void *code; + ffi_closure *pcl = ffi_closure_alloc(sizeof(ffi_closure), &code); + void* args_dbl[3]; + ffi_type* cls_struct_fields[8]; + ffi_type cls_struct_type; + ffi_type* dbl_arg_types[3]; + + cls_struct_type.size = 0; + cls_struct_type.alignment = 0; + cls_struct_type.type = FFI_TYPE_STRUCT; + cls_struct_type.elements = cls_struct_fields; + + struct cls_struct_align g_dbl = { 1, 2, 3, 4, 5, 6, 7 }; + struct cls_struct_align f_dbl = { 8, 9, 10, 11, 12, 13, 14 }; + struct cls_struct_align res_dbl; + + cls_struct_fields[0] = &ffi_type_longdouble; + cls_struct_fields[1] = &ffi_type_longdouble; + cls_struct_fields[2] = &ffi_type_longdouble; + cls_struct_fields[3] = &ffi_type_longdouble; + cls_struct_fields[4] = &ffi_type_longdouble; + cls_struct_fields[5] = &ffi_type_longdouble; + cls_struct_fields[6] = &ffi_type_longdouble; + cls_struct_fields[7] = NULL; + + dbl_arg_types[0] = &cls_struct_type; + dbl_arg_types[1] = &cls_struct_type; + dbl_arg_types[2] = NULL; + + CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 2, &cls_struct_type, + dbl_arg_types) == FFI_OK); + + args_dbl[0] = &g_dbl; + args_dbl[1] = &f_dbl; + args_dbl[2] = NULL; + + ffi_call(&cif, FFI_FN(cls_struct_align_fn), &res_dbl, args_dbl); + /* { dg-output "1 2 3 4 5 6 7 8 9 10 11 12 13 14: 9 11 13 15 17 19 21" } */ + printf("res: %Lg %Lg %Lg %Lg %Lg %Lg %Lg\n", res_dbl.a, res_dbl.b, + res_dbl.c, res_dbl.d, res_dbl.e, res_dbl.f, res_dbl.g); + /* { dg-output "\nres: 9 11 13 15 17 19 21" } */ + + CHECK(ffi_prep_closure_loc(pcl, &cif, cls_struct_align_gn, NULL, code) == FFI_OK); + + res_dbl = ((cls_struct_align(*)(cls_struct_align, cls_struct_align))(code))(g_dbl, f_dbl); + /* { dg-output "\n1 2 3 4 5 6 7 8 9 10 11 12 13 14: 9 11 13 15 17 19 21" } */ + printf("res: %Lg %Lg %Lg %Lg %Lg %Lg %Lg\n", res_dbl.a, res_dbl.b, + res_dbl.c, res_dbl.d, res_dbl.e, res_dbl.f, res_dbl.g); + /* { dg-output "\nres: 9 11 13 15 17 19 21" } */ + + exit(0); +} Added: python/trunk/Modules/_ctypes/libffi/testsuite/libffi.call/cls_align_longdouble_split2.c ============================================================================== --- (empty file) +++ python/trunk/Modules/_ctypes/libffi/testsuite/libffi.call/cls_align_longdouble_split2.c Mon Mar 15 01:02:36 2010 @@ -0,0 +1,117 @@ +/* Area: ffi_call, closure_call + Purpose: Check structure alignment of long double. + Limitations: none. + PR: none. + Originator: Blake Chaffin 6/18/2007 +*/ + +/* { dg-excess-errors "no long double format" { xfail x86_64-*-mingw* x86_64-*-cygwin* } } */ +/* { dg-do run { xfail strongarm*-*-* } } */ +/* { dg-options -mlong-double-128 { target powerpc64*-*-* } } */ +/* { dg-output "" { xfail x86_64-*-mingw* x86_64-*-cygwin* } } */ + +#include "ffitest.h" + +typedef struct cls_struct_align { + long double a; + long double b; + long double c; + long double d; + long double e; + double f; + long double g; +} cls_struct_align; + +cls_struct_align cls_struct_align_fn( + cls_struct_align a1, + cls_struct_align a2) +{ + struct cls_struct_align r; + + r.a = a1.a + a2.a; + r.b = a1.b + a2.b; + r.c = a1.c + a2.c; + r.d = a1.d + a2.d; + r.e = a1.e + a2.e; + r.f = a1.f + a2.f; + r.g = a1.g + a2.g; + + printf("%Lg %Lg %Lg %Lg %Lg %g %Lg %Lg %Lg %Lg %Lg %Lg %g %Lg: " + "%Lg %Lg %Lg %Lg %Lg %g %Lg\n", + a1.a, a1.b, a1.c, a1.d, a1.e, a1.f, a1.g, + a2.a, a2.b, a2.c, a2.d, a2.e, a2.f, a2.g, + r.a, r.b, r.c, r.d, r.e, r.f, r.g); + + return r; +} + +static void +cls_struct_align_gn(ffi_cif* cif __UNUSED__, void* resp, void** args, + void* userdata __UNUSED__) +{ + struct cls_struct_align a1, a2; + + a1 = *(struct cls_struct_align*)(args[0]); + a2 = *(struct cls_struct_align*)(args[1]); + + *(cls_struct_align*)resp = cls_struct_align_fn(a1, a2); +} + +int main (void) +{ + ffi_cif cif; + void *code; + ffi_closure *pcl = ffi_closure_alloc(sizeof(ffi_closure), &code); + void* args_dbl[3]; + ffi_type* cls_struct_fields[8]; + ffi_type cls_struct_type; + ffi_type* dbl_arg_types[3]; + + cls_struct_type.size = 0; + cls_struct_type.alignment = 0; + cls_struct_type.type = FFI_TYPE_STRUCT; + cls_struct_type.elements = cls_struct_fields; + + struct cls_struct_align g_dbl = { 1, 2, 3, 4, 5, 6, 7 }; + struct cls_struct_align f_dbl = { 8, 9, 10, 11, 12, 13, 14 }; + struct cls_struct_align res_dbl; + + cls_struct_fields[0] = &ffi_type_longdouble; + cls_struct_fields[1] = &ffi_type_longdouble; + cls_struct_fields[2] = &ffi_type_longdouble; + cls_struct_fields[3] = &ffi_type_longdouble; + cls_struct_fields[4] = &ffi_type_longdouble; + cls_struct_fields[5] = &ffi_type_double; + cls_struct_fields[6] = &ffi_type_longdouble; + cls_struct_fields[7] = NULL; + + dbl_arg_types[0] = &cls_struct_type; + dbl_arg_types[1] = &cls_struct_type; + dbl_arg_types[2] = NULL; + + CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 2, &cls_struct_type, + dbl_arg_types) == FFI_OK); + + args_dbl[0] = &g_dbl; + args_dbl[1] = &f_dbl; + args_dbl[2] = NULL; + + ffi_call(&cif, FFI_FN(cls_struct_align_fn), &res_dbl, args_dbl); + /* { dg-output "1 2 3 4 5 6 7 8 9 10 11 12 13 14: 9 11 13 15 17 19 21" } */ + printf("res: %Lg %Lg %Lg %Lg %Lg %g %Lg\n", res_dbl.a, res_dbl.b, + res_dbl.c, res_dbl.d, res_dbl.e, res_dbl.f, res_dbl.g); + /* { dg-output "\nres: 9 11 13 15 17 19 21" } */ + + CHECK(ffi_prep_closure_loc(pcl, &cif, cls_struct_align_gn, NULL, code) == FFI_OK); + + res_dbl = ((cls_struct_align(*)(cls_struct_align, cls_struct_align))(code))(g_dbl, f_dbl); + /* { dg-output "\n1 2 3 4 5 6 7 8 9 10 11 12 13 14: 9 11 13 15 17 19 21" } */ + printf("res: %Lg %Lg %Lg %Lg %Lg %g %Lg\n", res_dbl.a, res_dbl.b, + res_dbl.c, res_dbl.d, res_dbl.e, res_dbl.f, res_dbl.g); + /* { dg-output "\nres: 9 11 13 15 17 19 21" } */ + + exit(0); +} + + + Added: python/trunk/Modules/_ctypes/libffi/testsuite/libffi.call/cls_align_pointer.c ============================================================================== --- (empty file) +++ python/trunk/Modules/_ctypes/libffi/testsuite/libffi.call/cls_align_pointer.c Mon Mar 15 01:02:36 2010 @@ -0,0 +1,95 @@ +/* Area: ffi_call, closure_call + Purpose: Check structure alignment of pointer. + Limitations: none. + PR: none. + Originator: 20031203 */ + +/* { dg-do run } */ +#include "ffitest.h" + +typedef struct cls_struct_align { + unsigned char a; + void *b; + unsigned char c; +} cls_struct_align; + +cls_struct_align cls_struct_align_fn(struct cls_struct_align a1, + struct cls_struct_align a2) +{ + struct cls_struct_align result; + + result.a = a1.a + a2.a; + result.b = (void *)((uintptr_t)a1.b + (uintptr_t)a2.b); + result.c = a1.c + a2.c; + + printf("%d %" PRIuPTR " %d %d %" PRIuPTR " %d: %d %" PRIuPTR " %d\n", + a1.a, (uintptr_t)a1.b, a1.c, + a2.a, (uintptr_t)a2.b, a2.c, + result.a, (uintptr_t)result.b, + result.c); + + return result; +} + +static void +cls_struct_align_gn(ffi_cif* cif __UNUSED__, void* resp, void** args, + void* userdata __UNUSED__) +{ + + struct cls_struct_align a1, a2; + + a1 = *(struct cls_struct_align*)(args[0]); + a2 = *(struct cls_struct_align*)(args[1]); + + *(cls_struct_align*)resp = cls_struct_align_fn(a1, a2); +} + +int main (void) +{ + ffi_cif cif; + void *code; + ffi_closure *pcl = ffi_closure_alloc(sizeof(ffi_closure), &code); + void* args_dbl[5]; + ffi_type* cls_struct_fields[4]; + ffi_type cls_struct_type; + ffi_type* dbl_arg_types[5]; + + cls_struct_type.size = 0; + cls_struct_type.alignment = 0; + cls_struct_type.type = FFI_TYPE_STRUCT; + cls_struct_type.elements = cls_struct_fields; + + struct cls_struct_align g_dbl = { 12, (void *)4951, 127 }; + struct cls_struct_align f_dbl = { 1, (void *)9320, 13 }; + struct cls_struct_align res_dbl; + + cls_struct_fields[0] = &ffi_type_uchar; + cls_struct_fields[1] = &ffi_type_pointer; + cls_struct_fields[2] = &ffi_type_uchar; + cls_struct_fields[3] = NULL; + + dbl_arg_types[0] = &cls_struct_type; + dbl_arg_types[1] = &cls_struct_type; + dbl_arg_types[2] = NULL; + + CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 2, &cls_struct_type, + dbl_arg_types) == FFI_OK); + + args_dbl[0] = &g_dbl; + args_dbl[1] = &f_dbl; + args_dbl[2] = NULL; + + ffi_call(&cif, FFI_FN(cls_struct_align_fn), &res_dbl, args_dbl); + /* { dg-output "12 4951 127 1 9320 13: 13 14271 140" } */ + printf("res: %d %" PRIuPTR " %d\n", res_dbl.a, (uintptr_t)res_dbl.b, res_dbl.c); + /* { dg-output "\nres: 13 14271 140" } */ + + CHECK(ffi_prep_closure_loc(pcl, &cif, cls_struct_align_gn, NULL, code) == FFI_OK); + + res_dbl = ((cls_struct_align(*)(cls_struct_align, cls_struct_align))(code))(g_dbl, f_dbl); + /* { dg-output "\n12 4951 127 1 9320 13: 13 14271 140" } */ + printf("res: %d %" PRIuPTR " %d\n", res_dbl.a, (uintptr_t)res_dbl.b, res_dbl.c); + /* { dg-output "\nres: 13 14271 140" } */ + + exit(0); +} Added: python/trunk/Modules/_ctypes/libffi/testsuite/libffi.call/cls_align_sint16.c ============================================================================== --- (empty file) +++ python/trunk/Modules/_ctypes/libffi/testsuite/libffi.call/cls_align_sint16.c Mon Mar 15 01:02:36 2010 @@ -0,0 +1,91 @@ +/* Area: ffi_call, closure_call + Purpose: Check structure alignment of sint16. + Limitations: none. + PR: none. + Originator: 20031203 */ + +/* { dg-do run } */ +#include "ffitest.h" + +typedef struct cls_struct_align { + unsigned char a; + signed short b; + unsigned char c; +} cls_struct_align; + +cls_struct_align cls_struct_align_fn(struct cls_struct_align a1, + struct cls_struct_align a2) +{ + struct cls_struct_align result; + + result.a = a1.a + a2.a; + result.b = a1.b + a2.b; + result.c = a1.c + a2.c; + + printf("%d %d %d %d %d %d: %d %d %d\n", a1.a, a1.b, a1.c, a2.a, a2.b, a2.c, result.a, result.b, result.c); + + return result; +} + +static void +cls_struct_align_gn(ffi_cif* cif __UNUSED__, void* resp, void** args, + void* userdata __UNUSED__) +{ + + struct cls_struct_align a1, a2; + + a1 = *(struct cls_struct_align*)(args[0]); + a2 = *(struct cls_struct_align*)(args[1]); + + *(cls_struct_align*)resp = cls_struct_align_fn(a1, a2); +} + +int main (void) +{ + ffi_cif cif; + void *code; + ffi_closure *pcl = ffi_closure_alloc(sizeof(ffi_closure), &code); + void* args_dbl[5]; + ffi_type* cls_struct_fields[4]; + ffi_type cls_struct_type; + ffi_type* dbl_arg_types[5]; + + cls_struct_type.size = 0; + cls_struct_type.alignment = 0; + cls_struct_type.type = FFI_TYPE_STRUCT; + cls_struct_type.elements = cls_struct_fields; + + struct cls_struct_align g_dbl = { 12, 4951, 127 }; + struct cls_struct_align f_dbl = { 1, 9320, 13 }; + struct cls_struct_align res_dbl; + + cls_struct_fields[0] = &ffi_type_uchar; + cls_struct_fields[1] = &ffi_type_sshort; + cls_struct_fields[2] = &ffi_type_uchar; + cls_struct_fields[3] = NULL; + + dbl_arg_types[0] = &cls_struct_type; + dbl_arg_types[1] = &cls_struct_type; + dbl_arg_types[2] = NULL; + + CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 2, &cls_struct_type, + dbl_arg_types) == FFI_OK); + + args_dbl[0] = &g_dbl; + args_dbl[1] = &f_dbl; + args_dbl[2] = NULL; + + ffi_call(&cif, FFI_FN(cls_struct_align_fn), &res_dbl, args_dbl); + /* { dg-output "12 4951 127 1 9320 13: 13 14271 140" } */ + printf("res: %d %d %d\n", res_dbl.a, res_dbl.b, res_dbl.c); + /* { dg-output "\nres: 13 14271 140" } */ + + CHECK(ffi_prep_closure_loc(pcl, &cif, cls_struct_align_gn, NULL, code) == FFI_OK); + + res_dbl = ((cls_struct_align(*)(cls_struct_align, cls_struct_align))(code))(g_dbl, f_dbl); + /* { dg-output "\n12 4951 127 1 9320 13: 13 14271 140" } */ + printf("res: %d %d %d\n", res_dbl.a, res_dbl.b, res_dbl.c); + /* { dg-output "\nres: 13 14271 140" } */ + + exit(0); +} Added: python/trunk/Modules/_ctypes/libffi/testsuite/libffi.call/cls_align_sint32.c ============================================================================== --- (empty file) +++ python/trunk/Modules/_ctypes/libffi/testsuite/libffi.call/cls_align_sint32.c Mon Mar 15 01:02:36 2010 @@ -0,0 +1,91 @@ +/* Area: ffi_call, closure_call + Purpose: Check structure alignment of sint32. + Limitations: none. + PR: none. + Originator: 20031203 */ + +/* { dg-do run } */ +#include "ffitest.h" + +typedef struct cls_struct_align { + unsigned char a; + signed int b; + unsigned char c; +} cls_struct_align; + +cls_struct_align cls_struct_align_fn(struct cls_struct_align a1, + struct cls_struct_align a2) +{ + struct cls_struct_align result; + + result.a = a1.a + a2.a; + result.b = a1.b + a2.b; + result.c = a1.c + a2.c; + + printf("%d %d %d %d %d %d: %d %d %d\n", a1.a, a1.b, a1.c, a2.a, a2.b, a2.c, result.a, result.b, result.c); + + return result; +} + +static void +cls_struct_align_gn(ffi_cif* cif __UNUSED__, void* resp, void** args, + void* userdata __UNUSED__) +{ + + struct cls_struct_align a1, a2; + + a1 = *(struct cls_struct_align*)(args[0]); + a2 = *(struct cls_struct_align*)(args[1]); + + *(cls_struct_align*)resp = cls_struct_align_fn(a1, a2); +} + +int main (void) +{ + ffi_cif cif; + void *code; + ffi_closure *pcl = ffi_closure_alloc(sizeof(ffi_closure), &code); + void* args_dbl[5]; + ffi_type* cls_struct_fields[4]; + ffi_type cls_struct_type; + ffi_type* dbl_arg_types[5]; + + cls_struct_type.size = 0; + cls_struct_type.alignment = 0; + cls_struct_type.type = FFI_TYPE_STRUCT; + cls_struct_type.elements = cls_struct_fields; + + struct cls_struct_align g_dbl = { 12, 4951, 127 }; + struct cls_struct_align f_dbl = { 1, 9320, 13 }; + struct cls_struct_align res_dbl; + + cls_struct_fields[0] = &ffi_type_uchar; + cls_struct_fields[1] = &ffi_type_sint; + cls_struct_fields[2] = &ffi_type_uchar; + cls_struct_fields[3] = NULL; + + dbl_arg_types[0] = &cls_struct_type; + dbl_arg_types[1] = &cls_struct_type; + dbl_arg_types[2] = NULL; + + CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 2, &cls_struct_type, + dbl_arg_types) == FFI_OK); + + args_dbl[0] = &g_dbl; + args_dbl[1] = &f_dbl; + args_dbl[2] = NULL; + + ffi_call(&cif, FFI_FN(cls_struct_align_fn), &res_dbl, args_dbl); + /* { dg-output "12 4951 127 1 9320 13: 13 14271 140" } */ + printf("res: %d %d %d\n", res_dbl.a, res_dbl.b, res_dbl.c); + /* { dg-output "\nres: 13 14271 140" } */ + + CHECK(ffi_prep_closure_loc(pcl, &cif, cls_struct_align_gn, NULL, code) == FFI_OK); + + res_dbl = ((cls_struct_align(*)(cls_struct_align, cls_struct_align))(code))(g_dbl, f_dbl); + /* { dg-output "\n12 4951 127 1 9320 13: 13 14271 140" } */ + printf("res: %d %d %d\n", res_dbl.a, res_dbl.b, res_dbl.c); + /* { dg-output "\nres: 13 14271 140" } */ + + exit(0); +} Added: python/trunk/Modules/_ctypes/libffi/testsuite/libffi.call/cls_align_sint64.c ============================================================================== --- (empty file) +++ python/trunk/Modules/_ctypes/libffi/testsuite/libffi.call/cls_align_sint64.c Mon Mar 15 01:02:36 2010 @@ -0,0 +1,91 @@ +/* Area: ffi_call, closure_call + Purpose: Check structure alignment of sint64. + Limitations: none. + PR: none. + Originator: 20031203 */ + +/* { dg-do run } */ +#include "ffitest.h" + +typedef struct cls_struct_align { + unsigned char a; + signed long long b; + unsigned char c; +} cls_struct_align; + +cls_struct_align cls_struct_align_fn(struct cls_struct_align a1, + struct cls_struct_align a2) +{ + struct cls_struct_align result; + + result.a = a1.a + a2.a; + result.b = a1.b + a2.b; + result.c = a1.c + a2.c; + + printf("%d %" PRIdLL " %d %d %" PRIdLL " %d: %d %" PRIdLL " %d\n", a1.a, a1.b, a1.c, a2.a, a2.b, a2.c, result.a, result.b, result.c); + + return result; +} + +static void +cls_struct_align_gn(ffi_cif* cif __UNUSED__, void* resp, void** args, + void* userdata __UNUSED__) +{ + + struct cls_struct_align a1, a2; + + a1 = *(struct cls_struct_align*)(args[0]); + a2 = *(struct cls_struct_align*)(args[1]); + + *(cls_struct_align*)resp = cls_struct_align_fn(a1, a2); +} + +int main (void) +{ + ffi_cif cif; + void *code; + ffi_closure *pcl = ffi_closure_alloc(sizeof(ffi_closure), &code); + void* args_dbl[5]; + ffi_type* cls_struct_fields[4]; + ffi_type cls_struct_type; + ffi_type* dbl_arg_types[5]; + + cls_struct_type.size = 0; + cls_struct_type.alignment = 0; + cls_struct_type.type = FFI_TYPE_STRUCT; + cls_struct_type.elements = cls_struct_fields; + + struct cls_struct_align g_dbl = { 12, 4951, 127 }; + struct cls_struct_align f_dbl = { 1, 9320, 13 }; + struct cls_struct_align res_dbl; + + cls_struct_fields[0] = &ffi_type_uchar; + cls_struct_fields[1] = &ffi_type_sint64; + cls_struct_fields[2] = &ffi_type_uchar; + cls_struct_fields[3] = NULL; + + dbl_arg_types[0] = &cls_struct_type; + dbl_arg_types[1] = &cls_struct_type; + dbl_arg_types[2] = NULL; + + CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 2, &cls_struct_type, + dbl_arg_types) == FFI_OK); + + args_dbl[0] = &g_dbl; + args_dbl[1] = &f_dbl; + args_dbl[2] = NULL; + + ffi_call(&cif, FFI_FN(cls_struct_align_fn), &res_dbl, args_dbl); + /* { dg-output "12 4951 127 1 9320 13: 13 14271 140" } */ + printf("res: %d %" PRIdLL " %d\n", res_dbl.a, res_dbl.b, res_dbl.c); + /* { dg-output "\nres: 13 14271 140" } */ + + CHECK(ffi_prep_closure_loc(pcl, &cif, cls_struct_align_gn, NULL, code) == FFI_OK); + + res_dbl = ((cls_struct_align(*)(cls_struct_align, cls_struct_align))(code))(g_dbl, f_dbl); + /* { dg-output "\n12 4951 127 1 9320 13: 13 14271 140" } */ + printf("res: %d %" PRIdLL " %d\n", res_dbl.a, res_dbl.b, res_dbl.c); + /* { dg-output "\nres: 13 14271 140" } */ + + exit(0); +} Added: python/trunk/Modules/_ctypes/libffi/testsuite/libffi.call/cls_align_uint16.c ============================================================================== --- (empty file) +++ python/trunk/Modules/_ctypes/libffi/testsuite/libffi.call/cls_align_uint16.c Mon Mar 15 01:02:36 2010 @@ -0,0 +1,91 @@ +/* Area: ffi_call, closure_call + Purpose: Check structure alignment of uint16. + Limitations: none. + PR: none. + Originator: 20031203 */ + +/* { dg-do run } */ +#include "ffitest.h" + +typedef struct cls_struct_align { + unsigned char a; + unsigned short b; + unsigned char c; +} cls_struct_align; + +cls_struct_align cls_struct_align_fn(struct cls_struct_align a1, + struct cls_struct_align a2) +{ + struct cls_struct_align result; + + result.a = a1.a + a2.a; + result.b = a1.b + a2.b; + result.c = a1.c + a2.c; + + printf("%d %d %d %d %d %d: %d %d %d\n", a1.a, a1.b, a1.c, a2.a, a2.b, a2.c, result.a, result.b, result.c); + + return result; +} + +static void +cls_struct_align_gn(ffi_cif* cif __UNUSED__, void* resp, void** args, + void* userdata __UNUSED__) +{ + + struct cls_struct_align a1, a2; + + a1 = *(struct cls_struct_align*)(args[0]); + a2 = *(struct cls_struct_align*)(args[1]); + + *(cls_struct_align*)resp = cls_struct_align_fn(a1, a2); +} + +int main (void) +{ + ffi_cif cif; + void *code; + ffi_closure *pcl = ffi_closure_alloc(sizeof(ffi_closure), &code); + void* args_dbl[5]; + ffi_type* cls_struct_fields[4]; + ffi_type cls_struct_type; + ffi_type* dbl_arg_types[5]; + + cls_struct_type.size = 0; + cls_struct_type.alignment = 0; + cls_struct_type.type = FFI_TYPE_STRUCT; + cls_struct_type.elements = cls_struct_fields; + + struct cls_struct_align g_dbl = { 12, 4951, 127 }; + struct cls_struct_align f_dbl = { 1, 9320, 13 }; + struct cls_struct_align res_dbl; + + cls_struct_fields[0] = &ffi_type_uchar; + cls_struct_fields[1] = &ffi_type_ushort; + cls_struct_fields[2] = &ffi_type_uchar; + cls_struct_fields[3] = NULL; + + dbl_arg_types[0] = &cls_struct_type; + dbl_arg_types[1] = &cls_struct_type; + dbl_arg_types[2] = NULL; + + CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 2, &cls_struct_type, + dbl_arg_types) == FFI_OK); + + args_dbl[0] = &g_dbl; + args_dbl[1] = &f_dbl; + args_dbl[2] = NULL; + + ffi_call(&cif, FFI_FN(cls_struct_align_fn), &res_dbl, args_dbl); + /* { dg-output "12 4951 127 1 9320 13: 13 14271 140" } */ + printf("res: %d %d %d\n", res_dbl.a, res_dbl.b, res_dbl.c); + /* { dg-output "\nres: 13 14271 140" } */ + + CHECK(ffi_prep_closure_loc(pcl, &cif, cls_struct_align_gn, NULL, code) == FFI_OK); + + res_dbl = ((cls_struct_align(*)(cls_struct_align, cls_struct_align))(code))(g_dbl, f_dbl); + /* { dg-output "\n12 4951 127 1 9320 13: 13 14271 140" } */ + printf("res: %d %d %d\n", res_dbl.a, res_dbl.b, res_dbl.c); + /* { dg-output "\nres: 13 14271 140" } */ + + exit(0); +} Added: python/trunk/Modules/_ctypes/libffi/testsuite/libffi.call/cls_align_uint32.c ============================================================================== --- (empty file) +++ python/trunk/Modules/_ctypes/libffi/testsuite/libffi.call/cls_align_uint32.c Mon Mar 15 01:02:36 2010 @@ -0,0 +1,91 @@ +/* Area: ffi_call, closure_call + Purpose: Check structure alignment of uint32. + Limitations: none. + PR: none. + Originator: 20031203 */ + +/* { dg-do run } */ +#include "ffitest.h" + +typedef struct cls_struct_align { + unsigned char a; + unsigned int b; + unsigned char c; +} cls_struct_align; + +cls_struct_align cls_struct_align_fn(struct cls_struct_align a1, + struct cls_struct_align a2) +{ + struct cls_struct_align result; + + result.a = a1.a + a2.a; + result.b = a1.b + a2.b; + result.c = a1.c + a2.c; + + printf("%d %d %d %d %d %d: %d %d %d\n", a1.a, a1.b, a1.c, a2.a, a2.b, a2.c, result.a, result.b, result.c); + + return result; +} + +static void +cls_struct_align_gn(ffi_cif* cif __UNUSED__, void* resp, void** args, + void* userdata __UNUSED__) +{ + + struct cls_struct_align a1, a2; + + a1 = *(struct cls_struct_align*)(args[0]); + a2 = *(struct cls_struct_align*)(args[1]); + + *(cls_struct_align*)resp = cls_struct_align_fn(a1, a2); +} + +int main (void) +{ + ffi_cif cif; + void *code; + ffi_closure *pcl = ffi_closure_alloc(sizeof(ffi_closure), &code); + void* args_dbl[5]; + ffi_type* cls_struct_fields[4]; + ffi_type cls_struct_type; + ffi_type* dbl_arg_types[5]; + + cls_struct_type.size = 0; + cls_struct_type.alignment = 0; + cls_struct_type.type = FFI_TYPE_STRUCT; + cls_struct_type.elements = cls_struct_fields; + + struct cls_struct_align g_dbl = { 12, 4951, 127 }; + struct cls_struct_align f_dbl = { 1, 9320, 13 }; + struct cls_struct_align res_dbl; + + cls_struct_fields[0] = &ffi_type_uchar; + cls_struct_fields[1] = &ffi_type_uint; + cls_struct_fields[2] = &ffi_type_uchar; + cls_struct_fields[3] = NULL; + + dbl_arg_types[0] = &cls_struct_type; + dbl_arg_types[1] = &cls_struct_type; + dbl_arg_types[2] = NULL; + + CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 2, &cls_struct_type, + dbl_arg_types) == FFI_OK); + + args_dbl[0] = &g_dbl; + args_dbl[1] = &f_dbl; + args_dbl[2] = NULL; + + ffi_call(&cif, FFI_FN(cls_struct_align_fn), &res_dbl, args_dbl); + /* { dg-output "12 4951 127 1 9320 13: 13 14271 140" } */ + printf("res: %d %d %d\n", res_dbl.a, res_dbl.b, res_dbl.c); + /* { dg-output "\nres: 13 14271 140" } */ + + CHECK(ffi_prep_closure_loc(pcl, &cif, cls_struct_align_gn, NULL, code) == FFI_OK); + + res_dbl = ((cls_struct_align(*)(cls_struct_align, cls_struct_align))(code))(g_dbl, f_dbl); + /* { dg-output "\n12 4951 127 1 9320 13: 13 14271 140" } */ + printf("res: %d %d %d\n", res_dbl.a, res_dbl.b, res_dbl.c); + /* { dg-output "\nres: 13 14271 140" } */ + + exit(0); +} Added: python/trunk/Modules/_ctypes/libffi/testsuite/libffi.call/cls_align_uint64.c ============================================================================== --- (empty file) +++ python/trunk/Modules/_ctypes/libffi/testsuite/libffi.call/cls_align_uint64.c Mon Mar 15 01:02:36 2010 @@ -0,0 +1,92 @@ +/* Area: ffi_call, closure_call + Purpose: Check structure alignment of uint64. + Limitations: none. + PR: none. + Originator: 20031203 */ + + +/* { dg-do run } */ +#include "ffitest.h" + +typedef struct cls_struct_align { + unsigned char a; + unsigned long long b; + unsigned char c; +} cls_struct_align; + +cls_struct_align cls_struct_align_fn(struct cls_struct_align a1, + struct cls_struct_align a2) +{ + struct cls_struct_align result; + + result.a = a1.a + a2.a; + result.b = a1.b + a2.b; + result.c = a1.c + a2.c; + + printf("%d %" PRIdLL " %d %d %" PRIdLL " %d: %d %" PRIdLL " %d\n", a1.a, a1.b, a1.c, a2.a, a2.b, a2.c, result.a, result.b, result.c); + + return result; +} + +static void +cls_struct_align_gn(ffi_cif* cif __UNUSED__, void* resp, void** args, + void* userdata __UNUSED__) +{ + + struct cls_struct_align a1, a2; + + a1 = *(struct cls_struct_align*)(args[0]); + a2 = *(struct cls_struct_align*)(args[1]); + + *(cls_struct_align*)resp = cls_struct_align_fn(a1, a2); +} + +int main (void) +{ + ffi_cif cif; + void *code; + ffi_closure *pcl = ffi_closure_alloc(sizeof(ffi_closure), &code); + void* args_dbl[5]; + ffi_type* cls_struct_fields[4]; + ffi_type cls_struct_type; + ffi_type* dbl_arg_types[5]; + + cls_struct_type.size = 0; + cls_struct_type.alignment = 0; + cls_struct_type.type = FFI_TYPE_STRUCT; + cls_struct_type.elements = cls_struct_fields; + + struct cls_struct_align g_dbl = { 12, 4951, 127 }; + struct cls_struct_align f_dbl = { 1, 9320, 13 }; + struct cls_struct_align res_dbl; + + cls_struct_fields[0] = &ffi_type_uchar; + cls_struct_fields[1] = &ffi_type_uint64; + cls_struct_fields[2] = &ffi_type_uchar; + cls_struct_fields[3] = NULL; + + dbl_arg_types[0] = &cls_struct_type; + dbl_arg_types[1] = &cls_struct_type; + dbl_arg_types[2] = NULL; + + CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 2, &cls_struct_type, + dbl_arg_types) == FFI_OK); + + args_dbl[0] = &g_dbl; + args_dbl[1] = &f_dbl; + args_dbl[2] = NULL; + + ffi_call(&cif, FFI_FN(cls_struct_align_fn), &res_dbl, args_dbl); + /* { dg-output "12 4951 127 1 9320 13: 13 14271 140" } */ + printf("res: %d %" PRIdLL " %d\n", res_dbl.a, res_dbl.b, res_dbl.c); + /* { dg-output "\nres: 13 14271 140" } */ + + CHECK(ffi_prep_closure_loc(pcl, &cif, cls_struct_align_gn, NULL, code) == FFI_OK); + + res_dbl = ((cls_struct_align(*)(cls_struct_align, cls_struct_align))(code))(g_dbl, f_dbl); + /* { dg-output "\n12 4951 127 1 9320 13: 13 14271 140" } */ + printf("res: %d %" PRIdLL " %d\n", res_dbl.a, res_dbl.b, res_dbl.c); + /* { dg-output "\nres: 13 14271 140" } */ + + exit(0); +} Added: python/trunk/Modules/_ctypes/libffi/testsuite/libffi.call/cls_dbls_struct.c ============================================================================== --- (empty file) +++ python/trunk/Modules/_ctypes/libffi/testsuite/libffi.call/cls_dbls_struct.c Mon Mar 15 01:02:36 2010 @@ -0,0 +1,66 @@ +/* Area: ffi_call, closure_call + Purpose: Check double arguments in structs. + Limitations: none. + PR: none. + Originator: Blake Chaffin 6/23/2007 */ + +/* { dg-do run } */ + +#include "ffitest.h" + +typedef struct Dbls { + double x; + double y; +} Dbls; + +void +closure_test_fn(Dbls p) +{ + printf("%.1f %.1f\n", p.x, p.y); +} + +void +closure_test_gn(ffi_cif* cif __UNUSED__, void* resp __UNUSED__, + void** args, void* userdata __UNUSED__) +{ + closure_test_fn(*(Dbls*)args[0]); +} + +int main(int argc __UNUSED__, char** argv __UNUSED__) +{ + ffi_cif cif; + + void *code; + ffi_closure* pcl = ffi_closure_alloc(sizeof(ffi_closure), &code); + ffi_type* cl_arg_types[1]; + + ffi_type ts1_type; + ffi_type* ts1_type_elements[4]; + + ts1_type.size = 0; + ts1_type.alignment = 0; + ts1_type.type = FFI_TYPE_STRUCT; + ts1_type.elements = ts1_type_elements; + + ts1_type_elements[0] = &ffi_type_double; + ts1_type_elements[1] = &ffi_type_double; + ts1_type_elements[2] = NULL; + + cl_arg_types[0] = &ts1_type; + + Dbls arg = { 1.0, 2.0 }; + + /* Initialize the cif */ + CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 1, + &ffi_type_void, cl_arg_types) == FFI_OK); + + CHECK(ffi_prep_closure_loc(pcl, &cif, closure_test_gn, NULL, code) == FFI_OK); + + ((void*(*)(Dbls))(code))(arg); + /* { dg-output "1.0 2.0\n" } */ + + closure_test_fn(arg); + /* { dg-output "1.0 2.0\n" } */ + + return 0; +} Added: python/trunk/Modules/_ctypes/libffi/testsuite/libffi.call/cls_double.c ============================================================================== --- (empty file) +++ python/trunk/Modules/_ctypes/libffi/testsuite/libffi.call/cls_double.c Mon Mar 15 01:02:36 2010 @@ -0,0 +1,43 @@ +/* Area: closure_call + Purpose: Check return value double. + Limitations: none. + PR: none. + Originator: 20030828 */ + +/* { dg-do run } */ +#include "ffitest.h" + +static void cls_ret_double_fn(ffi_cif* cif __UNUSED__, void* resp, void** args, + void* userdata __UNUSED__) + { + *(double *)resp = *(double *)args[0]; + + printf("%f: %f\n",*(double *)args[0], + *(double *)resp); + } +typedef double (*cls_ret_double)(double); + +int main (void) +{ + ffi_cif cif; + void *code; + ffi_closure *pcl = ffi_closure_alloc(sizeof(ffi_closure), &code); + ffi_type * cl_arg_types[2]; + double res; + + cl_arg_types[0] = &ffi_type_double; + cl_arg_types[1] = NULL; + + /* Initialize the cif */ + CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 1, + &ffi_type_double, cl_arg_types) == FFI_OK); + + CHECK(ffi_prep_closure_loc(pcl, &cif, cls_ret_double_fn, NULL, code) == FFI_OK); + + res = (*((cls_ret_double)code))(21474.789); + /* { dg-output "21474.789000: 21474.789000" } */ + printf("res: %.6f\n", res); + /* { dg-output "\nres: 21474.789000" } */ + + exit(0); +} Added: python/trunk/Modules/_ctypes/libffi/testsuite/libffi.call/cls_double_va.c ============================================================================== --- (empty file) +++ python/trunk/Modules/_ctypes/libffi/testsuite/libffi.call/cls_double_va.c Mon Mar 15 01:02:36 2010 @@ -0,0 +1,57 @@ +/* Area: ffi_call, closure_call + Purpose: Test doubles passed in variable argument lists. + Limitations: none. + PR: none. + Originator: Blake Chaffin 6/6/2007 */ + +/* { dg-do run { xfail strongarm*-*-* xscale*-*-* } } */ +/* { dg-output "" { xfail avr32*-*-* } } */ +#include "ffitest.h" + +static void +cls_double_va_fn(ffi_cif* cif __UNUSED__, void* resp, + void** args, void* userdata __UNUSED__) +{ + char* format = *(char**)args[0]; + double doubleValue = *(double*)args[1]; + + *(ffi_arg*)resp = printf(format, doubleValue); +} + +int main (void) +{ + ffi_cif cif; + void *code; + ffi_closure *pcl = ffi_closure_alloc(sizeof(ffi_closure), &code); + void* args[3]; + ffi_type* arg_types[3]; + + char* format = "%.1f\n"; + double doubleArg = 7; + ffi_arg res = 0; + + arg_types[0] = &ffi_type_pointer; + arg_types[1] = &ffi_type_double; + arg_types[2] = NULL; + + CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 2, &ffi_type_sint, + arg_types) == FFI_OK); + + args[0] = &format; + args[1] = &doubleArg; + args[2] = NULL; + + ffi_call(&cif, FFI_FN(printf), &res, args); + // { dg-output "7.0" } + printf("res: %d\n", (int) res); + // { dg-output "\nres: 4" } + + CHECK(ffi_prep_closure_loc(pcl, &cif, cls_double_va_fn, NULL, code) == FFI_OK); + + res = ((int(*)(char*, double))(code))(format, doubleArg); + // { dg-output "\n7.0" } + printf("res: %d\n", (int) res); + // { dg-output "\nres: 4" } + + exit(0); +} Added: python/trunk/Modules/_ctypes/libffi/testsuite/libffi.call/cls_float.c ============================================================================== --- (empty file) +++ python/trunk/Modules/_ctypes/libffi/testsuite/libffi.call/cls_float.c Mon Mar 15 01:02:36 2010 @@ -0,0 +1,42 @@ +/* Area: closure_call + Purpose: Check return value float. + Limitations: none. + PR: none. + Originator: 20030828 */ + +/* { dg-do run } */ +#include "ffitest.h" + +static void cls_ret_float_fn(ffi_cif* cif __UNUSED__, void* resp, void** args, + void* userdata __UNUSED__) + { + *(float *)resp = *(float *)args[0]; + + printf("%g: %g\n",*(float *)args[0], + *(float *)resp); + } + +typedef float (*cls_ret_float)(float); + +int main (void) +{ + ffi_cif cif; + void *code; + ffi_closure *pcl = ffi_closure_alloc(sizeof(ffi_closure), &code); + ffi_type * cl_arg_types[2]; + float res; + + cl_arg_types[0] = &ffi_type_float; + cl_arg_types[1] = NULL; + + /* Initialize the cif */ + CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 1, + &ffi_type_float, cl_arg_types) == FFI_OK); + + CHECK(ffi_prep_closure_loc(pcl, &cif, cls_ret_float_fn, NULL, code) == FFI_OK); + res = ((((cls_ret_float)code)(-2122.12))); + /* { dg-output "\\-2122.12: \\-2122.12" } */ + printf("res: %.6f\n", res); + /* { dg-output "\nres: \-2122.120117" } */ + exit(0); +} Added: python/trunk/Modules/_ctypes/libffi/testsuite/libffi.call/cls_longdouble.c ============================================================================== --- (empty file) +++ python/trunk/Modules/_ctypes/libffi/testsuite/libffi.call/cls_longdouble.c Mon Mar 15 01:02:36 2010 @@ -0,0 +1,105 @@ +/* Area: ffi_call, closure_call + Purpose: Check long double arguments. + Limitations: none. + PR: none. + Originator: Blake Chaffin */ + +/* { dg-excess-errors "no long double format" { xfail x86_64-*-mingw* x86_64-*-cygwin* } } */ +/* { dg-do run { xfail strongarm*-*-* xscale*-*-* } } */ +/* { dg-options -mlong-double-128 { target powerpc64*-*-* } } */ +/* { dg-output "" { xfail x86_64-*-mingw* x86_64-*-cygwin* } } */ + +#include "ffitest.h" + +long double cls_ldouble_fn( + long double a1, + long double a2, + long double a3, + long double a4, + long double a5, + long double a6, + long double a7, + long double a8) +{ + long double r = a1 + a2 + a3 + a4 + a5 + a6 + a7 + a8; + + printf("%Lg %Lg %Lg %Lg %Lg %Lg %Lg %Lg: %Lg\n", + a1, a2, a3, a4, a5, a6, a7, a8, r); + + return r; +} + +static void +cls_ldouble_gn(ffi_cif* cif __UNUSED__, void* resp, + void** args, void* userdata __UNUSED__) +{ + long double a1 = *(long double*)args[0]; + long double a2 = *(long double*)args[1]; + long double a3 = *(long double*)args[2]; + long double a4 = *(long double*)args[3]; + long double a5 = *(long double*)args[4]; + long double a6 = *(long double*)args[5]; + long double a7 = *(long double*)args[6]; + long double a8 = *(long double*)args[7]; + + *(long double*)resp = cls_ldouble_fn( + a1, a2, a3, a4, a5, a6, a7, a8); +} + +int main(void) +{ + ffi_cif cif; + void* code; + ffi_closure* pcl = ffi_closure_alloc(sizeof(ffi_closure), &code); + void* args[9]; + ffi_type* arg_types[9]; + long double res = 0; + + long double arg1 = 1; + long double arg2 = 2; + long double arg3 = 3; + long double arg4 = 4; + long double arg5 = 5; + long double arg6 = 6; + long double arg7 = 7; + long double arg8 = 8; + + arg_types[0] = &ffi_type_longdouble; + arg_types[1] = &ffi_type_longdouble; + arg_types[2] = &ffi_type_longdouble; + arg_types[3] = &ffi_type_longdouble; + arg_types[4] = &ffi_type_longdouble; + arg_types[5] = &ffi_type_longdouble; + arg_types[6] = &ffi_type_longdouble; + arg_types[7] = &ffi_type_longdouble; + arg_types[8] = NULL; + + CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 8, &ffi_type_longdouble, + arg_types) == FFI_OK); + + args[0] = &arg1; + args[1] = &arg2; + args[2] = &arg3; + args[3] = &arg4; + args[4] = &arg5; + args[5] = &arg6; + args[6] = &arg7; + args[7] = &arg8; + args[8] = NULL; + + ffi_call(&cif, FFI_FN(cls_ldouble_fn), &res, args); + /* { dg-output "1 2 3 4 5 6 7 8: 36" } */ + printf("res: %Lg\n", res); + /* { dg-output "\nres: 36" } */ + + CHECK(ffi_prep_closure_loc(pcl, &cif, cls_ldouble_gn, NULL, code) == FFI_OK); + + res = ((long double(*)(long double, long double, long double, long double, + long double, long double, long double, long double))(code))(arg1, arg2, + arg3, arg4, arg5, arg6, arg7, arg8); + /* { dg-output "\n1 2 3 4 5 6 7 8: 36" } */ + printf("res: %Lg\n", res); + /* { dg-output "\nres: 36" } */ + + return 0; +} Added: python/trunk/Modules/_ctypes/libffi/testsuite/libffi.call/cls_longdouble_va.c ============================================================================== --- (empty file) +++ python/trunk/Modules/_ctypes/libffi/testsuite/libffi.call/cls_longdouble_va.c Mon Mar 15 01:02:36 2010 @@ -0,0 +1,57 @@ +/* Area: ffi_call, closure_call + Purpose: Test long doubles passed in variable argument lists. + Limitations: none. + PR: none. + Originator: Blake Chaffin 6/6/2007 */ + +/* { dg-do run { xfail strongarm*-*-* xscale*-*-* } } */ +/* { dg-output "" { xfail avr32*-*-* x86_64-*-mingw* } } */ +#include "ffitest.h" + +static void +cls_longdouble_va_fn(ffi_cif* cif __UNUSED__, void* resp, + void** args, void* userdata __UNUSED__) +{ + char* format = *(char**)args[0]; + long double ldValue = *(long double*)args[1]; + + *(ffi_arg*)resp = printf(format, ldValue); +} + +int main (void) +{ + ffi_cif cif; + void *code; + ffi_closure *pcl = ffi_closure_alloc(sizeof(ffi_closure), &code); + void* args[3]; + ffi_type* arg_types[3]; + + char* format = "%.1Lf\n"; + long double ldArg = 7; + ffi_arg res = 0; + + arg_types[0] = &ffi_type_pointer; + arg_types[1] = &ffi_type_longdouble; + arg_types[2] = NULL; + + CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 2, &ffi_type_sint, + arg_types) == FFI_OK); + + args[0] = &format; + args[1] = &ldArg; + args[2] = NULL; + + ffi_call(&cif, FFI_FN(printf), &res, args); + // { dg-output "7.0" } + printf("res: %d\n", (int) res); + // { dg-output "\nres: 4" } + + CHECK(ffi_prep_closure_loc(pcl, &cif, cls_longdouble_va_fn, NULL, code) == FFI_OK); + + res = ((int(*)(char*, long double))(code))(format, ldArg); + // { dg-output "\n7.0" } + printf("res: %d\n", (int) res); + // { dg-output "\nres: 4" } + + exit(0); +} Added: python/trunk/Modules/_ctypes/libffi/testsuite/libffi.call/cls_multi_schar.c ============================================================================== --- (empty file) +++ python/trunk/Modules/_ctypes/libffi/testsuite/libffi.call/cls_multi_schar.c Mon Mar 15 01:02:36 2010 @@ -0,0 +1,74 @@ +/* Area: ffi_call, closure_call + Purpose: Check passing of multiple signed char values. + Limitations: none. + PR: PR13221. + Originator: 20031129 */ + +/* { dg-do run } */ +#include "ffitest.h" + +signed char test_func_fn(signed char a1, signed char a2) +{ + signed char result; + + result = a1 + a2; + + printf("%d %d: %d\n", a1, a2, result); + + return result; + +} + +static void test_func_gn(ffi_cif *cif __UNUSED__, void *rval, void **avals, + void *data __UNUSED__) +{ + signed char a1, a2; + + a1 = *(signed char *)avals[0]; + a2 = *(signed char *)avals[1]; + + *(ffi_arg *)rval = test_func_fn(a1, a2); + +} + +typedef signed char (*test_type)(signed char, signed char); + +int main (void) +{ + ffi_cif cif; + void *code; + ffi_closure *pcl = ffi_closure_alloc(sizeof(ffi_closure), &code); + void * args_dbl[3]; + ffi_type * cl_arg_types[3]; + ffi_arg res_call; + signed char a, b, res_closure; + + a = 2; + b = 125; + + args_dbl[0] = &a; + args_dbl[1] = &b; + args_dbl[2] = NULL; + + cl_arg_types[0] = &ffi_type_schar; + cl_arg_types[1] = &ffi_type_schar; + cl_arg_types[2] = NULL; + + /* Initialize the cif */ + CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 2, + &ffi_type_schar, cl_arg_types) == FFI_OK); + + ffi_call(&cif, FFI_FN(test_func_fn), &res_call, args_dbl); + /* { dg-output "2 125: 127" } */ + printf("res: %d\n", (signed char)res_call); + /* { dg-output "\nres: 127" } */ + + CHECK(ffi_prep_closure_loc(pcl, &cif, test_func_gn, NULL, code) == FFI_OK); + + res_closure = (*((test_type)code))(2, 125); + /* { dg-output "\n2 125: 127" } */ + printf("res: %d\n", res_closure); + /* { dg-output "\nres: 127" } */ + + exit(0); +} Added: python/trunk/Modules/_ctypes/libffi/testsuite/libffi.call/cls_multi_sshort.c ============================================================================== --- (empty file) +++ python/trunk/Modules/_ctypes/libffi/testsuite/libffi.call/cls_multi_sshort.c Mon Mar 15 01:02:36 2010 @@ -0,0 +1,74 @@ +/* Area: ffi_call, closure_call + Purpose: Check passing of multiple signed short values. + Limitations: none. + PR: PR13221. + Originator: 20031129 */ + +/* { dg-do run } */ +#include "ffitest.h" + +signed short test_func_fn(signed short a1, signed short a2) +{ + signed short result; + + result = a1 + a2; + + printf("%d %d: %d\n", a1, a2, result); + + return result; + +} + +static void test_func_gn(ffi_cif *cif __UNUSED__, void *rval, void **avals, + void *data __UNUSED__) +{ + signed short a1, a2; + + a1 = *(signed short *)avals[0]; + a2 = *(signed short *)avals[1]; + + *(ffi_arg *)rval = test_func_fn(a1, a2); + +} + +typedef signed short (*test_type)(signed short, signed short); + +int main (void) +{ + ffi_cif cif; + void *code; + ffi_closure *pcl = ffi_closure_alloc(sizeof(ffi_closure), &code); + void * args_dbl[3]; + ffi_type * cl_arg_types[3]; + ffi_arg res_call; + unsigned short a, b, res_closure; + + a = 2; + b = 32765; + + args_dbl[0] = &a; + args_dbl[1] = &b; + args_dbl[2] = NULL; + + cl_arg_types[0] = &ffi_type_sshort; + cl_arg_types[1] = &ffi_type_sshort; + cl_arg_types[2] = NULL; + + /* Initialize the cif */ + CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 2, + &ffi_type_sshort, cl_arg_types) == FFI_OK); + + ffi_call(&cif, FFI_FN(test_func_fn), &res_call, args_dbl); + /* { dg-output "2 32765: 32767" } */ + printf("res: %d\n", (unsigned short)res_call); + /* { dg-output "\nres: 32767" } */ + + CHECK(ffi_prep_closure_loc(pcl, &cif, test_func_gn, NULL, code) == FFI_OK); + + res_closure = (*((test_type)code))(2, 32765); + /* { dg-output "\n2 32765: 32767" } */ + printf("res: %d\n", res_closure); + /* { dg-output "\nres: 32767" } */ + + exit(0); +} Added: python/trunk/Modules/_ctypes/libffi/testsuite/libffi.call/cls_multi_sshortchar.c ============================================================================== --- (empty file) +++ python/trunk/Modules/_ctypes/libffi/testsuite/libffi.call/cls_multi_sshortchar.c Mon Mar 15 01:02:36 2010 @@ -0,0 +1,86 @@ +/* Area: ffi_call, closure_call + Purpose: Check passing of multiple signed short/char values. + Limitations: none. + PR: PR13221. + Originator: 20031129 */ + +/* { dg-do run } */ +#include "ffitest.h" + +signed short test_func_fn(signed char a1, signed short a2, + signed char a3, signed short a4) +{ + signed short result; + + result = a1 + a2 + a3 + a4; + + printf("%d %d %d %d: %d\n", a1, a2, a3, a4, result); + + return result; + +} + +static void test_func_gn(ffi_cif *cif __UNUSED__, void *rval, void **avals, + void *data __UNUSED__) +{ + signed char a1, a3; + signed short a2, a4; + + a1 = *(signed char *)avals[0]; + a2 = *(signed short *)avals[1]; + a3 = *(signed char *)avals[2]; + a4 = *(signed short *)avals[3]; + + *(ffi_arg *)rval = test_func_fn(a1, a2, a3, a4); + +} + +typedef signed short (*test_type)(signed char, signed short, + signed char, signed short); + +int main (void) +{ + ffi_cif cif; + void *code; + ffi_closure *pcl = ffi_closure_alloc(sizeof(ffi_closure), &code); + void * args_dbl[5]; + ffi_type * cl_arg_types[5]; + ffi_arg res_call; + signed char a, c; + signed short b, d, res_closure; + + a = 1; + b = 32765; + c = 127; + d = -128; + + args_dbl[0] = &a; + args_dbl[1] = &b; + args_dbl[2] = &c; + args_dbl[3] = &d; + args_dbl[4] = NULL; + + cl_arg_types[0] = &ffi_type_schar; + cl_arg_types[1] = &ffi_type_sshort; + cl_arg_types[2] = &ffi_type_schar; + cl_arg_types[3] = &ffi_type_sshort; + cl_arg_types[4] = NULL; + + /* Initialize the cif */ + CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 4, + &ffi_type_sshort, cl_arg_types) == FFI_OK); + + ffi_call(&cif, FFI_FN(test_func_fn), &res_call, args_dbl); + /* { dg-output "1 32765 127 -128: 32765" } */ + printf("res: %d\n", (signed short)res_call); + /* { dg-output "\nres: 32765" } */ + + CHECK(ffi_prep_closure_loc(pcl, &cif, test_func_gn, NULL, code) == FFI_OK); + + res_closure = (*((test_type)code))(1, 32765, 127, -128); + /* { dg-output "\n1 32765 127 -128: 32765" } */ + printf("res: %d\n", res_closure); + /* { dg-output "\nres: 32765" } */ + + exit(0); +} Added: python/trunk/Modules/_ctypes/libffi/testsuite/libffi.call/cls_multi_uchar.c ============================================================================== --- (empty file) +++ python/trunk/Modules/_ctypes/libffi/testsuite/libffi.call/cls_multi_uchar.c Mon Mar 15 01:02:36 2010 @@ -0,0 +1,91 @@ +/* Area: ffi_call, closure_call + Purpose: Check passing of multiple unsigned char values. + Limitations: none. + PR: PR13221. + Originator: 20031129 */ + +/* { dg-do run } */ +#include "ffitest.h" + +unsigned char test_func_fn(unsigned char a1, unsigned char a2, + unsigned char a3, unsigned char a4) +{ + unsigned char result; + + result = a1 + a2 + a3 + a4; + + printf("%d %d %d %d: %d\n", a1, a2, a3, a4, result); + + return result; + +} + +static void test_func_gn(ffi_cif *cif __UNUSED__, void *rval, void **avals, + void *data __UNUSED__) +{ + unsigned char a1, a2, a3, a4; + + a1 = *(unsigned char *)avals[0]; + a2 = *(unsigned char *)avals[1]; + a3 = *(unsigned char *)avals[2]; + a4 = *(unsigned char *)avals[3]; + + *(ffi_arg *)rval = test_func_fn(a1, a2, a3, a4); + +} + +typedef unsigned char (*test_type)(unsigned char, unsigned char, + unsigned char, unsigned char); + +void test_func(ffi_cif *cif __UNUSED__, void *rval __UNUSED__, void **avals, + void *data __UNUSED__) +{ + printf("%d %d %d %d\n", *(unsigned char *)avals[0], + *(unsigned char *)avals[1], *(unsigned char *)avals[2], + *(unsigned char *)avals[3]); +} +int main (void) +{ + ffi_cif cif; + void *code; + ffi_closure *pcl = ffi_closure_alloc(sizeof(ffi_closure), &code); + void * args_dbl[5]; + ffi_type * cl_arg_types[5]; + ffi_arg res_call; + unsigned char a, b, c, d, res_closure; + + a = 1; + b = 2; + c = 127; + d = 125; + + args_dbl[0] = &a; + args_dbl[1] = &b; + args_dbl[2] = &c; + args_dbl[3] = &d; + args_dbl[4] = NULL; + + cl_arg_types[0] = &ffi_type_uchar; + cl_arg_types[1] = &ffi_type_uchar; + cl_arg_types[2] = &ffi_type_uchar; + cl_arg_types[3] = &ffi_type_uchar; + cl_arg_types[4] = NULL; + + /* Initialize the cif */ + CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 4, + &ffi_type_uchar, cl_arg_types) == FFI_OK); + + ffi_call(&cif, FFI_FN(test_func_fn), &res_call, args_dbl); + /* { dg-output "1 2 127 125: 255" } */ + printf("res: %d\n", (unsigned char)res_call); + /* { dg-output "\nres: 255" } */ + + CHECK(ffi_prep_closure_loc(pcl, &cif, test_func_gn, NULL, code) == FFI_OK); + + res_closure = (*((test_type)code))(1, 2, 127, 125); + /* { dg-output "\n1 2 127 125: 255" } */ + printf("res: %d\n", res_closure); + /* { dg-output "\nres: 255" } */ + + exit(0); +} Added: python/trunk/Modules/_ctypes/libffi/testsuite/libffi.call/cls_multi_ushort.c ============================================================================== --- (empty file) +++ python/trunk/Modules/_ctypes/libffi/testsuite/libffi.call/cls_multi_ushort.c Mon Mar 15 01:02:36 2010 @@ -0,0 +1,74 @@ +/* Area: ffi_call, closure_call + Purpose: Check passing of multiple unsigned short values. + Limitations: none. + PR: PR13221. + Originator: 20031129 */ + +/* { dg-do run } */ +#include "ffitest.h" + +unsigned short test_func_fn(unsigned short a1, unsigned short a2) +{ + unsigned short result; + + result = a1 + a2; + + printf("%d %d: %d\n", a1, a2, result); + + return result; + +} + +static void test_func_gn(ffi_cif *cif __UNUSED__, void *rval, void **avals, + void *data __UNUSED__) +{ + unsigned short a1, a2; + + a1 = *(unsigned short *)avals[0]; + a2 = *(unsigned short *)avals[1]; + + *(ffi_arg *)rval = test_func_fn(a1, a2); + +} + +typedef unsigned short (*test_type)(unsigned short, unsigned short); + +int main (void) +{ + ffi_cif cif; + void *code; + ffi_closure *pcl = ffi_closure_alloc(sizeof(ffi_closure), &code); + void * args_dbl[3]; + ffi_type * cl_arg_types[3]; + ffi_arg res_call; + unsigned short a, b, res_closure; + + a = 2; + b = 32765; + + args_dbl[0] = &a; + args_dbl[1] = &b; + args_dbl[2] = NULL; + + cl_arg_types[0] = &ffi_type_ushort; + cl_arg_types[1] = &ffi_type_ushort; + cl_arg_types[2] = NULL; + + /* Initialize the cif */ + CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 2, + &ffi_type_ushort, cl_arg_types) == FFI_OK); + + ffi_call(&cif, FFI_FN(test_func_fn), &res_call, args_dbl); + /* { dg-output "2 32765: 32767" } */ + printf("res: %d\n", (unsigned short)res_call); + /* { dg-output "\nres: 32767" } */ + + CHECK(ffi_prep_closure_loc(pcl, &cif, test_func_gn, NULL, code) == FFI_OK); + + res_closure = (*((test_type)code))(2, 32765); + /* { dg-output "\n2 32765: 32767" } */ + printf("res: %d\n", res_closure); + /* { dg-output "\nres: 32767" } */ + + exit(0); +} Added: python/trunk/Modules/_ctypes/libffi/testsuite/libffi.call/cls_multi_ushortchar.c ============================================================================== --- (empty file) +++ python/trunk/Modules/_ctypes/libffi/testsuite/libffi.call/cls_multi_ushortchar.c Mon Mar 15 01:02:36 2010 @@ -0,0 +1,86 @@ +/* Area: ffi_call, closure_call + Purpose: Check passing of multiple unsigned short/char values. + Limitations: none. + PR: PR13221. + Originator: 20031129 */ + +/* { dg-do run } */ +#include "ffitest.h" + +unsigned short test_func_fn(unsigned char a1, unsigned short a2, + unsigned char a3, unsigned short a4) +{ + unsigned short result; + + result = a1 + a2 + a3 + a4; + + printf("%d %d %d %d: %d\n", a1, a2, a3, a4, result); + + return result; + +} + +static void test_func_gn(ffi_cif *cif __UNUSED__, void *rval, void **avals, + void *data __UNUSED__) +{ + unsigned char a1, a3; + unsigned short a2, a4; + + a1 = *(unsigned char *)avals[0]; + a2 = *(unsigned short *)avals[1]; + a3 = *(unsigned char *)avals[2]; + a4 = *(unsigned short *)avals[3]; + + *(ffi_arg *)rval = test_func_fn(a1, a2, a3, a4); + +} + +typedef unsigned short (*test_type)(unsigned char, unsigned short, + unsigned char, unsigned short); + +int main (void) +{ + ffi_cif cif; + void *code; + ffi_closure *pcl = ffi_closure_alloc(sizeof(ffi_closure), &code); + void * args_dbl[5]; + ffi_type * cl_arg_types[5]; + ffi_arg res_call; + unsigned char a, c; + unsigned short b, d, res_closure; + + a = 1; + b = 2; + c = 127; + d = 128; + + args_dbl[0] = &a; + args_dbl[1] = &b; + args_dbl[2] = &c; + args_dbl[3] = &d; + args_dbl[4] = NULL; + + cl_arg_types[0] = &ffi_type_uchar; + cl_arg_types[1] = &ffi_type_ushort; + cl_arg_types[2] = &ffi_type_uchar; + cl_arg_types[3] = &ffi_type_ushort; + cl_arg_types[4] = NULL; + + /* Initialize the cif */ + CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 4, + &ffi_type_ushort, cl_arg_types) == FFI_OK); + + ffi_call(&cif, FFI_FN(test_func_fn), &res_call, args_dbl); + /* { dg-output "1 2 127 128: 258" } */ + printf("res: %d\n", (unsigned short)res_call); + /* { dg-output "\nres: 258" } */ + + CHECK(ffi_prep_closure_loc(pcl, &cif, test_func_gn, NULL, code) == FFI_OK); + + res_closure = (*((test_type)code))(1, 2, 127, 128); + /* { dg-output "\n1 2 127 128: 258" } */ + printf("res: %d\n", res_closure); + /* { dg-output "\nres: 258" } */ + + exit(0); +} Added: python/trunk/Modules/_ctypes/libffi/testsuite/libffi.call/cls_pointer.c ============================================================================== --- (empty file) +++ python/trunk/Modules/_ctypes/libffi/testsuite/libffi.call/cls_pointer.c Mon Mar 15 01:02:36 2010 @@ -0,0 +1,74 @@ +/* Area: ffi_call, closure_call + Purpose: Check pointer arguments. + Limitations: none. + PR: none. + Originator: Blake Chaffin 6/6/2007 */ + +/* { dg-do run { xfail strongarm*-*-* xscale*-*-* } } */ +#include "ffitest.h" + +void* cls_pointer_fn(void* a1, void* a2) +{ + void* result = (void*)((intptr_t)a1 + (intptr_t)a2); + + printf("0x%08x 0x%08x: 0x%08x\n", + (unsigned int)(uintptr_t) a1, + (unsigned int)(uintptr_t) a2, + (unsigned int)(uintptr_t) result); + + return result; +} + +static void +cls_pointer_gn(ffi_cif* cif __UNUSED__, void* resp, + void** args, void* userdata __UNUSED__) +{ + void* a1 = *(void**)(args[0]); + void* a2 = *(void**)(args[1]); + + *(void**)resp = cls_pointer_fn(a1, a2); +} + +int main (void) +{ + ffi_cif cif; + void *code; + ffi_closure* pcl = ffi_closure_alloc(sizeof(ffi_closure), &code); + void* args[3]; +// ffi_type cls_pointer_type; + ffi_type* arg_types[3]; + +/* cls_pointer_type.size = sizeof(void*); + cls_pointer_type.alignment = 0; + cls_pointer_type.type = FFI_TYPE_POINTER; + cls_pointer_type.elements = NULL;*/ + + void* arg1 = (void*)0x12345678; + void* arg2 = (void*)0x89abcdef; + ffi_arg res = 0; + + arg_types[0] = &ffi_type_pointer; + arg_types[1] = &ffi_type_pointer; + arg_types[2] = NULL; + + CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 2, &ffi_type_pointer, + arg_types) == FFI_OK); + + args[0] = &arg1; + args[1] = &arg2; + args[2] = NULL; + + ffi_call(&cif, FFI_FN(cls_pointer_fn), &res, args); + /* { dg-output "0x12345678 0x89abcdef: 0x9be02467" } */ + printf("res: 0x%08x\n", (unsigned int) res); + /* { dg-output "\nres: 0x9be02467" } */ + + CHECK(ffi_prep_closure_loc(pcl, &cif, cls_pointer_gn, NULL, code) == FFI_OK); + + res = (ffi_arg)((void*(*)(void*, void*))(code))(arg1, arg2); + /* { dg-output "\n0x12345678 0x89abcdef: 0x9be02467" } */ + printf("res: 0x%08x\n", (unsigned int) res); + /* { dg-output "\nres: 0x9be02467" } */ + + exit(0); +} Added: python/trunk/Modules/_ctypes/libffi/testsuite/libffi.call/cls_pointer_stack.c ============================================================================== --- (empty file) +++ python/trunk/Modules/_ctypes/libffi/testsuite/libffi.call/cls_pointer_stack.c Mon Mar 15 01:02:36 2010 @@ -0,0 +1,140 @@ +/* Area: ffi_call, closure_call + Purpose: Check pointer arguments across multiple hideous stack frames. + Limitations: none. + PR: none. + Originator: Blake Chaffin 6/7/2007 */ + +/* { dg-do run { xfail strongarm*-*-* xscale*-*-* } } */ +#include "ffitest.h" + +static long dummyVar; + +long dummy_func( + long double a1, char b1, + long double a2, char b2, + long double a3, char b3, + long double a4, char b4) +{ + return a1 + b1 + a2 + b2 + a3 + b3 + a4 + b4; +} + +void* cls_pointer_fn2(void* a1, void* a2) +{ + long double trample1 = (intptr_t)a1 + (intptr_t)a2; + char trample2 = ((char*)&a1)[0] + ((char*)&a2)[0]; + long double trample3 = (intptr_t)trample1 + (intptr_t)a1; + char trample4 = trample2 + ((char*)&a1)[1]; + long double trample5 = (intptr_t)trample3 + (intptr_t)a2; + char trample6 = trample4 + ((char*)&a2)[1]; + long double trample7 = (intptr_t)trample5 + (intptr_t)trample1; + char trample8 = trample6 + trample2; + + dummyVar = dummy_func(trample1, trample2, trample3, trample4, + trample5, trample6, trample7, trample8); + + void* result = (void*)((intptr_t)a1 + (intptr_t)a2); + + printf("0x%08x 0x%08x: 0x%08x\n", + (unsigned int)(uintptr_t) a1, + (unsigned int)(uintptr_t) a2, + (unsigned int)(uintptr_t) result); + + return result; +} + +void* cls_pointer_fn1(void* a1, void* a2) +{ + long double trample1 = (intptr_t)a1 + (intptr_t)a2; + char trample2 = ((char*)&a1)[0] + ((char*)&a2)[0]; + long double trample3 = (intptr_t)trample1 + (intptr_t)a1; + char trample4 = trample2 + ((char*)&a1)[1]; + long double trample5 = (intptr_t)trample3 + (intptr_t)a2; + char trample6 = trample4 + ((char*)&a2)[1]; + long double trample7 = (intptr_t)trample5 + (intptr_t)trample1; + char trample8 = trample6 + trample2; + + dummyVar = dummy_func(trample1, trample2, trample3, trample4, + trample5, trample6, trample7, trample8); + + void* result = (void*)((intptr_t)a1 + (intptr_t)a2); + + printf("0x%08x 0x%08x: 0x%08x\n", + (unsigned int)(intptr_t) a1, + (unsigned int)(intptr_t) a2, + (unsigned int)(intptr_t) result); + + result = cls_pointer_fn2(result, a1); + + return result; +} + +static void +cls_pointer_gn(ffi_cif* cif __UNUSED__, void* resp, + void** args, void* userdata __UNUSED__) +{ + void* a1 = *(void**)(args[0]); + void* a2 = *(void**)(args[1]); + + long double trample1 = (intptr_t)a1 + (intptr_t)a2; + char trample2 = ((char*)&a1)[0] + ((char*)&a2)[0]; + long double trample3 = (intptr_t)trample1 + (intptr_t)a1; + char trample4 = trample2 + ((char*)&a1)[1]; + long double trample5 = (intptr_t)trample3 + (intptr_t)a2; + char trample6 = trample4 + ((char*)&a2)[1]; + long double trample7 = (intptr_t)trample5 + (intptr_t)trample1; + char trample8 = trample6 + trample2; + + dummyVar = dummy_func(trample1, trample2, trample3, trample4, + trample5, trample6, trample7, trample8); + + *(void**)resp = cls_pointer_fn1(a1, a2); +} + +int main (void) +{ + ffi_cif cif; + void *code; + ffi_closure* pcl = ffi_closure_alloc(sizeof(ffi_closure), &code); + void* args[3]; +// ffi_type cls_pointer_type; + ffi_type* arg_types[3]; + +/* cls_pointer_type.size = sizeof(void*); + cls_pointer_type.alignment = 0; + cls_pointer_type.type = FFI_TYPE_POINTER; + cls_pointer_type.elements = NULL;*/ + + void* arg1 = (void*)0x01234567; + void* arg2 = (void*)0x89abcdef; + ffi_arg res = 0; + + arg_types[0] = &ffi_type_pointer; + arg_types[1] = &ffi_type_pointer; + arg_types[2] = NULL; + + CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 2, &ffi_type_pointer, + arg_types) == FFI_OK); + + args[0] = &arg1; + args[1] = &arg2; + args[2] = NULL; + + printf("\n"); + ffi_call(&cif, FFI_FN(cls_pointer_fn1), &res, args); + + printf("res: 0x%08x\n", (unsigned int) res); + // { dg-output "\n0x01234567 0x89abcdef: 0x8acf1356" } + // { dg-output "\n0x8acf1356 0x01234567: 0x8bf258bd" } + // { dg-output "\nres: 0x8bf258bd" } + + CHECK(ffi_prep_closure_loc(pcl, &cif, cls_pointer_gn, NULL, code) == FFI_OK); + + res = (ffi_arg)((void*(*)(void*, void*))(code))(arg1, arg2); + + printf("res: 0x%08x\n", (unsigned int) res); + // { dg-output "\n0x01234567 0x89abcdef: 0x8acf1356" } + // { dg-output "\n0x8acf1356 0x01234567: 0x8bf258bd" } + // { dg-output "\nres: 0x8bf258bd" } + + exit(0); +} Added: python/trunk/Modules/_ctypes/libffi/testsuite/libffi.call/cls_schar.c ============================================================================== --- (empty file) +++ python/trunk/Modules/_ctypes/libffi/testsuite/libffi.call/cls_schar.c Mon Mar 15 01:02:36 2010 @@ -0,0 +1,44 @@ +/* Area: closure_call + Purpose: Check return value schar. + Limitations: none. + PR: none. + Originator: 20031108 */ + + + +/* { dg-do run } */ +#include "ffitest.h" + +static void cls_ret_schar_fn(ffi_cif* cif __UNUSED__, void* resp, void** args, + void* userdata __UNUSED__) +{ + *(ffi_arg*)resp = *(signed char *)args[0]; + printf("%d: %d\n",*(signed char *)args[0], + (int)*(ffi_arg *)(resp)); +} +typedef signed char (*cls_ret_schar)(signed char); + +int main (void) +{ + ffi_cif cif; + void *code; + ffi_closure *pcl = ffi_closure_alloc(sizeof(ffi_closure), &code); + ffi_type * cl_arg_types[2]; + signed char res; + + cl_arg_types[0] = &ffi_type_schar; + cl_arg_types[1] = NULL; + + /* Initialize the cif */ + CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 1, + &ffi_type_schar, cl_arg_types) == FFI_OK); + + CHECK(ffi_prep_closure_loc(pcl, &cif, cls_ret_schar_fn, NULL, code) == FFI_OK); + + res = (*((cls_ret_schar)code))(127); + /* { dg-output "127: 127" } */ + printf("res: %d\n", res); + /* { dg-output "\nres: 127" } */ + + exit(0); +} Added: python/trunk/Modules/_ctypes/libffi/testsuite/libffi.call/cls_sint.c ============================================================================== --- (empty file) +++ python/trunk/Modules/_ctypes/libffi/testsuite/libffi.call/cls_sint.c Mon Mar 15 01:02:36 2010 @@ -0,0 +1,42 @@ +/* Area: closure_call + Purpose: Check return value sint32. + Limitations: none. + PR: none. + Originator: 20031108 */ + +/* { dg-do run } */ +#include "ffitest.h" + +static void cls_ret_sint_fn(ffi_cif* cif __UNUSED__, void* resp, void** args, + void* userdata __UNUSED__) +{ + *(ffi_arg*)resp = *(signed int *)args[0]; + printf("%d: %d\n",*(signed int *)args[0], + (int)*(ffi_arg *)(resp)); +} +typedef signed int (*cls_ret_sint)(signed int); + +int main (void) +{ + ffi_cif cif; + void *code; + ffi_closure *pcl = ffi_closure_alloc(sizeof(ffi_closure), &code); + ffi_type * cl_arg_types[2]; + signed int res; + + cl_arg_types[0] = &ffi_type_sint; + cl_arg_types[1] = NULL; + + /* Initialize the cif */ + CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 1, + &ffi_type_sint, cl_arg_types) == FFI_OK); + + CHECK(ffi_prep_closure_loc(pcl, &cif, cls_ret_sint_fn, NULL, code) == FFI_OK); + + res = (*((cls_ret_sint)code))(65534); + /* { dg-output "65534: 65534" } */ + printf("res: %d\n",res); + /* { dg-output "\nres: 65534" } */ + + exit(0); +} Added: python/trunk/Modules/_ctypes/libffi/testsuite/libffi.call/cls_sshort.c ============================================================================== --- (empty file) +++ python/trunk/Modules/_ctypes/libffi/testsuite/libffi.call/cls_sshort.c Mon Mar 15 01:02:36 2010 @@ -0,0 +1,42 @@ +/* Area: closure_call + Purpose: Check return value sshort. + Limitations: none. + PR: none. + Originator: 20031108 */ + +/* { dg-do run } */ +#include "ffitest.h" + +static void cls_ret_sshort_fn(ffi_cif* cif __UNUSED__, void* resp, void** args, + void* userdata __UNUSED__) +{ + *(ffi_arg*)resp = *(signed short *)args[0]; + printf("%d: %d\n",*(signed short *)args[0], + (int)*(ffi_arg *)(resp)); +} +typedef signed short (*cls_ret_sshort)(signed short); + +int main (void) +{ + ffi_cif cif; + void *code; + ffi_closure *pcl = ffi_closure_alloc(sizeof(ffi_closure), &code); + ffi_type * cl_arg_types[2]; + signed short res; + + cl_arg_types[0] = &ffi_type_sshort; + cl_arg_types[1] = NULL; + + /* Initialize the cif */ + CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 1, + &ffi_type_sshort, cl_arg_types) == FFI_OK); + + CHECK(ffi_prep_closure_loc(pcl, &cif, cls_ret_sshort_fn, NULL, code) == FFI_OK); + + res = (*((cls_ret_sshort)code))(255); + /* { dg-output "255: 255" } */ + printf("res: %d\n",res); + /* { dg-output "\nres: 255" } */ + + exit(0); +} Added: python/trunk/Modules/_ctypes/libffi/testsuite/libffi.call/cls_uchar.c ============================================================================== --- (empty file) +++ python/trunk/Modules/_ctypes/libffi/testsuite/libffi.call/cls_uchar.c Mon Mar 15 01:02:36 2010 @@ -0,0 +1,42 @@ +/* Area: closure_call + Purpose: Check return value uchar. + Limitations: none. + PR: none. + Originator: 20030828 */ + +/* { dg-do run } */ +#include "ffitest.h" + +static void cls_ret_uchar_fn(ffi_cif* cif __UNUSED__, void* resp, void** args, + void* userdata __UNUSED__) +{ + *(ffi_arg*)resp = *(unsigned char *)args[0]; + printf("%d: %d\n",*(unsigned char *)args[0], + (int)*(ffi_arg *)(resp)); +} +typedef unsigned char (*cls_ret_uchar)(unsigned char); + +int main (void) +{ + ffi_cif cif; + void *code; + ffi_closure *pcl = ffi_closure_alloc(sizeof(ffi_closure), &code); + ffi_type * cl_arg_types[2]; + unsigned char res; + + cl_arg_types[0] = &ffi_type_uchar; + cl_arg_types[1] = NULL; + + /* Initialize the cif */ + CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 1, + &ffi_type_uchar, cl_arg_types) == FFI_OK); + + CHECK(ffi_prep_closure_loc(pcl, &cif, cls_ret_uchar_fn, NULL, code) == FFI_OK); + + res = (*((cls_ret_uchar)code))(127); + /* { dg-output "127: 127" } */ + printf("res: %d\n",res); + /* { dg-output "\nres: 127" } */ + + exit(0); +} Added: python/trunk/Modules/_ctypes/libffi/testsuite/libffi.call/cls_uint.c ============================================================================== --- (empty file) +++ python/trunk/Modules/_ctypes/libffi/testsuite/libffi.call/cls_uint.c Mon Mar 15 01:02:36 2010 @@ -0,0 +1,43 @@ +/* Area: closure_call + Purpose: Check return value uint. + Limitations: none. + PR: none. + Originator: 20030828 */ + +/* { dg-do run } */ +#include "ffitest.h" + +static void cls_ret_uint_fn(ffi_cif* cif __UNUSED__, void* resp, void** args, + void* userdata __UNUSED__) +{ + *(ffi_arg *)resp = *(unsigned int *)args[0]; + + printf("%d: %d\n",*(unsigned int *)args[0], + (int)*(ffi_arg *)(resp)); +} +typedef unsigned int (*cls_ret_uint)(unsigned int); + +int main (void) +{ + ffi_cif cif; + void *code; + ffi_closure *pcl = ffi_closure_alloc(sizeof(ffi_closure), &code); + ffi_type * cl_arg_types[2]; + unsigned int res; + + cl_arg_types[0] = &ffi_type_uint; + cl_arg_types[1] = NULL; + + /* Initialize the cif */ + CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 1, + &ffi_type_uint, cl_arg_types) == FFI_OK); + + CHECK(ffi_prep_closure_loc(pcl, &cif, cls_ret_uint_fn, NULL, code) == FFI_OK); + + res = (*((cls_ret_uint)code))(2147483647); + /* { dg-output "2147483647: 2147483647" } */ + printf("res: %d\n",res); + /* { dg-output "\nres: 2147483647" } */ + + exit(0); +} Added: python/trunk/Modules/_ctypes/libffi/testsuite/libffi.call/cls_ulonglong.c ============================================================================== --- (empty file) +++ python/trunk/Modules/_ctypes/libffi/testsuite/libffi.call/cls_ulonglong.c Mon Mar 15 01:02:36 2010 @@ -0,0 +1,46 @@ +/* Area: closure_call + Purpose: Check return value long long. + Limitations: none. + PR: none. + Originator: 20030828 */ + +/* { dg-do run } */ +#include "ffitest.h" + +static void cls_ret_ulonglong_fn(ffi_cif* cif __UNUSED__, void* resp, + void** args, void* userdata __UNUSED__) +{ + *(unsigned long long *)resp= *(unsigned long long *)args[0]; + + printf("%" PRIuLL ": %" PRIuLL "\n",*(unsigned long long *)args[0], + *(unsigned long long *)(resp)); +} +typedef unsigned long long (*cls_ret_ulonglong)(unsigned long long); + +int main (void) +{ + ffi_cif cif; + void *code; + ffi_closure *pcl = ffi_closure_alloc(sizeof(ffi_closure), &code); + ffi_type * cl_arg_types[2]; + unsigned long long res; + + cl_arg_types[0] = &ffi_type_uint64; + cl_arg_types[1] = NULL; + + /* Initialize the cif */ + CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 1, + &ffi_type_uint64, cl_arg_types) == FFI_OK); + CHECK(ffi_prep_closure_loc(pcl, &cif, cls_ret_ulonglong_fn, NULL, code) == FFI_OK); + res = (*((cls_ret_ulonglong)code))(214LL); + /* { dg-output "214: 214" } */ + printf("res: %" PRIdLL "\n", res); + /* { dg-output "\nres: 214" } */ + + res = (*((cls_ret_ulonglong)code))(9223372035854775808LL); + /* { dg-output "\n9223372035854775808: 9223372035854775808" } */ + printf("res: %" PRIdLL "\n", res); + /* { dg-output "\nres: 9223372035854775808" } */ + + exit(0); +} Added: python/trunk/Modules/_ctypes/libffi/testsuite/libffi.call/cls_ushort.c ============================================================================== --- (empty file) +++ python/trunk/Modules/_ctypes/libffi/testsuite/libffi.call/cls_ushort.c Mon Mar 15 01:02:36 2010 @@ -0,0 +1,43 @@ +/* Area: closure_call + Purpose: Check return value ushort. + Limitations: none. + PR: none. + Originator: 20030828 */ + +/* { dg-do run } */ +#include "ffitest.h" + +static void cls_ret_ushort_fn(ffi_cif* cif __UNUSED__, void* resp, void** args, + void* userdata __UNUSED__) +{ + *(ffi_arg*)resp = *(unsigned short *)args[0]; + + printf("%d: %d\n",*(unsigned short *)args[0], + (int)*(ffi_arg *)(resp)); +} +typedef unsigned short (*cls_ret_ushort)(unsigned short); + +int main (void) +{ + ffi_cif cif; + void *code; + ffi_closure *pcl = ffi_closure_alloc(sizeof(ffi_closure), &code); + ffi_type * cl_arg_types[2]; + unsigned short res; + + cl_arg_types[0] = &ffi_type_ushort; + cl_arg_types[1] = NULL; + + /* Initialize the cif */ + CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 1, + &ffi_type_ushort, cl_arg_types) == FFI_OK); + + CHECK(ffi_prep_closure_loc(pcl, &cif, cls_ret_ushort_fn, NULL, code) == FFI_OK); + + res = (*((cls_ret_ushort)code))(65535); + /* { dg-output "65535: 65535" } */ + printf("res: %d\n",res); + /* { dg-output "\nres: 65535" } */ + + exit(0); +} Added: python/trunk/Modules/_ctypes/libffi/testsuite/libffi.call/err_bad_abi.c ============================================================================== --- (empty file) +++ python/trunk/Modules/_ctypes/libffi/testsuite/libffi.call/err_bad_abi.c Mon Mar 15 01:02:36 2010 @@ -0,0 +1,37 @@ +/* Area: ffi_prep_cif, ffi_prep_closure + Purpose: Test error return for bad ABIs. + Limitations: none. + PR: none. + Originator: Blake Chaffin 6/6/2007 */ + +/* { dg-do run { xfail *-*-* } } */ +#include "ffitest.h" + +static void +dummy_fn(ffi_cif* cif __UNUSED__, void* resp __UNUSED__, + void** args __UNUSED__, void* userdata __UNUSED__) +{} + +int main (void) +{ + ffi_cif cif; + void *code; + ffi_closure *pcl = ffi_closure_alloc(sizeof(ffi_closure), &code); + void* args[1]; + ffi_type* arg_types[1]; + + arg_types[0] = NULL; + args[0] = NULL; + + CHECK(ffi_prep_cif(&cif, 255, 0, &ffi_type_void, + arg_types) == FFI_BAD_ABI); + + CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 0, &ffi_type_void, + arg_types) == FFI_OK); + + cif.abi= 255; + + CHECK(ffi_prep_closure_loc(pcl, &cif, dummy_fn, NULL, code) == FFI_BAD_ABI); + + exit(0); +} Added: python/trunk/Modules/_ctypes/libffi/testsuite/libffi.call/err_bad_typedef.c ============================================================================== --- (empty file) +++ python/trunk/Modules/_ctypes/libffi/testsuite/libffi.call/err_bad_typedef.c Mon Mar 15 01:02:36 2010 @@ -0,0 +1,25 @@ +/* Area: ffi_prep_cif + Purpose: Test error return for bad typedefs. + Limitations: none. + PR: none. + Originator: Blake Chaffin 6/6/2007 */ + +/* { dg-do run { xfail *-*-* } } */ +#include "ffitest.h" + +int main (void) +{ + ffi_cif cif; + ffi_type* arg_types[1]; + + arg_types[0] = NULL; + + ffi_type badType = ffi_type_void; + + badType.size = 0; + + CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 0, &badType, + arg_types) == FFI_BAD_TYPEDEF); + + exit(0); +} Added: python/trunk/Modules/_ctypes/libffi/testsuite/libffi.call/ffitest.h ============================================================================== --- (empty file) +++ python/trunk/Modules/_ctypes/libffi/testsuite/libffi.call/ffitest.h Mon Mar 15 01:02:36 2010 @@ -0,0 +1,117 @@ +#include +#include +#include +#include +#include +#include "fficonfig.h" + +#if defined HAVE_STDINT_H +#include +#endif + +#if defined HAVE_INTTYPES_H +#include +#endif + +#define MAX_ARGS 256 + +#define CHECK(x) !(x) ? abort() : 0 + +/* Define __UNUSED__ that also other compilers than gcc can run the tests. */ +#undef __UNUSED__ +#if defined(__GNUC__) +#define __UNUSED__ __attribute__((__unused__)) +#else +#define __UNUSED__ +#endif + +/* Prefer MAP_ANON(YMOUS) to /dev/zero, since we don't need to keep a + file open. */ +#ifdef HAVE_MMAP_ANON +# undef HAVE_MMAP_DEV_ZERO + +# include +# ifndef MAP_FAILED +# define MAP_FAILED -1 +# endif +# if !defined (MAP_ANONYMOUS) && defined (MAP_ANON) +# define MAP_ANONYMOUS MAP_ANON +# endif +# define USING_MMAP + +#endif + +#ifdef HAVE_MMAP_DEV_ZERO + +# include +# ifndef MAP_FAILED +# define MAP_FAILED -1 +# endif +# define USING_MMAP + +#endif + +/* MinGW kludge. */ +#ifdef _WIN64 +#define PRIdLL "I64d" +#define PRIuLL "I64u" +#else +#define PRIdLL "lld" +#define PRIuLL "llu" +#endif + +/* PA HP-UX kludge. */ +#if defined(__hppa__) && defined(__hpux__) && !defined(PRIuPTR) +#define PRIuPTR "lu" +#endif + +/* Solaris < 10 kludge. */ +#if defined(__sun__) && defined(__svr4__) && !defined(PRIuPTR) +#if defined(__arch64__) || defined (__x86_64__) +#define PRIuPTR "lu" +#else +#define PRIuPTR "u" +#endif +#endif + +#ifdef USING_MMAP +static inline void * +allocate_mmap (size_t size) +{ + void *page; +#if defined (HAVE_MMAP_DEV_ZERO) + static int dev_zero_fd = -1; +#endif + +#ifdef HAVE_MMAP_DEV_ZERO + if (dev_zero_fd == -1) + { + dev_zero_fd = open ("/dev/zero", O_RDONLY); + if (dev_zero_fd == -1) + { + perror ("open /dev/zero: %m"); + exit (1); + } + } +#endif + + +#ifdef HAVE_MMAP_ANON + page = mmap (NULL, size, PROT_READ | PROT_WRITE | PROT_EXEC, + MAP_PRIVATE | MAP_ANONYMOUS, -1, 0); +#endif +#ifdef HAVE_MMAP_DEV_ZERO + page = mmap (NULL, size, PROT_READ | PROT_WRITE | PROT_EXEC, + MAP_PRIVATE, dev_zero_fd, 0); +#endif + + if (page == (void *) MAP_FAILED) + { + perror ("virtual memory exhausted"); + exit (1); + } + + return page; +} + +#endif Added: python/trunk/Modules/_ctypes/libffi/testsuite/libffi.call/float.c ============================================================================== --- (empty file) +++ python/trunk/Modules/_ctypes/libffi/testsuite/libffi.call/float.c Mon Mar 15 01:02:36 2010 @@ -0,0 +1,59 @@ +/* Area: ffi_call + Purpose: Check return value float. + Limitations: none. + PR: none. + Originator: From the original ffitest.c */ + +/* { dg-do run } */ + +#include "ffitest.h" + +static int floating(int a, float b, double c, long double d) +{ + int i; + + i = (int) ((float)a/b + ((float)c/(float)d)); + + return i; +} + +int main (void) +{ + ffi_cif cif; + ffi_type *args[MAX_ARGS]; + void *values[MAX_ARGS]; + ffi_arg rint; + + float f; + signed int si1; + double d; + long double ld; + + args[0] = &ffi_type_sint; + values[0] = &si1; + args[1] = &ffi_type_float; + values[1] = &f; + args[2] = &ffi_type_double; + values[2] = &d; + args[3] = &ffi_type_longdouble; + values[3] = &ld; + + /* Initialize the cif */ + CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 4, + &ffi_type_sint, args) == FFI_OK); + + si1 = 6; + f = 3.14159; + d = (double)1.0/(double)3.0; + ld = 2.71828182846L; + + floating (si1, f, d, ld); + + ffi_call(&cif, FFI_FN(floating), &rint, values); + + printf ("%d vs %d\n", (int)rint, floating (si1, f, d, ld)); + + CHECK((int)rint == floating(si1, f, d, ld)); + + exit (0); +} Added: python/trunk/Modules/_ctypes/libffi/testsuite/libffi.call/float1.c ============================================================================== --- (empty file) +++ python/trunk/Modules/_ctypes/libffi/testsuite/libffi.call/float1.c Mon Mar 15 01:02:36 2010 @@ -0,0 +1,58 @@ +/* Area: ffi_call + Purpose: Check return value double. + Limitations: none. + PR: none. + Originator: From the original ffitest.c */ + +/* { dg-do run } */ +#include "ffitest.h" +#include "float.h" + +typedef union +{ + double d; + unsigned char c[sizeof (double)]; +} value_type; + +#define CANARY 0xba + +static double dblit(float f) +{ + return f/3.0; +} + +int main (void) +{ + ffi_cif cif; + ffi_type *args[MAX_ARGS]; + void *values[MAX_ARGS]; + float f; + value_type result[2]; + unsigned int i; + + args[0] = &ffi_type_float; + values[0] = &f; + + /* Initialize the cif */ + CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 1, + &ffi_type_double, args) == FFI_OK); + + f = 3.14159; + + /* Put a canary in the return array. This is a regression test for + a buffer overrun. */ + memset(result[1].c, CANARY, sizeof (double)); + + ffi_call(&cif, FFI_FN(dblit), &result[0].d, values); + + /* These are not always the same!! Check for a reasonable delta */ + + CHECK(result[0].d - dblit(f) < DBL_EPSILON); + + /* Check the canary. */ + for (i = 0; i < sizeof (double); ++i) + CHECK(result[1].c[i] == CANARY); + + exit(0); + +} Added: python/trunk/Modules/_ctypes/libffi/testsuite/libffi.call/float2.c ============================================================================== --- (empty file) +++ python/trunk/Modules/_ctypes/libffi/testsuite/libffi.call/float2.c Mon Mar 15 01:02:36 2010 @@ -0,0 +1,58 @@ +/* Area: ffi_call + Purpose: Check return value long double. + Limitations: none. + PR: none. + Originator: From the original ffitest.c */ + +/* { dg-excess-errors "fails" { target x86_64-*-mingw* x86_64-*-cygwin* } } */ +/* { dg-do run { xfail x86_64-*-mingw* x86_64-*-cygwin* } } */ + +#include "ffitest.h" +#include "float.h" + +static long double ldblit(float f) +{ + return (long double) (((long double) f)/ (long double) 3.0); +} + +int main (void) +{ + ffi_cif cif; + ffi_type *args[MAX_ARGS]; + void *values[MAX_ARGS]; + float f; + long double ld; + + args[0] = &ffi_type_float; + values[0] = &f; + + /* Initialize the cif */ + CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 1, + &ffi_type_longdouble, args) == FFI_OK); + + f = 3.14159; + +#if 1 + /* This is ifdef'd out for now. long double support under SunOS/gcc + is pretty much non-existent. You'll get the odd bus error in library + routines like printf(). */ + printf ("%Lf\n", ldblit(f)); +#endif + ld = 666; + ffi_call(&cif, FFI_FN(ldblit), &ld, values); + +#if 1 + /* This is ifdef'd out for now. long double support under SunOS/gcc + is pretty much non-existent. You'll get the odd bus error in library + routines like printf(). */ + printf ("%Lf, %Lf, %Lf, %Lf\n", ld, ldblit(f), ld - ldblit(f), LDBL_EPSILON); +#endif + + /* These are not always the same!! Check for a reasonable delta */ + if (ld - ldblit(f) < LDBL_EPSILON) + puts("long double return value tests ok!"); + else + CHECK(0); + + exit(0); +} Added: python/trunk/Modules/_ctypes/libffi/testsuite/libffi.call/float3.c ============================================================================== --- (empty file) +++ python/trunk/Modules/_ctypes/libffi/testsuite/libffi.call/float3.c Mon Mar 15 01:02:36 2010 @@ -0,0 +1,72 @@ +/* Area: ffi_call + Purpose: Check float arguments with different orders. + Limitations: none. + PR: none. + Originator: From the original ffitest.c */ + +/* { dg-do run } */ + +#include "ffitest.h" +#include "float.h" + +static double floating_1(float a, double b, long double c) +{ + return (double) a + b + (double) c; +} + +static double floating_2(long double a, double b, float c) +{ + return (double) a + b + (double) c; +} + +int main (void) +{ + ffi_cif cif; + ffi_type *args[MAX_ARGS]; + void *values[MAX_ARGS]; + double rd; + + float f; + double d; + long double ld; + + args[0] = &ffi_type_float; + values[0] = &f; + args[1] = &ffi_type_double; + values[1] = &d; + args[2] = &ffi_type_longdouble; + values[2] = &ld; + + /* Initialize the cif */ + CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 3, + &ffi_type_double, args) == FFI_OK); + + f = 3.14159; + d = (double)1.0/(double)3.0; + ld = 2.71828182846L; + + floating_1 (f, d, ld); + + ffi_call(&cif, FFI_FN(floating_1), &rd, values); + + CHECK(rd - floating_1(f, d, ld) < DBL_EPSILON); + + args[0] = &ffi_type_longdouble; + values[0] = &ld; + args[1] = &ffi_type_double; + values[1] = &d; + args[2] = &ffi_type_float; + values[2] = &f; + + /* Initialize the cif */ + CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 3, + &ffi_type_double, args) == FFI_OK); + + floating_2 (ld, d, f); + + ffi_call(&cif, FFI_FN(floating_2), &rd, values); + + CHECK(rd - floating_2(ld, d, f) < DBL_EPSILON); + + exit (0); +} Added: python/trunk/Modules/_ctypes/libffi/testsuite/libffi.call/float4.c ============================================================================== --- (empty file) +++ python/trunk/Modules/_ctypes/libffi/testsuite/libffi.call/float4.c Mon Mar 15 01:02:36 2010 @@ -0,0 +1,62 @@ +/* Area: ffi_call + Purpose: Check denorm double value. + Limitations: none. + PR: PR26483. + Originator: From the original ffitest.c */ + +/* { dg-do run } */ +/* { dg-options "-mieee" { target alpha*-*-* } } */ + +#include "ffitest.h" +#include "float.h" + +typedef union +{ + double d; + unsigned char c[sizeof (double)]; +} value_type; + +#define CANARY 0xba + +static double dblit(double d) +{ + return d; +} + +int main (void) +{ + ffi_cif cif; + ffi_type *args[MAX_ARGS]; + void *values[MAX_ARGS]; + double d; + value_type result[2]; + unsigned int i; + + args[0] = &ffi_type_double; + values[0] = &d; + + /* Initialize the cif */ + CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 1, + &ffi_type_double, args) == FFI_OK); + + d = DBL_MIN / 2; + + /* Put a canary in the return array. This is a regression test for + a buffer overrun. */ + memset(result[1].c, CANARY, sizeof (double)); + + ffi_call(&cif, FFI_FN(dblit), &result[0].d, values); + + /* The standard delta check doesn't work for denorms. Since we didn't do + any arithmetic, we should get the original result back, and hence an + exact check should be OK here. */ + + CHECK(result[0].d == dblit(d)); + + /* Check the canary. */ + for (i = 0; i < sizeof (double); ++i) + CHECK(result[1].c[i] == CANARY); + + exit(0); + +} Added: python/trunk/Modules/_ctypes/libffi/testsuite/libffi.call/huge_struct.c ============================================================================== --- (empty file) +++ python/trunk/Modules/_ctypes/libffi/testsuite/libffi.call/huge_struct.c Mon Mar 15 01:02:36 2010 @@ -0,0 +1,342 @@ +/* Area: ffi_call, closure_call + Purpose: Check large structure returns. + Limitations: none. + PR: none. + Originator: Blake Chaffin 6/18/2007 +*/ + +/* { dg-excess-errors "" { target x86_64-*-mingw* x86_64-*-cygwin* } } */ +/* { dg-do run { xfail strongarm*-*-* xscale*-*-* } } */ +/* { dg-options -mlong-double-128 { target powerpc64*-*-* } } */ +/* { dg-output "" { xfail x86_64-*-mingw* x86_64-*-cygwin* } } */ + +#include "ffitest.h" + +typedef struct BigStruct{ + uint8_t a; + int8_t b; + uint16_t c; + int16_t d; + uint32_t e; + int32_t f; + uint64_t g; + int64_t h; + float i; + double j; + long double k; + char* l; + uint8_t m; + int8_t n; + uint16_t o; + int16_t p; + uint32_t q; + int32_t r; + uint64_t s; + int64_t t; + float u; + double v; + long double w; + char* x; + uint8_t y; + int8_t z; + uint16_t aa; + int16_t bb; + uint32_t cc; + int32_t dd; + uint64_t ee; + int64_t ff; + float gg; + double hh; + long double ii; + char* jj; + uint8_t kk; + int8_t ll; + uint16_t mm; + int16_t nn; + uint32_t oo; + int32_t pp; + uint64_t qq; + int64_t rr; + float ss; + double tt; + long double uu; + char* vv; + uint8_t ww; + int8_t xx; +} BigStruct; + +BigStruct +test_large_fn( + uint8_t ui8_1, + int8_t si8_1, + uint16_t ui16_1, + int16_t si16_1, + uint32_t ui32_1, + int32_t si32_1, + uint64_t ui64_1, + int64_t si64_1, + float f_1, + double d_1, + long double ld_1, + char* p_1, + uint8_t ui8_2, + int8_t si8_2, + uint16_t ui16_2, + int16_t si16_2, + uint32_t ui32_2, + int32_t si32_2, + uint64_t ui64_2, + int64_t si64_2, + float f_2, + double d_2, + long double ld_2, + char* p_2, + uint8_t ui8_3, + int8_t si8_3, + uint16_t ui16_3, + int16_t si16_3, + uint32_t ui32_3, + int32_t si32_3, + uint64_t ui64_3, + int64_t si64_3, + float f_3, + double d_3, + long double ld_3, + char* p_3, + uint8_t ui8_4, + int8_t si8_4, + uint16_t ui16_4, + int16_t si16_4, + uint32_t ui32_4, + int32_t si32_4, + uint64_t ui64_4, + int64_t si64_4, + float f_4, + double d_4, + long double ld_4, + char* p_4, + uint8_t ui8_5, + int8_t si8_5) +{ + BigStruct retVal = { + ui8_1 + 1, si8_1 + 1, ui16_1 + 1, si16_1 + 1, ui32_1 + 1, si32_1 + 1, + ui64_1 + 1, si64_1 + 1, f_1 + 1, d_1 + 1, ld_1 + 1, (char*)((intptr_t)p_1 + 1), + ui8_2 + 2, si8_2 + 2, ui16_2 + 2, si16_2 + 2, ui32_2 + 2, si32_2 + 2, + ui64_2 + 2, si64_2 + 2, f_2 + 2, d_2 + 2, ld_2 + 2, (char*)((intptr_t)p_2 + 2), + ui8_3 + 3, si8_3 + 3, ui16_3 + 3, si16_3 + 3, ui32_3 + 3, si32_3 + 3, + ui64_3 + 3, si64_3 + 3, f_3 + 3, d_3 + 3, ld_3 + 3, (char*)((intptr_t)p_3 + 3), + ui8_4 + 4, si8_4 + 4, ui16_4 + 4, si16_4 + 4, ui32_4 + 4, si32_4 + 4, + ui64_4 + 4, si64_4 + 4, f_4 + 4, d_4 + 4, ld_4 + 4, (char*)((intptr_t)p_4 + 4), + ui8_5 + 5, si8_5 + 5}; + + printf("%hhu %hhd %hu %hd %u %d %" PRIu64 " %" PRId64 " %.0f %.0f %.0Lf %#lx " + "%hhu %hhd %hu %hd %u %d %" PRIu64 " %" PRId64 " %.0f %.0f %.0Lf %#lx " + "%hhu %hhd %hu %hd %u %d %" PRIu64 " %" PRId64 " %.0f %.0f %.0Lf %#lx " + "%hhu %hhd %hu %hd %u %d %" PRIu64 " %" PRId64 " %.0f %.0f %.0Lf %#lx %hhu %hhd: " + "%hhu %hhd %hu %hd %u %d %" PRIu64 " %" PRId64 " %.0f %.0f %.0Lf %#lx " + "%hhu %hhd %hu %hd %u %d %" PRIu64 " %" PRId64 " %.0f %.0f %.0Lf %#lx " + "%hhu %hhd %hu %hd %u %d %" PRIu64 " %" PRId64 " %.0f %.0f %.0Lf %#lx " + "%hhu %hhd %hu %hd %u %d %" PRIu64 " %" PRId64 " %.0f %.0f %.0Lf %#lx %hhu %hhd\n", + ui8_1, si8_1, ui16_1, si16_1, ui32_1, si32_1, ui64_1, si64_1, f_1, d_1, ld_1, (unsigned long)p_1, + ui8_2, si8_2, ui16_2, si16_2, ui32_2, si32_2, ui64_2, si64_2, f_2, d_2, ld_2, (unsigned long)p_2, + ui8_3, si8_3, ui16_3, si16_3, ui32_3, si32_3, ui64_3, si64_3, f_3, d_3, ld_3, (unsigned long)p_3, + ui8_4, si8_4, ui16_4, si16_4, ui32_4, si32_4, ui64_4, si64_4, f_4, d_4, ld_4, (unsigned long)p_4, ui8_5, si8_5, + retVal.a, retVal.b, retVal.c, retVal.d, retVal.e, retVal.f, + retVal.g, retVal.h, retVal.i, retVal.j, retVal.k, (unsigned long)retVal.l, + retVal.m, retVal.n, retVal.o, retVal.p, retVal.q, retVal.r, + retVal.s, retVal.t, retVal.u, retVal.v, retVal.w, (unsigned long)retVal.x, + retVal.y, retVal.z, retVal.aa, retVal.bb, retVal.cc, retVal.dd, + retVal.ee, retVal.ff, retVal.gg, retVal.hh, retVal.ii, (unsigned long)retVal.jj, + retVal.kk, retVal.ll, retVal.mm, retVal.nn, retVal.oo, retVal.pp, + retVal.qq, retVal.rr, retVal.ss, retVal.tt, retVal.uu, (unsigned long)retVal.vv, retVal.ww, retVal.xx); + + return retVal; +} + +static void +cls_large_fn(ffi_cif* cif __UNUSED__, void* resp, void** args, void* userdata __UNUSED__) +{ + uint8_t ui8_1 = *(uint8_t*)args[0]; + int8_t si8_1 = *(int8_t*)args[1]; + uint16_t ui16_1 = *(uint16_t*)args[2]; + int16_t si16_1 = *(int16_t*)args[3]; + uint32_t ui32_1 = *(uint32_t*)args[4]; + int32_t si32_1 = *(int32_t*)args[5]; + uint64_t ui64_1 = *(uint64_t*)args[6]; + int64_t si64_1 = *(int64_t*)args[7]; + float f_1 = *(float*)args[8]; + double d_1 = *(double*)args[9]; + long double ld_1 = *(long double*)args[10]; + char* p_1 = *(char**)args[11]; + uint8_t ui8_2 = *(uint8_t*)args[12]; + int8_t si8_2 = *(int8_t*)args[13]; + uint16_t ui16_2 = *(uint16_t*)args[14]; + int16_t si16_2 = *(int16_t*)args[15]; + uint32_t ui32_2 = *(uint32_t*)args[16]; + int32_t si32_2 = *(int32_t*)args[17]; + uint64_t ui64_2 = *(uint64_t*)args[18]; + int64_t si64_2 = *(int64_t*)args[19]; + float f_2 = *(float*)args[20]; + double d_2 = *(double*)args[21]; + long double ld_2 = *(long double*)args[22]; + char* p_2 = *(char**)args[23]; + uint8_t ui8_3 = *(uint8_t*)args[24]; + int8_t si8_3 = *(int8_t*)args[25]; + uint16_t ui16_3 = *(uint16_t*)args[26]; + int16_t si16_3 = *(int16_t*)args[27]; + uint32_t ui32_3 = *(uint32_t*)args[28]; + int32_t si32_3 = *(int32_t*)args[29]; + uint64_t ui64_3 = *(uint64_t*)args[30]; + int64_t si64_3 = *(int64_t*)args[31]; + float f_3 = *(float*)args[32]; + double d_3 = *(double*)args[33]; + long double ld_3 = *(long double*)args[34]; + char* p_3 = *(char**)args[35]; + uint8_t ui8_4 = *(uint8_t*)args[36]; + int8_t si8_4 = *(int8_t*)args[37]; + uint16_t ui16_4 = *(uint16_t*)args[38]; + int16_t si16_4 = *(int16_t*)args[39]; + uint32_t ui32_4 = *(uint32_t*)args[40]; + int32_t si32_4 = *(int32_t*)args[41]; + uint64_t ui64_4 = *(uint64_t*)args[42]; + int64_t si64_4 = *(int64_t*)args[43]; + float f_4 = *(float*)args[44]; + double d_4 = *(double*)args[45]; + long double ld_4 = *(long double*)args[46]; + char* p_4 = *(char**)args[47]; + uint8_t ui8_5 = *(uint8_t*)args[48]; + int8_t si8_5 = *(int8_t*)args[49]; + + *(BigStruct*)resp = test_large_fn( + ui8_1, si8_1, ui16_1, si16_1, ui32_1, si32_1, ui64_1, si64_1, f_1, d_1, ld_1, p_1, + ui8_2, si8_2, ui16_2, si16_2, ui32_2, si32_2, ui64_2, si64_2, f_2, d_2, ld_2, p_2, + ui8_3, si8_3, ui16_3, si16_3, ui32_3, si32_3, ui64_3, si64_3, f_3, d_3, ld_3, p_3, + ui8_4, si8_4, ui16_4, si16_4, ui32_4, si32_4, ui64_4, si64_4, f_4, d_4, ld_4, p_4, + ui8_5, si8_5); +} + +int +main(int argc __UNUSED__, const char** argv __UNUSED__) +{ + void *code; + ffi_closure *pcl = ffi_closure_alloc(sizeof(ffi_closure), &code); + + ffi_cif cif; + ffi_type* argTypes[51]; + void* argValues[51]; + + ffi_type ret_struct_type; + ffi_type* st_fields[51]; + BigStruct retVal; + + memset (&retVal, 0, sizeof(retVal)); + + ret_struct_type.size = 0; + ret_struct_type.alignment = 0; + ret_struct_type.type = FFI_TYPE_STRUCT; + ret_struct_type.elements = st_fields; + + st_fields[0] = st_fields[12] = st_fields[24] = st_fields[36] = st_fields[48] = &ffi_type_uint8; + st_fields[1] = st_fields[13] = st_fields[25] = st_fields[37] = st_fields[49] = &ffi_type_sint8; + st_fields[2] = st_fields[14] = st_fields[26] = st_fields[38] = &ffi_type_uint16; + st_fields[3] = st_fields[15] = st_fields[27] = st_fields[39] = &ffi_type_sint16; + st_fields[4] = st_fields[16] = st_fields[28] = st_fields[40] = &ffi_type_uint32; + st_fields[5] = st_fields[17] = st_fields[29] = st_fields[41] = &ffi_type_sint32; + st_fields[6] = st_fields[18] = st_fields[30] = st_fields[42] = &ffi_type_uint64; + st_fields[7] = st_fields[19] = st_fields[31] = st_fields[43] = &ffi_type_sint64; + st_fields[8] = st_fields[20] = st_fields[32] = st_fields[44] = &ffi_type_float; + st_fields[9] = st_fields[21] = st_fields[33] = st_fields[45] = &ffi_type_double; + st_fields[10] = st_fields[22] = st_fields[34] = st_fields[46] = &ffi_type_longdouble; + st_fields[11] = st_fields[23] = st_fields[35] = st_fields[47] = &ffi_type_pointer; + + st_fields[50] = NULL; + + uint8_t ui8 = 1; + int8_t si8 = 2; + uint16_t ui16 = 3; + int16_t si16 = 4; + uint32_t ui32 = 5; + int32_t si32 = 6; + uint64_t ui64 = 7; + int64_t si64 = 8; + float f = 9; + double d = 10; + long double ld = 11; + char* p = (char*)0x12345678; + + argTypes[0] = argTypes[12] = argTypes[24] = argTypes[36] = argTypes[48] = &ffi_type_uint8; + argValues[0] = argValues[12] = argValues[24] = argValues[36] = argValues[48] = &ui8; + argTypes[1] = argTypes[13] = argTypes[25] = argTypes[37] = argTypes[49] = &ffi_type_sint8; + argValues[1] = argValues[13] = argValues[25] = argValues[37] = argValues[49] = &si8; + argTypes[2] = argTypes[14] = argTypes[26] = argTypes[38] = &ffi_type_uint16; + argValues[2] = argValues[14] = argValues[26] = argValues[38] = &ui16; + argTypes[3] = argTypes[15] = argTypes[27] = argTypes[39] = &ffi_type_sint16; + argValues[3] = argValues[15] = argValues[27] = argValues[39] = &si16; + argTypes[4] = argTypes[16] = argTypes[28] = argTypes[40] = &ffi_type_uint32; + argValues[4] = argValues[16] = argValues[28] = argValues[40] = &ui32; + argTypes[5] = argTypes[17] = argTypes[29] = argTypes[41] = &ffi_type_sint32; + argValues[5] = argValues[17] = argValues[29] = argValues[41] = &si32; + argTypes[6] = argTypes[18] = argTypes[30] = argTypes[42] = &ffi_type_uint64; + argValues[6] = argValues[18] = argValues[30] = argValues[42] = &ui64; + argTypes[7] = argTypes[19] = argTypes[31] = argTypes[43] = &ffi_type_sint64; + argValues[7] = argValues[19] = argValues[31] = argValues[43] = &si64; + argTypes[8] = argTypes[20] = argTypes[32] = argTypes[44] = &ffi_type_float; + argValues[8] = argValues[20] = argValues[32] = argValues[44] = &f; + argTypes[9] = argTypes[21] = argTypes[33] = argTypes[45] = &ffi_type_double; + argValues[9] = argValues[21] = argValues[33] = argValues[45] = &d; + argTypes[10] = argTypes[22] = argTypes[34] = argTypes[46] = &ffi_type_longdouble; + argValues[10] = argValues[22] = argValues[34] = argValues[46] = &ld; + argTypes[11] = argTypes[23] = argTypes[35] = argTypes[47] = &ffi_type_pointer; + argValues[11] = argValues[23] = argValues[35] = argValues[47] = &p; + + argTypes[50] = NULL; + argValues[50] = NULL; + + CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 50, &ret_struct_type, argTypes) == FFI_OK); + + ffi_call(&cif, FFI_FN(test_large_fn), &retVal, argValues); + // { dg-output "1 2 3 4 5 6 7 8 9 10 11 0x12345678 1 2 3 4 5 6 7 8 9 10 11 0x12345678 1 2 3 4 5 6 7 8 9 10 11 0x12345678 1 2 3 4 5 6 7 8 9 10 11 0x12345678 1 2: 2 3 4 5 6 7 8 9 10 11 12 0x12345679 3 4 5 6 7 8 9 10 11 12 13 0x1234567a 4 5 6 7 8 9 10 11 12 13 14 0x1234567b 5 6 7 8 9 10 11 12 13 14 15 0x1234567c 6 7" } + printf("res: %hhu %hhd %hu %hd %u %d %" PRIu64 " %" PRId64 " %.0f %.0f %.0Lf %#lx " + "%hhu %hhd %hu %hd %u %d %" PRIu64 " %" PRId64 " %.0f %.0f %.0Lf %#lx " + "%hhu %hhd %hu %hd %u %d %" PRIu64 " %" PRId64 " %.0f %.0f %.0Lf %#lx " + "%hhu %hhd %hu %hd %u %d %" PRIu64 " %" PRId64 " %.0f %.0f %.0Lf %#lx %hhu %hhd\n", + retVal.a, retVal.b, retVal.c, retVal.d, retVal.e, retVal.f, + retVal.g, retVal.h, retVal.i, retVal.j, retVal.k, (unsigned long)retVal.l, + retVal.m, retVal.n, retVal.o, retVal.p, retVal.q, retVal.r, + retVal.s, retVal.t, retVal.u, retVal.v, retVal.w, (unsigned long)retVal.x, + retVal.y, retVal.z, retVal.aa, retVal.bb, retVal.cc, retVal.dd, + retVal.ee, retVal.ff, retVal.gg, retVal.hh, retVal.ii, (unsigned long)retVal.jj, + retVal.kk, retVal.ll, retVal.mm, retVal.nn, retVal.oo, retVal.pp, + retVal.qq, retVal.rr, retVal.ss, retVal.tt, retVal.uu, (unsigned long)retVal.vv, retVal.ww, retVal.xx); + // { dg-output "\nres: 2 3 4 5 6 7 8 9 10 11 12 0x12345679 3 4 5 6 7 8 9 10 11 12 13 0x1234567a 4 5 6 7 8 9 10 11 12 13 14 0x1234567b 5 6 7 8 9 10 11 12 13 14 15 0x1234567c 6 7" } + + CHECK(ffi_prep_closure_loc(pcl, &cif, cls_large_fn, NULL, code) == FFI_OK); + + retVal = ((BigStruct(*)( + uint8_t, int8_t, uint16_t, int16_t, uint32_t, int32_t, uint64_t, int64_t, float, double, long double, char*, + uint8_t, int8_t, uint16_t, int16_t, uint32_t, int32_t, uint64_t, int64_t, float, double, long double, char*, + uint8_t, int8_t, uint16_t, int16_t, uint32_t, int32_t, uint64_t, int64_t, float, double, long double, char*, + uint8_t, int8_t, uint16_t, int16_t, uint32_t, int32_t, uint64_t, int64_t, float, double, long double, char*, + uint8_t, int8_t))(code))( + ui8, si8, ui16, si16, ui32, si32, ui64, si64, f, d, ld, p, + ui8, si8, ui16, si16, ui32, si32, ui64, si64, f, d, ld, p, + ui8, si8, ui16, si16, ui32, si32, ui64, si64, f, d, ld, p, + ui8, si8, ui16, si16, ui32, si32, ui64, si64, f, d, ld, p, + ui8, si8); + // { dg-output "\n1 2 3 4 5 6 7 8 9 10 11 0x12345678 1 2 3 4 5 6 7 8 9 10 11 0x12345678 1 2 3 4 5 6 7 8 9 10 11 0x12345678 1 2 3 4 5 6 7 8 9 10 11 0x12345678 1 2: 2 3 4 5 6 7 8 9 10 11 12 0x12345679 3 4 5 6 7 8 9 10 11 12 13 0x1234567a 4 5 6 7 8 9 10 11 12 13 14 0x1234567b 5 6 7 8 9 10 11 12 13 14 15 0x1234567c 6 7" } + printf("res: %hhu %hhd %hu %hd %u %d %" PRIu64 " %" PRId64 " %.0f %.0f %.0Lf %#lx " + "%hhu %hhd %hu %hd %u %d %" PRIu64 " %" PRId64 " %.0f %.0f %.0Lf %#lx " + "%hhu %hhd %hu %hd %u %d %" PRIu64 " %" PRId64 " %.0f %.0f %.0Lf %#lx " + "%hhu %hhd %hu %hd %u %d %" PRIu64 " %" PRId64 " %.0f %.0f %.0Lf %#lx %hhu %hhd\n", + retVal.a, retVal.b, retVal.c, retVal.d, retVal.e, retVal.f, + retVal.g, retVal.h, retVal.i, retVal.j, retVal.k, (unsigned long)retVal.l, + retVal.m, retVal.n, retVal.o, retVal.p, retVal.q, retVal.r, + retVal.s, retVal.t, retVal.u, retVal.v, retVal.w, (unsigned long)retVal.x, + retVal.y, retVal.z, retVal.aa, retVal.bb, retVal.cc, retVal.dd, + retVal.ee, retVal.ff, retVal.gg, retVal.hh, retVal.ii, (unsigned long)retVal.jj, + retVal.kk, retVal.ll, retVal.mm, retVal.nn, retVal.oo, retVal.pp, + retVal.qq, retVal.rr, retVal.ss, retVal.tt, retVal.uu, (unsigned long)retVal.vv, retVal.ww, retVal.xx); + // { dg-output "\nres: 2 3 4 5 6 7 8 9 10 11 12 0x12345679 3 4 5 6 7 8 9 10 11 12 13 0x1234567a 4 5 6 7 8 9 10 11 12 13 14 0x1234567b 5 6 7 8 9 10 11 12 13 14 15 0x1234567c 6 7" } + + return 0; +} Added: python/trunk/Modules/_ctypes/libffi/testsuite/libffi.call/many.c ============================================================================== --- (empty file) +++ python/trunk/Modules/_ctypes/libffi/testsuite/libffi.call/many.c Mon Mar 15 01:02:36 2010 @@ -0,0 +1,69 @@ +/* Area: ffi_call + Purpose: Check return value float, with many arguments + Limitations: none. + PR: none. + Originator: From the original ffitest.c */ + +/* { dg-do run } */ +#include "ffitest.h" + +#include + +static float many(float f1, + float f2, + float f3, + float f4, + float f5, + float f6, + float f7, + float f8, + float f9, + float f10, + float f11, + float f12, + float f13) +{ +#if 0 + printf("%f %f %f %f %f %f %f %f %f %f %f %f %f\n", + (double) f1, (double) f2, (double) f3, (double) f4, (double) f5, + (double) f6, (double) f7, (double) f8, (double) f9, (double) f10, + (double) f11, (double) f12, (double) f13); +#endif + + return ((f1/f2+f3/f4+f5/f6+f7/f8+f9/f10+f11/f12) * f13); +} + +int main (void) +{ + ffi_cif cif; + ffi_type *args[13]; + void *values[13]; + float fa[13]; + float f, ff; + int i; + + for (i = 0; i < 13; i++) + { + args[i] = &ffi_type_float; + values[i] = &fa[i]; + fa[i] = (float) i; + } + + /* Initialize the cif */ + CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 13, + &ffi_type_float, args) == FFI_OK); + + ffi_call(&cif, FFI_FN(many), &f, values); + + ff = many(fa[0], fa[1], + fa[2], fa[3], + fa[4], fa[5], + fa[6], fa[7], + fa[8], fa[9], + fa[10],fa[11],fa[12]); + + if (f - ff < FLT_EPSILON) + exit(0); + else + abort(); +} Added: python/trunk/Modules/_ctypes/libffi/testsuite/libffi.call/many_win32.c ============================================================================== --- (empty file) +++ python/trunk/Modules/_ctypes/libffi/testsuite/libffi.call/many_win32.c Mon Mar 15 01:02:36 2010 @@ -0,0 +1,63 @@ +/* Area: ffi_call + Purpose: Check stdcall many call on X86_WIN32 systems. + Limitations: none. + PR: none. + Originator: From the original ffitest.c */ + +/* { dg-do run { target i?86-*-cygwin* i?86-*-mingw* } } */ + +#include "ffitest.h" +#include + +static float __attribute__((stdcall)) stdcall_many(float f1, + float f2, + float f3, + float f4, + float f5, + float f6, + float f7, + float f8, + float f9, + float f10, + float f11, + float f12, + float f13) +{ + return ((f1/f2+f3/f4+f5/f6+f7/f8+f9/f10+f11/f12) * f13); +} + +int main (void) +{ + ffi_cif cif; + ffi_type *args[13]; + void *values[13]; + float fa[13]; + float f, ff; + unsigned long ul; + + for (ul = 0; ul < 13; ul++) + { + args[ul] = &ffi_type_float; + values[ul] = &fa[ul]; + fa[ul] = (float) ul; + } + + /* Initialize the cif */ + CHECK(ffi_prep_cif(&cif, FFI_STDCALL, 13, + &ffi_type_float, args) == FFI_OK); + + ff = stdcall_many(fa[0], fa[1], + fa[2], fa[3], + fa[4], fa[5], + fa[6], fa[7], + fa[8], fa[9], + fa[10], fa[11], fa[12]); + + ffi_call(&cif, FFI_FN(stdcall_many), &f, values); + + if (f - ff < FLT_EPSILON) + printf("stdcall many arg tests ok!\n"); + else + CHECK(0); + exit(0); +} Added: python/trunk/Modules/_ctypes/libffi/testsuite/libffi.call/negint.c ============================================================================== --- (empty file) +++ python/trunk/Modules/_ctypes/libffi/testsuite/libffi.call/negint.c Mon Mar 15 01:02:36 2010 @@ -0,0 +1,53 @@ +/* Area: ffi_call + Purpose: Check that negative integers are passed correctly. + Limitations: none. + PR: none. + Originator: From the original ffitest.c */ + +/* { dg-do run } */ +/* { dg-options -O2 } */ + +#include "ffitest.h" + +static int checking(int a, short b, signed char c) +{ + + return (a < 0 && b < 0 && c < 0); +} + +int main (void) +{ + ffi_cif cif; + ffi_type *args[MAX_ARGS]; + void *values[MAX_ARGS]; + ffi_arg rint; + + signed int si; + signed short ss; + signed char sc; + + args[0] = &ffi_type_sint; + values[0] = &si; + args[1] = &ffi_type_sshort; + values[1] = &ss; + args[2] = &ffi_type_schar; + values[2] = ≻ + + /* Initialize the cif */ + CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 3, + &ffi_type_sint, args) == FFI_OK); + + si = -6; + ss = -12; + sc = -1; + + checking (si, ss, sc); + + ffi_call(&cif, FFI_FN(checking), &rint, values); + + printf ("%d vs %d\n", (int)rint, checking (si, ss, sc)); + + CHECK(rint != 0); + + exit (0); +} Added: python/trunk/Modules/_ctypes/libffi/testsuite/libffi.call/nested_struct.c ============================================================================== --- (empty file) +++ python/trunk/Modules/_ctypes/libffi/testsuite/libffi.call/nested_struct.c Mon Mar 15 01:02:36 2010 @@ -0,0 +1,152 @@ +/* Area: ffi_call, closure_call + Purpose: Check structure passing with different structure size. + Contains structs as parameter of the struct itself. + Limitations: none. + PR: none. + Originator: 20030828 */ + +/* { dg-do run } */ +#include "ffitest.h" + +typedef struct cls_struct_16byte1 { + double a; + float b; + int c; +} cls_struct_16byte1; + +typedef struct cls_struct_16byte2 { + int ii; + double dd; + float ff; +} cls_struct_16byte2; + +typedef struct cls_struct_combined { + cls_struct_16byte1 d; + cls_struct_16byte2 e; +} cls_struct_combined; + +cls_struct_combined cls_struct_combined_fn(struct cls_struct_16byte1 b0, + struct cls_struct_16byte2 b1, + struct cls_struct_combined b2) +{ + struct cls_struct_combined result; + + result.d.a = b0.a + b1.dd + b2.d.a; + result.d.b = b0.b + b1.ff + b2.d.b; + result.d.c = b0.c + b1.ii + b2.d.c; + result.e.ii = b0.c + b1.ii + b2.e.ii; + result.e.dd = b0.a + b1.dd + b2.e.dd; + result.e.ff = b0.b + b1.ff + b2.e.ff; + + printf("%g %g %d %d %g %g %g %g %d %d %g %g: %g %g %d %d %g %g\n", + b0.a, b0.b, b0.c, + b1.ii, b1.dd, b1.ff, + b2.d.a, b2.d.b, b2.d.c, + b2.e.ii, b2.e.dd, b2.e.ff, + result.d.a, result.d.b, result.d.c, + result.e.ii, result.e.dd, result.e.ff); + + return result; +} + +static void +cls_struct_combined_gn(ffi_cif* cif __UNUSED__, void* resp, void** args, + void* userdata __UNUSED__) +{ + struct cls_struct_16byte1 b0; + struct cls_struct_16byte2 b1; + struct cls_struct_combined b2; + + b0 = *(struct cls_struct_16byte1*)(args[0]); + b1 = *(struct cls_struct_16byte2*)(args[1]); + b2 = *(struct cls_struct_combined*)(args[2]); + + + *(cls_struct_combined*)resp = cls_struct_combined_fn(b0, b1, b2); +} + +int main (void) +{ + ffi_cif cif; + void *code; + ffi_closure *pcl = ffi_closure_alloc(sizeof(ffi_closure), &code); + void* args_dbl[5]; + ffi_type* cls_struct_fields[5]; + ffi_type* cls_struct_fields1[5]; + ffi_type* cls_struct_fields2[5]; + ffi_type cls_struct_type, cls_struct_type1, cls_struct_type2; + ffi_type* dbl_arg_types[5]; + + cls_struct_type.size = 0; + cls_struct_type.alignment = 0; + cls_struct_type.type = FFI_TYPE_STRUCT; + cls_struct_type.elements = cls_struct_fields; + + cls_struct_type1.size = 0; + cls_struct_type1.alignment = 0; + cls_struct_type1.type = FFI_TYPE_STRUCT; + cls_struct_type1.elements = cls_struct_fields1; + + cls_struct_type2.size = 0; + cls_struct_type2.alignment = 0; + cls_struct_type2.type = FFI_TYPE_STRUCT; + cls_struct_type2.elements = cls_struct_fields2; + + struct cls_struct_16byte1 e_dbl = { 9.0, 2.0, 6}; + struct cls_struct_16byte2 f_dbl = { 1, 2.0, 3.0}; + struct cls_struct_combined g_dbl = {{4.0, 5.0, 6}, + {3, 1.0, 8.0}}; + struct cls_struct_combined res_dbl; + + cls_struct_fields[0] = &ffi_type_double; + cls_struct_fields[1] = &ffi_type_float; + cls_struct_fields[2] = &ffi_type_sint; + cls_struct_fields[3] = NULL; + + cls_struct_fields1[0] = &ffi_type_sint; + cls_struct_fields1[1] = &ffi_type_double; + cls_struct_fields1[2] = &ffi_type_float; + cls_struct_fields1[3] = NULL; + + cls_struct_fields2[0] = &cls_struct_type; + cls_struct_fields2[1] = &cls_struct_type1; + cls_struct_fields2[2] = NULL; + + + dbl_arg_types[0] = &cls_struct_type; + dbl_arg_types[1] = &cls_struct_type1; + dbl_arg_types[2] = &cls_struct_type2; + dbl_arg_types[3] = NULL; + + CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 3, &cls_struct_type2, + dbl_arg_types) == FFI_OK); + + args_dbl[0] = &e_dbl; + args_dbl[1] = &f_dbl; + args_dbl[2] = &g_dbl; + args_dbl[3] = NULL; + + ffi_call(&cif, FFI_FN(cls_struct_combined_fn), &res_dbl, args_dbl); + /* { dg-output "9 2 6 1 2 3 4 5 6 3 1 8: 15 10 13 10 12 13" } */ + CHECK( res_dbl.d.a == (e_dbl.a + f_dbl.dd + g_dbl.d.a)); + CHECK( res_dbl.d.b == (e_dbl.b + f_dbl.ff + g_dbl.d.b)); + CHECK( res_dbl.d.c == (e_dbl.c + f_dbl.ii + g_dbl.d.c)); + CHECK( res_dbl.e.ii == (e_dbl.c + f_dbl.ii + g_dbl.e.ii)); + CHECK( res_dbl.e.dd == (e_dbl.a + f_dbl.dd + g_dbl.e.dd)); + CHECK( res_dbl.e.ff == (e_dbl.b + f_dbl.ff + g_dbl.e.ff)); + + CHECK(ffi_prep_closure_loc(pcl, &cif, cls_struct_combined_gn, NULL, code) == FFI_OK); + + res_dbl = ((cls_struct_combined(*)(cls_struct_16byte1, + cls_struct_16byte2, + cls_struct_combined)) + (code))(e_dbl, f_dbl, g_dbl); + /* { dg-output "\n9 2 6 1 2 3 4 5 6 3 1 8: 15 10 13 10 12 13" } */ + CHECK( res_dbl.d.a == (e_dbl.a + f_dbl.dd + g_dbl.d.a)); + CHECK( res_dbl.d.b == (e_dbl.b + f_dbl.ff + g_dbl.d.b)); + CHECK( res_dbl.d.c == (e_dbl.c + f_dbl.ii + g_dbl.d.c)); + CHECK( res_dbl.e.ii == (e_dbl.c + f_dbl.ii + g_dbl.e.ii)); + CHECK( res_dbl.e.dd == (e_dbl.a + f_dbl.dd + g_dbl.e.dd)); + CHECK( res_dbl.e.ff == (e_dbl.b + f_dbl.ff + g_dbl.e.ff)); + exit(0); +} Added: python/trunk/Modules/_ctypes/libffi/testsuite/libffi.call/nested_struct1.c ============================================================================== --- (empty file) +++ python/trunk/Modules/_ctypes/libffi/testsuite/libffi.call/nested_struct1.c Mon Mar 15 01:02:36 2010 @@ -0,0 +1,161 @@ +/* Area: ffi_call, closure_call + Purpose: Check structure passing with different structure size. + Contains structs as parameter of the struct itself. + Limitations: none. + PR: none. + Originator: 20030828 */ + +/* { dg-do run } */ +#include "ffitest.h" + +typedef struct cls_struct_16byte1 { + double a; + float b; + int c; +} cls_struct_16byte1; + +typedef struct cls_struct_16byte2 { + int ii; + double dd; + float ff; +} cls_struct_16byte2; + +typedef struct cls_struct_combined { + cls_struct_16byte1 d; + cls_struct_16byte2 e; +} cls_struct_combined; + +cls_struct_combined cls_struct_combined_fn(struct cls_struct_16byte1 b0, + struct cls_struct_16byte2 b1, + struct cls_struct_combined b2, + struct cls_struct_16byte1 b3) +{ + struct cls_struct_combined result; + + result.d.a = b0.a + b1.dd + b2.d.a; + result.d.b = b0.b + b1.ff + b2.d.b; + result.d.c = b0.c + b1.ii + b2.d.c; + result.e.ii = b0.c + b1.ii + b2.e.ii; + result.e.dd = b0.a + b1.dd + b2.e.dd; + result.e.ff = b0.b + b1.ff + b2.e.ff; + + printf("%g %g %d %d %g %g %g %g %d %d %g %g %g %g %d: %g %g %d %d %g %g\n", + b0.a, b0.b, b0.c, + b1.ii, b1.dd, b1.ff, + b2.d.a, b2.d.b, b2.d.c, + b2.e.ii, b2.e.dd, b2.e.ff, + b3.a, b3.b, b3.c, + result.d.a, result.d.b, result.d.c, + result.e.ii, result.e.dd, result.e.ff); + + return result; +} + +static void +cls_struct_combined_gn(ffi_cif* cif __UNUSED__, void* resp, void** args, + void* userdata __UNUSED__) +{ + struct cls_struct_16byte1 b0; + struct cls_struct_16byte2 b1; + struct cls_struct_combined b2; + struct cls_struct_16byte1 b3; + + b0 = *(struct cls_struct_16byte1*)(args[0]); + b1 = *(struct cls_struct_16byte2*)(args[1]); + b2 = *(struct cls_struct_combined*)(args[2]); + b3 = *(struct cls_struct_16byte1*)(args[3]); + + + *(cls_struct_combined*)resp = cls_struct_combined_fn(b0, b1, b2, b3); +} + +int main (void) +{ + ffi_cif cif; + void *code; + ffi_closure *pcl = ffi_closure_alloc(sizeof(ffi_closure), &code); + void* args_dbl[5]; + ffi_type* cls_struct_fields[5]; + ffi_type* cls_struct_fields1[5]; + ffi_type* cls_struct_fields2[5]; + ffi_type cls_struct_type, cls_struct_type1, cls_struct_type2; + ffi_type* dbl_arg_types[5]; + + cls_struct_type.size = 0; + cls_struct_type.alignment = 0; + cls_struct_type.type = FFI_TYPE_STRUCT; + cls_struct_type.elements = cls_struct_fields; + + cls_struct_type1.size = 0; + cls_struct_type1.alignment = 0; + cls_struct_type1.type = FFI_TYPE_STRUCT; + cls_struct_type1.elements = cls_struct_fields1; + + cls_struct_type2.size = 0; + cls_struct_type2.alignment = 0; + cls_struct_type2.type = FFI_TYPE_STRUCT; + cls_struct_type2.elements = cls_struct_fields2; + + struct cls_struct_16byte1 e_dbl = { 9.0, 2.0, 6}; + struct cls_struct_16byte2 f_dbl = { 1, 2.0, 3.0}; + struct cls_struct_combined g_dbl = {{4.0, 5.0, 6}, + {3, 1.0, 8.0}}; + struct cls_struct_16byte1 h_dbl = { 3.0, 2.0, 4}; + struct cls_struct_combined res_dbl; + + cls_struct_fields[0] = &ffi_type_double; + cls_struct_fields[1] = &ffi_type_float; + cls_struct_fields[2] = &ffi_type_sint; + cls_struct_fields[3] = NULL; + + cls_struct_fields1[0] = &ffi_type_sint; + cls_struct_fields1[1] = &ffi_type_double; + cls_struct_fields1[2] = &ffi_type_float; + cls_struct_fields1[3] = NULL; + + cls_struct_fields2[0] = &cls_struct_type; + cls_struct_fields2[1] = &cls_struct_type1; + cls_struct_fields2[2] = NULL; + + + dbl_arg_types[0] = &cls_struct_type; + dbl_arg_types[1] = &cls_struct_type1; + dbl_arg_types[2] = &cls_struct_type2; + dbl_arg_types[3] = &cls_struct_type; + dbl_arg_types[4] = NULL; + + CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 4, &cls_struct_type2, + dbl_arg_types) == FFI_OK); + + args_dbl[0] = &e_dbl; + args_dbl[1] = &f_dbl; + args_dbl[2] = &g_dbl; + args_dbl[3] = &h_dbl; + args_dbl[4] = NULL; + + ffi_call(&cif, FFI_FN(cls_struct_combined_fn), &res_dbl, args_dbl); + /* { dg-output "9 2 6 1 2 3 4 5 6 3 1 8 3 2 4: 15 10 13 10 12 13" } */ + CHECK( res_dbl.d.a == (e_dbl.a + f_dbl.dd + g_dbl.d.a)); + CHECK( res_dbl.d.b == (e_dbl.b + f_dbl.ff + g_dbl.d.b)); + CHECK( res_dbl.d.c == (e_dbl.c + f_dbl.ii + g_dbl.d.c)); + CHECK( res_dbl.e.ii == (e_dbl.c + f_dbl.ii + g_dbl.e.ii)); + CHECK( res_dbl.e.dd == (e_dbl.a + f_dbl.dd + g_dbl.e.dd)); + CHECK( res_dbl.e.ff == (e_dbl.b + f_dbl.ff + g_dbl.e.ff)); + + CHECK(ffi_prep_closure_loc(pcl, &cif, cls_struct_combined_gn, NULL, code) == FFI_OK); + + res_dbl = ((cls_struct_combined(*)(cls_struct_16byte1, + cls_struct_16byte2, + cls_struct_combined, + cls_struct_16byte1)) + (code))(e_dbl, f_dbl, g_dbl, h_dbl); + /* { dg-output "\n9 2 6 1 2 3 4 5 6 3 1 8 3 2 4: 15 10 13 10 12 13" } */ + CHECK( res_dbl.d.a == (e_dbl.a + f_dbl.dd + g_dbl.d.a)); + CHECK( res_dbl.d.b == (e_dbl.b + f_dbl.ff + g_dbl.d.b)); + CHECK( res_dbl.d.c == (e_dbl.c + f_dbl.ii + g_dbl.d.c)); + CHECK( res_dbl.e.ii == (e_dbl.c + f_dbl.ii + g_dbl.e.ii)); + CHECK( res_dbl.e.dd == (e_dbl.a + f_dbl.dd + g_dbl.e.dd)); + CHECK( res_dbl.e.ff == (e_dbl.b + f_dbl.ff + g_dbl.e.ff)); + // CHECK( 1 == 0); + exit(0); +} Added: python/trunk/Modules/_ctypes/libffi/testsuite/libffi.call/nested_struct10.c ============================================================================== --- (empty file) +++ python/trunk/Modules/_ctypes/libffi/testsuite/libffi.call/nested_struct10.c Mon Mar 15 01:02:36 2010 @@ -0,0 +1,133 @@ +/* Area: ffi_call, closure_call + Purpose: Check structure passing with different structure size. + Contains structs as parameter of the struct itself. + Sample taken from Alan Modras patch to src/prep_cif.c. + Limitations: none. + PR: none. + Originator: 20051010 */ + +/* { dg-do run } */ +#include "ffitest.h" + +typedef struct A { + unsigned long long a; + unsigned char b; +} A; + +typedef struct B { + unsigned char y; + struct A x; + unsigned int z; +} B; + +typedef struct C { + unsigned long long d; + unsigned char e; +} C; + +static B B_fn(struct A b2, struct B b3, struct C b4) +{ + struct B result; + + result.x.a = b2.a + b3.x.a + b3.z + b4.d; + result.x.b = b2.b + b3.x.b + b3.y + b4.e; + result.y = b2.b + b3.x.b + b4.e; + + printf("%d %d %d %d %d %d %d %d: %d %d %d\n", (int)b2.a, b2.b, + (int)b3.x.a, b3.x.b, b3.y, b3.z, (int)b4.d, b4.e, + (int)result.x.a, result.x.b, result.y); + + return result; +} + +static void +B_gn(ffi_cif* cif __UNUSED__, void* resp, void** args, + void* userdata __UNUSED__) +{ + struct A b0; + struct B b1; + struct C b2; + + b0 = *(struct A*)(args[0]); + b1 = *(struct B*)(args[1]); + b2 = *(struct C*)(args[2]); + + *(B*)resp = B_fn(b0, b1, b2); +} + +int main (void) +{ + ffi_cif cif; + void *code; + ffi_closure *pcl = ffi_closure_alloc(sizeof(ffi_closure), &code); + void* args_dbl[4]; + ffi_type* cls_struct_fields[3]; + ffi_type* cls_struct_fields1[4]; + ffi_type* cls_struct_fields2[3]; + ffi_type cls_struct_type, cls_struct_type1, cls_struct_type2; + ffi_type* dbl_arg_types[4]; + + cls_struct_type.size = 0; + cls_struct_type.alignment = 0; + cls_struct_type.type = FFI_TYPE_STRUCT; + cls_struct_type.elements = cls_struct_fields; + + cls_struct_type1.size = 0; + cls_struct_type1.alignment = 0; + cls_struct_type1.type = FFI_TYPE_STRUCT; + cls_struct_type1.elements = cls_struct_fields1; + + cls_struct_type2.size = 0; + cls_struct_type2.alignment = 0; + cls_struct_type2.type = FFI_TYPE_STRUCT; + cls_struct_type2.elements = cls_struct_fields2; + + struct A e_dbl = { 1LL, 7}; + struct B f_dbl = { 99, {12LL , 127}, 255}; + struct C g_dbl = { 2LL, 9}; + + struct B res_dbl; + + cls_struct_fields[0] = &ffi_type_uint64; + cls_struct_fields[1] = &ffi_type_uchar; + cls_struct_fields[2] = NULL; + + cls_struct_fields1[0] = &ffi_type_uchar; + cls_struct_fields1[1] = &cls_struct_type; + cls_struct_fields1[2] = &ffi_type_uint; + cls_struct_fields1[3] = NULL; + + cls_struct_fields2[0] = &ffi_type_uint64; + cls_struct_fields2[1] = &ffi_type_uchar; + cls_struct_fields2[2] = NULL; + + + dbl_arg_types[0] = &cls_struct_type; + dbl_arg_types[1] = &cls_struct_type1; + dbl_arg_types[2] = &cls_struct_type2; + dbl_arg_types[3] = NULL; + + CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 3, &cls_struct_type1, + dbl_arg_types) == FFI_OK); + + args_dbl[0] = &e_dbl; + args_dbl[1] = &f_dbl; + args_dbl[2] = &g_dbl; + args_dbl[3] = NULL; + + ffi_call(&cif, FFI_FN(B_fn), &res_dbl, args_dbl); + /* { dg-output "1 7 12 127 99 255 2 9: 270 242 143" } */ + CHECK( res_dbl.x.a == (e_dbl.a + f_dbl.x.a + f_dbl.z + g_dbl.d)); + CHECK( res_dbl.x.b == (e_dbl.b + f_dbl.x.b + f_dbl.y + g_dbl.e)); + CHECK( res_dbl.y == (e_dbl.b + f_dbl.x.b + g_dbl.e)); + + CHECK(ffi_prep_closure_loc(pcl, &cif, B_gn, NULL, code) == FFI_OK); + + res_dbl = ((B(*)(A, B, C))(code))(e_dbl, f_dbl, g_dbl); + /* { dg-output "\n1 7 12 127 99 255 2 9: 270 242 143" } */ + CHECK( res_dbl.x.a == (e_dbl.a + f_dbl.x.a + f_dbl.z + g_dbl.d)); + CHECK( res_dbl.x.b == (e_dbl.b + f_dbl.x.b + f_dbl.y + g_dbl.e)); + CHECK( res_dbl.y == (e_dbl.b + f_dbl.x.b + g_dbl.e)); + + exit(0); +} Added: python/trunk/Modules/_ctypes/libffi/testsuite/libffi.call/nested_struct2.c ============================================================================== --- (empty file) +++ python/trunk/Modules/_ctypes/libffi/testsuite/libffi.call/nested_struct2.c Mon Mar 15 01:02:36 2010 @@ -0,0 +1,110 @@ +/* Area: ffi_call, closure_call + Purpose: Check structure passing with different structure size. + Contains structs as parameter of the struct itself. + Sample taken from Alan Modras patch to src/prep_cif.c. + Limitations: none. + PR: none. + Originator: 20030911 */ + +/* { dg-do run } */ +#include "ffitest.h" + +typedef struct A { + unsigned long a; + unsigned char b; +} A; + +typedef struct B { + struct A x; + unsigned char y; +} B; + +B B_fn(struct A b0, struct B b1) +{ + struct B result; + + result.x.a = b0.a + b1.x.a; + result.x.b = b0.b + b1.x.b + b1.y; + result.y = b0.b + b1.x.b; + + printf("%lu %d %lu %d %d: %lu %d %d\n", b0.a, b0.b, b1.x.a, b1.x.b, b1.y, + result.x.a, result.x.b, result.y); + + return result; +} + +static void +B_gn(ffi_cif* cif __UNUSED__, void* resp, void** args, + void* userdata __UNUSED__) +{ + struct A b0; + struct B b1; + + b0 = *(struct A*)(args[0]); + b1 = *(struct B*)(args[1]); + + *(B*)resp = B_fn(b0, b1); +} + +int main (void) +{ + ffi_cif cif; + void *code; + ffi_closure *pcl = ffi_closure_alloc(sizeof(ffi_closure), &code); + void* args_dbl[3]; + ffi_type* cls_struct_fields[3]; + ffi_type* cls_struct_fields1[3]; + ffi_type cls_struct_type, cls_struct_type1; + ffi_type* dbl_arg_types[3]; + + cls_struct_type.size = 0; + cls_struct_type.alignment = 0; + cls_struct_type.type = FFI_TYPE_STRUCT; + cls_struct_type.elements = cls_struct_fields; + + cls_struct_type1.size = 0; + cls_struct_type1.alignment = 0; + cls_struct_type1.type = FFI_TYPE_STRUCT; + cls_struct_type1.elements = cls_struct_fields1; + + struct A e_dbl = { 1, 7}; + struct B f_dbl = {{12 , 127}, 99}; + + struct B res_dbl; + + cls_struct_fields[0] = &ffi_type_ulong; + cls_struct_fields[1] = &ffi_type_uchar; + cls_struct_fields[2] = NULL; + + cls_struct_fields1[0] = &cls_struct_type; + cls_struct_fields1[1] = &ffi_type_uchar; + cls_struct_fields1[2] = NULL; + + + dbl_arg_types[0] = &cls_struct_type; + dbl_arg_types[1] = &cls_struct_type1; + dbl_arg_types[2] = NULL; + + CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 2, &cls_struct_type1, + dbl_arg_types) == FFI_OK); + + args_dbl[0] = &e_dbl; + args_dbl[1] = &f_dbl; + args_dbl[2] = NULL; + + ffi_call(&cif, FFI_FN(B_fn), &res_dbl, args_dbl); + /* { dg-output "1 7 12 127 99: 13 233 134" } */ + CHECK( res_dbl.x.a == (e_dbl.a + f_dbl.x.a)); + CHECK( res_dbl.x.b == (e_dbl.b + f_dbl.x.b + f_dbl.y)); + CHECK( res_dbl.y == (e_dbl.b + f_dbl.x.b)); + + CHECK(ffi_prep_closure_loc(pcl, &cif, B_gn, NULL, code) == FFI_OK); + + res_dbl = ((B(*)(A, B))(code))(e_dbl, f_dbl); + /* { dg-output "\n1 7 12 127 99: 13 233 134" } */ + CHECK( res_dbl.x.a == (e_dbl.a + f_dbl.x.a)); + CHECK( res_dbl.x.b == (e_dbl.b + f_dbl.x.b + f_dbl.y)); + CHECK( res_dbl.y == (e_dbl.b + f_dbl.x.b)); + + exit(0); +} Added: python/trunk/Modules/_ctypes/libffi/testsuite/libffi.call/nested_struct3.c ============================================================================== --- (empty file) +++ python/trunk/Modules/_ctypes/libffi/testsuite/libffi.call/nested_struct3.c Mon Mar 15 01:02:36 2010 @@ -0,0 +1,111 @@ +/* Area: ffi_call, closure_call + Purpose: Check structure passing with different structure size. + Contains structs as parameter of the struct itself. + Sample taken from Alan Modras patch to src/prep_cif.c. + Limitations: none. + PR: none. + Originator: 20030911 */ + +/* { dg-do run } */ +#include "ffitest.h" + +typedef struct A { + unsigned long long a; + unsigned char b; +} A; + +typedef struct B { + struct A x; + unsigned char y; +} B; + +B B_fn(struct A b0, struct B b1) +{ + struct B result; + + result.x.a = b0.a + b1.x.a; + result.x.b = b0.b + b1.x.b + b1.y; + result.y = b0.b + b1.x.b; + + printf("%d %d %d %d %d: %d %d %d\n", (int)b0.a, b0.b, + (int)b1.x.a, b1.x.b, b1.y, + (int)result.x.a, result.x.b, result.y); + + return result; +} + +static void +B_gn(ffi_cif* cif __UNUSED__, void* resp, void** args, + void* userdata __UNUSED__) +{ + struct A b0; + struct B b1; + + b0 = *(struct A*)(args[0]); + b1 = *(struct B*)(args[1]); + + *(B*)resp = B_fn(b0, b1); +} + +int main (void) +{ + ffi_cif cif; + void *code; + ffi_closure *pcl = ffi_closure_alloc(sizeof(ffi_closure), &code); + void* args_dbl[3]; + ffi_type* cls_struct_fields[3]; + ffi_type* cls_struct_fields1[3]; + ffi_type cls_struct_type, cls_struct_type1; + ffi_type* dbl_arg_types[3]; + + cls_struct_type.size = 0; + cls_struct_type.alignment = 0; + cls_struct_type.type = FFI_TYPE_STRUCT; + cls_struct_type.elements = cls_struct_fields; + + cls_struct_type1.size = 0; + cls_struct_type1.alignment = 0; + cls_struct_type1.type = FFI_TYPE_STRUCT; + cls_struct_type1.elements = cls_struct_fields1; + + struct A e_dbl = { 1LL, 7}; + struct B f_dbl = {{12LL , 127}, 99}; + + struct B res_dbl; + + cls_struct_fields[0] = &ffi_type_uint64; + cls_struct_fields[1] = &ffi_type_uchar; + cls_struct_fields[2] = NULL; + + cls_struct_fields1[0] = &cls_struct_type; + cls_struct_fields1[1] = &ffi_type_uchar; + cls_struct_fields1[2] = NULL; + + + dbl_arg_types[0] = &cls_struct_type; + dbl_arg_types[1] = &cls_struct_type1; + dbl_arg_types[2] = NULL; + + CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 2, &cls_struct_type1, + dbl_arg_types) == FFI_OK); + + args_dbl[0] = &e_dbl; + args_dbl[1] = &f_dbl; + args_dbl[2] = NULL; + + ffi_call(&cif, FFI_FN(B_fn), &res_dbl, args_dbl); + /* { dg-output "1 7 12 127 99: 13 233 134" } */ + CHECK( res_dbl.x.a == (e_dbl.a + f_dbl.x.a)); + CHECK( res_dbl.x.b == (e_dbl.b + f_dbl.x.b + f_dbl.y)); + CHECK( res_dbl.y == (e_dbl.b + f_dbl.x.b)); + + + CHECK(ffi_prep_closure_loc(pcl, &cif, B_gn, NULL, code) == FFI_OK); + + res_dbl = ((B(*)(A, B))(code))(e_dbl, f_dbl); + /* { dg-output "\n1 7 12 127 99: 13 233 134" } */ + CHECK( res_dbl.x.a == (e_dbl.a + f_dbl.x.a)); + CHECK( res_dbl.x.b == (e_dbl.b + f_dbl.x.b + f_dbl.y)); + CHECK( res_dbl.y == (e_dbl.b + f_dbl.x.b)); + exit(0); +} Added: python/trunk/Modules/_ctypes/libffi/testsuite/libffi.call/nested_struct4.c ============================================================================== --- (empty file) +++ python/trunk/Modules/_ctypes/libffi/testsuite/libffi.call/nested_struct4.c Mon Mar 15 01:02:36 2010 @@ -0,0 +1,111 @@ +/* Area: ffi_call, closure_call + Purpose: Check structure passing with different structure size. + Contains structs as parameter of the struct itself. + Sample taken from Alan Modras patch to src/prep_cif.c. + Limitations: none. + PR: PR 25630. + Originator: 20051010 */ + +/* { dg-do run } */ +#include "ffitest.h" + +typedef struct A { + double a; + unsigned char b; +} A; + +typedef struct B { + struct A x; + unsigned char y; +} B; + +static B B_fn(struct A b2, struct B b3) +{ + struct B result; + + result.x.a = b2.a + b3.x.a; + result.x.b = b2.b + b3.x.b + b3.y; + result.y = b2.b + b3.x.b; + + printf("%d %d %d %d %d: %d %d %d\n", (int)b2.a, b2.b, + (int)b3.x.a, b3.x.b, b3.y, + (int)result.x.a, result.x.b, result.y); + + return result; +} + +static void +B_gn(ffi_cif* cif __UNUSED__, void* resp, void** args, + void* userdata __UNUSED__) +{ + struct A b0; + struct B b1; + + b0 = *(struct A*)(args[0]); + b1 = *(struct B*)(args[1]); + + *(B*)resp = B_fn(b0, b1); +} + +int main (void) +{ + ffi_cif cif; + void *code; + ffi_closure *pcl = ffi_closure_alloc(sizeof(ffi_closure), &code); + void* args_dbl[3]; + ffi_type* cls_struct_fields[3]; + ffi_type* cls_struct_fields1[3]; + ffi_type cls_struct_type, cls_struct_type1; + ffi_type* dbl_arg_types[3]; + + cls_struct_type.size = 0; + cls_struct_type.alignment = 0; + cls_struct_type.type = FFI_TYPE_STRUCT; + cls_struct_type.elements = cls_struct_fields; + + cls_struct_type1.size = 0; + cls_struct_type1.alignment = 0; + cls_struct_type1.type = FFI_TYPE_STRUCT; + cls_struct_type1.elements = cls_struct_fields1; + + struct A e_dbl = { 1.0, 7}; + struct B f_dbl = {{12.0 , 127}, 99}; + + struct B res_dbl; + + cls_struct_fields[0] = &ffi_type_double; + cls_struct_fields[1] = &ffi_type_uchar; + cls_struct_fields[2] = NULL; + + cls_struct_fields1[0] = &cls_struct_type; + cls_struct_fields1[1] = &ffi_type_uchar; + cls_struct_fields1[2] = NULL; + + + dbl_arg_types[0] = &cls_struct_type; + dbl_arg_types[1] = &cls_struct_type1; + dbl_arg_types[2] = NULL; + + CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 2, &cls_struct_type1, + dbl_arg_types) == FFI_OK); + + args_dbl[0] = &e_dbl; + args_dbl[1] = &f_dbl; + args_dbl[2] = NULL; + + ffi_call(&cif, FFI_FN(B_fn), &res_dbl, args_dbl); + /* { dg-output "1 7 12 127 99: 13 233 134" } */ + CHECK( res_dbl.x.a == (e_dbl.a + f_dbl.x.a)); + CHECK( res_dbl.x.b == (e_dbl.b + f_dbl.x.b + f_dbl.y)); + CHECK( res_dbl.y == (e_dbl.b + f_dbl.x.b)); + + CHECK(ffi_prep_closure_loc(pcl, &cif, B_gn, NULL, code) == FFI_OK); + + res_dbl = ((B(*)(A, B))(code))(e_dbl, f_dbl); + /* { dg-output "\n1 7 12 127 99: 13 233 134" } */ + CHECK( res_dbl.x.a == (e_dbl.a + f_dbl.x.a)); + CHECK( res_dbl.x.b == (e_dbl.b + f_dbl.x.b + f_dbl.y)); + CHECK( res_dbl.y == (e_dbl.b + f_dbl.x.b)); + + exit(0); +} Added: python/trunk/Modules/_ctypes/libffi/testsuite/libffi.call/nested_struct5.c ============================================================================== --- (empty file) +++ python/trunk/Modules/_ctypes/libffi/testsuite/libffi.call/nested_struct5.c Mon Mar 15 01:02:36 2010 @@ -0,0 +1,112 @@ +/* Area: ffi_call, closure_call + Purpose: Check structure passing with different structure size. + Contains structs as parameter of the struct itself. + Sample taken from Alan Modras patch to src/prep_cif.c. + Limitations: none. + PR: none. + Originator: 20051010 */ + +/* { dg-do run } */ +#include "ffitest.h" + +typedef struct A { + long double a; + unsigned char b; +} A; + +typedef struct B { + struct A x; + unsigned char y; +} B; + +static B B_fn(struct A b2, struct B b3) +{ + struct B result; + + result.x.a = b2.a + b3.x.a; + result.x.b = b2.b + b3.x.b + b3.y; + result.y = b2.b + b3.x.b; + + printf("%d %d %d %d %d: %d %d %d\n", (int)b2.a, b2.b, + (int)b3.x.a, b3.x.b, b3.y, + (int)result.x.a, result.x.b, result.y); + + return result; +} + +static void +B_gn(ffi_cif* cif __UNUSED__, void* resp, void** args, + void* userdata __UNUSED__) +{ + struct A b0; + struct B b1; + + b0 = *(struct A*)(args[0]); + b1 = *(struct B*)(args[1]); + + *(B*)resp = B_fn(b0, b1); +} + +int main (void) +{ + ffi_cif cif; + void *code; + ffi_closure *pcl = ffi_closure_alloc(sizeof(ffi_closure), &code); + void* args_dbl[3]; + ffi_type* cls_struct_fields[3]; + ffi_type* cls_struct_fields1[3]; + ffi_type cls_struct_type, cls_struct_type1; + ffi_type* dbl_arg_types[3]; + + cls_struct_type.size = 0; + cls_struct_type.alignment = 0; + cls_struct_type.type = FFI_TYPE_STRUCT; + cls_struct_type.elements = cls_struct_fields; + + cls_struct_type1.size = 0; + cls_struct_type1.alignment = 0; + cls_struct_type1.type = FFI_TYPE_STRUCT; + cls_struct_type1.elements = cls_struct_fields1; + + struct A e_dbl = { 1.0, 7}; + struct B f_dbl = {{12.0 , 127}, 99}; + + struct B res_dbl; + + cls_struct_fields[0] = &ffi_type_longdouble; + cls_struct_fields[1] = &ffi_type_uchar; + cls_struct_fields[2] = NULL; + + cls_struct_fields1[0] = &cls_struct_type; + cls_struct_fields1[1] = &ffi_type_uchar; + cls_struct_fields1[2] = NULL; + + + dbl_arg_types[0] = &cls_struct_type; + dbl_arg_types[1] = &cls_struct_type1; + dbl_arg_types[2] = NULL; + + CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 2, &cls_struct_type1, + dbl_arg_types) == FFI_OK); + + args_dbl[0] = &e_dbl; + args_dbl[1] = &f_dbl; + args_dbl[2] = NULL; + + ffi_call(&cif, FFI_FN(B_fn), &res_dbl, args_dbl); + /* { dg-output "1 7 12 127 99: 13 233 134" } */ + CHECK( res_dbl.x.a == (e_dbl.a + f_dbl.x.a)); + CHECK( res_dbl.x.b == (e_dbl.b + f_dbl.x.b + f_dbl.y)); + CHECK( res_dbl.y == (e_dbl.b + f_dbl.x.b)); + + + CHECK(ffi_prep_closure_loc(pcl, &cif, B_gn, NULL, code) == FFI_OK); + + res_dbl = ((B(*)(A, B))(code))(e_dbl, f_dbl); + /* { dg-output "\n1 7 12 127 99: 13 233 134" } */ + CHECK( res_dbl.x.a == (e_dbl.a + f_dbl.x.a)); + CHECK( res_dbl.x.b == (e_dbl.b + f_dbl.x.b + f_dbl.y)); + CHECK( res_dbl.y == (e_dbl.b + f_dbl.x.b)); + + exit(0); +} Added: python/trunk/Modules/_ctypes/libffi/testsuite/libffi.call/nested_struct6.c ============================================================================== --- (empty file) +++ python/trunk/Modules/_ctypes/libffi/testsuite/libffi.call/nested_struct6.c Mon Mar 15 01:02:36 2010 @@ -0,0 +1,131 @@ +/* Area: ffi_call, closure_call + Purpose: Check structure passing with different structure size. + Contains structs as parameter of the struct itself. + Sample taken from Alan Modras patch to src/prep_cif.c. + Limitations: none. + PR: PR 25630. + Originator: 20051010 */ + +/* { dg-do run } */ +#include "ffitest.h" + +typedef struct A { + double a; + unsigned char b; +} A; + +typedef struct B { + struct A x; + unsigned char y; +} B; + +typedef struct C { + long d; + unsigned char e; +} C; + +static B B_fn(struct A b2, struct B b3, struct C b4) +{ + struct B result; + + result.x.a = b2.a + b3.x.a + b4.d; + result.x.b = b2.b + b3.x.b + b3.y + b4.e; + result.y = b2.b + b3.x.b + b4.e; + + printf("%d %d %d %d %d %d %d: %d %d %d\n", (int)b2.a, b2.b, + (int)b3.x.a, b3.x.b, b3.y, (int)b4.d, b4.e, + (int)result.x.a, result.x.b, result.y); + + return result; +} + +static void +B_gn(ffi_cif* cif __UNUSED__, void* resp, void** args, + void* userdata __UNUSED__) +{ + struct A b0; + struct B b1; + struct C b2; + + b0 = *(struct A*)(args[0]); + b1 = *(struct B*)(args[1]); + b2 = *(struct C*)(args[2]); + + *(B*)resp = B_fn(b0, b1, b2); +} + +int main (void) +{ + ffi_cif cif; + void *code; + ffi_closure *pcl = ffi_closure_alloc(sizeof(ffi_closure), &code); + void* args_dbl[4]; + ffi_type* cls_struct_fields[3]; + ffi_type* cls_struct_fields1[3]; + ffi_type* cls_struct_fields2[3]; + ffi_type cls_struct_type, cls_struct_type1, cls_struct_type2; + ffi_type* dbl_arg_types[4]; + + cls_struct_type.size = 0; + cls_struct_type.alignment = 0; + cls_struct_type.type = FFI_TYPE_STRUCT; + cls_struct_type.elements = cls_struct_fields; + + cls_struct_type1.size = 0; + cls_struct_type1.alignment = 0; + cls_struct_type1.type = FFI_TYPE_STRUCT; + cls_struct_type1.elements = cls_struct_fields1; + + cls_struct_type2.size = 0; + cls_struct_type2.alignment = 0; + cls_struct_type2.type = FFI_TYPE_STRUCT; + cls_struct_type2.elements = cls_struct_fields2; + + struct A e_dbl = { 1.0, 7}; + struct B f_dbl = {{12.0 , 127}, 99}; + struct C g_dbl = { 2, 9}; + + struct B res_dbl; + + cls_struct_fields[0] = &ffi_type_double; + cls_struct_fields[1] = &ffi_type_uchar; + cls_struct_fields[2] = NULL; + + cls_struct_fields1[0] = &cls_struct_type; + cls_struct_fields1[1] = &ffi_type_uchar; + cls_struct_fields1[2] = NULL; + + cls_struct_fields2[0] = &ffi_type_slong; + cls_struct_fields2[1] = &ffi_type_uchar; + cls_struct_fields2[2] = NULL; + + + dbl_arg_types[0] = &cls_struct_type; + dbl_arg_types[1] = &cls_struct_type1; + dbl_arg_types[2] = &cls_struct_type2; + dbl_arg_types[3] = NULL; + + CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 3, &cls_struct_type1, + dbl_arg_types) == FFI_OK); + + args_dbl[0] = &e_dbl; + args_dbl[1] = &f_dbl; + args_dbl[2] = &g_dbl; + args_dbl[3] = NULL; + + ffi_call(&cif, FFI_FN(B_fn), &res_dbl, args_dbl); + /* { dg-output "1 7 12 127 99 2 9: 15 242 143" } */ + CHECK( res_dbl.x.a == (e_dbl.a + f_dbl.x.a + g_dbl.d)); + CHECK( res_dbl.x.b == (e_dbl.b + f_dbl.x.b + f_dbl.y + g_dbl.e)); + CHECK( res_dbl.y == (e_dbl.b + f_dbl.x.b + g_dbl.e)); + + CHECK(ffi_prep_closure_loc(pcl, &cif, B_gn, NULL, code) == FFI_OK); + + res_dbl = ((B(*)(A, B, C))(code))(e_dbl, f_dbl, g_dbl); + /* { dg-output "\n1 7 12 127 99 2 9: 15 242 143" } */ + CHECK( res_dbl.x.a == (e_dbl.a + f_dbl.x.a + g_dbl.d)); + CHECK( res_dbl.x.b == (e_dbl.b + f_dbl.x.b + f_dbl.y + g_dbl.e)); + CHECK( res_dbl.y == (e_dbl.b + f_dbl.x.b + g_dbl.e)); + + exit(0); +} Added: python/trunk/Modules/_ctypes/libffi/testsuite/libffi.call/nested_struct7.c ============================================================================== --- (empty file) +++ python/trunk/Modules/_ctypes/libffi/testsuite/libffi.call/nested_struct7.c Mon Mar 15 01:02:36 2010 @@ -0,0 +1,111 @@ +/* Area: ffi_call, closure_call + Purpose: Check structure passing with different structure size. + Contains structs as parameter of the struct itself. + Sample taken from Alan Modras patch to src/prep_cif.c. + Limitations: none. + PR: none. + Originator: 20051010 */ + +/* { dg-do run } */ +#include "ffitest.h" + +typedef struct A { + unsigned long long a; + unsigned char b; +} A; + +typedef struct B { + struct A x; + unsigned char y; +} B; + +static B B_fn(struct A b2, struct B b3) +{ + struct B result; + + result.x.a = b2.a + b3.x.a; + result.x.b = b2.b + b3.x.b + b3.y; + result.y = b2.b + b3.x.b; + + printf("%d %d %d %d %d: %d %d %d\n", (int)b2.a, b2.b, + (int)b3.x.a, b3.x.b, b3.y, + (int)result.x.a, result.x.b, result.y); + + return result; +} + +static void +B_gn(ffi_cif* cif __UNUSED__, void* resp, void** args, + void* userdata __UNUSED__) +{ + struct A b0; + struct B b1; + + b0 = *(struct A*)(args[0]); + b1 = *(struct B*)(args[1]); + + *(B*)resp = B_fn(b0, b1); +} + +int main (void) +{ + ffi_cif cif; + void *code; + ffi_closure *pcl = ffi_closure_alloc(sizeof(ffi_closure), &code); + void* args_dbl[3]; + ffi_type* cls_struct_fields[3]; + ffi_type* cls_struct_fields1[3]; + ffi_type cls_struct_type, cls_struct_type1; + ffi_type* dbl_arg_types[3]; + + cls_struct_type.size = 0; + cls_struct_type.alignment = 0; + cls_struct_type.type = FFI_TYPE_STRUCT; + cls_struct_type.elements = cls_struct_fields; + + cls_struct_type1.size = 0; + cls_struct_type1.alignment = 0; + cls_struct_type1.type = FFI_TYPE_STRUCT; + cls_struct_type1.elements = cls_struct_fields1; + + struct A e_dbl = { 1LL, 7}; + struct B f_dbl = {{12.0 , 127}, 99}; + + struct B res_dbl; + + cls_struct_fields[0] = &ffi_type_uint64; + cls_struct_fields[1] = &ffi_type_uchar; + cls_struct_fields[2] = NULL; + + cls_struct_fields1[0] = &cls_struct_type; + cls_struct_fields1[1] = &ffi_type_uchar; + cls_struct_fields1[2] = NULL; + + + dbl_arg_types[0] = &cls_struct_type; + dbl_arg_types[1] = &cls_struct_type1; + dbl_arg_types[2] = NULL; + + CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 2, &cls_struct_type1, + dbl_arg_types) == FFI_OK); + + args_dbl[0] = &e_dbl; + args_dbl[1] = &f_dbl; + args_dbl[2] = NULL; + + ffi_call(&cif, FFI_FN(B_fn), &res_dbl, args_dbl); + /* { dg-output "1 7 12 127 99: 13 233 134" } */ + CHECK( res_dbl.x.a == (e_dbl.a + f_dbl.x.a)); + CHECK( res_dbl.x.b == (e_dbl.b + f_dbl.x.b + f_dbl.y)); + CHECK( res_dbl.y == (e_dbl.b + f_dbl.x.b)); + + CHECK(ffi_prep_closure_loc(pcl, &cif, B_gn, NULL, code) == FFI_OK); + + res_dbl = ((B(*)(A, B))(code))(e_dbl, f_dbl); + /* { dg-output "\n1 7 12 127 99: 13 233 134" } */ + CHECK( res_dbl.x.a == (e_dbl.a + f_dbl.x.a)); + CHECK( res_dbl.x.b == (e_dbl.b + f_dbl.x.b + f_dbl.y)); + CHECK( res_dbl.y == (e_dbl.b + f_dbl.x.b)); + + exit(0); +} Added: python/trunk/Modules/_ctypes/libffi/testsuite/libffi.call/nested_struct8.c ============================================================================== --- (empty file) +++ python/trunk/Modules/_ctypes/libffi/testsuite/libffi.call/nested_struct8.c Mon Mar 15 01:02:36 2010 @@ -0,0 +1,131 @@ +/* Area: ffi_call, closure_call + Purpose: Check structure passing with different structure size. + Contains structs as parameter of the struct itself. + Sample taken from Alan Modras patch to src/prep_cif.c. + Limitations: none. + PR: none. + Originator: 20051010 */ + +/* { dg-do run } */ +#include "ffitest.h" + +typedef struct A { + unsigned long long a; + unsigned char b; +} A; + +typedef struct B { + struct A x; + unsigned char y; +} B; + +typedef struct C { + unsigned long long d; + unsigned char e; +} C; + +static B B_fn(struct A b2, struct B b3, struct C b4) +{ + struct B result; + + result.x.a = b2.a + b3.x.a + b4.d; + result.x.b = b2.b + b3.x.b + b3.y + b4.e; + result.y = b2.b + b3.x.b + b4.e; + + printf("%d %d %d %d %d %d %d: %d %d %d\n", (int)b2.a, b2.b, + (int)b3.x.a, b3.x.b, b3.y, (int)b4.d, b4.e, + (int)result.x.a, result.x.b, result.y); + + return result; +} + +static void +B_gn(ffi_cif* cif __UNUSED__, void* resp, void** args, + void* userdata __UNUSED__) +{ + struct A b0; + struct B b1; + struct C b2; + + b0 = *(struct A*)(args[0]); + b1 = *(struct B*)(args[1]); + b2 = *(struct C*)(args[2]); + + *(B*)resp = B_fn(b0, b1, b2); +} + +int main (void) +{ + ffi_cif cif; + void *code; + ffi_closure *pcl = ffi_closure_alloc(sizeof(ffi_closure), &code); + void* args_dbl[4]; + ffi_type* cls_struct_fields[3]; + ffi_type* cls_struct_fields1[3]; + ffi_type* cls_struct_fields2[3]; + ffi_type cls_struct_type, cls_struct_type1, cls_struct_type2; + ffi_type* dbl_arg_types[4]; + + cls_struct_type.size = 0; + cls_struct_type.alignment = 0; + cls_struct_type.type = FFI_TYPE_STRUCT; + cls_struct_type.elements = cls_struct_fields; + + cls_struct_type1.size = 0; + cls_struct_type1.alignment = 0; + cls_struct_type1.type = FFI_TYPE_STRUCT; + cls_struct_type1.elements = cls_struct_fields1; + + cls_struct_type2.size = 0; + cls_struct_type2.alignment = 0; + cls_struct_type2.type = FFI_TYPE_STRUCT; + cls_struct_type2.elements = cls_struct_fields2; + + struct A e_dbl = { 1LL, 7}; + struct B f_dbl = {{12LL , 127}, 99}; + struct C g_dbl = { 2LL, 9}; + + struct B res_dbl; + + cls_struct_fields[0] = &ffi_type_uint64; + cls_struct_fields[1] = &ffi_type_uchar; + cls_struct_fields[2] = NULL; + + cls_struct_fields1[0] = &cls_struct_type; + cls_struct_fields1[1] = &ffi_type_uchar; + cls_struct_fields1[2] = NULL; + + cls_struct_fields2[0] = &ffi_type_uint64; + cls_struct_fields2[1] = &ffi_type_uchar; + cls_struct_fields2[2] = NULL; + + + dbl_arg_types[0] = &cls_struct_type; + dbl_arg_types[1] = &cls_struct_type1; + dbl_arg_types[2] = &cls_struct_type2; + dbl_arg_types[3] = NULL; + + CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 3, &cls_struct_type1, + dbl_arg_types) == FFI_OK); + + args_dbl[0] = &e_dbl; + args_dbl[1] = &f_dbl; + args_dbl[2] = &g_dbl; + args_dbl[3] = NULL; + + ffi_call(&cif, FFI_FN(B_fn), &res_dbl, args_dbl); + /* { dg-output "1 7 12 127 99 2 9: 15 242 143" } */ + CHECK( res_dbl.x.a == (e_dbl.a + f_dbl.x.a + g_dbl.d)); + CHECK( res_dbl.x.b == (e_dbl.b + f_dbl.x.b + f_dbl.y + g_dbl.e)); + CHECK( res_dbl.y == (e_dbl.b + f_dbl.x.b + g_dbl.e)); + + CHECK(ffi_prep_closure_loc(pcl, &cif, B_gn, NULL, code) == FFI_OK); + + res_dbl = ((B(*)(A, B, C))(code))(e_dbl, f_dbl, g_dbl); + /* { dg-output "\n1 7 12 127 99 2 9: 15 242 143" } */ + CHECK( res_dbl.x.a == (e_dbl.a + f_dbl.x.a + g_dbl.d)); + CHECK( res_dbl.x.b == (e_dbl.b + f_dbl.x.b + f_dbl.y + g_dbl.e)); + CHECK( res_dbl.y == (e_dbl.b + f_dbl.x.b + g_dbl.e)); + + exit(0); +} Added: python/trunk/Modules/_ctypes/libffi/testsuite/libffi.call/nested_struct9.c ============================================================================== --- (empty file) +++ python/trunk/Modules/_ctypes/libffi/testsuite/libffi.call/nested_struct9.c Mon Mar 15 01:02:36 2010 @@ -0,0 +1,131 @@ +/* Area: ffi_call, closure_call + Purpose: Check structure passing with different structure size. + Contains structs as parameter of the struct itself. + Sample taken from Alan Modras patch to src/prep_cif.c. + Limitations: none. + PR: none. + Originator: 20051010 */ + +/* { dg-do run } */ +#include "ffitest.h" + +typedef struct A { + unsigned char a; + unsigned long long b; +} A; + +typedef struct B { + struct A x; + unsigned char y; +} B; + +typedef struct C { + unsigned long d; + unsigned char e; +} C; + +static B B_fn(struct A b2, struct B b3, struct C b4) +{ + struct B result; + + result.x.a = b2.a + b3.x.a + b4.d; + result.x.b = b2.b + b3.x.b + b3.y + b4.e; + result.y = b2.b + b3.x.b + b4.e; + + printf("%d %d %d %d %d %d %d: %d %d %d\n", b2.a, (int)b2.b, + b3.x.a, (int)b3.x.b, b3.y, (int)b4.d, b4.e, + result.x.a, (int)result.x.b, result.y); + + return result; +} + +static void +B_gn(ffi_cif* cif __UNUSED__, void* resp, void** args, + void* userdata __UNUSED__) +{ + struct A b0; + struct B b1; + struct C b2; + + b0 = *(struct A*)(args[0]); + b1 = *(struct B*)(args[1]); + b2 = *(struct C*)(args[2]); + + *(B*)resp = B_fn(b0, b1, b2); +} + +int main (void) +{ + ffi_cif cif; + void *code; + ffi_closure *pcl = ffi_closure_alloc(sizeof(ffi_closure), &code); + void* args_dbl[4]; + ffi_type* cls_struct_fields[3]; + ffi_type* cls_struct_fields1[3]; + ffi_type* cls_struct_fields2[3]; + ffi_type cls_struct_type, cls_struct_type1, cls_struct_type2; + ffi_type* dbl_arg_types[4]; + + cls_struct_type.size = 0; + cls_struct_type.alignment = 0; + cls_struct_type.type = FFI_TYPE_STRUCT; + cls_struct_type.elements = cls_struct_fields; + + cls_struct_type1.size = 0; + cls_struct_type1.alignment = 0; + cls_struct_type1.type = FFI_TYPE_STRUCT; + cls_struct_type1.elements = cls_struct_fields1; + + cls_struct_type2.size = 0; + cls_struct_type2.alignment = 0; + cls_struct_type2.type = FFI_TYPE_STRUCT; + cls_struct_type2.elements = cls_struct_fields2; + + struct A e_dbl = { 1, 7LL}; + struct B f_dbl = {{12.0 , 127}, 99}; + struct C g_dbl = { 2, 9}; + + struct B res_dbl; + + cls_struct_fields[0] = &ffi_type_uchar; + cls_struct_fields[1] = &ffi_type_uint64; + cls_struct_fields[2] = NULL; + + cls_struct_fields1[0] = &cls_struct_type; + cls_struct_fields1[1] = &ffi_type_uchar; + cls_struct_fields1[2] = NULL; + + cls_struct_fields2[0] = &ffi_type_ulong; + cls_struct_fields2[1] = &ffi_type_uchar; + cls_struct_fields2[2] = NULL; + + + dbl_arg_types[0] = &cls_struct_type; + dbl_arg_types[1] = &cls_struct_type1; + dbl_arg_types[2] = &cls_struct_type2; + dbl_arg_types[3] = NULL; + + CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 3, &cls_struct_type1, + dbl_arg_types) == FFI_OK); + + args_dbl[0] = &e_dbl; + args_dbl[1] = &f_dbl; + args_dbl[2] = &g_dbl; + args_dbl[3] = NULL; + + ffi_call(&cif, FFI_FN(B_fn), &res_dbl, args_dbl); + /* { dg-output "1 7 12 127 99 2 9: 15 242 143" } */ + CHECK( res_dbl.x.a == (e_dbl.a + f_dbl.x.a + g_dbl.d)); + CHECK( res_dbl.x.b == (e_dbl.b + f_dbl.x.b + f_dbl.y + g_dbl.e)); + CHECK( res_dbl.y == (e_dbl.b + f_dbl.x.b + g_dbl.e)); + + CHECK(ffi_prep_closure_loc(pcl, &cif, B_gn, NULL, code) == FFI_OK); + + res_dbl = ((B(*)(A, B, C))(code))(e_dbl, f_dbl, g_dbl); + /* { dg-output "\n1 7 12 127 99 2 9: 15 242 143" } */ + CHECK( res_dbl.x.a == (e_dbl.a + f_dbl.x.a + g_dbl.d)); + CHECK( res_dbl.x.b == (e_dbl.b + f_dbl.x.b + f_dbl.y + g_dbl.e)); + CHECK( res_dbl.y == (e_dbl.b + f_dbl.x.b + g_dbl.e)); + + exit(0); +} Added: python/trunk/Modules/_ctypes/libffi/testsuite/libffi.call/problem1.c ============================================================================== --- (empty file) +++ python/trunk/Modules/_ctypes/libffi/testsuite/libffi.call/problem1.c Mon Mar 15 01:02:36 2010 @@ -0,0 +1,90 @@ +/* Area: ffi_call, closure_call + Purpose: Check structure passing with different structure size. + Limitations: none. + PR: none. + Originator: 20030828 */ + +/* { dg-do run } */ +#include "ffitest.h" + +typedef struct my_ffi_struct { + double a; + double b; + double c; +} my_ffi_struct; + +my_ffi_struct callee(struct my_ffi_struct a1, struct my_ffi_struct a2) +{ + struct my_ffi_struct result; + result.a = a1.a + a2.a; + result.b = a1.b + a2.b; + result.c = a1.c + a2.c; + + + printf("%g %g %g %g %g %g: %g %g %g\n", a1.a, a1.b, a1.c, + a2.a, a2.b, a2.c, result.a, result.b, result.c); + + return result; +} + +void stub(ffi_cif* cif __UNUSED__, void* resp, void** args, + void* userdata __UNUSED__) +{ + struct my_ffi_struct a1; + struct my_ffi_struct a2; + + a1 = *(struct my_ffi_struct*)(args[0]); + a2 = *(struct my_ffi_struct*)(args[1]); + + *(my_ffi_struct *)resp = callee(a1, a2); +} + + +int main(void) +{ + ffi_type* my_ffi_struct_fields[4]; + ffi_type my_ffi_struct_type; + ffi_cif cif; + void *code; + ffi_closure *pcl = ffi_closure_alloc(sizeof(ffi_closure), &code); + void* args[4]; + ffi_type* arg_types[3]; + + struct my_ffi_struct g = { 1.0, 2.0, 3.0 }; + struct my_ffi_struct f = { 1.0, 2.0, 3.0 }; + struct my_ffi_struct res; + + my_ffi_struct_type.size = 0; + my_ffi_struct_type.alignment = 0; + my_ffi_struct_type.type = FFI_TYPE_STRUCT; + my_ffi_struct_type.elements = my_ffi_struct_fields; + + my_ffi_struct_fields[0] = &ffi_type_double; + my_ffi_struct_fields[1] = &ffi_type_double; + my_ffi_struct_fields[2] = &ffi_type_double; + my_ffi_struct_fields[3] = NULL; + + arg_types[0] = &my_ffi_struct_type; + arg_types[1] = &my_ffi_struct_type; + arg_types[2] = NULL; + + CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 2, &my_ffi_struct_type, + arg_types) == FFI_OK); + + args[0] = &g; + args[1] = &f; + args[2] = NULL; + ffi_call(&cif, FFI_FN(callee), &res, args); + /* { dg-output "1 2 3 1 2 3: 2 4 6" } */ + printf("res: %g %g %g\n", res.a, res.b, res.c); + /* { dg-output "\nres: 2 4 6" } */ + + CHECK(ffi_prep_closure_loc(pcl, &cif, stub, NULL, code) == FFI_OK); + + res = ((my_ffi_struct(*)(struct my_ffi_struct, struct my_ffi_struct))(code))(g, f); + /* { dg-output "\n1 2 3 1 2 3: 2 4 6" } */ + printf("res: %g %g %g\n", res.a, res.b, res.c); + /* { dg-output "\nres: 2 4 6" } */ + + exit(0);; +} Added: python/trunk/Modules/_ctypes/libffi/testsuite/libffi.call/promotion.c ============================================================================== --- (empty file) +++ python/trunk/Modules/_ctypes/libffi/testsuite/libffi.call/promotion.c Mon Mar 15 01:02:36 2010 @@ -0,0 +1,59 @@ +/* Area: ffi_call + Purpose: Promotion test. + Limitations: none. + PR: none. + Originator: From the original ffitest.c */ + +/* { dg-do run } */ +#include "ffitest.h" +static int promotion(signed char sc, signed short ss, + unsigned char uc, unsigned short us) +{ + int r = (int) sc + (int) ss + (int) uc + (int) us; + + return r; +} + +int main (void) +{ + ffi_cif cif; + ffi_type *args[MAX_ARGS]; + void *values[MAX_ARGS]; + ffi_arg rint; + signed char sc; + unsigned char uc; + signed short ss; + unsigned short us; + unsigned long ul; + + args[0] = &ffi_type_schar; + args[1] = &ffi_type_sshort; + args[2] = &ffi_type_uchar; + args[3] = &ffi_type_ushort; + values[0] = ≻ + values[1] = &ss; + values[2] = &uc; + values[3] = &us; + + /* Initialize the cif */ + CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 4, + &ffi_type_sint, args) == FFI_OK); + + us = 0; + ul = 0; + + for (sc = (signed char) -127; + sc <= (signed char) 120; sc += 1) + for (ss = -30000; ss <= 30000; ss += 10000) + for (uc = (unsigned char) 0; + uc <= (unsigned char) 200; uc += 20) + for (us = 0; us <= 60000; us += 10000) + { + ul++; + ffi_call(&cif, FFI_FN(promotion), &rint, values); + CHECK((int)rint == (signed char) sc + (signed short) ss + + (unsigned char) uc + (unsigned short) us); + } + printf("%lu promotion tests run\n", ul); + exit(0); +} Added: python/trunk/Modules/_ctypes/libffi/testsuite/libffi.call/pyobjc-tc.c ============================================================================== --- (empty file) +++ python/trunk/Modules/_ctypes/libffi/testsuite/libffi.call/pyobjc-tc.c Mon Mar 15 01:02:36 2010 @@ -0,0 +1,114 @@ +/* Area: ffi_call + Purpose: Check different structures. + Limitations: none. + PR: none. + Originator: Ronald Oussoren 20030824 */ + +/* { dg-do run } */ +#include "ffitest.h" + +typedef struct Point { + float x; + float y; +} Point; + +typedef struct Size { + float h; + float w; +} Size; + +typedef struct Rect { + Point o; + Size s; +} Rect; + +int doit(int o, char* s, Point p, Rect r, int last) +{ + printf("CALLED WITH %d %s {%f %f} {{%f %f} {%f %f}} %d\n", + o, s, p.x, p.y, r.o.x, r.o.y, r.s.h, r.s.w, last); + return 42; +} + + +int main(void) +{ + ffi_type point_type; + ffi_type size_type; + ffi_type rect_type; + ffi_cif cif; + ffi_type* arglist[6]; + void* values[6]; + int r; + + /* + * First set up FFI types for the 3 struct types + */ + + point_type.size = 0; /*sizeof(Point);*/ + point_type.alignment = 0; /*__alignof__(Point);*/ + point_type.type = FFI_TYPE_STRUCT; + point_type.elements = malloc(3 * sizeof(ffi_type*)); + point_type.elements[0] = &ffi_type_float; + point_type.elements[1] = &ffi_type_float; + point_type.elements[2] = NULL; + + size_type.size = 0;/* sizeof(Size);*/ + size_type.alignment = 0;/* __alignof__(Size);*/ + size_type.type = FFI_TYPE_STRUCT; + size_type.elements = malloc(3 * sizeof(ffi_type*)); + size_type.elements[0] = &ffi_type_float; + size_type.elements[1] = &ffi_type_float; + size_type.elements[2] = NULL; + + rect_type.size = 0;/*sizeof(Rect);*/ + rect_type.alignment =0;/* __alignof__(Rect);*/ + rect_type.type = FFI_TYPE_STRUCT; + rect_type.elements = malloc(3 * sizeof(ffi_type*)); + rect_type.elements[0] = &point_type; + rect_type.elements[1] = &size_type; + rect_type.elements[2] = NULL; + + /* + * Create a CIF + */ + arglist[0] = &ffi_type_sint; + arglist[1] = &ffi_type_pointer; + arglist[2] = &point_type; + arglist[3] = &rect_type; + arglist[4] = &ffi_type_sint; + arglist[5] = NULL; + + r = ffi_prep_cif(&cif, FFI_DEFAULT_ABI, + 5, &ffi_type_sint, arglist); + if (r != FFI_OK) { + abort(); + } + + + /* And call the function through the CIF */ + + { + Point p = { 1.0, 2.0 }; + Rect r = { { 9.0, 10.0}, { -1.0, -2.0 } }; + int o = 0; + int l = 42; + char* m = "myMethod"; + ffi_arg result; + + values[0] = &o; + values[1] = &m; + values[2] = &p; + values[3] = &r; + values[4] = &l; + values[5] = NULL; + + printf("CALLING WITH %d %s {%f %f} {{%f %f} {%f %f}} %d\n", + o, m, p.x, p.y, r.o.x, r.o.y, r.s.h, r.s.w, l); + + ffi_call(&cif, FFI_FN(doit), &result, values); + + printf ("The result is %d\n", (int)result); + + } + exit(0); +} Added: python/trunk/Modules/_ctypes/libffi/testsuite/libffi.call/return_dbl.c ============================================================================== --- (empty file) +++ python/trunk/Modules/_ctypes/libffi/testsuite/libffi.call/return_dbl.c Mon Mar 15 01:02:36 2010 @@ -0,0 +1,35 @@ +/* Area: ffi_call + Purpose: Check return value double. + Limitations: none. + PR: none. + Originator: 20050212 */ + +/* { dg-do run } */ +#include "ffitest.h" + +static double return_dbl(double dbl) +{ + return 2 * dbl; +} +int main (void) +{ + ffi_cif cif; + ffi_type *args[MAX_ARGS]; + void *values[MAX_ARGS]; + double dbl, rdbl; + + args[0] = &ffi_type_double; + values[0] = &dbl; + + /* Initialize the cif */ + CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 1, + &ffi_type_double, args) == FFI_OK); + + for (dbl = -127.3; dbl < 127; dbl++) + { + ffi_call(&cif, FFI_FN(return_dbl), &rdbl, values); + printf ("%f vs %f\n", rdbl, return_dbl(dbl)); + CHECK(rdbl == 2 * dbl); + } + exit(0); +} Added: python/trunk/Modules/_ctypes/libffi/testsuite/libffi.call/return_dbl1.c ============================================================================== --- (empty file) +++ python/trunk/Modules/_ctypes/libffi/testsuite/libffi.call/return_dbl1.c Mon Mar 15 01:02:36 2010 @@ -0,0 +1,43 @@ +/* Area: ffi_call + Purpose: Check return value double. + Limitations: none. + PR: none. + Originator: 20050212 */ + +/* { dg-do run } */ +#include "ffitest.h" + +static double return_dbl(double dbl1, float fl2, unsigned int in3, double dbl4) +{ + return dbl1 + fl2 + in3 + dbl4; +} +int main (void) +{ + ffi_cif cif; + ffi_type *args[MAX_ARGS]; + void *values[MAX_ARGS]; + double dbl1, dbl4, rdbl; + float fl2; + unsigned int in3; + args[0] = &ffi_type_double; + args[1] = &ffi_type_float; + args[2] = &ffi_type_uint; + args[3] = &ffi_type_double; + values[0] = &dbl1; + values[1] = &fl2; + values[2] = &in3; + values[3] = &dbl4; + + /* Initialize the cif */ + CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 4, + &ffi_type_double, args) == FFI_OK); + dbl1 = 127.0; + fl2 = 128.0; + in3 = 255; + dbl4 = 512.7; + + ffi_call(&cif, FFI_FN(return_dbl), &rdbl, values); + printf ("%f vs %f\n", rdbl, return_dbl(dbl1, fl2, in3, dbl4)); + CHECK(rdbl == dbl1 + fl2 + in3 + dbl4); + exit(0); +} Added: python/trunk/Modules/_ctypes/libffi/testsuite/libffi.call/return_dbl2.c ============================================================================== --- (empty file) +++ python/trunk/Modules/_ctypes/libffi/testsuite/libffi.call/return_dbl2.c Mon Mar 15 01:02:36 2010 @@ -0,0 +1,42 @@ +/* Area: ffi_call + Purpose: Check return value double. + Limitations: none. + PR: none. + Originator: 20050212 */ + +/* { dg-do run } */ +#include "ffitest.h" + +static double return_dbl(double dbl1, double dbl2, unsigned int in3, double dbl4) +{ + return dbl1 + dbl2 + in3 + dbl4; +} +int main (void) +{ + ffi_cif cif; + ffi_type *args[MAX_ARGS]; + void *values[MAX_ARGS]; + double dbl1, dbl2, dbl4, rdbl; + unsigned int in3; + args[0] = &ffi_type_double; + args[1] = &ffi_type_double; + args[2] = &ffi_type_uint; + args[3] = &ffi_type_double; + values[0] = &dbl1; + values[1] = &dbl2; + values[2] = &in3; + values[3] = &dbl4; + + /* Initialize the cif */ + CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 4, + &ffi_type_double, args) == FFI_OK); + dbl1 = 127.0; + dbl2 = 128.0; + in3 = 255; + dbl4 = 512.7; + + ffi_call(&cif, FFI_FN(return_dbl), &rdbl, values); + printf ("%f vs %f\n", rdbl, return_dbl(dbl1, dbl2, in3, dbl4)); + CHECK(rdbl == dbl1 + dbl2 + in3 + dbl4); + exit(0); +} Added: python/trunk/Modules/_ctypes/libffi/testsuite/libffi.call/return_fl.c ============================================================================== --- (empty file) +++ python/trunk/Modules/_ctypes/libffi/testsuite/libffi.call/return_fl.c Mon Mar 15 01:02:36 2010 @@ -0,0 +1,35 @@ +/* Area: ffi_call + Purpose: Check return value float. + Limitations: none. + PR: none. + Originator: 20050212 */ + +/* { dg-do run } */ +#include "ffitest.h" + +static float return_fl(float fl) +{ + return 2 * fl; +} +int main (void) +{ + ffi_cif cif; + ffi_type *args[MAX_ARGS]; + void *values[MAX_ARGS]; + float fl, rfl; + + args[0] = &ffi_type_float; + values[0] = &fl; + + /* Initialize the cif */ + CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 1, + &ffi_type_float, args) == FFI_OK); + + for (fl = -127.0; fl < 127; fl++) + { + ffi_call(&cif, FFI_FN(return_fl), &rfl, values); + printf ("%f vs %f\n", rfl, return_fl(fl)); + CHECK(rfl == 2 * fl); + } + exit(0); +} Added: python/trunk/Modules/_ctypes/libffi/testsuite/libffi.call/return_fl1.c ============================================================================== --- (empty file) +++ python/trunk/Modules/_ctypes/libffi/testsuite/libffi.call/return_fl1.c Mon Mar 15 01:02:36 2010 @@ -0,0 +1,36 @@ +/* Area: ffi_call + Purpose: Check return value float. + Limitations: none. + PR: none. + Originator: 20050212 */ + +/* { dg-do run } */ +#include "ffitest.h" + +static float return_fl(float fl1, float fl2) +{ + return fl1 + fl2; +} +int main (void) +{ + ffi_cif cif; + ffi_type *args[MAX_ARGS]; + void *values[MAX_ARGS]; + float fl1, fl2, rfl; + + args[0] = &ffi_type_float; + args[1] = &ffi_type_float; + values[0] = &fl1; + values[1] = &fl2; + + /* Initialize the cif */ + CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 2, + &ffi_type_float, args) == FFI_OK); + fl1 = 127.0; + fl2 = 128.0; + + ffi_call(&cif, FFI_FN(return_fl), &rfl, values); + printf ("%f vs %f\n", rfl, return_fl(fl1, fl2)); + CHECK(rfl == fl1 + fl2); + exit(0); +} Added: python/trunk/Modules/_ctypes/libffi/testsuite/libffi.call/return_fl2.c ============================================================================== --- (empty file) +++ python/trunk/Modules/_ctypes/libffi/testsuite/libffi.call/return_fl2.c Mon Mar 15 01:02:36 2010 @@ -0,0 +1,49 @@ +/* Area: ffi_call + Purpose: Check return value float. + Limitations: none. + PR: none. + Originator: 20050212 */ + +/* { dg-do run } */ +#include "ffitest.h" + +/* Use volatile float to avoid false negative on ix86. See PR target/323. */ +static float return_fl(float fl1, float fl2, float fl3, float fl4) +{ + volatile float sum; + + sum = fl1 + fl2 + fl3 + fl4; + return sum; +} +int main (void) +{ + ffi_cif cif; + ffi_type *args[MAX_ARGS]; + void *values[MAX_ARGS]; + float fl1, fl2, fl3, fl4, rfl; + volatile float sum; + + args[0] = &ffi_type_float; + args[1] = &ffi_type_float; + args[2] = &ffi_type_float; + args[3] = &ffi_type_float; + values[0] = &fl1; + values[1] = &fl2; + values[2] = &fl3; + values[3] = &fl4; + + /* Initialize the cif */ + CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 4, + &ffi_type_float, args) == FFI_OK); + fl1 = 127.0; + fl2 = 128.0; + fl3 = 255.1; + fl4 = 512.7; + + ffi_call(&cif, FFI_FN(return_fl), &rfl, values); + printf ("%f vs %f\n", rfl, return_fl(fl1, fl2, fl3, fl4)); + + sum = fl1 + fl2 + fl3 + fl4; + CHECK(rfl == sum); + exit(0); +} Added: python/trunk/Modules/_ctypes/libffi/testsuite/libffi.call/return_fl3.c ============================================================================== --- (empty file) +++ python/trunk/Modules/_ctypes/libffi/testsuite/libffi.call/return_fl3.c Mon Mar 15 01:02:36 2010 @@ -0,0 +1,42 @@ +/* Area: ffi_call + Purpose: Check return value float. + Limitations: none. + PR: none. + Originator: 20050212 */ + +/* { dg-do run } */ +#include "ffitest.h" + +static float return_fl(float fl1, float fl2, unsigned int in3, float fl4) +{ + return fl1 + fl2 + in3 + fl4; +} +int main (void) +{ + ffi_cif cif; + ffi_type *args[MAX_ARGS]; + void *values[MAX_ARGS]; + float fl1, fl2, fl4, rfl; + unsigned int in3; + args[0] = &ffi_type_float; + args[1] = &ffi_type_float; + args[2] = &ffi_type_uint; + args[3] = &ffi_type_float; + values[0] = &fl1; + values[1] = &fl2; + values[2] = &in3; + values[3] = &fl4; + + /* Initialize the cif */ + CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 4, + &ffi_type_float, args) == FFI_OK); + fl1 = 127.0; + fl2 = 128.0; + in3 = 255; + fl4 = 512.7; + + ffi_call(&cif, FFI_FN(return_fl), &rfl, values); + printf ("%f vs %f\n", rfl, return_fl(fl1, fl2, in3, fl4)); + CHECK(rfl == fl1 + fl2 + in3 + fl4); + exit(0); +} Added: python/trunk/Modules/_ctypes/libffi/testsuite/libffi.call/return_ldl.c ============================================================================== --- (empty file) +++ python/trunk/Modules/_ctypes/libffi/testsuite/libffi.call/return_ldl.c Mon Mar 15 01:02:36 2010 @@ -0,0 +1,34 @@ +/* Area: ffi_call + Purpose: Check return value long double. + Limitations: none. + PR: none. + Originator: 20071113 */ + +/* { dg-do run { xfail x86_64-*-mingw* x86_64-*-cygwin* } } */ +#include "ffitest.h" + +static long double return_ldl(long double ldl) +{ + return 2*ldl; +} +int main (void) +{ + ffi_cif cif; + ffi_type *args[MAX_ARGS]; + void *values[MAX_ARGS]; + long double ldl, rldl; + + args[0] = &ffi_type_longdouble; + values[0] = &ldl; + + /* Initialize the cif */ + CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 1, + &ffi_type_longdouble, args) == FFI_OK); + + for (ldl = -127.0; ldl < 127.0; ldl++) + { + ffi_call(&cif, FFI_FN(return_ldl), &rldl, values); + CHECK(rldl == 2 * ldl); + } + exit(0); +} Added: python/trunk/Modules/_ctypes/libffi/testsuite/libffi.call/return_ll.c ============================================================================== --- (empty file) +++ python/trunk/Modules/_ctypes/libffi/testsuite/libffi.call/return_ll.c Mon Mar 15 01:02:36 2010 @@ -0,0 +1,41 @@ +/* Area: ffi_call + Purpose: Check return value long long. + Limitations: none. + PR: none. + Originator: From the original ffitest.c */ + +/* { dg-do run } */ +#include "ffitest.h" +static long long return_ll(long long ll) +{ + return ll; +} + +int main (void) +{ + ffi_cif cif; + ffi_type *args[MAX_ARGS]; + void *values[MAX_ARGS]; + long long rlonglong; + long long ll; + + args[0] = &ffi_type_sint64; + values[0] = ≪ + + /* Initialize the cif */ + CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 1, + &ffi_type_sint64, args) == FFI_OK); + + for (ll = 0LL; ll < 100LL; ll++) + { + ffi_call(&cif, FFI_FN(return_ll), &rlonglong, values); + CHECK(rlonglong == ll); + } + + for (ll = 55555555555000LL; ll < 55555555555100LL; ll++) + { + ffi_call(&cif, FFI_FN(return_ll), &rlonglong, values); + CHECK(rlonglong == ll); + } + exit(0); +} Added: python/trunk/Modules/_ctypes/libffi/testsuite/libffi.call/return_ll1.c ============================================================================== --- (empty file) +++ python/trunk/Modules/_ctypes/libffi/testsuite/libffi.call/return_ll1.c Mon Mar 15 01:02:36 2010 @@ -0,0 +1,42 @@ +/* Area: ffi_call + Purpose: Check if long long are passed in the corresponding regs on ppc. + Limitations: none. + PR: 20104. + Originator: 20050222 */ + +/* { dg-do run } */ +#include "ffitest.h" +static long long return_ll(int ll0, long long ll1, int ll2) +{ + return ll0 + ll1 + ll2; +} + +int main (void) +{ + ffi_cif cif; + ffi_type *args[MAX_ARGS]; + void *values[MAX_ARGS]; + long long rlonglong; + long long ll1; + unsigned ll0, ll2; + + args[0] = &ffi_type_sint; + args[1] = &ffi_type_sint64; + args[2] = &ffi_type_sint; + values[0] = &ll0; + values[1] = &ll1; + values[2] = &ll2; + + /* Initialize the cif */ + CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 3, + &ffi_type_sint64, args) == FFI_OK); + + ll0 = 11111111; + ll1 = 11111111111000LL; + ll2 = 11111111; + + ffi_call(&cif, FFI_FN(return_ll), &rlonglong, values); + printf("res: %" PRIdLL ", %" PRIdLL "\n", rlonglong, ll0 + ll1 + ll2); + /* { dg-output "res: 11111133333222, 11111133333222" } */ + exit(0); +} Added: python/trunk/Modules/_ctypes/libffi/testsuite/libffi.call/return_sc.c ============================================================================== --- (empty file) +++ python/trunk/Modules/_ctypes/libffi/testsuite/libffi.call/return_sc.c Mon Mar 15 01:02:36 2010 @@ -0,0 +1,36 @@ +/* Area: ffi_call + Purpose: Check return value signed char. + Limitations: none. + PR: none. + Originator: From the original ffitest.c */ + +/* { dg-do run } */ +#include "ffitest.h" + +static signed char return_sc(signed char sc) +{ + return sc; +} +int main (void) +{ + ffi_cif cif; + ffi_type *args[MAX_ARGS]; + void *values[MAX_ARGS]; + ffi_arg rint; + signed char sc; + + args[0] = &ffi_type_schar; + values[0] = ≻ + + /* Initialize the cif */ + CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 1, + &ffi_type_schar, args) == FFI_OK); + + for (sc = (signed char) -127; + sc < (signed char) 127; sc++) + { + ffi_call(&cif, FFI_FN(return_sc), &rint, values); + CHECK(rint == (ffi_arg) sc); + } + exit(0); +} Added: python/trunk/Modules/_ctypes/libffi/testsuite/libffi.call/return_sl.c ============================================================================== --- (empty file) +++ python/trunk/Modules/_ctypes/libffi/testsuite/libffi.call/return_sl.c Mon Mar 15 01:02:36 2010 @@ -0,0 +1,38 @@ +/* Area: ffi_call + Purpose: Check if long as return type is handled correctly. + Limitations: none. + PR: none. + */ + +/* { dg-do run } */ +#include "ffitest.h" +static long return_sl(long l1, long l2) +{ + return l1 - l2; +} + +int main (void) +{ + ffi_cif cif; + ffi_type *args[MAX_ARGS]; + void *values[MAX_ARGS]; + ffi_arg res; + unsigned long l1, l2; + + args[0] = &ffi_type_slong; + args[1] = &ffi_type_slong; + values[0] = &l1; + values[1] = &l2; + + CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 2, + &ffi_type_slong, args) == FFI_OK); + + l1 = 1073741823L; + l2 = 1073741824L; + + ffi_call(&cif, FFI_FN(return_sl), &res, values); + printf("res: %ld, %ld\n", (long)res, l1 - l2); + /* { dg-output "res: -1, -1" } */ + + exit(0); +} Added: python/trunk/Modules/_ctypes/libffi/testsuite/libffi.call/return_uc.c ============================================================================== --- (empty file) +++ python/trunk/Modules/_ctypes/libffi/testsuite/libffi.call/return_uc.c Mon Mar 15 01:02:36 2010 @@ -0,0 +1,38 @@ +/* Area: ffi_call + Purpose: Check return value unsigned char. + Limitations: none. + PR: none. + Originator: From the original ffitest.c */ + +/* { dg-do run } */ +#include "ffitest.h" + +static unsigned char return_uc(unsigned char uc) +{ + return uc; +} + +int main (void) +{ + ffi_cif cif; + ffi_type *args[MAX_ARGS]; + void *values[MAX_ARGS]; + ffi_arg rint; + + unsigned char uc; + + args[0] = &ffi_type_uchar; + values[0] = &uc; + + /* Initialize the cif */ + CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 1, + &ffi_type_uchar, args) == FFI_OK); + + for (uc = (unsigned char) '\x00'; + uc < (unsigned char) '\xff'; uc++) + { + ffi_call(&cif, FFI_FN(return_uc), &rint, values); + CHECK(rint == (signed int) uc); + } + exit(0); +} Added: python/trunk/Modules/_ctypes/libffi/testsuite/libffi.call/return_ul.c ============================================================================== --- (empty file) +++ python/trunk/Modules/_ctypes/libffi/testsuite/libffi.call/return_ul.c Mon Mar 15 01:02:36 2010 @@ -0,0 +1,38 @@ +/* Area: ffi_call + Purpose: Check if unsigned long as return type is handled correctly. + Limitations: none. + PR: none. + Originator: 20060724 */ + +/* { dg-do run } */ +#include "ffitest.h" +static unsigned long return_ul(unsigned long ul1, unsigned long ul2) +{ + return ul1 + ul2; +} + +int main (void) +{ + ffi_cif cif; + ffi_type *args[MAX_ARGS]; + void *values[MAX_ARGS]; + ffi_arg res; + unsigned long ul1, ul2; + + args[0] = &ffi_type_ulong; + args[1] = &ffi_type_ulong; + values[0] = &ul1; + values[1] = &ul2; + + CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 2, + &ffi_type_ulong, args) == FFI_OK); + + ul1 = 1073741823L; + ul2 = 1073741824L; + + ffi_call(&cif, FFI_FN(return_ul), &res, values); + printf("res: %lu, %lu\n", (unsigned long)res, ul1 + ul2); + /* { dg-output "res: 2147483647, 2147483647" } */ + + exit(0); +} Added: python/trunk/Modules/_ctypes/libffi/testsuite/libffi.call/stret_large.c ============================================================================== --- (empty file) +++ python/trunk/Modules/_ctypes/libffi/testsuite/libffi.call/stret_large.c Mon Mar 15 01:02:36 2010 @@ -0,0 +1,145 @@ +/* Area: ffi_call, closure_call + Purpose: Check structure returning with different structure size. + Depending on the ABI. Check bigger struct which overlaps + the gp and fp register count on Darwin/AIX/ppc64. + Limitations: none. + PR: none. + Originator: Blake Chaffin 6/21/2007 */ + +/* { dg-do run { xfail strongarm*-*-* xscale*-*-* } } */ +#include "ffitest.h" + +// 13 FPRs: 104 bytes +// 14 FPRs: 112 bytes + +typedef struct struct_108byte { + double a; + double b; + double c; + double d; + double e; + double f; + double g; + double h; + double i; + double j; + double k; + double l; + double m; + int n; +} struct_108byte; + +struct_108byte cls_struct_108byte_fn( + struct_108byte b0, + struct_108byte b1, + struct_108byte b2, + struct_108byte b3) +{ + struct_108byte result; + + result.a = b0.a + b1.a + b2.a + b3.a; + result.b = b0.b + b1.b + b2.b + b3.b; + result.c = b0.c + b1.c + b2.c + b3.c; + result.d = b0.d + b1.d + b2.d + b3.d; + result.e = b0.e + b1.e + b2.e + b3.e; + result.f = b0.f + b1.f + b2.f + b3.f; + result.g = b0.g + b1.g + b2.g + b3.g; + result.h = b0.h + b1.h + b2.h + b3.h; + result.i = b0.i + b1.i + b2.i + b3.i; + result.j = b0.j + b1.j + b2.j + b3.j; + result.k = b0.k + b1.k + b2.k + b3.k; + result.l = b0.l + b1.l + b2.l + b3.l; + result.m = b0.m + b1.m + b2.m + b3.m; + result.n = b0.n + b1.n + b2.n + b3.n; + + printf("%g %g %g %g %g %g %g %g %g %g %g %g %g %d\n", result.a, result.b, result.c, + result.d, result.e, result.f, result.g, result.h, result.i, + result.j, result.k, result.l, result.m, result.n); + + return result; +} + +static void +cls_struct_108byte_gn(ffi_cif* cif __UNUSED__, void* resp, void** args, void* userdata __UNUSED__) +{ + struct_108byte b0, b1, b2, b3; + + b0 = *(struct_108byte*)(args[0]); + b1 = *(struct_108byte*)(args[1]); + b2 = *(struct_108byte*)(args[2]); + b3 = *(struct_108byte*)(args[3]); + + *(struct_108byte*)resp = cls_struct_108byte_fn(b0, b1, b2, b3); +} + +int main (void) +{ + ffi_cif cif; + void *code; + ffi_closure *pcl = ffi_closure_alloc(sizeof(ffi_closure), &code); + void* args_dbl[5]; + ffi_type* cls_struct_fields[15]; + ffi_type cls_struct_type; + ffi_type* dbl_arg_types[5]; + + cls_struct_type.size = 0; + cls_struct_type.alignment = 0; + cls_struct_type.type = FFI_TYPE_STRUCT; + cls_struct_type.elements = cls_struct_fields; + + struct_108byte e_dbl = { 9.0, 2.0, 6.0, 5.0, 3.0, 4.0, 8.0, 1.0, 1.0, 2.0, 3.0, 7.0, 2.0, 7 }; + struct_108byte f_dbl = { 1.0, 2.0, 3.0, 7.0, 2.0, 5.0, 6.0, 7.0, 4.0, 5.0, 7.0, 9.0, 1.0, 4 }; + struct_108byte g_dbl = { 4.0, 5.0, 7.0, 9.0, 1.0, 1.0, 2.0, 9.0, 8.0, 6.0, 1.0, 4.0, 0.0, 3 }; + struct_108byte h_dbl = { 8.0, 6.0, 1.0, 4.0, 0.0, 3.0, 3.0, 1.0, 9.0, 2.0, 6.0, 5.0, 3.0, 2 }; + struct_108byte res_dbl; + + cls_struct_fields[0] = &ffi_type_double; + cls_struct_fields[1] = &ffi_type_double; + cls_struct_fields[2] = &ffi_type_double; + cls_struct_fields[3] = &ffi_type_double; + cls_struct_fields[4] = &ffi_type_double; + cls_struct_fields[5] = &ffi_type_double; + cls_struct_fields[6] = &ffi_type_double; + cls_struct_fields[7] = &ffi_type_double; + cls_struct_fields[8] = &ffi_type_double; + cls_struct_fields[9] = &ffi_type_double; + cls_struct_fields[10] = &ffi_type_double; + cls_struct_fields[11] = &ffi_type_double; + cls_struct_fields[12] = &ffi_type_double; + cls_struct_fields[13] = &ffi_type_sint32; + cls_struct_fields[14] = NULL; + + dbl_arg_types[0] = &cls_struct_type; + dbl_arg_types[1] = &cls_struct_type; + dbl_arg_types[2] = &cls_struct_type; + dbl_arg_types[3] = &cls_struct_type; + dbl_arg_types[4] = NULL; + + CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 4, &cls_struct_type, + dbl_arg_types) == FFI_OK); + + args_dbl[0] = &e_dbl; + args_dbl[1] = &f_dbl; + args_dbl[2] = &g_dbl; + args_dbl[3] = &h_dbl; + args_dbl[4] = NULL; + + ffi_call(&cif, FFI_FN(cls_struct_108byte_fn), &res_dbl, args_dbl); + /* { dg-output "22 15 17 25 6 13 19 18 22 15 17 25 6 16" } */ + printf("res: %g %g %g %g %g %g %g %g %g %g %g %g %g %d\n", res_dbl.a, res_dbl.b, + res_dbl.c, res_dbl.d, res_dbl.e, res_dbl.f, res_dbl.g, res_dbl.h, res_dbl.i, + res_dbl.j, res_dbl.k, res_dbl.l, res_dbl.m, res_dbl.n); + /* { dg-output "\nres: 22 15 17 25 6 13 19 18 22 15 17 25 6 16" } */ + + CHECK(ffi_prep_closure_loc(pcl, &cif, cls_struct_108byte_gn, NULL, code) == FFI_OK); + + res_dbl = ((struct_108byte(*)(struct_108byte, struct_108byte, + struct_108byte, struct_108byte))(code))(e_dbl, f_dbl, g_dbl, h_dbl); + /* { dg-output "\n22 15 17 25 6 13 19 18 22 15 17 25 6 16" } */ + printf("res: %g %g %g %g %g %g %g %g %g %g %g %g %g %d\n", res_dbl.a, res_dbl.b, + res_dbl.c, res_dbl.d, res_dbl.e, res_dbl.f, res_dbl.g, res_dbl.h, res_dbl.i, + res_dbl.j, res_dbl.k, res_dbl.l, res_dbl.m, res_dbl.n); + /* { dg-output "\nres: 22 15 17 25 6 13 19 18 22 15 17 25 6 16" } */ + + exit(0); +} Added: python/trunk/Modules/_ctypes/libffi/testsuite/libffi.call/stret_large2.c ============================================================================== --- (empty file) +++ python/trunk/Modules/_ctypes/libffi/testsuite/libffi.call/stret_large2.c Mon Mar 15 01:02:36 2010 @@ -0,0 +1,148 @@ +/* Area: ffi_call, closure_call + Purpose: Check structure returning with different structure size. + Depending on the ABI. Check bigger struct which overlaps + the gp and fp register count on Darwin/AIX/ppc64. + Limitations: none. + PR: none. + Originator: Blake Chaffin 6/21/2007 */ + +/* { dg-do run { xfail strongarm*-*-* xscale*-*-* } } */ +#include "ffitest.h" + +// 13 FPRs: 104 bytes +// 14 FPRs: 112 bytes + +typedef struct struct_116byte { + double a; + double b; + double c; + double d; + double e; + double f; + double g; + double h; + double i; + double j; + double k; + double l; + double m; + double n; + int o; +} struct_116byte; + +struct_116byte cls_struct_116byte_fn( + struct_116byte b0, + struct_116byte b1, + struct_116byte b2, + struct_116byte b3) +{ + struct_116byte result; + + result.a = b0.a + b1.a + b2.a + b3.a; + result.b = b0.b + b1.b + b2.b + b3.b; + result.c = b0.c + b1.c + b2.c + b3.c; + result.d = b0.d + b1.d + b2.d + b3.d; + result.e = b0.e + b1.e + b2.e + b3.e; + result.f = b0.f + b1.f + b2.f + b3.f; + result.g = b0.g + b1.g + b2.g + b3.g; + result.h = b0.h + b1.h + b2.h + b3.h; + result.i = b0.i + b1.i + b2.i + b3.i; + result.j = b0.j + b1.j + b2.j + b3.j; + result.k = b0.k + b1.k + b2.k + b3.k; + result.l = b0.l + b1.l + b2.l + b3.l; + result.m = b0.m + b1.m + b2.m + b3.m; + result.n = b0.n + b1.n + b2.n + b3.n; + result.o = b0.o + b1.o + b2.o + b3.o; + + printf("%g %g %g %g %g %g %g %g %g %g %g %g %g %g %d\n", result.a, result.b, result.c, + result.d, result.e, result.f, result.g, result.h, result.i, + result.j, result.k, result.l, result.m, result.n, result.o); + + return result; +} + +static void +cls_struct_116byte_gn(ffi_cif* cif __UNUSED__, void* resp, void** args, void* userdata __UNUSED__) +{ + struct_116byte b0, b1, b2, b3; + + b0 = *(struct_116byte*)(args[0]); + b1 = *(struct_116byte*)(args[1]); + b2 = *(struct_116byte*)(args[2]); + b3 = *(struct_116byte*)(args[3]); + + *(struct_116byte*)resp = cls_struct_116byte_fn(b0, b1, b2, b3); +} + +int main (void) +{ + ffi_cif cif; + void *code; + ffi_closure *pcl = ffi_closure_alloc(sizeof(ffi_closure), &code); + void* args_dbl[5]; + ffi_type* cls_struct_fields[16]; + ffi_type cls_struct_type; + ffi_type* dbl_arg_types[5]; + + cls_struct_type.size = 0; + cls_struct_type.alignment = 0; + cls_struct_type.type = FFI_TYPE_STRUCT; + cls_struct_type.elements = cls_struct_fields; + + struct_116byte e_dbl = { 9.0, 2.0, 6.0, 5.0, 3.0, 4.0, 8.0, 1.0, 1.0, 2.0, 3.0, 7.0, 2.0, 5.0, 7 }; + struct_116byte f_dbl = { 1.0, 2.0, 3.0, 7.0, 2.0, 5.0, 6.0, 7.0, 4.0, 5.0, 7.0, 9.0, 1.0, 6.0, 4 }; + struct_116byte g_dbl = { 4.0, 5.0, 7.0, 9.0, 1.0, 1.0, 2.0, 9.0, 8.0, 6.0, 1.0, 4.0, 0.0, 7.0, 3 }; + struct_116byte h_dbl = { 8.0, 6.0, 1.0, 4.0, 0.0, 3.0, 3.0, 1.0, 9.0, 2.0, 6.0, 5.0, 3.0, 8.0, 2 }; + struct_116byte res_dbl; + + cls_struct_fields[0] = &ffi_type_double; + cls_struct_fields[1] = &ffi_type_double; + cls_struct_fields[2] = &ffi_type_double; + cls_struct_fields[3] = &ffi_type_double; + cls_struct_fields[4] = &ffi_type_double; + cls_struct_fields[5] = &ffi_type_double; + cls_struct_fields[6] = &ffi_type_double; + cls_struct_fields[7] = &ffi_type_double; + cls_struct_fields[8] = &ffi_type_double; + cls_struct_fields[9] = &ffi_type_double; + cls_struct_fields[10] = &ffi_type_double; + cls_struct_fields[11] = &ffi_type_double; + cls_struct_fields[12] = &ffi_type_double; + cls_struct_fields[13] = &ffi_type_double; + cls_struct_fields[14] = &ffi_type_sint32; + cls_struct_fields[15] = NULL; + + dbl_arg_types[0] = &cls_struct_type; + dbl_arg_types[1] = &cls_struct_type; + dbl_arg_types[2] = &cls_struct_type; + dbl_arg_types[3] = &cls_struct_type; + dbl_arg_types[4] = NULL; + + CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 4, &cls_struct_type, + dbl_arg_types) == FFI_OK); + + args_dbl[0] = &e_dbl; + args_dbl[1] = &f_dbl; + args_dbl[2] = &g_dbl; + args_dbl[3] = &h_dbl; + args_dbl[4] = NULL; + + ffi_call(&cif, FFI_FN(cls_struct_116byte_fn), &res_dbl, args_dbl); + /* { dg-output "22 15 17 25 6 13 19 18 22 15 17 25 6 26 16" } */ + printf("res: %g %g %g %g %g %g %g %g %g %g %g %g %g %g %d\n", res_dbl.a, res_dbl.b, + res_dbl.c, res_dbl.d, res_dbl.e, res_dbl.f, res_dbl.g, res_dbl.h, res_dbl.i, + res_dbl.j, res_dbl.k, res_dbl.l, res_dbl.m, res_dbl.n, res_dbl.o); + /* { dg-output "\nres: 22 15 17 25 6 13 19 18 22 15 17 25 6 26 16" } */ + + CHECK(ffi_prep_closure_loc(pcl, &cif, cls_struct_116byte_gn, NULL, code) == FFI_OK); + + res_dbl = ((struct_116byte(*)(struct_116byte, struct_116byte, + struct_116byte, struct_116byte))(code))(e_dbl, f_dbl, g_dbl, h_dbl); + /* { dg-output "\n22 15 17 25 6 13 19 18 22 15 17 25 6 26 16" } */ + printf("res: %g %g %g %g %g %g %g %g %g %g %g %g %g %g %d\n", res_dbl.a, res_dbl.b, + res_dbl.c, res_dbl.d, res_dbl.e, res_dbl.f, res_dbl.g, res_dbl.h, res_dbl.i, + res_dbl.j, res_dbl.k, res_dbl.l, res_dbl.m, res_dbl.n, res_dbl.o); + /* { dg-output "\nres: 22 15 17 25 6 13 19 18 22 15 17 25 6 26 16" } */ + + exit(0); +} Added: python/trunk/Modules/_ctypes/libffi/testsuite/libffi.call/stret_medium.c ============================================================================== --- (empty file) +++ python/trunk/Modules/_ctypes/libffi/testsuite/libffi.call/stret_medium.c Mon Mar 15 01:02:36 2010 @@ -0,0 +1,124 @@ +/* Area: ffi_call, closure_call + Purpose: Check structure returning with different structure size. + Depending on the ABI. Check bigger struct which overlaps + the gp and fp register count on Darwin/AIX/ppc64. + Limitations: none. + PR: none. + Originator: Blake Chaffin 6/21/2007 */ + +/* { dg-do run { xfail strongarm*-*-* xscale*-*-* } } */ +#include "ffitest.h" + +typedef struct struct_72byte { + double a; + double b; + double c; + double d; + double e; + double f; + double g; + double h; + double i; +} struct_72byte; + +struct_72byte cls_struct_72byte_fn( + struct_72byte b0, + struct_72byte b1, + struct_72byte b2, + struct_72byte b3) +{ + struct_72byte result; + + result.a = b0.a + b1.a + b2.a + b3.a; + result.b = b0.b + b1.b + b2.b + b3.b; + result.c = b0.c + b1.c + b2.c + b3.c; + result.d = b0.d + b1.d + b2.d + b3.d; + result.e = b0.e + b1.e + b2.e + b3.e; + result.f = b0.f + b1.f + b2.f + b3.f; + result.g = b0.g + b1.g + b2.g + b3.g; + result.h = b0.h + b1.h + b2.h + b3.h; + result.i = b0.i + b1.i + b2.i + b3.i; + + printf("%g %g %g %g %g %g %g %g %g\n", result.a, result.b, result.c, + result.d, result.e, result.f, result.g, result.h, result.i); + + return result; +} + +static void +cls_struct_72byte_gn(ffi_cif* cif __UNUSED__, void* resp, void** args, void* userdata __UNUSED__) +{ + struct_72byte b0, b1, b2, b3; + + b0 = *(struct_72byte*)(args[0]); + b1 = *(struct_72byte*)(args[1]); + b2 = *(struct_72byte*)(args[2]); + b3 = *(struct_72byte*)(args[3]); + + *(struct_72byte*)resp = cls_struct_72byte_fn(b0, b1, b2, b3); +} + +int main (void) +{ + ffi_cif cif; + void *code; + ffi_closure *pcl = ffi_closure_alloc(sizeof(ffi_closure), &code); + void* args_dbl[5]; + ffi_type* cls_struct_fields[10]; + ffi_type cls_struct_type; + ffi_type* dbl_arg_types[5]; + + cls_struct_type.size = 0; + cls_struct_type.alignment = 0; + cls_struct_type.type = FFI_TYPE_STRUCT; + cls_struct_type.elements = cls_struct_fields; + + struct_72byte e_dbl = { 9.0, 2.0, 6.0, 5.0, 3.0, 4.0, 8.0, 1.0, 7.0 }; + struct_72byte f_dbl = { 1.0, 2.0, 3.0, 7.0, 2.0, 5.0, 6.0, 7.0, 4.0 }; + struct_72byte g_dbl = { 4.0, 5.0, 7.0, 9.0, 1.0, 1.0, 2.0, 9.0, 3.0 }; + struct_72byte h_dbl = { 8.0, 6.0, 1.0, 4.0, 0.0, 3.0, 3.0, 1.0, 2.0 }; + struct_72byte res_dbl; + + cls_struct_fields[0] = &ffi_type_double; + cls_struct_fields[1] = &ffi_type_double; + cls_struct_fields[2] = &ffi_type_double; + cls_struct_fields[3] = &ffi_type_double; + cls_struct_fields[4] = &ffi_type_double; + cls_struct_fields[5] = &ffi_type_double; + cls_struct_fields[6] = &ffi_type_double; + cls_struct_fields[7] = &ffi_type_double; + cls_struct_fields[8] = &ffi_type_double; + cls_struct_fields[9] = NULL; + + dbl_arg_types[0] = &cls_struct_type; + dbl_arg_types[1] = &cls_struct_type; + dbl_arg_types[2] = &cls_struct_type; + dbl_arg_types[3] = &cls_struct_type; + dbl_arg_types[4] = NULL; + + CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 4, &cls_struct_type, + dbl_arg_types) == FFI_OK); + + args_dbl[0] = &e_dbl; + args_dbl[1] = &f_dbl; + args_dbl[2] = &g_dbl; + args_dbl[3] = &h_dbl; + args_dbl[4] = NULL; + + ffi_call(&cif, FFI_FN(cls_struct_72byte_fn), &res_dbl, args_dbl); + /* { dg-output "22 15 17 25 6 13 19 18 16" } */ + printf("res: %g %g %g %g %g %g %g %g %g\n", res_dbl.a, res_dbl.b, res_dbl.c, + res_dbl.d, res_dbl.e, res_dbl.f, res_dbl.g, res_dbl.h, res_dbl.i); + /* { dg-output "\nres: 22 15 17 25 6 13 19 18 16" } */ + + CHECK(ffi_prep_closure_loc(pcl, &cif, cls_struct_72byte_gn, NULL, code) == FFI_OK); + + res_dbl = ((struct_72byte(*)(struct_72byte, struct_72byte, + struct_72byte, struct_72byte))(code))(e_dbl, f_dbl, g_dbl, h_dbl); + /* { dg-output "\n22 15 17 25 6 13 19 18 16" } */ + printf("res: %g %g %g %g %g %g %g %g %g\n", res_dbl.a, res_dbl.b, res_dbl.c, + res_dbl.d, res_dbl.e, res_dbl.f, res_dbl.g, res_dbl.h, res_dbl.i); + /* { dg-output "\nres: 22 15 17 25 6 13 19 18 16" } */ + + exit(0); +} Added: python/trunk/Modules/_ctypes/libffi/testsuite/libffi.call/stret_medium2.c ============================================================================== --- (empty file) +++ python/trunk/Modules/_ctypes/libffi/testsuite/libffi.call/stret_medium2.c Mon Mar 15 01:02:36 2010 @@ -0,0 +1,124 @@ +/* Area: ffi_call, closure_call + Purpose: Check structure returning with different structure size. + Depending on the ABI. Check bigger struct which overlaps + the gp and fp register count on Darwin/AIX/ppc64. + Limitations: none. + PR: none. + Originator: Blake Chaffin 6/21/2007 */ + +/* { dg-do run { xfail strongarm*-*-* xscale*-*-* } } */ +#include "ffitest.h" + +typedef struct struct_72byte { + double a; + double b; + double c; + double d; + double e; + double f; + double g; + double h; + long long i; +} struct_72byte; + +struct_72byte cls_struct_72byte_fn( + struct_72byte b0, + struct_72byte b1, + struct_72byte b2, + struct_72byte b3) +{ + struct_72byte result; + + result.a = b0.a + b1.a + b2.a + b3.a; + result.b = b0.b + b1.b + b2.b + b3.b; + result.c = b0.c + b1.c + b2.c + b3.c; + result.d = b0.d + b1.d + b2.d + b3.d; + result.e = b0.e + b1.e + b2.e + b3.e; + result.f = b0.f + b1.f + b2.f + b3.f; + result.g = b0.g + b1.g + b2.g + b3.g; + result.h = b0.h + b1.h + b2.h + b3.h; + result.i = b0.i + b1.i + b2.i + b3.i; + + printf("%g %g %g %g %g %g %g %g %" PRIdLL "\n", result.a, result.b, result.c, + result.d, result.e, result.f, result.g, result.h, result.i); + + return result; +} + +static void +cls_struct_72byte_gn(ffi_cif* cif __UNUSED__, void* resp, void** args, void* userdata __UNUSED__) +{ + struct_72byte b0, b1, b2, b3; + + b0 = *(struct_72byte*)(args[0]); + b1 = *(struct_72byte*)(args[1]); + b2 = *(struct_72byte*)(args[2]); + b3 = *(struct_72byte*)(args[3]); + + *(struct_72byte*)resp = cls_struct_72byte_fn(b0, b1, b2, b3); +} + +int main (void) +{ + ffi_cif cif; + void *code; + ffi_closure *pcl = ffi_closure_alloc(sizeof(ffi_closure), &code); + void* args_dbl[5]; + ffi_type* cls_struct_fields[10]; + ffi_type cls_struct_type; + ffi_type* dbl_arg_types[5]; + + cls_struct_type.size = 0; + cls_struct_type.alignment = 0; + cls_struct_type.type = FFI_TYPE_STRUCT; + cls_struct_type.elements = cls_struct_fields; + + struct_72byte e_dbl = { 9.0, 2.0, 6.0, 5.0, 3.0, 4.0, 8.0, 1.0, 7 }; + struct_72byte f_dbl = { 1.0, 2.0, 3.0, 7.0, 2.0, 5.0, 6.0, 7.0, 4 }; + struct_72byte g_dbl = { 4.0, 5.0, 7.0, 9.0, 1.0, 1.0, 2.0, 9.0, 3 }; + struct_72byte h_dbl = { 8.0, 6.0, 1.0, 4.0, 0.0, 3.0, 3.0, 1.0, 2 }; + struct_72byte res_dbl; + + cls_struct_fields[0] = &ffi_type_double; + cls_struct_fields[1] = &ffi_type_double; + cls_struct_fields[2] = &ffi_type_double; + cls_struct_fields[3] = &ffi_type_double; + cls_struct_fields[4] = &ffi_type_double; + cls_struct_fields[5] = &ffi_type_double; + cls_struct_fields[6] = &ffi_type_double; + cls_struct_fields[7] = &ffi_type_double; + cls_struct_fields[8] = &ffi_type_sint64; + cls_struct_fields[9] = NULL; + + dbl_arg_types[0] = &cls_struct_type; + dbl_arg_types[1] = &cls_struct_type; + dbl_arg_types[2] = &cls_struct_type; + dbl_arg_types[3] = &cls_struct_type; + dbl_arg_types[4] = NULL; + + CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 4, &cls_struct_type, + dbl_arg_types) == FFI_OK); + + args_dbl[0] = &e_dbl; + args_dbl[1] = &f_dbl; + args_dbl[2] = &g_dbl; + args_dbl[3] = &h_dbl; + args_dbl[4] = NULL; + + ffi_call(&cif, FFI_FN(cls_struct_72byte_fn), &res_dbl, args_dbl); + /* { dg-output "22 15 17 25 6 13 19 18 16" } */ + printf("res: %g %g %g %g %g %g %g %g %" PRIdLL "\n", res_dbl.a, res_dbl.b, res_dbl.c, + res_dbl.d, res_dbl.e, res_dbl.f, res_dbl.g, res_dbl.h, res_dbl.i); + /* { dg-output "\nres: 22 15 17 25 6 13 19 18 16" } */ + + CHECK(ffi_prep_closure_loc(pcl, &cif, cls_struct_72byte_gn, NULL, code) == FFI_OK); + + res_dbl = ((struct_72byte(*)(struct_72byte, struct_72byte, + struct_72byte, struct_72byte))(code))(e_dbl, f_dbl, g_dbl, h_dbl); + /* { dg-output "\n22 15 17 25 6 13 19 18 16" } */ + printf("res: %g %g %g %g %g %g %g %g %" PRIdLL "\n", res_dbl.a, res_dbl.b, res_dbl.c, + res_dbl.d, res_dbl.e, res_dbl.f, res_dbl.g, res_dbl.h, res_dbl.i); + /* { dg-output "\nres: 22 15 17 25 6 13 19 18 16" } */ + + exit(0); +} Added: python/trunk/Modules/_ctypes/libffi/testsuite/libffi.call/strlen.c ============================================================================== --- (empty file) +++ python/trunk/Modules/_ctypes/libffi/testsuite/libffi.call/strlen.c Mon Mar 15 01:02:36 2010 @@ -0,0 +1,44 @@ +/* Area: ffi_call + Purpose: Check strlen function call. + Limitations: none. + PR: none. + Originator: From the original ffitest.c */ + +/* { dg-do run } */ +#include "ffitest.h" + +static size_t my_strlen(char *s) +{ + return (strlen(s)); +} + +int main (void) +{ + ffi_cif cif; + ffi_type *args[MAX_ARGS]; + void *values[MAX_ARGS]; + ffi_arg rint; + char *s; + + args[0] = &ffi_type_pointer; + values[0] = (void*) &s; + + /* Initialize the cif */ + CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 1, + &ffi_type_sint, args) == FFI_OK); + + s = "a"; + ffi_call(&cif, FFI_FN(my_strlen), &rint, values); + CHECK(rint == 1); + + s = "1234567"; + ffi_call(&cif, FFI_FN(my_strlen), &rint, values); + CHECK(rint == 7); + + s = "1234567890123456789012345"; + ffi_call(&cif, FFI_FN(my_strlen), &rint, values); + CHECK(rint == 25); + + exit (0); +} + Added: python/trunk/Modules/_ctypes/libffi/testsuite/libffi.call/strlen_win32.c ============================================================================== --- (empty file) +++ python/trunk/Modules/_ctypes/libffi/testsuite/libffi.call/strlen_win32.c Mon Mar 15 01:02:36 2010 @@ -0,0 +1,44 @@ +/* Area: ffi_call + Purpose: Check stdcall strlen call on X86_WIN32 systems. + Limitations: none. + PR: none. + Originator: From the original ffitest.c */ + +/* { dg-do run { target i?86-*-cygwin* i?86-*-mingw* } } */ + +#include "ffitest.h" + +static size_t __attribute__((stdcall)) my_stdcall_strlen(char *s) +{ + return (strlen(s)); +} + +int main (void) +{ + ffi_cif cif; + ffi_type *args[MAX_ARGS]; + void *values[MAX_ARGS]; + ffi_arg rint; + char *s; + args[0] = &ffi_type_pointer; + values[0] = (void*) &s; + + /* Initialize the cif */ + CHECK(ffi_prep_cif(&cif, FFI_STDCALL, 1, + &ffi_type_sint, args) == FFI_OK); + + s = "a"; + ffi_call(&cif, FFI_FN(my_stdcall_strlen), &rint, values); + CHECK(rint == 1); + + s = "1234567"; + ffi_call(&cif, FFI_FN(my_stdcall_strlen), &rint, values); + CHECK(rint == 7); + + s = "1234567890123456789012345"; + ffi_call(&cif, FFI_FN(my_stdcall_strlen), &rint, values); + CHECK(rint == 25); + + printf("stdcall strlen tests passed\n"); + exit(0); +} Added: python/trunk/Modules/_ctypes/libffi/testsuite/libffi.call/struct1.c ============================================================================== --- (empty file) +++ python/trunk/Modules/_ctypes/libffi/testsuite/libffi.call/struct1.c Mon Mar 15 01:02:36 2010 @@ -0,0 +1,65 @@ +/* Area: ffi_call + Purpose: Check structures. + Limitations: none. + PR: none. + Originator: From the original ffitest.c */ + +/* { dg-do run } */ +#include "ffitest.h" + +typedef struct +{ + unsigned char uc; + double d; + unsigned int ui; +} test_structure_1; + +static test_structure_1 struct1(test_structure_1 ts) +{ + ts.uc++; + ts.d--; + ts.ui++; + + return ts; +} + +int main (void) +{ + ffi_cif cif; + ffi_type *args[MAX_ARGS]; + void *values[MAX_ARGS]; + ffi_type ts1_type; + ffi_type *ts1_type_elements[4]; + ts1_type.size = 0; + ts1_type.alignment = 0; + ts1_type.type = FFI_TYPE_STRUCT; + ts1_type.elements = ts1_type_elements; + ts1_type_elements[0] = &ffi_type_uchar; + ts1_type_elements[1] = &ffi_type_double; + ts1_type_elements[2] = &ffi_type_uint; + ts1_type_elements[3] = NULL; + + test_structure_1 ts1_arg; + /* This is a hack to get a properly aligned result buffer */ + test_structure_1 *ts1_result = + (test_structure_1 *) malloc (sizeof(test_structure_1)); + + args[0] = &ts1_type; + values[0] = &ts1_arg; + + /* Initialize the cif */ + CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 1, + &ts1_type, args) == FFI_OK); + + ts1_arg.uc = '\x01'; + ts1_arg.d = 3.14159; + ts1_arg.ui = 555; + + ffi_call(&cif, FFI_FN(struct1), ts1_result, values); + + CHECK(ts1_result->ui == 556); + CHECK(ts1_result->d == 3.14159 - 1); + + free (ts1_result); + exit(0); +} Added: python/trunk/Modules/_ctypes/libffi/testsuite/libffi.call/struct2.c ============================================================================== --- (empty file) +++ python/trunk/Modules/_ctypes/libffi/testsuite/libffi.call/struct2.c Mon Mar 15 01:02:36 2010 @@ -0,0 +1,67 @@ +/* Area: ffi_call + Purpose: Check structures. + Limitations: none. + PR: none. + Originator: From the original ffitest.c */ + +/* { dg-do run } */ +#include "ffitest.h" + +typedef struct +{ + double d1; + double d2; +} test_structure_2; + +static test_structure_2 struct2(test_structure_2 ts) +{ + ts.d1--; + ts.d2--; + + return ts; +} + +int main (void) +{ + ffi_cif cif; + ffi_type *args[MAX_ARGS]; + void *values[MAX_ARGS]; + test_structure_2 ts2_arg; + ffi_type ts2_type; + ffi_type *ts2_type_elements[3]; + ts2_type.size = 0; + ts2_type.alignment = 0; + ts2_type.type = FFI_TYPE_STRUCT; + ts2_type.elements = ts2_type_elements; + ts2_type_elements[0] = &ffi_type_double; + ts2_type_elements[1] = &ffi_type_double; + ts2_type_elements[2] = NULL; + + + /* This is a hack to get a properly aligned result buffer */ + test_structure_2 *ts2_result = + (test_structure_2 *) malloc (sizeof(test_structure_2)); + + args[0] = &ts2_type; + values[0] = &ts2_arg; + + /* Initialize the cif */ + CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 1, &ts2_type, args) == FFI_OK); + + ts2_arg.d1 = 5.55; + ts2_arg.d2 = 6.66; + + printf ("%g\n", ts2_arg.d1); + printf ("%g\n", ts2_arg.d2); + + ffi_call(&cif, FFI_FN(struct2), ts2_result, values); + + printf ("%g\n", ts2_result->d1); + printf ("%g\n", ts2_result->d2); + + CHECK(ts2_result->d1 == 5.55 - 1); + CHECK(ts2_result->d2 == 6.66 - 1); + + free (ts2_result); + exit(0); +} Added: python/trunk/Modules/_ctypes/libffi/testsuite/libffi.call/struct3.c ============================================================================== --- (empty file) +++ python/trunk/Modules/_ctypes/libffi/testsuite/libffi.call/struct3.c Mon Mar 15 01:02:36 2010 @@ -0,0 +1,59 @@ +/* Area: ffi_call + Purpose: Check structures. + Limitations: none. + PR: none. + Originator: From the original ffitest.c */ + +/* { dg-do run } */ +#include "ffitest.h" + +typedef struct +{ + int si; +} test_structure_3; + +static test_structure_3 struct3(test_structure_3 ts) +{ + ts.si = -(ts.si*2); + + return ts; +} + +int main (void) +{ + ffi_cif cif; + ffi_type *args[MAX_ARGS]; + void *values[MAX_ARGS]; + int compare_value; + ffi_type ts3_type; + ffi_type *ts3_type_elements[2]; + ts3_type.size = 0; + ts3_type.alignment = 0; + ts3_type.type = FFI_TYPE_STRUCT; + ts3_type.elements = ts3_type_elements; + ts3_type_elements[0] = &ffi_type_sint; + ts3_type_elements[1] = NULL; + + test_structure_3 ts3_arg; + test_structure_3 *ts3_result = + (test_structure_3 *) malloc (sizeof(test_structure_3)); + + args[0] = &ts3_type; + values[0] = &ts3_arg; + + /* Initialize the cif */ + CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 1, + &ts3_type, args) == FFI_OK); + + ts3_arg.si = -123; + compare_value = ts3_arg.si; + + ffi_call(&cif, FFI_FN(struct3), ts3_result, values); + + printf ("%d %d\n", ts3_result->si, -(compare_value*2)); + + CHECK(ts3_result->si == -(compare_value*2)); + + free (ts3_result); + exit(0); +} Added: python/trunk/Modules/_ctypes/libffi/testsuite/libffi.call/struct4.c ============================================================================== --- (empty file) +++ python/trunk/Modules/_ctypes/libffi/testsuite/libffi.call/struct4.c Mon Mar 15 01:02:36 2010 @@ -0,0 +1,63 @@ +/* Area: ffi_call + Purpose: Check structures. + Limitations: none. + PR: none. + Originator: From the original ffitest.c */ + +/* { dg-do run } */ +#include "ffitest.h" + +typedef struct +{ + unsigned ui1; + unsigned ui2; + unsigned ui3; +} test_structure_4; + +static test_structure_4 struct4(test_structure_4 ts) +{ + ts.ui3 = ts.ui1 * ts.ui2 * ts.ui3; + + return ts; +} + +int main (void) +{ + ffi_cif cif; + ffi_type *args[MAX_ARGS]; + void *values[MAX_ARGS]; + ffi_type ts4_type; + ffi_type *ts4_type_elements[4]; + ts4_type.size = 0; + ts4_type.alignment = 0; + ts4_type.type = FFI_TYPE_STRUCT; + test_structure_4 ts4_arg; + ts4_type.elements = ts4_type_elements; + ts4_type_elements[0] = &ffi_type_uint; + ts4_type_elements[1] = &ffi_type_uint; + ts4_type_elements[2] = &ffi_type_uint; + ts4_type_elements[3] = NULL; + + + /* This is a hack to get a properly aligned result buffer */ + test_structure_4 *ts4_result = + (test_structure_4 *) malloc (sizeof(test_structure_4)); + + args[0] = &ts4_type; + values[0] = &ts4_arg; + + /* Initialize the cif */ + CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 1, &ts4_type, args) == FFI_OK); + + ts4_arg.ui1 = 2; + ts4_arg.ui2 = 3; + ts4_arg.ui3 = 4; + + ffi_call (&cif, FFI_FN(struct4), ts4_result, values); + + CHECK(ts4_result->ui3 == 2U * 3U * 4U); + + + free (ts4_result); + exit(0); +} Added: python/trunk/Modules/_ctypes/libffi/testsuite/libffi.call/struct5.c ============================================================================== --- (empty file) +++ python/trunk/Modules/_ctypes/libffi/testsuite/libffi.call/struct5.c Mon Mar 15 01:02:36 2010 @@ -0,0 +1,65 @@ +/* Area: ffi_call + Purpose: Check structures. + Limitations: none. + PR: none. + Originator: From the original ffitest.c */ + +/* { dg-do run } */ +#include "ffitest.h" +typedef struct +{ + char c1; + char c2; +} test_structure_5; + +static test_structure_5 struct5(test_structure_5 ts1, test_structure_5 ts2) +{ + ts1.c1 += ts2.c1; + ts1.c2 -= ts2.c2; + + return ts1; +} + +int main (void) +{ + ffi_cif cif; + ffi_type *args[MAX_ARGS]; + void *values[MAX_ARGS]; + ffi_type ts5_type; + ffi_type *ts5_type_elements[3]; + ts5_type.size = 0; + ts5_type.alignment = 0; + ts5_type.type = FFI_TYPE_STRUCT; + ts5_type.elements = ts5_type_elements; + ts5_type_elements[0] = &ffi_type_schar; + ts5_type_elements[1] = &ffi_type_schar; + ts5_type_elements[2] = NULL; + + test_structure_5 ts5_arg1, ts5_arg2; + + /* This is a hack to get a properly aligned result buffer */ + test_structure_5 *ts5_result = + (test_structure_5 *) malloc (sizeof(test_structure_5)); + + args[0] = &ts5_type; + args[1] = &ts5_type; + values[0] = &ts5_arg1; + values[1] = &ts5_arg2; + + /* Initialize the cif */ + CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 2, &ts5_type, args) == FFI_OK); + + ts5_arg1.c1 = 2; + ts5_arg1.c2 = 6; + ts5_arg2.c1 = 5; + ts5_arg2.c2 = 3; + + ffi_call (&cif, FFI_FN(struct5), ts5_result, values); + + CHECK(ts5_result->c1 == 7); + CHECK(ts5_result->c2 == 3); + + + free (ts5_result); + exit(0); +} Added: python/trunk/Modules/_ctypes/libffi/testsuite/libffi.call/struct6.c ============================================================================== --- (empty file) +++ python/trunk/Modules/_ctypes/libffi/testsuite/libffi.call/struct6.c Mon Mar 15 01:02:36 2010 @@ -0,0 +1,64 @@ +/* Area: ffi_call + Purpose: Check structures. + Limitations: none. + PR: none. + Originator: From the original ffitest.c */ + +/* { dg-do run } */ +#include "ffitest.h" +typedef struct +{ + float f; + double d; +} test_structure_6; + +static test_structure_6 struct6 (test_structure_6 ts) +{ + ts.f += 1; + ts.d += 1; + + return ts; +} + +int main (void) +{ + ffi_cif cif; + ffi_type *args[MAX_ARGS]; + void *values[MAX_ARGS]; + ffi_type ts6_type; + ffi_type *ts6_type_elements[3]; + ts6_type.size = 0; + ts6_type.alignment = 0; + ts6_type.type = FFI_TYPE_STRUCT; + ts6_type.elements = ts6_type_elements; + ts6_type_elements[0] = &ffi_type_float; + ts6_type_elements[1] = &ffi_type_double; + ts6_type_elements[2] = NULL; + + + test_structure_6 ts6_arg; + + /* This is a hack to get a properly aligned result buffer */ + test_structure_6 *ts6_result = + (test_structure_6 *) malloc (sizeof(test_structure_6)); + + args[0] = &ts6_type; + values[0] = &ts6_arg; + + /* Initialize the cif */ + CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 1, &ts6_type, args) == FFI_OK); + + ts6_arg.f = 5.55f; + ts6_arg.d = 6.66; + + printf ("%g\n", ts6_arg.f); + printf ("%g\n", ts6_arg.d); + + ffi_call(&cif, FFI_FN(struct6), ts6_result, values); + + CHECK(ts6_result->f == 5.55f + 1); + CHECK(ts6_result->d == 6.66 + 1); + + free (ts6_result); + exit(0); +} Added: python/trunk/Modules/_ctypes/libffi/testsuite/libffi.call/struct7.c ============================================================================== --- (empty file) +++ python/trunk/Modules/_ctypes/libffi/testsuite/libffi.call/struct7.c Mon Mar 15 01:02:36 2010 @@ -0,0 +1,74 @@ +/* Area: ffi_call + Purpose: Check structures. + Limitations: none. + PR: none. + Originator: From the original ffitest.c */ + +/* { dg-do run } */ +#include "ffitest.h" +typedef struct +{ + float f1; + float f2; + double d; +} test_structure_7; + +static test_structure_7 struct7 (test_structure_7 ts) +{ + ts.f1 += 1; + ts.f2 += 1; + ts.d += 1; + + return ts; +} + +int main (void) +{ + ffi_cif cif; + ffi_type *args[MAX_ARGS]; + void *values[MAX_ARGS]; + ffi_type ts7_type; + ffi_type *ts7_type_elements[4]; + ts7_type.size = 0; + ts7_type.alignment = 0; + ts7_type.type = FFI_TYPE_STRUCT; + ts7_type.elements = ts7_type_elements; + ts7_type_elements[0] = &ffi_type_float; + ts7_type_elements[1] = &ffi_type_float; + ts7_type_elements[2] = &ffi_type_double; + ts7_type_elements[3] = NULL; + + + test_structure_7 ts7_arg; + + /* This is a hack to get a properly aligned result buffer */ + test_structure_7 *ts7_result = + (test_structure_7 *) malloc (sizeof(test_structure_7)); + + args[0] = &ts7_type; + values[0] = &ts7_arg; + + /* Initialize the cif */ + CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 1, &ts7_type, args) == FFI_OK); + + ts7_arg.f1 = 5.55f; + ts7_arg.f2 = 55.5f; + ts7_arg.d = 6.66; + + printf ("%g\n", ts7_arg.f1); + printf ("%g\n", ts7_arg.f2); + printf ("%g\n", ts7_arg.d); + + ffi_call(&cif, FFI_FN(struct7), ts7_result, values); + + printf ("%g\n", ts7_result->f1); + printf ("%g\n", ts7_result->f2); + printf ("%g\n", ts7_result->d); + + CHECK(ts7_result->f1 == 5.55f + 1); + CHECK(ts7_result->f2 == 55.5f + 1); + CHECK(ts7_result->d == 6.66 + 1); + + free (ts7_result); + exit(0); +} Added: python/trunk/Modules/_ctypes/libffi/testsuite/libffi.call/struct8.c ============================================================================== --- (empty file) +++ python/trunk/Modules/_ctypes/libffi/testsuite/libffi.call/struct8.c Mon Mar 15 01:02:36 2010 @@ -0,0 +1,80 @@ +/* Area: ffi_call + Purpose: Check structures. + Limitations: none. + PR: none. + Originator: From the original ffitest.c */ + +/* { dg-do run } */ +#include "ffitest.h" +typedef struct +{ + float f1; + float f2; + float f3; + float f4; +} test_structure_8; + +static test_structure_8 struct8 (test_structure_8 ts) +{ + ts.f1 += 1; + ts.f2 += 1; + ts.f3 += 1; + ts.f4 += 1; + + return ts; +} + +int main (void) +{ + ffi_cif cif; + ffi_type *args[MAX_ARGS]; + void *values[MAX_ARGS]; + ffi_type ts8_type; + ffi_type *ts8_type_elements[5]; + ts8_type.size = 0; + ts8_type.alignment = 0; + ts8_type.type = FFI_TYPE_STRUCT; + ts8_type.elements = ts8_type_elements; + ts8_type_elements[0] = &ffi_type_float; + ts8_type_elements[1] = &ffi_type_float; + ts8_type_elements[2] = &ffi_type_float; + ts8_type_elements[3] = &ffi_type_float; + ts8_type_elements[4] = NULL; + + test_structure_8 ts8_arg; + + /* This is a hack to get a properly aligned result buffer */ + test_structure_8 *ts8_result = + (test_structure_8 *) malloc (sizeof(test_structure_8)); + + args[0] = &ts8_type; + values[0] = &ts8_arg; + + /* Initialize the cif */ + CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 1, &ts8_type, args) == FFI_OK); + + ts8_arg.f1 = 5.55f; + ts8_arg.f2 = 55.5f; + ts8_arg.f3 = -5.55f; + ts8_arg.f4 = -55.5f; + + printf ("%g\n", ts8_arg.f1); + printf ("%g\n", ts8_arg.f2); + printf ("%g\n", ts8_arg.f3); + printf ("%g\n", ts8_arg.f4); + + ffi_call(&cif, FFI_FN(struct8), ts8_result, values); + + printf ("%g\n", ts8_result->f1); + printf ("%g\n", ts8_result->f2); + printf ("%g\n", ts8_result->f3); + printf ("%g\n", ts8_result->f4); + + CHECK(ts8_result->f1 == 5.55f + 1); + CHECK(ts8_result->f2 == 55.5f + 1); + CHECK(ts8_result->f3 == -5.55f + 1); + CHECK(ts8_result->f4 == -55.5f + 1); + + free (ts8_result); + exit(0); +} Added: python/trunk/Modules/_ctypes/libffi/testsuite/libffi.call/struct9.c ============================================================================== --- (empty file) +++ python/trunk/Modules/_ctypes/libffi/testsuite/libffi.call/struct9.c Mon Mar 15 01:02:36 2010 @@ -0,0 +1,67 @@ +/* Area: ffi_call + Purpose: Check structures. + Limitations: none. + PR: none. + Originator: From the original ffitest.c */ + +/* { dg-do run } */ +#include "ffitest.h" + +typedef struct +{ + float f; + int i; +} test_structure_9; + +static test_structure_9 struct9 (test_structure_9 ts) +{ + ts.f += 1; + ts.i += 1; + + return ts; +} + +int main (void) +{ + ffi_cif cif; + ffi_type *args[MAX_ARGS]; + void *values[MAX_ARGS]; + ffi_type ts9_type; + ffi_type *ts9_type_elements[3]; + ts9_type.size = 0; + ts9_type.alignment = 0; + ts9_type.type = FFI_TYPE_STRUCT; + ts9_type.elements = ts9_type_elements; + ts9_type_elements[0] = &ffi_type_float; + ts9_type_elements[1] = &ffi_type_sint; + ts9_type_elements[2] = NULL; + + test_structure_9 ts9_arg; + + /* This is a hack to get a properly aligned result buffer */ + test_structure_9 *ts9_result = + (test_structure_9 *) malloc (sizeof(test_structure_9)); + + args[0] = &ts9_type; + values[0] = &ts9_arg; + + /* Initialize the cif */ + CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 1, &ts9_type, args) == FFI_OK); + + ts9_arg.f = 5.55f; + ts9_arg.i = 5; + + printf ("%g\n", ts9_arg.f); + printf ("%d\n", ts9_arg.i); + + ffi_call(&cif, FFI_FN(struct9), ts9_result, values); + + printf ("%g\n", ts9_result->f); + printf ("%d\n", ts9_result->i); + + CHECK(ts9_result->f == 5.55f + 1); + CHECK(ts9_result->i == 5 + 1); + + free (ts9_result); + exit(0); +} Added: python/trunk/Modules/_ctypes/libffi/testsuite/libffi.call/testclosure.c ============================================================================== --- (empty file) +++ python/trunk/Modules/_ctypes/libffi/testsuite/libffi.call/testclosure.c Mon Mar 15 01:02:36 2010 @@ -0,0 +1,70 @@ +/* Area: closure_call + Purpose: Check return value float. + Limitations: none. + PR: 41908. + Originator: 20091102 */ + +/* { dg-do run } */ +#include "ffitest.h" + +typedef struct cls_struct_combined { + float a; + float b; + float c; + float d; +} cls_struct_combined; + +void cls_struct_combined_fn(struct cls_struct_combined arg) +{ + printf("%g %g %g %g\n", + arg.a, arg.b, + arg.c, arg.d); + fflush(stdout); +} + +static void +cls_struct_combined_gn(ffi_cif* cif __UNUSED__, void* resp __UNUSED__, + void** args, void* userdata __UNUSED__) +{ + struct cls_struct_combined a0; + + a0 = *(struct cls_struct_combined*)(args[0]); + + cls_struct_combined_fn(a0); +} + + +int main (void) +{ + ffi_cif cif; + void *code; + ffi_closure *pcl = ffi_closure_alloc(sizeof(ffi_closure), &code); + ffi_type* cls_struct_fields0[5]; + ffi_type cls_struct_type0; + ffi_type* dbl_arg_types[5]; + + cls_struct_type0.size = 0; + cls_struct_type0.alignment = 0; + cls_struct_type0.type = FFI_TYPE_STRUCT; + cls_struct_type0.elements = cls_struct_fields0; + + struct cls_struct_combined g_dbl = {4.0, 5.0, 1.0, 8.0}; + + cls_struct_fields0[0] = &ffi_type_float; + cls_struct_fields0[1] = &ffi_type_float; + cls_struct_fields0[2] = &ffi_type_float; + cls_struct_fields0[3] = &ffi_type_float; + cls_struct_fields0[4] = NULL; + + dbl_arg_types[0] = &cls_struct_type0; + dbl_arg_types[1] = NULL; + + CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 1, &ffi_type_void, + dbl_arg_types) == FFI_OK); + + CHECK(ffi_prep_closure_loc(pcl, &cif, cls_struct_combined_gn, NULL, code) == FFI_OK); + + ((void(*)(cls_struct_combined)) (code))(g_dbl); + /* { dg-output "4 5 1 8" } */ + exit(0); +} Added: python/trunk/Modules/_ctypes/libffi/testsuite/libffi.special/ffitestcxx.h ============================================================================== --- (empty file) +++ python/trunk/Modules/_ctypes/libffi/testsuite/libffi.special/ffitestcxx.h Mon Mar 15 01:02:36 2010 @@ -0,0 +1,96 @@ +#include +#include +#include +#include +#include "fficonfig.h" + +#define MAX_ARGS 256 + + +/* Define __UNUSED__ that also other compilers than gcc can run the tests. */ +#undef __UNUSED__ +#if defined(__GNUC__) +#define __UNUSED__ __attribute__((__unused__)) +#else +#define __UNUSED__ +#endif + +#define CHECK(x) (!(x) ? abort() : (void)0) + +/* Prefer MAP_ANON(YMOUS) to /dev/zero, since we don't need to keep a + file open. */ +#ifdef HAVE_MMAP_ANON +# undef HAVE_MMAP_DEV_ZERO + +# include +# ifndef MAP_FAILED +# define MAP_FAILED -1 +# endif +# if !defined (MAP_ANONYMOUS) && defined (MAP_ANON) +# define MAP_ANONYMOUS MAP_ANON +# endif +# define USING_MMAP + +#endif + +#ifdef HAVE_MMAP_DEV_ZERO + +# include +# ifndef MAP_FAILED +# define MAP_FAILED -1 +# endif +# define USING_MMAP + +#endif + + +/* MinGW kludge. */ +#ifdef _WIN64 +#define PRIdLL "I64d" +#define PRIuLL "I64u" +#else +#define PRIdLL "lld" +#define PRIuLL "llu" +#endif + +#ifdef USING_MMAP +static inline void * +allocate_mmap (size_t size) +{ + void *page; +#if defined (HAVE_MMAP_DEV_ZERO) + static int dev_zero_fd = -1; +#endif + +#ifdef HAVE_MMAP_DEV_ZERO + if (dev_zero_fd == -1) + { + dev_zero_fd = open ("/dev/zero", O_RDONLY); + if (dev_zero_fd == -1) + { + perror ("open /dev/zero: %m"); + exit (1); + } + } +#endif + + +#ifdef HAVE_MMAP_ANON + page = mmap (NULL, size, PROT_READ | PROT_WRITE | PROT_EXEC, + MAP_PRIVATE | MAP_ANONYMOUS, -1, 0); +#endif +#ifdef HAVE_MMAP_DEV_ZERO + page = mmap (NULL, size, PROT_READ | PROT_WRITE | PROT_EXEC, + MAP_PRIVATE, dev_zero_fd, 0); +#endif + + if (page == MAP_FAILED) + { + perror ("virtual memory exhausted"); + exit (1); + } + + return page; +} + +#endif Added: python/trunk/Modules/_ctypes/libffi/testsuite/libffi.special/special.exp ============================================================================== --- (empty file) +++ python/trunk/Modules/_ctypes/libffi/testsuite/libffi.special/special.exp Mon Mar 15 01:02:36 2010 @@ -0,0 +1,37 @@ +# Copyright (C) 2003, 2006, 2009 Free Software Foundation, Inc. + +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; see the file COPYING3. If not see +# . + +load_lib libffi-dg.exp + +dg-init +libffi-init + +global srcdir subdir + +global cxx_options + +set cxx_options " -shared-libgcc -lstdc++" + +dg-runtest [lsort [glob -nocomplain $srcdir/$subdir/*.cc]] $cxx_options "-O0 -W -Wall" +dg-runtest [lsort [glob -nocomplain $srcdir/$subdir/*.cc]] $cxx_options "-O2" +dg-runtest [lsort [glob -nocomplain $srcdir/$subdir/*.cc]] $cxx_options "-O3" +dg-runtest [lsort [glob -nocomplain $srcdir/$subdir/*.cc]] $cxx_options "-Os" + +dg-finish + +# Local Variables: +# tcl-indent-level:4 +# End: Added: python/trunk/Modules/_ctypes/libffi/testsuite/libffi.special/unwindtest.cc ============================================================================== --- (empty file) +++ python/trunk/Modules/_ctypes/libffi/testsuite/libffi.special/unwindtest.cc Mon Mar 15 01:02:36 2010 @@ -0,0 +1,124 @@ +/* Area: ffi_closure, unwind info + Purpose: Check if the unwind information is passed correctly. + Limitations: none. + PR: none. + Originator: Jeff Sturm */ + +/* { dg-do run } */ +#include "ffitestcxx.h" + +#if defined HAVE_STDINT_H +#include +#endif + +#if defined HAVE_INTTYPES_H +#include +#endif + +void +closure_test_fn(ffi_cif* cif __UNUSED__, void* resp __UNUSED__, + void** args __UNUSED__, void* userdata __UNUSED__) +{ + throw 9; +} + +typedef void (*closure_test_type)(); + +void closure_test_fn1(ffi_cif* cif __UNUSED__, void* resp, + void** args, void* userdata __UNUSED__) + { + *(ffi_arg*)resp = + (int)*(float *)args[0] +(int)(*(float *)args[1]) + + (int)(*(float *)args[2]) + (int)*(float *)args[3] + + (int)(*(signed short *)args[4]) + (int)(*(float *)args[5]) + + (int)*(float *)args[6] + (int)(*(int *)args[7]) + + (int)(*(double*)args[8]) + (int)*(int *)args[9] + + (int)(*(int *)args[10]) + (int)(*(float *)args[11]) + + (int)*(int *)args[12] + (int)(*(int *)args[13]) + + (int)(*(int *)args[14]) + *(int *)args[15] + (int)(intptr_t)userdata; + + printf("%d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d: %d\n", + (int)*(float *)args[0], (int)(*(float *)args[1]), + (int)(*(float *)args[2]), (int)*(float *)args[3], + (int)(*(signed short *)args[4]), (int)(*(float *)args[5]), + (int)*(float *)args[6], (int)(*(int *)args[7]), + (int)(*(double *)args[8]), (int)*(int *)args[9], + (int)(*(int *)args[10]), (int)(*(float *)args[11]), + (int)*(int *)args[12], (int)(*(int *)args[13]), + (int)(*(int *)args[14]), *(int *)args[15], + (int)(intptr_t)userdata, (int)*(ffi_arg*)resp); + + throw (int)*(ffi_arg*)resp; +} + +typedef int (*closure_test_type1)(float, float, float, float, signed short, + float, float, int, double, int, int, float, + int, int, int, int); + +int main (void) +{ + ffi_cif cif; + void *code; + ffi_closure *pcl = (ffi_closure *)ffi_closure_alloc(sizeof(ffi_closure), &code); + ffi_type * cl_arg_types[17]; + + { + cl_arg_types[1] = NULL; + + CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 0, + &ffi_type_void, cl_arg_types) == FFI_OK); + CHECK(ffi_prep_closure_loc(pcl, &cif, closure_test_fn, NULL, code) == FFI_OK); + + try + { + (*((closure_test_type)(code)))(); + } catch (int exception_code) + { + CHECK(exception_code == 9); + } + + printf("part one OK\n"); + /* { dg-output "part one OK" } */ + } + + { + + cl_arg_types[0] = &ffi_type_float; + cl_arg_types[1] = &ffi_type_float; + cl_arg_types[2] = &ffi_type_float; + cl_arg_types[3] = &ffi_type_float; + cl_arg_types[4] = &ffi_type_sshort; + cl_arg_types[5] = &ffi_type_float; + cl_arg_types[6] = &ffi_type_float; + cl_arg_types[7] = &ffi_type_uint; + cl_arg_types[8] = &ffi_type_double; + cl_arg_types[9] = &ffi_type_uint; + cl_arg_types[10] = &ffi_type_uint; + cl_arg_types[11] = &ffi_type_float; + cl_arg_types[12] = &ffi_type_uint; + cl_arg_types[13] = &ffi_type_uint; + cl_arg_types[14] = &ffi_type_uint; + cl_arg_types[15] = &ffi_type_uint; + cl_arg_types[16] = NULL; + + /* Initialize the cif */ + CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 16, + &ffi_type_sint, cl_arg_types) == FFI_OK); + + CHECK(ffi_prep_closure_loc(pcl, &cif, closure_test_fn1, + (void *) 3 /* userdata */, code) == FFI_OK); + try + { + (*((closure_test_type1)code)) + (1.1, 2.2, 3.3, 4.4, 127, 5.5, 6.6, 8, 9, 10, 11, 12.0, 13, + 19, 21, 1); + /* { dg-output "\n1 2 3 4 127 5 6 8 9 10 11 12 13 19 21 1 3: 255" } */ + } catch (int exception_code) + { + CHECK(exception_code == 255); + } + printf("part two OK\n"); + /* { dg-output "\npart two OK" } */ + } + exit(0); +} Added: python/trunk/Modules/_ctypes/libffi/testsuite/libffi.special/unwindtest_ffi_call.cc ============================================================================== --- (empty file) +++ python/trunk/Modules/_ctypes/libffi/testsuite/libffi.special/unwindtest_ffi_call.cc Mon Mar 15 01:02:36 2010 @@ -0,0 +1,53 @@ +/* Area: ffi_call, unwind info + Purpose: Check if the unwind information is passed correctly. + Limitations: none. + PR: none. + Originator: Andreas Tobler 20061213 */ + +/* { dg-do run } */ +#include "ffitestcxx.h" + +static int checking(int a __UNUSED__, short b __UNUSED__, + signed char c __UNUSED__) +{ + throw 9; +} + +int main (void) +{ + ffi_cif cif; + ffi_type *args[MAX_ARGS]; + void *values[MAX_ARGS]; + ffi_arg rint; + + signed int si; + signed short ss; + signed char sc; + + args[0] = &ffi_type_sint; + values[0] = &si; + args[1] = &ffi_type_sshort; + values[1] = &ss; + args[2] = &ffi_type_schar; + values[2] = ≻ + + /* Initialize the cif */ + CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 3, + &ffi_type_sint, args) == FFI_OK); + + si = -6; + ss = -12; + sc = -1; + { + try + { + ffi_call(&cif, FFI_FN(checking), &rint, values); + } catch (int exception_code) + { + CHECK(exception_code == 9); + } + printf("part one OK\n"); + /* { dg-output "part one OK" } */ + } + exit(0); +} Added: python/trunk/Modules/_ctypes/libffi/texinfo.tex ============================================================================== --- (empty file) +++ python/trunk/Modules/_ctypes/libffi/texinfo.tex Mon Mar 15 01:02:36 2010 @@ -0,0 +1,7210 @@ +% texinfo.tex -- TeX macros to handle Texinfo files. +% +% Load plain if necessary, i.e., if running under initex. +\expandafter\ifx\csname fmtname\endcsname\relax\input plain\fi +% +\def\texinfoversion{2005-07-05.19} +% +% Copyright (C) 1985, 1986, 1988, 1990, 1991, 1992, 1993, 1994, 1995, +% 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005 Free Software +% Foundation, Inc. +% +% This texinfo.tex file is free software; you can redistribute it and/or +% modify it under the terms of the GNU General Public License as +% published by the Free Software Foundation; either version 2, or (at +% your option) any later version. +% +% This texinfo.tex file is distributed in the hope that it will be +% useful, but WITHOUT ANY WARRANTY; without even the implied warranty +% of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +% General Public License for more details. +% +% You should have received a copy of the GNU General Public License +% along with this texinfo.tex file; see the file COPYING. If not, write +% to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, +% Boston, MA 02110-1301, USA. +% +% As a special exception, when this file is read by TeX when processing +% a Texinfo source document, you may use the result without +% restriction. (This has been our intent since Texinfo was invented.) +% +% Please try the latest version of texinfo.tex before submitting bug +% reports; you can get the latest version from: +% http://www.gnu.org/software/texinfo/ (the Texinfo home page), or +% ftp://tug.org/tex/texinfo.tex +% (and all CTAN mirrors, see http://www.ctan.org). +% The texinfo.tex in any given distribution could well be out +% of date, so if that's what you're using, please check. +% +% Send bug reports to bug-texinfo at gnu.org. Please include including a +% complete document in each bug report with which we can reproduce the +% problem. Patches are, of course, greatly appreciated. +% +% To process a Texinfo manual with TeX, it's most reliable to use the +% texi2dvi shell script that comes with the distribution. For a simple +% manual foo.texi, however, you can get away with this: +% tex foo.texi +% texindex foo.?? +% tex foo.texi +% tex foo.texi +% dvips foo.dvi -o # or whatever; this makes foo.ps. +% The extra TeX runs get the cross-reference information correct. +% Sometimes one run after texindex suffices, and sometimes you need more +% than two; texi2dvi does it as many times as necessary. +% +% It is possible to adapt texinfo.tex for other languages, to some +% extent. You can get the existing language-specific files from the +% full Texinfo distribution. +% +% The GNU Texinfo home page is http://www.gnu.org/software/texinfo. + + +\message{Loading texinfo [version \texinfoversion]:} + +% If in a .fmt file, print the version number +% and turn on active characters that we couldn't do earlier because +% they might have appeared in the input file name. +\everyjob{\message{[Texinfo version \texinfoversion]}% + \catcode`+=\active \catcode`\_=\active} + +\message{Basics,} +\chardef\other=12 + +% We never want plain's \outer definition of \+ in Texinfo. +% For @tex, we can use \tabalign. +\let\+ = \relax + +% Save some plain tex macros whose names we will redefine. +\let\ptexb=\b +\let\ptexbullet=\bullet +\let\ptexc=\c +\let\ptexcomma=\, +\let\ptexdot=\. +\let\ptexdots=\dots +\let\ptexend=\end +\let\ptexequiv=\equiv +\let\ptexexclam=\! +\let\ptexfootnote=\footnote +\let\ptexgtr=> +\let\ptexhat=^ +\let\ptexi=\i +\let\ptexindent=\indent +\let\ptexinsert=\insert +\let\ptexlbrace=\{ +\let\ptexless=< +\let\ptexnewwrite\newwrite +\let\ptexnoindent=\noindent +\let\ptexplus=+ +\let\ptexrbrace=\} +\let\ptexslash=\/ +\let\ptexstar=\* +\let\ptext=\t + +% If this character appears in an error message or help string, it +% starts a new line in the output. +\newlinechar = `^^J + +% Use TeX 3.0's \inputlineno to get the line number, for better error +% messages, but if we're using an old version of TeX, don't do anything. +% +\ifx\inputlineno\thisisundefined + \let\linenumber = \empty % Pre-3.0. +\else + \def\linenumber{l.\the\inputlineno:\space} +\fi + +% Set up fixed words for English if not already set. +\ifx\putwordAppendix\undefined \gdef\putwordAppendix{Appendix}\fi +\ifx\putwordChapter\undefined \gdef\putwordChapter{Chapter}\fi +\ifx\putwordfile\undefined \gdef\putwordfile{file}\fi +\ifx\putwordin\undefined \gdef\putwordin{in}\fi +\ifx\putwordIndexIsEmpty\undefined \gdef\putwordIndexIsEmpty{(Index is empty)}\fi +\ifx\putwordIndexNonexistent\undefined \gdef\putwordIndexNonexistent{(Index is nonexistent)}\fi +\ifx\putwordInfo\undefined \gdef\putwordInfo{Info}\fi +\ifx\putwordInstanceVariableof\undefined \gdef\putwordInstanceVariableof{Instance Variable of}\fi +\ifx\putwordMethodon\undefined \gdef\putwordMethodon{Method on}\fi +\ifx\putwordNoTitle\undefined \gdef\putwordNoTitle{No Title}\fi +\ifx\putwordof\undefined \gdef\putwordof{of}\fi +\ifx\putwordon\undefined \gdef\putwordon{on}\fi +\ifx\putwordpage\undefined \gdef\putwordpage{page}\fi +\ifx\putwordsection\undefined \gdef\putwordsection{section}\fi +\ifx\putwordSection\undefined \gdef\putwordSection{Section}\fi +\ifx\putwordsee\undefined \gdef\putwordsee{see}\fi +\ifx\putwordSee\undefined \gdef\putwordSee{See}\fi +\ifx\putwordShortTOC\undefined \gdef\putwordShortTOC{Short Contents}\fi +\ifx\putwordTOC\undefined \gdef\putwordTOC{Table of Contents}\fi +% +\ifx\putwordMJan\undefined \gdef\putwordMJan{January}\fi +\ifx\putwordMFeb\undefined \gdef\putwordMFeb{February}\fi +\ifx\putwordMMar\undefined \gdef\putwordMMar{March}\fi +\ifx\putwordMApr\undefined \gdef\putwordMApr{April}\fi +\ifx\putwordMMay\undefined \gdef\putwordMMay{May}\fi +\ifx\putwordMJun\undefined \gdef\putwordMJun{June}\fi +\ifx\putwordMJul\undefined \gdef\putwordMJul{July}\fi +\ifx\putwordMAug\undefined \gdef\putwordMAug{August}\fi +\ifx\putwordMSep\undefined \gdef\putwordMSep{September}\fi +\ifx\putwordMOct\undefined \gdef\putwordMOct{October}\fi +\ifx\putwordMNov\undefined \gdef\putwordMNov{November}\fi +\ifx\putwordMDec\undefined \gdef\putwordMDec{December}\fi +% +\ifx\putwordDefmac\undefined \gdef\putwordDefmac{Macro}\fi +\ifx\putwordDefspec\undefined \gdef\putwordDefspec{Special Form}\fi +\ifx\putwordDefvar\undefined \gdef\putwordDefvar{Variable}\fi +\ifx\putwordDefopt\undefined \gdef\putwordDefopt{User Option}\fi +\ifx\putwordDeffunc\undefined \gdef\putwordDeffunc{Function}\fi + +% In some macros, we cannot use the `\? notation---the left quote is +% in some cases the escape char. +\chardef\backChar = `\\ +\chardef\colonChar = `\: +\chardef\commaChar = `\, +\chardef\dotChar = `\. +\chardef\exclamChar= `\! +\chardef\plusChar = `\+ +\chardef\questChar = `\? +\chardef\semiChar = `\; +\chardef\underChar = `\_ + +\chardef\spaceChar = `\ % +\chardef\spacecat = 10 +\def\spaceisspace{\catcode\spaceChar=\spacecat} + +{% for help with debugging. + % example usage: \expandafter\show\activebackslash + \catcode`\! = 0 \catcode`\\ = \active + !global!def!activebackslash{\} +} + +% Ignore a token. +% +\def\gobble#1{} + +% The following is used inside several \edef's. +\def\makecsname#1{\expandafter\noexpand\csname#1\endcsname} + +% Hyphenation fixes. +\hyphenation{ + Flor-i-da Ghost-script Ghost-view Mac-OS Post-Script + ap-pen-dix bit-map bit-maps + data-base data-bases eshell fall-ing half-way long-est man-u-script + man-u-scripts mini-buf-fer mini-buf-fers over-view par-a-digm + par-a-digms rath-er rec-tan-gu-lar ro-bot-ics se-vere-ly set-up spa-ces + spell-ing spell-ings + stand-alone strong-est time-stamp time-stamps which-ever white-space + wide-spread wrap-around +} + +% Margin to add to right of even pages, to left of odd pages. +\newdimen\bindingoffset +\newdimen\normaloffset +\newdimen\pagewidth \newdimen\pageheight + +% For a final copy, take out the rectangles +% that mark overfull boxes (in case you have decided +% that the text looks ok even though it passes the margin). +% +\def\finalout{\overfullrule=0pt} + +% @| inserts a changebar to the left of the current line. It should +% surround any changed text. This approach does *not* work if the +% change spans more than two lines of output. To handle that, we would +% have adopt a much more difficult approach (putting marks into the main +% vertical list for the beginning and end of each change). +% +\def\|{% + % \vadjust can only be used in horizontal mode. + \leavevmode + % + % Append this vertical mode material after the current line in the output. + \vadjust{% + % We want to insert a rule with the height and depth of the current + % leading; that is exactly what \strutbox is supposed to record. + \vskip-\baselineskip + % + % \vadjust-items are inserted at the left edge of the type. So + % the \llap here moves out into the left-hand margin. + \llap{% + % + % For a thicker or thinner bar, change the `1pt'. + \vrule height\baselineskip width1pt + % + % This is the space between the bar and the text. + \hskip 12pt + }% + }% +} + +% Sometimes it is convenient to have everything in the transcript file +% and nothing on the terminal. We don't just call \tracingall here, +% since that produces some useless output on the terminal. We also make +% some effort to order the tracing commands to reduce output in the log +% file; cf. trace.sty in LaTeX. +% +\def\gloggingall{\begingroup \globaldefs = 1 \loggingall \endgroup}% +\def\loggingall{% + \tracingstats2 + \tracingpages1 + \tracinglostchars2 % 2 gives us more in etex + \tracingparagraphs1 + \tracingoutput1 + \tracingmacros2 + \tracingrestores1 + \showboxbreadth\maxdimen \showboxdepth\maxdimen + \ifx\eTeXversion\undefined\else % etex gives us more logging + \tracingscantokens1 + \tracingifs1 + \tracinggroups1 + \tracingnesting2 + \tracingassigns1 + \fi + \tracingcommands3 % 3 gives us more in etex + \errorcontextlines16 +}% + +% add check for \lastpenalty to plain's definitions. If the last thing +% we did was a \nobreak, we don't want to insert more space. +% +\def\smallbreak{\ifnum\lastpenalty<10000\par\ifdim\lastskip<\smallskipamount + \removelastskip\penalty-50\smallskip\fi\fi} +\def\medbreak{\ifnum\lastpenalty<10000\par\ifdim\lastskip<\medskipamount + \removelastskip\penalty-100\medskip\fi\fi} +\def\bigbreak{\ifnum\lastpenalty<10000\par\ifdim\lastskip<\bigskipamount + \removelastskip\penalty-200\bigskip\fi\fi} + +% For @cropmarks command. +% Do @cropmarks to get crop marks. +% +\newif\ifcropmarks +\let\cropmarks = \cropmarkstrue +% +% Dimensions to add cropmarks at corners. +% Added by P. A. MacKay, 12 Nov. 1986 +% +\newdimen\outerhsize \newdimen\outervsize % set by the paper size routines +\newdimen\cornerlong \cornerlong=1pc +\newdimen\cornerthick \cornerthick=.3pt +\newdimen\topandbottommargin \topandbottommargin=.75in + +% Main output routine. +\chardef\PAGE = 255 +\output = {\onepageout{\pagecontents\PAGE}} + +\newbox\headlinebox +\newbox\footlinebox + +% \onepageout takes a vbox as an argument. Note that \pagecontents +% does insertions, but you have to call it yourself. +\def\onepageout#1{% + \ifcropmarks \hoffset=0pt \else \hoffset=\normaloffset \fi + % + \ifodd\pageno \advance\hoffset by \bindingoffset + \else \advance\hoffset by -\bindingoffset\fi + % + % Do this outside of the \shipout so @code etc. will be expanded in + % the headline as they should be, not taken literally (outputting ''code). + \setbox\headlinebox = \vbox{\let\hsize=\pagewidth \makeheadline}% + \setbox\footlinebox = \vbox{\let\hsize=\pagewidth \makefootline}% + % + {% + % Have to do this stuff outside the \shipout because we want it to + % take effect in \write's, yet the group defined by the \vbox ends + % before the \shipout runs. + % + \indexdummies % don't expand commands in the output. + \shipout\vbox{% + % Do this early so pdf references go to the beginning of the page. + \ifpdfmakepagedest \pdfdest name{\the\pageno} xyz\fi + % + \ifcropmarks \vbox to \outervsize\bgroup + \hsize = \outerhsize + \vskip-\topandbottommargin + \vtop to0pt{% + \line{\ewtop\hfil\ewtop}% + \nointerlineskip + \line{% + \vbox{\moveleft\cornerthick\nstop}% + \hfill + \vbox{\moveright\cornerthick\nstop}% + }% + \vss}% + \vskip\topandbottommargin + \line\bgroup + \hfil % center the page within the outer (page) hsize. + \ifodd\pageno\hskip\bindingoffset\fi + \vbox\bgroup + \fi + % + \unvbox\headlinebox + \pagebody{#1}% + \ifdim\ht\footlinebox > 0pt + % Only leave this space if the footline is nonempty. + % (We lessened \vsize for it in \oddfootingxxx.) + % The \baselineskip=24pt in plain's \makefootline has no effect. + \vskip 2\baselineskip + \unvbox\footlinebox + \fi + % + \ifcropmarks + \egroup % end of \vbox\bgroup + \hfil\egroup % end of (centering) \line\bgroup + \vskip\topandbottommargin plus1fill minus1fill + \boxmaxdepth = \cornerthick + \vbox to0pt{\vss + \line{% + \vbox{\moveleft\cornerthick\nsbot}% + \hfill + \vbox{\moveright\cornerthick\nsbot}% + }% + \nointerlineskip + \line{\ewbot\hfil\ewbot}% + }% + \egroup % \vbox from first cropmarks clause + \fi + }% end of \shipout\vbox + }% end of group with \indexdummies + \advancepageno + \ifnum\outputpenalty>-20000 \else\dosupereject\fi +} + +\newinsert\margin \dimen\margin=\maxdimen + +\def\pagebody#1{\vbox to\pageheight{\boxmaxdepth=\maxdepth #1}} +{\catcode`\@ =11 +\gdef\pagecontents#1{\ifvoid\topins\else\unvbox\topins\fi +% marginal hacks, juha at viisa.uucp (Juha Takala) +\ifvoid\margin\else % marginal info is present + \rlap{\kern\hsize\vbox to\z@{\kern1pt\box\margin \vss}}\fi +\dimen@=\dp#1 \unvbox#1 +\ifvoid\footins\else\vskip\skip\footins\footnoterule \unvbox\footins\fi +\ifr at ggedbottom \kern-\dimen@ \vfil \fi} +} + +% Here are the rules for the cropmarks. Note that they are +% offset so that the space between them is truly \outerhsize or \outervsize +% (P. A. MacKay, 12 November, 1986) +% +\def\ewtop{\vrule height\cornerthick depth0pt width\cornerlong} +\def\nstop{\vbox + {\hrule height\cornerthick depth\cornerlong width\cornerthick}} +\def\ewbot{\vrule height0pt depth\cornerthick width\cornerlong} +\def\nsbot{\vbox + {\hrule height\cornerlong depth\cornerthick width\cornerthick}} + +% Parse an argument, then pass it to #1. The argument is the rest of +% the input line (except we remove a trailing comment). #1 should be a +% macro which expects an ordinary undelimited TeX argument. +% +\def\parsearg{\parseargusing{}} +\def\parseargusing#1#2{% + \def\next{#2}% + \begingroup + \obeylines + \spaceisspace + #1% + \parseargline\empty% Insert the \empty token, see \finishparsearg below. +} + +{\obeylines % + \gdef\parseargline#1^^M{% + \endgroup % End of the group started in \parsearg. + \argremovecomment #1\comment\ArgTerm% + }% +} + +% First remove any @comment, then any @c comment. +\def\argremovecomment#1\comment#2\ArgTerm{\argremovec #1\c\ArgTerm} +\def\argremovec#1\c#2\ArgTerm{\argcheckspaces#1\^^M\ArgTerm} + +% Each occurence of `\^^M' or `\^^M' is replaced by a single space. +% +% \argremovec might leave us with trailing space, e.g., +% @end itemize @c foo +% This space token undergoes the same procedure and is eventually removed +% by \finishparsearg. +% +\def\argcheckspaces#1\^^M{\argcheckspacesX#1\^^M \^^M} +\def\argcheckspacesX#1 \^^M{\argcheckspacesY#1\^^M} +\def\argcheckspacesY#1\^^M#2\^^M#3\ArgTerm{% + \def\temp{#3}% + \ifx\temp\empty + % We cannot use \next here, as it holds the macro to run; + % thus we reuse \temp. + \let\temp\finishparsearg + \else + \let\temp\argcheckspaces + \fi + % Put the space token in: + \temp#1 #3\ArgTerm +} + +% If a _delimited_ argument is enclosed in braces, they get stripped; so +% to get _exactly_ the rest of the line, we had to prevent such situation. +% We prepended an \empty token at the very beginning and we expand it now, +% just before passing the control to \next. +% (Similarily, we have to think about #3 of \argcheckspacesY above: it is +% either the null string, or it ends with \^^M---thus there is no danger +% that a pair of braces would be stripped. +% +% But first, we have to remove the trailing space token. +% +\def\finishparsearg#1 \ArgTerm{\expandafter\next\expandafter{#1}} + +% \parseargdef\foo{...} +% is roughly equivalent to +% \def\foo{\parsearg\Xfoo} +% \def\Xfoo#1{...} +% +% Actually, I use \csname\string\foo\endcsname, ie. \\foo, as it is my +% favourite TeX trick. --kasal, 16nov03 + +\def\parseargdef#1{% + \expandafter \doparseargdef \csname\string#1\endcsname #1% +} +\def\doparseargdef#1#2{% + \def#2{\parsearg#1}% + \def#1##1% +} + +% Several utility definitions with active space: +{ + \obeyspaces + \gdef\obeyedspace{ } + + % Make each space character in the input produce a normal interword + % space in the output. Don't allow a line break at this space, as this + % is used only in environments like @example, where each line of input + % should produce a line of output anyway. + % + \gdef\sepspaces{\obeyspaces\let =\tie} + + % If an index command is used in an @example environment, any spaces + % therein should become regular spaces in the raw index file, not the + % expansion of \tie (\leavevmode \penalty \@M \ ). + \gdef\unsepspaces{\let =\space} +} + + +\def\flushcr{\ifx\par\lisppar \def\next##1{}\else \let\next=\relax \fi \next} + +% Define the framework for environments in texinfo.tex. It's used like this: +% +% \envdef\foo{...} +% \def\Efoo{...} +% +% It's the responsibility of \envdef to insert \begingroup before the +% actual body; @end closes the group after calling \Efoo. \envdef also +% defines \thisenv, so the current environment is known; @end checks +% whether the environment name matches. The \checkenv macro can also be +% used to check whether the current environment is the one expected. +% +% Non-false conditionals (@iftex, @ifset) don't fit into this, so they +% are not treated as enviroments; they don't open a group. (The +% implementation of @end takes care not to call \endgroup in this +% special case.) + + +% At runtime, environments start with this: +\def\startenvironment#1{\begingroup\def\thisenv{#1}} +% initialize +\let\thisenv\empty + +% ... but they get defined via ``\envdef\foo{...}'': +\long\def\envdef#1#2{\def#1{\startenvironment#1#2}} +\def\envparseargdef#1#2{\parseargdef#1{\startenvironment#1#2}} + +% Check whether we're in the right environment: +\def\checkenv#1{% + \def\temp{#1}% + \ifx\thisenv\temp + \else + \badenverr + \fi +} + +% Evironment mismatch, #1 expected: +\def\badenverr{% + \errhelp = \EMsimple + \errmessage{This command can appear only \inenvironment\temp, + not \inenvironment\thisenv}% +} +\def\inenvironment#1{% + \ifx#1\empty + out of any environment% + \else + in environment \expandafter\string#1% + \fi +} + +% @end foo executes the definition of \Efoo. +% But first, it executes a specialized version of \checkenv +% +\parseargdef\end{% + \if 1\csname iscond.#1\endcsname + \else + % The general wording of \badenverr may not be ideal, but... --kasal, 06nov03 + \expandafter\checkenv\csname#1\endcsname + \csname E#1\endcsname + \endgroup + \fi +} + +\newhelp\EMsimple{Press RETURN to continue.} + + +%% Simple single-character @ commands + +% @@ prints an @ +% Kludge this until the fonts are right (grr). +\def\@{{\tt\char64}} + +% This is turned off because it was never documented +% and you can use @w{...} around a quote to suppress ligatures. +%% Define @` and @' to be the same as ` and ' +%% but suppressing ligatures. +%\def\`{{`}} +%\def\'{{'}} + +% Used to generate quoted braces. +\def\mylbrace {{\tt\char123}} +\def\myrbrace {{\tt\char125}} +\let\{=\mylbrace +\let\}=\myrbrace +\begingroup + % Definitions to produce \{ and \} commands for indices, + % and @{ and @} for the aux/toc files. + \catcode`\{ = \other \catcode`\} = \other + \catcode`\[ = 1 \catcode`\] = 2 + \catcode`\! = 0 \catcode`\\ = \other + !gdef!lbracecmd[\{]% + !gdef!rbracecmd[\}]% + !gdef!lbraceatcmd[@{]% + !gdef!rbraceatcmd[@}]% +!endgroup + +% @comma{} to avoid , parsing problems. +\let\comma = , + +% Accents: @, @dotaccent @ringaccent @ubaraccent @udotaccent +% Others are defined by plain TeX: @` @' @" @^ @~ @= @u @v @H. +\let\, = \c +\let\dotaccent = \. +\def\ringaccent#1{{\accent23 #1}} +\let\tieaccent = \t +\let\ubaraccent = \b +\let\udotaccent = \d + +% Other special characters: @questiondown @exclamdown @ordf @ordm +% Plain TeX defines: @AA @AE @O @OE @L (plus lowercase versions) @ss. +\def\questiondown{?`} +\def\exclamdown{!`} +\def\ordf{\leavevmode\raise1ex\hbox{\selectfonts\lllsize \underbar{a}}} +\def\ordm{\leavevmode\raise1ex\hbox{\selectfonts\lllsize \underbar{o}}} + +% Dotless i and dotless j, used for accents. +\def\imacro{i} +\def\jmacro{j} +\def\dotless#1{% + \def\temp{#1}% + \ifx\temp\imacro \ptexi + \else\ifx\temp\jmacro \j + \else \errmessage{@dotless can be used only with i or j}% + \fi\fi +} + +% The \TeX{} logo, as in plain, but resetting the spacing so that a +% period following counts as ending a sentence. (Idea found in latex.) +% +\edef\TeX{\TeX \spacefactor=1000 } + +% @LaTeX{} logo. Not quite the same results as the definition in +% latex.ltx, since we use a different font for the raised A; it's most +% convenient for us to use an explicitly smaller font, rather than using +% the \scriptstyle font (since we don't reset \scriptstyle and +% \scriptscriptstyle). +% +\def\LaTeX{% + L\kern-.36em + {\setbox0=\hbox{T}% + \vbox to \ht0{\hbox{\selectfonts\lllsize A}\vss}}% + \kern-.15em + \TeX +} + +% Be sure we're in horizontal mode when doing a tie, since we make space +% equivalent to this in @example-like environments. Otherwise, a space +% at the beginning of a line will start with \penalty -- and +% since \penalty is valid in vertical mode, we'd end up putting the +% penalty on the vertical list instead of in the new paragraph. +{\catcode`@ = 11 + % Avoid using \@M directly, because that causes trouble + % if the definition is written into an index file. + \global\let\tiepenalty = \@M + \gdef\tie{\leavevmode\penalty\tiepenalty\ } +} + +% @: forces normal size whitespace following. +\def\:{\spacefactor=1000 } + +% @* forces a line break. +\def\*{\hfil\break\hbox{}\ignorespaces} + +% @/ allows a line break. +\let\/=\allowbreak + +% @. is an end-of-sentence period. +\def\.{.\spacefactor=\endofsentencespacefactor\space} + +% @! is an end-of-sentence bang. +\def\!{!\spacefactor=\endofsentencespacefactor\space} + +% @? is an end-of-sentence query. +\def\?{?\spacefactor=\endofsentencespacefactor\space} + +% @frenchspacing on|off says whether to put extra space after punctuation. +% +\def\onword{on} +\def\offword{off} +% +\parseargdef\frenchspacing{% + \def\temp{#1}% + \ifx\temp\onword \plainfrenchspacing + \else\ifx\temp\offword \plainnonfrenchspacing + \else + \errhelp = \EMsimple + \errmessage{Unknown @frenchspacing option `\temp', must be on/off}% + \fi\fi +} + +% @w prevents a word break. Without the \leavevmode, @w at the +% beginning of a paragraph, when TeX is still in vertical mode, would +% produce a whole line of output instead of starting the paragraph. +\def\w#1{\leavevmode\hbox{#1}} + +% @group ... @end group forces ... to be all on one page, by enclosing +% it in a TeX vbox. We use \vtop instead of \vbox to construct the box +% to keep its height that of a normal line. According to the rules for +% \topskip (p.114 of the TeXbook), the glue inserted is +% max (\topskip - \ht (first item), 0). If that height is large, +% therefore, no glue is inserted, and the space between the headline and +% the text is small, which looks bad. +% +% Another complication is that the group might be very large. This can +% cause the glue on the previous page to be unduly stretched, because it +% does not have much material. In this case, it's better to add an +% explicit \vfill so that the extra space is at the bottom. The +% threshold for doing this is if the group is more than \vfilllimit +% percent of a page (\vfilllimit can be changed inside of @tex). +% +\newbox\groupbox +\def\vfilllimit{0.7} +% +\envdef\group{% + \ifnum\catcode`\^^M=\active \else + \errhelp = \groupinvalidhelp + \errmessage{@group invalid in context where filling is enabled}% + \fi + \startsavinginserts + % + \setbox\groupbox = \vtop\bgroup + % Do @comment since we are called inside an environment such as + % @example, where each end-of-line in the input causes an + % end-of-line in the output. We don't want the end-of-line after + % the `@group' to put extra space in the output. Since @group + % should appear on a line by itself (according to the Texinfo + % manual), we don't worry about eating any user text. + \comment +} +% +% The \vtop produces a box with normal height and large depth; thus, TeX puts +% \baselineskip glue before it, and (when the next line of text is done) +% \lineskip glue after it. Thus, space below is not quite equal to space +% above. But it's pretty close. +\def\Egroup{% + % To get correct interline space between the last line of the group + % and the first line afterwards, we have to propagate \prevdepth. + \endgraf % Not \par, as it may have been set to \lisppar. + \global\dimen1 = \prevdepth + \egroup % End the \vtop. + % \dimen0 is the vertical size of the group's box. + \dimen0 = \ht\groupbox \advance\dimen0 by \dp\groupbox + % \dimen2 is how much space is left on the page (more or less). + \dimen2 = \pageheight \advance\dimen2 by -\pagetotal + % if the group doesn't fit on the current page, and it's a big big + % group, force a page break. + \ifdim \dimen0 > \dimen2 + \ifdim \pagetotal < \vfilllimit\pageheight + \page + \fi + \fi + \box\groupbox + \prevdepth = \dimen1 + \checkinserts +} +% +% TeX puts in an \escapechar (i.e., `@') at the beginning of the help +% message, so this ends up printing `@group can only ...'. +% +\newhelp\groupinvalidhelp{% +group can only be used in environments such as @example,^^J% +where each line of input produces a line of output.} + +% @need space-in-mils +% forces a page break if there is not space-in-mils remaining. + +\newdimen\mil \mil=0.001in + +% Old definition--didn't work. +%\parseargdef\need{\par % +%% This method tries to make TeX break the page naturally +%% if the depth of the box does not fit. +%{\baselineskip=0pt% +%\vtop to #1\mil{\vfil}\kern -#1\mil\nobreak +%\prevdepth=-1000pt +%}} + +\parseargdef\need{% + % Ensure vertical mode, so we don't make a big box in the middle of a + % paragraph. + \par + % + % If the @need value is less than one line space, it's useless. + \dimen0 = #1\mil + \dimen2 = \ht\strutbox + \advance\dimen2 by \dp\strutbox + \ifdim\dimen0 > \dimen2 + % + % Do a \strut just to make the height of this box be normal, so the + % normal leading is inserted relative to the preceding line. + % And a page break here is fine. + \vtop to #1\mil{\strut\vfil}% + % + % TeX does not even consider page breaks if a penalty added to the + % main vertical list is 10000 or more. But in order to see if the + % empty box we just added fits on the page, we must make it consider + % page breaks. On the other hand, we don't want to actually break the + % page after the empty box. So we use a penalty of 9999. + % + % There is an extremely small chance that TeX will actually break the + % page at this \penalty, if there are no other feasible breakpoints in + % sight. (If the user is using lots of big @group commands, which + % almost-but-not-quite fill up a page, TeX will have a hard time doing + % good page breaking, for example.) However, I could not construct an + % example where a page broke at this \penalty; if it happens in a real + % document, then we can reconsider our strategy. + \penalty9999 + % + % Back up by the size of the box, whether we did a page break or not. + \kern -#1\mil + % + % Do not allow a page break right after this kern. + \nobreak + \fi +} + +% @br forces paragraph break (and is undocumented). + +\let\br = \par + +% @page forces the start of a new page. +% +\def\page{\par\vfill\supereject} + +% @exdent text.... +% outputs text on separate line in roman font, starting at standard page margin + +% This records the amount of indent in the innermost environment. +% That's how much \exdent should take out. +\newskip\exdentamount + +% This defn is used inside fill environments such as @defun. +\parseargdef\exdent{\hfil\break\hbox{\kern -\exdentamount{\rm#1}}\hfil\break} + +% This defn is used inside nofill environments such as @example. +\parseargdef\nofillexdent{{\advance \leftskip by -\exdentamount + \leftline{\hskip\leftskip{\rm#1}}}} + +% @inmargin{WHICH}{TEXT} puts TEXT in the WHICH margin next to the current +% paragraph. For more general purposes, use the \margin insertion +% class. WHICH is `l' or `r'. +% +\newskip\inmarginspacing \inmarginspacing=1cm +\def\strutdepth{\dp\strutbox} +% +\def\doinmargin#1#2{\strut\vadjust{% + \nobreak + \kern-\strutdepth + \vtop to \strutdepth{% + \baselineskip=\strutdepth + \vss + % if you have multiple lines of stuff to put here, you'll need to + % make the vbox yourself of the appropriate size. + \ifx#1l% + \llap{\ignorespaces #2\hskip\inmarginspacing}% + \else + \rlap{\hskip\hsize \hskip\inmarginspacing \ignorespaces #2}% + \fi + \null + }% +}} +\def\inleftmargin{\doinmargin l} +\def\inrightmargin{\doinmargin r} +% +% @inmargin{TEXT [, RIGHT-TEXT]} +% (if RIGHT-TEXT is given, use TEXT for left page, RIGHT-TEXT for right; +% else use TEXT for both). +% +\def\inmargin#1{\parseinmargin #1,,\finish} +\def\parseinmargin#1,#2,#3\finish{% not perfect, but better than nothing. + \setbox0 = \hbox{\ignorespaces #2}% + \ifdim\wd0 > 0pt + \def\lefttext{#1}% have both texts + \def\righttext{#2}% + \else + \def\lefttext{#1}% have only one text + \def\righttext{#1}% + \fi + % + \ifodd\pageno + \def\temp{\inrightmargin\righttext}% odd page -> outside is right margin + \else + \def\temp{\inleftmargin\lefttext}% + \fi + \temp +} + +% @include file insert text of that file as input. +% +\def\include{\parseargusing\filenamecatcodes\includezzz} +\def\includezzz#1{% + \pushthisfilestack + \def\thisfile{#1}% + {% + \makevalueexpandable + \def\temp{\input #1 }% + \expandafter + }\temp + \popthisfilestack +} +\def\filenamecatcodes{% + \catcode`\\=\other + \catcode`~=\other + \catcode`^=\other + \catcode`_=\other + \catcode`|=\other + \catcode`<=\other + \catcode`>=\other + \catcode`+=\other + \catcode`-=\other +} + +\def\pushthisfilestack{% + \expandafter\pushthisfilestackX\popthisfilestack\StackTerm +} +\def\pushthisfilestackX{% + \expandafter\pushthisfilestackY\thisfile\StackTerm +} +\def\pushthisfilestackY #1\StackTerm #2\StackTerm {% + \gdef\popthisfilestack{\gdef\thisfile{#1}\gdef\popthisfilestack{#2}}% +} + +\def\popthisfilestack{\errthisfilestackempty} +\def\errthisfilestackempty{\errmessage{Internal error: + the stack of filenames is empty.}} + +\def\thisfile{} + +% @center line +% outputs that line, centered. +% +\parseargdef\center{% + \ifhmode + \let\next\centerH + \else + \let\next\centerV + \fi + \next{\hfil \ignorespaces#1\unskip \hfil}% +} +\def\centerH#1{% + {% + \hfil\break + \advance\hsize by -\leftskip + \advance\hsize by -\rightskip + \line{#1}% + \break + }% +} +\def\centerV#1{\line{\kern\leftskip #1\kern\rightskip}} + +% @sp n outputs n lines of vertical space + +\parseargdef\sp{\vskip #1\baselineskip} + +% @comment ...line which is ignored... +% @c is the same as @comment +% @ignore ... @end ignore is another way to write a comment + +\def\comment{\begingroup \catcode`\^^M=\other% +\catcode`\@=\other \catcode`\{=\other \catcode`\}=\other% +\commentxxx} +{\catcode`\^^M=\other \gdef\commentxxx#1^^M{\endgroup}} + +\let\c=\comment + +% @paragraphindent NCHARS +% We'll use ems for NCHARS, close enough. +% NCHARS can also be the word `asis' or `none'. +% We cannot feasibly implement @paragraphindent asis, though. +% +\def\asisword{asis} % no translation, these are keywords +\def\noneword{none} +% +\parseargdef\paragraphindent{% + \def\temp{#1}% + \ifx\temp\asisword + \else + \ifx\temp\noneword + \defaultparindent = 0pt + \else + \defaultparindent = #1em + \fi + \fi + \parindent = \defaultparindent +} + +% @exampleindent NCHARS +% We'll use ems for NCHARS like @paragraphindent. +% It seems @exampleindent asis isn't necessary, but +% I preserve it to make it similar to @paragraphindent. +\parseargdef\exampleindent{% + \def\temp{#1}% + \ifx\temp\asisword + \else + \ifx\temp\noneword + \lispnarrowing = 0pt + \else + \lispnarrowing = #1em + \fi + \fi +} + +% @firstparagraphindent WORD +% If WORD is `none', then suppress indentation of the first paragraph +% after a section heading. If WORD is `insert', then do indent at such +% paragraphs. +% +% The paragraph indentation is suppressed or not by calling +% \suppressfirstparagraphindent, which the sectioning commands do. +% We switch the definition of this back and forth according to WORD. +% By default, we suppress indentation. +% +\def\suppressfirstparagraphindent{\dosuppressfirstparagraphindent} +\def\insertword{insert} +% +\parseargdef\firstparagraphindent{% + \def\temp{#1}% + \ifx\temp\noneword + \let\suppressfirstparagraphindent = \dosuppressfirstparagraphindent + \else\ifx\temp\insertword + \let\suppressfirstparagraphindent = \relax + \else + \errhelp = \EMsimple + \errmessage{Unknown @firstparagraphindent option `\temp'}% + \fi\fi +} + +% Here is how we actually suppress indentation. Redefine \everypar to +% \kern backwards by \parindent, and then reset itself to empty. +% +% We also make \indent itself not actually do anything until the next +% paragraph. +% +\gdef\dosuppressfirstparagraphindent{% + \gdef\indent{% + \restorefirstparagraphindent + \indent + }% + \gdef\noindent{% + \restorefirstparagraphindent + \noindent + }% + \global\everypar = {% + \kern -\parindent + \restorefirstparagraphindent + }% +} + +\gdef\restorefirstparagraphindent{% + \global \let \indent = \ptexindent + \global \let \noindent = \ptexnoindent + \global \everypar = {}% +} + + +% @asis just yields its argument. Used with @table, for example. +% +\def\asis#1{#1} + +% @math outputs its argument in math mode. +% +% One complication: _ usually means subscripts, but it could also mean +% an actual _ character, as in @math{@var{some_variable} + 1}. So make +% _ active, and distinguish by seeing if the current family is \slfam, +% which is what @var uses. +{ + \catcode\underChar = \active + \gdef\mathunderscore{% + \catcode\underChar=\active + \def_{\ifnum\fam=\slfam \_\else\sb\fi}% + } +} +% Another complication: we want \\ (and @\) to output a \ character. +% FYI, plain.tex uses \\ as a temporary control sequence (why?), but +% this is not advertised and we don't care. Texinfo does not +% otherwise define @\. +% +% The \mathchar is class=0=ordinary, family=7=ttfam, position=5C=\. +\def\mathbackslash{\ifnum\fam=\ttfam \mathchar"075C \else\backslash \fi} +% +\def\math{% + \tex + \mathunderscore + \let\\ = \mathbackslash + \mathactive + $\finishmath +} +\def\finishmath#1{#1$\endgroup} % Close the group opened by \tex. + +% Some active characters (such as <) are spaced differently in math. +% We have to reset their definitions in case the @math was an argument +% to a command which sets the catcodes (such as @item or @section). +% +{ + \catcode`^ = \active + \catcode`< = \active + \catcode`> = \active + \catcode`+ = \active + \gdef\mathactive{% + \let^ = \ptexhat + \let< = \ptexless + \let> = \ptexgtr + \let+ = \ptexplus + } +} + +% @bullet and @minus need the same treatment as @math, just above. +\def\bullet{$\ptexbullet$} +\def\minus{$-$} + +% @dots{} outputs an ellipsis using the current font. +% We do .5em per period so that it has the same spacing in a typewriter +% font as three actual period characters. +% +\def\dots{% + \leavevmode + \hbox to 1.5em{% + \hskip 0pt plus 0.25fil + .\hfil.\hfil.% + \hskip 0pt plus 0.5fil + }% +} + +% @enddots{} is an end-of-sentence ellipsis. +% +\def\enddots{% + \dots + \spacefactor=\endofsentencespacefactor +} + +% @comma{} is so commas can be inserted into text without messing up +% Texinfo's parsing. +% +\let\comma = , + +% @refill is a no-op. +\let\refill=\relax + +% If working on a large document in chapters, it is convenient to +% be able to disable indexing, cross-referencing, and contents, for test runs. +% This is done with @novalidate (before @setfilename). +% +\newif\iflinks \linkstrue % by default we want the aux files. +\let\novalidate = \linksfalse + +% @setfilename is done at the beginning of every texinfo file. +% So open here the files we need to have open while reading the input. +% This makes it possible to make a .fmt file for texinfo. +\def\setfilename{% + \fixbackslash % Turn off hack to swallow `\input texinfo'. + \iflinks + \tryauxfile + % Open the new aux file. TeX will close it automatically at exit. + \immediate\openout\auxfile=\jobname.aux + \fi % \openindices needs to do some work in any case. + \openindices + \let\setfilename=\comment % Ignore extra @setfilename cmds. + % + % If texinfo.cnf is present on the system, read it. + % Useful for site-wide @afourpaper, etc. + \openin 1 texinfo.cnf + \ifeof 1 \else \input texinfo.cnf \fi + \closein 1 + % + \comment % Ignore the actual filename. +} + +% Called from \setfilename. +% +\def\openindices{% + \newindex{cp}% + \newcodeindex{fn}% + \newcodeindex{vr}% + \newcodeindex{tp}% + \newcodeindex{ky}% + \newcodeindex{pg}% +} + +% @bye. +\outer\def\bye{\pagealignmacro\tracingstats=1\ptexend} + + +\message{pdf,} +% adobe `portable' document format +\newcount\tempnum +\newcount\lnkcount +\newtoks\filename +\newcount\filenamelength +\newcount\pgn +\newtoks\toksA +\newtoks\toksB +\newtoks\toksC +\newtoks\toksD +\newbox\boxA +\newcount\countA +\newif\ifpdf +\newif\ifpdfmakepagedest + +% when pdftex is run in dvi mode, \pdfoutput is defined (so \pdfoutput=1 +% can be set). So we test for \relax and 0 as well as \undefined, +% borrowed from ifpdf.sty. +\ifx\pdfoutput\undefined +\else + \ifx\pdfoutput\relax + \else + \ifcase\pdfoutput + \else + \pdftrue + \fi + \fi +\fi + +% PDF uses PostScript string constants for the names of xref targets, to +% for display in the outlines, and in other places. Thus, we have to +% double any backslashes. Otherwise, a name like "\node" will be +% interpreted as a newline (\n), followed by o, d, e. Not good. +% http://www.ntg.nl/pipermail/ntg-pdftex/2004-July/000654.html +% (and related messages, the final outcome is that it is up to the TeX +% user to double the backslashes and otherwise make the string valid, so +% that's we do). + +% double active backslashes. +% +{\catcode`\@=0 \catcode`\\=\active + @gdef at activebackslash{@catcode`@\=@active @otherbackslash} + @gdef at activebackslashdouble{% + @catcode at backChar=@active + @let\=@doublebackslash} +} + +% To handle parens, we must adopt a different approach, since parens are +% not active characters. hyperref.dtx (which has the same problem as +% us) handles it with this amazing macro to replace tokens. I've +% tinkered with it a little for texinfo, but it's definitely from there. +% +% #1 is the tokens to replace. +% #2 is the replacement. +% #3 is the control sequence with the string. +% +\def\HyPsdSubst#1#2#3{% + \def\HyPsdReplace##1#1##2\END{% + ##1% + \ifx\\##2\\% + \else + #2% + \HyReturnAfterFi{% + \HyPsdReplace##2\END + }% + \fi + }% + \xdef#3{\expandafter\HyPsdReplace#3#1\END}% +} +\long\def\HyReturnAfterFi#1\fi{\fi#1} + +% #1 is a control sequence in which to do the replacements. +\def\backslashparens#1{% + \xdef#1{#1}% redefine it as its expansion; the definition is simply + % \lastnode when called from \setref -> \pdfmkdest. + \HyPsdSubst{(}{\backslashlparen}{#1}% + \HyPsdSubst{)}{\backslashrparen}{#1}% +} + +{\catcode\exclamChar = 0 \catcode\backChar = \other + !gdef!backslashlparen{\(}% + !gdef!backslashrparen{\)}% +} + +\ifpdf + \input pdfcolor + \pdfcatalog{/PageMode /UseOutlines}% + \def\dopdfimage#1#2#3{% + \def\imagewidth{#2}% + \def\imageheight{#3}% + % without \immediate, pdftex seg faults when the same image is + % included twice. (Version 3.14159-pre-1.0-unofficial-20010704.) + \ifnum\pdftexversion < 14 + \immediate\pdfimage + \else + \immediate\pdfximage + \fi + \ifx\empty\imagewidth\else width \imagewidth \fi + \ifx\empty\imageheight\else height \imageheight \fi + \ifnum\pdftexversion<13 + #1.pdf% + \else + {#1.pdf}% + \fi + \ifnum\pdftexversion < 14 \else + \pdfrefximage \pdflastximage + \fi} + \def\pdfmkdest#1{{% + % We have to set dummies so commands such as @code, and characters + % such as \, aren't expanded when present in a section title. + \atdummies + \activebackslashdouble + \def\pdfdestname{#1}% + \backslashparens\pdfdestname + \pdfdest name{\pdfdestname} xyz% + }}% + % + % used to mark target names; must be expandable. + \def\pdfmkpgn#1{#1}% + % + \let\linkcolor = \Blue % was Cyan, but that seems light? + \def\endlink{\Black\pdfendlink} + % Adding outlines to PDF; macros for calculating structure of outlines + % come from Petr Olsak + \def\expnumber#1{\expandafter\ifx\csname#1\endcsname\relax 0% + \else \csname#1\endcsname \fi} + \def\advancenumber#1{\tempnum=\expnumber{#1}\relax + \advance\tempnum by 1 + \expandafter\xdef\csname#1\endcsname{\the\tempnum}} + % + % #1 is the section text, which is what will be displayed in the + % outline by the pdf viewer. #2 is the pdf expression for the number + % of subentries (or empty, for subsubsections). #3 is the node text, + % which might be empty if this toc entry had no corresponding node. + % #4 is the page number + % + \def\dopdfoutline#1#2#3#4{% + % Generate a link to the node text if that exists; else, use the + % page number. We could generate a destination for the section + % text in the case where a section has no node, but it doesn't + % seem worth the trouble, since most documents are normally structured. + \def\pdfoutlinedest{#3}% + \ifx\pdfoutlinedest\empty + \def\pdfoutlinedest{#4}% + \else + % Doubled backslashes in the name. + {\activebackslashdouble \xdef\pdfoutlinedest{#3}% + \backslashparens\pdfoutlinedest}% + \fi + % + % Also double the backslashes in the display string. + {\activebackslashdouble \xdef\pdfoutlinetext{#1}% + \backslashparens\pdfoutlinetext}% + % + \pdfoutline goto name{\pdfmkpgn{\pdfoutlinedest}}#2{\pdfoutlinetext}% + } + % + \def\pdfmakeoutlines{% + \begingroup + % Thanh's hack / proper braces in bookmarks + \edef\mylbrace{\iftrue \string{\else}\fi}\let\{=\mylbrace + \edef\myrbrace{\iffalse{\else\string}\fi}\let\}=\myrbrace + % + % Read toc silently, to get counts of subentries for \pdfoutline. + \def\numchapentry##1##2##3##4{% + \def\thischapnum{##2}% + \def\thissecnum{0}% + \def\thissubsecnum{0}% + }% + \def\numsecentry##1##2##3##4{% + \advancenumber{chap\thischapnum}% + \def\thissecnum{##2}% + \def\thissubsecnum{0}% + }% + \def\numsubsecentry##1##2##3##4{% + \advancenumber{sec\thissecnum}% + \def\thissubsecnum{##2}% + }% + \def\numsubsubsecentry##1##2##3##4{% + \advancenumber{subsec\thissubsecnum}% + }% + \def\thischapnum{0}% + \def\thissecnum{0}% + \def\thissubsecnum{0}% + % + % use \def rather than \let here because we redefine \chapentry et + % al. a second time, below. + \def\appentry{\numchapentry}% + \def\appsecentry{\numsecentry}% + \def\appsubsecentry{\numsubsecentry}% + \def\appsubsubsecentry{\numsubsubsecentry}% + \def\unnchapentry{\numchapentry}% + \def\unnsecentry{\numsecentry}% + \def\unnsubsecentry{\numsubsecentry}% + \def\unnsubsubsecentry{\numsubsubsecentry}% + \readdatafile{toc}% + % + % Read toc second time, this time actually producing the outlines. + % The `-' means take the \expnumber as the absolute number of + % subentries, which we calculated on our first read of the .toc above. + % + % We use the node names as the destinations. + \def\numchapentry##1##2##3##4{% + \dopdfoutline{##1}{count-\expnumber{chap##2}}{##3}{##4}}% + \def\numsecentry##1##2##3##4{% + \dopdfoutline{##1}{count-\expnumber{sec##2}}{##3}{##4}}% + \def\numsubsecentry##1##2##3##4{% + \dopdfoutline{##1}{count-\expnumber{subsec##2}}{##3}{##4}}% + \def\numsubsubsecentry##1##2##3##4{% count is always zero + \dopdfoutline{##1}{}{##3}{##4}}% + % + % PDF outlines are displayed using system fonts, instead of + % document fonts. Therefore we cannot use special characters, + % since the encoding is unknown. For example, the eogonek from + % Latin 2 (0xea) gets translated to a | character. Info from + % Staszek Wawrykiewicz, 19 Jan 2004 04:09:24 +0100. + % + % xx to do this right, we have to translate 8-bit characters to + % their "best" equivalent, based on the @documentencoding. Right + % now, I guess we'll just let the pdf reader have its way. + \indexnofonts + \setupdatafile + \activebackslash + \input \jobname.toc + \endgroup + } + % + \def\skipspaces#1{\def\PP{#1}\def\D{|}% + \ifx\PP\D\let\nextsp\relax + \else\let\nextsp\skipspaces + \ifx\p\space\else\addtokens{\filename}{\PP}% + \advance\filenamelength by 1 + \fi + \fi + \nextsp} + \def\getfilename#1{\filenamelength=0\expandafter\skipspaces#1|\relax} + \ifnum\pdftexversion < 14 + \let \startlink \pdfannotlink + \else + \let \startlink \pdfstartlink + \fi + \def\pdfurl#1{% + \begingroup + \normalturnoffactive\def\@{@}% + \makevalueexpandable + \leavevmode\Red + \startlink attr{/Border [0 0 0]}% + user{/Subtype /Link /A << /S /URI /URI (#1) >>}% + \endgroup} + \def\pdfgettoks#1.{\setbox\boxA=\hbox{\toksA={#1.}\toksB={}\maketoks}} + \def\addtokens#1#2{\edef\addtoks{\noexpand#1={\the#1#2}}\addtoks} + \def\adn#1{\addtokens{\toksC}{#1}\global\countA=1\let\next=\maketoks} + \def\poptoks#1#2|ENDTOKS|{\let\first=#1\toksD={#1}\toksA={#2}} + \def\maketoks{% + \expandafter\poptoks\the\toksA|ENDTOKS|\relax + \ifx\first0\adn0 + \else\ifx\first1\adn1 \else\ifx\first2\adn2 \else\ifx\first3\adn3 + \else\ifx\first4\adn4 \else\ifx\first5\adn5 \else\ifx\first6\adn6 + \else\ifx\first7\adn7 \else\ifx\first8\adn8 \else\ifx\first9\adn9 + \else + \ifnum0=\countA\else\makelink\fi + \ifx\first.\let\next=\done\else + \let\next=\maketoks + \addtokens{\toksB}{\the\toksD} + \ifx\first,\addtokens{\toksB}{\space}\fi + \fi + \fi\fi\fi\fi\fi\fi\fi\fi\fi\fi + \next} + \def\makelink{\addtokens{\toksB}% + {\noexpand\pdflink{\the\toksC}}\toksC={}\global\countA=0} + \def\pdflink#1{% + \startlink attr{/Border [0 0 0]} goto name{\pdfmkpgn{#1}} + \linkcolor #1\endlink} + \def\done{\edef\st{\global\noexpand\toksA={\the\toksB}}\st} +\else + \let\pdfmkdest = \gobble + \let\pdfurl = \gobble + \let\endlink = \relax + \let\linkcolor = \relax + \let\pdfmakeoutlines = \relax +\fi % \ifx\pdfoutput + + +\message{fonts,} + +% Change the current font style to #1, remembering it in \curfontstyle. +% For now, we do not accumulate font styles: @b{@i{foo}} prints foo in +% italics, not bold italics. +% +\def\setfontstyle#1{% + \def\curfontstyle{#1}% not as a control sequence, because we are \edef'd. + \csname ten#1\endcsname % change the current font +} + +% Select #1 fonts with the current style. +% +\def\selectfonts#1{\csname #1fonts\endcsname \csname\curfontstyle\endcsname} + +\def\rm{\fam=0 \setfontstyle{rm}} +\def\it{\fam=\itfam \setfontstyle{it}} +\def\sl{\fam=\slfam \setfontstyle{sl}} +\def\bf{\fam=\bffam \setfontstyle{bf}}\def\bfstylename{bf} +\def\tt{\fam=\ttfam \setfontstyle{tt}} + +% Texinfo sort of supports the sans serif font style, which plain TeX does not. +% So we set up a \sf. +\newfam\sffam +\def\sf{\fam=\sffam \setfontstyle{sf}} +\let\li = \sf % Sometimes we call it \li, not \sf. + +% We don't need math for this font style. +\def\ttsl{\setfontstyle{ttsl}} + +% Default leading. +\newdimen\textleading \textleading = 13.2pt + +% Set the baselineskip to #1, and the lineskip and strut size +% correspondingly. There is no deep meaning behind these magic numbers +% used as factors; they just match (closely enough) what Knuth defined. +% +\def\lineskipfactor{.08333} +\def\strutheightpercent{.70833} +\def\strutdepthpercent {.29167} +% +\def\setleading#1{% + \normalbaselineskip = #1\relax + \normallineskip = \lineskipfactor\normalbaselineskip + \normalbaselines + \setbox\strutbox =\hbox{% + \vrule width0pt height\strutheightpercent\baselineskip + depth \strutdepthpercent \baselineskip + }% +} + +% Set the font macro #1 to the font named #2, adding on the +% specified font prefix (normally `cm'). +% #3 is the font's design size, #4 is a scale factor +\def\setfont#1#2#3#4{\font#1=\fontprefix#2#3 scaled #4} + +% Use cm as the default font prefix. +% To specify the font prefix, you must define \fontprefix +% before you read in texinfo.tex. +\ifx\fontprefix\undefined +\def\fontprefix{cm} +\fi +% Support font families that don't use the same naming scheme as CM. +\def\rmshape{r} +\def\rmbshape{bx} %where the normal face is bold +\def\bfshape{b} +\def\bxshape{bx} +\def\ttshape{tt} +\def\ttbshape{tt} +\def\ttslshape{sltt} +\def\itshape{ti} +\def\itbshape{bxti} +\def\slshape{sl} +\def\slbshape{bxsl} +\def\sfshape{ss} +\def\sfbshape{ss} +\def\scshape{csc} +\def\scbshape{csc} + +% Text fonts (11.2pt, magstep1). +\def\textnominalsize{11pt} +\edef\mainmagstep{\magstephalf} +\setfont\textrm\rmshape{10}{\mainmagstep} +\setfont\texttt\ttshape{10}{\mainmagstep} +\setfont\textbf\bfshape{10}{\mainmagstep} +\setfont\textit\itshape{10}{\mainmagstep} +\setfont\textsl\slshape{10}{\mainmagstep} +\setfont\textsf\sfshape{10}{\mainmagstep} +\setfont\textsc\scshape{10}{\mainmagstep} +\setfont\textttsl\ttslshape{10}{\mainmagstep} +\font\texti=cmmi10 scaled \mainmagstep +\font\textsy=cmsy10 scaled \mainmagstep + +% A few fonts for @defun names and args. +\setfont\defbf\bfshape{10}{\magstep1} +\setfont\deftt\ttshape{10}{\magstep1} +\setfont\defttsl\ttslshape{10}{\magstep1} +\def\df{\let\tentt=\deftt \let\tenbf = \defbf \let\tenttsl=\defttsl \bf} + +% Fonts for indices, footnotes, small examples (9pt). +\def\smallnominalsize{9pt} +\setfont\smallrm\rmshape{9}{1000} +\setfont\smalltt\ttshape{9}{1000} +\setfont\smallbf\bfshape{10}{900} +\setfont\smallit\itshape{9}{1000} +\setfont\smallsl\slshape{9}{1000} +\setfont\smallsf\sfshape{9}{1000} +\setfont\smallsc\scshape{10}{900} +\setfont\smallttsl\ttslshape{10}{900} +\font\smalli=cmmi9 +\font\smallsy=cmsy9 + +% Fonts for small examples (8pt). +\def\smallernominalsize{8pt} +\setfont\smallerrm\rmshape{8}{1000} +\setfont\smallertt\ttshape{8}{1000} +\setfont\smallerbf\bfshape{10}{800} +\setfont\smallerit\itshape{8}{1000} +\setfont\smallersl\slshape{8}{1000} +\setfont\smallersf\sfshape{8}{1000} +\setfont\smallersc\scshape{10}{800} +\setfont\smallerttsl\ttslshape{10}{800} +\font\smalleri=cmmi8 +\font\smallersy=cmsy8 + +% Fonts for title page (20.4pt): +\def\titlenominalsize{20pt} +\setfont\titlerm\rmbshape{12}{\magstep3} +\setfont\titleit\itbshape{10}{\magstep4} +\setfont\titlesl\slbshape{10}{\magstep4} +\setfont\titlett\ttbshape{12}{\magstep3} +\setfont\titlettsl\ttslshape{10}{\magstep4} +\setfont\titlesf\sfbshape{17}{\magstep1} +\let\titlebf=\titlerm +\setfont\titlesc\scbshape{10}{\magstep4} +\font\titlei=cmmi12 scaled \magstep3 +\font\titlesy=cmsy10 scaled \magstep4 +\def\authorrm{\secrm} +\def\authortt{\sectt} + +% Chapter (and unnumbered) fonts (17.28pt). +\def\chapnominalsize{17pt} +\setfont\chaprm\rmbshape{12}{\magstep2} +\setfont\chapit\itbshape{10}{\magstep3} +\setfont\chapsl\slbshape{10}{\magstep3} +\setfont\chaptt\ttbshape{12}{\magstep2} +\setfont\chapttsl\ttslshape{10}{\magstep3} +\setfont\chapsf\sfbshape{17}{1000} +\let\chapbf=\chaprm +\setfont\chapsc\scbshape{10}{\magstep3} +\font\chapi=cmmi12 scaled \magstep2 +\font\chapsy=cmsy10 scaled \magstep3 + +% Section fonts (14.4pt). +\def\secnominalsize{14pt} +\setfont\secrm\rmbshape{12}{\magstep1} +\setfont\secit\itbshape{10}{\magstep2} +\setfont\secsl\slbshape{10}{\magstep2} +\setfont\sectt\ttbshape{12}{\magstep1} +\setfont\secttsl\ttslshape{10}{\magstep2} +\setfont\secsf\sfbshape{12}{\magstep1} +\let\secbf\secrm +\setfont\secsc\scbshape{10}{\magstep2} +\font\seci=cmmi12 scaled \magstep1 +\font\secsy=cmsy10 scaled \magstep2 + +% Subsection fonts (13.15pt). +\def\ssecnominalsize{13pt} +\setfont\ssecrm\rmbshape{12}{\magstephalf} +\setfont\ssecit\itbshape{10}{1315} +\setfont\ssecsl\slbshape{10}{1315} +\setfont\ssectt\ttbshape{12}{\magstephalf} +\setfont\ssecttsl\ttslshape{10}{1315} +\setfont\ssecsf\sfbshape{12}{\magstephalf} +\let\ssecbf\ssecrm +\setfont\ssecsc\scbshape{10}{1315} +\font\sseci=cmmi12 scaled \magstephalf +\font\ssecsy=cmsy10 scaled 1315 + +% Reduced fonts for @acro in text (10pt). +\def\reducednominalsize{10pt} +\setfont\reducedrm\rmshape{10}{1000} +\setfont\reducedtt\ttshape{10}{1000} +\setfont\reducedbf\bfshape{10}{1000} +\setfont\reducedit\itshape{10}{1000} +\setfont\reducedsl\slshape{10}{1000} +\setfont\reducedsf\sfshape{10}{1000} +\setfont\reducedsc\scshape{10}{1000} +\setfont\reducedttsl\ttslshape{10}{1000} +\font\reducedi=cmmi10 +\font\reducedsy=cmsy10 + +% In order for the font changes to affect most math symbols and letters, +% we have to define the \textfont of the standard families. Since +% texinfo doesn't allow for producing subscripts and superscripts except +% in the main text, we don't bother to reset \scriptfont and +% \scriptscriptfont (which would also require loading a lot more fonts). +% +\def\resetmathfonts{% + \textfont0=\tenrm \textfont1=\teni \textfont2=\tensy + \textfont\itfam=\tenit \textfont\slfam=\tensl \textfont\bffam=\tenbf + \textfont\ttfam=\tentt \textfont\sffam=\tensf +} + +% The font-changing commands redefine the meanings of \tenSTYLE, instead +% of just \STYLE. We do this because \STYLE needs to also set the +% current \fam for math mode. Our \STYLE (e.g., \rm) commands hardwire +% \tenSTYLE to set the current font. +% +% Each font-changing command also sets the names \lsize (one size lower) +% and \lllsize (three sizes lower). These relative commands are used in +% the LaTeX logo and acronyms. +% +% This all needs generalizing, badly. +% +\def\textfonts{% + \let\tenrm=\textrm \let\tenit=\textit \let\tensl=\textsl + \let\tenbf=\textbf \let\tentt=\texttt \let\smallcaps=\textsc + \let\tensf=\textsf \let\teni=\texti \let\tensy=\textsy + \let\tenttsl=\textttsl + \def\curfontsize{text}% + \def\lsize{reduced}\def\lllsize{smaller}% + \resetmathfonts \setleading{\textleading}} +\def\titlefonts{% + \let\tenrm=\titlerm \let\tenit=\titleit \let\tensl=\titlesl + \let\tenbf=\titlebf \let\tentt=\titlett \let\smallcaps=\titlesc + \let\tensf=\titlesf \let\teni=\titlei \let\tensy=\titlesy + \let\tenttsl=\titlettsl + \def\curfontsize{title}% + \def\lsize{chap}\def\lllsize{subsec}% + \resetmathfonts \setleading{25pt}} +\def\titlefont#1{{\titlefonts\rm #1}} +\def\chapfonts{% + \let\tenrm=\chaprm \let\tenit=\chapit \let\tensl=\chapsl + \let\tenbf=\chapbf \let\tentt=\chaptt \let\smallcaps=\chapsc + \let\tensf=\chapsf \let\teni=\chapi \let\tensy=\chapsy + \let\tenttsl=\chapttsl + \def\curfontsize{chap}% + \def\lsize{sec}\def\lllsize{text}% + \resetmathfonts \setleading{19pt}} +\def\secfonts{% + \let\tenrm=\secrm \let\tenit=\secit \let\tensl=\secsl + \let\tenbf=\secbf \let\tentt=\sectt \let\smallcaps=\secsc + \let\tensf=\secsf \let\teni=\seci \let\tensy=\secsy + \let\tenttsl=\secttsl + \def\curfontsize{sec}% + \def\lsize{subsec}\def\lllsize{reduced}% + \resetmathfonts \setleading{16pt}} +\def\subsecfonts{% + \let\tenrm=\ssecrm \let\tenit=\ssecit \let\tensl=\ssecsl + \let\tenbf=\ssecbf \let\tentt=\ssectt \let\smallcaps=\ssecsc + \let\tensf=\ssecsf \let\teni=\sseci \let\tensy=\ssecsy + \let\tenttsl=\ssecttsl + \def\curfontsize{ssec}% + \def\lsize{text}\def\lllsize{small}% + \resetmathfonts \setleading{15pt}} +\let\subsubsecfonts = \subsecfonts +\def\reducedfonts{% + \let\tenrm=\reducedrm \let\tenit=\reducedit \let\tensl=\reducedsl + \let\tenbf=\reducedbf \let\tentt=\reducedtt \let\reducedcaps=\reducedsc + \let\tensf=\reducedsf \let\teni=\reducedi \let\tensy=\reducedsy + \let\tenttsl=\reducedttsl + \def\curfontsize{reduced}% + \def\lsize{small}\def\lllsize{smaller}% + \resetmathfonts \setleading{10.5pt}} +\def\smallfonts{% + \let\tenrm=\smallrm \let\tenit=\smallit \let\tensl=\smallsl + \let\tenbf=\smallbf \let\tentt=\smalltt \let\smallcaps=\smallsc + \let\tensf=\smallsf \let\teni=\smalli \let\tensy=\smallsy + \let\tenttsl=\smallttsl + \def\curfontsize{small}% + \def\lsize{smaller}\def\lllsize{smaller}% + \resetmathfonts \setleading{10.5pt}} +\def\smallerfonts{% + \let\tenrm=\smallerrm \let\tenit=\smallerit \let\tensl=\smallersl + \let\tenbf=\smallerbf \let\tentt=\smallertt \let\smallcaps=\smallersc + \let\tensf=\smallersf \let\teni=\smalleri \let\tensy=\smallersy + \let\tenttsl=\smallerttsl + \def\curfontsize{smaller}% + \def\lsize{smaller}\def\lllsize{smaller}% + \resetmathfonts \setleading{9.5pt}} + +% Set the fonts to use with the @small... environments. +\let\smallexamplefonts = \smallfonts + +% About \smallexamplefonts. If we use \smallfonts (9pt), @smallexample +% can fit this many characters: +% 8.5x11=86 smallbook=72 a4=90 a5=69 +% If we use \scriptfonts (8pt), then we can fit this many characters: +% 8.5x11=90+ smallbook=80 a4=90+ a5=77 +% For me, subjectively, the few extra characters that fit aren't worth +% the additional smallness of 8pt. So I'm making the default 9pt. +% +% By the way, for comparison, here's what fits with @example (10pt): +% 8.5x11=71 smallbook=60 a4=75 a5=58 +% +% I wish the USA used A4 paper. +% --karl, 24jan03. + + +% Set up the default fonts, so we can use them for creating boxes. +% +\textfonts \rm + +% Define these so they can be easily changed for other fonts. +\def\angleleft{$\langle$} +\def\angleright{$\rangle$} + +% Count depth in font-changes, for error checks +\newcount\fontdepth \fontdepth=0 + +% Fonts for short table of contents. +\setfont\shortcontrm\rmshape{12}{1000} +\setfont\shortcontbf\bfshape{10}{\magstep1} % no cmb12 +\setfont\shortcontsl\slshape{12}{1000} +\setfont\shortconttt\ttshape{12}{1000} + +%% Add scribe-like font environments, plus @l for inline lisp (usually sans +%% serif) and @ii for TeX italic + +% \smartitalic{ARG} outputs arg in italics, followed by an italic correction +% unless the following character is such as not to need one. +\def\smartitalicx{\ifx\next,\else\ifx\next-\else\ifx\next.\else + \ptexslash\fi\fi\fi} +\def\smartslanted#1{{\ifusingtt\ttsl\sl #1}\futurelet\next\smartitalicx} +\def\smartitalic#1{{\ifusingtt\ttsl\it #1}\futurelet\next\smartitalicx} + +% like \smartslanted except unconditionally uses \ttsl. +% @var is set to this for defun arguments. +\def\ttslanted#1{{\ttsl #1}\futurelet\next\smartitalicx} + +% like \smartslanted except unconditionally use \sl. We never want +% ttsl for book titles, do we? +\def\cite#1{{\sl #1}\futurelet\next\smartitalicx} + +\let\i=\smartitalic +\let\slanted=\smartslanted +\let\var=\smartslanted +\let\dfn=\smartslanted +\let\emph=\smartitalic + +% @b, explicit bold. +\def\b#1{{\bf #1}} +\let\strong=\b + +% @sansserif, explicit sans. +\def\sansserif#1{{\sf #1}} + +% We can't just use \exhyphenpenalty, because that only has effect at +% the end of a paragraph. Restore normal hyphenation at the end of the +% group within which \nohyphenation is presumably called. +% +\def\nohyphenation{\hyphenchar\font = -1 \aftergroup\restorehyphenation} +\def\restorehyphenation{\hyphenchar\font = `- } + +% Set sfcode to normal for the chars that usually have another value. +% Can't use plain's \frenchspacing because it uses the `\x notation, and +% sometimes \x has an active definition that messes things up. +% +\catcode`@=11 + \def\plainfrenchspacing{% + \sfcode\dotChar =\@m \sfcode\questChar=\@m \sfcode\exclamChar=\@m + \sfcode\colonChar=\@m \sfcode\semiChar =\@m \sfcode\commaChar =\@m + \def\endofsentencespacefactor{1000}% for @. and friends + } + \def\plainnonfrenchspacing{% + \sfcode`\.3000\sfcode`\?3000\sfcode`\!3000 + \sfcode`\:2000\sfcode`\;1500\sfcode`\,1250 + \def\endofsentencespacefactor{3000}% for @. and friends + } +\catcode`@=\other +\def\endofsentencespacefactor{3000}% default + +\def\t#1{% + {\tt \rawbackslash \plainfrenchspacing #1}% + \null +} +\def\samp#1{`\tclose{#1}'\null} +\setfont\keyrm\rmshape{8}{1000} +\font\keysy=cmsy9 +\def\key#1{{\keyrm\textfont2=\keysy \leavevmode\hbox{% + \raise0.4pt\hbox{\angleleft}\kern-.08em\vtop{% + \vbox{\hrule\kern-0.4pt + \hbox{\raise0.4pt\hbox{\vphantom{\angleleft}}#1}}% + \kern-0.4pt\hrule}% + \kern-.06em\raise0.4pt\hbox{\angleright}}}} +% The old definition, with no lozenge: +%\def\key #1{{\ttsl \nohyphenation \uppercase{#1}}\null} +\def\ctrl #1{{\tt \rawbackslash \hat}#1} + +% @file, @option are the same as @samp. +\let\file=\samp +\let\option=\samp + +% @code is a modification of @t, +% which makes spaces the same size as normal in the surrounding text. +\def\tclose#1{% + {% + % Change normal interword space to be same as for the current font. + \spaceskip = \fontdimen2\font + % + % Switch to typewriter. + \tt + % + % But `\ ' produces the large typewriter interword space. + \def\ {{\spaceskip = 0pt{} }}% + % + % Turn off hyphenation. + \nohyphenation + % + \rawbackslash + \plainfrenchspacing + #1% + }% + \null +} + +% We *must* turn on hyphenation at `-' and `_' in @code. +% Otherwise, it is too hard to avoid overfull hboxes +% in the Emacs manual, the Library manual, etc. + +% Unfortunately, TeX uses one parameter (\hyphenchar) to control +% both hyphenation at - and hyphenation within words. +% We must therefore turn them both off (\tclose does that) +% and arrange explicitly to hyphenate at a dash. +% -- rms. +{ + \catcode`\-=\active + \catcode`\_=\active + % + \global\def\code{\begingroup + \catcode`\-=\active \catcode`\_=\active + \ifallowcodebreaks + \let-\codedash + \let_\codeunder + \else + \let-\realdash + \let_\realunder + \fi + \codex + } +} + +\def\realdash{-} +\def\codedash{-\discretionary{}{}{}} +\def\codeunder{% + % this is all so @math{@code{var_name}+1} can work. In math mode, _ + % is "active" (mathcode"8000) and \normalunderscore (or \char95, etc.) + % will therefore expand the active definition of _, which is us + % (inside @code that is), therefore an endless loop. + \ifusingtt{\ifmmode + \mathchar"075F % class 0=ordinary, family 7=ttfam, pos 0x5F=_. + \else\normalunderscore \fi + \discretionary{}{}{}}% + {\_}% +} +\def\codex #1{\tclose{#1}\endgroup} + +% An additional complication: the above will allow breaks after, e.g., +% each of the four underscores in __typeof__. This is undesirable in +% some manuals, especially if they don't have long identifiers in +% general. @allowcodebreaks provides a way to control this. +% +\newif\ifallowcodebreaks \allowcodebreakstrue + +\def\keywordtrue{true} +\def\keywordfalse{false} + +\parseargdef\allowcodebreaks{% + \def\txiarg{#1}% + \ifx\txiarg\keywordtrue + \allowcodebreakstrue + \else\ifx\txiarg\keywordfalse + \allowcodebreaksfalse + \else + \errhelp = \EMsimple + \errmessage{Unknown @allowcodebreaks option `\txiarg'}% + \fi\fi +} + +% @kbd is like @code, except that if the argument is just one @key command, +% then @kbd has no effect. + +% @kbdinputstyle -- arg is `distinct' (@kbd uses slanted tty font always), +% `example' (@kbd uses ttsl only inside of @example and friends), +% or `code' (@kbd uses normal tty font always). +\parseargdef\kbdinputstyle{% + \def\txiarg{#1}% + \ifx\txiarg\worddistinct + \gdef\kbdexamplefont{\ttsl}\gdef\kbdfont{\ttsl}% + \else\ifx\txiarg\wordexample + \gdef\kbdexamplefont{\ttsl}\gdef\kbdfont{\tt}% + \else\ifx\txiarg\wordcode + \gdef\kbdexamplefont{\tt}\gdef\kbdfont{\tt}% + \else + \errhelp = \EMsimple + \errmessage{Unknown @kbdinputstyle option `\txiarg'}% + \fi\fi\fi +} +\def\worddistinct{distinct} +\def\wordexample{example} +\def\wordcode{code} + +% Default is `distinct.' +\kbdinputstyle distinct + +\def\xkey{\key} +\def\kbdfoo#1#2#3\par{\def\one{#1}\def\three{#3}\def\threex{??}% +\ifx\one\xkey\ifx\threex\three \key{#2}% +\else{\tclose{\kbdfont\look}}\fi +\else{\tclose{\kbdfont\look}}\fi} + +% For @indicateurl, @env, @command quotes seem unnecessary, so use \code. +\let\indicateurl=\code +\let\env=\code +\let\command=\code + +% @uref (abbreviation for `urlref') takes an optional (comma-separated) +% second argument specifying the text to display and an optional third +% arg as text to display instead of (rather than in addition to) the url +% itself. First (mandatory) arg is the url. Perhaps eventually put in +% a hypertex \special here. +% +\def\uref#1{\douref #1,,,\finish} +\def\douref#1,#2,#3,#4\finish{\begingroup + \unsepspaces + \pdfurl{#1}% + \setbox0 = \hbox{\ignorespaces #3}% + \ifdim\wd0 > 0pt + \unhbox0 % third arg given, show only that + \else + \setbox0 = \hbox{\ignorespaces #2}% + \ifdim\wd0 > 0pt + \ifpdf + \unhbox0 % PDF: 2nd arg given, show only it + \else + \unhbox0\ (\code{#1})% DVI: 2nd arg given, show both it and url + \fi + \else + \code{#1}% only url given, so show it + \fi + \fi + \endlink +\endgroup} + +% @url synonym for @uref, since that's how everyone uses it. +% +\let\url=\uref + +% rms does not like angle brackets --karl, 17may97. +% So now @email is just like @uref, unless we are pdf. +% +%\def\email#1{\angleleft{\tt #1}\angleright} +\ifpdf + \def\email#1{\doemail#1,,\finish} + \def\doemail#1,#2,#3\finish{\begingroup + \unsepspaces + \pdfurl{mailto:#1}% + \setbox0 = \hbox{\ignorespaces #2}% + \ifdim\wd0>0pt\unhbox0\else\code{#1}\fi + \endlink + \endgroup} +\else + \let\email=\uref +\fi + +% Check if we are currently using a typewriter font. Since all the +% Computer Modern typewriter fonts have zero interword stretch (and +% shrink), and it is reasonable to expect all typewriter fonts to have +% this property, we can check that font parameter. +% +\def\ifmonospace{\ifdim\fontdimen3\font=0pt } + +% Typeset a dimension, e.g., `in' or `pt'. The only reason for the +% argument is to make the input look right: @dmn{pt} instead of @dmn{}pt. +% +\def\dmn#1{\thinspace #1} + +\def\kbd#1{\def\look{#1}\expandafter\kbdfoo\look??\par} + +% @l was never documented to mean ``switch to the Lisp font'', +% and it is not used as such in any manual I can find. We need it for +% Polish suppressed-l. --karl, 22sep96. +%\def\l#1{{\li #1}\null} + +% Explicit font changes: @r, @sc, undocumented @ii. +\def\r#1{{\rm #1}} % roman font +\def\sc#1{{\smallcaps#1}} % smallcaps font +\def\ii#1{{\it #1}} % italic font + +% @acronym for "FBI", "NATO", and the like. +% We print this one point size smaller, since it's intended for +% all-uppercase. +% +\def\acronym#1{\doacronym #1,,\finish} +\def\doacronym#1,#2,#3\finish{% + {\selectfonts\lsize #1}% + \def\temp{#2}% + \ifx\temp\empty \else + \space ({\unsepspaces \ignorespaces \temp \unskip})% + \fi +} + +% @abbr for "Comput. J." and the like. +% No font change, but don't do end-of-sentence spacing. +% +\def\abbr#1{\doabbr #1,,\finish} +\def\doabbr#1,#2,#3\finish{% + {\plainfrenchspacing #1}% + \def\temp{#2}% + \ifx\temp\empty \else + \space ({\unsepspaces \ignorespaces \temp \unskip})% + \fi +} + +% @pounds{} is a sterling sign, which Knuth put in the CM italic font. +% +\def\pounds{{\it\$}} + +% @euro{} comes from a separate font, depending on the current style. +% We use the free feym* fonts from the eurosym package by Henrik +% Theiling, which support regular, slanted, bold and bold slanted (and +% "outlined" (blackboard board, sort of) versions, which we don't need). +% It is available from http://www.ctan.org/tex-archive/fonts/eurosym. +% +% Although only regular is the truly official Euro symbol, we ignore +% that. The Euro is designed to be slightly taller than the regular +% font height. +% +% feymr - regular +% feymo - slanted +% feybr - bold +% feybo - bold slanted +% +% There is no good (free) typewriter version, to my knowledge. +% A feymr10 euro is ~7.3pt wide, while a normal cmtt10 char is ~5.25pt wide. +% Hmm. +% +% Also doesn't work in math. Do we need to do math with euro symbols? +% Hope not. +% +% +\def\euro{{\eurofont e}} +\def\eurofont{% + % We set the font at each command, rather than predefining it in + % \textfonts and the other font-switching commands, so that + % installations which never need the symbol don't have to have the + % font installed. + % + % There is only one designed size (nominal 10pt), so we always scale + % that to the current nominal size. + % + % By the way, simply using "at 1em" works for cmr10 and the like, but + % does not work for cmbx10 and other extended/shrunken fonts. + % + \def\eurosize{\csname\curfontsize nominalsize\endcsname}% + % + \ifx\curfontstyle\bfstylename + % bold: + \font\thiseurofont = \ifusingit{feybo10}{feybr10} at \eurosize + \else + % regular: + \font\thiseurofont = \ifusingit{feymo10}{feymr10} at \eurosize + \fi + \thiseurofont +} + +% @registeredsymbol - R in a circle. The font for the R should really +% be smaller yet, but lllsize is the best we can do for now. +% Adapted from the plain.tex definition of \copyright. +% +\def\registeredsymbol{% + $^{{\ooalign{\hfil\raise.07ex\hbox{\selectfonts\lllsize R}% + \hfil\crcr\Orb}}% + }$% +} + +% Laurent Siebenmann reports \Orb undefined with: +% Textures 1.7.7 (preloaded format=plain 93.10.14) (68K) 16 APR 2004 02:38 +% so we'll define it if necessary. +% +\ifx\Orb\undefined +\def\Orb{\mathhexbox20D} +\fi + + +\message{page headings,} + +\newskip\titlepagetopglue \titlepagetopglue = 1.5in +\newskip\titlepagebottomglue \titlepagebottomglue = 2pc + +% First the title page. Must do @settitle before @titlepage. +\newif\ifseenauthor +\newif\iffinishedtitlepage + +% Do an implicit @contents or @shortcontents after @end titlepage if the +% user says @setcontentsaftertitlepage or @setshortcontentsaftertitlepage. +% +\newif\ifsetcontentsaftertitlepage + \let\setcontentsaftertitlepage = \setcontentsaftertitlepagetrue +\newif\ifsetshortcontentsaftertitlepage + \let\setshortcontentsaftertitlepage = \setshortcontentsaftertitlepagetrue + +\parseargdef\shorttitlepage{\begingroup\hbox{}\vskip 1.5in \chaprm \centerline{#1}% + \endgroup\page\hbox{}\page} + +\envdef\titlepage{% + % Open one extra group, as we want to close it in the middle of \Etitlepage. + \begingroup + \parindent=0pt \textfonts + % Leave some space at the very top of the page. + \vglue\titlepagetopglue + % No rule at page bottom unless we print one at the top with @title. + \finishedtitlepagetrue + % + % Most title ``pages'' are actually two pages long, with space + % at the top of the second. We don't want the ragged left on the second. + \let\oldpage = \page + \def\page{% + \iffinishedtitlepage\else + \finishtitlepage + \fi + \let\page = \oldpage + \page + \null + }% +} + +\def\Etitlepage{% + \iffinishedtitlepage\else + \finishtitlepage + \fi + % It is important to do the page break before ending the group, + % because the headline and footline are only empty inside the group. + % If we use the new definition of \page, we always get a blank page + % after the title page, which we certainly don't want. + \oldpage + \endgroup + % + % Need this before the \...aftertitlepage checks so that if they are + % in effect the toc pages will come out with page numbers. + \HEADINGSon + % + % If they want short, they certainly want long too. + \ifsetshortcontentsaftertitlepage + \shortcontents + \contents + \global\let\shortcontents = \relax + \global\let\contents = \relax + \fi + % + \ifsetcontentsaftertitlepage + \contents + \global\let\contents = \relax + \global\let\shortcontents = \relax + \fi +} + +\def\finishtitlepage{% + \vskip4pt \hrule height 2pt width \hsize + \vskip\titlepagebottomglue + \finishedtitlepagetrue +} + +%%% Macros to be used within @titlepage: + +\let\subtitlerm=\tenrm +\def\subtitlefont{\subtitlerm \normalbaselineskip = 13pt \normalbaselines} + +\def\authorfont{\authorrm \normalbaselineskip = 16pt \normalbaselines + \let\tt=\authortt} + +\parseargdef\title{% + \checkenv\titlepage + \leftline{\titlefonts\rm #1} + % print a rule at the page bottom also. + \finishedtitlepagefalse + \vskip4pt \hrule height 4pt width \hsize \vskip4pt +} + +\parseargdef\subtitle{% + \checkenv\titlepage + {\subtitlefont \rightline{#1}}% +} + +% @author should come last, but may come many times. +% It can also be used inside @quotation. +% +\parseargdef\author{% + \def\temp{\quotation}% + \ifx\thisenv\temp + \def\quotationauthor{#1}% printed in \Equotation. + \else + \checkenv\titlepage + \ifseenauthor\else \vskip 0pt plus 1filll \seenauthortrue \fi + {\authorfont \leftline{#1}}% + \fi +} + + +%%% Set up page headings and footings. + +\let\thispage=\folio + +\newtoks\evenheadline % headline on even pages +\newtoks\oddheadline % headline on odd pages +\newtoks\evenfootline % footline on even pages +\newtoks\oddfootline % footline on odd pages + +% Now make TeX use those variables +\headline={{\textfonts\rm \ifodd\pageno \the\oddheadline + \else \the\evenheadline \fi}} +\footline={{\textfonts\rm \ifodd\pageno \the\oddfootline + \else \the\evenfootline \fi}\HEADINGShook} +\let\HEADINGShook=\relax + +% Commands to set those variables. +% For example, this is what @headings on does +% @evenheading @thistitle|@thispage|@thischapter +% @oddheading @thischapter|@thispage|@thistitle +% @evenfooting @thisfile|| +% @oddfooting ||@thisfile + + +\def\evenheading{\parsearg\evenheadingxxx} +\def\evenheadingxxx #1{\evenheadingyyy #1\|\|\|\|\finish} +\def\evenheadingyyy #1\|#2\|#3\|#4\finish{% +\global\evenheadline={\rlap{\centerline{#2}}\line{#1\hfil#3}}} + +\def\oddheading{\parsearg\oddheadingxxx} +\def\oddheadingxxx #1{\oddheadingyyy #1\|\|\|\|\finish} +\def\oddheadingyyy #1\|#2\|#3\|#4\finish{% +\global\oddheadline={\rlap{\centerline{#2}}\line{#1\hfil#3}}} + +\parseargdef\everyheading{\oddheadingxxx{#1}\evenheadingxxx{#1}}% + +\def\evenfooting{\parsearg\evenfootingxxx} +\def\evenfootingxxx #1{\evenfootingyyy #1\|\|\|\|\finish} +\def\evenfootingyyy #1\|#2\|#3\|#4\finish{% +\global\evenfootline={\rlap{\centerline{#2}}\line{#1\hfil#3}}} + +\def\oddfooting{\parsearg\oddfootingxxx} +\def\oddfootingxxx #1{\oddfootingyyy #1\|\|\|\|\finish} +\def\oddfootingyyy #1\|#2\|#3\|#4\finish{% + \global\oddfootline = {\rlap{\centerline{#2}}\line{#1\hfil#3}}% + % + % Leave some space for the footline. Hopefully ok to assume + % @evenfooting will not be used by itself. + \global\advance\pageheight by -\baselineskip + \global\advance\vsize by -\baselineskip +} + +\parseargdef\everyfooting{\oddfootingxxx{#1}\evenfootingxxx{#1}} + + +% @headings double turns headings on for double-sided printing. +% @headings single turns headings on for single-sided printing. +% @headings off turns them off. +% @headings on same as @headings double, retained for compatibility. +% @headings after turns on double-sided headings after this page. +% @headings doubleafter turns on double-sided headings after this page. +% @headings singleafter turns on single-sided headings after this page. +% By default, they are off at the start of a document, +% and turned `on' after @end titlepage. + +\def\headings #1 {\csname HEADINGS#1\endcsname} + +\def\HEADINGSoff{% +\global\evenheadline={\hfil} \global\evenfootline={\hfil} +\global\oddheadline={\hfil} \global\oddfootline={\hfil}} +\HEADINGSoff +% When we turn headings on, set the page number to 1. +% For double-sided printing, put current file name in lower left corner, +% chapter name on inside top of right hand pages, document +% title on inside top of left hand pages, and page numbers on outside top +% edge of all pages. +\def\HEADINGSdouble{% +\global\pageno=1 +\global\evenfootline={\hfil} +\global\oddfootline={\hfil} +\global\evenheadline={\line{\folio\hfil\thistitle}} +\global\oddheadline={\line{\thischapter\hfil\folio}} +\global\let\contentsalignmacro = \chapoddpage +} +\let\contentsalignmacro = \chappager + +% For single-sided printing, chapter title goes across top left of page, +% page number on top right. +\def\HEADINGSsingle{% +\global\pageno=1 +\global\evenfootline={\hfil} +\global\oddfootline={\hfil} +\global\evenheadline={\line{\thischapter\hfil\folio}} +\global\oddheadline={\line{\thischapter\hfil\folio}} +\global\let\contentsalignmacro = \chappager +} +\def\HEADINGSon{\HEADINGSdouble} + +\def\HEADINGSafter{\let\HEADINGShook=\HEADINGSdoublex} +\let\HEADINGSdoubleafter=\HEADINGSafter +\def\HEADINGSdoublex{% +\global\evenfootline={\hfil} +\global\oddfootline={\hfil} +\global\evenheadline={\line{\folio\hfil\thistitle}} +\global\oddheadline={\line{\thischapter\hfil\folio}} +\global\let\contentsalignmacro = \chapoddpage +} + +\def\HEADINGSsingleafter{\let\HEADINGShook=\HEADINGSsinglex} +\def\HEADINGSsinglex{% +\global\evenfootline={\hfil} +\global\oddfootline={\hfil} +\global\evenheadline={\line{\thischapter\hfil\folio}} +\global\oddheadline={\line{\thischapter\hfil\folio}} +\global\let\contentsalignmacro = \chappager +} + +% Subroutines used in generating headings +% This produces Day Month Year style of output. +% Only define if not already defined, in case a txi-??.tex file has set +% up a different format (e.g., txi-cs.tex does this). +\ifx\today\undefined +\def\today{% + \number\day\space + \ifcase\month + \or\putwordMJan\or\putwordMFeb\or\putwordMMar\or\putwordMApr + \or\putwordMMay\or\putwordMJun\or\putwordMJul\or\putwordMAug + \or\putwordMSep\or\putwordMOct\or\putwordMNov\or\putwordMDec + \fi + \space\number\year} +\fi + +% @settitle line... specifies the title of the document, for headings. +% It generates no output of its own. +\def\thistitle{\putwordNoTitle} +\def\settitle{\parsearg{\gdef\thistitle}} + + +\message{tables,} +% Tables -- @table, @ftable, @vtable, @item(x). + +% default indentation of table text +\newdimen\tableindent \tableindent=.8in +% default indentation of @itemize and @enumerate text +\newdimen\itemindent \itemindent=.3in +% margin between end of table item and start of table text. +\newdimen\itemmargin \itemmargin=.1in + +% used internally for \itemindent minus \itemmargin +\newdimen\itemmax + +% Note @table, @ftable, and @vtable define @item, @itemx, etc., with +% these defs. +% They also define \itemindex +% to index the item name in whatever manner is desired (perhaps none). + +\newif\ifitemxneedsnegativevskip + +\def\itemxpar{\par\ifitemxneedsnegativevskip\nobreak\vskip-\parskip\nobreak\fi} + +\def\internalBitem{\smallbreak \parsearg\itemzzz} +\def\internalBitemx{\itemxpar \parsearg\itemzzz} + +\def\itemzzz #1{\begingroup % + \advance\hsize by -\rightskip + \advance\hsize by -\tableindent + \setbox0=\hbox{\itemindicate{#1}}% + \itemindex{#1}% + \nobreak % This prevents a break before @itemx. + % + % If the item text does not fit in the space we have, put it on a line + % by itself, and do not allow a page break either before or after that + % line. We do not start a paragraph here because then if the next + % command is, e.g., @kindex, the whatsit would get put into the + % horizontal list on a line by itself, resulting in extra blank space. + \ifdim \wd0>\itemmax + % + % Make this a paragraph so we get the \parskip glue and wrapping, + % but leave it ragged-right. + \begingroup + \advance\leftskip by-\tableindent + \advance\hsize by\tableindent + \advance\rightskip by0pt plus1fil + \leavevmode\unhbox0\par + \endgroup + % + % We're going to be starting a paragraph, but we don't want the + % \parskip glue -- logically it's part of the @item we just started. + \nobreak \vskip-\parskip + % + % Stop a page break at the \parskip glue coming up. However, if + % what follows is an environment such as @example, there will be no + % \parskip glue; then the negative vskip we just inserted would + % cause the example and the item to crash together. So we use this + % bizarre value of 10001 as a signal to \aboveenvbreak to insert + % \parskip glue after all. Section titles are handled this way also. + % + \penalty 10001 + \endgroup + \itemxneedsnegativevskipfalse + \else + % The item text fits into the space. Start a paragraph, so that the + % following text (if any) will end up on the same line. + \noindent + % Do this with kerns and \unhbox so that if there is a footnote in + % the item text, it can migrate to the main vertical list and + % eventually be printed. + \nobreak\kern-\tableindent + \dimen0 = \itemmax \advance\dimen0 by \itemmargin \advance\dimen0 by -\wd0 + \unhbox0 + \nobreak\kern\dimen0 + \endgroup + \itemxneedsnegativevskiptrue + \fi +} + +\def\item{\errmessage{@item while not in a list environment}} +\def\itemx{\errmessage{@itemx while not in a list environment}} + +% @table, @ftable, @vtable. +\envdef\table{% + \let\itemindex\gobble + \tablecheck{table}% +} +\envdef\ftable{% + \def\itemindex ##1{\doind {fn}{\code{##1}}}% + \tablecheck{ftable}% +} +\envdef\vtable{% + \def\itemindex ##1{\doind {vr}{\code{##1}}}% + \tablecheck{vtable}% +} +\def\tablecheck#1{% + \ifnum \the\catcode`\^^M=\active + \endgroup + \errmessage{This command won't work in this context; perhaps the problem is + that we are \inenvironment\thisenv}% + \def\next{\doignore{#1}}% + \else + \let\next\tablex + \fi + \next +} +\def\tablex#1{% + \def\itemindicate{#1}% + \parsearg\tabley +} +\def\tabley#1{% + {% + \makevalueexpandable + \edef\temp{\noexpand\tablez #1\space\space\space}% + \expandafter + }\temp \endtablez +} +\def\tablez #1 #2 #3 #4\endtablez{% + \aboveenvbreak + \ifnum 0#1>0 \advance \leftskip by #1\mil \fi + \ifnum 0#2>0 \tableindent=#2\mil \fi + \ifnum 0#3>0 \advance \rightskip by #3\mil \fi + \itemmax=\tableindent + \advance \itemmax by -\itemmargin + \advance \leftskip by \tableindent + \exdentamount=\tableindent + \parindent = 0pt + \parskip = \smallskipamount + \ifdim \parskip=0pt \parskip=2pt \fi + \let\item = \internalBitem + \let\itemx = \internalBitemx +} +\def\Etable{\endgraf\afterenvbreak} +\let\Eftable\Etable +\let\Evtable\Etable +\let\Eitemize\Etable +\let\Eenumerate\Etable + +% This is the counter used by @enumerate, which is really @itemize + +\newcount \itemno + +\envdef\itemize{\parsearg\doitemize} + +\def\doitemize#1{% + \aboveenvbreak + \itemmax=\itemindent + \advance\itemmax by -\itemmargin + \advance\leftskip by \itemindent + \exdentamount=\itemindent + \parindent=0pt + \parskip=\smallskipamount + \ifdim\parskip=0pt \parskip=2pt \fi + \def\itemcontents{#1}% + % @itemize with no arg is equivalent to @itemize @bullet. + \ifx\itemcontents\empty\def\itemcontents{\bullet}\fi + \let\item=\itemizeitem +} + +% Definition of @item while inside @itemize and @enumerate. +% +\def\itemizeitem{% + \advance\itemno by 1 % for enumerations + {\let\par=\endgraf \smallbreak}% reasonable place to break + {% + % If the document has an @itemize directly after a section title, a + % \nobreak will be last on the list, and \sectionheading will have + % done a \vskip-\parskip. In that case, we don't want to zero + % parskip, or the item text will crash with the heading. On the + % other hand, when there is normal text preceding the item (as there + % usually is), we do want to zero parskip, or there would be too much + % space. In that case, we won't have a \nobreak before. At least + % that's the theory. + \ifnum\lastpenalty<10000 \parskip=0in \fi + \noindent + \hbox to 0pt{\hss \itemcontents \kern\itemmargin}% + \vadjust{\penalty 1200}}% not good to break after first line of item. + \flushcr +} + +% \splitoff TOKENS\endmark defines \first to be the first token in +% TOKENS, and \rest to be the remainder. +% +\def\splitoff#1#2\endmark{\def\first{#1}\def\rest{#2}}% + +% Allow an optional argument of an uppercase letter, lowercase letter, +% or number, to specify the first label in the enumerated list. No +% argument is the same as `1'. +% +\envparseargdef\enumerate{\enumeratey #1 \endenumeratey} +\def\enumeratey #1 #2\endenumeratey{% + % If we were given no argument, pretend we were given `1'. + \def\thearg{#1}% + \ifx\thearg\empty \def\thearg{1}\fi + % + % Detect if the argument is a single token. If so, it might be a + % letter. Otherwise, the only valid thing it can be is a number. + % (We will always have one token, because of the test we just made. + % This is a good thing, since \splitoff doesn't work given nothing at + % all -- the first parameter is undelimited.) + \expandafter\splitoff\thearg\endmark + \ifx\rest\empty + % Only one token in the argument. It could still be anything. + % A ``lowercase letter'' is one whose \lccode is nonzero. + % An ``uppercase letter'' is one whose \lccode is both nonzero, and + % not equal to itself. + % Otherwise, we assume it's a number. + % + % We need the \relax at the end of the \ifnum lines to stop TeX from + % continuing to look for a . + % + \ifnum\lccode\expandafter`\thearg=0\relax + \numericenumerate % a number (we hope) + \else + % It's a letter. + \ifnum\lccode\expandafter`\thearg=\expandafter`\thearg\relax + \lowercaseenumerate % lowercase letter + \else + \uppercaseenumerate % uppercase letter + \fi + \fi + \else + % Multiple tokens in the argument. We hope it's a number. + \numericenumerate + \fi +} + +% An @enumerate whose labels are integers. The starting integer is +% given in \thearg. +% +\def\numericenumerate{% + \itemno = \thearg + \startenumeration{\the\itemno}% +} + +% The starting (lowercase) letter is in \thearg. +\def\lowercaseenumerate{% + \itemno = \expandafter`\thearg + \startenumeration{% + % Be sure we're not beyond the end of the alphabet. + \ifnum\itemno=0 + \errmessage{No more lowercase letters in @enumerate; get a bigger + alphabet}% + \fi + \char\lccode\itemno + }% +} + +% The starting (uppercase) letter is in \thearg. +\def\uppercaseenumerate{% + \itemno = \expandafter`\thearg + \startenumeration{% + % Be sure we're not beyond the end of the alphabet. + \ifnum\itemno=0 + \errmessage{No more uppercase letters in @enumerate; get a bigger + alphabet} + \fi + \char\uccode\itemno + }% +} + +% Call \doitemize, adding a period to the first argument and supplying the +% common last two arguments. Also subtract one from the initial value in +% \itemno, since @item increments \itemno. +% +\def\startenumeration#1{% + \advance\itemno by -1 + \doitemize{#1.}\flushcr +} + +% @alphaenumerate and @capsenumerate are abbreviations for giving an arg +% to @enumerate. +% +\def\alphaenumerate{\enumerate{a}} +\def\capsenumerate{\enumerate{A}} +\def\Ealphaenumerate{\Eenumerate} +\def\Ecapsenumerate{\Eenumerate} + + +% @multitable macros +% Amy Hendrickson, 8/18/94, 3/6/96 +% +% @multitable ... @end multitable will make as many columns as desired. +% Contents of each column will wrap at width given in preamble. Width +% can be specified either with sample text given in a template line, +% or in percent of \hsize, the current width of text on page. + +% Table can continue over pages but will only break between lines. + +% To make preamble: +% +% Either define widths of columns in terms of percent of \hsize: +% @multitable @columnfractions .25 .3 .45 +% @item ... +% +% Numbers following @columnfractions are the percent of the total +% current hsize to be used for each column. You may use as many +% columns as desired. + + +% Or use a template: +% @multitable {Column 1 template} {Column 2 template} {Column 3 template} +% @item ... +% using the widest term desired in each column. + +% Each new table line starts with @item, each subsequent new column +% starts with @tab. Empty columns may be produced by supplying @tab's +% with nothing between them for as many times as empty columns are needed, +% ie, @tab at tab@tab will produce two empty columns. + +% @item, @tab do not need to be on their own lines, but it will not hurt +% if they are. + +% Sample multitable: + +% @multitable {Column 1 template} {Column 2 template} {Column 3 template} +% @item first col stuff @tab second col stuff @tab third col +% @item +% first col stuff +% @tab +% second col stuff +% @tab +% third col +% @item first col stuff @tab second col stuff +% @tab Many paragraphs of text may be used in any column. +% +% They will wrap at the width determined by the template. +% @item at tab@tab This will be in third column. +% @end multitable + +% Default dimensions may be reset by user. +% @multitableparskip is vertical space between paragraphs in table. +% @multitableparindent is paragraph indent in table. +% @multitablecolmargin is horizontal space to be left between columns. +% @multitablelinespace is space to leave between table items, baseline +% to baseline. +% 0pt means it depends on current normal line spacing. +% +\newskip\multitableparskip +\newskip\multitableparindent +\newdimen\multitablecolspace +\newskip\multitablelinespace +\multitableparskip=0pt +\multitableparindent=6pt +\multitablecolspace=12pt +\multitablelinespace=0pt + +% Macros used to set up halign preamble: +% +\let\endsetuptable\relax +\def\xendsetuptable{\endsetuptable} +\let\columnfractions\relax +\def\xcolumnfractions{\columnfractions} +\newif\ifsetpercent + +% #1 is the @columnfraction, usually a decimal number like .5, but might +% be just 1. We just use it, whatever it is. +% +\def\pickupwholefraction#1 {% + \global\advance\colcount by 1 + \expandafter\xdef\csname col\the\colcount\endcsname{#1\hsize}% + \setuptable +} + +\newcount\colcount +\def\setuptable#1{% + \def\firstarg{#1}% + \ifx\firstarg\xendsetuptable + \let\go = \relax + \else + \ifx\firstarg\xcolumnfractions + \global\setpercenttrue + \else + \ifsetpercent + \let\go\pickupwholefraction + \else + \global\advance\colcount by 1 + \setbox0=\hbox{#1\unskip\space}% Add a normal word space as a + % separator; typically that is always in the input, anyway. + \expandafter\xdef\csname col\the\colcount\endcsname{\the\wd0}% + \fi + \fi + \ifx\go\pickupwholefraction + % Put the argument back for the \pickupwholefraction call, so + % we'll always have a period there to be parsed. + \def\go{\pickupwholefraction#1}% + \else + \let\go = \setuptable + \fi% + \fi + \go +} + +% multitable-only commands. +% +% @headitem starts a heading row, which we typeset in bold. +% Assignments have to be global since we are inside the implicit group +% of an alignment entry. Note that \everycr resets \everytab. +\def\headitem{\checkenv\multitable \crcr \global\everytab={\bf}\the\everytab}% +% +% A \tab used to include \hskip1sp. But then the space in a template +% line is not enough. That is bad. So let's go back to just `&' until +% we encounter the problem it was intended to solve again. +% --karl, nathan at acm.org, 20apr99. +\def\tab{\checkenv\multitable &\the\everytab}% + +% @multitable ... @end multitable definitions: +% +\newtoks\everytab % insert after every tab. +% +\envdef\multitable{% + \vskip\parskip + \startsavinginserts + % + % @item within a multitable starts a normal row. + % We use \def instead of \let so that if one of the multitable entries + % contains an @itemize, we don't choke on the \item (seen as \crcr aka + % \endtemplate) expanding \doitemize. + \def\item{\crcr}% + % + \tolerance=9500 + \hbadness=9500 + \setmultitablespacing + \parskip=\multitableparskip + \parindent=\multitableparindent + \overfullrule=0pt + \global\colcount=0 + % + \everycr = {% + \noalign{% + \global\everytab={}% + \global\colcount=0 % Reset the column counter. + % Check for saved footnotes, etc. + \checkinserts + % Keeps underfull box messages off when table breaks over pages. + %\filbreak + % Maybe so, but it also creates really weird page breaks when the + % table breaks over pages. Wouldn't \vfil be better? Wait until the + % problem manifests itself, so it can be fixed for real --karl. + }% + }% + % + \parsearg\domultitable +} +\def\domultitable#1{% + % To parse everything between @multitable and @item: + \setuptable#1 \endsetuptable + % + % This preamble sets up a generic column definition, which will + % be used as many times as user calls for columns. + % \vtop will set a single line and will also let text wrap and + % continue for many paragraphs if desired. + \halign\bgroup &% + \global\advance\colcount by 1 + \multistrut + \vtop{% + % Use the current \colcount to find the correct column width: + \hsize=\expandafter\csname col\the\colcount\endcsname + % + % In order to keep entries from bumping into each other + % we will add a \leftskip of \multitablecolspace to all columns after + % the first one. + % + % If a template has been used, we will add \multitablecolspace + % to the width of each template entry. + % + % If the user has set preamble in terms of percent of \hsize we will + % use that dimension as the width of the column, and the \leftskip + % will keep entries from bumping into each other. Table will start at + % left margin and final column will justify at right margin. + % + % Make sure we don't inherit \rightskip from the outer environment. + \rightskip=0pt + \ifnum\colcount=1 + % The first column will be indented with the surrounding text. + \advance\hsize by\leftskip + \else + \ifsetpercent \else + % If user has not set preamble in terms of percent of \hsize + % we will advance \hsize by \multitablecolspace. + \advance\hsize by \multitablecolspace + \fi + % In either case we will make \leftskip=\multitablecolspace: + \leftskip=\multitablecolspace + \fi + % Ignoring space at the beginning and end avoids an occasional spurious + % blank line, when TeX decides to break the line at the space before the + % box from the multistrut, so the strut ends up on a line by itself. + % For example: + % @multitable @columnfractions .11 .89 + % @item @code{#} + % @tab Legal holiday which is valid in major parts of the whole country. + % Is automatically provided with highlighting sequences respectively + % marking characters. + \noindent\ignorespaces##\unskip\multistrut + }\cr +} +\def\Emultitable{% + \crcr + \egroup % end the \halign + \global\setpercentfalse +} + +\def\setmultitablespacing{% + \def\multistrut{\strut}% just use the standard line spacing + % + % Compute \multitablelinespace (if not defined by user) for use in + % \multitableparskip calculation. We used define \multistrut based on + % this, but (ironically) that caused the spacing to be off. + % See bug-texinfo report from Werner Lemberg, 31 Oct 2004 12:52:20 +0100. +\ifdim\multitablelinespace=0pt +\setbox0=\vbox{X}\global\multitablelinespace=\the\baselineskip +\global\advance\multitablelinespace by-\ht0 +\fi +%% Test to see if parskip is larger than space between lines of +%% table. If not, do nothing. +%% If so, set to same dimension as multitablelinespace. +\ifdim\multitableparskip>\multitablelinespace +\global\multitableparskip=\multitablelinespace +\global\advance\multitableparskip-7pt %% to keep parskip somewhat smaller + %% than skip between lines in the table. +\fi% +\ifdim\multitableparskip=0pt +\global\multitableparskip=\multitablelinespace +\global\advance\multitableparskip-7pt %% to keep parskip somewhat smaller + %% than skip between lines in the table. +\fi} + + +\message{conditionals,} + +% @iftex, @ifnotdocbook, @ifnothtml, @ifnotinfo, @ifnotplaintext, +% @ifnotxml always succeed. They currently do nothing; we don't +% attempt to check whether the conditionals are properly nested. But we +% have to remember that they are conditionals, so that @end doesn't +% attempt to close an environment group. +% +\def\makecond#1{% + \expandafter\let\csname #1\endcsname = \relax + \expandafter\let\csname iscond.#1\endcsname = 1 +} +\makecond{iftex} +\makecond{ifnotdocbook} +\makecond{ifnothtml} +\makecond{ifnotinfo} +\makecond{ifnotplaintext} +\makecond{ifnotxml} + +% Ignore @ignore, @ifhtml, @ifinfo, and the like. +% +\def\direntry{\doignore{direntry}} +\def\documentdescription{\doignore{documentdescription}} +\def\docbook{\doignore{docbook}} +\def\html{\doignore{html}} +\def\ifdocbook{\doignore{ifdocbook}} +\def\ifhtml{\doignore{ifhtml}} +\def\ifinfo{\doignore{ifinfo}} +\def\ifnottex{\doignore{ifnottex}} +\def\ifplaintext{\doignore{ifplaintext}} +\def\ifxml{\doignore{ifxml}} +\def\ignore{\doignore{ignore}} +\def\menu{\doignore{menu}} +\def\xml{\doignore{xml}} + +% Ignore text until a line `@end #1', keeping track of nested conditionals. +% +% A count to remember the depth of nesting. +\newcount\doignorecount + +\def\doignore#1{\begingroup + % Scan in ``verbatim'' mode: + \catcode`\@ = \other + \catcode`\{ = \other + \catcode`\} = \other + % + % Make sure that spaces turn into tokens that match what \doignoretext wants. + \spaceisspace + % + % Count number of #1's that we've seen. + \doignorecount = 0 + % + % Swallow text until we reach the matching `@end #1'. + \dodoignore{#1}% +} + +{ \catcode`_=11 % We want to use \_STOP_ which cannot appear in texinfo source. + \obeylines % + % + \gdef\dodoignore#1{% + % #1 contains the command name as a string, e.g., `ifinfo'. + % + % Define a command to find the next `@end #1', which must be on a line + % by itself. + \long\def\doignoretext##1^^M at end #1{\doignoretextyyy##1^^M@#1\_STOP_}% + % And this command to find another #1 command, at the beginning of a + % line. (Otherwise, we would consider a line `@c @ifset', for + % example, to count as an @ifset for nesting.) + \long\def\doignoretextyyy##1^^M@#1##2\_STOP_{\doignoreyyy{##2}\_STOP_}% + % + % And now expand that command. + \obeylines % + \doignoretext ^^M% + }% +} + +\def\doignoreyyy#1{% + \def\temp{#1}% + \ifx\temp\empty % Nothing found. + \let\next\doignoretextzzz + \else % Found a nested condition, ... + \advance\doignorecount by 1 + \let\next\doignoretextyyy % ..., look for another. + % If we're here, #1 ends with ^^M\ifinfo (for example). + \fi + \next #1% the token \_STOP_ is present just after this macro. +} + +% We have to swallow the remaining "\_STOP_". +% +\def\doignoretextzzz#1{% + \ifnum\doignorecount = 0 % We have just found the outermost @end. + \let\next\enddoignore + \else % Still inside a nested condition. + \advance\doignorecount by -1 + \let\next\doignoretext % Look for the next @end. + \fi + \next +} + +% Finish off ignored text. +\def\enddoignore{\endgroup\ignorespaces} + + +% @set VAR sets the variable VAR to an empty value. +% @set VAR REST-OF-LINE sets VAR to the value REST-OF-LINE. +% +% Since we want to separate VAR from REST-OF-LINE (which might be +% empty), we can't just use \parsearg; we have to insert a space of our +% own to delimit the rest of the line, and then take it out again if we +% didn't need it. +% We rely on the fact that \parsearg sets \catcode`\ =10. +% +\parseargdef\set{\setyyy#1 \endsetyyy} +\def\setyyy#1 #2\endsetyyy{% + {% + \makevalueexpandable + \def\temp{#2}% + \edef\next{\gdef\makecsname{SET#1}}% + \ifx\temp\empty + \next{}% + \else + \setzzz#2\endsetzzz + \fi + }% +} +% Remove the trailing space \setxxx inserted. +\def\setzzz#1 \endsetzzz{\next{#1}} + +% @clear VAR clears (i.e., unsets) the variable VAR. +% +\parseargdef\clear{% + {% + \makevalueexpandable + \global\expandafter\let\csname SET#1\endcsname=\relax + }% +} + +% @value{foo} gets the text saved in variable foo. +\def\value{\begingroup\makevalueexpandable\valuexxx} +\def\valuexxx#1{\expandablevalue{#1}\endgroup} +{ + \catcode`\- = \active \catcode`\_ = \active + % + \gdef\makevalueexpandable{% + \let\value = \expandablevalue + % We don't want these characters active, ... + \catcode`\-=\other \catcode`\_=\other + % ..., but we might end up with active ones in the argument if + % we're called from @code, as @code{@value{foo-bar_}}, though. + % So \let them to their normal equivalents. + \let-\realdash \let_\normalunderscore + } +} + +% We have this subroutine so that we can handle at least some @value's +% properly in indexes (we call \makevalueexpandable in \indexdummies). +% The command has to be fully expandable (if the variable is set), since +% the result winds up in the index file. This means that if the +% variable's value contains other Texinfo commands, it's almost certain +% it will fail (although perhaps we could fix that with sufficient work +% to do a one-level expansion on the result, instead of complete). +% +\def\expandablevalue#1{% + \expandafter\ifx\csname SET#1\endcsname\relax + {[No value for ``#1'']}% + \message{Variable `#1', used in @value, is not set.}% + \else + \csname SET#1\endcsname + \fi +} + +% @ifset VAR ... @end ifset reads the `...' iff VAR has been defined +% with @set. +% +% To get special treatment of `@end ifset,' call \makeond and the redefine. +% +\makecond{ifset} +\def\ifset{\parsearg{\doifset{\let\next=\ifsetfail}}} +\def\doifset#1#2{% + {% + \makevalueexpandable + \let\next=\empty + \expandafter\ifx\csname SET#2\endcsname\relax + #1% If not set, redefine \next. + \fi + \expandafter + }\next +} +\def\ifsetfail{\doignore{ifset}} + +% @ifclear VAR ... @end ifclear reads the `...' iff VAR has never been +% defined with @set, or has been undefined with @clear. +% +% The `\else' inside the `\doifset' parameter is a trick to reuse the +% above code: if the variable is not set, do nothing, if it is set, +% then redefine \next to \ifclearfail. +% +\makecond{ifclear} +\def\ifclear{\parsearg{\doifset{\else \let\next=\ifclearfail}}} +\def\ifclearfail{\doignore{ifclear}} + +% @dircategory CATEGORY -- specify a category of the dir file +% which this file should belong to. Ignore this in TeX. +\let\dircategory=\comment + +% @defininfoenclose. +\let\definfoenclose=\comment + + +\message{indexing,} +% Index generation facilities + +% Define \newwrite to be identical to plain tex's \newwrite +% except not \outer, so it can be used within macros and \if's. +\edef\newwrite{\makecsname{ptexnewwrite}} + +% \newindex {foo} defines an index named foo. +% It automatically defines \fooindex such that +% \fooindex ...rest of line... puts an entry in the index foo. +% It also defines \fooindfile to be the number of the output channel for +% the file that accumulates this index. The file's extension is foo. +% The name of an index should be no more than 2 characters long +% for the sake of vms. +% +\def\newindex#1{% + \iflinks + \expandafter\newwrite \csname#1indfile\endcsname + \openout \csname#1indfile\endcsname \jobname.#1 % Open the file + \fi + \expandafter\xdef\csname#1index\endcsname{% % Define @#1index + \noexpand\doindex{#1}} +} + +% @defindex foo == \newindex{foo} +% +\def\defindex{\parsearg\newindex} + +% Define @defcodeindex, like @defindex except put all entries in @code. +% +\def\defcodeindex{\parsearg\newcodeindex} +% +\def\newcodeindex#1{% + \iflinks + \expandafter\newwrite \csname#1indfile\endcsname + \openout \csname#1indfile\endcsname \jobname.#1 + \fi + \expandafter\xdef\csname#1index\endcsname{% + \noexpand\docodeindex{#1}}% +} + + +% @synindex foo bar makes index foo feed into index bar. +% Do this instead of @defindex foo if you don't want it as a separate index. +% +% @syncodeindex foo bar similar, but put all entries made for index foo +% inside @code. +% +\def\synindex#1 #2 {\dosynindex\doindex{#1}{#2}} +\def\syncodeindex#1 #2 {\dosynindex\docodeindex{#1}{#2}} + +% #1 is \doindex or \docodeindex, #2 the index getting redefined (foo), +% #3 the target index (bar). +\def\dosynindex#1#2#3{% + % Only do \closeout if we haven't already done it, else we'll end up + % closing the target index. + \expandafter \ifx\csname donesynindex#2\endcsname \undefined + % The \closeout helps reduce unnecessary open files; the limit on the + % Acorn RISC OS is a mere 16 files. + \expandafter\closeout\csname#2indfile\endcsname + \expandafter\let\csname\donesynindex#2\endcsname = 1 + \fi + % redefine \fooindfile: + \expandafter\let\expandafter\temp\expandafter=\csname#3indfile\endcsname + \expandafter\let\csname#2indfile\endcsname=\temp + % redefine \fooindex: + \expandafter\xdef\csname#2index\endcsname{\noexpand#1{#3}}% +} + +% Define \doindex, the driver for all \fooindex macros. +% Argument #1 is generated by the calling \fooindex macro, +% and it is "foo", the name of the index. + +% \doindex just uses \parsearg; it calls \doind for the actual work. +% This is because \doind is more useful to call from other macros. + +% There is also \dosubind {index}{topic}{subtopic} +% which makes an entry in a two-level index such as the operation index. + +\def\doindex#1{\edef\indexname{#1}\parsearg\singleindexer} +\def\singleindexer #1{\doind{\indexname}{#1}} + +% like the previous two, but they put @code around the argument. +\def\docodeindex#1{\edef\indexname{#1}\parsearg\singlecodeindexer} +\def\singlecodeindexer #1{\doind{\indexname}{\code{#1}}} + +% Take care of Texinfo commands that can appear in an index entry. +% Since there are some commands we want to expand, and others we don't, +% we have to laboriously prevent expansion for those that we don't. +% +\def\indexdummies{% + \escapechar = `\\ % use backslash in output files. + \def\@{@}% change to @@ when we switch to @ as escape char in index files. + \def\ {\realbackslash\space }% + % Need these in case \tex is in effect and \{ is a \delimiter again. + % But can't use \lbracecmd and \rbracecmd because texindex assumes + % braces and backslashes are used only as delimiters. + \let\{ = \mylbrace + \let\} = \myrbrace + % + % Do the redefinitions. + \commondummies +} + +% For the aux and toc files, @ is the escape character. So we want to +% redefine everything using @ as the escape character (instead of +% \realbackslash, still used for index files). When everything uses @, +% this will be simpler. +% +\def\atdummies{% + \def\@{@@}% + \def\ {@ }% + \let\{ = \lbraceatcmd + \let\} = \rbraceatcmd + % + % Do the redefinitions. + \commondummies +} + +% Called from \indexdummies and \atdummies. +% +\def\commondummies{% + % + % \definedummyword defines \#1 as \string\#1\space, thus effectively + % preventing its expansion. This is used only for control% words, + % not control letters, because the \space would be incorrect for + % control characters, but is needed to separate the control word + % from whatever follows. + % + % For control letters, we have \definedummyletter, which omits the + % space. + % + % These can be used both for control words that take an argument and + % those that do not. If it is followed by {arg} in the input, then + % that will dutifully get written to the index (or wherever). + % + \def\definedummyword ##1{\def##1{\string##1\space}}% + \def\definedummyletter##1{\def##1{\string##1}}% + \let\definedummyaccent\definedummyletter + % + \commondummiesnofonts + % + \definedummyletter\_% + % + % Non-English letters. + \definedummyword\AA + \definedummyword\AE + \definedummyword\L + \definedummyword\OE + \definedummyword\O + \definedummyword\aa + \definedummyword\ae + \definedummyword\l + \definedummyword\oe + \definedummyword\o + \definedummyword\ss + \definedummyword\exclamdown + \definedummyword\questiondown + \definedummyword\ordf + \definedummyword\ordm + % + % Although these internal commands shouldn't show up, sometimes they do. + \definedummyword\bf + \definedummyword\gtr + \definedummyword\hat + \definedummyword\less + \definedummyword\sf + \definedummyword\sl + \definedummyword\tclose + \definedummyword\tt + % + \definedummyword\LaTeX + \definedummyword\TeX + % + % Assorted special characters. + \definedummyword\bullet + \definedummyword\comma + \definedummyword\copyright + \definedummyword\registeredsymbol + \definedummyword\dots + \definedummyword\enddots + \definedummyword\equiv + \definedummyword\error + \definedummyword\euro + \definedummyword\expansion + \definedummyword\minus + \definedummyword\pounds + \definedummyword\point + \definedummyword\print + \definedummyword\result + % + % We want to disable all macros so that they are not expanded by \write. + \macrolist + % + \normalturnoffactive + % + % Handle some cases of @value -- where it does not contain any + % (non-fully-expandable) commands. + \makevalueexpandable +} + +% \commondummiesnofonts: common to \commondummies and \indexnofonts. +% +% Better have this without active chars. +{ + \catcode`\~=\other + \gdef\commondummiesnofonts{% + % Control letters and accents. + \definedummyletter\!% + \definedummyaccent\"% + \definedummyaccent\'% + \definedummyletter\*% + \definedummyaccent\,% + \definedummyletter\.% + \definedummyletter\/% + \definedummyletter\:% + \definedummyaccent\=% + \definedummyletter\?% + \definedummyaccent\^% + \definedummyaccent\`% + \definedummyaccent\~% + \definedummyword\u + \definedummyword\v + \definedummyword\H + \definedummyword\dotaccent + \definedummyword\ringaccent + \definedummyword\tieaccent + \definedummyword\ubaraccent + \definedummyword\udotaccent + \definedummyword\dotless + % + % Texinfo font commands. + \definedummyword\b + \definedummyword\i + \definedummyword\r + \definedummyword\sc + \definedummyword\t + % + % Commands that take arguments. + \definedummyword\acronym + \definedummyword\cite + \definedummyword\code + \definedummyword\command + \definedummyword\dfn + \definedummyword\emph + \definedummyword\env + \definedummyword\file + \definedummyword\kbd + \definedummyword\key + \definedummyword\math + \definedummyword\option + \definedummyword\samp + \definedummyword\strong + \definedummyword\tie + \definedummyword\uref + \definedummyword\url + \definedummyword\var + \definedummyword\verb + \definedummyword\w + } +} + +% \indexnofonts is used when outputting the strings to sort the index +% by, and when constructing control sequence names. It eliminates all +% control sequences and just writes whatever the best ASCII sort string +% would be for a given command (usually its argument). +% +\def\indexnofonts{% + % Accent commands should become @asis. + \def\definedummyaccent##1{\let##1\asis}% + % We can just ignore other control letters. + \def\definedummyletter##1{\let##1\empty}% + % Hopefully, all control words can become @asis. + \let\definedummyword\definedummyaccent + % + \commondummiesnofonts + % + % Don't no-op \tt, since it isn't a user-level command + % and is used in the definitions of the active chars like <, >, |, etc. + % Likewise with the other plain tex font commands. + %\let\tt=\asis + % + \def\ { }% + \def\@{@}% + % how to handle braces? + \def\_{\normalunderscore}% + % + % Non-English letters. + \def\AA{AA}% + \def\AE{AE}% + \def\L{L}% + \def\OE{OE}% + \def\O{O}% + \def\aa{aa}% + \def\ae{ae}% + \def\l{l}% + \def\oe{oe}% + \def\o{o}% + \def\ss{ss}% + \def\exclamdown{!}% + \def\questiondown{?}% + \def\ordf{a}% + \def\ordm{o}% + % + \def\LaTeX{LaTeX}% + \def\TeX{TeX}% + % + % Assorted special characters. + % (The following {} will end up in the sort string, but that's ok.) + \def\bullet{bullet}% + \def\comma{,}% + \def\copyright{copyright}% + \def\registeredsymbol{R}% + \def\dots{...}% + \def\enddots{...}% + \def\equiv{==}% + \def\error{error}% + \def\euro{euro}% + \def\expansion{==>}% + \def\minus{-}% + \def\pounds{pounds}% + \def\point{.}% + \def\print{-|}% + \def\result{=>}% + % + % We need to get rid of all macros, leaving only the arguments (if present). + % Of course this is not nearly correct, but it is the best we can do for now. + % makeinfo does not expand macros in the argument to @deffn, which ends up + % writing an index entry, and texindex isn't prepared for an index sort entry + % that starts with \. + % + % Since macro invocations are followed by braces, we can just redefine them + % to take a single TeX argument. The case of a macro invocation that + % goes to end-of-line is not handled. + % + \macrolist +} + +\let\indexbackslash=0 %overridden during \printindex. +\let\SETmarginindex=\relax % put index entries in margin (undocumented)? + +% Most index entries go through here, but \dosubind is the general case. +% #1 is the index name, #2 is the entry text. +\def\doind#1#2{\dosubind{#1}{#2}{}} + +% Workhorse for all \fooindexes. +% #1 is name of index, #2 is stuff to put there, #3 is subentry -- +% empty if called from \doind, as we usually are (the main exception +% is with most defuns, which call us directly). +% +\def\dosubind#1#2#3{% + \iflinks + {% + % Store the main index entry text (including the third arg). + \toks0 = {#2}% + % If third arg is present, precede it with a space. + \def\thirdarg{#3}% + \ifx\thirdarg\empty \else + \toks0 = \expandafter{\the\toks0 \space #3}% + \fi + % + \edef\writeto{\csname#1indfile\endcsname}% + % + \ifvmode + \dosubindsanitize + \else + \dosubindwrite + \fi + }% + \fi +} + +% Write the entry in \toks0 to the index file: +% +\def\dosubindwrite{% + % Put the index entry in the margin if desired. + \ifx\SETmarginindex\relax\else + \insert\margin{\hbox{\vrule height8pt depth3pt width0pt \the\toks0}}% + \fi + % + % Remember, we are within a group. + \indexdummies % Must do this here, since \bf, etc expand at this stage + \def\backslashcurfont{\indexbackslash}% \indexbackslash isn't defined now + % so it will be output as is; and it will print as backslash. + % + % Process the index entry with all font commands turned off, to + % get the string to sort by. + {\indexnofonts + \edef\temp{\the\toks0}% need full expansion + \xdef\indexsorttmp{\temp}% + }% + % + % Set up the complete index entry, with both the sort key and + % the original text, including any font commands. We write + % three arguments to \entry to the .?? file (four in the + % subentry case), texindex reduces to two when writing the .??s + % sorted result. + \edef\temp{% + \write\writeto{% + \string\entry{\indexsorttmp}{\noexpand\folio}{\the\toks0}}% + }% + \temp +} + +% Take care of unwanted page breaks: +% +% If a skip is the last thing on the list now, preserve it +% by backing up by \lastskip, doing the \write, then inserting +% the skip again. Otherwise, the whatsit generated by the +% \write will make \lastskip zero. The result is that sequences +% like this: +% @end defun +% @tindex whatever +% @defun ... +% will have extra space inserted, because the \medbreak in the +% start of the @defun won't see the skip inserted by the @end of +% the previous defun. +% +% But don't do any of this if we're not in vertical mode. We +% don't want to do a \vskip and prematurely end a paragraph. +% +% Avoid page breaks due to these extra skips, too. +% +% But wait, there is a catch there: +% We'll have to check whether \lastskip is zero skip. \ifdim is not +% sufficient for this purpose, as it ignores stretch and shrink parts +% of the skip. The only way seems to be to check the textual +% representation of the skip. +% +% The following is almost like \def\zeroskipmacro{0.0pt} except that +% the ``p'' and ``t'' characters have catcode \other, not 11 (letter). +% +\edef\zeroskipmacro{\expandafter\the\csname z at skip\endcsname} +% +% ..., ready, GO: +% +\def\dosubindsanitize{% + % \lastskip and \lastpenalty cannot both be nonzero simultaneously. + \skip0 = \lastskip + \edef\lastskipmacro{\the\lastskip}% + \count255 = \lastpenalty + % + % If \lastskip is nonzero, that means the last item was a + % skip. And since a skip is discardable, that means this + % -\skip0 glue we're inserting is preceded by a + % non-discardable item, therefore it is not a potential + % breakpoint, therefore no \nobreak needed. + \ifx\lastskipmacro\zeroskipmacro + \else + \vskip-\skip0 + \fi + % + \dosubindwrite + % + \ifx\lastskipmacro\zeroskipmacro + % If \lastskip was zero, perhaps the last item was a penalty, and + % perhaps it was >=10000, e.g., a \nobreak. In that case, we want + % to re-insert the same penalty (values >10000 are used for various + % signals); since we just inserted a non-discardable item, any + % following glue (such as a \parskip) would be a breakpoint. For example: + % + % @deffn deffn-whatever + % @vindex index-whatever + % Description. + % would allow a break between the index-whatever whatsit + % and the "Description." paragraph. + \ifnum\count255>9999 \penalty\count255 \fi + \else + % On the other hand, if we had a nonzero \lastskip, + % this make-up glue would be preceded by a non-discardable item + % (the whatsit from the \write), so we must insert a \nobreak. + \nobreak\vskip\skip0 + \fi +} + +% The index entry written in the file actually looks like +% \entry {sortstring}{page}{topic} +% or +% \entry {sortstring}{page}{topic}{subtopic} +% The texindex program reads in these files and writes files +% containing these kinds of lines: +% \initial {c} +% before the first topic whose initial is c +% \entry {topic}{pagelist} +% for a topic that is used without subtopics +% \primary {topic} +% for the beginning of a topic that is used with subtopics +% \secondary {subtopic}{pagelist} +% for each subtopic. + +% Define the user-accessible indexing commands +% @findex, @vindex, @kindex, @cindex. + +\def\findex {\fnindex} +\def\kindex {\kyindex} +\def\cindex {\cpindex} +\def\vindex {\vrindex} +\def\tindex {\tpindex} +\def\pindex {\pgindex} + +\def\cindexsub {\begingroup\obeylines\cindexsub} +{\obeylines % +\gdef\cindexsub "#1" #2^^M{\endgroup % +\dosubind{cp}{#2}{#1}}} + +% Define the macros used in formatting output of the sorted index material. + +% @printindex causes a particular index (the ??s file) to get printed. +% It does not print any chapter heading (usually an @unnumbered). +% +\parseargdef\printindex{\begingroup + \dobreak \chapheadingskip{10000}% + % + \smallfonts \rm + \tolerance = 9500 + \everypar = {}% don't want the \kern\-parindent from indentation suppression. + % + % See if the index file exists and is nonempty. + % Change catcode of @ here so that if the index file contains + % \initial {@} + % as its first line, TeX doesn't complain about mismatched braces + % (because it thinks @} is a control sequence). + \catcode`\@ = 11 + \openin 1 \jobname.#1s + \ifeof 1 + % \enddoublecolumns gets confused if there is no text in the index, + % and it loses the chapter title and the aux file entries for the + % index. The easiest way to prevent this problem is to make sure + % there is some text. + \putwordIndexNonexistent + \else + % + % If the index file exists but is empty, then \openin leaves \ifeof + % false. We have to make TeX try to read something from the file, so + % it can discover if there is anything in it. + \read 1 to \temp + \ifeof 1 + \putwordIndexIsEmpty + \else + % Index files are almost Texinfo source, but we use \ as the escape + % character. It would be better to use @, but that's too big a change + % to make right now. + \def\indexbackslash{\backslashcurfont}% + \catcode`\\ = 0 + \escapechar = `\\ + \begindoublecolumns + \input \jobname.#1s + \enddoublecolumns + \fi + \fi + \closein 1 +\endgroup} + +% These macros are used by the sorted index file itself. +% Change them to control the appearance of the index. + +\def\initial#1{{% + % Some minor font changes for the special characters. + \let\tentt=\sectt \let\tt=\sectt \let\sf=\sectt + % + % Remove any glue we may have, we'll be inserting our own. + \removelastskip + % + % We like breaks before the index initials, so insert a bonus. + \nobreak + \vskip 0pt plus 3\baselineskip + \penalty 0 + \vskip 0pt plus -3\baselineskip + % + % Typeset the initial. Making this add up to a whole number of + % baselineskips increases the chance of the dots lining up from column + % to column. It still won't often be perfect, because of the stretch + % we need before each entry, but it's better. + % + % No shrink because it confuses \balancecolumns. + \vskip 1.67\baselineskip plus .5\baselineskip + \leftline{\secbf #1}% + % Do our best not to break after the initial. + \nobreak + \vskip .33\baselineskip plus .1\baselineskip +}} + +% \entry typesets a paragraph consisting of the text (#1), dot leaders, and +% then page number (#2) flushed to the right margin. It is used for index +% and table of contents entries. The paragraph is indented by \leftskip. +% +% A straightforward implementation would start like this: +% \def\entry#1#2{... +% But this frozes the catcodes in the argument, and can cause problems to +% @code, which sets - active. This problem was fixed by a kludge--- +% ``-'' was active throughout whole index, but this isn't really right. +% +% The right solution is to prevent \entry from swallowing the whole text. +% --kasal, 21nov03 +\def\entry{% + \begingroup + % + % Start a new paragraph if necessary, so our assignments below can't + % affect previous text. + \par + % + % Do not fill out the last line with white space. + \parfillskip = 0in + % + % No extra space above this paragraph. + \parskip = 0in + % + % Do not prefer a separate line ending with a hyphen to fewer lines. + \finalhyphendemerits = 0 + % + % \hangindent is only relevant when the entry text and page number + % don't both fit on one line. In that case, bob suggests starting the + % dots pretty far over on the line. Unfortunately, a large + % indentation looks wrong when the entry text itself is broken across + % lines. So we use a small indentation and put up with long leaders. + % + % \hangafter is reset to 1 (which is the value we want) at the start + % of each paragraph, so we need not do anything with that. + \hangindent = 2em + % + % When the entry text needs to be broken, just fill out the first line + % with blank space. + \rightskip = 0pt plus1fil + % + % A bit of stretch before each entry for the benefit of balancing + % columns. + \vskip 0pt plus1pt + % + % Swallow the left brace of the text (first parameter): + \afterassignment\doentry + \let\temp = +} +\def\doentry{% + \bgroup % Instead of the swallowed brace. + \noindent + \aftergroup\finishentry + % And now comes the text of the entry. +} +\def\finishentry#1{% + % #1 is the page number. + % + % The following is kludged to not output a line of dots in the index if + % there are no page numbers. The next person who breaks this will be + % cursed by a Unix daemon. + \def\tempa{{\rm }}% + \def\tempb{#1}% + \edef\tempc{\tempa}% + \edef\tempd{\tempb}% + \ifx\tempc\tempd + \ % + \else + % + % If we must, put the page number on a line of its own, and fill out + % this line with blank space. (The \hfil is overwhelmed with the + % fill leaders glue in \indexdotfill if the page number does fit.) + \hfil\penalty50 + \null\nobreak\indexdotfill % Have leaders before the page number. + % + % The `\ ' here is removed by the implicit \unskip that TeX does as + % part of (the primitive) \par. Without it, a spurious underfull + % \hbox ensues. + \ifpdf + \pdfgettoks#1.% + \ \the\toksA + \else + \ #1% + \fi + \fi + \par + \endgroup +} + +% Like \dotfill except takes at least 1 em. +\def\indexdotfill{\cleaders + \hbox{$\mathsurround=0pt \mkern1.5mu ${\it .}$ \mkern1.5mu$}\hskip 1em plus 1fill} + +\def\primary #1{\line{#1\hfil}} + +\newskip\secondaryindent \secondaryindent=0.5cm +\def\secondary#1#2{{% + \parfillskip=0in + \parskip=0in + \hangindent=1in + \hangafter=1 + \noindent\hskip\secondaryindent\hbox{#1}\indexdotfill + \ifpdf + \pdfgettoks#2.\ \the\toksA % The page number ends the paragraph. + \else + #2 + \fi + \par +}} + +% Define two-column mode, which we use to typeset indexes. +% Adapted from the TeXbook, page 416, which is to say, +% the manmac.tex format used to print the TeXbook itself. +\catcode`\@=11 + +\newbox\partialpage +\newdimen\doublecolumnhsize + +\def\begindoublecolumns{\begingroup % ended by \enddoublecolumns + % Grab any single-column material above us. + \output = {% + % + % Here is a possibility not foreseen in manmac: if we accumulate a + % whole lot of material, we might end up calling this \output + % routine twice in a row (see the doublecol-lose test, which is + % essentially a couple of indexes with @setchapternewpage off). In + % that case we just ship out what is in \partialpage with the normal + % output routine. Generally, \partialpage will be empty when this + % runs and this will be a no-op. See the indexspread.tex test case. + \ifvoid\partialpage \else + \onepageout{\pagecontents\partialpage}% + \fi + % + \global\setbox\partialpage = \vbox{% + % Unvbox the main output page. + \unvbox\PAGE + \kern-\topskip \kern\baselineskip + }% + }% + \eject % run that output routine to set \partialpage + % + % Use the double-column output routine for subsequent pages. + \output = {\doublecolumnout}% + % + % Change the page size parameters. We could do this once outside this + % routine, in each of @smallbook, @afourpaper, and the default 8.5x11 + % format, but then we repeat the same computation. Repeating a couple + % of assignments once per index is clearly meaningless for the + % execution time, so we may as well do it in one place. + % + % First we halve the line length, less a little for the gutter between + % the columns. We compute the gutter based on the line length, so it + % changes automatically with the paper format. The magic constant + % below is chosen so that the gutter has the same value (well, +-<1pt) + % as it did when we hard-coded it. + % + % We put the result in a separate register, \doublecolumhsize, so we + % can restore it in \pagesofar, after \hsize itself has (potentially) + % been clobbered. + % + \doublecolumnhsize = \hsize + \advance\doublecolumnhsize by -.04154\hsize + \divide\doublecolumnhsize by 2 + \hsize = \doublecolumnhsize + % + % Double the \vsize as well. (We don't need a separate register here, + % since nobody clobbers \vsize.) + \vsize = 2\vsize +} + +% The double-column output routine for all double-column pages except +% the last. +% +\def\doublecolumnout{% + \splittopskip=\topskip \splitmaxdepth=\maxdepth + % Get the available space for the double columns -- the normal + % (undoubled) page height minus any material left over from the + % previous page. + \dimen@ = \vsize + \divide\dimen@ by 2 + \advance\dimen@ by -\ht\partialpage + % + % box0 will be the left-hand column, box2 the right. + \setbox0=\vsplit255 to\dimen@ \setbox2=\vsplit255 to\dimen@ + \onepageout\pagesofar + \unvbox255 + \penalty\outputpenalty +} +% +% Re-output the contents of the output page -- any previous material, +% followed by the two boxes we just split, in box0 and box2. +\def\pagesofar{% + \unvbox\partialpage + % + \hsize = \doublecolumnhsize + \wd0=\hsize \wd2=\hsize + \hbox to\pagewidth{\box0\hfil\box2}% +} +% +% All done with double columns. +\def\enddoublecolumns{% + \output = {% + % Split the last of the double-column material. Leave it on the + % current page, no automatic page break. + \balancecolumns + % + % If we end up splitting too much material for the current page, + % though, there will be another page break right after this \output + % invocation ends. Having called \balancecolumns once, we do not + % want to call it again. Therefore, reset \output to its normal + % definition right away. (We hope \balancecolumns will never be + % called on to balance too much material, but if it is, this makes + % the output somewhat more palatable.) + \global\output = {\onepageout{\pagecontents\PAGE}}% + }% + \eject + \endgroup % started in \begindoublecolumns + % + % \pagegoal was set to the doubled \vsize above, since we restarted + % the current page. We're now back to normal single-column + % typesetting, so reset \pagegoal to the normal \vsize (after the + % \endgroup where \vsize got restored). + \pagegoal = \vsize +} +% +% Called at the end of the double column material. +\def\balancecolumns{% + \setbox0 = \vbox{\unvbox255}% like \box255 but more efficient, see p.120. + \dimen@ = \ht0 + \advance\dimen@ by \topskip + \advance\dimen@ by-\baselineskip + \divide\dimen@ by 2 % target to split to + %debug\message{final 2-column material height=\the\ht0, target=\the\dimen at .}% + \splittopskip = \topskip + % Loop until we get a decent breakpoint. + {% + \vbadness = 10000 + \loop + \global\setbox3 = \copy0 + \global\setbox1 = \vsplit3 to \dimen@ + \ifdim\ht3>\dimen@ + \global\advance\dimen@ by 1pt + \repeat + }% + %debug\message{split to \the\dimen@, column heights: \the\ht1, \the\ht3.}% + \setbox0=\vbox to\dimen@{\unvbox1}% + \setbox2=\vbox to\dimen@{\unvbox3}% + % + \pagesofar +} +\catcode`\@ = \other + + +\message{sectioning,} +% Chapters, sections, etc. + +% \unnumberedno is an oxymoron, of course. But we count the unnumbered +% sections so that we can refer to them unambiguously in the pdf +% outlines by their "section number". We avoid collisions with chapter +% numbers by starting them at 10000. (If a document ever has 10000 +% chapters, we're in trouble anyway, I'm sure.) +\newcount\unnumberedno \unnumberedno = 10000 +\newcount\chapno +\newcount\secno \secno=0 +\newcount\subsecno \subsecno=0 +\newcount\subsubsecno \subsubsecno=0 + +% This counter is funny since it counts through charcodes of letters A, B, ... +\newcount\appendixno \appendixno = `\@ +% +% \def\appendixletter{\char\the\appendixno} +% We do the following ugly conditional instead of the above simple +% construct for the sake of pdftex, which needs the actual +% letter in the expansion, not just typeset. +% +\def\appendixletter{% + \ifnum\appendixno=`A A% + \else\ifnum\appendixno=`B B% + \else\ifnum\appendixno=`C C% + \else\ifnum\appendixno=`D D% + \else\ifnum\appendixno=`E E% + \else\ifnum\appendixno=`F F% + \else\ifnum\appendixno=`G G% + \else\ifnum\appendixno=`H H% + \else\ifnum\appendixno=`I I% + \else\ifnum\appendixno=`J J% + \else\ifnum\appendixno=`K K% + \else\ifnum\appendixno=`L L% + \else\ifnum\appendixno=`M M% + \else\ifnum\appendixno=`N N% + \else\ifnum\appendixno=`O O% + \else\ifnum\appendixno=`P P% + \else\ifnum\appendixno=`Q Q% + \else\ifnum\appendixno=`R R% + \else\ifnum\appendixno=`S S% + \else\ifnum\appendixno=`T T% + \else\ifnum\appendixno=`U U% + \else\ifnum\appendixno=`V V% + \else\ifnum\appendixno=`W W% + \else\ifnum\appendixno=`X X% + \else\ifnum\appendixno=`Y Y% + \else\ifnum\appendixno=`Z Z% + % The \the is necessary, despite appearances, because \appendixletter is + % expanded while writing the .toc file. \char\appendixno is not + % expandable, thus it is written literally, thus all appendixes come out + % with the same letter (or @) in the toc without it. + \else\char\the\appendixno + \fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi + \fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi} + +% Each @chapter defines this as the name of the chapter. +% page headings and footings can use it. @section does likewise. +% However, they are not reliable, because we don't use marks. +\def\thischapter{} +\def\thissection{} + +\newcount\absseclevel % used to calculate proper heading level +\newcount\secbase\secbase=0 % @raisesections/@lowersections modify this count + +% @raisesections: treat @section as chapter, @subsection as section, etc. +\def\raisesections{\global\advance\secbase by -1} +\let\up=\raisesections % original BFox name + +% @lowersections: treat @chapter as section, @section as subsection, etc. +\def\lowersections{\global\advance\secbase by 1} +\let\down=\lowersections % original BFox name + +% we only have subsub. +\chardef\maxseclevel = 3 +% +% A numbered section within an unnumbered changes to unnumbered too. +% To achive this, remember the "biggest" unnum. sec. we are currently in: +\chardef\unmlevel = \maxseclevel +% +% Trace whether the current chapter is an appendix or not: +% \chapheadtype is "N" or "A", unnumbered chapters are ignored. +\def\chapheadtype{N} + +% Choose a heading macro +% #1 is heading type +% #2 is heading level +% #3 is text for heading +\def\genhead#1#2#3{% + % Compute the abs. sec. level: + \absseclevel=#2 + \advance\absseclevel by \secbase + % Make sure \absseclevel doesn't fall outside the range: + \ifnum \absseclevel < 0 + \absseclevel = 0 + \else + \ifnum \absseclevel > 3 + \absseclevel = 3 + \fi + \fi + % The heading type: + \def\headtype{#1}% + \if \headtype U% + \ifnum \absseclevel < \unmlevel + \chardef\unmlevel = \absseclevel + \fi + \else + % Check for appendix sections: + \ifnum \absseclevel = 0 + \edef\chapheadtype{\headtype}% + \else + \if \headtype A\if \chapheadtype N% + \errmessage{@appendix... within a non-appendix chapter}% + \fi\fi + \fi + % Check for numbered within unnumbered: + \ifnum \absseclevel > \unmlevel + \def\headtype{U}% + \else + \chardef\unmlevel = 3 + \fi + \fi + % Now print the heading: + \if \headtype U% + \ifcase\absseclevel + \unnumberedzzz{#3}% + \or \unnumberedseczzz{#3}% + \or \unnumberedsubseczzz{#3}% + \or \unnumberedsubsubseczzz{#3}% + \fi + \else + \if \headtype A% + \ifcase\absseclevel + \appendixzzz{#3}% + \or \appendixsectionzzz{#3}% + \or \appendixsubseczzz{#3}% + \or \appendixsubsubseczzz{#3}% + \fi + \else + \ifcase\absseclevel + \chapterzzz{#3}% + \or \seczzz{#3}% + \or \numberedsubseczzz{#3}% + \or \numberedsubsubseczzz{#3}% + \fi + \fi + \fi + \suppressfirstparagraphindent +} + +% an interface: +\def\numhead{\genhead N} +\def\apphead{\genhead A} +\def\unnmhead{\genhead U} + +% @chapter, @appendix, @unnumbered. Increment top-level counter, reset +% all lower-level sectioning counters to zero. +% +% Also set \chaplevelprefix, which we prepend to @float sequence numbers +% (e.g., figures), q.v. By default (before any chapter), that is empty. +\let\chaplevelprefix = \empty +% +\outer\parseargdef\chapter{\numhead0{#1}} % normally numhead0 calls chapterzzz +\def\chapterzzz#1{% + % section resetting is \global in case the chapter is in a group, such + % as an @include file. + \global\secno=0 \global\subsecno=0 \global\subsubsecno=0 + \global\advance\chapno by 1 + % + % Used for \float. + \gdef\chaplevelprefix{\the\chapno.}% + \resetallfloatnos + % + \message{\putwordChapter\space \the\chapno}% + % + % Write the actual heading. + \chapmacro{#1}{Ynumbered}{\the\chapno}% + % + % So @section and the like are numbered underneath this chapter. + \global\let\section = \numberedsec + \global\let\subsection = \numberedsubsec + \global\let\subsubsection = \numberedsubsubsec +} + +\outer\parseargdef\appendix{\apphead0{#1}} % normally apphead0 calls appendixzzz +\def\appendixzzz#1{% + \global\secno=0 \global\subsecno=0 \global\subsubsecno=0 + \global\advance\appendixno by 1 + \gdef\chaplevelprefix{\appendixletter.}% + \resetallfloatnos + % + \def\appendixnum{\putwordAppendix\space \appendixletter}% + \message{\appendixnum}% + % + \chapmacro{#1}{Yappendix}{\appendixletter}% + % + \global\let\section = \appendixsec + \global\let\subsection = \appendixsubsec + \global\let\subsubsection = \appendixsubsubsec +} + +\outer\parseargdef\unnumbered{\unnmhead0{#1}} % normally unnmhead0 calls unnumberedzzz +\def\unnumberedzzz#1{% + \global\secno=0 \global\subsecno=0 \global\subsubsecno=0 + \global\advance\unnumberedno by 1 + % + % Since an unnumbered has no number, no prefix for figures. + \global\let\chaplevelprefix = \empty + \resetallfloatnos + % + % This used to be simply \message{#1}, but TeX fully expands the + % argument to \message. Therefore, if #1 contained @-commands, TeX + % expanded them. For example, in `@unnumbered The @cite{Book}', TeX + % expanded @cite (which turns out to cause errors because \cite is meant + % to be executed, not expanded). + % + % Anyway, we don't want the fully-expanded definition of @cite to appear + % as a result of the \message, we just want `@cite' itself. We use + % \the to achieve this: TeX expands \the only once, + % simply yielding the contents of . (We also do this for + % the toc entries.) + \toks0 = {#1}% + \message{(\the\toks0)}% + % + \chapmacro{#1}{Ynothing}{\the\unnumberedno}% + % + \global\let\section = \unnumberedsec + \global\let\subsection = \unnumberedsubsec + \global\let\subsubsection = \unnumberedsubsubsec +} + +% @centerchap is like @unnumbered, but the heading is centered. +\outer\parseargdef\centerchap{% + % Well, we could do the following in a group, but that would break + % an assumption that \chapmacro is called at the outermost level. + % Thus we are safer this way: --kasal, 24feb04 + \let\centerparametersmaybe = \centerparameters + \unnmhead0{#1}% + \let\centerparametersmaybe = \relax +} + +% @top is like @unnumbered. +\let\top\unnumbered + +% Sections. +\outer\parseargdef\numberedsec{\numhead1{#1}} % normally calls seczzz +\def\seczzz#1{% + \global\subsecno=0 \global\subsubsecno=0 \global\advance\secno by 1 + \sectionheading{#1}{sec}{Ynumbered}{\the\chapno.\the\secno}% +} + +\outer\parseargdef\appendixsection{\apphead1{#1}} % normally calls appendixsectionzzz +\def\appendixsectionzzz#1{% + \global\subsecno=0 \global\subsubsecno=0 \global\advance\secno by 1 + \sectionheading{#1}{sec}{Yappendix}{\appendixletter.\the\secno}% +} +\let\appendixsec\appendixsection + +\outer\parseargdef\unnumberedsec{\unnmhead1{#1}} % normally calls unnumberedseczzz +\def\unnumberedseczzz#1{% + \global\subsecno=0 \global\subsubsecno=0 \global\advance\secno by 1 + \sectionheading{#1}{sec}{Ynothing}{\the\unnumberedno.\the\secno}% +} + +% Subsections. +\outer\parseargdef\numberedsubsec{\numhead2{#1}} % normally calls numberedsubseczzz +\def\numberedsubseczzz#1{% + \global\subsubsecno=0 \global\advance\subsecno by 1 + \sectionheading{#1}{subsec}{Ynumbered}{\the\chapno.\the\secno.\the\subsecno}% +} + +\outer\parseargdef\appendixsubsec{\apphead2{#1}} % normally calls appendixsubseczzz +\def\appendixsubseczzz#1{% + \global\subsubsecno=0 \global\advance\subsecno by 1 + \sectionheading{#1}{subsec}{Yappendix}% + {\appendixletter.\the\secno.\the\subsecno}% +} + +\outer\parseargdef\unnumberedsubsec{\unnmhead2{#1}} %normally calls unnumberedsubseczzz +\def\unnumberedsubseczzz#1{% + \global\subsubsecno=0 \global\advance\subsecno by 1 + \sectionheading{#1}{subsec}{Ynothing}% + {\the\unnumberedno.\the\secno.\the\subsecno}% +} + +% Subsubsections. +\outer\parseargdef\numberedsubsubsec{\numhead3{#1}} % normally numberedsubsubseczzz +\def\numberedsubsubseczzz#1{% + \global\advance\subsubsecno by 1 + \sectionheading{#1}{subsubsec}{Ynumbered}% + {\the\chapno.\the\secno.\the\subsecno.\the\subsubsecno}% +} + +\outer\parseargdef\appendixsubsubsec{\apphead3{#1}} % normally appendixsubsubseczzz +\def\appendixsubsubseczzz#1{% + \global\advance\subsubsecno by 1 + \sectionheading{#1}{subsubsec}{Yappendix}% + {\appendixletter.\the\secno.\the\subsecno.\the\subsubsecno}% +} + +\outer\parseargdef\unnumberedsubsubsec{\unnmhead3{#1}} %normally unnumberedsubsubseczzz +\def\unnumberedsubsubseczzz#1{% + \global\advance\subsubsecno by 1 + \sectionheading{#1}{subsubsec}{Ynothing}% + {\the\unnumberedno.\the\secno.\the\subsecno.\the\subsubsecno}% +} + +% These macros control what the section commands do, according +% to what kind of chapter we are in (ordinary, appendix, or unnumbered). +% Define them by default for a numbered chapter. +\let\section = \numberedsec +\let\subsection = \numberedsubsec +\let\subsubsection = \numberedsubsubsec + +% Define @majorheading, @heading and @subheading + +% NOTE on use of \vbox for chapter headings, section headings, and such: +% 1) We use \vbox rather than the earlier \line to permit +% overlong headings to fold. +% 2) \hyphenpenalty is set to 10000 because hyphenation in a +% heading is obnoxious; this forbids it. +% 3) Likewise, headings look best if no \parindent is used, and +% if justification is not attempted. Hence \raggedright. + + +\def\majorheading{% + {\advance\chapheadingskip by 10pt \chapbreak }% + \parsearg\chapheadingzzz +} + +\def\chapheading{\chapbreak \parsearg\chapheadingzzz} +\def\chapheadingzzz#1{% + {\chapfonts \vbox{\hyphenpenalty=10000\tolerance=5000 + \parindent=0pt\raggedright + \rm #1\hfill}}% + \bigskip \par\penalty 200\relax + \suppressfirstparagraphindent +} + +% @heading, @subheading, @subsubheading. +\parseargdef\heading{\sectionheading{#1}{sec}{Yomitfromtoc}{} + \suppressfirstparagraphindent} +\parseargdef\subheading{\sectionheading{#1}{subsec}{Yomitfromtoc}{} + \suppressfirstparagraphindent} +\parseargdef\subsubheading{\sectionheading{#1}{subsubsec}{Yomitfromtoc}{} + \suppressfirstparagraphindent} + +% These macros generate a chapter, section, etc. heading only +% (including whitespace, linebreaking, etc. around it), +% given all the information in convenient, parsed form. + +%%% Args are the skip and penalty (usually negative) +\def\dobreak#1#2{\par\ifdim\lastskip<#1\removelastskip\penalty#2\vskip#1\fi} + +%%% Define plain chapter starts, and page on/off switching for it +% Parameter controlling skip before chapter headings (if needed) + +\newskip\chapheadingskip + +\def\chapbreak{\dobreak \chapheadingskip {-4000}} +\def\chappager{\par\vfill\supereject} +\def\chapoddpage{\chappager \ifodd\pageno \else \hbox to 0pt{} \chappager\fi} + +\def\setchapternewpage #1 {\csname CHAPPAG#1\endcsname} + +\def\CHAPPAGoff{% +\global\let\contentsalignmacro = \chappager +\global\let\pchapsepmacro=\chapbreak +\global\let\pagealignmacro=\chappager} + +\def\CHAPPAGon{% +\global\let\contentsalignmacro = \chappager +\global\let\pchapsepmacro=\chappager +\global\let\pagealignmacro=\chappager +\global\def\HEADINGSon{\HEADINGSsingle}} + +\def\CHAPPAGodd{% +\global\let\contentsalignmacro = \chapoddpage +\global\let\pchapsepmacro=\chapoddpage +\global\let\pagealignmacro=\chapoddpage +\global\def\HEADINGSon{\HEADINGSdouble}} + +\CHAPPAGon + +% Chapter opening. +% +% #1 is the text, #2 is the section type (Ynumbered, Ynothing, +% Yappendix, Yomitfromtoc), #3 the chapter number. +% +% To test against our argument. +\def\Ynothingkeyword{Ynothing} +\def\Yomitfromtockeyword{Yomitfromtoc} +\def\Yappendixkeyword{Yappendix} +% +\def\chapmacro#1#2#3{% + \pchapsepmacro + {% + \chapfonts \rm + % + % Have to define \thissection before calling \donoderef, because the + % xref code eventually uses it. On the other hand, it has to be called + % after \pchapsepmacro, or the headline will change too soon. + \gdef\thissection{#1}% + \gdef\thischaptername{#1}% + % + % Only insert the separating space if we have a chapter/appendix + % number, and don't print the unnumbered ``number''. + \def\temptype{#2}% + \ifx\temptype\Ynothingkeyword + \setbox0 = \hbox{}% + \def\toctype{unnchap}% + \gdef\thischapter{#1}% + \else\ifx\temptype\Yomitfromtockeyword + \setbox0 = \hbox{}% contents like unnumbered, but no toc entry + \def\toctype{omit}% + \gdef\thischapter{}% + \else\ifx\temptype\Yappendixkeyword + \setbox0 = \hbox{\putwordAppendix{} #3\enspace}% + \def\toctype{app}% + % We don't substitute the actual chapter name into \thischapter + % because we don't want its macros evaluated now. And we don't + % use \thissection because that changes with each section. + % + \xdef\thischapter{\putwordAppendix{} \appendixletter: + \noexpand\thischaptername}% + \else + \setbox0 = \hbox{#3\enspace}% + \def\toctype{numchap}% + \xdef\thischapter{\putwordChapter{} \the\chapno: + \noexpand\thischaptername}% + \fi\fi\fi + % + % Write the toc entry for this chapter. Must come before the + % \donoderef, because we include the current node name in the toc + % entry, and \donoderef resets it to empty. + \writetocentry{\toctype}{#1}{#3}% + % + % For pdftex, we have to write out the node definition (aka, make + % the pdfdest) after any page break, but before the actual text has + % been typeset. If the destination for the pdf outline is after the + % text, then jumping from the outline may wind up with the text not + % being visible, for instance under high magnification. + \donoderef{#2}% + % + % Typeset the actual heading. + \vbox{\hyphenpenalty=10000 \tolerance=5000 \parindent=0pt \raggedright + \hangindent=\wd0 \centerparametersmaybe + \unhbox0 #1\par}% + }% + \nobreak\bigskip % no page break after a chapter title + \nobreak +} + +% @centerchap -- centered and unnumbered. +\let\centerparametersmaybe = \relax +\def\centerparameters{% + \advance\rightskip by 3\rightskip + \leftskip = \rightskip + \parfillskip = 0pt +} + + +% I don't think this chapter style is supported any more, so I'm not +% updating it with the new noderef stuff. We'll see. --karl, 11aug03. +% +\def\setchapterstyle #1 {\csname CHAPF#1\endcsname} +% +\def\unnchfopen #1{% +\chapoddpage {\chapfonts \vbox{\hyphenpenalty=10000\tolerance=5000 + \parindent=0pt\raggedright + \rm #1\hfill}}\bigskip \par\nobreak +} +\def\chfopen #1#2{\chapoddpage {\chapfonts +\vbox to 3in{\vfil \hbox to\hsize{\hfil #2} \hbox to\hsize{\hfil #1} \vfil}}% +\par\penalty 5000 % +} +\def\centerchfopen #1{% +\chapoddpage {\chapfonts \vbox{\hyphenpenalty=10000\tolerance=5000 + \parindent=0pt + \hfill {\rm #1}\hfill}}\bigskip \par\nobreak +} +\def\CHAPFopen{% + \global\let\chapmacro=\chfopen + \global\let\centerchapmacro=\centerchfopen} + + +% Section titles. These macros combine the section number parts and +% call the generic \sectionheading to do the printing. +% +\newskip\secheadingskip +\def\secheadingbreak{\dobreak \secheadingskip{-1000}} + +% Subsection titles. +\newskip\subsecheadingskip +\def\subsecheadingbreak{\dobreak \subsecheadingskip{-500}} + +% Subsubsection titles. +\def\subsubsecheadingskip{\subsecheadingskip} +\def\subsubsecheadingbreak{\subsecheadingbreak} + + +% Print any size, any type, section title. +% +% #1 is the text, #2 is the section level (sec/subsec/subsubsec), #3 is +% the section type for xrefs (Ynumbered, Ynothing, Yappendix), #4 is the +% section number. +% +\def\sectionheading#1#2#3#4{% + {% + % Switch to the right set of fonts. + \csname #2fonts\endcsname \rm + % + % Insert space above the heading. + \csname #2headingbreak\endcsname + % + % Only insert the space after the number if we have a section number. + \def\sectionlevel{#2}% + \def\temptype{#3}% + % + \ifx\temptype\Ynothingkeyword + \setbox0 = \hbox{}% + \def\toctype{unn}% + \gdef\thissection{#1}% + \else\ifx\temptype\Yomitfromtockeyword + % for @headings -- no section number, don't include in toc, + % and don't redefine \thissection. + \setbox0 = \hbox{}% + \def\toctype{omit}% + \let\sectionlevel=\empty + \else\ifx\temptype\Yappendixkeyword + \setbox0 = \hbox{#4\enspace}% + \def\toctype{app}% + \gdef\thissection{#1}% + \else + \setbox0 = \hbox{#4\enspace}% + \def\toctype{num}% + \gdef\thissection{#1}% + \fi\fi\fi + % + % Write the toc entry (before \donoderef). See comments in \chfplain. + \writetocentry{\toctype\sectionlevel}{#1}{#4}% + % + % Write the node reference (= pdf destination for pdftex). + % Again, see comments in \chfplain. + \donoderef{#3}% + % + % Output the actual section heading. + \vbox{\hyphenpenalty=10000 \tolerance=5000 \parindent=0pt \raggedright + \hangindent=\wd0 % zero if no section number + \unhbox0 #1}% + }% + % Add extra space after the heading -- half of whatever came above it. + % Don't allow stretch, though. + \kern .5 \csname #2headingskip\endcsname + % + % Do not let the kern be a potential breakpoint, as it would be if it + % was followed by glue. + \nobreak + % + % We'll almost certainly start a paragraph next, so don't let that + % glue accumulate. (Not a breakpoint because it's preceded by a + % discardable item.) + \vskip-\parskip + % + % This is purely so the last item on the list is a known \penalty > + % 10000. This is so \startdefun can avoid allowing breakpoints after + % section headings. Otherwise, it would insert a valid breakpoint between: + % + % @section sec-whatever + % @deffn def-whatever + \penalty 10001 +} + + +\message{toc,} +% Table of contents. +\newwrite\tocfile + +% Write an entry to the toc file, opening it if necessary. +% Called from @chapter, etc. +% +% Example usage: \writetocentry{sec}{Section Name}{\the\chapno.\the\secno} +% We append the current node name (if any) and page number as additional +% arguments for the \{chap,sec,...}entry macros which will eventually +% read this. The node name is used in the pdf outlines as the +% destination to jump to. +% +% We open the .toc file for writing here instead of at @setfilename (or +% any other fixed time) so that @contents can be anywhere in the document. +% But if #1 is `omit', then we don't do anything. This is used for the +% table of contents chapter openings themselves. +% +\newif\iftocfileopened +\def\omitkeyword{omit}% +% +\def\writetocentry#1#2#3{% + \edef\writetoctype{#1}% + \ifx\writetoctype\omitkeyword \else + \iftocfileopened\else + \immediate\openout\tocfile = \jobname.toc + \global\tocfileopenedtrue + \fi + % + \iflinks + {\atdummies + \edef\temp{% + \write\tocfile{@#1entry{#2}{#3}{\lastnode}{\noexpand\folio}}}% + \temp + } + \fi + \fi + % + % Tell \shipout to create a pdf destination on each page, if we're + % writing pdf. These are used in the table of contents. We can't + % just write one on every page because the title pages are numbered + % 1 and 2 (the page numbers aren't printed), and so are the first + % two pages of the document. Thus, we'd have two destinations named + % `1', and two named `2'. + \ifpdf \global\pdfmakepagedesttrue \fi +} + + +% These characters do not print properly in the Computer Modern roman +% fonts, so we must take special care. This is more or less redundant +% with the Texinfo input format setup at the end of this file. +% +\def\activecatcodes{% + \catcode`\"=\active + \catcode`\$=\active + \catcode`\<=\active + \catcode`\>=\active + \catcode`\\=\active + \catcode`\^=\active + \catcode`\_=\active + \catcode`\|=\active + \catcode`\~=\active +} + + +% Read the toc file, which is essentially Texinfo input. +\def\readtocfile{% + \setupdatafile + \activecatcodes + \input \jobname.toc +} + +\newskip\contentsrightmargin \contentsrightmargin=1in +\newcount\savepageno +\newcount\lastnegativepageno \lastnegativepageno = -1 + +% Prepare to read what we've written to \tocfile. +% +\def\startcontents#1{% + % If @setchapternewpage on, and @headings double, the contents should + % start on an odd page, unlike chapters. Thus, we maintain + % \contentsalignmacro in parallel with \pagealignmacro. + % From: Torbjorn Granlund + \contentsalignmacro + \immediate\closeout\tocfile + % + % Don't need to put `Contents' or `Short Contents' in the headline. + % It is abundantly clear what they are. + \def\thischapter{}% + \chapmacro{#1}{Yomitfromtoc}{}% + % + \savepageno = \pageno + \begingroup % Set up to handle contents files properly. + \raggedbottom % Worry more about breakpoints than the bottom. + \advance\hsize by -\contentsrightmargin % Don't use the full line length. + % + % Roman numerals for page numbers. + \ifnum \pageno>0 \global\pageno = \lastnegativepageno \fi +} + + +% Normal (long) toc. +\def\contents{% + \startcontents{\putwordTOC}% + \openin 1 \jobname.toc + \ifeof 1 \else + \readtocfile + \fi + \vfill \eject + \contentsalignmacro % in case @setchapternewpage odd is in effect + \ifeof 1 \else + \pdfmakeoutlines + \fi + \closein 1 + \endgroup + \lastnegativepageno = \pageno + \global\pageno = \savepageno +} + +% And just the chapters. +\def\summarycontents{% + \startcontents{\putwordShortTOC}% + % + \let\numchapentry = \shortchapentry + \let\appentry = \shortchapentry + \let\unnchapentry = \shortunnchapentry + % We want a true roman here for the page numbers. + \secfonts + \let\rm=\shortcontrm \let\bf=\shortcontbf + \let\sl=\shortcontsl \let\tt=\shortconttt + \rm + \hyphenpenalty = 10000 + \advance\baselineskip by 1pt % Open it up a little. + \def\numsecentry##1##2##3##4{} + \let\appsecentry = \numsecentry + \let\unnsecentry = \numsecentry + \let\numsubsecentry = \numsecentry + \let\appsubsecentry = \numsecentry + \let\unnsubsecentry = \numsecentry + \let\numsubsubsecentry = \numsecentry + \let\appsubsubsecentry = \numsecentry + \let\unnsubsubsecentry = \numsecentry + \openin 1 \jobname.toc + \ifeof 1 \else + \readtocfile + \fi + \closein 1 + \vfill \eject + \contentsalignmacro % in case @setchapternewpage odd is in effect + \endgroup + \lastnegativepageno = \pageno + \global\pageno = \savepageno +} +\let\shortcontents = \summarycontents + +% Typeset the label for a chapter or appendix for the short contents. +% The arg is, e.g., `A' for an appendix, or `3' for a chapter. +% +\def\shortchaplabel#1{% + % This space should be enough, since a single number is .5em, and the + % widest letter (M) is 1em, at least in the Computer Modern fonts. + % But use \hss just in case. + % (This space doesn't include the extra space that gets added after + % the label; that gets put in by \shortchapentry above.) + % + % We'd like to right-justify chapter numbers, but that looks strange + % with appendix letters. And right-justifying numbers and + % left-justifying letters looks strange when there is less than 10 + % chapters. Have to read the whole toc once to know how many chapters + % there are before deciding ... + \hbox to 1em{#1\hss}% +} + +% These macros generate individual entries in the table of contents. +% The first argument is the chapter or section name. +% The last argument is the page number. +% The arguments in between are the chapter number, section number, ... + +% Chapters, in the main contents. +\def\numchapentry#1#2#3#4{\dochapentry{#2\labelspace#1}{#4}} +% +% Chapters, in the short toc. +% See comments in \dochapentry re vbox and related settings. +\def\shortchapentry#1#2#3#4{% + \tocentry{\shortchaplabel{#2}\labelspace #1}{\doshortpageno\bgroup#4\egroup}% +} + +% Appendices, in the main contents. +% Need the word Appendix, and a fixed-size box. +% +\def\appendixbox#1{% + % We use M since it's probably the widest letter. + \setbox0 = \hbox{\putwordAppendix{} M}% + \hbox to \wd0{\putwordAppendix{} #1\hss}} +% +\def\appentry#1#2#3#4{\dochapentry{\appendixbox{#2}\labelspace#1}{#4}} + +% Unnumbered chapters. +\def\unnchapentry#1#2#3#4{\dochapentry{#1}{#4}} +\def\shortunnchapentry#1#2#3#4{\tocentry{#1}{\doshortpageno\bgroup#4\egroup}} + +% Sections. +\def\numsecentry#1#2#3#4{\dosecentry{#2\labelspace#1}{#4}} +\let\appsecentry=\numsecentry +\def\unnsecentry#1#2#3#4{\dosecentry{#1}{#4}} + +% Subsections. +\def\numsubsecentry#1#2#3#4{\dosubsecentry{#2\labelspace#1}{#4}} +\let\appsubsecentry=\numsubsecentry +\def\unnsubsecentry#1#2#3#4{\dosubsecentry{#1}{#4}} + +% And subsubsections. +\def\numsubsubsecentry#1#2#3#4{\dosubsubsecentry{#2\labelspace#1}{#4}} +\let\appsubsubsecentry=\numsubsubsecentry +\def\unnsubsubsecentry#1#2#3#4{\dosubsubsecentry{#1}{#4}} + +% This parameter controls the indentation of the various levels. +% Same as \defaultparindent. +\newdimen\tocindent \tocindent = 15pt + +% Now for the actual typesetting. In all these, #1 is the text and #2 is the +% page number. +% +% If the toc has to be broken over pages, we want it to be at chapters +% if at all possible; hence the \penalty. +\def\dochapentry#1#2{% + \penalty-300 \vskip1\baselineskip plus.33\baselineskip minus.25\baselineskip + \begingroup + \chapentryfonts + \tocentry{#1}{\dopageno\bgroup#2\egroup}% + \endgroup + \nobreak\vskip .25\baselineskip plus.1\baselineskip +} + +\def\dosecentry#1#2{\begingroup + \secentryfonts \leftskip=\tocindent + \tocentry{#1}{\dopageno\bgroup#2\egroup}% +\endgroup} + +\def\dosubsecentry#1#2{\begingroup + \subsecentryfonts \leftskip=2\tocindent + \tocentry{#1}{\dopageno\bgroup#2\egroup}% +\endgroup} + +\def\dosubsubsecentry#1#2{\begingroup + \subsubsecentryfonts \leftskip=3\tocindent + \tocentry{#1}{\dopageno\bgroup#2\egroup}% +\endgroup} + +% We use the same \entry macro as for the index entries. +\let\tocentry = \entry + +% Space between chapter (or whatever) number and the title. +\def\labelspace{\hskip1em \relax} + +\def\dopageno#1{{\rm #1}} +\def\doshortpageno#1{{\rm #1}} + +\def\chapentryfonts{\secfonts \rm} +\def\secentryfonts{\textfonts} +\def\subsecentryfonts{\textfonts} +\def\subsubsecentryfonts{\textfonts} + + +\message{environments,} +% @foo ... @end foo. + +% @point{}, @result{}, @expansion{}, @print{}, @equiv{}. +% +% Since these characters are used in examples, it should be an even number of +% \tt widths. Each \tt character is 1en, so two makes it 1em. +% +\def\point{$\star$} +\def\result{\leavevmode\raise.15ex\hbox to 1em{\hfil$\Rightarrow$\hfil}} +\def\expansion{\leavevmode\raise.1ex\hbox to 1em{\hfil$\mapsto$\hfil}} +\def\print{\leavevmode\lower.1ex\hbox to 1em{\hfil$\dashv$\hfil}} +\def\equiv{\leavevmode\lower.1ex\hbox to 1em{\hfil$\ptexequiv$\hfil}} + +% The @error{} command. +% Adapted from the TeXbook's \boxit. +% +\newbox\errorbox +% +{\tentt \global\dimen0 = 3em}% Width of the box. +\dimen2 = .55pt % Thickness of rules +% The text. (`r' is open on the right, `e' somewhat less so on the left.) +\setbox0 = \hbox{\kern-.75pt \tensf error\kern-1.5pt} +% +\setbox\errorbox=\hbox to \dimen0{\hfil + \hsize = \dimen0 \advance\hsize by -5.8pt % Space to left+right. + \advance\hsize by -2\dimen2 % Rules. + \vbox{% + \hrule height\dimen2 + \hbox{\vrule width\dimen2 \kern3pt % Space to left of text. + \vtop{\kern2.4pt \box0 \kern2.4pt}% Space above/below. + \kern3pt\vrule width\dimen2}% Space to right. + \hrule height\dimen2} + \hfil} +% +\def\error{\leavevmode\lower.7ex\copy\errorbox} + +% @tex ... @end tex escapes into raw Tex temporarily. +% One exception: @ is still an escape character, so that @end tex works. +% But \@ or @@ will get a plain tex @ character. + +\envdef\tex{% + \catcode `\\=0 \catcode `\{=1 \catcode `\}=2 + \catcode `\$=3 \catcode `\&=4 \catcode `\#=6 + \catcode `\^=7 \catcode `\_=8 \catcode `\~=\active \let~=\tie + \catcode `\%=14 + \catcode `\+=\other + \catcode `\"=\other + \catcode `\|=\other + \catcode `\<=\other + \catcode `\>=\other + \escapechar=`\\ + % + \let\b=\ptexb + \let\bullet=\ptexbullet + \let\c=\ptexc + \let\,=\ptexcomma + \let\.=\ptexdot + \let\dots=\ptexdots + \let\equiv=\ptexequiv + \let\!=\ptexexclam + \let\i=\ptexi + \let\indent=\ptexindent + \let\noindent=\ptexnoindent + \let\{=\ptexlbrace + \let\+=\tabalign + \let\}=\ptexrbrace + \let\/=\ptexslash + \let\*=\ptexstar + \let\t=\ptext + \let\frenchspacing=\plainfrenchspacing + % + \def\endldots{\mathinner{\ldots\ldots\ldots\ldots}}% + \def\enddots{\relax\ifmmode\endldots\else$\mathsurround=0pt \endldots\,$\fi}% + \def\@{@}% +} +% There is no need to define \Etex. + +% Define @lisp ... @end lisp. +% @lisp environment forms a group so it can rebind things, +% including the definition of @end lisp (which normally is erroneous). + +% Amount to narrow the margins by for @lisp. +\newskip\lispnarrowing \lispnarrowing=0.4in + +% This is the definition that ^^M gets inside @lisp, @example, and other +% such environments. \null is better than a space, since it doesn't +% have any width. +\def\lisppar{\null\endgraf} + +% This space is always present above and below environments. +\newskip\envskipamount \envskipamount = 0pt + +% Make spacing and below environment symmetrical. We use \parskip here +% to help in doing that, since in @example-like environments \parskip +% is reset to zero; thus the \afterenvbreak inserts no space -- but the +% start of the next paragraph will insert \parskip. +% +\def\aboveenvbreak{{% + % =10000 instead of <10000 because of a special case in \itemzzz and + % \sectionheading, q.v. + \ifnum \lastpenalty=10000 \else + \advance\envskipamount by \parskip + \endgraf + \ifdim\lastskip<\envskipamount + \removelastskip + % it's not a good place to break if the last penalty was \nobreak + % or better ... + \ifnum\lastpenalty<10000 \penalty-50 \fi + \vskip\envskipamount + \fi + \fi +}} + +\let\afterenvbreak = \aboveenvbreak + +% \nonarrowing is a flag. If "set", @lisp etc don't narrow margins; it will +% also clear it, so that its embedded environments do the narrowing again. +\let\nonarrowing=\relax + +% @cartouche ... @end cartouche: draw rectangle w/rounded corners around +% environment contents. +\font\circle=lcircle10 +\newdimen\circthick +\newdimen\cartouter\newdimen\cartinner +\newskip\normbskip\newskip\normpskip\newskip\normlskip +\circthick=\fontdimen8\circle +% +\def\ctl{{\circle\char'013\hskip -6pt}}% 6pt from pl file: 1/2charwidth +\def\ctr{{\hskip 6pt\circle\char'010}} +\def\cbl{{\circle\char'012\hskip -6pt}} +\def\cbr{{\hskip 6pt\circle\char'011}} +\def\carttop{\hbox to \cartouter{\hskip\lskip + \ctl\leaders\hrule height\circthick\hfil\ctr + \hskip\rskip}} +\def\cartbot{\hbox to \cartouter{\hskip\lskip + \cbl\leaders\hrule height\circthick\hfil\cbr + \hskip\rskip}} +% +\newskip\lskip\newskip\rskip + +\envdef\cartouche{% + \ifhmode\par\fi % can't be in the midst of a paragraph. + \startsavinginserts + \lskip=\leftskip \rskip=\rightskip + \leftskip=0pt\rightskip=0pt % we want these *outside*. + \cartinner=\hsize \advance\cartinner by-\lskip + \advance\cartinner by-\rskip + \cartouter=\hsize + \advance\cartouter by 18.4pt % allow for 3pt kerns on either + % side, and for 6pt waste from + % each corner char, and rule thickness + \normbskip=\baselineskip \normpskip=\parskip \normlskip=\lineskip + % Flag to tell @lisp, etc., not to narrow margin. + \let\nonarrowing = t% + \vbox\bgroup + \baselineskip=0pt\parskip=0pt\lineskip=0pt + \carttop + \hbox\bgroup + \hskip\lskip + \vrule\kern3pt + \vbox\bgroup + \kern3pt + \hsize=\cartinner + \baselineskip=\normbskip + \lineskip=\normlskip + \parskip=\normpskip + \vskip -\parskip + \comment % For explanation, see the end of \def\group. +} +\def\Ecartouche{% + \ifhmode\par\fi + \kern3pt + \egroup + \kern3pt\vrule + \hskip\rskip + \egroup + \cartbot + \egroup + \checkinserts +} + + +% This macro is called at the beginning of all the @example variants, +% inside a group. +\def\nonfillstart{% + \aboveenvbreak + \hfuzz = 12pt % Don't be fussy + \sepspaces % Make spaces be word-separators rather than space tokens. + \let\par = \lisppar % don't ignore blank lines + \obeylines % each line of input is a line of output + \parskip = 0pt + \parindent = 0pt + \emergencystretch = 0pt % don't try to avoid overfull boxes + \ifx\nonarrowing\relax + \advance \leftskip by \lispnarrowing + \exdentamount=\lispnarrowing + \else + \let\nonarrowing = \relax + \fi + \let\exdent=\nofillexdent +} + +% If you want all examples etc. small: @set dispenvsize small. +% If you want even small examples the full size: @set dispenvsize nosmall. +% This affects the following displayed environments: +% @example, @display, @format, @lisp +% +\def\smallword{small} +\def\nosmallword{nosmall} +\let\SETdispenvsize\relax +\def\setnormaldispenv{% + \ifx\SETdispenvsize\smallword + \smallexamplefonts \rm + \fi +} +\def\setsmalldispenv{% + \ifx\SETdispenvsize\nosmallword + \else + \smallexamplefonts \rm + \fi +} + +% We often define two environments, @foo and @smallfoo. +% Let's do it by one command: +\def\makedispenv #1#2{ + \expandafter\envdef\csname#1\endcsname {\setnormaldispenv #2} + \expandafter\envdef\csname small#1\endcsname {\setsmalldispenv #2} + \expandafter\let\csname E#1\endcsname \afterenvbreak + \expandafter\let\csname Esmall#1\endcsname \afterenvbreak +} + +% Define two synonyms: +\def\maketwodispenvs #1#2#3{ + \makedispenv{#1}{#3} + \makedispenv{#2}{#3} +} + +% @lisp: indented, narrowed, typewriter font; @example: same as @lisp. +% +% @smallexample and @smalllisp: use smaller fonts. +% Originally contributed by Pavel at xerox. +% +\maketwodispenvs {lisp}{example}{% + \nonfillstart + \tt + \let\kbdfont = \kbdexamplefont % Allow @kbd to do something special. + \gobble % eat return +} + +% @display/@smalldisplay: same as @lisp except keep current font. +% +\makedispenv {display}{% + \nonfillstart + \gobble +} + +% @format/@smallformat: same as @display except don't narrow margins. +% +\makedispenv{format}{% + \let\nonarrowing = t% + \nonfillstart + \gobble +} + +% @flushleft: same as @format, but doesn't obey \SETdispenvsize. +\envdef\flushleft{% + \let\nonarrowing = t% + \nonfillstart + \gobble +} +\let\Eflushleft = \afterenvbreak + +% @flushright. +% +\envdef\flushright{% + \let\nonarrowing = t% + \nonfillstart + \advance\leftskip by 0pt plus 1fill + \gobble +} +\let\Eflushright = \afterenvbreak + + +% @quotation does normal linebreaking (hence we can't use \nonfillstart) +% and narrows the margins. We keep \parskip nonzero in general, since +% we're doing normal filling. So, when using \aboveenvbreak and +% \afterenvbreak, temporarily make \parskip 0. +% +\envdef\quotation{% + {\parskip=0pt \aboveenvbreak}% because \aboveenvbreak inserts \parskip + \parindent=0pt + % + % @cartouche defines \nonarrowing to inhibit narrowing at next level down. + \ifx\nonarrowing\relax + \advance\leftskip by \lispnarrowing + \advance\rightskip by \lispnarrowing + \exdentamount = \lispnarrowing + \else + \let\nonarrowing = \relax + \fi + \parsearg\quotationlabel +} + +% We have retained a nonzero parskip for the environment, since we're +% doing normal filling. +% +\def\Equotation{% + \par + \ifx\quotationauthor\undefined\else + % indent a bit. + \leftline{\kern 2\leftskip \sl ---\quotationauthor}% + \fi + {\parskip=0pt \afterenvbreak}% +} + +% If we're given an argument, typeset it in bold with a colon after. +\def\quotationlabel#1{% + \def\temp{#1}% + \ifx\temp\empty \else + {\bf #1: }% + \fi +} + + +% LaTeX-like @verbatim... at end verbatim and @verb{...} +% If we want to allow any as delimiter, +% we need the curly braces so that makeinfo sees the @verb command, eg: +% `@verbx...x' would look like the '@verbx' command. --janneke at gnu.org +% +% [Knuth]: Donald Ervin Knuth, 1996. The TeXbook. +% +% [Knuth] p.344; only we need to do the other characters Texinfo sets +% active too. Otherwise, they get lost as the first character on a +% verbatim line. +\def\dospecials{% + \do\ \do\\\do\{\do\}\do\$\do\&% + \do\#\do\^\do\^^K\do\_\do\^^A\do\%\do\~% + \do\<\do\>\do\|\do\@\do+\do\"% +} +% +% [Knuth] p. 380 +\def\uncatcodespecials{% + \def\do##1{\catcode`##1=\other}\dospecials} +% +% [Knuth] pp. 380,381,391 +% Disable Spanish ligatures ?` and !` of \tt font +\begingroup + \catcode`\`=\active\gdef`{\relax\lq} +\endgroup +% +% Setup for the @verb command. +% +% Eight spaces for a tab +\begingroup + \catcode`\^^I=\active + \gdef\tabeightspaces{\catcode`\^^I=\active\def^^I{\ \ \ \ \ \ \ \ }} +\endgroup +% +\def\setupverb{% + \tt % easiest (and conventionally used) font for verbatim + \def\par{\leavevmode\endgraf}% + \catcode`\`=\active + \tabeightspaces + % Respect line breaks, + % print special symbols as themselves, and + % make each space count + % must do in this order: + \obeylines \uncatcodespecials \sepspaces +} + +% Setup for the @verbatim environment +% +% Real tab expansion +\newdimen\tabw \setbox0=\hbox{\tt\space} \tabw=8\wd0 % tab amount +% +\def\starttabbox{\setbox0=\hbox\bgroup} +\begingroup + \catcode`\^^I=\active + \gdef\tabexpand{% + \catcode`\^^I=\active + \def^^I{\leavevmode\egroup + \dimen0=\wd0 % the width so far, or since the previous tab + \divide\dimen0 by\tabw + \multiply\dimen0 by\tabw % compute previous multiple of \tabw + \advance\dimen0 by\tabw % advance to next multiple of \tabw + \wd0=\dimen0 \box0 \starttabbox + }% + } +\endgroup +\def\setupverbatim{% + \let\nonarrowing = t% + \nonfillstart + % Easiest (and conventionally used) font for verbatim + \tt + \def\par{\leavevmode\egroup\box0\endgraf}% + \catcode`\`=\active + \tabexpand + % Respect line breaks, + % print special symbols as themselves, and + % make each space count + % must do in this order: + \obeylines \uncatcodespecials \sepspaces + \everypar{\starttabbox}% +} + +% Do the @verb magic: verbatim text is quoted by unique +% delimiter characters. Before first delimiter expect a +% right brace, after last delimiter expect closing brace: +% +% \def\doverb'{'#1'}'{#1} +% +% [Knuth] p. 382; only eat outer {} +\begingroup + \catcode`[=1\catcode`]=2\catcode`\{=\other\catcode`\}=\other + \gdef\doverb{#1[\def\next##1#1}[##1\endgroup]\next] +\endgroup +% +\def\verb{\begingroup\setupverb\doverb} +% +% +% Do the @verbatim magic: define the macro \doverbatim so that +% the (first) argument ends when '@end verbatim' is reached, ie: +% +% \def\doverbatim#1 at end verbatim{#1} +% +% For Texinfo it's a lot easier than for LaTeX, +% because texinfo's \verbatim doesn't stop at '\end{verbatim}': +% we need not redefine '\', '{' and '}'. +% +% Inspired by LaTeX's verbatim command set [latex.ltx] +% +\begingroup + \catcode`\ =\active + \obeylines % + % ignore everything up to the first ^^M, that's the newline at the end + % of the @verbatim input line itself. Otherwise we get an extra blank + % line in the output. + \xdef\doverbatim#1^^M#2 at end verbatim{#2\noexpand\end\gobble verbatim}% + % We really want {...\end verbatim} in the body of the macro, but + % without the active space; thus we have to use \xdef and \gobble. +\endgroup +% +\envdef\verbatim{% + \setupverbatim\doverbatim +} +\let\Everbatim = \afterenvbreak + + +% @verbatiminclude FILE - insert text of file in verbatim environment. +% +\def\verbatiminclude{\parseargusing\filenamecatcodes\doverbatiminclude} +% +\def\doverbatiminclude#1{% + {% + \makevalueexpandable + \setupverbatim + \input #1 + \afterenvbreak + }% +} + +% @copying ... @end copying. +% Save the text away for @insertcopying later. +% +% We save the uninterpreted tokens, rather than creating a box. +% Saving the text in a box would be much easier, but then all the +% typesetting commands (@smallbook, font changes, etc.) have to be done +% beforehand -- and a) we want @copying to be done first in the source +% file; b) letting users define the frontmatter in as flexible order as +% possible is very desirable. +% +\def\copying{\checkenv{}\begingroup\scanargctxt\docopying} +\def\docopying#1 at end copying{\endgroup\def\copyingtext{#1}} +% +\def\insertcopying{% + \begingroup + \parindent = 0pt % paragraph indentation looks wrong on title page + \scanexp\copyingtext + \endgroup +} + +\message{defuns,} +% @defun etc. + +\newskip\defbodyindent \defbodyindent=.4in +\newskip\defargsindent \defargsindent=50pt +\newskip\deflastargmargin \deflastargmargin=18pt + +% Start the processing of @deffn: +\def\startdefun{% + \ifnum\lastpenalty<10000 + \medbreak + \else + % If there are two @def commands in a row, we'll have a \nobreak, + % which is there to keep the function description together with its + % header. But if there's nothing but headers, we need to allow a + % break somewhere. Check specifically for penalty 10002, inserted + % by \defargscommonending, instead of 10000, since the sectioning + % commands also insert a nobreak penalty, and we don't want to allow + % a break between a section heading and a defun. + % + \ifnum\lastpenalty=10002 \penalty2000 \fi + % + % Similarly, after a section heading, do not allow a break. + % But do insert the glue. + \medskip % preceded by discardable penalty, so not a breakpoint + \fi + % + \parindent=0in + \advance\leftskip by \defbodyindent + \exdentamount=\defbodyindent +} + +\def\dodefunx#1{% + % First, check whether we are in the right environment: + \checkenv#1% + % + % As above, allow line break if we have multiple x headers in a row. + % It's not a great place, though. + \ifnum\lastpenalty=10002 \penalty3000 \fi + % + % And now, it's time to reuse the body of the original defun: + \expandafter\gobbledefun#1% +} +\def\gobbledefun#1\startdefun{} + +% \printdefunline \deffnheader{text} +% +\def\printdefunline#1#2{% + \begingroup + % call \deffnheader: + #1#2 \endheader + % common ending: + \interlinepenalty = 10000 + \advance\rightskip by 0pt plus 1fil + \endgraf + \nobreak\vskip -\parskip + \penalty 10002 % signal to \startdefun and \dodefunx + % Some of the @defun-type tags do not enable magic parentheses, + % rendering the following check redundant. But we don't optimize. + \checkparencounts + \endgroup +} + +\def\Edefun{\endgraf\medbreak} + +% \makedefun{deffn} creates \deffn, \deffnx and \Edeffn; +% the only thing remainnig is to define \deffnheader. +% +\def\makedefun#1{% + \expandafter\let\csname E#1\endcsname = \Edefun + \edef\temp{\noexpand\domakedefun + \makecsname{#1}\makecsname{#1x}\makecsname{#1header}}% + \temp +} + +% \domakedefun \deffn \deffnx \deffnheader +% +% Define \deffn and \deffnx, without parameters. +% \deffnheader has to be defined explicitly. +% +\def\domakedefun#1#2#3{% + \envdef#1{% + \startdefun + \parseargusing\activeparens{\printdefunline#3}% + }% + \def#2{\dodefunx#1}% + \def#3% +} + +%%% Untyped functions: + +% @deffn category name args +\makedefun{deffn}{\deffngeneral{}} + +% @deffn category class name args +\makedefun{defop}#1 {\defopon{#1\ \putwordon}} + +% \defopon {category on}class name args +\def\defopon#1#2 {\deffngeneral{\putwordon\ \code{#2}}{#1\ \code{#2}} } + +% \deffngeneral {subind}category name args +% +\def\deffngeneral#1#2 #3 #4\endheader{% + % Remember that \dosubind{fn}{foo}{} is equivalent to \doind{fn}{foo}. + \dosubind{fn}{\code{#3}}{#1}% + \defname{#2}{}{#3}\magicamp\defunargs{#4\unskip}% +} + +%%% Typed functions: + +% @deftypefn category type name args +\makedefun{deftypefn}{\deftypefngeneral{}} + +% @deftypeop category class type name args +\makedefun{deftypeop}#1 {\deftypeopon{#1\ \putwordon}} + +% \deftypeopon {category on}class type name args +\def\deftypeopon#1#2 {\deftypefngeneral{\putwordon\ \code{#2}}{#1\ \code{#2}} } + +% \deftypefngeneral {subind}category type name args +% +\def\deftypefngeneral#1#2 #3 #4 #5\endheader{% + \dosubind{fn}{\code{#4}}{#1}% + \defname{#2}{#3}{#4}\defunargs{#5\unskip}% +} + +%%% Typed variables: + +% @deftypevr category type var args +\makedefun{deftypevr}{\deftypecvgeneral{}} + +% @deftypecv category class type var args +\makedefun{deftypecv}#1 {\deftypecvof{#1\ \putwordof}} + +% \deftypecvof {category of}class type var args +\def\deftypecvof#1#2 {\deftypecvgeneral{\putwordof\ \code{#2}}{#1\ \code{#2}} } + +% \deftypecvgeneral {subind}category type var args +% +\def\deftypecvgeneral#1#2 #3 #4 #5\endheader{% + \dosubind{vr}{\code{#4}}{#1}% + \defname{#2}{#3}{#4}\defunargs{#5\unskip}% +} + +%%% Untyped variables: + +% @defvr category var args +\makedefun{defvr}#1 {\deftypevrheader{#1} {} } + +% @defcv category class var args +\makedefun{defcv}#1 {\defcvof{#1\ \putwordof}} + +% \defcvof {category of}class var args +\def\defcvof#1#2 {\deftypecvof{#1}#2 {} } + +%%% Type: +% @deftp category name args +\makedefun{deftp}#1 #2 #3\endheader{% + \doind{tp}{\code{#2}}% + \defname{#1}{}{#2}\defunargs{#3\unskip}% +} + +% Remaining @defun-like shortcuts: +\makedefun{defun}{\deffnheader{\putwordDeffunc} } +\makedefun{defmac}{\deffnheader{\putwordDefmac} } +\makedefun{defspec}{\deffnheader{\putwordDefspec} } +\makedefun{deftypefun}{\deftypefnheader{\putwordDeffunc} } +\makedefun{defvar}{\defvrheader{\putwordDefvar} } +\makedefun{defopt}{\defvrheader{\putwordDefopt} } +\makedefun{deftypevar}{\deftypevrheader{\putwordDefvar} } +\makedefun{defmethod}{\defopon\putwordMethodon} +\makedefun{deftypemethod}{\deftypeopon\putwordMethodon} +\makedefun{defivar}{\defcvof\putwordInstanceVariableof} +\makedefun{deftypeivar}{\deftypecvof\putwordInstanceVariableof} + +% \defname, which formats the name of the @def (not the args). +% #1 is the category, such as "Function". +% #2 is the return type, if any. +% #3 is the function name. +% +% We are followed by (but not passed) the arguments, if any. +% +\def\defname#1#2#3{% + % Get the values of \leftskip and \rightskip as they were outside the @def... + \advance\leftskip by -\defbodyindent + % + % How we'll format the type name. Putting it in brackets helps + % distinguish it from the body text that may end up on the next line + % just below it. + \def\temp{#1}% + \setbox0=\hbox{\kern\deflastargmargin \ifx\temp\empty\else [\rm\temp]\fi} + % + % Figure out line sizes for the paragraph shape. + % The first line needs space for \box0; but if \rightskip is nonzero, + % we need only space for the part of \box0 which exceeds it: + \dimen0=\hsize \advance\dimen0 by -\wd0 \advance\dimen0 by \rightskip + % The continuations: + \dimen2=\hsize \advance\dimen2 by -\defargsindent + % (plain.tex says that \dimen1 should be used only as global.) + \parshape 2 0in \dimen0 \defargsindent \dimen2 + % + % Put the type name to the right margin. + \noindent + \hbox to 0pt{% + \hfil\box0 \kern-\hsize + % \hsize has to be shortened this way: + \kern\leftskip + % Intentionally do not respect \rightskip, since we need the space. + }% + % + % Allow all lines to be underfull without complaint: + \tolerance=10000 \hbadness=10000 + \exdentamount=\defbodyindent + {% + % defun fonts. We use typewriter by default (used to be bold) because: + % . we're printing identifiers, they should be in tt in principle. + % . in languages with many accents, such as Czech or French, it's + % common to leave accents off identifiers. The result looks ok in + % tt, but exceedingly strange in rm. + % . we don't want -- and --- to be treated as ligatures. + % . this still does not fix the ?` and !` ligatures, but so far no + % one has made identifiers using them :). + \df \tt + \def\temp{#2}% return value type + \ifx\temp\empty\else \tclose{\temp} \fi + #3% output function name + }% + {\rm\enskip}% hskip 0.5 em of \tenrm + % + \boldbrax + % arguments will be output next, if any. +} + +% Print arguments in slanted roman (not ttsl), inconsistently with using +% tt for the name. This is because literal text is sometimes needed in +% the argument list (groff manual), and ttsl and tt are not very +% distinguishable. Prevent hyphenation at `-' chars. +% +\def\defunargs#1{% + % use sl by default (not ttsl), + % tt for the names. + \df \sl \hyphenchar\font=0 + % + % On the other hand, if an argument has two dashes (for instance), we + % want a way to get ttsl. Let's try @var for that. + \let\var=\ttslanted + #1% + \sl\hyphenchar\font=45 +} + +% We want ()&[] to print specially on the defun line. +% +\def\activeparens{% + \catcode`\(=\active \catcode`\)=\active + \catcode`\[=\active \catcode`\]=\active + \catcode`\&=\active +} + +% Make control sequences which act like normal parenthesis chars. +\let\lparen = ( \let\rparen = ) + +% Be sure that we always have a definition for `(', etc. For example, +% if the fn name has parens in it, \boldbrax will not be in effect yet, +% so TeX would otherwise complain about undefined control sequence. +{ + \activeparens + \global\let(=\lparen \global\let)=\rparen + \global\let[=\lbrack \global\let]=\rbrack + \global\let& = \& + + \gdef\boldbrax{\let(=\opnr\let)=\clnr\let[=\lbrb\let]=\rbrb} + \gdef\magicamp{\let&=\amprm} +} + +\newcount\parencount + +% If we encounter &foo, then turn on ()-hacking afterwards +\newif\ifampseen +\def\amprm#1 {\ampseentrue{\bf\ }} + +\def\parenfont{% + \ifampseen + % At the first level, print parens in roman, + % otherwise use the default font. + \ifnum \parencount=1 \rm \fi + \else + % The \sf parens (in \boldbrax) actually are a little bolder than + % the contained text. This is especially needed for [ and ] . + \sf + \fi +} +\def\infirstlevel#1{% + \ifampseen + \ifnum\parencount=1 + #1% + \fi + \fi +} +\def\bfafterword#1 {#1 \bf} + +\def\opnr{% + \global\advance\parencount by 1 + {\parenfont(}% + \infirstlevel \bfafterword +} +\def\clnr{% + {\parenfont)}% + \infirstlevel \sl + \global\advance\parencount by -1 +} + +\newcount\brackcount +\def\lbrb{% + \global\advance\brackcount by 1 + {\bf[}% +} +\def\rbrb{% + {\bf]}% + \global\advance\brackcount by -1 +} + +\def\checkparencounts{% + \ifnum\parencount=0 \else \badparencount \fi + \ifnum\brackcount=0 \else \badbrackcount \fi +} +\def\badparencount{% + \errmessage{Unbalanced parentheses in @def}% + \global\parencount=0 +} +\def\badbrackcount{% + \errmessage{Unbalanced square braces in @def}% + \global\brackcount=0 +} + + +\message{macros,} +% @macro. + +% To do this right we need a feature of e-TeX, \scantokens, +% which we arrange to emulate with a temporary file in ordinary TeX. +\ifx\eTeXversion\undefined + \newwrite\macscribble + \def\scantokens#1{% + \toks0={#1}% + \immediate\openout\macscribble=\jobname.tmp + \immediate\write\macscribble{\the\toks0}% + \immediate\closeout\macscribble + \input \jobname.tmp + } +\fi + +\def\scanmacro#1{% + \begingroup + \newlinechar`\^^M + \let\xeatspaces\eatspaces + % Undo catcode changes of \startcontents and \doprintindex + % When called from @insertcopying or (short)caption, we need active + % backslash to get it printed correctly. Previously, we had + % \catcode`\\=\other instead. We'll see whether a problem appears + % with macro expansion. --kasal, 19aug04 + \catcode`\@=0 \catcode`\\=\active \escapechar=`\@ + % ... and \example + \spaceisspace + % + % Append \endinput to make sure that TeX does not see the ending newline. + % + % I've verified that it is necessary both for e-TeX and for ordinary TeX + % --kasal, 29nov03 + \scantokens{#1\endinput}% + \endgroup +} + +\def\scanexp#1{% + \edef\temp{\noexpand\scanmacro{#1}}% + \temp +} + +\newcount\paramno % Count of parameters +\newtoks\macname % Macro name +\newif\ifrecursive % Is it recursive? + +% List of all defined macros in the form +% \definedummyword\macro1\definedummyword\macro2... +% Currently is also contains all @aliases; the list can be split +% if there is a need. +\def\macrolist{} + +% Add the macro to \macrolist +\def\addtomacrolist#1{\expandafter \addtomacrolistxxx \csname#1\endcsname} +\def\addtomacrolistxxx#1{% + \toks0 = \expandafter{\macrolist\definedummyword#1}% + \xdef\macrolist{\the\toks0}% +} + +% Utility routines. +% This does \let #1 = #2, with \csnames; that is, +% \let \csname#1\endcsname = \csname#2\endcsname +% (except of course we have to play expansion games). +% +\def\cslet#1#2{% + \expandafter\let + \csname#1\expandafter\endcsname + \csname#2\endcsname +} + +% Trim leading and trailing spaces off a string. +% Concepts from aro-bend problem 15 (see CTAN). +{\catcode`\@=11 +\gdef\eatspaces #1{\expandafter\trim@\expandafter{#1 }} +\gdef\trim@ #1{\trim@@ @#1 @ #1 @ @@} +\gdef\trim@@ #1@ #2@ #3@@{\trim@@@\empty #2 @} +\def\unbrace#1{#1} +\unbrace{\gdef\trim@@@ #1 } #2@{#1} +} + +% Trim a single trailing ^^M off a string. +{\catcode`\^^M=\other \catcode`\Q=3% +\gdef\eatcr #1{\eatcra #1Q^^MQ}% +\gdef\eatcra#1^^MQ{\eatcrb#1Q}% +\gdef\eatcrb#1Q#2Q{#1}% +} + +% Macro bodies are absorbed as an argument in a context where +% all characters are catcode 10, 11 or 12, except \ which is active +% (as in normal texinfo). It is necessary to change the definition of \. + +% It's necessary to have hard CRs when the macro is executed. This is +% done by making ^^M (\endlinechar) catcode 12 when reading the macro +% body, and then making it the \newlinechar in \scanmacro. + +\def\scanctxt{% + \catcode`\"=\other + \catcode`\+=\other + \catcode`\<=\other + \catcode`\>=\other + \catcode`\@=\other + \catcode`\^=\other + \catcode`\_=\other + \catcode`\|=\other + \catcode`\~=\other +} + +\def\scanargctxt{% + \scanctxt + \catcode`\\=\other + \catcode`\^^M=\other +} + +\def\macrobodyctxt{% + \scanctxt + \catcode`\{=\other + \catcode`\}=\other + \catcode`\^^M=\other + \usembodybackslash +} + +\def\macroargctxt{% + \scanctxt + \catcode`\\=\other +} + +% \mbodybackslash is the definition of \ in @macro bodies. +% It maps \foo\ => \csname macarg.foo\endcsname => #N +% where N is the macro parameter number. +% We define \csname macarg.\endcsname to be \realbackslash, so +% \\ in macro replacement text gets you a backslash. + +{\catcode`@=0 @catcode`@\=@active + @gdef at usembodybackslash{@let\=@mbodybackslash} + @gdef at mbodybackslash#1\{@csname macarg.#1 at endcsname} +} +\expandafter\def\csname macarg.\endcsname{\realbackslash} + +\def\macro{\recursivefalse\parsearg\macroxxx} +\def\rmacro{\recursivetrue\parsearg\macroxxx} + +\def\macroxxx#1{% + \getargs{#1}% now \macname is the macname and \argl the arglist + \ifx\argl\empty % no arguments + \paramno=0% + \else + \expandafter\parsemargdef \argl;% + \fi + \if1\csname ismacro.\the\macname\endcsname + \message{Warning: redefining \the\macname}% + \else + \expandafter\ifx\csname \the\macname\endcsname \relax + \else \errmessage{Macro name \the\macname\space already defined}\fi + \global\cslet{macsave.\the\macname}{\the\macname}% + \global\expandafter\let\csname ismacro.\the\macname\endcsname=1% + \addtomacrolist{\the\macname}% + \fi + \begingroup \macrobodyctxt + \ifrecursive \expandafter\parsermacbody + \else \expandafter\parsemacbody + \fi} + +\parseargdef\unmacro{% + \if1\csname ismacro.#1\endcsname + \global\cslet{#1}{macsave.#1}% + \global\expandafter\let \csname ismacro.#1\endcsname=0% + % Remove the macro name from \macrolist: + \begingroup + \expandafter\let\csname#1\endcsname \relax + \let\definedummyword\unmacrodo + \xdef\macrolist{\macrolist}% + \endgroup + \else + \errmessage{Macro #1 not defined}% + \fi +} + +% Called by \do from \dounmacro on each macro. The idea is to omit any +% macro definitions that have been changed to \relax. +% +\def\unmacrodo#1{% + \ifx #1\relax + % remove this + \else + \noexpand\definedummyword \noexpand#1% + \fi +} + +% This makes use of the obscure feature that if the last token of a +% is #, then the preceding argument is delimited by +% an opening brace, and that opening brace is not consumed. +\def\getargs#1{\getargsxxx#1{}} +\def\getargsxxx#1#{\getmacname #1 \relax\getmacargs} +\def\getmacname #1 #2\relax{\macname={#1}} +\def\getmacargs#1{\def\argl{#1}} + +% Parse the optional {params} list. Set up \paramno and \paramlist +% so \defmacro knows what to do. Define \macarg.blah for each blah +% in the params list, to be ##N where N is the position in that list. +% That gets used by \mbodybackslash (above). + +% We need to get `macro parameter char #' into several definitions. +% The technique used is stolen from LaTeX: let \hash be something +% unexpandable, insert that wherever you need a #, and then redefine +% it to # just before using the token list produced. +% +% The same technique is used to protect \eatspaces till just before +% the macro is used. + +\def\parsemargdef#1;{\paramno=0\def\paramlist{}% + \let\hash\relax\let\xeatspaces\relax\parsemargdefxxx#1,;,} +\def\parsemargdefxxx#1,{% + \if#1;\let\next=\relax + \else \let\next=\parsemargdefxxx + \advance\paramno by 1% + \expandafter\edef\csname macarg.\eatspaces{#1}\endcsname + {\xeatspaces{\hash\the\paramno}}% + \edef\paramlist{\paramlist\hash\the\paramno,}% + \fi\next} + +% These two commands read recursive and nonrecursive macro bodies. +% (They're different since rec and nonrec macros end differently.) + +\long\def\parsemacbody#1 at end macro% +{\xdef\temp{\eatcr{#1}}\endgroup\defmacro}% +\long\def\parsermacbody#1 at end rmacro% +{\xdef\temp{\eatcr{#1}}\endgroup\defmacro}% + +% This defines the macro itself. There are six cases: recursive and +% nonrecursive macros of zero, one, and many arguments. +% Much magic with \expandafter here. +% \xdef is used so that macro definitions will survive the file +% they're defined in; @include reads the file inside a group. +\def\defmacro{% + \let\hash=##% convert placeholders to macro parameter chars + \ifrecursive + \ifcase\paramno + % 0 + \expandafter\xdef\csname\the\macname\endcsname{% + \noexpand\scanmacro{\temp}}% + \or % 1 + \expandafter\xdef\csname\the\macname\endcsname{% + \bgroup\noexpand\macroargctxt + \noexpand\braceorline + \expandafter\noexpand\csname\the\macname xxx\endcsname}% + \expandafter\xdef\csname\the\macname xxx\endcsname##1{% + \egroup\noexpand\scanmacro{\temp}}% + \else % many + \expandafter\xdef\csname\the\macname\endcsname{% + \bgroup\noexpand\macroargctxt + \noexpand\csname\the\macname xx\endcsname}% + \expandafter\xdef\csname\the\macname xx\endcsname##1{% + \expandafter\noexpand\csname\the\macname xxx\endcsname ##1,}% + \expandafter\expandafter + \expandafter\xdef + \expandafter\expandafter + \csname\the\macname xxx\endcsname + \paramlist{\egroup\noexpand\scanmacro{\temp}}% + \fi + \else + \ifcase\paramno + % 0 + \expandafter\xdef\csname\the\macname\endcsname{% + \noexpand\norecurse{\the\macname}% + \noexpand\scanmacro{\temp}\egroup}% + \or % 1 + \expandafter\xdef\csname\the\macname\endcsname{% + \bgroup\noexpand\macroargctxt + \noexpand\braceorline + \expandafter\noexpand\csname\the\macname xxx\endcsname}% + \expandafter\xdef\csname\the\macname xxx\endcsname##1{% + \egroup + \noexpand\norecurse{\the\macname}% + \noexpand\scanmacro{\temp}\egroup}% + \else % many + \expandafter\xdef\csname\the\macname\endcsname{% + \bgroup\noexpand\macroargctxt + \expandafter\noexpand\csname\the\macname xx\endcsname}% + \expandafter\xdef\csname\the\macname xx\endcsname##1{% + \expandafter\noexpand\csname\the\macname xxx\endcsname ##1,}% + \expandafter\expandafter + \expandafter\xdef + \expandafter\expandafter + \csname\the\macname xxx\endcsname + \paramlist{% + \egroup + \noexpand\norecurse{\the\macname}% + \noexpand\scanmacro{\temp}\egroup}% + \fi + \fi} + +\def\norecurse#1{\bgroup\cslet{#1}{macsave.#1}} + +% \braceorline decides whether the next nonwhitespace character is a +% {. If so it reads up to the closing }, if not, it reads the whole +% line. Whatever was read is then fed to the next control sequence +% as an argument (by \parsebrace or \parsearg) +\def\braceorline#1{\let\next=#1\futurelet\nchar\braceorlinexxx} +\def\braceorlinexxx{% + \ifx\nchar\bgroup\else + \expandafter\parsearg + \fi \next} + + +% @alias. +% We need some trickery to remove the optional spaces around the equal +% sign. Just make them active and then expand them all to nothing. +\def\alias{\parseargusing\obeyspaces\aliasxxx} +\def\aliasxxx #1{\aliasyyy#1\relax} +\def\aliasyyy #1=#2\relax{% + {% + \expandafter\let\obeyedspace=\empty + \addtomacrolist{#1}% + \xdef\next{\global\let\makecsname{#1}=\makecsname{#2}}% + }% + \next +} + + +\message{cross references,} + +\newwrite\auxfile + +\newif\ifhavexrefs % True if xref values are known. +\newif\ifwarnedxrefs % True if we warned once that they aren't known. + +% @inforef is relatively simple. +\def\inforef #1{\inforefzzz #1,,,,**} +\def\inforefzzz #1,#2,#3,#4**{\putwordSee{} \putwordInfo{} \putwordfile{} \file{\ignorespaces #3{}}, + node \samp{\ignorespaces#1{}}} + +% @node's only job in TeX is to define \lastnode, which is used in +% cross-references. The @node line might or might not have commas, and +% might or might not have spaces before the first comma, like: +% @node foo , bar , ... +% We don't want such trailing spaces in the node name. +% +\parseargdef\node{\checkenv{}\donode #1 ,\finishnodeparse} +% +% also remove a trailing comma, in case of something like this: +% @node Help-Cross, , , Cross-refs +\def\donode#1 ,#2\finishnodeparse{\dodonode #1,\finishnodeparse} +\def\dodonode#1,#2\finishnodeparse{\gdef\lastnode{#1}} + +\let\nwnode=\node +\let\lastnode=\empty + +% Write a cross-reference definition for the current node. #1 is the +% type (Ynumbered, Yappendix, Ynothing). +% +\def\donoderef#1{% + \ifx\lastnode\empty\else + \setref{\lastnode}{#1}% + \global\let\lastnode=\empty + \fi +} + +% @anchor{NAME} -- define xref target at arbitrary point. +% +\newcount\savesfregister +% +\def\savesf{\relax \ifhmode \savesfregister=\spacefactor \fi} +\def\restoresf{\relax \ifhmode \spacefactor=\savesfregister \fi} +\def\anchor#1{\savesf \setref{#1}{Ynothing}\restoresf \ignorespaces} + +% \setref{NAME}{SNT} defines a cross-reference point NAME (a node or an +% anchor), which consists of three parts: +% 1) NAME-title - the current sectioning name taken from \thissection, +% or the anchor name. +% 2) NAME-snt - section number and type, passed as the SNT arg, or +% empty for anchors. +% 3) NAME-pg - the page number. +% +% This is called from \donoderef, \anchor, and \dofloat. In the case of +% floats, there is an additional part, which is not written here: +% 4) NAME-lof - the text as it should appear in a @listoffloats. +% +\def\setref#1#2{% + \pdfmkdest{#1}% + \iflinks + {% + \atdummies % preserve commands, but don't expand them + \edef\writexrdef##1##2{% + \write\auxfile{@xrdef{#1-% #1 of \setref, expanded by the \edef + ##1}{##2}}% these are parameters of \writexrdef + }% + \toks0 = \expandafter{\thissection}% + \immediate \writexrdef{title}{\the\toks0 }% + \immediate \writexrdef{snt}{\csname #2\endcsname}% \Ynumbered etc. + \writexrdef{pg}{\folio}% will be written later, during \shipout + }% + \fi +} + +% @xref, @pxref, and @ref generate cross-references. For \xrefX, #1 is +% the node name, #2 the name of the Info cross-reference, #3 the printed +% node name, #4 the name of the Info file, #5 the name of the printed +% manual. All but the node name can be omitted. +% +\def\pxref#1{\putwordsee{} \xrefX[#1,,,,,,,]} +\def\xref#1{\putwordSee{} \xrefX[#1,,,,,,,]} +\def\ref#1{\xrefX[#1,,,,,,,]} +\def\xrefX[#1,#2,#3,#4,#5,#6]{\begingroup + \unsepspaces + \def\printedmanual{\ignorespaces #5}% + \def\printedrefname{\ignorespaces #3}% + \setbox1=\hbox{\printedmanual\unskip}% + \setbox0=\hbox{\printedrefname\unskip}% + \ifdim \wd0 = 0pt + % No printed node name was explicitly given. + \expandafter\ifx\csname SETxref-automatic-section-title\endcsname\relax + % Use the node name inside the square brackets. + \def\printedrefname{\ignorespaces #1}% + \else + % Use the actual chapter/section title appear inside + % the square brackets. Use the real section title if we have it. + \ifdim \wd1 > 0pt + % It is in another manual, so we don't have it. + \def\printedrefname{\ignorespaces #1}% + \else + \ifhavexrefs + % We know the real title if we have the xref values. + \def\printedrefname{\refx{#1-title}{}}% + \else + % Otherwise just copy the Info node name. + \def\printedrefname{\ignorespaces #1}% + \fi% + \fi + \fi + \fi + % + % Make link in pdf output. + \ifpdf + \leavevmode + \getfilename{#4}% + {\turnoffactive + % See comments at \activebackslashdouble. + {\activebackslashdouble \xdef\pdfxrefdest{#1}% + \backslashparens\pdfxrefdest}% + % + \ifnum\filenamelength>0 + \startlink attr{/Border [0 0 0]}% + goto file{\the\filename.pdf} name{\pdfxrefdest}% + \else + \startlink attr{/Border [0 0 0]}% + goto name{\pdfmkpgn{\pdfxrefdest}}% + \fi + }% + \linkcolor + \fi + % + % Float references are printed completely differently: "Figure 1.2" + % instead of "[somenode], p.3". We distinguish them by the + % LABEL-title being set to a magic string. + {% + % Have to otherify everything special to allow the \csname to + % include an _ in the xref name, etc. + \indexnofonts + \turnoffactive + \expandafter\global\expandafter\let\expandafter\Xthisreftitle + \csname XR#1-title\endcsname + }% + \iffloat\Xthisreftitle + % If the user specified the print name (third arg) to the ref, + % print it instead of our usual "Figure 1.2". + \ifdim\wd0 = 0pt + \refx{#1-snt}% + \else + \printedrefname + \fi + % + % if the user also gave the printed manual name (fifth arg), append + % "in MANUALNAME". + \ifdim \wd1 > 0pt + \space \putwordin{} \cite{\printedmanual}% + \fi + \else + % node/anchor (non-float) references. + % + % If we use \unhbox0 and \unhbox1 to print the node names, TeX does not + % insert empty discretionaries after hyphens, which means that it will + % not find a line break at a hyphen in a node names. Since some manuals + % are best written with fairly long node names, containing hyphens, this + % is a loss. Therefore, we give the text of the node name again, so it + % is as if TeX is seeing it for the first time. + \ifdim \wd1 > 0pt + \putwordsection{} ``\printedrefname'' \putwordin{} \cite{\printedmanual}% + \else + % _ (for example) has to be the character _ for the purposes of the + % control sequence corresponding to the node, but it has to expand + % into the usual \leavevmode...\vrule stuff for purposes of + % printing. So we \turnoffactive for the \refx-snt, back on for the + % printing, back off for the \refx-pg. + {\turnoffactive + % Only output a following space if the -snt ref is nonempty; for + % @unnumbered and @anchor, it won't be. + \setbox2 = \hbox{\ignorespaces \refx{#1-snt}{}}% + \ifdim \wd2 > 0pt \refx{#1-snt}\space\fi + }% + % output the `[mynode]' via a macro so it can be overridden. + \xrefprintnodename\printedrefname + % + % But we always want a comma and a space: + ,\space + % + % output the `page 3'. + \turnoffactive \putwordpage\tie\refx{#1-pg}{}% + \fi + \fi + \endlink +\endgroup} + +% This macro is called from \xrefX for the `[nodename]' part of xref +% output. It's a separate macro only so it can be changed more easily, +% since square brackets don't work well in some documents. Particularly +% one that Bob is working on :). +% +\def\xrefprintnodename#1{[#1]} + +% Things referred to by \setref. +% +\def\Ynothing{} +\def\Yomitfromtoc{} +\def\Ynumbered{% + \ifnum\secno=0 + \putwordChapter at tie \the\chapno + \else \ifnum\subsecno=0 + \putwordSection at tie \the\chapno.\the\secno + \else \ifnum\subsubsecno=0 + \putwordSection at tie \the\chapno.\the\secno.\the\subsecno + \else + \putwordSection at tie \the\chapno.\the\secno.\the\subsecno.\the\subsubsecno + \fi\fi\fi +} +\def\Yappendix{% + \ifnum\secno=0 + \putwordAppendix at tie @char\the\appendixno{}% + \else \ifnum\subsecno=0 + \putwordSection at tie @char\the\appendixno.\the\secno + \else \ifnum\subsubsecno=0 + \putwordSection at tie @char\the\appendixno.\the\secno.\the\subsecno + \else + \putwordSection at tie + @char\the\appendixno.\the\secno.\the\subsecno.\the\subsubsecno + \fi\fi\fi +} + +% Define \refx{NAME}{SUFFIX} to reference a cross-reference string named NAME. +% If its value is nonempty, SUFFIX is output afterward. +% +\def\refx#1#2{% + {% + \indexnofonts + \otherbackslash + \expandafter\global\expandafter\let\expandafter\thisrefX + \csname XR#1\endcsname + }% + \ifx\thisrefX\relax + % If not defined, say something at least. + \angleleft un\-de\-fined\angleright + \iflinks + \ifhavexrefs + \message{\linenumber Undefined cross reference `#1'.}% + \else + \ifwarnedxrefs\else + \global\warnedxrefstrue + \message{Cross reference values unknown; you must run TeX again.}% + \fi + \fi + \fi + \else + % It's defined, so just use it. + \thisrefX + \fi + #2% Output the suffix in any case. +} + +% This is the macro invoked by entries in the aux file. Usually it's +% just a \def (we prepend XR to the control sequence name to avoid +% collisions). But if this is a float type, we have more work to do. +% +\def\xrdef#1#2{% + \expandafter\gdef\csname XR#1\endcsname{#2}% remember this xref value. + % + % Was that xref control sequence that we just defined for a float? + \expandafter\iffloat\csname XR#1\endcsname + % it was a float, and we have the (safe) float type in \iffloattype. + \expandafter\let\expandafter\floatlist + \csname floatlist\iffloattype\endcsname + % + % Is this the first time we've seen this float type? + \expandafter\ifx\floatlist\relax + \toks0 = {\do}% yes, so just \do + \else + % had it before, so preserve previous elements in list. + \toks0 = \expandafter{\floatlist\do}% + \fi + % + % Remember this xref in the control sequence \floatlistFLOATTYPE, + % for later use in \listoffloats. + \expandafter\xdef\csname floatlist\iffloattype\endcsname{\the\toks0{#1}}% + \fi +} + +% Read the last existing aux file, if any. No error if none exists. +% +\def\tryauxfile{% + \openin 1 \jobname.aux + \ifeof 1 \else + \readdatafile{aux}% + \global\havexrefstrue + \fi + \closein 1 +} + +\def\setupdatafile{% + \catcode`\^^@=\other + \catcode`\^^A=\other + \catcode`\^^B=\other + \catcode`\^^C=\other + \catcode`\^^D=\other + \catcode`\^^E=\other + \catcode`\^^F=\other + \catcode`\^^G=\other + \catcode`\^^H=\other + \catcode`\^^K=\other + \catcode`\^^L=\other + \catcode`\^^N=\other + \catcode`\^^P=\other + \catcode`\^^Q=\other + \catcode`\^^R=\other + \catcode`\^^S=\other + \catcode`\^^T=\other + \catcode`\^^U=\other + \catcode`\^^V=\other + \catcode`\^^W=\other + \catcode`\^^X=\other + \catcode`\^^Z=\other + \catcode`\^^[=\other + \catcode`\^^\=\other + \catcode`\^^]=\other + \catcode`\^^^=\other + \catcode`\^^_=\other + % It was suggested to set the catcode of ^ to 7, which would allow ^^e4 etc. + % in xref tags, i.e., node names. But since ^^e4 notation isn't + % supported in the main text, it doesn't seem desirable. Furthermore, + % that is not enough: for node names that actually contain a ^ + % character, we would end up writing a line like this: 'xrdef {'hat + % b-title}{'hat b} and \xrdef does a \csname...\endcsname on the first + % argument, and \hat is not an expandable control sequence. It could + % all be worked out, but why? Either we support ^^ or we don't. + % + % The other change necessary for this was to define \auxhat: + % \def\auxhat{\def^{'hat }}% extra space so ok if followed by letter + % and then to call \auxhat in \setq. + % + \catcode`\^=\other + % + % Special characters. Should be turned off anyway, but... + \catcode`\~=\other + \catcode`\[=\other + \catcode`\]=\other + \catcode`\"=\other + \catcode`\_=\other + \catcode`\|=\other + \catcode`\<=\other + \catcode`\>=\other + \catcode`\$=\other + \catcode`\#=\other + \catcode`\&=\other + \catcode`\%=\other + \catcode`+=\other % avoid \+ for paranoia even though we've turned it off + % + % This is to support \ in node names and titles, since the \ + % characters end up in a \csname. It's easier than + % leaving it active and making its active definition an actual \ + % character. What I don't understand is why it works in the *value* + % of the xrdef. Seems like it should be a catcode12 \, and that + % should not typeset properly. But it works, so I'm moving on for + % now. --karl, 15jan04. + \catcode`\\=\other + % + % Make the characters 128-255 be printing characters. + {% + \count1=128 + \def\loop{% + \catcode\count1=\other + \advance\count1 by 1 + \ifnum \count1<256 \loop \fi + }% + }% + % + % @ is our escape character in .aux files, and we need braces. + \catcode`\{=1 + \catcode`\}=2 + \catcode`\@=0 +} + +\def\readdatafile#1{% +\begingroup + \setupdatafile + \input\jobname.#1 +\endgroup} + +\message{insertions,} +% including footnotes. + +\newcount \footnoteno + +% The trailing space in the following definition for supereject is +% vital for proper filling; pages come out unaligned when you do a +% pagealignmacro call if that space before the closing brace is +% removed. (Generally, numeric constants should always be followed by a +% space to prevent strange expansion errors.) +\def\supereject{\par\penalty -20000\footnoteno =0 } + +% @footnotestyle is meaningful for info output only. +\let\footnotestyle=\comment + +{\catcode `\@=11 +% +% Auto-number footnotes. Otherwise like plain. +\gdef\footnote{% + \let\indent=\ptexindent + \let\noindent=\ptexnoindent + \global\advance\footnoteno by \@ne + \edef\thisfootno{$^{\the\footnoteno}$}% + % + % In case the footnote comes at the end of a sentence, preserve the + % extra spacing after we do the footnote number. + \let\@sf\empty + \ifhmode\edef\@sf{\spacefactor\the\spacefactor}\ptexslash\fi + % + % Remove inadvertent blank space before typesetting the footnote number. + \unskip + \thisfootno\@sf + \dofootnote +}% + +% Don't bother with the trickery in plain.tex to not require the +% footnote text as a parameter. Our footnotes don't need to be so general. +% +% Oh yes, they do; otherwise, @ifset (and anything else that uses +% \parseargline) fails inside footnotes because the tokens are fixed when +% the footnote is read. --karl, 16nov96. +% +\gdef\dofootnote{% + \insert\footins\bgroup + % We want to typeset this text as a normal paragraph, even if the + % footnote reference occurs in (for example) a display environment. + % So reset some parameters. + \hsize=\pagewidth + \interlinepenalty\interfootnotelinepenalty + \splittopskip\ht\strutbox % top baseline for broken footnotes + \splitmaxdepth\dp\strutbox + \floatingpenalty\@MM + \leftskip\z at skip + \rightskip\z at skip + \spaceskip\z at skip + \xspaceskip\z at skip + \parindent\defaultparindent + % + \smallfonts \rm + % + % Because we use hanging indentation in footnotes, a @noindent appears + % to exdent this text, so make it be a no-op. makeinfo does not use + % hanging indentation so @noindent can still be needed within footnote + % text after an @example or the like (not that this is good style). + \let\noindent = \relax + % + % Hang the footnote text off the number. Use \everypar in case the + % footnote extends for more than one paragraph. + \everypar = {\hang}% + \textindent{\thisfootno}% + % + % Don't crash into the line above the footnote text. Since this + % expands into a box, it must come within the paragraph, lest it + % provide a place where TeX can split the footnote. + \footstrut + \futurelet\next\fo at t +} +}%end \catcode `\@=11 + +% In case a @footnote appears in a vbox, save the footnote text and create +% the real \insert just after the vbox finished. Otherwise, the insertion +% would be lost. +% Similarily, if a @footnote appears inside an alignment, save the footnote +% text to a box and make the \insert when a row of the table is finished. +% And the same can be done for other insert classes. --kasal, 16nov03. + +% Replace the \insert primitive by a cheating macro. +% Deeper inside, just make sure that the saved insertions are not spilled +% out prematurely. +% +\def\startsavinginserts{% + \ifx \insert\ptexinsert + \let\insert\saveinsert + \else + \let\checkinserts\relax + \fi +} + +% This \insert replacement works for both \insert\footins{foo} and +% \insert\footins\bgroup foo\egroup, but it doesn't work for \insert27{foo}. +% +\def\saveinsert#1{% + \edef\next{\noexpand\savetobox \makeSAVEname#1}% + \afterassignment\next + % swallow the left brace + \let\temp = +} +\def\makeSAVEname#1{\makecsname{SAVE\expandafter\gobble\string#1}} +\def\savetobox#1{\global\setbox#1 = \vbox\bgroup \unvbox#1} + +\def\checksaveins#1{\ifvoid#1\else \placesaveins#1\fi} + +\def\placesaveins#1{% + \ptexinsert \csname\expandafter\gobblesave\string#1\endcsname + {\box#1}% +} + +% eat @SAVE -- beware, all of them have catcode \other: +{ + \def\dospecials{\do S\do A\do V\do E} \uncatcodespecials % ;-) + \gdef\gobblesave @SAVE{} +} + +% initialization: +\def\newsaveins #1{% + \edef\next{\noexpand\newsaveinsX \makeSAVEname#1}% + \next +} +\def\newsaveinsX #1{% + \csname newbox\endcsname #1% + \expandafter\def\expandafter\checkinserts\expandafter{\checkinserts + \checksaveins #1}% +} + +% initialize: +\let\checkinserts\empty +\newsaveins\footins +\newsaveins\margin + + +% @image. We use the macros from epsf.tex to support this. +% If epsf.tex is not installed and @image is used, we complain. +% +% Check for and read epsf.tex up front. If we read it only at @image +% time, we might be inside a group, and then its definitions would get +% undone and the next image would fail. +\openin 1 = epsf.tex +\ifeof 1 \else + % Do not bother showing banner with epsf.tex v2.7k (available in + % doc/epsf.tex and on ctan). + \def\epsfannounce{\toks0 = }% + \input epsf.tex +\fi +\closein 1 +% +% We will only complain once about lack of epsf.tex. +\newif\ifwarnednoepsf +\newhelp\noepsfhelp{epsf.tex must be installed for images to + work. It is also included in the Texinfo distribution, or you can get + it from ftp://tug.org/tex/epsf.tex.} +% +\def\image#1{% + \ifx\epsfbox\undefined + \ifwarnednoepsf \else + \errhelp = \noepsfhelp + \errmessage{epsf.tex not found, images will be ignored}% + \global\warnednoepsftrue + \fi + \else + \imagexxx #1,,,,,\finish + \fi +} +% +% Arguments to @image: +% #1 is (mandatory) image filename; we tack on .eps extension. +% #2 is (optional) width, #3 is (optional) height. +% #4 is (ignored optional) html alt text. +% #5 is (ignored optional) extension. +% #6 is just the usual extra ignored arg for parsing this stuff. +\newif\ifimagevmode +\def\imagexxx#1,#2,#3,#4,#5,#6\finish{\begingroup + \catcode`\^^M = 5 % in case we're inside an example + \normalturnoffactive % allow _ et al. in names + % If the image is by itself, center it. + \ifvmode + \imagevmodetrue + \nobreak\bigskip + % Usually we'll have text after the image which will insert + % \parskip glue, so insert it here too to equalize the space + % above and below. + \nobreak\vskip\parskip + \nobreak + \line\bgroup\hss + \fi + % + % Output the image. + \ifpdf + \dopdfimage{#1}{#2}{#3}% + \else + % \epsfbox itself resets \epsf?size at each figure. + \setbox0 = \hbox{\ignorespaces #2}\ifdim\wd0 > 0pt \epsfxsize=#2\relax \fi + \setbox0 = \hbox{\ignorespaces #3}\ifdim\wd0 > 0pt \epsfysize=#3\relax \fi + \epsfbox{#1.eps}% + \fi + % + \ifimagevmode \hss \egroup \bigbreak \fi % space after the image +\endgroup} + + +% @float FLOATTYPE,LABEL,LOC ... @end float for displayed figures, tables, +% etc. We don't actually implement floating yet, we always include the +% float "here". But it seemed the best name for the future. +% +\envparseargdef\float{\eatcommaspace\eatcommaspace\dofloat#1, , ,\finish} + +% There may be a space before second and/or third parameter; delete it. +\def\eatcommaspace#1, {#1,} + +% #1 is the optional FLOATTYPE, the text label for this float, typically +% "Figure", "Table", "Example", etc. Can't contain commas. If omitted, +% this float will not be numbered and cannot be referred to. +% +% #2 is the optional xref label. Also must be present for the float to +% be referable. +% +% #3 is the optional positioning argument; for now, it is ignored. It +% will somehow specify the positions allowed to float to (here, top, bottom). +% +% We keep a separate counter for each FLOATTYPE, which we reset at each +% chapter-level command. +\let\resetallfloatnos=\empty +% +\def\dofloat#1,#2,#3,#4\finish{% + \let\thiscaption=\empty + \let\thisshortcaption=\empty + % + % don't lose footnotes inside @float. + % + % BEWARE: when the floats start float, we have to issue warning whenever an + % insert appears inside a float which could possibly float. --kasal, 26may04 + % + \startsavinginserts + % + % We can't be used inside a paragraph. + \par + % + \vtop\bgroup + \def\floattype{#1}% + \def\floatlabel{#2}% + \def\floatloc{#3}% we do nothing with this yet. + % + \ifx\floattype\empty + \let\safefloattype=\empty + \else + {% + % the floattype might have accents or other special characters, + % but we need to use it in a control sequence name. + \indexnofonts + \turnoffactive + \xdef\safefloattype{\floattype}% + }% + \fi + % + % If label is given but no type, we handle that as the empty type. + \ifx\floatlabel\empty \else + % We want each FLOATTYPE to be numbered separately (Figure 1, + % Table 1, Figure 2, ...). (And if no label, no number.) + % + \expandafter\getfloatno\csname\safefloattype floatno\endcsname + \global\advance\floatno by 1 + % + {% + % This magic value for \thissection is output by \setref as the + % XREFLABEL-title value. \xrefX uses it to distinguish float + % labels (which have a completely different output format) from + % node and anchor labels. And \xrdef uses it to construct the + % lists of floats. + % + \edef\thissection{\floatmagic=\safefloattype}% + \setref{\floatlabel}{Yfloat}% + }% + \fi + % + % start with \parskip glue, I guess. + \vskip\parskip + % + % Don't suppress indentation if a float happens to start a section. + \restorefirstparagraphindent +} + +% we have these possibilities: +% @float Foo,lbl & @caption{Cap}: Foo 1.1: Cap +% @float Foo,lbl & no caption: Foo 1.1 +% @float Foo & @caption{Cap}: Foo: Cap +% @float Foo & no caption: Foo +% @float ,lbl & Caption{Cap}: 1.1: Cap +% @float ,lbl & no caption: 1.1 +% @float & @caption{Cap}: Cap +% @float & no caption: +% +\def\Efloat{% + \let\floatident = \empty + % + % In all cases, if we have a float type, it comes first. + \ifx\floattype\empty \else \def\floatident{\floattype}\fi + % + % If we have an xref label, the number comes next. + \ifx\floatlabel\empty \else + \ifx\floattype\empty \else % if also had float type, need tie first. + \appendtomacro\floatident{\tie}% + \fi + % the number. + \appendtomacro\floatident{\chaplevelprefix\the\floatno}% + \fi + % + % Start the printed caption with what we've constructed in + % \floatident, but keep it separate; we need \floatident again. + \let\captionline = \floatident + % + \ifx\thiscaption\empty \else + \ifx\floatident\empty \else + \appendtomacro\captionline{: }% had ident, so need a colon between + \fi + % + % caption text. + \appendtomacro\captionline{\scanexp\thiscaption}% + \fi + % + % If we have anything to print, print it, with space before. + % Eventually this needs to become an \insert. + \ifx\captionline\empty \else + \vskip.5\parskip + \captionline + % + % Space below caption. + \vskip\parskip + \fi + % + % If have an xref label, write the list of floats info. Do this + % after the caption, to avoid chance of it being a breakpoint. + \ifx\floatlabel\empty \else + % Write the text that goes in the lof to the aux file as + % \floatlabel-lof. Besides \floatident, we include the short + % caption if specified, else the full caption if specified, else nothing. + {% + \atdummies + % since we read the caption text in the macro world, where ^^M + % is turned into a normal character, we have to scan it back, so + % we don't write the literal three characters "^^M" into the aux file. + \scanexp{% + \xdef\noexpand\gtemp{% + \ifx\thisshortcaption\empty + \thiscaption + \else + \thisshortcaption + \fi + }% + }% + \immediate\write\auxfile{@xrdef{\floatlabel-lof}{\floatident + \ifx\gtemp\empty \else : \gtemp \fi}}% + }% + \fi + \egroup % end of \vtop + % + % place the captured inserts + % + % BEWARE: when the floats start float, we have to issue warning whenever an + % insert appears inside a float which could possibly float. --kasal, 26may04 + % + \checkinserts +} + +% Append the tokens #2 to the definition of macro #1, not expanding either. +% +\def\appendtomacro#1#2{% + \expandafter\def\expandafter#1\expandafter{#1#2}% +} + +% @caption, @shortcaption +% +\def\caption{\docaption\thiscaption} +\def\shortcaption{\docaption\thisshortcaption} +\def\docaption{\checkenv\float \bgroup\scanargctxt\defcaption} +\def\defcaption#1#2{\egroup \def#1{#2}} + +% The parameter is the control sequence identifying the counter we are +% going to use. Create it if it doesn't exist and assign it to \floatno. +\def\getfloatno#1{% + \ifx#1\relax + % Haven't seen this figure type before. + \csname newcount\endcsname #1% + % + % Remember to reset this floatno at the next chap. + \expandafter\gdef\expandafter\resetallfloatnos + \expandafter{\resetallfloatnos #1=0 }% + \fi + \let\floatno#1% +} + +% \setref calls this to get the XREFLABEL-snt value. We want an @xref +% to the FLOATLABEL to expand to "Figure 3.1". We call \setref when we +% first read the @float command. +% +\def\Yfloat{\floattype at tie \chaplevelprefix\the\floatno}% + +% Magic string used for the XREFLABEL-title value, so \xrefX can +% distinguish floats from other xref types. +\def\floatmagic{!!float!!} + +% #1 is the control sequence we are passed; we expand into a conditional +% which is true if #1 represents a float ref. That is, the magic +% \thissection value which we \setref above. +% +\def\iffloat#1{\expandafter\doiffloat#1==\finish} +% +% #1 is (maybe) the \floatmagic string. If so, #2 will be the +% (safe) float type for this float. We set \iffloattype to #2. +% +\def\doiffloat#1=#2=#3\finish{% + \def\temp{#1}% + \def\iffloattype{#2}% + \ifx\temp\floatmagic +} + +% @listoffloats FLOATTYPE - print a list of floats like a table of contents. +% +\parseargdef\listoffloats{% + \def\floattype{#1}% floattype + {% + % the floattype might have accents or other special characters, + % but we need to use it in a control sequence name. + \indexnofonts + \turnoffactive + \xdef\safefloattype{\floattype}% + }% + % + % \xrdef saves the floats as a \do-list in \floatlistSAFEFLOATTYPE. + \expandafter\ifx\csname floatlist\safefloattype\endcsname \relax + \ifhavexrefs + % if the user said @listoffloats foo but never @float foo. + \message{\linenumber No `\safefloattype' floats to list.}% + \fi + \else + \begingroup + \leftskip=\tocindent % indent these entries like a toc + \let\do=\listoffloatsdo + \csname floatlist\safefloattype\endcsname + \endgroup + \fi +} + +% This is called on each entry in a list of floats. We're passed the +% xref label, in the form LABEL-title, which is how we save it in the +% aux file. We strip off the -title and look up \XRLABEL-lof, which +% has the text we're supposed to typeset here. +% +% Figures without xref labels will not be included in the list (since +% they won't appear in the aux file). +% +\def\listoffloatsdo#1{\listoffloatsdoentry#1\finish} +\def\listoffloatsdoentry#1-title\finish{{% + % Can't fully expand XR#1-lof because it can contain anything. Just + % pass the control sequence. On the other hand, XR#1-pg is just the + % page number, and we want to fully expand that so we can get a link + % in pdf output. + \toksA = \expandafter{\csname XR#1-lof\endcsname}% + % + % use the same \entry macro we use to generate the TOC and index. + \edef\writeentry{\noexpand\entry{\the\toksA}{\csname XR#1-pg\endcsname}}% + \writeentry +}} + +\message{localization,} +% and i18n. + +% @documentlanguage is usually given very early, just after +% @setfilename. If done too late, it may not override everything +% properly. Single argument is the language abbreviation. +% It would be nice if we could set up a hyphenation file here. +% +\parseargdef\documentlanguage{% + \tex % read txi-??.tex file in plain TeX. + % Read the file if it exists. + \openin 1 txi-#1.tex + \ifeof 1 + \errhelp = \nolanghelp + \errmessage{Cannot read language file txi-#1.tex}% + \else + \input txi-#1.tex + \fi + \closein 1 + \endgroup +} +\newhelp\nolanghelp{The given language definition file cannot be found or +is empty. Maybe you need to install it? In the current directory +should work if nowhere else does.} + + +% @documentencoding should change something in TeX eventually, most +% likely, but for now just recognize it. +\let\documentencoding = \comment + + +% Page size parameters. +% +\newdimen\defaultparindent \defaultparindent = 15pt + +\chapheadingskip = 15pt plus 4pt minus 2pt +\secheadingskip = 12pt plus 3pt minus 2pt +\subsecheadingskip = 9pt plus 2pt minus 2pt + +% Prevent underfull vbox error messages. +\vbadness = 10000 + +% Don't be so finicky about underfull hboxes, either. +\hbadness = 2000 + +% Following George Bush, just get rid of widows and orphans. +\widowpenalty=10000 +\clubpenalty=10000 + +% Use TeX 3.0's \emergencystretch to help line breaking, but if we're +% using an old version of TeX, don't do anything. We want the amount of +% stretch added to depend on the line length, hence the dependence on +% \hsize. We call this whenever the paper size is set. +% +\def\setemergencystretch{% + \ifx\emergencystretch\thisisundefined + % Allow us to assign to \emergencystretch anyway. + \def\emergencystretch{\dimen0}% + \else + \emergencystretch = .15\hsize + \fi +} + +% Parameters in order: 1) textheight; 2) textwidth; +% 3) voffset; 4) hoffset; 5) binding offset; 6) topskip; +% 7) physical page height; 8) physical page width. +% +% We also call \setleading{\textleading}, so the caller should define +% \textleading. The caller should also set \parskip. +% +\def\internalpagesizes#1#2#3#4#5#6#7#8{% + \voffset = #3\relax + \topskip = #6\relax + \splittopskip = \topskip + % + \vsize = #1\relax + \advance\vsize by \topskip + \outervsize = \vsize + \advance\outervsize by 2\topandbottommargin + \pageheight = \vsize + % + \hsize = #2\relax + \outerhsize = \hsize + \advance\outerhsize by 0.5in + \pagewidth = \hsize + % + \normaloffset = #4\relax + \bindingoffset = #5\relax + % + \ifpdf + \pdfpageheight #7\relax + \pdfpagewidth #8\relax + \fi + % + \setleading{\textleading} + % + \parindent = \defaultparindent + \setemergencystretch +} + +% @letterpaper (the default). +\def\letterpaper{{\globaldefs = 1 + \parskip = 3pt plus 2pt minus 1pt + \textleading = 13.2pt + % + % If page is nothing but text, make it come out even. + \internalpagesizes{46\baselineskip}{6in}% + {\voffset}{.25in}% + {\bindingoffset}{36pt}% + {11in}{8.5in}% +}} + +% Use @smallbook to reset parameters for 7x9.25 trim size. +\def\smallbook{{\globaldefs = 1 + \parskip = 2pt plus 1pt + \textleading = 12pt + % + \internalpagesizes{7.5in}{5in}% + {\voffset}{.25in}% + {\bindingoffset}{16pt}% + {9.25in}{7in}% + % + \lispnarrowing = 0.3in + \tolerance = 700 + \hfuzz = 1pt + \contentsrightmargin = 0pt + \defbodyindent = .5cm +}} + +% Use @smallerbook to reset parameters for 6x9 trim size. +% (Just testing, parameters still in flux.) +\def\smallerbook{{\globaldefs = 1 + \parskip = 1.5pt plus 1pt + \textleading = 12pt + % + \internalpagesizes{7.4in}{4.8in}% + {-.2in}{-.4in}% + {0pt}{14pt}% + {9in}{6in}% + % + \lispnarrowing = 0.25in + \tolerance = 700 + \hfuzz = 1pt + \contentsrightmargin = 0pt + \defbodyindent = .4cm +}} + +% Use @afourpaper to print on European A4 paper. +\def\afourpaper{{\globaldefs = 1 + \parskip = 3pt plus 2pt minus 1pt + \textleading = 13.2pt + % + % Double-side printing via postscript on Laserjet 4050 + % prints double-sided nicely when \bindingoffset=10mm and \hoffset=-6mm. + % To change the settings for a different printer or situation, adjust + % \normaloffset until the front-side and back-side texts align. Then + % do the same for \bindingoffset. You can set these for testing in + % your texinfo source file like this: + % @tex + % \global\normaloffset = -6mm + % \global\bindingoffset = 10mm + % @end tex + \internalpagesizes{51\baselineskip}{160mm} + {\voffset}{\hoffset}% + {\bindingoffset}{44pt}% + {297mm}{210mm}% + % + \tolerance = 700 + \hfuzz = 1pt + \contentsrightmargin = 0pt + \defbodyindent = 5mm +}} + +% Use @afivepaper to print on European A5 paper. +% From romildo at urano.iceb.ufop.br, 2 July 2000. +% He also recommends making @example and @lisp be small. +\def\afivepaper{{\globaldefs = 1 + \parskip = 2pt plus 1pt minus 0.1pt + \textleading = 12.5pt + % + \internalpagesizes{160mm}{120mm}% + {\voffset}{\hoffset}% + {\bindingoffset}{8pt}% + {210mm}{148mm}% + % + \lispnarrowing = 0.2in + \tolerance = 800 + \hfuzz = 1.2pt + \contentsrightmargin = 0pt + \defbodyindent = 2mm + \tableindent = 12mm +}} + +% A specific text layout, 24x15cm overall, intended for A4 paper. +\def\afourlatex{{\globaldefs = 1 + \afourpaper + \internalpagesizes{237mm}{150mm}% + {\voffset}{4.6mm}% + {\bindingoffset}{7mm}% + {297mm}{210mm}% + % + % Must explicitly reset to 0 because we call \afourpaper. + \globaldefs = 0 +}} + +% Use @afourwide to print on A4 paper in landscape format. +\def\afourwide{{\globaldefs = 1 + \afourpaper + \internalpagesizes{241mm}{165mm}% + {\voffset}{-2.95mm}% + {\bindingoffset}{7mm}% + {297mm}{210mm}% + \globaldefs = 0 +}} + +% @pagesizes TEXTHEIGHT[,TEXTWIDTH] +% Perhaps we should allow setting the margins, \topskip, \parskip, +% and/or leading, also. Or perhaps we should compute them somehow. +% +\parseargdef\pagesizes{\pagesizesyyy #1,,\finish} +\def\pagesizesyyy#1,#2,#3\finish{{% + \setbox0 = \hbox{\ignorespaces #2}\ifdim\wd0 > 0pt \hsize=#2\relax \fi + \globaldefs = 1 + % + \parskip = 3pt plus 2pt minus 1pt + \setleading{\textleading}% + % + \dimen0 = #1 + \advance\dimen0 by \voffset + % + \dimen2 = \hsize + \advance\dimen2 by \normaloffset + % + \internalpagesizes{#1}{\hsize}% + {\voffset}{\normaloffset}% + {\bindingoffset}{44pt}% + {\dimen0}{\dimen2}% +}} + +% Set default to letter. +% +\letterpaper + + +\message{and turning on texinfo input format.} + +% Define macros to output various characters with catcode for normal text. +\catcode`\"=\other +\catcode`\~=\other +\catcode`\^=\other +\catcode`\_=\other +\catcode`\|=\other +\catcode`\<=\other +\catcode`\>=\other +\catcode`\+=\other +\catcode`\$=\other +\def\normaldoublequote{"} +\def\normaltilde{~} +\def\normalcaret{^} +\def\normalunderscore{_} +\def\normalverticalbar{|} +\def\normalless{<} +\def\normalgreater{>} +\def\normalplus{+} +\def\normaldollar{$}%$ font-lock fix + +% This macro is used to make a character print one way in \tt +% (where it can probably be output as-is), and another way in other fonts, +% where something hairier probably needs to be done. +% +% #1 is what to print if we are indeed using \tt; #2 is what to print +% otherwise. Since all the Computer Modern typewriter fonts have zero +% interword stretch (and shrink), and it is reasonable to expect all +% typewriter fonts to have this, we can check that font parameter. +% +\def\ifusingtt#1#2{\ifdim \fontdimen3\font=0pt #1\else #2\fi} + +% Same as above, but check for italic font. Actually this also catches +% non-italic slanted fonts since it is impossible to distinguish them from +% italic fonts. But since this is only used by $ and it uses \sl anyway +% this is not a problem. +\def\ifusingit#1#2{\ifdim \fontdimen1\font>0pt #1\else #2\fi} + +% Turn off all special characters except @ +% (and those which the user can use as if they were ordinary). +% Most of these we simply print from the \tt font, but for some, we can +% use math or other variants that look better in normal text. + +\catcode`\"=\active +\def\activedoublequote{{\tt\char34}} +\let"=\activedoublequote +\catcode`\~=\active +\def~{{\tt\char126}} +\chardef\hat=`\^ +\catcode`\^=\active +\def^{{\tt \hat}} + +\catcode`\_=\active +\def_{\ifusingtt\normalunderscore\_} +\let\realunder=_ +% Subroutine for the previous macro. +\def\_{\leavevmode \kern.07em \vbox{\hrule width.3em height.1ex}\kern .07em } + +\catcode`\|=\active +\def|{{\tt\char124}} +\chardef \less=`\< +\catcode`\<=\active +\def<{{\tt \less}} +\chardef \gtr=`\> +\catcode`\>=\active +\def>{{\tt \gtr}} +\catcode`\+=\active +\def+{{\tt \char 43}} +\catcode`\$=\active +\def${\ifusingit{{\sl\$}}\normaldollar}%$ font-lock fix + +% If a .fmt file is being used, characters that might appear in a file +% name cannot be active until we have parsed the command line. +% So turn them off again, and have \everyjob (or @setfilename) turn them on. +% \otherifyactive is called near the end of this file. +\def\otherifyactive{\catcode`+=\other \catcode`\_=\other} + +\catcode`\@=0 + +% \backslashcurfont outputs one backslash character in current font, +% as in \char`\\. +\global\chardef\backslashcurfont=`\\ +\global\let\rawbackslashxx=\backslashcurfont % let existing .??s files work + +% \rawbackslash defines an active \ to do \backslashcurfont. +% \otherbackslash defines an active \ to be a literal `\' character with +% catcode other. +{\catcode`\\=\active + @gdef at rawbackslash{@let\=@backslashcurfont} + @gdef at otherbackslash{@let\=@realbackslash} +} + +% \realbackslash is an actual character `\' with catcode other, and +% \doublebackslash is two of them (for the pdf outlines). +{\catcode`\\=\other @gdef at realbackslash{\} @gdef at doublebackslash{\\}} + +% \normalbackslash outputs one backslash in fixed width font. +\def\normalbackslash{{\tt\backslashcurfont}} + +\catcode`\\=\active + +% Used sometimes to turn off (effectively) the active characters +% even after parsing them. + at def@turnoffactive{% + @let"=@normaldoublequote + @let\=@realbackslash + @let~=@normaltilde + @let^=@normalcaret + @let_=@normalunderscore + @let|=@normalverticalbar + @let<=@normalless + @let>=@normalgreater + @let+=@normalplus + @let$=@normaldollar %$ font-lock fix + @unsepspaces +} + +% Same as @turnoffactive except outputs \ as {\tt\char`\\} instead of +% the literal character `\'. (Thus, \ is not expandable when this is in +% effect.) +% + at def@normalturnoffactive{@turnoffactive @let\=@normalbackslash} + +% Make _ and + \other characters, temporarily. +% This is canceled by @fixbackslash. + at otherifyactive + +% If a .fmt file is being used, we don't want the `\input texinfo' to show up. +% That is what \eatinput is for; after that, the `\' should revert to printing +% a backslash. +% + at gdef@eatinput input texinfo{@fixbackslash} + at global@let\ = @eatinput + +% On the other hand, perhaps the file did not have a `\input texinfo'. Then +% the first `\{ in the file would cause an error. This macro tries to fix +% that, assuming it is called before the first `\' could plausibly occur. +% Also turn back on active characters that might appear in the input +% file name, in case not using a pre-dumped format. +% + at gdef@fixbackslash{% + @ifx\@eatinput @let\ = @normalbackslash @fi + @catcode`+=@active + @catcode`@_=@active +} + +% Say @foo, not \foo, in error messages. + at escapechar = `@@ + +% These look ok in all fonts, so just make them not special. + at catcode`@& = @other + at catcode`@# = @other + at catcode`@% = @other + + + at c Local variables: + at c eval: (add-hook 'write-file-hooks 'time-stamp) + at c page-delimiter: "^\\\\message" + at c time-stamp-start: "def\\\\texinfoversion{" + at c time-stamp-format: "%:y-%02m-%02d.%02H" + at c time-stamp-end: "}" + at c End: + + at c vim:sw=2: + + at ignore + arch-tag: e1b36e32-c96e-4135-a41a-0b2efa2ea115 + at end ignore From solipsis at pitrou.net Mon Mar 15 01:19:33 2010 From: solipsis at pitrou.net (solipsis at pitrou.net) Date: Mon, 15 Mar 2010 01:19:33 +0100 (CET) Subject: [Python-checkins] Daily py3k reference leaks (r78967): sum=46056 Message-ID: <20100315001933.C52AA1770A@ns6635.ovh.net> py3k results for svn r78967 (hg cset 44c3fb3ca73b) -------------------------------------------------- test_bz2 leaked [24, 24, 24] references, sum=72 test_cmd_line leaked [136, 136, 136] references, sum=408 test_cmd_line_script leaked [60, 60, 60] references, sum=180 test_ctypes leaked [12, 12, 12] references, sum=36 test_distutils leaked [32, 32, 32] references, sum=96 test_os leaked [16, 16, 16] references, sum=48 test_pipes leaked [8, 8, 8] references, sum=24 test_platform leaked [12, 12, 12] references, sum=36 test_poll leaked [4, 4, 4] references, sum=12 test_popen leaked [28, 28, 28] references, sum=84 test_pydoc leaked [35, 35, 35] references, sum=105 test_quopri leaked [7, 7, 7] references, sum=21 test_select leaked [4, 4, 4] references, sum=12 test_site leaked [41, 41, 41] references, sum=123 test_subprocess leaked [14802, 14802, 14802] references, sum=44406 test_sys leaked [48, 48, 48] references, sum=144 test_sysconfig leaked [8, 8, 8] references, sum=24 test_threading leaked [24, 24, 24] references, sum=72 test_traceback leaked [31, 31, 31] references, sum=93 test_unicodedata leaked [4, 4, 4] references, sum=12 test_zipimport_support leaked [16, 16, 16] references, sum=48 Command line was: ['./python', '-m', 'test.regrtest', '-uall', '-R', '3:3:/home/antoine/py3k/refleaks/reflogTygGb6', '-x', 'test_httpservers'] From python-checkins at python.org Mon Mar 15 01:36:18 2010 From: python-checkins at python.org (matthias.klose) Date: Mon, 15 Mar 2010 01:36:18 +0100 (CET) Subject: [Python-checkins] r78969 - python/trunk/Modules/_ctypes/libffi/src/arm/sysv.S Message-ID: <20100315003618.4E9B2EE986@mail.python.org> Author: matthias.klose Date: Mon Mar 15 01:36:18 2010 New Revision: 78969 Log: Backport from the libffi trunk: 2010-02-15 Matthias Klose * src/arm/sysv.S (__ARM_ARCH__): Define for processor __ARM_ARCH_7EM__. Modified: python/trunk/Modules/_ctypes/libffi/src/arm/sysv.S Modified: python/trunk/Modules/_ctypes/libffi/src/arm/sysv.S ============================================================================== --- python/trunk/Modules/_ctypes/libffi/src/arm/sysv.S (original) +++ python/trunk/Modules/_ctypes/libffi/src/arm/sysv.S Mon Mar 15 01:36:18 2010 @@ -74,7 +74,8 @@ #endif #if defined(__ARM_ARCH_7__) || defined(__ARM_ARCH_7A__) \ - || defined(__ARM_ARCH_7R__) || defined(__ARM_ARCH_7M__) + || defined(__ARM_ARCH_7R__) || defined(__ARM_ARCH_7M__) \ + || defined(__ARM_ARCH_7EM__) # undef __ARM_ARCH__ # define __ARM_ARCH__ 7 #endif From greg at krypto.org Mon Mar 15 02:41:53 2010 From: greg at krypto.org (Gregory P. Smith) Date: Sun, 14 Mar 2010 18:41:53 -0700 Subject: [Python-checkins] Daily py3k reference leaks (r78967): sum=46056 In-Reply-To: <20100315001933.C52AA1770A@ns6635.ovh.net> References: <20100315001933.C52AA1770A@ns6635.ovh.net> Message-ID: <52dc1c821003141841y33a3338di7d9b2d0b0a6a7a0e@mail.gmail.com> Doh. Well that sure increased a lot with a nice obvious test_subprocess taking the lead. I'll hunt around to see if my _posixsubprocess module is the culprit here, I consider it a good suspect. On Sun, Mar 14, 2010 at 5:19 PM, wrote: > py3k results for svn r78967 (hg cset 44c3fb3ca73b) > -------------------------------------------------- > > test_bz2 leaked [24, 24, 24] references, sum=72 > test_cmd_line leaked [136, 136, 136] references, sum=408 > test_cmd_line_script leaked [60, 60, 60] references, sum=180 > test_ctypes leaked [12, 12, 12] references, sum=36 > test_distutils leaked [32, 32, 32] references, sum=96 > test_os leaked [16, 16, 16] references, sum=48 > test_pipes leaked [8, 8, 8] references, sum=24 > test_platform leaked [12, 12, 12] references, sum=36 > test_poll leaked [4, 4, 4] references, sum=12 > test_popen leaked [28, 28, 28] references, sum=84 > test_pydoc leaked [35, 35, 35] references, sum=105 > test_quopri leaked [7, 7, 7] references, sum=21 > test_select leaked [4, 4, 4] references, sum=12 > test_site leaked [41, 41, 41] references, sum=123 > test_subprocess leaked [14802, 14802, 14802] references, sum=44406 > test_sys leaked [48, 48, 48] references, sum=144 > test_sysconfig leaked [8, 8, 8] references, sum=24 > test_threading leaked [24, 24, 24] references, sum=72 > test_traceback leaked [31, 31, 31] references, sum=93 > test_unicodedata leaked [4, 4, 4] references, sum=12 > test_zipimport_support leaked [16, 16, 16] references, sum=48 > > > Command line was: ['./python', '-m', 'test.regrtest', '-uall', '-R', '3:3:/home/antoine/py3k/refleaks/reflogTygGb6', '-x', 'test_httpservers'] > _______________________________________________ > Python-checkins mailing list > Python-checkins at python.org > http://mail.python.org/mailman/listinfo/python-checkins > From python-checkins at python.org Mon Mar 15 03:58:24 2010 From: python-checkins at python.org (benjamin.peterson) Date: Mon, 15 Mar 2010 03:58:24 +0100 (CET) Subject: [Python-checkins] r78970 - python/trunk/Lib/compileall.py Message-ID: <20100315025824.94057EE9DB@mail.python.org> Author: benjamin.peterson Date: Mon Mar 15 03:58:24 2010 New Revision: 78970 Log: this little exception dance is pointless Modified: python/trunk/Lib/compileall.py Modified: python/trunk/Lib/compileall.py ============================================================================== --- python/trunk/Lib/compileall.py (original) +++ python/trunk/Lib/compileall.py Mon Mar 15 03:58:24 2010 @@ -70,8 +70,6 @@ print 'Compiling', fullname, '...' try: ok = py_compile.compile(fullname, None, dfile, True) - except KeyboardInterrupt: - raise KeyboardInterrupt except py_compile.PyCompileError,err: if quiet: print 'Compiling', fullname, '...' From python-checkins at python.org Mon Mar 15 04:00:35 2010 From: python-checkins at python.org (benjamin.peterson) Date: Mon, 15 Mar 2010 04:00:35 +0100 (CET) Subject: [Python-checkins] r78971 - python/trunk/Lib/py_compile.py Message-ID: <20100315030035.44E3EEE99B@mail.python.org> Author: benjamin.peterson Date: Mon Mar 15 04:00:35 2010 New Revision: 78971 Log: remove mac 9 code Modified: python/trunk/Lib/py_compile.py Modified: python/trunk/Lib/py_compile.py ============================================================================== --- python/trunk/Lib/py_compile.py (original) +++ python/trunk/Lib/py_compile.py Mon Mar 15 04:00:35 2010 @@ -61,15 +61,6 @@ return self.msg -# Define an internal helper according to the platform -if os.name == "mac": - import MacOS - def set_creator_type(file): - MacOS.SetCreatorAndType(file, 'Pyth', 'PYC ') -else: - def set_creator_type(file): - pass - def wr_long(f, x): """Internal; write a 32-bit int to a file in little-endian order.""" f.write(chr( x & 0xff)) @@ -140,7 +131,6 @@ fc.seek(0, 0) fc.write(MAGIC) fc.close() - set_creator_type(cfile) def main(args=None): """Compile several source files. From python-checkins at python.org Mon Mar 15 04:02:37 2010 From: python-checkins at python.org (benjamin.peterson) Date: Mon, 15 Mar 2010 04:02:37 +0100 (CET) Subject: [Python-checkins] r78972 - python/trunk/Lib/py_compile.py Message-ID: <20100315030237.4E1ACEE99B@mail.python.org> Author: benjamin.peterson Date: Mon Mar 15 04:02:37 2010 New Revision: 78972 Log: clean up files correctly Modified: python/trunk/Lib/py_compile.py Modified: python/trunk/Lib/py_compile.py ============================================================================== --- python/trunk/Lib/py_compile.py (original) +++ python/trunk/Lib/py_compile.py Mon Mar 15 04:02:37 2010 @@ -103,13 +103,12 @@ directories). """ - f = open(file, 'U') - try: - timestamp = long(os.fstat(f.fileno()).st_mtime) - except AttributeError: - timestamp = long(os.stat(file).st_mtime) - codestring = f.read() - f.close() + with open(file, 'U') as f: + try: + timestamp = long(os.fstat(f.fileno()).st_mtime) + except AttributeError: + timestamp = long(os.stat(file).st_mtime) + codestring = f.read() if codestring and codestring[-1] != '\n': codestring = codestring + '\n' try: @@ -123,14 +122,13 @@ return if cfile is None: cfile = file + (__debug__ and 'c' or 'o') - fc = open(cfile, 'wb') - fc.write('\0\0\0\0') - wr_long(fc, timestamp) - marshal.dump(codeobject, fc) - fc.flush() - fc.seek(0, 0) - fc.write(MAGIC) - fc.close() + with open(cfile, 'wb') as fc: + fc.write('\0\0\0\0') + wr_long(fc, timestamp) + marshal.dump(codeobject, fc) + fc.flush() + fc.seek(0, 0) + fc.write(MAGIC) def main(args=None): """Compile several source files. From python-checkins at python.org Mon Mar 15 07:07:42 2010 From: python-checkins at python.org (gregory.p.smith) Date: Mon, 15 Mar 2010 07:07:42 +0100 (CET) Subject: [Python-checkins] r78973 - in python/branches/py3k: Modules/_posixsubprocess.c Objects/abstract.c Message-ID: <20100315060742.627F0EE9A9@mail.python.org> Author: gregory.p.smith Date: Mon Mar 15 07:07:42 2010 New Revision: 78973 Log: * Fix the refcount leak in _PySequence_BytesToCharpArray from r78946. * Also fixes a potential extra DECREF of an arg in the error case within _posixsubprocess.fork_exec() by not reusing the process_args variable. Modified: python/branches/py3k/Modules/_posixsubprocess.c python/branches/py3k/Objects/abstract.c Modified: python/branches/py3k/Modules/_posixsubprocess.c ============================================================================== --- python/branches/py3k/Modules/_posixsubprocess.c (original) +++ python/branches/py3k/Modules/_posixsubprocess.c Mon Mar 15 07:07:42 2010 @@ -172,7 +172,7 @@ PyObject *gc_module = NULL; PyObject *executable_list, *py_close_fds; PyObject *env_list, *preexec_fn; - PyObject *process_args = NULL, *converted_args = NULL; + PyObject *process_args, *converted_args = NULL, *fast_args = NULL; PyObject *preexec_fn_args_tuple = NULL; int p2cread, p2cwrite, c2pread, c2pwrite, errread, errwrite; int errpipe_read, errpipe_write, close_fds, restore_signals; @@ -224,15 +224,17 @@ /* These conversions are done in the parent process to avoid allocating or freeing memory in the child process. */ if (process_args != Py_None) { + Py_ssize_t num_args; /* Equivalent to: */ /* tuple(PyUnicode_FSConverter(arg) for arg in process_args) */ - process_args = PySequence_Fast(process_args, "argv must be a tuple"); - converted_args = PyTuple_New(PySequence_Size(process_args)); + fast_args = PySequence_Fast(process_args, "argv must be a tuple"); + num_args = PySequence_Fast_GET_SIZE(fast_args); + converted_args = PyTuple_New(num_args); if (converted_args == NULL) goto cleanup; - for (arg_num = 0; arg_num < PySequence_Size(process_args); ++arg_num) { + for (arg_num = 0; arg_num < num_args; ++arg_num) { PyObject *borrowed_arg, *converted_arg; - borrowed_arg = PySequence_Fast_GET_ITEM(process_args, arg_num); + borrowed_arg = PySequence_Fast_GET_ITEM(fast_args, arg_num); if (PyUnicode_FSConverter(borrowed_arg, &converted_arg) == 0) goto cleanup; PyTuple_SET_ITEM(converted_args, arg_num, converted_arg); @@ -240,7 +242,7 @@ argv = _PySequence_BytesToCharpArray(converted_args); Py_CLEAR(converted_args); - Py_CLEAR(process_args); + Py_CLEAR(fast_args); if (!argv) goto cleanup; } @@ -319,7 +321,7 @@ _Py_FreeCharPArray(argv); _Py_FreeCharPArray(exec_array); Py_XDECREF(converted_args); - Py_XDECREF(process_args); + Py_XDECREF(fast_args); /* Reenable gc if it was disabled. */ if (need_to_reenable_gc) Modified: python/branches/py3k/Objects/abstract.c ============================================================================== --- python/branches/py3k/Objects/abstract.c (original) +++ python/branches/py3k/Objects/abstract.c Mon Mar 15 07:07:42 2010 @@ -2737,6 +2737,7 @@ { char **array; Py_ssize_t i, argc; + PyObject *item = NULL; argc = PySequence_Size(self); if (argc == -1) @@ -2749,7 +2750,7 @@ } for (i = 0; i < argc; ++i) { char *data; - PyObject *item = PySequence_GetItem(self, i); + item = PySequence_GetItem(self, i); data = PyBytes_AsString(item); if (data == NULL) { /* NULL terminate before freeing. */ @@ -2761,12 +2762,14 @@ PyErr_NoMemory(); goto fail; } + Py_DECREF(item); } array[argc] = NULL; return array; fail: + Py_XDECREF(item); _Py_FreeCharPArray(array); return NULL; } From python-checkins at python.org Mon Mar 15 13:46:18 2010 From: python-checkins at python.org (matthias.klose) Date: Mon, 15 Mar 2010 13:46:18 +0100 (CET) Subject: [Python-checkins] r78974 - in python/trunk: Lib/bsddb/test/test_basics.py Lib/bsddb/test/test_distributed_transactions.py Misc/NEWS Modules/_bsddb.c setup.py Message-ID: <20100315124618.DE8C2F904@mail.python.org> Author: matthias.klose Date: Mon Mar 15 13:46:18 2010 New Revision: 78974 Log: - Issue #6949: Allow the _bsddb extension to be built with db-4.8.x. Modified: python/trunk/Lib/bsddb/test/test_basics.py python/trunk/Lib/bsddb/test/test_distributed_transactions.py python/trunk/Misc/NEWS python/trunk/Modules/_bsddb.c python/trunk/setup.py Modified: python/trunk/Lib/bsddb/test/test_basics.py ============================================================================== --- python/trunk/Lib/bsddb/test/test_basics.py (original) +++ python/trunk/Lib/bsddb/test/test_basics.py Mon Mar 15 13:46:18 2010 @@ -1000,11 +1000,12 @@ # # See http://bugs.python.org/issue3307 # self.assertRaises(db.DBInvalidArgError, db.DB, None, 65535) - def test02_DBEnv_dealloc(self): - # http://bugs.python.org/issue3885 - import gc - self.assertRaises(db.DBInvalidArgError, db.DBEnv, ~db.DB_RPCCLIENT) - gc.collect() + if db.version() < (4, 8) : + def test02_DBEnv_dealloc(self): + # http://bugs.python.org/issue3885 + import gc + self.assertRaises(db.DBInvalidArgError, db.DBEnv, ~db.DB_RPCCLIENT) + gc.collect() #---------------------------------------------------------------------- Modified: python/trunk/Lib/bsddb/test/test_distributed_transactions.py ============================================================================== --- python/trunk/Lib/bsddb/test/test_distributed_transactions.py (original) +++ python/trunk/Lib/bsddb/test/test_distributed_transactions.py Mon Mar 15 13:46:18 2010 @@ -35,7 +35,7 @@ db.DB_INIT_TXN | db.DB_INIT_LOG | db.DB_INIT_MPOOL | db.DB_INIT_LOCK, 0666) self.db = db.DB(self.dbenv) - self.db.set_re_len(db.DB_XIDDATASIZE) + self.db.set_re_len(db.DB_GID_SIZE) if must_open_db : if db.version() > (4,1) : txn=self.dbenv.txn_begin() @@ -76,7 +76,7 @@ # let them be garbage collected. for i in xrange(self.num_txns) : txn = self.dbenv.txn_begin() - gid = "%%%dd" %db.DB_XIDDATASIZE + gid = "%%%dd" %db.DB_GID_SIZE gid = adapt(gid %i) self.db.put(i, gid, txn=txn, flags=db.DB_APPEND) txns.add(gid) Modified: python/trunk/Misc/NEWS ============================================================================== --- python/trunk/Misc/NEWS (original) +++ python/trunk/Misc/NEWS Mon Mar 15 13:46:18 2010 @@ -45,6 +45,8 @@ Extension Modules ----------------- +- Issue #6949: Allow the _bsddb extension to be built with db-4.8.x. + - Issue #8142: Update libffi to the 3.0.9 release. - Issue #1530559: When passing a non-integer argument to struct.pack with *any* Modified: python/trunk/Modules/_bsddb.c ============================================================================== --- python/trunk/Modules/_bsddb.c (original) +++ python/trunk/Modules/_bsddb.c Mon Mar 15 13:46:18 2010 @@ -215,6 +215,10 @@ #define DB_BUFFER_SMALL ENOMEM #endif +#if (DBVER < 48) +#define DB_GID_SIZE DB_XIDDATASIZE +#endif + /* --------------------------------------------------------------------- */ /* Structure definitions */ @@ -4501,7 +4505,11 @@ DBTxnObject *txn; #define PREPLIST_LEN 16 DB_PREPLIST preplist[PREPLIST_LEN]; +#if (DBVER < 48) long retp; +#else + u_int32_t retp; +#endif CHECK_ENV_NOT_CLOSED(self); @@ -4522,7 +4530,7 @@ flags=DB_NEXT; /* Prepare for next loop pass */ for (i=0; i= 42) {"get_verbose", (PyCFunction)DBEnv_get_verbose, METH_VARARGS}, @@ -7091,6 +7103,7 @@ ADD_INT(d, DB_MAX_PAGES); ADD_INT(d, DB_MAX_RECORDS); +#if (DBVER < 48) #if (DBVER >= 42) ADD_INT(d, DB_RPCCLIENT); #else @@ -7098,7 +7111,11 @@ /* allow apps to be written using DB_RPCCLIENT on older Berkeley DB */ _addIntToDict(d, "DB_RPCCLIENT", DB_CLIENT); #endif +#endif + +#if (DBVER < 48) ADD_INT(d, DB_XA_CREATE); +#endif ADD_INT(d, DB_CREATE); ADD_INT(d, DB_NOMMAP); @@ -7115,7 +7132,13 @@ ADD_INT(d, DB_INIT_TXN); ADD_INT(d, DB_JOINENV); +#if (DBVER >= 48) + ADD_INT(d, DB_GID_SIZE); +#else ADD_INT(d, DB_XIDDATASIZE); + /* Allow new code to work in old BDB releases */ + _addIntToDict(d, "DB_GID_SIZE", DB_XIDDATASIZE); +#endif ADD_INT(d, DB_RECOVER); ADD_INT(d, DB_RECOVER_FATAL); Modified: python/trunk/setup.py ============================================================================== --- python/trunk/setup.py (original) +++ python/trunk/setup.py Mon Mar 15 13:46:18 2010 @@ -707,7 +707,7 @@ # a release. Most open source OSes come with one or more # versions of BerkeleyDB already installed. - max_db_ver = (4, 7) + max_db_ver = (4, 8) min_db_ver = (3, 3) db_setup_debug = False # verbose debug prints from this script? From python-checkins at python.org Mon Mar 15 13:49:46 2010 From: python-checkins at python.org (matthias.klose) Date: Mon, 15 Mar 2010 13:49:46 +0100 (CET) Subject: [Python-checkins] r78975 - in python/branches/py3k: Misc/NEWS setup.py Message-ID: <20100315124946.AF50DFCF8@mail.python.org> Author: matthias.klose Date: Mon Mar 15 13:49:46 2010 New Revision: 78975 Log: - Issue #6949: Allow the _dbm extension to be built with db 4.8.x. Modified: python/branches/py3k/Misc/NEWS python/branches/py3k/setup.py Modified: python/branches/py3k/Misc/NEWS ============================================================================== --- python/branches/py3k/Misc/NEWS (original) +++ python/branches/py3k/Misc/NEWS Mon Mar 15 13:49:46 2010 @@ -781,6 +781,8 @@ Extension Modules ----------------- +- Issue #6949: Allow the _dbm extension to be built with db 4.8.x. + - Issue #6544: fix a reference leak in the kqueue implementation's error handling. Modified: python/branches/py3k/setup.py ============================================================================== --- python/branches/py3k/setup.py (original) +++ python/branches/py3k/setup.py Mon Mar 15 13:49:46 2010 @@ -651,7 +651,7 @@ # a release. Most open source OSes come with one or more # versions of BerkeleyDB already installed. - max_db_ver = (4, 7) + max_db_ver = (4, 8) min_db_ver = (3, 3) db_setup_debug = False # verbose debug prints from this script? From python-checkins at python.org Mon Mar 15 14:00:17 2010 From: python-checkins at python.org (martin.v.loewis) Date: Mon, 15 Mar 2010 14:00:17 +0100 (CET) Subject: [Python-checkins] r78976 - in python/trunk: Misc/NEWS Tools/msi/msi.py Message-ID: <20100315130017.E3175E624@mail.python.org> Author: martin.v.loewis Date: Mon Mar 15 14:00:17 2010 New Revision: 78976 Log: Issue #6716: Quote -x arguments of compileall in MSI installer. Modified: python/trunk/Misc/NEWS python/trunk/Tools/msi/msi.py Modified: python/trunk/Misc/NEWS ============================================================================== --- python/trunk/Misc/NEWS (original) +++ python/trunk/Misc/NEWS Mon Mar 15 14:00:17 2010 @@ -67,6 +67,8 @@ Build ----- +- Issue #6716: Quote -x arguments of compileall in MSI installer. + - Issue #7705: Fix linking on FreeBSD. Modified: python/trunk/Tools/msi/msi.py ============================================================================== --- python/trunk/Tools/msi/msi.py (original) +++ python/trunk/Tools/msi/msi.py Mon Mar 15 14:00:17 2010 @@ -402,7 +402,7 @@ ("VerdanaRed9", "Verdana", 9, 255, 0), ]) - compileargs = r'-Wi "[TARGETDIR]Lib\compileall.py" -f -x bad_coding|badsyntax|site-packages|py3_ "[TARGETDIR]Lib"' + compileargs = r'-Wi "[TARGETDIR]Lib\compileall.py" -f -x "bad_coding|badsyntax|site-packages|py3_" "[TARGETDIR]Lib"' lib2to3args = r'-c "import lib2to3.pygram, lib2to3.patcomp;lib2to3.patcomp.PatternCompiler()"' # See "CustomAction Table" add_data(db, "CustomAction", [ From python-checkins at python.org Mon Mar 15 14:14:39 2010 From: python-checkins at python.org (florent.xicluna) Date: Mon, 15 Mar 2010 14:14:39 +0100 (CET) Subject: [Python-checkins] r78977 - python/branches/py3k/Doc/reference/lexical_analysis.rst Message-ID: <20100315131439.5C956FC23@mail.python.org> Author: florent.xicluna Date: Mon Mar 15 14:14:39 2010 New Revision: 78977 Log: Fix \xhh specs, #1889. (an oversight of r60193, r60210). Modified: python/branches/py3k/Doc/reference/lexical_analysis.rst Modified: python/branches/py3k/Doc/reference/lexical_analysis.rst ============================================================================== --- python/branches/py3k/Doc/reference/lexical_analysis.rst (original) +++ python/branches/py3k/Doc/reference/lexical_analysis.rst Mon Mar 15 14:14:39 2010 @@ -503,7 +503,7 @@ As in Standard C, up to three octal digits are accepted. (2) - Unlike in Standard C, at most two hex digits are accepted. + Unlike in Standard C, exactly two hex digits are required. (3) In a bytes literal, hexadecimal and octal escapes denote the byte with the From python-checkins at python.org Mon Mar 15 14:25:31 2010 From: python-checkins at python.org (matthias.klose) Date: Mon, 15 Mar 2010 14:25:31 +0100 (CET) Subject: [Python-checkins] r78978 - in python/branches/py3k: Misc/NEWS Modules/_ctypes/libffi.diff Modules/_ctypes/libffi/ChangeLog Modules/_ctypes/libffi/ChangeLog.libffi Modules/_ctypes/libffi/ChangeLog.libgcj Modules/_ctypes/libffi/ChangeLog.v1 Modules/_ctypes/libffi/LICENSE Modules/_ctypes/libffi/Makefile.am Modules/_ctypes/libffi/Makefile.in Modules/_ctypes/libffi/README Modules/_ctypes/libffi/aclocal.m4 Modules/_ctypes/libffi/compile Modules/_ctypes/libffi/config.guess Modules/_ctypes/libffi/config.sub Modules/_ctypes/libffi/configure Modules/_ctypes/libffi/configure.ac Modules/_ctypes/libffi/depcomp Modules/_ctypes/libffi/doc Modules/_ctypes/libffi/fficonfig.h.in Modules/_ctypes/libffi/include/Makefile.am Modules/_ctypes/libffi/include/Makefile.in Modules/_ctypes/libffi/include/ffi.h.in Modules/_ctypes/libffi/include/ffi_common.h Modules/_ctypes/libffi/libffi.pc.in Modules/_ctypes/libffi/libtool-version Modules/_ctypes/libffi/ltmain.sh Modules/_ctypes/libffi/m4 Modules/_ctypes/libffi/man Modules/_ctypes/libffi/mdate-sh Modules/_ctypes/libffi/missing Modules/_ctypes/libffi/src/arm/sysv.S Modules/_ctypes/libffi/src/avr32 Modules/_ctypes/libffi/src/closures.c Modules/_ctypes/libffi/src/darwin/ffitarget.h Modules/_ctypes/libffi/src/debug.c Modules/_ctypes/libffi/src/dlmalloc.c Modules/_ctypes/libffi/src/frv/ffi.c Modules/_ctypes/libffi/src/java_raw_api.c Modules/_ctypes/libffi/src/mips/ffi.c Modules/_ctypes/libffi/src/mips/ffitarget.h Modules/_ctypes/libffi/src/mips/n32.S Modules/_ctypes/libffi/src/mips/o32.S Modules/_ctypes/libffi/src/pa/ffi.c Modules/_ctypes/libffi/src/powerpc/aix.S Modules/_ctypes/libffi/src/powerpc/aix_closure.S Modules/_ctypes/libffi/src/powerpc/ffi.c Modules/_ctypes/libffi/src/powerpc/ffi_darwin.c Modules/_ctypes/libffi/src/powerpc/ffitarget.h Modules/_ctypes/libffi/src/powerpc/sysv.S Modules/_ctypes/libffi/src/raw_api.c Modules/_ctypes/libffi/src/s390/sysv.S Modules/_ctypes/libffi/src/sh/ffi.c Modules/_ctypes/libffi/src/sh/sysv.S Modules/_ctypes/libffi/src/sh64/ffi.c Modules/_ctypes/libffi/src/sh64/sysv.S Modules/_ctypes/libffi/src/sparc/ffi.c Modules/_ctypes/libffi/src/sparc/v8.S Modules/_ctypes/libffi/src/types.c Modules/_ctypes/libffi/src/x86/darwin.S Modules/_ctypes/libffi/src/x86/ffi.c Modules/_ctypes/libffi/src/x86/ffi64.c Modules/_ctypes/libffi/src/x86/ffitarget.h Modules/_ctypes/libffi/src/x86/sysv.S Modules/_ctypes/libffi/src/x86/unix64.S Modules/_ctypes/libffi/src/x86/win32.S Modules/_ctypes/libffi/src/x86/win64.S Modules/_ctypes/libffi/testsuite Modules/_ctypes/libffi/texinfo.tex Message-ID: <20100315132531.7A19AFDAE@mail.python.org> Author: matthias.klose Date: Mon Mar 15 14:25:28 2010 New Revision: 78978 Log: Merged revisions 78968-78969 via svnmerge from svn+ssh://pythondev at svn.python.org/python/trunk ........ r78968 | matthias.klose | 2010-03-15 01:02:36 +0100 (Mon, 15 Mar 2010) | 226 lines - Issue #8142: Update libffi to the 3.0.9 release. ........ r78969 | matthias.klose | 2010-03-15 01:36:18 +0100 (Mon, 15 Mar 2010) | 7 lines Backport from the libffi trunk: 2010-02-15 Matthias Klose * src/arm/sysv.S (__ARM_ARCH__): Define for processor __ARM_ARCH_7EM__. ........ Added: python/branches/py3k/Modules/_ctypes/libffi/ChangeLog - copied unchanged from r78969, /python/trunk/Modules/_ctypes/libffi/ChangeLog python/branches/py3k/Modules/_ctypes/libffi/ChangeLog.libffi - copied unchanged from r78969, /python/trunk/Modules/_ctypes/libffi/ChangeLog.libffi python/branches/py3k/Modules/_ctypes/libffi/ChangeLog.libgcj - copied unchanged from r78969, /python/trunk/Modules/_ctypes/libffi/ChangeLog.libgcj python/branches/py3k/Modules/_ctypes/libffi/ChangeLog.v1 - copied unchanged from r78969, /python/trunk/Modules/_ctypes/libffi/ChangeLog.v1 python/branches/py3k/Modules/_ctypes/libffi/compile - copied unchanged from r78969, /python/trunk/Modules/_ctypes/libffi/compile python/branches/py3k/Modules/_ctypes/libffi/depcomp - copied unchanged from r78969, /python/trunk/Modules/_ctypes/libffi/depcomp python/branches/py3k/Modules/_ctypes/libffi/doc/ - copied from r78969, /python/trunk/Modules/_ctypes/libffi/doc/ python/branches/py3k/Modules/_ctypes/libffi/libffi.pc.in - copied unchanged from r78969, /python/trunk/Modules/_ctypes/libffi/libffi.pc.in python/branches/py3k/Modules/_ctypes/libffi/libtool-version - copied unchanged from r78969, /python/trunk/Modules/_ctypes/libffi/libtool-version python/branches/py3k/Modules/_ctypes/libffi/ltmain.sh - copied unchanged from r78969, /python/trunk/Modules/_ctypes/libffi/ltmain.sh python/branches/py3k/Modules/_ctypes/libffi/m4/ - copied from r78969, /python/trunk/Modules/_ctypes/libffi/m4/ python/branches/py3k/Modules/_ctypes/libffi/man/ - copied from r78969, /python/trunk/Modules/_ctypes/libffi/man/ python/branches/py3k/Modules/_ctypes/libffi/mdate-sh - copied unchanged from r78969, /python/trunk/Modules/_ctypes/libffi/mdate-sh python/branches/py3k/Modules/_ctypes/libffi/src/avr32/ - copied from r78969, /python/trunk/Modules/_ctypes/libffi/src/avr32/ python/branches/py3k/Modules/_ctypes/libffi/src/closures.c - copied unchanged from r78969, /python/trunk/Modules/_ctypes/libffi/src/closures.c python/branches/py3k/Modules/_ctypes/libffi/src/debug.c - copied unchanged from r78969, /python/trunk/Modules/_ctypes/libffi/src/debug.c python/branches/py3k/Modules/_ctypes/libffi/src/dlmalloc.c - copied unchanged from r78969, /python/trunk/Modules/_ctypes/libffi/src/dlmalloc.c python/branches/py3k/Modules/_ctypes/libffi/src/java_raw_api.c - copied unchanged from r78969, /python/trunk/Modules/_ctypes/libffi/src/java_raw_api.c python/branches/py3k/Modules/_ctypes/libffi/src/raw_api.c - copied unchanged from r78969, /python/trunk/Modules/_ctypes/libffi/src/raw_api.c python/branches/py3k/Modules/_ctypes/libffi/src/types.c - copied unchanged from r78969, /python/trunk/Modules/_ctypes/libffi/src/types.c python/branches/py3k/Modules/_ctypes/libffi/src/x86/win64.S - copied unchanged from r78969, /python/trunk/Modules/_ctypes/libffi/src/x86/win64.S python/branches/py3k/Modules/_ctypes/libffi/testsuite/ - copied from r78969, /python/trunk/Modules/_ctypes/libffi/testsuite/ python/branches/py3k/Modules/_ctypes/libffi/texinfo.tex - copied unchanged from r78969, /python/trunk/Modules/_ctypes/libffi/texinfo.tex Removed: python/branches/py3k/Modules/_ctypes/libffi/src/darwin/ffitarget.h Modified: python/branches/py3k/ (props changed) python/branches/py3k/Misc/NEWS python/branches/py3k/Modules/_ctypes/libffi.diff python/branches/py3k/Modules/_ctypes/libffi/LICENSE python/branches/py3k/Modules/_ctypes/libffi/Makefile.am python/branches/py3k/Modules/_ctypes/libffi/Makefile.in python/branches/py3k/Modules/_ctypes/libffi/README python/branches/py3k/Modules/_ctypes/libffi/aclocal.m4 python/branches/py3k/Modules/_ctypes/libffi/config.guess python/branches/py3k/Modules/_ctypes/libffi/config.sub python/branches/py3k/Modules/_ctypes/libffi/configure python/branches/py3k/Modules/_ctypes/libffi/configure.ac python/branches/py3k/Modules/_ctypes/libffi/fficonfig.h.in python/branches/py3k/Modules/_ctypes/libffi/include/Makefile.am python/branches/py3k/Modules/_ctypes/libffi/include/Makefile.in python/branches/py3k/Modules/_ctypes/libffi/include/ffi.h.in python/branches/py3k/Modules/_ctypes/libffi/include/ffi_common.h python/branches/py3k/Modules/_ctypes/libffi/missing python/branches/py3k/Modules/_ctypes/libffi/src/arm/sysv.S python/branches/py3k/Modules/_ctypes/libffi/src/frv/ffi.c python/branches/py3k/Modules/_ctypes/libffi/src/mips/ffi.c python/branches/py3k/Modules/_ctypes/libffi/src/mips/ffitarget.h python/branches/py3k/Modules/_ctypes/libffi/src/mips/n32.S python/branches/py3k/Modules/_ctypes/libffi/src/mips/o32.S python/branches/py3k/Modules/_ctypes/libffi/src/pa/ffi.c python/branches/py3k/Modules/_ctypes/libffi/src/powerpc/aix.S python/branches/py3k/Modules/_ctypes/libffi/src/powerpc/aix_closure.S python/branches/py3k/Modules/_ctypes/libffi/src/powerpc/ffi.c python/branches/py3k/Modules/_ctypes/libffi/src/powerpc/ffi_darwin.c python/branches/py3k/Modules/_ctypes/libffi/src/powerpc/ffitarget.h python/branches/py3k/Modules/_ctypes/libffi/src/powerpc/sysv.S python/branches/py3k/Modules/_ctypes/libffi/src/s390/sysv.S python/branches/py3k/Modules/_ctypes/libffi/src/sh/ffi.c python/branches/py3k/Modules/_ctypes/libffi/src/sh/sysv.S python/branches/py3k/Modules/_ctypes/libffi/src/sh64/ffi.c python/branches/py3k/Modules/_ctypes/libffi/src/sh64/sysv.S python/branches/py3k/Modules/_ctypes/libffi/src/sparc/ffi.c python/branches/py3k/Modules/_ctypes/libffi/src/sparc/v8.S python/branches/py3k/Modules/_ctypes/libffi/src/x86/darwin.S python/branches/py3k/Modules/_ctypes/libffi/src/x86/ffi.c python/branches/py3k/Modules/_ctypes/libffi/src/x86/ffi64.c python/branches/py3k/Modules/_ctypes/libffi/src/x86/ffitarget.h python/branches/py3k/Modules/_ctypes/libffi/src/x86/sysv.S python/branches/py3k/Modules/_ctypes/libffi/src/x86/unix64.S python/branches/py3k/Modules/_ctypes/libffi/src/x86/win32.S Modified: python/branches/py3k/Misc/NEWS ============================================================================== --- python/branches/py3k/Misc/NEWS (original) +++ python/branches/py3k/Misc/NEWS Mon Mar 15 14:25:28 2010 @@ -781,6 +781,8 @@ Extension Modules ----------------- +- Issue #8142: Update libffi to the 3.0.9 release. + - Issue #6949: Allow the _dbm extension to be built with db 4.8.x. - Issue #6544: fix a reference leak in the kqueue implementation's error Modified: python/branches/py3k/Modules/_ctypes/libffi.diff ============================================================================== --- python/branches/py3k/Modules/_ctypes/libffi.diff (original) +++ python/branches/py3k/Modules/_ctypes/libffi.diff Mon Mar 15 14:25:28 2010 @@ -1,33 +1,18 @@ This file contains the diffs between the files in the libffi subdirectory and the 'official' source files from -ftp://sourceware.org/pub/libffi/libffi-3.0.5.tar.gz +ftp://sourceware.org/pub/libffi/libffi-3.0.9.tar.gz -Index: libffi/aclocal.m4 -=================================================================== ---- libffi/aclocal.m4 (working copy) -+++ libffi/aclocal.m4 (revision 72475) -@@ -1155,7 +1155,7 @@ - test -n "$_LT_AC_TAGVAR(runpath_var, $1)" || \ - test "X$_LT_AC_TAGVAR(hardcode_automatic, $1)" = "Xyes" ; then - -- # We can hardcode non-existant directories. -+ # We can hardcode non-existent directories. - if test "$_LT_AC_TAGVAR(hardcode_direct, $1)" != no && - # If the only mechanism to avoid hardcoding is shlibpath_var, we - # have to relink, otherwise we might link with an installed library -Index: libffi/configure.ac -=================================================================== ---- libffi/configure.ac (working copy) -+++ libffi/configure.ac (revision 72475) +--- libffi/configure.ac.orig 2009-12-31 13:41:51.000000000 +0100 ++++ libffi/configure.ac 2010-02-24 00:39:10.341610848 +0100 @@ -1,4 +1,7 @@ dnl Process this with autoconf to create configure +# +# file from libffi - slightly patched for ctypes +# - AC_PREREQ(2.59) + AC_PREREQ(2.63) -@@ -83,6 +86,9 @@ +@@ -91,6 +94,9 @@ i?86-*-solaris2.1[[0-9]]*) TARGET=X86_64; TARGETDIR=x86 ;; @@ -37,7 +22,7 @@ i?86-*-*) TARGET=X86; TARGETDIR=x86 ;; -@@ -100,10 +106,10 @@ +@@ -108,12 +114,12 @@ ;; mips-sgi-irix5.* | mips-sgi-irix6.*) @@ -45,12 +30,14 @@ + TARGET=MIPS_IRIX; TARGETDIR=mips ;; mips*-*-linux*) + # Support 128-bit long double for NewABI. + HAVE_LONG_DOUBLE='defined(__mips64)' - TARGET=MIPS; TARGETDIR=mips -+ TARGET=MIPS_LINUX; TARGETDIR=mips ++ TARGET=MIPS_IRIX; TARGETDIR=mips ;; powerpc*-*-linux* | powerpc-*-sysv*) -@@ -156,7 +162,7 @@ +@@ -170,7 +176,7 @@ AC_MSG_ERROR(["libffi has not been ported to $host."]) fi @@ -59,59 +46,21 @@ AM_CONDITIONAL(SPARC, test x$TARGET = xSPARC) AM_CONDITIONAL(X86, test x$TARGET = xX86) AM_CONDITIONAL(X86_FREEBSD, test x$TARGET = xX86_FREEBSD) -@@ -360,6 +366,10 @@ +@@ -399,6 +405,10 @@ AC_CONFIG_LINKS(include/ffitarget.h:src/$TARGETDIR/ffitarget.h) -AC_CONFIG_FILES(include/Makefile include/ffi.h Makefile testsuite/Makefile man/Makefile libffi.pc) +AC_CONFIG_FILES(include/ffi.h) - ++ +AC_CONFIG_LINKS(include/ffi_common.h:include/ffi_common.h) + +AC_CONFIG_FILES(fficonfig.py) -+ + AC_OUTPUT -Index: libffi/configure -=================================================================== ---- libffi/configure (working copy) -+++ libffi/configure (revision 72475) -@@ -9546,7 +9546,7 @@ - test -n "$runpath_var" || \ - test "X$hardcode_automatic" = "Xyes" ; then - -- # We can hardcode non-existant directories. -+ # We can hardcode non-existent directories. - if test "$hardcode_direct" != no && - # If the only mechanism to avoid hardcoding is shlibpath_var, we - # have to relink, otherwise we might link with an installed library -@@ -13514,7 +13514,7 @@ - test -n "$runpath_var_CXX" || \ - test "X$hardcode_automatic_CXX" = "Xyes" ; then - -- # We can hardcode non-existant directories. -+ # We can hardcode non-existent directories. - if test "$hardcode_direct_CXX" != no && - # If the only mechanism to avoid hardcoding is shlibpath_var, we - # have to relink, otherwise we might link with an installed library -@@ -16117,7 +16117,7 @@ - test -n "$runpath_var_F77" || \ - test "X$hardcode_automatic_F77" = "Xyes" ; then - -- # We can hardcode non-existant directories. -+ # We can hardcode non-existent directories. - if test "$hardcode_direct_F77" != no && - # If the only mechanism to avoid hardcoding is shlibpath_var, we - # have to relink, otherwise we might link with an installed library -@@ -18720,7 +18720,7 @@ - test -n "$runpath_var_GCJ" || \ - test "X$hardcode_automatic_GCJ" = "Xyes" ; then - -- # We can hardcode non-existant directories. -+ # We can hardcode non-existent directories. - if test "$hardcode_direct_GCJ" != no && - # If the only mechanism to avoid hardcoding is shlibpath_var, we - # have to relink, otherwise we might link with an installed library -@@ -20406,6 +20406,9 @@ +--- libffi/configure.orig 2009-12-31 13:41:51.000000000 +0100 ++++ libffi/configure 2010-02-24 00:41:59.829608794 +0100 +@@ -12191,6 +12191,9 @@ i?86-*-solaris2.1[0-9]*) TARGET=X86_64; TARGETDIR=x86 ;; @@ -121,7 +70,7 @@ i?86-*-*) TARGET=X86; TARGETDIR=x86 ;; -@@ -20423,10 +20426,10 @@ +@@ -12208,12 +12211,12 @@ ;; mips-sgi-irix5.* | mips-sgi-irix6.*) @@ -129,12 +78,14 @@ + TARGET=MIPS_IRIX; TARGETDIR=mips ;; mips*-*-linux*) + # Support 128-bit long double for NewABI. + HAVE_LONG_DOUBLE='defined(__mips64)' - TARGET=MIPS; TARGETDIR=mips -+ TARGET=MIPS_LINUX; TARGETDIR=mips ++ TARGET=MIPS_IRIX; TARGETDIR=mips ;; powerpc*-*-linux* | powerpc-*-sysv*) -@@ -20481,7 +20484,7 @@ +@@ -12272,7 +12275,7 @@ { (exit 1); exit 1; }; } fi @@ -143,24 +94,22 @@ MIPS_TRUE= MIPS_FALSE='#' else -@@ -22712,9 +22715,15 @@ +@@ -14667,7 +14670,13 @@ ac_config_links="$ac_config_links include/ffitarget.h:src/$TARGETDIR/ffitarget.h" -ac_config_files="$ac_config_files include/Makefile include/ffi.h Makefile testsuite/Makefile man/Makefile libffi.pc" +ac_config_files="$ac_config_files include/ffi.h" - - -+ac_config_links="$ac_config_links include/ffi_common.h:include/ffi_common.h" + + -+ac_config_files="$ac_config_files fficonfig.py" ++ac_config_links="$ac_config_links include/ffi_common.h:include/ffi_common.h" + + ++ac_config_files="$ac_config_files fficonfig.py" + + cat >confcache <<\_ACEOF - # This file is a shell script that caches the results of configure - # tests run on this system so they can be shared between configure -@@ -23498,12 +23507,9 @@ +@@ -15767,12 +15776,9 @@ "include") CONFIG_COMMANDS="$CONFIG_COMMANDS include" ;; "src") CONFIG_COMMANDS="$CONFIG_COMMANDS src" ;; "include/ffitarget.h") CONFIG_LINKS="$CONFIG_LINKS include/ffitarget.h:src/$TARGETDIR/ffitarget.h" ;; @@ -173,13 +122,22 @@ + "include/ffi_common.h") CONFIG_LINKS="$CONFIG_LINKS include/ffi_common.h:include/ffi_common.h" ;; + "fficonfig.py") CONFIG_FILES="$CONFIG_FILES fficonfig.py" ;; - *) { { echo "$as_me:$LINENO: error: invalid argument: $ac_config_target" >&5 - echo "$as_me: error: invalid argument: $ac_config_target" >&2;} -Index: libffi/src/x86/ffi.c -=================================================================== ---- libffi/src/x86/ffi.c (working copy) -+++ libffi/src/x86/ffi.c (revision 72475) -@@ -388,10 +388,10 @@ + *) { { $as_echo "$as_me:$LINENO: error: invalid argument: $ac_config_target" >&5 + $as_echo "$as_me: error: invalid argument: $ac_config_target" >&2;} +--- libffi/src/x86/ffi64.c.orig 2009-12-29 16:22:26.000000000 +0100 ++++ libffi/src/x86/ffi64.c 2010-02-24 00:36:46.678610932 +0100 +@@ -52,7 +52,7 @@ + /* Register class used for passing given 64bit part of the argument. + These represent classes as documented by the PS ABI, with the exception + of SSESF, SSEDF classes, that are basically SSE class, just gcc will +- use SF or DFmode move instead of DImode to avoid reformating penalties. ++ use SF or DFmode move instead of DImode to avoid reformatting penalties. + + Similary we play games with INTEGERSI_CLASS to use cheaper SImode moves + whenever possible (upper half does contain padding). */ +--- libffi/src/x86/ffi.c.orig 2009-12-29 16:22:26.000000000 +0100 ++++ libffi/src/x86/ffi.c 2010-02-24 00:36:46.678610932 +0100 +@@ -594,10 +594,10 @@ return FFI_BAD_ABI; } @@ -192,16 +150,3 @@ for (i = cif->nargs-1; i >= 0; i--) { -Index: libffi/src/x86/ffi64.c -=================================================================== ---- libffi/src/x86/ffi64.c (working copy) -+++ libffi/src/x86/ffi64.c (revision 72475) -@@ -52,7 +52,7 @@ - /* Register class used for passing given 64bit part of the argument. - These represent classes as documented by the PS ABI, with the exception - of SSESF, SSEDF classes, that are basically SSE class, just gcc will -- use SF or DFmode move instead of DImode to avoid reformating penalties. -+ use SF or DFmode move instead of DImode to avoid reformatting penalties. - - Similary we play games with INTEGERSI_CLASS to use cheaper SImode moves - whenever possible (upper half does contain padding). */ Modified: python/branches/py3k/Modules/_ctypes/libffi/LICENSE ============================================================================== --- python/branches/py3k/Modules/_ctypes/libffi/LICENSE (original) +++ python/branches/py3k/Modules/_ctypes/libffi/LICENSE Mon Mar 15 14:25:28 2010 @@ -1,4 +1,4 @@ -libffi - Copyright (c) 1996-2008 Red Hat, Inc and others. +libffi - Copyright (c) 1996-2009 Anthony Green, Red Hat, Inc and others. See source files for details. Permission is hereby granted, free of charge, to any person obtaining Modified: python/branches/py3k/Modules/_ctypes/libffi/Makefile.am ============================================================================== --- python/branches/py3k/Modules/_ctypes/libffi/Makefile.am (original) +++ python/branches/py3k/Modules/_ctypes/libffi/Makefile.am Mon Mar 15 14:25:28 2010 @@ -7,6 +7,7 @@ EXTRA_DIST = LICENSE ChangeLog.v1 ChangeLog.libgcj configure.host \ src/alpha/ffi.c src/alpha/osf.S src/alpha/ffitarget.h \ src/arm/ffi.c src/arm/sysv.S src/arm/ffitarget.h \ + src/avr32/ffi.c src/avr32/sysv.S src/avr32/ffitarget.h \ src/cris/ffi.c src/cris/sysv.S src/cris/ffitarget.h \ src/ia64/ffi.c src/ia64/ffitarget.h src/ia64/ia64_flags.h \ src/ia64/unix.S \ @@ -25,12 +26,13 @@ src/sh64/ffi.c src/sh64/sysv.S src/sh64/ffitarget.h \ src/sparc/v8.S src/sparc/v9.S src/sparc/ffitarget.h \ src/sparc/ffi.c src/x86/darwin64.S \ - src/x86/ffi.c src/x86/sysv.S src/x86/win32.S src/x86/darwin.S \ - src/x86/freebsd.S \ + src/x86/ffi.c src/x86/sysv.S src/x86/win32.S src/x86/win64.S \ + src/x86/darwin.S src/x86/freebsd.S \ src/x86/ffi64.c src/x86/unix64.S src/x86/ffitarget.h \ src/pa/ffitarget.h src/pa/ffi.c src/pa/linux.S src/pa/hpux32.S \ src/frv/ffi.c src/frv/eabi.S src/frv/ffitarget.h src/dlmalloc.c \ - libtool-version ChangeLog.libffi + libtool-version ChangeLog.libffi m4/libtool.m4 \ + m4/lt~obsolete.m4 m4/ltoptions.m4 m4/ltsugar.m4 m4/ltversion.m4 info_TEXINFOS = doc/libffi.texi @@ -79,6 +81,8 @@ MAKEOVERRIDES= +ACLOCAL_AMFLAGS=$(ACLOCAL_AMFLAGS) -I m4 + lib_LTLIBRARIES = libffi.la noinst_LTLIBRARIES = libffi_convenience.la @@ -102,6 +106,9 @@ if X86_WIN32 nodist_libffi_la_SOURCES += src/x86/ffi.c src/x86/win32.S endif +if X86_WIN64 +nodist_libffi_la_SOURCES += src/x86/ffi.c src/x86/win64.S +endif if X86_DARWIN nodist_libffi_la_SOURCES += src/x86/ffi.c src/x86/darwin.S src/x86/ffi64.c src/x86/darwin64.S endif @@ -135,6 +142,9 @@ if ARM nodist_libffi_la_SOURCES += src/arm/sysv.S src/arm/ffi.c endif +if AVR32 +nodist_libffi_la_SOURCES += src/avr32/sysv.S src/avr32/ffi.c +endif if LIBFFI_CRIS nodist_libffi_la_SOURCES += src/cris/sysv.S src/cris/ffi.c endif @@ -165,7 +175,7 @@ AM_CFLAGS = -Wall -g -fexceptions -libffi_la_LDFLAGS = -version-info `grep -v '^\#' $(srcdir)/libtool-version` +libffi_la_LDFLAGS = -version-info `grep -v '^\#' $(srcdir)/libtool-version` $(AM_LTLDFLAGS) AM_CPPFLAGS = -I. -I$(top_srcdir)/include -Iinclude -I$(top_srcdir)/src AM_CCASFLAGS = $(AM_CPPFLAGS) Modified: python/branches/py3k/Modules/_ctypes/libffi/Makefile.in ============================================================================== --- python/branches/py3k/Modules/_ctypes/libffi/Makefile.in (original) +++ python/branches/py3k/Modules/_ctypes/libffi/Makefile.in Mon Mar 15 14:25:28 2010 @@ -1,8 +1,9 @@ -# Makefile.in generated by automake 1.10 from Makefile.am. +# Makefile.in generated by automake 1.11 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, -# 2003, 2004, 2005, 2006 Free Software Foundation, Inc. +# 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, +# Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. @@ -17,8 +18,9 @@ VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ -pkglibdir = $(libdir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c @@ -38,33 +40,34 @@ @X86_TRUE at am__append_2 = src/x86/ffi.c src/x86/sysv.S @X86_FREEBSD_TRUE at am__append_3 = src/x86/ffi.c src/x86/freebsd.S @X86_WIN32_TRUE at am__append_4 = src/x86/ffi.c src/x86/win32.S - at X86_DARWIN_TRUE@am__append_5 = src/x86/ffi.c src/x86/darwin.S src/x86/ffi64.c src/x86/darwin64.S - at SPARC_TRUE@am__append_6 = src/sparc/ffi.c src/sparc/v8.S src/sparc/v9.S - at ALPHA_TRUE@am__append_7 = src/alpha/ffi.c src/alpha/osf.S - at IA64_TRUE@am__append_8 = src/ia64/ffi.c src/ia64/unix.S - at M32R_TRUE@am__append_9 = src/m32r/sysv.S src/m32r/ffi.c - at M68K_TRUE@am__append_10 = src/m68k/ffi.c src/m68k/sysv.S - at POWERPC_TRUE@am__append_11 = src/powerpc/ffi.c src/powerpc/sysv.S src/powerpc/ppc_closure.S src/powerpc/linux64.S src/powerpc/linux64_closure.S - at POWERPC_AIX_TRUE@am__append_12 = src/powerpc/ffi_darwin.c src/powerpc/aix.S src/powerpc/aix_closure.S - at POWERPC_DARWIN_TRUE@am__append_13 = src/powerpc/ffi_darwin.c src/powerpc/darwin.S src/powerpc/darwin_closure.S - at POWERPC_FREEBSD_TRUE@am__append_14 = src/powerpc/ffi.c src/powerpc/sysv.S src/powerpc/ppc_closure.S - at ARM_TRUE@am__append_15 = src/arm/sysv.S src/arm/ffi.c - at LIBFFI_CRIS_TRUE@am__append_16 = src/cris/sysv.S src/cris/ffi.c - at FRV_TRUE@am__append_17 = src/frv/eabi.S src/frv/ffi.c - at S390_TRUE@am__append_18 = src/s390/sysv.S src/s390/ffi.c - at X86_64_TRUE@am__append_19 = src/x86/ffi64.c src/x86/unix64.S src/x86/ffi.c src/x86/sysv.S - at SH_TRUE@am__append_20 = src/sh/sysv.S src/sh/ffi.c - at SH64_TRUE@am__append_21 = src/sh64/sysv.S src/sh64/ffi.c - at PA_LINUX_TRUE@am__append_22 = src/pa/linux.S src/pa/ffi.c - at PA_HPUX_TRUE@am__append_23 = src/pa/hpux32.S src/pa/ffi.c + at X86_WIN64_TRUE@am__append_5 = src/x86/ffi.c src/x86/win64.S + at X86_DARWIN_TRUE@am__append_6 = src/x86/ffi.c src/x86/darwin.S src/x86/ffi64.c src/x86/darwin64.S + at SPARC_TRUE@am__append_7 = src/sparc/ffi.c src/sparc/v8.S src/sparc/v9.S + at ALPHA_TRUE@am__append_8 = src/alpha/ffi.c src/alpha/osf.S + at IA64_TRUE@am__append_9 = src/ia64/ffi.c src/ia64/unix.S + at M32R_TRUE@am__append_10 = src/m32r/sysv.S src/m32r/ffi.c + at M68K_TRUE@am__append_11 = src/m68k/ffi.c src/m68k/sysv.S + at POWERPC_TRUE@am__append_12 = src/powerpc/ffi.c src/powerpc/sysv.S src/powerpc/ppc_closure.S src/powerpc/linux64.S src/powerpc/linux64_closure.S + at POWERPC_AIX_TRUE@am__append_13 = src/powerpc/ffi_darwin.c src/powerpc/aix.S src/powerpc/aix_closure.S + at POWERPC_DARWIN_TRUE@am__append_14 = src/powerpc/ffi_darwin.c src/powerpc/darwin.S src/powerpc/darwin_closure.S + at POWERPC_FREEBSD_TRUE@am__append_15 = src/powerpc/ffi.c src/powerpc/sysv.S src/powerpc/ppc_closure.S + at ARM_TRUE@am__append_16 = src/arm/sysv.S src/arm/ffi.c + at AVR32_TRUE@am__append_17 = src/avr32/sysv.S src/avr32/ffi.c + at LIBFFI_CRIS_TRUE@am__append_18 = src/cris/sysv.S src/cris/ffi.c + at FRV_TRUE@am__append_19 = src/frv/eabi.S src/frv/ffi.c + at S390_TRUE@am__append_20 = src/s390/sysv.S src/s390/ffi.c + at X86_64_TRUE@am__append_21 = src/x86/ffi64.c src/x86/unix64.S src/x86/ffi.c src/x86/sysv.S + at SH_TRUE@am__append_22 = src/sh/sysv.S src/sh/ffi.c + at SH64_TRUE@am__append_23 = src/sh64/sysv.S src/sh64/ffi.c + at PA_LINUX_TRUE@am__append_24 = src/pa/linux.S src/pa/ffi.c + at PA_HPUX_TRUE@am__append_25 = src/pa/hpux32.S src/pa/ffi.c subdir = . DIST_COMMON = README $(am__configure_deps) $(srcdir)/Makefile.am \ $(srcdir)/Makefile.in $(srcdir)/doc/stamp-vti \ $(srcdir)/doc/version.texi $(srcdir)/fficonfig.h.in \ - $(srcdir)/libffi.pc.in $(top_srcdir)/configure ChangeLog TODO \ - compile config.guess config.sub depcomp install-sh ltcf-c.sh \ - ltcf-cxx.sh ltcf-gcj.sh ltconfig ltmain.sh mdate-sh missing \ - mkinstalldirs texinfo.tex + $(srcdir)/libffi.pc.in $(top_srcdir)/configure ChangeLog \ + compile config.guess config.sub depcomp install-sh ltmain.sh \ + mdate-sh missing texinfo.tex ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/acinclude.m4 \ $(top_srcdir)/configure.ac @@ -72,18 +75,33 @@ $(ACLOCAL_M4) am__CONFIG_DISTCLEAN_FILES = config.status config.cache config.log \ configure.lineno config.status.lineno -mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs +mkinstalldirs = $(install_sh) -d CONFIG_HEADER = fficonfig.h CONFIG_CLEAN_FILES = libffi.pc +CONFIG_CLEAN_VPATH_FILES = am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; -am__strip_dir = `echo $$p | sed -e 's|^.*/||'`; +am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; +am__install_max = 40 +am__nobase_strip_setup = \ + srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` +am__nobase_strip = \ + for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" +am__nobase_list = $(am__nobase_strip_setup); \ + for p in $$list; do echo "$$p $$p"; done | \ + sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ + $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ + if (++n[$$2] == $(am__install_max)) \ + { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ + END { for (dir in files) print dir, files[dir] }' +am__base_list = \ + sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ + sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__installdirs = "$(DESTDIR)$(libdir)" "$(DESTDIR)$(infodir)" \ "$(DESTDIR)$(pkgconfigdir)" -libLTLIBRARIES_INSTALL = $(INSTALL) LTLIBRARIES = $(lib_LTLIBRARIES) $(noinst_LTLIBRARIES) libffi_la_LIBADD = am__dirstamp = $(am__leading_dot)dirstamp @@ -94,37 +112,39 @@ @X86_TRUE at am__objects_2 = src/x86/ffi.lo src/x86/sysv.lo @X86_FREEBSD_TRUE at am__objects_3 = src/x86/ffi.lo src/x86/freebsd.lo @X86_WIN32_TRUE at am__objects_4 = src/x86/ffi.lo src/x86/win32.lo - at X86_DARWIN_TRUE@am__objects_5 = src/x86/ffi.lo src/x86/darwin.lo \ + at X86_WIN64_TRUE@am__objects_5 = src/x86/ffi.lo src/x86/win64.lo + at X86_DARWIN_TRUE@am__objects_6 = src/x86/ffi.lo src/x86/darwin.lo \ @X86_DARWIN_TRUE@ src/x86/ffi64.lo src/x86/darwin64.lo - at SPARC_TRUE@am__objects_6 = src/sparc/ffi.lo src/sparc/v8.lo \ + at SPARC_TRUE@am__objects_7 = src/sparc/ffi.lo src/sparc/v8.lo \ @SPARC_TRUE@ src/sparc/v9.lo - at ALPHA_TRUE@am__objects_7 = src/alpha/ffi.lo src/alpha/osf.lo - at IA64_TRUE@am__objects_8 = src/ia64/ffi.lo src/ia64/unix.lo - at M32R_TRUE@am__objects_9 = src/m32r/sysv.lo src/m32r/ffi.lo - at M68K_TRUE@am__objects_10 = src/m68k/ffi.lo src/m68k/sysv.lo - at POWERPC_TRUE@am__objects_11 = src/powerpc/ffi.lo src/powerpc/sysv.lo \ + at ALPHA_TRUE@am__objects_8 = src/alpha/ffi.lo src/alpha/osf.lo + at IA64_TRUE@am__objects_9 = src/ia64/ffi.lo src/ia64/unix.lo + at M32R_TRUE@am__objects_10 = src/m32r/sysv.lo src/m32r/ffi.lo + at M68K_TRUE@am__objects_11 = src/m68k/ffi.lo src/m68k/sysv.lo + at POWERPC_TRUE@am__objects_12 = src/powerpc/ffi.lo src/powerpc/sysv.lo \ @POWERPC_TRUE@ src/powerpc/ppc_closure.lo \ @POWERPC_TRUE@ src/powerpc/linux64.lo \ @POWERPC_TRUE@ src/powerpc/linux64_closure.lo - at POWERPC_AIX_TRUE@am__objects_12 = src/powerpc/ffi_darwin.lo \ + at POWERPC_AIX_TRUE@am__objects_13 = src/powerpc/ffi_darwin.lo \ @POWERPC_AIX_TRUE@ src/powerpc/aix.lo \ @POWERPC_AIX_TRUE@ src/powerpc/aix_closure.lo - at POWERPC_DARWIN_TRUE@am__objects_13 = src/powerpc/ffi_darwin.lo \ + at POWERPC_DARWIN_TRUE@am__objects_14 = src/powerpc/ffi_darwin.lo \ @POWERPC_DARWIN_TRUE@ src/powerpc/darwin.lo \ @POWERPC_DARWIN_TRUE@ src/powerpc/darwin_closure.lo - at POWERPC_FREEBSD_TRUE@am__objects_14 = src/powerpc/ffi.lo \ + at POWERPC_FREEBSD_TRUE@am__objects_15 = src/powerpc/ffi.lo \ @POWERPC_FREEBSD_TRUE@ src/powerpc/sysv.lo \ @POWERPC_FREEBSD_TRUE@ src/powerpc/ppc_closure.lo - at ARM_TRUE@am__objects_15 = src/arm/sysv.lo src/arm/ffi.lo - at LIBFFI_CRIS_TRUE@am__objects_16 = src/cris/sysv.lo src/cris/ffi.lo - at FRV_TRUE@am__objects_17 = src/frv/eabi.lo src/frv/ffi.lo - at S390_TRUE@am__objects_18 = src/s390/sysv.lo src/s390/ffi.lo - at X86_64_TRUE@am__objects_19 = src/x86/ffi64.lo src/x86/unix64.lo \ + at ARM_TRUE@am__objects_16 = src/arm/sysv.lo src/arm/ffi.lo + at AVR32_TRUE@am__objects_17 = src/avr32/sysv.lo src/avr32/ffi.lo + at LIBFFI_CRIS_TRUE@am__objects_18 = src/cris/sysv.lo src/cris/ffi.lo + at FRV_TRUE@am__objects_19 = src/frv/eabi.lo src/frv/ffi.lo + at S390_TRUE@am__objects_20 = src/s390/sysv.lo src/s390/ffi.lo + at X86_64_TRUE@am__objects_21 = src/x86/ffi64.lo src/x86/unix64.lo \ @X86_64_TRUE@ src/x86/ffi.lo src/x86/sysv.lo - at SH_TRUE@am__objects_20 = src/sh/sysv.lo src/sh/ffi.lo - at SH64_TRUE@am__objects_21 = src/sh64/sysv.lo src/sh64/ffi.lo - at PA_LINUX_TRUE@am__objects_22 = src/pa/linux.lo src/pa/ffi.lo - at PA_HPUX_TRUE@am__objects_23 = src/pa/hpux32.lo src/pa/ffi.lo + at SH_TRUE@am__objects_22 = src/sh/sysv.lo src/sh/ffi.lo + at SH64_TRUE@am__objects_23 = src/sh64/sysv.lo src/sh64/ffi.lo + at PA_LINUX_TRUE@am__objects_24 = src/pa/linux.lo src/pa/ffi.lo + at PA_HPUX_TRUE@am__objects_25 = src/pa/hpux32.lo src/pa/ffi.lo nodist_libffi_la_OBJECTS = $(am__objects_1) $(am__objects_2) \ $(am__objects_3) $(am__objects_4) $(am__objects_5) \ $(am__objects_6) $(am__objects_7) $(am__objects_8) \ @@ -132,30 +152,33 @@ $(am__objects_12) $(am__objects_13) $(am__objects_14) \ $(am__objects_15) $(am__objects_16) $(am__objects_17) \ $(am__objects_18) $(am__objects_19) $(am__objects_20) \ - $(am__objects_21) $(am__objects_22) $(am__objects_23) + $(am__objects_21) $(am__objects_22) $(am__objects_23) \ + $(am__objects_24) $(am__objects_25) libffi_la_OBJECTS = $(am_libffi_la_OBJECTS) \ $(nodist_libffi_la_OBJECTS) libffi_la_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(libffi_la_LDFLAGS) $(LDFLAGS) -o $@ libffi_convenience_la_LIBADD = -am__objects_24 = src/debug.lo src/prep_cif.lo src/types.lo \ +am__objects_26 = src/debug.lo src/prep_cif.lo src/types.lo \ src/raw_api.lo src/java_raw_api.lo src/closures.lo -am_libffi_convenience_la_OBJECTS = $(am__objects_24) -am__objects_25 = $(am__objects_1) $(am__objects_2) $(am__objects_3) \ +am_libffi_convenience_la_OBJECTS = $(am__objects_26) +am__objects_27 = $(am__objects_1) $(am__objects_2) $(am__objects_3) \ $(am__objects_4) $(am__objects_5) $(am__objects_6) \ $(am__objects_7) $(am__objects_8) $(am__objects_9) \ $(am__objects_10) $(am__objects_11) $(am__objects_12) \ $(am__objects_13) $(am__objects_14) $(am__objects_15) \ $(am__objects_16) $(am__objects_17) $(am__objects_18) \ $(am__objects_19) $(am__objects_20) $(am__objects_21) \ - $(am__objects_22) $(am__objects_23) -nodist_libffi_convenience_la_OBJECTS = $(am__objects_25) + $(am__objects_22) $(am__objects_23) $(am__objects_24) \ + $(am__objects_25) +nodist_libffi_convenience_la_OBJECTS = $(am__objects_27) libffi_convenience_la_OBJECTS = $(am_libffi_convenience_la_OBJECTS) \ $(nodist_libffi_convenience_la_OBJECTS) DEFAULT_INCLUDES = -I. at am__isrc@ depcomp = $(SHELL) $(top_srcdir)/depcomp am__depfiles_maybe = depfiles +am__mv = mv -f CPPASCOMPILE = $(CCAS) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CCASFLAGS) $(CCASFLAGS) LTCPPASCOMPILE = $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ @@ -193,10 +216,12 @@ install-pdf-recursive install-ps-recursive install-recursive \ installcheck-recursive installdirs-recursive pdf-recursive \ ps-recursive uninstall-recursive -pkgconfigDATA_INSTALL = $(INSTALL_DATA) DATA = $(pkgconfig_DATA) RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ distclean-recursive maintainer-clean-recursive +AM_RECURSIVE_TARGETS = $(RECURSIVE_TARGETS:-recursive=) \ + $(RECURSIVE_CLEAN_TARGETS:-recursive=) tags TAGS ctags CTAGS \ + distdir dist dist-all distcheck ETAGS = etags CTAGS = ctags DIST_SUBDIRS = $(SUBDIRS) @@ -204,9 +229,34 @@ distdir = $(PACKAGE)-$(VERSION) top_distdir = $(distdir) am__remove_distdir = \ - { test ! -d $(distdir) \ - || { find $(distdir) -type d ! -perm -200 -exec chmod u+w {} ';' \ - && rm -fr $(distdir); }; } + { test ! -d "$(distdir)" \ + || { find "$(distdir)" -type d ! -perm -200 -exec chmod u+w {} ';' \ + && rm -fr "$(distdir)"; }; } +am__relativize = \ + dir0=`pwd`; \ + sed_first='s,^\([^/]*\)/.*$$,\1,'; \ + sed_rest='s,^[^/]*/*,,'; \ + sed_last='s,^.*/\([^/]*\)$$,\1,'; \ + sed_butlast='s,/*[^/]*$$,,'; \ + while test -n "$$dir1"; do \ + first=`echo "$$dir1" | sed -e "$$sed_first"`; \ + if test "$$first" != "."; then \ + if test "$$first" = ".."; then \ + dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \ + dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \ + else \ + first2=`echo "$$dir2" | sed -e "$$sed_first"`; \ + if test "$$first2" = "$$first"; then \ + dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \ + else \ + dir2="../$$dir2"; \ + fi; \ + dir0="$$dir0"/"$$first"; \ + fi; \ + fi; \ + dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \ + done; \ + reldir="$$dir2" DIST_ARCHIVES = $(distdir).tar.gz GZIP_ENV = --best distuninstallcheck_listfiles = find . -type f -print @@ -214,6 +264,7 @@ ACLOCAL = @ACLOCAL@ ALLOCA = @ALLOCA@ AMTAR = @AMTAR@ +AM_LTLDFLAGS = @AM_LTLDFLAGS@ AM_RUNTESTFLAGS = @AM_RUNTESTFLAGS@ AR = @AR@ AUTOCONF = @AUTOCONF@ @@ -228,21 +279,17 @@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ -CXX = @CXX@ -CXXCPP = @CXXCPP@ -CXXDEPMODE = @CXXDEPMODE@ -CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ -ECHO = @ECHO@ +DSYMUTIL = @DSYMUTIL@ +DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ -F77 = @F77@ -FFLAGS = @FFLAGS@ +FGREP = @FGREP@ GREP = @GREP@ HAVE_LONG_DOUBLE = @HAVE_LONG_DOUBLE@ INSTALL = @INSTALL@ @@ -250,16 +297,23 @@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +LD = @LD@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ +LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ +NM = @NM@ +NMEDIT = @NMEDIT@ +OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ +OTOOL = @OTOOL@ +OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ @@ -280,8 +334,7 @@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ -ac_ct_CXX = @ac_ct_CXX@ -ac_ct_F77 = @ac_ct_F77@ +ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ @@ -312,6 +365,7 @@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ +lt_ECHO = @lt_ECHO@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ @@ -330,6 +384,7 @@ target_vendor = @target_vendor@ toolexecdir = @toolexecdir@ toolexeclibdir = @toolexeclibdir@ +top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ AUTOMAKE_OPTIONS = foreign subdir-objects @@ -337,6 +392,7 @@ EXTRA_DIST = LICENSE ChangeLog.v1 ChangeLog.libgcj configure.host \ src/alpha/ffi.c src/alpha/osf.S src/alpha/ffitarget.h \ src/arm/ffi.c src/arm/sysv.S src/arm/ffitarget.h \ + src/avr32/ffi.c src/avr32/sysv.S src/avr32/ffitarget.h \ src/cris/ffi.c src/cris/sysv.S src/cris/ffitarget.h \ src/ia64/ffi.c src/ia64/ffitarget.h src/ia64/ia64_flags.h \ src/ia64/unix.S \ @@ -355,12 +411,13 @@ src/sh64/ffi.c src/sh64/sysv.S src/sh64/ffitarget.h \ src/sparc/v8.S src/sparc/v9.S src/sparc/ffitarget.h \ src/sparc/ffi.c src/x86/darwin64.S \ - src/x86/ffi.c src/x86/sysv.S src/x86/win32.S src/x86/darwin.S \ - src/x86/freebsd.S \ + src/x86/ffi.c src/x86/sysv.S src/x86/win32.S src/x86/win64.S \ + src/x86/darwin.S src/x86/freebsd.S \ src/x86/ffi64.c src/x86/unix64.S src/x86/ffitarget.h \ src/pa/ffitarget.h src/pa/ffi.c src/pa/linux.S src/pa/hpux32.S \ src/frv/ffi.c src/frv/eabi.S src/frv/ffitarget.h src/dlmalloc.c \ - libtool-version ChangeLog.libffi + libtool-version ChangeLog.libffi m4/libtool.m4 \ + m4/lt~obsolete.m4 m4/ltoptions.m4 m4/ltsugar.m4 m4/ltversion.m4 info_TEXINFOS = doc/libffi.texi @@ -402,6 +459,7 @@ "DESTDIR=$(DESTDIR)" MAKEOVERRIDES = +ACLOCAL_AMFLAGS = $(ACLOCAL_AMFLAGS) -I m4 lib_LTLIBRARIES = libffi.la noinst_LTLIBRARIES = libffi_convenience.la libffi_la_SOURCES = src/debug.c src/prep_cif.c src/types.c \ @@ -416,11 +474,12 @@ $(am__append_12) $(am__append_13) $(am__append_14) \ $(am__append_15) $(am__append_16) $(am__append_17) \ $(am__append_18) $(am__append_19) $(am__append_20) \ - $(am__append_21) $(am__append_22) $(am__append_23) + $(am__append_21) $(am__append_22) $(am__append_23) \ + $(am__append_24) $(am__append_25) libffi_convenience_la_SOURCES = $(libffi_la_SOURCES) nodist_libffi_convenience_la_SOURCES = $(nodist_libffi_la_SOURCES) AM_CFLAGS = -Wall -g -fexceptions -libffi_la_LDFLAGS = -version-info `grep -v '^\#' $(srcdir)/libtool-version` +libffi_la_LDFLAGS = -version-info `grep -v '^\#' $(srcdir)/libtool-version` $(AM_LTLDFLAGS) AM_CPPFLAGS = -I. -I$(top_srcdir)/include -Iinclude -I$(top_srcdir)/src AM_CCASFLAGS = $(AM_CPPFLAGS) all: fficonfig.h @@ -434,15 +493,15 @@ @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ - echo ' cd $(srcdir) && $(AUTOMAKE) --foreign '; \ - cd $(srcdir) && $(AUTOMAKE) --foreign \ + echo ' cd $(srcdir) && $(AUTOMAKE) --foreign'; \ + $(am__cd) $(srcdir) && $(AUTOMAKE) --foreign \ && exit 0; \ exit 1;; \ esac; \ done; \ - echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign Makefile'; \ - cd $(top_srcdir) && \ - $(AUTOMAKE) --foreign Makefile + echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign Makefile'; \ + $(am__cd) $(top_srcdir) && \ + $(AUTOMAKE) --foreign Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ @@ -458,9 +517,10 @@ $(SHELL) ./config.status --recheck $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) - cd $(srcdir) && $(AUTOCONF) + $(am__cd) $(srcdir) && $(AUTOCONF) $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) - cd $(srcdir) && $(ACLOCAL) $(ACLOCAL_AMFLAGS) + $(am__cd) $(srcdir) && $(ACLOCAL) $(ACLOCAL_AMFLAGS) +$(am__aclocal_m4_deps): fficonfig.h: stamp-h1 @if test ! -f $@; then \ @@ -472,7 +532,7 @@ @rm -f stamp-h1 cd $(top_builddir) && $(SHELL) ./config.status fficonfig.h $(srcdir)/fficonfig.h.in: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) - cd $(top_srcdir) && $(AUTOHEADER) + ($(am__cd) $(top_srcdir) && $(AUTOHEADER)) rm -f stamp-h1 touch $@ @@ -483,20 +543,24 @@ install-libLTLIBRARIES: $(lib_LTLIBRARIES) @$(NORMAL_INSTALL) test -z "$(libdir)" || $(MKDIR_P) "$(DESTDIR)$(libdir)" - @list='$(lib_LTLIBRARIES)'; for p in $$list; do \ + @list='$(lib_LTLIBRARIES)'; test -n "$(libdir)" || list=; \ + list2=; for p in $$list; do \ if test -f $$p; then \ - f=$(am__strip_dir) \ - echo " $(LIBTOOL) --mode=install $(libLTLIBRARIES_INSTALL) $(INSTALL_STRIP_FLAG) '$$p' '$(DESTDIR)$(libdir)/$$f'"; \ - $(LIBTOOL) --mode=install $(libLTLIBRARIES_INSTALL) $(INSTALL_STRIP_FLAG) "$$p" "$(DESTDIR)$(libdir)/$$f"; \ + list2="$$list2 $$p"; \ else :; fi; \ - done + done; \ + test -z "$$list2" || { \ + echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 '$(DESTDIR)$(libdir)'"; \ + $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 "$(DESTDIR)$(libdir)"; \ + } uninstall-libLTLIBRARIES: @$(NORMAL_UNINSTALL) - @list='$(lib_LTLIBRARIES)'; for p in $$list; do \ - p=$(am__strip_dir) \ - echo " $(LIBTOOL) --mode=uninstall rm -f '$(DESTDIR)$(libdir)/$$p'"; \ - $(LIBTOOL) --mode=uninstall rm -f "$(DESTDIR)$(libdir)/$$p"; \ + @list='$(lib_LTLIBRARIES)'; test -n "$(libdir)" || list=; \ + for p in $$list; do \ + $(am__strip_dir) \ + echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f '$(DESTDIR)$(libdir)/$$f'"; \ + $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f "$(DESTDIR)$(libdir)/$$f"; \ done clean-libLTLIBRARIES: @@ -554,6 +618,8 @@ src/x86/$(DEPDIR)/$(am__dirstamp) src/x86/win32.lo: src/x86/$(am__dirstamp) \ src/x86/$(DEPDIR)/$(am__dirstamp) +src/x86/win64.lo: src/x86/$(am__dirstamp) \ + src/x86/$(DEPDIR)/$(am__dirstamp) src/x86/darwin.lo: src/x86/$(am__dirstamp) \ src/x86/$(DEPDIR)/$(am__dirstamp) src/x86/ffi64.lo: src/x86/$(am__dirstamp) \ @@ -648,6 +714,16 @@ src/arm/$(DEPDIR)/$(am__dirstamp) src/arm/ffi.lo: src/arm/$(am__dirstamp) \ src/arm/$(DEPDIR)/$(am__dirstamp) +src/avr32/$(am__dirstamp): + @$(MKDIR_P) src/avr32 + @: > src/avr32/$(am__dirstamp) +src/avr32/$(DEPDIR)/$(am__dirstamp): + @$(MKDIR_P) src/avr32/$(DEPDIR) + @: > src/avr32/$(DEPDIR)/$(am__dirstamp) +src/avr32/sysv.lo: src/avr32/$(am__dirstamp) \ + src/avr32/$(DEPDIR)/$(am__dirstamp) +src/avr32/ffi.lo: src/avr32/$(am__dirstamp) \ + src/avr32/$(DEPDIR)/$(am__dirstamp) src/cris/$(am__dirstamp): @$(MKDIR_P) src/cris @: > src/cris/$(am__dirstamp) @@ -725,6 +801,10 @@ -rm -f src/arm/ffi.lo -rm -f src/arm/sysv.$(OBJEXT) -rm -f src/arm/sysv.lo + -rm -f src/avr32/ffi.$(OBJEXT) + -rm -f src/avr32/ffi.lo + -rm -f src/avr32/sysv.$(OBJEXT) + -rm -f src/avr32/sysv.lo -rm -f src/closures.$(OBJEXT) -rm -f src/closures.lo -rm -f src/cris/ffi.$(OBJEXT) @@ -823,6 +903,8 @@ -rm -f src/x86/unix64.lo -rm -f src/x86/win32.$(OBJEXT) -rm -f src/x86/win32.lo + -rm -f src/x86/win64.$(OBJEXT) + -rm -f src/x86/win64.lo distclean-compile: -rm -f *.tab.c @@ -837,6 +919,8 @@ @AMDEP_TRUE@@am__include@ @am__quote at src/alpha/$(DEPDIR)/osf.Plo at am__quote@ @AMDEP_TRUE@@am__include@ @am__quote at src/arm/$(DEPDIR)/ffi.Plo at am__quote@ @AMDEP_TRUE@@am__include@ @am__quote at src/arm/$(DEPDIR)/sysv.Plo at am__quote@ + at AMDEP_TRUE@@am__include@ @am__quote at src/avr32/$(DEPDIR)/ffi.Plo at am__quote@ + at AMDEP_TRUE@@am__include@ @am__quote at src/avr32/$(DEPDIR)/sysv.Plo at am__quote@ @AMDEP_TRUE@@am__include@ @am__quote at src/cris/$(DEPDIR)/ffi.Plo at am__quote@ @AMDEP_TRUE@@am__include@ @am__quote at src/cris/$(DEPDIR)/sysv.Plo at am__quote@ @AMDEP_TRUE@@am__include@ @am__quote at src/frv/$(DEPDIR)/eabi.Plo at am__quote@ @@ -880,11 +964,12 @@ @AMDEP_TRUE@@am__include@ @am__quote at src/x86/$(DEPDIR)/sysv.Plo at am__quote@ @AMDEP_TRUE@@am__include@ @am__quote at src/x86/$(DEPDIR)/unix64.Plo at am__quote@ @AMDEP_TRUE@@am__include@ @am__quote at src/x86/$(DEPDIR)/win32.Plo at am__quote@ + at AMDEP_TRUE@@am__include@ @am__quote at src/x86/$(DEPDIR)/win64.Plo at am__quote@ .S.o: @am__fastdepCCAS_TRUE@ depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.o$$||'`;\ @am__fastdepCCAS_TRUE@ $(CPPASCOMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\ - at am__fastdepCCAS_TRUE@ mv -f $$depbase.Tpo $$depbase.Po + at am__fastdepCCAS_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Po @AMDEP_TRUE@@am__fastdepCCAS_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCCAS_FALSE@ DEPDIR=$(DEPDIR) $(CCASDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCCAS_FALSE@ $(CPPASCOMPILE) -c -o $@ $< @@ -892,7 +977,7 @@ .S.obj: @am__fastdepCCAS_TRUE@ depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.obj$$||'`;\ @am__fastdepCCAS_TRUE@ $(CPPASCOMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ `$(CYGPATH_W) '$<'` &&\ - at am__fastdepCCAS_TRUE@ mv -f $$depbase.Tpo $$depbase.Po + at am__fastdepCCAS_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Po @AMDEP_TRUE@@am__fastdepCCAS_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCCAS_FALSE@ DEPDIR=$(DEPDIR) $(CCASDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCCAS_FALSE@ $(CPPASCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'` @@ -900,7 +985,7 @@ .S.lo: @am__fastdepCCAS_TRUE@ depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.lo$$||'`;\ @am__fastdepCCAS_TRUE@ $(LTCPPASCOMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\ - at am__fastdepCCAS_TRUE@ mv -f $$depbase.Tpo $$depbase.Plo + at am__fastdepCCAS_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Plo @AMDEP_TRUE@@am__fastdepCCAS_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCCAS_FALSE@ DEPDIR=$(DEPDIR) $(CCASDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCCAS_FALSE@ $(LTCPPASCOMPILE) -c -o $@ $< @@ -908,7 +993,7 @@ .c.o: @am__fastdepCC_TRUE@ depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.o$$||'`;\ @am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\ - at am__fastdepCC_TRUE@ mv -f $$depbase.Tpo $$depbase.Po + at am__fastdepCC_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(COMPILE) -c -o $@ $< @@ -916,7 +1001,7 @@ .c.obj: @am__fastdepCC_TRUE@ depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.obj$$||'`;\ @am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ `$(CYGPATH_W) '$<'` &&\ - at am__fastdepCC_TRUE@ mv -f $$depbase.Tpo $$depbase.Po + at am__fastdepCC_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'` @@ -924,7 +1009,7 @@ .c.lo: @am__fastdepCC_TRUE@ depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.lo$$||'`;\ @am__fastdepCC_TRUE@ $(LTCOMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\ - at am__fastdepCC_TRUE@ mv -f $$depbase.Tpo $$depbase.Plo + at am__fastdepCC_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(LTCOMPILE) -c -o $@ $< @@ -937,6 +1022,7 @@ -rm -rf src/.libs src/_libs -rm -rf src/alpha/.libs src/alpha/_libs -rm -rf src/arm/.libs src/arm/_libs + -rm -rf src/avr32/.libs src/avr32/_libs -rm -rf src/cris/.libs src/cris/_libs -rm -rf src/frv/.libs src/frv/_libs -rm -rf src/ia64/.libs src/ia64/_libs @@ -952,14 +1038,14 @@ -rm -rf src/x86/.libs src/x86/_libs distclean-libtool: - -rm -f libtool + -rm -f libtool config.lt doc/$(am__dirstamp): @$(MKDIR_P) doc @: > doc/$(am__dirstamp) $(srcdir)/doc/libffi.info: doc/libffi.texi $(srcdir)/doc/version.texi restore=: && backupdir="$(am__leading_dot)am$$$$" && \ - am__cwd=`pwd` && cd $(srcdir) && \ + am__cwd=`pwd` && $(am__cd) $(srcdir) && \ rm -rf $$backupdir && mkdir $$backupdir && \ if ($(MAKEINFO) --version) >/dev/null 2>&1; then \ for f in $@ $@-[0-9] $@-[0-9][0-9] $(@:.info=).i[0-9] $(@:.info=).i[0-9][0-9]; do \ @@ -971,10 +1057,10 @@ -o $@ $(srcdir)/doc/libffi.texi; \ then \ rc=0; \ - cd $(srcdir); \ + $(am__cd) $(srcdir); \ else \ rc=$$?; \ - cd $(srcdir) && \ + $(am__cd) $(srcdir) && \ $$restore $$backupdir/* `echo "./$@" | sed 's|[^/]*$$||'`; \ fi; \ rm -rf $$backupdir; exit $$rc @@ -1028,16 +1114,18 @@ uninstall-dvi-am: @$(NORMAL_UNINSTALL) - @list='$(DVIS)'; for p in $$list; do \ - f=$(am__strip_dir) \ + @list='$(DVIS)'; test -n "$(dvidir)" || list=; \ + for p in $$list; do \ + $(am__strip_dir) \ echo " rm -f '$(DESTDIR)$(dvidir)/$$f'"; \ rm -f "$(DESTDIR)$(dvidir)/$$f"; \ done uninstall-html-am: @$(NORMAL_UNINSTALL) - @list='$(HTMLS)'; for p in $$list; do \ - f=$(am__strip_dir) \ + @list='$(HTMLS)'; test -n "$(htmldir)" || list=; \ + for p in $$list; do \ + $(am__strip_dir) \ echo " rm -rf '$(DESTDIR)$(htmldir)/$$f'"; \ rm -rf "$(DESTDIR)$(htmldir)/$$f"; \ done @@ -1051,7 +1139,8 @@ for file in $$list; do \ relfile=`echo "$$file" | sed 's|^.*/||'`; \ echo " install-info --info-dir='$(DESTDIR)$(infodir)' --remove '$(DESTDIR)$(infodir)/$$relfile'"; \ - install-info --info-dir="$(DESTDIR)$(infodir)" --remove "$(DESTDIR)$(infodir)/$$relfile"; \ + if install-info --info-dir="$(DESTDIR)$(infodir)" --remove "$(DESTDIR)$(infodir)/$$relfile"; \ + then :; else test ! -f "$(DESTDIR)$(infodir)/$$relfile" || exit 1; fi; \ done; \ else :; fi @$(NORMAL_UNINSTALL) @@ -1067,16 +1156,18 @@ uninstall-pdf-am: @$(NORMAL_UNINSTALL) - @list='$(PDFS)'; for p in $$list; do \ - f=$(am__strip_dir) \ + @list='$(PDFS)'; test -n "$(pdfdir)" || list=; \ + for p in $$list; do \ + $(am__strip_dir) \ echo " rm -f '$(DESTDIR)$(pdfdir)/$$f'"; \ rm -f "$(DESTDIR)$(pdfdir)/$$f"; \ done uninstall-ps-am: @$(NORMAL_UNINSTALL) - @list='$(PSS)'; for p in $$list; do \ - f=$(am__strip_dir) \ + @list='$(PSS)'; test -n "$(psdir)" || list=; \ + for p in $$list; do \ + $(am__strip_dir) \ echo " rm -f '$(DESTDIR)$(psdir)/$$f'"; \ rm -f "$(DESTDIR)$(psdir)/$$f"; \ done @@ -1093,16 +1184,19 @@ for file in $$d/$$base $$d/$$base-[0-9] $$d/$$base-[0-9][0-9] $$d/$$base_i[0-9] $$d/$$base_i[0-9][0-9]; do \ if test -f $$file; then \ relfile=`expr "$$file" : "$$d/\(.*\)"`; \ - test -f $(distdir)/$$relfile || \ - cp -p $$file $(distdir)/$$relfile; \ + test -f "$(distdir)/$$relfile" || \ + cp -p $$file "$(distdir)/$$relfile"; \ else :; fi; \ done; \ done mostlyclean-aminfo: -rm -rf libffi.aux libffi.cp libffi.cps libffi.fn libffi.ky libffi.log \ - libffi.pg libffi.tmp libffi.toc libffi.tp libffi.vr \ - doc/libffi.dvi doc/libffi.pdf doc/libffi.ps doc/libffi.html + libffi.pg libffi.tmp libffi.toc libffi.tp libffi.vr + +clean-aminfo: + -test -z "doc/libffi.dvi doc/libffi.pdf doc/libffi.ps doc/libffi.html" \ + || rm -rf doc/libffi.dvi doc/libffi.pdf doc/libffi.ps doc/libffi.html maintainer-clean-aminfo: @list='$(INFO_DEPS)'; for i in $$list; do \ @@ -1113,20 +1207,23 @@ install-pkgconfigDATA: $(pkgconfig_DATA) @$(NORMAL_INSTALL) test -z "$(pkgconfigdir)" || $(MKDIR_P) "$(DESTDIR)$(pkgconfigdir)" - @list='$(pkgconfig_DATA)'; for p in $$list; do \ + @list='$(pkgconfig_DATA)'; test -n "$(pkgconfigdir)" || list=; \ + for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ - f=$(am__strip_dir) \ - echo " $(pkgconfigDATA_INSTALL) '$$d$$p' '$(DESTDIR)$(pkgconfigdir)/$$f'"; \ - $(pkgconfigDATA_INSTALL) "$$d$$p" "$(DESTDIR)$(pkgconfigdir)/$$f"; \ + echo "$$d$$p"; \ + done | $(am__base_list) | \ + while read files; do \ + echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(pkgconfigdir)'"; \ + $(INSTALL_DATA) $$files "$(DESTDIR)$(pkgconfigdir)" || exit $$?; \ done uninstall-pkgconfigDATA: @$(NORMAL_UNINSTALL) - @list='$(pkgconfig_DATA)'; for p in $$list; do \ - f=$(am__strip_dir) \ - echo " rm -f '$(DESTDIR)$(pkgconfigdir)/$$f'"; \ - rm -f "$(DESTDIR)$(pkgconfigdir)/$$f"; \ - done + @list='$(pkgconfig_DATA)'; test -n "$(pkgconfigdir)" || list=; \ + files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ + test -n "$$files" || exit 0; \ + echo " ( cd '$(DESTDIR)$(pkgconfigdir)' && rm -f" $$files ")"; \ + cd "$(DESTDIR)$(pkgconfigdir)" && rm -f $$files # This directory's subdirectories are mostly independent; you can cd # into them and run `make' without going through this Makefile. @@ -1152,7 +1249,7 @@ else \ local_target="$$target"; \ fi; \ - (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ + ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || eval $$failcom; \ done; \ if test "$$dot_seen" = "no"; then \ @@ -1186,16 +1283,16 @@ else \ local_target="$$target"; \ fi; \ - (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ + ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || eval $$failcom; \ done && test -z "$$fail" tags-recursive: list='$(SUBDIRS)'; for subdir in $$list; do \ - test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \ + test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \ done ctags-recursive: list='$(SUBDIRS)'; for subdir in $$list; do \ - test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \ + test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \ done ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) @@ -1203,14 +1300,14 @@ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ - $(AWK) ' { files[$$0] = 1; } \ - END { for (i in files) print i; }'`; \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ mkid -fID $$unique tags: TAGS TAGS: tags-recursive $(HEADERS) $(SOURCES) fficonfig.h.in $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) - tags=; \ + set x; \ here=`pwd`; \ if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ include_option=--etags-include; \ @@ -1222,46 +1319,50 @@ list='$(SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test ! -f $$subdir/TAGS || \ - tags="$$tags $$include_option=$$here/$$subdir/TAGS"; \ + set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \ fi; \ done; \ list='$(SOURCES) $(HEADERS) fficonfig.h.in $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ - $(AWK) ' { files[$$0] = 1; } \ - END { for (i in files) print i; }'`; \ - if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + shift; \ + if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ - $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ - $$tags $$unique; \ + if test $$# -gt 0; then \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + "$$@" $$unique; \ + else \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + $$unique; \ + fi; \ fi ctags: CTAGS CTAGS: ctags-recursive $(HEADERS) $(SOURCES) fficonfig.h.in $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) - tags=; \ - here=`pwd`; \ list='$(SOURCES) $(HEADERS) fficonfig.h.in $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ - $(AWK) ' { files[$$0] = 1; } \ - END { for (i in files) print i; }'`; \ - test -z "$(CTAGS_ARGS)$$tags$$unique" \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ - $$tags $$unique + $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ - && cd $(top_srcdir) \ - && gtags -i $(GTAGS_ARGS) $$here + && $(am__cd) $(top_srcdir) \ + && gtags -i $(GTAGS_ARGS) "$$here" distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) $(am__remove_distdir) - test -d $(distdir) || mkdir $(distdir) + test -d "$(distdir)" || mkdir "$(distdir)" @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ @@ -1277,29 +1378,44 @@ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d "$(distdir)/$$file"; then \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ - cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ + cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ - cp -pR $$d/$$file $(distdir)$$dir || exit 1; \ + cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ - test -f $(distdir)/$$file \ - || cp -p $$d/$$file $(distdir)/$$file \ + test -f "$(distdir)/$$file" \ + || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done - list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ + @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test -d "$(distdir)/$$subdir" \ || $(MKDIR_P) "$(distdir)/$$subdir" \ || exit 1; \ - distdir=`$(am__cd) $(distdir) && pwd`; \ - top_distdir=`$(am__cd) $(top_distdir) && pwd`; \ - (cd $$subdir && \ + fi; \ + done + @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ + if test "$$subdir" = .; then :; else \ + dir1=$$subdir; dir2="$(distdir)/$$subdir"; \ + $(am__relativize); \ + new_distdir=$$reldir; \ + dir1=$$subdir; dir2="$(top_distdir)"; \ + $(am__relativize); \ + new_top_distdir=$$reldir; \ + echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \ + echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \ + ($(am__cd) $$subdir && \ $(MAKE) $(AM_MAKEFLAGS) \ - top_distdir="$$top_distdir" \ - distdir="$$distdir/$$subdir" \ + top_distdir="$$new_top_distdir" \ + distdir="$$new_distdir" \ am__remove_distdir=: \ am__skip_length_check=: \ + am__skip_mode_fix=: \ distdir) \ || exit 1; \ fi; \ @@ -1307,11 +1423,12 @@ $(MAKE) $(AM_MAKEFLAGS) \ top_distdir="$(top_distdir)" distdir="$(distdir)" \ dist-info - -find $(distdir) -type d ! -perm -777 -exec chmod a+rwx {} \; -o \ + -test -n "$(am__skip_mode_fix)" \ + || find "$(distdir)" -type d ! -perm -777 -exec chmod a+rwx {} \; -o \ ! -type d ! -perm -444 -links 1 -exec chmod a+r {} \; -o \ ! -type d ! -perm -400 -exec chmod a+r {} \; -o \ ! -type d ! -perm -444 -exec $(install_sh) -c -m a+r {} {} \; \ - || chmod -R a+r $(distdir) + || chmod -R a+r "$(distdir)" dist-gzip: distdir tardir=$(distdir) && $(am__tar) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz $(am__remove_distdir) @@ -1320,6 +1437,14 @@ tardir=$(distdir) && $(am__tar) | bzip2 -9 -c >$(distdir).tar.bz2 $(am__remove_distdir) +dist-lzma: distdir + tardir=$(distdir) && $(am__tar) | lzma -9 -c >$(distdir).tar.lzma + $(am__remove_distdir) + +dist-xz: distdir + tardir=$(distdir) && $(am__tar) | xz -c >$(distdir).tar.xz + $(am__remove_distdir) + dist-tarZ: distdir tardir=$(distdir) && $(am__tar) | compress -c >$(distdir).tar.Z $(am__remove_distdir) @@ -1346,6 +1471,10 @@ GZIP=$(GZIP_ENV) gunzip -c $(distdir).tar.gz | $(am__untar) ;;\ *.tar.bz2*) \ bunzip2 -c $(distdir).tar.bz2 | $(am__untar) ;;\ + *.tar.lzma*) \ + unlzma -c $(distdir).tar.lzma | $(am__untar) ;;\ + *.tar.xz*) \ + xz -dc $(distdir).tar.xz | $(am__untar) ;;\ *.tar.Z*) \ uncompress -c $(distdir).tar.Z | $(am__untar) ;;\ *.shar.gz*) \ @@ -1357,9 +1486,11 @@ mkdir $(distdir)/_build mkdir $(distdir)/_inst chmod a-w $(distdir) + test -d $(distdir)/_build || exit 0; \ dc_install_base=`$(am__cd) $(distdir)/_inst && pwd | sed -e 's,^[^:\\/]:[\\/],/,'` \ && dc_destdir="$${TMPDIR-/tmp}/am-dc-$$$$/" \ - && cd $(distdir)/_build \ + && am__cwd=`pwd` \ + && $(am__cd) $(distdir)/_build \ && ../configure --srcdir=.. --prefix="$$dc_install_base" \ $(DISTCHECK_CONFIGURE_FLAGS) \ && $(MAKE) $(AM_MAKEFLAGS) \ @@ -1381,13 +1512,15 @@ && rm -rf "$$dc_destdir" \ && $(MAKE) $(AM_MAKEFLAGS) dist \ && rm -rf $(DIST_ARCHIVES) \ - && $(MAKE) $(AM_MAKEFLAGS) distcleancheck + && $(MAKE) $(AM_MAKEFLAGS) distcleancheck \ + && cd "$$am__cwd" \ + || exit 1 $(am__remove_distdir) @(echo "$(distdir) archives ready for distribution: "; \ list='$(DIST_ARCHIVES)'; for i in $$list; do echo $$i; done) | \ sed -e 1h -e 1s/./=/g -e 1p -e 1x -e '$$p' -e '$$x' distuninstallcheck: - @cd $(distuninstallcheck_dir) \ + @$(am__cd) '$(distuninstallcheck_dir)' \ && test `$(distuninstallcheck_listfiles) | wc -l` -le 1 \ || { echo "ERROR: files left after uninstall:" ; \ if test -n "$(DESTDIR)"; then \ @@ -1432,6 +1565,7 @@ distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) -rm -f doc/$(am__dirstamp) -rm -f src/$(DEPDIR)/$(am__dirstamp) -rm -f src/$(am__dirstamp) @@ -1439,6 +1573,8 @@ -rm -f src/alpha/$(am__dirstamp) -rm -f src/arm/$(DEPDIR)/$(am__dirstamp) -rm -f src/arm/$(am__dirstamp) + -rm -f src/avr32/$(DEPDIR)/$(am__dirstamp) + -rm -f src/avr32/$(am__dirstamp) -rm -f src/cris/$(DEPDIR)/$(am__dirstamp) -rm -f src/cris/$(am__dirstamp) -rm -f src/frv/$(DEPDIR)/$(am__dirstamp) @@ -1471,12 +1607,12 @@ @echo "it deletes files that may require special tools to rebuild." clean: clean-recursive -clean-am: clean-generic clean-libLTLIBRARIES clean-libtool \ - clean-noinstLTLIBRARIES mostlyclean-am +clean-am: clean-aminfo clean-generic clean-libLTLIBRARIES \ + clean-libtool clean-noinstLTLIBRARIES mostlyclean-am distclean: distclean-recursive -rm -f $(am__CONFIG_DISTCLEAN_FILES) - -rm -rf src/$(DEPDIR) src/alpha/$(DEPDIR) src/arm/$(DEPDIR) src/cris/$(DEPDIR) src/frv/$(DEPDIR) src/ia64/$(DEPDIR) src/m32r/$(DEPDIR) src/m68k/$(DEPDIR) src/mips/$(DEPDIR) src/pa/$(DEPDIR) src/powerpc/$(DEPDIR) src/s390/$(DEPDIR) src/sh/$(DEPDIR) src/sh64/$(DEPDIR) src/sparc/$(DEPDIR) src/x86/$(DEPDIR) + -rm -rf src/$(DEPDIR) src/alpha/$(DEPDIR) src/arm/$(DEPDIR) src/avr32/$(DEPDIR) src/cris/$(DEPDIR) src/frv/$(DEPDIR) src/ia64/$(DEPDIR) src/m32r/$(DEPDIR) src/m68k/$(DEPDIR) src/mips/$(DEPDIR) src/pa/$(DEPDIR) src/powerpc/$(DEPDIR) src/s390/$(DEPDIR) src/sh/$(DEPDIR) src/sh64/$(DEPDIR) src/sparc/$(DEPDIR) src/x86/$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-hdr distclean-libtool distclean-tags @@ -1500,37 +1636,45 @@ install-dvi-am: $(DVIS) @$(NORMAL_INSTALL) test -z "$(dvidir)" || $(MKDIR_P) "$(DESTDIR)$(dvidir)" - @list='$(DVIS)'; for p in $$list; do \ + @list='$(DVIS)'; test -n "$(dvidir)" || list=; \ + for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ - f=$(am__strip_dir) \ - echo " $(INSTALL_DATA) '$$d$$p' '$(DESTDIR)$(dvidir)/$$f'"; \ - $(INSTALL_DATA) "$$d$$p" "$(DESTDIR)$(dvidir)/$$f"; \ + echo "$$d$$p"; \ + done | $(am__base_list) | \ + while read files; do \ + echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(dvidir)'"; \ + $(INSTALL_DATA) $$files "$(DESTDIR)$(dvidir)" || exit $$?; \ done install-exec-am: install-libLTLIBRARIES install-html-am: $(HTMLS) @$(NORMAL_INSTALL) test -z "$(htmldir)" || $(MKDIR_P) "$(DESTDIR)$(htmldir)" - @list='$(HTMLS)'; for p in $$list; do \ + @list='$(HTMLS)'; list2=; test -n "$(htmldir)" || list=; \ + for p in $$list; do \ if test -f "$$p" || test -d "$$p"; then d=; else d="$(srcdir)/"; fi; \ - f=$(am__strip_dir) \ + $(am__strip_dir) \ if test -d "$$d$$p"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(htmldir)/$$f'"; \ $(MKDIR_P) "$(DESTDIR)$(htmldir)/$$f" || exit 1; \ echo " $(INSTALL_DATA) '$$d$$p'/* '$(DESTDIR)$(htmldir)/$$f'"; \ - $(INSTALL_DATA) "$$d$$p"/* "$(DESTDIR)$(htmldir)/$$f"; \ + $(INSTALL_DATA) "$$d$$p"/* "$(DESTDIR)$(htmldir)/$$f" || exit $$?; \ else \ - echo " $(INSTALL_DATA) '$$d$$p' '$(DESTDIR)$(htmldir)/$$f'"; \ - $(INSTALL_DATA) "$$d$$p" "$(DESTDIR)$(htmldir)/$$f"; \ + list2="$$list2 $$d$$p"; \ fi; \ - done + done; \ + test -z "$$list2" || { echo "$$list2" | $(am__base_list) | \ + while read files; do \ + echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(htmldir)'"; \ + $(INSTALL_DATA) $$files "$(DESTDIR)$(htmldir)" || exit $$?; \ + done; } install-info: install-info-recursive install-info-am: $(INFO_DEPS) @$(NORMAL_INSTALL) test -z "$(infodir)" || $(MKDIR_P) "$(DESTDIR)$(infodir)" @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \ - list='$(INFO_DEPS)'; \ + list='$(INFO_DEPS)'; test -n "$(infodir)" || list=; \ for file in $$list; do \ case $$file in \ $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \ @@ -1538,18 +1682,19 @@ if test -f $$file; then d=.; else d=$(srcdir); fi; \ file_i=`echo "$$file" | sed 's|\.info$$||;s|$$|.i|'`; \ for ifile in $$d/$$file $$d/$$file-[0-9] $$d/$$file-[0-9][0-9] \ - $$d/$$file_i[0-9] $$d/$$file_i[0-9][0-9] ; do \ + $$d/$$file_i[0-9] $$d/$$file_i[0-9][0-9] ; do \ if test -f $$ifile; then \ - relfile=`echo "$$ifile" | sed 's|^.*/||'`; \ - echo " $(INSTALL_DATA) '$$ifile' '$(DESTDIR)$(infodir)/$$relfile'"; \ - $(INSTALL_DATA) "$$ifile" "$(DESTDIR)$(infodir)/$$relfile"; \ + echo "$$ifile"; \ else : ; fi; \ done; \ - done + done | $(am__base_list) | \ + while read files; do \ + echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(infodir)'"; \ + $(INSTALL_DATA) $$files "$(DESTDIR)$(infodir)" || exit $$?; done @$(POST_INSTALL) @if (install-info --version && \ install-info --version 2>&1 | sed 1q | grep -i -v debian) >/dev/null 2>&1; then \ - list='$(INFO_DEPS)'; \ + list='$(INFO_DEPS)'; test -n "$(infodir)" || list=; \ for file in $$list; do \ relfile=`echo "$$file" | sed 's|^.*/||'`; \ echo " install-info --info-dir='$(DESTDIR)$(infodir)' '$(DESTDIR)$(infodir)/$$relfile'";\ @@ -1561,29 +1706,33 @@ install-pdf-am: $(PDFS) @$(NORMAL_INSTALL) test -z "$(pdfdir)" || $(MKDIR_P) "$(DESTDIR)$(pdfdir)" - @list='$(PDFS)'; for p in $$list; do \ + @list='$(PDFS)'; test -n "$(pdfdir)" || list=; \ + for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ - f=$(am__strip_dir) \ - echo " $(INSTALL_DATA) '$$d$$p' '$(DESTDIR)$(pdfdir)/$$f'"; \ - $(INSTALL_DATA) "$$d$$p" "$(DESTDIR)$(pdfdir)/$$f"; \ - done + echo "$$d$$p"; \ + done | $(am__base_list) | \ + while read files; do \ + echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(pdfdir)'"; \ + $(INSTALL_DATA) $$files "$(DESTDIR)$(pdfdir)" || exit $$?; done install-ps: install-ps-recursive install-ps-am: $(PSS) @$(NORMAL_INSTALL) test -z "$(psdir)" || $(MKDIR_P) "$(DESTDIR)$(psdir)" - @list='$(PSS)'; for p in $$list; do \ + @list='$(PSS)'; test -n "$(psdir)" || list=; \ + for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ - f=$(am__strip_dir) \ - echo " $(INSTALL_DATA) '$$d$$p' '$(DESTDIR)$(psdir)/$$f'"; \ - $(INSTALL_DATA) "$$d$$p" "$(DESTDIR)$(psdir)/$$f"; \ - done + echo "$$d$$p"; \ + done | $(am__base_list) | \ + while read files; do \ + echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(psdir)'"; \ + $(INSTALL_DATA) $$files "$(DESTDIR)$(psdir)" || exit $$?; done installcheck-am: maintainer-clean: maintainer-clean-recursive -rm -f $(am__CONFIG_DISTCLEAN_FILES) -rm -rf $(top_srcdir)/autom4te.cache - -rm -rf src/$(DEPDIR) src/alpha/$(DEPDIR) src/arm/$(DEPDIR) src/cris/$(DEPDIR) src/frv/$(DEPDIR) src/ia64/$(DEPDIR) src/m32r/$(DEPDIR) src/m68k/$(DEPDIR) src/mips/$(DEPDIR) src/pa/$(DEPDIR) src/powerpc/$(DEPDIR) src/s390/$(DEPDIR) src/sh/$(DEPDIR) src/sh64/$(DEPDIR) src/sparc/$(DEPDIR) src/x86/$(DEPDIR) + -rm -rf src/$(DEPDIR) src/alpha/$(DEPDIR) src/arm/$(DEPDIR) src/avr32/$(DEPDIR) src/cris/$(DEPDIR) src/frv/$(DEPDIR) src/ia64/$(DEPDIR) src/m32r/$(DEPDIR) src/m68k/$(DEPDIR) src/mips/$(DEPDIR) src/pa/$(DEPDIR) src/powerpc/$(DEPDIR) src/s390/$(DEPDIR) src/sh/$(DEPDIR) src/sh64/$(DEPDIR) src/sparc/$(DEPDIR) src/x86/$(DEPDIR) -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-aminfo \ maintainer-clean-generic maintainer-clean-vti @@ -1605,36 +1754,38 @@ uninstall-libLTLIBRARIES uninstall-pdf-am \ uninstall-pkgconfigDATA uninstall-ps-am -.MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) install-am \ - install-strip +.MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) all \ + ctags-recursive install-am install-strip tags-recursive .PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \ - all all-am am--refresh check check-am clean clean-generic \ - clean-libLTLIBRARIES clean-libtool clean-noinstLTLIBRARIES \ - ctags ctags-recursive dist dist-all dist-bzip2 dist-gzip \ - dist-info dist-shar dist-tarZ dist-zip distcheck distclean \ - distclean-compile distclean-generic distclean-hdr \ - distclean-libtool distclean-tags distcleancheck distdir \ - distuninstallcheck dvi dvi-am html html-am info info-am \ - install install-am install-data install-data-am install-dvi \ - install-dvi-am install-exec install-exec-am install-html \ - install-html-am install-info install-info-am \ - install-libLTLIBRARIES install-man install-pdf install-pdf-am \ - install-pkgconfigDATA install-ps install-ps-am install-strip \ - installcheck installcheck-am installdirs installdirs-am \ - maintainer-clean maintainer-clean-aminfo \ - maintainer-clean-generic maintainer-clean-vti mostlyclean \ - mostlyclean-aminfo mostlyclean-compile mostlyclean-generic \ - mostlyclean-libtool mostlyclean-vti pdf pdf-am ps ps-am tags \ - tags-recursive uninstall uninstall-am uninstall-dvi-am \ - uninstall-html-am uninstall-info-am uninstall-libLTLIBRARIES \ - uninstall-pdf-am uninstall-pkgconfigDATA uninstall-ps-am + all all-am am--refresh check check-am clean clean-aminfo \ + clean-generic clean-libLTLIBRARIES clean-libtool \ + clean-noinstLTLIBRARIES ctags ctags-recursive dist dist-all \ + dist-bzip2 dist-gzip dist-info dist-lzma dist-shar dist-tarZ \ + dist-xz dist-zip distcheck distclean distclean-compile \ + distclean-generic distclean-hdr distclean-libtool \ + distclean-tags distcleancheck distdir distuninstallcheck dvi \ + dvi-am html html-am info info-am install install-am \ + install-data install-data-am install-dvi install-dvi-am \ + install-exec install-exec-am install-html install-html-am \ + install-info install-info-am install-libLTLIBRARIES \ + install-man install-pdf install-pdf-am install-pkgconfigDATA \ + install-ps install-ps-am install-strip installcheck \ + installcheck-am installdirs installdirs-am maintainer-clean \ + maintainer-clean-aminfo maintainer-clean-generic \ + maintainer-clean-vti mostlyclean mostlyclean-aminfo \ + mostlyclean-compile mostlyclean-generic mostlyclean-libtool \ + mostlyclean-vti pdf pdf-am ps ps-am tags tags-recursive \ + uninstall uninstall-am uninstall-dvi-am uninstall-html-am \ + uninstall-info-am uninstall-libLTLIBRARIES uninstall-pdf-am \ + uninstall-pkgconfigDATA uninstall-ps-am # No install-html or install-pdf support in automake yet .PHONY: install-html install-pdf install-html: install-pdf: + # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: Modified: python/branches/py3k/Modules/_ctypes/libffi/README ============================================================================== --- python/branches/py3k/Modules/_ctypes/libffi/README (original) +++ python/branches/py3k/Modules/_ctypes/libffi/README Mon Mar 15 14:25:28 2010 @@ -1,7 +1,7 @@ Status ====== -libffi-3.0.5 was released on April 3, 2008. Check the libffi web +libffi-3.0.9 was released on December 31, 2009. Check the libffi web page for updates: . @@ -9,27 +9,27 @@ =============== Compilers for high level languages generate code that follow certain -conventions. These conventions are necessary, in part, for separate -compilation to work. One such convention is the "calling convention". -The "calling convention" is a set of assumptions made by the compiler -about where function arguments will be found on entry to a function. -A "calling convention" also specifies where the return value for a -function is found. +conventions. These conventions are necessary, in part, for separate +compilation to work. One such convention is the "calling +convention". The "calling convention" is essentially a set of +assumptions made by the compiler about where function arguments will +be found on entry to a function. A "calling convention" also specifies +where the return value for a function is found. Some programs may not know at the time of compilation what arguments -are to be passed to a function. For instance, an interpreter may be +are to be passed to a function. For instance, an interpreter may be told at run-time about the number and types of arguments used to call -a given function. Libffi can be used in such programs to provide a +a given function. Libffi can be used in such programs to provide a bridge from the interpreter program to compiled code. The libffi library provides a portable, high level programming -interface to various calling conventions. This allows a programmer to +interface to various calling conventions. This allows a programmer to call any function specified by a call interface description at run -time. +time. FFI stands for Foreign Function Interface. A foreign function interface is the popular name for the interface that allows code -written in one language to call code written in another language. The +written in one language to call code written in another language. The libffi library really only provides the lowest, machine dependent layer of a fully featured foreign function interface. A layer must exist above libffi that handles type conversions for values passed @@ -39,36 +39,56 @@ Supported Platforms =================== -Libffi has been ported to many different platforms, although this -release was only tested on: +Libffi has been ported to many different platforms. +For specific configuration details and testing status, please +refer to the wiki page here: + + http://www.moxielogic.org/wiki/index.php?title=Libffi_3.0.9 + +At the time of release, the following basic configurations have been +tested: + +|--------------+------------------| +| Architecture | Operating System | +|--------------+------------------| +| Alpha | Linux | +| ARM | Linux | +| AVR32 | Linux | +| HPPA | HPUX | +| IA-64 | Linux | +| MIPS | IRIX | +| MIPS | Linux | +| MIPS64 | Linux | +| PowerPC | Linux | +| PowerPC | Mac OSX | +| PowerPC | FreeBSD | +| PowerPC64 | Linux | +| S390 | Linux | +| S390X | Linux | +| SPARC | Linux | +| SPARC | Solaris | +| SPARC64 | Linux | +| SPARC64 | FreeBSD | +| X86 | FreeBSD | +| X86 | kFreeBSD | +| X86 | Linux | +| X86 | Mac OSX | +| X86 | OpenBSD | +| X86 | Solaris | +| X86 | Windows/Cygwin | +| X86 | Windows/MingW | +| X86-64 | FreeBSD | +| X86-64 | Linux | +| X86-64 | OpenBSD | +|--------------+------------------| - arm oabi linux - arm eabi linux - hppa linux - mips o32 linux (little endian) - powerpc darwin - powerpc64 linux - sparc solaris - sparc64 solaris - x86 cygwin - x86 darwin - x86 freebsd - x86 linux - x86 openbsd - x86-64 darwin - x86-64 linux - x86-64 OS X - x86-64 freebsd - Please send additional platform test results to -libffi-discuss at sourceware.org. +libffi-discuss at sourceware.org and feel free to update the wiki page +above. Installing libffi ================= -[Note: before actually performing any of these installation steps, - you may wish to read the "Platform Specific Notes" below.] - First you must configure the distribution for your particular system. Go to the directory you wish to build libffi in and run the "configure" program found in the root directory of the libffi source @@ -98,66 +118,29 @@ To install the library and header files, type "make install". -Platform Specific Notes -======================= - - MIPS - Irix 5.3 & 6.x - --------------------- - -Irix 6.2 and better supports three different calling conventions: o32, -n32 and n64. Currently, libffi only supports both o32 and n32 under -Irix 6.x, but only o32 under Irix 5.3. Libffi will automatically be -configured for whichever calling convention it was built for. - -By default, the configure script will try to build libffi with the GNU -development tools. To build libffi with the SGI development tools, set -the environment variable CC to either "cc -32" or "cc -n32" before -running configure under Irix 6.x (depending on whether you want an o32 -or n32 library), or just "cc" for Irix 5.3. - -With the n32 calling convention, when returning structures smaller -than 16 bytes, be sure to provide an RVALUE that is 8 byte aligned. -Here's one way of forcing this: - - double struct_storage[2]; - my_small_struct *s = (my_small_struct *) struct_storage; - /* Use s for RVALUE */ - -If you don't do this you are liable to get spurious bus errors. - -"long long" values are not supported yet. - -You must use GNU Make to build libffi on SGI platforms. - - - PowerPC System V ABI - -------------------- - -There are two `System V ABI's which libffi implements for PowerPC. -They differ only in how small structures are returned from functions. - -In the FFI_SYSV version, structures that are 8 bytes or smaller are -returned in registers. This is what GCC does when it is configured -for solaris, and is what the System V ABI I have (dated September -1995) says. - -In the FFI_GCC_SYSV version, all structures are returned the same way: -by passing a pointer as the first argument to the function. This is -what GCC does when it is configured for linux or a generic sysv -target. - -EGCS 1.0.1 (and probably other versions of EGCS/GCC) also has a -inconsistency with the SysV ABI: When a procedure is called with many -floating-point arguments, some of them get put on the stack. They are -all supposed to be stored in double-precision format, even if they are -only single-precision, but EGCS stores single-precision arguments as -single-precision anyway. This causes one test to fail (the `many -arguments' test). - - History ======= +See the ChangeLog files for details. + +3.0.9 Dec-31-09 + Add AVR32 and win64 ports. Add ARM softfp support. + Many fixes for AIX, Solaris, HP-UX, *BSD. + Several PowerPC and x86-64 bug fixes. + Build DLL for windows. + +3.0.8 Dec-19-08 + Add *BSD, BeOS, and PA-Linux support. + +3.0.7 Nov-11-08 + Fix for ppc FreeBSD. + (thanks to Andreas Tobler) + +3.0.6 Jul-17-08 + Fix for closures on sh. + Mark the sh/sh64 stack as non-executable. + (both thanks to Kaz Kojima) + 3.0.5 Apr-3-08 Fix libffi.pc file. Fix #define ARM for IcedTea users. Modified: python/branches/py3k/Modules/_ctypes/libffi/aclocal.m4 ============================================================================== --- python/branches/py3k/Modules/_ctypes/libffi/aclocal.m4 (original) +++ python/branches/py3k/Modules/_ctypes/libffi/aclocal.m4 Mon Mar 15 14:25:28 2010 @@ -1,7 +1,7 @@ -# generated automatically by aclocal 1.10 -*- Autoconf -*- +# generated automatically by aclocal 1.11.1 -*- Autoconf -*- # Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, -# 2005, 2006 Free Software Foundation, Inc. +# 2005, 2006, 2007, 2008, 2009 Free Software Foundation, Inc. # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. @@ -11,6580 +11,15 @@ # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. -m4_if(m4_PACKAGE_VERSION, [2.61],, -[m4_fatal([this file was generated for autoconf 2.61. -You have another version of autoconf. If you want to use that, -you should regenerate the build system entirely.], [63])]) +m4_ifndef([AC_AUTOCONF_VERSION], + [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl +m4_if(m4_defn([AC_AUTOCONF_VERSION]), [2.65],, +[m4_warning([this file was generated for autoconf 2.65. +You have another version of autoconf. It may work, but is not guaranteed to. +If you have problems, you may need to regenerate the build system entirely. +To do so, use the procedure documented by the package, typically `autoreconf'.])]) -# libtool.m4 - Configure libtool for the host system. -*-Autoconf-*- - -# serial 51 AC_PROG_LIBTOOL - - -# AC_PROVIDE_IFELSE(MACRO-NAME, IF-PROVIDED, IF-NOT-PROVIDED) -# ----------------------------------------------------------- -# If this macro is not defined by Autoconf, define it here. -m4_ifdef([AC_PROVIDE_IFELSE], - [], - [m4_define([AC_PROVIDE_IFELSE], - [m4_ifdef([AC_PROVIDE_$1], - [$2], [$3])])]) - - -# AC_PROG_LIBTOOL -# --------------- -AC_DEFUN([AC_PROG_LIBTOOL], -[AC_REQUIRE([_AC_PROG_LIBTOOL])dnl -dnl If AC_PROG_CXX has already been expanded, run AC_LIBTOOL_CXX -dnl immediately, otherwise, hook it in at the end of AC_PROG_CXX. - AC_PROVIDE_IFELSE([AC_PROG_CXX], - [AC_LIBTOOL_CXX], - [define([AC_PROG_CXX], defn([AC_PROG_CXX])[AC_LIBTOOL_CXX - ])]) -dnl And a similar setup for Fortran 77 support - AC_PROVIDE_IFELSE([AC_PROG_F77], - [AC_LIBTOOL_F77], - [define([AC_PROG_F77], defn([AC_PROG_F77])[AC_LIBTOOL_F77 -])]) - -dnl Quote A][M_PROG_GCJ so that aclocal doesn't bring it in needlessly. -dnl If either AC_PROG_GCJ or A][M_PROG_GCJ have already been expanded, run -dnl AC_LIBTOOL_GCJ immediately, otherwise, hook it in at the end of both. - AC_PROVIDE_IFELSE([AC_PROG_GCJ], - [AC_LIBTOOL_GCJ], - [AC_PROVIDE_IFELSE([A][M_PROG_GCJ], - [AC_LIBTOOL_GCJ], - [AC_PROVIDE_IFELSE([LT_AC_PROG_GCJ], - [AC_LIBTOOL_GCJ], - [ifdef([AC_PROG_GCJ], - [define([AC_PROG_GCJ], defn([AC_PROG_GCJ])[AC_LIBTOOL_GCJ])]) - ifdef([A][M_PROG_GCJ], - [define([A][M_PROG_GCJ], defn([A][M_PROG_GCJ])[AC_LIBTOOL_GCJ])]) - ifdef([LT_AC_PROG_GCJ], - [define([LT_AC_PROG_GCJ], - defn([LT_AC_PROG_GCJ])[AC_LIBTOOL_GCJ])])])]) -])])# AC_PROG_LIBTOOL - - -# _AC_PROG_LIBTOOL -# ---------------- -AC_DEFUN([_AC_PROG_LIBTOOL], -[AC_REQUIRE([AC_LIBTOOL_SETUP])dnl -AC_BEFORE([$0],[AC_LIBTOOL_CXX])dnl -AC_BEFORE([$0],[AC_LIBTOOL_F77])dnl -AC_BEFORE([$0],[AC_LIBTOOL_GCJ])dnl - -# This can be used to rebuild libtool when needed -LIBTOOL_DEPS="$ac_aux_dir/ltmain.sh" - -# Always use our own libtool. -LIBTOOL='$(SHELL) $(top_builddir)/libtool' -AC_SUBST(LIBTOOL)dnl - -# Prevent multiple expansion -define([AC_PROG_LIBTOOL], []) -])# _AC_PROG_LIBTOOL - - -# AC_LIBTOOL_SETUP -# ---------------- -AC_DEFUN([AC_LIBTOOL_SETUP], -[AC_PREREQ(2.50)dnl -AC_REQUIRE([AC_ENABLE_SHARED])dnl -AC_REQUIRE([AC_ENABLE_STATIC])dnl -AC_REQUIRE([AC_ENABLE_FAST_INSTALL])dnl -AC_REQUIRE([AC_CANONICAL_HOST])dnl -AC_REQUIRE([AC_CANONICAL_BUILD])dnl -AC_REQUIRE([AC_PROG_CC])dnl -AC_REQUIRE([AC_PROG_LD])dnl -AC_REQUIRE([AC_PROG_LD_RELOAD_FLAG])dnl -AC_REQUIRE([AC_PROG_NM])dnl - -AC_REQUIRE([AC_PROG_LN_S])dnl -AC_REQUIRE([AC_DEPLIBS_CHECK_METHOD])dnl -# Autoconf 2.13's AC_OBJEXT and AC_EXEEXT macros only works for C compilers! -AC_REQUIRE([AC_OBJEXT])dnl -AC_REQUIRE([AC_EXEEXT])dnl -dnl - -AC_LIBTOOL_SYS_MAX_CMD_LEN -AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE -AC_LIBTOOL_OBJDIR - -AC_REQUIRE([_LT_AC_SYS_COMPILER])dnl -_LT_AC_PROG_ECHO_BACKSLASH - -case $host_os in -aix3*) - # AIX sometimes has problems with the GCC collect2 program. For some - # reason, if we set the COLLECT_NAMES environment variable, the problems - # vanish in a puff of smoke. - if test "X${COLLECT_NAMES+set}" != Xset; then - COLLECT_NAMES= - export COLLECT_NAMES - fi - ;; -esac - -# Sed substitution that helps us do robust quoting. It backslashifies -# metacharacters that are still active within double-quoted strings. -Xsed='sed -e 1s/^X//' -[sed_quote_subst='s/\([\\"\\`$\\\\]\)/\\\1/g'] - -# Same as above, but do not quote variable references. -[double_quote_subst='s/\([\\"\\`\\\\]\)/\\\1/g'] - -# Sed substitution to delay expansion of an escaped shell variable in a -# double_quote_subst'ed string. -delay_variable_subst='s/\\\\\\\\\\\$/\\\\\\$/g' - -# Sed substitution to avoid accidental globbing in evaled expressions -no_glob_subst='s/\*/\\\*/g' - -# Constants: -rm="rm -f" - -# Global variables: -default_ofile=libtool -can_build_shared=yes - -# All known linkers require a `.a' archive for static linking (except MSVC, -# which needs '.lib'). -libext=a -ltmain="$ac_aux_dir/ltmain.sh" -ofile="$default_ofile" -with_gnu_ld="$lt_cv_prog_gnu_ld" - -AC_CHECK_TOOL(AR, ar, false) -AC_CHECK_TOOL(RANLIB, ranlib, :) -AC_CHECK_TOOL(STRIP, strip, :) - -old_CC="$CC" -old_CFLAGS="$CFLAGS" - -# Set sane defaults for various variables -test -z "$AR" && AR=ar -test -z "$AR_FLAGS" && AR_FLAGS=cru -test -z "$AS" && AS=as -test -z "$CC" && CC=cc -test -z "$LTCC" && LTCC=$CC -test -z "$LTCFLAGS" && LTCFLAGS=$CFLAGS -test -z "$DLLTOOL" && DLLTOOL=dlltool -test -z "$LD" && LD=ld -test -z "$LN_S" && LN_S="ln -s" -test -z "$MAGIC_CMD" && MAGIC_CMD=file -test -z "$NM" && NM=nm -test -z "$SED" && SED=sed -test -z "$OBJDUMP" && OBJDUMP=objdump -test -z "$RANLIB" && RANLIB=: -test -z "$STRIP" && STRIP=: -test -z "$ac_objext" && ac_objext=o - -# Determine commands to create old-style static archives. -old_archive_cmds='$AR $AR_FLAGS $oldlib$oldobjs' -old_postinstall_cmds='chmod 644 $oldlib' -old_postuninstall_cmds= - -if test -n "$RANLIB"; then - case $host_os in - openbsd*) - old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB -t \$oldlib" - ;; - *) - old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB \$oldlib" - ;; - esac - old_archive_cmds="$old_archive_cmds~\$RANLIB \$oldlib" -fi - -_LT_CC_BASENAME([$compiler]) - -# Only perform the check for file, if the check method requires it -case $deplibs_check_method in -file_magic*) - if test "$file_magic_cmd" = '$MAGIC_CMD'; then - AC_PATH_MAGIC - fi - ;; -esac - -AC_PROVIDE_IFELSE([AC_LIBTOOL_DLOPEN], enable_dlopen=yes, enable_dlopen=no) -AC_PROVIDE_IFELSE([AC_LIBTOOL_WIN32_DLL], -enable_win32_dll=yes, enable_win32_dll=no) - -AC_ARG_ENABLE([libtool-lock], - [AC_HELP_STRING([--disable-libtool-lock], - [avoid locking (might break parallel builds)])]) -test "x$enable_libtool_lock" != xno && enable_libtool_lock=yes - -AC_ARG_WITH([pic], - [AC_HELP_STRING([--with-pic], - [try to use only PIC/non-PIC objects @<:@default=use both@:>@])], - [pic_mode="$withval"], - [pic_mode=default]) -test -z "$pic_mode" && pic_mode=default - -# Use C for the default configuration in the libtool script -tagname= -AC_LIBTOOL_LANG_C_CONFIG -_LT_AC_TAGCONFIG -])# AC_LIBTOOL_SETUP - - -# _LT_AC_SYS_COMPILER -# ------------------- -AC_DEFUN([_LT_AC_SYS_COMPILER], -[AC_REQUIRE([AC_PROG_CC])dnl - -# If no C compiler was specified, use CC. -LTCC=${LTCC-"$CC"} - -# If no C compiler flags were specified, use CFLAGS. -LTCFLAGS=${LTCFLAGS-"$CFLAGS"} - -# Allow CC to be a program name with arguments. -compiler=$CC -])# _LT_AC_SYS_COMPILER - - -# _LT_CC_BASENAME(CC) -# ------------------- -# Calculate cc_basename. Skip known compiler wrappers and cross-prefix. -AC_DEFUN([_LT_CC_BASENAME], -[for cc_temp in $1""; do - case $cc_temp in - compile | *[[\\/]]compile | ccache | *[[\\/]]ccache ) ;; - distcc | *[[\\/]]distcc | purify | *[[\\/]]purify ) ;; - \-*) ;; - *) break;; - esac -done -cc_basename=`$echo "X$cc_temp" | $Xsed -e 's%.*/%%' -e "s%^$host_alias-%%"` -]) - - -# _LT_COMPILER_BOILERPLATE -# ------------------------ -# Check for compiler boilerplate output or warnings with -# the simple compiler test code. -AC_DEFUN([_LT_COMPILER_BOILERPLATE], -[AC_REQUIRE([LT_AC_PROG_SED])dnl -ac_outfile=conftest.$ac_objext -echo "$lt_simple_compile_test_code" >conftest.$ac_ext -eval "$ac_compile" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err -_lt_compiler_boilerplate=`cat conftest.err` -$rm conftest* -])# _LT_COMPILER_BOILERPLATE - - -# _LT_LINKER_BOILERPLATE -# ---------------------- -# Check for linker boilerplate output or warnings with -# the simple link test code. -AC_DEFUN([_LT_LINKER_BOILERPLATE], -[AC_REQUIRE([LT_AC_PROG_SED])dnl -ac_outfile=conftest.$ac_objext -echo "$lt_simple_link_test_code" >conftest.$ac_ext -eval "$ac_link" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err -_lt_linker_boilerplate=`cat conftest.err` -$rm conftest* -])# _LT_LINKER_BOILERPLATE - - -# _LT_AC_SYS_LIBPATH_AIX -# ---------------------- -# Links a minimal program and checks the executable -# for the system default hardcoded library path. In most cases, -# this is /usr/lib:/lib, but when the MPI compilers are used -# the location of the communication and MPI libs are included too. -# If we don't find anything, use the default library path according -# to the aix ld manual. -AC_DEFUN([_LT_AC_SYS_LIBPATH_AIX], -[AC_REQUIRE([LT_AC_PROG_SED])dnl -AC_LINK_IFELSE(AC_LANG_PROGRAM,[ -lt_aix_libpath_sed=' - /Import File Strings/,/^$/ { - /^0/ { - s/^0 *\(.*\)$/\1/ - p - } - }' -aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` -# Check for a 64-bit object if we didn't find anything. -if test -z "$aix_libpath"; then - aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` -fi],[]) -if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi -])# _LT_AC_SYS_LIBPATH_AIX - - -# _LT_AC_SHELL_INIT(ARG) -# ---------------------- -AC_DEFUN([_LT_AC_SHELL_INIT], -[ifdef([AC_DIVERSION_NOTICE], - [AC_DIVERT_PUSH(AC_DIVERSION_NOTICE)], - [AC_DIVERT_PUSH(NOTICE)]) -$1 -AC_DIVERT_POP -])# _LT_AC_SHELL_INIT - - -# _LT_AC_PROG_ECHO_BACKSLASH -# -------------------------- -# Add some code to the start of the generated configure script which -# will find an echo command which doesn't interpret backslashes. -AC_DEFUN([_LT_AC_PROG_ECHO_BACKSLASH], -[_LT_AC_SHELL_INIT([ -# Check that we are running under the correct shell. -SHELL=${CONFIG_SHELL-/bin/sh} - -case X$ECHO in -X*--fallback-echo) - # Remove one level of quotation (which was required for Make). - ECHO=`echo "$ECHO" | sed 's,\\\\\[$]\\[$]0,'[$]0','` - ;; -esac - -echo=${ECHO-echo} -if test "X[$]1" = X--no-reexec; then - # Discard the --no-reexec flag, and continue. - shift -elif test "X[$]1" = X--fallback-echo; then - # Avoid inline document here, it may be left over - : -elif test "X`($echo '\t') 2>/dev/null`" = 'X\t' ; then - # Yippee, $echo works! - : -else - # Restart under the correct shell. - exec $SHELL "[$]0" --no-reexec ${1+"[$]@"} -fi - -if test "X[$]1" = X--fallback-echo; then - # used as fallback echo - shift - cat </dev/null 2>&1 && unset CDPATH - -if test -z "$ECHO"; then -if test "X${echo_test_string+set}" != Xset; then -# find a string as large as possible, as long as the shell can cope with it - for cmd in 'sed 50q "[$]0"' 'sed 20q "[$]0"' 'sed 10q "[$]0"' 'sed 2q "[$]0"' 'echo test'; do - # expected sizes: less than 2Kb, 1Kb, 512 bytes, 16 bytes, ... - if (echo_test_string=`eval $cmd`) 2>/dev/null && - echo_test_string=`eval $cmd` && - (test "X$echo_test_string" = "X$echo_test_string") 2>/dev/null - then - break - fi - done -fi - -if test "X`($echo '\t') 2>/dev/null`" = 'X\t' && - echo_testing_string=`($echo "$echo_test_string") 2>/dev/null` && - test "X$echo_testing_string" = "X$echo_test_string"; then - : -else - # The Solaris, AIX, and Digital Unix default echo programs unquote - # backslashes. This makes it impossible to quote backslashes using - # echo "$something" | sed 's/\\/\\\\/g' - # - # So, first we look for a working echo in the user's PATH. - - lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR - for dir in $PATH /usr/ucb; do - IFS="$lt_save_ifs" - if (test -f $dir/echo || test -f $dir/echo$ac_exeext) && - test "X`($dir/echo '\t') 2>/dev/null`" = 'X\t' && - echo_testing_string=`($dir/echo "$echo_test_string") 2>/dev/null` && - test "X$echo_testing_string" = "X$echo_test_string"; then - echo="$dir/echo" - break - fi - done - IFS="$lt_save_ifs" - - if test "X$echo" = Xecho; then - # We didn't find a better echo, so look for alternatives. - if test "X`(print -r '\t') 2>/dev/null`" = 'X\t' && - echo_testing_string=`(print -r "$echo_test_string") 2>/dev/null` && - test "X$echo_testing_string" = "X$echo_test_string"; then - # This shell has a builtin print -r that does the trick. - echo='print -r' - elif (test -f /bin/ksh || test -f /bin/ksh$ac_exeext) && - test "X$CONFIG_SHELL" != X/bin/ksh; then - # If we have ksh, try running configure again with it. - ORIGINAL_CONFIG_SHELL=${CONFIG_SHELL-/bin/sh} - export ORIGINAL_CONFIG_SHELL - CONFIG_SHELL=/bin/ksh - export CONFIG_SHELL - exec $CONFIG_SHELL "[$]0" --no-reexec ${1+"[$]@"} - else - # Try using printf. - echo='printf %s\n' - if test "X`($echo '\t') 2>/dev/null`" = 'X\t' && - echo_testing_string=`($echo "$echo_test_string") 2>/dev/null` && - test "X$echo_testing_string" = "X$echo_test_string"; then - # Cool, printf works - : - elif echo_testing_string=`($ORIGINAL_CONFIG_SHELL "[$]0" --fallback-echo '\t') 2>/dev/null` && - test "X$echo_testing_string" = 'X\t' && - echo_testing_string=`($ORIGINAL_CONFIG_SHELL "[$]0" --fallback-echo "$echo_test_string") 2>/dev/null` && - test "X$echo_testing_string" = "X$echo_test_string"; then - CONFIG_SHELL=$ORIGINAL_CONFIG_SHELL - export CONFIG_SHELL - SHELL="$CONFIG_SHELL" - export SHELL - echo="$CONFIG_SHELL [$]0 --fallback-echo" - elif echo_testing_string=`($CONFIG_SHELL "[$]0" --fallback-echo '\t') 2>/dev/null` && - test "X$echo_testing_string" = 'X\t' && - echo_testing_string=`($CONFIG_SHELL "[$]0" --fallback-echo "$echo_test_string") 2>/dev/null` && - test "X$echo_testing_string" = "X$echo_test_string"; then - echo="$CONFIG_SHELL [$]0 --fallback-echo" - else - # maybe with a smaller string... - prev=: - - for cmd in 'echo test' 'sed 2q "[$]0"' 'sed 10q "[$]0"' 'sed 20q "[$]0"' 'sed 50q "[$]0"'; do - if (test "X$echo_test_string" = "X`eval $cmd`") 2>/dev/null - then - break - fi - prev="$cmd" - done - - if test "$prev" != 'sed 50q "[$]0"'; then - echo_test_string=`eval $prev` - export echo_test_string - exec ${ORIGINAL_CONFIG_SHELL-${CONFIG_SHELL-/bin/sh}} "[$]0" ${1+"[$]@"} - else - # Oops. We lost completely, so just stick with echo. - echo=echo - fi - fi - fi - fi -fi -fi - -# Copy echo and quote the copy suitably for passing to libtool from -# the Makefile, instead of quoting the original, which is used later. -ECHO=$echo -if test "X$ECHO" = "X$CONFIG_SHELL [$]0 --fallback-echo"; then - ECHO="$CONFIG_SHELL \\\$\[$]0 --fallback-echo" -fi - -AC_SUBST(ECHO) -])])# _LT_AC_PROG_ECHO_BACKSLASH - - -# _LT_AC_LOCK -# ----------- -AC_DEFUN([_LT_AC_LOCK], -[AC_ARG_ENABLE([libtool-lock], - [AC_HELP_STRING([--disable-libtool-lock], - [avoid locking (might break parallel builds)])]) -test "x$enable_libtool_lock" != xno && enable_libtool_lock=yes - -# Some flags need to be propagated to the compiler or linker for good -# libtool support. -case $host in -ia64-*-hpux*) - # Find out which ABI we are using. - echo 'int i;' > conftest.$ac_ext - if AC_TRY_EVAL(ac_compile); then - case `/usr/bin/file conftest.$ac_objext` in - *ELF-32*) - HPUX_IA64_MODE="32" - ;; - *ELF-64*) - HPUX_IA64_MODE="64" - ;; - esac - fi - rm -rf conftest* - ;; -*-*-irix6*) - # Find out which ABI we are using. - echo '[#]line __oline__ "configure"' > conftest.$ac_ext - if AC_TRY_EVAL(ac_compile); then - if test "$lt_cv_prog_gnu_ld" = yes; then - case `/usr/bin/file conftest.$ac_objext` in - *32-bit*) - LD="${LD-ld} -melf32bsmip" - ;; - *N32*) - LD="${LD-ld} -melf32bmipn32" - ;; - *64-bit*) - LD="${LD-ld} -melf64bmip" - ;; - esac - else - case `/usr/bin/file conftest.$ac_objext` in - *32-bit*) - LD="${LD-ld} -32" - ;; - *N32*) - LD="${LD-ld} -n32" - ;; - *64-bit*) - LD="${LD-ld} -64" - ;; - esac - fi - fi - rm -rf conftest* - ;; - -x86_64-*kfreebsd*-gnu|x86_64-*linux*|ppc*-*linux*|powerpc*-*linux*| \ -s390*-*linux*|sparc*-*linux*) - # Find out which ABI we are using. - echo 'int i;' > conftest.$ac_ext - if AC_TRY_EVAL(ac_compile); then - case `/usr/bin/file conftest.o` in - *32-bit*) - case $host in - x86_64-*kfreebsd*-gnu) - LD="${LD-ld} -m elf_i386_fbsd" - ;; - x86_64-*linux*) - LD="${LD-ld} -m elf_i386" - ;; - ppc64-*linux*|powerpc64-*linux*) - LD="${LD-ld} -m elf32ppclinux" - ;; - s390x-*linux*) - LD="${LD-ld} -m elf_s390" - ;; - sparc64-*linux*) - LD="${LD-ld} -m elf32_sparc" - ;; - esac - ;; - *64-bit*) - libsuff=64 - case $host in - x86_64-*kfreebsd*-gnu) - LD="${LD-ld} -m elf_x86_64_fbsd" - ;; - x86_64-*linux*) - LD="${LD-ld} -m elf_x86_64" - ;; - ppc*-*linux*|powerpc*-*linux*) - LD="${LD-ld} -m elf64ppc" - ;; - s390*-*linux*) - LD="${LD-ld} -m elf64_s390" - ;; - sparc*-*linux*) - LD="${LD-ld} -m elf64_sparc" - ;; - esac - ;; - esac - fi - rm -rf conftest* - ;; - -*-*-sco3.2v5*) - # On SCO OpenServer 5, we need -belf to get full-featured binaries. - SAVE_CFLAGS="$CFLAGS" - CFLAGS="$CFLAGS -belf" - AC_CACHE_CHECK([whether the C compiler needs -belf], lt_cv_cc_needs_belf, - [AC_LANG_PUSH(C) - AC_TRY_LINK([],[],[lt_cv_cc_needs_belf=yes],[lt_cv_cc_needs_belf=no]) - AC_LANG_POP]) - if test x"$lt_cv_cc_needs_belf" != x"yes"; then - # this is probably gcc 2.8.0, egcs 1.0 or newer; no need for -belf - CFLAGS="$SAVE_CFLAGS" - fi - ;; -sparc*-*solaris*) - # Find out which ABI we are using. - echo 'int i;' > conftest.$ac_ext - if AC_TRY_EVAL(ac_compile); then - case `/usr/bin/file conftest.o` in - *64-bit*) - case $lt_cv_prog_gnu_ld in - yes*) LD="${LD-ld} -m elf64_sparc" ;; - *) LD="${LD-ld} -64" ;; - esac - ;; - esac - fi - rm -rf conftest* - ;; - -AC_PROVIDE_IFELSE([AC_LIBTOOL_WIN32_DLL], -[*-*-cygwin* | *-*-mingw* | *-*-pw32*) - AC_CHECK_TOOL(DLLTOOL, dlltool, false) - AC_CHECK_TOOL(AS, as, false) - AC_CHECK_TOOL(OBJDUMP, objdump, false) - ;; - ]) -esac - -need_locks="$enable_libtool_lock" - -])# _LT_AC_LOCK - - -# AC_LIBTOOL_COMPILER_OPTION(MESSAGE, VARIABLE-NAME, FLAGS, -# [OUTPUT-FILE], [ACTION-SUCCESS], [ACTION-FAILURE]) -# ---------------------------------------------------------------- -# Check whether the given compiler option works -AC_DEFUN([AC_LIBTOOL_COMPILER_OPTION], -[AC_REQUIRE([LT_AC_PROG_SED]) -AC_CACHE_CHECK([$1], [$2], - [$2=no - ifelse([$4], , [ac_outfile=conftest.$ac_objext], [ac_outfile=$4]) - echo "$lt_simple_compile_test_code" > conftest.$ac_ext - lt_compiler_flag="$3" - # Insert the option either (1) after the last *FLAGS variable, or - # (2) before a word containing "conftest.", or (3) at the end. - # Note that $ac_compile itself does not contain backslashes and begins - # with a dollar sign (not a hyphen), so the echo should work correctly. - # The option is referenced via a variable to avoid confusing sed. - lt_compile=`echo "$ac_compile" | $SED \ - -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ - -e 's: [[^ ]]*conftest\.: $lt_compiler_flag&:; t' \ - -e 's:$: $lt_compiler_flag:'` - (eval echo "\"\$as_me:__oline__: $lt_compile\"" >&AS_MESSAGE_LOG_FD) - (eval "$lt_compile" 2>conftest.err) - ac_status=$? - cat conftest.err >&AS_MESSAGE_LOG_FD - echo "$as_me:__oline__: \$? = $ac_status" >&AS_MESSAGE_LOG_FD - if (exit $ac_status) && test -s "$ac_outfile"; then - # The compiler can only warn and ignore the option if not recognized - # So say no if there are warnings other than the usual output. - $echo "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' >conftest.exp - $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 - if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then - $2=yes - fi - fi - $rm conftest* -]) - -if test x"[$]$2" = xyes; then - ifelse([$5], , :, [$5]) -else - ifelse([$6], , :, [$6]) -fi -])# AC_LIBTOOL_COMPILER_OPTION - - -# AC_LIBTOOL_LINKER_OPTION(MESSAGE, VARIABLE-NAME, FLAGS, -# [ACTION-SUCCESS], [ACTION-FAILURE]) -# ------------------------------------------------------------ -# Check whether the given compiler option works -AC_DEFUN([AC_LIBTOOL_LINKER_OPTION], -[AC_REQUIRE([LT_AC_PROG_SED])dnl -AC_CACHE_CHECK([$1], [$2], - [$2=no - save_LDFLAGS="$LDFLAGS" - LDFLAGS="$LDFLAGS $3" - echo "$lt_simple_link_test_code" > conftest.$ac_ext - if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then - # The linker can only warn and ignore the option if not recognized - # So say no if there are warnings - if test -s conftest.err; then - # Append any errors to the config.log. - cat conftest.err 1>&AS_MESSAGE_LOG_FD - $echo "X$_lt_linker_boilerplate" | $Xsed -e '/^$/d' > conftest.exp - $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 - if diff conftest.exp conftest.er2 >/dev/null; then - $2=yes - fi - else - $2=yes - fi - fi - $rm conftest* - LDFLAGS="$save_LDFLAGS" -]) - -if test x"[$]$2" = xyes; then - ifelse([$4], , :, [$4]) -else - ifelse([$5], , :, [$5]) -fi -])# AC_LIBTOOL_LINKER_OPTION - - -# AC_LIBTOOL_SYS_MAX_CMD_LEN -# -------------------------- -AC_DEFUN([AC_LIBTOOL_SYS_MAX_CMD_LEN], -[# find the maximum length of command line arguments -AC_MSG_CHECKING([the maximum length of command line arguments]) -AC_CACHE_VAL([lt_cv_sys_max_cmd_len], [dnl - i=0 - teststring="ABCD" - - case $build_os in - msdosdjgpp*) - # On DJGPP, this test can blow up pretty badly due to problems in libc - # (any single argument exceeding 2000 bytes causes a buffer overrun - # during glob expansion). Even if it were fixed, the result of this - # check would be larger than it should be. - lt_cv_sys_max_cmd_len=12288; # 12K is about right - ;; - - gnu*) - # Under GNU Hurd, this test is not required because there is - # no limit to the length of command line arguments. - # Libtool will interpret -1 as no limit whatsoever - lt_cv_sys_max_cmd_len=-1; - ;; - - cygwin* | mingw*) - # On Win9x/ME, this test blows up -- it succeeds, but takes - # about 5 minutes as the teststring grows exponentially. - # Worse, since 9x/ME are not pre-emptively multitasking, - # you end up with a "frozen" computer, even though with patience - # the test eventually succeeds (with a max line length of 256k). - # Instead, let's just punt: use the minimum linelength reported by - # all of the supported platforms: 8192 (on NT/2K/XP). - lt_cv_sys_max_cmd_len=8192; - ;; - - amigaos*) - # On AmigaOS with pdksh, this test takes hours, literally. - # So we just punt and use a minimum line length of 8192. - lt_cv_sys_max_cmd_len=8192; - ;; - - netbsd* | freebsd* | openbsd* | darwin* | dragonfly*) - # This has been around since 386BSD, at least. Likely further. - if test -x /sbin/sysctl; then - lt_cv_sys_max_cmd_len=`/sbin/sysctl -n kern.argmax` - elif test -x /usr/sbin/sysctl; then - lt_cv_sys_max_cmd_len=`/usr/sbin/sysctl -n kern.argmax` - else - lt_cv_sys_max_cmd_len=65536 # usable default for all BSDs - fi - # And add a safety zone - lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4` - lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3` - ;; - - interix*) - # We know the value 262144 and hardcode it with a safety zone (like BSD) - lt_cv_sys_max_cmd_len=196608 - ;; - - osf*) - # Dr. Hans Ekkehard Plesser reports seeing a kernel panic running configure - # due to this test when exec_disable_arg_limit is 1 on Tru64. It is not - # nice to cause kernel panics so lets avoid the loop below. - # First set a reasonable default. - lt_cv_sys_max_cmd_len=16384 - # - if test -x /sbin/sysconfig; then - case `/sbin/sysconfig -q proc exec_disable_arg_limit` in - *1*) lt_cv_sys_max_cmd_len=-1 ;; - esac - fi - ;; - sco3.2v5*) - lt_cv_sys_max_cmd_len=102400 - ;; - sysv5* | sco5v6* | sysv4.2uw2*) - kargmax=`grep ARG_MAX /etc/conf/cf.d/stune 2>/dev/null` - if test -n "$kargmax"; then - lt_cv_sys_max_cmd_len=`echo $kargmax | sed 's/.*[[ ]]//'` - else - lt_cv_sys_max_cmd_len=32768 - fi - ;; - *) - lt_cv_sys_max_cmd_len=`(getconf ARG_MAX) 2> /dev/null` - if test -n "$lt_cv_sys_max_cmd_len"; then - lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4` - lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3` - else - SHELL=${SHELL-${CONFIG_SHELL-/bin/sh}} - while (test "X"`$SHELL [$]0 --fallback-echo "X$teststring" 2>/dev/null` \ - = "XX$teststring") >/dev/null 2>&1 && - new_result=`expr "X$teststring" : ".*" 2>&1` && - lt_cv_sys_max_cmd_len=$new_result && - test $i != 17 # 1/2 MB should be enough - do - i=`expr $i + 1` - teststring=$teststring$teststring - done - teststring= - # Add a significant safety factor because C++ compilers can tack on massive - # amounts of additional arguments before passing them to the linker. - # It appears as though 1/2 is a usable value. - lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 2` - fi - ;; - esac -]) -if test -n $lt_cv_sys_max_cmd_len ; then - AC_MSG_RESULT($lt_cv_sys_max_cmd_len) -else - AC_MSG_RESULT(none) -fi -])# AC_LIBTOOL_SYS_MAX_CMD_LEN - - -# _LT_AC_CHECK_DLFCN -# ------------------ -AC_DEFUN([_LT_AC_CHECK_DLFCN], -[AC_CHECK_HEADERS(dlfcn.h)dnl -])# _LT_AC_CHECK_DLFCN - - -# _LT_AC_TRY_DLOPEN_SELF (ACTION-IF-TRUE, ACTION-IF-TRUE-W-USCORE, -# ACTION-IF-FALSE, ACTION-IF-CROSS-COMPILING) -# --------------------------------------------------------------------- -AC_DEFUN([_LT_AC_TRY_DLOPEN_SELF], -[AC_REQUIRE([_LT_AC_CHECK_DLFCN])dnl -if test "$cross_compiling" = yes; then : - [$4] -else - lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 - lt_status=$lt_dlunknown - cat > conftest.$ac_ext < -#endif - -#include - -#ifdef RTLD_GLOBAL -# define LT_DLGLOBAL RTLD_GLOBAL -#else -# ifdef DL_GLOBAL -# define LT_DLGLOBAL DL_GLOBAL -# else -# define LT_DLGLOBAL 0 -# endif -#endif - -/* We may have to define LT_DLLAZY_OR_NOW in the command line if we - find out it does not work in some platform. */ -#ifndef LT_DLLAZY_OR_NOW -# ifdef RTLD_LAZY -# define LT_DLLAZY_OR_NOW RTLD_LAZY -# else -# ifdef DL_LAZY -# define LT_DLLAZY_OR_NOW DL_LAZY -# else -# ifdef RTLD_NOW -# define LT_DLLAZY_OR_NOW RTLD_NOW -# else -# ifdef DL_NOW -# define LT_DLLAZY_OR_NOW DL_NOW -# else -# define LT_DLLAZY_OR_NOW 0 -# endif -# endif -# endif -# endif -#endif - -#ifdef __cplusplus -extern "C" void exit (int); -#endif - -void fnord() { int i=42;} -int main () -{ - void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW); - int status = $lt_dlunknown; - - if (self) - { - if (dlsym (self,"fnord")) status = $lt_dlno_uscore; - else if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore; - /* dlclose (self); */ - } - else - puts (dlerror ()); - - exit (status); -}] -EOF - if AC_TRY_EVAL(ac_link) && test -s conftest${ac_exeext} 2>/dev/null; then - (./conftest; exit; ) >&AS_MESSAGE_LOG_FD 2>/dev/null - lt_status=$? - case x$lt_status in - x$lt_dlno_uscore) $1 ;; - x$lt_dlneed_uscore) $2 ;; - x$lt_dlunknown|x*) $3 ;; - esac - else : - # compilation failed - $3 - fi -fi -rm -fr conftest* -])# _LT_AC_TRY_DLOPEN_SELF - - -# AC_LIBTOOL_DLOPEN_SELF -# ---------------------- -AC_DEFUN([AC_LIBTOOL_DLOPEN_SELF], -[AC_REQUIRE([_LT_AC_CHECK_DLFCN])dnl -if test "x$enable_dlopen" != xyes; then - enable_dlopen=unknown - enable_dlopen_self=unknown - enable_dlopen_self_static=unknown -else - lt_cv_dlopen=no - lt_cv_dlopen_libs= - - case $host_os in - beos*) - lt_cv_dlopen="load_add_on" - lt_cv_dlopen_libs= - lt_cv_dlopen_self=yes - ;; - - mingw* | pw32*) - lt_cv_dlopen="LoadLibrary" - lt_cv_dlopen_libs= - ;; - - cygwin*) - lt_cv_dlopen="dlopen" - lt_cv_dlopen_libs= - ;; - - darwin*) - # if libdl is installed we need to link against it - AC_CHECK_LIB([dl], [dlopen], - [lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl"],[ - lt_cv_dlopen="dyld" - lt_cv_dlopen_libs= - lt_cv_dlopen_self=yes - ]) - ;; - - *) - AC_CHECK_FUNC([shl_load], - [lt_cv_dlopen="shl_load"], - [AC_CHECK_LIB([dld], [shl_load], - [lt_cv_dlopen="shl_load" lt_cv_dlopen_libs="-dld"], - [AC_CHECK_FUNC([dlopen], - [lt_cv_dlopen="dlopen"], - [AC_CHECK_LIB([dl], [dlopen], - [lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl"], - [AC_CHECK_LIB([svld], [dlopen], - [lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-lsvld"], - [AC_CHECK_LIB([dld], [dld_link], - [lt_cv_dlopen="dld_link" lt_cv_dlopen_libs="-dld"]) - ]) - ]) - ]) - ]) - ]) - ;; - esac - - if test "x$lt_cv_dlopen" != xno; then - enable_dlopen=yes - else - enable_dlopen=no - fi - - case $lt_cv_dlopen in - dlopen) - save_CPPFLAGS="$CPPFLAGS" - test "x$ac_cv_header_dlfcn_h" = xyes && CPPFLAGS="$CPPFLAGS -DHAVE_DLFCN_H" - - save_LDFLAGS="$LDFLAGS" - wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $export_dynamic_flag_spec\" - - save_LIBS="$LIBS" - LIBS="$lt_cv_dlopen_libs $LIBS" - - AC_CACHE_CHECK([whether a program can dlopen itself], - lt_cv_dlopen_self, [dnl - _LT_AC_TRY_DLOPEN_SELF( - lt_cv_dlopen_self=yes, lt_cv_dlopen_self=yes, - lt_cv_dlopen_self=no, lt_cv_dlopen_self=cross) - ]) - - if test "x$lt_cv_dlopen_self" = xyes; then - wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $lt_prog_compiler_static\" - AC_CACHE_CHECK([whether a statically linked program can dlopen itself], - lt_cv_dlopen_self_static, [dnl - _LT_AC_TRY_DLOPEN_SELF( - lt_cv_dlopen_self_static=yes, lt_cv_dlopen_self_static=yes, - lt_cv_dlopen_self_static=no, lt_cv_dlopen_self_static=cross) - ]) - fi - - CPPFLAGS="$save_CPPFLAGS" - LDFLAGS="$save_LDFLAGS" - LIBS="$save_LIBS" - ;; - esac - - case $lt_cv_dlopen_self in - yes|no) enable_dlopen_self=$lt_cv_dlopen_self ;; - *) enable_dlopen_self=unknown ;; - esac - - case $lt_cv_dlopen_self_static in - yes|no) enable_dlopen_self_static=$lt_cv_dlopen_self_static ;; - *) enable_dlopen_self_static=unknown ;; - esac -fi -])# AC_LIBTOOL_DLOPEN_SELF - - -# AC_LIBTOOL_PROG_CC_C_O([TAGNAME]) -# --------------------------------- -# Check to see if options -c and -o are simultaneously supported by compiler -AC_DEFUN([AC_LIBTOOL_PROG_CC_C_O], -[AC_REQUIRE([LT_AC_PROG_SED])dnl -AC_REQUIRE([_LT_AC_SYS_COMPILER])dnl -AC_CACHE_CHECK([if $compiler supports -c -o file.$ac_objext], - [_LT_AC_TAGVAR(lt_cv_prog_compiler_c_o, $1)], - [_LT_AC_TAGVAR(lt_cv_prog_compiler_c_o, $1)=no - $rm -r conftest 2>/dev/null - mkdir conftest - cd conftest - mkdir out - echo "$lt_simple_compile_test_code" > conftest.$ac_ext - - lt_compiler_flag="-o out/conftest2.$ac_objext" - # Insert the option either (1) after the last *FLAGS variable, or - # (2) before a word containing "conftest.", or (3) at the end. - # Note that $ac_compile itself does not contain backslashes and begins - # with a dollar sign (not a hyphen), so the echo should work correctly. - lt_compile=`echo "$ac_compile" | $SED \ - -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ - -e 's: [[^ ]]*conftest\.: $lt_compiler_flag&:; t' \ - -e 's:$: $lt_compiler_flag:'` - (eval echo "\"\$as_me:__oline__: $lt_compile\"" >&AS_MESSAGE_LOG_FD) - (eval "$lt_compile" 2>out/conftest.err) - ac_status=$? - cat out/conftest.err >&AS_MESSAGE_LOG_FD - echo "$as_me:__oline__: \$? = $ac_status" >&AS_MESSAGE_LOG_FD - if (exit $ac_status) && test -s out/conftest2.$ac_objext - then - # The compiler can only warn and ignore the option if not recognized - # So say no if there are warnings - $echo "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' > out/conftest.exp - $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2 - if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then - _LT_AC_TAGVAR(lt_cv_prog_compiler_c_o, $1)=yes - fi - fi - chmod u+w . 2>&AS_MESSAGE_LOG_FD - $rm conftest* - # SGI C++ compiler will create directory out/ii_files/ for - # template instantiation - test -d out/ii_files && $rm out/ii_files/* && rmdir out/ii_files - $rm out/* && rmdir out - cd .. - rmdir conftest - $rm conftest* -]) -])# AC_LIBTOOL_PROG_CC_C_O - - -# AC_LIBTOOL_SYS_HARD_LINK_LOCKS([TAGNAME]) -# ----------------------------------------- -# Check to see if we can do hard links to lock some files if needed -AC_DEFUN([AC_LIBTOOL_SYS_HARD_LINK_LOCKS], -[AC_REQUIRE([_LT_AC_LOCK])dnl - -hard_links="nottested" -if test "$_LT_AC_TAGVAR(lt_cv_prog_compiler_c_o, $1)" = no && test "$need_locks" != no; then - # do not overwrite the value of need_locks provided by the user - AC_MSG_CHECKING([if we can lock with hard links]) - hard_links=yes - $rm conftest* - ln conftest.a conftest.b 2>/dev/null && hard_links=no - touch conftest.a - ln conftest.a conftest.b 2>&5 || hard_links=no - ln conftest.a conftest.b 2>/dev/null && hard_links=no - AC_MSG_RESULT([$hard_links]) - if test "$hard_links" = no; then - AC_MSG_WARN([`$CC' does not support `-c -o', so `make -j' may be unsafe]) - need_locks=warn - fi -else - need_locks=no -fi -])# AC_LIBTOOL_SYS_HARD_LINK_LOCKS - - -# AC_LIBTOOL_OBJDIR -# ----------------- -AC_DEFUN([AC_LIBTOOL_OBJDIR], -[AC_CACHE_CHECK([for objdir], [lt_cv_objdir], -[rm -f .libs 2>/dev/null -mkdir .libs 2>/dev/null -if test -d .libs; then - lt_cv_objdir=.libs -else - # MS-DOS does not allow filenames that begin with a dot. - lt_cv_objdir=_libs -fi -rmdir .libs 2>/dev/null]) -objdir=$lt_cv_objdir -])# AC_LIBTOOL_OBJDIR - - -# AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH([TAGNAME]) -# ---------------------------------------------- -# Check hardcoding attributes. -AC_DEFUN([AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH], -[AC_MSG_CHECKING([how to hardcode library paths into programs]) -_LT_AC_TAGVAR(hardcode_action, $1)= -if test -n "$_LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)" || \ - test -n "$_LT_AC_TAGVAR(runpath_var, $1)" || \ - test "X$_LT_AC_TAGVAR(hardcode_automatic, $1)" = "Xyes" ; then - - # We can hardcode non-existent directories. - if test "$_LT_AC_TAGVAR(hardcode_direct, $1)" != no && - # If the only mechanism to avoid hardcoding is shlibpath_var, we - # have to relink, otherwise we might link with an installed library - # when we should be linking with a yet-to-be-installed one - ## test "$_LT_AC_TAGVAR(hardcode_shlibpath_var, $1)" != no && - test "$_LT_AC_TAGVAR(hardcode_minus_L, $1)" != no; then - # Linking always hardcodes the temporary library directory. - _LT_AC_TAGVAR(hardcode_action, $1)=relink - else - # We can link without hardcoding, and we can hardcode nonexisting dirs. - _LT_AC_TAGVAR(hardcode_action, $1)=immediate - fi -else - # We cannot hardcode anything, or else we can only hardcode existing - # directories. - _LT_AC_TAGVAR(hardcode_action, $1)=unsupported -fi -AC_MSG_RESULT([$_LT_AC_TAGVAR(hardcode_action, $1)]) - -if test "$_LT_AC_TAGVAR(hardcode_action, $1)" = relink; then - # Fast installation is not supported - enable_fast_install=no -elif test "$shlibpath_overrides_runpath" = yes || - test "$enable_shared" = no; then - # Fast installation is not necessary - enable_fast_install=needless -fi -])# AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH - - -# AC_LIBTOOL_SYS_LIB_STRIP -# ------------------------ -AC_DEFUN([AC_LIBTOOL_SYS_LIB_STRIP], -[striplib= -old_striplib= -AC_MSG_CHECKING([whether stripping libraries is possible]) -if test -n "$STRIP" && $STRIP -V 2>&1 | grep "GNU strip" >/dev/null; then - test -z "$old_striplib" && old_striplib="$STRIP --strip-debug" - test -z "$striplib" && striplib="$STRIP --strip-unneeded" - AC_MSG_RESULT([yes]) -else -# FIXME - insert some real tests, host_os isn't really good enough - case $host_os in - darwin*) - if test -n "$STRIP" ; then - striplib="$STRIP -x" - old_striplib="$STRIP -S" - AC_MSG_RESULT([yes]) - else - AC_MSG_RESULT([no]) -fi - ;; - *) - AC_MSG_RESULT([no]) - ;; - esac -fi -])# AC_LIBTOOL_SYS_LIB_STRIP - - -# AC_LIBTOOL_SYS_DYNAMIC_LINKER -# ----------------------------- -# PORTME Fill in your ld.so characteristics -AC_DEFUN([AC_LIBTOOL_SYS_DYNAMIC_LINKER], -[AC_REQUIRE([LT_AC_PROG_SED])dnl -AC_MSG_CHECKING([dynamic linker characteristics]) -library_names_spec= -libname_spec='lib$name' -soname_spec= -shrext_cmds=".so" -postinstall_cmds= -postuninstall_cmds= -finish_cmds= -finish_eval= -shlibpath_var= -shlibpath_overrides_runpath=unknown -version_type=none -dynamic_linker="$host_os ld.so" -sys_lib_dlsearch_path_spec="/lib /usr/lib" -m4_if($1,[],[ -if test "$GCC" = yes; then - case $host_os in - darwin*) lt_awk_arg="/^libraries:/,/LR/" ;; - *) lt_awk_arg="/^libraries:/" ;; - esac - lt_search_path_spec=`$CC -print-search-dirs | awk $lt_awk_arg | $SED -e "s/^libraries://" -e "s,=/,/,g"` - if echo "$lt_search_path_spec" | grep ';' >/dev/null ; then - # if the path contains ";" then we assume it to be the separator - # otherwise default to the standard path separator (i.e. ":") - it is - # assumed that no part of a normal pathname contains ";" but that should - # okay in the real world where ";" in dirpaths is itself problematic. - lt_search_path_spec=`echo "$lt_search_path_spec" | $SED -e 's/;/ /g'` - else - lt_search_path_spec=`echo "$lt_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` - fi - # Ok, now we have the path, separated by spaces, we can step through it - # and add multilib dir if necessary. - lt_tmp_lt_search_path_spec= - lt_multi_os_dir=`$CC $CPPFLAGS $CFLAGS $LDFLAGS -print-multi-os-directory 2>/dev/null` - for lt_sys_path in $lt_search_path_spec; do - if test -d "$lt_sys_path/$lt_multi_os_dir"; then - lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path/$lt_multi_os_dir" - else - test -d "$lt_sys_path" && \ - lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path" - fi - done - lt_search_path_spec=`echo $lt_tmp_lt_search_path_spec | awk ' -BEGIN {RS=" "; FS="/|\n";} { - lt_foo=""; - lt_count=0; - for (lt_i = NF; lt_i > 0; lt_i--) { - if ($lt_i != "" && $lt_i != ".") { - if ($lt_i == "..") { - lt_count++; - } else { - if (lt_count == 0) { - lt_foo="/" $lt_i lt_foo; - } else { - lt_count--; - } - } - } - } - if (lt_foo != "") { lt_freq[[lt_foo]]++; } - if (lt_freq[[lt_foo]] == 1) { print lt_foo; } -}'` - sys_lib_search_path_spec=`echo $lt_search_path_spec` -else - sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib" -fi]) -need_lib_prefix=unknown -hardcode_into_libs=no - -# when you set need_version to no, make sure it does not cause -set_version -# flags to be left without arguments -need_version=unknown - -case $host_os in -aix3*) - version_type=linux - library_names_spec='${libname}${release}${shared_ext}$versuffix $libname.a' - shlibpath_var=LIBPATH - - # AIX 3 has no versioning support, so we append a major version to the name. - soname_spec='${libname}${release}${shared_ext}$major' - ;; - -aix4* | aix5*) - version_type=linux - need_lib_prefix=no - need_version=no - hardcode_into_libs=yes - if test "$host_cpu" = ia64; then - # AIX 5 supports IA64 - library_names_spec='${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext}$versuffix $libname${shared_ext}' - shlibpath_var=LD_LIBRARY_PATH - else - # With GCC up to 2.95.x, collect2 would create an import file - # for dependence libraries. The import file would start with - # the line `#! .'. This would cause the generated library to - # depend on `.', always an invalid library. This was fixed in - # development snapshots of GCC prior to 3.0. - case $host_os in - aix4 | aix4.[[01]] | aix4.[[01]].*) - if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)' - echo ' yes ' - echo '#endif'; } | ${CC} -E - | grep yes > /dev/null; then - : - else - can_build_shared=no - fi - ;; - esac - # AIX (on Power*) has no versioning support, so currently we can not hardcode correct - # soname into executable. Probably we can add versioning support to - # collect2, so additional links can be useful in future. - if test "$aix_use_runtimelinking" = yes; then - # If using run time linking (on AIX 4.2 or later) use lib.so - # instead of lib.a to let people know that these are not - # typical AIX shared libraries. - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - else - # We preserve .a as extension for shared libraries through AIX4.2 - # and later when we are not doing run time linking. - library_names_spec='${libname}${release}.a $libname.a' - soname_spec='${libname}${release}${shared_ext}$major' - fi - shlibpath_var=LIBPATH - fi - ;; - -amigaos*) - library_names_spec='$libname.ixlibrary $libname.a' - # Create ${libname}_ixlibrary.a entries in /sys/libs. - finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`$echo "X$lib" | $Xsed -e '\''s%^.*/\([[^/]]*\)\.ixlibrary$%\1%'\''`; test $rm /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done' - ;; - -beos*) - library_names_spec='${libname}${shared_ext}' - dynamic_linker="$host_os ld.so" - shlibpath_var=LIBRARY_PATH - ;; - -bsdi[[45]]*) - version_type=linux - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir' - shlibpath_var=LD_LIBRARY_PATH - sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib" - sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib" - # the default ld.so.conf also contains /usr/contrib/lib and - # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow - # libtool to hard-code these into programs - ;; - -cygwin* | mingw* | pw32*) - version_type=windows - shrext_cmds=".dll" - need_version=no - need_lib_prefix=no - - case $GCC,$host_os in - yes,cygwin* | yes,mingw* | yes,pw32*) - library_names_spec='$libname.dll.a' - # DLL is installed to $(libdir)/../bin by postinstall_cmds - postinstall_cmds='base_file=`basename \${file}`~ - dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i;echo \$dlname'\''`~ - dldir=$destdir/`dirname \$dlpath`~ - test -d \$dldir || mkdir -p \$dldir~ - $install_prog $dir/$dlname \$dldir/$dlname~ - chmod a+x \$dldir/$dlname' - postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ - dlpath=$dir/\$dldll~ - $rm \$dlpath' - shlibpath_overrides_runpath=yes - - case $host_os in - cygwin*) - # Cygwin DLLs use 'cyg' prefix rather than 'lib' - soname_spec='`echo ${libname} | sed -e 's/^lib/cyg/'``echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext}' - sys_lib_search_path_spec="/usr/lib /lib/w32api /lib /usr/local/lib" - ;; - mingw*) - # MinGW DLLs use traditional 'lib' prefix - soname_spec='${libname}`echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext}' - sys_lib_search_path_spec=`$CC -print-search-dirs | grep "^libraries:" | $SED -e "s/^libraries://" -e "s,=/,/,g"` - if echo "$sys_lib_search_path_spec" | [grep ';[c-zC-Z]:/' >/dev/null]; then - # It is most probably a Windows format PATH printed by - # mingw gcc, but we are running on Cygwin. Gcc prints its search - # path with ; separators, and with drive letters. We can handle the - # drive letters (cygwin fileutils understands them), so leave them, - # especially as we might pass files found there to a mingw objdump, - # which wouldn't understand a cygwinified path. Ahh. - sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'` - else - sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` - fi - ;; - pw32*) - # pw32 DLLs use 'pw' prefix rather than 'lib' - library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext}' - ;; - esac - ;; - - *) - library_names_spec='${libname}`echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext} $libname.lib' - ;; - esac - dynamic_linker='Win32 ld.exe' - # FIXME: first we should search . and the directory the executable is in - shlibpath_var=PATH - ;; - -darwin* | rhapsody*) - dynamic_linker="$host_os dyld" - version_type=darwin - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${versuffix}$shared_ext ${libname}${release}${major}$shared_ext ${libname}$shared_ext' - soname_spec='${libname}${release}${major}$shared_ext' - shlibpath_overrides_runpath=yes - shlibpath_var=DYLD_LIBRARY_PATH - shrext_cmds='`test .$module = .yes && echo .so || echo .dylib`' - m4_if([$1], [],[ - sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/local/lib"]) - sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib' - ;; - -dgux*) - version_type=linux - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname$shared_ext' - soname_spec='${libname}${release}${shared_ext}$major' - shlibpath_var=LD_LIBRARY_PATH - ;; - -freebsd1*) - dynamic_linker=no - ;; - -freebsd* | dragonfly*) - # DragonFly does not have aout. When/if they implement a new - # versioning mechanism, adjust this. - if test -x /usr/bin/objformat; then - objformat=`/usr/bin/objformat` - else - case $host_os in - freebsd[[123]]*) objformat=aout ;; - *) objformat=elf ;; - esac - fi - version_type=freebsd-$objformat - case $version_type in - freebsd-elf*) - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' - need_version=no - need_lib_prefix=no - ;; - freebsd-*) - library_names_spec='${libname}${release}${shared_ext}$versuffix $libname${shared_ext}$versuffix' - need_version=yes - ;; - esac - shlibpath_var=LD_LIBRARY_PATH - case $host_os in - freebsd2*) - shlibpath_overrides_runpath=yes - ;; - freebsd3.[[01]]* | freebsdelf3.[[01]]*) - shlibpath_overrides_runpath=yes - hardcode_into_libs=yes - ;; - freebsd3.[[2-9]]* | freebsdelf3.[[2-9]]* | \ - freebsd4.[[0-5]] | freebsdelf4.[[0-5]] | freebsd4.1.1 | freebsdelf4.1.1) - shlibpath_overrides_runpath=no - hardcode_into_libs=yes - ;; - *) # from 4.6 on, and DragonFly - shlibpath_overrides_runpath=yes - hardcode_into_libs=yes - ;; - esac - ;; - -gnu*) - version_type=linux - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - shlibpath_var=LD_LIBRARY_PATH - hardcode_into_libs=yes - ;; - -hpux9* | hpux10* | hpux11*) - # Give a soname corresponding to the major version so that dld.sl refuses to - # link against other versions. - version_type=sunos - need_lib_prefix=no - need_version=no - case $host_cpu in - ia64*) - shrext_cmds='.so' - hardcode_into_libs=yes - dynamic_linker="$host_os dld.so" - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - if test "X$HPUX_IA64_MODE" = X32; then - sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib" - else - sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64" - fi - sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec - ;; - hppa*64*) - shrext_cmds='.sl' - hardcode_into_libs=yes - dynamic_linker="$host_os dld.sl" - shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH - shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64" - sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec - ;; - *) - shrext_cmds='.sl' - dynamic_linker="$host_os dld.sl" - shlibpath_var=SHLIB_PATH - shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - ;; - esac - # HP-UX runs *really* slowly unless shared libraries are mode 555. - postinstall_cmds='chmod 555 $lib' - ;; - -interix[[3-9]]*) - version_type=linux - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - dynamic_linker='Interix 3.x ld.so.1 (PE, like ELF)' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=no - hardcode_into_libs=yes - ;; - -irix5* | irix6* | nonstopux*) - case $host_os in - nonstopux*) version_type=nonstopux ;; - *) - if test "$lt_cv_prog_gnu_ld" = yes; then - version_type=linux - else - version_type=irix - fi ;; - esac - need_lib_prefix=no - need_version=no - soname_spec='${libname}${release}${shared_ext}$major' - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext} $libname${shared_ext}' - case $host_os in - irix5* | nonstopux*) - libsuff= shlibsuff= - ;; - *) - case $LD in # libtool.m4 will add one of these switches to LD - *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ") - libsuff= shlibsuff= libmagic=32-bit;; - *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ") - libsuff=32 shlibsuff=N32 libmagic=N32;; - *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ") - libsuff=64 shlibsuff=64 libmagic=64-bit;; - *) libsuff= shlibsuff= libmagic=never-match;; - esac - ;; - esac - shlibpath_var=LD_LIBRARY${shlibsuff}_PATH - shlibpath_overrides_runpath=no - sys_lib_search_path_spec="/usr/lib${libsuff} /lib${libsuff} /usr/local/lib${libsuff}" - sys_lib_dlsearch_path_spec="/usr/lib${libsuff} /lib${libsuff}" - hardcode_into_libs=yes - ;; - -# No shared lib support for Linux oldld, aout, or coff. -linux*oldld* | linux*aout* | linux*coff*) - dynamic_linker=no - ;; - -# This must be Linux ELF. -linux* | k*bsd*-gnu) - version_type=linux - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=no - # This implies no fast_install, which is unacceptable. - # Some rework will be needed to allow for fast_install - # before this can be enabled. - hardcode_into_libs=yes - sys_lib_search_path_spec="/usr/lib${libsuff} /lib${libsuff} /usr/local/lib${libsuff}" - sys_lib_dlsearch_path_spec="/usr/lib${libsuff} /lib${libsuff}" - - # Append ld.so.conf contents to the search path - if test -f /etc/ld.so.conf; then - lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s 2>/dev/null", \[$]2)); skip = 1; } { if (!skip) print \[$]0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;/^[ ]*hwcap[ ]/d;s/[:, ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;/^$/d' | tr '\n' ' '` - sys_lib_dlsearch_path_spec="$sys_lib_dlsearch_path_spec $lt_ld_extra" - fi - - # We used to test for /lib/ld.so.1 and disable shared libraries on - # powerpc, because MkLinux only supported shared libraries with the - # GNU dynamic linker. Since this was broken with cross compilers, - # most powerpc-linux boxes support dynamic linking these days and - # people can always --disable-shared, the test was removed, and we - # assume the GNU/Linux dynamic linker is in use. - dynamic_linker='GNU/Linux ld.so' - ;; - -netbsd*) - version_type=sunos - need_lib_prefix=no - need_version=no - if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' - finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' - dynamic_linker='NetBSD (a.out) ld.so' - else - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - dynamic_linker='NetBSD ld.elf_so' - fi - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=yes - hardcode_into_libs=yes - ;; - -newsos6) - version_type=linux - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=yes - ;; - -nto-qnx*) - version_type=linux - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=yes - ;; - -openbsd*) - version_type=sunos - sys_lib_dlsearch_path_spec="/usr/lib" - need_lib_prefix=no - # Some older versions of OpenBSD (3.3 at least) *do* need versioned libs. - case $host_os in - openbsd3.3 | openbsd3.3.*) need_version=yes ;; - *) need_version=no ;; - esac - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' - finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' - shlibpath_var=LD_LIBRARY_PATH - if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then - case $host_os in - openbsd2.[[89]] | openbsd2.[[89]].*) - shlibpath_overrides_runpath=no - ;; - *) - shlibpath_overrides_runpath=yes - ;; - esac - else - shlibpath_overrides_runpath=yes - fi - ;; - -os2*) - libname_spec='$name' - shrext_cmds=".dll" - need_lib_prefix=no - library_names_spec='$libname${shared_ext} $libname.a' - dynamic_linker='OS/2 ld.exe' - shlibpath_var=LIBPATH - ;; - -osf3* | osf4* | osf5*) - version_type=osf - need_lib_prefix=no - need_version=no - soname_spec='${libname}${release}${shared_ext}$major' - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - shlibpath_var=LD_LIBRARY_PATH - sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib" - sys_lib_dlsearch_path_spec="$sys_lib_search_path_spec" - ;; - -rdos*) - dynamic_linker=no - ;; - -solaris*) - version_type=linux - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=yes - hardcode_into_libs=yes - # ldd complains unless libraries are executable - postinstall_cmds='chmod +x $lib' - ;; - -sunos4*) - version_type=sunos - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' - finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=yes - if test "$with_gnu_ld" = yes; then - need_lib_prefix=no - fi - need_version=yes - ;; - -sysv4 | sysv4.3*) - version_type=linux - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - shlibpath_var=LD_LIBRARY_PATH - case $host_vendor in - sni) - shlibpath_overrides_runpath=no - need_lib_prefix=no - export_dynamic_flag_spec='${wl}-Blargedynsym' - runpath_var=LD_RUN_PATH - ;; - siemens) - need_lib_prefix=no - ;; - motorola) - need_lib_prefix=no - need_version=no - shlibpath_overrides_runpath=no - sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib' - ;; - esac - ;; - -sysv4*MP*) - if test -d /usr/nec ;then - version_type=linux - library_names_spec='$libname${shared_ext}.$versuffix $libname${shared_ext}.$major $libname${shared_ext}' - soname_spec='$libname${shared_ext}.$major' - shlibpath_var=LD_LIBRARY_PATH - fi - ;; - -sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) - version_type=freebsd-elf - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - shlibpath_var=LD_LIBRARY_PATH - hardcode_into_libs=yes - if test "$with_gnu_ld" = yes; then - sys_lib_search_path_spec='/usr/local/lib /usr/gnu/lib /usr/ccs/lib /usr/lib /lib' - shlibpath_overrides_runpath=no - else - sys_lib_search_path_spec='/usr/ccs/lib /usr/lib' - shlibpath_overrides_runpath=yes - case $host_os in - sco3.2v5*) - sys_lib_search_path_spec="$sys_lib_search_path_spec /lib" - ;; - esac - fi - sys_lib_dlsearch_path_spec='/usr/lib' - ;; - -uts4*) - version_type=linux - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - shlibpath_var=LD_LIBRARY_PATH - ;; - -*) - dynamic_linker=no - ;; -esac -AC_MSG_RESULT([$dynamic_linker]) -test "$dynamic_linker" = no && can_build_shared=no - -variables_saved_for_relink="PATH $shlibpath_var $runpath_var" -if test "$GCC" = yes; then - variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH" -fi -])# AC_LIBTOOL_SYS_DYNAMIC_LINKER - - -# _LT_AC_TAGCONFIG -# ---------------- -AC_DEFUN([_LT_AC_TAGCONFIG], -[AC_REQUIRE([LT_AC_PROG_SED])dnl -AC_ARG_WITH([tags], - [AC_HELP_STRING([--with-tags@<:@=TAGS@:>@], - [include additional configurations @<:@automatic@:>@])], - [tagnames="$withval"]) - -if test -f "$ltmain" && test -n "$tagnames"; then - if test ! -f "${ofile}"; then - AC_MSG_WARN([output file `$ofile' does not exist]) - fi - - if test -z "$LTCC"; then - eval "`$SHELL ${ofile} --config | grep '^LTCC='`" - if test -z "$LTCC"; then - AC_MSG_WARN([output file `$ofile' does not look like a libtool script]) - else - AC_MSG_WARN([using `LTCC=$LTCC', extracted from `$ofile']) - fi - fi - if test -z "$LTCFLAGS"; then - eval "`$SHELL ${ofile} --config | grep '^LTCFLAGS='`" - fi - - # Extract list of available tagged configurations in $ofile. - # Note that this assumes the entire list is on one line. - available_tags=`grep "^available_tags=" "${ofile}" | $SED -e 's/available_tags=\(.*$\)/\1/' -e 's/\"//g'` - - lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," - for tagname in $tagnames; do - IFS="$lt_save_ifs" - # Check whether tagname contains only valid characters - case `$echo "X$tagname" | $Xsed -e 's:[[-_ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz1234567890,/]]::g'` in - "") ;; - *) AC_MSG_ERROR([invalid tag name: $tagname]) - ;; - esac - - if grep "^# ### BEGIN LIBTOOL TAG CONFIG: $tagname$" < "${ofile}" > /dev/null - then - AC_MSG_ERROR([tag name \"$tagname\" already exists]) - fi - - # Update the list of available tags. - if test -n "$tagname"; then - echo appending configuration tag \"$tagname\" to $ofile - - case $tagname in - CXX) - if test -n "$CXX" && ( test "X$CXX" != "Xno" && - ( (test "X$CXX" = "Xg++" && `g++ -v >/dev/null 2>&1` ) || - (test "X$CXX" != "Xg++"))) ; then - AC_LIBTOOL_LANG_CXX_CONFIG - else - tagname="" - fi - ;; - - F77) - if test -n "$F77" && test "X$F77" != "Xno"; then - AC_LIBTOOL_LANG_F77_CONFIG - else - tagname="" - fi - ;; - - GCJ) - if test -n "$GCJ" && test "X$GCJ" != "Xno"; then - AC_LIBTOOL_LANG_GCJ_CONFIG - else - tagname="" - fi - ;; - - RC) - AC_LIBTOOL_LANG_RC_CONFIG - ;; - - *) - AC_MSG_ERROR([Unsupported tag name: $tagname]) - ;; - esac - - # Append the new tag name to the list of available tags. - if test -n "$tagname" ; then - available_tags="$available_tags $tagname" - fi - fi - done - IFS="$lt_save_ifs" - - # Now substitute the updated list of available tags. - if eval "sed -e 's/^available_tags=.*\$/available_tags=\"$available_tags\"/' \"$ofile\" > \"${ofile}T\""; then - mv "${ofile}T" "$ofile" - chmod +x "$ofile" - else - rm -f "${ofile}T" - AC_MSG_ERROR([unable to update list of available tagged configurations.]) - fi -fi -])# _LT_AC_TAGCONFIG - - -# AC_LIBTOOL_DLOPEN -# ----------------- -# enable checks for dlopen support -AC_DEFUN([AC_LIBTOOL_DLOPEN], - [AC_BEFORE([$0],[AC_LIBTOOL_SETUP]) -])# AC_LIBTOOL_DLOPEN - - -# AC_LIBTOOL_WIN32_DLL -# -------------------- -# declare package support for building win32 DLLs -AC_DEFUN([AC_LIBTOOL_WIN32_DLL], -[AC_BEFORE([$0], [AC_LIBTOOL_SETUP]) -])# AC_LIBTOOL_WIN32_DLL - - -# AC_ENABLE_SHARED([DEFAULT]) -# --------------------------- -# implement the --enable-shared flag -# DEFAULT is either `yes' or `no'. If omitted, it defaults to `yes'. -AC_DEFUN([AC_ENABLE_SHARED], -[define([AC_ENABLE_SHARED_DEFAULT], ifelse($1, no, no, yes))dnl -AC_ARG_ENABLE([shared], - [AC_HELP_STRING([--enable-shared@<:@=PKGS@:>@], - [build shared libraries @<:@default=]AC_ENABLE_SHARED_DEFAULT[@:>@])], - [p=${PACKAGE-default} - case $enableval in - yes) enable_shared=yes ;; - no) enable_shared=no ;; - *) - enable_shared=no - # Look at the argument we got. We use all the common list separators. - lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," - for pkg in $enableval; do - IFS="$lt_save_ifs" - if test "X$pkg" = "X$p"; then - enable_shared=yes - fi - done - IFS="$lt_save_ifs" - ;; - esac], - [enable_shared=]AC_ENABLE_SHARED_DEFAULT) -])# AC_ENABLE_SHARED - - -# AC_DISABLE_SHARED -# ----------------- -# set the default shared flag to --disable-shared -AC_DEFUN([AC_DISABLE_SHARED], -[AC_BEFORE([$0],[AC_LIBTOOL_SETUP])dnl -AC_ENABLE_SHARED(no) -])# AC_DISABLE_SHARED - - -# AC_ENABLE_STATIC([DEFAULT]) -# --------------------------- -# implement the --enable-static flag -# DEFAULT is either `yes' or `no'. If omitted, it defaults to `yes'. -AC_DEFUN([AC_ENABLE_STATIC], -[define([AC_ENABLE_STATIC_DEFAULT], ifelse($1, no, no, yes))dnl -AC_ARG_ENABLE([static], - [AC_HELP_STRING([--enable-static@<:@=PKGS@:>@], - [build static libraries @<:@default=]AC_ENABLE_STATIC_DEFAULT[@:>@])], - [p=${PACKAGE-default} - case $enableval in - yes) enable_static=yes ;; - no) enable_static=no ;; - *) - enable_static=no - # Look at the argument we got. We use all the common list separators. - lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," - for pkg in $enableval; do - IFS="$lt_save_ifs" - if test "X$pkg" = "X$p"; then - enable_static=yes - fi - done - IFS="$lt_save_ifs" - ;; - esac], - [enable_static=]AC_ENABLE_STATIC_DEFAULT) -])# AC_ENABLE_STATIC - - -# AC_DISABLE_STATIC -# ----------------- -# set the default static flag to --disable-static -AC_DEFUN([AC_DISABLE_STATIC], -[AC_BEFORE([$0],[AC_LIBTOOL_SETUP])dnl -AC_ENABLE_STATIC(no) -])# AC_DISABLE_STATIC - - -# AC_ENABLE_FAST_INSTALL([DEFAULT]) -# --------------------------------- -# implement the --enable-fast-install flag -# DEFAULT is either `yes' or `no'. If omitted, it defaults to `yes'. -AC_DEFUN([AC_ENABLE_FAST_INSTALL], -[define([AC_ENABLE_FAST_INSTALL_DEFAULT], ifelse($1, no, no, yes))dnl -AC_ARG_ENABLE([fast-install], - [AC_HELP_STRING([--enable-fast-install@<:@=PKGS@:>@], - [optimize for fast installation @<:@default=]AC_ENABLE_FAST_INSTALL_DEFAULT[@:>@])], - [p=${PACKAGE-default} - case $enableval in - yes) enable_fast_install=yes ;; - no) enable_fast_install=no ;; - *) - enable_fast_install=no - # Look at the argument we got. We use all the common list separators. - lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," - for pkg in $enableval; do - IFS="$lt_save_ifs" - if test "X$pkg" = "X$p"; then - enable_fast_install=yes - fi - done - IFS="$lt_save_ifs" - ;; - esac], - [enable_fast_install=]AC_ENABLE_FAST_INSTALL_DEFAULT) -])# AC_ENABLE_FAST_INSTALL - - -# AC_DISABLE_FAST_INSTALL -# ----------------------- -# set the default to --disable-fast-install -AC_DEFUN([AC_DISABLE_FAST_INSTALL], -[AC_BEFORE([$0],[AC_LIBTOOL_SETUP])dnl -AC_ENABLE_FAST_INSTALL(no) -])# AC_DISABLE_FAST_INSTALL - - -# AC_LIBTOOL_PICMODE([MODE]) -# -------------------------- -# implement the --with-pic flag -# MODE is either `yes' or `no'. If omitted, it defaults to `both'. -AC_DEFUN([AC_LIBTOOL_PICMODE], -[AC_BEFORE([$0],[AC_LIBTOOL_SETUP])dnl -pic_mode=ifelse($#,1,$1,default) -])# AC_LIBTOOL_PICMODE - - -# AC_PROG_EGREP -# ------------- -# This is predefined starting with Autoconf 2.54, so this conditional -# definition can be removed once we require Autoconf 2.54 or later. -m4_ifndef([AC_PROG_EGREP], [AC_DEFUN([AC_PROG_EGREP], -[AC_CACHE_CHECK([for egrep], [ac_cv_prog_egrep], - [if echo a | (grep -E '(a|b)') >/dev/null 2>&1 - then ac_cv_prog_egrep='grep -E' - else ac_cv_prog_egrep='egrep' - fi]) - EGREP=$ac_cv_prog_egrep - AC_SUBST([EGREP]) -])]) - - -# AC_PATH_TOOL_PREFIX -# ------------------- -# find a file program which can recognize shared library -AC_DEFUN([AC_PATH_TOOL_PREFIX], -[AC_REQUIRE([AC_PROG_EGREP])dnl -AC_MSG_CHECKING([for $1]) -AC_CACHE_VAL(lt_cv_path_MAGIC_CMD, -[case $MAGIC_CMD in -[[\\/*] | ?:[\\/]*]) - lt_cv_path_MAGIC_CMD="$MAGIC_CMD" # Let the user override the test with a path. - ;; -*) - lt_save_MAGIC_CMD="$MAGIC_CMD" - lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR -dnl $ac_dummy forces splitting on constant user-supplied paths. -dnl POSIX.2 word splitting is done only on the output of word expansions, -dnl not every word. This closes a longstanding sh security hole. - ac_dummy="ifelse([$2], , $PATH, [$2])" - for ac_dir in $ac_dummy; do - IFS="$lt_save_ifs" - test -z "$ac_dir" && ac_dir=. - if test -f $ac_dir/$1; then - lt_cv_path_MAGIC_CMD="$ac_dir/$1" - if test -n "$file_magic_test_file"; then - case $deplibs_check_method in - "file_magic "*) - file_magic_regex=`expr "$deplibs_check_method" : "file_magic \(.*\)"` - MAGIC_CMD="$lt_cv_path_MAGIC_CMD" - if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null | - $EGREP "$file_magic_regex" > /dev/null; then - : - else - cat <&2 - -*** Warning: the command libtool uses to detect shared libraries, -*** $file_magic_cmd, produces output that libtool cannot recognize. -*** The result is that libtool may fail to recognize shared libraries -*** as such. This will affect the creation of libtool libraries that -*** depend on shared libraries, but programs linked with such libtool -*** libraries will work regardless of this problem. Nevertheless, you -*** may want to report the problem to your system manager and/or to -*** bug-libtool at gnu.org - -EOF - fi ;; - esac - fi - break - fi - done - IFS="$lt_save_ifs" - MAGIC_CMD="$lt_save_MAGIC_CMD" - ;; -esac]) -MAGIC_CMD="$lt_cv_path_MAGIC_CMD" -if test -n "$MAGIC_CMD"; then - AC_MSG_RESULT($MAGIC_CMD) -else - AC_MSG_RESULT(no) -fi -])# AC_PATH_TOOL_PREFIX - - -# AC_PATH_MAGIC -# ------------- -# find a file program which can recognize a shared library -AC_DEFUN([AC_PATH_MAGIC], -[AC_PATH_TOOL_PREFIX(${ac_tool_prefix}file, /usr/bin$PATH_SEPARATOR$PATH) -if test -z "$lt_cv_path_MAGIC_CMD"; then - if test -n "$ac_tool_prefix"; then - AC_PATH_TOOL_PREFIX(file, /usr/bin$PATH_SEPARATOR$PATH) - else - MAGIC_CMD=: - fi -fi -])# AC_PATH_MAGIC - - -# AC_PROG_LD -# ---------- -# find the pathname to the GNU or non-GNU linker -AC_DEFUN([AC_PROG_LD], -[AC_ARG_WITH([gnu-ld], - [AC_HELP_STRING([--with-gnu-ld], - [assume the C compiler uses GNU ld @<:@default=no@:>@])], - [test "$withval" = no || with_gnu_ld=yes], - [with_gnu_ld=no]) -AC_REQUIRE([LT_AC_PROG_SED])dnl -AC_REQUIRE([AC_PROG_CC])dnl -AC_REQUIRE([AC_CANONICAL_HOST])dnl -AC_REQUIRE([AC_CANONICAL_BUILD])dnl -ac_prog=ld -if test "$GCC" = yes; then - # Check if gcc -print-prog-name=ld gives a path. - AC_MSG_CHECKING([for ld used by $CC]) - case $host in - *-*-mingw*) - # gcc leaves a trailing carriage return which upsets mingw - ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;; - *) - ac_prog=`($CC -print-prog-name=ld) 2>&5` ;; - esac - case $ac_prog in - # Accept absolute paths. - [[\\/]]* | ?:[[\\/]]*) - re_direlt='/[[^/]][[^/]]*/\.\./' - # Canonicalize the pathname of ld - ac_prog=`echo $ac_prog| $SED 's%\\\\%/%g'` - while echo $ac_prog | grep "$re_direlt" > /dev/null 2>&1; do - ac_prog=`echo $ac_prog| $SED "s%$re_direlt%/%"` - done - test -z "$LD" && LD="$ac_prog" - ;; - "") - # If it fails, then pretend we aren't using GCC. - ac_prog=ld - ;; - *) - # If it is relative, then search for the first ld in PATH. - with_gnu_ld=unknown - ;; - esac -elif test "$with_gnu_ld" = yes; then - AC_MSG_CHECKING([for GNU ld]) -else - AC_MSG_CHECKING([for non-GNU ld]) -fi -AC_CACHE_VAL(lt_cv_path_LD, -[if test -z "$LD"; then - lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR - for ac_dir in $PATH; do - IFS="$lt_save_ifs" - test -z "$ac_dir" && ac_dir=. - if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then - lt_cv_path_LD="$ac_dir/$ac_prog" - # Check to see if the program is GNU ld. I'd rather use --version, - # but apparently some variants of GNU ld only accept -v. - # Break only if it was the GNU/non-GNU ld that we prefer. - case `"$lt_cv_path_LD" -v 2>&1 &1 /dev/null 2>&1; then - lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL' - lt_cv_file_magic_cmd='func_win32_libid' - else - lt_cv_deplibs_check_method='file_magic file format pei*-i386(.*architecture: i386)?' - lt_cv_file_magic_cmd='$OBJDUMP -f' - fi - ;; - -darwin* | rhapsody*) - lt_cv_deplibs_check_method=pass_all - ;; - -freebsd* | dragonfly*) - if echo __ELF__ | $CC -E - | grep __ELF__ > /dev/null; then - case $host_cpu in - i*86 ) - # Not sure whether the presence of OpenBSD here was a mistake. - # Let's accept both of them until this is cleared up. - lt_cv_deplibs_check_method='file_magic (FreeBSD|OpenBSD|DragonFly)/i[[3-9]]86 (compact )?demand paged shared library' - lt_cv_file_magic_cmd=/usr/bin/file - lt_cv_file_magic_test_file=`echo /usr/lib/libc.so.*` - ;; - esac - else - lt_cv_deplibs_check_method=pass_all - fi - ;; - -gnu*) - lt_cv_deplibs_check_method=pass_all - ;; - -hpux10.20* | hpux11*) - lt_cv_file_magic_cmd=/usr/bin/file - case $host_cpu in - ia64*) - lt_cv_deplibs_check_method='file_magic (s[[0-9]][[0-9]][[0-9]]|ELF-[[0-9]][[0-9]]) shared object file - IA64' - lt_cv_file_magic_test_file=/usr/lib/hpux32/libc.so - ;; - hppa*64*) - [lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF-[0-9][0-9]) shared object file - PA-RISC [0-9].[0-9]'] - lt_cv_file_magic_test_file=/usr/lib/pa20_64/libc.sl - ;; - *) - lt_cv_deplibs_check_method='file_magic (s[[0-9]][[0-9]][[0-9]]|PA-RISC[[0-9]].[[0-9]]) shared library' - lt_cv_file_magic_test_file=/usr/lib/libc.sl - ;; - esac - ;; - -interix[[3-9]]*) - # PIC code is broken on Interix 3.x, that's why |\.a not |_pic\.a here - lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so|\.a)$' - ;; - -irix5* | irix6* | nonstopux*) - case $LD in - *-32|*"-32 ") libmagic=32-bit;; - *-n32|*"-n32 ") libmagic=N32;; - *-64|*"-64 ") libmagic=64-bit;; - *) libmagic=never-match;; - esac - lt_cv_deplibs_check_method=pass_all - ;; - -# This must be Linux ELF. -linux* | k*bsd*-gnu) - lt_cv_deplibs_check_method=pass_all - ;; - -netbsd*) - if echo __ELF__ | $CC -E - | grep __ELF__ > /dev/null; then - lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so\.[[0-9]]+\.[[0-9]]+|_pic\.a)$' - else - lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so|_pic\.a)$' - fi - ;; - -newos6*) - lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[ML]]SB (executable|dynamic lib)' - lt_cv_file_magic_cmd=/usr/bin/file - lt_cv_file_magic_test_file=/usr/lib/libnls.so - ;; - -nto-qnx*) - lt_cv_deplibs_check_method=unknown - ;; - -openbsd*) - if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then - lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so\.[[0-9]]+\.[[0-9]]+|\.so|_pic\.a)$' - else - lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so\.[[0-9]]+\.[[0-9]]+|_pic\.a)$' - fi - ;; - -osf3* | osf4* | osf5*) - lt_cv_deplibs_check_method=pass_all - ;; - -rdos*) - lt_cv_deplibs_check_method=pass_all - ;; - -solaris*) - lt_cv_deplibs_check_method=pass_all - ;; - -sysv4 | sysv4.3*) - case $host_vendor in - motorola) - lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[ML]]SB (shared object|dynamic lib) M[[0-9]][[0-9]]* Version [[0-9]]' - lt_cv_file_magic_test_file=`echo /usr/lib/libc.so*` - ;; - ncr) - lt_cv_deplibs_check_method=pass_all - ;; - sequent) - lt_cv_file_magic_cmd='/bin/file' - lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[LM]]SB (shared object|dynamic lib )' - ;; - sni) - lt_cv_file_magic_cmd='/bin/file' - lt_cv_deplibs_check_method="file_magic ELF [[0-9]][[0-9]]*-bit [[LM]]SB dynamic lib" - lt_cv_file_magic_test_file=/lib/libc.so - ;; - siemens) - lt_cv_deplibs_check_method=pass_all - ;; - pc) - lt_cv_deplibs_check_method=pass_all - ;; - esac - ;; - -sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) - lt_cv_deplibs_check_method=pass_all - ;; -esac -]) -file_magic_cmd=$lt_cv_file_magic_cmd -deplibs_check_method=$lt_cv_deplibs_check_method -test -z "$deplibs_check_method" && deplibs_check_method=unknown -])# AC_DEPLIBS_CHECK_METHOD - - -# AC_PROG_NM -# ---------- -# find the pathname to a BSD-compatible name lister -AC_DEFUN([AC_PROG_NM], -[AC_CACHE_CHECK([for BSD-compatible nm], lt_cv_path_NM, -[if test -n "$NM"; then - # Let the user override the test. - lt_cv_path_NM="$NM" -else - lt_nm_to_check="${ac_tool_prefix}nm" - if test -n "$ac_tool_prefix" && test "$build" = "$host"; then - lt_nm_to_check="$lt_nm_to_check nm" - fi - for lt_tmp_nm in $lt_nm_to_check; do - lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR - for ac_dir in $PATH /usr/ccs/bin/elf /usr/ccs/bin /usr/ucb /bin; do - IFS="$lt_save_ifs" - test -z "$ac_dir" && ac_dir=. - tmp_nm="$ac_dir/$lt_tmp_nm" - if test -f "$tmp_nm" || test -f "$tmp_nm$ac_exeext" ; then - # Check to see if the nm accepts a BSD-compat flag. - # Adding the `sed 1q' prevents false positives on HP-UX, which says: - # nm: unknown option "B" ignored - # Tru64's nm complains that /dev/null is an invalid object file - case `"$tmp_nm" -B /dev/null 2>&1 | sed '1q'` in - */dev/null* | *'Invalid file or object type'*) - lt_cv_path_NM="$tmp_nm -B" - break - ;; - *) - case `"$tmp_nm" -p /dev/null 2>&1 | sed '1q'` in - */dev/null*) - lt_cv_path_NM="$tmp_nm -p" - break - ;; - *) - lt_cv_path_NM=${lt_cv_path_NM="$tmp_nm"} # keep the first match, but - continue # so that we can try to find one that supports BSD flags - ;; - esac - ;; - esac - fi - done - IFS="$lt_save_ifs" - done - test -z "$lt_cv_path_NM" && lt_cv_path_NM=nm -fi]) -NM="$lt_cv_path_NM" -])# AC_PROG_NM - - -# AC_CHECK_LIBM -# ------------- -# check for math library -AC_DEFUN([AC_CHECK_LIBM], -[AC_REQUIRE([AC_CANONICAL_HOST])dnl -LIBM= -case $host in -*-*-beos* | *-*-cygwin* | *-*-pw32* | *-*-darwin*) - # These system don't have libm, or don't need it - ;; -*-ncr-sysv4.3*) - AC_CHECK_LIB(mw, _mwvalidcheckl, LIBM="-lmw") - AC_CHECK_LIB(m, cos, LIBM="$LIBM -lm") - ;; -*) - AC_CHECK_LIB(m, cos, LIBM="-lm") - ;; -esac -])# AC_CHECK_LIBM - - -# AC_LIBLTDL_CONVENIENCE([DIRECTORY]) -# ----------------------------------- -# sets LIBLTDL to the link flags for the libltdl convenience library and -# LTDLINCL to the include flags for the libltdl header and adds -# --enable-ltdl-convenience to the configure arguments. Note that -# AC_CONFIG_SUBDIRS is not called here. If DIRECTORY is not provided, -# it is assumed to be `libltdl'. LIBLTDL will be prefixed with -# '${top_builddir}/' and LTDLINCL will be prefixed with '${top_srcdir}/' -# (note the single quotes!). If your package is not flat and you're not -# using automake, define top_builddir and top_srcdir appropriately in -# the Makefiles. -AC_DEFUN([AC_LIBLTDL_CONVENIENCE], -[AC_BEFORE([$0],[AC_LIBTOOL_SETUP])dnl - case $enable_ltdl_convenience in - no) AC_MSG_ERROR([this package needs a convenience libltdl]) ;; - "") enable_ltdl_convenience=yes - ac_configure_args="$ac_configure_args --enable-ltdl-convenience" ;; - esac - LIBLTDL='${top_builddir}/'ifelse($#,1,[$1],['libltdl'])/libltdlc.la - LTDLINCL='-I${top_srcdir}/'ifelse($#,1,[$1],['libltdl']) - # For backwards non-gettext consistent compatibility... - INCLTDL="$LTDLINCL" -])# AC_LIBLTDL_CONVENIENCE - - -# AC_LIBLTDL_INSTALLABLE([DIRECTORY]) -# ----------------------------------- -# sets LIBLTDL to the link flags for the libltdl installable library and -# LTDLINCL to the include flags for the libltdl header and adds -# --enable-ltdl-install to the configure arguments. Note that -# AC_CONFIG_SUBDIRS is not called here. If DIRECTORY is not provided, -# and an installed libltdl is not found, it is assumed to be `libltdl'. -# LIBLTDL will be prefixed with '${top_builddir}/'# and LTDLINCL with -# '${top_srcdir}/' (note the single quotes!). If your package is not -# flat and you're not using automake, define top_builddir and top_srcdir -# appropriately in the Makefiles. -# In the future, this macro may have to be called after AC_PROG_LIBTOOL. -AC_DEFUN([AC_LIBLTDL_INSTALLABLE], -[AC_BEFORE([$0],[AC_LIBTOOL_SETUP])dnl - AC_CHECK_LIB(ltdl, lt_dlinit, - [test x"$enable_ltdl_install" != xyes && enable_ltdl_install=no], - [if test x"$enable_ltdl_install" = xno; then - AC_MSG_WARN([libltdl not installed, but installation disabled]) - else - enable_ltdl_install=yes - fi - ]) - if test x"$enable_ltdl_install" = x"yes"; then - ac_configure_args="$ac_configure_args --enable-ltdl-install" - LIBLTDL='${top_builddir}/'ifelse($#,1,[$1],['libltdl'])/libltdl.la - LTDLINCL='-I${top_srcdir}/'ifelse($#,1,[$1],['libltdl']) - else - ac_configure_args="$ac_configure_args --enable-ltdl-install=no" - LIBLTDL="-lltdl" - LTDLINCL= - fi - # For backwards non-gettext consistent compatibility... - INCLTDL="$LTDLINCL" -])# AC_LIBLTDL_INSTALLABLE - - -# AC_LIBTOOL_CXX -# -------------- -# enable support for C++ libraries -AC_DEFUN([AC_LIBTOOL_CXX], -[AC_REQUIRE([_LT_AC_LANG_CXX]) -])# AC_LIBTOOL_CXX - - -# _LT_AC_LANG_CXX -# --------------- -AC_DEFUN([_LT_AC_LANG_CXX], -[AC_REQUIRE([AC_PROG_CXX]) -AC_REQUIRE([_LT_AC_PROG_CXXCPP]) -_LT_AC_SHELL_INIT([tagnames=${tagnames+${tagnames},}CXX]) -])# _LT_AC_LANG_CXX - -# _LT_AC_PROG_CXXCPP -# ------------------ -AC_DEFUN([_LT_AC_PROG_CXXCPP], -[ -AC_REQUIRE([AC_PROG_CXX]) -if test -n "$CXX" && ( test "X$CXX" != "Xno" && - ( (test "X$CXX" = "Xg++" && `g++ -v >/dev/null 2>&1` ) || - (test "X$CXX" != "Xg++"))) ; then - AC_PROG_CXXCPP -fi -])# _LT_AC_PROG_CXXCPP - -# AC_LIBTOOL_F77 -# -------------- -# enable support for Fortran 77 libraries -AC_DEFUN([AC_LIBTOOL_F77], -[AC_REQUIRE([_LT_AC_LANG_F77]) -])# AC_LIBTOOL_F77 - - -# _LT_AC_LANG_F77 -# --------------- -AC_DEFUN([_LT_AC_LANG_F77], -[AC_REQUIRE([AC_PROG_F77]) -_LT_AC_SHELL_INIT([tagnames=${tagnames+${tagnames},}F77]) -])# _LT_AC_LANG_F77 - - -# AC_LIBTOOL_GCJ -# -------------- -# enable support for GCJ libraries -AC_DEFUN([AC_LIBTOOL_GCJ], -[AC_REQUIRE([_LT_AC_LANG_GCJ]) -])# AC_LIBTOOL_GCJ - - -# _LT_AC_LANG_GCJ -# --------------- -AC_DEFUN([_LT_AC_LANG_GCJ], -[AC_PROVIDE_IFELSE([AC_PROG_GCJ],[], - [AC_PROVIDE_IFELSE([A][M_PROG_GCJ],[], - [AC_PROVIDE_IFELSE([LT_AC_PROG_GCJ],[], - [ifdef([AC_PROG_GCJ],[AC_REQUIRE([AC_PROG_GCJ])], - [ifdef([A][M_PROG_GCJ],[AC_REQUIRE([A][M_PROG_GCJ])], - [AC_REQUIRE([A][C_PROG_GCJ_OR_A][M_PROG_GCJ])])])])])]) -_LT_AC_SHELL_INIT([tagnames=${tagnames+${tagnames},}GCJ]) -])# _LT_AC_LANG_GCJ - - -# AC_LIBTOOL_RC -# ------------- -# enable support for Windows resource files -AC_DEFUN([AC_LIBTOOL_RC], -[AC_REQUIRE([LT_AC_PROG_RC]) -_LT_AC_SHELL_INIT([tagnames=${tagnames+${tagnames},}RC]) -])# AC_LIBTOOL_RC - - -# AC_LIBTOOL_LANG_C_CONFIG -# ------------------------ -# Ensure that the configuration vars for the C compiler are -# suitably defined. Those variables are subsequently used by -# AC_LIBTOOL_CONFIG to write the compiler configuration to `libtool'. -AC_DEFUN([AC_LIBTOOL_LANG_C_CONFIG], [_LT_AC_LANG_C_CONFIG]) -AC_DEFUN([_LT_AC_LANG_C_CONFIG], -[lt_save_CC="$CC" -AC_LANG_PUSH(C) - -# Source file extension for C test sources. -ac_ext=c - -# Object file extension for compiled C test sources. -objext=o -_LT_AC_TAGVAR(objext, $1)=$objext - -# Code to be used in simple compile tests -lt_simple_compile_test_code="int some_variable = 0;" - -# Code to be used in simple link tests -lt_simple_link_test_code='int main(){return(0);}' - -_LT_AC_SYS_COMPILER - -# save warnings/boilerplate of simple test code -_LT_COMPILER_BOILERPLATE -_LT_LINKER_BOILERPLATE - -AC_LIBTOOL_PROG_COMPILER_NO_RTTI($1) -AC_LIBTOOL_PROG_COMPILER_PIC($1) -AC_LIBTOOL_PROG_CC_C_O($1) -AC_LIBTOOL_SYS_HARD_LINK_LOCKS($1) -AC_LIBTOOL_PROG_LD_SHLIBS($1) -AC_LIBTOOL_SYS_DYNAMIC_LINKER($1) -AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH($1) -AC_LIBTOOL_SYS_LIB_STRIP -AC_LIBTOOL_DLOPEN_SELF - -# Report which library types will actually be built -AC_MSG_CHECKING([if libtool supports shared libraries]) -AC_MSG_RESULT([$can_build_shared]) - -AC_MSG_CHECKING([whether to build shared libraries]) -test "$can_build_shared" = "no" && enable_shared=no - -# On AIX, shared libraries and static libraries use the same namespace, and -# are all built from PIC. -case $host_os in -aix3*) - test "$enable_shared" = yes && enable_static=no - if test -n "$RANLIB"; then - archive_cmds="$archive_cmds~\$RANLIB \$lib" - postinstall_cmds='$RANLIB $lib' - fi - ;; - -aix4* | aix5*) - if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then - test "$enable_shared" = yes && enable_static=no - fi - ;; -esac -AC_MSG_RESULT([$enable_shared]) - -AC_MSG_CHECKING([whether to build static libraries]) -# Make sure either enable_shared or enable_static is yes. -test "$enable_shared" = yes || enable_static=yes -AC_MSG_RESULT([$enable_static]) - -AC_LIBTOOL_CONFIG($1) - -AC_LANG_POP -CC="$lt_save_CC" -])# AC_LIBTOOL_LANG_C_CONFIG - - -# AC_LIBTOOL_LANG_CXX_CONFIG -# -------------------------- -# Ensure that the configuration vars for the C compiler are -# suitably defined. Those variables are subsequently used by -# AC_LIBTOOL_CONFIG to write the compiler configuration to `libtool'. -AC_DEFUN([AC_LIBTOOL_LANG_CXX_CONFIG], [_LT_AC_LANG_CXX_CONFIG(CXX)]) -AC_DEFUN([_LT_AC_LANG_CXX_CONFIG], -[AC_LANG_PUSH(C++) -AC_REQUIRE([AC_PROG_CXX]) -AC_REQUIRE([_LT_AC_PROG_CXXCPP]) - -_LT_AC_TAGVAR(archive_cmds_need_lc, $1)=no -_LT_AC_TAGVAR(allow_undefined_flag, $1)= -_LT_AC_TAGVAR(always_export_symbols, $1)=no -_LT_AC_TAGVAR(archive_expsym_cmds, $1)= -_LT_AC_TAGVAR(export_dynamic_flag_spec, $1)= -_LT_AC_TAGVAR(hardcode_direct, $1)=no -_LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)= -_LT_AC_TAGVAR(hardcode_libdir_flag_spec_ld, $1)= -_LT_AC_TAGVAR(hardcode_libdir_separator, $1)= -_LT_AC_TAGVAR(hardcode_minus_L, $1)=no -_LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=unsupported -_LT_AC_TAGVAR(hardcode_automatic, $1)=no -_LT_AC_TAGVAR(module_cmds, $1)= -_LT_AC_TAGVAR(module_expsym_cmds, $1)= -_LT_AC_TAGVAR(link_all_deplibs, $1)=unknown -_LT_AC_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds -_LT_AC_TAGVAR(no_undefined_flag, $1)= -_LT_AC_TAGVAR(whole_archive_flag_spec, $1)= -_LT_AC_TAGVAR(enable_shared_with_static_runtimes, $1)=no - -# Dependencies to place before and after the object being linked: -_LT_AC_TAGVAR(predep_objects, $1)= -_LT_AC_TAGVAR(postdep_objects, $1)= -_LT_AC_TAGVAR(predeps, $1)= -_LT_AC_TAGVAR(postdeps, $1)= -_LT_AC_TAGVAR(compiler_lib_search_path, $1)= - -# Source file extension for C++ test sources. -ac_ext=cpp - -# Object file extension for compiled C++ test sources. -objext=o -_LT_AC_TAGVAR(objext, $1)=$objext - -# Code to be used in simple compile tests -lt_simple_compile_test_code="int some_variable = 0;" - -# Code to be used in simple link tests -lt_simple_link_test_code='int main(int, char *[[]]) { return(0); }' - -# ltmain only uses $CC for tagged configurations so make sure $CC is set. -_LT_AC_SYS_COMPILER - -# save warnings/boilerplate of simple test code -_LT_COMPILER_BOILERPLATE -_LT_LINKER_BOILERPLATE - -# Allow CC to be a program name with arguments. -lt_save_CC=$CC -lt_save_LD=$LD -lt_save_GCC=$GCC -GCC=$GXX -lt_save_with_gnu_ld=$with_gnu_ld -lt_save_path_LD=$lt_cv_path_LD -if test -n "${lt_cv_prog_gnu_ldcxx+set}"; then - lt_cv_prog_gnu_ld=$lt_cv_prog_gnu_ldcxx -else - $as_unset lt_cv_prog_gnu_ld -fi -if test -n "${lt_cv_path_LDCXX+set}"; then - lt_cv_path_LD=$lt_cv_path_LDCXX -else - $as_unset lt_cv_path_LD -fi -test -z "${LDCXX+set}" || LD=$LDCXX -CC=${CXX-"c++"} -compiler=$CC -_LT_AC_TAGVAR(compiler, $1)=$CC -_LT_CC_BASENAME([$compiler]) - -# We don't want -fno-exception wen compiling C++ code, so set the -# no_builtin_flag separately -if test "$GXX" = yes; then - _LT_AC_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=' -fno-builtin' -else - _LT_AC_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)= -fi - -if test "$GXX" = yes; then - # Set up default GNU C++ configuration - - AC_PROG_LD - - # Check if GNU C++ uses GNU ld as the underlying linker, since the - # archiving commands below assume that GNU ld is being used. - if test "$with_gnu_ld" = yes; then - _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib' - _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' - - _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}--rpath ${wl}$libdir' - _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic' - - # If archive_cmds runs LD, not CC, wlarc should be empty - # XXX I think wlarc can be eliminated in ltcf-cxx, but I need to - # investigate it a little bit more. (MM) - wlarc='${wl}' - - # ancient GNU ld didn't support --whole-archive et. al. - if eval "`$CC -print-prog-name=ld` --help 2>&1" | \ - grep 'no-whole-archive' > /dev/null; then - _LT_AC_TAGVAR(whole_archive_flag_spec, $1)="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' - else - _LT_AC_TAGVAR(whole_archive_flag_spec, $1)= - fi - else - with_gnu_ld=no - wlarc= - - # A generic and very simple default shared library creation - # command for GNU C++ for the case where it uses the native - # linker, instead of GNU ld. If possible, this setting should - # overridden to take advantage of the native linker features on - # the platform it is being used on. - _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib' - fi - - # Commands to make compiler produce verbose output that lists - # what "hidden" libraries, object files and flags are used when - # linking a shared library. - output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep "\-L"' - -else - GXX=no - with_gnu_ld=no - wlarc= -fi - -# PORTME: fill in a description of your system's C++ link characteristics -AC_MSG_CHECKING([whether the $compiler linker ($LD) supports shared libraries]) -_LT_AC_TAGVAR(ld_shlibs, $1)=yes -case $host_os in - aix3*) - # FIXME: insert proper C++ library support - _LT_AC_TAGVAR(ld_shlibs, $1)=no - ;; - aix4* | aix5*) - if test "$host_cpu" = ia64; then - # On IA64, the linker does run time linking by default, so we don't - # have to do anything special. - aix_use_runtimelinking=no - exp_sym_flag='-Bexport' - no_entry_flag="" - else - aix_use_runtimelinking=no - - # Test if we are trying to use run time linking or normal - # AIX style linking. If -brtl is somewhere in LDFLAGS, we - # need to do runtime linking. - case $host_os in aix4.[[23]]|aix4.[[23]].*|aix5*) - for ld_flag in $LDFLAGS; do - case $ld_flag in - *-brtl*) - aix_use_runtimelinking=yes - break - ;; - esac - done - ;; - esac - - exp_sym_flag='-bexport' - no_entry_flag='-bnoentry' - fi - - # When large executables or shared objects are built, AIX ld can - # have problems creating the table of contents. If linking a library - # or program results in "error TOC overflow" add -mminimal-toc to - # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not - # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS. - - _LT_AC_TAGVAR(archive_cmds, $1)='' - _LT_AC_TAGVAR(hardcode_direct, $1)=yes - _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=':' - _LT_AC_TAGVAR(link_all_deplibs, $1)=yes - - if test "$GXX" = yes; then - case $host_os in aix4.[[012]]|aix4.[[012]].*) - # We only want to do this on AIX 4.2 and lower, the check - # below for broken collect2 doesn't work under 4.3+ - collect2name=`${CC} -print-prog-name=collect2` - if test -f "$collect2name" && \ - strings "$collect2name" | grep resolve_lib_name >/dev/null - then - # We have reworked collect2 - : - else - # We have old collect2 - _LT_AC_TAGVAR(hardcode_direct, $1)=unsupported - # It fails to find uninstalled libraries when the uninstalled - # path is not listed in the libpath. Setting hardcode_minus_L - # to unsupported forces relinking - _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes - _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' - _LT_AC_TAGVAR(hardcode_libdir_separator, $1)= - fi - ;; - esac - shared_flag='-shared' - if test "$aix_use_runtimelinking" = yes; then - shared_flag="$shared_flag "'${wl}-G' - fi - else - # not using gcc - if test "$host_cpu" = ia64; then - # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release - # chokes on -Wl,-G. The following line is correct: - shared_flag='-G' - else - if test "$aix_use_runtimelinking" = yes; then - shared_flag='${wl}-G' - else - shared_flag='${wl}-bM:SRE' - fi - fi - fi - - # It seems that -bexpall does not export symbols beginning with - # underscore (_), so it is better to generate a list of symbols to export. - _LT_AC_TAGVAR(always_export_symbols, $1)=yes - if test "$aix_use_runtimelinking" = yes; then - # Warning - without using the other runtime loading flags (-brtl), - # -berok will link without error, but may produce a broken library. - _LT_AC_TAGVAR(allow_undefined_flag, $1)='-berok' - # Determine the default libpath from the value encoded in an empty executable. - _LT_AC_SYS_LIBPATH_AIX - _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath" - - _LT_AC_TAGVAR(archive_expsym_cmds, $1)="\$CC"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then echo "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag" - else - if test "$host_cpu" = ia64; then - _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R $libdir:/usr/lib:/lib' - _LT_AC_TAGVAR(allow_undefined_flag, $1)="-z nodefs" - _LT_AC_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$exp_sym_flag:\$export_symbols" - else - # Determine the default libpath from the value encoded in an empty executable. - _LT_AC_SYS_LIBPATH_AIX - _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath" - # Warning - without using the other run time loading flags, - # -berok will link without error, but may produce a broken library. - _LT_AC_TAGVAR(no_undefined_flag, $1)=' ${wl}-bernotok' - _LT_AC_TAGVAR(allow_undefined_flag, $1)=' ${wl}-berok' - # Exported symbols can be pulled into shared objects from archives - _LT_AC_TAGVAR(whole_archive_flag_spec, $1)='$convenience' - _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=yes - # This is similar to how AIX traditionally builds its shared libraries. - _LT_AC_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs ${wl}-bnoentry $compiler_flags ${wl}-bE:$export_symbols${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname' - fi - fi - ;; - - beos*) - if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then - _LT_AC_TAGVAR(allow_undefined_flag, $1)=unsupported - # Joseph Beckenbach says some releases of gcc - # support --undefined. This deserves some investigation. FIXME - _LT_AC_TAGVAR(archive_cmds, $1)='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' - else - _LT_AC_TAGVAR(ld_shlibs, $1)=no - fi - ;; - - chorus*) - case $cc_basename in - *) - # FIXME: insert proper C++ library support - _LT_AC_TAGVAR(ld_shlibs, $1)=no - ;; - esac - ;; - - cygwin* | mingw* | pw32*) - # _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1) is actually meaningless, - # as there is no search path for DLLs. - _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' - _LT_AC_TAGVAR(allow_undefined_flag, $1)=unsupported - _LT_AC_TAGVAR(always_export_symbols, $1)=no - _LT_AC_TAGVAR(enable_shared_with_static_runtimes, $1)=yes - - if $LD --help 2>&1 | grep 'auto-import' > /dev/null; then - _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' - # If the export-symbols file already is a .def file (1st line - # is EXPORTS), use it as is; otherwise, prepend... - _LT_AC_TAGVAR(archive_expsym_cmds, $1)='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then - cp $export_symbols $output_objdir/$soname.def; - else - echo EXPORTS > $output_objdir/$soname.def; - cat $export_symbols >> $output_objdir/$soname.def; - fi~ - $CC -shared -nostdlib $output_objdir/$soname.def $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' - else - _LT_AC_TAGVAR(ld_shlibs, $1)=no - fi - ;; - darwin* | rhapsody*) - case $host_os in - rhapsody* | darwin1.[[012]]) - _LT_AC_TAGVAR(allow_undefined_flag, $1)='${wl}-undefined ${wl}suppress' - ;; - *) # Darwin 1.3 on - if test -z ${MACOSX_DEPLOYMENT_TARGET} ; then - _LT_AC_TAGVAR(allow_undefined_flag, $1)='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' - else - case ${MACOSX_DEPLOYMENT_TARGET} in - 10.[[012]]) - _LT_AC_TAGVAR(allow_undefined_flag, $1)='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' - ;; - 10.*) - _LT_AC_TAGVAR(allow_undefined_flag, $1)='${wl}-undefined ${wl}dynamic_lookup' - ;; - esac - fi - ;; - esac - _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=no - _LT_AC_TAGVAR(hardcode_direct, $1)=no - _LT_AC_TAGVAR(hardcode_automatic, $1)=yes - _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=unsupported - _LT_AC_TAGVAR(whole_archive_flag_spec, $1)='' - _LT_AC_TAGVAR(link_all_deplibs, $1)=yes - - if test "$GXX" = yes ; then - lt_int_apple_cc_single_mod=no - output_verbose_link_cmd='echo' - if $CC -dumpspecs 2>&1 | $EGREP 'single_module' >/dev/null ; then - lt_int_apple_cc_single_mod=yes - fi - if test "X$lt_int_apple_cc_single_mod" = Xyes ; then - _LT_AC_TAGVAR(archive_cmds, $1)='$CC -dynamiclib -single_module $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags -install_name $rpath/$soname $verstring' - else - _LT_AC_TAGVAR(archive_cmds, $1)='$CC -r -keep_private_externs -nostdlib -o ${lib}-master.o $libobjs~$CC -dynamiclib $allow_undefined_flag -o $lib ${lib}-master.o $deplibs $compiler_flags -install_name $rpath/$soname $verstring' - fi - _LT_AC_TAGVAR(module_cmds, $1)='$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags' - # Don't fix this by using the ld -exported_symbols_list flag, it doesn't exist in older darwin lds - if test "X$lt_int_apple_cc_single_mod" = Xyes ; then - _LT_AC_TAGVAR(archive_expsym_cmds, $1)='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -dynamiclib -single_module $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags -install_name $rpath/$soname $verstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' - else - _LT_AC_TAGVAR(archive_expsym_cmds, $1)='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -r -keep_private_externs -nostdlib -o ${lib}-master.o $libobjs~$CC -dynamiclib $allow_undefined_flag -o $lib ${lib}-master.o $deplibs $compiler_flags -install_name $rpath/$soname $verstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' - fi - _LT_AC_TAGVAR(module_expsym_cmds, $1)='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' - else - case $cc_basename in - xlc*) - output_verbose_link_cmd='echo' - _LT_AC_TAGVAR(archive_cmds, $1)='$CC -qmkshrobj ${wl}-single_module $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-install_name ${wl}`echo $rpath/$soname` $xlcverstring' - _LT_AC_TAGVAR(module_cmds, $1)='$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags' - # Don't fix this by using the ld -exported_symbols_list flag, it doesn't exist in older darwin lds - _LT_AC_TAGVAR(archive_expsym_cmds, $1)='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -qmkshrobj ${wl}-single_module $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-install_name ${wl}$rpath/$soname $xlcverstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' - _LT_AC_TAGVAR(module_expsym_cmds, $1)='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' - ;; - *) - _LT_AC_TAGVAR(ld_shlibs, $1)=no - ;; - esac - fi - ;; - - dgux*) - case $cc_basename in - ec++*) - # FIXME: insert proper C++ library support - _LT_AC_TAGVAR(ld_shlibs, $1)=no - ;; - ghcx*) - # Green Hills C++ Compiler - # FIXME: insert proper C++ library support - _LT_AC_TAGVAR(ld_shlibs, $1)=no - ;; - *) - # FIXME: insert proper C++ library support - _LT_AC_TAGVAR(ld_shlibs, $1)=no - ;; - esac - ;; - freebsd[[12]]*) - # C++ shared libraries reported to be fairly broken before switch to ELF - _LT_AC_TAGVAR(ld_shlibs, $1)=no - ;; - freebsd-elf*) - _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=no - ;; - freebsd* | dragonfly*) - # FreeBSD 3 and later use GNU C++ and GNU ld with standard ELF - # conventions - _LT_AC_TAGVAR(ld_shlibs, $1)=yes - ;; - gnu*) - ;; - hpux9*) - _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir' - _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=: - _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' - _LT_AC_TAGVAR(hardcode_direct, $1)=yes - _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes # Not in the search PATH, - # but as the default - # location of the library. - - case $cc_basename in - CC*) - # FIXME: insert proper C++ library support - _LT_AC_TAGVAR(ld_shlibs, $1)=no - ;; - aCC*) - _LT_AC_TAGVAR(archive_cmds, $1)='$rm $output_objdir/$soname~$CC -b ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' - # Commands to make compiler produce verbose output that lists - # what "hidden" libraries, object files and flags are used when - # linking a shared library. - # - # There doesn't appear to be a way to prevent this compiler from - # explicitly linking system object files so we need to strip them - # from the output so that they don't get included in the library - # dependencies. - output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | grep "[[-]]L"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; echo $list' - ;; - *) - if test "$GXX" = yes; then - _LT_AC_TAGVAR(archive_cmds, $1)='$rm $output_objdir/$soname~$CC -shared -nostdlib -fPIC ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' - else - # FIXME: insert proper C++ library support - _LT_AC_TAGVAR(ld_shlibs, $1)=no - fi - ;; - esac - ;; - hpux10*|hpux11*) - if test $with_gnu_ld = no; then - _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir' - _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=: - - case $host_cpu in - hppa*64*|ia64*) ;; - *) - _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' - ;; - esac - fi - case $host_cpu in - hppa*64*|ia64*) - _LT_AC_TAGVAR(hardcode_direct, $1)=no - _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no - ;; - *) - _LT_AC_TAGVAR(hardcode_direct, $1)=yes - _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes # Not in the search PATH, - # but as the default - # location of the library. - ;; - esac - - case $cc_basename in - CC*) - # FIXME: insert proper C++ library support - _LT_AC_TAGVAR(ld_shlibs, $1)=no - ;; - aCC*) - case $host_cpu in - hppa*64*) - _LT_AC_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' - ;; - ia64*) - _LT_AC_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' - ;; - *) - _LT_AC_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' - ;; - esac - # Commands to make compiler produce verbose output that lists - # what "hidden" libraries, object files and flags are used when - # linking a shared library. - # - # There doesn't appear to be a way to prevent this compiler from - # explicitly linking system object files so we need to strip them - # from the output so that they don't get included in the library - # dependencies. - output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | grep "\-L"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; echo $list' - ;; - *) - if test "$GXX" = yes; then - if test $with_gnu_ld = no; then - case $host_cpu in - hppa*64*) - _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib -fPIC ${wl}+h ${wl}$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' - ;; - ia64*) - _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib -fPIC ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' - ;; - *) - _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' - ;; - esac - fi - else - # FIXME: insert proper C++ library support - _LT_AC_TAGVAR(ld_shlibs, $1)=no - fi - ;; - esac - ;; - interix[[3-9]]*) - _LT_AC_TAGVAR(hardcode_direct, $1)=no - _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no - _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' - _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' - # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc. - # Instead, shared libraries are loaded at an image base (0x10000000 by - # default) and relocated if they conflict, which is a slow very memory - # consuming and fragmenting process. To avoid this, we pick a random, - # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link - # time. Moving up from 0x10000000 also allows more sbrk(2) space. - _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' - _LT_AC_TAGVAR(archive_expsym_cmds, $1)='sed "s,^,_," $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--retain-symbols-file,$output_objdir/$soname.expsym ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' - ;; - irix5* | irix6*) - case $cc_basename in - CC*) - # SGI C++ - _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -all -multigot $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib' - - # Archives containing C++ object files must be created using - # "CC -ar", where "CC" is the IRIX C++ compiler. This is - # necessary to make sure instantiated templates are included - # in the archive. - _LT_AC_TAGVAR(old_archive_cmds, $1)='$CC -ar -WR,-u -o $oldlib $oldobjs' - ;; - *) - if test "$GXX" = yes; then - if test "$with_gnu_ld" = no; then - _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' - else - _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` -o $lib' - fi - fi - _LT_AC_TAGVAR(link_all_deplibs, $1)=yes - ;; - esac - _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' - _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=: - ;; - linux* | k*bsd*-gnu) - case $cc_basename in - KCC*) - # Kuck and Associates, Inc. (KAI) C++ Compiler - - # KCC will only create a shared library if the output file - # ends with ".so" (or ".sl" for HP-UX), so rename the library - # to its proper name (with version) after linking. - _LT_AC_TAGVAR(archive_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib' - _LT_AC_TAGVAR(archive_expsym_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib ${wl}-retain-symbols-file,$export_symbols; mv \$templib $lib' - # Commands to make compiler produce verbose output that lists - # what "hidden" libraries, object files and flags are used when - # linking a shared library. - # - # There doesn't appear to be a way to prevent this compiler from - # explicitly linking system object files so we need to strip them - # from the output so that they don't get included in the library - # dependencies. - output_verbose_link_cmd='templist=`$CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1 | grep "ld"`; rm -f libconftest$shared_ext; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; echo $list' - - _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}--rpath,$libdir' - _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic' - - # Archives containing C++ object files must be created using - # "CC -Bstatic", where "CC" is the KAI C++ compiler. - _LT_AC_TAGVAR(old_archive_cmds, $1)='$CC -Bstatic -o $oldlib $oldobjs' - ;; - icpc*) - # Intel C++ - with_gnu_ld=yes - # version 8.0 and above of icpc choke on multiply defined symbols - # if we add $predep_objects and $postdep_objects, however 7.1 and - # earlier do not add the objects themselves. - case `$CC -V 2>&1` in - *"Version 7."*) - _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib' - _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' - ;; - *) # Version 8.0 or newer - tmp_idyn= - case $host_cpu in - ia64*) tmp_idyn=' -i_dynamic';; - esac - _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared'"$tmp_idyn"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' - _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -shared'"$tmp_idyn"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' - ;; - esac - _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=no - _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' - _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic' - _LT_AC_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive$convenience ${wl}--no-whole-archive' - ;; - pgCC*) - # Portland Group C++ compiler - _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname -o $lib' - _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname ${wl}-retain-symbols-file ${wl}$export_symbols -o $lib' - - _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}--rpath ${wl}$libdir' - _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic' - _LT_AC_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $echo \"$new_convenience\"` ${wl}--no-whole-archive' - ;; - cxx*) - # Compaq C++ - _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib' - _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib ${wl}-retain-symbols-file $wl$export_symbols' - - runpath_var=LD_RUN_PATH - _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir' - _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=: - - # Commands to make compiler produce verbose output that lists - # what "hidden" libraries, object files and flags are used when - # linking a shared library. - # - # There doesn't appear to be a way to prevent this compiler from - # explicitly linking system object files so we need to strip them - # from the output so that they don't get included in the library - # dependencies. - output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep "ld"`; templist=`echo $templist | $SED "s/\(^.*ld.*\)\( .*ld .*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; echo $list' - ;; - *) - case `$CC -V 2>&1 | sed 5q` in - *Sun\ C*) - # Sun C++ 5.9 - _LT_AC_TAGVAR(no_undefined_flag, $1)=' -zdefs' - _LT_AC_TAGVAR(archive_cmds, $1)='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' - _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-retain-symbols-file ${wl}$export_symbols' - _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' - _LT_AC_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; $echo \"$new_convenience\"` ${wl}--no-whole-archive' - - # Not sure whether something based on - # $CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1 - # would be better. - output_verbose_link_cmd='echo' - - # Archives containing C++ object files must be created using - # "CC -xar", where "CC" is the Sun C++ compiler. This is - # necessary to make sure instantiated templates are included - # in the archive. - _LT_AC_TAGVAR(old_archive_cmds, $1)='$CC -xar -o $oldlib $oldobjs' - ;; - esac - ;; - esac - ;; - lynxos*) - # FIXME: insert proper C++ library support - _LT_AC_TAGVAR(ld_shlibs, $1)=no - ;; - m88k*) - # FIXME: insert proper C++ library support - _LT_AC_TAGVAR(ld_shlibs, $1)=no - ;; - mvs*) - case $cc_basename in - cxx*) - # FIXME: insert proper C++ library support - _LT_AC_TAGVAR(ld_shlibs, $1)=no - ;; - *) - # FIXME: insert proper C++ library support - _LT_AC_TAGVAR(ld_shlibs, $1)=no - ;; - esac - ;; - netbsd*) - if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then - _LT_AC_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $predep_objects $libobjs $deplibs $postdep_objects $linker_flags' - wlarc= - _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' - _LT_AC_TAGVAR(hardcode_direct, $1)=yes - _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no - fi - # Workaround some broken pre-1.5 toolchains - output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep conftest.$objext | $SED -e "s:-lgcc -lc -lgcc::"' - ;; - openbsd2*) - # C++ shared libraries are fairly broken - _LT_AC_TAGVAR(ld_shlibs, $1)=no - ;; - openbsd*) - if test -f /usr/libexec/ld.so; then - _LT_AC_TAGVAR(hardcode_direct, $1)=yes - _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no - _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib' - _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' - if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then - _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-retain-symbols-file,$export_symbols -o $lib' - _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' - _LT_AC_TAGVAR(whole_archive_flag_spec, $1)="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' - fi - output_verbose_link_cmd='echo' - else - _LT_AC_TAGVAR(ld_shlibs, $1)=no - fi - ;; - osf3*) - case $cc_basename in - KCC*) - # Kuck and Associates, Inc. (KAI) C++ Compiler - - # KCC will only create a shared library if the output file - # ends with ".so" (or ".sl" for HP-UX), so rename the library - # to its proper name (with version) after linking. - _LT_AC_TAGVAR(archive_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib' - - _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' - _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=: - - # Archives containing C++ object files must be created using - # "CC -Bstatic", where "CC" is the KAI C++ compiler. - _LT_AC_TAGVAR(old_archive_cmds, $1)='$CC -Bstatic -o $oldlib $oldobjs' - - ;; - RCC*) - # Rational C++ 2.4.1 - # FIXME: insert proper C++ library support - _LT_AC_TAGVAR(ld_shlibs, $1)=no - ;; - cxx*) - _LT_AC_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*' - _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $soname `test -n "$verstring" && echo ${wl}-set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib' - - _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' - _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=: - - # Commands to make compiler produce verbose output that lists - # what "hidden" libraries, object files and flags are used when - # linking a shared library. - # - # There doesn't appear to be a way to prevent this compiler from - # explicitly linking system object files so we need to strip them - # from the output so that they don't get included in the library - # dependencies. - output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep "ld" | grep -v "ld:"`; templist=`echo $templist | $SED "s/\(^.*ld.*\)\( .*ld.*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; echo $list' - ;; - *) - if test "$GXX" = yes && test "$with_gnu_ld" = no; then - _LT_AC_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*' - _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' - - _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' - _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=: - - # Commands to make compiler produce verbose output that lists - # what "hidden" libraries, object files and flags are used when - # linking a shared library. - output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep "\-L"' - - else - # FIXME: insert proper C++ library support - _LT_AC_TAGVAR(ld_shlibs, $1)=no - fi - ;; - esac - ;; - osf4* | osf5*) - case $cc_basename in - KCC*) - # Kuck and Associates, Inc. (KAI) C++ Compiler - - # KCC will only create a shared library if the output file - # ends with ".so" (or ".sl" for HP-UX), so rename the library - # to its proper name (with version) after linking. - _LT_AC_TAGVAR(archive_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib' - - _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' - _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=: - - # Archives containing C++ object files must be created using - # the KAI C++ compiler. - _LT_AC_TAGVAR(old_archive_cmds, $1)='$CC -o $oldlib $oldobjs' - ;; - RCC*) - # Rational C++ 2.4.1 - # FIXME: insert proper C++ library support - _LT_AC_TAGVAR(ld_shlibs, $1)=no - ;; - cxx*) - _LT_AC_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*' - _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib' - _LT_AC_TAGVAR(archive_expsym_cmds, $1)='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done~ - echo "-hidden">> $lib.exp~ - $CC -shared$allow_undefined_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname -Wl,-input -Wl,$lib.exp `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib~ - $rm $lib.exp' - - _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir' - _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=: - - # Commands to make compiler produce verbose output that lists - # what "hidden" libraries, object files and flags are used when - # linking a shared library. - # - # There doesn't appear to be a way to prevent this compiler from - # explicitly linking system object files so we need to strip them - # from the output so that they don't get included in the library - # dependencies. - output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep "ld" | grep -v "ld:"`; templist=`echo $templist | $SED "s/\(^.*ld.*\)\( .*ld.*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; echo $list' - ;; - *) - if test "$GXX" = yes && test "$with_gnu_ld" = no; then - _LT_AC_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*' - _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' - - _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' - _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=: - - # Commands to make compiler produce verbose output that lists - # what "hidden" libraries, object files and flags are used when - # linking a shared library. - output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep "\-L"' - - else - # FIXME: insert proper C++ library support - _LT_AC_TAGVAR(ld_shlibs, $1)=no - fi - ;; - esac - ;; - psos*) - # FIXME: insert proper C++ library support - _LT_AC_TAGVAR(ld_shlibs, $1)=no - ;; - sunos4*) - case $cc_basename in - CC*) - # Sun C++ 4.x - # FIXME: insert proper C++ library support - _LT_AC_TAGVAR(ld_shlibs, $1)=no - ;; - lcc*) - # Lucid - # FIXME: insert proper C++ library support - _LT_AC_TAGVAR(ld_shlibs, $1)=no - ;; - *) - # FIXME: insert proper C++ library support - _LT_AC_TAGVAR(ld_shlibs, $1)=no - ;; - esac - ;; - solaris*) - case $cc_basename in - CC*) - # Sun C++ 4.2, 5.x and Centerline C++ - _LT_AC_TAGVAR(archive_cmds_need_lc,$1)=yes - _LT_AC_TAGVAR(no_undefined_flag, $1)=' -zdefs' - _LT_AC_TAGVAR(archive_cmds, $1)='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' - _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~ - $CC -G${allow_undefined_flag} ${wl}-M ${wl}$lib.exp -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$rm $lib.exp' - - _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' - _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no - case $host_os in - solaris2.[[0-5]] | solaris2.[[0-5]].*) ;; - *) - # The compiler driver will combine and reorder linker options, - # but understands `-z linker_flag'. - # Supported since Solaris 2.6 (maybe 2.5.1?) - _LT_AC_TAGVAR(whole_archive_flag_spec, $1)='-z allextract$convenience -z defaultextract' - ;; - esac - _LT_AC_TAGVAR(link_all_deplibs, $1)=yes - - output_verbose_link_cmd='echo' - - # Archives containing C++ object files must be created using - # "CC -xar", where "CC" is the Sun C++ compiler. This is - # necessary to make sure instantiated templates are included - # in the archive. - _LT_AC_TAGVAR(old_archive_cmds, $1)='$CC -xar -o $oldlib $oldobjs' - ;; - gcx*) - # Green Hills C++ Compiler - _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib' - - # The C++ compiler must be used to create the archive. - _LT_AC_TAGVAR(old_archive_cmds, $1)='$CC $LDFLAGS -archive -o $oldlib $oldobjs' - ;; - *) - # GNU C++ compiler with Solaris linker - if test "$GXX" = yes && test "$with_gnu_ld" = no; then - _LT_AC_TAGVAR(no_undefined_flag, $1)=' ${wl}-z ${wl}defs' - if $CC --version | grep -v '^2\.7' > /dev/null; then - _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $LDFLAGS $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib' - _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~ - $CC -shared -nostdlib ${wl}-M $wl$lib.exp -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$rm $lib.exp' - - # Commands to make compiler produce verbose output that lists - # what "hidden" libraries, object files and flags are used when - # linking a shared library. - output_verbose_link_cmd="$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep \"\-L\"" - else - # g++ 2.7 appears to require `-G' NOT `-shared' on this - # platform. - _LT_AC_TAGVAR(archive_cmds, $1)='$CC -G -nostdlib $LDFLAGS $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib' - _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~ - $CC -G -nostdlib ${wl}-M $wl$lib.exp -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$rm $lib.exp' - - # Commands to make compiler produce verbose output that lists - # what "hidden" libraries, object files and flags are used when - # linking a shared library. - output_verbose_link_cmd="$CC -G $CFLAGS -v conftest.$objext 2>&1 | grep \"\-L\"" - fi - - _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R $wl$libdir' - case $host_os in - solaris2.[[0-5]] | solaris2.[[0-5]].*) ;; - *) - _LT_AC_TAGVAR(whole_archive_flag_spec, $1)='${wl}-z ${wl}allextract$convenience ${wl}-z ${wl}defaultextract' - ;; - esac - fi - ;; - esac - ;; - sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[[01]].[[10]]* | unixware7* | sco3.2v5.0.[[024]]*) - _LT_AC_TAGVAR(no_undefined_flag, $1)='${wl}-z,text' - _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=no - _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no - runpath_var='LD_RUN_PATH' - - case $cc_basename in - CC*) - _LT_AC_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - ;; - *) - _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - ;; - esac - ;; - sysv5* | sco3.2v5* | sco5v6*) - # Note: We can NOT use -z defs as we might desire, because we do not - # link with -lc, and that would cause any symbols used from libc to - # always be unresolved, which means just about no library would - # ever link correctly. If we're not using GNU ld we use -z text - # though, which does catch some bad symbols but isn't as heavy-handed - # as -z defs. - # For security reasons, it is highly recommended that you always - # use absolute paths for naming shared libraries, and exclude the - # DT_RUNPATH tag from executables and libraries. But doing so - # requires that you compile everything twice, which is a pain. - # So that behaviour is only enabled if SCOABSPATH is set to a - # non-empty value in the environment. Most likely only useful for - # creating official distributions of packages. - # This is a hack until libtool officially supports absolute path - # names for shared libraries. - _LT_AC_TAGVAR(no_undefined_flag, $1)='${wl}-z,text' - _LT_AC_TAGVAR(allow_undefined_flag, $1)='${wl}-z,nodefs' - _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=no - _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no - _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='`test -z "$SCOABSPATH" && echo ${wl}-R,$libdir`' - _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=':' - _LT_AC_TAGVAR(link_all_deplibs, $1)=yes - _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-Bexport' - runpath_var='LD_RUN_PATH' - - case $cc_basename in - CC*) - _LT_AC_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags' - _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags' - ;; - *) - _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags' - _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags' - ;; - esac - ;; - tandem*) - case $cc_basename in - NCC*) - # NonStop-UX NCC 3.20 - # FIXME: insert proper C++ library support - _LT_AC_TAGVAR(ld_shlibs, $1)=no - ;; - *) - # FIXME: insert proper C++ library support - _LT_AC_TAGVAR(ld_shlibs, $1)=no - ;; - esac - ;; - vxworks*) - # FIXME: insert proper C++ library support - _LT_AC_TAGVAR(ld_shlibs, $1)=no - ;; - *) - # FIXME: insert proper C++ library support - _LT_AC_TAGVAR(ld_shlibs, $1)=no - ;; -esac -AC_MSG_RESULT([$_LT_AC_TAGVAR(ld_shlibs, $1)]) -test "$_LT_AC_TAGVAR(ld_shlibs, $1)" = no && can_build_shared=no - -_LT_AC_TAGVAR(GCC, $1)="$GXX" -_LT_AC_TAGVAR(LD, $1)="$LD" - -AC_LIBTOOL_POSTDEP_PREDEP($1) -AC_LIBTOOL_PROG_COMPILER_PIC($1) -AC_LIBTOOL_PROG_CC_C_O($1) -AC_LIBTOOL_SYS_HARD_LINK_LOCKS($1) -AC_LIBTOOL_PROG_LD_SHLIBS($1) -AC_LIBTOOL_SYS_DYNAMIC_LINKER($1) -AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH($1) - -AC_LIBTOOL_CONFIG($1) - -AC_LANG_POP -CC=$lt_save_CC -LDCXX=$LD -LD=$lt_save_LD -GCC=$lt_save_GCC -with_gnu_ldcxx=$with_gnu_ld -with_gnu_ld=$lt_save_with_gnu_ld -lt_cv_path_LDCXX=$lt_cv_path_LD -lt_cv_path_LD=$lt_save_path_LD -lt_cv_prog_gnu_ldcxx=$lt_cv_prog_gnu_ld -lt_cv_prog_gnu_ld=$lt_save_with_gnu_ld -])# AC_LIBTOOL_LANG_CXX_CONFIG - -# AC_LIBTOOL_POSTDEP_PREDEP([TAGNAME]) -# ------------------------------------ -# Figure out "hidden" library dependencies from verbose -# compiler output when linking a shared library. -# Parse the compiler output and extract the necessary -# objects, libraries and library flags. -AC_DEFUN([AC_LIBTOOL_POSTDEP_PREDEP],[ -dnl we can't use the lt_simple_compile_test_code here, -dnl because it contains code intended for an executable, -dnl not a library. It's possible we should let each -dnl tag define a new lt_????_link_test_code variable, -dnl but it's only used here... -ifelse([$1],[],[cat > conftest.$ac_ext < conftest.$ac_ext < conftest.$ac_ext < conftest.$ac_ext <&1 | sed 5q` in - *Sun\ C*) - # Sun C++ 5.9 - # - # The more standards-conforming stlport4 library is - # incompatible with the Cstd library. Avoid specifying - # it if it's in CXXFLAGS. Ignore libCrun as - # -library=stlport4 depends on it. - case " $CXX $CXXFLAGS " in - *" -library=stlport4 "*) - solaris_use_stlport4=yes - ;; - esac - if test "$solaris_use_stlport4" != yes; then - _LT_AC_TAGVAR(postdeps,$1)='-library=Cstd -library=Crun' - fi - ;; - esac - ;; - -solaris*) - case $cc_basename in - CC*) - # The more standards-conforming stlport4 library is - # incompatible with the Cstd library. Avoid specifying - # it if it's in CXXFLAGS. Ignore libCrun as - # -library=stlport4 depends on it. - case " $CXX $CXXFLAGS " in - *" -library=stlport4 "*) - solaris_use_stlport4=yes - ;; - esac - - # Adding this requires a known-good setup of shared libraries for - # Sun compiler versions before 5.6, else PIC objects from an old - # archive will be linked into the output, leading to subtle bugs. - if test "$solaris_use_stlport4" != yes; then - _LT_AC_TAGVAR(postdeps,$1)='-library=Cstd -library=Crun' - fi - ;; - esac - ;; -esac -]) - -case " $_LT_AC_TAGVAR(postdeps, $1) " in -*" -lc "*) _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=no ;; -esac -])# AC_LIBTOOL_POSTDEP_PREDEP - -# AC_LIBTOOL_LANG_F77_CONFIG -# -------------------------- -# Ensure that the configuration vars for the C compiler are -# suitably defined. Those variables are subsequently used by -# AC_LIBTOOL_CONFIG to write the compiler configuration to `libtool'. -AC_DEFUN([AC_LIBTOOL_LANG_F77_CONFIG], [_LT_AC_LANG_F77_CONFIG(F77)]) -AC_DEFUN([_LT_AC_LANG_F77_CONFIG], -[AC_REQUIRE([AC_PROG_F77]) -AC_LANG_PUSH(Fortran 77) - -_LT_AC_TAGVAR(archive_cmds_need_lc, $1)=no -_LT_AC_TAGVAR(allow_undefined_flag, $1)= -_LT_AC_TAGVAR(always_export_symbols, $1)=no -_LT_AC_TAGVAR(archive_expsym_cmds, $1)= -_LT_AC_TAGVAR(export_dynamic_flag_spec, $1)= -_LT_AC_TAGVAR(hardcode_direct, $1)=no -_LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)= -_LT_AC_TAGVAR(hardcode_libdir_flag_spec_ld, $1)= -_LT_AC_TAGVAR(hardcode_libdir_separator, $1)= -_LT_AC_TAGVAR(hardcode_minus_L, $1)=no -_LT_AC_TAGVAR(hardcode_automatic, $1)=no -_LT_AC_TAGVAR(module_cmds, $1)= -_LT_AC_TAGVAR(module_expsym_cmds, $1)= -_LT_AC_TAGVAR(link_all_deplibs, $1)=unknown -_LT_AC_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds -_LT_AC_TAGVAR(no_undefined_flag, $1)= -_LT_AC_TAGVAR(whole_archive_flag_spec, $1)= -_LT_AC_TAGVAR(enable_shared_with_static_runtimes, $1)=no - -# Source file extension for f77 test sources. -ac_ext=f - -# Object file extension for compiled f77 test sources. -objext=o -_LT_AC_TAGVAR(objext, $1)=$objext - -# Code to be used in simple compile tests -lt_simple_compile_test_code="\ - subroutine t - return - end -" - -# Code to be used in simple link tests -lt_simple_link_test_code="\ - program t - end -" - -# ltmain only uses $CC for tagged configurations so make sure $CC is set. -_LT_AC_SYS_COMPILER - -# save warnings/boilerplate of simple test code -_LT_COMPILER_BOILERPLATE -_LT_LINKER_BOILERPLATE - -# Allow CC to be a program name with arguments. -lt_save_CC="$CC" -CC=${F77-"f77"} -compiler=$CC -_LT_AC_TAGVAR(compiler, $1)=$CC -_LT_CC_BASENAME([$compiler]) - -AC_MSG_CHECKING([if libtool supports shared libraries]) -AC_MSG_RESULT([$can_build_shared]) - -AC_MSG_CHECKING([whether to build shared libraries]) -test "$can_build_shared" = "no" && enable_shared=no - -# On AIX, shared libraries and static libraries use the same namespace, and -# are all built from PIC. -case $host_os in -aix3*) - test "$enable_shared" = yes && enable_static=no - if test -n "$RANLIB"; then - archive_cmds="$archive_cmds~\$RANLIB \$lib" - postinstall_cmds='$RANLIB $lib' - fi - ;; -aix4* | aix5*) - if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then - test "$enable_shared" = yes && enable_static=no - fi - ;; -esac -AC_MSG_RESULT([$enable_shared]) - -AC_MSG_CHECKING([whether to build static libraries]) -# Make sure either enable_shared or enable_static is yes. -test "$enable_shared" = yes || enable_static=yes -AC_MSG_RESULT([$enable_static]) - -_LT_AC_TAGVAR(GCC, $1)="$G77" -_LT_AC_TAGVAR(LD, $1)="$LD" - -AC_LIBTOOL_PROG_COMPILER_PIC($1) -AC_LIBTOOL_PROG_CC_C_O($1) -AC_LIBTOOL_SYS_HARD_LINK_LOCKS($1) -AC_LIBTOOL_PROG_LD_SHLIBS($1) -AC_LIBTOOL_SYS_DYNAMIC_LINKER($1) -AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH($1) - -AC_LIBTOOL_CONFIG($1) - -AC_LANG_POP -CC="$lt_save_CC" -])# AC_LIBTOOL_LANG_F77_CONFIG - - -# AC_LIBTOOL_LANG_GCJ_CONFIG -# -------------------------- -# Ensure that the configuration vars for the C compiler are -# suitably defined. Those variables are subsequently used by -# AC_LIBTOOL_CONFIG to write the compiler configuration to `libtool'. -AC_DEFUN([AC_LIBTOOL_LANG_GCJ_CONFIG], [_LT_AC_LANG_GCJ_CONFIG(GCJ)]) -AC_DEFUN([_LT_AC_LANG_GCJ_CONFIG], -[AC_LANG_SAVE - -# Source file extension for Java test sources. -ac_ext=java - -# Object file extension for compiled Java test sources. -objext=o -_LT_AC_TAGVAR(objext, $1)=$objext - -# Code to be used in simple compile tests -lt_simple_compile_test_code="class foo {}" - -# Code to be used in simple link tests -lt_simple_link_test_code='public class conftest { public static void main(String[[]] argv) {}; }' - -# ltmain only uses $CC for tagged configurations so make sure $CC is set. -_LT_AC_SYS_COMPILER - -# save warnings/boilerplate of simple test code -_LT_COMPILER_BOILERPLATE -_LT_LINKER_BOILERPLATE - -# Allow CC to be a program name with arguments. -lt_save_CC="$CC" -CC=${GCJ-"gcj"} -compiler=$CC -_LT_AC_TAGVAR(compiler, $1)=$CC -_LT_CC_BASENAME([$compiler]) - -# GCJ did not exist at the time GCC didn't implicitly link libc in. -_LT_AC_TAGVAR(archive_cmds_need_lc, $1)=no - -_LT_AC_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds - -AC_LIBTOOL_PROG_COMPILER_NO_RTTI($1) -AC_LIBTOOL_PROG_COMPILER_PIC($1) -AC_LIBTOOL_PROG_CC_C_O($1) -AC_LIBTOOL_SYS_HARD_LINK_LOCKS($1) -AC_LIBTOOL_PROG_LD_SHLIBS($1) -AC_LIBTOOL_SYS_DYNAMIC_LINKER($1) -AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH($1) - -AC_LIBTOOL_CONFIG($1) - -AC_LANG_RESTORE -CC="$lt_save_CC" -])# AC_LIBTOOL_LANG_GCJ_CONFIG - - -# AC_LIBTOOL_LANG_RC_CONFIG -# ------------------------- -# Ensure that the configuration vars for the Windows resource compiler are -# suitably defined. Those variables are subsequently used by -# AC_LIBTOOL_CONFIG to write the compiler configuration to `libtool'. -AC_DEFUN([AC_LIBTOOL_LANG_RC_CONFIG], [_LT_AC_LANG_RC_CONFIG(RC)]) -AC_DEFUN([_LT_AC_LANG_RC_CONFIG], -[AC_LANG_SAVE - -# Source file extension for RC test sources. -ac_ext=rc - -# Object file extension for compiled RC test sources. -objext=o -_LT_AC_TAGVAR(objext, $1)=$objext - -# Code to be used in simple compile tests -lt_simple_compile_test_code='sample MENU { MENUITEM "&Soup", 100, CHECKED }' - -# Code to be used in simple link tests -lt_simple_link_test_code="$lt_simple_compile_test_code" - -# ltmain only uses $CC for tagged configurations so make sure $CC is set. -_LT_AC_SYS_COMPILER - -# save warnings/boilerplate of simple test code -_LT_COMPILER_BOILERPLATE -_LT_LINKER_BOILERPLATE - -# Allow CC to be a program name with arguments. -lt_save_CC="$CC" -CC=${RC-"windres"} -compiler=$CC -_LT_AC_TAGVAR(compiler, $1)=$CC -_LT_CC_BASENAME([$compiler]) -_LT_AC_TAGVAR(lt_cv_prog_compiler_c_o, $1)=yes - -AC_LIBTOOL_CONFIG($1) - -AC_LANG_RESTORE -CC="$lt_save_CC" -])# AC_LIBTOOL_LANG_RC_CONFIG - - -# AC_LIBTOOL_CONFIG([TAGNAME]) -# ---------------------------- -# If TAGNAME is not passed, then create an initial libtool script -# with a default configuration from the untagged config vars. Otherwise -# add code to config.status for appending the configuration named by -# TAGNAME from the matching tagged config vars. -AC_DEFUN([AC_LIBTOOL_CONFIG], -[# The else clause should only fire when bootstrapping the -# libtool distribution, otherwise you forgot to ship ltmain.sh -# with your package, and you will get complaints that there are -# no rules to generate ltmain.sh. -if test -f "$ltmain"; then - # See if we are running on zsh, and set the options which allow our commands through - # without removal of \ escapes. - if test -n "${ZSH_VERSION+set}" ; then - setopt NO_GLOB_SUBST - fi - # Now quote all the things that may contain metacharacters while being - # careful not to overquote the AC_SUBSTed values. We take copies of the - # variables and quote the copies for generation of the libtool script. - for var in echo old_CC old_CFLAGS AR AR_FLAGS EGREP RANLIB LN_S LTCC LTCFLAGS NM \ - SED SHELL STRIP \ - libname_spec library_names_spec soname_spec extract_expsyms_cmds \ - old_striplib striplib file_magic_cmd finish_cmds finish_eval \ - deplibs_check_method reload_flag reload_cmds need_locks \ - lt_cv_sys_global_symbol_pipe lt_cv_sys_global_symbol_to_cdecl \ - lt_cv_sys_global_symbol_to_c_name_address \ - sys_lib_search_path_spec sys_lib_dlsearch_path_spec \ - old_postinstall_cmds old_postuninstall_cmds \ - _LT_AC_TAGVAR(compiler, $1) \ - _LT_AC_TAGVAR(CC, $1) \ - _LT_AC_TAGVAR(LD, $1) \ - _LT_AC_TAGVAR(lt_prog_compiler_wl, $1) \ - _LT_AC_TAGVAR(lt_prog_compiler_pic, $1) \ - _LT_AC_TAGVAR(lt_prog_compiler_static, $1) \ - _LT_AC_TAGVAR(lt_prog_compiler_no_builtin_flag, $1) \ - _LT_AC_TAGVAR(export_dynamic_flag_spec, $1) \ - _LT_AC_TAGVAR(thread_safe_flag_spec, $1) \ - _LT_AC_TAGVAR(whole_archive_flag_spec, $1) \ - _LT_AC_TAGVAR(enable_shared_with_static_runtimes, $1) \ - _LT_AC_TAGVAR(old_archive_cmds, $1) \ - _LT_AC_TAGVAR(old_archive_from_new_cmds, $1) \ - _LT_AC_TAGVAR(predep_objects, $1) \ - _LT_AC_TAGVAR(postdep_objects, $1) \ - _LT_AC_TAGVAR(predeps, $1) \ - _LT_AC_TAGVAR(postdeps, $1) \ - _LT_AC_TAGVAR(compiler_lib_search_path, $1) \ - _LT_AC_TAGVAR(archive_cmds, $1) \ - _LT_AC_TAGVAR(archive_expsym_cmds, $1) \ - _LT_AC_TAGVAR(postinstall_cmds, $1) \ - _LT_AC_TAGVAR(postuninstall_cmds, $1) \ - _LT_AC_TAGVAR(old_archive_from_expsyms_cmds, $1) \ - _LT_AC_TAGVAR(allow_undefined_flag, $1) \ - _LT_AC_TAGVAR(no_undefined_flag, $1) \ - _LT_AC_TAGVAR(export_symbols_cmds, $1) \ - _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1) \ - _LT_AC_TAGVAR(hardcode_libdir_flag_spec_ld, $1) \ - _LT_AC_TAGVAR(hardcode_libdir_separator, $1) \ - _LT_AC_TAGVAR(hardcode_automatic, $1) \ - _LT_AC_TAGVAR(module_cmds, $1) \ - _LT_AC_TAGVAR(module_expsym_cmds, $1) \ - _LT_AC_TAGVAR(lt_cv_prog_compiler_c_o, $1) \ - _LT_AC_TAGVAR(fix_srcfile_path, $1) \ - _LT_AC_TAGVAR(exclude_expsyms, $1) \ - _LT_AC_TAGVAR(include_expsyms, $1); do - - case $var in - _LT_AC_TAGVAR(old_archive_cmds, $1) | \ - _LT_AC_TAGVAR(old_archive_from_new_cmds, $1) | \ - _LT_AC_TAGVAR(archive_cmds, $1) | \ - _LT_AC_TAGVAR(archive_expsym_cmds, $1) | \ - _LT_AC_TAGVAR(module_cmds, $1) | \ - _LT_AC_TAGVAR(module_expsym_cmds, $1) | \ - _LT_AC_TAGVAR(old_archive_from_expsyms_cmds, $1) | \ - _LT_AC_TAGVAR(export_symbols_cmds, $1) | \ - extract_expsyms_cmds | reload_cmds | finish_cmds | \ - postinstall_cmds | postuninstall_cmds | \ - old_postinstall_cmds | old_postuninstall_cmds | \ - sys_lib_search_path_spec | sys_lib_dlsearch_path_spec) - # Double-quote double-evaled strings. - eval "lt_$var=\\\"\`\$echo \"X\$$var\" | \$Xsed -e \"\$double_quote_subst\" -e \"\$sed_quote_subst\" -e \"\$delay_variable_subst\"\`\\\"" - ;; - *) - eval "lt_$var=\\\"\`\$echo \"X\$$var\" | \$Xsed -e \"\$sed_quote_subst\"\`\\\"" - ;; - esac - done - - case $lt_echo in - *'\[$]0 --fallback-echo"') - lt_echo=`$echo "X$lt_echo" | $Xsed -e 's/\\\\\\\[$]0 --fallback-echo"[$]/[$]0 --fallback-echo"/'` - ;; - esac - -ifelse([$1], [], - [cfgfile="${ofile}T" - trap "$rm \"$cfgfile\"; exit 1" 1 2 15 - $rm -f "$cfgfile" - AC_MSG_NOTICE([creating $ofile])], - [cfgfile="$ofile"]) - - cat <<__EOF__ >> "$cfgfile" -ifelse([$1], [], -[#! $SHELL - -# `$echo "$cfgfile" | sed 's%^.*/%%'` - Provide generalized library-building support services. -# Generated automatically by $PROGRAM (GNU $PACKAGE $VERSION$TIMESTAMP) -# NOTE: Changes made to this file will be lost: look at ltmain.sh. -# -# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007 -# Free Software Foundation, Inc. -# -# This file is part of GNU Libtool: -# Originally by Gordon Matzigkeit , 1996 -# -# This program is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 2 of the License, or -# (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, but -# WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. -# -# As a special exception to the GNU General Public License, if you -# distribute this file as part of a program that contains a -# configuration script generated by Autoconf, you may include it under -# the same distribution terms that you use for the rest of that program. - -# A sed program that does not truncate output. -SED=$lt_SED - -# Sed that helps us avoid accidentally triggering echo(1) options like -n. -Xsed="$SED -e 1s/^X//" - -# The HP-UX ksh and POSIX shell print the target directory to stdout -# if CDPATH is set. -(unset CDPATH) >/dev/null 2>&1 && unset CDPATH - -# The names of the tagged configurations supported by this script. -available_tags= - -# ### BEGIN LIBTOOL CONFIG], -[# ### BEGIN LIBTOOL TAG CONFIG: $tagname]) - -# Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`: - -# Shell to use when invoking shell scripts. -SHELL=$lt_SHELL - -# Whether or not to build shared libraries. -build_libtool_libs=$enable_shared - -# Whether or not to build static libraries. -build_old_libs=$enable_static - -# Whether or not to add -lc for building shared libraries. -build_libtool_need_lc=$_LT_AC_TAGVAR(archive_cmds_need_lc, $1) - -# Whether or not to disallow shared libs when runtime libs are static -allow_libtool_libs_with_static_runtimes=$_LT_AC_TAGVAR(enable_shared_with_static_runtimes, $1) - -# Whether or not to optimize for fast installation. -fast_install=$enable_fast_install - -# The host system. -host_alias=$host_alias -host=$host -host_os=$host_os - -# The build system. -build_alias=$build_alias -build=$build -build_os=$build_os - -# An echo program that does not interpret backslashes. -echo=$lt_echo - -# The archiver. -AR=$lt_AR -AR_FLAGS=$lt_AR_FLAGS - -# A C compiler. -LTCC=$lt_LTCC - -# LTCC compiler flags. -LTCFLAGS=$lt_LTCFLAGS - -# A language-specific compiler. -CC=$lt_[]_LT_AC_TAGVAR(compiler, $1) - -# Is the compiler the GNU C compiler? -with_gcc=$_LT_AC_TAGVAR(GCC, $1) - -# An ERE matcher. -EGREP=$lt_EGREP - -# The linker used to build libraries. -LD=$lt_[]_LT_AC_TAGVAR(LD, $1) - -# Whether we need hard or soft links. -LN_S=$lt_LN_S - -# A BSD-compatible nm program. -NM=$lt_NM - -# A symbol stripping program -STRIP=$lt_STRIP - -# Used to examine libraries when file_magic_cmd begins "file" -MAGIC_CMD=$MAGIC_CMD - -# Used on cygwin: DLL creation program. -DLLTOOL="$DLLTOOL" - -# Used on cygwin: object dumper. -OBJDUMP="$OBJDUMP" - -# Used on cygwin: assembler. -AS="$AS" - -# The name of the directory that contains temporary libtool files. -objdir=$objdir - -# How to create reloadable object files. -reload_flag=$lt_reload_flag -reload_cmds=$lt_reload_cmds - -# How to pass a linker flag through the compiler. -wl=$lt_[]_LT_AC_TAGVAR(lt_prog_compiler_wl, $1) - -# Object file suffix (normally "o"). -objext="$ac_objext" - -# Old archive suffix (normally "a"). -libext="$libext" - -# Shared library suffix (normally ".so"). -shrext_cmds='$shrext_cmds' - -# Executable file suffix (normally ""). -exeext="$exeext" - -# Additional compiler flags for building library objects. -pic_flag=$lt_[]_LT_AC_TAGVAR(lt_prog_compiler_pic, $1) -pic_mode=$pic_mode - -# What is the maximum length of a command? -max_cmd_len=$lt_cv_sys_max_cmd_len - -# Does compiler simultaneously support -c and -o options? -compiler_c_o=$lt_[]_LT_AC_TAGVAR(lt_cv_prog_compiler_c_o, $1) - -# Must we lock files when doing compilation? -need_locks=$lt_need_locks - -# Do we need the lib prefix for modules? -need_lib_prefix=$need_lib_prefix - -# Do we need a version for libraries? -need_version=$need_version - -# Whether dlopen is supported. -dlopen_support=$enable_dlopen - -# Whether dlopen of programs is supported. -dlopen_self=$enable_dlopen_self - -# Whether dlopen of statically linked programs is supported. -dlopen_self_static=$enable_dlopen_self_static - -# Compiler flag to prevent dynamic linking. -link_static_flag=$lt_[]_LT_AC_TAGVAR(lt_prog_compiler_static, $1) - -# Compiler flag to turn off builtin functions. -no_builtin_flag=$lt_[]_LT_AC_TAGVAR(lt_prog_compiler_no_builtin_flag, $1) - -# Compiler flag to allow reflexive dlopens. -export_dynamic_flag_spec=$lt_[]_LT_AC_TAGVAR(export_dynamic_flag_spec, $1) - -# Compiler flag to generate shared objects directly from archives. -whole_archive_flag_spec=$lt_[]_LT_AC_TAGVAR(whole_archive_flag_spec, $1) - -# Compiler flag to generate thread-safe objects. -thread_safe_flag_spec=$lt_[]_LT_AC_TAGVAR(thread_safe_flag_spec, $1) - -# Library versioning type. -version_type=$version_type - -# Format of library name prefix. -libname_spec=$lt_libname_spec - -# List of archive names. First name is the real one, the rest are links. -# The last name is the one that the linker finds with -lNAME. -library_names_spec=$lt_library_names_spec - -# The coded name of the library, if different from the real name. -soname_spec=$lt_soname_spec - -# Commands used to build and install an old-style archive. -RANLIB=$lt_RANLIB -old_archive_cmds=$lt_[]_LT_AC_TAGVAR(old_archive_cmds, $1) -old_postinstall_cmds=$lt_old_postinstall_cmds -old_postuninstall_cmds=$lt_old_postuninstall_cmds - -# Create an old-style archive from a shared archive. -old_archive_from_new_cmds=$lt_[]_LT_AC_TAGVAR(old_archive_from_new_cmds, $1) - -# Create a temporary old-style archive to link instead of a shared archive. -old_archive_from_expsyms_cmds=$lt_[]_LT_AC_TAGVAR(old_archive_from_expsyms_cmds, $1) - -# Commands used to build and install a shared archive. -archive_cmds=$lt_[]_LT_AC_TAGVAR(archive_cmds, $1) -archive_expsym_cmds=$lt_[]_LT_AC_TAGVAR(archive_expsym_cmds, $1) -postinstall_cmds=$lt_postinstall_cmds -postuninstall_cmds=$lt_postuninstall_cmds - -# Commands used to build a loadable module (assumed same as above if empty) -module_cmds=$lt_[]_LT_AC_TAGVAR(module_cmds, $1) -module_expsym_cmds=$lt_[]_LT_AC_TAGVAR(module_expsym_cmds, $1) - -# Commands to strip libraries. -old_striplib=$lt_old_striplib -striplib=$lt_striplib - -# Dependencies to place before the objects being linked to create a -# shared library. -predep_objects=$lt_[]_LT_AC_TAGVAR(predep_objects, $1) - -# Dependencies to place after the objects being linked to create a -# shared library. -postdep_objects=$lt_[]_LT_AC_TAGVAR(postdep_objects, $1) - -# Dependencies to place before the objects being linked to create a -# shared library. -predeps=$lt_[]_LT_AC_TAGVAR(predeps, $1) - -# Dependencies to place after the objects being linked to create a -# shared library. -postdeps=$lt_[]_LT_AC_TAGVAR(postdeps, $1) - -# The library search path used internally by the compiler when linking -# a shared library. -compiler_lib_search_path=$lt_[]_LT_AC_TAGVAR(compiler_lib_search_path, $1) - -# Method to check whether dependent libraries are shared objects. -deplibs_check_method=$lt_deplibs_check_method - -# Command to use when deplibs_check_method == file_magic. -file_magic_cmd=$lt_file_magic_cmd - -# Flag that allows shared libraries with undefined symbols to be built. -allow_undefined_flag=$lt_[]_LT_AC_TAGVAR(allow_undefined_flag, $1) - -# Flag that forces no undefined symbols. -no_undefined_flag=$lt_[]_LT_AC_TAGVAR(no_undefined_flag, $1) - -# Commands used to finish a libtool library installation in a directory. -finish_cmds=$lt_finish_cmds - -# Same as above, but a single script fragment to be evaled but not shown. -finish_eval=$lt_finish_eval - -# Take the output of nm and produce a listing of raw symbols and C names. -global_symbol_pipe=$lt_lt_cv_sys_global_symbol_pipe - -# Transform the output of nm in a proper C declaration -global_symbol_to_cdecl=$lt_lt_cv_sys_global_symbol_to_cdecl - -# Transform the output of nm in a C name address pair -global_symbol_to_c_name_address=$lt_lt_cv_sys_global_symbol_to_c_name_address - -# This is the shared library runtime path variable. -runpath_var=$runpath_var - -# This is the shared library path variable. -shlibpath_var=$shlibpath_var - -# Is shlibpath searched before the hard-coded library search path? -shlibpath_overrides_runpath=$shlibpath_overrides_runpath - -# How to hardcode a shared library path into an executable. -hardcode_action=$_LT_AC_TAGVAR(hardcode_action, $1) - -# Whether we should hardcode library paths into libraries. -hardcode_into_libs=$hardcode_into_libs - -# Flag to hardcode \$libdir into a binary during linking. -# This must work even if \$libdir does not exist. -hardcode_libdir_flag_spec=$lt_[]_LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1) - -# If ld is used when linking, flag to hardcode \$libdir into -# a binary during linking. This must work even if \$libdir does -# not exist. -hardcode_libdir_flag_spec_ld=$lt_[]_LT_AC_TAGVAR(hardcode_libdir_flag_spec_ld, $1) - -# Whether we need a single -rpath flag with a separated argument. -hardcode_libdir_separator=$lt_[]_LT_AC_TAGVAR(hardcode_libdir_separator, $1) - -# Set to yes if using DIR/libNAME${shared_ext} during linking hardcodes DIR into the -# resulting binary. -hardcode_direct=$_LT_AC_TAGVAR(hardcode_direct, $1) - -# Set to yes if using the -LDIR flag during linking hardcodes DIR into the -# resulting binary. -hardcode_minus_L=$_LT_AC_TAGVAR(hardcode_minus_L, $1) - -# Set to yes if using SHLIBPATH_VAR=DIR during linking hardcodes DIR into -# the resulting binary. -hardcode_shlibpath_var=$_LT_AC_TAGVAR(hardcode_shlibpath_var, $1) - -# Set to yes if building a shared library automatically hardcodes DIR into the library -# and all subsequent libraries and executables linked against it. -hardcode_automatic=$_LT_AC_TAGVAR(hardcode_automatic, $1) - -# Variables whose values should be saved in libtool wrapper scripts and -# restored at relink time. -variables_saved_for_relink="$variables_saved_for_relink" - -# Whether libtool must link a program against all its dependency libraries. -link_all_deplibs=$_LT_AC_TAGVAR(link_all_deplibs, $1) - -# Compile-time system search path for libraries -sys_lib_search_path_spec=$lt_sys_lib_search_path_spec - -# Run-time system search path for libraries -sys_lib_dlsearch_path_spec=$lt_sys_lib_dlsearch_path_spec - -# Fix the shell variable \$srcfile for the compiler. -fix_srcfile_path=$lt_fix_srcfile_path - -# Set to yes if exported symbols are required. -always_export_symbols=$_LT_AC_TAGVAR(always_export_symbols, $1) - -# The commands to list exported symbols. -export_symbols_cmds=$lt_[]_LT_AC_TAGVAR(export_symbols_cmds, $1) - -# The commands to extract the exported symbol list from a shared archive. -extract_expsyms_cmds=$lt_extract_expsyms_cmds - -# Symbols that should not be listed in the preloaded symbols. -exclude_expsyms=$lt_[]_LT_AC_TAGVAR(exclude_expsyms, $1) - -# Symbols that must always be exported. -include_expsyms=$lt_[]_LT_AC_TAGVAR(include_expsyms, $1) - -ifelse([$1],[], -[# ### END LIBTOOL CONFIG], -[# ### END LIBTOOL TAG CONFIG: $tagname]) - -__EOF__ - -ifelse([$1],[], [ - case $host_os in - aix3*) - cat <<\EOF >> "$cfgfile" - -# AIX sometimes has problems with the GCC collect2 program. For some -# reason, if we set the COLLECT_NAMES environment variable, the problems -# vanish in a puff of smoke. -if test "X${COLLECT_NAMES+set}" != Xset; then - COLLECT_NAMES= - export COLLECT_NAMES -fi -EOF - ;; - esac - - # We use sed instead of cat because bash on DJGPP gets confused if - # if finds mixed CR/LF and LF-only lines. Since sed operates in - # text mode, it properly converts lines to CR/LF. This bash problem - # is reportedly fixed, but why not run on old versions too? - sed '$q' "$ltmain" >> "$cfgfile" || (rm -f "$cfgfile"; exit 1) - - mv -f "$cfgfile" "$ofile" || \ - (rm -f "$ofile" && cp "$cfgfile" "$ofile" && rm -f "$cfgfile") - chmod +x "$ofile" -]) -else - # If there is no Makefile yet, we rely on a make rule to execute - # `config.status --recheck' to rerun these tests and create the - # libtool script then. - ltmain_in=`echo $ltmain | sed -e 's/\.sh$/.in/'` - if test -f "$ltmain_in"; then - test -f Makefile && make "$ltmain" - fi -fi -])# AC_LIBTOOL_CONFIG - - -# AC_LIBTOOL_PROG_COMPILER_NO_RTTI([TAGNAME]) -# ------------------------------------------- -AC_DEFUN([AC_LIBTOOL_PROG_COMPILER_NO_RTTI], -[AC_REQUIRE([_LT_AC_SYS_COMPILER])dnl - -_LT_AC_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)= - -if test "$GCC" = yes; then - _LT_AC_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=' -fno-builtin' - - AC_LIBTOOL_COMPILER_OPTION([if $compiler supports -fno-rtti -fno-exceptions], - lt_cv_prog_compiler_rtti_exceptions, - [-fno-rtti -fno-exceptions], [], - [_LT_AC_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)="$_LT_AC_TAGVAR(lt_prog_compiler_no_builtin_flag, $1) -fno-rtti -fno-exceptions"]) -fi -])# AC_LIBTOOL_PROG_COMPILER_NO_RTTI - - -# AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE -# --------------------------------- -AC_DEFUN([AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE], -[AC_REQUIRE([AC_CANONICAL_HOST]) -AC_REQUIRE([LT_AC_PROG_SED]) -AC_REQUIRE([AC_PROG_NM]) -AC_REQUIRE([AC_OBJEXT]) -# Check for command to grab the raw symbol name followed by C symbol from nm. -AC_MSG_CHECKING([command to parse $NM output from $compiler object]) -AC_CACHE_VAL([lt_cv_sys_global_symbol_pipe], -[ -# These are sane defaults that work on at least a few old systems. -# [They come from Ultrix. What could be older than Ultrix?!! ;)] - -# Character class describing NM global symbol codes. -symcode='[[BCDEGRST]]' - -# Regexp to match symbols that can be accessed directly from C. -sympat='\([[_A-Za-z]][[_A-Za-z0-9]]*\)' - -# Transform an extracted symbol line into a proper C declaration -lt_cv_sys_global_symbol_to_cdecl="sed -n -e 's/^. .* \(.*\)$/extern int \1;/p'" - -# Transform an extracted symbol line into symbol name and symbol address -lt_cv_sys_global_symbol_to_c_name_address="sed -n -e 's/^: \([[^ ]]*\) $/ {\\\"\1\\\", (lt_ptr) 0},/p' -e 's/^$symcode \([[^ ]]*\) \([[^ ]]*\)$/ {\"\2\", (lt_ptr) \&\2},/p'" - -# Define system-specific variables. -case $host_os in -aix*) - symcode='[[BCDT]]' - ;; -cygwin* | mingw* | pw32*) - symcode='[[ABCDGISTW]]' - ;; -hpux*) # Its linker distinguishes data from code symbols - if test "$host_cpu" = ia64; then - symcode='[[ABCDEGRST]]' - fi - lt_cv_sys_global_symbol_to_cdecl="sed -n -e 's/^T .* \(.*\)$/extern int \1();/p' -e 's/^$symcode* .* \(.*\)$/extern char \1;/p'" - lt_cv_sys_global_symbol_to_c_name_address="sed -n -e 's/^: \([[^ ]]*\) $/ {\\\"\1\\\", (lt_ptr) 0},/p' -e 's/^$symcode* \([[^ ]]*\) \([[^ ]]*\)$/ {\"\2\", (lt_ptr) \&\2},/p'" - ;; -linux* | k*bsd*-gnu) - if test "$host_cpu" = ia64; then - symcode='[[ABCDGIRSTW]]' - lt_cv_sys_global_symbol_to_cdecl="sed -n -e 's/^T .* \(.*\)$/extern int \1();/p' -e 's/^$symcode* .* \(.*\)$/extern char \1;/p'" - lt_cv_sys_global_symbol_to_c_name_address="sed -n -e 's/^: \([[^ ]]*\) $/ {\\\"\1\\\", (lt_ptr) 0},/p' -e 's/^$symcode* \([[^ ]]*\) \([[^ ]]*\)$/ {\"\2\", (lt_ptr) \&\2},/p'" - fi - ;; -irix* | nonstopux*) - symcode='[[BCDEGRST]]' - ;; -osf*) - symcode='[[BCDEGQRST]]' - ;; -solaris*) - symcode='[[BDRT]]' - ;; -sco3.2v5*) - symcode='[[DT]]' - ;; -sysv4.2uw2*) - symcode='[[DT]]' - ;; -sysv5* | sco5v6* | unixware* | OpenUNIX*) - symcode='[[ABDT]]' - ;; -sysv4) - symcode='[[DFNSTU]]' - ;; -esac - -# Handle CRLF in mingw tool chain -opt_cr= -case $build_os in -mingw*) - opt_cr=`echo 'x\{0,1\}' | tr x '\015'` # option cr in regexp - ;; -esac - -# If we're using GNU nm, then use its standard symbol codes. -case `$NM -V 2>&1` in -*GNU* | *'with BFD'*) - symcode='[[ABCDGIRSTW]]' ;; -esac - -# Try without a prefix undercore, then with it. -for ac_symprfx in "" "_"; do - - # Transform symcode, sympat, and symprfx into a raw symbol and a C symbol. - symxfrm="\\1 $ac_symprfx\\2 \\2" - - # Write the raw and C identifiers. - lt_cv_sys_global_symbol_pipe="sed -n -e 's/^.*[[ ]]\($symcode$symcode*\)[[ ]][[ ]]*$ac_symprfx$sympat$opt_cr$/$symxfrm/p'" - - # Check to see that the pipe works correctly. - pipe_works=no - - rm -f conftest* - cat > conftest.$ac_ext < $nlist) && test -s "$nlist"; then - # Try sorting and uniquifying the output. - if sort "$nlist" | uniq > "$nlist"T; then - mv -f "$nlist"T "$nlist" - else - rm -f "$nlist"T - fi - - # Make sure that we snagged all the symbols we need. - if grep ' nm_test_var$' "$nlist" >/dev/null; then - if grep ' nm_test_func$' "$nlist" >/dev/null; then - cat < conftest.$ac_ext -#ifdef __cplusplus -extern "C" { -#endif - -EOF - # Now generate the symbol file. - eval "$lt_cv_sys_global_symbol_to_cdecl"' < "$nlist" | grep -v main >> conftest.$ac_ext' - - cat <> conftest.$ac_ext -#if defined (__STDC__) && __STDC__ -# define lt_ptr_t void * -#else -# define lt_ptr_t char * -# define const -#endif - -/* The mapping between symbol names and symbols. */ -const struct { - const char *name; - lt_ptr_t address; -} -lt_preloaded_symbols[[]] = -{ -EOF - $SED "s/^$symcode$symcode* \(.*\) \(.*\)$/ {\"\2\", (lt_ptr_t) \&\2},/" < "$nlist" | grep -v main >> conftest.$ac_ext - cat <<\EOF >> conftest.$ac_ext - {0, (lt_ptr_t) 0} -}; - -#ifdef __cplusplus -} -#endif -EOF - # Now try linking the two files. - mv conftest.$ac_objext conftstm.$ac_objext - lt_save_LIBS="$LIBS" - lt_save_CFLAGS="$CFLAGS" - LIBS="conftstm.$ac_objext" - CFLAGS="$CFLAGS$_LT_AC_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)" - if AC_TRY_EVAL(ac_link) && test -s conftest${ac_exeext}; then - pipe_works=yes - fi - LIBS="$lt_save_LIBS" - CFLAGS="$lt_save_CFLAGS" - else - echo "cannot find nm_test_func in $nlist" >&AS_MESSAGE_LOG_FD - fi - else - echo "cannot find nm_test_var in $nlist" >&AS_MESSAGE_LOG_FD - fi - else - echo "cannot run $lt_cv_sys_global_symbol_pipe" >&AS_MESSAGE_LOG_FD - fi - else - echo "$progname: failed program was:" >&AS_MESSAGE_LOG_FD - cat conftest.$ac_ext >&5 - fi - rm -f conftest* conftst* - - # Do not use the global_symbol_pipe unless it works. - if test "$pipe_works" = yes; then - break - else - lt_cv_sys_global_symbol_pipe= - fi -done -]) -if test -z "$lt_cv_sys_global_symbol_pipe"; then - lt_cv_sys_global_symbol_to_cdecl= -fi -if test -z "$lt_cv_sys_global_symbol_pipe$lt_cv_sys_global_symbol_to_cdecl"; then - AC_MSG_RESULT(failed) -else - AC_MSG_RESULT(ok) -fi -]) # AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE - - -# AC_LIBTOOL_PROG_COMPILER_PIC([TAGNAME]) -# --------------------------------------- -AC_DEFUN([AC_LIBTOOL_PROG_COMPILER_PIC], -[_LT_AC_TAGVAR(lt_prog_compiler_wl, $1)= -_LT_AC_TAGVAR(lt_prog_compiler_pic, $1)= -_LT_AC_TAGVAR(lt_prog_compiler_static, $1)= - -AC_MSG_CHECKING([for $compiler option to produce PIC]) - ifelse([$1],[CXX],[ - # C++ specific cases for pic, static, wl, etc. - if test "$GXX" = yes; then - _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' - _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-static' - - case $host_os in - aix*) - # All AIX code is PIC. - if test "$host_cpu" = ia64; then - # AIX 5 now supports IA64 processor - _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' - fi - ;; - amigaos*) - # FIXME: we need at least 68020 code to build shared libraries, but - # adding the `-m68020' flag to GCC prevents building anything better, - # like `-m68040'. - _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-m68020 -resident32 -malways-restore-a4' - ;; - beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) - # PIC is the default for these OSes. - ;; - mingw* | cygwin* | os2* | pw32*) - # This hack is so that the source file can tell whether it is being - # built for inclusion in a dll (and should export symbols for example). - # Although the cygwin gcc ignores -fPIC, still need this for old-style - # (--disable-auto-import) libraries - _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT' - ;; - darwin* | rhapsody*) - # PIC is the default on this platform - # Common symbols not allowed in MH_DYLIB files - _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-fno-common' - ;; - *djgpp*) - # DJGPP does not support shared libraries at all - _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)= - ;; - interix[[3-9]]*) - # Interix 3.x gcc -fpic/-fPIC options generate broken code. - # Instead, we relocate shared libraries at runtime. - ;; - sysv4*MP*) - if test -d /usr/nec; then - _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)=-Kconform_pic - fi - ;; - hpux*) - # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but - # not for PA HP-UX. - case $host_cpu in - hppa*64*|ia64*) - ;; - *) - _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' - ;; - esac - ;; - *) - _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' - ;; - esac - else - case $host_os in - aix4* | aix5*) - # All AIX code is PIC. - if test "$host_cpu" = ia64; then - # AIX 5 now supports IA64 processor - _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' - else - _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-bnso -bI:/lib/syscalls.exp' - fi - ;; - chorus*) - case $cc_basename in - cxch68*) - # Green Hills C++ Compiler - # _LT_AC_TAGVAR(lt_prog_compiler_static, $1)="--no_auto_instantiation -u __main -u __premain -u _abort -r $COOL_DIR/lib/libOrb.a $MVME_DIR/lib/CC/libC.a $MVME_DIR/lib/classix/libcx.s.a" - ;; - esac - ;; - darwin*) - # PIC is the default on this platform - # Common symbols not allowed in MH_DYLIB files - case $cc_basename in - xlc*) - _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-qnocommon' - _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' - ;; - esac - ;; - dgux*) - case $cc_basename in - ec++*) - _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' - ;; - ghcx*) - # Green Hills C++ Compiler - _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-pic' - ;; - *) - ;; - esac - ;; - freebsd* | dragonfly*) - # FreeBSD uses GNU C++ - ;; - hpux9* | hpux10* | hpux11*) - case $cc_basename in - CC*) - _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' - _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='${wl}-a ${wl}archive' - if test "$host_cpu" != ia64; then - _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='+Z' - fi - ;; - aCC*) - _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' - _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='${wl}-a ${wl}archive' - case $host_cpu in - hppa*64*|ia64*) - # +Z the default - ;; - *) - _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='+Z' - ;; - esac - ;; - *) - ;; - esac - ;; - interix*) - # This is c89, which is MS Visual C++ (no shared libs) - # Anyone wants to do a port? - ;; - irix5* | irix6* | nonstopux*) - case $cc_basename in - CC*) - _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' - _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' - # CC pic flag -KPIC is the default. - ;; - *) - ;; - esac - ;; - linux* | k*bsd*-gnu) - case $cc_basename in - KCC*) - # KAI C++ Compiler - _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='--backend -Wl,' - _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' - ;; - icpc* | ecpc*) - # Intel C++ - _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' - _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' - _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-static' - ;; - pgCC*) - # Portland Group C++ compiler. - _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' - _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-fpic' - _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' - ;; - cxx*) - # Compaq C++ - # Make sure the PIC flag is empty. It appears that all Alpha - # Linux and Compaq Tru64 Unix objects are PIC. - _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)= - _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' - ;; - *) - case `$CC -V 2>&1 | sed 5q` in - *Sun\ C*) - # Sun C++ 5.9 - _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' - _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' - _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ' - ;; - esac - ;; - esac - ;; - lynxos*) - ;; - m88k*) - ;; - mvs*) - case $cc_basename in - cxx*) - _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-W c,exportall' - ;; - *) - ;; - esac - ;; - netbsd*) - ;; - osf3* | osf4* | osf5*) - case $cc_basename in - KCC*) - _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='--backend -Wl,' - ;; - RCC*) - # Rational C++ 2.4.1 - _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-pic' - ;; - cxx*) - # Digital/Compaq C++ - _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' - # Make sure the PIC flag is empty. It appears that all Alpha - # Linux and Compaq Tru64 Unix objects are PIC. - _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)= - _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' - ;; - *) - ;; - esac - ;; - psos*) - ;; - solaris*) - case $cc_basename in - CC*) - # Sun C++ 4.2, 5.x and Centerline C++ - _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' - _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' - _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ' - ;; - gcx*) - # Green Hills C++ Compiler - _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-PIC' - ;; - *) - ;; - esac - ;; - sunos4*) - case $cc_basename in - CC*) - # Sun C++ 4.x - _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-pic' - _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' - ;; - lcc*) - # Lucid - _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-pic' - ;; - *) - ;; - esac - ;; - tandem*) - case $cc_basename in - NCC*) - # NonStop-UX NCC 3.20 - _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' - ;; - *) - ;; - esac - ;; - sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*) - case $cc_basename in - CC*) - _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' - _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' - _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' - ;; - esac - ;; - vxworks*) - ;; - *) - _LT_AC_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no - ;; - esac - fi -], -[ - if test "$GCC" = yes; then - _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' - _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-static' - - case $host_os in - aix*) - # All AIX code is PIC. - if test "$host_cpu" = ia64; then - # AIX 5 now supports IA64 processor - _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' - fi - ;; - - amigaos*) - # FIXME: we need at least 68020 code to build shared libraries, but - # adding the `-m68020' flag to GCC prevents building anything better, - # like `-m68040'. - _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-m68020 -resident32 -malways-restore-a4' - ;; - - beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) - # PIC is the default for these OSes. - ;; - - mingw* | cygwin* | pw32* | os2*) - # This hack is so that the source file can tell whether it is being - # built for inclusion in a dll (and should export symbols for example). - # Although the cygwin gcc ignores -fPIC, still need this for old-style - # (--disable-auto-import) libraries - _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT' - ;; - - darwin* | rhapsody*) - # PIC is the default on this platform - # Common symbols not allowed in MH_DYLIB files - _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-fno-common' - ;; - - interix[[3-9]]*) - # Interix 3.x gcc -fpic/-fPIC options generate broken code. - # Instead, we relocate shared libraries at runtime. - ;; - - msdosdjgpp*) - # Just because we use GCC doesn't mean we suddenly get shared libraries - # on systems that don't support them. - _LT_AC_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no - enable_shared=no - ;; - - sysv4*MP*) - if test -d /usr/nec; then - _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)=-Kconform_pic - fi - ;; - - hpux*) - # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but - # not for PA HP-UX. - case $host_cpu in - hppa*64*|ia64*) - # +Z the default - ;; - *) - _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' - ;; - esac - ;; - - *) - _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' - ;; - esac - else - # PORTME Check for flag to pass linker flags through the system compiler. - case $host_os in - aix*) - _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' - if test "$host_cpu" = ia64; then - # AIX 5 now supports IA64 processor - _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' - else - _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-bnso -bI:/lib/syscalls.exp' - fi - ;; - darwin*) - # PIC is the default on this platform - # Common symbols not allowed in MH_DYLIB files - case $cc_basename in - xlc*) - _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-qnocommon' - _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' - ;; - esac - ;; - - mingw* | cygwin* | pw32* | os2*) - # This hack is so that the source file can tell whether it is being - # built for inclusion in a dll (and should export symbols for example). - _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT' - ;; - - hpux9* | hpux10* | hpux11*) - _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' - # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but - # not for PA HP-UX. - case $host_cpu in - hppa*64*|ia64*) - # +Z the default - ;; - *) - _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='+Z' - ;; - esac - # Is there a better lt_prog_compiler_static that works with the bundled CC? - _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='${wl}-a ${wl}archive' - ;; - - irix5* | irix6* | nonstopux*) - _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' - # PIC (with -KPIC) is the default. - _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' - ;; - - newsos6) - _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' - _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' - ;; - - linux* | k*bsd*-gnu) - case $cc_basename in - icc* | ecc*) - _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' - _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' - _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-static' - ;; - pgcc* | pgf77* | pgf90* | pgf95*) - # Portland Group compilers (*not* the Pentium gcc compiler, - # which looks to be a dead project) - _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' - _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-fpic' - _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' - ;; - ccc*) - _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' - # All Alpha code is PIC. - _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' - ;; - *) - case `$CC -V 2>&1 | sed 5q` in - *Sun\ C*) - # Sun C 5.9 - _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' - _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' - _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' - ;; - *Sun\ F*) - # Sun Fortran 8.3 passes all unrecognized flags to the linker - _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' - _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' - _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='' - ;; - esac - ;; - esac - ;; - - osf3* | osf4* | osf5*) - _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' - # All OSF/1 code is PIC. - _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' - ;; - - rdos*) - _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' - ;; - - solaris*) - _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' - _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' - case $cc_basename in - f77* | f90* | f95*) - _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ';; - *) - _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,';; - esac - ;; - - sunos4*) - _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ' - _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-PIC' - _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' - ;; - - sysv4 | sysv4.2uw2* | sysv4.3*) - _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' - _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' - _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' - ;; - - sysv4*MP*) - if test -d /usr/nec ;then - _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-Kconform_pic' - _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' - fi - ;; - - sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*) - _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' - _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' - _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' - ;; - - unicos*) - _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' - _LT_AC_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no - ;; - - uts4*) - _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-pic' - _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' - ;; - - *) - _LT_AC_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no - ;; - esac - fi -]) -AC_MSG_RESULT([$_LT_AC_TAGVAR(lt_prog_compiler_pic, $1)]) - -# -# Check to make sure the PIC flag actually works. -# -if test -n "$_LT_AC_TAGVAR(lt_prog_compiler_pic, $1)"; then - AC_LIBTOOL_COMPILER_OPTION([if $compiler PIC flag $_LT_AC_TAGVAR(lt_prog_compiler_pic, $1) works], - _LT_AC_TAGVAR(lt_prog_compiler_pic_works, $1), - [$_LT_AC_TAGVAR(lt_prog_compiler_pic, $1)ifelse([$1],[],[ -DPIC],[ifelse([$1],[CXX],[ -DPIC],[])])], [], - [case $_LT_AC_TAGVAR(lt_prog_compiler_pic, $1) in - "" | " "*) ;; - *) _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)=" $_LT_AC_TAGVAR(lt_prog_compiler_pic, $1)" ;; - esac], - [_LT_AC_TAGVAR(lt_prog_compiler_pic, $1)= - _LT_AC_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no]) -fi -case $host_os in - # For platforms which do not support PIC, -DPIC is meaningless: - *djgpp*) - _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)= - ;; - *) - _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)="$_LT_AC_TAGVAR(lt_prog_compiler_pic, $1)ifelse([$1],[],[ -DPIC],[ifelse([$1],[CXX],[ -DPIC],[])])" - ;; -esac - -# -# Check to make sure the static flag actually works. -# -wl=$_LT_AC_TAGVAR(lt_prog_compiler_wl, $1) eval lt_tmp_static_flag=\"$_LT_AC_TAGVAR(lt_prog_compiler_static, $1)\" -AC_LIBTOOL_LINKER_OPTION([if $compiler static flag $lt_tmp_static_flag works], - _LT_AC_TAGVAR(lt_prog_compiler_static_works, $1), - $lt_tmp_static_flag, - [], - [_LT_AC_TAGVAR(lt_prog_compiler_static, $1)=]) -]) - - -# AC_LIBTOOL_PROG_LD_SHLIBS([TAGNAME]) -# ------------------------------------ -# See if the linker supports building shared libraries. -AC_DEFUN([AC_LIBTOOL_PROG_LD_SHLIBS], -[AC_REQUIRE([LT_AC_PROG_SED])dnl -AC_MSG_CHECKING([whether the $compiler linker ($LD) supports shared libraries]) -ifelse([$1],[CXX],[ - _LT_AC_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' - case $host_os in - aix4* | aix5*) - # If we're using GNU nm, then we don't want the "-C" option. - # -C means demangle to AIX nm, but means don't demangle with GNU nm - if $NM -V 2>&1 | grep 'GNU' > /dev/null; then - _LT_AC_TAGVAR(export_symbols_cmds, $1)='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\[$]2 == "T") || (\[$]2 == "D") || (\[$]2 == "B")) && ([substr](\[$]3,1,1) != ".")) { print \[$]3 } }'\'' | sort -u > $export_symbols' - else - _LT_AC_TAGVAR(export_symbols_cmds, $1)='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\[$]2 == "T") || (\[$]2 == "D") || (\[$]2 == "B")) && ([substr](\[$]3,1,1) != ".")) { print \[$]3 } }'\'' | sort -u > $export_symbols' - fi - ;; - pw32*) - _LT_AC_TAGVAR(export_symbols_cmds, $1)="$ltdll_cmds" - ;; - cygwin* | mingw*) - _LT_AC_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[[BCDGRS]][[ ]]/s/.*[[ ]]\([[^ ]]*\)/\1 DATA/;/^.*[[ ]]__nm__/s/^.*[[ ]]__nm__\([[^ ]]*\)[[ ]][[^ ]]*/\1 DATA/;/^I[[ ]]/d;/^[[AITW]][[ ]]/s/.*[[ ]]//'\'' | sort | uniq > $export_symbols' - ;; - *) - _LT_AC_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' - ;; - esac -],[ - runpath_var= - _LT_AC_TAGVAR(allow_undefined_flag, $1)= - _LT_AC_TAGVAR(enable_shared_with_static_runtimes, $1)=no - _LT_AC_TAGVAR(archive_cmds, $1)= - _LT_AC_TAGVAR(archive_expsym_cmds, $1)= - _LT_AC_TAGVAR(old_archive_From_new_cmds, $1)= - _LT_AC_TAGVAR(old_archive_from_expsyms_cmds, $1)= - _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)= - _LT_AC_TAGVAR(whole_archive_flag_spec, $1)= - _LT_AC_TAGVAR(thread_safe_flag_spec, $1)= - _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)= - _LT_AC_TAGVAR(hardcode_libdir_flag_spec_ld, $1)= - _LT_AC_TAGVAR(hardcode_libdir_separator, $1)= - _LT_AC_TAGVAR(hardcode_direct, $1)=no - _LT_AC_TAGVAR(hardcode_minus_L, $1)=no - _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=unsupported - _LT_AC_TAGVAR(link_all_deplibs, $1)=unknown - _LT_AC_TAGVAR(hardcode_automatic, $1)=no - _LT_AC_TAGVAR(module_cmds, $1)= - _LT_AC_TAGVAR(module_expsym_cmds, $1)= - _LT_AC_TAGVAR(always_export_symbols, $1)=no - _LT_AC_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' - # include_expsyms should be a list of space-separated symbols to be *always* - # included in the symbol list - _LT_AC_TAGVAR(include_expsyms, $1)= - # exclude_expsyms can be an extended regexp of symbols to exclude - # it will be wrapped by ` (' and `)$', so one must not match beginning or - # end of line. Example: `a|bc|.*d.*' will exclude the symbols `a' and `bc', - # as well as any symbol that contains `d'. - _LT_AC_TAGVAR(exclude_expsyms, $1)="_GLOBAL_OFFSET_TABLE_" - # Although _GLOBAL_OFFSET_TABLE_ is a valid symbol C name, most a.out - # platforms (ab)use it in PIC code, but their linkers get confused if - # the symbol is explicitly referenced. Since portable code cannot - # rely on this symbol name, it's probably fine to never include it in - # preloaded symbol tables. - extract_expsyms_cmds= - # Just being paranoid about ensuring that cc_basename is set. - _LT_CC_BASENAME([$compiler]) - case $host_os in - cygwin* | mingw* | pw32*) - # FIXME: the MSVC++ port hasn't been tested in a loooong time - # When not using gcc, we currently assume that we are using - # Microsoft Visual C++. - if test "$GCC" != yes; then - with_gnu_ld=no - fi - ;; - interix*) - # we just hope/assume this is gcc and not c89 (= MSVC++) - with_gnu_ld=yes - ;; - openbsd*) - with_gnu_ld=no - ;; - esac - - _LT_AC_TAGVAR(ld_shlibs, $1)=yes - if test "$with_gnu_ld" = yes; then - # If archive_cmds runs LD, not CC, wlarc should be empty - wlarc='${wl}' - - # Set some defaults for GNU ld with shared library support. These - # are reset later if shared libraries are not supported. Putting them - # here allows them to be overridden if necessary. - runpath_var=LD_RUN_PATH - _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}--rpath ${wl}$libdir' - _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic' - # ancient GNU ld didn't support --whole-archive et. al. - if $LD --help 2>&1 | grep 'no-whole-archive' > /dev/null; then - _LT_AC_TAGVAR(whole_archive_flag_spec, $1)="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' - else - _LT_AC_TAGVAR(whole_archive_flag_spec, $1)= - fi - supports_anon_versioning=no - case `$LD -v 2>/dev/null` in - *\ [[01]].* | *\ 2.[[0-9]].* | *\ 2.10.*) ;; # catch versions < 2.11 - *\ 2.11.93.0.2\ *) supports_anon_versioning=yes ;; # RH7.3 ... - *\ 2.11.92.0.12\ *) supports_anon_versioning=yes ;; # Mandrake 8.2 ... - *\ 2.11.*) ;; # other 2.11 versions - *) supports_anon_versioning=yes ;; - esac - - # See if GNU ld supports shared libraries. - case $host_os in - aix3* | aix4* | aix5*) - # On AIX/PPC, the GNU linker is very broken - if test "$host_cpu" != ia64; then - _LT_AC_TAGVAR(ld_shlibs, $1)=no - cat <&2 - -*** Warning: the GNU linker, at least up to release 2.9.1, is reported -*** to be unable to reliably create shared libraries on AIX. -*** Therefore, libtool is disabling shared libraries support. If you -*** really care for shared libraries, you may want to modify your PATH -*** so that a non-GNU linker is found, and then restart. - -EOF - fi - ;; - - amigaos*) - _LT_AC_TAGVAR(archive_cmds, $1)='$rm $output_objdir/a2ixlibrary.data~$echo "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$echo "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$echo "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$echo "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' - _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' - _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes - - # Samuel A. Falvo II reports - # that the semantics of dynamic libraries on AmigaOS, at least up - # to version 4, is to share data among multiple programs linked - # with the same dynamic library. Since this doesn't match the - # behavior of shared libraries on other platforms, we can't use - # them. - _LT_AC_TAGVAR(ld_shlibs, $1)=no - ;; - - beos*) - if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then - _LT_AC_TAGVAR(allow_undefined_flag, $1)=unsupported - # Joseph Beckenbach says some releases of gcc - # support --undefined. This deserves some investigation. FIXME - _LT_AC_TAGVAR(archive_cmds, $1)='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' - else - _LT_AC_TAGVAR(ld_shlibs, $1)=no - fi - ;; - - cygwin* | mingw* | pw32*) - # _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1) is actually meaningless, - # as there is no search path for DLLs. - _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' - _LT_AC_TAGVAR(allow_undefined_flag, $1)=unsupported - _LT_AC_TAGVAR(always_export_symbols, $1)=no - _LT_AC_TAGVAR(enable_shared_with_static_runtimes, $1)=yes - _LT_AC_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[[BCDGRS]][[ ]]/s/.*[[ ]]\([[^ ]]*\)/\1 DATA/'\'' -e '\''/^[[AITW]][[ ]]/s/.*[[ ]]//'\'' | sort | uniq > $export_symbols' - - if $LD --help 2>&1 | grep 'auto-import' > /dev/null; then - _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' - # If the export-symbols file already is a .def file (1st line - # is EXPORTS), use it as is; otherwise, prepend... - _LT_AC_TAGVAR(archive_expsym_cmds, $1)='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then - cp $export_symbols $output_objdir/$soname.def; - else - echo EXPORTS > $output_objdir/$soname.def; - cat $export_symbols >> $output_objdir/$soname.def; - fi~ - $CC -shared $output_objdir/$soname.def $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' - else - _LT_AC_TAGVAR(ld_shlibs, $1)=no - fi - ;; - - interix[[3-9]]*) - _LT_AC_TAGVAR(hardcode_direct, $1)=no - _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no - _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' - _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' - # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc. - # Instead, shared libraries are loaded at an image base (0x10000000 by - # default) and relocated if they conflict, which is a slow very memory - # consuming and fragmenting process. To avoid this, we pick a random, - # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link - # time. Moving up from 0x10000000 also allows more sbrk(2) space. - _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' - _LT_AC_TAGVAR(archive_expsym_cmds, $1)='sed "s,^,_," $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--retain-symbols-file,$output_objdir/$soname.expsym ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' - ;; - - gnu* | linux* | k*bsd*-gnu) - if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then - tmp_addflag= - case $cc_basename,$host_cpu in - pgcc*) # Portland Group C compiler - _LT_AC_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $echo \"$new_convenience\"` ${wl}--no-whole-archive' - tmp_addflag=' $pic_flag' - ;; - pgf77* | pgf90* | pgf95*) # Portland Group f77 and f90 compilers - _LT_AC_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $echo \"$new_convenience\"` ${wl}--no-whole-archive' - tmp_addflag=' $pic_flag -Mnomain' ;; - ecc*,ia64* | icc*,ia64*) # Intel C compiler on ia64 - tmp_addflag=' -i_dynamic' ;; - efc*,ia64* | ifort*,ia64*) # Intel Fortran compiler on ia64 - tmp_addflag=' -i_dynamic -nofor_main' ;; - ifc* | ifort*) # Intel Fortran compiler - tmp_addflag=' -nofor_main' ;; - esac - case `$CC -V 2>&1 | sed 5q` in - *Sun\ C*) # Sun C 5.9 - _LT_AC_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; $echo \"$new_convenience\"` ${wl}--no-whole-archive' - tmp_sharedflag='-G' ;; - *Sun\ F*) # Sun Fortran 8.3 - tmp_sharedflag='-G' ;; - *) - tmp_sharedflag='-shared' ;; - esac - _LT_AC_TAGVAR(archive_cmds, $1)='$CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' - - if test $supports_anon_versioning = yes; then - _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$echo "{ global:" > $output_objdir/$libname.ver~ - cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ - $echo "local: *; };" >> $output_objdir/$libname.ver~ - $CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib' - fi - else - _LT_AC_TAGVAR(ld_shlibs, $1)=no - fi - ;; - - netbsd*) - if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then - _LT_AC_TAGVAR(archive_cmds, $1)='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib' - wlarc= - else - _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' - _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' - fi - ;; - - solaris*) - if $LD -v 2>&1 | grep 'BFD 2\.8' > /dev/null; then - _LT_AC_TAGVAR(ld_shlibs, $1)=no - cat <&2 - -*** Warning: The releases 2.8.* of the GNU linker cannot reliably -*** create shared libraries on Solaris systems. Therefore, libtool -*** is disabling shared libraries support. We urge you to upgrade GNU -*** binutils to release 2.9.1 or newer. Another option is to modify -*** your PATH or compiler configuration so that the native linker is -*** used, and then restart. - -EOF - elif $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then - _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' - _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' - else - _LT_AC_TAGVAR(ld_shlibs, $1)=no - fi - ;; - - sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX*) - case `$LD -v 2>&1` in - *\ [[01]].* | *\ 2.[[0-9]].* | *\ 2.1[[0-5]].*) - _LT_AC_TAGVAR(ld_shlibs, $1)=no - cat <<_LT_EOF 1>&2 - -*** Warning: Releases of the GNU linker prior to 2.16.91.0.3 can not -*** reliably create shared libraries on SCO systems. Therefore, libtool -*** is disabling shared libraries support. We urge you to upgrade GNU -*** binutils to release 2.16.91.0.3 or newer. Another option is to modify -*** your PATH or compiler configuration so that the native linker is -*** used, and then restart. - -_LT_EOF - ;; - *) - if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then - _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='`test -z "$SCOABSPATH" && echo ${wl}-rpath,$libdir`' - _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib' - _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname,\${SCOABSPATH:+${install_libdir}/}$soname,-retain-symbols-file,$export_symbols -o $lib' - else - _LT_AC_TAGVAR(ld_shlibs, $1)=no - fi - ;; - esac - ;; - - sunos4*) - _LT_AC_TAGVAR(archive_cmds, $1)='$LD -assert pure-text -Bshareable -o $lib $libobjs $deplibs $linker_flags' - wlarc= - _LT_AC_TAGVAR(hardcode_direct, $1)=yes - _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no - ;; - - *) - if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then - _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' - _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' - else - _LT_AC_TAGVAR(ld_shlibs, $1)=no - fi - ;; - esac - - if test "$_LT_AC_TAGVAR(ld_shlibs, $1)" = no; then - runpath_var= - _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)= - _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)= - _LT_AC_TAGVAR(whole_archive_flag_spec, $1)= - fi - else - # PORTME fill in a description of your system's linker (not GNU ld) - case $host_os in - aix3*) - _LT_AC_TAGVAR(allow_undefined_flag, $1)=unsupported - _LT_AC_TAGVAR(always_export_symbols, $1)=yes - _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$LD -o $output_objdir/$soname $libobjs $deplibs $linker_flags -bE:$export_symbols -T512 -H512 -bM:SRE~$AR $AR_FLAGS $lib $output_objdir/$soname' - # Note: this linker hardcodes the directories in LIBPATH if there - # are no directories specified by -L. - _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes - if test "$GCC" = yes && test -z "$lt_prog_compiler_static"; then - # Neither direct hardcoding nor static linking is supported with a - # broken collect2. - _LT_AC_TAGVAR(hardcode_direct, $1)=unsupported - fi - ;; - - aix4* | aix5*) - if test "$host_cpu" = ia64; then - # On IA64, the linker does run time linking by default, so we don't - # have to do anything special. - aix_use_runtimelinking=no - exp_sym_flag='-Bexport' - no_entry_flag="" - else - # If we're using GNU nm, then we don't want the "-C" option. - # -C means demangle to AIX nm, but means don't demangle with GNU nm - if $NM -V 2>&1 | grep 'GNU' > /dev/null; then - _LT_AC_TAGVAR(export_symbols_cmds, $1)='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\[$]2 == "T") || (\[$]2 == "D") || (\[$]2 == "B")) && ([substr](\[$]3,1,1) != ".")) { print \[$]3 } }'\'' | sort -u > $export_symbols' - else - _LT_AC_TAGVAR(export_symbols_cmds, $1)='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\[$]2 == "T") || (\[$]2 == "D") || (\[$]2 == "B")) && ([substr](\[$]3,1,1) != ".")) { print \[$]3 } }'\'' | sort -u > $export_symbols' - fi - aix_use_runtimelinking=no - - # Test if we are trying to use run time linking or normal - # AIX style linking. If -brtl is somewhere in LDFLAGS, we - # need to do runtime linking. - case $host_os in aix4.[[23]]|aix4.[[23]].*|aix5*) - for ld_flag in $LDFLAGS; do - if (test $ld_flag = "-brtl" || test $ld_flag = "-Wl,-brtl"); then - aix_use_runtimelinking=yes - break - fi - done - ;; - esac - - exp_sym_flag='-bexport' - no_entry_flag='-bnoentry' - fi - - # When large executables or shared objects are built, AIX ld can - # have problems creating the table of contents. If linking a library - # or program results in "error TOC overflow" add -mminimal-toc to - # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not - # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS. - - _LT_AC_TAGVAR(archive_cmds, $1)='' - _LT_AC_TAGVAR(hardcode_direct, $1)=yes - _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=':' - _LT_AC_TAGVAR(link_all_deplibs, $1)=yes - - if test "$GCC" = yes; then - case $host_os in aix4.[[012]]|aix4.[[012]].*) - # We only want to do this on AIX 4.2 and lower, the check - # below for broken collect2 doesn't work under 4.3+ - collect2name=`${CC} -print-prog-name=collect2` - if test -f "$collect2name" && \ - strings "$collect2name" | grep resolve_lib_name >/dev/null - then - # We have reworked collect2 - : - else - # We have old collect2 - _LT_AC_TAGVAR(hardcode_direct, $1)=unsupported - # It fails to find uninstalled libraries when the uninstalled - # path is not listed in the libpath. Setting hardcode_minus_L - # to unsupported forces relinking - _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes - _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' - _LT_AC_TAGVAR(hardcode_libdir_separator, $1)= - fi - ;; - esac - shared_flag='-shared' - if test "$aix_use_runtimelinking" = yes; then - shared_flag="$shared_flag "'${wl}-G' - fi - else - # not using gcc - if test "$host_cpu" = ia64; then - # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release - # chokes on -Wl,-G. The following line is correct: - shared_flag='-G' - else - if test "$aix_use_runtimelinking" = yes; then - shared_flag='${wl}-G' - else - shared_flag='${wl}-bM:SRE' - fi - fi - fi - - # It seems that -bexpall does not export symbols beginning with - # underscore (_), so it is better to generate a list of symbols to export. - _LT_AC_TAGVAR(always_export_symbols, $1)=yes - if test "$aix_use_runtimelinking" = yes; then - # Warning - without using the other runtime loading flags (-brtl), - # -berok will link without error, but may produce a broken library. - _LT_AC_TAGVAR(allow_undefined_flag, $1)='-berok' - # Determine the default libpath from the value encoded in an empty executable. - _LT_AC_SYS_LIBPATH_AIX - _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath" - _LT_AC_TAGVAR(archive_expsym_cmds, $1)="\$CC"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then echo "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag" - else - if test "$host_cpu" = ia64; then - _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R $libdir:/usr/lib:/lib' - _LT_AC_TAGVAR(allow_undefined_flag, $1)="-z nodefs" - _LT_AC_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$exp_sym_flag:\$export_symbols" - else - # Determine the default libpath from the value encoded in an empty executable. - _LT_AC_SYS_LIBPATH_AIX - _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath" - # Warning - without using the other run time loading flags, - # -berok will link without error, but may produce a broken library. - _LT_AC_TAGVAR(no_undefined_flag, $1)=' ${wl}-bernotok' - _LT_AC_TAGVAR(allow_undefined_flag, $1)=' ${wl}-berok' - # Exported symbols can be pulled into shared objects from archives - _LT_AC_TAGVAR(whole_archive_flag_spec, $1)='$convenience' - _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=yes - # This is similar to how AIX traditionally builds its shared libraries. - _LT_AC_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs ${wl}-bnoentry $compiler_flags ${wl}-bE:$export_symbols${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname' - fi - fi - ;; - - amigaos*) - _LT_AC_TAGVAR(archive_cmds, $1)='$rm $output_objdir/a2ixlibrary.data~$echo "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$echo "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$echo "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$echo "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' - _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' - _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes - # see comment about different semantics on the GNU ld section - _LT_AC_TAGVAR(ld_shlibs, $1)=no - ;; - - bsdi[[45]]*) - _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)=-rdynamic - ;; - - cygwin* | mingw* | pw32*) - # When not using gcc, we currently assume that we are using - # Microsoft Visual C++. - # hardcode_libdir_flag_spec is actually meaningless, as there is - # no search path for DLLs. - _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)=' ' - _LT_AC_TAGVAR(allow_undefined_flag, $1)=unsupported - # Tell ltmain to make .lib files, not .a files. - libext=lib - # Tell ltmain to make .dll files, not .so files. - shrext_cmds=".dll" - # FIXME: Setting linknames here is a bad hack. - _LT_AC_TAGVAR(archive_cmds, $1)='$CC -o $lib $libobjs $compiler_flags `echo "$deplibs" | $SED -e '\''s/ -lc$//'\''` -link -dll~linknames=' - # The linker will automatically build a .lib file if we build a DLL. - _LT_AC_TAGVAR(old_archive_From_new_cmds, $1)='true' - # FIXME: Should let the user specify the lib program. - _LT_AC_TAGVAR(old_archive_cmds, $1)='lib -OUT:$oldlib$oldobjs$old_deplibs' - _LT_AC_TAGVAR(fix_srcfile_path, $1)='`cygpath -w "$srcfile"`' - _LT_AC_TAGVAR(enable_shared_with_static_runtimes, $1)=yes - ;; - - darwin* | rhapsody*) - case $host_os in - rhapsody* | darwin1.[[012]]) - _LT_AC_TAGVAR(allow_undefined_flag, $1)='${wl}-undefined ${wl}suppress' - ;; - *) # Darwin 1.3 on - if test -z ${MACOSX_DEPLOYMENT_TARGET} ; then - _LT_AC_TAGVAR(allow_undefined_flag, $1)='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' - else - case ${MACOSX_DEPLOYMENT_TARGET} in - 10.[[012]]) - _LT_AC_TAGVAR(allow_undefined_flag, $1)='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' - ;; - 10.*) - _LT_AC_TAGVAR(allow_undefined_flag, $1)='${wl}-undefined ${wl}dynamic_lookup' - ;; - esac - fi - ;; - esac - _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=no - _LT_AC_TAGVAR(hardcode_direct, $1)=no - _LT_AC_TAGVAR(hardcode_automatic, $1)=yes - _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=unsupported - _LT_AC_TAGVAR(whole_archive_flag_spec, $1)='' - _LT_AC_TAGVAR(link_all_deplibs, $1)=yes - if test "$GCC" = yes ; then - output_verbose_link_cmd='echo' - _LT_AC_TAGVAR(archive_cmds, $1)='$CC -dynamiclib $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags -install_name $rpath/$soname $verstring' - _LT_AC_TAGVAR(module_cmds, $1)='$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags' - # Don't fix this by using the ld -exported_symbols_list flag, it doesn't exist in older darwin lds - _LT_AC_TAGVAR(archive_expsym_cmds, $1)='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -dynamiclib $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags -install_name $rpath/$soname $verstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' - _LT_AC_TAGVAR(module_expsym_cmds, $1)='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' - else - case $cc_basename in - xlc*) - output_verbose_link_cmd='echo' - _LT_AC_TAGVAR(archive_cmds, $1)='$CC -qmkshrobj $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-install_name ${wl}`echo $rpath/$soname` $xlcverstring' - _LT_AC_TAGVAR(module_cmds, $1)='$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags' - # Don't fix this by using the ld -exported_symbols_list flag, it doesn't exist in older darwin lds - _LT_AC_TAGVAR(archive_expsym_cmds, $1)='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -qmkshrobj $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-install_name ${wl}$rpath/$soname $xlcverstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' - _LT_AC_TAGVAR(module_expsym_cmds, $1)='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' - ;; - *) - _LT_AC_TAGVAR(ld_shlibs, $1)=no - ;; - esac - fi - ;; - - dgux*) - _LT_AC_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' - _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' - _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no - ;; - - freebsd1*) - _LT_AC_TAGVAR(ld_shlibs, $1)=no - ;; - - # FreeBSD 2.2.[012] allows us to include c++rt0.o to get C++ constructor - # support. Future versions do this automatically, but an explicit c++rt0.o - # does not break anything, and helps significantly (at the cost of a little - # extra space). - freebsd2.2*) - _LT_AC_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags /usr/lib/c++rt0.o' - _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' - _LT_AC_TAGVAR(hardcode_direct, $1)=yes - _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no - ;; - - # Unfortunately, older versions of FreeBSD 2 do not have this feature. - freebsd2*) - _LT_AC_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' - _LT_AC_TAGVAR(hardcode_direct, $1)=yes - _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes - _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no - ;; - - # FreeBSD 3 and greater uses gcc -shared to do shared libraries. - freebsd* | dragonfly*) - _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -o $lib $libobjs $deplibs $compiler_flags' - _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' - _LT_AC_TAGVAR(hardcode_direct, $1)=yes - _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no - ;; - - hpux9*) - if test "$GCC" = yes; then - _LT_AC_TAGVAR(archive_cmds, $1)='$rm $output_objdir/$soname~$CC -shared -fPIC ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' - else - _LT_AC_TAGVAR(archive_cmds, $1)='$rm $output_objdir/$soname~$LD -b +b $install_libdir -o $output_objdir/$soname $libobjs $deplibs $linker_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' - fi - _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir' - _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=: - _LT_AC_TAGVAR(hardcode_direct, $1)=yes - - # hardcode_minus_L: Not really in the search PATH, - # but as the default location of the library. - _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes - _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' - ;; - - hpux10*) - if test "$GCC" = yes -a "$with_gnu_ld" = no; then - _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' - else - _LT_AC_TAGVAR(archive_cmds, $1)='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags' - fi - if test "$with_gnu_ld" = no; then - _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir' - _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=: - - _LT_AC_TAGVAR(hardcode_direct, $1)=yes - _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' - - # hardcode_minus_L: Not really in the search PATH, - # but as the default location of the library. - _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes - fi - ;; - - hpux11*) - if test "$GCC" = yes -a "$with_gnu_ld" = no; then - case $host_cpu in - hppa*64*) - _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' - ;; - ia64*) - _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' - ;; - *) - _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' - ;; - esac - else - case $host_cpu in - hppa*64*) - _LT_AC_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' - ;; - ia64*) - _LT_AC_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' - ;; - *) - _LT_AC_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' - ;; - esac - fi - if test "$with_gnu_ld" = no; then - _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir' - _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=: - - case $host_cpu in - hppa*64*|ia64*) - _LT_AC_TAGVAR(hardcode_libdir_flag_spec_ld, $1)='+b $libdir' - _LT_AC_TAGVAR(hardcode_direct, $1)=no - _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no - ;; - *) - _LT_AC_TAGVAR(hardcode_direct, $1)=yes - _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' - - # hardcode_minus_L: Not really in the search PATH, - # but as the default location of the library. - _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes - ;; - esac - fi - ;; - - irix5* | irix6* | nonstopux*) - if test "$GCC" = yes; then - _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' - else - _LT_AC_TAGVAR(archive_cmds, $1)='$LD -shared $libobjs $deplibs $linker_flags -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib' - _LT_AC_TAGVAR(hardcode_libdir_flag_spec_ld, $1)='-rpath $libdir' - fi - _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' - _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=: - _LT_AC_TAGVAR(link_all_deplibs, $1)=yes - ;; - - netbsd*) - if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then - _LT_AC_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' # a.out - else - _LT_AC_TAGVAR(archive_cmds, $1)='$LD -shared -o $lib $libobjs $deplibs $linker_flags' # ELF - fi - _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' - _LT_AC_TAGVAR(hardcode_direct, $1)=yes - _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no - ;; - - newsos6) - _LT_AC_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' - _LT_AC_TAGVAR(hardcode_direct, $1)=yes - _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' - _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=: - _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no - ;; - - openbsd*) - if test -f /usr/libexec/ld.so; then - _LT_AC_TAGVAR(hardcode_direct, $1)=yes - _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no - if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then - _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' - _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-retain-symbols-file,$export_symbols' - _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' - _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' - else - case $host_os in - openbsd[[01]].* | openbsd2.[[0-7]] | openbsd2.[[0-7]].*) - _LT_AC_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' - _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' - ;; - *) - _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' - _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' - ;; - esac - fi - else - _LT_AC_TAGVAR(ld_shlibs, $1)=no - fi - ;; - - os2*) - _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' - _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes - _LT_AC_TAGVAR(allow_undefined_flag, $1)=unsupported - _LT_AC_TAGVAR(archive_cmds, $1)='$echo "LIBRARY $libname INITINSTANCE" > $output_objdir/$libname.def~$echo "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~$echo DATA >> $output_objdir/$libname.def~$echo " SINGLE NONSHARED" >> $output_objdir/$libname.def~$echo EXPORTS >> $output_objdir/$libname.def~emxexp $libobjs >> $output_objdir/$libname.def~$CC -Zdll -Zcrtdll -o $lib $libobjs $deplibs $compiler_flags $output_objdir/$libname.def' - _LT_AC_TAGVAR(old_archive_From_new_cmds, $1)='emximp -o $output_objdir/$libname.a $output_objdir/$libname.def' - ;; - - osf3*) - if test "$GCC" = yes; then - _LT_AC_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*' - _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' - else - _LT_AC_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*' - _LT_AC_TAGVAR(archive_cmds, $1)='$LD -shared${allow_undefined_flag} $libobjs $deplibs $linker_flags -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib' - fi - _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' - _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=: - ;; - - osf4* | osf5*) # as osf3* with the addition of -msym flag - if test "$GCC" = yes; then - _LT_AC_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*' - _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' - _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' - else - _LT_AC_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*' - _LT_AC_TAGVAR(archive_cmds, $1)='$LD -shared${allow_undefined_flag} $libobjs $deplibs $linker_flags -msym -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib' - _LT_AC_TAGVAR(archive_expsym_cmds, $1)='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done; echo "-hidden">> $lib.exp~ - $LD -shared${allow_undefined_flag} -input $lib.exp $linker_flags $libobjs $deplibs -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib~$rm $lib.exp' - - # Both c and cxx compiler support -rpath directly - _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir' - fi - _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=: - ;; - - solaris*) - _LT_AC_TAGVAR(no_undefined_flag, $1)=' -z text' - if test "$GCC" = yes; then - wlarc='${wl}' - _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' - _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~ - $CC -shared ${wl}-M ${wl}$lib.exp ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags~$rm $lib.exp' - else - wlarc='' - _LT_AC_TAGVAR(archive_cmds, $1)='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linker_flags' - _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~ - $LD -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$rm $lib.exp' - fi - _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' - _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no - case $host_os in - solaris2.[[0-5]] | solaris2.[[0-5]].*) ;; - *) - # The compiler driver will combine and reorder linker options, - # but understands `-z linker_flag'. GCC discards it without `$wl', - # but is careful enough not to reorder. - # Supported since Solaris 2.6 (maybe 2.5.1?) - if test "$GCC" = yes; then - _LT_AC_TAGVAR(whole_archive_flag_spec, $1)='${wl}-z ${wl}allextract$convenience ${wl}-z ${wl}defaultextract' - else - _LT_AC_TAGVAR(whole_archive_flag_spec, $1)='-z allextract$convenience -z defaultextract' - fi - ;; - esac - _LT_AC_TAGVAR(link_all_deplibs, $1)=yes - ;; - - sunos4*) - if test "x$host_vendor" = xsequent; then - # Use $CC to link under sequent, because it throws in some extra .o - # files that make .init and .fini sections work. - _LT_AC_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h $soname -o $lib $libobjs $deplibs $compiler_flags' - else - _LT_AC_TAGVAR(archive_cmds, $1)='$LD -assert pure-text -Bstatic -o $lib $libobjs $deplibs $linker_flags' - fi - _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' - _LT_AC_TAGVAR(hardcode_direct, $1)=yes - _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes - _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no - ;; - - sysv4) - case $host_vendor in - sni) - _LT_AC_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' - _LT_AC_TAGVAR(hardcode_direct, $1)=yes # is this really true??? - ;; - siemens) - ## LD is ld it makes a PLAMLIB - ## CC just makes a GrossModule. - _LT_AC_TAGVAR(archive_cmds, $1)='$LD -G -o $lib $libobjs $deplibs $linker_flags' - _LT_AC_TAGVAR(reload_cmds, $1)='$CC -r -o $output$reload_objs' - _LT_AC_TAGVAR(hardcode_direct, $1)=no - ;; - motorola) - _LT_AC_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' - _LT_AC_TAGVAR(hardcode_direct, $1)=no #Motorola manual says yes, but my tests say they lie - ;; - esac - runpath_var='LD_RUN_PATH' - _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no - ;; - - sysv4.3*) - _LT_AC_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' - _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no - _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='-Bexport' - ;; - - sysv4*MP*) - if test -d /usr/nec; then - _LT_AC_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' - _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no - runpath_var=LD_RUN_PATH - hardcode_runpath_var=yes - _LT_AC_TAGVAR(ld_shlibs, $1)=yes - fi - ;; - - sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[[01]].[[10]]* | unixware7* | sco3.2v5.0.[[024]]*) - _LT_AC_TAGVAR(no_undefined_flag, $1)='${wl}-z,text' - _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=no - _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no - runpath_var='LD_RUN_PATH' - - if test "$GCC" = yes; then - _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - else - _LT_AC_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - fi - ;; - - sysv5* | sco3.2v5* | sco5v6*) - # Note: We can NOT use -z defs as we might desire, because we do not - # link with -lc, and that would cause any symbols used from libc to - # always be unresolved, which means just about no library would - # ever link correctly. If we're not using GNU ld we use -z text - # though, which does catch some bad symbols but isn't as heavy-handed - # as -z defs. - _LT_AC_TAGVAR(no_undefined_flag, $1)='${wl}-z,text' - _LT_AC_TAGVAR(allow_undefined_flag, $1)='${wl}-z,nodefs' - _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=no - _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no - _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='`test -z "$SCOABSPATH" && echo ${wl}-R,$libdir`' - _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=':' - _LT_AC_TAGVAR(link_all_deplibs, $1)=yes - _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-Bexport' - runpath_var='LD_RUN_PATH' - - if test "$GCC" = yes; then - _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags' - _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags' - else - _LT_AC_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags' - _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags' - fi - ;; - - uts4*) - _LT_AC_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' - _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' - _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no - ;; - - *) - _LT_AC_TAGVAR(ld_shlibs, $1)=no - ;; - esac - fi -]) -AC_MSG_RESULT([$_LT_AC_TAGVAR(ld_shlibs, $1)]) -test "$_LT_AC_TAGVAR(ld_shlibs, $1)" = no && can_build_shared=no - -# -# Do we need to explicitly link libc? -# -case "x$_LT_AC_TAGVAR(archive_cmds_need_lc, $1)" in -x|xyes) - # Assume -lc should be added - _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=yes - - if test "$enable_shared" = yes && test "$GCC" = yes; then - case $_LT_AC_TAGVAR(archive_cmds, $1) in - *'~'*) - # FIXME: we may have to deal with multi-command sequences. - ;; - '$CC '*) - # Test whether the compiler implicitly links with -lc since on some - # systems, -lgcc has to come before -lc. If gcc already passes -lc - # to ld, don't add -lc before -lgcc. - AC_MSG_CHECKING([whether -lc should be explicitly linked in]) - $rm conftest* - echo "$lt_simple_compile_test_code" > conftest.$ac_ext - - if AC_TRY_EVAL(ac_compile) 2>conftest.err; then - soname=conftest - lib=conftest - libobjs=conftest.$ac_objext - deplibs= - wl=$_LT_AC_TAGVAR(lt_prog_compiler_wl, $1) - pic_flag=$_LT_AC_TAGVAR(lt_prog_compiler_pic, $1) - compiler_flags=-v - linker_flags=-v - verstring= - output_objdir=. - libname=conftest - lt_save_allow_undefined_flag=$_LT_AC_TAGVAR(allow_undefined_flag, $1) - _LT_AC_TAGVAR(allow_undefined_flag, $1)= - if AC_TRY_EVAL(_LT_AC_TAGVAR(archive_cmds, $1) 2\>\&1 \| grep \" -lc \" \>/dev/null 2\>\&1) - then - _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=no - else - _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=yes - fi - _LT_AC_TAGVAR(allow_undefined_flag, $1)=$lt_save_allow_undefined_flag - else - cat conftest.err 1>&5 - fi - $rm conftest* - AC_MSG_RESULT([$_LT_AC_TAGVAR(archive_cmds_need_lc, $1)]) - ;; - esac - fi - ;; -esac -])# AC_LIBTOOL_PROG_LD_SHLIBS - - -# _LT_AC_FILE_LTDLL_C -# ------------------- -# Be careful that the start marker always follows a newline. -AC_DEFUN([_LT_AC_FILE_LTDLL_C], [ -# /* ltdll.c starts here */ -# #define WIN32_LEAN_AND_MEAN -# #include -# #undef WIN32_LEAN_AND_MEAN -# #include -# -# #ifndef __CYGWIN__ -# # ifdef __CYGWIN32__ -# # define __CYGWIN__ __CYGWIN32__ -# # endif -# #endif -# -# #ifdef __cplusplus -# extern "C" { -# #endif -# BOOL APIENTRY DllMain (HINSTANCE hInst, DWORD reason, LPVOID reserved); -# #ifdef __cplusplus -# } -# #endif -# -# #ifdef __CYGWIN__ -# #include -# DECLARE_CYGWIN_DLL( DllMain ); -# #endif -# HINSTANCE __hDllInstance_base; -# -# BOOL APIENTRY -# DllMain (HINSTANCE hInst, DWORD reason, LPVOID reserved) -# { -# __hDllInstance_base = hInst; -# return TRUE; -# } -# /* ltdll.c ends here */ -])# _LT_AC_FILE_LTDLL_C - - -# _LT_AC_TAGVAR(VARNAME, [TAGNAME]) -# --------------------------------- -AC_DEFUN([_LT_AC_TAGVAR], [ifelse([$2], [], [$1], [$1_$2])]) - - -# old names -AC_DEFUN([AM_PROG_LIBTOOL], [AC_PROG_LIBTOOL]) -AC_DEFUN([AM_ENABLE_SHARED], [AC_ENABLE_SHARED($@)]) -AC_DEFUN([AM_ENABLE_STATIC], [AC_ENABLE_STATIC($@)]) -AC_DEFUN([AM_DISABLE_SHARED], [AC_DISABLE_SHARED($@)]) -AC_DEFUN([AM_DISABLE_STATIC], [AC_DISABLE_STATIC($@)]) -AC_DEFUN([AM_PROG_LD], [AC_PROG_LD]) -AC_DEFUN([AM_PROG_NM], [AC_PROG_NM]) - -# This is just to silence aclocal about the macro not being used -ifelse([AC_DISABLE_FAST_INSTALL]) - -AC_DEFUN([LT_AC_PROG_GCJ], -[AC_CHECK_TOOL(GCJ, gcj, no) - test "x${GCJFLAGS+set}" = xset || GCJFLAGS="-g -O2" - AC_SUBST(GCJFLAGS) -]) - -AC_DEFUN([LT_AC_PROG_RC], -[AC_CHECK_TOOL(RC, windres, no) -]) - - -# Cheap backport of AS_EXECUTABLE_P and required macros -# from Autoconf 2.59; we should not use $as_executable_p directly. - -# _AS_TEST_PREPARE -# ---------------- -m4_ifndef([_AS_TEST_PREPARE], -[m4_defun([_AS_TEST_PREPARE], -[if test -x / >/dev/null 2>&1; then - as_executable_p='test -x' -else - as_executable_p='test -f' -fi -])])# _AS_TEST_PREPARE - -# AS_EXECUTABLE_P -# --------------- -# Check whether a file is executable. -m4_ifndef([AS_EXECUTABLE_P], -[m4_defun([AS_EXECUTABLE_P], -[AS_REQUIRE([_AS_TEST_PREPARE])dnl -$as_executable_p $1[]dnl -])])# AS_EXECUTABLE_P - -# NOTE: This macro has been submitted for inclusion into # -# GNU Autoconf as AC_PROG_SED. When it is available in # -# a released version of Autoconf we should remove this # -# macro and use it instead. # -# LT_AC_PROG_SED -# -------------- -# Check for a fully-functional sed program, that truncates -# as few characters as possible. Prefer GNU sed if found. -AC_DEFUN([LT_AC_PROG_SED], -[AC_MSG_CHECKING([for a sed that does not truncate output]) -AC_CACHE_VAL(lt_cv_path_SED, -[# Loop through the user's path and test for sed and gsed. -# Then use that list of sed's as ones to test for truncation. -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for lt_ac_prog in sed gsed; do - for ac_exec_ext in '' $ac_executable_extensions; do - if AS_EXECUTABLE_P(["$as_dir/$lt_ac_prog$ac_exec_ext"]); then - lt_ac_sed_list="$lt_ac_sed_list $as_dir/$lt_ac_prog$ac_exec_ext" - fi - done - done -done -IFS=$as_save_IFS -lt_ac_max=0 -lt_ac_count=0 -# Add /usr/xpg4/bin/sed as it is typically found on Solaris -# along with /bin/sed that truncates output. -for lt_ac_sed in $lt_ac_sed_list /usr/xpg4/bin/sed; do - test ! -f $lt_ac_sed && continue - cat /dev/null > conftest.in - lt_ac_count=0 - echo $ECHO_N "0123456789$ECHO_C" >conftest.in - # Check for GNU sed and select it if it is found. - if "$lt_ac_sed" --version 2>&1 < /dev/null | grep 'GNU' > /dev/null; then - lt_cv_path_SED=$lt_ac_sed - break - fi - while true; do - cat conftest.in conftest.in >conftest.tmp - mv conftest.tmp conftest.in - cp conftest.in conftest.nl - echo >>conftest.nl - $lt_ac_sed -e 's/a$//' < conftest.nl >conftest.out || break - cmp -s conftest.out conftest.nl || break - # 10000 chars as input seems more than enough - test $lt_ac_count -gt 10 && break - lt_ac_count=`expr $lt_ac_count + 1` - if test $lt_ac_count -gt $lt_ac_max; then - lt_ac_max=$lt_ac_count - lt_cv_path_SED=$lt_ac_sed - fi - done -done -]) -SED=$lt_cv_path_SED -AC_SUBST([SED]) -AC_MSG_RESULT([$SED]) -]) - -# Copyright (C) 2002, 2003, 2005, 2006 Free Software Foundation, Inc. +# Copyright (C) 2002, 2003, 2005, 2006, 2007, 2008 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -6596,10 +31,10 @@ # generated from the m4 files accompanying Automake X.Y. # (This private macro should not be called outside this file.) AC_DEFUN([AM_AUTOMAKE_VERSION], -[am__api_version='1.10' +[am__api_version='1.11' dnl Some users find AM_AUTOMAKE_VERSION and mistake it for a way to dnl require some minimum version. Point them to the right macro. -m4_if([$1], [1.10], [], +m4_if([$1], [1.11.1], [], [AC_FATAL([Do not call $0, use AM_INIT_AUTOMAKE([$1]).])])dnl ]) @@ -6613,10 +48,12 @@ # AM_SET_CURRENT_AUTOMAKE_VERSION # ------------------------------- # Call AM_AUTOMAKE_VERSION and AM_AUTOMAKE_VERSION so they can be traced. -# This function is AC_REQUIREd by AC_INIT_AUTOMAKE. +# This function is AC_REQUIREd by AM_INIT_AUTOMAKE. AC_DEFUN([AM_SET_CURRENT_AUTOMAKE_VERSION], -[AM_AUTOMAKE_VERSION([1.10])dnl -_AM_AUTOCONF_VERSION(m4_PACKAGE_VERSION)]) +[AM_AUTOMAKE_VERSION([1.11.1])dnl +m4_ifndef([AC_AUTOCONF_VERSION], + [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl +_AM_AUTOCONF_VERSION(m4_defn([AC_AUTOCONF_VERSION]))]) # Figure out how to run the assembler. -*- Autoconf -*- @@ -6695,14 +132,14 @@ # AM_CONDITIONAL -*- Autoconf -*- -# Copyright (C) 1997, 2000, 2001, 2003, 2004, 2005, 2006 +# Copyright (C) 1997, 2000, 2001, 2003, 2004, 2005, 2006, 2008 # Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. -# serial 8 +# serial 9 # AM_CONDITIONAL(NAME, SHELL-CONDITION) # ------------------------------------- @@ -6715,6 +152,7 @@ AC_SUBST([$1_FALSE])dnl _AM_SUBST_NOTMAKE([$1_TRUE])dnl _AM_SUBST_NOTMAKE([$1_FALSE])dnl +m4_define([_AM_COND_VALUE_$1], [$2])dnl if $2; then $1_TRUE= $1_FALSE='#' @@ -6728,14 +166,14 @@ Usually this means the macro was only invoked conditionally.]]) fi])]) -# Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006 +# Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2009 # Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. -# serial 9 +# serial 10 # There are a few dirty hacks below to avoid letting `AC_PROG_CC' be # written in clear, in which case automake, when reading aclocal.m4, @@ -6792,6 +230,16 @@ if test "$am_compiler_list" = ""; then am_compiler_list=`sed -n ['s/^#*\([a-zA-Z0-9]*\))$/\1/p'] < ./depcomp` fi + am__universal=false + m4_case([$1], [CC], + [case " $depcc " in #( + *\ -arch\ *\ -arch\ *) am__universal=true ;; + esac], + [CXX], + [case " $depcc " in #( + *\ -arch\ *\ -arch\ *) am__universal=true ;; + esac]) + for depmode in $am_compiler_list; do # Setup a source with many dependencies, because some compilers # like to wrap large dependency lists on column 80 (with \), and @@ -6809,7 +257,17 @@ done echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf + # We check with `-c' and `-o' for the sake of the "dashmstdout" + # mode. It turns out that the SunPro C++ compiler does not properly + # handle `-M -o', and we need to detect this. Also, some Intel + # versions had trouble with output in subdirs + am__obj=sub/conftest.${OBJEXT-o} + am__minus_obj="-o $am__obj" case $depmode in + gcc) + # This depmode causes a compiler race in universal mode. + test "$am__universal" = false || continue + ;; nosideeffect) # after this tag, mechanisms are not by side-effect, so they'll # only be used when explicitly requested @@ -6819,19 +277,23 @@ break fi ;; + msvisualcpp | msvcmsys) + # This compiler won't grok `-c -o', but also, the minuso test has + # not run yet. These depmodes are late enough in the game, and + # so weak that their functioning should not be impacted. + am__obj=conftest.${OBJEXT-o} + am__minus_obj= + ;; none) break ;; esac - # We check with `-c' and `-o' for the sake of the "dashmstdout" - # mode. It turns out that the SunPro C++ compiler does not properly - # handle `-M -o', and we need to detect this. if depmode=$depmode \ - source=sub/conftest.c object=sub/conftest.${OBJEXT-o} \ + source=sub/conftest.c object=$am__obj \ depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ - $SHELL ./depcomp $depcc -c -o sub/conftest.${OBJEXT-o} sub/conftest.c \ + $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \ >/dev/null 2>conftest.err && grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 && grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && - grep sub/conftest.${OBJEXT-o} sub/conftest.Po > /dev/null 2>&1 && + grep $am__obj sub/conftest.Po > /dev/null 2>&1 && ${MAKE-make} -s -f confmf > /dev/null 2>&1; then # icc doesn't choke on unknown options, it will just issue warnings # or remarks (even with -Werror). So we grep stderr for any message @@ -6888,57 +350,68 @@ # Generate code to set up dependency tracking. -*- Autoconf -*- -# Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005 +# Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2008 # Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. -#serial 3 +#serial 5 # _AM_OUTPUT_DEPENDENCY_COMMANDS # ------------------------------ AC_DEFUN([_AM_OUTPUT_DEPENDENCY_COMMANDS], -[for mf in $CONFIG_FILES; do - # Strip MF so we end up with the name of the file. - mf=`echo "$mf" | sed -e 's/:.*$//'` - # Check whether this is an Automake generated Makefile or not. - # We used to match only the files named `Makefile.in', but - # some people rename them; so instead we look at the file content. - # Grep'ing the first line is not enough: some people post-process - # each Makefile.in and add a new line on top of each file to say so. - # Grep'ing the whole file is not good either: AIX grep has a line - # limit of 2048, but all sed's we know have understand at least 4000. - if sed 10q "$mf" | grep '^#.*generated by automake' > /dev/null 2>&1; then - dirpart=`AS_DIRNAME("$mf")` - else - continue - fi - # Extract the definition of DEPDIR, am__include, and am__quote - # from the Makefile without running `make'. - DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"` - test -z "$DEPDIR" && continue - am__include=`sed -n 's/^am__include = //p' < "$mf"` - test -z "am__include" && continue - am__quote=`sed -n 's/^am__quote = //p' < "$mf"` - # When using ansi2knr, U may be empty or an underscore; expand it - U=`sed -n 's/^U = //p' < "$mf"` - # Find all dependency output files, they are included files with - # $(DEPDIR) in their names. We invoke sed twice because it is the - # simplest approach to changing $(DEPDIR) to its actual value in the - # expansion. - for file in `sed -n " - s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \ - sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g' -e 's/\$U/'"$U"'/g'`; do - # Make sure the directory exists. - test -f "$dirpart/$file" && continue - fdir=`AS_DIRNAME(["$file"])` - AS_MKDIR_P([$dirpart/$fdir]) - # echo "creating $dirpart/$file" - echo '# dummy' > "$dirpart/$file" +[{ + # Autoconf 2.62 quotes --file arguments for eval, but not when files + # are listed without --file. Let's play safe and only enable the eval + # if we detect the quoting. + case $CONFIG_FILES in + *\'*) eval set x "$CONFIG_FILES" ;; + *) set x $CONFIG_FILES ;; + esac + shift + for mf + do + # Strip MF so we end up with the name of the file. + mf=`echo "$mf" | sed -e 's/:.*$//'` + # Check whether this is an Automake generated Makefile or not. + # We used to match only the files named `Makefile.in', but + # some people rename them; so instead we look at the file content. + # Grep'ing the first line is not enough: some people post-process + # each Makefile.in and add a new line on top of each file to say so. + # Grep'ing the whole file is not good either: AIX grep has a line + # limit of 2048, but all sed's we know have understand at least 4000. + if sed -n 's,^#.*generated by automake.*,X,p' "$mf" | grep X >/dev/null 2>&1; then + dirpart=`AS_DIRNAME("$mf")` + else + continue + fi + # Extract the definition of DEPDIR, am__include, and am__quote + # from the Makefile without running `make'. + DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"` + test -z "$DEPDIR" && continue + am__include=`sed -n 's/^am__include = //p' < "$mf"` + test -z "am__include" && continue + am__quote=`sed -n 's/^am__quote = //p' < "$mf"` + # When using ansi2knr, U may be empty or an underscore; expand it + U=`sed -n 's/^U = //p' < "$mf"` + # Find all dependency output files, they are included files with + # $(DEPDIR) in their names. We invoke sed twice because it is the + # simplest approach to changing $(DEPDIR) to its actual value in the + # expansion. + for file in `sed -n " + s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \ + sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g' -e 's/\$U/'"$U"'/g'`; do + # Make sure the directory exists. + test -f "$dirpart/$file" && continue + fdir=`AS_DIRNAME(["$file"])` + AS_MKDIR_P([$dirpart/$fdir]) + # echo "creating $dirpart/$file" + echo '# dummy' > "$dirpart/$file" + done done -done +} ])# _AM_OUTPUT_DEPENDENCY_COMMANDS @@ -6958,13 +431,13 @@ # Do all the work for Automake. -*- Autoconf -*- # Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, -# 2005, 2006 Free Software Foundation, Inc. +# 2005, 2006, 2008, 2009 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. -# serial 12 +# serial 16 # This macro actually does too much. Some checks are only needed if # your package does certain things. But this isn't really a big deal. @@ -6981,7 +454,7 @@ # arguments mandatory, and then we can depend on a new Autoconf # release and drop the old call support. AC_DEFUN([AM_INIT_AUTOMAKE], -[AC_PREREQ([2.60])dnl +[AC_PREREQ([2.62])dnl dnl Autoconf wants to disallow AM_ names. We explicitly allow dnl the ones we care about. m4_pattern_allow([^AM_[A-Z]+FLAGS$])dnl @@ -7032,8 +505,8 @@ AM_MISSING_PROG(AUTOMAKE, automake-${am__api_version}) AM_MISSING_PROG(AUTOHEADER, autoheader) AM_MISSING_PROG(MAKEINFO, makeinfo) -AM_PROG_INSTALL_SH -AM_PROG_INSTALL_STRIP +AC_REQUIRE([AM_PROG_INSTALL_SH])dnl +AC_REQUIRE([AM_PROG_INSTALL_STRIP])dnl AC_REQUIRE([AM_PROG_MKDIR_P])dnl # We need awk for the "check" target. The system "awk" is bad on # some platforms. @@ -7041,23 +514,36 @@ AC_REQUIRE([AC_PROG_MAKE_SET])dnl AC_REQUIRE([AM_SET_LEADING_DOT])dnl _AM_IF_OPTION([tar-ustar], [_AM_PROG_TAR([ustar])], - [_AM_IF_OPTION([tar-pax], [_AM_PROG_TAR([pax])], - [_AM_PROG_TAR([v7])])]) + [_AM_IF_OPTION([tar-pax], [_AM_PROG_TAR([pax])], + [_AM_PROG_TAR([v7])])]) _AM_IF_OPTION([no-dependencies],, [AC_PROVIDE_IFELSE([AC_PROG_CC], - [_AM_DEPENDENCIES(CC)], - [define([AC_PROG_CC], - defn([AC_PROG_CC])[_AM_DEPENDENCIES(CC)])])dnl + [_AM_DEPENDENCIES(CC)], + [define([AC_PROG_CC], + defn([AC_PROG_CC])[_AM_DEPENDENCIES(CC)])])dnl AC_PROVIDE_IFELSE([AC_PROG_CXX], - [_AM_DEPENDENCIES(CXX)], - [define([AC_PROG_CXX], - defn([AC_PROG_CXX])[_AM_DEPENDENCIES(CXX)])])dnl + [_AM_DEPENDENCIES(CXX)], + [define([AC_PROG_CXX], + defn([AC_PROG_CXX])[_AM_DEPENDENCIES(CXX)])])dnl AC_PROVIDE_IFELSE([AC_PROG_OBJC], - [_AM_DEPENDENCIES(OBJC)], - [define([AC_PROG_OBJC], - defn([AC_PROG_OBJC])[_AM_DEPENDENCIES(OBJC)])])dnl -]) -]) + [_AM_DEPENDENCIES(OBJC)], + [define([AC_PROG_OBJC], + defn([AC_PROG_OBJC])[_AM_DEPENDENCIES(OBJC)])])dnl +]) +_AM_IF_OPTION([silent-rules], [AC_REQUIRE([AM_SILENT_RULES])])dnl +dnl The `parallel-tests' driver may need to know about EXEEXT, so add the +dnl `am__EXEEXT' conditional if _AM_COMPILER_EXEEXT was seen. This macro +dnl is hooked onto _AC_COMPILER_EXEEXT early, see below. +AC_CONFIG_COMMANDS_PRE(dnl +[m4_provide_if([_AM_COMPILER_EXEEXT], + [AM_CONDITIONAL([am__EXEEXT], [test -n "$EXEEXT"])])])dnl +]) + +dnl Hook into `_AC_COMPILER_EXEEXT' early to learn its expansion. Do not +dnl add the conditional right here, as _AC_COMPILER_EXEEXT may be further +dnl mangled by Autoconf and run in a shell conditional statement. +m4_define([_AC_COMPILER_EXEEXT], +m4_defn([_AC_COMPILER_EXEEXT])[m4_provide([_AM_COMPILER_EXEEXT])]) # When config.status generates a header, we must update the stamp-h file. @@ -7069,18 +555,19 @@ # our stamp files there. AC_DEFUN([_AC_AM_CONFIG_HEADER_HOOK], [# Compute $1's index in $config_headers. +_am_arg=$1 _am_stamp_count=1 for _am_header in $config_headers :; do case $_am_header in - $1 | $1:* ) + $_am_arg | $_am_arg:* ) break ;; * ) _am_stamp_count=`expr $_am_stamp_count + 1` ;; esac done -echo "timestamp for $1" >`AS_DIRNAME([$1])`/stamp-h[]$_am_stamp_count]) +echo "timestamp for $_am_arg" >`AS_DIRNAME(["$_am_arg"])`/stamp-h[]$_am_stamp_count]) -# Copyright (C) 2001, 2003, 2005 Free Software Foundation, Inc. +# Copyright (C) 2001, 2003, 2005, 2008 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -7091,7 +578,14 @@ # Define $install_sh. AC_DEFUN([AM_PROG_INSTALL_SH], [AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl -install_sh=${install_sh-"\$(SHELL) $am_aux_dir/install-sh"} +if test x"${install_sh}" != xset; then + case $am_aux_dir in + *\ * | *\ *) + install_sh="\${SHELL} '$am_aux_dir/install-sh'" ;; + *) + install_sh="\${SHELL} $am_aux_dir/install-sh" + esac +fi AC_SUBST(install_sh)]) # Copyright (C) 2003, 2005 Free Software Foundation, Inc. @@ -7118,27 +612,38 @@ # Add --enable-maintainer-mode option to configure. -*- Autoconf -*- # From Jim Meyering -# Copyright (C) 1996, 1998, 2000, 2001, 2002, 2003, 2004, 2005 +# Copyright (C) 1996, 1998, 2000, 2001, 2002, 2003, 2004, 2005, 2008 # Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. -# serial 4 +# serial 5 +# AM_MAINTAINER_MODE([DEFAULT-MODE]) +# ---------------------------------- +# Control maintainer-specific portions of Makefiles. +# Default is to disable them, unless `enable' is passed literally. +# For symmetry, `disable' may be passed as well. Anyway, the user +# can override the default with the --enable/--disable switch. AC_DEFUN([AM_MAINTAINER_MODE], -[AC_MSG_CHECKING([whether to enable maintainer-specific portions of Makefiles]) - dnl maintainer-mode is disabled by default - AC_ARG_ENABLE(maintainer-mode, -[ --enable-maintainer-mode enable make rules and dependencies not useful +[m4_case(m4_default([$1], [disable]), + [enable], [m4_define([am_maintainer_other], [disable])], + [disable], [m4_define([am_maintainer_other], [enable])], + [m4_define([am_maintainer_other], [enable]) + m4_warn([syntax], [unexpected argument to AM@&t at _MAINTAINER_MODE: $1])]) +AC_MSG_CHECKING([whether to am_maintainer_other maintainer-specific portions of Makefiles]) + dnl maintainer-mode's default is 'disable' unless 'enable' is passed + AC_ARG_ENABLE([maintainer-mode], +[ --][am_maintainer_other][-maintainer-mode am_maintainer_other make rules and dependencies not useful (and sometimes confusing) to the casual installer], - USE_MAINTAINER_MODE=$enableval, - USE_MAINTAINER_MODE=no) + [USE_MAINTAINER_MODE=$enableval], + [USE_MAINTAINER_MODE=]m4_if(am_maintainer_other, [enable], [no], [yes])) AC_MSG_RESULT([$USE_MAINTAINER_MODE]) - AM_CONDITIONAL(MAINTAINER_MODE, [test $USE_MAINTAINER_MODE = yes]) + AM_CONDITIONAL([MAINTAINER_MODE], [test $USE_MAINTAINER_MODE = yes]) MAINT=$MAINTAINER_MODE_TRUE - AC_SUBST(MAINT)dnl + AC_SUBST([MAINT])dnl ] ) @@ -7146,13 +651,13 @@ # Check to see how 'make' treats includes. -*- Autoconf -*- -# Copyright (C) 2001, 2002, 2003, 2005 Free Software Foundation, Inc. +# Copyright (C) 2001, 2002, 2003, 2005, 2009 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. -# serial 3 +# serial 4 # AM_MAKE_INCLUDE() # ----------------- @@ -7161,7 +666,7 @@ [am_make=${MAKE-make} cat > confinc << 'END' am__doit: - @echo done + @echo this is the am__doit target .PHONY: am__doit END # If we don't find an include directive, just comment out the code. @@ -7171,24 +676,24 @@ _am_result=none # First try GNU make style include. echo "include confinc" > confmf -# We grep out `Entering directory' and `Leaving directory' -# messages which can occur if `w' ends up in MAKEFLAGS. -# In particular we don't look at `^make:' because GNU make might -# be invoked under some other name (usually "gmake"), in which -# case it prints its new name instead of `make'. -if test "`$am_make -s -f confmf 2> /dev/null | grep -v 'ing directory'`" = "done"; then - am__include=include - am__quote= - _am_result=GNU -fi +# Ignore all kinds of additional output from `make'. +case `$am_make -s -f confmf 2> /dev/null` in #( +*the\ am__doit\ target*) + am__include=include + am__quote= + _am_result=GNU + ;; +esac # Now try BSD make style include. if test "$am__include" = "#"; then echo '.include "confinc"' > confmf - if test "`$am_make -s -f confmf 2> /dev/null`" = "done"; then - am__include=.include - am__quote="\"" - _am_result=BSD - fi + case `$am_make -s -f confmf 2> /dev/null` in #( + *the\ am__doit\ target*) + am__include=.include + am__quote="\"" + _am_result=BSD + ;; + esac fi AC_SUBST([am__include]) AC_SUBST([am__quote]) @@ -7196,14 +701,14 @@ rm -f confinc confmf ]) -# Copyright (C) 1999, 2000, 2001, 2003, 2004, 2005 +# Copyright (C) 1999, 2000, 2001, 2003, 2004, 2005, 2008 # Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. -# serial 5 +# serial 6 # AM_PROG_CC_C_O # -------------- @@ -7215,8 +720,9 @@ # FIXME: we rely on the cache variable name because # there is no other way. set dummy $CC -ac_cc=`echo $[2] | sed ['s/[^a-zA-Z0-9_]/_/g;s/^[0-9]/_/']` -if eval "test \"`echo '$ac_cv_prog_cc_'${ac_cc}_c_o`\" != yes"; then +am_cc=`echo $[2] | sed ['s/[^a-zA-Z0-9_]/_/g;s/^[0-9]/_/']` +eval am_t=\$ac_cv_prog_cc_${am_cc}_c_o +if test "$am_t" != yes; then # Losing compiler, so override with the script. # FIXME: It is wrong to rewrite CC. # But if we don't then we get into trouble of one sort or another. @@ -7232,14 +738,14 @@ # Fake the existence of programs that GNU maintainers use. -*- Autoconf -*- -# Copyright (C) 1997, 1999, 2000, 2001, 2003, 2004, 2005 +# Copyright (C) 1997, 1999, 2000, 2001, 2003, 2004, 2005, 2008 # Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. -# serial 5 +# serial 6 # AM_MISSING_PROG(NAME, PROGRAM) # ------------------------------ @@ -7256,7 +762,14 @@ AC_DEFUN([AM_MISSING_HAS_RUN], [AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl AC_REQUIRE_AUX_FILE([missing])dnl -test x"${MISSING+set}" = xset || MISSING="\${SHELL} $am_aux_dir/missing" +if test x"${MISSING+set}" != xset; then + case $am_aux_dir in + *\ * | *\ *) + MISSING="\${SHELL} \"$am_aux_dir/missing\"" ;; + *) + MISSING="\${SHELL} $am_aux_dir/missing" ;; + esac +fi # Use eval to expand $SHELL if eval "$MISSING --run true"; then am_missing_run="$MISSING --run " @@ -7294,13 +807,13 @@ # Helper functions for option handling. -*- Autoconf -*- -# Copyright (C) 2001, 2002, 2003, 2005 Free Software Foundation, Inc. +# Copyright (C) 2001, 2002, 2003, 2005, 2008 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. -# serial 3 +# serial 4 # _AM_MANGLE_OPTION(NAME) # ----------------------- @@ -7317,7 +830,7 @@ # ---------------------------------- # OPTIONS is a space-separated list of Automake options. AC_DEFUN([_AM_SET_OPTIONS], -[AC_FOREACH([_AM_Option], [$1], [_AM_SET_OPTION(_AM_Option)])]) +[m4_foreach_w([_AM_Option], [$1], [_AM_SET_OPTION(_AM_Option)])]) # _AM_IF_OPTION(OPTION, IF-SET, [IF-NOT-SET]) # ------------------------------------------- @@ -7327,14 +840,14 @@ # Check to make sure that the build environment is sane. -*- Autoconf -*- -# Copyright (C) 1996, 1997, 2000, 2001, 2003, 2005 +# Copyright (C) 1996, 1997, 2000, 2001, 2003, 2005, 2008 # Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. -# serial 4 +# serial 5 # AM_SANITY_CHECK # --------------- @@ -7343,16 +856,29 @@ # Just in case sleep 1 echo timestamp > conftest.file +# Reject unsafe characters in $srcdir or the absolute working directory +# name. Accept space and tab only in the latter. +am_lf=' +' +case `pwd` in + *[[\\\"\#\$\&\'\`$am_lf]]*) + AC_MSG_ERROR([unsafe absolute working directory name]);; +esac +case $srcdir in + *[[\\\"\#\$\&\'\`$am_lf\ \ ]]*) + AC_MSG_ERROR([unsafe srcdir value: `$srcdir']);; +esac + # Do `set' in a subshell so we don't clobber the current shell's # arguments. Must try -L first in case configure is actually a # symlink; some systems play weird games with the mod time of symlinks # (eg FreeBSD returns the mod time of the symlink's containing # directory). if ( - set X `ls -Lt $srcdir/configure conftest.file 2> /dev/null` + set X `ls -Lt "$srcdir/configure" conftest.file 2> /dev/null` if test "$[*]" = "X"; then # -L didn't work. - set X `ls -t $srcdir/configure conftest.file` + set X `ls -t "$srcdir/configure" conftest.file` fi rm -f conftest.file if test "$[*]" != "X $srcdir/configure conftest.file" \ @@ -7405,18 +931,25 @@ INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s" AC_SUBST([INSTALL_STRIP_PROGRAM])]) -# Copyright (C) 2006 Free Software Foundation, Inc. +# Copyright (C) 2006, 2008 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. +# serial 2 + # _AM_SUBST_NOTMAKE(VARIABLE) # --------------------------- -# Prevent Automake from outputing VARIABLE = @VARIABLE@ in Makefile.in. +# Prevent Automake from outputting VARIABLE = @VARIABLE@ in Makefile.in. # This macro is traced by Automake. AC_DEFUN([_AM_SUBST_NOTMAKE]) +# AM_SUBST_NOTMAKE(VARIABLE) +# --------------------------- +# Public sister of _AM_SUBST_NOTMAKE. +AC_DEFUN([AM_SUBST_NOTMAKE], [_AM_SUBST_NOTMAKE($@)]) + # Check how to create a tarball. -*- Autoconf -*- # Copyright (C) 2004, 2005 Free Software Foundation, Inc. Modified: python/branches/py3k/Modules/_ctypes/libffi/config.guess ============================================================================== --- python/branches/py3k/Modules/_ctypes/libffi/config.guess (original) +++ python/branches/py3k/Modules/_ctypes/libffi/config.guess Mon Mar 15 14:25:28 2010 @@ -1,10 +1,10 @@ #! /bin/sh # Attempt to guess a canonical system name. # Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, -# 2000, 2001, 2002, 2003, 2004, 2005, 2006 Free Software Foundation, -# Inc. +# 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 +# Free Software Foundation, Inc. -timestamp='2007-05-17' +timestamp='2009-11-19' # This file is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by @@ -27,16 +27,16 @@ # the same distribution terms that you use for the rest of that program. -# Originally written by Per Bothner . -# Please send patches to . Submit a context -# diff and a properly formatted ChangeLog entry. +# Originally written by Per Bothner. Please send patches (context +# diff format) to and include a ChangeLog +# entry. # # This script attempts to guess a canonical system name similar to # config.sub. If it succeeds, it prints the system name on stdout, and # exits with 0. Otherwise, it exits with 1. # -# The plan is that this can be called by configure scripts if you -# don't specify an explicit build system type. +# You can get the latest version of this script from: +# http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.guess;hb=HEAD me=`echo "$0" | sed -e 's,.*/,,'` @@ -56,8 +56,8 @@ GNU config.guess ($timestamp) Originally written by Per Bothner. -Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005 -Free Software Foundation, Inc. +Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, +2002, 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." @@ -170,7 +170,7 @@ arm*|i386|m68k|ns32k|sh3*|sparc|vax) eval $set_cc_for_build if echo __ELF__ | $CC_FOR_BUILD -E - 2>/dev/null \ - | grep __ELF__ >/dev/null + | grep -q __ELF__ then # Once all utilities can be ECOFF (netbsdecoff) or a.out (netbsdaout). # Return netbsd for either. FIX? @@ -324,14 +324,30 @@ case `/usr/bin/uname -p` in sparc) echo sparc-icl-nx7; exit ;; esac ;; + s390x:SunOS:*:*) + echo ${UNAME_MACHINE}-ibm-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` + exit ;; sun4H:SunOS:5.*:*) echo sparc-hal-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit ;; sun4*:SunOS:5.*:* | tadpole*:SunOS:5.*:*) echo sparc-sun-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit ;; - i86pc:SunOS:5.*:* | ix86xen:SunOS:5.*:*) - echo i386-pc-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` + i86pc:SunOS:5.*:* | i86xen:SunOS:5.*:*) + eval $set_cc_for_build + SUN_ARCH="i386" + # If there is a compiler, see if it is configured for 64-bit objects. + # Note that the Sun cc does not turn __LP64__ into 1 like gcc does. + # This test works for both compilers. + if [ "$CC_FOR_BUILD" != 'no_compiler_found' ]; then + if (echo '#ifdef __amd64'; echo IS_64BIT_ARCH; echo '#endif') | \ + (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | \ + grep IS_64BIT_ARCH >/dev/null + then + SUN_ARCH="x86_64" + fi + fi + echo ${SUN_ARCH}-pc-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit ;; sun4*:SunOS:6*:*) # According to config.sub, this is the proper way to canonicalize @@ -532,7 +548,7 @@ echo rs6000-ibm-aix3.2 fi exit ;; - *:AIX:*:[45]) + *:AIX:*:[456]) IBM_CPU_ID=`/usr/sbin/lsdev -C -c processor -S available | sed 1q | awk '{ print $1 }'` if /usr/sbin/lsattr -El ${IBM_CPU_ID} | grep ' POWER' >/dev/null 2>&1; then IBM_ARCH=rs6000 @@ -640,7 +656,7 @@ # => hppa64-hp-hpux11.23 if echo __LP64__ | (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | - grep __LP64__ >/dev/null + grep -q __LP64__ then HP_ARCH="hppa2.0w" else @@ -791,18 +807,24 @@ i*:PW*:*) echo ${UNAME_MACHINE}-pc-pw32 exit ;; - *:Interix*:[3456]*) + *:Interix*:*) case ${UNAME_MACHINE} in - x86) + x86) echo i586-pc-interix${UNAME_RELEASE} exit ;; - EM64T | authenticamd) + authenticamd | genuineintel | EM64T) echo x86_64-unknown-interix${UNAME_RELEASE} exit ;; + IA64) + echo ia64-unknown-interix${UNAME_RELEASE} + exit ;; esac ;; [345]86:Windows_95:* | [345]86:Windows_98:* | [345]86:Windows_NT:*) echo i${UNAME_MACHINE}-pc-mks exit ;; + 8664:Windows_NT:*) + echo x86_64-pc-mks + exit ;; i*:Windows_NT*:* | Pentium*:Windows_NT*:*) # How do we know it's Interix rather than the generic POSIX subsystem? # It also conflicts with pre-2.0 versions of AT&T UWIN. Should we @@ -832,8 +854,29 @@ i*86:Minix:*:*) echo ${UNAME_MACHINE}-pc-minix exit ;; + alpha:Linux:*:*) + case `sed -n '/^cpu model/s/^.*: \(.*\)/\1/p' < /proc/cpuinfo` in + EV5) UNAME_MACHINE=alphaev5 ;; + EV56) UNAME_MACHINE=alphaev56 ;; + PCA56) UNAME_MACHINE=alphapca56 ;; + PCA57) UNAME_MACHINE=alphapca56 ;; + EV6) UNAME_MACHINE=alphaev6 ;; + EV67) UNAME_MACHINE=alphaev67 ;; + EV68*) UNAME_MACHINE=alphaev68 ;; + esac + objdump --private-headers /bin/sh | grep -q ld.so.1 + if test "$?" = 0 ; then LIBC="libc1" ; else LIBC="" ; fi + echo ${UNAME_MACHINE}-unknown-linux-gnu${LIBC} + exit ;; arm*:Linux:*:*) - echo ${UNAME_MACHINE}-unknown-linux-gnu + eval $set_cc_for_build + if echo __ARM_EABI__ | $CC_FOR_BUILD -E - 2>/dev/null \ + | grep -q __ARM_EABI__ + then + echo ${UNAME_MACHINE}-unknown-linux-gnu + else + echo ${UNAME_MACHINE}-unknown-linux-gnueabi + fi exit ;; avr32*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu @@ -847,6 +890,17 @@ frv:Linux:*:*) echo frv-unknown-linux-gnu exit ;; + i*86:Linux:*:*) + LIBC=gnu + eval $set_cc_for_build + sed 's/^ //' << EOF >$dummy.c + #ifdef __dietlibc__ + LIBC=dietlibc + #endif +EOF + eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep '^LIBC'` + echo "${UNAME_MACHINE}-pc-linux-${LIBC}" + exit ;; ia64:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; @@ -856,74 +910,33 @@ m68*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; - mips:Linux:*:*) + mips:Linux:*:* | mips64:Linux:*:*) eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #undef CPU - #undef mips - #undef mipsel + #undef ${UNAME_MACHINE} + #undef ${UNAME_MACHINE}el #if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL) - CPU=mipsel + CPU=${UNAME_MACHINE}el #else #if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB) - CPU=mips + CPU=${UNAME_MACHINE} #else CPU= #endif #endif EOF - eval "`$CC_FOR_BUILD -E $dummy.c 2>/dev/null | sed -n ' - /^CPU/{ - s: ::g - p - }'`" - test x"${CPU}" != x && { echo "${CPU}-unknown-linux-gnu"; exit; } - ;; - mips64:Linux:*:*) - eval $set_cc_for_build - sed 's/^ //' << EOF >$dummy.c - #undef CPU - #undef mips64 - #undef mips64el - #if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL) - CPU=mips64el - #else - #if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB) - CPU=mips64 - #else - CPU= - #endif - #endif -EOF - eval "`$CC_FOR_BUILD -E $dummy.c 2>/dev/null | sed -n ' - /^CPU/{ - s: ::g - p - }'`" + eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep '^CPU'` test x"${CPU}" != x && { echo "${CPU}-unknown-linux-gnu"; exit; } ;; or32:Linux:*:*) echo or32-unknown-linux-gnu exit ;; - ppc:Linux:*:*) - echo powerpc-unknown-linux-gnu + padre:Linux:*:*) + echo sparc-unknown-linux-gnu exit ;; - ppc64:Linux:*:*) - echo powerpc64-unknown-linux-gnu - exit ;; - alpha:Linux:*:*) - case `sed -n '/^cpu model/s/^.*: \(.*\)/\1/p' < /proc/cpuinfo` in - EV5) UNAME_MACHINE=alphaev5 ;; - EV56) UNAME_MACHINE=alphaev56 ;; - PCA56) UNAME_MACHINE=alphapca56 ;; - PCA57) UNAME_MACHINE=alphapca56 ;; - EV6) UNAME_MACHINE=alphaev6 ;; - EV67) UNAME_MACHINE=alphaev67 ;; - EV68*) UNAME_MACHINE=alphaev68 ;; - esac - objdump --private-headers /bin/sh | grep ld.so.1 >/dev/null - if test "$?" = 0 ; then LIBC="libc1" ; else LIBC="" ; fi - echo ${UNAME_MACHINE}-unknown-linux-gnu${LIBC} + parisc64:Linux:*:* | hppa64:Linux:*:*) + echo hppa64-unknown-linux-gnu exit ;; parisc:Linux:*:* | hppa:Linux:*:*) # Look for CPU level @@ -933,8 +946,11 @@ *) echo hppa-unknown-linux-gnu ;; esac exit ;; - parisc64:Linux:*:* | hppa64:Linux:*:*) - echo hppa64-unknown-linux-gnu + ppc64:Linux:*:*) + echo powerpc64-unknown-linux-gnu + exit ;; + ppc:Linux:*:*) + echo powerpc-unknown-linux-gnu exit ;; s390:Linux:*:* | s390x:Linux:*:*) echo ${UNAME_MACHINE}-ibm-linux @@ -954,72 +970,9 @@ x86_64:Linux:*:*) echo x86_64-unknown-linux-gnu exit ;; - xtensa:Linux:*:*) - echo xtensa-unknown-linux-gnu + xtensa*:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; - i*86:Linux:*:*) - # The BFD linker knows what the default object file format is, so - # first see if it will tell us. cd to the root directory to prevent - # problems with other programs or directories called `ld' in the path. - # Set LC_ALL=C to ensure ld outputs messages in English. - ld_supported_targets=`cd /; LC_ALL=C ld --help 2>&1 \ - | sed -ne '/supported targets:/!d - s/[ ][ ]*/ /g - s/.*supported targets: *// - s/ .*// - p'` - case "$ld_supported_targets" in - elf32-i386) - TENTATIVE="${UNAME_MACHINE}-pc-linux-gnu" - ;; - a.out-i386-linux) - echo "${UNAME_MACHINE}-pc-linux-gnuaout" - exit ;; - coff-i386) - echo "${UNAME_MACHINE}-pc-linux-gnucoff" - exit ;; - "") - # Either a pre-BFD a.out linker (linux-gnuoldld) or - # one that does not give us useful --help. - echo "${UNAME_MACHINE}-pc-linux-gnuoldld" - exit ;; - esac - # Determine whether the default compiler is a.out or elf - eval $set_cc_for_build - sed 's/^ //' << EOF >$dummy.c - #include - #ifdef __ELF__ - # ifdef __GLIBC__ - # if __GLIBC__ >= 2 - LIBC=gnu - # else - LIBC=gnulibc1 - # endif - # else - LIBC=gnulibc1 - # endif - #else - #if defined(__INTEL_COMPILER) || defined(__PGI) || defined(__SUNPRO_C) || defined(__SUNPRO_CC) - LIBC=gnu - #else - LIBC=gnuaout - #endif - #endif - #ifdef __dietlibc__ - LIBC=dietlibc - #endif -EOF - eval "`$CC_FOR_BUILD -E $dummy.c 2>/dev/null | sed -n ' - /^LIBC/{ - s: ::g - p - }'`" - test x"${LIBC}" != x && { - echo "${UNAME_MACHINE}-pc-linux-${LIBC}" - exit - } - test x"${TENTATIVE}" != x && { echo "${TENTATIVE}"; exit; } - ;; i*86:DYNIX/ptx:4*:*) # ptx 4.0 does uname -s correctly, with DYNIX/ptx in there. # earlier versions are messed up and put the nodename in both @@ -1048,7 +1001,7 @@ i*86:syllable:*:*) echo ${UNAME_MACHINE}-pc-syllable exit ;; - i*86:LynxOS:2.*:* | i*86:LynxOS:3.[01]*:* | i*86:LynxOS:4.0*:*) + i*86:LynxOS:2.*:* | i*86:LynxOS:3.[01]*:* | i*86:LynxOS:4.[02]*:*) echo i386-unknown-lynxos${UNAME_RELEASE} exit ;; i*86:*DOS:*:*) @@ -1092,8 +1045,11 @@ pc:*:*:*) # Left here for compatibility: # uname -m prints for DJGPP always 'pc', but it prints nothing about - # the processor, so we play safe by assuming i386. - echo i386-pc-msdosdjgpp + # the processor, so we play safe by assuming i586. + # Note: whatever this is, it MUST be the same as what config.sub + # prints for the "djgpp" host, or else GDB configury will decide that + # this is a cross-build. + echo i586-pc-msdosdjgpp exit ;; Intel:Mach:3*:*) echo i386-pc-mach3 @@ -1131,6 +1087,16 @@ 3[34]??:*:4.0:* | 3[34]??,*:*:4.0:*) /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ && { echo i486-ncr-sysv4; exit; } ;; + NCR*:*:4.2:* | MPRAS*:*:4.2:*) + OS_REL='.3' + test -r /etc/.relid \ + && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid` + /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ + && { echo i486-ncr-sysv4.3${OS_REL}; exit; } + /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \ + && { echo i586-ncr-sysv4.3${OS_REL}; exit; } + /bin/uname -p 2>/dev/null | /bin/grep pteron >/dev/null \ + && { echo i586-ncr-sysv4.3${OS_REL}; exit; } ;; m68*:LynxOS:2.*:* | m68*:LynxOS:3.0*:*) echo m68k-unknown-lynxos${UNAME_RELEASE} exit ;; @@ -1143,7 +1109,7 @@ rs6000:LynxOS:2.*:*) echo rs6000-unknown-lynxos${UNAME_RELEASE} exit ;; - PowerPC:LynxOS:2.*:* | PowerPC:LynxOS:3.[01]*:* | PowerPC:LynxOS:4.0*:*) + PowerPC:LynxOS:2.*:* | PowerPC:LynxOS:3.[01]*:* | PowerPC:LynxOS:4.[02]*:*) echo powerpc-unknown-lynxos${UNAME_RELEASE} exit ;; SM[BE]S:UNIX_SV:*:*) @@ -1206,6 +1172,9 @@ BePC:BeOS:*:*) # BeOS running on Intel PC compatible. echo i586-pc-beos exit ;; + BePC:Haiku:*:*) # Haiku running on Intel PC compatible. + echo i586-pc-haiku + exit ;; SX-4:SUPER-UX:*:*) echo sx4-nec-superux${UNAME_RELEASE} exit ;; @@ -1233,6 +1202,16 @@ *:Darwin:*:*) UNAME_PROCESSOR=`uname -p` || UNAME_PROCESSOR=unknown case $UNAME_PROCESSOR in + i386) + eval $set_cc_for_build + if [ "$CC_FOR_BUILD" != 'no_compiler_found' ]; then + if (echo '#ifdef __LP64__'; echo IS_64BIT_ARCH; echo '#endif') | \ + (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | \ + grep IS_64BIT_ARCH >/dev/null + then + UNAME_PROCESSOR="x86_64" + fi + fi ;; unknown) UNAME_PROCESSOR=powerpc ;; esac echo ${UNAME_PROCESSOR}-apple-darwin${UNAME_RELEASE} @@ -1314,6 +1293,9 @@ i*86:rdos:*:*) echo ${UNAME_MACHINE}-pc-rdos exit ;; + i*86:AROS:*:*) + echo ${UNAME_MACHINE}-pc-aros + exit ;; esac #echo '(No uname command or uname output not recognized.)' 1>&2 @@ -1474,9 +1456,9 @@ the operating system you are using. It is advised that you download the most up to date version of the config scripts from - http://savannah.gnu.org/cgi-bin/viewcvs/*checkout*/config/config/config.guess + http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.guess;hb=HEAD and - http://savannah.gnu.org/cgi-bin/viewcvs/*checkout*/config/config/config.sub + http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.sub;hb=HEAD If the version you run ($0) is already up to date, please send the following data and any information you think might be Modified: python/branches/py3k/Modules/_ctypes/libffi/config.sub ============================================================================== --- python/branches/py3k/Modules/_ctypes/libffi/config.sub (original) +++ python/branches/py3k/Modules/_ctypes/libffi/config.sub Mon Mar 15 14:25:28 2010 @@ -1,10 +1,10 @@ #! /bin/sh # Configuration validation subroutine script. # Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, -# 2000, 2001, 2002, 2003, 2004, 2005, 2006 Free Software Foundation, -# Inc. +# 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 +# Free Software Foundation, Inc. -timestamp='2007-04-29' +timestamp='2009-11-07' # This file is (in principle) common to ALL GNU software. # The presence of a machine in this file suggests that SOME GNU software @@ -32,13 +32,16 @@ # Please send patches to . Submit a context -# diff and a properly formatted ChangeLog entry. +# diff and a properly formatted GNU ChangeLog entry. # # Configuration subroutine to validate and canonicalize a configuration type. # Supply the specified configuration type as an argument. # If it is invalid, we print an error message on stderr and exit with code 1. # Otherwise, we print the canonical config type on stdout and succeed. +# You can get the latest version of this script from: +# http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.sub;hb=HEAD + # This file is supposed to be the same for all GNU packages # and recognize all the CPU types, system types and aliases # that are meaningful with *any* GNU software. @@ -72,8 +75,8 @@ version="\ GNU config.sub ($timestamp) -Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005 -Free Software Foundation, Inc. +Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, +2002, 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." @@ -122,6 +125,7 @@ case $maybe_os in nto-qnx* | linux-gnu* | linux-dietlibc | linux-newlib* | linux-uclibc* | \ uclinux-uclibc* | uclinux-gnu* | kfreebsd*-gnu* | knetbsd*-gnu* | netbsd*-gnu* | \ + kopensolaris*-gnu* | \ storm-chaos* | os2-emx* | rtmk-nova*) os=-$maybe_os basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'` @@ -148,10 +152,13 @@ -convergent* | -ncr* | -news | -32* | -3600* | -3100* | -hitachi* |\ -c[123]* | -convex* | -sun | -crds | -omron* | -dg | -ultra | -tti* | \ -harris | -dolphin | -highlevel | -gould | -cbm | -ns | -masscomp | \ - -apple | -axis | -knuth | -cray) + -apple | -axis | -knuth | -cray | -microblaze) os= basic_machine=$1 ;; + -bluegene*) + os=-cnk + ;; -sim | -cisco | -oki | -wec | -winbond) os= basic_machine=$1 @@ -249,13 +256,16 @@ | h8300 | h8500 | hppa | hppa1.[01] | hppa2.0 | hppa2.0[nw] | hppa64 \ | i370 | i860 | i960 | ia64 \ | ip2k | iq2000 \ + | lm32 \ | m32c | m32r | m32rle | m68000 | m68k | m88k \ - | maxq | mb | microblaze | mcore | mep \ + | maxq | mb | microblaze | mcore | mep | metag \ | mips | mipsbe | mipseb | mipsel | mipsle \ | mips16 \ | mips64 | mips64el \ - | mips64vr | mips64vrel \ + | mips64octeon | mips64octeonel \ | mips64orion | mips64orionel \ + | mips64r5900 | mips64r5900el \ + | mips64vr | mips64vrel \ | mips64vr4100 | mips64vr4100el \ | mips64vr4300 | mips64vr4300el \ | mips64vr5000 | mips64vr5000el \ @@ -268,6 +278,7 @@ | mipsisa64sr71k | mipsisa64sr71kel \ | mipstx39 | mipstx39el \ | mn10200 | mn10300 \ + | moxie \ | mt \ | msp430 \ | nios | nios2 \ @@ -276,20 +287,22 @@ | pdp10 | pdp11 | pj | pjl \ | powerpc | powerpc64 | powerpc64le | powerpcle | ppcbe \ | pyramid \ + | rx \ | score \ - | sh | sh[1234] | sh[24]a | sh[23]e | sh[34]eb | sheb | shbe | shle | sh[1234]le | sh3ele \ + | sh | sh[1234] | sh[24]a | sh[24]aeb | sh[23]e | sh[34]eb | sheb | shbe | shle | sh[1234]le | sh3ele \ | sh64 | sh64le \ | sparc | sparc64 | sparc64b | sparc64v | sparc86x | sparclet | sparclite \ | sparcv8 | sparcv9 | sparcv9b | sparcv9v \ | spu | strongarm \ | tahoe | thumb | tic4x | tic80 | tron \ + | ubicom32 \ | v850 | v850e \ | we32k \ | x86 | xc16x | xscale | xscalee[bl] | xstormy16 | xtensa \ - | z8k) + | z8k | z80) basic_machine=$basic_machine-unknown ;; - m6811 | m68hc11 | m6812 | m68hc12) + m6811 | m68hc11 | m6812 | m68hc12 | picochip) # Motorola 68HC11/12. basic_machine=$basic_machine-unknown os=-none @@ -329,14 +342,17 @@ | hppa-* | hppa1.[01]-* | hppa2.0-* | hppa2.0[nw]-* | hppa64-* \ | i*86-* | i860-* | i960-* | ia64-* \ | ip2k-* | iq2000-* \ + | lm32-* \ | m32c-* | m32r-* | m32rle-* \ | m68000-* | m680[012346]0-* | m68360-* | m683?2-* | m68k-* \ - | m88110-* | m88k-* | maxq-* | mcore-* \ + | m88110-* | m88k-* | maxq-* | mcore-* | metag-* | microblaze-* \ | mips-* | mipsbe-* | mipseb-* | mipsel-* | mipsle-* \ | mips16-* \ | mips64-* | mips64el-* \ - | mips64vr-* | mips64vrel-* \ + | mips64octeon-* | mips64octeonel-* \ | mips64orion-* | mips64orionel-* \ + | mips64r5900-* | mips64r5900el-* \ + | mips64vr-* | mips64vrel-* \ | mips64vr4100-* | mips64vr4100el-* \ | mips64vr4300-* | mips64vr4300el-* \ | mips64vr5000-* | mips64vr5000el-* \ @@ -357,21 +373,26 @@ | pdp10-* | pdp11-* | pj-* | pjl-* | pn-* | power-* \ | powerpc-* | powerpc64-* | powerpc64le-* | powerpcle-* | ppcbe-* \ | pyramid-* \ - | romp-* | rs6000-* \ - | sh-* | sh[1234]-* | sh[24]a-* | sh[23]e-* | sh[34]eb-* | sheb-* | shbe-* \ + | romp-* | rs6000-* | rx-* \ + | sh-* | sh[1234]-* | sh[24]a-* | sh[24]aeb-* | sh[23]e-* | sh[34]eb-* | sheb-* | shbe-* \ | shle-* | sh[1234]le-* | sh3ele-* | sh64-* | sh64le-* \ | sparc-* | sparc64-* | sparc64b-* | sparc64v-* | sparc86x-* | sparclet-* \ | sparclite-* \ | sparcv8-* | sparcv9-* | sparcv9b-* | sparcv9v-* | strongarm-* | sv1-* | sx?-* \ | tahoe-* | thumb-* \ - | tic30-* | tic4x-* | tic54x-* | tic55x-* | tic6x-* | tic80-* \ + | tic30-* | tic4x-* | tic54x-* | tic55x-* | tic6x-* | tic80-* | tile-* \ | tron-* \ + | ubicom32-* \ | v850-* | v850e-* | vax-* \ | we32k-* \ | x86-* | x86_64-* | xc16x-* | xps100-* | xscale-* | xscalee[bl]-* \ - | xstormy16-* | xtensa-* \ + | xstormy16-* | xtensa*-* \ | ymp-* \ - | z8k-*) + | z8k-* | z80-*) + ;; + # Recognize the basic CPU types without company name, with glob match. + xtensa*) + basic_machine=$basic_machine-unknown ;; # Recognize the various machine names and aliases which stand # for a CPU type and a company and sometimes even an OS. @@ -435,6 +456,10 @@ basic_machine=m68k-apollo os=-bsd ;; + aros) + basic_machine=i386-pc + os=-aros + ;; aux) basic_machine=m68k-apple os=-aux @@ -443,10 +468,26 @@ basic_machine=ns32k-sequent os=-dynix ;; + blackfin) + basic_machine=bfin-unknown + os=-linux + ;; + blackfin-*) + basic_machine=bfin-`echo $basic_machine | sed 's/^[^-]*-//'` + os=-linux + ;; + bluegene*) + basic_machine=powerpc-ibm + os=-cnk + ;; c90) basic_machine=c90-cray os=-unicos ;; + cegcc) + basic_machine=arm-unknown + os=-cegcc + ;; convex-c1) basic_machine=c1-convex os=-bsd @@ -475,8 +516,8 @@ basic_machine=craynv-cray os=-unicosmp ;; - cr16c) - basic_machine=cr16c-unknown + cr16) + basic_machine=cr16-unknown os=-elf ;; crds | unos) @@ -514,6 +555,10 @@ basic_machine=m88k-motorola os=-sysv3 ;; + dicos) + basic_machine=i686-pc + os=-dicos + ;; djgpp) basic_machine=i586-pc os=-msdosdjgpp @@ -668,6 +713,14 @@ basic_machine=m68k-isi os=-sysv ;; + m68knommu) + basic_machine=m68k-unknown + os=-linux + ;; + m68knommu-*) + basic_machine=m68k-`echo $basic_machine | sed 's/^[^-]*-//'` + os=-linux + ;; m88k-omron*) basic_machine=m88k-omron ;; @@ -679,6 +732,9 @@ basic_machine=ns32k-utek os=-sysv ;; + microblaze) + basic_machine=microblaze-xilinx + ;; mingw32) basic_machine=i386-pc os=-mingw32 @@ -813,6 +869,14 @@ basic_machine=i860-intel os=-osf ;; + parisc) + basic_machine=hppa-unknown + os=-linux + ;; + parisc-*) + basic_machine=hppa-`echo $basic_machine | sed 's/^[^-]*-//'` + os=-linux + ;; pbd) basic_machine=sparc-tti ;; @@ -1021,6 +1085,10 @@ basic_machine=tic6x-unknown os=-coff ;; + tile*) + basic_machine=tile-unknown + os=-linux-gnu + ;; tx39) basic_machine=mipstx39-unknown ;; @@ -1096,6 +1164,10 @@ basic_machine=z8k-unknown os=-sim ;; + z80-*-coff) + basic_machine=z80-unknown + os=-sim + ;; none) basic_machine=none-none os=-none @@ -1134,7 +1206,7 @@ we32k) basic_machine=we32k-att ;; - sh[1234] | sh[24]a | sh[34]eb | sh[1234]le | sh[23]ele) + sh[1234] | sh[24]a | sh[24]aeb | sh[34]eb | sh[1234]le | sh[23]ele) basic_machine=sh-unknown ;; sparc | sparcv8 | sparcv9 | sparcv9b | sparcv9v) @@ -1204,10 +1276,11 @@ # Each alternative MUST END IN A *, to match a version number. # -sysv* is not here because it comes later, after sysvr4. -gnu* | -bsd* | -mach* | -minix* | -genix* | -ultrix* | -irix* \ - | -*vms* | -sco* | -esix* | -isc* | -aix* | -sunos | -sunos[34]*\ + | -*vms* | -sco* | -esix* | -isc* | -aix* | -cnk* | -sunos | -sunos[34]*\ | -hpux* | -unos* | -osf* | -luna* | -dgux* | -solaris* | -sym* \ + | -kopensolaris* \ | -amigaos* | -amigados* | -msdos* | -newsos* | -unicos* | -aof* \ - | -aos* \ + | -aos* | -aros* \ | -nindy* | -vxsim* | -vxworks* | -ebmon* | -hms* | -mvs* \ | -clix* | -riscos* | -uniplus* | -iris* | -rtu* | -xenix* \ | -hiux* | -386bsd* | -knetbsd* | -mirbsd* | -netbsd* \ @@ -1216,7 +1289,7 @@ | -bosx* | -nextstep* | -cxux* | -aout* | -elf* | -oabi* \ | -ptx* | -coff* | -ecoff* | -winnt* | -domain* | -vsta* \ | -udi* | -eabi* | -lites* | -ieee* | -go32* | -aux* \ - | -chorusos* | -chorusrdb* \ + | -chorusos* | -chorusrdb* | -cegcc* \ | -cygwin* | -pe* | -psos* | -moss* | -proelf* | -rtems* \ | -mingw32* | -linux-gnu* | -linux-newlib* | -linux-uclibc* \ | -uxpv* | -beos* | -mpeix* | -udk* \ @@ -1226,7 +1299,7 @@ | -os2* | -vos* | -palmos* | -uclinux* | -nucleus* \ | -morphos* | -superux* | -rtmk* | -rtmk-nova* | -windiss* \ | -powermax* | -dnix* | -nx6 | -nx7 | -sei* | -dragonfly* \ - | -skyos* | -haiku* | -rdos* | -toppers* | -drops*) + | -skyos* | -haiku* | -rdos* | -toppers* | -drops* | -es*) # Remember, each alternative MUST END IN *, to match a version number. ;; -qnx*) @@ -1356,6 +1429,9 @@ -zvmoe) os=-zvmoe ;; + -dicos*) + os=-dicos + ;; -none) ;; *) @@ -1553,7 +1629,7 @@ -sunos*) vendor=sun ;; - -aix*) + -cnk*|-aix*) vendor=ibm ;; -beos*) Modified: python/branches/py3k/Modules/_ctypes/libffi/configure ============================================================================== --- python/branches/py3k/Modules/_ctypes/libffi/configure (original) +++ python/branches/py3k/Modules/_ctypes/libffi/configure Mon Mar 15 14:25:28 2010 @@ -1,62 +1,85 @@ #! /bin/sh # Guess values for system-dependent variables and create Makefiles. -# Generated by GNU Autoconf 2.61 for libffi 3.0.5. +# Generated by GNU Autoconf 2.65 for libffi 3.0.9. # # Report bugs to . # +# # Copyright (C) 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001, -# 2002, 2003, 2004, 2005, 2006 Free Software Foundation, Inc. +# 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, +# Inc. +# +# # This configure script is free software; the Free Software Foundation # gives unlimited permission to copy, distribute and modify it. -## --------------------- ## -## M4sh Initialization. ## -## --------------------- ## +## -------------------- ## +## M4sh Initialization. ## +## -------------------- ## # Be more Bourne compatible DUALCASE=1; export DUALCASE # for MKS sh -if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then +if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then : emulate sh NULLCMD=: - # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which + # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which # is contrary to our usage. Disable this feature. alias -g '${1+"$@"}'='"$@"' setopt NO_GLOB_SUBST else - case `(set -o) 2>/dev/null` in - *posix*) set -o posix ;; + case `(set -o) 2>/dev/null` in #( + *posix*) : + set -o posix ;; #( + *) : + ;; esac - fi - - -# PATH needs CR -# Avoid depending upon Character Ranges. -as_cr_letters='abcdefghijklmnopqrstuvwxyz' -as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' -as_cr_Letters=$as_cr_letters$as_cr_LETTERS -as_cr_digits='0123456789' -as_cr_alnum=$as_cr_Letters$as_cr_digits - -# The user is always right. -if test "${PATH_SEPARATOR+set}" != set; then - echo "#! /bin/sh" >conf$$.sh - echo "exit 0" >>conf$$.sh - chmod +x conf$$.sh - if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then - PATH_SEPARATOR=';' - else - PATH_SEPARATOR=: +as_nl=' +' +export as_nl +# Printing a long string crashes Solaris 7 /usr/bin/printf. +as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' +as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo +as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo +# Prefer a ksh shell builtin over an external printf program on Solaris, +# but without wasting forks for bash or zsh. +if test -z "$BASH_VERSION$ZSH_VERSION" \ + && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then + as_echo='print -r --' + as_echo_n='print -rn --' +elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then + as_echo='printf %s\n' + as_echo_n='printf %s' +else + if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then + as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"' + as_echo_n='/usr/ucb/echo -n' + else + as_echo_body='eval expr "X$1" : "X\\(.*\\)"' + as_echo_n_body='eval + arg=$1; + case $arg in #( + *"$as_nl"*) + expr "X$arg" : "X\\(.*\\)$as_nl"; + arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;; + esac; + expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl" + ' + export as_echo_n_body + as_echo_n='sh -c $as_echo_n_body as_echo' fi - rm -f conf$$.sh + export as_echo_body + as_echo='sh -c $as_echo_body as_echo' fi -# Support unset when possible. -if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then - as_unset=unset -else - as_unset=false +# The user is always right. +if test "${PATH_SEPARATOR+set}" != set; then + PATH_SEPARATOR=: + (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { + (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || + PATH_SEPARATOR=';' + } fi @@ -65,20 +88,18 @@ # there to prevent editors from complaining about space-tab. # (If _AS_PATH_WALK were called with IFS unset, it would disable word # splitting by setting IFS to empty value.) -as_nl=' -' IFS=" "" $as_nl" # Find who we are. Look in the path if we contain no directory separator. -case $0 in +case $0 in #(( *[\\/]* ) as_myself=$0 ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. - test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break -done + test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break + done IFS=$as_save_IFS ;; @@ -89,354 +110,322 @@ as_myself=$0 fi if test ! -f "$as_myself"; then - echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 - { (exit 1); exit 1; } + $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 + exit 1 fi -# Work around bugs in pre-3.0 UWIN ksh. -for as_var in ENV MAIL MAILPATH -do ($as_unset $as_var) >/dev/null 2>&1 && $as_unset $as_var +# Unset variables that we do not need and which cause bugs (e.g. in +# pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1" +# suppresses any "Segmentation fault" message there. '((' could +# trigger a bug in pdksh 5.2.14. +for as_var in BASH_ENV ENV MAIL MAILPATH +do eval test x\${$as_var+set} = xset \ + && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : done PS1='$ ' PS2='> ' PS4='+ ' # NLS nuisances. -for as_var in \ - LANG LANGUAGE LC_ADDRESS LC_ALL LC_COLLATE LC_CTYPE LC_IDENTIFICATION \ - LC_MEASUREMENT LC_MESSAGES LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER \ - LC_TELEPHONE LC_TIME -do - if (set +x; test -z "`(eval $as_var=C; export $as_var) 2>&1`"); then - eval $as_var=C; export $as_var - else - ($as_unset $as_var) >/dev/null 2>&1 && $as_unset $as_var - fi -done - -# Required to use basename. -if expr a : '\(a\)' >/dev/null 2>&1 && - test "X`expr 00001 : '.*\(...\)'`" = X001; then - as_expr=expr -else - as_expr=false -fi - -if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then - as_basename=basename -else - as_basename=false -fi - - -# Name of the executable. -as_me=`$as_basename -- "$0" || -$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ - X"$0" : 'X\(//\)$' \| \ - X"$0" : 'X\(/\)' \| . 2>/dev/null || -echo X/"$0" | - sed '/^.*\/\([^/][^/]*\)\/*$/{ - s//\1/ - q - } - /^X\/\(\/\/\)$/{ - s//\1/ - q - } - /^X\/\(\/\).*/{ - s//\1/ - q - } - s/.*/./; q'` +LC_ALL=C +export LC_ALL +LANGUAGE=C +export LANGUAGE # CDPATH. -$as_unset CDPATH - +(unset CDPATH) >/dev/null 2>&1 && unset CDPATH if test "x$CONFIG_SHELL" = x; then - if (eval ":") 2>/dev/null; then - as_have_required=yes + as_bourne_compatible="if test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then : + emulate sh + NULLCMD=: + # Pre-4.2 versions of Zsh do word splitting on \${1+\"\$@\"}, which + # is contrary to our usage. Disable this feature. + alias -g '\${1+\"\$@\"}'='\"\$@\"' + setopt NO_GLOB_SUBST else - as_have_required=no + case \`(set -o) 2>/dev/null\` in #( + *posix*) : + set -o posix ;; #( + *) : + ;; +esac fi - - if test $as_have_required = yes && (eval ": -(as_func_return () { - (exit \$1) -} -as_func_success () { - as_func_return 0 -} -as_func_failure () { - as_func_return 1 -} -as_func_ret_success () { - return 0 -} -as_func_ret_failure () { - return 1 -} +" + as_required="as_fn_return () { (exit \$1); } +as_fn_success () { as_fn_return 0; } +as_fn_failure () { as_fn_return 1; } +as_fn_ret_success () { return 0; } +as_fn_ret_failure () { return 1; } exitcode=0 -if as_func_success; then - : -else - exitcode=1 - echo as_func_success failed. -fi - -if as_func_failure; then - exitcode=1 - echo as_func_failure succeeded. -fi - -if as_func_ret_success; then - : -else - exitcode=1 - echo as_func_ret_success failed. -fi - -if as_func_ret_failure; then - exitcode=1 - echo as_func_ret_failure succeeded. -fi - -if ( set x; as_func_ret_success y && test x = \"\$1\" ); then - : +as_fn_success || { exitcode=1; echo as_fn_success failed.; } +as_fn_failure && { exitcode=1; echo as_fn_failure succeeded.; } +as_fn_ret_success || { exitcode=1; echo as_fn_ret_success failed.; } +as_fn_ret_failure && { exitcode=1; echo as_fn_ret_failure succeeded.; } +if ( set x; as_fn_ret_success y && test x = \"\$1\" ); then : + +else + exitcode=1; echo positional parameters were not saved. +fi +test x\$exitcode = x0 || exit 1" + as_suggested=" as_lineno_1=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_1a=\$LINENO + as_lineno_2=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_2a=\$LINENO + eval 'test \"x\$as_lineno_1'\$as_run'\" != \"x\$as_lineno_2'\$as_run'\" && + test \"x\`expr \$as_lineno_1'\$as_run' + 1\`\" = \"x\$as_lineno_2'\$as_run'\"' || exit 1 +test \$(( 1 + 1 )) = 2 || exit 1" + if (eval "$as_required") 2>/dev/null; then : + as_have_required=yes else - exitcode=1 - echo positional parameters were not saved. + as_have_required=no fi + if test x$as_have_required = xyes && (eval "$as_suggested") 2>/dev/null; then : -test \$exitcode = 0) || { (exit 1); exit 1; } - -( - as_lineno_1=\$LINENO - as_lineno_2=\$LINENO - test \"x\$as_lineno_1\" != \"x\$as_lineno_2\" && - test \"x\`expr \$as_lineno_1 + 1\`\" = \"x\$as_lineno_2\") || { (exit 1); exit 1; } -") 2> /dev/null; then - : else - as_candidate_shells= - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +as_found=false for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. - case $as_dir in + as_found=: + case $as_dir in #( /*) for as_base in sh bash ksh sh5; do - as_candidate_shells="$as_candidate_shells $as_dir/$as_base" + # Try only shells that exist, to save several forks. + as_shell=$as_dir/$as_base + if { test -f "$as_shell" || test -f "$as_shell.exe"; } && + { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$as_shell"; } 2>/dev/null; then : + CONFIG_SHELL=$as_shell as_have_required=yes + if { $as_echo "$as_bourne_compatible""$as_suggested" | as_run=a "$as_shell"; } 2>/dev/null; then : + break 2 +fi +fi done;; esac + as_found=false done +$as_found || { if { test -f "$SHELL" || test -f "$SHELL.exe"; } && + { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$SHELL"; } 2>/dev/null; then : + CONFIG_SHELL=$SHELL as_have_required=yes +fi; } IFS=$as_save_IFS - for as_shell in $as_candidate_shells $SHELL; do - # Try only shells that exist, to save several forks. - if { test -f "$as_shell" || test -f "$as_shell.exe"; } && - { ("$as_shell") 2> /dev/null <<\_ASEOF -if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then - emulate sh - NULLCMD=: - # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which - # is contrary to our usage. Disable this feature. - alias -g '${1+"$@"}'='"$@"' - setopt NO_GLOB_SUBST -else - case `(set -o) 2>/dev/null` in - *posix*) set -o posix ;; -esac - -fi - - -: -_ASEOF -}; then - CONFIG_SHELL=$as_shell - as_have_required=yes - if { "$as_shell" 2> /dev/null <<\_ASEOF -if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then - emulate sh - NULLCMD=: - # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which - # is contrary to our usage. Disable this feature. - alias -g '${1+"$@"}'='"$@"' - setopt NO_GLOB_SUBST -else - case `(set -o) 2>/dev/null` in - *posix*) set -o posix ;; -esac - -fi - - -: -(as_func_return () { - (exit $1) -} -as_func_success () { - as_func_return 0 -} -as_func_failure () { - as_func_return 1 -} -as_func_ret_success () { - return 0 -} -as_func_ret_failure () { - return 1 -} - -exitcode=0 -if as_func_success; then - : -else - exitcode=1 - echo as_func_success failed. -fi - -if as_func_failure; then - exitcode=1 - echo as_func_failure succeeded. -fi - -if as_func_ret_success; then - : -else - exitcode=1 - echo as_func_ret_success failed. -fi - -if as_func_ret_failure; then - exitcode=1 - echo as_func_ret_failure succeeded. -fi - -if ( set x; as_func_ret_success y && test x = "$1" ); then - : -else - exitcode=1 - echo positional parameters were not saved. + if test "x$CONFIG_SHELL" != x; then : + # We cannot yet assume a decent shell, so we have to provide a + # neutralization value for shells without unset; and this also + # works around shells that cannot unset nonexistent variables. + BASH_ENV=/dev/null + ENV=/dev/null + (unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV + export CONFIG_SHELL + exec "$CONFIG_SHELL" "$as_myself" ${1+"$@"} fi -test $exitcode = 0) || { (exit 1); exit 1; } - -( - as_lineno_1=$LINENO - as_lineno_2=$LINENO - test "x$as_lineno_1" != "x$as_lineno_2" && - test "x`expr $as_lineno_1 + 1`" = "x$as_lineno_2") || { (exit 1); exit 1; } - -_ASEOF -}; then - break + if test x$as_have_required = xno; then : + $as_echo "$0: This script requires a shell more modern than all" + $as_echo "$0: the shells that I found on your system." + if test x${ZSH_VERSION+set} = xset ; then + $as_echo "$0: In particular, zsh $ZSH_VERSION has bugs and should" + $as_echo "$0: be upgraded to zsh 4.3.4 or later." + else + $as_echo "$0: Please tell bug-autoconf at gnu.org and +$0: http://gcc.gnu.org/bugs.html about your system, +$0: including any error possibly output before this +$0: message. Then install a modern shell, or manually run +$0: the script under such a shell if you do have one." + fi + exit 1 fi - fi - - done - - if test "x$CONFIG_SHELL" != x; then - for as_var in BASH_ENV ENV - do ($as_unset $as_var) >/dev/null 2>&1 && $as_unset $as_var - done - export CONFIG_SHELL - exec "$CONFIG_SHELL" "$as_myself" ${1+"$@"} fi +SHELL=${CONFIG_SHELL-/bin/sh} +export SHELL +# Unset more variables known to interfere with behavior of common tools. +CLICOLOR_FORCE= GREP_OPTIONS= +unset CLICOLOR_FORCE GREP_OPTIONS +## --------------------- ## +## M4sh Shell Functions. ## +## --------------------- ## +# as_fn_unset VAR +# --------------- +# Portably unset VAR. +as_fn_unset () +{ + { eval $1=; unset $1;} +} +as_unset=as_fn_unset + +# as_fn_set_status STATUS +# ----------------------- +# Set $? to STATUS, without forking. +as_fn_set_status () +{ + return $1 +} # as_fn_set_status + +# as_fn_exit STATUS +# ----------------- +# Exit the shell with STATUS, even in a "trap 0" or "set -e" context. +as_fn_exit () +{ + set +e + as_fn_set_status $1 + exit $1 +} # as_fn_exit + +# as_fn_mkdir_p +# ------------- +# Create "$as_dir" as a directory, including parents if necessary. +as_fn_mkdir_p () +{ - if test $as_have_required = no; then - echo This script requires a shell more modern than all the - echo shells that I found on your system. Please install a - echo modern shell, or manually run the script under such a - echo shell if you do have one. - { (exit 1); exit 1; } -fi - + case $as_dir in #( + -*) as_dir=./$as_dir;; + esac + test -d "$as_dir" || eval $as_mkdir_p || { + as_dirs= + while :; do + case $as_dir in #( + *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( + *) as_qdir=$as_dir;; + esac + as_dirs="'$as_qdir' $as_dirs" + as_dir=`$as_dirname -- "$as_dir" || +$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$as_dir" : 'X\(//\)[^/]' \| \ + X"$as_dir" : 'X\(//\)$' \| \ + X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X"$as_dir" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + test -d "$as_dir" && break + done + test -z "$as_dirs" || eval "mkdir $as_dirs" + } || test -d "$as_dir" || as_fn_error "cannot create directory $as_dir" -fi -fi +} # as_fn_mkdir_p +# as_fn_append VAR VALUE +# ---------------------- +# Append the text in VALUE to the end of the definition contained in VAR. Take +# advantage of any shell optimizations that allow amortized linear growth over +# repeated appends, instead of the typical quadratic growth present in naive +# implementations. +if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then : + eval 'as_fn_append () + { + eval $1+=\$2 + }' +else + as_fn_append () + { + eval $1=\$$1\$2 + } +fi # as_fn_append +# as_fn_arith ARG... +# ------------------ +# Perform arithmetic evaluation on the ARGs, and store the result in the +# global $as_val. Take advantage of shells that can avoid forks. The arguments +# must be portable across $(()) and expr. +if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then : + eval 'as_fn_arith () + { + as_val=$(( $* )) + }' +else + as_fn_arith () + { + as_val=`expr "$@" || test $? -eq 1` + } +fi # as_fn_arith -(eval "as_func_return () { - (exit \$1) -} -as_func_success () { - as_func_return 0 -} -as_func_failure () { - as_func_return 1 -} -as_func_ret_success () { - return 0 -} -as_func_ret_failure () { - return 1 -} +# as_fn_error ERROR [LINENO LOG_FD] +# --------------------------------- +# Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are +# provided, also output the error to LOG_FD, referencing LINENO. Then exit the +# script with status $?, using 1 if that was 0. +as_fn_error () +{ + as_status=$?; test $as_status -eq 0 && as_status=1 + if test "$3"; then + as_lineno=${as_lineno-"$2"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + $as_echo "$as_me:${as_lineno-$LINENO}: error: $1" >&$3 + fi + $as_echo "$as_me: error: $1" >&2 + as_fn_exit $as_status +} # as_fn_error -exitcode=0 -if as_func_success; then - : +if expr a : '\(a\)' >/dev/null 2>&1 && + test "X`expr 00001 : '.*\(...\)'`" = X001; then + as_expr=expr else - exitcode=1 - echo as_func_success failed. -fi - -if as_func_failure; then - exitcode=1 - echo as_func_failure succeeded. + as_expr=false fi -if as_func_ret_success; then - : +if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then + as_basename=basename else - exitcode=1 - echo as_func_ret_success failed. -fi - -if as_func_ret_failure; then - exitcode=1 - echo as_func_ret_failure succeeded. + as_basename=false fi -if ( set x; as_func_ret_success y && test x = \"\$1\" ); then - : +if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then + as_dirname=dirname else - exitcode=1 - echo positional parameters were not saved. + as_dirname=false fi -test \$exitcode = 0") || { - echo No shell found that supports shell functions. - echo Please tell autoconf at gnu.org about your system, - echo including any error possibly output before this - echo message -} +as_me=`$as_basename -- "$0" || +$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ + X"$0" : 'X\(//\)$' \| \ + X"$0" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X/"$0" | + sed '/^.*\/\([^/][^/]*\)\/*$/{ + s//\1/ + q + } + /^X\/\(\/\/\)$/{ + s//\1/ + q + } + /^X\/\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` +# Avoid depending upon Character Ranges. +as_cr_letters='abcdefghijklmnopqrstuvwxyz' +as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' +as_cr_Letters=$as_cr_letters$as_cr_LETTERS +as_cr_digits='0123456789' +as_cr_alnum=$as_cr_Letters$as_cr_digits - as_lineno_1=$LINENO - as_lineno_2=$LINENO - test "x$as_lineno_1" != "x$as_lineno_2" && - test "x`expr $as_lineno_1 + 1`" = "x$as_lineno_2" || { - - # Create $as_me.lineno as a copy of $as_myself, but with $LINENO - # uniformly replaced by the line number. The first 'sed' inserts a - # line-number line after each line using $LINENO; the second 'sed' - # does the real work. The second script uses 'N' to pair each - # line-number line with the line containing $LINENO, and appends - # trailing '-' during substitution so that $LINENO is not a special - # case at line end. - # (Raja R Harinath suggested sed '=', and Paul Eggert wrote the - # scripts with optimization help from Paolo Bonzini. Blame Lee - # E. McMahon (1931-1989) for sed's syntax. :-) + as_lineno_1=$LINENO as_lineno_1a=$LINENO + as_lineno_2=$LINENO as_lineno_2a=$LINENO + eval 'test "x$as_lineno_1'$as_run'" != "x$as_lineno_2'$as_run'" && + test "x`expr $as_lineno_1'$as_run' + 1`" = "x$as_lineno_2'$as_run'"' || { + # Blame Lee E. McMahon (1931-1989) for sed's syntax. :-) sed -n ' p /[$]LINENO/= @@ -453,8 +442,7 @@ s/-\n.*// ' >$as_me.lineno && chmod +x "$as_me.lineno" || - { echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2 - { (exit 1); exit 1; }; } + { $as_echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2; as_fn_exit 1; } # Don't try to exec as it changes $[0], causing all sort of problems # (the dirname of $[0] is not the place where we might find the @@ -464,49 +452,40 @@ exit } - -if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then - as_dirname=dirname -else - as_dirname=false -fi - ECHO_C= ECHO_N= ECHO_T= -case `echo -n x` in +case `echo -n x` in #((((( -n*) - case `echo 'x\c'` in + case `echo 'xy\c'` in *c*) ECHO_T=' ';; # ECHO_T is single tab character. - *) ECHO_C='\c';; + xy) ECHO_C='\c';; + *) echo `echo ksh88 bug on AIX 6.1` > /dev/null + ECHO_T=' ';; esac;; *) ECHO_N='-n';; esac -if expr a : '\(a\)' >/dev/null 2>&1 && - test "X`expr 00001 : '.*\(...\)'`" = X001; then - as_expr=expr -else - as_expr=false -fi - rm -f conf$$ conf$$.exe conf$$.file if test -d conf$$.dir; then rm -f conf$$.dir/conf$$.file else rm -f conf$$.dir - mkdir conf$$.dir + mkdir conf$$.dir 2>/dev/null fi -echo >conf$$.file -if ln -s conf$$.file conf$$ 2>/dev/null; then - as_ln_s='ln -s' - # ... but there are two gotchas: - # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. - # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. - # In both cases, we have to default to `cp -p'. - ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || +if (echo >conf$$.file) 2>/dev/null; then + if ln -s conf$$.file conf$$ 2>/dev/null; then + as_ln_s='ln -s' + # ... but there are two gotchas: + # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. + # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. + # In both cases, we have to default to `cp -p'. + ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || + as_ln_s='cp -p' + elif ln conf$$.file conf$$ 2>/dev/null; then + as_ln_s=ln + else as_ln_s='cp -p' -elif ln conf$$.file conf$$ 2>/dev/null; then - as_ln_s=ln + fi else as_ln_s='cp -p' fi @@ -514,7 +493,7 @@ rmdir conf$$.dir 2>/dev/null if mkdir -p . 2>/dev/null; then - as_mkdir_p=: + as_mkdir_p='mkdir -p "$as_dir"' else test -d ./-p && rmdir ./-p as_mkdir_p=false @@ -531,12 +510,12 @@ as_test_x=' eval sh -c '\'' if test -d "$1"; then - test -d "$1/."; + test -d "$1/."; else - case $1 in - -*)set "./$1";; + case $1 in #( + -*)set "./$1";; esac; - case `ls -ld'$as_ls_L_option' "$1" 2>/dev/null` in + case `ls -ld'$as_ls_L_option' "$1" 2>/dev/null` in #(( ???[sx]*):;;*)false;;esac;fi '\'' sh ' @@ -550,162 +529,8 @@ as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" - - -# Check that we are running under the correct shell. -SHELL=${CONFIG_SHELL-/bin/sh} - -case X$ECHO in -X*--fallback-echo) - # Remove one level of quotation (which was required for Make). - ECHO=`echo "$ECHO" | sed 's,\\\\\$\\$0,'$0','` - ;; -esac - -echo=${ECHO-echo} -if test "X$1" = X--no-reexec; then - # Discard the --no-reexec flag, and continue. - shift -elif test "X$1" = X--fallback-echo; then - # Avoid inline document here, it may be left over - : -elif test "X`($echo '\t') 2>/dev/null`" = 'X\t' ; then - # Yippee, $echo works! - : -else - # Restart under the correct shell. - exec $SHELL "$0" --no-reexec ${1+"$@"} -fi - -if test "X$1" = X--fallback-echo; then - # used as fallback echo - shift - cat </dev/null 2>&1 && unset CDPATH - -if test -z "$ECHO"; then -if test "X${echo_test_string+set}" != Xset; then -# find a string as large as possible, as long as the shell can cope with it - for cmd in 'sed 50q "$0"' 'sed 20q "$0"' 'sed 10q "$0"' 'sed 2q "$0"' 'echo test'; do - # expected sizes: less than 2Kb, 1Kb, 512 bytes, 16 bytes, ... - if (echo_test_string=`eval $cmd`) 2>/dev/null && - echo_test_string=`eval $cmd` && - (test "X$echo_test_string" = "X$echo_test_string") 2>/dev/null - then - break - fi - done -fi - -if test "X`($echo '\t') 2>/dev/null`" = 'X\t' && - echo_testing_string=`($echo "$echo_test_string") 2>/dev/null` && - test "X$echo_testing_string" = "X$echo_test_string"; then - : -else - # The Solaris, AIX, and Digital Unix default echo programs unquote - # backslashes. This makes it impossible to quote backslashes using - # echo "$something" | sed 's/\\/\\\\/g' - # - # So, first we look for a working echo in the user's PATH. - - lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR - for dir in $PATH /usr/ucb; do - IFS="$lt_save_ifs" - if (test -f $dir/echo || test -f $dir/echo$ac_exeext) && - test "X`($dir/echo '\t') 2>/dev/null`" = 'X\t' && - echo_testing_string=`($dir/echo "$echo_test_string") 2>/dev/null` && - test "X$echo_testing_string" = "X$echo_test_string"; then - echo="$dir/echo" - break - fi - done - IFS="$lt_save_ifs" - - if test "X$echo" = Xecho; then - # We didn't find a better echo, so look for alternatives. - if test "X`(print -r '\t') 2>/dev/null`" = 'X\t' && - echo_testing_string=`(print -r "$echo_test_string") 2>/dev/null` && - test "X$echo_testing_string" = "X$echo_test_string"; then - # This shell has a builtin print -r that does the trick. - echo='print -r' - elif (test -f /bin/ksh || test -f /bin/ksh$ac_exeext) && - test "X$CONFIG_SHELL" != X/bin/ksh; then - # If we have ksh, try running configure again with it. - ORIGINAL_CONFIG_SHELL=${CONFIG_SHELL-/bin/sh} - export ORIGINAL_CONFIG_SHELL - CONFIG_SHELL=/bin/ksh - export CONFIG_SHELL - exec $CONFIG_SHELL "$0" --no-reexec ${1+"$@"} - else - # Try using printf. - echo='printf %s\n' - if test "X`($echo '\t') 2>/dev/null`" = 'X\t' && - echo_testing_string=`($echo "$echo_test_string") 2>/dev/null` && - test "X$echo_testing_string" = "X$echo_test_string"; then - # Cool, printf works - : - elif echo_testing_string=`($ORIGINAL_CONFIG_SHELL "$0" --fallback-echo '\t') 2>/dev/null` && - test "X$echo_testing_string" = 'X\t' && - echo_testing_string=`($ORIGINAL_CONFIG_SHELL "$0" --fallback-echo "$echo_test_string") 2>/dev/null` && - test "X$echo_testing_string" = "X$echo_test_string"; then - CONFIG_SHELL=$ORIGINAL_CONFIG_SHELL - export CONFIG_SHELL - SHELL="$CONFIG_SHELL" - export SHELL - echo="$CONFIG_SHELL $0 --fallback-echo" - elif echo_testing_string=`($CONFIG_SHELL "$0" --fallback-echo '\t') 2>/dev/null` && - test "X$echo_testing_string" = 'X\t' && - echo_testing_string=`($CONFIG_SHELL "$0" --fallback-echo "$echo_test_string") 2>/dev/null` && - test "X$echo_testing_string" = "X$echo_test_string"; then - echo="$CONFIG_SHELL $0 --fallback-echo" - else - # maybe with a smaller string... - prev=: - - for cmd in 'echo test' 'sed 2q "$0"' 'sed 10q "$0"' 'sed 20q "$0"' 'sed 50q "$0"'; do - if (test "X$echo_test_string" = "X`eval $cmd`") 2>/dev/null - then - break - fi - prev="$cmd" - done - - if test "$prev" != 'sed 50q "$0"'; then - echo_test_string=`eval $prev` - export echo_test_string - exec ${ORIGINAL_CONFIG_SHELL-${CONFIG_SHELL-/bin/sh}} "$0" ${1+"$@"} - else - # Oops. We lost completely, so just stick with echo. - echo=echo - fi - fi - fi - fi -fi -fi - -# Copy echo and quote the copy suitably for passing to libtool from -# the Makefile, instead of quoting the original, which is used later. -ECHO=$echo -if test "X$ECHO" = "X$CONFIG_SHELL $0 --fallback-echo"; then - ECHO="$CONFIG_SHELL \\\$\$0 --fallback-echo" -fi - - - - -tagnames=${tagnames+${tagnames},}CXX - -tagnames=${tagnames+${tagnames},}F77 - -exec 7<&0 &1 +test -n "$DJDIR" || exec 7<&0 &1 # Name of the host. # hostname on some systems (SVR3.2, Linux) returns a bogus exit status, @@ -723,14 +548,14 @@ subdirs= MFLAGS= MAKEFLAGS= -SHELL=${CONFIG_SHELL-/bin/sh} # Identity of this package. PACKAGE_NAME='libffi' PACKAGE_TARNAME='libffi' -PACKAGE_VERSION='3.0.5' -PACKAGE_STRING='libffi 3.0.5' +PACKAGE_VERSION='3.0.9' +PACKAGE_STRING='libffi 3.0.9' PACKAGE_BUGREPORT='http://gcc.gnu.org/bugs.html' +PACKAGE_URL='' # Factoring default headers for most tests. ac_includes_default="\ @@ -768,200 +593,196 @@ # include #endif" -ac_subst_vars='SHELL -PATH_SEPARATOR -PACKAGE_NAME -PACKAGE_TARNAME -PACKAGE_VERSION -PACKAGE_STRING -PACKAGE_BUGREPORT -exec_prefix -prefix -program_transform_name -bindir -sbindir -libexecdir -datarootdir -datadir -sysconfdir -sharedstatedir -localstatedir -includedir -oldincludedir -docdir -infodir -htmldir -dvidir -pdfdir -psdir -libdir -localedir -mandir -DEFS -ECHO_C -ECHO_N -ECHO_T -LIBS -build_alias -host_alias -target_alias -build -build_cpu -build_vendor -build_os -host -host_cpu -host_vendor -host_os -target -target_cpu -target_vendor -target_os -INSTALL_PROGRAM -INSTALL_SCRIPT -INSTALL_DATA -am__isrc -CYGPATH_W -PACKAGE -VERSION -ACLOCAL -AUTOCONF -AUTOMAKE -AUTOHEADER -MAKEINFO -install_sh -STRIP -INSTALL_STRIP_PROGRAM -mkdir_p -AWK -SET_MAKE -am__leading_dot -AMTAR -am__tar -am__untar -CC -CFLAGS -LDFLAGS -CPPFLAGS -ac_ct_CC -EXEEXT -OBJEXT -DEPDIR -am__include -am__quote -AMDEP_TRUE -AMDEP_FALSE -AMDEPBACKSLASH -CCDEPMODE -am__fastdepCC_TRUE -am__fastdepCC_FALSE -CCAS -CCASFLAGS -CCASDEPMODE -am__fastdepCCAS_TRUE -am__fastdepCCAS_FALSE -SED -GREP +ac_subst_vars='am__EXEEXT_FALSE +am__EXEEXT_TRUE +LTLIBOBJS +LIBOBJS +toolexeclibdir +toolexecdir +TARGETDIR +TARGET +HAVE_LONG_DOUBLE +ALLOCA +PA64_HPUX_FALSE +PA64_HPUX_TRUE +PA_HPUX_FALSE +PA_HPUX_TRUE +PA_LINUX_FALSE +PA_LINUX_TRUE +SH64_FALSE +SH64_TRUE +SH_FALSE +SH_TRUE +X86_64_FALSE +X86_64_TRUE +S390_FALSE +S390_TRUE +FRV_FALSE +FRV_TRUE +LIBFFI_CRIS_FALSE +LIBFFI_CRIS_TRUE +AVR32_FALSE +AVR32_TRUE +ARM_FALSE +ARM_TRUE +POWERPC_FREEBSD_FALSE +POWERPC_FREEBSD_TRUE +POWERPC_DARWIN_FALSE +POWERPC_DARWIN_TRUE +POWERPC_AIX_FALSE +POWERPC_AIX_TRUE +POWERPC_FALSE +POWERPC_TRUE +M68K_FALSE +M68K_TRUE +M32R_FALSE +M32R_TRUE +IA64_FALSE +IA64_TRUE +ALPHA_FALSE +ALPHA_TRUE +X86_DARWIN_FALSE +X86_DARWIN_TRUE +X86_WIN64_FALSE +X86_WIN64_TRUE +X86_WIN32_FALSE +X86_WIN32_TRUE +X86_FREEBSD_FALSE +X86_FREEBSD_TRUE +X86_FALSE +X86_TRUE +SPARC_FALSE +SPARC_TRUE +MIPS_FALSE +MIPS_TRUE +AM_LTLDFLAGS +AM_RUNTESTFLAGS +TESTSUBDIR_FALSE +TESTSUBDIR_TRUE EGREP -LN_S -ECHO -AR -RANLIB +GREP CPP -CXX -CXXFLAGS -ac_ct_CXX -CXXDEPMODE -am__fastdepCXX_TRUE -am__fastdepCXX_FALSE -CXXCPP -F77 -FFLAGS -ac_ct_F77 -LIBTOOL -MAINTAINER_MODE_TRUE -MAINTAINER_MODE_FALSE MAINT -TESTSUBDIR_TRUE -TESTSUBDIR_FALSE -AM_RUNTESTFLAGS -MIPS_TRUE -MIPS_FALSE -SPARC_TRUE -SPARC_FALSE -X86_TRUE -X86_FALSE -X86_FREEBSD_TRUE -X86_FREEBSD_FALSE -X86_WIN32_TRUE -X86_WIN32_FALSE -X86_DARWIN_TRUE -X86_DARWIN_FALSE -ALPHA_TRUE -ALPHA_FALSE -IA64_TRUE -IA64_FALSE -M32R_TRUE -M32R_FALSE -M68K_TRUE -M68K_FALSE -POWERPC_TRUE -POWERPC_FALSE -POWERPC_AIX_TRUE -POWERPC_AIX_FALSE -POWERPC_DARWIN_TRUE -POWERPC_DARWIN_FALSE -POWERPC_FREEBSD_TRUE -POWERPC_FREEBSD_FALSE -ARM_TRUE -ARM_FALSE -LIBFFI_CRIS_TRUE -LIBFFI_CRIS_FALSE -FRV_TRUE -FRV_FALSE -S390_TRUE -S390_FALSE -X86_64_TRUE -X86_64_FALSE -SH_TRUE -SH_FALSE -SH64_TRUE -SH64_FALSE -PA_LINUX_TRUE -PA_LINUX_FALSE -PA_HPUX_TRUE -PA_HPUX_FALSE -PA64_HPUX_TRUE -PA64_HPUX_FALSE -ALLOCA -HAVE_LONG_DOUBLE -TARGET -TARGETDIR -toolexecdir -toolexeclibdir -LIBOBJS -LTLIBOBJS' +MAINTAINER_MODE_FALSE +MAINTAINER_MODE_TRUE +am__fastdepCCAS_FALSE +am__fastdepCCAS_TRUE +CCASDEPMODE +CCASFLAGS +CCAS +am__fastdepCC_FALSE +am__fastdepCC_TRUE +CCDEPMODE +AMDEPBACKSLASH +AMDEP_FALSE +AMDEP_TRUE +am__quote +am__include +DEPDIR +OBJEXT +EXEEXT +ac_ct_CC +CPPFLAGS +LDFLAGS +CFLAGS +CC +am__untar +am__tar +AMTAR +am__leading_dot +SET_MAKE +AWK +mkdir_p +MKDIR_P +INSTALL_STRIP_PROGRAM +STRIP +install_sh +MAKEINFO +AUTOHEADER +AUTOMAKE +AUTOCONF +ACLOCAL +VERSION +PACKAGE +CYGPATH_W +am__isrc +INSTALL_DATA +INSTALL_SCRIPT +INSTALL_PROGRAM +target_os +target_vendor +target_cpu +target +host_os +host_vendor +host_cpu +host +build_os +build_vendor +build_cpu +build +target_alias +host_alias +build_alias +LIBS +ECHO_T +ECHO_N +ECHO_C +DEFS +mandir +localedir +libdir +psdir +pdfdir +dvidir +htmldir +infodir +docdir +oldincludedir +includedir +localstatedir +sharedstatedir +sysconfdir +datadir +datarootdir +libexecdir +sbindir +bindir +program_transform_name +prefix +exec_prefix +PACKAGE_URL +PACKAGE_BUGREPORT +PACKAGE_STRING +PACKAGE_VERSION +PACKAGE_TARNAME +PACKAGE_NAME +PATH_SEPARATOR +SHELL' ac_subst_files='' +ac_user_opts=' +enable_option_checking +enable_dependency_tracking +enable_maintainer_mode +enable_debug +enable_structs +enable_raw_api +enable_purify_safety +' ac_precious_vars='build_alias host_alias target_alias CCAS CCASFLAGS CPP -CPPFLAGS -CXX -CXXFLAGS -LDFLAGS -LIBS -CCC -CXXCPP -F77 -FFLAGS' +CPPFLAGS' # Initialize some variables set by options. ac_init_help= ac_init_version=false +ac_unrecognized_opts= +ac_unrecognized_sep= # The variables have the same names as the options, with # dashes changed to underlines. cache_file=/dev/null @@ -1060,13 +881,20 @@ datarootdir=$ac_optarg ;; -disable-* | --disable-*) - ac_feature=`expr "x$ac_option" : 'x-*disable-\(.*\)'` + ac_useropt=`expr "x$ac_option" : 'x-*disable-\(.*\)'` # Reject names that are not valid shell variable names. - expr "x$ac_feature" : ".*[^-._$as_cr_alnum]" >/dev/null && - { echo "$as_me: error: invalid feature name: $ac_feature" >&2 - { (exit 1); exit 1; }; } - ac_feature=`echo $ac_feature | sed 's/[-.]/_/g'` - eval enable_$ac_feature=no ;; + expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && + as_fn_error "invalid feature name: $ac_useropt" + ac_useropt_orig=$ac_useropt + ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` + case $ac_user_opts in + *" +"enable_$ac_useropt" +"*) ;; + *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--disable-$ac_useropt_orig" + ac_unrecognized_sep=', ';; + esac + eval enable_$ac_useropt=no ;; -docdir | --docdir | --docdi | --doc | --do) ac_prev=docdir ;; @@ -1079,13 +907,20 @@ dvidir=$ac_optarg ;; -enable-* | --enable-*) - ac_feature=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'` + ac_useropt=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'` # Reject names that are not valid shell variable names. - expr "x$ac_feature" : ".*[^-._$as_cr_alnum]" >/dev/null && - { echo "$as_me: error: invalid feature name: $ac_feature" >&2 - { (exit 1); exit 1; }; } - ac_feature=`echo $ac_feature | sed 's/[-.]/_/g'` - eval enable_$ac_feature=\$ac_optarg ;; + expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && + as_fn_error "invalid feature name: $ac_useropt" + ac_useropt_orig=$ac_useropt + ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` + case $ac_user_opts in + *" +"enable_$ac_useropt" +"*) ;; + *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--enable-$ac_useropt_orig" + ac_unrecognized_sep=', ';; + esac + eval enable_$ac_useropt=\$ac_optarg ;; -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \ | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \ @@ -1276,22 +1111,36 @@ ac_init_version=: ;; -with-* | --with-*) - ac_package=`expr "x$ac_option" : 'x-*with-\([^=]*\)'` + ac_useropt=`expr "x$ac_option" : 'x-*with-\([^=]*\)'` # Reject names that are not valid shell variable names. - expr "x$ac_package" : ".*[^-._$as_cr_alnum]" >/dev/null && - { echo "$as_me: error: invalid package name: $ac_package" >&2 - { (exit 1); exit 1; }; } - ac_package=`echo $ac_package | sed 's/[-.]/_/g'` - eval with_$ac_package=\$ac_optarg ;; + expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && + as_fn_error "invalid package name: $ac_useropt" + ac_useropt_orig=$ac_useropt + ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` + case $ac_user_opts in + *" +"with_$ac_useropt" +"*) ;; + *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--with-$ac_useropt_orig" + ac_unrecognized_sep=', ';; + esac + eval with_$ac_useropt=\$ac_optarg ;; -without-* | --without-*) - ac_package=`expr "x$ac_option" : 'x-*without-\(.*\)'` + ac_useropt=`expr "x$ac_option" : 'x-*without-\(.*\)'` # Reject names that are not valid shell variable names. - expr "x$ac_package" : ".*[^-._$as_cr_alnum]" >/dev/null && - { echo "$as_me: error: invalid package name: $ac_package" >&2 - { (exit 1); exit 1; }; } - ac_package=`echo $ac_package | sed 's/[-.]/_/g'` - eval with_$ac_package=no ;; + expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && + as_fn_error "invalid package name: $ac_useropt" + ac_useropt_orig=$ac_useropt + ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` + case $ac_user_opts in + *" +"with_$ac_useropt" +"*) ;; + *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--without-$ac_useropt_orig" + ac_unrecognized_sep=', ';; + esac + eval with_$ac_useropt=no ;; --x) # Obsolete; use --with-x. @@ -1311,25 +1160,25 @@ | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*) x_libraries=$ac_optarg ;; - -*) { echo "$as_me: error: unrecognized option: $ac_option -Try \`$0 --help' for more information." >&2 - { (exit 1); exit 1; }; } + -*) as_fn_error "unrecognized option: \`$ac_option' +Try \`$0 --help' for more information." ;; *=*) ac_envvar=`expr "x$ac_option" : 'x\([^=]*\)='` # Reject names that are not valid shell variable names. - expr "x$ac_envvar" : ".*[^_$as_cr_alnum]" >/dev/null && - { echo "$as_me: error: invalid variable name: $ac_envvar" >&2 - { (exit 1); exit 1; }; } + case $ac_envvar in #( + '' | [0-9]* | *[!_$as_cr_alnum]* ) + as_fn_error "invalid variable name: \`$ac_envvar'" ;; + esac eval $ac_envvar=\$ac_optarg export $ac_envvar ;; *) # FIXME: should be removed in autoconf 3.0. - echo "$as_me: WARNING: you should use --build, --host, --target" >&2 + $as_echo "$as_me: WARNING: you should use --build, --host, --target" >&2 expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null && - echo "$as_me: WARNING: invalid host type: $ac_option" >&2 + $as_echo "$as_me: WARNING: invalid host type: $ac_option" >&2 : ${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option} ;; @@ -1338,23 +1187,36 @@ if test -n "$ac_prev"; then ac_option=--`echo $ac_prev | sed 's/_/-/g'` - { echo "$as_me: error: missing argument to $ac_option" >&2 - { (exit 1); exit 1; }; } + as_fn_error "missing argument to $ac_option" +fi + +if test -n "$ac_unrecognized_opts"; then + case $enable_option_checking in + no) ;; + fatal) as_fn_error "unrecognized options: $ac_unrecognized_opts" ;; + *) $as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2 ;; + esac fi -# Be sure to have absolute directory names. +# Check all directory arguments for consistency. for ac_var in exec_prefix prefix bindir sbindir libexecdir datarootdir \ datadir sysconfdir sharedstatedir localstatedir includedir \ oldincludedir docdir infodir htmldir dvidir pdfdir psdir \ libdir localedir mandir do eval ac_val=\$$ac_var + # Remove trailing slashes. + case $ac_val in + */ ) + ac_val=`expr "X$ac_val" : 'X\(.*[^/]\)' \| "X$ac_val" : 'X\(.*\)'` + eval $ac_var=\$ac_val;; + esac + # Be sure to have absolute directory names. case $ac_val in [\\/$]* | ?:[\\/]* ) continue;; NONE | '' ) case $ac_var in *prefix ) continue;; esac;; esac - { echo "$as_me: error: expected an absolute directory name for --$ac_var: $ac_val" >&2 - { (exit 1); exit 1; }; } + as_fn_error "expected an absolute directory name for --$ac_var: $ac_val" done # There might be people who depend on the old broken behavior: `$host' @@ -1368,7 +1230,7 @@ if test "x$host_alias" != x; then if test "x$build_alias" = x; then cross_compiling=maybe - echo "$as_me: WARNING: If you wanted to set the --build type, don't use --host. + $as_echo "$as_me: WARNING: If you wanted to set the --build type, don't use --host. If a cross compiler is detected then cross compile mode will be used." >&2 elif test "x$build_alias" != "x$host_alias"; then cross_compiling=yes @@ -1384,23 +1246,21 @@ ac_pwd=`pwd` && test -n "$ac_pwd" && ac_ls_di=`ls -di .` && ac_pwd_ls_di=`cd "$ac_pwd" && ls -di .` || - { echo "$as_me: error: Working directory cannot be determined" >&2 - { (exit 1); exit 1; }; } + as_fn_error "working directory cannot be determined" test "X$ac_ls_di" = "X$ac_pwd_ls_di" || - { echo "$as_me: error: pwd does not report name of working directory" >&2 - { (exit 1); exit 1; }; } + as_fn_error "pwd does not report name of working directory" # Find the source files, if location was not specified. if test -z "$srcdir"; then ac_srcdir_defaulted=yes # Try the directory containing this script, then the parent directory. - ac_confdir=`$as_dirname -- "$0" || -$as_expr X"$0" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ - X"$0" : 'X\(//\)[^/]' \| \ - X"$0" : 'X\(//\)$' \| \ - X"$0" : 'X\(/\)' \| . 2>/dev/null || -echo X"$0" | + ac_confdir=`$as_dirname -- "$as_myself" || +$as_expr X"$as_myself" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$as_myself" : 'X\(//\)[^/]' \| \ + X"$as_myself" : 'X\(//\)$' \| \ + X"$as_myself" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X"$as_myself" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q @@ -1427,13 +1287,11 @@ fi if test ! -r "$srcdir/$ac_unique_file"; then test "$ac_srcdir_defaulted" = yes && srcdir="$ac_confdir or .." - { echo "$as_me: error: cannot find sources ($ac_unique_file) in $srcdir" >&2 - { (exit 1); exit 1; }; } + as_fn_error "cannot find sources ($ac_unique_file) in $srcdir" fi ac_msg="sources are in $srcdir, but \`cd $srcdir' does not work" ac_abs_confdir=`( - cd "$srcdir" && test -r "./$ac_unique_file" || { echo "$as_me: error: $ac_msg" >&2 - { (exit 1); exit 1; }; } + cd "$srcdir" && test -r "./$ac_unique_file" || as_fn_error "$ac_msg" pwd)` # When building in place, set srcdir=. if test "$ac_abs_confdir" = "$ac_pwd"; then @@ -1459,7 +1317,7 @@ # Omit some internal or obsolete options to make the list less imposing. # This message is too long to be a string in the A/UX 3.1 sh. cat <<_ACEOF -\`configure' configures libffi 3.0.5 to adapt to many kinds of systems. +\`configure' configures libffi 3.0.9 to adapt to many kinds of systems. Usage: $0 [OPTION]... [VAR=VALUE]... @@ -1481,9 +1339,9 @@ Installation directories: --prefix=PREFIX install architecture-independent files in PREFIX - [$ac_default_prefix] + [$ac_default_prefix] --exec-prefix=EPREFIX install architecture-dependent files in EPREFIX - [PREFIX] + [PREFIX] By default, \`make install' will install all the files in \`$ac_default_prefix/bin', \`$ac_default_prefix/lib' etc. You can specify @@ -1493,25 +1351,25 @@ For better control, use the options below. Fine tuning of the installation directories: - --bindir=DIR user executables [EPREFIX/bin] - --sbindir=DIR system admin executables [EPREFIX/sbin] - --libexecdir=DIR program executables [EPREFIX/libexec] - --sysconfdir=DIR read-only single-machine data [PREFIX/etc] - --sharedstatedir=DIR modifiable architecture-independent data [PREFIX/com] - --localstatedir=DIR modifiable single-machine data [PREFIX/var] - --libdir=DIR object code libraries [EPREFIX/lib] - --includedir=DIR C header files [PREFIX/include] - --oldincludedir=DIR C header files for non-gcc [/usr/include] - --datarootdir=DIR read-only arch.-independent data root [PREFIX/share] - --datadir=DIR read-only architecture-independent data [DATAROOTDIR] - --infodir=DIR info documentation [DATAROOTDIR/info] - --localedir=DIR locale-dependent data [DATAROOTDIR/locale] - --mandir=DIR man documentation [DATAROOTDIR/man] - --docdir=DIR documentation root [DATAROOTDIR/doc/libffi] - --htmldir=DIR html documentation [DOCDIR] - --dvidir=DIR dvi documentation [DOCDIR] - --pdfdir=DIR pdf documentation [DOCDIR] - --psdir=DIR ps documentation [DOCDIR] + --bindir=DIR user executables [EPREFIX/bin] + --sbindir=DIR system admin executables [EPREFIX/sbin] + --libexecdir=DIR program executables [EPREFIX/libexec] + --sysconfdir=DIR read-only single-machine data [PREFIX/etc] + --sharedstatedir=DIR modifiable architecture-independent data [PREFIX/com] + --localstatedir=DIR modifiable single-machine data [PREFIX/var] + --libdir=DIR object code libraries [EPREFIX/lib] + --includedir=DIR C header files [PREFIX/include] + --oldincludedir=DIR C header files for non-gcc [/usr/include] + --datarootdir=DIR read-only arch.-independent data root [PREFIX/share] + --datadir=DIR read-only architecture-independent data [DATAROOTDIR] + --infodir=DIR info documentation [DATAROOTDIR/info] + --localedir=DIR locale-dependent data [DATAROOTDIR/locale] + --mandir=DIR man documentation [DATAROOTDIR/man] + --docdir=DIR documentation root [DATAROOTDIR/doc/libffi] + --htmldir=DIR html documentation [DOCDIR] + --dvidir=DIR dvi documentation [DOCDIR] + --pdfdir=DIR pdf documentation [DOCDIR] + --psdir=DIR ps documentation [DOCDIR] _ACEOF cat <<\_ACEOF @@ -1530,20 +1388,16 @@ if test -n "$ac_init_help"; then case $ac_init_help in - short | recursive ) echo "Configuration of libffi 3.0.5:";; + short | recursive ) echo "Configuration of libffi 3.0.9:";; esac cat <<\_ACEOF Optional Features: + --disable-option-checking ignore unrecognized --enable/--with options --disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no) --enable-FEATURE[=ARG] include FEATURE [ARG=yes] --disable-dependency-tracking speeds up one-time build --enable-dependency-tracking do not reject slow dependency extractors - --enable-shared[=PKGS] build shared libraries [default=yes] - --enable-static[=PKGS] build static libraries [default=yes] - --enable-fast-install[=PKGS] - optimize for fast installation [default=yes] - --disable-libtool-lock avoid locking (might break parallel builds) --enable-maintainer-mode enable make rules and dependencies not useful (and sometimes confusing) to the casual installer --enable-debug debugging mode @@ -1551,30 +1405,17 @@ --disable-raw-api make the raw api unavailable --enable-purify-safety purify-safe mode -Optional Packages: - --with-PACKAGE[=ARG] use PACKAGE [ARG=yes] - --without-PACKAGE do not use PACKAGE (same as --with-PACKAGE=no) - --with-gnu-ld assume the C compiler uses GNU ld [default=no] - --with-pic try to use only PIC/non-PIC objects [default=use - both] - --with-tags[=TAGS] include additional configurations [automatic] - Some influential environment variables: CC C compiler command CFLAGS C compiler flags LDFLAGS linker flags, e.g. -L if you have libraries in a nonstandard directory LIBS libraries to pass to the linker, e.g. -l - CPPFLAGS C/C++/Objective C preprocessor flags, e.g. -I if + CPPFLAGS (Objective) C/C++ preprocessor flags, e.g. -I if you have headers in a nonstandard directory CCAS assembler compiler command (defaults to CC) CCASFLAGS assembler compiler flags (defaults to CFLAGS) CPP C preprocessor - CXX C++ compiler command - CXXFLAGS C++ compiler flags - CXXCPP C++ preprocessor - F77 Fortran 77 compiler command - FFLAGS Fortran 77 compiler flags Use these variables to override the choices made by `configure' or to help it to find libraries and programs with nonstandard names/locations. @@ -1587,15 +1428,17 @@ if test "$ac_init_help" = "recursive"; then # If there are subdirs, report their specific --help. for ac_dir in : $ac_subdirs_all; do test "x$ac_dir" = x: && continue - test -d "$ac_dir" || continue + test -d "$ac_dir" || + { cd "$srcdir" && ac_pwd=`pwd` && srcdir=. && test -d "$ac_dir"; } || + continue ac_builddir=. case "$ac_dir" in .) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; *) - ac_dir_suffix=/`echo "$ac_dir" | sed 's,^\.[\\/],,'` + ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'` # A ".." for each directory in $ac_dir_suffix. - ac_top_builddir_sub=`echo "$ac_dir_suffix" | sed 's,/[^\\/]*,/..,g;s,/,,'` + ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` case $ac_top_builddir_sub in "") ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; @@ -1631,7 +1474,7 @@ echo && $SHELL "$ac_srcdir/configure" --help=recursive else - echo "$as_me: WARNING: no configuration information is in $ac_dir" >&2 + $as_echo "$as_me: WARNING: no configuration information is in $ac_dir" >&2 fi || ac_status=$? cd "$ac_pwd" || { ac_status=$?; break; } done @@ -1640,79 +1483,614 @@ test -n "$ac_init_help" && exit $ac_status if $ac_init_version; then cat <<\_ACEOF -libffi configure 3.0.5 -generated by GNU Autoconf 2.61 +libffi configure 3.0.9 +generated by GNU Autoconf 2.65 -Copyright (C) 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001, -2002, 2003, 2004, 2005, 2006 Free Software Foundation, Inc. +Copyright (C) 2009 Free Software Foundation, Inc. This configure script is free software; the Free Software Foundation gives unlimited permission to copy, distribute and modify it. _ACEOF exit fi -cat >config.log <<_ACEOF -This file contains any messages produced by compilers while -running configure, to aid debugging if configure makes a mistake. -It was created by libffi $as_me 3.0.5, which was -generated by GNU Autoconf 2.61. Invocation command line was +## ------------------------ ## +## Autoconf initialization. ## +## ------------------------ ## + +# ac_fn_c_try_compile LINENO +# -------------------------- +# Try to compile conftest.$ac_ext, and return whether this succeeded. +ac_fn_c_try_compile () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + rm -f conftest.$ac_objext + if { { ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_compile") 2>conftest.err + ac_status=$? + if test -s conftest.err; then + grep -v '^ *+' conftest.err >conftest.er1 + cat conftest.er1 >&5 + mv -f conftest.er1 conftest.err + fi + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then : + ac_retval=0 +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_retval=1 +fi + eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;} + as_fn_set_status $ac_retval - $ $0 $@ +} # ac_fn_c_try_compile -_ACEOF -exec 5>>config.log +# ac_fn_c_try_cpp LINENO +# ---------------------- +# Try to preprocess conftest.$ac_ext, and return whether this succeeded. +ac_fn_c_try_cpp () { -cat <<_ASUNAME -## --------- ## -## Platform. ## -## --------- ## + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + if { { ac_try="$ac_cpp conftest.$ac_ext" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_cpp conftest.$ac_ext") 2>conftest.err + ac_status=$? + if test -s conftest.err; then + grep -v '^ *+' conftest.err >conftest.er1 + cat conftest.er1 >&5 + mv -f conftest.er1 conftest.err + fi + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } >/dev/null && { + test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || + test ! -s conftest.err + }; then : + ac_retval=0 +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 -hostname = `(hostname || uname -n) 2>/dev/null | sed 1q` -uname -m = `(uname -m) 2>/dev/null || echo unknown` -uname -r = `(uname -r) 2>/dev/null || echo unknown` -uname -s = `(uname -s) 2>/dev/null || echo unknown` -uname -v = `(uname -v) 2>/dev/null || echo unknown` + ac_retval=1 +fi + eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;} + as_fn_set_status $ac_retval -/usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null || echo unknown` -/bin/uname -X = `(/bin/uname -X) 2>/dev/null || echo unknown` +} # ac_fn_c_try_cpp -/bin/arch = `(/bin/arch) 2>/dev/null || echo unknown` -/usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null || echo unknown` -/usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null || echo unknown` -/usr/bin/hostinfo = `(/usr/bin/hostinfo) 2>/dev/null || echo unknown` -/bin/machine = `(/bin/machine) 2>/dev/null || echo unknown` -/usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null || echo unknown` -/bin/universe = `(/bin/universe) 2>/dev/null || echo unknown` +# ac_fn_c_check_header_mongrel LINENO HEADER VAR INCLUDES +# ------------------------------------------------------- +# Tests whether HEADER exists, giving a warning if it cannot be compiled using +# the include files in INCLUDES and setting the cache variable VAR +# accordingly. +ac_fn_c_check_header_mongrel () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + if { as_var=$3; eval "test \"\${$as_var+set}\" = set"; }; then : + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 +$as_echo_n "checking for $2... " >&6; } +if { as_var=$3; eval "test \"\${$as_var+set}\" = set"; }; then : + $as_echo_n "(cached) " >&6 +fi +eval ac_res=\$$3 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } +else + # Is the header compilable? +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 usability" >&5 +$as_echo_n "checking $2 usability... " >&6; } +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$4 +#include <$2> +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_header_compiler=yes +else + ac_header_compiler=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_compiler" >&5 +$as_echo "$ac_header_compiler" >&6; } -_ASUNAME +# Is the header present? +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 presence" >&5 +$as_echo_n "checking $2 presence... " >&6; } +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include <$2> +_ACEOF +if ac_fn_c_try_cpp "$LINENO"; then : + ac_header_preproc=yes +else + ac_header_preproc=no +fi +rm -f conftest.err conftest.$ac_ext +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_preproc" >&5 +$as_echo "$ac_header_preproc" >&6; } -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - echo "PATH: $as_dir" -done -IFS=$as_save_IFS +# So? What about this header? +case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in #(( + yes:no: ) + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&5 +$as_echo "$as_me: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5 +$as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;} + ;; + no:yes:* ) + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: present but cannot be compiled" >&5 +$as_echo "$as_me: WARNING: $2: present but cannot be compiled" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: check for missing prerequisite headers?" >&5 +$as_echo "$as_me: WARNING: $2: check for missing prerequisite headers?" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: see the Autoconf documentation" >&5 +$as_echo "$as_me: WARNING: $2: see the Autoconf documentation" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: section \"Present But Cannot Be Compiled\"" >&5 +$as_echo "$as_me: WARNING: $2: section \"Present But Cannot Be Compiled\"" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5 +$as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;} +( cat <<\_ASBOX +## ------------------------------------------- ## +## Report this to http://gcc.gnu.org/bugs.html ## +## ------------------------------------------- ## +_ASBOX + ) | sed "s/^/$as_me: WARNING: /" >&2 + ;; +esac + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 +$as_echo_n "checking for $2... " >&6; } +if { as_var=$3; eval "test \"\${$as_var+set}\" = set"; }; then : + $as_echo_n "(cached) " >&6 +else + eval "$3=\$ac_header_compiler" +fi +eval ac_res=\$$3 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } +fi + eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;} -} >&5 +} # ac_fn_c_check_header_mongrel -cat >&5 <<_ACEOF +# ac_fn_c_try_run LINENO +# ---------------------- +# Try to link conftest.$ac_ext, and return whether this succeeded. Assumes +# that executables *can* be run. +ac_fn_c_try_run () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + if { { ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_link") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } && { ac_try='./conftest$ac_exeext' + { { case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_try") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then : + ac_retval=0 +else + $as_echo "$as_me: program exited with status $ac_status" >&5 + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + ac_retval=$ac_status +fi + rm -rf conftest.dSYM conftest_ipa8_conftest.oo + eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;} + as_fn_set_status $ac_retval -## ----------- ## -## Core tests. ## -## ----------- ## +} # ac_fn_c_try_run +# ac_fn_c_check_header_compile LINENO HEADER VAR INCLUDES +# ------------------------------------------------------- +# Tests whether HEADER exists and can be compiled using the include files in +# INCLUDES, setting the cache variable VAR accordingly. +ac_fn_c_check_header_compile () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 +$as_echo_n "checking for $2... " >&6; } +if { as_var=$3; eval "test \"\${$as_var+set}\" = set"; }; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$4 +#include <$2> _ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + eval "$3=yes" +else + eval "$3=no" +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +eval ac_res=\$$3 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } + eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;} +} # ac_fn_c_check_header_compile -# Keep a trace of the command line. -# Strip out --no-create and --no-recursion so they do not pile up. -# Strip out --silent because we don't want to record it for future runs. -# Also quote any args containing shell meta-characters. -# Make two passes to allow for proper duplicate-argument suppression. -ac_configure_args= +# ac_fn_c_try_link LINENO +# ----------------------- +# Try to link conftest.$ac_ext, and return whether this succeeded. +ac_fn_c_try_link () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + rm -f conftest.$ac_objext conftest$ac_exeext + if { { ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_link") 2>conftest.err + ac_status=$? + if test -s conftest.err; then + grep -v '^ *+' conftest.err >conftest.er1 + cat conftest.er1 >&5 + mv -f conftest.er1 conftest.err + fi + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest$ac_exeext && { + test "$cross_compiling" = yes || + $as_test_x conftest$ac_exeext + }; then : + ac_retval=0 +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_retval=1 +fi + # Delete the IPA/IPO (Inter Procedural Analysis/Optimization) information + # created by the PGI compiler (conftest_ipa8_conftest.oo), as it would + # interfere with the next link command; also delete a directory that is + # left behind by Apple's compiler. We do this before executing the actions. + rm -rf conftest.dSYM conftest_ipa8_conftest.oo + eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;} + as_fn_set_status $ac_retval + +} # ac_fn_c_try_link + +# ac_fn_c_check_func LINENO FUNC VAR +# ---------------------------------- +# Tests whether FUNC exists, setting the cache variable VAR accordingly +ac_fn_c_check_func () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 +$as_echo_n "checking for $2... " >&6; } +if { as_var=$3; eval "test \"\${$as_var+set}\" = set"; }; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +/* Define $2 to an innocuous variant, in case declares $2. + For example, HP-UX 11i declares gettimeofday. */ +#define $2 innocuous_$2 + +/* System header to define __stub macros and hopefully few prototypes, + which can conflict with char $2 (); below. + Prefer to if __STDC__ is defined, since + exists even on freestanding compilers. */ + +#ifdef __STDC__ +# include +#else +# include +#endif + +#undef $2 + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char $2 (); +/* The GNU C library defines this for functions which it implements + to always fail with ENOSYS. Some functions are actually named + something starting with __ and the normal name is an alias. */ +#if defined __stub_$2 || defined __stub___$2 +choke me +#endif + +int +main () +{ +return $2 (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + eval "$3=yes" +else + eval "$3=no" +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +fi +eval ac_res=\$$3 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } + eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;} + +} # ac_fn_c_check_func + +# ac_fn_c_compute_int LINENO EXPR VAR INCLUDES +# -------------------------------------------- +# Tries to find the compile-time value of EXPR in a program that includes +# INCLUDES, setting VAR accordingly. Returns whether the value could be +# computed +ac_fn_c_compute_int () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + if test "$cross_compiling" = yes; then + # Depending upon the size, compute the lo and hi bounds. +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$4 +int +main () +{ +static int test_array [1 - 2 * !(($2) >= 0)]; +test_array [0] = 0 + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_lo=0 ac_mid=0 + while :; do + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$4 +int +main () +{ +static int test_array [1 - 2 * !(($2) <= $ac_mid)]; +test_array [0] = 0 + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_hi=$ac_mid; break +else + as_fn_arith $ac_mid + 1 && ac_lo=$as_val + if test $ac_lo -le $ac_mid; then + ac_lo= ac_hi= + break + fi + as_fn_arith 2 '*' $ac_mid + 1 && ac_mid=$as_val +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + done +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$4 +int +main () +{ +static int test_array [1 - 2 * !(($2) < 0)]; +test_array [0] = 0 + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_hi=-1 ac_mid=-1 + while :; do + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$4 +int +main () +{ +static int test_array [1 - 2 * !(($2) >= $ac_mid)]; +test_array [0] = 0 + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_lo=$ac_mid; break +else + as_fn_arith '(' $ac_mid ')' - 1 && ac_hi=$as_val + if test $ac_mid -le $ac_hi; then + ac_lo= ac_hi= + break + fi + as_fn_arith 2 '*' $ac_mid && ac_mid=$as_val +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + done +else + ac_lo= ac_hi= +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +# Binary search between lo and hi bounds. +while test "x$ac_lo" != "x$ac_hi"; do + as_fn_arith '(' $ac_hi - $ac_lo ')' / 2 + $ac_lo && ac_mid=$as_val + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$4 +int +main () +{ +static int test_array [1 - 2 * !(($2) <= $ac_mid)]; +test_array [0] = 0 + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_hi=$ac_mid +else + as_fn_arith '(' $ac_mid ')' + 1 && ac_lo=$as_val +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +done +case $ac_lo in #(( +?*) eval "$3=\$ac_lo"; ac_retval=0 ;; +'') ac_retval=1 ;; +esac + else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$4 +static long int longval () { return $2; } +static unsigned long int ulongval () { return $2; } +#include +#include +int +main () +{ + + FILE *f = fopen ("conftest.val", "w"); + if (! f) + return 1; + if (($2) < 0) + { + long int i = longval (); + if (i != ($2)) + return 1; + fprintf (f, "%ld", i); + } + else + { + unsigned long int i = ulongval (); + if (i != ($2)) + return 1; + fprintf (f, "%lu", i); + } + /* Do not output a trailing newline, as this causes \r\n confusion + on some platforms. */ + return ferror (f) || fclose (f) != 0; + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_run "$LINENO"; then : + echo >>conftest.val; read $3 config.log <<_ACEOF +This file contains any messages produced by compilers while +running configure, to aid debugging if configure makes a mistake. + +It was created by libffi $as_me 3.0.9, which was +generated by GNU Autoconf 2.65. Invocation command line was + + $ $0 $@ + +_ACEOF +exec 5>>config.log +{ +cat <<_ASUNAME +## --------- ## +## Platform. ## +## --------- ## + +hostname = `(hostname || uname -n) 2>/dev/null | sed 1q` +uname -m = `(uname -m) 2>/dev/null || echo unknown` +uname -r = `(uname -r) 2>/dev/null || echo unknown` +uname -s = `(uname -s) 2>/dev/null || echo unknown` +uname -v = `(uname -v) 2>/dev/null || echo unknown` + +/usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null || echo unknown` +/bin/uname -X = `(/bin/uname -X) 2>/dev/null || echo unknown` + +/bin/arch = `(/bin/arch) 2>/dev/null || echo unknown` +/usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null || echo unknown` +/usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null || echo unknown` +/usr/bin/hostinfo = `(/usr/bin/hostinfo) 2>/dev/null || echo unknown` +/bin/machine = `(/bin/machine) 2>/dev/null || echo unknown` +/usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null || echo unknown` +/bin/universe = `(/bin/universe) 2>/dev/null || echo unknown` + +_ASUNAME + +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + $as_echo "PATH: $as_dir" + done +IFS=$as_save_IFS + +} >&5 + +cat >&5 <<_ACEOF + + +## ----------- ## +## Core tests. ## +## ----------- ## + +_ACEOF + + +# Keep a trace of the command line. +# Strip out --no-create and --no-recursion so they do not pile up. +# Strip out --silent because we don't want to record it for future runs. +# Also quote any args containing shell meta-characters. +# Make two passes to allow for proper duplicate-argument suppression. +ac_configure_args= ac_configure_args0= ac_configure_args1= ac_must_keep_next=false @@ -1726,12 +2104,12 @@ | -silent | --silent | --silen | --sile | --sil) continue ;; *\'*) - ac_arg=`echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;; + ac_arg=`$as_echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;; esac case $ac_pass in - 1) ac_configure_args0="$ac_configure_args0 '$ac_arg'" ;; + 1) as_fn_append ac_configure_args0 " '$ac_arg'" ;; 2) - ac_configure_args1="$ac_configure_args1 '$ac_arg'" + as_fn_append ac_configure_args1 " '$ac_arg'" if test $ac_must_keep_next = true; then ac_must_keep_next=false # Got value, back to normal. else @@ -1747,13 +2125,13 @@ -* ) ac_must_keep_next=true ;; esac fi - ac_configure_args="$ac_configure_args '$ac_arg'" + as_fn_append ac_configure_args " '$ac_arg'" ;; esac done done -$as_unset ac_configure_args0 || test "${ac_configure_args0+set}" != set || { ac_configure_args0=; export ac_configure_args0; } -$as_unset ac_configure_args1 || test "${ac_configure_args1+set}" != set || { ac_configure_args1=; export ac_configure_args1; } +{ ac_configure_args0=; unset ac_configure_args0;} +{ ac_configure_args1=; unset ac_configure_args1;} # When interrupted or exit'd, cleanup temporary files, and complete # config.log. We remove comments because anyway the quotes in there @@ -1778,12 +2156,13 @@ case $ac_val in #( *${as_nl}*) case $ac_var in #( - *_cv_*) { echo "$as_me:$LINENO: WARNING: Cache variable $ac_var contains a newline." >&5 -echo "$as_me: WARNING: Cache variable $ac_var contains a newline." >&2;} ;; + *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 +$as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; esac case $ac_var in #( _ | IFS | as_nl) ;; #( - *) $as_unset $ac_var ;; + BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #( + *) { eval $ac_var=; unset $ac_var;} ;; esac ;; esac done @@ -1812,9 +2191,9 @@ do eval ac_val=\$$ac_var case $ac_val in - *\'\''*) ac_val=`echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; + *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; esac - echo "$ac_var='\''$ac_val'\''" + $as_echo "$ac_var='\''$ac_val'\''" done | sort echo @@ -1829,9 +2208,9 @@ do eval ac_val=\$$ac_var case $ac_val in - *\'\''*) ac_val=`echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; + *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; esac - echo "$ac_var='\''$ac_val'\''" + $as_echo "$ac_var='\''$ac_val'\''" done | sort echo fi @@ -1847,83 +2226,88 @@ echo fi test "$ac_signal" != 0 && - echo "$as_me: caught signal $ac_signal" - echo "$as_me: exit $exit_status" + $as_echo "$as_me: caught signal $ac_signal" + $as_echo "$as_me: exit $exit_status" } >&5 rm -f core *.core core.conftest.* && rm -f -r conftest* confdefs* conf$$* $ac_clean_files && exit $exit_status ' 0 for ac_signal in 1 2 13 15; do - trap 'ac_signal='$ac_signal'; { (exit 1); exit 1; }' $ac_signal + trap 'ac_signal='$ac_signal'; as_fn_exit 1' $ac_signal done ac_signal=0 # confdefs.h avoids OS command line length limits that DEFS can exceed. rm -f -r conftest* confdefs.h +$as_echo "/* confdefs.h */" > confdefs.h + # Predefined preprocessor variables. cat >>confdefs.h <<_ACEOF #define PACKAGE_NAME "$PACKAGE_NAME" _ACEOF - cat >>confdefs.h <<_ACEOF #define PACKAGE_TARNAME "$PACKAGE_TARNAME" _ACEOF - cat >>confdefs.h <<_ACEOF #define PACKAGE_VERSION "$PACKAGE_VERSION" _ACEOF - cat >>confdefs.h <<_ACEOF #define PACKAGE_STRING "$PACKAGE_STRING" _ACEOF - cat >>confdefs.h <<_ACEOF #define PACKAGE_BUGREPORT "$PACKAGE_BUGREPORT" _ACEOF +cat >>confdefs.h <<_ACEOF +#define PACKAGE_URL "$PACKAGE_URL" +_ACEOF + # Let the site file select an alternate cache file if it wants to. -# Prefer explicitly selected file to automatically selected ones. +# Prefer an explicitly selected file to automatically selected ones. +ac_site_file1=NONE +ac_site_file2=NONE if test -n "$CONFIG_SITE"; then - set x "$CONFIG_SITE" + ac_site_file1=$CONFIG_SITE elif test "x$prefix" != xNONE; then - set x "$prefix/share/config.site" "$prefix/etc/config.site" + ac_site_file1=$prefix/share/config.site + ac_site_file2=$prefix/etc/config.site else - set x "$ac_default_prefix/share/config.site" \ - "$ac_default_prefix/etc/config.site" + ac_site_file1=$ac_default_prefix/share/config.site + ac_site_file2=$ac_default_prefix/etc/config.site fi -shift -for ac_site_file +for ac_site_file in "$ac_site_file1" "$ac_site_file2" do - if test -r "$ac_site_file"; then - { echo "$as_me:$LINENO: loading site script $ac_site_file" >&5 -echo "$as_me: loading site script $ac_site_file" >&6;} + test "x$ac_site_file" = xNONE && continue + if test /dev/null != "$ac_site_file" && test -r "$ac_site_file"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: loading site script $ac_site_file" >&5 +$as_echo "$as_me: loading site script $ac_site_file" >&6;} sed 's/^/| /' "$ac_site_file" >&5 . "$ac_site_file" fi done if test -r "$cache_file"; then - # Some versions of bash will fail to source /dev/null (special - # files actually), so we avoid doing that. - if test -f "$cache_file"; then - { echo "$as_me:$LINENO: loading cache $cache_file" >&5 -echo "$as_me: loading cache $cache_file" >&6;} + # Some versions of bash will fail to source /dev/null (special files + # actually), so we avoid doing that. DJGPP emulates it as a regular file. + if test /dev/null != "$cache_file" && test -f "$cache_file"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: loading cache $cache_file" >&5 +$as_echo "$as_me: loading cache $cache_file" >&6;} case $cache_file in [\\/]* | ?:[\\/]* ) . "$cache_file";; *) . "./$cache_file";; esac fi else - { echo "$as_me:$LINENO: creating cache $cache_file" >&5 -echo "$as_me: creating cache $cache_file" >&6;} + { $as_echo "$as_me:${as_lineno-$LINENO}: creating cache $cache_file" >&5 +$as_echo "$as_me: creating cache $cache_file" >&6;} >$cache_file fi @@ -1937,99 +2321,79 @@ eval ac_new_val=\$ac_env_${ac_var}_value case $ac_old_set,$ac_new_set in set,) - { echo "$as_me:$LINENO: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5 -echo "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5 +$as_echo "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;} ac_cache_corrupted=: ;; ,set) - { echo "$as_me:$LINENO: error: \`$ac_var' was not set in the previous run" >&5 -echo "$as_me: error: \`$ac_var' was not set in the previous run" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was not set in the previous run" >&5 +$as_echo "$as_me: error: \`$ac_var' was not set in the previous run" >&2;} ac_cache_corrupted=: ;; ,);; *) if test "x$ac_old_val" != "x$ac_new_val"; then - { echo "$as_me:$LINENO: error: \`$ac_var' has changed since the previous run:" >&5 -echo "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;} - { echo "$as_me:$LINENO: former value: $ac_old_val" >&5 -echo "$as_me: former value: $ac_old_val" >&2;} - { echo "$as_me:$LINENO: current value: $ac_new_val" >&5 -echo "$as_me: current value: $ac_new_val" >&2;} - ac_cache_corrupted=: + # differences in whitespace do not lead to failure. + ac_old_val_w=`echo x $ac_old_val` + ac_new_val_w=`echo x $ac_new_val` + if test "$ac_old_val_w" != "$ac_new_val_w"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' has changed since the previous run:" >&5 +$as_echo "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;} + ac_cache_corrupted=: + else + { $as_echo "$as_me:${as_lineno-$LINENO}: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&5 +$as_echo "$as_me: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&2;} + eval $ac_var=\$ac_old_val + fi + { $as_echo "$as_me:${as_lineno-$LINENO}: former value: \`$ac_old_val'" >&5 +$as_echo "$as_me: former value: \`$ac_old_val'" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: current value: \`$ac_new_val'" >&5 +$as_echo "$as_me: current value: \`$ac_new_val'" >&2;} fi;; esac # Pass precious variables to config.status. if test "$ac_new_set" = set; then case $ac_new_val in - *\'*) ac_arg=$ac_var=`echo "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;; + *\'*) ac_arg=$ac_var=`$as_echo "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;; *) ac_arg=$ac_var=$ac_new_val ;; esac case " $ac_configure_args " in *" '$ac_arg' "*) ;; # Avoid dups. Use of quotes ensures accuracy. - *) ac_configure_args="$ac_configure_args '$ac_arg'" ;; + *) as_fn_append ac_configure_args " '$ac_arg'" ;; esac fi done if $ac_cache_corrupted; then - { echo "$as_me:$LINENO: error: changes in the environment can compromise the build" >&5 -echo "$as_me: error: changes in the environment can compromise the build" >&2;} - { { echo "$as_me:$LINENO: error: run \`make distclean' and/or \`rm $cache_file' and start over" >&5 -echo "$as_me: error: run \`make distclean' and/or \`rm $cache_file' and start over" >&2;} - { (exit 1); exit 1; }; } -fi - - - + { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: error: changes in the environment can compromise the build" >&5 +$as_echo "$as_me: error: changes in the environment can compromise the build" >&2;} + as_fn_error "run \`make distclean' and/or \`rm $cache_file' and start over" "$LINENO" 5 +fi +## -------------------- ## +## Main body of script. ## +## -------------------- ## +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu - - - - - - - - - - - - - - - - - - - -ac_ext=c -ac_cpp='$CPP $CPPFLAGS' -ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_c_compiler_gnu - - -ac_config_headers="$ac_config_headers fficonfig.h" +ac_config_headers="$ac_config_headers fficonfig.h" ac_aux_dir= for ac_dir in "$srcdir" "$srcdir/.." "$srcdir/../.."; do - if test -f "$ac_dir/install-sh"; then - ac_aux_dir=$ac_dir - ac_install_sh="$ac_aux_dir/install-sh -c" - break - elif test -f "$ac_dir/install.sh"; then - ac_aux_dir=$ac_dir - ac_install_sh="$ac_aux_dir/install.sh -c" - break - elif test -f "$ac_dir/shtool"; then - ac_aux_dir=$ac_dir - ac_install_sh="$ac_aux_dir/shtool install -c" - break - fi + for ac_t in install-sh install.sh shtool; do + if test -f "$ac_dir/$ac_t"; then + ac_aux_dir=$ac_dir + ac_install_sh="$ac_aux_dir/$ac_t -c" + break 2 + fi + done done if test -z "$ac_aux_dir"; then - { { echo "$as_me:$LINENO: error: cannot find install-sh or install.sh in \"$srcdir\" \"$srcdir/..\" \"$srcdir/../..\"" >&5 -echo "$as_me: error: cannot find install-sh or install.sh in \"$srcdir\" \"$srcdir/..\" \"$srcdir/../..\"" >&2;} - { (exit 1); exit 1; }; } + as_fn_error "cannot find install-sh, install.sh, or shtool in \"$srcdir\" \"$srcdir/..\" \"$srcdir/../..\"" "$LINENO" 5 fi # These three variables are undocumented and unsupported, @@ -2043,35 +2407,27 @@ # Make sure we can run config.sub. $SHELL "$ac_aux_dir/config.sub" sun4 >/dev/null 2>&1 || - { { echo "$as_me:$LINENO: error: cannot run $SHELL $ac_aux_dir/config.sub" >&5 -echo "$as_me: error: cannot run $SHELL $ac_aux_dir/config.sub" >&2;} - { (exit 1); exit 1; }; } - -{ echo "$as_me:$LINENO: checking build system type" >&5 -echo $ECHO_N "checking build system type... $ECHO_C" >&6; } -if test "${ac_cv_build+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 + as_fn_error "cannot run $SHELL $ac_aux_dir/config.sub" "$LINENO" 5 + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking build system type" >&5 +$as_echo_n "checking build system type... " >&6; } +if test "${ac_cv_build+set}" = set; then : + $as_echo_n "(cached) " >&6 else ac_build_alias=$build_alias test "x$ac_build_alias" = x && ac_build_alias=`$SHELL "$ac_aux_dir/config.guess"` test "x$ac_build_alias" = x && - { { echo "$as_me:$LINENO: error: cannot guess build type; you must specify one" >&5 -echo "$as_me: error: cannot guess build type; you must specify one" >&2;} - { (exit 1); exit 1; }; } + as_fn_error "cannot guess build type; you must specify one" "$LINENO" 5 ac_cv_build=`$SHELL "$ac_aux_dir/config.sub" $ac_build_alias` || - { { echo "$as_me:$LINENO: error: $SHELL $ac_aux_dir/config.sub $ac_build_alias failed" >&5 -echo "$as_me: error: $SHELL $ac_aux_dir/config.sub $ac_build_alias failed" >&2;} - { (exit 1); exit 1; }; } + as_fn_error "$SHELL $ac_aux_dir/config.sub $ac_build_alias failed" "$LINENO" 5 fi -{ echo "$as_me:$LINENO: result: $ac_cv_build" >&5 -echo "${ECHO_T}$ac_cv_build" >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_build" >&5 +$as_echo "$ac_cv_build" >&6; } case $ac_cv_build in *-*-*) ;; -*) { { echo "$as_me:$LINENO: error: invalid value of canonical build" >&5 -echo "$as_me: error: invalid value of canonical build" >&2;} - { (exit 1); exit 1; }; };; +*) as_fn_error "invalid value of canonical build" "$LINENO" 5;; esac build=$ac_cv_build ac_save_IFS=$IFS; IFS='-' @@ -2087,28 +2443,24 @@ case $build_os in *\ *) build_os=`echo "$build_os" | sed 's/ /-/g'`;; esac -{ echo "$as_me:$LINENO: checking host system type" >&5 -echo $ECHO_N "checking host system type... $ECHO_C" >&6; } -if test "${ac_cv_host+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking host system type" >&5 +$as_echo_n "checking host system type... " >&6; } +if test "${ac_cv_host+set}" = set; then : + $as_echo_n "(cached) " >&6 else if test "x$host_alias" = x; then ac_cv_host=$ac_cv_build else ac_cv_host=`$SHELL "$ac_aux_dir/config.sub" $host_alias` || - { { echo "$as_me:$LINENO: error: $SHELL $ac_aux_dir/config.sub $host_alias failed" >&5 -echo "$as_me: error: $SHELL $ac_aux_dir/config.sub $host_alias failed" >&2;} - { (exit 1); exit 1; }; } + as_fn_error "$SHELL $ac_aux_dir/config.sub $host_alias failed" "$LINENO" 5 fi fi -{ echo "$as_me:$LINENO: result: $ac_cv_host" >&5 -echo "${ECHO_T}$ac_cv_host" >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_host" >&5 +$as_echo "$ac_cv_host" >&6; } case $ac_cv_host in *-*-*) ;; -*) { { echo "$as_me:$LINENO: error: invalid value of canonical host" >&5 -echo "$as_me: error: invalid value of canonical host" >&2;} - { (exit 1); exit 1; }; };; +*) as_fn_error "invalid value of canonical host" "$LINENO" 5;; esac host=$ac_cv_host ac_save_IFS=$IFS; IFS='-' @@ -2124,28 +2476,24 @@ case $host_os in *\ *) host_os=`echo "$host_os" | sed 's/ /-/g'`;; esac -{ echo "$as_me:$LINENO: checking target system type" >&5 -echo $ECHO_N "checking target system type... $ECHO_C" >&6; } -if test "${ac_cv_target+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking target system type" >&5 +$as_echo_n "checking target system type... " >&6; } +if test "${ac_cv_target+set}" = set; then : + $as_echo_n "(cached) " >&6 else if test "x$target_alias" = x; then ac_cv_target=$ac_cv_host else ac_cv_target=`$SHELL "$ac_aux_dir/config.sub" $target_alias` || - { { echo "$as_me:$LINENO: error: $SHELL $ac_aux_dir/config.sub $target_alias failed" >&5 -echo "$as_me: error: $SHELL $ac_aux_dir/config.sub $target_alias failed" >&2;} - { (exit 1); exit 1; }; } + as_fn_error "$SHELL $ac_aux_dir/config.sub $target_alias failed" "$LINENO" 5 fi fi -{ echo "$as_me:$LINENO: result: $ac_cv_target" >&5 -echo "${ECHO_T}$ac_cv_target" >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_target" >&5 +$as_echo "$ac_cv_target" >&6; } case $ac_cv_target in *-*-*) ;; -*) { { echo "$as_me:$LINENO: error: invalid value of canonical target" >&5 -echo "$as_me: error: invalid value of canonical target" >&2;} - { (exit 1); exit 1; }; };; +*) as_fn_error "invalid value of canonical target" "$LINENO" 5;; esac target=$ac_cv_target ac_save_IFS=$IFS; IFS='-' @@ -2167,11 +2515,12 @@ test "$program_prefix$program_suffix$program_transform_name" = \ NONENONEs,x,x, && program_prefix=${target_alias}- + target_alias=${target_alias-$host_alias} . ${srcdir}/configure.host -am__api_version='1.10' +am__api_version='1.11' # Find a good install program. We prefer a C program (faster), # so one script is as good as another. But avoid the broken or @@ -2186,22 +2535,23 @@ # SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff" # OS/2's system install, which has a completely different semantic # ./install, which can be erroneously created by make from ./install.sh. -{ echo "$as_me:$LINENO: checking for a BSD-compatible install" >&5 -echo $ECHO_N "checking for a BSD-compatible install... $ECHO_C" >&6; } +# Reject install programs that cannot install multiple files. +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a BSD-compatible install" >&5 +$as_echo_n "checking for a BSD-compatible install... " >&6; } if test -z "$INSTALL"; then -if test "${ac_cv_path_install+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 +if test "${ac_cv_path_install+set}" = set; then : + $as_echo_n "(cached) " >&6 else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. - # Account for people who put trailing slashes in PATH elements. -case $as_dir/ in - ./ | .// | /cC/* | \ + # Account for people who put trailing slashes in PATH elements. +case $as_dir/ in #(( + ./ | .// | /[cC]/* | \ /etc/* | /usr/sbin/* | /usr/etc/* | /sbin/* | /usr/afsws/bin/* | \ - ?:\\/os2\\/install\\/* | ?:\\/OS2\\/INSTALL\\/* | \ + ?:[\\/]os2[\\/]install[\\/]* | ?:[\\/]OS2[\\/]INSTALL[\\/]* | \ /usr/ucb/* ) ;; *) # OSF1 and SCO ODT 3.0 have their own names for install. @@ -2219,17 +2569,29 @@ # program-specific install script used by HP pwplus--don't use. : else - ac_cv_path_install="$as_dir/$ac_prog$ac_exec_ext -c" - break 3 + rm -rf conftest.one conftest.two conftest.dir + echo one > conftest.one + echo two > conftest.two + mkdir conftest.dir + if "$as_dir/$ac_prog$ac_exec_ext" -c conftest.one conftest.two "`pwd`/conftest.dir" && + test -s conftest.one && test -s conftest.two && + test -s conftest.dir/conftest.one && + test -s conftest.dir/conftest.two + then + ac_cv_path_install="$as_dir/$ac_prog$ac_exec_ext -c" + break 3 + fi fi fi done done ;; esac -done + + done IFS=$as_save_IFS +rm -rf conftest.one conftest.two conftest.dir fi if test "${ac_cv_path_install+set}" = set; then @@ -2242,8 +2604,8 @@ INSTALL=$ac_install_sh fi fi -{ echo "$as_me:$LINENO: result: $INSTALL" >&5 -echo "${ECHO_T}$INSTALL" >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $INSTALL" >&5 +$as_echo "$INSTALL" >&6; } # Use test -z because SunOS4 sh mishandles braces in ${var-val}. # It thinks the first close brace ends the variable substitution. @@ -2253,21 +2615,34 @@ test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644' -{ echo "$as_me:$LINENO: checking whether build environment is sane" >&5 -echo $ECHO_N "checking whether build environment is sane... $ECHO_C" >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether build environment is sane" >&5 +$as_echo_n "checking whether build environment is sane... " >&6; } # Just in case sleep 1 echo timestamp > conftest.file +# Reject unsafe characters in $srcdir or the absolute working directory +# name. Accept space and tab only in the latter. +am_lf=' +' +case `pwd` in + *[\\\"\#\$\&\'\`$am_lf]*) + as_fn_error "unsafe absolute working directory name" "$LINENO" 5;; +esac +case $srcdir in + *[\\\"\#\$\&\'\`$am_lf\ \ ]*) + as_fn_error "unsafe srcdir value: \`$srcdir'" "$LINENO" 5;; +esac + # Do `set' in a subshell so we don't clobber the current shell's # arguments. Must try -L first in case configure is actually a # symlink; some systems play weird games with the mod time of symlinks # (eg FreeBSD returns the mod time of the symlink's containing # directory). if ( - set X `ls -Lt $srcdir/configure conftest.file 2> /dev/null` + set X `ls -Lt "$srcdir/configure" conftest.file 2> /dev/null` if test "$*" = "X"; then # -L didn't work. - set X `ls -t $srcdir/configure conftest.file` + set X `ls -t "$srcdir/configure" conftest.file` fi rm -f conftest.file if test "$*" != "X $srcdir/configure conftest.file" \ @@ -2277,11 +2652,8 @@ # if, for instance, CONFIG_SHELL is bash and it inherits a # broken ls alias from the environment. This has actually # happened. Such a system could not be considered "sane". - { { echo "$as_me:$LINENO: error: ls -t appears to fail. Make sure there is not a broken -alias in your environment" >&5 -echo "$as_me: error: ls -t appears to fail. Make sure there is not a broken -alias in your environment" >&2;} - { (exit 1); exit 1; }; } + as_fn_error "ls -t appears to fail. Make sure there is not a broken +alias in your environment" "$LINENO" 5 fi test "$2" = conftest.file @@ -2290,52 +2662,162 @@ # Ok. : else - { { echo "$as_me:$LINENO: error: newly created file is older than distributed files! -Check your system clock" >&5 -echo "$as_me: error: newly created file is older than distributed files! -Check your system clock" >&2;} - { (exit 1); exit 1; }; } + as_fn_error "newly created file is older than distributed files! +Check your system clock" "$LINENO" 5 fi -{ echo "$as_me:$LINENO: result: yes" >&5 -echo "${ECHO_T}yes" >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } test "$program_prefix" != NONE && program_transform_name="s&^&$program_prefix&;$program_transform_name" # Use a double $ so make ignores it. test "$program_suffix" != NONE && program_transform_name="s&\$&$program_suffix&;$program_transform_name" -# Double any \ or $. echo might interpret backslashes. +# Double any \ or $. # By default was `s,x,x', remove it if useless. -cat <<\_ACEOF >conftest.sed -s/[\\$]/&&/g;s/;s,x,x,$// -_ACEOF -program_transform_name=`echo $program_transform_name | sed -f conftest.sed` -rm -f conftest.sed +ac_script='s/[\\$]/&&/g;s/;s,x,x,$//' +program_transform_name=`$as_echo "$program_transform_name" | sed "$ac_script"` # expand $ac_aux_dir to an absolute path am_aux_dir=`cd $ac_aux_dir && pwd` -test x"${MISSING+set}" = xset || MISSING="\${SHELL} $am_aux_dir/missing" +if test x"${MISSING+set}" != xset; then + case $am_aux_dir in + *\ * | *\ *) + MISSING="\${SHELL} \"$am_aux_dir/missing\"" ;; + *) + MISSING="\${SHELL} $am_aux_dir/missing" ;; + esac +fi # Use eval to expand $SHELL if eval "$MISSING --run true"; then am_missing_run="$MISSING --run " else am_missing_run= - { echo "$as_me:$LINENO: WARNING: \`missing' script is too old or missing" >&5 -echo "$as_me: WARNING: \`missing' script is too old or missing" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: \`missing' script is too old or missing" >&5 +$as_echo "$as_me: WARNING: \`missing' script is too old or missing" >&2;} +fi + +if test x"${install_sh}" != xset; then + case $am_aux_dir in + *\ * | *\ *) + install_sh="\${SHELL} '$am_aux_dir/install-sh'" ;; + *) + install_sh="\${SHELL} $am_aux_dir/install-sh" + esac +fi + +# Installed binaries are usually stripped using `strip' when the user +# run `make install-strip'. However `strip' might not be the right +# tool to use in cross-compilation environments, therefore Automake +# will honor the `STRIP' environment variable to overrule this program. +if test "$cross_compiling" != no; then + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args. +set dummy ${ac_tool_prefix}strip; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_STRIP+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$STRIP"; then + ac_cv_prog_STRIP="$STRIP" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_STRIP="${ac_tool_prefix}strip" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +STRIP=$ac_cv_prog_STRIP +if test -n "$STRIP"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $STRIP" >&5 +$as_echo "$STRIP" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_STRIP"; then + ac_ct_STRIP=$STRIP + # Extract the first word of "strip", so it can be a program name with args. +set dummy strip; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_ac_ct_STRIP+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_STRIP"; then + ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_ac_ct_STRIP="strip" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP +if test -n "$ac_ct_STRIP"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_STRIP" >&5 +$as_echo "$ac_ct_STRIP" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_STRIP" = x; then + STRIP=":" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + STRIP=$ac_ct_STRIP + fi +else + STRIP="$ac_cv_prog_STRIP" +fi + fi +INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s" -{ echo "$as_me:$LINENO: checking for a thread-safe mkdir -p" >&5 -echo $ECHO_N "checking for a thread-safe mkdir -p... $ECHO_C" >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a thread-safe mkdir -p" >&5 +$as_echo_n "checking for a thread-safe mkdir -p... " >&6; } if test -z "$MKDIR_P"; then - if test "${ac_cv_path_mkdir+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 + if test "${ac_cv_path_mkdir+set}" = set; then : + $as_echo_n "(cached) " >&6 else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH$PATH_SEPARATOR/opt/sfw/bin do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. - for ac_prog in mkdir gmkdir; do + for ac_prog in mkdir gmkdir; do for ac_exec_ext in '' $ac_executable_extensions; do { test -f "$as_dir/$ac_prog$ac_exec_ext" && $as_test_x "$as_dir/$ac_prog$ac_exec_ext"; } || continue case `"$as_dir/$ac_prog$ac_exec_ext" --version 2>&1` in #( @@ -2347,11 +2829,12 @@ esac done done -done + done IFS=$as_save_IFS fi + test -d ./--version && rmdir ./--version if test "${ac_cv_path_mkdir+set}" = set; then MKDIR_P="$ac_cv_path_mkdir -p" else @@ -2359,12 +2842,11 @@ # value for MKDIR_P within a source directory, because that will # break other packages using the cache if that directory is # removed, or if the value is a relative name. - test -d ./--version && rmdir ./--version MKDIR_P="$ac_install_sh -d" fi fi -{ echo "$as_me:$LINENO: result: $MKDIR_P" >&5 -echo "${ECHO_T}$MKDIR_P" >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $MKDIR_P" >&5 +$as_echo "$MKDIR_P" >&6; } mkdir_p="$MKDIR_P" case $mkdir_p in @@ -2376,10 +2858,10 @@ do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 -{ echo "$as_me:$LINENO: checking for $ac_word" >&5 -echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } -if test "${ac_cv_prog_AWK+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_AWK+set}" = set; then : + $as_echo_n "(cached) " >&6 else if test -n "$AWK"; then ac_cv_prog_AWK="$AWK" # Let the user override the test. @@ -2389,36 +2871,37 @@ do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do + for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_AWK="$ac_prog" - echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done -done + done IFS=$as_save_IFS fi fi AWK=$ac_cv_prog_AWK if test -n "$AWK"; then - { echo "$as_me:$LINENO: result: $AWK" >&5 -echo "${ECHO_T}$AWK" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AWK" >&5 +$as_echo "$AWK" >&6; } else - { echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi test -n "$AWK" && break done -{ echo "$as_me:$LINENO: checking whether ${MAKE-make} sets \$(MAKE)" >&5 -echo $ECHO_N "checking whether ${MAKE-make} sets \$(MAKE)... $ECHO_C" >&6; } -set x ${MAKE-make}; ac_make=`echo "$2" | sed 's/+/p/g; s/[^a-zA-Z0-9_]/_/g'` -if { as_var=ac_cv_prog_make_${ac_make}_set; eval "test \"\${$as_var+set}\" = set"; }; then - echo $ECHO_N "(cached) $ECHO_C" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ${MAKE-make} sets \$(MAKE)" >&5 +$as_echo_n "checking whether ${MAKE-make} sets \$(MAKE)... " >&6; } +set x ${MAKE-make} +ac_make=`$as_echo "$2" | sed 's/+/p/g; s/[^a-zA-Z0-9_]/_/g'` +if { as_var=ac_cv_prog_make_${ac_make}_set; eval "test \"\${$as_var+set}\" = set"; }; then : + $as_echo_n "(cached) " >&6 else cat >conftest.make <<\_ACEOF SHELL = /bin/sh @@ -2435,12 +2918,12 @@ rm -f conftest.make fi if eval test \$ac_cv_prog_make_${ac_make}_set = yes; then - { echo "$as_me:$LINENO: result: yes" >&5 -echo "${ECHO_T}yes" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } SET_MAKE= else - { echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } SET_MAKE="MAKE=${MAKE-make}" fi @@ -2459,9 +2942,7 @@ am__isrc=' -I$(srcdir)' # test to see if srcdir already configured if test -f $srcdir/config.status; then - { { echo "$as_me:$LINENO: error: source directory already configured; run \"make distclean\" there first" >&5 -echo "$as_me: error: source directory already configured; run \"make distclean\" there first" >&2;} - { (exit 1); exit 1; }; } + as_fn_error "source directory already configured; run \"make distclean\" there first" "$LINENO" 5 fi fi @@ -2477,7 +2958,7 @@ # Define the identity of the package. PACKAGE='libffi' - VERSION='3.0.5' + VERSION='3.0.9' cat >>confdefs.h <<_ACEOF @@ -2505,112 +2986,6 @@ MAKEINFO=${MAKEINFO-"${am_missing_run}makeinfo"} -install_sh=${install_sh-"\$(SHELL) $am_aux_dir/install-sh"} - -# Installed binaries are usually stripped using `strip' when the user -# run `make install-strip'. However `strip' might not be the right -# tool to use in cross-compilation environments, therefore Automake -# will honor the `STRIP' environment variable to overrule this program. -if test "$cross_compiling" != no; then - if test -n "$ac_tool_prefix"; then - # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args. -set dummy ${ac_tool_prefix}strip; ac_word=$2 -{ echo "$as_me:$LINENO: checking for $ac_word" >&5 -echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } -if test "${ac_cv_prog_STRIP+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - if test -n "$STRIP"; then - ac_cv_prog_STRIP="$STRIP" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_STRIP="${ac_tool_prefix}strip" - echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done -done -IFS=$as_save_IFS - -fi -fi -STRIP=$ac_cv_prog_STRIP -if test -n "$STRIP"; then - { echo "$as_me:$LINENO: result: $STRIP" >&5 -echo "${ECHO_T}$STRIP" >&6; } -else - { echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6; } -fi - - -fi -if test -z "$ac_cv_prog_STRIP"; then - ac_ct_STRIP=$STRIP - # Extract the first word of "strip", so it can be a program name with args. -set dummy strip; ac_word=$2 -{ echo "$as_me:$LINENO: checking for $ac_word" >&5 -echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } -if test "${ac_cv_prog_ac_ct_STRIP+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - if test -n "$ac_ct_STRIP"; then - ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_ac_ct_STRIP="strip" - echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done -done -IFS=$as_save_IFS - -fi -fi -ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP -if test -n "$ac_ct_STRIP"; then - { echo "$as_me:$LINENO: result: $ac_ct_STRIP" >&5 -echo "${ECHO_T}$ac_ct_STRIP" >&6; } -else - { echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6; } -fi - - if test "x$ac_ct_STRIP" = x; then - STRIP=":" - else - case $cross_compiling:$ac_tool_warned in -yes:) -{ echo "$as_me:$LINENO: WARNING: In the future, Autoconf will not detect cross-tools -whose name does not start with the host triplet. If you think this -configuration is useful to you, please write to autoconf at gnu.org." >&5 -echo "$as_me: WARNING: In the future, Autoconf will not detect cross-tools -whose name does not start with the host triplet. If you think this -configuration is useful to you, please write to autoconf at gnu.org." >&2;} -ac_tool_warned=yes ;; -esac - STRIP=$ac_ct_STRIP - fi -else - STRIP="$ac_cv_prog_STRIP" -fi - -fi -INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s" - # We need awk for the "check" target. The system "awk" is bad on # some platforms. # Always define AMTAR for backward compatibility. @@ -2639,10 +3014,10 @@ if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args. set dummy ${ac_tool_prefix}gcc; ac_word=$2 -{ echo "$as_me:$LINENO: checking for $ac_word" >&5 -echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } -if test "${ac_cv_prog_CC+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_CC+set}" = set; then : + $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. @@ -2652,25 +3027,25 @@ do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do + for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_CC="${ac_tool_prefix}gcc" - echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done -done + done IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then - { echo "$as_me:$LINENO: result: $CC" >&5 -echo "${ECHO_T}$CC" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 +$as_echo "$CC" >&6; } else - { echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi @@ -2679,10 +3054,10 @@ ac_ct_CC=$CC # Extract the first word of "gcc", so it can be a program name with args. set dummy gcc; ac_word=$2 -{ echo "$as_me:$LINENO: checking for $ac_word" >&5 -echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } -if test "${ac_cv_prog_ac_ct_CC+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_ac_ct_CC+set}" = set; then : + $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. @@ -2692,25 +3067,25 @@ do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do + for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_ac_ct_CC="gcc" - echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done -done + done IFS=$as_save_IFS fi fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then - { echo "$as_me:$LINENO: result: $ac_ct_CC" >&5 -echo "${ECHO_T}$ac_ct_CC" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 +$as_echo "$ac_ct_CC" >&6; } else - { echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi if test "x$ac_ct_CC" = x; then @@ -2718,12 +3093,8 @@ else case $cross_compiling:$ac_tool_warned in yes:) -{ echo "$as_me:$LINENO: WARNING: In the future, Autoconf will not detect cross-tools -whose name does not start with the host triplet. If you think this -configuration is useful to you, please write to autoconf at gnu.org." >&5 -echo "$as_me: WARNING: In the future, Autoconf will not detect cross-tools -whose name does not start with the host triplet. If you think this -configuration is useful to you, please write to autoconf at gnu.org." >&2;} +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac CC=$ac_ct_CC @@ -2736,10 +3107,10 @@ if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args. set dummy ${ac_tool_prefix}cc; ac_word=$2 -{ echo "$as_me:$LINENO: checking for $ac_word" >&5 -echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } -if test "${ac_cv_prog_CC+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_CC+set}" = set; then : + $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. @@ -2749,25 +3120,25 @@ do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do + for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_CC="${ac_tool_prefix}cc" - echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done -done + done IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then - { echo "$as_me:$LINENO: result: $CC" >&5 -echo "${ECHO_T}$CC" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 +$as_echo "$CC" >&6; } else - { echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi @@ -2776,10 +3147,10 @@ if test -z "$CC"; then # Extract the first word of "cc", so it can be a program name with args. set dummy cc; ac_word=$2 -{ echo "$as_me:$LINENO: checking for $ac_word" >&5 -echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } -if test "${ac_cv_prog_CC+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_CC+set}" = set; then : + $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. @@ -2790,18 +3161,18 @@ do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do + for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then ac_prog_rejected=yes continue fi ac_cv_prog_CC="cc" - echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done -done + done IFS=$as_save_IFS if test $ac_prog_rejected = yes; then @@ -2820,11 +3191,11 @@ fi CC=$ac_cv_prog_CC if test -n "$CC"; then - { echo "$as_me:$LINENO: result: $CC" >&5 -echo "${ECHO_T}$CC" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 +$as_echo "$CC" >&6; } else - { echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi @@ -2835,10 +3206,10 @@ do # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. set dummy $ac_tool_prefix$ac_prog; ac_word=$2 -{ echo "$as_me:$LINENO: checking for $ac_word" >&5 -echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } -if test "${ac_cv_prog_CC+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_CC+set}" = set; then : + $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. @@ -2848,25 +3219,25 @@ do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do + for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_CC="$ac_tool_prefix$ac_prog" - echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done -done + done IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then - { echo "$as_me:$LINENO: result: $CC" >&5 -echo "${ECHO_T}$CC" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 +$as_echo "$CC" >&6; } else - { echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi @@ -2879,10 +3250,10 @@ do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 -{ echo "$as_me:$LINENO: checking for $ac_word" >&5 -echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } -if test "${ac_cv_prog_ac_ct_CC+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_ac_ct_CC+set}" = set; then : + $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. @@ -2892,25 +3263,25 @@ do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do + for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_ac_ct_CC="$ac_prog" - echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done -done + done IFS=$as_save_IFS fi fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then - { echo "$as_me:$LINENO: result: $ac_ct_CC" >&5 -echo "${ECHO_T}$ac_ct_CC" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 +$as_echo "$ac_ct_CC" >&6; } else - { echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi @@ -2922,12 +3293,8 @@ else case $cross_compiling:$ac_tool_warned in yes:) -{ echo "$as_me:$LINENO: WARNING: In the future, Autoconf will not detect cross-tools -whose name does not start with the host triplet. If you think this -configuration is useful to you, please write to autoconf at gnu.org." >&5 -echo "$as_me: WARNING: In the future, Autoconf will not detect cross-tools -whose name does not start with the host triplet. If you think this -configuration is useful to you, please write to autoconf at gnu.org." >&2;} +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac CC=$ac_ct_CC @@ -2937,51 +3304,37 @@ fi -test -z "$CC" && { { echo "$as_me:$LINENO: error: no acceptable C compiler found in \$PATH -See \`config.log' for more details." >&5 -echo "$as_me: error: no acceptable C compiler found in \$PATH -See \`config.log' for more details." >&2;} - { (exit 1); exit 1; }; } +test -z "$CC" && { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error "no acceptable C compiler found in \$PATH +See \`config.log' for more details." "$LINENO" 5; } # Provide some information about the compiler. -echo "$as_me:$LINENO: checking for C compiler version" >&5 -ac_compiler=`set X $ac_compile; echo $2` -{ (ac_try="$ac_compiler --version >&5" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_compiler --version >&5") 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } -{ (ac_try="$ac_compiler -v >&5" +$as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler version" >&5 +set X $ac_compile +ac_compiler=$2 +for ac_option in --version -v -V -qversion; do + { { ac_try="$ac_compiler $ac_option >&5" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_compiler -v >&5") 2>&5 +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_compiler $ac_option >&5") 2>conftest.err ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } -{ (ac_try="$ac_compiler -V >&5" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_compiler -V >&5") 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } + if test -s conftest.err; then + sed '10a\ +... rest of stderr output deleted ... + 10q' conftest.err >conftest.er1 + cat conftest.er1 >&5 + fi + rm -f conftest.er1 conftest.err + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } +done -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF +cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int @@ -2993,42 +3346,38 @@ } _ACEOF ac_clean_files_save=$ac_clean_files -ac_clean_files="$ac_clean_files a.out a.exe b.out" +ac_clean_files="$ac_clean_files a.out a.out.dSYM a.exe b.out" # Try to create an executable without -o first, disregard a.out. # It will help us diagnose broken compilers, and finding out an intuition # of exeext. -{ echo "$as_me:$LINENO: checking for C compiler default output file name" >&5 -echo $ECHO_N "checking for C compiler default output file name... $ECHO_C" >&6; } -ac_link_default=`echo "$ac_link" | sed 's/ -o *conftest[^ ]*//'` -# -# List of possible output files, starting from the most likely. -# The algorithm is not robust to junk in `.', hence go to wildcards (a.*) -# only as a last resort. b.out is created by i960 compilers. -ac_files='a_out.exe a.exe conftest.exe a.out conftest a.* conftest.* b.out' -# -# The IRIX 6 linker writes into existing files which may not be -# executable, retaining their permissions. Remove them first so a -# subsequent execution test works. +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the C compiler works" >&5 +$as_echo_n "checking whether the C compiler works... " >&6; } +ac_link_default=`$as_echo "$ac_link" | sed 's/ -o *conftest[^ ]*//'` + +# The possible output files: +ac_files="a.out conftest.exe conftest a.exe a_out.exe b.out conftest.*" + ac_rmfiles= for ac_file in $ac_files do case $ac_file in - *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.o | *.obj ) ;; + *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; * ) ac_rmfiles="$ac_rmfiles $ac_file";; esac done rm -f $ac_rmfiles -if { (ac_try="$ac_link_default" +if { { ac_try="$ac_link_default" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 (eval "$ac_link_default") 2>&5 ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; then + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then : # Autoconf-2.13 could set the ac_cv_exeext variable to `no'. # So ignore a value of `no', otherwise this would lead to `EXEEXT = no' # in a Makefile. We should not override ac_cv_exeext if it was cached, @@ -3038,14 +3387,14 @@ do test -f "$ac_file" || continue case $ac_file in - *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.o | *.obj ) + *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; [ab].out ) # We found the default executable, but exeext='' is most # certainly right. break;; *.* ) - if test "${ac_cv_exeext+set}" = set && test "$ac_cv_exeext" != no; + if test "${ac_cv_exeext+set}" = set && test "$ac_cv_exeext" != no; then :; else ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` fi @@ -3064,78 +3413,42 @@ else ac_file='' fi +if test -z "$ac_file"; then : + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +$as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +{ as_fn_set_status 77 +as_fn_error "C compiler cannot create executables +See \`config.log' for more details." "$LINENO" 5; }; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler default output file name" >&5 +$as_echo_n "checking for C compiler default output file name... " >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_file" >&5 +$as_echo "$ac_file" >&6; } +ac_exeext=$ac_cv_exeext -{ echo "$as_me:$LINENO: result: $ac_file" >&5 -echo "${ECHO_T}$ac_file" >&6; } -if test -z "$ac_file"; then - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -{ { echo "$as_me:$LINENO: error: C compiler cannot create executables -See \`config.log' for more details." >&5 -echo "$as_me: error: C compiler cannot create executables -See \`config.log' for more details." >&2;} - { (exit 77); exit 77; }; } -fi - -ac_exeext=$ac_cv_exeext - -# Check that the compiler produces executables we can run. If not, either -# the compiler is broken, or we cross compile. -{ echo "$as_me:$LINENO: checking whether the C compiler works" >&5 -echo $ECHO_N "checking whether the C compiler works... $ECHO_C" >&6; } -# FIXME: These cross compiler hacks should be removed for Autoconf 3.0 -# If not cross compiling, check that we can run a simple program. -if test "$cross_compiling" != yes; then - if { ac_try='./$ac_file' - { (case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_try") 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - cross_compiling=no - else - if test "$cross_compiling" = maybe; then - cross_compiling=yes - else - { { echo "$as_me:$LINENO: error: cannot run C compiled programs. -If you meant to cross compile, use \`--host'. -See \`config.log' for more details." >&5 -echo "$as_me: error: cannot run C compiled programs. -If you meant to cross compile, use \`--host'. -See \`config.log' for more details." >&2;} - { (exit 1); exit 1; }; } - fi - fi -fi -{ echo "$as_me:$LINENO: result: yes" >&5 -echo "${ECHO_T}yes" >&6; } - -rm -f a.out a.exe conftest$ac_cv_exeext b.out +rm -f -r a.out a.out.dSYM a.exe conftest$ac_cv_exeext b.out ac_clean_files=$ac_clean_files_save -# Check that the compiler produces executables we can run. If not, either -# the compiler is broken, or we cross compile. -{ echo "$as_me:$LINENO: checking whether we are cross compiling" >&5 -echo $ECHO_N "checking whether we are cross compiling... $ECHO_C" >&6; } -{ echo "$as_me:$LINENO: result: $cross_compiling" >&5 -echo "${ECHO_T}$cross_compiling" >&6; } - -{ echo "$as_me:$LINENO: checking for suffix of executables" >&5 -echo $ECHO_N "checking for suffix of executables... $ECHO_C" >&6; } -if { (ac_try="$ac_link" +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of executables" >&5 +$as_echo_n "checking for suffix of executables... " >&6; } +if { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 (eval "$ac_link") 2>&5 ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; then + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then : # If both `conftest.exe' and `conftest' are `present' (well, observable) # catch `conftest.exe'. For instance with Cygwin, `ls conftest' will # work properly (i.e., refer to `conftest.exe'), while it won't with @@ -3143,37 +3456,90 @@ for ac_file in conftest.exe conftest conftest.*; do test -f "$ac_file" || continue case $ac_file in - *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.o | *.obj ) ;; + *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` break;; * ) break;; esac done else - { { echo "$as_me:$LINENO: error: cannot compute suffix of executables: cannot compile and link -See \`config.log' for more details." >&5 -echo "$as_me: error: cannot compute suffix of executables: cannot compile and link -See \`config.log' for more details." >&2;} - { (exit 1); exit 1; }; } -fi - -rm -f conftest$ac_cv_exeext -{ echo "$as_me:$LINENO: result: $ac_cv_exeext" >&5 -echo "${ECHO_T}$ac_cv_exeext" >&6; } + { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error "cannot compute suffix of executables: cannot compile and link +See \`config.log' for more details." "$LINENO" 5; } +fi +rm -f conftest conftest$ac_cv_exeext +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_exeext" >&5 +$as_echo "$ac_cv_exeext" >&6; } rm -f conftest.$ac_ext EXEEXT=$ac_cv_exeext ac_exeext=$EXEEXT -{ echo "$as_me:$LINENO: checking for suffix of object files" >&5 -echo $ECHO_N "checking for suffix of object files... $ECHO_C" >&6; } -if test "${ac_cv_objext+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +int +main () +{ +FILE *f = fopen ("conftest.out", "w"); + return ferror (f) || fclose (f) != 0; + + ; + return 0; +} _ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF +ac_clean_files="$ac_clean_files conftest.out" +# Check that the compiler produces executables we can run. If not, either +# the compiler is broken, or we cross compile. +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are cross compiling" >&5 +$as_echo_n "checking whether we are cross compiling... " >&6; } +if test "$cross_compiling" != yes; then + { { ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_link") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } + if { ac_try='./conftest$ac_cv_exeext' + { { case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_try") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then + cross_compiling=no + else + if test "$cross_compiling" = maybe; then + cross_compiling=yes + else + { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error "cannot run C compiled programs. +If you meant to cross compile, use \`--host'. +See \`config.log' for more details." "$LINENO" 5; } + fi + fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $cross_compiling" >&5 +$as_echo "$cross_compiling" >&6; } + +rm -f conftest.$ac_ext conftest$ac_cv_exeext conftest.out +ac_clean_files=$ac_clean_files_save +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of object files" >&5 +$as_echo_n "checking for suffix of object files... " >&6; } +if test "${ac_cv_objext+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int @@ -3185,51 +3551,46 @@ } _ACEOF rm -f conftest.o conftest.obj -if { (ac_try="$ac_compile" +if { { ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 (eval "$ac_compile") 2>&5 ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; then + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then : for ac_file in conftest.o conftest.obj conftest.*; do test -f "$ac_file" || continue; case $ac_file in - *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf ) ;; + *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM ) ;; *) ac_cv_objext=`expr "$ac_file" : '.*\.\(.*\)'` break;; esac done else - echo "$as_me: failed program was:" >&5 + $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 -{ { echo "$as_me:$LINENO: error: cannot compute suffix of object files: cannot compile -See \`config.log' for more details." >&5 -echo "$as_me: error: cannot compute suffix of object files: cannot compile -See \`config.log' for more details." >&2;} - { (exit 1); exit 1; }; } +{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error "cannot compute suffix of object files: cannot compile +See \`config.log' for more details." "$LINENO" 5; } fi - rm -f conftest.$ac_cv_objext conftest.$ac_ext fi -{ echo "$as_me:$LINENO: result: $ac_cv_objext" >&5 -echo "${ECHO_T}$ac_cv_objext" >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_objext" >&5 +$as_echo "$ac_cv_objext" >&6; } OBJEXT=$ac_cv_objext ac_objext=$OBJEXT -{ echo "$as_me:$LINENO: checking whether we are using the GNU C compiler" >&5 -echo $ECHO_N "checking whether we are using the GNU C compiler... $ECHO_C" >&6; } -if test "${ac_cv_c_compiler_gnu+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C compiler" >&5 +$as_echo_n "checking whether we are using the GNU C compiler... " >&6; } +if test "${ac_cv_c_compiler_gnu+set}" = set; then : + $as_echo_n "(cached) " >&6 else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int @@ -3243,54 +3604,34 @@ return 0; } _ACEOF -rm -f conftest.$ac_objext -if { (ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then +if ac_fn_c_try_compile "$LINENO"; then : ac_compiler_gnu=yes else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_compiler_gnu=no + ac_compiler_gnu=no fi - rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_cv_c_compiler_gnu=$ac_compiler_gnu fi -{ echo "$as_me:$LINENO: result: $ac_cv_c_compiler_gnu" >&5 -echo "${ECHO_T}$ac_cv_c_compiler_gnu" >&6; } -GCC=`test $ac_compiler_gnu = yes && echo yes` +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_compiler_gnu" >&5 +$as_echo "$ac_cv_c_compiler_gnu" >&6; } +if test $ac_compiler_gnu = yes; then + GCC=yes +else + GCC= +fi ac_test_CFLAGS=${CFLAGS+set} ac_save_CFLAGS=$CFLAGS -{ echo "$as_me:$LINENO: checking whether $CC accepts -g" >&5 -echo $ECHO_N "checking whether $CC accepts -g... $ECHO_C" >&6; } -if test "${ac_cv_prog_cc_g+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC accepts -g" >&5 +$as_echo_n "checking whether $CC accepts -g... " >&6; } +if test "${ac_cv_prog_cc_g+set}" = set; then : + $as_echo_n "(cached) " >&6 else ac_save_c_werror_flag=$ac_c_werror_flag ac_c_werror_flag=yes ac_cv_prog_cc_g=no CFLAGS="-g" - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int @@ -3301,34 +3642,11 @@ return 0; } _ACEOF -rm -f conftest.$ac_objext -if { (ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then +if ac_fn_c_try_compile "$LINENO"; then : ac_cv_prog_cc_g=yes else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - CFLAGS="" - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF + CFLAGS="" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int @@ -3339,35 +3657,12 @@ return 0; } _ACEOF -rm -f conftest.$ac_objext -if { (ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then - : -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 +if ac_fn_c_try_compile "$LINENO"; then : - ac_c_werror_flag=$ac_save_c_werror_flag +else + ac_c_werror_flag=$ac_save_c_werror_flag CFLAGS="-g" - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int @@ -3378,42 +3673,18 @@ return 0; } _ACEOF -rm -f conftest.$ac_objext -if { (ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then +if ac_fn_c_try_compile "$LINENO"; then : ac_cv_prog_cc_g=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - fi - rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi - rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi - rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_c_werror_flag=$ac_save_c_werror_flag fi -{ echo "$as_me:$LINENO: result: $ac_cv_prog_cc_g" >&5 -echo "${ECHO_T}$ac_cv_prog_cc_g" >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_g" >&5 +$as_echo "$ac_cv_prog_cc_g" >&6; } if test "$ac_test_CFLAGS" = set; then CFLAGS=$ac_save_CFLAGS elif test $ac_cv_prog_cc_g = yes; then @@ -3429,18 +3700,14 @@ CFLAGS= fi fi -{ echo "$as_me:$LINENO: checking for $CC option to accept ISO C89" >&5 -echo $ECHO_N "checking for $CC option to accept ISO C89... $ECHO_C" >&6; } -if test "${ac_cv_prog_cc_c89+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $CC option to accept ISO C89" >&5 +$as_echo_n "checking for $CC option to accept ISO C89... " >&6; } +if test "${ac_cv_prog_cc_c89+set}" = set; then : + $as_echo_n "(cached) " >&6 else ac_cv_prog_cc_c89=no ac_save_CC=$CC -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF +cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include @@ -3497,31 +3764,9 @@ -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__" do CC="$ac_save_CC $ac_arg" - rm -f conftest.$ac_objext -if { (ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then + if ac_fn_c_try_compile "$LINENO"; then : ac_cv_prog_cc_c89=$ac_arg -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - fi - rm -f core conftest.err conftest.$ac_objext test "x$ac_cv_prog_cc_c89" != "xno" && break done @@ -3532,17 +3777,19 @@ # AC_CACHE_VAL case "x$ac_cv_prog_cc_c89" in x) - { echo "$as_me:$LINENO: result: none needed" >&5 -echo "${ECHO_T}none needed" >&6; } ;; + { $as_echo "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 +$as_echo "none needed" >&6; } ;; xno) - { echo "$as_me:$LINENO: result: unsupported" >&5 -echo "${ECHO_T}unsupported" >&6; } ;; + { $as_echo "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 +$as_echo "unsupported" >&6; } ;; *) CC="$CC $ac_cv_prog_cc_c89" - { echo "$as_me:$LINENO: result: $ac_cv_prog_cc_c89" >&5 -echo "${ECHO_T}$ac_cv_prog_cc_c89" >&6; } ;; + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c89" >&5 +$as_echo "$ac_cv_prog_cc_c89" >&6; } ;; esac +if test "x$ac_cv_prog_cc_c89" != xno; then : +fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' @@ -3557,44 +3804,44 @@ am_make=${MAKE-make} cat > confinc << 'END' am__doit: - @echo done + @echo this is the am__doit target .PHONY: am__doit END # If we don't find an include directive, just comment out the code. -{ echo "$as_me:$LINENO: checking for style of include used by $am_make" >&5 -echo $ECHO_N "checking for style of include used by $am_make... $ECHO_C" >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for style of include used by $am_make" >&5 +$as_echo_n "checking for style of include used by $am_make... " >&6; } am__include="#" am__quote= _am_result=none # First try GNU make style include. echo "include confinc" > confmf -# We grep out `Entering directory' and `Leaving directory' -# messages which can occur if `w' ends up in MAKEFLAGS. -# In particular we don't look at `^make:' because GNU make might -# be invoked under some other name (usually "gmake"), in which -# case it prints its new name instead of `make'. -if test "`$am_make -s -f confmf 2> /dev/null | grep -v 'ing directory'`" = "done"; then - am__include=include - am__quote= - _am_result=GNU -fi +# Ignore all kinds of additional output from `make'. +case `$am_make -s -f confmf 2> /dev/null` in #( +*the\ am__doit\ target*) + am__include=include + am__quote= + _am_result=GNU + ;; +esac # Now try BSD make style include. if test "$am__include" = "#"; then echo '.include "confinc"' > confmf - if test "`$am_make -s -f confmf 2> /dev/null`" = "done"; then - am__include=.include - am__quote="\"" - _am_result=BSD - fi + case `$am_make -s -f confmf 2> /dev/null` in #( + *the\ am__doit\ target*) + am__include=.include + am__quote="\"" + _am_result=BSD + ;; + esac fi -{ echo "$as_me:$LINENO: result: $_am_result" >&5 -echo "${ECHO_T}$_am_result" >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $_am_result" >&5 +$as_echo "$_am_result" >&6; } rm -f confinc confmf # Check whether --enable-dependency-tracking was given. -if test "${enable_dependency_tracking+set}" = set; then +if test "${enable_dependency_tracking+set}" = set; then : enableval=$enable_dependency_tracking; fi @@ -3614,10 +3861,10 @@ depcc="$CC" am_compiler_list= -{ echo "$as_me:$LINENO: checking dependency style of $depcc" >&5 -echo $ECHO_N "checking dependency style of $depcc... $ECHO_C" >&6; } -if test "${am_cv_CC_dependencies_compiler_type+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking dependency style of $depcc" >&5 +$as_echo_n "checking dependency style of $depcc... " >&6; } +if test "${am_cv_CC_dependencies_compiler_type+set}" = set; then : + $as_echo_n "(cached) " >&6 else if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then # We make a subdir and do the tests there. Otherwise we can end up @@ -3642,6 +3889,11 @@ if test "$am_compiler_list" = ""; then am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp` fi + am__universal=false + case " $depcc " in #( + *\ -arch\ *\ -arch\ *) am__universal=true ;; + esac + for depmode in $am_compiler_list; do # Setup a source with many dependencies, because some compilers # like to wrap large dependency lists on column 80 (with \), and @@ -3659,7 +3911,17 @@ done echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf + # We check with `-c' and `-o' for the sake of the "dashmstdout" + # mode. It turns out that the SunPro C++ compiler does not properly + # handle `-M -o', and we need to detect this. Also, some Intel + # versions had trouble with output in subdirs + am__obj=sub/conftest.${OBJEXT-o} + am__minus_obj="-o $am__obj" case $depmode in + gcc) + # This depmode causes a compiler race in universal mode. + test "$am__universal" = false || continue + ;; nosideeffect) # after this tag, mechanisms are not by side-effect, so they'll # only be used when explicitly requested @@ -3669,19 +3931,23 @@ break fi ;; + msvisualcpp | msvcmsys) + # This compiler won't grok `-c -o', but also, the minuso test has + # not run yet. These depmodes are late enough in the game, and + # so weak that their functioning should not be impacted. + am__obj=conftest.${OBJEXT-o} + am__minus_obj= + ;; none) break ;; esac - # We check with `-c' and `-o' for the sake of the "dashmstdout" - # mode. It turns out that the SunPro C++ compiler does not properly - # handle `-M -o', and we need to detect this. if depmode=$depmode \ - source=sub/conftest.c object=sub/conftest.${OBJEXT-o} \ + source=sub/conftest.c object=$am__obj \ depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ - $SHELL ./depcomp $depcc -c -o sub/conftest.${OBJEXT-o} sub/conftest.c \ + $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \ >/dev/null 2>conftest.err && grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 && grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && - grep sub/conftest.${OBJEXT-o} sub/conftest.Po > /dev/null 2>&1 && + grep $am__obj sub/conftest.Po > /dev/null 2>&1 && ${MAKE-make} -s -f confmf > /dev/null 2>&1; then # icc doesn't choke on unknown options, it will just issue warnings # or remarks (even with -Werror). So we grep stderr for any message @@ -3705,8 +3971,8 @@ fi fi -{ echo "$as_me:$LINENO: result: $am_cv_CC_dependencies_compiler_type" >&5 -echo "${ECHO_T}$am_cv_CC_dependencies_compiler_type" >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_CC_dependencies_compiler_type" >&5 +$as_echo "$am_cv_CC_dependencies_compiler_type" >&6; } CCDEPMODE=depmode=$am_cv_CC_dependencies_compiler_type if @@ -3724,6 +3990,7 @@ + # By default we simply use the C compiler to build assembly code. test "${CCAS+set}" = set || CCAS=$CC @@ -3733,10 +4000,10 @@ depcc="$CCAS" am_compiler_list= -{ echo "$as_me:$LINENO: checking dependency style of $depcc" >&5 -echo $ECHO_N "checking dependency style of $depcc... $ECHO_C" >&6; } -if test "${am_cv_CCAS_dependencies_compiler_type+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking dependency style of $depcc" >&5 +$as_echo_n "checking dependency style of $depcc... " >&6; } +if test "${am_cv_CCAS_dependencies_compiler_type+set}" = set; then : + $as_echo_n "(cached) " >&6 else if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then # We make a subdir and do the tests there. Otherwise we can end up @@ -3761,6 +4028,9 @@ if test "$am_compiler_list" = ""; then am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp` fi + am__universal=false + + for depmode in $am_compiler_list; do # Setup a source with many dependencies, because some compilers # like to wrap large dependency lists on column 80 (with \), and @@ -3778,7 +4048,17 @@ done echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf + # We check with `-c' and `-o' for the sake of the "dashmstdout" + # mode. It turns out that the SunPro C++ compiler does not properly + # handle `-M -o', and we need to detect this. Also, some Intel + # versions had trouble with output in subdirs + am__obj=sub/conftest.${OBJEXT-o} + am__minus_obj="-o $am__obj" case $depmode in + gcc) + # This depmode causes a compiler race in universal mode. + test "$am__universal" = false || continue + ;; nosideeffect) # after this tag, mechanisms are not by side-effect, so they'll # only be used when explicitly requested @@ -3788,19 +4068,23 @@ break fi ;; + msvisualcpp | msvcmsys) + # This compiler won't grok `-c -o', but also, the minuso test has + # not run yet. These depmodes are late enough in the game, and + # so weak that their functioning should not be impacted. + am__obj=conftest.${OBJEXT-o} + am__minus_obj= + ;; none) break ;; esac - # We check with `-c' and `-o' for the sake of the "dashmstdout" - # mode. It turns out that the SunPro C++ compiler does not properly - # handle `-M -o', and we need to detect this. if depmode=$depmode \ - source=sub/conftest.c object=sub/conftest.${OBJEXT-o} \ + source=sub/conftest.c object=$am__obj \ depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ - $SHELL ./depcomp $depcc -c -o sub/conftest.${OBJEXT-o} sub/conftest.c \ + $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \ >/dev/null 2>conftest.err && grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 && grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && - grep sub/conftest.${OBJEXT-o} sub/conftest.Po > /dev/null 2>&1 && + grep $am__obj sub/conftest.Po > /dev/null 2>&1 && ${MAKE-make} -s -f confmf > /dev/null 2>&1; then # icc doesn't choke on unknown options, it will just issue warnings # or remarks (even with -Werror). So we grep stderr for any message @@ -3824,8 +4108,8 @@ fi fi -{ echo "$as_me:$LINENO: result: $am_cv_CCAS_dependencies_compiler_type" >&5 -echo "${ECHO_T}$am_cv_CCAS_dependencies_compiler_type" >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_CCAS_dependencies_compiler_type" >&5 +$as_echo "$am_cv_CCAS_dependencies_compiler_type" >&6; } CCASDEPMODE=depmode=$am_cv_CCAS_dependencies_compiler_type if @@ -3840,22 +4124,18 @@ if test "x$CC" != xcc; then - { echo "$as_me:$LINENO: checking whether $CC and cc understand -c and -o together" >&5 -echo $ECHO_N "checking whether $CC and cc understand -c and -o together... $ECHO_C" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC and cc understand -c and -o together" >&5 +$as_echo_n "checking whether $CC and cc understand -c and -o together... " >&6; } else - { echo "$as_me:$LINENO: checking whether cc understands -c and -o together" >&5 -echo $ECHO_N "checking whether cc understands -c and -o together... $ECHO_C" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether cc understands -c and -o together" >&5 +$as_echo_n "checking whether cc understands -c and -o together... " >&6; } fi -set dummy $CC; ac_cc=`echo $2 | +set dummy $CC; ac_cc=`$as_echo "$2" | sed 's/[^a-zA-Z0-9_]/_/g;s/^[0-9]/_/'` -if { as_var=ac_cv_prog_cc_${ac_cc}_c_o; eval "test \"\${$as_var+set}\" = set"; }; then - echo $ECHO_N "(cached) $ECHO_C" >&6 +if { as_var=ac_cv_prog_cc_${ac_cc}_c_o; eval "test \"\${$as_var+set}\" = set"; }; then : + $as_echo_n "(cached) " >&6 else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int @@ -3871,58 +4151,63 @@ # existing .o file with -o, though they will create one. ac_try='$CC -c conftest.$ac_ext -o conftest2.$ac_objext >&5' rm -f conftest2.* -if { (case "(($ac_try" in +if { { case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 (eval "$ac_try") 2>&5 ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - test -f conftest2.$ac_objext && { (case "(($ac_try" in + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } && + test -f conftest2.$ac_objext && { { case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 (eval "$ac_try") 2>&5 ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then eval ac_cv_prog_cc_${ac_cc}_c_o=yes if test "x$CC" != xcc; then # Test first that cc exists at all. if { ac_try='cc -c conftest.$ac_ext >&5' - { (case "(($ac_try" in + { { case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 (eval "$ac_try") 2>&5 ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then ac_try='cc -c conftest.$ac_ext -o conftest2.$ac_objext >&5' rm -f conftest2.* - if { (case "(($ac_try" in + if { { case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 (eval "$ac_try") 2>&5 ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - test -f conftest2.$ac_objext && { (case "(($ac_try" in + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } && + test -f conftest2.$ac_objext && { { case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 (eval "$ac_try") 2>&5 ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then # cc works too. : @@ -3939,23 +4224,22 @@ fi if eval test \$ac_cv_prog_cc_${ac_cc}_c_o = yes; then - { echo "$as_me:$LINENO: result: yes" >&5 -echo "${ECHO_T}yes" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } else - { echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } -cat >>confdefs.h <<\_ACEOF -#define NO_MINUS_C_MINUS_O 1 -_ACEOF +$as_echo "#define NO_MINUS_C_MINUS_O 1" >>confdefs.h fi # FIXME: we rely on the cache variable name because # there is no other way. set dummy $CC -ac_cc=`echo $2 | sed 's/[^a-zA-Z0-9_]/_/g;s/^[0-9]/_/'` -if eval "test \"`echo '$ac_cv_prog_cc_'${ac_cc}_c_o`\" != yes"; then +am_cc=`echo $2 | sed 's/[^a-zA-Z0-9_]/_/g;s/^[0-9]/_/'` +eval am_t=\$ac_cv_prog_cc_${am_cc}_c_o +if test "$am_t" != yes; then # Losing compiler, so override with the script. # FIXME: It is wrong to rewrite CC. # But if we don't then we get into trouble of one sort or another. @@ -3965,176 +4249,206 @@ fi -# Check whether --enable-shared was given. -if test "${enable_shared+set}" = set; then - enableval=$enable_shared; p=${PACKAGE-default} - case $enableval in - yes) enable_shared=yes ;; - no) enable_shared=no ;; - *) - enable_shared=no - # Look at the argument we got. We use all the common list separators. - lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," - for pkg in $enableval; do - IFS="$lt_save_ifs" - if test "X$pkg" = "X$p"; then - enable_shared=yes - fi - done - IFS="$lt_save_ifs" - ;; - esac -else - enable_shared=yes -fi +AC_PROG_LIBTOOL -# Check whether --enable-static was given. -if test "${enable_static+set}" = set; then - enableval=$enable_static; p=${PACKAGE-default} - case $enableval in - yes) enable_static=yes ;; - no) enable_static=no ;; - *) - enable_static=no - # Look at the argument we got. We use all the common list separators. - lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," - for pkg in $enableval; do - IFS="$lt_save_ifs" - if test "X$pkg" = "X$p"; then - enable_static=yes - fi - done - IFS="$lt_save_ifs" - ;; - esac + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to enable maintainer-specific portions of Makefiles" >&5 +$as_echo_n "checking whether to enable maintainer-specific portions of Makefiles... " >&6; } + # Check whether --enable-maintainer-mode was given. +if test "${enable_maintainer_mode+set}" = set; then : + enableval=$enable_maintainer_mode; USE_MAINTAINER_MODE=$enableval else - enable_static=yes + USE_MAINTAINER_MODE=no fi - -# Check whether --enable-fast-install was given. -if test "${enable_fast_install+set}" = set; then - enableval=$enable_fast_install; p=${PACKAGE-default} - case $enableval in - yes) enable_fast_install=yes ;; - no) enable_fast_install=no ;; - *) - enable_fast_install=no - # Look at the argument we got. We use all the common list separators. - lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," - for pkg in $enableval; do - IFS="$lt_save_ifs" - if test "X$pkg" = "X$p"; then - enable_fast_install=yes - fi - done - IFS="$lt_save_ifs" - ;; - esac + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $USE_MAINTAINER_MODE" >&5 +$as_echo "$USE_MAINTAINER_MODE" >&6; } + if test $USE_MAINTAINER_MODE = yes; then + MAINTAINER_MODE_TRUE= + MAINTAINER_MODE_FALSE='#' else - enable_fast_install=yes + MAINTAINER_MODE_TRUE='#' + MAINTAINER_MODE_FALSE= fi + MAINT=$MAINTAINER_MODE_TRUE + + + -{ echo "$as_me:$LINENO: checking for a sed that does not truncate output" >&5 -echo $ECHO_N "checking for a sed that does not truncate output... $ECHO_C" >&6; } -if test "${lt_cv_path_SED+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to run the C preprocessor" >&5 +$as_echo_n "checking how to run the C preprocessor... " >&6; } +# On Suns, sometimes $CPP names a directory. +if test -n "$CPP" && test -d "$CPP"; then + CPP= +fi +if test -z "$CPP"; then + if test "${ac_cv_prog_CPP+set}" = set; then : + $as_echo_n "(cached) " >&6 else - # Loop through the user's path and test for sed and gsed. -# Then use that list of sed's as ones to test for truncation. -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH + # Double quotes because CPP needs to be expanded + for CPP in "$CC -E" "$CC -E -traditional-cpp" "/lib/cpp" + do + ac_preproc_ok=false +for ac_c_preproc_warn_flag in '' yes do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for lt_ac_prog in sed gsed; do - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$lt_ac_prog$ac_exec_ext" && $as_test_x "$as_dir/$lt_ac_prog$ac_exec_ext"; }; then - lt_ac_sed_list="$lt_ac_sed_list $as_dir/$lt_ac_prog$ac_exec_ext" - fi - done - done -done -IFS=$as_save_IFS -lt_ac_max=0 -lt_ac_count=0 -# Add /usr/xpg4/bin/sed as it is typically found on Solaris -# along with /bin/sed that truncates output. -for lt_ac_sed in $lt_ac_sed_list /usr/xpg4/bin/sed; do - test ! -f $lt_ac_sed && continue - cat /dev/null > conftest.in - lt_ac_count=0 - echo $ECHO_N "0123456789$ECHO_C" >conftest.in - # Check for GNU sed and select it if it is found. - if "$lt_ac_sed" --version 2>&1 < /dev/null | grep 'GNU' > /dev/null; then - lt_cv_path_SED=$lt_ac_sed - break - fi - while true; do - cat conftest.in conftest.in >conftest.tmp - mv conftest.tmp conftest.in - cp conftest.in conftest.nl - echo >>conftest.nl - $lt_ac_sed -e 's/a$//' < conftest.nl >conftest.out || break - cmp -s conftest.out conftest.nl || break - # 10000 chars as input seems more than enough - test $lt_ac_count -gt 10 && break - lt_ac_count=`expr $lt_ac_count + 1` - if test $lt_ac_count -gt $lt_ac_max; then - lt_ac_max=$lt_ac_count - lt_cv_path_SED=$lt_ac_sed - fi - done -done + # Use a header file that comes with gcc, so configuring glibc + # with a fresh cross-compiler works. + # Prefer to if __STDC__ is defined, since + # exists even on freestanding compilers. + # On the NeXT, cc -E runs the code through the compiler's parser, + # not just through cpp. "Syntax error" is here to catch this case. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#ifdef __STDC__ +# include +#else +# include +#endif + Syntax error +_ACEOF +if ac_fn_c_try_cpp "$LINENO"; then : + +else + # Broken: fails on valid input. +continue +fi +rm -f conftest.err conftest.$ac_ext + # OK, works on sane cases. Now check whether nonexistent headers + # can be detected and how. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +_ACEOF +if ac_fn_c_try_cpp "$LINENO"; then : + # Broken: success on invalid input. +continue +else + # Passes both tests. +ac_preproc_ok=: +break fi +rm -f conftest.err conftest.$ac_ext -SED=$lt_cv_path_SED +done +# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. +rm -f conftest.err conftest.$ac_ext +if $ac_preproc_ok; then : + break +fi -{ echo "$as_me:$LINENO: result: $SED" >&5 -echo "${ECHO_T}$SED" >&6; } + done + ac_cv_prog_CPP=$CPP -{ echo "$as_me:$LINENO: checking for grep that handles long lines and -e" >&5 -echo $ECHO_N "checking for grep that handles long lines and -e... $ECHO_C" >&6; } -if test "${ac_cv_path_GREP+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - # Extract the first word of "grep ggrep" to use in msg output -if test -z "$GREP"; then -set dummy grep ggrep; ac_prog_name=$2 -if test "${ac_cv_path_GREP+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 +fi + CPP=$ac_cv_prog_CPP else - ac_path_GREP_found=false -# Loop through the user's path and test for each of PROGNAME-LIST -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR + ac_cv_prog_CPP=$CPP +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $CPP" >&5 +$as_echo "$CPP" >&6; } +ac_preproc_ok=false +for ac_c_preproc_warn_flag in '' yes +do + # Use a header file that comes with gcc, so configuring glibc + # with a fresh cross-compiler works. + # Prefer to if __STDC__ is defined, since + # exists even on freestanding compilers. + # On the NeXT, cc -E runs the code through the compiler's parser, + # not just through cpp. "Syntax error" is here to catch this case. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#ifdef __STDC__ +# include +#else +# include +#endif + Syntax error +_ACEOF +if ac_fn_c_try_cpp "$LINENO"; then : + +else + # Broken: fails on valid input. +continue +fi +rm -f conftest.err conftest.$ac_ext + + # OK, works on sane cases. Now check whether nonexistent headers + # can be detected and how. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +_ACEOF +if ac_fn_c_try_cpp "$LINENO"; then : + # Broken: success on invalid input. +continue +else + # Passes both tests. +ac_preproc_ok=: +break +fi +rm -f conftest.err conftest.$ac_ext + +done +# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. +rm -f conftest.err conftest.$ac_ext +if $ac_preproc_ok; then : + +else + { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error "C preprocessor \"$CPP\" fails sanity check +See \`config.log' for more details." "$LINENO" 5; } +fi + +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for grep that handles long lines and -e" >&5 +$as_echo_n "checking for grep that handles long lines and -e... " >&6; } +if test "${ac_cv_path_GREP+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test -z "$GREP"; then + ac_path_GREP_found=false + # Loop through the user's path and test for each of PROGNAME-LIST + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. - for ac_prog in grep ggrep; do - for ac_exec_ext in '' $ac_executable_extensions; do - ac_path_GREP="$as_dir/$ac_prog$ac_exec_ext" - { test -f "$ac_path_GREP" && $as_test_x "$ac_path_GREP"; } || continue - # Check for GNU ac_path_GREP and select it if it is found. + for ac_prog in grep ggrep; do + for ac_exec_ext in '' $ac_executable_extensions; do + ac_path_GREP="$as_dir/$ac_prog$ac_exec_ext" + { test -f "$ac_path_GREP" && $as_test_x "$ac_path_GREP"; } || continue +# Check for GNU ac_path_GREP and select it if it is found. # Check for GNU $ac_path_GREP case `"$ac_path_GREP" --version 2>&1` in *GNU*) ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_found=:;; *) ac_count=0 - echo $ECHO_N "0123456789$ECHO_C" >"conftest.in" + $as_echo_n 0123456789 >"conftest.in" while : do cat "conftest.in" "conftest.in" >"conftest.tmp" mv "conftest.tmp" "conftest.in" cp "conftest.in" "conftest.nl" - echo 'GREP' >> "conftest.nl" + $as_echo 'GREP' >> "conftest.nl" "$ac_path_GREP" -e 'GREP$' -e '-(cannot match)-' < "conftest.nl" >"conftest.out" 2>/dev/null || break diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break - ac_count=`expr $ac_count + 1` + as_fn_arith $ac_count + 1 && ac_count=$as_val if test $ac_count -gt ${ac_path_GREP_max-0}; then # Best one so far, save it but keep looking for a better one ac_cv_path_GREP="$ac_path_GREP" @@ -4146,77 +4460,61 @@ rm -f conftest.in conftest.tmp conftest.nl conftest.out;; esac - - $ac_path_GREP_found && break 3 + $ac_path_GREP_found && break 3 + done + done done -done - -done IFS=$as_save_IFS - - -fi - -GREP="$ac_cv_path_GREP" -if test -z "$GREP"; then - { { echo "$as_me:$LINENO: error: no acceptable $ac_prog_name could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" >&5 -echo "$as_me: error: no acceptable $ac_prog_name could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" >&2;} - { (exit 1); exit 1; }; } -fi - + if test -z "$ac_cv_path_GREP"; then + as_fn_error "no acceptable grep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 + fi else ac_cv_path_GREP=$GREP fi - fi -{ echo "$as_me:$LINENO: result: $ac_cv_path_GREP" >&5 -echo "${ECHO_T}$ac_cv_path_GREP" >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_GREP" >&5 +$as_echo "$ac_cv_path_GREP" >&6; } GREP="$ac_cv_path_GREP" -{ echo "$as_me:$LINENO: checking for egrep" >&5 -echo $ECHO_N "checking for egrep... $ECHO_C" >&6; } -if test "${ac_cv_path_EGREP+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for egrep" >&5 +$as_echo_n "checking for egrep... " >&6; } +if test "${ac_cv_path_EGREP+set}" = set; then : + $as_echo_n "(cached) " >&6 else if echo a | $GREP -E '(a|b)' >/dev/null 2>&1 then ac_cv_path_EGREP="$GREP -E" else - # Extract the first word of "egrep" to use in msg output -if test -z "$EGREP"; then -set dummy egrep; ac_prog_name=$2 -if test "${ac_cv_path_EGREP+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else + if test -z "$EGREP"; then ac_path_EGREP_found=false -# Loop through the user's path and test for each of PROGNAME-LIST -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR + # Loop through the user's path and test for each of PROGNAME-LIST + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. - for ac_prog in egrep; do - for ac_exec_ext in '' $ac_executable_extensions; do - ac_path_EGREP="$as_dir/$ac_prog$ac_exec_ext" - { test -f "$ac_path_EGREP" && $as_test_x "$ac_path_EGREP"; } || continue - # Check for GNU ac_path_EGREP and select it if it is found. + for ac_prog in egrep; do + for ac_exec_ext in '' $ac_executable_extensions; do + ac_path_EGREP="$as_dir/$ac_prog$ac_exec_ext" + { test -f "$ac_path_EGREP" && $as_test_x "$ac_path_EGREP"; } || continue +# Check for GNU ac_path_EGREP and select it if it is found. # Check for GNU $ac_path_EGREP case `"$ac_path_EGREP" --version 2>&1` in *GNU*) ac_cv_path_EGREP="$ac_path_EGREP" ac_path_EGREP_found=:;; *) ac_count=0 - echo $ECHO_N "0123456789$ECHO_C" >"conftest.in" + $as_echo_n 0123456789 >"conftest.in" while : do cat "conftest.in" "conftest.in" >"conftest.tmp" mv "conftest.tmp" "conftest.in" cp "conftest.in" "conftest.nl" - echo 'EGREP' >> "conftest.nl" + $as_echo 'EGREP' >> "conftest.nl" "$ac_path_EGREP" 'EGREP$' < "conftest.nl" >"conftest.out" 2>/dev/null || break diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break - ac_count=`expr $ac_count + 1` + as_fn_arith $ac_count + 1 && ac_count=$as_val if test $ac_count -gt ${ac_path_EGREP_max-0}; then # Best one so far, save it but keep looking for a better one ac_cv_path_EGREP="$ac_path_EGREP" @@ -4228,17885 +4526,1046 @@ rm -f conftest.in conftest.tmp conftest.nl conftest.out;; esac - - $ac_path_EGREP_found && break 3 + $ac_path_EGREP_found && break 3 + done + done done -done - -done IFS=$as_save_IFS - - -fi - -EGREP="$ac_cv_path_EGREP" -if test -z "$EGREP"; then - { { echo "$as_me:$LINENO: error: no acceptable $ac_prog_name could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" >&5 -echo "$as_me: error: no acceptable $ac_prog_name could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" >&2;} - { (exit 1); exit 1; }; } -fi - + if test -z "$ac_cv_path_EGREP"; then + as_fn_error "no acceptable egrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 + fi else ac_cv_path_EGREP=$EGREP fi - fi fi -{ echo "$as_me:$LINENO: result: $ac_cv_path_EGREP" >&5 -echo "${ECHO_T}$ac_cv_path_EGREP" >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_EGREP" >&5 +$as_echo "$ac_cv_path_EGREP" >&6; } EGREP="$ac_cv_path_EGREP" +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for ANSI C header files" >&5 +$as_echo_n "checking for ANSI C header files... " >&6; } +if test "${ac_cv_header_stdc+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +#include +#include +#include + +int +main () +{ -# Check whether --with-gnu-ld was given. -if test "${with_gnu_ld+set}" = set; then - withval=$with_gnu_ld; test "$withval" = no || with_gnu_ld=yes -else - with_gnu_ld=no -fi - -ac_prog=ld -if test "$GCC" = yes; then - # Check if gcc -print-prog-name=ld gives a path. - { echo "$as_me:$LINENO: checking for ld used by $CC" >&5 -echo $ECHO_N "checking for ld used by $CC... $ECHO_C" >&6; } - case $host in - *-*-mingw*) - # gcc leaves a trailing carriage return which upsets mingw - ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;; - *) - ac_prog=`($CC -print-prog-name=ld) 2>&5` ;; - esac - case $ac_prog in - # Accept absolute paths. - [\\/]* | ?:[\\/]*) - re_direlt='/[^/][^/]*/\.\./' - # Canonicalize the pathname of ld - ac_prog=`echo $ac_prog| $SED 's%\\\\%/%g'` - while echo $ac_prog | grep "$re_direlt" > /dev/null 2>&1; do - ac_prog=`echo $ac_prog| $SED "s%$re_direlt%/%"` - done - test -z "$LD" && LD="$ac_prog" - ;; - "") - # If it fails, then pretend we aren't using GCC. - ac_prog=ld - ;; - *) - # If it is relative, then search for the first ld in PATH. - with_gnu_ld=unknown - ;; - esac -elif test "$with_gnu_ld" = yes; then - { echo "$as_me:$LINENO: checking for GNU ld" >&5 -echo $ECHO_N "checking for GNU ld... $ECHO_C" >&6; } -else - { echo "$as_me:$LINENO: checking for non-GNU ld" >&5 -echo $ECHO_N "checking for non-GNU ld... $ECHO_C" >&6; } -fi -if test "${lt_cv_path_LD+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - if test -z "$LD"; then - lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR - for ac_dir in $PATH; do - IFS="$lt_save_ifs" - test -z "$ac_dir" && ac_dir=. - if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then - lt_cv_path_LD="$ac_dir/$ac_prog" - # Check to see if the program is GNU ld. I'd rather use --version, - # but apparently some variants of GNU ld only accept -v. - # Break only if it was the GNU/non-GNU ld that we prefer. - case `"$lt_cv_path_LD" -v 2>&1 conftest.$ac_ext +/* end confdefs.h. */ +#include + +_ACEOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP "memchr" >/dev/null 2>&1; then : -LD="$lt_cv_path_LD" -if test -n "$LD"; then - { echo "$as_me:$LINENO: result: $LD" >&5 -echo "${ECHO_T}$LD" >&6; } else - { echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6; } + ac_cv_header_stdc=no fi -test -z "$LD" && { { echo "$as_me:$LINENO: error: no acceptable ld found in \$PATH" >&5 -echo "$as_me: error: no acceptable ld found in \$PATH" >&2;} - { (exit 1); exit 1; }; } -{ echo "$as_me:$LINENO: checking if the linker ($LD) is GNU ld" >&5 -echo $ECHO_N "checking if the linker ($LD) is GNU ld... $ECHO_C" >&6; } -if test "${lt_cv_prog_gnu_ld+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - # I'd rather use --version here, but apparently some GNU lds only accept -v. -case `$LD -v 2>&1 &5 -echo "${ECHO_T}$lt_cv_prog_gnu_ld" >&6; } -with_gnu_ld=$lt_cv_prog_gnu_ld - - -{ echo "$as_me:$LINENO: checking for $LD option to reload object files" >&5 -echo $ECHO_N "checking for $LD option to reload object files... $ECHO_C" >&6; } -if test "${lt_cv_ld_reload_flag+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - lt_cv_ld_reload_flag='-r' -fi -{ echo "$as_me:$LINENO: result: $lt_cv_ld_reload_flag" >&5 -echo "${ECHO_T}$lt_cv_ld_reload_flag" >&6; } -reload_flag=$lt_cv_ld_reload_flag -case $reload_flag in -"" | " "*) ;; -*) reload_flag=" $reload_flag" ;; -esac -reload_cmds='$LD$reload_flag -o $output$reload_objs' -case $host_os in - darwin*) - if test "$GCC" = yes; then - reload_cmds='$LTCC $LTCFLAGS -nostdlib ${wl}-r -o $output$reload_objs' - else - reload_cmds='$LD$reload_flag -o $output$reload_objs' - fi - ;; -esac -{ echo "$as_me:$LINENO: checking for BSD-compatible nm" >&5 -echo $ECHO_N "checking for BSD-compatible nm... $ECHO_C" >&6; } -if test "${lt_cv_path_NM+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - if test -n "$NM"; then - # Let the user override the test. - lt_cv_path_NM="$NM" -else - lt_nm_to_check="${ac_tool_prefix}nm" - if test -n "$ac_tool_prefix" && test "$build" = "$host"; then - lt_nm_to_check="$lt_nm_to_check nm" - fi - for lt_tmp_nm in $lt_nm_to_check; do - lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR - for ac_dir in $PATH /usr/ccs/bin/elf /usr/ccs/bin /usr/ucb /bin; do - IFS="$lt_save_ifs" - test -z "$ac_dir" && ac_dir=. - tmp_nm="$ac_dir/$lt_tmp_nm" - if test -f "$tmp_nm" || test -f "$tmp_nm$ac_exeext" ; then - # Check to see if the nm accepts a BSD-compat flag. - # Adding the `sed 1q' prevents false positives on HP-UX, which says: - # nm: unknown option "B" ignored - # Tru64's nm complains that /dev/null is an invalid object file - case `"$tmp_nm" -B /dev/null 2>&1 | sed '1q'` in - */dev/null* | *'Invalid file or object type'*) - lt_cv_path_NM="$tmp_nm -B" - break - ;; - *) - case `"$tmp_nm" -p /dev/null 2>&1 | sed '1q'` in - */dev/null*) - lt_cv_path_NM="$tmp_nm -p" - break - ;; - *) - lt_cv_path_NM=${lt_cv_path_NM="$tmp_nm"} # keep the first match, but - continue # so that we can try to find one that supports BSD flags - ;; - esac - ;; - esac - fi - done - IFS="$lt_save_ifs" - done - test -z "$lt_cv_path_NM" && lt_cv_path_NM=nm +if test $ac_cv_header_stdc = yes; then + # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include + +_ACEOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP "free" >/dev/null 2>&1; then : + +else + ac_cv_header_stdc=no fi +rm -f conftest* + fi -{ echo "$as_me:$LINENO: result: $lt_cv_path_NM" >&5 -echo "${ECHO_T}$lt_cv_path_NM" >&6; } -NM="$lt_cv_path_NM" - -{ echo "$as_me:$LINENO: checking whether ln -s works" >&5 -echo $ECHO_N "checking whether ln -s works... $ECHO_C" >&6; } -LN_S=$as_ln_s -if test "$LN_S" = "ln -s"; then - { echo "$as_me:$LINENO: result: yes" >&5 -echo "${ECHO_T}yes" >&6; } -else - { echo "$as_me:$LINENO: result: no, using $LN_S" >&5 -echo "${ECHO_T}no, using $LN_S" >&6; } -fi - -{ echo "$as_me:$LINENO: checking how to recognize dependent libraries" >&5 -echo $ECHO_N "checking how to recognize dependent libraries... $ECHO_C" >&6; } -if test "${lt_cv_deplibs_check_method+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - lt_cv_file_magic_cmd='$MAGIC_CMD' -lt_cv_file_magic_test_file= -lt_cv_deplibs_check_method='unknown' -# Need to set the preceding variable on all platforms that support -# interlibrary dependencies. -# 'none' -- dependencies not supported. -# `unknown' -- same as none, but documents that we really don't know. -# 'pass_all' -- all dependencies passed with no checks. -# 'test_compile' -- check by making test program. -# 'file_magic [[regex]]' -- check by looking for files in library path -# which responds to the $file_magic_cmd with a given extended regex. -# If you have `file' or equivalent on your system and you're not sure -# whether `pass_all' will *always* work, you probably want this one. - -case $host_os in -aix4* | aix5*) - lt_cv_deplibs_check_method=pass_all - ;; -beos*) - lt_cv_deplibs_check_method=pass_all - ;; +if test $ac_cv_header_stdc = yes; then + # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi. + if test "$cross_compiling" = yes; then : + : +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +#include +#if ((' ' & 0x0FF) == 0x020) +# define ISLOWER(c) ('a' <= (c) && (c) <= 'z') +# define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c)) +#else +# define ISLOWER(c) \ + (('a' <= (c) && (c) <= 'i') \ + || ('j' <= (c) && (c) <= 'r') \ + || ('s' <= (c) && (c) <= 'z')) +# define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c)) +#endif -bsdi[45]*) - lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (shared object|dynamic lib)' - lt_cv_file_magic_cmd='/usr/bin/file -L' - lt_cv_file_magic_test_file=/shlib/libc.so - ;; +#define XOR(e, f) (((e) && !(f)) || (!(e) && (f))) +int +main () +{ + int i; + for (i = 0; i < 256; i++) + if (XOR (islower (i), ISLOWER (i)) + || toupper (i) != TOUPPER (i)) + return 2; + return 0; +} +_ACEOF +if ac_fn_c_try_run "$LINENO"; then : -cygwin*) - # func_win32_libid is a shell function defined in ltmain.sh - lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL' - lt_cv_file_magic_cmd='func_win32_libid' - ;; +else + ac_cv_header_stdc=no +fi +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest.beam conftest.$ac_ext +fi -mingw* | pw32*) - # Base MSYS/MinGW do not provide the 'file' command needed by - # func_win32_libid shell function, so use a weaker test based on 'objdump', - # unless we find 'file', for example because we are cross-compiling. - if ( file / ) >/dev/null 2>&1; then - lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL' - lt_cv_file_magic_cmd='func_win32_libid' - else - lt_cv_deplibs_check_method='file_magic file format pei*-i386(.*architecture: i386)?' - lt_cv_file_magic_cmd='$OBJDUMP -f' - fi - ;; +fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_stdc" >&5 +$as_echo "$ac_cv_header_stdc" >&6; } +if test $ac_cv_header_stdc = yes; then -darwin* | rhapsody*) - lt_cv_deplibs_check_method=pass_all - ;; +$as_echo "#define STDC_HEADERS 1" >>confdefs.h -freebsd* | dragonfly*) - if echo __ELF__ | $CC -E - | grep __ELF__ > /dev/null; then - case $host_cpu in - i*86 ) - # Not sure whether the presence of OpenBSD here was a mistake. - # Let's accept both of them until this is cleared up. - lt_cv_deplibs_check_method='file_magic (FreeBSD|OpenBSD|DragonFly)/i[3-9]86 (compact )?demand paged shared library' - lt_cv_file_magic_cmd=/usr/bin/file - lt_cv_file_magic_test_file=`echo /usr/lib/libc.so.*` - ;; - esac - else - lt_cv_deplibs_check_method=pass_all - fi - ;; +fi -gnu*) - lt_cv_deplibs_check_method=pass_all - ;; +# On IRIX 5.3, sys/types and inttypes.h are conflicting. +for ac_header in sys/types.h sys/stat.h stdlib.h string.h memory.h strings.h \ + inttypes.h stdint.h unistd.h +do : + as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` +ac_fn_c_check_header_compile "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default +" +eval as_val=\$$as_ac_Header + if test "x$as_val" = x""yes; then : + cat >>confdefs.h <<_ACEOF +#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 +_ACEOF -hpux10.20* | hpux11*) - lt_cv_file_magic_cmd=/usr/bin/file - case $host_cpu in - ia64*) - lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF-[0-9][0-9]) shared object file - IA64' - lt_cv_file_magic_test_file=/usr/lib/hpux32/libc.so - ;; - hppa*64*) - lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF-[0-9][0-9]) shared object file - PA-RISC [0-9].[0-9]' - lt_cv_file_magic_test_file=/usr/lib/pa20_64/libc.sl - ;; - *) - lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|PA-RISC[0-9].[0-9]) shared library' - lt_cv_file_magic_test_file=/usr/lib/libc.sl - ;; - esac - ;; +fi -interix[3-9]*) - # PIC code is broken on Interix 3.x, that's why |\.a not |_pic\.a here - lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so|\.a)$' - ;; +done -irix5* | irix6* | nonstopux*) - case $LD in - *-32|*"-32 ") libmagic=32-bit;; - *-n32|*"-n32 ") libmagic=N32;; - *-64|*"-64 ") libmagic=64-bit;; - *) libmagic=never-match;; - esac - lt_cv_deplibs_check_method=pass_all - ;; -# This must be Linux ELF. -linux* | k*bsd*-gnu) - lt_cv_deplibs_check_method=pass_all - ;; +for ac_header in sys/mman.h +do : + ac_fn_c_check_header_mongrel "$LINENO" "sys/mman.h" "ac_cv_header_sys_mman_h" "$ac_includes_default" +if test "x$ac_cv_header_sys_mman_h" = x""yes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE_SYS_MMAN_H 1 +_ACEOF -netbsd*) - if echo __ELF__ | $CC -E - | grep __ELF__ > /dev/null; then - lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|_pic\.a)$' - else - lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so|_pic\.a)$' - fi - ;; +fi -newos6*) - lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (executable|dynamic lib)' - lt_cv_file_magic_cmd=/usr/bin/file - lt_cv_file_magic_test_file=/usr/lib/libnls.so - ;; +done -nto-qnx*) - lt_cv_deplibs_check_method=unknown - ;; +for ac_func in mmap +do : + ac_fn_c_check_func "$LINENO" "mmap" "ac_cv_func_mmap" +if test "x$ac_cv_func_mmap" = x""yes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE_MMAP 1 +_ACEOF -openbsd*) - if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then - lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|\.so|_pic\.a)$' - else - lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|_pic\.a)$' - fi - ;; +fi +done -osf3* | osf4* | osf5*) - lt_cv_deplibs_check_method=pass_all - ;; -rdos*) - lt_cv_deplibs_check_method=pass_all - ;; +ac_fn_c_check_header_mongrel "$LINENO" "sys/mman.h" "ac_cv_header_sys_mman_h" "$ac_includes_default" +if test "x$ac_cv_header_sys_mman_h" = x""yes; then : + libffi_header_sys_mman_h=yes +else + libffi_header_sys_mman_h=no +fi -solaris*) - lt_cv_deplibs_check_method=pass_all - ;; -sysv4 | sysv4.3*) - case $host_vendor in - motorola) - lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (shared object|dynamic lib) M[0-9][0-9]* Version [0-9]' - lt_cv_file_magic_test_file=`echo /usr/lib/libc.so*` - ;; - ncr) - lt_cv_deplibs_check_method=pass_all - ;; - sequent) - lt_cv_file_magic_cmd='/bin/file' - lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [LM]SB (shared object|dynamic lib )' - ;; - sni) - lt_cv_file_magic_cmd='/bin/file' - lt_cv_deplibs_check_method="file_magic ELF [0-9][0-9]*-bit [LM]SB dynamic lib" - lt_cv_file_magic_test_file=/lib/libc.so - ;; - siemens) - lt_cv_deplibs_check_method=pass_all - ;; - pc) - lt_cv_deplibs_check_method=pass_all - ;; - esac - ;; - -sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) - lt_cv_deplibs_check_method=pass_all - ;; -esac - -fi -{ echo "$as_me:$LINENO: result: $lt_cv_deplibs_check_method" >&5 -echo "${ECHO_T}$lt_cv_deplibs_check_method" >&6; } -file_magic_cmd=$lt_cv_file_magic_cmd -deplibs_check_method=$lt_cv_deplibs_check_method -test -z "$deplibs_check_method" && deplibs_check_method=unknown - - - - -# If no C compiler was specified, use CC. -LTCC=${LTCC-"$CC"} - -# If no C compiler flags were specified, use CFLAGS. -LTCFLAGS=${LTCFLAGS-"$CFLAGS"} - -# Allow CC to be a program name with arguments. -compiler=$CC - - -# Check whether --enable-libtool-lock was given. -if test "${enable_libtool_lock+set}" = set; then - enableval=$enable_libtool_lock; -fi - -test "x$enable_libtool_lock" != xno && enable_libtool_lock=yes - -# Some flags need to be propagated to the compiler or linker for good -# libtool support. -case $host in -ia64-*-hpux*) - # Find out which ABI we are using. - echo 'int i;' > conftest.$ac_ext - if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; then - case `/usr/bin/file conftest.$ac_objext` in - *ELF-32*) - HPUX_IA64_MODE="32" - ;; - *ELF-64*) - HPUX_IA64_MODE="64" - ;; - esac - fi - rm -rf conftest* - ;; -*-*-irix6*) - # Find out which ABI we are using. - echo '#line 4693 "configure"' > conftest.$ac_ext - if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; then - if test "$lt_cv_prog_gnu_ld" = yes; then - case `/usr/bin/file conftest.$ac_objext` in - *32-bit*) - LD="${LD-ld} -melf32bsmip" - ;; - *N32*) - LD="${LD-ld} -melf32bmipn32" - ;; - *64-bit*) - LD="${LD-ld} -melf64bmip" - ;; - esac - else - case `/usr/bin/file conftest.$ac_objext` in - *32-bit*) - LD="${LD-ld} -32" - ;; - *N32*) - LD="${LD-ld} -n32" - ;; - *64-bit*) - LD="${LD-ld} -64" - ;; - esac - fi - fi - rm -rf conftest* - ;; - -x86_64-*kfreebsd*-gnu|x86_64-*linux*|ppc*-*linux*|powerpc*-*linux*| \ -s390*-*linux*|sparc*-*linux*) - # Find out which ABI we are using. - echo 'int i;' > conftest.$ac_ext - if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; then - case `/usr/bin/file conftest.o` in - *32-bit*) - case $host in - x86_64-*kfreebsd*-gnu) - LD="${LD-ld} -m elf_i386_fbsd" - ;; - x86_64-*linux*) - LD="${LD-ld} -m elf_i386" - ;; - ppc64-*linux*|powerpc64-*linux*) - LD="${LD-ld} -m elf32ppclinux" - ;; - s390x-*linux*) - LD="${LD-ld} -m elf_s390" - ;; - sparc64-*linux*) - LD="${LD-ld} -m elf32_sparc" - ;; - esac - ;; - *64-bit*) - libsuff=64 - case $host in - x86_64-*kfreebsd*-gnu) - LD="${LD-ld} -m elf_x86_64_fbsd" - ;; - x86_64-*linux*) - LD="${LD-ld} -m elf_x86_64" - ;; - ppc*-*linux*|powerpc*-*linux*) - LD="${LD-ld} -m elf64ppc" - ;; - s390*-*linux*) - LD="${LD-ld} -m elf64_s390" - ;; - sparc*-*linux*) - LD="${LD-ld} -m elf64_sparc" - ;; - esac - ;; - esac - fi - rm -rf conftest* - ;; - -*-*-sco3.2v5*) - # On SCO OpenServer 5, we need -belf to get full-featured binaries. - SAVE_CFLAGS="$CFLAGS" - CFLAGS="$CFLAGS -belf" - { echo "$as_me:$LINENO: checking whether the C compiler needs -belf" >&5 -echo $ECHO_N "checking whether the C compiler needs -belf... $ECHO_C" >&6; } -if test "${lt_cv_cc_needs_belf+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - ac_ext=c -ac_cpp='$CPP $CPPFLAGS' -ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_c_compiler_gnu - - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ - -int -main () -{ - - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext conftest$ac_exeext -if { (ac_try="$ac_link" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_link") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest$ac_exeext && - $as_test_x conftest$ac_exeext; then - lt_cv_cc_needs_belf=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - lt_cv_cc_needs_belf=no -fi - -rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ - conftest$ac_exeext conftest.$ac_ext - ac_ext=c -ac_cpp='$CPP $CPPFLAGS' -ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_c_compiler_gnu - -fi -{ echo "$as_me:$LINENO: result: $lt_cv_cc_needs_belf" >&5 -echo "${ECHO_T}$lt_cv_cc_needs_belf" >&6; } - if test x"$lt_cv_cc_needs_belf" != x"yes"; then - # this is probably gcc 2.8.0, egcs 1.0 or newer; no need for -belf - CFLAGS="$SAVE_CFLAGS" - fi - ;; -sparc*-*solaris*) - # Find out which ABI we are using. - echo 'int i;' > conftest.$ac_ext - if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; then - case `/usr/bin/file conftest.o` in - *64-bit*) - case $lt_cv_prog_gnu_ld in - yes*) LD="${LD-ld} -m elf64_sparc" ;; - *) LD="${LD-ld} -64" ;; - esac - ;; - esac - fi - rm -rf conftest* - ;; - - -esac - -need_locks="$enable_libtool_lock" - - -ac_ext=c -ac_cpp='$CPP $CPPFLAGS' -ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_c_compiler_gnu -{ echo "$as_me:$LINENO: checking how to run the C preprocessor" >&5 -echo $ECHO_N "checking how to run the C preprocessor... $ECHO_C" >&6; } -# On Suns, sometimes $CPP names a directory. -if test -n "$CPP" && test -d "$CPP"; then - CPP= -fi -if test -z "$CPP"; then - if test "${ac_cv_prog_CPP+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - # Double quotes because CPP needs to be expanded - for CPP in "$CC -E" "$CC -E -traditional-cpp" "/lib/cpp" - do - ac_preproc_ok=false -for ac_c_preproc_warn_flag in '' yes -do - # Use a header file that comes with gcc, so configuring glibc - # with a fresh cross-compiler works. - # Prefer to if __STDC__ is defined, since - # exists even on freestanding compilers. - # On the NeXT, cc -E runs the code through the compiler's parser, - # not just through cpp. "Syntax error" is here to catch this case. - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -#ifdef __STDC__ -# include -#else -# include -#endif - Syntax error -_ACEOF -if { (ac_try="$ac_cpp conftest.$ac_ext" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } >/dev/null && { - test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || - test ! -s conftest.err - }; then - : -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - # Broken: fails on valid input. -continue -fi - -rm -f conftest.err conftest.$ac_ext - - # OK, works on sane cases. Now check whether nonexistent headers - # can be detected and how. - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -#include -_ACEOF -if { (ac_try="$ac_cpp conftest.$ac_ext" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } >/dev/null && { - test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || - test ! -s conftest.err - }; then - # Broken: success on invalid input. -continue -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - # Passes both tests. -ac_preproc_ok=: -break -fi - -rm -f conftest.err conftest.$ac_ext - -done -# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. -rm -f conftest.err conftest.$ac_ext -if $ac_preproc_ok; then - break -fi - - done - ac_cv_prog_CPP=$CPP - -fi - CPP=$ac_cv_prog_CPP -else - ac_cv_prog_CPP=$CPP -fi -{ echo "$as_me:$LINENO: result: $CPP" >&5 -echo "${ECHO_T}$CPP" >&6; } -ac_preproc_ok=false -for ac_c_preproc_warn_flag in '' yes -do - # Use a header file that comes with gcc, so configuring glibc - # with a fresh cross-compiler works. - # Prefer to if __STDC__ is defined, since - # exists even on freestanding compilers. - # On the NeXT, cc -E runs the code through the compiler's parser, - # not just through cpp. "Syntax error" is here to catch this case. - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -#ifdef __STDC__ -# include -#else -# include -#endif - Syntax error -_ACEOF -if { (ac_try="$ac_cpp conftest.$ac_ext" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } >/dev/null && { - test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || - test ! -s conftest.err - }; then - : -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - # Broken: fails on valid input. -continue -fi - -rm -f conftest.err conftest.$ac_ext - - # OK, works on sane cases. Now check whether nonexistent headers - # can be detected and how. - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -#include -_ACEOF -if { (ac_try="$ac_cpp conftest.$ac_ext" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } >/dev/null && { - test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || - test ! -s conftest.err - }; then - # Broken: success on invalid input. -continue -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - # Passes both tests. -ac_preproc_ok=: -break -fi - -rm -f conftest.err conftest.$ac_ext - -done -# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. -rm -f conftest.err conftest.$ac_ext -if $ac_preproc_ok; then - : -else - { { echo "$as_me:$LINENO: error: C preprocessor \"$CPP\" fails sanity check -See \`config.log' for more details." >&5 -echo "$as_me: error: C preprocessor \"$CPP\" fails sanity check -See \`config.log' for more details." >&2;} - { (exit 1); exit 1; }; } -fi - -ac_ext=c -ac_cpp='$CPP $CPPFLAGS' -ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_c_compiler_gnu - - -{ echo "$as_me:$LINENO: checking for ANSI C header files" >&5 -echo $ECHO_N "checking for ANSI C header files... $ECHO_C" >&6; } -if test "${ac_cv_header_stdc+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -#include -#include -#include -#include - -int -main () -{ - - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then - ac_cv_header_stdc=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_cv_header_stdc=no -fi - -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - -if test $ac_cv_header_stdc = yes; then - # SunOS 4.x string.h does not declare mem*, contrary to ANSI. - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -#include - -_ACEOF -if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | - $EGREP "memchr" >/dev/null 2>&1; then - : -else - ac_cv_header_stdc=no -fi -rm -f conftest* - -fi - -if test $ac_cv_header_stdc = yes; then - # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI. - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -#include - -_ACEOF -if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | - $EGREP "free" >/dev/null 2>&1; then - : -else - ac_cv_header_stdc=no -fi -rm -f conftest* - -fi - -if test $ac_cv_header_stdc = yes; then - # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi. - if test "$cross_compiling" = yes; then - : -else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -#include -#include -#if ((' ' & 0x0FF) == 0x020) -# define ISLOWER(c) ('a' <= (c) && (c) <= 'z') -# define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c)) -#else -# define ISLOWER(c) \ - (('a' <= (c) && (c) <= 'i') \ - || ('j' <= (c) && (c) <= 'r') \ - || ('s' <= (c) && (c) <= 'z')) -# define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c)) -#endif - -#define XOR(e, f) (((e) && !(f)) || (!(e) && (f))) -int -main () -{ - int i; - for (i = 0; i < 256; i++) - if (XOR (islower (i), ISLOWER (i)) - || toupper (i) != TOUPPER (i)) - return 2; - return 0; -} -_ACEOF -rm -f conftest$ac_exeext -if { (ac_try="$ac_link" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_link") 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { ac_try='./conftest$ac_exeext' - { (case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_try") 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - : -else - echo "$as_me: program exited with status $ac_status" >&5 -echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -( exit $ac_status ) -ac_cv_header_stdc=no -fi -rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext -fi - - -fi -fi -{ echo "$as_me:$LINENO: result: $ac_cv_header_stdc" >&5 -echo "${ECHO_T}$ac_cv_header_stdc" >&6; } -if test $ac_cv_header_stdc = yes; then - -cat >>confdefs.h <<\_ACEOF -#define STDC_HEADERS 1 -_ACEOF - -fi - -# On IRIX 5.3, sys/types and inttypes.h are conflicting. - - - - - - - - - -for ac_header in sys/types.h sys/stat.h stdlib.h string.h memory.h strings.h \ - inttypes.h stdint.h unistd.h -do -as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh` -{ echo "$as_me:$LINENO: checking for $ac_header" >&5 -echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6; } -if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default - -#include <$ac_header> -_ACEOF -rm -f conftest.$ac_objext -if { (ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then - eval "$as_ac_Header=yes" -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - eval "$as_ac_Header=no" -fi - -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -fi -ac_res=`eval echo '${'$as_ac_Header'}'` - { echo "$as_me:$LINENO: result: $ac_res" >&5 -echo "${ECHO_T}$ac_res" >&6; } -if test `eval echo '${'$as_ac_Header'}'` = yes; then - cat >>confdefs.h <<_ACEOF -#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1 -_ACEOF - -fi - -done - - - -for ac_header in dlfcn.h -do -as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh` -if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then - { echo "$as_me:$LINENO: checking for $ac_header" >&5 -echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6; } -if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -fi -ac_res=`eval echo '${'$as_ac_Header'}'` - { echo "$as_me:$LINENO: result: $ac_res" >&5 -echo "${ECHO_T}$ac_res" >&6; } -else - # Is the header compilable? -{ echo "$as_me:$LINENO: checking $ac_header usability" >&5 -echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6; } -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default -#include <$ac_header> -_ACEOF -rm -f conftest.$ac_objext -if { (ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then - ac_header_compiler=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_header_compiler=no -fi - -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -{ echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 -echo "${ECHO_T}$ac_header_compiler" >&6; } - -# Is the header present? -{ echo "$as_me:$LINENO: checking $ac_header presence" >&5 -echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6; } -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -#include <$ac_header> -_ACEOF -if { (ac_try="$ac_cpp conftest.$ac_ext" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } >/dev/null && { - test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || - test ! -s conftest.err - }; then - ac_header_preproc=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_header_preproc=no -fi - -rm -f conftest.err conftest.$ac_ext -{ echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 -echo "${ECHO_T}$ac_header_preproc" >&6; } - -# So? What about this header? -case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in - yes:no: ) - { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5 -echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5 -echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;} - ac_header_preproc=yes - ;; - no:yes:* ) - { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5 -echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: check for missing prerequisite headers?" >&5 -echo "$as_me: WARNING: $ac_header: check for missing prerequisite headers?" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5 -echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&5 -echo "$as_me: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5 -echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5 -echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;} - ( cat <<\_ASBOX -## ------------------------------------------- ## -## Report this to http://gcc.gnu.org/bugs.html ## -## ------------------------------------------- ## -_ASBOX - ) | sed "s/^/$as_me: WARNING: /" >&2 - ;; -esac -{ echo "$as_me:$LINENO: checking for $ac_header" >&5 -echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6; } -if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - eval "$as_ac_Header=\$ac_header_preproc" -fi -ac_res=`eval echo '${'$as_ac_Header'}'` - { echo "$as_me:$LINENO: result: $ac_res" >&5 -echo "${ECHO_T}$ac_res" >&6; } - -fi -if test `eval echo '${'$as_ac_Header'}'` = yes; then - cat >>confdefs.h <<_ACEOF -#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1 -_ACEOF - -fi - -done - -ac_ext=cpp -ac_cpp='$CXXCPP $CPPFLAGS' -ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_cxx_compiler_gnu -if test -z "$CXX"; then - if test -n "$CCC"; then - CXX=$CCC - else - if test -n "$ac_tool_prefix"; then - for ac_prog in g++ c++ gpp aCC CC cxx cc++ cl.exe FCC KCC RCC xlC_r xlC - do - # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. -set dummy $ac_tool_prefix$ac_prog; ac_word=$2 -{ echo "$as_me:$LINENO: checking for $ac_word" >&5 -echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } -if test "${ac_cv_prog_CXX+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - if test -n "$CXX"; then - ac_cv_prog_CXX="$CXX" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_CXX="$ac_tool_prefix$ac_prog" - echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done -done -IFS=$as_save_IFS - -fi -fi -CXX=$ac_cv_prog_CXX -if test -n "$CXX"; then - { echo "$as_me:$LINENO: result: $CXX" >&5 -echo "${ECHO_T}$CXX" >&6; } -else - { echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6; } -fi - - - test -n "$CXX" && break - done -fi -if test -z "$CXX"; then - ac_ct_CXX=$CXX - for ac_prog in g++ c++ gpp aCC CC cxx cc++ cl.exe FCC KCC RCC xlC_r xlC -do - # Extract the first word of "$ac_prog", so it can be a program name with args. -set dummy $ac_prog; ac_word=$2 -{ echo "$as_me:$LINENO: checking for $ac_word" >&5 -echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } -if test "${ac_cv_prog_ac_ct_CXX+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - if test -n "$ac_ct_CXX"; then - ac_cv_prog_ac_ct_CXX="$ac_ct_CXX" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_ac_ct_CXX="$ac_prog" - echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done -done -IFS=$as_save_IFS - -fi -fi -ac_ct_CXX=$ac_cv_prog_ac_ct_CXX -if test -n "$ac_ct_CXX"; then - { echo "$as_me:$LINENO: result: $ac_ct_CXX" >&5 -echo "${ECHO_T}$ac_ct_CXX" >&6; } -else - { echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6; } -fi - - - test -n "$ac_ct_CXX" && break -done - - if test "x$ac_ct_CXX" = x; then - CXX="g++" - else - case $cross_compiling:$ac_tool_warned in -yes:) -{ echo "$as_me:$LINENO: WARNING: In the future, Autoconf will not detect cross-tools -whose name does not start with the host triplet. If you think this -configuration is useful to you, please write to autoconf at gnu.org." >&5 -echo "$as_me: WARNING: In the future, Autoconf will not detect cross-tools -whose name does not start with the host triplet. If you think this -configuration is useful to you, please write to autoconf at gnu.org." >&2;} -ac_tool_warned=yes ;; -esac - CXX=$ac_ct_CXX - fi -fi - - fi -fi -# Provide some information about the compiler. -echo "$as_me:$LINENO: checking for C++ compiler version" >&5 -ac_compiler=`set X $ac_compile; echo $2` -{ (ac_try="$ac_compiler --version >&5" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_compiler --version >&5") 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } -{ (ac_try="$ac_compiler -v >&5" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_compiler -v >&5") 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } -{ (ac_try="$ac_compiler -V >&5" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_compiler -V >&5") 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } - -{ echo "$as_me:$LINENO: checking whether we are using the GNU C++ compiler" >&5 -echo $ECHO_N "checking whether we are using the GNU C++ compiler... $ECHO_C" >&6; } -if test "${ac_cv_cxx_compiler_gnu+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ - -int -main () -{ -#ifndef __GNUC__ - choke me -#endif - - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_cxx_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then - ac_compiler_gnu=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_compiler_gnu=no -fi - -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -ac_cv_cxx_compiler_gnu=$ac_compiler_gnu - -fi -{ echo "$as_me:$LINENO: result: $ac_cv_cxx_compiler_gnu" >&5 -echo "${ECHO_T}$ac_cv_cxx_compiler_gnu" >&6; } -GXX=`test $ac_compiler_gnu = yes && echo yes` -ac_test_CXXFLAGS=${CXXFLAGS+set} -ac_save_CXXFLAGS=$CXXFLAGS -{ echo "$as_me:$LINENO: checking whether $CXX accepts -g" >&5 -echo $ECHO_N "checking whether $CXX accepts -g... $ECHO_C" >&6; } -if test "${ac_cv_prog_cxx_g+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - ac_save_cxx_werror_flag=$ac_cxx_werror_flag - ac_cxx_werror_flag=yes - ac_cv_prog_cxx_g=no - CXXFLAGS="-g" - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ - -int -main () -{ - - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_cxx_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then - ac_cv_prog_cxx_g=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - CXXFLAGS="" - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ - -int -main () -{ - - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_cxx_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then - : -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_cxx_werror_flag=$ac_save_cxx_werror_flag - CXXFLAGS="-g" - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ - -int -main () -{ - - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_cxx_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then - ac_cv_prog_cxx_g=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - -fi - -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -fi - -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -fi - -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - ac_cxx_werror_flag=$ac_save_cxx_werror_flag -fi -{ echo "$as_me:$LINENO: result: $ac_cv_prog_cxx_g" >&5 -echo "${ECHO_T}$ac_cv_prog_cxx_g" >&6; } -if test "$ac_test_CXXFLAGS" = set; then - CXXFLAGS=$ac_save_CXXFLAGS -elif test $ac_cv_prog_cxx_g = yes; then - if test "$GXX" = yes; then - CXXFLAGS="-g -O2" - else - CXXFLAGS="-g" - fi -else - if test "$GXX" = yes; then - CXXFLAGS="-O2" - else - CXXFLAGS= - fi -fi -ac_ext=cpp -ac_cpp='$CXXCPP $CPPFLAGS' -ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_cxx_compiler_gnu - -depcc="$CXX" am_compiler_list= - -{ echo "$as_me:$LINENO: checking dependency style of $depcc" >&5 -echo $ECHO_N "checking dependency style of $depcc... $ECHO_C" >&6; } -if test "${am_cv_CXX_dependencies_compiler_type+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then - # We make a subdir and do the tests there. Otherwise we can end up - # making bogus files that we don't know about and never remove. For - # instance it was reported that on HP-UX the gcc test will end up - # making a dummy file named `D' -- because `-MD' means `put the output - # in D'. - mkdir conftest.dir - # Copy depcomp to subdir because otherwise we won't find it if we're - # using a relative directory. - cp "$am_depcomp" conftest.dir - cd conftest.dir - # We will build objects and dependencies in a subdirectory because - # it helps to detect inapplicable dependency modes. For instance - # both Tru64's cc and ICC support -MD to output dependencies as a - # side effect of compilation, but ICC will put the dependencies in - # the current directory while Tru64 will put them in the object - # directory. - mkdir sub - - am_cv_CXX_dependencies_compiler_type=none - if test "$am_compiler_list" = ""; then - am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp` - fi - for depmode in $am_compiler_list; do - # Setup a source with many dependencies, because some compilers - # like to wrap large dependency lists on column 80 (with \), and - # we should not choose a depcomp mode which is confused by this. - # - # We need to recreate these files for each test, as the compiler may - # overwrite some of them when testing with obscure command lines. - # This happens at least with the AIX C compiler. - : > sub/conftest.c - for i in 1 2 3 4 5 6; do - echo '#include "conftst'$i'.h"' >> sub/conftest.c - # Using `: > sub/conftst$i.h' creates only sub/conftst1.h with - # Solaris 8's {/usr,}/bin/sh. - touch sub/conftst$i.h - done - echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf - - case $depmode in - nosideeffect) - # after this tag, mechanisms are not by side-effect, so they'll - # only be used when explicitly requested - if test "x$enable_dependency_tracking" = xyes; then - continue - else - break - fi - ;; - none) break ;; - esac - # We check with `-c' and `-o' for the sake of the "dashmstdout" - # mode. It turns out that the SunPro C++ compiler does not properly - # handle `-M -o', and we need to detect this. - if depmode=$depmode \ - source=sub/conftest.c object=sub/conftest.${OBJEXT-o} \ - depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ - $SHELL ./depcomp $depcc -c -o sub/conftest.${OBJEXT-o} sub/conftest.c \ - >/dev/null 2>conftest.err && - grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 && - grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && - grep sub/conftest.${OBJEXT-o} sub/conftest.Po > /dev/null 2>&1 && - ${MAKE-make} -s -f confmf > /dev/null 2>&1; then - # icc doesn't choke on unknown options, it will just issue warnings - # or remarks (even with -Werror). So we grep stderr for any message - # that says an option was ignored or not supported. - # When given -MP, icc 7.0 and 7.1 complain thusly: - # icc: Command line warning: ignoring option '-M'; no argument required - # The diagnosis changed in icc 8.0: - # icc: Command line remark: option '-MP' not supported - if (grep 'ignoring option' conftest.err || - grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else - am_cv_CXX_dependencies_compiler_type=$depmode - break - fi - fi - done - - cd .. - rm -rf conftest.dir -else - am_cv_CXX_dependencies_compiler_type=none -fi - -fi -{ echo "$as_me:$LINENO: result: $am_cv_CXX_dependencies_compiler_type" >&5 -echo "${ECHO_T}$am_cv_CXX_dependencies_compiler_type" >&6; } -CXXDEPMODE=depmode=$am_cv_CXX_dependencies_compiler_type - - if - test "x$enable_dependency_tracking" != xno \ - && test "$am_cv_CXX_dependencies_compiler_type" = gcc3; then - am__fastdepCXX_TRUE= - am__fastdepCXX_FALSE='#' -else - am__fastdepCXX_TRUE='#' - am__fastdepCXX_FALSE= -fi - - - - -if test -n "$CXX" && ( test "X$CXX" != "Xno" && - ( (test "X$CXX" = "Xg++" && `g++ -v >/dev/null 2>&1` ) || - (test "X$CXX" != "Xg++"))) ; then - ac_ext=cpp -ac_cpp='$CXXCPP $CPPFLAGS' -ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_cxx_compiler_gnu -{ echo "$as_me:$LINENO: checking how to run the C++ preprocessor" >&5 -echo $ECHO_N "checking how to run the C++ preprocessor... $ECHO_C" >&6; } -if test -z "$CXXCPP"; then - if test "${ac_cv_prog_CXXCPP+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - # Double quotes because CXXCPP needs to be expanded - for CXXCPP in "$CXX -E" "/lib/cpp" - do - ac_preproc_ok=false -for ac_cxx_preproc_warn_flag in '' yes -do - # Use a header file that comes with gcc, so configuring glibc - # with a fresh cross-compiler works. - # Prefer to if __STDC__ is defined, since - # exists even on freestanding compilers. - # On the NeXT, cc -E runs the code through the compiler's parser, - # not just through cpp. "Syntax error" is here to catch this case. - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -#ifdef __STDC__ -# include -#else -# include -#endif - Syntax error -_ACEOF -if { (ac_try="$ac_cpp conftest.$ac_ext" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } >/dev/null && { - test -z "$ac_cxx_preproc_warn_flag$ac_cxx_werror_flag" || - test ! -s conftest.err - }; then - : -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - # Broken: fails on valid input. -continue -fi - -rm -f conftest.err conftest.$ac_ext - - # OK, works on sane cases. Now check whether nonexistent headers - # can be detected and how. - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -#include -_ACEOF -if { (ac_try="$ac_cpp conftest.$ac_ext" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } >/dev/null && { - test -z "$ac_cxx_preproc_warn_flag$ac_cxx_werror_flag" || - test ! -s conftest.err - }; then - # Broken: success on invalid input. -continue -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - # Passes both tests. -ac_preproc_ok=: -break -fi - -rm -f conftest.err conftest.$ac_ext - -done -# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. -rm -f conftest.err conftest.$ac_ext -if $ac_preproc_ok; then - break -fi - - done - ac_cv_prog_CXXCPP=$CXXCPP - -fi - CXXCPP=$ac_cv_prog_CXXCPP -else - ac_cv_prog_CXXCPP=$CXXCPP -fi -{ echo "$as_me:$LINENO: result: $CXXCPP" >&5 -echo "${ECHO_T}$CXXCPP" >&6; } -ac_preproc_ok=false -for ac_cxx_preproc_warn_flag in '' yes -do - # Use a header file that comes with gcc, so configuring glibc - # with a fresh cross-compiler works. - # Prefer to if __STDC__ is defined, since - # exists even on freestanding compilers. - # On the NeXT, cc -E runs the code through the compiler's parser, - # not just through cpp. "Syntax error" is here to catch this case. - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -#ifdef __STDC__ -# include -#else -# include -#endif - Syntax error -_ACEOF -if { (ac_try="$ac_cpp conftest.$ac_ext" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } >/dev/null && { - test -z "$ac_cxx_preproc_warn_flag$ac_cxx_werror_flag" || - test ! -s conftest.err - }; then - : -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - # Broken: fails on valid input. -continue -fi - -rm -f conftest.err conftest.$ac_ext - - # OK, works on sane cases. Now check whether nonexistent headers - # can be detected and how. - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -#include -_ACEOF -if { (ac_try="$ac_cpp conftest.$ac_ext" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } >/dev/null && { - test -z "$ac_cxx_preproc_warn_flag$ac_cxx_werror_flag" || - test ! -s conftest.err - }; then - # Broken: success on invalid input. -continue -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - # Passes both tests. -ac_preproc_ok=: -break -fi - -rm -f conftest.err conftest.$ac_ext - -done -# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. -rm -f conftest.err conftest.$ac_ext -if $ac_preproc_ok; then - : -else - { { echo "$as_me:$LINENO: error: C++ preprocessor \"$CXXCPP\" fails sanity check -See \`config.log' for more details." >&5 -echo "$as_me: error: C++ preprocessor \"$CXXCPP\" fails sanity check -See \`config.log' for more details." >&2;} - { (exit 1); exit 1; }; } -fi - -ac_ext=cpp -ac_cpp='$CXXCPP $CPPFLAGS' -ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_cxx_compiler_gnu - -fi - - -ac_ext=f -ac_compile='$F77 -c $FFLAGS conftest.$ac_ext >&5' -ac_link='$F77 -o conftest$ac_exeext $FFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_f77_compiler_gnu -if test -n "$ac_tool_prefix"; then - for ac_prog in g77 xlf f77 frt pgf77 cf77 fort77 fl32 af77 xlf90 f90 pgf90 pghpf epcf90 gfortran g95 xlf95 f95 fort ifort ifc efc pgf95 lf95 ftn - do - # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. -set dummy $ac_tool_prefix$ac_prog; ac_word=$2 -{ echo "$as_me:$LINENO: checking for $ac_word" >&5 -echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } -if test "${ac_cv_prog_F77+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - if test -n "$F77"; then - ac_cv_prog_F77="$F77" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_F77="$ac_tool_prefix$ac_prog" - echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done -done -IFS=$as_save_IFS - -fi -fi -F77=$ac_cv_prog_F77 -if test -n "$F77"; then - { echo "$as_me:$LINENO: result: $F77" >&5 -echo "${ECHO_T}$F77" >&6; } -else - { echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6; } -fi - - - test -n "$F77" && break - done -fi -if test -z "$F77"; then - ac_ct_F77=$F77 - for ac_prog in g77 xlf f77 frt pgf77 cf77 fort77 fl32 af77 xlf90 f90 pgf90 pghpf epcf90 gfortran g95 xlf95 f95 fort ifort ifc efc pgf95 lf95 ftn -do - # Extract the first word of "$ac_prog", so it can be a program name with args. -set dummy $ac_prog; ac_word=$2 -{ echo "$as_me:$LINENO: checking for $ac_word" >&5 -echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } -if test "${ac_cv_prog_ac_ct_F77+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - if test -n "$ac_ct_F77"; then - ac_cv_prog_ac_ct_F77="$ac_ct_F77" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_ac_ct_F77="$ac_prog" - echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done -done -IFS=$as_save_IFS - -fi -fi -ac_ct_F77=$ac_cv_prog_ac_ct_F77 -if test -n "$ac_ct_F77"; then - { echo "$as_me:$LINENO: result: $ac_ct_F77" >&5 -echo "${ECHO_T}$ac_ct_F77" >&6; } -else - { echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6; } -fi - - - test -n "$ac_ct_F77" && break -done - - if test "x$ac_ct_F77" = x; then - F77="" - else - case $cross_compiling:$ac_tool_warned in -yes:) -{ echo "$as_me:$LINENO: WARNING: In the future, Autoconf will not detect cross-tools -whose name does not start with the host triplet. If you think this -configuration is useful to you, please write to autoconf at gnu.org." >&5 -echo "$as_me: WARNING: In the future, Autoconf will not detect cross-tools -whose name does not start with the host triplet. If you think this -configuration is useful to you, please write to autoconf at gnu.org." >&2;} -ac_tool_warned=yes ;; -esac - F77=$ac_ct_F77 - fi -fi - - -# Provide some information about the compiler. -echo "$as_me:$LINENO: checking for Fortran 77 compiler version" >&5 -ac_compiler=`set X $ac_compile; echo $2` -{ (ac_try="$ac_compiler --version >&5" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_compiler --version >&5") 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } -{ (ac_try="$ac_compiler -v >&5" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_compiler -v >&5") 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } -{ (ac_try="$ac_compiler -V >&5" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_compiler -V >&5") 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } -rm -f a.out - -# If we don't use `.F' as extension, the preprocessor is not run on the -# input file. (Note that this only needs to work for GNU compilers.) -ac_save_ext=$ac_ext -ac_ext=F -{ echo "$as_me:$LINENO: checking whether we are using the GNU Fortran 77 compiler" >&5 -echo $ECHO_N "checking whether we are using the GNU Fortran 77 compiler... $ECHO_C" >&6; } -if test "${ac_cv_f77_compiler_gnu+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - cat >conftest.$ac_ext <<_ACEOF - program main -#ifndef __GNUC__ - choke me -#endif - - end -_ACEOF -rm -f conftest.$ac_objext -if { (ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_f77_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then - ac_compiler_gnu=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_compiler_gnu=no -fi - -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -ac_cv_f77_compiler_gnu=$ac_compiler_gnu - -fi -{ echo "$as_me:$LINENO: result: $ac_cv_f77_compiler_gnu" >&5 -echo "${ECHO_T}$ac_cv_f77_compiler_gnu" >&6; } -ac_ext=$ac_save_ext -ac_test_FFLAGS=${FFLAGS+set} -ac_save_FFLAGS=$FFLAGS -FFLAGS= -{ echo "$as_me:$LINENO: checking whether $F77 accepts -g" >&5 -echo $ECHO_N "checking whether $F77 accepts -g... $ECHO_C" >&6; } -if test "${ac_cv_prog_f77_g+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - FFLAGS=-g -cat >conftest.$ac_ext <<_ACEOF - program main - - end -_ACEOF -rm -f conftest.$ac_objext -if { (ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_f77_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then - ac_cv_prog_f77_g=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_cv_prog_f77_g=no -fi - -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - -fi -{ echo "$as_me:$LINENO: result: $ac_cv_prog_f77_g" >&5 -echo "${ECHO_T}$ac_cv_prog_f77_g" >&6; } -if test "$ac_test_FFLAGS" = set; then - FFLAGS=$ac_save_FFLAGS -elif test $ac_cv_prog_f77_g = yes; then - if test "x$ac_cv_f77_compiler_gnu" = xyes; then - FFLAGS="-g -O2" - else - FFLAGS="-g" - fi -else - if test "x$ac_cv_f77_compiler_gnu" = xyes; then - FFLAGS="-O2" - else - FFLAGS= - fi -fi - -G77=`test $ac_compiler_gnu = yes && echo yes` -ac_ext=c -ac_cpp='$CPP $CPPFLAGS' -ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_c_compiler_gnu - - - -# Autoconf 2.13's AC_OBJEXT and AC_EXEEXT macros only works for C compilers! - -# find the maximum length of command line arguments -{ echo "$as_me:$LINENO: checking the maximum length of command line arguments" >&5 -echo $ECHO_N "checking the maximum length of command line arguments... $ECHO_C" >&6; } -if test "${lt_cv_sys_max_cmd_len+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - i=0 - teststring="ABCD" - - case $build_os in - msdosdjgpp*) - # On DJGPP, this test can blow up pretty badly due to problems in libc - # (any single argument exceeding 2000 bytes causes a buffer overrun - # during glob expansion). Even if it were fixed, the result of this - # check would be larger than it should be. - lt_cv_sys_max_cmd_len=12288; # 12K is about right - ;; - - gnu*) - # Under GNU Hurd, this test is not required because there is - # no limit to the length of command line arguments. - # Libtool will interpret -1 as no limit whatsoever - lt_cv_sys_max_cmd_len=-1; - ;; - - cygwin* | mingw*) - # On Win9x/ME, this test blows up -- it succeeds, but takes - # about 5 minutes as the teststring grows exponentially. - # Worse, since 9x/ME are not pre-emptively multitasking, - # you end up with a "frozen" computer, even though with patience - # the test eventually succeeds (with a max line length of 256k). - # Instead, let's just punt: use the minimum linelength reported by - # all of the supported platforms: 8192 (on NT/2K/XP). - lt_cv_sys_max_cmd_len=8192; - ;; - - amigaos*) - # On AmigaOS with pdksh, this test takes hours, literally. - # So we just punt and use a minimum line length of 8192. - lt_cv_sys_max_cmd_len=8192; - ;; - - netbsd* | freebsd* | openbsd* | darwin* | dragonfly*) - # This has been around since 386BSD, at least. Likely further. - if test -x /sbin/sysctl; then - lt_cv_sys_max_cmd_len=`/sbin/sysctl -n kern.argmax` - elif test -x /usr/sbin/sysctl; then - lt_cv_sys_max_cmd_len=`/usr/sbin/sysctl -n kern.argmax` - else - lt_cv_sys_max_cmd_len=65536 # usable default for all BSDs - fi - # And add a safety zone - lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4` - lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3` - ;; - - interix*) - # We know the value 262144 and hardcode it with a safety zone (like BSD) - lt_cv_sys_max_cmd_len=196608 - ;; - - osf*) - # Dr. Hans Ekkehard Plesser reports seeing a kernel panic running configure - # due to this test when exec_disable_arg_limit is 1 on Tru64. It is not - # nice to cause kernel panics so lets avoid the loop below. - # First set a reasonable default. - lt_cv_sys_max_cmd_len=16384 - # - if test -x /sbin/sysconfig; then - case `/sbin/sysconfig -q proc exec_disable_arg_limit` in - *1*) lt_cv_sys_max_cmd_len=-1 ;; - esac - fi - ;; - sco3.2v5*) - lt_cv_sys_max_cmd_len=102400 - ;; - sysv5* | sco5v6* | sysv4.2uw2*) - kargmax=`grep ARG_MAX /etc/conf/cf.d/stune 2>/dev/null` - if test -n "$kargmax"; then - lt_cv_sys_max_cmd_len=`echo $kargmax | sed 's/.*[ ]//'` - else - lt_cv_sys_max_cmd_len=32768 - fi - ;; - *) - lt_cv_sys_max_cmd_len=`(getconf ARG_MAX) 2> /dev/null` - if test -n "$lt_cv_sys_max_cmd_len"; then - lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4` - lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3` - else - SHELL=${SHELL-${CONFIG_SHELL-/bin/sh}} - while (test "X"`$SHELL $0 --fallback-echo "X$teststring" 2>/dev/null` \ - = "XX$teststring") >/dev/null 2>&1 && - new_result=`expr "X$teststring" : ".*" 2>&1` && - lt_cv_sys_max_cmd_len=$new_result && - test $i != 17 # 1/2 MB should be enough - do - i=`expr $i + 1` - teststring=$teststring$teststring - done - teststring= - # Add a significant safety factor because C++ compilers can tack on massive - # amounts of additional arguments before passing them to the linker. - # It appears as though 1/2 is a usable value. - lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 2` - fi - ;; - esac - -fi - -if test -n $lt_cv_sys_max_cmd_len ; then - { echo "$as_me:$LINENO: result: $lt_cv_sys_max_cmd_len" >&5 -echo "${ECHO_T}$lt_cv_sys_max_cmd_len" >&6; } -else - { echo "$as_me:$LINENO: result: none" >&5 -echo "${ECHO_T}none" >&6; } -fi - - - - - -# Check for command to grab the raw symbol name followed by C symbol from nm. -{ echo "$as_me:$LINENO: checking command to parse $NM output from $compiler object" >&5 -echo $ECHO_N "checking command to parse $NM output from $compiler object... $ECHO_C" >&6; } -if test "${lt_cv_sys_global_symbol_pipe+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - -# These are sane defaults that work on at least a few old systems. -# [They come from Ultrix. What could be older than Ultrix?!! ;)] - -# Character class describing NM global symbol codes. -symcode='[BCDEGRST]' - -# Regexp to match symbols that can be accessed directly from C. -sympat='\([_A-Za-z][_A-Za-z0-9]*\)' - -# Transform an extracted symbol line into a proper C declaration -lt_cv_sys_global_symbol_to_cdecl="sed -n -e 's/^. .* \(.*\)$/extern int \1;/p'" - -# Transform an extracted symbol line into symbol name and symbol address -lt_cv_sys_global_symbol_to_c_name_address="sed -n -e 's/^: \([^ ]*\) $/ {\\\"\1\\\", (lt_ptr) 0},/p' -e 's/^$symcode \([^ ]*\) \([^ ]*\)$/ {\"\2\", (lt_ptr) \&\2},/p'" - -# Define system-specific variables. -case $host_os in -aix*) - symcode='[BCDT]' - ;; -cygwin* | mingw* | pw32*) - symcode='[ABCDGISTW]' - ;; -hpux*) # Its linker distinguishes data from code symbols - if test "$host_cpu" = ia64; then - symcode='[ABCDEGRST]' - fi - lt_cv_sys_global_symbol_to_cdecl="sed -n -e 's/^T .* \(.*\)$/extern int \1();/p' -e 's/^$symcode* .* \(.*\)$/extern char \1;/p'" - lt_cv_sys_global_symbol_to_c_name_address="sed -n -e 's/^: \([^ ]*\) $/ {\\\"\1\\\", (lt_ptr) 0},/p' -e 's/^$symcode* \([^ ]*\) \([^ ]*\)$/ {\"\2\", (lt_ptr) \&\2},/p'" - ;; -linux* | k*bsd*-gnu) - if test "$host_cpu" = ia64; then - symcode='[ABCDGIRSTW]' - lt_cv_sys_global_symbol_to_cdecl="sed -n -e 's/^T .* \(.*\)$/extern int \1();/p' -e 's/^$symcode* .* \(.*\)$/extern char \1;/p'" - lt_cv_sys_global_symbol_to_c_name_address="sed -n -e 's/^: \([^ ]*\) $/ {\\\"\1\\\", (lt_ptr) 0},/p' -e 's/^$symcode* \([^ ]*\) \([^ ]*\)$/ {\"\2\", (lt_ptr) \&\2},/p'" - fi - ;; -irix* | nonstopux*) - symcode='[BCDEGRST]' - ;; -osf*) - symcode='[BCDEGQRST]' - ;; -solaris*) - symcode='[BDRT]' - ;; -sco3.2v5*) - symcode='[DT]' - ;; -sysv4.2uw2*) - symcode='[DT]' - ;; -sysv5* | sco5v6* | unixware* | OpenUNIX*) - symcode='[ABDT]' - ;; -sysv4) - symcode='[DFNSTU]' - ;; -esac - -# Handle CRLF in mingw tool chain -opt_cr= -case $build_os in -mingw*) - opt_cr=`echo 'x\{0,1\}' | tr x '\015'` # option cr in regexp - ;; -esac - -# If we're using GNU nm, then use its standard symbol codes. -case `$NM -V 2>&1` in -*GNU* | *'with BFD'*) - symcode='[ABCDGIRSTW]' ;; -esac - -# Try without a prefix undercore, then with it. -for ac_symprfx in "" "_"; do - - # Transform symcode, sympat, and symprfx into a raw symbol and a C symbol. - symxfrm="\\1 $ac_symprfx\\2 \\2" - - # Write the raw and C identifiers. - lt_cv_sys_global_symbol_pipe="sed -n -e 's/^.*[ ]\($symcode$symcode*\)[ ][ ]*$ac_symprfx$sympat$opt_cr$/$symxfrm/p'" - - # Check to see that the pipe works correctly. - pipe_works=no - - rm -f conftest* - cat > conftest.$ac_ext <&5 - (eval $ac_compile) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; then - # Now try to grab the symbols. - nlist=conftest.nm - if { (eval echo "$as_me:$LINENO: \"$NM conftest.$ac_objext \| $lt_cv_sys_global_symbol_pipe \> $nlist\"") >&5 - (eval $NM conftest.$ac_objext \| $lt_cv_sys_global_symbol_pipe \> $nlist) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && test -s "$nlist"; then - # Try sorting and uniquifying the output. - if sort "$nlist" | uniq > "$nlist"T; then - mv -f "$nlist"T "$nlist" - else - rm -f "$nlist"T - fi - - # Make sure that we snagged all the symbols we need. - if grep ' nm_test_var$' "$nlist" >/dev/null; then - if grep ' nm_test_func$' "$nlist" >/dev/null; then - cat < conftest.$ac_ext -#ifdef __cplusplus -extern "C" { -#endif - -EOF - # Now generate the symbol file. - eval "$lt_cv_sys_global_symbol_to_cdecl"' < "$nlist" | grep -v main >> conftest.$ac_ext' - - cat <> conftest.$ac_ext -#if defined (__STDC__) && __STDC__ -# define lt_ptr_t void * -#else -# define lt_ptr_t char * -# define const -#endif - -/* The mapping between symbol names and symbols. */ -const struct { - const char *name; - lt_ptr_t address; -} -lt_preloaded_symbols[] = -{ -EOF - $SED "s/^$symcode$symcode* \(.*\) \(.*\)$/ {\"\2\", (lt_ptr_t) \&\2},/" < "$nlist" | grep -v main >> conftest.$ac_ext - cat <<\EOF >> conftest.$ac_ext - {0, (lt_ptr_t) 0} -}; - -#ifdef __cplusplus -} -#endif -EOF - # Now try linking the two files. - mv conftest.$ac_objext conftstm.$ac_objext - lt_save_LIBS="$LIBS" - lt_save_CFLAGS="$CFLAGS" - LIBS="conftstm.$ac_objext" - CFLAGS="$CFLAGS$lt_prog_compiler_no_builtin_flag" - if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 - (eval $ac_link) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && test -s conftest${ac_exeext}; then - pipe_works=yes - fi - LIBS="$lt_save_LIBS" - CFLAGS="$lt_save_CFLAGS" - else - echo "cannot find nm_test_func in $nlist" >&5 - fi - else - echo "cannot find nm_test_var in $nlist" >&5 - fi - else - echo "cannot run $lt_cv_sys_global_symbol_pipe" >&5 - fi - else - echo "$progname: failed program was:" >&5 - cat conftest.$ac_ext >&5 - fi - rm -f conftest* conftst* - - # Do not use the global_symbol_pipe unless it works. - if test "$pipe_works" = yes; then - break - else - lt_cv_sys_global_symbol_pipe= - fi -done - -fi - -if test -z "$lt_cv_sys_global_symbol_pipe"; then - lt_cv_sys_global_symbol_to_cdecl= -fi -if test -z "$lt_cv_sys_global_symbol_pipe$lt_cv_sys_global_symbol_to_cdecl"; then - { echo "$as_me:$LINENO: result: failed" >&5 -echo "${ECHO_T}failed" >&6; } -else - { echo "$as_me:$LINENO: result: ok" >&5 -echo "${ECHO_T}ok" >&6; } -fi - -{ echo "$as_me:$LINENO: checking for objdir" >&5 -echo $ECHO_N "checking for objdir... $ECHO_C" >&6; } -if test "${lt_cv_objdir+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - rm -f .libs 2>/dev/null -mkdir .libs 2>/dev/null -if test -d .libs; then - lt_cv_objdir=.libs -else - # MS-DOS does not allow filenames that begin with a dot. - lt_cv_objdir=_libs -fi -rmdir .libs 2>/dev/null -fi -{ echo "$as_me:$LINENO: result: $lt_cv_objdir" >&5 -echo "${ECHO_T}$lt_cv_objdir" >&6; } -objdir=$lt_cv_objdir - - - - - -case $host_os in -aix3*) - # AIX sometimes has problems with the GCC collect2 program. For some - # reason, if we set the COLLECT_NAMES environment variable, the problems - # vanish in a puff of smoke. - if test "X${COLLECT_NAMES+set}" != Xset; then - COLLECT_NAMES= - export COLLECT_NAMES - fi - ;; -esac - -# Sed substitution that helps us do robust quoting. It backslashifies -# metacharacters that are still active within double-quoted strings. -Xsed='sed -e 1s/^X//' -sed_quote_subst='s/\([\\"\\`$\\\\]\)/\\\1/g' - -# Same as above, but do not quote variable references. -double_quote_subst='s/\([\\"\\`\\\\]\)/\\\1/g' - -# Sed substitution to delay expansion of an escaped shell variable in a -# double_quote_subst'ed string. -delay_variable_subst='s/\\\\\\\\\\\$/\\\\\\$/g' - -# Sed substitution to avoid accidental globbing in evaled expressions -no_glob_subst='s/\*/\\\*/g' - -# Constants: -rm="rm -f" - -# Global variables: -default_ofile=libtool -can_build_shared=yes - -# All known linkers require a `.a' archive for static linking (except MSVC, -# which needs '.lib'). -libext=a -ltmain="$ac_aux_dir/ltmain.sh" -ofile="$default_ofile" -with_gnu_ld="$lt_cv_prog_gnu_ld" - -if test -n "$ac_tool_prefix"; then - # Extract the first word of "${ac_tool_prefix}ar", so it can be a program name with args. -set dummy ${ac_tool_prefix}ar; ac_word=$2 -{ echo "$as_me:$LINENO: checking for $ac_word" >&5 -echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } -if test "${ac_cv_prog_AR+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - if test -n "$AR"; then - ac_cv_prog_AR="$AR" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_AR="${ac_tool_prefix}ar" - echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done -done -IFS=$as_save_IFS - -fi -fi -AR=$ac_cv_prog_AR -if test -n "$AR"; then - { echo "$as_me:$LINENO: result: $AR" >&5 -echo "${ECHO_T}$AR" >&6; } -else - { echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6; } -fi - - -fi -if test -z "$ac_cv_prog_AR"; then - ac_ct_AR=$AR - # Extract the first word of "ar", so it can be a program name with args. -set dummy ar; ac_word=$2 -{ echo "$as_me:$LINENO: checking for $ac_word" >&5 -echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } -if test "${ac_cv_prog_ac_ct_AR+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - if test -n "$ac_ct_AR"; then - ac_cv_prog_ac_ct_AR="$ac_ct_AR" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_ac_ct_AR="ar" - echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done -done -IFS=$as_save_IFS - -fi -fi -ac_ct_AR=$ac_cv_prog_ac_ct_AR -if test -n "$ac_ct_AR"; then - { echo "$as_me:$LINENO: result: $ac_ct_AR" >&5 -echo "${ECHO_T}$ac_ct_AR" >&6; } -else - { echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6; } -fi - - if test "x$ac_ct_AR" = x; then - AR="false" - else - case $cross_compiling:$ac_tool_warned in -yes:) -{ echo "$as_me:$LINENO: WARNING: In the future, Autoconf will not detect cross-tools -whose name does not start with the host triplet. If you think this -configuration is useful to you, please write to autoconf at gnu.org." >&5 -echo "$as_me: WARNING: In the future, Autoconf will not detect cross-tools -whose name does not start with the host triplet. If you think this -configuration is useful to you, please write to autoconf at gnu.org." >&2;} -ac_tool_warned=yes ;; -esac - AR=$ac_ct_AR - fi -else - AR="$ac_cv_prog_AR" -fi - -if test -n "$ac_tool_prefix"; then - # Extract the first word of "${ac_tool_prefix}ranlib", so it can be a program name with args. -set dummy ${ac_tool_prefix}ranlib; ac_word=$2 -{ echo "$as_me:$LINENO: checking for $ac_word" >&5 -echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } -if test "${ac_cv_prog_RANLIB+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - if test -n "$RANLIB"; then - ac_cv_prog_RANLIB="$RANLIB" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_RANLIB="${ac_tool_prefix}ranlib" - echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done -done -IFS=$as_save_IFS - -fi -fi -RANLIB=$ac_cv_prog_RANLIB -if test -n "$RANLIB"; then - { echo "$as_me:$LINENO: result: $RANLIB" >&5 -echo "${ECHO_T}$RANLIB" >&6; } -else - { echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6; } -fi - - -fi -if test -z "$ac_cv_prog_RANLIB"; then - ac_ct_RANLIB=$RANLIB - # Extract the first word of "ranlib", so it can be a program name with args. -set dummy ranlib; ac_word=$2 -{ echo "$as_me:$LINENO: checking for $ac_word" >&5 -echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } -if test "${ac_cv_prog_ac_ct_RANLIB+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - if test -n "$ac_ct_RANLIB"; then - ac_cv_prog_ac_ct_RANLIB="$ac_ct_RANLIB" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_ac_ct_RANLIB="ranlib" - echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done -done -IFS=$as_save_IFS - -fi -fi -ac_ct_RANLIB=$ac_cv_prog_ac_ct_RANLIB -if test -n "$ac_ct_RANLIB"; then - { echo "$as_me:$LINENO: result: $ac_ct_RANLIB" >&5 -echo "${ECHO_T}$ac_ct_RANLIB" >&6; } -else - { echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6; } -fi - - if test "x$ac_ct_RANLIB" = x; then - RANLIB=":" - else - case $cross_compiling:$ac_tool_warned in -yes:) -{ echo "$as_me:$LINENO: WARNING: In the future, Autoconf will not detect cross-tools -whose name does not start with the host triplet. If you think this -configuration is useful to you, please write to autoconf at gnu.org." >&5 -echo "$as_me: WARNING: In the future, Autoconf will not detect cross-tools -whose name does not start with the host triplet. If you think this -configuration is useful to you, please write to autoconf at gnu.org." >&2;} -ac_tool_warned=yes ;; -esac - RANLIB=$ac_ct_RANLIB - fi -else - RANLIB="$ac_cv_prog_RANLIB" -fi - -if test -n "$ac_tool_prefix"; then - # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args. -set dummy ${ac_tool_prefix}strip; ac_word=$2 -{ echo "$as_me:$LINENO: checking for $ac_word" >&5 -echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } -if test "${ac_cv_prog_STRIP+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - if test -n "$STRIP"; then - ac_cv_prog_STRIP="$STRIP" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_STRIP="${ac_tool_prefix}strip" - echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done -done -IFS=$as_save_IFS - -fi -fi -STRIP=$ac_cv_prog_STRIP -if test -n "$STRIP"; then - { echo "$as_me:$LINENO: result: $STRIP" >&5 -echo "${ECHO_T}$STRIP" >&6; } -else - { echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6; } -fi - - -fi -if test -z "$ac_cv_prog_STRIP"; then - ac_ct_STRIP=$STRIP - # Extract the first word of "strip", so it can be a program name with args. -set dummy strip; ac_word=$2 -{ echo "$as_me:$LINENO: checking for $ac_word" >&5 -echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } -if test "${ac_cv_prog_ac_ct_STRIP+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - if test -n "$ac_ct_STRIP"; then - ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_ac_ct_STRIP="strip" - echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done -done -IFS=$as_save_IFS - -fi -fi -ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP -if test -n "$ac_ct_STRIP"; then - { echo "$as_me:$LINENO: result: $ac_ct_STRIP" >&5 -echo "${ECHO_T}$ac_ct_STRIP" >&6; } -else - { echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6; } -fi - - if test "x$ac_ct_STRIP" = x; then - STRIP=":" - else - case $cross_compiling:$ac_tool_warned in -yes:) -{ echo "$as_me:$LINENO: WARNING: In the future, Autoconf will not detect cross-tools -whose name does not start with the host triplet. If you think this -configuration is useful to you, please write to autoconf at gnu.org." >&5 -echo "$as_me: WARNING: In the future, Autoconf will not detect cross-tools -whose name does not start with the host triplet. If you think this -configuration is useful to you, please write to autoconf at gnu.org." >&2;} -ac_tool_warned=yes ;; -esac - STRIP=$ac_ct_STRIP - fi -else - STRIP="$ac_cv_prog_STRIP" -fi - - -old_CC="$CC" -old_CFLAGS="$CFLAGS" - -# Set sane defaults for various variables -test -z "$AR" && AR=ar -test -z "$AR_FLAGS" && AR_FLAGS=cru -test -z "$AS" && AS=as -test -z "$CC" && CC=cc -test -z "$LTCC" && LTCC=$CC -test -z "$LTCFLAGS" && LTCFLAGS=$CFLAGS -test -z "$DLLTOOL" && DLLTOOL=dlltool -test -z "$LD" && LD=ld -test -z "$LN_S" && LN_S="ln -s" -test -z "$MAGIC_CMD" && MAGIC_CMD=file -test -z "$NM" && NM=nm -test -z "$SED" && SED=sed -test -z "$OBJDUMP" && OBJDUMP=objdump -test -z "$RANLIB" && RANLIB=: -test -z "$STRIP" && STRIP=: -test -z "$ac_objext" && ac_objext=o - -# Determine commands to create old-style static archives. -old_archive_cmds='$AR $AR_FLAGS $oldlib$oldobjs' -old_postinstall_cmds='chmod 644 $oldlib' -old_postuninstall_cmds= - -if test -n "$RANLIB"; then - case $host_os in - openbsd*) - old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB -t \$oldlib" - ;; - *) - old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB \$oldlib" - ;; - esac - old_archive_cmds="$old_archive_cmds~\$RANLIB \$oldlib" -fi - -for cc_temp in $compiler""; do - case $cc_temp in - compile | *[\\/]compile | ccache | *[\\/]ccache ) ;; - distcc | *[\\/]distcc | purify | *[\\/]purify ) ;; - \-*) ;; - *) break;; - esac -done -cc_basename=`$echo "X$cc_temp" | $Xsed -e 's%.*/%%' -e "s%^$host_alias-%%"` - - -# Only perform the check for file, if the check method requires it -case $deplibs_check_method in -file_magic*) - if test "$file_magic_cmd" = '$MAGIC_CMD'; then - { echo "$as_me:$LINENO: checking for ${ac_tool_prefix}file" >&5 -echo $ECHO_N "checking for ${ac_tool_prefix}file... $ECHO_C" >&6; } -if test "${lt_cv_path_MAGIC_CMD+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - case $MAGIC_CMD in -[\\/*] | ?:[\\/]*) - lt_cv_path_MAGIC_CMD="$MAGIC_CMD" # Let the user override the test with a path. - ;; -*) - lt_save_MAGIC_CMD="$MAGIC_CMD" - lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR - ac_dummy="/usr/bin$PATH_SEPARATOR$PATH" - for ac_dir in $ac_dummy; do - IFS="$lt_save_ifs" - test -z "$ac_dir" && ac_dir=. - if test -f $ac_dir/${ac_tool_prefix}file; then - lt_cv_path_MAGIC_CMD="$ac_dir/${ac_tool_prefix}file" - if test -n "$file_magic_test_file"; then - case $deplibs_check_method in - "file_magic "*) - file_magic_regex=`expr "$deplibs_check_method" : "file_magic \(.*\)"` - MAGIC_CMD="$lt_cv_path_MAGIC_CMD" - if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null | - $EGREP "$file_magic_regex" > /dev/null; then - : - else - cat <&2 - -*** Warning: the command libtool uses to detect shared libraries, -*** $file_magic_cmd, produces output that libtool cannot recognize. -*** The result is that libtool may fail to recognize shared libraries -*** as such. This will affect the creation of libtool libraries that -*** depend on shared libraries, but programs linked with such libtool -*** libraries will work regardless of this problem. Nevertheless, you -*** may want to report the problem to your system manager and/or to -*** bug-libtool at gnu.org - -EOF - fi ;; - esac - fi - break - fi - done - IFS="$lt_save_ifs" - MAGIC_CMD="$lt_save_MAGIC_CMD" - ;; -esac -fi - -MAGIC_CMD="$lt_cv_path_MAGIC_CMD" -if test -n "$MAGIC_CMD"; then - { echo "$as_me:$LINENO: result: $MAGIC_CMD" >&5 -echo "${ECHO_T}$MAGIC_CMD" >&6; } -else - { echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6; } -fi - -if test -z "$lt_cv_path_MAGIC_CMD"; then - if test -n "$ac_tool_prefix"; then - { echo "$as_me:$LINENO: checking for file" >&5 -echo $ECHO_N "checking for file... $ECHO_C" >&6; } -if test "${lt_cv_path_MAGIC_CMD+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - case $MAGIC_CMD in -[\\/*] | ?:[\\/]*) - lt_cv_path_MAGIC_CMD="$MAGIC_CMD" # Let the user override the test with a path. - ;; -*) - lt_save_MAGIC_CMD="$MAGIC_CMD" - lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR - ac_dummy="/usr/bin$PATH_SEPARATOR$PATH" - for ac_dir in $ac_dummy; do - IFS="$lt_save_ifs" - test -z "$ac_dir" && ac_dir=. - if test -f $ac_dir/file; then - lt_cv_path_MAGIC_CMD="$ac_dir/file" - if test -n "$file_magic_test_file"; then - case $deplibs_check_method in - "file_magic "*) - file_magic_regex=`expr "$deplibs_check_method" : "file_magic \(.*\)"` - MAGIC_CMD="$lt_cv_path_MAGIC_CMD" - if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null | - $EGREP "$file_magic_regex" > /dev/null; then - : - else - cat <&2 - -*** Warning: the command libtool uses to detect shared libraries, -*** $file_magic_cmd, produces output that libtool cannot recognize. -*** The result is that libtool may fail to recognize shared libraries -*** as such. This will affect the creation of libtool libraries that -*** depend on shared libraries, but programs linked with such libtool -*** libraries will work regardless of this problem. Nevertheless, you -*** may want to report the problem to your system manager and/or to -*** bug-libtool at gnu.org - -EOF - fi ;; - esac - fi - break - fi - done - IFS="$lt_save_ifs" - MAGIC_CMD="$lt_save_MAGIC_CMD" - ;; -esac -fi - -MAGIC_CMD="$lt_cv_path_MAGIC_CMD" -if test -n "$MAGIC_CMD"; then - { echo "$as_me:$LINENO: result: $MAGIC_CMD" >&5 -echo "${ECHO_T}$MAGIC_CMD" >&6; } -else - { echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6; } -fi - - else - MAGIC_CMD=: - fi -fi - - fi - ;; -esac - -enable_dlopen=no -enable_win32_dll=no - -# Check whether --enable-libtool-lock was given. -if test "${enable_libtool_lock+set}" = set; then - enableval=$enable_libtool_lock; -fi - -test "x$enable_libtool_lock" != xno && enable_libtool_lock=yes - - -# Check whether --with-pic was given. -if test "${with_pic+set}" = set; then - withval=$with_pic; pic_mode="$withval" -else - pic_mode=default -fi - -test -z "$pic_mode" && pic_mode=default - -# Use C for the default configuration in the libtool script -tagname= -lt_save_CC="$CC" -ac_ext=c -ac_cpp='$CPP $CPPFLAGS' -ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_c_compiler_gnu - - -# Source file extension for C test sources. -ac_ext=c - -# Object file extension for compiled C test sources. -objext=o -objext=$objext - -# Code to be used in simple compile tests -lt_simple_compile_test_code="int some_variable = 0;" - -# Code to be used in simple link tests -lt_simple_link_test_code='int main(){return(0);}' - - -# If no C compiler was specified, use CC. -LTCC=${LTCC-"$CC"} - -# If no C compiler flags were specified, use CFLAGS. -LTCFLAGS=${LTCFLAGS-"$CFLAGS"} - -# Allow CC to be a program name with arguments. -compiler=$CC - - -# save warnings/boilerplate of simple test code -ac_outfile=conftest.$ac_objext -echo "$lt_simple_compile_test_code" >conftest.$ac_ext -eval "$ac_compile" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err -_lt_compiler_boilerplate=`cat conftest.err` -$rm conftest* - -ac_outfile=conftest.$ac_objext -echo "$lt_simple_link_test_code" >conftest.$ac_ext -eval "$ac_link" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err -_lt_linker_boilerplate=`cat conftest.err` -$rm conftest* - - - -lt_prog_compiler_no_builtin_flag= - -if test "$GCC" = yes; then - lt_prog_compiler_no_builtin_flag=' -fno-builtin' - - -{ echo "$as_me:$LINENO: checking if $compiler supports -fno-rtti -fno-exceptions" >&5 -echo $ECHO_N "checking if $compiler supports -fno-rtti -fno-exceptions... $ECHO_C" >&6; } -if test "${lt_cv_prog_compiler_rtti_exceptions+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - lt_cv_prog_compiler_rtti_exceptions=no - ac_outfile=conftest.$ac_objext - echo "$lt_simple_compile_test_code" > conftest.$ac_ext - lt_compiler_flag="-fno-rtti -fno-exceptions" - # Insert the option either (1) after the last *FLAGS variable, or - # (2) before a word containing "conftest.", or (3) at the end. - # Note that $ac_compile itself does not contain backslashes and begins - # with a dollar sign (not a hyphen), so the echo should work correctly. - # The option is referenced via a variable to avoid confusing sed. - lt_compile=`echo "$ac_compile" | $SED \ - -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ - -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ - -e 's:$: $lt_compiler_flag:'` - (eval echo "\"\$as_me:7436: $lt_compile\"" >&5) - (eval "$lt_compile" 2>conftest.err) - ac_status=$? - cat conftest.err >&5 - echo "$as_me:7440: \$? = $ac_status" >&5 - if (exit $ac_status) && test -s "$ac_outfile"; then - # The compiler can only warn and ignore the option if not recognized - # So say no if there are warnings other than the usual output. - $echo "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' >conftest.exp - $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 - if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then - lt_cv_prog_compiler_rtti_exceptions=yes - fi - fi - $rm conftest* - -fi -{ echo "$as_me:$LINENO: result: $lt_cv_prog_compiler_rtti_exceptions" >&5 -echo "${ECHO_T}$lt_cv_prog_compiler_rtti_exceptions" >&6; } - -if test x"$lt_cv_prog_compiler_rtti_exceptions" = xyes; then - lt_prog_compiler_no_builtin_flag="$lt_prog_compiler_no_builtin_flag -fno-rtti -fno-exceptions" -else - : -fi - -fi - -lt_prog_compiler_wl= -lt_prog_compiler_pic= -lt_prog_compiler_static= - -{ echo "$as_me:$LINENO: checking for $compiler option to produce PIC" >&5 -echo $ECHO_N "checking for $compiler option to produce PIC... $ECHO_C" >&6; } - - if test "$GCC" = yes; then - lt_prog_compiler_wl='-Wl,' - lt_prog_compiler_static='-static' - - case $host_os in - aix*) - # All AIX code is PIC. - if test "$host_cpu" = ia64; then - # AIX 5 now supports IA64 processor - lt_prog_compiler_static='-Bstatic' - fi - ;; - - amigaos*) - # FIXME: we need at least 68020 code to build shared libraries, but - # adding the `-m68020' flag to GCC prevents building anything better, - # like `-m68040'. - lt_prog_compiler_pic='-m68020 -resident32 -malways-restore-a4' - ;; - - beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) - # PIC is the default for these OSes. - ;; - - mingw* | cygwin* | pw32* | os2*) - # This hack is so that the source file can tell whether it is being - # built for inclusion in a dll (and should export symbols for example). - # Although the cygwin gcc ignores -fPIC, still need this for old-style - # (--disable-auto-import) libraries - lt_prog_compiler_pic='-DDLL_EXPORT' - ;; - - darwin* | rhapsody*) - # PIC is the default on this platform - # Common symbols not allowed in MH_DYLIB files - lt_prog_compiler_pic='-fno-common' - ;; - - interix[3-9]*) - # Interix 3.x gcc -fpic/-fPIC options generate broken code. - # Instead, we relocate shared libraries at runtime. - ;; - - msdosdjgpp*) - # Just because we use GCC doesn't mean we suddenly get shared libraries - # on systems that don't support them. - lt_prog_compiler_can_build_shared=no - enable_shared=no - ;; - - sysv4*MP*) - if test -d /usr/nec; then - lt_prog_compiler_pic=-Kconform_pic - fi - ;; - - hpux*) - # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but - # not for PA HP-UX. - case $host_cpu in - hppa*64*|ia64*) - # +Z the default - ;; - *) - lt_prog_compiler_pic='-fPIC' - ;; - esac - ;; - - *) - lt_prog_compiler_pic='-fPIC' - ;; - esac - else - # PORTME Check for flag to pass linker flags through the system compiler. - case $host_os in - aix*) - lt_prog_compiler_wl='-Wl,' - if test "$host_cpu" = ia64; then - # AIX 5 now supports IA64 processor - lt_prog_compiler_static='-Bstatic' - else - lt_prog_compiler_static='-bnso -bI:/lib/syscalls.exp' - fi - ;; - darwin*) - # PIC is the default on this platform - # Common symbols not allowed in MH_DYLIB files - case $cc_basename in - xlc*) - lt_prog_compiler_pic='-qnocommon' - lt_prog_compiler_wl='-Wl,' - ;; - esac - ;; - - mingw* | cygwin* | pw32* | os2*) - # This hack is so that the source file can tell whether it is being - # built for inclusion in a dll (and should export symbols for example). - lt_prog_compiler_pic='-DDLL_EXPORT' - ;; - - hpux9* | hpux10* | hpux11*) - lt_prog_compiler_wl='-Wl,' - # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but - # not for PA HP-UX. - case $host_cpu in - hppa*64*|ia64*) - # +Z the default - ;; - *) - lt_prog_compiler_pic='+Z' - ;; - esac - # Is there a better lt_prog_compiler_static that works with the bundled CC? - lt_prog_compiler_static='${wl}-a ${wl}archive' - ;; - - irix5* | irix6* | nonstopux*) - lt_prog_compiler_wl='-Wl,' - # PIC (with -KPIC) is the default. - lt_prog_compiler_static='-non_shared' - ;; - - newsos6) - lt_prog_compiler_pic='-KPIC' - lt_prog_compiler_static='-Bstatic' - ;; - - linux* | k*bsd*-gnu) - case $cc_basename in - icc* | ecc*) - lt_prog_compiler_wl='-Wl,' - lt_prog_compiler_pic='-KPIC' - lt_prog_compiler_static='-static' - ;; - pgcc* | pgf77* | pgf90* | pgf95*) - # Portland Group compilers (*not* the Pentium gcc compiler, - # which looks to be a dead project) - lt_prog_compiler_wl='-Wl,' - lt_prog_compiler_pic='-fpic' - lt_prog_compiler_static='-Bstatic' - ;; - ccc*) - lt_prog_compiler_wl='-Wl,' - # All Alpha code is PIC. - lt_prog_compiler_static='-non_shared' - ;; - *) - case `$CC -V 2>&1 | sed 5q` in - *Sun\ C*) - # Sun C 5.9 - lt_prog_compiler_pic='-KPIC' - lt_prog_compiler_static='-Bstatic' - lt_prog_compiler_wl='-Wl,' - ;; - *Sun\ F*) - # Sun Fortran 8.3 passes all unrecognized flags to the linker - lt_prog_compiler_pic='-KPIC' - lt_prog_compiler_static='-Bstatic' - lt_prog_compiler_wl='' - ;; - esac - ;; - esac - ;; - - osf3* | osf4* | osf5*) - lt_prog_compiler_wl='-Wl,' - # All OSF/1 code is PIC. - lt_prog_compiler_static='-non_shared' - ;; - - rdos*) - lt_prog_compiler_static='-non_shared' - ;; - - solaris*) - lt_prog_compiler_pic='-KPIC' - lt_prog_compiler_static='-Bstatic' - case $cc_basename in - f77* | f90* | f95*) - lt_prog_compiler_wl='-Qoption ld ';; - *) - lt_prog_compiler_wl='-Wl,';; - esac - ;; - - sunos4*) - lt_prog_compiler_wl='-Qoption ld ' - lt_prog_compiler_pic='-PIC' - lt_prog_compiler_static='-Bstatic' - ;; - - sysv4 | sysv4.2uw2* | sysv4.3*) - lt_prog_compiler_wl='-Wl,' - lt_prog_compiler_pic='-KPIC' - lt_prog_compiler_static='-Bstatic' - ;; - - sysv4*MP*) - if test -d /usr/nec ;then - lt_prog_compiler_pic='-Kconform_pic' - lt_prog_compiler_static='-Bstatic' - fi - ;; - - sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*) - lt_prog_compiler_wl='-Wl,' - lt_prog_compiler_pic='-KPIC' - lt_prog_compiler_static='-Bstatic' - ;; - - unicos*) - lt_prog_compiler_wl='-Wl,' - lt_prog_compiler_can_build_shared=no - ;; - - uts4*) - lt_prog_compiler_pic='-pic' - lt_prog_compiler_static='-Bstatic' - ;; - - *) - lt_prog_compiler_can_build_shared=no - ;; - esac - fi - -{ echo "$as_me:$LINENO: result: $lt_prog_compiler_pic" >&5 -echo "${ECHO_T}$lt_prog_compiler_pic" >&6; } - -# -# Check to make sure the PIC flag actually works. -# -if test -n "$lt_prog_compiler_pic"; then - -{ echo "$as_me:$LINENO: checking if $compiler PIC flag $lt_prog_compiler_pic works" >&5 -echo $ECHO_N "checking if $compiler PIC flag $lt_prog_compiler_pic works... $ECHO_C" >&6; } -if test "${lt_prog_compiler_pic_works+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - lt_prog_compiler_pic_works=no - ac_outfile=conftest.$ac_objext - echo "$lt_simple_compile_test_code" > conftest.$ac_ext - lt_compiler_flag="$lt_prog_compiler_pic -DPIC" - # Insert the option either (1) after the last *FLAGS variable, or - # (2) before a word containing "conftest.", or (3) at the end. - # Note that $ac_compile itself does not contain backslashes and begins - # with a dollar sign (not a hyphen), so the echo should work correctly. - # The option is referenced via a variable to avoid confusing sed. - lt_compile=`echo "$ac_compile" | $SED \ - -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ - -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ - -e 's:$: $lt_compiler_flag:'` - (eval echo "\"\$as_me:7726: $lt_compile\"" >&5) - (eval "$lt_compile" 2>conftest.err) - ac_status=$? - cat conftest.err >&5 - echo "$as_me:7730: \$? = $ac_status" >&5 - if (exit $ac_status) && test -s "$ac_outfile"; then - # The compiler can only warn and ignore the option if not recognized - # So say no if there are warnings other than the usual output. - $echo "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' >conftest.exp - $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 - if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then - lt_prog_compiler_pic_works=yes - fi - fi - $rm conftest* - -fi -{ echo "$as_me:$LINENO: result: $lt_prog_compiler_pic_works" >&5 -echo "${ECHO_T}$lt_prog_compiler_pic_works" >&6; } - -if test x"$lt_prog_compiler_pic_works" = xyes; then - case $lt_prog_compiler_pic in - "" | " "*) ;; - *) lt_prog_compiler_pic=" $lt_prog_compiler_pic" ;; - esac -else - lt_prog_compiler_pic= - lt_prog_compiler_can_build_shared=no -fi - -fi -case $host_os in - # For platforms which do not support PIC, -DPIC is meaningless: - *djgpp*) - lt_prog_compiler_pic= - ;; - *) - lt_prog_compiler_pic="$lt_prog_compiler_pic -DPIC" - ;; -esac - -# -# Check to make sure the static flag actually works. -# -wl=$lt_prog_compiler_wl eval lt_tmp_static_flag=\"$lt_prog_compiler_static\" -{ echo "$as_me:$LINENO: checking if $compiler static flag $lt_tmp_static_flag works" >&5 -echo $ECHO_N "checking if $compiler static flag $lt_tmp_static_flag works... $ECHO_C" >&6; } -if test "${lt_prog_compiler_static_works+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - lt_prog_compiler_static_works=no - save_LDFLAGS="$LDFLAGS" - LDFLAGS="$LDFLAGS $lt_tmp_static_flag" - echo "$lt_simple_link_test_code" > conftest.$ac_ext - if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then - # The linker can only warn and ignore the option if not recognized - # So say no if there are warnings - if test -s conftest.err; then - # Append any errors to the config.log. - cat conftest.err 1>&5 - $echo "X$_lt_linker_boilerplate" | $Xsed -e '/^$/d' > conftest.exp - $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 - if diff conftest.exp conftest.er2 >/dev/null; then - lt_prog_compiler_static_works=yes - fi - else - lt_prog_compiler_static_works=yes - fi - fi - $rm conftest* - LDFLAGS="$save_LDFLAGS" - -fi -{ echo "$as_me:$LINENO: result: $lt_prog_compiler_static_works" >&5 -echo "${ECHO_T}$lt_prog_compiler_static_works" >&6; } - -if test x"$lt_prog_compiler_static_works" = xyes; then - : -else - lt_prog_compiler_static= -fi - - -{ echo "$as_me:$LINENO: checking if $compiler supports -c -o file.$ac_objext" >&5 -echo $ECHO_N "checking if $compiler supports -c -o file.$ac_objext... $ECHO_C" >&6; } -if test "${lt_cv_prog_compiler_c_o+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - lt_cv_prog_compiler_c_o=no - $rm -r conftest 2>/dev/null - mkdir conftest - cd conftest - mkdir out - echo "$lt_simple_compile_test_code" > conftest.$ac_ext - - lt_compiler_flag="-o out/conftest2.$ac_objext" - # Insert the option either (1) after the last *FLAGS variable, or - # (2) before a word containing "conftest.", or (3) at the end. - # Note that $ac_compile itself does not contain backslashes and begins - # with a dollar sign (not a hyphen), so the echo should work correctly. - lt_compile=`echo "$ac_compile" | $SED \ - -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ - -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ - -e 's:$: $lt_compiler_flag:'` - (eval echo "\"\$as_me:7830: $lt_compile\"" >&5) - (eval "$lt_compile" 2>out/conftest.err) - ac_status=$? - cat out/conftest.err >&5 - echo "$as_me:7834: \$? = $ac_status" >&5 - if (exit $ac_status) && test -s out/conftest2.$ac_objext - then - # The compiler can only warn and ignore the option if not recognized - # So say no if there are warnings - $echo "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' > out/conftest.exp - $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2 - if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then - lt_cv_prog_compiler_c_o=yes - fi - fi - chmod u+w . 2>&5 - $rm conftest* - # SGI C++ compiler will create directory out/ii_files/ for - # template instantiation - test -d out/ii_files && $rm out/ii_files/* && rmdir out/ii_files - $rm out/* && rmdir out - cd .. - rmdir conftest - $rm conftest* - -fi -{ echo "$as_me:$LINENO: result: $lt_cv_prog_compiler_c_o" >&5 -echo "${ECHO_T}$lt_cv_prog_compiler_c_o" >&6; } - - -hard_links="nottested" -if test "$lt_cv_prog_compiler_c_o" = no && test "$need_locks" != no; then - # do not overwrite the value of need_locks provided by the user - { echo "$as_me:$LINENO: checking if we can lock with hard links" >&5 -echo $ECHO_N "checking if we can lock with hard links... $ECHO_C" >&6; } - hard_links=yes - $rm conftest* - ln conftest.a conftest.b 2>/dev/null && hard_links=no - touch conftest.a - ln conftest.a conftest.b 2>&5 || hard_links=no - ln conftest.a conftest.b 2>/dev/null && hard_links=no - { echo "$as_me:$LINENO: result: $hard_links" >&5 -echo "${ECHO_T}$hard_links" >&6; } - if test "$hard_links" = no; then - { echo "$as_me:$LINENO: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&5 -echo "$as_me: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&2;} - need_locks=warn - fi -else - need_locks=no -fi - -{ echo "$as_me:$LINENO: checking whether the $compiler linker ($LD) supports shared libraries" >&5 -echo $ECHO_N "checking whether the $compiler linker ($LD) supports shared libraries... $ECHO_C" >&6; } - - runpath_var= - allow_undefined_flag= - enable_shared_with_static_runtimes=no - archive_cmds= - archive_expsym_cmds= - old_archive_From_new_cmds= - old_archive_from_expsyms_cmds= - export_dynamic_flag_spec= - whole_archive_flag_spec= - thread_safe_flag_spec= - hardcode_libdir_flag_spec= - hardcode_libdir_flag_spec_ld= - hardcode_libdir_separator= - hardcode_direct=no - hardcode_minus_L=no - hardcode_shlibpath_var=unsupported - link_all_deplibs=unknown - hardcode_automatic=no - module_cmds= - module_expsym_cmds= - always_export_symbols=no - export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' - # include_expsyms should be a list of space-separated symbols to be *always* - # included in the symbol list - include_expsyms= - # exclude_expsyms can be an extended regexp of symbols to exclude - # it will be wrapped by ` (' and `)$', so one must not match beginning or - # end of line. Example: `a|bc|.*d.*' will exclude the symbols `a' and `bc', - # as well as any symbol that contains `d'. - exclude_expsyms="_GLOBAL_OFFSET_TABLE_" - # Although _GLOBAL_OFFSET_TABLE_ is a valid symbol C name, most a.out - # platforms (ab)use it in PIC code, but their linkers get confused if - # the symbol is explicitly referenced. Since portable code cannot - # rely on this symbol name, it's probably fine to never include it in - # preloaded symbol tables. - extract_expsyms_cmds= - # Just being paranoid about ensuring that cc_basename is set. - for cc_temp in $compiler""; do - case $cc_temp in - compile | *[\\/]compile | ccache | *[\\/]ccache ) ;; - distcc | *[\\/]distcc | purify | *[\\/]purify ) ;; - \-*) ;; - *) break;; - esac -done -cc_basename=`$echo "X$cc_temp" | $Xsed -e 's%.*/%%' -e "s%^$host_alias-%%"` - - case $host_os in - cygwin* | mingw* | pw32*) - # FIXME: the MSVC++ port hasn't been tested in a loooong time - # When not using gcc, we currently assume that we are using - # Microsoft Visual C++. - if test "$GCC" != yes; then - with_gnu_ld=no - fi - ;; - interix*) - # we just hope/assume this is gcc and not c89 (= MSVC++) - with_gnu_ld=yes - ;; - openbsd*) - with_gnu_ld=no - ;; - esac - - ld_shlibs=yes - if test "$with_gnu_ld" = yes; then - # If archive_cmds runs LD, not CC, wlarc should be empty - wlarc='${wl}' - - # Set some defaults for GNU ld with shared library support. These - # are reset later if shared libraries are not supported. Putting them - # here allows them to be overridden if necessary. - runpath_var=LD_RUN_PATH - hardcode_libdir_flag_spec='${wl}--rpath ${wl}$libdir' - export_dynamic_flag_spec='${wl}--export-dynamic' - # ancient GNU ld didn't support --whole-archive et. al. - if $LD --help 2>&1 | grep 'no-whole-archive' > /dev/null; then - whole_archive_flag_spec="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' - else - whole_archive_flag_spec= - fi - supports_anon_versioning=no - case `$LD -v 2>/dev/null` in - *\ [01].* | *\ 2.[0-9].* | *\ 2.10.*) ;; # catch versions < 2.11 - *\ 2.11.93.0.2\ *) supports_anon_versioning=yes ;; # RH7.3 ... - *\ 2.11.92.0.12\ *) supports_anon_versioning=yes ;; # Mandrake 8.2 ... - *\ 2.11.*) ;; # other 2.11 versions - *) supports_anon_versioning=yes ;; - esac - - # See if GNU ld supports shared libraries. - case $host_os in - aix3* | aix4* | aix5*) - # On AIX/PPC, the GNU linker is very broken - if test "$host_cpu" != ia64; then - ld_shlibs=no - cat <&2 - -*** Warning: the GNU linker, at least up to release 2.9.1, is reported -*** to be unable to reliably create shared libraries on AIX. -*** Therefore, libtool is disabling shared libraries support. If you -*** really care for shared libraries, you may want to modify your PATH -*** so that a non-GNU linker is found, and then restart. - -EOF - fi - ;; - - amigaos*) - archive_cmds='$rm $output_objdir/a2ixlibrary.data~$echo "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$echo "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$echo "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$echo "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' - hardcode_libdir_flag_spec='-L$libdir' - hardcode_minus_L=yes - - # Samuel A. Falvo II reports - # that the semantics of dynamic libraries on AmigaOS, at least up - # to version 4, is to share data among multiple programs linked - # with the same dynamic library. Since this doesn't match the - # behavior of shared libraries on other platforms, we can't use - # them. - ld_shlibs=no - ;; - - beos*) - if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then - allow_undefined_flag=unsupported - # Joseph Beckenbach says some releases of gcc - # support --undefined. This deserves some investigation. FIXME - archive_cmds='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' - else - ld_shlibs=no - fi - ;; - - cygwin* | mingw* | pw32*) - # _LT_AC_TAGVAR(hardcode_libdir_flag_spec, ) is actually meaningless, - # as there is no search path for DLLs. - hardcode_libdir_flag_spec='-L$libdir' - allow_undefined_flag=unsupported - always_export_symbols=no - enable_shared_with_static_runtimes=yes - export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS][ ]/s/.*[ ]\([^ ]*\)/\1 DATA/'\'' -e '\''/^[AITW][ ]/s/.*[ ]//'\'' | sort | uniq > $export_symbols' - - if $LD --help 2>&1 | grep 'auto-import' > /dev/null; then - archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' - # If the export-symbols file already is a .def file (1st line - # is EXPORTS), use it as is; otherwise, prepend... - archive_expsym_cmds='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then - cp $export_symbols $output_objdir/$soname.def; - else - echo EXPORTS > $output_objdir/$soname.def; - cat $export_symbols >> $output_objdir/$soname.def; - fi~ - $CC -shared $output_objdir/$soname.def $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' - else - ld_shlibs=no - fi - ;; - - interix[3-9]*) - hardcode_direct=no - hardcode_shlibpath_var=no - hardcode_libdir_flag_spec='${wl}-rpath,$libdir' - export_dynamic_flag_spec='${wl}-E' - # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc. - # Instead, shared libraries are loaded at an image base (0x10000000 by - # default) and relocated if they conflict, which is a slow very memory - # consuming and fragmenting process. To avoid this, we pick a random, - # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link - # time. Moving up from 0x10000000 also allows more sbrk(2) space. - archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' - archive_expsym_cmds='sed "s,^,_," $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--retain-symbols-file,$output_objdir/$soname.expsym ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' - ;; - - gnu* | linux* | k*bsd*-gnu) - if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then - tmp_addflag= - case $cc_basename,$host_cpu in - pgcc*) # Portland Group C compiler - whole_archive_flag_spec='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $echo \"$new_convenience\"` ${wl}--no-whole-archive' - tmp_addflag=' $pic_flag' - ;; - pgf77* | pgf90* | pgf95*) # Portland Group f77 and f90 compilers - whole_archive_flag_spec='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $echo \"$new_convenience\"` ${wl}--no-whole-archive' - tmp_addflag=' $pic_flag -Mnomain' ;; - ecc*,ia64* | icc*,ia64*) # Intel C compiler on ia64 - tmp_addflag=' -i_dynamic' ;; - efc*,ia64* | ifort*,ia64*) # Intel Fortran compiler on ia64 - tmp_addflag=' -i_dynamic -nofor_main' ;; - ifc* | ifort*) # Intel Fortran compiler - tmp_addflag=' -nofor_main' ;; - esac - case `$CC -V 2>&1 | sed 5q` in - *Sun\ C*) # Sun C 5.9 - whole_archive_flag_spec='${wl}--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; $echo \"$new_convenience\"` ${wl}--no-whole-archive' - tmp_sharedflag='-G' ;; - *Sun\ F*) # Sun Fortran 8.3 - tmp_sharedflag='-G' ;; - *) - tmp_sharedflag='-shared' ;; - esac - archive_cmds='$CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' - - if test $supports_anon_versioning = yes; then - archive_expsym_cmds='$echo "{ global:" > $output_objdir/$libname.ver~ - cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ - $echo "local: *; };" >> $output_objdir/$libname.ver~ - $CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib' - fi - else - ld_shlibs=no - fi - ;; - - netbsd*) - if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then - archive_cmds='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib' - wlarc= - else - archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' - archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' - fi - ;; - - solaris*) - if $LD -v 2>&1 | grep 'BFD 2\.8' > /dev/null; then - ld_shlibs=no - cat <&2 - -*** Warning: The releases 2.8.* of the GNU linker cannot reliably -*** create shared libraries on Solaris systems. Therefore, libtool -*** is disabling shared libraries support. We urge you to upgrade GNU -*** binutils to release 2.9.1 or newer. Another option is to modify -*** your PATH or compiler configuration so that the native linker is -*** used, and then restart. - -EOF - elif $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then - archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' - archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' - else - ld_shlibs=no - fi - ;; - - sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX*) - case `$LD -v 2>&1` in - *\ [01].* | *\ 2.[0-9].* | *\ 2.1[0-5].*) - ld_shlibs=no - cat <<_LT_EOF 1>&2 - -*** Warning: Releases of the GNU linker prior to 2.16.91.0.3 can not -*** reliably create shared libraries on SCO systems. Therefore, libtool -*** is disabling shared libraries support. We urge you to upgrade GNU -*** binutils to release 2.16.91.0.3 or newer. Another option is to modify -*** your PATH or compiler configuration so that the native linker is -*** used, and then restart. - -_LT_EOF - ;; - *) - if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then - hardcode_libdir_flag_spec='`test -z "$SCOABSPATH" && echo ${wl}-rpath,$libdir`' - archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib' - archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname,\${SCOABSPATH:+${install_libdir}/}$soname,-retain-symbols-file,$export_symbols -o $lib' - else - ld_shlibs=no - fi - ;; - esac - ;; - - sunos4*) - archive_cmds='$LD -assert pure-text -Bshareable -o $lib $libobjs $deplibs $linker_flags' - wlarc= - hardcode_direct=yes - hardcode_shlibpath_var=no - ;; - - *) - if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then - archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' - archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' - else - ld_shlibs=no - fi - ;; - esac - - if test "$ld_shlibs" = no; then - runpath_var= - hardcode_libdir_flag_spec= - export_dynamic_flag_spec= - whole_archive_flag_spec= - fi - else - # PORTME fill in a description of your system's linker (not GNU ld) - case $host_os in - aix3*) - allow_undefined_flag=unsupported - always_export_symbols=yes - archive_expsym_cmds='$LD -o $output_objdir/$soname $libobjs $deplibs $linker_flags -bE:$export_symbols -T512 -H512 -bM:SRE~$AR $AR_FLAGS $lib $output_objdir/$soname' - # Note: this linker hardcodes the directories in LIBPATH if there - # are no directories specified by -L. - hardcode_minus_L=yes - if test "$GCC" = yes && test -z "$lt_prog_compiler_static"; then - # Neither direct hardcoding nor static linking is supported with a - # broken collect2. - hardcode_direct=unsupported - fi - ;; - - aix4* | aix5*) - if test "$host_cpu" = ia64; then - # On IA64, the linker does run time linking by default, so we don't - # have to do anything special. - aix_use_runtimelinking=no - exp_sym_flag='-Bexport' - no_entry_flag="" - else - # If we're using GNU nm, then we don't want the "-C" option. - # -C means demangle to AIX nm, but means don't demangle with GNU nm - if $NM -V 2>&1 | grep 'GNU' > /dev/null; then - export_symbols_cmds='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$2 == "T") || (\$2 == "D") || (\$2 == "B")) && (substr(\$3,1,1) != ".")) { print \$3 } }'\'' | sort -u > $export_symbols' - else - export_symbols_cmds='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$2 == "T") || (\$2 == "D") || (\$2 == "B")) && (substr(\$3,1,1) != ".")) { print \$3 } }'\'' | sort -u > $export_symbols' - fi - aix_use_runtimelinking=no - - # Test if we are trying to use run time linking or normal - # AIX style linking. If -brtl is somewhere in LDFLAGS, we - # need to do runtime linking. - case $host_os in aix4.[23]|aix4.[23].*|aix5*) - for ld_flag in $LDFLAGS; do - if (test $ld_flag = "-brtl" || test $ld_flag = "-Wl,-brtl"); then - aix_use_runtimelinking=yes - break - fi - done - ;; - esac - - exp_sym_flag='-bexport' - no_entry_flag='-bnoentry' - fi - - # When large executables or shared objects are built, AIX ld can - # have problems creating the table of contents. If linking a library - # or program results in "error TOC overflow" add -mminimal-toc to - # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not - # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS. - - archive_cmds='' - hardcode_direct=yes - hardcode_libdir_separator=':' - link_all_deplibs=yes - - if test "$GCC" = yes; then - case $host_os in aix4.[012]|aix4.[012].*) - # We only want to do this on AIX 4.2 and lower, the check - # below for broken collect2 doesn't work under 4.3+ - collect2name=`${CC} -print-prog-name=collect2` - if test -f "$collect2name" && \ - strings "$collect2name" | grep resolve_lib_name >/dev/null - then - # We have reworked collect2 - : - else - # We have old collect2 - hardcode_direct=unsupported - # It fails to find uninstalled libraries when the uninstalled - # path is not listed in the libpath. Setting hardcode_minus_L - # to unsupported forces relinking - hardcode_minus_L=yes - hardcode_libdir_flag_spec='-L$libdir' - hardcode_libdir_separator= - fi - ;; - esac - shared_flag='-shared' - if test "$aix_use_runtimelinking" = yes; then - shared_flag="$shared_flag "'${wl}-G' - fi - else - # not using gcc - if test "$host_cpu" = ia64; then - # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release - # chokes on -Wl,-G. The following line is correct: - shared_flag='-G' - else - if test "$aix_use_runtimelinking" = yes; then - shared_flag='${wl}-G' - else - shared_flag='${wl}-bM:SRE' - fi - fi - fi - - # It seems that -bexpall does not export symbols beginning with - # underscore (_), so it is better to generate a list of symbols to export. - always_export_symbols=yes - if test "$aix_use_runtimelinking" = yes; then - # Warning - without using the other runtime loading flags (-brtl), - # -berok will link without error, but may produce a broken library. - allow_undefined_flag='-berok' - # Determine the default libpath from the value encoded in an empty executable. - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ - -int -main () -{ - - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext conftest$ac_exeext -if { (ac_try="$ac_link" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_link") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest$ac_exeext && - $as_test_x conftest$ac_exeext; then - -lt_aix_libpath_sed=' - /Import File Strings/,/^$/ { - /^0/ { - s/^0 *\(.*\)$/\1/ - p - } - }' -aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` -# Check for a 64-bit object if we didn't find anything. -if test -z "$aix_libpath"; then - aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` -fi -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - -fi - -rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ - conftest$ac_exeext conftest.$ac_ext -if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi - - hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'"$aix_libpath" - archive_expsym_cmds="\$CC"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then echo "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag" - else - if test "$host_cpu" = ia64; then - hardcode_libdir_flag_spec='${wl}-R $libdir:/usr/lib:/lib' - allow_undefined_flag="-z nodefs" - archive_expsym_cmds="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$exp_sym_flag:\$export_symbols" - else - # Determine the default libpath from the value encoded in an empty executable. - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ - -int -main () -{ - - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext conftest$ac_exeext -if { (ac_try="$ac_link" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_link") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest$ac_exeext && - $as_test_x conftest$ac_exeext; then - -lt_aix_libpath_sed=' - /Import File Strings/,/^$/ { - /^0/ { - s/^0 *\(.*\)$/\1/ - p - } - }' -aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` -# Check for a 64-bit object if we didn't find anything. -if test -z "$aix_libpath"; then - aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` -fi -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - -fi - -rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ - conftest$ac_exeext conftest.$ac_ext -if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi - - hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'"$aix_libpath" - # Warning - without using the other run time loading flags, - # -berok will link without error, but may produce a broken library. - no_undefined_flag=' ${wl}-bernotok' - allow_undefined_flag=' ${wl}-berok' - # Exported symbols can be pulled into shared objects from archives - whole_archive_flag_spec='$convenience' - archive_cmds_need_lc=yes - # This is similar to how AIX traditionally builds its shared libraries. - archive_expsym_cmds="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs ${wl}-bnoentry $compiler_flags ${wl}-bE:$export_symbols${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname' - fi - fi - ;; - - amigaos*) - archive_cmds='$rm $output_objdir/a2ixlibrary.data~$echo "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$echo "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$echo "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$echo "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' - hardcode_libdir_flag_spec='-L$libdir' - hardcode_minus_L=yes - # see comment about different semantics on the GNU ld section - ld_shlibs=no - ;; - - bsdi[45]*) - export_dynamic_flag_spec=-rdynamic - ;; - - cygwin* | mingw* | pw32*) - # When not using gcc, we currently assume that we are using - # Microsoft Visual C++. - # hardcode_libdir_flag_spec is actually meaningless, as there is - # no search path for DLLs. - hardcode_libdir_flag_spec=' ' - allow_undefined_flag=unsupported - # Tell ltmain to make .lib files, not .a files. - libext=lib - # Tell ltmain to make .dll files, not .so files. - shrext_cmds=".dll" - # FIXME: Setting linknames here is a bad hack. - archive_cmds='$CC -o $lib $libobjs $compiler_flags `echo "$deplibs" | $SED -e '\''s/ -lc$//'\''` -link -dll~linknames=' - # The linker will automatically build a .lib file if we build a DLL. - old_archive_From_new_cmds='true' - # FIXME: Should let the user specify the lib program. - old_archive_cmds='lib -OUT:$oldlib$oldobjs$old_deplibs' - fix_srcfile_path='`cygpath -w "$srcfile"`' - enable_shared_with_static_runtimes=yes - ;; - - darwin* | rhapsody*) - case $host_os in - rhapsody* | darwin1.[012]) - allow_undefined_flag='${wl}-undefined ${wl}suppress' - ;; - *) # Darwin 1.3 on - if test -z ${MACOSX_DEPLOYMENT_TARGET} ; then - allow_undefined_flag='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' - else - case ${MACOSX_DEPLOYMENT_TARGET} in - 10.[012]) - allow_undefined_flag='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' - ;; - 10.*) - allow_undefined_flag='${wl}-undefined ${wl}dynamic_lookup' - ;; - esac - fi - ;; - esac - archive_cmds_need_lc=no - hardcode_direct=no - hardcode_automatic=yes - hardcode_shlibpath_var=unsupported - whole_archive_flag_spec='' - link_all_deplibs=yes - if test "$GCC" = yes ; then - output_verbose_link_cmd='echo' - archive_cmds='$CC -dynamiclib $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags -install_name $rpath/$soname $verstring' - module_cmds='$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags' - # Don't fix this by using the ld -exported_symbols_list flag, it doesn't exist in older darwin lds - archive_expsym_cmds='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -dynamiclib $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags -install_name $rpath/$soname $verstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' - module_expsym_cmds='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' - else - case $cc_basename in - xlc*) - output_verbose_link_cmd='echo' - archive_cmds='$CC -qmkshrobj $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-install_name ${wl}`echo $rpath/$soname` $xlcverstring' - module_cmds='$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags' - # Don't fix this by using the ld -exported_symbols_list flag, it doesn't exist in older darwin lds - archive_expsym_cmds='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -qmkshrobj $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-install_name ${wl}$rpath/$soname $xlcverstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' - module_expsym_cmds='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' - ;; - *) - ld_shlibs=no - ;; - esac - fi - ;; - - dgux*) - archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' - hardcode_libdir_flag_spec='-L$libdir' - hardcode_shlibpath_var=no - ;; - - freebsd1*) - ld_shlibs=no - ;; - - # FreeBSD 2.2.[012] allows us to include c++rt0.o to get C++ constructor - # support. Future versions do this automatically, but an explicit c++rt0.o - # does not break anything, and helps significantly (at the cost of a little - # extra space). - freebsd2.2*) - archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags /usr/lib/c++rt0.o' - hardcode_libdir_flag_spec='-R$libdir' - hardcode_direct=yes - hardcode_shlibpath_var=no - ;; - - # Unfortunately, older versions of FreeBSD 2 do not have this feature. - freebsd2*) - archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' - hardcode_direct=yes - hardcode_minus_L=yes - hardcode_shlibpath_var=no - ;; - - # FreeBSD 3 and greater uses gcc -shared to do shared libraries. - freebsd* | dragonfly*) - archive_cmds='$CC -shared -o $lib $libobjs $deplibs $compiler_flags' - hardcode_libdir_flag_spec='-R$libdir' - hardcode_direct=yes - hardcode_shlibpath_var=no - ;; - - hpux9*) - if test "$GCC" = yes; then - archive_cmds='$rm $output_objdir/$soname~$CC -shared -fPIC ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' - else - archive_cmds='$rm $output_objdir/$soname~$LD -b +b $install_libdir -o $output_objdir/$soname $libobjs $deplibs $linker_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' - fi - hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir' - hardcode_libdir_separator=: - hardcode_direct=yes - - # hardcode_minus_L: Not really in the search PATH, - # but as the default location of the library. - hardcode_minus_L=yes - export_dynamic_flag_spec='${wl}-E' - ;; - - hpux10*) - if test "$GCC" = yes -a "$with_gnu_ld" = no; then - archive_cmds='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' - else - archive_cmds='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags' - fi - if test "$with_gnu_ld" = no; then - hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir' - hardcode_libdir_separator=: - - hardcode_direct=yes - export_dynamic_flag_spec='${wl}-E' - - # hardcode_minus_L: Not really in the search PATH, - # but as the default location of the library. - hardcode_minus_L=yes - fi - ;; - - hpux11*) - if test "$GCC" = yes -a "$with_gnu_ld" = no; then - case $host_cpu in - hppa*64*) - archive_cmds='$CC -shared ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' - ;; - ia64*) - archive_cmds='$CC -shared ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' - ;; - *) - archive_cmds='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' - ;; - esac - else - case $host_cpu in - hppa*64*) - archive_cmds='$CC -b ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' - ;; - ia64*) - archive_cmds='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' - ;; - *) - archive_cmds='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' - ;; - esac - fi - if test "$with_gnu_ld" = no; then - hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir' - hardcode_libdir_separator=: - - case $host_cpu in - hppa*64*|ia64*) - hardcode_libdir_flag_spec_ld='+b $libdir' - hardcode_direct=no - hardcode_shlibpath_var=no - ;; - *) - hardcode_direct=yes - export_dynamic_flag_spec='${wl}-E' - - # hardcode_minus_L: Not really in the search PATH, - # but as the default location of the library. - hardcode_minus_L=yes - ;; - esac - fi - ;; - - irix5* | irix6* | nonstopux*) - if test "$GCC" = yes; then - archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' - else - archive_cmds='$LD -shared $libobjs $deplibs $linker_flags -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib' - hardcode_libdir_flag_spec_ld='-rpath $libdir' - fi - hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' - hardcode_libdir_separator=: - link_all_deplibs=yes - ;; - - netbsd*) - if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then - archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' # a.out - else - archive_cmds='$LD -shared -o $lib $libobjs $deplibs $linker_flags' # ELF - fi - hardcode_libdir_flag_spec='-R$libdir' - hardcode_direct=yes - hardcode_shlibpath_var=no - ;; - - newsos6) - archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' - hardcode_direct=yes - hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' - hardcode_libdir_separator=: - hardcode_shlibpath_var=no - ;; - - openbsd*) - if test -f /usr/libexec/ld.so; then - hardcode_direct=yes - hardcode_shlibpath_var=no - if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then - archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' - archive_expsym_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-retain-symbols-file,$export_symbols' - hardcode_libdir_flag_spec='${wl}-rpath,$libdir' - export_dynamic_flag_spec='${wl}-E' - else - case $host_os in - openbsd[01].* | openbsd2.[0-7] | openbsd2.[0-7].*) - archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' - hardcode_libdir_flag_spec='-R$libdir' - ;; - *) - archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' - hardcode_libdir_flag_spec='${wl}-rpath,$libdir' - ;; - esac - fi - else - ld_shlibs=no - fi - ;; - - os2*) - hardcode_libdir_flag_spec='-L$libdir' - hardcode_minus_L=yes - allow_undefined_flag=unsupported - archive_cmds='$echo "LIBRARY $libname INITINSTANCE" > $output_objdir/$libname.def~$echo "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~$echo DATA >> $output_objdir/$libname.def~$echo " SINGLE NONSHARED" >> $output_objdir/$libname.def~$echo EXPORTS >> $output_objdir/$libname.def~emxexp $libobjs >> $output_objdir/$libname.def~$CC -Zdll -Zcrtdll -o $lib $libobjs $deplibs $compiler_flags $output_objdir/$libname.def' - old_archive_From_new_cmds='emximp -o $output_objdir/$libname.a $output_objdir/$libname.def' - ;; - - osf3*) - if test "$GCC" = yes; then - allow_undefined_flag=' ${wl}-expect_unresolved ${wl}\*' - archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' - else - allow_undefined_flag=' -expect_unresolved \*' - archive_cmds='$LD -shared${allow_undefined_flag} $libobjs $deplibs $linker_flags -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib' - fi - hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' - hardcode_libdir_separator=: - ;; - - osf4* | osf5*) # as osf3* with the addition of -msym flag - if test "$GCC" = yes; then - allow_undefined_flag=' ${wl}-expect_unresolved ${wl}\*' - archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' - hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' - else - allow_undefined_flag=' -expect_unresolved \*' - archive_cmds='$LD -shared${allow_undefined_flag} $libobjs $deplibs $linker_flags -msym -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib' - archive_expsym_cmds='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done; echo "-hidden">> $lib.exp~ - $LD -shared${allow_undefined_flag} -input $lib.exp $linker_flags $libobjs $deplibs -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib~$rm $lib.exp' - - # Both c and cxx compiler support -rpath directly - hardcode_libdir_flag_spec='-rpath $libdir' - fi - hardcode_libdir_separator=: - ;; - - solaris*) - no_undefined_flag=' -z text' - if test "$GCC" = yes; then - wlarc='${wl}' - archive_cmds='$CC -shared ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' - archive_expsym_cmds='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~ - $CC -shared ${wl}-M ${wl}$lib.exp ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags~$rm $lib.exp' - else - wlarc='' - archive_cmds='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linker_flags' - archive_expsym_cmds='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~ - $LD -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$rm $lib.exp' - fi - hardcode_libdir_flag_spec='-R$libdir' - hardcode_shlibpath_var=no - case $host_os in - solaris2.[0-5] | solaris2.[0-5].*) ;; - *) - # The compiler driver will combine and reorder linker options, - # but understands `-z linker_flag'. GCC discards it without `$wl', - # but is careful enough not to reorder. - # Supported since Solaris 2.6 (maybe 2.5.1?) - if test "$GCC" = yes; then - whole_archive_flag_spec='${wl}-z ${wl}allextract$convenience ${wl}-z ${wl}defaultextract' - else - whole_archive_flag_spec='-z allextract$convenience -z defaultextract' - fi - ;; - esac - link_all_deplibs=yes - ;; - - sunos4*) - if test "x$host_vendor" = xsequent; then - # Use $CC to link under sequent, because it throws in some extra .o - # files that make .init and .fini sections work. - archive_cmds='$CC -G ${wl}-h $soname -o $lib $libobjs $deplibs $compiler_flags' - else - archive_cmds='$LD -assert pure-text -Bstatic -o $lib $libobjs $deplibs $linker_flags' - fi - hardcode_libdir_flag_spec='-L$libdir' - hardcode_direct=yes - hardcode_minus_L=yes - hardcode_shlibpath_var=no - ;; - - sysv4) - case $host_vendor in - sni) - archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' - hardcode_direct=yes # is this really true??? - ;; - siemens) - ## LD is ld it makes a PLAMLIB - ## CC just makes a GrossModule. - archive_cmds='$LD -G -o $lib $libobjs $deplibs $linker_flags' - reload_cmds='$CC -r -o $output$reload_objs' - hardcode_direct=no - ;; - motorola) - archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' - hardcode_direct=no #Motorola manual says yes, but my tests say they lie - ;; - esac - runpath_var='LD_RUN_PATH' - hardcode_shlibpath_var=no - ;; - - sysv4.3*) - archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' - hardcode_shlibpath_var=no - export_dynamic_flag_spec='-Bexport' - ;; - - sysv4*MP*) - if test -d /usr/nec; then - archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' - hardcode_shlibpath_var=no - runpath_var=LD_RUN_PATH - hardcode_runpath_var=yes - ld_shlibs=yes - fi - ;; - - sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[01].[10]* | unixware7* | sco3.2v5.0.[024]*) - no_undefined_flag='${wl}-z,text' - archive_cmds_need_lc=no - hardcode_shlibpath_var=no - runpath_var='LD_RUN_PATH' - - if test "$GCC" = yes; then - archive_cmds='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - archive_expsym_cmds='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - else - archive_cmds='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - archive_expsym_cmds='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - fi - ;; - - sysv5* | sco3.2v5* | sco5v6*) - # Note: We can NOT use -z defs as we might desire, because we do not - # link with -lc, and that would cause any symbols used from libc to - # always be unresolved, which means just about no library would - # ever link correctly. If we're not using GNU ld we use -z text - # though, which does catch some bad symbols but isn't as heavy-handed - # as -z defs. - no_undefined_flag='${wl}-z,text' - allow_undefined_flag='${wl}-z,nodefs' - archive_cmds_need_lc=no - hardcode_shlibpath_var=no - hardcode_libdir_flag_spec='`test -z "$SCOABSPATH" && echo ${wl}-R,$libdir`' - hardcode_libdir_separator=':' - link_all_deplibs=yes - export_dynamic_flag_spec='${wl}-Bexport' - runpath_var='LD_RUN_PATH' - - if test "$GCC" = yes; then - archive_cmds='$CC -shared ${wl}-h,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags' - archive_expsym_cmds='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags' - else - archive_cmds='$CC -G ${wl}-h,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags' - archive_expsym_cmds='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags' - fi - ;; - - uts4*) - archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' - hardcode_libdir_flag_spec='-L$libdir' - hardcode_shlibpath_var=no - ;; - - *) - ld_shlibs=no - ;; - esac - fi - -{ echo "$as_me:$LINENO: result: $ld_shlibs" >&5 -echo "${ECHO_T}$ld_shlibs" >&6; } -test "$ld_shlibs" = no && can_build_shared=no - -# -# Do we need to explicitly link libc? -# -case "x$archive_cmds_need_lc" in -x|xyes) - # Assume -lc should be added - archive_cmds_need_lc=yes - - if test "$enable_shared" = yes && test "$GCC" = yes; then - case $archive_cmds in - *'~'*) - # FIXME: we may have to deal with multi-command sequences. - ;; - '$CC '*) - # Test whether the compiler implicitly links with -lc since on some - # systems, -lgcc has to come before -lc. If gcc already passes -lc - # to ld, don't add -lc before -lgcc. - { echo "$as_me:$LINENO: checking whether -lc should be explicitly linked in" >&5 -echo $ECHO_N "checking whether -lc should be explicitly linked in... $ECHO_C" >&6; } - $rm conftest* - echo "$lt_simple_compile_test_code" > conftest.$ac_ext - - if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } 2>conftest.err; then - soname=conftest - lib=conftest - libobjs=conftest.$ac_objext - deplibs= - wl=$lt_prog_compiler_wl - pic_flag=$lt_prog_compiler_pic - compiler_flags=-v - linker_flags=-v - verstring= - output_objdir=. - libname=conftest - lt_save_allow_undefined_flag=$allow_undefined_flag - allow_undefined_flag= - if { (eval echo "$as_me:$LINENO: \"$archive_cmds 2\>\&1 \| grep \" -lc \" \>/dev/null 2\>\&1\"") >&5 - (eval $archive_cmds 2\>\&1 \| grep \" -lc \" \>/dev/null 2\>\&1) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } - then - archive_cmds_need_lc=no - else - archive_cmds_need_lc=yes - fi - allow_undefined_flag=$lt_save_allow_undefined_flag - else - cat conftest.err 1>&5 - fi - $rm conftest* - { echo "$as_me:$LINENO: result: $archive_cmds_need_lc" >&5 -echo "${ECHO_T}$archive_cmds_need_lc" >&6; } - ;; - esac - fi - ;; -esac - -{ echo "$as_me:$LINENO: checking dynamic linker characteristics" >&5 -echo $ECHO_N "checking dynamic linker characteristics... $ECHO_C" >&6; } -library_names_spec= -libname_spec='lib$name' -soname_spec= -shrext_cmds=".so" -postinstall_cmds= -postuninstall_cmds= -finish_cmds= -finish_eval= -shlibpath_var= -shlibpath_overrides_runpath=unknown -version_type=none -dynamic_linker="$host_os ld.so" -sys_lib_dlsearch_path_spec="/lib /usr/lib" - -if test "$GCC" = yes; then - case $host_os in - darwin*) lt_awk_arg="/^libraries:/,/LR/" ;; - *) lt_awk_arg="/^libraries:/" ;; - esac - lt_search_path_spec=`$CC -print-search-dirs | awk $lt_awk_arg | $SED -e "s/^libraries://" -e "s,=/,/,g"` - if echo "$lt_search_path_spec" | grep ';' >/dev/null ; then - # if the path contains ";" then we assume it to be the separator - # otherwise default to the standard path separator (i.e. ":") - it is - # assumed that no part of a normal pathname contains ";" but that should - # okay in the real world where ";" in dirpaths is itself problematic. - lt_search_path_spec=`echo "$lt_search_path_spec" | $SED -e 's/;/ /g'` - else - lt_search_path_spec=`echo "$lt_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` - fi - # Ok, now we have the path, separated by spaces, we can step through it - # and add multilib dir if necessary. - lt_tmp_lt_search_path_spec= - lt_multi_os_dir=`$CC $CPPFLAGS $CFLAGS $LDFLAGS -print-multi-os-directory 2>/dev/null` - for lt_sys_path in $lt_search_path_spec; do - if test -d "$lt_sys_path/$lt_multi_os_dir"; then - lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path/$lt_multi_os_dir" - else - test -d "$lt_sys_path" && \ - lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path" - fi - done - lt_search_path_spec=`echo $lt_tmp_lt_search_path_spec | awk ' -BEGIN {RS=" "; FS="/|\n";} { - lt_foo=""; - lt_count=0; - for (lt_i = NF; lt_i > 0; lt_i--) { - if ($lt_i != "" && $lt_i != ".") { - if ($lt_i == "..") { - lt_count++; - } else { - if (lt_count == 0) { - lt_foo="/" $lt_i lt_foo; - } else { - lt_count--; - } - } - } - } - if (lt_foo != "") { lt_freq[lt_foo]++; } - if (lt_freq[lt_foo] == 1) { print lt_foo; } -}'` - sys_lib_search_path_spec=`echo $lt_search_path_spec` -else - sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib" -fi -need_lib_prefix=unknown -hardcode_into_libs=no - -# when you set need_version to no, make sure it does not cause -set_version -# flags to be left without arguments -need_version=unknown - -case $host_os in -aix3*) - version_type=linux - library_names_spec='${libname}${release}${shared_ext}$versuffix $libname.a' - shlibpath_var=LIBPATH - - # AIX 3 has no versioning support, so we append a major version to the name. - soname_spec='${libname}${release}${shared_ext}$major' - ;; - -aix4* | aix5*) - version_type=linux - need_lib_prefix=no - need_version=no - hardcode_into_libs=yes - if test "$host_cpu" = ia64; then - # AIX 5 supports IA64 - library_names_spec='${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext}$versuffix $libname${shared_ext}' - shlibpath_var=LD_LIBRARY_PATH - else - # With GCC up to 2.95.x, collect2 would create an import file - # for dependence libraries. The import file would start with - # the line `#! .'. This would cause the generated library to - # depend on `.', always an invalid library. This was fixed in - # development snapshots of GCC prior to 3.0. - case $host_os in - aix4 | aix4.[01] | aix4.[01].*) - if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)' - echo ' yes ' - echo '#endif'; } | ${CC} -E - | grep yes > /dev/null; then - : - else - can_build_shared=no - fi - ;; - esac - # AIX (on Power*) has no versioning support, so currently we can not hardcode correct - # soname into executable. Probably we can add versioning support to - # collect2, so additional links can be useful in future. - if test "$aix_use_runtimelinking" = yes; then - # If using run time linking (on AIX 4.2 or later) use lib.so - # instead of lib.a to let people know that these are not - # typical AIX shared libraries. - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - else - # We preserve .a as extension for shared libraries through AIX4.2 - # and later when we are not doing run time linking. - library_names_spec='${libname}${release}.a $libname.a' - soname_spec='${libname}${release}${shared_ext}$major' - fi - shlibpath_var=LIBPATH - fi - ;; - -amigaos*) - library_names_spec='$libname.ixlibrary $libname.a' - # Create ${libname}_ixlibrary.a entries in /sys/libs. - finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`$echo "X$lib" | $Xsed -e '\''s%^.*/\([^/]*\)\.ixlibrary$%\1%'\''`; test $rm /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done' - ;; - -beos*) - library_names_spec='${libname}${shared_ext}' - dynamic_linker="$host_os ld.so" - shlibpath_var=LIBRARY_PATH - ;; - -bsdi[45]*) - version_type=linux - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir' - shlibpath_var=LD_LIBRARY_PATH - sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib" - sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib" - # the default ld.so.conf also contains /usr/contrib/lib and - # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow - # libtool to hard-code these into programs - ;; - -cygwin* | mingw* | pw32*) - version_type=windows - shrext_cmds=".dll" - need_version=no - need_lib_prefix=no - - case $GCC,$host_os in - yes,cygwin* | yes,mingw* | yes,pw32*) - library_names_spec='$libname.dll.a' - # DLL is installed to $(libdir)/../bin by postinstall_cmds - postinstall_cmds='base_file=`basename \${file}`~ - dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i;echo \$dlname'\''`~ - dldir=$destdir/`dirname \$dlpath`~ - test -d \$dldir || mkdir -p \$dldir~ - $install_prog $dir/$dlname \$dldir/$dlname~ - chmod a+x \$dldir/$dlname' - postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ - dlpath=$dir/\$dldll~ - $rm \$dlpath' - shlibpath_overrides_runpath=yes - - case $host_os in - cygwin*) - # Cygwin DLLs use 'cyg' prefix rather than 'lib' - soname_spec='`echo ${libname} | sed -e 's/^lib/cyg/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' - sys_lib_search_path_spec="/usr/lib /lib/w32api /lib /usr/local/lib" - ;; - mingw*) - # MinGW DLLs use traditional 'lib' prefix - soname_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' - sys_lib_search_path_spec=`$CC -print-search-dirs | grep "^libraries:" | $SED -e "s/^libraries://" -e "s,=/,/,g"` - if echo "$sys_lib_search_path_spec" | grep ';[c-zC-Z]:/' >/dev/null; then - # It is most probably a Windows format PATH printed by - # mingw gcc, but we are running on Cygwin. Gcc prints its search - # path with ; separators, and with drive letters. We can handle the - # drive letters (cygwin fileutils understands them), so leave them, - # especially as we might pass files found there to a mingw objdump, - # which wouldn't understand a cygwinified path. Ahh. - sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'` - else - sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` - fi - ;; - pw32*) - # pw32 DLLs use 'pw' prefix rather than 'lib' - library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' - ;; - esac - ;; - - *) - library_names_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext} $libname.lib' - ;; - esac - dynamic_linker='Win32 ld.exe' - # FIXME: first we should search . and the directory the executable is in - shlibpath_var=PATH - ;; - -darwin* | rhapsody*) - dynamic_linker="$host_os dyld" - version_type=darwin - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${versuffix}$shared_ext ${libname}${release}${major}$shared_ext ${libname}$shared_ext' - soname_spec='${libname}${release}${major}$shared_ext' - shlibpath_overrides_runpath=yes - shlibpath_var=DYLD_LIBRARY_PATH - shrext_cmds='`test .$module = .yes && echo .so || echo .dylib`' - - sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/local/lib" - sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib' - ;; - -dgux*) - version_type=linux - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname$shared_ext' - soname_spec='${libname}${release}${shared_ext}$major' - shlibpath_var=LD_LIBRARY_PATH - ;; - -freebsd1*) - dynamic_linker=no - ;; - -freebsd* | dragonfly*) - # DragonFly does not have aout. When/if they implement a new - # versioning mechanism, adjust this. - if test -x /usr/bin/objformat; then - objformat=`/usr/bin/objformat` - else - case $host_os in - freebsd[123]*) objformat=aout ;; - *) objformat=elf ;; - esac - fi - version_type=freebsd-$objformat - case $version_type in - freebsd-elf*) - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' - need_version=no - need_lib_prefix=no - ;; - freebsd-*) - library_names_spec='${libname}${release}${shared_ext}$versuffix $libname${shared_ext}$versuffix' - need_version=yes - ;; - esac - shlibpath_var=LD_LIBRARY_PATH - case $host_os in - freebsd2*) - shlibpath_overrides_runpath=yes - ;; - freebsd3.[01]* | freebsdelf3.[01]*) - shlibpath_overrides_runpath=yes - hardcode_into_libs=yes - ;; - freebsd3.[2-9]* | freebsdelf3.[2-9]* | \ - freebsd4.[0-5] | freebsdelf4.[0-5] | freebsd4.1.1 | freebsdelf4.1.1) - shlibpath_overrides_runpath=no - hardcode_into_libs=yes - ;; - *) # from 4.6 on, and DragonFly - shlibpath_overrides_runpath=yes - hardcode_into_libs=yes - ;; - esac - ;; - -gnu*) - version_type=linux - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - shlibpath_var=LD_LIBRARY_PATH - hardcode_into_libs=yes - ;; - -hpux9* | hpux10* | hpux11*) - # Give a soname corresponding to the major version so that dld.sl refuses to - # link against other versions. - version_type=sunos - need_lib_prefix=no - need_version=no - case $host_cpu in - ia64*) - shrext_cmds='.so' - hardcode_into_libs=yes - dynamic_linker="$host_os dld.so" - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - if test "X$HPUX_IA64_MODE" = X32; then - sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib" - else - sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64" - fi - sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec - ;; - hppa*64*) - shrext_cmds='.sl' - hardcode_into_libs=yes - dynamic_linker="$host_os dld.sl" - shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH - shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64" - sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec - ;; - *) - shrext_cmds='.sl' - dynamic_linker="$host_os dld.sl" - shlibpath_var=SHLIB_PATH - shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - ;; - esac - # HP-UX runs *really* slowly unless shared libraries are mode 555. - postinstall_cmds='chmod 555 $lib' - ;; - -interix[3-9]*) - version_type=linux - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - dynamic_linker='Interix 3.x ld.so.1 (PE, like ELF)' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=no - hardcode_into_libs=yes - ;; - -irix5* | irix6* | nonstopux*) - case $host_os in - nonstopux*) version_type=nonstopux ;; - *) - if test "$lt_cv_prog_gnu_ld" = yes; then - version_type=linux - else - version_type=irix - fi ;; - esac - need_lib_prefix=no - need_version=no - soname_spec='${libname}${release}${shared_ext}$major' - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext} $libname${shared_ext}' - case $host_os in - irix5* | nonstopux*) - libsuff= shlibsuff= - ;; - *) - case $LD in # libtool.m4 will add one of these switches to LD - *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ") - libsuff= shlibsuff= libmagic=32-bit;; - *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ") - libsuff=32 shlibsuff=N32 libmagic=N32;; - *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ") - libsuff=64 shlibsuff=64 libmagic=64-bit;; - *) libsuff= shlibsuff= libmagic=never-match;; - esac - ;; - esac - shlibpath_var=LD_LIBRARY${shlibsuff}_PATH - shlibpath_overrides_runpath=no - sys_lib_search_path_spec="/usr/lib${libsuff} /lib${libsuff} /usr/local/lib${libsuff}" - sys_lib_dlsearch_path_spec="/usr/lib${libsuff} /lib${libsuff}" - hardcode_into_libs=yes - ;; - -# No shared lib support for Linux oldld, aout, or coff. -linux*oldld* | linux*aout* | linux*coff*) - dynamic_linker=no - ;; - -# This must be Linux ELF. -linux* | k*bsd*-gnu) - version_type=linux - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=no - # This implies no fast_install, which is unacceptable. - # Some rework will be needed to allow for fast_install - # before this can be enabled. - hardcode_into_libs=yes - sys_lib_search_path_spec="/usr/lib${libsuff} /lib${libsuff} /usr/local/lib${libsuff}" - sys_lib_dlsearch_path_spec="/usr/lib${libsuff} /lib${libsuff}" - - # Append ld.so.conf contents to the search path - if test -f /etc/ld.so.conf; then - lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s 2>/dev/null", \$2)); skip = 1; } { if (!skip) print \$0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;/^[ ]*hwcap[ ]/d;s/[:, ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;/^$/d' | tr '\n' ' '` - sys_lib_dlsearch_path_spec="$sys_lib_dlsearch_path_spec $lt_ld_extra" - fi - - # We used to test for /lib/ld.so.1 and disable shared libraries on - # powerpc, because MkLinux only supported shared libraries with the - # GNU dynamic linker. Since this was broken with cross compilers, - # most powerpc-linux boxes support dynamic linking these days and - # people can always --disable-shared, the test was removed, and we - # assume the GNU/Linux dynamic linker is in use. - dynamic_linker='GNU/Linux ld.so' - ;; - -netbsd*) - version_type=sunos - need_lib_prefix=no - need_version=no - if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' - finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' - dynamic_linker='NetBSD (a.out) ld.so' - else - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - dynamic_linker='NetBSD ld.elf_so' - fi - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=yes - hardcode_into_libs=yes - ;; - -newsos6) - version_type=linux - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=yes - ;; - -nto-qnx*) - version_type=linux - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=yes - ;; - -openbsd*) - version_type=sunos - sys_lib_dlsearch_path_spec="/usr/lib" - need_lib_prefix=no - # Some older versions of OpenBSD (3.3 at least) *do* need versioned libs. - case $host_os in - openbsd3.3 | openbsd3.3.*) need_version=yes ;; - *) need_version=no ;; - esac - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' - finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' - shlibpath_var=LD_LIBRARY_PATH - if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then - case $host_os in - openbsd2.[89] | openbsd2.[89].*) - shlibpath_overrides_runpath=no - ;; - *) - shlibpath_overrides_runpath=yes - ;; - esac - else - shlibpath_overrides_runpath=yes - fi - ;; - -os2*) - libname_spec='$name' - shrext_cmds=".dll" - need_lib_prefix=no - library_names_spec='$libname${shared_ext} $libname.a' - dynamic_linker='OS/2 ld.exe' - shlibpath_var=LIBPATH - ;; - -osf3* | osf4* | osf5*) - version_type=osf - need_lib_prefix=no - need_version=no - soname_spec='${libname}${release}${shared_ext}$major' - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - shlibpath_var=LD_LIBRARY_PATH - sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib" - sys_lib_dlsearch_path_spec="$sys_lib_search_path_spec" - ;; - -rdos*) - dynamic_linker=no - ;; - -solaris*) - version_type=linux - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=yes - hardcode_into_libs=yes - # ldd complains unless libraries are executable - postinstall_cmds='chmod +x $lib' - ;; - -sunos4*) - version_type=sunos - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' - finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=yes - if test "$with_gnu_ld" = yes; then - need_lib_prefix=no - fi - need_version=yes - ;; - -sysv4 | sysv4.3*) - version_type=linux - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - shlibpath_var=LD_LIBRARY_PATH - case $host_vendor in - sni) - shlibpath_overrides_runpath=no - need_lib_prefix=no - export_dynamic_flag_spec='${wl}-Blargedynsym' - runpath_var=LD_RUN_PATH - ;; - siemens) - need_lib_prefix=no - ;; - motorola) - need_lib_prefix=no - need_version=no - shlibpath_overrides_runpath=no - sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib' - ;; - esac - ;; - -sysv4*MP*) - if test -d /usr/nec ;then - version_type=linux - library_names_spec='$libname${shared_ext}.$versuffix $libname${shared_ext}.$major $libname${shared_ext}' - soname_spec='$libname${shared_ext}.$major' - shlibpath_var=LD_LIBRARY_PATH - fi - ;; - -sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) - version_type=freebsd-elf - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - shlibpath_var=LD_LIBRARY_PATH - hardcode_into_libs=yes - if test "$with_gnu_ld" = yes; then - sys_lib_search_path_spec='/usr/local/lib /usr/gnu/lib /usr/ccs/lib /usr/lib /lib' - shlibpath_overrides_runpath=no - else - sys_lib_search_path_spec='/usr/ccs/lib /usr/lib' - shlibpath_overrides_runpath=yes - case $host_os in - sco3.2v5*) - sys_lib_search_path_spec="$sys_lib_search_path_spec /lib" - ;; - esac - fi - sys_lib_dlsearch_path_spec='/usr/lib' - ;; - -uts4*) - version_type=linux - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - shlibpath_var=LD_LIBRARY_PATH - ;; - -*) - dynamic_linker=no - ;; -esac -{ echo "$as_me:$LINENO: result: $dynamic_linker" >&5 -echo "${ECHO_T}$dynamic_linker" >&6; } -test "$dynamic_linker" = no && can_build_shared=no - -variables_saved_for_relink="PATH $shlibpath_var $runpath_var" -if test "$GCC" = yes; then - variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH" -fi - -{ echo "$as_me:$LINENO: checking how to hardcode library paths into programs" >&5 -echo $ECHO_N "checking how to hardcode library paths into programs... $ECHO_C" >&6; } -hardcode_action= -if test -n "$hardcode_libdir_flag_spec" || \ - test -n "$runpath_var" || \ - test "X$hardcode_automatic" = "Xyes" ; then - - # We can hardcode non-existent directories. - if test "$hardcode_direct" != no && - # If the only mechanism to avoid hardcoding is shlibpath_var, we - # have to relink, otherwise we might link with an installed library - # when we should be linking with a yet-to-be-installed one - ## test "$_LT_AC_TAGVAR(hardcode_shlibpath_var, )" != no && - test "$hardcode_minus_L" != no; then - # Linking always hardcodes the temporary library directory. - hardcode_action=relink - else - # We can link without hardcoding, and we can hardcode nonexisting dirs. - hardcode_action=immediate - fi -else - # We cannot hardcode anything, or else we can only hardcode existing - # directories. - hardcode_action=unsupported -fi -{ echo "$as_me:$LINENO: result: $hardcode_action" >&5 -echo "${ECHO_T}$hardcode_action" >&6; } - -if test "$hardcode_action" = relink; then - # Fast installation is not supported - enable_fast_install=no -elif test "$shlibpath_overrides_runpath" = yes || - test "$enable_shared" = no; then - # Fast installation is not necessary - enable_fast_install=needless -fi - -striplib= -old_striplib= -{ echo "$as_me:$LINENO: checking whether stripping libraries is possible" >&5 -echo $ECHO_N "checking whether stripping libraries is possible... $ECHO_C" >&6; } -if test -n "$STRIP" && $STRIP -V 2>&1 | grep "GNU strip" >/dev/null; then - test -z "$old_striplib" && old_striplib="$STRIP --strip-debug" - test -z "$striplib" && striplib="$STRIP --strip-unneeded" - { echo "$as_me:$LINENO: result: yes" >&5 -echo "${ECHO_T}yes" >&6; } -else -# FIXME - insert some real tests, host_os isn't really good enough - case $host_os in - darwin*) - if test -n "$STRIP" ; then - striplib="$STRIP -x" - old_striplib="$STRIP -S" - { echo "$as_me:$LINENO: result: yes" >&5 -echo "${ECHO_T}yes" >&6; } - else - { echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6; } -fi - ;; - *) - { echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6; } - ;; - esac -fi - -if test "x$enable_dlopen" != xyes; then - enable_dlopen=unknown - enable_dlopen_self=unknown - enable_dlopen_self_static=unknown -else - lt_cv_dlopen=no - lt_cv_dlopen_libs= - - case $host_os in - beos*) - lt_cv_dlopen="load_add_on" - lt_cv_dlopen_libs= - lt_cv_dlopen_self=yes - ;; - - mingw* | pw32*) - lt_cv_dlopen="LoadLibrary" - lt_cv_dlopen_libs= - ;; - - cygwin*) - lt_cv_dlopen="dlopen" - lt_cv_dlopen_libs= - ;; - - darwin*) - # if libdl is installed we need to link against it - { echo "$as_me:$LINENO: checking for dlopen in -ldl" >&5 -echo $ECHO_N "checking for dlopen in -ldl... $ECHO_C" >&6; } -if test "${ac_cv_lib_dl_dlopen+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - ac_check_lib_save_LIBS=$LIBS -LIBS="-ldl $LIBS" -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ - -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char dlopen (); -int -main () -{ -return dlopen (); - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext conftest$ac_exeext -if { (ac_try="$ac_link" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_link") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest$ac_exeext && - $as_test_x conftest$ac_exeext; then - ac_cv_lib_dl_dlopen=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_cv_lib_dl_dlopen=no -fi - -rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ - conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS -fi -{ echo "$as_me:$LINENO: result: $ac_cv_lib_dl_dlopen" >&5 -echo "${ECHO_T}$ac_cv_lib_dl_dlopen" >&6; } -if test $ac_cv_lib_dl_dlopen = yes; then - lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl" -else - - lt_cv_dlopen="dyld" - lt_cv_dlopen_libs= - lt_cv_dlopen_self=yes - -fi - - ;; - - *) - { echo "$as_me:$LINENO: checking for shl_load" >&5 -echo $ECHO_N "checking for shl_load... $ECHO_C" >&6; } -if test "${ac_cv_func_shl_load+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -/* Define shl_load to an innocuous variant, in case declares shl_load. - For example, HP-UX 11i declares gettimeofday. */ -#define shl_load innocuous_shl_load - -/* System header to define __stub macros and hopefully few prototypes, - which can conflict with char shl_load (); below. - Prefer to if __STDC__ is defined, since - exists even on freestanding compilers. */ - -#ifdef __STDC__ -# include -#else -# include -#endif - -#undef shl_load - -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char shl_load (); -/* The GNU C library defines this for functions which it implements - to always fail with ENOSYS. Some functions are actually named - something starting with __ and the normal name is an alias. */ -#if defined __stub_shl_load || defined __stub___shl_load -choke me -#endif - -int -main () -{ -return shl_load (); - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext conftest$ac_exeext -if { (ac_try="$ac_link" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_link") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest$ac_exeext && - $as_test_x conftest$ac_exeext; then - ac_cv_func_shl_load=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_cv_func_shl_load=no -fi - -rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ - conftest$ac_exeext conftest.$ac_ext -fi -{ echo "$as_me:$LINENO: result: $ac_cv_func_shl_load" >&5 -echo "${ECHO_T}$ac_cv_func_shl_load" >&6; } -if test $ac_cv_func_shl_load = yes; then - lt_cv_dlopen="shl_load" -else - { echo "$as_me:$LINENO: checking for shl_load in -ldld" >&5 -echo $ECHO_N "checking for shl_load in -ldld... $ECHO_C" >&6; } -if test "${ac_cv_lib_dld_shl_load+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - ac_check_lib_save_LIBS=$LIBS -LIBS="-ldld $LIBS" -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ - -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char shl_load (); -int -main () -{ -return shl_load (); - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext conftest$ac_exeext -if { (ac_try="$ac_link" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_link") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest$ac_exeext && - $as_test_x conftest$ac_exeext; then - ac_cv_lib_dld_shl_load=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_cv_lib_dld_shl_load=no -fi - -rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ - conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS -fi -{ echo "$as_me:$LINENO: result: $ac_cv_lib_dld_shl_load" >&5 -echo "${ECHO_T}$ac_cv_lib_dld_shl_load" >&6; } -if test $ac_cv_lib_dld_shl_load = yes; then - lt_cv_dlopen="shl_load" lt_cv_dlopen_libs="-dld" -else - { echo "$as_me:$LINENO: checking for dlopen" >&5 -echo $ECHO_N "checking for dlopen... $ECHO_C" >&6; } -if test "${ac_cv_func_dlopen+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -/* Define dlopen to an innocuous variant, in case declares dlopen. - For example, HP-UX 11i declares gettimeofday. */ -#define dlopen innocuous_dlopen - -/* System header to define __stub macros and hopefully few prototypes, - which can conflict with char dlopen (); below. - Prefer to if __STDC__ is defined, since - exists even on freestanding compilers. */ - -#ifdef __STDC__ -# include -#else -# include -#endif - -#undef dlopen - -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char dlopen (); -/* The GNU C library defines this for functions which it implements - to always fail with ENOSYS. Some functions are actually named - something starting with __ and the normal name is an alias. */ -#if defined __stub_dlopen || defined __stub___dlopen -choke me -#endif - -int -main () -{ -return dlopen (); - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext conftest$ac_exeext -if { (ac_try="$ac_link" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_link") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest$ac_exeext && - $as_test_x conftest$ac_exeext; then - ac_cv_func_dlopen=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_cv_func_dlopen=no -fi - -rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ - conftest$ac_exeext conftest.$ac_ext -fi -{ echo "$as_me:$LINENO: result: $ac_cv_func_dlopen" >&5 -echo "${ECHO_T}$ac_cv_func_dlopen" >&6; } -if test $ac_cv_func_dlopen = yes; then - lt_cv_dlopen="dlopen" -else - { echo "$as_me:$LINENO: checking for dlopen in -ldl" >&5 -echo $ECHO_N "checking for dlopen in -ldl... $ECHO_C" >&6; } -if test "${ac_cv_lib_dl_dlopen+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - ac_check_lib_save_LIBS=$LIBS -LIBS="-ldl $LIBS" -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ - -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char dlopen (); -int -main () -{ -return dlopen (); - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext conftest$ac_exeext -if { (ac_try="$ac_link" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_link") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest$ac_exeext && - $as_test_x conftest$ac_exeext; then - ac_cv_lib_dl_dlopen=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_cv_lib_dl_dlopen=no -fi - -rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ - conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS -fi -{ echo "$as_me:$LINENO: result: $ac_cv_lib_dl_dlopen" >&5 -echo "${ECHO_T}$ac_cv_lib_dl_dlopen" >&6; } -if test $ac_cv_lib_dl_dlopen = yes; then - lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl" -else - { echo "$as_me:$LINENO: checking for dlopen in -lsvld" >&5 -echo $ECHO_N "checking for dlopen in -lsvld... $ECHO_C" >&6; } -if test "${ac_cv_lib_svld_dlopen+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - ac_check_lib_save_LIBS=$LIBS -LIBS="-lsvld $LIBS" -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ - -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char dlopen (); -int -main () -{ -return dlopen (); - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext conftest$ac_exeext -if { (ac_try="$ac_link" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_link") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest$ac_exeext && - $as_test_x conftest$ac_exeext; then - ac_cv_lib_svld_dlopen=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_cv_lib_svld_dlopen=no -fi - -rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ - conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS -fi -{ echo "$as_me:$LINENO: result: $ac_cv_lib_svld_dlopen" >&5 -echo "${ECHO_T}$ac_cv_lib_svld_dlopen" >&6; } -if test $ac_cv_lib_svld_dlopen = yes; then - lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-lsvld" -else - { echo "$as_me:$LINENO: checking for dld_link in -ldld" >&5 -echo $ECHO_N "checking for dld_link in -ldld... $ECHO_C" >&6; } -if test "${ac_cv_lib_dld_dld_link+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - ac_check_lib_save_LIBS=$LIBS -LIBS="-ldld $LIBS" -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ - -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char dld_link (); -int -main () -{ -return dld_link (); - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext conftest$ac_exeext -if { (ac_try="$ac_link" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_link") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest$ac_exeext && - $as_test_x conftest$ac_exeext; then - ac_cv_lib_dld_dld_link=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_cv_lib_dld_dld_link=no -fi - -rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ - conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS -fi -{ echo "$as_me:$LINENO: result: $ac_cv_lib_dld_dld_link" >&5 -echo "${ECHO_T}$ac_cv_lib_dld_dld_link" >&6; } -if test $ac_cv_lib_dld_dld_link = yes; then - lt_cv_dlopen="dld_link" lt_cv_dlopen_libs="-dld" -fi - - -fi - - -fi - - -fi - - -fi - - -fi - - ;; - esac - - if test "x$lt_cv_dlopen" != xno; then - enable_dlopen=yes - else - enable_dlopen=no - fi - - case $lt_cv_dlopen in - dlopen) - save_CPPFLAGS="$CPPFLAGS" - test "x$ac_cv_header_dlfcn_h" = xyes && CPPFLAGS="$CPPFLAGS -DHAVE_DLFCN_H" - - save_LDFLAGS="$LDFLAGS" - wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $export_dynamic_flag_spec\" - - save_LIBS="$LIBS" - LIBS="$lt_cv_dlopen_libs $LIBS" - - { echo "$as_me:$LINENO: checking whether a program can dlopen itself" >&5 -echo $ECHO_N "checking whether a program can dlopen itself... $ECHO_C" >&6; } -if test "${lt_cv_dlopen_self+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - if test "$cross_compiling" = yes; then : - lt_cv_dlopen_self=cross -else - lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 - lt_status=$lt_dlunknown - cat > conftest.$ac_ext < -#endif - -#include - -#ifdef RTLD_GLOBAL -# define LT_DLGLOBAL RTLD_GLOBAL -#else -# ifdef DL_GLOBAL -# define LT_DLGLOBAL DL_GLOBAL -# else -# define LT_DLGLOBAL 0 -# endif -#endif - -/* We may have to define LT_DLLAZY_OR_NOW in the command line if we - find out it does not work in some platform. */ -#ifndef LT_DLLAZY_OR_NOW -# ifdef RTLD_LAZY -# define LT_DLLAZY_OR_NOW RTLD_LAZY -# else -# ifdef DL_LAZY -# define LT_DLLAZY_OR_NOW DL_LAZY -# else -# ifdef RTLD_NOW -# define LT_DLLAZY_OR_NOW RTLD_NOW -# else -# ifdef DL_NOW -# define LT_DLLAZY_OR_NOW DL_NOW -# else -# define LT_DLLAZY_OR_NOW 0 -# endif -# endif -# endif -# endif -#endif - -#ifdef __cplusplus -extern "C" void exit (int); -#endif - -void fnord() { int i=42;} -int main () -{ - void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW); - int status = $lt_dlunknown; - - if (self) - { - if (dlsym (self,"fnord")) status = $lt_dlno_uscore; - else if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore; - /* dlclose (self); */ - } - else - puts (dlerror ()); - - exit (status); -} -EOF - if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 - (eval $ac_link) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && test -s conftest${ac_exeext} 2>/dev/null; then - (./conftest; exit; ) >&5 2>/dev/null - lt_status=$? - case x$lt_status in - x$lt_dlno_uscore) lt_cv_dlopen_self=yes ;; - x$lt_dlneed_uscore) lt_cv_dlopen_self=yes ;; - x$lt_dlunknown|x*) lt_cv_dlopen_self=no ;; - esac - else : - # compilation failed - lt_cv_dlopen_self=no - fi -fi -rm -fr conftest* - - -fi -{ echo "$as_me:$LINENO: result: $lt_cv_dlopen_self" >&5 -echo "${ECHO_T}$lt_cv_dlopen_self" >&6; } - - if test "x$lt_cv_dlopen_self" = xyes; then - wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $lt_prog_compiler_static\" - { echo "$as_me:$LINENO: checking whether a statically linked program can dlopen itself" >&5 -echo $ECHO_N "checking whether a statically linked program can dlopen itself... $ECHO_C" >&6; } -if test "${lt_cv_dlopen_self_static+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - if test "$cross_compiling" = yes; then : - lt_cv_dlopen_self_static=cross -else - lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 - lt_status=$lt_dlunknown - cat > conftest.$ac_ext < -#endif - -#include - -#ifdef RTLD_GLOBAL -# define LT_DLGLOBAL RTLD_GLOBAL -#else -# ifdef DL_GLOBAL -# define LT_DLGLOBAL DL_GLOBAL -# else -# define LT_DLGLOBAL 0 -# endif -#endif - -/* We may have to define LT_DLLAZY_OR_NOW in the command line if we - find out it does not work in some platform. */ -#ifndef LT_DLLAZY_OR_NOW -# ifdef RTLD_LAZY -# define LT_DLLAZY_OR_NOW RTLD_LAZY -# else -# ifdef DL_LAZY -# define LT_DLLAZY_OR_NOW DL_LAZY -# else -# ifdef RTLD_NOW -# define LT_DLLAZY_OR_NOW RTLD_NOW -# else -# ifdef DL_NOW -# define LT_DLLAZY_OR_NOW DL_NOW -# else -# define LT_DLLAZY_OR_NOW 0 -# endif -# endif -# endif -# endif -#endif - -#ifdef __cplusplus -extern "C" void exit (int); -#endif - -void fnord() { int i=42;} -int main () -{ - void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW); - int status = $lt_dlunknown; - - if (self) - { - if (dlsym (self,"fnord")) status = $lt_dlno_uscore; - else if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore; - /* dlclose (self); */ - } - else - puts (dlerror ()); - - exit (status); -} -EOF - if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 - (eval $ac_link) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && test -s conftest${ac_exeext} 2>/dev/null; then - (./conftest; exit; ) >&5 2>/dev/null - lt_status=$? - case x$lt_status in - x$lt_dlno_uscore) lt_cv_dlopen_self_static=yes ;; - x$lt_dlneed_uscore) lt_cv_dlopen_self_static=yes ;; - x$lt_dlunknown|x*) lt_cv_dlopen_self_static=no ;; - esac - else : - # compilation failed - lt_cv_dlopen_self_static=no - fi -fi -rm -fr conftest* - - -fi -{ echo "$as_me:$LINENO: result: $lt_cv_dlopen_self_static" >&5 -echo "${ECHO_T}$lt_cv_dlopen_self_static" >&6; } - fi - - CPPFLAGS="$save_CPPFLAGS" - LDFLAGS="$save_LDFLAGS" - LIBS="$save_LIBS" - ;; - esac - - case $lt_cv_dlopen_self in - yes|no) enable_dlopen_self=$lt_cv_dlopen_self ;; - *) enable_dlopen_self=unknown ;; - esac - - case $lt_cv_dlopen_self_static in - yes|no) enable_dlopen_self_static=$lt_cv_dlopen_self_static ;; - *) enable_dlopen_self_static=unknown ;; - esac -fi - - -# Report which library types will actually be built -{ echo "$as_me:$LINENO: checking if libtool supports shared libraries" >&5 -echo $ECHO_N "checking if libtool supports shared libraries... $ECHO_C" >&6; } -{ echo "$as_me:$LINENO: result: $can_build_shared" >&5 -echo "${ECHO_T}$can_build_shared" >&6; } - -{ echo "$as_me:$LINENO: checking whether to build shared libraries" >&5 -echo $ECHO_N "checking whether to build shared libraries... $ECHO_C" >&6; } -test "$can_build_shared" = "no" && enable_shared=no - -# On AIX, shared libraries and static libraries use the same namespace, and -# are all built from PIC. -case $host_os in -aix3*) - test "$enable_shared" = yes && enable_static=no - if test -n "$RANLIB"; then - archive_cmds="$archive_cmds~\$RANLIB \$lib" - postinstall_cmds='$RANLIB $lib' - fi - ;; - -aix4* | aix5*) - if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then - test "$enable_shared" = yes && enable_static=no - fi - ;; -esac -{ echo "$as_me:$LINENO: result: $enable_shared" >&5 -echo "${ECHO_T}$enable_shared" >&6; } - -{ echo "$as_me:$LINENO: checking whether to build static libraries" >&5 -echo $ECHO_N "checking whether to build static libraries... $ECHO_C" >&6; } -# Make sure either enable_shared or enable_static is yes. -test "$enable_shared" = yes || enable_static=yes -{ echo "$as_me:$LINENO: result: $enable_static" >&5 -echo "${ECHO_T}$enable_static" >&6; } - -# The else clause should only fire when bootstrapping the -# libtool distribution, otherwise you forgot to ship ltmain.sh -# with your package, and you will get complaints that there are -# no rules to generate ltmain.sh. -if test -f "$ltmain"; then - # See if we are running on zsh, and set the options which allow our commands through - # without removal of \ escapes. - if test -n "${ZSH_VERSION+set}" ; then - setopt NO_GLOB_SUBST - fi - # Now quote all the things that may contain metacharacters while being - # careful not to overquote the AC_SUBSTed values. We take copies of the - # variables and quote the copies for generation of the libtool script. - for var in echo old_CC old_CFLAGS AR AR_FLAGS EGREP RANLIB LN_S LTCC LTCFLAGS NM \ - SED SHELL STRIP \ - libname_spec library_names_spec soname_spec extract_expsyms_cmds \ - old_striplib striplib file_magic_cmd finish_cmds finish_eval \ - deplibs_check_method reload_flag reload_cmds need_locks \ - lt_cv_sys_global_symbol_pipe lt_cv_sys_global_symbol_to_cdecl \ - lt_cv_sys_global_symbol_to_c_name_address \ - sys_lib_search_path_spec sys_lib_dlsearch_path_spec \ - old_postinstall_cmds old_postuninstall_cmds \ - compiler \ - CC \ - LD \ - lt_prog_compiler_wl \ - lt_prog_compiler_pic \ - lt_prog_compiler_static \ - lt_prog_compiler_no_builtin_flag \ - export_dynamic_flag_spec \ - thread_safe_flag_spec \ - whole_archive_flag_spec \ - enable_shared_with_static_runtimes \ - old_archive_cmds \ - old_archive_from_new_cmds \ - predep_objects \ - postdep_objects \ - predeps \ - postdeps \ - compiler_lib_search_path \ - archive_cmds \ - archive_expsym_cmds \ - postinstall_cmds \ - postuninstall_cmds \ - old_archive_from_expsyms_cmds \ - allow_undefined_flag \ - no_undefined_flag \ - export_symbols_cmds \ - hardcode_libdir_flag_spec \ - hardcode_libdir_flag_spec_ld \ - hardcode_libdir_separator \ - hardcode_automatic \ - module_cmds \ - module_expsym_cmds \ - lt_cv_prog_compiler_c_o \ - fix_srcfile_path \ - exclude_expsyms \ - include_expsyms; do - - case $var in - old_archive_cmds | \ - old_archive_from_new_cmds | \ - archive_cmds | \ - archive_expsym_cmds | \ - module_cmds | \ - module_expsym_cmds | \ - old_archive_from_expsyms_cmds | \ - export_symbols_cmds | \ - extract_expsyms_cmds | reload_cmds | finish_cmds | \ - postinstall_cmds | postuninstall_cmds | \ - old_postinstall_cmds | old_postuninstall_cmds | \ - sys_lib_search_path_spec | sys_lib_dlsearch_path_spec) - # Double-quote double-evaled strings. - eval "lt_$var=\\\"\`\$echo \"X\$$var\" | \$Xsed -e \"\$double_quote_subst\" -e \"\$sed_quote_subst\" -e \"\$delay_variable_subst\"\`\\\"" - ;; - *) - eval "lt_$var=\\\"\`\$echo \"X\$$var\" | \$Xsed -e \"\$sed_quote_subst\"\`\\\"" - ;; - esac - done - - case $lt_echo in - *'\$0 --fallback-echo"') - lt_echo=`$echo "X$lt_echo" | $Xsed -e 's/\\\\\\\$0 --fallback-echo"$/$0 --fallback-echo"/'` - ;; - esac - -cfgfile="${ofile}T" - trap "$rm \"$cfgfile\"; exit 1" 1 2 15 - $rm -f "$cfgfile" - { echo "$as_me:$LINENO: creating $ofile" >&5 -echo "$as_me: creating $ofile" >&6;} - - cat <<__EOF__ >> "$cfgfile" -#! $SHELL - -# `$echo "$cfgfile" | sed 's%^.*/%%'` - Provide generalized library-building support services. -# Generated automatically by $PROGRAM (GNU $PACKAGE $VERSION$TIMESTAMP) -# NOTE: Changes made to this file will be lost: look at ltmain.sh. -# -# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007 -# Free Software Foundation, Inc. -# -# This file is part of GNU Libtool: -# Originally by Gordon Matzigkeit , 1996 -# -# This program is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 2 of the License, or -# (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, but -# WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. -# -# As a special exception to the GNU General Public License, if you -# distribute this file as part of a program that contains a -# configuration script generated by Autoconf, you may include it under -# the same distribution terms that you use for the rest of that program. - -# A sed program that does not truncate output. -SED=$lt_SED - -# Sed that helps us avoid accidentally triggering echo(1) options like -n. -Xsed="$SED -e 1s/^X//" - -# The HP-UX ksh and POSIX shell print the target directory to stdout -# if CDPATH is set. -(unset CDPATH) >/dev/null 2>&1 && unset CDPATH - -# The names of the tagged configurations supported by this script. -available_tags= - -# ### BEGIN LIBTOOL CONFIG - -# Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`: - -# Shell to use when invoking shell scripts. -SHELL=$lt_SHELL - -# Whether or not to build shared libraries. -build_libtool_libs=$enable_shared - -# Whether or not to build static libraries. -build_old_libs=$enable_static - -# Whether or not to add -lc for building shared libraries. -build_libtool_need_lc=$archive_cmds_need_lc - -# Whether or not to disallow shared libs when runtime libs are static -allow_libtool_libs_with_static_runtimes=$enable_shared_with_static_runtimes - -# Whether or not to optimize for fast installation. -fast_install=$enable_fast_install - -# The host system. -host_alias=$host_alias -host=$host -host_os=$host_os - -# The build system. -build_alias=$build_alias -build=$build -build_os=$build_os - -# An echo program that does not interpret backslashes. -echo=$lt_echo - -# The archiver. -AR=$lt_AR -AR_FLAGS=$lt_AR_FLAGS - -# A C compiler. -LTCC=$lt_LTCC - -# LTCC compiler flags. -LTCFLAGS=$lt_LTCFLAGS - -# A language-specific compiler. -CC=$lt_compiler - -# Is the compiler the GNU C compiler? -with_gcc=$GCC - -# An ERE matcher. -EGREP=$lt_EGREP - -# The linker used to build libraries. -LD=$lt_LD - -# Whether we need hard or soft links. -LN_S=$lt_LN_S - -# A BSD-compatible nm program. -NM=$lt_NM - -# A symbol stripping program -STRIP=$lt_STRIP - -# Used to examine libraries when file_magic_cmd begins "file" -MAGIC_CMD=$MAGIC_CMD - -# Used on cygwin: DLL creation program. -DLLTOOL="$DLLTOOL" - -# Used on cygwin: object dumper. -OBJDUMP="$OBJDUMP" - -# Used on cygwin: assembler. -AS="$AS" - -# The name of the directory that contains temporary libtool files. -objdir=$objdir - -# How to create reloadable object files. -reload_flag=$lt_reload_flag -reload_cmds=$lt_reload_cmds - -# How to pass a linker flag through the compiler. -wl=$lt_lt_prog_compiler_wl - -# Object file suffix (normally "o"). -objext="$ac_objext" - -# Old archive suffix (normally "a"). -libext="$libext" - -# Shared library suffix (normally ".so"). -shrext_cmds='$shrext_cmds' - -# Executable file suffix (normally ""). -exeext="$exeext" - -# Additional compiler flags for building library objects. -pic_flag=$lt_lt_prog_compiler_pic -pic_mode=$pic_mode - -# What is the maximum length of a command? -max_cmd_len=$lt_cv_sys_max_cmd_len - -# Does compiler simultaneously support -c and -o options? -compiler_c_o=$lt_lt_cv_prog_compiler_c_o - -# Must we lock files when doing compilation? -need_locks=$lt_need_locks - -# Do we need the lib prefix for modules? -need_lib_prefix=$need_lib_prefix - -# Do we need a version for libraries? -need_version=$need_version - -# Whether dlopen is supported. -dlopen_support=$enable_dlopen - -# Whether dlopen of programs is supported. -dlopen_self=$enable_dlopen_self - -# Whether dlopen of statically linked programs is supported. -dlopen_self_static=$enable_dlopen_self_static - -# Compiler flag to prevent dynamic linking. -link_static_flag=$lt_lt_prog_compiler_static - -# Compiler flag to turn off builtin functions. -no_builtin_flag=$lt_lt_prog_compiler_no_builtin_flag - -# Compiler flag to allow reflexive dlopens. -export_dynamic_flag_spec=$lt_export_dynamic_flag_spec - -# Compiler flag to generate shared objects directly from archives. -whole_archive_flag_spec=$lt_whole_archive_flag_spec - -# Compiler flag to generate thread-safe objects. -thread_safe_flag_spec=$lt_thread_safe_flag_spec - -# Library versioning type. -version_type=$version_type - -# Format of library name prefix. -libname_spec=$lt_libname_spec - -# List of archive names. First name is the real one, the rest are links. -# The last name is the one that the linker finds with -lNAME. -library_names_spec=$lt_library_names_spec - -# The coded name of the library, if different from the real name. -soname_spec=$lt_soname_spec - -# Commands used to build and install an old-style archive. -RANLIB=$lt_RANLIB -old_archive_cmds=$lt_old_archive_cmds -old_postinstall_cmds=$lt_old_postinstall_cmds -old_postuninstall_cmds=$lt_old_postuninstall_cmds - -# Create an old-style archive from a shared archive. -old_archive_from_new_cmds=$lt_old_archive_from_new_cmds - -# Create a temporary old-style archive to link instead of a shared archive. -old_archive_from_expsyms_cmds=$lt_old_archive_from_expsyms_cmds - -# Commands used to build and install a shared archive. -archive_cmds=$lt_archive_cmds -archive_expsym_cmds=$lt_archive_expsym_cmds -postinstall_cmds=$lt_postinstall_cmds -postuninstall_cmds=$lt_postuninstall_cmds - -# Commands used to build a loadable module (assumed same as above if empty) -module_cmds=$lt_module_cmds -module_expsym_cmds=$lt_module_expsym_cmds - -# Commands to strip libraries. -old_striplib=$lt_old_striplib -striplib=$lt_striplib - -# Dependencies to place before the objects being linked to create a -# shared library. -predep_objects=$lt_predep_objects - -# Dependencies to place after the objects being linked to create a -# shared library. -postdep_objects=$lt_postdep_objects - -# Dependencies to place before the objects being linked to create a -# shared library. -predeps=$lt_predeps - -# Dependencies to place after the objects being linked to create a -# shared library. -postdeps=$lt_postdeps - -# The library search path used internally by the compiler when linking -# a shared library. -compiler_lib_search_path=$lt_compiler_lib_search_path - -# Method to check whether dependent libraries are shared objects. -deplibs_check_method=$lt_deplibs_check_method - -# Command to use when deplibs_check_method == file_magic. -file_magic_cmd=$lt_file_magic_cmd - -# Flag that allows shared libraries with undefined symbols to be built. -allow_undefined_flag=$lt_allow_undefined_flag - -# Flag that forces no undefined symbols. -no_undefined_flag=$lt_no_undefined_flag - -# Commands used to finish a libtool library installation in a directory. -finish_cmds=$lt_finish_cmds - -# Same as above, but a single script fragment to be evaled but not shown. -finish_eval=$lt_finish_eval - -# Take the output of nm and produce a listing of raw symbols and C names. -global_symbol_pipe=$lt_lt_cv_sys_global_symbol_pipe - -# Transform the output of nm in a proper C declaration -global_symbol_to_cdecl=$lt_lt_cv_sys_global_symbol_to_cdecl - -# Transform the output of nm in a C name address pair -global_symbol_to_c_name_address=$lt_lt_cv_sys_global_symbol_to_c_name_address - -# This is the shared library runtime path variable. -runpath_var=$runpath_var - -# This is the shared library path variable. -shlibpath_var=$shlibpath_var - -# Is shlibpath searched before the hard-coded library search path? -shlibpath_overrides_runpath=$shlibpath_overrides_runpath - -# How to hardcode a shared library path into an executable. -hardcode_action=$hardcode_action - -# Whether we should hardcode library paths into libraries. -hardcode_into_libs=$hardcode_into_libs - -# Flag to hardcode \$libdir into a binary during linking. -# This must work even if \$libdir does not exist. -hardcode_libdir_flag_spec=$lt_hardcode_libdir_flag_spec - -# If ld is used when linking, flag to hardcode \$libdir into -# a binary during linking. This must work even if \$libdir does -# not exist. -hardcode_libdir_flag_spec_ld=$lt_hardcode_libdir_flag_spec_ld - -# Whether we need a single -rpath flag with a separated argument. -hardcode_libdir_separator=$lt_hardcode_libdir_separator - -# Set to yes if using DIR/libNAME${shared_ext} during linking hardcodes DIR into the -# resulting binary. -hardcode_direct=$hardcode_direct - -# Set to yes if using the -LDIR flag during linking hardcodes DIR into the -# resulting binary. -hardcode_minus_L=$hardcode_minus_L - -# Set to yes if using SHLIBPATH_VAR=DIR during linking hardcodes DIR into -# the resulting binary. -hardcode_shlibpath_var=$hardcode_shlibpath_var - -# Set to yes if building a shared library automatically hardcodes DIR into the library -# and all subsequent libraries and executables linked against it. -hardcode_automatic=$hardcode_automatic - -# Variables whose values should be saved in libtool wrapper scripts and -# restored at relink time. -variables_saved_for_relink="$variables_saved_for_relink" - -# Whether libtool must link a program against all its dependency libraries. -link_all_deplibs=$link_all_deplibs - -# Compile-time system search path for libraries -sys_lib_search_path_spec=$lt_sys_lib_search_path_spec - -# Run-time system search path for libraries -sys_lib_dlsearch_path_spec=$lt_sys_lib_dlsearch_path_spec - -# Fix the shell variable \$srcfile for the compiler. -fix_srcfile_path=$lt_fix_srcfile_path - -# Set to yes if exported symbols are required. -always_export_symbols=$always_export_symbols - -# The commands to list exported symbols. -export_symbols_cmds=$lt_export_symbols_cmds - -# The commands to extract the exported symbol list from a shared archive. -extract_expsyms_cmds=$lt_extract_expsyms_cmds - -# Symbols that should not be listed in the preloaded symbols. -exclude_expsyms=$lt_exclude_expsyms - -# Symbols that must always be exported. -include_expsyms=$lt_include_expsyms - -# ### END LIBTOOL CONFIG - -__EOF__ - - - case $host_os in - aix3*) - cat <<\EOF >> "$cfgfile" - -# AIX sometimes has problems with the GCC collect2 program. For some -# reason, if we set the COLLECT_NAMES environment variable, the problems -# vanish in a puff of smoke. -if test "X${COLLECT_NAMES+set}" != Xset; then - COLLECT_NAMES= - export COLLECT_NAMES -fi -EOF - ;; - esac - - # We use sed instead of cat because bash on DJGPP gets confused if - # if finds mixed CR/LF and LF-only lines. Since sed operates in - # text mode, it properly converts lines to CR/LF. This bash problem - # is reportedly fixed, but why not run on old versions too? - sed '$q' "$ltmain" >> "$cfgfile" || (rm -f "$cfgfile"; exit 1) - - mv -f "$cfgfile" "$ofile" || \ - (rm -f "$ofile" && cp "$cfgfile" "$ofile" && rm -f "$cfgfile") - chmod +x "$ofile" - -else - # If there is no Makefile yet, we rely on a make rule to execute - # `config.status --recheck' to rerun these tests and create the - # libtool script then. - ltmain_in=`echo $ltmain | sed -e 's/\.sh$/.in/'` - if test -f "$ltmain_in"; then - test -f Makefile && make "$ltmain" - fi -fi - - -ac_ext=c -ac_cpp='$CPP $CPPFLAGS' -ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_c_compiler_gnu - -CC="$lt_save_CC" - - -# Check whether --with-tags was given. -if test "${with_tags+set}" = set; then - withval=$with_tags; tagnames="$withval" -fi - - -if test -f "$ltmain" && test -n "$tagnames"; then - if test ! -f "${ofile}"; then - { echo "$as_me:$LINENO: WARNING: output file \`$ofile' does not exist" >&5 -echo "$as_me: WARNING: output file \`$ofile' does not exist" >&2;} - fi - - if test -z "$LTCC"; then - eval "`$SHELL ${ofile} --config | grep '^LTCC='`" - if test -z "$LTCC"; then - { echo "$as_me:$LINENO: WARNING: output file \`$ofile' does not look like a libtool script" >&5 -echo "$as_me: WARNING: output file \`$ofile' does not look like a libtool script" >&2;} - else - { echo "$as_me:$LINENO: WARNING: using \`LTCC=$LTCC', extracted from \`$ofile'" >&5 -echo "$as_me: WARNING: using \`LTCC=$LTCC', extracted from \`$ofile'" >&2;} - fi - fi - if test -z "$LTCFLAGS"; then - eval "`$SHELL ${ofile} --config | grep '^LTCFLAGS='`" - fi - - # Extract list of available tagged configurations in $ofile. - # Note that this assumes the entire list is on one line. - available_tags=`grep "^available_tags=" "${ofile}" | $SED -e 's/available_tags=\(.*$\)/\1/' -e 's/\"//g'` - - lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," - for tagname in $tagnames; do - IFS="$lt_save_ifs" - # Check whether tagname contains only valid characters - case `$echo "X$tagname" | $Xsed -e 's:[-_ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz1234567890,/]::g'` in - "") ;; - *) { { echo "$as_me:$LINENO: error: invalid tag name: $tagname" >&5 -echo "$as_me: error: invalid tag name: $tagname" >&2;} - { (exit 1); exit 1; }; } - ;; - esac - - if grep "^# ### BEGIN LIBTOOL TAG CONFIG: $tagname$" < "${ofile}" > /dev/null - then - { { echo "$as_me:$LINENO: error: tag name \"$tagname\" already exists" >&5 -echo "$as_me: error: tag name \"$tagname\" already exists" >&2;} - { (exit 1); exit 1; }; } - fi - - # Update the list of available tags. - if test -n "$tagname"; then - echo appending configuration tag \"$tagname\" to $ofile - - case $tagname in - CXX) - if test -n "$CXX" && ( test "X$CXX" != "Xno" && - ( (test "X$CXX" = "Xg++" && `g++ -v >/dev/null 2>&1` ) || - (test "X$CXX" != "Xg++"))) ; then - ac_ext=cpp -ac_cpp='$CXXCPP $CPPFLAGS' -ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_cxx_compiler_gnu - - - - -archive_cmds_need_lc_CXX=no -allow_undefined_flag_CXX= -always_export_symbols_CXX=no -archive_expsym_cmds_CXX= -export_dynamic_flag_spec_CXX= -hardcode_direct_CXX=no -hardcode_libdir_flag_spec_CXX= -hardcode_libdir_flag_spec_ld_CXX= -hardcode_libdir_separator_CXX= -hardcode_minus_L_CXX=no -hardcode_shlibpath_var_CXX=unsupported -hardcode_automatic_CXX=no -module_cmds_CXX= -module_expsym_cmds_CXX= -link_all_deplibs_CXX=unknown -old_archive_cmds_CXX=$old_archive_cmds -no_undefined_flag_CXX= -whole_archive_flag_spec_CXX= -enable_shared_with_static_runtimes_CXX=no - -# Dependencies to place before and after the object being linked: -predep_objects_CXX= -postdep_objects_CXX= -predeps_CXX= -postdeps_CXX= -compiler_lib_search_path_CXX= - -# Source file extension for C++ test sources. -ac_ext=cpp - -# Object file extension for compiled C++ test sources. -objext=o -objext_CXX=$objext - -# Code to be used in simple compile tests -lt_simple_compile_test_code="int some_variable = 0;" - -# Code to be used in simple link tests -lt_simple_link_test_code='int main(int, char *[]) { return(0); }' - -# ltmain only uses $CC for tagged configurations so make sure $CC is set. - -# If no C compiler was specified, use CC. -LTCC=${LTCC-"$CC"} - -# If no C compiler flags were specified, use CFLAGS. -LTCFLAGS=${LTCFLAGS-"$CFLAGS"} - -# Allow CC to be a program name with arguments. -compiler=$CC - - -# save warnings/boilerplate of simple test code -ac_outfile=conftest.$ac_objext -echo "$lt_simple_compile_test_code" >conftest.$ac_ext -eval "$ac_compile" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err -_lt_compiler_boilerplate=`cat conftest.err` -$rm conftest* - -ac_outfile=conftest.$ac_objext -echo "$lt_simple_link_test_code" >conftest.$ac_ext -eval "$ac_link" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err -_lt_linker_boilerplate=`cat conftest.err` -$rm conftest* - - -# Allow CC to be a program name with arguments. -lt_save_CC=$CC -lt_save_LD=$LD -lt_save_GCC=$GCC -GCC=$GXX -lt_save_with_gnu_ld=$with_gnu_ld -lt_save_path_LD=$lt_cv_path_LD -if test -n "${lt_cv_prog_gnu_ldcxx+set}"; then - lt_cv_prog_gnu_ld=$lt_cv_prog_gnu_ldcxx -else - $as_unset lt_cv_prog_gnu_ld -fi -if test -n "${lt_cv_path_LDCXX+set}"; then - lt_cv_path_LD=$lt_cv_path_LDCXX -else - $as_unset lt_cv_path_LD -fi -test -z "${LDCXX+set}" || LD=$LDCXX -CC=${CXX-"c++"} -compiler=$CC -compiler_CXX=$CC -for cc_temp in $compiler""; do - case $cc_temp in - compile | *[\\/]compile | ccache | *[\\/]ccache ) ;; - distcc | *[\\/]distcc | purify | *[\\/]purify ) ;; - \-*) ;; - *) break;; - esac -done -cc_basename=`$echo "X$cc_temp" | $Xsed -e 's%.*/%%' -e "s%^$host_alias-%%"` - - -# We don't want -fno-exception wen compiling C++ code, so set the -# no_builtin_flag separately -if test "$GXX" = yes; then - lt_prog_compiler_no_builtin_flag_CXX=' -fno-builtin' -else - lt_prog_compiler_no_builtin_flag_CXX= -fi - -if test "$GXX" = yes; then - # Set up default GNU C++ configuration - - -# Check whether --with-gnu-ld was given. -if test "${with_gnu_ld+set}" = set; then - withval=$with_gnu_ld; test "$withval" = no || with_gnu_ld=yes -else - with_gnu_ld=no -fi - -ac_prog=ld -if test "$GCC" = yes; then - # Check if gcc -print-prog-name=ld gives a path. - { echo "$as_me:$LINENO: checking for ld used by $CC" >&5 -echo $ECHO_N "checking for ld used by $CC... $ECHO_C" >&6; } - case $host in - *-*-mingw*) - # gcc leaves a trailing carriage return which upsets mingw - ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;; - *) - ac_prog=`($CC -print-prog-name=ld) 2>&5` ;; - esac - case $ac_prog in - # Accept absolute paths. - [\\/]* | ?:[\\/]*) - re_direlt='/[^/][^/]*/\.\./' - # Canonicalize the pathname of ld - ac_prog=`echo $ac_prog| $SED 's%\\\\%/%g'` - while echo $ac_prog | grep "$re_direlt" > /dev/null 2>&1; do - ac_prog=`echo $ac_prog| $SED "s%$re_direlt%/%"` - done - test -z "$LD" && LD="$ac_prog" - ;; - "") - # If it fails, then pretend we aren't using GCC. - ac_prog=ld - ;; - *) - # If it is relative, then search for the first ld in PATH. - with_gnu_ld=unknown - ;; - esac -elif test "$with_gnu_ld" = yes; then - { echo "$as_me:$LINENO: checking for GNU ld" >&5 -echo $ECHO_N "checking for GNU ld... $ECHO_C" >&6; } -else - { echo "$as_me:$LINENO: checking for non-GNU ld" >&5 -echo $ECHO_N "checking for non-GNU ld... $ECHO_C" >&6; } -fi -if test "${lt_cv_path_LD+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - if test -z "$LD"; then - lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR - for ac_dir in $PATH; do - IFS="$lt_save_ifs" - test -z "$ac_dir" && ac_dir=. - if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then - lt_cv_path_LD="$ac_dir/$ac_prog" - # Check to see if the program is GNU ld. I'd rather use --version, - # but apparently some variants of GNU ld only accept -v. - # Break only if it was the GNU/non-GNU ld that we prefer. - case `"$lt_cv_path_LD" -v 2>&1 &5 -echo "${ECHO_T}$LD" >&6; } -else - { echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6; } -fi -test -z "$LD" && { { echo "$as_me:$LINENO: error: no acceptable ld found in \$PATH" >&5 -echo "$as_me: error: no acceptable ld found in \$PATH" >&2;} - { (exit 1); exit 1; }; } -{ echo "$as_me:$LINENO: checking if the linker ($LD) is GNU ld" >&5 -echo $ECHO_N "checking if the linker ($LD) is GNU ld... $ECHO_C" >&6; } -if test "${lt_cv_prog_gnu_ld+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - # I'd rather use --version here, but apparently some GNU lds only accept -v. -case `$LD -v 2>&1 &5 -echo "${ECHO_T}$lt_cv_prog_gnu_ld" >&6; } -with_gnu_ld=$lt_cv_prog_gnu_ld - - - - # Check if GNU C++ uses GNU ld as the underlying linker, since the - # archiving commands below assume that GNU ld is being used. - if test "$with_gnu_ld" = yes; then - archive_cmds_CXX='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib' - archive_expsym_cmds_CXX='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' - - hardcode_libdir_flag_spec_CXX='${wl}--rpath ${wl}$libdir' - export_dynamic_flag_spec_CXX='${wl}--export-dynamic' - - # If archive_cmds runs LD, not CC, wlarc should be empty - # XXX I think wlarc can be eliminated in ltcf-cxx, but I need to - # investigate it a little bit more. (MM) - wlarc='${wl}' - - # ancient GNU ld didn't support --whole-archive et. al. - if eval "`$CC -print-prog-name=ld` --help 2>&1" | \ - grep 'no-whole-archive' > /dev/null; then - whole_archive_flag_spec_CXX="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' - else - whole_archive_flag_spec_CXX= - fi - else - with_gnu_ld=no - wlarc= - - # A generic and very simple default shared library creation - # command for GNU C++ for the case where it uses the native - # linker, instead of GNU ld. If possible, this setting should - # overridden to take advantage of the native linker features on - # the platform it is being used on. - archive_cmds_CXX='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib' - fi - - # Commands to make compiler produce verbose output that lists - # what "hidden" libraries, object files and flags are used when - # linking a shared library. - output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep "\-L"' - -else - GXX=no - with_gnu_ld=no - wlarc= -fi - -# PORTME: fill in a description of your system's C++ link characteristics -{ echo "$as_me:$LINENO: checking whether the $compiler linker ($LD) supports shared libraries" >&5 -echo $ECHO_N "checking whether the $compiler linker ($LD) supports shared libraries... $ECHO_C" >&6; } -ld_shlibs_CXX=yes -case $host_os in - aix3*) - # FIXME: insert proper C++ library support - ld_shlibs_CXX=no - ;; - aix4* | aix5*) - if test "$host_cpu" = ia64; then - # On IA64, the linker does run time linking by default, so we don't - # have to do anything special. - aix_use_runtimelinking=no - exp_sym_flag='-Bexport' - no_entry_flag="" - else - aix_use_runtimelinking=no - - # Test if we are trying to use run time linking or normal - # AIX style linking. If -brtl is somewhere in LDFLAGS, we - # need to do runtime linking. - case $host_os in aix4.[23]|aix4.[23].*|aix5*) - for ld_flag in $LDFLAGS; do - case $ld_flag in - *-brtl*) - aix_use_runtimelinking=yes - break - ;; - esac - done - ;; - esac - - exp_sym_flag='-bexport' - no_entry_flag='-bnoentry' - fi - - # When large executables or shared objects are built, AIX ld can - # have problems creating the table of contents. If linking a library - # or program results in "error TOC overflow" add -mminimal-toc to - # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not - # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS. - - archive_cmds_CXX='' - hardcode_direct_CXX=yes - hardcode_libdir_separator_CXX=':' - link_all_deplibs_CXX=yes - - if test "$GXX" = yes; then - case $host_os in aix4.[012]|aix4.[012].*) - # We only want to do this on AIX 4.2 and lower, the check - # below for broken collect2 doesn't work under 4.3+ - collect2name=`${CC} -print-prog-name=collect2` - if test -f "$collect2name" && \ - strings "$collect2name" | grep resolve_lib_name >/dev/null - then - # We have reworked collect2 - : - else - # We have old collect2 - hardcode_direct_CXX=unsupported - # It fails to find uninstalled libraries when the uninstalled - # path is not listed in the libpath. Setting hardcode_minus_L - # to unsupported forces relinking - hardcode_minus_L_CXX=yes - hardcode_libdir_flag_spec_CXX='-L$libdir' - hardcode_libdir_separator_CXX= - fi - ;; - esac - shared_flag='-shared' - if test "$aix_use_runtimelinking" = yes; then - shared_flag="$shared_flag "'${wl}-G' - fi - else - # not using gcc - if test "$host_cpu" = ia64; then - # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release - # chokes on -Wl,-G. The following line is correct: - shared_flag='-G' - else - if test "$aix_use_runtimelinking" = yes; then - shared_flag='${wl}-G' - else - shared_flag='${wl}-bM:SRE' - fi - fi - fi - - # It seems that -bexpall does not export symbols beginning with - # underscore (_), so it is better to generate a list of symbols to export. - always_export_symbols_CXX=yes - if test "$aix_use_runtimelinking" = yes; then - # Warning - without using the other runtime loading flags (-brtl), - # -berok will link without error, but may produce a broken library. - allow_undefined_flag_CXX='-berok' - # Determine the default libpath from the value encoded in an empty executable. - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ - -int -main () -{ - - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext conftest$ac_exeext -if { (ac_try="$ac_link" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_link") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_cxx_werror_flag" || - test ! -s conftest.err - } && test -s conftest$ac_exeext && - $as_test_x conftest$ac_exeext; then - -lt_aix_libpath_sed=' - /Import File Strings/,/^$/ { - /^0/ { - s/^0 *\(.*\)$/\1/ - p - } - }' -aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` -# Check for a 64-bit object if we didn't find anything. -if test -z "$aix_libpath"; then - aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` -fi -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - -fi - -rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ - conftest$ac_exeext conftest.$ac_ext -if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi - - hardcode_libdir_flag_spec_CXX='${wl}-blibpath:$libdir:'"$aix_libpath" - - archive_expsym_cmds_CXX="\$CC"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then echo "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag" - else - if test "$host_cpu" = ia64; then - hardcode_libdir_flag_spec_CXX='${wl}-R $libdir:/usr/lib:/lib' - allow_undefined_flag_CXX="-z nodefs" - archive_expsym_cmds_CXX="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$exp_sym_flag:\$export_symbols" - else - # Determine the default libpath from the value encoded in an empty executable. - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ - -int -main () -{ - - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext conftest$ac_exeext -if { (ac_try="$ac_link" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_link") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_cxx_werror_flag" || - test ! -s conftest.err - } && test -s conftest$ac_exeext && - $as_test_x conftest$ac_exeext; then - -lt_aix_libpath_sed=' - /Import File Strings/,/^$/ { - /^0/ { - s/^0 *\(.*\)$/\1/ - p - } - }' -aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` -# Check for a 64-bit object if we didn't find anything. -if test -z "$aix_libpath"; then - aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` -fi -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - -fi - -rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ - conftest$ac_exeext conftest.$ac_ext -if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi - - hardcode_libdir_flag_spec_CXX='${wl}-blibpath:$libdir:'"$aix_libpath" - # Warning - without using the other run time loading flags, - # -berok will link without error, but may produce a broken library. - no_undefined_flag_CXX=' ${wl}-bernotok' - allow_undefined_flag_CXX=' ${wl}-berok' - # Exported symbols can be pulled into shared objects from archives - whole_archive_flag_spec_CXX='$convenience' - archive_cmds_need_lc_CXX=yes - # This is similar to how AIX traditionally builds its shared libraries. - archive_expsym_cmds_CXX="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs ${wl}-bnoentry $compiler_flags ${wl}-bE:$export_symbols${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname' - fi - fi - ;; - - beos*) - if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then - allow_undefined_flag_CXX=unsupported - # Joseph Beckenbach says some releases of gcc - # support --undefined. This deserves some investigation. FIXME - archive_cmds_CXX='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' - else - ld_shlibs_CXX=no - fi - ;; - - chorus*) - case $cc_basename in - *) - # FIXME: insert proper C++ library support - ld_shlibs_CXX=no - ;; - esac - ;; - - cygwin* | mingw* | pw32*) - # _LT_AC_TAGVAR(hardcode_libdir_flag_spec, CXX) is actually meaningless, - # as there is no search path for DLLs. - hardcode_libdir_flag_spec_CXX='-L$libdir' - allow_undefined_flag_CXX=unsupported - always_export_symbols_CXX=no - enable_shared_with_static_runtimes_CXX=yes - - if $LD --help 2>&1 | grep 'auto-import' > /dev/null; then - archive_cmds_CXX='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' - # If the export-symbols file already is a .def file (1st line - # is EXPORTS), use it as is; otherwise, prepend... - archive_expsym_cmds_CXX='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then - cp $export_symbols $output_objdir/$soname.def; - else - echo EXPORTS > $output_objdir/$soname.def; - cat $export_symbols >> $output_objdir/$soname.def; - fi~ - $CC -shared -nostdlib $output_objdir/$soname.def $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' - else - ld_shlibs_CXX=no - fi - ;; - darwin* | rhapsody*) - case $host_os in - rhapsody* | darwin1.[012]) - allow_undefined_flag_CXX='${wl}-undefined ${wl}suppress' - ;; - *) # Darwin 1.3 on - if test -z ${MACOSX_DEPLOYMENT_TARGET} ; then - allow_undefined_flag_CXX='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' - else - case ${MACOSX_DEPLOYMENT_TARGET} in - 10.[012]) - allow_undefined_flag_CXX='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' - ;; - 10.*) - allow_undefined_flag_CXX='${wl}-undefined ${wl}dynamic_lookup' - ;; - esac - fi - ;; - esac - archive_cmds_need_lc_CXX=no - hardcode_direct_CXX=no - hardcode_automatic_CXX=yes - hardcode_shlibpath_var_CXX=unsupported - whole_archive_flag_spec_CXX='' - link_all_deplibs_CXX=yes - - if test "$GXX" = yes ; then - lt_int_apple_cc_single_mod=no - output_verbose_link_cmd='echo' - if $CC -dumpspecs 2>&1 | $EGREP 'single_module' >/dev/null ; then - lt_int_apple_cc_single_mod=yes - fi - if test "X$lt_int_apple_cc_single_mod" = Xyes ; then - archive_cmds_CXX='$CC -dynamiclib -single_module $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags -install_name $rpath/$soname $verstring' - else - archive_cmds_CXX='$CC -r -keep_private_externs -nostdlib -o ${lib}-master.o $libobjs~$CC -dynamiclib $allow_undefined_flag -o $lib ${lib}-master.o $deplibs $compiler_flags -install_name $rpath/$soname $verstring' - fi - module_cmds_CXX='$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags' - # Don't fix this by using the ld -exported_symbols_list flag, it doesn't exist in older darwin lds - if test "X$lt_int_apple_cc_single_mod" = Xyes ; then - archive_expsym_cmds_CXX='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -dynamiclib -single_module $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags -install_name $rpath/$soname $verstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' - else - archive_expsym_cmds_CXX='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -r -keep_private_externs -nostdlib -o ${lib}-master.o $libobjs~$CC -dynamiclib $allow_undefined_flag -o $lib ${lib}-master.o $deplibs $compiler_flags -install_name $rpath/$soname $verstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' - fi - module_expsym_cmds_CXX='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' - else - case $cc_basename in - xlc*) - output_verbose_link_cmd='echo' - archive_cmds_CXX='$CC -qmkshrobj ${wl}-single_module $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-install_name ${wl}`echo $rpath/$soname` $xlcverstring' - module_cmds_CXX='$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags' - # Don't fix this by using the ld -exported_symbols_list flag, it doesn't exist in older darwin lds - archive_expsym_cmds_CXX='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -qmkshrobj ${wl}-single_module $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-install_name ${wl}$rpath/$soname $xlcverstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' - module_expsym_cmds_CXX='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' - ;; - *) - ld_shlibs_CXX=no - ;; - esac - fi - ;; - - dgux*) - case $cc_basename in - ec++*) - # FIXME: insert proper C++ library support - ld_shlibs_CXX=no - ;; - ghcx*) - # Green Hills C++ Compiler - # FIXME: insert proper C++ library support - ld_shlibs_CXX=no - ;; - *) - # FIXME: insert proper C++ library support - ld_shlibs_CXX=no - ;; - esac - ;; - freebsd[12]*) - # C++ shared libraries reported to be fairly broken before switch to ELF - ld_shlibs_CXX=no - ;; - freebsd-elf*) - archive_cmds_need_lc_CXX=no - ;; - freebsd* | dragonfly*) - # FreeBSD 3 and later use GNU C++ and GNU ld with standard ELF - # conventions - ld_shlibs_CXX=yes - ;; - gnu*) - ;; - hpux9*) - hardcode_libdir_flag_spec_CXX='${wl}+b ${wl}$libdir' - hardcode_libdir_separator_CXX=: - export_dynamic_flag_spec_CXX='${wl}-E' - hardcode_direct_CXX=yes - hardcode_minus_L_CXX=yes # Not in the search PATH, - # but as the default - # location of the library. - - case $cc_basename in - CC*) - # FIXME: insert proper C++ library support - ld_shlibs_CXX=no - ;; - aCC*) - archive_cmds_CXX='$rm $output_objdir/$soname~$CC -b ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' - # Commands to make compiler produce verbose output that lists - # what "hidden" libraries, object files and flags are used when - # linking a shared library. - # - # There doesn't appear to be a way to prevent this compiler from - # explicitly linking system object files so we need to strip them - # from the output so that they don't get included in the library - # dependencies. - output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | grep "[-]L"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; echo $list' - ;; - *) - if test "$GXX" = yes; then - archive_cmds_CXX='$rm $output_objdir/$soname~$CC -shared -nostdlib -fPIC ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' - else - # FIXME: insert proper C++ library support - ld_shlibs_CXX=no - fi - ;; - esac - ;; - hpux10*|hpux11*) - if test $with_gnu_ld = no; then - hardcode_libdir_flag_spec_CXX='${wl}+b ${wl}$libdir' - hardcode_libdir_separator_CXX=: - - case $host_cpu in - hppa*64*|ia64*) ;; - *) - export_dynamic_flag_spec_CXX='${wl}-E' - ;; - esac - fi - case $host_cpu in - hppa*64*|ia64*) - hardcode_direct_CXX=no - hardcode_shlibpath_var_CXX=no - ;; - *) - hardcode_direct_CXX=yes - hardcode_minus_L_CXX=yes # Not in the search PATH, - # but as the default - # location of the library. - ;; - esac - - case $cc_basename in - CC*) - # FIXME: insert proper C++ library support - ld_shlibs_CXX=no - ;; - aCC*) - case $host_cpu in - hppa*64*) - archive_cmds_CXX='$CC -b ${wl}+h ${wl}$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' - ;; - ia64*) - archive_cmds_CXX='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' - ;; - *) - archive_cmds_CXX='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' - ;; - esac - # Commands to make compiler produce verbose output that lists - # what "hidden" libraries, object files and flags are used when - # linking a shared library. - # - # There doesn't appear to be a way to prevent this compiler from - # explicitly linking system object files so we need to strip them - # from the output so that they don't get included in the library - # dependencies. - output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | grep "\-L"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; echo $list' - ;; - *) - if test "$GXX" = yes; then - if test $with_gnu_ld = no; then - case $host_cpu in - hppa*64*) - archive_cmds_CXX='$CC -shared -nostdlib -fPIC ${wl}+h ${wl}$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' - ;; - ia64*) - archive_cmds_CXX='$CC -shared -nostdlib -fPIC ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' - ;; - *) - archive_cmds_CXX='$CC -shared -nostdlib -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' - ;; - esac - fi - else - # FIXME: insert proper C++ library support - ld_shlibs_CXX=no - fi - ;; - esac - ;; - interix[3-9]*) - hardcode_direct_CXX=no - hardcode_shlibpath_var_CXX=no - hardcode_libdir_flag_spec_CXX='${wl}-rpath,$libdir' - export_dynamic_flag_spec_CXX='${wl}-E' - # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc. - # Instead, shared libraries are loaded at an image base (0x10000000 by - # default) and relocated if they conflict, which is a slow very memory - # consuming and fragmenting process. To avoid this, we pick a random, - # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link - # time. Moving up from 0x10000000 also allows more sbrk(2) space. - archive_cmds_CXX='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' - archive_expsym_cmds_CXX='sed "s,^,_," $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--retain-symbols-file,$output_objdir/$soname.expsym ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' - ;; - irix5* | irix6*) - case $cc_basename in - CC*) - # SGI C++ - archive_cmds_CXX='$CC -shared -all -multigot $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib' - - # Archives containing C++ object files must be created using - # "CC -ar", where "CC" is the IRIX C++ compiler. This is - # necessary to make sure instantiated templates are included - # in the archive. - old_archive_cmds_CXX='$CC -ar -WR,-u -o $oldlib $oldobjs' - ;; - *) - if test "$GXX" = yes; then - if test "$with_gnu_ld" = no; then - archive_cmds_CXX='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' - else - archive_cmds_CXX='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` -o $lib' - fi - fi - link_all_deplibs_CXX=yes - ;; - esac - hardcode_libdir_flag_spec_CXX='${wl}-rpath ${wl}$libdir' - hardcode_libdir_separator_CXX=: - ;; - linux* | k*bsd*-gnu) - case $cc_basename in - KCC*) - # Kuck and Associates, Inc. (KAI) C++ Compiler - - # KCC will only create a shared library if the output file - # ends with ".so" (or ".sl" for HP-UX), so rename the library - # to its proper name (with version) after linking. - archive_cmds_CXX='tempext=`echo $shared_ext | $SED -e '\''s/\([^()0-9A-Za-z{}]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib' - archive_expsym_cmds_CXX='tempext=`echo $shared_ext | $SED -e '\''s/\([^()0-9A-Za-z{}]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib ${wl}-retain-symbols-file,$export_symbols; mv \$templib $lib' - # Commands to make compiler produce verbose output that lists - # what "hidden" libraries, object files and flags are used when - # linking a shared library. - # - # There doesn't appear to be a way to prevent this compiler from - # explicitly linking system object files so we need to strip them - # from the output so that they don't get included in the library - # dependencies. - output_verbose_link_cmd='templist=`$CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1 | grep "ld"`; rm -f libconftest$shared_ext; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; echo $list' - - hardcode_libdir_flag_spec_CXX='${wl}--rpath,$libdir' - export_dynamic_flag_spec_CXX='${wl}--export-dynamic' - - # Archives containing C++ object files must be created using - # "CC -Bstatic", where "CC" is the KAI C++ compiler. - old_archive_cmds_CXX='$CC -Bstatic -o $oldlib $oldobjs' - ;; - icpc*) - # Intel C++ - with_gnu_ld=yes - # version 8.0 and above of icpc choke on multiply defined symbols - # if we add $predep_objects and $postdep_objects, however 7.1 and - # earlier do not add the objects themselves. - case `$CC -V 2>&1` in - *"Version 7."*) - archive_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib' - archive_expsym_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' - ;; - *) # Version 8.0 or newer - tmp_idyn= - case $host_cpu in - ia64*) tmp_idyn=' -i_dynamic';; - esac - archive_cmds_CXX='$CC -shared'"$tmp_idyn"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' - archive_expsym_cmds_CXX='$CC -shared'"$tmp_idyn"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' - ;; - esac - archive_cmds_need_lc_CXX=no - hardcode_libdir_flag_spec_CXX='${wl}-rpath,$libdir' - export_dynamic_flag_spec_CXX='${wl}--export-dynamic' - whole_archive_flag_spec_CXX='${wl}--whole-archive$convenience ${wl}--no-whole-archive' - ;; - pgCC*) - # Portland Group C++ compiler - archive_cmds_CXX='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname -o $lib' - archive_expsym_cmds_CXX='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname ${wl}-retain-symbols-file ${wl}$export_symbols -o $lib' - - hardcode_libdir_flag_spec_CXX='${wl}--rpath ${wl}$libdir' - export_dynamic_flag_spec_CXX='${wl}--export-dynamic' - whole_archive_flag_spec_CXX='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $echo \"$new_convenience\"` ${wl}--no-whole-archive' - ;; - cxx*) - # Compaq C++ - archive_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib' - archive_expsym_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib ${wl}-retain-symbols-file $wl$export_symbols' - - runpath_var=LD_RUN_PATH - hardcode_libdir_flag_spec_CXX='-rpath $libdir' - hardcode_libdir_separator_CXX=: - - # Commands to make compiler produce verbose output that lists - # what "hidden" libraries, object files and flags are used when - # linking a shared library. - # - # There doesn't appear to be a way to prevent this compiler from - # explicitly linking system object files so we need to strip them - # from the output so that they don't get included in the library - # dependencies. - output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep "ld"`; templist=`echo $templist | $SED "s/\(^.*ld.*\)\( .*ld .*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; echo $list' - ;; - *) - case `$CC -V 2>&1 | sed 5q` in - *Sun\ C*) - # Sun C++ 5.9 - no_undefined_flag_CXX=' -zdefs' - archive_cmds_CXX='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' - archive_expsym_cmds_CXX='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-retain-symbols-file ${wl}$export_symbols' - hardcode_libdir_flag_spec_CXX='-R$libdir' - whole_archive_flag_spec_CXX='${wl}--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; $echo \"$new_convenience\"` ${wl}--no-whole-archive' - - # Not sure whether something based on - # $CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1 - # would be better. - output_verbose_link_cmd='echo' - - # Archives containing C++ object files must be created using - # "CC -xar", where "CC" is the Sun C++ compiler. This is - # necessary to make sure instantiated templates are included - # in the archive. - old_archive_cmds_CXX='$CC -xar -o $oldlib $oldobjs' - ;; - esac - ;; - esac - ;; - lynxos*) - # FIXME: insert proper C++ library support - ld_shlibs_CXX=no - ;; - m88k*) - # FIXME: insert proper C++ library support - ld_shlibs_CXX=no - ;; - mvs*) - case $cc_basename in - cxx*) - # FIXME: insert proper C++ library support - ld_shlibs_CXX=no - ;; - *) - # FIXME: insert proper C++ library support - ld_shlibs_CXX=no - ;; - esac - ;; - netbsd*) - if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then - archive_cmds_CXX='$LD -Bshareable -o $lib $predep_objects $libobjs $deplibs $postdep_objects $linker_flags' - wlarc= - hardcode_libdir_flag_spec_CXX='-R$libdir' - hardcode_direct_CXX=yes - hardcode_shlibpath_var_CXX=no - fi - # Workaround some broken pre-1.5 toolchains - output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep conftest.$objext | $SED -e "s:-lgcc -lc -lgcc::"' - ;; - openbsd2*) - # C++ shared libraries are fairly broken - ld_shlibs_CXX=no - ;; - openbsd*) - if test -f /usr/libexec/ld.so; then - hardcode_direct_CXX=yes - hardcode_shlibpath_var_CXX=no - archive_cmds_CXX='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib' - hardcode_libdir_flag_spec_CXX='${wl}-rpath,$libdir' - if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then - archive_expsym_cmds_CXX='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-retain-symbols-file,$export_symbols -o $lib' - export_dynamic_flag_spec_CXX='${wl}-E' - whole_archive_flag_spec_CXX="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' - fi - output_verbose_link_cmd='echo' - else - ld_shlibs_CXX=no - fi - ;; - osf3*) - case $cc_basename in - KCC*) - # Kuck and Associates, Inc. (KAI) C++ Compiler - - # KCC will only create a shared library if the output file - # ends with ".so" (or ".sl" for HP-UX), so rename the library - # to its proper name (with version) after linking. - archive_cmds_CXX='tempext=`echo $shared_ext | $SED -e '\''s/\([^()0-9A-Za-z{}]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib' - - hardcode_libdir_flag_spec_CXX='${wl}-rpath,$libdir' - hardcode_libdir_separator_CXX=: - - # Archives containing C++ object files must be created using - # "CC -Bstatic", where "CC" is the KAI C++ compiler. - old_archive_cmds_CXX='$CC -Bstatic -o $oldlib $oldobjs' - - ;; - RCC*) - # Rational C++ 2.4.1 - # FIXME: insert proper C++ library support - ld_shlibs_CXX=no - ;; - cxx*) - allow_undefined_flag_CXX=' ${wl}-expect_unresolved ${wl}\*' - archive_cmds_CXX='$CC -shared${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $soname `test -n "$verstring" && echo ${wl}-set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib' - - hardcode_libdir_flag_spec_CXX='${wl}-rpath ${wl}$libdir' - hardcode_libdir_separator_CXX=: - - # Commands to make compiler produce verbose output that lists - # what "hidden" libraries, object files and flags are used when - # linking a shared library. - # - # There doesn't appear to be a way to prevent this compiler from - # explicitly linking system object files so we need to strip them - # from the output so that they don't get included in the library - # dependencies. - output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep "ld" | grep -v "ld:"`; templist=`echo $templist | $SED "s/\(^.*ld.*\)\( .*ld.*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; echo $list' - ;; - *) - if test "$GXX" = yes && test "$with_gnu_ld" = no; then - allow_undefined_flag_CXX=' ${wl}-expect_unresolved ${wl}\*' - archive_cmds_CXX='$CC -shared -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' - - hardcode_libdir_flag_spec_CXX='${wl}-rpath ${wl}$libdir' - hardcode_libdir_separator_CXX=: - - # Commands to make compiler produce verbose output that lists - # what "hidden" libraries, object files and flags are used when - # linking a shared library. - output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep "\-L"' - - else - # FIXME: insert proper C++ library support - ld_shlibs_CXX=no - fi - ;; - esac - ;; - osf4* | osf5*) - case $cc_basename in - KCC*) - # Kuck and Associates, Inc. (KAI) C++ Compiler - - # KCC will only create a shared library if the output file - # ends with ".so" (or ".sl" for HP-UX), so rename the library - # to its proper name (with version) after linking. - archive_cmds_CXX='tempext=`echo $shared_ext | $SED -e '\''s/\([^()0-9A-Za-z{}]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib' - - hardcode_libdir_flag_spec_CXX='${wl}-rpath,$libdir' - hardcode_libdir_separator_CXX=: - - # Archives containing C++ object files must be created using - # the KAI C++ compiler. - old_archive_cmds_CXX='$CC -o $oldlib $oldobjs' - ;; - RCC*) - # Rational C++ 2.4.1 - # FIXME: insert proper C++ library support - ld_shlibs_CXX=no - ;; - cxx*) - allow_undefined_flag_CXX=' -expect_unresolved \*' - archive_cmds_CXX='$CC -shared${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib' - archive_expsym_cmds_CXX='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done~ - echo "-hidden">> $lib.exp~ - $CC -shared$allow_undefined_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname -Wl,-input -Wl,$lib.exp `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib~ - $rm $lib.exp' - - hardcode_libdir_flag_spec_CXX='-rpath $libdir' - hardcode_libdir_separator_CXX=: - - # Commands to make compiler produce verbose output that lists - # what "hidden" libraries, object files and flags are used when - # linking a shared library. - # - # There doesn't appear to be a way to prevent this compiler from - # explicitly linking system object files so we need to strip them - # from the output so that they don't get included in the library - # dependencies. - output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep "ld" | grep -v "ld:"`; templist=`echo $templist | $SED "s/\(^.*ld.*\)\( .*ld.*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; echo $list' - ;; - *) - if test "$GXX" = yes && test "$with_gnu_ld" = no; then - allow_undefined_flag_CXX=' ${wl}-expect_unresolved ${wl}\*' - archive_cmds_CXX='$CC -shared -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' - - hardcode_libdir_flag_spec_CXX='${wl}-rpath ${wl}$libdir' - hardcode_libdir_separator_CXX=: - - # Commands to make compiler produce verbose output that lists - # what "hidden" libraries, object files and flags are used when - # linking a shared library. - output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep "\-L"' - - else - # FIXME: insert proper C++ library support - ld_shlibs_CXX=no - fi - ;; - esac - ;; - psos*) - # FIXME: insert proper C++ library support - ld_shlibs_CXX=no - ;; - sunos4*) - case $cc_basename in - CC*) - # Sun C++ 4.x - # FIXME: insert proper C++ library support - ld_shlibs_CXX=no - ;; - lcc*) - # Lucid - # FIXME: insert proper C++ library support - ld_shlibs_CXX=no - ;; - *) - # FIXME: insert proper C++ library support - ld_shlibs_CXX=no - ;; - esac - ;; - solaris*) - case $cc_basename in - CC*) - # Sun C++ 4.2, 5.x and Centerline C++ - archive_cmds_need_lc_CXX=yes - no_undefined_flag_CXX=' -zdefs' - archive_cmds_CXX='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' - archive_expsym_cmds_CXX='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~ - $CC -G${allow_undefined_flag} ${wl}-M ${wl}$lib.exp -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$rm $lib.exp' - - hardcode_libdir_flag_spec_CXX='-R$libdir' - hardcode_shlibpath_var_CXX=no - case $host_os in - solaris2.[0-5] | solaris2.[0-5].*) ;; - *) - # The compiler driver will combine and reorder linker options, - # but understands `-z linker_flag'. - # Supported since Solaris 2.6 (maybe 2.5.1?) - whole_archive_flag_spec_CXX='-z allextract$convenience -z defaultextract' - ;; - esac - link_all_deplibs_CXX=yes - - output_verbose_link_cmd='echo' - - # Archives containing C++ object files must be created using - # "CC -xar", where "CC" is the Sun C++ compiler. This is - # necessary to make sure instantiated templates are included - # in the archive. - old_archive_cmds_CXX='$CC -xar -o $oldlib $oldobjs' - ;; - gcx*) - # Green Hills C++ Compiler - archive_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib' - - # The C++ compiler must be used to create the archive. - old_archive_cmds_CXX='$CC $LDFLAGS -archive -o $oldlib $oldobjs' - ;; - *) - # GNU C++ compiler with Solaris linker - if test "$GXX" = yes && test "$with_gnu_ld" = no; then - no_undefined_flag_CXX=' ${wl}-z ${wl}defs' - if $CC --version | grep -v '^2\.7' > /dev/null; then - archive_cmds_CXX='$CC -shared -nostdlib $LDFLAGS $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib' - archive_expsym_cmds_CXX='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~ - $CC -shared -nostdlib ${wl}-M $wl$lib.exp -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$rm $lib.exp' - - # Commands to make compiler produce verbose output that lists - # what "hidden" libraries, object files and flags are used when - # linking a shared library. - output_verbose_link_cmd="$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep \"\-L\"" - else - # g++ 2.7 appears to require `-G' NOT `-shared' on this - # platform. - archive_cmds_CXX='$CC -G -nostdlib $LDFLAGS $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib' - archive_expsym_cmds_CXX='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~ - $CC -G -nostdlib ${wl}-M $wl$lib.exp -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$rm $lib.exp' - - # Commands to make compiler produce verbose output that lists - # what "hidden" libraries, object files and flags are used when - # linking a shared library. - output_verbose_link_cmd="$CC -G $CFLAGS -v conftest.$objext 2>&1 | grep \"\-L\"" - fi - - hardcode_libdir_flag_spec_CXX='${wl}-R $wl$libdir' - case $host_os in - solaris2.[0-5] | solaris2.[0-5].*) ;; - *) - whole_archive_flag_spec_CXX='${wl}-z ${wl}allextract$convenience ${wl}-z ${wl}defaultextract' - ;; - esac - fi - ;; - esac - ;; - sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[01].[10]* | unixware7* | sco3.2v5.0.[024]*) - no_undefined_flag_CXX='${wl}-z,text' - archive_cmds_need_lc_CXX=no - hardcode_shlibpath_var_CXX=no - runpath_var='LD_RUN_PATH' - - case $cc_basename in - CC*) - archive_cmds_CXX='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - archive_expsym_cmds_CXX='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - ;; - *) - archive_cmds_CXX='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - archive_expsym_cmds_CXX='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - ;; - esac - ;; - sysv5* | sco3.2v5* | sco5v6*) - # Note: We can NOT use -z defs as we might desire, because we do not - # link with -lc, and that would cause any symbols used from libc to - # always be unresolved, which means just about no library would - # ever link correctly. If we're not using GNU ld we use -z text - # though, which does catch some bad symbols but isn't as heavy-handed - # as -z defs. - # For security reasons, it is highly recommended that you always - # use absolute paths for naming shared libraries, and exclude the - # DT_RUNPATH tag from executables and libraries. But doing so - # requires that you compile everything twice, which is a pain. - # So that behaviour is only enabled if SCOABSPATH is set to a - # non-empty value in the environment. Most likely only useful for - # creating official distributions of packages. - # This is a hack until libtool officially supports absolute path - # names for shared libraries. - no_undefined_flag_CXX='${wl}-z,text' - allow_undefined_flag_CXX='${wl}-z,nodefs' - archive_cmds_need_lc_CXX=no - hardcode_shlibpath_var_CXX=no - hardcode_libdir_flag_spec_CXX='`test -z "$SCOABSPATH" && echo ${wl}-R,$libdir`' - hardcode_libdir_separator_CXX=':' - link_all_deplibs_CXX=yes - export_dynamic_flag_spec_CXX='${wl}-Bexport' - runpath_var='LD_RUN_PATH' - - case $cc_basename in - CC*) - archive_cmds_CXX='$CC -G ${wl}-h,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags' - archive_expsym_cmds_CXX='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags' - ;; - *) - archive_cmds_CXX='$CC -shared ${wl}-h,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags' - archive_expsym_cmds_CXX='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags' - ;; - esac - ;; - tandem*) - case $cc_basename in - NCC*) - # NonStop-UX NCC 3.20 - # FIXME: insert proper C++ library support - ld_shlibs_CXX=no - ;; - *) - # FIXME: insert proper C++ library support - ld_shlibs_CXX=no - ;; - esac - ;; - vxworks*) - # FIXME: insert proper C++ library support - ld_shlibs_CXX=no - ;; - *) - # FIXME: insert proper C++ library support - ld_shlibs_CXX=no - ;; -esac -{ echo "$as_me:$LINENO: result: $ld_shlibs_CXX" >&5 -echo "${ECHO_T}$ld_shlibs_CXX" >&6; } -test "$ld_shlibs_CXX" = no && can_build_shared=no - -GCC_CXX="$GXX" -LD_CXX="$LD" - - -cat > conftest.$ac_ext <&5 - (eval $ac_compile) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; then - # Parse the compiler output and extract the necessary - # objects, libraries and library flags. - - # Sentinel used to keep track of whether or not we are before - # the conftest object file. - pre_test_object_deps_done=no - - # The `*' in the case matches for architectures that use `case' in - # $output_verbose_cmd can trigger glob expansion during the loop - # eval without this substitution. - output_verbose_link_cmd=`$echo "X$output_verbose_link_cmd" | $Xsed -e "$no_glob_subst"` - - for p in `eval $output_verbose_link_cmd`; do - case $p in - - -L* | -R* | -l*) - # Some compilers place space between "-{L,R}" and the path. - # Remove the space. - if test $p = "-L" \ - || test $p = "-R"; then - prev=$p - continue - else - prev= - fi - - if test "$pre_test_object_deps_done" = no; then - case $p in - -L* | -R*) - # Internal compiler library paths should come after those - # provided the user. The postdeps already come after the - # user supplied libs so there is no need to process them. - if test -z "$compiler_lib_search_path_CXX"; then - compiler_lib_search_path_CXX="${prev}${p}" - else - compiler_lib_search_path_CXX="${compiler_lib_search_path_CXX} ${prev}${p}" - fi - ;; - # The "-l" case would never come before the object being - # linked, so don't bother handling this case. - esac - else - if test -z "$postdeps_CXX"; then - postdeps_CXX="${prev}${p}" - else - postdeps_CXX="${postdeps_CXX} ${prev}${p}" - fi - fi - ;; - - *.$objext) - # This assumes that the test object file only shows up - # once in the compiler output. - if test "$p" = "conftest.$objext"; then - pre_test_object_deps_done=yes - continue - fi - - if test "$pre_test_object_deps_done" = no; then - if test -z "$predep_objects_CXX"; then - predep_objects_CXX="$p" - else - predep_objects_CXX="$predep_objects_CXX $p" - fi - else - if test -z "$postdep_objects_CXX"; then - postdep_objects_CXX="$p" - else - postdep_objects_CXX="$postdep_objects_CXX $p" - fi - fi - ;; - - *) ;; # Ignore the rest. - - esac - done - - # Clean up. - rm -f a.out a.exe -else - echo "libtool.m4: error: problem compiling CXX test program" -fi - -$rm -f confest.$objext - -# PORTME: override above test on systems where it is broken -case $host_os in -interix[3-9]*) - # Interix 3.5 installs completely hosed .la files for C++, so rather than - # hack all around it, let's just trust "g++" to DTRT. - predep_objects_CXX= - postdep_objects_CXX= - postdeps_CXX= - ;; - -linux*) - case `$CC -V 2>&1 | sed 5q` in - *Sun\ C*) - # Sun C++ 5.9 - # - # The more standards-conforming stlport4 library is - # incompatible with the Cstd library. Avoid specifying - # it if it's in CXXFLAGS. Ignore libCrun as - # -library=stlport4 depends on it. - case " $CXX $CXXFLAGS " in - *" -library=stlport4 "*) - solaris_use_stlport4=yes - ;; - esac - if test "$solaris_use_stlport4" != yes; then - postdeps_CXX='-library=Cstd -library=Crun' - fi - ;; - esac - ;; - -solaris*) - case $cc_basename in - CC*) - # The more standards-conforming stlport4 library is - # incompatible with the Cstd library. Avoid specifying - # it if it's in CXXFLAGS. Ignore libCrun as - # -library=stlport4 depends on it. - case " $CXX $CXXFLAGS " in - *" -library=stlport4 "*) - solaris_use_stlport4=yes - ;; - esac - - # Adding this requires a known-good setup of shared libraries for - # Sun compiler versions before 5.6, else PIC objects from an old - # archive will be linked into the output, leading to subtle bugs. - if test "$solaris_use_stlport4" != yes; then - postdeps_CXX='-library=Cstd -library=Crun' - fi - ;; - esac - ;; -esac - - -case " $postdeps_CXX " in -*" -lc "*) archive_cmds_need_lc_CXX=no ;; -esac - -lt_prog_compiler_wl_CXX= -lt_prog_compiler_pic_CXX= -lt_prog_compiler_static_CXX= - -{ echo "$as_me:$LINENO: checking for $compiler option to produce PIC" >&5 -echo $ECHO_N "checking for $compiler option to produce PIC... $ECHO_C" >&6; } - - # C++ specific cases for pic, static, wl, etc. - if test "$GXX" = yes; then - lt_prog_compiler_wl_CXX='-Wl,' - lt_prog_compiler_static_CXX='-static' - - case $host_os in - aix*) - # All AIX code is PIC. - if test "$host_cpu" = ia64; then - # AIX 5 now supports IA64 processor - lt_prog_compiler_static_CXX='-Bstatic' - fi - ;; - amigaos*) - # FIXME: we need at least 68020 code to build shared libraries, but - # adding the `-m68020' flag to GCC prevents building anything better, - # like `-m68040'. - lt_prog_compiler_pic_CXX='-m68020 -resident32 -malways-restore-a4' - ;; - beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) - # PIC is the default for these OSes. - ;; - mingw* | cygwin* | os2* | pw32*) - # This hack is so that the source file can tell whether it is being - # built for inclusion in a dll (and should export symbols for example). - # Although the cygwin gcc ignores -fPIC, still need this for old-style - # (--disable-auto-import) libraries - lt_prog_compiler_pic_CXX='-DDLL_EXPORT' - ;; - darwin* | rhapsody*) - # PIC is the default on this platform - # Common symbols not allowed in MH_DYLIB files - lt_prog_compiler_pic_CXX='-fno-common' - ;; - *djgpp*) - # DJGPP does not support shared libraries at all - lt_prog_compiler_pic_CXX= - ;; - interix[3-9]*) - # Interix 3.x gcc -fpic/-fPIC options generate broken code. - # Instead, we relocate shared libraries at runtime. - ;; - sysv4*MP*) - if test -d /usr/nec; then - lt_prog_compiler_pic_CXX=-Kconform_pic - fi - ;; - hpux*) - # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but - # not for PA HP-UX. - case $host_cpu in - hppa*64*|ia64*) - ;; - *) - lt_prog_compiler_pic_CXX='-fPIC' - ;; - esac - ;; - *) - lt_prog_compiler_pic_CXX='-fPIC' - ;; - esac - else - case $host_os in - aix4* | aix5*) - # All AIX code is PIC. - if test "$host_cpu" = ia64; then - # AIX 5 now supports IA64 processor - lt_prog_compiler_static_CXX='-Bstatic' - else - lt_prog_compiler_static_CXX='-bnso -bI:/lib/syscalls.exp' - fi - ;; - chorus*) - case $cc_basename in - cxch68*) - # Green Hills C++ Compiler - # _LT_AC_TAGVAR(lt_prog_compiler_static, CXX)="--no_auto_instantiation -u __main -u __premain -u _abort -r $COOL_DIR/lib/libOrb.a $MVME_DIR/lib/CC/libC.a $MVME_DIR/lib/classix/libcx.s.a" - ;; - esac - ;; - darwin*) - # PIC is the default on this platform - # Common symbols not allowed in MH_DYLIB files - case $cc_basename in - xlc*) - lt_prog_compiler_pic_CXX='-qnocommon' - lt_prog_compiler_wl_CXX='-Wl,' - ;; - esac - ;; - dgux*) - case $cc_basename in - ec++*) - lt_prog_compiler_pic_CXX='-KPIC' - ;; - ghcx*) - # Green Hills C++ Compiler - lt_prog_compiler_pic_CXX='-pic' - ;; - *) - ;; - esac - ;; - freebsd* | dragonfly*) - # FreeBSD uses GNU C++ - ;; - hpux9* | hpux10* | hpux11*) - case $cc_basename in - CC*) - lt_prog_compiler_wl_CXX='-Wl,' - lt_prog_compiler_static_CXX='${wl}-a ${wl}archive' - if test "$host_cpu" != ia64; then - lt_prog_compiler_pic_CXX='+Z' - fi - ;; - aCC*) - lt_prog_compiler_wl_CXX='-Wl,' - lt_prog_compiler_static_CXX='${wl}-a ${wl}archive' - case $host_cpu in - hppa*64*|ia64*) - # +Z the default - ;; - *) - lt_prog_compiler_pic_CXX='+Z' - ;; - esac - ;; - *) - ;; - esac - ;; - interix*) - # This is c89, which is MS Visual C++ (no shared libs) - # Anyone wants to do a port? - ;; - irix5* | irix6* | nonstopux*) - case $cc_basename in - CC*) - lt_prog_compiler_wl_CXX='-Wl,' - lt_prog_compiler_static_CXX='-non_shared' - # CC pic flag -KPIC is the default. - ;; - *) - ;; - esac - ;; - linux* | k*bsd*-gnu) - case $cc_basename in - KCC*) - # KAI C++ Compiler - lt_prog_compiler_wl_CXX='--backend -Wl,' - lt_prog_compiler_pic_CXX='-fPIC' - ;; - icpc* | ecpc*) - # Intel C++ - lt_prog_compiler_wl_CXX='-Wl,' - lt_prog_compiler_pic_CXX='-KPIC' - lt_prog_compiler_static_CXX='-static' - ;; - pgCC*) - # Portland Group C++ compiler. - lt_prog_compiler_wl_CXX='-Wl,' - lt_prog_compiler_pic_CXX='-fpic' - lt_prog_compiler_static_CXX='-Bstatic' - ;; - cxx*) - # Compaq C++ - # Make sure the PIC flag is empty. It appears that all Alpha - # Linux and Compaq Tru64 Unix objects are PIC. - lt_prog_compiler_pic_CXX= - lt_prog_compiler_static_CXX='-non_shared' - ;; - *) - case `$CC -V 2>&1 | sed 5q` in - *Sun\ C*) - # Sun C++ 5.9 - lt_prog_compiler_pic_CXX='-KPIC' - lt_prog_compiler_static_CXX='-Bstatic' - lt_prog_compiler_wl_CXX='-Qoption ld ' - ;; - esac - ;; - esac - ;; - lynxos*) - ;; - m88k*) - ;; - mvs*) - case $cc_basename in - cxx*) - lt_prog_compiler_pic_CXX='-W c,exportall' - ;; - *) - ;; - esac - ;; - netbsd*) - ;; - osf3* | osf4* | osf5*) - case $cc_basename in - KCC*) - lt_prog_compiler_wl_CXX='--backend -Wl,' - ;; - RCC*) - # Rational C++ 2.4.1 - lt_prog_compiler_pic_CXX='-pic' - ;; - cxx*) - # Digital/Compaq C++ - lt_prog_compiler_wl_CXX='-Wl,' - # Make sure the PIC flag is empty. It appears that all Alpha - # Linux and Compaq Tru64 Unix objects are PIC. - lt_prog_compiler_pic_CXX= - lt_prog_compiler_static_CXX='-non_shared' - ;; - *) - ;; - esac - ;; - psos*) - ;; - solaris*) - case $cc_basename in - CC*) - # Sun C++ 4.2, 5.x and Centerline C++ - lt_prog_compiler_pic_CXX='-KPIC' - lt_prog_compiler_static_CXX='-Bstatic' - lt_prog_compiler_wl_CXX='-Qoption ld ' - ;; - gcx*) - # Green Hills C++ Compiler - lt_prog_compiler_pic_CXX='-PIC' - ;; - *) - ;; - esac - ;; - sunos4*) - case $cc_basename in - CC*) - # Sun C++ 4.x - lt_prog_compiler_pic_CXX='-pic' - lt_prog_compiler_static_CXX='-Bstatic' - ;; - lcc*) - # Lucid - lt_prog_compiler_pic_CXX='-pic' - ;; - *) - ;; - esac - ;; - tandem*) - case $cc_basename in - NCC*) - # NonStop-UX NCC 3.20 - lt_prog_compiler_pic_CXX='-KPIC' - ;; - *) - ;; - esac - ;; - sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*) - case $cc_basename in - CC*) - lt_prog_compiler_wl_CXX='-Wl,' - lt_prog_compiler_pic_CXX='-KPIC' - lt_prog_compiler_static_CXX='-Bstatic' - ;; - esac - ;; - vxworks*) - ;; - *) - lt_prog_compiler_can_build_shared_CXX=no - ;; - esac - fi - -{ echo "$as_me:$LINENO: result: $lt_prog_compiler_pic_CXX" >&5 -echo "${ECHO_T}$lt_prog_compiler_pic_CXX" >&6; } - -# -# Check to make sure the PIC flag actually works. -# -if test -n "$lt_prog_compiler_pic_CXX"; then - -{ echo "$as_me:$LINENO: checking if $compiler PIC flag $lt_prog_compiler_pic_CXX works" >&5 -echo $ECHO_N "checking if $compiler PIC flag $lt_prog_compiler_pic_CXX works... $ECHO_C" >&6; } -if test "${lt_prog_compiler_pic_works_CXX+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - lt_prog_compiler_pic_works_CXX=no - ac_outfile=conftest.$ac_objext - echo "$lt_simple_compile_test_code" > conftest.$ac_ext - lt_compiler_flag="$lt_prog_compiler_pic_CXX -DPIC" - # Insert the option either (1) after the last *FLAGS variable, or - # (2) before a word containing "conftest.", or (3) at the end. - # Note that $ac_compile itself does not contain backslashes and begins - # with a dollar sign (not a hyphen), so the echo should work correctly. - # The option is referenced via a variable to avoid confusing sed. - lt_compile=`echo "$ac_compile" | $SED \ - -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ - -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ - -e 's:$: $lt_compiler_flag:'` - (eval echo "\"\$as_me:12701: $lt_compile\"" >&5) - (eval "$lt_compile" 2>conftest.err) - ac_status=$? - cat conftest.err >&5 - echo "$as_me:12705: \$? = $ac_status" >&5 - if (exit $ac_status) && test -s "$ac_outfile"; then - # The compiler can only warn and ignore the option if not recognized - # So say no if there are warnings other than the usual output. - $echo "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' >conftest.exp - $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 - if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then - lt_prog_compiler_pic_works_CXX=yes - fi - fi - $rm conftest* - -fi -{ echo "$as_me:$LINENO: result: $lt_prog_compiler_pic_works_CXX" >&5 -echo "${ECHO_T}$lt_prog_compiler_pic_works_CXX" >&6; } - -if test x"$lt_prog_compiler_pic_works_CXX" = xyes; then - case $lt_prog_compiler_pic_CXX in - "" | " "*) ;; - *) lt_prog_compiler_pic_CXX=" $lt_prog_compiler_pic_CXX" ;; - esac -else - lt_prog_compiler_pic_CXX= - lt_prog_compiler_can_build_shared_CXX=no -fi - -fi -case $host_os in - # For platforms which do not support PIC, -DPIC is meaningless: - *djgpp*) - lt_prog_compiler_pic_CXX= - ;; - *) - lt_prog_compiler_pic_CXX="$lt_prog_compiler_pic_CXX -DPIC" - ;; -esac - -# -# Check to make sure the static flag actually works. -# -wl=$lt_prog_compiler_wl_CXX eval lt_tmp_static_flag=\"$lt_prog_compiler_static_CXX\" -{ echo "$as_me:$LINENO: checking if $compiler static flag $lt_tmp_static_flag works" >&5 -echo $ECHO_N "checking if $compiler static flag $lt_tmp_static_flag works... $ECHO_C" >&6; } -if test "${lt_prog_compiler_static_works_CXX+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - lt_prog_compiler_static_works_CXX=no - save_LDFLAGS="$LDFLAGS" - LDFLAGS="$LDFLAGS $lt_tmp_static_flag" - echo "$lt_simple_link_test_code" > conftest.$ac_ext - if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then - # The linker can only warn and ignore the option if not recognized - # So say no if there are warnings - if test -s conftest.err; then - # Append any errors to the config.log. - cat conftest.err 1>&5 - $echo "X$_lt_linker_boilerplate" | $Xsed -e '/^$/d' > conftest.exp - $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 - if diff conftest.exp conftest.er2 >/dev/null; then - lt_prog_compiler_static_works_CXX=yes - fi - else - lt_prog_compiler_static_works_CXX=yes - fi - fi - $rm conftest* - LDFLAGS="$save_LDFLAGS" - -fi -{ echo "$as_me:$LINENO: result: $lt_prog_compiler_static_works_CXX" >&5 -echo "${ECHO_T}$lt_prog_compiler_static_works_CXX" >&6; } - -if test x"$lt_prog_compiler_static_works_CXX" = xyes; then - : -else - lt_prog_compiler_static_CXX= -fi - - -{ echo "$as_me:$LINENO: checking if $compiler supports -c -o file.$ac_objext" >&5 -echo $ECHO_N "checking if $compiler supports -c -o file.$ac_objext... $ECHO_C" >&6; } -if test "${lt_cv_prog_compiler_c_o_CXX+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - lt_cv_prog_compiler_c_o_CXX=no - $rm -r conftest 2>/dev/null - mkdir conftest - cd conftest - mkdir out - echo "$lt_simple_compile_test_code" > conftest.$ac_ext - - lt_compiler_flag="-o out/conftest2.$ac_objext" - # Insert the option either (1) after the last *FLAGS variable, or - # (2) before a word containing "conftest.", or (3) at the end. - # Note that $ac_compile itself does not contain backslashes and begins - # with a dollar sign (not a hyphen), so the echo should work correctly. - lt_compile=`echo "$ac_compile" | $SED \ - -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ - -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ - -e 's:$: $lt_compiler_flag:'` - (eval echo "\"\$as_me:12805: $lt_compile\"" >&5) - (eval "$lt_compile" 2>out/conftest.err) - ac_status=$? - cat out/conftest.err >&5 - echo "$as_me:12809: \$? = $ac_status" >&5 - if (exit $ac_status) && test -s out/conftest2.$ac_objext - then - # The compiler can only warn and ignore the option if not recognized - # So say no if there are warnings - $echo "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' > out/conftest.exp - $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2 - if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then - lt_cv_prog_compiler_c_o_CXX=yes - fi - fi - chmod u+w . 2>&5 - $rm conftest* - # SGI C++ compiler will create directory out/ii_files/ for - # template instantiation - test -d out/ii_files && $rm out/ii_files/* && rmdir out/ii_files - $rm out/* && rmdir out - cd .. - rmdir conftest - $rm conftest* - -fi -{ echo "$as_me:$LINENO: result: $lt_cv_prog_compiler_c_o_CXX" >&5 -echo "${ECHO_T}$lt_cv_prog_compiler_c_o_CXX" >&6; } - - -hard_links="nottested" -if test "$lt_cv_prog_compiler_c_o_CXX" = no && test "$need_locks" != no; then - # do not overwrite the value of need_locks provided by the user - { echo "$as_me:$LINENO: checking if we can lock with hard links" >&5 -echo $ECHO_N "checking if we can lock with hard links... $ECHO_C" >&6; } - hard_links=yes - $rm conftest* - ln conftest.a conftest.b 2>/dev/null && hard_links=no - touch conftest.a - ln conftest.a conftest.b 2>&5 || hard_links=no - ln conftest.a conftest.b 2>/dev/null && hard_links=no - { echo "$as_me:$LINENO: result: $hard_links" >&5 -echo "${ECHO_T}$hard_links" >&6; } - if test "$hard_links" = no; then - { echo "$as_me:$LINENO: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&5 -echo "$as_me: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&2;} - need_locks=warn - fi -else - need_locks=no -fi - -{ echo "$as_me:$LINENO: checking whether the $compiler linker ($LD) supports shared libraries" >&5 -echo $ECHO_N "checking whether the $compiler linker ($LD) supports shared libraries... $ECHO_C" >&6; } - - export_symbols_cmds_CXX='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' - case $host_os in - aix4* | aix5*) - # If we're using GNU nm, then we don't want the "-C" option. - # -C means demangle to AIX nm, but means don't demangle with GNU nm - if $NM -V 2>&1 | grep 'GNU' > /dev/null; then - export_symbols_cmds_CXX='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$2 == "T") || (\$2 == "D") || (\$2 == "B")) && (substr(\$3,1,1) != ".")) { print \$3 } }'\'' | sort -u > $export_symbols' - else - export_symbols_cmds_CXX='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$2 == "T") || (\$2 == "D") || (\$2 == "B")) && (substr(\$3,1,1) != ".")) { print \$3 } }'\'' | sort -u > $export_symbols' - fi - ;; - pw32*) - export_symbols_cmds_CXX="$ltdll_cmds" - ;; - cygwin* | mingw*) - export_symbols_cmds_CXX='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS][ ]/s/.*[ ]\([^ ]*\)/\1 DATA/;/^.*[ ]__nm__/s/^.*[ ]__nm__\([^ ]*\)[ ][^ ]*/\1 DATA/;/^I[ ]/d;/^[AITW][ ]/s/.*[ ]//'\'' | sort | uniq > $export_symbols' - ;; - *) - export_symbols_cmds_CXX='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' - ;; - esac - -{ echo "$as_me:$LINENO: result: $ld_shlibs_CXX" >&5 -echo "${ECHO_T}$ld_shlibs_CXX" >&6; } -test "$ld_shlibs_CXX" = no && can_build_shared=no - -# -# Do we need to explicitly link libc? -# -case "x$archive_cmds_need_lc_CXX" in -x|xyes) - # Assume -lc should be added - archive_cmds_need_lc_CXX=yes - - if test "$enable_shared" = yes && test "$GCC" = yes; then - case $archive_cmds_CXX in - *'~'*) - # FIXME: we may have to deal with multi-command sequences. - ;; - '$CC '*) - # Test whether the compiler implicitly links with -lc since on some - # systems, -lgcc has to come before -lc. If gcc already passes -lc - # to ld, don't add -lc before -lgcc. - { echo "$as_me:$LINENO: checking whether -lc should be explicitly linked in" >&5 -echo $ECHO_N "checking whether -lc should be explicitly linked in... $ECHO_C" >&6; } - $rm conftest* - echo "$lt_simple_compile_test_code" > conftest.$ac_ext - - if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } 2>conftest.err; then - soname=conftest - lib=conftest - libobjs=conftest.$ac_objext - deplibs= - wl=$lt_prog_compiler_wl_CXX - pic_flag=$lt_prog_compiler_pic_CXX - compiler_flags=-v - linker_flags=-v - verstring= - output_objdir=. - libname=conftest - lt_save_allow_undefined_flag=$allow_undefined_flag_CXX - allow_undefined_flag_CXX= - if { (eval echo "$as_me:$LINENO: \"$archive_cmds_CXX 2\>\&1 \| grep \" -lc \" \>/dev/null 2\>\&1\"") >&5 - (eval $archive_cmds_CXX 2\>\&1 \| grep \" -lc \" \>/dev/null 2\>\&1) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } - then - archive_cmds_need_lc_CXX=no - else - archive_cmds_need_lc_CXX=yes - fi - allow_undefined_flag_CXX=$lt_save_allow_undefined_flag - else - cat conftest.err 1>&5 - fi - $rm conftest* - { echo "$as_me:$LINENO: result: $archive_cmds_need_lc_CXX" >&5 -echo "${ECHO_T}$archive_cmds_need_lc_CXX" >&6; } - ;; - esac - fi - ;; -esac - -{ echo "$as_me:$LINENO: checking dynamic linker characteristics" >&5 -echo $ECHO_N "checking dynamic linker characteristics... $ECHO_C" >&6; } -library_names_spec= -libname_spec='lib$name' -soname_spec= -shrext_cmds=".so" -postinstall_cmds= -postuninstall_cmds= -finish_cmds= -finish_eval= -shlibpath_var= -shlibpath_overrides_runpath=unknown -version_type=none -dynamic_linker="$host_os ld.so" -sys_lib_dlsearch_path_spec="/lib /usr/lib" - -need_lib_prefix=unknown -hardcode_into_libs=no - -# when you set need_version to no, make sure it does not cause -set_version -# flags to be left without arguments -need_version=unknown - -case $host_os in -aix3*) - version_type=linux - library_names_spec='${libname}${release}${shared_ext}$versuffix $libname.a' - shlibpath_var=LIBPATH - - # AIX 3 has no versioning support, so we append a major version to the name. - soname_spec='${libname}${release}${shared_ext}$major' - ;; - -aix4* | aix5*) - version_type=linux - need_lib_prefix=no - need_version=no - hardcode_into_libs=yes - if test "$host_cpu" = ia64; then - # AIX 5 supports IA64 - library_names_spec='${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext}$versuffix $libname${shared_ext}' - shlibpath_var=LD_LIBRARY_PATH - else - # With GCC up to 2.95.x, collect2 would create an import file - # for dependence libraries. The import file would start with - # the line `#! .'. This would cause the generated library to - # depend on `.', always an invalid library. This was fixed in - # development snapshots of GCC prior to 3.0. - case $host_os in - aix4 | aix4.[01] | aix4.[01].*) - if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)' - echo ' yes ' - echo '#endif'; } | ${CC} -E - | grep yes > /dev/null; then - : - else - can_build_shared=no - fi - ;; - esac - # AIX (on Power*) has no versioning support, so currently we can not hardcode correct - # soname into executable. Probably we can add versioning support to - # collect2, so additional links can be useful in future. - if test "$aix_use_runtimelinking" = yes; then - # If using run time linking (on AIX 4.2 or later) use lib.so - # instead of lib.a to let people know that these are not - # typical AIX shared libraries. - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - else - # We preserve .a as extension for shared libraries through AIX4.2 - # and later when we are not doing run time linking. - library_names_spec='${libname}${release}.a $libname.a' - soname_spec='${libname}${release}${shared_ext}$major' - fi - shlibpath_var=LIBPATH - fi - ;; - -amigaos*) - library_names_spec='$libname.ixlibrary $libname.a' - # Create ${libname}_ixlibrary.a entries in /sys/libs. - finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`$echo "X$lib" | $Xsed -e '\''s%^.*/\([^/]*\)\.ixlibrary$%\1%'\''`; test $rm /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done' - ;; - -beos*) - library_names_spec='${libname}${shared_ext}' - dynamic_linker="$host_os ld.so" - shlibpath_var=LIBRARY_PATH - ;; - -bsdi[45]*) - version_type=linux - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir' - shlibpath_var=LD_LIBRARY_PATH - sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib" - sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib" - # the default ld.so.conf also contains /usr/contrib/lib and - # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow - # libtool to hard-code these into programs - ;; - -cygwin* | mingw* | pw32*) - version_type=windows - shrext_cmds=".dll" - need_version=no - need_lib_prefix=no - - case $GCC,$host_os in - yes,cygwin* | yes,mingw* | yes,pw32*) - library_names_spec='$libname.dll.a' - # DLL is installed to $(libdir)/../bin by postinstall_cmds - postinstall_cmds='base_file=`basename \${file}`~ - dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i;echo \$dlname'\''`~ - dldir=$destdir/`dirname \$dlpath`~ - test -d \$dldir || mkdir -p \$dldir~ - $install_prog $dir/$dlname \$dldir/$dlname~ - chmod a+x \$dldir/$dlname' - postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ - dlpath=$dir/\$dldll~ - $rm \$dlpath' - shlibpath_overrides_runpath=yes - - case $host_os in - cygwin*) - # Cygwin DLLs use 'cyg' prefix rather than 'lib' - soname_spec='`echo ${libname} | sed -e 's/^lib/cyg/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' - sys_lib_search_path_spec="/usr/lib /lib/w32api /lib /usr/local/lib" - ;; - mingw*) - # MinGW DLLs use traditional 'lib' prefix - soname_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' - sys_lib_search_path_spec=`$CC -print-search-dirs | grep "^libraries:" | $SED -e "s/^libraries://" -e "s,=/,/,g"` - if echo "$sys_lib_search_path_spec" | grep ';[c-zC-Z]:/' >/dev/null; then - # It is most probably a Windows format PATH printed by - # mingw gcc, but we are running on Cygwin. Gcc prints its search - # path with ; separators, and with drive letters. We can handle the - # drive letters (cygwin fileutils understands them), so leave them, - # especially as we might pass files found there to a mingw objdump, - # which wouldn't understand a cygwinified path. Ahh. - sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'` - else - sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` - fi - ;; - pw32*) - # pw32 DLLs use 'pw' prefix rather than 'lib' - library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' - ;; - esac - ;; - - *) - library_names_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext} $libname.lib' - ;; - esac - dynamic_linker='Win32 ld.exe' - # FIXME: first we should search . and the directory the executable is in - shlibpath_var=PATH - ;; - -darwin* | rhapsody*) - dynamic_linker="$host_os dyld" - version_type=darwin - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${versuffix}$shared_ext ${libname}${release}${major}$shared_ext ${libname}$shared_ext' - soname_spec='${libname}${release}${major}$shared_ext' - shlibpath_overrides_runpath=yes - shlibpath_var=DYLD_LIBRARY_PATH - shrext_cmds='`test .$module = .yes && echo .so || echo .dylib`' - - sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib' - ;; - -dgux*) - version_type=linux - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname$shared_ext' - soname_spec='${libname}${release}${shared_ext}$major' - shlibpath_var=LD_LIBRARY_PATH - ;; - -freebsd1*) - dynamic_linker=no - ;; - -freebsd* | dragonfly*) - # DragonFly does not have aout. When/if they implement a new - # versioning mechanism, adjust this. - if test -x /usr/bin/objformat; then - objformat=`/usr/bin/objformat` - else - case $host_os in - freebsd[123]*) objformat=aout ;; - *) objformat=elf ;; - esac - fi - version_type=freebsd-$objformat - case $version_type in - freebsd-elf*) - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' - need_version=no - need_lib_prefix=no - ;; - freebsd-*) - library_names_spec='${libname}${release}${shared_ext}$versuffix $libname${shared_ext}$versuffix' - need_version=yes - ;; - esac - shlibpath_var=LD_LIBRARY_PATH - case $host_os in - freebsd2*) - shlibpath_overrides_runpath=yes - ;; - freebsd3.[01]* | freebsdelf3.[01]*) - shlibpath_overrides_runpath=yes - hardcode_into_libs=yes - ;; - freebsd3.[2-9]* | freebsdelf3.[2-9]* | \ - freebsd4.[0-5] | freebsdelf4.[0-5] | freebsd4.1.1 | freebsdelf4.1.1) - shlibpath_overrides_runpath=no - hardcode_into_libs=yes - ;; - *) # from 4.6 on, and DragonFly - shlibpath_overrides_runpath=yes - hardcode_into_libs=yes - ;; - esac - ;; - -gnu*) - version_type=linux - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - shlibpath_var=LD_LIBRARY_PATH - hardcode_into_libs=yes - ;; - -hpux9* | hpux10* | hpux11*) - # Give a soname corresponding to the major version so that dld.sl refuses to - # link against other versions. - version_type=sunos - need_lib_prefix=no - need_version=no - case $host_cpu in - ia64*) - shrext_cmds='.so' - hardcode_into_libs=yes - dynamic_linker="$host_os dld.so" - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - if test "X$HPUX_IA64_MODE" = X32; then - sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib" - else - sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64" - fi - sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec - ;; - hppa*64*) - shrext_cmds='.sl' - hardcode_into_libs=yes - dynamic_linker="$host_os dld.sl" - shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH - shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64" - sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec - ;; - *) - shrext_cmds='.sl' - dynamic_linker="$host_os dld.sl" - shlibpath_var=SHLIB_PATH - shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - ;; - esac - # HP-UX runs *really* slowly unless shared libraries are mode 555. - postinstall_cmds='chmod 555 $lib' - ;; - -interix[3-9]*) - version_type=linux - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - dynamic_linker='Interix 3.x ld.so.1 (PE, like ELF)' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=no - hardcode_into_libs=yes - ;; - -irix5* | irix6* | nonstopux*) - case $host_os in - nonstopux*) version_type=nonstopux ;; - *) - if test "$lt_cv_prog_gnu_ld" = yes; then - version_type=linux - else - version_type=irix - fi ;; - esac - need_lib_prefix=no - need_version=no - soname_spec='${libname}${release}${shared_ext}$major' - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext} $libname${shared_ext}' - case $host_os in - irix5* | nonstopux*) - libsuff= shlibsuff= - ;; - *) - case $LD in # libtool.m4 will add one of these switches to LD - *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ") - libsuff= shlibsuff= libmagic=32-bit;; - *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ") - libsuff=32 shlibsuff=N32 libmagic=N32;; - *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ") - libsuff=64 shlibsuff=64 libmagic=64-bit;; - *) libsuff= shlibsuff= libmagic=never-match;; - esac - ;; - esac - shlibpath_var=LD_LIBRARY${shlibsuff}_PATH - shlibpath_overrides_runpath=no - sys_lib_search_path_spec="/usr/lib${libsuff} /lib${libsuff} /usr/local/lib${libsuff}" - sys_lib_dlsearch_path_spec="/usr/lib${libsuff} /lib${libsuff}" - hardcode_into_libs=yes - ;; - -# No shared lib support for Linux oldld, aout, or coff. -linux*oldld* | linux*aout* | linux*coff*) - dynamic_linker=no - ;; - -# This must be Linux ELF. -linux* | k*bsd*-gnu) - version_type=linux - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=no - # This implies no fast_install, which is unacceptable. - # Some rework will be needed to allow for fast_install - # before this can be enabled. - hardcode_into_libs=yes - sys_lib_search_path_spec="/usr/lib${libsuff} /lib${libsuff} /usr/local/lib${libsuff}" - sys_lib_dlsearch_path_spec="/usr/lib${libsuff} /lib${libsuff}" - - # Append ld.so.conf contents to the search path - if test -f /etc/ld.so.conf; then - lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s 2>/dev/null", \$2)); skip = 1; } { if (!skip) print \$0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;/^[ ]*hwcap[ ]/d;s/[:, ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;/^$/d' | tr '\n' ' '` - sys_lib_dlsearch_path_spec="$sys_lib_dlsearch_path_spec $lt_ld_extra" - fi - - # We used to test for /lib/ld.so.1 and disable shared libraries on - # powerpc, because MkLinux only supported shared libraries with the - # GNU dynamic linker. Since this was broken with cross compilers, - # most powerpc-linux boxes support dynamic linking these days and - # people can always --disable-shared, the test was removed, and we - # assume the GNU/Linux dynamic linker is in use. - dynamic_linker='GNU/Linux ld.so' - ;; - -netbsd*) - version_type=sunos - need_lib_prefix=no - need_version=no - if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' - finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' - dynamic_linker='NetBSD (a.out) ld.so' - else - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - dynamic_linker='NetBSD ld.elf_so' - fi - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=yes - hardcode_into_libs=yes - ;; - -newsos6) - version_type=linux - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=yes - ;; - -nto-qnx*) - version_type=linux - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=yes - ;; - -openbsd*) - version_type=sunos - sys_lib_dlsearch_path_spec="/usr/lib" - need_lib_prefix=no - # Some older versions of OpenBSD (3.3 at least) *do* need versioned libs. - case $host_os in - openbsd3.3 | openbsd3.3.*) need_version=yes ;; - *) need_version=no ;; - esac - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' - finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' - shlibpath_var=LD_LIBRARY_PATH - if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then - case $host_os in - openbsd2.[89] | openbsd2.[89].*) - shlibpath_overrides_runpath=no - ;; - *) - shlibpath_overrides_runpath=yes - ;; - esac - else - shlibpath_overrides_runpath=yes - fi - ;; - -os2*) - libname_spec='$name' - shrext_cmds=".dll" - need_lib_prefix=no - library_names_spec='$libname${shared_ext} $libname.a' - dynamic_linker='OS/2 ld.exe' - shlibpath_var=LIBPATH - ;; - -osf3* | osf4* | osf5*) - version_type=osf - need_lib_prefix=no - need_version=no - soname_spec='${libname}${release}${shared_ext}$major' - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - shlibpath_var=LD_LIBRARY_PATH - sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib" - sys_lib_dlsearch_path_spec="$sys_lib_search_path_spec" - ;; - -rdos*) - dynamic_linker=no - ;; - -solaris*) - version_type=linux - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=yes - hardcode_into_libs=yes - # ldd complains unless libraries are executable - postinstall_cmds='chmod +x $lib' - ;; - -sunos4*) - version_type=sunos - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' - finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=yes - if test "$with_gnu_ld" = yes; then - need_lib_prefix=no - fi - need_version=yes - ;; - -sysv4 | sysv4.3*) - version_type=linux - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - shlibpath_var=LD_LIBRARY_PATH - case $host_vendor in - sni) - shlibpath_overrides_runpath=no - need_lib_prefix=no - export_dynamic_flag_spec='${wl}-Blargedynsym' - runpath_var=LD_RUN_PATH - ;; - siemens) - need_lib_prefix=no - ;; - motorola) - need_lib_prefix=no - need_version=no - shlibpath_overrides_runpath=no - sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib' - ;; - esac - ;; - -sysv4*MP*) - if test -d /usr/nec ;then - version_type=linux - library_names_spec='$libname${shared_ext}.$versuffix $libname${shared_ext}.$major $libname${shared_ext}' - soname_spec='$libname${shared_ext}.$major' - shlibpath_var=LD_LIBRARY_PATH - fi - ;; - -sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) - version_type=freebsd-elf - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - shlibpath_var=LD_LIBRARY_PATH - hardcode_into_libs=yes - if test "$with_gnu_ld" = yes; then - sys_lib_search_path_spec='/usr/local/lib /usr/gnu/lib /usr/ccs/lib /usr/lib /lib' - shlibpath_overrides_runpath=no - else - sys_lib_search_path_spec='/usr/ccs/lib /usr/lib' - shlibpath_overrides_runpath=yes - case $host_os in - sco3.2v5*) - sys_lib_search_path_spec="$sys_lib_search_path_spec /lib" - ;; - esac - fi - sys_lib_dlsearch_path_spec='/usr/lib' - ;; - -uts4*) - version_type=linux - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - shlibpath_var=LD_LIBRARY_PATH - ;; - -*) - dynamic_linker=no - ;; -esac -{ echo "$as_me:$LINENO: result: $dynamic_linker" >&5 -echo "${ECHO_T}$dynamic_linker" >&6; } -test "$dynamic_linker" = no && can_build_shared=no - -variables_saved_for_relink="PATH $shlibpath_var $runpath_var" -if test "$GCC" = yes; then - variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH" -fi - -{ echo "$as_me:$LINENO: checking how to hardcode library paths into programs" >&5 -echo $ECHO_N "checking how to hardcode library paths into programs... $ECHO_C" >&6; } -hardcode_action_CXX= -if test -n "$hardcode_libdir_flag_spec_CXX" || \ - test -n "$runpath_var_CXX" || \ - test "X$hardcode_automatic_CXX" = "Xyes" ; then - - # We can hardcode non-existent directories. - if test "$hardcode_direct_CXX" != no && - # If the only mechanism to avoid hardcoding is shlibpath_var, we - # have to relink, otherwise we might link with an installed library - # when we should be linking with a yet-to-be-installed one - ## test "$_LT_AC_TAGVAR(hardcode_shlibpath_var, CXX)" != no && - test "$hardcode_minus_L_CXX" != no; then - # Linking always hardcodes the temporary library directory. - hardcode_action_CXX=relink - else - # We can link without hardcoding, and we can hardcode nonexisting dirs. - hardcode_action_CXX=immediate - fi -else - # We cannot hardcode anything, or else we can only hardcode existing - # directories. - hardcode_action_CXX=unsupported -fi -{ echo "$as_me:$LINENO: result: $hardcode_action_CXX" >&5 -echo "${ECHO_T}$hardcode_action_CXX" >&6; } - -if test "$hardcode_action_CXX" = relink; then - # Fast installation is not supported - enable_fast_install=no -elif test "$shlibpath_overrides_runpath" = yes || - test "$enable_shared" = no; then - # Fast installation is not necessary - enable_fast_install=needless -fi - - -# The else clause should only fire when bootstrapping the -# libtool distribution, otherwise you forgot to ship ltmain.sh -# with your package, and you will get complaints that there are -# no rules to generate ltmain.sh. -if test -f "$ltmain"; then - # See if we are running on zsh, and set the options which allow our commands through - # without removal of \ escapes. - if test -n "${ZSH_VERSION+set}" ; then - setopt NO_GLOB_SUBST - fi - # Now quote all the things that may contain metacharacters while being - # careful not to overquote the AC_SUBSTed values. We take copies of the - # variables and quote the copies for generation of the libtool script. - for var in echo old_CC old_CFLAGS AR AR_FLAGS EGREP RANLIB LN_S LTCC LTCFLAGS NM \ - SED SHELL STRIP \ - libname_spec library_names_spec soname_spec extract_expsyms_cmds \ - old_striplib striplib file_magic_cmd finish_cmds finish_eval \ - deplibs_check_method reload_flag reload_cmds need_locks \ - lt_cv_sys_global_symbol_pipe lt_cv_sys_global_symbol_to_cdecl \ - lt_cv_sys_global_symbol_to_c_name_address \ - sys_lib_search_path_spec sys_lib_dlsearch_path_spec \ - old_postinstall_cmds old_postuninstall_cmds \ - compiler_CXX \ - CC_CXX \ - LD_CXX \ - lt_prog_compiler_wl_CXX \ - lt_prog_compiler_pic_CXX \ - lt_prog_compiler_static_CXX \ - lt_prog_compiler_no_builtin_flag_CXX \ - export_dynamic_flag_spec_CXX \ - thread_safe_flag_spec_CXX \ - whole_archive_flag_spec_CXX \ - enable_shared_with_static_runtimes_CXX \ - old_archive_cmds_CXX \ - old_archive_from_new_cmds_CXX \ - predep_objects_CXX \ - postdep_objects_CXX \ - predeps_CXX \ - postdeps_CXX \ - compiler_lib_search_path_CXX \ - archive_cmds_CXX \ - archive_expsym_cmds_CXX \ - postinstall_cmds_CXX \ - postuninstall_cmds_CXX \ - old_archive_from_expsyms_cmds_CXX \ - allow_undefined_flag_CXX \ - no_undefined_flag_CXX \ - export_symbols_cmds_CXX \ - hardcode_libdir_flag_spec_CXX \ - hardcode_libdir_flag_spec_ld_CXX \ - hardcode_libdir_separator_CXX \ - hardcode_automatic_CXX \ - module_cmds_CXX \ - module_expsym_cmds_CXX \ - lt_cv_prog_compiler_c_o_CXX \ - fix_srcfile_path_CXX \ - exclude_expsyms_CXX \ - include_expsyms_CXX; do - - case $var in - old_archive_cmds_CXX | \ - old_archive_from_new_cmds_CXX | \ - archive_cmds_CXX | \ - archive_expsym_cmds_CXX | \ - module_cmds_CXX | \ - module_expsym_cmds_CXX | \ - old_archive_from_expsyms_cmds_CXX | \ - export_symbols_cmds_CXX | \ - extract_expsyms_cmds | reload_cmds | finish_cmds | \ - postinstall_cmds | postuninstall_cmds | \ - old_postinstall_cmds | old_postuninstall_cmds | \ - sys_lib_search_path_spec | sys_lib_dlsearch_path_spec) - # Double-quote double-evaled strings. - eval "lt_$var=\\\"\`\$echo \"X\$$var\" | \$Xsed -e \"\$double_quote_subst\" -e \"\$sed_quote_subst\" -e \"\$delay_variable_subst\"\`\\\"" - ;; - *) - eval "lt_$var=\\\"\`\$echo \"X\$$var\" | \$Xsed -e \"\$sed_quote_subst\"\`\\\"" - ;; - esac - done - - case $lt_echo in - *'\$0 --fallback-echo"') - lt_echo=`$echo "X$lt_echo" | $Xsed -e 's/\\\\\\\$0 --fallback-echo"$/$0 --fallback-echo"/'` - ;; - esac - -cfgfile="$ofile" - - cat <<__EOF__ >> "$cfgfile" -# ### BEGIN LIBTOOL TAG CONFIG: $tagname - -# Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`: - -# Shell to use when invoking shell scripts. -SHELL=$lt_SHELL - -# Whether or not to build shared libraries. -build_libtool_libs=$enable_shared - -# Whether or not to build static libraries. -build_old_libs=$enable_static - -# Whether or not to add -lc for building shared libraries. -build_libtool_need_lc=$archive_cmds_need_lc_CXX - -# Whether or not to disallow shared libs when runtime libs are static -allow_libtool_libs_with_static_runtimes=$enable_shared_with_static_runtimes_CXX - -# Whether or not to optimize for fast installation. -fast_install=$enable_fast_install - -# The host system. -host_alias=$host_alias -host=$host -host_os=$host_os - -# The build system. -build_alias=$build_alias -build=$build -build_os=$build_os - -# An echo program that does not interpret backslashes. -echo=$lt_echo - -# The archiver. -AR=$lt_AR -AR_FLAGS=$lt_AR_FLAGS - -# A C compiler. -LTCC=$lt_LTCC - -# LTCC compiler flags. -LTCFLAGS=$lt_LTCFLAGS - -# A language-specific compiler. -CC=$lt_compiler_CXX - -# Is the compiler the GNU C compiler? -with_gcc=$GCC_CXX - -# An ERE matcher. -EGREP=$lt_EGREP - -# The linker used to build libraries. -LD=$lt_LD_CXX - -# Whether we need hard or soft links. -LN_S=$lt_LN_S - -# A BSD-compatible nm program. -NM=$lt_NM - -# A symbol stripping program -STRIP=$lt_STRIP - -# Used to examine libraries when file_magic_cmd begins "file" -MAGIC_CMD=$MAGIC_CMD - -# Used on cygwin: DLL creation program. -DLLTOOL="$DLLTOOL" - -# Used on cygwin: object dumper. -OBJDUMP="$OBJDUMP" - -# Used on cygwin: assembler. -AS="$AS" - -# The name of the directory that contains temporary libtool files. -objdir=$objdir - -# How to create reloadable object files. -reload_flag=$lt_reload_flag -reload_cmds=$lt_reload_cmds - -# How to pass a linker flag through the compiler. -wl=$lt_lt_prog_compiler_wl_CXX - -# Object file suffix (normally "o"). -objext="$ac_objext" - -# Old archive suffix (normally "a"). -libext="$libext" - -# Shared library suffix (normally ".so"). -shrext_cmds='$shrext_cmds' - -# Executable file suffix (normally ""). -exeext="$exeext" - -# Additional compiler flags for building library objects. -pic_flag=$lt_lt_prog_compiler_pic_CXX -pic_mode=$pic_mode - -# What is the maximum length of a command? -max_cmd_len=$lt_cv_sys_max_cmd_len - -# Does compiler simultaneously support -c and -o options? -compiler_c_o=$lt_lt_cv_prog_compiler_c_o_CXX - -# Must we lock files when doing compilation? -need_locks=$lt_need_locks - -# Do we need the lib prefix for modules? -need_lib_prefix=$need_lib_prefix - -# Do we need a version for libraries? -need_version=$need_version - -# Whether dlopen is supported. -dlopen_support=$enable_dlopen - -# Whether dlopen of programs is supported. -dlopen_self=$enable_dlopen_self - -# Whether dlopen of statically linked programs is supported. -dlopen_self_static=$enable_dlopen_self_static - -# Compiler flag to prevent dynamic linking. -link_static_flag=$lt_lt_prog_compiler_static_CXX - -# Compiler flag to turn off builtin functions. -no_builtin_flag=$lt_lt_prog_compiler_no_builtin_flag_CXX - -# Compiler flag to allow reflexive dlopens. -export_dynamic_flag_spec=$lt_export_dynamic_flag_spec_CXX - -# Compiler flag to generate shared objects directly from archives. -whole_archive_flag_spec=$lt_whole_archive_flag_spec_CXX - -# Compiler flag to generate thread-safe objects. -thread_safe_flag_spec=$lt_thread_safe_flag_spec_CXX - -# Library versioning type. -version_type=$version_type - -# Format of library name prefix. -libname_spec=$lt_libname_spec - -# List of archive names. First name is the real one, the rest are links. -# The last name is the one that the linker finds with -lNAME. -library_names_spec=$lt_library_names_spec - -# The coded name of the library, if different from the real name. -soname_spec=$lt_soname_spec - -# Commands used to build and install an old-style archive. -RANLIB=$lt_RANLIB -old_archive_cmds=$lt_old_archive_cmds_CXX -old_postinstall_cmds=$lt_old_postinstall_cmds -old_postuninstall_cmds=$lt_old_postuninstall_cmds - -# Create an old-style archive from a shared archive. -old_archive_from_new_cmds=$lt_old_archive_from_new_cmds_CXX - -# Create a temporary old-style archive to link instead of a shared archive. -old_archive_from_expsyms_cmds=$lt_old_archive_from_expsyms_cmds_CXX - -# Commands used to build and install a shared archive. -archive_cmds=$lt_archive_cmds_CXX -archive_expsym_cmds=$lt_archive_expsym_cmds_CXX -postinstall_cmds=$lt_postinstall_cmds -postuninstall_cmds=$lt_postuninstall_cmds - -# Commands used to build a loadable module (assumed same as above if empty) -module_cmds=$lt_module_cmds_CXX -module_expsym_cmds=$lt_module_expsym_cmds_CXX - -# Commands to strip libraries. -old_striplib=$lt_old_striplib -striplib=$lt_striplib - -# Dependencies to place before the objects being linked to create a -# shared library. -predep_objects=$lt_predep_objects_CXX - -# Dependencies to place after the objects being linked to create a -# shared library. -postdep_objects=$lt_postdep_objects_CXX - -# Dependencies to place before the objects being linked to create a -# shared library. -predeps=$lt_predeps_CXX - -# Dependencies to place after the objects being linked to create a -# shared library. -postdeps=$lt_postdeps_CXX - -# The library search path used internally by the compiler when linking -# a shared library. -compiler_lib_search_path=$lt_compiler_lib_search_path_CXX - -# Method to check whether dependent libraries are shared objects. -deplibs_check_method=$lt_deplibs_check_method - -# Command to use when deplibs_check_method == file_magic. -file_magic_cmd=$lt_file_magic_cmd - -# Flag that allows shared libraries with undefined symbols to be built. -allow_undefined_flag=$lt_allow_undefined_flag_CXX - -# Flag that forces no undefined symbols. -no_undefined_flag=$lt_no_undefined_flag_CXX - -# Commands used to finish a libtool library installation in a directory. -finish_cmds=$lt_finish_cmds - -# Same as above, but a single script fragment to be evaled but not shown. -finish_eval=$lt_finish_eval - -# Take the output of nm and produce a listing of raw symbols and C names. -global_symbol_pipe=$lt_lt_cv_sys_global_symbol_pipe - -# Transform the output of nm in a proper C declaration -global_symbol_to_cdecl=$lt_lt_cv_sys_global_symbol_to_cdecl - -# Transform the output of nm in a C name address pair -global_symbol_to_c_name_address=$lt_lt_cv_sys_global_symbol_to_c_name_address - -# This is the shared library runtime path variable. -runpath_var=$runpath_var - -# This is the shared library path variable. -shlibpath_var=$shlibpath_var - -# Is shlibpath searched before the hard-coded library search path? -shlibpath_overrides_runpath=$shlibpath_overrides_runpath - -# How to hardcode a shared library path into an executable. -hardcode_action=$hardcode_action_CXX - -# Whether we should hardcode library paths into libraries. -hardcode_into_libs=$hardcode_into_libs - -# Flag to hardcode \$libdir into a binary during linking. -# This must work even if \$libdir does not exist. -hardcode_libdir_flag_spec=$lt_hardcode_libdir_flag_spec_CXX - -# If ld is used when linking, flag to hardcode \$libdir into -# a binary during linking. This must work even if \$libdir does -# not exist. -hardcode_libdir_flag_spec_ld=$lt_hardcode_libdir_flag_spec_ld_CXX - -# Whether we need a single -rpath flag with a separated argument. -hardcode_libdir_separator=$lt_hardcode_libdir_separator_CXX - -# Set to yes if using DIR/libNAME${shared_ext} during linking hardcodes DIR into the -# resulting binary. -hardcode_direct=$hardcode_direct_CXX - -# Set to yes if using the -LDIR flag during linking hardcodes DIR into the -# resulting binary. -hardcode_minus_L=$hardcode_minus_L_CXX - -# Set to yes if using SHLIBPATH_VAR=DIR during linking hardcodes DIR into -# the resulting binary. -hardcode_shlibpath_var=$hardcode_shlibpath_var_CXX - -# Set to yes if building a shared library automatically hardcodes DIR into the library -# and all subsequent libraries and executables linked against it. -hardcode_automatic=$hardcode_automatic_CXX - -# Variables whose values should be saved in libtool wrapper scripts and -# restored at relink time. -variables_saved_for_relink="$variables_saved_for_relink" - -# Whether libtool must link a program against all its dependency libraries. -link_all_deplibs=$link_all_deplibs_CXX - -# Compile-time system search path for libraries -sys_lib_search_path_spec=$lt_sys_lib_search_path_spec - -# Run-time system search path for libraries -sys_lib_dlsearch_path_spec=$lt_sys_lib_dlsearch_path_spec - -# Fix the shell variable \$srcfile for the compiler. -fix_srcfile_path=$lt_fix_srcfile_path - -# Set to yes if exported symbols are required. -always_export_symbols=$always_export_symbols_CXX - -# The commands to list exported symbols. -export_symbols_cmds=$lt_export_symbols_cmds_CXX - -# The commands to extract the exported symbol list from a shared archive. -extract_expsyms_cmds=$lt_extract_expsyms_cmds - -# Symbols that should not be listed in the preloaded symbols. -exclude_expsyms=$lt_exclude_expsyms_CXX - -# Symbols that must always be exported. -include_expsyms=$lt_include_expsyms_CXX - -# ### END LIBTOOL TAG CONFIG: $tagname - -__EOF__ - - -else - # If there is no Makefile yet, we rely on a make rule to execute - # `config.status --recheck' to rerun these tests and create the - # libtool script then. - ltmain_in=`echo $ltmain | sed -e 's/\.sh$/.in/'` - if test -f "$ltmain_in"; then - test -f Makefile && make "$ltmain" - fi -fi - - -ac_ext=c -ac_cpp='$CPP $CPPFLAGS' -ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_c_compiler_gnu - -CC=$lt_save_CC -LDCXX=$LD -LD=$lt_save_LD -GCC=$lt_save_GCC -with_gnu_ldcxx=$with_gnu_ld -with_gnu_ld=$lt_save_with_gnu_ld -lt_cv_path_LDCXX=$lt_cv_path_LD -lt_cv_path_LD=$lt_save_path_LD -lt_cv_prog_gnu_ldcxx=$lt_cv_prog_gnu_ld -lt_cv_prog_gnu_ld=$lt_save_with_gnu_ld - - else - tagname="" - fi - ;; - - F77) - if test -n "$F77" && test "X$F77" != "Xno"; then - -ac_ext=f -ac_compile='$F77 -c $FFLAGS conftest.$ac_ext >&5' -ac_link='$F77 -o conftest$ac_exeext $FFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_f77_compiler_gnu - - -archive_cmds_need_lc_F77=no -allow_undefined_flag_F77= -always_export_symbols_F77=no -archive_expsym_cmds_F77= -export_dynamic_flag_spec_F77= -hardcode_direct_F77=no -hardcode_libdir_flag_spec_F77= -hardcode_libdir_flag_spec_ld_F77= -hardcode_libdir_separator_F77= -hardcode_minus_L_F77=no -hardcode_automatic_F77=no -module_cmds_F77= -module_expsym_cmds_F77= -link_all_deplibs_F77=unknown -old_archive_cmds_F77=$old_archive_cmds -no_undefined_flag_F77= -whole_archive_flag_spec_F77= -enable_shared_with_static_runtimes_F77=no - -# Source file extension for f77 test sources. -ac_ext=f - -# Object file extension for compiled f77 test sources. -objext=o -objext_F77=$objext - -# Code to be used in simple compile tests -lt_simple_compile_test_code="\ - subroutine t - return - end -" - -# Code to be used in simple link tests -lt_simple_link_test_code="\ - program t - end -" - -# ltmain only uses $CC for tagged configurations so make sure $CC is set. - -# If no C compiler was specified, use CC. -LTCC=${LTCC-"$CC"} - -# If no C compiler flags were specified, use CFLAGS. -LTCFLAGS=${LTCFLAGS-"$CFLAGS"} - -# Allow CC to be a program name with arguments. -compiler=$CC - - -# save warnings/boilerplate of simple test code -ac_outfile=conftest.$ac_objext -echo "$lt_simple_compile_test_code" >conftest.$ac_ext -eval "$ac_compile" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err -_lt_compiler_boilerplate=`cat conftest.err` -$rm conftest* - -ac_outfile=conftest.$ac_objext -echo "$lt_simple_link_test_code" >conftest.$ac_ext -eval "$ac_link" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err -_lt_linker_boilerplate=`cat conftest.err` -$rm conftest* - - -# Allow CC to be a program name with arguments. -lt_save_CC="$CC" -CC=${F77-"f77"} -compiler=$CC -compiler_F77=$CC -for cc_temp in $compiler""; do - case $cc_temp in - compile | *[\\/]compile | ccache | *[\\/]ccache ) ;; - distcc | *[\\/]distcc | purify | *[\\/]purify ) ;; - \-*) ;; - *) break;; - esac -done -cc_basename=`$echo "X$cc_temp" | $Xsed -e 's%.*/%%' -e "s%^$host_alias-%%"` - - -{ echo "$as_me:$LINENO: checking if libtool supports shared libraries" >&5 -echo $ECHO_N "checking if libtool supports shared libraries... $ECHO_C" >&6; } -{ echo "$as_me:$LINENO: result: $can_build_shared" >&5 -echo "${ECHO_T}$can_build_shared" >&6; } - -{ echo "$as_me:$LINENO: checking whether to build shared libraries" >&5 -echo $ECHO_N "checking whether to build shared libraries... $ECHO_C" >&6; } -test "$can_build_shared" = "no" && enable_shared=no - -# On AIX, shared libraries and static libraries use the same namespace, and -# are all built from PIC. -case $host_os in -aix3*) - test "$enable_shared" = yes && enable_static=no - if test -n "$RANLIB"; then - archive_cmds="$archive_cmds~\$RANLIB \$lib" - postinstall_cmds='$RANLIB $lib' - fi - ;; -aix4* | aix5*) - if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then - test "$enable_shared" = yes && enable_static=no - fi - ;; -esac -{ echo "$as_me:$LINENO: result: $enable_shared" >&5 -echo "${ECHO_T}$enable_shared" >&6; } - -{ echo "$as_me:$LINENO: checking whether to build static libraries" >&5 -echo $ECHO_N "checking whether to build static libraries... $ECHO_C" >&6; } -# Make sure either enable_shared or enable_static is yes. -test "$enable_shared" = yes || enable_static=yes -{ echo "$as_me:$LINENO: result: $enable_static" >&5 -echo "${ECHO_T}$enable_static" >&6; } - -GCC_F77="$G77" -LD_F77="$LD" - -lt_prog_compiler_wl_F77= -lt_prog_compiler_pic_F77= -lt_prog_compiler_static_F77= - -{ echo "$as_me:$LINENO: checking for $compiler option to produce PIC" >&5 -echo $ECHO_N "checking for $compiler option to produce PIC... $ECHO_C" >&6; } - - if test "$GCC" = yes; then - lt_prog_compiler_wl_F77='-Wl,' - lt_prog_compiler_static_F77='-static' - - case $host_os in - aix*) - # All AIX code is PIC. - if test "$host_cpu" = ia64; then - # AIX 5 now supports IA64 processor - lt_prog_compiler_static_F77='-Bstatic' - fi - ;; - - amigaos*) - # FIXME: we need at least 68020 code to build shared libraries, but - # adding the `-m68020' flag to GCC prevents building anything better, - # like `-m68040'. - lt_prog_compiler_pic_F77='-m68020 -resident32 -malways-restore-a4' - ;; - - beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) - # PIC is the default for these OSes. - ;; - - mingw* | cygwin* | pw32* | os2*) - # This hack is so that the source file can tell whether it is being - # built for inclusion in a dll (and should export symbols for example). - # Although the cygwin gcc ignores -fPIC, still need this for old-style - # (--disable-auto-import) libraries - lt_prog_compiler_pic_F77='-DDLL_EXPORT' - ;; - - darwin* | rhapsody*) - # PIC is the default on this platform - # Common symbols not allowed in MH_DYLIB files - lt_prog_compiler_pic_F77='-fno-common' - ;; - - interix[3-9]*) - # Interix 3.x gcc -fpic/-fPIC options generate broken code. - # Instead, we relocate shared libraries at runtime. - ;; - - msdosdjgpp*) - # Just because we use GCC doesn't mean we suddenly get shared libraries - # on systems that don't support them. - lt_prog_compiler_can_build_shared_F77=no - enable_shared=no - ;; - - sysv4*MP*) - if test -d /usr/nec; then - lt_prog_compiler_pic_F77=-Kconform_pic - fi - ;; - - hpux*) - # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but - # not for PA HP-UX. - case $host_cpu in - hppa*64*|ia64*) - # +Z the default - ;; - *) - lt_prog_compiler_pic_F77='-fPIC' - ;; - esac - ;; - - *) - lt_prog_compiler_pic_F77='-fPIC' - ;; - esac - else - # PORTME Check for flag to pass linker flags through the system compiler. - case $host_os in - aix*) - lt_prog_compiler_wl_F77='-Wl,' - if test "$host_cpu" = ia64; then - # AIX 5 now supports IA64 processor - lt_prog_compiler_static_F77='-Bstatic' - else - lt_prog_compiler_static_F77='-bnso -bI:/lib/syscalls.exp' - fi - ;; - darwin*) - # PIC is the default on this platform - # Common symbols not allowed in MH_DYLIB files - case $cc_basename in - xlc*) - lt_prog_compiler_pic_F77='-qnocommon' - lt_prog_compiler_wl_F77='-Wl,' - ;; - esac - ;; - - mingw* | cygwin* | pw32* | os2*) - # This hack is so that the source file can tell whether it is being - # built for inclusion in a dll (and should export symbols for example). - lt_prog_compiler_pic_F77='-DDLL_EXPORT' - ;; - - hpux9* | hpux10* | hpux11*) - lt_prog_compiler_wl_F77='-Wl,' - # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but - # not for PA HP-UX. - case $host_cpu in - hppa*64*|ia64*) - # +Z the default - ;; - *) - lt_prog_compiler_pic_F77='+Z' - ;; - esac - # Is there a better lt_prog_compiler_static that works with the bundled CC? - lt_prog_compiler_static_F77='${wl}-a ${wl}archive' - ;; - - irix5* | irix6* | nonstopux*) - lt_prog_compiler_wl_F77='-Wl,' - # PIC (with -KPIC) is the default. - lt_prog_compiler_static_F77='-non_shared' - ;; - - newsos6) - lt_prog_compiler_pic_F77='-KPIC' - lt_prog_compiler_static_F77='-Bstatic' - ;; - - linux* | k*bsd*-gnu) - case $cc_basename in - icc* | ecc*) - lt_prog_compiler_wl_F77='-Wl,' - lt_prog_compiler_pic_F77='-KPIC' - lt_prog_compiler_static_F77='-static' - ;; - pgcc* | pgf77* | pgf90* | pgf95*) - # Portland Group compilers (*not* the Pentium gcc compiler, - # which looks to be a dead project) - lt_prog_compiler_wl_F77='-Wl,' - lt_prog_compiler_pic_F77='-fpic' - lt_prog_compiler_static_F77='-Bstatic' - ;; - ccc*) - lt_prog_compiler_wl_F77='-Wl,' - # All Alpha code is PIC. - lt_prog_compiler_static_F77='-non_shared' - ;; - *) - case `$CC -V 2>&1 | sed 5q` in - *Sun\ C*) - # Sun C 5.9 - lt_prog_compiler_pic_F77='-KPIC' - lt_prog_compiler_static_F77='-Bstatic' - lt_prog_compiler_wl_F77='-Wl,' - ;; - *Sun\ F*) - # Sun Fortran 8.3 passes all unrecognized flags to the linker - lt_prog_compiler_pic_F77='-KPIC' - lt_prog_compiler_static_F77='-Bstatic' - lt_prog_compiler_wl_F77='' - ;; - esac - ;; - esac - ;; - - osf3* | osf4* | osf5*) - lt_prog_compiler_wl_F77='-Wl,' - # All OSF/1 code is PIC. - lt_prog_compiler_static_F77='-non_shared' - ;; - - rdos*) - lt_prog_compiler_static_F77='-non_shared' - ;; - - solaris*) - lt_prog_compiler_pic_F77='-KPIC' - lt_prog_compiler_static_F77='-Bstatic' - case $cc_basename in - f77* | f90* | f95*) - lt_prog_compiler_wl_F77='-Qoption ld ';; - *) - lt_prog_compiler_wl_F77='-Wl,';; - esac - ;; - - sunos4*) - lt_prog_compiler_wl_F77='-Qoption ld ' - lt_prog_compiler_pic_F77='-PIC' - lt_prog_compiler_static_F77='-Bstatic' - ;; - - sysv4 | sysv4.2uw2* | sysv4.3*) - lt_prog_compiler_wl_F77='-Wl,' - lt_prog_compiler_pic_F77='-KPIC' - lt_prog_compiler_static_F77='-Bstatic' - ;; - - sysv4*MP*) - if test -d /usr/nec ;then - lt_prog_compiler_pic_F77='-Kconform_pic' - lt_prog_compiler_static_F77='-Bstatic' - fi - ;; - - sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*) - lt_prog_compiler_wl_F77='-Wl,' - lt_prog_compiler_pic_F77='-KPIC' - lt_prog_compiler_static_F77='-Bstatic' - ;; - - unicos*) - lt_prog_compiler_wl_F77='-Wl,' - lt_prog_compiler_can_build_shared_F77=no - ;; - - uts4*) - lt_prog_compiler_pic_F77='-pic' - lt_prog_compiler_static_F77='-Bstatic' - ;; - - *) - lt_prog_compiler_can_build_shared_F77=no - ;; - esac - fi - -{ echo "$as_me:$LINENO: result: $lt_prog_compiler_pic_F77" >&5 -echo "${ECHO_T}$lt_prog_compiler_pic_F77" >&6; } - -# -# Check to make sure the PIC flag actually works. -# -if test -n "$lt_prog_compiler_pic_F77"; then - -{ echo "$as_me:$LINENO: checking if $compiler PIC flag $lt_prog_compiler_pic_F77 works" >&5 -echo $ECHO_N "checking if $compiler PIC flag $lt_prog_compiler_pic_F77 works... $ECHO_C" >&6; } -if test "${lt_prog_compiler_pic_works_F77+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - lt_prog_compiler_pic_works_F77=no - ac_outfile=conftest.$ac_objext - echo "$lt_simple_compile_test_code" > conftest.$ac_ext - lt_compiler_flag="$lt_prog_compiler_pic_F77" - # Insert the option either (1) after the last *FLAGS variable, or - # (2) before a word containing "conftest.", or (3) at the end. - # Note that $ac_compile itself does not contain backslashes and begins - # with a dollar sign (not a hyphen), so the echo should work correctly. - # The option is referenced via a variable to avoid confusing sed. - lt_compile=`echo "$ac_compile" | $SED \ - -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ - -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ - -e 's:$: $lt_compiler_flag:'` - (eval echo "\"\$as_me:14369: $lt_compile\"" >&5) - (eval "$lt_compile" 2>conftest.err) - ac_status=$? - cat conftest.err >&5 - echo "$as_me:14373: \$? = $ac_status" >&5 - if (exit $ac_status) && test -s "$ac_outfile"; then - # The compiler can only warn and ignore the option if not recognized - # So say no if there are warnings other than the usual output. - $echo "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' >conftest.exp - $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 - if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then - lt_prog_compiler_pic_works_F77=yes - fi - fi - $rm conftest* - -fi -{ echo "$as_me:$LINENO: result: $lt_prog_compiler_pic_works_F77" >&5 -echo "${ECHO_T}$lt_prog_compiler_pic_works_F77" >&6; } - -if test x"$lt_prog_compiler_pic_works_F77" = xyes; then - case $lt_prog_compiler_pic_F77 in - "" | " "*) ;; - *) lt_prog_compiler_pic_F77=" $lt_prog_compiler_pic_F77" ;; - esac -else - lt_prog_compiler_pic_F77= - lt_prog_compiler_can_build_shared_F77=no -fi - -fi -case $host_os in - # For platforms which do not support PIC, -DPIC is meaningless: - *djgpp*) - lt_prog_compiler_pic_F77= - ;; - *) - lt_prog_compiler_pic_F77="$lt_prog_compiler_pic_F77" - ;; -esac - -# -# Check to make sure the static flag actually works. -# -wl=$lt_prog_compiler_wl_F77 eval lt_tmp_static_flag=\"$lt_prog_compiler_static_F77\" -{ echo "$as_me:$LINENO: checking if $compiler static flag $lt_tmp_static_flag works" >&5 -echo $ECHO_N "checking if $compiler static flag $lt_tmp_static_flag works... $ECHO_C" >&6; } -if test "${lt_prog_compiler_static_works_F77+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - lt_prog_compiler_static_works_F77=no - save_LDFLAGS="$LDFLAGS" - LDFLAGS="$LDFLAGS $lt_tmp_static_flag" - echo "$lt_simple_link_test_code" > conftest.$ac_ext - if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then - # The linker can only warn and ignore the option if not recognized - # So say no if there are warnings - if test -s conftest.err; then - # Append any errors to the config.log. - cat conftest.err 1>&5 - $echo "X$_lt_linker_boilerplate" | $Xsed -e '/^$/d' > conftest.exp - $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 - if diff conftest.exp conftest.er2 >/dev/null; then - lt_prog_compiler_static_works_F77=yes - fi - else - lt_prog_compiler_static_works_F77=yes - fi - fi - $rm conftest* - LDFLAGS="$save_LDFLAGS" - -fi -{ echo "$as_me:$LINENO: result: $lt_prog_compiler_static_works_F77" >&5 -echo "${ECHO_T}$lt_prog_compiler_static_works_F77" >&6; } - -if test x"$lt_prog_compiler_static_works_F77" = xyes; then - : -else - lt_prog_compiler_static_F77= -fi - - -{ echo "$as_me:$LINENO: checking if $compiler supports -c -o file.$ac_objext" >&5 -echo $ECHO_N "checking if $compiler supports -c -o file.$ac_objext... $ECHO_C" >&6; } -if test "${lt_cv_prog_compiler_c_o_F77+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - lt_cv_prog_compiler_c_o_F77=no - $rm -r conftest 2>/dev/null - mkdir conftest - cd conftest - mkdir out - echo "$lt_simple_compile_test_code" > conftest.$ac_ext - - lt_compiler_flag="-o out/conftest2.$ac_objext" - # Insert the option either (1) after the last *FLAGS variable, or - # (2) before a word containing "conftest.", or (3) at the end. - # Note that $ac_compile itself does not contain backslashes and begins - # with a dollar sign (not a hyphen), so the echo should work correctly. - lt_compile=`echo "$ac_compile" | $SED \ - -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ - -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ - -e 's:$: $lt_compiler_flag:'` - (eval echo "\"\$as_me:14473: $lt_compile\"" >&5) - (eval "$lt_compile" 2>out/conftest.err) - ac_status=$? - cat out/conftest.err >&5 - echo "$as_me:14477: \$? = $ac_status" >&5 - if (exit $ac_status) && test -s out/conftest2.$ac_objext - then - # The compiler can only warn and ignore the option if not recognized - # So say no if there are warnings - $echo "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' > out/conftest.exp - $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2 - if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then - lt_cv_prog_compiler_c_o_F77=yes - fi - fi - chmod u+w . 2>&5 - $rm conftest* - # SGI C++ compiler will create directory out/ii_files/ for - # template instantiation - test -d out/ii_files && $rm out/ii_files/* && rmdir out/ii_files - $rm out/* && rmdir out - cd .. - rmdir conftest - $rm conftest* - -fi -{ echo "$as_me:$LINENO: result: $lt_cv_prog_compiler_c_o_F77" >&5 -echo "${ECHO_T}$lt_cv_prog_compiler_c_o_F77" >&6; } - - -hard_links="nottested" -if test "$lt_cv_prog_compiler_c_o_F77" = no && test "$need_locks" != no; then - # do not overwrite the value of need_locks provided by the user - { echo "$as_me:$LINENO: checking if we can lock with hard links" >&5 -echo $ECHO_N "checking if we can lock with hard links... $ECHO_C" >&6; } - hard_links=yes - $rm conftest* - ln conftest.a conftest.b 2>/dev/null && hard_links=no - touch conftest.a - ln conftest.a conftest.b 2>&5 || hard_links=no - ln conftest.a conftest.b 2>/dev/null && hard_links=no - { echo "$as_me:$LINENO: result: $hard_links" >&5 -echo "${ECHO_T}$hard_links" >&6; } - if test "$hard_links" = no; then - { echo "$as_me:$LINENO: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&5 -echo "$as_me: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&2;} - need_locks=warn - fi -else - need_locks=no -fi - -{ echo "$as_me:$LINENO: checking whether the $compiler linker ($LD) supports shared libraries" >&5 -echo $ECHO_N "checking whether the $compiler linker ($LD) supports shared libraries... $ECHO_C" >&6; } - - runpath_var= - allow_undefined_flag_F77= - enable_shared_with_static_runtimes_F77=no - archive_cmds_F77= - archive_expsym_cmds_F77= - old_archive_From_new_cmds_F77= - old_archive_from_expsyms_cmds_F77= - export_dynamic_flag_spec_F77= - whole_archive_flag_spec_F77= - thread_safe_flag_spec_F77= - hardcode_libdir_flag_spec_F77= - hardcode_libdir_flag_spec_ld_F77= - hardcode_libdir_separator_F77= - hardcode_direct_F77=no - hardcode_minus_L_F77=no - hardcode_shlibpath_var_F77=unsupported - link_all_deplibs_F77=unknown - hardcode_automatic_F77=no - module_cmds_F77= - module_expsym_cmds_F77= - always_export_symbols_F77=no - export_symbols_cmds_F77='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' - # include_expsyms should be a list of space-separated symbols to be *always* - # included in the symbol list - include_expsyms_F77= - # exclude_expsyms can be an extended regexp of symbols to exclude - # it will be wrapped by ` (' and `)$', so one must not match beginning or - # end of line. Example: `a|bc|.*d.*' will exclude the symbols `a' and `bc', - # as well as any symbol that contains `d'. - exclude_expsyms_F77="_GLOBAL_OFFSET_TABLE_" - # Although _GLOBAL_OFFSET_TABLE_ is a valid symbol C name, most a.out - # platforms (ab)use it in PIC code, but their linkers get confused if - # the symbol is explicitly referenced. Since portable code cannot - # rely on this symbol name, it's probably fine to never include it in - # preloaded symbol tables. - extract_expsyms_cmds= - # Just being paranoid about ensuring that cc_basename is set. - for cc_temp in $compiler""; do - case $cc_temp in - compile | *[\\/]compile | ccache | *[\\/]ccache ) ;; - distcc | *[\\/]distcc | purify | *[\\/]purify ) ;; - \-*) ;; - *) break;; - esac -done -cc_basename=`$echo "X$cc_temp" | $Xsed -e 's%.*/%%' -e "s%^$host_alias-%%"` - - case $host_os in - cygwin* | mingw* | pw32*) - # FIXME: the MSVC++ port hasn't been tested in a loooong time - # When not using gcc, we currently assume that we are using - # Microsoft Visual C++. - if test "$GCC" != yes; then - with_gnu_ld=no - fi - ;; - interix*) - # we just hope/assume this is gcc and not c89 (= MSVC++) - with_gnu_ld=yes - ;; - openbsd*) - with_gnu_ld=no - ;; - esac - - ld_shlibs_F77=yes - if test "$with_gnu_ld" = yes; then - # If archive_cmds runs LD, not CC, wlarc should be empty - wlarc='${wl}' - - # Set some defaults for GNU ld with shared library support. These - # are reset later if shared libraries are not supported. Putting them - # here allows them to be overridden if necessary. - runpath_var=LD_RUN_PATH - hardcode_libdir_flag_spec_F77='${wl}--rpath ${wl}$libdir' - export_dynamic_flag_spec_F77='${wl}--export-dynamic' - # ancient GNU ld didn't support --whole-archive et. al. - if $LD --help 2>&1 | grep 'no-whole-archive' > /dev/null; then - whole_archive_flag_spec_F77="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' - else - whole_archive_flag_spec_F77= - fi - supports_anon_versioning=no - case `$LD -v 2>/dev/null` in - *\ [01].* | *\ 2.[0-9].* | *\ 2.10.*) ;; # catch versions < 2.11 - *\ 2.11.93.0.2\ *) supports_anon_versioning=yes ;; # RH7.3 ... - *\ 2.11.92.0.12\ *) supports_anon_versioning=yes ;; # Mandrake 8.2 ... - *\ 2.11.*) ;; # other 2.11 versions - *) supports_anon_versioning=yes ;; - esac - - # See if GNU ld supports shared libraries. - case $host_os in - aix3* | aix4* | aix5*) - # On AIX/PPC, the GNU linker is very broken - if test "$host_cpu" != ia64; then - ld_shlibs_F77=no - cat <&2 - -*** Warning: the GNU linker, at least up to release 2.9.1, is reported -*** to be unable to reliably create shared libraries on AIX. -*** Therefore, libtool is disabling shared libraries support. If you -*** really care for shared libraries, you may want to modify your PATH -*** so that a non-GNU linker is found, and then restart. - -EOF - fi - ;; - - amigaos*) - archive_cmds_F77='$rm $output_objdir/a2ixlibrary.data~$echo "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$echo "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$echo "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$echo "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' - hardcode_libdir_flag_spec_F77='-L$libdir' - hardcode_minus_L_F77=yes - - # Samuel A. Falvo II reports - # that the semantics of dynamic libraries on AmigaOS, at least up - # to version 4, is to share data among multiple programs linked - # with the same dynamic library. Since this doesn't match the - # behavior of shared libraries on other platforms, we can't use - # them. - ld_shlibs_F77=no - ;; - - beos*) - if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then - allow_undefined_flag_F77=unsupported - # Joseph Beckenbach says some releases of gcc - # support --undefined. This deserves some investigation. FIXME - archive_cmds_F77='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' - else - ld_shlibs_F77=no - fi - ;; - - cygwin* | mingw* | pw32*) - # _LT_AC_TAGVAR(hardcode_libdir_flag_spec, F77) is actually meaningless, - # as there is no search path for DLLs. - hardcode_libdir_flag_spec_F77='-L$libdir' - allow_undefined_flag_F77=unsupported - always_export_symbols_F77=no - enable_shared_with_static_runtimes_F77=yes - export_symbols_cmds_F77='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS][ ]/s/.*[ ]\([^ ]*\)/\1 DATA/'\'' -e '\''/^[AITW][ ]/s/.*[ ]//'\'' | sort | uniq > $export_symbols' - - if $LD --help 2>&1 | grep 'auto-import' > /dev/null; then - archive_cmds_F77='$CC -shared $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' - # If the export-symbols file already is a .def file (1st line - # is EXPORTS), use it as is; otherwise, prepend... - archive_expsym_cmds_F77='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then - cp $export_symbols $output_objdir/$soname.def; - else - echo EXPORTS > $output_objdir/$soname.def; - cat $export_symbols >> $output_objdir/$soname.def; - fi~ - $CC -shared $output_objdir/$soname.def $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' - else - ld_shlibs_F77=no - fi - ;; - - interix[3-9]*) - hardcode_direct_F77=no - hardcode_shlibpath_var_F77=no - hardcode_libdir_flag_spec_F77='${wl}-rpath,$libdir' - export_dynamic_flag_spec_F77='${wl}-E' - # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc. - # Instead, shared libraries are loaded at an image base (0x10000000 by - # default) and relocated if they conflict, which is a slow very memory - # consuming and fragmenting process. To avoid this, we pick a random, - # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link - # time. Moving up from 0x10000000 also allows more sbrk(2) space. - archive_cmds_F77='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' - archive_expsym_cmds_F77='sed "s,^,_," $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--retain-symbols-file,$output_objdir/$soname.expsym ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' - ;; - - gnu* | linux* | k*bsd*-gnu) - if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then - tmp_addflag= - case $cc_basename,$host_cpu in - pgcc*) # Portland Group C compiler - whole_archive_flag_spec_F77='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $echo \"$new_convenience\"` ${wl}--no-whole-archive' - tmp_addflag=' $pic_flag' - ;; - pgf77* | pgf90* | pgf95*) # Portland Group f77 and f90 compilers - whole_archive_flag_spec_F77='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $echo \"$new_convenience\"` ${wl}--no-whole-archive' - tmp_addflag=' $pic_flag -Mnomain' ;; - ecc*,ia64* | icc*,ia64*) # Intel C compiler on ia64 - tmp_addflag=' -i_dynamic' ;; - efc*,ia64* | ifort*,ia64*) # Intel Fortran compiler on ia64 - tmp_addflag=' -i_dynamic -nofor_main' ;; - ifc* | ifort*) # Intel Fortran compiler - tmp_addflag=' -nofor_main' ;; - esac - case `$CC -V 2>&1 | sed 5q` in - *Sun\ C*) # Sun C 5.9 - whole_archive_flag_spec_F77='${wl}--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; $echo \"$new_convenience\"` ${wl}--no-whole-archive' - tmp_sharedflag='-G' ;; - *Sun\ F*) # Sun Fortran 8.3 - tmp_sharedflag='-G' ;; - *) - tmp_sharedflag='-shared' ;; - esac - archive_cmds_F77='$CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' - - if test $supports_anon_versioning = yes; then - archive_expsym_cmds_F77='$echo "{ global:" > $output_objdir/$libname.ver~ - cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ - $echo "local: *; };" >> $output_objdir/$libname.ver~ - $CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib' - fi - else - ld_shlibs_F77=no - fi - ;; - - netbsd*) - if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then - archive_cmds_F77='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib' - wlarc= - else - archive_cmds_F77='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' - archive_expsym_cmds_F77='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' - fi - ;; - - solaris*) - if $LD -v 2>&1 | grep 'BFD 2\.8' > /dev/null; then - ld_shlibs_F77=no - cat <&2 - -*** Warning: The releases 2.8.* of the GNU linker cannot reliably -*** create shared libraries on Solaris systems. Therefore, libtool -*** is disabling shared libraries support. We urge you to upgrade GNU -*** binutils to release 2.9.1 or newer. Another option is to modify -*** your PATH or compiler configuration so that the native linker is -*** used, and then restart. - -EOF - elif $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then - archive_cmds_F77='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' - archive_expsym_cmds_F77='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' - else - ld_shlibs_F77=no - fi - ;; - - sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX*) - case `$LD -v 2>&1` in - *\ [01].* | *\ 2.[0-9].* | *\ 2.1[0-5].*) - ld_shlibs_F77=no - cat <<_LT_EOF 1>&2 - -*** Warning: Releases of the GNU linker prior to 2.16.91.0.3 can not -*** reliably create shared libraries on SCO systems. Therefore, libtool -*** is disabling shared libraries support. We urge you to upgrade GNU -*** binutils to release 2.16.91.0.3 or newer. Another option is to modify -*** your PATH or compiler configuration so that the native linker is -*** used, and then restart. - -_LT_EOF - ;; - *) - if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then - hardcode_libdir_flag_spec_F77='`test -z "$SCOABSPATH" && echo ${wl}-rpath,$libdir`' - archive_cmds_F77='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib' - archive_expsym_cmds_F77='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname,\${SCOABSPATH:+${install_libdir}/}$soname,-retain-symbols-file,$export_symbols -o $lib' - else - ld_shlibs_F77=no - fi - ;; - esac - ;; - - sunos4*) - archive_cmds_F77='$LD -assert pure-text -Bshareable -o $lib $libobjs $deplibs $linker_flags' - wlarc= - hardcode_direct_F77=yes - hardcode_shlibpath_var_F77=no - ;; - - *) - if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then - archive_cmds_F77='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' - archive_expsym_cmds_F77='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' - else - ld_shlibs_F77=no - fi - ;; - esac - - if test "$ld_shlibs_F77" = no; then - runpath_var= - hardcode_libdir_flag_spec_F77= - export_dynamic_flag_spec_F77= - whole_archive_flag_spec_F77= - fi - else - # PORTME fill in a description of your system's linker (not GNU ld) - case $host_os in - aix3*) - allow_undefined_flag_F77=unsupported - always_export_symbols_F77=yes - archive_expsym_cmds_F77='$LD -o $output_objdir/$soname $libobjs $deplibs $linker_flags -bE:$export_symbols -T512 -H512 -bM:SRE~$AR $AR_FLAGS $lib $output_objdir/$soname' - # Note: this linker hardcodes the directories in LIBPATH if there - # are no directories specified by -L. - hardcode_minus_L_F77=yes - if test "$GCC" = yes && test -z "$lt_prog_compiler_static"; then - # Neither direct hardcoding nor static linking is supported with a - # broken collect2. - hardcode_direct_F77=unsupported - fi - ;; - - aix4* | aix5*) - if test "$host_cpu" = ia64; then - # On IA64, the linker does run time linking by default, so we don't - # have to do anything special. - aix_use_runtimelinking=no - exp_sym_flag='-Bexport' - no_entry_flag="" - else - # If we're using GNU nm, then we don't want the "-C" option. - # -C means demangle to AIX nm, but means don't demangle with GNU nm - if $NM -V 2>&1 | grep 'GNU' > /dev/null; then - export_symbols_cmds_F77='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$2 == "T") || (\$2 == "D") || (\$2 == "B")) && (substr(\$3,1,1) != ".")) { print \$3 } }'\'' | sort -u > $export_symbols' - else - export_symbols_cmds_F77='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$2 == "T") || (\$2 == "D") || (\$2 == "B")) && (substr(\$3,1,1) != ".")) { print \$3 } }'\'' | sort -u > $export_symbols' - fi - aix_use_runtimelinking=no - - # Test if we are trying to use run time linking or normal - # AIX style linking. If -brtl is somewhere in LDFLAGS, we - # need to do runtime linking. - case $host_os in aix4.[23]|aix4.[23].*|aix5*) - for ld_flag in $LDFLAGS; do - if (test $ld_flag = "-brtl" || test $ld_flag = "-Wl,-brtl"); then - aix_use_runtimelinking=yes - break - fi - done - ;; - esac - - exp_sym_flag='-bexport' - no_entry_flag='-bnoentry' - fi - - # When large executables or shared objects are built, AIX ld can - # have problems creating the table of contents. If linking a library - # or program results in "error TOC overflow" add -mminimal-toc to - # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not - # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS. - - archive_cmds_F77='' - hardcode_direct_F77=yes - hardcode_libdir_separator_F77=':' - link_all_deplibs_F77=yes - - if test "$GCC" = yes; then - case $host_os in aix4.[012]|aix4.[012].*) - # We only want to do this on AIX 4.2 and lower, the check - # below for broken collect2 doesn't work under 4.3+ - collect2name=`${CC} -print-prog-name=collect2` - if test -f "$collect2name" && \ - strings "$collect2name" | grep resolve_lib_name >/dev/null - then - # We have reworked collect2 - : - else - # We have old collect2 - hardcode_direct_F77=unsupported - # It fails to find uninstalled libraries when the uninstalled - # path is not listed in the libpath. Setting hardcode_minus_L - # to unsupported forces relinking - hardcode_minus_L_F77=yes - hardcode_libdir_flag_spec_F77='-L$libdir' - hardcode_libdir_separator_F77= - fi - ;; - esac - shared_flag='-shared' - if test "$aix_use_runtimelinking" = yes; then - shared_flag="$shared_flag "'${wl}-G' - fi - else - # not using gcc - if test "$host_cpu" = ia64; then - # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release - # chokes on -Wl,-G. The following line is correct: - shared_flag='-G' - else - if test "$aix_use_runtimelinking" = yes; then - shared_flag='${wl}-G' - else - shared_flag='${wl}-bM:SRE' - fi - fi - fi - - # It seems that -bexpall does not export symbols beginning with - # underscore (_), so it is better to generate a list of symbols to export. - always_export_symbols_F77=yes - if test "$aix_use_runtimelinking" = yes; then - # Warning - without using the other runtime loading flags (-brtl), - # -berok will link without error, but may produce a broken library. - allow_undefined_flag_F77='-berok' - # Determine the default libpath from the value encoded in an empty executable. - cat >conftest.$ac_ext <<_ACEOF - program main - - end -_ACEOF -rm -f conftest.$ac_objext conftest$ac_exeext -if { (ac_try="$ac_link" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_link") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_f77_werror_flag" || - test ! -s conftest.err - } && test -s conftest$ac_exeext && - $as_test_x conftest$ac_exeext; then - -lt_aix_libpath_sed=' - /Import File Strings/,/^$/ { - /^0/ { - s/^0 *\(.*\)$/\1/ - p - } - }' -aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` -# Check for a 64-bit object if we didn't find anything. -if test -z "$aix_libpath"; then - aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` -fi -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - -fi - -rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ - conftest$ac_exeext conftest.$ac_ext -if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi - - hardcode_libdir_flag_spec_F77='${wl}-blibpath:$libdir:'"$aix_libpath" - archive_expsym_cmds_F77="\$CC"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then echo "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag" - else - if test "$host_cpu" = ia64; then - hardcode_libdir_flag_spec_F77='${wl}-R $libdir:/usr/lib:/lib' - allow_undefined_flag_F77="-z nodefs" - archive_expsym_cmds_F77="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$exp_sym_flag:\$export_symbols" - else - # Determine the default libpath from the value encoded in an empty executable. - cat >conftest.$ac_ext <<_ACEOF - program main - - end -_ACEOF -rm -f conftest.$ac_objext conftest$ac_exeext -if { (ac_try="$ac_link" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_link") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_f77_werror_flag" || - test ! -s conftest.err - } && test -s conftest$ac_exeext && - $as_test_x conftest$ac_exeext; then - -lt_aix_libpath_sed=' - /Import File Strings/,/^$/ { - /^0/ { - s/^0 *\(.*\)$/\1/ - p - } - }' -aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` -# Check for a 64-bit object if we didn't find anything. -if test -z "$aix_libpath"; then - aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` -fi -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - -fi - -rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ - conftest$ac_exeext conftest.$ac_ext -if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi - - hardcode_libdir_flag_spec_F77='${wl}-blibpath:$libdir:'"$aix_libpath" - # Warning - without using the other run time loading flags, - # -berok will link without error, but may produce a broken library. - no_undefined_flag_F77=' ${wl}-bernotok' - allow_undefined_flag_F77=' ${wl}-berok' - # Exported symbols can be pulled into shared objects from archives - whole_archive_flag_spec_F77='$convenience' - archive_cmds_need_lc_F77=yes - # This is similar to how AIX traditionally builds its shared libraries. - archive_expsym_cmds_F77="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs ${wl}-bnoentry $compiler_flags ${wl}-bE:$export_symbols${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname' - fi - fi - ;; - - amigaos*) - archive_cmds_F77='$rm $output_objdir/a2ixlibrary.data~$echo "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$echo "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$echo "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$echo "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' - hardcode_libdir_flag_spec_F77='-L$libdir' - hardcode_minus_L_F77=yes - # see comment about different semantics on the GNU ld section - ld_shlibs_F77=no - ;; - - bsdi[45]*) - export_dynamic_flag_spec_F77=-rdynamic - ;; - - cygwin* | mingw* | pw32*) - # When not using gcc, we currently assume that we are using - # Microsoft Visual C++. - # hardcode_libdir_flag_spec is actually meaningless, as there is - # no search path for DLLs. - hardcode_libdir_flag_spec_F77=' ' - allow_undefined_flag_F77=unsupported - # Tell ltmain to make .lib files, not .a files. - libext=lib - # Tell ltmain to make .dll files, not .so files. - shrext_cmds=".dll" - # FIXME: Setting linknames here is a bad hack. - archive_cmds_F77='$CC -o $lib $libobjs $compiler_flags `echo "$deplibs" | $SED -e '\''s/ -lc$//'\''` -link -dll~linknames=' - # The linker will automatically build a .lib file if we build a DLL. - old_archive_From_new_cmds_F77='true' - # FIXME: Should let the user specify the lib program. - old_archive_cmds_F77='lib -OUT:$oldlib$oldobjs$old_deplibs' - fix_srcfile_path_F77='`cygpath -w "$srcfile"`' - enable_shared_with_static_runtimes_F77=yes - ;; - - darwin* | rhapsody*) - case $host_os in - rhapsody* | darwin1.[012]) - allow_undefined_flag_F77='${wl}-undefined ${wl}suppress' - ;; - *) # Darwin 1.3 on - if test -z ${MACOSX_DEPLOYMENT_TARGET} ; then - allow_undefined_flag_F77='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' - else - case ${MACOSX_DEPLOYMENT_TARGET} in - 10.[012]) - allow_undefined_flag_F77='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' - ;; - 10.*) - allow_undefined_flag_F77='${wl}-undefined ${wl}dynamic_lookup' - ;; - esac - fi - ;; - esac - archive_cmds_need_lc_F77=no - hardcode_direct_F77=no - hardcode_automatic_F77=yes - hardcode_shlibpath_var_F77=unsupported - whole_archive_flag_spec_F77='' - link_all_deplibs_F77=yes - if test "$GCC" = yes ; then - output_verbose_link_cmd='echo' - archive_cmds_F77='$CC -dynamiclib $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags -install_name $rpath/$soname $verstring' - module_cmds_F77='$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags' - # Don't fix this by using the ld -exported_symbols_list flag, it doesn't exist in older darwin lds - archive_expsym_cmds_F77='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -dynamiclib $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags -install_name $rpath/$soname $verstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' - module_expsym_cmds_F77='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' - else - case $cc_basename in - xlc*) - output_verbose_link_cmd='echo' - archive_cmds_F77='$CC -qmkshrobj $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-install_name ${wl}`echo $rpath/$soname` $xlcverstring' - module_cmds_F77='$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags' - # Don't fix this by using the ld -exported_symbols_list flag, it doesn't exist in older darwin lds - archive_expsym_cmds_F77='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -qmkshrobj $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-install_name ${wl}$rpath/$soname $xlcverstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' - module_expsym_cmds_F77='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' - ;; - *) - ld_shlibs_F77=no - ;; - esac - fi - ;; - - dgux*) - archive_cmds_F77='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' - hardcode_libdir_flag_spec_F77='-L$libdir' - hardcode_shlibpath_var_F77=no - ;; - - freebsd1*) - ld_shlibs_F77=no - ;; - - # FreeBSD 2.2.[012] allows us to include c++rt0.o to get C++ constructor - # support. Future versions do this automatically, but an explicit c++rt0.o - # does not break anything, and helps significantly (at the cost of a little - # extra space). - freebsd2.2*) - archive_cmds_F77='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags /usr/lib/c++rt0.o' - hardcode_libdir_flag_spec_F77='-R$libdir' - hardcode_direct_F77=yes - hardcode_shlibpath_var_F77=no - ;; - - # Unfortunately, older versions of FreeBSD 2 do not have this feature. - freebsd2*) - archive_cmds_F77='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' - hardcode_direct_F77=yes - hardcode_minus_L_F77=yes - hardcode_shlibpath_var_F77=no - ;; - - # FreeBSD 3 and greater uses gcc -shared to do shared libraries. - freebsd* | dragonfly*) - archive_cmds_F77='$CC -shared -o $lib $libobjs $deplibs $compiler_flags' - hardcode_libdir_flag_spec_F77='-R$libdir' - hardcode_direct_F77=yes - hardcode_shlibpath_var_F77=no - ;; - - hpux9*) - if test "$GCC" = yes; then - archive_cmds_F77='$rm $output_objdir/$soname~$CC -shared -fPIC ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' - else - archive_cmds_F77='$rm $output_objdir/$soname~$LD -b +b $install_libdir -o $output_objdir/$soname $libobjs $deplibs $linker_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' - fi - hardcode_libdir_flag_spec_F77='${wl}+b ${wl}$libdir' - hardcode_libdir_separator_F77=: - hardcode_direct_F77=yes - - # hardcode_minus_L: Not really in the search PATH, - # but as the default location of the library. - hardcode_minus_L_F77=yes - export_dynamic_flag_spec_F77='${wl}-E' - ;; - - hpux10*) - if test "$GCC" = yes -a "$with_gnu_ld" = no; then - archive_cmds_F77='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' - else - archive_cmds_F77='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags' - fi - if test "$with_gnu_ld" = no; then - hardcode_libdir_flag_spec_F77='${wl}+b ${wl}$libdir' - hardcode_libdir_separator_F77=: - - hardcode_direct_F77=yes - export_dynamic_flag_spec_F77='${wl}-E' - - # hardcode_minus_L: Not really in the search PATH, - # but as the default location of the library. - hardcode_minus_L_F77=yes - fi - ;; - - hpux11*) - if test "$GCC" = yes -a "$with_gnu_ld" = no; then - case $host_cpu in - hppa*64*) - archive_cmds_F77='$CC -shared ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' - ;; - ia64*) - archive_cmds_F77='$CC -shared ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' - ;; - *) - archive_cmds_F77='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' - ;; - esac - else - case $host_cpu in - hppa*64*) - archive_cmds_F77='$CC -b ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' - ;; - ia64*) - archive_cmds_F77='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' - ;; - *) - archive_cmds_F77='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' - ;; - esac - fi - if test "$with_gnu_ld" = no; then - hardcode_libdir_flag_spec_F77='${wl}+b ${wl}$libdir' - hardcode_libdir_separator_F77=: - - case $host_cpu in - hppa*64*|ia64*) - hardcode_libdir_flag_spec_ld_F77='+b $libdir' - hardcode_direct_F77=no - hardcode_shlibpath_var_F77=no - ;; - *) - hardcode_direct_F77=yes - export_dynamic_flag_spec_F77='${wl}-E' - - # hardcode_minus_L: Not really in the search PATH, - # but as the default location of the library. - hardcode_minus_L_F77=yes - ;; - esac - fi - ;; - - irix5* | irix6* | nonstopux*) - if test "$GCC" = yes; then - archive_cmds_F77='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' - else - archive_cmds_F77='$LD -shared $libobjs $deplibs $linker_flags -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib' - hardcode_libdir_flag_spec_ld_F77='-rpath $libdir' - fi - hardcode_libdir_flag_spec_F77='${wl}-rpath ${wl}$libdir' - hardcode_libdir_separator_F77=: - link_all_deplibs_F77=yes - ;; - - netbsd*) - if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then - archive_cmds_F77='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' # a.out - else - archive_cmds_F77='$LD -shared -o $lib $libobjs $deplibs $linker_flags' # ELF - fi - hardcode_libdir_flag_spec_F77='-R$libdir' - hardcode_direct_F77=yes - hardcode_shlibpath_var_F77=no - ;; - - newsos6) - archive_cmds_F77='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' - hardcode_direct_F77=yes - hardcode_libdir_flag_spec_F77='${wl}-rpath ${wl}$libdir' - hardcode_libdir_separator_F77=: - hardcode_shlibpath_var_F77=no - ;; - - openbsd*) - if test -f /usr/libexec/ld.so; then - hardcode_direct_F77=yes - hardcode_shlibpath_var_F77=no - if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then - archive_cmds_F77='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' - archive_expsym_cmds_F77='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-retain-symbols-file,$export_symbols' - hardcode_libdir_flag_spec_F77='${wl}-rpath,$libdir' - export_dynamic_flag_spec_F77='${wl}-E' - else - case $host_os in - openbsd[01].* | openbsd2.[0-7] | openbsd2.[0-7].*) - archive_cmds_F77='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' - hardcode_libdir_flag_spec_F77='-R$libdir' - ;; - *) - archive_cmds_F77='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' - hardcode_libdir_flag_spec_F77='${wl}-rpath,$libdir' - ;; - esac - fi - else - ld_shlibs_F77=no - fi - ;; - - os2*) - hardcode_libdir_flag_spec_F77='-L$libdir' - hardcode_minus_L_F77=yes - allow_undefined_flag_F77=unsupported - archive_cmds_F77='$echo "LIBRARY $libname INITINSTANCE" > $output_objdir/$libname.def~$echo "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~$echo DATA >> $output_objdir/$libname.def~$echo " SINGLE NONSHARED" >> $output_objdir/$libname.def~$echo EXPORTS >> $output_objdir/$libname.def~emxexp $libobjs >> $output_objdir/$libname.def~$CC -Zdll -Zcrtdll -o $lib $libobjs $deplibs $compiler_flags $output_objdir/$libname.def' - old_archive_From_new_cmds_F77='emximp -o $output_objdir/$libname.a $output_objdir/$libname.def' - ;; - - osf3*) - if test "$GCC" = yes; then - allow_undefined_flag_F77=' ${wl}-expect_unresolved ${wl}\*' - archive_cmds_F77='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' - else - allow_undefined_flag_F77=' -expect_unresolved \*' - archive_cmds_F77='$LD -shared${allow_undefined_flag} $libobjs $deplibs $linker_flags -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib' - fi - hardcode_libdir_flag_spec_F77='${wl}-rpath ${wl}$libdir' - hardcode_libdir_separator_F77=: - ;; - - osf4* | osf5*) # as osf3* with the addition of -msym flag - if test "$GCC" = yes; then - allow_undefined_flag_F77=' ${wl}-expect_unresolved ${wl}\*' - archive_cmds_F77='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' - hardcode_libdir_flag_spec_F77='${wl}-rpath ${wl}$libdir' - else - allow_undefined_flag_F77=' -expect_unresolved \*' - archive_cmds_F77='$LD -shared${allow_undefined_flag} $libobjs $deplibs $linker_flags -msym -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib' - archive_expsym_cmds_F77='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done; echo "-hidden">> $lib.exp~ - $LD -shared${allow_undefined_flag} -input $lib.exp $linker_flags $libobjs $deplibs -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib~$rm $lib.exp' - - # Both c and cxx compiler support -rpath directly - hardcode_libdir_flag_spec_F77='-rpath $libdir' - fi - hardcode_libdir_separator_F77=: - ;; - - solaris*) - no_undefined_flag_F77=' -z text' - if test "$GCC" = yes; then - wlarc='${wl}' - archive_cmds_F77='$CC -shared ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' - archive_expsym_cmds_F77='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~ - $CC -shared ${wl}-M ${wl}$lib.exp ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags~$rm $lib.exp' - else - wlarc='' - archive_cmds_F77='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linker_flags' - archive_expsym_cmds_F77='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~ - $LD -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$rm $lib.exp' - fi - hardcode_libdir_flag_spec_F77='-R$libdir' - hardcode_shlibpath_var_F77=no - case $host_os in - solaris2.[0-5] | solaris2.[0-5].*) ;; - *) - # The compiler driver will combine and reorder linker options, - # but understands `-z linker_flag'. GCC discards it without `$wl', - # but is careful enough not to reorder. - # Supported since Solaris 2.6 (maybe 2.5.1?) - if test "$GCC" = yes; then - whole_archive_flag_spec_F77='${wl}-z ${wl}allextract$convenience ${wl}-z ${wl}defaultextract' - else - whole_archive_flag_spec_F77='-z allextract$convenience -z defaultextract' - fi - ;; - esac - link_all_deplibs_F77=yes - ;; - - sunos4*) - if test "x$host_vendor" = xsequent; then - # Use $CC to link under sequent, because it throws in some extra .o - # files that make .init and .fini sections work. - archive_cmds_F77='$CC -G ${wl}-h $soname -o $lib $libobjs $deplibs $compiler_flags' - else - archive_cmds_F77='$LD -assert pure-text -Bstatic -o $lib $libobjs $deplibs $linker_flags' - fi - hardcode_libdir_flag_spec_F77='-L$libdir' - hardcode_direct_F77=yes - hardcode_minus_L_F77=yes - hardcode_shlibpath_var_F77=no - ;; - - sysv4) - case $host_vendor in - sni) - archive_cmds_F77='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' - hardcode_direct_F77=yes # is this really true??? - ;; - siemens) - ## LD is ld it makes a PLAMLIB - ## CC just makes a GrossModule. - archive_cmds_F77='$LD -G -o $lib $libobjs $deplibs $linker_flags' - reload_cmds_F77='$CC -r -o $output$reload_objs' - hardcode_direct_F77=no - ;; - motorola) - archive_cmds_F77='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' - hardcode_direct_F77=no #Motorola manual says yes, but my tests say they lie - ;; - esac - runpath_var='LD_RUN_PATH' - hardcode_shlibpath_var_F77=no - ;; - - sysv4.3*) - archive_cmds_F77='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' - hardcode_shlibpath_var_F77=no - export_dynamic_flag_spec_F77='-Bexport' - ;; - - sysv4*MP*) - if test -d /usr/nec; then - archive_cmds_F77='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' - hardcode_shlibpath_var_F77=no - runpath_var=LD_RUN_PATH - hardcode_runpath_var=yes - ld_shlibs_F77=yes - fi - ;; - - sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[01].[10]* | unixware7* | sco3.2v5.0.[024]*) - no_undefined_flag_F77='${wl}-z,text' - archive_cmds_need_lc_F77=no - hardcode_shlibpath_var_F77=no - runpath_var='LD_RUN_PATH' - - if test "$GCC" = yes; then - archive_cmds_F77='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - archive_expsym_cmds_F77='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - else - archive_cmds_F77='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - archive_expsym_cmds_F77='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - fi - ;; - - sysv5* | sco3.2v5* | sco5v6*) - # Note: We can NOT use -z defs as we might desire, because we do not - # link with -lc, and that would cause any symbols used from libc to - # always be unresolved, which means just about no library would - # ever link correctly. If we're not using GNU ld we use -z text - # though, which does catch some bad symbols but isn't as heavy-handed - # as -z defs. - no_undefined_flag_F77='${wl}-z,text' - allow_undefined_flag_F77='${wl}-z,nodefs' - archive_cmds_need_lc_F77=no - hardcode_shlibpath_var_F77=no - hardcode_libdir_flag_spec_F77='`test -z "$SCOABSPATH" && echo ${wl}-R,$libdir`' - hardcode_libdir_separator_F77=':' - link_all_deplibs_F77=yes - export_dynamic_flag_spec_F77='${wl}-Bexport' - runpath_var='LD_RUN_PATH' - - if test "$GCC" = yes; then - archive_cmds_F77='$CC -shared ${wl}-h,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags' - archive_expsym_cmds_F77='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags' - else - archive_cmds_F77='$CC -G ${wl}-h,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags' - archive_expsym_cmds_F77='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags' - fi - ;; - - uts4*) - archive_cmds_F77='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' - hardcode_libdir_flag_spec_F77='-L$libdir' - hardcode_shlibpath_var_F77=no - ;; - - *) - ld_shlibs_F77=no - ;; - esac - fi - -{ echo "$as_me:$LINENO: result: $ld_shlibs_F77" >&5 -echo "${ECHO_T}$ld_shlibs_F77" >&6; } -test "$ld_shlibs_F77" = no && can_build_shared=no - -# -# Do we need to explicitly link libc? -# -case "x$archive_cmds_need_lc_F77" in -x|xyes) - # Assume -lc should be added - archive_cmds_need_lc_F77=yes - - if test "$enable_shared" = yes && test "$GCC" = yes; then - case $archive_cmds_F77 in - *'~'*) - # FIXME: we may have to deal with multi-command sequences. - ;; - '$CC '*) - # Test whether the compiler implicitly links with -lc since on some - # systems, -lgcc has to come before -lc. If gcc already passes -lc - # to ld, don't add -lc before -lgcc. - { echo "$as_me:$LINENO: checking whether -lc should be explicitly linked in" >&5 -echo $ECHO_N "checking whether -lc should be explicitly linked in... $ECHO_C" >&6; } - $rm conftest* - echo "$lt_simple_compile_test_code" > conftest.$ac_ext - - if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } 2>conftest.err; then - soname=conftest - lib=conftest - libobjs=conftest.$ac_objext - deplibs= - wl=$lt_prog_compiler_wl_F77 - pic_flag=$lt_prog_compiler_pic_F77 - compiler_flags=-v - linker_flags=-v - verstring= - output_objdir=. - libname=conftest - lt_save_allow_undefined_flag=$allow_undefined_flag_F77 - allow_undefined_flag_F77= - if { (eval echo "$as_me:$LINENO: \"$archive_cmds_F77 2\>\&1 \| grep \" -lc \" \>/dev/null 2\>\&1\"") >&5 - (eval $archive_cmds_F77 2\>\&1 \| grep \" -lc \" \>/dev/null 2\>\&1) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } - then - archive_cmds_need_lc_F77=no - else - archive_cmds_need_lc_F77=yes - fi - allow_undefined_flag_F77=$lt_save_allow_undefined_flag - else - cat conftest.err 1>&5 - fi - $rm conftest* - { echo "$as_me:$LINENO: result: $archive_cmds_need_lc_F77" >&5 -echo "${ECHO_T}$archive_cmds_need_lc_F77" >&6; } - ;; - esac - fi - ;; -esac - -{ echo "$as_me:$LINENO: checking dynamic linker characteristics" >&5 -echo $ECHO_N "checking dynamic linker characteristics... $ECHO_C" >&6; } -library_names_spec= -libname_spec='lib$name' -soname_spec= -shrext_cmds=".so" -postinstall_cmds= -postuninstall_cmds= -finish_cmds= -finish_eval= -shlibpath_var= -shlibpath_overrides_runpath=unknown -version_type=none -dynamic_linker="$host_os ld.so" -sys_lib_dlsearch_path_spec="/lib /usr/lib" - -need_lib_prefix=unknown -hardcode_into_libs=no - -# when you set need_version to no, make sure it does not cause -set_version -# flags to be left without arguments -need_version=unknown - -case $host_os in -aix3*) - version_type=linux - library_names_spec='${libname}${release}${shared_ext}$versuffix $libname.a' - shlibpath_var=LIBPATH - - # AIX 3 has no versioning support, so we append a major version to the name. - soname_spec='${libname}${release}${shared_ext}$major' - ;; - -aix4* | aix5*) - version_type=linux - need_lib_prefix=no - need_version=no - hardcode_into_libs=yes - if test "$host_cpu" = ia64; then - # AIX 5 supports IA64 - library_names_spec='${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext}$versuffix $libname${shared_ext}' - shlibpath_var=LD_LIBRARY_PATH - else - # With GCC up to 2.95.x, collect2 would create an import file - # for dependence libraries. The import file would start with - # the line `#! .'. This would cause the generated library to - # depend on `.', always an invalid library. This was fixed in - # development snapshots of GCC prior to 3.0. - case $host_os in - aix4 | aix4.[01] | aix4.[01].*) - if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)' - echo ' yes ' - echo '#endif'; } | ${CC} -E - | grep yes > /dev/null; then - : - else - can_build_shared=no - fi - ;; - esac - # AIX (on Power*) has no versioning support, so currently we can not hardcode correct - # soname into executable. Probably we can add versioning support to - # collect2, so additional links can be useful in future. - if test "$aix_use_runtimelinking" = yes; then - # If using run time linking (on AIX 4.2 or later) use lib.so - # instead of lib.a to let people know that these are not - # typical AIX shared libraries. - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - else - # We preserve .a as extension for shared libraries through AIX4.2 - # and later when we are not doing run time linking. - library_names_spec='${libname}${release}.a $libname.a' - soname_spec='${libname}${release}${shared_ext}$major' - fi - shlibpath_var=LIBPATH - fi - ;; - -amigaos*) - library_names_spec='$libname.ixlibrary $libname.a' - # Create ${libname}_ixlibrary.a entries in /sys/libs. - finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`$echo "X$lib" | $Xsed -e '\''s%^.*/\([^/]*\)\.ixlibrary$%\1%'\''`; test $rm /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done' - ;; - -beos*) - library_names_spec='${libname}${shared_ext}' - dynamic_linker="$host_os ld.so" - shlibpath_var=LIBRARY_PATH - ;; - -bsdi[45]*) - version_type=linux - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir' - shlibpath_var=LD_LIBRARY_PATH - sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib" - sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib" - # the default ld.so.conf also contains /usr/contrib/lib and - # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow - # libtool to hard-code these into programs - ;; - -cygwin* | mingw* | pw32*) - version_type=windows - shrext_cmds=".dll" - need_version=no - need_lib_prefix=no - - case $GCC,$host_os in - yes,cygwin* | yes,mingw* | yes,pw32*) - library_names_spec='$libname.dll.a' - # DLL is installed to $(libdir)/../bin by postinstall_cmds - postinstall_cmds='base_file=`basename \${file}`~ - dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i;echo \$dlname'\''`~ - dldir=$destdir/`dirname \$dlpath`~ - test -d \$dldir || mkdir -p \$dldir~ - $install_prog $dir/$dlname \$dldir/$dlname~ - chmod a+x \$dldir/$dlname' - postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ - dlpath=$dir/\$dldll~ - $rm \$dlpath' - shlibpath_overrides_runpath=yes - - case $host_os in - cygwin*) - # Cygwin DLLs use 'cyg' prefix rather than 'lib' - soname_spec='`echo ${libname} | sed -e 's/^lib/cyg/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' - sys_lib_search_path_spec="/usr/lib /lib/w32api /lib /usr/local/lib" - ;; - mingw*) - # MinGW DLLs use traditional 'lib' prefix - soname_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' - sys_lib_search_path_spec=`$CC -print-search-dirs | grep "^libraries:" | $SED -e "s/^libraries://" -e "s,=/,/,g"` - if echo "$sys_lib_search_path_spec" | grep ';[c-zC-Z]:/' >/dev/null; then - # It is most probably a Windows format PATH printed by - # mingw gcc, but we are running on Cygwin. Gcc prints its search - # path with ; separators, and with drive letters. We can handle the - # drive letters (cygwin fileutils understands them), so leave them, - # especially as we might pass files found there to a mingw objdump, - # which wouldn't understand a cygwinified path. Ahh. - sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'` - else - sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` - fi - ;; - pw32*) - # pw32 DLLs use 'pw' prefix rather than 'lib' - library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' - ;; - esac - ;; - - *) - library_names_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext} $libname.lib' - ;; - esac - dynamic_linker='Win32 ld.exe' - # FIXME: first we should search . and the directory the executable is in - shlibpath_var=PATH - ;; - -darwin* | rhapsody*) - dynamic_linker="$host_os dyld" - version_type=darwin - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${versuffix}$shared_ext ${libname}${release}${major}$shared_ext ${libname}$shared_ext' - soname_spec='${libname}${release}${major}$shared_ext' - shlibpath_overrides_runpath=yes - shlibpath_var=DYLD_LIBRARY_PATH - shrext_cmds='`test .$module = .yes && echo .so || echo .dylib`' - - sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib' - ;; - -dgux*) - version_type=linux - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname$shared_ext' - soname_spec='${libname}${release}${shared_ext}$major' - shlibpath_var=LD_LIBRARY_PATH - ;; - -freebsd1*) - dynamic_linker=no - ;; - -freebsd* | dragonfly*) - # DragonFly does not have aout. When/if they implement a new - # versioning mechanism, adjust this. - if test -x /usr/bin/objformat; then - objformat=`/usr/bin/objformat` - else - case $host_os in - freebsd[123]*) objformat=aout ;; - *) objformat=elf ;; - esac - fi - version_type=freebsd-$objformat - case $version_type in - freebsd-elf*) - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' - need_version=no - need_lib_prefix=no - ;; - freebsd-*) - library_names_spec='${libname}${release}${shared_ext}$versuffix $libname${shared_ext}$versuffix' - need_version=yes - ;; - esac - shlibpath_var=LD_LIBRARY_PATH - case $host_os in - freebsd2*) - shlibpath_overrides_runpath=yes - ;; - freebsd3.[01]* | freebsdelf3.[01]*) - shlibpath_overrides_runpath=yes - hardcode_into_libs=yes - ;; - freebsd3.[2-9]* | freebsdelf3.[2-9]* | \ - freebsd4.[0-5] | freebsdelf4.[0-5] | freebsd4.1.1 | freebsdelf4.1.1) - shlibpath_overrides_runpath=no - hardcode_into_libs=yes - ;; - *) # from 4.6 on, and DragonFly - shlibpath_overrides_runpath=yes - hardcode_into_libs=yes - ;; - esac - ;; - -gnu*) - version_type=linux - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - shlibpath_var=LD_LIBRARY_PATH - hardcode_into_libs=yes - ;; - -hpux9* | hpux10* | hpux11*) - # Give a soname corresponding to the major version so that dld.sl refuses to - # link against other versions. - version_type=sunos - need_lib_prefix=no - need_version=no - case $host_cpu in - ia64*) - shrext_cmds='.so' - hardcode_into_libs=yes - dynamic_linker="$host_os dld.so" - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - if test "X$HPUX_IA64_MODE" = X32; then - sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib" - else - sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64" - fi - sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec - ;; - hppa*64*) - shrext_cmds='.sl' - hardcode_into_libs=yes - dynamic_linker="$host_os dld.sl" - shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH - shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64" - sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec - ;; - *) - shrext_cmds='.sl' - dynamic_linker="$host_os dld.sl" - shlibpath_var=SHLIB_PATH - shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - ;; - esac - # HP-UX runs *really* slowly unless shared libraries are mode 555. - postinstall_cmds='chmod 555 $lib' - ;; - -interix[3-9]*) - version_type=linux - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - dynamic_linker='Interix 3.x ld.so.1 (PE, like ELF)' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=no - hardcode_into_libs=yes - ;; - -irix5* | irix6* | nonstopux*) - case $host_os in - nonstopux*) version_type=nonstopux ;; - *) - if test "$lt_cv_prog_gnu_ld" = yes; then - version_type=linux - else - version_type=irix - fi ;; - esac - need_lib_prefix=no - need_version=no - soname_spec='${libname}${release}${shared_ext}$major' - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext} $libname${shared_ext}' - case $host_os in - irix5* | nonstopux*) - libsuff= shlibsuff= - ;; - *) - case $LD in # libtool.m4 will add one of these switches to LD - *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ") - libsuff= shlibsuff= libmagic=32-bit;; - *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ") - libsuff=32 shlibsuff=N32 libmagic=N32;; - *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ") - libsuff=64 shlibsuff=64 libmagic=64-bit;; - *) libsuff= shlibsuff= libmagic=never-match;; - esac - ;; - esac - shlibpath_var=LD_LIBRARY${shlibsuff}_PATH - shlibpath_overrides_runpath=no - sys_lib_search_path_spec="/usr/lib${libsuff} /lib${libsuff} /usr/local/lib${libsuff}" - sys_lib_dlsearch_path_spec="/usr/lib${libsuff} /lib${libsuff}" - hardcode_into_libs=yes - ;; - -# No shared lib support for Linux oldld, aout, or coff. -linux*oldld* | linux*aout* | linux*coff*) - dynamic_linker=no - ;; - -# This must be Linux ELF. -linux* | k*bsd*-gnu) - version_type=linux - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=no - # This implies no fast_install, which is unacceptable. - # Some rework will be needed to allow for fast_install - # before this can be enabled. - hardcode_into_libs=yes - sys_lib_search_path_spec="/usr/lib${libsuff} /lib${libsuff} /usr/local/lib${libsuff}" - sys_lib_dlsearch_path_spec="/usr/lib${libsuff} /lib${libsuff}" - - # Append ld.so.conf contents to the search path - if test -f /etc/ld.so.conf; then - lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s 2>/dev/null", \$2)); skip = 1; } { if (!skip) print \$0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;/^[ ]*hwcap[ ]/d;s/[:, ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;/^$/d' | tr '\n' ' '` - sys_lib_dlsearch_path_spec="$sys_lib_dlsearch_path_spec $lt_ld_extra" - fi - - # We used to test for /lib/ld.so.1 and disable shared libraries on - # powerpc, because MkLinux only supported shared libraries with the - # GNU dynamic linker. Since this was broken with cross compilers, - # most powerpc-linux boxes support dynamic linking these days and - # people can always --disable-shared, the test was removed, and we - # assume the GNU/Linux dynamic linker is in use. - dynamic_linker='GNU/Linux ld.so' - ;; - -netbsd*) - version_type=sunos - need_lib_prefix=no - need_version=no - if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' - finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' - dynamic_linker='NetBSD (a.out) ld.so' - else - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - dynamic_linker='NetBSD ld.elf_so' - fi - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=yes - hardcode_into_libs=yes - ;; - -newsos6) - version_type=linux - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=yes - ;; - -nto-qnx*) - version_type=linux - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=yes - ;; - -openbsd*) - version_type=sunos - sys_lib_dlsearch_path_spec="/usr/lib" - need_lib_prefix=no - # Some older versions of OpenBSD (3.3 at least) *do* need versioned libs. - case $host_os in - openbsd3.3 | openbsd3.3.*) need_version=yes ;; - *) need_version=no ;; - esac - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' - finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' - shlibpath_var=LD_LIBRARY_PATH - if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then - case $host_os in - openbsd2.[89] | openbsd2.[89].*) - shlibpath_overrides_runpath=no - ;; - *) - shlibpath_overrides_runpath=yes - ;; - esac - else - shlibpath_overrides_runpath=yes - fi - ;; - -os2*) - libname_spec='$name' - shrext_cmds=".dll" - need_lib_prefix=no - library_names_spec='$libname${shared_ext} $libname.a' - dynamic_linker='OS/2 ld.exe' - shlibpath_var=LIBPATH - ;; - -osf3* | osf4* | osf5*) - version_type=osf - need_lib_prefix=no - need_version=no - soname_spec='${libname}${release}${shared_ext}$major' - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - shlibpath_var=LD_LIBRARY_PATH - sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib" - sys_lib_dlsearch_path_spec="$sys_lib_search_path_spec" - ;; - -rdos*) - dynamic_linker=no - ;; - -solaris*) - version_type=linux - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=yes - hardcode_into_libs=yes - # ldd complains unless libraries are executable - postinstall_cmds='chmod +x $lib' - ;; - -sunos4*) - version_type=sunos - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' - finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=yes - if test "$with_gnu_ld" = yes; then - need_lib_prefix=no - fi - need_version=yes - ;; - -sysv4 | sysv4.3*) - version_type=linux - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - shlibpath_var=LD_LIBRARY_PATH - case $host_vendor in - sni) - shlibpath_overrides_runpath=no - need_lib_prefix=no - export_dynamic_flag_spec='${wl}-Blargedynsym' - runpath_var=LD_RUN_PATH - ;; - siemens) - need_lib_prefix=no - ;; - motorola) - need_lib_prefix=no - need_version=no - shlibpath_overrides_runpath=no - sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib' - ;; - esac - ;; - -sysv4*MP*) - if test -d /usr/nec ;then - version_type=linux - library_names_spec='$libname${shared_ext}.$versuffix $libname${shared_ext}.$major $libname${shared_ext}' - soname_spec='$libname${shared_ext}.$major' - shlibpath_var=LD_LIBRARY_PATH - fi - ;; - -sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) - version_type=freebsd-elf - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - shlibpath_var=LD_LIBRARY_PATH - hardcode_into_libs=yes - if test "$with_gnu_ld" = yes; then - sys_lib_search_path_spec='/usr/local/lib /usr/gnu/lib /usr/ccs/lib /usr/lib /lib' - shlibpath_overrides_runpath=no - else - sys_lib_search_path_spec='/usr/ccs/lib /usr/lib' - shlibpath_overrides_runpath=yes - case $host_os in - sco3.2v5*) - sys_lib_search_path_spec="$sys_lib_search_path_spec /lib" - ;; - esac - fi - sys_lib_dlsearch_path_spec='/usr/lib' - ;; - -uts4*) - version_type=linux - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - shlibpath_var=LD_LIBRARY_PATH - ;; - -*) - dynamic_linker=no - ;; -esac -{ echo "$as_me:$LINENO: result: $dynamic_linker" >&5 -echo "${ECHO_T}$dynamic_linker" >&6; } -test "$dynamic_linker" = no && can_build_shared=no - -variables_saved_for_relink="PATH $shlibpath_var $runpath_var" -if test "$GCC" = yes; then - variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH" -fi - -{ echo "$as_me:$LINENO: checking how to hardcode library paths into programs" >&5 -echo $ECHO_N "checking how to hardcode library paths into programs... $ECHO_C" >&6; } -hardcode_action_F77= -if test -n "$hardcode_libdir_flag_spec_F77" || \ - test -n "$runpath_var_F77" || \ - test "X$hardcode_automatic_F77" = "Xyes" ; then - - # We can hardcode non-existent directories. - if test "$hardcode_direct_F77" != no && - # If the only mechanism to avoid hardcoding is shlibpath_var, we - # have to relink, otherwise we might link with an installed library - # when we should be linking with a yet-to-be-installed one - ## test "$_LT_AC_TAGVAR(hardcode_shlibpath_var, F77)" != no && - test "$hardcode_minus_L_F77" != no; then - # Linking always hardcodes the temporary library directory. - hardcode_action_F77=relink - else - # We can link without hardcoding, and we can hardcode nonexisting dirs. - hardcode_action_F77=immediate - fi -else - # We cannot hardcode anything, or else we can only hardcode existing - # directories. - hardcode_action_F77=unsupported -fi -{ echo "$as_me:$LINENO: result: $hardcode_action_F77" >&5 -echo "${ECHO_T}$hardcode_action_F77" >&6; } - -if test "$hardcode_action_F77" = relink; then - # Fast installation is not supported - enable_fast_install=no -elif test "$shlibpath_overrides_runpath" = yes || - test "$enable_shared" = no; then - # Fast installation is not necessary - enable_fast_install=needless -fi - - -# The else clause should only fire when bootstrapping the -# libtool distribution, otherwise you forgot to ship ltmain.sh -# with your package, and you will get complaints that there are -# no rules to generate ltmain.sh. -if test -f "$ltmain"; then - # See if we are running on zsh, and set the options which allow our commands through - # without removal of \ escapes. - if test -n "${ZSH_VERSION+set}" ; then - setopt NO_GLOB_SUBST - fi - # Now quote all the things that may contain metacharacters while being - # careful not to overquote the AC_SUBSTed values. We take copies of the - # variables and quote the copies for generation of the libtool script. - for var in echo old_CC old_CFLAGS AR AR_FLAGS EGREP RANLIB LN_S LTCC LTCFLAGS NM \ - SED SHELL STRIP \ - libname_spec library_names_spec soname_spec extract_expsyms_cmds \ - old_striplib striplib file_magic_cmd finish_cmds finish_eval \ - deplibs_check_method reload_flag reload_cmds need_locks \ - lt_cv_sys_global_symbol_pipe lt_cv_sys_global_symbol_to_cdecl \ - lt_cv_sys_global_symbol_to_c_name_address \ - sys_lib_search_path_spec sys_lib_dlsearch_path_spec \ - old_postinstall_cmds old_postuninstall_cmds \ - compiler_F77 \ - CC_F77 \ - LD_F77 \ - lt_prog_compiler_wl_F77 \ - lt_prog_compiler_pic_F77 \ - lt_prog_compiler_static_F77 \ - lt_prog_compiler_no_builtin_flag_F77 \ - export_dynamic_flag_spec_F77 \ - thread_safe_flag_spec_F77 \ - whole_archive_flag_spec_F77 \ - enable_shared_with_static_runtimes_F77 \ - old_archive_cmds_F77 \ - old_archive_from_new_cmds_F77 \ - predep_objects_F77 \ - postdep_objects_F77 \ - predeps_F77 \ - postdeps_F77 \ - compiler_lib_search_path_F77 \ - archive_cmds_F77 \ - archive_expsym_cmds_F77 \ - postinstall_cmds_F77 \ - postuninstall_cmds_F77 \ - old_archive_from_expsyms_cmds_F77 \ - allow_undefined_flag_F77 \ - no_undefined_flag_F77 \ - export_symbols_cmds_F77 \ - hardcode_libdir_flag_spec_F77 \ - hardcode_libdir_flag_spec_ld_F77 \ - hardcode_libdir_separator_F77 \ - hardcode_automatic_F77 \ - module_cmds_F77 \ - module_expsym_cmds_F77 \ - lt_cv_prog_compiler_c_o_F77 \ - fix_srcfile_path_F77 \ - exclude_expsyms_F77 \ - include_expsyms_F77; do - - case $var in - old_archive_cmds_F77 | \ - old_archive_from_new_cmds_F77 | \ - archive_cmds_F77 | \ - archive_expsym_cmds_F77 | \ - module_cmds_F77 | \ - module_expsym_cmds_F77 | \ - old_archive_from_expsyms_cmds_F77 | \ - export_symbols_cmds_F77 | \ - extract_expsyms_cmds | reload_cmds | finish_cmds | \ - postinstall_cmds | postuninstall_cmds | \ - old_postinstall_cmds | old_postuninstall_cmds | \ - sys_lib_search_path_spec | sys_lib_dlsearch_path_spec) - # Double-quote double-evaled strings. - eval "lt_$var=\\\"\`\$echo \"X\$$var\" | \$Xsed -e \"\$double_quote_subst\" -e \"\$sed_quote_subst\" -e \"\$delay_variable_subst\"\`\\\"" - ;; - *) - eval "lt_$var=\\\"\`\$echo \"X\$$var\" | \$Xsed -e \"\$sed_quote_subst\"\`\\\"" - ;; - esac - done - - case $lt_echo in - *'\$0 --fallback-echo"') - lt_echo=`$echo "X$lt_echo" | $Xsed -e 's/\\\\\\\$0 --fallback-echo"$/$0 --fallback-echo"/'` - ;; - esac - -cfgfile="$ofile" - - cat <<__EOF__ >> "$cfgfile" -# ### BEGIN LIBTOOL TAG CONFIG: $tagname - -# Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`: - -# Shell to use when invoking shell scripts. -SHELL=$lt_SHELL - -# Whether or not to build shared libraries. -build_libtool_libs=$enable_shared - -# Whether or not to build static libraries. -build_old_libs=$enable_static - -# Whether or not to add -lc for building shared libraries. -build_libtool_need_lc=$archive_cmds_need_lc_F77 - -# Whether or not to disallow shared libs when runtime libs are static -allow_libtool_libs_with_static_runtimes=$enable_shared_with_static_runtimes_F77 - -# Whether or not to optimize for fast installation. -fast_install=$enable_fast_install - -# The host system. -host_alias=$host_alias -host=$host -host_os=$host_os - -# The build system. -build_alias=$build_alias -build=$build -build_os=$build_os - -# An echo program that does not interpret backslashes. -echo=$lt_echo - -# The archiver. -AR=$lt_AR -AR_FLAGS=$lt_AR_FLAGS - -# A C compiler. -LTCC=$lt_LTCC - -# LTCC compiler flags. -LTCFLAGS=$lt_LTCFLAGS - -# A language-specific compiler. -CC=$lt_compiler_F77 - -# Is the compiler the GNU C compiler? -with_gcc=$GCC_F77 - -# An ERE matcher. -EGREP=$lt_EGREP - -# The linker used to build libraries. -LD=$lt_LD_F77 - -# Whether we need hard or soft links. -LN_S=$lt_LN_S - -# A BSD-compatible nm program. -NM=$lt_NM - -# A symbol stripping program -STRIP=$lt_STRIP - -# Used to examine libraries when file_magic_cmd begins "file" -MAGIC_CMD=$MAGIC_CMD - -# Used on cygwin: DLL creation program. -DLLTOOL="$DLLTOOL" - -# Used on cygwin: object dumper. -OBJDUMP="$OBJDUMP" - -# Used on cygwin: assembler. -AS="$AS" - -# The name of the directory that contains temporary libtool files. -objdir=$objdir - -# How to create reloadable object files. -reload_flag=$lt_reload_flag -reload_cmds=$lt_reload_cmds - -# How to pass a linker flag through the compiler. -wl=$lt_lt_prog_compiler_wl_F77 - -# Object file suffix (normally "o"). -objext="$ac_objext" - -# Old archive suffix (normally "a"). -libext="$libext" - -# Shared library suffix (normally ".so"). -shrext_cmds='$shrext_cmds' - -# Executable file suffix (normally ""). -exeext="$exeext" - -# Additional compiler flags for building library objects. -pic_flag=$lt_lt_prog_compiler_pic_F77 -pic_mode=$pic_mode - -# What is the maximum length of a command? -max_cmd_len=$lt_cv_sys_max_cmd_len - -# Does compiler simultaneously support -c and -o options? -compiler_c_o=$lt_lt_cv_prog_compiler_c_o_F77 - -# Must we lock files when doing compilation? -need_locks=$lt_need_locks - -# Do we need the lib prefix for modules? -need_lib_prefix=$need_lib_prefix - -# Do we need a version for libraries? -need_version=$need_version - -# Whether dlopen is supported. -dlopen_support=$enable_dlopen - -# Whether dlopen of programs is supported. -dlopen_self=$enable_dlopen_self - -# Whether dlopen of statically linked programs is supported. -dlopen_self_static=$enable_dlopen_self_static - -# Compiler flag to prevent dynamic linking. -link_static_flag=$lt_lt_prog_compiler_static_F77 - -# Compiler flag to turn off builtin functions. -no_builtin_flag=$lt_lt_prog_compiler_no_builtin_flag_F77 - -# Compiler flag to allow reflexive dlopens. -export_dynamic_flag_spec=$lt_export_dynamic_flag_spec_F77 - -# Compiler flag to generate shared objects directly from archives. -whole_archive_flag_spec=$lt_whole_archive_flag_spec_F77 - -# Compiler flag to generate thread-safe objects. -thread_safe_flag_spec=$lt_thread_safe_flag_spec_F77 - -# Library versioning type. -version_type=$version_type - -# Format of library name prefix. -libname_spec=$lt_libname_spec - -# List of archive names. First name is the real one, the rest are links. -# The last name is the one that the linker finds with -lNAME. -library_names_spec=$lt_library_names_spec - -# The coded name of the library, if different from the real name. -soname_spec=$lt_soname_spec - -# Commands used to build and install an old-style archive. -RANLIB=$lt_RANLIB -old_archive_cmds=$lt_old_archive_cmds_F77 -old_postinstall_cmds=$lt_old_postinstall_cmds -old_postuninstall_cmds=$lt_old_postuninstall_cmds - -# Create an old-style archive from a shared archive. -old_archive_from_new_cmds=$lt_old_archive_from_new_cmds_F77 - -# Create a temporary old-style archive to link instead of a shared archive. -old_archive_from_expsyms_cmds=$lt_old_archive_from_expsyms_cmds_F77 - -# Commands used to build and install a shared archive. -archive_cmds=$lt_archive_cmds_F77 -archive_expsym_cmds=$lt_archive_expsym_cmds_F77 -postinstall_cmds=$lt_postinstall_cmds -postuninstall_cmds=$lt_postuninstall_cmds - -# Commands used to build a loadable module (assumed same as above if empty) -module_cmds=$lt_module_cmds_F77 -module_expsym_cmds=$lt_module_expsym_cmds_F77 - -# Commands to strip libraries. -old_striplib=$lt_old_striplib -striplib=$lt_striplib - -# Dependencies to place before the objects being linked to create a -# shared library. -predep_objects=$lt_predep_objects_F77 - -# Dependencies to place after the objects being linked to create a -# shared library. -postdep_objects=$lt_postdep_objects_F77 - -# Dependencies to place before the objects being linked to create a -# shared library. -predeps=$lt_predeps_F77 - -# Dependencies to place after the objects being linked to create a -# shared library. -postdeps=$lt_postdeps_F77 - -# The library search path used internally by the compiler when linking -# a shared library. -compiler_lib_search_path=$lt_compiler_lib_search_path_F77 - -# Method to check whether dependent libraries are shared objects. -deplibs_check_method=$lt_deplibs_check_method - -# Command to use when deplibs_check_method == file_magic. -file_magic_cmd=$lt_file_magic_cmd - -# Flag that allows shared libraries with undefined symbols to be built. -allow_undefined_flag=$lt_allow_undefined_flag_F77 - -# Flag that forces no undefined symbols. -no_undefined_flag=$lt_no_undefined_flag_F77 - -# Commands used to finish a libtool library installation in a directory. -finish_cmds=$lt_finish_cmds - -# Same as above, but a single script fragment to be evaled but not shown. -finish_eval=$lt_finish_eval - -# Take the output of nm and produce a listing of raw symbols and C names. -global_symbol_pipe=$lt_lt_cv_sys_global_symbol_pipe - -# Transform the output of nm in a proper C declaration -global_symbol_to_cdecl=$lt_lt_cv_sys_global_symbol_to_cdecl - -# Transform the output of nm in a C name address pair -global_symbol_to_c_name_address=$lt_lt_cv_sys_global_symbol_to_c_name_address - -# This is the shared library runtime path variable. -runpath_var=$runpath_var - -# This is the shared library path variable. -shlibpath_var=$shlibpath_var - -# Is shlibpath searched before the hard-coded library search path? -shlibpath_overrides_runpath=$shlibpath_overrides_runpath - -# How to hardcode a shared library path into an executable. -hardcode_action=$hardcode_action_F77 - -# Whether we should hardcode library paths into libraries. -hardcode_into_libs=$hardcode_into_libs - -# Flag to hardcode \$libdir into a binary during linking. -# This must work even if \$libdir does not exist. -hardcode_libdir_flag_spec=$lt_hardcode_libdir_flag_spec_F77 - -# If ld is used when linking, flag to hardcode \$libdir into -# a binary during linking. This must work even if \$libdir does -# not exist. -hardcode_libdir_flag_spec_ld=$lt_hardcode_libdir_flag_spec_ld_F77 - -# Whether we need a single -rpath flag with a separated argument. -hardcode_libdir_separator=$lt_hardcode_libdir_separator_F77 - -# Set to yes if using DIR/libNAME${shared_ext} during linking hardcodes DIR into the -# resulting binary. -hardcode_direct=$hardcode_direct_F77 - -# Set to yes if using the -LDIR flag during linking hardcodes DIR into the -# resulting binary. -hardcode_minus_L=$hardcode_minus_L_F77 - -# Set to yes if using SHLIBPATH_VAR=DIR during linking hardcodes DIR into -# the resulting binary. -hardcode_shlibpath_var=$hardcode_shlibpath_var_F77 - -# Set to yes if building a shared library automatically hardcodes DIR into the library -# and all subsequent libraries and executables linked against it. -hardcode_automatic=$hardcode_automatic_F77 - -# Variables whose values should be saved in libtool wrapper scripts and -# restored at relink time. -variables_saved_for_relink="$variables_saved_for_relink" - -# Whether libtool must link a program against all its dependency libraries. -link_all_deplibs=$link_all_deplibs_F77 - -# Compile-time system search path for libraries -sys_lib_search_path_spec=$lt_sys_lib_search_path_spec - -# Run-time system search path for libraries -sys_lib_dlsearch_path_spec=$lt_sys_lib_dlsearch_path_spec - -# Fix the shell variable \$srcfile for the compiler. -fix_srcfile_path=$lt_fix_srcfile_path - -# Set to yes if exported symbols are required. -always_export_symbols=$always_export_symbols_F77 - -# The commands to list exported symbols. -export_symbols_cmds=$lt_export_symbols_cmds_F77 - -# The commands to extract the exported symbol list from a shared archive. -extract_expsyms_cmds=$lt_extract_expsyms_cmds - -# Symbols that should not be listed in the preloaded symbols. -exclude_expsyms=$lt_exclude_expsyms_F77 - -# Symbols that must always be exported. -include_expsyms=$lt_include_expsyms_F77 - -# ### END LIBTOOL TAG CONFIG: $tagname - -__EOF__ - - -else - # If there is no Makefile yet, we rely on a make rule to execute - # `config.status --recheck' to rerun these tests and create the - # libtool script then. - ltmain_in=`echo $ltmain | sed -e 's/\.sh$/.in/'` - if test -f "$ltmain_in"; then - test -f Makefile && make "$ltmain" - fi -fi - - -ac_ext=c -ac_cpp='$CPP $CPPFLAGS' -ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_c_compiler_gnu - -CC="$lt_save_CC" - - else - tagname="" - fi - ;; - - GCJ) - if test -n "$GCJ" && test "X$GCJ" != "Xno"; then - - -# Source file extension for Java test sources. -ac_ext=java - -# Object file extension for compiled Java test sources. -objext=o -objext_GCJ=$objext - -# Code to be used in simple compile tests -lt_simple_compile_test_code="class foo {}" - -# Code to be used in simple link tests -lt_simple_link_test_code='public class conftest { public static void main(String[] argv) {}; }' - -# ltmain only uses $CC for tagged configurations so make sure $CC is set. - -# If no C compiler was specified, use CC. -LTCC=${LTCC-"$CC"} - -# If no C compiler flags were specified, use CFLAGS. -LTCFLAGS=${LTCFLAGS-"$CFLAGS"} - -# Allow CC to be a program name with arguments. -compiler=$CC - - -# save warnings/boilerplate of simple test code -ac_outfile=conftest.$ac_objext -echo "$lt_simple_compile_test_code" >conftest.$ac_ext -eval "$ac_compile" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err -_lt_compiler_boilerplate=`cat conftest.err` -$rm conftest* - -ac_outfile=conftest.$ac_objext -echo "$lt_simple_link_test_code" >conftest.$ac_ext -eval "$ac_link" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err -_lt_linker_boilerplate=`cat conftest.err` -$rm conftest* - - -# Allow CC to be a program name with arguments. -lt_save_CC="$CC" -CC=${GCJ-"gcj"} -compiler=$CC -compiler_GCJ=$CC -for cc_temp in $compiler""; do - case $cc_temp in - compile | *[\\/]compile | ccache | *[\\/]ccache ) ;; - distcc | *[\\/]distcc | purify | *[\\/]purify ) ;; - \-*) ;; - *) break;; - esac -done -cc_basename=`$echo "X$cc_temp" | $Xsed -e 's%.*/%%' -e "s%^$host_alias-%%"` - - -# GCJ did not exist at the time GCC didn't implicitly link libc in. -archive_cmds_need_lc_GCJ=no - -old_archive_cmds_GCJ=$old_archive_cmds - - -lt_prog_compiler_no_builtin_flag_GCJ= - -if test "$GCC" = yes; then - lt_prog_compiler_no_builtin_flag_GCJ=' -fno-builtin' - - -{ echo "$as_me:$LINENO: checking if $compiler supports -fno-rtti -fno-exceptions" >&5 -echo $ECHO_N "checking if $compiler supports -fno-rtti -fno-exceptions... $ECHO_C" >&6; } -if test "${lt_cv_prog_compiler_rtti_exceptions+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - lt_cv_prog_compiler_rtti_exceptions=no - ac_outfile=conftest.$ac_objext - echo "$lt_simple_compile_test_code" > conftest.$ac_ext - lt_compiler_flag="-fno-rtti -fno-exceptions" - # Insert the option either (1) after the last *FLAGS variable, or - # (2) before a word containing "conftest.", or (3) at the end. - # Note that $ac_compile itself does not contain backslashes and begins - # with a dollar sign (not a hyphen), so the echo should work correctly. - # The option is referenced via a variable to avoid confusing sed. - lt_compile=`echo "$ac_compile" | $SED \ - -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ - -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ - -e 's:$: $lt_compiler_flag:'` - (eval echo "\"\$as_me:16662: $lt_compile\"" >&5) - (eval "$lt_compile" 2>conftest.err) - ac_status=$? - cat conftest.err >&5 - echo "$as_me:16666: \$? = $ac_status" >&5 - if (exit $ac_status) && test -s "$ac_outfile"; then - # The compiler can only warn and ignore the option if not recognized - # So say no if there are warnings other than the usual output. - $echo "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' >conftest.exp - $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 - if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then - lt_cv_prog_compiler_rtti_exceptions=yes - fi - fi - $rm conftest* - -fi -{ echo "$as_me:$LINENO: result: $lt_cv_prog_compiler_rtti_exceptions" >&5 -echo "${ECHO_T}$lt_cv_prog_compiler_rtti_exceptions" >&6; } - -if test x"$lt_cv_prog_compiler_rtti_exceptions" = xyes; then - lt_prog_compiler_no_builtin_flag_GCJ="$lt_prog_compiler_no_builtin_flag_GCJ -fno-rtti -fno-exceptions" -else - : -fi - -fi - -lt_prog_compiler_wl_GCJ= -lt_prog_compiler_pic_GCJ= -lt_prog_compiler_static_GCJ= - -{ echo "$as_me:$LINENO: checking for $compiler option to produce PIC" >&5 -echo $ECHO_N "checking for $compiler option to produce PIC... $ECHO_C" >&6; } - - if test "$GCC" = yes; then - lt_prog_compiler_wl_GCJ='-Wl,' - lt_prog_compiler_static_GCJ='-static' - - case $host_os in - aix*) - # All AIX code is PIC. - if test "$host_cpu" = ia64; then - # AIX 5 now supports IA64 processor - lt_prog_compiler_static_GCJ='-Bstatic' - fi - ;; - - amigaos*) - # FIXME: we need at least 68020 code to build shared libraries, but - # adding the `-m68020' flag to GCC prevents building anything better, - # like `-m68040'. - lt_prog_compiler_pic_GCJ='-m68020 -resident32 -malways-restore-a4' - ;; - - beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) - # PIC is the default for these OSes. - ;; - - mingw* | cygwin* | pw32* | os2*) - # This hack is so that the source file can tell whether it is being - # built for inclusion in a dll (and should export symbols for example). - # Although the cygwin gcc ignores -fPIC, still need this for old-style - # (--disable-auto-import) libraries - lt_prog_compiler_pic_GCJ='-DDLL_EXPORT' - ;; - - darwin* | rhapsody*) - # PIC is the default on this platform - # Common symbols not allowed in MH_DYLIB files - lt_prog_compiler_pic_GCJ='-fno-common' - ;; - - interix[3-9]*) - # Interix 3.x gcc -fpic/-fPIC options generate broken code. - # Instead, we relocate shared libraries at runtime. - ;; - - msdosdjgpp*) - # Just because we use GCC doesn't mean we suddenly get shared libraries - # on systems that don't support them. - lt_prog_compiler_can_build_shared_GCJ=no - enable_shared=no - ;; - - sysv4*MP*) - if test -d /usr/nec; then - lt_prog_compiler_pic_GCJ=-Kconform_pic - fi - ;; - - hpux*) - # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but - # not for PA HP-UX. - case $host_cpu in - hppa*64*|ia64*) - # +Z the default - ;; - *) - lt_prog_compiler_pic_GCJ='-fPIC' - ;; - esac - ;; - - *) - lt_prog_compiler_pic_GCJ='-fPIC' - ;; - esac - else - # PORTME Check for flag to pass linker flags through the system compiler. - case $host_os in - aix*) - lt_prog_compiler_wl_GCJ='-Wl,' - if test "$host_cpu" = ia64; then - # AIX 5 now supports IA64 processor - lt_prog_compiler_static_GCJ='-Bstatic' - else - lt_prog_compiler_static_GCJ='-bnso -bI:/lib/syscalls.exp' - fi - ;; - darwin*) - # PIC is the default on this platform - # Common symbols not allowed in MH_DYLIB files - case $cc_basename in - xlc*) - lt_prog_compiler_pic_GCJ='-qnocommon' - lt_prog_compiler_wl_GCJ='-Wl,' - ;; - esac - ;; - - mingw* | cygwin* | pw32* | os2*) - # This hack is so that the source file can tell whether it is being - # built for inclusion in a dll (and should export symbols for example). - lt_prog_compiler_pic_GCJ='-DDLL_EXPORT' - ;; - - hpux9* | hpux10* | hpux11*) - lt_prog_compiler_wl_GCJ='-Wl,' - # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but - # not for PA HP-UX. - case $host_cpu in - hppa*64*|ia64*) - # +Z the default - ;; - *) - lt_prog_compiler_pic_GCJ='+Z' - ;; - esac - # Is there a better lt_prog_compiler_static that works with the bundled CC? - lt_prog_compiler_static_GCJ='${wl}-a ${wl}archive' - ;; - - irix5* | irix6* | nonstopux*) - lt_prog_compiler_wl_GCJ='-Wl,' - # PIC (with -KPIC) is the default. - lt_prog_compiler_static_GCJ='-non_shared' - ;; - - newsos6) - lt_prog_compiler_pic_GCJ='-KPIC' - lt_prog_compiler_static_GCJ='-Bstatic' - ;; - - linux* | k*bsd*-gnu) - case $cc_basename in - icc* | ecc*) - lt_prog_compiler_wl_GCJ='-Wl,' - lt_prog_compiler_pic_GCJ='-KPIC' - lt_prog_compiler_static_GCJ='-static' - ;; - pgcc* | pgf77* | pgf90* | pgf95*) - # Portland Group compilers (*not* the Pentium gcc compiler, - # which looks to be a dead project) - lt_prog_compiler_wl_GCJ='-Wl,' - lt_prog_compiler_pic_GCJ='-fpic' - lt_prog_compiler_static_GCJ='-Bstatic' - ;; - ccc*) - lt_prog_compiler_wl_GCJ='-Wl,' - # All Alpha code is PIC. - lt_prog_compiler_static_GCJ='-non_shared' - ;; - *) - case `$CC -V 2>&1 | sed 5q` in - *Sun\ C*) - # Sun C 5.9 - lt_prog_compiler_pic_GCJ='-KPIC' - lt_prog_compiler_static_GCJ='-Bstatic' - lt_prog_compiler_wl_GCJ='-Wl,' - ;; - *Sun\ F*) - # Sun Fortran 8.3 passes all unrecognized flags to the linker - lt_prog_compiler_pic_GCJ='-KPIC' - lt_prog_compiler_static_GCJ='-Bstatic' - lt_prog_compiler_wl_GCJ='' - ;; - esac - ;; - esac - ;; - - osf3* | osf4* | osf5*) - lt_prog_compiler_wl_GCJ='-Wl,' - # All OSF/1 code is PIC. - lt_prog_compiler_static_GCJ='-non_shared' - ;; - - rdos*) - lt_prog_compiler_static_GCJ='-non_shared' - ;; - - solaris*) - lt_prog_compiler_pic_GCJ='-KPIC' - lt_prog_compiler_static_GCJ='-Bstatic' - case $cc_basename in - f77* | f90* | f95*) - lt_prog_compiler_wl_GCJ='-Qoption ld ';; - *) - lt_prog_compiler_wl_GCJ='-Wl,';; - esac - ;; - - sunos4*) - lt_prog_compiler_wl_GCJ='-Qoption ld ' - lt_prog_compiler_pic_GCJ='-PIC' - lt_prog_compiler_static_GCJ='-Bstatic' - ;; - - sysv4 | sysv4.2uw2* | sysv4.3*) - lt_prog_compiler_wl_GCJ='-Wl,' - lt_prog_compiler_pic_GCJ='-KPIC' - lt_prog_compiler_static_GCJ='-Bstatic' - ;; - - sysv4*MP*) - if test -d /usr/nec ;then - lt_prog_compiler_pic_GCJ='-Kconform_pic' - lt_prog_compiler_static_GCJ='-Bstatic' - fi - ;; - - sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*) - lt_prog_compiler_wl_GCJ='-Wl,' - lt_prog_compiler_pic_GCJ='-KPIC' - lt_prog_compiler_static_GCJ='-Bstatic' - ;; - - unicos*) - lt_prog_compiler_wl_GCJ='-Wl,' - lt_prog_compiler_can_build_shared_GCJ=no - ;; - - uts4*) - lt_prog_compiler_pic_GCJ='-pic' - lt_prog_compiler_static_GCJ='-Bstatic' - ;; - - *) - lt_prog_compiler_can_build_shared_GCJ=no - ;; - esac - fi - -{ echo "$as_me:$LINENO: result: $lt_prog_compiler_pic_GCJ" >&5 -echo "${ECHO_T}$lt_prog_compiler_pic_GCJ" >&6; } - -# -# Check to make sure the PIC flag actually works. -# -if test -n "$lt_prog_compiler_pic_GCJ"; then - -{ echo "$as_me:$LINENO: checking if $compiler PIC flag $lt_prog_compiler_pic_GCJ works" >&5 -echo $ECHO_N "checking if $compiler PIC flag $lt_prog_compiler_pic_GCJ works... $ECHO_C" >&6; } -if test "${lt_prog_compiler_pic_works_GCJ+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - lt_prog_compiler_pic_works_GCJ=no - ac_outfile=conftest.$ac_objext - echo "$lt_simple_compile_test_code" > conftest.$ac_ext - lt_compiler_flag="$lt_prog_compiler_pic_GCJ" - # Insert the option either (1) after the last *FLAGS variable, or - # (2) before a word containing "conftest.", or (3) at the end. - # Note that $ac_compile itself does not contain backslashes and begins - # with a dollar sign (not a hyphen), so the echo should work correctly. - # The option is referenced via a variable to avoid confusing sed. - lt_compile=`echo "$ac_compile" | $SED \ - -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ - -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ - -e 's:$: $lt_compiler_flag:'` - (eval echo "\"\$as_me:16952: $lt_compile\"" >&5) - (eval "$lt_compile" 2>conftest.err) - ac_status=$? - cat conftest.err >&5 - echo "$as_me:16956: \$? = $ac_status" >&5 - if (exit $ac_status) && test -s "$ac_outfile"; then - # The compiler can only warn and ignore the option if not recognized - # So say no if there are warnings other than the usual output. - $echo "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' >conftest.exp - $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 - if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then - lt_prog_compiler_pic_works_GCJ=yes - fi - fi - $rm conftest* - -fi -{ echo "$as_me:$LINENO: result: $lt_prog_compiler_pic_works_GCJ" >&5 -echo "${ECHO_T}$lt_prog_compiler_pic_works_GCJ" >&6; } - -if test x"$lt_prog_compiler_pic_works_GCJ" = xyes; then - case $lt_prog_compiler_pic_GCJ in - "" | " "*) ;; - *) lt_prog_compiler_pic_GCJ=" $lt_prog_compiler_pic_GCJ" ;; - esac -else - lt_prog_compiler_pic_GCJ= - lt_prog_compiler_can_build_shared_GCJ=no -fi - -fi -case $host_os in - # For platforms which do not support PIC, -DPIC is meaningless: - *djgpp*) - lt_prog_compiler_pic_GCJ= - ;; - *) - lt_prog_compiler_pic_GCJ="$lt_prog_compiler_pic_GCJ" - ;; -esac - -# -# Check to make sure the static flag actually works. -# -wl=$lt_prog_compiler_wl_GCJ eval lt_tmp_static_flag=\"$lt_prog_compiler_static_GCJ\" -{ echo "$as_me:$LINENO: checking if $compiler static flag $lt_tmp_static_flag works" >&5 -echo $ECHO_N "checking if $compiler static flag $lt_tmp_static_flag works... $ECHO_C" >&6; } -if test "${lt_prog_compiler_static_works_GCJ+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - lt_prog_compiler_static_works_GCJ=no - save_LDFLAGS="$LDFLAGS" - LDFLAGS="$LDFLAGS $lt_tmp_static_flag" - echo "$lt_simple_link_test_code" > conftest.$ac_ext - if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then - # The linker can only warn and ignore the option if not recognized - # So say no if there are warnings - if test -s conftest.err; then - # Append any errors to the config.log. - cat conftest.err 1>&5 - $echo "X$_lt_linker_boilerplate" | $Xsed -e '/^$/d' > conftest.exp - $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 - if diff conftest.exp conftest.er2 >/dev/null; then - lt_prog_compiler_static_works_GCJ=yes - fi - else - lt_prog_compiler_static_works_GCJ=yes - fi - fi - $rm conftest* - LDFLAGS="$save_LDFLAGS" - -fi -{ echo "$as_me:$LINENO: result: $lt_prog_compiler_static_works_GCJ" >&5 -echo "${ECHO_T}$lt_prog_compiler_static_works_GCJ" >&6; } - -if test x"$lt_prog_compiler_static_works_GCJ" = xyes; then - : -else - lt_prog_compiler_static_GCJ= -fi - - -{ echo "$as_me:$LINENO: checking if $compiler supports -c -o file.$ac_objext" >&5 -echo $ECHO_N "checking if $compiler supports -c -o file.$ac_objext... $ECHO_C" >&6; } -if test "${lt_cv_prog_compiler_c_o_GCJ+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - lt_cv_prog_compiler_c_o_GCJ=no - $rm -r conftest 2>/dev/null - mkdir conftest - cd conftest - mkdir out - echo "$lt_simple_compile_test_code" > conftest.$ac_ext - - lt_compiler_flag="-o out/conftest2.$ac_objext" - # Insert the option either (1) after the last *FLAGS variable, or - # (2) before a word containing "conftest.", or (3) at the end. - # Note that $ac_compile itself does not contain backslashes and begins - # with a dollar sign (not a hyphen), so the echo should work correctly. - lt_compile=`echo "$ac_compile" | $SED \ - -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ - -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ - -e 's:$: $lt_compiler_flag:'` - (eval echo "\"\$as_me:17056: $lt_compile\"" >&5) - (eval "$lt_compile" 2>out/conftest.err) - ac_status=$? - cat out/conftest.err >&5 - echo "$as_me:17060: \$? = $ac_status" >&5 - if (exit $ac_status) && test -s out/conftest2.$ac_objext - then - # The compiler can only warn and ignore the option if not recognized - # So say no if there are warnings - $echo "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' > out/conftest.exp - $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2 - if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then - lt_cv_prog_compiler_c_o_GCJ=yes - fi - fi - chmod u+w . 2>&5 - $rm conftest* - # SGI C++ compiler will create directory out/ii_files/ for - # template instantiation - test -d out/ii_files && $rm out/ii_files/* && rmdir out/ii_files - $rm out/* && rmdir out - cd .. - rmdir conftest - $rm conftest* - -fi -{ echo "$as_me:$LINENO: result: $lt_cv_prog_compiler_c_o_GCJ" >&5 -echo "${ECHO_T}$lt_cv_prog_compiler_c_o_GCJ" >&6; } - - -hard_links="nottested" -if test "$lt_cv_prog_compiler_c_o_GCJ" = no && test "$need_locks" != no; then - # do not overwrite the value of need_locks provided by the user - { echo "$as_me:$LINENO: checking if we can lock with hard links" >&5 -echo $ECHO_N "checking if we can lock with hard links... $ECHO_C" >&6; } - hard_links=yes - $rm conftest* - ln conftest.a conftest.b 2>/dev/null && hard_links=no - touch conftest.a - ln conftest.a conftest.b 2>&5 || hard_links=no - ln conftest.a conftest.b 2>/dev/null && hard_links=no - { echo "$as_me:$LINENO: result: $hard_links" >&5 -echo "${ECHO_T}$hard_links" >&6; } - if test "$hard_links" = no; then - { echo "$as_me:$LINENO: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&5 -echo "$as_me: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&2;} - need_locks=warn - fi -else - need_locks=no -fi - -{ echo "$as_me:$LINENO: checking whether the $compiler linker ($LD) supports shared libraries" >&5 -echo $ECHO_N "checking whether the $compiler linker ($LD) supports shared libraries... $ECHO_C" >&6; } - - runpath_var= - allow_undefined_flag_GCJ= - enable_shared_with_static_runtimes_GCJ=no - archive_cmds_GCJ= - archive_expsym_cmds_GCJ= - old_archive_From_new_cmds_GCJ= - old_archive_from_expsyms_cmds_GCJ= - export_dynamic_flag_spec_GCJ= - whole_archive_flag_spec_GCJ= - thread_safe_flag_spec_GCJ= - hardcode_libdir_flag_spec_GCJ= - hardcode_libdir_flag_spec_ld_GCJ= - hardcode_libdir_separator_GCJ= - hardcode_direct_GCJ=no - hardcode_minus_L_GCJ=no - hardcode_shlibpath_var_GCJ=unsupported - link_all_deplibs_GCJ=unknown - hardcode_automatic_GCJ=no - module_cmds_GCJ= - module_expsym_cmds_GCJ= - always_export_symbols_GCJ=no - export_symbols_cmds_GCJ='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' - # include_expsyms should be a list of space-separated symbols to be *always* - # included in the symbol list - include_expsyms_GCJ= - # exclude_expsyms can be an extended regexp of symbols to exclude - # it will be wrapped by ` (' and `)$', so one must not match beginning or - # end of line. Example: `a|bc|.*d.*' will exclude the symbols `a' and `bc', - # as well as any symbol that contains `d'. - exclude_expsyms_GCJ="_GLOBAL_OFFSET_TABLE_" - # Although _GLOBAL_OFFSET_TABLE_ is a valid symbol C name, most a.out - # platforms (ab)use it in PIC code, but their linkers get confused if - # the symbol is explicitly referenced. Since portable code cannot - # rely on this symbol name, it's probably fine to never include it in - # preloaded symbol tables. - extract_expsyms_cmds= - # Just being paranoid about ensuring that cc_basename is set. - for cc_temp in $compiler""; do - case $cc_temp in - compile | *[\\/]compile | ccache | *[\\/]ccache ) ;; - distcc | *[\\/]distcc | purify | *[\\/]purify ) ;; - \-*) ;; - *) break;; - esac -done -cc_basename=`$echo "X$cc_temp" | $Xsed -e 's%.*/%%' -e "s%^$host_alias-%%"` - - case $host_os in - cygwin* | mingw* | pw32*) - # FIXME: the MSVC++ port hasn't been tested in a loooong time - # When not using gcc, we currently assume that we are using - # Microsoft Visual C++. - if test "$GCC" != yes; then - with_gnu_ld=no - fi - ;; - interix*) - # we just hope/assume this is gcc and not c89 (= MSVC++) - with_gnu_ld=yes - ;; - openbsd*) - with_gnu_ld=no - ;; - esac - - ld_shlibs_GCJ=yes - if test "$with_gnu_ld" = yes; then - # If archive_cmds runs LD, not CC, wlarc should be empty - wlarc='${wl}' - - # Set some defaults for GNU ld with shared library support. These - # are reset later if shared libraries are not supported. Putting them - # here allows them to be overridden if necessary. - runpath_var=LD_RUN_PATH - hardcode_libdir_flag_spec_GCJ='${wl}--rpath ${wl}$libdir' - export_dynamic_flag_spec_GCJ='${wl}--export-dynamic' - # ancient GNU ld didn't support --whole-archive et. al. - if $LD --help 2>&1 | grep 'no-whole-archive' > /dev/null; then - whole_archive_flag_spec_GCJ="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' - else - whole_archive_flag_spec_GCJ= - fi - supports_anon_versioning=no - case `$LD -v 2>/dev/null` in - *\ [01].* | *\ 2.[0-9].* | *\ 2.10.*) ;; # catch versions < 2.11 - *\ 2.11.93.0.2\ *) supports_anon_versioning=yes ;; # RH7.3 ... - *\ 2.11.92.0.12\ *) supports_anon_versioning=yes ;; # Mandrake 8.2 ... - *\ 2.11.*) ;; # other 2.11 versions - *) supports_anon_versioning=yes ;; - esac - - # See if GNU ld supports shared libraries. - case $host_os in - aix3* | aix4* | aix5*) - # On AIX/PPC, the GNU linker is very broken - if test "$host_cpu" != ia64; then - ld_shlibs_GCJ=no - cat <&2 - -*** Warning: the GNU linker, at least up to release 2.9.1, is reported -*** to be unable to reliably create shared libraries on AIX. -*** Therefore, libtool is disabling shared libraries support. If you -*** really care for shared libraries, you may want to modify your PATH -*** so that a non-GNU linker is found, and then restart. - -EOF - fi - ;; - - amigaos*) - archive_cmds_GCJ='$rm $output_objdir/a2ixlibrary.data~$echo "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$echo "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$echo "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$echo "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' - hardcode_libdir_flag_spec_GCJ='-L$libdir' - hardcode_minus_L_GCJ=yes - - # Samuel A. Falvo II reports - # that the semantics of dynamic libraries on AmigaOS, at least up - # to version 4, is to share data among multiple programs linked - # with the same dynamic library. Since this doesn't match the - # behavior of shared libraries on other platforms, we can't use - # them. - ld_shlibs_GCJ=no - ;; - - beos*) - if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then - allow_undefined_flag_GCJ=unsupported - # Joseph Beckenbach says some releases of gcc - # support --undefined. This deserves some investigation. FIXME - archive_cmds_GCJ='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' - else - ld_shlibs_GCJ=no - fi - ;; - - cygwin* | mingw* | pw32*) - # _LT_AC_TAGVAR(hardcode_libdir_flag_spec, GCJ) is actually meaningless, - # as there is no search path for DLLs. - hardcode_libdir_flag_spec_GCJ='-L$libdir' - allow_undefined_flag_GCJ=unsupported - always_export_symbols_GCJ=no - enable_shared_with_static_runtimes_GCJ=yes - export_symbols_cmds_GCJ='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS][ ]/s/.*[ ]\([^ ]*\)/\1 DATA/'\'' -e '\''/^[AITW][ ]/s/.*[ ]//'\'' | sort | uniq > $export_symbols' - - if $LD --help 2>&1 | grep 'auto-import' > /dev/null; then - archive_cmds_GCJ='$CC -shared $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' - # If the export-symbols file already is a .def file (1st line - # is EXPORTS), use it as is; otherwise, prepend... - archive_expsym_cmds_GCJ='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then - cp $export_symbols $output_objdir/$soname.def; - else - echo EXPORTS > $output_objdir/$soname.def; - cat $export_symbols >> $output_objdir/$soname.def; - fi~ - $CC -shared $output_objdir/$soname.def $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' - else - ld_shlibs_GCJ=no - fi - ;; - - interix[3-9]*) - hardcode_direct_GCJ=no - hardcode_shlibpath_var_GCJ=no - hardcode_libdir_flag_spec_GCJ='${wl}-rpath,$libdir' - export_dynamic_flag_spec_GCJ='${wl}-E' - # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc. - # Instead, shared libraries are loaded at an image base (0x10000000 by - # default) and relocated if they conflict, which is a slow very memory - # consuming and fragmenting process. To avoid this, we pick a random, - # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link - # time. Moving up from 0x10000000 also allows more sbrk(2) space. - archive_cmds_GCJ='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' - archive_expsym_cmds_GCJ='sed "s,^,_," $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--retain-symbols-file,$output_objdir/$soname.expsym ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' - ;; - - gnu* | linux* | k*bsd*-gnu) - if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then - tmp_addflag= - case $cc_basename,$host_cpu in - pgcc*) # Portland Group C compiler - whole_archive_flag_spec_GCJ='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $echo \"$new_convenience\"` ${wl}--no-whole-archive' - tmp_addflag=' $pic_flag' - ;; - pgf77* | pgf90* | pgf95*) # Portland Group f77 and f90 compilers - whole_archive_flag_spec_GCJ='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $echo \"$new_convenience\"` ${wl}--no-whole-archive' - tmp_addflag=' $pic_flag -Mnomain' ;; - ecc*,ia64* | icc*,ia64*) # Intel C compiler on ia64 - tmp_addflag=' -i_dynamic' ;; - efc*,ia64* | ifort*,ia64*) # Intel Fortran compiler on ia64 - tmp_addflag=' -i_dynamic -nofor_main' ;; - ifc* | ifort*) # Intel Fortran compiler - tmp_addflag=' -nofor_main' ;; - esac - case `$CC -V 2>&1 | sed 5q` in - *Sun\ C*) # Sun C 5.9 - whole_archive_flag_spec_GCJ='${wl}--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; $echo \"$new_convenience\"` ${wl}--no-whole-archive' - tmp_sharedflag='-G' ;; - *Sun\ F*) # Sun Fortran 8.3 - tmp_sharedflag='-G' ;; - *) - tmp_sharedflag='-shared' ;; - esac - archive_cmds_GCJ='$CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' - - if test $supports_anon_versioning = yes; then - archive_expsym_cmds_GCJ='$echo "{ global:" > $output_objdir/$libname.ver~ - cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ - $echo "local: *; };" >> $output_objdir/$libname.ver~ - $CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib' - fi - else - ld_shlibs_GCJ=no - fi - ;; - - netbsd*) - if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then - archive_cmds_GCJ='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib' - wlarc= - else - archive_cmds_GCJ='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' - archive_expsym_cmds_GCJ='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' - fi - ;; - - solaris*) - if $LD -v 2>&1 | grep 'BFD 2\.8' > /dev/null; then - ld_shlibs_GCJ=no - cat <&2 - -*** Warning: The releases 2.8.* of the GNU linker cannot reliably -*** create shared libraries on Solaris systems. Therefore, libtool -*** is disabling shared libraries support. We urge you to upgrade GNU -*** binutils to release 2.9.1 or newer. Another option is to modify -*** your PATH or compiler configuration so that the native linker is -*** used, and then restart. - -EOF - elif $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then - archive_cmds_GCJ='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' - archive_expsym_cmds_GCJ='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' - else - ld_shlibs_GCJ=no - fi - ;; - - sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX*) - case `$LD -v 2>&1` in - *\ [01].* | *\ 2.[0-9].* | *\ 2.1[0-5].*) - ld_shlibs_GCJ=no - cat <<_LT_EOF 1>&2 - -*** Warning: Releases of the GNU linker prior to 2.16.91.0.3 can not -*** reliably create shared libraries on SCO systems. Therefore, libtool -*** is disabling shared libraries support. We urge you to upgrade GNU -*** binutils to release 2.16.91.0.3 or newer. Another option is to modify -*** your PATH or compiler configuration so that the native linker is -*** used, and then restart. - -_LT_EOF - ;; - *) - if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then - hardcode_libdir_flag_spec_GCJ='`test -z "$SCOABSPATH" && echo ${wl}-rpath,$libdir`' - archive_cmds_GCJ='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib' - archive_expsym_cmds_GCJ='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname,\${SCOABSPATH:+${install_libdir}/}$soname,-retain-symbols-file,$export_symbols -o $lib' - else - ld_shlibs_GCJ=no - fi - ;; - esac - ;; - - sunos4*) - archive_cmds_GCJ='$LD -assert pure-text -Bshareable -o $lib $libobjs $deplibs $linker_flags' - wlarc= - hardcode_direct_GCJ=yes - hardcode_shlibpath_var_GCJ=no - ;; - - *) - if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then - archive_cmds_GCJ='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' - archive_expsym_cmds_GCJ='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' - else - ld_shlibs_GCJ=no - fi - ;; - esac - - if test "$ld_shlibs_GCJ" = no; then - runpath_var= - hardcode_libdir_flag_spec_GCJ= - export_dynamic_flag_spec_GCJ= - whole_archive_flag_spec_GCJ= - fi - else - # PORTME fill in a description of your system's linker (not GNU ld) - case $host_os in - aix3*) - allow_undefined_flag_GCJ=unsupported - always_export_symbols_GCJ=yes - archive_expsym_cmds_GCJ='$LD -o $output_objdir/$soname $libobjs $deplibs $linker_flags -bE:$export_symbols -T512 -H512 -bM:SRE~$AR $AR_FLAGS $lib $output_objdir/$soname' - # Note: this linker hardcodes the directories in LIBPATH if there - # are no directories specified by -L. - hardcode_minus_L_GCJ=yes - if test "$GCC" = yes && test -z "$lt_prog_compiler_static"; then - # Neither direct hardcoding nor static linking is supported with a - # broken collect2. - hardcode_direct_GCJ=unsupported - fi - ;; - - aix4* | aix5*) - if test "$host_cpu" = ia64; then - # On IA64, the linker does run time linking by default, so we don't - # have to do anything special. - aix_use_runtimelinking=no - exp_sym_flag='-Bexport' - no_entry_flag="" - else - # If we're using GNU nm, then we don't want the "-C" option. - # -C means demangle to AIX nm, but means don't demangle with GNU nm - if $NM -V 2>&1 | grep 'GNU' > /dev/null; then - export_symbols_cmds_GCJ='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$2 == "T") || (\$2 == "D") || (\$2 == "B")) && (substr(\$3,1,1) != ".")) { print \$3 } }'\'' | sort -u > $export_symbols' - else - export_symbols_cmds_GCJ='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$2 == "T") || (\$2 == "D") || (\$2 == "B")) && (substr(\$3,1,1) != ".")) { print \$3 } }'\'' | sort -u > $export_symbols' - fi - aix_use_runtimelinking=no - - # Test if we are trying to use run time linking or normal - # AIX style linking. If -brtl is somewhere in LDFLAGS, we - # need to do runtime linking. - case $host_os in aix4.[23]|aix4.[23].*|aix5*) - for ld_flag in $LDFLAGS; do - if (test $ld_flag = "-brtl" || test $ld_flag = "-Wl,-brtl"); then - aix_use_runtimelinking=yes - break - fi - done - ;; - esac - - exp_sym_flag='-bexport' - no_entry_flag='-bnoentry' - fi - - # When large executables or shared objects are built, AIX ld can - # have problems creating the table of contents. If linking a library - # or program results in "error TOC overflow" add -mminimal-toc to - # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not - # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS. - - archive_cmds_GCJ='' - hardcode_direct_GCJ=yes - hardcode_libdir_separator_GCJ=':' - link_all_deplibs_GCJ=yes - - if test "$GCC" = yes; then - case $host_os in aix4.[012]|aix4.[012].*) - # We only want to do this on AIX 4.2 and lower, the check - # below for broken collect2 doesn't work under 4.3+ - collect2name=`${CC} -print-prog-name=collect2` - if test -f "$collect2name" && \ - strings "$collect2name" | grep resolve_lib_name >/dev/null - then - # We have reworked collect2 - : - else - # We have old collect2 - hardcode_direct_GCJ=unsupported - # It fails to find uninstalled libraries when the uninstalled - # path is not listed in the libpath. Setting hardcode_minus_L - # to unsupported forces relinking - hardcode_minus_L_GCJ=yes - hardcode_libdir_flag_spec_GCJ='-L$libdir' - hardcode_libdir_separator_GCJ= - fi - ;; - esac - shared_flag='-shared' - if test "$aix_use_runtimelinking" = yes; then - shared_flag="$shared_flag "'${wl}-G' - fi - else - # not using gcc - if test "$host_cpu" = ia64; then - # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release - # chokes on -Wl,-G. The following line is correct: - shared_flag='-G' - else - if test "$aix_use_runtimelinking" = yes; then - shared_flag='${wl}-G' - else - shared_flag='${wl}-bM:SRE' - fi - fi - fi - - # It seems that -bexpall does not export symbols beginning with - # underscore (_), so it is better to generate a list of symbols to export. - always_export_symbols_GCJ=yes - if test "$aix_use_runtimelinking" = yes; then - # Warning - without using the other runtime loading flags (-brtl), - # -berok will link without error, but may produce a broken library. - allow_undefined_flag_GCJ='-berok' - # Determine the default libpath from the value encoded in an empty executable. - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ - -int -main () -{ - - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext conftest$ac_exeext -if { (ac_try="$ac_link" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_link") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest$ac_exeext && - $as_test_x conftest$ac_exeext; then - -lt_aix_libpath_sed=' - /Import File Strings/,/^$/ { - /^0/ { - s/^0 *\(.*\)$/\1/ - p - } - }' -aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` -# Check for a 64-bit object if we didn't find anything. -if test -z "$aix_libpath"; then - aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` -fi -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - -fi - -rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ - conftest$ac_exeext conftest.$ac_ext -if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi - - hardcode_libdir_flag_spec_GCJ='${wl}-blibpath:$libdir:'"$aix_libpath" - archive_expsym_cmds_GCJ="\$CC"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then echo "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag" - else - if test "$host_cpu" = ia64; then - hardcode_libdir_flag_spec_GCJ='${wl}-R $libdir:/usr/lib:/lib' - allow_undefined_flag_GCJ="-z nodefs" - archive_expsym_cmds_GCJ="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$exp_sym_flag:\$export_symbols" - else - # Determine the default libpath from the value encoded in an empty executable. - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ - -int -main () -{ - - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext conftest$ac_exeext -if { (ac_try="$ac_link" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_link") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest$ac_exeext && - $as_test_x conftest$ac_exeext; then - -lt_aix_libpath_sed=' - /Import File Strings/,/^$/ { - /^0/ { - s/^0 *\(.*\)$/\1/ - p - } - }' -aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` -# Check for a 64-bit object if we didn't find anything. -if test -z "$aix_libpath"; then - aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` -fi -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - -fi - -rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ - conftest$ac_exeext conftest.$ac_ext -if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi - - hardcode_libdir_flag_spec_GCJ='${wl}-blibpath:$libdir:'"$aix_libpath" - # Warning - without using the other run time loading flags, - # -berok will link without error, but may produce a broken library. - no_undefined_flag_GCJ=' ${wl}-bernotok' - allow_undefined_flag_GCJ=' ${wl}-berok' - # Exported symbols can be pulled into shared objects from archives - whole_archive_flag_spec_GCJ='$convenience' - archive_cmds_need_lc_GCJ=yes - # This is similar to how AIX traditionally builds its shared libraries. - archive_expsym_cmds_GCJ="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs ${wl}-bnoentry $compiler_flags ${wl}-bE:$export_symbols${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname' - fi - fi - ;; - - amigaos*) - archive_cmds_GCJ='$rm $output_objdir/a2ixlibrary.data~$echo "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$echo "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$echo "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$echo "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' - hardcode_libdir_flag_spec_GCJ='-L$libdir' - hardcode_minus_L_GCJ=yes - # see comment about different semantics on the GNU ld section - ld_shlibs_GCJ=no - ;; - - bsdi[45]*) - export_dynamic_flag_spec_GCJ=-rdynamic - ;; - - cygwin* | mingw* | pw32*) - # When not using gcc, we currently assume that we are using - # Microsoft Visual C++. - # hardcode_libdir_flag_spec is actually meaningless, as there is - # no search path for DLLs. - hardcode_libdir_flag_spec_GCJ=' ' - allow_undefined_flag_GCJ=unsupported - # Tell ltmain to make .lib files, not .a files. - libext=lib - # Tell ltmain to make .dll files, not .so files. - shrext_cmds=".dll" - # FIXME: Setting linknames here is a bad hack. - archive_cmds_GCJ='$CC -o $lib $libobjs $compiler_flags `echo "$deplibs" | $SED -e '\''s/ -lc$//'\''` -link -dll~linknames=' - # The linker will automatically build a .lib file if we build a DLL. - old_archive_From_new_cmds_GCJ='true' - # FIXME: Should let the user specify the lib program. - old_archive_cmds_GCJ='lib -OUT:$oldlib$oldobjs$old_deplibs' - fix_srcfile_path_GCJ='`cygpath -w "$srcfile"`' - enable_shared_with_static_runtimes_GCJ=yes - ;; - - darwin* | rhapsody*) - case $host_os in - rhapsody* | darwin1.[012]) - allow_undefined_flag_GCJ='${wl}-undefined ${wl}suppress' - ;; - *) # Darwin 1.3 on - if test -z ${MACOSX_DEPLOYMENT_TARGET} ; then - allow_undefined_flag_GCJ='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' - else - case ${MACOSX_DEPLOYMENT_TARGET} in - 10.[012]) - allow_undefined_flag_GCJ='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' - ;; - 10.*) - allow_undefined_flag_GCJ='${wl}-undefined ${wl}dynamic_lookup' - ;; - esac - fi - ;; - esac - archive_cmds_need_lc_GCJ=no - hardcode_direct_GCJ=no - hardcode_automatic_GCJ=yes - hardcode_shlibpath_var_GCJ=unsupported - whole_archive_flag_spec_GCJ='' - link_all_deplibs_GCJ=yes - if test "$GCC" = yes ; then - output_verbose_link_cmd='echo' - archive_cmds_GCJ='$CC -dynamiclib $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags -install_name $rpath/$soname $verstring' - module_cmds_GCJ='$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags' - # Don't fix this by using the ld -exported_symbols_list flag, it doesn't exist in older darwin lds - archive_expsym_cmds_GCJ='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -dynamiclib $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags -install_name $rpath/$soname $verstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' - module_expsym_cmds_GCJ='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' - else - case $cc_basename in - xlc*) - output_verbose_link_cmd='echo' - archive_cmds_GCJ='$CC -qmkshrobj $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-install_name ${wl}`echo $rpath/$soname` $xlcverstring' - module_cmds_GCJ='$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags' - # Don't fix this by using the ld -exported_symbols_list flag, it doesn't exist in older darwin lds - archive_expsym_cmds_GCJ='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -qmkshrobj $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-install_name ${wl}$rpath/$soname $xlcverstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' - module_expsym_cmds_GCJ='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' - ;; - *) - ld_shlibs_GCJ=no - ;; - esac - fi - ;; - - dgux*) - archive_cmds_GCJ='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' - hardcode_libdir_flag_spec_GCJ='-L$libdir' - hardcode_shlibpath_var_GCJ=no - ;; - - freebsd1*) - ld_shlibs_GCJ=no - ;; - - # FreeBSD 2.2.[012] allows us to include c++rt0.o to get C++ constructor - # support. Future versions do this automatically, but an explicit c++rt0.o - # does not break anything, and helps significantly (at the cost of a little - # extra space). - freebsd2.2*) - archive_cmds_GCJ='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags /usr/lib/c++rt0.o' - hardcode_libdir_flag_spec_GCJ='-R$libdir' - hardcode_direct_GCJ=yes - hardcode_shlibpath_var_GCJ=no - ;; - - # Unfortunately, older versions of FreeBSD 2 do not have this feature. - freebsd2*) - archive_cmds_GCJ='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' - hardcode_direct_GCJ=yes - hardcode_minus_L_GCJ=yes - hardcode_shlibpath_var_GCJ=no - ;; - - # FreeBSD 3 and greater uses gcc -shared to do shared libraries. - freebsd* | dragonfly*) - archive_cmds_GCJ='$CC -shared -o $lib $libobjs $deplibs $compiler_flags' - hardcode_libdir_flag_spec_GCJ='-R$libdir' - hardcode_direct_GCJ=yes - hardcode_shlibpath_var_GCJ=no - ;; - - hpux9*) - if test "$GCC" = yes; then - archive_cmds_GCJ='$rm $output_objdir/$soname~$CC -shared -fPIC ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' - else - archive_cmds_GCJ='$rm $output_objdir/$soname~$LD -b +b $install_libdir -o $output_objdir/$soname $libobjs $deplibs $linker_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' - fi - hardcode_libdir_flag_spec_GCJ='${wl}+b ${wl}$libdir' - hardcode_libdir_separator_GCJ=: - hardcode_direct_GCJ=yes - - # hardcode_minus_L: Not really in the search PATH, - # but as the default location of the library. - hardcode_minus_L_GCJ=yes - export_dynamic_flag_spec_GCJ='${wl}-E' - ;; - - hpux10*) - if test "$GCC" = yes -a "$with_gnu_ld" = no; then - archive_cmds_GCJ='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' - else - archive_cmds_GCJ='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags' - fi - if test "$with_gnu_ld" = no; then - hardcode_libdir_flag_spec_GCJ='${wl}+b ${wl}$libdir' - hardcode_libdir_separator_GCJ=: - - hardcode_direct_GCJ=yes - export_dynamic_flag_spec_GCJ='${wl}-E' - - # hardcode_minus_L: Not really in the search PATH, - # but as the default location of the library. - hardcode_minus_L_GCJ=yes - fi - ;; - - hpux11*) - if test "$GCC" = yes -a "$with_gnu_ld" = no; then - case $host_cpu in - hppa*64*) - archive_cmds_GCJ='$CC -shared ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' - ;; - ia64*) - archive_cmds_GCJ='$CC -shared ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' - ;; - *) - archive_cmds_GCJ='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' - ;; - esac - else - case $host_cpu in - hppa*64*) - archive_cmds_GCJ='$CC -b ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' - ;; - ia64*) - archive_cmds_GCJ='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' - ;; - *) - archive_cmds_GCJ='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' - ;; - esac - fi - if test "$with_gnu_ld" = no; then - hardcode_libdir_flag_spec_GCJ='${wl}+b ${wl}$libdir' - hardcode_libdir_separator_GCJ=: - - case $host_cpu in - hppa*64*|ia64*) - hardcode_libdir_flag_spec_ld_GCJ='+b $libdir' - hardcode_direct_GCJ=no - hardcode_shlibpath_var_GCJ=no - ;; - *) - hardcode_direct_GCJ=yes - export_dynamic_flag_spec_GCJ='${wl}-E' - - # hardcode_minus_L: Not really in the search PATH, - # but as the default location of the library. - hardcode_minus_L_GCJ=yes - ;; - esac - fi - ;; - - irix5* | irix6* | nonstopux*) - if test "$GCC" = yes; then - archive_cmds_GCJ='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' - else - archive_cmds_GCJ='$LD -shared $libobjs $deplibs $linker_flags -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib' - hardcode_libdir_flag_spec_ld_GCJ='-rpath $libdir' - fi - hardcode_libdir_flag_spec_GCJ='${wl}-rpath ${wl}$libdir' - hardcode_libdir_separator_GCJ=: - link_all_deplibs_GCJ=yes - ;; - - netbsd*) - if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then - archive_cmds_GCJ='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' # a.out - else - archive_cmds_GCJ='$LD -shared -o $lib $libobjs $deplibs $linker_flags' # ELF - fi - hardcode_libdir_flag_spec_GCJ='-R$libdir' - hardcode_direct_GCJ=yes - hardcode_shlibpath_var_GCJ=no - ;; - - newsos6) - archive_cmds_GCJ='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' - hardcode_direct_GCJ=yes - hardcode_libdir_flag_spec_GCJ='${wl}-rpath ${wl}$libdir' - hardcode_libdir_separator_GCJ=: - hardcode_shlibpath_var_GCJ=no - ;; - - openbsd*) - if test -f /usr/libexec/ld.so; then - hardcode_direct_GCJ=yes - hardcode_shlibpath_var_GCJ=no - if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then - archive_cmds_GCJ='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' - archive_expsym_cmds_GCJ='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-retain-symbols-file,$export_symbols' - hardcode_libdir_flag_spec_GCJ='${wl}-rpath,$libdir' - export_dynamic_flag_spec_GCJ='${wl}-E' - else - case $host_os in - openbsd[01].* | openbsd2.[0-7] | openbsd2.[0-7].*) - archive_cmds_GCJ='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' - hardcode_libdir_flag_spec_GCJ='-R$libdir' - ;; - *) - archive_cmds_GCJ='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' - hardcode_libdir_flag_spec_GCJ='${wl}-rpath,$libdir' - ;; - esac - fi - else - ld_shlibs_GCJ=no - fi - ;; - - os2*) - hardcode_libdir_flag_spec_GCJ='-L$libdir' - hardcode_minus_L_GCJ=yes - allow_undefined_flag_GCJ=unsupported - archive_cmds_GCJ='$echo "LIBRARY $libname INITINSTANCE" > $output_objdir/$libname.def~$echo "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~$echo DATA >> $output_objdir/$libname.def~$echo " SINGLE NONSHARED" >> $output_objdir/$libname.def~$echo EXPORTS >> $output_objdir/$libname.def~emxexp $libobjs >> $output_objdir/$libname.def~$CC -Zdll -Zcrtdll -o $lib $libobjs $deplibs $compiler_flags $output_objdir/$libname.def' - old_archive_From_new_cmds_GCJ='emximp -o $output_objdir/$libname.a $output_objdir/$libname.def' - ;; - - osf3*) - if test "$GCC" = yes; then - allow_undefined_flag_GCJ=' ${wl}-expect_unresolved ${wl}\*' - archive_cmds_GCJ='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' - else - allow_undefined_flag_GCJ=' -expect_unresolved \*' - archive_cmds_GCJ='$LD -shared${allow_undefined_flag} $libobjs $deplibs $linker_flags -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib' - fi - hardcode_libdir_flag_spec_GCJ='${wl}-rpath ${wl}$libdir' - hardcode_libdir_separator_GCJ=: - ;; - - osf4* | osf5*) # as osf3* with the addition of -msym flag - if test "$GCC" = yes; then - allow_undefined_flag_GCJ=' ${wl}-expect_unresolved ${wl}\*' - archive_cmds_GCJ='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' - hardcode_libdir_flag_spec_GCJ='${wl}-rpath ${wl}$libdir' - else - allow_undefined_flag_GCJ=' -expect_unresolved \*' - archive_cmds_GCJ='$LD -shared${allow_undefined_flag} $libobjs $deplibs $linker_flags -msym -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib' - archive_expsym_cmds_GCJ='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done; echo "-hidden">> $lib.exp~ - $LD -shared${allow_undefined_flag} -input $lib.exp $linker_flags $libobjs $deplibs -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib~$rm $lib.exp' - - # Both c and cxx compiler support -rpath directly - hardcode_libdir_flag_spec_GCJ='-rpath $libdir' - fi - hardcode_libdir_separator_GCJ=: - ;; - - solaris*) - no_undefined_flag_GCJ=' -z text' - if test "$GCC" = yes; then - wlarc='${wl}' - archive_cmds_GCJ='$CC -shared ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' - archive_expsym_cmds_GCJ='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~ - $CC -shared ${wl}-M ${wl}$lib.exp ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags~$rm $lib.exp' - else - wlarc='' - archive_cmds_GCJ='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linker_flags' - archive_expsym_cmds_GCJ='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~ - $LD -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$rm $lib.exp' - fi - hardcode_libdir_flag_spec_GCJ='-R$libdir' - hardcode_shlibpath_var_GCJ=no - case $host_os in - solaris2.[0-5] | solaris2.[0-5].*) ;; - *) - # The compiler driver will combine and reorder linker options, - # but understands `-z linker_flag'. GCC discards it without `$wl', - # but is careful enough not to reorder. - # Supported since Solaris 2.6 (maybe 2.5.1?) - if test "$GCC" = yes; then - whole_archive_flag_spec_GCJ='${wl}-z ${wl}allextract$convenience ${wl}-z ${wl}defaultextract' - else - whole_archive_flag_spec_GCJ='-z allextract$convenience -z defaultextract' - fi - ;; - esac - link_all_deplibs_GCJ=yes - ;; - - sunos4*) - if test "x$host_vendor" = xsequent; then - # Use $CC to link under sequent, because it throws in some extra .o - # files that make .init and .fini sections work. - archive_cmds_GCJ='$CC -G ${wl}-h $soname -o $lib $libobjs $deplibs $compiler_flags' - else - archive_cmds_GCJ='$LD -assert pure-text -Bstatic -o $lib $libobjs $deplibs $linker_flags' - fi - hardcode_libdir_flag_spec_GCJ='-L$libdir' - hardcode_direct_GCJ=yes - hardcode_minus_L_GCJ=yes - hardcode_shlibpath_var_GCJ=no - ;; - - sysv4) - case $host_vendor in - sni) - archive_cmds_GCJ='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' - hardcode_direct_GCJ=yes # is this really true??? - ;; - siemens) - ## LD is ld it makes a PLAMLIB - ## CC just makes a GrossModule. - archive_cmds_GCJ='$LD -G -o $lib $libobjs $deplibs $linker_flags' - reload_cmds_GCJ='$CC -r -o $output$reload_objs' - hardcode_direct_GCJ=no - ;; - motorola) - archive_cmds_GCJ='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' - hardcode_direct_GCJ=no #Motorola manual says yes, but my tests say they lie - ;; - esac - runpath_var='LD_RUN_PATH' - hardcode_shlibpath_var_GCJ=no - ;; - - sysv4.3*) - archive_cmds_GCJ='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' - hardcode_shlibpath_var_GCJ=no - export_dynamic_flag_spec_GCJ='-Bexport' - ;; - - sysv4*MP*) - if test -d /usr/nec; then - archive_cmds_GCJ='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' - hardcode_shlibpath_var_GCJ=no - runpath_var=LD_RUN_PATH - hardcode_runpath_var=yes - ld_shlibs_GCJ=yes - fi - ;; - - sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[01].[10]* | unixware7* | sco3.2v5.0.[024]*) - no_undefined_flag_GCJ='${wl}-z,text' - archive_cmds_need_lc_GCJ=no - hardcode_shlibpath_var_GCJ=no - runpath_var='LD_RUN_PATH' - - if test "$GCC" = yes; then - archive_cmds_GCJ='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - archive_expsym_cmds_GCJ='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - else - archive_cmds_GCJ='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - archive_expsym_cmds_GCJ='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - fi - ;; - - sysv5* | sco3.2v5* | sco5v6*) - # Note: We can NOT use -z defs as we might desire, because we do not - # link with -lc, and that would cause any symbols used from libc to - # always be unresolved, which means just about no library would - # ever link correctly. If we're not using GNU ld we use -z text - # though, which does catch some bad symbols but isn't as heavy-handed - # as -z defs. - no_undefined_flag_GCJ='${wl}-z,text' - allow_undefined_flag_GCJ='${wl}-z,nodefs' - archive_cmds_need_lc_GCJ=no - hardcode_shlibpath_var_GCJ=no - hardcode_libdir_flag_spec_GCJ='`test -z "$SCOABSPATH" && echo ${wl}-R,$libdir`' - hardcode_libdir_separator_GCJ=':' - link_all_deplibs_GCJ=yes - export_dynamic_flag_spec_GCJ='${wl}-Bexport' - runpath_var='LD_RUN_PATH' - - if test "$GCC" = yes; then - archive_cmds_GCJ='$CC -shared ${wl}-h,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags' - archive_expsym_cmds_GCJ='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags' - else - archive_cmds_GCJ='$CC -G ${wl}-h,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags' - archive_expsym_cmds_GCJ='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags' - fi - ;; - - uts4*) - archive_cmds_GCJ='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' - hardcode_libdir_flag_spec_GCJ='-L$libdir' - hardcode_shlibpath_var_GCJ=no - ;; - - *) - ld_shlibs_GCJ=no - ;; - esac - fi - -{ echo "$as_me:$LINENO: result: $ld_shlibs_GCJ" >&5 -echo "${ECHO_T}$ld_shlibs_GCJ" >&6; } -test "$ld_shlibs_GCJ" = no && can_build_shared=no - -# -# Do we need to explicitly link libc? -# -case "x$archive_cmds_need_lc_GCJ" in -x|xyes) - # Assume -lc should be added - archive_cmds_need_lc_GCJ=yes - - if test "$enable_shared" = yes && test "$GCC" = yes; then - case $archive_cmds_GCJ in - *'~'*) - # FIXME: we may have to deal with multi-command sequences. - ;; - '$CC '*) - # Test whether the compiler implicitly links with -lc since on some - # systems, -lgcc has to come before -lc. If gcc already passes -lc - # to ld, don't add -lc before -lgcc. - { echo "$as_me:$LINENO: checking whether -lc should be explicitly linked in" >&5 -echo $ECHO_N "checking whether -lc should be explicitly linked in... $ECHO_C" >&6; } - $rm conftest* - echo "$lt_simple_compile_test_code" > conftest.$ac_ext - - if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } 2>conftest.err; then - soname=conftest - lib=conftest - libobjs=conftest.$ac_objext - deplibs= - wl=$lt_prog_compiler_wl_GCJ - pic_flag=$lt_prog_compiler_pic_GCJ - compiler_flags=-v - linker_flags=-v - verstring= - output_objdir=. - libname=conftest - lt_save_allow_undefined_flag=$allow_undefined_flag_GCJ - allow_undefined_flag_GCJ= - if { (eval echo "$as_me:$LINENO: \"$archive_cmds_GCJ 2\>\&1 \| grep \" -lc \" \>/dev/null 2\>\&1\"") >&5 - (eval $archive_cmds_GCJ 2\>\&1 \| grep \" -lc \" \>/dev/null 2\>\&1) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } - then - archive_cmds_need_lc_GCJ=no - else - archive_cmds_need_lc_GCJ=yes - fi - allow_undefined_flag_GCJ=$lt_save_allow_undefined_flag - else - cat conftest.err 1>&5 - fi - $rm conftest* - { echo "$as_me:$LINENO: result: $archive_cmds_need_lc_GCJ" >&5 -echo "${ECHO_T}$archive_cmds_need_lc_GCJ" >&6; } - ;; - esac - fi - ;; -esac - -{ echo "$as_me:$LINENO: checking dynamic linker characteristics" >&5 -echo $ECHO_N "checking dynamic linker characteristics... $ECHO_C" >&6; } -library_names_spec= -libname_spec='lib$name' -soname_spec= -shrext_cmds=".so" -postinstall_cmds= -postuninstall_cmds= -finish_cmds= -finish_eval= -shlibpath_var= -shlibpath_overrides_runpath=unknown -version_type=none -dynamic_linker="$host_os ld.so" -sys_lib_dlsearch_path_spec="/lib /usr/lib" - -need_lib_prefix=unknown -hardcode_into_libs=no - -# when you set need_version to no, make sure it does not cause -set_version -# flags to be left without arguments -need_version=unknown - -case $host_os in -aix3*) - version_type=linux - library_names_spec='${libname}${release}${shared_ext}$versuffix $libname.a' - shlibpath_var=LIBPATH - - # AIX 3 has no versioning support, so we append a major version to the name. - soname_spec='${libname}${release}${shared_ext}$major' - ;; - -aix4* | aix5*) - version_type=linux - need_lib_prefix=no - need_version=no - hardcode_into_libs=yes - if test "$host_cpu" = ia64; then - # AIX 5 supports IA64 - library_names_spec='${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext}$versuffix $libname${shared_ext}' - shlibpath_var=LD_LIBRARY_PATH - else - # With GCC up to 2.95.x, collect2 would create an import file - # for dependence libraries. The import file would start with - # the line `#! .'. This would cause the generated library to - # depend on `.', always an invalid library. This was fixed in - # development snapshots of GCC prior to 3.0. - case $host_os in - aix4 | aix4.[01] | aix4.[01].*) - if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)' - echo ' yes ' - echo '#endif'; } | ${CC} -E - | grep yes > /dev/null; then - : - else - can_build_shared=no - fi - ;; - esac - # AIX (on Power*) has no versioning support, so currently we can not hardcode correct - # soname into executable. Probably we can add versioning support to - # collect2, so additional links can be useful in future. - if test "$aix_use_runtimelinking" = yes; then - # If using run time linking (on AIX 4.2 or later) use lib.so - # instead of lib.a to let people know that these are not - # typical AIX shared libraries. - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - else - # We preserve .a as extension for shared libraries through AIX4.2 - # and later when we are not doing run time linking. - library_names_spec='${libname}${release}.a $libname.a' - soname_spec='${libname}${release}${shared_ext}$major' - fi - shlibpath_var=LIBPATH - fi - ;; - -amigaos*) - library_names_spec='$libname.ixlibrary $libname.a' - # Create ${libname}_ixlibrary.a entries in /sys/libs. - finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`$echo "X$lib" | $Xsed -e '\''s%^.*/\([^/]*\)\.ixlibrary$%\1%'\''`; test $rm /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done' - ;; - -beos*) - library_names_spec='${libname}${shared_ext}' - dynamic_linker="$host_os ld.so" - shlibpath_var=LIBRARY_PATH - ;; - -bsdi[45]*) - version_type=linux - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir' - shlibpath_var=LD_LIBRARY_PATH - sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib" - sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib" - # the default ld.so.conf also contains /usr/contrib/lib and - # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow - # libtool to hard-code these into programs - ;; - -cygwin* | mingw* | pw32*) - version_type=windows - shrext_cmds=".dll" - need_version=no - need_lib_prefix=no - - case $GCC,$host_os in - yes,cygwin* | yes,mingw* | yes,pw32*) - library_names_spec='$libname.dll.a' - # DLL is installed to $(libdir)/../bin by postinstall_cmds - postinstall_cmds='base_file=`basename \${file}`~ - dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i;echo \$dlname'\''`~ - dldir=$destdir/`dirname \$dlpath`~ - test -d \$dldir || mkdir -p \$dldir~ - $install_prog $dir/$dlname \$dldir/$dlname~ - chmod a+x \$dldir/$dlname' - postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ - dlpath=$dir/\$dldll~ - $rm \$dlpath' - shlibpath_overrides_runpath=yes - - case $host_os in - cygwin*) - # Cygwin DLLs use 'cyg' prefix rather than 'lib' - soname_spec='`echo ${libname} | sed -e 's/^lib/cyg/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' - sys_lib_search_path_spec="/usr/lib /lib/w32api /lib /usr/local/lib" - ;; - mingw*) - # MinGW DLLs use traditional 'lib' prefix - soname_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' - sys_lib_search_path_spec=`$CC -print-search-dirs | grep "^libraries:" | $SED -e "s/^libraries://" -e "s,=/,/,g"` - if echo "$sys_lib_search_path_spec" | grep ';[c-zC-Z]:/' >/dev/null; then - # It is most probably a Windows format PATH printed by - # mingw gcc, but we are running on Cygwin. Gcc prints its search - # path with ; separators, and with drive letters. We can handle the - # drive letters (cygwin fileutils understands them), so leave them, - # especially as we might pass files found there to a mingw objdump, - # which wouldn't understand a cygwinified path. Ahh. - sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'` - else - sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` - fi - ;; - pw32*) - # pw32 DLLs use 'pw' prefix rather than 'lib' - library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' - ;; - esac - ;; - - *) - library_names_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext} $libname.lib' - ;; - esac - dynamic_linker='Win32 ld.exe' - # FIXME: first we should search . and the directory the executable is in - shlibpath_var=PATH - ;; - -darwin* | rhapsody*) - dynamic_linker="$host_os dyld" - version_type=darwin - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${versuffix}$shared_ext ${libname}${release}${major}$shared_ext ${libname}$shared_ext' - soname_spec='${libname}${release}${major}$shared_ext' - shlibpath_overrides_runpath=yes - shlibpath_var=DYLD_LIBRARY_PATH - shrext_cmds='`test .$module = .yes && echo .so || echo .dylib`' - - sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib' - ;; - -dgux*) - version_type=linux - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname$shared_ext' - soname_spec='${libname}${release}${shared_ext}$major' - shlibpath_var=LD_LIBRARY_PATH - ;; - -freebsd1*) - dynamic_linker=no - ;; - -freebsd* | dragonfly*) - # DragonFly does not have aout. When/if they implement a new - # versioning mechanism, adjust this. - if test -x /usr/bin/objformat; then - objformat=`/usr/bin/objformat` - else - case $host_os in - freebsd[123]*) objformat=aout ;; - *) objformat=elf ;; - esac - fi - version_type=freebsd-$objformat - case $version_type in - freebsd-elf*) - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' - need_version=no - need_lib_prefix=no - ;; - freebsd-*) - library_names_spec='${libname}${release}${shared_ext}$versuffix $libname${shared_ext}$versuffix' - need_version=yes - ;; - esac - shlibpath_var=LD_LIBRARY_PATH - case $host_os in - freebsd2*) - shlibpath_overrides_runpath=yes - ;; - freebsd3.[01]* | freebsdelf3.[01]*) - shlibpath_overrides_runpath=yes - hardcode_into_libs=yes - ;; - freebsd3.[2-9]* | freebsdelf3.[2-9]* | \ - freebsd4.[0-5] | freebsdelf4.[0-5] | freebsd4.1.1 | freebsdelf4.1.1) - shlibpath_overrides_runpath=no - hardcode_into_libs=yes - ;; - *) # from 4.6 on, and DragonFly - shlibpath_overrides_runpath=yes - hardcode_into_libs=yes - ;; - esac - ;; - -gnu*) - version_type=linux - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - shlibpath_var=LD_LIBRARY_PATH - hardcode_into_libs=yes - ;; - -hpux9* | hpux10* | hpux11*) - # Give a soname corresponding to the major version so that dld.sl refuses to - # link against other versions. - version_type=sunos - need_lib_prefix=no - need_version=no - case $host_cpu in - ia64*) - shrext_cmds='.so' - hardcode_into_libs=yes - dynamic_linker="$host_os dld.so" - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - if test "X$HPUX_IA64_MODE" = X32; then - sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib" - else - sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64" - fi - sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec - ;; - hppa*64*) - shrext_cmds='.sl' - hardcode_into_libs=yes - dynamic_linker="$host_os dld.sl" - shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH - shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64" - sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec - ;; - *) - shrext_cmds='.sl' - dynamic_linker="$host_os dld.sl" - shlibpath_var=SHLIB_PATH - shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - ;; - esac - # HP-UX runs *really* slowly unless shared libraries are mode 555. - postinstall_cmds='chmod 555 $lib' - ;; - -interix[3-9]*) - version_type=linux - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - dynamic_linker='Interix 3.x ld.so.1 (PE, like ELF)' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=no - hardcode_into_libs=yes - ;; - -irix5* | irix6* | nonstopux*) - case $host_os in - nonstopux*) version_type=nonstopux ;; - *) - if test "$lt_cv_prog_gnu_ld" = yes; then - version_type=linux - else - version_type=irix - fi ;; - esac - need_lib_prefix=no - need_version=no - soname_spec='${libname}${release}${shared_ext}$major' - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext} $libname${shared_ext}' - case $host_os in - irix5* | nonstopux*) - libsuff= shlibsuff= - ;; - *) - case $LD in # libtool.m4 will add one of these switches to LD - *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ") - libsuff= shlibsuff= libmagic=32-bit;; - *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ") - libsuff=32 shlibsuff=N32 libmagic=N32;; - *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ") - libsuff=64 shlibsuff=64 libmagic=64-bit;; - *) libsuff= shlibsuff= libmagic=never-match;; - esac - ;; - esac - shlibpath_var=LD_LIBRARY${shlibsuff}_PATH - shlibpath_overrides_runpath=no - sys_lib_search_path_spec="/usr/lib${libsuff} /lib${libsuff} /usr/local/lib${libsuff}" - sys_lib_dlsearch_path_spec="/usr/lib${libsuff} /lib${libsuff}" - hardcode_into_libs=yes - ;; - -# No shared lib support for Linux oldld, aout, or coff. -linux*oldld* | linux*aout* | linux*coff*) - dynamic_linker=no - ;; - -# This must be Linux ELF. -linux* | k*bsd*-gnu) - version_type=linux - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=no - # This implies no fast_install, which is unacceptable. - # Some rework will be needed to allow for fast_install - # before this can be enabled. - hardcode_into_libs=yes - sys_lib_search_path_spec="/usr/lib${libsuff} /lib${libsuff} /usr/local/lib${libsuff}" - sys_lib_dlsearch_path_spec="/usr/lib${libsuff} /lib${libsuff}" - - # Append ld.so.conf contents to the search path - if test -f /etc/ld.so.conf; then - lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s 2>/dev/null", \$2)); skip = 1; } { if (!skip) print \$0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;/^[ ]*hwcap[ ]/d;s/[:, ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;/^$/d' | tr '\n' ' '` - sys_lib_dlsearch_path_spec="$sys_lib_dlsearch_path_spec $lt_ld_extra" - fi - - # We used to test for /lib/ld.so.1 and disable shared libraries on - # powerpc, because MkLinux only supported shared libraries with the - # GNU dynamic linker. Since this was broken with cross compilers, - # most powerpc-linux boxes support dynamic linking these days and - # people can always --disable-shared, the test was removed, and we - # assume the GNU/Linux dynamic linker is in use. - dynamic_linker='GNU/Linux ld.so' - ;; - -netbsd*) - version_type=sunos - need_lib_prefix=no - need_version=no - if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' - finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' - dynamic_linker='NetBSD (a.out) ld.so' - else - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - dynamic_linker='NetBSD ld.elf_so' - fi - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=yes - hardcode_into_libs=yes - ;; - -newsos6) - version_type=linux - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=yes - ;; - -nto-qnx*) - version_type=linux - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=yes - ;; - -openbsd*) - version_type=sunos - sys_lib_dlsearch_path_spec="/usr/lib" - need_lib_prefix=no - # Some older versions of OpenBSD (3.3 at least) *do* need versioned libs. - case $host_os in - openbsd3.3 | openbsd3.3.*) need_version=yes ;; - *) need_version=no ;; - esac - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' - finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' - shlibpath_var=LD_LIBRARY_PATH - if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then - case $host_os in - openbsd2.[89] | openbsd2.[89].*) - shlibpath_overrides_runpath=no - ;; - *) - shlibpath_overrides_runpath=yes - ;; - esac - else - shlibpath_overrides_runpath=yes - fi - ;; - -os2*) - libname_spec='$name' - shrext_cmds=".dll" - need_lib_prefix=no - library_names_spec='$libname${shared_ext} $libname.a' - dynamic_linker='OS/2 ld.exe' - shlibpath_var=LIBPATH - ;; - -osf3* | osf4* | osf5*) - version_type=osf - need_lib_prefix=no - need_version=no - soname_spec='${libname}${release}${shared_ext}$major' - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - shlibpath_var=LD_LIBRARY_PATH - sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib" - sys_lib_dlsearch_path_spec="$sys_lib_search_path_spec" - ;; - -rdos*) - dynamic_linker=no - ;; - -solaris*) - version_type=linux - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=yes - hardcode_into_libs=yes - # ldd complains unless libraries are executable - postinstall_cmds='chmod +x $lib' - ;; - -sunos4*) - version_type=sunos - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' - finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=yes - if test "$with_gnu_ld" = yes; then - need_lib_prefix=no - fi - need_version=yes - ;; - -sysv4 | sysv4.3*) - version_type=linux - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - shlibpath_var=LD_LIBRARY_PATH - case $host_vendor in - sni) - shlibpath_overrides_runpath=no - need_lib_prefix=no - export_dynamic_flag_spec='${wl}-Blargedynsym' - runpath_var=LD_RUN_PATH - ;; - siemens) - need_lib_prefix=no - ;; - motorola) - need_lib_prefix=no - need_version=no - shlibpath_overrides_runpath=no - sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib' - ;; - esac - ;; - -sysv4*MP*) - if test -d /usr/nec ;then - version_type=linux - library_names_spec='$libname${shared_ext}.$versuffix $libname${shared_ext}.$major $libname${shared_ext}' - soname_spec='$libname${shared_ext}.$major' - shlibpath_var=LD_LIBRARY_PATH - fi - ;; - -sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) - version_type=freebsd-elf - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - shlibpath_var=LD_LIBRARY_PATH - hardcode_into_libs=yes - if test "$with_gnu_ld" = yes; then - sys_lib_search_path_spec='/usr/local/lib /usr/gnu/lib /usr/ccs/lib /usr/lib /lib' - shlibpath_overrides_runpath=no - else - sys_lib_search_path_spec='/usr/ccs/lib /usr/lib' - shlibpath_overrides_runpath=yes - case $host_os in - sco3.2v5*) - sys_lib_search_path_spec="$sys_lib_search_path_spec /lib" - ;; - esac - fi - sys_lib_dlsearch_path_spec='/usr/lib' - ;; - -uts4*) - version_type=linux - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - shlibpath_var=LD_LIBRARY_PATH - ;; - -*) - dynamic_linker=no - ;; -esac -{ echo "$as_me:$LINENO: result: $dynamic_linker" >&5 -echo "${ECHO_T}$dynamic_linker" >&6; } -test "$dynamic_linker" = no && can_build_shared=no - -variables_saved_for_relink="PATH $shlibpath_var $runpath_var" -if test "$GCC" = yes; then - variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH" -fi - -{ echo "$as_me:$LINENO: checking how to hardcode library paths into programs" >&5 -echo $ECHO_N "checking how to hardcode library paths into programs... $ECHO_C" >&6; } -hardcode_action_GCJ= -if test -n "$hardcode_libdir_flag_spec_GCJ" || \ - test -n "$runpath_var_GCJ" || \ - test "X$hardcode_automatic_GCJ" = "Xyes" ; then - - # We can hardcode non-existent directories. - if test "$hardcode_direct_GCJ" != no && - # If the only mechanism to avoid hardcoding is shlibpath_var, we - # have to relink, otherwise we might link with an installed library - # when we should be linking with a yet-to-be-installed one - ## test "$_LT_AC_TAGVAR(hardcode_shlibpath_var, GCJ)" != no && - test "$hardcode_minus_L_GCJ" != no; then - # Linking always hardcodes the temporary library directory. - hardcode_action_GCJ=relink - else - # We can link without hardcoding, and we can hardcode nonexisting dirs. - hardcode_action_GCJ=immediate - fi -else - # We cannot hardcode anything, or else we can only hardcode existing - # directories. - hardcode_action_GCJ=unsupported -fi -{ echo "$as_me:$LINENO: result: $hardcode_action_GCJ" >&5 -echo "${ECHO_T}$hardcode_action_GCJ" >&6; } - -if test "$hardcode_action_GCJ" = relink; then - # Fast installation is not supported - enable_fast_install=no -elif test "$shlibpath_overrides_runpath" = yes || - test "$enable_shared" = no; then - # Fast installation is not necessary - enable_fast_install=needless -fi - - -# The else clause should only fire when bootstrapping the -# libtool distribution, otherwise you forgot to ship ltmain.sh -# with your package, and you will get complaints that there are -# no rules to generate ltmain.sh. -if test -f "$ltmain"; then - # See if we are running on zsh, and set the options which allow our commands through - # without removal of \ escapes. - if test -n "${ZSH_VERSION+set}" ; then - setopt NO_GLOB_SUBST - fi - # Now quote all the things that may contain metacharacters while being - # careful not to overquote the AC_SUBSTed values. We take copies of the - # variables and quote the copies for generation of the libtool script. - for var in echo old_CC old_CFLAGS AR AR_FLAGS EGREP RANLIB LN_S LTCC LTCFLAGS NM \ - SED SHELL STRIP \ - libname_spec library_names_spec soname_spec extract_expsyms_cmds \ - old_striplib striplib file_magic_cmd finish_cmds finish_eval \ - deplibs_check_method reload_flag reload_cmds need_locks \ - lt_cv_sys_global_symbol_pipe lt_cv_sys_global_symbol_to_cdecl \ - lt_cv_sys_global_symbol_to_c_name_address \ - sys_lib_search_path_spec sys_lib_dlsearch_path_spec \ - old_postinstall_cmds old_postuninstall_cmds \ - compiler_GCJ \ - CC_GCJ \ - LD_GCJ \ - lt_prog_compiler_wl_GCJ \ - lt_prog_compiler_pic_GCJ \ - lt_prog_compiler_static_GCJ \ - lt_prog_compiler_no_builtin_flag_GCJ \ - export_dynamic_flag_spec_GCJ \ - thread_safe_flag_spec_GCJ \ - whole_archive_flag_spec_GCJ \ - enable_shared_with_static_runtimes_GCJ \ - old_archive_cmds_GCJ \ - old_archive_from_new_cmds_GCJ \ - predep_objects_GCJ \ - postdep_objects_GCJ \ - predeps_GCJ \ - postdeps_GCJ \ - compiler_lib_search_path_GCJ \ - archive_cmds_GCJ \ - archive_expsym_cmds_GCJ \ - postinstall_cmds_GCJ \ - postuninstall_cmds_GCJ \ - old_archive_from_expsyms_cmds_GCJ \ - allow_undefined_flag_GCJ \ - no_undefined_flag_GCJ \ - export_symbols_cmds_GCJ \ - hardcode_libdir_flag_spec_GCJ \ - hardcode_libdir_flag_spec_ld_GCJ \ - hardcode_libdir_separator_GCJ \ - hardcode_automatic_GCJ \ - module_cmds_GCJ \ - module_expsym_cmds_GCJ \ - lt_cv_prog_compiler_c_o_GCJ \ - fix_srcfile_path_GCJ \ - exclude_expsyms_GCJ \ - include_expsyms_GCJ; do - - case $var in - old_archive_cmds_GCJ | \ - old_archive_from_new_cmds_GCJ | \ - archive_cmds_GCJ | \ - archive_expsym_cmds_GCJ | \ - module_cmds_GCJ | \ - module_expsym_cmds_GCJ | \ - old_archive_from_expsyms_cmds_GCJ | \ - export_symbols_cmds_GCJ | \ - extract_expsyms_cmds | reload_cmds | finish_cmds | \ - postinstall_cmds | postuninstall_cmds | \ - old_postinstall_cmds | old_postuninstall_cmds | \ - sys_lib_search_path_spec | sys_lib_dlsearch_path_spec) - # Double-quote double-evaled strings. - eval "lt_$var=\\\"\`\$echo \"X\$$var\" | \$Xsed -e \"\$double_quote_subst\" -e \"\$sed_quote_subst\" -e \"\$delay_variable_subst\"\`\\\"" - ;; - *) - eval "lt_$var=\\\"\`\$echo \"X\$$var\" | \$Xsed -e \"\$sed_quote_subst\"\`\\\"" - ;; - esac - done - - case $lt_echo in - *'\$0 --fallback-echo"') - lt_echo=`$echo "X$lt_echo" | $Xsed -e 's/\\\\\\\$0 --fallback-echo"$/$0 --fallback-echo"/'` - ;; - esac - -cfgfile="$ofile" - - cat <<__EOF__ >> "$cfgfile" -# ### BEGIN LIBTOOL TAG CONFIG: $tagname - -# Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`: - -# Shell to use when invoking shell scripts. -SHELL=$lt_SHELL - -# Whether or not to build shared libraries. -build_libtool_libs=$enable_shared - -# Whether or not to build static libraries. -build_old_libs=$enable_static - -# Whether or not to add -lc for building shared libraries. -build_libtool_need_lc=$archive_cmds_need_lc_GCJ - -# Whether or not to disallow shared libs when runtime libs are static -allow_libtool_libs_with_static_runtimes=$enable_shared_with_static_runtimes_GCJ - -# Whether or not to optimize for fast installation. -fast_install=$enable_fast_install - -# The host system. -host_alias=$host_alias -host=$host -host_os=$host_os - -# The build system. -build_alias=$build_alias -build=$build -build_os=$build_os - -# An echo program that does not interpret backslashes. -echo=$lt_echo - -# The archiver. -AR=$lt_AR -AR_FLAGS=$lt_AR_FLAGS - -# A C compiler. -LTCC=$lt_LTCC - -# LTCC compiler flags. -LTCFLAGS=$lt_LTCFLAGS - -# A language-specific compiler. -CC=$lt_compiler_GCJ - -# Is the compiler the GNU C compiler? -with_gcc=$GCC_GCJ - -# An ERE matcher. -EGREP=$lt_EGREP - -# The linker used to build libraries. -LD=$lt_LD_GCJ - -# Whether we need hard or soft links. -LN_S=$lt_LN_S - -# A BSD-compatible nm program. -NM=$lt_NM - -# A symbol stripping program -STRIP=$lt_STRIP - -# Used to examine libraries when file_magic_cmd begins "file" -MAGIC_CMD=$MAGIC_CMD - -# Used on cygwin: DLL creation program. -DLLTOOL="$DLLTOOL" - -# Used on cygwin: object dumper. -OBJDUMP="$OBJDUMP" - -# Used on cygwin: assembler. -AS="$AS" - -# The name of the directory that contains temporary libtool files. -objdir=$objdir - -# How to create reloadable object files. -reload_flag=$lt_reload_flag -reload_cmds=$lt_reload_cmds - -# How to pass a linker flag through the compiler. -wl=$lt_lt_prog_compiler_wl_GCJ - -# Object file suffix (normally "o"). -objext="$ac_objext" - -# Old archive suffix (normally "a"). -libext="$libext" - -# Shared library suffix (normally ".so"). -shrext_cmds='$shrext_cmds' - -# Executable file suffix (normally ""). -exeext="$exeext" - -# Additional compiler flags for building library objects. -pic_flag=$lt_lt_prog_compiler_pic_GCJ -pic_mode=$pic_mode - -# What is the maximum length of a command? -max_cmd_len=$lt_cv_sys_max_cmd_len - -# Does compiler simultaneously support -c and -o options? -compiler_c_o=$lt_lt_cv_prog_compiler_c_o_GCJ - -# Must we lock files when doing compilation? -need_locks=$lt_need_locks - -# Do we need the lib prefix for modules? -need_lib_prefix=$need_lib_prefix - -# Do we need a version for libraries? -need_version=$need_version - -# Whether dlopen is supported. -dlopen_support=$enable_dlopen - -# Whether dlopen of programs is supported. -dlopen_self=$enable_dlopen_self - -# Whether dlopen of statically linked programs is supported. -dlopen_self_static=$enable_dlopen_self_static - -# Compiler flag to prevent dynamic linking. -link_static_flag=$lt_lt_prog_compiler_static_GCJ - -# Compiler flag to turn off builtin functions. -no_builtin_flag=$lt_lt_prog_compiler_no_builtin_flag_GCJ - -# Compiler flag to allow reflexive dlopens. -export_dynamic_flag_spec=$lt_export_dynamic_flag_spec_GCJ - -# Compiler flag to generate shared objects directly from archives. -whole_archive_flag_spec=$lt_whole_archive_flag_spec_GCJ - -# Compiler flag to generate thread-safe objects. -thread_safe_flag_spec=$lt_thread_safe_flag_spec_GCJ - -# Library versioning type. -version_type=$version_type - -# Format of library name prefix. -libname_spec=$lt_libname_spec - -# List of archive names. First name is the real one, the rest are links. -# The last name is the one that the linker finds with -lNAME. -library_names_spec=$lt_library_names_spec - -# The coded name of the library, if different from the real name. -soname_spec=$lt_soname_spec - -# Commands used to build and install an old-style archive. -RANLIB=$lt_RANLIB -old_archive_cmds=$lt_old_archive_cmds_GCJ -old_postinstall_cmds=$lt_old_postinstall_cmds -old_postuninstall_cmds=$lt_old_postuninstall_cmds - -# Create an old-style archive from a shared archive. -old_archive_from_new_cmds=$lt_old_archive_from_new_cmds_GCJ - -# Create a temporary old-style archive to link instead of a shared archive. -old_archive_from_expsyms_cmds=$lt_old_archive_from_expsyms_cmds_GCJ - -# Commands used to build and install a shared archive. -archive_cmds=$lt_archive_cmds_GCJ -archive_expsym_cmds=$lt_archive_expsym_cmds_GCJ -postinstall_cmds=$lt_postinstall_cmds -postuninstall_cmds=$lt_postuninstall_cmds - -# Commands used to build a loadable module (assumed same as above if empty) -module_cmds=$lt_module_cmds_GCJ -module_expsym_cmds=$lt_module_expsym_cmds_GCJ - -# Commands to strip libraries. -old_striplib=$lt_old_striplib -striplib=$lt_striplib - -# Dependencies to place before the objects being linked to create a -# shared library. -predep_objects=$lt_predep_objects_GCJ - -# Dependencies to place after the objects being linked to create a -# shared library. -postdep_objects=$lt_postdep_objects_GCJ - -# Dependencies to place before the objects being linked to create a -# shared library. -predeps=$lt_predeps_GCJ - -# Dependencies to place after the objects being linked to create a -# shared library. -postdeps=$lt_postdeps_GCJ - -# The library search path used internally by the compiler when linking -# a shared library. -compiler_lib_search_path=$lt_compiler_lib_search_path_GCJ - -# Method to check whether dependent libraries are shared objects. -deplibs_check_method=$lt_deplibs_check_method - -# Command to use when deplibs_check_method == file_magic. -file_magic_cmd=$lt_file_magic_cmd - -# Flag that allows shared libraries with undefined symbols to be built. -allow_undefined_flag=$lt_allow_undefined_flag_GCJ - -# Flag that forces no undefined symbols. -no_undefined_flag=$lt_no_undefined_flag_GCJ - -# Commands used to finish a libtool library installation in a directory. -finish_cmds=$lt_finish_cmds - -# Same as above, but a single script fragment to be evaled but not shown. -finish_eval=$lt_finish_eval - -# Take the output of nm and produce a listing of raw symbols and C names. -global_symbol_pipe=$lt_lt_cv_sys_global_symbol_pipe - -# Transform the output of nm in a proper C declaration -global_symbol_to_cdecl=$lt_lt_cv_sys_global_symbol_to_cdecl - -# Transform the output of nm in a C name address pair -global_symbol_to_c_name_address=$lt_lt_cv_sys_global_symbol_to_c_name_address - -# This is the shared library runtime path variable. -runpath_var=$runpath_var - -# This is the shared library path variable. -shlibpath_var=$shlibpath_var - -# Is shlibpath searched before the hard-coded library search path? -shlibpath_overrides_runpath=$shlibpath_overrides_runpath - -# How to hardcode a shared library path into an executable. -hardcode_action=$hardcode_action_GCJ - -# Whether we should hardcode library paths into libraries. -hardcode_into_libs=$hardcode_into_libs - -# Flag to hardcode \$libdir into a binary during linking. -# This must work even if \$libdir does not exist. -hardcode_libdir_flag_spec=$lt_hardcode_libdir_flag_spec_GCJ - -# If ld is used when linking, flag to hardcode \$libdir into -# a binary during linking. This must work even if \$libdir does -# not exist. -hardcode_libdir_flag_spec_ld=$lt_hardcode_libdir_flag_spec_ld_GCJ - -# Whether we need a single -rpath flag with a separated argument. -hardcode_libdir_separator=$lt_hardcode_libdir_separator_GCJ - -# Set to yes if using DIR/libNAME${shared_ext} during linking hardcodes DIR into the -# resulting binary. -hardcode_direct=$hardcode_direct_GCJ - -# Set to yes if using the -LDIR flag during linking hardcodes DIR into the -# resulting binary. -hardcode_minus_L=$hardcode_minus_L_GCJ - -# Set to yes if using SHLIBPATH_VAR=DIR during linking hardcodes DIR into -# the resulting binary. -hardcode_shlibpath_var=$hardcode_shlibpath_var_GCJ - -# Set to yes if building a shared library automatically hardcodes DIR into the library -# and all subsequent libraries and executables linked against it. -hardcode_automatic=$hardcode_automatic_GCJ - -# Variables whose values should be saved in libtool wrapper scripts and -# restored at relink time. -variables_saved_for_relink="$variables_saved_for_relink" - -# Whether libtool must link a program against all its dependency libraries. -link_all_deplibs=$link_all_deplibs_GCJ - -# Compile-time system search path for libraries -sys_lib_search_path_spec=$lt_sys_lib_search_path_spec - -# Run-time system search path for libraries -sys_lib_dlsearch_path_spec=$lt_sys_lib_dlsearch_path_spec - -# Fix the shell variable \$srcfile for the compiler. -fix_srcfile_path=$lt_fix_srcfile_path - -# Set to yes if exported symbols are required. -always_export_symbols=$always_export_symbols_GCJ - -# The commands to list exported symbols. -export_symbols_cmds=$lt_export_symbols_cmds_GCJ - -# The commands to extract the exported symbol list from a shared archive. -extract_expsyms_cmds=$lt_extract_expsyms_cmds - -# Symbols that should not be listed in the preloaded symbols. -exclude_expsyms=$lt_exclude_expsyms_GCJ - -# Symbols that must always be exported. -include_expsyms=$lt_include_expsyms_GCJ - -# ### END LIBTOOL TAG CONFIG: $tagname - -__EOF__ - - -else - # If there is no Makefile yet, we rely on a make rule to execute - # `config.status --recheck' to rerun these tests and create the - # libtool script then. - ltmain_in=`echo $ltmain | sed -e 's/\.sh$/.in/'` - if test -f "$ltmain_in"; then - test -f Makefile && make "$ltmain" - fi -fi - - -ac_ext=c -ac_cpp='$CPP $CPPFLAGS' -ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_c_compiler_gnu - -CC="$lt_save_CC" - - else - tagname="" - fi - ;; - - RC) - - -# Source file extension for RC test sources. -ac_ext=rc - -# Object file extension for compiled RC test sources. -objext=o -objext_RC=$objext - -# Code to be used in simple compile tests -lt_simple_compile_test_code='sample MENU { MENUITEM "&Soup", 100, CHECKED }' - -# Code to be used in simple link tests -lt_simple_link_test_code="$lt_simple_compile_test_code" - -# ltmain only uses $CC for tagged configurations so make sure $CC is set. - -# If no C compiler was specified, use CC. -LTCC=${LTCC-"$CC"} - -# If no C compiler flags were specified, use CFLAGS. -LTCFLAGS=${LTCFLAGS-"$CFLAGS"} - -# Allow CC to be a program name with arguments. -compiler=$CC - - -# save warnings/boilerplate of simple test code -ac_outfile=conftest.$ac_objext -echo "$lt_simple_compile_test_code" >conftest.$ac_ext -eval "$ac_compile" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err -_lt_compiler_boilerplate=`cat conftest.err` -$rm conftest* - -ac_outfile=conftest.$ac_objext -echo "$lt_simple_link_test_code" >conftest.$ac_ext -eval "$ac_link" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err -_lt_linker_boilerplate=`cat conftest.err` -$rm conftest* - - -# Allow CC to be a program name with arguments. -lt_save_CC="$CC" -CC=${RC-"windres"} -compiler=$CC -compiler_RC=$CC -for cc_temp in $compiler""; do - case $cc_temp in - compile | *[\\/]compile | ccache | *[\\/]ccache ) ;; - distcc | *[\\/]distcc | purify | *[\\/]purify ) ;; - \-*) ;; - *) break;; - esac -done -cc_basename=`$echo "X$cc_temp" | $Xsed -e 's%.*/%%' -e "s%^$host_alias-%%"` - -lt_cv_prog_compiler_c_o_RC=yes - -# The else clause should only fire when bootstrapping the -# libtool distribution, otherwise you forgot to ship ltmain.sh -# with your package, and you will get complaints that there are -# no rules to generate ltmain.sh. -if test -f "$ltmain"; then - # See if we are running on zsh, and set the options which allow our commands through - # without removal of \ escapes. - if test -n "${ZSH_VERSION+set}" ; then - setopt NO_GLOB_SUBST - fi - # Now quote all the things that may contain metacharacters while being - # careful not to overquote the AC_SUBSTed values. We take copies of the - # variables and quote the copies for generation of the libtool script. - for var in echo old_CC old_CFLAGS AR AR_FLAGS EGREP RANLIB LN_S LTCC LTCFLAGS NM \ - SED SHELL STRIP \ - libname_spec library_names_spec soname_spec extract_expsyms_cmds \ - old_striplib striplib file_magic_cmd finish_cmds finish_eval \ - deplibs_check_method reload_flag reload_cmds need_locks \ - lt_cv_sys_global_symbol_pipe lt_cv_sys_global_symbol_to_cdecl \ - lt_cv_sys_global_symbol_to_c_name_address \ - sys_lib_search_path_spec sys_lib_dlsearch_path_spec \ - old_postinstall_cmds old_postuninstall_cmds \ - compiler_RC \ - CC_RC \ - LD_RC \ - lt_prog_compiler_wl_RC \ - lt_prog_compiler_pic_RC \ - lt_prog_compiler_static_RC \ - lt_prog_compiler_no_builtin_flag_RC \ - export_dynamic_flag_spec_RC \ - thread_safe_flag_spec_RC \ - whole_archive_flag_spec_RC \ - enable_shared_with_static_runtimes_RC \ - old_archive_cmds_RC \ - old_archive_from_new_cmds_RC \ - predep_objects_RC \ - postdep_objects_RC \ - predeps_RC \ - postdeps_RC \ - compiler_lib_search_path_RC \ - archive_cmds_RC \ - archive_expsym_cmds_RC \ - postinstall_cmds_RC \ - postuninstall_cmds_RC \ - old_archive_from_expsyms_cmds_RC \ - allow_undefined_flag_RC \ - no_undefined_flag_RC \ - export_symbols_cmds_RC \ - hardcode_libdir_flag_spec_RC \ - hardcode_libdir_flag_spec_ld_RC \ - hardcode_libdir_separator_RC \ - hardcode_automatic_RC \ - module_cmds_RC \ - module_expsym_cmds_RC \ - lt_cv_prog_compiler_c_o_RC \ - fix_srcfile_path_RC \ - exclude_expsyms_RC \ - include_expsyms_RC; do - - case $var in - old_archive_cmds_RC | \ - old_archive_from_new_cmds_RC | \ - archive_cmds_RC | \ - archive_expsym_cmds_RC | \ - module_cmds_RC | \ - module_expsym_cmds_RC | \ - old_archive_from_expsyms_cmds_RC | \ - export_symbols_cmds_RC | \ - extract_expsyms_cmds | reload_cmds | finish_cmds | \ - postinstall_cmds | postuninstall_cmds | \ - old_postinstall_cmds | old_postuninstall_cmds | \ - sys_lib_search_path_spec | sys_lib_dlsearch_path_spec) - # Double-quote double-evaled strings. - eval "lt_$var=\\\"\`\$echo \"X\$$var\" | \$Xsed -e \"\$double_quote_subst\" -e \"\$sed_quote_subst\" -e \"\$delay_variable_subst\"\`\\\"" - ;; - *) - eval "lt_$var=\\\"\`\$echo \"X\$$var\" | \$Xsed -e \"\$sed_quote_subst\"\`\\\"" - ;; - esac - done - - case $lt_echo in - *'\$0 --fallback-echo"') - lt_echo=`$echo "X$lt_echo" | $Xsed -e 's/\\\\\\\$0 --fallback-echo"$/$0 --fallback-echo"/'` - ;; - esac - -cfgfile="$ofile" - - cat <<__EOF__ >> "$cfgfile" -# ### BEGIN LIBTOOL TAG CONFIG: $tagname - -# Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`: - -# Shell to use when invoking shell scripts. -SHELL=$lt_SHELL - -# Whether or not to build shared libraries. -build_libtool_libs=$enable_shared - -# Whether or not to build static libraries. -build_old_libs=$enable_static - -# Whether or not to add -lc for building shared libraries. -build_libtool_need_lc=$archive_cmds_need_lc_RC - -# Whether or not to disallow shared libs when runtime libs are static -allow_libtool_libs_with_static_runtimes=$enable_shared_with_static_runtimes_RC - -# Whether or not to optimize for fast installation. -fast_install=$enable_fast_install - -# The host system. -host_alias=$host_alias -host=$host -host_os=$host_os - -# The build system. -build_alias=$build_alias -build=$build -build_os=$build_os - -# An echo program that does not interpret backslashes. -echo=$lt_echo - -# The archiver. -AR=$lt_AR -AR_FLAGS=$lt_AR_FLAGS - -# A C compiler. -LTCC=$lt_LTCC - -# LTCC compiler flags. -LTCFLAGS=$lt_LTCFLAGS - -# A language-specific compiler. -CC=$lt_compiler_RC - -# Is the compiler the GNU C compiler? -with_gcc=$GCC_RC - -# An ERE matcher. -EGREP=$lt_EGREP - -# The linker used to build libraries. -LD=$lt_LD_RC - -# Whether we need hard or soft links. -LN_S=$lt_LN_S - -# A BSD-compatible nm program. -NM=$lt_NM - -# A symbol stripping program -STRIP=$lt_STRIP - -# Used to examine libraries when file_magic_cmd begins "file" -MAGIC_CMD=$MAGIC_CMD - -# Used on cygwin: DLL creation program. -DLLTOOL="$DLLTOOL" - -# Used on cygwin: object dumper. -OBJDUMP="$OBJDUMP" - -# Used on cygwin: assembler. -AS="$AS" - -# The name of the directory that contains temporary libtool files. -objdir=$objdir - -# How to create reloadable object files. -reload_flag=$lt_reload_flag -reload_cmds=$lt_reload_cmds - -# How to pass a linker flag through the compiler. -wl=$lt_lt_prog_compiler_wl_RC - -# Object file suffix (normally "o"). -objext="$ac_objext" - -# Old archive suffix (normally "a"). -libext="$libext" - -# Shared library suffix (normally ".so"). -shrext_cmds='$shrext_cmds' - -# Executable file suffix (normally ""). -exeext="$exeext" - -# Additional compiler flags for building library objects. -pic_flag=$lt_lt_prog_compiler_pic_RC -pic_mode=$pic_mode - -# What is the maximum length of a command? -max_cmd_len=$lt_cv_sys_max_cmd_len - -# Does compiler simultaneously support -c and -o options? -compiler_c_o=$lt_lt_cv_prog_compiler_c_o_RC - -# Must we lock files when doing compilation? -need_locks=$lt_need_locks - -# Do we need the lib prefix for modules? -need_lib_prefix=$need_lib_prefix - -# Do we need a version for libraries? -need_version=$need_version - -# Whether dlopen is supported. -dlopen_support=$enable_dlopen - -# Whether dlopen of programs is supported. -dlopen_self=$enable_dlopen_self - -# Whether dlopen of statically linked programs is supported. -dlopen_self_static=$enable_dlopen_self_static - -# Compiler flag to prevent dynamic linking. -link_static_flag=$lt_lt_prog_compiler_static_RC - -# Compiler flag to turn off builtin functions. -no_builtin_flag=$lt_lt_prog_compiler_no_builtin_flag_RC - -# Compiler flag to allow reflexive dlopens. -export_dynamic_flag_spec=$lt_export_dynamic_flag_spec_RC - -# Compiler flag to generate shared objects directly from archives. -whole_archive_flag_spec=$lt_whole_archive_flag_spec_RC - -# Compiler flag to generate thread-safe objects. -thread_safe_flag_spec=$lt_thread_safe_flag_spec_RC - -# Library versioning type. -version_type=$version_type - -# Format of library name prefix. -libname_spec=$lt_libname_spec - -# List of archive names. First name is the real one, the rest are links. -# The last name is the one that the linker finds with -lNAME. -library_names_spec=$lt_library_names_spec - -# The coded name of the library, if different from the real name. -soname_spec=$lt_soname_spec - -# Commands used to build and install an old-style archive. -RANLIB=$lt_RANLIB -old_archive_cmds=$lt_old_archive_cmds_RC -old_postinstall_cmds=$lt_old_postinstall_cmds -old_postuninstall_cmds=$lt_old_postuninstall_cmds - -# Create an old-style archive from a shared archive. -old_archive_from_new_cmds=$lt_old_archive_from_new_cmds_RC - -# Create a temporary old-style archive to link instead of a shared archive. -old_archive_from_expsyms_cmds=$lt_old_archive_from_expsyms_cmds_RC - -# Commands used to build and install a shared archive. -archive_cmds=$lt_archive_cmds_RC -archive_expsym_cmds=$lt_archive_expsym_cmds_RC -postinstall_cmds=$lt_postinstall_cmds -postuninstall_cmds=$lt_postuninstall_cmds - -# Commands used to build a loadable module (assumed same as above if empty) -module_cmds=$lt_module_cmds_RC -module_expsym_cmds=$lt_module_expsym_cmds_RC - -# Commands to strip libraries. -old_striplib=$lt_old_striplib -striplib=$lt_striplib - -# Dependencies to place before the objects being linked to create a -# shared library. -predep_objects=$lt_predep_objects_RC - -# Dependencies to place after the objects being linked to create a -# shared library. -postdep_objects=$lt_postdep_objects_RC - -# Dependencies to place before the objects being linked to create a -# shared library. -predeps=$lt_predeps_RC - -# Dependencies to place after the objects being linked to create a -# shared library. -postdeps=$lt_postdeps_RC - -# The library search path used internally by the compiler when linking -# a shared library. -compiler_lib_search_path=$lt_compiler_lib_search_path_RC - -# Method to check whether dependent libraries are shared objects. -deplibs_check_method=$lt_deplibs_check_method - -# Command to use when deplibs_check_method == file_magic. -file_magic_cmd=$lt_file_magic_cmd - -# Flag that allows shared libraries with undefined symbols to be built. -allow_undefined_flag=$lt_allow_undefined_flag_RC - -# Flag that forces no undefined symbols. -no_undefined_flag=$lt_no_undefined_flag_RC - -# Commands used to finish a libtool library installation in a directory. -finish_cmds=$lt_finish_cmds - -# Same as above, but a single script fragment to be evaled but not shown. -finish_eval=$lt_finish_eval - -# Take the output of nm and produce a listing of raw symbols and C names. -global_symbol_pipe=$lt_lt_cv_sys_global_symbol_pipe - -# Transform the output of nm in a proper C declaration -global_symbol_to_cdecl=$lt_lt_cv_sys_global_symbol_to_cdecl - -# Transform the output of nm in a C name address pair -global_symbol_to_c_name_address=$lt_lt_cv_sys_global_symbol_to_c_name_address - -# This is the shared library runtime path variable. -runpath_var=$runpath_var - -# This is the shared library path variable. -shlibpath_var=$shlibpath_var - -# Is shlibpath searched before the hard-coded library search path? -shlibpath_overrides_runpath=$shlibpath_overrides_runpath - -# How to hardcode a shared library path into an executable. -hardcode_action=$hardcode_action_RC - -# Whether we should hardcode library paths into libraries. -hardcode_into_libs=$hardcode_into_libs - -# Flag to hardcode \$libdir into a binary during linking. -# This must work even if \$libdir does not exist. -hardcode_libdir_flag_spec=$lt_hardcode_libdir_flag_spec_RC - -# If ld is used when linking, flag to hardcode \$libdir into -# a binary during linking. This must work even if \$libdir does -# not exist. -hardcode_libdir_flag_spec_ld=$lt_hardcode_libdir_flag_spec_ld_RC - -# Whether we need a single -rpath flag with a separated argument. -hardcode_libdir_separator=$lt_hardcode_libdir_separator_RC - -# Set to yes if using DIR/libNAME${shared_ext} during linking hardcodes DIR into the -# resulting binary. -hardcode_direct=$hardcode_direct_RC - -# Set to yes if using the -LDIR flag during linking hardcodes DIR into the -# resulting binary. -hardcode_minus_L=$hardcode_minus_L_RC - -# Set to yes if using SHLIBPATH_VAR=DIR during linking hardcodes DIR into -# the resulting binary. -hardcode_shlibpath_var=$hardcode_shlibpath_var_RC - -# Set to yes if building a shared library automatically hardcodes DIR into the library -# and all subsequent libraries and executables linked against it. -hardcode_automatic=$hardcode_automatic_RC - -# Variables whose values should be saved in libtool wrapper scripts and -# restored at relink time. -variables_saved_for_relink="$variables_saved_for_relink" - -# Whether libtool must link a program against all its dependency libraries. -link_all_deplibs=$link_all_deplibs_RC - -# Compile-time system search path for libraries -sys_lib_search_path_spec=$lt_sys_lib_search_path_spec - -# Run-time system search path for libraries -sys_lib_dlsearch_path_spec=$lt_sys_lib_dlsearch_path_spec - -# Fix the shell variable \$srcfile for the compiler. -fix_srcfile_path=$lt_fix_srcfile_path - -# Set to yes if exported symbols are required. -always_export_symbols=$always_export_symbols_RC - -# The commands to list exported symbols. -export_symbols_cmds=$lt_export_symbols_cmds_RC - -# The commands to extract the exported symbol list from a shared archive. -extract_expsyms_cmds=$lt_extract_expsyms_cmds - -# Symbols that should not be listed in the preloaded symbols. -exclude_expsyms=$lt_exclude_expsyms_RC - -# Symbols that must always be exported. -include_expsyms=$lt_include_expsyms_RC - -# ### END LIBTOOL TAG CONFIG: $tagname - -__EOF__ - - -else - # If there is no Makefile yet, we rely on a make rule to execute - # `config.status --recheck' to rerun these tests and create the - # libtool script then. - ltmain_in=`echo $ltmain | sed -e 's/\.sh$/.in/'` - if test -f "$ltmain_in"; then - test -f Makefile && make "$ltmain" - fi -fi - - -ac_ext=c -ac_cpp='$CPP $CPPFLAGS' -ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_c_compiler_gnu - -CC="$lt_save_CC" - - ;; - - *) - { { echo "$as_me:$LINENO: error: Unsupported tag name: $tagname" >&5 -echo "$as_me: error: Unsupported tag name: $tagname" >&2;} - { (exit 1); exit 1; }; } - ;; - esac - - # Append the new tag name to the list of available tags. - if test -n "$tagname" ; then - available_tags="$available_tags $tagname" - fi - fi - done - IFS="$lt_save_ifs" - - # Now substitute the updated list of available tags. - if eval "sed -e 's/^available_tags=.*\$/available_tags=\"$available_tags\"/' \"$ofile\" > \"${ofile}T\""; then - mv "${ofile}T" "$ofile" - chmod +x "$ofile" - else - rm -f "${ofile}T" - { { echo "$as_me:$LINENO: error: unable to update list of available tagged configurations." >&5 -echo "$as_me: error: unable to update list of available tagged configurations." >&2;} - { (exit 1); exit 1; }; } - fi -fi - - - -# This can be used to rebuild libtool when needed -LIBTOOL_DEPS="$ac_aux_dir/ltmain.sh" - -# Always use our own libtool. -LIBTOOL='$(SHELL) $(top_builddir)/libtool' - -# Prevent multiple expansion - - - - - - - - - - - - - - - - - - - - - -{ echo "$as_me:$LINENO: checking whether to enable maintainer-specific portions of Makefiles" >&5 -echo $ECHO_N "checking whether to enable maintainer-specific portions of Makefiles... $ECHO_C" >&6; } - # Check whether --enable-maintainer-mode was given. -if test "${enable_maintainer_mode+set}" = set; then - enableval=$enable_maintainer_mode; USE_MAINTAINER_MODE=$enableval -else - USE_MAINTAINER_MODE=no -fi - - { echo "$as_me:$LINENO: result: $USE_MAINTAINER_MODE" >&5 -echo "${ECHO_T}$USE_MAINTAINER_MODE" >&6; } - if test $USE_MAINTAINER_MODE = yes; then - MAINTAINER_MODE_TRUE= - MAINTAINER_MODE_FALSE='#' -else - MAINTAINER_MODE_TRUE='#' - MAINTAINER_MODE_FALSE= -fi - - MAINT=$MAINTAINER_MODE_TRUE - - - - -for ac_header in sys/mman.h -do -as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh` -if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then - { echo "$as_me:$LINENO: checking for $ac_header" >&5 -echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6; } -if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -fi -ac_res=`eval echo '${'$as_ac_Header'}'` - { echo "$as_me:$LINENO: result: $ac_res" >&5 -echo "${ECHO_T}$ac_res" >&6; } -else - # Is the header compilable? -{ echo "$as_me:$LINENO: checking $ac_header usability" >&5 -echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6; } -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default -#include <$ac_header> -_ACEOF -rm -f conftest.$ac_objext -if { (ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then - ac_header_compiler=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_header_compiler=no -fi - -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -{ echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 -echo "${ECHO_T}$ac_header_compiler" >&6; } - -# Is the header present? -{ echo "$as_me:$LINENO: checking $ac_header presence" >&5 -echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6; } -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -#include <$ac_header> -_ACEOF -if { (ac_try="$ac_cpp conftest.$ac_ext" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } >/dev/null && { - test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || - test ! -s conftest.err - }; then - ac_header_preproc=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_header_preproc=no -fi - -rm -f conftest.err conftest.$ac_ext -{ echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 -echo "${ECHO_T}$ac_header_preproc" >&6; } - -# So? What about this header? -case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in - yes:no: ) - { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5 -echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5 -echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;} - ac_header_preproc=yes - ;; - no:yes:* ) - { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5 -echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: check for missing prerequisite headers?" >&5 -echo "$as_me: WARNING: $ac_header: check for missing prerequisite headers?" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5 -echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&5 -echo "$as_me: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5 -echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5 -echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;} - ( cat <<\_ASBOX -## ------------------------------------------- ## -## Report this to http://gcc.gnu.org/bugs.html ## -## ------------------------------------------- ## -_ASBOX - ) | sed "s/^/$as_me: WARNING: /" >&2 - ;; -esac -{ echo "$as_me:$LINENO: checking for $ac_header" >&5 -echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6; } -if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - eval "$as_ac_Header=\$ac_header_preproc" -fi -ac_res=`eval echo '${'$as_ac_Header'}'` - { echo "$as_me:$LINENO: result: $ac_res" >&5 -echo "${ECHO_T}$ac_res" >&6; } - -fi -if test `eval echo '${'$as_ac_Header'}'` = yes; then - cat >>confdefs.h <<_ACEOF -#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1 -_ACEOF - -fi - -done - - -for ac_func in mmap -do -as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh` -{ echo "$as_me:$LINENO: checking for $ac_func" >&5 -echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6; } -if { as_var=$as_ac_var; eval "test \"\${$as_var+set}\" = set"; }; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -/* Define $ac_func to an innocuous variant, in case declares $ac_func. - For example, HP-UX 11i declares gettimeofday. */ -#define $ac_func innocuous_$ac_func - -/* System header to define __stub macros and hopefully few prototypes, - which can conflict with char $ac_func (); below. - Prefer to if __STDC__ is defined, since - exists even on freestanding compilers. */ - -#ifdef __STDC__ -# include -#else -# include -#endif - -#undef $ac_func - -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char $ac_func (); -/* The GNU C library defines this for functions which it implements - to always fail with ENOSYS. Some functions are actually named - something starting with __ and the normal name is an alias. */ -#if defined __stub_$ac_func || defined __stub___$ac_func -choke me -#endif - -int -main () -{ -return $ac_func (); - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext conftest$ac_exeext -if { (ac_try="$ac_link" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_link") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest$ac_exeext && - $as_test_x conftest$ac_exeext; then - eval "$as_ac_var=yes" -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - eval "$as_ac_var=no" -fi - -rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ - conftest$ac_exeext conftest.$ac_ext -fi -ac_res=`eval echo '${'$as_ac_var'}'` - { echo "$as_me:$LINENO: result: $ac_res" >&5 -echo "${ECHO_T}$ac_res" >&6; } -if test `eval echo '${'$as_ac_var'}'` = yes; then - cat >>confdefs.h <<_ACEOF -#define `echo "HAVE_$ac_func" | $as_tr_cpp` 1 -_ACEOF - -fi -done - - -if test "${ac_cv_header_sys_mman_h+set}" = set; then - { echo "$as_me:$LINENO: checking for sys/mman.h" >&5 -echo $ECHO_N "checking for sys/mman.h... $ECHO_C" >&6; } -if test "${ac_cv_header_sys_mman_h+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -fi -{ echo "$as_me:$LINENO: result: $ac_cv_header_sys_mman_h" >&5 -echo "${ECHO_T}$ac_cv_header_sys_mman_h" >&6; } -else - # Is the header compilable? -{ echo "$as_me:$LINENO: checking sys/mman.h usability" >&5 -echo $ECHO_N "checking sys/mman.h usability... $ECHO_C" >&6; } -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default -#include -_ACEOF -rm -f conftest.$ac_objext -if { (ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then - ac_header_compiler=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_header_compiler=no -fi - -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -{ echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 -echo "${ECHO_T}$ac_header_compiler" >&6; } - -# Is the header present? -{ echo "$as_me:$LINENO: checking sys/mman.h presence" >&5 -echo $ECHO_N "checking sys/mman.h presence... $ECHO_C" >&6; } -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -#include -_ACEOF -if { (ac_try="$ac_cpp conftest.$ac_ext" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } >/dev/null && { - test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || - test ! -s conftest.err - }; then - ac_header_preproc=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_header_preproc=no -fi - -rm -f conftest.err conftest.$ac_ext -{ echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 -echo "${ECHO_T}$ac_header_preproc" >&6; } - -# So? What about this header? -case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in - yes:no: ) - { echo "$as_me:$LINENO: WARNING: sys/mman.h: accepted by the compiler, rejected by the preprocessor!" >&5 -echo "$as_me: WARNING: sys/mman.h: accepted by the compiler, rejected by the preprocessor!" >&2;} - { echo "$as_me:$LINENO: WARNING: sys/mman.h: proceeding with the compiler's result" >&5 -echo "$as_me: WARNING: sys/mman.h: proceeding with the compiler's result" >&2;} - ac_header_preproc=yes - ;; - no:yes:* ) - { echo "$as_me:$LINENO: WARNING: sys/mman.h: present but cannot be compiled" >&5 -echo "$as_me: WARNING: sys/mman.h: present but cannot be compiled" >&2;} - { echo "$as_me:$LINENO: WARNING: sys/mman.h: check for missing prerequisite headers?" >&5 -echo "$as_me: WARNING: sys/mman.h: check for missing prerequisite headers?" >&2;} - { echo "$as_me:$LINENO: WARNING: sys/mman.h: see the Autoconf documentation" >&5 -echo "$as_me: WARNING: sys/mman.h: see the Autoconf documentation" >&2;} - { echo "$as_me:$LINENO: WARNING: sys/mman.h: section \"Present But Cannot Be Compiled\"" >&5 -echo "$as_me: WARNING: sys/mman.h: section \"Present But Cannot Be Compiled\"" >&2;} - { echo "$as_me:$LINENO: WARNING: sys/mman.h: proceeding with the preprocessor's result" >&5 -echo "$as_me: WARNING: sys/mman.h: proceeding with the preprocessor's result" >&2;} - { echo "$as_me:$LINENO: WARNING: sys/mman.h: in the future, the compiler will take precedence" >&5 -echo "$as_me: WARNING: sys/mman.h: in the future, the compiler will take precedence" >&2;} - ( cat <<\_ASBOX -## ------------------------------------------- ## -## Report this to http://gcc.gnu.org/bugs.html ## -## ------------------------------------------- ## -_ASBOX - ) | sed "s/^/$as_me: WARNING: /" >&2 - ;; -esac -{ echo "$as_me:$LINENO: checking for sys/mman.h" >&5 -echo $ECHO_N "checking for sys/mman.h... $ECHO_C" >&6; } -if test "${ac_cv_header_sys_mman_h+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - ac_cv_header_sys_mman_h=$ac_header_preproc -fi -{ echo "$as_me:$LINENO: result: $ac_cv_header_sys_mman_h" >&5 -echo "${ECHO_T}$ac_cv_header_sys_mman_h" >&6; } - -fi -if test $ac_cv_header_sys_mman_h = yes; then - libffi_header_sys_mman_h=yes -else - libffi_header_sys_mman_h=no -fi - - -{ echo "$as_me:$LINENO: checking for mmap" >&5 -echo $ECHO_N "checking for mmap... $ECHO_C" >&6; } -if test "${ac_cv_func_mmap+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -/* Define mmap to an innocuous variant, in case declares mmap. - For example, HP-UX 11i declares gettimeofday. */ -#define mmap innocuous_mmap - -/* System header to define __stub macros and hopefully few prototypes, - which can conflict with char mmap (); below. - Prefer to if __STDC__ is defined, since - exists even on freestanding compilers. */ - -#ifdef __STDC__ -# include -#else -# include -#endif - -#undef mmap - -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char mmap (); -/* The GNU C library defines this for functions which it implements - to always fail with ENOSYS. Some functions are actually named - something starting with __ and the normal name is an alias. */ -#if defined __stub_mmap || defined __stub___mmap -choke me -#endif - -int -main () -{ -return mmap (); - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext conftest$ac_exeext -if { (ac_try="$ac_link" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_link") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest$ac_exeext && - $as_test_x conftest$ac_exeext; then - ac_cv_func_mmap=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_cv_func_mmap=no -fi - -rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ - conftest$ac_exeext conftest.$ac_ext -fi -{ echo "$as_me:$LINENO: result: $ac_cv_func_mmap" >&5 -echo "${ECHO_T}$ac_cv_func_mmap" >&6; } -if test $ac_cv_func_mmap = yes; then - libffi_func_mmap=yes -else - libffi_func_mmap=no -fi - -if test "$libffi_header_sys_mman_h" != yes \ - || test "$libffi_func_mmap" != yes; then - ac_cv_func_mmap_file=no - ac_cv_func_mmap_dev_zero=no - ac_cv_func_mmap_anon=no -else - { echo "$as_me:$LINENO: checking whether read-only mmap of a plain file works" >&5 -echo $ECHO_N "checking whether read-only mmap of a plain file works... $ECHO_C" >&6; } -if test "${ac_cv_func_mmap_file+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - # Add a system to this blacklist if - # mmap(0, stat_size, PROT_READ, MAP_PRIVATE, fd, 0) doesn't return a - # memory area containing the same data that you'd get if you applied - # read() to the same fd. The only system known to have a problem here - # is VMS, where text files have record structure. - case "$host_os" in - vms* | ultrix*) - ac_cv_func_mmap_file=no ;; - *) - ac_cv_func_mmap_file=yes;; - esac -fi -{ echo "$as_me:$LINENO: result: $ac_cv_func_mmap_file" >&5 -echo "${ECHO_T}$ac_cv_func_mmap_file" >&6; } - { echo "$as_me:$LINENO: checking whether mmap from /dev/zero works" >&5 -echo $ECHO_N "checking whether mmap from /dev/zero works... $ECHO_C" >&6; } -if test "${ac_cv_func_mmap_dev_zero+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - # Add a system to this blacklist if it has mmap() but /dev/zero - # does not exist, or if mmapping /dev/zero does not give anonymous - # zeroed pages with both the following properties: - # 1. If you map N consecutive pages in with one call, and then - # unmap any subset of those pages, the pages that were not - # explicitly unmapped remain accessible. - # 2. If you map two adjacent blocks of memory and then unmap them - # both at once, they must both go away. - # Systems known to be in this category are Windows (all variants), - # VMS, and Darwin. - case "$host_os" in - vms* | cygwin* | pe | mingw* | darwin* | ultrix* | hpux10* | hpux11.00) - ac_cv_func_mmap_dev_zero=no ;; - *) - ac_cv_func_mmap_dev_zero=yes;; - esac -fi -{ echo "$as_me:$LINENO: result: $ac_cv_func_mmap_dev_zero" >&5 -echo "${ECHO_T}$ac_cv_func_mmap_dev_zero" >&6; } - - # Unlike /dev/zero, the MAP_ANON(YMOUS) defines can be probed for. - { echo "$as_me:$LINENO: checking for MAP_ANON(YMOUS)" >&5 -echo $ECHO_N "checking for MAP_ANON(YMOUS)... $ECHO_C" >&6; } -if test "${ac_cv_decl_map_anon+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -#include -#include -#include - -#ifndef MAP_ANONYMOUS -#define MAP_ANONYMOUS MAP_ANON -#endif - -int -main () -{ -int n = MAP_ANONYMOUS; - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then - ac_cv_decl_map_anon=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_cv_decl_map_anon=no -fi - -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -fi -{ echo "$as_me:$LINENO: result: $ac_cv_decl_map_anon" >&5 -echo "${ECHO_T}$ac_cv_decl_map_anon" >&6; } - - if test $ac_cv_decl_map_anon = no; then - ac_cv_func_mmap_anon=no - else - { echo "$as_me:$LINENO: checking whether mmap with MAP_ANON(YMOUS) works" >&5 -echo $ECHO_N "checking whether mmap with MAP_ANON(YMOUS) works... $ECHO_C" >&6; } -if test "${ac_cv_func_mmap_anon+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - # Add a system to this blacklist if it has mmap() and MAP_ANON or - # MAP_ANONYMOUS, but using mmap(..., MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) - # doesn't give anonymous zeroed pages with the same properties listed - # above for use of /dev/zero. - # Systems known to be in this category are Windows, VMS, and SCO Unix. - case "$host_os" in - vms* | cygwin* | pe | mingw* | sco* | udk* ) - ac_cv_func_mmap_anon=no ;; - *) - ac_cv_func_mmap_anon=yes;; - esac -fi -{ echo "$as_me:$LINENO: result: $ac_cv_func_mmap_anon" >&5 -echo "${ECHO_T}$ac_cv_func_mmap_anon" >&6; } - fi -fi - -if test $ac_cv_func_mmap_file = yes; then - -cat >>confdefs.h <<\_ACEOF -#define HAVE_MMAP_FILE 1 -_ACEOF - -fi -if test $ac_cv_func_mmap_dev_zero = yes; then - -cat >>confdefs.h <<\_ACEOF -#define HAVE_MMAP_DEV_ZERO 1 -_ACEOF - -fi -if test $ac_cv_func_mmap_anon = yes; then - -cat >>confdefs.h <<\_ACEOF -#define HAVE_MMAP_ANON 1 -_ACEOF - -fi - - - if test -d $srcdir/testsuite; then - TESTSUBDIR_TRUE= - TESTSUBDIR_FALSE='#' -else - TESTSUBDIR_TRUE='#' - TESTSUBDIR_FALSE= -fi - - -TARGETDIR="unknown" -case "$host" in - alpha*-*-*) - TARGET=ALPHA; TARGETDIR=alpha; - # Support 128-bit long double, changable via command-line switch. - HAVE_LONG_DOUBLE='defined(__LONG_DOUBLE_128__)' - ;; - - arm*-*-*) - TARGET=ARM; TARGETDIR=arm - ;; - - amd64-*-freebsd*) - TARGET=X86_64; TARGETDIR=x86 - ;; - - cris-*-*) - TARGET=LIBFFI_CRIS; TARGETDIR=cris - ;; - - frv-*-*) - TARGET=FRV; TARGETDIR=frv - ;; - - hppa*-*-linux* | parisc*-*-linux*) - TARGET=PA_LINUX; TARGETDIR=pa - ;; - hppa*64-*-hpux*) - TARGET=PA64_HPUX; TARGETDIR=pa - ;; - hppa*-*-hpux*) - TARGET=PA_HPUX; TARGETDIR=pa - ;; - - i386-*-freebsd* | i386-*-openbsd*) - TARGET=X86_FREEBSD; TARGETDIR=x86 - ;; - i?86-win32* | i?86-*-cygwin* | i?86-*-mingw*) - TARGET=X86_WIN32; TARGETDIR=x86 - ;; - i?86-*-darwin*) - TARGET=X86_DARWIN; TARGETDIR=x86 - ;; - i?86-*-solaris2.1[0-9]*) - TARGET=X86_64; TARGETDIR=x86 - ;; - i*86-*-nto-qnx*) - TARGET=X86; TARGETDIR=x86 - ;; - i?86-*-*) - TARGET=X86; TARGETDIR=x86 - ;; - - ia64*-*-*) - TARGET=IA64; TARGETDIR=ia64 - ;; - - m32r*-*-*) - TARGET=M32R; TARGETDIR=m32r - ;; - - m68k-*-*) - TARGET=M68K; TARGETDIR=m68k - ;; - - mips-sgi-irix5.* | mips-sgi-irix6.*) - TARGET=MIPS_IRIX; TARGETDIR=mips - ;; - mips*-*-linux*) - TARGET=MIPS_LINUX; TARGETDIR=mips - ;; - - powerpc*-*-linux* | powerpc-*-sysv*) - TARGET=POWERPC; TARGETDIR=powerpc - ;; - powerpc-*-beos*) - TARGET=POWERPC; TARGETDIR=powerpc - ;; - powerpc-*-darwin*) - TARGET=POWERPC_DARWIN; TARGETDIR=powerpc - ;; - powerpc-*-aix* | rs6000-*-aix*) - TARGET=POWERPC_AIX; TARGETDIR=powerpc - ;; - powerpc-*-freebsd*) - TARGET=POWERPC_FREEBSD; TARGETDIR=powerpc - ;; - powerpc*-*-rtems*) - TARGET=POWERPC; TARGETDIR=powerpc - ;; - - s390-*-* | s390x-*-*) - TARGET=S390; TARGETDIR=s390 - ;; - - sh-*-* | sh[34]*-*-*) - TARGET=SH; TARGETDIR=sh - ;; - sh64-*-* | sh5*-*-*) - TARGET=SH64; TARGETDIR=sh64 - ;; - - sparc*-*-*) - TARGET=SPARC; TARGETDIR=sparc - ;; - - x86_64-*-darwin*) - TARGET=X86_DARWIN; TARGETDIR=x86 - ;; - x86_64-*-cygwin* | x86_64-*-mingw*) - ;; - x86_64-*-*) - TARGET=X86_64; TARGETDIR=x86 - ;; -esac - - - -if test $TARGETDIR = unknown; then - { { echo "$as_me:$LINENO: error: \"libffi has not been ported to $host.\"" >&5 -echo "$as_me: error: \"libffi has not been ported to $host.\"" >&2;} - { (exit 1); exit 1; }; } -fi - - if expr x$TARGET : 'xMIPS' > /dev/null; then - MIPS_TRUE= - MIPS_FALSE='#' -else - MIPS_TRUE='#' - MIPS_FALSE= -fi - - if test x$TARGET = xSPARC; then - SPARC_TRUE= - SPARC_FALSE='#' -else - SPARC_TRUE='#' - SPARC_FALSE= -fi - - if test x$TARGET = xX86; then - X86_TRUE= - X86_FALSE='#' -else - X86_TRUE='#' - X86_FALSE= -fi - - if test x$TARGET = xX86_FREEBSD; then - X86_FREEBSD_TRUE= - X86_FREEBSD_FALSE='#' -else - X86_FREEBSD_TRUE='#' - X86_FREEBSD_FALSE= -fi - - if test x$TARGET = xX86_WIN32; then - X86_WIN32_TRUE= - X86_WIN32_FALSE='#' -else - X86_WIN32_TRUE='#' - X86_WIN32_FALSE= -fi - - if test x$TARGET = xX86_DARWIN; then - X86_DARWIN_TRUE= - X86_DARWIN_FALSE='#' -else - X86_DARWIN_TRUE='#' - X86_DARWIN_FALSE= -fi - - if test x$TARGET = xALPHA; then - ALPHA_TRUE= - ALPHA_FALSE='#' -else - ALPHA_TRUE='#' - ALPHA_FALSE= -fi - - if test x$TARGET = xIA64; then - IA64_TRUE= - IA64_FALSE='#' -else - IA64_TRUE='#' - IA64_FALSE= -fi - - if test x$TARGET = xM32R; then - M32R_TRUE= - M32R_FALSE='#' -else - M32R_TRUE='#' - M32R_FALSE= -fi - - if test x$TARGET = xM68K; then - M68K_TRUE= - M68K_FALSE='#' -else - M68K_TRUE='#' - M68K_FALSE= -fi - - if test x$TARGET = xPOWERPC; then - POWERPC_TRUE= - POWERPC_FALSE='#' -else - POWERPC_TRUE='#' - POWERPC_FALSE= -fi - - if test x$TARGET = xPOWERPC_AIX; then - POWERPC_AIX_TRUE= - POWERPC_AIX_FALSE='#' -else - POWERPC_AIX_TRUE='#' - POWERPC_AIX_FALSE= -fi - - if test x$TARGET = xPOWERPC_DARWIN; then - POWERPC_DARWIN_TRUE= - POWERPC_DARWIN_FALSE='#' -else - POWERPC_DARWIN_TRUE='#' - POWERPC_DARWIN_FALSE= -fi - - if test x$TARGET = xPOWERPC_FREEBSD; then - POWERPC_FREEBSD_TRUE= - POWERPC_FREEBSD_FALSE='#' -else - POWERPC_FREEBSD_TRUE='#' - POWERPC_FREEBSD_FALSE= -fi - - if test x$TARGET = xARM; then - ARM_TRUE= - ARM_FALSE='#' -else - ARM_TRUE='#' - ARM_FALSE= -fi - - if test x$TARGET = xLIBFFI_CRIS; then - LIBFFI_CRIS_TRUE= - LIBFFI_CRIS_FALSE='#' -else - LIBFFI_CRIS_TRUE='#' - LIBFFI_CRIS_FALSE= -fi - - if test x$TARGET = xFRV; then - FRV_TRUE= - FRV_FALSE='#' -else - FRV_TRUE='#' - FRV_FALSE= -fi - - if test x$TARGET = xS390; then - S390_TRUE= - S390_FALSE='#' -else - S390_TRUE='#' - S390_FALSE= -fi - - if test x$TARGET = xX86_64; then - X86_64_TRUE= - X86_64_FALSE='#' -else - X86_64_TRUE='#' - X86_64_FALSE= -fi - - if test x$TARGET = xSH; then - SH_TRUE= - SH_FALSE='#' -else - SH_TRUE='#' - SH_FALSE= -fi - - if test x$TARGET = xSH64; then - SH64_TRUE= - SH64_FALSE='#' -else - SH64_TRUE='#' - SH64_FALSE= -fi - - if test x$TARGET = xPA_LINUX; then - PA_LINUX_TRUE= - PA_LINUX_FALSE='#' -else - PA_LINUX_TRUE='#' - PA_LINUX_FALSE= -fi - - if test x$TARGET = xPA_HPUX; then - PA_HPUX_TRUE= - PA_HPUX_FALSE='#' -else - PA_HPUX_TRUE='#' - PA_HPUX_FALSE= -fi - - if test x$TARGET = xPA64_HPUX; then - PA64_HPUX_TRUE= - PA64_HPUX_FALSE='#' -else - PA64_HPUX_TRUE='#' - PA64_HPUX_FALSE= -fi - - -{ echo "$as_me:$LINENO: checking for ANSI C header files" >&5 -echo $ECHO_N "checking for ANSI C header files... $ECHO_C" >&6; } -if test "${ac_cv_header_stdc+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -#include -#include -#include -#include - -int -main () -{ - - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then - ac_cv_header_stdc=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_cv_header_stdc=no -fi - -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - -if test $ac_cv_header_stdc = yes; then - # SunOS 4.x string.h does not declare mem*, contrary to ANSI. - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -#include - -_ACEOF -if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | - $EGREP "memchr" >/dev/null 2>&1; then - : -else - ac_cv_header_stdc=no -fi -rm -f conftest* - -fi - -if test $ac_cv_header_stdc = yes; then - # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI. - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -#include - -_ACEOF -if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | - $EGREP "free" >/dev/null 2>&1; then - : +ac_fn_c_check_func "$LINENO" "mmap" "ac_cv_func_mmap" +if test "x$ac_cv_func_mmap" = x""yes; then : + libffi_func_mmap=yes else - ac_cv_header_stdc=no -fi -rm -f conftest* - + libffi_func_mmap=no fi -if test $ac_cv_header_stdc = yes; then - # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi. - if test "$cross_compiling" = yes; then - : +if test "$libffi_header_sys_mman_h" != yes \ + || test "$libffi_func_mmap" != yes; then + ac_cv_func_mmap_file=no + ac_cv_func_mmap_dev_zero=no + ac_cv_func_mmap_anon=no else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -#include -#include -#if ((' ' & 0x0FF) == 0x020) -# define ISLOWER(c) ('a' <= (c) && (c) <= 'z') -# define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c)) -#else -# define ISLOWER(c) \ - (('a' <= (c) && (c) <= 'i') \ - || ('j' <= (c) && (c) <= 'r') \ - || ('s' <= (c) && (c) <= 'z')) -# define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c)) -#endif - -#define XOR(e, f) (((e) && !(f)) || (!(e) && (f))) -int -main () -{ - int i; - for (i = 0; i < 256; i++) - if (XOR (islower (i), ISLOWER (i)) - || toupper (i) != TOUPPER (i)) - return 2; - return 0; -} -_ACEOF -rm -f conftest$ac_exeext -if { (ac_try="$ac_link" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_link") 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { ac_try='./conftest$ac_exeext' - { (case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_try") 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - : + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether read-only mmap of a plain file works" >&5 +$as_echo_n "checking whether read-only mmap of a plain file works... " >&6; } +if test "${ac_cv_func_mmap_file+set}" = set; then : + $as_echo_n "(cached) " >&6 else - echo "$as_me: program exited with status $ac_status" >&5 -echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -( exit $ac_status ) -ac_cv_header_stdc=no -fi -rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext -fi - - -fi -fi -{ echo "$as_me:$LINENO: result: $ac_cv_header_stdc" >&5 -echo "${ECHO_T}$ac_cv_header_stdc" >&6; } -if test $ac_cv_header_stdc = yes; then - -cat >>confdefs.h <<\_ACEOF -#define STDC_HEADERS 1 -_ACEOF - + # Add a system to this blacklist if + # mmap(0, stat_size, PROT_READ, MAP_PRIVATE, fd, 0) doesn't return a + # memory area containing the same data that you'd get if you applied + # read() to the same fd. The only system known to have a problem here + # is VMS, where text files have record structure. + case "$host_os" in + vms* | ultrix*) + ac_cv_func_mmap_file=no ;; + *) + ac_cv_func_mmap_file=yes;; + esac fi - - -for ac_func in memcpy -do -as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh` -{ echo "$as_me:$LINENO: checking for $ac_func" >&5 -echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6; } -if { as_var=$as_ac_var; eval "test \"\${$as_var+set}\" = set"; }; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -/* Define $ac_func to an innocuous variant, in case declares $ac_func. - For example, HP-UX 11i declares gettimeofday. */ -#define $ac_func innocuous_$ac_func - -/* System header to define __stub macros and hopefully few prototypes, - which can conflict with char $ac_func (); below. - Prefer to if __STDC__ is defined, since - exists even on freestanding compilers. */ - -#ifdef __STDC__ -# include -#else -# include -#endif - -#undef $ac_func - -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char $ac_func (); -/* The GNU C library defines this for functions which it implements - to always fail with ENOSYS. Some functions are actually named - something starting with __ and the normal name is an alias. */ -#if defined __stub_$ac_func || defined __stub___$ac_func -choke me -#endif - -int -main () -{ -return $ac_func (); - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext conftest$ac_exeext -if { (ac_try="$ac_link" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_link") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest$ac_exeext && - $as_test_x conftest$ac_exeext; then - eval "$as_ac_var=yes" +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_func_mmap_file" >&5 +$as_echo "$ac_cv_func_mmap_file" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether mmap from /dev/zero works" >&5 +$as_echo_n "checking whether mmap from /dev/zero works... " >&6; } +if test "${ac_cv_func_mmap_dev_zero+set}" = set; then : + $as_echo_n "(cached) " >&6 else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - eval "$as_ac_var=no" -fi - -rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ - conftest$ac_exeext conftest.$ac_ext -fi -ac_res=`eval echo '${'$as_ac_var'}'` - { echo "$as_me:$LINENO: result: $ac_res" >&5 -echo "${ECHO_T}$ac_res" >&6; } -if test `eval echo '${'$as_ac_var'}'` = yes; then - cat >>confdefs.h <<_ACEOF -#define `echo "HAVE_$ac_func" | $as_tr_cpp` 1 -_ACEOF - + # Add a system to this blacklist if it has mmap() but /dev/zero + # does not exist, or if mmapping /dev/zero does not give anonymous + # zeroed pages with both the following properties: + # 1. If you map N consecutive pages in with one call, and then + # unmap any subset of those pages, the pages that were not + # explicitly unmapped remain accessible. + # 2. If you map two adjacent blocks of memory and then unmap them + # both at once, they must both go away. + # Systems known to be in this category are Windows (all variants), + # VMS, and Darwin. + case "$host_os" in + vms* | cygwin* | pe | mingw* | darwin* | ultrix* | hpux10* | hpux11.00) + ac_cv_func_mmap_dev_zero=no ;; + *) + ac_cv_func_mmap_dev_zero=yes;; + esac fi -done +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_func_mmap_dev_zero" >&5 +$as_echo "$ac_cv_func_mmap_dev_zero" >&6; } -# The Ultrix 4.2 mips builtin alloca declared by alloca.h only works -# for constant arguments. Useless! -{ echo "$as_me:$LINENO: checking for working alloca.h" >&5 -echo $ECHO_N "checking for working alloca.h... $ECHO_C" >&6; } -if test "${ac_cv_working_alloca_h+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 + # Unlike /dev/zero, the MAP_ANON(YMOUS) defines can be probed for. + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for MAP_ANON(YMOUS)" >&5 +$as_echo_n "checking for MAP_ANON(YMOUS)... " >&6; } +if test "${ac_cv_decl_map_anon+set}" = set; then : + $as_echo_n "(cached) " >&6 else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ -#include +#include +#include +#include + +#ifndef MAP_ANONYMOUS +#define MAP_ANONYMOUS MAP_ANON +#endif + int main () { -char *p = (char *) alloca (2 * sizeof (int)); - if (p) return 0; +int n = MAP_ANONYMOUS; ; return 0; } _ACEOF -rm -f conftest.$ac_objext conftest$ac_exeext -if { (ac_try="$ac_link" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_link") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest$ac_exeext && - $as_test_x conftest$ac_exeext; then - ac_cv_working_alloca_h=yes +if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_decl_map_anon=yes else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_cv_working_alloca_h=no + ac_cv_decl_map_anon=no fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_decl_map_anon" >&5 +$as_echo "$ac_cv_decl_map_anon" >&6; } -rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ - conftest$ac_exeext conftest.$ac_ext + if test $ac_cv_decl_map_anon = no; then + ac_cv_func_mmap_anon=no + else + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether mmap with MAP_ANON(YMOUS) works" >&5 +$as_echo_n "checking whether mmap with MAP_ANON(YMOUS) works... " >&6; } +if test "${ac_cv_func_mmap_anon+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + # Add a system to this blacklist if it has mmap() and MAP_ANON or + # MAP_ANONYMOUS, but using mmap(..., MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) + # doesn't give anonymous zeroed pages with the same properties listed + # above for use of /dev/zero. + # Systems known to be in this category are Windows, VMS, and SCO Unix. + case "$host_os" in + vms* | cygwin* | pe | mingw* | sco* | udk* ) + ac_cv_func_mmap_anon=no ;; + *) + ac_cv_func_mmap_anon=yes;; + esac +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_func_mmap_anon" >&5 +$as_echo "$ac_cv_func_mmap_anon" >&6; } + fi fi -{ echo "$as_me:$LINENO: result: $ac_cv_working_alloca_h" >&5 -echo "${ECHO_T}$ac_cv_working_alloca_h" >&6; } -if test $ac_cv_working_alloca_h = yes; then -cat >>confdefs.h <<\_ACEOF -#define HAVE_ALLOCA_H 1 -_ACEOF +if test $ac_cv_func_mmap_file = yes; then + +$as_echo "#define HAVE_MMAP_FILE 1" >>confdefs.h fi +if test $ac_cv_func_mmap_dev_zero = yes; then -{ echo "$as_me:$LINENO: checking for alloca" >&5 -echo $ECHO_N "checking for alloca... $ECHO_C" >&6; } -if test "${ac_cv_func_alloca_works+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -#ifdef __GNUC__ -# define alloca __builtin_alloca -#else -# ifdef _MSC_VER -# include -# define alloca _alloca -# else -# ifdef HAVE_ALLOCA_H -# include -# else -# ifdef _AIX - #pragma alloca -# else -# ifndef alloca /* predefined by HP cc +Olibcalls */ -char *alloca (); -# endif -# endif -# endif -# endif -#endif +$as_echo "#define HAVE_MMAP_DEV_ZERO 1" >>confdefs.h -int -main () -{ -char *p = (char *) alloca (1); - if (p) return 0; - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext conftest$ac_exeext -if { (ac_try="$ac_link" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_link") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest$ac_exeext && - $as_test_x conftest$ac_exeext; then - ac_cv_func_alloca_works=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 +fi +if test $ac_cv_func_mmap_anon = yes; then + +$as_echo "#define HAVE_MMAP_ANON 1" >>confdefs.h - ac_cv_func_alloca_works=no fi -rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ - conftest$ac_exeext conftest.$ac_ext + + if test -d $srcdir/testsuite; then + TESTSUBDIR_TRUE= + TESTSUBDIR_FALSE='#' +else + TESTSUBDIR_TRUE='#' + TESTSUBDIR_FALSE= fi -{ echo "$as_me:$LINENO: result: $ac_cv_func_alloca_works" >&5 -echo "${ECHO_T}$ac_cv_func_alloca_works" >&6; } -if test $ac_cv_func_alloca_works = yes; then -cat >>confdefs.h <<\_ACEOF -#define HAVE_ALLOCA 1 -_ACEOF +TARGETDIR="unknown" +case "$host" in + alpha*-*-*) + TARGET=ALPHA; TARGETDIR=alpha; + # Support 128-bit long double, changable via command-line switch. + HAVE_LONG_DOUBLE='defined(__LONG_DOUBLE_128__)' + ;; -else - # The SVR3 libPW and SVR4 libucb both contain incompatible functions -# that cause trouble. Some versions do not even contain alloca or -# contain a buggy version. If you still want to use their alloca, -# use ar to extract alloca.o from them instead of compiling alloca.c. + arm*-*-*) + TARGET=ARM; TARGETDIR=arm + ;; -ALLOCA=\${LIBOBJDIR}alloca.$ac_objext + amd64-*-freebsd* | amd64-*-openbsd*) + TARGET=X86_64; TARGETDIR=x86 + ;; -cat >>confdefs.h <<\_ACEOF -#define C_ALLOCA 1 -_ACEOF + avr32*-*-*) + TARGET=AVR32; TARGETDIR=avr32 + ;; + cris-*-*) + TARGET=LIBFFI_CRIS; TARGETDIR=cris + ;; -{ echo "$as_me:$LINENO: checking whether \`alloca.c' needs Cray hooks" >&5 -echo $ECHO_N "checking whether \`alloca.c' needs Cray hooks... $ECHO_C" >&6; } -if test "${ac_cv_os_cray+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -#if defined CRAY && ! defined CRAY2 -webecray -#else -wenotbecray -#endif + frv-*-*) + TARGET=FRV; TARGETDIR=frv + ;; -_ACEOF -if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | - $EGREP "webecray" >/dev/null 2>&1; then - ac_cv_os_cray=yes -else - ac_cv_os_cray=no -fi -rm -f conftest* + hppa*-*-linux* | parisc*-*-linux*) + TARGET=PA_LINUX; TARGETDIR=pa + ;; + hppa*64-*-hpux*) + TARGET=PA64_HPUX; TARGETDIR=pa + ;; + hppa*-*-hpux*) + TARGET=PA_HPUX; TARGETDIR=pa + ;; -fi -{ echo "$as_me:$LINENO: result: $ac_cv_os_cray" >&5 -echo "${ECHO_T}$ac_cv_os_cray" >&6; } -if test $ac_cv_os_cray = yes; then - for ac_func in _getb67 GETB67 getb67; do - as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh` -{ echo "$as_me:$LINENO: checking for $ac_func" >&5 -echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6; } -if { as_var=$as_ac_var; eval "test \"\${$as_var+set}\" = set"; }; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -/* Define $ac_func to an innocuous variant, in case declares $ac_func. - For example, HP-UX 11i declares gettimeofday. */ -#define $ac_func innocuous_$ac_func + i?86-*-freebsd* | i?86-*-openbsd*) + TARGET=X86_FREEBSD; TARGETDIR=x86 + ;; + i?86-win32* | i?86-*-cygwin* | i?86-*-mingw*) + TARGET=X86_WIN32; TARGETDIR=x86 + # All mingw/cygwin/win32 builds require this for sharedlib + AM_LTLDFLAGS="-no-undefined" + ;; + i?86-*-darwin*) + TARGET=X86_DARWIN; TARGETDIR=x86 + ;; + i?86-*-solaris2.1[0-9]*) + TARGET=X86_64; TARGETDIR=x86 + ;; + i*86-*-nto-qnx*) + TARGET=X86; TARGETDIR=x86 + ;; + i?86-*-*) + TARGET=X86; TARGETDIR=x86 + ;; -/* System header to define __stub macros and hopefully few prototypes, - which can conflict with char $ac_func (); below. - Prefer to if __STDC__ is defined, since - exists even on freestanding compilers. */ + ia64*-*-*) + TARGET=IA64; TARGETDIR=ia64 + ;; -#ifdef __STDC__ -# include -#else -# include -#endif + m32r*-*-*) + TARGET=M32R; TARGETDIR=m32r + ;; + + m68k-*-*) + TARGET=M68K; TARGETDIR=m68k + ;; -#undef $ac_func + mips-sgi-irix5.* | mips-sgi-irix6.*) + TARGET=MIPS_IRIX; TARGETDIR=mips + ;; + mips*-*-linux*) + # Support 128-bit long double for NewABI. + HAVE_LONG_DOUBLE='defined(__mips64)' + TARGET=MIPS_IRIX; TARGETDIR=mips + ;; -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char $ac_func (); -/* The GNU C library defines this for functions which it implements - to always fail with ENOSYS. Some functions are actually named - something starting with __ and the normal name is an alias. */ -#if defined __stub_$ac_func || defined __stub___$ac_func -choke me -#endif + powerpc*-*-linux* | powerpc-*-sysv*) + TARGET=POWERPC; TARGETDIR=powerpc + ;; + powerpc-*-beos*) + TARGET=POWERPC; TARGETDIR=powerpc + ;; + powerpc-*-darwin*) + TARGET=POWERPC_DARWIN; TARGETDIR=powerpc + ;; + powerpc-*-aix* | rs6000-*-aix*) + TARGET=POWERPC_AIX; TARGETDIR=powerpc + ;; + powerpc-*-freebsd*) + TARGET=POWERPC_FREEBSD; TARGETDIR=powerpc + ;; + powerpc*-*-rtems*) + TARGET=POWERPC; TARGETDIR=powerpc + ;; -int -main () -{ -return $ac_func (); - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext conftest$ac_exeext -if { (ac_try="$ac_link" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; + s390-*-* | s390x-*-*) + TARGET=S390; TARGETDIR=s390 + ;; + + sh-*-* | sh[34]*-*-*) + TARGET=SH; TARGETDIR=sh + ;; + sh64-*-* | sh5*-*-*) + TARGET=SH64; TARGETDIR=sh64 + ;; + + sparc*-*-*) + TARGET=SPARC; TARGETDIR=sparc + ;; + + x86_64-*-darwin*) + TARGET=X86_DARWIN; TARGETDIR=x86 + ;; + + x86_64-*-cygwin* | x86_64-*-mingw*) + TARGET=X86_WIN64; TARGETDIR=x86 + ;; + + x86_64-*-*) + TARGET=X86_64; TARGETDIR=x86 + ;; esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_link") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest$ac_exeext && - $as_test_x conftest$ac_exeext; then - eval "$as_ac_var=yes" -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - eval "$as_ac_var=no" -fi -rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ - conftest$ac_exeext conftest.$ac_ext -fi -ac_res=`eval echo '${'$as_ac_var'}'` - { echo "$as_me:$LINENO: result: $ac_res" >&5 -echo "${ECHO_T}$ac_res" >&6; } -if test `eval echo '${'$as_ac_var'}'` = yes; then -cat >>confdefs.h <<_ACEOF -#define CRAY_STACKSEG_END $ac_func -_ACEOF - break +if test $TARGETDIR = unknown; then + as_fn_error "\"libffi has not been ported to $host.\"" "$LINENO" 5 fi - done + if expr x$TARGET : 'xMIPS' > /dev/null; then + MIPS_TRUE= + MIPS_FALSE='#' +else + MIPS_TRUE='#' + MIPS_FALSE= fi -{ echo "$as_me:$LINENO: checking stack direction for C alloca" >&5 -echo $ECHO_N "checking stack direction for C alloca... $ECHO_C" >&6; } -if test "${ac_cv_c_stack_direction+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - if test "$cross_compiling" = yes; then - ac_cv_c_stack_direction=0 + if test x$TARGET = xSPARC; then + SPARC_TRUE= + SPARC_FALSE='#' else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default -int -find_stack_direction () -{ - static char *addr = 0; - auto char dummy; - if (addr == 0) - { - addr = &dummy; - return find_stack_direction (); - } - else - return (&dummy > addr) ? 1 : -1; -} + SPARC_TRUE='#' + SPARC_FALSE= +fi -int -main () -{ - return find_stack_direction () < 0; -} -_ACEOF -rm -f conftest$ac_exeext -if { (ac_try="$ac_link" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_link") 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { ac_try='./conftest$ac_exeext' - { (case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_try") 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_cv_c_stack_direction=1 + if test x$TARGET = xX86; then + X86_TRUE= + X86_FALSE='#' else - echo "$as_me: program exited with status $ac_status" >&5 -echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -( exit $ac_status ) -ac_cv_c_stack_direction=-1 -fi -rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext + X86_TRUE='#' + X86_FALSE= fi - + if test x$TARGET = xX86_FREEBSD; then + X86_FREEBSD_TRUE= + X86_FREEBSD_FALSE='#' +else + X86_FREEBSD_TRUE='#' + X86_FREEBSD_FALSE= fi -{ echo "$as_me:$LINENO: result: $ac_cv_c_stack_direction" >&5 -echo "${ECHO_T}$ac_cv_c_stack_direction" >&6; } - -cat >>confdefs.h <<_ACEOF -#define STACK_DIRECTION $ac_cv_c_stack_direction -_ACEOF - + if test x$TARGET = xX86_WIN32; then + X86_WIN32_TRUE= + X86_WIN32_FALSE='#' +else + X86_WIN32_TRUE='#' + X86_WIN32_FALSE= fi - -{ echo "$as_me:$LINENO: checking for double" >&5 -echo $ECHO_N "checking for double... $ECHO_C" >&6; } -if test "${ac_cv_type_double+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 + if test x$TARGET = xX86_WIN64; then + X86_WIN64_TRUE= + X86_WIN64_FALSE='#' else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default -typedef double ac__type_new_; -int -main () -{ -if ((ac__type_new_ *) 0) - return 0; -if (sizeof (ac__type_new_)) - return 0; - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then - ac_cv_type_double=yes + X86_WIN64_TRUE='#' + X86_WIN64_FALSE= +fi + + if test x$TARGET = xX86_DARWIN; then + X86_DARWIN_TRUE= + X86_DARWIN_FALSE='#' else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 + X86_DARWIN_TRUE='#' + X86_DARWIN_FALSE= +fi - ac_cv_type_double=no + if test x$TARGET = xALPHA; then + ALPHA_TRUE= + ALPHA_FALSE='#' +else + ALPHA_TRUE='#' + ALPHA_FALSE= fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + if test x$TARGET = xIA64; then + IA64_TRUE= + IA64_FALSE='#' +else + IA64_TRUE='#' + IA64_FALSE= fi -{ echo "$as_me:$LINENO: result: $ac_cv_type_double" >&5 -echo "${ECHO_T}$ac_cv_type_double" >&6; } -# The cast to long int works around a bug in the HP C Compiler -# version HP92453-01 B.11.11.23709.GP, which incorrectly rejects -# declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'. -# This bug is HP SR number 8606223364. -{ echo "$as_me:$LINENO: checking size of double" >&5 -echo $ECHO_N "checking size of double... $ECHO_C" >&6; } -if test "${ac_cv_sizeof_double+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 + if test x$TARGET = xM32R; then + M32R_TRUE= + M32R_FALSE='#' else - if test "$cross_compiling" = yes; then - # Depending upon the size, compute the lo and hi bounds. -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default - typedef double ac__type_sizeof_; -int -main () -{ -static int test_array [1 - 2 * !(((long int) (sizeof (ac__type_sizeof_))) >= 0)]; -test_array [0] = 0 + M32R_TRUE='#' + M32R_FALSE= +fi - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then - ac_lo=0 ac_mid=0 - while :; do - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default - typedef double ac__type_sizeof_; -int -main () -{ -static int test_array [1 - 2 * !(((long int) (sizeof (ac__type_sizeof_))) <= $ac_mid)]; -test_array [0] = 0 + if test x$TARGET = xM68K; then + M68K_TRUE= + M68K_FALSE='#' +else + M68K_TRUE='#' + M68K_FALSE= +fi - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then - ac_hi=$ac_mid; break + if test x$TARGET = xPOWERPC; then + POWERPC_TRUE= + POWERPC_FALSE='#' else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 + POWERPC_TRUE='#' + POWERPC_FALSE= +fi - ac_lo=`expr $ac_mid + 1` - if test $ac_lo -le $ac_mid; then - ac_lo= ac_hi= - break - fi - ac_mid=`expr 2 '*' $ac_mid + 1` + if test x$TARGET = xPOWERPC_AIX; then + POWERPC_AIX_TRUE= + POWERPC_AIX_FALSE='#' +else + POWERPC_AIX_TRUE='#' + POWERPC_AIX_FALSE= fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - done + if test x$TARGET = xPOWERPC_DARWIN; then + POWERPC_DARWIN_TRUE= + POWERPC_DARWIN_FALSE='#' else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 + POWERPC_DARWIN_TRUE='#' + POWERPC_DARWIN_FALSE= +fi - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default - typedef double ac__type_sizeof_; -int -main () -{ -static int test_array [1 - 2 * !(((long int) (sizeof (ac__type_sizeof_))) < 0)]; -test_array [0] = 0 + if test x$TARGET = xPOWERPC_FREEBSD; then + POWERPC_FREEBSD_TRUE= + POWERPC_FREEBSD_FALSE='#' +else + POWERPC_FREEBSD_TRUE='#' + POWERPC_FREEBSD_FALSE= +fi - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then - ac_hi=-1 ac_mid=-1 - while :; do - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default - typedef double ac__type_sizeof_; -int -main () -{ -static int test_array [1 - 2 * !(((long int) (sizeof (ac__type_sizeof_))) >= $ac_mid)]; -test_array [0] = 0 + if test x$TARGET = xARM; then + ARM_TRUE= + ARM_FALSE='#' +else + ARM_TRUE='#' + ARM_FALSE= +fi - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then - ac_lo=$ac_mid; break + if test x$TARGET = xAVR32; then + AVR32_TRUE= + AVR32_FALSE='#' else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 + AVR32_TRUE='#' + AVR32_FALSE= +fi - ac_hi=`expr '(' $ac_mid ')' - 1` - if test $ac_mid -le $ac_hi; then - ac_lo= ac_hi= - break - fi - ac_mid=`expr 2 '*' $ac_mid` + if test x$TARGET = xLIBFFI_CRIS; then + LIBFFI_CRIS_TRUE= + LIBFFI_CRIS_FALSE='#' +else + LIBFFI_CRIS_TRUE='#' + LIBFFI_CRIS_FALSE= fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - done + if test x$TARGET = xFRV; then + FRV_TRUE= + FRV_FALSE='#' else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 + FRV_TRUE='#' + FRV_FALSE= +fi - ac_lo= ac_hi= + if test x$TARGET = xS390; then + S390_TRUE= + S390_FALSE='#' +else + S390_TRUE='#' + S390_FALSE= fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + if test x$TARGET = xX86_64; then + X86_64_TRUE= + X86_64_FALSE='#' +else + X86_64_TRUE='#' + X86_64_FALSE= fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -# Binary search between lo and hi bounds. -while test "x$ac_lo" != "x$ac_hi"; do - ac_mid=`expr '(' $ac_hi - $ac_lo ')' / 2 + $ac_lo` - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default - typedef double ac__type_sizeof_; -int -main () -{ -static int test_array [1 - 2 * !(((long int) (sizeof (ac__type_sizeof_))) <= $ac_mid)]; -test_array [0] = 0 + if test x$TARGET = xSH; then + SH_TRUE= + SH_FALSE='#' +else + SH_TRUE='#' + SH_FALSE= +fi - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then - ac_hi=$ac_mid + if test x$TARGET = xSH64; then + SH64_TRUE= + SH64_FALSE='#' else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 + SH64_TRUE='#' + SH64_FALSE= +fi - ac_lo=`expr '(' $ac_mid ')' + 1` + if test x$TARGET = xPA_LINUX; then + PA_LINUX_TRUE= + PA_LINUX_FALSE='#' +else + PA_LINUX_TRUE='#' + PA_LINUX_FALSE= fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -done -case $ac_lo in -?*) ac_cv_sizeof_double=$ac_lo;; -'') if test "$ac_cv_type_double" = yes; then - { { echo "$as_me:$LINENO: error: cannot compute sizeof (double) -See \`config.log' for more details." >&5 -echo "$as_me: error: cannot compute sizeof (double) -See \`config.log' for more details." >&2;} - { (exit 77); exit 77; }; } - else - ac_cv_sizeof_double=0 - fi ;; -esac + if test x$TARGET = xPA_HPUX; then + PA_HPUX_TRUE= + PA_HPUX_FALSE='#' else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF + PA_HPUX_TRUE='#' + PA_HPUX_FALSE= +fi + + if test x$TARGET = xPA64_HPUX; then + PA64_HPUX_TRUE= + PA64_HPUX_FALSE='#' +else + PA64_HPUX_TRUE='#' + PA64_HPUX_FALSE= +fi + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for ANSI C header files" >&5 +$as_echo_n "checking for ANSI C header files... " >&6; } +if test "${ac_cv_header_stdc+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ -$ac_includes_default - typedef double ac__type_sizeof_; -static long int longval () { return (long int) (sizeof (ac__type_sizeof_)); } -static unsigned long int ulongval () { return (long int) (sizeof (ac__type_sizeof_)); } -#include #include +#include +#include +#include + int main () { - FILE *f = fopen ("conftest.val", "w"); - if (! f) - return 1; - if (((long int) (sizeof (ac__type_sizeof_))) < 0) - { - long int i = longval (); - if (i != ((long int) (sizeof (ac__type_sizeof_)))) - return 1; - fprintf (f, "%ld\n", i); - } - else - { - unsigned long int i = ulongval (); - if (i != ((long int) (sizeof (ac__type_sizeof_)))) - return 1; - fprintf (f, "%lu\n", i); - } - return ferror (f) || fclose (f) != 0; - ; return 0; } _ACEOF -rm -f conftest$ac_exeext -if { (ac_try="$ac_link" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_link") 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { ac_try='./conftest$ac_exeext' - { (case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_try") 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_cv_sizeof_double=`cat conftest.val` +if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_header_stdc=yes else - echo "$as_me: program exited with status $ac_status" >&5 -echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -( exit $ac_status ) -if test "$ac_cv_type_double" = yes; then - { { echo "$as_me:$LINENO: error: cannot compute sizeof (double) -See \`config.log' for more details." >&5 -echo "$as_me: error: cannot compute sizeof (double) -See \`config.log' for more details." >&2;} - { (exit 77); exit 77; }; } - else - ac_cv_sizeof_double=0 - fi -fi -rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext + ac_cv_header_stdc=no fi -rm -f conftest.val +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + +if test $ac_cv_header_stdc = yes; then + # SunOS 4.x string.h does not declare mem*, contrary to ANSI. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include + +_ACEOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP "memchr" >/dev/null 2>&1; then : + +else + ac_cv_header_stdc=no fi -{ echo "$as_me:$LINENO: result: $ac_cv_sizeof_double" >&5 -echo "${ECHO_T}$ac_cv_sizeof_double" >&6; } +rm -f conftest* +fi +if test $ac_cv_header_stdc = yes; then + # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include -cat >>confdefs.h <<_ACEOF -#define SIZEOF_DOUBLE $ac_cv_sizeof_double _ACEOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP "free" >/dev/null 2>&1; then : + +else + ac_cv_header_stdc=no +fi +rm -f conftest* +fi -{ echo "$as_me:$LINENO: checking for long double" >&5 -echo $ECHO_N "checking for long double... $ECHO_C" >&6; } -if test "${ac_cv_type_long_double+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 +if test $ac_cv_header_stdc = yes; then + # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi. + if test "$cross_compiling" = yes; then : + : else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ -$ac_includes_default -typedef long double ac__type_new_; +#include +#include +#if ((' ' & 0x0FF) == 0x020) +# define ISLOWER(c) ('a' <= (c) && (c) <= 'z') +# define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c)) +#else +# define ISLOWER(c) \ + (('a' <= (c) && (c) <= 'i') \ + || ('j' <= (c) && (c) <= 'r') \ + || ('s' <= (c) && (c) <= 'z')) +# define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c)) +#endif + +#define XOR(e, f) (((e) && !(f)) || (!(e) && (f))) int main () { -if ((ac__type_new_ *) 0) - return 0; -if (sizeof (ac__type_new_)) - return 0; - ; + int i; + for (i = 0; i < 256; i++) + if (XOR (islower (i), ISLOWER (i)) + || toupper (i) != TOUPPER (i)) + return 2; return 0; } _ACEOF -rm -f conftest.$ac_objext -if { (ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then - ac_cv_type_long_double=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 +if ac_fn_c_try_run "$LINENO"; then : - ac_cv_type_long_double=no +else + ac_cv_header_stdc=no +fi +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest.beam conftest.$ac_ext fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi -{ echo "$as_me:$LINENO: result: $ac_cv_type_long_double" >&5 -echo "${ECHO_T}$ac_cv_type_long_double" >&6; } +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_stdc" >&5 +$as_echo "$ac_cv_header_stdc" >&6; } +if test $ac_cv_header_stdc = yes; then -# The cast to long int works around a bug in the HP C Compiler -# version HP92453-01 B.11.11.23709.GP, which incorrectly rejects -# declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'. -# This bug is HP SR number 8606223364. -{ echo "$as_me:$LINENO: checking size of long double" >&5 -echo $ECHO_N "checking size of long double... $ECHO_C" >&6; } -if test "${ac_cv_sizeof_long_double+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - if test "$cross_compiling" = yes; then - # Depending upon the size, compute the lo and hi bounds. -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default - typedef long double ac__type_sizeof_; -int -main () -{ -static int test_array [1 - 2 * !(((long int) (sizeof (ac__type_sizeof_))) >= 0)]; -test_array [0] = 0 +$as_echo "#define STDC_HEADERS 1" >>confdefs.h - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then - ac_lo=0 ac_mid=0 - while :; do - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ +fi + +for ac_func in memcpy +do : + ac_fn_c_check_func "$LINENO" "memcpy" "ac_cv_func_memcpy" +if test "x$ac_cv_func_memcpy" = x""yes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE_MEMCPY 1 _ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF + +fi +done + +# The Ultrix 4.2 mips builtin alloca declared by alloca.h only works +# for constant arguments. Useless! +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for working alloca.h" >&5 +$as_echo_n "checking for working alloca.h... " >&6; } +if test "${ac_cv_working_alloca_h+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ -$ac_includes_default - typedef long double ac__type_sizeof_; +#include int main () { -static int test_array [1 - 2 * !(((long int) (sizeof (ac__type_sizeof_))) <= $ac_mid)]; -test_array [0] = 0 - +char *p = (char *) alloca (2 * sizeof (int)); + if (p) return 0; ; return 0; } _ACEOF -rm -f conftest.$ac_objext -if { (ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then - ac_hi=$ac_mid; break +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_working_alloca_h=yes else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 + ac_cv_working_alloca_h=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_working_alloca_h" >&5 +$as_echo "$ac_cv_working_alloca_h" >&6; } +if test $ac_cv_working_alloca_h = yes; then + +$as_echo "#define HAVE_ALLOCA_H 1" >>confdefs.h - ac_lo=`expr $ac_mid + 1` - if test $ac_lo -le $ac_mid; then - ac_lo= ac_hi= - break - fi - ac_mid=`expr 2 '*' $ac_mid + 1` fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - done +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for alloca" >&5 +$as_echo_n "checking for alloca... " >&6; } +if test "${ac_cv_func_alloca_works+set}" = set; then : + $as_echo_n "(cached) " >&6 else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ -$ac_includes_default - typedef long double ac__type_sizeof_; -int -main () -{ -static int test_array [1 - 2 * !(((long int) (sizeof (ac__type_sizeof_))) < 0)]; -test_array [0] = 0 +#ifdef __GNUC__ +# define alloca __builtin_alloca +#else +# ifdef _MSC_VER +# include +# define alloca _alloca +# else +# ifdef HAVE_ALLOCA_H +# include +# else +# ifdef _AIX + #pragma alloca +# else +# ifndef alloca /* predefined by HP cc +Olibcalls */ +char *alloca (); +# endif +# endif +# endif +# endif +#endif - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then - ac_hi=-1 ac_mid=-1 - while :; do - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default - typedef long double ac__type_sizeof_; int main () { -static int test_array [1 - 2 * !(((long int) (sizeof (ac__type_sizeof_))) >= $ac_mid)]; -test_array [0] = 0 - +char *p = (char *) alloca (1); + if (p) return 0; ; return 0; } _ACEOF -rm -f conftest.$ac_objext -if { (ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then - ac_lo=$ac_mid; break +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_func_alloca_works=yes else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_hi=`expr '(' $ac_mid ')' - 1` - if test $ac_mid -le $ac_hi; then - ac_lo= ac_hi= - break - fi - ac_mid=`expr 2 '*' $ac_mid` + ac_cv_func_alloca_works=no fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_func_alloca_works" >&5 +$as_echo "$ac_cv_func_alloca_works" >&6; } + +if test $ac_cv_func_alloca_works = yes; then + +$as_echo "#define HAVE_ALLOCA 1" >>confdefs.h -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - done else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 + # The SVR3 libPW and SVR4 libucb both contain incompatible functions +# that cause trouble. Some versions do not even contain alloca or +# contain a buggy version. If you still want to use their alloca, +# use ar to extract alloca.o from them instead of compiling alloca.c. - ac_lo= ac_hi= -fi +ALLOCA=\${LIBOBJDIR}alloca.$ac_objext -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -fi +$as_echo "#define C_ALLOCA 1" >>confdefs.h -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -# Binary search between lo and hi bounds. -while test "x$ac_lo" != "x$ac_hi"; do - ac_mid=`expr '(' $ac_hi - $ac_lo ')' / 2 + $ac_lo` - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether \`alloca.c' needs Cray hooks" >&5 +$as_echo_n "checking whether \`alloca.c' needs Cray hooks... " >&6; } +if test "${ac_cv_os_cray+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ -$ac_includes_default - typedef long double ac__type_sizeof_; -int -main () -{ -static int test_array [1 - 2 * !(((long int) (sizeof (ac__type_sizeof_))) <= $ac_mid)]; -test_array [0] = 0 +#if defined CRAY && ! defined CRAY2 +webecray +#else +wenotbecray +#endif - ; - return 0; -} _ACEOF -rm -f conftest.$ac_objext -if { (ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then - ac_hi=$ac_mid +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP "webecray" >/dev/null 2>&1; then : + ac_cv_os_cray=yes else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 + ac_cv_os_cray=no +fi +rm -f conftest* - ac_lo=`expr '(' $ac_mid ')' + 1` fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_os_cray" >&5 +$as_echo "$ac_cv_os_cray" >&6; } +if test $ac_cv_os_cray = yes; then + for ac_func in _getb67 GETB67 getb67; do + as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh` +ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var" +eval as_val=\$$as_ac_var + if test "x$as_val" = x""yes; then : -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -done -case $ac_lo in -?*) ac_cv_sizeof_long_double=$ac_lo;; -'') if test "$ac_cv_type_long_double" = yes; then - { { echo "$as_me:$LINENO: error: cannot compute sizeof (long double) -See \`config.log' for more details." >&5 -echo "$as_me: error: cannot compute sizeof (long double) -See \`config.log' for more details." >&2;} - { (exit 77); exit 77; }; } - else - ac_cv_sizeof_long_double=0 - fi ;; -esac -else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ +cat >>confdefs.h <<_ACEOF +#define CRAY_STACKSEG_END $ac_func _ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF + + break +fi + + done +fi + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking stack direction for C alloca" >&5 +$as_echo_n "checking stack direction for C alloca... " >&6; } +if test "${ac_cv_c_stack_direction+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test "$cross_compiling" = yes; then : + ac_cv_c_stack_direction=0 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $ac_includes_default - typedef long double ac__type_sizeof_; -static long int longval () { return (long int) (sizeof (ac__type_sizeof_)); } -static unsigned long int ulongval () { return (long int) (sizeof (ac__type_sizeof_)); } -#include -#include int -main () +find_stack_direction () { - - FILE *f = fopen ("conftest.val", "w"); - if (! f) - return 1; - if (((long int) (sizeof (ac__type_sizeof_))) < 0) + static char *addr = 0; + auto char dummy; + if (addr == 0) { - long int i = longval (); - if (i != ((long int) (sizeof (ac__type_sizeof_)))) - return 1; - fprintf (f, "%ld\n", i); + addr = &dummy; + return find_stack_direction (); } else - { - unsigned long int i = ulongval (); - if (i != ((long int) (sizeof (ac__type_sizeof_)))) - return 1; - fprintf (f, "%lu\n", i); - } - return ferror (f) || fclose (f) != 0; + return (&dummy > addr) ? 1 : -1; +} - ; - return 0; +int +main () +{ + return find_stack_direction () < 0; } _ACEOF -rm -f conftest$ac_exeext -if { (ac_try="$ac_link" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_link") 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { ac_try='./conftest$ac_exeext' - { (case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_try") 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_cv_sizeof_long_double=`cat conftest.val` +if ac_fn_c_try_run "$LINENO"; then : + ac_cv_c_stack_direction=1 else - echo "$as_me: program exited with status $ac_status" >&5 -echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 + ac_cv_c_stack_direction=-1 +fi +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest.beam conftest.$ac_ext +fi + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_stack_direction" >&5 +$as_echo "$ac_cv_c_stack_direction" >&6; } +cat >>confdefs.h <<_ACEOF +#define STACK_DIRECTION $ac_cv_c_stack_direction +_ACEOF + + +fi + -( exit $ac_status ) -if test "$ac_cv_type_long_double" = yes; then - { { echo "$as_me:$LINENO: error: cannot compute sizeof (long double) -See \`config.log' for more details." >&5 -echo "$as_me: error: cannot compute sizeof (long double) -See \`config.log' for more details." >&2;} - { (exit 77); exit 77; }; } +# The cast to long int works around a bug in the HP C Compiler +# version HP92453-01 B.11.11.23709.GP, which incorrectly rejects +# declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'. +# This bug is HP SR number 8606223364. +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking size of double" >&5 +$as_echo_n "checking size of double... " >&6; } +if test "${ac_cv_sizeof_double+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (double))" "ac_cv_sizeof_double" "$ac_includes_default"; then : + +else + if test "$ac_cv_type_double" = yes; then + { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +{ as_fn_set_status 77 +as_fn_error "cannot compute sizeof (double) +See \`config.log' for more details." "$LINENO" 5; }; } else - ac_cv_sizeof_long_double=0 + ac_cv_sizeof_double=0 fi fi -rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext + fi -rm -f conftest.val +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_double" >&5 +$as_echo "$ac_cv_sizeof_double" >&6; } + + + +cat >>confdefs.h <<_ACEOF +#define SIZEOF_DOUBLE $ac_cv_sizeof_double +_ACEOF + + +# The cast to long int works around a bug in the HP C Compiler +# version HP92453-01 B.11.11.23709.GP, which incorrectly rejects +# declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'. +# This bug is HP SR number 8606223364. +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking size of long double" >&5 +$as_echo_n "checking size of long double... " >&6; } +if test "${ac_cv_sizeof_long_double+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (long double))" "ac_cv_sizeof_long_double" "$ac_includes_default"; then : + +else + if test "$ac_cv_type_long_double" = yes; then + { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +{ as_fn_set_status 77 +as_fn_error "cannot compute sizeof (long double) +See \`config.log' for more details." "$LINENO" 5; }; } + else + ac_cv_sizeof_long_double=0 + fi +fi + fi -{ echo "$as_me:$LINENO: result: $ac_cv_sizeof_long_double" >&5 -echo "${ECHO_T}$ac_cv_sizeof_long_double" >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_long_double" >&5 +$as_echo "$ac_cv_sizeof_long_double" >&6; } @@ -22123,264 +5582,246 @@ if test $ac_cv_sizeof_long_double != 0; then HAVE_LONG_DOUBLE=1 -cat >>confdefs.h <<\_ACEOF -#define HAVE_LONG_DOUBLE 1 -_ACEOF +$as_echo "#define HAVE_LONG_DOUBLE 1" >>confdefs.h fi fi fi -{ echo "$as_me:$LINENO: checking whether byte ordering is bigendian" >&5 -echo $ECHO_N "checking whether byte ordering is bigendian... $ECHO_C" >&6; } -if test "${ac_cv_c_bigendian+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - # See if sys/param.h defines the BYTE_ORDER macro. -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether byte ordering is bigendian" >&5 +$as_echo_n "checking whether byte ordering is bigendian... " >&6; } +if test "${ac_cv_c_bigendian+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + ac_cv_c_bigendian=unknown + # See if we're dealing with a universal compiler. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#ifndef __APPLE_CC__ + not a universal capable compiler + #endif + typedef int dummy; + +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + + # Check for potential -arch flags. It is not universal unless + # there are at least two -arch flags with different values. + ac_arch= + ac_prev= + for ac_word in $CC $CFLAGS $CPPFLAGS $LDFLAGS; do + if test -n "$ac_prev"; then + case $ac_word in + i?86 | x86_64 | ppc | ppc64) + if test -z "$ac_arch" || test "$ac_arch" = "$ac_word"; then + ac_arch=$ac_word + else + ac_cv_c_bigendian=universal + break + fi + ;; + esac + ac_prev= + elif test "x$ac_word" = "x-arch"; then + ac_prev=arch + fi + done +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + if test $ac_cv_c_bigendian = unknown; then + # See if sys/param.h defines the BYTE_ORDER macro. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include -#include + #include int main () { -#if ! (defined BYTE_ORDER && defined BIG_ENDIAN && defined LITTLE_ENDIAN \ - && BYTE_ORDER && BIG_ENDIAN && LITTLE_ENDIAN) - bogus endian macros -#endif +#if ! (defined BYTE_ORDER && defined BIG_ENDIAN \ + && defined LITTLE_ENDIAN && BYTE_ORDER && BIG_ENDIAN \ + && LITTLE_ENDIAN) + bogus endian macros + #endif ; return 0; } _ACEOF -rm -f conftest.$ac_objext -if { (ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then +if ac_fn_c_try_compile "$LINENO"; then : # It does; now see whether it defined to BIG_ENDIAN or not. -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include -#include + #include int main () { #if BYTE_ORDER != BIG_ENDIAN - not big endian -#endif + not big endian + #endif ; return 0; } _ACEOF -rm -f conftest.$ac_objext -if { (ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then +if ac_fn_c_try_compile "$LINENO"; then : ac_cv_c_bigendian=yes else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_cv_c_bigendian=no + ac_cv_c_bigendian=no fi - rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + fi + if test $ac_cv_c_bigendian = unknown; then + # See if defines _LITTLE_ENDIAN or _BIG_ENDIAN (e.g., Solaris). + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include - # It does not; compile a test program. -if test "$cross_compiling" = yes; then - # try to guess the endianness by grepping values into an object file - ac_cv_c_bigendian=unknown - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ +int +main () +{ +#if ! (defined _LITTLE_ENDIAN || defined _BIG_ENDIAN) + bogus endian macros + #endif + + ; + return 0; +} _ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + # It does; now see whether it defined to _BIG_ENDIAN or not. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ -short int ascii_mm[] = { 0x4249, 0x4765, 0x6E44, 0x6961, 0x6E53, 0x7953, 0 }; -short int ascii_ii[] = { 0x694C, 0x5454, 0x656C, 0x6E45, 0x6944, 0x6E61, 0 }; -void _ascii () { char *s = (char *) ascii_mm; s = (char *) ascii_ii; } -short int ebcdic_ii[] = { 0x89D3, 0xE3E3, 0x8593, 0x95C5, 0x89C4, 0x9581, 0 }; -short int ebcdic_mm[] = { 0xC2C9, 0xC785, 0x95C4, 0x8981, 0x95E2, 0xA8E2, 0 }; -void _ebcdic () { char *s = (char *) ebcdic_mm; s = (char *) ebcdic_ii; } +#include + int main () { - _ascii (); _ebcdic (); +#ifndef _BIG_ENDIAN + not big endian + #endif + ; return 0; } _ACEOF -rm -f conftest.$ac_objext -if { (ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then - if grep BIGenDianSyS conftest.$ac_objext >/dev/null ; then +if ac_fn_c_try_compile "$LINENO"; then : ac_cv_c_bigendian=yes +else + ac_cv_c_bigendian=no fi -if grep LiTTleEnDian conftest.$ac_objext >/dev/null ; then - if test "$ac_cv_c_bigendian" = unknown; then - ac_cv_c_bigendian=no - else - # finding both strings is unlikely to happen, but who knows? - ac_cv_c_bigendian=unknown - fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + fi + if test $ac_cv_c_bigendian = unknown; then + # Compile a test program. + if test "$cross_compiling" = yes; then : + # Try to guess by grepping values from an object file. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +short int ascii_mm[] = + { 0x4249, 0x4765, 0x6E44, 0x6961, 0x6E53, 0x7953, 0 }; + short int ascii_ii[] = + { 0x694C, 0x5454, 0x656C, 0x6E45, 0x6944, 0x6E61, 0 }; + int use_ascii (int i) { + return ascii_mm[i] + ascii_ii[i]; + } + short int ebcdic_ii[] = + { 0x89D3, 0xE3E3, 0x8593, 0x95C5, 0x89C4, 0x9581, 0 }; + short int ebcdic_mm[] = + { 0xC2C9, 0xC785, 0x95C4, 0x8981, 0x95E2, 0xA8E2, 0 }; + int use_ebcdic (int i) { + return ebcdic_mm[i] + ebcdic_ii[i]; + } + extern int foo; +int +main () +{ +return use_ascii (foo) == use_ebcdic (foo); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + if grep BIGenDianSyS conftest.$ac_objext >/dev/null; then + ac_cv_c_bigendian=yes + fi + if grep LiTTleEnDian conftest.$ac_objext >/dev/null ; then + if test "$ac_cv_c_bigendian" = unknown; then + ac_cv_c_bigendian=no + else + # finding both strings is unlikely to happen, but who knows? + ac_cv_c_bigendian=unknown + fi + fi fi - rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $ac_includes_default int main () { - /* Are we little or big endian? From Harbison&Steele. */ - union - { - long int l; - char c[sizeof (long int)]; - } u; - u.l = 1; - return u.c[sizeof (long int) - 1] == 1; + /* Are we little or big endian? From Harbison&Steele. */ + union + { + long int l; + char c[sizeof (long int)]; + } u; + u.l = 1; + return u.c[sizeof (long int) - 1] == 1; ; return 0; } _ACEOF -rm -f conftest$ac_exeext -if { (ac_try="$ac_link" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_link") 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { ac_try='./conftest$ac_exeext' - { (case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_try") 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then +if ac_fn_c_try_run "$LINENO"; then : ac_cv_c_bigendian=no else - echo "$as_me: program exited with status $ac_status" >&5 -echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -( exit $ac_status ) -ac_cv_c_bigendian=yes + ac_cv_c_bigendian=yes fi -rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest.beam conftest.$ac_ext fi - + fi fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_bigendian" >&5 +$as_echo "$ac_cv_c_bigendian" >&6; } + case $ac_cv_c_bigendian in #( + yes) + $as_echo "#define WORDS_BIGENDIAN 1" >>confdefs.h +;; #( + no) + ;; #( + universal) -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -fi -{ echo "$as_me:$LINENO: result: $ac_cv_c_bigendian" >&5 -echo "${ECHO_T}$ac_cv_c_bigendian" >&6; } -case $ac_cv_c_bigendian in - yes) +$as_echo "#define AC_APPLE_UNIVERSAL_BUILD 1" >>confdefs.h -cat >>confdefs.h <<\_ACEOF -#define WORDS_BIGENDIAN 1 -_ACEOF - ;; - no) - ;; - *) - { { echo "$as_me:$LINENO: error: unknown endianness -presetting ac_cv_c_bigendian=no (or yes) will help" >&5 -echo "$as_me: error: unknown endianness -presetting ac_cv_c_bigendian=no (or yes) will help" >&2;} - { (exit 1); exit 1; }; } ;; -esac + ;; #( + *) + as_fn_error "unknown endianness + presetting ac_cv_c_bigendian=no (or yes) will help" "$LINENO" 5 ;; + esac -{ echo "$as_me:$LINENO: checking assembler .cfi pseudo-op support" >&5 -echo $ECHO_N "checking assembler .cfi pseudo-op support... $ECHO_C" >&6; } -if test "${libffi_cv_as_cfi_pseudo_op+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking assembler .cfi pseudo-op support" >&5 +$as_echo_n "checking assembler .cfi pseudo-op support... " >&6; } +if test "${libffi_cv_as_cfi_pseudo_op+set}" = set; then : + $as_echo_n "(cached) " >&6 else libffi_cv_as_cfi_pseudo_op=unknown - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ asm (".cfi_startproc\n\t.cfi_endproc"); int @@ -22391,60 +5832,34 @@ return 0; } _ACEOF -rm -f conftest.$ac_objext -if { (ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then +if ac_fn_c_try_compile "$LINENO"; then : libffi_cv_as_cfi_pseudo_op=yes else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - libffi_cv_as_cfi_pseudo_op=no + libffi_cv_as_cfi_pseudo_op=no fi - rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi -{ echo "$as_me:$LINENO: result: $libffi_cv_as_cfi_pseudo_op" >&5 -echo "${ECHO_T}$libffi_cv_as_cfi_pseudo_op" >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $libffi_cv_as_cfi_pseudo_op" >&5 +$as_echo "$libffi_cv_as_cfi_pseudo_op" >&6; } if test "x$libffi_cv_as_cfi_pseudo_op" = xyes; then -cat >>confdefs.h <<\_ACEOF -#define HAVE_AS_CFI_PSEUDO_OP 1 -_ACEOF +$as_echo "#define HAVE_AS_CFI_PSEUDO_OP 1" >>confdefs.h fi if test x$TARGET = xSPARC; then - { echo "$as_me:$LINENO: checking assembler and linker support unaligned pc related relocs" >&5 -echo $ECHO_N "checking assembler and linker support unaligned pc related relocs... $ECHO_C" >&6; } -if test "${libffi_cv_as_sparc_ua_pcrel+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: checking assembler and linker support unaligned pc related relocs" >&5 +$as_echo_n "checking assembler and linker support unaligned pc related relocs... " >&6; } +if test "${libffi_cv_as_sparc_ua_pcrel+set}" = set; then : + $as_echo_n "(cached) " >&6 else save_CFLAGS="$CFLAGS" save_LDFLAGS="$LDFLAGS" CFLAGS="$CFLAGS -fpic" LDFLAGS="$LDFLAGS -shared" - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ asm (".text; foo: nop; .data; .align 4; .byte 0; .uaword %r_disp32(foo); .text"); int @@ -22455,60 +5870,33 @@ return 0; } _ACEOF -rm -f conftest.$ac_objext conftest$ac_exeext -if { (ac_try="$ac_link" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_link") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest$ac_exeext && - $as_test_x conftest$ac_exeext; then +if ac_fn_c_try_link "$LINENO"; then : libffi_cv_as_sparc_ua_pcrel=yes else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - libffi_cv_as_sparc_ua_pcrel=no + libffi_cv_as_sparc_ua_pcrel=no fi - -rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ - conftest$ac_exeext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext CFLAGS="$save_CFLAGS" LDFLAGS="$save_LDFLAGS" fi -{ echo "$as_me:$LINENO: result: $libffi_cv_as_sparc_ua_pcrel" >&5 -echo "${ECHO_T}$libffi_cv_as_sparc_ua_pcrel" >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $libffi_cv_as_sparc_ua_pcrel" >&5 +$as_echo "$libffi_cv_as_sparc_ua_pcrel" >&6; } if test "x$libffi_cv_as_sparc_ua_pcrel" = xyes; then -cat >>confdefs.h <<\_ACEOF -#define HAVE_AS_SPARC_UA_PCREL 1 -_ACEOF +$as_echo "#define HAVE_AS_SPARC_UA_PCREL 1" >>confdefs.h fi - { echo "$as_me:$LINENO: checking assembler .register pseudo-op support" >&5 -echo $ECHO_N "checking assembler .register pseudo-op support... $ECHO_C" >&6; } -if test "${libffi_cv_as_register_pseudo_op+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: checking assembler .register pseudo-op support" >&5 +$as_echo_n "checking assembler .register pseudo-op support... " >&6; } +if test "${libffi_cv_as_register_pseudo_op+set}" = set; then : + $as_echo_n "(cached) " >&6 else libffi_cv_as_register_pseudo_op=unknown # Check if we have .register - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ asm (".register %g2, #scratch"); int @@ -22519,49 +5907,58 @@ return 0; } _ACEOF -rm -f conftest.$ac_objext -if { (ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then +if ac_fn_c_try_compile "$LINENO"; then : libffi_cv_as_register_pseudo_op=yes else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - libffi_cv_as_register_pseudo_op=no + libffi_cv_as_register_pseudo_op=no fi - rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi -{ echo "$as_me:$LINENO: result: $libffi_cv_as_register_pseudo_op" >&5 -echo "${ECHO_T}$libffi_cv_as_register_pseudo_op" >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $libffi_cv_as_register_pseudo_op" >&5 +$as_echo "$libffi_cv_as_register_pseudo_op" >&6; } if test "x$libffi_cv_as_register_pseudo_op" = xyes; then -cat >>confdefs.h <<\_ACEOF -#define HAVE_AS_REGISTER_PSEUDO_OP 1 -_ACEOF +$as_echo "#define HAVE_AS_REGISTER_PSEUDO_OP 1" >>confdefs.h + + fi +fi + +if test x$TARGET = xX86 || test x$TARGET = xX86_WIN32 || test x$TARGET = xX86_64; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking assembler supports pc related relocs" >&5 +$as_echo_n "checking assembler supports pc related relocs... " >&6; } +if test "${libffi_cv_as_x86_pcrel+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + + libffi_cv_as_x86_pcrel=yes + echo '.text; foo: nop; .data; .long foo-.; .text' > conftest.s + if $CC $CFLAGS -c conftest.s 2>&1 | grep -i warning > /dev/null; then + libffi_cv_as_x86_pcrel=no + fi + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $libffi_cv_as_x86_pcrel" >&5 +$as_echo "$libffi_cv_as_x86_pcrel" >&6; } + if test "x$libffi_cv_as_x86_pcrel" = xyes; then + +$as_echo "#define HAVE_AS_X86_PCREL 1" >>confdefs.h fi fi -{ echo "$as_me:$LINENO: checking whether .eh_frame section should be read-only" >&5 -echo $ECHO_N "checking whether .eh_frame section should be read-only... $ECHO_C" >&6; } -if test "${libffi_cv_ro_eh_frame+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 +case "$target" in + *-apple-darwin10* | *-*-freebsd* | *-*-openbsd* | *-pc-solaris*) + +$as_echo "#define FFI_MMAP_EXEC_WRIT 1" >>confdefs.h + + ;; +esac + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether .eh_frame section should be read-only" >&5 +$as_echo_n "checking whether .eh_frame section should be read-only... " >&6; } +if test "${libffi_cv_ro_eh_frame+set}" = set; then : + $as_echo_n "(cached) " >&6 else libffi_cv_ro_eh_frame=no @@ -22577,41 +5974,35 @@ rm -f conftest.* fi -{ echo "$as_me:$LINENO: result: $libffi_cv_ro_eh_frame" >&5 -echo "${ECHO_T}$libffi_cv_ro_eh_frame" >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $libffi_cv_ro_eh_frame" >&5 +$as_echo "$libffi_cv_ro_eh_frame" >&6; } if test "x$libffi_cv_ro_eh_frame" = xyes; then -cat >>confdefs.h <<\_ACEOF -#define HAVE_RO_EH_FRAME 1 -_ACEOF +$as_echo "#define HAVE_RO_EH_FRAME 1" >>confdefs.h -cat >>confdefs.h <<\_ACEOF -#define EH_FRAME_FLAGS "a" -_ACEOF +$as_echo "#define EH_FRAME_FLAGS \"a\"" >>confdefs.h else -cat >>confdefs.h <<\_ACEOF -#define EH_FRAME_FLAGS "aw" -_ACEOF +$as_echo "#define EH_FRAME_FLAGS \"aw\"" >>confdefs.h fi -{ echo "$as_me:$LINENO: checking for __attribute__((visibility(\"hidden\")))" >&5 -echo $ECHO_N "checking for __attribute__((visibility(\"hidden\")))... $ECHO_C" >&6; } -if test "${libffi_cv_hidden_visibility_attribute+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for __attribute__((visibility(\"hidden\")))" >&5 +$as_echo_n "checking for __attribute__((visibility(\"hidden\")))... " >&6; } +if test "${libffi_cv_hidden_visibility_attribute+set}" = set; then : + $as_echo_n "(cached) " >&6 else echo 'int __attribute__ ((visibility ("hidden"))) foo (void) { return 1; }' > conftest.c libffi_cv_hidden_visibility_attribute=no if { ac_try='${CC-cc} -Werror -S conftest.c -o conftest.s 1>&5' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 (eval $ac_try) 2>&5 ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then if grep '\.hidden.*foo' conftest.s >/dev/null; then libffi_cv_hidden_visibility_attribute=yes fi @@ -22619,13 +6010,11 @@ rm -f conftest.* fi -{ echo "$as_me:$LINENO: result: $libffi_cv_hidden_visibility_attribute" >&5 -echo "${ECHO_T}$libffi_cv_hidden_visibility_attribute" >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $libffi_cv_hidden_visibility_attribute" >&5 +$as_echo "$libffi_cv_hidden_visibility_attribute" >&6; } if test $libffi_cv_hidden_visibility_attribute = yes; then -cat >>confdefs.h <<\_ACEOF -#define HAVE_HIDDEN_VISIBILITY_ATTRIBUTE 1 -_ACEOF +$as_echo "#define HAVE_HIDDEN_VISIBILITY_ATTRIBUTE 1" >>confdefs.h fi @@ -22636,50 +6025,41 @@ - # Check whether --enable-debug was given. -if test "${enable_debug+set}" = set; then +if test "${enable_debug+set}" = set; then : enableval=$enable_debug; if test "$enable_debug" = "yes"; then -cat >>confdefs.h <<\_ACEOF -#define FFI_DEBUG 1 -_ACEOF +$as_echo "#define FFI_DEBUG 1" >>confdefs.h fi fi # Check whether --enable-structs was given. -if test "${enable_structs+set}" = set; then +if test "${enable_structs+set}" = set; then : enableval=$enable_structs; if test "$enable_structs" = "no"; then -cat >>confdefs.h <<\_ACEOF -#define FFI_NO_STRUCTS 1 -_ACEOF +$as_echo "#define FFI_NO_STRUCTS 1" >>confdefs.h fi fi # Check whether --enable-raw-api was given. -if test "${enable_raw_api+set}" = set; then +if test "${enable_raw_api+set}" = set; then : enableval=$enable_raw_api; if test "$enable_raw_api" = "no"; then -cat >>confdefs.h <<\_ACEOF -#define FFI_NO_RAW_API 1 -_ACEOF +$as_echo "#define FFI_NO_RAW_API 1" >>confdefs.h fi fi # Check whether --enable-purify-safety was given. -if test "${enable_purify_safety+set}" = set; then +if test "${enable_purify_safety+set}" = set; then : enableval=$enable_purify_safety; if test "$enable_purify_safety" = "yes"; then -cat >>confdefs.h <<\_ACEOF -#define USING_PURIFY 1 -_ACEOF +$as_echo "#define USING_PURIFY 1" >>confdefs.h fi fi @@ -22751,12 +6131,13 @@ case $ac_val in #( *${as_nl}*) case $ac_var in #( - *_cv_*) { echo "$as_me:$LINENO: WARNING: Cache variable $ac_var contains a newline." >&5 -echo "$as_me: WARNING: Cache variable $ac_var contains a newline." >&2;} ;; + *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 +$as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; esac case $ac_var in #( _ | IFS | as_nl) ;; #( - *) $as_unset $ac_var ;; + BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #( + *) { eval $ac_var=; unset $ac_var;} ;; esac ;; esac done @@ -22764,8 +6145,8 @@ (set) 2>&1 | case $as_nl`(ac_space=' '; set) 2>&1` in #( *${as_nl}ac_space=\ *) - # `set' does not quote correctly, so add quotes (double-quote - # substitution turns \\\\ into \\, and sed turns \\ into \). + # `set' does not quote correctly, so add quotes: double-quote + # substitution turns \\\\ into \\, and sed turns \\ into \. sed -n \ "s/'/'\\\\''/g; s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\\2'/p" @@ -22788,12 +6169,12 @@ if diff "$cache_file" confcache >/dev/null 2>&1; then :; else if test -w "$cache_file"; then test "x$cache_file" != "x/dev/null" && - { echo "$as_me:$LINENO: updating cache $cache_file" >&5 -echo "$as_me: updating cache $cache_file" >&6;} + { $as_echo "$as_me:${as_lineno-$LINENO}: updating cache $cache_file" >&5 +$as_echo "$as_me: updating cache $cache_file" >&6;} cat confcache >$cache_file else - { echo "$as_me:$LINENO: not updating unwritable cache $cache_file" >&5 -echo "$as_me: not updating unwritable cache $cache_file" >&6;} + { $as_echo "$as_me:${as_lineno-$LINENO}: not updating unwritable cache $cache_file" >&5 +$as_echo "$as_me: not updating unwritable cache $cache_file" >&6;} fi fi rm -f confcache @@ -22809,234 +6190,159 @@ for ac_i in : $LIBOBJS; do test "x$ac_i" = x: && continue # 1. Remove the extension, and $U if already installed. ac_script='s/\$U\././;s/\.o$//;s/\.obj$//' - ac_i=`echo "$ac_i" | sed "$ac_script"` + ac_i=`$as_echo "$ac_i" | sed "$ac_script"` # 2. Prepend LIBOBJDIR. When used with automake>=1.10 LIBOBJDIR # will be set to the directory where LIBOBJS objects are built. - ac_libobjs="$ac_libobjs \${LIBOBJDIR}$ac_i\$U.$ac_objext" - ac_ltlibobjs="$ac_ltlibobjs \${LIBOBJDIR}$ac_i"'$U.lo' + as_fn_append ac_libobjs " \${LIBOBJDIR}$ac_i\$U.$ac_objext" + as_fn_append ac_ltlibobjs " \${LIBOBJDIR}$ac_i"'$U.lo' done LIBOBJS=$ac_libobjs LTLIBOBJS=$ac_ltlibobjs + if test -n "$EXEEXT"; then + am__EXEEXT_TRUE= + am__EXEEXT_FALSE='#' +else + am__EXEEXT_TRUE='#' + am__EXEEXT_FALSE= +fi + if test -z "${AMDEP_TRUE}" && test -z "${AMDEP_FALSE}"; then - { { echo "$as_me:$LINENO: error: conditional \"AMDEP\" was never defined. -Usually this means the macro was only invoked conditionally." >&5 -echo "$as_me: error: conditional \"AMDEP\" was never defined. -Usually this means the macro was only invoked conditionally." >&2;} - { (exit 1); exit 1; }; } + as_fn_error "conditional \"AMDEP\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${am__fastdepCC_TRUE}" && test -z "${am__fastdepCC_FALSE}"; then - { { echo "$as_me:$LINENO: error: conditional \"am__fastdepCC\" was never defined. -Usually this means the macro was only invoked conditionally." >&5 -echo "$as_me: error: conditional \"am__fastdepCC\" was never defined. -Usually this means the macro was only invoked conditionally." >&2;} - { (exit 1); exit 1; }; } + as_fn_error "conditional \"am__fastdepCC\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${am__fastdepCCAS_TRUE}" && test -z "${am__fastdepCCAS_FALSE}"; then - { { echo "$as_me:$LINENO: error: conditional \"am__fastdepCCAS\" was never defined. -Usually this means the macro was only invoked conditionally." >&5 -echo "$as_me: error: conditional \"am__fastdepCCAS\" was never defined. -Usually this means the macro was only invoked conditionally." >&2;} - { (exit 1); exit 1; }; } -fi -if test -z "${am__fastdepCXX_TRUE}" && test -z "${am__fastdepCXX_FALSE}"; then - { { echo "$as_me:$LINENO: error: conditional \"am__fastdepCXX\" was never defined. -Usually this means the macro was only invoked conditionally." >&5 -echo "$as_me: error: conditional \"am__fastdepCXX\" was never defined. -Usually this means the macro was only invoked conditionally." >&2;} - { (exit 1); exit 1; }; } + as_fn_error "conditional \"am__fastdepCCAS\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${MAINTAINER_MODE_TRUE}" && test -z "${MAINTAINER_MODE_FALSE}"; then - { { echo "$as_me:$LINENO: error: conditional \"MAINTAINER_MODE\" was never defined. -Usually this means the macro was only invoked conditionally." >&5 -echo "$as_me: error: conditional \"MAINTAINER_MODE\" was never defined. -Usually this means the macro was only invoked conditionally." >&2;} - { (exit 1); exit 1; }; } + as_fn_error "conditional \"MAINTAINER_MODE\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${TESTSUBDIR_TRUE}" && test -z "${TESTSUBDIR_FALSE}"; then - { { echo "$as_me:$LINENO: error: conditional \"TESTSUBDIR\" was never defined. -Usually this means the macro was only invoked conditionally." >&5 -echo "$as_me: error: conditional \"TESTSUBDIR\" was never defined. -Usually this means the macro was only invoked conditionally." >&2;} - { (exit 1); exit 1; }; } + as_fn_error "conditional \"TESTSUBDIR\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${MIPS_TRUE}" && test -z "${MIPS_FALSE}"; then - { { echo "$as_me:$LINENO: error: conditional \"MIPS\" was never defined. -Usually this means the macro was only invoked conditionally." >&5 -echo "$as_me: error: conditional \"MIPS\" was never defined. -Usually this means the macro was only invoked conditionally." >&2;} - { (exit 1); exit 1; }; } + as_fn_error "conditional \"MIPS\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${SPARC_TRUE}" && test -z "${SPARC_FALSE}"; then - { { echo "$as_me:$LINENO: error: conditional \"SPARC\" was never defined. -Usually this means the macro was only invoked conditionally." >&5 -echo "$as_me: error: conditional \"SPARC\" was never defined. -Usually this means the macro was only invoked conditionally." >&2;} - { (exit 1); exit 1; }; } + as_fn_error "conditional \"SPARC\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${X86_TRUE}" && test -z "${X86_FALSE}"; then - { { echo "$as_me:$LINENO: error: conditional \"X86\" was never defined. -Usually this means the macro was only invoked conditionally." >&5 -echo "$as_me: error: conditional \"X86\" was never defined. -Usually this means the macro was only invoked conditionally." >&2;} - { (exit 1); exit 1; }; } + as_fn_error "conditional \"X86\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${X86_FREEBSD_TRUE}" && test -z "${X86_FREEBSD_FALSE}"; then - { { echo "$as_me:$LINENO: error: conditional \"X86_FREEBSD\" was never defined. -Usually this means the macro was only invoked conditionally." >&5 -echo "$as_me: error: conditional \"X86_FREEBSD\" was never defined. -Usually this means the macro was only invoked conditionally." >&2;} - { (exit 1); exit 1; }; } + as_fn_error "conditional \"X86_FREEBSD\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${X86_WIN32_TRUE}" && test -z "${X86_WIN32_FALSE}"; then - { { echo "$as_me:$LINENO: error: conditional \"X86_WIN32\" was never defined. -Usually this means the macro was only invoked conditionally." >&5 -echo "$as_me: error: conditional \"X86_WIN32\" was never defined. -Usually this means the macro was only invoked conditionally." >&2;} - { (exit 1); exit 1; }; } + as_fn_error "conditional \"X86_WIN32\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${X86_WIN64_TRUE}" && test -z "${X86_WIN64_FALSE}"; then + as_fn_error "conditional \"X86_WIN64\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${X86_DARWIN_TRUE}" && test -z "${X86_DARWIN_FALSE}"; then - { { echo "$as_me:$LINENO: error: conditional \"X86_DARWIN\" was never defined. -Usually this means the macro was only invoked conditionally." >&5 -echo "$as_me: error: conditional \"X86_DARWIN\" was never defined. -Usually this means the macro was only invoked conditionally." >&2;} - { (exit 1); exit 1; }; } + as_fn_error "conditional \"X86_DARWIN\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${ALPHA_TRUE}" && test -z "${ALPHA_FALSE}"; then - { { echo "$as_me:$LINENO: error: conditional \"ALPHA\" was never defined. -Usually this means the macro was only invoked conditionally." >&5 -echo "$as_me: error: conditional \"ALPHA\" was never defined. -Usually this means the macro was only invoked conditionally." >&2;} - { (exit 1); exit 1; }; } + as_fn_error "conditional \"ALPHA\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${IA64_TRUE}" && test -z "${IA64_FALSE}"; then - { { echo "$as_me:$LINENO: error: conditional \"IA64\" was never defined. -Usually this means the macro was only invoked conditionally." >&5 -echo "$as_me: error: conditional \"IA64\" was never defined. -Usually this means the macro was only invoked conditionally." >&2;} - { (exit 1); exit 1; }; } + as_fn_error "conditional \"IA64\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${M32R_TRUE}" && test -z "${M32R_FALSE}"; then - { { echo "$as_me:$LINENO: error: conditional \"M32R\" was never defined. -Usually this means the macro was only invoked conditionally." >&5 -echo "$as_me: error: conditional \"M32R\" was never defined. -Usually this means the macro was only invoked conditionally." >&2;} - { (exit 1); exit 1; }; } + as_fn_error "conditional \"M32R\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${M68K_TRUE}" && test -z "${M68K_FALSE}"; then - { { echo "$as_me:$LINENO: error: conditional \"M68K\" was never defined. -Usually this means the macro was only invoked conditionally." >&5 -echo "$as_me: error: conditional \"M68K\" was never defined. -Usually this means the macro was only invoked conditionally." >&2;} - { (exit 1); exit 1; }; } + as_fn_error "conditional \"M68K\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${POWERPC_TRUE}" && test -z "${POWERPC_FALSE}"; then - { { echo "$as_me:$LINENO: error: conditional \"POWERPC\" was never defined. -Usually this means the macro was only invoked conditionally." >&5 -echo "$as_me: error: conditional \"POWERPC\" was never defined. -Usually this means the macro was only invoked conditionally." >&2;} - { (exit 1); exit 1; }; } + as_fn_error "conditional \"POWERPC\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${POWERPC_AIX_TRUE}" && test -z "${POWERPC_AIX_FALSE}"; then - { { echo "$as_me:$LINENO: error: conditional \"POWERPC_AIX\" was never defined. -Usually this means the macro was only invoked conditionally." >&5 -echo "$as_me: error: conditional \"POWERPC_AIX\" was never defined. -Usually this means the macro was only invoked conditionally." >&2;} - { (exit 1); exit 1; }; } + as_fn_error "conditional \"POWERPC_AIX\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${POWERPC_DARWIN_TRUE}" && test -z "${POWERPC_DARWIN_FALSE}"; then - { { echo "$as_me:$LINENO: error: conditional \"POWERPC_DARWIN\" was never defined. -Usually this means the macro was only invoked conditionally." >&5 -echo "$as_me: error: conditional \"POWERPC_DARWIN\" was never defined. -Usually this means the macro was only invoked conditionally." >&2;} - { (exit 1); exit 1; }; } + as_fn_error "conditional \"POWERPC_DARWIN\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${POWERPC_FREEBSD_TRUE}" && test -z "${POWERPC_FREEBSD_FALSE}"; then - { { echo "$as_me:$LINENO: error: conditional \"POWERPC_FREEBSD\" was never defined. -Usually this means the macro was only invoked conditionally." >&5 -echo "$as_me: error: conditional \"POWERPC_FREEBSD\" was never defined. -Usually this means the macro was only invoked conditionally." >&2;} - { (exit 1); exit 1; }; } + as_fn_error "conditional \"POWERPC_FREEBSD\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${ARM_TRUE}" && test -z "${ARM_FALSE}"; then - { { echo "$as_me:$LINENO: error: conditional \"ARM\" was never defined. -Usually this means the macro was only invoked conditionally." >&5 -echo "$as_me: error: conditional \"ARM\" was never defined. -Usually this means the macro was only invoked conditionally." >&2;} - { (exit 1); exit 1; }; } + as_fn_error "conditional \"ARM\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${AVR32_TRUE}" && test -z "${AVR32_FALSE}"; then + as_fn_error "conditional \"AVR32\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${LIBFFI_CRIS_TRUE}" && test -z "${LIBFFI_CRIS_FALSE}"; then - { { echo "$as_me:$LINENO: error: conditional \"LIBFFI_CRIS\" was never defined. -Usually this means the macro was only invoked conditionally." >&5 -echo "$as_me: error: conditional \"LIBFFI_CRIS\" was never defined. -Usually this means the macro was only invoked conditionally." >&2;} - { (exit 1); exit 1; }; } + as_fn_error "conditional \"LIBFFI_CRIS\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${FRV_TRUE}" && test -z "${FRV_FALSE}"; then - { { echo "$as_me:$LINENO: error: conditional \"FRV\" was never defined. -Usually this means the macro was only invoked conditionally." >&5 -echo "$as_me: error: conditional \"FRV\" was never defined. -Usually this means the macro was only invoked conditionally." >&2;} - { (exit 1); exit 1; }; } + as_fn_error "conditional \"FRV\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${S390_TRUE}" && test -z "${S390_FALSE}"; then - { { echo "$as_me:$LINENO: error: conditional \"S390\" was never defined. -Usually this means the macro was only invoked conditionally." >&5 -echo "$as_me: error: conditional \"S390\" was never defined. -Usually this means the macro was only invoked conditionally." >&2;} - { (exit 1); exit 1; }; } + as_fn_error "conditional \"S390\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${X86_64_TRUE}" && test -z "${X86_64_FALSE}"; then - { { echo "$as_me:$LINENO: error: conditional \"X86_64\" was never defined. -Usually this means the macro was only invoked conditionally." >&5 -echo "$as_me: error: conditional \"X86_64\" was never defined. -Usually this means the macro was only invoked conditionally." >&2;} - { (exit 1); exit 1; }; } + as_fn_error "conditional \"X86_64\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${SH_TRUE}" && test -z "${SH_FALSE}"; then - { { echo "$as_me:$LINENO: error: conditional \"SH\" was never defined. -Usually this means the macro was only invoked conditionally." >&5 -echo "$as_me: error: conditional \"SH\" was never defined. -Usually this means the macro was only invoked conditionally." >&2;} - { (exit 1); exit 1; }; } + as_fn_error "conditional \"SH\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${SH64_TRUE}" && test -z "${SH64_FALSE}"; then - { { echo "$as_me:$LINENO: error: conditional \"SH64\" was never defined. -Usually this means the macro was only invoked conditionally." >&5 -echo "$as_me: error: conditional \"SH64\" was never defined. -Usually this means the macro was only invoked conditionally." >&2;} - { (exit 1); exit 1; }; } + as_fn_error "conditional \"SH64\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${PA_LINUX_TRUE}" && test -z "${PA_LINUX_FALSE}"; then - { { echo "$as_me:$LINENO: error: conditional \"PA_LINUX\" was never defined. -Usually this means the macro was only invoked conditionally." >&5 -echo "$as_me: error: conditional \"PA_LINUX\" was never defined. -Usually this means the macro was only invoked conditionally." >&2;} - { (exit 1); exit 1; }; } + as_fn_error "conditional \"PA_LINUX\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${PA_HPUX_TRUE}" && test -z "${PA_HPUX_FALSE}"; then - { { echo "$as_me:$LINENO: error: conditional \"PA_HPUX\" was never defined. -Usually this means the macro was only invoked conditionally." >&5 -echo "$as_me: error: conditional \"PA_HPUX\" was never defined. -Usually this means the macro was only invoked conditionally." >&2;} - { (exit 1); exit 1; }; } + as_fn_error "conditional \"PA_HPUX\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${PA64_HPUX_TRUE}" && test -z "${PA64_HPUX_FALSE}"; then - { { echo "$as_me:$LINENO: error: conditional \"PA64_HPUX\" was never defined. -Usually this means the macro was only invoked conditionally." >&5 -echo "$as_me: error: conditional \"PA64_HPUX\" was never defined. -Usually this means the macro was only invoked conditionally." >&2;} - { (exit 1); exit 1; }; } + as_fn_error "conditional \"PA64_HPUX\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi + : ${CONFIG_STATUS=./config.status} +ac_write_fail=0 ac_clean_files_save=$ac_clean_files ac_clean_files="$ac_clean_files $CONFIG_STATUS" -{ echo "$as_me:$LINENO: creating $CONFIG_STATUS" >&5 -echo "$as_me: creating $CONFIG_STATUS" >&6;} -cat >$CONFIG_STATUS <<_ACEOF +{ $as_echo "$as_me:${as_lineno-$LINENO}: creating $CONFIG_STATUS" >&5 +$as_echo "$as_me: creating $CONFIG_STATUS" >&6;} +as_write_fail=0 +cat >$CONFIG_STATUS <<_ASEOF || as_write_fail=1 #! $SHELL # Generated by $as_me. # Run this file to recreate the current configuration. @@ -23046,59 +6352,79 @@ debug=false ac_cs_recheck=false ac_cs_silent=false -SHELL=\${CONFIG_SHELL-$SHELL} -_ACEOF -cat >>$CONFIG_STATUS <<\_ACEOF -## --------------------- ## -## M4sh Initialization. ## -## --------------------- ## +SHELL=\${CONFIG_SHELL-$SHELL} +export SHELL +_ASEOF +cat >>$CONFIG_STATUS <<\_ASEOF || as_write_fail=1 +## -------------------- ## +## M4sh Initialization. ## +## -------------------- ## # Be more Bourne compatible DUALCASE=1; export DUALCASE # for MKS sh -if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then +if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then : emulate sh NULLCMD=: - # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which + # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which # is contrary to our usage. Disable this feature. alias -g '${1+"$@"}'='"$@"' setopt NO_GLOB_SUBST else - case `(set -o) 2>/dev/null` in - *posix*) set -o posix ;; + case `(set -o) 2>/dev/null` in #( + *posix*) : + set -o posix ;; #( + *) : + ;; esac - fi - - -# PATH needs CR -# Avoid depending upon Character Ranges. -as_cr_letters='abcdefghijklmnopqrstuvwxyz' -as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' -as_cr_Letters=$as_cr_letters$as_cr_LETTERS -as_cr_digits='0123456789' -as_cr_alnum=$as_cr_Letters$as_cr_digits - -# The user is always right. -if test "${PATH_SEPARATOR+set}" != set; then - echo "#! /bin/sh" >conf$$.sh - echo "exit 0" >>conf$$.sh - chmod +x conf$$.sh - if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then - PATH_SEPARATOR=';' - else - PATH_SEPARATOR=: +as_nl=' +' +export as_nl +# Printing a long string crashes Solaris 7 /usr/bin/printf. +as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' +as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo +as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo +# Prefer a ksh shell builtin over an external printf program on Solaris, +# but without wasting forks for bash or zsh. +if test -z "$BASH_VERSION$ZSH_VERSION" \ + && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then + as_echo='print -r --' + as_echo_n='print -rn --' +elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then + as_echo='printf %s\n' + as_echo_n='printf %s' +else + if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then + as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"' + as_echo_n='/usr/ucb/echo -n' + else + as_echo_body='eval expr "X$1" : "X\\(.*\\)"' + as_echo_n_body='eval + arg=$1; + case $arg in #( + *"$as_nl"*) + expr "X$arg" : "X\\(.*\\)$as_nl"; + arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;; + esac; + expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl" + ' + export as_echo_n_body + as_echo_n='sh -c $as_echo_n_body as_echo' fi - rm -f conf$$.sh + export as_echo_body + as_echo='sh -c $as_echo_body as_echo' fi -# Support unset when possible. -if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then - as_unset=unset -else - as_unset=false +# The user is always right. +if test "${PATH_SEPARATOR+set}" != set; then + PATH_SEPARATOR=: + (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { + (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || + PATH_SEPARATOR=';' + } fi @@ -23107,20 +6433,18 @@ # there to prevent editors from complaining about space-tab. # (If _AS_PATH_WALK were called with IFS unset, it would disable word # splitting by setting IFS to empty value.) -as_nl=' -' IFS=" "" $as_nl" # Find who we are. Look in the path if we contain no directory separator. -case $0 in +case $0 in #(( *[\\/]* ) as_myself=$0 ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. - test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break -done + test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break + done IFS=$as_save_IFS ;; @@ -23131,164 +6455,246 @@ as_myself=$0 fi if test ! -f "$as_myself"; then - echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 - { (exit 1); exit 1; } + $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 + exit 1 fi -# Work around bugs in pre-3.0 UWIN ksh. -for as_var in ENV MAIL MAILPATH -do ($as_unset $as_var) >/dev/null 2>&1 && $as_unset $as_var +# Unset variables that we do not need and which cause bugs (e.g. in +# pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1" +# suppresses any "Segmentation fault" message there. '((' could +# trigger a bug in pdksh 5.2.14. +for as_var in BASH_ENV ENV MAIL MAILPATH +do eval test x\${$as_var+set} = xset \ + && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : done PS1='$ ' PS2='> ' PS4='+ ' # NLS nuisances. -for as_var in \ - LANG LANGUAGE LC_ADDRESS LC_ALL LC_COLLATE LC_CTYPE LC_IDENTIFICATION \ - LC_MEASUREMENT LC_MESSAGES LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER \ - LC_TELEPHONE LC_TIME -do - if (set +x; test -z "`(eval $as_var=C; export $as_var) 2>&1`"); then - eval $as_var=C; export $as_var - else - ($as_unset $as_var) >/dev/null 2>&1 && $as_unset $as_var - fi -done - -# Required to use basename. -if expr a : '\(a\)' >/dev/null 2>&1 && - test "X`expr 00001 : '.*\(...\)'`" = X001; then - as_expr=expr -else - as_expr=false -fi - -if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then - as_basename=basename -else - as_basename=false -fi - - -# Name of the executable. -as_me=`$as_basename -- "$0" || -$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ - X"$0" : 'X\(//\)$' \| \ - X"$0" : 'X\(/\)' \| . 2>/dev/null || -echo X/"$0" | - sed '/^.*\/\([^/][^/]*\)\/*$/{ - s//\1/ - q - } - /^X\/\(\/\/\)$/{ - s//\1/ - q - } - /^X\/\(\/\).*/{ - s//\1/ - q - } - s/.*/./; q'` +LC_ALL=C +export LC_ALL +LANGUAGE=C +export LANGUAGE # CDPATH. -$as_unset CDPATH - +(unset CDPATH) >/dev/null 2>&1 && unset CDPATH - as_lineno_1=$LINENO - as_lineno_2=$LINENO - test "x$as_lineno_1" != "x$as_lineno_2" && - test "x`expr $as_lineno_1 + 1`" = "x$as_lineno_2" || { - - # Create $as_me.lineno as a copy of $as_myself, but with $LINENO - # uniformly replaced by the line number. The first 'sed' inserts a - # line-number line after each line using $LINENO; the second 'sed' - # does the real work. The second script uses 'N' to pair each - # line-number line with the line containing $LINENO, and appends - # trailing '-' during substitution so that $LINENO is not a special - # case at line end. - # (Raja R Harinath suggested sed '=', and Paul Eggert wrote the - # scripts with optimization help from Paolo Bonzini. Blame Lee - # E. McMahon (1931-1989) for sed's syntax. :-) - sed -n ' - p - /[$]LINENO/= - ' <$as_myself | - sed ' - s/[$]LINENO.*/&-/ - t lineno - b - :lineno - N - :loop - s/[$]LINENO\([^'$as_cr_alnum'_].*\n\)\(.*\)/\2\1\2/ - t loop - s/-\n.*// - ' >$as_me.lineno && - chmod +x "$as_me.lineno" || - { echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2 - { (exit 1); exit 1; }; } +# as_fn_error ERROR [LINENO LOG_FD] +# --------------------------------- +# Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are +# provided, also output the error to LOG_FD, referencing LINENO. Then exit the +# script with status $?, using 1 if that was 0. +as_fn_error () +{ + as_status=$?; test $as_status -eq 0 && as_status=1 + if test "$3"; then + as_lineno=${as_lineno-"$2"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + $as_echo "$as_me:${as_lineno-$LINENO}: error: $1" >&$3 + fi + $as_echo "$as_me: error: $1" >&2 + as_fn_exit $as_status +} # as_fn_error + + +# as_fn_set_status STATUS +# ----------------------- +# Set $? to STATUS, without forking. +as_fn_set_status () +{ + return $1 +} # as_fn_set_status + +# as_fn_exit STATUS +# ----------------- +# Exit the shell with STATUS, even in a "trap 0" or "set -e" context. +as_fn_exit () +{ + set +e + as_fn_set_status $1 + exit $1 +} # as_fn_exit + +# as_fn_unset VAR +# --------------- +# Portably unset VAR. +as_fn_unset () +{ + { eval $1=; unset $1;} +} +as_unset=as_fn_unset +# as_fn_append VAR VALUE +# ---------------------- +# Append the text in VALUE to the end of the definition contained in VAR. Take +# advantage of any shell optimizations that allow amortized linear growth over +# repeated appends, instead of the typical quadratic growth present in naive +# implementations. +if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then : + eval 'as_fn_append () + { + eval $1+=\$2 + }' +else + as_fn_append () + { + eval $1=\$$1\$2 + } +fi # as_fn_append - # Don't try to exec as it changes $[0], causing all sort of problems - # (the dirname of $[0] is not the place where we might find the - # original and so on. Autoconf is especially sensitive to this). - . "./$as_me.lineno" - # Exit status is that of the last command. - exit -} +# as_fn_arith ARG... +# ------------------ +# Perform arithmetic evaluation on the ARGs, and store the result in the +# global $as_val. Take advantage of shells that can avoid forks. The arguments +# must be portable across $(()) and expr. +if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then : + eval 'as_fn_arith () + { + as_val=$(( $* )) + }' +else + as_fn_arith () + { + as_val=`expr "$@" || test $? -eq 1` + } +fi # as_fn_arith +if expr a : '\(a\)' >/dev/null 2>&1 && + test "X`expr 00001 : '.*\(...\)'`" = X001; then + as_expr=expr +else + as_expr=false +fi + +if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then + as_basename=basename +else + as_basename=false +fi + if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then as_dirname=dirname else as_dirname=false fi +as_me=`$as_basename -- "$0" || +$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ + X"$0" : 'X\(//\)$' \| \ + X"$0" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X/"$0" | + sed '/^.*\/\([^/][^/]*\)\/*$/{ + s//\1/ + q + } + /^X\/\(\/\/\)$/{ + s//\1/ + q + } + /^X\/\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + +# Avoid depending upon Character Ranges. +as_cr_letters='abcdefghijklmnopqrstuvwxyz' +as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' +as_cr_Letters=$as_cr_letters$as_cr_LETTERS +as_cr_digits='0123456789' +as_cr_alnum=$as_cr_Letters$as_cr_digits + ECHO_C= ECHO_N= ECHO_T= -case `echo -n x` in +case `echo -n x` in #((((( -n*) - case `echo 'x\c'` in + case `echo 'xy\c'` in *c*) ECHO_T=' ';; # ECHO_T is single tab character. - *) ECHO_C='\c';; + xy) ECHO_C='\c';; + *) echo `echo ksh88 bug on AIX 6.1` > /dev/null + ECHO_T=' ';; esac;; *) ECHO_N='-n';; esac -if expr a : '\(a\)' >/dev/null 2>&1 && - test "X`expr 00001 : '.*\(...\)'`" = X001; then - as_expr=expr -else - as_expr=false -fi - rm -f conf$$ conf$$.exe conf$$.file if test -d conf$$.dir; then rm -f conf$$.dir/conf$$.file else rm -f conf$$.dir - mkdir conf$$.dir + mkdir conf$$.dir 2>/dev/null fi -echo >conf$$.file -if ln -s conf$$.file conf$$ 2>/dev/null; then - as_ln_s='ln -s' - # ... but there are two gotchas: - # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. - # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. - # In both cases, we have to default to `cp -p'. - ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || +if (echo >conf$$.file) 2>/dev/null; then + if ln -s conf$$.file conf$$ 2>/dev/null; then + as_ln_s='ln -s' + # ... but there are two gotchas: + # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. + # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. + # In both cases, we have to default to `cp -p'. + ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || + as_ln_s='cp -p' + elif ln conf$$.file conf$$ 2>/dev/null; then + as_ln_s=ln + else as_ln_s='cp -p' -elif ln conf$$.file conf$$ 2>/dev/null; then - as_ln_s=ln + fi else as_ln_s='cp -p' fi rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file rmdir conf$$.dir 2>/dev/null + +# as_fn_mkdir_p +# ------------- +# Create "$as_dir" as a directory, including parents if necessary. +as_fn_mkdir_p () +{ + + case $as_dir in #( + -*) as_dir=./$as_dir;; + esac + test -d "$as_dir" || eval $as_mkdir_p || { + as_dirs= + while :; do + case $as_dir in #( + *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( + *) as_qdir=$as_dir;; + esac + as_dirs="'$as_qdir' $as_dirs" + as_dir=`$as_dirname -- "$as_dir" || +$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$as_dir" : 'X\(//\)[^/]' \| \ + X"$as_dir" : 'X\(//\)$' \| \ + X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X"$as_dir" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + test -d "$as_dir" && break + done + test -z "$as_dirs" || eval "mkdir $as_dirs" + } || test -d "$as_dir" || as_fn_error "cannot create directory $as_dir" + + +} # as_fn_mkdir_p if mkdir -p . 2>/dev/null; then - as_mkdir_p=: + as_mkdir_p='mkdir -p "$as_dir"' else test -d ./-p && rmdir ./-p as_mkdir_p=false @@ -23305,12 +6711,12 @@ as_test_x=' eval sh -c '\'' if test -d "$1"; then - test -d "$1/."; + test -d "$1/."; else - case $1 in - -*)set "./$1";; + case $1 in #( + -*)set "./$1";; esac; - case `ls -ld'$as_ls_L_option' "$1" 2>/dev/null` in + case `ls -ld'$as_ls_L_option' "$1" 2>/dev/null` in #(( ???[sx]*):;;*)false;;esac;fi '\'' sh ' @@ -23325,13 +6731,19 @@ exec 6>&1 +## ----------------------------------- ## +## Main body of $CONFIG_STATUS script. ## +## ----------------------------------- ## +_ASEOF +test $as_write_fail = 0 && chmod +x $CONFIG_STATUS || ac_write_fail=1 -# Save the log message, to keep $[0] and so on meaningful, and to +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +# Save the log message, to keep $0 and so on meaningful, and to # report actual input values of CONFIG_FILES etc. instead of their # values after options handling. ac_log=" -This file was extended by libffi $as_me 3.0.5, which was -generated by GNU Autoconf 2.61. Invocation command line was +This file was extended by libffi $as_me 3.0.9, which was +generated by GNU Autoconf 2.65. Invocation command line was CONFIG_FILES = $CONFIG_FILES CONFIG_HEADERS = $CONFIG_HEADERS @@ -23344,7 +6756,16 @@ _ACEOF -cat >>$CONFIG_STATUS <<_ACEOF +case $ac_config_files in *" +"*) set x $ac_config_files; shift; ac_config_files=$*;; +esac + +case $ac_config_headers in *" +"*) set x $ac_config_headers; shift; ac_config_headers=$*;; +esac + + +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 # Files that config.status was made for. config_files="$ac_config_files" config_headers="$ac_config_headers" @@ -23353,22 +6774,25 @@ _ACEOF -cat >>$CONFIG_STATUS <<\_ACEOF +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 ac_cs_usage="\ -\`$as_me' instantiates files from templates according to the -current configuration. +\`$as_me' instantiates files and other configuration actions +from templates according to the current configuration. Unless the files +and actions are specified as TAGs, all are instantiated by default. -Usage: $0 [OPTIONS] [FILE]... +Usage: $0 [OPTION]... [TAG]... -h, --help print this help, then exit -V, --version print version number and configuration settings, then exit - -q, --quiet do not print progress messages + --config print configuration, then exit + -q, --quiet, --silent + do not print progress messages -d, --debug don't remove temporary files --recheck update $as_me by reconfiguring in the same conditions - --file=FILE[:TEMPLATE] - instantiate the configuration file FILE - --header=FILE[:TEMPLATE] - instantiate the configuration header FILE + --file=FILE[:TEMPLATE] + instantiate the configuration file FILE + --header=FILE[:TEMPLATE] + instantiate the configuration header FILE Configuration files: $config_files @@ -23382,16 +6806,17 @@ Configuration commands: $config_commands -Report bugs to ." +Report bugs to ." _ACEOF -cat >>$CONFIG_STATUS <<_ACEOF +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 +ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`" ac_cs_version="\\ -libffi config.status 3.0.5 -configured by $0, generated by GNU Autoconf 2.61, - with options \\"`echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`\\" +libffi config.status 3.0.9 +configured by $0, generated by GNU Autoconf 2.65, + with options \\"\$ac_cs_config\\" -Copyright (C) 2006 Free Software Foundation, Inc. +Copyright (C) 2009 Free Software Foundation, Inc. This config.status script is free software; the Free Software Foundation gives unlimited permission to copy, distribute and modify it." @@ -23399,11 +6824,12 @@ srcdir='$srcdir' INSTALL='$INSTALL' MKDIR_P='$MKDIR_P' +AWK='$AWK' +test -n "\$AWK" || AWK=awk _ACEOF -cat >>$CONFIG_STATUS <<\_ACEOF -# If no file are specified by the user, then we need to provide default -# value. By we need to know if files were specified by the user. +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +# The default lists apply if the user does not specify any file. ac_need_defaults=: while test $# != 0 do @@ -23425,34 +6851,40 @@ -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r) ac_cs_recheck=: ;; --version | --versio | --versi | --vers | --ver | --ve | --v | -V ) - echo "$ac_cs_version"; exit ;; + $as_echo "$ac_cs_version"; exit ;; + --config | --confi | --conf | --con | --co | --c ) + $as_echo "$ac_cs_config"; exit ;; --debug | --debu | --deb | --de | --d | -d ) debug=: ;; --file | --fil | --fi | --f ) $ac_shift - CONFIG_FILES="$CONFIG_FILES $ac_optarg" + case $ac_optarg in + *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; + esac + as_fn_append CONFIG_FILES " '$ac_optarg'" ac_need_defaults=false;; --header | --heade | --head | --hea ) $ac_shift - CONFIG_HEADERS="$CONFIG_HEADERS $ac_optarg" + case $ac_optarg in + *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; + esac + as_fn_append CONFIG_HEADERS " '$ac_optarg'" ac_need_defaults=false;; --he | --h) # Conflict between --help and --header - { echo "$as_me: error: ambiguous option: $1 -Try \`$0 --help' for more information." >&2 - { (exit 1); exit 1; }; };; + as_fn_error "ambiguous option: \`$1' +Try \`$0 --help' for more information.";; --help | --hel | -h ) - echo "$ac_cs_usage"; exit ;; + $as_echo "$ac_cs_usage"; exit ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil | --si | --s) ac_cs_silent=: ;; # This is an error. - -*) { echo "$as_me: error: unrecognized option: $1 -Try \`$0 --help' for more information." >&2 - { (exit 1); exit 1; }; } ;; + -*) as_fn_error "unrecognized option: \`$1' +Try \`$0 --help' for more information." ;; - *) ac_config_targets="$ac_config_targets $1" + *) as_fn_append ac_config_targets " $1" ac_need_defaults=false ;; esac @@ -23467,27 +6899,29 @@ fi _ACEOF -cat >>$CONFIG_STATUS <<_ACEOF +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 if \$ac_cs_recheck; then - echo "running CONFIG_SHELL=$SHELL $SHELL $0 "$ac_configure_args \$ac_configure_extra_args " --no-create --no-recursion" >&6 - CONFIG_SHELL=$SHELL + set X '$SHELL' '$0' $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion + shift + \$as_echo "running CONFIG_SHELL=$SHELL \$*" >&6 + CONFIG_SHELL='$SHELL' export CONFIG_SHELL - exec $SHELL "$0"$ac_configure_args \$ac_configure_extra_args --no-create --no-recursion + exec "\$@" fi _ACEOF -cat >>$CONFIG_STATUS <<\_ACEOF +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 exec 5>>config.log { echo sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX ## Running $as_me. ## _ASBOX - echo "$ac_log" + $as_echo "$ac_log" } >&5 _ACEOF -cat >>$CONFIG_STATUS <<_ACEOF +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 # # INIT-COMMANDS # @@ -23496,7 +6930,7 @@ _ACEOF -cat >>$CONFIG_STATUS <<\_ACEOF +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # Handling of arguments. for ac_config_target in $ac_config_targets @@ -23511,9 +6945,7 @@ "include/ffi_common.h") CONFIG_LINKS="$CONFIG_LINKS include/ffi_common.h:include/ffi_common.h" ;; "fficonfig.py") CONFIG_FILES="$CONFIG_FILES fficonfig.py" ;; - *) { { echo "$as_me:$LINENO: error: invalid argument: $ac_config_target" >&5 -echo "$as_me: error: invalid argument: $ac_config_target" >&2;} - { (exit 1); exit 1; }; };; + *) as_fn_error "invalid argument: \`$ac_config_target'" "$LINENO" 5;; esac done @@ -23541,7 +6973,7 @@ trap 'exit_status=$? { test -z "$tmp" || test ! -d "$tmp" || rm -fr "$tmp"; } && exit $exit_status ' 0 - trap '{ (exit 1); exit 1; }' 1 2 13 15 + trap 'as_fn_exit 1' 1 2 13 15 } # Create a (secure) tmp directory for tmp files. @@ -23552,280 +6984,139 @@ { tmp=./conf$$-$RANDOM (umask 077 && mkdir "$tmp") -} || -{ - echo "$me: cannot create a temporary directory in ." >&2 - { (exit 1); exit 1; } -} - -# -# Set up the sed scripts for CONFIG_FILES section. -# +} || as_fn_error "cannot create a temporary directory in ." "$LINENO" 5 -# No need to generate the scripts if there are no CONFIG_FILES. -# This happens for instance when ./config.status config.h +# Set up the scripts for CONFIG_FILES section. +# No need to generate them if there are no CONFIG_FILES. +# This happens for instance with `./config.status config.h'. if test -n "$CONFIG_FILES"; then -_ACEOF - - - -ac_delim='%!_!# ' -for ac_last_try in false false false false false :; do - cat >conf$$subs.sed <<_ACEOF -SHELL!$SHELL$ac_delim -PATH_SEPARATOR!$PATH_SEPARATOR$ac_delim -PACKAGE_NAME!$PACKAGE_NAME$ac_delim -PACKAGE_TARNAME!$PACKAGE_TARNAME$ac_delim -PACKAGE_VERSION!$PACKAGE_VERSION$ac_delim -PACKAGE_STRING!$PACKAGE_STRING$ac_delim -PACKAGE_BUGREPORT!$PACKAGE_BUGREPORT$ac_delim -exec_prefix!$exec_prefix$ac_delim -prefix!$prefix$ac_delim -program_transform_name!$program_transform_name$ac_delim -bindir!$bindir$ac_delim -sbindir!$sbindir$ac_delim -libexecdir!$libexecdir$ac_delim -datarootdir!$datarootdir$ac_delim -datadir!$datadir$ac_delim -sysconfdir!$sysconfdir$ac_delim -sharedstatedir!$sharedstatedir$ac_delim -localstatedir!$localstatedir$ac_delim -includedir!$includedir$ac_delim -oldincludedir!$oldincludedir$ac_delim -docdir!$docdir$ac_delim -infodir!$infodir$ac_delim -htmldir!$htmldir$ac_delim -dvidir!$dvidir$ac_delim -pdfdir!$pdfdir$ac_delim -psdir!$psdir$ac_delim -libdir!$libdir$ac_delim -localedir!$localedir$ac_delim -mandir!$mandir$ac_delim -DEFS!$DEFS$ac_delim -ECHO_C!$ECHO_C$ac_delim -ECHO_N!$ECHO_N$ac_delim -ECHO_T!$ECHO_T$ac_delim -LIBS!$LIBS$ac_delim -build_alias!$build_alias$ac_delim -host_alias!$host_alias$ac_delim -target_alias!$target_alias$ac_delim -build!$build$ac_delim -build_cpu!$build_cpu$ac_delim -build_vendor!$build_vendor$ac_delim -build_os!$build_os$ac_delim -host!$host$ac_delim -host_cpu!$host_cpu$ac_delim -host_vendor!$host_vendor$ac_delim -host_os!$host_os$ac_delim -target!$target$ac_delim -target_cpu!$target_cpu$ac_delim -target_vendor!$target_vendor$ac_delim -target_os!$target_os$ac_delim -INSTALL_PROGRAM!$INSTALL_PROGRAM$ac_delim -INSTALL_SCRIPT!$INSTALL_SCRIPT$ac_delim -INSTALL_DATA!$INSTALL_DATA$ac_delim -am__isrc!$am__isrc$ac_delim -CYGPATH_W!$CYGPATH_W$ac_delim -PACKAGE!$PACKAGE$ac_delim -VERSION!$VERSION$ac_delim -ACLOCAL!$ACLOCAL$ac_delim -AUTOCONF!$AUTOCONF$ac_delim -AUTOMAKE!$AUTOMAKE$ac_delim -AUTOHEADER!$AUTOHEADER$ac_delim -MAKEINFO!$MAKEINFO$ac_delim -install_sh!$install_sh$ac_delim -STRIP!$STRIP$ac_delim -INSTALL_STRIP_PROGRAM!$INSTALL_STRIP_PROGRAM$ac_delim -mkdir_p!$mkdir_p$ac_delim -AWK!$AWK$ac_delim -SET_MAKE!$SET_MAKE$ac_delim -am__leading_dot!$am__leading_dot$ac_delim -AMTAR!$AMTAR$ac_delim -am__tar!$am__tar$ac_delim -am__untar!$am__untar$ac_delim -CC!$CC$ac_delim -CFLAGS!$CFLAGS$ac_delim -LDFLAGS!$LDFLAGS$ac_delim -CPPFLAGS!$CPPFLAGS$ac_delim -ac_ct_CC!$ac_ct_CC$ac_delim -EXEEXT!$EXEEXT$ac_delim -OBJEXT!$OBJEXT$ac_delim -DEPDIR!$DEPDIR$ac_delim -am__include!$am__include$ac_delim -am__quote!$am__quote$ac_delim -AMDEP_TRUE!$AMDEP_TRUE$ac_delim -AMDEP_FALSE!$AMDEP_FALSE$ac_delim -AMDEPBACKSLASH!$AMDEPBACKSLASH$ac_delim -CCDEPMODE!$CCDEPMODE$ac_delim -am__fastdepCC_TRUE!$am__fastdepCC_TRUE$ac_delim -am__fastdepCC_FALSE!$am__fastdepCC_FALSE$ac_delim -CCAS!$CCAS$ac_delim -CCASFLAGS!$CCASFLAGS$ac_delim -CCASDEPMODE!$CCASDEPMODE$ac_delim -am__fastdepCCAS_TRUE!$am__fastdepCCAS_TRUE$ac_delim -am__fastdepCCAS_FALSE!$am__fastdepCCAS_FALSE$ac_delim -SED!$SED$ac_delim -GREP!$GREP$ac_delim -EGREP!$EGREP$ac_delim -LN_S!$LN_S$ac_delim -ECHO!$ECHO$ac_delim -_ACEOF - - if test `sed -n "s/.*$ac_delim\$/X/p" conf$$subs.sed | grep -c X` = 97; then - break - elif $ac_last_try; then - { { echo "$as_me:$LINENO: error: could not make $CONFIG_STATUS" >&5 -echo "$as_me: error: could not make $CONFIG_STATUS" >&2;} - { (exit 1); exit 1; }; } - else - ac_delim="$ac_delim!$ac_delim _$ac_delim!! " - fi -done -ac_eof=`sed -n '/^CEOF[0-9]*$/s/CEOF/0/p' conf$$subs.sed` -if test -n "$ac_eof"; then - ac_eof=`echo "$ac_eof" | sort -nru | sed 1q` - ac_eof=`expr $ac_eof + 1` +ac_cr=`echo X | tr X '\015'` +# On cygwin, bash can eat \r inside `` if the user requested igncr. +# But we know of no other shell where ac_cr would be empty at this +# point, so we can use a bashism as a fallback. +if test "x$ac_cr" = x; then + eval ac_cr=\$\'\\r\' +fi +ac_cs_awk_cr=`$AWK 'BEGIN { print "a\rb" }' /dev/null` +if test "$ac_cs_awk_cr" = "a${ac_cr}b"; then + ac_cs_awk_cr='\r' +else + ac_cs_awk_cr=$ac_cr fi -cat >>$CONFIG_STATUS <<_ACEOF -cat >"\$tmp/subs-1.sed" <<\CEOF$ac_eof -/@[a-zA-Z_][a-zA-Z_0-9]*@/!b -_ACEOF -sed ' -s/[,\\&]/\\&/g; s/@/@|#_!!_#|/g -s/^/s,@/; s/!/@,|#_!!_#|/ -:n -t n -s/'"$ac_delim"'$/,g/; t -s/$/\\/; p -N; s/^.*\n//; s/[,\\&]/\\&/g; s/@/@|#_!!_#|/g; b n -' >>$CONFIG_STATUS >$CONFIG_STATUS <<_ACEOF -CEOF$ac_eof +echo 'BEGIN {' >"$tmp/subs1.awk" && _ACEOF +{ + echo "cat >conf$$subs.awk <<_ACEOF" && + echo "$ac_subst_vars" | sed 's/.*/&!$&$ac_delim/' && + echo "_ACEOF" +} >conf$$subs.sh || + as_fn_error "could not make $CONFIG_STATUS" "$LINENO" 5 +ac_delim_num=`echo "$ac_subst_vars" | grep -c '$'` ac_delim='%!_!# ' for ac_last_try in false false false false false :; do - cat >conf$$subs.sed <<_ACEOF -AR!$AR$ac_delim -RANLIB!$RANLIB$ac_delim -CPP!$CPP$ac_delim -CXX!$CXX$ac_delim -CXXFLAGS!$CXXFLAGS$ac_delim -ac_ct_CXX!$ac_ct_CXX$ac_delim -CXXDEPMODE!$CXXDEPMODE$ac_delim -am__fastdepCXX_TRUE!$am__fastdepCXX_TRUE$ac_delim -am__fastdepCXX_FALSE!$am__fastdepCXX_FALSE$ac_delim -CXXCPP!$CXXCPP$ac_delim -F77!$F77$ac_delim -FFLAGS!$FFLAGS$ac_delim -ac_ct_F77!$ac_ct_F77$ac_delim -LIBTOOL!$LIBTOOL$ac_delim -MAINTAINER_MODE_TRUE!$MAINTAINER_MODE_TRUE$ac_delim -MAINTAINER_MODE_FALSE!$MAINTAINER_MODE_FALSE$ac_delim -MAINT!$MAINT$ac_delim -TESTSUBDIR_TRUE!$TESTSUBDIR_TRUE$ac_delim -TESTSUBDIR_FALSE!$TESTSUBDIR_FALSE$ac_delim -AM_RUNTESTFLAGS!$AM_RUNTESTFLAGS$ac_delim -MIPS_TRUE!$MIPS_TRUE$ac_delim -MIPS_FALSE!$MIPS_FALSE$ac_delim -SPARC_TRUE!$SPARC_TRUE$ac_delim -SPARC_FALSE!$SPARC_FALSE$ac_delim -X86_TRUE!$X86_TRUE$ac_delim -X86_FALSE!$X86_FALSE$ac_delim -X86_FREEBSD_TRUE!$X86_FREEBSD_TRUE$ac_delim -X86_FREEBSD_FALSE!$X86_FREEBSD_FALSE$ac_delim -X86_WIN32_TRUE!$X86_WIN32_TRUE$ac_delim -X86_WIN32_FALSE!$X86_WIN32_FALSE$ac_delim -X86_DARWIN_TRUE!$X86_DARWIN_TRUE$ac_delim -X86_DARWIN_FALSE!$X86_DARWIN_FALSE$ac_delim -ALPHA_TRUE!$ALPHA_TRUE$ac_delim -ALPHA_FALSE!$ALPHA_FALSE$ac_delim -IA64_TRUE!$IA64_TRUE$ac_delim -IA64_FALSE!$IA64_FALSE$ac_delim -M32R_TRUE!$M32R_TRUE$ac_delim -M32R_FALSE!$M32R_FALSE$ac_delim -M68K_TRUE!$M68K_TRUE$ac_delim -M68K_FALSE!$M68K_FALSE$ac_delim -POWERPC_TRUE!$POWERPC_TRUE$ac_delim -POWERPC_FALSE!$POWERPC_FALSE$ac_delim -POWERPC_AIX_TRUE!$POWERPC_AIX_TRUE$ac_delim -POWERPC_AIX_FALSE!$POWERPC_AIX_FALSE$ac_delim -POWERPC_DARWIN_TRUE!$POWERPC_DARWIN_TRUE$ac_delim -POWERPC_DARWIN_FALSE!$POWERPC_DARWIN_FALSE$ac_delim -POWERPC_FREEBSD_TRUE!$POWERPC_FREEBSD_TRUE$ac_delim -POWERPC_FREEBSD_FALSE!$POWERPC_FREEBSD_FALSE$ac_delim -ARM_TRUE!$ARM_TRUE$ac_delim -ARM_FALSE!$ARM_FALSE$ac_delim -LIBFFI_CRIS_TRUE!$LIBFFI_CRIS_TRUE$ac_delim -LIBFFI_CRIS_FALSE!$LIBFFI_CRIS_FALSE$ac_delim -FRV_TRUE!$FRV_TRUE$ac_delim -FRV_FALSE!$FRV_FALSE$ac_delim -S390_TRUE!$S390_TRUE$ac_delim -S390_FALSE!$S390_FALSE$ac_delim -X86_64_TRUE!$X86_64_TRUE$ac_delim -X86_64_FALSE!$X86_64_FALSE$ac_delim -SH_TRUE!$SH_TRUE$ac_delim -SH_FALSE!$SH_FALSE$ac_delim -SH64_TRUE!$SH64_TRUE$ac_delim -SH64_FALSE!$SH64_FALSE$ac_delim -PA_LINUX_TRUE!$PA_LINUX_TRUE$ac_delim -PA_LINUX_FALSE!$PA_LINUX_FALSE$ac_delim -PA_HPUX_TRUE!$PA_HPUX_TRUE$ac_delim -PA_HPUX_FALSE!$PA_HPUX_FALSE$ac_delim -PA64_HPUX_TRUE!$PA64_HPUX_TRUE$ac_delim -PA64_HPUX_FALSE!$PA64_HPUX_FALSE$ac_delim -ALLOCA!$ALLOCA$ac_delim -HAVE_LONG_DOUBLE!$HAVE_LONG_DOUBLE$ac_delim -TARGET!$TARGET$ac_delim -TARGETDIR!$TARGETDIR$ac_delim -toolexecdir!$toolexecdir$ac_delim -toolexeclibdir!$toolexeclibdir$ac_delim -LIBOBJS!$LIBOBJS$ac_delim -LTLIBOBJS!$LTLIBOBJS$ac_delim -_ACEOF + . ./conf$$subs.sh || + as_fn_error "could not make $CONFIG_STATUS" "$LINENO" 5 - if test `sed -n "s/.*$ac_delim\$/X/p" conf$$subs.sed | grep -c X` = 76; then + ac_delim_n=`sed -n "s/.*$ac_delim\$/X/p" conf$$subs.awk | grep -c X` + if test $ac_delim_n = $ac_delim_num; then break elif $ac_last_try; then - { { echo "$as_me:$LINENO: error: could not make $CONFIG_STATUS" >&5 -echo "$as_me: error: could not make $CONFIG_STATUS" >&2;} - { (exit 1); exit 1; }; } + as_fn_error "could not make $CONFIG_STATUS" "$LINENO" 5 else ac_delim="$ac_delim!$ac_delim _$ac_delim!! " fi done +rm -f conf$$subs.sh -ac_eof=`sed -n '/^CEOF[0-9]*$/s/CEOF/0/p' conf$$subs.sed` -if test -n "$ac_eof"; then - ac_eof=`echo "$ac_eof" | sort -nru | sed 1q` - ac_eof=`expr $ac_eof + 1` -fi - -cat >>$CONFIG_STATUS <<_ACEOF -cat >"\$tmp/subs-2.sed" <<\CEOF$ac_eof -/@[a-zA-Z_][a-zA-Z_0-9]*@/!b end -_ACEOF -sed ' -s/[,\\&]/\\&/g; s/@/@|#_!!_#|/g -s/^/s,@/; s/!/@,|#_!!_#|/ -:n -t n -s/'"$ac_delim"'$/,g/; t -s/$/\\/; p -N; s/^.*\n//; s/[,\\&]/\\&/g; s/@/@|#_!!_#|/g; b n -' >>$CONFIG_STATUS >$CONFIG_STATUS <<_ACEOF -:end -s/|#_!!_#|//g -CEOF$ac_eof +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 +cat >>"\$tmp/subs1.awk" <<\\_ACAWK && _ACEOF +sed -n ' +h +s/^/S["/; s/!.*/"]=/ +p +g +s/^[^!]*!// +:repl +t repl +s/'"$ac_delim"'$// +t delim +:nl +h +s/\(.\{148\}\)..*/\1/ +t more1 +s/["\\]/\\&/g; s/^/"/; s/$/\\n"\\/ +p +n +b repl +:more1 +s/["\\]/\\&/g; s/^/"/; s/$/"\\/ +p +g +s/.\{148\}// +t nl +:delim +h +s/\(.\{148\}\)..*/\1/ +t more2 +s/["\\]/\\&/g; s/^/"/; s/$/"/ +p +b +:more2 +s/["\\]/\\&/g; s/^/"/; s/$/"\\/ +p +g +s/.\{148\}// +t delim +' >$CONFIG_STATUS || ac_write_fail=1 +rm -f conf$$subs.awk +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 +_ACAWK +cat >>"\$tmp/subs1.awk" <<_ACAWK && + for (key in S) S_is_set[key] = 1 + FS = "" + +} +{ + line = $ 0 + nfields = split(line, field, "@") + substed = 0 + len = length(field[1]) + for (i = 2; i < nfields; i++) { + key = field[i] + keylen = length(key) + if (S_is_set[key]) { + value = S[key] + line = substr(line, 1, len) "" value "" substr(line, len + keylen + 3) + len += length(value) + length(field[++i]) + substed = 1 + } else + len += 1 + keylen + } + + print line +} +_ACAWK +_ACEOF +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +if sed "s/$ac_cr//" < /dev/null > /dev/null 2>&1; then + sed "s/$ac_cr\$//; s/$ac_cr/$ac_cs_awk_cr/g" +else + cat +fi < "$tmp/subs1.awk" > "$tmp/subs.awk" \ + || as_fn_error "could not setup config files machinery" "$LINENO" 5 +_ACEOF # VPATH may cause trouble with some makes, so we remove $(srcdir), # ${srcdir} and @srcdir@ from VPATH if srcdir is ".", strip leading and @@ -23842,20 +7133,128 @@ }' fi -cat >>$CONFIG_STATUS <<\_ACEOF +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 fi # test -n "$CONFIG_FILES" +# Set up the scripts for CONFIG_HEADERS section. +# No need to generate them if there are no CONFIG_HEADERS. +# This happens for instance with `./config.status Makefile'. +if test -n "$CONFIG_HEADERS"; then +cat >"$tmp/defines.awk" <<\_ACAWK || +BEGIN { +_ACEOF + +# Transform confdefs.h into an awk script `defines.awk', embedded as +# here-document in config.status, that substitutes the proper values into +# config.h.in to produce config.h. + +# Create a delimiter string that does not exist in confdefs.h, to ease +# handling of long lines. +ac_delim='%!_!# ' +for ac_last_try in false false :; do + ac_t=`sed -n "/$ac_delim/p" confdefs.h` + if test -z "$ac_t"; then + break + elif $ac_last_try; then + as_fn_error "could not make $CONFIG_HEADERS" "$LINENO" 5 + else + ac_delim="$ac_delim!$ac_delim _$ac_delim!! " + fi +done + +# For the awk script, D is an array of macro values keyed by name, +# likewise P contains macro parameters if any. Preserve backslash +# newline sequences. + +ac_word_re=[_$as_cr_Letters][_$as_cr_alnum]* +sed -n ' +s/.\{148\}/&'"$ac_delim"'/g +t rset +:rset +s/^[ ]*#[ ]*define[ ][ ]*/ / +t def +d +:def +s/\\$// +t bsnl +s/["\\]/\\&/g +s/^ \('"$ac_word_re"'\)\(([^()]*)\)[ ]*\(.*\)/P["\1"]="\2"\ +D["\1"]=" \3"/p +s/^ \('"$ac_word_re"'\)[ ]*\(.*\)/D["\1"]=" \2"/p +d +:bsnl +s/["\\]/\\&/g +s/^ \('"$ac_word_re"'\)\(([^()]*)\)[ ]*\(.*\)/P["\1"]="\2"\ +D["\1"]=" \3\\\\\\n"\\/p +t cont +s/^ \('"$ac_word_re"'\)[ ]*\(.*\)/D["\1"]=" \2\\\\\\n"\\/p +t cont +d +:cont +n +s/.\{148\}/&'"$ac_delim"'/g +t clear +:clear +s/\\$// +t bsnlc +s/["\\]/\\&/g; s/^/"/; s/$/"/p +d +:bsnlc +s/["\\]/\\&/g; s/^/"/; s/$/\\\\\\n"\\/p +b cont +' >$CONFIG_STATUS || ac_write_fail=1 + +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 + for (key in D) D_is_set[key] = 1 + FS = "" +} +/^[\t ]*#[\t ]*(define|undef)[\t ]+$ac_word_re([\t (]|\$)/ { + line = \$ 0 + split(line, arg, " ") + if (arg[1] == "#") { + defundef = arg[2] + mac1 = arg[3] + } else { + defundef = substr(arg[1], 2) + mac1 = arg[2] + } + split(mac1, mac2, "(") #) + macro = mac2[1] + prefix = substr(line, 1, index(line, defundef) - 1) + if (D_is_set[macro]) { + # Preserve the white space surrounding the "#". + print prefix "define", macro P[macro] D[macro] + next + } else { + # Replace #undef with comments. This is necessary, for example, + # in the case of _POSIX_SOURCE, which is predefined and required + # on some systems where configure will not decide to define it. + if (defundef == "undef") { + print "/*", prefix defundef, macro, "*/" + next + } + } +} +{ print } +_ACAWK +_ACEOF +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 + as_fn_error "could not setup config headers machinery" "$LINENO" 5 +fi # test -n "$CONFIG_HEADERS" + -for ac_tag in :F $CONFIG_FILES :H $CONFIG_HEADERS :L $CONFIG_LINKS :C $CONFIG_COMMANDS +eval set X " :F $CONFIG_FILES :H $CONFIG_HEADERS :L $CONFIG_LINKS :C $CONFIG_COMMANDS" +shift +for ac_tag do case $ac_tag in :[FHLC]) ac_mode=$ac_tag; continue;; esac case $ac_mode$ac_tag in :[FHL]*:*);; - :L* | :C*:*) { { echo "$as_me:$LINENO: error: Invalid tag $ac_tag." >&5 -echo "$as_me: error: Invalid tag $ac_tag." >&2;} - { (exit 1); exit 1; }; };; + :L* | :C*:*) as_fn_error "invalid tag \`$ac_tag'" "$LINENO" 5;; :[FH]-) ac_tag=-:-;; :[FH]*) ac_tag=$ac_tag:$ac_tag.in;; esac @@ -23883,26 +7282,34 @@ [\\/$]*) false;; *) test -f "$srcdir/$ac_f" && ac_f="$srcdir/$ac_f";; esac || - { { echo "$as_me:$LINENO: error: cannot find input file: $ac_f" >&5 -echo "$as_me: error: cannot find input file: $ac_f" >&2;} - { (exit 1); exit 1; }; };; + as_fn_error "cannot find input file: \`$ac_f'" "$LINENO" 5;; esac - ac_file_inputs="$ac_file_inputs $ac_f" + case $ac_f in *\'*) ac_f=`$as_echo "$ac_f" | sed "s/'/'\\\\\\\\''/g"`;; esac + as_fn_append ac_file_inputs " '$ac_f'" done # Let's still pretend it is `configure' which instantiates (i.e., don't # use $as_me), people would be surprised to read: # /* config.h. Generated by config.status. */ - configure_input="Generated from "`IFS=: - echo $* | sed 's|^[^:]*/||;s|:[^:]*/|, |g'`" by configure." + configure_input='Generated from '` + $as_echo "$*" | sed 's|^[^:]*/||;s|:[^:]*/|, |g' + `' by configure.' if test x"$ac_file" != x-; then configure_input="$ac_file. $configure_input" - { echo "$as_me:$LINENO: creating $ac_file" >&5 -echo "$as_me: creating $ac_file" >&6;} + { $as_echo "$as_me:${as_lineno-$LINENO}: creating $ac_file" >&5 +$as_echo "$as_me: creating $ac_file" >&6;} fi + # Neutralize special characters interpreted by sed in replacement strings. + case $configure_input in #( + *\&* | *\|* | *\\* ) + ac_sed_conf_input=`$as_echo "$configure_input" | + sed 's/[\\\\&|]/\\\\&/g'`;; #( + *) ac_sed_conf_input=$configure_input;; + esac case $ac_tag in - *:-:* | *:-) cat >"$tmp/stdin";; + *:-:* | *:-) cat >"$tmp/stdin" \ + || as_fn_error "could not create $ac_file" "$LINENO" 5 ;; esac ;; esac @@ -23912,42 +7319,7 @@ X"$ac_file" : 'X\(//\)[^/]' \| \ X"$ac_file" : 'X\(//\)$' \| \ X"$ac_file" : 'X\(/\)' \| . 2>/dev/null || -echo X"$ac_file" | - sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ - s//\1/ - q - } - /^X\(\/\/\)[^/].*/{ - s//\1/ - q - } - /^X\(\/\/\)$/{ - s//\1/ - q - } - /^X\(\/\).*/{ - s//\1/ - q - } - s/.*/./; q'` - { as_dir="$ac_dir" - case $as_dir in #( - -*) as_dir=./$as_dir;; - esac - test -d "$as_dir" || { $as_mkdir_p && mkdir -p "$as_dir"; } || { - as_dirs= - while :; do - case $as_dir in #( - *\'*) as_qdir=`echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #( - *) as_qdir=$as_dir;; - esac - as_dirs="'$as_qdir' $as_dirs" - as_dir=`$as_dirname -- "$as_dir" || -$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ - X"$as_dir" : 'X\(//\)[^/]' \| \ - X"$as_dir" : 'X\(//\)$' \| \ - X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || -echo X"$as_dir" | +$as_echo X"$ac_file" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q @@ -23965,20 +7337,15 @@ q } s/.*/./; q'` - test -d "$as_dir" && break - done - test -z "$as_dirs" || eval "mkdir $as_dirs" - } || test -d "$as_dir" || { { echo "$as_me:$LINENO: error: cannot create directory $as_dir" >&5 -echo "$as_me: error: cannot create directory $as_dir" >&2;} - { (exit 1); exit 1; }; }; } + as_dir="$ac_dir"; as_fn_mkdir_p ac_builddir=. case "$ac_dir" in .) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; *) - ac_dir_suffix=/`echo "$ac_dir" | sed 's,^\.[\\/],,'` + ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'` # A ".." for each directory in $ac_dir_suffix. - ac_top_builddir_sub=`echo "$ac_dir_suffix" | sed 's,/[^\\/]*,/..,g;s,/,,'` + ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` case $ac_top_builddir_sub in "") ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; @@ -24023,12 +7390,12 @@ esac _ACEOF -cat >>$CONFIG_STATUS <<\_ACEOF +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # If the template does not know about datarootdir, expand it. # FIXME: This hack should be removed a few years after 2.60. ac_datarootdir_hack=; ac_datarootdir_seen= - -case `sed -n '/datarootdir/ { +ac_sed_dataroot=' +/datarootdir/ { p q } @@ -24036,36 +7403,37 @@ /@docdir@/p /@infodir@/p /@localedir@/p -/@mandir@/p -' $ac_file_inputs` in +/@mandir@/p' +case `eval "sed -n \"\$ac_sed_dataroot\" $ac_file_inputs"` in *datarootdir*) ac_datarootdir_seen=yes;; *@datadir@*|*@docdir@*|*@infodir@*|*@localedir@*|*@mandir@*) - { echo "$as_me:$LINENO: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&5 -echo "$as_me: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&5 +$as_echo "$as_me: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&2;} _ACEOF -cat >>$CONFIG_STATUS <<_ACEOF +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_datarootdir_hack=' s&@datadir@&$datadir&g s&@docdir@&$docdir&g s&@infodir@&$infodir&g s&@localedir@&$localedir&g s&@mandir@&$mandir&g - s&\\\${datarootdir}&$datarootdir&g' ;; + s&\\\${datarootdir}&$datarootdir&g' ;; esac _ACEOF # Neutralize VPATH when `$srcdir' = `.'. # Shell code in configure.ac might set extrasub. # FIXME: do we really want to maintain this feature? -cat >>$CONFIG_STATUS <<_ACEOF - sed "$ac_vpsub +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 +ac_sed_extra="$ac_vpsub $extrasub _ACEOF -cat >>$CONFIG_STATUS <<\_ACEOF +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 :t /@[a-zA-Z_][a-zA-Z_0-9]*@/!b -s&@configure_input@&$configure_input&;t t +s|@configure_input@|$ac_sed_conf_input|;t t s&@top_builddir@&$ac_top_builddir_sub&;t t +s&@top_build_prefix@&$ac_top_build_prefix&;t t s&@srcdir@&$ac_srcdir&;t t s&@abs_srcdir@&$ac_abs_srcdir&;t t s&@top_srcdir@&$ac_top_srcdir&;t t @@ -24076,135 +7444,65 @@ s&@INSTALL@&$ac_INSTALL&;t t s&@MKDIR_P@&$ac_MKDIR_P&;t t $ac_datarootdir_hack -" $ac_file_inputs | sed -f "$tmp/subs-1.sed" | sed -f "$tmp/subs-2.sed" >$tmp/out +" +eval sed \"\$ac_sed_extra\" "$ac_file_inputs" | $AWK -f "$tmp/subs.awk" >$tmp/out \ + || as_fn_error "could not create $ac_file" "$LINENO" 5 test -z "$ac_datarootdir_hack$ac_datarootdir_seen" && { ac_out=`sed -n '/\${datarootdir}/p' "$tmp/out"`; test -n "$ac_out"; } && { ac_out=`sed -n '/^[ ]*datarootdir[ ]*:*=/p' "$tmp/out"`; test -z "$ac_out"; } && - { echo "$as_me:$LINENO: WARNING: $ac_file contains a reference to the variable \`datarootdir' + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file contains a reference to the variable \`datarootdir' which seems to be undefined. Please make sure it is defined." >&5 -echo "$as_me: WARNING: $ac_file contains a reference to the variable \`datarootdir' +$as_echo "$as_me: WARNING: $ac_file contains a reference to the variable \`datarootdir' which seems to be undefined. Please make sure it is defined." >&2;} rm -f "$tmp/stdin" case $ac_file in - -) cat "$tmp/out"; rm -f "$tmp/out";; - *) rm -f "$ac_file"; mv "$tmp/out" $ac_file;; - esac + -) cat "$tmp/out" && rm -f "$tmp/out";; + *) rm -f "$ac_file" && mv "$tmp/out" "$ac_file";; + esac \ + || as_fn_error "could not create $ac_file" "$LINENO" 5 ;; :H) # # CONFIG_HEADER # -_ACEOF - -# Transform confdefs.h into a sed script `conftest.defines', that -# substitutes the proper values into config.h.in to produce config.h. -rm -f conftest.defines conftest.tail -# First, append a space to every undef/define line, to ease matching. -echo 's/$/ /' >conftest.defines -# Then, protect against being on the right side of a sed subst, or in -# an unquoted here document, in config.status. If some macros were -# called several times there might be several #defines for the same -# symbol, which is useless. But do not sort them, since the last -# AC_DEFINE must be honored. -ac_word_re=[_$as_cr_Letters][_$as_cr_alnum]* -# These sed commands are passed to sed as "A NAME B PARAMS C VALUE D", where -# NAME is the cpp macro being defined, VALUE is the value it is being given. -# PARAMS is the parameter list in the macro definition--in most cases, it's -# just an empty string. -ac_dA='s,^\\([ #]*\\)[^ ]*\\([ ]*' -ac_dB='\\)[ (].*,\\1define\\2' -ac_dC=' ' -ac_dD=' ,' - -uniq confdefs.h | - sed -n ' - t rset - :rset - s/^[ ]*#[ ]*define[ ][ ]*// - t ok - d - :ok - s/[\\&,]/\\&/g - s/^\('"$ac_word_re"'\)\(([^()]*)\)[ ]*\(.*\)/ '"$ac_dA"'\1'"$ac_dB"'\2'"${ac_dC}"'\3'"$ac_dD"'/p - s/^\('"$ac_word_re"'\)[ ]*\(.*\)/'"$ac_dA"'\1'"$ac_dB$ac_dC"'\2'"$ac_dD"'/p - ' >>conftest.defines - -# Remove the space that was appended to ease matching. -# Then replace #undef with comments. This is necessary, for -# example, in the case of _POSIX_SOURCE, which is predefined and required -# on some systems where configure will not decide to define it. -# (The regexp can be short, since the line contains either #define or #undef.) -echo 's/ $// -s,^[ #]*u.*,/* & */,' >>conftest.defines - -# Break up conftest.defines: -ac_max_sed_lines=50 - -# First sed command is: sed -f defines.sed $ac_file_inputs >"$tmp/out1" -# Second one is: sed -f defines.sed "$tmp/out1" >"$tmp/out2" -# Third one will be: sed -f defines.sed "$tmp/out2" >"$tmp/out1" -# et cetera. -ac_in='$ac_file_inputs' -ac_out='"$tmp/out1"' -ac_nxt='"$tmp/out2"' - -while : -do - # Write a here document: - cat >>$CONFIG_STATUS <<_ACEOF - # First, check the format of the line: - cat >"\$tmp/defines.sed" <<\\CEOF -/^[ ]*#[ ]*undef[ ][ ]*$ac_word_re[ ]*\$/b def -/^[ ]*#[ ]*define[ ][ ]*$ac_word_re[( ]/b def -b -:def -_ACEOF - sed ${ac_max_sed_lines}q conftest.defines >>$CONFIG_STATUS - echo 'CEOF - sed -f "$tmp/defines.sed"' "$ac_in >$ac_out" >>$CONFIG_STATUS - ac_in=$ac_out; ac_out=$ac_nxt; ac_nxt=$ac_in - sed 1,${ac_max_sed_lines}d conftest.defines >conftest.tail - grep . conftest.tail >/dev/null || break - rm -f conftest.defines - mv conftest.tail conftest.defines -done -rm -f conftest.defines conftest.tail - -echo "ac_result=$ac_in" >>$CONFIG_STATUS -cat >>$CONFIG_STATUS <<\_ACEOF if test x"$ac_file" != x-; then - echo "/* $configure_input */" >"$tmp/config.h" - cat "$ac_result" >>"$tmp/config.h" - if diff $ac_file "$tmp/config.h" >/dev/null 2>&1; then - { echo "$as_me:$LINENO: $ac_file is unchanged" >&5 -echo "$as_me: $ac_file is unchanged" >&6;} + { + $as_echo "/* $configure_input */" \ + && eval '$AWK -f "$tmp/defines.awk"' "$ac_file_inputs" + } >"$tmp/config.h" \ + || as_fn_error "could not create $ac_file" "$LINENO" 5 + if diff "$ac_file" "$tmp/config.h" >/dev/null 2>&1; then + { $as_echo "$as_me:${as_lineno-$LINENO}: $ac_file is unchanged" >&5 +$as_echo "$as_me: $ac_file is unchanged" >&6;} else - rm -f $ac_file - mv "$tmp/config.h" $ac_file + rm -f "$ac_file" + mv "$tmp/config.h" "$ac_file" \ + || as_fn_error "could not create $ac_file" "$LINENO" 5 fi else - echo "/* $configure_input */" - cat "$ac_result" + $as_echo "/* $configure_input */" \ + && eval '$AWK -f "$tmp/defines.awk"' "$ac_file_inputs" \ + || as_fn_error "could not create -" "$LINENO" 5 fi - rm -f "$tmp/out12" -# Compute $ac_file's index in $config_headers. +# Compute "$ac_file"'s index in $config_headers. +_am_arg="$ac_file" _am_stamp_count=1 for _am_header in $config_headers :; do case $_am_header in - $ac_file | $ac_file:* ) + $_am_arg | $_am_arg:* ) break ;; * ) _am_stamp_count=`expr $_am_stamp_count + 1` ;; esac done -echo "timestamp for $ac_file" >`$as_dirname -- $ac_file || -$as_expr X$ac_file : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ - X$ac_file : 'X\(//\)[^/]' \| \ - X$ac_file : 'X\(//\)$' \| \ - X$ac_file : 'X\(/\)' \| . 2>/dev/null || -echo X$ac_file | +echo "timestamp for $_am_arg" >`$as_dirname -- "$_am_arg" || +$as_expr X"$_am_arg" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$_am_arg" : 'X\(//\)[^/]' \| \ + X"$_am_arg" : 'X\(//\)$' \| \ + X"$_am_arg" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X"$_am_arg" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q @@ -24228,52 +7526,67 @@ # CONFIG_LINK # - { echo "$as_me:$LINENO: linking $srcdir/$ac_source to $ac_file" >&5 -echo "$as_me: linking $srcdir/$ac_source to $ac_file" >&6;} + if test "$ac_source" = "$ac_file" && test "$srcdir" = '.'; then + : + else + # Prefer the file from the source tree if names are identical. + if test "$ac_source" = "$ac_file" || test ! -r "$ac_source"; then + ac_source=$srcdir/$ac_source + fi - if test ! -r "$srcdir/$ac_source"; then - { { echo "$as_me:$LINENO: error: $srcdir/$ac_source: file not found" >&5 -echo "$as_me: error: $srcdir/$ac_source: file not found" >&2;} - { (exit 1); exit 1; }; } - fi - rm -f "$ac_file" + { $as_echo "$as_me:${as_lineno-$LINENO}: linking $ac_source to $ac_file" >&5 +$as_echo "$as_me: linking $ac_source to $ac_file" >&6;} - # Try a relative symlink, then a hard link, then a copy. - case $srcdir in - [\\/$]* | ?:[\\/]* ) ac_rel_source=$srcdir/$ac_source ;; - *) ac_rel_source=$ac_top_build_prefix$srcdir/$ac_source ;; - esac - ln -s "$ac_rel_source" "$ac_file" 2>/dev/null || - ln "$srcdir/$ac_source" "$ac_file" 2>/dev/null || - cp -p "$srcdir/$ac_source" "$ac_file" || - { { echo "$as_me:$LINENO: error: cannot link or copy $srcdir/$ac_source to $ac_file" >&5 -echo "$as_me: error: cannot link or copy $srcdir/$ac_source to $ac_file" >&2;} - { (exit 1); exit 1; }; } + if test ! -r "$ac_source"; then + as_fn_error "$ac_source: file not found" "$LINENO" 5 + fi + rm -f "$ac_file" + + # Try a relative symlink, then a hard link, then a copy. + case $srcdir in + [\\/$]* | ?:[\\/]* ) ac_rel_source=$ac_source ;; + *) ac_rel_source=$ac_top_build_prefix$ac_source ;; + esac + ln -s "$ac_rel_source" "$ac_file" 2>/dev/null || + ln "$ac_source" "$ac_file" 2>/dev/null || + cp -p "$ac_source" "$ac_file" || + as_fn_error "cannot link or copy $ac_source to $ac_file" "$LINENO" 5 + fi ;; - :C) { echo "$as_me:$LINENO: executing $ac_file commands" >&5 -echo "$as_me: executing $ac_file commands" >&6;} + :C) { $as_echo "$as_me:${as_lineno-$LINENO}: executing $ac_file commands" >&5 +$as_echo "$as_me: executing $ac_file commands" >&6;} ;; esac case $ac_file$ac_mode in - "depfiles":C) test x"$AMDEP_TRUE" != x"" || for mf in $CONFIG_FILES; do - # Strip MF so we end up with the name of the file. - mf=`echo "$mf" | sed -e 's/:.*$//'` - # Check whether this is an Automake generated Makefile or not. - # We used to match only the files named `Makefile.in', but - # some people rename them; so instead we look at the file content. - # Grep'ing the first line is not enough: some people post-process - # each Makefile.in and add a new line on top of each file to say so. - # Grep'ing the whole file is not good either: AIX grep has a line - # limit of 2048, but all sed's we know have understand at least 4000. - if sed 10q "$mf" | grep '^#.*generated by automake' > /dev/null 2>&1; then - dirpart=`$as_dirname -- "$mf" || + "depfiles":C) test x"$AMDEP_TRUE" != x"" || { + # Autoconf 2.62 quotes --file arguments for eval, but not when files + # are listed without --file. Let's play safe and only enable the eval + # if we detect the quoting. + case $CONFIG_FILES in + *\'*) eval set x "$CONFIG_FILES" ;; + *) set x $CONFIG_FILES ;; + esac + shift + for mf + do + # Strip MF so we end up with the name of the file. + mf=`echo "$mf" | sed -e 's/:.*$//'` + # Check whether this is an Automake generated Makefile or not. + # We used to match only the files named `Makefile.in', but + # some people rename them; so instead we look at the file content. + # Grep'ing the first line is not enough: some people post-process + # each Makefile.in and add a new line on top of each file to say so. + # Grep'ing the whole file is not good either: AIX grep has a line + # limit of 2048, but all sed's we know have understand at least 4000. + if sed -n 's,^#.*generated by automake.*,X,p' "$mf" | grep X >/dev/null 2>&1; then + dirpart=`$as_dirname -- "$mf" || $as_expr X"$mf" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$mf" : 'X\(//\)[^/]' \| \ X"$mf" : 'X\(//\)$' \| \ X"$mf" : 'X\(/\)' \| . 2>/dev/null || -echo X"$mf" | +$as_echo X"$mf" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q @@ -24291,68 +7604,33 @@ q } s/.*/./; q'` - else - continue - fi - # Extract the definition of DEPDIR, am__include, and am__quote - # from the Makefile without running `make'. - DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"` - test -z "$DEPDIR" && continue - am__include=`sed -n 's/^am__include = //p' < "$mf"` - test -z "am__include" && continue - am__quote=`sed -n 's/^am__quote = //p' < "$mf"` - # When using ansi2knr, U may be empty or an underscore; expand it - U=`sed -n 's/^U = //p' < "$mf"` - # Find all dependency output files, they are included files with - # $(DEPDIR) in their names. We invoke sed twice because it is the - # simplest approach to changing $(DEPDIR) to its actual value in the - # expansion. - for file in `sed -n " - s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \ - sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g' -e 's/\$U/'"$U"'/g'`; do - # Make sure the directory exists. - test -f "$dirpart/$file" && continue - fdir=`$as_dirname -- "$file" || + else + continue + fi + # Extract the definition of DEPDIR, am__include, and am__quote + # from the Makefile without running `make'. + DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"` + test -z "$DEPDIR" && continue + am__include=`sed -n 's/^am__include = //p' < "$mf"` + test -z "am__include" && continue + am__quote=`sed -n 's/^am__quote = //p' < "$mf"` + # When using ansi2knr, U may be empty or an underscore; expand it + U=`sed -n 's/^U = //p' < "$mf"` + # Find all dependency output files, they are included files with + # $(DEPDIR) in their names. We invoke sed twice because it is the + # simplest approach to changing $(DEPDIR) to its actual value in the + # expansion. + for file in `sed -n " + s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \ + sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g' -e 's/\$U/'"$U"'/g'`; do + # Make sure the directory exists. + test -f "$dirpart/$file" && continue + fdir=`$as_dirname -- "$file" || $as_expr X"$file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$file" : 'X\(//\)[^/]' \| \ X"$file" : 'X\(//\)$' \| \ X"$file" : 'X\(/\)' \| . 2>/dev/null || -echo X"$file" | - sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ - s//\1/ - q - } - /^X\(\/\/\)[^/].*/{ - s//\1/ - q - } - /^X\(\/\/\)$/{ - s//\1/ - q - } - /^X\(\/\).*/{ - s//\1/ - q - } - s/.*/./; q'` - { as_dir=$dirpart/$fdir - case $as_dir in #( - -*) as_dir=./$as_dir;; - esac - test -d "$as_dir" || { $as_mkdir_p && mkdir -p "$as_dir"; } || { - as_dirs= - while :; do - case $as_dir in #( - *\'*) as_qdir=`echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #( - *) as_qdir=$as_dir;; - esac - as_dirs="'$as_qdir' $as_dirs" - as_dir=`$as_dirname -- "$as_dir" || -$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ - X"$as_dir" : 'X\(//\)[^/]' \| \ - X"$as_dir" : 'X\(//\)$' \| \ - X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || -echo X"$as_dir" | +$as_echo X"$file" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q @@ -24370,16 +7648,12 @@ q } s/.*/./; q'` - test -d "$as_dir" && break + as_dir=$dirpart/$fdir; as_fn_mkdir_p + # echo "creating $dirpart/$file" + echo '# dummy' > "$dirpart/$file" done - test -z "$as_dirs" || eval "mkdir $as_dirs" - } || test -d "$as_dir" || { { echo "$as_me:$LINENO: error: cannot create directory $as_dir" >&5 -echo "$as_me: error: cannot create directory $as_dir" >&2;} - { (exit 1); exit 1; }; }; } - # echo "creating $dirpart/$file" - echo '# dummy' > "$dirpart/$file" done -done +} ;; "include":C) test -d include || mkdir include ;; "src":C) @@ -24391,11 +7665,13 @@ done # for ac_tag -{ (exit 0); exit 0; } +as_fn_exit 0 _ACEOF -chmod +x $CONFIG_STATUS ac_clean_files=$ac_clean_files_save +test $ac_write_fail = 0 || + as_fn_error "write failure creating $CONFIG_STATUS" "$LINENO" 5 + # configure is writing to config.log, and then calls config.status. # config.status does its own redirection, appending to config.log. @@ -24415,6 +7691,10 @@ exec 5>>config.log # Use ||, not &&, to avoid exiting from the if with $? = 1, which # would make configure fail if this is the last instruction. - $ac_cs_success || { (exit 1); exit 1; } + $ac_cs_success || as_fn_exit $? +fi +if test -n "$ac_unrecognized_opts" && test "$enable_option_checking" != no; then + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: unrecognized options: $ac_unrecognized_opts" >&5 +$as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2;} fi Modified: python/branches/py3k/Modules/_ctypes/libffi/configure.ac ============================================================================== --- python/branches/py3k/Modules/_ctypes/libffi/configure.ac (original) +++ python/branches/py3k/Modules/_ctypes/libffi/configure.ac Mon Mar 15 14:25:28 2010 @@ -3,9 +3,9 @@ # file from libffi - slightly patched for ctypes # -AC_PREREQ(2.59) +AC_PREREQ(2.63) -AC_INIT([libffi], [3.0.5], [http://gcc.gnu.org/bugs.html]) +AC_INIT([libffi], [3.0.9], [http://gcc.gnu.org/bugs.html]) AC_CONFIG_HEADERS([fficonfig.h]) AC_CANONICAL_SYSTEM @@ -23,6 +23,7 @@ m4_rename([_AC_ARG_VAR_PRECIOUS],[real_PRECIOUS]) m4_define([_AC_ARG_VAR_PRECIOUS],[]) AC_PROG_CC +m4_undefine([_AC_ARG_VAR_PRECIOUS]) m4_rename([real_PRECIOUS],[_AC_ARG_VAR_PRECIOUS]) AC_SUBST(CFLAGS) @@ -30,6 +31,7 @@ AM_PROG_AS AM_PROG_CC_C_O AC_PROG_LIBTOOL +AC_CONFIG_MACRO_DIR([m4]) AM_MAINTAINER_MODE @@ -52,10 +54,14 @@ TARGET=ARM; TARGETDIR=arm ;; - amd64-*-freebsd*) + amd64-*-freebsd* | amd64-*-openbsd*) TARGET=X86_64; TARGETDIR=x86 ;; + avr32*-*-*) + TARGET=AVR32; TARGETDIR=avr32 + ;; + cris-*-*) TARGET=LIBFFI_CRIS; TARGETDIR=cris ;; @@ -74,11 +80,13 @@ TARGET=PA_HPUX; TARGETDIR=pa ;; - i386-*-freebsd* | i386-*-openbsd*) + i?86-*-freebsd* | i?86-*-openbsd*) TARGET=X86_FREEBSD; TARGETDIR=x86 ;; i?86-win32* | i?86-*-cygwin* | i?86-*-mingw*) TARGET=X86_WIN32; TARGETDIR=x86 + # All mingw/cygwin/win32 builds require this for sharedlib + AM_LTLDFLAGS="-no-undefined" ;; i?86-*-darwin*) TARGET=X86_DARWIN; TARGETDIR=x86 @@ -109,7 +117,9 @@ TARGET=MIPS_IRIX; TARGETDIR=mips ;; mips*-*-linux*) - TARGET=MIPS_LINUX; TARGETDIR=mips + # Support 128-bit long double for NewABI. + HAVE_LONG_DOUBLE='defined(__mips64)' + TARGET=MIPS_IRIX; TARGETDIR=mips ;; powerpc*-*-linux* | powerpc-*-sysv*) @@ -149,14 +159,18 @@ x86_64-*-darwin*) TARGET=X86_DARWIN; TARGETDIR=x86 ;; + x86_64-*-cygwin* | x86_64-*-mingw*) + TARGET=X86_WIN64; TARGETDIR=x86 ;; + x86_64-*-*) TARGET=X86_64; TARGETDIR=x86 ;; esac AC_SUBST(AM_RUNTESTFLAGS) +AC_SUBST(AM_LTLDFLAGS) if test $TARGETDIR = unknown; then AC_MSG_ERROR(["libffi has not been ported to $host."]) @@ -167,6 +181,7 @@ AM_CONDITIONAL(X86, test x$TARGET = xX86) AM_CONDITIONAL(X86_FREEBSD, test x$TARGET = xX86_FREEBSD) AM_CONDITIONAL(X86_WIN32, test x$TARGET = xX86_WIN32) +AM_CONDITIONAL(X86_WIN64, test x$TARGET = xX86_WIN64) AM_CONDITIONAL(X86_DARWIN, test x$TARGET = xX86_DARWIN) AM_CONDITIONAL(ALPHA, test x$TARGET = xALPHA) AM_CONDITIONAL(IA64, test x$TARGET = xIA64) @@ -177,6 +192,7 @@ AM_CONDITIONAL(POWERPC_DARWIN, test x$TARGET = xPOWERPC_DARWIN) AM_CONDITIONAL(POWERPC_FREEBSD, test x$TARGET = xPOWERPC_FREEBSD) AM_CONDITIONAL(ARM, test x$TARGET = xARM) +AM_CONDITIONAL(AVR32, test x$TARGET = xAVR32) AM_CONDITIONAL(LIBFFI_CRIS, test x$TARGET = xLIBFFI_CRIS) AM_CONDITIONAL(FRV, test x$TARGET = xFRV) AM_CONDITIONAL(S390, test x$TARGET = xS390) @@ -251,6 +267,29 @@ fi fi +if test x$TARGET = xX86 || test x$TARGET = xX86_WIN32 || test x$TARGET = xX86_64; then + AC_CACHE_CHECK([assembler supports pc related relocs], + libffi_cv_as_x86_pcrel, [ + libffi_cv_as_x86_pcrel=yes + echo '.text; foo: nop; .data; .long foo-.; .text' > conftest.s + if $CC $CFLAGS -c conftest.s 2>&1 | grep -i warning > /dev/null; then + libffi_cv_as_x86_pcrel=no + fi + ]) + if test "x$libffi_cv_as_x86_pcrel" = xyes; then + AC_DEFINE(HAVE_AS_X86_PCREL, 1, + [Define if your assembler supports PC relative relocs.]) + fi +fi + +case "$target" in + *-apple-darwin10* | *-*-freebsd* | *-*-openbsd* | *-pc-solaris*) + AC_DEFINE(FFI_MMAP_EXEC_WRIT, 1, + [Cannot use malloc on this target, so, we revert to + alternative means]) + ;; +esac + AC_CACHE_CHECK([whether .eh_frame section should be read-only], libffi_cv_ro_eh_frame, [ libffi_cv_ro_eh_frame=no Modified: python/branches/py3k/Modules/_ctypes/libffi/fficonfig.h.in ============================================================================== --- python/branches/py3k/Modules/_ctypes/libffi/fficonfig.h.in (original) +++ python/branches/py3k/Modules/_ctypes/libffi/fficonfig.h.in Mon Mar 15 14:25:28 2010 @@ -1,5 +1,8 @@ /* fficonfig.h.in. Generated from configure.ac by autoheader. */ +/* Define if building universal (internal helper macro) */ +#undef AC_APPLE_UNIVERSAL_BUILD + /* 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. */ @@ -14,6 +17,9 @@ /* Define this if you want extra debugging. */ #undef FFI_DEBUG +/* Cannot use malloc on this target, so, we revert to alternative means */ +#undef FFI_MMAP_EXEC_WRIT + /* Define this is you do not want support for the raw API. */ #undef FFI_NO_RAW_API @@ -37,6 +43,9 @@ */ #undef HAVE_AS_SPARC_UA_PCREL +/* Define if your assembler supports PC relative relocs. */ +#undef HAVE_AS_X86_PCREL + /* Define to 1 if you have the header file. */ #undef HAVE_DLFCN_H @@ -94,6 +103,10 @@ /* Define to 1 if you have the header file. */ #undef HAVE_UNISTD_H +/* Define to the sub-directory in which libtool stores uninstalled libraries. + */ +#undef LT_OBJDIR + /* Define to 1 if your C compiler doesn't accept -c and -o together. */ #undef NO_MINUS_C_MINUS_O @@ -139,9 +152,17 @@ /* Version number of package */ #undef VERSION -/* Define to 1 if your processor stores words with the most significant byte - first (like Motorola and SPARC, unlike Intel and VAX). */ -#undef WORDS_BIGENDIAN +/* Define WORDS_BIGENDIAN to 1 if your processor stores words with the most + significant byte first (like Motorola and SPARC, unlike Intel). */ +#if defined AC_APPLE_UNIVERSAL_BUILD +# if defined __BIG_ENDIAN__ +# define WORDS_BIGENDIAN 1 +# endif +#else +# ifndef WORDS_BIGENDIAN +# undef WORDS_BIGENDIAN +# endif +#endif #ifdef HAVE_HIDDEN_VISIBILITY_ATTRIBUTE Modified: python/branches/py3k/Modules/_ctypes/libffi/include/Makefile.am ============================================================================== --- python/branches/py3k/Modules/_ctypes/libffi/include/Makefile.am (original) +++ python/branches/py3k/Modules/_ctypes/libffi/include/Makefile.am Mon Mar 15 14:25:28 2010 @@ -6,4 +6,4 @@ EXTRA_DIST=ffi.h.in ffi_common.h includesdir = $(libdir)/@PACKAGE_NAME at -@PACKAGE_VERSION@/include -nodist_includes_HEADERS = ffi.h ffitarget.h +nodist_includes_HEADERS = ffi.h ffitarget.h Modified: python/branches/py3k/Modules/_ctypes/libffi/include/Makefile.in ============================================================================== --- python/branches/py3k/Modules/_ctypes/libffi/include/Makefile.in (original) +++ python/branches/py3k/Modules/_ctypes/libffi/include/Makefile.in Mon Mar 15 14:25:28 2010 @@ -1,8 +1,9 @@ -# Makefile.in generated by automake 1.10 from Makefile.am. +# Makefile.in generated by automake 1.11 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, -# 2003, 2004, 2005, 2006 Free Software Foundation, Inc. +# 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, +# Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. @@ -16,8 +17,9 @@ VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ -pkglibdir = $(libdir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c @@ -41,9 +43,10 @@ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) -mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs +mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/fficonfig.h CONFIG_CLEAN_FILES = ffi.h ffitarget.h +CONFIG_CLEAN_VPATH_FILES = SOURCES = DIST_SOURCES = am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; @@ -51,9 +54,23 @@ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; -am__strip_dir = `echo $$p | sed -e 's|^.*/||'`; +am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; +am__install_max = 40 +am__nobase_strip_setup = \ + srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` +am__nobase_strip = \ + for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" +am__nobase_list = $(am__nobase_strip_setup); \ + for p in $$list; do echo "$$p $$p"; done | \ + sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ + $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ + if (++n[$$2] == $(am__install_max)) \ + { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ + END { for (dir in files) print dir, files[dir] }' +am__base_list = \ + sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ + sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__installdirs = "$(DESTDIR)$(includesdir)" -nodist_includesHEADERS_INSTALL = $(INSTALL_HEADER) HEADERS = $(nodist_includes_HEADERS) ETAGS = etags CTAGS = ctags @@ -75,21 +92,17 @@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ -CXX = @CXX@ -CXXCPP = @CXXCPP@ -CXXDEPMODE = @CXXDEPMODE@ -CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ -ECHO = @ECHO@ +DSYMUTIL = @DSYMUTIL@ +DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ -F77 = @F77@ -FFLAGS = @FFLAGS@ +FGREP = @FGREP@ GREP = @GREP@ HAVE_LONG_DOUBLE = @HAVE_LONG_DOUBLE@ INSTALL = @INSTALL@ @@ -97,16 +110,23 @@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +LD = @LD@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ +LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ +NM = @NM@ +NMEDIT = @NMEDIT@ +OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ +OTOOL = @OTOOL@ +OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ @@ -127,8 +147,7 @@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ -ac_ct_CXX = @ac_ct_CXX@ -ac_ct_F77 = @ac_ct_F77@ +ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ @@ -159,6 +178,7 @@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ +lt_ECHO = @lt_ECHO@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ @@ -177,13 +197,14 @@ target_vendor = @target_vendor@ toolexecdir = @toolexecdir@ toolexeclibdir = @toolexeclibdir@ +top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ AUTOMAKE_OPTIONS = foreign DISTCLEANFILES = ffitarget.h EXTRA_DIST = ffi.h.in ffi_common.h includesdir = $(libdir)/@PACKAGE_NAME at -@PACKAGE_VERSION@/include -nodist_includes_HEADERS = ffi.h ffitarget.h +nodist_includes_HEADERS = ffi.h ffitarget.h all: all-am .SUFFIXES: @@ -191,14 +212,14 @@ @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \ - && exit 0; \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ - echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign include/Makefile'; \ - cd $(top_srcdir) && \ - $(AUTOMAKE) --foreign include/Makefile + echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign include/Makefile'; \ + $(am__cd) $(top_srcdir) && \ + $(AUTOMAKE) --foreign include/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ @@ -216,6 +237,7 @@ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(am__aclocal_m4_deps): ffi.h: $(top_builddir)/config.status $(srcdir)/ffi.h.in cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ @@ -227,65 +249,72 @@ install-nodist_includesHEADERS: $(nodist_includes_HEADERS) @$(NORMAL_INSTALL) test -z "$(includesdir)" || $(MKDIR_P) "$(DESTDIR)$(includesdir)" - @list='$(nodist_includes_HEADERS)'; for p in $$list; do \ + @list='$(nodist_includes_HEADERS)'; test -n "$(includesdir)" || list=; \ + for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ - f=$(am__strip_dir) \ - echo " $(nodist_includesHEADERS_INSTALL) '$$d$$p' '$(DESTDIR)$(includesdir)/$$f'"; \ - $(nodist_includesHEADERS_INSTALL) "$$d$$p" "$(DESTDIR)$(includesdir)/$$f"; \ + echo "$$d$$p"; \ + done | $(am__base_list) | \ + while read files; do \ + echo " $(INSTALL_HEADER) $$files '$(DESTDIR)$(includesdir)'"; \ + $(INSTALL_HEADER) $$files "$(DESTDIR)$(includesdir)" || exit $$?; \ done uninstall-nodist_includesHEADERS: @$(NORMAL_UNINSTALL) - @list='$(nodist_includes_HEADERS)'; for p in $$list; do \ - f=$(am__strip_dir) \ - echo " rm -f '$(DESTDIR)$(includesdir)/$$f'"; \ - rm -f "$(DESTDIR)$(includesdir)/$$f"; \ - done + @list='$(nodist_includes_HEADERS)'; test -n "$(includesdir)" || list=; \ + files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ + test -n "$$files" || exit 0; \ + echo " ( cd '$(DESTDIR)$(includesdir)' && rm -f" $$files ")"; \ + cd "$(DESTDIR)$(includesdir)" && rm -f $$files ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ - $(AWK) ' { files[$$0] = 1; } \ - END { for (i in files) print i; }'`; \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ mkid -fID $$unique tags: TAGS TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) - tags=; \ + set x; \ here=`pwd`; \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ - $(AWK) ' { files[$$0] = 1; } \ - END { for (i in files) print i; }'`; \ - if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + shift; \ + if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ - $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ - $$tags $$unique; \ + if test $$# -gt 0; then \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + "$$@" $$unique; \ + else \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + $$unique; \ + fi; \ fi ctags: CTAGS CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) - tags=; \ - here=`pwd`; \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ - $(AWK) ' { files[$$0] = 1; } \ - END { for (i in files) print i; }'`; \ - test -z "$(CTAGS_ARGS)$$tags$$unique" \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ - $$tags $$unique + $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ - && cd $(top_srcdir) \ - && gtags -i $(GTAGS_ARGS) $$here + && $(am__cd) $(top_srcdir) \ + && gtags -i $(GTAGS_ARGS) "$$here" distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags @@ -306,13 +335,17 @@ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d "$(distdir)/$$file"; then \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ - cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ + cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ - cp -pR $$d/$$file $(distdir)$$dir || exit 1; \ + cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ - test -f $(distdir)/$$file \ - || cp -p $$d/$$file $(distdir)/$$file \ + test -f "$(distdir)/$$file" \ + || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done @@ -343,6 +376,7 @@ distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) -test -z "$(DISTCLEANFILES)" || rm -f $(DISTCLEANFILES) maintainer-clean-generic: @@ -362,6 +396,8 @@ html: html-am +html-am: + info: info-am info-am: @@ -370,18 +406,28 @@ install-dvi: install-dvi-am +install-dvi-am: + install-exec-am: install-html: install-html-am +install-html-am: + install-info: install-info-am +install-info-am: + install-man: install-pdf: install-pdf-am +install-pdf-am: + install-ps: install-ps-am +install-ps-am: + installcheck-am: maintainer-clean: maintainer-clean-am @@ -417,6 +463,7 @@ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ tags uninstall uninstall-am uninstall-nodist_includesHEADERS + # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: Modified: python/branches/py3k/Modules/_ctypes/libffi/include/ffi.h.in ============================================================================== --- python/branches/py3k/Modules/_ctypes/libffi/include/ffi.h.in (original) +++ python/branches/py3k/Modules/_ctypes/libffi/include/ffi.h.in Mon Mar 15 14:25:28 2010 @@ -57,9 +57,7 @@ #endif /* Specify which architecture libffi is configured for. */ -#ifndef @TARGET@ #define @TARGET@ -#endif /* ---- System configuration information --------------------------------- */ @@ -67,6 +65,10 @@ #ifndef LIBFFI_ASM +#ifdef _MSC_VER +#define __attribute__(X) +#endif + #include #include @@ -254,7 +256,11 @@ ffi_cif *cif; void (*fun)(ffi_cif*,void*,void**,void*); void *user_data; +#ifdef __GNUC__ } ffi_closure __attribute__((aligned (8))); +#else +} ffi_closure; +#endif void *ffi_closure_alloc (size_t size, void **code); void ffi_closure_free (void *); Modified: python/branches/py3k/Modules/_ctypes/libffi/include/ffi_common.h ============================================================================== --- python/branches/py3k/Modules/_ctypes/libffi/include/ffi_common.h (original) +++ python/branches/py3k/Modules/_ctypes/libffi/include/ffi_common.h Mon Mar 15 14:25:28 2010 @@ -18,7 +18,10 @@ /* Do not move this. Some versions of AIX are very picky about where this is positioned. */ #ifdef __GNUC__ +/* mingw64 defines this already in malloc.h. */ +#ifndef alloca # define alloca __builtin_alloca +#endif # define MAYBE_UNUSED __attribute__((__unused__)) #else # define MAYBE_UNUSED @@ -29,7 +32,11 @@ #pragma alloca # else # ifndef alloca /* predefined by HP cc +Olibcalls */ +# ifdef _MSC_VER +# define alloca _alloca +# else char *alloca (); +# endif # endif # endif # endif @@ -77,6 +84,22 @@ } extended_cif; /* Terse sized type definitions. */ +#if defined(_MSC_VER) || defined(__sgi) +typedef unsigned char UINT8; +typedef signed char SINT8; +typedef unsigned short UINT16; +typedef signed short SINT16; +typedef unsigned int UINT32; +typedef signed int SINT32; +# ifdef _MSC_VER +typedef unsigned __int64 UINT64; +typedef signed __int64 SINT64; +# else +# include +typedef uint64_t UINT64; +typedef int64_t SINT64; +# endif +#else typedef unsigned int UINT8 __attribute__((__mode__(__QI__))); typedef signed int SINT8 __attribute__((__mode__(__QI__))); typedef unsigned int UINT16 __attribute__((__mode__(__HI__))); @@ -85,6 +108,7 @@ typedef signed int SINT32 __attribute__((__mode__(__SI__))); typedef unsigned int UINT64 __attribute__((__mode__(__DI__))); typedef signed int SINT64 __attribute__((__mode__(__DI__))); +#endif typedef float FLOAT32; Modified: python/branches/py3k/Modules/_ctypes/libffi/missing ============================================================================== --- python/branches/py3k/Modules/_ctypes/libffi/missing (original) +++ python/branches/py3k/Modules/_ctypes/libffi/missing Mon Mar 15 14:25:28 2010 @@ -1,9 +1,9 @@ #! /bin/sh # Common stub for a few missing GNU programs while installing. -scriptversion=2004-09-07.08 +scriptversion=2005-06-08.21 -# Copyright (C) 1996, 1997, 1999, 2000, 2002, 2003, 2004 +# Copyright (C) 1996, 1997, 1999, 2000, 2002, 2003, 2004, 2005 # Free Software Foundation, Inc. # Originally by Fran,cois Pinard , 1996. @@ -19,8 +19,8 @@ # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software -# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA -# 02111-1307, USA. +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA +# 02110-1301, USA. # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a @@ -87,12 +87,12 @@ yacc create \`y.tab.[ch]', if possible, from existing .[ch] Send bug reports to ." - exit 0 + exit $? ;; -v|--v|--ve|--ver|--vers|--versi|--versio|--version) echo "missing $scriptversion (GNU Automake)" - exit 0 + exit $? ;; -*) @@ -288,11 +288,18 @@ call might also be the consequence of using a buggy \`make' (AIX, DU, IRIX). You might want to install the \`Texinfo' package or the \`GNU make' package. Grab either from any GNU archive site." + # The file to touch is that specified with -o ... file=`echo "$*" | sed -n 's/.*-o \([^ ]*\).*/\1/p'` if test -z "$file"; then - file=`echo "$*" | sed 's/.* \([^ ]*\) *$/\1/'` - file=`sed -n '/^@setfilename/ { s/.* \([^ ]*\) *$/\1/; p; q; }' $file` - fi + # ... or it is the one specified with @setfilename ... + infile=`echo "$*" | sed 's/.* \([^ ]*\) *$/\1/'` + file=`sed -n '/^@setfilename/ { s/.* \([^ ]*\) *$/\1/; p; q; }' $infile` + # ... or it is derived from the source name (dir/f.texi becomes f.info) + test -z "$file" && file=`echo "$infile" | sed 's,.*/,,;s,.[^.]*$,,'`.info + fi + # If the file does not exist, the user really needs makeinfo; + # let's fail without touching anything. + test -f $file || exit 1 touch $file ;; Modified: python/branches/py3k/Modules/_ctypes/libffi/src/arm/sysv.S ============================================================================== --- python/branches/py3k/Modules/_ctypes/libffi/src/arm/sysv.S (original) +++ python/branches/py3k/Modules/_ctypes/libffi/src/arm/sysv.S Mon Mar 15 14:25:28 2010 @@ -67,11 +67,19 @@ #if defined(__ARM_ARCH_6__) || defined(__ARM_ARCH_6J__) \ || defined(__ARM_ARCH_6K__) || defined(__ARM_ARCH_6Z__) \ - || defined(__ARM_ARCH_6ZK__) + || defined(__ARM_ARCH_6ZK__) || defined(__ARM_ARCH_6T2__) \ + || defined(__ARM_ARCH_6M__) # undef __ARM_ARCH__ # define __ARM_ARCH__ 6 #endif +#if defined(__ARM_ARCH_7__) || defined(__ARM_ARCH_7A__) \ + || defined(__ARM_ARCH_7R__) || defined(__ARM_ARCH_7M__) \ + || defined(__ARM_ARCH_7EM__) +# undef __ARM_ARCH__ +# define __ARM_ARCH__ 7 +#endif + #if __ARM_ARCH__ >= 5 # define call_reg(x) blx x #elif defined (__ARM_ARCH_4T__) @@ -189,7 +197,7 @@ @ return INT cmp r3, #FFI_TYPE_INT -#ifdef __SOFTFP__ +#if defined(__SOFTFP__) || defined(__ARM_EABI__) cmpne r3, #FFI_TYPE_FLOAT #endif streq r0, [r2] @@ -197,12 +205,12 @@ @ return INT64 cmp r3, #FFI_TYPE_SINT64 -#ifdef __SOFTFP__ +#if defined(__SOFTFP__) || defined(__ARM_EABI__) cmpne r3, #FFI_TYPE_DOUBLE #endif stmeqia r2, {r0, r1} -#ifndef __SOFTFP__ +#if !defined(__SOFTFP__) && !defined(__ARM_EABI__) beq LSYM(Lepilogue) @ return FLOAT @@ -245,21 +253,21 @@ beq .Lretint cmp r0, #FFI_TYPE_FLOAT -#ifdef __SOFTFP__ +#if defined(__SOFTFP__) || defined(__ARM_EABI__) beq .Lretint #else beq .Lretfloat #endif cmp r0, #FFI_TYPE_DOUBLE -#ifdef __SOFTFP__ +#if defined(__SOFTFP__) || defined(__ARM_EABI__) beq .Lretlonglong #else beq .Lretdouble #endif cmp r0, #FFI_TYPE_LONGDOUBLE -#ifdef __SOFTFP__ +#if defined(__SOFTFP__) || defined(__ARM_EABI__) beq .Lretlonglong #else beq .Lretlongdouble @@ -278,7 +286,7 @@ ldr r1, [sp, #4] b .Lclosure_epilogue -#ifndef __SOFTFP__ +#if !defined(__SOFTFP__) && !defined(__ARM_EABI__) .Lretfloat: ldfs f0, [sp] b .Lclosure_epilogue Deleted: python/branches/py3k/Modules/_ctypes/libffi/src/darwin/ffitarget.h ============================================================================== --- python/branches/py3k/Modules/_ctypes/libffi/src/darwin/ffitarget.h Mon Mar 15 14:25:28 2010 +++ (empty file) @@ -1,25 +0,0 @@ -/* - * This file is for MacOSX only. Dispatch to the right architecture include - * file based on the current archictecture (instead of relying on a symlink - * created by configure). This makes is possible to build a univeral binary - * of ctypes in one go. - */ -#if defined(__i386__) - -#ifndef X86_DARWIN -#define X86_DARWIN -#endif -#undef POWERPC_DARWIN - -#include "../src/x86/ffitarget.h" - -#elif defined(__ppc__) - -#ifndef POWERPC_DARWIN -#define POWERPC_DARWIN -#endif -#undef X86_DARWIN - -#include "../src/powerpc/ffitarget.h" - -#endif Modified: python/branches/py3k/Modules/_ctypes/libffi/src/frv/ffi.c ============================================================================== --- python/branches/py3k/Modules/_ctypes/libffi/src/frv/ffi.c (original) +++ python/branches/py3k/Modules/_ctypes/libffi/src/frv/ffi.c Mon Mar 15 14:25:28 2010 @@ -1,6 +1,6 @@ /* ----------------------------------------------------------------------- ffi.c - Copyright (C) 2004 Anthony Green - Copyright (C) 2007 Free Software Foundation, Inc. + Copyright (C) 2007 Free Software Foundation, Inc. Copyright (C) 2008 Red Hat, Inc. FR-V Foreign Function Interface Modified: python/branches/py3k/Modules/_ctypes/libffi/src/mips/ffi.c ============================================================================== --- python/branches/py3k/Modules/_ctypes/libffi/src/mips/ffi.c (original) +++ python/branches/py3k/Modules/_ctypes/libffi/src/mips/ffi.c Mon Mar 15 14:25:28 2010 @@ -99,7 +99,7 @@ p_argv = ecif->avalue; - for (i = ecif->cif->nargs, p_arg = ecif->cif->arg_types; i; i--, p_arg++) + for (i = 0, p_arg = ecif->cif->arg_types; i < ecif->cif->nargs; i++, p_arg++) { size_t z; unsigned int a; @@ -123,9 +123,25 @@ /* The size of a pointer depends on the ABI */ if (type == FFI_TYPE_POINTER) - type = - (ecif->cif->abi == FFI_N64) ? FFI_TYPE_SINT64 : FFI_TYPE_SINT32; + type = (ecif->cif->abi == FFI_N64 + || ecif->cif->abi == FFI_N64_SOFT_FLOAT) + ? FFI_TYPE_SINT64 : FFI_TYPE_SINT32; + if (i < 8 && (ecif->cif->abi == FFI_N32_SOFT_FLOAT + || ecif->cif->abi == FFI_N64_SOFT_FLOAT)) + { + switch (type) + { + case FFI_TYPE_FLOAT: + type = FFI_TYPE_UINT32; + break; + case FFI_TYPE_DOUBLE: + type = FFI_TYPE_UINT64; + break; + default: + break; + } + } switch (type) { case FFI_TYPE_SINT8: @@ -205,13 +221,17 @@ definitions and generates the appropriate flags. */ static unsigned -calc_n32_struct_flags(ffi_type *arg, unsigned *loc, unsigned *arg_reg) +calc_n32_struct_flags(int soft_float, ffi_type *arg, + unsigned *loc, unsigned *arg_reg) { unsigned flags = 0; unsigned index = 0; ffi_type *e; + if (soft_float) + return 0; + while ((e = arg->elements[index])) { /* Align this object. */ @@ -236,7 +256,7 @@ } static unsigned -calc_n32_return_struct_flags(ffi_type *arg) +calc_n32_return_struct_flags(int soft_float, ffi_type *arg) { unsigned flags = 0; unsigned small = FFI_TYPE_SMALLSTRUCT; @@ -256,6 +276,7 @@ small = FFI_TYPE_SMALLSTRUCT2; e = arg->elements[0]; + if (e->type == FFI_TYPE_DOUBLE) flags = FFI_TYPE_DOUBLE; else if (e->type == FFI_TYPE_FLOAT) @@ -276,6 +297,8 @@ floats! This must be passed the old way. */ return small; } + if (soft_float) + flags += FFI_TYPE_STRUCT_SOFT; } else if (!flags) @@ -382,16 +405,19 @@ #ifdef FFI_MIPS_N32 /* Set the flags necessary for N32 processing */ { + int type; unsigned arg_reg = 0; unsigned loc = 0; unsigned count = (cif->nargs < 8) ? cif->nargs : 8; unsigned index = 0; unsigned struct_flags = 0; + int soft_float = (cif->abi == FFI_N32_SOFT_FLOAT + || cif->abi == FFI_N64_SOFT_FLOAT); if (cif->rtype->type == FFI_TYPE_STRUCT) { - struct_flags = calc_n32_return_struct_flags(cif->rtype); + struct_flags = calc_n32_return_struct_flags(soft_float, cif->rtype); if (struct_flags == 0) { @@ -411,7 +437,22 @@ while (count-- > 0 && arg_reg < 8) { - switch ((cif->arg_types)[index]->type) + type = (cif->arg_types)[index]->type; + if (soft_float) + { + switch (type) + { + case FFI_TYPE_FLOAT: + type = FFI_TYPE_UINT32; + break; + case FFI_TYPE_DOUBLE: + type = FFI_TYPE_UINT64; + break; + default: + break; + } + } + switch (type) { case FFI_TYPE_FLOAT: case FFI_TYPE_DOUBLE: @@ -423,17 +464,25 @@ /* Align it. */ arg_reg = ALIGN(arg_reg, 2); /* Treat it as two adjacent doubles. */ - cif->flags += - (FFI_TYPE_DOUBLE << (arg_reg * FFI_FLAG_BITS)); - arg_reg++; - cif->flags += - (FFI_TYPE_DOUBLE << (arg_reg * FFI_FLAG_BITS)); - arg_reg++; + if (soft_float) + { + arg_reg += 2; + } + else + { + cif->flags += + (FFI_TYPE_DOUBLE << (arg_reg * FFI_FLAG_BITS)); + arg_reg++; + cif->flags += + (FFI_TYPE_DOUBLE << (arg_reg * FFI_FLAG_BITS)); + arg_reg++; + } break; case FFI_TYPE_STRUCT: loc = arg_reg * FFI_SIZEOF_ARG; - cif->flags += calc_n32_struct_flags((cif->arg_types)[index], + cif->flags += calc_n32_struct_flags(soft_float, + (cif->arg_types)[index], &loc, &arg_reg); break; @@ -469,17 +518,43 @@ case FFI_TYPE_VOID: /* Do nothing, 'cause FFI_TYPE_VOID is 0 */ break; - + + case FFI_TYPE_POINTER: + if (cif->abi == FFI_N32_SOFT_FLOAT || cif->abi == FFI_N32) + cif->flags += FFI_TYPE_SINT32 << (FFI_FLAG_BITS * 8); + else + cif->flags += FFI_TYPE_INT << (FFI_FLAG_BITS * 8); + break; + case FFI_TYPE_FLOAT: + if (soft_float) + { + cif->flags += FFI_TYPE_SINT32 << (FFI_FLAG_BITS * 8); + break; + } + /* else fall through */ case FFI_TYPE_DOUBLE: - cif->flags += cif->rtype->type << (FFI_FLAG_BITS * 8); + if (soft_float) + cif->flags += FFI_TYPE_INT << (FFI_FLAG_BITS * 8); + else + cif->flags += cif->rtype->type << (FFI_FLAG_BITS * 8); break; + case FFI_TYPE_LONGDOUBLE: /* Long double is returned as if it were a struct containing two doubles. */ - cif->flags += FFI_TYPE_STRUCT << (FFI_FLAG_BITS * 8); - cif->flags += (FFI_TYPE_DOUBLE + (FFI_TYPE_DOUBLE << FFI_FLAG_BITS)) - << (4 + (FFI_FLAG_BITS * 8)); + if (soft_float) + { + cif->flags += FFI_TYPE_STRUCT << (FFI_FLAG_BITS * 8); + cif->flags += FFI_TYPE_SMALLSTRUCT2 << (4 + (FFI_FLAG_BITS * 8)); + } + else + { + cif->flags += FFI_TYPE_STRUCT << (FFI_FLAG_BITS * 8); + cif->flags += (FFI_TYPE_DOUBLE + + (FFI_TYPE_DOUBLE << FFI_FLAG_BITS)) + << (4 + (FFI_FLAG_BITS * 8)); + } break; default: cif->flags += FFI_TYPE_INT << (FFI_FLAG_BITS * 8); @@ -499,7 +574,7 @@ /* Low level routine for calling N32 functions */ extern int ffi_call_N32(void (*)(char *, extended_cif *, int, int), extended_cif *, unsigned, - unsigned, unsigned *, void (*)(void)); + unsigned, void *, void (*)(void)); void ffi_call(ffi_cif *cif, void (*fn)(void), void *rvalue, void **avalue) { @@ -529,10 +604,13 @@ #ifdef FFI_MIPS_N32 case FFI_N32: + case FFI_N32_SOFT_FLOAT: case FFI_N64: + case FFI_N64_SOFT_FLOAT: { int copy_rvalue = 0; - void *rvalue_copy = ecif.rvalue; + int copy_offset = 0; + char *rvalue_copy = ecif.rvalue; if (cif->rtype->type == FFI_TYPE_STRUCT && cif->rtype->size < 16) { /* For structures smaller than 16 bytes we clobber memory @@ -541,10 +619,20 @@ rvalue_copy = alloca(16); copy_rvalue = 1; } + else if (cif->rtype->type == FFI_TYPE_FLOAT + && (cif->abi == FFI_N64_SOFT_FLOAT + || cif->abi == FFI_N32_SOFT_FLOAT)) + { + rvalue_copy = alloca (8); + copy_rvalue = 1; +#if defined(__MIPSEB__) || defined(_MIPSEB) + copy_offset = 4; +#endif + } ffi_call_N32(ffi_prep_args, &ecif, cif->bytes, cif->flags, rvalue_copy, fn); if (copy_rvalue) - memcpy(ecif.rvalue, rvalue_copy, cif->rtype->size); + memcpy(ecif.rvalue, rvalue_copy + copy_offset, cif->rtype->size); } break; #endif @@ -684,9 +772,10 @@ { if (i < 2 && !seen_int && (arg_types[i]->type == FFI_TYPE_FLOAT || - arg_types[i]->type == FFI_TYPE_DOUBLE)) + arg_types[i]->type == FFI_TYPE_DOUBLE || + arg_types[i]->type == FFI_TYPE_LONGDOUBLE)) { -#ifdef __MIPSEB__ +#if defined(__MIPSEB__) || defined(_MIPSEB) if (arg_types[i]->type == FFI_TYPE_FLOAT) avaluep[i] = ((char *) &fpr[i]) + sizeof (float); else @@ -755,7 +844,7 @@ static void copy_struct_N32(char *target, unsigned offset, ffi_abi abi, ffi_type *type, int argn, unsigned arg_offset, ffi_arg *ar, - ffi_arg *fpr) + ffi_arg *fpr, int soft_float) { ffi_type **elt_typep = type->elements; while(*elt_typep) @@ -777,7 +866,7 @@ tp = target + offset; - if (elt_type->type == FFI_TYPE_DOUBLE) + if (elt_type->type == FFI_TYPE_DOUBLE && !soft_float) *(double *)tp = *(double *)fpp; else memcpy(tp, argp + arg_offset, elt_type->size); @@ -815,8 +904,12 @@ ffi_arg *avalue; ffi_type **arg_types; int i, avn, argn; + int soft_float; + ffi_arg *argp; cif = closure->cif; + soft_float = cif->abi == FFI_N64_SOFT_FLOAT + || cif->abi == FFI_N32_SOFT_FLOAT; avalue = alloca (cif->nargs * sizeof (ffi_arg)); avaluep = alloca (cif->nargs * sizeof (ffi_arg)); @@ -839,10 +932,16 @@ while (i < avn) { if (arg_types[i]->type == FFI_TYPE_FLOAT - || arg_types[i]->type == FFI_TYPE_DOUBLE) + || arg_types[i]->type == FFI_TYPE_DOUBLE + || arg_types[i]->type == FFI_TYPE_LONGDOUBLE) { - ffi_arg *argp = argn >= 8 ? ar + argn : fpr + argn; -#ifdef __MIPSEB__ + argp = (argn >= 8 || soft_float) ? ar + argn : fpr + argn; + if ((arg_types[i]->type == FFI_TYPE_LONGDOUBLE) && ((unsigned)argp & (arg_types[i]->alignment-1))) + { + argp=(ffi_arg*)ALIGN(argp,arg_types[i]->alignment); + argn++; + } +#if defined(__MIPSEB__) || defined(_MIPSEB) if (arg_types[i]->type == FFI_TYPE_FLOAT && argn < 8) avaluep[i] = ((char *) argp) + sizeof (float); else @@ -856,11 +955,15 @@ if (arg_types[i]->alignment > sizeof(ffi_arg)) argn = ALIGN(argn, arg_types[i]->alignment / sizeof(ffi_arg)); - ffi_arg *argp = ar + argn; + argp = ar + argn; /* The size of a pointer depends on the ABI */ if (type == FFI_TYPE_POINTER) - type = (cif->abi == FFI_N64) ? FFI_TYPE_SINT64 : FFI_TYPE_SINT32; + type = (cif->abi == FFI_N64 || cif->abi == FFI_N64_SOFT_FLOAT) + ? FFI_TYPE_SINT64 : FFI_TYPE_SINT32; + + if (soft_float && type == FFI_TYPE_FLOAT) + type = FFI_TYPE_UINT32; switch (type) { @@ -901,7 +1004,7 @@ it was passed in registers. */ avaluep[i] = alloca(arg_types[i]->size); copy_struct_N32(avaluep[i], 0, cif->abi, arg_types[i], - argn, 0, ar, fpr); + argn, 0, ar, fpr, soft_float); break; } Modified: python/branches/py3k/Modules/_ctypes/libffi/src/mips/ffitarget.h ============================================================================== --- python/branches/py3k/Modules/_ctypes/libffi/src/mips/ffitarget.h (original) +++ python/branches/py3k/Modules/_ctypes/libffi/src/mips/ffitarget.h Mon Mar 15 14:25:28 2010 @@ -28,7 +28,10 @@ #define LIBFFI_TARGET_H #ifdef linux -#include +# include +#else +# include +#endif # ifndef _ABIN32 # define _ABIN32 _MIPS_SIM_NABI32 # endif @@ -38,7 +41,6 @@ # ifndef _ABIO32 # define _ABIO32 _MIPS_SIM_ABI32 # endif -#endif #if !defined(_MIPS_SIM) -- something is very wrong -- @@ -95,6 +97,15 @@ #define FFI_TYPE_STRUCT_DF 189 #define FFI_TYPE_STRUCT_SMALL 93 #define FFI_TYPE_STRUCT_SMALL2 109 + +/* and for n32 soft float, add 16 * 2^4 */ +#define FFI_TYPE_STRUCT_D_SOFT 317 +#define FFI_TYPE_STRUCT_F_SOFT 301 +#define FFI_TYPE_STRUCT_DD_SOFT 509 +#define FFI_TYPE_STRUCT_FF_SOFT 429 +#define FFI_TYPE_STRUCT_FD_SOFT 493 +#define FFI_TYPE_STRUCT_DF_SOFT 445 +#define FFI_TYPE_STRUCT_SOFT 16 #endif #ifdef LIBFFI_ASM @@ -145,7 +156,8 @@ # endif /* _MIPS_SIM==_ABI64 */ #endif /* !FFI_MIPS_O32 */ #else /* !LIBFFI_ASM */ -#ifdef FFI_MIPS_O32 +# ifdef __GNUC__ +# ifdef FFI_MIPS_O32 /* O32 stack frames have 32bit integer args */ typedef unsigned int ffi_arg __attribute__((__mode__(__SI__))); typedef signed int ffi_sarg __attribute__((__mode__(__SI__))); @@ -153,7 +165,18 @@ /* N32 and N64 frames have 64bit integer args */ typedef unsigned int ffi_arg __attribute__((__mode__(__DI__))); typedef signed int ffi_sarg __attribute__((__mode__(__DI__))); -#endif +# endif +# else +# ifdef FFI_MIPS_O32 +/* O32 stack frames have 32bit integer args */ +typedef __uint32_t ffi_arg; +typedef __int32_t ffi_sarg; +# else +/* N32 and N64 frames have 64bit integer args */ +typedef __uint64_t ffi_arg; +typedef __int64_t ffi_sarg; +# endif +# endif /* __GNUC__ */ typedef enum ffi_abi { FFI_FIRST_ABI = 0, @@ -161,6 +184,8 @@ FFI_N32, FFI_N64, FFI_O32_SOFT_FLOAT, + FFI_N32_SOFT_FLOAT, + FFI_N64_SOFT_FLOAT, #ifdef FFI_MIPS_O32 #ifdef __mips_soft_float @@ -170,9 +195,17 @@ #endif #else # if _MIPS_SIM==_ABI64 +# ifdef __mips_soft_float + FFI_DEFAULT_ABI = FFI_N64_SOFT_FLOAT, +# else FFI_DEFAULT_ABI = FFI_N64, +# endif # else +# ifdef __mips_soft_float + FFI_DEFAULT_ABI = FFI_N32_SOFT_FLOAT, +# else FFI_DEFAULT_ABI = FFI_N32, +# endif # endif #endif Modified: python/branches/py3k/Modules/_ctypes/libffi/src/mips/n32.S ============================================================================== --- python/branches/py3k/Modules/_ctypes/libffi/src/mips/n32.S (original) +++ python/branches/py3k/Modules/_ctypes/libffi/src/mips/n32.S Mon Mar 15 14:25:28 2010 @@ -14,14 +14,14 @@ 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 THE AUTHORS OR COPYRIGHT HOLDERS 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 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 THE AUTHORS OR COPYRIGHT + HOLDERS 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 @@ -40,7 +40,9 @@ #define SIZEOF_FRAME ( 8 * FFI_SIZEOF_ARG ) +#ifdef linux .abicalls +#endif .text .align 2 .globl ffi_call_N32 @@ -217,8 +219,10 @@ # Shift the return type flag over SRL t6, 8*FFI_FLAG_BITS - + + beq t6, FFI_TYPE_SINT32, retint bne t6, FFI_TYPE_INT, retfloat +retint: jal t9 REG_L t4, 4*FFI_SIZEOF_ARG($fp) REG_S v0, 0(t4) @@ -277,12 +281,58 @@ b epilogue retstruct_f_d: - bne t6, FFI_TYPE_STRUCT_FD, retstruct_small + bne t6, FFI_TYPE_STRUCT_FD, retstruct_d_soft jal t9 REG_L t4, 4*FFI_SIZEOF_ARG($fp) s.s $f0, 0(t4) s.d $f2, 8(t4) b epilogue + +retstruct_d_soft: + bne t6, FFI_TYPE_STRUCT_D_SOFT, retstruct_f_soft + jal t9 + REG_L t4, 4*FFI_SIZEOF_ARG($fp) + sd v0, 0(t4) + b epilogue + +retstruct_f_soft: + bne t6, FFI_TYPE_STRUCT_F_SOFT, retstruct_d_d_soft + jal t9 + REG_L t4, 4*FFI_SIZEOF_ARG($fp) + sw v0, 0(t4) + b epilogue + +retstruct_d_d_soft: + bne t6, FFI_TYPE_STRUCT_DD_SOFT, retstruct_f_f_soft + jal t9 + REG_L t4, 4*FFI_SIZEOF_ARG($fp) + sd v0, 0(t4) + sd v1, 8(t4) + b epilogue + +retstruct_f_f_soft: + bne t6, FFI_TYPE_STRUCT_FF_SOFT, retstruct_d_f_soft + jal t9 + REG_L t4, 4*FFI_SIZEOF_ARG($fp) + sw v0, 0(t4) + sw v1, 4(t4) + b epilogue + +retstruct_d_f_soft: + bne t6, FFI_TYPE_STRUCT_DF_SOFT, retstruct_f_d_soft + jal t9 + REG_L t4, 4*FFI_SIZEOF_ARG($fp) + sd v0, 0(t4) + sw v1, 8(t4) + b epilogue + +retstruct_f_d_soft: + bne t6, FFI_TYPE_STRUCT_FD_SOFT, retstruct_small + jal t9 + REG_L t4, 4*FFI_SIZEOF_ARG($fp) + sw v0, 0(t4) + sd v1, 8(t4) + b epilogue retstruct_small: bne t6, FFI_TYPE_STRUCT_SMALL, retstruct_small2 @@ -413,6 +463,11 @@ jalr t9 # Return flags are in v0 + bne v0, FFI_TYPE_SINT32, cls_retint + lw v0, V0_OFF2($sp) + b cls_epilogue + +cls_retint: bne v0, FFI_TYPE_INT, cls_retfloat REG_L v0, V0_OFF2($sp) b cls_epilogue @@ -474,6 +529,7 @@ .LFE2: .end ffi_closure_N32 +#ifdef linux .section .eh_frame,"aw", at progbits .Lframe1: .4byte .LECIE1-.LSCIE1 # length @@ -530,5 +586,6 @@ .uleb128 (SIZEOF_FRAME2 - RA_OFF2)/4 .align EH_FRAME_ALIGN .LEFDE3: +#endif /* linux */ #endif Modified: python/branches/py3k/Modules/_ctypes/libffi/src/mips/o32.S ============================================================================== --- python/branches/py3k/Modules/_ctypes/libffi/src/mips/o32.S (original) +++ python/branches/py3k/Modules/_ctypes/libffi/src/mips/o32.S Mon Mar 15 14:25:28 2010 @@ -14,14 +14,14 @@ 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 THE AUTHORS OR COPYRIGHT HOLDERS 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 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 THE AUTHORS OR COPYRIGHT + HOLDERS 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 Modified: python/branches/py3k/Modules/_ctypes/libffi/src/pa/ffi.c ============================================================================== --- python/branches/py3k/Modules/_ctypes/libffi/src/pa/ffi.c (original) +++ python/branches/py3k/Modules/_ctypes/libffi/src/pa/ffi.c Mon Mar 15 14:25:28 2010 @@ -492,6 +492,13 @@ avalue[i] = (void *)(stack - slot); break; +#ifdef PA_HPUX + case FFI_TYPE_LONGDOUBLE: + /* Long doubles are treated like a big structure. */ + avalue[i] = (void *) *(stack - slot); + break; +#endif + case FFI_TYPE_STRUCT: /* Structs smaller or equal than 4 bytes are passed in one register. Structs smaller or equal 8 bytes are passed in two Modified: python/branches/py3k/Modules/_ctypes/libffi/src/powerpc/aix.S ============================================================================== --- python/branches/py3k/Modules/_ctypes/libffi/src/powerpc/aix.S (original) +++ python/branches/py3k/Modules/_ctypes/libffi/src/powerpc/aix.S Mon Mar 15 14:25:28 2010 @@ -1,5 +1,5 @@ /* ----------------------------------------------------------------------- - aix.S - Copyright (c) 2002 Free Software Foundation, Inc. + aix.S - Copyright (c) 2002,2009 Free Software Foundation, Inc. based on darwin.S by John Hornkvist PowerPC Assembly glue. @@ -86,9 +86,13 @@ #define L(x) x .file "aix.S" .toc - .csect .text[PR] - .align 2 -.globl ffi_prep_args + + /* void ffi_call_AIX(extended_cif *ecif, unsigned long bytes, + * unsigned int flags, unsigned int *rvalue, + * void (*fn)(), + * void (*prep_args)(extended_cif*, unsigned *const)); + * r3=ecif, r4=bytes, r5=flags, r6=rvalue, r7=fn, r8=prep_args + */ .csect .text[PR] .align 2 @@ -96,61 +100,151 @@ .globl .ffi_call_AIX .csect ffi_call_AIX[DS] ffi_call_AIX: - .long .ffi_call_AIX, TOC[tc0], 0 +#ifdef __64BIT__ + .llong .ffi_call_AIX, TOC[tc0], 0 .csect .text[PR] .ffi_call_AIX: - mr r12,r8 // We only need r12 until the call, so it doesn't have to be saved... - /* Save the old stack pointer as AP. */ - mr r8,r1 - - /* Allocate the stack space we need. */ - stwux r1,r1,r4 - /* Save registers we use. */ - mflr r9 + mflr r0 - stw r28,-16(r8) - stw r29,-12(r8) - stw r30, -8(r8) - stw r31, -4(r8) - - stw r9, 8(r8) - stw r2, 20(r1) + std r28,-32(r1) + std r29,-24(r1) + std r30,-16(r1) + std r31, -8(r1) + + std r0, 16(r1) + mr r28, r1 /* our AP. */ + stdux r1, r1, r4 /* Save arguments over call... */ - mr r31,r5 /* flags, */ - mr r30,r6 /* rvalue, */ - mr r29,r7 /* function address, */ - mr r28,r8 /* our AP. */ + mr r31, r5 /* flags, */ + mr r30, r6 /* rvalue, */ + mr r29, r7 /* function address. */ + std r2, 40(r1) /* Call ffi_prep_args. */ - mr r4,r1 - li r9,0 + mr r4, r1 + bl .ffi_prep_args - lwz r2,4(r12) - lwz r12,0(r12) - mtctr r12 // r12 holds address of _ffi_prep_args + /* Now do the call. */ + ld r0, 0(r29) + ld r2, 8(r29) + ld r11, 16(r29) + /* Set up cr1 with bits 4-7 of the flags. */ + mtcrf 0x40, r31 + mtctr r0 + /* Load all those argument registers. */ + // We have set up a nice stack frame, just load it into registers. + ld r3, 40+(1*8)(r1) + ld r4, 40+(2*8)(r1) + ld r5, 40+(3*8)(r1) + ld r6, 40+(4*8)(r1) + nop + ld r7, 40+(5*8)(r1) + ld r8, 40+(6*8)(r1) + ld r9, 40+(7*8)(r1) + ld r10,40+(8*8)(r1) + +L1: + /* Load all the FP registers. */ + bf 6,L2 // 2f + 0x18 + lfd f1,-32-(13*8)(r28) + lfd f2,-32-(12*8)(r28) + lfd f3,-32-(11*8)(r28) + lfd f4,-32-(10*8)(r28) + nop + lfd f5,-32-(9*8)(r28) + lfd f6,-32-(8*8)(r28) + lfd f7,-32-(7*8)(r28) + lfd f8,-32-(6*8)(r28) + nop + lfd f9,-32-(5*8)(r28) + lfd f10,-32-(4*8)(r28) + lfd f11,-32-(3*8)(r28) + lfd f12,-32-(2*8)(r28) + nop + lfd f13,-32-(1*8)(r28) + +L2: + /* Make the call. */ bctrl - lwz r2,20(r1) + ld r2, 40(r1) + + /* Now, deal with the return value. */ + mtcrf 0x01, r31 + + bt 30, L(done_return_value) + bt 29, L(fp_return_value) + std r3, 0(r30) + + /* Fall through... */ + +L(done_return_value): + /* Restore the registers we used and return. */ + mr r1, r28 + ld r0, 16(r28) + ld r28, -32(r1) + mtlr r0 + ld r29, -24(r1) + ld r30, -16(r1) + ld r31, -8(r1) + blr + +L(fp_return_value): + bf 28, L(float_return_value) + stfd f1, 0(r30) + bf 31, L(done_return_value) + stfd f2, 8(r30) + b L(done_return_value) +L(float_return_value): + stfs f1, 0(r30) + b L(done_return_value) + +#else /* ! __64BIT__ */ + + .long .ffi_call_AIX, TOC[tc0], 0 + .csect .text[PR] +.ffi_call_AIX: + /* Save registers we use. */ + mflr r0 + + stw r28,-16(r1) + stw r29,-12(r1) + stw r30, -8(r1) + stw r31, -4(r1) + + stw r0, 8(r1) + mr r28, r1 /* out AP. */ + stwux r1, r1, r4 + + /* Save arguments over call... */ + mr r31, r5 /* flags, */ + mr r30, r6 /* rvalue, */ + mr r29, r7 /* function address, */ + stw r2, 20(r1) + + /* Call ffi_prep_args. */ + mr r4, r1 + bl .ffi_prep_args /* Now do the call. */ - lwz r12,0(r29) + lwz r0, 0(r29) + lwz r2, 4(r29) + lwz r11, 8(r29) /* Set up cr1 with bits 4-7 of the flags. */ - mtcrf 0x40,r31 - stw r2,20(r1) - mtctr r12 - lwz r2,4(r29) + mtcrf 0x40, r31 + mtctr r0 /* Load all those argument registers. */ // We have set up a nice stack frame, just load it into registers. - lwz r3, 20+(1*4)(r1) - lwz r4, 20+(2*4)(r1) - lwz r5, 20+(3*4)(r1) - lwz r6, 20+(4*4)(r1) - nop - lwz r7, 20+(5*4)(r1) - lwz r8, 20+(6*4)(r1) - lwz r9, 20+(7*4)(r1) - lwz r10,20+(8*4)(r1) + lwz r3, 20+(1*4)(r1) + lwz r4, 20+(2*4)(r1) + lwz r5, 20+(3*4)(r1) + lwz r6, 20+(4*4)(r1) + nop + lwz r7, 20+(5*4)(r1) + lwz r8, 20+(6*4)(r1) + lwz r9, 20+(7*4)(r1) + lwz r10,20+(8*4)(r1) L1: /* Load all the FP registers. */ @@ -165,47 +259,48 @@ lfd f7,-16-(7*8)(r28) lfd f8,-16-(6*8)(r28) nop - lfd f9,-16-(5*8)(r28) - lfd f10,-16-(4*8)(r28) - lfd f11,-16-(3*8)(r28) - lfd f12,-16-(2*8)(r28) + lfd f9,-16-(5*8)(r28) + lfd f10,-16-(4*8)(r28) + lfd f11,-16-(3*8)(r28) + lfd f12,-16-(2*8)(r28) nop - lfd f13,-16-(1*8)(r28) + lfd f13,-16-(1*8)(r28) L2: /* Make the call. */ bctrl - lwz r2,20(r1) + lwz r2, 20(r1) /* Now, deal with the return value. */ - mtcrf 0x01,r31 + mtcrf 0x01, r31 - bt 30,L(done_return_value) - bt 29,L(fp_return_value) - stw r3,0(r30) - bf 28,L(done_return_value) - stw r4,4(r30) + bt 30, L(done_return_value) + bt 29, L(fp_return_value) + stw r3, 0(r30) + bf 28, L(done_return_value) + stw r4, 4(r30) /* Fall through... */ L(done_return_value): /* Restore the registers we used and return. */ - lwz r9, 8(r28) - lwz r31, -4(r28) - mtlr r9 - lwz r30, -8(r28) - lwz r29,-12(r28) - lwz r28,-16(r28) - lwz r1,0(r1) + mr r1, r28 + lwz r0, 8(r28) + lwz r28,-16(r1) + mtlr r0 + lwz r29,-12(r1) + lwz r30, -8(r1) + lwz r31, -4(r1) blr L(fp_return_value): - bf 28,L(float_return_value) - stfd f1,0(r30) + bf 28, L(float_return_value) + stfd f1, 0(r30) b L(done_return_value) L(float_return_value): - stfs f1,0(r30) + stfs f1, 0(r30) b L(done_return_value) +#endif .long 0 .byte 0,0,0,1,128,4,0,0 //END(ffi_call_AIX) @@ -216,7 +311,11 @@ .globl .ffi_call_DARWIN .csect ffi_call_DARWIN[DS] ffi_call_DARWIN: +#ifdef __64BIT__ + .llong .ffi_call_DARWIN, TOC[tc0], 0 +#else .long .ffi_call_DARWIN, TOC[tc0], 0 +#endif .csect .text[PR] .ffi_call_DARWIN: blr Modified: python/branches/py3k/Modules/_ctypes/libffi/src/powerpc/aix_closure.S ============================================================================== --- python/branches/py3k/Modules/_ctypes/libffi/src/powerpc/aix_closure.S (original) +++ python/branches/py3k/Modules/_ctypes/libffi/src/powerpc/aix_closure.S Mon Mar 15 14:25:28 2010 @@ -1,5 +1,5 @@ /* ----------------------------------------------------------------------- - aix_closure.S - Copyright (c) 2002 2003 Free Software Foundation, Inc. + aix_closure.S - Copyright (c) 2002, 2003, 2009 Free Software Foundation, Inc. based on darwin_closure.S PowerPC Assembly glue. @@ -94,65 +94,238 @@ .globl ffi_closure_ASM .globl .ffi_closure_ASM .csect ffi_closure_ASM[DS] - ffi_closure_ASM: - .long .ffi_closure_ASM, TOC[tc0], 0 +#ifdef __64BIT__ + .llong .ffi_closure_ASM, TOC[tc0], 0 .csect .text[PR] .ffi_closure_ASM: +/* we want to build up an area for the parameters passed */ +/* in registers (both floating point and integer) */ - mflr r0 /* extract return address */ - stw r0, 8(r1) /* save the return address */ - - /* 24 Bytes (Linkage Area) */ - /* 32 Bytes (params) */ + /* we store gpr 3 to gpr 10 (aligned to 4) + in the parents outgoing area */ + std r3, 48+(0*8)(r1) + std r4, 48+(1*8)(r1) + std r5, 48+(2*8)(r1) + std r6, 48+(3*8)(r1) + mflr r0 + + std r7, 48+(4*8)(r1) + std r8, 48+(5*8)(r1) + std r9, 48+(6*8)(r1) + std r10, 48+(7*8)(r1) + std r0, 16(r1) /* save the return address */ + + + /* 48 Bytes (Linkage Area) */ + /* 64 Bytes (params) */ + /* 16 Bytes (result) */ /* 104 Bytes (13*8 from FPR) */ - /* 8 Bytes (result) */ - /* 168 Bytes */ + /* 8 Bytes (alignment) */ + /* 240 Bytes */ + + stdu r1, -240(r1) /* skip over caller save area + keep stack aligned to 16 */ + + /* next save fpr 1 to fpr 13 (aligned to 8) */ + stfd f1, 128+(0*8)(r1) + stfd f2, 128+(1*8)(r1) + stfd f3, 128+(2*8)(r1) + stfd f4, 128+(3*8)(r1) + stfd f5, 128+(4*8)(r1) + stfd f6, 128+(5*8)(r1) + stfd f7, 128+(6*8)(r1) + stfd f8, 128+(7*8)(r1) + stfd f9, 128+(8*8)(r1) + stfd f10, 128+(9*8)(r1) + stfd f11, 128+(10*8)(r1) + stfd f12, 128+(11*8)(r1) + stfd f13, 128+(12*8)(r1) + + /* set up registers for the routine that actually does the work */ + /* get the context pointer from the trampoline */ + mr r3, r11 + + /* now load up the pointer to the result storage */ + addi r4, r1, 112 + + /* now load up the pointer to the saved gpr registers */ + addi r5, r1, 288 + + /* now load up the pointer to the saved fpr registers */ + addi r6, r1, 128 + + /* make the call */ + bl .ffi_closure_helper_DARWIN + nop + + /* now r3 contains the return type */ + /* so use it to look up in a table */ + /* so we know how to deal with each type */ + + /* look up the proper starting point in table */ + /* by using return type as offset */ + ld r4, LC..60(2) /* get address of jump table */ + sldi r3, r3, 4 /* now multiply return type by 16 */ + ld r0, 240+16(r1) /* load return address */ + add r3, r3, r4 /* add contents of table to table address */ + mtctr r3 + bctr /* jump to it */ + +/* Each fragment must be exactly 16 bytes long (4 instructions). + Align to 16 byte boundary for cache and dispatch efficiency. */ + .align 4 + +L..60: +/* case FFI_TYPE_VOID */ + mtlr r0 + addi r1, r1, 240 + blr + nop + +/* case FFI_TYPE_INT */ + lwa r3, 112+4(r1) + mtlr r0 + addi r1, r1, 240 + blr + +/* case FFI_TYPE_FLOAT */ + lfs f1, 112+0(r1) + mtlr r0 + addi r1, r1, 240 + blr + +/* case FFI_TYPE_DOUBLE */ + lfd f1, 112+0(r1) + mtlr r0 + addi r1, r1, 240 + blr + +/* case FFI_TYPE_LONGDOUBLE */ + lfd f1, 112+0(r1) + mtlr r0 + lfd f2, 112+8(r1) + b L..finish + +/* case FFI_TYPE_UINT8 */ + lbz r3, 112+7(r1) + mtlr r0 + addi r1, r1, 240 + blr - stwu r1,-176(r1) /* skip over caller save area - keep stack aligned to 16 */ +/* case FFI_TYPE_SINT8 */ + lbz r3, 112+7(r1) + mtlr r0 + extsb r3, r3 + b L..finish + +/* case FFI_TYPE_UINT16 */ + lhz r3, 112+6(r1) + mtlr r0 +L..finish: + addi r1, r1, 240 + blr + +/* case FFI_TYPE_SINT16 */ + lha r3, 112+6(r1) + mtlr r0 + addi r1, r1, 240 + blr + +/* case FFI_TYPE_UINT32 */ + lwz r3, 112+4(r1) + mtlr r0 + addi r1, r1, 240 + blr + +/* case FFI_TYPE_SINT32 */ + lwa r3, 112+4(r1) + mtlr r0 + addi r1, r1, 240 + blr + +/* case FFI_TYPE_UINT64 */ + ld r3, 112+0(r1) + mtlr r0 + addi r1, r1, 240 + blr +/* case FFI_TYPE_SINT64 */ + ld r3, 112+0(r1) + mtlr r0 + addi r1, r1, 240 + blr + +/* case FFI_TYPE_STRUCT */ + mtlr r0 + addi r1, r1, 240 + blr + nop + +/* case FFI_TYPE_POINTER */ + ld r3, 112+0(r1) + mtlr r0 + addi r1, r1, 240 + blr + +#else /* ! __64BIT__ */ + + .long .ffi_closure_ASM, TOC[tc0], 0 + .csect .text[PR] +.ffi_closure_ASM: /* we want to build up an area for the parameters passed */ /* in registers (both floating point and integer) */ /* we store gpr 3 to gpr 10 (aligned to 4) in the parents outgoing area */ - stw r3, 200(r1) - stw r4, 204(r1) - stw r5, 208(r1) - stw r6, 212(r1) - stw r7, 216(r1) - stw r8, 220(r1) - stw r9, 224(r1) - stw r10, 228(r1) + stw r3, 24+(0*4)(r1) + stw r4, 24+(1*4)(r1) + stw r5, 24+(2*4)(r1) + stw r6, 24+(3*4)(r1) + mflr r0 + + stw r7, 24+(4*4)(r1) + stw r8, 24+(5*4)(r1) + stw r9, 24+(6*4)(r1) + stw r10, 24+(7*4)(r1) + stw r0, 8(r1) + + /* 24 Bytes (Linkage Area) */ + /* 32 Bytes (params) */ + /* 16 Bytes (result) */ + /* 104 Bytes (13*8 from FPR) */ + /* 176 Bytes */ + + stwu r1, -176(r1) /* skip over caller save area + keep stack aligned to 16 */ /* next save fpr 1 to fpr 13 (aligned to 8) */ - stfd f1, 56(r1) - stfd f2, 64(r1) - stfd f3, 72(r1) - stfd f4, 80(r1) - stfd f5, 88(r1) - stfd f6, 96(r1) - stfd f7, 104(r1) - stfd f8, 112(r1) - stfd f9, 120(r1) - stfd f10, 128(r1) - stfd f11, 136(r1) - stfd f12, 144(r1) - stfd f13, 152(r1) + stfd f1, 72+(0*8)(r1) + stfd f2, 72+(1*8)(r1) + stfd f3, 72+(2*8)(r1) + stfd f4, 72+(3*8)(r1) + stfd f5, 72+(4*8)(r1) + stfd f6, 72+(5*8)(r1) + stfd f7, 72+(6*8)(r1) + stfd f8, 72+(7*8)(r1) + stfd f9, 72+(8*8)(r1) + stfd f10, 72+(9*8)(r1) + stfd f11, 72+(10*8)(r1) + stfd f12, 72+(11*8)(r1) + stfd f13, 72+(12*8)(r1) /* set up registers for the routine that actually does the work */ /* get the context pointer from the trampoline */ - mr r3,r11 + mr r3, r11 /* now load up the pointer to the result storage */ - addi r4,r1,160 + addi r4, r1, 56 /* now load up the pointer to the saved gpr registers */ - addi r5,r1,200 + addi r5, r1, 200 /* now load up the pointer to the saved fpr registers */ - addi r6,r1,56 + addi r6, r1, 72 /* make the call */ bl .ffi_closure_helper_DARWIN @@ -164,84 +337,107 @@ /* look up the proper starting point in table */ /* by using return type as offset */ - addi r5,r1,160 /* get pointer to results area */ - lwz r4,LC..60(2) /* get address of jump table */ - slwi r3,r3,2 /* now multiply return type by 4 */ - lwzx r3,r4,r3 /* get the contents of that table value */ - add r3,r3,r4 /* add contents of table to table address */ - mtctr r3 + lwz r4, LC..60(2) /* get address of jump table */ + slwi r3, r3, 4 /* now multiply return type by 4 */ + lwz r0, 176+8(r1) /* load return address */ + add r3, r3, r4 /* add contents of table to table address */ + mtctr r3 bctr /* jump to it */ +/* Each fragment must be exactly 16 bytes long (4 instructions). + Align to 16 byte boundary for cache and dispatch efficiency. */ + .align 4 + L..60: - .long L..44-L..60 /* FFI_TYPE_VOID */ - .long L..50-L..60 /* FFI_TYPE_INT */ - .long L..47-L..60 /* FFI_TYPE_FLOAT */ - .long L..46-L..60 /* FFI_TYPE_DOUBLE */ - .long L..46-L..60 /* FFI_TYPE_LONGDOUBLE */ - .long L..56-L..60 /* FFI_TYPE_UINT8 */ - .long L..55-L..60 /* FFI_TYPE_SINT8 */ - .long L..58-L..60 /* FFI_TYPE_UINT16 */ - .long L..57-L..60 /* FFI_TYPE_SINT16 */ - .long L..50-L..60 /* FFI_TYPE_UINT32 */ - .long L..50-L..60 /* FFI_TYPE_SINT32 */ - .long L..48-L..60 /* FFI_TYPE_UINT64 */ - .long L..48-L..60 /* FFI_TYPE_SINT64 */ - .long L..44-L..60 /* FFI_TYPE_STRUCT */ - .long L..50-L..60 /* FFI_TYPE_POINTER */ - - -/* case double */ -L..46: - lfd f1,0(r5) - b L..44 - -/* case float */ -L..47: - lfs f1,0(r5) - b L..44 - -/* case long long */ -L..48: - lwz r3,0(r5) - lwz r4,4(r5) - b L..44 - -/* case default / int32 / pointer */ -L..50: - lwz r3,0(r5) - b L..44 - -/* case signed int8 */ -L..55: - addi r5,r5,3 - lbz r3,0(r5) - slwi r3,r3,24 - srawi r3,r3,24 - b L..44 - -/* case unsigned int8 */ -L..56: - addi r5,r5,3 - lbz r3,0(r5) - b L..44 - -/* case signed int16 */ -L..57: - addi r5,r5,2 - lhz r3,0(r5) - extsh r3,r3 - b L..44 - -/* case unsigned int16 */ -L..58: - addi r5,r5,2 - lhz r3,0(r5) - -/* case void / done */ -L..44: - addi r1,r1,176 /* restore stack pointer */ - lwz r0,8(r1) /* get return address */ - mtlr r0 /* reset link register */ +/* case FFI_TYPE_VOID */ + mtlr r0 + addi r1, r1, 176 + blr + nop + +/* case FFI_TYPE_INT */ + lwz r3, 56+0(r1) + mtlr r0 + addi r1, r1, 176 + blr + +/* case FFI_TYPE_FLOAT */ + lfs f1, 56+0(r1) + mtlr r0 + addi r1, r1, 176 + blr + +/* case FFI_TYPE_DOUBLE */ + lfd f1, 56+0(r1) + mtlr r0 + addi r1, r1, 176 blr +/* case FFI_TYPE_LONGDOUBLE */ + lfd f1, 56+0(r1) + mtlr r0 + lfd f2, 56+8(r1) + b L..finish + +/* case FFI_TYPE_UINT8 */ + lbz r3, 56+3(r1) + mtlr r0 + addi r1, r1, 176 + blr + +/* case FFI_TYPE_SINT8 */ + lbz r3, 56+3(r1) + mtlr r0 + extsb r3, r3 + b L..finish + +/* case FFI_TYPE_UINT16 */ + lhz r3, 56+2(r1) + mtlr r0 + addi r1, r1, 176 + blr + +/* case FFI_TYPE_SINT16 */ + lha r3, 56+2(r1) + mtlr r0 + addi r1, r1, 176 + blr + +/* case FFI_TYPE_UINT32 */ + lwz r3, 56+0(r1) + mtlr r0 + addi r1, r1, 176 + blr + +/* case FFI_TYPE_SINT32 */ + lwz r3, 56+0(r1) + mtlr r0 + addi r1, r1, 176 + blr + +/* case FFI_TYPE_UINT64 */ + lwz r3, 56+0(r1) + mtlr r0 + lwz r4, 56+4(r1) + b L..finish + +/* case FFI_TYPE_SINT64 */ + lwz r3, 56+0(r1) + mtlr r0 + lwz r4, 56+4(r1) + b L..finish + +/* case FFI_TYPE_STRUCT */ + mtlr r0 + addi r1, r1, 176 + blr + nop + +/* case FFI_TYPE_POINTER */ + lwz r3, 56+0(r1) + mtlr r0 +L..finish: + addi r1, r1, 176 + blr +#endif /* END(ffi_closure_ASM) */ Modified: python/branches/py3k/Modules/_ctypes/libffi/src/powerpc/ffi.c ============================================================================== --- python/branches/py3k/Modules/_ctypes/libffi/src/powerpc/ffi.c (original) +++ python/branches/py3k/Modules/_ctypes/libffi/src/powerpc/ffi.c Mon Mar 15 14:25:28 2010 @@ -1,6 +1,6 @@ /* ----------------------------------------------------------------------- ffi.c - Copyright (c) 1998 Geoffrey Keating - Copyright (C) 2007 Free Software Foundation, Inc + Copyright (C) 2007, 2008 Free Software Foundation, Inc Copyright (C) 2008 Red Hat, Inc PowerPC Foreign Function Interface @@ -43,6 +43,11 @@ FLAG_RETURNS_64BITS = 1 << (31-28), FLAG_RETURNS_128BITS = 1 << (31-27), /* cr6 */ + FLAG_SYSV_SMST_R4 = 1 << (31-26), /* use r4 for FFI_SYSV 8 byte + structs. */ + FLAG_SYSV_SMST_R3 = 1 << (31-25), /* use r3 for FFI_SYSV 4 byte + structs. */ + /* Bits (31-24) through (31-19) store shift value for SMST */ FLAG_ARG_NEEDS_COPY = 1 << (31- 7), FLAG_FP_ARGUMENTS = 1 << (31- 6), /* cr1.eq; specified by ABI */ @@ -180,6 +185,7 @@ { *next_arg.f = (float) double_tmp; next_arg.u += 1; + intarg_count++; } else *fpr_base.d++ = double_tmp; @@ -680,15 +686,15 @@ The same applies for the structs returned in r3/r4. */ if (size <= 4) { - flags |= 1 << (31 - FFI_SYSV_TYPE_SMALL_STRUCT - 1); - flags |= 8 * (4 - size) << 4; + flags |= FLAG_SYSV_SMST_R3; + flags |= 8 * (4 - size) << 8; break; } /* These structs are returned in r3 and r4. See above. */ if (size <= 8) { - flags |= 1 << (31 - FFI_SYSV_TYPE_SMALL_STRUCT - 2); - flags |= 8 * (8 - size) << 4; + flags |= FLAG_SYSV_SMST_R3 | FLAG_SYSV_SMST_R4; + flags |= 8 * (8 - size) << 8; break; } } @@ -1144,6 +1150,7 @@ pst++; avalue[i] = pst; pst += 2; + ng = 8; } break; @@ -1217,6 +1224,7 @@ { avalue[i] = pst; pst += 4; + ng = 8; } break; } @@ -1249,10 +1257,15 @@ /* Tell ffi_closure_SYSV how to perform return type promotions. Because the FFI_SYSV ABI returns the structures <= 8 bytes in r3/r4 - we have to tell ffi_closure_SYSV how to treat them. */ + we have to tell ffi_closure_SYSV how to treat them. We combine the base + type FFI_SYSV_TYPE_SMALL_STRUCT - 1 with the size of the struct. + So a one byte struct gets the return type 16. Return type 1 to 15 are + already used and we never have a struct with size zero. That is the reason + for the subtraction of 1. See the comment in ffitarget.h about ordering. + */ if (cif->abi == FFI_SYSV && cif->rtype->type == FFI_TYPE_STRUCT && size <= 8) - return FFI_SYSV_TYPE_SMALL_STRUCT + size; + return (FFI_SYSV_TYPE_SMALL_STRUCT - 1) + size; #if FFI_TYPE_LONGDOUBLE != FFI_TYPE_DOUBLE else if (cif->rtype->type == FFI_TYPE_LONGDOUBLE && cif->abi != FFI_LINUX && cif->abi != FFI_LINUX_SOFT_FLOAT) Modified: python/branches/py3k/Modules/_ctypes/libffi/src/powerpc/ffi_darwin.c ============================================================================== --- python/branches/py3k/Modules/_ctypes/libffi/src/powerpc/ffi_darwin.c (original) +++ python/branches/py3k/Modules/_ctypes/libffi/src/powerpc/ffi_darwin.c Mon Mar 15 14:25:28 2010 @@ -3,7 +3,7 @@ Copyright (C) 1998 Geoffrey Keating Copyright (C) 2001 John Hornkvist - Copyright (C) 2002, 2006, 2007 Free Software Foundation, Inc. + Copyright (C) 2002, 2006, 2007, 2009 Free Software Foundation, Inc. FFI support for Darwin and AIX. @@ -32,7 +32,7 @@ #include -extern void ffi_closure_ASM(void); +extern void ffi_closure_ASM (void); enum { /* The assembly depends on these exact flags. */ @@ -80,34 +80,37 @@ */ -void ffi_prep_args(extended_cif *ecif, unsigned *const stack) +void +ffi_prep_args (extended_cif *ecif, unsigned long *const stack) { const unsigned bytes = ecif->cif->bytes; const unsigned flags = ecif->cif->flags; + const unsigned nargs = ecif->cif->nargs; + const ffi_abi abi = ecif->cif->abi; /* 'stacktop' points at the previous backchain pointer. */ - unsigned *const stacktop = stack + (bytes / sizeof(unsigned)); + unsigned long *const stacktop = stack + (bytes / sizeof(unsigned long)); /* 'fpr_base' points at the space for fpr1, and grows upwards as we use FPR registers. */ - double *fpr_base = (double*) (stacktop - ASM_NEEDS_REGISTERS) - NUM_FPR_ARG_REGISTERS; + double *fpr_base = (double *) (stacktop - ASM_NEEDS_REGISTERS) - NUM_FPR_ARG_REGISTERS; int fparg_count = 0; /* 'next_arg' grows up as we put parameters in it. */ - unsigned *next_arg = stack + 6; /* 6 reserved positions. */ + unsigned long *next_arg = stack + 6; /* 6 reserved positions. */ - int i = ecif->cif->nargs; + int i; double double_tmp; void **p_argv = ecif->avalue; - unsigned gprvalue; + unsigned long gprvalue; ffi_type** ptr = ecif->cif->arg_types; char *dest_cpy; unsigned size_al = 0; /* Check that everything starts aligned properly. */ - FFI_ASSERT(((unsigned)(char *)stack & 0xF) == 0); - FFI_ASSERT(((unsigned)(char *)stacktop & 0xF) == 0); + FFI_ASSERT(((unsigned) (char *) stack & 0xF) == 0); + FFI_ASSERT(((unsigned) (char *) stacktop & 0xF) == 0); FFI_ASSERT((bytes & 0xF) == 0); /* Deal with return values that are actually pass-by-reference. @@ -115,12 +118,10 @@ Return values are referenced by r3, so r4 is the first parameter. */ if (flags & FLAG_RETVAL_REFERENCE) - *next_arg++ = (unsigned)(char *)ecif->rvalue; + *next_arg++ = (unsigned long) (char *) ecif->rvalue; /* Now for the arguments. */ - for (; - i > 0; - i--, ptr++, p_argv++) + for (i = nargs; i > 0; i--, ptr++, p_argv++) { switch ((*ptr)->type) { @@ -128,7 +129,7 @@ purpose registers are filled, the corresponding GPRs that match the size of the floating-point parameter are skipped. */ case FFI_TYPE_FLOAT: - double_tmp = *(float *)*p_argv; + double_tmp = *(float *) *p_argv; if (fparg_count >= NUM_FPR_ARG_REGISTERS) *(double *)next_arg = double_tmp; else @@ -139,12 +140,16 @@ break; case FFI_TYPE_DOUBLE: - double_tmp = *(double *)*p_argv; + double_tmp = *(double *) *p_argv; if (fparg_count >= NUM_FPR_ARG_REGISTERS) *(double *)next_arg = double_tmp; else *fpr_base++ = double_tmp; +#ifdef POWERPC64 + next_arg++; +#else next_arg += 2; +#endif fparg_count++; FFI_ASSERT(flags & FLAG_FP_ARGUMENTS); break; @@ -152,42 +157,71 @@ #if FFI_TYPE_LONGDOUBLE != FFI_TYPE_DOUBLE case FFI_TYPE_LONGDOUBLE: - double_tmp = ((double *)*p_argv)[0]; - if (fparg_count >= NUM_FPR_ARG_REGISTERS) - *(double *)next_arg = double_tmp; +#ifdef POWERPC64 + if (fparg_count < NUM_FPR_ARG_REGISTERS) + *(long double *) fpr_base++ = *(long double *) *p_argv; else + *(long double *) next_arg = *(long double *) *p_argv; + next_arg += 2; + fparg_count += 2; +#else + double_tmp = ((double *) *p_argv)[0]; + if (fparg_count < NUM_FPR_ARG_REGISTERS) *fpr_base++ = double_tmp; + else + *(double *) next_arg = double_tmp; next_arg += 2; fparg_count++; - double_tmp = ((double *)*p_argv)[1]; - if (fparg_count >= NUM_FPR_ARG_REGISTERS) - *(double *)next_arg = double_tmp; - else + + double_tmp = ((double *) *p_argv)[1]; + if (fparg_count < NUM_FPR_ARG_REGISTERS) *fpr_base++ = double_tmp; + else + *(double *) next_arg = double_tmp; next_arg += 2; fparg_count++; +#endif FFI_ASSERT(flags & FLAG_FP_ARGUMENTS); break; #endif case FFI_TYPE_UINT64: case FFI_TYPE_SINT64: - *(long long *)next_arg = *(long long *)*p_argv; - next_arg+=2; +#ifdef POWERPC64 + gprvalue = *(long long *) *p_argv; + goto putgpr; +#else + *(long long *) next_arg = *(long long *) *p_argv; + next_arg += 2; +#endif break; + case FFI_TYPE_POINTER: + gprvalue = *(unsigned long *) *p_argv; + goto putgpr; case FFI_TYPE_UINT8: - gprvalue = *(unsigned char *)*p_argv; + gprvalue = *(unsigned char *) *p_argv; goto putgpr; case FFI_TYPE_SINT8: - gprvalue = *(signed char *)*p_argv; + gprvalue = *(signed char *) *p_argv; goto putgpr; case FFI_TYPE_UINT16: - gprvalue = *(unsigned short *)*p_argv; + gprvalue = *(unsigned short *) *p_argv; goto putgpr; case FFI_TYPE_SINT16: - gprvalue = *(signed short *)*p_argv; + gprvalue = *(signed short *) *p_argv; goto putgpr; case FFI_TYPE_STRUCT: +#ifdef POWERPC64 + dest_cpy = (char *) next_arg; + size_al = (*ptr)->size; + if ((*ptr)->elements[0]->type == 3) + size_al = ALIGN((*ptr)->size, 8); + if (size_al < 3 && abi == FFI_DARWIN) + dest_cpy += 4 - size_al; + + memcpy ((char *) dest_cpy, (char *) *p_argv, size_al); + next_arg += (size_al + 7) / 8; +#else dest_cpy = (char *) next_arg; /* Structures that match the basic modes (QI 1 byte, HI 2 bytes, @@ -195,22 +229,24 @@ Structures with 3 byte in size are padded upwards. */ size_al = (*ptr)->size; /* If the first member of the struct is a double, then align - the struct to double-word. - Type 3 is defined in include/ffi.h. #define FFI_TYPE_DOUBLE 3. */ - if ((*ptr)->elements[0]->type == 3) + the struct to double-word. */ + if ((*ptr)->elements[0]->type == FFI_TYPE_DOUBLE) size_al = ALIGN((*ptr)->size, 8); - if (size_al < 3 && ecif->cif->abi == FFI_DARWIN) + if (size_al < 3 && abi == FFI_DARWIN) dest_cpy += 4 - size_al; - memcpy((char *)dest_cpy, (char *)*p_argv, size_al); + memcpy((char *) dest_cpy, (char *) *p_argv, size_al); next_arg += (size_al + 3) / 4; +#endif break; case FFI_TYPE_INT: - case FFI_TYPE_UINT32: case FFI_TYPE_SINT32: - case FFI_TYPE_POINTER: - gprvalue = *(unsigned *)*p_argv; + gprvalue = *(signed int *) *p_argv; + goto putgpr; + + case FFI_TYPE_UINT32: + gprvalue = *(unsigned int *) *p_argv; putgpr: *next_arg++ = gprvalue; break; @@ -268,8 +304,44 @@ /* Do not add additional tail padding. */ } +/* Adjust the size of S to be correct for AIX. + Word-align double unless it is the first member of a structure. */ + +static void +aix_adjust_aggregate_sizes (ffi_type *s) +{ + int i; + + if (s->type != FFI_TYPE_STRUCT) + return; + + s->size = 0; + for (i = 0; s->elements[i] != NULL; i++) + { + ffi_type *p; + int align; + + p = s->elements[i]; + aix_adjust_aggregate_sizes (p); + align = p->alignment; + if (i != 0 && p->type == FFI_TYPE_DOUBLE) + align = 4; + s->size = ALIGN(s->size, align) + p->size; + } + + s->size = ALIGN(s->size, s->alignment); + + if (s->elements[0]->type == FFI_TYPE_UINT64 + || s->elements[0]->type == FFI_TYPE_SINT64 + || s->elements[0]->type == FFI_TYPE_DOUBLE + || s->elements[0]->alignment == 8) + s->alignment = s->alignment > 8 ? s->alignment : 8; + /* Do not add additional tail padding. */ +} + /* Perform machine dependent cif processing. */ -ffi_status ffi_prep_cif_machdep(ffi_cif *cif) +ffi_status +ffi_prep_cif_machdep (ffi_cif *cif) { /* All this is for the DARWIN ABI. */ int i; @@ -290,6 +362,13 @@ darwin_adjust_aggregate_sizes (cif->arg_types[i]); } + if (cif->abi == FFI_AIX) + { + aix_adjust_aggregate_sizes (cif->rtype); + for (i = 0; i < cif->nargs; i++) + aix_adjust_aggregate_sizes (cif->arg_types[i]); + } + /* Space for the frame pointer, callee's LR, CR, etc, and for the asm's temp regs. */ @@ -324,6 +403,9 @@ case FFI_TYPE_UINT64: case FFI_TYPE_SINT64: +#ifdef POWERPC64 + case FFI_TYPE_POINTER: +#endif flags |= FLAG_RETURNS_64BITS; break; @@ -387,11 +469,14 @@ case FFI_TYPE_STRUCT: size_al = (*ptr)->size; /* If the first member of the struct is a double, then align - the struct to double-word. - Type 3 is defined in include/ffi.h. #define FFI_TYPE_DOUBLE 3. */ - if ((*ptr)->elements[0]->type == 3) + the struct to double-word. */ + if ((*ptr)->elements[0]->type == FFI_TYPE_DOUBLE) size_al = ALIGN((*ptr)->size, 8); +#ifdef POWERPC64 + intarg_count += (size_al + 7) / 8; +#else intarg_count += (size_al + 3) / 4; +#endif break; default: @@ -410,8 +495,13 @@ bytes += NUM_FPR_ARG_REGISTERS * sizeof(double); /* Stack space. */ +#ifdef POWERPC64 + if ((intarg_count + fparg_count) > NUM_GPR_ARG_REGISTERS) + bytes += (intarg_count + fparg_count) * sizeof(long); +#else if ((intarg_count + 2 * fparg_count) > NUM_GPR_ARG_REGISTERS) bytes += (intarg_count + 2 * fparg_count) * sizeof(long); +#endif else bytes += NUM_GPR_ARG_REGISTERS * sizeof(long); @@ -424,12 +514,13 @@ return FFI_OK; } -extern void ffi_call_AIX(extended_cif *, unsigned, unsigned, unsigned *, +extern void ffi_call_AIX(extended_cif *, long, unsigned, unsigned *, void (*fn)(void), void (*fn2)(void)); -extern void ffi_call_DARWIN(extended_cif *, unsigned, unsigned, unsigned *, +extern void ffi_call_DARWIN(extended_cif *, long, unsigned, unsigned *, void (*fn)(void), void (*fn2)(void)); -void ffi_call(ffi_cif *cif, void (*fn)(void), void *rvalue, void **avalue) +void +ffi_call (ffi_cif *cif, void (*fn)(void), void *rvalue, void **avalue) { extended_cif ecif; @@ -442,7 +533,7 @@ if ((rvalue == NULL) && (cif->rtype->type == FFI_TYPE_STRUCT)) { - ecif.rvalue = alloca(cif->rtype->size); + ecif.rvalue = alloca (cif->rtype->size); } else ecif.rvalue = rvalue; @@ -450,11 +541,11 @@ switch (cif->abi) { case FFI_AIX: - ffi_call_AIX(&ecif, -cif->bytes, cif->flags, ecif.rvalue, fn, + ffi_call_AIX(&ecif, -(long)cif->bytes, cif->flags, ecif.rvalue, fn, ffi_prep_args); break; case FFI_DARWIN: - ffi_call_DARWIN(&ecif, -cif->bytes, cif->flags, ecif.rvalue, fn, + ffi_call_DARWIN(&ecif, -(long)cif->bytes, cif->flags, ecif.rvalue, fn, ffi_prep_args); break; default: @@ -617,8 +708,9 @@ double d; } ffi_dblfl; -int ffi_closure_helper_DARWIN (ffi_closure*, void*, - unsigned long*, ffi_dblfl*); +int +ffi_closure_helper_DARWIN (ffi_closure *, void *, + unsigned long *, ffi_dblfl *); /* Basically the trampoline invokes ffi_closure_ASM, and on entry, r11 holds the address of the closure. @@ -627,8 +719,9 @@ up space for a return value, ffi_closure_ASM invokes the following helper function to do most of the work. */ -int ffi_closure_helper_DARWIN (ffi_closure* closure, void * rvalue, - unsigned long * pgr, ffi_dblfl * pfr) +int +ffi_closure_helper_DARWIN (ffi_closure *closure, void *rvalue, + unsigned long *pgr, ffi_dblfl *pfr) { /* rvalue is the pointer to space for return value in closure assembly pgr is the pointer to where r3-r10 are stored in ffi_closure_ASM @@ -645,18 +738,12 @@ void ** avalue; ffi_type ** arg_types; long i, avn; - long nf; /* number of floating registers already used. */ - long ng; /* number of general registers already used. */ ffi_cif * cif; - double temp; + ffi_dblfl * end_pfr = pfr + NUM_FPR_ARG_REGISTERS; unsigned size_al; - union ldu temp_ld; cif = closure->cif; - avalue = alloca(cif->nargs * sizeof(void *)); - - nf = 0; - ng = 0; + avalue = alloca (cif->nargs * sizeof(void *)); /* Copy the caller's structure return value address so that the closure returns the data directly to the caller. */ @@ -664,7 +751,6 @@ { rvalue = (void *) *pgr; pgr++; - ng++; } i = 0; @@ -678,58 +764,82 @@ { case FFI_TYPE_SINT8: case FFI_TYPE_UINT8: +#ifdef POWERPC64 + avalue[i] = (char *) pgr + 7; +#else avalue[i] = (char *) pgr + 3; - ng++; +#endif pgr++; break; case FFI_TYPE_SINT16: case FFI_TYPE_UINT16: +#ifdef POWERPC64 + avalue[i] = (char *) pgr + 6; +#else avalue[i] = (char *) pgr + 2; - ng++; +#endif pgr++; break; case FFI_TYPE_SINT32: case FFI_TYPE_UINT32: +#ifdef POWERPC64 + avalue[i] = (char *) pgr + 4; +#else case FFI_TYPE_POINTER: avalue[i] = pgr; - ng++; +#endif pgr++; break; case FFI_TYPE_STRUCT: +#ifdef POWERPC64 + size_al = arg_types[i]->size; + if (arg_types[i]->elements[0]->type == FFI_TYPE_DOUBLE) + size_al = ALIGN (arg_types[i]->size, 8); + if (size_al < 3 && cif->abi == FFI_DARWIN) + avalue[i] = (void *) pgr + 8 - size_al; + else + avalue[i] = (void *) pgr; + pgr += (size_al + 7) / 8; +#else /* Structures that match the basic modes (QI 1 byte, HI 2 bytes, SI 4 bytes) are aligned as if they were those modes. */ size_al = arg_types[i]->size; /* If the first member of the struct is a double, then align - the struct to double-word. - Type 3 is defined in include/ffi.h. #define FFI_TYPE_DOUBLE 3. */ - if (arg_types[i]->elements[0]->type == 3) + the struct to double-word. */ + if (arg_types[i]->elements[0]->type == FFI_TYPE_DOUBLE) size_al = ALIGN(arg_types[i]->size, 8); if (size_al < 3 && cif->abi == FFI_DARWIN) avalue[i] = (void*) pgr + 4 - size_al; else avalue[i] = (void*) pgr; - ng += (size_al + 3) / 4; pgr += (size_al + 3) / 4; +#endif break; case FFI_TYPE_SINT64: case FFI_TYPE_UINT64: +#ifdef POWERPC64 + case FFI_TYPE_POINTER: + avalue[i] = pgr; + pgr++; + break; +#else /* Long long ints are passed in two gpr's. */ avalue[i] = pgr; - ng += 2; pgr += 2; break; +#endif case FFI_TYPE_FLOAT: /* A float value consumes a GPR. There are 13 64bit floating point registers. */ - if (nf < NUM_FPR_ARG_REGISTERS) + if (pfr < end_pfr) { - temp = pfr->d; - pfr->f = (float)temp; + double temp = pfr->d; + pfr->f = (float) temp; avalue[i] = pfr; pfr++; } @@ -737,15 +847,13 @@ { avalue[i] = pgr; } - nf++; - ng++; pgr++; break; case FFI_TYPE_DOUBLE: /* A double value consumes two GPRs. There are 13 64bit floating point registers. */ - if (nf < NUM_FPR_ARG_REGISTERS) + if (pfr < end_pfr) { avalue[i] = pfr; pfr++; @@ -754,17 +862,36 @@ { avalue[i] = pgr; } - nf++; - ng += 2; +#ifdef POWERPC64 + pgr++; +#else pgr += 2; +#endif break; #if FFI_TYPE_LONGDOUBLE != FFI_TYPE_DOUBLE case FFI_TYPE_LONGDOUBLE: +#ifdef POWERPC64 + if (pfr + 1 < end_pfr) + { + avalue[i] = pfr; + pfr += 2; + } + else + { + if (pfr < end_pfr) + { + *pgr = *(unsigned long *) pfr; + pfr++; + } + avalue[i] = pgr; + } + pgr += 2; +#else /* POWERPC64 */ /* A long double value consumes four GPRs and two FPRs. There are 13 64bit floating point registers. */ - if (nf < NUM_FPR_ARG_REGISTERS - 1) + if (pfr + 1 < end_pfr) { avalue[i] = pfr; pfr += 2; @@ -772,19 +899,20 @@ /* Here we have the situation where one part of the long double is stored in fpr13 and the other part is already on the stack. We use a union to pass the long double to avalue[i]. */ - else if (nf == NUM_FPR_ARG_REGISTERS - 1) + else if (pfr + 1 == end_pfr) { + union ldu temp_ld; memcpy (&temp_ld.lb[0], pfr, sizeof(ldbits)); memcpy (&temp_ld.lb[1], pgr + 2, sizeof(ldbits)); avalue[i] = &temp_ld.ld; + pfr++; } else { avalue[i] = pgr; } - nf += 2; - ng += 4; pgr += 4; +#endif /* POWERPC64 */ break; #endif default: Modified: python/branches/py3k/Modules/_ctypes/libffi/src/powerpc/ffitarget.h ============================================================================== --- python/branches/py3k/Modules/_ctypes/libffi/src/powerpc/ffitarget.h (original) +++ python/branches/py3k/Modules/_ctypes/libffi/src/powerpc/ffitarget.h Mon Mar 15 14:25:28 2010 @@ -1,6 +1,6 @@ /* -----------------------------------------------------------------*-C-*- ffitarget.h - Copyright (c) 1996-2003 Red Hat, Inc. - Copyright (C) 2007 Free Software Foundation, Inc + Copyright (C) 2007, 2008 Free Software Foundation, Inc Target configuration macros for PowerPC. Permission is hereby granted, free of charge, to any person obtaining @@ -30,7 +30,11 @@ /* ---- System specific configurations ----------------------------------- */ -#if defined (POWERPC) && defined (__powerpc64__) +#if defined (POWERPC) && defined (__powerpc64__) /* linux64 */ +#define POWERPC64 +#elif defined (POWERPC_DARWIN) && defined (__ppc64__) /* Darwin */ +#define POWERPC64 +#elif defined (POWERPC_AIX) && defined (__64BIT__) /* AIX64 */ #define POWERPC64 #endif @@ -78,6 +82,8 @@ FFI_SYSV, FFI_GCC_SYSV, FFI_LINUX64, + FFI_LINUX, + FFI_LINUX_SOFT_FLOAT, FFI_DEFAULT_ABI = FFI_SYSV, #endif @@ -96,7 +102,9 @@ /* Needed for soft-float long-double-128 support. */ #define FFI_TYPE_UINT128 (FFI_TYPE_LAST + 1) -/* Needed for FFI_SYSV small structure returns. */ +/* Needed for FFI_SYSV small structure returns. + We use two flag bits, (FLAG_SYSV_SMST_R3, FLAG_SYSV_SMST_R4) which are + defined in ffi.c, to determine the exact return type and its size. */ #define FFI_SYSV_TYPE_SMALL_STRUCT (FFI_TYPE_LAST + 2) #if defined(POWERPC64) || defined(POWERPC_AIX) Modified: python/branches/py3k/Modules/_ctypes/libffi/src/powerpc/sysv.S ============================================================================== --- python/branches/py3k/Modules/_ctypes/libffi/src/powerpc/sysv.S (original) +++ python/branches/py3k/Modules/_ctypes/libffi/src/powerpc/sysv.S Mon Mar 15 14:25:28 2010 @@ -136,29 +136,18 @@ b L(done_return_value) L(small_struct_return_value): - mtcrf 0x10,%r31 /* cr3 */ - bt- 15,L(smst_one_register) - mtcrf 0x08,%r31 /* cr4 */ - bt- 16,L(smst_two_register) - b L(done_return_value) - -L(smst_one_register): - rlwinm %r5,%r31,5+23,32-5,31 /* Extract the value to shift. */ - slw %r3,%r3,%r5 - stw %r3,0(%r30) - b L(done_return_value) -L(smst_two_register): - rlwinm %r5,%r31,5+23,32-5,31 /* Extract the value to shift. */ - cmpwi %r5,0 - subfic %r9,%r5,32 - slw %r29,%r3,%r5 - srw %r9,%r4,%r9 - beq- L(smst_8byte) - or %r3,%r9,%r29 - slw %r4,%r4,%r5 -L(smst_8byte): - stw %r3,0(%r30) - stw %r4,4(%r30) + extrwi %r6,%r31,2,19 /* number of bytes padding = shift/8 */ + mtcrf 0x02,%r31 /* copy flags to cr[24:27] (cr6) */ + extrwi %r5,%r31,5,19 /* r5 <- number of bits of padding */ + subfic %r6,%r6,4 /* r6 <- number of useful bytes in r3 */ + bf- 25,L(done_return_value) /* struct in r3 ? if not, done. */ +/* smst_one_register: */ + slw %r3,%r3,%r5 /* Left-justify value in r3 */ + mtxer %r6 /* move byte count to XER ... */ + stswx %r3,0,%r30 /* ... and store that many bytes */ + bf+ 26,L(done_return_value) /* struct in r3:r4 ? */ + add %r6,%r6,%r30 /* adjust pointer */ + stswi %r4,%r6,4 /* store last four bytes */ b L(done_return_value) .LFE1: Modified: python/branches/py3k/Modules/_ctypes/libffi/src/s390/sysv.S ============================================================================== --- python/branches/py3k/Modules/_ctypes/libffi/src/s390/sysv.S (original) +++ python/branches/py3k/Modules/_ctypes/libffi/src/s390/sysv.S Mon Mar 15 14:25:28 2010 @@ -1,7 +1,7 @@ /* ----------------------------------------------------------------------- sysv.S - Copyright (c) 2000 Software AG Copyright (c) 2008 Red Hat, Inc. - + S390 Foreign Function Interface Permission is hereby granted, free of charge, to any person obtaining Modified: python/branches/py3k/Modules/_ctypes/libffi/src/sh/ffi.c ============================================================================== --- python/branches/py3k/Modules/_ctypes/libffi/src/sh/ffi.c (original) +++ python/branches/py3k/Modules/_ctypes/libffi/src/sh/ffi.c Mon Mar 15 14:25:28 2010 @@ -1,5 +1,5 @@ /* ----------------------------------------------------------------------- - ffi.c - Copyright (c) 2002, 2003, 2004, 2005, 2006, 2007 Kaz Kojima + ffi.c - Copyright (c) 2002, 2003, 2004, 2005, 2006, 2007, 2008 Kaz Kojima Copyright (c) 2008 Red Hat, Inc. SuperH Foreign Function Interface @@ -461,7 +461,7 @@ void *codeloc) { unsigned int *tramp; - unsigned short insn; + unsigned int insn; FFI_ASSERT (cif->abi == FFI_GCC_SYSV); Modified: python/branches/py3k/Modules/_ctypes/libffi/src/sh/sysv.S ============================================================================== --- python/branches/py3k/Modules/_ctypes/libffi/src/sh/sysv.S (original) +++ python/branches/py3k/Modules/_ctypes/libffi/src/sh/sysv.S Mon Mar 15 14:25:28 2010 @@ -1,5 +1,5 @@ /* ----------------------------------------------------------------------- - sysv.S - Copyright (c) 2002, 2003, 2004, 2006 Kaz Kojima + sysv.S - Copyright (c) 2002, 2003, 2004, 2006, 2008 Kaz Kojima SuperH Foreign Function Interface @@ -14,14 +14,14 @@ 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 THE AUTHORS OR COPYRIGHT HOLDERS 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 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 THE AUTHORS OR COPYRIGHT + HOLDERS 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 @@ -702,6 +702,10 @@ .ffi_closure_SYSV_end: .size CNAME(ffi_closure_SYSV),.ffi_closure_SYSV_end-CNAME(ffi_closure_SYSV) +#if defined __ELF__ && defined __linux__ + .section .note.GNU-stack,"", at progbits +#endif + .section ".eh_frame","aw", at progbits __FRAME_BEGIN__: .4byte .LECIE1-.LSCIE1 /* Length of Common Information Entry */ Modified: python/branches/py3k/Modules/_ctypes/libffi/src/sh64/ffi.c ============================================================================== --- python/branches/py3k/Modules/_ctypes/libffi/src/sh64/ffi.c (original) +++ python/branches/py3k/Modules/_ctypes/libffi/src/sh64/ffi.c Mon Mar 15 14:25:28 2010 @@ -1,5 +1,5 @@ /* ----------------------------------------------------------------------- - ffi.c - Copyright (c) 2003, 2004 Kaz Kojima + ffi.c - Copyright (c) 2003, 2004, 2006, 2007 Kaz Kojima Copyright (c) 2008 Anthony Green SuperH SHmedia Foreign Function Interface @@ -56,9 +56,7 @@ /* 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 unsigned int avn; @@ -162,6 +160,7 @@ int n, m; int greg; int freg; + int fpair = -1; greg = (return_type (cif->rtype) == FFI_TYPE_STRUCT ? 1 : 0); freg = 0; @@ -177,7 +176,13 @@ cif->bytes += sizeof (UINT64) - sizeof (float); if (freg >= NFREGARG - 1) continue; - freg++; + if (fpair < 0) + { + fpair = freg; + freg += 2; + } + else + fpair = -1; cif->flags2 += ((cif->arg_types)[i]->type) << (2 * j++); break; @@ -186,7 +191,6 @@ continue; if ((freg + 1) < NFREGARG) { - freg = (freg + 1) & ~1; freg += 2; cif->flags2 += ((cif->arg_types)[i]->type) << (2 * j++); } @@ -264,9 +268,7 @@ else if ((rvalue == NULL) && (cif->rtype->type == FFI_TYPE_STRUCT)) { - /*@-sysunrecog@*/ ecif.rvalue = alloca(cif->rtype->size); - /*@=sysunrecog@*/ } else ecif.rvalue = rvalue; @@ -274,10 +276,8 @@ switch (cif->abi) { case FFI_SYSV: - /*@-usedef@*/ - ffi_call_SYSV(ffi_prep_args, &ecif, cif->bytes, - cif->flags, cif->flags2, ecif.rvalue, fn); - /*@=usedef@*/ + ffi_call_SYSV(ffi_prep_args, &ecif, cif->bytes, cif->flags, cif->flags2, + ecif.rvalue, fn); break; default: FFI_ASSERT(0); @@ -294,10 +294,11 @@ extern void __ic_invalidate (void *line); ffi_status -ffi_prep_closure (ffi_closure *closure, - ffi_cif *cif, - void (*fun)(ffi_cif*, void*, void**, void*), - void *user_data) +ffi_prep_closure_loc (ffi_closure *closure, + ffi_cif *cif, + void (*fun)(ffi_cif*, void*, void**, void*), + void *user_data, + void *codeloc) { unsigned int *tramp; @@ -321,8 +322,8 @@ tramp[2] = 0xcc000010 | (((UINT32) ffi_closure_SYSV) >> 16) << 10; tramp[3] = 0xc8000010 | (((UINT32) ffi_closure_SYSV) & 0xffff) << 10; tramp[4] = 0x6bf10600; - tramp[5] = 0xcc000010 | (((UINT32) closure) >> 16) << 10; - tramp[6] = 0xc8000010 | (((UINT32) closure) & 0xffff) << 10; + tramp[5] = 0xcc000010 | (((UINT32) codeloc) >> 16) << 10; + tramp[6] = 0xc8000010 | (((UINT32) codeloc) & 0xffff) << 10; tramp[7] = 0x4401fff0; closure->cif = cif; @@ -330,7 +331,8 @@ closure->user_data = user_data; /* Flush the icache. */ - asm volatile ("ocbwb %0,0; synco; icbi %0,0; synci" : : "r" (tramp)); + asm volatile ("ocbwb %0,0; synco; icbi %1,0; synci" : : "r" (tramp), + "r"(codeloc)); return FFI_OK; } @@ -352,6 +354,7 @@ int i, avn; int greg, freg; ffi_cif *cif; + int fpair = -1; cif = closure->cif; avalue = alloca (cif->nargs * sizeof (void *)); @@ -360,7 +363,7 @@ returns the data directly to the caller. */ if (return_type (cif->rtype) == FFI_TYPE_STRUCT) { - rvalue = *pgr; + rvalue = (UINT64 *) *pgr; greg = 1; } else @@ -404,11 +407,24 @@ if ((*p_arg)->type == FFI_TYPE_FLOAT) { if (freg < NFREGARG - 1) + { + if (fpair >= 0) + { + avalue[i] = (UINT32 *) pfr + fpair; + fpair = -1; + } + else + { #ifdef __LITTLE_ENDIAN__ - avalue[i] = (UINT32 *) pfr + (1 ^ freg++); + fpair = freg; + avalue[i] = (UINT32 *) pfr + (1 ^ freg); #else - avalue[i] = (UINT32 *) pfr + freg++; + fpair = 1 ^ freg; + avalue[i] = (UINT32 *) pfr + freg; #endif + freg += 2; + } + } else #ifdef __LITTLE_ENDIAN__ avalue[i] = pgr + greg; @@ -430,7 +446,6 @@ avalue[i] = pgr + greg; else { - freg = (freg + 1) & ~1; avalue[i] = pfr + (freg >> 1); freg += 2; } Modified: python/branches/py3k/Modules/_ctypes/libffi/src/sh64/sysv.S ============================================================================== --- python/branches/py3k/Modules/_ctypes/libffi/src/sh64/sysv.S (original) +++ python/branches/py3k/Modules/_ctypes/libffi/src/sh64/sysv.S Mon Mar 15 14:25:28 2010 @@ -1,5 +1,5 @@ /* ----------------------------------------------------------------------- - sysv.S - Copyright (c) 2003, 2004 Kaz Kojima + sysv.S - Copyright (c) 2003, 2004, 2006, 2008 Kaz Kojima SuperH SHmedia Foreign Function Interface @@ -14,14 +14,15 @@ 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 THE AUTHORS OR COPYRIGHT HOLDERS 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 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 THE AUTHORS OR COPYRIGHT + HOLDERS 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 @@ -85,6 +86,7 @@ addi r15, 64, r22 movi 0, r0 movi 0, r1 + movi -1, r23 pt/l 1f, tr1 bnei/l r29, FFI_TYPE_STRUCT, tr1 @@ -107,9 +109,6 @@ .L_pass_d: addi r0, 1, r0 - addi r1, 1, r1 - andi r1, ~1, r1 - pt/l 3f, tr0 movi 12, r20 bge/l r1, r20, tr0 @@ -159,13 +158,23 @@ addi.l r15, 8, r15 3: pt/l .L_pass, tr0 - addi r1, 1, r1 blink tr0, r63 .L_pop_f: pt/l .L_pop_f_tbl, tr1 + pt/l 5f, tr2 gettr tr1, r20 + bge/l r23, r63, tr2 + add r1, r63, r23 shlli r1, 3, r21 + addi r1, 2, r1 + add r20, r21, r20 + ptabs/l r20, tr1 + blink tr1, r63 +5: + addi r23, 1, r21 + movi -1, r23 + shlli r21, 3, r21 add r20, r21, r20 ptabs/l r20, tr1 blink tr1, r63 @@ -430,6 +439,10 @@ .ffi_closure_SYSV_end: .size CNAME(ffi_closure_SYSV),.ffi_closure_SYSV_end-CNAME(ffi_closure_SYSV) +#if defined __ELF__ && defined __linux__ + .section .note.GNU-stack,"", at progbits +#endif + .section ".eh_frame","aw", at progbits __FRAME_BEGIN__: .4byte .LECIE1-.LSCIE1 /* Length of Common Information Entry */ Modified: python/branches/py3k/Modules/_ctypes/libffi/src/sparc/ffi.c ============================================================================== --- python/branches/py3k/Modules/_ctypes/libffi/src/sparc/ffi.c (original) +++ python/branches/py3k/Modules/_ctypes/libffi/src/sparc/ffi.c Mon Mar 15 14:25:28 2010 @@ -308,14 +308,24 @@ cif->flags = FFI_TYPE_STRUCT; break; + case FFI_TYPE_SINT8: + case FFI_TYPE_UINT8: + case FFI_TYPE_SINT16: + case FFI_TYPE_UINT16: + if (cif->abi == FFI_V9) + cif->flags = FFI_TYPE_INT; + else + cif->flags = cif->rtype->type; + break; + case FFI_TYPE_SINT64: case FFI_TYPE_UINT64: - if (cif->abi != FFI_V9) - { - cif->flags = FFI_TYPE_SINT64; - break; - } - /* FALLTHROUGH */ + if (cif->abi == FFI_V9) + cif->flags = FFI_TYPE_INT; + else + cif->flags = FFI_TYPE_SINT64; + break; + default: cif->flags = FFI_TYPE_INT; break; @@ -589,6 +599,11 @@ /* Right-justify. */ argn += ALIGN(arg_types[i]->size, FFI_SIZEOF_ARG) / FFI_SIZEOF_ARG; + /* Align on a 16-byte boundary. */ +#if FFI_TYPE_LONGDOUBLE != FFI_TYPE_DOUBLE + if (arg_types[i]->type == FFI_TYPE_LONGDOUBLE && (argn % 2) != 0) + argn++; +#endif if (i < fp_slot_max && (arg_types[i]->type == FFI_TYPE_FLOAT || arg_types[i]->type == FFI_TYPE_DOUBLE Modified: python/branches/py3k/Modules/_ctypes/libffi/src/sparc/v8.S ============================================================================== --- python/branches/py3k/Modules/_ctypes/libffi/src/sparc/v8.S (original) +++ python/branches/py3k/Modules/_ctypes/libffi/src/sparc/v8.S Mon Mar 15 14:25:28 2010 @@ -73,21 +73,63 @@ be,a done st %f0, [%i4+0] ! (delay) + cmp %i3, FFI_TYPE_DOUBLE + be,a double + st %f0, [%i4+0] ! (delay) + + cmp %i3, FFI_TYPE_SINT8 + be,a sint8 + sll %o0, 24, %o0 ! (delay) + + cmp %i3, FFI_TYPE_UINT8 + be,a uint8 + sll %o0, 24, %o0 ! (delay) + + cmp %i3, FFI_TYPE_SINT16 + be,a sint16 + sll %o0, 16, %o0 ! (delay) + + cmp %i3, FFI_TYPE_UINT16 + be,a uint16 + sll %o0, 16, %o0 ! (delay) + cmp %i3, FFI_TYPE_SINT64 - be longlong + be,a longlong + st %o0, [%i4+0] ! (delay) +done: + ret + restore - cmp %i3, FFI_TYPE_DOUBLE - bne done - nop - st %f0, [%i4+0] +double: st %f1, [%i4+4] - -done: ret restore -longlong: +sint8: + sra %o0, 24, %o0 st %o0, [%i4+0] + ret + restore + +uint8: + srl %o0, 24, %o0 + st %o0, [%i4+0] + ret + restore + +sint16: + sra %o0, 16, %o0 + st %o0, [%i4+0] + ret + restore + +uint16: + srl %o0, 16, %o0 + st %o0, [%i4+0] + ret + restore + +longlong: st %o1, [%i4+4] ret restore @@ -148,7 +190,8 @@ be done1 cmp %o0, FFI_TYPE_INT - be integer + be done1 + ld [%fp-8], %i0 cmp %o0, FFI_TYPE_FLOAT be,a done1 @@ -166,13 +209,11 @@ cmp %o0, FFI_TYPE_STRUCT be done2 - ! FFI_TYPE_SINT64 - ! FFI_TYPE_UINT64 - ld [%fp-4], %i1 + cmp %o0, FFI_TYPE_SINT64 + be,a done1 + ldd [%fp-8], %i0 -integer: ld [%fp-8], %i0 - done1: jmp %i7+8 restore Modified: python/branches/py3k/Modules/_ctypes/libffi/src/x86/darwin.S ============================================================================== --- python/branches/py3k/Modules/_ctypes/libffi/src/x86/darwin.S (original) +++ python/branches/py3k/Modules/_ctypes/libffi/src/x86/darwin.S Mon Mar 15 14:25:28 2010 @@ -15,15 +15,16 @@ 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 THE AUTHORS OR COPYRIGHT HOLDERS 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 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 THE AUTHORS OR COPYRIGHT + HOLDERS 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 __x86_64__ Modified: python/branches/py3k/Modules/_ctypes/libffi/src/x86/ffi.c ============================================================================== --- python/branches/py3k/Modules/_ctypes/libffi/src/x86/ffi.c (original) +++ python/branches/py3k/Modules/_ctypes/libffi/src/x86/ffi.c Mon Mar 15 14:25:28 2010 @@ -3,7 +3,7 @@ Copyright (c) 2002 Ranjit Mathew Copyright (c) 2002 Bo Thorsen Copyright (c) 2002 Roger Sayle - Copyright (C) 2008 Free Software Foundation, Inc. + Copyright (C) 2008 Free Software Foundation, Inc. x86 Foreign Function Interface @@ -28,7 +28,11 @@ DEALINGS IN THE SOFTWARE. ----------------------------------------------------------------------- */ -#ifndef __x86_64__ +#if !defined(__x86_64__) || defined(_WIN64) + +#ifdef _WIN64 +#include +#endif #include #include @@ -47,10 +51,15 @@ argp = stack; - if (ecif->cif->flags == FFI_TYPE_STRUCT) + if (ecif->cif->flags == FFI_TYPE_STRUCT +#ifdef X86_WIN64 + && (ecif->cif->rtype->size != 1 && ecif->cif->rtype->size != 2 + && ecif->cif->rtype->size != 4 && ecif->cif->rtype->size != 8) +#endif + ) { *(void **) argp = ecif->rvalue; - argp += 4; + argp += sizeof(void*); } p_argv = ecif->avalue; @@ -62,53 +71,75 @@ size_t z; /* Align if necessary */ - if ((sizeof(int) - 1) & (unsigned) argp) - argp = (char *) ALIGN(argp, sizeof(int)); + if ((sizeof(void*) - 1) & (size_t) argp) + argp = (char *) ALIGN(argp, sizeof(void*)); 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_SINT32: - *(signed int *) argp = (signed int)*(SINT32 *)(* p_argv); - break; - - case FFI_TYPE_UINT32: - *(unsigned int *) argp = (unsigned int)*(UINT32 *)(* p_argv); - break; - - case FFI_TYPE_STRUCT: - *(unsigned int *) argp = (unsigned int)*(UINT32 *)(* p_argv); - break; - - default: - FFI_ASSERT(0); - } - } +#ifdef X86_WIN64 + if (z > sizeof(ffi_arg) + || ((*p_arg)->type == FFI_TYPE_STRUCT + && (z != 1 && z != 2 && z != 4 && z != 8)) +#if FFI_TYPE_DOUBLE != FFI_TYPE_LONGDOUBLE + || ((*p_arg)->type == FFI_TYPE_LONGDOUBLE) +#endif + ) + { + z = sizeof(ffi_arg); + *(void **)argp = *p_argv; + } + else if ((*p_arg)->type == FFI_TYPE_FLOAT) + { + memcpy(argp, *p_argv, z); + } + else +#endif + if (z < sizeof(ffi_arg)) + { + z = sizeof(ffi_arg); + switch ((*p_arg)->type) + { + case FFI_TYPE_SINT8: + *(ffi_sarg *) argp = (ffi_sarg)*(SINT8 *)(* p_argv); + break; + + case FFI_TYPE_UINT8: + *(ffi_arg *) argp = (ffi_arg)*(UINT8 *)(* p_argv); + break; + + case FFI_TYPE_SINT16: + *(ffi_sarg *) argp = (ffi_sarg)*(SINT16 *)(* p_argv); + break; + + case FFI_TYPE_UINT16: + *(ffi_arg *) argp = (ffi_arg)*(UINT16 *)(* p_argv); + break; + + case FFI_TYPE_SINT32: + *(ffi_sarg *) argp = (ffi_sarg)*(SINT32 *)(* p_argv); + break; + + case FFI_TYPE_UINT32: + *(ffi_arg *) argp = (ffi_arg)*(UINT32 *)(* p_argv); + break; + + case FFI_TYPE_STRUCT: + *(ffi_arg *) argp = *(ffi_arg *)(* p_argv); + break; + + default: + FFI_ASSERT(0); + } + } else - { - memcpy(argp, *p_argv, z); - } + { + memcpy(argp, *p_argv, z); + } p_argv++; +#ifdef X86_WIN64 + argp += (z + sizeof(void*) - 1) & ~(sizeof(void*) - 1); +#else argp += z; +#endif } return; @@ -124,21 +155,32 @@ #ifdef X86 case FFI_TYPE_STRUCT: #endif -#if defined(X86) || defined(X86_DARWIN) +#if defined(X86) || defined (X86_WIN32) || defined(X86_FREEBSD) || defined(X86_DARWIN) || defined(X86_WIN64) case FFI_TYPE_UINT8: case FFI_TYPE_UINT16: case FFI_TYPE_SINT8: case FFI_TYPE_SINT16: #endif +#ifdef X86_WIN64 + case FFI_TYPE_UINT32: + case FFI_TYPE_SINT32: +#endif case FFI_TYPE_SINT64: case FFI_TYPE_FLOAT: case FFI_TYPE_DOUBLE: +#ifndef X86_WIN64 +#if FFI_TYPE_DOUBLE != FFI_TYPE_LONGDOUBLE case FFI_TYPE_LONGDOUBLE: +#endif +#endif cif->flags = (unsigned) cif->rtype->type; break; case FFI_TYPE_UINT64: +#ifdef X86_WIN64 + case FFI_TYPE_POINTER: +#endif cif->flags = FFI_TYPE_SINT64; break; @@ -154,7 +196,11 @@ } else if (cif->rtype->size == 4) { +#ifdef X86_WIN64 + cif->flags = FFI_TYPE_SMALL_STRUCT_4B; +#else cif->flags = FFI_TYPE_INT; /* same as int type */ +#endif } else if (cif->rtype->size == 8) { @@ -163,12 +209,23 @@ else { cif->flags = FFI_TYPE_STRUCT; +#ifdef X86_WIN64 + // allocate space for return value pointer + cif->bytes += ALIGN(sizeof(void*), FFI_SIZEOF_ARG); +#endif } break; #endif default: +#ifdef X86_WIN64 + cif->flags = FFI_TYPE_SINT64; + break; + case FFI_TYPE_INT: + cif->flags = FFI_TYPE_SINT32; +#else cif->flags = FFI_TYPE_INT; +#endif break; } @@ -176,17 +233,38 @@ cif->bytes = (cif->bytes + 15) & ~0xF; #endif +#ifdef X86_WIN64 + { + unsigned int i; + ffi_type **ptr; + + for (ptr = cif->arg_types, i = cif->nargs; i > 0; i--, ptr++) + { + if (((*ptr)->alignment - 1) & cif->bytes) + cif->bytes = ALIGN(cif->bytes, (*ptr)->alignment); + cif->bytes += ALIGN((*ptr)->size, FFI_SIZEOF_ARG); + } + } + // ensure space for storing four registers + cif->bytes += 4 * sizeof(ffi_arg); +#endif + return FFI_OK; } extern void ffi_call_SYSV(void (*)(char *, extended_cif *), extended_cif *, - unsigned, unsigned, unsigned *, void (*fn)(void)); + unsigned, unsigned, unsigned *, void (*fn)(void)); #ifdef X86_WIN32 extern void ffi_call_STDCALL(void (*)(char *, extended_cif *), extended_cif *, - unsigned, unsigned, unsigned *, void (*fn)(void)); + unsigned, unsigned, unsigned *, void (*fn)(void)); #endif /* X86_WIN32 */ +#ifdef X86_WIN64 +extern int +ffi_call_win64(void (*)(char *, extended_cif *), extended_cif *, + unsigned, unsigned, unsigned *, void (*fn)(void)); +#endif void ffi_call(ffi_cif *cif, void (*fn)(void), void *rvalue, void **avalue) { @@ -195,30 +273,66 @@ 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 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->flags == FFI_TYPE_STRUCT)) +#ifdef X86_WIN64 + if (rvalue == NULL + && cif->flags == FFI_TYPE_STRUCT + && cif->rtype->size != 1 && cif->rtype->size != 2 + && cif->rtype->size != 4 && cif->rtype->size != 8) + { + ecif.rvalue = alloca((cif->rtype->size + 0xF) & ~0xF); + } +#else + if (rvalue == NULL + && cif->flags == FFI_TYPE_STRUCT) { ecif.rvalue = alloca(cif->rtype->size); } +#endif else ecif.rvalue = rvalue; switch (cif->abi) { +#ifdef X86_WIN64 + case FFI_WIN64: + { + // Make copies of all struct arguments + // NOTE: not sure if responsibility should be here or in caller + unsigned int i; + for (i=0; i < cif->nargs;i++) { + size_t size = cif->arg_types[i]->size; + if ((cif->arg_types[i]->type == FFI_TYPE_STRUCT + && (size != 1 && size != 2 && size != 4 && size != 8)) +#if FFI_TYPE_LONGDOUBLE != FFI_TYPE_DOUBLE + || cif->arg_types[i]->type == FFI_TYPE_LONGDOUBLE +#endif + ) + { + void *local = alloca(size); + memcpy(local, avalue[i], size); + avalue[i] = local; + } + } + ffi_call_win64(ffi_prep_args, &ecif, cif->bytes, + cif->flags, ecif.rvalue, fn); + } + break; +#else case FFI_SYSV: ffi_call_SYSV(ffi_prep_args, &ecif, cif->bytes, cif->flags, ecif.rvalue, - fn); + fn); break; #ifdef X86_WIN32 case FFI_STDCALL: ffi_call_STDCALL(ffi_prep_args, &ecif, cif->bytes, cif->flags, - ecif.rvalue, fn); + ecif.rvalue, fn); break; #endif /* X86_WIN32 */ +#endif /* X86_WIN64 */ default: FFI_ASSERT(0); break; @@ -229,7 +343,7 @@ /** private members **/ static void ffi_prep_incoming_args_SYSV (char *stack, void **ret, - void** args, ffi_cif* cif); + void** args, ffi_cif* cif); void FFI_HIDDEN ffi_closure_SYSV (ffi_closure *) __attribute__ ((regparm(1))); unsigned int FFI_HIDDEN ffi_closure_SYSV_inner (ffi_closure *, void **, void *) @@ -240,9 +354,42 @@ void FFI_HIDDEN ffi_closure_STDCALL (ffi_closure *) __attribute__ ((regparm(1))); #endif +#ifdef X86_WIN64 +void FFI_HIDDEN ffi_closure_win64 (ffi_closure *); +#endif /* This function is jumped to by the trampoline */ +#ifdef X86_WIN64 +void * FFI_HIDDEN +ffi_closure_win64_inner (ffi_closure *closure, void *args) { + ffi_cif *cif; + void **arg_area; + void *result; + void *resp = &result; + + cif = closure->cif; + arg_area = (void**) alloca (cif->nargs * sizeof (void*)); + + /* this call will initialize ARG_AREA, such that each + * element in that array points to the corresponding + * value on the stack; and if the function returns + * a structure, it will change RESP to point to the + * structure return address. */ + + ffi_prep_incoming_args_SYSV(args, &resp, arg_area, cif); + + (closure->fun) (cif, resp, arg_area, closure->user_data); + + /* The result is returned in rax. This does the right thing for + result types except for floats; we have to 'mov xmm0, rax' in the + caller to correct this. + TODO: structure sizes of 3 5 6 7 are returned by reference, too!!! + */ + return cif->rtype->size > sizeof(void *) ? resp : *(void **)resp; +} + +#else unsigned int FFI_HIDDEN ffi_closure_SYSV_inner (closure, respp, args) ffi_closure *closure; @@ -259,7 +406,7 @@ /* this call will initialize ARG_AREA, 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 RESP to point to the + * a structure, it will change RESP to point to the * structure return address. */ ffi_prep_incoming_args_SYSV(args, respp, arg_area, cif); @@ -268,10 +415,11 @@ return cif->flags; } +#endif /* !X86_WIN64 */ static void ffi_prep_incoming_args_SYSV(char *stack, void **rvalue, void **avalue, - ffi_cif *cif) + ffi_cif *cif) { register unsigned int i; register void **p_argv; @@ -280,10 +428,20 @@ argp = stack; +#ifdef X86_WIN64 + if (cif->rtype->size > sizeof(ffi_arg) + || (cif->flags == FFI_TYPE_STRUCT + && (cif->rtype->size != 1 && cif->rtype->size != 2 + && cif->rtype->size != 4 && cif->rtype->size != 8))) { + *rvalue = *(void **) argp; + argp += sizeof(void *); + } +#else if ( cif->flags == FFI_TYPE_STRUCT ) { *rvalue = *(void **) argp; - argp += 4; + argp += sizeof(void *); } +#endif p_argv = avalue; @@ -292,30 +450,65 @@ size_t z; /* Align if necessary */ - if ((sizeof(int) - 1) & (unsigned) argp) { - argp = (char *) ALIGN(argp, sizeof(int)); + if ((sizeof(void*) - 1) & (size_t) argp) { + argp = (char *) ALIGN(argp, sizeof(void*)); } - z = (*p_arg)->size; - - /* because we're little endian, this is what it turns into. */ - - *p_argv = (void*) argp; - +#ifdef X86_WIN64 + if ((*p_arg)->size > sizeof(ffi_arg) + || ((*p_arg)->type == FFI_TYPE_STRUCT + && ((*p_arg)->size != 1 && (*p_arg)->size != 2 + && (*p_arg)->size != 4 && (*p_arg)->size != 8))) + { + z = sizeof(void *); + *p_argv = *(void **)argp; + } + else +#endif + { + z = (*p_arg)->size; + + /* because we're little endian, this is what it turns into. */ + + *p_argv = (void*) argp; + } + p_argv++; +#ifdef X86_WIN64 + argp += (z + sizeof(void*) - 1) & ~(sizeof(void*) - 1); +#else argp += z; +#endif } return; } +#define FFI_INIT_TRAMPOLINE_WIN64(TRAMP,FUN,CTX,MASK) \ +{ unsigned char *__tramp = (unsigned char*)(TRAMP); \ + void* __fun = (void*)(FUN); \ + void* __ctx = (void*)(CTX); \ + *(unsigned char*) &__tramp[0] = 0x41; \ + *(unsigned char*) &__tramp[1] = 0xbb; \ + *(unsigned int*) &__tramp[2] = MASK; /* mov $mask, %r11 */ \ + *(unsigned char*) &__tramp[6] = 0x48; \ + *(unsigned char*) &__tramp[7] = 0xb8; \ + *(void**) &__tramp[8] = __ctx; /* mov __ctx, %rax */ \ + *(unsigned char *) &__tramp[16] = 0x49; \ + *(unsigned char *) &__tramp[17] = 0xba; \ + *(void**) &__tramp[18] = __fun; /* mov __fun, %r10 */ \ + *(unsigned char *) &__tramp[26] = 0x41; \ + *(unsigned char *) &__tramp[27] = 0xff; \ + *(unsigned char *) &__tramp[28] = 0xe2; /* jmp %r10 */ \ + } + /* How to make a trampoline. Derived from gcc/config/i386/i386.c. */ #define FFI_INIT_TRAMPOLINE(TRAMP,FUN,CTX) \ ({ unsigned char *__tramp = (unsigned char*)(TRAMP); \ unsigned int __fun = (unsigned int)(FUN); \ unsigned int __ctx = (unsigned int)(CTX); \ - unsigned int __dis = __fun - (__ctx + 10); \ + unsigned int __dis = __fun - (__ctx + 10); \ *(unsigned char*) &__tramp[0] = 0xb8; \ *(unsigned int*) &__tramp[1] = __ctx; /* movl __ctx, %eax */ \ *(unsigned char *) &__tramp[5] = 0xe9; \ @@ -340,11 +533,23 @@ ffi_status ffi_prep_closure_loc (ffi_closure* closure, - ffi_cif* cif, - void (*fun)(ffi_cif*,void*,void**,void*), - void *user_data, - void *codeloc) + ffi_cif* cif, + void (*fun)(ffi_cif*,void*,void**,void*), + void *user_data, + void *codeloc) { +#ifdef X86_WIN64 +#define ISFLOAT(IDX) (cif->arg_types[IDX]->type == FFI_TYPE_FLOAT || cif->arg_types[IDX]->type == FFI_TYPE_DOUBLE) +#define FLAG(IDX) (cif->nargs>(IDX)&&ISFLOAT(IDX)?(1<<(IDX)):0) + if (cif->abi == FFI_WIN64) + { + int mask = FLAG(0)|FLAG(1)|FLAG(2)|FLAG(3); + FFI_INIT_TRAMPOLINE_WIN64 (&closure->tramp[0], + &ffi_closure_win64, + codeloc, mask); + /* make sure we can execute here */ + } +#else if (cif->abi == FFI_SYSV) { FFI_INIT_TRAMPOLINE (&closure->tramp[0], @@ -358,7 +563,8 @@ &ffi_closure_STDCALL, (void*)codeloc, cif->bytes); } -#endif +#endif /* X86_WIN32 */ +#endif /* !X86_WIN64 */ else { return FFI_BAD_ABI; @@ -377,10 +583,10 @@ ffi_status ffi_prep_raw_closure_loc (ffi_raw_closure* closure, - ffi_cif* cif, - void (*fun)(ffi_cif*,void*,ffi_raw*,void*), - void *user_data, - void *codeloc) + ffi_cif* cif, + void (*fun)(ffi_cif*,void*,ffi_raw*,void*), + void *user_data, + void *codeloc) { int i; @@ -401,7 +607,7 @@ FFI_INIT_TRAMPOLINE (&closure->tramp[0], &ffi_closure_raw_SYSV, - codeloc); + codeloc); closure->cif = cif; closure->user_data = user_data; @@ -423,12 +629,12 @@ extern void ffi_call_SYSV(void (*)(char *, extended_cif *), extended_cif *, unsigned, - unsigned, unsigned *, void (*fn)(void)); + unsigned, unsigned *, void (*fn)(void)); #ifdef X86_WIN32 extern void ffi_call_STDCALL(void (*)(char *, extended_cif *), extended_cif *, unsigned, - unsigned, unsigned *, void (*fn)(void)); + unsigned, unsigned *, void (*fn)(void)); #endif /* X86_WIN32 */ void @@ -440,8 +646,8 @@ 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 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)) @@ -456,12 +662,12 @@ { case FFI_SYSV: ffi_call_SYSV(ffi_prep_args_raw, &ecif, cif->bytes, cif->flags, - ecif.rvalue, fn); + ecif.rvalue, fn); break; #ifdef X86_WIN32 case FFI_STDCALL: ffi_call_STDCALL(ffi_prep_args_raw, &ecif, cif->bytes, cif->flags, - ecif.rvalue, fn); + ecif.rvalue, fn); break; #endif /* X86_WIN32 */ default: @@ -472,4 +678,5 @@ #endif -#endif /* __x86_64__ */ +#endif /* !__x86_64__ || X86_WIN64 */ + Modified: python/branches/py3k/Modules/_ctypes/libffi/src/x86/ffi64.c ============================================================================== --- python/branches/py3k/Modules/_ctypes/libffi/src/x86/ffi64.c (original) +++ python/branches/py3k/Modules/_ctypes/libffi/src/x86/ffi64.c Mon Mar 15 14:25:28 2010 @@ -1,6 +1,6 @@ /* ----------------------------------------------------------------------- - ffi.c - Copyright (c) 2002, 2007 Bo Thorsen - Copyright (c) 2008 Red Hat, Inc. + ffi64.c - Copyright (c) 2002, 2007 Bo Thorsen + Copyright (c) 2008 Red Hat, Inc. x86-64 Foreign Function Interface @@ -145,13 +145,35 @@ case FFI_TYPE_UINT64: case FFI_TYPE_SINT64: case FFI_TYPE_POINTER: - if (byte_offset + type->size <= 4) - classes[0] = X86_64_INTEGERSI_CLASS; - else - classes[0] = X86_64_INTEGER_CLASS; - return 1; + { + int size = byte_offset + type->size; + + if (size <= 4) + { + classes[0] = X86_64_INTEGERSI_CLASS; + return 1; + } + else if (size <= 8) + { + classes[0] = X86_64_INTEGER_CLASS; + return 1; + } + else if (size <= 12) + { + classes[0] = X86_64_INTEGER_CLASS; + classes[1] = X86_64_INTEGERSI_CLASS; + return 2; + } + else if (size <= 16) + { + classes[0] = classes[1] = X86_64_INTEGERSI_CLASS; + return 2; + } + else + FFI_ASSERT (0); + } case FFI_TYPE_FLOAT: - if (byte_offset == 0) + if (!(byte_offset % 8)) classes[0] = X86_64_SSESF_CLASS; else classes[0] = X86_64_SSE_CLASS; @@ -171,13 +193,21 @@ int i; enum x86_64_reg_class subclasses[MAX_CLASSES]; - /* If the struct is larger than 16 bytes, pass it on the stack. */ - if (type->size > 16) + /* If the struct is larger than 32 bytes, pass it on the stack. */ + if (type->size > 32) return 0; for (i = 0; i < words; i++) classes[i] = X86_64_NO_CLASS; + /* Zero sized arrays or structures are NO_CLASS. We return 0 to + signalize memory class, so handle it as special case. */ + if (!words) + { + classes[0] = X86_64_NO_CLASS; + return 1; + } + /* Merge the fields of structure. */ for (ptr = type->elements; *ptr != NULL; ptr++) { @@ -198,6 +228,20 @@ byte_offset += (*ptr)->size; } + if (words > 2) + { + /* When size > 16 bytes, if the first one isn't + X86_64_SSE_CLASS or any other ones aren't + X86_64_SSEUP_CLASS, everything should be passed in + memory. */ + if (classes[0] != X86_64_SSE_CLASS) + return 0; + + for (i = 1; i < words; i++) + if (classes[i] != X86_64_SSEUP_CLASS) + return 0; + } + /* Final merger cleanup. */ for (i = 0; i < words; i++) { @@ -207,15 +251,25 @@ return 0; /* The X86_64_SSEUP_CLASS should be always preceded by - X86_64_SSE_CLASS. */ + X86_64_SSE_CLASS or X86_64_SSEUP_CLASS. */ if (classes[i] == X86_64_SSEUP_CLASS - && (i == 0 || classes[i - 1] != X86_64_SSE_CLASS)) - classes[i] = X86_64_SSE_CLASS; + && classes[i - 1] != X86_64_SSE_CLASS + && classes[i - 1] != X86_64_SSEUP_CLASS) + { + /* The first one should never be X86_64_SSEUP_CLASS. */ + FFI_ASSERT (i != 0); + classes[i] = X86_64_SSE_CLASS; + } - /* X86_64_X87UP_CLASS should be preceded by X86_64_X87_CLASS. */ + /* If X86_64_X87UP_CLASS isn't preceded by X86_64_X87_CLASS, + everything should be passed in memory. */ if (classes[i] == X86_64_X87UP_CLASS - && (i == 0 || classes[i - 1] != X86_64_X87_CLASS)) - classes[i] = X86_64_SSE_CLASS; + && (classes[i - 1] != X86_64_X87_CLASS)) + { + /* The first one should never be X86_64_X87UP_CLASS. */ + FFI_ASSERT (i != 0); + return 0; + } } return words; } @@ -528,10 +582,10 @@ argp += arg_types[i]->size; } /* If the argument is in a single register, or two consecutive - registers, then we can use that address directly. */ + integer registers, then we can use that address directly. */ else if (n == 1 - || (n == 2 - && SSE_CLASS_P (classes[0]) == SSE_CLASS_P (classes[1]))) + || (n == 2 && !(SSE_CLASS_P (classes[0]) + || SSE_CLASS_P (classes[1])))) { /* The argument is in a single register. */ if (SSE_CLASS_P (classes[0])) Modified: python/branches/py3k/Modules/_ctypes/libffi/src/x86/ffitarget.h ============================================================================== --- python/branches/py3k/Modules/_ctypes/libffi/src/x86/ffitarget.h (original) +++ python/branches/py3k/Modules/_ctypes/libffi/src/x86/ffitarget.h Mon Mar 15 14:25:28 2010 @@ -36,11 +36,26 @@ #define X86 #endif +#ifdef X86_WIN64 +#define FFI_SIZEOF_ARG 8 +#define USE_BUILTIN_FFS 0 // not yet implemented in mingw-64 +#endif + /* ---- Generic type definitions ----------------------------------------- */ #ifndef LIBFFI_ASM +#ifdef X86_WIN64 +#ifdef _MSC_VER +typedef unsigned __int64 ffi_arg; +typedef __int64 ffi_sarg; +#else +typedef unsigned long long ffi_arg; +typedef long long ffi_sarg; +#endif +#else typedef unsigned long ffi_arg; typedef signed long ffi_sarg; +#endif typedef enum ffi_abi { FFI_FIRST_ABI = 0, @@ -53,6 +68,11 @@ FFI_DEFAULT_ABI = FFI_SYSV, #endif +#ifdef X86_WIN64 + FFI_WIN64, + FFI_DEFAULT_ABI = FFI_WIN64, +#else + /* ---- Intel x86 and AMD x86-64 - */ #if !defined(X86_WIN32) && (defined(__i386__) || defined(__x86_64__)) FFI_SYSV, @@ -63,6 +83,7 @@ FFI_DEFAULT_ABI = FFI_UNIX64, #endif #endif +#endif /* X86_WIN64 */ FFI_LAST_ABI = FFI_DEFAULT_ABI + 1 } ffi_abi; @@ -73,6 +94,7 @@ #define FFI_CLOSURES 1 #define FFI_TYPE_SMALL_STRUCT_1B (FFI_TYPE_LAST + 1) #define FFI_TYPE_SMALL_STRUCT_2B (FFI_TYPE_LAST + 2) +#define FFI_TYPE_SMALL_STRUCT_4B (FFI_TYPE_LAST + 3) #if defined (X86_64) || (defined (__x86_64__) && defined (X86_DARWIN)) #define FFI_TRAMPOLINE_SIZE 24 @@ -81,10 +103,18 @@ #ifdef X86_WIN32 #define FFI_TRAMPOLINE_SIZE 13 #else +#ifdef X86_WIN64 +#define FFI_TRAMPOLINE_SIZE 29 +#define FFI_NATIVE_RAW_API 0 +#define FFI_NO_RAW_API 1 +#else #define FFI_TRAMPOLINE_SIZE 10 #endif +#endif +#ifndef X86_WIN64 #define FFI_NATIVE_RAW_API 1 /* x86 has native raw api support */ #endif +#endif #endif Modified: python/branches/py3k/Modules/_ctypes/libffi/src/x86/sysv.S ============================================================================== --- python/branches/py3k/Modules/_ctypes/libffi/src/x86/sysv.S (original) +++ python/branches/py3k/Modules/_ctypes/libffi/src/x86/sysv.S Mon Mar 15 14:25:28 2010 @@ -242,9 +242,20 @@ #if !FFI_NO_RAW_API +/* Precalculate for e.g. the Solaris 10/x86 assembler. */ +#if FFI_TRAMPOLINE_SIZE == 10 +#define RAW_CLOSURE_CIF_OFFSET 12 +#define RAW_CLOSURE_FUN_OFFSET 16 +#define RAW_CLOSURE_USER_DATA_OFFSET 20 +#elif FFI_TRAMPOLINE_SIZE == 24 +#define RAW_CLOSURE_CIF_OFFSET 24 +#define RAW_CLOSURE_FUN_OFFSET 28 +#define RAW_CLOSURE_USER_DATA_OFFSET 32 +#else #define RAW_CLOSURE_CIF_OFFSET ((FFI_TRAMPOLINE_SIZE + 3) & ~3) #define RAW_CLOSURE_FUN_OFFSET (RAW_CLOSURE_CIF_OFFSET + 4) #define RAW_CLOSURE_USER_DATA_OFFSET (RAW_CLOSURE_FUN_OFFSET + 4) +#endif #define CIF_FLAGS_OFFSET 20 .align 4 @@ -343,10 +354,12 @@ .long .LEFDE1-.LASFDE1 /* FDE Length */ .LASFDE1: .long .LASFDE1-.Lframe1 /* FDE CIE offset */ -#ifdef __PIC__ +#if defined __PIC__ && defined HAVE_AS_X86_PCREL .long .LFB1-. /* FDE initial location */ +#elif defined __PIC__ + .long .LFB1 at rel #else - .long .LFB1 /* FDE initial location */ + .long .LFB1 #endif .long .LFE1-.LFB1 /* FDE address range */ #ifdef __PIC__ @@ -368,8 +381,10 @@ .long .LEFDE2-.LASFDE2 /* FDE Length */ .LASFDE2: .long .LASFDE2-.Lframe1 /* FDE CIE offset */ -#ifdef __PIC__ +#if defined __PIC__ && defined HAVE_AS_X86_PCREL .long .LFB2-. /* FDE initial location */ +#elif defined __PIC__ + .long .LFB2 at rel #else .long .LFB2 #endif @@ -402,8 +417,10 @@ .long .LEFDE3-.LASFDE3 /* FDE Length */ .LASFDE3: .long .LASFDE3-.Lframe1 /* FDE CIE offset */ -#ifdef __PIC__ +#if defined __PIC__ && defined HAVE_AS_X86_PCREL .long .LFB3-. /* FDE initial location */ +#elif defined __PIC__ + .long .LFB3 at rel #else .long .LFB3 #endif Modified: python/branches/py3k/Modules/_ctypes/libffi/src/x86/unix64.S ============================================================================== --- python/branches/py3k/Modules/_ctypes/libffi/src/x86/unix64.S (original) +++ python/branches/py3k/Modules/_ctypes/libffi/src/x86/unix64.S Mon Mar 15 14:25:28 2010 @@ -89,7 +89,6 @@ addq %r11, %r10 jmp *%r10 - .section .rodata .Lstore_table: .long .Lst_void-.Lstore_table /* FFI_TYPE_VOID */ .long .Lst_sint32-.Lstore_table /* FFI_TYPE_INT */ @@ -107,7 +106,6 @@ .long .Lst_struct-.Lstore_table /* FFI_TYPE_STRUCT */ .long .Lst_int64-.Lstore_table /* FFI_TYPE_POINTER */ - .text .align 2 .Lst_void: ret @@ -240,7 +238,6 @@ addq %r11, %r10 jmp *%r10 - .section .rodata .Lload_table: .long .Lld_void-.Lload_table /* FFI_TYPE_VOID */ .long .Lld_int32-.Lload_table /* FFI_TYPE_INT */ @@ -258,7 +255,6 @@ .long .Lld_struct-.Lload_table /* FFI_TYPE_STRUCT */ .long .Lld_int64-.Lload_table /* FFI_TYPE_POINTER */ - .text .align 2 .Lld_void: ret @@ -351,7 +347,11 @@ .long .LEFDE1-.LASFDE1 /* FDE Length */ .LASFDE1: .long .LASFDE1-.Lframe1 /* FDE CIE offset */ +#if HAVE_AS_X86_PCREL .long .LUW0-. /* FDE initial location */ +#else + .long .LUW0 at rel +#endif .long .LUW4-.LUW0 /* FDE address range */ .uleb128 0x0 /* Augmentation size */ @@ -389,7 +389,11 @@ .long .LEFDE3-.LASFDE3 /* FDE Length */ .LASFDE3: .long .LASFDE3-.Lframe1 /* FDE CIE offset */ +#if HAVE_AS_X86_PCREL .long .LUW5-. /* FDE initial location */ +#else + .long .LUW5 at rel +#endif .long .LUW9-.LUW5 /* FDE address range */ .uleb128 0x0 /* Augmentation size */ Modified: python/branches/py3k/Modules/_ctypes/libffi/src/x86/win32.S ============================================================================== --- python/branches/py3k/Modules/_ctypes/libffi/src/x86/win32.S (original) +++ python/branches/py3k/Modules/_ctypes/libffi/src/x86/win32.S Mon Mar 15 14:25:28 2010 @@ -1,5 +1,5 @@ /* ----------------------------------------------------------------------- - win32.S - Copyright (c) 1996, 1998, 2001, 2002 Red Hat, Inc. + win32.S - Copyright (c) 1996, 1998, 2001, 2002, 2009 Red Hat, Inc. Copyright (c) 2001 John Beniton Copyright (c) 2002 Ranjit Mathew @@ -17,32 +17,33 @@ 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 THE AUTHORS OR COPYRIGHT HOLDERS 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 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 THE AUTHORS OR COPYRIGHT + HOLDERS 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 -.text - -.globl ffi_prep_args + .text # This assumes we are using gas. .balign 16 -.globl _ffi_call_SYSV - + .globl _ffi_call_SYSV + .def _ffi_call_SYSV; .scl 2; .type 32; .endef _ffi_call_SYSV: +.LFB1: pushl %ebp +.LCFI0: movl %esp,%ebp - +.LCFI1: # Make room for all of the new args. movl 16(%ebp),%ecx subl %ecx,%esp @@ -62,100 +63,137 @@ call *28(%ebp) - # Remove the space we pushed for the args - movl 16(%ebp),%ecx - addl %ecx,%esp - # Load %ecx with the return type code movl 20(%ebp),%ecx # If the return value pointer is NULL, assume no return value. cmpl $0,24(%ebp) - jne retint + jne 0f # Even if there is no space for the return value, we are # obliged to handle floating-point values. cmpl $FFI_TYPE_FLOAT,%ecx - jne noretval + jne .Lnoretval fstp %st(0) - jmp epilogue - -retint: - cmpl $FFI_TYPE_INT,%ecx - jne retfloat + jmp .Lepilogue + +0: + call 1f + # Do not insert anything here between the call and the jump table. +.Lstore_table: + .long .Lnoretval /* FFI_TYPE_VOID */ + .long .Lretint /* FFI_TYPE_INT */ + .long .Lretfloat /* FFI_TYPE_FLOAT */ + .long .Lretdouble /* FFI_TYPE_DOUBLE */ + .long .Lretlongdouble /* FFI_TYPE_LONGDOUBLE */ + .long .Lretuint8 /* FFI_TYPE_UINT8 */ + .long .Lretsint8 /* FFI_TYPE_SINT8 */ + .long .Lretuint16 /* FFI_TYPE_UINT16 */ + .long .Lretsint16 /* FFI_TYPE_SINT16 */ + .long .Lretint /* FFI_TYPE_UINT32 */ + .long .Lretint /* FFI_TYPE_SINT32 */ + .long .Lretint64 /* FFI_TYPE_UINT64 */ + .long .Lretint64 /* FFI_TYPE_SINT64 */ + .long .Lretstruct /* FFI_TYPE_STRUCT */ + .long .Lretint /* FFI_TYPE_POINTER */ + .long .Lretstruct1b /* FFI_TYPE_SMALL_STRUCT_1B */ + .long .Lretstruct2b /* FFI_TYPE_SMALL_STRUCT_2B */ + .long .Lretstruct4b /* FFI_TYPE_SMALL_STRUCT_4B */ +1: + add %ecx, %ecx + add %ecx, %ecx + add (%esp),%ecx + add $4, %esp + jmp *(%ecx) + + /* Sign/zero extend as appropriate. */ +.Lretsint8: + movsbl %al, %eax + jmp .Lretint + +.Lretsint16: + movswl %ax, %eax + jmp .Lretint + +.Lretuint8: + movzbl %al, %eax + jmp .Lretint + +.Lretuint16: + movzwl %ax, %eax + jmp .Lretint + +.Lretint: # Load %ecx with the pointer to storage for the return value movl 24(%ebp),%ecx movl %eax,0(%ecx) - jmp epilogue + jmp .Lepilogue -retfloat: - cmpl $FFI_TYPE_FLOAT,%ecx - jne retdouble +.Lretfloat: # Load %ecx with the pointer to storage for the return value movl 24(%ebp),%ecx fstps (%ecx) - jmp epilogue + jmp .Lepilogue -retdouble: - cmpl $FFI_TYPE_DOUBLE,%ecx - jne retlongdouble +.Lretdouble: # Load %ecx with the pointer to storage for the return value movl 24(%ebp),%ecx fstpl (%ecx) - jmp epilogue + jmp .Lepilogue -retlongdouble: - cmpl $FFI_TYPE_LONGDOUBLE,%ecx - jne retint64 +.Lretlongdouble: # Load %ecx with the pointer to storage for the return value movl 24(%ebp),%ecx fstpt (%ecx) - jmp epilogue + jmp .Lepilogue -retint64: - cmpl $FFI_TYPE_SINT64,%ecx - jne retstruct1b +.Lretint64: # Load %ecx with the pointer to storage for the return value movl 24(%ebp),%ecx movl %eax,0(%ecx) movl %edx,4(%ecx) - -retstruct1b: - cmpl $FFI_TYPE_SINT8,%ecx - jne retstruct2b + jmp .Lepilogue + +.Lretstruct1b: # Load %ecx with the pointer to storage for the return value movl 24(%ebp),%ecx movb %al,0(%ecx) - jmp epilogue + jmp .Lepilogue -retstruct2b: - cmpl $FFI_TYPE_SINT16,%ecx - jne retstruct +.Lretstruct2b: # Load %ecx with the pointer to storage for the return value movl 24(%ebp),%ecx movw %ax,0(%ecx) - jmp epilogue - -retstruct: + jmp .Lepilogue + +.Lretstruct4b: + # Load %ecx with the pointer to storage for the return value + movl 24(%ebp),%ecx + movl %eax,0(%ecx) + jmp .Lepilogue + +.Lretstruct: # Nothing to do! -noretval: -epilogue: +.Lnoretval: +.Lepilogue: movl %ebp,%esp popl %ebp ret - .ffi_call_SYSV_end: +.LFE1: # This assumes we are using gas. .balign 16 -.globl _ffi_call_STDCALL - + .globl _ffi_call_STDCALL + .def _ffi_call_STDCALL; .scl 2; .type 32; .endef _ffi_call_STDCALL: +.LFB2: pushl %ebp +.LCFI2: movl %esp,%ebp - +.LCFI3: # Make room for all of the new args. movl 16(%ebp),%ecx subl %ecx,%esp @@ -182,103 +220,133 @@ # If the return value pointer is NULL, assume no return value. cmpl $0,24(%ebp) - jne sc_retint + jne 0f # Even if there is no space for the return value, we are # obliged to handle floating-point values. cmpl $FFI_TYPE_FLOAT,%ecx - jne sc_noretval + jne .Lsc_noretval fstp %st(0) - jmp sc_epilogue + jmp .Lsc_epilogue + +0: + call 1f + # Do not insert anything here between the call and the jump table. +.Lsc_store_table: + .long .Lsc_noretval /* FFI_TYPE_VOID */ + .long .Lsc_retint /* FFI_TYPE_INT */ + .long .Lsc_retfloat /* FFI_TYPE_FLOAT */ + .long .Lsc_retdouble /* FFI_TYPE_DOUBLE */ + .long .Lsc_retlongdouble /* FFI_TYPE_LONGDOUBLE */ + .long .Lsc_retuint8 /* FFI_TYPE_UINT8 */ + .long .Lsc_retsint8 /* FFI_TYPE_SINT8 */ + .long .Lsc_retuint16 /* FFI_TYPE_UINT16 */ + .long .Lsc_retsint16 /* FFI_TYPE_SINT16 */ + .long .Lsc_retint /* FFI_TYPE_UINT32 */ + .long .Lsc_retint /* FFI_TYPE_SINT32 */ + .long .Lsc_retint64 /* FFI_TYPE_UINT64 */ + .long .Lsc_retint64 /* FFI_TYPE_SINT64 */ + .long .Lsc_retstruct /* FFI_TYPE_STRUCT */ + .long .Lsc_retint /* FFI_TYPE_POINTER */ + .long .Lsc_retstruct1b /* FFI_TYPE_SMALL_STRUCT_1B */ + .long .Lsc_retstruct2b /* FFI_TYPE_SMALL_STRUCT_2B */ + .long .Lsc_retstruct4b /* FFI_TYPE_SMALL_STRUCT_4B */ + +1: + add %ecx, %ecx + add %ecx, %ecx + add (%esp),%ecx + add $4, %esp + jmp *(%ecx) + + /* Sign/zero extend as appropriate. */ +.Lsc_retsint8: + movsbl %al, %eax + jmp .Lsc_retint + +.Lsc_retsint16: + movswl %ax, %eax + jmp .Lsc_retint + +.Lsc_retuint8: + movzbl %al, %eax + jmp .Lsc_retint + +.Lsc_retuint16: + movzwl %ax, %eax + jmp .Lsc_retint -sc_retint: - cmpl $FFI_TYPE_INT,%ecx - jne sc_retfloat +.Lsc_retint: # Load %ecx with the pointer to storage for the return value movl 24(%ebp),%ecx movl %eax,0(%ecx) - jmp sc_epilogue + jmp .Lsc_epilogue -sc_retfloat: - cmpl $FFI_TYPE_FLOAT,%ecx - jne sc_retdouble +.Lsc_retfloat: # Load %ecx with the pointer to storage for the return value movl 24(%ebp),%ecx fstps (%ecx) - jmp sc_epilogue + jmp .Lsc_epilogue -sc_retdouble: - cmpl $FFI_TYPE_DOUBLE,%ecx - jne sc_retlongdouble +.Lsc_retdouble: # Load %ecx with the pointer to storage for the return value movl 24(%ebp),%ecx fstpl (%ecx) - jmp sc_epilogue + jmp .Lsc_epilogue -sc_retlongdouble: - cmpl $FFI_TYPE_LONGDOUBLE,%ecx - jne sc_retint64 +.Lsc_retlongdouble: # Load %ecx with the pointer to storage for the return value movl 24(%ebp),%ecx fstpt (%ecx) - jmp sc_epilogue + jmp .Lsc_epilogue -sc_retint64: - cmpl $FFI_TYPE_SINT64,%ecx - jne sc_retstruct1b +.Lsc_retint64: # Load %ecx with the pointer to storage for the return value movl 24(%ebp),%ecx movl %eax,0(%ecx) movl %edx,4(%ecx) + jmp .Lsc_epilogue -sc_retstruct1b: - cmpl $FFI_TYPE_SINT8,%ecx - jne sc_retstruct2b +.Lsc_retstruct1b: # Load %ecx with the pointer to storage for the return value movl 24(%ebp),%ecx movb %al,0(%ecx) - jmp sc_epilogue + jmp .Lsc_epilogue -sc_retstruct2b: - cmpl $FFI_TYPE_SINT16,%ecx - jne sc_retstruct +.Lsc_retstruct2b: # Load %ecx with the pointer to storage for the return value movl 24(%ebp),%ecx movw %ax,0(%ecx) - jmp sc_epilogue + jmp .Lsc_epilogue + +.Lsc_retstruct4b: + # Load %ecx with the pointer to storage for the return value + movl 24(%ebp),%ecx + movl %eax,0(%ecx) + jmp .Lsc_epilogue -sc_retstruct: +.Lsc_retstruct: # Nothing to do! -sc_noretval: -sc_epilogue: +.Lsc_noretval: +.Lsc_epilogue: movl %ebp,%esp popl %ebp ret - .ffi_call_STDCALL_end: +.LFE2: - .globl _ffi_closure_STDCALL -_ffi_closure_STDCALL: - pushl %ebp - movl %esp, %ebp - subl $40, %esp - leal -24(%ebp), %edx - movl %edx, -12(%ebp) /* resp */ - leal 12(%ebp), %edx /* account for stub return address on stack */ - movl %edx, 4(%esp) /* args */ - leal -12(%ebp), %edx - movl %edx, (%esp) /* &resp */ - call _ffi_closure_SYSV_inner - movl -12(%ebp), %ecx - jmp .Lcls_return_result -.ffi_closure_STDCALL_end: - - .globl _ffi_closure_SYSV + # This assumes we are using gas. + .balign 16 + .globl _ffi_closure_SYSV + .def _ffi_closure_SYSV; .scl 2; .type 32; .endef _ffi_closure_SYSV: +.LFB3: pushl %ebp +.LCFI4: movl %esp, %ebp +.LCFI5: subl $40, %esp leal -24(%ebp), %edx movl %edx, -12(%ebp) /* resp */ @@ -288,48 +356,100 @@ movl %edx, (%esp) /* &resp */ call _ffi_closure_SYSV_inner movl -12(%ebp), %ecx -.Lcls_return_result: - cmpl $FFI_TYPE_INT, %eax - je .Lcls_retint - cmpl $FFI_TYPE_FLOAT, %eax - je .Lcls_retfloat - cmpl $FFI_TYPE_DOUBLE, %eax - je .Lcls_retdouble - cmpl $FFI_TYPE_LONGDOUBLE, %eax - je .Lcls_retldouble - cmpl $FFI_TYPE_SINT64, %eax - je .Lcls_retllong - cmpl $FFI_TYPE_SINT8, %eax /* 1-byte struct */ - je .Lcls_retstruct1 - cmpl $FFI_TYPE_SINT16, %eax /* 2-bytes struct */ - je .Lcls_retstruct2 -.Lcls_epilogue: - movl %ebp, %esp - popl %ebp - ret + +0: + call 1f + # Do not insert anything here between the call and the jump table. +.Lcls_store_table: + .long .Lcls_noretval /* FFI_TYPE_VOID */ + .long .Lcls_retint /* FFI_TYPE_INT */ + .long .Lcls_retfloat /* FFI_TYPE_FLOAT */ + .long .Lcls_retdouble /* FFI_TYPE_DOUBLE */ + .long .Lcls_retldouble /* FFI_TYPE_LONGDOUBLE */ + .long .Lcls_retuint8 /* FFI_TYPE_UINT8 */ + .long .Lcls_retsint8 /* FFI_TYPE_SINT8 */ + .long .Lcls_retuint16 /* FFI_TYPE_UINT16 */ + .long .Lcls_retsint16 /* FFI_TYPE_SINT16 */ + .long .Lcls_retint /* FFI_TYPE_UINT32 */ + .long .Lcls_retint /* FFI_TYPE_SINT32 */ + .long .Lcls_retllong /* FFI_TYPE_UINT64 */ + .long .Lcls_retllong /* FFI_TYPE_SINT64 */ + .long .Lcls_retstruct /* FFI_TYPE_STRUCT */ + .long .Lcls_retint /* FFI_TYPE_POINTER */ + .long .Lcls_retstruct1 /* FFI_TYPE_SMALL_STRUCT_1B */ + .long .Lcls_retstruct2 /* FFI_TYPE_SMALL_STRUCT_2B */ + .long .Lcls_retstruct4 /* FFI_TYPE_SMALL_STRUCT_4B */ + +1: + add %eax, %eax + add %eax, %eax + add (%esp),%eax + add $4, %esp + jmp *(%eax) + + /* Sign/zero extend as appropriate. */ +.Lcls_retsint8: + movsbl (%ecx), %eax + jmp .Lcls_epilogue + +.Lcls_retsint16: + movswl (%ecx), %eax + jmp .Lcls_epilogue + +.Lcls_retuint8: + movzbl (%ecx), %eax + jmp .Lcls_epilogue + +.Lcls_retuint16: + movzwl (%ecx), %eax + jmp .Lcls_epilogue + .Lcls_retint: movl (%ecx), %eax jmp .Lcls_epilogue + .Lcls_retfloat: flds (%ecx) jmp .Lcls_epilogue + .Lcls_retdouble: fldl (%ecx) jmp .Lcls_epilogue + .Lcls_retldouble: fldt (%ecx) jmp .Lcls_epilogue + .Lcls_retllong: movl (%ecx), %eax movl 4(%ecx), %edx jmp .Lcls_epilogue + .Lcls_retstruct1: movsbl (%ecx), %eax jmp .Lcls_epilogue + .Lcls_retstruct2: movswl (%ecx), %eax jmp .Lcls_epilogue + +.Lcls_retstruct4: + movl (%ecx), %eax + jmp .Lcls_epilogue + +.Lcls_retstruct: + # Caller expects us to pop struct return value pointer hidden arg. + movl %ebp, %esp + popl %ebp + ret $0x4 + +.Lcls_noretval: +.Lcls_epilogue: + movl %ebp, %esp + popl %ebp + ret .ffi_closure_SYSV_end: +.LFE3: #if !FFI_NO_RAW_API @@ -338,12 +458,18 @@ #define RAW_CLOSURE_USER_DATA_OFFSET (RAW_CLOSURE_FUN_OFFSET + 4) #define CIF_FLAGS_OFFSET 20 - .balign 16 - .globl _ffi_closure_raw_SYSV + # This assumes we are using gas. + .balign 16 + .globl _ffi_closure_raw_SYSV + .def _ffi_closure_raw_SYSV; .scl 2; .type 32; .endef _ffi_closure_raw_SYSV: +.LFB4: pushl %ebp +.LCFI6: movl %esp, %ebp +.LCFI7: pushl %esi +.LCFI8: subl $36, %esp movl RAW_CLOSURE_CIF_OFFSET(%eax), %esi /* closure->cif */ movl RAW_CLOSURE_USER_DATA_OFFSET(%eax), %edx /* closure->user_data */ @@ -355,37 +481,397 @@ movl %esi, (%esp) /* cif */ call *RAW_CLOSURE_FUN_OFFSET(%eax) /* closure->fun */ movl CIF_FLAGS_OFFSET(%esi), %eax /* rtype */ - cmpl $FFI_TYPE_INT, %eax - je .Lrcls_retint - cmpl $FFI_TYPE_FLOAT, %eax - je .Lrcls_retfloat - cmpl $FFI_TYPE_DOUBLE, %eax - je .Lrcls_retdouble - cmpl $FFI_TYPE_LONGDOUBLE, %eax - je .Lrcls_retldouble - cmpl $FFI_TYPE_SINT64, %eax - je .Lrcls_retllong -.Lrcls_epilogue: - addl $36, %esp - popl %esi - popl %ebp - ret +0: + call 1f + # Do not insert anything here between the call and the jump table. +.Lrcls_store_table: + .long .Lrcls_noretval /* FFI_TYPE_VOID */ + .long .Lrcls_retint /* FFI_TYPE_INT */ + .long .Lrcls_retfloat /* FFI_TYPE_FLOAT */ + .long .Lrcls_retdouble /* FFI_TYPE_DOUBLE */ + .long .Lrcls_retldouble /* FFI_TYPE_LONGDOUBLE */ + .long .Lrcls_retuint8 /* FFI_TYPE_UINT8 */ + .long .Lrcls_retsint8 /* FFI_TYPE_SINT8 */ + .long .Lrcls_retuint16 /* FFI_TYPE_UINT16 */ + .long .Lrcls_retsint16 /* FFI_TYPE_SINT16 */ + .long .Lrcls_retint /* FFI_TYPE_UINT32 */ + .long .Lrcls_retint /* FFI_TYPE_SINT32 */ + .long .Lrcls_retllong /* FFI_TYPE_UINT64 */ + .long .Lrcls_retllong /* FFI_TYPE_SINT64 */ + .long .Lrcls_retstruct /* FFI_TYPE_STRUCT */ + .long .Lrcls_retint /* FFI_TYPE_POINTER */ + .long .Lrcls_retstruct1 /* FFI_TYPE_SMALL_STRUCT_1B */ + .long .Lrcls_retstruct2 /* FFI_TYPE_SMALL_STRUCT_2B */ + .long .Lrcls_retstruct4 /* FFI_TYPE_SMALL_STRUCT_4B */ +1: + add %eax, %eax + add %eax, %eax + add (%esp),%eax + add $4, %esp + jmp *(%eax) + + /* Sign/zero extend as appropriate. */ +.Lrcls_retsint8: + movsbl -24(%ebp), %eax + jmp .Lrcls_epilogue + +.Lrcls_retsint16: + movswl -24(%ebp), %eax + jmp .Lrcls_epilogue + +.Lrcls_retuint8: + movzbl -24(%ebp), %eax + jmp .Lrcls_epilogue + +.Lrcls_retuint16: + movzwl -24(%ebp), %eax + jmp .Lrcls_epilogue + .Lrcls_retint: movl -24(%ebp), %eax jmp .Lrcls_epilogue + .Lrcls_retfloat: flds -24(%ebp) jmp .Lrcls_epilogue + .Lrcls_retdouble: fldl -24(%ebp) jmp .Lrcls_epilogue + .Lrcls_retldouble: fldt -24(%ebp) jmp .Lrcls_epilogue + .Lrcls_retllong: movl -24(%ebp), %eax movl -20(%ebp), %edx jmp .Lrcls_epilogue + +.Lrcls_retstruct1: + movsbl -24(%ebp), %eax + jmp .Lrcls_epilogue + +.Lrcls_retstruct2: + movswl -24(%ebp), %eax + jmp .Lrcls_epilogue + +.Lrcls_retstruct4: + movl -24(%ebp), %eax + jmp .Lrcls_epilogue + +.Lrcls_retstruct: + # Nothing to do! + +.Lrcls_noretval: +.Lrcls_epilogue: + addl $36, %esp + popl %esi + popl %ebp + ret .ffi_closure_raw_SYSV_end: +.LFE4: + +#endif /* !FFI_NO_RAW_API */ + + # This assumes we are using gas. + .balign 16 + .globl _ffi_closure_STDCALL + .def _ffi_closure_STDCALL; .scl 2; .type 32; .endef +_ffi_closure_STDCALL: +.LFB5: + pushl %ebp +.LCFI9: + movl %esp, %ebp +.LCFI10: + subl $40, %esp + leal -24(%ebp), %edx + movl %edx, -12(%ebp) /* resp */ + leal 12(%ebp), %edx /* account for stub return address on stack */ + movl %edx, 4(%esp) /* args */ + leal -12(%ebp), %edx + movl %edx, (%esp) /* &resp */ + call _ffi_closure_SYSV_inner + movl -12(%ebp), %ecx +0: + call 1f + # Do not insert anything here between the call and the jump table. +.Lscls_store_table: + .long .Lscls_noretval /* FFI_TYPE_VOID */ + .long .Lscls_retint /* FFI_TYPE_INT */ + .long .Lscls_retfloat /* FFI_TYPE_FLOAT */ + .long .Lscls_retdouble /* FFI_TYPE_DOUBLE */ + .long .Lscls_retldouble /* FFI_TYPE_LONGDOUBLE */ + .long .Lscls_retuint8 /* FFI_TYPE_UINT8 */ + .long .Lscls_retsint8 /* FFI_TYPE_SINT8 */ + .long .Lscls_retuint16 /* FFI_TYPE_UINT16 */ + .long .Lscls_retsint16 /* FFI_TYPE_SINT16 */ + .long .Lscls_retint /* FFI_TYPE_UINT32 */ + .long .Lscls_retint /* FFI_TYPE_SINT32 */ + .long .Lscls_retllong /* FFI_TYPE_UINT64 */ + .long .Lscls_retllong /* FFI_TYPE_SINT64 */ + .long .Lscls_retstruct /* FFI_TYPE_STRUCT */ + .long .Lscls_retint /* FFI_TYPE_POINTER */ + .long .Lscls_retstruct1 /* FFI_TYPE_SMALL_STRUCT_1B */ + .long .Lscls_retstruct2 /* FFI_TYPE_SMALL_STRUCT_2B */ + .long .Lscls_retstruct4 /* FFI_TYPE_SMALL_STRUCT_4B */ +1: + add %eax, %eax + add %eax, %eax + add (%esp),%eax + add $4, %esp + jmp *(%eax) + + /* Sign/zero extend as appropriate. */ +.Lscls_retsint8: + movsbl (%ecx), %eax + jmp .Lscls_epilogue + +.Lscls_retsint16: + movswl (%ecx), %eax + jmp .Lscls_epilogue + +.Lscls_retuint8: + movzbl (%ecx), %eax + jmp .Lscls_epilogue +.Lscls_retuint16: + movzwl (%ecx), %eax + jmp .Lscls_epilogue + +.Lscls_retint: + movl (%ecx), %eax + jmp .Lscls_epilogue + +.Lscls_retfloat: + flds (%ecx) + jmp .Lscls_epilogue + +.Lscls_retdouble: + fldl (%ecx) + jmp .Lscls_epilogue + +.Lscls_retldouble: + fldt (%ecx) + jmp .Lscls_epilogue + +.Lscls_retllong: + movl (%ecx), %eax + movl 4(%ecx), %edx + jmp .Lscls_epilogue + +.Lscls_retstruct1: + movsbl (%ecx), %eax + jmp .Lscls_epilogue + +.Lscls_retstruct2: + movswl (%ecx), %eax + jmp .Lscls_epilogue + +.Lscls_retstruct4: + movl (%ecx), %eax + jmp .Lscls_epilogue + +.Lscls_retstruct: + # Nothing to do! + +.Lscls_noretval: +.Lscls_epilogue: + movl %ebp, %esp + popl %ebp + ret +.ffi_closure_STDCALL_end: +.LFE5: + + .section .eh_frame,"w" +.Lframe1: +.LSCIE1: + .long .LECIE1-.LASCIE1 /* Length of Common Information Entry */ +.LASCIE1: + .long 0x0 /* CIE Identifier Tag */ + .byte 0x1 /* CIE Version */ +#ifdef __PIC__ + .ascii "zR\0" /* CIE Augmentation */ +#else + .ascii "\0" /* CIE Augmentation */ +#endif + .byte 0x1 /* .uleb128 0x1; CIE Code Alignment Factor */ + .byte 0x7c /* .sleb128 -4; CIE Data Alignment Factor */ + .byte 0x8 /* CIE RA Column */ +#ifdef __PIC__ + .byte 0x1 /* .uleb128 0x1; Augmentation size */ + .byte 0x1b /* FDE Encoding (pcrel sdata4) */ +#endif + .byte 0xc /* DW_CFA_def_cfa CFA = r4 + 4 = 4(%esp) */ + .byte 0x4 /* .uleb128 0x4 */ + .byte 0x4 /* .uleb128 0x4 */ + .byte 0x88 /* DW_CFA_offset, column 0x8 %eip at CFA + 1 * -4 */ + .byte 0x1 /* .uleb128 0x1 */ + .align 4 +.LECIE1: + +.LSFDE1: + .long .LEFDE1-.LASFDE1 /* FDE Length */ +.LASFDE1: + .long .LASFDE1-.Lframe1 /* FDE CIE offset */ +#if defined __PIC__ && defined HAVE_AS_X86_PCREL + .long .LFB1-. /* FDE initial location */ +#else + .long .LFB1 +#endif + .long .LFE1-.LFB1 /* FDE address range */ +#ifdef __PIC__ + .byte 0x0 /* .uleb128 0x0; Augmentation size */ +#endif + /* DW_CFA_xxx CFI instructions go here. */ + + .byte 0x4 /* DW_CFA_advance_loc4 */ + .long .LCFI0-.LFB1 + .byte 0xe /* DW_CFA_def_cfa_offset CFA = r4 + 8 = 8(%esp) */ + .byte 0x8 /* .uleb128 0x8 */ + .byte 0x85 /* DW_CFA_offset, column 0x5 %ebp at CFA + 2 * -4 */ + .byte 0x2 /* .uleb128 0x2 */ + + .byte 0x4 /* DW_CFA_advance_loc4 */ + .long .LCFI1-.LCFI0 + .byte 0xd /* DW_CFA_def_cfa_register CFA = r5 = %ebp */ + .byte 0x5 /* .uleb128 0x5 */ + + /* End of DW_CFA_xxx CFI instructions. */ + .align 4 +.LEFDE1: + + +.LSFDE2: + .long .LEFDE2-.LASFDE2 /* FDE Length */ +.LASFDE2: + .long .LASFDE2-.Lframe1 /* FDE CIE offset */ +#if defined __PIC__ && defined HAVE_AS_X86_PCREL + .long .LFB2-. /* FDE initial location */ +#else + .long .LFB2 +#endif + .long .LFE2-.LFB2 /* FDE address range */ +#ifdef __PIC__ + .byte 0x0 /* .uleb128 0x0; Augmentation size */ +#endif + /* DW_CFA_xxx CFI instructions go here. */ + + .byte 0x4 /* DW_CFA_advance_loc4 */ + .long .LCFI2-.LFB2 + .byte 0xe /* DW_CFA_def_cfa_offset CFA = r4 + 8 = 8(%esp) */ + .byte 0x8 /* .uleb128 0x8 */ + .byte 0x85 /* DW_CFA_offset, column 0x5 %ebp at CFA + 2 * -4 */ + .byte 0x2 /* .uleb128 0x2 */ + + .byte 0x4 /* DW_CFA_advance_loc4 */ + .long .LCFI3-.LCFI2 + .byte 0xd /* DW_CFA_def_cfa_register CFA = r5 = %ebp */ + .byte 0x5 /* .uleb128 0x5 */ + + /* End of DW_CFA_xxx CFI instructions. */ + .align 4 +.LEFDE2: + + +.LSFDE3: + .long .LEFDE3-.LASFDE3 /* FDE Length */ +.LASFDE3: + .long .LASFDE3-.Lframe1 /* FDE CIE offset */ +#if defined __PIC__ && defined HAVE_AS_X86_PCREL + .long .LFB3-. /* FDE initial location */ +#else + .long .LFB3 +#endif + .long .LFE3-.LFB3 /* FDE address range */ +#ifdef __PIC__ + .byte 0x0 /* .uleb128 0x0; Augmentation size */ #endif + /* DW_CFA_xxx CFI instructions go here. */ + + .byte 0x4 /* DW_CFA_advance_loc4 */ + .long .LCFI4-.LFB3 + .byte 0xe /* DW_CFA_def_cfa_offset CFA = r4 + 8 = 8(%esp) */ + .byte 0x8 /* .uleb128 0x8 */ + .byte 0x85 /* DW_CFA_offset, column 0x5 %ebp at CFA + 2 * -4 */ + .byte 0x2 /* .uleb128 0x2 */ + + .byte 0x4 /* DW_CFA_advance_loc4 */ + .long .LCFI5-.LCFI4 + .byte 0xd /* DW_CFA_def_cfa_register CFA = r5 = %ebp */ + .byte 0x5 /* .uleb128 0x5 */ + + /* End of DW_CFA_xxx CFI instructions. */ + .align 4 +.LEFDE3: + +#if !FFI_NO_RAW_API + +.LSFDE4: + .long .LEFDE4-.LASFDE4 /* FDE Length */ +.LASFDE4: + .long .LASFDE4-.Lframe1 /* FDE CIE offset */ +#if defined __PIC__ && defined HAVE_AS_X86_PCREL + .long .LFB4-. /* FDE initial location */ +#else + .long .LFB4 +#endif + .long .LFE4-.LFB4 /* FDE address range */ +#ifdef __PIC__ + .byte 0x0 /* .uleb128 0x0; Augmentation size */ +#endif + /* DW_CFA_xxx CFI instructions go here. */ + + .byte 0x4 /* DW_CFA_advance_loc4 */ + .long .LCFI6-.LFB4 + .byte 0xe /* DW_CFA_def_cfa_offset CFA = r4 + 8 = 8(%esp) */ + .byte 0x8 /* .uleb128 0x8 */ + .byte 0x85 /* DW_CFA_offset, column 0x5 %ebp at CFA + 2 * -4 */ + .byte 0x2 /* .uleb128 0x2 */ + + .byte 0x4 /* DW_CFA_advance_loc4 */ + .long .LCFI7-.LCFI6 + .byte 0xd /* DW_CFA_def_cfa_register CFA = r5 = %ebp */ + .byte 0x5 /* .uleb128 0x5 */ + + .byte 0x4 /* DW_CFA_advance_loc4 */ + .long .LCFI8-.LCFI7 + .byte 0x86 /* DW_CFA_offset, column 0x6 %esi at CFA + 3 * -4 */ + .byte 0x3 /* .uleb128 0x3 */ + + /* End of DW_CFA_xxx CFI instructions. */ + .align 4 +.LEFDE4: + +#endif /* !FFI_NO_RAW_API */ + +.LSFDE5: + .long .LEFDE5-.LASFDE5 /* FDE Length */ +.LASFDE5: + .long .LASFDE5-.Lframe1 /* FDE CIE offset */ +#if defined __PIC__ && defined HAVE_AS_X86_PCREL + .long .LFB5-. /* FDE initial location */ +#else + .long .LFB5 +#endif + .long .LFE5-.LFB5 /* FDE address range */ +#ifdef __PIC__ + .byte 0x0 /* .uleb128 0x0; Augmentation size */ +#endif + /* DW_CFA_xxx CFI instructions go here. */ + + .byte 0x4 /* DW_CFA_advance_loc4 */ + .long .LCFI9-.LFB5 + .byte 0xe /* DW_CFA_def_cfa_offset CFA = r4 + 8 = 8(%esp) */ + .byte 0x8 /* .uleb128 0x8 */ + .byte 0x85 /* DW_CFA_offset, column 0x5 %ebp at CFA + 2 * -4 */ + .byte 0x2 /* .uleb128 0x2 */ + + .byte 0x4 /* DW_CFA_advance_loc4 */ + .long .LCFI10-.LCFI9 + .byte 0xd /* DW_CFA_def_cfa_register CFA = r5 = %ebp */ + .byte 0x5 /* .uleb128 0x5 */ + + /* End of DW_CFA_xxx CFI instructions. */ + .align 4 +.LEFDE5: From python-checkins at python.org Mon Mar 15 14:42:23 2010 From: python-checkins at python.org (matthias.klose) Date: Mon, 15 Mar 2010 14:42:23 +0100 (CET) Subject: [Python-checkins] r78979 - in python/trunk: Lib/ctypes/util.py Misc/NEWS Message-ID: <20100315134223.59225FCC0@mail.python.org> Author: matthias.klose Date: Mon Mar 15 14:42:23 2010 New Revision: 78979 Log: - Issue #7356: ctypes.util: Make parsing of ldconfig output independent of the locale. Modified: python/trunk/Lib/ctypes/util.py python/trunk/Misc/NEWS Modified: python/trunk/Lib/ctypes/util.py ============================================================================== --- python/trunk/Lib/ctypes/util.py (original) +++ python/trunk/Lib/ctypes/util.py Mon Mar 15 14:42:23 2010 @@ -185,7 +185,7 @@ def _findLib_ldconfig(name): # XXX assuming GLIBC's ldconfig (with option -p) expr = r'/[^\(\)\s]*lib%s\.[^\(\)\s]*' % re.escape(name) - f = os.popen('/sbin/ldconfig -p 2>/dev/null') + f = os.popen('LANG=C /sbin/ldconfig -p 2>/dev/null') try: data = f.read() finally: Modified: python/trunk/Misc/NEWS ============================================================================== --- python/trunk/Misc/NEWS (original) +++ python/trunk/Misc/NEWS Mon Mar 15 14:42:23 2010 @@ -20,6 +20,9 @@ Library ------- +- Issue #7356: ctypes.util: Make parsing of ldconfig output independent of + the locale. + - Issue #7774: Set sys.executable to an empty string if ``argv[0]`` has been set to an non existent program name and Python is unable to retrieve the real program name. From python-checkins at python.org Mon Mar 15 14:46:04 2010 From: python-checkins at python.org (matthias.klose) Date: Mon, 15 Mar 2010 14:46:04 +0100 (CET) Subject: [Python-checkins] r78980 - in python/branches/py3k: Lib/ctypes/util.py Misc/NEWS Message-ID: <20100315134604.57C19FE0F@mail.python.org> Author: matthias.klose Date: Mon Mar 15 14:46:04 2010 New Revision: 78980 Log: Merged revisions 78979 via svnmerge from svn+ssh://pythondev at svn.python.org/python/trunk ........ r78979 | matthias.klose | 2010-03-15 14:42:23 +0100 (Mo, 15 M?r 2010) | 3 lines - Issue #7356: ctypes.util: Make parsing of ldconfig output independent of the locale. ........ Modified: python/branches/py3k/ (props changed) python/branches/py3k/Lib/ctypes/util.py python/branches/py3k/Misc/NEWS Modified: python/branches/py3k/Lib/ctypes/util.py ============================================================================== --- python/branches/py3k/Lib/ctypes/util.py (original) +++ python/branches/py3k/Lib/ctypes/util.py Mon Mar 15 14:46:04 2010 @@ -205,7 +205,7 @@ # XXX assuming GLIBC's ldconfig (with option -p) expr = r'(\S+)\s+\((%s(?:, OS ABI:[^\)]*)?)\)[^/]*(/[^\(\)\s]*lib%s\.[^\(\)\s]*)' \ % (abi_type, re.escape(name)) - with contextlib.closing(os.popen('/sbin/ldconfig -p 2>/dev/null')) as f: + with contextlib.closing(os.popen('LANG=C /sbin/ldconfig -p 2>/dev/null')) as f: data = f.read() res = re.search(expr, data) if not res: Modified: python/branches/py3k/Misc/NEWS ============================================================================== --- python/branches/py3k/Misc/NEWS (original) +++ python/branches/py3k/Misc/NEWS Mon Mar 15 14:46:04 2010 @@ -283,6 +283,9 @@ Library ------- +- Issue #7356: ctypes.util: Make parsing of ldconfig output independent of + the locale. + - The internals of the subprocess module on POSIX systems have been replaced by an extension module (_posixsubprocess) so that the fork()+exec() can be done safely without the possibility of deadlock in multithreaded applications. From python-checkins at python.org Mon Mar 15 14:51:00 2010 From: python-checkins at python.org (matthias.klose) Date: Mon, 15 Mar 2010 14:51:00 +0100 (CET) Subject: [Python-checkins] r78981 - in python/branches/release31-maint: Lib/ctypes/util.py Misc/NEWS Message-ID: <20100315135100.6070BFC97@mail.python.org> Author: matthias.klose Date: Mon Mar 15 14:51:00 2010 New Revision: 78981 Log: Merged revisions 78980 via svnmerge from svn+ssh://pythondev at svn.python.org/python/branches/py3k ................ r78980 | matthias.klose | 2010-03-15 14:46:04 +0100 (Mo, 15 M?r 2010) | 10 lines Merged revisions 78979 via svnmerge from svn+ssh://pythondev at svn.python.org/python/trunk ........ r78979 | matthias.klose | 2010-03-15 14:42:23 +0100 (Mo, 15 M?r 2010) | 3 lines - Issue #7356: ctypes.util: Make parsing of ldconfig output independent of the locale. ........ ................ Modified: python/branches/release31-maint/Lib/ctypes/util.py python/branches/release31-maint/Misc/NEWS Modified: python/branches/release31-maint/Lib/ctypes/util.py ============================================================================== --- python/branches/release31-maint/Lib/ctypes/util.py (original) +++ python/branches/release31-maint/Lib/ctypes/util.py Mon Mar 15 14:51:00 2010 @@ -219,7 +219,7 @@ # XXX assuming GLIBC's ldconfig (with option -p) expr = r'(\S+)\s+\((%s(?:, OS ABI:[^\)]*)?)\)[^/]*(/[^\(\)\s]*lib%s\.[^\(\)\s]*)' \ % (abi_type, re.escape(name)) - f = os.popen('/sbin/ldconfig -p 2>/dev/null') + f = os.popen('LANG=C /sbin/ldconfig -p 2>/dev/null') try: data = f.read() finally: Modified: python/branches/release31-maint/Misc/NEWS ============================================================================== --- python/branches/release31-maint/Misc/NEWS (original) +++ python/branches/release31-maint/Misc/NEWS Mon Mar 15 14:51:00 2010 @@ -17,6 +17,9 @@ Library ------- +- Issue #7356: ctypes.util: Make parsing of ldconfig output independent of + the locale. + What's New in Python 3.1.2 release candidate 1? =============================================== From python-checkins at python.org Mon Mar 15 15:00:59 2010 From: python-checkins at python.org (florent.xicluna) Date: Mon, 15 Mar 2010 15:00:59 +0100 (CET) Subject: [Python-checkins] r78982 - in python/trunk/Tools/unicode: gencodec.py makeunicodedata.py mkstringprep.py Message-ID: <20100315140059.1BC5EFE0C@mail.python.org> Author: florent.xicluna Date: Mon Mar 15 15:00:58 2010 New Revision: 78982 Log: Remove py3k deprecation warnings from these Unicode tools. Modified: python/trunk/Tools/unicode/gencodec.py python/trunk/Tools/unicode/makeunicodedata.py python/trunk/Tools/unicode/mkstringprep.py Modified: python/trunk/Tools/unicode/gencodec.py ============================================================================== --- python/trunk/Tools/unicode/gencodec.py (original) +++ python/trunk/Tools/unicode/gencodec.py Mon Mar 15 15:00:58 2010 @@ -40,8 +40,7 @@ '\s*' '(#.+)?') -def parsecodes(codes, - len=len, filter=filter,range=range): +def parsecodes(codes, len=len, range=range): """ Converts code combinations to either a single code integer or a tuple of integers. @@ -62,7 +61,7 @@ l[i] = int(l[i],16) except ValueError: l[i] = None - l = filter(lambda x: x is not None, l) + l = [x for x in l if x is not None] if len(l) == 1: return l[0] else: @@ -138,7 +137,7 @@ l = [] append = l.append - if map.has_key("IDENTITY"): + if "IDENTITY" in map: append("%s = codecs.make_identity_dict(range(%d))" % (varname, map["IDENTITY"])) append("%s.update({" % varname) @@ -150,8 +149,7 @@ splits = 0 identity = 0 - mappings = map.items() - mappings.sort() + mappings = sorted(map.items()) i = 0 key_precision, value_precision = precisions for mapkey, mapvalue in mappings: @@ -199,11 +197,10 @@ append('%s = (' % varname) # Analyze map and create table dict - mappings = map.items() - mappings.sort() + mappings = sorted(map.items()) table = {} maxkey = 0 - if map.has_key('IDENTITY'): + if 'IDENTITY' in map: for key in range(256): table[key] = (key, '') maxkey = 255 @@ -421,6 +418,6 @@ import sys if 1: - apply(convertdir,tuple(sys.argv[1:])) + convertdir(*sys.argv[1:]) else: - apply(rewritepythondir,tuple(sys.argv[1:])) + rewritepythondir(*sys.argv[1:]) Modified: python/trunk/Tools/unicode/makeunicodedata.py ============================================================================== --- python/trunk/Tools/unicode/makeunicodedata.py (original) +++ python/trunk/Tools/unicode/makeunicodedata.py Mon Mar 15 15:00:58 2010 @@ -156,8 +156,7 @@ prefix = i assert prefix < 256 # content - decomp = [prefix + (len(decomp)<<8)] +\ - map(lambda s: int(s, 16), decomp) + decomp = [prefix + (len(decomp)<<8)] + [int(s, 16) for s in decomp] # Collect NFC pairs if not prefix and len(decomp) == 3 and \ char not in unicode.exclusions and \ @@ -459,8 +458,7 @@ Array("index2", index2).dump(fp, trace) # Generate code for _PyUnicode_ToNumeric() - numeric_items = numeric.items() - numeric_items.sort() + numeric_items = sorted(numeric.items()) print >>fp, '/* Returns the numeric value as double for Unicode characters' print >>fp, ' * having this property, -1.0 otherwise.' print >>fp, ' */' @@ -506,8 +504,7 @@ haswide = False hasnonewide = False - spaces.sort() - for codepoint in spaces: + for codepoint in sorted(spaces): if codepoint < 0x10000: hasnonewide = True if codepoint >= 0x10000 and not haswide: @@ -535,8 +532,7 @@ print >>fp, ' switch (ch) {' haswide = False hasnonewide = False - linebreaks.sort() - for codepoint in linebreaks: + for codepoint in sorted(linebreaks): if codepoint < 0x10000: hasnonewide = True if codepoint >= 0x10000 and not haswide: @@ -601,12 +597,10 @@ wordlist = words.items() # sort on falling frequency, then by name - def cmpwords((aword, alist),(bword, blist)): - r = -cmp(len(alist),len(blist)) - if r: - return r - return cmp(aword, bword) - wordlist.sort(cmpwords) + def word_key(a): + aword, alist = a + return -len(alist), aword + wordlist.sort(key=word_key) # figure out how many phrasebook escapes we need escapes = 0 @@ -630,7 +624,7 @@ # length (to maximize overlap) wordlist, wordtail = wordlist[:short], wordlist[short:] - wordtail.sort(lambda a, b: len(b[0])-len(a[0])) + wordtail.sort(key=lambda a: a[0], reverse=True) wordlist.extend(wordtail) # generate lexicon from words Modified: python/trunk/Tools/unicode/mkstringprep.py ============================================================================== --- python/trunk/Tools/unicode/mkstringprep.py (original) +++ python/trunk/Tools/unicode/mkstringprep.py Mon Mar 15 15:00:58 2010 @@ -1,7 +1,7 @@ import re, unicodedata, sys if sys.maxunicode == 65535: - raise RuntimeError, "need UCS-4 Python" + raise RuntimeError("need UCS-4 Python") def gen_category(cats): for i in range(0, 0x110000): @@ -63,14 +63,14 @@ if m: if m.group(1) == "Start": if curname: - raise "Double Start",(curname, l) + raise RuntimeError("Double Start", (curname, l)) curname = m.group(2) table = {} tables.append((curname, table)) continue else: if not curname: - raise "End without start", l + raise RuntimeError("End without start", l) curname = None continue if not curname: @@ -87,7 +87,7 @@ try: start, end = fields except ValueError: - raise "Unpacking problem", l + raise RuntimeError("Unpacking problem", l) else: start = end = fields[0] start = int(start, 16) @@ -146,8 +146,7 @@ name, table = tables[0] del tables[0] assert name == "B.1" -table = table.keys() -table.sort() +table = sorted(table.keys()) print """ b1_set = """ + compact_set(table) + """ def in_table_b1(code): @@ -177,8 +176,7 @@ if map(ord, unichr(k).lower()) != v: b3_exceptions[k] = u"".join(map(unichr,v)) -b3 = b3_exceptions.items() -b3.sort() +b3 = sorted(b3_exceptions.items()) print """ b3_exceptions = {""" @@ -353,8 +351,7 @@ del tables[0] assert name == "C.6" -table = table.keys() -table.sort() +table = sorted(table.keys()) print """ c6_set = """ + compact_set(table) + """ @@ -367,8 +364,7 @@ del tables[0] assert name == "C.7" -table = table.keys() -table.sort() +table = sorted(table.keys()) print """ c7_set = """ + compact_set(table) + """ @@ -381,8 +377,7 @@ del tables[0] assert name == "C.8" -table = table.keys() -table.sort() +table = sorted(table.keys()) print """ c8_set = """ + compact_set(table) + """ @@ -395,8 +390,7 @@ del tables[0] assert name == "C.9" -table = table.keys() -table.sort() +table = sorted(table.keys()) print """ c9_set = """ + compact_set(table) + """ From python-checkins at python.org Mon Mar 15 18:44:12 2010 From: python-checkins at python.org (matthias.klose) Date: Mon, 15 Mar 2010 18:44:12 +0100 (CET) Subject: [Python-checkins] r78983 - in python/trunk: Lib/compileall.py Lib/test/test_compileall.py Misc/NEWS Message-ID: <20100315174412.C060BDFAA@mail.python.org> Author: matthias.klose Date: Mon Mar 15 18:44:12 2010 New Revision: 78983 Log: - Issue #8140: extend compileall to compile single files. Add -i option. Modified: python/trunk/Lib/compileall.py python/trunk/Lib/test/test_compileall.py python/trunk/Misc/NEWS Modified: python/trunk/Lib/compileall.py ============================================================================== --- python/trunk/Lib/compileall.py (original) +++ python/trunk/Lib/compileall.py Mon Mar 15 18:44:12 2010 @@ -17,7 +17,7 @@ import struct import imp -__all__ = ["compile_dir","compile_path"] +__all__ = ["compile_dir","compile_files","compile_path"] def compile_dir(dir, maxlevels=10, ddir=None, force=0, rx=None, quiet=0): @@ -48,39 +48,9 @@ dfile = os.path.join(ddir, name) else: dfile = None - if rx is not None: - mo = rx.search(fullname) - if mo: - continue - if os.path.isfile(fullname): - head, tail = name[:-3], name[-3:] - if tail == '.py': - if not force: - try: - mtime = int(os.stat(fullname).st_mtime) - expect = struct.pack('<4sl', imp.get_magic(), mtime) - cfile = fullname + (__debug__ and 'c' or 'o') - with open(cfile, 'rb') as chandle: - actual = chandle.read(8) - if expect == actual: - continue - except IOError: - pass - if not quiet: - print 'Compiling', fullname, '...' - try: - ok = py_compile.compile(fullname, None, dfile, True) - except py_compile.PyCompileError,err: - if quiet: - print 'Compiling', fullname, '...' - print err.msg - success = 0 - except IOError, e: - print "Sorry", e - success = 0 - else: - if ok == 0: - success = 0 + if not os.path.isdir(fullname): + if not compile_file(fullname, ddir, force, rx, quiet): + success = 0 elif maxlevels > 0 and \ name != os.curdir and name != os.pardir and \ os.path.isdir(fullname) and \ @@ -90,6 +60,57 @@ success = 0 return success +def compile_file(fullname, ddir=None, force=0, rx=None, quiet=0): + """Byte-compile file. + file: the file to byte-compile + ddir: if given, purported directory name (this is the + directory name that will show up in error messages) + force: if 1, force compilation, even if timestamps are up-to-date + quiet: if 1, be quiet during compilation + + """ + + success = 1 + name = os.path.basename(fullname) + if ddir is not None: + dfile = os.path.join(ddir, name) + else: + dfile = None + if rx is not None: + mo = rx.search(fullname) + if mo: + return success + if os.path.isfile(fullname): + head, tail = name[:-3], name[-3:] + if tail == '.py': + if not force: + try: + mtime = int(os.stat(fullname).st_mtime) + expect = struct.pack('<4sl', imp.get_magic(), mtime) + cfile = fullname + (__debug__ and 'c' or 'o') + with open(cfile, 'rb') as chandle: + actual = chandle.read(8) + if expect == actual: + return success + except IOError: + pass + if not quiet: + print 'Compiling', fullname, '...' + try: + ok = py_compile.compile(fullname, None, dfile, True) + except py_compile.PyCompileError,err: + if quiet: + print 'Compiling', fullname, '...' + print err.msg + success = 0 + except IOError, e: + print "Sorry", e + success = 0 + else: + if ok == 0: + success = 0 + return success + def compile_path(skip_curdir=1, maxlevels=0, force=0, quiet=0): """Byte-compile all module on sys.path. @@ -110,15 +131,34 @@ force, quiet=quiet) return success +def expand_args(args, flist): + """read names in flist and append to args""" + expanded = args[:] + if flist: + try: + if flist == '-': + fd = sys.stdin + else: + fd = open(flist) + while 1: + line = fd.readline() + if not line: + break + expanded.append(line[:-1]) + except IOError: + print "Error reading file list %s" % flist + raise + return expanded + def main(): """Script main program.""" import getopt try: - opts, args = getopt.getopt(sys.argv[1:], 'lfqd:x:') + opts, args = getopt.getopt(sys.argv[1:], 'lfqd:x:i:') except getopt.error, msg: print msg print "usage: python compileall.py [-l] [-f] [-q] [-d destdir] " \ - "[-x regexp] [directory ...]" + "[-x regexp] [-i list] [directory|file ...]" print "-l: don't recurse down" print "-f: force rebuild even if timestamps are up-to-date" print "-q: quiet operation" @@ -126,12 +166,14 @@ print " if no directory arguments, -l sys.path is assumed" print "-x regexp: skip files matching the regular expression regexp" print " the regexp is searched for in the full path of the file" + print "-i list: expand list with its content (file and directory names)" sys.exit(2) maxlevels = 10 ddir = None force = 0 quiet = 0 rx = None + flist = None for o, a in opts: if o == '-l': maxlevels = 0 if o == '-d': ddir = a @@ -140,17 +182,28 @@ if o == '-x': import re rx = re.compile(a) + if o == '-i': flist = a if ddir: - if len(args) != 1: + if len(args) != 1 and not os.path.isdir(args[0]): print "-d destdir require exactly one directory argument" sys.exit(2) success = 1 try: - if args: - for dir in args: - if not compile_dir(dir, maxlevels, ddir, - force, rx, quiet): - success = 0 + if args or flist: + try: + if flist: + args = expand_args(args, flist) + except IOError: + success = 0 + if success: + for arg in args: + if os.path.isdir(arg): + if not compile_dir(arg, maxlevels, ddir, + force, rx, quiet): + success = 0 + else: + if not compile_file(arg, ddir, force, rx, quiet): + success = 0 else: success = compile_path() except KeyboardInterrupt: Modified: python/trunk/Lib/test/test_compileall.py ============================================================================== --- python/trunk/Lib/test/test_compileall.py (original) +++ python/trunk/Lib/test/test_compileall.py Mon Mar 15 18:44:12 2010 @@ -17,6 +17,9 @@ self.bc_path = self.source_path + ('c' if __debug__ else 'o') with open(self.source_path, 'w') as file: file.write('x = 123\n') + self.source_path2 = os.path.join(self.directory, '_test2.py') + self.bc_path2 = self.source_path2 + ('c' if __debug__ else 'o') + shutil.copyfile(self.source_path, self.source_path2) def tearDown(self): shutil.rmtree(self.directory) @@ -52,6 +55,22 @@ # Test a change in mtime leads to a new .pyc. self.recreation_check(b'\0\0\0\0') + def test_compile_files(self): + # Test compiling a single file, and complete directory + for fn in (self.bc_path, self.bc_path2): + try: + os.unlink(fn) + except: + pass + compileall.compile_file(self.source_path, force=False, quiet=True) + self.assertTrue(os.path.isfile(self.bc_path) \ + and not os.path.isfile(self.bc_path2)) + os.unlink(self.bc_path) + compileall.compile_dir(self.directory, force=False, quiet=True) + self.assertTrue(os.path.isfile(self.bc_path) \ + and os.path.isfile(self.bc_path2)) + os.unlink(self.bc_path) + os.unlink(self.bc_path2) def test_main(): test_support.run_unittest(CompileallTests) Modified: python/trunk/Misc/NEWS ============================================================================== --- python/trunk/Misc/NEWS (original) +++ python/trunk/Misc/NEWS Mon Mar 15 18:44:12 2010 @@ -20,6 +20,8 @@ Library ------- +- Issue #8140: extend compileall to compile single files. Add -i option. + - Issue #7356: ctypes.util: Make parsing of ldconfig output independent of the locale. From python-checkins at python.org Mon Mar 15 18:46:55 2010 From: python-checkins at python.org (barry.warsaw) Date: Mon, 15 Mar 2010 18:46:55 +0100 (CET) Subject: [Python-checkins] r78984 - peps/trunk/pep-3147.txt Message-ID: <20100315174655.8CCADE32A@mail.python.org> Author: barry.warsaw Date: Mon Mar 15 18:46:55 2010 New Revision: 78984 Log: * Added reference to py_compile and compileall * Added reference to bdist_wininst and the Windows installer * Added reference to BDFL pronouncement on __pycache__ over .pyc Modified: peps/trunk/pep-3147.txt Modified: peps/trunk/pep-3147.txt ============================================================================== --- peps/trunk/pep-3147.txt (original) +++ peps/trunk/pep-3147.txt Mon Mar 15 18:46:55 2010 @@ -374,6 +374,25 @@ should set the `__cached__` attribute to `None`. +py_compile and compileall +------------------------- + +Python comes with two modules, `py_compile` [15]_ and `compileall` [16]_ +which support compiling Python modules external to the built-in import +machinery. `py_compile` in particular has intimate knowledge of byte +compilation, so these will have to be updated to understand the new +layout. It's possible that `compileall` could be modified to support +legacy byte-code only file system layout. + + +bdist_wininst and the Windows installer +--------------------------------------- + +These tools also compile modules explicitly on installation. If they +do not use `py_compile` and `compileall`, then they would also have to +be modified to understand the new layout. + + File extension checks --------------------- @@ -382,7 +401,7 @@ This code will obviously fail once this PEP is implemented. To support this use case, we'll add two new methods to the `imp` -package [15]_: +package [17]_: * `imp.source_from_cache(py_path)` -> `pyc_path` * `imp.cache_from_source(pyc_path)` -> `py_path` @@ -394,7 +413,7 @@ PEP 302 loaders --------------- -PEP 302 [16]_ defined loaders have a `.get_filename()` method which +PEP 302 [18]_ defined loaders have a `.get_filename()` method which points to the `__file__` for a module. As part of this PEP, we will extend this API, to include a new method `.get_paths()` which will return a 2-tuple containing the path to the source file and the path @@ -419,7 +438,7 @@ PEP 304 ------- -There is some overlap between the goals of this PEP and PEP 304 [17]_, +There is some overlap between the goals of this PEP and PEP 304 [19]_, which has been withdrawn. However PEP 304 would allow a user to create a shadow file system hierarchy in which to store `pyc` files. This concept of a shadow hierarchy for `pyc` files could be used to @@ -474,17 +493,31 @@ tools that are dependent on the file extension. +.pyc +---- + +A proposal was floated to call the `__pycache__` directory `.pyc` or +some other dot-file name. This would have the effect on *nix systems +of hiding the directory. There are many reasons why this was +rejected by the BDFL [20]_ including the fact that dot-files are only +special on some platforms, and we actually do *not* want to hide these +completely from users. + + Reference implementation ======================== A pure-Python reference implementation will be written using -importlib [18]_, which may need some modifications to its API and +importlib [21]_, which may need some modifications to its API and abstract base classes. Once the semantics are agreed upon and the implementation details are settled, we'll port this to the C implementation in `import.c`. We will have extensive tests that guarantee that the pure-Python implementation and the built-in implementation remain in sync. +Work on this code will be tracked in a Bazaar branch on Launchpad +[22]_ until it's ready for merge into Python 3.2. + Open issues =========== @@ -573,13 +606,21 @@ .. [14] Pynie: http://code.google.com/p/pynie/ -.. [15] imp: http://www.python.org/doc/current/library/imp.html +.. [15] py_compile: http://docs.python.org/library/py_compile.html + +.. [16] compileall: http://docs.python.org/library/compileall.html + +.. [17] imp: http://www.python.org/doc/current/library/imp.html + +.. [18] PEP 302 + +.. [19] PEP 304 -.. [16] PEP 302 +.. [20] http://www.mail-archive.com/python-dev at python.org/msg45203.html -.. [17] PEP 304 +.. [21] importlib: http://docs.python.org/3.1/library/importlib.html -.. [18] importlib: http://docs.python.org/3.1/library/importlib.html +.. [22] https://code.launchpad.net/~barry/python/pep3147 ACKNOWLEDGMENTS From python-checkins at python.org Mon Mar 15 19:00:02 2010 From: python-checkins at python.org (matthias.klose) Date: Mon, 15 Mar 2010 19:00:02 +0100 (CET) Subject: [Python-checkins] r78985 - python/trunk/Lib/compileall.py Message-ID: <20100315180002.14CBFE4F5@mail.python.org> Author: matthias.klose Date: Mon Mar 15 19:00:01 2010 New Revision: 78985 Log: - Fix typo in Lib/compileall.py(__all__). Modified: python/trunk/Lib/compileall.py Modified: python/trunk/Lib/compileall.py ============================================================================== --- python/trunk/Lib/compileall.py (original) +++ python/trunk/Lib/compileall.py Mon Mar 15 19:00:01 2010 @@ -17,7 +17,7 @@ import struct import imp -__all__ = ["compile_dir","compile_files","compile_path"] +__all__ = ["compile_dir","compile_file","compile_path"] def compile_dir(dir, maxlevels=10, ddir=None, force=0, rx=None, quiet=0): From python-checkins at python.org Mon Mar 15 19:08:59 2010 From: python-checkins at python.org (florent.xicluna) Date: Mon, 15 Mar 2010 19:08:59 +0100 (CET) Subject: [Python-checkins] r78986 - in python/trunk: Lib/test/test_normalization.py Lib/test/test_support.py Misc/NEWS Message-ID: <20100315180859.0DE3FF7E7@mail.python.org> Author: florent.xicluna Date: Mon Mar 15 19:08:58 2010 New Revision: 78986 Log: Issue #7783 and #7787: open_urlresource invalidates the outdated files from the local cache. Use this feature to fix test_normalization. Modified: python/trunk/Lib/test/test_normalization.py python/trunk/Lib/test/test_support.py python/trunk/Misc/NEWS Modified: python/trunk/Lib/test/test_normalization.py ============================================================================== --- python/trunk/Lib/test/test_normalization.py (original) +++ python/trunk/Lib/test/test_normalization.py Mon Mar 15 19:08:58 2010 @@ -6,15 +6,12 @@ import os from unicodedata import normalize, unidata_version -TESTDATAFILE = "NormalizationTest" + os.extsep + "txt" +TESTDATAFILE = "NormalizationTest.txt" TESTDATAURL = "http://www.unicode.org/Public/" + unidata_version + "/ucd/" + TESTDATAFILE -if os.path.exists(TESTDATAFILE): - f = open(TESTDATAFILE) - l = f.readline() - f.close() - if not unidata_version in l: - os.unlink(TESTDATAFILE) +def check_version(testfile): + hdr = testfile.readline() + return unidata_version in hdr class RangeError(Exception): pass @@ -40,13 +37,14 @@ class NormalizationTest(unittest.TestCase): def test_main(self): + part = None part1_data = {} # Hit the exception early try: - open_urlresource(TESTDATAURL) + testdata = open_urlresource(TESTDATAURL, check_version) except (IOError, HTTPException): self.skipTest("Could not retrieve " + TESTDATAURL) - for line in open_urlresource(TESTDATAURL): + for line in testdata: if '#' in line: line = line.split('#')[0] line = line.strip() Modified: python/trunk/Lib/test/test_support.py ============================================================================== --- python/trunk/Lib/test/test_support.py (original) +++ python/trunk/Lib/test/test_support.py Mon Mar 15 19:08:58 2010 @@ -32,6 +32,7 @@ "threading_cleanup", "reap_children", "cpython_only", "check_impl_detail", "get_attribute", "py3k_bytes"] + class Error(Exception): """Base class for regression test exceptions.""" @@ -463,15 +464,30 @@ testcase.assertRaises(SyntaxError, compile, statement, '', 'exec') -def open_urlresource(url): +def open_urlresource(url, check=None): import urlparse, urllib2 - requires('urlfetch') filename = urlparse.urlparse(url)[2].split('/')[-1] # '/': it's URL! fn = os.path.join(os.path.dirname(__file__), "data", filename) + + def check_valid_file(fn): + f = open(fn) + if check is None: + return f + elif check(f): + f.seek(0) + return f + f.close() + if os.path.exists(fn): - return open(fn) + f = check_valid_file(fn) + if f is not None: + return f + unlink(fn) + + # Verify the requirement before downloading the file + requires('urlfetch') print >> get_original_stdout(), '\tfetching %s ...' % url f = urllib2.urlopen(url, timeout=15) @@ -483,7 +499,11 @@ s = f.read() finally: f.close() - return open(fn) + + f = check_valid_file(fn) + if f is not None: + return f + raise TestFailed('invalid resource "%s"' % fn) class WarningsRecorder(object): Modified: python/trunk/Misc/NEWS ============================================================================== --- python/trunk/Misc/NEWS (original) +++ python/trunk/Misc/NEWS Mon Mar 15 19:08:58 2010 @@ -76,6 +76,12 @@ - Issue #7705: Fix linking on FreeBSD. +Tests +----- + +- Issue #7783: test.test_support.open_urlresource invalidates the outdated + files from the local cache. + What's New in Python 2.7 alpha 4? ================================= From solipsis at pitrou.net Tue Mar 16 01:18:13 2010 From: solipsis at pitrou.net (solipsis at pitrou.net) Date: Tue, 16 Mar 2010 01:18:13 +0100 (CET) Subject: [Python-checkins] Daily py3k reference leaks (r78980): sum=6 Message-ID: <20100316001813.DCDF21770A@ns6635.ovh.net> py3k results for svn r78980 (hg cset e3981a814cc6) -------------------------------------------------- test_subprocess leaked [2, 2, 2] references, sum=6 Command line was: ['./python', '-m', 'test.regrtest', '-uall', '-R', '3:3:/home/antoine/py3k/refleaks/reflogMLKFBH', '-x', 'test_httpservers'] From python-checkins at python.org Tue Mar 16 01:36:26 2010 From: python-checkins at python.org (matthias.klose) Date: Tue, 16 Mar 2010 01:36:26 +0100 (CET) Subject: [Python-checkins] r78987 - in python/branches/py3k: Lib/compileall.py Lib/test/test_compileall.py Misc/NEWS Message-ID: <20100316003626.D65BBF5E3@mail.python.org> Author: matthias.klose Date: Tue Mar 16 01:36:26 2010 New Revision: 78987 Log: Merged revisions 78983,78985 via svnmerge from svn+ssh://pythondev at svn.python.org/python/trunk ........ r78983 | matthias.klose | 2010-03-15 18:44:12 +0100 (Mo, 15 M?r 2010) | 2 lines - Issue #8140: extend compileall to compile single files. Add -i option. ........ r78985 | matthias.klose | 2010-03-15 19:00:01 +0100 (Mo, 15 M?r 2010) | 2 lines - Fix typo in Lib/compileall.py(__all__). ........ Modified: python/branches/py3k/ (props changed) python/branches/py3k/Lib/compileall.py python/branches/py3k/Lib/test/test_compileall.py python/branches/py3k/Misc/NEWS Modified: python/branches/py3k/Lib/compileall.py ============================================================================== --- python/branches/py3k/Lib/compileall.py (original) +++ python/branches/py3k/Lib/compileall.py Tue Mar 16 01:36:26 2010 @@ -17,7 +17,7 @@ import struct import imp -__all__ = ["compile_dir","compile_path"] +__all__ = ["compile_dir","compile_file","compile_path"] def compile_dir(dir, maxlevels=10, ddir=None, force=0, rx=None, quiet=0): @@ -48,47 +48,9 @@ dfile = os.path.join(ddir, name) else: dfile = None - if rx is not None: - mo = rx.search(fullname) - if mo: - continue - if os.path.isfile(fullname): - head, tail = name[:-3], name[-3:] - if tail == '.py': - if not force: - try: - mtime = int(os.stat(fullname).st_mtime) - expect = struct.pack('<4sl', imp.get_magic(), mtime) - cfile = fullname + (__debug__ and 'c' or 'o') - with open(cfile, 'rb') as chandle: - actual = chandle.read(8) - if expect == actual: - continue - except IOError: - pass - if not quiet: - print('Compiling', fullname, '...') - try: - ok = py_compile.compile(fullname, None, dfile, True) - except KeyboardInterrupt: - raise KeyboardInterrupt - except py_compile.PyCompileError as err: - if quiet: - print('*** Error compiling', fullname, '...') - else: - print('*** ', end='') - print(err.msg) - success = 0 - except (SyntaxError, UnicodeError, IOError) as e: - if quiet: - print('*** Error compiling', fullname, '...') - else: - print('*** ', end='') - print(e.__class__.__name__ + ':', e) - success = 0 - else: - if ok == 0: - success = 0 + if not os.path.isdir(fullname): + if not compile_file(fullname, ddir, force, rx, quiet): + success = 0 elif maxlevels > 0 and \ name != os.curdir and name != os.pardir and \ os.path.isdir(fullname) and \ @@ -98,6 +60,64 @@ success = 0 return success +def compile_file(fullname, ddir=None, force=0, rx=None, quiet=0): + """Byte-compile file. + file: the file to byte-compile + ddir: if given, purported directory name (this is the + directory name that will show up in error messages) + force: if 1, force compilation, even if timestamps are up-to-date + quiet: if 1, be quiet during compilation + + """ + success = 1 + name = os.path.basename(fullname) + if ddir is not None: + dfile = os.path.join(ddir, name) + else: + dfile = None + if rx is not None: + mo = rx.search(fullname) + if mo: + return success + if os.path.isfile(fullname): + head, tail = name[:-3], name[-3:] + if tail == '.py': + if not force: + try: + mtime = int(os.stat(fullname).st_mtime) + expect = struct.pack('<4sl', imp.get_magic(), mtime) + cfile = fullname + (__debug__ and 'c' or 'o') + with open(cfile, 'rb') as chandle: + actual = chandle.read(8) + if expect == actual: + return success + except IOError: + pass + if not quiet: + print('Compiling', fullname, '...') + try: + ok = py_compile.compile(fullname, None, dfile, True) + except KeyboardInterrupt: + raise KeyboardInterrupt + except py_compile.PyCompileError as err: + if quiet: + print('*** Error compiling', fullname, '...') + else: + print('*** ', end='') + print(err.msg) + success = 0 + except (SyntaxError, UnicodeError, IOError) as e: + if quiet: + print('*** Error compiling', fullname, '...') + else: + print('*** ', end='') + print(e.__class__.__name__ + ':', e) + success = 0 + else: + if ok == 0: + success = 0 + return success + def compile_path(skip_curdir=1, maxlevels=0, force=0, quiet=0): """Byte-compile all module on sys.path. @@ -118,15 +138,34 @@ force, quiet=quiet) return success +def expand_args(args, flist): + """read names in flist and append to args""" + expanded = args[:] + if flist: + try: + if flist == '-': + fd = sys.stdin + else: + fd = open(flist) + while 1: + line = fd.readline() + if not line: + break + expanded.append(line[:-1]) + except IOError: + print("Error reading file list %s" % flist) + raise + return expanded + def main(): """Script main program.""" import getopt try: - opts, args = getopt.getopt(sys.argv[1:], 'lfqd:x:') + opts, args = getopt.getopt(sys.argv[1:], 'lfqd:x:i:') except getopt.error as msg: print(msg) print("usage: python compileall.py [-l] [-f] [-q] [-d destdir] " \ - "[-x regexp] [directory ...]") + "[-x regexp] [-i list] [directory|file ...]") print("-l: don't recurse down") print("-f: force rebuild even if timestamps are up-to-date") print("-q: quiet operation") @@ -134,12 +173,14 @@ print(" if no directory arguments, -l sys.path is assumed") print("-x regexp: skip files matching the regular expression regexp") print(" the regexp is searched for in the full path of the file") + print("-i list: expand list with its content (file and directory names)") sys.exit(2) maxlevels = 10 ddir = None force = 0 quiet = 0 rx = None + flist = None for o, a in opts: if o == '-l': maxlevels = 0 if o == '-d': ddir = a @@ -148,17 +189,28 @@ if o == '-x': import re rx = re.compile(a) + if o == '-i': flist = a if ddir: - if len(args) != 1: + if len(args) != 1 and not os.path.isdir(args[0]): print("-d destdir require exactly one directory argument") sys.exit(2) success = 1 try: - if args: - for dir in args: - if not compile_dir(dir, maxlevels, ddir, - force, rx, quiet): - success = 0 + if args or flist: + try: + if flist: + args = expand_args(args, flist) + except IOError: + success = 0 + if success: + for arg in args: + if os.path.isdir(arg): + if not compile_dir(arg, maxlevels, ddir, + force, rx, quiet): + success = 0 + else: + if not compile_file(arg, ddir, force, rx, quiet): + success = 0 else: success = compile_path() except KeyboardInterrupt: Modified: python/branches/py3k/Lib/test/test_compileall.py ============================================================================== --- python/branches/py3k/Lib/test/test_compileall.py (original) +++ python/branches/py3k/Lib/test/test_compileall.py Tue Mar 16 01:36:26 2010 @@ -17,6 +17,9 @@ self.bc_path = self.source_path + ('c' if __debug__ else 'o') with open(self.source_path, 'w') as file: file.write('x = 123\n') + self.source_path2 = os.path.join(self.directory, '_test2.py') + self.bc_path2 = self.source_path2 + ('c' if __debug__ else 'o') + shutil.copyfile(self.source_path, self.source_path2) def tearDown(self): shutil.rmtree(self.directory) @@ -52,6 +55,22 @@ # Test a change in mtime leads to a new .pyc. self.recreation_check(b'\0\0\0\0') + def test_compile_files(self): + # Test compiling a single file, and complete directory + for fn in (self.bc_path, self.bc_path2): + try: + os.unlink(fn) + except: + pass + compileall.compile_file(self.source_path, force=False, quiet=True) + self.assertTrue(os.path.isfile(self.bc_path) \ + and not os.path.isfile(self.bc_path2)) + os.unlink(self.bc_path) + compileall.compile_dir(self.directory, force=False, quiet=True) + self.assertTrue(os.path.isfile(self.bc_path) \ + and os.path.isfile(self.bc_path2)) + os.unlink(self.bc_path) + os.unlink(self.bc_path2) def test_main(): support.run_unittest(CompileallTests) Modified: python/branches/py3k/Misc/NEWS ============================================================================== --- python/branches/py3k/Misc/NEWS (original) +++ python/branches/py3k/Misc/NEWS Tue Mar 16 01:36:26 2010 @@ -283,6 +283,8 @@ Library ------- +- Issue #8140: extend compileall to compile single files. Add -i option. + - Issue #7356: ctypes.util: Make parsing of ldconfig output independent of the locale. From python-checkins at python.org Tue Mar 16 01:40:12 2010 From: python-checkins at python.org (alexandre.vassalotti) Date: Tue, 16 Mar 2010 01:40:12 +0100 Subject: [Python-checkins] distutils2: Removed broken bdist_rpm command. Message-ID: alexandre.vassalotti pushed 350ea58c20d8 to distutils2: http://hg.python.org/distutils2/rev/350ea58c20d8 changeset: 74:350ea58c20d8 tag: tip user: Alexandre Vassalotti date: Mon Mar 15 20:39:21 2010 -0400 summary: Removed broken bdist_rpm command. files: src/distutils2/command/bdist_rpm.py diff --git a/src/distutils2/command/bdist_rpm.py b/src/distutils2/command/bdist_rpm.py deleted file mode 100644 --- a/src/distutils2/command/bdist_rpm.py +++ /dev/null @@ -1,563 +0,0 @@ -"""distutils.command.bdist_rpm - -Implements the Distutils 'bdist_rpm' command (create RPM source and binary -distributions).""" - -__revision__ = "$Id: bdist_rpm.py 76956 2009-12-21 01:22:46Z tarek.ziade $" - -import sys -import os -import string - -from distutils2.core import Command -from distutils2.util import write_file -from distutils2.errors import (DistutilsOptionError, DistutilsPlatformError, - DistutilsFileError, DistutilsExecError) -from distutils2 import log - -class bdist_rpm (Command): - - description = "create an RPM distribution" - - user_options = [ - ('bdist-base=', None, - "base directory for creating built distributions"), - ('rpm-base=', None, - "base directory for creating RPMs (defaults to \"rpm\" under " - "--bdist-base; must be specified for RPM 2)"), - ('dist-dir=', 'd', - "directory to put final RPM files in " - "(and .spec files if --spec-only)"), - ('python=', None, - "path to Python interpreter to hard-code in the .spec file " - "(default: \"python\")"), - ('fix-python', None, - "hard-code the exact path to the current Python interpreter in " - "the .spec file"), - ('spec-only', None, - "only regenerate spec file"), - ('source-only', None, - "only generate source RPM"), - ('binary-only', None, - "only generate binary RPM"), - ('use-bzip2', None, - "use bzip2 instead of gzip to create source distribution"), - - # More meta-data: too RPM-specific to put in the setup script, - # but needs to go in the .spec file -- so we make these options - # to "bdist_rpm". The idea is that packagers would put this - # info in setup.cfg, although they are of course free to - # supply it on the command line. - ('distribution-name=', None, - "name of the (Linux) distribution to which this " - "RPM applies (*not* the name of the module distribution!)"), - ('group=', None, - "package classification [default: \"Development/Libraries\"]"), - ('release=', None, - "RPM release number"), - ('serial=', None, - "RPM serial number"), - ('vendor=', None, - "RPM \"vendor\" (eg. \"Joe Blow \") " - "[default: maintainer or author from setup script]"), - ('packager=', None, - "RPM packager (eg. \"Jane Doe \")" - "[default: vendor]"), - ('doc-files=', None, - "list of documentation files (space or comma-separated)"), - ('changelog=', None, - "RPM changelog"), - ('icon=', None, - "name of icon file"), - ('provides=', None, - "capabilities provided by this package"), - ('requires=', None, - "capabilities required by this package"), - ('conflicts=', None, - "capabilities which conflict with this package"), - ('build-requires=', None, - "capabilities required to build this package"), - ('obsoletes=', None, - "capabilities made obsolete by this package"), - ('no-autoreq', None, - "do not automatically calculate dependencies"), - - # Actions to take when building RPM - ('keep-temp', 'k', - "don't clean up RPM build directory"), - ('no-keep-temp', None, - "clean up RPM build directory [default]"), - ('use-rpm-opt-flags', None, - "compile with RPM_OPT_FLAGS when building from source RPM"), - ('no-rpm-opt-flags', None, - "do not pass any RPM CFLAGS to compiler"), - ('rpm3-mode', None, - "RPM 3 compatibility mode (default)"), - ('rpm2-mode', None, - "RPM 2 compatibility mode"), - - # Add the hooks necessary for specifying custom scripts - ('prep-script=', None, - "Specify a script for the PREP phase of RPM building"), - ('build-script=', None, - "Specify a script for the BUILD phase of RPM building"), - - ('pre-install=', None, - "Specify a script for the pre-INSTALL phase of RPM building"), - ('install-script=', None, - "Specify a script for the INSTALL phase of RPM building"), - ('post-install=', None, - "Specify a script for the post-INSTALL phase of RPM building"), - - ('pre-uninstall=', None, - "Specify a script for the pre-UNINSTALL phase of RPM building"), - ('post-uninstall=', None, - "Specify a script for the post-UNINSTALL phase of RPM building"), - - ('clean-script=', None, - "Specify a script for the CLEAN phase of RPM building"), - - ('verify-script=', None, - "Specify a script for the VERIFY phase of the RPM build"), - - # Allow a packager to explicitly force an architecture - ('force-arch=', None, - "Force an architecture onto the RPM build process"), - - ('quiet', 'q', - "Run the INSTALL phase of RPM building in quiet mode"), - ] - - boolean_options = ['keep-temp', 'use-rpm-opt-flags', 'rpm3-mode', - 'no-autoreq', 'quiet'] - - negative_opt = {'no-keep-temp': 'keep-temp', - 'no-rpm-opt-flags': 'use-rpm-opt-flags', - 'rpm2-mode': 'rpm3-mode'} - - - def initialize_options (self): - self.bdist_base = None - self.rpm_base = None - self.dist_dir = None - self.python = None - self.fix_python = None - self.spec_only = None - self.binary_only = None - self.source_only = None - self.use_bzip2 = None - - self.distribution_name = None - self.group = None - self.release = None - self.serial = None - self.vendor = None - self.packager = None - self.doc_files = None - self.changelog = None - self.icon = None - - self.prep_script = None - self.build_script = None - self.install_script = None - self.clean_script = None - self.verify_script = None - self.pre_install = None - self.post_install = None - self.pre_uninstall = None - self.post_uninstall = None - self.prep = None - self.provides = None - self.requires = None - self.conflicts = None - self.build_requires = None - self.obsoletes = None - - self.keep_temp = 0 - self.use_rpm_opt_flags = 1 - self.rpm3_mode = 1 - self.no_autoreq = 0 - - self.force_arch = None - self.quiet = 0 - - # initialize_options() - - - def finalize_options (self): - self.set_undefined_options('bdist', ('bdist_base', 'bdist_base')) - if self.rpm_base is None: - if not self.rpm3_mode: - raise DistutilsOptionError, \ - "you must specify --rpm-base in RPM 2 mode" - self.rpm_base = os.path.join(self.bdist_base, "rpm") - - if self.python is None: - if self.fix_python: - self.python = sys.executable - else: - self.python = "python" - elif self.fix_python: - raise DistutilsOptionError, \ - "--python and --fix-python are mutually exclusive options" - - if os.name != 'posix': - raise DistutilsPlatformError, \ - ("don't know how to create RPM " - "distributions on platform %s" % os.name) - if self.binary_only and self.source_only: - raise DistutilsOptionError, \ - "cannot supply both '--source-only' and '--binary-only'" - - # don't pass CFLAGS to pure python distributions - if not self.distribution.has_ext_modules(): - self.use_rpm_opt_flags = 0 - - self.set_undefined_options('bdist', ('dist_dir', 'dist_dir')) - self.finalize_package_data() - - # finalize_options() - - def finalize_package_data (self): - self.ensure_string('group', "Development/Libraries") - self.ensure_string('vendor', - "%s <%s>" % (self.distribution.get_contact(), - self.distribution.get_contact_email())) - self.ensure_string('packager') - self.ensure_string_list('doc_files') - if isinstance(self.doc_files, list): - for readme in ('README', 'README.txt'): - if os.path.exists(readme) and readme not in self.doc_files: - self.doc_files.append(readme) - - self.ensure_string('release', "1") - self.ensure_string('serial') # should it be an int? - - self.ensure_string('distribution_name') - - self.ensure_string('changelog') - # Format changelog correctly - self.changelog = self._format_changelog(self.changelog) - - self.ensure_filename('icon') - - self.ensure_filename('prep_script') - self.ensure_filename('build_script') - self.ensure_filename('install_script') - self.ensure_filename('clean_script') - self.ensure_filename('verify_script') - self.ensure_filename('pre_install') - self.ensure_filename('post_install') - self.ensure_filename('pre_uninstall') - self.ensure_filename('post_uninstall') - - # XXX don't forget we punted on summaries and descriptions -- they - # should be handled here eventually! - - # Now *this* is some meta-data that belongs in the setup script... - self.ensure_string_list('provides') - self.ensure_string_list('requires') - self.ensure_string_list('conflicts') - self.ensure_string_list('build_requires') - self.ensure_string_list('obsoletes') - - self.ensure_string('force_arch') - # finalize_package_data () - - - def run (self): - - # make directories - if self.spec_only: - spec_dir = self.dist_dir - self.mkpath(spec_dir) - else: - rpm_dir = {} - for d in ('SOURCES', 'SPECS', 'BUILD', 'RPMS', 'SRPMS'): - rpm_dir[d] = os.path.join(self.rpm_base, d) - self.mkpath(rpm_dir[d]) - spec_dir = rpm_dir['SPECS'] - - # Spec file goes into 'dist_dir' if '--spec-only specified', - # build/rpm. otherwise. - spec_path = os.path.join(spec_dir, - "%s.spec" % self.distribution.get_name()) - self.execute(write_file, - (spec_path, - self._make_spec_file()), - "writing '%s'" % spec_path) - - if self.spec_only: # stop if requested - return - - # Make a source distribution and copy to SOURCES directory with - # optional icon. - saved_dist_files = self.distribution.dist_files[:] - sdist = self.reinitialize_command('sdist') - if self.use_bzip2: - sdist.formats = ['bztar'] - else: - sdist.formats = ['gztar'] - self.run_command('sdist') - self.distribution.dist_files = saved_dist_files - - source = sdist.get_archive_files()[0] - source_dir = rpm_dir['SOURCES'] - self.copy_file(source, source_dir) - - if self.icon: - if os.path.exists(self.icon): - self.copy_file(self.icon, source_dir) - else: - raise DistutilsFileError, \ - "icon file '%s' does not exist" % self.icon - - - # build package - log.info("building RPMs") - rpm_cmd = ['rpm'] - if os.path.exists('/usr/bin/rpmbuild') or \ - os.path.exists('/bin/rpmbuild'): - rpm_cmd = ['rpmbuild'] - - if self.source_only: # what kind of RPMs? - rpm_cmd.append('-bs') - elif self.binary_only: - rpm_cmd.append('-bb') - else: - rpm_cmd.append('-ba') - if self.rpm3_mode: - rpm_cmd.extend(['--define', - '_topdir %s' % os.path.abspath(self.rpm_base)]) - if not self.keep_temp: - rpm_cmd.append('--clean') - - if self.quiet: - rpm_cmd.append('--quiet') - - rpm_cmd.append(spec_path) - # Determine the binary rpm names that should be built out of this spec - # file - # Note that some of these may not be really built (if the file - # list is empty) - nvr_string = "%{name}-%{version}-%{release}" - src_rpm = nvr_string + ".src.rpm" - non_src_rpm = "%{arch}/" + nvr_string + ".%{arch}.rpm" - q_cmd = r"rpm -q --qf '%s %s\n' --specfile '%s'" % ( - src_rpm, non_src_rpm, spec_path) - - out = os.popen(q_cmd) - binary_rpms = [] - source_rpm = None - while 1: - line = out.readline() - if not line: - break - l = string.split(string.strip(line)) - assert(len(l) == 2) - binary_rpms.append(l[1]) - # The source rpm is named after the first entry in the spec file - if source_rpm is None: - source_rpm = l[0] - - status = out.close() - if status: - raise DistutilsExecError("Failed to execute: %s" % repr(q_cmd)) - - self.spawn(rpm_cmd) - - if not self.dry_run: - if not self.binary_only: - srpm = os.path.join(rpm_dir['SRPMS'], source_rpm) - assert(os.path.exists(srpm)) - self.move_file(srpm, self.dist_dir) - - if not self.source_only: - for rpm in binary_rpms: - rpm = os.path.join(rpm_dir['RPMS'], rpm) - if os.path.exists(rpm): - self.move_file(rpm, self.dist_dir) - # run() - - def _dist_path(self, path): - return os.path.join(self.dist_dir, os.path.basename(path)) - - def _make_spec_file(self): - """Generate the text of an RPM spec file and return it as a - list of strings (one per line). - """ - # definitions and headers - spec_file = [ - '%define name ' + self.distribution.get_name(), - '%define version ' + self.distribution.get_version().replace('-','_'), - '%define unmangled_version ' + self.distribution.get_version(), - '%define release ' + self.release.replace('-','_'), - '', - 'Summary: ' + self.distribution.get_description(), - ] - - # put locale summaries into spec file - # XXX not supported for now (hard to put a dictionary - # in a config file -- arg!) - #for locale in self.summaries.keys(): - # spec_file.append('Summary(%s): %s' % (locale, - # self.summaries[locale])) - - spec_file.extend([ - 'Name: %{name}', - 'Version: %{version}', - 'Release: %{release}',]) - - # XXX yuck! this filename is available from the "sdist" command, - # but only after it has run: and we create the spec file before - # running "sdist", in case of --spec-only. - if self.use_bzip2: - spec_file.append('Source0: %{name}-%{unmangled_version}.tar.bz2') - else: - spec_file.append('Source0: %{name}-%{unmangled_version}.tar.gz') - - spec_file.extend([ - 'License: ' + self.distribution.get_license(), - 'Group: ' + self.group, - 'BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-buildroot', - 'Prefix: %{_prefix}', ]) - - if not self.force_arch: - # noarch if no extension modules - if not self.distribution.has_ext_modules(): - spec_file.append('BuildArch: noarch') - else: - spec_file.append( 'BuildArch: %s' % self.force_arch ) - - for field in ('Vendor', - 'Packager', - 'Provides', - 'Requires', - 'Conflicts', - 'Obsoletes', - ): - val = getattr(self, string.lower(field)) - if isinstance(val, list): - spec_file.append('%s: %s' % (field, string.join(val))) - elif val is not None: - spec_file.append('%s: %s' % (field, val)) - - - if self.distribution.get_url() != 'UNKNOWN': - spec_file.append('Url: ' + self.distribution.get_url()) - - if self.distribution_name: - spec_file.append('Distribution: ' + self.distribution_name) - - if self.build_requires: - spec_file.append('BuildRequires: ' + - string.join(self.build_requires)) - - if self.icon: - spec_file.append('Icon: ' + os.path.basename(self.icon)) - - if self.no_autoreq: - spec_file.append('AutoReq: 0') - - spec_file.extend([ - '', - '%description', - self.distribution.get_long_description() - ]) - - # put locale descriptions into spec file - # XXX again, suppressed because config file syntax doesn't - # easily support this ;-( - #for locale in self.descriptions.keys(): - # spec_file.extend([ - # '', - # '%description -l ' + locale, - # self.descriptions[locale], - # ]) - - # rpm scripts - # figure out default build script - def_setup_call = "%s %s" % (self.python,os.path.basename(sys.argv[0])) - def_build = "%s build" % def_setup_call - if self.use_rpm_opt_flags: - def_build = 'env CFLAGS="$RPM_OPT_FLAGS" ' + def_build - - # insert contents of files - - # XXX this is kind of misleading: user-supplied options are files - # that we open and interpolate into the spec file, but the defaults - # are just text that we drop in as-is. Hmmm. - - install_cmd = ('%s install -O1 --root=$RPM_BUILD_ROOT ' - '--record=INSTALLED_FILES') % def_setup_call - - script_options = [ - ('prep', 'prep_script', "%setup -n %{name}-%{unmangled_version}"), - ('build', 'build_script', def_build), - ('install', 'install_script', install_cmd), - ('clean', 'clean_script', "rm -rf $RPM_BUILD_ROOT"), - ('verifyscript', 'verify_script', None), - ('pre', 'pre_install', None), - ('post', 'post_install', None), - ('preun', 'pre_uninstall', None), - ('postun', 'post_uninstall', None), - ] - - for (rpm_opt, attr, default) in script_options: - # Insert contents of file referred to, if no file is referred to - # use 'default' as contents of script - val = getattr(self, attr) - if val or default: - spec_file.extend([ - '', - '%' + rpm_opt,]) - if val: - spec_file.extend(string.split(open(val, 'r').read(), '\n')) - else: - spec_file.append(default) - - - # files section - spec_file.extend([ - '', - '%files -f INSTALLED_FILES', - '%defattr(-,root,root)', - ]) - - if self.doc_files: - spec_file.append('%doc ' + string.join(self.doc_files)) - - if self.changelog: - spec_file.extend([ - '', - '%changelog',]) - spec_file.extend(self.changelog) - - return spec_file - - # _make_spec_file () - - def _format_changelog(self, changelog): - """Format the changelog correctly and convert it to a list of strings - """ - if not changelog: - return changelog - new_changelog = [] - for line in string.split(string.strip(changelog), '\n'): - line = string.strip(line) - if line[0] == '*': - new_changelog.extend(['', line]) - elif line[0] == '-': - new_changelog.append(line) - else: - new_changelog.append(' ' + line) - - # strip trailing newline inserted by first changelog entry - if not new_changelog[0]: - del new_changelog[0] - - return new_changelog - - # _format_changelog() - -# class bdist_rpm -- Repository URL: http://hg.python.org/distutils2 From python-checkins at python.org Tue Mar 16 01:47:27 2010 From: python-checkins at python.org (alexandre.vassalotti) Date: Tue, 16 Mar 2010 01:47:27 +0100 Subject: [Python-checkins] distutils2: Removed unit tests for bdist_rpm. Message-ID: alexandre.vassalotti pushed 932d3aefeae4 to distutils2: http://hg.python.org/distutils2/rev/932d3aefeae4 changeset: 75:932d3aefeae4 tag: tip user: Alexandre Vassalotti date: Mon Mar 15 20:47:16 2010 -0400 summary: Removed unit tests for bdist_rpm. files: src/distutils2/tests/test_bdist_rpm.py diff --git a/src/distutils2/tests/test_bdist_rpm.py b/src/distutils2/tests/test_bdist_rpm.py deleted file mode 100644 --- a/src/distutils2/tests/test_bdist_rpm.py +++ /dev/null @@ -1,127 +0,0 @@ -"""Tests for distutils.command.bdist_rpm.""" - -import unittest2 -import sys -import os -import tempfile -import shutil - -from distutils2.tests import run_unittest - -from distutils2.core import Distribution -from distutils2.command.bdist_rpm import bdist_rpm -from distutils2.tests import support -from distutils2.spawn import find_executable -from distutils2 import spawn -from distutils2.errors import DistutilsExecError - -SETUP_PY = """\ -from distutils.core import setup -import foo - -setup(name='foo', version='0.1', py_modules=['foo'], - url='xxx', author='xxx', author_email='xxx') - -""" - -class BuildRpmTestCase(support.TempdirManager, - support.LoggingSilencer, - unittest2.TestCase): - - def setUp(self): - super(BuildRpmTestCase, self).setUp() - self.old_location = os.getcwd() - self.old_sys_argv = sys.argv, sys.argv[:] - - def tearDown(self): - os.chdir(self.old_location) - sys.argv = self.old_sys_argv[0] - sys.argv[:] = self.old_sys_argv[1] - super(BuildRpmTestCase, self).tearDown() - - def test_quiet(self): - - # XXX I am unable yet to make this test work without - # spurious sdtout/stderr output under Mac OS X - if sys.platform != 'linux2': - return - - # this test will run only if the rpm commands are found - if (find_executable('rpm') is None or - find_executable('rpmbuild') is None): - return - - # let's create a package - tmp_dir = self.mkdtemp() - pkg_dir = os.path.join(tmp_dir, 'foo') - os.mkdir(pkg_dir) - self.write_file((pkg_dir, 'setup.py'), SETUP_PY) - self.write_file((pkg_dir, 'foo.py'), '#') - self.write_file((pkg_dir, 'MANIFEST.in'), 'include foo.py') - self.write_file((pkg_dir, 'README'), '') - - dist = Distribution({'name': 'foo', 'version': '0.1', - 'py_modules': ['foo'], - 'url': 'xxx', 'author': 'xxx', - 'author_email': 'xxx'}) - dist.script_name = 'setup.py' - os.chdir(pkg_dir) - - sys.argv = ['setup.py'] - cmd = bdist_rpm(dist) - cmd.fix_python = True - - # running in quiet mode - cmd.quiet = 1 - cmd.ensure_finalized() - cmd.run() - - dist_created = os.listdir(os.path.join(pkg_dir, 'dist')) - self.assertTrue('foo-0.1-1.noarch.rpm' in dist_created) - - def test_no_optimize_flag(self): - - # XXX I am unable yet to make this test work without - # spurious sdtout/stderr output under Mac OS X - if sys.platform != 'linux2': - return - - # http://bugs.python.org/issue1533164 - # this test will run only if the rpm command is found - if (find_executable('rpm') is None or - find_executable('rpmbuild') is None): - return - - # let's create a package that brakes bdist_rpm - tmp_dir = self.mkdtemp() - pkg_dir = os.path.join(tmp_dir, 'foo') - os.mkdir(pkg_dir) - self.write_file((pkg_dir, 'setup.py'), SETUP_PY) - self.write_file((pkg_dir, 'foo.py'), '#') - self.write_file((pkg_dir, 'MANIFEST.in'), 'include foo.py') - self.write_file((pkg_dir, 'README'), '') - - dist = Distribution({'name': 'foo', 'version': '0.1', - 'py_modules': ['foo'], - 'url': 'xxx', 'author': 'xxx', - 'author_email': 'xxx'}) - dist.script_name = 'setup.py' - os.chdir(pkg_dir) - - sys.argv = ['setup.py'] - cmd = bdist_rpm(dist) - cmd.fix_python = True - - cmd.quiet = 1 - cmd.ensure_finalized() - cmd.run() - - dist_created = os.listdir(os.path.join(pkg_dir, 'dist')) - self.assertTrue('foo-0.1-1.noarch.rpm' in dist_created) - os.remove(os.path.join(pkg_dir, 'dist', 'foo-0.1-1.noarch.rpm')) - -def test_suite(): - return unittest2.makeSuite(BuildRpmTestCase) - -if __name__ == '__main__': - run_unittest(test_suite()) -- Repository URL: http://hg.python.org/distutils2 From python-checkins at python.org Tue Mar 16 11:48:53 2010 From: python-checkins at python.org (matthias.klose) Date: Tue, 16 Mar 2010 11:48:53 +0100 (CET) Subject: [Python-checkins] r78988 - in python/trunk: Lib/lib-tk/tkMessageBox.py Misc/NEWS Message-ID: <20100316104853.21FEEF8A6@mail.python.org> Author: matthias.klose Date: Tue Mar 16 11:48:52 2010 New Revision: 78988 Log: - Issue #4961: Inconsistent/wrong result of askyesno function in tkMessageBox with Tcl/Tk-8.5. Modified: python/trunk/Lib/lib-tk/tkMessageBox.py python/trunk/Misc/NEWS Modified: python/trunk/Lib/lib-tk/tkMessageBox.py ============================================================================== --- python/trunk/Lib/lib-tk/tkMessageBox.py (original) +++ python/trunk/Lib/lib-tk/tkMessageBox.py Tue Mar 16 11:48:52 2010 @@ -70,11 +70,13 @@ if title: options["title"] = title if message: options["message"] = message res = Message(**options).show() - # In some Tcl installations, Tcl converts yes/no into a boolean + # In some Tcl installations, yes/no is converted into a boolean. if isinstance(res, bool): - if res: return YES + if res: + return YES return NO - return res + # In others we get a Tcl_Obj. + return str(res) def showinfo(title=None, message=None, **options): "Show an info message" Modified: python/trunk/Misc/NEWS ============================================================================== --- python/trunk/Misc/NEWS (original) +++ python/trunk/Misc/NEWS Tue Mar 16 11:48:52 2010 @@ -20,6 +20,9 @@ Library ------- +- Issue #4961: Inconsistent/wrong result of askyesno function in tkMessageBox + with Tcl/Tk-8.5. + - Issue #8140: extend compileall to compile single files. Add -i option. - Issue #7356: ctypes.util: Make parsing of ldconfig output independent of From python-checkins at python.org Tue Mar 16 11:51:29 2010 From: python-checkins at python.org (matthias.klose) Date: Tue, 16 Mar 2010 11:51:29 +0100 (CET) Subject: [Python-checkins] r78989 - in python/branches/py3k: Lib/tkinter/messagebox.py Misc/NEWS Message-ID: <20100316105129.0A5E7E33C@mail.python.org> Author: matthias.klose Date: Tue Mar 16 11:51:28 2010 New Revision: 78989 Log: Merged revisions 78988 via svnmerge from svn+ssh://pythondev at svn.python.org/python/trunk ........ r78988 | matthias.klose | 2010-03-16 11:48:52 +0100 (Tue, 16 Mar 2010) | 3 lines - Issue #4961: Inconsistent/wrong result of askyesno function in tkMessageBox with Tcl/Tk-8.5. ........ Modified: python/branches/py3k/ (props changed) python/branches/py3k/Lib/tkinter/messagebox.py python/branches/py3k/Misc/NEWS Modified: python/branches/py3k/Lib/tkinter/messagebox.py ============================================================================== --- python/branches/py3k/Lib/tkinter/messagebox.py (original) +++ python/branches/py3k/Lib/tkinter/messagebox.py Tue Mar 16 11:51:28 2010 @@ -70,11 +70,13 @@ if title: options["title"] = title if message: options["message"] = message res = Message(**options).show() - # In some Tcl installations, Tcl converts yes/no into a boolean + # In some Tcl installations, yes/no is converted into a boolean. if isinstance(res, bool): - if res: return YES + if res: + return YES return NO - return res + # In others we get a Tcl_Obj. + return str(res) def showinfo(title=None, message=None, **options): "Show an info message" Modified: python/branches/py3k/Misc/NEWS ============================================================================== --- python/branches/py3k/Misc/NEWS (original) +++ python/branches/py3k/Misc/NEWS Tue Mar 16 11:51:28 2010 @@ -283,6 +283,9 @@ Library ------- +- Issue #4961: Inconsistent/wrong result of askyesno function in tkMessageBox + with Tcl/Tk-8.5. + - Issue #8140: extend compileall to compile single files. Add -i option. - Issue #7356: ctypes.util: Make parsing of ldconfig output independent of From python-checkins at python.org Tue Mar 16 11:53:02 2010 From: python-checkins at python.org (matthias.klose) Date: Tue, 16 Mar 2010 11:53:02 +0100 (CET) Subject: [Python-checkins] r78990 - in python/branches/release31-maint: Lib/tkinter/messagebox.py Misc/NEWS Message-ID: <20100316105302.BB0F3FA14@mail.python.org> Author: matthias.klose Date: Tue Mar 16 11:53:02 2010 New Revision: 78990 Log: Merged revisions 78989 via svnmerge from svn+ssh://pythondev at svn.python.org/python/branches/py3k ................ r78989 | matthias.klose | 2010-03-16 11:51:28 +0100 (Tue, 16 Mar 2010) | 10 lines Merged revisions 78988 via svnmerge from svn+ssh://pythondev at svn.python.org/python/trunk ........ r78988 | matthias.klose | 2010-03-16 11:48:52 +0100 (Tue, 16 Mar 2010) | 3 lines - Issue #4961: Inconsistent/wrong result of askyesno function in tkMessageBox with Tcl/Tk-8.5. ........ ................ Modified: python/branches/release31-maint/Lib/tkinter/messagebox.py python/branches/release31-maint/Misc/NEWS Modified: python/branches/release31-maint/Lib/tkinter/messagebox.py ============================================================================== --- python/branches/release31-maint/Lib/tkinter/messagebox.py (original) +++ python/branches/release31-maint/Lib/tkinter/messagebox.py Tue Mar 16 11:53:02 2010 @@ -70,11 +70,13 @@ if title: options["title"] = title if message: options["message"] = message res = Message(**options).show() - # In some Tcl installations, Tcl converts yes/no into a boolean + # In some Tcl installations, yes/no is converted into a boolean. if isinstance(res, bool): - if res: return YES + if res: + return YES return NO - return res + # In others we get a Tcl_Obj. + return str(res) def showinfo(title=None, message=None, **options): "Show an info message" Modified: python/branches/release31-maint/Misc/NEWS ============================================================================== --- python/branches/release31-maint/Misc/NEWS (original) +++ python/branches/release31-maint/Misc/NEWS Tue Mar 16 11:53:02 2010 @@ -17,6 +17,9 @@ Library ------- +- Issue #4961: Inconsistent/wrong result of askyesno function in tkMessageBox + with Tcl/Tk-8.5. + - Issue #7356: ctypes.util: Make parsing of ldconfig output independent of the locale. From python-checkins at python.org Tue Mar 16 12:03:13 2010 From: python-checkins at python.org (martin.v.loewis) Date: Tue, 16 Mar 2010 12:03:13 +0100 (CET) Subject: [Python-checkins] r78991 - in python/branches/py3k: Misc/NEWS Tools/msi/msi.py Message-ID: <20100316110313.6B06AF7D8@mail.python.org> Author: martin.v.loewis Date: Tue Mar 16 12:03:13 2010 New Revision: 78991 Log: Merged revisions 78976 via svnmerge from svn+ssh://pythondev at svn.python.org/python/trunk ........ r78976 | martin.v.loewis | 2010-03-15 14:00:17 +0100 (Mo, 15 M?r 2010) | 1 line Issue #6716: Quote -x arguments of compileall in MSI installer. ........ Modified: python/branches/py3k/ (props changed) python/branches/py3k/Misc/NEWS python/branches/py3k/Tools/msi/msi.py Modified: python/branches/py3k/Misc/NEWS ============================================================================== --- python/branches/py3k/Misc/NEWS (original) +++ python/branches/py3k/Misc/NEWS Tue Mar 16 12:03:13 2010 @@ -835,6 +835,8 @@ Build ----- +- Issue #6716: Quote -x arguments of compileall in MSI installer. + - Issue #3920, #7903: Define _BSD_SOURCE on OpenBSD 4.4 through 4.9. - Issue #7632: When Py_USING_MEMORY_DEBUGGER is defined, disable the Modified: python/branches/py3k/Tools/msi/msi.py ============================================================================== --- python/branches/py3k/Tools/msi/msi.py (original) +++ python/branches/py3k/Tools/msi/msi.py Tue Mar 16 12:03:13 2010 @@ -403,7 +403,7 @@ ("VerdanaRed9", "Verdana", 9, 255, 0), ]) - compileargs = r'-Wi "[TARGETDIR]Lib\compileall.py" -f -x bad_coding|badsyntax|site-packages|py2_ "[TARGETDIR]Lib"' + compileargs = r'-Wi "[TARGETDIR]Lib\compileall.py" -f -x "bad_coding|badsyntax|site-packages|py2_" "[TARGETDIR]Lib"' lib2to3args = r'-c "import lib2to3.pygram, lib2to3.patcomp;lib2to3.patcomp.PatternCompiler()"' # See "CustomAction Table" add_data(db, "CustomAction", [ From python-checkins at python.org Tue Mar 16 14:19:21 2010 From: python-checkins at python.org (martin.v.loewis) Date: Tue, 16 Mar 2010 14:19:21 +0100 (CET) Subject: [Python-checkins] r78992 - in python/branches/py3k: Lib/compileall.py Lib/test/test_compileall.py Misc/NEWS Message-ID: <20100316131921.5AD9CEEEA@mail.python.org> Author: martin.v.loewis Date: Tue Mar 16 14:19:21 2010 New Revision: 78992 Log: Issue #6716/2: Backslash-replace error output in compilall. Modified: python/branches/py3k/Lib/compileall.py python/branches/py3k/Lib/test/test_compileall.py python/branches/py3k/Misc/NEWS Modified: python/branches/py3k/Lib/compileall.py ============================================================================== --- python/branches/py3k/Lib/compileall.py (original) +++ python/branches/py3k/Lib/compileall.py Tue Mar 16 14:19:21 2010 @@ -104,7 +104,10 @@ print('*** Error compiling', fullname, '...') else: print('*** ', end='') - print(err.msg) + # escape non-printable characters in msg + msg = err.msg.encode(sys.stdout.encoding, errors='backslashreplace') + msg = msg.decode(sys.stdout.encoding) + print(msg) success = 0 except (SyntaxError, UnicodeError, IOError) as e: if quiet: Modified: python/branches/py3k/Lib/test/test_compileall.py ============================================================================== --- python/branches/py3k/Lib/test/test_compileall.py (original) +++ python/branches/py3k/Lib/test/test_compileall.py Tue Mar 16 14:19:21 2010 @@ -1,3 +1,4 @@ +import sys import compileall import imp import os @@ -7,6 +8,7 @@ import tempfile from test import support import unittest +import io class CompileallTests(unittest.TestCase): @@ -72,8 +74,30 @@ os.unlink(self.bc_path) os.unlink(self.bc_path2) +class EncodingTest(unittest.TestCase): + 'Issue 6716: compileall should escape source code when printing errors to stdout.' + + def setUp(self): + self.directory = tempfile.mkdtemp() + self.source_path = os.path.join(self.directory, '_test.py') + with open(self.source_path, 'w', encoding='utf-8') as file: + file.write('# -*- coding: utf-8 -*-\n') + file.write('print u"\u20ac"\n') + + def tearDown(self): + shutil.rmtree(self.directory) + + def test_error(self): + try: + orig_stdout = sys.stdout + sys.stdout = io.TextIOWrapper(io.BytesIO(),encoding='ascii') + compileall.compile_dir(self.directory) + finally: + sys.stdout = orig_stdout + def test_main(): - support.run_unittest(CompileallTests) + support.run_unittest(CompileallTests, + EncodingTest) if __name__ == "__main__": Modified: python/branches/py3k/Misc/NEWS ============================================================================== --- python/branches/py3k/Misc/NEWS (original) +++ python/branches/py3k/Misc/NEWS Tue Mar 16 14:19:21 2010 @@ -283,6 +283,8 @@ Library ------- +- Issue #6716/2: Backslash-replace error output in compilall. + - Issue #4961: Inconsistent/wrong result of askyesno function in tkMessageBox with Tcl/Tk-8.5. From python-checkins at python.org Tue Mar 16 15:16:09 2010 From: python-checkins at python.org (martin.v.loewis) Date: Tue, 16 Mar 2010 15:16:09 +0100 (CET) Subject: [Python-checkins] r78993 - python/branches/py3k/Tools/msi/msi.py Message-ID: <20100316141609.773AADFAA@mail.python.org> Author: martin.v.loewis Date: Tue Mar 16 15:16:09 2010 New Revision: 78993 Log: Add UUID for 3.2 DLL. Modified: python/branches/py3k/Tools/msi/msi.py Modified: python/branches/py3k/Tools/msi/msi.py ============================================================================== --- python/branches/py3k/Tools/msi/msi.py (original) +++ python/branches/py3k/Tools/msi/msi.py Tue Mar 16 15:16:09 2010 @@ -113,6 +113,7 @@ "27":"{4fe21c76-1760-437b-a2f2-99909130a175}", "30":"{6953bc3b-6768-4291-8410-7914ce6e2ca8}", "31":"{4afcba0b-13e4-47c3-bebe-477428b46913}", + "32":"{3ff95315-1096-4d31-bd86-601d5438ad5e}", } [major+minor] # Compute the name that Sphinx gives to the docfile From python-checkins at python.org Tue Mar 16 17:19:47 2010 From: python-checkins at python.org (martin.v.loewis) Date: Tue, 16 Mar 2010 17:19:47 +0100 (CET) Subject: [Python-checkins] r78994 - in python/branches/py3k: Misc/NEWS Tools/msi/msi.py Message-ID: <20100316161947.AF965FA57@mail.python.org> Author: martin.v.loewis Date: Tue Mar 16 17:19:47 2010 New Revision: 78994 Log: Issue #6716/3: Exclude 2to3 tests from compileall. Modified: python/branches/py3k/Misc/NEWS python/branches/py3k/Tools/msi/msi.py Modified: python/branches/py3k/Misc/NEWS ============================================================================== --- python/branches/py3k/Misc/NEWS (original) +++ python/branches/py3k/Misc/NEWS Tue Mar 16 17:19:47 2010 @@ -838,6 +838,7 @@ ----- - Issue #6716: Quote -x arguments of compileall in MSI installer. + Exclude 2to3 tests from compileall. - Issue #3920, #7903: Define _BSD_SOURCE on OpenBSD 4.4 through 4.9. Modified: python/branches/py3k/Tools/msi/msi.py ============================================================================== --- python/branches/py3k/Tools/msi/msi.py (original) +++ python/branches/py3k/Tools/msi/msi.py Tue Mar 16 17:19:47 2010 @@ -404,7 +404,7 @@ ("VerdanaRed9", "Verdana", 9, 255, 0), ]) - compileargs = r'-Wi "[TARGETDIR]Lib\compileall.py" -f -x "bad_coding|badsyntax|site-packages|py2_" "[TARGETDIR]Lib"' + compileargs = r'-Wi "[TARGETDIR]Lib\compileall.py" -f -x "bad_coding|badsyntax|site-packages|py2_|lib2to3\\tests" "[TARGETDIR]Lib"' lib2to3args = r'-c "import lib2to3.pygram, lib2to3.patcomp;lib2to3.patcomp.PatternCompiler()"' # See "CustomAction Table" add_data(db, "CustomAction", [ From python-checkins at python.org Tue Mar 16 19:43:08 2010 From: python-checkins at python.org (collin.winter) Date: Tue, 16 Mar 2010 19:43:08 +0100 (CET) Subject: [Python-checkins] r78995 - python/branches/py3k-jit Message-ID: <20100316184308.70FA4FA3A@mail.python.org> Author: collin.winter Date: Tue Mar 16 19:43:08 2010 New Revision: 78995 Log: Set up svnmerge.py support for the py3k-jit branch. Modified: python/branches/py3k-jit/ (props changed) From python-checkins at python.org Tue Mar 16 19:49:28 2010 From: python-checkins at python.org (martin.v.loewis) Date: Tue, 16 Mar 2010 19:49:28 +0100 (CET) Subject: [Python-checkins] r78996 - in python/trunk/Tools/msi: merge.py msi.py Message-ID: <20100316184928.AA12FE09A@mail.python.org> Author: martin.v.loewis Date: Tue Mar 16 19:49:28 2010 New Revision: 78996 Log: Integrate merge.py into msi.py. Removed: python/trunk/Tools/msi/merge.py Modified: python/trunk/Tools/msi/msi.py Deleted: python/trunk/Tools/msi/merge.py ============================================================================== --- python/trunk/Tools/msi/merge.py Tue Mar 16 19:49:28 2010 +++ (empty file) @@ -1,84 +0,0 @@ -import msilib,os,win32com,tempfile,sys -PCBUILD="PCBuild" -certname = None -from config import * - -Win64 = "amd64" in PCBUILD - -mod_dir = os.path.join(os.environ["ProgramFiles"], "Common Files", "Merge Modules") -msi = None -if len(sys.argv)==2: - msi = sys.argv[1] -if Win64: - modules = ["Microsoft_VC90_CRT_x86_x64.msm", "policy_9_0_Microsoft_VC90_CRT_x86_x64.msm"] - if not msi: msi = "python-%s.amd64.msi" % full_current_version -else: - modules = ["Microsoft_VC90_CRT_x86.msm","policy_9_0_Microsoft_VC90_CRT_x86.msm"] - if not msi: msi = "python-%s.msi" % full_current_version -for i, n in enumerate(modules): - modules[i] = os.path.join(mod_dir, n) - -def merge(msi, feature, rootdir, modules): - cab_and_filecount = [] - # Step 1: Merge databases, extract cabfiles - m = msilib.MakeMerge2() - m.OpenLog("merge.log") - print "Opened Log" - m.OpenDatabase(msi) - print "Opened DB" - for module in modules: - print module - m.OpenModule(module,0) - print "Opened Module",module - m.Merge(feature, rootdir) - print "Errors:" - for e in m.Errors: - print e.Type, e.ModuleTable, e.DatabaseTable - print " Modkeys:", - for s in e.ModuleKeys: print s, - print - print " DBKeys:", - for s in e.DatabaseKeys: print s, - print - cabname = tempfile.mktemp(suffix=".cab") - m.ExtractCAB(cabname) - cab_and_filecount.append((cabname, len(m.ModuleFiles))) - m.CloseModule() - m.CloseDatabase(True) - m.CloseLog() - - # Step 2: Add CAB files - i = msilib.MakeInstaller() - db = i.OpenDatabase(msi, win32com.client.constants.msiOpenDatabaseModeTransact) - - v = db.OpenView("SELECT LastSequence FROM Media") - v.Execute(None) - maxmedia = -1 - while 1: - r = v.Fetch() - if not r: break - seq = r.IntegerData(1) - if seq > maxmedia: - maxmedia = seq - print "Start of Media", maxmedia - - for cabname, count in cab_and_filecount: - stream = "merged%d" % maxmedia - msilib.add_data(db, "Media", - [(maxmedia+1, maxmedia+count, None, "#"+stream, None, None)]) - msilib.add_stream(db, stream, cabname) - os.unlink(cabname) - maxmedia += count - # The merge module sets ALLUSERS to 1 in the property table. - # This is undesired; delete that - v = db.OpenView("DELETE FROM Property WHERE Property='ALLUSERS'") - v.Execute(None) - v.Close() - db.Commit() - -merge(msi, "SharedCRT", "TARGETDIR", modules) - -# certname (from config.py) should be (a substring of) -# the certificate subject, e.g. "Python Software Foundation" -if certname: - os.system('signtool sign /n "%s" /t http://timestamp.verisign.com/scripts/timestamp.dll %s' % (certname, msi)) Modified: python/trunk/Tools/msi/msi.py ============================================================================== --- python/trunk/Tools/msi/msi.py (original) +++ python/trunk/Tools/msi/msi.py Tue Mar 16 19:49:28 2010 @@ -7,6 +7,7 @@ from win32com.client import constants from distutils.spawn import find_executable from uuids import product_codes +import tempfile # Settings can be overridden in config.py below # 0 for official python.org releases @@ -28,6 +29,8 @@ PCBUILD="PCbuild" # msvcrt version MSVCR = "90" +# Name of certificate in default store to sign MSI with +certname = None try: from config import * @@ -218,7 +221,8 @@ # schema represents the installer 2.0 database schema. # sequence is the set of standard sequences # (ui/execute, admin/advt/install) - db = msilib.init_database("python-%s%s.msi" % (full_current_version, msilib.arch_ext), + msiname = "python-%s%s.msi" % (full_current_version, msilib.arch_ext) + db = msilib.init_database(msiname, schema, ProductName="Python "+full_current_version+productsuffix, ProductCode=product_code, ProductVersion=current_version, @@ -241,7 +245,7 @@ ("ProductLine", "Python%s%s" % (major, minor)), ]) db.Commit() - return db + return db, msiname def remove_old_versions(db): "Fill the upgrade table." @@ -1293,7 +1297,7 @@ ]) db.Commit() -db = build_database() +db,msiname = build_database() try: add_features(db) add_ui(db) @@ -1303,3 +1307,75 @@ db.Commit() finally: del db + +# Merge CRT into MSI file. This requires the database to be closed. +mod_dir = os.path.join(os.environ["ProgramFiles"], "Common Files", "Merge Modules") +if msilib.Win64: + modules = ["Microsoft_VC90_CRT_x86_x64.msm", "policy_9_0_Microsoft_VC90_CRT_x86_x64.msm"] +else: + modules = ["Microsoft_VC90_CRT_x86.msm","policy_9_0_Microsoft_VC90_CRT_x86.msm"] + +for i, n in enumerate(modules): + modules[i] = os.path.join(mod_dir, n) + +def merge(msi, feature, rootdir, modules): + cab_and_filecount = [] + # Step 1: Merge databases, extract cabfiles + m = msilib.MakeMerge2() + m.OpenLog("merge.log") + m.OpenDatabase(msi) + for module in modules: + print module + m.OpenModule(module,0) + m.Merge(feature, rootdir) + print "Errors:" + for e in m.Errors: + print e.Type, e.ModuleTable, e.DatabaseTable + print " Modkeys:", + for s in e.ModuleKeys: print s, + print + print " DBKeys:", + for s in e.DatabaseKeys: print s, + print + cabname = tempfile.mktemp(suffix=".cab") + m.ExtractCAB(cabname) + cab_and_filecount.append((cabname, len(m.ModuleFiles))) + m.CloseModule() + m.CloseDatabase(True) + m.CloseLog() + + # Step 2: Add CAB files + i = msilib.MakeInstaller() + db = i.OpenDatabase(msi, constants.msiOpenDatabaseModeTransact) + + v = db.OpenView("SELECT LastSequence FROM Media") + v.Execute(None) + maxmedia = -1 + while 1: + r = v.Fetch() + if not r: break + seq = r.IntegerData(1) + if seq > maxmedia: + maxmedia = seq + print "Start of Media", maxmedia + + for cabname, count in cab_and_filecount: + stream = "merged%d" % maxmedia + msilib.add_data(db, "Media", + [(maxmedia+1, maxmedia+count, None, "#"+stream, None, None)]) + msilib.add_stream(db, stream, cabname) + os.unlink(cabname) + maxmedia += count + # The merge module sets ALLUSERS to 1 in the property table. + # This is undesired; delete that + v = db.OpenView("DELETE FROM Property WHERE Property='ALLUSERS'") + v.Execute(None) + v.Close() + db.Commit() + +merge(msiname, "SharedCRT", "TARGETDIR", modules) + +# certname (from config.py) should be (a substring of) +# the certificate subject, e.g. "Python Software Foundation" +if certname: + os.system('signtool sign /n "%s" /t http://timestamp.verisign.com/scripts/timestamp.dll %s' % (certname, msiname)) From python-checkins at python.org Tue Mar 16 19:53:33 2010 From: python-checkins at python.org (martin.v.loewis) Date: Tue, 16 Mar 2010 19:53:33 +0100 (CET) Subject: [Python-checkins] r78997 - in python/branches/py3k: Tools/msi/merge.py Tools/msi/msi.py Message-ID: <20100316185333.5CE38F809@mail.python.org> Author: martin.v.loewis Date: Tue Mar 16 19:53:33 2010 New Revision: 78997 Log: Merged revisions 78996 via svnmerge from svn+ssh://pythondev at svn.python.org/python/trunk ........ r78996 | martin.v.loewis | 2010-03-16 19:49:28 +0100 (Di, 16 M?r 2010) | 1 line Integrate merge.py into msi.py. ........ Removed: python/branches/py3k/Tools/msi/merge.py Modified: python/branches/py3k/ (props changed) python/branches/py3k/Tools/msi/msi.py Deleted: python/branches/py3k/Tools/msi/merge.py ============================================================================== --- python/branches/py3k/Tools/msi/merge.py Tue Mar 16 19:53:33 2010 +++ (empty file) @@ -1,84 +0,0 @@ -import msilib,os,win32com,tempfile,sys -PCBUILD="PCBuild" -certname = None -from config import * - -Win64 = "amd64" in PCBUILD - -mod_dir = os.path.join(os.environ["ProgramFiles"], "Common Files", "Merge Modules") -msi = None -if len(sys.argv)==2: - msi = sys.argv[1] -if Win64: - modules = ["Microsoft_VC90_CRT_x86_x64.msm", "policy_9_0_Microsoft_VC90_CRT_x86_x64.msm"] - if not msi: msi = "python-%s.amd64.msi" % full_current_version -else: - modules = ["Microsoft_VC90_CRT_x86.msm","policy_9_0_Microsoft_VC90_CRT_x86.msm"] - if not msi: msi = "python-%s.msi" % full_current_version -for i, n in enumerate(modules): - modules[i] = os.path.join(mod_dir, n) - -def merge(msi, feature, rootdir, modules): - cab_and_filecount = [] - # Step 1: Merge databases, extract cabfiles - m = msilib.MakeMerge2() - m.OpenLog("merge.log") - print "Opened Log" - m.OpenDatabase(msi) - print "Opened DB" - for module in modules: - print module - m.OpenModule(module,0) - print "Opened Module",module - m.Merge(feature, rootdir) - print "Errors:" - for e in m.Errors: - print e.Type, e.ModuleTable, e.DatabaseTable - print " Modkeys:", - for s in e.ModuleKeys: print s, - print - print " DBKeys:", - for s in e.DatabaseKeys: print s, - print - cabname = tempfile.mktemp(suffix=".cab") - m.ExtractCAB(cabname) - cab_and_filecount.append((cabname, len(m.ModuleFiles))) - m.CloseModule() - m.CloseDatabase(True) - m.CloseLog() - - # Step 2: Add CAB files - i = msilib.MakeInstaller() - db = i.OpenDatabase(msi, win32com.client.constants.msiOpenDatabaseModeTransact) - - v = db.OpenView("SELECT LastSequence FROM Media") - v.Execute(None) - maxmedia = -1 - while 1: - r = v.Fetch() - if not r: break - seq = r.IntegerData(1) - if seq > maxmedia: - maxmedia = seq - print "Start of Media", maxmedia - - for cabname, count in cab_and_filecount: - stream = "merged%d" % maxmedia - msilib.add_data(db, "Media", - [(maxmedia+1, maxmedia+count, None, "#"+stream, None, None)]) - msilib.add_stream(db, stream, cabname) - os.unlink(cabname) - maxmedia += count - # The merge module sets ALLUSERS to 1 in the property table. - # This is undesired; delete that - v = db.OpenView("DELETE FROM Property WHERE Property='ALLUSERS'") - v.Execute(None) - v.Close() - db.Commit() - -merge(msi, "SharedCRT", "TARGETDIR", modules) - -# certname (from config.py) should be (a substring of) -# the certificate subject, e.g. "Python Software Foundation" -if certname: - os.system('signtool sign /n "%s" /t http://timestamp.verisign.com/scripts/timestamp.dll %s' % (certname, msi)) Modified: python/branches/py3k/Tools/msi/msi.py ============================================================================== --- python/branches/py3k/Tools/msi/msi.py (original) +++ python/branches/py3k/Tools/msi/msi.py Tue Mar 16 19:53:33 2010 @@ -7,6 +7,7 @@ from win32com.client import constants from distutils.spawn import find_executable from uuids import product_codes +import tempfile # Settings can be overridden in config.py below # 0 for official python.org releases @@ -28,6 +29,8 @@ PCBUILD="PCbuild" # msvcrt version MSVCR = "90" +# Name of certificate in default store to sign MSI with +certname = None try: from config import * @@ -220,7 +223,8 @@ # schema represents the installer 2.0 database schema. # sequence is the set of standard sequences # (ui/execute, admin/advt/install) - db = msilib.init_database("python-%s%s.msi" % (full_current_version, msilib.arch_ext), + msiname = "python-%s%s.msi" % (full_current_version, msilib.arch_ext) + db = msilib.init_database(msiname, schema, ProductName="Python "+full_current_version+productsuffix, ProductCode=product_code, ProductVersion=current_version, @@ -243,7 +247,7 @@ ("ProductLine", "Python%s%s" % (major, minor)), ]) db.Commit() - return db + return db, msiname def remove_old_versions(db): "Fill the upgrade table." @@ -1295,7 +1299,7 @@ ]) db.Commit() -db = build_database() +db,msiname = build_database() try: add_features(db) add_ui(db) @@ -1305,3 +1309,75 @@ db.Commit() finally: del db + +# Merge CRT into MSI file. This requires the database to be closed. +mod_dir = os.path.join(os.environ["ProgramFiles"], "Common Files", "Merge Modules") +if msilib.Win64: + modules = ["Microsoft_VC90_CRT_x86_x64.msm", "policy_9_0_Microsoft_VC90_CRT_x86_x64.msm"] +else: + modules = ["Microsoft_VC90_CRT_x86.msm","policy_9_0_Microsoft_VC90_CRT_x86.msm"] + +for i, n in enumerate(modules): + modules[i] = os.path.join(mod_dir, n) + +def merge(msi, feature, rootdir, modules): + cab_and_filecount = [] + # Step 1: Merge databases, extract cabfiles + m = msilib.MakeMerge2() + m.OpenLog("merge.log") + m.OpenDatabase(msi) + for module in modules: + print module + m.OpenModule(module,0) + m.Merge(feature, rootdir) + print "Errors:" + for e in m.Errors: + print e.Type, e.ModuleTable, e.DatabaseTable + print " Modkeys:", + for s in e.ModuleKeys: print s, + print + print " DBKeys:", + for s in e.DatabaseKeys: print s, + print + cabname = tempfile.mktemp(suffix=".cab") + m.ExtractCAB(cabname) + cab_and_filecount.append((cabname, len(m.ModuleFiles))) + m.CloseModule() + m.CloseDatabase(True) + m.CloseLog() + + # Step 2: Add CAB files + i = msilib.MakeInstaller() + db = i.OpenDatabase(msi, constants.msiOpenDatabaseModeTransact) + + v = db.OpenView("SELECT LastSequence FROM Media") + v.Execute(None) + maxmedia = -1 + while 1: + r = v.Fetch() + if not r: break + seq = r.IntegerData(1) + if seq > maxmedia: + maxmedia = seq + print "Start of Media", maxmedia + + for cabname, count in cab_and_filecount: + stream = "merged%d" % maxmedia + msilib.add_data(db, "Media", + [(maxmedia+1, maxmedia+count, None, "#"+stream, None, None)]) + msilib.add_stream(db, stream, cabname) + os.unlink(cabname) + maxmedia += count + # The merge module sets ALLUSERS to 1 in the property table. + # This is undesired; delete that + v = db.OpenView("DELETE FROM Property WHERE Property='ALLUSERS'") + v.Execute(None) + v.Close() + db.Commit() + +merge(msiname, "SharedCRT", "TARGETDIR", modules) + +# certname (from config.py) should be (a substring of) +# the certificate subject, e.g. "Python Software Foundation" +if certname: + os.system('signtool sign /n "%s" /t http://timestamp.verisign.com/scripts/timestamp.dll %s' % (certname, msiname)) From python-checkins at python.org Tue Mar 16 21:40:35 2010 From: python-checkins at python.org (collin.winter) Date: Tue, 16 Mar 2010 21:40:35 +0100 (CET) Subject: [Python-checkins] r78998 - in python/branches/py3k-jit: Demo/cgi/cgi1.py Demo/cgi/cgi2.py Demo/cgi/cgi3.py Demo/comparisons/regextest.py Demo/comparisons/sortingtest.py Demo/comparisons/systemtest.py Demo/curses/life.py Demo/curses/ncurses.py Demo/curses/rain.py Demo/curses/repeat.py Demo/curses/tclock.py Demo/distutils/test2to3/maintest.py Demo/parser/test_parser.py Demo/pdist/RCSProxy.py Demo/pdist/makechangelog.py Demo/pdist/rcvs.py Demo/pdist/rrcs.py Demo/pysvr/pysvr.py Demo/scripts/beer.py Demo/scripts/eqfix.py Demo/scripts/fact.py Demo/scripts/find-uname.py Demo/scripts/from.py Demo/scripts/lpwatch.py Demo/scripts/makedir.py Demo/scripts/markov.py Demo/scripts/mboxconvert.py Demo/scripts/morse.py Demo/scripts/newslist.py Demo/scripts/pi.py Demo/scripts/pp.py Demo/scripts/primes.py Demo/scripts/queens.py Demo/scripts/script.py Demo/scripts/unbirthday.py Demo/scripts/update.py Demo/sockets/echosvr.py Demo/sockets/finger.py Demo/sockets/gopher.py Demo/sockets/mcast.py Demo/sockets/rpython.py Demo/sockets/rpythond.py Demo/sockets/telnet.py Demo/sockets/throughput.py Demo/sockets/udpecho.py Demo/tkinter/guido/MimeViewer.py Demo/tkinter/guido/canvasevents.py Demo/tkinter/guido/dialog.py Demo/tkinter/guido/electrons.py Demo/tkinter/guido/kill.py Demo/tkinter/guido/mbox.py Demo/tkinter/guido/newmenubardemo.py Demo/tkinter/guido/rmt.py Demo/tkinter/guido/solitaire.py Demo/tkinter/guido/sortvisu.py Demo/tkinter/guido/svkill.py Demo/tkinter/guido/tkman.py Demo/turtle/tdemo_I_dontlike_tiltdemo.py Demo/turtle/tdemo_bytedesign.py Demo/turtle/tdemo_clock.py Demo/turtle/tdemo_forest.py Demo/turtle/tdemo_fractalcurves.py Demo/turtle/tdemo_lindenmayer_indian.py Demo/turtle/tdemo_minimal_hanoi.py Demo/turtle/tdemo_paint.py Demo/turtle/tdemo_peace.py Demo/turtle/tdemo_penrose.py Demo/turtle/tdemo_planet_and_moon.py Demo/turtle/tdemo_tree.py Demo/turtle/tdemo_yinyang.py Demo/turtle/turtleDemo.py Demo/turtle/turtledemo_two_canvases.py Demo/zlib/minigzip.py Demo/zlib/zlibdemo.py Doc Doc/Makefile Doc/README.txt Doc/bugs.rst Doc/c-api/exceptions.rst Doc/c-api/gcsupport.rst Doc/c-api/typeobj.rst Doc/c-api/unicode.rst Doc/distutils/examples.rst Doc/distutils/uploading.rst Doc/includes/email-alternative.py Doc/includes/email-dir.py Doc/includes/email-unpack.py Doc/library/argparse.rst Doc/library/bz2.rst Doc/library/codecs.rst Doc/library/http.client.rst Doc/library/logging.rst Doc/library/pydoc.rst Doc/library/site.rst Doc/library/stdtypes.rst Doc/library/subprocess.rst Doc/library/sys.rst Doc/library/test.rst Doc/library/tkinter.rst Doc/library/tkinter.tix.rst Doc/library/tkinter.ttk.rst Doc/library/traceback.rst Doc/library/turtle.rst Doc/library/unittest.rst Doc/library/xml.etree.elementtree.rst Doc/library/xml.etree.rst Doc/make.bat Doc/reference/executionmodel.rst Doc/reference/expressions.rst Doc/reference/lexical_analysis.rst Doc/tools/rstlint.py Doc/tools/sphinxext/download.html Doc/using/mac.rst Doc/whatsnew/2.2.rst Doc/whatsnew/2.6.rst Doc/whatsnew/2.7.rst Include/abstract.h Include/longobject.h Include/pythonrun.h Lib/_pyio.py Lib/base64.py Lib/cProfile.py Lib/compileall.py Lib/ctypes/util.py Lib/difflib.py Lib/distutils/tests/test_bdist.py Lib/distutils/tests/test_bdist_dumb.py Lib/distutils/tests/test_bdist_msi.py Lib/distutils/tests/test_bdist_rpm.py Lib/distutils/tests/test_bdist_wininst.py Lib/distutils/tests/test_cmd.py Lib/distutils/tests/test_cygwinccompiler.py Lib/distutils/tests/test_emxccompiler.py Lib/distutils/tests/test_sysconfig.py Lib/email/test/test_email_torture.py Lib/genericpath.py Lib/http/cookies.py Lib/idlelib/PyShell.py Lib/keyword.py Lib/lib2to3/pgen2/token.py Lib/lib2to3/tests/pytree_idempotency.py Lib/logging/__init__.py Lib/logging/config.py Lib/logging/handlers.py Lib/mailbox.py Lib/mimetypes.py Lib/pdb.py Lib/platform.py Lib/posixpath.py Lib/profile.py Lib/pydoc.py Lib/quopri.py Lib/site.py Lib/smtpd.py Lib/smtplib.py Lib/sqlite3/test/regression.py Lib/subprocess.py Lib/symbol.py Lib/sysconfig.py Lib/tabnanny.py Lib/tarfile.py Lib/test/crashers/recursive_call.py Lib/test/curses_tests.py Lib/test/pystone.py Lib/test/re_tests.py Lib/test/regrtest.py Lib/test/support.py Lib/test/test.xml Lib/test/test.xml.out Lib/test/test___future__.py Lib/test/test__locale.py Lib/test/test_abstract_numbers.py Lib/test/test_array.py Lib/test/test_binhex.py Lib/test/test_builtin.py Lib/test/test_bz2.py Lib/test/test_cmath.py Lib/test/test_cmd.py Lib/test/test_cmd_line.py Lib/test/test_cmd_line_script.py Lib/test/test_codecencodings_cn.py Lib/test/test_codecencodings_hk.py Lib/test/test_codecencodings_jp.py Lib/test/test_codecencodings_kr.py Lib/test/test_codecencodings_tw.py Lib/test/test_codecmaps_cn.py Lib/test/test_codecmaps_hk.py Lib/test/test_codecmaps_jp.py Lib/test/test_codecmaps_kr.py Lib/test/test_codecmaps_tw.py Lib/test/test_collections.py Lib/test/test_compileall.py Lib/test/test_complex.py Lib/test/test_contextlib.py Lib/test/test_csv.py Lib/test/test_dbm.py Lib/test/test_dbm_dumb.py Lib/test/test_decimal.py Lib/test/test_deque.py Lib/test/test_descr.py Lib/test/test_docxmlrpc.py Lib/test/test_eof.py Lib/test/test_epoll.py Lib/test/test_errno.py Lib/test/test_file.py Lib/test/test_filecmp.py Lib/test/test_fileio.py Lib/test/test_float.py Lib/test/test_fnmatch.py Lib/test/test_fork1.py Lib/test/test_frozen.py Lib/test/test_functools.py Lib/test/test_getopt.py Lib/test/test_gzip.py Lib/test/test_hashlib.py Lib/test/test_heapq.py Lib/test/test_imaplib.py Lib/test/test_imp.py Lib/test/test_inspect.py Lib/test/test_io.py Lib/test/test_keywordonlyarg.py Lib/test/test_logging.py Lib/test/test_long.py Lib/test/test_marshal.py Lib/test/test_memoryio.py Lib/test/test_minidom.py Lib/test/test_multibytecodec.py Lib/test/test_multibytecodec_support.py Lib/test/test_multiprocessing.py Lib/test/test_ntpath.py Lib/test/test_optparse.py Lib/test/test_os.py Lib/test/test_parser.py Lib/test/test_pdb.py Lib/test/test_pep292.py Lib/test/test_platform.py Lib/test/test_popen.py Lib/test/test_posixpath.py Lib/test/test_print.py Lib/test/test_profile.py Lib/test/test_pyexpat.py Lib/test/test_queue.py Lib/test/test_random.py Lib/test/test_re.py Lib/test/test_richcmp.py Lib/test/test_sax.py Lib/test/test_set.py Lib/test/test_smtpnet.py Lib/test/test_socket.py Lib/test/test_socketserver.py Lib/test/test_sqlite.py Lib/test/test_ssl.py Lib/test/test_strftime.py Lib/test/test_structmembers.py Lib/test/test_subprocess.py Lib/test/test_sys.py Lib/test/test_sysconfig.py Lib/test/test_tarfile.py Lib/test/test_tcl.py Lib/test/test_tempfile.py Lib/test/test_threaded_import.py Lib/test/test_ttk_guionly.py Lib/test/test_ttk_textonly.py Lib/test/test_types.py Lib/test/test_unittest.py Lib/test/test_urllib2_localnet.py Lib/test/test_urllib2net.py Lib/test/test_urllibnet.py Lib/test/test_urlparse.py Lib/test/test_userstring.py Lib/test/test_with.py Lib/test/test_xml_etree.py Lib/test/test_xml_etree_c.py Lib/test/test_xmlrpc_net.py Lib/test/test_zipimport.py Lib/test/test_zipimport_support.py Lib/test/xmltestdata Lib/timeit.py Lib/tkinter/messagebox.py Lib/token.py Lib/trace.py Lib/unittest/__init__.py Lib/unittest/case.py Lib/unittest/result.py Lib/unittest/runner.py Lib/unittest/suite.py Lib/unittest/util.py Lib/uu.py Lib/webbrowser.py Lib/xml/etree/ElementInclude.py Lib/xml/etree/ElementPath.py Lib/xml/etree/ElementTree.py Lib/xml/etree/__init__.py Makefile.pre.in Misc/HISTORY Misc/NEWS Misc/SpecialBuilds.txt Misc/build.sh Modules/_ctypes/libffi.diff Modules/_ctypes/libffi/ChangeLog Modules/_ctypes/libffi/ChangeLog.libffi Modules/_ctypes/libffi/ChangeLog.libgcj Modules/_ctypes/libffi/ChangeLog.v1 Modules/_ctypes/libffi/LICENSE Modules/_ctypes/libffi/Makefile.am Modules/_ctypes/libffi/Makefile.in Modules/_ctypes/libffi/README Modules/_ctypes/libffi/aclocal.m4 Modules/_ctypes/libffi/compile Modules/_ctypes/libffi/config.guess Modules/_ctypes/libffi/config.sub Modules/_ctypes/libffi/configure Modules/_ctypes/libffi/configure.ac Modules/_ctypes/libffi/depcomp Modules/_ctypes/libffi/doc Modules/_ctypes/libffi/fficonfig.h.in Modules/_ctypes/libffi/include/Makefile.am Modules/_ctypes/libffi/include/Makefile.in Modules/_ctypes/libffi/include/ffi.h.in Modules/_ctypes/libffi/include/ffi_common.h Modules/_ctypes/libffi/libffi.pc.in Modules/_ctypes/libffi/libtool-version Modules/_ctypes/libffi/ltmain.sh Modules/_ctypes/libffi/m4 Modules/_ctypes/libffi/man Modules/_ctypes/libffi/mdate-sh Modules/_ctypes/libffi/missing Modules/_ctypes/libffi/src/arm/sysv.S Modules/_ctypes/libffi/src/avr32 Modules/_ctypes/libffi/src/closures.c Modules/_ctypes/libffi/src/darwin/ffitarget.h Modules/_ctypes/libffi/src/debug.c Modules/_ctypes/libffi/src/dlmalloc.c Modules/_ctypes/libffi/src/frv/ffi.c Modules/_ctypes/libffi/src/java_raw_api.c Modules/_ctypes/libffi/src/mips/ffi.c Modules/_ctypes/libffi/src/mips/ffitarget.h Modules/_ctypes/libffi/src/mips/n32.S Modules/_ctypes/libffi/src/mips/o32.S Modules/_ctypes/libffi/src/pa/ffi.c Modules/_ctypes/libffi/src/powerpc/aix.S Modules/_ctypes/libffi/src/powerpc/aix_closure.S Modules/_ctypes/libffi/src/powerpc/ffi.c Modules/_ctypes/libffi/src/powerpc/ffi_darwin.c Modules/_ctypes/libffi/src/powerpc/ffitarget.h Modules/_ctypes/libffi/src/powerpc/sysv.S Modules/_ctypes/libffi/src/raw_api.c Modules/_ctypes/libffi/src/s390/sysv.S Modules/_ctypes/libffi/src/sh/ffi.c Modules/_ctypes/libffi/src/sh/sysv.S Modules/_ctypes/libffi/src/sh64/ffi.c Modules/_ctypes/libffi/src/sh64/sysv.S Modules/_ctypes/libffi/src/sparc/ffi.c Modules/_ctypes/libffi/src/sparc/v8.S Modules/_ctypes/libffi/src/types.c Modules/_ctypes/libffi/src/x86/darwin.S Modules/_ctypes/libffi/src/x86/ffi.c Modules/_ctypes/libffi/src/x86/ffi64.c Modules/_ctypes/libffi/src/x86/ffitarget.h Modules/_ctypes/libffi/src/x86/sysv.S Modules/_ctypes/libffi/src/x86/unix64.S Modules/_ctypes/libffi/src/x86/win32.S Modules/_ctypes/libffi/src/x86/win64.S Modules/_ctypes/libffi/testsuite Modules/_ctypes/libffi/texinfo.tex Modules/_cursesmodule.c Modules/_elementtree.c Modules/_hashopenssl.c Modules/_posixsubprocess.c Modules/_sqlite/connection.c Modules/_testcapimodule.c Modules/getpath.c Modules/main.c Modules/posixmodule.c Modules/selectmodule.c Modules/zipimport.c Objects/abstract.c Objects/complexobject.c Objects/funcobject.c Objects/longobject.c Objects/object.c Objects/setobject.c Objects/typeobject.c Parser/tokenizer.c Python/ceval.c Python/import.c Python/pythonrun.c Python/structmember.c Tools/ccbench/ccbench.py Tools/faqwiz/faqw.py Tools/freeze/freeze.py Tools/i18n/makelocalealias.py Tools/i18n/msgfmt.py Tools/i18n/pygettext.py Tools/modulator/Tkextra.py Tools/modulator/modulator.py Tools/msi/merge.py Tools/msi/msi.py Tools/msi/uuids.py Tools/scripts/byteyears.py Tools/scripts/checkappend.py Tools/scripts/checkpyc.py Tools/scripts/classfix.py Tools/scripts/cleanfuture.py Tools/scripts/combinerefs.py Tools/scripts/copytime.py Tools/scripts/crlf.py Tools/scripts/cvsfiles.py Tools/scripts/db2pickle.py Tools/scripts/dutree.py Tools/scripts/eptags.py Tools/scripts/find_recursionlimit.py Tools/scripts/finddiv.py Tools/scripts/findlinksto.py Tools/scripts/findnocoding.py Tools/scripts/fixcid.py Tools/scripts/fixdiv.py Tools/scripts/fixheader.py Tools/scripts/fixnotice.py Tools/scripts/fixps.py Tools/scripts/ftpmirror.py Tools/scripts/google.py Tools/scripts/gprof2html.py Tools/scripts/h2py.py Tools/scripts/ifdef.py Tools/scripts/lfcr.py Tools/scripts/linktree.py Tools/scripts/lll.py Tools/scripts/logmerge.py Tools/scripts/md5sum.py Tools/scripts/methfix.py Tools/scripts/mkreal.py Tools/scripts/ndiff.py Tools/scripts/nm2def.py Tools/scripts/objgraph.py Tools/scripts/parseentities.py Tools/scripts/pdeps.py Tools/scripts/pickle2db.py Tools/scripts/pindent.py Tools/scripts/ptags.py Tools/scripts/pysource.py Tools/scripts/reindent-rst.py Tools/scripts/reindent.py Tools/scripts/rgrep.py Tools/scripts/serve.py Tools/scripts/suff.py Tools/scripts/svneol.py Tools/scripts/texi2html.py Tools/scripts/treesync.py Tools/scripts/untabify.py Tools/scripts/which.py Tools/scripts/xxci.py Tools/ssl/get-remote-certificate.py Tools/unicode/comparecodecs.py Tools/webchecker/wcgui.py Tools/webchecker/webchecker.py Tools/webchecker/websucker.py Tools/webchecker/wsgui.py configure configure.in setup.py Message-ID: <20100316204035.4A813F670@mail.python.org> Author: collin.winter Date: Tue Mar 16 21:40:29 2010 New Revision: 78998 Log: Merged revisions 78829,78831,78834,78843,78845,78848-78852,78861-78863,78868-78869,78871-78873,78875-78876,78882,78884,78888,78891,78893-78894,78896,78899,78901-78902,78911,78915,78918,78920,78924,78927,78929-78930,78933,78938,78940-78943,78945-78948,78950,78955-78961,78963,78965,78967,78973,78975,78977-78978,78980,78987,78989,78991-78994,78997 via svnmerge from svn+ssh://pythondev at svn.python.org/python/branches/py3k ................ r78829 | florent.xicluna | 2010-03-10 16:05:17 -0800 (Wed, 10 Mar 2010) | 9 lines Merged revisions 78828 via svnmerge from svn+ssh://pythondev at svn.python.org/python/trunk ........ r78828 | florent.xicluna | 2010-03-11 00:58:42 +0100 (jeu, 11 mar 2010) | 2 lines Issue #7880: Fix sysconfig when the python executable is a symbolic link. ........ ................ r78831 | florent.xicluna | 2010-03-10 17:00:26 -0800 (Wed, 10 Mar 2010) | 10 lines Merged revisions 78830 via svnmerge from svn+ssh://pythondev at svn.python.org/python/trunk ........ r78830 | florent.xicluna | 2010-03-11 01:56:59 +0100 (jeu, 11 mar 2010) | 3 lines Fix the test_subprocess failure when sys.executable is meaningless: '' or a directory. It does not fix #7774. ........ ................ r78834 | florent.xicluna | 2010-03-10 17:53:10 -0800 (Wed, 10 Mar 2010) | 9 lines Merged revisions 78833 via svnmerge from svn+ssh://pythondev at svn.python.org/python/trunk ........ r78833 | florent.xicluna | 2010-03-11 02:50:48 +0100 (jeu, 11 mar 2010) | 2 lines Revert r78830: realpath() should really be applied to sys.executable. ........ ................ r78843 | benjamin.peterson | 2010-03-11 13:55:56 -0800 (Thu, 11 Mar 2010) | 13 lines Merged revisions 78841-78842 via svnmerge from svn+ssh://pythondev at svn.python.org/python/trunk ........ r78841 | benjamin.peterson | 2010-03-11 15:50:45 -0600 (Thu, 11 Mar 2010) | 1 line remove executable property from doc files ........ r78842 | benjamin.peterson | 2010-03-11 15:53:25 -0600 (Thu, 11 Mar 2010) | 1 line use proper shebang lines ........ ................ r78845 | benjamin.peterson | 2010-03-11 14:05:58 -0800 (Thu, 11 Mar 2010) | 9 lines Merged revisions 78844 via svnmerge from svn+ssh://pythondev at svn.python.org/python/trunk ........ r78844 | benjamin.peterson | 2010-03-11 16:03:45 -0600 (Thu, 11 Mar 2010) | 1 line revert r78842 cgi.py change ........ ................ r78848 | benjamin.peterson | 2010-03-11 14:36:36 -0800 (Thu, 11 Mar 2010) | 8 lines Blocked revisions 78846 via svnmerge ........ r78846 | benjamin.peterson | 2010-03-11 16:33:25 -0600 (Thu, 11 Mar 2010) | 1 line normalize shebang lines to #!/usr/bin/env python ........ ................ r78849 | benjamin.peterson | 2010-03-11 14:40:40 -0800 (Thu, 11 Mar 2010) | 9 lines Merged revisions 78847 via svnmerge from svn+ssh://pythondev at svn.python.org/python/trunk ........ r78847 | benjamin.peterson | 2010-03-11 16:34:12 -0600 (Thu, 11 Mar 2010) | 1 line remove shebang line from non-executable test ........ ................ r78850 | benjamin.peterson | 2010-03-11 14:53:45 -0800 (Thu, 11 Mar 2010) | 1 line convert shebang lines: python -> python3 ................ r78851 | benjamin.peterson | 2010-03-11 15:39:40 -0800 (Thu, 11 Mar 2010) | 1 line fix bootstrapping on machines with only 2.x installed ................ r78852 | benjamin.peterson | 2010-03-11 15:59:55 -0800 (Thu, 11 Mar 2010) | 1 line take into account shebang line change ................ r78861 | georg.brandl | 2010-03-12 02:04:37 -0800 (Fri, 12 Mar 2010) | 1 line Make tool compatible with 2.x and 3.x. ................ r78862 | georg.brandl | 2010-03-12 02:06:40 -0800 (Fri, 12 Mar 2010) | 13 lines Merged revisions 78859-78860 via svnmerge from svn+ssh://pythondev at svn.python.org/python/trunk ........ r78859 | georg.brandl | 2010-03-12 10:57:43 +0100 (Fr, 12 M??r 2010) | 1 line Get rid of backticks. ........ r78860 | georg.brandl | 2010-03-12 11:02:03 +0100 (Fr, 12 M??r 2010) | 1 line Fix warnings from "make check". ........ ................ r78863 | georg.brandl | 2010-03-12 02:07:31 -0800 (Fri, 12 Mar 2010) | 15 lines Commit merge properties (missing from r78862). Merged revisions 78859-78860 via svnmerge from svn+ssh://pythondev at svn.python.org/python/trunk ........ r78859 | georg.brandl | 2010-03-12 10:57:43 +0100 (Fr, 12 M??r 2010) | 1 line Get rid of backticks. ........ r78860 | georg.brandl | 2010-03-12 11:02:03 +0100 (Fr, 12 M??r 2010) | 1 line Fix warnings from "make check". ........ ................ r78868 | victor.stinner | 2010-03-12 06:20:59 -0800 (Fri, 12 Mar 2010) | 25 lines Merged revisions 78835-78837 via svnmerge from svn+ssh://pythondev at svn.python.org/python/trunk ........ r78835 | victor.stinner | 2010-03-11 13:34:39 +0100 (jeu., 11 mars 2010) | 7 lines Issue #7774: Set sys.executable to an empty string if argv[0] has been set to an non existent program name and Python is unable to retrieve the real program name. Fix also sysconfig: if sys.executable is an empty string, use the current working directory. ........ r78836 | victor.stinner | 2010-03-11 14:27:35 +0100 (jeu., 11 mars 2010) | 4 lines Fix test_executable introduce in previous commit (r78835): Windows is able to retrieve the absolute Python path even if argv[0] has been set to a non existent program name. ........ r78837 | victor.stinner | 2010-03-11 14:46:06 +0100 (jeu., 11 mars 2010) | 3 lines Another fix to test_executable() of test_sys: set the current working to avoid the #7774 bug. ........ ................ r78869 | victor.stinner | 2010-03-12 06:27:16 -0800 (Fri, 12 Mar 2010) | 2 lines Oops, I loose the NEWS change in my previous backport (r78868) of r78835. ................ r78871 | victor.stinner | 2010-03-12 06:31:06 -0800 (Fri, 12 Mar 2010) | 8 lines Blocked revisions 78870 via svnmerge ........ r78870 | victor.stinner | 2010-03-12 15:30:26 +0100 (ven., 12 mars 2010) | 1 line NEWS: issue #7774 is related to Library (sys), not Core and Builtins ........ ................ r78872 | victor.stinner | 2010-03-12 06:45:56 -0800 (Fri, 12 Mar 2010) | 12 lines Merged revisions 78826 via svnmerge from svn+ssh://pythondev at svn.python.org/python/trunk ........ r78826 | victor.stinner | 2010-03-10 23:30:19 +0100 (mer., 10 mars 2010) | 5 lines Issue #3137: Don't ignore errors at startup, especially a keyboard interrupt (SIGINT). If an error occurs while importing the site module, the error is printed and Python exits. Initialize the GIL before importing the site module. ........ ................ r78873 | victor.stinner | 2010-03-12 06:47:28 -0800 (Fri, 12 Mar 2010) | 10 lines Blocked revisions 78827 via svnmerge ........ r78827 | victor.stinner | 2010-03-10 23:45:04 +0100 (mer., 10 mars 2010) | 4 lines ooops, fix error message in execusercustomize() Copy/paste failure :-) ........ ................ r78875 | victor.stinner | 2010-03-12 09:00:41 -0800 (Fri, 12 Mar 2010) | 5 lines Issue #6697: use %U format instead of _PyUnicode_AsString(), because _PyUnicode_AsString() was not checked for error (NULL). The unicode string is no more truncated to 200 or 400 *bytes*. ................ r78876 | victor.stinner | 2010-03-12 09:17:58 -0800 (Fri, 12 Mar 2010) | 3 lines Issue #6697: catch _PyUnicode_AsString() errors in getattr() and setattr() builtin functions. ................ r78882 | georg.brandl | 2010-03-12 13:29:28 -0800 (Fri, 12 Mar 2010) | 9 lines Merged revisions 78880 via svnmerge from svn+ssh://pythondev at svn.python.org/python/trunk ........ r78880 | georg.brandl | 2010-03-12 22:27:23 +0100 (Fr, 12 M??r 2010) | 1 line Deactivate automatic upload of the docs to python.org, they will now be built by a job on that machine. ........ ................ r78884 | ezio.melotti | 2010-03-12 14:45:38 -0800 (Fri, 12 Mar 2010) | 1 line #8057: fix strings -> byte strings ................ r78888 | victor.stinner | 2010-03-12 16:19:17 -0800 (Fri, 12 Mar 2010) | 9 lines Merged revisions 78886 via svnmerge from svn+ssh://pythondev at svn.python.org/python/trunk ........ r78886 | victor.stinner | 2010-03-13 01:13:22 +0100 (sam., 13 mars 2010) | 2 lines Issue #7818: set().test_c_api() doesn't expect a set('abc'), modify the set. ........ ................ r78891 | ezio.melotti | 2010-03-12 16:26:04 -0800 (Fri, 12 Mar 2010) | 9 lines Merged revisions 78887 via svnmerge from svn+ssh://pythondev at svn.python.org/python/trunk ........ r78887 | ezio.melotti | 2010-03-13 02:15:36 +0200 (Sat, 13 Mar 2010) | 1 line fix broken links ........ ................ r78893 | ezio.melotti | 2010-03-12 16:39:49 -0800 (Fri, 12 Mar 2010) | 11 lines Fix wrong indentation that was causing a Sphinx warning and a typo. Merged revisions 78112 via svnmerge from svn+ssh://pythondev at svn.python.org/python/trunk ........ r78112 | ezio.melotti | 2010-02-09 00:22:41 +0200 (Tue, 09 Feb 2010) | 1 line Fix typo ........ ................ r78894 | victor.stinner | 2010-03-12 16:57:22 -0800 (Fri, 12 Mar 2010) | 4 lines sqlite3: Fix _PyUnicode_AsStringAndSize() error handler. Destroy begin_statement (not statement) on error. ................ r78896 | ezio.melotti | 2010-03-12 17:28:34 -0800 (Fri, 12 Mar 2010) | 9 lines Merged revisions 78895 via svnmerge from svn+ssh://pythondev at svn.python.org/python/trunk ........ r78895 | ezio.melotti | 2010-03-13 03:21:34 +0200 (Sat, 13 Mar 2010) | 1 line #8011: use exc.tb_lineno instead of traceback.tb_lineno() and pep8ify variable names. ........ ................ r78899 | victor.stinner | 2010-03-12 19:28:34 -0800 (Fri, 12 Mar 2010) | 14 lines Merged revisions 78898 via svnmerge from svn+ssh://pythondev at svn.python.org/python/trunk ........ r78898 | victor.stinner | 2010-03-13 04:27:07 +0100 (sam., 13 mars 2010) | 7 lines sqlite3: Fix a segfault on calling a connection with something else than a string. Initialize all attributes to be able to call the statement destructor on error. Avoid also a duplicate connection in some tests: setUp() does already open a connection (":memory:"). ........ ................ r78901 | ezio.melotti | 2010-03-12 20:42:07 -0800 (Fri, 12 Mar 2010) | 9 lines Merged revisions 78900 via svnmerge from svn+ssh://pythondev at svn.python.org/python/trunk ........ r78900 | ezio.melotti | 2010-03-13 06:39:51 +0200 (Sat, 13 Mar 2010) | 1 line Silence compiler warnings. ........ ................ r78902 | mark.dickinson | 2010-03-13 01:48:39 -0800 (Sat, 13 Mar 2010) | 2 lines Issue #7845: Make 1j.__le__(2j) return NotImplemented rather than raising TypeError. ................ r78911 | georg.brandl | 2010-03-13 02:56:09 -0800 (Sat, 13 Mar 2010) | 9 lines Merged revisions 78910 via svnmerge from svn+ssh://pythondev at svn.python.org/python/trunk ........ r78910 | georg.brandl | 2010-03-13 11:54:12 +0100 (Sa, 13 M??r 2010) | 1 line Bump externals versions for doc build. ........ ................ r78915 | georg.brandl | 2010-03-13 03:02:07 -0800 (Sat, 13 Mar 2010) | 9 lines Merged revisions 78908 via svnmerge from svn+ssh://pythondev at svn.python.org/python/trunk ........ r78908 | georg.brandl | 2010-03-13 11:12:39 +0100 (Sa, 13 M??r 2010) | 1 line Add Makefile targets for automatic doc build. Add script that will be used for daily build. ........ ................ r78918 | mark.dickinson | 2010-03-13 03:34:40 -0800 (Sat, 13 Mar 2010) | 4 lines Issue #8014: Fix PyLong_As methods not to produce an internal error on non-integer input: they now raise TypeError instead. This is needed for attributes declared via PyMemberDefs. ................ r78920 | mark.dickinson | 2010-03-13 05:23:05 -0800 (Sat, 13 Mar 2010) | 3 lines Issue #8014: Fix incorrect error checks in structmember.c, and re-enable previously failing test_structmember.py tests. ................ r78924 | georg.brandl | 2010-03-13 05:42:16 -0800 (Sat, 13 Mar 2010) | 9 lines Merged revisions 78921 via svnmerge from svn+ssh://pythondev at svn.python.org/python/trunk ........ r78921 | georg.brandl | 2010-03-13 14:39:46 +0100 (Sa, 13 M??r 2010) | 1 line Change/fix handling of docs download location: for daily builds, put them right next to the HTML. ........ ................ r78927 | mark.dickinson | 2010-03-13 06:24:41 -0800 (Sat, 13 Mar 2010) | 8 lines Blocked revisions 78926 via svnmerge ........ r78926 | mark.dickinson | 2010-03-13 14:18:34 +0000 (Sat, 13 Mar 2010) | 1 line Fix incorrect error checks in structmember.c (backport of r78920 from py3k). ........ ................ r78929 | florent.xicluna | 2010-03-13 07:26:44 -0800 (Sat, 13 Mar 2010) | 24 lines Only the parts which are relevant for 3.x branch. Merged revisions 78757-78758,78769,78815 via svnmerge from svn+ssh://pythondev at svn.python.org/python/trunk ........ r78757 | florent.xicluna | 2010-03-07 13:14:25 +0100 (dim, 07 mar 2010) | 2 lines Fix some py3k warnings in the standard library. ........ r78758 | florent.xicluna | 2010-03-07 13:18:33 +0100 (dim, 07 mar 2010) | 4 lines Issue #7849: Now the utility ``check_warnings`` verifies if the warnings are effectively raised. A new utility ``check_py3k_warnings`` deals with py3k warnings. ........ r78769 | florent.xicluna | 2010-03-07 20:14:12 +0100 (dim, 07 mar 2010) | 2 lines Refresh the documentation for the test.test_support module. ........ r78815 | florent.xicluna | 2010-03-09 20:57:01 +0100 (mar, 09 mar 2010) | 2 lines #7772: Fix test_py3kwarn. Now the test suite could pass with "-3" flag. ........ ................ r78930 | florent.xicluna | 2010-03-13 07:35:12 -0800 (Sat, 13 Mar 2010) | 9 lines Merged revisions 78832 via svnmerge from svn+ssh://pythondev at svn.python.org/python/trunk ........ r78832 | florent.xicluna | 2010-03-11 02:39:55 +0100 (jeu, 11 mar 2010) | 2 lines It is not optimal to test sys.stderr on a debug build. ........ ................ r78933 | martin.v.loewis | 2010-03-13 09:55:57 -0800 (Sat, 13 Mar 2010) | 9 lines Merged revisions 78932 via svnmerge from svn+ssh://pythondev at svn.python.org/python/trunk ........ r78932 | martin.v.loewis | 2010-03-13 18:53:02 +0100 (Sa, 13 M??r 2010) | 2 lines Add 2.6 uuids. ........ ................ r78938 | benjamin.peterson | 2010-03-13 13:20:06 -0800 (Sat, 13 Mar 2010) | 80 lines Blocked revisions 77942,78053,78061,78113-78114,78150,78215,78247,78385,78467,78563,78652,78726,78751,78812,78814 via svnmerge ........ r77942 | ezio.melotti | 2010-02-02 23:37:26 -0600 (Tue, 02 Feb 2010) | 1 line #7092: Silence more py3k warnings. Patch by Florent Xicluna. ........ r78053 | georg.brandl | 2010-02-06 17:54:43 -0600 (Sat, 06 Feb 2010) | 1 line Fix some name errors in Mac modules. ........ r78061 | ronald.oussoren | 2010-02-07 05:38:28 -0600 (Sun, 07 Feb 2010) | 10 lines A number of APIs in macostools cannot work in 64-bit mode because they use Carbon APIs that aren't available there. This patch disables tests for the affected entrypoints in macostools and mentions this in the documentation. In theory it is possible to replace the implementation by code that does work in 64-bit mode, but that would require further updates to the Carbon wrappers because the modern APIs aren't wrapped properly. ........ r78113 | georg.brandl | 2010-02-08 16:37:20 -0600 (Mon, 08 Feb 2010) | 1 line Fix missing string formatting argument. ........ r78114 | georg.brandl | 2010-02-08 16:37:52 -0600 (Mon, 08 Feb 2010) | 1 line Fix undefined local. ........ r78150 | ronald.oussoren | 2010-02-11 07:19:34 -0600 (Thu, 11 Feb 2010) | 3 lines Fix copy&paste error in the definition of ARCH_RUN_32BIT for a 3-way universal build (all other definition where correct). ........ r78215 | martin.v.loewis | 2010-02-18 06:45:45 -0600 (Thu, 18 Feb 2010) | 1 line Move bsddb47 macros before their use, to make VS 2010 happy. ........ r78247 | ezio.melotti | 2010-02-20 02:09:39 -0600 (Sat, 20 Feb 2010) | 1 line #3426: os.path.abspath now returns unicode when its arg is unicode. ........ r78385 | georg.brandl | 2010-02-23 15:33:17 -0600 (Tue, 23 Feb 2010) | 1 line #8000: fix deprecated directive. What a shame to lose that glorious issue number to such a minor bug :) ........ r78467 | ezio.melotti | 2010-02-26 18:05:42 -0600 (Fri, 26 Feb 2010) | 1 line Show an error when the value passed to --enable-unicode is not ucs2 or ucs4 (lowercase). ........ r78563 | florent.xicluna | 2010-03-01 14:45:01 -0600 (Mon, 01 Mar 2010) | 2 lines #7808: Fix reference leaks in _bsddb and related tests. ........ r78652 | florent.xicluna | 2010-03-04 09:57:20 -0600 (Thu, 04 Mar 2010) | 2 lines Fix transient refleak in test_popen2. ........ r78726 | florent.xicluna | 2010-03-06 08:38:09 -0600 (Sat, 06 Mar 2010) | 2 lines Backport "test.regrtest -R 2:3" syntax from py3k branch, and other minor adjustments. ........ r78751 | senthil.kumaran | 2010-03-06 22:09:30 -0600 (Sat, 06 Mar 2010) | 3 lines Reverting the change made in r78431. ........ r78812 | raymond.hettinger | 2010-03-09 03:58:53 -0600 (Tue, 09 Mar 2010) | 6 lines Have links in OrderedDicts be native Python lists instead of a custom class with __slots__. This simplifies the code a bit, reduces memory consumption, improves speed, and eliminates the need for weak reference proxies. ........ r78814 | raymond.hettinger | 2010-03-09 05:29:10 -0600 (Tue, 09 Mar 2010) | 1 line Improve code clarity a bit. ........ ................ r78940 | antoine.pitrou | 2010-03-13 13:27:21 -0800 (Sat, 13 Mar 2010) | 11 lines Merged revisions 78939 via svnmerge from svn+ssh://pythondev at svn.python.org/python/trunk ........ r78939 | antoine.pitrou | 2010-03-13 22:21:30 +0100 (Sat, 13 Mar 2010) | 5 lines Issue #7993: Add a test of IO packet processing bandwidth to ccbench. It measures the number of UDP packets processed per second depending on the number of background CPU-bound Python threads. ........ ................ r78941 | benjamin.peterson | 2010-03-13 14:30:34 -0800 (Sat, 13 Mar 2010) | 97 lines Merged revisions 77967,77969,77973,77979,77985-77986,78009,78029,78031-78033,78081,78085,78103,78105-78106,78108,78246,78703,78728,78731,78853,78855 via svnmerge from svn+ssh://pythondev at svn.python.org/python/trunk ........ r77967 | vinay.sajip | 2010-02-04 12:48:53 -0600 (Thu, 04 Feb 2010) | 1 line Logging: Implemented PEP 391. ........ r77969 | vinay.sajip | 2010-02-04 14:18:28 -0600 (Thu, 04 Feb 2010) | 1 line Removed spurious print statement. ........ r77973 | vinay.sajip | 2010-02-04 14:23:45 -0600 (Thu, 04 Feb 2010) | 1 line Issue #7851: logging: clarification on logging configuration files. ........ r77979 | vinay.sajip | 2010-02-04 15:40:56 -0600 (Thu, 04 Feb 2010) | 1 line Added unit test for cfg:// resolution. ........ r77985 | vinay.sajip | 2010-02-05 08:52:05 -0600 (Fri, 05 Feb 2010) | 1 line Issue #7857: test_logging: listener test now uses find_unused_port(). ........ r77986 | vinay.sajip | 2010-02-05 09:40:20 -0600 (Fri, 05 Feb 2010) | 1 line Issue #7857: test_logging: listener tests disabled for now. ........ r78009 | vinay.sajip | 2010-02-05 17:43:11 -0600 (Fri, 05 Feb 2010) | 1 line test_logging: minor tweaks to timeouts, listening tests marked as skipped. ........ r78029 | vinay.sajip | 2010-02-06 14:00:43 -0600 (Sat, 06 Feb 2010) | 1 line Issue #7857: Tentatively re-enabling one test to see effect on buildbots. ........ r78031 | vinay.sajip | 2010-02-06 14:28:36 -0600 (Sat, 06 Feb 2010) | 1 line Issue #7857: Gave server thread more time to get ready, and re-enabled a skipped test. ........ r78032 | georg.brandl | 2010-02-06 15:54:40 -0600 (Sat, 06 Feb 2010) | 1 line Remove unused imports from test_logging. ........ r78033 | benjamin.peterson | 2010-02-06 16:08:15 -0600 (Sat, 06 Feb 2010) | 1 line make waiting for the server to start robust ........ r78081 | vinay.sajip | 2010-02-07 06:56:54 -0600 (Sun, 07 Feb 2010) | 1 line Issue #7869: logging: improved format-time diagnostics and removed some 1.5.2 support code. ........ r78085 | vinay.sajip | 2010-02-07 07:06:51 -0600 (Sun, 07 Feb 2010) | 1 line logging: Removed some more 1.5.2 support code. ........ r78103 | vinay.sajip | 2010-02-08 00:50:14 -0600 (Mon, 08 Feb 2010) | 1 line Removed spurious print statement in test. ........ r78105 | vinay.sajip | 2010-02-08 09:32:08 -0600 (Mon, 08 Feb 2010) | 1 line logging: skipped listening tests because they're not working reliably. ........ r78106 | vinay.sajip | 2010-02-08 10:05:50 -0600 (Mon, 08 Feb 2010) | 1 line Issue #7857: Another attempt to keep the buildbots happy. ........ r78108 | vinay.sajip | 2010-02-08 15:18:15 -0600 (Mon, 08 Feb 2010) | 1 line logging: gingerly re-enabling skipped tests after improving thread sync code in configurator. ........ r78246 | vinay.sajip | 2010-02-19 17:53:17 -0600 (Fri, 19 Feb 2010) | 1 line logging: Documented warnings module integration. ........ r78703 | vinay.sajip | 2010-03-05 16:11:24 -0600 (Fri, 05 Mar 2010) | 1 line Factored out time usage determination into a method, to facilitate alternative formatting implementations in the future. ........ r78728 | vinay.sajip | 2010-03-06 09:12:08 -0600 (Sat, 06 Mar 2010) | 1 line Added schema version test in dictConfig. ........ r78731 | vinay.sajip | 2010-03-06 09:56:03 -0600 (Sat, 06 Mar 2010) | 1 line Added checks for tuples in dictConfig. ........ r78853 | vinay.sajip | 2010-03-12 00:01:21 -0600 (Fri, 12 Mar 2010) | 1 line Issue #8117: logging: Improved algorithm for computing initial rollover time. ........ r78855 | vinay.sajip | 2010-03-12 03:16:10 -0600 (Fri, 12 Mar 2010) | 1 line Issue #8117: Updated NEWS entry and added to logging documentation. ........ ................ r78942 | florent.xicluna | 2010-03-13 15:24:31 -0800 (Sat, 13 Mar 2010) | 30 lines Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from svn+ssh://pythondev at svn.python.org/python/trunk ........ r78838 | florent.xicluna | 2010-03-11 15:36:19 +0100 (jeu, 11 mar 2010) | 2 lines Issue #6472: The xml.etree package is updated to ElementTree 1.3. The cElementTree module is updated too. ........ r78839 | florent.xicluna | 2010-03-11 16:55:11 +0100 (jeu, 11 mar 2010) | 2 lines Fix repr of tree Element on windows. ........ r78917 | florent.xicluna | 2010-03-13 12:18:49 +0100 (sam, 13 mar 2010) | 2 lines Move the xml test data to their own directory. ........ r78919 | florent.xicluna | 2010-03-13 13:41:48 +0100 (sam, 13 mar 2010) | 2 lines Do not chdir when running test_xml_etree, and enhance the findfile helper. ........ r78934 | florent.xicluna | 2010-03-13 18:56:19 +0100 (sam, 13 mar 2010) | 2 lines Update some parts of the xml.etree documentation. ........ r78937 | florent.xicluna | 2010-03-13 21:30:15 +0100 (sam, 13 mar 2010) | 3 lines Add the keyword argument "method=None" to the .write() method and the tostring/tostringlist functions. Update the function, class and method signatures, according to the new convention. ........ ................ r78943 | benjamin.peterson | 2010-03-13 16:07:01 -0800 (Sat, 13 Mar 2010) | 9 lines Merged revisions 78055 via svnmerge from svn+ssh://pythondev at svn.python.org/python/trunk ........ r78055 | vinay.sajip | 2010-02-06 19:37:08 -0600 (Sat, 06 Feb 2010) | 1 line Issue #7868: logging: added loggerClass attribute to Manager. ........ ................ r78945 | florent.xicluna | 2010-03-13 17:28:07 -0800 (Sat, 13 Mar 2010) | 9 lines Merged revisions 78944 via svnmerge from svn+ssh://pythondev at svn.python.org/python/trunk ........ r78944 | florent.xicluna | 2010-03-14 02:22:09 +0100 (dim, 14 mar 2010) | 2 lines Minor documentation updates for xml.etree. ........ ................ r78946 | gregory.p.smith | 2010-03-13 22:49:55 -0800 (Sat, 13 Mar 2010) | 14 lines * Replaces the internals of the subprocess module from fork through exec on POSIX systems with a C extension module. This is required in order for the subprocess module to be made thread safe. The pure python implementation is retained so that it can continue to be used if for some reason the _posixsubprocess extension module is not available. The unittest executes tests on both code paths to guarantee compatibility. * Moves PyLong_FromPid and PyLong_AsPid from posixmodule.c into longobject.h. Code reviewed by jeffrey.yasskin at http://codereview.appspot.com/223077/show ................ r78947 | gregory.p.smith | 2010-03-13 22:52:18 -0800 (Sat, 13 Mar 2010) | 2 lines NEWS entry for subprocess module C extension in r78946. ................ r78948 | gregory.p.smith | 2010-03-13 23:13:25 -0800 (Sat, 13 Mar 2010) | 2 lines More notes about r78946, this time describing the restore_signals behavior. ................ r78950 | ezio.melotti | 2010-03-14 01:51:37 -0800 (Sun, 14 Mar 2010) | 1 line #7057: fix several errors. ................ r78955 | georg.brandl | 2010-03-14 03:23:39 -0700 (Sun, 14 Mar 2010) | 97 lines Merged revisions 78018,78035-78040,78042-78043,78046,78048-78052,78054,78059,78075-78080 via svnmerge from svn+ssh://pythondev at svn.python.org/python/trunk ........ r78018 | georg.brandl | 2010-02-06 11:08:21 +0100 (Sa, 06 Feb 2010) | 1 line #7864: make deprecation notices a bit clearer. ........ r78035 | georg.brandl | 2010-02-06 23:44:17 +0100 (Sa, 06 Feb 2010) | 1 line Fix duplicate import. ........ r78036 | georg.brandl | 2010-02-06 23:49:47 +0100 (Sa, 06 Feb 2010) | 1 line Remove unused import. ........ r78037 | georg.brandl | 2010-02-06 23:59:15 +0100 (Sa, 06 Feb 2010) | 1 line No need to assign the results of expressions used only for side effects. ........ r78038 | georg.brandl | 2010-02-07 00:02:29 +0100 (So, 07 Feb 2010) | 1 line Add a missing import. ........ r78039 | georg.brandl | 2010-02-07 00:06:24 +0100 (So, 07 Feb 2010) | 1 line Add missing imports. ........ r78040 | georg.brandl | 2010-02-07 00:08:00 +0100 (So, 07 Feb 2010) | 1 line Fix a few UnboundLocalErrors in test_long. ........ r78042 | georg.brandl | 2010-02-07 00:12:12 +0100 (So, 07 Feb 2010) | 1 line Add missing import. ........ r78043 | georg.brandl | 2010-02-07 00:12:19 +0100 (So, 07 Feb 2010) | 1 line Remove duplicate test method. ........ r78046 | georg.brandl | 2010-02-07 00:18:00 +0100 (So, 07 Feb 2010) | 1 line Fix various missing import/unbound name errors. ........ r78048 | georg.brandl | 2010-02-07 00:23:45 +0100 (So, 07 Feb 2010) | 1 line We heard you like test failures so we put unbound locals in your test so that you can fail while you fail. ........ r78049 | georg.brandl | 2010-02-07 00:33:33 +0100 (So, 07 Feb 2010) | 1 line Fix import/access for some identifiers. _TestSharedCTypes does not seem to be executed? ........ r78050 | georg.brandl | 2010-02-07 00:34:10 +0100 (So, 07 Feb 2010) | 1 line Fix more unbound locals in code paths that do not seem to be used. ........ r78051 | georg.brandl | 2010-02-07 00:53:52 +0100 (So, 07 Feb 2010) | 1 line Add missing import when running these tests standalone. ........ r78052 | georg.brandl | 2010-02-07 00:54:04 +0100 (So, 07 Feb 2010) | 1 line Add missing import when running these tests standalone. ........ r78054 | georg.brandl | 2010-02-07 00:58:25 +0100 (So, 07 Feb 2010) | 1 line Add missing import. ........ r78059 | georg.brandl | 2010-02-07 12:34:15 +0100 (So, 07 Feb 2010) | 1 line Use "regexp" consistently. ........ r78075 | georg.brandl | 2010-02-07 13:16:12 +0100 (So, 07 Feb 2010) | 1 line Fix another duplicated test method. ........ r78076 | georg.brandl | 2010-02-07 13:19:43 +0100 (So, 07 Feb 2010) | 1 line Fix wrong usage of "except X, Y:". ........ r78077 | georg.brandl | 2010-02-07 13:25:50 +0100 (So, 07 Feb 2010) | 1 line Fix two redefined test methods. ........ r78078 | georg.brandl | 2010-02-07 13:27:06 +0100 (So, 07 Feb 2010) | 1 line Fix a redefined test method. ........ r78079 | georg.brandl | 2010-02-07 13:34:26 +0100 (So, 07 Feb 2010) | 1 line Add a minimal test for fnmatchcase(). ........ r78080 | georg.brandl | 2010-02-07 13:55:12 +0100 (So, 07 Feb 2010) | 1 line Remove duplicate test method. ........ ................ r78956 | georg.brandl | 2010-03-14 03:24:29 -0700 (Sun, 14 Mar 2010) | 8 lines Blocked revisions 78949 via svnmerge ........ r78949 | georg.brandl | 2010-03-14 10:50:54 +0100 (So, 14 M??r 2010) | 1 line Format and rewrap 2.7 NEWS consistently. ........ ................ r78957 | georg.brandl | 2010-03-14 03:45:50 -0700 (Sun, 14 Mar 2010) | 9 lines Merged revisions 78093 via svnmerge from svn+ssh://pythondev at svn.python.org/python/trunk ........ r78093 | georg.brandl | 2010-02-07 18:03:15 +0100 (So, 07 Feb 2010) | 1 line Remove unused imports in test modules. ........ ................ r78958 | georg.brandl | 2010-03-14 03:51:01 -0700 (Sun, 14 Mar 2010) | 37 lines Merged revisions 78101,78115,78117,78182,78188,78245,78386,78496 via svnmerge from svn+ssh://pythondev at svn.python.org/python/trunk ........ r78101 | georg.brandl | 2010-02-08 01:04:54 +0100 (Mo, 08 Feb 2010) | 1 line Fix test_fnmatch. ........ r78115 | georg.brandl | 2010-02-08 23:40:51 +0100 (Mo, 08 Feb 2010) | 1 line Fix missing string formatting placeholder. ........ r78117 | georg.brandl | 2010-02-08 23:48:37 +0100 (Mo, 08 Feb 2010) | 1 line Convert test failure from output-producing to self.fail(). ........ r78182 | georg.brandl | 2010-02-14 09:18:23 +0100 (So, 14 Feb 2010) | 1 line #7926: fix stray parens. ........ r78188 | georg.brandl | 2010-02-14 14:38:12 +0100 (So, 14 Feb 2010) | 1 line #7926: fix-up wording. ........ r78245 | georg.brandl | 2010-02-19 20:36:08 +0100 (Fr, 19 Feb 2010) | 1 line #7967: PyXML is no more. ........ r78386 | georg.brandl | 2010-02-23 22:48:57 +0100 (Di, 23 Feb 2010) | 1 line #6544: fix refleak in kqueue, occurring in certain error conditions. ........ r78496 | georg.brandl | 2010-02-27 15:58:08 +0100 (Sa, 27 Feb 2010) | 1 line Link to http://www.python.org/dev/workflow/ from bugs page. ........ ................ r78959 | georg.brandl | 2010-03-14 03:56:14 -0700 (Sun, 14 Mar 2010) | 33 lines Merged revisions 78760,78771-78773,78802,78922,78952 via svnmerge from svn+ssh://pythondev at svn.python.org/python/trunk ........ r78760 | georg.brandl | 2010-03-07 16:23:59 +0100 (So, 07 M??r 2010) | 1 line #5341: more built-in vs builtin fixes. ........ r78771 | georg.brandl | 2010-03-07 21:58:31 +0100 (So, 07 M??r 2010) | 1 line #8085: The function is called PyObject_NewVar, not PyObject_VarNew. ........ r78772 | georg.brandl | 2010-03-07 22:12:28 +0100 (So, 07 M??r 2010) | 1 line #8039: document conditional expressions better, giving them their own section. ........ r78773 | georg.brandl | 2010-03-07 22:32:06 +0100 (So, 07 M??r 2010) | 1 line #8044: document Py_{Enter,Leave}RecursiveCall functions. ........ r78802 | georg.brandl | 2010-03-08 17:28:40 +0100 (Mo, 08 M??r 2010) | 1 line Fix typo. ........ r78922 | georg.brandl | 2010-03-13 14:41:58 +0100 (Sa, 13 M??r 2010) | 1 line Update for new download location. ........ r78952 | georg.brandl | 2010-03-14 10:55:08 +0100 (So, 14 M??r 2010) | 1 line #8137: add iso-8859-16 to the standard encodings table. ........ ................ r78960 | ezio.melotti | 2010-03-14 04:51:00 -0700 (Sun, 14 Mar 2010) | 9 lines Merged revisions 78954 via svnmerge from svn+ssh://pythondev at svn.python.org/python/trunk ........ r78954 | ezio.melotti | 2010-03-14 12:13:49 +0200 (Sun, 14 Mar 2010) | 1 line Add a link about the Public Review Issue #29 ........ ................ r78961 | florent.xicluna | 2010-03-14 05:31:06 -0700 (Sun, 14 Mar 2010) | 2 lines Fix an oversight in r78946 which causes failure in the subprocess module on Windows. ................ r78963 | benjamin.peterson | 2010-03-14 08:04:17 -0700 (Sun, 14 Mar 2010) | 47 lines Merged revisions 78227,78229,78288,78348,78377,78770,78774-78776,78810 via svnmerge from svn+ssh://pythondev at svn.python.org/python/trunk ........ r78227 | michael.foord | 2010-02-18 14:30:09 -0600 (Thu, 18 Feb 2010) | 1 line unittest.TestCase uses safe_repr for producing failure messages. Partial fix for issue 7956 ........ r78229 | michael.foord | 2010-02-18 15:37:07 -0600 (Thu, 18 Feb 2010) | 1 line Fix unittest.TestCase.assertDictContainsSubset so it can't die with unicode issues when constructing failure messages. Issue 7956 ........ r78288 | michael.foord | 2010-02-21 08:48:59 -0600 (Sun, 21 Feb 2010) | 1 line Silence UnicodeWarning in crazy unittest test. ........ r78348 | michael.foord | 2010-02-22 17:28:32 -0600 (Mon, 22 Feb 2010) | 1 line Support for old TestResult object (unittest) with warnings when using unsupported features. ........ r78377 | michael.foord | 2010-02-23 11:00:53 -0600 (Tue, 23 Feb 2010) | 1 line unittest.TestResult can now be used with the TextTestRunner. TextTestRunner compatible with old TestResult objects. ........ r78770 | michael.foord | 2010-03-07 14:22:12 -0600 (Sun, 07 Mar 2010) | 1 line Fix for potentials errors in constructing unittest failure messages. Plus skipped test methods no longer run setUp and tearDown (Issue 8059) ........ r78774 | michael.foord | 2010-03-07 16:04:55 -0600 (Sun, 07 Mar 2010) | 1 line Addition of setUpClass and setUpModule shared fixtures to unittest. ........ r78775 | michael.foord | 2010-03-07 17:10:36 -0600 (Sun, 07 Mar 2010) | 1 line Fix accidental name rebinding in unittest py3k warning filtering. ........ r78776 | michael.foord | 2010-03-07 17:16:20 -0600 (Sun, 07 Mar 2010) | 1 line Remove accidental print statement from last commit. ........ r78810 | raymond.hettinger | 2010-03-09 02:44:18 -0600 (Tue, 09 Mar 2010) | 5 lines Improve the basic example. * Show both the decorator and regular form for assertRaises() * Use assertTrue() instead of assertIn() to teach useful minimal subset of the API ........ ................ r78965 | benjamin.peterson | 2010-03-14 08:18:25 -0700 (Sun, 14 Mar 2010) | 13 lines Merged revisions 78962,78964 via svnmerge from svn+ssh://pythondev at svn.python.org/python/trunk ........ r78962 | benjamin.peterson | 2010-03-14 09:24:31 -0500 (Sun, 14 Mar 2010) | 1 line fix freebsd linking #7705 ........ r78964 | benjamin.peterson | 2010-03-14 10:06:14 -0500 (Sun, 14 Mar 2010) | 1 line fix quotes ........ ................ r78967 | gregory.p.smith | 2010-03-14 11:56:11 -0700 (Sun, 14 Mar 2010) | 2 lines Change PARSE_PID to _Py_PARSE_PID (cleanup for r78946). ................ r78973 | gregory.p.smith | 2010-03-14 23:07:42 -0700 (Sun, 14 Mar 2010) | 4 lines * Fix the refcount leak in _PySequence_BytesToCharpArray from r78946. * Also fixes a potential extra DECREF of an arg in the error case within _posixsubprocess.fork_exec() by not reusing the process_args variable. ................ r78975 | matthias.klose | 2010-03-15 05:49:46 -0700 (Mon, 15 Mar 2010) | 2 lines - Issue #6949: Allow the _dbm extension to be built with db 4.8.x. ................ r78977 | florent.xicluna | 2010-03-15 06:14:39 -0700 (Mon, 15 Mar 2010) | 2 lines Fix \xhh specs, #1889. (an oversight of r60193, r60210). ................ r78978 | matthias.klose | 2010-03-15 06:25:28 -0700 (Mon, 15 Mar 2010) | 18 lines Merged revisions 78968-78969 via svnmerge from svn+ssh://pythondev at svn.python.org/python/trunk ........ r78968 | matthias.klose | 2010-03-15 01:02:36 +0100 (Mon, 15 Mar 2010) | 226 lines - Issue #8142: Update libffi to the 3.0.9 release. ........ r78969 | matthias.klose | 2010-03-15 01:36:18 +0100 (Mon, 15 Mar 2010) | 7 lines Backport from the libffi trunk: 2010-02-15 Matthias Klose * src/arm/sysv.S (__ARM_ARCH__): Define for processor __ARM_ARCH_7EM__. ........ ................ r78980 | matthias.klose | 2010-03-15 06:46:04 -0700 (Mon, 15 Mar 2010) | 10 lines Merged revisions 78979 via svnmerge from svn+ssh://pythondev at svn.python.org/python/trunk ........ r78979 | matthias.klose | 2010-03-15 14:42:23 +0100 (Mo, 15 M??r 2010) | 3 lines - Issue #7356: ctypes.util: Make parsing of ldconfig output independent of the locale. ........ ................ r78987 | matthias.klose | 2010-03-15 17:36:26 -0700 (Mon, 15 Mar 2010) | 13 lines Merged revisions 78983,78985 via svnmerge from svn+ssh://pythondev at svn.python.org/python/trunk ........ r78983 | matthias.klose | 2010-03-15 18:44:12 +0100 (Mo, 15 M??r 2010) | 2 lines - Issue #8140: extend compileall to compile single files. Add -i option. ........ r78985 | matthias.klose | 2010-03-15 19:00:01 +0100 (Mo, 15 M??r 2010) | 2 lines - Fix typo in Lib/compileall.py(__all__). ........ ................ r78989 | matthias.klose | 2010-03-16 03:51:28 -0700 (Tue, 16 Mar 2010) | 10 lines Merged revisions 78988 via svnmerge from svn+ssh://pythondev at svn.python.org/python/trunk ........ r78988 | matthias.klose | 2010-03-16 11:48:52 +0100 (Tue, 16 Mar 2010) | 3 lines - Issue #4961: Inconsistent/wrong result of askyesno function in tkMessageBox with Tcl/Tk-8.5. ........ ................ r78991 | martin.v.loewis | 2010-03-16 04:03:13 -0700 (Tue, 16 Mar 2010) | 9 lines Merged revisions 78976 via svnmerge from svn+ssh://pythondev at svn.python.org/python/trunk ........ r78976 | martin.v.loewis | 2010-03-15 14:00:17 +0100 (Mo, 15 M??r 2010) | 1 line Issue #6716: Quote -x arguments of compileall in MSI installer. ........ ................ r78992 | martin.v.loewis | 2010-03-16 06:19:21 -0700 (Tue, 16 Mar 2010) | 2 lines Issue #6716/2: Backslash-replace error output in compilall. ................ r78993 | martin.v.loewis | 2010-03-16 07:16:09 -0700 (Tue, 16 Mar 2010) | 1 line Add UUID for 3.2 DLL. ................ r78994 | martin.v.loewis | 2010-03-16 09:19:47 -0700 (Tue, 16 Mar 2010) | 1 line Issue #6716/3: Exclude 2to3 tests from compileall. ................ r78997 | martin.v.loewis | 2010-03-16 11:53:33 -0700 (Tue, 16 Mar 2010) | 9 lines Merged revisions 78996 via svnmerge from svn+ssh://pythondev at svn.python.org/python/trunk ........ r78996 | martin.v.loewis | 2010-03-16 19:49:28 +0100 (Di, 16 M??r 2010) | 1 line Integrate merge.py into msi.py. ........ ................ Added: python/branches/py3k-jit/Lib/test/xmltestdata/ - copied from r78997, /python/branches/py3k/Lib/test/xmltestdata/ python/branches/py3k-jit/Modules/_ctypes/libffi/ChangeLog - copied unchanged from r78997, /python/branches/py3k/Modules/_ctypes/libffi/ChangeLog python/branches/py3k-jit/Modules/_ctypes/libffi/ChangeLog.libffi - copied unchanged from r78997, /python/branches/py3k/Modules/_ctypes/libffi/ChangeLog.libffi python/branches/py3k-jit/Modules/_ctypes/libffi/ChangeLog.libgcj - copied unchanged from r78997, /python/branches/py3k/Modules/_ctypes/libffi/ChangeLog.libgcj python/branches/py3k-jit/Modules/_ctypes/libffi/ChangeLog.v1 - copied unchanged from r78997, /python/branches/py3k/Modules/_ctypes/libffi/ChangeLog.v1 python/branches/py3k-jit/Modules/_ctypes/libffi/compile - copied unchanged from r78997, /python/branches/py3k/Modules/_ctypes/libffi/compile python/branches/py3k-jit/Modules/_ctypes/libffi/depcomp - copied unchanged from r78997, /python/branches/py3k/Modules/_ctypes/libffi/depcomp python/branches/py3k-jit/Modules/_ctypes/libffi/doc/ - copied from r78997, /python/branches/py3k/Modules/_ctypes/libffi/doc/ python/branches/py3k-jit/Modules/_ctypes/libffi/libffi.pc.in - copied unchanged from r78997, /python/branches/py3k/Modules/_ctypes/libffi/libffi.pc.in python/branches/py3k-jit/Modules/_ctypes/libffi/libtool-version - copied unchanged from r78997, /python/branches/py3k/Modules/_ctypes/libffi/libtool-version python/branches/py3k-jit/Modules/_ctypes/libffi/ltmain.sh - copied unchanged from r78997, /python/branches/py3k/Modules/_ctypes/libffi/ltmain.sh python/branches/py3k-jit/Modules/_ctypes/libffi/m4/ - copied from r78997, /python/branches/py3k/Modules/_ctypes/libffi/m4/ python/branches/py3k-jit/Modules/_ctypes/libffi/man/ - copied from r78997, /python/branches/py3k/Modules/_ctypes/libffi/man/ python/branches/py3k-jit/Modules/_ctypes/libffi/mdate-sh - copied unchanged from r78997, /python/branches/py3k/Modules/_ctypes/libffi/mdate-sh python/branches/py3k-jit/Modules/_ctypes/libffi/src/avr32/ - copied from r78997, /python/branches/py3k/Modules/_ctypes/libffi/src/avr32/ python/branches/py3k-jit/Modules/_ctypes/libffi/src/closures.c - copied unchanged from r78997, /python/branches/py3k/Modules/_ctypes/libffi/src/closures.c python/branches/py3k-jit/Modules/_ctypes/libffi/src/debug.c - copied unchanged from r78997, /python/branches/py3k/Modules/_ctypes/libffi/src/debug.c python/branches/py3k-jit/Modules/_ctypes/libffi/src/dlmalloc.c - copied unchanged from r78997, /python/branches/py3k/Modules/_ctypes/libffi/src/dlmalloc.c python/branches/py3k-jit/Modules/_ctypes/libffi/src/java_raw_api.c - copied unchanged from r78997, /python/branches/py3k/Modules/_ctypes/libffi/src/java_raw_api.c python/branches/py3k-jit/Modules/_ctypes/libffi/src/raw_api.c - copied unchanged from r78997, /python/branches/py3k/Modules/_ctypes/libffi/src/raw_api.c python/branches/py3k-jit/Modules/_ctypes/libffi/src/types.c - copied unchanged from r78997, /python/branches/py3k/Modules/_ctypes/libffi/src/types.c python/branches/py3k-jit/Modules/_ctypes/libffi/src/x86/win64.S - copied unchanged from r78997, /python/branches/py3k/Modules/_ctypes/libffi/src/x86/win64.S python/branches/py3k-jit/Modules/_ctypes/libffi/testsuite/ - copied from r78997, /python/branches/py3k/Modules/_ctypes/libffi/testsuite/ python/branches/py3k-jit/Modules/_ctypes/libffi/texinfo.tex - copied unchanged from r78997, /python/branches/py3k/Modules/_ctypes/libffi/texinfo.tex python/branches/py3k-jit/Modules/_posixsubprocess.c - copied unchanged from r78997, /python/branches/py3k/Modules/_posixsubprocess.c Removed: python/branches/py3k-jit/Doc/library/xml.etree.rst python/branches/py3k-jit/Lib/test/test.xml python/branches/py3k-jit/Lib/test/test.xml.out python/branches/py3k-jit/Modules/_ctypes/libffi/src/darwin/ffitarget.h python/branches/py3k-jit/Tools/msi/merge.py Modified: python/branches/py3k-jit/ (props changed) python/branches/py3k-jit/Demo/cgi/cgi1.py python/branches/py3k-jit/Demo/cgi/cgi2.py python/branches/py3k-jit/Demo/cgi/cgi3.py python/branches/py3k-jit/Demo/comparisons/regextest.py python/branches/py3k-jit/Demo/comparisons/sortingtest.py python/branches/py3k-jit/Demo/comparisons/systemtest.py python/branches/py3k-jit/Demo/curses/life.py python/branches/py3k-jit/Demo/curses/ncurses.py python/branches/py3k-jit/Demo/curses/rain.py python/branches/py3k-jit/Demo/curses/repeat.py python/branches/py3k-jit/Demo/curses/tclock.py python/branches/py3k-jit/Demo/distutils/test2to3/maintest.py python/branches/py3k-jit/Demo/parser/test_parser.py python/branches/py3k-jit/Demo/pdist/RCSProxy.py python/branches/py3k-jit/Demo/pdist/makechangelog.py python/branches/py3k-jit/Demo/pdist/rcvs.py python/branches/py3k-jit/Demo/pdist/rrcs.py python/branches/py3k-jit/Demo/pysvr/pysvr.py python/branches/py3k-jit/Demo/scripts/beer.py python/branches/py3k-jit/Demo/scripts/eqfix.py python/branches/py3k-jit/Demo/scripts/fact.py python/branches/py3k-jit/Demo/scripts/find-uname.py python/branches/py3k-jit/Demo/scripts/from.py python/branches/py3k-jit/Demo/scripts/lpwatch.py python/branches/py3k-jit/Demo/scripts/makedir.py python/branches/py3k-jit/Demo/scripts/markov.py python/branches/py3k-jit/Demo/scripts/mboxconvert.py python/branches/py3k-jit/Demo/scripts/morse.py python/branches/py3k-jit/Demo/scripts/newslist.py python/branches/py3k-jit/Demo/scripts/pi.py python/branches/py3k-jit/Demo/scripts/pp.py python/branches/py3k-jit/Demo/scripts/primes.py python/branches/py3k-jit/Demo/scripts/queens.py python/branches/py3k-jit/Demo/scripts/script.py python/branches/py3k-jit/Demo/scripts/unbirthday.py python/branches/py3k-jit/Demo/scripts/update.py python/branches/py3k-jit/Demo/sockets/echosvr.py python/branches/py3k-jit/Demo/sockets/finger.py python/branches/py3k-jit/Demo/sockets/gopher.py python/branches/py3k-jit/Demo/sockets/mcast.py python/branches/py3k-jit/Demo/sockets/rpython.py python/branches/py3k-jit/Demo/sockets/rpythond.py python/branches/py3k-jit/Demo/sockets/telnet.py python/branches/py3k-jit/Demo/sockets/throughput.py python/branches/py3k-jit/Demo/sockets/udpecho.py python/branches/py3k-jit/Demo/tkinter/guido/MimeViewer.py python/branches/py3k-jit/Demo/tkinter/guido/canvasevents.py python/branches/py3k-jit/Demo/tkinter/guido/dialog.py python/branches/py3k-jit/Demo/tkinter/guido/electrons.py python/branches/py3k-jit/Demo/tkinter/guido/kill.py python/branches/py3k-jit/Demo/tkinter/guido/mbox.py python/branches/py3k-jit/Demo/tkinter/guido/newmenubardemo.py python/branches/py3k-jit/Demo/tkinter/guido/rmt.py python/branches/py3k-jit/Demo/tkinter/guido/solitaire.py python/branches/py3k-jit/Demo/tkinter/guido/sortvisu.py python/branches/py3k-jit/Demo/tkinter/guido/svkill.py python/branches/py3k-jit/Demo/tkinter/guido/tkman.py python/branches/py3k-jit/Demo/turtle/tdemo_I_dontlike_tiltdemo.py python/branches/py3k-jit/Demo/turtle/tdemo_bytedesign.py python/branches/py3k-jit/Demo/turtle/tdemo_clock.py python/branches/py3k-jit/Demo/turtle/tdemo_forest.py python/branches/py3k-jit/Demo/turtle/tdemo_fractalcurves.py python/branches/py3k-jit/Demo/turtle/tdemo_lindenmayer_indian.py python/branches/py3k-jit/Demo/turtle/tdemo_minimal_hanoi.py python/branches/py3k-jit/Demo/turtle/tdemo_paint.py python/branches/py3k-jit/Demo/turtle/tdemo_peace.py python/branches/py3k-jit/Demo/turtle/tdemo_penrose.py python/branches/py3k-jit/Demo/turtle/tdemo_planet_and_moon.py python/branches/py3k-jit/Demo/turtle/tdemo_tree.py python/branches/py3k-jit/Demo/turtle/tdemo_yinyang.py python/branches/py3k-jit/Demo/turtle/turtleDemo.py python/branches/py3k-jit/Demo/turtle/turtledemo_two_canvases.py python/branches/py3k-jit/Demo/zlib/minigzip.py python/branches/py3k-jit/Demo/zlib/zlibdemo.py python/branches/py3k-jit/Doc/ (props changed) python/branches/py3k-jit/Doc/Makefile python/branches/py3k-jit/Doc/README.txt python/branches/py3k-jit/Doc/bugs.rst python/branches/py3k-jit/Doc/c-api/exceptions.rst python/branches/py3k-jit/Doc/c-api/gcsupport.rst python/branches/py3k-jit/Doc/c-api/typeobj.rst python/branches/py3k-jit/Doc/c-api/unicode.rst python/branches/py3k-jit/Doc/distutils/examples.rst python/branches/py3k-jit/Doc/distutils/uploading.rst python/branches/py3k-jit/Doc/includes/email-alternative.py python/branches/py3k-jit/Doc/includes/email-dir.py python/branches/py3k-jit/Doc/includes/email-unpack.py python/branches/py3k-jit/Doc/library/argparse.rst python/branches/py3k-jit/Doc/library/bz2.rst python/branches/py3k-jit/Doc/library/codecs.rst python/branches/py3k-jit/Doc/library/http.client.rst python/branches/py3k-jit/Doc/library/logging.rst python/branches/py3k-jit/Doc/library/pydoc.rst python/branches/py3k-jit/Doc/library/site.rst python/branches/py3k-jit/Doc/library/stdtypes.rst python/branches/py3k-jit/Doc/library/subprocess.rst python/branches/py3k-jit/Doc/library/sys.rst python/branches/py3k-jit/Doc/library/test.rst python/branches/py3k-jit/Doc/library/tkinter.rst python/branches/py3k-jit/Doc/library/tkinter.tix.rst python/branches/py3k-jit/Doc/library/tkinter.ttk.rst python/branches/py3k-jit/Doc/library/traceback.rst python/branches/py3k-jit/Doc/library/turtle.rst python/branches/py3k-jit/Doc/library/unittest.rst python/branches/py3k-jit/Doc/library/xml.etree.elementtree.rst python/branches/py3k-jit/Doc/make.bat python/branches/py3k-jit/Doc/reference/executionmodel.rst python/branches/py3k-jit/Doc/reference/expressions.rst python/branches/py3k-jit/Doc/reference/lexical_analysis.rst python/branches/py3k-jit/Doc/tools/rstlint.py python/branches/py3k-jit/Doc/tools/sphinxext/download.html python/branches/py3k-jit/Doc/using/mac.rst python/branches/py3k-jit/Doc/whatsnew/2.2.rst python/branches/py3k-jit/Doc/whatsnew/2.6.rst python/branches/py3k-jit/Doc/whatsnew/2.7.rst python/branches/py3k-jit/Include/abstract.h python/branches/py3k-jit/Include/longobject.h python/branches/py3k-jit/Include/pythonrun.h python/branches/py3k-jit/Lib/_pyio.py python/branches/py3k-jit/Lib/base64.py python/branches/py3k-jit/Lib/cProfile.py python/branches/py3k-jit/Lib/compileall.py python/branches/py3k-jit/Lib/ctypes/util.py python/branches/py3k-jit/Lib/difflib.py python/branches/py3k-jit/Lib/distutils/tests/test_bdist.py python/branches/py3k-jit/Lib/distutils/tests/test_bdist_dumb.py python/branches/py3k-jit/Lib/distutils/tests/test_bdist_msi.py python/branches/py3k-jit/Lib/distutils/tests/test_bdist_rpm.py python/branches/py3k-jit/Lib/distutils/tests/test_bdist_wininst.py python/branches/py3k-jit/Lib/distutils/tests/test_cmd.py python/branches/py3k-jit/Lib/distutils/tests/test_cygwinccompiler.py python/branches/py3k-jit/Lib/distutils/tests/test_emxccompiler.py python/branches/py3k-jit/Lib/distutils/tests/test_sysconfig.py python/branches/py3k-jit/Lib/email/test/test_email_torture.py python/branches/py3k-jit/Lib/genericpath.py python/branches/py3k-jit/Lib/http/cookies.py python/branches/py3k-jit/Lib/idlelib/PyShell.py python/branches/py3k-jit/Lib/keyword.py python/branches/py3k-jit/Lib/lib2to3/pgen2/token.py python/branches/py3k-jit/Lib/lib2to3/tests/pytree_idempotency.py python/branches/py3k-jit/Lib/logging/__init__.py python/branches/py3k-jit/Lib/logging/config.py python/branches/py3k-jit/Lib/logging/handlers.py python/branches/py3k-jit/Lib/mailbox.py python/branches/py3k-jit/Lib/mimetypes.py python/branches/py3k-jit/Lib/pdb.py python/branches/py3k-jit/Lib/platform.py python/branches/py3k-jit/Lib/posixpath.py python/branches/py3k-jit/Lib/profile.py python/branches/py3k-jit/Lib/pydoc.py python/branches/py3k-jit/Lib/quopri.py python/branches/py3k-jit/Lib/site.py python/branches/py3k-jit/Lib/smtpd.py python/branches/py3k-jit/Lib/smtplib.py python/branches/py3k-jit/Lib/sqlite3/test/regression.py python/branches/py3k-jit/Lib/subprocess.py python/branches/py3k-jit/Lib/symbol.py python/branches/py3k-jit/Lib/sysconfig.py python/branches/py3k-jit/Lib/tabnanny.py python/branches/py3k-jit/Lib/tarfile.py python/branches/py3k-jit/Lib/test/crashers/recursive_call.py python/branches/py3k-jit/Lib/test/curses_tests.py python/branches/py3k-jit/Lib/test/pystone.py python/branches/py3k-jit/Lib/test/re_tests.py python/branches/py3k-jit/Lib/test/regrtest.py python/branches/py3k-jit/Lib/test/support.py python/branches/py3k-jit/Lib/test/test___future__.py python/branches/py3k-jit/Lib/test/test__locale.py python/branches/py3k-jit/Lib/test/test_abstract_numbers.py python/branches/py3k-jit/Lib/test/test_array.py python/branches/py3k-jit/Lib/test/test_binhex.py python/branches/py3k-jit/Lib/test/test_builtin.py python/branches/py3k-jit/Lib/test/test_bz2.py python/branches/py3k-jit/Lib/test/test_cmath.py python/branches/py3k-jit/Lib/test/test_cmd.py python/branches/py3k-jit/Lib/test/test_cmd_line.py python/branches/py3k-jit/Lib/test/test_cmd_line_script.py python/branches/py3k-jit/Lib/test/test_codecencodings_cn.py python/branches/py3k-jit/Lib/test/test_codecencodings_hk.py python/branches/py3k-jit/Lib/test/test_codecencodings_jp.py python/branches/py3k-jit/Lib/test/test_codecencodings_kr.py python/branches/py3k-jit/Lib/test/test_codecencodings_tw.py python/branches/py3k-jit/Lib/test/test_codecmaps_cn.py python/branches/py3k-jit/Lib/test/test_codecmaps_hk.py python/branches/py3k-jit/Lib/test/test_codecmaps_jp.py python/branches/py3k-jit/Lib/test/test_codecmaps_kr.py python/branches/py3k-jit/Lib/test/test_codecmaps_tw.py python/branches/py3k-jit/Lib/test/test_collections.py python/branches/py3k-jit/Lib/test/test_compileall.py python/branches/py3k-jit/Lib/test/test_complex.py python/branches/py3k-jit/Lib/test/test_contextlib.py python/branches/py3k-jit/Lib/test/test_csv.py python/branches/py3k-jit/Lib/test/test_dbm.py python/branches/py3k-jit/Lib/test/test_dbm_dumb.py python/branches/py3k-jit/Lib/test/test_decimal.py python/branches/py3k-jit/Lib/test/test_deque.py python/branches/py3k-jit/Lib/test/test_descr.py python/branches/py3k-jit/Lib/test/test_docxmlrpc.py python/branches/py3k-jit/Lib/test/test_eof.py python/branches/py3k-jit/Lib/test/test_epoll.py python/branches/py3k-jit/Lib/test/test_errno.py python/branches/py3k-jit/Lib/test/test_file.py python/branches/py3k-jit/Lib/test/test_filecmp.py python/branches/py3k-jit/Lib/test/test_fileio.py python/branches/py3k-jit/Lib/test/test_float.py python/branches/py3k-jit/Lib/test/test_fnmatch.py python/branches/py3k-jit/Lib/test/test_fork1.py python/branches/py3k-jit/Lib/test/test_frozen.py python/branches/py3k-jit/Lib/test/test_functools.py python/branches/py3k-jit/Lib/test/test_getopt.py python/branches/py3k-jit/Lib/test/test_gzip.py python/branches/py3k-jit/Lib/test/test_hashlib.py python/branches/py3k-jit/Lib/test/test_heapq.py python/branches/py3k-jit/Lib/test/test_imaplib.py python/branches/py3k-jit/Lib/test/test_imp.py python/branches/py3k-jit/Lib/test/test_inspect.py python/branches/py3k-jit/Lib/test/test_io.py python/branches/py3k-jit/Lib/test/test_keywordonlyarg.py python/branches/py3k-jit/Lib/test/test_logging.py python/branches/py3k-jit/Lib/test/test_long.py python/branches/py3k-jit/Lib/test/test_marshal.py python/branches/py3k-jit/Lib/test/test_memoryio.py python/branches/py3k-jit/Lib/test/test_minidom.py python/branches/py3k-jit/Lib/test/test_multibytecodec.py python/branches/py3k-jit/Lib/test/test_multibytecodec_support.py python/branches/py3k-jit/Lib/test/test_multiprocessing.py python/branches/py3k-jit/Lib/test/test_ntpath.py python/branches/py3k-jit/Lib/test/test_optparse.py python/branches/py3k-jit/Lib/test/test_os.py python/branches/py3k-jit/Lib/test/test_parser.py python/branches/py3k-jit/Lib/test/test_pdb.py python/branches/py3k-jit/Lib/test/test_pep292.py python/branches/py3k-jit/Lib/test/test_platform.py python/branches/py3k-jit/Lib/test/test_popen.py python/branches/py3k-jit/Lib/test/test_posixpath.py python/branches/py3k-jit/Lib/test/test_print.py python/branches/py3k-jit/Lib/test/test_profile.py python/branches/py3k-jit/Lib/test/test_pyexpat.py python/branches/py3k-jit/Lib/test/test_queue.py python/branches/py3k-jit/Lib/test/test_random.py python/branches/py3k-jit/Lib/test/test_re.py python/branches/py3k-jit/Lib/test/test_richcmp.py python/branches/py3k-jit/Lib/test/test_sax.py python/branches/py3k-jit/Lib/test/test_set.py python/branches/py3k-jit/Lib/test/test_smtpnet.py python/branches/py3k-jit/Lib/test/test_socket.py python/branches/py3k-jit/Lib/test/test_socketserver.py python/branches/py3k-jit/Lib/test/test_sqlite.py python/branches/py3k-jit/Lib/test/test_ssl.py python/branches/py3k-jit/Lib/test/test_strftime.py python/branches/py3k-jit/Lib/test/test_structmembers.py python/branches/py3k-jit/Lib/test/test_subprocess.py python/branches/py3k-jit/Lib/test/test_sys.py python/branches/py3k-jit/Lib/test/test_sysconfig.py python/branches/py3k-jit/Lib/test/test_tarfile.py python/branches/py3k-jit/Lib/test/test_tcl.py python/branches/py3k-jit/Lib/test/test_tempfile.py python/branches/py3k-jit/Lib/test/test_threaded_import.py python/branches/py3k-jit/Lib/test/test_ttk_guionly.py python/branches/py3k-jit/Lib/test/test_ttk_textonly.py python/branches/py3k-jit/Lib/test/test_types.py python/branches/py3k-jit/Lib/test/test_unittest.py python/branches/py3k-jit/Lib/test/test_urllib2_localnet.py python/branches/py3k-jit/Lib/test/test_urllib2net.py python/branches/py3k-jit/Lib/test/test_urllibnet.py python/branches/py3k-jit/Lib/test/test_urlparse.py python/branches/py3k-jit/Lib/test/test_userstring.py python/branches/py3k-jit/Lib/test/test_with.py python/branches/py3k-jit/Lib/test/test_xml_etree.py python/branches/py3k-jit/Lib/test/test_xml_etree_c.py python/branches/py3k-jit/Lib/test/test_xmlrpc_net.py python/branches/py3k-jit/Lib/test/test_zipimport.py python/branches/py3k-jit/Lib/test/test_zipimport_support.py python/branches/py3k-jit/Lib/timeit.py python/branches/py3k-jit/Lib/tkinter/messagebox.py python/branches/py3k-jit/Lib/token.py python/branches/py3k-jit/Lib/trace.py python/branches/py3k-jit/Lib/unittest/__init__.py python/branches/py3k-jit/Lib/unittest/case.py python/branches/py3k-jit/Lib/unittest/result.py python/branches/py3k-jit/Lib/unittest/runner.py python/branches/py3k-jit/Lib/unittest/suite.py python/branches/py3k-jit/Lib/unittest/util.py python/branches/py3k-jit/Lib/uu.py python/branches/py3k-jit/Lib/webbrowser.py python/branches/py3k-jit/Lib/xml/etree/ElementInclude.py python/branches/py3k-jit/Lib/xml/etree/ElementPath.py python/branches/py3k-jit/Lib/xml/etree/ElementTree.py python/branches/py3k-jit/Lib/xml/etree/__init__.py python/branches/py3k-jit/Makefile.pre.in python/branches/py3k-jit/Misc/HISTORY python/branches/py3k-jit/Misc/NEWS python/branches/py3k-jit/Misc/SpecialBuilds.txt python/branches/py3k-jit/Misc/build.sh python/branches/py3k-jit/Modules/_ctypes/libffi.diff python/branches/py3k-jit/Modules/_ctypes/libffi/LICENSE python/branches/py3k-jit/Modules/_ctypes/libffi/Makefile.am python/branches/py3k-jit/Modules/_ctypes/libffi/Makefile.in python/branches/py3k-jit/Modules/_ctypes/libffi/README python/branches/py3k-jit/Modules/_ctypes/libffi/aclocal.m4 python/branches/py3k-jit/Modules/_ctypes/libffi/config.guess python/branches/py3k-jit/Modules/_ctypes/libffi/config.sub python/branches/py3k-jit/Modules/_ctypes/libffi/configure python/branches/py3k-jit/Modules/_ctypes/libffi/configure.ac python/branches/py3k-jit/Modules/_ctypes/libffi/fficonfig.h.in python/branches/py3k-jit/Modules/_ctypes/libffi/include/Makefile.am python/branches/py3k-jit/Modules/_ctypes/libffi/include/Makefile.in python/branches/py3k-jit/Modules/_ctypes/libffi/include/ffi.h.in python/branches/py3k-jit/Modules/_ctypes/libffi/include/ffi_common.h python/branches/py3k-jit/Modules/_ctypes/libffi/missing python/branches/py3k-jit/Modules/_ctypes/libffi/src/arm/sysv.S python/branches/py3k-jit/Modules/_ctypes/libffi/src/frv/ffi.c python/branches/py3k-jit/Modules/_ctypes/libffi/src/mips/ffi.c python/branches/py3k-jit/Modules/_ctypes/libffi/src/mips/ffitarget.h python/branches/py3k-jit/Modules/_ctypes/libffi/src/mips/n32.S python/branches/py3k-jit/Modules/_ctypes/libffi/src/mips/o32.S python/branches/py3k-jit/Modules/_ctypes/libffi/src/pa/ffi.c python/branches/py3k-jit/Modules/_ctypes/libffi/src/powerpc/aix.S python/branches/py3k-jit/Modules/_ctypes/libffi/src/powerpc/aix_closure.S python/branches/py3k-jit/Modules/_ctypes/libffi/src/powerpc/ffi.c python/branches/py3k-jit/Modules/_ctypes/libffi/src/powerpc/ffi_darwin.c python/branches/py3k-jit/Modules/_ctypes/libffi/src/powerpc/ffitarget.h python/branches/py3k-jit/Modules/_ctypes/libffi/src/powerpc/sysv.S python/branches/py3k-jit/Modules/_ctypes/libffi/src/s390/sysv.S python/branches/py3k-jit/Modules/_ctypes/libffi/src/sh/ffi.c python/branches/py3k-jit/Modules/_ctypes/libffi/src/sh/sysv.S python/branches/py3k-jit/Modules/_ctypes/libffi/src/sh64/ffi.c python/branches/py3k-jit/Modules/_ctypes/libffi/src/sh64/sysv.S python/branches/py3k-jit/Modules/_ctypes/libffi/src/sparc/ffi.c python/branches/py3k-jit/Modules/_ctypes/libffi/src/sparc/v8.S python/branches/py3k-jit/Modules/_ctypes/libffi/src/x86/darwin.S python/branches/py3k-jit/Modules/_ctypes/libffi/src/x86/ffi.c python/branches/py3k-jit/Modules/_ctypes/libffi/src/x86/ffi64.c python/branches/py3k-jit/Modules/_ctypes/libffi/src/x86/ffitarget.h python/branches/py3k-jit/Modules/_ctypes/libffi/src/x86/sysv.S python/branches/py3k-jit/Modules/_ctypes/libffi/src/x86/unix64.S python/branches/py3k-jit/Modules/_ctypes/libffi/src/x86/win32.S python/branches/py3k-jit/Modules/_cursesmodule.c python/branches/py3k-jit/Modules/_elementtree.c python/branches/py3k-jit/Modules/_hashopenssl.c python/branches/py3k-jit/Modules/_sqlite/connection.c python/branches/py3k-jit/Modules/_testcapimodule.c python/branches/py3k-jit/Modules/getpath.c python/branches/py3k-jit/Modules/main.c python/branches/py3k-jit/Modules/posixmodule.c python/branches/py3k-jit/Modules/selectmodule.c python/branches/py3k-jit/Modules/zipimport.c python/branches/py3k-jit/Objects/abstract.c python/branches/py3k-jit/Objects/complexobject.c python/branches/py3k-jit/Objects/funcobject.c python/branches/py3k-jit/Objects/longobject.c python/branches/py3k-jit/Objects/object.c python/branches/py3k-jit/Objects/setobject.c python/branches/py3k-jit/Objects/typeobject.c python/branches/py3k-jit/Parser/tokenizer.c python/branches/py3k-jit/Python/ceval.c python/branches/py3k-jit/Python/import.c python/branches/py3k-jit/Python/pythonrun.c python/branches/py3k-jit/Python/structmember.c python/branches/py3k-jit/Tools/ccbench/ccbench.py python/branches/py3k-jit/Tools/faqwiz/faqw.py python/branches/py3k-jit/Tools/freeze/freeze.py python/branches/py3k-jit/Tools/i18n/makelocalealias.py python/branches/py3k-jit/Tools/i18n/msgfmt.py python/branches/py3k-jit/Tools/i18n/pygettext.py python/branches/py3k-jit/Tools/modulator/Tkextra.py python/branches/py3k-jit/Tools/modulator/modulator.py python/branches/py3k-jit/Tools/msi/msi.py python/branches/py3k-jit/Tools/msi/uuids.py python/branches/py3k-jit/Tools/scripts/byteyears.py python/branches/py3k-jit/Tools/scripts/checkappend.py python/branches/py3k-jit/Tools/scripts/checkpyc.py python/branches/py3k-jit/Tools/scripts/classfix.py python/branches/py3k-jit/Tools/scripts/cleanfuture.py python/branches/py3k-jit/Tools/scripts/combinerefs.py python/branches/py3k-jit/Tools/scripts/copytime.py python/branches/py3k-jit/Tools/scripts/crlf.py python/branches/py3k-jit/Tools/scripts/cvsfiles.py python/branches/py3k-jit/Tools/scripts/db2pickle.py python/branches/py3k-jit/Tools/scripts/dutree.py python/branches/py3k-jit/Tools/scripts/eptags.py python/branches/py3k-jit/Tools/scripts/find_recursionlimit.py python/branches/py3k-jit/Tools/scripts/finddiv.py python/branches/py3k-jit/Tools/scripts/findlinksto.py python/branches/py3k-jit/Tools/scripts/findnocoding.py python/branches/py3k-jit/Tools/scripts/fixcid.py python/branches/py3k-jit/Tools/scripts/fixdiv.py python/branches/py3k-jit/Tools/scripts/fixheader.py python/branches/py3k-jit/Tools/scripts/fixnotice.py python/branches/py3k-jit/Tools/scripts/fixps.py python/branches/py3k-jit/Tools/scripts/ftpmirror.py python/branches/py3k-jit/Tools/scripts/google.py python/branches/py3k-jit/Tools/scripts/gprof2html.py python/branches/py3k-jit/Tools/scripts/h2py.py python/branches/py3k-jit/Tools/scripts/ifdef.py python/branches/py3k-jit/Tools/scripts/lfcr.py python/branches/py3k-jit/Tools/scripts/linktree.py python/branches/py3k-jit/Tools/scripts/lll.py python/branches/py3k-jit/Tools/scripts/logmerge.py python/branches/py3k-jit/Tools/scripts/md5sum.py python/branches/py3k-jit/Tools/scripts/methfix.py python/branches/py3k-jit/Tools/scripts/mkreal.py python/branches/py3k-jit/Tools/scripts/ndiff.py python/branches/py3k-jit/Tools/scripts/nm2def.py python/branches/py3k-jit/Tools/scripts/objgraph.py python/branches/py3k-jit/Tools/scripts/parseentities.py python/branches/py3k-jit/Tools/scripts/pdeps.py python/branches/py3k-jit/Tools/scripts/pickle2db.py python/branches/py3k-jit/Tools/scripts/pindent.py python/branches/py3k-jit/Tools/scripts/ptags.py python/branches/py3k-jit/Tools/scripts/pysource.py python/branches/py3k-jit/Tools/scripts/reindent-rst.py python/branches/py3k-jit/Tools/scripts/reindent.py python/branches/py3k-jit/Tools/scripts/rgrep.py python/branches/py3k-jit/Tools/scripts/serve.py python/branches/py3k-jit/Tools/scripts/suff.py python/branches/py3k-jit/Tools/scripts/svneol.py python/branches/py3k-jit/Tools/scripts/texi2html.py python/branches/py3k-jit/Tools/scripts/treesync.py python/branches/py3k-jit/Tools/scripts/untabify.py python/branches/py3k-jit/Tools/scripts/which.py python/branches/py3k-jit/Tools/scripts/xxci.py python/branches/py3k-jit/Tools/ssl/get-remote-certificate.py python/branches/py3k-jit/Tools/unicode/comparecodecs.py python/branches/py3k-jit/Tools/webchecker/wcgui.py python/branches/py3k-jit/Tools/webchecker/webchecker.py python/branches/py3k-jit/Tools/webchecker/websucker.py python/branches/py3k-jit/Tools/webchecker/wsgui.py python/branches/py3k-jit/configure python/branches/py3k-jit/configure.in python/branches/py3k-jit/setup.py Modified: python/branches/py3k-jit/Demo/cgi/cgi1.py ============================================================================== --- python/branches/py3k-jit/Demo/cgi/cgi1.py (original) +++ python/branches/py3k-jit/Demo/cgi/cgi1.py Tue Mar 16 21:40:29 2010 @@ -1,4 +1,4 @@ -#!/usr/local/bin/python +#!/usr/bin/env python3 """CGI test 1 - check server setup.""" Modified: python/branches/py3k-jit/Demo/cgi/cgi2.py ============================================================================== --- python/branches/py3k-jit/Demo/cgi/cgi2.py (original) +++ python/branches/py3k-jit/Demo/cgi/cgi2.py Tue Mar 16 21:40:29 2010 @@ -1,4 +1,4 @@ -#!/usr/local/bin/python +#!/usr/bin/env python3 """CGI test 2 - basic use of cgi module.""" Modified: python/branches/py3k-jit/Demo/cgi/cgi3.py ============================================================================== --- python/branches/py3k-jit/Demo/cgi/cgi3.py (original) +++ python/branches/py3k-jit/Demo/cgi/cgi3.py Tue Mar 16 21:40:29 2010 @@ -1,4 +1,4 @@ -#!/usr/local/bin/python +#!/usr/bin/env python3 """CGI test 3 (persistent data).""" Modified: python/branches/py3k-jit/Demo/comparisons/regextest.py ============================================================================== --- python/branches/py3k-jit/Demo/comparisons/regextest.py (original) +++ python/branches/py3k-jit/Demo/comparisons/regextest.py Tue Mar 16 21:40:29 2010 @@ -1,4 +1,4 @@ -#! /usr/bin/env python +#! /usr/bin/env python3 # 1) Regular Expressions Test # Modified: python/branches/py3k-jit/Demo/comparisons/sortingtest.py ============================================================================== --- python/branches/py3k-jit/Demo/comparisons/sortingtest.py (original) +++ python/branches/py3k-jit/Demo/comparisons/sortingtest.py Tue Mar 16 21:40:29 2010 @@ -1,4 +1,4 @@ -#! /usr/bin/env python +#! /usr/bin/env python3 # 2) Sorting Test # Modified: python/branches/py3k-jit/Demo/comparisons/systemtest.py ============================================================================== --- python/branches/py3k-jit/Demo/comparisons/systemtest.py (original) +++ python/branches/py3k-jit/Demo/comparisons/systemtest.py Tue Mar 16 21:40:29 2010 @@ -1,4 +1,4 @@ -#! /usr/bin/env python +#! /usr/bin/env python3 # 3) System Test # Modified: python/branches/py3k-jit/Demo/curses/life.py ============================================================================== --- python/branches/py3k-jit/Demo/curses/life.py (original) +++ python/branches/py3k-jit/Demo/curses/life.py Tue Mar 16 21:40:29 2010 @@ -1,4 +1,4 @@ -#!/usr/bin/env python +#!/usr/bin/env python3 # life.py -- A curses-based version of Conway's Game of Life. # Contributed by AMK # Modified: python/branches/py3k-jit/Demo/curses/ncurses.py ============================================================================== --- python/branches/py3k-jit/Demo/curses/ncurses.py (original) +++ python/branches/py3k-jit/Demo/curses/ncurses.py Tue Mar 16 21:40:29 2010 @@ -1,4 +1,4 @@ -#!/usr/bin/env python +#!/usr/bin/env python3 # # $Id$ # Modified: python/branches/py3k-jit/Demo/curses/rain.py ============================================================================== --- python/branches/py3k-jit/Demo/curses/rain.py (original) +++ python/branches/py3k-jit/Demo/curses/rain.py Tue Mar 16 21:40:29 2010 @@ -1,4 +1,4 @@ -#!/usr/bin/env python +#!/usr/bin/env python3 # # $Id$ # Modified: python/branches/py3k-jit/Demo/curses/repeat.py ============================================================================== --- python/branches/py3k-jit/Demo/curses/repeat.py (original) +++ python/branches/py3k-jit/Demo/curses/repeat.py Tue Mar 16 21:40:29 2010 @@ -1,4 +1,4 @@ -#! /usr/bin/env python +#! /usr/bin/env python3 """repeat [-i SECONDS] Modified: python/branches/py3k-jit/Demo/curses/tclock.py ============================================================================== --- python/branches/py3k-jit/Demo/curses/tclock.py (original) +++ python/branches/py3k-jit/Demo/curses/tclock.py Tue Mar 16 21:40:29 2010 @@ -1,4 +1,4 @@ -#!/usr/bin/env python +#!/usr/bin/env python3 # # $Id$ # Modified: python/branches/py3k-jit/Demo/distutils/test2to3/maintest.py ============================================================================== --- python/branches/py3k-jit/Demo/distutils/test2to3/maintest.py (original) +++ python/branches/py3k-jit/Demo/distutils/test2to3/maintest.py Tue Mar 16 21:40:29 2010 @@ -1,4 +1,4 @@ -#!/usr/bin/env python +#!/usr/bin/env python3 # The above line should get replaced with the path to the Python # interpreter; the block below should get 2to3-converted. Modified: python/branches/py3k-jit/Demo/parser/test_parser.py ============================================================================== --- python/branches/py3k-jit/Demo/parser/test_parser.py (original) +++ python/branches/py3k-jit/Demo/parser/test_parser.py Tue Mar 16 21:40:29 2010 @@ -1,4 +1,4 @@ -#! /usr/bin/env python +#! /usr/bin/env python3 # (Force the script to use the latest build.) # # test_parser.py Modified: python/branches/py3k-jit/Demo/pdist/RCSProxy.py ============================================================================== --- python/branches/py3k-jit/Demo/pdist/RCSProxy.py (original) +++ python/branches/py3k-jit/Demo/pdist/RCSProxy.py Tue Mar 16 21:40:29 2010 @@ -1,4 +1,4 @@ -#! /usr/bin/env python +#! /usr/bin/env python3 """RCS Proxy. Modified: python/branches/py3k-jit/Demo/pdist/makechangelog.py ============================================================================== --- python/branches/py3k-jit/Demo/pdist/makechangelog.py (original) +++ python/branches/py3k-jit/Demo/pdist/makechangelog.py Tue Mar 16 21:40:29 2010 @@ -1,4 +1,4 @@ -#! /usr/bin/env python +#! /usr/bin/env python3 """Turn a pile of RCS log output into ChangeLog file entries. Modified: python/branches/py3k-jit/Demo/pdist/rcvs.py ============================================================================== --- python/branches/py3k-jit/Demo/pdist/rcvs.py (original) +++ python/branches/py3k-jit/Demo/pdist/rcvs.py Tue Mar 16 21:40:29 2010 @@ -1,4 +1,4 @@ -#! /usr/bin/env python +#! /usr/bin/env python3 """Remote CVS -- command line interface""" Modified: python/branches/py3k-jit/Demo/pdist/rrcs.py ============================================================================== --- python/branches/py3k-jit/Demo/pdist/rrcs.py (original) +++ python/branches/py3k-jit/Demo/pdist/rrcs.py Tue Mar 16 21:40:29 2010 @@ -1,4 +1,4 @@ -#! /usr/bin/env python +#! /usr/bin/env python3 "Remote RCS -- command line interface" Modified: python/branches/py3k-jit/Demo/pysvr/pysvr.py ============================================================================== --- python/branches/py3k-jit/Demo/pysvr/pysvr.py (original) +++ python/branches/py3k-jit/Demo/pysvr/pysvr.py Tue Mar 16 21:40:29 2010 @@ -1,4 +1,4 @@ -#! /usr/bin/env python +#! /usr/bin/env python3 """A multi-threaded telnet-like server that gives a Python prompt. Modified: python/branches/py3k-jit/Demo/scripts/beer.py ============================================================================== --- python/branches/py3k-jit/Demo/scripts/beer.py (original) +++ python/branches/py3k-jit/Demo/scripts/beer.py Tue Mar 16 21:40:29 2010 @@ -1,4 +1,4 @@ -#! /usr/bin/env python +#! /usr/bin/env python3 # By GvR, demystified after a version by Fredrik Lundh. Modified: python/branches/py3k-jit/Demo/scripts/eqfix.py ============================================================================== --- python/branches/py3k-jit/Demo/scripts/eqfix.py (original) +++ python/branches/py3k-jit/Demo/scripts/eqfix.py Tue Mar 16 21:40:29 2010 @@ -1,4 +1,4 @@ -#! /usr/bin/env python +#! /usr/bin/env python3 # Fix Python source files to use the new equality test operator, i.e., # if x = y: ... Modified: python/branches/py3k-jit/Demo/scripts/fact.py ============================================================================== --- python/branches/py3k-jit/Demo/scripts/fact.py (original) +++ python/branches/py3k-jit/Demo/scripts/fact.py Tue Mar 16 21:40:29 2010 @@ -1,4 +1,4 @@ -#! /usr/bin/env python +#! /usr/bin/env python3 # Factorize numbers. # The algorithm is not efficient, but easy to understand. Modified: python/branches/py3k-jit/Demo/scripts/find-uname.py ============================================================================== --- python/branches/py3k-jit/Demo/scripts/find-uname.py (original) +++ python/branches/py3k-jit/Demo/scripts/find-uname.py Tue Mar 16 21:40:29 2010 @@ -1,4 +1,4 @@ -#!/usr/bin/env python +#!/usr/bin/env python3 """ For each argument on the command line, look for it in the set of all Unicode Modified: python/branches/py3k-jit/Demo/scripts/from.py ============================================================================== --- python/branches/py3k-jit/Demo/scripts/from.py (original) +++ python/branches/py3k-jit/Demo/scripts/from.py Tue Mar 16 21:40:29 2010 @@ -1,4 +1,4 @@ -#! /usr/bin/env python +#! /usr/bin/env python3 # Print From and Subject of messages in $MAIL. # Extension to multiple mailboxes and other bells & whistles are left Modified: python/branches/py3k-jit/Demo/scripts/lpwatch.py ============================================================================== --- python/branches/py3k-jit/Demo/scripts/lpwatch.py (original) +++ python/branches/py3k-jit/Demo/scripts/lpwatch.py Tue Mar 16 21:40:29 2010 @@ -1,4 +1,4 @@ -#! /usr/bin/env python +#! /usr/bin/env python3 # Watch line printer queue(s). # Intended for BSD 4.3 lpq. Modified: python/branches/py3k-jit/Demo/scripts/makedir.py ============================================================================== --- python/branches/py3k-jit/Demo/scripts/makedir.py (original) +++ python/branches/py3k-jit/Demo/scripts/makedir.py Tue Mar 16 21:40:29 2010 @@ -1,4 +1,4 @@ -#! /usr/bin/env python +#! /usr/bin/env python3 # Like mkdir, but also make intermediate directories if necessary. # It is not an error if the given directory already exists (as long Modified: python/branches/py3k-jit/Demo/scripts/markov.py ============================================================================== --- python/branches/py3k-jit/Demo/scripts/markov.py (original) +++ python/branches/py3k-jit/Demo/scripts/markov.py Tue Mar 16 21:40:29 2010 @@ -1,4 +1,4 @@ -#! /usr/bin/env python +#! /usr/bin/env python3 class Markov: def __init__(self, histsize, choice): Modified: python/branches/py3k-jit/Demo/scripts/mboxconvert.py ============================================================================== --- python/branches/py3k-jit/Demo/scripts/mboxconvert.py (original) +++ python/branches/py3k-jit/Demo/scripts/mboxconvert.py Tue Mar 16 21:40:29 2010 @@ -1,4 +1,4 @@ -#! /usr/bin/env python +#! /usr/bin/env python3 # Convert MH directories (1 message per file) or MMDF mailboxes (4x^A # delimited) to unix mailbox (From ... delimited) on stdout. Modified: python/branches/py3k-jit/Demo/scripts/morse.py ============================================================================== --- python/branches/py3k-jit/Demo/scripts/morse.py (original) +++ python/branches/py3k-jit/Demo/scripts/morse.py Tue Mar 16 21:40:29 2010 @@ -1,4 +1,4 @@ -#! /usr/bin/env python +#! /usr/bin/env python3 # DAH should be three DOTs. # Space between DOTs and DAHs should be one DOT. Modified: python/branches/py3k-jit/Demo/scripts/newslist.py ============================================================================== --- python/branches/py3k-jit/Demo/scripts/newslist.py (original) +++ python/branches/py3k-jit/Demo/scripts/newslist.py Tue Mar 16 21:40:29 2010 @@ -1,4 +1,4 @@ -#! /usr/bin/env python +#! /usr/bin/env python3 ####################################################################### # Newslist $Revision$ # Modified: python/branches/py3k-jit/Demo/scripts/pi.py ============================================================================== --- python/branches/py3k-jit/Demo/scripts/pi.py (original) +++ python/branches/py3k-jit/Demo/scripts/pi.py Tue Mar 16 21:40:29 2010 @@ -1,4 +1,4 @@ -#! /usr/bin/env python +#! /usr/bin/env python3 # Print digits of pi forever. # Modified: python/branches/py3k-jit/Demo/scripts/pp.py ============================================================================== --- python/branches/py3k-jit/Demo/scripts/pp.py (original) +++ python/branches/py3k-jit/Demo/scripts/pp.py Tue Mar 16 21:40:29 2010 @@ -1,4 +1,4 @@ -#! /usr/bin/env python +#! /usr/bin/env python3 # Emulate some Perl command line options. # Usage: pp [-a] [-c] [-d] [-e scriptline] [-F fieldsep] [-n] [-p] [file] ... Modified: python/branches/py3k-jit/Demo/scripts/primes.py ============================================================================== --- python/branches/py3k-jit/Demo/scripts/primes.py (original) +++ python/branches/py3k-jit/Demo/scripts/primes.py Tue Mar 16 21:40:29 2010 @@ -1,4 +1,4 @@ -#! /usr/bin/env python +#! /usr/bin/env python3 # Print prime numbers in a given range Modified: python/branches/py3k-jit/Demo/scripts/queens.py ============================================================================== --- python/branches/py3k-jit/Demo/scripts/queens.py (original) +++ python/branches/py3k-jit/Demo/scripts/queens.py Tue Mar 16 21:40:29 2010 @@ -1,4 +1,4 @@ -#! /usr/bin/env python +#! /usr/bin/env python3 """N queens problem. Modified: python/branches/py3k-jit/Demo/scripts/script.py ============================================================================== --- python/branches/py3k-jit/Demo/scripts/script.py (original) +++ python/branches/py3k-jit/Demo/scripts/script.py Tue Mar 16 21:40:29 2010 @@ -1,4 +1,4 @@ -#! /usr/bin/env python +#! /usr/bin/env python3 # script.py -- Make typescript of terminal session. # Usage: Modified: python/branches/py3k-jit/Demo/scripts/unbirthday.py ============================================================================== --- python/branches/py3k-jit/Demo/scripts/unbirthday.py (original) +++ python/branches/py3k-jit/Demo/scripts/unbirthday.py Tue Mar 16 21:40:29 2010 @@ -1,4 +1,4 @@ -#! /usr/bin/env python +#! /usr/bin/env python3 # Calculate your unbirthday count (see Alice in Wonderland). # This is defined as the number of days from your birth until today Modified: python/branches/py3k-jit/Demo/scripts/update.py ============================================================================== --- python/branches/py3k-jit/Demo/scripts/update.py (original) +++ python/branches/py3k-jit/Demo/scripts/update.py Tue Mar 16 21:40:29 2010 @@ -1,4 +1,4 @@ -#! /usr/bin/env python +#! /usr/bin/env python3 # Update a bunch of files according to a script. # The input file contains lines of the form ::, Modified: python/branches/py3k-jit/Demo/sockets/echosvr.py ============================================================================== --- python/branches/py3k-jit/Demo/sockets/echosvr.py (original) +++ python/branches/py3k-jit/Demo/sockets/echosvr.py Tue Mar 16 21:40:29 2010 @@ -1,4 +1,4 @@ -#! /usr/bin/env python +#! /usr/bin/env python3 # Python implementation of an 'echo' tcp server: echo all data it receives. # Modified: python/branches/py3k-jit/Demo/sockets/finger.py ============================================================================== --- python/branches/py3k-jit/Demo/sockets/finger.py (original) +++ python/branches/py3k-jit/Demo/sockets/finger.py Tue Mar 16 21:40:29 2010 @@ -1,4 +1,4 @@ -#! /usr/bin/env python +#! /usr/bin/env python3 # Python interface to the Internet finger daemon. # Modified: python/branches/py3k-jit/Demo/sockets/gopher.py ============================================================================== --- python/branches/py3k-jit/Demo/sockets/gopher.py (original) +++ python/branches/py3k-jit/Demo/sockets/gopher.py Tue Mar 16 21:40:29 2010 @@ -1,4 +1,4 @@ -#! /usr/bin/env python +#! /usr/bin/env python3 # A simple gopher client. # Modified: python/branches/py3k-jit/Demo/sockets/mcast.py ============================================================================== --- python/branches/py3k-jit/Demo/sockets/mcast.py (original) +++ python/branches/py3k-jit/Demo/sockets/mcast.py Tue Mar 16 21:40:29 2010 @@ -1,4 +1,4 @@ -#!/usr/bin/env python +#!/usr/bin/env python3 # # Send/receive UDP multicast packets. # Requires that your OS kernel supports IP multicast. Modified: python/branches/py3k-jit/Demo/sockets/rpython.py ============================================================================== --- python/branches/py3k-jit/Demo/sockets/rpython.py (original) +++ python/branches/py3k-jit/Demo/sockets/rpython.py Tue Mar 16 21:40:29 2010 @@ -1,4 +1,4 @@ -#! /usr/bin/env python +#! /usr/bin/env python3 # Remote python client. # Execute Python commands remotely and send output back. Modified: python/branches/py3k-jit/Demo/sockets/rpythond.py ============================================================================== --- python/branches/py3k-jit/Demo/sockets/rpythond.py (original) +++ python/branches/py3k-jit/Demo/sockets/rpythond.py Tue Mar 16 21:40:29 2010 @@ -1,4 +1,4 @@ -#! /usr/bin/env python +#! /usr/bin/env python3 # Remote python server. # Execute Python commands remotely and send output back. Modified: python/branches/py3k-jit/Demo/sockets/telnet.py ============================================================================== --- python/branches/py3k-jit/Demo/sockets/telnet.py (original) +++ python/branches/py3k-jit/Demo/sockets/telnet.py Tue Mar 16 21:40:29 2010 @@ -1,4 +1,4 @@ -#! /usr/bin/env python +#! /usr/bin/env python3 # Minimal interface to the Internet telnet protocol. # Modified: python/branches/py3k-jit/Demo/sockets/throughput.py ============================================================================== --- python/branches/py3k-jit/Demo/sockets/throughput.py (original) +++ python/branches/py3k-jit/Demo/sockets/throughput.py Tue Mar 16 21:40:29 2010 @@ -1,4 +1,4 @@ -#! /usr/bin/env python +#! /usr/bin/env python3 # Test network throughput. # Modified: python/branches/py3k-jit/Demo/sockets/udpecho.py ============================================================================== --- python/branches/py3k-jit/Demo/sockets/udpecho.py (original) +++ python/branches/py3k-jit/Demo/sockets/udpecho.py Tue Mar 16 21:40:29 2010 @@ -1,4 +1,4 @@ -#! /usr/bin/env python +#! /usr/bin/env python3 # Client and server for udp (datagram) echo. # Modified: python/branches/py3k-jit/Demo/tkinter/guido/MimeViewer.py ============================================================================== --- python/branches/py3k-jit/Demo/tkinter/guido/MimeViewer.py (original) +++ python/branches/py3k-jit/Demo/tkinter/guido/MimeViewer.py Tue Mar 16 21:40:29 2010 @@ -1,4 +1,4 @@ -#! /usr/bin/env python +#! /usr/bin/env python3 # View a single MIME multipart message. # Display each part as a box. Modified: python/branches/py3k-jit/Demo/tkinter/guido/canvasevents.py ============================================================================== --- python/branches/py3k-jit/Demo/tkinter/guido/canvasevents.py (original) +++ python/branches/py3k-jit/Demo/tkinter/guido/canvasevents.py Tue Mar 16 21:40:29 2010 @@ -1,4 +1,4 @@ -#! /usr/bin/env python +#! /usr/bin/env python3 from tkinter import * from Canvas import Oval, Group, CanvasText Modified: python/branches/py3k-jit/Demo/tkinter/guido/dialog.py ============================================================================== --- python/branches/py3k-jit/Demo/tkinter/guido/dialog.py (original) +++ python/branches/py3k-jit/Demo/tkinter/guido/dialog.py Tue Mar 16 21:40:29 2010 @@ -1,4 +1,4 @@ -#! /usr/bin/env python +#! /usr/bin/env python3 # A Python function that generates dialog boxes with a text message, # optional bitmap, and any number of buttons. Modified: python/branches/py3k-jit/Demo/tkinter/guido/electrons.py ============================================================================== --- python/branches/py3k-jit/Demo/tkinter/guido/electrons.py (original) +++ python/branches/py3k-jit/Demo/tkinter/guido/electrons.py Tue Mar 16 21:40:29 2010 @@ -1,4 +1,4 @@ -#! /usr/bin/env python +#! /usr/bin/env python3 # Simulate "electrons" migrating across the screen. # An optional bitmap file in can be in the background. Modified: python/branches/py3k-jit/Demo/tkinter/guido/kill.py ============================================================================== --- python/branches/py3k-jit/Demo/tkinter/guido/kill.py (original) +++ python/branches/py3k-jit/Demo/tkinter/guido/kill.py Tue Mar 16 21:40:29 2010 @@ -1,4 +1,4 @@ -#! /usr/bin/env python +#! /usr/bin/env python3 # Tkinter interface to Linux `kill' command. from tkinter import * Modified: python/branches/py3k-jit/Demo/tkinter/guido/mbox.py ============================================================================== --- python/branches/py3k-jit/Demo/tkinter/guido/mbox.py (original) +++ python/branches/py3k-jit/Demo/tkinter/guido/mbox.py Tue Mar 16 21:40:29 2010 @@ -1,4 +1,4 @@ -#! /usr/bin/env python +#! /usr/bin/env python3 # Scan MH folder, display results in window Modified: python/branches/py3k-jit/Demo/tkinter/guido/newmenubardemo.py ============================================================================== --- python/branches/py3k-jit/Demo/tkinter/guido/newmenubardemo.py (original) +++ python/branches/py3k-jit/Demo/tkinter/guido/newmenubardemo.py Tue Mar 16 21:40:29 2010 @@ -1,4 +1,4 @@ -#! /usr/bin/env python +#! /usr/bin/env python3 """Play with the new Tk 8.0 toplevel menu option.""" Modified: python/branches/py3k-jit/Demo/tkinter/guido/rmt.py ============================================================================== --- python/branches/py3k-jit/Demo/tkinter/guido/rmt.py (original) +++ python/branches/py3k-jit/Demo/tkinter/guido/rmt.py Tue Mar 16 21:40:29 2010 @@ -1,4 +1,4 @@ -#! /usr/bin/env python +#! /usr/bin/env python3 # A Python program implementing rmt, an application for remotely # controlling other Tk applications. Modified: python/branches/py3k-jit/Demo/tkinter/guido/solitaire.py ============================================================================== --- python/branches/py3k-jit/Demo/tkinter/guido/solitaire.py (original) +++ python/branches/py3k-jit/Demo/tkinter/guido/solitaire.py Tue Mar 16 21:40:29 2010 @@ -1,4 +1,4 @@ -#! /usr/bin/env python +#! /usr/bin/env python3 """Solitaire game, much like the one that comes with MS Windows. Modified: python/branches/py3k-jit/Demo/tkinter/guido/sortvisu.py ============================================================================== --- python/branches/py3k-jit/Demo/tkinter/guido/sortvisu.py (original) +++ python/branches/py3k-jit/Demo/tkinter/guido/sortvisu.py Tue Mar 16 21:40:29 2010 @@ -1,4 +1,4 @@ -#! /usr/bin/env python +#! /usr/bin/env python3 """Sorting algorithms visualizer using Tkinter. Modified: python/branches/py3k-jit/Demo/tkinter/guido/svkill.py ============================================================================== --- python/branches/py3k-jit/Demo/tkinter/guido/svkill.py (original) +++ python/branches/py3k-jit/Demo/tkinter/guido/svkill.py Tue Mar 16 21:40:29 2010 @@ -1,4 +1,4 @@ -#! /usr/bin/env python +#! /usr/bin/env python3 # Tkinter interface to SYSV `ps' and `kill' commands. Modified: python/branches/py3k-jit/Demo/tkinter/guido/tkman.py ============================================================================== --- python/branches/py3k-jit/Demo/tkinter/guido/tkman.py (original) +++ python/branches/py3k-jit/Demo/tkinter/guido/tkman.py Tue Mar 16 21:40:29 2010 @@ -1,4 +1,4 @@ -#! /usr/bin/env python +#! /usr/bin/env python3 # Tk man page browser -- currently only shows the Tcl/Tk man pages Modified: python/branches/py3k-jit/Demo/turtle/tdemo_I_dontlike_tiltdemo.py ============================================================================== --- python/branches/py3k-jit/Demo/turtle/tdemo_I_dontlike_tiltdemo.py (original) +++ python/branches/py3k-jit/Demo/turtle/tdemo_I_dontlike_tiltdemo.py Tue Mar 16 21:40:29 2010 @@ -1,4 +1,4 @@ -#!/usr/bin/python +#!/usr/bin/env python3 """ turtle-example-suite: tdemo-I_dont_like_tiltdemo.py Modified: python/branches/py3k-jit/Demo/turtle/tdemo_bytedesign.py ============================================================================== --- python/branches/py3k-jit/Demo/turtle/tdemo_bytedesign.py (original) +++ python/branches/py3k-jit/Demo/turtle/tdemo_bytedesign.py Tue Mar 16 21:40:29 2010 @@ -1,4 +1,4 @@ -#!/usr/bin/python +#!/usr/bin/env python3 """ turtle-example-suite: tdemo_bytedesign.py Modified: python/branches/py3k-jit/Demo/turtle/tdemo_clock.py ============================================================================== --- python/branches/py3k-jit/Demo/turtle/tdemo_clock.py (original) +++ python/branches/py3k-jit/Demo/turtle/tdemo_clock.py Tue Mar 16 21:40:29 2010 @@ -1,4 +1,4 @@ -#!/usr/bin/python +#!/usr/bin/env python3 # -*- coding: cp1252 -*- """ turtle-example-suite: Modified: python/branches/py3k-jit/Demo/turtle/tdemo_forest.py ============================================================================== --- python/branches/py3k-jit/Demo/turtle/tdemo_forest.py (original) +++ python/branches/py3k-jit/Demo/turtle/tdemo_forest.py Tue Mar 16 21:40:29 2010 @@ -1,4 +1,4 @@ -#!/usr/bin/python +#!/usr/bin/env python3 """ turtlegraphics-example-suite: tdemo_forest.py Modified: python/branches/py3k-jit/Demo/turtle/tdemo_fractalcurves.py ============================================================================== --- python/branches/py3k-jit/Demo/turtle/tdemo_fractalcurves.py (original) +++ python/branches/py3k-jit/Demo/turtle/tdemo_fractalcurves.py Tue Mar 16 21:40:29 2010 @@ -1,4 +1,4 @@ -#!/usr/bin/python +#!/usr/bin/env python3 """ turtle-example-suite: tdemo_fractalCurves.py Modified: python/branches/py3k-jit/Demo/turtle/tdemo_lindenmayer_indian.py ============================================================================== --- python/branches/py3k-jit/Demo/turtle/tdemo_lindenmayer_indian.py (original) +++ python/branches/py3k-jit/Demo/turtle/tdemo_lindenmayer_indian.py Tue Mar 16 21:40:29 2010 @@ -1,4 +1,4 @@ -#!/usr/bin/python +#!/usr/bin/env python3 """ turtle-example-suite: xtx_lindenmayer_indian.py Modified: python/branches/py3k-jit/Demo/turtle/tdemo_minimal_hanoi.py ============================================================================== --- python/branches/py3k-jit/Demo/turtle/tdemo_minimal_hanoi.py (original) +++ python/branches/py3k-jit/Demo/turtle/tdemo_minimal_hanoi.py Tue Mar 16 21:40:29 2010 @@ -1,4 +1,4 @@ -#!/usr/bin/python +#!/usr/bin/env python3 """ turtle-example-suite: tdemo_minimal_hanoi.py Modified: python/branches/py3k-jit/Demo/turtle/tdemo_paint.py ============================================================================== --- python/branches/py3k-jit/Demo/turtle/tdemo_paint.py (original) +++ python/branches/py3k-jit/Demo/turtle/tdemo_paint.py Tue Mar 16 21:40:29 2010 @@ -1,4 +1,4 @@ -#!/usr/bin/python +#!/usr/bin/env python3 """ turtle-example-suite: tdemo_paint.py Modified: python/branches/py3k-jit/Demo/turtle/tdemo_peace.py ============================================================================== --- python/branches/py3k-jit/Demo/turtle/tdemo_peace.py (original) +++ python/branches/py3k-jit/Demo/turtle/tdemo_peace.py Tue Mar 16 21:40:29 2010 @@ -1,4 +1,4 @@ -#!/usr/bin/python +#!/usr/bin/env python3 """ turtle-example-suite: tdemo_peace.py Modified: python/branches/py3k-jit/Demo/turtle/tdemo_penrose.py ============================================================================== --- python/branches/py3k-jit/Demo/turtle/tdemo_penrose.py (original) +++ python/branches/py3k-jit/Demo/turtle/tdemo_penrose.py Tue Mar 16 21:40:29 2010 @@ -1,4 +1,4 @@ -#!/usr/bin/python +#!/usr/bin/env python3 """ xturtle-example-suite: xtx_kites_and_darts.py Modified: python/branches/py3k-jit/Demo/turtle/tdemo_planet_and_moon.py ============================================================================== --- python/branches/py3k-jit/Demo/turtle/tdemo_planet_and_moon.py (original) +++ python/branches/py3k-jit/Demo/turtle/tdemo_planet_and_moon.py Tue Mar 16 21:40:29 2010 @@ -1,4 +1,4 @@ -#!/usr/bin/python +#!/usr/bin/env python3 """ turtle-example-suite: tdemo_planets_and_moon.py Modified: python/branches/py3k-jit/Demo/turtle/tdemo_tree.py ============================================================================== --- python/branches/py3k-jit/Demo/turtle/tdemo_tree.py (original) +++ python/branches/py3k-jit/Demo/turtle/tdemo_tree.py Tue Mar 16 21:40:29 2010 @@ -1,4 +1,4 @@ -#!/usr/bin/python +#!/usr/bin/env python3 """ turtle-example-suite: tdemo_tree.py Modified: python/branches/py3k-jit/Demo/turtle/tdemo_yinyang.py ============================================================================== --- python/branches/py3k-jit/Demo/turtle/tdemo_yinyang.py (original) +++ python/branches/py3k-jit/Demo/turtle/tdemo_yinyang.py Tue Mar 16 21:40:29 2010 @@ -1,4 +1,4 @@ -#!/usr/bin/python +#!/usr/bin/env python3 """ turtle-example-suite: tdemo_yinyang.py Modified: python/branches/py3k-jit/Demo/turtle/turtleDemo.py ============================================================================== --- python/branches/py3k-jit/Demo/turtle/turtleDemo.py (original) +++ python/branches/py3k-jit/Demo/turtle/turtleDemo.py Tue Mar 16 21:40:29 2010 @@ -1,4 +1,4 @@ -#!/usr/bin/python +#!/usr/bin/env python3 import sys import os Modified: python/branches/py3k-jit/Demo/turtle/turtledemo_two_canvases.py ============================================================================== --- python/branches/py3k-jit/Demo/turtle/turtledemo_two_canvases.py (original) +++ python/branches/py3k-jit/Demo/turtle/turtledemo_two_canvases.py Tue Mar 16 21:40:29 2010 @@ -1,4 +1,4 @@ -#!/usr/bin/python +#!/usr/bin/env python3 ## DEMONSTRATES USE OF 2 CANVASES, SO CANNOT BE RUN IN DEMOVIEWER! """turtle example: Using TurtleScreen and RawTurtle for drawing on two distinct canvases. Modified: python/branches/py3k-jit/Demo/zlib/minigzip.py ============================================================================== --- python/branches/py3k-jit/Demo/zlib/minigzip.py (original) +++ python/branches/py3k-jit/Demo/zlib/minigzip.py Tue Mar 16 21:40:29 2010 @@ -1,4 +1,4 @@ -#!/usr/bin/env python +#!/usr/bin/env python3 # Demo program for zlib; it compresses or decompresses files, but *doesn't* # delete the original. This doesn't support all of gzip's options. # Modified: python/branches/py3k-jit/Demo/zlib/zlibdemo.py ============================================================================== --- python/branches/py3k-jit/Demo/zlib/zlibdemo.py (original) +++ python/branches/py3k-jit/Demo/zlib/zlibdemo.py Tue Mar 16 21:40:29 2010 @@ -1,4 +1,4 @@ -#!/usr/bin/env python +#!/usr/bin/env python3 # Takes an optional filename, defaulting to this file itself. # Reads the file and compresses the content using level 1 and level 9 Modified: python/branches/py3k-jit/Doc/Makefile ============================================================================== --- python/branches/py3k-jit/Doc/Makefile (original) +++ python/branches/py3k-jit/Doc/Makefile Tue Mar 16 21:40:29 2010 @@ -14,38 +14,45 @@ ALLSPHINXOPTS = -b $(BUILDER) -d build/doctrees -D latex_paper_size=$(PAPER) \ $(SPHINXOPTS) . build/$(BUILDER) $(SOURCES) -.PHONY: help checkout update build html htmlhelp clean coverage dist check +.PHONY: help checkout update build html htmlhelp latex text changes linkcheck \ + suspicious coverage doctest pydoc-topics htmlview clean dist check serve \ + autobuild-dev autobuild-stable help: @echo "Please use \`make ' where is one of" - @echo " html to make standalone HTML files" - @echo " htmlhelp to make HTML files and a HTML help project" - @echo " latex to make LaTeX files, you can set PAPER=a4 or PAPER=letter" - @echo " text to make plain text files" - @echo " changes to make an overview over all changed/added/deprecated items" - @echo " linkcheck to check all external links for integrity" + @echo " clean to remove build files" + @echo " update to update build tools" + @echo " html to make standalone HTML files" + @echo " htmlhelp to make HTML files and a HTML help project" + @echo " latex to make LaTeX files, you can set PAPER=a4 or PAPER=letter" + @echo " text to make plain text files" + @echo " changes to make an overview over all changed/added/deprecated items" + @echo " linkcheck to check all external links for integrity" + @echo " coverage to check documentation coverage for library and C API" + @echo " doctest to run doctests in the documentation" + @echo " pydoc-topics to regenerate the pydoc topics file" + @echo " dist to create a \"dist\" directory with archived docs for download" @echo " suspicious to check for suspicious markup in output text" - @echo " coverage to check documentation coverage for library and C API" - @echo " dist to create a \"dist\" directory with archived docs for download" - @echo " serve to serve the documentation on the localhost (8000)" + @echo " check to run a check for frequent markup errors" + @echo " serve to serve the documentation on the localhost (8000)" # Note: if you update versions here, do the same in make.bat and README.txt checkout: @if [ ! -d tools/sphinx ]; then \ echo "Checking out Sphinx..."; \ - svn checkout $(SVNROOT)/external/Sphinx-0.6.3/sphinx tools/sphinx; \ + svn checkout $(SVNROOT)/external/Sphinx-0.6.5/sphinx tools/sphinx; \ fi @if [ ! -d tools/docutils ]; then \ echo "Checking out Docutils..."; \ - svn checkout $(SVNROOT)/external/docutils-0.5/docutils tools/docutils; \ + svn checkout $(SVNROOT)/external/docutils-0.6/docutils tools/docutils; \ fi @if [ ! -d tools/jinja2 ]; then \ echo "Checking out Jinja..."; \ - svn checkout $(SVNROOT)/external/Jinja-2.1.1/jinja2 tools/jinja2; \ + svn checkout $(SVNROOT)/external/Jinja-2.3.1/jinja2 tools/jinja2; \ fi @if [ ! -d tools/pygments ]; then \ echo "Checking out Pygments..."; \ - svn checkout $(SVNROOT)/external/Pygments-1.1.1/pygments tools/pygments; \ + svn checkout $(SVNROOT)/external/Pygments-1.3.1/pygments tools/pygments; \ fi update: clean checkout @@ -153,3 +160,18 @@ serve: ../Tools/scripts/serve.py build/html + +# Targets for daily automated doc build + +# for development releases: always build +autobuild-dev: + make update + make dist SPHINXOPTS='-A daily=1' + +# for stable releases: only build if not in pre-release stage (alpha, beta, rc) +autobuild-stable: + @case $(DISTVERSION) in *[abc]*) \ + echo "Not building; $(DISTVERSION) is not a release version."; \ + exit 1;; \ + esac + @make autobuild-dev Modified: python/branches/py3k-jit/Doc/README.txt ============================================================================== --- python/branches/py3k-jit/Doc/README.txt (original) +++ python/branches/py3k-jit/Doc/README.txt Tue Mar 16 21:40:29 2010 @@ -77,25 +77,27 @@ Without make ------------ -You'll need to checkout the Sphinx package to the `tools/` directory:: +You'll need to install the Sphinx package, either by checking it out via :: - svn co http://svn.python.org/projects/external/Sphinx-0.6.1/sphinx tools/sphinx + svn co http://svn.python.org/projects/external/Sphinx-0.6.5/sphinx tools/sphinx + +or by installing it from PyPI. Then, you need to install Docutils, either by checking it out via :: - svn co http://svn.python.org/projects/external/docutils-0.5/docutils tools/docutils + svn co http://svn.python.org/projects/external/docutils-0.6/docutils tools/docutils or by installing it from http://docutils.sf.net/. You also need Jinja2, either by checking it out via :: - svn co http://svn.python.org/projects/external/Jinja-2.1.1/jinja2 tools/jinja2 + svn co http://svn.python.org/projects/external/Jinja-2.3.1/jinja2 tools/jinja2 or by installing it from PyPI. You can optionally also install Pygments, either as a checkout via :: - svn co http://svn.python.org/projects/external/Pygments-1.1.1/pygments tools/pygments + svn co http://svn.python.org/projects/external/Pygments-1.3.1/pygments tools/pygments or from PyPI at http://pypi.python.org/pypi/Pygments. Modified: python/branches/py3k-jit/Doc/bugs.rst ============================================================================== --- python/branches/py3k-jit/Doc/bugs.rst (original) +++ python/branches/py3k-jit/Doc/bugs.rst Tue Mar 16 21:40:29 2010 @@ -23,10 +23,9 @@ http://docs.python.org/dev to see if the bug has been fixed. If the problem you're reporting is not already in the bug tracker, go back to -the Python Bug Tracker. If you don't already have a tracker account, select the -"Register" link in the sidebar and undergo the registration procedure. -Otherwise, if you're not logged in, enter your credentials and select "Login". -It is not possible to submit a bug report anonymously. +the Python Bug Tracker and log in. If you don't already have a tracker account, +select the "Register" link or, if you use OpenID, one of the OpenID provider +logos in the sidebar. It is not possible to submit a bug report anonymously. Being now logged in, you can submit a bug. Select the "Create New" link in the sidebar to open the bug reporting form. @@ -43,7 +42,8 @@ Each bug report will be assigned to a developer who will determine what needs to be done to correct the problem. You will receive an update each time action is -taken on the bug. +taken on the bug. See http://www.python.org/dev/workflow/ for a detailed +description of the issue workflow. .. seealso:: Modified: python/branches/py3k-jit/Doc/c-api/exceptions.rst ============================================================================== --- python/branches/py3k-jit/Doc/c-api/exceptions.rst (original) +++ python/branches/py3k-jit/Doc/c-api/exceptions.rst Tue Mar 16 21:40:29 2010 @@ -214,7 +214,7 @@ .. note:: The `"%lld"` and `"%llu"` format specifiers are only available - when `HAVE_LONG_LONG` is defined. + when :const:`HAVE_LONG_LONG` is defined. .. versionchanged:: 3.2 Support for `"%lld"` and `"%llu"` added. @@ -471,6 +471,36 @@ This steals a reference to *ctx*. +Recursion Control +================= + +These two functions provide a way to perform safe recursive calls at the C +level, both in the core and in extension modules. They are needed if the +recursive code does not necessarily invoke Python code (which tracks its +recursion depth automatically). + +.. cfunction:: int Py_EnterRecursiveCall(char *where) + + Marks a point where a recursive C-level call is about to be performed. + + If :const:`USE_STACKCHECK` is defined, this function checks if the the OS + stack overflowed using :cfunc:`PyOS_CheckStack`. In this is the case, it + sets a :exc:`MemoryError` and returns a nonzero value. + + The function then checks if the recursion limit is reached. If this is the + case, a :exc:`RuntimeError` is set and a nonzero value is returned. + Otherwise, zero is returned. + + *where* should be a string such as ``" in instance check"`` to be + concatenated to the :exc:`RuntimeError` message caused by the recursion depth + limit. + +.. cfunction:: void Py_LeaveRecursiveCall() + + Ends a :cfunc:`Py_EnterRecursiveCall`. Must be called once for each + *successful* invocation of :cfunc:`Py_EnterRecursiveCall`. + + .. _standardexceptions: Standard Exceptions Modified: python/branches/py3k-jit/Doc/c-api/gcsupport.rst ============================================================================== --- python/branches/py3k-jit/Doc/c-api/gcsupport.rst (original) +++ python/branches/py3k-jit/Doc/c-api/gcsupport.rst Tue Mar 16 21:40:29 2010 @@ -28,7 +28,7 @@ Constructors for container types must conform to two rules: #. The memory for the object must be allocated using :cfunc:`PyObject_GC_New` - or :cfunc:`PyObject_GC_VarNew`. + or :cfunc:`PyObject_GC_NewVar`. #. Once all the fields which may contain references to other containers are initialized, it must call :cfunc:`PyObject_GC_Track`. Modified: python/branches/py3k-jit/Doc/c-api/typeobj.rst ============================================================================== --- python/branches/py3k-jit/Doc/c-api/typeobj.rst (original) +++ python/branches/py3k-jit/Doc/c-api/typeobj.rst Tue Mar 16 21:40:29 2010 @@ -182,7 +182,7 @@ instance; this is normally :cfunc:`PyObject_Del` if the instance was allocated using :cfunc:`PyObject_New` or :cfunc:`PyObject_VarNew`, or :cfunc:`PyObject_GC_Del` if the instance was allocated using - :cfunc:`PyObject_GC_New` or :cfunc:`PyObject_GC_VarNew`. + :cfunc:`PyObject_GC_New` or :cfunc:`PyObject_GC_NewVar`. This field is inherited by subtypes. Modified: python/branches/py3k-jit/Doc/c-api/unicode.rst ============================================================================== --- python/branches/py3k-jit/Doc/c-api/unicode.rst (original) +++ python/branches/py3k-jit/Doc/c-api/unicode.rst Tue Mar 16 21:40:29 2010 @@ -313,7 +313,7 @@ .. note:: The `"%lld"` and `"%llu"` format specifiers are only available - when `HAVE_LONG_LONG` is defined. + when :const:`HAVE_LONG_LONG` is defined. .. versionchanged:: 3.2 Support for `"%lld"` and `"%llu"` added. Modified: python/branches/py3k-jit/Doc/distutils/examples.rst ============================================================================== --- python/branches/py3k-jit/Doc/distutils/examples.rst (original) +++ python/branches/py3k-jit/Doc/distutils/examples.rst Tue Mar 16 21:40:29 2010 @@ -257,9 +257,9 @@ (maintainer and maintainer_email) must be supplied -If you use the reStructuredText syntax in the `long_description` field and +If you use the reStructuredText syntax in the ``long_description`` field and `docutils `_ is installed you can check if -the syntax is fine with the ``check`` command, using the `restructuredtext` +the syntax is fine with the ``check`` command, using the ``restructuredtext`` option. For example, if the :file:`setup.py` script is changed like this:: @@ -278,7 +278,7 @@ url='http://example.com', long_description=desc) Where the long description is broken, ``check`` will be able to detect it -by using the `docutils` parser:: +by using the :mod:`docutils` parser:: $ pythontrunk setup.py check --restructuredtext running check @@ -293,20 +293,20 @@ The :func:`distutils.core.setup` function provides a command-line interface that allows you to query the metadata fields of a project through the -`setup.py` script of a given project:: +:file:`setup.py` script of a given project:: $ python setup.py --name distribute -This call reads the `name` metadata by running the +This call reads the ``name`` metadata by running the :func:`distutils.core.setup` function. Although, when a source or binary distribution is created with Distutils, the metadata fields are written in a static file called :file:`PKG-INFO`. When a Distutils-based project is installed in Python, the :file:`PKG-INFO` file is copied alongside the modules and packages of the distribution under :file:`NAME-VERSION-pyX.X.egg-info`, -where `NAME` is the name of the project, `VERSION` its version as defined -in the Metadata, and `pyX.X` the major and minor version of Python like -`2.7` or `3.2`. +where ``NAME`` is the name of the project, ``VERSION`` its version as defined +in the Metadata, and ``pyX.X`` the major and minor version of Python like +``2.7`` or ``3.2``. You can read back this static file, by using the :class:`distutils.dist.DistributionMetadata` class and its Modified: python/branches/py3k-jit/Doc/distutils/uploading.rst ============================================================================== --- python/branches/py3k-jit/Doc/distutils/uploading.rst (original) +++ python/branches/py3k-jit/Doc/distutils/uploading.rst Tue Mar 16 21:40:29 2010 @@ -60,13 +60,13 @@ setup(name='Distutils', long_description=open('README.txt')) -In that case, `README.txt` is a regular reStructuredText text file located -in the root of the package besides `setup.py`. +In that case, :file:`README.txt` is a regular reStructuredText text file located +in the root of the package besides :file:`setup.py`. To prevent registering broken reStructuredText content, you can use the -:program:`rst2html` program that is provided by the `docutils` package +:program:`rst2html` program that is provided by the :mod:`docutils` package and check the ``long_description`` from the command line:: $ python setup.py --long-description | rst2html.py > output.html -`docutils` will display a warning if there's something wrong with your syntax. +:mod:`docutils` will display a warning if there's something wrong with your syntax. Modified: python/branches/py3k-jit/Doc/includes/email-alternative.py ============================================================================== --- python/branches/py3k-jit/Doc/includes/email-alternative.py (original) +++ python/branches/py3k-jit/Doc/includes/email-alternative.py Tue Mar 16 21:40:29 2010 @@ -1,4 +1,4 @@ -#! /usr/bin/python +#!/usr/bin/env python3 import smtplib Modified: python/branches/py3k-jit/Doc/includes/email-dir.py ============================================================================== --- python/branches/py3k-jit/Doc/includes/email-dir.py (original) +++ python/branches/py3k-jit/Doc/includes/email-dir.py Tue Mar 16 21:40:29 2010 @@ -1,4 +1,4 @@ -#!/usr/bin/env python +#!/usr/bin/env python3 """Send the contents of a directory as a MIME message.""" Modified: python/branches/py3k-jit/Doc/includes/email-unpack.py ============================================================================== --- python/branches/py3k-jit/Doc/includes/email-unpack.py (original) +++ python/branches/py3k-jit/Doc/includes/email-unpack.py Tue Mar 16 21:40:29 2010 @@ -1,4 +1,4 @@ -#!/usr/bin/env python +#!/usr/bin/env python3 """Unpack a MIME message into a directory of files.""" Modified: python/branches/py3k-jit/Doc/library/argparse.rst ============================================================================== --- python/branches/py3k-jit/Doc/library/argparse.rst (original) +++ python/branches/py3k-jit/Doc/library/argparse.rst Tue Mar 16 21:40:29 2010 @@ -855,7 +855,7 @@ However, quite often the command-line string should instead be interpreted as another type, like a :class:`float`, :class:`int` or :class:`file`. The ``type`` keyword argument of :meth:`add_argument` allows any necessary -type-checking and type-conversions to be performed. Many common builtin types +type-checking and type-conversions to be performed. Many common built-in types can be used directly as the value of the ``type`` argument:: >>> parser = argparse.ArgumentParser() Modified: python/branches/py3k-jit/Doc/library/bz2.rst ============================================================================== --- python/branches/py3k-jit/Doc/library/bz2.rst (original) +++ python/branches/py3k-jit/Doc/library/bz2.rst Tue Mar 16 21:40:29 2010 @@ -18,9 +18,10 @@ Here is a summary of the features offered by the bz2 module: * :class:`BZ2File` class implements a complete file interface, including - :meth:`readline`, :meth:`readlines`, :meth:`writelines`, :meth:`seek`, etc; + :meth:`~BZ2File.readline`, :meth:`~BZ2File.readlines`, + :meth:`~BZ2File.writelines`, :meth:`~BZ2File.seek`, etc; -* :class:`BZ2File` class implements emulated :meth:`seek` support; +* :class:`BZ2File` class implements emulated :meth:`~BZ2File.seek` support; * :class:`BZ2File` class implements universal newline support; @@ -73,15 +74,16 @@ .. method:: read([size]) - Read at most *size* uncompressed bytes, returned as a string. If the + Read at most *size* uncompressed bytes, returned as a byte string. If the *size* argument is negative or omitted, read until EOF is reached. .. method:: readline([size]) - Return the next line from the file, as a string, retaining newline. A - non-negative *size* argument limits the maximum number of bytes to return - (an incomplete line may be returned then). Return an empty string at EOF. + Return the next line from the file, as a byte string, retaining newline. + A non-negative *size* argument limits the maximum number of bytes to + return (an incomplete line may be returned then). Return an empty byte + string at EOF. .. method:: readlines([size]) @@ -111,15 +113,16 @@ .. method:: write(data) - Write string *data* to file. Note that due to buffering, :meth:`close` may - be needed before the file on disk reflects the data written. + Write the byte string *data* to file. Note that due to buffering, + :meth:`close` may be needed before the file on disk reflects the data + written. - .. method:: writelines(sequence_of_strings) + .. method:: writelines(sequence_of_byte_strings) - Write the sequence of strings to the file. Note that newlines are not - added. The sequence can be any iterable object producing strings. This is - equivalent to calling write() for each string. + Write the sequence of byte strings to the file. Note that newlines are not + added. The sequence can be any iterable object producing byte strings. + This is equivalent to calling write() for each byte string. Sequential (de)compression Modified: python/branches/py3k-jit/Doc/library/codecs.rst ============================================================================== --- python/branches/py3k-jit/Doc/library/codecs.rst (original) +++ python/branches/py3k-jit/Doc/library/codecs.rst Tue Mar 16 21:40:29 2010 @@ -1065,11 +1065,13 @@ +-----------------+--------------------------------+--------------------------------+ | iso8859_10 | iso-8859-10, latin6, L6 | Nordic languages | +-----------------+--------------------------------+--------------------------------+ -| iso8859_13 | iso-8859-13 | Baltic languages | +| iso8859_13 | iso-8859-13, latin7, L7 | Baltic languages | +-----------------+--------------------------------+--------------------------------+ | iso8859_14 | iso-8859-14, latin8, L8 | Celtic languages | +-----------------+--------------------------------+--------------------------------+ -| iso8859_15 | iso-8859-15 | Western Europe | +| iso8859_15 | iso-8859-15, latin9, L9 | Western Europe | ++-----------------+--------------------------------+--------------------------------+ +| iso8859_16 | iso-8859-16, latin10, L10 | South-Eastern Europe | +-----------------+--------------------------------+--------------------------------+ | johab | cp1361, ms1361 | Korean | +-----------------+--------------------------------+--------------------------------+ Modified: python/branches/py3k-jit/Doc/library/http.client.rst ============================================================================== --- python/branches/py3k-jit/Doc/library/http.client.rst (original) +++ python/branches/py3k-jit/Doc/library/http.client.rst Tue Mar 16 21:40:29 2010 @@ -498,7 +498,7 @@ .. attribute:: HTTPResponse.debuglevel - A debugging hook. If `debuglevel` is greater than zero, messages + A debugging hook. If :attr:`debuglevel` is greater than zero, messages will be printed to stdout as the response is read and parsed. Modified: python/branches/py3k-jit/Doc/library/logging.rst ============================================================================== --- python/branches/py3k-jit/Doc/library/logging.rst (original) +++ python/branches/py3k-jit/Doc/library/logging.rst Tue Mar 16 21:40:29 2010 @@ -420,6 +420,13 @@ code approach, mainly separation of configuration and code and the ability of noncoders to easily modify the logging properties. +Note that the class names referenced in config files need to be either relative +to the logging module, or absolute values which can be resolved using normal +import mechanisms. Thus, you could use either `handlers.WatchedFileHandler` +(relative to the logging module) or `mypackage.mymodule.MyHandler` (for a +class defined in package `mypackage` and module `mymodule`, where `mypackage` +is available on the Python import path). + .. _library-config: Configuring Logging for a Library @@ -1210,12 +1217,12 @@ :class:`Handler` subclass are passed to its :meth:`handleError` method. The default implementation of :meth:`handleError` in :class:`Handler` checks -to see if a module-level variable, `raiseExceptions`, is set. If set, a -traceback is printed to `sys.stderr`. If not set, the exception is swallowed. +to see if a module-level variable, :data:`raiseExceptions`, is set. If set, a +traceback is printed to :data:`sys.stderr`. If not set, the exception is swallowed. -**Note:** The default value of `raiseExceptions` is `True`. This is because +**Note:** The default value of :data:`raiseExceptions` is ``True``. This is because during development, you typically want to be notified of any exceptions that -occur. It's advised that you set `raiseExceptions` to `False` for production +occur. It's advised that you set :data:`raiseExceptions` to ``False`` for production usage. .. _context-info: @@ -1849,6 +1856,11 @@ The extensions are date-and-time based, using the strftime format ``%Y-%m-%d_%H-%M-%S`` or a leading portion thereof, depending on the rollover interval. + + When computing the next rollover time for the first time (when the handler + is created), the last modification time of an existing log file, or else + the current time, is used to compute when the next rotation will occur. + If the *utc* argument is true, times in UTC will be used; otherwise local time is used. @@ -2401,6 +2413,28 @@ because lock implementations in the :mod:`threading` module are not always re-entrant, and so cannot be invoked from such signal handlers. + +Integration with the warnings module +------------------------------------ + +The :func:`captureWarnings` function can be used to integrate :mod:`logging` +with the :mod:`warnings` module. + +.. function:: captureWarnings(capture) + + This function is used to turn the capture of warnings by logging on and + off. + + If `capture` is `True`, warnings issued by the :mod:`warnings` module + will be redirected to the logging system. Specifically, a warning will be + formatted using :func:`warnings.formatwarning` and the resulting string + logged to a logger named "py.warnings" with a severity of `WARNING`. + + If `capture` is `False`, the redirection of warnings to the logging system + will stop, and warnings will be redirected to their original destinations + (i.e. those in effect before `captureWarnings(True)` was called). + + Configuration ------------- Modified: python/branches/py3k-jit/Doc/library/pydoc.rst ============================================================================== --- python/branches/py3k-jit/Doc/library/pydoc.rst (original) +++ python/branches/py3k-jit/Doc/library/pydoc.rst Tue Mar 16 21:40:29 2010 @@ -54,7 +54,7 @@ :option:`-p 1234` will start a HTTP server on port 1234, allowing you to browse the documentation at ``http://localhost:1234/`` in your preferred Web browser. :program:`pydoc` :option:`-g` will start the server and additionally bring up a -small :mod:`Tkinter`\ -based graphical interface to help you search for +small :mod:`tkinter`\ -based graphical interface to help you search for documentation pages. When :program:`pydoc` generates documentation, it uses the current environment Modified: python/branches/py3k-jit/Doc/library/site.rst ============================================================================== --- python/branches/py3k-jit/Doc/library/site.rst (original) +++ python/branches/py3k-jit/Doc/library/site.rst Tue Mar 16 21:40:29 2010 @@ -124,9 +124,9 @@ .. function:: getuserbase() - Returns the `user base` directory path. + Returns the "user base" directory path. - The `user base` directory can be used to store data. If the global + The "user base" directory can be used to store data. If the global variable ``USER_BASE`` is not initialized yet, this function will also set it. Modified: python/branches/py3k-jit/Doc/library/stdtypes.rst ============================================================================== --- python/branches/py3k-jit/Doc/library/stdtypes.rst (original) +++ python/branches/py3k-jit/Doc/library/stdtypes.rst Tue Mar 16 21:40:29 2010 @@ -168,8 +168,9 @@ Furthermore, some types (for example, function objects) support only a degenerate notion of comparison where any two objects of that type are unequal. The ``<``, ``<=``, ``>`` and ``>=`` operators will raise a :exc:`TypeError` exception when -any operand is a complex number, the objects are of different types that cannot -be compared, or other cases where there is no defined ordering. +comparing a complex number with another built-in numeric type, when the objects +are of different types that cannot be compared, or in other cases where there is +no defined ordering. .. index:: single: __eq__() (instance method) Modified: python/branches/py3k-jit/Doc/library/subprocess.rst ============================================================================== --- python/branches/py3k-jit/Doc/library/subprocess.rst (original) +++ python/branches/py3k-jit/Doc/library/subprocess.rst Tue Mar 16 21:40:29 2010 @@ -28,7 +28,7 @@ This module defines one class called :class:`Popen`: -.. class:: Popen(args, bufsize=0, executable=None, stdin=None, stdout=None, stderr=None, preexec_fn=None, close_fds=False, shell=False, cwd=None, env=None, universal_newlines=False, startupinfo=None, creationflags=0) +.. class:: Popen(args, bufsize=0, executable=None, stdin=None, stdout=None, stderr=None, preexec_fn=None, close_fds=False, shell=False, cwd=None, env=None, universal_newlines=False, startupinfo=None, creationflags=0, restore_signals=True, start_new_session=False) Arguments are: @@ -41,7 +41,8 @@ name for the executing program in utilities such as :program:`ps`. On Unix, with *shell=False* (default): In this case, the Popen class uses - :meth:`os.execvp` to execute the child program. *args* should normally be a + :meth:`os.execvp` like behavior to execute the child program. + *args* should normally be a sequence. If a string is specified for *args*, it will be used as the name or path of the program to execute; this will only work if the program is being given no arguments. @@ -108,7 +109,23 @@ applications should be captured into the same file handle as for stdout. If *preexec_fn* is set to a callable object, this object will be called in the - child process just before the child is executed. (Unix only) + child process just before the child is executed. + (Unix only) + + .. warning:: + + The *preexec_fn* parameter is not safe to use in the presence of threads + in your application. The child process could deadlock before exec is + called. + If you must use it, keep it trivial! Minimize the number of libraries + you call into. + + .. note:: + + If you need to modify the environment for the child use the *env* + parameter rather than doing it in a *preexec_fn*. + The *start_new_session* parameter can take the place of a previously + common use of *preexec_fn* to call os.setsid() in the child. If *close_fds* is true, all file descriptors except :const:`0`, :const:`1` and :const:`2` will be closed before the child process is executed. (Unix only). @@ -124,9 +141,23 @@ searching the executable, so you can't specify the program's path relative to *cwd*. + If *restore_signals* is True (the default) all signals that Python has set to + SIG_IGN are restored to SIG_DFL in the child process before the exec. + Currently this includes the SIGPIPE, SIGXFZ and SIGXFSZ signals. + (Unix only) + + .. versionchanged:: 3.2 + *restore_signals* was added. + + If *start_new_session* is True the setsid() system call will be made in the + child process prior to the execution of the subprocess. (Unix only) + + .. versionchanged:: 3.2 + *start_new_session* was added. + If *env* is not ``None``, it must be a mapping that defines the environment - variables for the new process; these are used instead of inheriting the current - process' environment, which is the default behavior. + variables for the new process; these are used instead of the default + behavior of inheriting the current process' environment. .. note:: Modified: python/branches/py3k-jit/Doc/library/sys.rst ============================================================================== --- python/branches/py3k-jit/Doc/library/sys.rst (original) +++ python/branches/py3k-jit/Doc/library/sys.rst Tue Mar 16 21:40:29 2010 @@ -339,7 +339,7 @@ specific. If given, *default* will be returned if the object does not provide means to - retrieve the size. Otherwise a `TypeError` will be raised. + retrieve the size. Otherwise a :exc:`TypeError` will be raised. :func:`getsizeof` calls the object's ``__sizeof__`` method and adds an additional garbage collector overhead if the object is managed by the garbage Modified: python/branches/py3k-jit/Doc/library/test.rst ============================================================================== --- python/branches/py3k-jit/Doc/library/test.rst (original) +++ python/branches/py3k-jit/Doc/library/test.rst Tue Mar 16 21:40:29 2010 @@ -130,13 +130,13 @@ self.func(self.arg) class AcceptLists(TestFuncAcceptsSequences): - arg = [1,2,3] + arg = [1, 2, 3] class AcceptStrings(TestFuncAcceptsSequences): arg = 'abc' class AcceptTuples(TestFuncAcceptsSequences): - arg = (1,2,3) + arg = (1, 2, 3) .. seealso:: @@ -198,16 +198,9 @@ methods. -.. exception:: TestSkipped - - Subclass of :exc:`TestFailed`. Raised when a test is skipped. This occurs when a - needed resource (such as a network connection) is not available at the time of - testing. - - .. exception:: ResourceDenied - Subclass of :exc:`TestSkipped`. Raised when a resource (such as a network + Subclass of :exc:`unittest.SkipTest`. Raised when a resource (such as a network connection) is not available. Raised by the :func:`requires` function. The :mod:`test.support` module defines the following constants: @@ -227,7 +220,7 @@ .. data:: TESTFN - Set to the path that a temporary file may be created at. Any temporary that is + Set to the name that a temporary file could use. Any temporary file that is created should be closed and unlinked (removed). The :mod:`test.support` module defines the following functions: @@ -235,21 +228,21 @@ .. function:: forget(module_name) - Removes the module named *module_name* from ``sys.modules`` and deletes any + Remove the module named *module_name* from ``sys.modules`` and deletes any byte-compiled files of the module. .. function:: is_resource_enabled(resource) - Returns :const:`True` if *resource* is enabled and available. The list of + Return :const:`True` if *resource* is enabled and available. The list of available resources is only set when :mod:`test.regrtest` is executing the tests. .. function:: requires(resource, msg=None) - Raises :exc:`ResourceDenied` if *resource* is not available. *msg* is the - argument to :exc:`ResourceDenied` if it is raised. Always returns true if called + Raise :exc:`ResourceDenied` if *resource* is not available. *msg* is the + argument to :exc:`ResourceDenied` if it is raised. Always returns True if called by a function whose ``__name__`` is ``'__main__'``. Used when tests are executed by :mod:`test.regrtest`. @@ -277,14 +270,24 @@ This will run all tests defined in the named module. -.. function:: check_warnings() +.. function:: check_warnings(*filters, quiet=False) A convenience wrapper for ``warnings.catch_warnings()`` that makes it easier to test that a warning was correctly raised with a single assertion. It is approximately equivalent to calling ``warnings.catch_warnings(record=True)``. - The main difference is that on entry to the context manager, a + It accepts 2-tuples ``("message regexp", WarningCategory)`` as positional + arguments. When the optional keyword argument ``quiet`` is True, it does + not fail if a filter catches nothing. Without argument, it defaults to:: + + check_warnings(("", Warning), quiet=False) + + The main difference is that it verifies the warnings raised. If some filter + did not catch any warning, the test fails. If some warnings are not caught, + the test fails, too. To disable these checks, use argument ``quiet=True``. + + Another significant difference is that on entry to the context manager, a :class:`WarningRecorder` instance is returned instead of a simple list. The underlying warnings list is available via the recorder object's :attr:`warnings` attribute, while the attributes of the last raised @@ -294,19 +297,34 @@ A :meth:`reset` method is also provided on the recorder object. This method simply clears the warning list. - The context manager is used like this:: + The context manager may be used like this:: + + import warnings + + with check_warnings(): + exec('assert(False, "Hey!")') + warnings.warn(UserWarning("Hide me!")) - with check_warnings() as w: + with check_warnings(("assertion is always true", SyntaxWarning), + ("", UserWarning)): + exec('assert(False, "Hey!")') + warnings.warn(UserWarning("Hide me!")) + + with check_warnings(quiet=True) as w: warnings.simplefilter("always") warnings.warn("foo") - assert str(w.message) == "foo" + assert str(w.args[0]) == "foo" warnings.warn("bar") - assert str(w.message) == "bar" - assert str(w.warnings[0].message) == "foo" - assert str(w.warnings[1].message) == "bar" + assert str(w.args[0]) == "bar" + assert str(w.warnings[0].args[0]) == "foo" + assert str(w.warnings[1].args[0]) == "bar" w.reset() assert len(w.warnings) == 0 + .. versionchanged:: 2.7 + The test fails when the context manager do not catch any warning. + New optional attributes ``*filters`` and ``quiet``. + .. function:: captured_stdout() Modified: python/branches/py3k-jit/Doc/library/tkinter.rst ============================================================================== --- python/branches/py3k-jit/Doc/library/tkinter.rst (original) +++ python/branches/py3k-jit/Doc/library/tkinter.rst Tue Mar 16 21:40:29 2010 @@ -30,8 +30,8 @@ Tkinter Modules --------------- -Most of the time, the :mod:`tkinter` is all you really need, but a number -of additional modules are available as well. The Tk interface is located in a +Most of the time, :mod:`tkinter` is all you really need, but a number of +additional modules are available as well. The Tk interface is located in a binary module named :mod:`_tkinter`. This module contains the low-level interface to Tk, and should never be used directly by application programmers. It is usually a shared library (or DLL), but might in some cases be statically @@ -112,13 +112,13 @@ Credits: -* Tkinter was written by Steen Lumholt and Guido van Rossum. - * Tk was written by John Ousterhout while at Berkeley. +* Tkinter was written by Steen Lumholt and Guido van Rossum. + * This Life Preserver was written by Matt Conway at the University of Virginia. -* The html rendering, and some liberal editing, was produced from a FrameMaker +* The HTML rendering, and some liberal editing, was produced from a FrameMaker version by Ken Manheimer. * Fredrik Lundh elaborated and revised the class interface descriptions, to get @@ -143,10 +143,10 @@ can't fulfill that role, so the best we can do is point you to the best documentation that exists. Here are some hints: -* The authors strongly suggest getting a copy of the Tk man pages. Specifically, - the man pages in the ``mann`` directory are most useful. The ``man3`` man pages - describe the C interface to the Tk library and thus are not especially helpful - for script writers. +* The authors strongly suggest getting a copy of the Tk man pages. + Specifically, the man pages in the ``manN`` directory are most useful. + The ``man3`` man pages describe the C interface to the Tk library and thus + are not especially helpful for script writers. * Addison-Wesley publishes a book called Tcl and the Tk Toolkit by John Ousterhout (ISBN 0-201-63337-X) which is a good introduction to Tcl and Tk for @@ -159,6 +159,9 @@ .. seealso:: + `Tcl/Tk 8.6 man pages `_ + The Tcl/Tk manual on www.tcl.tk. + `ActiveState Tcl Home Page `_ The Tk/Tcl development is largely taking place at ActiveState. @@ -183,8 +186,8 @@ def createWidgets(self): self.QUIT = Button(self) self.QUIT["text"] = "QUIT" - self.QUIT["fg"] = "red" - self.QUIT["command"] = self.quit + self.QUIT["fg"] = "red" + self.QUIT["command"] = self.quit self.QUIT.pack({"side": "left"}) @@ -257,7 +260,7 @@ For example:: button .fred -fg red -text "hi there" - ^ ^ \_____________________/ + ^ ^ \______________________/ | | | class new options command widget (-opt val -opt val ...) @@ -301,15 +304,15 @@ dictionary style, for established instances. See section :ref:`tkinter-setting-options` on setting options. :: - button .fred -fg red =====> fred = Button(panel, fg = "red") + button .fred -fg red =====> fred = Button(panel, fg="red") .fred configure -fg red =====> fred["fg"] = red - OR ==> fred.config(fg = "red") + OR ==> fred.config(fg="red") In Tk, to perform an action on a widget, use the widget name as a command, and follow it with an action name, possibly with arguments (options). In Tkinter, you call methods on the class instance to invoke actions on the widget. The -actions (methods) that a given widget can perform are listed in the Tkinter.py -module. :: +actions (methods) that a given widget can perform are listed in +:file:`tkinter/__init__.py`. :: .fred invoke =====> fred.invoke() @@ -320,7 +323,7 @@ methods. See the :mod:`tkinter.tix` module documentation for additional information on the Form geometry manager. :: - pack .fred -side left =====> fred.pack(side = "left") + pack .fred -side left =====> fred.pack(side="left") How Tk and Tkinter are Related @@ -332,14 +335,15 @@ A Python application makes a :mod:`tkinter` call. tkinter (Python Package) - This call (say, for example, creating a button widget), is implemented in the - *tkinter* package, which is written in Python. This Python function will parse - the commands and the arguments and convert them into a form that makes them look - as if they had come from a Tk script instead of a Python script. + This call (say, for example, creating a button widget), is implemented in + the :mod:`tkinter` package, which is written in Python. This Python + function will parse the commands and the arguments and convert them into a + form that makes them look as if they had come from a Tk script instead of + a Python script. -tkinter (C) +_tkinter (C) These commands and their arguments will be passed to a C function in the - *tkinter* - note the lowercase - extension module. + :mod:`_tkinter` - note the underscore - extension module. Tk Widgets (C and Tcl) This C function is able to make calls into other C modules, including the C @@ -370,7 +374,7 @@ At object creation time, using keyword arguments :: - fred = Button(self, fg = "red", bg = "blue") + fred = Button(self, fg="red", bg="blue") After object creation, treating the option name like a dictionary index :: @@ -381,7 +385,7 @@ Use the config() method to update multiple attrs subsequent to object creation :: - fred.config(fg = "red", bg = "blue") + fred.config(fg="red", bg="blue") For a complete explanation of a given option and its behavior, see the Tk man pages for the widget in question. @@ -464,8 +468,8 @@ the main application window is resized. Here are some examples:: fred.pack() # defaults to side = "top" - fred.pack(side = "left") - fred.pack(expand = 1) + fred.pack(side="left") + fred.pack(expand=1) Packer Options @@ -506,7 +510,7 @@ possible to hand over an arbitrary Python variable to a widget through a ``variable`` or ``textvariable`` option. The only kinds of variables for which this works are variables that are subclassed from a class called Variable, -defined in the :mod:`tkinter`. +defined in :mod:`tkinter`. There are many useful subclasses of Variable already defined: :class:`StringVar`, :class:`IntVar`, :class:`DoubleVar`, and @@ -606,7 +610,7 @@ This is any Python function that takes no arguments. For example:: def print_it(): - print("hi there") + print("hi there") fred["command"] = print_it color @@ -702,24 +706,32 @@ :meth:`turnRed` callback. This field contains the widget that caught the X event. The following table lists the other event fields you can access, and how they are denoted in Tk, which can be useful when referring to the Tk man pages. -:: - Tk Tkinter Event Field Tk Tkinter Event Field - -- ------------------- -- ------------------- - %f focus %A char - %h height %E send_event - %k keycode %K keysym - %s state %N keysym_num - %t time %T type - %w width %W widget - %x x %X x_root - %y y %Y y_root ++----+---------------------+----+---------------------+ +| Tk | Tkinter Event Field | Tk | Tkinter Event Field | ++====+=====================+====+=====================+ +| %f | focus | %A | char | ++----+---------------------+----+---------------------+ +| %h | height | %E | send_event | ++----+---------------------+----+---------------------+ +| %k | keycode | %K | keysym | ++----+---------------------+----+---------------------+ +| %s | state | %N | keysym_num | ++----+---------------------+----+---------------------+ +| %t | time | %T | type | ++----+---------------------+----+---------------------+ +| %w | width | %W | widget | ++----+---------------------+----+---------------------+ +| %x | x | %X | x_root | ++----+---------------------+----+---------------------+ +| %y | y | %Y | y_root | ++----+---------------------+----+---------------------+ The index Parameter ^^^^^^^^^^^^^^^^^^^ -A number of widgets require"index" parameters to be passed. These are used to +A number of widgets require "index" parameters to be passed. These are used to point at a specific place in a Text widget, or to particular characters in an Entry widget, or to particular menu items in a Menu widget. @@ -755,7 +767,7 @@ * an integer which refers to the numeric position of the entry in the widget, counted from the top, starting with 0; - * the string ``'active'``, which refers to the menu position that is currently + * the string ``"active"``, which refers to the menu position that is currently under the cursor; * the string ``"last"`` which refers to the last menu item; Modified: python/branches/py3k-jit/Doc/library/tkinter.tix.rst ============================================================================== --- python/branches/py3k-jit/Doc/library/tkinter.tix.rst (original) +++ python/branches/py3k-jit/Doc/library/tkinter.tix.rst Tue Mar 16 21:40:29 2010 @@ -84,7 +84,7 @@ ----------- `Tix `_ -introduces over 40 widget classes to the :mod:`Tkinter` repertoire. There is a +introduces over 40 widget classes to the :mod:`tkinter` repertoire. There is a demo of all the :mod:`tkinter.tix` widgets in the :file:`Demo/tix` directory of the standard distribution. Modified: python/branches/py3k-jit/Doc/library/tkinter.ttk.rst ============================================================================== --- python/branches/py3k-jit/Doc/library/tkinter.ttk.rst (original) +++ python/branches/py3k-jit/Doc/library/tkinter.ttk.rst Tue Mar 16 21:40:29 2010 @@ -116,12 +116,13 @@ | | for the parent widget. | +-----------+--------------------------------------------------------------+ | takefocus | Determines whether the window accepts the focus during | - | | keyboard traversal. 0, 1 or an empty is return. If 0 is | - | | returned, it means that the window should be skipped entirely| - | | during keyboard traversal. If 1, it means that the window | - | | should receive the input focus as long as it is viewable. And| - | | an empty string means that the traversal scripts make the | - | | decision about whether or not to focus on the window. | + | | keyboard traversal. 0, 1 or an empty string is returned. | + | | If 0 is returned, it means that the window should be skipped | + | | entirely during keyboard traversal. If 1, it means that the | + | | window should receive the input focus as long as it is | + | | viewable. And an empty string means that the traversal | + | | scripts make the decision about whether or not to focus | + | | on the window. | +-----------+--------------------------------------------------------------+ | style | May be used to specify a custom widget style. | +-----------+--------------------------------------------------------------+ Modified: python/branches/py3k-jit/Doc/library/traceback.rst ============================================================================== --- python/branches/py3k-jit/Doc/library/traceback.rst (original) +++ python/branches/py3k-jit/Doc/library/traceback.rst Tue Mar 16 21:40:29 2010 @@ -172,12 +172,12 @@ try: lumberjack() - except: - exceptionType, exceptionValue, exceptionTraceback = sys.exc_info() + except IndexError: + exc_type, exc_value, exc_traceback = sys.exc_info() print("*** print_tb:") - traceback.print_tb(exceptionTraceback, limit=1, file=sys.stdout) + traceback.print_tb(exc_traceback, limit=1, file=sys.stdout) print("*** print_exception:") - traceback.print_exception(exceptionType, exceptionValue, exceptionTraceback, + traceback.print_exception(exc_type, exc_value, exc_traceback, limit=2, file=sys.stdout) print("*** print_exc:") traceback.print_exc() @@ -186,13 +186,13 @@ print(formatted_lines[0]) print(formatted_lines[-1]) print("*** format_exception:") - print(repr(traceback.format_exception(exceptionType, exceptionValue, - exceptionTraceback))) + print(repr(traceback.format_exception(exc_type, exc_value, + exc_traceback))) print("*** extract_tb:") - print(repr(traceback.extract_tb(exceptionTraceback))) + print(repr(traceback.extract_tb(exc_traceback))) print("*** format_tb:") - print(repr(traceback.format_tb(exceptionTraceback))) - print("*** tb_lineno:", traceback.tb_lineno(exceptionTraceback)) + print(repr(traceback.format_tb(exc_traceback))) + print("*** tb_lineno:", exc_traceback.tb_lineno) The output for the example would look similar to this: Modified: python/branches/py3k-jit/Doc/library/turtle.rst ============================================================================== --- python/branches/py3k-jit/Doc/library/turtle.rst (original) +++ python/branches/py3k-jit/Doc/library/turtle.rst Tue Mar 16 21:40:29 2010 @@ -35,13 +35,13 @@ the module from within IDLE run with the ``-n`` switch. The turtle module provides turtle graphics primitives, in both object-oriented -and procedure-oriented ways. Because it uses :mod:`Tkinter` for the underlying +and procedure-oriented ways. Because it uses :mod:`tkinter` for the underlying graphics, it needs a version of Python installed with Tk support. The object-oriented interface uses essentially two+two classes: 1. The :class:`TurtleScreen` class defines graphics windows as a playground for - the drawing turtles. Its constructor needs a :class:`Tkinter.Canvas` or a + the drawing turtles. Its constructor needs a :class:`tkinter.Canvas` or a :class:`ScrolledCanvas` as argument. It should be used when :mod:`turtle` is used as part of some application. @@ -1998,7 +1998,7 @@ .. class:: RawTurtle(canvas) RawPen(canvas) - :param canvas: a :class:`Tkinter.Canvas`, a :class:`ScrolledCanvas` or a + :param canvas: a :class:`tkinter.Canvas`, a :class:`ScrolledCanvas` or a :class:`TurtleScreen` Create a turtle. The turtle has all methods described above as "methods of @@ -2013,7 +2013,7 @@ .. class:: TurtleScreen(cv) - :param cv: a :class:`Tkinter.Canvas` + :param cv: a :class:`tkinter.Canvas` Provides screen oriented methods like :func:`setbg` etc. that are described above. Modified: python/branches/py3k-jit/Doc/library/unittest.rst ============================================================================== --- python/branches/py3k-jit/Doc/library/unittest.rst (original) +++ python/branches/py3k-jit/Doc/library/unittest.rst Tue Mar 16 21:40:29 2010 @@ -177,14 +177,18 @@ self.seq.sort() self.assertEqual(self.seq, list(range(10))) + # should raise an exception for an immutable sequence + self.assertRaises(TypeError, random.shuffle, (1,2,3)) + def test_choice(self): element = random.choice(self.seq) - self.assertIn(element, self.seq) + self.assertTrue(element in self.seq) def test_sample(self): - self.assertRaises(ValueError, random.sample, self.seq, 20) + with self.assertRaises(ValueError): + random.sample(self.seq, 20) for element in random.sample(self.seq, 5): - self.assertIn(element, self.seq) + self.assertTrue(element in self.seq) if __name__ == '__main__': unittest.main() @@ -676,7 +680,7 @@ will be *msg* if given, otherwise it will be :const:`None`. .. deprecated:: 3.1 - :meth:`failUnless`. + :meth:`failUnless`; use one of the ``assert`` variants. :meth:`assert_`; use :meth:`assertTrue`. @@ -704,7 +708,7 @@ function for comparing strings. .. deprecated:: 3.1 - :meth:`failUnlessEqual`. + :meth:`failUnlessEqual`; use :meth:`assertEqual`. .. method:: assertNotEqual(first, second, msg=None) @@ -718,7 +722,7 @@ *first* and *second*. .. deprecated:: 3.1 - :meth:`failIfEqual`. + :meth:`failIfEqual`; use :meth:`assertNotEqual`. .. method:: assertAlmostEqual(first, second, *, places=7, msg=None) @@ -737,7 +741,7 @@ Objects that compare equal are automatically almost equal. .. deprecated:: 3.1 - :meth:`failUnlessAlmostEqual`. + :meth:`failUnlessAlmostEqual`; use :meth:`assertAlmostEqual`. .. method:: assertNotAlmostEqual(first, second, *, places=7, msg=None) @@ -756,7 +760,7 @@ Objects that compare equal automatically fail. .. deprecated:: 3.1 - :meth:`failIfAlmostEqual`. + :meth:`failIfAlmostEqual`; use :meth:`assertNotAlmostEqual`. .. method:: assertGreater(first, second, msg=None) @@ -923,7 +927,7 @@ Added the :attr:`exception` attribute. .. deprecated:: 3.1 - :meth:`failUnlessRaises`. + :meth:`failUnlessRaises`; use :meth:`assertRaises`. .. method:: assertRaisesRegexp(exception, regexp[, callable, ...]) @@ -1000,7 +1004,7 @@ for the error message. .. deprecated:: 3.1 - :meth:`failIf`. + :meth:`failIf`; use :meth:`assertFalse`. .. method:: fail(msg=None) Modified: python/branches/py3k-jit/Doc/library/xml.etree.elementtree.rst ============================================================================== --- python/branches/py3k-jit/Doc/library/xml.etree.elementtree.rst (original) +++ python/branches/py3k-jit/Doc/library/xml.etree.elementtree.rst Tue Mar 16 21:40:29 2010 @@ -6,9 +6,9 @@ .. moduleauthor:: Fredrik Lundh -The Element type is a flexible container object, designed to store hierarchical -data structures in memory. The type can be described as a cross between a list -and a dictionary. +The :class:`Element` type is a flexible container object, designed to store +hierarchical data structures in memory. The type can be described as a cross +between a list and a dictionary. Each element has a number of properties associated with it: @@ -23,7 +23,8 @@ * a number of child elements, stored in a Python sequence -To create an element instance, use the Element or SubElement factory functions. +To create an element instance, use the :class:`Element` constructor or the +:func:`SubElement` factory function. The :class:`ElementTree` class can be used to wrap an element structure, and convert it from and to XML. @@ -31,8 +32,14 @@ A C implementation of this API is available as :mod:`xml.etree.cElementTree`. See http://effbot.org/zone/element-index.htm for tutorials and links to other -docs. Fredrik Lundh's page is also the location of the development version of the -xml.etree.ElementTree. +docs. Fredrik Lundh's page is also the location of the development version of +the xml.etree.ElementTree. + +.. versionchanged:: 2.7 + The ElementTree API is updated to 1.3. For more information, see + `Introducing ElementTree 1.3 + `_. + .. _elementtree-functions: @@ -43,16 +50,16 @@ .. function:: Comment(text=None) Comment element factory. This factory function creates a special element - that will be serialized as an XML comment. The comment string can be either - an ASCII-only :class:`bytes` object or a :class:`str` object. *text* is a - string containing the comment string. Returns an element instance + that will be serialized as an XML comment by the standard serializer. The + comment string can be either a bytestring or a Unicode string. *text* is a + string containing the comment string. Returns an element instance representing a comment. .. function:: dump(elem) - Writes an element tree or element structure to sys.stdout. This function should - be used for debugging only. + Writes an element tree or element structure to sys.stdout. This function + should be used for debugging only. The exact output format is implementation dependent. In this version, it's written as an ordinary XML file. @@ -60,38 +67,36 @@ *elem* is an element tree or an individual element. -.. function:: Element(tag, attrib={}, **extra) +.. function:: fromstring(text) - Element factory. This function returns an object implementing the standard - Element interface. The exact class or type of that object is implementation - dependent, but it will always be compatible with the _ElementInterface class in - this module. - - The element name, attribute names, and attribute values can be either an - ASCII-only :class:`bytes` object or a :class:`str` object. *tag* is the - element name. *attrib* is an optional dictionary, containing element - attributes. *extra* contains additional attributes, given as keyword - arguments. Returns an element instance. + Parses an XML section from a string constant. Same as :func:`XML`. *text* + is a string containing XML data. Returns an :class:`Element` instance. -.. function:: fromstring(text) +.. function:: fromstringlist(sequence, parser=None) - Parses an XML section from a string constant. Same as XML. *text* is a string - containing XML data. Returns an Element instance. + Parses an XML document from a sequence of string fragments. *sequence* is a + list or other sequence containing XML data fragments. *parser* is an + optional parser instance. If not given, the standard :class:`XMLParser` + parser is used. Returns an :class:`Element` instance. + + .. versionadded:: 2.7 .. function:: iselement(element) - Checks if an object appears to be a valid element object. *element* is an - element instance. Returns a true value if this is an element object. + Checks if an object appears to be a valid element object. *element* is an + element instance. Returns a true value if this is an element object. -.. function:: iterparse(source, events=None) +.. function:: iterparse(source, events=None, parser=None) Parses an XML section into an element tree incrementally, and reports what's - going on to the user. *source* is a filename or file object containing XML data. - *events* is a list of events to report back. If omitted, only "end" events are - reported. Returns an :term:`iterator` providing ``(event, elem)`` pairs. + going on to the user. *source* is a filename or file object containing XML + data. *events* is a list of events to report back. If omitted, only "end" + events are reported. *parser* is an optional parser instance. If not + given, the standard :class:`XMLParser` parser is used. Returns an + :term:`iterator` providing ``(event, elem)`` pairs. .. note:: @@ -106,196 +111,269 @@ .. function:: parse(source, parser=None) - Parses an XML section into an element tree. *source* is a filename or file - object containing XML data. *parser* is an optional parser instance. If not - given, the standard XMLTreeBuilder parser is used. Returns an ElementTree - instance. + Parses an XML section into an element tree. *source* is a filename or file + object containing XML data. *parser* is an optional parser instance. If + not given, the standard :class:`XMLParser` parser is used. Returns an + :class:`ElementTree` instance. .. function:: ProcessingInstruction(target, text=None) - PI element factory. This factory function creates a special element that will - be serialized as an XML processing instruction. *target* is a string containing - the PI target. *text* is a string containing the PI contents, if given. Returns - an element instance, representing a processing instruction. + PI element factory. This factory function creates a special element that + will be serialized as an XML processing instruction. *target* is a string + containing the PI target. *text* is a string containing the PI contents, if + given. Returns an element instance, representing a processing instruction. + + +.. function:: register_namespace(prefix, uri) + + Registers a namespace prefix. The registry is global, and any existing + mapping for either the given prefix or the namespace URI will be removed. + *prefix* is a namespace prefix. *uri* is a namespace uri. Tags and + attributes in this namespace will be serialized with the given prefix, if at + all possible. + + .. versionadded:: 2.7 .. function:: SubElement(parent, tag, attrib={}, **extra) - Subelement factory. This function creates an element instance, and appends it - to an existing element. + Subelement factory. This function creates an element instance, and appends + it to an existing element. + + The element name, attribute names, and attribute values can be either + bytestrings or Unicode strings. *parent* is the parent element. *tag* is + the subelement name. *attrib* is an optional dictionary, containing element + attributes. *extra* contains additional attributes, given as keyword + arguments. Returns an element instance. + + +.. function:: tostring(element, encoding=None, method="xml") + + Generates a string representation of an XML element, including all + subelements. *element* is an :class:`Element` instance. *encoding* [1]_ is + the output encoding (default is None). *method* is either ``"xml"``, + ``"html"`` or ``"text"`` (default is ``"xml"``). Returns an (optionally) + encoded string containing the XML data. - The element name, attribute names, and attribute values can be an ASCII-only - :class:`bytes` object or a :class:`str` object. *parent* is the parent - element. *tag* is the subelement name. *attrib* is an optional dictionary, - containing element attributes. *extra* contains additional attributes, given - as keyword arguments. Returns an element instance. +.. function:: tostringlist(element, encoding=None, method="xml") -.. function:: tostring(element, encoding=None) + Generates a string representation of an XML element, including all + subelements. *element* is an :class:`Element` instance. *encoding* [1]_ is + the output encoding (default is None). *method* is either ``"xml"``, + ``"html"`` or ``"text"`` (default is ``"xml"``). Returns a list of + (optionally) encoded strings containing the XML data. It does not guarantee + any specific sequence, except that ``"".join(tostringlist(element)) == + tostring(element)``. - Generates a string representation of an XML element, including all subelements. - *element* is an Element instance. *encoding* is the output encoding (default is - US-ASCII). Returns an encoded string containing the XML data. + .. versionadded:: 2.7 -.. function:: XML(text) +.. function:: XML(text, parser=None) Parses an XML section from a string constant. This function can be used to - embed "XML literals" in Python code. *text* is a string containing XML data. - Returns an Element instance. + embed "XML literals" in Python code. *text* is a string containing XML + data. *parser* is an optional parser instance. If not given, the standard + :class:`XMLParser` parser is used. Returns an :class:`Element` instance. -.. function:: XMLID(text) +.. function:: XMLID(text, parser=None) Parses an XML section from a string constant, and also returns a dictionary - which maps from element id:s to elements. *text* is a string containing XML - data. Returns a tuple containing an Element instance and a dictionary. + which maps from element id:s to elements. *text* is a string containing XML + data. *parser* is an optional parser instance. If not given, the standard + :class:`XMLParser` parser is used. Returns a tuple containing an + :class:`Element` instance and a dictionary. -.. _elementtree-element-interface: +.. _elementtree-element-objects: -The Element Interface ---------------------- +Element Objects +--------------- -Element objects returned by Element or SubElement have the following methods -and attributes. +.. class:: Element(tag, attrib={}, **extra) -.. attribute:: Element.tag + Element class. This class defines the Element interface, and provides a + reference implementation of this interface. - A string identifying what kind of data this element represents (the element - type, in other words). + The element name, attribute names, and attribute values can be either + bytestrings or Unicode strings. *tag* is the element name. *attrib* is + an optional dictionary, containing element attributes. *extra* contains + additional attributes, given as keyword arguments. -.. attribute:: Element.text + .. attribute:: tag - The *text* attribute can be used to hold additional data associated with the - element. As the name implies this attribute is usually a string but may be any - application-specific object. If the element is created from an XML file the - attribute will contain any text found between the element tags. + A string identifying what kind of data this element represents (the + element type, in other words). -.. attribute:: Element.tail + .. attribute:: text - The *tail* attribute can be used to hold additional data associated with the - element. This attribute is usually a string but may be any application-specific - object. If the element is created from an XML file the attribute will contain - any text found after the element's end tag and before the next tag. + The *text* attribute can be used to hold additional data associated with + the element. As the name implies this attribute is usually a string but + may be any application-specific object. If the element is created from + an XML file the attribute will contain any text found between the element + tags. -.. attribute:: Element.attrib + .. attribute:: tail - A dictionary containing the element's attributes. Note that while the *attrib* - value is always a real mutable Python dictionary, an ElementTree implementation - may choose to use another internal representation, and create the dictionary - only if someone asks for it. To take advantage of such implementations, use the - dictionary methods below whenever possible. + The *tail* attribute can be used to hold additional data associated with + the element. This attribute is usually a string but may be any + application-specific object. If the element is created from an XML file + the attribute will contain any text found after the element's end tag and + before the next tag. -The following dictionary-like methods work on the element attributes. + .. attribute:: attrib -.. method:: Element.clear() + A dictionary containing the element's attributes. Note that while the + *attrib* value is always a real mutable Python dictionary, an ElementTree + implementation may choose to use another internal representation, and + create the dictionary only if someone asks for it. To take advantage of + such implementations, use the dictionary methods below whenever possible. - Resets an element. This function removes all subelements, clears all - attributes, and sets the text and tail attributes to None. + The following dictionary-like methods work on the element attributes. -.. method:: Element.get(key, default=None) + .. method:: clear() - Gets the element attribute named *key*. + Resets an element. This function removes all subelements, clears all + attributes, and sets the text and tail attributes to None. - Returns the attribute value, or *default* if the attribute was not found. + .. method:: get(key, default=None) -.. method:: Element.items() + Gets the element attribute named *key*. - Returns the element attributes as a sequence of (name, value) pairs. The - attributes are returned in an arbitrary order. + Returns the attribute value, or *default* if the attribute was not found. -.. method:: Element.keys() + .. method:: items() - Returns the elements attribute names as a list. The names are returned in an - arbitrary order. + Returns the element attributes as a sequence of (name, value) pairs. The + attributes are returned in an arbitrary order. -.. method:: Element.set(key, value) + .. method:: keys() - Set the attribute *key* on the element to *value*. + Returns the elements attribute names as a list. The names are returned + in an arbitrary order. -The following methods work on the element's children (subelements). + .. method:: set(key, value) -.. method:: Element.append(subelement) + Set the attribute *key* on the element to *value*. - Adds the element *subelement* to the end of this elements internal list of - subelements. + The following methods work on the element's children (subelements). -.. method:: Element.find(match) + .. method:: append(subelement) - Finds the first subelement matching *match*. *match* may be a tag name or path. - Returns an element instance or ``None``. + Adds the element *subelement* to the end of this elements internal list + of subelements. -.. method:: Element.findall(match) + .. method:: extend(subelements) - Finds all subelements matching *match*. *match* may be a tag name or path. - Returns an iterable yielding all matching elements in document order. + Appends *subelements* from a sequence object with zero or more elements. + Raises :exc:`AssertionError` if a subelement is not a valid object. + .. versionadded:: 2.7 -.. method:: Element.findtext(condition, default=None) - Finds text for the first subelement matching *condition*. *condition* may be a - tag name or path. Returns the text content of the first matching element, or - *default* if no element was found. Note that if the matching element has no - text content an empty string is returned. + .. method:: find(match) + Finds the first subelement matching *match*. *match* may be a tag name + or path. Returns an element instance or ``None``. + + + .. method:: findall(match) + + Finds all matching subelements, by tag name or path. Returns a list + containing all matching elements in document order. + + + .. method:: findtext(match, default=None) + + Finds text for the first subelement matching *match*. *match* may be + a tag name or path. Returns the text content of the first matching + element, or *default* if no element was found. Note that if the matching + element has no text content an empty string is returned. + + + .. method:: getchildren() + + .. deprecated:: 2.7 + Use ``list(elem)`` or iteration. + + + .. method:: getiterator(tag=None) -.. method:: Element.getchildren() + .. deprecated:: 2.7 + Use method :meth:`Element.iter` instead. - Returns all subelements. The elements are returned in document order. + .. method:: insert(index, element) -.. method:: Element.getiterator(tag=None) + Inserts a subelement at the given position in this element. - Creates a tree iterator with the current element as the root. The iterator - iterates over this element and all elements below it, in document (depth first) - order. If *tag* is not ``None`` or ``'*'``, only elements whose tag equals - *tag* are returned from the iterator. + .. method:: iter(tag=None) -.. method:: Element.insert(index, element) + Creates a tree :term:`iterator` with the current element as the root. + The iterator iterates over this element and all elements below it, in + document (depth first) order. If *tag* is not ``None`` or ``'*'``, only + elements whose tag equals *tag* are returned from the iterator. If the + tree structure is modified during iteration, the result is undefined. - Inserts a subelement at the given position in this element. + .. method:: iterfind(match) -.. method:: Element.makeelement(tag, attrib) + Finds all matching subelements, by tag name or path. Returns an iterable + yielding all matching elements in document order. - Creates a new element object of the same type as this element. Do not call this - method, use the SubElement factory function instead. + .. versionadded:: 2.7 -.. method:: Element.remove(subelement) + .. method:: itertext() - Removes *subelement* from the element. Unlike the findXYZ methods this method - compares elements based on the instance identity, not on tag value or contents. + Creates a text iterator. The iterator loops over this element and all + subelements, in document order, and returns all inner text. -Element objects also support the following sequence type methods for working -with subelements: :meth:`__delitem__`, :meth:`__getitem__`, :meth:`__setitem__`, -:meth:`__len__`. + .. versionadded:: 2.7 -Caution: Because Element objects do not define a :meth:`__bool__` method, -elements with no subelements will test as ``False``. :: - element = root.find('foo') + .. method:: makeelement(tag, attrib) - if not element: # careful! - print("element not found, or element has no subelements") + Creates a new element object of the same type as this element. Do not + call this method, use the :func:`SubElement` factory function instead. - if element is None: - print("element not found") + + .. method:: remove(subelement) + + Removes *subelement* from the element. Unlike the find\* methods this + method compares elements based on the instance identity, not on tag value + or contents. + + :class:`Element` objects also support the following sequence type methods + for working with subelements: :meth:`__delitem__`, :meth:`__getitem__`, + :meth:`__setitem__`, :meth:`__len__`. + + Caution: Elements with no subelements will test as ``False``. This behavior + will change in future versions. Use specific ``len(elem)`` or ``elem is + None`` test instead. :: + + element = root.find('foo') + + if not element: # careful! + print("element not found, or element has no subelements") + + if element is None: + print("element not found") .. _elementtree-elementtree-objects: @@ -306,70 +384,88 @@ .. class:: ElementTree(element=None, file=None) - ElementTree wrapper class. This class represents an entire element hierarchy, - and adds some extra support for serialization to and from standard XML. + ElementTree wrapper class. This class represents an entire element + hierarchy, and adds some extra support for serialization to and from + standard XML. - *element* is the root element. The tree is initialized with the contents of the - XML *file* if given. + *element* is the root element. The tree is initialized with the contents + of the XML *file* if given. .. method:: _setroot(element) Replaces the root element for this tree. This discards the current contents of the tree, and replaces it with the given element. Use with - care. *element* is an element instance. + care. *element* is an element instance. - .. method:: find(path) + .. method:: find(match) - Finds the first toplevel element with given tag. Same as - getroot().find(path). *path* is the element to look for. Returns the - first matching element, or ``None`` if no element was found. + Finds the first toplevel element matching *match*. *match* may be a tag + name or path. Same as getroot().find(match). Returns the first matching + element, or ``None`` if no element was found. - .. method:: findall(path) + .. method:: findall(match) - Finds all toplevel elements with the given tag. Same as - getroot().findall(path). *path* is the element to look for. Returns a - list or :term:`iterator` containing all matching elements, in document - order. + Finds all matching subelements, by tag name or path. Same as + getroot().findall(match). *match* may be a tag name or path. Returns a + list containing all matching elements, in document order. - .. method:: findtext(path, default=None) + .. method:: findtext(match, default=None) Finds the element text for the first toplevel element with given tag. - Same as getroot().findtext(path). *path* is the toplevel element to look - for. *default* is the value to return if the element was not - found. Returns the text content of the first matching element, or the - default value no element was found. Note that if the element has is - found, but has no text content, this method returns an empty string. + Same as getroot().findtext(match). *match* may be a tag name or path. + *default* is the value to return if the element was not found. Returns + the text content of the first matching element, or the default value no + element was found. Note that if the element is found, but has no text + content, this method returns an empty string. .. method:: getiterator(tag=None) + .. deprecated:: 2.7 + Use method :meth:`ElementTree.iter` instead. + + + .. method:: getroot() + Returns the root element for this tree. + + + .. method:: iter(tag=None) + Creates and returns a tree iterator for the root element. The iterator - loops over all elements in this tree, in section order. *tag* is the tag + loops over all elements in this tree, in section order. *tag* is the tag to look for (default is to return all elements) - .. method:: getroot() + .. method:: iterfind(match) - Returns the root element for this tree. + Finds all matching subelements, by tag name or path. Same as + getroot().iterfind(match). Returns an iterable yielding all matching + elements in document order. + + .. versionadded:: 2.7 .. method:: parse(source, parser=None) - Loads an external XML section into this element tree. *source* is a file - name or file object. *parser* is an optional parser instance. If not - given, the standard XMLTreeBuilder parser is used. Returns the section + Loads an external XML section into this element tree. *source* is a file + name or file object. *parser* is an optional parser instance. If not + given, the standard XMLParser parser is used. Returns the section root element. - .. method:: write(file, encoding=None) + .. method:: write(file, encoding=None, xml_declaration=None, method="xml") - Writes the element tree to a file, as XML. *file* is a file name, or a - file object opened for writing. *encoding* [1]_ is the output encoding - (default is US-ASCII). + Writes the element tree to a file, as XML. *file* is a file name, or a + file object opened for writing. *encoding* [1]_ is the output encoding + (default is None). *xml_declaration* controls if an XML declaration + should be added to the file. Use False for never, True for always, None + for only if not US-ASCII or UTF-8 (default is None). *method* is either + ``"xml"``, ``"html"`` or ``"text"`` (default is ``"xml"``). Returns an + (optionally) encoded string. This is the XML file that is going to be manipulated:: @@ -388,13 +484,13 @@ >>> from xml.etree.ElementTree import ElementTree >>> tree = ElementTree() >>> tree.parse("index.xhtml") - + >>> p = tree.find("body/p") # Finds first occurrence of tag p in body >>> p - - >>> links = p.getiterator("a") # Returns list of all links + + >>> links = list(p.iter("a")) # Returns list of all links >>> links - [, ] + [, ] >>> for i in links: # Iterates through all found links ... i.attrib["target"] = "blank" >>> tree.write("output.xhtml") @@ -407,12 +503,12 @@ .. class:: QName(text_or_uri, tag=None) - QName wrapper. This can be used to wrap a QName attribute value, in order to - get proper namespace handling on output. *text_or_uri* is a string containing - the QName value, in the form {uri}local, or, if the tag argument is given, the - URI part of a QName. If *tag* is given, the first argument is interpreted as an - URI, and this argument is interpreted as a local name. :class:`QName` instances - are opaque. + QName wrapper. This can be used to wrap a QName attribute value, in order + to get proper namespace handling on output. *text_or_uri* is a string + containing the QName value, in the form {uri}local, or, if the tag argument + is given, the URI part of a QName. If *tag* is given, the first argument is + interpreted as an URI, and this argument is interpreted as a local name. + :class:`QName` instances are opaque. .. _elementtree-treebuilder-objects: @@ -423,74 +519,89 @@ .. class:: TreeBuilder(element_factory=None) - Generic element structure builder. This builder converts a sequence of start, - data, and end method calls to a well-formed element structure. You can use this - class to build an element structure using a custom XML parser, or a parser for - some other XML-like format. The *element_factory* is called to create new - Element instances when given. + Generic element structure builder. This builder converts a sequence of + start, data, and end method calls to a well-formed element structure. You + can use this class to build an element structure using a custom XML parser, + or a parser for some other XML-like format. The *element_factory* is called + to create new :class:`Element` instances when given. .. method:: close() - Flushes the parser buffers, and returns the toplevel document - element. Returns an Element instance. + Flushes the builder buffers, and returns the toplevel document + element. Returns an :class:`Element` instance. .. method:: data(data) - Adds text to the current element. *data* is a string. This should be - either an ASCII-only :class:`bytes` object or a :class:`str` object. + Adds text to the current element. *data* is a string. This should be + either a bytestring, or a Unicode string. .. method:: end(tag) - Closes the current element. *tag* is the element name. Returns the closed - element. + Closes the current element. *tag* is the element name. Returns the + closed element. .. method:: start(tag, attrs) - Opens a new element. *tag* is the element name. *attrs* is a dictionary - containing element attributes. Returns the opened element. + Opens a new element. *tag* is the element name. *attrs* is a dictionary + containing element attributes. Returns the opened element. + + In addition, a custom :class:`TreeBuilder` object can provide the + following method: -.. _elementtree-xmltreebuilder-objects: + .. method:: doctype(name, pubid, system) + + Handles a doctype declaration. *name* is the doctype name. *pubid* is + the public identifier. *system* is the system identifier. This method + does not exist on the default :class:`TreeBuilder` class. + + .. versionadded:: 2.7 -XMLTreeBuilder Objects ----------------------- +.. _elementtree-xmlparser-objects: -.. class:: XMLTreeBuilder(html=0, target=None) +XMLParser Objects +----------------- - Element structure builder for XML source data, based on the expat parser. *html* - are predefined HTML entities. This flag is not supported by the current - implementation. *target* is the target object. If omitted, the builder uses an - instance of the standard TreeBuilder class. + +.. class:: XMLParser(html=0, target=None, encoding=None) + + :class:`Element` structure builder for XML source data, based on the expat + parser. *html* are predefined HTML entities. This flag is not supported by + the current implementation. *target* is the target object. If omitted, the + builder uses an instance of the standard TreeBuilder class. *encoding* [1]_ + is optional. If given, the value overrides the encoding specified in the + XML file. .. method:: close() - Finishes feeding data to the parser. Returns an element structure. + Finishes feeding data to the parser. Returns an element structure. .. method:: doctype(name, pubid, system) - Handles a doctype declaration. *name* is the doctype name. *pubid* is the - public identifier. *system* is the system identifier. + .. deprecated:: 2.7 + Define the :meth:`TreeBuilder.doctype` method on a custom TreeBuilder + target. .. method:: feed(data) - Feeds data to the parser. *data* is encoded data. + Feeds data to the parser. *data* is encoded data. -:meth:`XMLTreeBuilder.feed` calls *target*\'s :meth:`start` method +:meth:`XMLParser.feed` calls *target*\'s :meth:`start` method for each opening tag, its :meth:`end` method for each closing tag, -and data is processed by method :meth:`data`. :meth:`XMLTreeBuilder.close` +and data is processed by method :meth:`data`. :meth:`XMLParser.close` calls *target*\'s method :meth:`close`. -:class:`XMLTreeBuilder` can be used not only for building a tree structure. +:class:`XMLParser` can be used not only for building a tree structure. This is an example of counting the maximum depth of an XML file:: - >>> from xml.etree.ElementTree import XMLTreeBuilder + >>> from xml.etree.ElementTree import XMLParser >>> class MaxDepth: # The target object of the parser ... maxDepth = 0 ... depth = 0 @@ -506,7 +617,7 @@ ... return self.maxDepth ... >>> target = MaxDepth() - >>> parser = XMLTreeBuilder(target=target) + >>> parser = XMLParser(target=target) >>> exampleXml = """ ... ... @@ -526,7 +637,6 @@ .. rubric:: Footnotes .. [#] The encoding string included in XML output should conform to the - appropriate standards. For example, "UTF-8" is valid, but "UTF8" is - not. See http://www.w3.org/TR/2006/REC-xml11-20060816/#NT-EncodingDecl + appropriate standards. For example, "UTF-8" is valid, but "UTF8" is + not. See http://www.w3.org/TR/2006/REC-xml11-20060816/#NT-EncodingDecl and http://www.iana.org/assignments/character-sets. - Deleted: python/branches/py3k-jit/Doc/library/xml.etree.rst ============================================================================== --- python/branches/py3k-jit/Doc/library/xml.etree.rst Tue Mar 16 21:40:29 2010 +++ (empty file) @@ -1,23 +0,0 @@ -:mod:`xml.etree` --- The ElementTree API for XML -================================================ - -.. module:: xml.etree - :synopsis: Package containing common ElementTree modules. -.. moduleauthor:: Fredrik Lundh - - -The ElementTree package is a simple, efficient, and quite popular library for -XML manipulation in Python. The :mod:`xml.etree` package contains the most -common components from the ElementTree API library. In the current release, -this package contains the :mod:`ElementTree`, :mod:`ElementPath`, and -:mod:`ElementInclude` modules from the full ElementTree distribution. - -.. XXX To be continued! - - -.. seealso:: - - `ElementTree Overview `_ - The home page for :mod:`ElementTree`. This includes links to additional - documentation, alternative implementations, and other add-ons. - Modified: python/branches/py3k-jit/Doc/make.bat ============================================================================== --- python/branches/py3k-jit/Doc/make.bat (original) +++ python/branches/py3k-jit/Doc/make.bat Tue Mar 16 21:40:29 2010 @@ -34,10 +34,10 @@ goto end :checkout -svn co %SVNROOT%/external/Sphinx-0.6.3/sphinx tools/sphinx -svn co %SVNROOT%/external/docutils-0.5/docutils tools/docutils -svn co %SVNROOT%/external/Jinja-2.1.1/jinja2 tools/jinja2 -svn co %SVNROOT%/external/Pygments-1.1.1/pygments tools/pygments +svn co %SVNROOT%/external/Sphinx-0.6.5/sphinx tools/sphinx +svn co %SVNROOT%/external/docutils-0.6/docutils tools/docutils +svn co %SVNROOT%/external/Jinja-2.3.1/jinja2 tools/jinja2 +svn co %SVNROOT%/external/Pygments-1.3.1/pygments tools/pygments goto end :update Modified: python/branches/py3k-jit/Doc/reference/executionmodel.rst ============================================================================== --- python/branches/py3k-jit/Doc/reference/executionmodel.rst (original) +++ python/branches/py3k-jit/Doc/reference/executionmodel.rst Tue Mar 16 21:40:29 2010 @@ -120,7 +120,7 @@ .. index:: pair: restricted; execution -The built-in namespace associated with the execution of a code block is actually +The builtins namespace associated with the execution of a code block is actually found by looking up the name ``__builtins__`` in its global namespace; this should be a dictionary or a module (in the latter case the module's dictionary is used). By default, when in the :mod:`__main__` module, ``__builtins__`` is @@ -132,7 +132,7 @@ .. impl-detail:: Users should not touch ``__builtins__``; it is strictly an implementation - detail. Users wanting to override values in the built-in namespace should + detail. Users wanting to override values in the builtins namespace should :keyword:`import` the :mod:`builtins` module and modify its attributes appropriately. Modified: python/branches/py3k-jit/Doc/reference/expressions.rst ============================================================================== --- python/branches/py3k-jit/Doc/reference/expressions.rst (original) +++ python/branches/py3k-jit/Doc/reference/expressions.rst Tue Mar 16 21:40:29 2010 @@ -1113,12 +1113,7 @@ pair: Conditional; expression pair: Boolean; operation -Boolean operations have the lowest priority of all Python operations: - .. productionlist:: - expression: `conditional_expression` | `lambda_form` - expression_nocond: `or_test` | `lambda_form_nocond` - conditional_expression: `or_test` ["if" `or_test` "else" `expression`] or_test: `and_test` | `or_test` "or" `and_test` and_test: `not_test` | `and_test` "and" `not_test` not_test: `comparison` | "not" `not_test` @@ -1135,10 +1130,6 @@ The operator :keyword:`not` yields ``True`` if its argument is false, ``False`` otherwise. -The expression ``x if C else y`` first evaluates *C* (*not* *x*); if *C* is -true, *x* is evaluated and its value is returned; otherwise, *y* is evaluated -and its value is returned. - .. index:: operator: and The expression ``x and y`` first evaluates *x*; if *x* is false, its value is @@ -1158,6 +1149,30 @@ 'foo'`` yields ``False``, not ``''``.) +Conditional Expressions +======================= + +.. versionadded:: 2.5 + +.. index:: + pair: conditional; expression + pair: ternary; operator + +.. productionlist:: + conditional_expression: `or_test` ["if" `or_test` "else" `expression`] + expression: `conditional_expression` | `lambda_form` + expression_nocond: `or_test` | `lambda_form_nocond` + +Conditional expressions (sometimes called a "ternary operator") have the lowest +priority of all Python operations. + +The expression ``x if C else y`` first evaluates the condition, *C* (*not* *x*); +if *C* is true, *x* is evaluated and its value is returned; otherwise, *y* is +evaluated and its value is returned. + +See :pep:`308` for more details about conditional expressions. + + .. _lambdas: .. _lambda: @@ -1252,6 +1267,8 @@ +===============================================+=====================================+ | :keyword:`lambda` | Lambda expression | +-----------------------------------------------+-------------------------------------+ +| :keyword:`if` -- :keyword:`else` | Conditional expression | ++-----------------------------------------------+-------------------------------------+ | :keyword:`or` | Boolean OR | +-----------------------------------------------+-------------------------------------+ | :keyword:`and` | Boolean AND | Modified: python/branches/py3k-jit/Doc/reference/lexical_analysis.rst ============================================================================== --- python/branches/py3k-jit/Doc/reference/lexical_analysis.rst (original) +++ python/branches/py3k-jit/Doc/reference/lexical_analysis.rst Tue Mar 16 21:40:29 2010 @@ -503,7 +503,7 @@ As in Standard C, up to three octal digits are accepted. (2) - Unlike in Standard C, at most two hex digits are accepted. + Unlike in Standard C, exactly two hex digits are required. (3) In a bytes literal, hexadecimal and octal escapes denote the byte with the Modified: python/branches/py3k-jit/Doc/tools/rstlint.py ============================================================================== --- python/branches/py3k-jit/Doc/tools/rstlint.py (original) +++ python/branches/py3k-jit/Doc/tools/rstlint.py Tue Mar 16 21:40:29 2010 @@ -1,4 +1,4 @@ -#!/usr/bin/env python +#!/usr/bin/env python3 # -*- coding: utf-8 -*- # Check for stylistic and formal issues in .rst and .py @@ -169,7 +169,6 @@ return 2 count = defaultdict(int) - out = sys.stdout for root, dirs, files in os.walk(path): # ignore subdirs controlled by svn @@ -212,8 +211,7 @@ csev = checker.severity if csev >= severity: for lno, msg in checker(fn, lines): - print('[%d] %s:%d: %s' % (csev, fn, lno, msg), - file=out) + print('[%d] %s:%d: %s' % (csev, fn, lno, msg)) count[csev] += 1 if verbose: print() Modified: python/branches/py3k-jit/Doc/tools/sphinxext/download.html ============================================================================== --- python/branches/py3k-jit/Doc/tools/sphinxext/download.html (original) +++ python/branches/py3k-jit/Doc/tools/sphinxext/download.html Tue Mar 16 21:40:29 2010 @@ -1,15 +1,14 @@ {% extends "layout.html" %} {% set title = 'Download' %} -{% set dlbase = 'http://docs.python.org/ftp/python/doc/' + release %} -{% block body %} +{% if daily is defined %} + {% set dlbase = pathto('archives', 1) %} +{% else %} + {% set dlbase = 'http://docs.python.org/ftp/python/doc/' + release %} +{% endif %} +{% block body %}

    If you have comments or suggestions for the Python documentation, please send email to docs at python.org.